diff --git a/packages/app-mobile/pluginAssets/index.js b/packages/app-mobile/pluginAssets/index.js index c7b6d4f76..6bc6d2fb8 100644 --- a/packages/app-mobile/pluginAssets/index.js +++ b/packages/app-mobile/pluginAssets/index.js @@ -1,5 +1,5 @@ module.exports = { -hash:"d4cb80ea030d8b01caeb56299491f244", files: { +hash:"c68f12e7c98bec08ffe937586df59734", files: { 'highlight.js/atom-one-dark-reasonable.css': { data: require('./highlight.js/atom-one-dark-reasonable.css.base64.js'), mime: 'text/css', encoding: 'base64' }, 'highlight.js/atom-one-light.css': { data: require('./highlight.js/atom-one-light.css.base64.js'), mime: 'text/css', encoding: 'base64' }, 'katex/fonts/KaTeX_AMS-Regular.woff2': { data: require('./katex/fonts/KaTeX_AMS-Regular.woff2.base64.js'), mime: 'application/octet-stream', encoding: 'base64' }, diff --git a/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js b/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js index ce204c171..99f3ce730 100644 --- a/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js +++ b/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js @@ -1 +1 @@ -module.exports = `KGZ1bmN0aW9uKHhBLGIwKXt0eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJnR5cGVvZiBtb2R1bGU8InUiP21vZHVsZS5leHBvcnRzPWIwKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoYjApOih4QT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp4QXx8c2VsZix4QS5tZXJtYWlkPWIwKCkpfSkodGhpcyxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB4QShpKXtmb3IodmFyIGE9W10sZj0xO2Y8YXJndW1lbnRzLmxlbmd0aDtmKyspYVtmLTFdPWFyZ3VtZW50c1tmXTt2YXIgcD1BcnJheS5mcm9tKHR5cGVvZiBpPT0ic3RyaW5nIj9baV06aSk7cFtwLmxlbmd0aC0xXT1wW3AubGVuZ3RoLTFdLnJlcGxhY2UoL1xyP1xuKFtcdCBdKikkLywiIik7dmFyIHc9cC5yZWR1Y2UoZnVuY3Rpb24oRSxfKXt2YXIgQT1fLm1hdGNoKC9cbihbXHQgXSt8KD8hXHMpLikvZyk7cmV0dXJuIEE/RS5jb25jYXQoQS5tYXAoZnVuY3Rpb24oSSl7dmFyIEIsTjtyZXR1cm4oTj0oQj1JLm1hdGNoKC9bXHQgXS9nKSk9PT1udWxsfHxCPT09dm9pZCAwP3ZvaWQgMDpCLmxlbmd0aCkhPT1udWxsJiZOIT09dm9pZCAwP046MH0pKTpFfSxbXSk7aWYody5sZW5ndGgpe3ZhciBtPW5ldyBSZWdFeHAoYApbCSBde2ArTWF0aC5taW4uYXBwbHkoTWF0aCx3KSsifSIsImciKTtwPXAubWFwKGZ1bmN0aW9uKEUpe3JldHVybiBFLnJlcGxhY2UobSxgCmApfSl9cFswXT1wWzBdLnJlcGxhY2UoL15ccj9cbi8sIiIpO3ZhciBiPXBbMF07cmV0dXJuIGEuZm9yRWFjaChmdW5jdGlvbihFLF8pe3ZhciBBPWIubWF0Y2goLyg/Ol58XG4pKCAqKSQvKSxJPUE/QVsxXToiIixCPUU7dHlwZW9mIEU9PSJzdHJpbmciJiZFLmluY2x1ZGVzKGAKYCkmJihCPVN0cmluZyhFKS5zcGxpdChgCmApLm1hcChmdW5jdGlvbihOLFIpe3JldHVybiBSPT09MD9OOiIiK0krTn0pLmpvaW4oYApgKSksYis9QitwW18rMV19KSxifXZhciBiMD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9O2Z1bmN0aW9uIEc3KGkpe3JldHVybiBpJiZpLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLCJkZWZhdWx0Iik/aS5kZWZhdWx0Oml9dmFyIGpMdD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGksYSl7KGZ1bmN0aW9uKGYscCl7aS5leHBvcnRzPXAoKX0pKGIwLGZ1bmN0aW9uKCl7dmFyIGY9MWUzLHA9NmU0LHc9MzZlNSxtPSJtaWxsaXNlY29uZCIsYj0ic2Vjb25kIixFPSJtaW51dGUiLF89ImhvdXIiLEE9ImRheSIsST0id2VlayIsQj0ibW9udGgiLE49InF1YXJ0ZXIiLFI9InllYXIiLHo9ImRhdGUiLFc9IkludmFsaWQgRGF0ZSIsZXQ9L14oXGR7NH0pWy0vXT8oXGR7MSwyfSk/Wy0vXT8oXGR7MCwyfSlbVHRcc10qKFxkezEsMn0pPzo/KFxkezEsMn0pPzo/KFxkezEsMn0pP1suOl0/KFxkKyk/JC8sc3Q9L1xbKFteXF1dKyldfFl7MSw0fXxNezEsNH18RHsxLDJ9fGR7MSw0fXxIezEsMn18aHsxLDJ9fGF8QXxtezEsMn18c3sxLDJ9fFp7MSwyfXxTU1MvZyxhdD17bmFtZToiZW4iLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSxtb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksb3JkaW5hbDpmdW5jdGlvbihudCl7dmFyIEl0PVsidGgiLCJzdCIsIm5kIiwicmQiXSxPdD1udCUxMDA7cmV0dXJuIlsiK250KyhJdFsoT3QtMjApJTEwXXx8SXRbT3RdfHxJdFswXSkrIl0ifX0sYnQ9ZnVuY3Rpb24obnQsSXQsT3Qpe3ZhciBCdD1TdHJpbmcobnQpO3JldHVybiFCdHx8QnQubGVuZ3RoPj1JdD9udDoiIitBcnJheShJdCsxLUJ0Lmxlbmd0aCkuam9pbihPdCkrbnR9LG10PXtzOmJ0LHo6ZnVuY3Rpb24obnQpe3ZhciBJdD0tbnQudXRjT2Zmc2V0KCksT3Q9TWF0aC5hYnMoSXQpLEJ0PU1hdGguZmxvb3IoT3QvNjApLEV0PU90JTYwO3JldHVybihJdDw9MD8iKyI6Ii0iKStidChCdCwyLCIwIikrIjoiK2J0KEV0LDIsIjAiKX0sbTpmdW5jdGlvbiBudChJdCxPdCl7aWYoSXQuZGF0ZSgpPE90LmRhdGUoKSlyZXR1cm4tbnQoT3QsSXQpO3ZhciBCdD0xMiooT3QueWVhcigpLUl0LnllYXIoKSkrKE90Lm1vbnRoKCktSXQubW9udGgoKSksRXQ9SXQuY2xvbmUoKS5hZGQoQnQsQiksWj1PdC1FdDwwLEN0PUl0LmNsb25lKCkuYWRkKEJ0KyhaPy0xOjEpLEIpO3JldHVybisoLShCdCsoT3QtRXQpLyhaP0V0LUN0OkN0LUV0KSl8fDApfSxhOmZ1bmN0aW9uKG50KXtyZXR1cm4gbnQ8MD9NYXRoLmNlaWwobnQpfHwwOk1hdGguZmxvb3IobnQpfSxwOmZ1bmN0aW9uKG50KXtyZXR1cm57TTpCLHk6Uix3OkksZDpBLEQ6eixoOl8sbTpFLHM6YixtczptLFE6Tn1bbnRdfHxTdHJpbmcobnR8fCIiKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL3MkLywiIil9LHU6ZnVuY3Rpb24obnQpe3JldHVybiBudD09PXZvaWQgMH19LHl0PSJlbiIsZnQ9e307ZnRbeXRdPWF0O3ZhciB1dD1mdW5jdGlvbihudCl7cmV0dXJuIG50IGluc3RhbmNlb2YgVX0sdnQ9ZnVuY3Rpb24gbnQoSXQsT3QsQnQpe3ZhciBFdDtpZighSXQpcmV0dXJuIHl0O2lmKHR5cGVvZiBJdD09InN0cmluZyIpe3ZhciBaPUl0LnRvTG93ZXJDYXNlKCk7ZnRbWl0mJihFdD1aKSxPdCYmKGZ0W1pdPU90LEV0PVopO3ZhciBDdD1JdC5zcGxpdCgiLSIpO2lmKCFFdCYmQ3QubGVuZ3RoPjEpcmV0dXJuIG50KEN0WzBdKX1lbHNle3ZhciB4dD1JdC5uYW1lO2Z0W3h0XT1JdCxFdD14dH1yZXR1cm4hQnQmJkV0JiYoeXQ9RXQpLEV0fHwhQnQmJnl0fSxYPWZ1bmN0aW9uKG50LEl0KXtpZih1dChudCkpcmV0dXJuIG50LmNsb25lKCk7dmFyIE90PXR5cGVvZiBJdD09Im9iamVjdCI/SXQ6e307cmV0dXJuIE90LmRhdGU9bnQsT3QuYXJncz1hcmd1bWVudHMsbmV3IFUoT3QpfSxwdD1tdDtwdC5sPXZ0LHB0Lmk9dXQscHQudz1mdW5jdGlvbihudCxJdCl7cmV0dXJuIFgobnQse2xvY2FsZTpJdC4kTCx1dGM6SXQuJHUseDpJdC4keCwkb2Zmc2V0Okl0LiRvZmZzZXR9KX07dmFyIFU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBudChPdCl7dGhpcy4kTD12dChPdC5sb2NhbGUsbnVsbCwhMCksdGhpcy5wYXJzZShPdCl9dmFyIEl0PW50LnByb3RvdHlwZTtyZXR1cm4gSXQucGFyc2U9ZnVuY3Rpb24oT3Qpe3RoaXMuJGQ9ZnVuY3Rpb24oQnQpe3ZhciBFdD1CdC5kYXRlLFo9QnQudXRjO2lmKEV0PT09bnVsbClyZXR1cm4gbmV3IERhdGUoTmFOKTtpZihwdC51KEV0KSlyZXR1cm4gbmV3IERhdGU7aWYoRXQgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShFdCk7aWYodHlwZW9mIEV0PT0ic3RyaW5nIiYmIS9aJC9pLnRlc3QoRXQpKXt2YXIgQ3Q9RXQubWF0Y2goZXQpO2lmKEN0KXt2YXIgeHQ9Q3RbMl0tMXx8MCxIdD0oQ3RbN118fCIwIikuc3Vic3RyaW5nKDAsMyk7cmV0dXJuIFo/bmV3IERhdGUoRGF0ZS5VVEMoQ3RbMV0seHQsQ3RbM118fDEsQ3RbNF18fDAsQ3RbNV18fDAsQ3RbNl18fDAsSHQpKTpuZXcgRGF0ZShDdFsxXSx4dCxDdFszXXx8MSxDdFs0XXx8MCxDdFs1XXx8MCxDdFs2XXx8MCxIdCl9fXJldHVybiBuZXcgRGF0ZShFdCl9KE90KSx0aGlzLiR4PU90Lnh8fHt9LHRoaXMuaW5pdCgpfSxJdC5pbml0PWZ1bmN0aW9uKCl7dmFyIE90PXRoaXMuJGQ7dGhpcy4keT1PdC5nZXRGdWxsWWVhcigpLHRoaXMuJE09T3QuZ2V0TW9udGgoKSx0aGlzLiREPU90LmdldERhdGUoKSx0aGlzLiRXPU90LmdldERheSgpLHRoaXMuJEg9T3QuZ2V0SG91cnMoKSx0aGlzLiRtPU90LmdldE1pbnV0ZXMoKSx0aGlzLiRzPU90LmdldFNlY29uZHMoKSx0aGlzLiRtcz1PdC5nZXRNaWxsaXNlY29uZHMoKX0sSXQuJHV0aWxzPWZ1bmN0aW9uKCl7cmV0dXJuIHB0fSxJdC5pc1ZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9TdHJpbmcoKSE9PVd9LEl0LmlzU2FtZT1mdW5jdGlvbihPdCxCdCl7dmFyIEV0PVgoT3QpO3JldHVybiB0aGlzLnN0YXJ0T2YoQnQpPD1FdCYmRXQ8PXRoaXMuZW5kT2YoQnQpfSxJdC5pc0FmdGVyPWZ1bmN0aW9uKE90LEJ0KXtyZXR1cm4gWChPdCk8dGhpcy5zdGFydE9mKEJ0KX0sSXQuaXNCZWZvcmU9ZnVuY3Rpb24oT3QsQnQpe3JldHVybiB0aGlzLmVuZE9mKEJ0KTxYKE90KX0sSXQuJGc9ZnVuY3Rpb24oT3QsQnQsRXQpe3JldHVybiBwdC51KE90KT90aGlzW0J0XTp0aGlzLnNldChFdCxPdCl9LEl0LnVuaXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxJdC52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQuZ2V0VGltZSgpfSxJdC5zdGFydE9mPWZ1bmN0aW9uKE90LEJ0KXt2YXIgRXQ9dGhpcyxaPSEhcHQudShCdCl8fEJ0LEN0PXB0LnAoT3QpLHh0PWZ1bmN0aW9uKFllLGNlKXt2YXIga2U9cHQudyhFdC4kdT9EYXRlLlVUQyhFdC4keSxjZSxZZSk6bmV3IERhdGUoRXQuJHksY2UsWWUpLEV0KTtyZXR1cm4gWj9rZTprZS5lbmRPZihBKX0sSHQ9ZnVuY3Rpb24oWWUsY2Upe3JldHVybiBwdC53KEV0LnRvRGF0ZSgpW1llXS5hcHBseShFdC50b0RhdGUoInMiKSwoWj9bMCwwLDAsMF06WzIzLDU5LDU5LDk5OV0pLnNsaWNlKGNlKSksRXQpfSxMZT10aGlzLiRXLEZ0PXRoaXMuJE0sZ249dGhpcy4kRCxTZT0ic2V0IisodGhpcy4kdT8iVVRDIjoiIik7c3dpdGNoKEN0KXtjYXNlIFI6cmV0dXJuIFo/eHQoMSwwKTp4dCgzMSwxMSk7Y2FzZSBCOnJldHVybiBaP3h0KDEsRnQpOnh0KDAsRnQrMSk7Y2FzZSBJOnZhciBtZT10aGlzLiRsb2NhbGUoKS53ZWVrU3RhcnR8fDAsVmU9KExlPG1lP0xlKzc6TGUpLW1lO3JldHVybiB4dChaP2duLVZlOmduKyg2LVZlKSxGdCk7Y2FzZSBBOmNhc2UgejpyZXR1cm4gSHQoU2UrIkhvdXJzIiwwKTtjYXNlIF86cmV0dXJuIEh0KFNlKyJNaW51dGVzIiwxKTtjYXNlIEU6cmV0dXJuIEh0KFNlKyJTZWNvbmRzIiwyKTtjYXNlIGI6cmV0dXJuIEh0KFNlKyJNaWxsaXNlY29uZHMiLDMpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xvbmUoKX19LEl0LmVuZE9mPWZ1bmN0aW9uKE90KXtyZXR1cm4gdGhpcy5zdGFydE9mKE90LCExKX0sSXQuJHNldD1mdW5jdGlvbihPdCxCdCl7dmFyIEV0LFo9cHQucChPdCksQ3Q9InNldCIrKHRoaXMuJHU/IlVUQyI6IiIpLHh0PShFdD17fSxFdFtBXT1DdCsiRGF0ZSIsRXRbel09Q3QrIkRhdGUiLEV0W0JdPUN0KyJNb250aCIsRXRbUl09Q3QrIkZ1bGxZZWFyIixFdFtfXT1DdCsiSG91cnMiLEV0W0VdPUN0KyJNaW51dGVzIixFdFtiXT1DdCsiU2Vjb25kcyIsRXRbbV09Q3QrIk1pbGxpc2Vjb25kcyIsRXQpW1pdLEh0PVo9PT1BP3RoaXMuJEQrKEJ0LXRoaXMuJFcpOkJ0O2lmKFo9PT1CfHxaPT09Uil7dmFyIExlPXRoaXMuY2xvbmUoKS5zZXQoeiwxKTtMZS4kZFt4dF0oSHQpLExlLmluaXQoKSx0aGlzLiRkPUxlLnNldCh6LE1hdGgubWluKHRoaXMuJEQsTGUuZGF5c0luTW9udGgoKSkpLiRkfWVsc2UgeHQmJnRoaXMuJGRbeHRdKEh0KTtyZXR1cm4gdGhpcy5pbml0KCksdGhpc30sSXQuc2V0PWZ1bmN0aW9uKE90LEJ0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLiRzZXQoT3QsQnQpfSxJdC5nZXQ9ZnVuY3Rpb24oT3Qpe3JldHVybiB0aGlzW3B0LnAoT3QpXSgpfSxJdC5hZGQ9ZnVuY3Rpb24oT3QsQnQpe3ZhciBFdCxaPXRoaXM7T3Q9TnVtYmVyKE90KTt2YXIgQ3Q9cHQucChCdCkseHQ9ZnVuY3Rpb24oRnQpe3ZhciBnbj1YKFopO3JldHVybiBwdC53KGduLmRhdGUoZ24uZGF0ZSgpK01hdGgucm91bmQoRnQqT3QpKSxaKX07aWYoQ3Q9PT1CKXJldHVybiB0aGlzLnNldChCLHRoaXMuJE0rT3QpO2lmKEN0PT09UilyZXR1cm4gdGhpcy5zZXQoUix0aGlzLiR5K090KTtpZihDdD09PUEpcmV0dXJuIHh0KDEpO2lmKEN0PT09SSlyZXR1cm4geHQoNyk7dmFyIEh0PShFdD17fSxFdFtFXT1wLEV0W19dPXcsRXRbYl09ZixFdClbQ3RdfHwxLExlPXRoaXMuJGQuZ2V0VGltZSgpK090Kkh0O3JldHVybiBwdC53KExlLHRoaXMpfSxJdC5zdWJ0cmFjdD1mdW5jdGlvbihPdCxCdCl7cmV0dXJuIHRoaXMuYWRkKC0xKk90LEJ0KX0sSXQuZm9ybWF0PWZ1bmN0aW9uKE90KXt2YXIgQnQ9dGhpcyxFdD10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIEV0LmludmFsaWREYXRlfHxXO3ZhciBaPU90fHwiWVlZWS1NTS1ERFRISDptbTpzc1oiLEN0PXB0LnoodGhpcykseHQ9dGhpcy4kSCxIdD10aGlzLiRtLExlPXRoaXMuJE0sRnQ9RXQud2Vla2RheXMsZ249RXQubW9udGhzLFNlPWZ1bmN0aW9uKGNlLGtlLHp0LHJlKXtyZXR1cm4gY2UmJihjZVtrZV18fGNlKEJ0LFopKXx8enRba2VdLnNsaWNlKDAscmUpfSxtZT1mdW5jdGlvbihjZSl7cmV0dXJuIHB0LnMoeHQlMTJ8fDEyLGNlLCIwIil9LFZlPUV0Lm1lcmlkaWVtfHxmdW5jdGlvbihjZSxrZSx6dCl7dmFyIHJlPWNlPDEyPyJBTSI6IlBNIjtyZXR1cm4genQ/cmUudG9Mb3dlckNhc2UoKTpyZX0sWWU9e1lZOlN0cmluZyh0aGlzLiR5KS5zbGljZSgtMiksWVlZWTp0aGlzLiR5LE06TGUrMSxNTTpwdC5zKExlKzEsMiwiMCIpLE1NTTpTZShFdC5tb250aHNTaG9ydCxMZSxnbiwzKSxNTU1NOlNlKGduLExlKSxEOnRoaXMuJEQsREQ6cHQucyh0aGlzLiRELDIsIjAiKSxkOlN0cmluZyh0aGlzLiRXKSxkZDpTZShFdC53ZWVrZGF5c01pbix0aGlzLiRXLEZ0LDIpLGRkZDpTZShFdC53ZWVrZGF5c1Nob3J0LHRoaXMuJFcsRnQsMyksZGRkZDpGdFt0aGlzLiRXXSxIOlN0cmluZyh4dCksSEg6cHQucyh4dCwyLCIwIiksaDptZSgxKSxoaDptZSgyKSxhOlZlKHh0LEh0LCEwKSxBOlZlKHh0LEh0LCExKSxtOlN0cmluZyhIdCksbW06cHQucyhIdCwyLCIwIiksczpTdHJpbmcodGhpcy4kcyksc3M6cHQucyh0aGlzLiRzLDIsIjAiKSxTU1M6cHQucyh0aGlzLiRtcywzLCIwIiksWjpDdH07cmV0dXJuIFoucmVwbGFjZShzdCxmdW5jdGlvbihjZSxrZSl7cmV0dXJuIGtlfHxZZVtjZV18fEN0LnJlcGxhY2UoIjoiLCIiKX0pfSxJdC51dGNPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gMTUqLU1hdGgucm91bmQodGhpcy4kZC5nZXRUaW1lem9uZU9mZnNldCgpLzE1KX0sSXQuZGlmZj1mdW5jdGlvbihPdCxCdCxFdCl7dmFyIFosQ3Q9cHQucChCdCkseHQ9WChPdCksSHQ9KHh0LnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpKnAsTGU9dGhpcy14dCxGdD1wdC5tKHRoaXMseHQpO3JldHVybiBGdD0oWj17fSxaW1JdPUZ0LzEyLFpbQl09RnQsWltOXT1GdC8zLFpbSV09KExlLUh0KS82MDQ4ZTUsWltBXT0oTGUtSHQpLzg2NGU1LFpbX109TGUvdyxaW0VdPUxlL3AsWltiXT1MZS9mLFopW0N0XXx8TGUsRXQ/RnQ6cHQuYShGdCl9LEl0LmRheXNJbk1vbnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kT2YoQikuJER9LEl0LiRsb2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnRbdGhpcy4kTF19LEl0LmxvY2FsZT1mdW5jdGlvbihPdCxCdCl7aWYoIU90KXJldHVybiB0aGlzLiRMO3ZhciBFdD10aGlzLmNsb25lKCksWj12dChPdCxCdCwhMCk7cmV0dXJuIFomJihFdC4kTD1aKSxFdH0sSXQuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gcHQudyh0aGlzLiRkLHRoaXMpfSxJdC50b0RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpfSxJdC50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LEl0LnRvSVNPU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9JU09TdHJpbmcoKX0sSXQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b1VUQ1N0cmluZygpfSxudH0oKSxUdD1VLnByb3RvdHlwZTtyZXR1cm4gWC5wcm90b3R5cGU9VHQsW1siJG1zIixtXSxbIiRzIixiXSxbIiRtIixFXSxbIiRIIixfXSxbIiRXIixBXSxbIiRNIixCXSxbIiR5IixSXSxbIiREIix6XV0uZm9yRWFjaChmdW5jdGlvbihudCl7VHRbbnRbMV1dPWZ1bmN0aW9uKEl0KXtyZXR1cm4gdGhpcy4kZyhJdCxudFswXSxudFsxXSl9fSksWC5leHRlbmQ9ZnVuY3Rpb24obnQsSXQpe3JldHVybiBudC4kaXx8KG50KEl0LFUsWCksbnQuJGk9ITApLFh9LFgubG9jYWxlPXZ0LFguaXNEYXlqcz11dCxYLnVuaXg9ZnVuY3Rpb24obnQpe3JldHVybiBYKDFlMypudCl9LFguZW49ZnRbeXRdLFguTHM9ZnQsWC5wPXt9LFh9KX0pKGpMdCk7dmFyIG94ZT1qTHQuZXhwb3J0cztjb25zdCB3MD1HNyhveGUpLHA1PXt0cmFjZTowLGRlYnVnOjEsaW5mbzoyLHdhcm46MyxlcnJvcjo0LGZhdGFsOjV9LFV0PXt0cmFjZTooLi4uaSk9Pnt9LGRlYnVnOiguLi5pKT0+e30saW5mbzooLi4uaSk9Pnt9LHdhcm46KC4uLmkpPT57fSxlcnJvcjooLi4uaSk9Pnt9LGZhdGFsOiguLi5pKT0+e319LFhmdD1mdW5jdGlvbihpPSJmYXRhbCIpe2xldCBhPXA1LmZhdGFsO3R5cGVvZiBpPT0ic3RyaW5nIj8oaT1pLnRvTG93ZXJDYXNlKCksaSBpbiBwNSYmKGE9cDVbaV0pKTp0eXBlb2YgaT09Im51bWJlciImJihhPWkpLFV0LnRyYWNlPSgpPT57fSxVdC5kZWJ1Zz0oKT0+e30sVXQuaW5mbz0oKT0+e30sVXQud2Fybj0oKT0+e30sVXQuZXJyb3I9KCk9Pnt9LFV0LmZhdGFsPSgpPT57fSxhPD1wNS5mYXRhbCYmKFV0LmZhdGFsPWNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsUTIoIkZBVEFMIiksImNvbG9yOiBvcmFuZ2UiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzVtIixRMigiRkFUQUwiKSkpLGE8PXA1LmVycm9yJiYoVXQuZXJyb3I9Y29uc29sZS5lcnJvcj9jb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSxRMigiRVJST1IiKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszMW0iLFEyKCJFUlJPUiIpKSksYTw9cDUud2FybiYmKFV0Lndhcm49Y29uc29sZS53YXJuP2NvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUsUTIoIldBUk4iKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszM20iLFEyKCJXQVJOIikpKSxhPD1wNS5pbmZvJiYoVXQuaW5mbz1jb25zb2xlLmluZm8/Y29uc29sZS5pbmZvLmJpbmQoY29uc29sZSxRMigiSU5GTyIpLCJjb2xvcjogbGlnaHRibHVlIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCJceDFCWzM0bSIsUTIoIklORk8iKSkpLGE8PXA1LmRlYnVnJiYoVXQuZGVidWc9Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmJpbmQoY29uc29sZSxRMigiREVCVUciKSwiY29sb3I6IGxpZ2h0Z3JlZW4iKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzJtIixRMigiREVCVUciKSkpLGE8PXA1LnRyYWNlJiYoVXQudHJhY2U9Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmJpbmQoY29uc29sZSxRMigiVFJBQ0UiKSwiY29sb3I6IGxpZ2h0Z3JlZW4iKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzJtIixRMigiVFJBQ0UiKSkpfSxRMj1pPT5gJWMke3cwKCkuZm9ybWF0KCJzcy5TU1MiKX0gOiAke2l9IDogYDt2YXIgUWZ0PXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShRZnQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpaz1RZnQuc2FuaXRpemVVcmw9dm9pZCAwLGN4ZT0vXihbXlx3XSopKGphdmFzY3JpcHR8ZGF0YXx2YnNjcmlwdCkvaW0sdXhlPS8mIyhcdyspKF5cd3w7KT8vZyxseGU9LyYobmV3bGluZXx0YWIpOy9naSxoeGU9L1tcdTAwMDAtXHUwMDFGXHUwMDdGLVx1MDA5Rlx1MjAwMC1cdTIwMERcdUZFRkZdL2dpbSxmeGU9L14uKyg6fCZjb2xvbjspL2dpbSxkeGU9WyIuIiwiLyJdO2Z1bmN0aW9uIGd4ZShpKXtyZXR1cm4gZHhlLmluZGV4T2YoaVswXSk+LTF9ZnVuY3Rpb24gcHhlKGkpe3JldHVybiBpLnJlcGxhY2UodXhlLGZ1bmN0aW9uKGEsZil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZil9KX1mdW5jdGlvbiBieGUoaSl7dmFyIGE9cHhlKGl8fCIiKS5yZXBsYWNlKGx4ZSwiIikucmVwbGFjZShoeGUsIiIpLnRyaW0oKTtpZighYSlyZXR1cm4iYWJvdXQ6YmxhbmsiO2lmKGd4ZShhKSlyZXR1cm4gYTt2YXIgZj1hLm1hdGNoKGZ4ZSk7aWYoIWYpcmV0dXJuIGE7dmFyIHA9ZlswXTtyZXR1cm4gY3hlLnRlc3QocCk/ImFib3V0OmJsYW5rIjphfWlrPVFmdC5zYW5pdGl6ZVVybD1ieGU7ZnVuY3Rpb24gRVUoaSxhKXtyZXR1cm4gaT09bnVsbHx8YT09bnVsbD9OYU46aTxhPy0xOmk+YT8xOmk+PWE/MDpOYU59ZnVuY3Rpb24gd3hlKGksYSl7cmV0dXJuIGk9PW51bGx8fGE9PW51bGw/TmFOOmE8aT8tMTphPmk/MTphPj1pPzA6TmFOfWZ1bmN0aW9uIFpmdChpKXtsZXQgYSxmLHA7aS5sZW5ndGghPT0yPyhhPUVVLGY9KEUsXyk9PkVVKGkoRSksXykscD0oRSxfKT0+aShFKS1fKTooYT1pPT09RVV8fGk9PT13eGU/aTp2eGUsZj1pLHA9aSk7ZnVuY3Rpb24gdyhFLF8sQT0wLEk9RS5sZW5ndGgpe2lmKEE8SSl7aWYoYShfLF8pIT09MClyZXR1cm4gSTtkb3tjb25zdCBCPUErST4+PjE7ZihFW0JdLF8pPDA/QT1CKzE6ST1CfXdoaWxlKEE8SSl9cmV0dXJuIEF9ZnVuY3Rpb24gbShFLF8sQT0wLEk9RS5sZW5ndGgpe2lmKEE8SSl7aWYoYShfLF8pIT09MClyZXR1cm4gSTtkb3tjb25zdCBCPUErST4+PjE7ZihFW0JdLF8pPD0wP0E9QisxOkk9Qn13aGlsZShBPEkpfXJldHVybiBBfWZ1bmN0aW9uIGIoRSxfLEE9MCxJPUUubGVuZ3RoKXtjb25zdCBCPXcoRSxfLEEsSS0xKTtyZXR1cm4gQj5BJiZwKEVbQi0xXSxfKT4tcChFW0JdLF8pP0ItMTpCfXJldHVybntsZWZ0OncsY2VudGVyOmIscmlnaHQ6bX19ZnVuY3Rpb24gdnhlKCl7cmV0dXJuIDB9ZnVuY3Rpb24gbXhlKGkpe3JldHVybiBpPT09bnVsbD9OYU46K2l9Y29uc3QgeXhlPVpmdChFVSkucmlnaHQ7WmZ0KG14ZSkuY2VudGVyO2NvbnN0IHh4ZT15eGU7Y2xhc3MgJEx0IGV4dGVuZHMgTWFwe2NvbnN0cnVjdG9yKGEsZj1UeGUpe2lmKHN1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7X2ludGVybjp7dmFsdWU6bmV3IE1hcH0sX2tleTp7dmFsdWU6Zn19KSxhIT1udWxsKWZvcihjb25zdFtwLHddb2YgYSl0aGlzLnNldChwLHcpfWdldChhKXtyZXR1cm4gc3VwZXIuZ2V0KHpMdCh0aGlzLGEpKX1oYXMoYSl7cmV0dXJuIHN1cGVyLmhhcyh6THQodGhpcyxhKSl9c2V0KGEsZil7cmV0dXJuIHN1cGVyLnNldChreGUodGhpcyxhKSxmKX1kZWxldGUoYSl7cmV0dXJuIHN1cGVyLmRlbGV0ZShFeGUodGhpcyxhKSl9fWZ1bmN0aW9uIHpMdCh7X2ludGVybjppLF9rZXk6YX0sZil7Y29uc3QgcD1hKGYpO3JldHVybiBpLmhhcyhwKT9pLmdldChwKTpmfWZ1bmN0aW9uIGt4ZSh7X2ludGVybjppLF9rZXk6YX0sZil7Y29uc3QgcD1hKGYpO3JldHVybiBpLmhhcyhwKT9pLmdldChwKTooaS5zZXQocCxmKSxmKX1mdW5jdGlvbiBFeGUoe19pbnRlcm46aSxfa2V5OmF9LGYpe2NvbnN0IHA9YShmKTtyZXR1cm4gaS5oYXMocCkmJihmPWkuZ2V0KHApLGkuZGVsZXRlKHApKSxmfWZ1bmN0aW9uIFR4ZShpKXtyZXR1cm4gaSE9PW51bGwmJnR5cGVvZiBpPT0ib2JqZWN0Ij9pLnZhbHVlT2YoKTppfWNvbnN0IEN4ZT1NYXRoLnNxcnQoNTApLF94ZT1NYXRoLnNxcnQoMTApLFN4ZT1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gVFUoaSxhLGYpe2NvbnN0IHA9KGEtaSkvTWF0aC5tYXgoMCxmKSx3PU1hdGguZmxvb3IoTWF0aC5sb2cxMChwKSksbT1wL01hdGgucG93KDEwLHcpLGI9bT49Q3hlPzEwOm0+PV94ZT81Om0+PVN4ZT8yOjE7bGV0IEUsXyxBO3JldHVybiB3PDA/KEE9TWF0aC5wb3coMTAsLXcpL2IsRT1NYXRoLnJvdW5kKGkqQSksXz1NYXRoLnJvdW5kKGEqQSksRS9BPGkmJisrRSxfL0E+YSYmLS1fLEE9LUEpOihBPU1hdGgucG93KDEwLHcpKmIsRT1NYXRoLnJvdW5kKGkvQSksXz1NYXRoLnJvdW5kKGEvQSksRSpBPGkmJisrRSxfKkE+YSYmLS1fKSxfPEUmJi41PD1mJiZmPDI/VFUoaSxhLGYqMik6W0UsXyxBXX1mdW5jdGlvbiBBeGUoaSxhLGYpe2lmKGE9K2EsaT0raSxmPStmLCEoZj4wKSlyZXR1cm5bXTtpZihpPT09YSlyZXR1cm5baV07Y29uc3QgcD1hPGksW3csbSxiXT1wP1RVKGEsaSxmKTpUVShpLGEsZik7aWYoIShtPj13KSlyZXR1cm5bXTtjb25zdCBFPW0tdysxLF89bmV3IEFycmF5KEUpO2lmKHApaWYoYjwwKWZvcihsZXQgQT0wO0E8RTsrK0EpX1tBXT0obS1BKS8tYjtlbHNlIGZvcihsZXQgQT0wO0E8RTsrK0EpX1tBXT0obS1BKSpiO2Vsc2UgaWYoYjwwKWZvcihsZXQgQT0wO0E8RTsrK0EpX1tBXT0odytBKS8tYjtlbHNlIGZvcihsZXQgQT0wO0E8RTsrK0EpX1tBXT0odytBKSpiO3JldHVybiBffWZ1bmN0aW9uIEpmdChpLGEsZil7cmV0dXJuIGE9K2EsaT0raSxmPStmLFRVKGksYSxmKVsyXX1mdW5jdGlvbiB0MXQoaSxhLGYpe2E9K2EsaT0raSxmPStmO2NvbnN0IHA9YTxpLHc9cD9KZnQoYSxpLGYpOkpmdChpLGEsZik7cmV0dXJuKHA/LTE6MSkqKHc8MD8xLy13OncpfWZ1bmN0aW9uIEx4ZShpLGEpe2xldCBmO2lmKGE9PT12b2lkIDApZm9yKGNvbnN0IHAgb2YgaSlwIT1udWxsJiYoZjxwfHxmPT09dm9pZCAwJiZwPj1wKSYmKGY9cCk7ZWxzZXtsZXQgcD0tMTtmb3IobGV0IHcgb2YgaSkodz1hKHcsKytwLGkpKSE9bnVsbCYmKGY8d3x8Zj09PXZvaWQgMCYmdz49dykmJihmPXcpfXJldHVybiBmfWZ1bmN0aW9uIE14ZShpLGEpe2xldCBmO2lmKGE9PT12b2lkIDApZm9yKGNvbnN0IHAgb2YgaSlwIT1udWxsJiYoZj5wfHxmPT09dm9pZCAwJiZwPj1wKSYmKGY9cCk7ZWxzZXtsZXQgcD0tMTtmb3IobGV0IHcgb2YgaSkodz1hKHcsKytwLGkpKSE9bnVsbCYmKGY+d3x8Zj09PXZvaWQgMCYmdz49dykmJihmPXcpfXJldHVybiBmfWZ1bmN0aW9uIER4ZShpLGEsZil7aT0raSxhPSthLGY9KHc9YXJndW1lbnRzLmxlbmd0aCk8Mj8oYT1pLGk9MCwxKTp3PDM/MTorZjtmb3IodmFyIHA9LTEsdz1NYXRoLm1heCgwLE1hdGguY2VpbCgoYS1pKS9mKSl8MCxtPW5ldyBBcnJheSh3KTsrK3A8dzspbVtwXT1pK3AqZjtyZXR1cm4gbX1mdW5jdGlvbiBJeGUoaSl7cmV0dXJuIGl9dmFyIENVPTEsZTF0PTIsbjF0PTMsX1U9NCxxTHQ9MWUtNjtmdW5jdGlvbiBPeGUoaSl7cmV0dXJuInRyYW5zbGF0ZSgiK2krIiwwKSJ9ZnVuY3Rpb24gUHhlKGkpe3JldHVybiJ0cmFuc2xhdGUoMCwiK2krIikifWZ1bmN0aW9uIEZ4ZShpKXtyZXR1cm4gYT0+K2koYSl9ZnVuY3Rpb24gTnhlKGksYSl7cmV0dXJuIGE9TWF0aC5tYXgoMCxpLmJhbmR3aWR0aCgpLWEqMikvMixpLnJvdW5kKCkmJihhPU1hdGgucm91bmQoYSkpLGY9PitpKGYpK2F9ZnVuY3Rpb24gQnhlKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIEhMdChpLGEpe3ZhciBmPVtdLHA9bnVsbCx3PW51bGwsbT02LGI9NixFPTMsXz10eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmRldmljZVBpeGVsUmF0aW8+MT8wOi41LEE9aT09PUNVfHxpPT09X1U/LTE6MSxJPWk9PT1fVXx8aT09PWUxdD8ieCI6InkiLEI9aT09PUNVfHxpPT09bjF0P094ZTpQeGU7ZnVuY3Rpb24gTihSKXt2YXIgej1wPz8oYS50aWNrcz9hLnRpY2tzLmFwcGx5KGEsZik6YS5kb21haW4oKSksVz13Pz8oYS50aWNrRm9ybWF0P2EudGlja0Zvcm1hdC5hcHBseShhLGYpOkl4ZSksZXQ9TWF0aC5tYXgobSwwKStFLHN0PWEucmFuZ2UoKSxhdD0rc3RbMF0rXyxidD0rc3Rbc3QubGVuZ3RoLTFdK18sbXQ9KGEuYmFuZHdpZHRoP054ZTpGeGUpKGEuY29weSgpLF8pLHl0PVIuc2VsZWN0aW9uP1Iuc2VsZWN0aW9uKCk6UixmdD15dC5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksdXQ9eXQuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoeixhKS5vcmRlcigpLHZ0PXV0LmV4aXQoKSxYPXV0LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIikscHQ9dXQuc2VsZWN0KCJsaW5lIiksVT11dC5zZWxlY3QoInRleHQiKTtmdD1mdC5tZXJnZShmdC5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKSksdXQ9dXQubWVyZ2UoWCkscHQ9cHQubWVyZ2UoWC5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKEkrIjIiLEEqbSkpLFU9VS5tZXJnZShYLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKEksQSpldCkuYXR0cigiZHkiLGk9PT1DVT8iMGVtIjppPT09bjF0PyIwLjcxZW0iOiIwLjMyZW0iKSksUiE9PXl0JiYoZnQ9ZnQudHJhbnNpdGlvbihSKSx1dD11dC50cmFuc2l0aW9uKFIpLHB0PXB0LnRyYW5zaXRpb24oUiksVT1VLnRyYW5zaXRpb24oUiksdnQ9dnQudHJhbnNpdGlvbihSKS5hdHRyKCJvcGFjaXR5IixxTHQpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oVHQpe3JldHVybiBpc0Zpbml0ZShUdD1tdChUdCkpP0IoVHQrXyk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSksWC5hdHRyKCJvcGFjaXR5IixxTHQpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oVHQpe3ZhciBudD10aGlzLnBhcmVudE5vZGUuX19heGlzO3JldHVybiBCKChudCYmaXNGaW5pdGUobnQ9bnQoVHQpKT9udDptdChUdCkpK18pfSkpLHZ0LnJlbW92ZSgpLGZ0LmF0dHIoImQiLGk9PT1fVXx8aT09PWUxdD9iPyJNIitBKmIrIiwiK2F0KyJIIitfKyJWIitidCsiSCIrQSpiOiJNIitfKyIsIithdCsiViIrYnQ6Yj8iTSIrYXQrIiwiK0EqYisiViIrXysiSCIrYnQrIlYiK0EqYjoiTSIrYXQrIiwiK18rIkgiK2J0KSx1dC5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKFR0KXtyZXR1cm4gQihtdChUdCkrXyl9KSxwdC5hdHRyKEkrIjIiLEEqbSksVS5hdHRyKEksQSpldCkudGV4dChXKSx5dC5maWx0ZXIoQnhlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIixpPT09ZTF0PyJzdGFydCI6aT09PV9VPyJlbmQiOiJtaWRkbGUiKSx5dC5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5fX2F4aXM9bXR9KX1yZXR1cm4gTi5zY2FsZT1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1SLE4pOmF9LE4udGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gZj1BcnJheS5mcm9tKGFyZ3VtZW50cyksTn0sTi50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPVI9PW51bGw/W106QXJyYXkuZnJvbShSKSxOKTpmLnNsaWNlKCl9LE4udGlja1ZhbHVlcz1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1SPT1udWxsP251bGw6QXJyYXkuZnJvbShSKSxOKTpwJiZwLnNsaWNlKCl9LE4udGlja0Zvcm1hdD1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz1SLE4pOnd9LE4udGlja1NpemU9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09Yj0rUixOKTptfSxOLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09K1IsTik6bX0sTi50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPStSLE4pOmJ9LE4udGlja1BhZGRpbmc9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9K1IsTik6RX0sTi5vZmZzZXQ9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89K1IsTik6X30sTn1mdW5jdGlvbiBSeGUoaSl7cmV0dXJuIEhMdChDVSxpKX1mdW5jdGlvbiBqeGUoaSl7cmV0dXJuIEhMdChuMXQsaSl9dmFyICR4ZT17dmFsdWU6KCk9Pnt9fTtmdW5jdGlvbiBWTHQoKXtmb3IodmFyIGk9MCxhPWFyZ3VtZW50cy5sZW5ndGgsZj17fSxwO2k8YTsrK2kpe2lmKCEocD1hcmd1bWVudHNbaV0rIiIpfHxwIGluIGZ8fC9bXHMuXS8udGVzdChwKSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIitwKTtmW3BdPVtdfXJldHVybiBuZXcgU1UoZil9ZnVuY3Rpb24gU1UoaSl7dGhpcy5fPWl9ZnVuY3Rpb24genhlKGksYSl7cmV0dXJuIGkudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbihmKXt2YXIgcD0iIix3PWYuaW5kZXhPZigiLiIpO2lmKHc+PTAmJihwPWYuc2xpY2UodysxKSxmPWYuc2xpY2UoMCx3KSksZiYmIWEuaGFzT3duUHJvcGVydHkoZikpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZik7cmV0dXJue3R5cGU6ZixuYW1lOnB9fSl9U1UucHJvdG90eXBlPVZMdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlNVLG9uOmZ1bmN0aW9uKGksYSl7dmFyIGY9dGhpcy5fLHA9enhlKGkrIiIsZiksdyxtPS0xLGI9cC5sZW5ndGg7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IoOysrbTxiOylpZigodz0oaT1wW21dKS50eXBlKSYmKHc9cXhlKGZbd10saS5uYW1lKSkpcmV0dXJuIHc7cmV0dXJufWlmKGEhPW51bGwmJnR5cGVvZiBhIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIithKTtmb3IoOysrbTxiOylpZih3PShpPXBbbV0pLnR5cGUpZlt3XT1HTHQoZlt3XSxpLm5hbWUsYSk7ZWxzZSBpZihhPT1udWxsKWZvcih3IGluIGYpZlt3XT1HTHQoZlt3XSxpLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9LGNvcHk6ZnVuY3Rpb24oKXt2YXIgaT17fSxhPXRoaXMuXztmb3IodmFyIGYgaW4gYSlpW2ZdPWFbZl0uc2xpY2UoKTtyZXR1cm4gbmV3IFNVKGkpfSxjYWxsOmZ1bmN0aW9uKGksYSl7aWYoKHc9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgZj1uZXcgQXJyYXkodykscD0wLHcsbTtwPHc7KytwKWZbcF09YXJndW1lbnRzW3ArMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShpKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitpKTtmb3IobT10aGlzLl9baV0scD0wLHc9bS5sZW5ndGg7cDx3OysrcCltW3BdLnZhbHVlLmFwcGx5KGEsZil9LGFwcGx5OmZ1bmN0aW9uKGksYSxmKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGkpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2kpO2Zvcih2YXIgcD10aGlzLl9baV0sdz0wLG09cC5sZW5ndGg7dzxtOysrdylwW3ddLnZhbHVlLmFwcGx5KGEsZil9fTtmdW5jdGlvbiBxeGUoaSxhKXtmb3IodmFyIGY9MCxwPWkubGVuZ3RoLHc7ZjxwOysrZilpZigodz1pW2ZdKS5uYW1lPT09YSlyZXR1cm4gdy52YWx1ZX1mdW5jdGlvbiBHTHQoaSxhLGYpe2Zvcih2YXIgcD0wLHc9aS5sZW5ndGg7cDx3OysrcClpZihpW3BdLm5hbWU9PT1hKXtpW3BdPSR4ZSxpPWkuc2xpY2UoMCxwKS5jb25jYXQoaS5zbGljZShwKzEpKTticmVha31yZXR1cm4gZiE9bnVsbCYmaS5wdXNoKHtuYW1lOmEsdmFsdWU6Zn0pLGl9dmFyIHIxdD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7Y29uc3QgVUx0PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpyMXQseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBBVShpKXt2YXIgYT1pKz0iIixmPWEuaW5kZXhPZigiOiIpO3JldHVybiBmPj0wJiYoYT1pLnNsaWNlKDAsZikpIT09InhtbG5zIiYmKGk9aS5zbGljZShmKzEpKSxVTHQuaGFzT3duUHJvcGVydHkoYSk/e3NwYWNlOlVMdFthXSxsb2NhbDppfTppfWZ1bmN0aW9uIEh4ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLm93bmVyRG9jdW1lbnQsZj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gZj09PXIxdCYmYS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09cjF0P2EuY3JlYXRlRWxlbWVudChpKTphLmNyZWF0ZUVsZW1lbnROUyhmLGkpfX1mdW5jdGlvbiBWeGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoaS5zcGFjZSxpLmxvY2FsKX19ZnVuY3Rpb24gV0x0KGkpe3ZhciBhPUFVKGkpO3JldHVybihhLmxvY2FsP1Z4ZTpIeGUpKGEpfWZ1bmN0aW9uIEd4ZSgpe31mdW5jdGlvbiBpMXQoaSl7cmV0dXJuIGk9PW51bGw/R3hlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihpKX19ZnVuY3Rpb24gVXhlKGkpe3R5cGVvZiBpIT0iZnVuY3Rpb24iJiYoaT1pMXQoaSkpO2Zvcih2YXIgYT10aGlzLl9ncm91cHMsZj1hLmxlbmd0aCxwPW5ldyBBcnJheShmKSx3PTA7dzxmOysrdylmb3IodmFyIG09YVt3XSxiPW0ubGVuZ3RoLEU9cFt3XT1uZXcgQXJyYXkoYiksXyxBLEk9MDtJPGI7KytJKShfPW1bSV0pJiYoQT1pLmNhbGwoXyxfLl9fZGF0YV9fLEksbSkpJiYoIl9fZGF0YV9fImluIF8mJihBLl9fZGF0YV9fPV8uX19kYXRhX18pLEVbSV09QSk7cmV0dXJuIG5ldyBvZyhwLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIFlMdChpKXtyZXR1cm4gaT09bnVsbD9bXTpBcnJheS5pc0FycmF5KGkpP2k6QXJyYXkuZnJvbShpKX1mdW5jdGlvbiBXeGUoKXtyZXR1cm5bXX1mdW5jdGlvbiBLTHQoaSl7cmV0dXJuIGk9PW51bGw/V3hlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChpKX19ZnVuY3Rpb24gWXhlKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBZTHQoaS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBLeGUoaSl7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1ZeGUoaSk6aT1LTHQoaSk7Zm9yKHZhciBhPXRoaXMuX2dyb3VwcyxmPWEubGVuZ3RoLHA9W10sdz1bXSxtPTA7bTxmOysrbSlmb3IodmFyIGI9YVttXSxFPWIubGVuZ3RoLF8sQT0wO0E8RTsrK0EpKF89YltBXSkmJihwLnB1c2goaS5jYWxsKF8sXy5fX2RhdGFfXyxBLGIpKSx3LnB1c2goXykpO3JldHVybiBuZXcgb2cocCx3KX1mdW5jdGlvbiBYTHQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhpKX19ZnVuY3Rpb24gUUx0KGkpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXRjaGVzKGkpfX12YXIgWHhlPUFycmF5LnByb3RvdHlwZS5maW5kO2Z1bmN0aW9uIFF4ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gWHhlLmNhbGwodGhpcy5jaGlsZHJlbixpKX19ZnVuY3Rpb24gWnhlKCl7cmV0dXJuIHRoaXMuZmlyc3RFbGVtZW50Q2hpbGR9ZnVuY3Rpb24gSnhlKGkpe3JldHVybiB0aGlzLnNlbGVjdChpPT1udWxsP1p4ZTpReGUodHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpRTHQoaSkpKX12YXIgdDZlPUFycmF5LnByb3RvdHlwZS5maWx0ZXI7ZnVuY3Rpb24gZTZlKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbil9ZnVuY3Rpb24gbjZlKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0NmUuY2FsbCh0aGlzLmNoaWxkcmVuLGkpfX1mdW5jdGlvbiByNmUoaSl7cmV0dXJuIHRoaXMuc2VsZWN0QWxsKGk9PW51bGw/ZTZlOm42ZSh0eXBlb2YgaT09ImZ1bmN0aW9uIj9pOlFMdChpKSkpfWZ1bmN0aW9uIGk2ZShpKXt0eXBlb2YgaSE9ImZ1bmN0aW9uIiYmKGk9WEx0KGkpKTtmb3IodmFyIGE9dGhpcy5fZ3JvdXBzLGY9YS5sZW5ndGgscD1uZXcgQXJyYXkoZiksdz0wO3c8ZjsrK3cpZm9yKHZhciBtPWFbd10sYj1tLmxlbmd0aCxFPXBbd109W10sXyxBPTA7QTxiOysrQSkoXz1tW0FdKSYmaS5jYWxsKF8sXy5fX2RhdGFfXyxBLG0pJiZFLnB1c2goXyk7cmV0dXJuIG5ldyBvZyhwLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIFpMdChpKXtyZXR1cm4gbmV3IEFycmF5KGkubGVuZ3RoKX1mdW5jdGlvbiBzNmUoKXtyZXR1cm4gbmV3IG9nKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKFpMdCksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gTFUoaSxhKXt0aGlzLm93bmVyRG9jdW1lbnQ9aS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWkubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9aSx0aGlzLl9fZGF0YV9fPWF9TFUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpMVSxhcHBlbmRDaGlsZDpmdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShpLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oaSxhKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShpLGEpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihpKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoaSl9fTtmdW5jdGlvbiBhNmUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGl9fWZ1bmN0aW9uIG82ZShpLGEsZixwLHcsbSl7Zm9yKHZhciBiPTAsRSxfPWEubGVuZ3RoLEE9bS5sZW5ndGg7YjxBOysrYikoRT1hW2JdKT8oRS5fX2RhdGFfXz1tW2JdLHBbYl09RSk6ZltiXT1uZXcgTFUoaSxtW2JdKTtmb3IoO2I8XzsrK2IpKEU9YVtiXSkmJih3W2JdPUUpfWZ1bmN0aW9uIGM2ZShpLGEsZixwLHcsbSxiKXt2YXIgRSxfLEE9bmV3IE1hcCxJPWEubGVuZ3RoLEI9bS5sZW5ndGgsTj1uZXcgQXJyYXkoSSksUjtmb3IoRT0wO0U8STsrK0UpKF89YVtFXSkmJihOW0VdPVI9Yi5jYWxsKF8sXy5fX2RhdGFfXyxFLGEpKyIiLEEuaGFzKFIpP3dbRV09XzpBLnNldChSLF8pKTtmb3IoRT0wO0U8QjsrK0UpUj1iLmNhbGwoaSxtW0VdLEUsbSkrIiIsKF89QS5nZXQoUikpPyhwW0VdPV8sXy5fX2RhdGFfXz1tW0VdLEEuZGVsZXRlKFIpKTpmW0VdPW5ldyBMVShpLG1bRV0pO2ZvcihFPTA7RTxJOysrRSkoXz1hW0VdKSYmQS5nZXQoTltFXSk9PT1fJiYod1tFXT1fKX1mdW5jdGlvbiB1NmUoaSl7cmV0dXJuIGkuX19kYXRhX199ZnVuY3Rpb24gbDZlKGksYSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIEFycmF5LmZyb20odGhpcyx1NmUpO3ZhciBmPWE/YzZlOm82ZSxwPXRoaXMuX3BhcmVudHMsdz10aGlzLl9ncm91cHM7dHlwZW9mIGkhPSJmdW5jdGlvbiImJihpPWE2ZShpKSk7Zm9yKHZhciBtPXcubGVuZ3RoLGI9bmV3IEFycmF5KG0pLEU9bmV3IEFycmF5KG0pLF89bmV3IEFycmF5KG0pLEE9MDtBPG07KytBKXt2YXIgST1wW0FdLEI9d1tBXSxOPUIubGVuZ3RoLFI9aDZlKGkuY2FsbChJLEkmJkkuX19kYXRhX18sQSxwKSksej1SLmxlbmd0aCxXPUVbQV09bmV3IEFycmF5KHopLGV0PWJbQV09bmV3IEFycmF5KHopLHN0PV9bQV09bmV3IEFycmF5KE4pO2YoSSxCLFcsZXQsc3QsUixhKTtmb3IodmFyIGF0PTAsYnQ9MCxtdCx5dDthdDx6OysrYXQpaWYobXQ9V1thdF0pe2ZvcihhdD49YnQmJihidD1hdCsxKTshKHl0PWV0W2J0XSkmJisrYnQ8ejspO210Ll9uZXh0PXl0fHxudWxsfX1yZXR1cm4gYj1uZXcgb2coYixwKSxiLl9lbnRlcj1FLGIuX2V4aXQ9XyxifWZ1bmN0aW9uIGg2ZShpKXtyZXR1cm4gdHlwZW9mIGk9PSJvYmplY3QiJiYibGVuZ3RoImluIGk/aTpBcnJheS5mcm9tKGkpfWZ1bmN0aW9uIGY2ZSgpe3JldHVybiBuZXcgb2codGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChaTHQpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIGQ2ZShpLGEsZil7dmFyIHA9dGhpcy5lbnRlcigpLHc9dGhpcyxtPXRoaXMuZXhpdCgpO3JldHVybiB0eXBlb2YgaT09ImZ1bmN0aW9uIj8ocD1pKHApLHAmJihwPXAuc2VsZWN0aW9uKCkpKTpwPXAuYXBwZW5kKGkrIiIpLGEhPW51bGwmJih3PWEodyksdyYmKHc9dy5zZWxlY3Rpb24oKSkpLGY9PW51bGw/bS5yZW1vdmUoKTpmKG0pLHAmJnc/cC5tZXJnZSh3KS5vcmRlcigpOnd9ZnVuY3Rpb24gZzZlKGkpe2Zvcih2YXIgYT1pLnNlbGVjdGlvbj9pLnNlbGVjdGlvbigpOmksZj10aGlzLl9ncm91cHMscD1hLl9ncm91cHMsdz1mLmxlbmd0aCxtPXAubGVuZ3RoLGI9TWF0aC5taW4odyxtKSxFPW5ldyBBcnJheSh3KSxfPTA7XzxiOysrXylmb3IodmFyIEE9ZltfXSxJPXBbX10sQj1BLmxlbmd0aCxOPUVbX109bmV3IEFycmF5KEIpLFIsej0wO3o8QjsrK3opKFI9QVt6XXx8SVt6XSkmJihOW3pdPVIpO2Zvcig7Xzx3OysrXylFW19dPWZbX107cmV0dXJuIG5ldyBvZyhFLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIHA2ZSgpe2Zvcih2YXIgaT10aGlzLl9ncm91cHMsYT0tMSxmPWkubGVuZ3RoOysrYTxmOylmb3IodmFyIHA9aVthXSx3PXAubGVuZ3RoLTEsbT1wW3ddLGI7LS13Pj0wOykoYj1wW3ddKSYmKG0mJmIuY29tcGFyZURvY3VtZW50UG9zaXRpb24obSleNCYmbS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShiLG0pLG09Yik7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gYjZlKGkpe2l8fChpPXc2ZSk7ZnVuY3Rpb24gYShCLE4pe3JldHVybiBCJiZOP2koQi5fX2RhdGFfXyxOLl9fZGF0YV9fKTohQi0hTn1mb3IodmFyIGY9dGhpcy5fZ3JvdXBzLHA9Zi5sZW5ndGgsdz1uZXcgQXJyYXkocCksbT0wO208cDsrK20pe2Zvcih2YXIgYj1mW21dLEU9Yi5sZW5ndGgsXz13W21dPW5ldyBBcnJheShFKSxBLEk9MDtJPEU7KytJKShBPWJbSV0pJiYoX1tJXT1BKTtfLnNvcnQoYSl9cmV0dXJuIG5ldyBvZyh3LHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9ZnVuY3Rpb24gdzZlKGksYSl7cmV0dXJuIGk8YT8tMTppPmE/MTppPj1hPzA6TmFOfWZ1bmN0aW9uIHY2ZSgpe3ZhciBpPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsaS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc31mdW5jdGlvbiBtNmUoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzKX1mdW5jdGlvbiB5NmUoKXtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLGE9MCxmPWkubGVuZ3RoO2E8ZjsrK2EpZm9yKHZhciBwPWlbYV0sdz0wLG09cC5sZW5ndGg7dzxtOysrdyl7dmFyIGI9cFt3XTtpZihiKXJldHVybiBifXJldHVybiBudWxsfWZ1bmN0aW9uIHg2ZSgpe2xldCBpPTA7Zm9yKGNvbnN0IGEgb2YgdGhpcykrK2k7cmV0dXJuIGl9ZnVuY3Rpb24gazZlKCl7cmV0dXJuIXRoaXMubm9kZSgpfWZ1bmN0aW9uIEU2ZShpKXtmb3IodmFyIGE9dGhpcy5fZ3JvdXBzLGY9MCxwPWEubGVuZ3RoO2Y8cDsrK2YpZm9yKHZhciB3PWFbZl0sbT0wLGI9dy5sZW5ndGgsRTttPGI7KyttKShFPXdbbV0pJiZpLmNhbGwoRSxFLl9fZGF0YV9fLG0sdyk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gVDZlKGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGkpfX1mdW5jdGlvbiBDNmUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpfX1mdW5jdGlvbiBfNmUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShpLGEpfX1mdW5jdGlvbiBTNmUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCxhKX19ZnVuY3Rpb24gQTZlKGksYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGY9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7Zj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShpKTp0aGlzLnNldEF0dHJpYnV0ZShpLGYpfX1mdW5jdGlvbiBMNmUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtmPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCxmKX19ZnVuY3Rpb24gTTZlKGksYSl7dmFyIGY9QVUoaSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcD10aGlzLm5vZGUoKTtyZXR1cm4gZi5sb2NhbD9wLmdldEF0dHJpYnV0ZU5TKGYuc3BhY2UsZi5sb2NhbCk6cC5nZXRBdHRyaWJ1dGUoZil9cmV0dXJuIHRoaXMuZWFjaCgoYT09bnVsbD9mLmxvY2FsP0M2ZTpUNmU6dHlwZW9mIGE9PSJmdW5jdGlvbiI/Zi5sb2NhbD9MNmU6QTZlOmYubG9jYWw/UzZlOl82ZSkoZixhKSl9ZnVuY3Rpb24gSkx0KGkpe3JldHVybiBpLm93bmVyRG9jdW1lbnQmJmkub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8aS5kb2N1bWVudCYmaXx8aS5kZWZhdWx0Vmlld31mdW5jdGlvbiBENmUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShpKX19ZnVuY3Rpb24gSTZlKGksYSxmKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGksYSxmKX19ZnVuY3Rpb24gTzZlKGksYSxmKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcD1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtwPT1udWxsP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoaSk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShpLHAsZil9fWZ1bmN0aW9uIFA2ZShpLGEsZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKGE9PW51bGw/RDZlOnR5cGVvZiBhPT0iZnVuY3Rpb24iP082ZTpJNmUpKGksYSxmPz8iIikpOmtBKHRoaXMubm9kZSgpLGkpfWZ1bmN0aW9uIGtBKGksYSl7cmV0dXJuIGkuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShhKXx8Skx0KGkpLmdldENvbXB1dGVkU3R5bGUoaSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGEpfWZ1bmN0aW9uIEY2ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tpXX19ZnVuY3Rpb24gTjZlKGksYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1tpXT1hfX1mdW5jdGlvbiBCNmUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtmPT1udWxsP2RlbGV0ZSB0aGlzW2ldOnRoaXNbaV09Zn19ZnVuY3Rpb24gUjZlKGksYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKGE9PW51bGw/RjZlOnR5cGVvZiBhPT0iZnVuY3Rpb24iP0I2ZTpONmUpKGksYSkpOnRoaXMubm9kZSgpW2ldfWZ1bmN0aW9uIHRNdChpKXtyZXR1cm4gaS50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gczF0KGkpe3JldHVybiBpLmNsYXNzTGlzdHx8bmV3IGVNdChpKX1mdW5jdGlvbiBlTXQoaSl7dGhpcy5fbm9kZT1pLHRoaXMuX25hbWVzPXRNdChpLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWVNdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihpKXt2YXIgYT10aGlzLl9uYW1lcy5pbmRleE9mKGkpO2E8MCYmKHRoaXMuX25hbWVzLnB1c2goaSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGkpe3ZhciBhPXRoaXMuX25hbWVzLmluZGV4T2YoaSk7YT49MCYmKHRoaXMuX25hbWVzLnNwbGljZShhLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGkpPj0wfX07ZnVuY3Rpb24gbk10KGksYSl7Zm9yKHZhciBmPXMxdChpKSxwPS0xLHc9YS5sZW5ndGg7KytwPHc7KWYuYWRkKGFbcF0pfWZ1bmN0aW9uIHJNdChpLGEpe2Zvcih2YXIgZj1zMXQoaSkscD0tMSx3PWEubGVuZ3RoOysrcDx3OylmLnJlbW92ZShhW3BdKX1mdW5jdGlvbiBqNmUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7bk10KHRoaXMsaSl9fWZ1bmN0aW9uICQ2ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyTXQodGhpcyxpKX19ZnVuY3Rpb24gejZlKGksYSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGEuYXBwbHkodGhpcyxhcmd1bWVudHMpP25NdDpyTXQpKHRoaXMsaSl9fWZ1bmN0aW9uIHE2ZShpLGEpe3ZhciBmPXRNdChpKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcD1zMXQodGhpcy5ub2RlKCkpLHc9LTEsbT1mLmxlbmd0aDsrK3c8bTspaWYoIXAuY29udGFpbnMoZlt3XSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIGE9PSJmdW5jdGlvbiI/ejZlOmE/ajZlOiQ2ZSkoZixhKSl9ZnVuY3Rpb24gSDZlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBWNmUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1pfX1mdW5jdGlvbiBHNmUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1hPz8iIn19ZnVuY3Rpb24gVTZlKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChpPT1udWxsP0g2ZToodHlwZW9mIGk9PSJmdW5jdGlvbiI/RzZlOlY2ZSkoaSkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fWZ1bmN0aW9uIFc2ZSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIFk2ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1pfX1mdW5jdGlvbiBLNmUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9YT8/IiJ9fWZ1bmN0aW9uIFg2ZShpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goaT09bnVsbD9XNmU6KHR5cGVvZiBpPT0iZnVuY3Rpb24iP0s2ZTpZNmUpKGkpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9ZnVuY3Rpb24gUTZlKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIFo2ZSgpe3JldHVybiB0aGlzLmVhY2goUTZlKX1mdW5jdGlvbiBKNmUoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiB0a2UoKXtyZXR1cm4gdGhpcy5lYWNoKEo2ZSl9ZnVuY3Rpb24gZWtlKGkpe3ZhciBhPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6V0x0KGkpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKGEuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfWZ1bmN0aW9uIG5rZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIHJrZShpLGEpe3ZhciBmPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6V0x0KGkpLHA9YT09bnVsbD9ua2U6dHlwZW9mIGE9PSJmdW5jdGlvbiI/YTppMXQoYSk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGYuYXBwbHkodGhpcyxhcmd1bWVudHMpLHAuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfWZ1bmN0aW9uIGlrZSgpe3ZhciBpPXRoaXMucGFyZW50Tm9kZTtpJiZpLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIHNrZSgpe3JldHVybiB0aGlzLmVhY2goaWtlKX1mdW5jdGlvbiBha2UoKXt2YXIgaT10aGlzLmNsb25lTm9kZSghMSksYT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGE/YS5pbnNlcnRCZWZvcmUoaSx0aGlzLm5leHRTaWJsaW5nKTppfWZ1bmN0aW9uIG9rZSgpe3ZhciBpPXRoaXMuY2xvbmVOb2RlKCEwKSxhPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gYT9hLmluc2VydEJlZm9yZShpLHRoaXMubmV4dFNpYmxpbmcpOml9ZnVuY3Rpb24gY2tlKGkpe3JldHVybiB0aGlzLnNlbGVjdChpP29rZTpha2UpfWZ1bmN0aW9uIHVrZShpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsaSk6dGhpcy5ub2RlKCkuX19kYXRhX199ZnVuY3Rpb24gbGtlKGkpe3JldHVybiBmdW5jdGlvbihhKXtpLmNhbGwodGhpcyxhLHRoaXMuX19kYXRhX18pfX1mdW5jdGlvbiBoa2UoaSl7cmV0dXJuIGkudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbihhKXt2YXIgZj0iIixwPWEuaW5kZXhPZigiLiIpO3JldHVybiBwPj0wJiYoZj1hLnNsaWNlKHArMSksYT1hLnNsaWNlKDAscCkpLHt0eXBlOmEsbmFtZTpmfX0pfWZ1bmN0aW9uIGZrZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9fb247aWYoYSl7Zm9yKHZhciBmPTAscD0tMSx3PWEubGVuZ3RoLG07Zjx3OysrZiltPWFbZl0sKCFpLnR5cGV8fG0udHlwZT09PWkudHlwZSkmJm0ubmFtZT09PWkubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobS50eXBlLG0ubGlzdGVuZXIsbS5vcHRpb25zKTphWysrcF09bTsrK3A/YS5sZW5ndGg9cDpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gZGtlKGksYSxmKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcD10aGlzLl9fb24sdyxtPWxrZShhKTtpZihwKXtmb3IodmFyIGI9MCxFPXAubGVuZ3RoO2I8RTsrK2IpaWYoKHc9cFtiXSkudHlwZT09PWkudHlwZSYmdy5uYW1lPT09aS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIody50eXBlLHcubGlzdGVuZXIsdy5vcHRpb25zKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIody50eXBlLHcubGlzdGVuZXI9bSx3Lm9wdGlvbnM9Ziksdy52YWx1ZT1hO3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGkudHlwZSxtLGYpLHc9e3R5cGU6aS50eXBlLG5hbWU6aS5uYW1lLHZhbHVlOmEsbGlzdGVuZXI6bSxvcHRpb25zOmZ9LHA/cC5wdXNoKHcpOnRoaXMuX19vbj1bd119fWZ1bmN0aW9uIGdrZShpLGEsZil7dmFyIHA9aGtlKGkrIiIpLHcsbT1wLmxlbmd0aCxiO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIEU9dGhpcy5ub2RlKCkuX19vbjtpZihFKXtmb3IodmFyIF89MCxBPUUubGVuZ3RoLEk7XzxBOysrXylmb3Iodz0wLEk9RVtfXTt3PG07Kyt3KWlmKChiPXBbd10pLnR5cGU9PT1JLnR5cGUmJmIubmFtZT09PUkubmFtZSlyZXR1cm4gSS52YWx1ZX1yZXR1cm59Zm9yKEU9YT9ka2U6ZmtlLHc9MDt3PG07Kyt3KXRoaXMuZWFjaChFKHBbd10sYSxmKSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gaU10KGksYSxmKXt2YXIgcD1KTHQoaSksdz1wLkN1c3RvbUV2ZW50O3R5cGVvZiB3PT0iZnVuY3Rpb24iP3c9bmV3IHcoYSxmKToodz1wLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGY/KHcuaW5pdEV2ZW50KGEsZi5idWJibGVzLGYuY2FuY2VsYWJsZSksdy5kZXRhaWw9Zi5kZXRhaWwpOncuaW5pdEV2ZW50KGEsITEsITEpKSxpLmRpc3BhdGNoRXZlbnQodyl9ZnVuY3Rpb24gcGtlKGksYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGlNdCh0aGlzLGksYSl9fWZ1bmN0aW9uIGJrZShpLGEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpTXQodGhpcyxpLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19ZnVuY3Rpb24gd2tlKGksYSl7cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIGE9PSJmdW5jdGlvbiI/YmtlOnBrZSkoaSxhKSl9ZnVuY3Rpb24qdmtlKCl7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxhPTAsZj1pLmxlbmd0aDthPGY7KythKWZvcih2YXIgcD1pW2FdLHc9MCxtPXAubGVuZ3RoLGI7dzxtOysrdykoYj1wW3ddKSYmKHlpZWxkIGIpfXZhciBhMXQ9W251bGxdO2Z1bmN0aW9uIG9nKGksYSl7dGhpcy5fZ3JvdXBzPWksdGhpcy5fcGFyZW50cz1hfWZ1bmN0aW9uIENQKCl7cmV0dXJuIG5ldyBvZyhbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLGExdCl9ZnVuY3Rpb24gbWtlKCl7cmV0dXJuIHRoaXN9b2cucHJvdG90eXBlPUNQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6b2csc2VsZWN0OlV4ZSxzZWxlY3RBbGw6S3hlLHNlbGVjdENoaWxkOkp4ZSxzZWxlY3RDaGlsZHJlbjpyNmUsZmlsdGVyOmk2ZSxkYXRhOmw2ZSxlbnRlcjpzNmUsZXhpdDpmNmUsam9pbjpkNmUsbWVyZ2U6ZzZlLHNlbGVjdGlvbjpta2Usb3JkZXI6cDZlLHNvcnQ6YjZlLGNhbGw6djZlLG5vZGVzOm02ZSxub2RlOnk2ZSxzaXplOng2ZSxlbXB0eTprNmUsZWFjaDpFNmUsYXR0cjpNNmUsc3R5bGU6UDZlLHByb3BlcnR5OlI2ZSxjbGFzc2VkOnE2ZSx0ZXh0OlU2ZSxodG1sOlg2ZSxyYWlzZTpaNmUsbG93ZXI6dGtlLGFwcGVuZDpla2UsaW5zZXJ0OnJrZSxyZW1vdmU6c2tlLGNsb25lOmNrZSxkYXR1bTp1a2Usb246Z2tlLGRpc3BhdGNoOndrZSxbU3ltYm9sLml0ZXJhdG9yXTp2a2V9O2Z1bmN0aW9uIHlyKGkpe3JldHVybiB0eXBlb2YgaT09InN0cmluZyI/bmV3IG9nKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihpKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgb2coW1tpXV0sYTF0KX1mdW5jdGlvbiBzTXQoaSl7cmV0dXJuIHR5cGVvZiBpPT0ic3RyaW5nIj9uZXcgb2coW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoaSldLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgb2coW1lMdChpKV0sYTF0KX1mdW5jdGlvbiBfUChpLGEsZil7aS5wcm90b3R5cGU9YS5wcm90b3R5cGU9ZixmLmNvbnN0cnVjdG9yPWl9ZnVuY3Rpb24gTVUoaSxhKXt2YXIgZj1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKTtmb3IodmFyIHAgaW4gYSlmW3BdPWFbcF07cmV0dXJuIGZ9ZnVuY3Rpb24gVTcoKXt9dmFyIFNQPS43LERVPTEvU1AsRUE9IlxccyooWystXT9cXGQrKVxccyoiLEFQPSJcXHMqKFsrLV0/KD86XFxkKlxcLik/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixjMz0iXFxzKihbKy1dPyg/OlxcZCpcXC4pP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLHlrZT0vXiMoWzAtOWEtZl17Myw4fSkkLyx4a2U9bmV3IFJlZ0V4cChgXnJnYlxcKCR7RUF9LCR7RUF9LCR7RUF9XFwpJGApLGtrZT1uZXcgUmVnRXhwKGBecmdiXFwoJHtjM30sJHtjM30sJHtjM31cXCkkYCksRWtlPW5ldyBSZWdFeHAoYF5yZ2JhXFwoJHtFQX0sJHtFQX0sJHtFQX0sJHtBUH1cXCkkYCksVGtlPW5ldyBSZWdFeHAoYF5yZ2JhXFwoJHtjM30sJHtjM30sJHtjM30sJHtBUH1cXCkkYCksQ2tlPW5ldyBSZWdFeHAoYF5oc2xcXCgke0FQfSwke2MzfSwke2MzfVxcKSRgKSxfa2U9bmV3IFJlZ0V4cChgXmhzbGFcXCgke0FQfSwke2MzfSwke2MzfSwke0FQfVxcKSRgKSxhTXQ9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07X1AoVTcsVzcse2NvcHkoaSl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyxpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6b010LGZvcm1hdEhleDpvTXQsZm9ybWF0SGV4ODpTa2UsZm9ybWF0SHNsOkFrZSxmb3JtYXRSZ2I6Y010LHRvU3RyaW5nOmNNdH0pO2Z1bmN0aW9uIG9NdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIFNrZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleDgoKX1mdW5jdGlvbiBBa2UoKXtyZXR1cm4gZ010KHRoaXMpLmZvcm1hdEhzbCgpfWZ1bmN0aW9uIGNNdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIFc3KGkpe3ZhciBhLGY7cmV0dXJuIGk9KGkrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChhPXlrZS5leGVjKGkpKT8oZj1hWzFdLmxlbmd0aCxhPXBhcnNlSW50KGFbMV0sMTYpLGY9PT02P3VNdChhKTpmPT09Mz9uZXcgdjAoYT4+OCYxNXxhPj40JjI0MCxhPj40JjE1fGEmMjQwLChhJjE1KTw8NHxhJjE1LDEpOmY9PT04P0lVKGE+PjI0JjI1NSxhPj4xNiYyNTUsYT4+OCYyNTUsKGEmMjU1KS8yNTUpOmY9PT00P0lVKGE+PjEyJjE1fGE+PjgmMjQwLGE+PjgmMTV8YT4+NCYyNDAsYT4+NCYxNXxhJjI0MCwoKGEmMTUpPDw0fGEmMTUpLzI1NSk6bnVsbCk6KGE9eGtlLmV4ZWMoaSkpP25ldyB2MChhWzFdLGFbMl0sYVszXSwxKTooYT1ra2UuZXhlYyhpKSk/bmV3IHYwKGFbMV0qMjU1LzEwMCxhWzJdKjI1NS8xMDAsYVszXSoyNTUvMTAwLDEpOihhPUVrZS5leGVjKGkpKT9JVShhWzFdLGFbMl0sYVszXSxhWzRdKTooYT1Ua2UuZXhlYyhpKSk/SVUoYVsxXSoyNTUvMTAwLGFbMl0qMjU1LzEwMCxhWzNdKjI1NS8xMDAsYVs0XSk6KGE9Q2tlLmV4ZWMoaSkpP2RNdChhWzFdLGFbMl0vMTAwLGFbM10vMTAwLDEpOihhPV9rZS5leGVjKGkpKT9kTXQoYVsxXSxhWzJdLzEwMCxhWzNdLzEwMCxhWzRdKTphTXQuaGFzT3duUHJvcGVydHkoaSk/dU10KGFNdFtpXSk6aT09PSJ0cmFuc3BhcmVudCI/bmV3IHYwKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gdU10KGkpe3JldHVybiBuZXcgdjAoaT4+MTYmMjU1LGk+PjgmMjU1LGkmMjU1LDEpfWZ1bmN0aW9uIElVKGksYSxmLHApe3JldHVybiBwPD0wJiYoaT1hPWY9TmFOKSxuZXcgdjAoaSxhLGYscCl9ZnVuY3Rpb24gbE10KGkpe3JldHVybiBpIGluc3RhbmNlb2YgVTd8fChpPVc3KGkpKSxpPyhpPWkucmdiKCksbmV3IHYwKGkucixpLmcsaS5iLGkub3BhY2l0eSkpOm5ldyB2MH1mdW5jdGlvbiBvMXQoaSxhLGYscCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2xNdChpKTpuZXcgdjAoaSxhLGYscD8/MSl9ZnVuY3Rpb24gdjAoaSxhLGYscCl7dGhpcy5yPStpLHRoaXMuZz0rYSx0aGlzLmI9K2YsdGhpcy5vcGFjaXR5PStwfV9QKHYwLG8xdCxNVShVNyx7YnJpZ2h0ZXIoaSl7cmV0dXJuIGk9aT09bnVsbD9EVTpNYXRoLnBvdyhEVSxpKSxuZXcgdjAodGhpcy5yKmksdGhpcy5nKmksdGhpcy5iKmksdGhpcy5vcGFjaXR5KX0sZGFya2VyKGkpe3JldHVybiBpPWk9PW51bGw/U1A6TWF0aC5wb3coU1AsaSksbmV3IHYwKHRoaXMucippLHRoaXMuZyppLHRoaXMuYippLHRoaXMub3BhY2l0eSl9LHJnYigpe3JldHVybiB0aGlzfSxjbGFtcCgpe3JldHVybiBuZXcgdjAoWTcodGhpcy5yKSxZNyh0aGlzLmcpLFk3KHRoaXMuYiksT1UodGhpcy5vcGFjaXR5KSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpoTXQsZm9ybWF0SGV4OmhNdCxmb3JtYXRIZXg4OkxrZSxmb3JtYXRSZ2I6Zk10LHRvU3RyaW5nOmZNdH0pKTtmdW5jdGlvbiBoTXQoKXtyZXR1cm5gIyR7SzcodGhpcy5yKX0ke0s3KHRoaXMuZyl9JHtLNyh0aGlzLmIpfWB9ZnVuY3Rpb24gTGtlKCl7cmV0dXJuYCMke0s3KHRoaXMucil9JHtLNyh0aGlzLmcpfSR7SzcodGhpcy5iKX0ke0s3KChpc05hTih0aGlzLm9wYWNpdHkpPzE6dGhpcy5vcGFjaXR5KSoyNTUpfWB9ZnVuY3Rpb24gZk10KCl7Y29uc3QgaT1PVSh0aGlzLm9wYWNpdHkpO3JldHVybmAke2k9PT0xPyJyZ2IoIjoicmdiYSgifSR7WTcodGhpcy5yKX0sICR7WTcodGhpcy5nKX0sICR7WTcodGhpcy5iKX0ke2k9PT0xPyIpIjpgLCAke2l9KWB9YH1mdW5jdGlvbiBPVShpKXtyZXR1cm4gaXNOYU4oaSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsaSkpfWZ1bmN0aW9uIFk3KGkpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGkpfHwwKSl9ZnVuY3Rpb24gSzcoaSl7cmV0dXJuIGk9WTcoaSksKGk8MTY/IjAiOiIiKStpLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBkTXQoaSxhLGYscCl7cmV0dXJuIHA8PTA/aT1hPWY9TmFOOmY8PTB8fGY+PTE/aT1hPU5hTjphPD0wJiYoaT1OYU4pLG5ldyBYdihpLGEsZixwKX1mdW5jdGlvbiBnTXQoaSl7aWYoaSBpbnN0YW5jZW9mIFh2KXJldHVybiBuZXcgWHYoaS5oLGkucyxpLmwsaS5vcGFjaXR5KTtpZihpIGluc3RhbmNlb2YgVTd8fChpPVc3KGkpKSwhaSlyZXR1cm4gbmV3IFh2O2lmKGkgaW5zdGFuY2VvZiBYdilyZXR1cm4gaTtpPWkucmdiKCk7dmFyIGE9aS5yLzI1NSxmPWkuZy8yNTUscD1pLmIvMjU1LHc9TWF0aC5taW4oYSxmLHApLG09TWF0aC5tYXgoYSxmLHApLGI9TmFOLEU9bS13LF89KG0rdykvMjtyZXR1cm4gRT8oYT09PW0/Yj0oZi1wKS9FKyhmPHApKjY6Zj09PW0/Yj0ocC1hKS9FKzI6Yj0oYS1mKS9FKzQsRS89XzwuNT9tK3c6Mi1tLXcsYio9NjApOkU9Xz4wJiZfPDE/MDpiLG5ldyBYdihiLEUsXyxpLm9wYWNpdHkpfWZ1bmN0aW9uIE1rZShpLGEsZixwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Z010KGkpOm5ldyBYdihpLGEsZixwPz8xKX1mdW5jdGlvbiBYdihpLGEsZixwKXt0aGlzLmg9K2ksdGhpcy5zPSthLHRoaXMubD0rZix0aGlzLm9wYWNpdHk9K3B9X1AoWHYsTWtlLE1VKFU3LHticmlnaHRlcihpKXtyZXR1cm4gaT1pPT1udWxsP0RVOk1hdGgucG93KERVLGkpLG5ldyBYdih0aGlzLmgsdGhpcy5zLHRoaXMubCppLHRoaXMub3BhY2l0eSl9LGRhcmtlcihpKXtyZXR1cm4gaT1pPT1udWxsP1NQOk1hdGgucG93KFNQLGkpLG5ldyBYdih0aGlzLmgsdGhpcy5zLHRoaXMubCppLHRoaXMub3BhY2l0eSl9LHJnYigpe3ZhciBpPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsYT1pc05hTihpKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxmPXRoaXMubCxwPWYrKGY8LjU/ZjoxLWYpKmEsdz0yKmYtcDtyZXR1cm4gbmV3IHYwKGMxdChpPj0yNDA/aS0yNDA6aSsxMjAsdyxwKSxjMXQoaSx3LHApLGMxdChpPDEyMD9pKzI0MDppLTEyMCx3LHApLHRoaXMub3BhY2l0eSl9LGNsYW1wKCl7cmV0dXJuIG5ldyBYdihwTXQodGhpcy5oKSxQVSh0aGlzLnMpLFBVKHRoaXMubCksT1UodGhpcy5vcGFjaXR5KSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2woKXtjb25zdCBpPU9VKHRoaXMub3BhY2l0eSk7cmV0dXJuYCR7aT09PTE/ImhzbCgiOiJoc2xhKCJ9JHtwTXQodGhpcy5oKX0sICR7UFUodGhpcy5zKSoxMDB9JSwgJHtQVSh0aGlzLmwpKjEwMH0lJHtpPT09MT8iKSI6YCwgJHtpfSlgfWB9fSkpO2Z1bmN0aW9uIHBNdChpKXtyZXR1cm4gaT0oaXx8MCklMzYwLGk8MD9pKzM2MDppfWZ1bmN0aW9uIFBVKGkpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDEsaXx8MCkpfWZ1bmN0aW9uIGMxdChpLGEsZil7cmV0dXJuKGk8NjA/YSsoZi1hKSppLzYwOmk8MTgwP2Y6aTwyNDA/YSsoZi1hKSooMjQwLWkpLzYwOmEpKjI1NX1jb25zdCBEa2U9TWF0aC5QSS8xODAsSWtlPTE4MC9NYXRoLlBJLEZVPTE4LGJNdD0uOTY0MjIsd010PTEsdk10PS44MjUyMSxtTXQ9NC8yOSxUQT02LzI5LHlNdD0zKlRBKlRBLE9rZT1UQSpUQSpUQTtmdW5jdGlvbiB4TXQoaSl7aWYoaSBpbnN0YW5jZW9mIHUzKXJldHVybiBuZXcgdTMoaS5sLGkuYSxpLmIsaS5vcGFjaXR5KTtpZihpIGluc3RhbmNlb2YgYjUpcmV0dXJuIGtNdChpKTtpIGluc3RhbmNlb2YgdjB8fChpPWxNdChpKSk7dmFyIGE9ZjF0KGkuciksZj1mMXQoaS5nKSxwPWYxdChpLmIpLHc9dTF0KCguMjIyNTA0NSphKy43MTY4Nzg2KmYrLjA2MDYxNjkqcCkvd010KSxtLGI7cmV0dXJuIGE9PT1mJiZmPT09cD9tPWI9dzoobT11MXQoKC40MzYwNzQ3KmErLjM4NTA2NDkqZisuMTQzMDgwNCpwKS9iTXQpLGI9dTF0KCguMDEzOTMyMiphKy4wOTcxMDQ1KmYrLjcxNDE3MzMqcCkvdk10KSksbmV3IHUzKDExNip3LTE2LDUwMCoobS13KSwyMDAqKHctYiksaS5vcGFjaXR5KX1mdW5jdGlvbiBQa2UoaSxhLGYscCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3hNdChpKTpuZXcgdTMoaSxhLGYscD8/MSl9ZnVuY3Rpb24gdTMoaSxhLGYscCl7dGhpcy5sPStpLHRoaXMuYT0rYSx0aGlzLmI9K2YsdGhpcy5vcGFjaXR5PStwfV9QKHUzLFBrZSxNVShVNyx7YnJpZ2h0ZXIoaSl7cmV0dXJuIG5ldyB1Myh0aGlzLmwrRlUqKGk/PzEpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyKGkpe3JldHVybiBuZXcgdTModGhpcy5sLUZVKihpPz8xKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYigpe3ZhciBpPSh0aGlzLmwrMTYpLzExNixhPWlzTmFOKHRoaXMuYSk/aTppK3RoaXMuYS81MDAsZj1pc05hTih0aGlzLmIpP2k6aS10aGlzLmIvMjAwO3JldHVybiBhPWJNdCpsMXQoYSksaT13TXQqbDF0KGkpLGY9dk10KmwxdChmKSxuZXcgdjAoaDF0KDMuMTMzODU2MSphLTEuNjE2ODY2NyppLS40OTA2MTQ2KmYpLGgxdCgtLjk3ODc2ODQqYSsxLjkxNjE0MTUqaSsuMDMzNDU0KmYpLGgxdCguMDcxOTQ1MyphLS4yMjg5OTE0KmkrMS40MDUyNDI3KmYpLHRoaXMub3BhY2l0eSl9fSkpO2Z1bmN0aW9uIHUxdChpKXtyZXR1cm4gaT5Pa2U/TWF0aC5wb3coaSwxLzMpOmkveU10K21NdH1mdW5jdGlvbiBsMXQoaSl7cmV0dXJuIGk+VEE/aSppKmk6eU10KihpLW1NdCl9ZnVuY3Rpb24gaDF0KGkpe3JldHVybiAyNTUqKGk8PS4wMDMxMzA4PzEyLjkyKmk6MS4wNTUqTWF0aC5wb3coaSwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gZjF0KGkpe3JldHVybihpLz0yNTUpPD0uMDQwNDU/aS8xMi45MjpNYXRoLnBvdygoaSsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIEZrZShpKXtpZihpIGluc3RhbmNlb2YgYjUpcmV0dXJuIG5ldyBiNShpLmgsaS5jLGkubCxpLm9wYWNpdHkpO2lmKGkgaW5zdGFuY2VvZiB1M3x8KGk9eE10KGkpKSxpLmE9PT0wJiZpLmI9PT0wKXJldHVybiBuZXcgYjUoTmFOLDA8aS5sJiZpLmw8MTAwPzA6TmFOLGkubCxpLm9wYWNpdHkpO3ZhciBhPU1hdGguYXRhbjIoaS5iLGkuYSkqSWtlO3JldHVybiBuZXcgYjUoYTwwP2ErMzYwOmEsTWF0aC5zcXJ0KGkuYSppLmEraS5iKmkuYiksaS5sLGkub3BhY2l0eSl9ZnVuY3Rpb24gZDF0KGksYSxmLHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9Ga2UoaSk6bmV3IGI1KGksYSxmLHA/PzEpfWZ1bmN0aW9uIGI1KGksYSxmLHApe3RoaXMuaD0raSx0aGlzLmM9K2EsdGhpcy5sPStmLHRoaXMub3BhY2l0eT0rcH1mdW5jdGlvbiBrTXQoaSl7aWYoaXNOYU4oaS5oKSlyZXR1cm4gbmV3IHUzKGkubCwwLDAsaS5vcGFjaXR5KTt2YXIgYT1pLmgqRGtlO3JldHVybiBuZXcgdTMoaS5sLE1hdGguY29zKGEpKmkuYyxNYXRoLnNpbihhKSppLmMsaS5vcGFjaXR5KX1fUChiNSxkMXQsTVUoVTcse2JyaWdodGVyKGkpe3JldHVybiBuZXcgYjUodGhpcy5oLHRoaXMuYyx0aGlzLmwrRlUqKGk/PzEpLHRoaXMub3BhY2l0eSl9LGRhcmtlcihpKXtyZXR1cm4gbmV3IGI1KHRoaXMuaCx0aGlzLmMsdGhpcy5sLUZVKihpPz8xKSx0aGlzLm9wYWNpdHkpfSxyZ2IoKXtyZXR1cm4ga010KHRoaXMpLnJnYigpfX0pKTtjb25zdCBOVT1pPT4oKT0+aTtmdW5jdGlvbiBFTXQoaSxhKXtyZXR1cm4gZnVuY3Rpb24oZil7cmV0dXJuIGkrZiphfX1mdW5jdGlvbiBOa2UoaSxhLGYpe3JldHVybiBpPU1hdGgucG93KGksZiksYT1NYXRoLnBvdyhhLGYpLWksZj0xL2YsZnVuY3Rpb24ocCl7cmV0dXJuIE1hdGgucG93KGkrcCphLGYpfX1mdW5jdGlvbiBCa2UoaSxhKXt2YXIgZj1hLWk7cmV0dXJuIGY/RU10KGksZj4xODB8fGY8LTE4MD9mLTM2MCpNYXRoLnJvdW5kKGYvMzYwKTpmKTpOVShpc05hTihpKT9hOmkpfWZ1bmN0aW9uIFJrZShpKXtyZXR1cm4oaT0raSk9PTE/TFA6ZnVuY3Rpb24oYSxmKXtyZXR1cm4gZi1hP05rZShhLGYsaSk6TlUoaXNOYU4oYSk/ZjphKX19ZnVuY3Rpb24gTFAoaSxhKXt2YXIgZj1hLWk7cmV0dXJuIGY/RU10KGksZik6TlUoaXNOYU4oaSk/YTppKX1jb25zdCBCVT1mdW5jdGlvbiBpKGEpe3ZhciBmPVJrZShhKTtmdW5jdGlvbiBwKHcsbSl7dmFyIGI9Zigodz1vMXQodykpLnIsKG09bzF0KG0pKS5yKSxFPWYody5nLG0uZyksXz1mKHcuYixtLmIpLEE9TFAody5vcGFjaXR5LG0ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKEkpe3JldHVybiB3LnI9YihJKSx3Lmc9RShJKSx3LmI9XyhJKSx3Lm9wYWNpdHk9QShJKSx3KyIifX1yZXR1cm4gcC5nYW1tYT1pLHB9KDEpO2Z1bmN0aW9uIGprZShpLGEpe2F8fChhPVtdKTt2YXIgZj1pP01hdGgubWluKGEubGVuZ3RoLGkubGVuZ3RoKTowLHA9YS5zbGljZSgpLHc7cmV0dXJuIGZ1bmN0aW9uKG0pe2Zvcih3PTA7dzxmOysrdylwW3ddPWlbd10qKDEtbSkrYVt3XSptO3JldHVybiBwfX1mdW5jdGlvbiAka2UoaSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhpKSYmIShpIGluc3RhbmNlb2YgRGF0YVZpZXcpfWZ1bmN0aW9uIHprZShpLGEpe3ZhciBmPWE/YS5sZW5ndGg6MCxwPWk/TWF0aC5taW4oZixpLmxlbmd0aCk6MCx3PW5ldyBBcnJheShwKSxtPW5ldyBBcnJheShmKSxiO2ZvcihiPTA7YjxwOysrYil3W2JdPWIxdChpW2JdLGFbYl0pO2Zvcig7YjxmOysrYiltW2JdPWFbYl07cmV0dXJuIGZ1bmN0aW9uKEUpe2ZvcihiPTA7YjxwOysrYiltW2JdPXdbYl0oRSk7cmV0dXJuIG19fWZ1bmN0aW9uIHFrZShpLGEpe3ZhciBmPW5ldyBEYXRlO3JldHVybiBpPStpLGE9K2EsZnVuY3Rpb24ocCl7cmV0dXJuIGYuc2V0VGltZShpKigxLXApK2EqcCksZn19ZnVuY3Rpb24gUXYoaSxhKXtyZXR1cm4gaT0raSxhPSthLGZ1bmN0aW9uKGYpe3JldHVybiBpKigxLWYpK2EqZn19ZnVuY3Rpb24gSGtlKGksYSl7dmFyIGY9e30scD17fSx3OyhpPT09bnVsbHx8dHlwZW9mIGkhPSJvYmplY3QiKSYmKGk9e30pLChhPT09bnVsbHx8dHlwZW9mIGEhPSJvYmplY3QiKSYmKGE9e30pO2Zvcih3IGluIGEpdyBpbiBpP2Zbd109YjF0KGlbd10sYVt3XSk6cFt3XT1hW3ddO3JldHVybiBmdW5jdGlvbihtKXtmb3IodyBpbiBmKXBbd109Zlt3XShtKTtyZXR1cm4gcH19dmFyIGcxdD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2cscDF0PW5ldyBSZWdFeHAoZzF0LnNvdXJjZSwiZyIpO2Z1bmN0aW9uIFZrZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaX19ZnVuY3Rpb24gR2tlKGkpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gaShhKSsiIn19ZnVuY3Rpb24gVE10KGksYSl7dmFyIGY9ZzF0Lmxhc3RJbmRleD1wMXQubGFzdEluZGV4PTAscCx3LG0sYj0tMSxFPVtdLF89W107Zm9yKGk9aSsiIixhPWErIiI7KHA9ZzF0LmV4ZWMoaSkpJiYodz1wMXQuZXhlYyhhKSk7KShtPXcuaW5kZXgpPmYmJihtPWEuc2xpY2UoZixtKSxFW2JdP0VbYl0rPW06RVsrK2JdPW0pLChwPXBbMF0pPT09KHc9d1swXSk/RVtiXT9FW2JdKz13OkVbKytiXT13OihFWysrYl09bnVsbCxfLnB1c2goe2k6Yix4OlF2KHAsdyl9KSksZj1wMXQubGFzdEluZGV4O3JldHVybiBmPGEubGVuZ3RoJiYobT1hLnNsaWNlKGYpLEVbYl0/RVtiXSs9bTpFWysrYl09bSksRS5sZW5ndGg8Mj9fWzBdP0drZShfWzBdLngpOlZrZShhKTooYT1fLmxlbmd0aCxmdW5jdGlvbihBKXtmb3IodmFyIEk9MCxCO0k8YTsrK0kpRVsoQj1fW0ldKS5pXT1CLngoQSk7cmV0dXJuIEUuam9pbigiIil9KX1mdW5jdGlvbiBiMXQoaSxhKXt2YXIgZj10eXBlb2YgYSxwO3JldHVybiBhPT1udWxsfHxmPT09ImJvb2xlYW4iP05VKGEpOihmPT09Im51bWJlciI/UXY6Zj09PSJzdHJpbmciPyhwPVc3KGEpKT8oYT1wLEJVKTpUTXQ6YSBpbnN0YW5jZW9mIFc3P0JVOmEgaW5zdGFuY2VvZiBEYXRlP3FrZToka2UoYSk/amtlOkFycmF5LmlzQXJyYXkoYSk/emtlOnR5cGVvZiBhLnZhbHVlT2YhPSJmdW5jdGlvbiImJnR5cGVvZiBhLnRvU3RyaW5nIT0iZnVuY3Rpb24ifHxpc05hTihhKT9Ia2U6UXYpKGksYSl9ZnVuY3Rpb24gVWtlKGksYSl7cmV0dXJuIGk9K2ksYT0rYSxmdW5jdGlvbihmKXtyZXR1cm4gTWF0aC5yb3VuZChpKigxLWYpK2EqZil9fXZhciBDTXQ9MTgwL01hdGguUEksdzF0PXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIF9NdChpLGEsZixwLHcsbSl7dmFyIGIsRSxfO3JldHVybihiPU1hdGguc3FydChpKmkrYSphKSkmJihpLz1iLGEvPWIpLChfPWkqZithKnApJiYoZi09aSpfLHAtPWEqXyksKEU9TWF0aC5zcXJ0KGYqZitwKnApKSYmKGYvPUUscC89RSxfLz1FKSxpKnA8YSpmJiYoaT0taSxhPS1hLF89LV8sYj0tYikse3RyYW5zbGF0ZVg6dyx0cmFuc2xhdGVZOm0scm90YXRlOk1hdGguYXRhbjIoYSxpKSpDTXQsc2tld1g6TWF0aC5hdGFuKF8pKkNNdCxzY2FsZVg6YixzY2FsZVk6RX19dmFyIFJVO2Z1bmN0aW9uIFdrZShpKXtjb25zdCBhPW5ldyh0eXBlb2YgRE9NTWF0cml4PT0iZnVuY3Rpb24iP0RPTU1hdHJpeDpXZWJLaXRDU1NNYXRyaXgpKGkrIiIpO3JldHVybiBhLmlzSWRlbnRpdHk/dzF0Ol9NdChhLmEsYS5iLGEuYyxhLmQsYS5lLGEuZil9ZnVuY3Rpb24gWWtlKGkpe3JldHVybiBpPT1udWxsfHwoUlV8fChSVT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxSVS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsaSksIShpPVJVLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpKT93MXQ6KGk9aS5tYXRyaXgsX010KGkuYSxpLmIsaS5jLGkuZCxpLmUsaS5mKSl9ZnVuY3Rpb24gU010KGksYSxmLHApe2Z1bmN0aW9uIHcoQSl7cmV0dXJuIEEubGVuZ3RoP0EucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG0oQSxJLEIsTixSLHope2lmKEEhPT1CfHxJIT09Til7dmFyIFc9Ui5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGEsbnVsbCxmKTt6LnB1c2goe2k6Vy00LHg6UXYoQSxCKX0se2k6Vy0yLHg6UXYoSSxOKX0pfWVsc2UoQnx8TikmJlIucHVzaCgidHJhbnNsYXRlKCIrQithK04rZil9ZnVuY3Rpb24gYihBLEksQixOKXtBIT09ST8oQS1JPjE4MD9JKz0zNjA6SS1BPjE4MCYmKEErPTM2MCksTi5wdXNoKHtpOkIucHVzaCh3KEIpKyJyb3RhdGUoIixudWxsLHApLTIseDpRdihBLEkpfSkpOkkmJkIucHVzaCh3KEIpKyJyb3RhdGUoIitJK3ApfWZ1bmN0aW9uIEUoQSxJLEIsTil7QSE9PUk/Ti5wdXNoKHtpOkIucHVzaCh3KEIpKyJza2V3WCgiLG51bGwscCktMix4OlF2KEEsSSl9KTpJJiZCLnB1c2godyhCKSsic2tld1goIitJK3ApfWZ1bmN0aW9uIF8oQSxJLEIsTixSLHope2lmKEEhPT1CfHxJIT09Til7dmFyIFc9Ui5wdXNoKHcoUikrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO3oucHVzaCh7aTpXLTQseDpRdihBLEIpfSx7aTpXLTIseDpRdihJLE4pfSl9ZWxzZShCIT09MXx8TiE9PTEpJiZSLnB1c2godyhSKSsic2NhbGUoIitCKyIsIitOKyIpIil9cmV0dXJuIGZ1bmN0aW9uKEEsSSl7dmFyIEI9W10sTj1bXTtyZXR1cm4gQT1pKEEpLEk9aShJKSxtKEEudHJhbnNsYXRlWCxBLnRyYW5zbGF0ZVksSS50cmFuc2xhdGVYLEkudHJhbnNsYXRlWSxCLE4pLGIoQS5yb3RhdGUsSS5yb3RhdGUsQixOKSxFKEEuc2tld1gsSS5za2V3WCxCLE4pLF8oQS5zY2FsZVgsQS5zY2FsZVksSS5zY2FsZVgsSS5zY2FsZVksQixOKSxBPUk9bnVsbCxmdW5jdGlvbihSKXtmb3IodmFyIHo9LTEsVz1OLmxlbmd0aCxldDsrK3o8VzspQlsoZXQ9Tlt6XSkuaV09ZXQueChSKTtyZXR1cm4gQi5qb2luKCIiKX19fXZhciBLa2U9U010KFdrZSwicHgsICIsInB4KSIsImRlZykiKSxYa2U9U010KFlrZSwiLCAiLCIpIiwiKSIpO2Z1bmN0aW9uIFFrZShpKXtyZXR1cm4gZnVuY3Rpb24oYSxmKXt2YXIgcD1pKChhPWQxdChhKSkuaCwoZj1kMXQoZikpLmgpLHc9TFAoYS5jLGYuYyksbT1MUChhLmwsZi5sKSxiPUxQKGEub3BhY2l0eSxmLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihFKXtyZXR1cm4gYS5oPXAoRSksYS5jPXcoRSksYS5sPW0oRSksYS5vcGFjaXR5PWIoRSksYSsiIn19fWNvbnN0IFprZT1Ra2UoQmtlKTt2YXIgQ0E9MCxNUD0wLERQPTAsQU10PTFlMyxqVSxJUCwkVT0wLFg3PTAselU9MCxPUD10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxMTXQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oaSl7c2V0VGltZW91dChpLDE3KX07ZnVuY3Rpb24gdjF0KCl7cmV0dXJuIFg3fHwoTE10KEprZSksWDc9T1Aubm93KCkrelUpfWZ1bmN0aW9uIEprZSgpe1g3PTB9ZnVuY3Rpb24gcVUoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfXFVLnByb3RvdHlwZT1NTXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpxVSxyZXN0YXJ0OmZ1bmN0aW9uKGksYSxmKXtpZih0eXBlb2YgaSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO2Y9KGY9PW51bGw/djF0KCk6K2YpKyhhPT1udWxsPzA6K2EpLCF0aGlzLl9uZXh0JiZJUCE9PXRoaXMmJihJUD9JUC5fbmV4dD10aGlzOmpVPXRoaXMsSVA9dGhpcyksdGhpcy5fY2FsbD1pLHRoaXMuX3RpbWU9ZixtMXQoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsbTF0KCkpfX07ZnVuY3Rpb24gTU10KGksYSxmKXt2YXIgcD1uZXcgcVU7cmV0dXJuIHAucmVzdGFydChpLGEsZikscH1mdW5jdGlvbiB0OGUoKXt2MXQoKSwrK0NBO2Zvcih2YXIgaT1qVSxhO2k7KShhPVg3LWkuX3RpbWUpPj0wJiZpLl9jYWxsLmNhbGwodm9pZCAwLGEpLGk9aS5fbmV4dDstLUNBfWZ1bmN0aW9uIERNdCgpe1g3PSgkVT1PUC5ub3coKSkrelUsQ0E9TVA9MDt0cnl7dDhlKCl9ZmluYWxseXtDQT0wLG44ZSgpLFg3PTB9fWZ1bmN0aW9uIGU4ZSgpe3ZhciBpPU9QLm5vdygpLGE9aS0kVTthPkFNdCYmKHpVLT1hLCRVPWkpfWZ1bmN0aW9uIG44ZSgpe2Zvcih2YXIgaSxhPWpVLGYscD0xLzA7YTspYS5fY2FsbD8ocD5hLl90aW1lJiYocD1hLl90aW1lKSxpPWEsYT1hLl9uZXh0KTooZj1hLl9uZXh0LGEuX25leHQ9bnVsbCxhPWk/aS5fbmV4dD1mOmpVPWYpO0lQPWksbTF0KHApfWZ1bmN0aW9uIG0xdChpKXtpZighQ0Epe01QJiYoTVA9Y2xlYXJUaW1lb3V0KE1QKSk7dmFyIGE9aS1YNzthPjI0PyhpPDEvMCYmKE1QPXNldFRpbWVvdXQoRE10LGktT1Aubm93KCktelUpKSxEUCYmKERQPWNsZWFySW50ZXJ2YWwoRFApKSk6KERQfHwoJFU9T1Aubm93KCksRFA9c2V0SW50ZXJ2YWwoZThlLEFNdCkpLENBPTEsTE10KERNdCkpfX1mdW5jdGlvbiBJTXQoaSxhLGYpe3ZhciBwPW5ldyBxVTtyZXR1cm4gYT1hPT1udWxsPzA6K2EscC5yZXN0YXJ0KHc9PntwLnN0b3AoKSxpKHcrYSl9LGEsZikscH12YXIgcjhlPVZMdCgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxpOGU9W10sT010PTAsUE10PTEseTF0PTIsSFU9MyxGTXQ9NCx4MXQ9NSxWVT02O2Z1bmN0aW9uIEdVKGksYSxmLHAsdyxtKXt2YXIgYj1pLl9fdHJhbnNpdGlvbjtpZighYilpLl9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKGYgaW4gYilyZXR1cm47czhlKGksZix7bmFtZTphLGluZGV4OnAsZ3JvdXA6dyxvbjpyOGUsdHdlZW46aThlLHRpbWU6bS50aW1lLGRlbGF5Om0uZGVsYXksZHVyYXRpb246bS5kdXJhdGlvbixlYXNlOm0uZWFzZSx0aW1lcjpudWxsLHN0YXRlOk9NdH0pfWZ1bmN0aW9uIGsxdChpLGEpe3ZhciBmPVp2KGksYSk7aWYoZi5zdGF0ZT5PTXQpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gZn1mdW5jdGlvbiBsMyhpLGEpe3ZhciBmPVp2KGksYSk7aWYoZi5zdGF0ZT5IVSl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gZn1mdW5jdGlvbiBadihpLGEpe3ZhciBmPWkuX190cmFuc2l0aW9uO2lmKCFmfHwhKGY9ZlthXSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiBmfWZ1bmN0aW9uIHM4ZShpLGEsZil7dmFyIHA9aS5fX3RyYW5zaXRpb24sdztwW2FdPWYsZi50aW1lcj1NTXQobSwwLGYudGltZSk7ZnVuY3Rpb24gbShBKXtmLnN0YXRlPVBNdCxmLnRpbWVyLnJlc3RhcnQoYixmLmRlbGF5LGYudGltZSksZi5kZWxheTw9QSYmYihBLWYuZGVsYXkpfWZ1bmN0aW9uIGIoQSl7dmFyIEksQixOLFI7aWYoZi5zdGF0ZSE9PVBNdClyZXR1cm4gXygpO2ZvcihJIGluIHApaWYoUj1wW0ldLFIubmFtZT09PWYubmFtZSl7aWYoUi5zdGF0ZT09PUhVKXJldHVybiBJTXQoYik7Ui5zdGF0ZT09PUZNdD8oUi5zdGF0ZT1WVSxSLnRpbWVyLnN0b3AoKSxSLm9uLmNhbGwoImludGVycnVwdCIsaSxpLl9fZGF0YV9fLFIuaW5kZXgsUi5ncm91cCksZGVsZXRlIHBbSV0pOitJPGEmJihSLnN0YXRlPVZVLFIudGltZXIuc3RvcCgpLFIub24uY2FsbCgiY2FuY2VsIixpLGkuX19kYXRhX18sUi5pbmRleCxSLmdyb3VwKSxkZWxldGUgcFtJXSl9aWYoSU10KGZ1bmN0aW9uKCl7Zi5zdGF0ZT09PUhVJiYoZi5zdGF0ZT1GTXQsZi50aW1lci5yZXN0YXJ0KEUsZi5kZWxheSxmLnRpbWUpLEUoQSkpfSksZi5zdGF0ZT15MXQsZi5vbi5jYWxsKCJzdGFydCIsaSxpLl9fZGF0YV9fLGYuaW5kZXgsZi5ncm91cCksZi5zdGF0ZT09PXkxdCl7Zm9yKGYuc3RhdGU9SFUsdz1uZXcgQXJyYXkoTj1mLnR3ZWVuLmxlbmd0aCksST0wLEI9LTE7STxOOysrSSkoUj1mLnR3ZWVuW0ldLnZhbHVlLmNhbGwoaSxpLl9fZGF0YV9fLGYuaW5kZXgsZi5ncm91cCkpJiYod1srK0JdPVIpO3cubGVuZ3RoPUIrMX19ZnVuY3Rpb24gRShBKXtmb3IodmFyIEk9QTxmLmR1cmF0aW9uP2YuZWFzZS5jYWxsKG51bGwsQS9mLmR1cmF0aW9uKTooZi50aW1lci5yZXN0YXJ0KF8pLGYuc3RhdGU9eDF0LDEpLEI9LTEsTj13Lmxlbmd0aDsrK0I8Tjspd1tCXS5jYWxsKGksSSk7Zi5zdGF0ZT09PXgxdCYmKGYub24uY2FsbCgiZW5kIixpLGkuX19kYXRhX18sZi5pbmRleCxmLmdyb3VwKSxfKCkpfWZ1bmN0aW9uIF8oKXtmLnN0YXRlPVZVLGYudGltZXIuc3RvcCgpLGRlbGV0ZSBwW2FdO2Zvcih2YXIgQSBpbiBwKXJldHVybjtkZWxldGUgaS5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIGE4ZShpLGEpe3ZhciBmPWkuX190cmFuc2l0aW9uLHAsdyxtPSEwLGI7aWYoZil7YT1hPT1udWxsP251bGw6YSsiIjtmb3IoYiBpbiBmKXtpZigocD1mW2JdKS5uYW1lIT09YSl7bT0hMTtjb250aW51ZX13PXAuc3RhdGU+eTF0JiZwLnN0YXRlPHgxdCxwLnN0YXRlPVZVLHAudGltZXIuc3RvcCgpLHAub24uY2FsbCh3PyJpbnRlcnJ1cHQiOiJjYW5jZWwiLGksaS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBmW2JdfW0mJmRlbGV0ZSBpLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gbzhlKGkpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXthOGUodGhpcyxpKX0pfWZ1bmN0aW9uIGM4ZShpLGEpe3ZhciBmLHA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHc9bDModGhpcyxpKSxtPXcudHdlZW47aWYobSE9PWYpe3A9Zj1tO2Zvcih2YXIgYj0wLEU9cC5sZW5ndGg7YjxFOysrYilpZihwW2JdLm5hbWU9PT1hKXtwPXAuc2xpY2UoKSxwLnNwbGljZShiLDEpO2JyZWFrfX13LnR3ZWVuPXB9fWZ1bmN0aW9uIHU4ZShpLGEsZil7dmFyIHAsdztpZih0eXBlb2YgZiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG09bDModGhpcyxpKSxiPW0udHdlZW47aWYoYiE9PXApe3c9KHA9Yikuc2xpY2UoKTtmb3IodmFyIEU9e25hbWU6YSx2YWx1ZTpmfSxfPTAsQT13Lmxlbmd0aDtfPEE7KytfKWlmKHdbX10ubmFtZT09PWEpe3dbX109RTticmVha31fPT09QSYmdy5wdXNoKEUpfW0udHdlZW49d319ZnVuY3Rpb24gbDhlKGksYSl7dmFyIGY9dGhpcy5faWQ7aWYoaSs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHA9WnYodGhpcy5ub2RlKCksZikudHdlZW4sdz0wLG09cC5sZW5ndGgsYjt3PG07Kyt3KWlmKChiPXBbd10pLm5hbWU9PT1pKXJldHVybiBiLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKGE9PW51bGw/YzhlOnU4ZSkoZixpLGEpKX1mdW5jdGlvbiBFMXQoaSxhLGYpe3ZhciBwPWkuX2lkO3JldHVybiBpLmVhY2goZnVuY3Rpb24oKXt2YXIgdz1sMyh0aGlzLHApOyh3LnZhbHVlfHwody52YWx1ZT17fSkpW2FdPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24odyl7cmV0dXJuIFp2KHcscCkudmFsdWVbYV19fWZ1bmN0aW9uIE5NdChpLGEpe3ZhciBmO3JldHVybih0eXBlb2YgYT09Im51bWJlciI/UXY6YSBpbnN0YW5jZW9mIFc3P0JVOihmPVc3KGEpKT8oYT1mLEJVKTpUTXQpKGksYSl9ZnVuY3Rpb24gaDhlKGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGkpfX1mdW5jdGlvbiBmOGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpfX1mdW5jdGlvbiBkOGUoaSxhLGYpe3ZhciBwLHc9ZisiIixtO3JldHVybiBmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0QXR0cmlidXRlKGkpO3JldHVybiBiPT09dz9udWxsOmI9PT1wP206bT1hKHA9YixmKX19ZnVuY3Rpb24gZzhlKGksYSxmKXt2YXIgcCx3PWYrIiIsbTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCk7cmV0dXJuIGI9PT13P251bGw6Yj09PXA/bTptPWEocD1iLGYpfX1mdW5jdGlvbiBwOGUoaSxhLGYpe3ZhciBwLHcsbTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYixFPWYodGhpcyksXztyZXR1cm4gRT09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGkpOihiPXRoaXMuZ2V0QXR0cmlidXRlKGkpLF89RSsiIixiPT09Xz9udWxsOmI9PT1wJiZfPT09dz9tOih3PV8sbT1hKHA9YixFKSkpfX1mdW5jdGlvbiBiOGUoaSxhLGYpe3ZhciBwLHcsbTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYixFPWYodGhpcyksXztyZXR1cm4gRT09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKTooYj10aGlzLmdldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCksXz1FKyIiLGI9PT1fP251bGw6Yj09PXAmJl89PT13P206KHc9XyxtPWEocD1iLEUpKSl9fWZ1bmN0aW9uIHc4ZShpLGEpe3ZhciBmPUFVKGkpLHA9Zj09PSJ0cmFuc2Zvcm0iP1hrZTpOTXQ7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKGksdHlwZW9mIGE9PSJmdW5jdGlvbiI/KGYubG9jYWw/YjhlOnA4ZSkoZixwLEUxdCh0aGlzLCJhdHRyLiIraSxhKSk6YT09bnVsbD8oZi5sb2NhbD9mOGU6aDhlKShmKTooZi5sb2NhbD9nOGU6ZDhlKShmLHAsYSkpfWZ1bmN0aW9uIHY4ZShpLGEpe3JldHVybiBmdW5jdGlvbihmKXt0aGlzLnNldEF0dHJpYnV0ZShpLGEuY2FsbCh0aGlzLGYpKX19ZnVuY3Rpb24gbThlKGksYSl7cmV0dXJuIGZ1bmN0aW9uKGYpe3RoaXMuc2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsLGEuY2FsbCh0aGlzLGYpKX19ZnVuY3Rpb24geThlKGksYSl7dmFyIGYscDtmdW5jdGlvbiB3KCl7dmFyIG09YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG0hPT1wJiYoZj0ocD1tKSYmbThlKGksbSkpLGZ9cmV0dXJuIHcuX3ZhbHVlPWEsd31mdW5jdGlvbiB4OGUoaSxhKXt2YXIgZixwO2Z1bmN0aW9uIHcoKXt2YXIgbT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbSE9PXAmJihmPShwPW0pJiZ2OGUoaSxtKSksZn1yZXR1cm4gdy5fdmFsdWU9YSx3fWZ1bmN0aW9uIGs4ZShpLGEpe3ZhciBmPSJhdHRyLiIraTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGY9dGhpcy50d2VlbihmKSkmJmYuX3ZhbHVlO2lmKGE9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4oZixudWxsKTtpZih0eXBlb2YgYSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7dmFyIHA9QVUoaSk7cmV0dXJuIHRoaXMudHdlZW4oZiwocC5sb2NhbD95OGU6eDhlKShwLGEpKX1mdW5jdGlvbiBFOGUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXtrMXQodGhpcyxpKS5kZWxheT0rYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFQ4ZShpLGEpe3JldHVybiBhPSthLGZ1bmN0aW9uKCl7azF0KHRoaXMsaSkuZGVsYXk9YX19ZnVuY3Rpb24gQzhlKGkpe3ZhciBhPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGk9PSJmdW5jdGlvbiI/RThlOlQ4ZSkoYSxpKSk6WnYodGhpcy5ub2RlKCksYSkuZGVsYXl9ZnVuY3Rpb24gXzhlKGksYSl7cmV0dXJuIGZ1bmN0aW9uKCl7bDModGhpcyxpKS5kdXJhdGlvbj0rYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFM4ZShpLGEpe3JldHVybiBhPSthLGZ1bmN0aW9uKCl7bDModGhpcyxpKS5kdXJhdGlvbj1hfX1mdW5jdGlvbiBBOGUoaSl7dmFyIGE9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgaT09ImZ1bmN0aW9uIj9fOGU6UzhlKShhLGkpKTpadih0aGlzLm5vZGUoKSxhKS5kdXJhdGlvbn1mdW5jdGlvbiBMOGUoaSxhKXtpZih0eXBlb2YgYSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7bDModGhpcyxpKS5lYXNlPWF9fWZ1bmN0aW9uIE04ZShpKXt2YXIgYT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goTDhlKGEsaSkpOlp2KHRoaXMubm9kZSgpLGEpLmVhc2V9ZnVuY3Rpb24gRDhlKGksYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGY9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYodHlwZW9mIGYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO2wzKHRoaXMsaSkuZWFzZT1mfX1mdW5jdGlvbiBJOGUoaSl7aWYodHlwZW9mIGkhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLmVhY2goRDhlKHRoaXMuX2lkLGkpKX1mdW5jdGlvbiBPOGUoaSl7dHlwZW9mIGkhPSJmdW5jdGlvbiImJihpPVhMdChpKSk7Zm9yKHZhciBhPXRoaXMuX2dyb3VwcyxmPWEubGVuZ3RoLHA9bmV3IEFycmF5KGYpLHc9MDt3PGY7Kyt3KWZvcih2YXIgbT1hW3ddLGI9bS5sZW5ndGgsRT1wW3ddPVtdLF8sQT0wO0E8YjsrK0EpKF89bVtBXSkmJmkuY2FsbChfLF8uX19kYXRhX18sQSxtKSYmRS5wdXNoKF8pO3JldHVybiBuZXcgdzUocCx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfWZ1bmN0aW9uIFA4ZShpKXtpZihpLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGE9dGhpcy5fZ3JvdXBzLGY9aS5fZ3JvdXBzLHA9YS5sZW5ndGgsdz1mLmxlbmd0aCxtPU1hdGgubWluKHAsdyksYj1uZXcgQXJyYXkocCksRT0wO0U8bTsrK0UpZm9yKHZhciBfPWFbRV0sQT1mW0VdLEk9Xy5sZW5ndGgsQj1iW0VdPW5ldyBBcnJheShJKSxOLFI9MDtSPEk7KytSKShOPV9bUl18fEFbUl0pJiYoQltSXT1OKTtmb3IoO0U8cDsrK0UpYltFXT1hW0VdO3JldHVybiBuZXcgdzUoYix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfWZ1bmN0aW9uIEY4ZShpKXtyZXR1cm4oaSsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKGEpe3ZhciBmPWEuaW5kZXhPZigiLiIpO3JldHVybiBmPj0wJiYoYT1hLnNsaWNlKDAsZikpLCFhfHxhPT09InN0YXJ0In0pfWZ1bmN0aW9uIE44ZShpLGEsZil7dmFyIHAsdyxtPUY4ZShhKT9rMXQ6bDM7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9bSh0aGlzLGkpLEU9Yi5vbjtFIT09cCYmKHc9KHA9RSkuY29weSgpKS5vbihhLGYpLGIub249d319ZnVuY3Rpb24gQjhlKGksYSl7dmFyIGY9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9adih0aGlzLm5vZGUoKSxmKS5vbi5vbihpKTp0aGlzLmVhY2goTjhlKGYsaSxhKSl9ZnVuY3Rpb24gUjhlKGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIGYgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK2YhPT1pKXJldHVybjthJiZhLnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBqOGUoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsUjhlKHRoaXMuX2lkKSl9ZnVuY3Rpb24gJDhlKGkpe3ZhciBhPXRoaXMuX25hbWUsZj10aGlzLl9pZDt0eXBlb2YgaSE9ImZ1bmN0aW9uIiYmKGk9aTF0KGkpKTtmb3IodmFyIHA9dGhpcy5fZ3JvdXBzLHc9cC5sZW5ndGgsbT1uZXcgQXJyYXkodyksYj0wO2I8dzsrK2IpZm9yKHZhciBFPXBbYl0sXz1FLmxlbmd0aCxBPW1bYl09bmV3IEFycmF5KF8pLEksQixOPTA7TjxfOysrTikoST1FW05dKSYmKEI9aS5jYWxsKEksSS5fX2RhdGFfXyxOLEUpKSYmKCJfX2RhdGFfXyJpbiBJJiYoQi5fX2RhdGFfXz1JLl9fZGF0YV9fKSxBW05dPUIsR1UoQVtOXSxhLGYsTixBLFp2KEksZikpKTtyZXR1cm4gbmV3IHc1KG0sdGhpcy5fcGFyZW50cyxhLGYpfWZ1bmN0aW9uIHo4ZShpKXt2YXIgYT10aGlzLl9uYW1lLGY9dGhpcy5faWQ7dHlwZW9mIGkhPSJmdW5jdGlvbiImJihpPUtMdChpKSk7Zm9yKHZhciBwPXRoaXMuX2dyb3Vwcyx3PXAubGVuZ3RoLG09W10sYj1bXSxFPTA7RTx3OysrRSlmb3IodmFyIF89cFtFXSxBPV8ubGVuZ3RoLEksQj0wO0I8QTsrK0IpaWYoST1fW0JdKXtmb3IodmFyIE49aS5jYWxsKEksSS5fX2RhdGFfXyxCLF8pLFIsej1adihJLGYpLFc9MCxldD1OLmxlbmd0aDtXPGV0OysrVykoUj1OW1ddKSYmR1UoUixhLGYsVyxOLHopO20ucHVzaChOKSxiLnB1c2goSSl9cmV0dXJuIG5ldyB3NShtLGIsYSxmKX12YXIgcThlPUNQLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBIOGUoKXtyZXR1cm4gbmV3IHE4ZSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gVjhlKGksYSl7dmFyIGYscCx3O3JldHVybiBmdW5jdGlvbigpe3ZhciBtPWtBKHRoaXMsaSksYj0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShpKSxrQSh0aGlzLGkpKTtyZXR1cm4gbT09PWI/bnVsbDptPT09ZiYmYj09PXA/dzp3PWEoZj1tLHA9Yil9fWZ1bmN0aW9uIEJNdChpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGkpfX1mdW5jdGlvbiBHOGUoaSxhLGYpe3ZhciBwLHc9ZisiIixtO3JldHVybiBmdW5jdGlvbigpe3ZhciBiPWtBKHRoaXMsaSk7cmV0dXJuIGI9PT13P251bGw6Yj09PXA/bTptPWEocD1iLGYpfX1mdW5jdGlvbiBVOGUoaSxhLGYpe3ZhciBwLHcsbTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYj1rQSh0aGlzLGkpLEU9Zih0aGlzKSxfPUUrIiI7cmV0dXJuIEU9PW51bGwmJihfPUU9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoaSksa0EodGhpcyxpKSkpLGI9PT1fP251bGw6Yj09PXAmJl89PT13P206KHc9XyxtPWEocD1iLEUpKX19ZnVuY3Rpb24gVzhlKGksYSl7dmFyIGYscCx3LG09InN0eWxlLiIrYSxiPSJlbmQuIittLEU7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIF89bDModGhpcyxpKSxBPV8ub24sST1fLnZhbHVlW21dPT1udWxsP0V8fChFPUJNdChhKSk6dm9pZCAwOyhBIT09Znx8dyE9PUkpJiYocD0oZj1BKS5jb3B5KCkpLm9uKGIsdz1JKSxfLm9uPXB9fWZ1bmN0aW9uIFk4ZShpLGEsZil7dmFyIHA9KGkrPSIiKT09InRyYW5zZm9ybSI/S2tlOk5NdDtyZXR1cm4gYT09bnVsbD90aGlzLnN0eWxlVHdlZW4oaSxWOGUoaSxwKSkub24oImVuZC5zdHlsZS4iK2ksQk10KGkpKTp0eXBlb2YgYT09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oaSxVOGUoaSxwLEUxdCh0aGlzLCJzdHlsZS4iK2ksYSkpKS5lYWNoKFc4ZSh0aGlzLl9pZCxpKSk6dGhpcy5zdHlsZVR3ZWVuKGksRzhlKGkscCxhKSxmKS5vbigiZW5kLnN0eWxlLiIraSxudWxsKX1mdW5jdGlvbiBLOGUoaSxhLGYpe3JldHVybiBmdW5jdGlvbihwKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGksYS5jYWxsKHRoaXMscCksZil9fWZ1bmN0aW9uIFg4ZShpLGEsZil7dmFyIHAsdztmdW5jdGlvbiBtKCl7dmFyIGI9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGIhPT13JiYocD0odz1iKSYmSzhlKGksYixmKSkscH1yZXR1cm4gbS5fdmFsdWU9YSxtfWZ1bmN0aW9uIFE4ZShpLGEsZil7dmFyIHA9InN0eWxlLiIrKGkrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHA9dGhpcy50d2VlbihwKSkmJnAuX3ZhbHVlO2lmKGE9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4ocCxudWxsKTtpZih0eXBlb2YgYSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4ocCxYOGUoaSxhLGY/PyIiKSl9ZnVuY3Rpb24gWjhlKGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9aX19ZnVuY3Rpb24gSjhlKGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWkodGhpcyk7dGhpcy50ZXh0Q29udGVudD1hPz8iIn19ZnVuY3Rpb24gdEVlKGkpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0Iix0eXBlb2YgaT09ImZ1bmN0aW9uIj9KOGUoRTF0KHRoaXMsInRleHQiLGkpKTpaOGUoaT09bnVsbD8iIjppKyIiKSl9ZnVuY3Rpb24gZUVlKGkpe3JldHVybiBmdW5jdGlvbihhKXt0aGlzLnRleHRDb250ZW50PWkuY2FsbCh0aGlzLGEpfX1mdW5jdGlvbiBuRWUoaSl7dmFyIGEsZjtmdW5jdGlvbiBwKCl7dmFyIHc9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHchPT1mJiYoYT0oZj13KSYmZUVlKHcpKSxhfXJldHVybiBwLl92YWx1ZT1pLHB9ZnVuY3Rpb24gckVlKGkpe3ZhciBhPSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKGE9dGhpcy50d2VlbihhKSkmJmEuX3ZhbHVlO2lmKGk9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4oYSxudWxsKTtpZih0eXBlb2YgaSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oYSxuRWUoaSkpfWZ1bmN0aW9uIGlFZSgpe2Zvcih2YXIgaT10aGlzLl9uYW1lLGE9dGhpcy5faWQsZj1STXQoKSxwPXRoaXMuX2dyb3Vwcyx3PXAubGVuZ3RoLG09MDttPHc7KyttKWZvcih2YXIgYj1wW21dLEU9Yi5sZW5ndGgsXyxBPTA7QTxFOysrQSlpZihfPWJbQV0pe3ZhciBJPVp2KF8sYSk7R1UoXyxpLGYsQSxiLHt0aW1lOkkudGltZStJLmRlbGF5K0kuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjpJLmR1cmF0aW9uLGVhc2U6SS5lYXNlfSl9cmV0dXJuIG5ldyB3NShwLHRoaXMuX3BhcmVudHMsaSxmKX1mdW5jdGlvbiBzRWUoKXt2YXIgaSxhLGY9dGhpcyxwPWYuX2lkLHc9Zi5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG0sYil7dmFyIEU9e3ZhbHVlOmJ9LF89e3ZhbHVlOmZ1bmN0aW9uKCl7LS13PT09MCYmbSgpfX07Zi5lYWNoKGZ1bmN0aW9uKCl7dmFyIEE9bDModGhpcyxwKSxJPUEub247SSE9PWkmJihhPShpPUkpLmNvcHkoKSxhLl8uY2FuY2VsLnB1c2goRSksYS5fLmludGVycnVwdC5wdXNoKEUpLGEuXy5lbmQucHVzaChfKSksQS5vbj1hfSksdz09PTAmJm0oKX0pfXZhciBhRWU9MDtmdW5jdGlvbiB3NShpLGEsZixwKXt0aGlzLl9ncm91cHM9aSx0aGlzLl9wYXJlbnRzPWEsdGhpcy5fbmFtZT1mLHRoaXMuX2lkPXB9ZnVuY3Rpb24gUk10KCl7cmV0dXJuKythRWV9dmFyIHY1PUNQLnByb3RvdHlwZTt3NS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnc1LHNlbGVjdDokOGUsc2VsZWN0QWxsOno4ZSxzZWxlY3RDaGlsZDp2NS5zZWxlY3RDaGlsZCxzZWxlY3RDaGlsZHJlbjp2NS5zZWxlY3RDaGlsZHJlbixmaWx0ZXI6TzhlLG1lcmdlOlA4ZSxzZWxlY3Rpb246SDhlLHRyYW5zaXRpb246aUVlLGNhbGw6djUuY2FsbCxub2Rlczp2NS5ub2Rlcyxub2RlOnY1Lm5vZGUsc2l6ZTp2NS5zaXplLGVtcHR5OnY1LmVtcHR5LGVhY2g6djUuZWFjaCxvbjpCOGUsYXR0cjp3OGUsYXR0clR3ZWVuOms4ZSxzdHlsZTpZOGUsc3R5bGVUd2VlbjpROGUsdGV4dDp0RWUsdGV4dFR3ZWVuOnJFZSxyZW1vdmU6ajhlLHR3ZWVuOmw4ZSxkZWxheTpDOGUsZHVyYXRpb246QThlLGVhc2U6TThlLGVhc2VWYXJ5aW5nOkk4ZSxlbmQ6c0VlLFtTeW1ib2wuaXRlcmF0b3JdOnY1W1N5bWJvbC5pdGVyYXRvcl19O2Z1bmN0aW9uIG9FZShpKXtyZXR1cm4oKGkqPTIpPD0xP2kqaSppOihpLT0yKSppKmkrMikvMn12YXIgY0VlPXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpvRWV9O2Z1bmN0aW9uIHVFZShpLGEpe2Zvcih2YXIgZjshKGY9aS5fX3RyYW5zaXRpb24pfHwhKGY9ZlthXSk7KWlmKCEoaT1pLnBhcmVudE5vZGUpKXRocm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke2F9IG5vdCBmb3VuZGApO3JldHVybiBmfWZ1bmN0aW9uIGxFZShpKXt2YXIgYSxmO2kgaW5zdGFuY2VvZiB3NT8oYT1pLl9pZCxpPWkuX25hbWUpOihhPVJNdCgpLChmPWNFZSkudGltZT12MXQoKSxpPWk9PW51bGw/bnVsbDppKyIiKTtmb3IodmFyIHA9dGhpcy5fZ3JvdXBzLHc9cC5sZW5ndGgsbT0wO208dzsrK20pZm9yKHZhciBiPXBbbV0sRT1iLmxlbmd0aCxfLEE9MDtBPEU7KytBKShfPWJbQV0pJiZHVShfLGksYSxBLGIsZnx8dUVlKF8sYSkpO3JldHVybiBuZXcgdzUocCx0aGlzLl9wYXJlbnRzLGksYSl9Q1AucHJvdG90eXBlLmludGVycnVwdD1vOGUsQ1AucHJvdG90eXBlLnRyYW5zaXRpb249bEVlO2NvbnN0IFQxdD1NYXRoLlBJLEMxdD0yKlQxdCxRNz0xZS02LGhFZT1DMXQtUTc7ZnVuY3Rpb24gak10KGkpe3RoaXMuXys9aVswXTtmb3IobGV0IGE9MSxmPWkubGVuZ3RoO2E8ZjsrK2EpdGhpcy5fKz1hcmd1bWVudHNbYV0raVthXX1mdW5jdGlvbiBmRWUoaSl7bGV0IGE9TWF0aC5mbG9vcihpKTtpZighKGE+PTApKXRocm93IG5ldyBFcnJvcihgaW52YWxpZCBkaWdpdHM6ICR7aX1gKTtpZihhPjE1KXJldHVybiBqTXQ7Y29uc3QgZj0xMCoqYTtyZXR1cm4gZnVuY3Rpb24ocCl7dGhpcy5fKz1wWzBdO2ZvcihsZXQgdz0xLG09cC5sZW5ndGg7dzxtOysrdyl0aGlzLl8rPU1hdGgucm91bmQoYXJndW1lbnRzW3ddKmYpL2YrcFt3XX19bGV0IGRFZT1jbGFzc3tjb25zdHJ1Y3RvcihhKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIix0aGlzLl9hcHBlbmQ9YT09bnVsbD9qTXQ6ZkVlKGEpfW1vdmVUbyhhLGYpe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rYX0sJHt0aGlzLl95MD10aGlzLl95MT0rZn1gfWNsb3NlUGF0aCgpe3RoaXMuX3gxIT09bnVsbCYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuX2FwcGVuZGBaYCl9bGluZVRvKGEsZil7dGhpcy5fYXBwZW5kYEwke3RoaXMuX3gxPSthfSwke3RoaXMuX3kxPStmfWB9cXVhZHJhdGljQ3VydmVUbyhhLGYscCx3KXt0aGlzLl9hcHBlbmRgUSR7K2F9LCR7K2Z9LCR7dGhpcy5feDE9K3B9LCR7dGhpcy5feTE9K3d9YH1iZXppZXJDdXJ2ZVRvKGEsZixwLHcsbSxiKXt0aGlzLl9hcHBlbmRgQyR7K2F9LCR7K2Z9LCR7K3B9LCR7K3d9LCR7dGhpcy5feDE9K219LCR7dGhpcy5feTE9K2J9YH1hcmNUbyhhLGYscCx3LG0pe2lmKGE9K2EsZj0rZixwPStwLHc9K3csbT0rbSxtPDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7bX1gKTtsZXQgYj10aGlzLl94MSxFPXRoaXMuX3kxLF89cC1hLEE9dy1mLEk9Yi1hLEI9RS1mLE49SSpJK0IqQjtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gxPWF9LCR7dGhpcy5feTE9Zn1gO2Vsc2UgaWYoTj5RNylpZighKE1hdGguYWJzKEIqXy1BKkkpPlE3KXx8IW0pdGhpcy5fYXBwZW5kYEwke3RoaXMuX3gxPWF9LCR7dGhpcy5feTE9Zn1gO2Vsc2V7bGV0IFI9cC1iLHo9dy1FLFc9XypfK0EqQSxldD1SKlIreip6LHN0PU1hdGguc3FydChXKSxhdD1NYXRoLnNxcnQoTiksYnQ9bSpNYXRoLnRhbigoVDF0LU1hdGguYWNvcygoVytOLWV0KS8oMipzdCphdCkpKS8yKSxtdD1idC9hdCx5dD1idC9zdDtNYXRoLmFicyhtdC0xKT5RNyYmdGhpcy5fYXBwZW5kYEwke2ErbXQqSX0sJHtmK210KkJ9YCx0aGlzLl9hcHBlbmRgQSR7bX0sJHttfSwwLDAsJHsrKEIqUj5JKnopfSwke3RoaXMuX3gxPWEreXQqX30sJHt0aGlzLl95MT1mK3l0KkF9YH19YXJjKGEsZixwLHcsbSxiKXtpZihhPSthLGY9K2YscD0rcCxiPSEhYixwPDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7cH1gKTtsZXQgRT1wKk1hdGguY29zKHcpLF89cCpNYXRoLnNpbih3KSxBPWErRSxJPWYrXyxCPTFeYixOPWI/dy1tOm0tdzt0aGlzLl94MT09PW51bGw/dGhpcy5fYXBwZW5kYE0ke0F9LCR7SX1gOihNYXRoLmFicyh0aGlzLl94MS1BKT5RN3x8TWF0aC5hYnModGhpcy5feTEtSSk+UTcpJiZ0aGlzLl9hcHBlbmRgTCR7QX0sJHtJfWAscCYmKE48MCYmKE49TiVDMXQrQzF0KSxOPmhFZT90aGlzLl9hcHBlbmRgQSR7cH0sJHtwfSwwLDEsJHtCfSwke2EtRX0sJHtmLV99QSR7cH0sJHtwfSwwLDEsJHtCfSwke3RoaXMuX3gxPUF9LCR7dGhpcy5feTE9SX1gOk4+UTcmJnRoaXMuX2FwcGVuZGBBJHtwfSwke3B9LDAsJHsrKE4+PVQxdCl9LCR7Qn0sJHt0aGlzLl94MT1hK3AqTWF0aC5jb3MobSl9LCR7dGhpcy5feTE9ZitwKk1hdGguc2luKG0pfWApfXJlY3QoYSxmLHAsdyl7dGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gwPXRoaXMuX3gxPSthfSwke3RoaXMuX3kwPXRoaXMuX3kxPStmfWgke3A9K3B9diR7K3d9aCR7LXB9WmB9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5ffX07ZnVuY3Rpb24gZ0VlKGkpe2lmKCFpLm9rKXRocm93IG5ldyBFcnJvcihpLnN0YXR1cysiICIraS5zdGF0dXNUZXh0KTtyZXR1cm4gaS50ZXh0KCl9ZnVuY3Rpb24gcEVlKGksYSl7cmV0dXJuIGZldGNoKGksYSkudGhlbihnRWUpfWZ1bmN0aW9uIGJFZShpKXtyZXR1cm4oYSxmKT0+cEVlKGEsZikudGhlbihwPT5uZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHAsaSkpfXZhciB3RWU9YkVlKCJpbWFnZS9zdmcreG1sIik7ZnVuY3Rpb24gdkVlKGkpe3JldHVybiBNYXRoLmFicyhpPU1hdGgucm91bmQoaSkpPj0xZTIxP2kudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTppLnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBVVShpLGEpe2lmKChmPShpPWE/aS50b0V4cG9uZW50aWFsKGEtMSk6aS50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgZixwPWkuc2xpY2UoMCxmKTtyZXR1cm5bcC5sZW5ndGg+MT9wWzBdK3Auc2xpY2UoMik6cCwraS5zbGljZShmKzEpXX1mdW5jdGlvbiBfQShpKXtyZXR1cm4gaT1VVShNYXRoLmFicyhpKSksaT9pWzFdOk5hTn1mdW5jdGlvbiBtRWUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oZixwKXtmb3IodmFyIHc9Zi5sZW5ndGgsbT1bXSxiPTAsRT1pWzBdLF89MDt3PjAmJkU+MCYmKF8rRSsxPnAmJihFPU1hdGgubWF4KDEscC1fKSksbS5wdXNoKGYuc3Vic3RyaW5nKHctPUUsdytFKSksISgoXys9RSsxKT5wKSk7KUU9aVtiPShiKzEpJWkubGVuZ3RoXTtyZXR1cm4gbS5yZXZlcnNlKCkuam9pbihhKX19ZnVuY3Rpb24geUVlKGkpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKGYpe3JldHVybiBpWytmXX0pfX12YXIgeEVlPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIFdVKGkpe2lmKCEoYT14RWUuZXhlYyhpKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIitpKTt2YXIgYTtyZXR1cm4gbmV3IF8xdCh7ZmlsbDphWzFdLGFsaWduOmFbMl0sc2lnbjphWzNdLHN5bWJvbDphWzRdLHplcm86YVs1XSx3aWR0aDphWzZdLGNvbW1hOmFbN10scHJlY2lzaW9uOmFbOF0mJmFbOF0uc2xpY2UoMSksdHJpbTphWzldLHR5cGU6YVsxMF19KX1XVS5wcm90b3R5cGU9XzF0LnByb3RvdHlwZTtmdW5jdGlvbiBfMXQoaSl7dGhpcy5maWxsPWkuZmlsbD09PXZvaWQgMD8iICI6aS5maWxsKyIiLHRoaXMuYWxpZ249aS5hbGlnbj09PXZvaWQgMD8iPiI6aS5hbGlnbisiIix0aGlzLnNpZ249aS5zaWduPT09dm9pZCAwPyItIjppLnNpZ24rIiIsdGhpcy5zeW1ib2w9aS5zeW1ib2w9PT12b2lkIDA/IiI6aS5zeW1ib2wrIiIsdGhpcy56ZXJvPSEhaS56ZXJvLHRoaXMud2lkdGg9aS53aWR0aD09PXZvaWQgMD92b2lkIDA6K2kud2lkdGgsdGhpcy5jb21tYT0hIWkuY29tbWEsdGhpcy5wcmVjaXNpb249aS5wcmVjaXNpb249PT12b2lkIDA/dm9pZCAwOitpLnByZWNpc2lvbix0aGlzLnRyaW09ISFpLnRyaW0sdGhpcy50eXBlPWkudHlwZT09PXZvaWQgMD8iIjppLnR5cGUrIiJ9XzF0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh0aGlzLndpZHRoPT09dm9pZCAwPyIiOk1hdGgubWF4KDEsdGhpcy53aWR0aHwwKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodGhpcy5wcmVjaXNpb249PT12b2lkIDA/IiI6Ii4iK01hdGgubWF4KDAsdGhpcy5wcmVjaXNpb258MCkpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O2Z1bmN0aW9uIGtFZShpKXt0OmZvcih2YXIgYT1pLmxlbmd0aCxmPTEscD0tMSx3O2Y8YTsrK2Ypc3dpdGNoKGlbZl0pe2Nhc2UiLiI6cD13PWY7YnJlYWs7Y2FzZSIwIjpwPT09MCYmKHA9Ziksdz1mO2JyZWFrO2RlZmF1bHQ6aWYoIStpW2ZdKWJyZWFrIHQ7cD4wJiYocD0wKTticmVha31yZXR1cm4gcD4wP2kuc2xpY2UoMCxwKStpLnNsaWNlKHcrMSk6aX12YXIgJE10O2Z1bmN0aW9uIEVFZShpLGEpe3ZhciBmPVVVKGksYSk7aWYoIWYpcmV0dXJuIGkrIiI7dmFyIHA9ZlswXSx3PWZbMV0sbT13LSgkTXQ9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHcvMykpKSozKSsxLGI9cC5sZW5ndGg7cmV0dXJuIG09PT1iP3A6bT5iP3ArbmV3IEFycmF5KG0tYisxKS5qb2luKCIwIik6bT4wP3Auc2xpY2UoMCxtKSsiLiIrcC5zbGljZShtKToiMC4iK25ldyBBcnJheSgxLW0pLmpvaW4oIjAiKStVVShpLE1hdGgubWF4KDAsYSttLTEpKVswXX1mdW5jdGlvbiB6TXQoaSxhKXt2YXIgZj1VVShpLGEpO2lmKCFmKXJldHVybiBpKyIiO3ZhciBwPWZbMF0sdz1mWzFdO3JldHVybiB3PDA/IjAuIituZXcgQXJyYXkoLXcpLmpvaW4oIjAiKStwOnAubGVuZ3RoPncrMT9wLnNsaWNlKDAsdysxKSsiLiIrcC5zbGljZSh3KzEpOnArbmV3IEFycmF5KHctcC5sZW5ndGgrMikuam9pbigiMCIpfWNvbnN0IHFNdD17IiUiOihpLGEpPT4oaSoxMDApLnRvRml4ZWQoYSksYjppPT5NYXRoLnJvdW5kKGkpLnRvU3RyaW5nKDIpLGM6aT0+aSsiIixkOnZFZSxlOihpLGEpPT5pLnRvRXhwb25lbnRpYWwoYSksZjooaSxhKT0+aS50b0ZpeGVkKGEpLGc6KGksYSk9PmkudG9QcmVjaXNpb24oYSksbzppPT5NYXRoLnJvdW5kKGkpLnRvU3RyaW5nKDgpLHA6KGksYSk9PnpNdChpKjEwMCxhKSxyOnpNdCxzOkVFZSxYOmk9Pk1hdGgucm91bmQoaSkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkseDppPT5NYXRoLnJvdW5kKGkpLnRvU3RyaW5nKDE2KX07ZnVuY3Rpb24gSE10KGkpe3JldHVybiBpfXZhciBWTXQ9QXJyYXkucHJvdG90eXBlLm1hcCxHTXQ9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCLCtSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIFRFZShpKXt2YXIgYT1pLmdyb3VwaW5nPT09dm9pZCAwfHxpLnRob3VzYW5kcz09PXZvaWQgMD9ITXQ6bUVlKFZNdC5jYWxsKGkuZ3JvdXBpbmcsTnVtYmVyKSxpLnRob3VzYW5kcysiIiksZj1pLmN1cnJlbmN5PT09dm9pZCAwPyIiOmkuY3VycmVuY3lbMF0rIiIscD1pLmN1cnJlbmN5PT09dm9pZCAwPyIiOmkuY3VycmVuY3lbMV0rIiIsdz1pLmRlY2ltYWw9PT12b2lkIDA/Ii4iOmkuZGVjaW1hbCsiIixtPWkubnVtZXJhbHM9PT12b2lkIDA/SE10OnlFZShWTXQuY2FsbChpLm51bWVyYWxzLFN0cmluZykpLGI9aS5wZXJjZW50PT09dm9pZCAwPyIlIjppLnBlcmNlbnQrIiIsRT1pLm1pbnVzPT09dm9pZCAwPyLiiJIiOmkubWludXMrIiIsXz1pLm5hbj09PXZvaWQgMD8iTmFOIjppLm5hbisiIjtmdW5jdGlvbiBBKEIpe0I9V1UoQik7dmFyIE49Qi5maWxsLFI9Qi5hbGlnbix6PUIuc2lnbixXPUIuc3ltYm9sLGV0PUIuemVybyxzdD1CLndpZHRoLGF0PUIuY29tbWEsYnQ9Qi5wcmVjaXNpb24sbXQ9Qi50cmltLHl0PUIudHlwZTt5dD09PSJuIj8oYXQ9ITAseXQ9ImciKTpxTXRbeXRdfHwoYnQ9PT12b2lkIDAmJihidD0xMiksbXQ9ITAseXQ9ImciKSwoZXR8fE49PT0iMCImJlI9PT0iPSIpJiYoZXQ9ITAsTj0iMCIsUj0iPSIpO3ZhciBmdD1XPT09IiQiP2Y6Vz09PSIjIiYmL1tib3hYXS8udGVzdCh5dCk/IjAiK3l0LnRvTG93ZXJDYXNlKCk6IiIsdXQ9Vz09PSIkIj9wOi9bJXBdLy50ZXN0KHl0KT9iOiIiLHZ0PXFNdFt5dF0sWD0vW2RlZmdwcnMlXS8udGVzdCh5dCk7YnQ9YnQ9PT12b2lkIDA/NjovW2dwcnNdLy50ZXN0KHl0KT9NYXRoLm1heCgxLE1hdGgubWluKDIxLGJ0KSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxidCkpO2Z1bmN0aW9uIHB0KFUpe3ZhciBUdD1mdCxudD11dCxJdCxPdCxCdDtpZih5dD09PSJjIiludD12dChVKStudCxVPSIiO2Vsc2V7VT0rVTt2YXIgRXQ9VTwwfHwxL1U8MDtpZihVPWlzTmFOKFUpP186dnQoTWF0aC5hYnMoVSksYnQpLG10JiYoVT1rRWUoVSkpLEV0JiYrVT09MCYmeiE9PSIrIiYmKEV0PSExKSxUdD0oRXQ/ej09PSIoIj96OkU6ej09PSItInx8ej09PSIoIj8iIjp6KStUdCxudD0oeXQ9PT0icyI/R010WzgrJE10LzNdOiIiKStudCsoRXQmJno9PT0iKCI/IikiOiIiKSxYKXtmb3IoSXQ9LTEsT3Q9VS5sZW5ndGg7KytJdDxPdDspaWYoQnQ9VS5jaGFyQ29kZUF0KEl0KSw0OD5CdHx8QnQ+NTcpe250PShCdD09PTQ2P3crVS5zbGljZShJdCsxKTpVLnNsaWNlKEl0KSkrbnQsVT1VLnNsaWNlKDAsSXQpO2JyZWFrfX19YXQmJiFldCYmKFU9YShVLDEvMCkpO3ZhciBaPVR0Lmxlbmd0aCtVLmxlbmd0aCtudC5sZW5ndGgsQ3Q9WjxzdD9uZXcgQXJyYXkoc3QtWisxKS5qb2luKE4pOiIiO3N3aXRjaChhdCYmZXQmJihVPWEoQ3QrVSxDdC5sZW5ndGg/c3QtbnQubGVuZ3RoOjEvMCksQ3Q9IiIpLFIpe2Nhc2UiPCI6VT1UdCtVK250K0N0O2JyZWFrO2Nhc2UiPSI6VT1UdCtDdCtVK250O2JyZWFrO2Nhc2UiXiI6VT1DdC5zbGljZSgwLFo9Q3QubGVuZ3RoPj4xKStUdCtVK250K0N0LnNsaWNlKFopO2JyZWFrO2RlZmF1bHQ6VT1DdCtUdCtVK250O2JyZWFrfXJldHVybiBtKFUpfXJldHVybiBwdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBCKyIifSxwdH1mdW5jdGlvbiBJKEIsTil7dmFyIFI9QSgoQj1XVShCKSxCLnR5cGU9ImYiLEIpKSx6PU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihfQShOKS8zKSkpKjMsVz1NYXRoLnBvdygxMCwteiksZXQ9R010Wzgrei8zXTtyZXR1cm4gZnVuY3Rpb24oc3Qpe3JldHVybiBSKFcqc3QpK2V0fX1yZXR1cm57Zm9ybWF0OkEsZm9ybWF0UHJlZml4Okl9fXZhciBZVSxVTXQsV010O0NFZSh7dGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19KTtmdW5jdGlvbiBDRWUoaSl7cmV0dXJuIFlVPVRFZShpKSxVTXQ9WVUuZm9ybWF0LFdNdD1ZVS5mb3JtYXRQcmVmaXgsWVV9ZnVuY3Rpb24gX0VlKGkpe3JldHVybiBNYXRoLm1heCgwLC1fQShNYXRoLmFicyhpKSkpfWZ1bmN0aW9uIFNFZShpLGEpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihfQShhKS8zKSkpKjMtX0EoTWF0aC5hYnMoaSkpKX1mdW5jdGlvbiBBRWUoaSxhKXtyZXR1cm4gaT1NYXRoLmFicyhpKSxhPU1hdGguYWJzKGEpLWksTWF0aC5tYXgoMCxfQShhKS1fQShpKSkrMX1mdW5jdGlvbiBLVShpLGEpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2UoaSk7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKGEpLmRvbWFpbihpKTticmVha31yZXR1cm4gdGhpc31jb25zdCBZTXQ9U3ltYm9sKCJpbXBsaWNpdCIpO2Z1bmN0aW9uIFhVKCl7dmFyIGk9bmV3ICRMdCxhPVtdLGY9W10scD1ZTXQ7ZnVuY3Rpb24gdyhtKXtsZXQgYj1pLmdldChtKTtpZihiPT09dm9pZCAwKXtpZihwIT09WU10KXJldHVybiBwO2kuc2V0KG0sYj1hLnB1c2gobSktMSl9cmV0dXJuIGZbYiVmLmxlbmd0aF19cmV0dXJuIHcuZG9tYWluPWZ1bmN0aW9uKG0pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBhLnNsaWNlKCk7YT1bXSxpPW5ldyAkTHQ7Zm9yKGNvbnN0IGIgb2YgbSlpLmhhcyhiKXx8aS5zZXQoYixhLnB1c2goYiktMSk7cmV0dXJuIHd9LHcucmFuZ2U9ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9QXJyYXkuZnJvbShtKSx3KTpmLnNsaWNlKCl9LHcudW5rbm93bj1mdW5jdGlvbihtKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1tLHcpOnB9LHcuY29weT1mdW5jdGlvbigpe3JldHVybiBYVShhLGYpLnVua25vd24ocCl9LEtVLmFwcGx5KHcsYXJndW1lbnRzKSx3fWZ1bmN0aW9uIFMxdCgpe3ZhciBpPVhVKCkudW5rbm93bih2b2lkIDApLGE9aS5kb21haW4sZj1pLnJhbmdlLHA9MCx3PTEsbSxiLEU9ITEsXz0wLEE9MCxJPS41O2RlbGV0ZSBpLnVua25vd247ZnVuY3Rpb24gQigpe3ZhciBOPWEoKS5sZW5ndGgsUj13PHAsej1SP3c6cCxXPVI/cDp3O209KFcteikvTWF0aC5tYXgoMSxOLV8rQSoyKSxFJiYobT1NYXRoLmZsb29yKG0pKSx6Kz0oVy16LW0qKE4tXykpKkksYj1tKigxLV8pLEUmJih6PU1hdGgucm91bmQoeiksYj1NYXRoLnJvdW5kKGIpKTt2YXIgZXQ9RHhlKE4pLm1hcChmdW5jdGlvbihzdCl7cmV0dXJuIHorbSpzdH0pO3JldHVybiBmKFI/ZXQucmV2ZXJzZSgpOmV0KX1yZXR1cm4gaS5kb21haW49ZnVuY3Rpb24oTil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEoTiksQigpKTphKCl9LGkucmFuZ2U9ZnVuY3Rpb24oTil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFtwLHddPU4scD0rcCx3PSt3LEIoKSk6W3Asd119LGkucmFuZ2VSb3VuZD1mdW5jdGlvbihOKXtyZXR1cm5bcCx3XT1OLHA9K3Asdz0rdyxFPSEwLEIoKX0saS5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gYn0saS5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIG19LGkucm91bmQ9ZnVuY3Rpb24oTil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9ISFOLEIoKSk6RX0saS5wYWRkaW5nPWZ1bmN0aW9uKE4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPU1hdGgubWluKDEsQT0rTiksQigpKTpffSxpLnBhZGRpbmdJbm5lcj1mdW5jdGlvbihOKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz1NYXRoLm1pbigxLE4pLEIoKSk6X30saS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24oTil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9K04sQigpKTpBfSxpLmFsaWduPWZ1bmN0aW9uKE4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhJPU1hdGgubWF4KDAsTWF0aC5taW4oMSxOKSksQigpKTpJfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gUzF0KGEoKSxbcCx3XSkucm91bmQoRSkucGFkZGluZ0lubmVyKF8pLnBhZGRpbmdPdXRlcihBKS5hbGlnbihJKX0sS1UuYXBwbHkoQigpLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTEVlKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpfX1mdW5jdGlvbiBNRWUoaSl7cmV0dXJuK2l9dmFyIEtNdD1bMCwxXTtmdW5jdGlvbiBTQShpKXtyZXR1cm4gaX1mdW5jdGlvbiBBMXQoaSxhKXtyZXR1cm4oYS09aT0raSk/ZnVuY3Rpb24oZil7cmV0dXJuKGYtaSkvYX06TEVlKGlzTmFOKGEpP05hTjouNSl9ZnVuY3Rpb24gREVlKGksYSl7dmFyIGY7cmV0dXJuIGk+YSYmKGY9aSxpPWEsYT1mKSxmdW5jdGlvbihwKXtyZXR1cm4gTWF0aC5tYXgoaSxNYXRoLm1pbihhLHApKX19ZnVuY3Rpb24gSUVlKGksYSxmKXt2YXIgcD1pWzBdLHc9aVsxXSxtPWFbMF0sYj1hWzFdO3JldHVybiB3PHA/KHA9QTF0KHcscCksbT1mKGIsbSkpOihwPUExdChwLHcpLG09ZihtLGIpKSxmdW5jdGlvbihFKXtyZXR1cm4gbShwKEUpKX19ZnVuY3Rpb24gT0VlKGksYSxmKXt2YXIgcD1NYXRoLm1pbihpLmxlbmd0aCxhLmxlbmd0aCktMSx3PW5ldyBBcnJheShwKSxtPW5ldyBBcnJheShwKSxiPS0xO2ZvcihpW3BdPGlbMF0mJihpPWkuc2xpY2UoKS5yZXZlcnNlKCksYT1hLnNsaWNlKCkucmV2ZXJzZSgpKTsrK2I8cDspd1tiXT1BMXQoaVtiXSxpW2IrMV0pLG1bYl09ZihhW2JdLGFbYisxXSk7cmV0dXJuIGZ1bmN0aW9uKEUpe3ZhciBfPXh4ZShpLEUsMSxwKS0xO3JldHVybiBtW19dKHdbX10oRSkpfX1mdW5jdGlvbiBYTXQoaSxhKXtyZXR1cm4gYS5kb21haW4oaS5kb21haW4oKSkucmFuZ2UoaS5yYW5nZSgpKS5pbnRlcnBvbGF0ZShpLmludGVycG9sYXRlKCkpLmNsYW1wKGkuY2xhbXAoKSkudW5rbm93bihpLnVua25vd24oKSl9ZnVuY3Rpb24gUEVlKCl7dmFyIGk9S010LGE9S010LGY9YjF0LHAsdyxtLGI9U0EsRSxfLEE7ZnVuY3Rpb24gSSgpe3ZhciBOPU1hdGgubWluKGkubGVuZ3RoLGEubGVuZ3RoKTtyZXR1cm4gYiE9PVNBJiYoYj1ERWUoaVswXSxpW04tMV0pKSxFPU4+Mj9PRWU6SUVlLF89QT1udWxsLEJ9ZnVuY3Rpb24gQihOKXtyZXR1cm4gTj09bnVsbHx8aXNOYU4oTj0rTik/bTooX3x8KF89RShpLm1hcChwKSxhLGYpKSkocChiKE4pKSl9cmV0dXJuIEIuaW52ZXJ0PWZ1bmN0aW9uKE4pe3JldHVybiBiKHcoKEF8fChBPUUoYSxpLm1hcChwKSxRdikpKShOKSkpfSxCLmRvbWFpbj1mdW5jdGlvbihOKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1BcnJheS5mcm9tKE4sTUVlKSxJKCkpOmkuc2xpY2UoKX0sQi5yYW5nZT1mdW5jdGlvbihOKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1BcnJheS5mcm9tKE4pLEkoKSk6YS5zbGljZSgpfSxCLnJhbmdlUm91bmQ9ZnVuY3Rpb24oTil7cmV0dXJuIGE9QXJyYXkuZnJvbShOKSxmPVVrZSxJKCl9LEIuY2xhbXA9ZnVuY3Rpb24oTil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9Tj8hMDpTQSxJKCkpOmIhPT1TQX0sQi5pbnRlcnBvbGF0ZT1mdW5jdGlvbihOKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1OLEkoKSk6Zn0sQi51bmtub3duPWZ1bmN0aW9uKE4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPU4sQik6bX0sZnVuY3Rpb24oTixSKXtyZXR1cm4gcD1OLHc9UixJKCl9fWZ1bmN0aW9uIFFNdCgpe3JldHVybiBQRWUoKShTQSxTQSl9ZnVuY3Rpb24gRkVlKGksYSxmLHApe3ZhciB3PXQxdChpLGEsZiksbTtzd2l0Y2gocD1XVShwPz8iLGYiKSxwLnR5cGUpe2Nhc2UicyI6e3ZhciBiPU1hdGgubWF4KE1hdGguYWJzKGkpLE1hdGguYWJzKGEpKTtyZXR1cm4gcC5wcmVjaXNpb249PW51bGwmJiFpc05hTihtPVNFZSh3LGIpKSYmKHAucHJlY2lzaW9uPW0pLFdNdChwLGIpfWNhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOntwLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKG09QUVlKHcsTWF0aC5tYXgoTWF0aC5hYnMoaSksTWF0aC5hYnMoYSkpKSkmJihwLnByZWNpc2lvbj1tLShwLnR5cGU9PT0iZSIpKTticmVha31jYXNlImYiOmNhc2UiJSI6e3AucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4obT1fRWUodykpJiYocC5wcmVjaXNpb249bS0ocC50eXBlPT09IiUiKSoyKTticmVha319cmV0dXJuIFVNdChwKX1mdW5jdGlvbiBORWUoaSl7dmFyIGE9aS5kb21haW47cmV0dXJuIGkudGlja3M9ZnVuY3Rpb24oZil7dmFyIHA9YSgpO3JldHVybiBBeGUocFswXSxwW3AubGVuZ3RoLTFdLGY/PzEwKX0saS50aWNrRm9ybWF0PWZ1bmN0aW9uKGYscCl7dmFyIHc9YSgpO3JldHVybiBGRWUod1swXSx3W3cubGVuZ3RoLTFdLGY/PzEwLHApfSxpLm5pY2U9ZnVuY3Rpb24oZil7Zj09bnVsbCYmKGY9MTApO3ZhciBwPWEoKSx3PTAsbT1wLmxlbmd0aC0xLGI9cFt3XSxFPXBbbV0sXyxBLEk9MTA7Zm9yKEU8YiYmKEE9YixiPUUsRT1BLEE9dyx3PW0sbT1BKTtJLS0gPjA7KXtpZihBPUpmdChiLEUsZiksQT09PV8pcmV0dXJuIHBbd109YixwW21dPUUsYShwKTtpZihBPjApYj1NYXRoLmZsb29yKGIvQSkqQSxFPU1hdGguY2VpbChFL0EpKkE7ZWxzZSBpZihBPDApYj1NYXRoLmNlaWwoYipBKS9BLEU9TWF0aC5mbG9vcihFKkEpL0E7ZWxzZSBicmVhaztfPUF9cmV0dXJuIGl9LGl9ZnVuY3Rpb24gQUEoKXt2YXIgaT1RTXQoKTtyZXR1cm4gaS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFhNdChpLEFBKCkpfSxLVS5hcHBseShpLGFyZ3VtZW50cyksTkVlKGkpfWZ1bmN0aW9uIEJFZShpLGEpe2k9aS5zbGljZSgpO3ZhciBmPTAscD1pLmxlbmd0aC0xLHc9aVtmXSxtPWlbcF0sYjtyZXR1cm4gbTx3JiYoYj1mLGY9cCxwPWIsYj13LHc9bSxtPWIpLGlbZl09YS5mbG9vcih3KSxpW3BdPWEuY2VpbChtKSxpfWNvbnN0IEwxdD1uZXcgRGF0ZSxNMXQ9bmV3IERhdGU7ZnVuY3Rpb24gYTEoaSxhLGYscCl7ZnVuY3Rpb24gdyhtKXtyZXR1cm4gaShtPWFyZ3VtZW50cy5sZW5ndGg9PT0wP25ldyBEYXRlOm5ldyBEYXRlKCttKSksbX1yZXR1cm4gdy5mbG9vcj1tPT4oaShtPW5ldyBEYXRlKCttKSksbSksdy5jZWlsPW09PihpKG09bmV3IERhdGUobS0xKSksYShtLDEpLGkobSksbSksdy5yb3VuZD1tPT57Y29uc3QgYj13KG0pLEU9dy5jZWlsKG0pO3JldHVybiBtLWI8RS1tP2I6RX0sdy5vZmZzZXQ9KG0sYik9PihhKG09bmV3IERhdGUoK20pLGI9PW51bGw/MTpNYXRoLmZsb29yKGIpKSxtKSx3LnJhbmdlPShtLGIsRSk9Pntjb25zdCBfPVtdO2lmKG09dy5jZWlsKG0pLEU9RT09bnVsbD8xOk1hdGguZmxvb3IoRSksIShtPGIpfHwhKEU+MCkpcmV0dXJuIF87bGV0IEE7ZG8gXy5wdXNoKEE9bmV3IERhdGUoK20pKSxhKG0sRSksaShtKTt3aGlsZShBPG0mJm08Yik7cmV0dXJuIF99LHcuZmlsdGVyPW09PmExKGI9PntpZihiPj1iKWZvcig7aShiKSwhbShiKTspYi5zZXRUaW1lKGItMSl9LChiLEUpPT57aWYoYj49YilpZihFPDApZm9yKDsrK0U8PTA7KWZvcig7YShiLC0xKSwhbShiKTspO2Vsc2UgZm9yKDstLUU+PTA7KWZvcig7YShiLDEpLCFtKGIpOyk7fSksZiYmKHcuY291bnQ9KG0sYik9PihMMXQuc2V0VGltZSgrbSksTTF0LnNldFRpbWUoK2IpLGkoTDF0KSxpKE0xdCksTWF0aC5mbG9vcihmKEwxdCxNMXQpKSksdy5ldmVyeT1tPT4obT1NYXRoLmZsb29yKG0pLCFpc0Zpbml0ZShtKXx8IShtPjApP251bGw6bT4xP3cuZmlsdGVyKHA/Yj0+cChiKSVtPT09MDpiPT53LmNvdW50KDAsYiklbT09PTApOncpKSx3fWNvbnN0IExBPWExKCgpPT57fSwoaSxhKT0+e2kuc2V0VGltZSgraSthKX0sKGksYSk9PmEtaSk7TEEuZXZlcnk9aT0+KGk9TWF0aC5mbG9vcihpKSwhaXNGaW5pdGUoaSl8fCEoaT4wKT9udWxsOmk+MT9hMShhPT57YS5zZXRUaW1lKE1hdGguZmxvb3IoYS9pKSppKX0sKGEsZik9PnthLnNldFRpbWUoK2ErZippKX0sKGEsZik9PihmLWEpL2kpOkxBKSxMQS5yYW5nZTtjb25zdCBtNT0xZTMsWjI9bTUqNjAseTU9WjIqNjAseDU9eTUqMjQsRDF0PXg1KjcsWk10PXg1KjMwLEkxdD14NSozNjUsc2s9YTEoaT0+e2kuc2V0VGltZShpLWkuZ2V0TWlsbGlzZWNvbmRzKCkpfSwoaSxhKT0+e2kuc2V0VGltZSgraSthKm01KX0sKGksYSk9PihhLWkpL201LGk9PmkuZ2V0VVRDU2Vjb25kcygpKTtzay5yYW5nZTtjb25zdCBQUD1hMShpPT57aS5zZXRUaW1lKGktaS5nZXRNaWxsaXNlY29uZHMoKS1pLmdldFNlY29uZHMoKSptNSl9LChpLGEpPT57aS5zZXRUaW1lKCtpK2EqWjIpfSwoaSxhKT0+KGEtaSkvWjIsaT0+aS5nZXRNaW51dGVzKCkpO1BQLnJhbmdlLGExKGk9PntpLnNldFVUQ1NlY29uZHMoMCwwKX0sKGksYSk9PntpLnNldFRpbWUoK2krYSpaMil9LChpLGEpPT4oYS1pKS9aMixpPT5pLmdldFVUQ01pbnV0ZXMoKSkucmFuZ2U7Y29uc3QgRlA9YTEoaT0+e2kuc2V0VGltZShpLWkuZ2V0TWlsbGlzZWNvbmRzKCktaS5nZXRTZWNvbmRzKCkqbTUtaS5nZXRNaW51dGVzKCkqWjIpfSwoaSxhKT0+e2kuc2V0VGltZSgraSthKnk1KX0sKGksYSk9PihhLWkpL3k1LGk9PmkuZ2V0SG91cnMoKSk7RlAucmFuZ2UsYTEoaT0+e2kuc2V0VVRDTWludXRlcygwLDAsMCl9LChpLGEpPT57aS5zZXRUaW1lKCtpK2EqeTUpfSwoaSxhKT0+KGEtaSkveTUsaT0+aS5nZXRVVENIb3VycygpKS5yYW5nZTtjb25zdCBaNz1hMShpPT5pLnNldEhvdXJzKDAsMCwwLDApLChpLGEpPT5pLnNldERhdGUoaS5nZXREYXRlKCkrYSksKGksYSk9PihhLWktKGEuZ2V0VGltZXpvbmVPZmZzZXQoKS1pLmdldFRpbWV6b25lT2Zmc2V0KCkpKloyKS94NSxpPT5pLmdldERhdGUoKS0xKTtaNy5yYW5nZTtjb25zdCBPMXQ9YTEoaT0+e2kuc2V0VVRDSG91cnMoMCwwLDAsMCl9LChpLGEpPT57aS5zZXRVVENEYXRlKGkuZ2V0VVRDRGF0ZSgpK2EpfSwoaSxhKT0+KGEtaSkveDUsaT0+aS5nZXRVVENEYXRlKCktMSk7TzF0LnJhbmdlLGExKGk9PntpLnNldFVUQ0hvdXJzKDAsMCwwLDApfSwoaSxhKT0+e2kuc2V0VVRDRGF0ZShpLmdldFVUQ0RhdGUoKSthKX0sKGksYSk9PihhLWkpL3g1LGk9Pk1hdGguZmxvb3IoaS94NSkpLnJhbmdlO2Z1bmN0aW9uIEo3KGkpe3JldHVybiBhMShhPT57YS5zZXREYXRlKGEuZ2V0RGF0ZSgpLShhLmdldERheSgpKzctaSklNyksYS5zZXRIb3VycygwLDAsMCwwKX0sKGEsZik9PnthLnNldERhdGUoYS5nZXREYXRlKCkrZio3KX0sKGEsZik9PihmLWEtKGYuZ2V0VGltZXpvbmVPZmZzZXQoKS1hLmdldFRpbWV6b25lT2Zmc2V0KCkpKloyKS9EMXQpfWNvbnN0IE5QPUo3KDApLEJQPUo3KDEpLEpNdD1KNygyKSx0RHQ9SjcoMyksdFQ9SjcoNCksZUR0PUo3KDUpLG5EdD1KNyg2KTtOUC5yYW5nZSxCUC5yYW5nZSxKTXQucmFuZ2UsdER0LnJhbmdlLHRULnJhbmdlLGVEdC5yYW5nZSxuRHQucmFuZ2U7ZnVuY3Rpb24gZVQoaSl7cmV0dXJuIGExKGE9PnthLnNldFVUQ0RhdGUoYS5nZXRVVENEYXRlKCktKGEuZ2V0VVRDRGF5KCkrNy1pKSU3KSxhLnNldFVUQ0hvdXJzKDAsMCwwLDApfSwoYSxmKT0+e2Euc2V0VVRDRGF0ZShhLmdldFVUQ0RhdGUoKStmKjcpfSwoYSxmKT0+KGYtYSkvRDF0KX1jb25zdCByRHQ9ZVQoMCksUVU9ZVQoMSksUkVlPWVUKDIpLGpFZT1lVCgzKSxNQT1lVCg0KSwkRWU9ZVQoNSksekVlPWVUKDYpO3JEdC5yYW5nZSxRVS5yYW5nZSxSRWUucmFuZ2UsakVlLnJhbmdlLE1BLnJhbmdlLCRFZS5yYW5nZSx6RWUucmFuZ2U7Y29uc3QgUlA9YTEoaT0+e2kuc2V0RGF0ZSgxKSxpLnNldEhvdXJzKDAsMCwwLDApfSwoaSxhKT0+e2kuc2V0TW9udGgoaS5nZXRNb250aCgpK2EpfSwoaSxhKT0+YS5nZXRNb250aCgpLWkuZ2V0TW9udGgoKSsoYS5nZXRGdWxsWWVhcigpLWkuZ2V0RnVsbFllYXIoKSkqMTIsaT0+aS5nZXRNb250aCgpKTtSUC5yYW5nZSxhMShpPT57aS5zZXRVVENEYXRlKDEpLGkuc2V0VVRDSG91cnMoMCwwLDAsMCl9LChpLGEpPT57aS5zZXRVVENNb250aChpLmdldFVUQ01vbnRoKCkrYSl9LChpLGEpPT5hLmdldFVUQ01vbnRoKCktaS5nZXRVVENNb250aCgpKyhhLmdldFVUQ0Z1bGxZZWFyKCktaS5nZXRVVENGdWxsWWVhcigpKSoxMixpPT5pLmdldFVUQ01vbnRoKCkpLnJhbmdlO2NvbnN0IGs1PWExKGk9PntpLnNldE1vbnRoKDAsMSksaS5zZXRIb3VycygwLDAsMCwwKX0sKGksYSk9PntpLnNldEZ1bGxZZWFyKGkuZ2V0RnVsbFllYXIoKSthKX0sKGksYSk9PmEuZ2V0RnVsbFllYXIoKS1pLmdldEZ1bGxZZWFyKCksaT0+aS5nZXRGdWxsWWVhcigpKTtrNS5ldmVyeT1pPT4haXNGaW5pdGUoaT1NYXRoLmZsb29yKGkpKXx8IShpPjApP251bGw6YTEoYT0+e2Euc2V0RnVsbFllYXIoTWF0aC5mbG9vcihhLmdldEZ1bGxZZWFyKCkvaSkqaSksYS5zZXRNb250aCgwLDEpLGEuc2V0SG91cnMoMCwwLDAsMCl9LChhLGYpPT57YS5zZXRGdWxsWWVhcihhLmdldEZ1bGxZZWFyKCkrZippKX0pLGs1LnJhbmdlO2NvbnN0IG5UPWExKGk9PntpLnNldFVUQ01vbnRoKDAsMSksaS5zZXRVVENIb3VycygwLDAsMCwwKX0sKGksYSk9PntpLnNldFVUQ0Z1bGxZZWFyKGkuZ2V0VVRDRnVsbFllYXIoKSthKX0sKGksYSk9PmEuZ2V0VVRDRnVsbFllYXIoKS1pLmdldFVUQ0Z1bGxZZWFyKCksaT0+aS5nZXRVVENGdWxsWWVhcigpKTtuVC5ldmVyeT1pPT4haXNGaW5pdGUoaT1NYXRoLmZsb29yKGkpKXx8IShpPjApP251bGw6YTEoYT0+e2Euc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihhLmdldFVUQ0Z1bGxZZWFyKCkvaSkqaSksYS5zZXRVVENNb250aCgwLDEpLGEuc2V0VVRDSG91cnMoMCwwLDAsMCl9LChhLGYpPT57YS5zZXRVVENGdWxsWWVhcihhLmdldFVUQ0Z1bGxZZWFyKCkrZippKX0pLG5ULnJhbmdlO2Z1bmN0aW9uIHFFZShpLGEsZixwLHcsbSl7Y29uc3QgYj1bW3NrLDEsbTVdLFtzayw1LDUqbTVdLFtzaywxNSwxNSptNV0sW3NrLDMwLDMwKm01XSxbbSwxLFoyXSxbbSw1LDUqWjJdLFttLDE1LDE1KloyXSxbbSwzMCwzMCpaMl0sW3csMSx5NV0sW3csMywzKnk1XSxbdyw2LDYqeTVdLFt3LDEyLDEyKnk1XSxbcCwxLHg1XSxbcCwyLDIqeDVdLFtmLDEsRDF0XSxbYSwxLFpNdF0sW2EsMywzKlpNdF0sW2ksMSxJMXRdXTtmdW5jdGlvbiBFKEEsSSxCKXtjb25zdCBOPUk8QTtOJiYoW0EsSV09W0ksQV0pO2NvbnN0IFI9QiYmdHlwZW9mIEIucmFuZ2U9PSJmdW5jdGlvbiI/QjpfKEEsSSxCKSx6PVI/Ui5yYW5nZShBLCtJKzEpOltdO3JldHVybiBOP3oucmV2ZXJzZSgpOnp9ZnVuY3Rpb24gXyhBLEksQil7Y29uc3QgTj1NYXRoLmFicyhJLUEpL0IsUj1aZnQoKFssLGV0XSk9PmV0KS5yaWdodChiLE4pO2lmKFI9PT1iLmxlbmd0aClyZXR1cm4gaS5ldmVyeSh0MXQoQS9JMXQsSS9JMXQsQikpO2lmKFI9PT0wKXJldHVybiBMQS5ldmVyeShNYXRoLm1heCh0MXQoQSxJLEIpLDEpKTtjb25zdFt6LFddPWJbTi9iW1ItMV1bMl08YltSXVsyXS9OP1ItMTpSXTtyZXR1cm4gei5ldmVyeShXKX1yZXR1cm5bRSxfXX1jb25zdFtIRWUsVkVlXT1xRWUoazUsUlAsTlAsWjcsRlAsUFApO2Z1bmN0aW9uIFAxdChpKXtpZigwPD1pLnkmJmkueTwxMDApe3ZhciBhPW5ldyBEYXRlKC0xLGkubSxpLmQsaS5ILGkuTSxpLlMsaS5MKTtyZXR1cm4gYS5zZXRGdWxsWWVhcihpLnkpLGF9cmV0dXJuIG5ldyBEYXRlKGkueSxpLm0saS5kLGkuSCxpLk0saS5TLGkuTCl9ZnVuY3Rpb24gRjF0KGkpe2lmKDA8PWkueSYmaS55PDEwMCl7dmFyIGE9bmV3IERhdGUoRGF0ZS5VVEMoLTEsaS5tLGkuZCxpLkgsaS5NLGkuUyxpLkwpKTtyZXR1cm4gYS5zZXRVVENGdWxsWWVhcihpLnkpLGF9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGkueSxpLm0saS5kLGkuSCxpLk0saS5TLGkuTCkpfWZ1bmN0aW9uIGpQKGksYSxmKXtyZXR1cm57eTppLG06YSxkOmYsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBHRWUoaSl7dmFyIGE9aS5kYXRlVGltZSxmPWkuZGF0ZSxwPWkudGltZSx3PWkucGVyaW9kcyxtPWkuZGF5cyxiPWkuc2hvcnREYXlzLEU9aS5tb250aHMsXz1pLnNob3J0TW9udGhzLEE9JFAodyksST16UCh3KSxCPSRQKG0pLE49elAobSksUj0kUChiKSx6PXpQKGIpLFc9JFAoRSksZXQ9elAoRSksc3Q9JFAoXyksYXQ9elAoXyksYnQ9e2E6RXQsQTpaLGI6Q3QsQjp4dCxjOm51bGwsZDp1RHQsZTp1RHQsZjpnN2UsZzpUN2UsRzpfN2UsSDpoN2UsSTpmN2UsajpkN2UsTDpsRHQsbTpwN2UsTTpiN2UscDpIdCxxOkxlLFE6YkR0LHM6d0R0LFM6dzdlLHU6djdlLFU6bTdlLFY6eTdlLHc6eDdlLFc6azdlLHg6bnVsbCxYOm51bGwseTpFN2UsWTpDN2UsWjpTN2UsIiUiOnBEdH0sbXQ9e2E6RnQsQTpnbixiOlNlLEI6bWUsYzpudWxsLGQ6ZkR0LGU6ZkR0LGY6RDdlLGc6ejdlLEc6SDdlLEg6QTdlLEk6TDdlLGo6TTdlLEw6ZER0LG06STdlLE06TzdlLHA6VmUscTpZZSxROmJEdCxzOndEdCxTOlA3ZSx1OkY3ZSxVOk43ZSxWOkI3ZSx3OlI3ZSxXOmo3ZSx4Om51bGwsWDpudWxsLHk6JDdlLFk6cTdlLFo6VjdlLCIlIjpwRHR9LHl0PXthOnB0LEE6VSxiOlR0LEI6bnQsYzpJdCxkOm9EdCxlOm9EdCxmOm83ZSxnOmFEdCxHOnNEdCxIOmNEdCxJOmNEdCxqOnI3ZSxMOmE3ZSxtOm43ZSxNOmk3ZSxwOlgscTplN2UsUTp1N2UsczpsN2UsUzpzN2UsdTpYRWUsVTpRRWUsVjpaRWUsdzpLRWUsVzpKRWUseDpPdCxYOkJ0LHk6YUR0LFk6c0R0LFo6dDdlLCIlIjpjN2V9O2J0Lng9ZnQoZixidCksYnQuWD1mdChwLGJ0KSxidC5jPWZ0KGEsYnQpLG10Lng9ZnQoZixtdCksbXQuWD1mdChwLG10KSxtdC5jPWZ0KGEsbXQpO2Z1bmN0aW9uIGZ0KGNlLGtlKXtyZXR1cm4gZnVuY3Rpb24oenQpe3ZhciByZT1bXSxzZT0tMSxQZT0wLHRlPWNlLmxlbmd0aCxNZSxkZSxvbjtmb3IoenQgaW5zdGFuY2VvZiBEYXRlfHwoenQ9bmV3IERhdGUoK3p0KSk7KytzZTx0ZTspY2UuY2hhckNvZGVBdChzZSk9PT0zNyYmKHJlLnB1c2goY2Uuc2xpY2UoUGUsc2UpKSwoZGU9aUR0W01lPWNlLmNoYXJBdCgrK3NlKV0pIT1udWxsP01lPWNlLmNoYXJBdCgrK3NlKTpkZT1NZT09PSJlIj8iICI6IjAiLChvbj1rZVtNZV0pJiYoTWU9b24oenQsZGUpKSxyZS5wdXNoKE1lKSxQZT1zZSsxKTtyZXR1cm4gcmUucHVzaChjZS5zbGljZShQZSxzZSkpLHJlLmpvaW4oIiIpfX1mdW5jdGlvbiB1dChjZSxrZSl7cmV0dXJuIGZ1bmN0aW9uKHp0KXt2YXIgcmU9alAoMTkwMCx2b2lkIDAsMSksc2U9dnQocmUsY2UsenQrPSIiLDApLFBlLHRlO2lmKHNlIT16dC5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gcmUpcmV0dXJuIG5ldyBEYXRlKHJlLlEpO2lmKCJzImluIHJlKXJldHVybiBuZXcgRGF0ZShyZS5zKjFlMysoIkwiaW4gcmU/cmUuTDowKSk7aWYoa2UmJiEoIloiaW4gcmUpJiYocmUuWj0wKSwicCJpbiByZSYmKHJlLkg9cmUuSCUxMityZS5wKjEyKSxyZS5tPT09dm9pZCAwJiYocmUubT0icSJpbiByZT9yZS5xOjApLCJWImluIHJlKXtpZihyZS5WPDF8fHJlLlY+NTMpcmV0dXJuIG51bGw7InciaW4gcmV8fChyZS53PTEpLCJaImluIHJlPyhQZT1GMXQoalAocmUueSwwLDEpKSx0ZT1QZS5nZXRVVENEYXkoKSxQZT10ZT40fHx0ZT09PTA/UVUuY2VpbChQZSk6UVUoUGUpLFBlPU8xdC5vZmZzZXQoUGUsKHJlLlYtMSkqNykscmUueT1QZS5nZXRVVENGdWxsWWVhcigpLHJlLm09UGUuZ2V0VVRDTW9udGgoKSxyZS5kPVBlLmdldFVUQ0RhdGUoKSsocmUudys2KSU3KTooUGU9UDF0KGpQKHJlLnksMCwxKSksdGU9UGUuZ2V0RGF5KCksUGU9dGU+NHx8dGU9PT0wP0JQLmNlaWwoUGUpOkJQKFBlKSxQZT1aNy5vZmZzZXQoUGUsKHJlLlYtMSkqNykscmUueT1QZS5nZXRGdWxsWWVhcigpLHJlLm09UGUuZ2V0TW9udGgoKSxyZS5kPVBlLmdldERhdGUoKSsocmUudys2KSU3KX1lbHNlKCJXImluIHJlfHwiVSJpbiByZSkmJigidyJpbiByZXx8KHJlLnc9InUiaW4gcmU/cmUudSU3OiJXImluIHJlPzE6MCksdGU9IloiaW4gcmU/RjF0KGpQKHJlLnksMCwxKSkuZ2V0VVRDRGF5KCk6UDF0KGpQKHJlLnksMCwxKSkuZ2V0RGF5KCkscmUubT0wLHJlLmQ9IlciaW4gcmU/KHJlLncrNiklNytyZS5XKjctKHRlKzUpJTc6cmUudytyZS5VKjctKHRlKzYpJTcpO3JldHVybiJaImluIHJlPyhyZS5IKz1yZS5aLzEwMHwwLHJlLk0rPXJlLlolMTAwLEYxdChyZSkpOlAxdChyZSl9fWZ1bmN0aW9uIHZ0KGNlLGtlLHp0LHJlKXtmb3IodmFyIHNlPTAsUGU9a2UubGVuZ3RoLHRlPXp0Lmxlbmd0aCxNZSxkZTtzZTxQZTspe2lmKHJlPj10ZSlyZXR1cm4tMTtpZihNZT1rZS5jaGFyQ29kZUF0KHNlKyspLE1lPT09Mzcpe2lmKE1lPWtlLmNoYXJBdChzZSsrKSxkZT15dFtNZSBpbiBpRHQ/a2UuY2hhckF0KHNlKyspOk1lXSwhZGV8fChyZT1kZShjZSx6dCxyZSkpPDApcmV0dXJuLTF9ZWxzZSBpZihNZSE9enQuY2hhckNvZGVBdChyZSsrKSlyZXR1cm4tMX1yZXR1cm4gcmV9ZnVuY3Rpb24gWChjZSxrZSx6dCl7dmFyIHJlPUEuZXhlYyhrZS5zbGljZSh6dCkpO3JldHVybiByZT8oY2UucD1JLmdldChyZVswXS50b0xvd2VyQ2FzZSgpKSx6dCtyZVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHB0KGNlLGtlLHp0KXt2YXIgcmU9Ui5leGVjKGtlLnNsaWNlKHp0KSk7cmV0dXJuIHJlPyhjZS53PXouZ2V0KHJlWzBdLnRvTG93ZXJDYXNlKCkpLHp0K3JlWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVShjZSxrZSx6dCl7dmFyIHJlPUIuZXhlYyhrZS5zbGljZSh6dCkpO3JldHVybiByZT8oY2Uudz1OLmdldChyZVswXS50b0xvd2VyQ2FzZSgpKSx6dCtyZVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFR0KGNlLGtlLHp0KXt2YXIgcmU9c3QuZXhlYyhrZS5zbGljZSh6dCkpO3JldHVybiByZT8oY2UubT1hdC5nZXQocmVbMF0udG9Mb3dlckNhc2UoKSksenQrcmVbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBudChjZSxrZSx6dCl7dmFyIHJlPVcuZXhlYyhrZS5zbGljZSh6dCkpO3JldHVybiByZT8oY2UubT1ldC5nZXQocmVbMF0udG9Mb3dlckNhc2UoKSksenQrcmVbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJdChjZSxrZSx6dCl7cmV0dXJuIHZ0KGNlLGEsa2UsenQpfWZ1bmN0aW9uIE90KGNlLGtlLHp0KXtyZXR1cm4gdnQoY2UsZixrZSx6dCl9ZnVuY3Rpb24gQnQoY2Usa2UsenQpe3JldHVybiB2dChjZSxwLGtlLHp0KX1mdW5jdGlvbiBFdChjZSl7cmV0dXJuIGJbY2UuZ2V0RGF5KCldfWZ1bmN0aW9uIFooY2Upe3JldHVybiBtW2NlLmdldERheSgpXX1mdW5jdGlvbiBDdChjZSl7cmV0dXJuIF9bY2UuZ2V0TW9udGgoKV19ZnVuY3Rpb24geHQoY2Upe3JldHVybiBFW2NlLmdldE1vbnRoKCldfWZ1bmN0aW9uIEh0KGNlKXtyZXR1cm4gd1srKGNlLmdldEhvdXJzKCk+PTEyKV19ZnVuY3Rpb24gTGUoY2Upe3JldHVybiAxK35+KGNlLmdldE1vbnRoKCkvMyl9ZnVuY3Rpb24gRnQoY2Upe3JldHVybiBiW2NlLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBnbihjZSl7cmV0dXJuIG1bY2UuZ2V0VVRDRGF5KCldfWZ1bmN0aW9uIFNlKGNlKXtyZXR1cm4gX1tjZS5nZXRVVENNb250aCgpXX1mdW5jdGlvbiBtZShjZSl7cmV0dXJuIEVbY2UuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gVmUoY2Upe3JldHVybiB3WysoY2UuZ2V0VVRDSG91cnMoKT49MTIpXX1mdW5jdGlvbiBZZShjZSl7cmV0dXJuIDErfn4oY2UuZ2V0VVRDTW9udGgoKS8zKX1yZXR1cm57Zm9ybWF0OmZ1bmN0aW9uKGNlKXt2YXIga2U9ZnQoY2UrPSIiLGJ0KTtyZXR1cm4ga2UudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gY2V9LGtlfSxwYXJzZTpmdW5jdGlvbihjZSl7dmFyIGtlPXV0KGNlKz0iIiwhMSk7cmV0dXJuIGtlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGNlfSxrZX0sdXRjRm9ybWF0OmZ1bmN0aW9uKGNlKXt2YXIga2U9ZnQoY2UrPSIiLG10KTtyZXR1cm4ga2UudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gY2V9LGtlfSx1dGNQYXJzZTpmdW5jdGlvbihjZSl7dmFyIGtlPXV0KGNlKz0iIiwhMCk7cmV0dXJuIGtlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGNlfSxrZX19fXZhciBpRHQ9eyItIjoiIixfOiIgIiwwOiIwIn0sWDE9L15ccypcZCsvLFVFZT0vXiUvLFdFZT0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gSWMoaSxhLGYpe3ZhciBwPWk8MD8iLSI6IiIsdz0ocD8taTppKSsiIixtPXcubGVuZ3RoO3JldHVybiBwKyhtPGY/bmV3IEFycmF5KGYtbSsxKS5qb2luKGEpK3c6dyl9ZnVuY3Rpb24gWUVlKGkpe3JldHVybiBpLnJlcGxhY2UoV0VlLCJcXCQmIil9ZnVuY3Rpb24gJFAoaSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2kubWFwKFlFZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHpQKGkpe3JldHVybiBuZXcgTWFwKGkubWFwKChhLGYpPT5bYS50b0xvd2VyQ2FzZSgpLGZdKSl9ZnVuY3Rpb24gS0VlKGksYSxmKXt2YXIgcD1YMS5leGVjKGEuc2xpY2UoZixmKzEpKTtyZXR1cm4gcD8oaS53PStwWzBdLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFhFZShpLGEsZil7dmFyIHA9WDEuZXhlYyhhLnNsaWNlKGYsZisxKSk7cmV0dXJuIHA/KGkudT0rcFswXSxmK3BbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBRRWUoaSxhLGYpe3ZhciBwPVgxLmV4ZWMoYS5zbGljZShmLGYrMikpO3JldHVybiBwPyhpLlU9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWkVlKGksYSxmKXt2YXIgcD1YMS5leGVjKGEuc2xpY2UoZixmKzIpKTtyZXR1cm4gcD8oaS5WPStwWzBdLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEpFZShpLGEsZil7dmFyIHA9WDEuZXhlYyhhLnNsaWNlKGYsZisyKSk7cmV0dXJuIHA/KGkuVz0rcFswXSxmK3BbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBzRHQoaSxhLGYpe3ZhciBwPVgxLmV4ZWMoYS5zbGljZShmLGYrNCkpO3JldHVybiBwPyhpLnk9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYUR0KGksYSxmKXt2YXIgcD1YMS5leGVjKGEuc2xpY2UoZixmKzIpKTtyZXR1cm4gcD8oaS55PStwWzBdKygrcFswXT42OD8xOTAwOjJlMyksZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdDdlKGksYSxmKXt2YXIgcD0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyhhLnNsaWNlKGYsZis2KSk7cmV0dXJuIHA/KGkuWj1wWzFdPzA6LShwWzJdKyhwWzNdfHwiMDAiKSksZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZTdlKGksYSxmKXt2YXIgcD1YMS5leGVjKGEuc2xpY2UoZixmKzEpKTtyZXR1cm4gcD8oaS5xPXBbMF0qMy0zLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG43ZShpLGEsZil7dmFyIHA9WDEuZXhlYyhhLnNsaWNlKGYsZisyKSk7cmV0dXJuIHA/KGkubT1wWzBdLTEsZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb0R0KGksYSxmKXt2YXIgcD1YMS5leGVjKGEuc2xpY2UoZixmKzIpKTtyZXR1cm4gcD8oaS5kPStwWzBdLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHI3ZShpLGEsZil7dmFyIHA9WDEuZXhlYyhhLnNsaWNlKGYsZiszKSk7cmV0dXJuIHA/KGkubT0wLGkuZD0rcFswXSxmK3BbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBjRHQoaSxhLGYpe3ZhciBwPVgxLmV4ZWMoYS5zbGljZShmLGYrMikpO3JldHVybiBwPyhpLkg9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaTdlKGksYSxmKXt2YXIgcD1YMS5leGVjKGEuc2xpY2UoZixmKzIpKTtyZXR1cm4gcD8oaS5NPStwWzBdLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHM3ZShpLGEsZil7dmFyIHA9WDEuZXhlYyhhLnNsaWNlKGYsZisyKSk7cmV0dXJuIHA/KGkuUz0rcFswXSxmK3BbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBhN2UoaSxhLGYpe3ZhciBwPVgxLmV4ZWMoYS5zbGljZShmLGYrMykpO3JldHVybiBwPyhpLkw9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbzdlKGksYSxmKXt2YXIgcD1YMS5leGVjKGEuc2xpY2UoZixmKzYpKTtyZXR1cm4gcD8oaS5MPU1hdGguZmxvb3IocFswXS8xZTMpLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGM3ZShpLGEsZil7dmFyIHA9VUVlLmV4ZWMoYS5zbGljZShmLGYrMSkpO3JldHVybiBwP2YrcFswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gdTdlKGksYSxmKXt2YXIgcD1YMS5leGVjKGEuc2xpY2UoZikpO3JldHVybiBwPyhpLlE9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbDdlKGksYSxmKXt2YXIgcD1YMS5leGVjKGEuc2xpY2UoZikpO3JldHVybiBwPyhpLnM9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdUR0KGksYSl7cmV0dXJuIEljKGkuZ2V0RGF0ZSgpLGEsMil9ZnVuY3Rpb24gaDdlKGksYSl7cmV0dXJuIEljKGkuZ2V0SG91cnMoKSxhLDIpfWZ1bmN0aW9uIGY3ZShpLGEpe3JldHVybiBJYyhpLmdldEhvdXJzKCklMTJ8fDEyLGEsMil9ZnVuY3Rpb24gZDdlKGksYSl7cmV0dXJuIEljKDErWjcuY291bnQoazUoaSksaSksYSwzKX1mdW5jdGlvbiBsRHQoaSxhKXtyZXR1cm4gSWMoaS5nZXRNaWxsaXNlY29uZHMoKSxhLDMpfWZ1bmN0aW9uIGc3ZShpLGEpe3JldHVybiBsRHQoaSxhKSsiMDAwIn1mdW5jdGlvbiBwN2UoaSxhKXtyZXR1cm4gSWMoaS5nZXRNb250aCgpKzEsYSwyKX1mdW5jdGlvbiBiN2UoaSxhKXtyZXR1cm4gSWMoaS5nZXRNaW51dGVzKCksYSwyKX1mdW5jdGlvbiB3N2UoaSxhKXtyZXR1cm4gSWMoaS5nZXRTZWNvbmRzKCksYSwyKX1mdW5jdGlvbiB2N2UoaSl7dmFyIGE9aS5nZXREYXkoKTtyZXR1cm4gYT09PTA/NzphfWZ1bmN0aW9uIG03ZShpLGEpe3JldHVybiBJYyhOUC5jb3VudChrNShpKS0xLGkpLGEsMil9ZnVuY3Rpb24gaER0KGkpe3ZhciBhPWkuZ2V0RGF5KCk7cmV0dXJuIGE+PTR8fGE9PT0wP3RUKGkpOnRULmNlaWwoaSl9ZnVuY3Rpb24geTdlKGksYSl7cmV0dXJuIGk9aER0KGkpLEljKHRULmNvdW50KGs1KGkpLGkpKyhrNShpKS5nZXREYXkoKT09PTQpLGEsMil9ZnVuY3Rpb24geDdlKGkpe3JldHVybiBpLmdldERheSgpfWZ1bmN0aW9uIGs3ZShpLGEpe3JldHVybiBJYyhCUC5jb3VudChrNShpKS0xLGkpLGEsMil9ZnVuY3Rpb24gRTdlKGksYSl7cmV0dXJuIEljKGkuZ2V0RnVsbFllYXIoKSUxMDAsYSwyKX1mdW5jdGlvbiBUN2UoaSxhKXtyZXR1cm4gaT1oRHQoaSksSWMoaS5nZXRGdWxsWWVhcigpJTEwMCxhLDIpfWZ1bmN0aW9uIEM3ZShpLGEpe3JldHVybiBJYyhpLmdldEZ1bGxZZWFyKCklMWU0LGEsNCl9ZnVuY3Rpb24gXzdlKGksYSl7dmFyIGY9aS5nZXREYXkoKTtyZXR1cm4gaT1mPj00fHxmPT09MD90VChpKTp0VC5jZWlsKGkpLEljKGkuZ2V0RnVsbFllYXIoKSUxZTQsYSw0KX1mdW5jdGlvbiBTN2UoaSl7dmFyIGE9aS5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybihhPjA/Ii0iOihhKj0tMSwiKyIpKStJYyhhLzYwfDAsIjAiLDIpK0ljKGElNjAsIjAiLDIpfWZ1bmN0aW9uIGZEdChpLGEpe3JldHVybiBJYyhpLmdldFVUQ0RhdGUoKSxhLDIpfWZ1bmN0aW9uIEE3ZShpLGEpe3JldHVybiBJYyhpLmdldFVUQ0hvdXJzKCksYSwyKX1mdW5jdGlvbiBMN2UoaSxhKXtyZXR1cm4gSWMoaS5nZXRVVENIb3VycygpJTEyfHwxMixhLDIpfWZ1bmN0aW9uIE03ZShpLGEpe3JldHVybiBJYygxK08xdC5jb3VudChuVChpKSxpKSxhLDMpfWZ1bmN0aW9uIGREdChpLGEpe3JldHVybiBJYyhpLmdldFVUQ01pbGxpc2Vjb25kcygpLGEsMyl9ZnVuY3Rpb24gRDdlKGksYSl7cmV0dXJuIGREdChpLGEpKyIwMDAifWZ1bmN0aW9uIEk3ZShpLGEpe3JldHVybiBJYyhpLmdldFVUQ01vbnRoKCkrMSxhLDIpfWZ1bmN0aW9uIE83ZShpLGEpe3JldHVybiBJYyhpLmdldFVUQ01pbnV0ZXMoKSxhLDIpfWZ1bmN0aW9uIFA3ZShpLGEpe3JldHVybiBJYyhpLmdldFVUQ1NlY29uZHMoKSxhLDIpfWZ1bmN0aW9uIEY3ZShpKXt2YXIgYT1pLmdldFVUQ0RheSgpO3JldHVybiBhPT09MD83OmF9ZnVuY3Rpb24gTjdlKGksYSl7cmV0dXJuIEljKHJEdC5jb3VudChuVChpKS0xLGkpLGEsMil9ZnVuY3Rpb24gZ0R0KGkpe3ZhciBhPWkuZ2V0VVRDRGF5KCk7cmV0dXJuIGE+PTR8fGE9PT0wP01BKGkpOk1BLmNlaWwoaSl9ZnVuY3Rpb24gQjdlKGksYSl7cmV0dXJuIGk9Z0R0KGkpLEljKE1BLmNvdW50KG5UKGkpLGkpKyhuVChpKS5nZXRVVENEYXkoKT09PTQpLGEsMil9ZnVuY3Rpb24gUjdlKGkpe3JldHVybiBpLmdldFVUQ0RheSgpfWZ1bmN0aW9uIGo3ZShpLGEpe3JldHVybiBJYyhRVS5jb3VudChuVChpKS0xLGkpLGEsMil9ZnVuY3Rpb24gJDdlKGksYSl7cmV0dXJuIEljKGkuZ2V0VVRDRnVsbFllYXIoKSUxMDAsYSwyKX1mdW5jdGlvbiB6N2UoaSxhKXtyZXR1cm4gaT1nRHQoaSksSWMoaS5nZXRVVENGdWxsWWVhcigpJTEwMCxhLDIpfWZ1bmN0aW9uIHE3ZShpLGEpe3JldHVybiBJYyhpLmdldFVUQ0Z1bGxZZWFyKCklMWU0LGEsNCl9ZnVuY3Rpb24gSDdlKGksYSl7dmFyIGY9aS5nZXRVVENEYXkoKTtyZXR1cm4gaT1mPj00fHxmPT09MD9NQShpKTpNQS5jZWlsKGkpLEljKGkuZ2V0VVRDRnVsbFllYXIoKSUxZTQsYSw0KX1mdW5jdGlvbiBWN2UoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIHBEdCgpe3JldHVybiIlIn1mdW5jdGlvbiBiRHQoaSl7cmV0dXJuK2l9ZnVuY3Rpb24gd0R0KGkpe3JldHVybiBNYXRoLmZsb29yKCtpLzFlMyl9dmFyIERBLFpVO0c3ZSh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO2Z1bmN0aW9uIEc3ZShpKXtyZXR1cm4gREE9R0VlKGkpLFpVPURBLmZvcm1hdCxEQS5wYXJzZSxEQS51dGNGb3JtYXQsREEudXRjUGFyc2UsREF9ZnVuY3Rpb24gVTdlKGkpe3JldHVybiBuZXcgRGF0ZShpKX1mdW5jdGlvbiBXN2UoaSl7cmV0dXJuIGkgaW5zdGFuY2VvZiBEYXRlPytpOituZXcgRGF0ZSgraSl9ZnVuY3Rpb24gdkR0KGksYSxmLHAsdyxtLGIsRSxfLEEpe3ZhciBJPVFNdCgpLEI9SS5pbnZlcnQsTj1JLmRvbWFpbixSPUEoIi4lTCIpLHo9QSgiOiVTIiksVz1BKCIlSTolTSIpLGV0PUEoIiVJICVwIiksc3Q9QSgiJWEgJWQiKSxhdD1BKCIlYiAlZCIpLGJ0PUEoIiVCIiksbXQ9QSgiJVkiKTtmdW5jdGlvbiB5dChmdCl7cmV0dXJuKF8oZnQpPGZ0P1I6RShmdCk8ZnQ/ejpiKGZ0KTxmdD9XOm0oZnQpPGZ0P2V0OnAoZnQpPGZ0P3coZnQpPGZ0P3N0OmF0OmYoZnQpPGZ0P2J0Om10KShmdCl9cmV0dXJuIEkuaW52ZXJ0PWZ1bmN0aW9uKGZ0KXtyZXR1cm4gbmV3IERhdGUoQihmdCkpfSxJLmRvbWFpbj1mdW5jdGlvbihmdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/TihBcnJheS5mcm9tKGZ0LFc3ZSkpOk4oKS5tYXAoVTdlKX0sSS50aWNrcz1mdW5jdGlvbihmdCl7dmFyIHV0PU4oKTtyZXR1cm4gaSh1dFswXSx1dFt1dC5sZW5ndGgtMV0sZnQ/PzEwKX0sSS50aWNrRm9ybWF0PWZ1bmN0aW9uKGZ0LHV0KXtyZXR1cm4gdXQ9PW51bGw/eXQ6QSh1dCl9LEkubmljZT1mdW5jdGlvbihmdCl7dmFyIHV0PU4oKTtyZXR1cm4oIWZ0fHx0eXBlb2YgZnQucmFuZ2UhPSJmdW5jdGlvbiIpJiYoZnQ9YSh1dFswXSx1dFt1dC5sZW5ndGgtMV0sZnQ/PzEwKSksZnQ/TihCRWUodXQsZnQpKTpJfSxJLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gWE10KEksdkR0KGksYSxmLHAsdyxtLGIsRSxfLEEpKX0sSX1mdW5jdGlvbiBZN2UoKXtyZXR1cm4gS1UuYXBwbHkodkR0KEhFZSxWRWUsazUsUlAsTlAsWjcsRlAsUFAsc2ssWlUpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIEs3ZShpKXtmb3IodmFyIGE9aS5sZW5ndGgvNnwwLGY9bmV3IEFycmF5KGEpLHA9MDtwPGE7KWZbcF09IiMiK2kuc2xpY2UocCo2LCsrcCo2KTtyZXR1cm4gZn1jb25zdCBYN2U9SzdlKCI0ZTc5YTdmMjhlMmNlMTU3NTk3NmI3YjI1OWExNGZlZGM5NDlhZjdhYTFmZjlkYTc5Yzc1NWZiYWIwYWIiKTtmdW5jdGlvbiBRaChpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaX19Y29uc3QgbUR0PU1hdGguYWJzLG0wPU1hdGguYXRhbjIsclQ9TWF0aC5jb3MsUTdlPU1hdGgubWF4LE4xdD1NYXRoLm1pbixoMz1NYXRoLnNpbixJQT1NYXRoLnNxcnQseTA9MWUtMTIscVA9TWF0aC5QSSxKVT1xUC8yLHRXPTIqcVA7ZnVuY3Rpb24gWjdlKGkpe3JldHVybiBpPjE/MDppPC0xP3FQOk1hdGguYWNvcyhpKX1mdW5jdGlvbiB5RHQoaSl7cmV0dXJuIGk+PTE/SlU6aTw9LTE/LUpVOk1hdGguYXNpbihpKX1mdW5jdGlvbiB4RHQoaSl7bGV0IGE9MztyZXR1cm4gaS5kaWdpdHM9ZnVuY3Rpb24oZil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGE7aWYoZj09bnVsbClhPW51bGw7ZWxzZXtjb25zdCBwPU1hdGguZmxvb3IoZik7aWYoIShwPj0wKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgaW52YWxpZCBkaWdpdHM6ICR7Zn1gKTthPXB9cmV0dXJuIGl9LCgpPT5uZXcgZEVlKGEpfWZ1bmN0aW9uIEo3ZShpKXtyZXR1cm4gaS5pbm5lclJhZGl1c31mdW5jdGlvbiB0VGUoaSl7cmV0dXJuIGkub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gZVRlKGkpe3JldHVybiBpLnN0YXJ0QW5nbGV9ZnVuY3Rpb24gblRlKGkpe3JldHVybiBpLmVuZEFuZ2xlfWZ1bmN0aW9uIHJUZShpKXtyZXR1cm4gaSYmaS5wYWRBbmdsZX1mdW5jdGlvbiBpVGUoaSxhLGYscCx3LG0sYixFKXt2YXIgXz1mLWksQT1wLWEsST1iLXcsQj1FLW0sTj1CKl8tSSpBO2lmKCEoTipOPHkwKSlyZXR1cm4gTj0oSSooYS1tKS1CKihpLXcpKS9OLFtpK04qXyxhK04qQV19ZnVuY3Rpb24gZVcoaSxhLGYscCx3LG0sYil7dmFyIEU9aS1mLF89YS1wLEE9KGI/bTotbSkvSUEoRSpFK18qXyksST1BKl8sQj0tQSpFLE49aStJLFI9YStCLHo9ZitJLFc9cCtCLGV0PShOK3opLzIsc3Q9KFIrVykvMixhdD16LU4sYnQ9Vy1SLG10PWF0KmF0K2J0KmJ0LHl0PXctbSxmdD1OKlcteipSLHV0PShidDwwPy0xOjEpKklBKFE3ZSgwLHl0Knl0Km10LWZ0KmZ0KSksdnQ9KGZ0KmJ0LWF0KnV0KS9tdCxYPSgtZnQqYXQtYnQqdXQpL210LHB0PShmdCpidCthdCp1dCkvbXQsVT0oLWZ0KmF0K2J0KnV0KS9tdCxUdD12dC1ldCxudD1YLXN0LEl0PXB0LWV0LE90PVUtc3Q7cmV0dXJuIFR0KlR0K250Km50Pkl0Kkl0K090Kk90JiYodnQ9cHQsWD1VKSx7Y3g6dnQsY3k6WCx4MDE6LUkseTAxOi1CLHgxMTp2dCoody95dC0xKSx5MTE6WCoody95dC0xKX19ZnVuY3Rpb24gT0EoKXt2YXIgaT1KN2UsYT10VGUsZj1RaCgwKSxwPW51bGwsdz1lVGUsbT1uVGUsYj1yVGUsRT1udWxsLF89eER0KEEpO2Z1bmN0aW9uIEEoKXt2YXIgSSxCLE49K2kuYXBwbHkodGhpcyxhcmd1bWVudHMpLFI9K2EuYXBwbHkodGhpcyxhcmd1bWVudHMpLHo9dy5hcHBseSh0aGlzLGFyZ3VtZW50cyktSlUsVz1tLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1KVSxldD1tRHQoVy16KSxzdD1XPno7aWYoRXx8KEU9ST1fKCkpLFI8TiYmKEI9UixSPU4sTj1CKSwhKFI+eTApKUUubW92ZVRvKDAsMCk7ZWxzZSBpZihldD50Vy15MClFLm1vdmVUbyhSKnJUKHopLFIqaDMoeikpLEUuYXJjKDAsMCxSLHosVywhc3QpLE4+eTAmJihFLm1vdmVUbyhOKnJUKFcpLE4qaDMoVykpLEUuYXJjKDAsMCxOLFcseixzdCkpO2Vsc2V7dmFyIGF0PXosYnQ9VyxtdD16LHl0PVcsZnQ9ZXQsdXQ9ZXQsdnQ9Yi5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixYPXZ0PnkwJiYocD8rcC5hcHBseSh0aGlzLGFyZ3VtZW50cyk6SUEoTipOK1IqUikpLHB0PU4xdChtRHQoUi1OKS8yLCtmLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksVT1wdCxUdD1wdCxudCxJdDtpZihYPnkwKXt2YXIgT3Q9eUR0KFgvTipoMyh2dCkpLEJ0PXlEdChYL1IqaDModnQpKTsoZnQtPU90KjIpPnkwPyhPdCo9c3Q/MTotMSxtdCs9T3QseXQtPU90KTooZnQ9MCxtdD15dD0oeitXKS8yKSwodXQtPUJ0KjIpPnkwPyhCdCo9c3Q/MTotMSxhdCs9QnQsYnQtPUJ0KToodXQ9MCxhdD1idD0oeitXKS8yKX12YXIgRXQ9UipyVChhdCksWj1SKmgzKGF0KSxDdD1OKnJUKHl0KSx4dD1OKmgzKHl0KTtpZihwdD55MCl7dmFyIEh0PVIqclQoYnQpLExlPVIqaDMoYnQpLEZ0PU4qclQobXQpLGduPU4qaDMobXQpLFNlO2lmKGV0PHFQKWlmKFNlPWlUZShFdCxaLEZ0LGduLEh0LExlLEN0LHh0KSl7dmFyIG1lPUV0LVNlWzBdLFZlPVotU2VbMV0sWWU9SHQtU2VbMF0sY2U9TGUtU2VbMV0sa2U9MS9oMyhaN2UoKG1lKlllK1ZlKmNlKS8oSUEobWUqbWUrVmUqVmUpKklBKFllKlllK2NlKmNlKSkpLzIpLHp0PUlBKFNlWzBdKlNlWzBdK1NlWzFdKlNlWzFdKTtVPU4xdChwdCwoTi16dCkvKGtlLTEpKSxUdD1OMXQocHQsKFItenQpLyhrZSsxKSl9ZWxzZSBVPVR0PTB9dXQ+eTA/VHQ+eTA/KG50PWVXKEZ0LGduLEV0LFosUixUdCxzdCksSXQ9ZVcoSHQsTGUsQ3QseHQsUixUdCxzdCksRS5tb3ZlVG8obnQuY3grbnQueDAxLG50LmN5K250LnkwMSksVHQ8cHQ/RS5hcmMobnQuY3gsbnQuY3ksVHQsbTAobnQueTAxLG50LngwMSksbTAoSXQueTAxLEl0LngwMSksIXN0KTooRS5hcmMobnQuY3gsbnQuY3ksVHQsbTAobnQueTAxLG50LngwMSksbTAobnQueTExLG50LngxMSksIXN0KSxFLmFyYygwLDAsUixtMChudC5jeStudC55MTEsbnQuY3grbnQueDExKSxtMChJdC5jeStJdC55MTEsSXQuY3grSXQueDExKSwhc3QpLEUuYXJjKEl0LmN4LEl0LmN5LFR0LG0wKEl0LnkxMSxJdC54MTEpLG0wKEl0LnkwMSxJdC54MDEpLCFzdCkpKTooRS5tb3ZlVG8oRXQsWiksRS5hcmMoMCwwLFIsYXQsYnQsIXN0KSk6RS5tb3ZlVG8oRXQsWiksIShOPnkwKXx8IShmdD55MCk/RS5saW5lVG8oQ3QseHQpOlU+eTA/KG50PWVXKEN0LHh0LEh0LExlLE4sLVUsc3QpLEl0PWVXKEV0LFosRnQsZ24sTiwtVSxzdCksRS5saW5lVG8obnQuY3grbnQueDAxLG50LmN5K250LnkwMSksVTxwdD9FLmFyYyhudC5jeCxudC5jeSxVLG0wKG50LnkwMSxudC54MDEpLG0wKEl0LnkwMSxJdC54MDEpLCFzdCk6KEUuYXJjKG50LmN4LG50LmN5LFUsbTAobnQueTAxLG50LngwMSksbTAobnQueTExLG50LngxMSksIXN0KSxFLmFyYygwLDAsTixtMChudC5jeStudC55MTEsbnQuY3grbnQueDExKSxtMChJdC5jeStJdC55MTEsSXQuY3grSXQueDExKSxzdCksRS5hcmMoSXQuY3gsSXQuY3ksVSxtMChJdC55MTEsSXQueDExKSxtMChJdC55MDEsSXQueDAxKSwhc3QpKSk6RS5hcmMoMCwwLE4seXQsbXQsc3QpfWlmKEUuY2xvc2VQYXRoKCksSSlyZXR1cm4gRT1udWxsLEkrIiJ8fG51bGx9cmV0dXJuIEEuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgST0oK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsQj0oK3cuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArbS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItcVAvMjtyZXR1cm5bclQoQikqSSxoMyhCKSpJXX0sQS5pbm5lclJhZGl1cz1mdW5jdGlvbihJKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgST09ImZ1bmN0aW9uIj9JOlFoKCtJKSxBKTppfSxBLm91dGVyUmFkaXVzPWZ1bmN0aW9uKEkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXR5cGVvZiBJPT0iZnVuY3Rpb24iP0k6UWgoK0kpLEEpOmF9LEEuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKEkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPXR5cGVvZiBJPT0iZnVuY3Rpb24iP0k6UWgoK0kpLEEpOmZ9LEEucGFkUmFkaXVzPWZ1bmN0aW9uKEkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPUk9PW51bGw/bnVsbDp0eXBlb2YgST09ImZ1bmN0aW9uIj9JOlFoKCtJKSxBKTpwfSxBLnN0YXJ0QW5nbGU9ZnVuY3Rpb24oSSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9dHlwZW9mIEk9PSJmdW5jdGlvbiI/STpRaCgrSSksQSk6d30sQS5lbmRBbmdsZT1mdW5jdGlvbihJKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT10eXBlb2YgST09ImZ1bmN0aW9uIj9JOlFoKCtJKSxBKTptfSxBLnBhZEFuZ2xlPWZ1bmN0aW9uKEkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPXR5cGVvZiBJPT0iZnVuY3Rpb24iP0k6UWgoK0kpLEEpOmJ9LEEuY29udGV4dD1mdW5jdGlvbihJKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT1JPz9udWxsLEEpOkV9LEF9ZnVuY3Rpb24ga0R0KGkpe3JldHVybiB0eXBlb2YgaT09Im9iamVjdCImJiJsZW5ndGgiaW4gaT9pOkFycmF5LmZyb20oaSl9ZnVuY3Rpb24gRUR0KGkpe3RoaXMuX2NvbnRleHQ9aX1FRHQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXtzd2l0Y2goaT0raSxhPSthLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGksYSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaSxhKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKGksYSk7YnJlYWt9fX07ZnVuY3Rpb24gY2coaSl7cmV0dXJuIG5ldyBFRHQoaSl9ZnVuY3Rpb24gc1RlKGkpe3JldHVybiBpWzBdfWZ1bmN0aW9uIGFUZShpKXtyZXR1cm4gaVsxXX1mdW5jdGlvbiBFNShpLGEpe3ZhciBmPVFoKCEwKSxwPW51bGwsdz1jZyxtPW51bGwsYj14RHQoRSk7aT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmk9PT12b2lkIDA/c1RlOlFoKGkpLGE9dHlwZW9mIGE9PSJmdW5jdGlvbiI/YTphPT09dm9pZCAwP2FUZTpRaChhKTtmdW5jdGlvbiBFKF8pe3ZhciBBLEk9KF89a0R0KF8pKS5sZW5ndGgsQixOPSExLFI7Zm9yKHA9PW51bGwmJihtPXcoUj1iKCkpKSxBPTA7QTw9STsrK0EpIShBPEkmJmYoQj1fW0FdLEEsXykpPT09TiYmKChOPSFOKT9tLmxpbmVTdGFydCgpOm0ubGluZUVuZCgpKSxOJiZtLnBvaW50KCtpKEIsQSxfKSwrYShCLEEsXykpO2lmKFIpcmV0dXJuIG09bnVsbCxSKyIifHxudWxsfXJldHVybiBFLng9ZnVuY3Rpb24oXyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIF89PSJmdW5jdGlvbiI/XzpRaCgrXyksRSk6aX0sRS55PWZ1bmN0aW9uKF8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXR5cGVvZiBfPT0iZnVuY3Rpb24iP186UWgoK18pLEUpOmF9LEUuZGVmaW5lZD1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj10eXBlb2YgXz09ImZ1bmN0aW9uIj9fOlFoKCEhXyksRSk6Zn0sRS5jdXJ2ZT1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz1fLHAhPW51bGwmJihtPXcocCkpLEUpOnd9LEUuY29udGV4dD1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz09bnVsbD9wPW09bnVsbDptPXcocD1fKSxFKTpwfSxFfWZ1bmN0aW9uIG9UZShpLGEpe3JldHVybiBhPGk/LTE6YT5pPzE6YT49aT8wOk5hTn1mdW5jdGlvbiBjVGUoaSl7cmV0dXJuIGl9ZnVuY3Rpb24gdVRlKCl7dmFyIGk9Y1RlLGE9b1RlLGY9bnVsbCxwPVFoKDApLHc9UWgodFcpLG09UWgoMCk7ZnVuY3Rpb24gYihFKXt2YXIgXyxBPShFPWtEdChFKSkubGVuZ3RoLEksQixOPTAsUj1uZXcgQXJyYXkoQSksej1uZXcgQXJyYXkoQSksVz0rcC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZXQ9TWF0aC5taW4odFcsTWF0aC5tYXgoLXRXLHcuYXBwbHkodGhpcyxhcmd1bWVudHMpLVcpKSxzdCxhdD1NYXRoLm1pbihNYXRoLmFicyhldCkvQSxtLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYnQ9YXQqKGV0PDA/LTE6MSksbXQ7Zm9yKF89MDtfPEE7KytfKShtdD16W1JbX109X109K2koRVtfXSxfLEUpKT4wJiYoTis9bXQpO2ZvcihhIT1udWxsP1Iuc29ydChmdW5jdGlvbih5dCxmdCl7cmV0dXJuIGEoelt5dF0seltmdF0pfSk6ZiE9bnVsbCYmUi5zb3J0KGZ1bmN0aW9uKHl0LGZ0KXtyZXR1cm4gZihFW3l0XSxFW2Z0XSl9KSxfPTAsQj1OPyhldC1BKmJ0KS9OOjA7XzxBOysrXyxXPXN0KUk9UltfXSxtdD16W0ldLHN0PVcrKG10PjA/bXQqQjowKStidCx6W0ldPXtkYXRhOkVbSV0saW5kZXg6Xyx2YWx1ZTptdCxzdGFydEFuZ2xlOlcsZW5kQW5nbGU6c3QscGFkQW5nbGU6YXR9O3JldHVybiB6fXJldHVybiBiLnZhbHVlPWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBFPT0iZnVuY3Rpb24iP0U6UWgoK0UpLGIpOml9LGIuc29ydFZhbHVlcz1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1FLGY9bnVsbCxiKTphfSxiLnNvcnQ9ZnVuY3Rpb24oRSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9RSxhPW51bGwsYik6Zn0sYi5zdGFydEFuZ2xlPWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPXR5cGVvZiBFPT0iZnVuY3Rpb24iP0U6UWgoK0UpLGIpOnB9LGIuZW5kQW5nbGU9ZnVuY3Rpb24oRSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9dHlwZW9mIEU9PSJmdW5jdGlvbiI/RTpRaCgrRSksYik6d30sYi5wYWRBbmdsZT1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT10eXBlb2YgRT09ImZ1bmN0aW9uIj9FOlFoKCtFKSxiKTptfSxifWNsYXNzIFREdHtjb25zdHJ1Y3RvcihhLGYpe3RoaXMuX2NvbnRleHQ9YSx0aGlzLl94PWZ9YXJlYVN0YXJ0KCl7dGhpcy5fbGluZT0wfWFyZWFFbmQoKXt0aGlzLl9saW5lPU5hTn1saW5lU3RhcnQoKXt0aGlzLl9wb2ludD0wfWxpbmVFbmQoKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9cG9pbnQoYSxmKXtzd2l0Y2goYT0rYSxmPStmLHRoaXMuX3BvaW50KXtjYXNlIDA6e3RoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhhLGYpOnRoaXMuX2NvbnRleHQubW92ZVRvKGEsZik7YnJlYWt9Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7dGhpcy5feD90aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8odGhpcy5feDA9KHRoaXMuX3gwK2EpLzIsdGhpcy5feTAsdGhpcy5feDAsZixhLGYpOnRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0aGlzLl94MCx0aGlzLl95MD0odGhpcy5feTArZikvMixhLHRoaXMuX3kwLGEsZik7YnJlYWt9fXRoaXMuX3gwPWEsdGhpcy5feTA9Zn19ZnVuY3Rpb24gbFRlKGkpe3JldHVybiBuZXcgVER0KGksITApfWZ1bmN0aW9uIGhUZShpKXtyZXR1cm4gbmV3IFREdChpLCExKX1mdW5jdGlvbiBhaygpe31mdW5jdGlvbiBuVyhpLGEsZil7aS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKmkuX3gwK2kuX3gxKS8zLCgyKmkuX3kwK2kuX3kxKS8zLChpLl94MCsyKmkuX3gxKS8zLChpLl95MCsyKmkuX3kxKS8zLChpLl94MCs0KmkuX3gxK2EpLzYsKGkuX3kwKzQqaS5feTErZikvNil9ZnVuY3Rpb24gclcoaSl7dGhpcy5fY29udGV4dD1pfXJXLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6blcodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGksYSl7c3dpdGNoKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhpLGEpOnRoaXMuX2NvbnRleHQubW92ZVRvKGksYSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6blcodGhpcyxpLGEpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9YX19O2Z1bmN0aW9uIEhQKGkpe3JldHVybiBuZXcgclcoaSl9ZnVuY3Rpb24gQ0R0KGkpe3RoaXMuX2NvbnRleHQ9aX1DRHQucHJvdG90eXBlPXthcmVhU3RhcnQ6YWssYXJlYUVuZDphayxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGksYSl7c3dpdGNoKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9aSx0aGlzLl95Mj1hO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPWksdGhpcy5feTM9YTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND1pLHRoaXMuX3k0PWEsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDEraSkvNiwodGhpcy5feTArNCp0aGlzLl95MSthKS82KTticmVhaztkZWZhdWx0Om5XKHRoaXMsaSxhKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWF9fTtmdW5jdGlvbiBmVGUoaSl7cmV0dXJuIG5ldyBDRHQoaSl9ZnVuY3Rpb24gX0R0KGkpe3RoaXMuX2NvbnRleHQ9aX1fRHQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGksYSl7c3dpdGNoKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIGY9KHRoaXMuX3gwKzQqdGhpcy5feDEraSkvNixwPSh0aGlzLl95MCs0KnRoaXMuX3kxK2EpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhmLHApOnRoaXMuX2NvbnRleHQubW92ZVRvKGYscCk7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpuVyh0aGlzLGksYSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1hfX07ZnVuY3Rpb24gZFRlKGkpe3JldHVybiBuZXcgX0R0KGkpfWZ1bmN0aW9uIFNEdChpLGEpe3RoaXMuX2Jhc2lzPW5ldyByVyhpKSx0aGlzLl9iZXRhPWF9U0R0LnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5feCxhPXRoaXMuX3ksZj1pLmxlbmd0aC0xO2lmKGY+MClmb3IodmFyIHA9aVswXSx3PWFbMF0sbT1pW2ZdLXAsYj1hW2ZdLXcsRT0tMSxfOysrRTw9ZjspXz1FL2YsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSppW0VdKygxLXRoaXMuX2JldGEpKihwK18qbSksdGhpcy5fYmV0YSphW0VdKygxLXRoaXMuX2JldGEpKih3K18qYikpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXt0aGlzLl94LnB1c2goK2kpLHRoaXMuX3kucHVzaCgrYSl9fTtjb25zdCBnVGU9ZnVuY3Rpb24gaShhKXtmdW5jdGlvbiBmKHApe3JldHVybiBhPT09MT9uZXcgclcocCk6bmV3IFNEdChwLGEpfXJldHVybiBmLmJldGE9ZnVuY3Rpb24ocCl7cmV0dXJuIGkoK3ApfSxmfSguODUpO2Z1bmN0aW9uIGlXKGksYSxmKXtpLl9jb250ZXh0LmJlemllckN1cnZlVG8oaS5feDEraS5fayooaS5feDItaS5feDApLGkuX3kxK2kuX2sqKGkuX3kyLWkuX3kwKSxpLl94MitpLl9rKihpLl94MS1hKSxpLl95MitpLl9rKihpLl95MS1mKSxpLl94MixpLl95Mil9ZnVuY3Rpb24gQjF0KGksYSl7dGhpcy5fY29udGV4dD1pLHRoaXMuX2s9KDEtYSkvNn1CMXQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOmlXKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXtzd2l0Y2goaT0raSxhPSthLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGksYSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaSxhKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT1pLHRoaXMuX3kxPWE7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDppVyh0aGlzLGksYSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1hfX07Y29uc3QgcFRlPWZ1bmN0aW9uIGkoYSl7ZnVuY3Rpb24gZihwKXtyZXR1cm4gbmV3IEIxdChwLGEpfXJldHVybiBmLnRlbnNpb249ZnVuY3Rpb24ocCl7cmV0dXJuIGkoK3ApfSxmfSgwKTtmdW5jdGlvbiBSMXQoaSxhKXt0aGlzLl9jb250ZXh0PWksdGhpcy5faz0oMS1hKS82fVIxdC5wcm90b3R5cGU9e2FyZWFTdGFydDphayxhcmVhRW5kOmFrLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihpLGEpe3N3aXRjaChpPStpLGE9K2EsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWksdGhpcy5feTM9YTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1pLHRoaXMuX3k0PWEpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWksdGhpcy5feTU9YTticmVhaztkZWZhdWx0OmlXKHRoaXMsaSxhKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWF9fTtjb25zdCBiVGU9ZnVuY3Rpb24gaShhKXtmdW5jdGlvbiBmKHApe3JldHVybiBuZXcgUjF0KHAsYSl9cmV0dXJuIGYudGVuc2lvbj1mdW5jdGlvbihwKXtyZXR1cm4gaSgrcCl9LGZ9KDApO2Z1bmN0aW9uIGoxdChpLGEpe3RoaXMuX2NvbnRleHQ9aSx0aGlzLl9rPSgxLWEpLzZ9ajF0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihpLGEpe3N3aXRjaChpPStpLGE9K2EsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmlXKHRoaXMsaSxhKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWF9fTtjb25zdCB3VGU9ZnVuY3Rpb24gaShhKXtmdW5jdGlvbiBmKHApe3JldHVybiBuZXcgajF0KHAsYSl9cmV0dXJuIGYudGVuc2lvbj1mdW5jdGlvbihwKXtyZXR1cm4gaSgrcCl9LGZ9KDApO2Z1bmN0aW9uICQxdChpLGEsZil7dmFyIHA9aS5feDEsdz1pLl95MSxtPWkuX3gyLGI9aS5feTI7aWYoaS5fbDAxX2E+eTApe3ZhciBFPTIqaS5fbDAxXzJhKzMqaS5fbDAxX2EqaS5fbDEyX2EraS5fbDEyXzJhLF89MyppLl9sMDFfYSooaS5fbDAxX2EraS5fbDEyX2EpO3A9KHAqRS1pLl94MCppLl9sMTJfMmEraS5feDIqaS5fbDAxXzJhKS9fLHc9KHcqRS1pLl95MCppLl9sMTJfMmEraS5feTIqaS5fbDAxXzJhKS9ffWlmKGkuX2wyM19hPnkwKXt2YXIgQT0yKmkuX2wyM18yYSszKmkuX2wyM19hKmkuX2wxMl9hK2kuX2wxMl8yYSxJPTMqaS5fbDIzX2EqKGkuX2wyM19hK2kuX2wxMl9hKTttPShtKkEraS5feDEqaS5fbDIzXzJhLWEqaS5fbDEyXzJhKS9JLGI9KGIqQStpLl95MSppLl9sMjNfMmEtZippLl9sMTJfMmEpL0l9aS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHAsdyxtLGIsaS5feDIsaS5feTIpfWZ1bmN0aW9uIEFEdChpLGEpe3RoaXMuX2NvbnRleHQ9aSx0aGlzLl9hbHBoYT1hfUFEdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihpLGEpe2lmKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7dmFyIGY9dGhpcy5feDItaSxwPXRoaXMuX3kyLWE7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhmKmYrcCpwLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGksYSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaSxhKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OiQxdCh0aGlzLGksYSk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9YX19O2NvbnN0IHZUZT1mdW5jdGlvbiBpKGEpe2Z1bmN0aW9uIGYocCl7cmV0dXJuIGE/bmV3IEFEdChwLGEpOm5ldyBCMXQocCwwKX1yZXR1cm4gZi5hbHBoYT1mdW5jdGlvbihwKXtyZXR1cm4gaSgrcCl9LGZ9KC41KTtmdW5jdGlvbiBMRHQoaSxhKXt0aGlzLl9jb250ZXh0PWksdGhpcy5fYWxwaGE9YX1MRHQucHJvdG90eXBlPXthcmVhU3RhcnQ6YWssYXJlYUVuZDphayxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMzp7dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSk7YnJlYWt9fX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXtpZihpPStpLGE9K2EsdGhpcy5fcG9pbnQpe3ZhciBmPXRoaXMuX3gyLWkscD10aGlzLl95Mi1hO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3coZipmK3AqcCx0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9aSx0aGlzLl95Mz1hO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PWksdGhpcy5feTQ9YSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9aSx0aGlzLl95NT1hO2JyZWFrO2RlZmF1bHQ6JDF0KHRoaXMsaSxhKTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1hfX07Y29uc3QgbVRlPWZ1bmN0aW9uIGkoYSl7ZnVuY3Rpb24gZihwKXtyZXR1cm4gYT9uZXcgTER0KHAsYSk6bmV3IFIxdChwLDApfXJldHVybiBmLmFscGhhPWZ1bmN0aW9uKHApe3JldHVybiBpKCtwKX0sZn0oLjUpO2Z1bmN0aW9uIE1EdChpLGEpe3RoaXMuX2NvbnRleHQ9aSx0aGlzLl9hbHBoYT1hfU1EdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXtpZihpPStpLGE9K2EsdGhpcy5fcG9pbnQpe3ZhciBmPXRoaXMuX3gyLWkscD10aGlzLl95Mi1hO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3coZipmK3AqcCx0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6JDF0KHRoaXMsaSxhKTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1hfX07Y29uc3QgeVRlPWZ1bmN0aW9uIGkoYSl7ZnVuY3Rpb24gZihwKXtyZXR1cm4gYT9uZXcgTUR0KHAsYSk6bmV3IGoxdChwLDApfXJldHVybiBmLmFscGhhPWZ1bmN0aW9uKHApe3JldHVybiBpKCtwKX0sZn0oLjUpO2Z1bmN0aW9uIEREdChpKXt0aGlzLl9jb250ZXh0PWl9RER0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmFrLGFyZWFFbmQ6YWssbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbihpLGEpe2k9K2ksYT0rYSx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyhpLGEpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKGksYSkpfX07ZnVuY3Rpb24geFRlKGkpe3JldHVybiBuZXcgRER0KGkpfWZ1bmN0aW9uIElEdChpKXtyZXR1cm4gaTwwPy0xOjF9ZnVuY3Rpb24gT0R0KGksYSxmKXt2YXIgcD1pLl94MS1pLl94MCx3PWEtaS5feDEsbT0oaS5feTEtaS5feTApLyhwfHx3PDAmJi0wKSxiPShmLWkuX3kxKS8od3x8cDwwJiYtMCksRT0obSp3K2IqcCkvKHArdyk7cmV0dXJuKElEdChtKStJRHQoYikpKk1hdGgubWluKE1hdGguYWJzKG0pLE1hdGguYWJzKGIpLC41Kk1hdGguYWJzKEUpKXx8MH1mdW5jdGlvbiBQRHQoaSxhKXt2YXIgZj1pLl94MS1pLl94MDtyZXR1cm4gZj8oMyooaS5feTEtaS5feTApL2YtYSkvMjphfWZ1bmN0aW9uIHoxdChpLGEsZil7dmFyIHA9aS5feDAsdz1pLl95MCxtPWkuX3gxLGI9aS5feTEsRT0obS1wKS8zO2kuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhwK0UsdytFKmEsbS1FLGItRSpmLG0sYil9ZnVuY3Rpb24gc1coaSl7dGhpcy5fY29udGV4dD1pfXNXLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzp6MXQodGhpcyx0aGlzLl90MCxQRHQodGhpcyx0aGlzLl90MCkpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXt2YXIgZj1OYU47aWYoaT0raSxhPSthLCEoaT09PXRoaXMuX3gxJiZhPT09dGhpcy5feTEpKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oaSxhKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhpLGEpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHoxdCh0aGlzLFBEdCh0aGlzLGY9T0R0KHRoaXMsaSxhKSksZik7YnJlYWs7ZGVmYXVsdDp6MXQodGhpcyx0aGlzLl90MCxmPU9EdCh0aGlzLGksYSkpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9YSx0aGlzLl90MD1mfX19O2Z1bmN0aW9uIEZEdChpKXt0aGlzLl9jb250ZXh0PW5ldyBORHQoaSl9KEZEdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShzVy5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbihpLGEpe3NXLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsYSxpKX07ZnVuY3Rpb24gTkR0KGkpe3RoaXMuX2NvbnRleHQ9aX1ORHQucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24oaSxhKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhhLGkpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24oaSxhKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhhLGkpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGksYSxmLHAsdyxtKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oYSxpLHAsZixtLHcpfX07ZnVuY3Rpb24ga1RlKGkpe3JldHVybiBuZXcgc1coaSl9ZnVuY3Rpb24gRVRlKGkpe3JldHVybiBuZXcgRkR0KGkpfWZ1bmN0aW9uIEJEdChpKXt0aGlzLl9jb250ZXh0PWl9QkR0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciBpPXRoaXMuX3gsYT10aGlzLl95LGY9aS5sZW5ndGg7aWYoZilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGlbMF0sYVswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaVswXSxhWzBdKSxmPT09Mil0aGlzLl9jb250ZXh0LmxpbmVUbyhpWzFdLGFbMV0pO2Vsc2UgZm9yKHZhciBwPVJEdChpKSx3PVJEdChhKSxtPTAsYj0xO2I8ZjsrK20sKytiKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhwWzBdW21dLHdbMF1bbV0scFsxXVttXSx3WzFdW21dLGlbYl0sYVtiXSk7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZmPT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKGksYSl7dGhpcy5feC5wdXNoKCtpKSx0aGlzLl95LnB1c2goK2EpfX07ZnVuY3Rpb24gUkR0KGkpe3ZhciBhLGY9aS5sZW5ndGgtMSxwLHc9bmV3IEFycmF5KGYpLG09bmV3IEFycmF5KGYpLGI9bmV3IEFycmF5KGYpO2Zvcih3WzBdPTAsbVswXT0yLGJbMF09aVswXSsyKmlbMV0sYT0xO2E8Zi0xOysrYSl3W2FdPTEsbVthXT00LGJbYV09NCppW2FdKzIqaVthKzFdO2Zvcih3W2YtMV09MixtW2YtMV09NyxiW2YtMV09OCppW2YtMV0raVtmXSxhPTE7YTxmOysrYSlwPXdbYV0vbVthLTFdLG1bYV0tPXAsYlthXS09cCpiW2EtMV07Zm9yKHdbZi0xXT1iW2YtMV0vbVtmLTFdLGE9Zi0yO2E+PTA7LS1hKXdbYV09KGJbYV0td1thKzFdKS9tW2FdO2ZvcihtW2YtMV09KGlbZl0rd1tmLTFdKS8yLGE9MDthPGYtMTsrK2EpbVthXT0yKmlbYSsxXS13W2ErMV07cmV0dXJuW3csbV19ZnVuY3Rpb24gVFRlKGkpe3JldHVybiBuZXcgQkR0KGkpfWZ1bmN0aW9uIGFXKGksYSl7dGhpcy5fY29udGV4dD1pLHRoaXMuX3Q9YX1hVy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmdGhpcy5fcG9pbnQ9PT0yJiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbihpLGEpe3N3aXRjaChpPStpLGE9K2EsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oaSxhKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhpLGEpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6e2lmKHRoaXMuX3Q8PTApdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCxhKSx0aGlzLl9jb250ZXh0LmxpbmVUbyhpLGEpO2Vsc2V7dmFyIGY9dGhpcy5feCooMS10aGlzLl90KStpKnRoaXMuX3Q7dGhpcy5fY29udGV4dC5saW5lVG8oZix0aGlzLl95KSx0aGlzLl9jb250ZXh0LmxpbmVUbyhmLGEpfWJyZWFrfX10aGlzLl94PWksdGhpcy5feT1hfX07ZnVuY3Rpb24gQ1RlKGkpe3JldHVybiBuZXcgYVcoaSwuNSl9ZnVuY3Rpb24gX1RlKGkpe3JldHVybiBuZXcgYVcoaSwwKX1mdW5jdGlvbiBTVGUoaSl7cmV0dXJuIG5ldyBhVyhpLDEpfWZ1bmN0aW9uIFZQKGksYSxmKXt0aGlzLms9aSx0aGlzLng9YSx0aGlzLnk9Zn1WUC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlZQLHNjYWxlOmZ1bmN0aW9uKGkpe3JldHVybiBpPT09MT90aGlzOm5ldyBWUCh0aGlzLmsqaSx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGksYSl7cmV0dXJuIGk9PT0wJmE9PT0wP3RoaXM6bmV3IFZQKHRoaXMuayx0aGlzLngrdGhpcy5rKmksdGhpcy55K3RoaXMuayphKX0sYXBwbHk6ZnVuY3Rpb24oaSl7cmV0dXJuW2lbMF0qdGhpcy5rK3RoaXMueCxpWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oaSl7cmV0dXJuIGkqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGkpe3JldHVybiBpKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihpKXtyZXR1cm5bKGlbMF0tdGhpcy54KS90aGlzLmssKGlbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGkpe3JldHVybihpLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGkpe3JldHVybihpLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihpKXtyZXR1cm4gaS5jb3B5KCkuZG9tYWluKGkucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChpLmludmVydCxpKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGkpe3JldHVybiBpLmNvcHkoKS5kb21haW4oaS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGkuaW52ZXJ0LGkpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX0sVlAucHJvdG90eXBlOy8qISBAbGljZW5zZSBET01QdXJpZnkgMy4wLjUgfCAoYykgQ3VyZTUzIGFuZCBvdGhlciBjb250cmlidXRvcnMgfCBSZWxlYXNlZCB1bmRlciB0aGUgQXBhY2hlIGxpY2Vuc2UgMi4wIGFuZCBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIDIuMCB8IGdpdGh1Yi5jb20vY3VyZTUzL0RPTVB1cmlmeS9ibG9iLzMuMC41L0xJQ0VOU0UgKi9jb25zdHtlbnRyaWVzOmpEdCxzZXRQcm90b3R5cGVPZjokRHQsaXNGcm96ZW46QVRlLGdldFByb3RvdHlwZU9mOkxUZSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6TVRlfT1PYmplY3Q7bGV0e2ZyZWV6ZTp1ZyxzZWFsOkp2LGNyZWF0ZTpEVGV9PU9iamVjdCx7YXBwbHk6cTF0LGNvbnN0cnVjdDpIMXR9PXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdDtxMXR8fChxMXQ9ZnVuY3Rpb24oYSxmLHApe3JldHVybiBhLmFwcGx5KGYscCl9KSx1Z3x8KHVnPWZ1bmN0aW9uKGEpe3JldHVybiBhfSksSnZ8fChKdj1mdW5jdGlvbihhKXtyZXR1cm4gYX0pLEgxdHx8KEgxdD1mdW5jdGlvbihhLGYpe3JldHVybiBuZXcgYSguLi5mKX0pO2NvbnN0IElUZT1KMihBcnJheS5wcm90b3R5cGUuZm9yRWFjaCksekR0PUoyKEFycmF5LnByb3RvdHlwZS5wb3ApLEdQPUoyKEFycmF5LnByb3RvdHlwZS5wdXNoKSxvVz1KMihTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlKSxWMXQ9SjIoU3RyaW5nLnByb3RvdHlwZS50b1N0cmluZyksT1RlPUoyKFN0cmluZy5wcm90b3R5cGUubWF0Y2gpLHRtPUoyKFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksUFRlPUoyKFN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiksRlRlPUoyKFN0cmluZy5wcm90b3R5cGUudHJpbSksUGI9SjIoUmVnRXhwLnByb3RvdHlwZS50ZXN0KSxVUD1OVGUoVHlwZUVycm9yKTtmdW5jdGlvbiBKMihpKXtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgscD1uZXcgQXJyYXkoZj4xP2YtMTowKSx3PTE7dzxmO3crKylwW3ctMV09YXJndW1lbnRzW3ddO3JldHVybiBxMXQoaSxhLHApfX1mdW5jdGlvbiBOVGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoYSkscD0wO3A8YTtwKyspZltwXT1hcmd1bWVudHNbcF07cmV0dXJuIEgxdChpLGYpfX1mdW5jdGlvbiBtbyhpLGEsZil7dmFyIHA7Zj0ocD1mKSE9PW51bGwmJnAhPT12b2lkIDA/cDpvVywkRHQmJiREdChpLG51bGwpO2xldCB3PWEubGVuZ3RoO2Zvcig7dy0tOyl7bGV0IG09YVt3XTtpZih0eXBlb2YgbT09InN0cmluZyIpe2NvbnN0IGI9ZihtKTtiIT09bSYmKEFUZShhKXx8KGFbd109YiksbT1iKX1pW21dPSEwfXJldHVybiBpfWZ1bmN0aW9uIFBBKGkpe2NvbnN0IGE9RFRlKG51bGwpO2Zvcihjb25zdFtmLHBdb2YgakR0KGkpKWFbZl09cDtyZXR1cm4gYX1mdW5jdGlvbiBjVyhpLGEpe2Zvcig7aSE9PW51bGw7KXtjb25zdCBwPU1UZShpLGEpO2lmKHApe2lmKHAuZ2V0KXJldHVybiBKMihwLmdldCk7aWYodHlwZW9mIHAudmFsdWU9PSJmdW5jdGlvbiIpcmV0dXJuIEoyKHAudmFsdWUpfWk9TFRlKGkpfWZ1bmN0aW9uIGYocCl7cmV0dXJuIGNvbnNvbGUud2FybigiZmFsbGJhY2sgdmFsdWUgZm9yIixwKSxudWxsfXJldHVybiBmfWNvbnN0IHFEdD11ZyhbImEiLCJhYmJyIiwiYWNyb255bSIsImFkZHJlc3MiLCJhcmVhIiwiYXJ0aWNsZSIsImFzaWRlIiwiYXVkaW8iLCJiIiwiYmRpIiwiYmRvIiwiYmlnIiwiYmxpbmsiLCJibG9ja3F1b3RlIiwiYm9keSIsImJyIiwiYnV0dG9uIiwiY2FudmFzIiwiY2FwdGlvbiIsImNlbnRlciIsImNpdGUiLCJjb2RlIiwiY29sIiwiY29sZ3JvdXAiLCJjb250ZW50IiwiZGF0YSIsImRhdGFsaXN0IiwiZGQiLCJkZWNvcmF0b3IiLCJkZWwiLCJkZXRhaWxzIiwiZGZuIiwiZGlhbG9nIiwiZGlyIiwiZGl2IiwiZGwiLCJkdCIsImVsZW1lbnQiLCJlbSIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvbnQiLCJmb290ZXIiLCJmb3JtIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZCIsImhlYWRlciIsImhncm91cCIsImhyIiwiaHRtbCIsImkiLCJpbWciLCJpbnB1dCIsImlucyIsImtiZCIsImxhYmVsIiwibGVnZW5kIiwibGkiLCJtYWluIiwibWFwIiwibWFyayIsIm1hcnF1ZWUiLCJtZW51IiwibWVudWl0ZW0iLCJtZXRlciIsIm5hdiIsIm5vYnIiLCJvbCIsIm9wdGdyb3VwIiwib3B0aW9uIiwib3V0cHV0IiwicCIsInBpY3R1cmUiLCJwcmUiLCJwcm9ncmVzcyIsInEiLCJycCIsInJ0IiwicnVieSIsInMiLCJzYW1wIiwic2VjdGlvbiIsInNlbGVjdCIsInNoYWRvdyIsInNtYWxsIiwic291cmNlIiwic3BhY2VyIiwic3BhbiIsInN0cmlrZSIsInN0cm9uZyIsInN0eWxlIiwic3ViIiwic3VtbWFyeSIsInN1cCIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRlbXBsYXRlIiwidGV4dGFyZWEiLCJ0Zm9vdCIsInRoIiwidGhlYWQiLCJ0aW1lIiwidHIiLCJ0cmFjayIsInR0IiwidSIsInVsIiwidmFyIiwidmlkZW8iLCJ3YnIiXSksRzF0PXVnKFsic3ZnIiwiYSIsImFsdGdseXBoIiwiYWx0Z2x5cGhkZWYiLCJhbHRnbHlwaGl0ZW0iLCJhbmltYXRlY29sb3IiLCJhbmltYXRlbW90aW9uIiwiYW5pbWF0ZXRyYW5zZm9ybSIsImNpcmNsZSIsImNsaXBwYXRoIiwiZGVmcyIsImRlc2MiLCJlbGxpcHNlIiwiZmlsdGVyIiwiZm9udCIsImciLCJnbHlwaCIsImdseXBocmVmIiwiaGtlcm4iLCJpbWFnZSIsImxpbmUiLCJsaW5lYXJncmFkaWVudCIsIm1hcmtlciIsIm1hc2siLCJtZXRhZGF0YSIsIm1wYXRoIiwicGF0aCIsInBhdHRlcm4iLCJwb2x5Z29uIiwicG9seWxpbmUiLCJyYWRpYWxncmFkaWVudCIsInJlY3QiLCJzdG9wIiwic3R5bGUiLCJzd2l0Y2giLCJzeW1ib2wiLCJ0ZXh0IiwidGV4dHBhdGgiLCJ0aXRsZSIsInRyZWYiLCJ0c3BhbiIsInZpZXciLCJ2a2VybiJdKSxVMXQ9dWcoWyJmZUJsZW5kIiwiZmVDb2xvck1hdHJpeCIsImZlQ29tcG9uZW50VHJhbnNmZXIiLCJmZUNvbXBvc2l0ZSIsImZlQ29udm9sdmVNYXRyaXgiLCJmZURpZmZ1c2VMaWdodGluZyIsImZlRGlzcGxhY2VtZW50TWFwIiwiZmVEaXN0YW50TGlnaHQiLCJmZURyb3BTaGFkb3ciLCJmZUZsb29kIiwiZmVGdW5jQSIsImZlRnVuY0IiLCJmZUZ1bmNHIiwiZmVGdW5jUiIsImZlR2F1c3NpYW5CbHVyIiwiZmVJbWFnZSIsImZlTWVyZ2UiLCJmZU1lcmdlTm9kZSIsImZlTW9ycGhvbG9neSIsImZlT2Zmc2V0IiwiZmVQb2ludExpZ2h0IiwiZmVTcGVjdWxhckxpZ2h0aW5nIiwiZmVTcG90TGlnaHQiLCJmZVRpbGUiLCJmZVR1cmJ1bGVuY2UiXSksQlRlPXVnKFsiYW5pbWF0ZSIsImNvbG9yLXByb2ZpbGUiLCJjdXJzb3IiLCJkaXNjYXJkIiwiZm9udC1mYWNlIiwiZm9udC1mYWNlLWZvcm1hdCIsImZvbnQtZmFjZS1uYW1lIiwiZm9udC1mYWNlLXNyYyIsImZvbnQtZmFjZS11cmkiLCJmb3JlaWdub2JqZWN0IiwiaGF0Y2giLCJoYXRjaHBhdGgiLCJtZXNoIiwibWVzaGdyYWRpZW50IiwibWVzaHBhdGNoIiwibWVzaHJvdyIsIm1pc3NpbmctZ2x5cGgiLCJzY3JpcHQiLCJzZXQiLCJzb2xpZGNvbG9yIiwidW5rbm93biIsInVzZSJdKSxXMXQ9dWcoWyJtYXRoIiwibWVuY2xvc2UiLCJtZXJyb3IiLCJtZmVuY2VkIiwibWZyYWMiLCJtZ2x5cGgiLCJtaSIsIm1sYWJlbGVkdHIiLCJtbXVsdGlzY3JpcHRzIiwibW4iLCJtbyIsIm1vdmVyIiwibXBhZGRlZCIsIm1waGFudG9tIiwibXJvb3QiLCJtcm93IiwibXMiLCJtc3BhY2UiLCJtc3FydCIsIm1zdHlsZSIsIm1zdWIiLCJtc3VwIiwibXN1YnN1cCIsIm10YWJsZSIsIm10ZCIsIm10ZXh0IiwibXRyIiwibXVuZGVyIiwibXVuZGVyb3ZlciIsIm1wcmVzY3JpcHRzIl0pLFJUZT11ZyhbIm1hY3Rpb24iLCJtYWxpZ25ncm91cCIsIm1hbGlnbm1hcmsiLCJtbG9uZ2RpdiIsIm1zY2FycmllcyIsIm1zY2FycnkiLCJtc2dyb3VwIiwibXN0YWNrIiwibXNsaW5lIiwibXNyb3ciLCJzZW1hbnRpY3MiLCJhbm5vdGF0aW9uIiwiYW5ub3RhdGlvbi14bWwiLCJtcHJlc2NyaXB0cyIsIm5vbmUiXSksSER0PXVnKFsiI3RleHQiXSksVkR0PXVnKFsiYWNjZXB0IiwiYWN0aW9uIiwiYWxpZ24iLCJhbHQiLCJhdXRvY2FwaXRhbGl6ZSIsImF1dG9jb21wbGV0ZSIsImF1dG9waWN0dXJlaW5waWN0dXJlIiwiYXV0b3BsYXkiLCJiYWNrZ3JvdW5kIiwiYmdjb2xvciIsImJvcmRlciIsImNhcHR1cmUiLCJjZWxscGFkZGluZyIsImNlbGxzcGFjaW5nIiwiY2hlY2tlZCIsImNpdGUiLCJjbGFzcyIsImNsZWFyIiwiY29sb3IiLCJjb2xzIiwiY29sc3BhbiIsImNvbnRyb2xzIiwiY29udHJvbHNsaXN0IiwiY29vcmRzIiwiY3Jvc3NvcmlnaW4iLCJkYXRldGltZSIsImRlY29kaW5nIiwiZGVmYXVsdCIsImRpciIsImRpc2FibGVkIiwiZGlzYWJsZXBpY3R1cmVpbnBpY3R1cmUiLCJkaXNhYmxlcmVtb3RlcGxheWJhY2siLCJkb3dubG9hZCIsImRyYWdnYWJsZSIsImVuY3R5cGUiLCJlbnRlcmtleWhpbnQiLCJmYWNlIiwiZm9yIiwiaGVhZGVycyIsImhlaWdodCIsImhpZGRlbiIsImhpZ2giLCJocmVmIiwiaHJlZmxhbmciLCJpZCIsImlucHV0bW9kZSIsImludGVncml0eSIsImlzbWFwIiwia2luZCIsImxhYmVsIiwibGFuZyIsImxpc3QiLCJsb2FkaW5nIiwibG9vcCIsImxvdyIsIm1heCIsIm1heGxlbmd0aCIsIm1lZGlhIiwibWV0aG9kIiwibWluIiwibWlubGVuZ3RoIiwibXVsdGlwbGUiLCJtdXRlZCIsIm5hbWUiLCJub25jZSIsIm5vc2hhZGUiLCJub3ZhbGlkYXRlIiwibm93cmFwIiwib3BlbiIsIm9wdGltdW0iLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJwbGF5c2lubGluZSIsInBvc3RlciIsInByZWxvYWQiLCJwdWJkYXRlIiwicmFkaW9ncm91cCIsInJlYWRvbmx5IiwicmVsIiwicmVxdWlyZWQiLCJyZXYiLCJyZXZlcnNlZCIsInJvbGUiLCJyb3dzIiwicm93c3BhbiIsInNwZWxsY2hlY2siLCJzY29wZSIsInNlbGVjdGVkIiwic2hhcGUiLCJzaXplIiwic2l6ZXMiLCJzcGFuIiwic3JjbGFuZyIsInN0YXJ0Iiwic3JjIiwic3Jjc2V0Iiwic3RlcCIsInN0eWxlIiwic3VtbWFyeSIsInRhYmluZGV4IiwidGl0bGUiLCJ0cmFuc2xhdGUiLCJ0eXBlIiwidXNlbWFwIiwidmFsaWduIiwidmFsdWUiLCJ3aWR0aCIsInhtbG5zIiwic2xvdCJdKSxZMXQ9dWcoWyJhY2NlbnQtaGVpZ2h0IiwiYWNjdW11bGF0ZSIsImFkZGl0aXZlIiwiYWxpZ25tZW50LWJhc2VsaW5lIiwiYXNjZW50IiwiYXR0cmlidXRlbmFtZSIsImF0dHJpYnV0ZXR5cGUiLCJhemltdXRoIiwiYmFzZWZyZXF1ZW5jeSIsImJhc2VsaW5lLXNoaWZ0IiwiYmVnaW4iLCJiaWFzIiwiYnkiLCJjbGFzcyIsImNsaXAiLCJjbGlwcGF0aHVuaXRzIiwiY2xpcC1wYXRoIiwiY2xpcC1ydWxlIiwiY29sb3IiLCJjb2xvci1pbnRlcnBvbGF0aW9uIiwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIiwiY29sb3ItcHJvZmlsZSIsImNvbG9yLXJlbmRlcmluZyIsImN4IiwiY3kiLCJkIiwiZHgiLCJkeSIsImRpZmZ1c2Vjb25zdGFudCIsImRpcmVjdGlvbiIsImRpc3BsYXkiLCJkaXZpc29yIiwiZHVyIiwiZWRnZW1vZGUiLCJlbGV2YXRpb24iLCJlbmQiLCJmaWxsIiwiZmlsbC1vcGFjaXR5IiwiZmlsbC1ydWxlIiwiZmlsdGVyIiwiZmlsdGVydW5pdHMiLCJmbG9vZC1jb2xvciIsImZsb29kLW9wYWNpdHkiLCJmb250LWZhbWlseSIsImZvbnQtc2l6ZSIsImZvbnQtc2l6ZS1hZGp1c3QiLCJmb250LXN0cmV0Y2giLCJmb250LXN0eWxlIiwiZm9udC12YXJpYW50IiwiZm9udC13ZWlnaHQiLCJmeCIsImZ5IiwiZzEiLCJnMiIsImdseXBoLW5hbWUiLCJnbHlwaHJlZiIsImdyYWRpZW50dW5pdHMiLCJncmFkaWVudHRyYW5zZm9ybSIsImhlaWdodCIsImhyZWYiLCJpZCIsImltYWdlLXJlbmRlcmluZyIsImluIiwiaW4yIiwiayIsImsxIiwiazIiLCJrMyIsIms0Iiwia2VybmluZyIsImtleXBvaW50cyIsImtleXNwbGluZXMiLCJrZXl0aW1lcyIsImxhbmciLCJsZW5ndGhhZGp1c3QiLCJsZXR0ZXItc3BhY2luZyIsImtlcm5lbG1hdHJpeCIsImtlcm5lbHVuaXRsZW5ndGgiLCJsaWdodGluZy1jb2xvciIsImxvY2FsIiwibWFya2VyLWVuZCIsIm1hcmtlci1taWQiLCJtYXJrZXItc3RhcnQiLCJtYXJrZXJoZWlnaHQiLCJtYXJrZXJ1bml0cyIsIm1hcmtlcndpZHRoIiwibWFza2NvbnRlbnR1bml0cyIsIm1hc2t1bml0cyIsIm1heCIsIm1hc2siLCJtZWRpYSIsIm1ldGhvZCIsIm1vZGUiLCJtaW4iLCJuYW1lIiwibnVtb2N0YXZlcyIsIm9mZnNldCIsIm9wZXJhdG9yIiwib3BhY2l0eSIsIm9yZGVyIiwib3JpZW50Iiwib3JpZW50YXRpb24iLCJvcmlnaW4iLCJvdmVyZmxvdyIsInBhaW50LW9yZGVyIiwicGF0aCIsInBhdGhsZW5ndGgiLCJwYXR0ZXJuY29udGVudHVuaXRzIiwicGF0dGVybnRyYW5zZm9ybSIsInBhdHRlcm51bml0cyIsInBvaW50cyIsInByZXNlcnZlYWxwaGEiLCJwcmVzZXJ2ZWFzcGVjdHJhdGlvIiwicHJpbWl0aXZldW5pdHMiLCJyIiwicngiLCJyeSIsInJhZGl1cyIsInJlZngiLCJyZWZ5IiwicmVwZWF0Y291bnQiLCJyZXBlYXRkdXIiLCJyZXN0YXJ0IiwicmVzdWx0Iiwicm90YXRlIiwic2NhbGUiLCJzZWVkIiwic2hhcGUtcmVuZGVyaW5nIiwic3BlY3VsYXJjb25zdGFudCIsInNwZWN1bGFyZXhwb25lbnQiLCJzcHJlYWRtZXRob2QiLCJzdGFydG9mZnNldCIsInN0ZGRldmlhdGlvbiIsInN0aXRjaHRpbGVzIiwic3RvcC1jb2xvciIsInN0b3Atb3BhY2l0eSIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1saW5lY2FwIiwic3Ryb2tlLWxpbmVqb2luIiwic3Ryb2tlLW1pdGVybGltaXQiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCIsInN0eWxlIiwic3VyZmFjZXNjYWxlIiwic3lzdGVtbGFuZ3VhZ2UiLCJ0YWJpbmRleCIsInRhcmdldHgiLCJ0YXJnZXR5IiwidHJhbnNmb3JtIiwidHJhbnNmb3JtLW9yaWdpbiIsInRleHQtYW5jaG9yIiwidGV4dC1kZWNvcmF0aW9uIiwidGV4dC1yZW5kZXJpbmciLCJ0ZXh0bGVuZ3RoIiwidHlwZSIsInUxIiwidTIiLCJ1bmljb2RlIiwidmFsdWVzIiwidmlld2JveCIsInZpc2liaWxpdHkiLCJ2ZXJzaW9uIiwidmVydC1hZHYteSIsInZlcnQtb3JpZ2luLXgiLCJ2ZXJ0LW9yaWdpbi15Iiwid2lkdGgiLCJ3b3JkLXNwYWNpbmciLCJ3cmFwIiwid3JpdGluZy1tb2RlIiwieGNoYW5uZWxzZWxlY3RvciIsInljaGFubmVsc2VsZWN0b3IiLCJ4IiwieDEiLCJ4MiIsInhtbG5zIiwieSIsInkxIiwieTIiLCJ6Iiwiem9vbWFuZHBhbiJdKSxHRHQ9dWcoWyJhY2NlbnQiLCJhY2NlbnR1bmRlciIsImFsaWduIiwiYmV2ZWxsZWQiLCJjbG9zZSIsImNvbHVtbnNhbGlnbiIsImNvbHVtbmxpbmVzIiwiY29sdW1uc3BhbiIsImRlbm9tYWxpZ24iLCJkZXB0aCIsImRpciIsImRpc3BsYXkiLCJkaXNwbGF5c3R5bGUiLCJlbmNvZGluZyIsImZlbmNlIiwiZnJhbWUiLCJoZWlnaHQiLCJocmVmIiwiaWQiLCJsYXJnZW9wIiwibGVuZ3RoIiwibGluZXRoaWNrbmVzcyIsImxzcGFjZSIsImxxdW90ZSIsIm1hdGhiYWNrZ3JvdW5kIiwibWF0aGNvbG9yIiwibWF0aHNpemUiLCJtYXRodmFyaWFudCIsIm1heHNpemUiLCJtaW5zaXplIiwibW92YWJsZWxpbWl0cyIsIm5vdGF0aW9uIiwibnVtYWxpZ24iLCJvcGVuIiwicm93YWxpZ24iLCJyb3dsaW5lcyIsInJvd3NwYWNpbmciLCJyb3dzcGFuIiwicnNwYWNlIiwicnF1b3RlIiwic2NyaXB0bGV2ZWwiLCJzY3JpcHRtaW5zaXplIiwic2NyaXB0c2l6ZW11bHRpcGxpZXIiLCJzZWxlY3Rpb24iLCJzZXBhcmF0b3IiLCJzZXBhcmF0b3JzIiwic3RyZXRjaHkiLCJzdWJzY3JpcHRzaGlmdCIsInN1cHNjcmlwdHNoaWZ0Iiwic3ltbWV0cmljIiwidm9mZnNldCIsIndpZHRoIiwieG1sbnMiXSksdVc9dWcoWyJ4bGluazpocmVmIiwieG1sOmlkIiwieGxpbms6dGl0bGUiLCJ4bWw6c3BhY2UiLCJ4bWxuczp4bGluayJdKSxqVGU9SnYoL1x7XHtbXHdcV10qfFtcd1xXXSpcfVx9L2dtKSwkVGU9SnYoLzwlW1x3XFddKnxbXHdcV10qJT4vZ20pLHpUZT1KdigvXCR7W1x3XFddKn0vZ20pLHFUZT1KdigvXmRhdGEtW1wtXHcuXHUwMEI3LVx1RkZGRl0vKSxIVGU9SnYoL15hcmlhLVtcLVx3XSskLyksVUR0PUp2KC9eKD86KD86KD86ZnxodCl0cHM/fG1haWx0b3x0ZWx8Y2FsbHRvfHNtc3xjaWR8eG1wcCk6fFteYS16XXxbYS16Ky5cLV0rKD86W15hLXorLlwtOl18JCkpL2kpLFZUZT1KdigvXig/Olx3K3NjcmlwdHxkYXRhKTovaSksR1RlPUp2KC9bXHUwMDAwLVx1MDAyMFx1MDBBMFx1MTY4MFx1MTgwRVx1MjAwMC1cdTIwMjlcdTIwNUZcdTMwMDBdL2cpLFdEdD1KdigvXmh0bWwkL2kpO3ZhciBZRHQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsTVVTVEFDSEVfRVhQUjpqVGUsRVJCX0VYUFI6JFRlLFRNUExJVF9FWFBSOnpUZSxEQVRBX0FUVFI6cVRlLEFSSUFfQVRUUjpIVGUsSVNfQUxMT1dFRF9VUkk6VUR0LElTX1NDUklQVF9PUl9EQVRBOlZUZSxBVFRSX1dISVRFU1BBQ0U6R1RlLERPQ1RZUEVfTkFNRTpXRHR9KTtjb25zdCBVVGU9KCk9PnR5cGVvZiB3aW5kb3c+InUiP251bGw6d2luZG93LFdUZT1mdW5jdGlvbihhLGYpe2lmKHR5cGVvZiBhIT0ib2JqZWN0Inx8dHlwZW9mIGEuY3JlYXRlUG9saWN5IT0iZnVuY3Rpb24iKXJldHVybiBudWxsO2xldCBwPW51bGw7Y29uc3Qgdz0iZGF0YS10dC1wb2xpY3ktc3VmZml4IjtmJiZmLmhhc0F0dHJpYnV0ZSh3KSYmKHA9Zi5nZXRBdHRyaWJ1dGUodykpO2NvbnN0IG09ImRvbXB1cmlmeSIrKHA/IiMiK3A6IiIpO3RyeXtyZXR1cm4gYS5jcmVhdGVQb2xpY3kobSx7Y3JlYXRlSFRNTChiKXtyZXR1cm4gYn0sY3JlYXRlU2NyaXB0VVJMKGIpe3JldHVybiBifX0pfWNhdGNoe3JldHVybiBjb25zb2xlLndhcm4oIlRydXN0ZWRUeXBlcyBwb2xpY3kgIittKyIgY291bGQgbm90IGJlIGNyZWF0ZWQuIiksbnVsbH19O2Z1bmN0aW9uIEtEdCgpe2xldCBpPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpVVGUoKTtjb25zdCBhPUJpPT5LRHQoQmkpO2lmKGEudmVyc2lvbj0iMy4wLjUiLGEucmVtb3ZlZD1bXSwhaXx8IWkuZG9jdW1lbnR8fGkuZG9jdW1lbnQubm9kZVR5cGUhPT05KXJldHVybiBhLmlzU3VwcG9ydGVkPSExLGE7Y29uc3QgZj1pLmRvY3VtZW50LHA9Zi5jdXJyZW50U2NyaXB0O2xldHtkb2N1bWVudDp3fT1pO2NvbnN0e0RvY3VtZW50RnJhZ21lbnQ6bSxIVE1MVGVtcGxhdGVFbGVtZW50OmIsTm9kZTpFLEVsZW1lbnQ6XyxOb2RlRmlsdGVyOkEsTmFtZWROb2RlTWFwOkk9aS5OYW1lZE5vZGVNYXB8fGkuTW96TmFtZWRBdHRyTWFwLEhUTUxGb3JtRWxlbWVudDpCLERPTVBhcnNlcjpOLHRydXN0ZWRUeXBlczpSfT1pLHo9Xy5wcm90b3R5cGUsVz1jVyh6LCJjbG9uZU5vZGUiKSxldD1jVyh6LCJuZXh0U2libGluZyIpLHN0PWNXKHosImNoaWxkTm9kZXMiKSxhdD1jVyh6LCJwYXJlbnROb2RlIik7aWYodHlwZW9mIGI9PSJmdW5jdGlvbiIpe2NvbnN0IEJpPXcuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtCaS5jb250ZW50JiZCaS5jb250ZW50Lm93bmVyRG9jdW1lbnQmJih3PUJpLmNvbnRlbnQub3duZXJEb2N1bWVudCl9bGV0IGJ0LG10PSIiO2NvbnN0e2ltcGxlbWVudGF0aW9uOnl0LGNyZWF0ZU5vZGVJdGVyYXRvcjpmdCxjcmVhdGVEb2N1bWVudEZyYWdtZW50OnV0LGdldEVsZW1lbnRzQnlUYWdOYW1lOnZ0fT13LHtpbXBvcnROb2RlOlh9PWY7bGV0IHB0PXt9O2EuaXNTdXBwb3J0ZWQ9dHlwZW9mIGpEdD09ImZ1bmN0aW9uIiYmdHlwZW9mIGF0PT0iZnVuY3Rpb24iJiZ5dCYmeXQuY3JlYXRlSFRNTERvY3VtZW50IT09dm9pZCAwO2NvbnN0e01VU1RBQ0hFX0VYUFI6VSxFUkJfRVhQUjpUdCxUTVBMSVRfRVhQUjpudCxEQVRBX0FUVFI6SXQsQVJJQV9BVFRSOk90LElTX1NDUklQVF9PUl9EQVRBOkJ0LEFUVFJfV0hJVEVTUEFDRTpFdH09WUR0O2xldHtJU19BTExPV0VEX1VSSTpafT1ZRHQsQ3Q9bnVsbDtjb25zdCB4dD1tbyh7fSxbLi4ucUR0LC4uLkcxdCwuLi5VMXQsLi4uVzF0LC4uLkhEdF0pO2xldCBIdD1udWxsO2NvbnN0IExlPW1vKHt9LFsuLi5WRHQsLi4uWTF0LC4uLkdEdCwuLi51V10pO2xldCBGdD1PYmplY3Quc2VhbChPYmplY3QuY3JlYXRlKG51bGwse3RhZ05hbWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYXR0cmlidXRlTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOiExfX0pKSxnbj1udWxsLFNlPW51bGwsbWU9ITAsVmU9ITAsWWU9ITEsY2U9ITAsa2U9ITEsenQ9ITEscmU9ITEsc2U9ITEsUGU9ITEsdGU9ITEsTWU9ITEsZGU9ITAsb249ITE7Y29uc3Qgbmk9InVzZXItY29udGVudC0iO2xldCBLcz0hMCx3cz0hMSxmbz17fSxYaT1udWxsO2NvbnN0IEVyPW1vKHt9LFsiYW5ub3RhdGlvbi14bWwiLCJhdWRpbyIsImNvbGdyb3VwIiwiZGVzYyIsImZvcmVpZ25vYmplY3QiLCJoZWFkIiwiaWZyYW1lIiwibWF0aCIsIm1pIiwibW4iLCJtbyIsIm1zIiwibXRleHQiLCJub2VtYmVkIiwibm9mcmFtZXMiLCJub3NjcmlwdCIsInBsYWludGV4dCIsInNjcmlwdCIsInN0eWxlIiwic3ZnIiwidGVtcGxhdGUiLCJ0aGVhZCIsInRpdGxlIiwidmlkZW8iLCJ4bXAiXSk7bGV0IFhuPW51bGw7Y29uc3QgZGk9bW8oe30sWyJhdWRpbyIsInZpZGVvIiwiaW1nIiwic291cmNlIiwiaW1hZ2UiLCJ0cmFjayJdKTtsZXQgRWU9bnVsbDtjb25zdCBLbj1tbyh7fSxbImFsdCIsImNsYXNzIiwiZm9yIiwiaWQiLCJsYWJlbCIsIm5hbWUiLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJyb2xlIiwic3VtbWFyeSIsInRpdGxlIiwidmFsdWUiLCJzdHlsZSIsInhtbG5zIl0pLEhlPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIixUaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHBuPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjtsZXQgRXM9cG4scWE9ITEsTWE9bnVsbDtjb25zdCBHcz1tbyh7fSxbSGUsVGkscG5dLFYxdCk7bGV0IFBvO2NvbnN0IHZzPVsiYXBwbGljYXRpb24veGh0bWwreG1sIiwidGV4dC9odG1sIl0scnU9InRleHQvaHRtbCI7bGV0IHpzLER1PW51bGw7Y29uc3QgcG09dy5jcmVhdGVFbGVtZW50KCJmb3JtIiksdXc9ZnVuY3Rpb24oY24pe3JldHVybiBjbiBpbnN0YW5jZW9mIFJlZ0V4cHx8Y24gaW5zdGFuY2VvZiBGdW5jdGlvbn0sV3U9ZnVuY3Rpb24oY24pe2lmKCEoRHUmJkR1PT09Y24pKXtpZigoIWNufHx0eXBlb2YgY24hPSJvYmplY3QiKSYmKGNuPXt9KSxjbj1QQShjbiksUG89dnMuaW5kZXhPZihjbi5QQVJTRVJfTUVESUFfVFlQRSk9PT0tMT9Qbz1ydTpQbz1jbi5QQVJTRVJfTUVESUFfVFlQRSx6cz1Qbz09PSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiP1YxdDpvVyxDdD0iQUxMT1dFRF9UQUdTImluIGNuP21vKHt9LGNuLkFMTE9XRURfVEFHUyx6cyk6eHQsSHQ9IkFMTE9XRURfQVRUUiJpbiBjbj9tbyh7fSxjbi5BTExPV0VEX0FUVFIsenMpOkxlLE1hPSJBTExPV0VEX05BTUVTUEFDRVMiaW4gY24/bW8oe30sY24uQUxMT1dFRF9OQU1FU1BBQ0VTLFYxdCk6R3MsRWU9IkFERF9VUklfU0FGRV9BVFRSImluIGNuP21vKFBBKEtuKSxjbi5BRERfVVJJX1NBRkVfQVRUUix6cyk6S24sWG49IkFERF9EQVRBX1VSSV9UQUdTImluIGNuP21vKFBBKGRpKSxjbi5BRERfREFUQV9VUklfVEFHUyx6cyk6ZGksWGk9IkZPUkJJRF9DT05URU5UUyJpbiBjbj9tbyh7fSxjbi5GT1JCSURfQ09OVEVOVFMsenMpOkVyLGduPSJGT1JCSURfVEFHUyJpbiBjbj9tbyh7fSxjbi5GT1JCSURfVEFHUyx6cyk6e30sU2U9IkZPUkJJRF9BVFRSImluIGNuP21vKHt9LGNuLkZPUkJJRF9BVFRSLHpzKTp7fSxmbz0iVVNFX1BST0ZJTEVTImluIGNuP2NuLlVTRV9QUk9GSUxFUzohMSxtZT1jbi5BTExPV19BUklBX0FUVFIhPT0hMSxWZT1jbi5BTExPV19EQVRBX0FUVFIhPT0hMSxZZT1jbi5BTExPV19VTktOT1dOX1BST1RPQ09MU3x8ITEsY2U9Y24uQUxMT1dfU0VMRl9DTE9TRV9JTl9BVFRSIT09ITEsa2U9Y24uU0FGRV9GT1JfVEVNUExBVEVTfHwhMSx6dD1jbi5XSE9MRV9ET0NVTUVOVHx8ITEsUGU9Y24uUkVUVVJOX0RPTXx8ITEsdGU9Y24uUkVUVVJOX0RPTV9GUkFHTUVOVHx8ITEsTWU9Y24uUkVUVVJOX1RSVVNURURfVFlQRXx8ITEsc2U9Y24uRk9SQ0VfQk9EWXx8ITEsZGU9Y24uU0FOSVRJWkVfRE9NIT09ITEsb249Y24uU0FOSVRJWkVfTkFNRURfUFJPUFN8fCExLEtzPWNuLktFRVBfQ09OVEVOVCE9PSExLHdzPWNuLklOX1BMQUNFfHwhMSxaPWNuLkFMTE9XRURfVVJJX1JFR0VYUHx8VUR0LEVzPWNuLk5BTUVTUEFDRXx8cG4sRnQ9Y24uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkd8fHt9LGNuLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZ1dyhjbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spJiYoRnQudGFnTmFtZUNoZWNrPWNuLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayksY24uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJnV3KGNuLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaykmJihGdC5hdHRyaWJ1dGVOYW1lQ2hlY2s9Y24uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKSxjbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmdHlwZW9mIGNuLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cz09ImJvb2xlYW4iJiYoRnQuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzPWNuLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyksa2UmJihWZT0hMSksdGUmJihQZT0hMCksZm8mJihDdD1tbyh7fSxbLi4uSER0XSksSHQ9W10sZm8uaHRtbD09PSEwJiYobW8oQ3QscUR0KSxtbyhIdCxWRHQpKSxmby5zdmc9PT0hMCYmKG1vKEN0LEcxdCksbW8oSHQsWTF0KSxtbyhIdCx1VykpLGZvLnN2Z0ZpbHRlcnM9PT0hMCYmKG1vKEN0LFUxdCksbW8oSHQsWTF0KSxtbyhIdCx1VykpLGZvLm1hdGhNbD09PSEwJiYobW8oQ3QsVzF0KSxtbyhIdCxHRHQpLG1vKEh0LHVXKSkpLGNuLkFERF9UQUdTJiYoQ3Q9PT14dCYmKEN0PVBBKEN0KSksbW8oQ3QsY24uQUREX1RBR1MsenMpKSxjbi5BRERfQVRUUiYmKEh0PT09TGUmJihIdD1QQShIdCkpLG1vKEh0LGNuLkFERF9BVFRSLHpzKSksY24uQUREX1VSSV9TQUZFX0FUVFImJm1vKEVlLGNuLkFERF9VUklfU0FGRV9BVFRSLHpzKSxjbi5GT1JCSURfQ09OVEVOVFMmJihYaT09PUVyJiYoWGk9UEEoWGkpKSxtbyhYaSxjbi5GT1JCSURfQ09OVEVOVFMsenMpKSxLcyYmKEN0WyIjdGV4dCJdPSEwKSx6dCYmbW8oQ3QsWyJodG1sIiwiaGVhZCIsImJvZHkiXSksQ3QudGFibGUmJihtbyhDdCxbInRib2R5Il0pLGRlbGV0ZSBnbi50Ym9keSksY24uVFJVU1RFRF9UWVBFU19QT0xJQ1kpe2lmKHR5cGVvZiBjbi5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVIVE1MIT0iZnVuY3Rpb24iKXRocm93IFVQKCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlSFRNTCIgaG9vay4nKTtpZih0eXBlb2YgY24uVFJVU1RFRF9UWVBFU19QT0xJQ1kuY3JlYXRlU2NyaXB0VVJMIT0iZnVuY3Rpb24iKXRocm93IFVQKCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlU2NyaXB0VVJMIiBob29rLicpO2J0PWNuLlRSVVNURURfVFlQRVNfUE9MSUNZLG10PWJ0LmNyZWF0ZUhUTUwoIiIpfWVsc2UgYnQ9PT12b2lkIDAmJihidD1XVGUoUixwKSksYnQhPT1udWxsJiZ0eXBlb2YgbXQ9PSJzdHJpbmciJiYobXQ9YnQuY3JlYXRlSFRNTCgiIikpO3VnJiZ1ZyhjbiksRHU9Y259fSx0aD1tbyh7fSxbIm1pIiwibW8iLCJtbiIsIm1zIiwibXRleHQiXSksRmE9bW8oe30sWyJmb3JlaWdub2JqZWN0IiwiZGVzYyIsInRpdGxlIiwiYW5ub3RhdGlvbi14bWwiXSksTWw9bW8oe30sWyJ0aXRsZSIsInN0eWxlIiwiZm9udCIsImEiLCJzY3JpcHQiXSksaGE9bW8oe30sRzF0KTttbyhoYSxVMXQpLG1vKGhhLEJUZSk7Y29uc3QgYmM9bW8oe30sVzF0KTttbyhiYyxSVGUpO2NvbnN0IENjPWZ1bmN0aW9uKGNuKXtsZXQga3I9YXQoY24pOygha3J8fCFrci50YWdOYW1lKSYmKGtyPXtuYW1lc3BhY2VVUkk6RXMsdGFnTmFtZToidGVtcGxhdGUifSk7Y29uc3QgRWk9b1coY24udGFnTmFtZSksSm89b1coa3IudGFnTmFtZSk7cmV0dXJuIE1hW2NuLm5hbWVzcGFjZVVSSV0/Y24ubmFtZXNwYWNlVVJJPT09VGk/a3IubmFtZXNwYWNlVVJJPT09cG4/RWk9PT0ic3ZnIjprci5uYW1lc3BhY2VVUkk9PT1IZT9FaT09PSJzdmciJiYoSm89PT0iYW5ub3RhdGlvbi14bWwifHx0aFtKb10pOiEhaGFbRWldOmNuLm5hbWVzcGFjZVVSST09PUhlP2tyLm5hbWVzcGFjZVVSST09PXBuP0VpPT09Im1hdGgiOmtyLm5hbWVzcGFjZVVSST09PVRpP0VpPT09Im1hdGgiJiZGYVtKb106ISFiY1tFaV06Y24ubmFtZXNwYWNlVVJJPT09cG4/a3IubmFtZXNwYWNlVVJJPT09VGkmJiFGYVtKb118fGtyLm5hbWVzcGFjZVVSST09PUhlJiYhdGhbSm9dPyExOiFiY1tFaV0mJihNbFtFaV18fCFoYVtFaV0pOiEhKFBvPT09ImFwcGxpY2F0aW9uL3hodG1sK3htbCImJk1hW2NuLm5hbWVzcGFjZVVSSV0pOiExfSxwYT1mdW5jdGlvbihjbil7R1AoYS5yZW1vdmVkLHtlbGVtZW50OmNufSk7dHJ5e2NuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY24pfWNhdGNoe2NuLnJlbW92ZSgpfX0sRGE9ZnVuY3Rpb24oY24sa3Ipe3RyeXtHUChhLnJlbW92ZWQse2F0dHJpYnV0ZTprci5nZXRBdHRyaWJ1dGVOb2RlKGNuKSxmcm9tOmtyfSl9Y2F0Y2h7R1AoYS5yZW1vdmVkLHthdHRyaWJ1dGU6bnVsbCxmcm9tOmtyfSl9aWYoa3IucmVtb3ZlQXR0cmlidXRlKGNuKSxjbj09PSJpcyImJiFIdFtjbl0paWYoUGV8fHRlKXRyeXtwYShrcil9Y2F0Y2h7fWVsc2UgdHJ5e2tyLnNldEF0dHJpYnV0ZShjbiwiIil9Y2F0Y2h7fX0sSGE9ZnVuY3Rpb24oY24pe2xldCBrcixFaTtpZihzZSljbj0iPHJlbW92ZT48L3JlbW92ZT4iK2NuO2Vsc2V7Y29uc3QgcmY9T1RlKGNuLC9eW1xyXG5cdCBdKy8pO0VpPXJmJiZyZlswXX1Qbz09PSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiJiZFcz09PXBuJiYoY249JzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48L2hlYWQ+PGJvZHk+JytjbisiPC9ib2R5PjwvaHRtbD4iKTtjb25zdCBKbz1idD9idC5jcmVhdGVIVE1MKGNuKTpjbjtpZihFcz09PXBuKXRyeXtrcj1uZXcgTigpLnBhcnNlRnJvbVN0cmluZyhKbyxQbyl9Y2F0Y2h7fWlmKCFrcnx8IWtyLmRvY3VtZW50RWxlbWVudCl7a3I9eXQuY3JlYXRlRG9jdW1lbnQoRXMsInRlbXBsYXRlIixudWxsKTt0cnl7a3IuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTD1xYT9tdDpKb31jYXRjaHt9fWNvbnN0IHdjPWtyLmJvZHl8fGtyLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gY24mJkVpJiZ3Yy5pbnNlcnRCZWZvcmUody5jcmVhdGVUZXh0Tm9kZShFaSksd2MuY2hpbGROb2Rlc1swXXx8bnVsbCksRXM9PT1wbj92dC5jYWxsKGtyLHp0PyJodG1sIjoiYm9keSIpWzBdOnp0P2tyLmRvY3VtZW50RWxlbWVudDp3Y30sRGw9ZnVuY3Rpb24oY24pe3JldHVybiBmdC5jYWxsKGNuLm93bmVyRG9jdW1lbnR8fGNuLGNuLEEuU0hPV19FTEVNRU5UfEEuU0hPV19DT01NRU5UfEEuU0hPV19URVhULG51bGwsITEpfSxfYz1mdW5jdGlvbihjbil7cmV0dXJuIGNuIGluc3RhbmNlb2YgQiYmKHR5cGVvZiBjbi5ub2RlTmFtZSE9InN0cmluZyJ8fHR5cGVvZiBjbi50ZXh0Q29udGVudCE9InN0cmluZyJ8fHR5cGVvZiBjbi5yZW1vdmVDaGlsZCE9ImZ1bmN0aW9uInx8IShjbi5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgSSl8fHR5cGVvZiBjbi5yZW1vdmVBdHRyaWJ1dGUhPSJmdW5jdGlvbiJ8fHR5cGVvZiBjbi5zZXRBdHRyaWJ1dGUhPSJmdW5jdGlvbiJ8fHR5cGVvZiBjbi5uYW1lc3BhY2VVUkkhPSJzdHJpbmcifHx0eXBlb2YgY24uaW5zZXJ0QmVmb3JlIT0iZnVuY3Rpb24ifHx0eXBlb2YgY24uaGFzQ2hpbGROb2RlcyE9ImZ1bmN0aW9uIil9LGx3PWZ1bmN0aW9uKGNuKXtyZXR1cm4gdHlwZW9mIEU9PSJvYmplY3QiP2NuIGluc3RhbmNlb2YgRTpjbiYmdHlwZW9mIGNuPT0ib2JqZWN0IiYmdHlwZW9mIGNuLm5vZGVUeXBlPT0ibnVtYmVyIiYmdHlwZW9mIGNuLm5vZGVOYW1lPT0ic3RyaW5nIn0sZWg9ZnVuY3Rpb24oY24sa3IsRWkpe3B0W2NuXSYmSVRlKHB0W2NuXSxKbz0+e0pvLmNhbGwoYSxrcixFaSxEdSl9KX0sZWQ9ZnVuY3Rpb24oY24pe2xldCBrcjtpZihlaCgiYmVmb3JlU2FuaXRpemVFbGVtZW50cyIsY24sbnVsbCksX2MoY24pKXJldHVybiBwYShjbiksITA7Y29uc3QgRWk9enMoY24ubm9kZU5hbWUpO2lmKGVoKCJ1cG9uU2FuaXRpemVFbGVtZW50Iixjbix7dGFnTmFtZTpFaSxhbGxvd2VkVGFnczpDdH0pLGNuLmhhc0NoaWxkTm9kZXMoKSYmIWx3KGNuLmZpcnN0RWxlbWVudENoaWxkKSYmKCFsdyhjbi5jb250ZW50KXx8IWx3KGNuLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpKSYmUGIoLzxbL1x3XS9nLGNuLmlubmVySFRNTCkmJlBiKC88Wy9cd10vZyxjbi50ZXh0Q29udGVudCkpcmV0dXJuIHBhKGNuKSwhMDtpZighQ3RbRWldfHxnbltFaV0pe2lmKCFnbltFaV0mJm5kKEVpKSYmKEZ0LnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmUGIoRnQudGFnTmFtZUNoZWNrLEVpKXx8RnQudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJkZ0LnRhZ05hbWVDaGVjayhFaSkpKXJldHVybiExO2lmKEtzJiYhWGlbRWldKXtjb25zdCBKbz1hdChjbil8fGNuLnBhcmVudE5vZGUsd2M9c3QoY24pfHxjbi5jaGlsZE5vZGVzO2lmKHdjJiZKbyl7Y29uc3QgcmY9d2MubGVuZ3RoO2ZvcihsZXQgT2M9cmYtMTtPYz49MDstLU9jKUpvLmluc2VydEJlZm9yZShXKHdjW09jXSwhMCksZXQoY24pKX19cmV0dXJuIHBhKGNuKSwhMH1yZXR1cm4gY24gaW5zdGFuY2VvZiBfJiYhQ2MoY24pfHwoRWk9PT0ibm9zY3JpcHQifHxFaT09PSJub2VtYmVkInx8RWk9PT0ibm9mcmFtZXMiKSYmUGIoLzxcL25vKHNjcmlwdHxlbWJlZHxmcmFtZXMpL2ksY24uaW5uZXJIVE1MKT8ocGEoY24pLCEwKTooa2UmJmNuLm5vZGVUeXBlPT09MyYmKGtyPWNuLnRleHRDb250ZW50LGtyPXRtKGtyLFUsIiAiKSxrcj10bShrcixUdCwiICIpLGtyPXRtKGtyLG50LCIgIiksY24udGV4dENvbnRlbnQhPT1rciYmKEdQKGEucmVtb3ZlZCx7ZWxlbWVudDpjbi5jbG9uZU5vZGUoKX0pLGNuLnRleHRDb250ZW50PWtyKSksZWgoImFmdGVyU2FuaXRpemVFbGVtZW50cyIsY24sbnVsbCksITEpfSxqZD1mdW5jdGlvbihjbixrcixFaSl7aWYoZGUmJihrcj09PSJpZCJ8fGtyPT09Im5hbWUiKSYmKEVpIGluIHd8fEVpIGluIHBtKSlyZXR1cm4hMTtpZighKFZlJiYhU2Vba3JdJiZQYihJdCxrcikpKXtpZighKG1lJiZQYihPdCxrcikpKXtpZighSHRba3JdfHxTZVtrcl0pe2lmKCEobmQoY24pJiYoRnQudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZQYihGdC50YWdOYW1lQ2hlY2ssY24pfHxGdC50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmRnQudGFnTmFtZUNoZWNrKGNuKSkmJihGdC5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJlBiKEZ0LmF0dHJpYnV0ZU5hbWVDaGVjayxrcil8fEZ0LmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZGdC5hdHRyaWJ1dGVOYW1lQ2hlY2soa3IpKXx8a3I9PT0iaXMiJiZGdC5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMmJihGdC50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJlBiKEZ0LnRhZ05hbWVDaGVjayxFaSl8fEZ0LnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZGdC50YWdOYW1lQ2hlY2soRWkpKSkpcmV0dXJuITF9ZWxzZSBpZighRWVba3JdKXtpZighUGIoWix0bShFaSxFdCwiIikpKXtpZighKChrcj09PSJzcmMifHxrcj09PSJ4bGluazpocmVmInx8a3I9PT0iaHJlZiIpJiZjbiE9PSJzY3JpcHQiJiZQVGUoRWksImRhdGE6Iik9PT0wJiZYbltjbl0pKXtpZighKFllJiYhUGIoQnQsdG0oRWksRXQsIiIpKSkpe2lmKEVpKXJldHVybiExfX19fX19cmV0dXJuITB9LG5kPWZ1bmN0aW9uKGNuKXtyZXR1cm4gY24uaW5kZXhPZigiLSIpPjB9LCRkPWZ1bmN0aW9uKGNuKXtsZXQga3IsRWksSm8sd2M7ZWgoImJlZm9yZVNhbml0aXplQXR0cmlidXRlcyIsY24sbnVsbCk7Y29uc3R7YXR0cmlidXRlczpyZn09Y247aWYoIXJmKXJldHVybjtjb25zdCBPYz17YXR0ck5hbWU6IiIsYXR0clZhbHVlOiIiLGtlZXBBdHRyOiEwLGFsbG93ZWRBdHRyaWJ1dGVzOkh0fTtmb3Iod2M9cmYubGVuZ3RoO3djLS07KXtrcj1yZlt3Y107Y29uc3R7bmFtZTpzZixuYW1lc3BhY2VVUkk6YWZ9PWtyO2lmKEVpPXNmPT09InZhbHVlIj9rci52YWx1ZTpGVGUoa3IudmFsdWUpLEpvPXpzKHNmKSxPYy5hdHRyTmFtZT1KbyxPYy5hdHRyVmFsdWU9RWksT2Mua2VlcEF0dHI9ITAsT2MuZm9yY2VLZWVwQXR0cj12b2lkIDAsZWgoInVwb25TYW5pdGl6ZUF0dHJpYnV0ZSIsY24sT2MpLEVpPU9jLmF0dHJWYWx1ZSxPYy5mb3JjZUtlZXBBdHRyfHwoRGEoc2YsY24pLCFPYy5rZWVwQXR0cikpY29udGludWU7aWYoIWNlJiZQYigvXC8+L2ksRWkpKXtEYShzZixjbik7Y29udGludWV9a2UmJihFaT10bShFaSxVLCIgIiksRWk9dG0oRWksVHQsIiAiKSxFaT10bShFaSxudCwiICIpKTtjb25zdCBRaT16cyhjbi5ub2RlTmFtZSk7aWYoamQoUWksSm8sRWkpKXtpZihvbiYmKEpvPT09ImlkInx8Sm89PT0ibmFtZSIpJiYoRGEoc2YsY24pLEVpPW5pK0VpKSxidCYmdHlwZW9mIFI9PSJvYmplY3QiJiZ0eXBlb2YgUi5nZXRBdHRyaWJ1dGVUeXBlPT0iZnVuY3Rpb24iJiYhYWYpc3dpdGNoKFIuZ2V0QXR0cmlidXRlVHlwZShRaSxKbykpe2Nhc2UiVHJ1c3RlZEhUTUwiOntFaT1idC5jcmVhdGVIVE1MKEVpKTticmVha31jYXNlIlRydXN0ZWRTY3JpcHRVUkwiOntFaT1idC5jcmVhdGVTY3JpcHRVUkwoRWkpO2JyZWFrfX10cnl7YWY/Y24uc2V0QXR0cmlidXRlTlMoYWYsc2YsRWkpOmNuLnNldEF0dHJpYnV0ZShzZixFaSksekR0KGEucmVtb3ZlZCl9Y2F0Y2h7fX19ZWgoImFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzIixjbixudWxsKX0sQTA9ZnVuY3Rpb24gQmkoY24pe2xldCBrcjtjb25zdCBFaT1EbChjbik7Zm9yKGVoKCJiZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTSIsY24sbnVsbCk7a3I9RWkubmV4dE5vZGUoKTspZWgoInVwb25TYW5pdGl6ZVNoYWRvd05vZGUiLGtyLG51bGwpLCFlZChrcikmJihrci5jb250ZW50IGluc3RhbmNlb2YgbSYmQmkoa3IuY29udGVudCksJGQoa3IpKTtlaCgiYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTSIsY24sbnVsbCl9O3JldHVybiBhLnNhbml0aXplPWZ1bmN0aW9uKEJpKXtsZXQgY249YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LGtyLEVpLEpvLHdjO2lmKHFhPSFCaSxxYSYmKEJpPSI8IS0tPiIpLHR5cGVvZiBCaSE9InN0cmluZyImJiFsdyhCaSkpaWYodHlwZW9mIEJpLnRvU3RyaW5nPT0iZnVuY3Rpb24iKXtpZihCaT1CaS50b1N0cmluZygpLHR5cGVvZiBCaSE9InN0cmluZyIpdGhyb3cgVVAoImRpcnR5IGlzIG5vdCBhIHN0cmluZywgYWJvcnRpbmciKX1lbHNlIHRocm93IFVQKCJ0b1N0cmluZyBpcyBub3QgYSBmdW5jdGlvbiIpO2lmKCFhLmlzU3VwcG9ydGVkKXJldHVybiBCaTtpZihyZXx8V3UoY24pLGEucmVtb3ZlZD1bXSx0eXBlb2YgQmk9PSJzdHJpbmciJiYod3M9ITEpLHdzKXtpZihCaS5ub2RlTmFtZSl7Y29uc3Qgc2Y9enMoQmkubm9kZU5hbWUpO2lmKCFDdFtzZl18fGduW3NmXSl0aHJvdyBVUCgicm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZSIpfX1lbHNlIGlmKEJpIGluc3RhbmNlb2YgRSlrcj1IYSgiPCEtLS0tPiIpLEVpPWtyLm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZShCaSwhMCksRWkubm9kZVR5cGU9PT0xJiZFaS5ub2RlTmFtZT09PSJCT0RZInx8RWkubm9kZU5hbWU9PT0iSFRNTCI/a3I9RWk6a3IuYXBwZW5kQ2hpbGQoRWkpO2Vsc2V7aWYoIVBlJiYha2UmJiF6dCYmQmkuaW5kZXhPZigiPCIpPT09LTEpcmV0dXJuIGJ0JiZNZT9idC5jcmVhdGVIVE1MKEJpKTpCaTtpZihrcj1IYShCaSksIWtyKXJldHVybiBQZT9udWxsOk1lP210OiIifWtyJiZzZSYmcGEoa3IuZmlyc3RDaGlsZCk7Y29uc3QgcmY9RGwod3M/Qmk6a3IpO2Zvcig7Sm89cmYubmV4dE5vZGUoKTspZWQoSm8pfHwoSm8uY29udGVudCBpbnN0YW5jZW9mIG0mJkEwKEpvLmNvbnRlbnQpLCRkKEpvKSk7aWYod3MpcmV0dXJuIEJpO2lmKFBlKXtpZih0ZSlmb3Iod2M9dXQuY2FsbChrci5vd25lckRvY3VtZW50KTtrci5maXJzdENoaWxkOyl3Yy5hcHBlbmRDaGlsZChrci5maXJzdENoaWxkKTtlbHNlIHdjPWtyO3JldHVybihIdC5zaGFkb3dyb290fHxIdC5zaGFkb3dyb290bW9kZSkmJih3Yz1YLmNhbGwoZix3YywhMCkpLHdjfWxldCBPYz16dD9rci5vdXRlckhUTUw6a3IuaW5uZXJIVE1MO3JldHVybiB6dCYmQ3RbIiFkb2N0eXBlIl0mJmtyLm93bmVyRG9jdW1lbnQmJmtyLm93bmVyRG9jdW1lbnQuZG9jdHlwZSYma3Iub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUmJlBiKFdEdCxrci5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSkmJihPYz0iPCFET0NUWVBFICIra3Iub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUrYD4KYCtPYyksa2UmJihPYz10bShPYyxVLCIgIiksT2M9dG0oT2MsVHQsIiAiKSxPYz10bShPYyxudCwiICIpKSxidCYmTWU/YnQuY3JlYXRlSFRNTChPYyk6T2N9LGEuc2V0Q29uZmlnPWZ1bmN0aW9uKEJpKXtXdShCaSkscmU9ITB9LGEuY2xlYXJDb25maWc9ZnVuY3Rpb24oKXtEdT1udWxsLHJlPSExfSxhLmlzVmFsaWRBdHRyaWJ1dGU9ZnVuY3Rpb24oQmksY24sa3Ipe0R1fHxXdSh7fSk7Y29uc3QgRWk9enMoQmkpLEpvPXpzKGNuKTtyZXR1cm4gamQoRWksSm8sa3IpfSxhLmFkZEhvb2s9ZnVuY3Rpb24oQmksY24pe3R5cGVvZiBjbj09ImZ1bmN0aW9uIiYmKHB0W0JpXT1wdFtCaV18fFtdLEdQKHB0W0JpXSxjbikpfSxhLnJlbW92ZUhvb2s9ZnVuY3Rpb24oQmkpe2lmKHB0W0JpXSlyZXR1cm4gekR0KHB0W0JpXSl9LGEucmVtb3ZlSG9va3M9ZnVuY3Rpb24oQmkpe3B0W0JpXSYmKHB0W0JpXT1bXSl9LGEucmVtb3ZlQWxsSG9va3M9ZnVuY3Rpb24oKXtwdD17fX0sYX12YXIgbFc9S0R0KCk7Y29uc3QgV1A9LzxiclxzKlwvPz4vZ2ksWVRlPWk9Pmk/WkR0KGkpLnJlcGxhY2UoL1xcbi9nLCIjYnIjIikuc3BsaXQoIiNiciMiKTpbIiJdLFhEdD1pPT5sVy5zYW5pdGl6ZShpKSxRRHQ9KGksYSk9Pnt2YXIgZjtpZigoKGY9YS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpmLmh0bWxMYWJlbHMpIT09ITEpe2NvbnN0IHA9YS5zZWN1cml0eUxldmVsO3A9PT0iYW50aXNjcmlwdCJ8fHA9PT0ic3RyaWN0Ij9pPVhEdChpKTpwIT09Imxvb3NlIiYmKGk9WkR0KGkpLGk9aS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSxpPWkucmVwbGFjZSgvPS9nLCImZXF1YWxzOyIpLGk9WlRlKGkpKX1yZXR1cm4gaX0sUTE9KGksYSk9PmkmJihhLmRvbXB1cmlmeUNvbmZpZz9pPWxXLnNhbml0aXplKFFEdChpLGEpLGEuZG9tcHVyaWZ5Q29uZmlnKS50b1N0cmluZygpOmk9bFcuc2FuaXRpemUoUUR0KGksYSkse0ZPUkJJRF9UQUdTOlsic3R5bGUiXX0pLnRvU3RyaW5nKCksaSksS1RlPShpLGEpPT50eXBlb2YgaT09InN0cmluZyI/UTEoaSxhKTppLmZsYXQoKS5tYXAoZj0+UTEoZixhKSksWFRlPWk9PldQLnRlc3QoaSksUVRlPWk9Pmkuc3BsaXQoV1ApLFpUZT1pPT5pLnJlcGxhY2UoLyNiciMvZywiPGJyLz4iKSxaRHQ9aT0+aS5yZXBsYWNlKFdQLCIjYnIjIiksSlRlPWk9PntsZXQgYT0iIjtyZXR1cm4gaSYmKGE9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gsYT1hLnJlcGxhY2VBbGwoL1woL2csIlxcKCIpLGE9YS5yZXBsYWNlQWxsKC9cKS9nLCJcXCkiKSksYX0sbzE9aT0+IShpPT09ITF8fFsiZmFsc2UiLCJudWxsIiwiMCJdLmluY2x1ZGVzKFN0cmluZyhpKS50cmltKCkudG9Mb3dlckNhc2UoKSkpLHRDZT1mdW5jdGlvbiguLi5pKXtjb25zdCBhPWkuZmlsdGVyKGY9PiFpc05hTihmKSk7cmV0dXJuIE1hdGgubWF4KC4uLmEpfSxlQ2U9ZnVuY3Rpb24oLi4uaSl7Y29uc3QgYT1pLmZpbHRlcihmPT4haXNOYU4oZikpO3JldHVybiBNYXRoLm1pbiguLi5hKX0sWVA9ZnVuY3Rpb24oaSl7Y29uc3QgYT1pLnNwbGl0KC8oLCkvKSxmPVtdO2ZvcihsZXQgcD0wO3A8YS5sZW5ndGg7cCsrKXtsZXQgdz1hW3BdO2lmKHc9PT0iLCImJnA+MCYmcCsxPGEubGVuZ3RoKXtjb25zdCBtPWFbcC0xXSxiPWFbcCsxXTtuQ2UobSxiKSYmKHc9bSsiLCIrYixwKyssZi5wb3AoKSl9Zi5wdXNoKHJDZSh3KSl9cmV0dXJuIGYuam9pbigiIil9LEsxdD0oaSxhKT0+TWF0aC5tYXgoMCxpLnNwbGl0KGEpLmxlbmd0aC0xKSxuQ2U9KGksYSk9Pntjb25zdCBmPUsxdChpLCJ+IikscD1LMXQoYSwifiIpO3JldHVybiBmPT09MSYmcD09PTF9LHJDZT1pPT57Y29uc3QgYT1LMXQoaSwifiIpO2xldCBmPSExO2lmKGE8PTEpcmV0dXJuIGk7YSUyIT09MCYmaS5zdGFydHNXaXRoKCJ+IikmJihpPWkuc3Vic3RyaW5nKDEpLGY9ITApO2NvbnN0IHA9Wy4uLmldO2xldCB3PXAuaW5kZXhPZigifiIpLG09cC5sYXN0SW5kZXhPZigifiIpO2Zvcig7dyE9PS0xJiZtIT09LTEmJnchPT1tOylwW3ddPSI8IixwW21dPSI+Iix3PXAuaW5kZXhPZigifiIpLG09cC5sYXN0SW5kZXhPZigifiIpO3JldHVybiBmJiZwLnVuc2hpZnQoIn4iKSxwLmpvaW4oIiIpfSxLcj17Z2V0Um93czpZVGUsc2FuaXRpemVUZXh0OlExLHNhbml0aXplVGV4dE9yQXJyYXk6S1RlLGhhc0JyZWFrczpYVGUsc3BsaXRCcmVha3M6UVRlLGxpbmVCcmVha1JlZ2V4OldQLHJlbW92ZVNjcmlwdDpYRHQsZ2V0VXJsOkpUZSxldmFsdWF0ZTpvMSxnZXRNYXg6dENlLGdldE1pbjplQ2V9LGhXPXttaW46e3I6MCxnOjAsYjowLHM6MCxsOjAsYTowfSxtYXg6e3I6MjU1LGc6MjU1LGI6MjU1LGg6MzYwLHM6MTAwLGw6MTAwLGE6MX0sY2xhbXA6e3I6aT0+aT49MjU1PzI1NTppPDA/MDppLGc6aT0+aT49MjU1PzI1NTppPDA/MDppLGI6aT0+aT49MjU1PzI1NTppPDA/MDppLGg6aT0+aSUzNjAsczppPT5pPj0xMDA/MTAwOmk8MD8wOmksbDppPT5pPj0xMDA/MTAwOmk8MD8wOmksYTppPT5pPj0xPzE6aTwwPzA6aX0sdG9MaW5lYXI6aT0+e2NvbnN0IGE9aS8yNTU7cmV0dXJuIGk+LjAzOTI4P01hdGgucG93KChhKy4wNTUpLzEuMDU1LDIuNCk6YS8xMi45Mn0saHVlMnJnYjooaSxhLGYpPT4oZjwwJiYoZis9MSksZj4xJiYoZi09MSksZjwxLzY/aSsoYS1pKSo2KmY6ZjwxLzI/YTpmPDIvMz9pKyhhLWkpKigyLzMtZikqNjppKSxoc2wycmdiOih7aDppLHM6YSxsOmZ9LHApPT57aWYoIWEpcmV0dXJuIGYqMi41NTtpLz0zNjAsYS89MTAwLGYvPTEwMDtjb25zdCB3PWY8LjU/ZiooMSthKTpmK2EtZiphLG09MipmLXc7c3dpdGNoKHApe2Nhc2UiciI6cmV0dXJuIGhXLmh1ZTJyZ2IobSx3LGkrMS8zKSoyNTU7Y2FzZSJnIjpyZXR1cm4gaFcuaHVlMnJnYihtLHcsaSkqMjU1O2Nhc2UiYiI6cmV0dXJuIGhXLmh1ZTJyZ2IobSx3LGktMS8zKSoyNTV9fSxyZ2IyaHNsOih7cjppLGc6YSxiOmZ9LHApPT57aS89MjU1LGEvPTI1NSxmLz0yNTU7Y29uc3Qgdz1NYXRoLm1heChpLGEsZiksbT1NYXRoLm1pbihpLGEsZiksYj0odyttKS8yO2lmKHA9PT0ibCIpcmV0dXJuIGIqMTAwO2lmKHc9PT1tKXJldHVybiAwO2NvbnN0IEU9dy1tLF89Yj4uNT9FLygyLXctbSk6RS8odyttKTtpZihwPT09InMiKXJldHVybiBfKjEwMDtzd2l0Y2godyl7Y2FzZSBpOnJldHVybigoYS1mKS9FKyhhPGY/NjowKSkqNjA7Y2FzZSBhOnJldHVybigoZi1pKS9FKzIpKjYwO2Nhc2UgZjpyZXR1cm4oKGktYSkvRSs0KSo2MDtkZWZhdWx0OnJldHVybi0xfX19LGdhPXtjaGFubmVsOmhXLGxhbmc6e2NsYW1wOihpLGEsZik9PmE+Zj9NYXRoLm1pbihhLE1hdGgubWF4KGYsaSkpOk1hdGgubWluKGYsTWF0aC5tYXgoYSxpKSkscm91bmQ6aT0+TWF0aC5yb3VuZChpKjFlMTApLzFlMTB9LHVuaXQ6e2RlYzJoZXg6aT0+e2NvbnN0IGE9TWF0aC5yb3VuZChpKS50b1N0cmluZygxNik7cmV0dXJuIGEubGVuZ3RoPjE/YTpgMCR7YX1gfX19LG9rPXt9O2ZvcihsZXQgaT0wO2k8PTI1NTtpKyspb2tbaV09Z2EudW5pdC5kZWMyaGV4KGkpO2NvbnN0IHgwPXtBTEw6MCxSR0I6MSxIU0w6Mn07Y2xhc3MgaUNle2NvbnN0cnVjdG9yKCl7dGhpcy50eXBlPXgwLkFMTH1nZXQoKXtyZXR1cm4gdGhpcy50eXBlfXNldChhKXtpZih0aGlzLnR5cGUmJnRoaXMudHlwZSE9PWEpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2hhbmdlIGJvdGggUkdCIGFuZCBIU0wgY2hhbm5lbHMgYXQgdGhlIHNhbWUgdGltZSIpO3RoaXMudHlwZT1hfXJlc2V0KCl7dGhpcy50eXBlPXgwLkFMTH1pcyhhKXtyZXR1cm4gdGhpcy50eXBlPT09YX19Y29uc3Qgc0NlPWlDZTtjbGFzcyBhQ2V7Y29uc3RydWN0b3IoYSxmKXt0aGlzLmNvbG9yPWYsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT1hLHRoaXMudHlwZT1uZXcgc0NlfXNldChhLGYpe3JldHVybiB0aGlzLmNvbG9yPWYsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT1hLHRoaXMudHlwZS50eXBlPXgwLkFMTCx0aGlzfV9lbnN1cmVIU0woKXtjb25zdCBhPXRoaXMuZGF0YSx7aDpmLHM6cCxsOnd9PWE7Zj09PXZvaWQgMCYmKGEuaD1nYS5jaGFubmVsLnJnYjJoc2woYSwiaCIpKSxwPT09dm9pZCAwJiYoYS5zPWdhLmNoYW5uZWwucmdiMmhzbChhLCJzIikpLHc9PT12b2lkIDAmJihhLmw9Z2EuY2hhbm5lbC5yZ2IyaHNsKGEsImwiKSl9X2Vuc3VyZVJHQigpe2NvbnN0IGE9dGhpcy5kYXRhLHtyOmYsZzpwLGI6d309YTtmPT09dm9pZCAwJiYoYS5yPWdhLmNoYW5uZWwuaHNsMnJnYihhLCJyIikpLHA9PT12b2lkIDAmJihhLmc9Z2EuY2hhbm5lbC5oc2wycmdiKGEsImciKSksdz09PXZvaWQgMCYmKGEuYj1nYS5jaGFubmVsLmhzbDJyZ2IoYSwiYiIpKX1nZXQgcigpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5yO3JldHVybiF0aGlzLnR5cGUuaXMoeDAuSFNMKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVIU0woKSxnYS5jaGFubmVsLmhzbDJyZ2IoYSwiciIpKX1nZXQgZygpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5nO3JldHVybiF0aGlzLnR5cGUuaXMoeDAuSFNMKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVIU0woKSxnYS5jaGFubmVsLmhzbDJyZ2IoYSwiZyIpKX1nZXQgYigpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5iO3JldHVybiF0aGlzLnR5cGUuaXMoeDAuSFNMKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVIU0woKSxnYS5jaGFubmVsLmhzbDJyZ2IoYSwiYiIpKX1nZXQgaCgpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5oO3JldHVybiF0aGlzLnR5cGUuaXMoeDAuUkdCKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVSR0IoKSxnYS5jaGFubmVsLnJnYjJoc2woYSwiaCIpKX1nZXQgcygpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5zO3JldHVybiF0aGlzLnR5cGUuaXMoeDAuUkdCKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVSR0IoKSxnYS5jaGFubmVsLnJnYjJoc2woYSwicyIpKX1nZXQgbCgpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5sO3JldHVybiF0aGlzLnR5cGUuaXMoeDAuUkdCKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVSR0IoKSxnYS5jaGFubmVsLnJnYjJoc2woYSwibCIpKX1nZXQgYSgpe3JldHVybiB0aGlzLmRhdGEuYX1zZXQgcihhKXt0aGlzLnR5cGUuc2V0KHgwLlJHQiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5yPWF9c2V0IGcoYSl7dGhpcy50eXBlLnNldCh4MC5SR0IpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuZz1hfXNldCBiKGEpe3RoaXMudHlwZS5zZXQoeDAuUkdCKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmI9YX1zZXQgaChhKXt0aGlzLnR5cGUuc2V0KHgwLkhTTCksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5oPWF9c2V0IHMoYSl7dGhpcy50eXBlLnNldCh4MC5IU0wpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEucz1hfXNldCBsKGEpe3RoaXMudHlwZS5zZXQoeDAuSFNMKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmw9YX1zZXQgYShhKXt0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmE9YX19Y29uc3Qgb0NlPWFDZSxmVz1uZXcgb0NlKHtyOjAsZzowLGI6MCxhOjB9LCJ0cmFuc3BhcmVudCIpLEpEdD17cmU6L14jKCg/OlthLWYwLTldezJ9KXsyLDR9fFthLWYwLTldezN9KSQvaSxwYXJzZTppPT57aWYoaS5jaGFyQ29kZUF0KDApIT09MzUpcmV0dXJuO2NvbnN0IGE9aS5tYXRjaChKRHQucmUpO2lmKCFhKXJldHVybjtjb25zdCBmPWFbMV0scD1wYXJzZUludChmLDE2KSx3PWYubGVuZ3RoLG09dyU0PT09MCxiPXc+NCxFPWI/MToxNyxfPWI/ODo0LEE9bT8wOi0xLEk9Yj8yNTU6MTU7cmV0dXJuIGZXLnNldCh7cjoocD4+XyooQSszKSZJKSpFLGc6KHA+Pl8qKEErMikmSSkqRSxiOihwPj5fKihBKzEpJkkpKkUsYTptPyhwJkkpKkUvMjU1OjF9LGkpfSxzdHJpbmdpZnk6aT0+e2NvbnN0e3I6YSxnOmYsYjpwLGE6d309aTtyZXR1cm4gdzwxP2AjJHtva1tNYXRoLnJvdW5kKGEpXX0ke29rW01hdGgucm91bmQoZildfSR7b2tbTWF0aC5yb3VuZChwKV19JHtva1tNYXRoLnJvdW5kKHcqMjU1KV19YDpgIyR7b2tbTWF0aC5yb3VuZChhKV19JHtva1tNYXRoLnJvdW5kKGYpXX0ke29rW01hdGgucm91bmQocCldfWB9fSxLUD1KRHQsZFc9e3JlOi9eaHNsYT9cKFxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/JSlccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8lKSg/OlxzKj8oPzosfFwvKVxzKj9cKz8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyglKT8pKT9ccyo/XCkkL2ksaHVlUmU6L14oLis/KShkZWd8Z3JhZHxyYWR8dHVybikkL2ksX2h1ZTJkZWc6aT0+e2NvbnN0IGE9aS5tYXRjaChkVy5odWVSZSk7aWYoYSl7Y29uc3RbLGYscF09YTtzd2l0Y2gocCl7Y2FzZSJncmFkIjpyZXR1cm4gZ2EuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQoZikqLjkpO2Nhc2UicmFkIjpyZXR1cm4gZ2EuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQoZikqMTgwL01hdGguUEkpO2Nhc2UidHVybiI6cmV0dXJuIGdhLmNoYW5uZWwuY2xhbXAuaChwYXJzZUZsb2F0KGYpKjM2MCl9fXJldHVybiBnYS5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdChpKSl9LHBhcnNlOmk9Pntjb25zdCBhPWkuY2hhckNvZGVBdCgwKTtpZihhIT09MTA0JiZhIT09NzIpcmV0dXJuO2NvbnN0IGY9aS5tYXRjaChkVy5yZSk7aWYoIWYpcmV0dXJuO2NvbnN0WyxwLHcsbSxiLEVdPWY7cmV0dXJuIGZXLnNldCh7aDpkVy5faHVlMmRlZyhwKSxzOmdhLmNoYW5uZWwuY2xhbXAucyhwYXJzZUZsb2F0KHcpKSxsOmdhLmNoYW5uZWwuY2xhbXAubChwYXJzZUZsb2F0KG0pKSxhOmI/Z2EuY2hhbm5lbC5jbGFtcC5hKEU/cGFyc2VGbG9hdChiKS8xMDA6cGFyc2VGbG9hdChiKSk6MX0saSl9LHN0cmluZ2lmeTppPT57Y29uc3R7aDphLHM6ZixsOnAsYTp3fT1pO3JldHVybiB3PDE/YGhzbGEoJHtnYS5sYW5nLnJvdW5kKGEpfSwgJHtnYS5sYW5nLnJvdW5kKGYpfSUsICR7Z2EubGFuZy5yb3VuZChwKX0lLCAke3d9KWA6YGhzbCgke2dhLmxhbmcucm91bmQoYSl9LCAke2dhLmxhbmcucm91bmQoZil9JSwgJHtnYS5sYW5nLnJvdW5kKHApfSUpYH19LGdXPWRXLHBXPXtjb2xvcnM6e2FsaWNlYmx1ZToiI2YwZjhmZiIsYW50aXF1ZXdoaXRlOiIjZmFlYmQ3IixhcXVhOiIjMDBmZmZmIixhcXVhbWFyaW5lOiIjN2ZmZmQ0IixhenVyZToiI2YwZmZmZiIsYmVpZ2U6IiNmNWY1ZGMiLGJpc3F1ZToiI2ZmZTRjNCIsYmxhY2s6IiMwMDAwMDAiLGJsYW5jaGVkYWxtb25kOiIjZmZlYmNkIixibHVlOiIjMDAwMGZmIixibHVldmlvbGV0OiIjOGEyYmUyIixicm93bjoiI2E1MmEyYSIsYnVybHl3b29kOiIjZGViODg3IixjYWRldGJsdWU6IiM1ZjllYTAiLGNoYXJ0cmV1c2U6IiM3ZmZmMDAiLGNob2NvbGF0ZToiI2QyNjkxZSIsY29yYWw6IiNmZjdmNTAiLGNvcm5mbG93ZXJibHVlOiIjNjQ5NWVkIixjb3Juc2lsazoiI2ZmZjhkYyIsY3JpbXNvbjoiI2RjMTQzYyIsY3lhbmFxdWE6IiMwMGZmZmYiLGRhcmtibHVlOiIjMDAwMDhiIixkYXJrY3lhbjoiIzAwOGI4YiIsZGFya2dvbGRlbnJvZDoiI2I4ODYwYiIsZGFya2dyYXk6IiNhOWE5YTkiLGRhcmtncmVlbjoiIzAwNjQwMCIsZGFya2dyZXk6IiNhOWE5YTkiLGRhcmtraGFraToiI2JkYjc2YiIsZGFya21hZ2VudGE6IiM4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiIjNTU2YjJmIixkYXJrb3JhbmdlOiIjZmY4YzAwIixkYXJrb3JjaGlkOiIjOTkzMmNjIixkYXJrcmVkOiIjOGIwMDAwIixkYXJrc2FsbW9uOiIjZTk5NjdhIixkYXJrc2VhZ3JlZW46IiM4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IiM0ODNkOGIiLGRhcmtzbGF0ZWdyYXk6IiMyZjRmNGYiLGRhcmtzbGF0ZWdyZXk6IiMyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IiMwMGNlZDEiLGRhcmt2aW9sZXQ6IiM5NDAwZDMiLGRlZXBwaW5rOiIjZmYxNDkzIixkZWVwc2t5Ymx1ZToiIzAwYmZmZiIsZGltZ3JheToiIzY5Njk2OSIsZGltZ3JleToiIzY5Njk2OSIsZG9kZ2VyYmx1ZToiIzFlOTBmZiIsZmlyZWJyaWNrOiIjYjIyMjIyIixmbG9yYWx3aGl0ZToiI2ZmZmFmMCIsZm9yZXN0Z3JlZW46IiMyMjhiMjIiLGZ1Y2hzaWE6IiNmZjAwZmYiLGdhaW5zYm9ybzoiI2RjZGNkYyIsZ2hvc3R3aGl0ZToiI2Y4ZjhmZiIsZ29sZDoiI2ZmZDcwMCIsZ29sZGVucm9kOiIjZGFhNTIwIixncmF5OiIjODA4MDgwIixncmVlbjoiIzAwODAwMCIsZ3JlZW55ZWxsb3c6IiNhZGZmMmYiLGdyZXk6IiM4MDgwODAiLGhvbmV5ZGV3OiIjZjBmZmYwIixob3RwaW5rOiIjZmY2OWI0IixpbmRpYW5yZWQ6IiNjZDVjNWMiLGluZGlnbzoiIzRiMDA4MiIsaXZvcnk6IiNmZmZmZjAiLGtoYWtpOiIjZjBlNjhjIixsYXZlbmRlcjoiI2U2ZTZmYSIsbGF2ZW5kZXJibHVzaDoiI2ZmZjBmNSIsbGF3bmdyZWVuOiIjN2NmYzAwIixsZW1vbmNoaWZmb246IiNmZmZhY2QiLGxpZ2h0Ymx1ZToiI2FkZDhlNiIsbGlnaHRjb3JhbDoiI2YwODA4MCIsbGlnaHRjeWFuOiIjZTBmZmZmIixsaWdodGdvbGRlbnJvZHllbGxvdzoiI2ZhZmFkMiIsbGlnaHRncmF5OiIjZDNkM2QzIixsaWdodGdyZWVuOiIjOTBlZTkwIixsaWdodGdyZXk6IiNkM2QzZDMiLGxpZ2h0cGluazoiI2ZmYjZjMSIsbGlnaHRzYWxtb246IiNmZmEwN2EiLGxpZ2h0c2VhZ3JlZW46IiMyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiIzg3Y2VmYSIsbGlnaHRzbGF0ZWdyYXk6IiM3Nzg4OTkiLGxpZ2h0c2xhdGVncmV5OiIjNzc4ODk5IixsaWdodHN0ZWVsYmx1ZToiI2IwYzRkZSIsbGlnaHR5ZWxsb3c6IiNmZmZmZTAiLGxpbWU6IiMwMGZmMDAiLGxpbWVncmVlbjoiIzMyY2QzMiIsbGluZW46IiNmYWYwZTYiLG1hZ2VudGE6IiNmZjAwZmYiLG1hcm9vbjoiIzgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiIzY2Y2RhYSIsbWVkaXVtYmx1ZToiIzAwMDBjZCIsbWVkaXVtb3JjaGlkOiIjYmE1NWQzIixtZWRpdW1wdXJwbGU6IiM5MzcwZGIiLG1lZGl1bXNlYWdyZWVuOiIjM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IiM3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIjMDBmYTlhIixtZWRpdW10dXJxdW9pc2U6IiM0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiI2M3MTU4NSIsbWlkbmlnaHRibHVlOiIjMTkxOTcwIixtaW50Y3JlYW06IiNmNWZmZmEiLG1pc3R5cm9zZToiI2ZmZTRlMSIsbW9jY2FzaW46IiNmZmU0YjUiLG5hdmFqb3doaXRlOiIjZmZkZWFkIixuYXZ5OiIjMDAwMDgwIixvbGRsYWNlOiIjZmRmNWU2IixvbGl2ZToiIzgwODAwMCIsb2xpdmVkcmFiOiIjNmI4ZTIzIixvcmFuZ2U6IiNmZmE1MDAiLG9yYW5nZXJlZDoiI2ZmNDUwMCIsb3JjaGlkOiIjZGE3MGQ2IixwYWxlZ29sZGVucm9kOiIjZWVlOGFhIixwYWxlZ3JlZW46IiM5OGZiOTgiLHBhbGV0dXJxdW9pc2U6IiNhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6IiNkYjcwOTMiLHBhcGF5YXdoaXA6IiNmZmVmZDUiLHBlYWNocHVmZjoiI2ZmZGFiOSIscGVydToiI2NkODUzZiIscGluazoiI2ZmYzBjYiIscGx1bToiI2RkYTBkZCIscG93ZGVyYmx1ZToiI2IwZTBlNiIscHVycGxlOiIjODAwMDgwIixyZWJlY2NhcHVycGxlOiIjNjYzMzk5IixyZWQ6IiNmZjAwMDAiLHJvc3licm93bjoiI2JjOGY4ZiIscm95YWxibHVlOiIjNDE2OWUxIixzYWRkbGVicm93bjoiIzhiNDUxMyIsc2FsbW9uOiIjZmE4MDcyIixzYW5keWJyb3duOiIjZjRhNDYwIixzZWFncmVlbjoiIzJlOGI1NyIsc2Vhc2hlbGw6IiNmZmY1ZWUiLHNpZW5uYToiI2EwNTIyZCIsc2lsdmVyOiIjYzBjMGMwIixza3libHVlOiIjODdjZWViIixzbGF0ZWJsdWU6IiM2YTVhY2QiLHNsYXRlZ3JheToiIzcwODA5MCIsc2xhdGVncmV5OiIjNzA4MDkwIixzbm93OiIjZmZmYWZhIixzcHJpbmdncmVlbjoiIzAwZmY3ZiIsdGFuOiIjZDJiNDhjIix0ZWFsOiIjMDA4MDgwIix0aGlzdGxlOiIjZDhiZmQ4Iix0cmFuc3BhcmVudDoiIzAwMDAwMDAwIix0dXJxdW9pc2U6IiM0MGUwZDAiLHZpb2xldDoiI2VlODJlZSIsd2hlYXQ6IiNmNWRlYjMiLHdoaXRlOiIjZmZmZmZmIix3aGl0ZXNtb2tlOiIjZjVmNWY1Iix5ZWxsb3c6IiNmZmZmMDAiLHllbGxvd2dyZWVuOiIjOWFjZDMyIn0scGFyc2U6aT0+e2k9aS50b0xvd2VyQ2FzZSgpO2NvbnN0IGE9cFcuY29sb3JzW2ldO2lmKGEpcmV0dXJuIEtQLnBhcnNlKGEpfSxzdHJpbmdpZnk6aT0+e2NvbnN0IGE9S1Auc3RyaW5naWZ5KGkpO2Zvcihjb25zdCBmIGluIHBXLmNvbG9ycylpZihwVy5jb2xvcnNbZl09PT1hKXJldHVybiBmfX0sdEl0PXBXLGVJdD17cmU6L15yZ2JhP1woXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKD86XHMqPyg/Oix8XC8pXHMqP1wrPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKT9ccyo/XCkkL2kscGFyc2U6aT0+e2NvbnN0IGE9aS5jaGFyQ29kZUF0KDApO2lmKGEhPT0xMTQmJmEhPT04MilyZXR1cm47Y29uc3QgZj1pLm1hdGNoKGVJdC5yZSk7aWYoIWYpcmV0dXJuO2NvbnN0WyxwLHcsbSxiLEUsXyxBLEldPWY7cmV0dXJuIGZXLnNldCh7cjpnYS5jaGFubmVsLmNsYW1wLnIodz9wYXJzZUZsb2F0KHApKjIuNTU6cGFyc2VGbG9hdChwKSksZzpnYS5jaGFubmVsLmNsYW1wLmcoYj9wYXJzZUZsb2F0KG0pKjIuNTU6cGFyc2VGbG9hdChtKSksYjpnYS5jaGFubmVsLmNsYW1wLmIoXz9wYXJzZUZsb2F0KEUpKjIuNTU6cGFyc2VGbG9hdChFKSksYTpBP2dhLmNoYW5uZWwuY2xhbXAuYShJP3BhcnNlRmxvYXQoQSkvMTAwOnBhcnNlRmxvYXQoQSkpOjF9LGkpfSxzdHJpbmdpZnk6aT0+e2NvbnN0e3I6YSxnOmYsYjpwLGE6d309aTtyZXR1cm4gdzwxP2ByZ2JhKCR7Z2EubGFuZy5yb3VuZChhKX0sICR7Z2EubGFuZy5yb3VuZChmKX0sICR7Z2EubGFuZy5yb3VuZChwKX0sICR7Z2EubGFuZy5yb3VuZCh3KX0pYDpgcmdiKCR7Z2EubGFuZy5yb3VuZChhKX0sICR7Z2EubGFuZy5yb3VuZChmKX0sICR7Z2EubGFuZy5yb3VuZChwKX0pYH19LGJXPWVJdCxlbT17Zm9ybWF0OntrZXl3b3JkOnRJdCxoZXg6S1AscmdiOmJXLHJnYmE6YlcsaHNsOmdXLGhzbGE6Z1d9LHBhcnNlOmk9PntpZih0eXBlb2YgaSE9InN0cmluZyIpcmV0dXJuIGk7Y29uc3QgYT1LUC5wYXJzZShpKXx8YlcucGFyc2UoaSl8fGdXLnBhcnNlKGkpfHx0SXQucGFyc2UoaSk7aWYoYSlyZXR1cm4gYTt0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGNvbG9yIGZvcm1hdDogIiR7aX0iYCl9LHN0cmluZ2lmeTppPT4haS5jaGFuZ2VkJiZpLmNvbG9yP2kuY29sb3I6aS50eXBlLmlzKHgwLkhTTCl8fGkuZGF0YS5yPT09dm9pZCAwP2dXLnN0cmluZ2lmeShpKTppLmE8MXx8IU51bWJlci5pc0ludGVnZXIoaS5yKXx8IU51bWJlci5pc0ludGVnZXIoaS5nKXx8IU51bWJlci5pc0ludGVnZXIoaS5iKT9iVy5zdHJpbmdpZnkoaSk6S1Auc3RyaW5naWZ5KGkpfSxuSXQ9KGksYSk9Pntjb25zdCBmPWVtLnBhcnNlKGkpO2Zvcihjb25zdCBwIGluIGEpZltwXT1nYS5jaGFubmVsLmNsYW1wW3BdKGFbcF0pO3JldHVybiBlbS5zdHJpbmdpZnkoZil9LEZBPShpLGEsZj0wLHA9MSk9PntpZih0eXBlb2YgaSE9Im51bWJlciIpcmV0dXJuIG5JdChpLHthfSk7Y29uc3Qgdz1mVy5zZXQoe3I6Z2EuY2hhbm5lbC5jbGFtcC5yKGkpLGc6Z2EuY2hhbm5lbC5jbGFtcC5nKGEpLGI6Z2EuY2hhbm5lbC5jbGFtcC5iKGYpLGE6Z2EuY2hhbm5lbC5jbGFtcC5hKHApfSk7cmV0dXJuIGVtLnN0cmluZ2lmeSh3KX0sY0NlPShpLGEpPT5nYS5sYW5nLnJvdW5kKGVtLnBhcnNlKGkpW2FdKSx1Q2U9aT0+e2NvbnN0e3I6YSxnOmYsYjpwfT1lbS5wYXJzZShpKSx3PS4yMTI2KmdhLmNoYW5uZWwudG9MaW5lYXIoYSkrLjcxNTIqZ2EuY2hhbm5lbC50b0xpbmVhcihmKSsuMDcyMipnYS5jaGFubmVsLnRvTGluZWFyKHApO3JldHVybiBnYS5sYW5nLnJvdW5kKHcpfSxsQ2U9aT0+dUNlKGkpPj0uNSxpVD1pPT4hbENlKGkpLHJJdD0oaSxhLGYpPT57Y29uc3QgcD1lbS5wYXJzZShpKSx3PXBbYV0sbT1nYS5jaGFubmVsLmNsYW1wW2FdKHcrZik7cmV0dXJuIHchPT1tJiYocFthXT1tKSxlbS5zdHJpbmdpZnkocCl9LGJzPShpLGEpPT5ySXQoaSwibCIsYSksJHM9KGksYSk9PnJJdChpLCJsIiwtYSkseG49KGksYSk9Pntjb25zdCBmPWVtLnBhcnNlKGkpLHA9e307Zm9yKGNvbnN0IHcgaW4gYSlhW3ddJiYocFt3XT1mW3ddK2Fbd10pO3JldHVybiBuSXQoaSxwKX0saENlPShpLGEsZj01MCk9Pntjb25zdHtyOnAsZzp3LGI6bSxhOmJ9PWVtLnBhcnNlKGkpLHtyOkUsZzpfLGI6QSxhOkl9PWVtLnBhcnNlKGEpLEI9Zi8xMDAsTj1CKjItMSxSPWItSSxXPSgoTipSPT09LTE/TjooTitSKS8oMStOKlIpKSsxKS8yLGV0PTEtVyxzdD1wKlcrRSpldCxhdD13KlcrXypldCxidD1tKlcrQSpldCxtdD1iKkIrSSooMS1CKTtyZXR1cm4gRkEoc3QsYXQsYnQsbXQpfSxEaT0oaSxhPTEwMCk9Pntjb25zdCBmPWVtLnBhcnNlKGkpO3JldHVybiBmLnI9MjU1LWYucixmLmc9MjU1LWYuZyxmLmI9MjU1LWYuYixoQ2UoZixpLGEpfSxsZz0oaSxhKT0+YT94bihpLHtzOi00MCxsOjEwfSk6eG4oaSx7czotNDAsbDotMTB9KSx3Vz0iI2ZmZmZmZiIsdlc9IiNmMmYyZjIiO2xldCBmQ2U9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjZmZmNGRkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSIjMzMzIix0aGlzLlRIRU1FX0NPTE9SX0xJTUlUPTEyLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4In11cGRhdGVDb2xvcnMoKXt2YXIgZixwLHcsbSxiLEUsXyxBLEksQixOO2lmKHRoaXMucHJpbWFyeVRleHRDb2xvcj10aGlzLnByaW1hcnlUZXh0Q29sb3J8fCh0aGlzLmRhcmtNb2RlPyIjZWVlIjoiIzMzMyIpLHRoaXMuc2Vjb25kYXJ5Q29sb3I9dGhpcy5zZWNvbmRhcnlDb2xvcnx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTEyMH0pLHRoaXMudGVydGlhcnlDb2xvcj10aGlzLnRlcnRpYXJ5Q29sb3J8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE4MCxsOjV9KSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcnx8bGcodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj10aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yfHxsZyh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj10aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3J8fGxnKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLm5vdGVCb3JkZXJDb2xvcnx8bGcodGhpcy5ub3RlQmtnQ29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5ub3RlQmtnQ29sb3I9dGhpcy5ub3RlQmtnQ29sb3J8fCIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5ub3RlVGV4dENvbG9yfHwiIzMzMyIsdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3J8fERpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9dGhpcy50ZXJ0aWFyeVRleHRDb2xvcnx8RGkodGhpcy50ZXJ0aWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj10aGlzLmxpbmVDb2xvcnx8RGkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLmFycm93aGVhZENvbG9yPXRoaXMuYXJyb3doZWFkQ29sb3J8fERpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9dGhpcy50ZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmJvcmRlcjI9dGhpcy5ib3JkZXIyfHx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3IsdGhpcy5ub2RlQmtnPXRoaXMubm9kZUJrZ3x8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5tYWluQmtnPXRoaXMubWFpbkJrZ3x8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5ub2RlQm9yZGVyPXRoaXMubm9kZUJvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5jbHVzdGVyQmtnPXRoaXMuY2x1c3RlckJrZ3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmNsdXN0ZXJCb3JkZXJ8fHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5kZWZhdWx0TGlua0NvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRpdGxlQ29sb3I9dGhpcy50aXRsZUNvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD10aGlzLmVkZ2VMYWJlbEJhY2tncm91bmR8fCh0aGlzLmRhcmtNb2RlPyRzKHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMubm9kZVRleHRDb2xvcj10aGlzLm5vZGVUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmFjdG9yQm9yZGVyPXRoaXMuYWN0b3JCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuYWN0b3JCa2c9dGhpcy5hY3RvckJrZ3x8dGhpcy5tYWluQmtnLHRoaXMuYWN0b3JUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5hY3RvckxpbmVDb2xvcnx8ImdyZXkiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmxhYmVsQm94QmtnQ29sb3J8fHRoaXMuYWN0b3JCa2csdGhpcy5zaWduYWxDb2xvcj10aGlzLnNpZ25hbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnNpZ25hbFRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcnx8dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMubGFiZWxUZXh0Q29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMubG9vcFRleHRDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj10aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcnx8JHModGhpcy5zZWNvbmRhcnlDb2xvciwxMCksdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9dGhpcy5hY3RpdmF0aW9uQmtnQ29sb3J8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPXRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcnx8RGkodGhpcy5saW5lQ29sb3IpLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPXRoaXMuc2VjdGlvbkJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9dGhpcy5hbHRTZWN0aW9uQmtnQ29sb3J8fCJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9dGhpcy5zZWN0aW9uQmtnQ29sb3J8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPXRoaXMuc2VjdGlvbkJrZ0NvbG9yMnx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5leGNsdWRlQmtnQ29sb3I9dGhpcy5leGNsdWRlQmtnQ29sb3J8fCIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj10aGlzLnRhc2tCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YXNrQmtnQ29sb3I9dGhpcy50YXNrQmtnQ29sb3J8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj10aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcnx8YnModGhpcy5wcmltYXJ5Q29sb3IsMjMpLHRoaXMuZ3JpZENvbG9yPXRoaXMuZ3JpZENvbG9yfHwibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5kb25lVGFza0JrZ0NvbG9yfHwibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9dGhpcy5kb25lVGFza0JvcmRlckNvbG9yfHwiZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9dGhpcy5jcml0Qm9yZGVyQ29sb3J8fCIjZmY4ODg4Iix0aGlzLmNyaXRCa2dDb2xvcj10aGlzLmNyaXRCa2dDb2xvcnx8InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj10aGlzLnRvZGF5TGluZUNvbG9yfHwicmVkIix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHRPdXRzaWRlQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRMaWdodENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9dGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yfHwiIzAwMzE2MyIsdGhpcy5wZXJzb25Cb3JkZXI9dGhpcy5wZXJzb25Cb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucGVyc29uQmtnPXRoaXMucGVyc29uQmtnfHx0aGlzLm1haW5Ca2csdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLm5vZGVCb3JkZXIsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmNTY2FsZTA9dGhpcy5jU2NhbGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmNTY2FsZTE9dGhpcy5jU2NhbGUxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDozMH0pLHRoaXMuY1NjYWxlND10aGlzLmNTY2FsZTR8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5jU2NhbGU1PXRoaXMuY1NjYWxlNXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6OTB9KSx0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmNTY2FsZTc9dGhpcy5jU2NhbGU3fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoxNTB9KSx0aGlzLmNTY2FsZTg9dGhpcy5jU2NhbGU4fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoyMTAsbDoxNTB9KSx0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoyNzB9KSx0aGlzLmNTY2FsZTEwPXRoaXMuY1NjYWxlMTB8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwMH0pLHRoaXMuY1NjYWxlMTE9dGhpcy5jU2NhbGUxMXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzMwfSksdGhpcy5kYXJrTW9kZSlmb3IobGV0IFI9MDtSPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7UisrKXRoaXNbImNTY2FsZSIrUl09JHModGhpc1siY1NjYWxlIitSXSw3NSk7ZWxzZSBmb3IobGV0IFI9MDtSPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7UisrKXRoaXNbImNTY2FsZSIrUl09JHModGhpc1siY1NjYWxlIitSXSwyNSk7Zm9yKGxldCBSPTA7Ujx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO1IrKyl0aGlzWyJjU2NhbGVJbnYiK1JdPXRoaXNbImNTY2FsZUludiIrUl18fERpKHRoaXNbImNTY2FsZSIrUl0pO2ZvcihsZXQgUj0wO1I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtSKyspdGhpcy5kYXJrTW9kZT90aGlzWyJjU2NhbGVQZWVyIitSXT10aGlzWyJjU2NhbGVQZWVyIitSXXx8YnModGhpc1siY1NjYWxlIitSXSwxMCk6dGhpc1siY1NjYWxlUGVlciIrUl09dGhpc1siY1NjYWxlUGVlciIrUl18fCRzKHRoaXNbImNTY2FsZSIrUl0sMTApO3RoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yfHx0aGlzLmxhYmVsVGV4dENvbG9yO2ZvcihsZXQgUj0wO1I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtSKyspdGhpc1siY1NjYWxlTGFiZWwiK1JdPXRoaXNbImNTY2FsZUxhYmVsIitSXXx8dGhpcy5zY2FsZUxhYmVsQ29sb3I7Y29uc3QgYT10aGlzLmRhcmtNb2RlPy00Oi0xO2ZvcihsZXQgUj0wO1I8NTtSKyspdGhpc1sic3VyZmFjZSIrUl09dGhpc1sic3VyZmFjZSIrUl18fHhuKHRoaXMubWFpbkJrZyx7aDoxODAsczotMTUsbDphKig1K1IqMyl9KSx0aGlzWyJzdXJmYWNlUGVlciIrUl09dGhpc1sic3VyZmFjZVBlZXIiK1JdfHx4bih0aGlzLm1haW5Ca2cse2g6MTgwLHM6LTE1LGw6YSooOCtSKjMpfSk7dGhpcy5jbGFzc1RleHQ9dGhpcy5jbGFzc1RleHR8fHRoaXMudGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMuZmlsbFR5cGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLmZpbGxUeXBlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj10aGlzLmZpbGxUeXBlMnx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz10aGlzLmZpbGxUeXBlM3x8eG4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PXRoaXMuZmlsbFR5cGU0fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT10aGlzLmZpbGxUeXBlNXx8eG4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj10aGlzLmZpbGxUeXBlNnx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9dGhpcy5maWxsVHlwZTd8fHhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5waWU0PXRoaXMucGllNHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU1PXRoaXMucGllNXx8eG4odGhpcy5zZWNvbmRhcnlDb2xvcix7bDotMTB9KSx0aGlzLnBpZTY9dGhpcy5waWU2fHx4bih0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU3PXRoaXMucGllN3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMTB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMTB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDowfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0yMH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTIwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotMTB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fGlUKHRoaXMucXVhZHJhbnQxRmlsbCk/YnModGhpcy5xdWFkcmFudDFGaWxsKTokcyh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjooKGY9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Zi5iYWNrZ3JvdW5kQ29sb3IpfHx0aGlzLmJhY2tncm91bmQsdGl0bGVDb2xvcjooKHA9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6cC50aXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGl0bGVDb2xvcjooKHc9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6dy54QXhpc1RpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOigobT10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDptLnhBeGlzTGFiZWxDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpY2tDb2xvcjooKGI9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Yi54QXhpc1RpY2tDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xpbmVDb2xvcjooKEU9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6RS54QXhpc0xpbmVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6KChfPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOl8ueUF4aXNUaXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGFiZWxDb2xvcjooKEE9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6QS55QXhpc0xhYmVsQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaWNrQ29sb3I6KChJPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkkueUF4aXNUaWNrQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6KChCPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkIueUF4aXNMaW5lQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IscGxvdENvbG9yUGFsZXR0ZTooKE49dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Ti5wbG90Q29sb3JQYWxldHRlKXx8IiNGRkY0REQsI0ZGRDhCMSwjRkZBMDdBLCNFQ0VGRjEsI0Q2REJERiwjQzNFMEE4LCNGRkI2QTQsI0ZGRDc0RCwjNzM4RkE3LCNGRkZGRjAifSx0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fCh0aGlzLmRhcmtNb2RlPyRzKHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuZ2l0MD10aGlzLmdpdDB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZ2l0MT10aGlzLmdpdDF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5naXQyPXRoaXMuZ2l0Mnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZ2l0Mz10aGlzLmdpdDN8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0zMH0pLHRoaXMuZ2l0ND10aGlzLmdpdDR8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLHRoaXMuZ2l0NT10aGlzLmdpdDV8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLHRoaXMuZ2l0Nj10aGlzLmdpdDZ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5naXQ3PXRoaXMuZ2l0N3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5kYXJrTW9kZT8odGhpcy5naXQwPWJzKHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPWJzKHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPWJzKHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPWJzKHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PWJzKHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PWJzKHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PWJzKHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PWJzKHRoaXMuZ2l0NywyNSkpOih0aGlzLmdpdDA9JHModGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9JHModGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9JHModGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9JHModGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9JHModGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9JHModGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9JHModGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9JHModGhpcy5naXQ3LDI1KSksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8RGkodGhpcy5naXQwKSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHxEaSh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fERpKHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8RGkodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHxEaSh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fERpKHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8RGkodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHxEaSh0aGlzLmdpdDcpLHRoaXMuYnJhbmNoTGFiZWxDb2xvcj10aGlzLmJyYW5jaExhYmVsQ29sb3J8fCh0aGlzLmRhcmtNb2RlPyJibGFjayI6dGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDA9dGhpcy5naXRCcmFuY2hMYWJlbDB8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMT10aGlzLmdpdEJyYW5jaExhYmVsMXx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwyPXRoaXMuZ2l0QnJhbmNoTGFiZWwyfHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmdpdEJyYW5jaExhYmVsNHx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5naXRCcmFuY2hMYWJlbDZ8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmdpdEJyYW5jaExhYmVsN3x8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8d1csdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbnx8dld9Y2FsY3VsYXRlKGEpe2lmKHR5cGVvZiBhIT0ib2JqZWN0Iil7dGhpcy51cGRhdGVDb2xvcnMoKTtyZXR1cm59Y29uc3QgZj1PYmplY3Qua2V5cyhhKTtmLmZvckVhY2gocD0+e3RoaXNbcF09YVtwXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksZi5mb3JFYWNoKHA9Pnt0aGlzW3BdPWFbcF19KX19O2NvbnN0IGRDZT1pPT57Y29uc3QgYT1uZXcgZkNlO3JldHVybiBhLmNhbGN1bGF0ZShpKSxhfTtsZXQgZ0NlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5iYWNrZ3JvdW5kPSIjMzMzIix0aGlzLnByaW1hcnlDb2xvcj0iIzFmMjAyMCIsdGhpcy5zZWNvbmRhcnlDb2xvcj1icyh0aGlzLnByaW1hcnlDb2xvciwxNiksdGhpcy50ZXJ0aWFyeUNvbG9yPXhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0xNjB9KSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1EaSh0aGlzLmJhY2tncm91bmQpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9bGcodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9bGcodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1EaSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9RGkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1EaSh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPURpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9RGkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLm1haW5Ca2c9IiMxZjIwMjAiLHRoaXMuc2Vjb25kQmtnPSJjYWxjdWxhdGVkIix0aGlzLm1haW5Db250cmFzdENvbG9yPSJsaWdodGdyZXkiLHRoaXMuZGFya1RleHRDb2xvcj1icyhEaSgiIzMyM0Q0NyIpLDEwKSx0aGlzLmxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ib3JkZXIxPSIjODFCMURCIix0aGlzLmJvcmRlcjI9RkEoMjU1LDI1NSwyNTUsLjI1KSx0aGlzLmFycm93aGVhZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCIsdGhpcy5sYWJlbEJhY2tncm91bmQ9IiMxODE4MTgiLHRoaXMudGV4dENvbG9yPSIjY2NjIix0aGlzLlRIRU1FX0NPTE9SX0xJTUlUPTEyLHRoaXMubm9kZUJrZz0iY2FsY3VsYXRlZCIsdGhpcy5ub2RlQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRpdGxlQ29sb3I9IiNGOUZGRkUiLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0iYmxhY2siLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSRzKCIjRUFFOEQ5IiwzMCksdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iI0VBRThEOSIsdGhpcy5leGNsdWRlQmtnQ29sb3I9JHModGhpcy5zZWN0aW9uQmtnQ29sb3IsMTApLHRoaXMudGFza0JvcmRlckNvbG9yPUZBKDI1NSwyNTUsMjU1LDcwKSx0aGlzLnRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj1GQSgyNTUsMjU1LDI1NSw1MCksdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9IiM4MUIxREIiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9IiNFODM3MzciLHRoaXMuY3JpdEJrZ0NvbG9yPSIjRTgzNzM3Iix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSIjREI1NzU3Iix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVycm9yQmtnQ29sb3I9IiNhNDQxNDEiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiNkZGQifXVwZGF0ZUNvbG9ycygpe3ZhciBhLGYscCx3LG0sYixFLF8sQSxJLEI7dGhpcy5zZWNvbmRCa2c9YnModGhpcy5tYWluQmtnLDE2KSx0aGlzLmxpbmVDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuYXJyb3doZWFkQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD1icyh0aGlzLmxhYmVsQmFja2dyb3VuZCwyNSksdGhpcy5hY3RvckJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnNpZ25hbENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcix0aGlzLm5vdGVCa2dDb2xvcj10aGlzLnNlY29uZEJrZyx0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIxLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPXRoaXMuc2Vjb25kQmtnLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPXRoaXMuYmFja2dyb3VuZCx0aGlzLnRhc2tCa2dDb2xvcj1icyh0aGlzLm1haW5Ca2csMjMpLHRoaXMudGFza1RleHRDb2xvcj10aGlzLmRhcmtUZXh0Q29sb3IsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMuZ3JpZENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLmRhcmtUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiM1NTUiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPSIjZjRmNGY0Iix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz14bih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9eG4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj14bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz14bih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fCIjMGIwMDAwIix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHwiIzRkMTAzNyIsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8IiMzZjUyNTgiLHRoaXMuY1NjYWxlND10aGlzLmNTY2FsZTR8fCIjNGYyZjFiIix0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHwiIzZlMGEwYSIsdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8IiMzYjAwNDgiLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fCIjOTk1YTAxIix0aGlzLmNTY2FsZTg9dGhpcy5jU2NhbGU4fHwiIzE1NDcwNiIsdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8IiMxNjE3MjIiLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8IiMwMDI5NmYiLHRoaXMuY1NjYWxlMTE9dGhpcy5jU2NhbGUxMXx8IiMwMTYyOWMiLHRoaXMuY1NjYWxlMTI9dGhpcy5jU2NhbGUxMnx8IiMwMTAwMjkiLHRoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KTtmb3IobGV0IE49MDtOPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7TisrKXRoaXNbImNTY2FsZUludiIrTl09dGhpc1siY1NjYWxlSW52IitOXXx8RGkodGhpc1siY1NjYWxlIitOXSk7Zm9yKGxldCBOPTA7Tjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO04rKyl0aGlzWyJjU2NhbGVQZWVyIitOXT10aGlzWyJjU2NhbGVQZWVyIitOXXx8YnModGhpc1siY1NjYWxlIitOXSwxMCk7Zm9yKGxldCBOPTA7Tjw1O04rKyl0aGlzWyJzdXJmYWNlIitOXT10aGlzWyJzdXJmYWNlIitOXXx8eG4odGhpcy5tYWluQmtnLHtoOjMwLHM6LTMwLGw6LSgtMTArTio0KX0pLHRoaXNbInN1cmZhY2VQZWVyIitOXT10aGlzWyJzdXJmYWNlUGVlciIrTl18fHhuKHRoaXMubWFpbkJrZyx7aDozMCxzOi0zMCxsOi0oLTcrTio0KX0pO3RoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yfHwodGhpcy5kYXJrTW9kZT8iYmxhY2siOnRoaXMubGFiZWxUZXh0Q29sb3IpO2ZvcihsZXQgTj0wO048dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtOKyspdGhpc1siY1NjYWxlTGFiZWwiK05dPXRoaXNbImNTY2FsZUxhYmVsIitOXXx8dGhpcy5zY2FsZUxhYmVsQ29sb3I7Zm9yKGxldCBOPTA7Tjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO04rKyl0aGlzWyJwaWUiK05dPXRoaXNbImNTY2FsZSIrTl07dGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VXaWR0aD10aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VDb2xvcj10aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5xdWFkcmFudDFGaWxsPXRoaXMucXVhZHJhbnQxRmlsbHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5xdWFkcmFudDJGaWxsPXRoaXMucXVhZHJhbnQyRmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6NSxnOjUsYjo1fSksdGhpcy5xdWFkcmFudDNGaWxsPXRoaXMucXVhZHJhbnQzRmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6MTAsZzoxMCxiOjEwfSksdGhpcy5xdWFkcmFudDRGaWxsPXRoaXMucXVhZHJhbnQ0RmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6MTUsZzoxNSxiOjE1fSksdGhpcy5xdWFkcmFudDFUZXh0RmlsbD10aGlzLnF1YWRyYW50MVRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudDJUZXh0RmlsbD10aGlzLnF1YWRyYW50MlRleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTUsZzotNSxiOi01fSksdGhpcy5xdWFkcmFudDNUZXh0RmlsbD10aGlzLnF1YWRyYW50M1RleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTEwLGc6LTEwLGI6LTEwfSksdGhpcy5xdWFkcmFudDRUZXh0RmlsbD10aGlzLnF1YWRyYW50NFRleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTE1LGc6LTE1LGI6LTE1fSksdGhpcy5xdWFkcmFudFBvaW50RmlsbD10aGlzLnF1YWRyYW50UG9pbnRGaWxsfHxpVCh0aGlzLnF1YWRyYW50MUZpbGwpP2JzKHRoaXMucXVhZHJhbnQxRmlsbCk6JHModGhpcy5xdWFkcmFudDFGaWxsKSx0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbD10aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudFRpdGxlRmlsbD10aGlzLnF1YWRyYW50VGl0bGVGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy54eUNoYXJ0PXtiYWNrZ3JvdW5kQ29sb3I6KChhPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOmEuYmFja2dyb3VuZENvbG9yKXx8dGhpcy5iYWNrZ3JvdW5kLHRpdGxlQ29sb3I6KChmPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOmYudGl0bGVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpdGxlQ29sb3I6KChwPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOnAueEF4aXNUaXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGFiZWxDb2xvcjooKHc9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6dy54QXhpc0xhYmVsQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaWNrQ29sb3I6KChtPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOm0ueEF4aXNUaWNrQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMaW5lQ29sb3I6KChiPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOmIueEF4aXNMaW5lQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaXRsZUNvbG9yOigoRT10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpFLnlBeGlzVGl0bGVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xhYmVsQ29sb3I6KChfPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOl8ueUF4aXNMYWJlbENvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGlja0NvbG9yOigoQT10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpBLnlBeGlzVGlja0NvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGluZUNvbG9yOigoST10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpJLnlBeGlzTGluZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHBsb3RDb2xvclBhbGV0dGU6KChCPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkIucGxvdENvbG9yUGFsZXR0ZSl8fCIjMzQ5OGRiLCMyZWNjNzEsI2U3NGMzYywjZjFjNDBmLCNiZGMzYzcsI2ZmZmZmZiwjMzQ0OTVlLCM5YjU5YjYsIzFhYmM5YywjZTY3ZTIyIn0sdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/JHModGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5naXQwPWJzKHRoaXMuc2Vjb25kYXJ5Q29sb3IsMjApLHRoaXMuZ2l0MT1icyh0aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsMjApLHRoaXMuZ2l0Mj1icyh0aGlzLnBpZTN8fHRoaXMudGVydGlhcnlDb2xvciwyMCksdGhpcy5naXQzPWJzKHRoaXMucGllNHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksMjApLHRoaXMuZ2l0ND1icyh0aGlzLnBpZTV8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLDIwKSx0aGlzLmdpdDU9YnModGhpcy5waWU2fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSwxMCksdGhpcy5naXQ2PWJzKHRoaXMucGllN3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSwxMCksdGhpcy5naXQ3PWJzKHRoaXMucGllOHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksMjApLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fERpKHRoaXMuZ2l0MCksdGhpcy5naXRJbnYxPXRoaXMuZ2l0SW52MXx8RGkodGhpcy5naXQxKSx0aGlzLmdpdEludjI9dGhpcy5naXRJbnYyfHxEaSh0aGlzLmdpdDIpLHRoaXMuZ2l0SW52Mz10aGlzLmdpdEludjN8fERpKHRoaXMuZ2l0MyksdGhpcy5naXRJbnY0PXRoaXMuZ2l0SW52NHx8RGkodGhpcy5naXQ0KSx0aGlzLmdpdEludjU9dGhpcy5naXRJbnY1fHxEaSh0aGlzLmdpdDUpLHRoaXMuZ2l0SW52Nj10aGlzLmdpdEludjZ8fERpKHRoaXMuZ2l0NiksdGhpcy5naXRJbnY3PXRoaXMuZ2l0SW52N3x8RGkodGhpcy5naXQ3KSx0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmdpdEJyYW5jaExhYmVsMHx8RGkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDE9dGhpcy5naXRCcmFuY2hMYWJlbDF8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5naXRCcmFuY2hMYWJlbDJ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fERpKHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuZ2l0QnJhbmNoTGFiZWw0fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuZ2l0QnJhbmNoTGFiZWw2fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuZ2l0QnJhbmNoTGFiZWw3fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8YnModGhpcy5iYWNrZ3JvdW5kLDEyKSx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxicyh0aGlzLmJhY2tncm91bmQsMil9Y2FsY3VsYXRlKGEpe2lmKHR5cGVvZiBhIT0ib2JqZWN0Iil7dGhpcy51cGRhdGVDb2xvcnMoKTtyZXR1cm59Y29uc3QgZj1PYmplY3Qua2V5cyhhKTtmLmZvckVhY2gocD0+e3RoaXNbcF09YVtwXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksZi5mb3JFYWNoKHA9Pnt0aGlzW3BdPWFbcF19KX19O2NvbnN0IHBDZT1pPT57Y29uc3QgYT1uZXcgZ0NlO3JldHVybiBhLmNhbGN1bGF0ZShpKSxhfTtsZXQgYkNlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLnByaW1hcnlDb2xvcj0iI0VDRUNGRiIsdGhpcy5zZWNvbmRhcnlDb2xvcj14bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLnNlY29uZGFyeUNvbG9yPSIjZmZmZmRlIix0aGlzLnRlcnRpYXJ5Q29sb3I9eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPWxnKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9bGcodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9bGcodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1EaSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9RGkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1EaSh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPURpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9RGkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLmJhY2tncm91bmQ9IndoaXRlIix0aGlzLm1haW5Ca2c9IiNFQ0VDRkYiLHRoaXMuc2Vjb25kQmtnPSIjZmZmZmRlIix0aGlzLmxpbmVDb2xvcj0iIzMzMzMzMyIsdGhpcy5ib3JkZXIxPSIjOTM3MERCIix0aGlzLmJvcmRlcjI9IiNhYWFhMzMiLHRoaXMuYXJyb3doZWFkQ29sb3I9IiMzMzMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLmxhYmVsQmFja2dyb3VuZD0iI2U4ZThlOCIsdGhpcy50ZXh0Q29sb3I9IiMzMzMiLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJibGFjayIsdGhpcy5hY3RvckxpbmVDb2xvcj0iZ3JleSIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSJjYWxjdWxhdGVkIix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj0iI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ncmlkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPUZBKDEwMiwxMDIsMjU1LC40OSksdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9IiNmZmY0MDAiLHRoaXMudGFza0JvcmRlckNvbG9yPSIjNTM0ZmJjIix0aGlzLnRhc2tCa2dDb2xvcj0iIzhhOTBkZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9IndoaXRlIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImJsYWNrIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSIjNTM0ZmJjIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iI2JmYzdmZiIsdGhpcy5ncmlkQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9IiNmZjg4ODgiLHRoaXMuY3JpdEJrZ0NvbG9yPSJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9InJlZCIsdGhpcy5wZXJzb25Cb3JkZXI9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5wZXJzb25Ca2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiIsdGhpcy51cGRhdGVDb2xvcnMoKX11cGRhdGVDb2xvcnMoKXt2YXIgYSxmLHAsdyxtLGIsRSxfLEEsSSxCO3RoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KSx0aGlzWyJjU2NhbGVQZWVyMSJdPXRoaXNbImNTY2FsZVBlZXIxIl18fCRzKHRoaXMuc2Vjb25kYXJ5Q29sb3IsNDUpLHRoaXNbImNTY2FsZVBlZXIyIl09dGhpc1siY1NjYWxlUGVlcjIiXXx8JHModGhpcy50ZXJ0aWFyeUNvbG9yLDQwKTtmb3IobGV0IE49MDtOPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7TisrKXRoaXNbImNTY2FsZSIrTl09JHModGhpc1siY1NjYWxlIitOXSwxMCksdGhpc1siY1NjYWxlUGVlciIrTl09dGhpc1siY1NjYWxlUGVlciIrTl18fCRzKHRoaXNbImNTY2FsZSIrTl0sMjUpO2ZvcihsZXQgTj0wO048dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtOKyspdGhpc1siY1NjYWxlSW52IitOXT10aGlzWyJjU2NhbGVJbnYiK05dfHx4bih0aGlzWyJjU2NhbGUiK05dLHtoOjE4MH0pO2ZvcihsZXQgTj0wO048NTtOKyspdGhpc1sic3VyZmFjZSIrTl09dGhpc1sic3VyZmFjZSIrTl18fHhuKHRoaXMubWFpbkJrZyx7aDozMCxsOi0oNStOKjUpfSksdGhpc1sic3VyZmFjZVBlZXIiK05dPXRoaXNbInN1cmZhY2VQZWVyIitOXXx8eG4odGhpcy5tYWluQmtnLHtoOjMwLGw6LSg3K04qNSl9KTtpZih0aGlzLnNjYWxlTGFiZWxDb2xvcj10aGlzLnNjYWxlTGFiZWxDb2xvciE9PSJjYWxjdWxhdGVkIiYmdGhpcy5zY2FsZUxhYmVsQ29sb3I/dGhpcy5zY2FsZUxhYmVsQ29sb3I6dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmxhYmVsVGV4dENvbG9yIT09ImNhbGN1bGF0ZWQiKXt0aGlzLmNTY2FsZUxhYmVsMD10aGlzLmNTY2FsZUxhYmVsMHx8RGkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5jU2NhbGVMYWJlbDM9dGhpcy5jU2NhbGVMYWJlbDN8fERpKHRoaXMubGFiZWxUZXh0Q29sb3IpO2ZvcihsZXQgTj0wO048dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtOKyspdGhpc1siY1NjYWxlTGFiZWwiK05dPXRoaXNbImNTY2FsZUxhYmVsIitOXXx8dGhpcy5sYWJlbFRleHRDb2xvcn10aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9dGhpcy5sYWJlbEJhY2tncm91bmQsdGhpcy5hY3RvckJvcmRlcj1icyh0aGlzLmJvcmRlcjEsMjMpLHRoaXMuYWN0b3JCa2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy50ZXh0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy50ZXh0Q29sb3IsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMuYm9yZGVyMix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yPXRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc3RhdGVMYWJlbENvbG9yPXRoaXMuc3RhdGVMYWJlbENvbG9yfHx0aGlzLnN0YXRlQmtnfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5zdGF0ZUJrZz10aGlzLnN0YXRlQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcj10aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yfHx0aGlzLnN0YXRlQmtnLHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZUJhY2tncm91bmR8fHRoaXMuYmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD10aGlzLmFsdEJhY2tncm91bmR8fCIjZjBmMGYwIix0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZHx8dGhpcy5tYWluQmtnLHRoaXMuY29tcG9zaXRlQm9yZGVyPXRoaXMuY29tcG9zaXRlQm9yZGVyfHx0aGlzLm5vZGVCb3JkZXIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5ub2RlQm9yZGVyLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz14bih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9eG4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj14bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz14bih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8eG4odGhpcy50ZXJ0aWFyeUNvbG9yLHtsOi00MH0pLHRoaXMucGllND10aGlzLnBpZTR8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fHhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTMwfSksdGhpcy5waWU2PXRoaXMucGllNnx8eG4odGhpcy50ZXJ0aWFyeUNvbG9yLHtsOi0yMH0pLHRoaXMucGllNz10aGlzLnBpZTd8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTIwfSksdGhpcy5waWU4PXRoaXMucGllOHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTQwfSksdGhpcy5waWU5PXRoaXMucGllOXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTQwfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi00MH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwLGw6LTQwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotMzB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fGlUKHRoaXMucXVhZHJhbnQxRmlsbCk/YnModGhpcy5xdWFkcmFudDFGaWxsKTokcyh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjooKGE9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6YS5iYWNrZ3JvdW5kQ29sb3IpfHx0aGlzLmJhY2tncm91bmQsdGl0bGVDb2xvcjooKGY9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Zi50aXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGl0bGVDb2xvcjooKHA9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6cC54QXhpc1RpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOigodz10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDp3LnhBeGlzTGFiZWxDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpY2tDb2xvcjooKG09dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6bS54QXhpc1RpY2tDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xpbmVDb2xvcjooKGI9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Yi54QXhpc0xpbmVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6KChFPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkUueUF4aXNUaXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGFiZWxDb2xvcjooKF89dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Xy55QXhpc0xhYmVsQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaWNrQ29sb3I6KChBPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkEueUF4aXNUaWNrQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6KChJPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkkueUF4aXNMaW5lQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IscGxvdENvbG9yUGFsZXR0ZTooKEI9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Qi5wbG90Q29sb3JQYWxldHRlKXx8IiNFQ0VDRkYsIzg0OTNBNiwjRkZDM0EwLCNEQ0RERTEsI0I4RTk5NCwjRDFBMzZGLCNDM0NERTYsI0ZGQjZDMSwjNDk2MDc4LCNGOEYzRTMifSx0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMubGFiZWxCYWNrZ3JvdW5kLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuZ2l0MD10aGlzLmdpdDB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZ2l0MT10aGlzLmdpdDF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5naXQyPXRoaXMuZ2l0Mnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZ2l0Mz10aGlzLmdpdDN8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0zMH0pLHRoaXMuZ2l0ND10aGlzLmdpdDR8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLHRoaXMuZ2l0NT10aGlzLmdpdDV8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLHRoaXMuZ2l0Nj10aGlzLmdpdDZ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5naXQ3PXRoaXMuZ2l0N3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5kYXJrTW9kZT8odGhpcy5naXQwPWJzKHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPWJzKHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPWJzKHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPWJzKHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PWJzKHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PWJzKHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PWJzKHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PWJzKHRoaXMuZ2l0NywyNSkpOih0aGlzLmdpdDA9JHModGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9JHModGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9JHModGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9JHModGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9JHModGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9JHModGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9JHModGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9JHModGhpcy5naXQ3LDI1KSksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8JHMoRGkodGhpcy5naXQwKSwyNSksdGhpcy5naXRJbnYxPXRoaXMuZ2l0SW52MXx8RGkodGhpcy5naXQxKSx0aGlzLmdpdEludjI9dGhpcy5naXRJbnYyfHxEaSh0aGlzLmdpdDIpLHRoaXMuZ2l0SW52Mz10aGlzLmdpdEludjN8fERpKHRoaXMuZ2l0MyksdGhpcy5naXRJbnY0PXRoaXMuZ2l0SW52NHx8RGkodGhpcy5naXQ0KSx0aGlzLmdpdEludjU9dGhpcy5naXRJbnY1fHxEaSh0aGlzLmdpdDUpLHRoaXMuZ2l0SW52Nj10aGlzLmdpdEludjZ8fERpKHRoaXMuZ2l0NiksdGhpcy5naXRJbnY3PXRoaXMuZ2l0SW52N3x8RGkodGhpcy5naXQ3KSx0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmdpdEJyYW5jaExhYmVsMHx8RGkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDE9dGhpcy5naXRCcmFuY2hMYWJlbDF8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5naXRCcmFuY2hMYWJlbDJ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fERpKHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuZ2l0QnJhbmNoTGFiZWw0fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuZ2l0QnJhbmNoTGFiZWw2fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuZ2l0QnJhbmNoTGFiZWw3fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8d1csdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbnx8dld9Y2FsY3VsYXRlKGEpe2lmKHR5cGVvZiBhIT0ib2JqZWN0Iil7dGhpcy51cGRhdGVDb2xvcnMoKTtyZXR1cm59Y29uc3QgZj1PYmplY3Qua2V5cyhhKTtmLmZvckVhY2gocD0+e3RoaXNbcF09YVtwXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksZi5mb3JFYWNoKHA9Pnt0aGlzW3BdPWFbcF19KX19O2NvbnN0IFgxdD1pPT57Y29uc3QgYT1uZXcgYkNlO3JldHVybiBhLmNhbGN1bGF0ZShpKSxhfTtsZXQgd0NlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLnByaW1hcnlDb2xvcj0iI2NkZTQ5OCIsdGhpcy5zZWNvbmRhcnlDb2xvcj0iI2NkZmZiMiIsdGhpcy5iYWNrZ3JvdW5kPSJ3aGl0ZSIsdGhpcy5tYWluQmtnPSIjY2RlNDk4Iix0aGlzLnNlY29uZEJrZz0iI2NkZmZiMiIsdGhpcy5saW5lQ29sb3I9ImdyZWVuIix0aGlzLmJvcmRlcjE9IiMxMzU0MGMiLHRoaXMuYm9yZGVyMj0iIzZlYWE0OSIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iZ3JlZW4iLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLnRlcnRpYXJ5Q29sb3I9YnMoIiNjZGU0OTgiLDEwKSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1sZyh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPWxnKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPWxnKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9RGkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPURpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9RGkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPURpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9RGkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUPTEyLHRoaXMubm9kZUJrZz0iY2FsY3VsYXRlZCIsdGhpcy5ub2RlQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRpdGxlQ29sb3I9IiMzMzMiLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0iI2U4ZThlOCIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iYmxhY2siLHRoaXMuYWN0b3JMaW5lQ29sb3I9ImdyZXkiLHRoaXMuc2lnbmFsQ29sb3I9IiMzMzMiLHRoaXMuc2lnbmFsVGV4dENvbG9yPSIjMzMzIix0aGlzLmxhYmVsQm94QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj0iIzMyNjkzMiIsdGhpcy5sYWJlbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sb29wVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQmtnQ29sb3I9IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9IiM2NjYiLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPSIjZjRmNGY0Iix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj0iIzZlYWE0OSIsdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9IiM2ZWFhNDkiLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPSIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9IiM0ODdlM2EiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJ3aGl0ZSIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJibGFjayIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSIjZmY4ODg4Iix0aGlzLmNyaXRCa2dDb2xvcj0icmVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJyZWQiLHRoaXMucGVyc29uQm9yZGVyPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucGVyc29uQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQ29sb3I9ImJsYWNrIix0aGlzLmVycm9yQmtnQ29sb3I9IiM1NTIyMjIiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiM1NTIyMjIifXVwZGF0ZUNvbG9ycygpe3ZhciBhLGYscCx3LG0sYixFLF8sQSxJLEI7dGhpcy5hY3RvckJvcmRlcj0kcyh0aGlzLm1haW5Ca2csMjApLHRoaXMuYWN0b3JCa2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLmJvcmRlcjIsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5jU2NhbGUwPXRoaXMuY1NjYWxlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzB9KSx0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjkwfSksdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTUwfSksdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjEwfSksdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjcwfSksdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDozMDB9KSx0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMzMH0pLHRoaXNbImNTY2FsZVBlZXIxIl09dGhpc1siY1NjYWxlUGVlcjEiXXx8JHModGhpcy5zZWNvbmRhcnlDb2xvciw0NSksdGhpc1siY1NjYWxlUGVlcjIiXT10aGlzWyJjU2NhbGVQZWVyMiJdfHwkcyh0aGlzLnRlcnRpYXJ5Q29sb3IsNDApO2ZvcihsZXQgTj0wO048dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtOKyspdGhpc1siY1NjYWxlIitOXT0kcyh0aGlzWyJjU2NhbGUiK05dLDEwKSx0aGlzWyJjU2NhbGVQZWVyIitOXT10aGlzWyJjU2NhbGVQZWVyIitOXXx8JHModGhpc1siY1NjYWxlIitOXSwyNSk7Zm9yKGxldCBOPTA7Tjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO04rKyl0aGlzWyJjU2NhbGVJbnYiK05dPXRoaXNbImNTY2FsZUludiIrTl18fHhuKHRoaXNbImNTY2FsZSIrTl0se2g6MTgwfSk7dGhpcy5zY2FsZUxhYmVsQ29sb3I9dGhpcy5zY2FsZUxhYmVsQ29sb3IhPT0iY2FsY3VsYXRlZCImJnRoaXMuc2NhbGVMYWJlbENvbG9yP3RoaXMuc2NhbGVMYWJlbENvbG9yOnRoaXMubGFiZWxUZXh0Q29sb3I7Zm9yKGxldCBOPTA7Tjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO04rKyl0aGlzWyJjU2NhbGVMYWJlbCIrTl09dGhpc1siY1NjYWxlTGFiZWwiK05dfHx0aGlzLnNjYWxlTGFiZWxDb2xvcjtmb3IobGV0IE49MDtOPDU7TisrKXRoaXNbInN1cmZhY2UiK05dPXRoaXNbInN1cmZhY2UiK05dfHx4bih0aGlzLm1haW5Ca2cse2g6MzAsczotMzAsbDotKDUrTio1KX0pLHRoaXNbInN1cmZhY2VQZWVyIitOXT10aGlzWyJzdXJmYWNlUGVlciIrTl18fHhuKHRoaXMubWFpbkJrZyx7aDozMCxzOi0zMCxsOi0oOCtOKjUpfSk7dGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRhc2tCb3JkZXJDb2xvcj10aGlzLmJvcmRlcjEsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj10aGlzLnRhc2tCb3JkZXJDb2xvcix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj10aGlzLm1haW5Ca2csdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiNmMGYwZjAiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPXhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9eG4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PXhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PXhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9eG4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnBpZTI9dGhpcy5waWUyfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMucGllMz10aGlzLnBpZTN8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLnBpZTQ9dGhpcy5waWU0fHx4bih0aGlzLnByaW1hcnlDb2xvcix7bDotMzB9KSx0aGlzLnBpZTU9dGhpcy5waWU1fHx4bih0aGlzLnNlY29uZGFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNj10aGlzLnBpZTZ8fHhuKHRoaXMudGVydGlhcnlDb2xvcix7aDo0MCxsOi00MH0pLHRoaXMucGllNz10aGlzLnBpZTd8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTEwfSksdGhpcy5waWU4PXRoaXMucGllOHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTEwfSksdGhpcy5waWU5PXRoaXMucGllOXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6MH0pLHRoaXMucGllMTA9dGhpcy5waWUxMHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotNTB9KSx0aGlzLnBpZTExPXRoaXMucGllMTF8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi01MH0pLHRoaXMucGllMTI9dGhpcy5waWUxMnx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTUwfSksdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VXaWR0aD10aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VDb2xvcj10aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5xdWFkcmFudDFGaWxsPXRoaXMucXVhZHJhbnQxRmlsbHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5xdWFkcmFudDJGaWxsPXRoaXMucXVhZHJhbnQyRmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6NSxnOjUsYjo1fSksdGhpcy5xdWFkcmFudDNGaWxsPXRoaXMucXVhZHJhbnQzRmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6MTAsZzoxMCxiOjEwfSksdGhpcy5xdWFkcmFudDRGaWxsPXRoaXMucXVhZHJhbnQ0RmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6MTUsZzoxNSxiOjE1fSksdGhpcy5xdWFkcmFudDFUZXh0RmlsbD10aGlzLnF1YWRyYW50MVRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudDJUZXh0RmlsbD10aGlzLnF1YWRyYW50MlRleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTUsZzotNSxiOi01fSksdGhpcy5xdWFkcmFudDNUZXh0RmlsbD10aGlzLnF1YWRyYW50M1RleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTEwLGc6LTEwLGI6LTEwfSksdGhpcy5xdWFkcmFudDRUZXh0RmlsbD10aGlzLnF1YWRyYW50NFRleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTE1LGc6LTE1LGI6LTE1fSksdGhpcy5xdWFkcmFudFBvaW50RmlsbD10aGlzLnF1YWRyYW50UG9pbnRGaWxsfHxpVCh0aGlzLnF1YWRyYW50MUZpbGwpP2JzKHRoaXMucXVhZHJhbnQxRmlsbCk6JHModGhpcy5xdWFkcmFudDFGaWxsKSx0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbD10aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudFRpdGxlRmlsbD10aGlzLnF1YWRyYW50VGl0bGVGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy54eUNoYXJ0PXtiYWNrZ3JvdW5kQ29sb3I6KChhPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOmEuYmFja2dyb3VuZENvbG9yKXx8dGhpcy5iYWNrZ3JvdW5kLHRpdGxlQ29sb3I6KChmPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOmYudGl0bGVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpdGxlQ29sb3I6KChwPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOnAueEF4aXNUaXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGFiZWxDb2xvcjooKHc9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6dy54QXhpc0xhYmVsQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaWNrQ29sb3I6KChtPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOm0ueEF4aXNUaWNrQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMaW5lQ29sb3I6KChiPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOmIueEF4aXNMaW5lQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaXRsZUNvbG9yOigoRT10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpFLnlBeGlzVGl0bGVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xhYmVsQ29sb3I6KChfPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOl8ueUF4aXNMYWJlbENvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGlja0NvbG9yOigoQT10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpBLnlBeGlzVGlja0NvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGluZUNvbG9yOigoST10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpJLnlBeGlzTGluZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHBsb3RDb2xvclBhbGV0dGU6KChCPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkIucGxvdENvbG9yUGFsZXR0ZSl8fCIjQ0RFNDk4LCNGRjZCNkIsI0EwRDJEQiwjRDdCREUyLCNGMEYwRjAsI0ZGQzNBMCwjN0ZEOEJFLCNGRjlBOEIsI0ZBRjNFMCwjRkZGMTc2In0sdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHwiMSIsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQsdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5naXQwPXRoaXMuZ2l0MHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5naXQxPXRoaXMuZ2l0MXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmdpdDI9dGhpcy5naXQyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5naXQzPXRoaXMuZ2l0M3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksdGhpcy5naXQ0PXRoaXMuZ2l0NHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksdGhpcy5naXQ1PXRoaXMuZ2l0NXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwfSksdGhpcy5naXQ2PXRoaXMuZ2l0Nnx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmdpdDc9dGhpcy5naXQ3fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmRhcmtNb2RlPyh0aGlzLmdpdDA9YnModGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9YnModGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9YnModGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9YnModGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9YnModGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9YnModGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9YnModGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9YnModGhpcy5naXQ3LDI1KSk6KHRoaXMuZ2l0MD0kcyh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT0kcyh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj0kcyh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz0kcyh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND0kcyh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT0kcyh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj0kcyh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz0kcyh0aGlzLmdpdDcsMjUpKSx0aGlzLmdpdEludjA9dGhpcy5naXRJbnYwfHxEaSh0aGlzLmdpdDApLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fERpKHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8RGkodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHxEaSh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fERpKHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8RGkodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHxEaSh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fERpKHRoaXMuZ2l0NyksdGhpcy5naXRCcmFuY2hMYWJlbDA9dGhpcy5naXRCcmFuY2hMYWJlbDB8fERpKHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWwxPXRoaXMuZ2l0QnJhbmNoTGFiZWwxfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwyPXRoaXMuZ2l0QnJhbmNoTGFiZWwyfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwzPXRoaXMuZ2l0QnJhbmNoTGFiZWwzfHxEaSh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmdpdEJyYW5jaExhYmVsNHx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNT10aGlzLmdpdEJyYW5jaExhYmVsNXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNj10aGlzLmdpdEJyYW5jaExhYmVsNnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmdpdEJyYW5jaExhYmVsN3x8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQ29sb3I9dGhpcy50YWdMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YWdMYWJlbEJhY2tncm91bmQ9dGhpcy50YWdMYWJlbEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMudGFnTGFiZWxCb3JkZXI9dGhpcy50YWdCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFnTGFiZWxGb250U2l6ZT10aGlzLnRhZ0xhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmNvbW1pdExhYmVsQ29sb3I9dGhpcy5jb21taXRMYWJlbENvbG9yfHx0aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZD10aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZHx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNvbW1pdExhYmVsRm9udFNpemU9dGhpcy5jb21taXRMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGQ9dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGR8fHdXLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbj10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW58fHZXfWNhbGN1bGF0ZShhKXtpZih0eXBlb2YgYSE9Im9iamVjdCIpe3RoaXMudXBkYXRlQ29sb3JzKCk7cmV0dXJufWNvbnN0IGY9T2JqZWN0LmtleXMoYSk7Zi5mb3JFYWNoKHA9Pnt0aGlzW3BdPWFbcF19KSx0aGlzLnVwZGF0ZUNvbG9ycygpLGYuZm9yRWFjaChwPT57dGhpc1twXT1hW3BdfSl9fTtjb25zdCB2Q2U9aT0+e2NvbnN0IGE9bmV3IHdDZTtyZXR1cm4gYS5jYWxjdWxhdGUoaSksYX07Y2xhc3MgbUNle2NvbnN0cnVjdG9yKCl7dGhpcy5wcmltYXJ5Q29sb3I9IiNlZWUiLHRoaXMuY29udHJhc3Q9IiM3MDcwNzAiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9YnModGhpcy5jb250cmFzdCw1NSksdGhpcy5iYWNrZ3JvdW5kPSIjZmZmZmZmIix0aGlzLnRlcnRpYXJ5Q29sb3I9eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPWxnKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9bGcodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9bGcodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1EaSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9RGkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1EaSh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPURpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9RGkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLm1haW5Ca2c9IiNlZWUiLHRoaXMuc2Vjb25kQmtnPSJjYWxjdWxhdGVkIix0aGlzLmxpbmVDb2xvcj0iIzY2NiIsdGhpcy5ib3JkZXIxPSIjOTk5Iix0aGlzLmJvcmRlcjI9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZT0iI2ZmYSIsdGhpcy50ZXh0PSIjMzMzIix0aGlzLmNyaXRpY2FsPSIjZDQyIix0aGlzLmRvbmU9IiNiYmIiLHRoaXMuYXJyb3doZWFkQ29sb3I9IiMzMzMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLlRIRU1FX0NPTE9SX0xJTUlUPTEyLHRoaXMubm9kZUJrZz0iY2FsY3VsYXRlZCIsdGhpcy5ub2RlQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRpdGxlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0id2hpdGUiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2lnbmFsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2lnbmFsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sb29wVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZVRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9IiM2NjYiLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPSIjZjRmNGY0Iix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9ImNhbGN1bGF0ZWQiLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPSIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJ3aGl0ZSIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ncmlkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMucGVyc29uQm9yZGVyPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucGVyc29uQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQ29sb3I9ImJsYWNrIix0aGlzLmVycm9yQmtnQ29sb3I9IiM1NTIyMjIiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiM1NTIyMjIifXVwZGF0ZUNvbG9ycygpe3ZhciBhLGYscCx3LG0sYixFLF8sQSxJLEI7dGhpcy5zZWNvbmRCa2c9YnModGhpcy5jb250cmFzdCw1NSksdGhpcy5ib3JkZXIyPXRoaXMuY29udHJhc3QsdGhpcy5hY3RvckJvcmRlcj1icyh0aGlzLmJvcmRlcjEsMjMpLHRoaXMuYWN0b3JCa2c9dGhpcy5tYWluQmtnLHRoaXMuYWN0b3JUZXh0Q29sb3I9dGhpcy50ZXh0LHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5zaWduYWxDb2xvcj10aGlzLnRleHQsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy50ZXh0LHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy50ZXh0LHRoaXMubG9vcFRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5ub3RlQm9yZGVyQ29sb3I9IiM5OTkiLHRoaXMubm90ZUJrZ0NvbG9yPSIjNjY2Iix0aGlzLm5vdGVUZXh0Q29sb3I9IiNmZmYiLHRoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fCIjNTU1Iix0aGlzLmNTY2FsZTE9dGhpcy5jU2NhbGUxfHwiI0Y0RjRGNCIsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8IiM1NTUiLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fCIjQkJCIix0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHwiIzc3NyIsdGhpcy5jU2NhbGU1PXRoaXMuY1NjYWxlNXx8IiM5OTkiLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fCIjREREIix0aGlzLmNTY2FsZTc9dGhpcy5jU2NhbGU3fHwiI0ZGRiIsdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8IiNEREQiLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fCIjQkJCIix0aGlzLmNTY2FsZTEwPXRoaXMuY1NjYWxlMTB8fCIjOTk5Iix0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fCIjNzc3Ijtmb3IobGV0IE49MDtOPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7TisrKXRoaXNbImNTY2FsZUludiIrTl09dGhpc1siY1NjYWxlSW52IitOXXx8RGkodGhpc1siY1NjYWxlIitOXSk7Zm9yKGxldCBOPTA7Tjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO04rKyl0aGlzLmRhcmtNb2RlP3RoaXNbImNTY2FsZVBlZXIiK05dPXRoaXNbImNTY2FsZVBlZXIiK05dfHxicyh0aGlzWyJjU2NhbGUiK05dLDEwKTp0aGlzWyJjU2NhbGVQZWVyIitOXT10aGlzWyJjU2NhbGVQZWVyIitOXXx8JHModGhpc1siY1NjYWxlIitOXSwxMCk7dGhpcy5zY2FsZUxhYmVsQ29sb3I9dGhpcy5zY2FsZUxhYmVsQ29sb3J8fCh0aGlzLmRhcmtNb2RlPyJibGFjayI6dGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5jU2NhbGVMYWJlbDA9dGhpcy5jU2NhbGVMYWJlbDB8fHRoaXMuY1NjYWxlMSx0aGlzLmNTY2FsZUxhYmVsMj10aGlzLmNTY2FsZUxhYmVsMnx8dGhpcy5jU2NhbGUxO2ZvcihsZXQgTj0wO048dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtOKyspdGhpc1siY1NjYWxlTGFiZWwiK05dPXRoaXNbImNTY2FsZUxhYmVsIitOXXx8dGhpcy5zY2FsZUxhYmVsQ29sb3I7Zm9yKGxldCBOPTA7Tjw1O04rKyl0aGlzWyJzdXJmYWNlIitOXT10aGlzWyJzdXJmYWNlIitOXXx8eG4odGhpcy5tYWluQmtnLHtsOi0oNStOKjUpfSksdGhpc1sic3VyZmFjZVBlZXIiK05dPXRoaXNbInN1cmZhY2VQZWVyIitOXXx8eG4odGhpcy5tYWluQmtnLHtsOi0oOCtOKjUpfSk7dGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRpdGxlQ29sb3I9dGhpcy50ZXh0LHRoaXMuc2VjdGlvbkJrZ0NvbG9yPWJzKHRoaXMuY29udHJhc3QsMzApLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj1icyh0aGlzLmNvbnRyYXN0LDMwKSx0aGlzLnRhc2tCb3JkZXJDb2xvcj0kcyh0aGlzLmNvbnRyYXN0LDEwKSx0aGlzLnRhc2tCa2dDb2xvcj10aGlzLmNvbnRyYXN0LHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMudGV4dCx0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9dGhpcy50YXNrQm9yZGVyQ29sb3IsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQmtnLHRoaXMuZ3JpZENvbG9yPWJzKHRoaXMuYm9yZGVyMSwzMCksdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMuZG9uZSx0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5jcml0QmtnQ29sb3I9dGhpcy5jcml0aWNhbCx0aGlzLmNyaXRCb3JkZXJDb2xvcj0kcyh0aGlzLmNyaXRCa2dDb2xvciwxMCksdGhpcy50b2RheUxpbmVDb2xvcj10aGlzLmNyaXRCa2dDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8IiMwMDAiLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiNmNGY0ZjQiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5zdGF0ZUJvcmRlcj10aGlzLnN0YXRlQm9yZGVyfHwiIzAwMCIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj0iIzIyMiIsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj14bih0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPXhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND14bih0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT14bih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PXhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PXhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSk7Zm9yKGxldCBOPTA7Tjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO04rKyl0aGlzWyJwaWUiK05dPXRoaXNbImNTY2FsZSIrTl07dGhpcy5waWUxMj10aGlzLnBpZTAsdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VXaWR0aD10aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VDb2xvcj10aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5xdWFkcmFudDFGaWxsPXRoaXMucXVhZHJhbnQxRmlsbHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5xdWFkcmFudDJGaWxsPXRoaXMucXVhZHJhbnQyRmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6NSxnOjUsYjo1fSksdGhpcy5xdWFkcmFudDNGaWxsPXRoaXMucXVhZHJhbnQzRmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6MTAsZzoxMCxiOjEwfSksdGhpcy5xdWFkcmFudDRGaWxsPXRoaXMucXVhZHJhbnQ0RmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6MTUsZzoxNSxiOjE1fSksdGhpcy5xdWFkcmFudDFUZXh0RmlsbD10aGlzLnF1YWRyYW50MVRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudDJUZXh0RmlsbD10aGlzLnF1YWRyYW50MlRleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTUsZzotNSxiOi01fSksdGhpcy5xdWFkcmFudDNUZXh0RmlsbD10aGlzLnF1YWRyYW50M1RleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTEwLGc6LTEwLGI6LTEwfSksdGhpcy5xdWFkcmFudDRUZXh0RmlsbD10aGlzLnF1YWRyYW50NFRleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTE1LGc6LTE1LGI6LTE1fSksdGhpcy5xdWFkcmFudFBvaW50RmlsbD10aGlzLnF1YWRyYW50UG9pbnRGaWxsfHxpVCh0aGlzLnF1YWRyYW50MUZpbGwpP2JzKHRoaXMucXVhZHJhbnQxRmlsbCk6JHModGhpcy5xdWFkcmFudDFGaWxsKSx0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbD10aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudFRpdGxlRmlsbD10aGlzLnF1YWRyYW50VGl0bGVGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy54eUNoYXJ0PXtiYWNrZ3JvdW5kQ29sb3I6KChhPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOmEuYmFja2dyb3VuZENvbG9yKXx8dGhpcy5iYWNrZ3JvdW5kLHRpdGxlQ29sb3I6KChmPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOmYudGl0bGVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpdGxlQ29sb3I6KChwPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOnAueEF4aXNUaXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGFiZWxDb2xvcjooKHc9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6dy54QXhpc0xhYmVsQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaWNrQ29sb3I6KChtPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOm0ueEF4aXNUaWNrQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMaW5lQ29sb3I6KChiPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOmIueEF4aXNMaW5lQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaXRsZUNvbG9yOigoRT10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpFLnlBeGlzVGl0bGVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xhYmVsQ29sb3I6KChfPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOl8ueUF4aXNMYWJlbENvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGlja0NvbG9yOigoQT10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpBLnlBeGlzVGlja0NvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGluZUNvbG9yOigoST10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpJLnlBeGlzTGluZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHBsb3RDb2xvclBhbGV0dGU6KChCPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkIucGxvdENvbG9yUGFsZXR0ZSl8fCIjRUVFLCM2QkI4RTQsIzhBQ0I4OCwjQzdBQ0Q2LCNFOERDQzIsI0ZGQjJBOCwjRkZGMzgwLCM3RThEOTEsI0ZGRDhCMSwjRkFGM0UwIn0sdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHwiMSIsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQsdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5naXQwPSRzKHRoaXMucGllMSwyNSl8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZ2l0MT10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5naXQyPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZ2l0Mz10aGlzLnBpZTR8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0zMH0pLHRoaXMuZ2l0ND10aGlzLnBpZTV8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLHRoaXMuZ2l0NT10aGlzLnBpZTZ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLHRoaXMuZ2l0Nj10aGlzLnBpZTd8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5naXQ3PXRoaXMucGllOHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8RGkodGhpcy5naXQwKSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHxEaSh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fERpKHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8RGkodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHxEaSh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fERpKHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8RGkodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHxEaSh0aGlzLmdpdDcpLHRoaXMuYnJhbmNoTGFiZWxDb2xvcj10aGlzLmJyYW5jaExhYmVsQ29sb3J8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDA9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwxPSJ3aGl0ZSIsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwzPSJ3aGl0ZSIsdGhpcy5naXRCcmFuY2hMYWJlbDQ9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNj10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDc9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8d1csdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbnx8dld9Y2FsY3VsYXRlKGEpe2lmKHR5cGVvZiBhIT0ib2JqZWN0Iil7dGhpcy51cGRhdGVDb2xvcnMoKTtyZXR1cm59Y29uc3QgZj1PYmplY3Qua2V5cyhhKTtmLmZvckVhY2gocD0+e3RoaXNbcF09YVtwXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksZi5mb3JFYWNoKHA9Pnt0aGlzW3BdPWFbcF19KX19Y29uc3QgVDU9e2Jhc2U6e2dldFRoZW1lVmFyaWFibGVzOmRDZX0sZGFyazp7Z2V0VGhlbWVWYXJpYWJsZXM6cENlfSxkZWZhdWx0OntnZXRUaGVtZVZhcmlhYmxlczpYMXR9LGZvcmVzdDp7Z2V0VGhlbWVWYXJpYWJsZXM6dkNlfSxuZXV0cmFsOntnZXRUaGVtZVZhcmlhYmxlczppPT57Y29uc3QgYT1uZXcgbUNlO3JldHVybiBhLmNhbGN1bGF0ZShpKSxhfX19LEM1PXtmbG93Y2hhcnQ6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpYWdyYW1QYWRkaW5nOjgsaHRtbExhYmVsczohMCxub2RlU3BhY2luZzo1MCxyYW5rU3BhY2luZzo1MCxjdXJ2ZToiYmFzaXMiLHBhZGRpbmc6MTUsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS13cmFwcGVyIix3cmFwcGluZ1dpZHRoOjIwMH0sc2VxdWVuY2U6e3VzZU1heFdpZHRoOiEwLGhpZGVVbnVzZWRQYXJ0aWNpcGFudHM6ITEsYWN0aXZhdGlvbldpZHRoOjEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGFjdG9yTWFyZ2luOjUwLHdpZHRoOjE1MCxoZWlnaHQ6NjUsYm94TWFyZ2luOjEwLGJveFRleHRNYXJnaW46NSxub3RlTWFyZ2luOjEwLG1lc3NhZ2VNYXJnaW46MzUsbWVzc2FnZUFsaWduOiJjZW50ZXIiLG1pcnJvckFjdG9yczohMCxmb3JjZU1lbnVzOiExLGJvdHRvbU1hcmdpbkFkajoxLHJpZ2h0QW5nbGVzOiExLHNob3dTZXF1ZW5jZU51bWJlcnM6ITEsYWN0b3JGb250U2l6ZToxNCxhY3RvckZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxhY3RvckZvbnRXZWlnaHQ6NDAwLG5vdGVGb250U2l6ZToxNCxub3RlRm9udEZhbWlseTonInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxub3RlRm9udFdlaWdodDo0MDAsbm90ZUFsaWduOiJjZW50ZXIiLG1lc3NhZ2VGb250U2l6ZToxNixtZXNzYWdlRm9udEZhbWlseTonInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxtZXNzYWdlRm9udFdlaWdodDo0MDAsd3JhcDohMSx3cmFwUGFkZGluZzoxMCxsYWJlbEJveFdpZHRoOjUwLGxhYmVsQm94SGVpZ2h0OjIwfSxnYW50dDp7dXNlTWF4V2lkdGg6ITAsdGl0bGVUb3BNYXJnaW46MjUsYmFySGVpZ2h0OjIwLGJhckdhcDo0LHRvcFBhZGRpbmc6NTAscmlnaHRQYWRkaW5nOjc1LGxlZnRQYWRkaW5nOjc1LGdyaWRMaW5lU3RhcnRQYWRkaW5nOjM1LGZvbnRTaXplOjExLHNlY3Rpb25Gb250U2l6ZToxMSxudW1iZXJTZWN0aW9uU3R5bGVzOjQsYXhpc0Zvcm1hdDoiJVktJW0tJWQiLHRvcEF4aXM6ITEsZGlzcGxheU1vZGU6IiIsd2Vla2RheToic3VuZGF5In0sam91cm5leTp7dXNlTWF4V2lkdGg6ITAsZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsbGVmdE1hcmdpbjoxNTAsd2lkdGg6MTUwLGhlaWdodDo1MCxib3hNYXJnaW46MTAsYm94VGV4dE1hcmdpbjo1LG5vdGVNYXJnaW46MTAsbWVzc2FnZU1hcmdpbjozNSxtZXNzYWdlQWxpZ246ImNlbnRlciIsYm90dG9tTWFyZ2luQWRqOjEscmlnaHRBbmdsZXM6ITEsdGFza0ZvbnRTaXplOjE0LHRhc2tGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsdGFza01hcmdpbjo1MCxhY3RpdmF0aW9uV2lkdGg6MTAsdGV4dFBsYWNlbWVudDoiZm8iLGFjdG9yQ29sb3VyczpbIiM4RkJDOEYiLCIjN0NGQzAwIiwiIzAwRkZGRiIsIiMyMEIyQUEiLCIjQjBFMEU2IiwiI0ZGRkZFMCJdLHNlY3Rpb25GaWxsczpbIiMxOTE5NzAiLCIjOEIwMDhCIiwiIzRCMDA4MiIsIiMyRjRGNEYiLCIjODAwMDAwIiwiIzhCNDUxMyIsIiMwMDAwOEIiXSxzZWN0aW9uQ29sb3VyczpbIiNmZmYiXX0sY2xhc3M6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGFycm93TWFya2VyQWJzb2x1dGU6ITEsZGl2aWRlck1hcmdpbjoxMCxwYWRkaW5nOjUsdGV4dEhlaWdodDoxMCxkZWZhdWx0UmVuZGVyZXI6ImRhZ3JlLXdyYXBwZXIiLGh0bWxMYWJlbHM6ITF9LHN0YXRlOnt1c2VNYXhXaWR0aDohMCx0aXRsZVRvcE1hcmdpbjoyNSxkaXZpZGVyTWFyZ2luOjEwLHNpemVVbml0OjUscGFkZGluZzo4LHRleHRIZWlnaHQ6MTAsdGl0bGVTaGlmdDotMTUsbm90ZU1hcmdpbjoxMCxmb3JrV2lkdGg6NzAsZm9ya0hlaWdodDo3LG1pbmlQYWRkaW5nOjIsZm9udFNpemVGYWN0b3I6NS4wMixmb250U2l6ZToyNCxsYWJlbEhlaWdodDoxNixlZGdlTGVuZ3RoRmFjdG9yOiIyMCIsY29tcG9zaXRUaXRsZVNpemU6MzUscmFkaXVzOjUsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS13cmFwcGVyIn0sZXI6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpYWdyYW1QYWRkaW5nOjIwLGxheW91dERpcmVjdGlvbjoiVEIiLG1pbkVudGl0eVdpZHRoOjEwMCxtaW5FbnRpdHlIZWlnaHQ6NzUsZW50aXR5UGFkZGluZzoxNSxzdHJva2U6ImdyYXkiLGZpbGw6ImhvbmV5ZGV3Iixmb250U2l6ZToxMn0scGllOnt1c2VNYXhXaWR0aDohMCx0ZXh0UG9zaXRpb246Ljc1fSxxdWFkcmFudENoYXJ0Ont1c2VNYXhXaWR0aDohMCxjaGFydFdpZHRoOjUwMCxjaGFydEhlaWdodDo1MDAsdGl0bGVGb250U2l6ZToyMCx0aXRsZVBhZGRpbmc6MTAscXVhZHJhbnRQYWRkaW5nOjUseEF4aXNMYWJlbFBhZGRpbmc6NSx5QXhpc0xhYmVsUGFkZGluZzo1LHhBeGlzTGFiZWxGb250U2l6ZToxNix5QXhpc0xhYmVsRm9udFNpemU6MTYscXVhZHJhbnRMYWJlbEZvbnRTaXplOjE2LHF1YWRyYW50VGV4dFRvcFBhZGRpbmc6NSxwb2ludFRleHRQYWRkaW5nOjUscG9pbnRMYWJlbEZvbnRTaXplOjEyLHBvaW50UmFkaXVzOjUseEF4aXNQb3NpdGlvbjoidG9wIix5QXhpc1Bvc2l0aW9uOiJsZWZ0IixxdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6MSxxdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6Mn0seHlDaGFydDp7dXNlTWF4V2lkdGg6ITAsd2lkdGg6NzAwLGhlaWdodDo1MDAsdGl0bGVGb250U2l6ZToyMCx0aXRsZVBhZGRpbmc6MTAsc2hvd1RpdGxlOiEwLHhBeGlzOnskcmVmOiIjLyRkZWZzL1hZQ2hhcnRBeGlzQ29uZmlnIixzaG93TGFiZWw6ITAsbGFiZWxGb250U2l6ZToxNCxsYWJlbFBhZGRpbmc6NSxzaG93VGl0bGU6ITAsdGl0bGVGb250U2l6ZToxNix0aXRsZVBhZGRpbmc6NSxzaG93VGljazohMCx0aWNrTGVuZ3RoOjUsdGlja1dpZHRoOjIsc2hvd0F4aXNMaW5lOiEwLGF4aXNMaW5lV2lkdGg6Mn0seUF4aXM6eyRyZWY6IiMvJGRlZnMvWFlDaGFydEF4aXNDb25maWciLHNob3dMYWJlbDohMCxsYWJlbEZvbnRTaXplOjE0LGxhYmVsUGFkZGluZzo1LHNob3dUaXRsZTohMCx0aXRsZUZvbnRTaXplOjE2LHRpdGxlUGFkZGluZzo1LHNob3dUaWNrOiEwLHRpY2tMZW5ndGg6NSx0aWNrV2lkdGg6MixzaG93QXhpc0xpbmU6ITAsYXhpc0xpbmVXaWR0aDoyfSxjaGFydE9yaWVudGF0aW9uOiJ2ZXJ0aWNhbCIscGxvdFJlc2VydmVkU3BhY2VQZXJjZW50OjUwfSxyZXF1aXJlbWVudDp7dXNlTWF4V2lkdGg6ITAscmVjdF9maWxsOiIjZjlmOWY5Iix0ZXh0X2NvbG9yOiIjMzMzIixyZWN0X2JvcmRlcl9zaXplOiIwLjVweCIscmVjdF9ib3JkZXJfY29sb3I6IiNiYmIiLHJlY3RfbWluX3dpZHRoOjIwMCxyZWN0X21pbl9oZWlnaHQ6MjAwLGZvbnRTaXplOjE0LHJlY3RfcGFkZGluZzoxMCxsaW5lX2hlaWdodDoyMH0sbWluZG1hcDp7dXNlTWF4V2lkdGg6ITAscGFkZGluZzoxMCxtYXhOb2RlV2lkdGg6MjAwfSx0aW1lbGluZTp7dXNlTWF4V2lkdGg6ITAsZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsbGVmdE1hcmdpbjoxNTAsd2lkdGg6MTUwLGhlaWdodDo1MCxib3hNYXJnaW46MTAsYm94VGV4dE1hcmdpbjo1LG5vdGVNYXJnaW46MTAsbWVzc2FnZU1hcmdpbjozNSxtZXNzYWdlQWxpZ246ImNlbnRlciIsYm90dG9tTWFyZ2luQWRqOjEscmlnaHRBbmdsZXM6ITEsdGFza0ZvbnRTaXplOjE0LHRhc2tGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsdGFza01hcmdpbjo1MCxhY3RpdmF0aW9uV2lkdGg6MTAsdGV4dFBsYWNlbWVudDoiZm8iLGFjdG9yQ29sb3VyczpbIiM4RkJDOEYiLCIjN0NGQzAwIiwiIzAwRkZGRiIsIiMyMEIyQUEiLCIjQjBFMEU2IiwiI0ZGRkZFMCJdLHNlY3Rpb25GaWxsczpbIiMxOTE5NzAiLCIjOEIwMDhCIiwiIzRCMDA4MiIsIiMyRjRGNEYiLCIjODAwMDAwIiwiIzhCNDUxMyIsIiMwMDAwOEIiXSxzZWN0aW9uQ29sb3VyczpbIiNmZmYiXSxkaXNhYmxlTXVsdGljb2xvcjohMX0sZ2l0R3JhcGg6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpYWdyYW1QYWRkaW5nOjgsbm9kZUxhYmVsOnt3aWR0aDo3NSxoZWlnaHQ6MTAwLHg6LTI1LHk6MH0sbWFpbkJyYW5jaE5hbWU6Im1haW4iLG1haW5CcmFuY2hPcmRlcjowLHNob3dDb21taXRMYWJlbDohMCxzaG93QnJhbmNoZXM6ITAscm90YXRlQ29tbWl0TGFiZWw6ITAsYXJyb3dNYXJrZXJBYnNvbHV0ZTohMX0sYzQ6e3VzZU1heFdpZHRoOiEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGM0U2hhcGVNYXJnaW46NTAsYzRTaGFwZVBhZGRpbmc6MjAsd2lkdGg6MjE2LGhlaWdodDo2MCxib3hNYXJnaW46MTAsYzRTaGFwZUluUm93OjQsbmV4dExpbmVQYWRkaW5nWDowLGM0Qm91bmRhcnlJblJvdzoyLHBlcnNvbkZvbnRTaXplOjE0LHBlcnNvbkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxwZXJzb25Gb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3BlcnNvbkZvbnRTaXplOjE0LGV4dGVybmFsX3BlcnNvbkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9wZXJzb25Gb250V2VpZ2h0OiJub3JtYWwiLHN5c3RlbUZvbnRTaXplOjE0LHN5c3RlbUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxzeXN0ZW1Gb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3N5c3RlbUZvbnRTaXplOjE0LGV4dGVybmFsX3N5c3RlbUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9zeXN0ZW1Gb250V2VpZ2h0OiJub3JtYWwiLHN5c3RlbV9kYkZvbnRTaXplOjE0LHN5c3RlbV9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxzeXN0ZW1fZGJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3N5c3RlbV9kYkZvbnRTaXplOjE0LGV4dGVybmFsX3N5c3RlbV9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9zeXN0ZW1fZGJGb250V2VpZ2h0OiJub3JtYWwiLHN5c3RlbV9xdWV1ZUZvbnRTaXplOjE0LHN5c3RlbV9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxzeXN0ZW1fcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRTaXplOjE0LGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGJvdW5kYXJ5Rm9udFNpemU6MTQsYm91bmRhcnlGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsYm91bmRhcnlGb250V2VpZ2h0OiJub3JtYWwiLG1lc3NhZ2VGb250U2l6ZToxMixtZXNzYWdlRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLG1lc3NhZ2VGb250V2VpZ2h0OiJub3JtYWwiLGNvbnRhaW5lckZvbnRTaXplOjE0LGNvbnRhaW5lckZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb250YWluZXJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbnRhaW5lckZvbnRTaXplOjE0LGV4dGVybmFsX2NvbnRhaW5lckZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb250YWluZXJGb250V2VpZ2h0OiJub3JtYWwiLGNvbnRhaW5lcl9kYkZvbnRTaXplOjE0LGNvbnRhaW5lcl9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb250YWluZXJfZGJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRTaXplOjE0LGV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb250YWluZXJfZGJGb250V2VpZ2h0OiJub3JtYWwiLGNvbnRhaW5lcl9xdWV1ZUZvbnRTaXplOjE0LGNvbnRhaW5lcl9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb250YWluZXJfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRTaXplOjE0LGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGNvbXBvbmVudEZvbnRTaXplOjE0LGNvbXBvbmVudEZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb21wb25lbnRGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbXBvbmVudEZvbnRTaXplOjE0LGV4dGVybmFsX2NvbXBvbmVudEZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb21wb25lbnRGb250V2VpZ2h0OiJub3JtYWwiLGNvbXBvbmVudF9kYkZvbnRTaXplOjE0LGNvbXBvbmVudF9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb21wb25lbnRfZGJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRTaXplOjE0LGV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb21wb25lbnRfZGJGb250V2VpZ2h0OiJub3JtYWwiLGNvbXBvbmVudF9xdWV1ZUZvbnRTaXplOjE0LGNvbXBvbmVudF9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb21wb25lbnRfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRTaXplOjE0LGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLHdyYXA6ITAsd3JhcFBhZGRpbmc6MTAscGVyc29uX2JnX2NvbG9yOiIjMDg0MjdCIixwZXJzb25fYm9yZGVyX2NvbG9yOiIjMDczQjZGIixleHRlcm5hbF9wZXJzb25fYmdfY29sb3I6IiM2ODY4NjgiLGV4dGVybmFsX3BlcnNvbl9ib3JkZXJfY29sb3I6IiM4QThBOEEiLHN5c3RlbV9iZ19jb2xvcjoiIzExNjhCRCIsc3lzdGVtX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsc3lzdGVtX2RiX2JnX2NvbG9yOiIjMTE2OEJEIixzeXN0ZW1fZGJfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixzeXN0ZW1fcXVldWVfYmdfY29sb3I6IiMxMTY4QkQiLHN5c3RlbV9xdWV1ZV9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLGV4dGVybmFsX3N5c3RlbV9iZ19jb2xvcjoiIzk5OTk5OSIsZXh0ZXJuYWxfc3lzdGVtX2JvcmRlcl9jb2xvcjoiIzhBOEE4QSIsZXh0ZXJuYWxfc3lzdGVtX2RiX2JnX2NvbG9yOiIjOTk5OTk5IixleHRlcm5hbF9zeXN0ZW1fZGJfYm9yZGVyX2NvbG9yOiIjOEE4QThBIixleHRlcm5hbF9zeXN0ZW1fcXVldWVfYmdfY29sb3I6IiM5OTk5OTkiLGV4dGVybmFsX3N5c3RlbV9xdWV1ZV9ib3JkZXJfY29sb3I6IiM4QThBOEEiLGNvbnRhaW5lcl9iZ19jb2xvcjoiIzQzOERENSIsY29udGFpbmVyX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsY29udGFpbmVyX2RiX2JnX2NvbG9yOiIjNDM4REQ1Iixjb250YWluZXJfZGJfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixjb250YWluZXJfcXVldWVfYmdfY29sb3I6IiM0MzhERDUiLGNvbnRhaW5lcl9xdWV1ZV9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLGV4dGVybmFsX2NvbnRhaW5lcl9iZ19jb2xvcjoiI0IzQjNCMyIsZXh0ZXJuYWxfY29udGFpbmVyX2JvcmRlcl9jb2xvcjoiI0E2QTZBNiIsZXh0ZXJuYWxfY29udGFpbmVyX2RiX2JnX2NvbG9yOiIjQjNCM0IzIixleHRlcm5hbF9jb250YWluZXJfZGJfYm9yZGVyX2NvbG9yOiIjQTZBNkE2IixleHRlcm5hbF9jb250YWluZXJfcXVldWVfYmdfY29sb3I6IiNCM0IzQjMiLGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZV9ib3JkZXJfY29sb3I6IiNBNkE2QTYiLGNvbXBvbmVudF9iZ19jb2xvcjoiIzg1QkJGMCIsY29tcG9uZW50X2JvcmRlcl9jb2xvcjoiIzc4QThEOCIsY29tcG9uZW50X2RiX2JnX2NvbG9yOiIjODVCQkYwIixjb21wb25lbnRfZGJfYm9yZGVyX2NvbG9yOiIjNzhBOEQ4Iixjb21wb25lbnRfcXVldWVfYmdfY29sb3I6IiM4NUJCRjAiLGNvbXBvbmVudF9xdWV1ZV9ib3JkZXJfY29sb3I6IiM3OEE4RDgiLGV4dGVybmFsX2NvbXBvbmVudF9iZ19jb2xvcjoiI0NDQ0NDQyIsZXh0ZXJuYWxfY29tcG9uZW50X2JvcmRlcl9jb2xvcjoiI0JGQkZCRiIsZXh0ZXJuYWxfY29tcG9uZW50X2RiX2JnX2NvbG9yOiIjQ0NDQ0NDIixleHRlcm5hbF9jb21wb25lbnRfZGJfYm9yZGVyX2NvbG9yOiIjQkZCRkJGIixleHRlcm5hbF9jb21wb25lbnRfcXVldWVfYmdfY29sb3I6IiNDQ0NDQ0MiLGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZV9ib3JkZXJfY29sb3I6IiNCRkJGQkYifSxzYW5rZXk6e3VzZU1heFdpZHRoOiEwLHdpZHRoOjYwMCxoZWlnaHQ6NDAwLGxpbmtDb2xvcjoiZ3JhZGllbnQiLG5vZGVBbGlnbm1lbnQ6Imp1c3RpZnkiLHNob3dWYWx1ZXM6ITAscHJlZml4OiIiLHN1ZmZpeDoiIn0sdGhlbWU6ImRlZmF1bHQiLG1heFRleHRTaXplOjVlNCxkYXJrTW9kZTohMSxmb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7Jyxsb2dMZXZlbDo1LHNlY3VyaXR5TGV2ZWw6InN0cmljdCIsc3RhcnRPbkxvYWQ6ITAsYXJyb3dNYXJrZXJBYnNvbHV0ZTohMSxzZWN1cmU6WyJzZWN1cmUiLCJzZWN1cml0eUxldmVsIiwic3RhcnRPbkxvYWQiLCJtYXhUZXh0U2l6ZSJdLGRldGVybWluaXN0aWNJZHM6ITEsZm9udFNpemU6MTZ9LGlJdD17Li4uQzUsZGV0ZXJtaW5pc3RpY0lEU2VlZDp2b2lkIDAsdGhlbWVDU1M6dm9pZCAwLHRoZW1lVmFyaWFibGVzOlQ1LmRlZmF1bHQuZ2V0VGhlbWVWYXJpYWJsZXMoKSxzZXF1ZW5jZTp7Li4uQzUuc2VxdWVuY2UsbWVzc2FnZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5tZXNzYWdlRm9udFdlaWdodH19LG5vdGVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5ub3RlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLm5vdGVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMubm90ZUZvbnRXZWlnaHR9fSxhY3RvckZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmFjdG9yRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmFjdG9yRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmFjdG9yRm9udFdlaWdodH19fSxnYW50dDp7Li4uQzUuZ2FudHQsdGlja0ludGVydmFsOnZvaWQgMCx1c2VXaWR0aDp2b2lkIDB9LGM0OnsuLi5DNS5jNCx1c2VXaWR0aDp2b2lkIDAscGVyc29uRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMucGVyc29uRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnBlcnNvbkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5wZXJzb25Gb250V2VpZ2h0fX0sZXh0ZXJuYWxfcGVyc29uRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfcGVyc29uRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3BlcnNvbkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9wZXJzb25Gb250V2VpZ2h0fX0sc3lzdGVtRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuc3lzdGVtRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnN5c3RlbUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5zeXN0ZW1Gb250V2VpZ2h0fX0sZXh0ZXJuYWxfc3lzdGVtRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfc3lzdGVtRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3N5c3RlbUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250V2VpZ2h0fX0sc3lzdGVtX2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuc3lzdGVtX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnN5c3RlbV9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5zeXN0ZW1fZGJGb250V2VpZ2h0fX0sZXh0ZXJuYWxfc3lzdGVtX2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfc3lzdGVtX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3N5c3RlbV9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9zeXN0ZW1fZGJGb250V2VpZ2h0fX0sc3lzdGVtX3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuc3lzdGVtX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnN5c3RlbV9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5zeXN0ZW1fcXVldWVGb250V2VpZ2h0fX0sZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9zeXN0ZW1fcXVldWVGb250V2VpZ2h0fX0sY29udGFpbmVyRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29udGFpbmVyRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbnRhaW5lckZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb250YWluZXJGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29udGFpbmVyRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lckZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb250YWluZXJGb250V2VpZ2h0fX0sY29udGFpbmVyX2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29udGFpbmVyX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbnRhaW5lcl9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb250YWluZXJfZGJGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb250YWluZXJfZGJGb250V2VpZ2h0fX0sY29udGFpbmVyX3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29udGFpbmVyX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbnRhaW5lcl9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb250YWluZXJfcXVldWVGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb250YWluZXJfcXVldWVGb250V2VpZ2h0fX0sY29tcG9uZW50Rm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29tcG9uZW50Rm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbXBvbmVudEZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb21wb25lbnRGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29tcG9uZW50Rm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50Rm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudEZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250V2VpZ2h0fX0sY29tcG9uZW50X2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29tcG9uZW50X2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbXBvbmVudF9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb21wb25lbnRfZGJGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfZGJGb250V2VpZ2h0fX0sY29tcG9uZW50X3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29tcG9uZW50X3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbXBvbmVudF9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb21wb25lbnRfcXVldWVGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250V2VpZ2h0fX0sYm91bmRhcnlGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5ib3VuZGFyeUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5ib3VuZGFyeUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5ib3VuZGFyeUZvbnRXZWlnaHR9fSxtZXNzYWdlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMubWVzc2FnZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5tZXNzYWdlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLm1lc3NhZ2VGb250V2VpZ2h0fX19LHBpZTp7Li4uQzUucGllLHVzZVdpZHRoOjk4NH0seHlDaGFydDp7Li4uQzUueHlDaGFydCx1c2VXaWR0aDp2b2lkIDB9LHJlcXVpcmVtZW50OnsuLi5DNS5yZXF1aXJlbWVudCx1c2VXaWR0aDp2b2lkIDB9LGdpdEdyYXBoOnsuLi5DNS5naXRHcmFwaCx1c2VNYXhXaWR0aDohMX0sc2Fua2V5OnsuLi5DNS5zYW5rZXksdXNlTWF4V2lkdGg6ITF9fSxzSXQ9KGksYT0iIik9Pk9iamVjdC5rZXlzKGkpLnJlZHVjZSgoZixwKT0+QXJyYXkuaXNBcnJheShpW3BdKT9mOnR5cGVvZiBpW3BdPT0ib2JqZWN0IiYmaVtwXSE9PW51bGw/Wy4uLmYsYStwLC4uLnNJdChpW3BdLCIiKV06Wy4uLmYsYStwXSxbXSkseUNlPW5ldyBTZXQoc0l0KGlJdCwiIikpLFpoPWlJdCxtVz1pPT57aWYoVXQuZGVidWcoInNhbml0aXplRGlyZWN0aXZlIGNhbGxlZCB3aXRoIixpKSwhKHR5cGVvZiBpIT0ib2JqZWN0Inx8aT09bnVsbCkpe2lmKEFycmF5LmlzQXJyYXkoaSkpe2kuZm9yRWFjaChhPT5tVyhhKSk7cmV0dXJufWZvcihjb25zdCBhIG9mIE9iamVjdC5rZXlzKGkpKXtpZihVdC5kZWJ1ZygiQ2hlY2tpbmcga2V5IixhKSxhLnN0YXJ0c1dpdGgoIl9fIil8fGEuaW5jbHVkZXMoInByb3RvIil8fGEuaW5jbHVkZXMoImNvbnN0ciIpfHwheUNlLmhhcyhhKXx8aVthXT09bnVsbCl7VXQuZGVidWcoInNhbml0aXplIGRlbGV0aW5nIGtleTogIixhKSxkZWxldGUgaVthXTtjb250aW51ZX1pZih0eXBlb2YgaVthXT09Im9iamVjdCIpe1V0LmRlYnVnKCJzYW5pdGl6aW5nIG9iamVjdCIsYSksbVcoaVthXSk7Y29udGludWV9Y29uc3QgZj1bInRoZW1lQ1NTIiwiZm9udEZhbWlseSIsImFsdEZvbnRGYW1pbHkiXTtmb3IoY29uc3QgcCBvZiBmKWEuaW5jbHVkZXMocCkmJihVdC5kZWJ1Zygic2FuaXRpemluZyBjc3Mgb3B0aW9uIixhKSxpW2FdPXhDZShpW2FdKSl9aWYoaS50aGVtZVZhcmlhYmxlcylmb3IoY29uc3QgYSBvZiBPYmplY3Qua2V5cyhpLnRoZW1lVmFyaWFibGVzKSl7Y29uc3QgZj1pLnRoZW1lVmFyaWFibGVzW2FdO2YhPW51bGwmJmYubWF0Y2gmJiFmLm1hdGNoKC9eW1xkICIjJSgpLC47QS1aYS16XSskLykmJihpLnRoZW1lVmFyaWFibGVzW2FdPSIiKX1VdC5kZWJ1ZygiQWZ0ZXIgc2FuaXRpemF0aW9uIixpKX19LHhDZT1pPT57bGV0IGE9MCxmPTA7Zm9yKGNvbnN0IHAgb2YgaSl7aWYoYTxmKXJldHVybiJ7IC8qIEVSUk9SOiBVbmJhbGFuY2VkIENTUyAqLyB9IjtwPT09InsiP2ErKzpwPT09In0iJiZmKyt9cmV0dXJuIGEhPT1mPyJ7IC8qIEVSUk9SOiBVbmJhbGFuY2VkIENTUyAqLyB9IjppfSxhSXQ9L14tezN9XHMqW1xuXHJdKC4qPylbXG5ccl0tezN9XHMqW1xuXHJdKy9zLFhQPS8lezJ9e1xzKig/OihcdyspXHMqOnwoXHcrKSlccyooPzooXHcrKXwoKD86KD8hfSV7Mn0pLnxccj9cbikqKSk/XHMqKD86fSV7Mn0pPy9naSxrQ2U9L1xzKiUlLipcbi9nbTtjbGFzcyBvSXQgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihhKXtzdXBlcihhKSx0aGlzLm5hbWU9IlVua25vd25EaWFncmFtRXJyb3IifX1jb25zdCBOQT17fSx5Vz1mdW5jdGlvbihpLGEpe2k9aS5yZXBsYWNlKGFJdCwiIikucmVwbGFjZShYUCwiIikucmVwbGFjZShrQ2UsYApgKTtmb3IoY29uc3RbZix7ZGV0ZWN0b3I6cH1db2YgT2JqZWN0LmVudHJpZXMoTkEpKWlmKHAoaSxhKSlyZXR1cm4gZjt0aHJvdyBuZXcgb0l0KGBObyBkaWFncmFtIHR5cGUgZGV0ZWN0ZWQgbWF0Y2hpbmcgZ2l2ZW4gY29uZmlndXJhdGlvbiBmb3IgdGV4dDogJHtpfWApfSxjSXQ9KC4uLmkpPT57Zm9yKGNvbnN0e2lkOmEsZGV0ZWN0b3I6Zixsb2FkZXI6cH1vZiBpKXVJdChhLGYscCl9LHVJdD0oaSxhLGYpPT57TkFbaV0/VXQuZXJyb3IoYERldGVjdG9yIHdpdGgga2V5ICR7aX0gYWxyZWFkeSBleGlzdHNgKTpOQVtpXT17ZGV0ZWN0b3I6YSxsb2FkZXI6Zn0sVXQuZGVidWcoYERldGVjdG9yIHdpdGgga2V5ICR7aX0gYWRkZWQke2Y/IiB3aXRoIGxvYWRlciI6IiJ9YCl9LEVDZT1pPT5OQVtpXS5sb2FkZXIsUTF0PShpLGEse2RlcHRoOmY9MixjbG9iYmVyOnA9ITF9PXt9KT0+e2NvbnN0IHc9e2RlcHRoOmYsY2xvYmJlcjpwfTtyZXR1cm4gQXJyYXkuaXNBcnJheShhKSYmIUFycmF5LmlzQXJyYXkoaSk/KGEuZm9yRWFjaChtPT5RMXQoaSxtLHcpKSxpKTpBcnJheS5pc0FycmF5KGEpJiZBcnJheS5pc0FycmF5KGkpPyhhLmZvckVhY2gobT0+e2kuaW5jbHVkZXMobSl8fGkucHVzaChtKX0pLGkpOmk9PT12b2lkIDB8fGY8PTA/aSE9bnVsbCYmdHlwZW9mIGk9PSJvYmplY3QiJiZ0eXBlb2YgYT09Im9iamVjdCI/T2JqZWN0LmFzc2lnbihpLGEpOmE6KGEhPT12b2lkIDAmJnR5cGVvZiBpPT0ib2JqZWN0IiYmdHlwZW9mIGE9PSJvYmplY3QiJiZPYmplY3Qua2V5cyhhKS5mb3JFYWNoKG09Pnt0eXBlb2YgYVttXT09Im9iamVjdCImJihpW21dPT09dm9pZCAwfHx0eXBlb2YgaVttXT09Im9iamVjdCIpPyhpW21dPT09dm9pZCAwJiYoaVttXT1BcnJheS5pc0FycmF5KGFbbV0pP1tdOnt9KSxpW21dPVExdChpW21dLGFbbV0se2RlcHRoOmYtMSxjbG9iYmVyOnB9KSk6KHB8fHR5cGVvZiBpW21dIT0ib2JqZWN0IiYmdHlwZW9mIGFbbV0hPSJvYmplY3QiKSYmKGlbbV09YVttXSl9KSxpKX0sWjE9UTF0O3ZhciBUQ2U9dHlwZW9mIGdsb2JhbD09Im9iamVjdCImJmdsb2JhbCYmZ2xvYmFsLk9iamVjdD09PU9iamVjdCYmZ2xvYmFsO2NvbnN0IGxJdD1UQ2U7dmFyIENDZT10eXBlb2Ygc2VsZj09Im9iamVjdCImJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLF9DZT1sSXR8fENDZXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKTtjb25zdCBubT1fQ2U7dmFyIFNDZT1ubS5TeW1ib2w7Y29uc3QgdHc9U0NlO3ZhciBoSXQ9T2JqZWN0LnByb3RvdHlwZSxBQ2U9aEl0Lmhhc093blByb3BlcnR5LExDZT1oSXQudG9TdHJpbmcsUVA9dHc/dHcudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIE1DZShpKXt2YXIgYT1BQ2UuY2FsbChpLFFQKSxmPWlbUVBdO3RyeXtpW1FQXT12b2lkIDA7dmFyIHA9ITB9Y2F0Y2h7fXZhciB3PUxDZS5jYWxsKGkpO3JldHVybiBwJiYoYT9pW1FQXT1mOmRlbGV0ZSBpW1FQXSksd312YXIgRENlPU9iamVjdC5wcm90b3R5cGUsSUNlPURDZS50b1N0cmluZztmdW5jdGlvbiBPQ2UoaSl7cmV0dXJuIElDZS5jYWxsKGkpfXZhciBQQ2U9IltvYmplY3QgTnVsbF0iLEZDZT0iW29iamVjdCBVbmRlZmluZWRdIixmSXQ9dHc/dHcudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIHNUKGkpe3JldHVybiBpPT1udWxsP2k9PT12b2lkIDA/RkNlOlBDZTpmSXQmJmZJdCBpbiBPYmplY3QoaSk/TUNlKGkpOk9DZShpKX1mdW5jdGlvbiBGYihpKXt2YXIgYT10eXBlb2YgaTtyZXR1cm4gaSE9bnVsbCYmKGE9PSJvYmplY3QifHxhPT0iZnVuY3Rpb24iKX12YXIgTkNlPSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIixCQ2U9IltvYmplY3QgRnVuY3Rpb25dIixSQ2U9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIixqQ2U9IltvYmplY3QgUHJveHldIjtmdW5jdGlvbiBCQShpKXtpZighRmIoaSkpcmV0dXJuITE7dmFyIGE9c1QoaSk7cmV0dXJuIGE9PUJDZXx8YT09UkNlfHxhPT1OQ2V8fGE9PWpDZX12YXIgJENlPW5tWyJfX2NvcmUtanNfc2hhcmVkX18iXTtjb25zdCBaMXQ9JENlO3ZhciBkSXQ9ZnVuY3Rpb24oKXt2YXIgaT0vW14uXSskLy5leGVjKFoxdCYmWjF0LmtleXMmJloxdC5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIGk/IlN5bWJvbChzcmMpXzEuIitpOiIifSgpO2Z1bmN0aW9uIHpDZShpKXtyZXR1cm4hIWRJdCYmZEl0IGluIGl9dmFyIHFDZT1GdW5jdGlvbi5wcm90b3R5cGUsSENlPXFDZS50b1N0cmluZztmdW5jdGlvbiBhVChpKXtpZihpIT1udWxsKXt0cnl7cmV0dXJuIEhDZS5jYWxsKGkpfWNhdGNoe310cnl7cmV0dXJuIGkrIiJ9Y2F0Y2h7fX1yZXR1cm4iIn12YXIgVkNlPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxHQ2U9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sVUNlPUZ1bmN0aW9uLnByb3RvdHlwZSxXQ2U9T2JqZWN0LnByb3RvdHlwZSxZQ2U9VUNlLnRvU3RyaW5nLEtDZT1XQ2UuaGFzT3duUHJvcGVydHksWENlPVJlZ0V4cCgiXiIrWUNlLmNhbGwoS0NlKS5yZXBsYWNlKFZDZSwiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtmdW5jdGlvbiBRQ2UoaSl7aWYoIUZiKGkpfHx6Q2UoaSkpcmV0dXJuITE7dmFyIGE9QkEoaSk/WENlOkdDZTtyZXR1cm4gYS50ZXN0KGFUKGkpKX1mdW5jdGlvbiBaQ2UoaSxhKXtyZXR1cm4gaT09bnVsbD92b2lkIDA6aVthXX1mdW5jdGlvbiBvVChpLGEpe3ZhciBmPVpDZShpLGEpO3JldHVybiBRQ2UoZik/Zjp2b2lkIDB9dmFyIEpDZT1vVChPYmplY3QsImNyZWF0ZSIpO2NvbnN0IFpQPUpDZTtmdW5jdGlvbiB0OWUoKXt0aGlzLl9fZGF0YV9fPVpQP1pQKG51bGwpOnt9LHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIGU5ZShpKXt2YXIgYT10aGlzLmhhcyhpKSYmZGVsZXRlIHRoaXMuX19kYXRhX19baV07cmV0dXJuIHRoaXMuc2l6ZS09YT8xOjAsYX12YXIgbjllPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIixyOWU9T2JqZWN0LnByb3RvdHlwZSxpOWU9cjllLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHM5ZShpKXt2YXIgYT10aGlzLl9fZGF0YV9fO2lmKFpQKXt2YXIgZj1hW2ldO3JldHVybiBmPT09bjllP3ZvaWQgMDpmfXJldHVybiBpOWUuY2FsbChhLGkpP2FbaV06dm9pZCAwfXZhciBhOWU9T2JqZWN0LnByb3RvdHlwZSxvOWU9YTllLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGM5ZShpKXt2YXIgYT10aGlzLl9fZGF0YV9fO3JldHVybiBaUD9hW2ldIT09dm9pZCAwOm85ZS5jYWxsKGEsaSl9dmFyIHU5ZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7ZnVuY3Rpb24gbDllKGksYSl7dmFyIGY9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhpKT8wOjEsZltpXT1aUCYmYT09PXZvaWQgMD91OWU6YSx0aGlzfWZ1bmN0aW9uIGNUKGkpe3ZhciBhPS0xLGY9aT09bnVsbD8wOmkubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KythPGY7KXt2YXIgcD1pW2FdO3RoaXMuc2V0KHBbMF0scFsxXSl9fWNULnByb3RvdHlwZS5jbGVhcj10OWUsY1QucHJvdG90eXBlLmRlbGV0ZT1lOWUsY1QucHJvdG90eXBlLmdldD1zOWUsY1QucHJvdG90eXBlLmhhcz1jOWUsY1QucHJvdG90eXBlLnNldD1sOWU7ZnVuY3Rpb24gaDllKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH1mdW5jdGlvbiBSQShpLGEpe3JldHVybiBpPT09YXx8aSE9PWkmJmEhPT1hfWZ1bmN0aW9uIHhXKGksYSl7Zm9yKHZhciBmPWkubGVuZ3RoO2YtLTspaWYoUkEoaVtmXVswXSxhKSlyZXR1cm4gZjtyZXR1cm4tMX12YXIgZjllPUFycmF5LnByb3RvdHlwZSxkOWU9ZjllLnNwbGljZTtmdW5jdGlvbiBnOWUoaSl7dmFyIGE9dGhpcy5fX2RhdGFfXyxmPXhXKGEsaSk7aWYoZjwwKXJldHVybiExO3ZhciBwPWEubGVuZ3RoLTE7cmV0dXJuIGY9PXA/YS5wb3AoKTpkOWUuY2FsbChhLGYsMSksLS10aGlzLnNpemUsITB9ZnVuY3Rpb24gcDllKGkpe3ZhciBhPXRoaXMuX19kYXRhX18sZj14VyhhLGkpO3JldHVybiBmPDA/dm9pZCAwOmFbZl1bMV19ZnVuY3Rpb24gYjllKGkpe3JldHVybiB4Vyh0aGlzLl9fZGF0YV9fLGkpPi0xfWZ1bmN0aW9uIHc5ZShpLGEpe3ZhciBmPXRoaXMuX19kYXRhX18scD14VyhmLGkpO3JldHVybiBwPDA/KCsrdGhpcy5zaXplLGYucHVzaChbaSxhXSkpOmZbcF1bMV09YSx0aGlzfWZ1bmN0aW9uIF81KGkpe3ZhciBhPS0xLGY9aT09bnVsbD8wOmkubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KythPGY7KXt2YXIgcD1pW2FdO3RoaXMuc2V0KHBbMF0scFsxXSl9fV81LnByb3RvdHlwZS5jbGVhcj1oOWUsXzUucHJvdG90eXBlLmRlbGV0ZT1nOWUsXzUucHJvdG90eXBlLmdldD1wOWUsXzUucHJvdG90eXBlLmhhcz1iOWUsXzUucHJvdG90eXBlLnNldD13OWU7dmFyIHY5ZT1vVChubSwiTWFwIik7Y29uc3QgSlA9djllO2Z1bmN0aW9uIG05ZSgpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IGNULG1hcDpuZXcoSlB8fF81KSxzdHJpbmc6bmV3IGNUfX1mdW5jdGlvbiB5OWUoaSl7dmFyIGE9dHlwZW9mIGk7cmV0dXJuIGE9PSJzdHJpbmcifHxhPT0ibnVtYmVyInx8YT09InN5bWJvbCJ8fGE9PSJib29sZWFuIj9pIT09Il9fcHJvdG9fXyI6aT09PW51bGx9ZnVuY3Rpb24ga1coaSxhKXt2YXIgZj1pLl9fZGF0YV9fO3JldHVybiB5OWUoYSk/Zlt0eXBlb2YgYT09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpmLm1hcH1mdW5jdGlvbiB4OWUoaSl7dmFyIGE9a1codGhpcyxpKS5kZWxldGUoaSk7cmV0dXJuIHRoaXMuc2l6ZS09YT8xOjAsYX1mdW5jdGlvbiBrOWUoaSl7cmV0dXJuIGtXKHRoaXMsaSkuZ2V0KGkpfWZ1bmN0aW9uIEU5ZShpKXtyZXR1cm4ga1codGhpcyxpKS5oYXMoaSl9ZnVuY3Rpb24gVDllKGksYSl7dmFyIGY9a1codGhpcyxpKSxwPWYuc2l6ZTtyZXR1cm4gZi5zZXQoaSxhKSx0aGlzLnNpemUrPWYuc2l6ZT09cD8wOjEsdGhpc31mdW5jdGlvbiBTNShpKXt2YXIgYT0tMSxmPWk9PW51bGw/MDppLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrYTxmOyl7dmFyIHA9aVthXTt0aGlzLnNldChwWzBdLHBbMV0pfX1TNS5wcm90b3R5cGUuY2xlYXI9bTllLFM1LnByb3RvdHlwZS5kZWxldGU9eDllLFM1LnByb3RvdHlwZS5nZXQ9azllLFM1LnByb3RvdHlwZS5oYXM9RTllLFM1LnByb3RvdHlwZS5zZXQ9VDllO3ZhciBDOWU9IkV4cGVjdGVkIGEgZnVuY3Rpb24iO2Z1bmN0aW9uIGpBKGksYSl7aWYodHlwZW9mIGkhPSJmdW5jdGlvbiJ8fGEhPW51bGwmJnR5cGVvZiBhIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoQzllKTt2YXIgZj1mdW5jdGlvbigpe3ZhciBwPWFyZ3VtZW50cyx3PWE/YS5hcHBseSh0aGlzLHApOnBbMF0sbT1mLmNhY2hlO2lmKG0uaGFzKHcpKXJldHVybiBtLmdldCh3KTt2YXIgYj1pLmFwcGx5KHRoaXMscCk7cmV0dXJuIGYuY2FjaGU9bS5zZXQodyxiKXx8bSxifTtyZXR1cm4gZi5jYWNoZT1uZXcoakEuQ2FjaGV8fFM1KSxmfWpBLkNhY2hlPVM1O2Z1bmN0aW9uIF85ZSgpe3RoaXMuX19kYXRhX189bmV3IF81LHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIFM5ZShpKXt2YXIgYT10aGlzLl9fZGF0YV9fLGY9YS5kZWxldGUoaSk7cmV0dXJuIHRoaXMuc2l6ZT1hLnNpemUsZn1mdW5jdGlvbiBBOWUoaSl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGkpfWZ1bmN0aW9uIEw5ZShpKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoaSl9dmFyIE05ZT0yMDA7ZnVuY3Rpb24gRDllKGksYSl7dmFyIGY9dGhpcy5fX2RhdGFfXztpZihmIGluc3RhbmNlb2YgXzUpe3ZhciBwPWYuX19kYXRhX187aWYoIUpQfHxwLmxlbmd0aDxNOWUtMSlyZXR1cm4gcC5wdXNoKFtpLGFdKSx0aGlzLnNpemU9KytmLnNpemUsdGhpcztmPXRoaXMuX19kYXRhX189bmV3IFM1KHApfXJldHVybiBmLnNldChpLGEpLHRoaXMuc2l6ZT1mLnNpemUsdGhpc31mdW5jdGlvbiBybShpKXt2YXIgYT10aGlzLl9fZGF0YV9fPW5ldyBfNShpKTt0aGlzLnNpemU9YS5zaXplfXJtLnByb3RvdHlwZS5jbGVhcj1fOWUscm0ucHJvdG90eXBlLmRlbGV0ZT1TOWUscm0ucHJvdG90eXBlLmdldD1BOWUscm0ucHJvdG90eXBlLmhhcz1MOWUscm0ucHJvdG90eXBlLnNldD1EOWU7dmFyIEk5ZT1mdW5jdGlvbigpe3RyeXt2YXIgaT1vVChPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIGkoe30sIiIse30pLGl9Y2F0Y2h7fX0oKTtjb25zdCBFVz1JOWU7ZnVuY3Rpb24gVFcoaSxhLGYpe2E9PSJfX3Byb3RvX18iJiZFVz9FVyhpLGEse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmYsd3JpdGFibGU6ITB9KTppW2FdPWZ9ZnVuY3Rpb24gSjF0KGksYSxmKXsoZiE9PXZvaWQgMCYmIVJBKGlbYV0sZil8fGY9PT12b2lkIDAmJiEoYSBpbiBpKSkmJlRXKGksYSxmKX1mdW5jdGlvbiBPOWUoaSl7cmV0dXJuIGZ1bmN0aW9uKGEsZixwKXtmb3IodmFyIHc9LTEsbT1PYmplY3QoYSksYj1wKGEpLEU9Yi5sZW5ndGg7RS0tOyl7dmFyIF89YltpP0U6Kyt3XTtpZihmKG1bX10sXyxtKT09PSExKWJyZWFrfXJldHVybiBhfX12YXIgUDllPU85ZSgpO2NvbnN0IHRkdD1QOWU7dmFyIGdJdD10eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLHBJdD1nSXQmJnR5cGVvZiBtb2R1bGU9PSJvYmplY3QiJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxGOWU9cEl0JiZwSXQuZXhwb3J0cz09PWdJdCxiSXQ9RjllP25tLkJ1ZmZlcjp2b2lkIDAsd0l0PWJJdD9iSXQuYWxsb2NVbnNhZmU6dm9pZCAwO2Z1bmN0aW9uIHZJdChpLGEpe2lmKGEpcmV0dXJuIGkuc2xpY2UoKTt2YXIgZj1pLmxlbmd0aCxwPXdJdD93SXQoZik6bmV3IGkuY29uc3RydWN0b3IoZik7cmV0dXJuIGkuY29weShwKSxwfXZhciBOOWU9bm0uVWludDhBcnJheTtjb25zdCBDVz1OOWU7ZnVuY3Rpb24gZWR0KGkpe3ZhciBhPW5ldyBpLmNvbnN0cnVjdG9yKGkuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyBDVyhhKS5zZXQobmV3IENXKGkpKSxhfWZ1bmN0aW9uIG1JdChpLGEpe3ZhciBmPWE/ZWR0KGkuYnVmZmVyKTppLmJ1ZmZlcjtyZXR1cm4gbmV3IGkuY29uc3RydWN0b3IoZixpLmJ5dGVPZmZzZXQsaS5sZW5ndGgpfWZ1bmN0aW9uIHlJdChpLGEpe3ZhciBmPS0xLHA9aS5sZW5ndGg7Zm9yKGF8fChhPUFycmF5KHApKTsrK2Y8cDspYVtmXT1pW2ZdO3JldHVybiBhfXZhciB4SXQ9T2JqZWN0LmNyZWF0ZSxCOWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKCl7fXJldHVybiBmdW5jdGlvbihhKXtpZighRmIoYSkpcmV0dXJue307aWYoeEl0KXJldHVybiB4SXQoYSk7aS5wcm90b3R5cGU9YTt2YXIgZj1uZXcgaTtyZXR1cm4gaS5wcm90b3R5cGU9dm9pZCAwLGZ9fSgpO2NvbnN0IFI5ZT1COWU7ZnVuY3Rpb24ga0l0KGksYSl7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBpKGEoZikpfX12YXIgajllPWtJdChPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KTtjb25zdCBuZHQ9ajllO3ZhciAkOWU9T2JqZWN0LnByb3RvdHlwZTtmdW5jdGlvbiBfVyhpKXt2YXIgYT1pJiZpLmNvbnN0cnVjdG9yLGY9dHlwZW9mIGE9PSJmdW5jdGlvbiImJmEucHJvdG90eXBlfHwkOWU7cmV0dXJuIGk9PT1mfWZ1bmN0aW9uIEVJdChpKXtyZXR1cm4gdHlwZW9mIGkuY29uc3RydWN0b3I9PSJmdW5jdGlvbiImJiFfVyhpKT9SOWUobmR0KGkpKTp7fX1mdW5jdGlvbiBmMyhpKXtyZXR1cm4gaSE9bnVsbCYmdHlwZW9mIGk9PSJvYmplY3QifXZhciB6OWU9IltvYmplY3QgQXJndW1lbnRzXSI7ZnVuY3Rpb24gVEl0KGkpe3JldHVybiBmMyhpKSYmc1QoaSk9PXo5ZX12YXIgQ0l0PU9iamVjdC5wcm90b3R5cGUscTllPUNJdC5oYXNPd25Qcm9wZXJ0eSxIOWU9Q0l0LnByb3BlcnR5SXNFbnVtZXJhYmxlLFY5ZT1USXQoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9USXQ6ZnVuY3Rpb24oaSl7cmV0dXJuIGYzKGkpJiZxOWUuY2FsbChpLCJjYWxsZWUiKSYmIUg5ZS5jYWxsKGksImNhbGxlZSIpfTtjb25zdCAkQT1WOWU7dmFyIEc5ZT1BcnJheS5pc0FycmF5O2NvbnN0IElmPUc5ZTt2YXIgVTllPTkwMDcxOTkyNTQ3NDA5OTE7ZnVuY3Rpb24gcmR0KGkpe3JldHVybiB0eXBlb2YgaT09Im51bWJlciImJmk+LTEmJmklMT09MCYmaTw9VTllfWZ1bmN0aW9uIGNrKGkpe3JldHVybiBpIT1udWxsJiZyZHQoaS5sZW5ndGgpJiYhQkEoaSl9ZnVuY3Rpb24gX0l0KGkpe3JldHVybiBmMyhpKSYmY2soaSl9ZnVuY3Rpb24gVzllKCl7cmV0dXJuITF9dmFyIFNJdD10eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLEFJdD1TSXQmJnR5cGVvZiBtb2R1bGU9PSJvYmplY3QiJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxZOWU9QUl0JiZBSXQuZXhwb3J0cz09PVNJdCxMSXQ9WTllP25tLkJ1ZmZlcjp2b2lkIDAsSzllPUxJdD9MSXQuaXNCdWZmZXI6dm9pZCAwLFg5ZT1LOWV8fFc5ZTtjb25zdCB6QT1YOWU7dmFyIFE5ZT0iW29iamVjdCBPYmplY3RdIixaOWU9RnVuY3Rpb24ucHJvdG90eXBlLEo5ZT1PYmplY3QucHJvdG90eXBlLE1JdD1aOWUudG9TdHJpbmcsdF9lPUo5ZS5oYXNPd25Qcm9wZXJ0eSxlX2U9TUl0LmNhbGwoT2JqZWN0KTtmdW5jdGlvbiBESXQoaSl7aWYoIWYzKGkpfHxzVChpKSE9UTllKXJldHVybiExO3ZhciBhPW5kdChpKTtpZihhPT09bnVsbClyZXR1cm4hMDt2YXIgZj10X2UuY2FsbChhLCJjb25zdHJ1Y3RvciIpJiZhLmNvbnN0cnVjdG9yO3JldHVybiB0eXBlb2YgZj09ImZ1bmN0aW9uIiYmZiBpbnN0YW5jZW9mIGYmJk1JdC5jYWxsKGYpPT1lX2V9dmFyIG5fZT0iW29iamVjdCBBcmd1bWVudHNdIixyX2U9IltvYmplY3QgQXJyYXldIixpX2U9IltvYmplY3QgQm9vbGVhbl0iLHNfZT0iW29iamVjdCBEYXRlXSIsYV9lPSJbb2JqZWN0IEVycm9yXSIsb19lPSJbb2JqZWN0IEZ1bmN0aW9uXSIsY19lPSJbb2JqZWN0IE1hcF0iLHVfZT0iW29iamVjdCBOdW1iZXJdIixsX2U9IltvYmplY3QgT2JqZWN0XSIsaF9lPSJbb2JqZWN0IFJlZ0V4cF0iLGZfZT0iW29iamVjdCBTZXRdIixkX2U9IltvYmplY3QgU3RyaW5nXSIsZ19lPSJbb2JqZWN0IFdlYWtNYXBdIixwX2U9IltvYmplY3QgQXJyYXlCdWZmZXJdIixiX2U9IltvYmplY3QgRGF0YVZpZXddIix3X2U9IltvYmplY3QgRmxvYXQzMkFycmF5XSIsdl9lPSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iLG1fZT0iW29iamVjdCBJbnQ4QXJyYXldIix5X2U9IltvYmplY3QgSW50MTZBcnJheV0iLHhfZT0iW29iamVjdCBJbnQzMkFycmF5XSIsa19lPSJbb2JqZWN0IFVpbnQ4QXJyYXldIixFX2U9IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIixUX2U9IltvYmplY3QgVWludDE2QXJyYXldIixDX2U9IltvYmplY3QgVWludDMyQXJyYXldIixibD17fTtibFt3X2VdPWJsW3ZfZV09YmxbbV9lXT1ibFt5X2VdPWJsW3hfZV09Ymxba19lXT1ibFtFX2VdPWJsW1RfZV09YmxbQ19lXT0hMCxibFtuX2VdPWJsW3JfZV09YmxbcF9lXT1ibFtpX2VdPWJsW2JfZV09Ymxbc19lXT1ibFthX2VdPWJsW29fZV09YmxbY19lXT1ibFt1X2VdPWJsW2xfZV09YmxbaF9lXT1ibFtmX2VdPWJsW2RfZV09YmxbZ19lXT0hMTtmdW5jdGlvbiBfX2UoaSl7cmV0dXJuIGYzKGkpJiZyZHQoaS5sZW5ndGgpJiYhIWJsW3NUKGkpXX1mdW5jdGlvbiBTVyhpKXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGkoYSl9fXZhciBJSXQ9dHlwZW9mIGV4cG9ydHM9PSJvYmplY3QiJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyx0Rj1JSXQmJnR5cGVvZiBtb2R1bGU9PSJvYmplY3QiJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxTX2U9dEYmJnRGLmV4cG9ydHM9PT1JSXQsaWR0PVNfZSYmbEl0LnByb2Nlc3MsQV9lPWZ1bmN0aW9uKCl7dHJ5e3ZhciBpPXRGJiZ0Ri5yZXF1aXJlJiZ0Ri5yZXF1aXJlKCJ1dGlsIikudHlwZXM7cmV0dXJuIGl8fGlkdCYmaWR0LmJpbmRpbmcmJmlkdC5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2h7fX0oKTtjb25zdCBxQT1BX2U7dmFyIE9JdD1xQSYmcUEuaXNUeXBlZEFycmF5LExfZT1PSXQ/U1coT0l0KTpfX2U7Y29uc3QgQVc9TF9lO2Z1bmN0aW9uIHNkdChpLGEpe2lmKCEoYT09PSJjb25zdHJ1Y3RvciImJnR5cGVvZiBpW2FdPT0iZnVuY3Rpb24iKSYmYSE9Il9fcHJvdG9fXyIpcmV0dXJuIGlbYV19dmFyIE1fZT1PYmplY3QucHJvdG90eXBlLERfZT1NX2UuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gTFcoaSxhLGYpe3ZhciBwPWlbYV07KCEoRF9lLmNhbGwoaSxhKSYmUkEocCxmKSl8fGY9PT12b2lkIDAmJiEoYSBpbiBpKSkmJlRXKGksYSxmKX1mdW5jdGlvbiBlRihpLGEsZixwKXt2YXIgdz0hZjtmfHwoZj17fSk7Zm9yKHZhciBtPS0xLGI9YS5sZW5ndGg7KyttPGI7KXt2YXIgRT1hW21dLF89cD9wKGZbRV0saVtFXSxFLGYsaSk6dm9pZCAwO189PT12b2lkIDAmJihfPWlbRV0pLHc/VFcoZixFLF8pOkxXKGYsRSxfKX1yZXR1cm4gZn1mdW5jdGlvbiBJX2UoaSxhKXtmb3IodmFyIGY9LTEscD1BcnJheShpKTsrK2Y8aTspcFtmXT1hKGYpO3JldHVybiBwfXZhciBPX2U9OTAwNzE5OTI1NDc0MDk5MSxQX2U9L14oPzowfFsxLTldXGQqKSQvO2Z1bmN0aW9uIE1XKGksYSl7dmFyIGY9dHlwZW9mIGk7cmV0dXJuIGE9YT8/T19lLCEhYSYmKGY9PSJudW1iZXIifHxmIT0ic3ltYm9sIiYmUF9lLnRlc3QoaSkpJiZpPi0xJiZpJTE9PTAmJmk8YX12YXIgRl9lPU9iamVjdC5wcm90b3R5cGUsTl9lPUZfZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBQSXQoaSxhKXt2YXIgZj1JZihpKSxwPSFmJiYkQShpKSx3PSFmJiYhcCYmekEoaSksbT0hZiYmIXAmJiF3JiZBVyhpKSxiPWZ8fHB8fHd8fG0sRT1iP0lfZShpLmxlbmd0aCxTdHJpbmcpOltdLF89RS5sZW5ndGg7Zm9yKHZhciBBIGluIGkpKGF8fE5fZS5jYWxsKGksQSkpJiYhKGImJihBPT0ibGVuZ3RoInx8dyYmKEE9PSJvZmZzZXQifHxBPT0icGFyZW50Iil8fG0mJihBPT0iYnVmZmVyInx8QT09ImJ5dGVMZW5ndGgifHxBPT0iYnl0ZU9mZnNldCIpfHxNVyhBLF8pKSkmJkUucHVzaChBKTtyZXR1cm4gRX1mdW5jdGlvbiBCX2UoaSl7dmFyIGE9W107aWYoaSE9bnVsbClmb3IodmFyIGYgaW4gT2JqZWN0KGkpKWEucHVzaChmKTtyZXR1cm4gYX12YXIgUl9lPU9iamVjdC5wcm90b3R5cGUsal9lPVJfZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiAkX2UoaSl7aWYoIUZiKGkpKXJldHVybiBCX2UoaSk7dmFyIGE9X1coaSksZj1bXTtmb3IodmFyIHAgaW4gaSlwPT0iY29uc3RydWN0b3IiJiYoYXx8IWpfZS5jYWxsKGkscCkpfHxmLnB1c2gocCk7cmV0dXJuIGZ9ZnVuY3Rpb24gdVQoaSl7cmV0dXJuIGNrKGkpP1BJdChpLCEwKTokX2UoaSl9ZnVuY3Rpb24gel9lKGkpe3JldHVybiBlRihpLHVUKGkpKX1mdW5jdGlvbiBxX2UoaSxhLGYscCx3LG0sYil7dmFyIEU9c2R0KGksZiksXz1zZHQoYSxmKSxBPWIuZ2V0KF8pO2lmKEEpe0oxdChpLGYsQSk7cmV0dXJufXZhciBJPW0/bShFLF8sZisiIixpLGEsYik6dm9pZCAwLEI9ST09PXZvaWQgMDtpZihCKXt2YXIgTj1JZihfKSxSPSFOJiZ6QShfKSx6PSFOJiYhUiYmQVcoXyk7ST1fLE58fFJ8fHo/SWYoRSk/ST1FOl9JdChFKT9JPXlJdChFKTpSPyhCPSExLEk9dkl0KF8sITApKTp6PyhCPSExLEk9bUl0KF8sITApKTpJPVtdOkRJdChfKXx8JEEoXyk/KEk9RSwkQShFKT9JPXpfZShFKTooIUZiKEUpfHxCQShFKSkmJihJPUVJdChfKSkpOkI9ITF9QiYmKGIuc2V0KF8sSSksdyhJLF8scCxtLGIpLGIuZGVsZXRlKF8pKSxKMXQoaSxmLEkpfWZ1bmN0aW9uIEZJdChpLGEsZixwLHcpe2khPT1hJiZ0ZHQoYSxmdW5jdGlvbihtLGIpe2lmKHd8fCh3PW5ldyBybSksRmIobSkpcV9lKGksYSxiLGYsRkl0LHAsdyk7ZWxzZXt2YXIgRT1wP3Aoc2R0KGksYiksbSxiKyIiLGksYSx3KTp2b2lkIDA7RT09PXZvaWQgMCYmKEU9bSksSjF0KGksYixFKX19LHVUKX1mdW5jdGlvbiBsVChpKXtyZXR1cm4gaX1mdW5jdGlvbiBIX2UoaSxhLGYpe3N3aXRjaChmLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBpLmNhbGwoYSk7Y2FzZSAxOnJldHVybiBpLmNhbGwoYSxmWzBdKTtjYXNlIDI6cmV0dXJuIGkuY2FsbChhLGZbMF0sZlsxXSk7Y2FzZSAzOnJldHVybiBpLmNhbGwoYSxmWzBdLGZbMV0sZlsyXSl9cmV0dXJuIGkuYXBwbHkoYSxmKX12YXIgTkl0PU1hdGgubWF4O2Z1bmN0aW9uIEJJdChpLGEsZil7cmV0dXJuIGE9Tkl0KGE9PT12b2lkIDA/aS5sZW5ndGgtMTphLDApLGZ1bmN0aW9uKCl7Zm9yKHZhciBwPWFyZ3VtZW50cyx3PS0xLG09Tkl0KHAubGVuZ3RoLWEsMCksYj1BcnJheShtKTsrK3c8bTspYlt3XT1wW2Erd107dz0tMTtmb3IodmFyIEU9QXJyYXkoYSsxKTsrK3c8YTspRVt3XT1wW3ddO3JldHVybiBFW2FdPWYoYiksSF9lKGksdGhpcyxFKX19ZnVuY3Rpb24gSEEoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGl9fXZhciBWX2U9RVc/ZnVuY3Rpb24oaSxhKXtyZXR1cm4gRVcoaSwidG9TdHJpbmciLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpIQShhKSx3cml0YWJsZTohMH0pfTpsVDtjb25zdCBHX2U9Vl9lO3ZhciBVX2U9ODAwLFdfZT0xNixZX2U9RGF0ZS5ub3c7ZnVuY3Rpb24gS19lKGkpe3ZhciBhPTAsZj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciBwPVlfZSgpLHc9V19lLShwLWYpO2lmKGY9cCx3PjApe2lmKCsrYT49VV9lKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSBhPTA7cmV0dXJuIGkuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fXZhciBYX2U9S19lKEdfZSk7Y29uc3QgUkl0PVhfZTtmdW5jdGlvbiBEVyhpLGEpe3JldHVybiBSSXQoQkl0KGksYSxsVCksaSsiIil9ZnVuY3Rpb24gbkYoaSxhLGYpe2lmKCFGYihmKSlyZXR1cm4hMTt2YXIgcD10eXBlb2YgYTtyZXR1cm4ocD09Im51bWJlciI/Y2soZikmJk1XKGEsZi5sZW5ndGgpOnA9PSJzdHJpbmciJiZhIGluIGYpP1JBKGZbYV0saSk6ITF9ZnVuY3Rpb24gUV9lKGkpe3JldHVybiBEVyhmdW5jdGlvbihhLGYpe3ZhciBwPS0xLHc9Zi5sZW5ndGgsbT13PjE/Zlt3LTFdOnZvaWQgMCxiPXc+Mj9mWzJdOnZvaWQgMDtmb3IobT1pLmxlbmd0aD4zJiZ0eXBlb2YgbT09ImZ1bmN0aW9uIj8ody0tLG0pOnZvaWQgMCxiJiZuRihmWzBdLGZbMV0sYikmJihtPXc8Mz92b2lkIDA6bSx3PTEpLGE9T2JqZWN0KGEpOysrcDx3Oyl7dmFyIEU9ZltwXTtFJiZpKGEsRSxwLG0pfXJldHVybiBhfSl9dmFyIFpfZT1RX2UoZnVuY3Rpb24oaSxhLGYpe0ZJdChpLGEsZil9KTtjb25zdCBJVz1aX2Usakl0PSLigIsiLEpfZT17Y3VydmVCYXNpczpIUCxjdXJ2ZUJhc2lzQ2xvc2VkOmZUZSxjdXJ2ZUJhc2lzT3BlbjpkVGUsY3VydmVCdW1wWDpsVGUsY3VydmVCdW1wWTpoVGUsY3VydmVCdW5kbGU6Z1RlLGN1cnZlQ2FyZGluYWxDbG9zZWQ6YlRlLGN1cnZlQ2FyZGluYWxPcGVuOndUZSxjdXJ2ZUNhcmRpbmFsOnBUZSxjdXJ2ZUNhdG11bGxSb21DbG9zZWQ6bVRlLGN1cnZlQ2F0bXVsbFJvbU9wZW46eVRlLGN1cnZlQ2F0bXVsbFJvbTp2VGUsY3VydmVMaW5lYXI6Y2csY3VydmVMaW5lYXJDbG9zZWQ6eFRlLGN1cnZlTW9ub3RvbmVYOmtUZSxjdXJ2ZU1vbm90b25lWTpFVGUsY3VydmVOYXR1cmFsOlRUZSxjdXJ2ZVN0ZXA6Q1RlLGN1cnZlU3RlcEFmdGVyOlNUZSxjdXJ2ZVN0ZXBCZWZvcmU6X1RlfSx0U2U9L1xzKig/OihcdyspKD89Oik6fChcdyspKVxzKig/OihcdyspfCgoPzooPyF9JXsyfSkufFxyP1xuKSopKT9ccyooPzp9JXsyfSk/L2dpLGVTZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9JEl0KGksLyg/OmluaXRcYil8KD86aW5pdGlhbGl6ZVxiKS8pO2xldCBwPXt9O2lmKEFycmF5LmlzQXJyYXkoZikpe2NvbnN0IGI9Zi5tYXAoRT0+RS5hcmdzKTttVyhiKSxwPVoxKHAsWy4uLmJdKX1lbHNlIHA9Zi5hcmdzO2lmKCFwKXJldHVybjtsZXQgdz15VyhpLGEpO2NvbnN0IG09ImNvbmZpZyI7cmV0dXJuIHBbbV0hPT12b2lkIDAmJih3PT09ImZsb3djaGFydC12MiImJih3PSJmbG93Y2hhcnQiKSxwW3ddPXBbbV0sZGVsZXRlIHBbbV0pLHB9LCRJdD1mdW5jdGlvbihpLGE9bnVsbCl7dHJ5e2NvbnN0IGY9bmV3IFJlZ0V4cChgWyVdezJ9KD8hW3tdJHt0U2Uuc291cmNlfSkoPz1bfV1bJV17Mn0pLioKYCwiaWciKTtpPWkudHJpbSgpLnJlcGxhY2UoZiwiIikucmVwbGFjZSgvJy9nbSwnIicpLFV0LmRlYnVnKGBEZXRlY3RpbmcgZGlhZ3JhbSBkaXJlY3RpdmUke2EhPT1udWxsPyIgdHlwZToiK2E6IiJ9IGJhc2VkIG9uIHRoZSB0ZXh0OiR7aX1gKTtsZXQgcDtjb25zdCB3PVtdO2Zvcig7KHA9WFAuZXhlYyhpKSkhPT1udWxsOylpZihwLmluZGV4PT09WFAubGFzdEluZGV4JiZYUC5sYXN0SW5kZXgrKyxwJiYhYXx8YSYmcFsxXSYmcFsxXS5tYXRjaChhKXx8YSYmcFsyXSYmcFsyXS5tYXRjaChhKSl7Y29uc3QgbT1wWzFdP3BbMV06cFsyXSxiPXBbM10/cFszXS50cmltKCk6cFs0XT9KU09OLnBhcnNlKHBbNF0udHJpbSgpKTpudWxsO3cucHVzaCh7dHlwZTptLGFyZ3M6Yn0pfXJldHVybiB3Lmxlbmd0aD09PTA/e3R5cGU6aSxhcmdzOm51bGx9OncubGVuZ3RoPT09MT93WzBdOnd9Y2F0Y2goZil7cmV0dXJuIFV0LmVycm9yKGBFUlJPUjogJHtmLm1lc3NhZ2V9IC0gVW5hYmxlIHRvIHBhcnNlIGRpcmVjdGl2ZSB0eXBlOiAnJHthfScgYmFzZWQgb24gdGhlIHRleHQ6ICcke2l9J2ApLHt0eXBlOnZvaWQgMCxhcmdzOm51bGx9fX0sblNlPWZ1bmN0aW9uKGkpe3JldHVybiBpLnJlcGxhY2UoWFAsIiIpfSxyU2U9ZnVuY3Rpb24oaSxhKXtmb3IoY29uc3RbZixwXW9mIGEuZW50cmllcygpKWlmKHAubWF0Y2goaSkpcmV0dXJuIGY7cmV0dXJuLTF9O2Z1bmN0aW9uIGV3KGksYSl7aWYoIWkpcmV0dXJuIGE7Y29uc3QgZj1gY3VydmUke2kuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkraS5zbGljZSgxKX1gO3JldHVybiBKX2VbZl0/P2F9ZnVuY3Rpb24gaVNlKGksYSl7Y29uc3QgZj1pLnRyaW0oKTtpZihmKXJldHVybiBhLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UiP2lrKGYpOmZ9Y29uc3Qgc1NlPShpLC4uLmEpPT57Y29uc3QgZj1pLnNwbGl0KCIuIikscD1mLmxlbmd0aC0xLHc9ZltwXTtsZXQgbT13aW5kb3c7Zm9yKGxldCBiPTA7YjxwO2IrKylpZihtPW1bZltiXV0sIW0pe1V0LmVycm9yKGBGdW5jdGlvbiBuYW1lOiAke2l9IG5vdCBmb3VuZCBpbiB3aW5kb3dgKTtyZXR1cm59bVt3XSguLi5hKX07ZnVuY3Rpb24gekl0KGksYSl7cmV0dXJuIWl8fCFhPzA6TWF0aC5zcXJ0KE1hdGgucG93KGEueC1pLngsMikrTWF0aC5wb3coYS55LWkueSwyKSl9ZnVuY3Rpb24gYVNlKGkpe2xldCBhLGY9MDtpLmZvckVhY2godz0+e2YrPXpJdCh3LGEpLGE9d30pO2NvbnN0IHA9Zi8yO3JldHVybiBhZHQoaSxwKX1mdW5jdGlvbiBvU2UoaSl7cmV0dXJuIGkubGVuZ3RoPT09MT9pWzBdOmFTZShpKX1jb25zdCBxSXQ9KGksYT0yKT0+e2NvbnN0IGY9TWF0aC5wb3coMTAsYSk7cmV0dXJuIE1hdGgucm91bmQoaSpmKS9mfSxhZHQ9KGksYSk9PntsZXQgZixwPWE7Zm9yKGNvbnN0IHcgb2YgaSl7aWYoZil7Y29uc3QgbT16SXQodyxmKTtpZihtPHApcC09bTtlbHNle2NvbnN0IGI9cC9tO2lmKGI8PTApcmV0dXJuIGY7aWYoYj49MSlyZXR1cm57eDp3LngseTp3Lnl9O2lmKGI+MCYmYjwxKXJldHVybnt4OnFJdCgoMS1iKSpmLngrYip3LngsNSkseTpxSXQoKDEtYikqZi55K2Iqdy55LDUpfX19Zj13fXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgYSBzdWl0YWJsZSBwb2ludCBmb3IgdGhlIGdpdmVuIGRpc3RhbmNlIil9LGNTZT0oaSxhLGYpPT57VXQuaW5mbyhgb3VyIHBvaW50cyAke0pTT04uc3RyaW5naWZ5KGEpfWApLGFbMF0hPT1mJiYoYT1hLnJldmVyc2UoKSk7Y29uc3Qgdz1hZHQoYSwyNSksbT1pPzEwOjUsYj1NYXRoLmF0YW4yKGFbMF0ueS13LnksYVswXS54LXcueCksRT17eDowLHk6MH07cmV0dXJuIEUueD1NYXRoLnNpbihiKSptKyhhWzBdLngrdy54KS8yLEUueT0tTWF0aC5jb3MoYikqbSsoYVswXS55K3cueSkvMixFfTtmdW5jdGlvbiB1U2UoaSxhLGYpe2NvbnN0IHA9c3RydWN0dXJlZENsb25lKGYpO1V0LmluZm8oIm91ciBwb2ludHMiLHApLGEhPT0ic3RhcnRfbGVmdCImJmEhPT0ic3RhcnRfcmlnaHQiJiZwLnJldmVyc2UoKTtjb25zdCB3PTI1K2ksbT1hZHQocCx3KSxiPTEwK2kqLjUsRT1NYXRoLmF0YW4yKHBbMF0ueS1tLnkscFswXS54LW0ueCksXz17eDowLHk6MH07cmV0dXJuIGE9PT0ic3RhcnRfbGVmdCI/KF8ueD1NYXRoLnNpbihFK01hdGguUEkpKmIrKHBbMF0ueCttLngpLzIsXy55PS1NYXRoLmNvcyhFK01hdGguUEkpKmIrKHBbMF0ueSttLnkpLzIpOmE9PT0iZW5kX3JpZ2h0Ij8oXy54PU1hdGguc2luKEUtTWF0aC5QSSkqYisocFswXS54K20ueCkvMi01LF8ueT0tTWF0aC5jb3MoRS1NYXRoLlBJKSpiKyhwWzBdLnkrbS55KS8yLTUpOmE9PT0iZW5kX2xlZnQiPyhfLng9TWF0aC5zaW4oRSkqYisocFswXS54K20ueCkvMi01LF8ueT0tTWF0aC5jb3MoRSkqYisocFswXS55K20ueSkvMi01KTooXy54PU1hdGguc2luKEUpKmIrKHBbMF0ueCttLngpLzIsXy55PS1NYXRoLmNvcyhFKSpiKyhwWzBdLnkrbS55KS8yKSxffWZ1bmN0aW9uIGltKGkpe2xldCBhPSIiLGY9IiI7Zm9yKGNvbnN0IHAgb2YgaSlwIT09dm9pZCAwJiYocC5zdGFydHNXaXRoKCJjb2xvcjoiKXx8cC5zdGFydHNXaXRoKCJ0ZXh0LWFsaWduOiIpP2Y9ZitwKyI7IjphPWErcCsiOyIpO3JldHVybntzdHlsZTphLGxhYmVsU3R5bGU6Zn19bGV0IEhJdD0wO2NvbnN0IFZJdD0oKT0+KEhJdCsrLCJpZC0iK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDEyKSsiLSIrSEl0KTtmdW5jdGlvbiBsU2UoaSl7bGV0IGE9IiI7Y29uc3QgZj0iMDEyMzQ1Njc4OWFiY2RlZiIscD1mLmxlbmd0aDtmb3IobGV0IHc9MDt3PGk7dysrKWErPWYuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpwKSk7cmV0dXJuIGF9Y29uc3QgR0l0PWk9PmxTZShpLmxlbmd0aCksaFNlPWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDp2b2lkIDAsYW5jaG9yOiJzdGFydCIsc3R5bGU6IiM2NjYiLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdmFsaWduOnZvaWQgMCx0ZXh0OiIifX0sZlNlPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1hLnRleHQucmVwbGFjZShLci5saW5lQnJlYWtSZWdleCwiICIpLFsscF09VkEoYS5mb250U2l6ZSksdz1pLmFwcGVuZCgidGV4dCIpO3cuYXR0cigieCIsYS54KSx3LmF0dHIoInkiLGEueSksdy5zdHlsZSgidGV4dC1hbmNob3IiLGEuYW5jaG9yKSx3LnN0eWxlKCJmb250LWZhbWlseSIsYS5mb250RmFtaWx5KSx3LnN0eWxlKCJmb250LXNpemUiLHApLHcuc3R5bGUoImZvbnQtd2VpZ2h0IixhLmZvbnRXZWlnaHQpLHcuYXR0cigiZmlsbCIsYS5maWxsKSxhLmNsYXNzIT09dm9pZCAwJiZ3LmF0dHIoImNsYXNzIixhLmNsYXNzKTtjb25zdCBtPXcuYXBwZW5kKCJ0c3BhbiIpO3JldHVybiBtLmF0dHIoIngiLGEueCthLnRleHRNYXJnaW4qMiksbS5hdHRyKCJmaWxsIixhLmZpbGwpLG0udGV4dChmKSx3fSxVSXQ9akEoKGksYSxmKT0+e2lmKCFpfHwoZj1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCIsam9pbldpdGg6Ijxici8+In0sZiksS3IubGluZUJyZWFrUmVnZXgudGVzdChpKSkpcmV0dXJuIGk7Y29uc3QgcD1pLnNwbGl0KCIgIiksdz1bXTtsZXQgbT0iIjtyZXR1cm4gcC5mb3JFYWNoKChiLEUpPT57Y29uc3QgXz1kMyhgJHtifSBgLGYpLEE9ZDMobSxmKTtpZihfPmEpe2NvbnN0e2h5cGhlbmF0ZWRTdHJpbmdzOk4scmVtYWluaW5nV29yZDpSfT1kU2UoYixhLCItIixmKTt3LnB1c2gobSwuLi5OKSxtPVJ9ZWxzZSBBK18+PWE/KHcucHVzaChtKSxtPWIpOm09W20sYl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKTtFKzE9PT1wLmxlbmd0aCYmdy5wdXNoKG0pfSksdy5maWx0ZXIoYj0+YiE9PSIiKS5qb2luKGYuam9pbldpdGgpfSwoaSxhLGYpPT5gJHtpfSR7YX0ke2YuZm9udFNpemV9JHtmLmZvbnRXZWlnaHR9JHtmLmZvbnRGYW1pbHl9JHtmLmpvaW5XaXRofWApLGRTZT1qQSgoaSxhLGY9Ii0iLHApPT57cD1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCIsbWFyZ2luOjB9LHApO2NvbnN0IHc9Wy4uLmldLG09W107bGV0IGI9IiI7cmV0dXJuIHcuZm9yRWFjaCgoRSxfKT0+e2NvbnN0IEE9YCR7Yn0ke0V9YDtpZihkMyhBLHApPj1hKXtjb25zdCBCPV8rMSxOPXcubGVuZ3RoPT09QixSPWAke0F9JHtmfWA7bS5wdXNoKE4/QTpSKSxiPSIifWVsc2UgYj1BfSkse2h5cGhlbmF0ZWRTdHJpbmdzOm0scmVtYWluaW5nV29yZDpifX0sKGksYSxmPSItIixwKT0+YCR7aX0ke2F9JHtmfSR7cC5mb250U2l6ZX0ke3AuZm9udFdlaWdodH0ke3AuZm9udEZhbWlseX1gKTtmdW5jdGlvbiBvZHQoaSxhKXtyZXR1cm4gY2R0KGksYSkuaGVpZ2h0fWZ1bmN0aW9uIGQzKGksYSl7cmV0dXJuIGNkdChpLGEpLndpZHRofWNvbnN0IGNkdD1qQSgoaSxhKT0+e2NvbnN0e2ZvbnRTaXplOmY9MTIsZm9udEZhbWlseTpwPSJBcmlhbCIsZm9udFdlaWdodDp3PTQwMH09YTtpZighaSlyZXR1cm57d2lkdGg6MCxoZWlnaHQ6MH07Y29uc3RbLG1dPVZBKGYpLGI9WyJzYW5zLXNlcmlmIixwXSxFPWkuc3BsaXQoS3IubGluZUJyZWFrUmVnZXgpLF89W10sQT15cigiYm9keSIpO2lmKCFBLnJlbW92ZSlyZXR1cm57d2lkdGg6MCxoZWlnaHQ6MCxsaW5lSGVpZ2h0OjB9O2NvbnN0IEk9QS5hcHBlbmQoInN2ZyIpO2Zvcihjb25zdCBOIG9mIGIpe2xldCBSPTA7Y29uc3Qgej17d2lkdGg6MCxoZWlnaHQ6MCxsaW5lSGVpZ2h0OjB9O2Zvcihjb25zdCBXIG9mIEUpe2NvbnN0IGV0PWhTZSgpO2V0LnRleHQ9V3x8akl0O2NvbnN0IHN0PWZTZShJLGV0KS5zdHlsZSgiZm9udC1zaXplIixtKS5zdHlsZSgiZm9udC13ZWlnaHQiLHcpLnN0eWxlKCJmb250LWZhbWlseSIsTiksYXQ9KHN0Ll9ncm91cHN8fHN0KVswXVswXS5nZXRCQm94KCk7aWYoYXQud2lkdGg9PT0wJiZhdC5oZWlnaHQ9PT0wKXRocm93IG5ldyBFcnJvcigic3ZnIGVsZW1lbnQgbm90IGluIHJlbmRlciB0cmVlIik7ei53aWR0aD1NYXRoLnJvdW5kKE1hdGgubWF4KHoud2lkdGgsYXQud2lkdGgpKSxSPU1hdGgucm91bmQoYXQuaGVpZ2h0KSx6LmhlaWdodCs9Uix6LmxpbmVIZWlnaHQ9TWF0aC5yb3VuZChNYXRoLm1heCh6LmxpbmVIZWlnaHQsUikpfV8ucHVzaCh6KX1JLnJlbW92ZSgpO2NvbnN0IEI9aXNOYU4oX1sxXS5oZWlnaHQpfHxpc05hTihfWzFdLndpZHRoKXx8aXNOYU4oX1sxXS5saW5lSGVpZ2h0KXx8X1swXS5oZWlnaHQ+X1sxXS5oZWlnaHQmJl9bMF0ud2lkdGg+X1sxXS53aWR0aCYmX1swXS5saW5lSGVpZ2h0Pl9bMV0ubGluZUhlaWdodD8wOjE7cmV0dXJuIF9bQl19LChpLGEpPT5gJHtpfSR7YS5mb250U2l6ZX0ke2EuZm9udFdlaWdodH0ke2EuZm9udEZhbWlseX1gKTtjbGFzcyBnU2V7Y29uc3RydWN0b3IoYT0hMSxmKXt0aGlzLmNvdW50PTAsdGhpcy5jb3VudD1mP2YubGVuZ3RoOjAsdGhpcy5uZXh0PWE/KCk9PnRoaXMuY291bnQrKzooKT0+RGF0ZS5ub3coKX19bGV0IE9XO2NvbnN0IHBTZT1mdW5jdGlvbihpKXtyZXR1cm4gT1c9T1d8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGk9ZXNjYXBlKGkpLnJlcGxhY2UoLyUyNi9nLCImIikucmVwbGFjZSgvJTIzL2csIiMiKS5yZXBsYWNlKC8lM0IvZywiOyIpLE9XLmlubmVySFRNTD1pLHVuZXNjYXBlKE9XLnRleHRDb250ZW50KX07ZnVuY3Rpb24gV0l0KGkpe3JldHVybiJzdHIiaW4gaX1jb25zdCBiU2U9KGksYSxmLHApPT57dmFyIG07aWYoIXApcmV0dXJuO2NvbnN0IHc9KG09aS5ub2RlKCkpPT1udWxsP3ZvaWQgMDptLmdldEJCb3goKTt3JiZpLmFwcGVuZCgidGV4dCIpLnRleHQocCkuYXR0cigieCIsdy54K3cud2lkdGgvMikuYXR0cigieSIsLWYpLmF0dHIoImNsYXNzIixhKX0sVkE9aT0+e2lmKHR5cGVvZiBpPT0ibnVtYmVyIilyZXR1cm5baSxpKyJweCJdO2NvbnN0IGE9cGFyc2VJbnQoaT8/IiIsMTApO3JldHVybiBOdW1iZXIuaXNOYU4oYSk/W3ZvaWQgMCx2b2lkIDBdOmk9PT1TdHJpbmcoYSk/W2EsaSsicHgiXTpbYSxpXX07ZnVuY3Rpb24gckYoaSxhKXtyZXR1cm4gSVcoe30saSxhKX1jb25zdCAkYT17YXNzaWduV2l0aERlcHRoOloxLHdyYXBMYWJlbDpVSXQsY2FsY3VsYXRlVGV4dEhlaWdodDpvZHQsY2FsY3VsYXRlVGV4dFdpZHRoOmQzLGNhbGN1bGF0ZVRleHREaW1lbnNpb25zOmNkdCxjbGVhbkFuZE1lcmdlOnJGLGRldGVjdEluaXQ6ZVNlLGRldGVjdERpcmVjdGl2ZTokSXQsaXNTdWJzdHJpbmdJbkFycmF5OnJTZSxpbnRlcnBvbGF0ZVRvQ3VydmU6ZXcsY2FsY0xhYmVsUG9zaXRpb246b1NlLGNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uOmNTZSxjYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uOnVTZSxmb3JtYXRVcmw6aVNlLGdldFN0eWxlc0Zyb21BcnJheTppbSxnZW5lcmF0ZUlkOlZJdCxyYW5kb206R0l0LHJ1bkZ1bmM6c1NlLGVudGl0eURlY29kZTpwU2UsaW5zZXJ0VGl0bGU6YlNlLHBhcnNlRm9udFNpemU6VkEsSW5pdElER2VuZXJhdG9yOmdTZX07dmFyIFlJdD0iY29tbSIsS0l0PSJydWxlIixYSXQ9ImRlY2wiLHdTZT0iQGltcG9ydCIsdlNlPSJAa2V5ZnJhbWVzIixtU2U9TWF0aC5hYnMsdWR0PVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gUUl0KGkpe3JldHVybiBpLnRyaW0oKX1mdW5jdGlvbiBsZHQoaSxhLGYpe3JldHVybiBpLnJlcGxhY2UoYSxmKX1mdW5jdGlvbiB5U2UoaSxhKXtyZXR1cm4gaS5pbmRleE9mKGEpfWZ1bmN0aW9uIGlGKGksYSl7cmV0dXJuIGkuY2hhckNvZGVBdChhKXwwfWZ1bmN0aW9uIHNGKGksYSxmKXtyZXR1cm4gaS5zbGljZShhLGYpfWZ1bmN0aW9uIHVrKGkpe3JldHVybiBpLmxlbmd0aH1mdW5jdGlvbiBaSXQoaSl7cmV0dXJuIGkubGVuZ3RofWZ1bmN0aW9uIFBXKGksYSl7cmV0dXJuIGEucHVzaChpKSxpfXZhciBGVz0xLEdBPTEsSkl0PTAsbnc9MCxPZj0wLFVBPSIiO2Z1bmN0aW9uIGhkdChpLGEsZixwLHcsbSxiKXtyZXR1cm57dmFsdWU6aSxyb290OmEscGFyZW50OmYsdHlwZTpwLHByb3BzOncsY2hpbGRyZW46bSxsaW5lOkZXLGNvbHVtbjpHQSxsZW5ndGg6YixyZXR1cm46IiJ9fWZ1bmN0aW9uIHhTZSgpe3JldHVybiBPZn1mdW5jdGlvbiBrU2UoKXtyZXR1cm4gT2Y9bnc+MD9pRihVQSwtLW53KTowLEdBLS0sT2Y9PT0xMCYmKEdBPTEsRlctLSksT2Z9ZnVuY3Rpb24gc20oKXtyZXR1cm4gT2Y9bnc8Skl0P2lGKFVBLG53KyspOjAsR0ErKyxPZj09PTEwJiYoR0E9MSxGVysrKSxPZn1mdW5jdGlvbiBoVCgpe3JldHVybiBpRihVQSxudyl9ZnVuY3Rpb24gTlcoKXtyZXR1cm4gbnd9ZnVuY3Rpb24gQlcoaSxhKXtyZXR1cm4gc0YoVUEsaSxhKX1mdW5jdGlvbiBmZHQoaSl7c3dpdGNoKGkpe2Nhc2UgMDpjYXNlIDk6Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6cmV0dXJuIDU7Y2FzZSAzMzpjYXNlIDQzOmNhc2UgNDQ6Y2FzZSA0NzpjYXNlIDYyOmNhc2UgNjQ6Y2FzZSAxMjY6Y2FzZSA1OTpjYXNlIDEyMzpjYXNlIDEyNTpyZXR1cm4gNDtjYXNlIDU4OnJldHVybiAzO2Nhc2UgMzQ6Y2FzZSAzOTpjYXNlIDQwOmNhc2UgOTE6cmV0dXJuIDI7Y2FzZSA0MTpjYXNlIDkzOnJldHVybiAxfXJldHVybiAwfWZ1bmN0aW9uIEVTZShpKXtyZXR1cm4gRlc9R0E9MSxKSXQ9dWsoVUE9aSksbnc9MCxbXX1mdW5jdGlvbiBUU2UoaSl7cmV0dXJuIFVBPSIiLGl9ZnVuY3Rpb24gZGR0KGkpe3JldHVybiBRSXQoQlcobnctMSxnZHQoaT09PTkxP2krMjppPT09NDA/aSsxOmkpKSl9ZnVuY3Rpb24gQ1NlKGkpe2Zvcig7KE9mPWhUKCkpJiZPZjwzMzspc20oKTtyZXR1cm4gZmR0KGkpPjJ8fGZkdChPZik+Mz8iIjoiICJ9ZnVuY3Rpb24gX1NlKGksYSl7Zm9yKDstLWEmJnNtKCkmJiEoT2Y8NDh8fE9mPjEwMnx8T2Y+NTcmJk9mPDY1fHxPZj43MCYmT2Y8OTcpOyk7cmV0dXJuIEJXKGksTlcoKSsoYTw2JiZoVCgpPT0zMiYmc20oKT09MzIpKX1mdW5jdGlvbiBnZHQoaSl7Zm9yKDtzbSgpOylzd2l0Y2goT2Ype2Nhc2UgaTpyZXR1cm4gbnc7Y2FzZSAzNDpjYXNlIDM5OmkhPT0zNCYmaSE9PTM5JiZnZHQoT2YpO2JyZWFrO2Nhc2UgNDA6aT09PTQxJiZnZHQoaSk7YnJlYWs7Y2FzZSA5MjpzbSgpO2JyZWFrfXJldHVybiBud31mdW5jdGlvbiBTU2UoaSxhKXtmb3IoO3NtKCkmJmkrT2YhPT00NysxMDspaWYoaStPZj09PTQyKzQyJiZoVCgpPT09NDcpYnJlYWs7cmV0dXJuIi8qIitCVyhhLG53LTEpKyIqIit1ZHQoaT09PTQ3P2k6c20oKSl9ZnVuY3Rpb24gQVNlKGkpe2Zvcig7IWZkdChoVCgpKTspc20oKTtyZXR1cm4gQlcoaSxudyl9ZnVuY3Rpb24gTFNlKGkpe3JldHVybiBUU2UoUlcoIiIsbnVsbCxudWxsLG51bGwsWyIiXSxpPUVTZShpKSwwLFswXSxpKSl9ZnVuY3Rpb24gUlcoaSxhLGYscCx3LG0sYixFLF8pe2Zvcih2YXIgQT0wLEk9MCxCPWIsTj0wLFI9MCx6PTAsVz0xLGV0PTEsc3Q9MSxhdD0wLGJ0PSIiLG10PXcseXQ9bSxmdD1wLHV0PWJ0O2V0Oylzd2l0Y2goej1hdCxhdD1zbSgpKXtjYXNlIDQwOmlmKHohPTEwOCYmaUYodXQsQi0xKT09NTgpe3lTZSh1dCs9bGR0KGRkdChhdCksIiYiLCImXGYiKSwiJlxmIikhPS0xJiYoc3Q9LTEpO2JyZWFrfWNhc2UgMzQ6Y2FzZSAzOTpjYXNlIDkxOnV0Kz1kZHQoYXQpO2JyZWFrO2Nhc2UgOTpjYXNlIDEwOmNhc2UgMTM6Y2FzZSAzMjp1dCs9Q1NlKHopO2JyZWFrO2Nhc2UgOTI6dXQrPV9TZShOVygpLTEsNyk7Y29udGludWU7Y2FzZSA0Nzpzd2l0Y2goaFQoKSl7Y2FzZSA0MjpjYXNlIDQ3OlBXKE1TZShTU2Uoc20oKSxOVygpKSxhLGYpLF8pO2JyZWFrO2RlZmF1bHQ6dXQrPSIvIn1icmVhaztjYXNlIDEyMypXOkVbQSsrXT11ayh1dCkqc3Q7Y2FzZSAxMjUqVzpjYXNlIDU5OmNhc2UgMDpzd2l0Y2goYXQpe2Nhc2UgMDpjYXNlIDEyNTpldD0wO2Nhc2UgNTkrSTpSPjAmJnVrKHV0KS1CJiZQVyhSPjMyP2VPdCh1dCsiOyIscCxmLEItMSk6ZU90KGxkdCh1dCwiICIsIiIpKyI7IixwLGYsQi0yKSxfKTticmVhaztjYXNlIDU5OnV0Kz0iOyI7ZGVmYXVsdDppZihQVyhmdD10T3QodXQsYSxmLEEsSSx3LEUsYnQsbXQ9W10seXQ9W10sQiksbSksYXQ9PT0xMjMpaWYoST09PTApUlcodXQsYSxmdCxmdCxtdCxtLEIsRSx5dCk7ZWxzZSBzd2l0Y2goTj09PTk5JiZpRih1dCwzKT09PTExMD8xMDA6Til7Y2FzZSAxMDA6Y2FzZSAxMDk6Y2FzZSAxMTU6UlcoaSxmdCxmdCxwJiZQVyh0T3QoaSxmdCxmdCwwLDAsdyxFLGJ0LHcsbXQ9W10sQikseXQpLHcseXQsQixFLHA/bXQ6eXQpO2JyZWFrO2RlZmF1bHQ6UlcodXQsZnQsZnQsZnQsWyIiXSx5dCwwLEUseXQpfX1BPUk9Uj0wLFc9c3Q9MSxidD11dD0iIixCPWI7YnJlYWs7Y2FzZSA1ODpCPTErdWsodXQpLFI9ejtkZWZhdWx0OmlmKFc8MSl7aWYoYXQ9PTEyMyktLVc7ZWxzZSBpZihhdD09MTI1JiZXKys9PTAmJmtTZSgpPT0xMjUpY29udGludWV9c3dpdGNoKHV0Kz11ZHQoYXQpLGF0Klcpe2Nhc2UgMzg6c3Q9ST4wPzE6KHV0Kz0iXGYiLC0xKTticmVhaztjYXNlIDQ0OkVbQSsrXT0odWsodXQpLTEpKnN0LHN0PTE7YnJlYWs7Y2FzZSA2NDpoVCgpPT09NDUmJih1dCs9ZGR0KHNtKCkpKSxOPWhUKCksST1CPXVrKGJ0PXV0Kz1BU2UoTlcoKSkpLGF0Kys7YnJlYWs7Y2FzZSA0NTp6PT09NDUmJnVrKHV0KT09MiYmKFc9MCl9fXJldHVybiBtfWZ1bmN0aW9uIHRPdChpLGEsZixwLHcsbSxiLEUsXyxBLEkpe2Zvcih2YXIgQj13LTEsTj13PT09MD9tOlsiIl0sUj1aSXQoTiksej0wLFc9MCxldD0wO3o8cDsrK3opZm9yKHZhciBzdD0wLGF0PXNGKGksQisxLEI9bVNlKFc9Ylt6XSkpLGJ0PWk7c3Q8UjsrK3N0KShidD1RSXQoVz4wP05bc3RdKyIgIithdDpsZHQoYXQsLyZcZi9nLE5bc3RdKSkpJiYoX1tldCsrXT1idCk7cmV0dXJuIGhkdChpLGEsZix3PT09MD9LSXQ6RSxfLEEsSSl9ZnVuY3Rpb24gTVNlKGksYSxmKXtyZXR1cm4gaGR0KGksYSxmLFlJdCx1ZHQoeFNlKCkpLHNGKGksMiwtMiksMCl9ZnVuY3Rpb24gZU90KGksYSxmLHApe3JldHVybiBoZHQoaSxhLGYsWEl0LHNGKGksMCxwKSxzRihpLHArMSwtMSkscCl9ZnVuY3Rpb24gcGR0KGksYSl7Zm9yKHZhciBmPSIiLHA9Wkl0KGkpLHc9MDt3PHA7dysrKWYrPWEoaVt3XSx3LGksYSl8fCIiO3JldHVybiBmfWZ1bmN0aW9uIERTZShpLGEsZixwKXtzd2l0Y2goaS50eXBlKXtjYXNlIHdTZTpjYXNlIFhJdDpyZXR1cm4gaS5yZXR1cm49aS5yZXR1cm58fGkudmFsdWU7Y2FzZSBZSXQ6cmV0dXJuIiI7Y2FzZSB2U2U6cmV0dXJuIGkucmV0dXJuPWkudmFsdWUrInsiK3BkdChpLmNoaWxkcmVuLHApKyJ9IjtjYXNlIEtJdDppLnZhbHVlPWkucHJvcHMuam9pbigiLCIpfXJldHVybiB1ayhmPXBkdChpLmNoaWxkcmVuLHApKT9pLnJldHVybj1pLnZhbHVlKyJ7IitmKyJ9IjoiIn1jb25zdCBuT3Q9IjEwLjYuMSIsV0E9T2JqZWN0LmZyZWV6ZShaaCk7bGV0IGZwPVoxKHt9LFdBKSxyT3QsWUE9W10sYUY9WjEoe30sV0EpO2NvbnN0IGpXPShpLGEpPT57bGV0IGY9WjEoe30saSkscD17fTtmb3IoY29uc3QgdyBvZiBhKWFPdCh3KSxwPVoxKHAsdyk7aWYoZj1aMShmLHApLHAudGhlbWUmJnAudGhlbWUgaW4gVDUpe2NvbnN0IHc9WjEoe30sck90KSxtPVoxKHcudGhlbWVWYXJpYWJsZXN8fHt9LHAudGhlbWVWYXJpYWJsZXMpO2YudGhlbWUmJmYudGhlbWUgaW4gVDUmJihmLnRoZW1lVmFyaWFibGVzPVQ1W2YudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKG0pKX1yZXR1cm4gYUY9ZixjT3QoYUYpLGFGfSxJU2U9aT0+KGZwPVoxKHt9LFdBKSxmcD1aMShmcCxpKSxpLnRoZW1lJiZUNVtpLnRoZW1lXSYmKGZwLnRoZW1lVmFyaWFibGVzPVQ1W2kudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKGkudGhlbWVWYXJpYWJsZXMpKSxqVyhmcCxZQSksZnApLE9TZT1pPT57ck90PVoxKHt9LGkpfSxQU2U9aT0+KGZwPVoxKGZwLGkpLGpXKGZwLFlBKSxmcCksaU90PSgpPT5aMSh7fSxmcCksc090PWk9PihjT3QoaSksWjEoYUYsaSksRmQoKSksRmQ9KCk9PloxKHt9LGFGKSxhT3Q9aT0+e2kmJihbInNlY3VyZSIsLi4uZnAuc2VjdXJlPz9bXV0uZm9yRWFjaChhPT57T2JqZWN0Lmhhc093bihpLGEpJiYoVXQuZGVidWcoYERlbmllZCBhdHRlbXB0IHRvIG1vZGlmeSBhIHNlY3VyZSBrZXkgJHthfWAsaVthXSksZGVsZXRlIGlbYV0pfSksT2JqZWN0LmtleXMoaSkuZm9yRWFjaChhPT57YS5zdGFydHNXaXRoKCJfXyIpJiZkZWxldGUgaVthXX0pLE9iamVjdC5rZXlzKGkpLmZvckVhY2goYT0+e3R5cGVvZiBpW2FdPT0ic3RyaW5nIiYmKGlbYV0uaW5jbHVkZXMoIjwiKXx8aVthXS5pbmNsdWRlcygiPiIpfHxpW2FdLmluY2x1ZGVzKCJ1cmwoZGF0YToiKSkmJmRlbGV0ZSBpW2FdLHR5cGVvZiBpW2FdPT0ib2JqZWN0IiYmYU90KGlbYV0pfSkpfSxGU2U9aT0+e21XKGkpLGkuZm9udEZhbWlseSYmKCFpLnRoZW1lVmFyaWFibGVzfHwhaS50aGVtZVZhcmlhYmxlcy5mb250RmFtaWx5KSYmKGkudGhlbWVWYXJpYWJsZXM9e2ZvbnRGYW1pbHk6aS5mb250RmFtaWx5fSksWUEucHVzaChpKSxqVyhmcCxZQSl9LCRXPShpPWZwKT0+e1lBPVtdLGpXKGksWUEpfSxOU2U9e0xBWllfTE9BRF9ERVBSRUNBVEVEOiJUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGxhenlMb2FkZWREaWFncmFtcyBhbmQgbG9hZEV4dGVybmFsRGlhZ3JhbXNBdFN0YXJ0dXAgYXJlIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgcmVnaXN0ZXJFeHRlcm5hbERpYWdyYW1zIGluc3RlYWQuIn0sb090PXt9LEJTZT1pPT57b090W2ldfHwoVXQud2FybihOU2VbaV0pLG9PdFtpXT0hMCl9LGNPdD1pPT57aSYmKGkubGF6eUxvYWRlZERpYWdyYW1zfHxpLmxvYWRFeHRlcm5hbERpYWdyYW1zQXRTdGFydHVwKSYmQlNlKCJMQVpZX0xPQURfREVQUkVDQVRFRCIpfSx1T3Q9ImM0IixSU2U9e2lkOnVPdCxkZXRlY3RvcjppPT4vXlxzKkM0Q29udGV4dHxDNENvbnRhaW5lcnxDNENvbXBvbmVudHxDNER5bmFtaWN8QzREZXBsb3ltZW50Ly50ZXN0KGkpLGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5uSWUpO3JldHVybntpZDp1T3QsZGlhZ3JhbTppfX19LGxPdD0iZmxvd2NoYXJ0IixqU2U9e2lkOmxPdCxkZXRlY3RvcjooaSxhKT0+e3ZhciBmLHA7cmV0dXJuKChmPWE9PW51bGw/dm9pZCAwOmEuZmxvd2NoYXJ0KT09bnVsbD92b2lkIDA6Zi5kZWZhdWx0UmVuZGVyZXIpPT09ImRhZ3JlLXdyYXBwZXIifHwoKHA9YT09bnVsbD92b2lkIDA6YS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpwLmRlZmF1bHRSZW5kZXJlcik9PT0iZWxrIj8hMTovXlxzKmdyYXBoLy50ZXN0KGkpfSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+Y3plKTtyZXR1cm57aWQ6bE90LGRpYWdyYW06aX19fSxoT3Q9ImZsb3djaGFydC12MiIsJFNlPXtpZDpoT3QsZGV0ZWN0b3I6KGksYSk9Pnt2YXIgZixwLHc7cmV0dXJuKChmPWE9PW51bGw/dm9pZCAwOmEuZmxvd2NoYXJ0KT09bnVsbD92b2lkIDA6Zi5kZWZhdWx0UmVuZGVyZXIpPT09ImRhZ3JlLWQzInx8KChwPWE9PW51bGw/dm9pZCAwOmEuZmxvd2NoYXJ0KT09bnVsbD92b2lkIDA6cC5kZWZhdWx0UmVuZGVyZXIpPT09ImVsayI/ITE6L15ccypncmFwaC8udGVzdChpKSYmKCh3PWE9PW51bGw/dm9pZCAwOmEuZmxvd2NoYXJ0KT09bnVsbD92b2lkIDA6dy5kZWZhdWx0UmVuZGVyZXIpPT09ImRhZ3JlLXdyYXBwZXIiPyEwOi9eXHMqZmxvd2NoYXJ0Ly50ZXN0KGkpfSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dXplKTtyZXR1cm57aWQ6aE90LGRpYWdyYW06aX19fSxmT3Q9ImVyIix6U2U9e2lkOmZPdCxkZXRlY3RvcjppPT4vXlxzKmVyRGlhZ3JhbS8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+RnplKTtyZXR1cm57aWQ6Zk90LGRpYWdyYW06aX19fSxkT3Q9ImdpdEdyYXBoIixxU2U9e2lkOmRPdCxkZXRlY3RvcjppPT4vXlxzKmdpdEdyYXBoLy50ZXN0KGkpLGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5hcWUpO3JldHVybntpZDpkT3QsZGlhZ3JhbTppfX19LGdPdD0iZ2FudHQiLEhTZT17aWQ6Z090LGRldGVjdG9yOmk9Pi9eXHMqZ2FudHQvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PktxZSk7cmV0dXJue2lkOmdPdCxkaWFncmFtOml9fX0scE90PSJpbmZvIixWU2U9e2lkOnBPdCxkZXRlY3RvcjppPT4vXlxzKmluZm8vLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PlFxZSk7cmV0dXJue2lkOnBPdCxkaWFncmFtOml9fX0sYk90PSJwaWUiLEdTZT17aWQ6Yk90LGRldGVjdG9yOmk9Pi9eXHMqcGllLy50ZXN0KGkpLGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5ySGUpO3JldHVybntpZDpiT3QsZGlhZ3JhbTppfX19LHdPdD0icXVhZHJhbnRDaGFydCIsVVNlPXtpZDp3T3QsZGV0ZWN0b3I6aT0+L15ccypxdWFkcmFudENoYXJ0Ly50ZXN0KGkpLGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5tSGUpO3JldHVybntpZDp3T3QsZGlhZ3JhbTppfX19LHZPdD0ieHljaGFydCIsV1NlPXtpZDp2T3QsZGV0ZWN0b3I6aT0+L15ccyp4eWNoYXJ0LWJldGEvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PkhIZSk7cmV0dXJue2lkOnZPdCxkaWFncmFtOml9fX0sbU90PSJyZXF1aXJlbWVudCIsWVNlPXtpZDptT3QsZGV0ZWN0b3I6aT0+L15ccypyZXF1aXJlbWVudChEaWFncmFtKT8vLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PkpIZSk7cmV0dXJue2lkOm1PdCxkaWFncmFtOml9fX0seU90PSJzZXF1ZW5jZSIsS1NlPXtpZDp5T3QsZGV0ZWN0b3I6aT0+L15ccypzZXF1ZW5jZURpYWdyYW0vLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmlHZSk7cmV0dXJue2lkOnlPdCxkaWFncmFtOml9fX0seE90PSJjbGFzcyIsWFNlPXtpZDp4T3QsZGV0ZWN0b3I6KGksYSk9Pnt2YXIgZjtyZXR1cm4oKGY9YT09bnVsbD92b2lkIDA6YS5jbGFzcyk9PW51bGw/dm9pZCAwOmYuZGVmYXVsdFJlbmRlcmVyKT09PSJkYWdyZS13cmFwcGVyIj8hMTovXlxzKmNsYXNzRGlhZ3JhbS8udGVzdChpKX0sbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PkFHZSk7cmV0dXJue2lkOnhPdCxkaWFncmFtOml9fX0sa090PSJjbGFzc0RpYWdyYW0iLFFTZT17aWQ6a090LGRldGVjdG9yOihpLGEpPT57dmFyIGY7cmV0dXJuL15ccypjbGFzc0RpYWdyYW0vLnRlc3QoaSkmJigoZj1hPT1udWxsP3ZvaWQgMDphLmNsYXNzKT09bnVsbD92b2lkIDA6Zi5kZWZhdWx0UmVuZGVyZXIpPT09ImRhZ3JlLXdyYXBwZXIiPyEwOi9eXHMqY2xhc3NEaWFncmFtLXYyLy50ZXN0KGkpfSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+UEdlKTtyZXR1cm57aWQ6a090LGRpYWdyYW06aX19fSxFT3Q9InN0YXRlIixaU2U9e2lkOkVPdCxkZXRlY3RvcjooaSxhKT0+e3ZhciBmO3JldHVybigoZj1hPT1udWxsP3ZvaWQgMDphLnN0YXRlKT09bnVsbD92b2lkIDA6Zi5kZWZhdWx0UmVuZGVyZXIpPT09ImRhZ3JlLXdyYXBwZXIiPyExOi9eXHMqc3RhdGVEaWFncmFtLy50ZXN0KGkpfSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+eFVlKTtyZXR1cm57aWQ6RU90LGRpYWdyYW06aX19fSxUT3Q9InN0YXRlRGlhZ3JhbSIsSlNlPXtpZDpUT3QsZGV0ZWN0b3I6KGksYSk9Pnt2YXIgZjtyZXR1cm4hISgvXlxzKnN0YXRlRGlhZ3JhbS12Mi8udGVzdChpKXx8L15ccypzdGF0ZURpYWdyYW0vLnRlc3QoaSkmJigoZj1hPT1udWxsP3ZvaWQgMDphLnN0YXRlKT09bnVsbD92b2lkIDA6Zi5kZWZhdWx0UmVuZGVyZXIpPT09ImRhZ3JlLXdyYXBwZXIiKX0sbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PiRVZSk7cmV0dXJue2lkOlRPdCxkaWFncmFtOml9fX0sQ090PSJqb3VybmV5Iix0QWU9e2lkOkNPdCxkZXRlY3RvcjppPT4vXlxzKmpvdXJuZXkvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnNXZSk7cmV0dXJue2lkOkNPdCxkaWFncmFtOml9fX0sZUFlPWZ1bmN0aW9uKGksYSl7Zm9yKGxldCBmIG9mIGEpaS5hdHRyKGZbMF0sZlsxXSl9LG5BZT1mdW5jdGlvbihpLGEsZil7bGV0IHA9bmV3IE1hcDtyZXR1cm4gZj8ocC5zZXQoIndpZHRoIiwiMTAwJSIpLHAuc2V0KCJzdHlsZSIsYG1heC13aWR0aDogJHthfXB4O2ApKToocC5zZXQoImhlaWdodCIsaSkscC5zZXQoIndpZHRoIixhKSkscH0sazA9ZnVuY3Rpb24oaSxhLGYscCl7Y29uc3Qgdz1uQWUoYSxmLHApO2VBZShpLHcpfSxmVD1mdW5jdGlvbihpLGEsZixwKXtjb25zdCB3PWEubm9kZSgpLmdldEJCb3goKSxtPXcud2lkdGgsYj13LmhlaWdodDtVdC5pbmZvKGBTVkcgYm91bmRzOiAke219eCR7Yn1gLHcpO2xldCBFPTAsXz0wO1V0LmluZm8oYEdyYXBoIGJvdW5kczogJHtFfXgke199YCxpKSxFPW0rZioyLF89YitmKjIsVXQuaW5mbyhgQ2FsY3VsYXRlZCBib3VuZHM6ICR7RX14JHtffWApLGswKGEsXyxFLHApO2NvbnN0IEE9YCR7dy54LWZ9ICR7dy55LWZ9ICR7dy53aWR0aCsyKmZ9ICR7dy5oZWlnaHQrMipmfWA7YS5hdHRyKCJ2aWV3Qm94IixBKX0selc9e30sckFlPShpLGEsZik9PntsZXQgcD0iIjtyZXR1cm4gaSBpbiB6VyYmeldbaV0/cD16V1tpXShmKTpVdC53YXJuKGBObyB0aGVtZSBmb3VuZCBmb3IgJHtpfWApLGAgJiB7CiAgICBmb250LWZhbWlseTogJHtmLmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAke2YuZm9udFNpemV9OwogICAgZmlsbDogJHtmLnRleHRDb2xvcn0KICB9CgogIC8qIENsYXNzZXMgY29tbW9uIGZvciBtdWx0aXBsZSBkaWFncmFtcyAqLwoKICAmIC5lcnJvci1pY29uIHsKICAgIGZpbGw6ICR7Zi5lcnJvckJrZ0NvbG9yfTsKICB9CiAgJiAuZXJyb3ItdGV4dCB7CiAgICBmaWxsOiAke2YuZXJyb3JUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiAke2YuZXJyb3JUZXh0Q29sb3J9OwogIH0KCiAgJiAuZWRnZS10aGlja25lc3Mtbm9ybWFsIHsKICAgIHN0cm9rZS13aWR0aDogMnB4OwogIH0KICAmIC5lZGdlLXRoaWNrbmVzcy10aGljayB7CiAgICBzdHJva2Utd2lkdGg6IDMuNXB4CiAgfQogICYgLmVkZ2UtcGF0dGVybi1zb2xpZCB7CiAgICBzdHJva2UtZGFzaGFycmF5OiAwOwogIH0KCiAgJiAuZWRnZS1wYXR0ZXJuLWRhc2hlZHsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDM7CiAgfQogIC5lZGdlLXBhdHRlcm4tZG90dGVkIHsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDI7CiAgfQoKICAmIC5tYXJrZXIgewogICAgZmlsbDogJHtmLmxpbmVDb2xvcn07CiAgICBzdHJva2U6ICR7Zi5saW5lQ29sb3J9OwogIH0KICAmIC5tYXJrZXIuY3Jvc3MgewogICAgc3Ryb2tlOiAke2YubGluZUNvbG9yfTsKICB9CgogICYgc3ZnIHsKICAgIGZvbnQtZmFtaWx5OiAke2YuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6ICR7Zi5mb250U2l6ZX07CiAgfQoKICAke3B9CgogICR7YX0KYH0saUFlPShpLGEpPT57YSE9PXZvaWQgMCYmKHpXW2ldPWEpfSxzQWU9ckFlO2xldCBiZHQ9IiIsd2R0PSIiLHZkdD0iIjtjb25zdCBtZHQ9aT0+UTEoaSxGZCgpKSxoZz0oKT0+e2JkdD0iIix2ZHQ9IiIsd2R0PSIifSxFMD1pPT57YmR0PW1kdChpKS5yZXBsYWNlKC9eXHMrL2csIiIpfSxmZz0oKT0+YmR0LGRnPWk9Pnt2ZHQ9bWR0KGkpLnJlcGxhY2UoL1xuXHMrL2csYApgKX0sZ2c9KCk9PnZkdCxOYj1pPT57d2R0PW1kdChpKX0scGc9KCk9PndkdCxfT3Q9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGNsZWFyOmhnLGdldEFjY0Rlc2NyaXB0aW9uOmdnLGdldEFjY1RpdGxlOmZnLGdldERpYWdyYW1UaXRsZTpwZyxzZXRBY2NEZXNjcmlwdGlvbjpkZyxzZXRBY2NUaXRsZTpFMCxzZXREaWFncmFtVGl0bGU6TmJ9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksYUFlPVV0LG9BZT1YZnQsT2U9RmQsY0FlPXNPdCxTT3Q9V0EsdUFlPWk9PlExKGksT2UoKSksQU90PWZULGxBZT0oKT0+X090LHFXPXt9LEhXPShpLGEsZik9Pnt2YXIgcDtpZihxV1tpXSl0aHJvdyBuZXcgRXJyb3IoYERpYWdyYW0gJHtpfSBhbHJlYWR5IHJlZ2lzdGVyZWQuYCk7cVdbaV09YSxmJiZ1SXQoaSxmKSxpQWUoaSxhLnN0eWxlcyksKHA9YS5pbmplY3RVdGlscyk9PW51bGx8fHAuY2FsbChhLGFBZSxvQWUsT2UsdUFlLEFPdCxsQWUoKSwoKT0+e30pfSx5ZHQ9aT0+e2lmKGkgaW4gcVcpcmV0dXJuIHFXW2ldO3Rocm93IG5ldyBoQWUoaSl9O2NsYXNzIGhBZSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGEpe3N1cGVyKGBEaWFncmFtICR7YX0gbm90IGZvdW5kLmApfX1jb25zdCBWVz1pPT57dmFyIHc7Y29uc3R7c2VjdXJpdHlMZXZlbDphfT1PZSgpO2xldCBmPXlyKCJib2R5Iik7aWYoYT09PSJzYW5kYm94Iil7Y29uc3QgYj0oKHc9eXIoYCNpJHtpfWApLm5vZGUoKSk9PW51bGw/dm9pZCAwOncuY29udGVudERvY3VtZW50KT8/ZG9jdW1lbnQ7Zj15cihiLmJvZHkpfXJldHVybiBmLnNlbGVjdChgIyR7aX1gKX0sTE90PXtkcmF3OihpLGEsZik9PntVdC5kZWJ1ZyhgcmVuZXJpbmcgc3ZnIGZvciBzeW50YXggZXJyb3IKYCk7Y29uc3QgcD1WVyhhKTtwLmF0dHIoInZpZXdCb3giLCIwIDAgMjQxMiA1MTIiKSxrMChwLDEwMCw1MTIsITApO2NvbnN0IHc9cC5hcHBlbmQoImciKTt3LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDExLjMxMywxMjMuMzEzYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyLTkuMzc1LDkuMzc1LTIwLjY4OC0yMC42ODhjLTEyLjQ4NC0xMi41LTMyLjc2Ni0xMi41LTQ1LjI1LDBsLTE2LDE2Yy0xLjI2MSwxLjI2MS0yLjMwNCwyLjY0OC0zLjMxLDQuMDUxLTIxLjczOS04LjU2MS00NS4zMjQtMTMuNDI2LTcwLjA2NS0xMy40MjYtMTA1Ljg2NywwLTE5Miw4Ni4xMzMtMTkyLDE5MnM4Ni4xMzMsMTkyIDE5MiwxOTIgMTkyLTg2LjEzMyAxOTItMTkyYzAtMjQuNzQxLTQuODY0LTQ4LjMyNy0xMy40MjYtNzAuMDY1IDEuNDAyLTEuMDA3IDIuNzktMi4wNDkgNC4wNTEtMy4zMWwxNi0xNmMxMi41LTEyLjQ5MiAxMi41LTMyLjc1OCAwLTQ1LjI1bC0yMC42ODgtMjAuNjg4IDkuMzc1LTkuMzc1IDMyLjAwMS0zMS45OTl6bS0yMTkuMzEzLDEwMC42ODdjLTUyLjkzOCwwLTk2LDQzLjA2My05Niw5NiAwLDguODM2LTcuMTY0LDE2LTE2LDE2cy0xNi03LjE2NC0xNi0xNmMwLTcwLjU3OCA1Ny40MjItMTI4IDEyOC0xMjggOC44MzYsMCAxNiw3LjE2NCAxNiwxNnMtNy4xNjQsMTYtMTYsMTZ6Iiksdy5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQ1OS4wMiwxNDguOThjLTYuMjUtNi4yNS0xNi4zNzUtNi4yNS0yMi42MjUsMHMtNi4yNSwxNi4zNzUgMCwyMi42MjVsMTYsMTZjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4IDYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNWwtMTYuMDAxLTE2eiIpLHcuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm0zNDAuMzk1LDc1LjYwNWMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODggNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1bC0xNi0xNmMtNi4yNS02LjI1LTE2LjM3NS02LjI1LTIyLjYyNSwwcy02LjI1LDE2LjM3NSAwLDIyLjYyNWwxNS45OTksMTZ6Iiksdy5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQwMCw2NGM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2di0zMmMwLTguODM2LTcuMTU2LTE2LTE2LTE2LTguODQ0LDAtMTYsNy4xNjQtMTYsMTZ2MzJjMCw4LjgzNiA3LjE1NiwxNiAxNiwxNnoiKSx3LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDk2LDk2LjU4NmgtMzJjLTguODQ0LDAtMTYsNy4xNjQtMTYsMTYgMCw4LjgzNiA3LjE1NiwxNiAxNiwxNmgzMmM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2IDAtOC44MzYtNy4xNTYtMTYtMTYtMTZ6Iiksdy5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQzNi45OCw3NS42MDVjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4bDMyLTMyYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyYy02LjI1MSw2LjI1LTYuMjUxLDE2LjM3NS0wLjAwMSwyMi42MjV6Iiksdy5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVycm9yLXRleHQiKS5hdHRyKCJ4IiwxNDQwKS5hdHRyKCJ5IiwyNTApLmF0dHIoImZvbnQtc2l6ZSIsIjE1MHB4Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCgiU3ludGF4IGVycm9yIGluIHRleHQiKSx3LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItdGV4dCIpLmF0dHIoIngiLDEyNTApLmF0dHIoInkiLDQwMCkuYXR0cigiZm9udC1zaXplIiwiMTAwcHgiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGBtZXJtYWlkIHZlcnNpb24gJHtmfWApfX0sZkFlPUxPdCxkQWU9e2RiOnt9LHJlbmRlcmVyOkxPdCxwYXJzZXI6e3BhcnNlcjp7eXk6e319LHBhcnNlOigpPT57fX19LE1PdD0iZmxvd2NoYXJ0LWVsayIsZ0FlPXtpZDpNT3QsZGV0ZWN0b3I6KGksYSk9Pnt2YXIgZjtyZXR1cm4hISgvXlxzKmZsb3djaGFydC1lbGsvLnRlc3QoaSl8fC9eXHMqZmxvd2NoYXJ0fGdyYXBoLy50ZXN0KGkpJiYoKGY9YT09bnVsbD92b2lkIDA6YS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpmLmRlZmF1bHRSZW5kZXJlcik9PT0iZWxrIil9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT54V2UpO3JldHVybntpZDpNT3QsZGlhZ3JhbTppfX19LERPdD0idGltZWxpbmUiLHBBZT17aWQ6RE90LGRldGVjdG9yOmk9Pi9eXHMqdGltZWxpbmUvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PiRXZSk7cmV0dXJue2lkOkRPdCxkaWFncmFtOml9fX0sSU90PSJtaW5kbWFwIixiQWU9e2lkOklPdCxkZXRlY3RvcjppPT4vXlxzKm1pbmRtYXAvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmJZZSk7cmV0dXJue2lkOklPdCxkaWFncmFtOml9fX0sT090PSJzYW5rZXkiLHdBZT17aWQ6T090LGRldGVjdG9yOmk9Pi9eXHMqc2Fua2V5LWJldGEvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PlVZZSk7cmV0dXJue2lkOk9PdCxkaWFncmFtOml9fX07bGV0IFBPdD0hMTtjb25zdCB4ZHQ9KCk9PntQT3R8fChQT3Q9ITAsSFcoImVycm9yIixkQWUsaT0+aS50b0xvd2VyQ2FzZSgpLnRyaW0oKT09PSJlcnJvciIpLEhXKCItLS0iLHtkYjp7Y2xlYXI6KCk9Pnt9fSxzdHlsZXM6e30scmVuZGVyZXI6e2RyYXc6KCk9Pnt9fSxwYXJzZXI6e3BhcnNlcjp7eXk6e319LHBhcnNlOigpPT57dGhyb3cgbmV3IEVycm9yKCJEaWFncmFtcyBiZWdpbm5pbmcgd2l0aCAtLS0gYXJlIG5vdCB2YWxpZC4gSWYgeW91IHdlcmUgdHJ5aW5nIHRvIHVzZSBhIFlBTUwgZnJvbnQtbWF0dGVyLCBwbGVhc2UgZW5zdXJlIHRoYXQgeW91J3ZlIGNvcnJlY3RseSBvcGVuZWQgYW5kIGNsb3NlZCB0aGUgWUFNTCBmcm9udC1tYXR0ZXIgd2l0aCB1bi1pbmRlbnRlZCBgLS0tYCBibG9ja3MiKX19LGluaXQ6KCk9Pm51bGx9LGk9PmkudG9Mb3dlckNhc2UoKS50cmltU3RhcnQoKS5zdGFydHNXaXRoKCItLS0iKSksY0l0KFJTZSxRU2UsWFNlLHpTZSxIU2UsVlNlLEdTZSxZU2UsS1NlLGdBZSwkU2UsalNlLGJBZSxwQWUscVNlLEpTZSxaU2UsdEFlLFVTZSx3QWUsV1NlKSl9O2NsYXNzIEZPdHtjb25zdHJ1Y3RvcihhLGY9e30pe3RoaXMudGV4dD1hLHRoaXMubWV0YWRhdGE9Zix0aGlzLnR5cGU9ImdyYXBoIix0aGlzLnRleHQrPWAKYDtjb25zdCBwPUZkKCk7dHJ5e3RoaXMudHlwZT15VyhhLHApfWNhdGNoKG0pe3RoaXMudHlwZT0iZXJyb3IiLHRoaXMuZGV0ZWN0RXJyb3I9bX1jb25zdCB3PXlkdCh0aGlzLnR5cGUpO1V0LmRlYnVnKCJUeXBlICIrdGhpcy50eXBlKSx0aGlzLmRiPXcuZGIsdGhpcy5yZW5kZXJlcj13LnJlbmRlcmVyLHRoaXMucGFyc2VyPXcucGFyc2VyLHRoaXMucGFyc2VyLnBhcnNlci55eT10aGlzLmRiLHRoaXMuaW5pdD13LmluaXQsdGhpcy5wYXJzZSgpfXBhcnNlKCl7dmFyIGYscCx3LG0sYjtpZih0aGlzLmRldGVjdEVycm9yKXRocm93IHRoaXMuZGV0ZWN0RXJyb3I7KHA9KGY9dGhpcy5kYikuY2xlYXIpPT1udWxsfHxwLmNhbGwoZik7Y29uc3QgYT1GZCgpOyh3PXRoaXMuaW5pdCk9PW51bGx8fHcuY2FsbCh0aGlzLGEpLHRoaXMubWV0YWRhdGEudGl0bGUmJigoYj0obT10aGlzLmRiKS5zZXREaWFncmFtVGl0bGUpPT1udWxsfHxiLmNhbGwobSx0aGlzLm1ldGFkYXRhLnRpdGxlKSksdGhpcy5wYXJzZXIucGFyc2UodGhpcy50ZXh0KX1hc3luYyByZW5kZXIoYSxmKXthd2FpdCB0aGlzLnJlbmRlcmVyLmRyYXcodGhpcy50ZXh0LGEsZix0aGlzKX1nZXRQYXJzZXIoKXtyZXR1cm4gdGhpcy5wYXJzZXJ9Z2V0VHlwZSgpe3JldHVybiB0aGlzLnR5cGV9fWNvbnN0IGtkdD1hc3luYyhpLGE9e30pPT57Y29uc3QgZj15VyhpLEZkKCkpO3RyeXt5ZHQoZil9Y2F0Y2h7Y29uc3Qgdz1FQ2UoZik7aWYoIXcpdGhyb3cgbmV3IG9JdChgRGlhZ3JhbSAke2Z9IG5vdCBmb3VuZC5gKTtjb25zdHtpZDptLGRpYWdyYW06Yn09YXdhaXQgdygpO0hXKG0sYil9cmV0dXJuIG5ldyBGT3QoaSxhKX07bGV0IEVkdD1bXTtjb25zdCB2QWU9aT0+e0VkdC5wdXNoKGkpfSxtQWU9KCk9PntFZHQuZm9yRWFjaChpPT57aSgpfSksRWR0PVtdfTt2YXIgeUFlPWtJdChPYmplY3Qua2V5cyxPYmplY3QpO2NvbnN0IHhBZT15QWU7dmFyIGtBZT1PYmplY3QucHJvdG90eXBlLEVBZT1rQWUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gTk90KGkpe2lmKCFfVyhpKSlyZXR1cm4geEFlKGkpO3ZhciBhPVtdO2Zvcih2YXIgZiBpbiBPYmplY3QoaSkpRUFlLmNhbGwoaSxmKSYmZiE9ImNvbnN0cnVjdG9yIiYmYS5wdXNoKGYpO3JldHVybiBhfXZhciBUQWU9b1Qobm0sIkRhdGFWaWV3Iik7Y29uc3QgVGR0PVRBZTt2YXIgQ0FlPW9UKG5tLCJQcm9taXNlIik7Y29uc3QgQ2R0PUNBZTt2YXIgX0FlPW9UKG5tLCJTZXQiKTtjb25zdCBLQT1fQWU7dmFyIFNBZT1vVChubSwiV2Vha01hcCIpO2NvbnN0IF9kdD1TQWU7dmFyIEJPdD0iW29iamVjdCBNYXBdIixBQWU9IltvYmplY3QgT2JqZWN0XSIsUk90PSJbb2JqZWN0IFByb21pc2VdIixqT3Q9IltvYmplY3QgU2V0XSIsJE90PSJbb2JqZWN0IFdlYWtNYXBdIix6T3Q9IltvYmplY3QgRGF0YVZpZXddIixMQWU9YVQoVGR0KSxNQWU9YVQoSlApLERBZT1hVChDZHQpLElBZT1hVChLQSksT0FlPWFUKF9kdCksZFQ9c1Q7KFRkdCYmZFQobmV3IFRkdChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9ek90fHxKUCYmZFQobmV3IEpQKSE9Qk90fHxDZHQmJmRUKENkdC5yZXNvbHZlKCkpIT1ST3R8fEtBJiZkVChuZXcgS0EpIT1qT3R8fF9kdCYmZFQobmV3IF9kdCkhPSRPdCkmJihkVD1mdW5jdGlvbihpKXt2YXIgYT1zVChpKSxmPWE9PUFBZT9pLmNvbnN0cnVjdG9yOnZvaWQgMCxwPWY/YVQoZik6IiI7aWYocClzd2l0Y2gocCl7Y2FzZSBMQWU6cmV0dXJuIHpPdDtjYXNlIE1BZTpyZXR1cm4gQk90O2Nhc2UgREFlOnJldHVybiBST3Q7Y2FzZSBJQWU6cmV0dXJuIGpPdDtjYXNlIE9BZTpyZXR1cm4gJE90fXJldHVybiBhfSk7Y29uc3QgWEE9ZFQ7dmFyIFBBZT0iW29iamVjdCBNYXBdIixGQWU9IltvYmplY3QgU2V0XSIsTkFlPU9iamVjdC5wcm90b3R5cGUsQkFlPU5BZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBvRihpKXtpZihpPT1udWxsKXJldHVybiEwO2lmKGNrKGkpJiYoSWYoaSl8fHR5cGVvZiBpPT0ic3RyaW5nInx8dHlwZW9mIGkuc3BsaWNlPT0iZnVuY3Rpb24ifHx6QShpKXx8QVcoaSl8fCRBKGkpKSlyZXR1cm4haS5sZW5ndGg7dmFyIGE9WEEoaSk7aWYoYT09UEFlfHxhPT1GQWUpcmV0dXJuIWkuc2l6ZTtpZihfVyhpKSlyZXR1cm4hTk90KGkpLmxlbmd0aDtmb3IodmFyIGYgaW4gaSlpZihCQWUuY2FsbChpLGYpKXJldHVybiExO3JldHVybiEwfWNvbnN0IFJBZT0iZ3JhcGhpY3MtZG9jdW1lbnQgZG9jdW1lbnQiO2Z1bmN0aW9uIGpBZShpLGEpe2kuYXR0cigicm9sZSIsUkFlKSxhIT09IiImJmkuYXR0cigiYXJpYS1yb2xlZGVzY3JpcHRpb24iLGEpfWZ1bmN0aW9uICRBZShpLGEsZixwKXtpZihpLmluc2VydCE9PXZvaWQgMCl7aWYoZil7Y29uc3Qgdz1gY2hhcnQtZGVzYy0ke3B9YDtpLmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiLHcpLGkuaW5zZXJ0KCJkZXNjIiwiOmZpcnN0LWNoaWxkIikuYXR0cigiaWQiLHcpLnRleHQoZil9aWYoYSl7Y29uc3Qgdz1gY2hhcnQtdGl0bGUtJHtwfWA7aS5hdHRyKCJhcmlhLWxhYmVsbGVkYnkiLHcpLGkuaW5zZXJ0KCJ0aXRsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImlkIix3KS50ZXh0KGEpfX19Y29uc3QgekFlPWk9PmkucmVwbGFjZSgvXlxzKiUlKD8heylbXlxuXStcbj8vZ20sIiIpLnRyaW1TdGFydCgpOy8qISBqcy15YW1sIDQuMS4wIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbCBAbGljZW5zZSBNSVQgKi9mdW5jdGlvbiBxT3QoaSl7cmV0dXJuIHR5cGVvZiBpPiJ1Inx8aT09PW51bGx9ZnVuY3Rpb24gcUFlKGkpe3JldHVybiB0eXBlb2YgaT09Im9iamVjdCImJmkhPT1udWxsfWZ1bmN0aW9uIEhBZShpKXtyZXR1cm4gQXJyYXkuaXNBcnJheShpKT9pOnFPdChpKT9bXTpbaV19ZnVuY3Rpb24gVkFlKGksYSl7dmFyIGYscCx3LG07aWYoYSlmb3IobT1PYmplY3Qua2V5cyhhKSxmPTAscD1tLmxlbmd0aDtmPHA7Zis9MSl3PW1bZl0saVt3XT1hW3ddO3JldHVybiBpfWZ1bmN0aW9uIEdBZShpLGEpe3ZhciBmPSIiLHA7Zm9yKHA9MDtwPGE7cCs9MSlmKz1pO3JldHVybiBmfWZ1bmN0aW9uIFVBZShpKXtyZXR1cm4gaT09PTAmJk51bWJlci5ORUdBVElWRV9JTkZJTklUWT09PTEvaX12YXIgV0FlPXFPdCxZQWU9cUFlLEtBZT1IQWUsWEFlPUdBZSxRQWU9VUFlLFpBZT1WQWUsYmc9e2lzTm90aGluZzpXQWUsaXNPYmplY3Q6WUFlLHRvQXJyYXk6S0FlLHJlcGVhdDpYQWUsaXNOZWdhdGl2ZVplcm86UUFlLGV4dGVuZDpaQWV9O2Z1bmN0aW9uIEhPdChpLGEpe3ZhciBmPSIiLHA9aS5yZWFzb258fCIodW5rbm93biByZWFzb24pIjtyZXR1cm4gaS5tYXJrPyhpLm1hcmsubmFtZSYmKGYrPSdpbiAiJytpLm1hcmsubmFtZSsnIiAnKSxmKz0iKCIrKGkubWFyay5saW5lKzEpKyI6IisoaS5tYXJrLmNvbHVtbisxKSsiKSIsIWEmJmkubWFyay5zbmlwcGV0JiYoZis9YAoKYCtpLm1hcmsuc25pcHBldCkscCsiICIrZik6cH1mdW5jdGlvbiBjRihpLGEpe0Vycm9yLmNhbGwodGhpcyksdGhpcy5uYW1lPSJZQU1MRXhjZXB0aW9uIix0aGlzLnJlYXNvbj1pLHRoaXMubWFyaz1hLHRoaXMubWVzc2FnZT1IT3QodGhpcywhMSksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrfHwiIn1jRi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLGNGLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jRixjRi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubmFtZSsiOiAiK0hPdCh0aGlzLGEpfTt2YXIgQTU9Y0Y7ZnVuY3Rpb24gU2R0KGksYSxmLHAsdyl7dmFyIG09IiIsYj0iIixFPU1hdGguZmxvb3Iody8yKS0xO3JldHVybiBwLWE+RSYmKG09IiAuLi4gIixhPXAtRSttLmxlbmd0aCksZi1wPkUmJihiPSIgLi4uIixmPXArRS1iLmxlbmd0aCkse3N0cjptK2kuc2xpY2UoYSxmKS5yZXBsYWNlKC9cdC9nLCLihpIiKStiLHBvczpwLWErbS5sZW5ndGh9fWZ1bmN0aW9uIEFkdChpLGEpe3JldHVybiBiZy5yZXBlYXQoIiAiLGEtaS5sZW5ndGgpK2l9ZnVuY3Rpb24gSkFlKGksYSl7aWYoYT1PYmplY3QuY3JlYXRlKGF8fG51bGwpLCFpLmJ1ZmZlcilyZXR1cm4gbnVsbDthLm1heExlbmd0aHx8KGEubWF4TGVuZ3RoPTc5KSx0eXBlb2YgYS5pbmRlbnQhPSJudW1iZXIiJiYoYS5pbmRlbnQ9MSksdHlwZW9mIGEubGluZXNCZWZvcmUhPSJudW1iZXIiJiYoYS5saW5lc0JlZm9yZT0zKSx0eXBlb2YgYS5saW5lc0FmdGVyIT0ibnVtYmVyIiYmKGEubGluZXNBZnRlcj0yKTtmb3IodmFyIGY9L1xyP1xufFxyfFwwL2cscD1bMF0sdz1bXSxtLGI9LTE7bT1mLmV4ZWMoaS5idWZmZXIpOyl3LnB1c2gobS5pbmRleCkscC5wdXNoKG0uaW5kZXgrbVswXS5sZW5ndGgpLGkucG9zaXRpb248PW0uaW5kZXgmJmI8MCYmKGI9cC5sZW5ndGgtMik7YjwwJiYoYj1wLmxlbmd0aC0xKTt2YXIgRT0iIixfLEEsST1NYXRoLm1pbihpLmxpbmUrYS5saW5lc0FmdGVyLHcubGVuZ3RoKS50b1N0cmluZygpLmxlbmd0aCxCPWEubWF4TGVuZ3RoLShhLmluZGVudCtJKzMpO2ZvcihfPTE7Xzw9YS5saW5lc0JlZm9yZSYmIShiLV88MCk7XysrKUE9U2R0KGkuYnVmZmVyLHBbYi1fXSx3W2ItX10saS5wb3NpdGlvbi0ocFtiXS1wW2ItX10pLEIpLEU9YmcucmVwZWF0KCIgIixhLmluZGVudCkrQWR0KChpLmxpbmUtXysxKS50b1N0cmluZygpLEkpKyIgfCAiK0Euc3RyK2AKYCtFO2ZvcihBPVNkdChpLmJ1ZmZlcixwW2JdLHdbYl0saS5wb3NpdGlvbixCKSxFKz1iZy5yZXBlYXQoIiAiLGEuaW5kZW50KStBZHQoKGkubGluZSsxKS50b1N0cmluZygpLEkpKyIgfCAiK0Euc3RyK2AKYCxFKz1iZy5yZXBlYXQoIi0iLGEuaW5kZW50K0krMytBLnBvcykrYF4KYCxfPTE7Xzw9YS5saW5lc0FmdGVyJiYhKGIrXz49dy5sZW5ndGgpO18rKylBPVNkdChpLmJ1ZmZlcixwW2IrX10sd1tiK19dLGkucG9zaXRpb24tKHBbYl0tcFtiK19dKSxCKSxFKz1iZy5yZXBlYXQoIiAiLGEuaW5kZW50KStBZHQoKGkubGluZStfKzEpLnRvU3RyaW5nKCksSSkrIiB8ICIrQS5zdHIrYApgO3JldHVybiBFLnJlcGxhY2UoL1xuJC8sIiIpfXZhciB0TGU9SkFlLGVMZT1bImtpbmQiLCJtdWx0aSIsInJlc29sdmUiLCJjb25zdHJ1Y3QiLCJpbnN0YW5jZU9mIiwicHJlZGljYXRlIiwicmVwcmVzZW50IiwicmVwcmVzZW50TmFtZSIsImRlZmF1bHRTdHlsZSIsInN0eWxlQWxpYXNlcyJdLG5MZT1bInNjYWxhciIsInNlcXVlbmNlIiwibWFwcGluZyJdO2Z1bmN0aW9uIHJMZShpKXt2YXIgYT17fTtyZXR1cm4gaSE9PW51bGwmJk9iamVjdC5rZXlzKGkpLmZvckVhY2goZnVuY3Rpb24oZil7aVtmXS5mb3JFYWNoKGZ1bmN0aW9uKHApe2FbU3RyaW5nKHApXT1mfSl9KSxhfWZ1bmN0aW9uIGlMZShpLGEpe2lmKGE9YXx8e30sT2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbihmKXtpZihlTGUuaW5kZXhPZihmKT09PS0xKXRocm93IG5ldyBBNSgnVW5rbm93biBvcHRpb24gIicrZisnIiBpcyBtZXQgaW4gZGVmaW5pdGlvbiBvZiAiJytpKyciIFlBTUwgdHlwZS4nKX0pLHRoaXMub3B0aW9ucz1hLHRoaXMudGFnPWksdGhpcy5raW5kPWEua2luZHx8bnVsbCx0aGlzLnJlc29sdmU9YS5yZXNvbHZlfHxmdW5jdGlvbigpe3JldHVybiEwfSx0aGlzLmNvbnN0cnVjdD1hLmNvbnN0cnVjdHx8ZnVuY3Rpb24oZil7cmV0dXJuIGZ9LHRoaXMuaW5zdGFuY2VPZj1hLmluc3RhbmNlT2Z8fG51bGwsdGhpcy5wcmVkaWNhdGU9YS5wcmVkaWNhdGV8fG51bGwsdGhpcy5yZXByZXNlbnQ9YS5yZXByZXNlbnR8fG51bGwsdGhpcy5yZXByZXNlbnROYW1lPWEucmVwcmVzZW50TmFtZXx8bnVsbCx0aGlzLmRlZmF1bHRTdHlsZT1hLmRlZmF1bHRTdHlsZXx8bnVsbCx0aGlzLm11bHRpPWEubXVsdGl8fCExLHRoaXMuc3R5bGVBbGlhc2VzPXJMZShhLnN0eWxlQWxpYXNlc3x8bnVsbCksbkxlLmluZGV4T2YodGhpcy5raW5kKT09PS0xKXRocm93IG5ldyBBNSgnVW5rbm93biBraW5kICInK3RoaXMua2luZCsnIiBpcyBzcGVjaWZpZWQgZm9yICInK2krJyIgWUFNTCB0eXBlLicpfXZhciBUMD1pTGU7ZnVuY3Rpb24gVk90KGksYSl7dmFyIGY9W107cmV0dXJuIGlbYV0uZm9yRWFjaChmdW5jdGlvbihwKXt2YXIgdz1mLmxlbmd0aDtmLmZvckVhY2goZnVuY3Rpb24obSxiKXttLnRhZz09PXAudGFnJiZtLmtpbmQ9PT1wLmtpbmQmJm0ubXVsdGk9PT1wLm11bHRpJiYodz1iKX0pLGZbd109cH0pLGZ9ZnVuY3Rpb24gc0xlKCl7dmFyIGk9e3NjYWxhcjp7fSxzZXF1ZW5jZTp7fSxtYXBwaW5nOnt9LGZhbGxiYWNrOnt9LG11bHRpOntzY2FsYXI6W10sc2VxdWVuY2U6W10sbWFwcGluZzpbXSxmYWxsYmFjazpbXX19LGEsZjtmdW5jdGlvbiBwKHcpe3cubXVsdGk/KGkubXVsdGlbdy5raW5kXS5wdXNoKHcpLGkubXVsdGkuZmFsbGJhY2sucHVzaCh3KSk6aVt3LmtpbmRdW3cudGFnXT1pLmZhbGxiYWNrW3cudGFnXT13fWZvcihhPTAsZj1hcmd1bWVudHMubGVuZ3RoO2E8ZjthKz0xKWFyZ3VtZW50c1thXS5mb3JFYWNoKHApO3JldHVybiBpfWZ1bmN0aW9uIExkdChpKXtyZXR1cm4gdGhpcy5leHRlbmQoaSl9TGR0LnByb3RvdHlwZS5leHRlbmQ9ZnVuY3Rpb24oYSl7dmFyIGY9W10scD1bXTtpZihhIGluc3RhbmNlb2YgVDApcC5wdXNoKGEpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShhKSlwPXAuY29uY2F0KGEpO2Vsc2UgaWYoYSYmKEFycmF5LmlzQXJyYXkoYS5pbXBsaWNpdCl8fEFycmF5LmlzQXJyYXkoYS5leHBsaWNpdCkpKWEuaW1wbGljaXQmJihmPWYuY29uY2F0KGEuaW1wbGljaXQpKSxhLmV4cGxpY2l0JiYocD1wLmNvbmNhdChhLmV4cGxpY2l0KSk7ZWxzZSB0aHJvdyBuZXcgQTUoIlNjaGVtYS5leHRlbmQgYXJndW1lbnQgc2hvdWxkIGJlIGEgVHlwZSwgWyBUeXBlIF0sIG9yIGEgc2NoZW1hIGRlZmluaXRpb24gKHsgaW1wbGljaXQ6IFsuLi5dLCBleHBsaWNpdDogWy4uLl0gfSkiKTtmLmZvckVhY2goZnVuY3Rpb24obSl7aWYoIShtIGluc3RhbmNlb2YgVDApKXRocm93IG5ldyBBNSgiU3BlY2lmaWVkIGxpc3Qgb2YgWUFNTCB0eXBlcyAob3IgYSBzaW5nbGUgVHlwZSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVR5cGUgb2JqZWN0LiIpO2lmKG0ubG9hZEtpbmQmJm0ubG9hZEtpbmQhPT0ic2NhbGFyIil0aHJvdyBuZXcgQTUoIlRoZXJlIGlzIGEgbm9uLXNjYWxhciB0eXBlIGluIHRoZSBpbXBsaWNpdCBsaXN0IG9mIGEgc2NoZW1hLiBJbXBsaWNpdCByZXNvbHZpbmcgb2Ygc3VjaCB0eXBlcyBpcyBub3Qgc3VwcG9ydGVkLiIpO2lmKG0ubXVsdGkpdGhyb3cgbmV3IEE1KCJUaGVyZSBpcyBhIG11bHRpIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIE11bHRpIHRhZ3MgY2FuIG9ubHkgYmUgbGlzdGVkIGFzIGV4cGxpY2l0LiIpfSkscC5mb3JFYWNoKGZ1bmN0aW9uKG0pe2lmKCEobSBpbnN0YW5jZW9mIFQwKSl0aHJvdyBuZXcgQTUoIlNwZWNpZmllZCBsaXN0IG9mIFlBTUwgdHlwZXMgKG9yIGEgc2luZ2xlIFR5cGUgb2JqZWN0KSBjb250YWlucyBhIG5vbi1UeXBlIG9iamVjdC4iKX0pO3ZhciB3PU9iamVjdC5jcmVhdGUoTGR0LnByb3RvdHlwZSk7cmV0dXJuIHcuaW1wbGljaXQ9KHRoaXMuaW1wbGljaXR8fFtdKS5jb25jYXQoZiksdy5leHBsaWNpdD0odGhpcy5leHBsaWNpdHx8W10pLmNvbmNhdChwKSx3LmNvbXBpbGVkSW1wbGljaXQ9Vk90KHcsImltcGxpY2l0Iiksdy5jb21waWxlZEV4cGxpY2l0PVZPdCh3LCJleHBsaWNpdCIpLHcuY29tcGlsZWRUeXBlTWFwPXNMZSh3LmNvbXBpbGVkSW1wbGljaXQsdy5jb21waWxlZEV4cGxpY2l0KSx3fTt2YXIgYUxlPUxkdCxvTGU9bmV3IFQwKCJ0YWc6eWFtbC5vcmcsMjAwMjpzdHIiLHtraW5kOiJzY2FsYXIiLGNvbnN0cnVjdDpmdW5jdGlvbihpKXtyZXR1cm4gaSE9PW51bGw/aToiIn19KSxjTGU9bmV3IFQwKCJ0YWc6eWFtbC5vcmcsMjAwMjpzZXEiLHtraW5kOiJzZXF1ZW5jZSIsY29uc3RydWN0OmZ1bmN0aW9uKGkpe3JldHVybiBpIT09bnVsbD9pOltdfX0pLHVMZT1uZXcgVDAoInRhZzp5YW1sLm9yZywyMDAyOm1hcCIse2tpbmQ6Im1hcHBpbmciLGNvbnN0cnVjdDpmdW5jdGlvbihpKXtyZXR1cm4gaSE9PW51bGw/aTp7fX19KSxsTGU9bmV3IGFMZSh7ZXhwbGljaXQ6W29MZSxjTGUsdUxlXX0pO2Z1bmN0aW9uIGhMZShpKXtpZihpPT09bnVsbClyZXR1cm4hMDt2YXIgYT1pLmxlbmd0aDtyZXR1cm4gYT09PTEmJmk9PT0ifiJ8fGE9PT00JiYoaT09PSJudWxsInx8aT09PSJOdWxsInx8aT09PSJOVUxMIil9ZnVuY3Rpb24gZkxlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gZExlKGkpe3JldHVybiBpPT09bnVsbH12YXIgZ0xlPW5ldyBUMCgidGFnOnlhbWwub3JnLDIwMDI6bnVsbCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpoTGUsY29uc3RydWN0OmZMZSxwcmVkaWNhdGU6ZExlLHJlcHJlc2VudDp7Y2Fub25pY2FsOmZ1bmN0aW9uKCl7cmV0dXJuIn4ifSxsb3dlcmNhc2U6ZnVuY3Rpb24oKXtyZXR1cm4ibnVsbCJ9LHVwcGVyY2FzZTpmdW5jdGlvbigpe3JldHVybiJOVUxMIn0sY2FtZWxjYXNlOmZ1bmN0aW9uKCl7cmV0dXJuIk51bGwifSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiIifX0sZGVmYXVsdFN0eWxlOiJsb3dlcmNhc2UifSk7ZnVuY3Rpb24gcExlKGkpe2lmKGk9PT1udWxsKXJldHVybiExO3ZhciBhPWkubGVuZ3RoO3JldHVybiBhPT09NCYmKGk9PT0idHJ1ZSJ8fGk9PT0iVHJ1ZSJ8fGk9PT0iVFJVRSIpfHxhPT09NSYmKGk9PT0iZmFsc2UifHxpPT09IkZhbHNlInx8aT09PSJGQUxTRSIpfWZ1bmN0aW9uIGJMZShpKXtyZXR1cm4gaT09PSJ0cnVlInx8aT09PSJUcnVlInx8aT09PSJUUlVFIn1mdW5jdGlvbiB3TGUoaSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKT09PSJbb2JqZWN0IEJvb2xlYW5dIn12YXIgdkxlPW5ldyBUMCgidGFnOnlhbWwub3JnLDIwMDI6Ym9vbCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpwTGUsY29uc3RydWN0OmJMZSxwcmVkaWNhdGU6d0xlLHJlcHJlc2VudDp7bG93ZXJjYXNlOmZ1bmN0aW9uKGkpe3JldHVybiBpPyJ0cnVlIjoiZmFsc2UifSx1cHBlcmNhc2U6ZnVuY3Rpb24oaSl7cmV0dXJuIGk/IlRSVUUiOiJGQUxTRSJ9LGNhbWVsY2FzZTpmdW5jdGlvbihpKXtyZXR1cm4gaT8iVHJ1ZSI6IkZhbHNlIn19LGRlZmF1bHRTdHlsZToibG93ZXJjYXNlIn0pO2Z1bmN0aW9uIG1MZShpKXtyZXR1cm4gNDg8PWkmJmk8PTU3fHw2NTw9aSYmaTw9NzB8fDk3PD1pJiZpPD0xMDJ9ZnVuY3Rpb24geUxlKGkpe3JldHVybiA0ODw9aSYmaTw9NTV9ZnVuY3Rpb24geExlKGkpe3JldHVybiA0ODw9aSYmaTw9NTd9ZnVuY3Rpb24ga0xlKGkpe2lmKGk9PT1udWxsKXJldHVybiExO3ZhciBhPWkubGVuZ3RoLGY9MCxwPSExLHc7aWYoIWEpcmV0dXJuITE7aWYodz1pW2ZdLCh3PT09Ii0ifHx3PT09IisiKSYmKHc9aVsrK2ZdKSx3PT09IjAiKXtpZihmKzE9PT1hKXJldHVybiEwO2lmKHc9aVsrK2ZdLHc9PT0iYiIpe2ZvcihmKys7ZjxhO2YrKylpZih3PWlbZl0sdyE9PSJfIil7aWYodyE9PSIwIiYmdyE9PSIxIilyZXR1cm4hMTtwPSEwfXJldHVybiBwJiZ3IT09Il8ifWlmKHc9PT0ieCIpe2ZvcihmKys7ZjxhO2YrKylpZih3PWlbZl0sdyE9PSJfIil7aWYoIW1MZShpLmNoYXJDb2RlQXQoZikpKXJldHVybiExO3A9ITB9cmV0dXJuIHAmJnchPT0iXyJ9aWYodz09PSJvIil7Zm9yKGYrKztmPGE7ZisrKWlmKHc9aVtmXSx3IT09Il8iKXtpZigheUxlKGkuY2hhckNvZGVBdChmKSkpcmV0dXJuITE7cD0hMH1yZXR1cm4gcCYmdyE9PSJfIn19aWYodz09PSJfIilyZXR1cm4hMTtmb3IoO2Y8YTtmKyspaWYodz1pW2ZdLHchPT0iXyIpe2lmKCF4TGUoaS5jaGFyQ29kZUF0KGYpKSlyZXR1cm4hMTtwPSEwfXJldHVybiEoIXB8fHc9PT0iXyIpfWZ1bmN0aW9uIEVMZShpKXt2YXIgYT1pLGY9MSxwO2lmKGEuaW5kZXhPZigiXyIpIT09LTEmJihhPWEucmVwbGFjZSgvXy9nLCIiKSkscD1hWzBdLChwPT09Ii0ifHxwPT09IisiKSYmKHA9PT0iLSImJihmPS0xKSxhPWEuc2xpY2UoMSkscD1hWzBdKSxhPT09IjAiKXJldHVybiAwO2lmKHA9PT0iMCIpe2lmKGFbMV09PT0iYiIpcmV0dXJuIGYqcGFyc2VJbnQoYS5zbGljZSgyKSwyKTtpZihhWzFdPT09IngiKXJldHVybiBmKnBhcnNlSW50KGEuc2xpY2UoMiksMTYpO2lmKGFbMV09PT0ibyIpcmV0dXJuIGYqcGFyc2VJbnQoYS5zbGljZSgyKSw4KX1yZXR1cm4gZipwYXJzZUludChhLDEwKX1mdW5jdGlvbiBUTGUoaSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKT09PSJbb2JqZWN0IE51bWJlcl0iJiZpJTE9PT0wJiYhYmcuaXNOZWdhdGl2ZVplcm8oaSl9dmFyIENMZT1uZXcgVDAoInRhZzp5YW1sLm9yZywyMDAyOmludCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTprTGUsY29uc3RydWN0OkVMZSxwcmVkaWNhdGU6VExlLHJlcHJlc2VudDp7YmluYXJ5OmZ1bmN0aW9uKGkpe3JldHVybiBpPj0wPyIwYiIraS50b1N0cmluZygyKToiLTBiIitpLnRvU3RyaW5nKDIpLnNsaWNlKDEpfSxvY3RhbDpmdW5jdGlvbihpKXtyZXR1cm4gaT49MD8iMG8iK2kudG9TdHJpbmcoOCk6Ii0wbyIraS50b1N0cmluZyg4KS5zbGljZSgxKX0sZGVjaW1hbDpmdW5jdGlvbihpKXtyZXR1cm4gaS50b1N0cmluZygxMCl9LGhleGFkZWNpbWFsOmZ1bmN0aW9uKGkpe3JldHVybiBpPj0wPyIweCIraS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKToiLTB4IitpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnNsaWNlKDEpfX0sZGVmYXVsdFN0eWxlOiJkZWNpbWFsIixzdHlsZUFsaWFzZXM6e2JpbmFyeTpbMiwiYmluIl0sb2N0YWw6WzgsIm9jdCJdLGRlY2ltYWw6WzEwLCJkZWMiXSxoZXhhZGVjaW1hbDpbMTYsImhleCJdfX0pLF9MZT1uZXcgUmVnRXhwKCJeKD86Wy0rXT8oPzpbMC05XVswLTlfXSopKD86XFwuWzAtOV9dKik/KD86W2VFXVstK10/WzAtOV0rKT98XFwuWzAtOV9dKyg/OltlRV1bLStdP1swLTldKyk/fFstK10/XFwuKD86aW5mfEluZnxJTkYpfFxcLig/Om5hbnxOYU58TkFOKSkkIik7ZnVuY3Rpb24gU0xlKGkpe3JldHVybiEoaT09PW51bGx8fCFfTGUudGVzdChpKXx8aVtpLmxlbmd0aC0xXT09PSJfIil9ZnVuY3Rpb24gQUxlKGkpe3ZhciBhLGY7cmV0dXJuIGE9aS5yZXBsYWNlKC9fL2csIiIpLnRvTG93ZXJDYXNlKCksZj1hWzBdPT09Ii0iPy0xOjEsIistIi5pbmRleE9mKGFbMF0pPj0wJiYoYT1hLnNsaWNlKDEpKSxhPT09Ii5pbmYiP2Y9PT0xP051bWJlci5QT1NJVElWRV9JTkZJTklUWTpOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk6YT09PSIubmFuIj9OYU46ZipwYXJzZUZsb2F0KGEsMTApfXZhciBMTGU9L15bLStdP1swLTldK2UvO2Z1bmN0aW9uIE1MZShpLGEpe3ZhciBmO2lmKGlzTmFOKGkpKXN3aXRjaChhKXtjYXNlImxvd2VyY2FzZSI6cmV0dXJuIi5uYW4iO2Nhc2UidXBwZXJjYXNlIjpyZXR1cm4iLk5BTiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiIuTmFOIn1lbHNlIGlmKE51bWJlci5QT1NJVElWRV9JTkZJTklUWT09PWkpc3dpdGNoKGEpe2Nhc2UibG93ZXJjYXNlIjpyZXR1cm4iLmluZiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiIuSU5GIjtjYXNlImNhbWVsY2FzZSI6cmV0dXJuIi5JbmYifWVsc2UgaWYoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZPT09aSlzd2l0Y2goYSl7Y2FzZSJsb3dlcmNhc2UiOnJldHVybiItLmluZiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiItLklORiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiItLkluZiJ9ZWxzZSBpZihiZy5pc05lZ2F0aXZlWmVybyhpKSlyZXR1cm4iLTAuMCI7cmV0dXJuIGY9aS50b1N0cmluZygxMCksTExlLnRlc3QoZik/Zi5yZXBsYWNlKCJlIiwiLmUiKTpmfWZ1bmN0aW9uIERMZShpKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGkpPT09IltvYmplY3QgTnVtYmVyXSImJihpJTEhPT0wfHxiZy5pc05lZ2F0aXZlWmVybyhpKSl9dmFyIElMZT1uZXcgVDAoInRhZzp5YW1sLm9yZywyMDAyOmZsb2F0Iix7a2luZDoic2NhbGFyIixyZXNvbHZlOlNMZSxjb25zdHJ1Y3Q6QUxlLHByZWRpY2F0ZTpETGUscmVwcmVzZW50Ok1MZSxkZWZhdWx0U3R5bGU6Imxvd2VyY2FzZSJ9KSxHT3Q9bExlLmV4dGVuZCh7aW1wbGljaXQ6W2dMZSx2TGUsQ0xlLElMZV19KSxPTGU9R090LFVPdD1uZXcgUmVnRXhwKCJeKFswLTldWzAtOV1bMC05XVswLTldKS0oWzAtOV1bMC05XSktKFswLTldWzAtOV0pJCIpLFdPdD1uZXcgUmVnRXhwKCJeKFswLTldWzAtOV1bMC05XVswLTldKS0oWzAtOV1bMC05XT8pLShbMC05XVswLTldPykoPzpbVHRdfFsgXFx0XSspKFswLTldWzAtOV0/KTooWzAtOV1bMC05XSk6KFswLTldWzAtOV0pKD86XFwuKFswLTldKikpPyg/OlsgXFx0XSooWnwoWy0rXSkoWzAtOV1bMC05XT8pKD86OihbMC05XVswLTldKSk/KSk/JCIpO2Z1bmN0aW9uIFBMZShpKXtyZXR1cm4gaT09PW51bGw/ITE6VU90LmV4ZWMoaSkhPT1udWxsfHxXT3QuZXhlYyhpKSE9PW51bGx9ZnVuY3Rpb24gRkxlKGkpe3ZhciBhLGYscCx3LG0sYixFLF89MCxBPW51bGwsSSxCLE47aWYoYT1VT3QuZXhlYyhpKSxhPT09bnVsbCYmKGE9V090LmV4ZWMoaSkpLGE9PT1udWxsKXRocm93IG5ldyBFcnJvcigiRGF0ZSByZXNvbHZlIGVycm9yIik7aWYoZj0rYVsxXSxwPSthWzJdLTEsdz0rYVszXSwhYVs0XSlyZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoZixwLHcpKTtpZihtPSthWzRdLGI9K2FbNV0sRT0rYVs2XSxhWzddKXtmb3IoXz1hWzddLnNsaWNlKDAsMyk7Xy5sZW5ndGg8MzspXys9IjAiO189K199cmV0dXJuIGFbOV0mJihJPSthWzEwXSxCPSsoYVsxMV18fDApLEE9KEkqNjArQikqNmU0LGFbOV09PT0iLSImJihBPS1BKSksTj1uZXcgRGF0ZShEYXRlLlVUQyhmLHAsdyxtLGIsRSxfKSksQSYmTi5zZXRUaW1lKE4uZ2V0VGltZSgpLUEpLE59ZnVuY3Rpb24gTkxlKGkpe3JldHVybiBpLnRvSVNPU3RyaW5nKCl9dmFyIEJMZT1uZXcgVDAoInRhZzp5YW1sLm9yZywyMDAyOnRpbWVzdGFtcCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpQTGUsY29uc3RydWN0OkZMZSxpbnN0YW5jZU9mOkRhdGUscmVwcmVzZW50Ok5MZX0pO2Z1bmN0aW9uIFJMZShpKXtyZXR1cm4gaT09PSI8PCJ8fGk9PT1udWxsfXZhciBqTGU9bmV3IFQwKCJ0YWc6eWFtbC5vcmcsMjAwMjptZXJnZSIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpSTGV9KSxNZHQ9YEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89ClxyYDtmdW5jdGlvbiAkTGUoaSl7aWYoaT09PW51bGwpcmV0dXJuITE7dmFyIGEsZixwPTAsdz1pLmxlbmd0aCxtPU1kdDtmb3IoZj0wO2Y8dztmKyspaWYoYT1tLmluZGV4T2YoaS5jaGFyQXQoZikpLCEoYT42NCkpe2lmKGE8MClyZXR1cm4hMTtwKz02fXJldHVybiBwJTg9PT0wfWZ1bmN0aW9uIHpMZShpKXt2YXIgYSxmLHA9aS5yZXBsYWNlKC9bXHJcbj1dL2csIiIpLHc9cC5sZW5ndGgsbT1NZHQsYj0wLEU9W107Zm9yKGE9MDthPHc7YSsrKWElND09PTAmJmEmJihFLnB1c2goYj4+MTYmMjU1KSxFLnB1c2goYj4+OCYyNTUpLEUucHVzaChiJjI1NSkpLGI9Yjw8NnxtLmluZGV4T2YocC5jaGFyQXQoYSkpO3JldHVybiBmPXclNCo2LGY9PT0wPyhFLnB1c2goYj4+MTYmMjU1KSxFLnB1c2goYj4+OCYyNTUpLEUucHVzaChiJjI1NSkpOmY9PT0xOD8oRS5wdXNoKGI+PjEwJjI1NSksRS5wdXNoKGI+PjImMjU1KSk6Zj09PTEyJiZFLnB1c2goYj4+NCYyNTUpLG5ldyBVaW50OEFycmF5KEUpfWZ1bmN0aW9uIHFMZShpKXt2YXIgYT0iIixmPTAscCx3LG09aS5sZW5ndGgsYj1NZHQ7Zm9yKHA9MDtwPG07cCsrKXAlMz09PTAmJnAmJihhKz1iW2Y+PjE4JjYzXSxhKz1iW2Y+PjEyJjYzXSxhKz1iW2Y+PjYmNjNdLGErPWJbZiY2M10pLGY9KGY8PDgpK2lbcF07cmV0dXJuIHc9bSUzLHc9PT0wPyhhKz1iW2Y+PjE4JjYzXSxhKz1iW2Y+PjEyJjYzXSxhKz1iW2Y+PjYmNjNdLGErPWJbZiY2M10pOnc9PT0yPyhhKz1iW2Y+PjEwJjYzXSxhKz1iW2Y+PjQmNjNdLGErPWJbZjw8MiY2M10sYSs9Yls2NF0pOnc9PT0xJiYoYSs9YltmPj4yJjYzXSxhKz1iW2Y8PDQmNjNdLGErPWJbNjRdLGErPWJbNjRdKSxhfWZ1bmN0aW9uIEhMZShpKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGkpPT09IltvYmplY3QgVWludDhBcnJheV0ifXZhciBWTGU9bmV3IFQwKCJ0YWc6eWFtbC5vcmcsMjAwMjpiaW5hcnkiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6JExlLGNvbnN0cnVjdDp6TGUscHJlZGljYXRlOkhMZSxyZXByZXNlbnQ6cUxlfSksR0xlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksVUxlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gV0xlKGkpe2lmKGk9PT1udWxsKXJldHVybiEwO3ZhciBhPVtdLGYscCx3LG0sYixFPWk7Zm9yKGY9MCxwPUUubGVuZ3RoO2Y8cDtmKz0xKXtpZih3PUVbZl0sYj0hMSxVTGUuY2FsbCh3KSE9PSJbb2JqZWN0IE9iamVjdF0iKXJldHVybiExO2ZvcihtIGluIHcpaWYoR0xlLmNhbGwodyxtKSlpZighYiliPSEwO2Vsc2UgcmV0dXJuITE7aWYoIWIpcmV0dXJuITE7aWYoYS5pbmRleE9mKG0pPT09LTEpYS5wdXNoKG0pO2Vsc2UgcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gWUxlKGkpe3JldHVybiBpIT09bnVsbD9pOltdfXZhciBLTGU9bmV3IFQwKCJ0YWc6eWFtbC5vcmcsMjAwMjpvbWFwIix7a2luZDoic2VxdWVuY2UiLHJlc29sdmU6V0xlLGNvbnN0cnVjdDpZTGV9KSxYTGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBRTGUoaSl7aWYoaT09PW51bGwpcmV0dXJuITA7dmFyIGEsZixwLHcsbSxiPWk7Zm9yKG09bmV3IEFycmF5KGIubGVuZ3RoKSxhPTAsZj1iLmxlbmd0aDthPGY7YSs9MSl7aWYocD1iW2FdLFhMZS5jYWxsKHApIT09IltvYmplY3QgT2JqZWN0XSJ8fCh3PU9iamVjdC5rZXlzKHApLHcubGVuZ3RoIT09MSkpcmV0dXJuITE7bVthXT1bd1swXSxwW3dbMF1dXX1yZXR1cm4hMH1mdW5jdGlvbiBaTGUoaSl7aWYoaT09PW51bGwpcmV0dXJuW107dmFyIGEsZixwLHcsbSxiPWk7Zm9yKG09bmV3IEFycmF5KGIubGVuZ3RoKSxhPTAsZj1iLmxlbmd0aDthPGY7YSs9MSlwPWJbYV0sdz1PYmplY3Qua2V5cyhwKSxtW2FdPVt3WzBdLHBbd1swXV1dO3JldHVybiBtfXZhciBKTGU9bmV3IFQwKCJ0YWc6eWFtbC5vcmcsMjAwMjpwYWlycyIse2tpbmQ6InNlcXVlbmNlIixyZXNvbHZlOlFMZSxjb25zdHJ1Y3Q6WkxlfSksdE1lPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gZU1lKGkpe2lmKGk9PT1udWxsKXJldHVybiEwO3ZhciBhLGY9aTtmb3IoYSBpbiBmKWlmKHRNZS5jYWxsKGYsYSkmJmZbYV0hPT1udWxsKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIG5NZShpKXtyZXR1cm4gaSE9PW51bGw/aTp7fX12YXIgck1lPW5ldyBUMCgidGFnOnlhbWwub3JnLDIwMDI6c2V0Iix7a2luZDoibWFwcGluZyIscmVzb2x2ZTplTWUsY29uc3RydWN0Om5NZX0pLGlNZT1PTGUuZXh0ZW5kKHtpbXBsaWNpdDpbQkxlLGpMZV0sZXhwbGljaXQ6W1ZMZSxLTGUsSkxlLHJNZV19KSxsaz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEdXPTEsWU90PTIsS090PTMsVVc9NCxEZHQ9MSxzTWU9MixYT3Q9MyxhTWU9L1tceDAwLVx4MDhceDBCXHgwQ1x4MEUtXHgxRlx4N0YtXHg4NFx4ODYtXHg5Rlx1RkZGRVx1RkZGRl18W1x1RDgwMC1cdURCRkZdKD8hW1x1REMwMC1cdURGRkZdKXwoPzpbXlx1RDgwMC1cdURCRkZdfF4pW1x1REMwMC1cdURGRkZdLyxvTWU9L1tceDg1XHUyMDI4XHUyMDI5XS8sY01lPS9bLFxbXF1ce1x9XS8sUU90PS9eKD86IXwhIXwhW2EtelwtXSshKSQvaSxaT3Q9L14oPzohfFteLFxbXF1ce1x9XSkoPzolWzAtOWEtZl17Mn18WzAtOWEtelwtIztcL1w/OkAmPVwrXCQsX1wuIX5cKidcKFwpXFtcXV0pKiQvaTtmdW5jdGlvbiBKT3QoaSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKX1mdW5jdGlvbiBnMyhpKXtyZXR1cm4gaT09PTEwfHxpPT09MTN9ZnVuY3Rpb24gZ1QoaSl7cmV0dXJuIGk9PT05fHxpPT09MzJ9ZnVuY3Rpb24gZHAoaSl7cmV0dXJuIGk9PT05fHxpPT09MzJ8fGk9PT0xMHx8aT09PTEzfWZ1bmN0aW9uIFFBKGkpe3JldHVybiBpPT09NDR8fGk9PT05MXx8aT09PTkzfHxpPT09MTIzfHxpPT09MTI1fWZ1bmN0aW9uIHVNZShpKXt2YXIgYTtyZXR1cm4gNDg8PWkmJmk8PTU3P2ktNDg6KGE9aXwzMiw5Nzw9YSYmYTw9MTAyP2EtOTcrMTA6LTEpfWZ1bmN0aW9uIGxNZShpKXtyZXR1cm4gaT09PTEyMD8yOmk9PT0xMTc/NDppPT09ODU/ODowfWZ1bmN0aW9uIGhNZShpKXtyZXR1cm4gNDg8PWkmJmk8PTU3P2ktNDg6LTF9ZnVuY3Rpb24gdFB0KGkpe3JldHVybiBpPT09NDg/IlwwIjppPT09OTc/Ilx4MDciOmk9PT05OD8iXGIiOmk9PT0xMTZ8fGk9PT05PyIJIjppPT09MTEwP2AKYDppPT09MTE4PyJcdiI6aT09PTEwMj8iXGYiOmk9PT0xMTQ/IlxyIjppPT09MTAxPyJceDFCIjppPT09MzI/IiAiOmk9PT0zND8nIic6aT09PTQ3PyIvIjppPT09OTI/IlxcIjppPT09Nzg/IsKFIjppPT09OTU/IsKgIjppPT09NzY/Ilx1MjAyOCI6aT09PTgwPyJcdTIwMjkiOiIifWZ1bmN0aW9uIGZNZShpKXtyZXR1cm4gaTw9NjU1MzU/U3RyaW5nLmZyb21DaGFyQ29kZShpKTpTdHJpbmcuZnJvbUNoYXJDb2RlKChpLTY1NTM2Pj4xMCkrNTUyOTYsKGktNjU1MzYmMTAyMykrNTYzMjApfWZvcih2YXIgZVB0PW5ldyBBcnJheSgyNTYpLG5QdD1uZXcgQXJyYXkoMjU2KSxaQT0wO1pBPDI1NjtaQSsrKWVQdFtaQV09dFB0KFpBKT8xOjAsblB0W1pBXT10UHQoWkEpO2Z1bmN0aW9uIGRNZShpLGEpe3RoaXMuaW5wdXQ9aSx0aGlzLmZpbGVuYW1lPWEuZmlsZW5hbWV8fG51bGwsdGhpcy5zY2hlbWE9YS5zY2hlbWF8fGlNZSx0aGlzLm9uV2FybmluZz1hLm9uV2FybmluZ3x8bnVsbCx0aGlzLmxlZ2FjeT1hLmxlZ2FjeXx8ITEsdGhpcy5qc29uPWEuanNvbnx8ITEsdGhpcy5saXN0ZW5lcj1hLmxpc3RlbmVyfHxudWxsLHRoaXMuaW1wbGljaXRUeXBlcz10aGlzLnNjaGVtYS5jb21waWxlZEltcGxpY2l0LHRoaXMudHlwZU1hcD10aGlzLnNjaGVtYS5jb21waWxlZFR5cGVNYXAsdGhpcy5sZW5ndGg9aS5sZW5ndGgsdGhpcy5wb3NpdGlvbj0wLHRoaXMubGluZT0wLHRoaXMubGluZVN0YXJ0PTAsdGhpcy5saW5lSW5kZW50PTAsdGhpcy5maXJzdFRhYkluTGluZT0tMSx0aGlzLmRvY3VtZW50cz1bXX1mdW5jdGlvbiByUHQoaSxhKXt2YXIgZj17bmFtZTppLmZpbGVuYW1lLGJ1ZmZlcjppLmlucHV0LnNsaWNlKDAsLTEpLHBvc2l0aW9uOmkucG9zaXRpb24sbGluZTppLmxpbmUsY29sdW1uOmkucG9zaXRpb24taS5saW5lU3RhcnR9O3JldHVybiBmLnNuaXBwZXQ9dExlKGYpLG5ldyBBNShhLGYpfWZ1bmN0aW9uIFNzKGksYSl7dGhyb3cgclB0KGksYSl9ZnVuY3Rpb24gV1coaSxhKXtpLm9uV2FybmluZyYmaS5vbldhcm5pbmcuY2FsbChudWxsLHJQdChpLGEpKX12YXIgaVB0PXtZQU1MOmZ1bmN0aW9uKGEsZixwKXt2YXIgdyxtLGI7YS52ZXJzaW9uIT09bnVsbCYmU3MoYSwiZHVwbGljYXRpb24gb2YgJVlBTUwgZGlyZWN0aXZlIikscC5sZW5ndGghPT0xJiZTcyhhLCJZQU1MIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgb25lIGFyZ3VtZW50Iiksdz0vXihbMC05XSspXC4oWzAtOV0rKSQvLmV4ZWMocFswXSksdz09PW51bGwmJlNzKGEsImlsbC1mb3JtZWQgYXJndW1lbnQgb2YgdGhlIFlBTUwgZGlyZWN0aXZlIiksbT1wYXJzZUludCh3WzFdLDEwKSxiPXBhcnNlSW50KHdbMl0sMTApLG0hPT0xJiZTcyhhLCJ1bmFjY2VwdGFibGUgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCIpLGEudmVyc2lvbj1wWzBdLGEuY2hlY2tMaW5lQnJlYWtzPWI8MixiIT09MSYmYiE9PTImJldXKGEsInVuc3VwcG9ydGVkIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQiKX0sVEFHOmZ1bmN0aW9uKGEsZixwKXt2YXIgdyxtO3AubGVuZ3RoIT09MiYmU3MoYSwiVEFHIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgdHdvIGFyZ3VtZW50cyIpLHc9cFswXSxtPXBbMV0sUU90LnRlc3Qodyl8fFNzKGEsImlsbC1mb3JtZWQgdGFnIGhhbmRsZSAoZmlyc3QgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlIiksbGsuY2FsbChhLnRhZ01hcCx3KSYmU3MoYSwndGhlcmUgaXMgYSBwcmV2aW91c2x5IGRlY2xhcmVkIHN1ZmZpeCBmb3IgIicrdysnIiB0YWcgaGFuZGxlJyksWk90LnRlc3QobSl8fFNzKGEsImlsbC1mb3JtZWQgdGFnIHByZWZpeCAoc2Vjb25kIGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZSIpO3RyeXttPWRlY29kZVVSSUNvbXBvbmVudChtKX1jYXRjaHtTcyhhLCJ0YWcgcHJlZml4IGlzIG1hbGZvcm1lZDogIittKX1hLnRhZ01hcFt3XT1tfX07ZnVuY3Rpb24gaGsoaSxhLGYscCl7dmFyIHcsbSxiLEU7aWYoYTxmKXtpZihFPWkuaW5wdXQuc2xpY2UoYSxmKSxwKWZvcih3PTAsbT1FLmxlbmd0aDt3PG07dys9MSliPUUuY2hhckNvZGVBdCh3KSxiPT09OXx8MzI8PWImJmI8PTExMTQxMTF8fFNzKGksImV4cGVjdGVkIHZhbGlkIEpTT04gY2hhcmFjdGVyIik7ZWxzZSBhTWUudGVzdChFKSYmU3MoaSwidGhlIHN0cmVhbSBjb250YWlucyBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMiKTtpLnJlc3VsdCs9RX19ZnVuY3Rpb24gc1B0KGksYSxmLHApe3ZhciB3LG0sYixFO2ZvcihiZy5pc09iamVjdChmKXx8U3MoaSwiY2Fubm90IG1lcmdlIG1hcHBpbmdzOyB0aGUgcHJvdmlkZWQgc291cmNlIG9iamVjdCBpcyB1bmFjY2VwdGFibGUiKSx3PU9iamVjdC5rZXlzKGYpLGI9MCxFPXcubGVuZ3RoO2I8RTtiKz0xKW09d1tiXSxsay5jYWxsKGEsbSl8fChhW21dPWZbbV0scFttXT0hMCl9ZnVuY3Rpb24gSkEoaSxhLGYscCx3LG0sYixFLF8pe3ZhciBBLEk7aWYoQXJyYXkuaXNBcnJheSh3KSlmb3Iodz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh3KSxBPTAsST13Lmxlbmd0aDtBPEk7QSs9MSlBcnJheS5pc0FycmF5KHdbQV0pJiZTcyhpLCJuZXN0ZWQgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBrZXlzIiksdHlwZW9mIHc9PSJvYmplY3QiJiZKT3Qod1tBXSk9PT0iW29iamVjdCBPYmplY3RdIiYmKHdbQV09IltvYmplY3QgT2JqZWN0XSIpO2lmKHR5cGVvZiB3PT0ib2JqZWN0IiYmSk90KHcpPT09IltvYmplY3QgT2JqZWN0XSImJih3PSJbb2JqZWN0IE9iamVjdF0iKSx3PVN0cmluZyh3KSxhPT09bnVsbCYmKGE9e30pLHA9PT0idGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UiKWlmKEFycmF5LmlzQXJyYXkobSkpZm9yKEE9MCxJPW0ubGVuZ3RoO0E8STtBKz0xKXNQdChpLGEsbVtBXSxmKTtlbHNlIHNQdChpLGEsbSxmKTtlbHNlIWkuanNvbiYmIWxrLmNhbGwoZix3KSYmbGsuY2FsbChhLHcpJiYoaS5saW5lPWJ8fGkubGluZSxpLmxpbmVTdGFydD1FfHxpLmxpbmVTdGFydCxpLnBvc2l0aW9uPV98fGkucG9zaXRpb24sU3MoaSwiZHVwbGljYXRlZCBtYXBwaW5nIGtleSIpKSx3PT09Il9fcHJvdG9fXyI/T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsdyx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bX0pOmFbd109bSxkZWxldGUgZlt3XTtyZXR1cm4gYX1mdW5jdGlvbiBJZHQoaSl7dmFyIGE7YT1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksYT09PTEwP2kucG9zaXRpb24rKzphPT09MTM/KGkucG9zaXRpb24rKyxpLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbik9PT0xMCYmaS5wb3NpdGlvbisrKTpTcyhpLCJhIGxpbmUgYnJlYWsgaXMgZXhwZWN0ZWQiKSxpLmxpbmUrPTEsaS5saW5lU3RhcnQ9aS5wb3NpdGlvbixpLmZpcnN0VGFiSW5MaW5lPS0xfWZ1bmN0aW9uIFBmKGksYSxmKXtmb3IodmFyIHA9MCx3PWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTt3IT09MDspe2Zvcig7Z1Qodyk7KXc9PT05JiZpLmZpcnN0VGFiSW5MaW5lPT09LTEmJihpLmZpcnN0VGFiSW5MaW5lPWkucG9zaXRpb24pLHc9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7aWYoYSYmdz09PTM1KWRvIHc9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7d2hpbGUodyE9PTEwJiZ3IT09MTMmJnchPT0wKTtpZihnMyh3KSlmb3IoSWR0KGkpLHc9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLHArKyxpLmxpbmVJbmRlbnQ9MDt3PT09MzI7KWkubGluZUluZGVudCsrLHc9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7ZWxzZSBicmVha31yZXR1cm4gZiE9PS0xJiZwIT09MCYmaS5saW5lSW5kZW50PGYmJldXKGksImRlZmljaWVudCBpbmRlbnRhdGlvbiIpLHB9ZnVuY3Rpb24gWVcoaSl7dmFyIGE9aS5wb3NpdGlvbixmO3JldHVybiBmPWkuaW5wdXQuY2hhckNvZGVBdChhKSwhISgoZj09PTQ1fHxmPT09NDYpJiZmPT09aS5pbnB1dC5jaGFyQ29kZUF0KGErMSkmJmY9PT1pLmlucHV0LmNoYXJDb2RlQXQoYSsyKSYmKGErPTMsZj1pLmlucHV0LmNoYXJDb2RlQXQoYSksZj09PTB8fGRwKGYpKSl9ZnVuY3Rpb24gT2R0KGksYSl7YT09PTE/aS5yZXN1bHQrPSIgIjphPjEmJihpLnJlc3VsdCs9YmcucmVwZWF0KGAKYCxhLTEpKX1mdW5jdGlvbiBnTWUoaSxhLGYpe3ZhciBwLHcsbSxiLEUsXyxBLEksQj1pLmtpbmQsTj1pLnJlc3VsdCxSO2lmKFI9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLGRwKFIpfHxRQShSKXx8Uj09PTM1fHxSPT09Mzh8fFI9PT00Mnx8Uj09PTMzfHxSPT09MTI0fHxSPT09NjJ8fFI9PT0zOXx8Uj09PTM0fHxSPT09Mzd8fFI9PT02NHx8Uj09PTk2fHwoUj09PTYzfHxSPT09NDUpJiYodz1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbisxKSxkcCh3KXx8ZiYmUUEodykpKXJldHVybiExO2ZvcihpLmtpbmQ9InNjYWxhciIsaS5yZXN1bHQ9IiIsbT1iPWkucG9zaXRpb24sRT0hMTtSIT09MDspe2lmKFI9PT01OCl7aWYodz1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbisxKSxkcCh3KXx8ZiYmUUEodykpYnJlYWt9ZWxzZSBpZihSPT09MzUpe2lmKHA9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24tMSksZHAocCkpYnJlYWt9ZWxzZXtpZihpLnBvc2l0aW9uPT09aS5saW5lU3RhcnQmJllXKGkpfHxmJiZRQShSKSlicmVhaztpZihnMyhSKSlpZihfPWkubGluZSxBPWkubGluZVN0YXJ0LEk9aS5saW5lSW5kZW50LFBmKGksITEsLTEpLGkubGluZUluZGVudD49YSl7RT0hMCxSPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTtjb250aW51ZX1lbHNle2kucG9zaXRpb249YixpLmxpbmU9XyxpLmxpbmVTdGFydD1BLGkubGluZUluZGVudD1JO2JyZWFrfX1FJiYoaGsoaSxtLGIsITEpLE9kdChpLGkubGluZS1fKSxtPWI9aS5wb3NpdGlvbixFPSExKSxnVChSKXx8KGI9aS5wb3NpdGlvbisxKSxSPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pfXJldHVybiBoayhpLG0sYiwhMSksaS5yZXN1bHQ/ITA6KGkua2luZD1CLGkucmVzdWx0PU4sITEpfWZ1bmN0aW9uIHBNZShpLGEpe3ZhciBmLHAsdztpZihmPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSxmIT09MzkpcmV0dXJuITE7Zm9yKGkua2luZD0ic2NhbGFyIixpLnJlc3VsdD0iIixpLnBvc2l0aW9uKysscD13PWkucG9zaXRpb247KGY9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pKSE9PTA7KWlmKGY9PT0zOSlpZihoayhpLHAsaS5wb3NpdGlvbiwhMCksZj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSxmPT09MzkpcD1pLnBvc2l0aW9uLGkucG9zaXRpb24rKyx3PWkucG9zaXRpb247ZWxzZSByZXR1cm4hMDtlbHNlIGczKGYpPyhoayhpLHAsdywhMCksT2R0KGksUGYoaSwhMSxhKSkscD13PWkucG9zaXRpb24pOmkucG9zaXRpb249PT1pLmxpbmVTdGFydCYmWVcoaSk/U3MoaSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyIik6KGkucG9zaXRpb24rKyx3PWkucG9zaXRpb24pO1NzKGksInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXIiKX1mdW5jdGlvbiBiTWUoaSxhKXt2YXIgZixwLHcsbSxiLEU7aWYoRT1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksRSE9PTM0KXJldHVybiExO2ZvcihpLmtpbmQ9InNjYWxhciIsaS5yZXN1bHQ9IiIsaS5wb3NpdGlvbisrLGY9cD1pLnBvc2l0aW9uOyhFPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSkhPT0wOyl7aWYoRT09PTM0KXJldHVybiBoayhpLGYsaS5wb3NpdGlvbiwhMCksaS5wb3NpdGlvbisrLCEwO2lmKEU9PT05Mil7aWYoaGsoaSxmLGkucG9zaXRpb24sITApLEU9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksZzMoRSkpUGYoaSwhMSxhKTtlbHNlIGlmKEU8MjU2JiZlUHRbRV0paS5yZXN1bHQrPW5QdFtFXSxpLnBvc2l0aW9uKys7ZWxzZSBpZigoYj1sTWUoRSkpPjApe2Zvcih3PWIsbT0wO3c+MDt3LS0pRT1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSwoYj11TWUoRSkpPj0wP209KG08PDQpK2I6U3MoaSwiZXhwZWN0ZWQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyIik7aS5yZXN1bHQrPWZNZShtKSxpLnBvc2l0aW9uKyt9ZWxzZSBTcyhpLCJ1bmtub3duIGVzY2FwZSBzZXF1ZW5jZSIpO2Y9cD1pLnBvc2l0aW9ufWVsc2UgZzMoRSk/KGhrKGksZixwLCEwKSxPZHQoaSxQZihpLCExLGEpKSxmPXA9aS5wb3NpdGlvbik6aS5wb3NpdGlvbj09PWkubGluZVN0YXJ0JiZZVyhpKT9TcyhpLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgZG9jdW1lbnQgd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXIiKTooaS5wb3NpdGlvbisrLHA9aS5wb3NpdGlvbil9U3MoaSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhciIpfWZ1bmN0aW9uIHdNZShpLGEpe3ZhciBmPSEwLHAsdyxtLGI9aS50YWcsRSxfPWkuYW5jaG9yLEEsSSxCLE4sUix6PU9iamVjdC5jcmVhdGUobnVsbCksVyxldCxzdCxhdDtpZihhdD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksYXQ9PT05MSlJPTkzLFI9ITEsRT1bXTtlbHNlIGlmKGF0PT09MTIzKUk9MTI1LFI9ITAsRT17fTtlbHNlIHJldHVybiExO2ZvcihpLmFuY2hvciE9PW51bGwmJihpLmFuY2hvck1hcFtpLmFuY2hvcl09RSksYXQ9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7YXQhPT0wOyl7aWYoUGYoaSwhMCxhKSxhdD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksYXQ9PT1JKXJldHVybiBpLnBvc2l0aW9uKyssaS50YWc9YixpLmFuY2hvcj1fLGkua2luZD1SPyJtYXBwaW5nIjoic2VxdWVuY2UiLGkucmVzdWx0PUUsITA7Zj9hdD09PTQ0JiZTcyhpLCJleHBlY3RlZCB0aGUgbm9kZSBjb250ZW50LCBidXQgZm91bmQgJywnIik6U3MoaSwibWlzc2VkIGNvbW1hIGJldHdlZW4gZmxvdyBjb2xsZWN0aW9uIGVudHJpZXMiKSxldD1XPXN0PW51bGwsQj1OPSExLGF0PT09NjMmJihBPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKzEpLGRwKEEpJiYoQj1OPSEwLGkucG9zaXRpb24rKyxQZihpLCEwLGEpKSkscD1pLmxpbmUsdz1pLmxpbmVTdGFydCxtPWkucG9zaXRpb24sdEwoaSxhLEdXLCExLCEwKSxldD1pLnRhZyxXPWkucmVzdWx0LFBmKGksITAsYSksYXQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLChOfHxpLmxpbmU9PT1wKSYmYXQ9PT01OCYmKEI9ITAsYXQ9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksUGYoaSwhMCxhKSx0TChpLGEsR1csITEsITApLHN0PWkucmVzdWx0KSxSP0pBKGksRSx6LGV0LFcsc3QscCx3LG0pOkI/RS5wdXNoKEpBKGksbnVsbCx6LGV0LFcsc3QscCx3LG0pKTpFLnB1c2goVyksUGYoaSwhMCxhKSxhdD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksYXQ9PT00ND8oZj0hMCxhdD1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSk6Zj0hMX1TcyhpLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGZsb3cgY29sbGVjdGlvbiIpfWZ1bmN0aW9uIHZNZShpLGEpe3ZhciBmLHAsdz1EZHQsbT0hMSxiPSExLEU9YSxfPTAsQT0hMSxJLEI7aWYoQj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksQj09PTEyNClwPSExO2Vsc2UgaWYoQj09PTYyKXA9ITA7ZWxzZSByZXR1cm4hMTtmb3IoaS5raW5kPSJzY2FsYXIiLGkucmVzdWx0PSIiO0IhPT0wOylpZihCPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLEI9PT00M3x8Qj09PTQ1KURkdD09PXc/dz1CPT09NDM/WE90OnNNZTpTcyhpLCJyZXBlYXQgb2YgYSBjaG9tcGluZyBtb2RlIGlkZW50aWZpZXIiKTtlbHNlIGlmKChJPWhNZShCKSk+PTApST09PTA/U3MoaSwiYmFkIGV4cGxpY2l0IGluZGVudGF0aW9uIHdpZHRoIG9mIGEgYmxvY2sgc2NhbGFyOyBpdCBjYW5ub3QgYmUgbGVzcyB0aGFuIG9uZSIpOmI/U3MoaSwicmVwZWF0IG9mIGFuIGluZGVudGF0aW9uIHdpZHRoIGlkZW50aWZpZXIiKTooRT1hK0ktMSxiPSEwKTtlbHNlIGJyZWFrO2lmKGdUKEIpKXtkbyBCPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO3doaWxlKGdUKEIpKTtpZihCPT09MzUpZG8gQj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTt3aGlsZSghZzMoQikmJkIhPT0wKX1mb3IoO0IhPT0wOyl7Zm9yKElkdChpKSxpLmxpbmVJbmRlbnQ9MCxCPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTsoIWJ8fGkubGluZUluZGVudDxFKSYmQj09PTMyOylpLmxpbmVJbmRlbnQrKyxCPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO2lmKCFiJiZpLmxpbmVJbmRlbnQ+RSYmKEU9aS5saW5lSW5kZW50KSxnMyhCKSl7XysrO2NvbnRpbnVlfWlmKGkubGluZUluZGVudDxFKXt3PT09WE90P2kucmVzdWx0Kz1iZy5yZXBlYXQoYApgLG0/MStfOl8pOnc9PT1EZHQmJm0mJihpLnJlc3VsdCs9YApgKTticmVha31mb3IocD9nVChCKT8oQT0hMCxpLnJlc3VsdCs9YmcucmVwZWF0KGAKYCxtPzErXzpfKSk6QT8oQT0hMSxpLnJlc3VsdCs9YmcucmVwZWF0KGAKYCxfKzEpKTpfPT09MD9tJiYoaS5yZXN1bHQrPSIgIik6aS5yZXN1bHQrPWJnLnJlcGVhdChgCmAsXyk6aS5yZXN1bHQrPWJnLnJlcGVhdChgCmAsbT8xK186XyksbT0hMCxiPSEwLF89MCxmPWkucG9zaXRpb247IWczKEIpJiZCIT09MDspQj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTtoayhpLGYsaS5wb3NpdGlvbiwhMSl9cmV0dXJuITB9ZnVuY3Rpb24gYVB0KGksYSl7dmFyIGYscD1pLnRhZyx3PWkuYW5jaG9yLG09W10sYixFPSExLF87aWYoaS5maXJzdFRhYkluTGluZSE9PS0xKXJldHVybiExO2ZvcihpLmFuY2hvciE9PW51bGwmJihpLmFuY2hvck1hcFtpLmFuY2hvcl09bSksXz1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbik7XyE9PTAmJihpLmZpcnN0VGFiSW5MaW5lIT09LTEmJihpLnBvc2l0aW9uPWkuZmlyc3RUYWJJbkxpbmUsU3MoaSwidGFiIGNoYXJhY3RlcnMgbXVzdCBub3QgYmUgdXNlZCBpbiBpbmRlbnRhdGlvbiIpKSwhKF8hPT00NXx8KGI9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24rMSksIWRwKGIpKSkpOyl7aWYoRT0hMCxpLnBvc2l0aW9uKyssUGYoaSwhMCwtMSkmJmkubGluZUluZGVudDw9YSl7bS5wdXNoKG51bGwpLF89aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pO2NvbnRpbnVlfWlmKGY9aS5saW5lLHRMKGksYSxLT3QsITEsITApLG0ucHVzaChpLnJlc3VsdCksUGYoaSwhMCwtMSksXz1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksKGkubGluZT09PWZ8fGkubGluZUluZGVudD5hKSYmXyE9PTApU3MoaSwiYmFkIGluZGVudGF0aW9uIG9mIGEgc2VxdWVuY2UgZW50cnkiKTtlbHNlIGlmKGkubGluZUluZGVudDxhKWJyZWFrfXJldHVybiBFPyhpLnRhZz1wLGkuYW5jaG9yPXcsaS5raW5kPSJzZXF1ZW5jZSIsaS5yZXN1bHQ9bSwhMCk6ITF9ZnVuY3Rpb24gbU1lKGksYSxmKXt2YXIgcCx3LG0sYixFLF8sQT1pLnRhZyxJPWkuYW5jaG9yLEI9e30sTj1PYmplY3QuY3JlYXRlKG51bGwpLFI9bnVsbCx6PW51bGwsVz1udWxsLGV0PSExLHN0PSExLGF0O2lmKGkuZmlyc3RUYWJJbkxpbmUhPT0tMSlyZXR1cm4hMTtmb3IoaS5hbmNob3IhPT1udWxsJiYoaS5hbmNob3JNYXBbaS5hbmNob3JdPUIpLGF0PWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTthdCE9PTA7KXtpZighZXQmJmkuZmlyc3RUYWJJbkxpbmUhPT0tMSYmKGkucG9zaXRpb249aS5maXJzdFRhYkluTGluZSxTcyhpLCJ0YWIgY2hhcmFjdGVycyBtdXN0IG5vdCBiZSB1c2VkIGluIGluZGVudGF0aW9uIikpLHA9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24rMSksbT1pLmxpbmUsKGF0PT09NjN8fGF0PT09NTgpJiZkcChwKSlhdD09PTYzPyhldCYmKEpBKGksQixOLFIseixudWxsLGIsRSxfKSxSPXo9Vz1udWxsKSxzdD0hMCxldD0hMCx3PSEwKTpldD8oZXQ9ITEsdz0hMCk6U3MoaSwiaW5jb21wbGV0ZSBleHBsaWNpdCBtYXBwaW5nIHBhaXI7IGEga2V5IG5vZGUgaXMgbWlzc2VkOyBvciBmb2xsb3dlZCBieSBhIG5vbi10YWJ1bGF0ZWQgZW1wdHkgbGluZSIpLGkucG9zaXRpb24rPTEsYXQ9cDtlbHNle2lmKGI9aS5saW5lLEU9aS5saW5lU3RhcnQsXz1pLnBvc2l0aW9uLCF0TChpLGYsWU90LCExLCEwKSlicmVhaztpZihpLmxpbmU9PT1tKXtmb3IoYXQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pO2dUKGF0KTspYXQ9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7aWYoYXQ9PT01OClhdD1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSxkcChhdCl8fFNzKGksImEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgZXhwZWN0ZWQgYWZ0ZXIgdGhlIGtleS12YWx1ZSBzZXBhcmF0b3Igd2l0aGluIGEgYmxvY2sgbWFwcGluZyIpLGV0JiYoSkEoaSxCLE4sUix6LG51bGwsYixFLF8pLFI9ej1XPW51bGwpLHN0PSEwLGV0PSExLHc9ITEsUj1pLnRhZyx6PWkucmVzdWx0O2Vsc2UgaWYoc3QpU3MoaSwiY2FuIG5vdCByZWFkIGFuIGltcGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBjb2xvbiBpcyBtaXNzZWQiKTtlbHNlIHJldHVybiBpLnRhZz1BLGkuYW5jaG9yPUksITB9ZWxzZSBpZihzdClTcyhpLCJjYW4gbm90IHJlYWQgYSBibG9jayBtYXBwaW5nIGVudHJ5OyBhIG11bHRpbGluZSBrZXkgbWF5IG5vdCBiZSBhbiBpbXBsaWNpdCBrZXkiKTtlbHNlIHJldHVybiBpLnRhZz1BLGkuYW5jaG9yPUksITB9aWYoKGkubGluZT09PW18fGkubGluZUluZGVudD5hKSYmKGV0JiYoYj1pLmxpbmUsRT1pLmxpbmVTdGFydCxfPWkucG9zaXRpb24pLHRMKGksYSxVVywhMCx3KSYmKGV0P3o9aS5yZXN1bHQ6Vz1pLnJlc3VsdCksZXR8fChKQShpLEIsTixSLHosVyxiLEUsXyksUj16PVc9bnVsbCksUGYoaSwhMCwtMSksYXQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pKSwoaS5saW5lPT09bXx8aS5saW5lSW5kZW50PmEpJiZhdCE9PTApU3MoaSwiYmFkIGluZGVudGF0aW9uIG9mIGEgbWFwcGluZyBlbnRyeSIpO2Vsc2UgaWYoaS5saW5lSW5kZW50PGEpYnJlYWt9cmV0dXJuIGV0JiZKQShpLEIsTixSLHosbnVsbCxiLEUsXyksc3QmJihpLnRhZz1BLGkuYW5jaG9yPUksaS5raW5kPSJtYXBwaW5nIixpLnJlc3VsdD1CKSxzdH1mdW5jdGlvbiB5TWUoaSl7dmFyIGEsZj0hMSxwPSExLHcsbSxiO2lmKGI9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLGIhPT0zMylyZXR1cm4hMTtpZihpLnRhZyE9PW51bGwmJlNzKGksImR1cGxpY2F0aW9uIG9mIGEgdGFnIHByb3BlcnR5IiksYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSxiPT09NjA/KGY9ITAsYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSk6Yj09PTMzPyhwPSEwLHc9IiEhIixiPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pKTp3PSIhIixhPWkucG9zaXRpb24sZil7ZG8gYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTt3aGlsZShiIT09MCYmYiE9PTYyKTtpLnBvc2l0aW9uPGkubGVuZ3RoPyhtPWkuaW5wdXQuc2xpY2UoYSxpLnBvc2l0aW9uKSxiPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pKTpTcyhpLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHZlcmJhdGltIHRhZyIpfWVsc2V7Zm9yKDtiIT09MCYmIWRwKGIpOyliPT09MzMmJihwP1NzKGksInRhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZXhjbGFtYXRpb24gbWFya3MiKToodz1pLmlucHV0LnNsaWNlKGEtMSxpLnBvc2l0aW9uKzEpLFFPdC50ZXN0KHcpfHxTcyhpLCJuYW1lZCB0YWcgaGFuZGxlIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVycyIpLHA9ITAsYT1pLnBvc2l0aW9uKzEpKSxiPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO209aS5pbnB1dC5zbGljZShhLGkucG9zaXRpb24pLGNNZS50ZXN0KG0pJiZTcyhpLCJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGZsb3cgaW5kaWNhdG9yIGNoYXJhY3RlcnMiKX1tJiYhWk90LnRlc3QobSkmJlNzKGksInRhZyBuYW1lIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVyczogIittKTt0cnl7bT1kZWNvZGVVUklDb21wb25lbnQobSl9Y2F0Y2h7U3MoaSwidGFnIG5hbWUgaXMgbWFsZm9ybWVkOiAiK20pfXJldHVybiBmP2kudGFnPW06bGsuY2FsbChpLnRhZ01hcCx3KT9pLnRhZz1pLnRhZ01hcFt3XSttOnc9PT0iISI/aS50YWc9IiEiK206dz09PSIhISI/aS50YWc9InRhZzp5YW1sLm9yZywyMDAyOiIrbTpTcyhpLCd1bmRlY2xhcmVkIHRhZyBoYW5kbGUgIicrdysnIicpLCEwfWZ1bmN0aW9uIHhNZShpKXt2YXIgYSxmO2lmKGY9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLGYhPT0zOClyZXR1cm4hMTtmb3IoaS5hbmNob3IhPT1udWxsJiZTcyhpLCJkdXBsaWNhdGlvbiBvZiBhbiBhbmNob3IgcHJvcGVydHkiKSxmPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLGE9aS5wb3NpdGlvbjtmIT09MCYmIWRwKGYpJiYhUUEoZik7KWY9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7cmV0dXJuIGkucG9zaXRpb249PT1hJiZTcyhpLCJuYW1lIG9mIGFuIGFuY2hvciBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIiksaS5hbmNob3I9aS5pbnB1dC5zbGljZShhLGkucG9zaXRpb24pLCEwfWZ1bmN0aW9uIGtNZShpKXt2YXIgYSxmLHA7aWYocD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbikscCE9PTQyKXJldHVybiExO2ZvcihwPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLGE9aS5wb3NpdGlvbjtwIT09MCYmIWRwKHApJiYhUUEocCk7KXA9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7cmV0dXJuIGkucG9zaXRpb249PT1hJiZTcyhpLCJuYW1lIG9mIGFuIGFsaWFzIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIiKSxmPWkuaW5wdXQuc2xpY2UoYSxpLnBvc2l0aW9uKSxsay5jYWxsKGkuYW5jaG9yTWFwLGYpfHxTcyhpLCd1bmlkZW50aWZpZWQgYWxpYXMgIicrZisnIicpLGkucmVzdWx0PWkuYW5jaG9yTWFwW2ZdLFBmKGksITAsLTEpLCEwfWZ1bmN0aW9uIHRMKGksYSxmLHAsdyl7dmFyIG0sYixFLF89MSxBPSExLEk9ITEsQixOLFIseixXLGV0O2lmKGkubGlzdGVuZXIhPT1udWxsJiZpLmxpc3RlbmVyKCJvcGVuIixpKSxpLnRhZz1udWxsLGkuYW5jaG9yPW51bGwsaS5raW5kPW51bGwsaS5yZXN1bHQ9bnVsbCxtPWI9RT1VVz09PWZ8fEtPdD09PWYscCYmUGYoaSwhMCwtMSkmJihBPSEwLGkubGluZUluZGVudD5hP189MTppLmxpbmVJbmRlbnQ9PT1hP189MDppLmxpbmVJbmRlbnQ8YSYmKF89LTEpKSxfPT09MSlmb3IoO3lNZShpKXx8eE1lKGkpOylQZihpLCEwLC0xKT8oQT0hMCxFPW0saS5saW5lSW5kZW50PmE/Xz0xOmkubGluZUluZGVudD09PWE/Xz0wOmkubGluZUluZGVudDxhJiYoXz0tMSkpOkU9ITE7aWYoRSYmKEU9QXx8dyksKF89PT0xfHxVVz09PWYpJiYoR1c9PT1mfHxZT3Q9PT1mP1c9YTpXPWErMSxldD1pLnBvc2l0aW9uLWkubGluZVN0YXJ0LF89PT0xP0UmJihhUHQoaSxldCl8fG1NZShpLGV0LFcpKXx8d01lKGksVyk/ST0hMDooYiYmdk1lKGksVyl8fHBNZShpLFcpfHxiTWUoaSxXKT9JPSEwOmtNZShpKT8oST0hMCwoaS50YWchPT1udWxsfHxpLmFuY2hvciE9PW51bGwpJiZTcyhpLCJhbGlhcyBub2RlIHNob3VsZCBub3QgaGF2ZSBhbnkgcHJvcGVydGllcyIpKTpnTWUoaSxXLEdXPT09ZikmJihJPSEwLGkudGFnPT09bnVsbCYmKGkudGFnPSI/IikpLGkuYW5jaG9yIT09bnVsbCYmKGkuYW5jaG9yTWFwW2kuYW5jaG9yXT1pLnJlc3VsdCkpOl89PT0wJiYoST1FJiZhUHQoaSxldCkpKSxpLnRhZz09PW51bGwpaS5hbmNob3IhPT1udWxsJiYoaS5hbmNob3JNYXBbaS5hbmNob3JdPWkucmVzdWx0KTtlbHNlIGlmKGkudGFnPT09Ij8iKXtmb3IoaS5yZXN1bHQhPT1udWxsJiZpLmtpbmQhPT0ic2NhbGFyIiYmU3MoaSwndW5hY2NlcHRhYmxlIG5vZGUga2luZCBmb3IgITw/PiB0YWc7IGl0IHNob3VsZCBiZSAic2NhbGFyIiwgbm90ICInK2kua2luZCsnIicpLEI9MCxOPWkuaW1wbGljaXRUeXBlcy5sZW5ndGg7QjxOO0IrPTEpaWYoej1pLmltcGxpY2l0VHlwZXNbQl0sei5yZXNvbHZlKGkucmVzdWx0KSl7aS5yZXN1bHQ9ei5jb25zdHJ1Y3QoaS5yZXN1bHQpLGkudGFnPXoudGFnLGkuYW5jaG9yIT09bnVsbCYmKGkuYW5jaG9yTWFwW2kuYW5jaG9yXT1pLnJlc3VsdCk7YnJlYWt9fWVsc2UgaWYoaS50YWchPT0iISIpe2lmKGxrLmNhbGwoaS50eXBlTWFwW2kua2luZHx8ImZhbGxiYWNrIl0saS50YWcpKXo9aS50eXBlTWFwW2kua2luZHx8ImZhbGxiYWNrIl1baS50YWddO2Vsc2UgZm9yKHo9bnVsbCxSPWkudHlwZU1hcC5tdWx0aVtpLmtpbmR8fCJmYWxsYmFjayJdLEI9MCxOPVIubGVuZ3RoO0I8TjtCKz0xKWlmKGkudGFnLnNsaWNlKDAsUltCXS50YWcubGVuZ3RoKT09PVJbQl0udGFnKXt6PVJbQl07YnJlYWt9enx8U3MoaSwidW5rbm93biB0YWcgITwiK2kudGFnKyI+IiksaS5yZXN1bHQhPT1udWxsJiZ6LmtpbmQhPT1pLmtpbmQmJlNzKGksInVuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8IitpLnRhZysnPiB0YWc7IGl0IHNob3VsZCBiZSAiJyt6LmtpbmQrJyIsIG5vdCAiJytpLmtpbmQrJyInKSx6LnJlc29sdmUoaS5yZXN1bHQsaS50YWcpPyhpLnJlc3VsdD16LmNvbnN0cnVjdChpLnJlc3VsdCxpLnRhZyksaS5hbmNob3IhPT1udWxsJiYoaS5hbmNob3JNYXBbaS5hbmNob3JdPWkucmVzdWx0KSk6U3MoaSwiY2Fubm90IHJlc29sdmUgYSBub2RlIHdpdGggITwiK2kudGFnKyI+IGV4cGxpY2l0IHRhZyIpfXJldHVybiBpLmxpc3RlbmVyIT09bnVsbCYmaS5saXN0ZW5lcigiY2xvc2UiLGkpLGkudGFnIT09bnVsbHx8aS5hbmNob3IhPT1udWxsfHxJfWZ1bmN0aW9uIEVNZShpKXt2YXIgYT1pLnBvc2l0aW9uLGYscCx3LG09ITEsYjtmb3IoaS52ZXJzaW9uPW51bGwsaS5jaGVja0xpbmVCcmVha3M9aS5sZWdhY3ksaS50YWdNYXA9T2JqZWN0LmNyZWF0ZShudWxsKSxpLmFuY2hvck1hcD1PYmplY3QuY3JlYXRlKG51bGwpOyhiPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSkhPT0wJiYoUGYoaSwhMCwtMSksYj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksIShpLmxpbmVJbmRlbnQ+MHx8YiE9PTM3KSk7KXtmb3IobT0hMCxiPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLGY9aS5wb3NpdGlvbjtiIT09MCYmIWRwKGIpOyliPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO2ZvcihwPWkuaW5wdXQuc2xpY2UoZixpLnBvc2l0aW9uKSx3PVtdLHAubGVuZ3RoPDEmJlNzKGksImRpcmVjdGl2ZSBuYW1lIG11c3Qgbm90IGJlIGxlc3MgdGhhbiBvbmUgY2hhcmFjdGVyIGluIGxlbmd0aCIpO2IhPT0wOyl7Zm9yKDtnVChiKTspYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTtpZihiPT09MzUpe2RvIGI9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7d2hpbGUoYiE9PTAmJiFnMyhiKSk7YnJlYWt9aWYoZzMoYikpYnJlYWs7Zm9yKGY9aS5wb3NpdGlvbjtiIT09MCYmIWRwKGIpOyliPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO3cucHVzaChpLmlucHV0LnNsaWNlKGYsaS5wb3NpdGlvbikpfWIhPT0wJiZJZHQoaSksbGsuY2FsbChpUHQscCk/aVB0W3BdKGkscCx3KTpXVyhpLCd1bmtub3duIGRvY3VtZW50IGRpcmVjdGl2ZSAiJytwKyciJyl9aWYoUGYoaSwhMCwtMSksaS5saW5lSW5kZW50PT09MCYmaS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pPT09NDUmJmkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKzEpPT09NDUmJmkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKzIpPT09NDU/KGkucG9zaXRpb24rPTMsUGYoaSwhMCwtMSkpOm0mJlNzKGksImRpcmVjdGl2ZXMgZW5kIG1hcmsgaXMgZXhwZWN0ZWQiKSx0TChpLGkubGluZUluZGVudC0xLFVXLCExLCEwKSxQZihpLCEwLC0xKSxpLmNoZWNrTGluZUJyZWFrcyYmb01lLnRlc3QoaS5pbnB1dC5zbGljZShhLGkucG9zaXRpb24pKSYmV1coaSwibm9uLUFTQ0lJIGxpbmUgYnJlYWtzIGFyZSBpbnRlcnByZXRlZCBhcyBjb250ZW50IiksaS5kb2N1bWVudHMucHVzaChpLnJlc3VsdCksaS5wb3NpdGlvbj09PWkubGluZVN0YXJ0JiZZVyhpKSl7aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pPT09NDYmJihpLnBvc2l0aW9uKz0zLFBmKGksITAsLTEpKTtyZXR1cm59aWYoaS5wb3NpdGlvbjxpLmxlbmd0aC0xKVNzKGksImVuZCBvZiB0aGUgc3RyZWFtIG9yIGEgZG9jdW1lbnQgc2VwYXJhdG9yIGlzIGV4cGVjdGVkIik7ZWxzZSByZXR1cm59ZnVuY3Rpb24gb1B0KGksYSl7aT1TdHJpbmcoaSksYT1hfHx7fSxpLmxlbmd0aCE9PTAmJihpLmNoYXJDb2RlQXQoaS5sZW5ndGgtMSkhPT0xMCYmaS5jaGFyQ29kZUF0KGkubGVuZ3RoLTEpIT09MTMmJihpKz1gCmApLGkuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoaT1pLnNsaWNlKDEpKSk7dmFyIGY9bmV3IGRNZShpLGEpLHA9aS5pbmRleE9mKCJcMCIpO2ZvcihwIT09LTEmJihmLnBvc2l0aW9uPXAsU3MoZiwibnVsbCBieXRlIGlzIG5vdCBhbGxvd2VkIGluIGlucHV0IikpLGYuaW5wdXQrPSJcMCI7Zi5pbnB1dC5jaGFyQ29kZUF0KGYucG9zaXRpb24pPT09MzI7KWYubGluZUluZGVudCs9MSxmLnBvc2l0aW9uKz0xO2Zvcig7Zi5wb3NpdGlvbjxmLmxlbmd0aC0xOylFTWUoZik7cmV0dXJuIGYuZG9jdW1lbnRzfWZ1bmN0aW9uIFRNZShpLGEsZil7YSE9PW51bGwmJnR5cGVvZiBhPT0ib2JqZWN0IiYmdHlwZW9mIGY+InUiJiYoZj1hLGE9bnVsbCk7dmFyIHA9b1B0KGksZik7aWYodHlwZW9mIGEhPSJmdW5jdGlvbiIpcmV0dXJuIHA7Zm9yKHZhciB3PTAsbT1wLmxlbmd0aDt3PG07dys9MSlhKHBbd10pfWZ1bmN0aW9uIENNZShpLGEpe3ZhciBmPW9QdChpLGEpO2lmKGYubGVuZ3RoIT09MCl7aWYoZi5sZW5ndGg9PT0xKXJldHVybiBmWzBdO3Rocm93IG5ldyBBNSgiZXhwZWN0ZWQgYSBzaW5nbGUgZG9jdW1lbnQgaW4gdGhlIHN0cmVhbSwgYnV0IGZvdW5kIG1vcmUiKX19dmFyIF9NZT1UTWUsU01lPUNNZSxBTWU9e2xvYWRBbGw6X01lLGxvYWQ6U01lfSxMTWU9R090LE1NZT1BTWUubG9hZDtmdW5jdGlvbiBETWUoaSl7Y29uc3QgYT1pLm1hdGNoKGFJdCk7aWYoIWEpcmV0dXJue3RleHQ6aSxtZXRhZGF0YTp7fX07bGV0IGY9TU1lKGFbMV0se3NjaGVtYTpMTWV9KT8/e307Zj10eXBlb2YgZj09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGYpP2Y6e307Y29uc3QgcD17fTtyZXR1cm4gZi5kaXNwbGF5TW9kZSYmKHAuZGlzcGxheU1vZGU9Zi5kaXNwbGF5TW9kZS50b1N0cmluZygpKSxmLnRpdGxlJiYocC50aXRsZT1mLnRpdGxlLnRvU3RyaW5nKCkpLGYuY29uZmlnJiYocC5jb25maWc9Zi5jb25maWcpLHt0ZXh0Omkuc2xpY2UoYVswXS5sZW5ndGgpLG1ldGFkYXRhOnB9fWNvbnN0IElNZT1pPT5pLnJlcGxhY2UoL1xyXG4/L2csYApgKS5yZXBsYWNlKC88KFx3KykoW14+XSopPi9nLChhLGYscCk9PiI8IitmK3AucmVwbGFjZSgvPSIoW14iXSopIi9nLCI9JyQxJyIpKyI+IiksT01lPWk9Pntjb25zdHt0ZXh0OmEsbWV0YWRhdGE6Zn09RE1lKGkpLHtkaXNwbGF5TW9kZTpwLHRpdGxlOncsY29uZmlnOm09e319PWY7cmV0dXJuIHAmJihtLmdhbnR0fHwobS5nYW50dD17fSksbS5nYW50dC5kaXNwbGF5TW9kZT1wKSx7dGl0bGU6dyxjb25maWc6bSx0ZXh0OmF9fSxQTWU9aT0+e2NvbnN0IGE9JGEuZGV0ZWN0SW5pdChpKT8/e30sZj0kYS5kZXRlY3REaXJlY3RpdmUoaSwid3JhcCIpO3JldHVybiBBcnJheS5pc0FycmF5KGYpP2Eud3JhcD1mLnNvbWUoKHt0eXBlOnB9KT0+e30pOihmPT1udWxsP3ZvaWQgMDpmLnR5cGUpPT09IndyYXAiJiYoYS53cmFwPSEwKSx7dGV4dDpuU2UoaSksZGlyZWN0aXZlOmF9fTtmdW5jdGlvbiBGTWUoaSl7Y29uc3QgYT1JTWUoaSksZj1PTWUoYSkscD1QTWUoZi50ZXh0KSx3PXJGKGYuY29uZmlnLHAuZGlyZWN0aXZlKTtyZXR1cm4gaT16QWUocC50ZXh0KSx7Y29kZTppLHRpdGxlOmYudGl0bGUsY29uZmlnOnd9fWNvbnN0IE5NZT01ZTQsQk1lPSJncmFwaCBUQjthW01heGltdW0gdGV4dCBzaXplIGluIGRpYWdyYW0gZXhjZWVkZWRdO3N0eWxlIGEgZmlsbDojZmFhIixSTWU9InNhbmRib3giLGpNZT0ibG9vc2UiLCRNZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHpNZT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIscU1lPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixITWU9IjEwMCUiLFZNZT0iMTAwJSIsR01lPSJib3JkZXI6MDttYXJnaW46MDsiLFVNZT0ibWFyZ2luOjAiLFdNZT0iYWxsb3ctdG9wLW5hdmlnYXRpb24tYnktdXNlci1hY3RpdmF0aW9uIGFsbG93LXBvcHVwcyIsWU1lPSdUaGUgImlmcmFtZSIgdGFnIGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBicm93c2VyLicsS01lPVsiZm9yZWlnbm9iamVjdCJdLFhNZT1bImRvbWluYW50LWJhc2VsaW5lIl07ZnVuY3Rpb24gY1B0KGkpe2NvbnN0IGE9Rk1lKGkpO3JldHVybiAkVygpLEZTZShhLmNvbmZpZz8/e30pLGF9YXN5bmMgZnVuY3Rpb24gUU1lKGksYSl7eGR0KCksaT1jUHQoaSkuY29kZTt0cnl7YXdhaXQga2R0KGkpfWNhdGNoKGYpe2lmKGEhPW51bGwmJmEuc3VwcHJlc3NFcnJvcnMpcmV0dXJuITE7dGhyb3cgZn1yZXR1cm4hMH1jb25zdCBaTWU9ZnVuY3Rpb24oaSl7bGV0IGE9aTtyZXR1cm4gYT1hLnJlcGxhY2UoL3N0eWxlLio6XFMqIy4qOy9nLGZ1bmN0aW9uKGYpe3JldHVybiBmLnN1YnN0cmluZygwLGYubGVuZ3RoLTEpfSksYT1hLnJlcGxhY2UoL2NsYXNzRGVmLio6XFMqIy4qOy9nLGZ1bmN0aW9uKGYpe3JldHVybiBmLnN1YnN0cmluZygwLGYubGVuZ3RoLTEpfSksYT1hLnJlcGxhY2UoLyNcdys7L2csZnVuY3Rpb24oZil7Y29uc3QgcD1mLnN1YnN0cmluZygxLGYubGVuZ3RoLTEpO3JldHVybi9eXCs/XGQrJC8udGVzdChwKT8i76yCwrDCsCIrcCsiwrbDnyI6Iu+sgsKwIitwKyLCtsOfIn0pLGF9LHVGPWZ1bmN0aW9uKGkpe3JldHVybiBpLnJlcGxhY2UoL++sgsKwwrAvZywiJiMiKS5yZXBsYWNlKC/vrILCsC9nLCImIikucmVwbGFjZSgvwrbDny9nLCI7Iil9LHVQdD0oaSxhLGY9W10pPT5gCi4ke2l9ICR7YX0geyAke2Yuam9pbigiICFpbXBvcnRhbnQ7ICIpfSAhaW1wb3J0YW50OyB9YCxKTWU9KGksYT17fSk9Pnt2YXIgcDtsZXQgZj0iIjtpZihpLnRoZW1lQ1NTIT09dm9pZCAwJiYoZis9YAoke2kudGhlbWVDU1N9YCksaS5mb250RmFtaWx5IT09dm9pZCAwJiYoZis9YAo6cm9vdCB7IC0tbWVybWFpZC1mb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9fWApLGkuYWx0Rm9udEZhbWlseSE9PXZvaWQgMCYmKGYrPWAKOnJvb3QgeyAtLW1lcm1haWQtYWx0LWZvbnQtZmFtaWx5OiAke2kuYWx0Rm9udEZhbWlseX19YCksIW9GKGEpKXtjb25zdCBFPWkuaHRtbExhYmVsc3x8KChwPWkuZmxvd2NoYXJ0KT09bnVsbD92b2lkIDA6cC5odG1sTGFiZWxzKT9bIj4gKiIsInNwYW4iXTpbInJlY3QiLCJwb2x5Z29uIiwiZWxsaXBzZSIsImNpcmNsZSIsInBhdGgiXTtmb3IoY29uc3QgXyBpbiBhKXtjb25zdCBBPWFbX107b0YoQS5zdHlsZXMpfHxFLmZvckVhY2goST0+e2YrPXVQdChBLmlkLEksQS5zdHlsZXMpfSksb0YoQS50ZXh0U3R5bGVzKXx8KGYrPXVQdChBLmlkLCJ0c3BhbiIsQS50ZXh0U3R5bGVzKSl9fXJldHVybiBmfSx0RGU9KGksYSxmLHApPT57Y29uc3Qgdz1KTWUoaSxmKSxtPXNBZShhLHcsaS50aGVtZVZhcmlhYmxlcyk7cmV0dXJuIHBkdChMU2UoYCR7cH17JHttfX1gKSxEU2UpfSxlRGU9KGk9IiIsYSxmKT0+e2xldCBwPWk7cmV0dXJuIWYmJiFhJiYocD1wLnJlcGxhY2UoL21hcmtlci1lbmQ9InVybFwoW1xkKy4vOj0/QS1aYS16LV0qPyMvZywnbWFya2VyLWVuZD0idXJsKCMnKSkscD11RihwKSxwPXAucmVwbGFjZSgvPGJyPi9nLCI8YnIvPiIpLHB9LG5EZT0oaT0iIixhKT0+e3ZhciB3LG07Y29uc3QgZj0obT0odz1hPT1udWxsP3ZvaWQgMDphLnZpZXdCb3gpPT1udWxsP3ZvaWQgMDp3LmJhc2VWYWwpIT1udWxsJiZtLmhlaWdodD9hLnZpZXdCb3guYmFzZVZhbC5oZWlnaHQrInB4IjpWTWUscD1idG9hKCc8Ym9keSBzdHlsZT0iJytVTWUrJyI+JytpKyI8L2JvZHk+Iik7cmV0dXJuYDxpZnJhbWUgc3R5bGU9IndpZHRoOiR7SE1lfTtoZWlnaHQ6JHtmfTske0dNZX0iIHNyYz0iZGF0YTp0ZXh0L2h0bWw7YmFzZTY0LCR7cH0iIHNhbmRib3g9IiR7V01lfSI+CiAgJHtZTWV9CjwvaWZyYW1lPmB9LGxQdD0oaSxhLGYscCx3KT0+e2NvbnN0IG09aS5hcHBlbmQoImRpdiIpO20uYXR0cigiaWQiLGYpLHAmJm0uYXR0cigic3R5bGUiLHApO2NvbnN0IGI9bS5hcHBlbmQoInN2ZyIpLmF0dHIoImlkIixhKS5hdHRyKCJ3aWR0aCIsIjEwMCUiKS5hdHRyKCJ4bWxucyIsJE1lKTtyZXR1cm4gdyYmYi5hdHRyKCJ4bWxuczp4bGluayIsdyksYi5hcHBlbmQoImciKSxpfTtmdW5jdGlvbiBoUHQoaSxhKXtyZXR1cm4gaS5hcHBlbmQoImlmcmFtZSIpLmF0dHIoImlkIixhKS5hdHRyKCJzdHlsZSIsIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IikuYXR0cigic2FuZGJveCIsIiIpfWNvbnN0IHJEZT0oaSxhLGYscCk9Pnt2YXIgdyxtLGI7KHc9aS5nZXRFbGVtZW50QnlJZChhKSk9PW51bGx8fHcucmVtb3ZlKCksKG09aS5nZXRFbGVtZW50QnlJZChmKSk9PW51bGx8fG0ucmVtb3ZlKCksKGI9aS5nZXRFbGVtZW50QnlJZChwKSk9PW51bGx8fGIucmVtb3ZlKCl9LGlEZT1hc3luYyBmdW5jdGlvbihpLGEsZil7dmFyIG50LEl0LE90LEJ0LEV0LFo7eGR0KCk7Y29uc3QgcD1jUHQoYSk7YT1wLmNvZGU7Y29uc3Qgdz1GZCgpO1V0LmRlYnVnKHcpLGEubGVuZ3RoPigodz09bnVsbD92b2lkIDA6dy5tYXhUZXh0U2l6ZSk/P05NZSkmJihhPUJNZSk7Y29uc3QgbT0iIyIraSxiPSJpIitpLEU9IiMiK2IsXz0iZCIraSxBPSIjIitfO2xldCBJPXlyKCJib2R5Iik7Y29uc3QgQj13LnNlY3VyaXR5TGV2ZWw9PT1STWUsTj13LnNlY3VyaXR5TGV2ZWw9PT1qTWUsUj13LmZvbnRGYW1pbHk7aWYoZiE9PXZvaWQgMCl7aWYoZiYmKGYuaW5uZXJIVE1MPSIiKSxCKXtjb25zdCBDdD1oUHQoeXIoZiksYik7ST15cihDdC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSxJLm5vZGUoKS5zdHlsZS5tYXJnaW49MH1lbHNlIEk9eXIoZik7bFB0KEksaSxfLGBmb250LWZhbWlseTogJHtSfWAsek1lKX1lbHNle2lmKHJEZShkb2N1bWVudCxpLF8sYiksQil7Y29uc3QgQ3Q9aFB0KHlyKCJib2R5IiksYik7ST15cihDdC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSxJLm5vZGUoKS5zdHlsZS5tYXJnaW49MH1lbHNlIEk9eXIoImJvZHkiKTtsUHQoSSxpLF8pfWE9Wk1lKGEpO2xldCB6LFc7dHJ5e3o9YXdhaXQga2R0KGEse3RpdGxlOnAudGl0bGV9KX1jYXRjaChDdCl7ej1uZXcgRk90KCJlcnJvciIpLFc9Q3R9Y29uc3QgZXQ9SS5zZWxlY3QoQSkubm9kZSgpLHN0PXoudHlwZSxhdD1ldC5maXJzdENoaWxkLGJ0PWF0LmZpcnN0Q2hpbGQsbXQ9KEl0PShudD16LnJlbmRlcmVyKS5nZXRDbGFzc2VzKT09bnVsbD92b2lkIDA6SXQuY2FsbChudCxhLHopLHl0PXREZSh3LHN0LG10LG0pLGZ0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ZnQuaW5uZXJIVE1MPXl0LGF0Lmluc2VydEJlZm9yZShmdCxidCk7dHJ5e2F3YWl0IHoucmVuZGVyZXIuZHJhdyhhLGksbk90LHopfWNhdGNoKEN0KXt0aHJvdyBmQWUuZHJhdyhhLGksbk90KSxDdH1jb25zdCB1dD1JLnNlbGVjdChgJHtBfSBzdmdgKSx2dD0oQnQ9KE90PXouZGIpLmdldEFjY1RpdGxlKT09bnVsbD92b2lkIDA6QnQuY2FsbChPdCksWD0oWj0oRXQ9ei5kYikuZ2V0QWNjRGVzY3JpcHRpb24pPT1udWxsP3ZvaWQgMDpaLmNhbGwoRXQpO2FEZShzdCx1dCx2dCxYKSxJLnNlbGVjdChgW2lkPSIke2l9Il1gKS5zZWxlY3RBbGwoImZvcmVpZ25vYmplY3QgPiAqIikuYXR0cigieG1sbnMiLHFNZSk7bGV0IHB0PUkuc2VsZWN0KEEpLm5vZGUoKS5pbm5lckhUTUw7aWYoVXQuZGVidWcoImNvbmZpZy5hcnJvd01hcmtlckFic29sdXRlIix3LmFycm93TWFya2VyQWJzb2x1dGUpLHB0PWVEZShwdCxCLG8xKHcuYXJyb3dNYXJrZXJBYnNvbHV0ZSkpLEIpe2NvbnN0IEN0PUkuc2VsZWN0KEErIiBzdmciKS5ub2RlKCk7cHQ9bkRlKHB0LEN0KX1lbHNlIE58fChwdD1sVy5zYW5pdGl6ZShwdCx7QUREX1RBR1M6S01lLEFERF9BVFRSOlhNZX0pKTtpZihtQWUoKSxXKXRocm93IFc7Y29uc3QgVHQ9eXIoQj9FOkEpLm5vZGUoKTtyZXR1cm4gVHQmJiJyZW1vdmUiaW4gVHQmJlR0LnJlbW92ZSgpLHtzdmc6cHQsYmluZEZ1bmN0aW9uczp6LmRiLmJpbmRGdW5jdGlvbnN9fTtmdW5jdGlvbiBzRGUoaT17fSl7dmFyIGY7aSE9bnVsbCYmaS5mb250RmFtaWx5JiYhKChmPWkudGhlbWVWYXJpYWJsZXMpIT1udWxsJiZmLmZvbnRGYW1pbHkpJiYoaS50aGVtZVZhcmlhYmxlc3x8KGkudGhlbWVWYXJpYWJsZXM9e30pLGkudGhlbWVWYXJpYWJsZXMuZm9udEZhbWlseT1pLmZvbnRGYW1pbHkpLE9TZShpKSxpIT1udWxsJiZpLnRoZW1lJiZpLnRoZW1lIGluIFQ1P2kudGhlbWVWYXJpYWJsZXM9VDVbaS50aGVtZV0uZ2V0VGhlbWVWYXJpYWJsZXMoaS50aGVtZVZhcmlhYmxlcyk6aSYmKGkudGhlbWVWYXJpYWJsZXM9VDUuZGVmYXVsdC5nZXRUaGVtZVZhcmlhYmxlcyhpLnRoZW1lVmFyaWFibGVzKSk7Y29uc3QgYT10eXBlb2YgaT09Im9iamVjdCI/SVNlKGkpOmlPdCgpO1hmdChhLmxvZ0xldmVsKSx4ZHQoKX1mdW5jdGlvbiBhRGUoaSxhLGYscCl7akFlKGEsaSksJEFlKGEsZixwLGEuYXR0cigiaWQiKSl9Y29uc3QgcFQ9T2JqZWN0LmZyZWV6ZSh7cmVuZGVyOmlEZSxwYXJzZTpRTWUsZ2V0RGlhZ3JhbUZyb21UZXh0OmtkdCxpbml0aWFsaXplOnNEZSxnZXRDb25maWc6RmQsc2V0Q29uZmlnOnNPdCxnZXRTaXRlQ29uZmlnOmlPdCx1cGRhdGVTaXRlQ29uZmlnOlBTZSxyZXNldDooKT0+eyRXKCl9LGdsb2JhbFJlc2V0OigpPT57JFcoV0EpfSxkZWZhdWx0Q29uZmlnOldBfSk7WGZ0KEZkKCkubG9nTGV2ZWwpLCRXKEZkKCkpO2NvbnN0IG9EZT1hc3luYygpPT57VXQuZGVidWcoIkxvYWRpbmcgcmVnaXN0ZXJlZCBkaWFncmFtcyIpO2NvbnN0IGE9KGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChPYmplY3QuZW50cmllcyhOQSkubWFwKGFzeW5jKFtmLHtkZXRlY3RvcjpwLGxvYWRlcjp3fV0pPT57aWYodyl0cnl7eWR0KGYpfWNhdGNoe3RyeXtjb25zdHtkaWFncmFtOmIsaWQ6RX09YXdhaXQgdygpO0hXKEUsYixwKX1jYXRjaChiKXt0aHJvdyBVdC5lcnJvcihgRmFpbGVkIHRvIGxvYWQgZXh0ZXJuYWwgZGlhZ3JhbSB3aXRoIGtleSAke2Z9LiBSZW1vdmluZyBmcm9tIGRldGVjdG9ycy5gKSxkZWxldGUgTkFbZl0sYn19fSkpKS5maWx0ZXIoZj0+Zi5zdGF0dXM9PT0icmVqZWN0ZWQiKTtpZihhLmxlbmd0aD4wKXtVdC5lcnJvcihgRmFpbGVkIHRvIGxvYWQgJHthLmxlbmd0aH0gZXh0ZXJuYWwgZGlhZ3JhbXNgKTtmb3IoY29uc3QgZiBvZiBhKVV0LmVycm9yKGYpO3Rocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgJHthLmxlbmd0aH0gZXh0ZXJuYWwgZGlhZ3JhbXNgKX19LGNEZT0oaSxhLGYpPT57VXQud2FybihpKSxXSXQoaSk/KGYmJmYoaS5zdHIsaS5oYXNoKSxhLnB1c2goey4uLmksbWVzc2FnZTppLnN0cixlcnJvcjppfSkpOihmJiZmKGkpLGkgaW5zdGFuY2VvZiBFcnJvciYmYS5wdXNoKHtzdHI6aS5tZXNzYWdlLG1lc3NhZ2U6aS5tZXNzYWdlLGhhc2g6aS5uYW1lLGVycm9yOml9KSl9LGZQdD1hc3luYyBmdW5jdGlvbihpPXtxdWVyeVNlbGVjdG9yOiIubWVybWFpZCJ9KXt0cnl7YXdhaXQgdURlKGkpfWNhdGNoKGEpe2lmKFdJdChhKSYmVXQuZXJyb3IoYS5zdHIpLEJiLnBhcnNlRXJyb3ImJkJiLnBhcnNlRXJyb3IoYSksIWkuc3VwcHJlc3NFcnJvcnMpdGhyb3cgVXQuZXJyb3IoIlVzZSB0aGUgc3VwcHJlc3NFcnJvcnMgb3B0aW9uIHRvIHN1cHByZXNzIHRoZXNlIGVycm9ycyIpLGF9fSx1RGU9YXN5bmMgZnVuY3Rpb24oe3Bvc3RSZW5kZXJDYWxsYmFjazppLHF1ZXJ5U2VsZWN0b3I6YSxub2RlczpmfT17cXVlcnlTZWxlY3RvcjoiLm1lcm1haWQifSl7Y29uc3QgcD1wVC5nZXRDb25maWcoKTtVdC5kZWJ1ZyhgJHtpPyIiOiJObyAifUNhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kYCk7bGV0IHc7aWYoZil3PWY7ZWxzZSBpZihhKXc9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChhKTtlbHNlIHRocm93IG5ldyBFcnJvcigiTm9kZXMgYW5kIHF1ZXJ5U2VsZWN0b3IgYXJlIGJvdGggdW5kZWZpbmVkIik7VXQuZGVidWcoYEZvdW5kICR7dy5sZW5ndGh9IGRpYWdyYW1zYCksKHA9PW51bGw/dm9pZCAwOnAuc3RhcnRPbkxvYWQpIT09dm9pZCAwJiYoVXQuZGVidWcoIlN0YXJ0IE9uIExvYWQ6ICIrKHA9PW51bGw/dm9pZCAwOnAuc3RhcnRPbkxvYWQpKSxwVC51cGRhdGVTaXRlQ29uZmlnKHtzdGFydE9uTG9hZDpwPT1udWxsP3ZvaWQgMDpwLnN0YXJ0T25Mb2FkfSkpO2NvbnN0IG09bmV3ICRhLkluaXRJREdlbmVyYXRvcihwLmRldGVybWluaXN0aWNJZHMscC5kZXRlcm1pbmlzdGljSURTZWVkKTtsZXQgYjtjb25zdCBFPVtdO2Zvcihjb25zdCBfIG9mIEFycmF5LmZyb20odykpe1V0LmluZm8oIlJlbmRlcmluZyBkaWFncmFtOiAiK18uaWQpOy8qISBDaGVjayBpZiBwcmV2aW91c2x5IHByb2Nlc3NlZCAqL2lmKF8uZ2V0QXR0cmlidXRlKCJkYXRhLXByb2Nlc3NlZCIpKWNvbnRpbnVlO18uc2V0QXR0cmlidXRlKCJkYXRhLXByb2Nlc3NlZCIsInRydWUiKTtjb25zdCBBPWBtZXJtYWlkLSR7bS5uZXh0KCl9YDtiPV8uaW5uZXJIVE1MLGI9eEEoJGEuZW50aXR5RGVjb2RlKGIpKS50cmltKCkucmVwbGFjZSgvPGJyXHMqXC8/Pi9naSwiPGJyLz4iKTtjb25zdCBJPSRhLmRldGVjdEluaXQoYik7SSYmVXQuZGVidWcoIkRldGVjdGVkIGVhcmx5IHJlaW5pdDogIixJKTt0cnl7Y29uc3R7c3ZnOkIsYmluZEZ1bmN0aW9uczpOfT1hd2FpdCBiUHQoQSxiLF8pO18uaW5uZXJIVE1MPUIsaSYmYXdhaXQgaShBKSxOJiZOKF8pfWNhdGNoKEIpe2NEZShCLEUsQmIucGFyc2VFcnJvcil9fWlmKEUubGVuZ3RoPjApdGhyb3cgRVswXX0sZFB0PWZ1bmN0aW9uKGkpe3BULmluaXRpYWxpemUoaSl9LGxEZT1hc3luYyBmdW5jdGlvbihpLGEsZil7VXQud2FybigibWVybWFpZC5pbml0IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgcnVuIGluc3RlYWQuIiksaSYmZFB0KGkpO2NvbnN0IHA9e3Bvc3RSZW5kZXJDYWxsYmFjazpmLHF1ZXJ5U2VsZWN0b3I6Ii5tZXJtYWlkIn07dHlwZW9mIGE9PSJzdHJpbmciP3AucXVlcnlTZWxlY3Rvcj1hOmEmJihhIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ/cC5ub2Rlcz1bYV06cC5ub2Rlcz1hKSxhd2FpdCBmUHQocCl9LGhEZT1hc3luYyhpLHtsYXp5TG9hZDphPSEwfT17fSk9PntjSXQoLi4uaSksYT09PSExJiZhd2FpdCBvRGUoKX0sZ1B0PWZ1bmN0aW9uKCl7aWYoQmIuc3RhcnRPbkxvYWQpe2NvbnN0e3N0YXJ0T25Mb2FkOml9PXBULmdldENvbmZpZygpO2kmJkJiLnJ1bigpLmNhdGNoKGE9PlV0LmVycm9yKCJNZXJtYWlkIGZhaWxlZCB0byBpbml0aWFsaXplIixhKSl9fTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKXsvKiEKICogV2FpdCBmb3IgZG9jdW1lbnQgbG9hZGVkIGJlZm9yZSBzdGFydGluZyB0aGUgZXhlY3V0aW9uCiAqL3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixnUHQsITEpfWNvbnN0IGZEZT1mdW5jdGlvbihpKXtCYi5wYXJzZUVycm9yPWl9LEtXPVtdO2xldCBQZHQ9ITE7Y29uc3QgcFB0PWFzeW5jKCk9PntpZighUGR0KXtmb3IoUGR0PSEwO0tXLmxlbmd0aD4wOyl7Y29uc3QgaT1LVy5zaGlmdCgpO2lmKGkpdHJ5e2F3YWl0IGkoKX1jYXRjaChhKXtVdC5lcnJvcigiRXJyb3IgZXhlY3V0aW5nIHF1ZXVlIixhKX19UGR0PSExfX0sZERlPWFzeW5jKGksYSk9Pm5ldyBQcm9taXNlKChmLHApPT57Y29uc3Qgdz0oKT0+bmV3IFByb21pc2UoKG0sYik9PntwVC5wYXJzZShpLGEpLnRoZW4oRT0+e20oRSksZihFKX0sRT0+e3ZhciBfO1V0LmVycm9yKCJFcnJvciBwYXJzaW5nIixFKSwoXz1CYi5wYXJzZUVycm9yKT09bnVsbHx8Xy5jYWxsKEJiLEUpLGIoRSkscChFKX0pfSk7S1cucHVzaCh3KSxwUHQoKS5jYXRjaChwKX0pLGJQdD0oaSxhLGYpPT5uZXcgUHJvbWlzZSgocCx3KT0+e2NvbnN0IG09KCk9Pm5ldyBQcm9taXNlKChiLEUpPT57cFQucmVuZGVyKGksYSxmKS50aGVuKF89PntiKF8pLHAoXyl9LF89Pnt2YXIgQTtVdC5lcnJvcigiRXJyb3IgcGFyc2luZyIsXyksKEE9QmIucGFyc2VFcnJvcik9PW51bGx8fEEuY2FsbChCYixfKSxFKF8pLHcoXyl9KX0pO0tXLnB1c2gobSkscFB0KCkuY2F0Y2godyl9KSxCYj17c3RhcnRPbkxvYWQ6ITAsbWVybWFpZEFQSTpwVCxwYXJzZTpkRGUscmVuZGVyOmJQdCxpbml0OmxEZSxydW46ZlB0LHJlZ2lzdGVyRXh0ZXJuYWxEaWFncmFtczpoRGUsaW5pdGlhbGl6ZTpkUHQscGFyc2VFcnJvcjp2b2lkIDAsY29udGVudExvYWRlZDpnUHQsc2V0UGFyc2VFcnJvckhhbmRsZXI6ZkRlLGRldGVjdFR5cGU6eVd9O3ZhciBYVz1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKFhpLEVyLFhuLGRpKXtmb3IoWG49WG58fHt9LGRpPVhpLmxlbmd0aDtkaS0tO1huW1hpW2RpXV09RXIpO3JldHVybiBYbn0sYT1bMSwyNF0sZj1bMSwyNV0scD1bMSwyNl0sdz1bMSwyN10sbT1bMSwyOF0sYj1bMSw2M10sRT1bMSw2NF0sXz1bMSw2NV0sQT1bMSw2Nl0sST1bMSw2N10sQj1bMSw2OF0sTj1bMSw2OV0sUj1bMSwyOV0sej1bMSwzMF0sVz1bMSwzMV0sZXQ9WzEsMzJdLHN0PVsxLDMzXSxhdD1bMSwzNF0sYnQ9WzEsMzVdLG10PVsxLDM2XSx5dD1bMSwzN10sZnQ9WzEsMzhdLHV0PVsxLDM5XSx2dD1bMSw0MF0sWD1bMSw0MV0scHQ9WzEsNDJdLFU9WzEsNDNdLFR0PVsxLDQ0XSxudD1bMSw0NV0sSXQ9WzEsNDZdLE90PVsxLDQ3XSxCdD1bMSw0OF0sRXQ9WzEsNTBdLFo9WzEsNTFdLEN0PVsxLDUyXSx4dD1bMSw1M10sSHQ9WzEsNTRdLExlPVsxLDU1XSxGdD1bMSw1Nl0sZ249WzEsNTddLFNlPVsxLDU4XSxtZT1bMSw1OV0sVmU9WzEsNjBdLFllPVsxNCw0Ml0sY2U9WzE0LDM0LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0XSxrZT1bMTIsMTQsMzQsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzRdLHp0PVsxLDgyXSxyZT1bMSw4M10sc2U9WzEsODRdLFBlPVsxLDg1XSx0ZT1bMTIsMTQsNDJdLE1lPVsxMiwxNCwzMyw0Ml0sZGU9WzEyLDE0LDMzLDQyLDc2LDc3LDc5LDgwXSxvbj1bMTIsMzNdLG5pPVszNCwzNiwzNywzOCwzOSw0MCw0MSw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NF0sS3M9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxkaXJlY3Rpb246NSxkaXJlY3Rpb25fdGI6NixkaXJlY3Rpb25fYnQ6NyxkaXJlY3Rpb25fcmw6OCxkaXJlY3Rpb25fbHI6OSxncmFwaENvbmZpZzoxMCxDNF9DT05URVhUOjExLE5FV0xJTkU6MTIsc3RhdGVtZW50czoxMyxFT0Y6MTQsQzRfQ09OVEFJTkVSOjE1LEM0X0NPTVBPTkVOVDoxNixDNF9EWU5BTUlDOjE3LEM0X0RFUExPWU1FTlQ6MTgsb3RoZXJTdGF0ZW1lbnRzOjE5LGRpYWdyYW1TdGF0ZW1lbnRzOjIwLG90aGVyU3RhdGVtZW50OjIxLHRpdGxlOjIyLGFjY0Rlc2NyaXB0aW9uOjIzLGFjY190aXRsZToyNCxhY2NfdGl0bGVfdmFsdWU6MjUsYWNjX2Rlc2NyOjI2LGFjY19kZXNjcl92YWx1ZToyNyxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjI4LGJvdW5kYXJ5U3RhdGVtZW50OjI5LGJvdW5kYXJ5U3RhcnRTdGF0ZW1lbnQ6MzAsYm91bmRhcnlTdG9wU3RhdGVtZW50OjMxLGJvdW5kYXJ5U3RhcnQ6MzIsTEJSQUNFOjMzLEVOVEVSUFJJU0VfQk9VTkRBUlk6MzQsYXR0cmlidXRlczozNSxTWVNURU1fQk9VTkRBUlk6MzYsQk9VTkRBUlk6MzcsQ09OVEFJTkVSX0JPVU5EQVJZOjM4LE5PREU6MzksTk9ERV9MOjQwLE5PREVfUjo0MSxSQlJBQ0U6NDIsZGlhZ3JhbVN0YXRlbWVudDo0MyxQRVJTT046NDQsUEVSU09OX0VYVDo0NSxTWVNURU06NDYsU1lTVEVNX0RCOjQ3LFNZU1RFTV9RVUVVRTo0OCxTWVNURU1fRVhUOjQ5LFNZU1RFTV9FWFRfREI6NTAsU1lTVEVNX0VYVF9RVUVVRTo1MSxDT05UQUlORVI6NTIsQ09OVEFJTkVSX0RCOjUzLENPTlRBSU5FUl9RVUVVRTo1NCxDT05UQUlORVJfRVhUOjU1LENPTlRBSU5FUl9FWFRfREI6NTYsQ09OVEFJTkVSX0VYVF9RVUVVRTo1NyxDT01QT05FTlQ6NTgsQ09NUE9ORU5UX0RCOjU5LENPTVBPTkVOVF9RVUVVRTo2MCxDT01QT05FTlRfRVhUOjYxLENPTVBPTkVOVF9FWFRfREI6NjIsQ09NUE9ORU5UX0VYVF9RVUVVRTo2MyxSRUw6NjQsQklSRUw6NjUsUkVMX1U6NjYsUkVMX0Q6NjcsUkVMX0w6NjgsUkVMX1I6NjksUkVMX0I6NzAsUkVMX0lOREVYOjcxLFVQREFURV9FTF9TVFlMRTo3MixVUERBVEVfUkVMX1NUWUxFOjczLFVQREFURV9MQVlPVVRfQ09ORklHOjc0LGF0dHJpYnV0ZTo3NSxTVFI6NzYsU1RSX0tFWTo3NyxTVFJfVkFMVUU6NzgsQVRUUklCVVRFOjc5LEFUVFJJQlVURV9FTVBUWTo4MCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNjoiZGlyZWN0aW9uX3RiIiw3OiJkaXJlY3Rpb25fYnQiLDg6ImRpcmVjdGlvbl9ybCIsOToiZGlyZWN0aW9uX2xyIiwxMToiQzRfQ09OVEVYVCIsMTI6Ik5FV0xJTkUiLDE0OiJFT0YiLDE1OiJDNF9DT05UQUlORVIiLDE2OiJDNF9DT01QT05FTlQiLDE3OiJDNF9EWU5BTUlDIiwxODoiQzRfREVQTE9ZTUVOVCIsMjI6InRpdGxlIiwyMzoiYWNjRGVzY3JpcHRpb24iLDI0OiJhY2NfdGl0bGUiLDI1OiJhY2NfdGl0bGVfdmFsdWUiLDI2OiJhY2NfZGVzY3IiLDI3OiJhY2NfZGVzY3JfdmFsdWUiLDI4OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzMzoiTEJSQUNFIiwzNDoiRU5URVJQUklTRV9CT1VOREFSWSIsMzY6IlNZU1RFTV9CT1VOREFSWSIsMzc6IkJPVU5EQVJZIiwzODoiQ09OVEFJTkVSX0JPVU5EQVJZIiwzOToiTk9ERSIsNDA6Ik5PREVfTCIsNDE6Ik5PREVfUiIsNDI6IlJCUkFDRSIsNDQ6IlBFUlNPTiIsNDU6IlBFUlNPTl9FWFQiLDQ2OiJTWVNURU0iLDQ3OiJTWVNURU1fREIiLDQ4OiJTWVNURU1fUVVFVUUiLDQ5OiJTWVNURU1fRVhUIiw1MDoiU1lTVEVNX0VYVF9EQiIsNTE6IlNZU1RFTV9FWFRfUVVFVUUiLDUyOiJDT05UQUlORVIiLDUzOiJDT05UQUlORVJfREIiLDU0OiJDT05UQUlORVJfUVVFVUUiLDU1OiJDT05UQUlORVJfRVhUIiw1NjoiQ09OVEFJTkVSX0VYVF9EQiIsNTc6IkNPTlRBSU5FUl9FWFRfUVVFVUUiLDU4OiJDT01QT05FTlQiLDU5OiJDT01QT05FTlRfREIiLDYwOiJDT01QT05FTlRfUVVFVUUiLDYxOiJDT01QT05FTlRfRVhUIiw2MjoiQ09NUE9ORU5UX0VYVF9EQiIsNjM6IkNPTVBPTkVOVF9FWFRfUVVFVUUiLDY0OiJSRUwiLDY1OiJCSVJFTCIsNjY6IlJFTF9VIiw2NzoiUkVMX0QiLDY4OiJSRUxfTCIsNjk6IlJFTF9SIiw3MDoiUkVMX0IiLDcxOiJSRUxfSU5ERVgiLDcyOiJVUERBVEVfRUxfU1RZTEUiLDczOiJVUERBVEVfUkVMX1NUWUxFIiw3NDoiVVBEQVRFX0xBWU9VVF9DT05GSUciLDc2OiJTVFIiLDc3OiJTVFJfS0VZIiw3ODoiU1RSX1ZBTFVFIiw3OToiQVRUUklCVVRFIiw4MDoiQVRUUklCVVRFX0VNUFRZIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDFdLFs1LDFdLFs1LDFdLFs1LDFdLFs1LDFdLFs0LDFdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEzLDFdLFsxMywxXSxbMTMsMl0sWzE5LDFdLFsxOSwyXSxbMTksM10sWzIxLDFdLFsyMSwxXSxbMjEsMl0sWzIxLDJdLFsyMSwxXSxbMjksM10sWzMwLDNdLFszMCwzXSxbMzAsNF0sWzMyLDJdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMSwxXSxbMjAsMV0sWzIwLDJdLFsyMCwzXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywxXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFszNSwxXSxbMzUsMl0sWzc1LDFdLFs3NSwyXSxbNzUsMV0sWzc1LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKEVyLFhuLGRpLEVlLEtuLEhlLFRpKXt2YXIgcG49SGUubGVuZ3RoLTE7c3dpdGNoKEtuKXtjYXNlIDM6RWUuc2V0RGlyZWN0aW9uKCJUQiIpO2JyZWFrO2Nhc2UgNDpFZS5zZXREaXJlY3Rpb24oIkJUIik7YnJlYWs7Y2FzZSA1OkVlLnNldERpcmVjdGlvbigiUkwiKTticmVhaztjYXNlIDY6RWUuc2V0RGlyZWN0aW9uKCJMUiIpO2JyZWFrO2Nhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTI6RWUuc2V0QzRUeXBlKEhlW3BuLTNdKTticmVhaztjYXNlIDE5OkVlLnNldFRpdGxlKEhlW3BuXS5zdWJzdHJpbmcoNikpLHRoaXMuJD1IZVtwbl0uc3Vic3RyaW5nKDYpO2JyZWFrO2Nhc2UgMjA6RWUuc2V0QWNjRGVzY3JpcHRpb24oSGVbcG5dLnN1YnN0cmluZygxNSkpLHRoaXMuJD1IZVtwbl0uc3Vic3RyaW5nKDE1KTticmVhaztjYXNlIDIxOnRoaXMuJD1IZVtwbl0udHJpbSgpLEVlLnNldFRpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOnRoaXMuJD1IZVtwbl0udHJpbSgpLEVlLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAyODpjYXNlIDI5OkhlW3BuXS5zcGxpY2UoMiwwLCJFTlRFUlBSSVNFIiksRWUuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi5IZVtwbl0pLHRoaXMuJD1IZVtwbl07YnJlYWs7Y2FzZSAzMDpFZS5hZGRQZXJzb25PclN5c3RlbUJvdW5kYXJ5KC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDMxOkhlW3BuXS5zcGxpY2UoMiwwLCJDT05UQUlORVIiKSxFZS5hZGRDb250YWluZXJCb3VuZGFyeSguLi5IZVtwbl0pLHRoaXMuJD1IZVtwbl07YnJlYWs7Y2FzZSAzMjpFZS5hZGREZXBsb3ltZW50Tm9kZSgibm9kZSIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgMzM6RWUuYWRkRGVwbG95bWVudE5vZGUoIm5vZGVMIiwuLi5IZVtwbl0pLHRoaXMuJD1IZVtwbl07YnJlYWs7Y2FzZSAzNDpFZS5hZGREZXBsb3ltZW50Tm9kZSgibm9kZVIiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDM1OkVlLnBvcEJvdW5kYXJ5UGFyc2VTdGFjaygpO2JyZWFrO2Nhc2UgMzk6RWUuYWRkUGVyc29uT3JTeXN0ZW0oInBlcnNvbiIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNDA6RWUuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3BlcnNvbiIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNDE6RWUuYWRkUGVyc29uT3JTeXN0ZW0oInN5c3RlbSIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNDI6RWUuYWRkUGVyc29uT3JTeXN0ZW0oInN5c3RlbV9kYiIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNDM6RWUuYWRkUGVyc29uT3JTeXN0ZW0oInN5c3RlbV9xdWV1ZSIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNDQ6RWUuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3N5c3RlbSIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNDU6RWUuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3N5c3RlbV9kYiIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNDY6RWUuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3N5c3RlbV9xdWV1ZSIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNDc6RWUuYWRkQ29udGFpbmVyKCJjb250YWluZXIiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDQ4OkVlLmFkZENvbnRhaW5lcigiY29udGFpbmVyX2RiIiwuLi5IZVtwbl0pLHRoaXMuJD1IZVtwbl07YnJlYWs7Y2FzZSA0OTpFZS5hZGRDb250YWluZXIoImNvbnRhaW5lcl9xdWV1ZSIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNTA6RWUuYWRkQ29udGFpbmVyKCJleHRlcm5hbF9jb250YWluZXIiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDUxOkVlLmFkZENvbnRhaW5lcigiZXh0ZXJuYWxfY29udGFpbmVyX2RiIiwuLi5IZVtwbl0pLHRoaXMuJD1IZVtwbl07YnJlYWs7Y2FzZSA1MjpFZS5hZGRDb250YWluZXIoImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZSIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNTM6RWUuYWRkQ29tcG9uZW50KCJjb21wb25lbnQiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDU0OkVlLmFkZENvbXBvbmVudCgiY29tcG9uZW50X2RiIiwuLi5IZVtwbl0pLHRoaXMuJD1IZVtwbl07YnJlYWs7Y2FzZSA1NTpFZS5hZGRDb21wb25lbnQoImNvbXBvbmVudF9xdWV1ZSIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNTY6RWUuYWRkQ29tcG9uZW50KCJleHRlcm5hbF9jb21wb25lbnQiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDU3OkVlLmFkZENvbXBvbmVudCgiZXh0ZXJuYWxfY29tcG9uZW50X2RiIiwuLi5IZVtwbl0pLHRoaXMuJD1IZVtwbl07YnJlYWs7Y2FzZSA1ODpFZS5hZGRDb21wb25lbnQoImV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZSIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNjA6RWUuYWRkUmVsKCJyZWwiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDYxOkVlLmFkZFJlbCgiYmlyZWwiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDYyOkVlLmFkZFJlbCgicmVsX3UiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDYzOkVlLmFkZFJlbCgicmVsX2QiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDY0OkVlLmFkZFJlbCgicmVsX2wiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDY1OkVlLmFkZFJlbCgicmVsX3IiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDY2OkVlLmFkZFJlbCgicmVsX2IiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDY3OkhlW3BuXS5zcGxpY2UoMCwxKSxFZS5hZGRSZWwoInJlbCIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNjg6RWUudXBkYXRlRWxTdHlsZSgidXBkYXRlX2VsX3N0eWxlIiwuLi5IZVtwbl0pLHRoaXMuJD1IZVtwbl07YnJlYWs7Y2FzZSA2OTpFZS51cGRhdGVSZWxTdHlsZSgidXBkYXRlX3JlbF9zdHlsZSIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNzA6RWUudXBkYXRlTGF5b3V0Q29uZmlnKCJ1cGRhdGVfbGF5b3V0X2NvbmZpZyIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNzE6dGhpcy4kPVtIZVtwbl1dO2JyZWFrO2Nhc2UgNzI6SGVbcG5dLnVuc2hpZnQoSGVbcG4tMV0pLHRoaXMuJD1IZVtwbl07YnJlYWs7Y2FzZSA3MzpjYXNlIDc1OnRoaXMuJD1IZVtwbl0udHJpbSgpO2JyZWFrO2Nhc2UgNzQ6bGV0IEVzPXt9O0VzW0hlW3BuLTFdLnRyaW0oKV09SGVbcG5dLnRyaW0oKSx0aGlzLiQ9RXM7YnJlYWs7Y2FzZSA3Njp0aGlzLiQ9IiI7YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTozLDY6WzEsNV0sNzpbMSw2XSw4OlsxLDddLDk6WzEsOF0sMTA6NCwxMTpbMSw5XSwxNTpbMSwxMF0sMTY6WzEsMTFdLDE3OlsxLDEyXSwxODpbMSwxM119LHsxOlszXX0sezE6WzIsMV19LHsxOlsyLDJdfSx7MTpbMiw3XX0sezE6WzIsM119LHsxOlsyLDRdfSx7MTpbMiw1XX0sezE6WzIsNl19LHsxMjpbMSwxNF19LHsxMjpbMSwxNV19LHsxMjpbMSwxNl19LHsxMjpbMSwxN119LHsxMjpbMSwxOF19LHsxMzoxOSwxOToyMCwyMDoyMSwyMToyMiwyMjphLDIzOmYsMjQ6cCwyNjp3LDI4Om0sMjk6NDksMzA6NjEsMzI6NjIsMzQ6YiwzNjpFLDM3Ol8sMzg6QSwzOTpJLDQwOkIsNDE6Tiw0MzoyMyw0NDpSLDQ1OnosNDY6Vyw0NzpldCw0ODpzdCw0OTphdCw1MDpidCw1MTptdCw1Mjp5dCw1MzpmdCw1NDp1dCw1NTp2dCw1NjpYLDU3OnB0LDU4OlUsNTk6VHQsNjA6bnQsNjE6SXQsNjI6T3QsNjM6QnQsNjQ6RXQsNjU6Wiw2NjpDdCw2Nzp4dCw2ODpIdCw2OTpMZSw3MDpGdCw3MTpnbiw3MjpTZSw3MzptZSw3NDpWZX0sezEzOjcwLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmEsMjM6ZiwyNDpwLDI2OncsMjg6bSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpiLDM2OkUsMzc6XywzODpBLDM5OkksNDA6Qiw0MTpOLDQzOjIzLDQ0OlIsNDU6eiw0NjpXLDQ3OmV0LDQ4OnN0LDQ5OmF0LDUwOmJ0LDUxOm10LDUyOnl0LDUzOmZ0LDU0OnV0LDU1OnZ0LDU2OlgsNTc6cHQsNTg6VSw1OTpUdCw2MDpudCw2MTpJdCw2MjpPdCw2MzpCdCw2NDpFdCw2NTpaLDY2OkN0LDY3Onh0LDY4Okh0LDY5OkxlLDcwOkZ0LDcxOmduLDcyOlNlLDczOm1lLDc0OlZlfSx7MTM6NzEsMTk6MjAsMjA6MjEsMjE6MjIsMjI6YSwyMzpmLDI0OnAsMjY6dywyODptLDI5OjQ5LDMwOjYxLDMyOjYyLDM0OmIsMzY6RSwzNzpfLDM4OkEsMzk6SSw0MDpCLDQxOk4sNDM6MjMsNDQ6Uiw0NTp6LDQ2OlcsNDc6ZXQsNDg6c3QsNDk6YXQsNTA6YnQsNTE6bXQsNTI6eXQsNTM6ZnQsNTQ6dXQsNTU6dnQsNTY6WCw1NzpwdCw1ODpVLDU5OlR0LDYwOm50LDYxOkl0LDYyOk90LDYzOkJ0LDY0OkV0LDY1OlosNjY6Q3QsNjc6eHQsNjg6SHQsNjk6TGUsNzA6RnQsNzE6Z24sNzI6U2UsNzM6bWUsNzQ6VmV9LHsxMzo3MiwxOToyMCwyMDoyMSwyMToyMiwyMjphLDIzOmYsMjQ6cCwyNjp3LDI4Om0sMjk6NDksMzA6NjEsMzI6NjIsMzQ6YiwzNjpFLDM3Ol8sMzg6QSwzOTpJLDQwOkIsNDE6Tiw0MzoyMyw0NDpSLDQ1OnosNDY6Vyw0NzpldCw0ODpzdCw0OTphdCw1MDpidCw1MTptdCw1Mjp5dCw1MzpmdCw1NDp1dCw1NTp2dCw1NjpYLDU3OnB0LDU4OlUsNTk6VHQsNjA6bnQsNjE6SXQsNjI6T3QsNjM6QnQsNjQ6RXQsNjU6Wiw2NjpDdCw2Nzp4dCw2ODpIdCw2OTpMZSw3MDpGdCw3MTpnbiw3MjpTZSw3MzptZSw3NDpWZX0sezEzOjczLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmEsMjM6ZiwyNDpwLDI2OncsMjg6bSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpiLDM2OkUsMzc6XywzODpBLDM5OkksNDA6Qiw0MTpOLDQzOjIzLDQ0OlIsNDU6eiw0NjpXLDQ3OmV0LDQ4OnN0LDQ5OmF0LDUwOmJ0LDUxOm10LDUyOnl0LDUzOmZ0LDU0OnV0LDU1OnZ0LDU2OlgsNTc6cHQsNTg6VSw1OTpUdCw2MDpudCw2MTpJdCw2MjpPdCw2MzpCdCw2NDpFdCw2NTpaLDY2OkN0LDY3Onh0LDY4Okh0LDY5OkxlLDcwOkZ0LDcxOmduLDcyOlNlLDczOm1lLDc0OlZlfSx7MTQ6WzEsNzRdfSxpKFllLFsyLDEzXSx7NDM6MjMsMjk6NDksMzA6NjEsMzI6NjIsMjA6NzUsMzQ6YiwzNjpFLDM3Ol8sMzg6QSwzOTpJLDQwOkIsNDE6Tiw0NDpSLDQ1OnosNDY6Vyw0NzpldCw0ODpzdCw0OTphdCw1MDpidCw1MTptdCw1Mjp5dCw1MzpmdCw1NDp1dCw1NTp2dCw1NjpYLDU3OnB0LDU4OlUsNTk6VHQsNjA6bnQsNjE6SXQsNjI6T3QsNjM6QnQsNjQ6RXQsNjU6Wiw2NjpDdCw2Nzp4dCw2ODpIdCw2OTpMZSw3MDpGdCw3MTpnbiw3MjpTZSw3MzptZSw3NDpWZX0pLGkoWWUsWzIsMTRdKSxpKGNlLFsyLDE2XSx7MTI6WzEsNzZdfSksaShZZSxbMiwzNl0sezEyOlsxLDc3XX0pLGkoa2UsWzIsMTldKSxpKGtlLFsyLDIwXSksezI1OlsxLDc4XX0sezI3OlsxLDc5XX0saShrZSxbMiwyM10pLHszNTo4MCw3NTo4MSw3Njp6dCw3NzpyZSw3OTpzZSw4MDpQZX0sezM1Ojg2LDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6ODcsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNTo4OCw3NTo4MSw3Njp6dCw3NzpyZSw3OTpzZSw4MDpQZX0sezM1Ojg5LDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6OTAsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNTo5MSw3NTo4MSw3Njp6dCw3NzpyZSw3OTpzZSw4MDpQZX0sezM1OjkyLDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6OTMsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNTo5NCw3NTo4MSw3Njp6dCw3NzpyZSw3OTpzZSw4MDpQZX0sezM1Ojk1LDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6OTYsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNTo5Nyw3NTo4MSw3Njp6dCw3NzpyZSw3OTpzZSw4MDpQZX0sezM1Ojk4LDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6OTksNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNToxMDAsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNToxMDEsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNToxMDIsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNToxMDMsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNToxMDQsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LGkodGUsWzIsNTldKSx7MzU6MTA1LDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6MTA2LDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6MTA3LDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6MTA4LDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6MTA5LDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6MTEwLDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6MTExLDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6MTEyLDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6MTEzLDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6MTE0LDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6MTE1LDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MjA6MTE2LDI5OjQ5LDMwOjYxLDMyOjYyLDM0OmIsMzY6RSwzNzpfLDM4OkEsMzk6SSw0MDpCLDQxOk4sNDM6MjMsNDQ6Uiw0NTp6LDQ2OlcsNDc6ZXQsNDg6c3QsNDk6YXQsNTA6YnQsNTE6bXQsNTI6eXQsNTM6ZnQsNTQ6dXQsNTU6dnQsNTY6WCw1NzpwdCw1ODpVLDU5OlR0LDYwOm50LDYxOkl0LDYyOk90LDYzOkJ0LDY0OkV0LDY1OlosNjY6Q3QsNjc6eHQsNjg6SHQsNjk6TGUsNzA6RnQsNzE6Z24sNzI6U2UsNzM6bWUsNzQ6VmV9LHsxMjpbMSwxMThdLDMzOlsxLDExN119LHszNToxMTksNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNToxMjAsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNToxMjEsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNToxMjIsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNToxMjMsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNToxMjQsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNToxMjUsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHsxNDpbMSwxMjZdfSx7MTQ6WzEsMTI3XX0sezE0OlsxLDEyOF19LHsxNDpbMSwxMjldfSx7MTpbMiw4XX0saShZZSxbMiwxNV0pLGkoY2UsWzIsMTddLHsyMToyMiwxOToxMzAsMjI6YSwyMzpmLDI0OnAsMjY6dywyODptfSksaShZZSxbMiwzN10sezE5OjIwLDIwOjIxLDIxOjIyLDQzOjIzLDI5OjQ5LDMwOjYxLDMyOjYyLDEzOjEzMSwyMjphLDIzOmYsMjQ6cCwyNjp3LDI4Om0sMzQ6YiwzNjpFLDM3Ol8sMzg6QSwzOTpJLDQwOkIsNDE6Tiw0NDpSLDQ1OnosNDY6Vyw0NzpldCw0ODpzdCw0OTphdCw1MDpidCw1MTptdCw1Mjp5dCw1MzpmdCw1NDp1dCw1NTp2dCw1NjpYLDU3OnB0LDU4OlUsNTk6VHQsNjA6bnQsNjE6SXQsNjI6T3QsNjM6QnQsNjQ6RXQsNjU6Wiw2NjpDdCw2Nzp4dCw2ODpIdCw2OTpMZSw3MDpGdCw3MTpnbiw3MjpTZSw3MzptZSw3NDpWZX0pLGkoa2UsWzIsMjFdKSxpKGtlLFsyLDIyXSksaSh0ZSxbMiwzOV0pLGkoTWUsWzIsNzFdLHs3NTo4MSwzNToxMzIsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9KSxpKGRlLFsyLDczXSksezc4OlsxLDEzM119LGkoZGUsWzIsNzVdKSxpKGRlLFsyLDc2XSksaSh0ZSxbMiw0MF0pLGkodGUsWzIsNDFdKSxpKHRlLFsyLDQyXSksaSh0ZSxbMiw0M10pLGkodGUsWzIsNDRdKSxpKHRlLFsyLDQ1XSksaSh0ZSxbMiw0Nl0pLGkodGUsWzIsNDddKSxpKHRlLFsyLDQ4XSksaSh0ZSxbMiw0OV0pLGkodGUsWzIsNTBdKSxpKHRlLFsyLDUxXSksaSh0ZSxbMiw1Ml0pLGkodGUsWzIsNTNdKSxpKHRlLFsyLDU0XSksaSh0ZSxbMiw1NV0pLGkodGUsWzIsNTZdKSxpKHRlLFsyLDU3XSksaSh0ZSxbMiw1OF0pLGkodGUsWzIsNjBdKSxpKHRlLFsyLDYxXSksaSh0ZSxbMiw2Ml0pLGkodGUsWzIsNjNdKSxpKHRlLFsyLDY0XSksaSh0ZSxbMiw2NV0pLGkodGUsWzIsNjZdKSxpKHRlLFsyLDY3XSksaSh0ZSxbMiw2OF0pLGkodGUsWzIsNjldKSxpKHRlLFsyLDcwXSksezMxOjEzNCw0MjpbMSwxMzVdfSx7MTI6WzEsMTM2XX0sezMzOlsxLDEzN119LGkob24sWzIsMjhdKSxpKG9uLFsyLDI5XSksaShvbixbMiwzMF0pLGkob24sWzIsMzFdKSxpKG9uLFsyLDMyXSksaShvbixbMiwzM10pLGkob24sWzIsMzRdKSx7MTpbMiw5XX0sezE6WzIsMTBdfSx7MTpbMiwxMV19LHsxOlsyLDEyXX0saShjZSxbMiwxOF0pLGkoWWUsWzIsMzhdKSxpKE1lLFsyLDcyXSksaShkZSxbMiw3NF0pLGkodGUsWzIsMjRdKSxpKHRlLFsyLDM1XSksaShuaSxbMiwyNV0pLGkobmksWzIsMjZdLHsxMjpbMSwxMzhdfSksaShuaSxbMiwyN10pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSwzOlsyLDJdLDQ6WzIsN10sNTpbMiwzXSw2OlsyLDRdLDc6WzIsNV0sODpbMiw2XSw3NDpbMiw4XSwxMjY6WzIsOV0sMTI3OlsyLDEwXSwxMjg6WzIsMTFdLDEyOTpbMiwxMl19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oRXIsWG4pe2lmKFhuLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoRXIpO2Vsc2V7dmFyIGRpPW5ldyBFcnJvcihFcik7dGhyb3cgZGkuaGFzaD1YbixkaX19LHBhcnNlOmZ1bmN0aW9uKEVyKXt2YXIgWG49dGhpcyxkaT1bMF0sRWU9W10sS249W251bGxdLEhlPVtdLFRpPXRoaXMudGFibGUscG49IiIsRXM9MCxxYT0wLE1hPTIsR3M9MSxQbz1IZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSx2cz1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHJ1PXt5eTp7fX07Zm9yKHZhciB6cyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHpzKSYmKHJ1Lnl5W3pzXT10aGlzLnl5W3pzXSk7dnMuc2V0SW5wdXQoRXIscnUueXkpLHJ1Lnl5LmxleGVyPXZzLHJ1Lnl5LnBhcnNlcj10aGlzLHR5cGVvZiB2cy55eWxsb2M+InUiJiYodnMueXlsbG9jPXt9KTt2YXIgRHU9dnMueXlsbG9jO0hlLnB1c2goRHUpO3ZhciBwbT12cy5vcHRpb25zJiZ2cy5vcHRpb25zLnJhbmdlczt0eXBlb2YgcnUueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9cnUueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gdXcoKXt2YXIgRGw7cmV0dXJuIERsPUVlLnBvcCgpfHx2cy5sZXgoKXx8R3MsdHlwZW9mIERsIT0ibnVtYmVyIiYmKERsIGluc3RhbmNlb2YgQXJyYXkmJihFZT1EbCxEbD1FZS5wb3AoKSksRGw9WG4uc3ltYm9sc19bRGxdfHxEbCksRGx9Zm9yKHZhciBXdSx0aCxGYSxNbCxoYT17fSxiYyxDYyxwYSxEYTs7KXtpZih0aD1kaVtkaS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t0aF0/RmE9dGhpcy5kZWZhdWx0QWN0aW9uc1t0aF06KChXdT09PW51bGx8fHR5cGVvZiBXdT4idSIpJiYoV3U9dXcoKSksRmE9VGlbdGhdJiZUaVt0aF1bV3VdKSx0eXBlb2YgRmE+InUifHwhRmEubGVuZ3RofHwhRmFbMF0pe3ZhciBIYT0iIjtEYT1bXTtmb3IoYmMgaW4gVGlbdGhdKXRoaXMudGVybWluYWxzX1tiY10mJmJjPk1hJiZEYS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bYmNdKyInIik7dnMuc2hvd1Bvc2l0aW9uP0hhPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEVzKzEpK2A6CmArdnMuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtEYS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1d1XXx8V3UpKyInIjpIYT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhFcysxKSsiOiBVbmV4cGVjdGVkICIrKFd1PT1Hcz8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tXdV18fFd1KSsiJyIpLHRoaXMucGFyc2VFcnJvcihIYSx7dGV4dDp2cy5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bV3VdfHxXdSxsaW5lOnZzLnl5bGluZW5vLGxvYzpEdSxleHBlY3RlZDpEYX0pfWlmKEZhWzBdaW5zdGFuY2VvZiBBcnJheSYmRmEubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit0aCsiLCB0b2tlbjogIitXdSk7c3dpdGNoKEZhWzBdKXtjYXNlIDE6ZGkucHVzaChXdSksS24ucHVzaCh2cy55eXRleHQpLEhlLnB1c2godnMueXlsbG9jKSxkaS5wdXNoKEZhWzFdKSxXdT1udWxsLHFhPXZzLnl5bGVuZyxwbj12cy55eXRleHQsRXM9dnMueXlsaW5lbm8sRHU9dnMueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihDYz10aGlzLnByb2R1Y3Rpb25zX1tGYVsxXV1bMV0saGEuJD1LbltLbi5sZW5ndGgtQ2NdLGhhLl8kPXtmaXJzdF9saW5lOkhlW0hlLmxlbmd0aC0oQ2N8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpIZVtIZS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpIZVtIZS5sZW5ndGgtKENjfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkhlW0hlLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0scG0mJihoYS5fJC5yYW5nZT1bSGVbSGUubGVuZ3RoLShDY3x8MSldLnJhbmdlWzBdLEhlW0hlLmxlbmd0aC0xXS5yYW5nZVsxXV0pLE1sPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShoYSxbcG4scWEsRXMscnUueXksRmFbMV0sS24sSGVdLmNvbmNhdChQbykpLHR5cGVvZiBNbDwidSIpcmV0dXJuIE1sO0NjJiYoZGk9ZGkuc2xpY2UoMCwtMSpDYyoyKSxLbj1Lbi5zbGljZSgwLC0xKkNjKSxIZT1IZS5zbGljZSgwLC0xKkNjKSksZGkucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tGYVsxXV1bMF0pLEtuLnB1c2goaGEuJCksSGUucHVzaChoYS5fJCkscGE9VGlbZGlbZGkubGVuZ3RoLTJdXVtkaVtkaS5sZW5ndGgtMV1dLGRpLnB1c2gocGEpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSx3cz1mdW5jdGlvbigpe3ZhciBYaT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihYbixkaSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihYbixkaSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoWG4pfSxzZXRJbnB1dDpmdW5jdGlvbihFcixYbil7cmV0dXJuIHRoaXMueXk9WG58fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PUVyLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBFcj10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9RXIsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPUVyLHRoaXMubWF0Y2hlZCs9RXI7dmFyIFhuPUVyLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gWG4/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLEVyfSx1bnB1dDpmdW5jdGlvbihFcil7dmFyIFhuPUVyLmxlbmd0aCxkaT1Fci5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PUVyK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1YbiksdGhpcy5vZmZzZXQtPVhuO3ZhciBFZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxkaS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWRpLmxlbmd0aC0xKTt2YXIgS249dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmRpPyhkaS5sZW5ndGg9PT1FZS5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0VlW0VlLmxlbmd0aC1kaS5sZW5ndGhdLmxlbmd0aC1kaVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLVhufSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W0tuWzBdLEtuWzBdK3RoaXMueXlsZW5nLVhuXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oRXIpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShFcikpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgRXI9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihFci5sZW5ndGg+MjA/Ii4uLiI6IiIpK0VyLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIEVyPXRoaXMubWF0Y2g7cmV0dXJuIEVyLmxlbmd0aDwyMCYmKEVyKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1Fci5sZW5ndGgpKSwoRXIuc3Vic3RyKDAsMjApKyhFci5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIEVyPXRoaXMucGFzdElucHV0KCksWG49bmV3IEFycmF5KEVyLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIEVyK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtYbisiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oRXIsWG4pe3ZhciBkaSxFZSxLbjtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoS249e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoS24ueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksRWU9RXJbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLEVlJiYodGhpcy55eWxpbmVubys9RWUubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46RWU/RWVbRWUubGVuZ3RoLTFdLmxlbmd0aC1FZVtFZS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitFclswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1FclswXSx0aGlzLm1hdGNoKz1FclswXSx0aGlzLm1hdGNoZXM9RXIsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoRXJbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPUVyWzBdLGRpPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLFhuLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGRpKXJldHVybiBkaTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgSGUgaW4gS24pdGhpc1tIZV09S25bSGVdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIEVyLFhuLGRpLEVlO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIEtuPXRoaXMuX2N1cnJlbnRSdWxlcygpLEhlPTA7SGU8S24ubGVuZ3RoO0hlKyspaWYoZGk9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tLbltIZV1dKSxkaSYmKCFYbnx8ZGlbMF0ubGVuZ3RoPlhuWzBdLmxlbmd0aCkpe2lmKFhuPWRpLEVlPUhlLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKEVyPXRoaXMudGVzdF9tYXRjaChkaSxLbltIZV0pLEVyIT09ITEpcmV0dXJuIEVyO2lmKHRoaXMuX2JhY2t0cmFjayl7WG49ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gWG4/KEVyPXRoaXMudGVzdF9tYXRjaChYbixLbltFZV0pLEVyIT09ITE/RXI6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBYbj10aGlzLm5leHQoKTtyZXR1cm4gWG58fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKFhuKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goWG4pfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBYbj10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBYbj4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKFhuKXtyZXR1cm4gWG49dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhYbnx8MCksWG4+PTA/dGhpcy5jb25kaXRpb25TdGFja1tYbl06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oWG4pe3RoaXMuYmVnaW4oWG4pfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKFhuLGRpLEVlLEtuKXtzd2l0Y2goRWUpe2Nhc2UgMDpyZXR1cm4gNjtjYXNlIDE6cmV0dXJuIDc7Y2FzZSAyOnJldHVybiA4O2Nhc2UgMzpyZXR1cm4gOTtjYXNlIDQ6cmV0dXJuIDIyO2Nhc2UgNTpyZXR1cm4gMjM7Y2FzZSA2OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwyNDtjYXNlIDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDI2O2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgMTA6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTM6YnJlYWs7Y2FzZSAxNDpjO2JyZWFrO2Nhc2UgMTU6cmV0dXJuIDEyO2Nhc2UgMTY6YnJlYWs7Y2FzZSAxNzpyZXR1cm4gMTE7Y2FzZSAxODpyZXR1cm4gMTU7Y2FzZSAxOTpyZXR1cm4gMTY7Y2FzZSAyMDpyZXR1cm4gMTc7Y2FzZSAyMTpyZXR1cm4gMTg7Y2FzZSAyMjpyZXR1cm4gdGhpcy5iZWdpbigicGVyc29uX2V4dCIpLDQ1O2Nhc2UgMjM6cmV0dXJuIHRoaXMuYmVnaW4oInBlcnNvbiIpLDQ0O2Nhc2UgMjQ6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9leHRfcXVldWUiKSw1MTtjYXNlIDI1OnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fZXh0X2RiIiksNTA7Y2FzZSAyNjpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX2V4dCIpLDQ5O2Nhc2UgMjc6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9xdWV1ZSIpLDQ4O2Nhc2UgMjg6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9kYiIpLDQ3O2Nhc2UgMjk6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbSIpLDQ2O2Nhc2UgMzA6cmV0dXJuIHRoaXMuYmVnaW4oImJvdW5kYXJ5IiksMzc7Y2FzZSAzMTpyZXR1cm4gdGhpcy5iZWdpbigiZW50ZXJwcmlzZV9ib3VuZGFyeSIpLDM0O2Nhc2UgMzI6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9ib3VuZGFyeSIpLDM2O2Nhc2UgMzM6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9leHRfcXVldWUiKSw1NztjYXNlIDM0OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfZXh0X2RiIiksNTY7Y2FzZSAzNTpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX2V4dCIpLDU1O2Nhc2UgMzY6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9xdWV1ZSIpLDU0O2Nhc2UgMzc6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9kYiIpLDUzO2Nhc2UgMzg6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lciIpLDUyO2Nhc2UgMzk6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9ib3VuZGFyeSIpLDM4O2Nhc2UgNDA6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9leHRfcXVldWUiKSw2MztjYXNlIDQxOnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnRfZXh0X2RiIiksNjI7Y2FzZSA0MjpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X2V4dCIpLDYxO2Nhc2UgNDM6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9xdWV1ZSIpLDYwO2Nhc2UgNDQ6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9kYiIpLDU5O2Nhc2UgNDU6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudCIpLDU4O2Nhc2UgNDY6cmV0dXJuIHRoaXMuYmVnaW4oIm5vZGUiKSwzOTtjYXNlIDQ3OnJldHVybiB0aGlzLmJlZ2luKCJub2RlIiksMzk7Y2FzZSA0ODpyZXR1cm4gdGhpcy5iZWdpbigibm9kZV9sIiksNDA7Y2FzZSA0OTpyZXR1cm4gdGhpcy5iZWdpbigibm9kZV9yIiksNDE7Y2FzZSA1MDpyZXR1cm4gdGhpcy5iZWdpbigicmVsIiksNjQ7Y2FzZSA1MTpyZXR1cm4gdGhpcy5iZWdpbigiYmlyZWwiKSw2NTtjYXNlIDUyOnJldHVybiB0aGlzLmJlZ2luKCJyZWxfdSIpLDY2O2Nhc2UgNTM6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF91IiksNjY7Y2FzZSA1NDpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2QiKSw2NztjYXNlIDU1OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfZCIpLDY3O2Nhc2UgNTY6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9sIiksNjg7Y2FzZSA1NzpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2wiKSw2ODtjYXNlIDU4OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfciIpLDY5O2Nhc2UgNTk6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9yIiksNjk7Y2FzZSA2MDpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2IiKSw3MDtjYXNlIDYxOnJldHVybiB0aGlzLmJlZ2luKCJyZWxfaW5kZXgiKSw3MTtjYXNlIDYyOnJldHVybiB0aGlzLmJlZ2luKCJ1cGRhdGVfZWxfc3R5bGUiKSw3MjtjYXNlIDYzOnJldHVybiB0aGlzLmJlZ2luKCJ1cGRhdGVfcmVsX3N0eWxlIiksNzM7Y2FzZSA2NDpyZXR1cm4gdGhpcy5iZWdpbigidXBkYXRlX2xheW91dF9jb25maWciKSw3NDtjYXNlIDY1OnJldHVybiJFT0ZfSU5fU1RSVUNUIjtjYXNlIDY2OnJldHVybiB0aGlzLmJlZ2luKCJhdHRyaWJ1dGUiKSwiQVRUUklCVVRFX0VNUFRZIjtjYXNlIDY3OnRoaXMuYmVnaW4oImF0dHJpYnV0ZSIpO2JyZWFrO2Nhc2UgNjg6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDY5OnJldHVybiA4MDtjYXNlIDcwOmJyZWFrO2Nhc2UgNzE6cmV0dXJuIDgwO2Nhc2UgNzI6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSA3Mzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA3NDpyZXR1cm4iU1RSIjtjYXNlIDc1OnRoaXMuYmVnaW4oInN0cmluZ19rdiIpO2JyZWFrO2Nhc2UgNzY6cmV0dXJuIHRoaXMuYmVnaW4oInN0cmluZ19rdl9rZXkiKSwiU1RSX0tFWSI7Y2FzZSA3Nzp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigic3RyaW5nX2t2X3ZhbHVlIik7YnJlYWs7Y2FzZSA3ODpyZXR1cm4iU1RSX1ZBTFVFIjtjYXNlIDc5OnRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA4MDpyZXR1cm4iU1RSIjtjYXNlIDgxOnJldHVybiJMQlJBQ0UiO2Nhc2UgODI6cmV0dXJuIlJCUkFDRSI7Y2FzZSA4MzpyZXR1cm4iU1BBQ0UiO2Nhc2UgODQ6cmV0dXJuIkVPTCI7Y2FzZSA4NTpyZXR1cm4gMTR9fSxydWxlczpbL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS8sL14oPzp0aXRsZVxzW14jXG47XSspLywvXig/OmFjY0Rlc2NyaXB0aW9uXHNbXiNcbjtdKykvLC9eKD86YWNjVGl0bGVccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKlx7XHMqKS8sL14oPzpbXH1dKS8sL14oPzpbXlx9XSopLywvXig/OiUlKD8hXHspKlteXG5dKihccj9cbj8pKykvLC9eKD86JSVbXlxuXSooXHI/XG4pKikvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86QzRDb250ZXh0XGIpLywvXig/OkM0Q29udGFpbmVyXGIpLywvXig/OkM0Q29tcG9uZW50XGIpLywvXig/OkM0RHluYW1pY1xiKS8sL14oPzpDNERlcGxveW1lbnRcYikvLC9eKD86UGVyc29uX0V4dFxiKS8sL14oPzpQZXJzb25cYikvLC9eKD86U3lzdGVtUXVldWVfRXh0XGIpLywvXig/OlN5c3RlbURiX0V4dFxiKS8sL14oPzpTeXN0ZW1fRXh0XGIpLywvXig/OlN5c3RlbVF1ZXVlXGIpLywvXig/OlN5c3RlbURiXGIpLywvXig/OlN5c3RlbVxiKS8sL14oPzpCb3VuZGFyeVxiKS8sL14oPzpFbnRlcnByaXNlX0JvdW5kYXJ5XGIpLywvXig/OlN5c3RlbV9Cb3VuZGFyeVxiKS8sL14oPzpDb250YWluZXJRdWV1ZV9FeHRcYikvLC9eKD86Q29udGFpbmVyRGJfRXh0XGIpLywvXig/OkNvbnRhaW5lcl9FeHRcYikvLC9eKD86Q29udGFpbmVyUXVldWVcYikvLC9eKD86Q29udGFpbmVyRGJcYikvLC9eKD86Q29udGFpbmVyXGIpLywvXig/OkNvbnRhaW5lcl9Cb3VuZGFyeVxiKS8sL14oPzpDb21wb25lbnRRdWV1ZV9FeHRcYikvLC9eKD86Q29tcG9uZW50RGJfRXh0XGIpLywvXig/OkNvbXBvbmVudF9FeHRcYikvLC9eKD86Q29tcG9uZW50UXVldWVcYikvLC9eKD86Q29tcG9uZW50RGJcYikvLC9eKD86Q29tcG9uZW50XGIpLywvXig/OkRlcGxveW1lbnRfTm9kZVxiKS8sL14oPzpOb2RlXGIpLywvXig/Ok5vZGVfTFxiKS8sL14oPzpOb2RlX1JcYikvLC9eKD86UmVsXGIpLywvXig/OkJpUmVsXGIpLywvXig/OlJlbF9VcFxiKS8sL14oPzpSZWxfVVxiKS8sL14oPzpSZWxfRG93blxiKS8sL14oPzpSZWxfRFxiKS8sL14oPzpSZWxfTGVmdFxiKS8sL14oPzpSZWxfTFxiKS8sL14oPzpSZWxfUmlnaHRcYikvLC9eKD86UmVsX1JcYikvLC9eKD86UmVsX0JhY2tcYikvLC9eKD86UmVsSW5kZXhcYikvLC9eKD86VXBkYXRlRWxlbWVudFN0eWxlXGIpLywvXig/OlVwZGF0ZVJlbFN0eWxlXGIpLywvXig/OlVwZGF0ZUxheW91dENvbmZpZ1xiKS8sL14oPzokKS8sL14oPzpbKF1bIF0qWyxdKS8sL14oPzpbKF0pLywvXig/OlspXSkvLC9eKD86LCwpLywvXig/OiwpLywvXig/OlsgXSpbIl1bIl0pLywvXig/OlsgXSpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OlsgXSpbXCRdKS8sL14oPzpbXj1dKikvLC9eKD86Wz1dWyBdKlsiXSkvLC9eKD86W14iXSspLywvXig/OlsiXSkvLC9eKD86W14sXSspLywvXig/Olx7KS8sL14oPzpcfSkvLC9eKD86W1xzXSspLywvXig/OltcblxyXSspLywvXig/OiQpL10sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzExLDEyXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzldLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbN10saW5jbHVzaXZlOiExfSxzdHJpbmdfa3ZfdmFsdWU6e3J1bGVzOls3OCw3OV0saW5jbHVzaXZlOiExfSxzdHJpbmdfa3Zfa2V5OntydWxlczpbNzddLGluY2x1c2l2ZTohMX0sc3RyaW5nX2t2OntydWxlczpbNzZdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbNzMsNzRdLGluY2x1c2l2ZTohMX0sYXR0cmlidXRlOntydWxlczpbNjgsNjksNzAsNzEsNzIsNzUsODBdLGluY2x1c2l2ZTohMX0sdXBkYXRlX2xheW91dF9jb25maWc6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSx1cGRhdGVfcmVsX3N0eWxlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sdXBkYXRlX2VsX3N0eWxlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX2I6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfcjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9sOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX2Q6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfdTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9iaTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxyZWw6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlX3I6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlX2w6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0saW5kZXg6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0scmVsX2luZGV4OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2V4dF9xdWV1ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxjb21wb25lbnRfZXh0X2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9ib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9leHRfcXVldWU6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfZXh0X2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29udGFpbmVyX2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGJpcmVsOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2JvdW5kYXJ5OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sZW50ZXJwcmlzZV9ib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGJvdW5kYXJ5OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2V4dF9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9leHRfZGI6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxzeXN0ZW1fZXh0OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX3F1ZXVlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scGVyc29uX2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHBlcnNvbjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDgsMTAsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsODEsODIsODMsODQsODVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gWGl9KCk7S3MubGV4ZXI9d3M7ZnVuY3Rpb24gZm8oKXt0aGlzLnl5PXt9fXJldHVybiBmby5wcm90b3R5cGU9S3MsS3MuUGFyc2VyPWZvLG5ldyBmb30oKTtYVy5wYXJzZXI9WFc7Y29uc3QgZ0RlPVhXO2xldCBhbT1bXSxmaz1bIiJdLHdnPSJnbG9iYWwiLG9tPSIiLHAzPVt7YWxpYXM6Imdsb2JhbCIsbGFiZWw6e3RleHQ6Imdsb2JhbCJ9LHR5cGU6e3RleHQ6Imdsb2JhbCJ9LHRhZ3M6bnVsbCxsaW5rOm51bGwscGFyZW50Qm91bmRhcnk6IiJ9XSxsRj1bXSxGZHQ9IiIsTmR0PSExLFFXPTQsWlc9Mjt2YXIgd1B0O2NvbnN0IHBEZT1mdW5jdGlvbigpe3JldHVybiB3UHR9LGJEZT1mdW5jdGlvbihpKXt3UHQ9UTEoaSxPZSgpKX0sd0RlPWZ1bmN0aW9uKGksYSxmLHAsdyxtLGIsRSxfKXtpZihpPT1udWxsfHxhPT09dm9pZCAwfHxhPT09bnVsbHx8Zj09PXZvaWQgMHx8Zj09PW51bGx8fHA9PT12b2lkIDB8fHA9PT1udWxsKXJldHVybjtsZXQgQT17fTtjb25zdCBJPWxGLmZpbmQoQj0+Qi5mcm9tPT09YSYmQi50bz09PWYpO2lmKEk/QT1JOmxGLnB1c2goQSksQS50eXBlPWksQS5mcm9tPWEsQS50bz1mLEEubGFiZWw9e3RleHQ6cH0sdz09bnVsbClBLnRlY2huPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiB3PT0ib2JqZWN0Iil7bGV0W0IsTl09T2JqZWN0LmVudHJpZXModylbMF07QVtCXT17dGV4dDpOfX1lbHNlIEEudGVjaG49e3RleHQ6d307aWYobT09bnVsbClBLmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBtPT0ib2JqZWN0Iil7bGV0W0IsTl09T2JqZWN0LmVudHJpZXMobSlbMF07QVtCXT17dGV4dDpOfX1lbHNlIEEuZGVzY3I9e3RleHQ6bX07aWYodHlwZW9mIGI9PSJvYmplY3QiKXtsZXRbQixOXT1PYmplY3QuZW50cmllcyhiKVswXTtBW0JdPU59ZWxzZSBBLnNwcml0ZT1iO2lmKHR5cGVvZiBFPT0ib2JqZWN0Iil7bGV0W0IsTl09T2JqZWN0LmVudHJpZXMoRSlbMF07QVtCXT1OfWVsc2UgQS50YWdzPUU7aWYodHlwZW9mIF89PSJvYmplY3QiKXtsZXRbQixOXT1PYmplY3QuZW50cmllcyhfKVswXTtBW0JdPU59ZWxzZSBBLmxpbms9XztBLndyYXA9ZGsoKX0sdkRlPWZ1bmN0aW9uKGksYSxmLHAsdyxtLGIpe2lmKGE9PT1udWxsfHxmPT09bnVsbClyZXR1cm47bGV0IEU9e307Y29uc3QgXz1hbS5maW5kKEE9PkEuYWxpYXM9PT1hKTtpZihfJiZhPT09Xy5hbGlhcz9FPV86KEUuYWxpYXM9YSxhbS5wdXNoKEUpKSxmPT1udWxsP0UubGFiZWw9e3RleHQ6IiJ9OkUubGFiZWw9e3RleHQ6Zn0scD09bnVsbClFLmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBwPT0ib2JqZWN0Iil7bGV0W0EsSV09T2JqZWN0LmVudHJpZXMocClbMF07RVtBXT17dGV4dDpJfX1lbHNlIEUuZGVzY3I9e3RleHQ6cH07aWYodHlwZW9mIHc9PSJvYmplY3QiKXtsZXRbQSxJXT1PYmplY3QuZW50cmllcyh3KVswXTtFW0FdPUl9ZWxzZSBFLnNwcml0ZT13O2lmKHR5cGVvZiBtPT0ib2JqZWN0Iil7bGV0W0EsSV09T2JqZWN0LmVudHJpZXMobSlbMF07RVtBXT1JfWVsc2UgRS50YWdzPW07aWYodHlwZW9mIGI9PSJvYmplY3QiKXtsZXRbQSxJXT1PYmplY3QuZW50cmllcyhiKVswXTtFW0FdPUl9ZWxzZSBFLmxpbms9YjtFLnR5cGVDNFNoYXBlPXt0ZXh0Oml9LEUucGFyZW50Qm91bmRhcnk9d2csRS53cmFwPWRrKCl9LG1EZT1mdW5jdGlvbihpLGEsZixwLHcsbSxiLEUpe2lmKGE9PT1udWxsfHxmPT09bnVsbClyZXR1cm47bGV0IF89e307Y29uc3QgQT1hbS5maW5kKEk9PkkuYWxpYXM9PT1hKTtpZihBJiZhPT09QS5hbGlhcz9fPUE6KF8uYWxpYXM9YSxhbS5wdXNoKF8pKSxmPT1udWxsP18ubGFiZWw9e3RleHQ6IiJ9Ol8ubGFiZWw9e3RleHQ6Zn0scD09bnVsbClfLnRlY2huPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBwPT0ib2JqZWN0Iil7bGV0W0ksQl09T2JqZWN0LmVudHJpZXMocClbMF07X1tJXT17dGV4dDpCfX1lbHNlIF8udGVjaG49e3RleHQ6cH07aWYodz09bnVsbClfLmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiB3PT0ib2JqZWN0Iil7bGV0W0ksQl09T2JqZWN0LmVudHJpZXModylbMF07X1tJXT17dGV4dDpCfX1lbHNlIF8uZGVzY3I9e3RleHQ6d307aWYodHlwZW9mIG09PSJvYmplY3QiKXtsZXRbSSxCXT1PYmplY3QuZW50cmllcyhtKVswXTtfW0ldPUJ9ZWxzZSBfLnNwcml0ZT1tO2lmKHR5cGVvZiBiPT0ib2JqZWN0Iil7bGV0W0ksQl09T2JqZWN0LmVudHJpZXMoYilbMF07X1tJXT1CfWVsc2UgXy50YWdzPWI7aWYodHlwZW9mIEU9PSJvYmplY3QiKXtsZXRbSSxCXT1PYmplY3QuZW50cmllcyhFKVswXTtfW0ldPUJ9ZWxzZSBfLmxpbms9RTtfLndyYXA9ZGsoKSxfLnR5cGVDNFNoYXBlPXt0ZXh0Oml9LF8ucGFyZW50Qm91bmRhcnk9d2d9LHlEZT1mdW5jdGlvbihpLGEsZixwLHcsbSxiLEUpe2lmKGE9PT1udWxsfHxmPT09bnVsbClyZXR1cm47bGV0IF89e307Y29uc3QgQT1hbS5maW5kKEk9PkkuYWxpYXM9PT1hKTtpZihBJiZhPT09QS5hbGlhcz9fPUE6KF8uYWxpYXM9YSxhbS5wdXNoKF8pKSxmPT1udWxsP18ubGFiZWw9e3RleHQ6IiJ9Ol8ubGFiZWw9e3RleHQ6Zn0scD09bnVsbClfLnRlY2huPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBwPT0ib2JqZWN0Iil7bGV0W0ksQl09T2JqZWN0LmVudHJpZXMocClbMF07X1tJXT17dGV4dDpCfX1lbHNlIF8udGVjaG49e3RleHQ6cH07aWYodz09bnVsbClfLmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiB3PT0ib2JqZWN0Iil7bGV0W0ksQl09T2JqZWN0LmVudHJpZXModylbMF07X1tJXT17dGV4dDpCfX1lbHNlIF8uZGVzY3I9e3RleHQ6d307aWYodHlwZW9mIG09PSJvYmplY3QiKXtsZXRbSSxCXT1PYmplY3QuZW50cmllcyhtKVswXTtfW0ldPUJ9ZWxzZSBfLnNwcml0ZT1tO2lmKHR5cGVvZiBiPT0ib2JqZWN0Iil7bGV0W0ksQl09T2JqZWN0LmVudHJpZXMoYilbMF07X1tJXT1CfWVsc2UgXy50YWdzPWI7aWYodHlwZW9mIEU9PSJvYmplY3QiKXtsZXRbSSxCXT1PYmplY3QuZW50cmllcyhFKVswXTtfW0ldPUJ9ZWxzZSBfLmxpbms9RTtfLndyYXA9ZGsoKSxfLnR5cGVDNFNoYXBlPXt0ZXh0Oml9LF8ucGFyZW50Qm91bmRhcnk9d2d9LHhEZT1mdW5jdGlvbihpLGEsZixwLHcpe2lmKGk9PT1udWxsfHxhPT09bnVsbClyZXR1cm47bGV0IG09e307Y29uc3QgYj1wMy5maW5kKEU9PkUuYWxpYXM9PT1pKTtpZihiJiZpPT09Yi5hbGlhcz9tPWI6KG0uYWxpYXM9aSxwMy5wdXNoKG0pKSxhPT1udWxsP20ubGFiZWw9e3RleHQ6IiJ9Om0ubGFiZWw9e3RleHQ6YX0sZj09bnVsbCltLnR5cGU9e3RleHQ6InN5c3RlbSJ9O2Vsc2UgaWYodHlwZW9mIGY9PSJvYmplY3QiKXtsZXRbRSxfXT1PYmplY3QuZW50cmllcyhmKVswXTttW0VdPXt0ZXh0Ol99fWVsc2UgbS50eXBlPXt0ZXh0OmZ9O2lmKHR5cGVvZiBwPT0ib2JqZWN0Iil7bGV0W0UsX109T2JqZWN0LmVudHJpZXMocClbMF07bVtFXT1ffWVsc2UgbS50YWdzPXA7aWYodHlwZW9mIHc9PSJvYmplY3QiKXtsZXRbRSxfXT1PYmplY3QuZW50cmllcyh3KVswXTttW0VdPV99ZWxzZSBtLmxpbms9dzttLnBhcmVudEJvdW5kYXJ5PXdnLG0ud3JhcD1kaygpLG9tPXdnLHdnPWksZmsucHVzaChvbSl9LGtEZT1mdW5jdGlvbihpLGEsZixwLHcpe2lmKGk9PT1udWxsfHxhPT09bnVsbClyZXR1cm47bGV0IG09e307Y29uc3QgYj1wMy5maW5kKEU9PkUuYWxpYXM9PT1pKTtpZihiJiZpPT09Yi5hbGlhcz9tPWI6KG0uYWxpYXM9aSxwMy5wdXNoKG0pKSxhPT1udWxsP20ubGFiZWw9e3RleHQ6IiJ9Om0ubGFiZWw9e3RleHQ6YX0sZj09bnVsbCltLnR5cGU9e3RleHQ6ImNvbnRhaW5lciJ9O2Vsc2UgaWYodHlwZW9mIGY9PSJvYmplY3QiKXtsZXRbRSxfXT1PYmplY3QuZW50cmllcyhmKVswXTttW0VdPXt0ZXh0Ol99fWVsc2UgbS50eXBlPXt0ZXh0OmZ9O2lmKHR5cGVvZiBwPT0ib2JqZWN0Iil7bGV0W0UsX109T2JqZWN0LmVudHJpZXMocClbMF07bVtFXT1ffWVsc2UgbS50YWdzPXA7aWYodHlwZW9mIHc9PSJvYmplY3QiKXtsZXRbRSxfXT1PYmplY3QuZW50cmllcyh3KVswXTttW0VdPV99ZWxzZSBtLmxpbms9dzttLnBhcmVudEJvdW5kYXJ5PXdnLG0ud3JhcD1kaygpLG9tPXdnLHdnPWksZmsucHVzaChvbSl9LEVEZT1mdW5jdGlvbihpLGEsZixwLHcsbSxiLEUpe2lmKGE9PT1udWxsfHxmPT09bnVsbClyZXR1cm47bGV0IF89e307Y29uc3QgQT1wMy5maW5kKEk9PkkuYWxpYXM9PT1hKTtpZihBJiZhPT09QS5hbGlhcz9fPUE6KF8uYWxpYXM9YSxwMy5wdXNoKF8pKSxmPT1udWxsP18ubGFiZWw9e3RleHQ6IiJ9Ol8ubGFiZWw9e3RleHQ6Zn0scD09bnVsbClfLnR5cGU9e3RleHQ6Im5vZGUifTtlbHNlIGlmKHR5cGVvZiBwPT0ib2JqZWN0Iil7bGV0W0ksQl09T2JqZWN0LmVudHJpZXMocClbMF07X1tJXT17dGV4dDpCfX1lbHNlIF8udHlwZT17dGV4dDpwfTtpZih3PT1udWxsKV8uZGVzY3I9e3RleHQ6IiJ9O2Vsc2UgaWYodHlwZW9mIHc9PSJvYmplY3QiKXtsZXRbSSxCXT1PYmplY3QuZW50cmllcyh3KVswXTtfW0ldPXt0ZXh0OkJ9fWVsc2UgXy5kZXNjcj17dGV4dDp3fTtpZih0eXBlb2YgYj09Im9iamVjdCIpe2xldFtJLEJdPU9iamVjdC5lbnRyaWVzKGIpWzBdO19bSV09Qn1lbHNlIF8udGFncz1iO2lmKHR5cGVvZiBFPT0ib2JqZWN0Iil7bGV0W0ksQl09T2JqZWN0LmVudHJpZXMoRSlbMF07X1tJXT1CfWVsc2UgXy5saW5rPUU7Xy5ub2RlVHlwZT1pLF8ucGFyZW50Qm91bmRhcnk9d2csXy53cmFwPWRrKCksb209d2csd2c9YSxmay5wdXNoKG9tKX0sVERlPWZ1bmN0aW9uKCl7d2c9b20sZmsucG9wKCksb209ZmsucG9wKCksZmsucHVzaChvbSl9LENEZT1mdW5jdGlvbihpLGEsZixwLHcsbSxiLEUsXyxBLEkpe2xldCBCPWFtLmZpbmQoTj0+Ti5hbGlhcz09PWEpO2lmKCEoQj09PXZvaWQgMCYmKEI9cDMuZmluZChOPT5OLmFsaWFzPT09YSksQj09PXZvaWQgMCkpKXtpZihmIT1udWxsKWlmKHR5cGVvZiBmPT0ib2JqZWN0Iil7bGV0W04sUl09T2JqZWN0LmVudHJpZXMoZilbMF07QltOXT1SfWVsc2UgQi5iZ0NvbG9yPWY7aWYocCE9bnVsbClpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtOLFJdPU9iamVjdC5lbnRyaWVzKHApWzBdO0JbTl09Un1lbHNlIEIuZm9udENvbG9yPXA7aWYodyE9bnVsbClpZih0eXBlb2Ygdz09Im9iamVjdCIpe2xldFtOLFJdPU9iamVjdC5lbnRyaWVzKHcpWzBdO0JbTl09Un1lbHNlIEIuYm9yZGVyQ29sb3I9dztpZihtIT1udWxsKWlmKHR5cGVvZiBtPT0ib2JqZWN0Iil7bGV0W04sUl09T2JqZWN0LmVudHJpZXMobSlbMF07QltOXT1SfWVsc2UgQi5zaGFkb3dpbmc9bTtpZihiIT1udWxsKWlmKHR5cGVvZiBiPT0ib2JqZWN0Iil7bGV0W04sUl09T2JqZWN0LmVudHJpZXMoYilbMF07QltOXT1SfWVsc2UgQi5zaGFwZT1iO2lmKEUhPW51bGwpaWYodHlwZW9mIEU9PSJvYmplY3QiKXtsZXRbTixSXT1PYmplY3QuZW50cmllcyhFKVswXTtCW05dPVJ9ZWxzZSBCLnNwcml0ZT1FO2lmKF8hPW51bGwpaWYodHlwZW9mIF89PSJvYmplY3QiKXtsZXRbTixSXT1PYmplY3QuZW50cmllcyhfKVswXTtCW05dPVJ9ZWxzZSBCLnRlY2huPV87aWYoQSE9bnVsbClpZih0eXBlb2YgQT09Im9iamVjdCIpe2xldFtOLFJdPU9iamVjdC5lbnRyaWVzKEEpWzBdO0JbTl09Un1lbHNlIEIubGVnZW5kVGV4dD1BO2lmKEkhPW51bGwpaWYodHlwZW9mIEk9PSJvYmplY3QiKXtsZXRbTixSXT1PYmplY3QuZW50cmllcyhJKVswXTtCW05dPVJ9ZWxzZSBCLmxlZ2VuZFNwcml0ZT1JfX0sX0RlPWZ1bmN0aW9uKGksYSxmLHAsdyxtLGIpe2NvbnN0IEU9bEYuZmluZChfPT5fLmZyb209PT1hJiZfLnRvPT09Zik7aWYoRSE9PXZvaWQgMCl7aWYocCE9bnVsbClpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtfLEFdPU9iamVjdC5lbnRyaWVzKHApWzBdO0VbX109QX1lbHNlIEUudGV4dENvbG9yPXA7aWYodyE9bnVsbClpZih0eXBlb2Ygdz09Im9iamVjdCIpe2xldFtfLEFdPU9iamVjdC5lbnRyaWVzKHcpWzBdO0VbX109QX1lbHNlIEUubGluZUNvbG9yPXc7aWYobSE9bnVsbClpZih0eXBlb2YgbT09Im9iamVjdCIpe2xldFtfLEFdPU9iamVjdC5lbnRyaWVzKG0pWzBdO0VbX109cGFyc2VJbnQoQSl9ZWxzZSBFLm9mZnNldFg9cGFyc2VJbnQobSk7aWYoYiE9bnVsbClpZih0eXBlb2YgYj09Im9iamVjdCIpe2xldFtfLEFdPU9iamVjdC5lbnRyaWVzKGIpWzBdO0VbX109cGFyc2VJbnQoQSl9ZWxzZSBFLm9mZnNldFk9cGFyc2VJbnQoYil9fSxTRGU9ZnVuY3Rpb24oaSxhLGYpe2xldCBwPVFXLHc9Wlc7aWYodHlwZW9mIGE9PSJvYmplY3QiKXtjb25zdCBtPU9iamVjdC52YWx1ZXMoYSlbMF07cD1wYXJzZUludChtKX1lbHNlIHA9cGFyc2VJbnQoYSk7aWYodHlwZW9mIGY9PSJvYmplY3QiKXtjb25zdCBtPU9iamVjdC52YWx1ZXMoZilbMF07dz1wYXJzZUludChtKX1lbHNlIHc9cGFyc2VJbnQoZik7cD49MSYmKFFXPXApLHc+PTEmJihaVz13KX0sQURlPWZ1bmN0aW9uKCl7cmV0dXJuIFFXfSxMRGU9ZnVuY3Rpb24oKXtyZXR1cm4gWld9LE1EZT1mdW5jdGlvbigpe3JldHVybiB3Z30sRERlPWZ1bmN0aW9uKCl7cmV0dXJuIG9tfSx2UHQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGk9PW51bGw/YW06YW0uZmlsdGVyKGE9PmEucGFyZW50Qm91bmRhcnk9PT1pKX0sSURlPWZ1bmN0aW9uKGkpe3JldHVybiBhbS5maW5kKGE9PmEuYWxpYXM9PT1pKX0sT0RlPWZ1bmN0aW9uKGkpe3JldHVybiBPYmplY3Qua2V5cyh2UHQoaSkpfSxQRGU9ZnVuY3Rpb24oaSl7cmV0dXJuIGk9PW51bGw/cDM6cDMuZmlsdGVyKGE9PmEucGFyZW50Qm91bmRhcnk9PT1pKX0sRkRlPWZ1bmN0aW9uKCl7cmV0dXJuIGxGfSxORGU9ZnVuY3Rpb24oKXtyZXR1cm4gRmR0fSxCRGU9ZnVuY3Rpb24oaSl7TmR0PWl9LGRrPWZ1bmN0aW9uKCl7cmV0dXJuIE5kdH0sQmR0PXthZGRQZXJzb25PclN5c3RlbTp2RGUsYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeTp4RGUsYWRkQ29udGFpbmVyOm1EZSxhZGRDb250YWluZXJCb3VuZGFyeTprRGUsYWRkQ29tcG9uZW50OnlEZSxhZGREZXBsb3ltZW50Tm9kZTpFRGUscG9wQm91bmRhcnlQYXJzZVN0YWNrOlREZSxhZGRSZWw6d0RlLHVwZGF0ZUVsU3R5bGU6Q0RlLHVwZGF0ZVJlbFN0eWxlOl9EZSx1cGRhdGVMYXlvdXRDb25maWc6U0RlLGF1dG9XcmFwOmRrLHNldFdyYXA6QkRlLGdldEM0U2hhcGVBcnJheTp2UHQsZ2V0QzRTaGFwZTpJRGUsZ2V0QzRTaGFwZUtleXM6T0RlLGdldEJvdW5kYXJ5czpQRGUsZ2V0Q3VycmVudEJvdW5kYXJ5UGFyc2U6TURlLGdldFBhcmVudEJvdW5kYXJ5UGFyc2U6RERlLGdldFJlbHM6RkRlLGdldFRpdGxlOk5EZSxnZXRDNFR5cGU6cERlLGdldEM0U2hhcGVJblJvdzpBRGUsZ2V0QzRCb3VuZGFyeUluUm93OkxEZSxzZXRBY2NUaXRsZTpFMCxnZXRBY2NUaXRsZTpmZyxnZXRBY2NEZXNjcmlwdGlvbjpnZyxzZXRBY2NEZXNjcmlwdGlvbjpkZyxnZXRDb25maWc6KCk9Pk9lKCkuYzQsY2xlYXI6ZnVuY3Rpb24oKXthbT1bXSxwMz1be2FsaWFzOiJnbG9iYWwiLGxhYmVsOnt0ZXh0OiJnbG9iYWwifSx0eXBlOnt0ZXh0OiJnbG9iYWwifSx0YWdzOm51bGwsbGluazpudWxsLHBhcmVudEJvdW5kYXJ5OiIifV0sb209IiIsd2c9Imdsb2JhbCIsZms9WyIiXSxsRj1bXSxmaz1bIiJdLEZkdD0iIixOZHQ9ITEsUVc9NCxaVz0yfSxMSU5FVFlQRTp7U09MSUQ6MCxET1RURUQ6MSxOT1RFOjIsU09MSURfQ1JPU1M6MyxET1RURURfQ1JPU1M6NCxTT0xJRF9PUEVOOjUsRE9UVEVEX09QRU46NixMT09QX1NUQVJUOjEwLExPT1BfRU5EOjExLEFMVF9TVEFSVDoxMixBTFRfRUxTRToxMyxBTFRfRU5EOjE0LE9QVF9TVEFSVDoxNSxPUFRfRU5EOjE2LEFDVElWRV9TVEFSVDoxNyxBQ1RJVkVfRU5EOjE4LFBBUl9TVEFSVDoxOSxQQVJfQU5EOjIwLFBBUl9FTkQ6MjEsUkVDVF9TVEFSVDoyMixSRUNUX0VORDoyMyxTT0xJRF9QT0lOVDoyNCxET1RURURfUE9JTlQ6MjV9LEFSUk9XVFlQRTp7RklMTEVEOjAsT1BFTjoxfSxQTEFDRU1FTlQ6e0xFRlRPRjowLFJJR0hUT0Y6MSxPVkVSOjJ9LHNldFRpdGxlOmZ1bmN0aW9uKGkpe0ZkdD1RMShpLE9lKCkpfSxzZXRDNFR5cGU6YkRlfSxKVz0oaSxhKT0+e2NvbnN0IGY9aS5hcHBlbmQoInJlY3QiKTtpZihmLmF0dHIoIngiLGEueCksZi5hdHRyKCJ5IixhLnkpLGYuYXR0cigiZmlsbCIsYS5maWxsKSxmLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLGYuYXR0cigid2lkdGgiLGEud2lkdGgpLGYuYXR0cigiaGVpZ2h0IixhLmhlaWdodCksYS5yeCE9PXZvaWQgMCYmZi5hdHRyKCJyeCIsYS5yeCksYS5yeSE9PXZvaWQgMCYmZi5hdHRyKCJyeSIsYS5yeSksYS5hdHRycyE9PXZvaWQgMClmb3IoY29uc3QgcCBpbiBhLmF0dHJzKWYuYXR0cihwLGEuYXR0cnNbcF0pO3JldHVybiBhLmNsYXNzIT09dm9pZCAwJiZmLmF0dHIoImNsYXNzIixhLmNsYXNzKSxmfSxtUHQ9KGksYSk9Pntjb25zdCBmPXt4OmEuc3RhcnR4LHk6YS5zdGFydHksd2lkdGg6YS5zdG9weC1hLnN0YXJ0eCxoZWlnaHQ6YS5zdG9weS1hLnN0YXJ0eSxmaWxsOmEuZmlsbCxzdHJva2U6YS5zdHJva2UsY2xhc3M6InJlY3QifTtKVyhpLGYpLmxvd2VyKCl9LFJEZT0oaSxhKT0+e2NvbnN0IGY9YS50ZXh0LnJlcGxhY2UoV1AsIiAiKSxwPWkuYXBwZW5kKCJ0ZXh0Iik7cC5hdHRyKCJ4IixhLngpLHAuYXR0cigieSIsYS55KSxwLmF0dHIoImNsYXNzIiwibGVnZW5kIikscC5zdHlsZSgidGV4dC1hbmNob3IiLGEuYW5jaG9yKSxhLmNsYXNzIT09dm9pZCAwJiZwLmF0dHIoImNsYXNzIixhLmNsYXNzKTtjb25zdCB3PXAuYXBwZW5kKCJ0c3BhbiIpO3JldHVybiB3LmF0dHIoIngiLGEueCthLnRleHRNYXJnaW4qMiksdy50ZXh0KGYpLHB9LGpEZT0oaSxhLGYscCk9Pntjb25zdCB3PWkuYXBwZW5kKCJpbWFnZSIpO3cuYXR0cigieCIsYSksdy5hdHRyKCJ5IixmKTtjb25zdCBtPWlrKHApO3cuYXR0cigieGxpbms6aHJlZiIsbSl9LCREZT0oaSxhLGYscCk9Pntjb25zdCB3PWkuYXBwZW5kKCJ1c2UiKTt3LmF0dHIoIngiLGEpLHcuYXR0cigieSIsZik7Y29uc3QgbT1payhwKTt3LmF0dHIoInhsaW5rOmhyZWYiLGAjJHttfWApfSxiVD0oKT0+KHt4OjAseTowLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLGZpbGw6IiNFREYyQUUiLHN0cm9rZToiIzY2NiIsYW5jaG9yOiJzdGFydCIscng6MCxyeTowfSksUmR0PSgpPT4oe3g6MCx5OjAsd2lkdGg6MTAwLGhlaWdodDoxMDAsInRleHQtYW5jaG9yIjoic3RhcnQiLHN0eWxlOiIjNjY2Iix0ZXh0TWFyZ2luOjAscng6MCxyeTowLHRzcGFuOiEwfSksamR0PWZ1bmN0aW9uKGksYSl7cmV0dXJuIEpXKGksYSl9LHlQdD1mdW5jdGlvbihpLGEsZixwLHcsbSl7Y29uc3QgYj1pLmFwcGVuZCgiaW1hZ2UiKTtiLmF0dHIoIndpZHRoIixhKSxiLmF0dHIoImhlaWdodCIsZiksYi5hdHRyKCJ4IixwKSxiLmF0dHIoInkiLHcpO2xldCBFPW0uc3RhcnRzV2l0aCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0Iik/bTppayhtKTtiLmF0dHIoInhsaW5rOmhyZWYiLEUpfSx6RGU9KGksYSxmKT0+e2NvbnN0IHA9aS5hcHBlbmQoImciKTtsZXQgdz0wO2ZvcihsZXQgbSBvZiBhKXtsZXQgYj1tLnRleHRDb2xvcj9tLnRleHRDb2xvcjoiIzQ0NDQ0NCIsRT1tLmxpbmVDb2xvcj9tLmxpbmVDb2xvcjoiIzQ0NDQ0NCIsXz1tLm9mZnNldFg/cGFyc2VJbnQobS5vZmZzZXRYKTowLEE9bS5vZmZzZXRZP3BhcnNlSW50KG0ub2Zmc2V0WSk6MCxJPSIiO2lmKHc9PT0wKXtsZXQgTj1wLmFwcGVuZCgibGluZSIpO04uYXR0cigieDEiLG0uc3RhcnRQb2ludC54KSxOLmF0dHIoInkxIixtLnN0YXJ0UG9pbnQueSksTi5hdHRyKCJ4MiIsbS5lbmRQb2ludC54KSxOLmF0dHIoInkyIixtLmVuZFBvaW50LnkpLE4uYXR0cigic3Ryb2tlLXdpZHRoIiwiMSIpLE4uYXR0cigic3Ryb2tlIixFKSxOLnN0eWxlKCJmaWxsIiwibm9uZSIpLG0udHlwZSE9PSJyZWxfYiImJk4uYXR0cigibWFya2VyLWVuZCIsInVybCgiK0krIiNhcnJvd2hlYWQpIiksKG0udHlwZT09PSJiaXJlbCJ8fG0udHlwZT09PSJyZWxfYiIpJiZOLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK0krIiNhcnJvd2VuZCkiKSx3PS0xfWVsc2V7bGV0IE49cC5hcHBlbmQoInBhdGgiKTtOLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMSIpLmF0dHIoInN0cm9rZSIsRSkuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5IFFjb250cm9seCxjb250cm9seSBzdG9weCxzdG9weSAiLnJlcGxhY2VBbGwoInN0YXJ0eCIsbS5zdGFydFBvaW50LngpLnJlcGxhY2VBbGwoInN0YXJ0eSIsbS5zdGFydFBvaW50LnkpLnJlcGxhY2VBbGwoImNvbnRyb2x4IixtLnN0YXJ0UG9pbnQueCsobS5lbmRQb2ludC54LW0uc3RhcnRQb2ludC54KS8yLShtLmVuZFBvaW50LngtbS5zdGFydFBvaW50LngpLzQpLnJlcGxhY2VBbGwoImNvbnRyb2x5IixtLnN0YXJ0UG9pbnQueSsobS5lbmRQb2ludC55LW0uc3RhcnRQb2ludC55KS8yKS5yZXBsYWNlQWxsKCJzdG9weCIsbS5lbmRQb2ludC54KS5yZXBsYWNlQWxsKCJzdG9weSIsbS5lbmRQb2ludC55KSksbS50eXBlIT09InJlbF9iIiYmTi5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrSSsiI2Fycm93aGVhZCkiKSwobS50eXBlPT09ImJpcmVsInx8bS50eXBlPT09InJlbF9iIikmJk4uYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrSSsiI2Fycm93ZW5kKSIpfWxldCBCPWYubWVzc2FnZUZvbnQoKTtMNShmKShtLmxhYmVsLnRleHQscCxNYXRoLm1pbihtLnN0YXJ0UG9pbnQueCxtLmVuZFBvaW50LngpK01hdGguYWJzKG0uZW5kUG9pbnQueC1tLnN0YXJ0UG9pbnQueCkvMitfLE1hdGgubWluKG0uc3RhcnRQb2ludC55LG0uZW5kUG9pbnQueSkrTWF0aC5hYnMobS5lbmRQb2ludC55LW0uc3RhcnRQb2ludC55KS8yK0EsbS5sYWJlbC53aWR0aCxtLmxhYmVsLmhlaWdodCx7ZmlsbDpifSxCKSxtLnRlY2huJiZtLnRlY2huLnRleHQhPT0iIiYmKEI9Zi5tZXNzYWdlRm9udCgpLEw1KGYpKCJbIittLnRlY2huLnRleHQrIl0iLHAsTWF0aC5taW4obS5zdGFydFBvaW50LngsbS5lbmRQb2ludC54KStNYXRoLmFicyhtLmVuZFBvaW50LngtbS5zdGFydFBvaW50LngpLzIrXyxNYXRoLm1pbihtLnN0YXJ0UG9pbnQueSxtLmVuZFBvaW50LnkpK01hdGguYWJzKG0uZW5kUG9pbnQueS1tLnN0YXJ0UG9pbnQueSkvMitmLm1lc3NhZ2VGb250U2l6ZSs1K0EsTWF0aC5tYXgobS5sYWJlbC53aWR0aCxtLnRlY2huLndpZHRoKSxtLnRlY2huLmhlaWdodCx7ZmlsbDpiLCJmb250LXN0eWxlIjoiaXRhbGljIn0sQikpfX0scURlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPWkuYXBwZW5kKCJnIik7bGV0IHc9YS5iZ0NvbG9yP2EuYmdDb2xvcjoibm9uZSIsbT1hLmJvcmRlckNvbG9yP2EuYm9yZGVyQ29sb3I6IiM0NDQ0NDQiLGI9YS5mb250Q29sb3I/YS5mb250Q29sb3I6ImJsYWNrIixFPXsic3Ryb2tlLXdpZHRoIjoxLCJzdHJva2UtZGFzaGFycmF5IjoiNy4wLDcuMCJ9O2Eubm9kZVR5cGUmJihFPXsic3Ryb2tlLXdpZHRoIjoxfSk7bGV0IF89e3g6YS54LHk6YS55LGZpbGw6dyxzdHJva2U6bSx3aWR0aDphLndpZHRoLGhlaWdodDphLmhlaWdodCxyeDoyLjUscnk6Mi41LGF0dHJzOkV9O2pkdChwLF8pO2xldCBBPWYuYm91bmRhcnlGb250KCk7QS5mb250V2VpZ2h0PSJib2xkIixBLmZvbnRTaXplPUEuZm9udFNpemUrMixBLmZvbnRDb2xvcj1iLEw1KGYpKGEubGFiZWwudGV4dCxwLGEueCxhLnkrYS5sYWJlbC5ZLGEud2lkdGgsYS5oZWlnaHQse2ZpbGw6IiM0NDQ0NDQifSxBKSxhLnR5cGUmJmEudHlwZS50ZXh0IT09IiImJihBPWYuYm91bmRhcnlGb250KCksQS5mb250Q29sb3I9YixMNShmKShhLnR5cGUudGV4dCxwLGEueCxhLnkrYS50eXBlLlksYS53aWR0aCxhLmhlaWdodCx7ZmlsbDoiIzQ0NDQ0NCJ9LEEpKSxhLmRlc2NyJiZhLmRlc2NyLnRleHQhPT0iIiYmKEE9Zi5ib3VuZGFyeUZvbnQoKSxBLmZvbnRTaXplPUEuZm9udFNpemUtMixBLmZvbnRDb2xvcj1iLEw1KGYpKGEuZGVzY3IudGV4dCxwLGEueCxhLnkrYS5kZXNjci5ZLGEud2lkdGgsYS5oZWlnaHQse2ZpbGw6IiM0NDQ0NDQifSxBKSl9LEhEZT1mdW5jdGlvbihpLGEsZil7dmFyIEI7bGV0IHA9YS5iZ0NvbG9yP2EuYmdDb2xvcjpmW2EudHlwZUM0U2hhcGUudGV4dCsiX2JnX2NvbG9yIl0sdz1hLmJvcmRlckNvbG9yP2EuYm9yZGVyQ29sb3I6ZlthLnR5cGVDNFNoYXBlLnRleHQrIl9ib3JkZXJfY29sb3IiXSxtPWEuZm9udENvbG9yP2EuZm9udENvbG9yOiIjRkZGRkZGIixiPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQUlBQUFEWVlHN1FBQUFDRDBsRVFWUjRYdTJZb1U0RU1SQ0dUKzRqOEFpOEFoYUg0UUhnQVVqUXVGTUVDVWdNSVVnd0pBZ01oZ1FzQVlVaUpDaVFJQkJZK0VJVHNqZlRkbWU2VjI0djRjOHZ5R2JiK1pqT3ROMGJOY3ZqUVhta0g4M1d2WUJXdG82UExtNnY3cDd1SDEvdzJmWEQrUEJ5Y1gxUHYybDNJZERtL3ZuN3grZFhRaUF1YlJ6b1VSYTdnUlpXZDBpR1JJaUpiT25obmZZQlFaTkpqTmJ1eVkyZUpHOGZrREUzYmJHNGVwNk1IVUFzZ1l4bUUzblZzNlZzQldKU0djY3NPbEZQbUxJVmlNekxPQjdwQ1ZPMkF0SEpNb2hIN0ZoNnpxaXRRSzdtMHJKdkFWWWdHY0VwZS8vUExkRHo2NXNNNHBGOU43SUNjWERLSUI1TnY2ajd0RDBOb1NkTTJRclU5R2cwZXdFMUxxQmhIUjNCQmR2ajJ2YXBuaWRqSHhEL3E2dmQ3UHZocjMxQXdjWThlWE1UWEFLRUNaWkpGWHVFcTI3YUxnUUs1dUxNb2hDZW5HR3VHZXdPeFNqQnZZQnFlRzZCK05xaWJsZ2dkam5jK1pYRHkrRk5GcEZ6dzc2TzNVQkFST3VYaDZGb2lBY2Y1ZzllVHZVZ3p5MG5XZzZJOGNYSFJVcGc1Yk9WQkNvK0tEcEZhak9mMjNHZ1BtZTdSU1ErbGFjSUVOVWdKNmdnMWs2SGpnT2xxbkxxaXA0dEV1aHYwaE5FTVhVRDBjbHlYRTNwNnBaQTBTMm5udlRsWHdMSkVaV2xiN2NUUUgxK1VTZ1RONFZoQWVubS93ZWExT0NBT21xbzZmRTFXQ2I5V1NLQmFoK3JiVVdQV0FtRTJSdmswQXBpQjQ1ZU95TkF6VTh4Y1R2ajhLdmtLRW9PYUlZZUhOQTNadXlnQXZGTVVPMEFBQUFBU1VWT1JLNUNZSUk9Ijtzd2l0Y2goYS50eXBlQzRTaGFwZS50ZXh0KXtjYXNlInBlcnNvbiI6Yj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3Q0FJQUFBRFlZRzdRQUFBQ0QwbEVRVlI0WHUyWW9VNEVNUkNHVCs0ajhBaThBaGFINFFIZ0FValF1Rk1FQ1VnTUlVZ3dKQWdNaGdRc0FZVWlKQ2lRSUJCWStFSVRzamZUZG1lNlYyNHY0Yzh2eUdiYitaak90TjBiTmN2alFYbWtIODNXdllCV3RvNlBMbTZ2N3A3dUgxL3cyZlhEK1BCeWNYMVB2MmwzSWREbS92bjd4K2RYUWlBdWJSem9VUmE3Z1JaV2QwaUdSSWlKYk9uaG5mWUJRWk5Kak5idXlZMmVKRzhma0RFM2JiRzRlcDZNSFVBc2dZeG1FM25WczZWc0JXSlNHY2NzT2xGUG1MSVZpTXpMT0I3cENWTzJBdEhKTW9oSDdGaDZ6cWl0UUs3bTBySnZBVllnR2NFcGUvL1BMZER6NjVzTTRwRjlON0lDY1hES0lCNU52Nmo3dEQwTm9TZE0yUXJVOUdnMGV3RTFMcUJoSFIzQkJkdmoydmFwbmlkakh4RC9xNnZkN1B2aHIzMUF3Y1k4ZVhNVFhBS0VDWlpKRlh1RXEyN2FMZ1FLNXVMTW9oQ2VuR0d1R2V3T3hTakJ2WUJxZUc2QitOcWlibGdnZGpuYytaWER5K0ZORnBGenc3Nk8zVUJBUk91WGg2Rm9pQWNmNWc5ZVR2VWd6eTBuV2c2SThjWEhSVXBnNWJPVkJDbytLRHBGYWpPZjIzR2dQbWU3UlNRK2xhY0lFTlVnSjZnZzFrNkhqZ09scW5McWlwNHRFdWh2MGhORU1YVUQwY2x5WEUzcDZwWkEwUzJubnZUbFh3TEpFWldsYjdjVFFIMStVU2dUTjRWaEFlbm0vd2VhMU9DQU9tcW82ZkUxV0NiOVdTS0JhaCtyYlVXUFdBbUUyUnZrMEFwaUI0NWVPeU5BelU4eGNUdmo4S3ZrS0VvT2FJWWVITkEzWnV5Z0F2Rk1VTzBBQUFBQVNVVk9SSzVDWUlJPSI7YnJlYWs7Y2FzZSJleHRlcm5hbF9wZXJzb24iOmI9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0NBSUFBQURZWUc3UUFBQUI2RWxFUVZSNFh1MllMWStFTUJDRzkrZFdyMGFqMFdnMEdvMUdvMCtqOFhkdjJ1VEN2djFncHQwZWJIS1B1aERhZVc0NjA1WjltSnZ4NEFkWFV5VFVkZDA4eit1NmZsbVdaUm5Ic1drYWZrOURwdEF3RFB1K2YwZUFZdHUyUEVhR1d1ajVmQ0lackJBQzJlTEJBblJDc0Vra3htZWFKcDdpREoyUU1EZEhzTGc4U3hLRkVKYUFvOGxBWG5tdU9GSWhUTXB4eEtBVGVibzRVaUZrbnVObzRPbmlTSVhReVJ4RUEzWXNuakdDVkVqVlhEN3lMVUFxeEJHVXlQdi9ZNFcyYmVNZ0d1UzdrVlFJQnljSDBmRCtvaTVwZXpRRVR4ZEhLbVFLR2sxZVFFWWxkSytqdzVHeFBmWjl6N01rMFFuaGYxVzFtM3cvL0VVbjVCRG1TWnNiUjQ0UVFMQkVxckJIcU9ybVNLYVFBeGRuTEFyQ3J4WmNNN0E3WktzNGlvUnE4TEZDK05wQzNXQ0JKc3ZwVnc1ZWRtOWlFWEZ1eU5meFhBZ1N3ZnJGUTFjMGlOZGE4QWRlanZVZ25rdE90SlFReG1jZkZ6R2dsYzVXVkNqN29EZ0ZxVTE4Ym9lRlNzNTJDVWg4TEU4QklWUURUMUFCckIwSHRnU0VZbFg1ZG9KbkN3djlUWG9jS0NhS2Jud2hkREtQcTRsZjNTd1UzSExxNFYvK1dZaEhWTWEvM2I0SWxmeWlrQWR1Q2tjQmM3bVEzL3ovUXEvY1R1aWtoa3pCMTJBZS9tY0pDOVUrVm84RWoxZ1dBdGdiZUdnRnNBTUhyNTBCSVdPTENiZXp2aHBCRlVkWTZFSnVKL1FEVzBYb01YNjB6WjBBQUFBQVNVVk9SSzVDWUlJPSI7YnJlYWt9Y29uc3QgRT1pLmFwcGVuZCgiZyIpO0UuYXR0cigiY2xhc3MiLCJwZXJzb24tbWFuIik7Y29uc3QgXz1iVCgpO3N3aXRjaChhLnR5cGVDNFNoYXBlLnRleHQpe2Nhc2UicGVyc29uIjpjYXNlImV4dGVybmFsX3BlcnNvbiI6Y2FzZSJzeXN0ZW0iOmNhc2UiZXh0ZXJuYWxfc3lzdGVtIjpjYXNlImNvbnRhaW5lciI6Y2FzZSJleHRlcm5hbF9jb250YWluZXIiOmNhc2UiY29tcG9uZW50IjpjYXNlImV4dGVybmFsX2NvbXBvbmVudCI6Xy54PWEueCxfLnk9YS55LF8uZmlsbD1wLF8ud2lkdGg9YS53aWR0aCxfLmhlaWdodD1hLmhlaWdodCxfLnN0cm9rZT13LF8ucng9Mi41LF8ucnk9Mi41LF8uYXR0cnM9eyJzdHJva2Utd2lkdGgiOi41fSxqZHQoRSxfKTticmVhaztjYXNlInN5c3RlbV9kYiI6Y2FzZSJleHRlcm5hbF9zeXN0ZW1fZGIiOmNhc2UiY29udGFpbmVyX2RiIjpjYXNlImV4dGVybmFsX2NvbnRhaW5lcl9kYiI6Y2FzZSJjb21wb25lbnRfZGIiOmNhc2UiZXh0ZXJuYWxfY29tcG9uZW50X2RiIjpFLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLHApLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNSIpLmF0dHIoInN0cm9rZSIsdykuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5YzAsLTEwIGhhbGYsLTEwIGhhbGYsLTEwYzAsMCBoYWxmLDAgaGFsZiwxMGwwLGhlaWdodGMwLDEwIC1oYWxmLDEwIC1oYWxmLDEwYzAsMCAtaGFsZiwwIC1oYWxmLC0xMGwwLC1oZWlnaHQiLnJlcGxhY2VBbGwoInN0YXJ0eCIsYS54KS5yZXBsYWNlQWxsKCJzdGFydHkiLGEueSkucmVwbGFjZUFsbCgiaGFsZiIsYS53aWR0aC8yKS5yZXBsYWNlQWxsKCJoZWlnaHQiLGEuaGVpZ2h0KSksRS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNSIpLmF0dHIoInN0cm9rZSIsdykuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5YzAsMTAgaGFsZiwxMCBoYWxmLDEwYzAsMCBoYWxmLDAgaGFsZiwtMTAiLnJlcGxhY2VBbGwoInN0YXJ0eCIsYS54KS5yZXBsYWNlQWxsKCJzdGFydHkiLGEueSkucmVwbGFjZUFsbCgiaGFsZiIsYS53aWR0aC8yKSk7YnJlYWs7Y2FzZSJzeXN0ZW1fcXVldWUiOmNhc2UiZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlIjpjYXNlImNvbnRhaW5lcl9xdWV1ZSI6Y2FzZSJleHRlcm5hbF9jb250YWluZXJfcXVldWUiOmNhc2UiY29tcG9uZW50X3F1ZXVlIjpjYXNlImV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZSI6RS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIixwKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjUiKS5hdHRyKCJzdHJva2UiLHcpLmF0dHIoImQiLCJNc3RhcnR4LHN0YXJ0eWx3aWR0aCwwYzUsMCA1LGhhbGYgNSxoYWxmYzAsMCAwLGhhbGYgLTUsaGFsZmwtd2lkdGgsMGMtNSwwIC01LC1oYWxmIC01LC1oYWxmYzAsMCAwLC1oYWxmIDUsLWhhbGYiLnJlcGxhY2VBbGwoInN0YXJ0eCIsYS54KS5yZXBsYWNlQWxsKCJzdGFydHkiLGEueSkucmVwbGFjZUFsbCgid2lkdGgiLGEud2lkdGgpLnJlcGxhY2VBbGwoImhhbGYiLGEuaGVpZ2h0LzIpKSxFLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41IikuYXR0cigic3Ryb2tlIix3KS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHljLTUsMCAtNSxoYWxmIC01LGhhbGZjMCxoYWxmIDUsaGFsZiA1LGhhbGYiLnJlcGxhY2VBbGwoInN0YXJ0eCIsYS54K2Eud2lkdGgpLnJlcGxhY2VBbGwoInN0YXJ0eSIsYS55KS5yZXBsYWNlQWxsKCJoYWxmIixhLmhlaWdodC8yKSk7YnJlYWt9bGV0IEE9WkRlKGYsYS50eXBlQzRTaGFwZS50ZXh0KTtzd2l0Y2goRS5hcHBlbmQoInRleHQiKS5hdHRyKCJmaWxsIixtKS5hdHRyKCJmb250LWZhbWlseSIsQS5mb250RmFtaWx5KS5hdHRyKCJmb250LXNpemUiLEEuZm9udFNpemUtMikuYXR0cigiZm9udC1zdHlsZSIsIml0YWxpYyIpLmF0dHIoImxlbmd0aEFkanVzdCIsInNwYWNpbmciKS5hdHRyKCJ0ZXh0TGVuZ3RoIixhLnR5cGVDNFNoYXBlLndpZHRoKS5hdHRyKCJ4IixhLngrYS53aWR0aC8yLWEudHlwZUM0U2hhcGUud2lkdGgvMikuYXR0cigieSIsYS55K2EudHlwZUM0U2hhcGUuWSkudGV4dCgiPDwiK2EudHlwZUM0U2hhcGUudGV4dCsiPj4iKSxhLnR5cGVDNFNoYXBlLnRleHQpe2Nhc2UicGVyc29uIjpjYXNlImV4dGVybmFsX3BlcnNvbiI6eVB0KEUsNDgsNDgsYS54K2Eud2lkdGgvMi0yNCxhLnkrYS5pbWFnZS5ZLGIpO2JyZWFrfWxldCBJPWZbYS50eXBlQzRTaGFwZS50ZXh0KyJGb250Il0oKTtyZXR1cm4gSS5mb250V2VpZ2h0PSJib2xkIixJLmZvbnRTaXplPUkuZm9udFNpemUrMixJLmZvbnRDb2xvcj1tLEw1KGYpKGEubGFiZWwudGV4dCxFLGEueCxhLnkrYS5sYWJlbC5ZLGEud2lkdGgsYS5oZWlnaHQse2ZpbGw6bX0sSSksST1mW2EudHlwZUM0U2hhcGUudGV4dCsiRm9udCJdKCksSS5mb250Q29sb3I9bSxhLnRlY2huJiYoKEI9YS50ZWNobik9PW51bGw/dm9pZCAwOkIudGV4dCkhPT0iIj9MNShmKShhLnRlY2huLnRleHQsRSxhLngsYS55K2EudGVjaG4uWSxhLndpZHRoLGEuaGVpZ2h0LHtmaWxsOm0sImZvbnQtc3R5bGUiOiJpdGFsaWMifSxJKTphLnR5cGUmJmEudHlwZS50ZXh0IT09IiImJkw1KGYpKGEudHlwZS50ZXh0LEUsYS54LGEueSthLnR5cGUuWSxhLndpZHRoLGEuaGVpZ2h0LHtmaWxsOm0sImZvbnQtc3R5bGUiOiJpdGFsaWMifSxJKSxhLmRlc2NyJiZhLmRlc2NyLnRleHQhPT0iIiYmKEk9Zi5wZXJzb25Gb250KCksSS5mb250Q29sb3I9bSxMNShmKShhLmRlc2NyLnRleHQsRSxhLngsYS55K2EuZGVzY3IuWSxhLndpZHRoLGEuaGVpZ2h0LHtmaWxsOm19LEkpKSxhLmhlaWdodH0sVkRlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImRhdGFiYXNlIikuYXR0cigiZmlsbC1ydWxlIiwiZXZlbm9kZCIpLmF0dHIoImNsaXAtcnVsZSIsImV2ZW5vZGQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyLjI1OC4wMDFsLjI1Ni4wMDQuMjU1LjAwNS4yNTMuMDA4LjI1MS4wMS4yNDkuMDEyLjI0Ny4wMTUuMjQ2LjAxNi4yNDIuMDE5LjI0MS4wMi4yMzkuMDIzLjIzNi4wMjQuMjMzLjAyNy4yMzEuMDI4LjIyOS4wMzEuMjI1LjAzMi4yMjMuMDM0LjIyLjAzNi4yMTcuMDM4LjIxNC4wNC4yMTEuMDQxLjIwOC4wNDMuMjA1LjA0NS4yMDEuMDQ2LjE5OC4wNDguMTk0LjA1LjE5MS4wNTEuMTg3LjA1My4xODMuMDU0LjE4LjA1Ni4xNzUuMDU3LjE3Mi4wNTkuMTY4LjA2LjE2My4wNjEuMTYuMDYzLjE1NS4wNjQuMTUuMDY2LjA3NC4wMzMuMDczLjAzMy4wNzEuMDM0LjA3LjAzNC4wNjkuMDM1LjA2OC4wMzUuMDY3LjAzNS4wNjYuMDM1LjA2NC4wMzYuMDY0LjAzNi4wNjIuMDM2LjA2LjAzNi4wNi4wMzcuMDU4LjAzNy4wNTguMDM3LjA1NS4wMzguMDU1LjAzOC4wNTMuMDM4LjA1Mi4wMzguMDUxLjAzOS4wNS4wMzkuMDQ4LjAzOS4wNDcuMDM5LjA0NS4wNC4wNDQuMDQuMDQzLjA0LjA0MS4wNC4wNC4wNDEuMDM5LjA0MS4wMzcuMDQxLjAzNi4wNDEuMDM0LjA0MS4wMzMuMDQyLjAzMi4wNDIuMDMuMDQyLjAyOS4wNDIuMDI3LjA0Mi4wMjYuMDQzLjAyNC4wNDMuMDIzLjA0My4wMjEuMDQzLjAyLjA0My4wMTguMDQ0LjAxNy4wNDMuMDE1LjA0NC4wMTMuMDQ0LjAxMi4wNDQuMDExLjA0NS4wMDkuMDQ0LjAwNy4wNDUuMDA2LjA0NS4wMDQuMDQ1LjAwMi4wNDUuMDAxLjA0NXYxN2wtLjAwMS4wNDUtLjAwMi4wNDUtLjAwNC4wNDUtLjAwNi4wNDUtLjAwNy4wNDUtLjAwOS4wNDQtLjAxMS4wNDUtLjAxMi4wNDQtLjAxMy4wNDQtLjAxNS4wNDQtLjAxNy4wNDMtLjAxOC4wNDQtLjAyLjA0My0uMDIxLjA0My0uMDIzLjA0My0uMDI0LjA0My0uMDI2LjA0My0uMDI3LjA0Mi0uMDI5LjA0Mi0uMDMuMDQyLS4wMzIuMDQyLS4wMzMuMDQyLS4wMzQuMDQxLS4wMzYuMDQxLS4wMzcuMDQxLS4wMzkuMDQxLS4wNC4wNDEtLjA0MS4wNC0uMDQzLjA0LS4wNDQuMDQtLjA0NS4wNC0uMDQ3LjAzOS0uMDQ4LjAzOS0uMDUuMDM5LS4wNTEuMDM5LS4wNTIuMDM4LS4wNTMuMDM4LS4wNTUuMDM4LS4wNTUuMDM4LS4wNTguMDM3LS4wNTguMDM3LS4wNi4wMzctLjA2LjAzNi0uMDYyLjAzNi0uMDY0LjAzNi0uMDY0LjAzNi0uMDY2LjAzNS0uMDY3LjAzNS0uMDY4LjAzNS0uMDY5LjAzNS0uMDcuMDM0LS4wNzEuMDM0LS4wNzMuMDMzLS4wNzQuMDMzLS4xNS4wNjYtLjE1NS4wNjQtLjE2LjA2My0uMTYzLjA2MS0uMTY4LjA2LS4xNzIuMDU5LS4xNzUuMDU3LS4xOC4wNTYtLjE4My4wNTQtLjE4Ny4wNTMtLjE5MS4wNTEtLjE5NC4wNS0uMTk4LjA0OC0uMjAxLjA0Ni0uMjA1LjA0NS0uMjA4LjA0My0uMjExLjA0MS0uMjE0LjA0LS4yMTcuMDM4LS4yMi4wMzYtLjIyMy4wMzQtLjIyNS4wMzItLjIyOS4wMzEtLjIzMS4wMjgtLjIzMy4wMjctLjIzNi4wMjQtLjIzOS4wMjMtLjI0MS4wMi0uMjQyLjAxOS0uMjQ2LjAxNi0uMjQ3LjAxNS0uMjQ5LjAxMi0uMjUxLjAxLS4yNTMuMDA4LS4yNTUuMDA1LS4yNTYuMDA0LS4yNTguMDAxLS4yNTgtLjAwMS0uMjU2LS4wMDQtLjI1NS0uMDA1LS4yNTMtLjAwOC0uMjUxLS4wMS0uMjQ5LS4wMTItLjI0Ny0uMDE1LS4yNDUtLjAxNi0uMjQzLS4wMTktLjI0MS0uMDItLjIzOC0uMDIzLS4yMzYtLjAyNC0uMjM0LS4wMjctLjIzMS0uMDI4LS4yMjgtLjAzMS0uMjI2LS4wMzItLjIyMy0uMDM0LS4yMi0uMDM2LS4yMTctLjAzOC0uMjE0LS4wNC0uMjExLS4wNDEtLjIwOC0uMDQzLS4yMDQtLjA0NS0uMjAxLS4wNDYtLjE5OC0uMDQ4LS4xOTUtLjA1LS4xOS0uMDUxLS4xODctLjA1My0uMTg0LS4wNTQtLjE3OS0uMDU2LS4xNzYtLjA1Ny0uMTcyLS4wNTktLjE2Ny0uMDYtLjE2NC0uMDYxLS4xNTktLjA2My0uMTU1LS4wNjQtLjE1MS0uMDY2LS4wNzQtLjAzMy0uMDcyLS4wMzMtLjA3Mi0uMDM0LS4wNy0uMDM0LS4wNjktLjAzNS0uMDY4LS4wMzUtLjA2Ny0uMDM1LS4wNjYtLjAzNS0uMDY0LS4wMzYtLjA2My0uMDM2LS4wNjItLjAzNi0uMDYxLS4wMzYtLjA2LS4wMzctLjA1OC0uMDM3LS4wNTctLjAzNy0uMDU2LS4wMzgtLjA1NS0uMDM4LS4wNTMtLjAzOC0uMDUyLS4wMzgtLjA1MS0uMDM5LS4wNDktLjAzOS0uMDQ5LS4wMzktLjA0Ni0uMDM5LS4wNDYtLjA0LS4wNDQtLjA0LS4wNDMtLjA0LS4wNDEtLjA0LS4wNC0uMDQxLS4wMzktLjA0MS0uMDM3LS4wNDEtLjAzNi0uMDQxLS4wMzQtLjA0MS0uMDMzLS4wNDItLjAzMi0uMDQyLS4wMy0uMDQyLS4wMjktLjA0Mi0uMDI3LS4wNDItLjAyNi0uMDQzLS4wMjQtLjA0My0uMDIzLS4wNDMtLjAyMS0uMDQzLS4wMi0uMDQzLS4wMTgtLjA0NC0uMDE3LS4wNDMtLjAxNS0uMDQ0LS4wMTMtLjA0NC0uMDEyLS4wNDQtLjAxMS0uMDQ1LS4wMDktLjA0NC0uMDA3LS4wNDUtLjAwNi0uMDQ1LS4wMDQtLjA0NS0uMDAyLS4wNDUtLjAwMS0uMDQ1di0xN2wuMDAxLS4wNDUuMDAyLS4wNDUuMDA0LS4wNDUuMDA2LS4wNDUuMDA3LS4wNDUuMDA5LS4wNDQuMDExLS4wNDUuMDEyLS4wNDQuMDEzLS4wNDQuMDE1LS4wNDQuMDE3LS4wNDMuMDE4LS4wNDQuMDItLjA0My4wMjEtLjA0My4wMjMtLjA0My4wMjQtLjA0My4wMjYtLjA0My4wMjctLjA0Mi4wMjktLjA0Mi4wMy0uMDQyLjAzMi0uMDQyLjAzMy0uMDQyLjAzNC0uMDQxLjAzNi0uMDQxLjAzNy0uMDQxLjAzOS0uMDQxLjA0LS4wNDEuMDQxLS4wNC4wNDMtLjA0LjA0NC0uMDQuMDQ2LS4wNC4wNDYtLjAzOS4wNDktLjAzOS4wNDktLjAzOS4wNTEtLjAzOS4wNTItLjAzOC4wNTMtLjAzOC4wNTUtLjAzOC4wNTYtLjAzOC4wNTctLjAzNy4wNTgtLjAzNy4wNi0uMDM3LjA2MS0uMDM2LjA2Mi0uMDM2LjA2My0uMDM2LjA2NC0uMDM2LjA2Ni0uMDM1LjA2Ny0uMDM1LjA2OC0uMDM1LjA2OS0uMDM1LjA3LS4wMzQuMDcyLS4wMzQuMDcyLS4wMzMuMDc0LS4wMzMuMTUxLS4wNjYuMTU1LS4wNjQuMTU5LS4wNjMuMTY0LS4wNjEuMTY3LS4wNi4xNzItLjA1OS4xNzYtLjA1Ny4xNzktLjA1Ni4xODQtLjA1NC4xODctLjA1My4xOS0uMDUxLjE5NS0uMDUuMTk4LS4wNDguMjAxLS4wNDYuMjA0LS4wNDUuMjA4LS4wNDMuMjExLS4wNDEuMjE0LS4wNC4yMTctLjAzOC4yMi0uMDM2LjIyMy0uMDM0LjIyNi0uMDMyLjIyOC0uMDMxLjIzMS0uMDI4LjIzNC0uMDI3LjIzNi0uMDI0LjIzOC0uMDIzLjI0MS0uMDIuMjQzLS4wMTkuMjQ1LS4wMTYuMjQ3LS4wMTUuMjQ5LS4wMTIuMjUxLS4wMS4yNTMtLjAwOC4yNTUtLjAwNS4yNTYtLjAwNC4yNTgtLjAwMS4yNTguMDAxem0tOS4yNTggMjAuNDk5di4wMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjIuMDA1LjAyMS4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNS4wMjMuMDI0LjAyNC4wMjUuMDUyLjA0OS4wNTYuMDUuMDYxLjA1MS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUxLjA3OS4wNTIuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUxLjEwNS4wNTIuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDguMTQ0LjA0OS4xNDcuMDQ3LjE1Mi4wNDcuMTU1LjA0Ny4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0MS4xNzguMDQxLjE4My4wMzkuMTg3LjAzOS4xOS4wMzcuMTk0LjAzNS4xOTcuMDM1LjIwMi4wMzMuMjA0LjAzMS4yMDkuMDMuMjEyLjAyOS4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTUuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA1LjI1Ni4wMDQuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjEuMjI0LS4wMjQuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMxLjIwMi0uMDM0LjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDQuMTc5LS4wNC4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTMuMDgzLS4wNTEuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNC4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMjdsLS4wNzcuMDU1LS4wOC4wNTMtLjA4My4wNTQtLjA4NS4wNTMtLjA4Ny4wNTItLjA5LjA1Mi0uMDkzLjA1MS0uMDk1LjA1LS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ1LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDQtLjEzMi4wMzgtLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzctLjEzOS4wMzUtLjE0Mi4wMzUtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjktLjE1NC4wMjctLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAxLS4xNzkuMDA4LS4xNzkuMDA4LS4xODEuMDA2LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDYtLjE3OS0uMDA4LS4xNzktLjAwOC0uMTc4LS4wMS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjctLjE1My0uMDI5LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNS0uMTQtLjAzNS0uMTM3LS4wMzctLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzgtLjEzLS4wNC0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0Mi0uMTItLjA0NC0uMTE3LS4wNDMtLjExNi0uMDQ1LS4xMTMtLjA0NS0uMTEyLS4wNDYtLjEwOS0uMDQ3LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUtLjA5My0uMDUyLS4wOS0uMDUxLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEyN3ptMC01LjY1NHYuMDExbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIyLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDI0LjAxNi4wMjMuMDE3LjAyNC4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI0LjAyMy4wMjUuMDI0LjAyNC4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTIuMTEuMDUxLjExNC4wNTEuMTE5LjA1Mi4xMjMuMDUuMTI3LjA1MS4xMzEuMDUuMTM1LjA0OS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0NC4xNzEuMDQyLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjIuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEyLjI0MS0uMDE1LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA1LjEzNi0uMDQ5LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1MS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNS4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDIzLjAxMy0uMDI0LjAxMi0uMDIyLjAxLS4wMjMuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMS4wMDQtLjAyMi4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMzlsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTQtLjA4NS4wNTItLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQ0LS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNS0uMTQzLjAzMy0uMTQ0LjAzMy0uMTQ3LjAzMy0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDA5LS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA3LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDctLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMDktLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzMtLjE0NS0uMDMzLS4xNDMtLjAzMy0uMTQxLS4wMzUtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUxLS4wODctLjA1My0uMDg1LS4wNTItLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEzOXptMC01LjY2NnYuMDExbC4wMDEuMDIuMDAzLjAyMi4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMS4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDI0LjAxOC4wMjMuMDE5LjAyNC4wMjEuMDI1LjAyMi4wMjQuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1MS4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNy4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMy4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNDkuMTMxLS4wNTEuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMi4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjE1M2wtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1My0uMDg1LjA1My0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ4LS4xMDUuMDQ4LS4xMDYuMDQ4LS4xMDkuMDQ2LS4xMTEuMDQ2LS4xMTQuMDQ2LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDMtLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM0LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMyLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI0LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIzLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMS0uMTc4LjAxLS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA2LS4xODIuMDA2LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAxLS4xODUuMDAxLS4xODUtLjAwMS0uMTg0LS4wMDEtLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDYtLjE4MS0uMDA2LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDEtLjE3Ni0uMDEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjMtLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjQtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMyLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNC0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQxLS4xMjYtLjA0MS0uMTI0LS4wNDEtLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ4LS4xMDUtLjA0OC0uMTAyLS4wNDgtLjEtLjA1LS4wOTctLjA0OS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUyLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDUzLS4wOC0uMDU0LS4wNzctLjA1NHY0LjE1M3ptOC43NC04LjE3OWwtLjI1Ny4wMDQtLjI1NC4wMDUtLjI1LjAwOC0uMjQ3LjAxMS0uMjQ0LjAxMi0uMjQxLjAxNC0uMjM3LjAxNi0uMjMzLjAxOC0uMjMxLjAyMS0uMjI2LjAyMi0uMjI0LjAyMy0uMjIuMDI2LS4yMTYuMDI3LS4yMTIuMDI4LS4yMS4wMzEtLjIwNS4wMzItLjIwMi4wMzMtLjE5OC4wMzQtLjE5NC4wMzYtLjE5MS4wMzgtLjE4Ny4wMzgtLjE4My4wNC0uMTc5LjA0MS0uMTc1LjA0Mi0uMTcyLjA0My0uMTY4LjA0My0uMTYzLjA0NS0uMTYuMDQ2LS4xNTUuMDQ2LS4xNTIuMDQ4LS4xNDguMDQ4LS4xNDMuMDQ4LS4xMzkuMDQ5LS4xMzYuMDUtLjEzMS4wNS0uMTI2LjA1MS0uMTIzLjA1MS0uMTE4LjA1MS0uMTE0LjA1Mi0uMTEuMDUyLS4xMDYuMDUyLS4xMDEuMDUyLS4wOTYuMDUyLS4wOTIuMDUyLS4wODguMDUyLS4wODMuMDUyLS4wNzkuMDUyLS4wNzQuMDUxLS4wNy4wNTItLjA2NS4wNTEtLjA2LjA1LS4wNTYuMDUtLjA1MS4wNS0uMDIzLjAyNS0uMDIzLjAyNC0uMDIxLjAyNC0uMDIuMDI1LS4wMTkuMDI0LS4wMTguMDI0LS4wMTcuMDIzLS4wMTUuMDI0LS4wMTQuMDIzLS4wMTMuMDIzLS4wMTIuMDIzLS4wMS4wMjMtLjAxLjAyMi0uMDA4LjAyMi0uMDA2LjAyMy0uMDA2LjAyMS0uMDA0LjAyMi0uMDA0LjAyMS0uMDAxLjAyMS0uMDAxLjAyMS4wMDEuMDIxLjAwMS4wMjEuMDA0LjAyMS4wMDQuMDIyLjAwNi4wMjEuMDA2LjAyMy4wMDguMDIyLjAxLjAyMi4wMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNC4wMjMuMDE1LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMi4wMjUuMDIxLjAyNC4wMjMuMDI0LjAyMy4wMjUuMDUxLjA1LjA1Ni4wNS4wNi4wNS4wNjUuMDUxLjA3LjA1Mi4wNzQuMDUxLjA3OS4wNTIuMDgzLjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk2LjA1Mi4xMDEuMDUyLjEwNi4wNTIuMTEuMDUyLjExNC4wNTIuMTE4LjA1MS4xMjMuMDUxLjEyNi4wNTEuMTMxLjA1LjEzNi4wNS4xMzkuMDQ5LjE0My4wNDguMTQ4LjA0OC4xNTIuMDQ4LjE1NS4wNDYuMTYuMDQ2LjE2My4wNDUuMTY4LjA0My4xNzIuMDQzLjE3NS4wNDIuMTc5LjA0MS4xODMuMDQuMTg3LjAzOC4xOTEuMDM4LjE5NC4wMzYuMTk4LjAzNC4yMDIuMDMzLjIwNS4wMzIuMjEuMDMxLjIxMi4wMjguMjE2LjAyNy4yMi4wMjYuMjI0LjAyMy4yMjYuMDIyLjIzMS4wMjEuMjMzLjAxOC4yMzcuMDE2LjI0MS4wMTQuMjQ0LjAxMi4yNDcuMDExLjI1LjAwOC4yNTQuMDA1LjI1Ny4wMDQuMjYuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMi4yMjQtLjAyMy4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzguMTg3LS4wMzguMTgzLS4wNC4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0My4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ4LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNC4wMi0uMDI1LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDIzLjAxNS0uMDI0LjAxNC0uMDIzLjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMy4wMDYtLjAyMS4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDQtLjAyMS0uMDA0LS4wMjItLjAwNi0uMDIxLS4wMDYtLjAyMy0uMDA4LS4wMjItLjAxLS4wMjItLjAxLS4wMjMtLjAxMi0uMDIzLS4wMTMtLjAyMy0uMDE0LS4wMjMtLjAxNS0uMDI0LS4wMTctLjAyMy0uMDE4LS4wMjQtLjAxOS0uMDI0LS4wMi0uMDI1LS4wMjEtLjAyNC0uMDIzLS4wMjQtLjAyMy0uMDI1LS4wNTEtLjA1LS4wNTYtLjA1LS4wNi0uMDUtLjA2NS0uMDUxLS4wNy0uMDUyLS4wNzQtLjA1MS0uMDc5LS4wNTItLjA4My0uMDUyLS4wODgtLjA1Mi0uMDkyLS4wNTItLjA5Ni0uMDUyLS4xMDEtLjA1Mi0uMTA2LS4wNTItLjExLS4wNTItLjExNC0uMDUyLS4xMTgtLjA1MS0uMTIzLS4wNTEtLjEyNi0uMDUxLS4xMzEtLjA1LS4xMzYtLjA1LS4xMzktLjA0OS0uMTQzLS4wNDgtLjE0OC0uMDQ4LS4xNTItLjA0OC0uMTU1LS4wNDYtLjE2LS4wNDYtLjE2My0uMDQ1LS4xNjgtLjA0My0uMTcyLS4wNDMtLjE3NS0uMDQyLS4xNzktLjA0MS0uMTgzLS4wNC0uMTg3LS4wMzgtLjE5MS0uMDM4LS4xOTQtLjAzNi0uMTk4LS4wMzQtLjIwMi0uMDMzLS4yMDUtLjAzMi0uMjEtLjAzMS0uMjEyLS4wMjgtLjIxNi0uMDI3LS4yMi0uMDI2LS4yMjQtLjAyMy0uMjI2LS4wMjItLjIzMS0uMDIxLS4yMzMtLjAxOC0uMjM3LS4wMTYtLjI0MS0uMDE0LS4yNDQtLjAxMi0uMjQ3LS4wMTEtLjI1LS4wMDgtLjI1NC0uMDA1LS4yNTctLjAwNC0uMjYtLjAwMS0uMjYuMDAxeiIpfSxHRGU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiY29tcHV0ZXIiKS5hdHRyKCJ3aWR0aCIsIjI0IikuYXR0cigiaGVpZ2h0IiwiMjQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTIgMnYxM2gyMHYtMTNoLTIwem0xOCAxMWgtMTZ2LTloMTZ2OXptLTEwLjIyOCA2bC40NjYtMWgzLjUyNGwuNDY3IDFoLTQuNDU3em0xNC4yMjggM2gtMjRsMi02aDIuMTA0bC0xLjMzIDRoMTguNDVsLTEuMjk3LTRoMi4wNzNsMiA2em0tNS0xMGgtMTR2LTdoMTR2N3oiKX0sVURlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImNsb2NrIikuYXR0cigid2lkdGgiLCIyNCIpLmF0dHIoImhlaWdodCIsIjI0IikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0xMiAyYzUuNTE0IDAgMTAgNC40ODYgMTAgMTBzLTQuNDg2IDEwLTEwIDEwLTEwLTQuNDg2LTEwLTEwIDQuNDg2LTEwIDEwLTEwem0wLTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJzNS4zNzMgMTIgMTIgMTIgMTItNS4zNzMgMTItMTItNS4zNzMtMTItMTItMTJ6bTUuODQ4IDEyLjQ1OWMuMjAyLjAzOC4yMDIuMzMzLjAwMS4zNzItMS45MDcuMzYxLTYuMDQ1IDEuMTExLTYuNTQ3IDEuMTExLS43MTkgMC0xLjMwMS0uNTgyLTEuMzAxLTEuMzAxIDAtLjUxMi43Ny01LjQ0NyAxLjEyNS03LjQ0NS4wMzQtLjE5Mi4zMTItLjE4MS4zNDMuMDE0bC45ODUgNi4yMzggNS4zOTQgMS4wMTF6Iil9LFdEZT1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpfSxZRGU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYXJyb3dlbmQiKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTAgMCBMIDAgNSBMIDEwIDEwIHoiKX0sS0RlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImZpbGxlZC1oZWFkIikuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LFhEZT1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJzZXF1ZW5jZW51bWJlciIpLmF0dHIoInJlZlgiLDE1KS5hdHRyKCJyZWZZIiwxNSkuYXR0cigibWFya2VyV2lkdGgiLDYwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMTUpLmF0dHIoImN5IiwxNSkuYXR0cigiciIsNil9LFFEZT1mdW5jdGlvbihpKXtjb25zdCBmPWkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNyb3NzaGVhZCIpLmF0dHIoIm1hcmtlcldpZHRoIiwxNSkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXR0cigicmVmWCIsMTYpLmF0dHIoInJlZlkiLDQpO2YuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigic3Ryb2tlIiwiIzAwMDAwMCIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMCwgMCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoImQiLCJNIDksMiBWIDYgTDE2LDQgWiIpLGYuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2UiLCIjMDAwMDAwIikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwLCAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigiZCIsIk0gMCwxIEwgNiw3IE0gNiwxIEwgMCw3Iil9LFpEZT0oaSxhKT0+KHtmb250RmFtaWx5OmlbYSsiRm9udEZhbWlseSJdLGZvbnRTaXplOmlbYSsiRm9udFNpemUiXSxmb250V2VpZ2h0OmlbYSsiRm9udFdlaWdodCJdfSksTDU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHcsbSxiLEUsXyxBLEkpe2NvbnN0IEI9bS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixiK18vMikuYXR0cigieSIsRStBLzIrNSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCh3KTtwKEIsSSl9ZnVuY3Rpb24gYSh3LG0sYixFLF8sQSxJLEIpe2NvbnN0e2ZvbnRTaXplOk4sZm9udEZhbWlseTpSLGZvbnRXZWlnaHQ6en09QixXPXcuc3BsaXQoS3IubGluZUJyZWFrUmVnZXgpO2ZvcihsZXQgZXQ9MDtldDxXLmxlbmd0aDtldCsrKXtjb25zdCBzdD1ldCpOLU4qKFcubGVuZ3RoLTEpLzIsYXQ9bS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixiK18vMikuYXR0cigieSIsRSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1zaXplIixOKS5zdHlsZSgiZm9udC13ZWlnaHQiLHopLnN0eWxlKCJmb250LWZhbWlseSIsUik7YXQuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoImR5IixzdCkudGV4dChXW2V0XSkuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWF0aGVtYXRpY2FsIikscChhdCxJKX19ZnVuY3Rpb24gZih3LG0sYixFLF8sQSxJLEIpe2NvbnN0IE49bS5hcHBlbmQoInN3aXRjaCIpLHo9Ti5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixiKS5hdHRyKCJ5IixFKS5hdHRyKCJ3aWR0aCIsXykuYXR0cigiaGVpZ2h0IixBKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTt6LmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHcpLGEodyxOLGIsRSxfLEEsSSxCKSxwKHosSSl9ZnVuY3Rpb24gcCh3LG0pe2Zvcihjb25zdCBiIGluIG0pbS5oYXNPd25Qcm9wZXJ0eShiKSYmdy5hdHRyKGIsbVtiXSl9cmV0dXJuIGZ1bmN0aW9uKHcpe3JldHVybiB3LnRleHRQbGFjZW1lbnQ9PT0iZm8iP2Y6dy50ZXh0UGxhY2VtZW50PT09Im9sZCI/aTphfX0oKSxiMz17ZHJhd1JlY3Q6amR0LGRyYXdCb3VuZGFyeTpxRGUsZHJhd0M0U2hhcGU6SERlLGRyYXdSZWxzOnpEZSxkcmF3SW1hZ2U6eVB0LGluc2VydEFycm93SGVhZDpXRGUsaW5zZXJ0QXJyb3dFbmQ6WURlLGluc2VydEFycm93RmlsbGVkSGVhZDpLRGUsaW5zZXJ0RHluYW1pY051bWJlcjpYRGUsaW5zZXJ0QXJyb3dDcm9zc0hlYWQ6UURlLGluc2VydERhdGFiYXNlSWNvbjpWRGUsaW5zZXJ0Q29tcHV0ZXJJY29uOkdEZSxpbnNlcnRDbG9ja0ljb246VURlfTtsZXQgdFk9MCxlWT0wLHhQdD00LCRkdD0yO1hXLnl5PUJkdDtsZXQgZHM9e307Y2xhc3Mga1B0e2NvbnN0cnVjdG9yKGEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9e30sdGhpcy5kYXRhLnN0YXJ0eD12b2lkIDAsdGhpcy5kYXRhLnN0b3B4PXZvaWQgMCx0aGlzLmRhdGEuc3RhcnR5PXZvaWQgMCx0aGlzLmRhdGEuc3RvcHk9dm9pZCAwLHRoaXMuZGF0YS53aWR0aExpbWl0PXZvaWQgMCx0aGlzLm5leHREYXRhPXt9LHRoaXMubmV4dERhdGEuc3RhcnR4PXZvaWQgMCx0aGlzLm5leHREYXRhLnN0b3B4PXZvaWQgMCx0aGlzLm5leHREYXRhLnN0YXJ0eT12b2lkIDAsdGhpcy5uZXh0RGF0YS5zdG9weT12b2lkIDAsdGhpcy5uZXh0RGF0YS5jbnQ9MCx6ZHQoYS5kYi5nZXRDb25maWcoKSl9c2V0RGF0YShhLGYscCx3KXt0aGlzLm5leHREYXRhLnN0YXJ0eD10aGlzLmRhdGEuc3RhcnR4PWEsdGhpcy5uZXh0RGF0YS5zdG9weD10aGlzLmRhdGEuc3RvcHg9Zix0aGlzLm5leHREYXRhLnN0YXJ0eT10aGlzLmRhdGEuc3RhcnR5PXAsdGhpcy5uZXh0RGF0YS5zdG9weT10aGlzLmRhdGEuc3RvcHk9d311cGRhdGVWYWwoYSxmLHAsdyl7YVtmXT09PXZvaWQgMD9hW2ZdPXA6YVtmXT13KHAsYVtmXSl9aW5zZXJ0KGEpe3RoaXMubmV4dERhdGEuY250PXRoaXMubmV4dERhdGEuY250KzE7bGV0IGY9dGhpcy5uZXh0RGF0YS5zdGFydHg9PT10aGlzLm5leHREYXRhLnN0b3B4P3RoaXMubmV4dERhdGEuc3RvcHgrYS5tYXJnaW46dGhpcy5uZXh0RGF0YS5zdG9weCthLm1hcmdpbioyLHA9ZithLndpZHRoLHc9dGhpcy5uZXh0RGF0YS5zdGFydHkrYS5tYXJnaW4qMixtPXcrYS5oZWlnaHQ7KGY+PXRoaXMuZGF0YS53aWR0aExpbWl0fHxwPj10aGlzLmRhdGEud2lkdGhMaW1pdHx8dGhpcy5uZXh0RGF0YS5jbnQ+eFB0KSYmKGY9dGhpcy5uZXh0RGF0YS5zdGFydHgrYS5tYXJnaW4rZHMubmV4dExpbmVQYWRkaW5nWCx3PXRoaXMubmV4dERhdGEuc3RvcHkrYS5tYXJnaW4qMix0aGlzLm5leHREYXRhLnN0b3B4PXA9ZithLndpZHRoLHRoaXMubmV4dERhdGEuc3RhcnR5PXRoaXMubmV4dERhdGEuc3RvcHksdGhpcy5uZXh0RGF0YS5zdG9weT1tPXcrYS5oZWlnaHQsdGhpcy5uZXh0RGF0YS5jbnQ9MSksYS54PWYsYS55PXcsdGhpcy51cGRhdGVWYWwodGhpcy5kYXRhLCJzdGFydHgiLGYsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RhcnR5Iix3LE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsInN0b3B4IixwLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsInN0b3B5IixtLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbCh0aGlzLm5leHREYXRhLCJzdGFydHgiLGYsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHRoaXMubmV4dERhdGEsInN0YXJ0eSIsdyxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RvcHgiLHAsTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHRoaXMubmV4dERhdGEsInN0b3B5IixtLE1hdGgubWF4KX1pbml0KGEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwLHdpZHRoTGltaXQ6dm9pZCAwfSx0aGlzLm5leHREYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMCxjbnQ6MH0semR0KGEuZGIuZ2V0Q29uZmlnKCkpfWJ1bXBMYXN0TWFyZ2luKGEpe3RoaXMuZGF0YS5zdG9weCs9YSx0aGlzLmRhdGEuc3RvcHkrPWF9fWNvbnN0IHpkdD1mdW5jdGlvbihpKXtaMShkcyxpKSxpLmZvbnRGYW1pbHkmJihkcy5wZXJzb25Gb250RmFtaWx5PWRzLnN5c3RlbUZvbnRGYW1pbHk9ZHMubWVzc2FnZUZvbnRGYW1pbHk9aS5mb250RmFtaWx5KSxpLmZvbnRTaXplJiYoZHMucGVyc29uRm9udFNpemU9ZHMuc3lzdGVtRm9udFNpemU9ZHMubWVzc2FnZUZvbnRTaXplPWkuZm9udFNpemUpLGkuZm9udFdlaWdodCYmKGRzLnBlcnNvbkZvbnRXZWlnaHQ9ZHMuc3lzdGVtRm9udFdlaWdodD1kcy5tZXNzYWdlRm9udFdlaWdodD1pLmZvbnRXZWlnaHQpfSxoRj0oaSxhKT0+KHtmb250RmFtaWx5OmlbYSsiRm9udEZhbWlseSJdLGZvbnRTaXplOmlbYSsiRm9udFNpemUiXSxmb250V2VpZ2h0OmlbYSsiRm9udFdlaWdodCJdfSksblk9aT0+KHtmb250RmFtaWx5OmkuYm91bmRhcnlGb250RmFtaWx5LGZvbnRTaXplOmkuYm91bmRhcnlGb250U2l6ZSxmb250V2VpZ2h0OmkuYm91bmRhcnlGb250V2VpZ2h0fSksSkRlPWk9Pih7Zm9udEZhbWlseTppLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOmkubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6aS5tZXNzYWdlRm9udFdlaWdodH0pO2Z1bmN0aW9uIGNtKGksYSxmLHAsdyl7aWYoIWFbaV0ud2lkdGgpaWYoZilhW2ldLnRleHQ9VUl0KGFbaV0udGV4dCx3LHApLGFbaV0udGV4dExpbmVzPWFbaV0udGV4dC5zcGxpdChLci5saW5lQnJlYWtSZWdleCkubGVuZ3RoLGFbaV0ud2lkdGg9dyxhW2ldLmhlaWdodD1vZHQoYVtpXS50ZXh0LHApO2Vsc2V7bGV0IG09YVtpXS50ZXh0LnNwbGl0KEtyLmxpbmVCcmVha1JlZ2V4KTthW2ldLnRleHRMaW5lcz1tLmxlbmd0aDtsZXQgYj0wO2FbaV0uaGVpZ2h0PTAsYVtpXS53aWR0aD0wO2Zvcihjb25zdCBFIG9mIG0pYVtpXS53aWR0aD1NYXRoLm1heChkMyhFLHApLGFbaV0ud2lkdGgpLGI9b2R0KEUscCksYVtpXS5oZWlnaHQ9YVtpXS5oZWlnaHQrYn19Y29uc3QgRVB0PWZ1bmN0aW9uKGksYSxmKXthLng9Zi5kYXRhLnN0YXJ0eCxhLnk9Zi5kYXRhLnN0YXJ0eSxhLndpZHRoPWYuZGF0YS5zdG9weC1mLmRhdGEuc3RhcnR4LGEuaGVpZ2h0PWYuZGF0YS5zdG9weS1mLmRhdGEuc3RhcnR5LGEubGFiZWwueT1kcy5jNFNoYXBlTWFyZ2luLTM1O2xldCBwPWEud3JhcCYmZHMud3JhcCx3PW5ZKGRzKTt3LmZvbnRTaXplPXcuZm9udFNpemUrMix3LmZvbnRXZWlnaHQ9ImJvbGQiO2xldCBtPWQzKGEubGFiZWwudGV4dCx3KTtjbSgibGFiZWwiLGEscCx3LG0pLGIzLmRyYXdCb3VuZGFyeShpLGEsZHMpfSxUUHQ9ZnVuY3Rpb24oaSxhLGYscCl7bGV0IHc9MDtmb3IoY29uc3QgbSBvZiBwKXt3PTA7Y29uc3QgYj1mW21dO2xldCBFPWhGKGRzLGIudHlwZUM0U2hhcGUudGV4dCk7c3dpdGNoKEUuZm9udFNpemU9RS5mb250U2l6ZS0yLGIudHlwZUM0U2hhcGUud2lkdGg9ZDMoIsKrIitiLnR5cGVDNFNoYXBlLnRleHQrIsK7IixFKSxiLnR5cGVDNFNoYXBlLmhlaWdodD1FLmZvbnRTaXplKzIsYi50eXBlQzRTaGFwZS5ZPWRzLmM0U2hhcGVQYWRkaW5nLHc9Yi50eXBlQzRTaGFwZS5ZK2IudHlwZUM0U2hhcGUuaGVpZ2h0LTQsYi5pbWFnZT17d2lkdGg6MCxoZWlnaHQ6MCxZOjB9LGIudHlwZUM0U2hhcGUudGV4dCl7Y2FzZSJwZXJzb24iOmNhc2UiZXh0ZXJuYWxfcGVyc29uIjpiLmltYWdlLndpZHRoPTQ4LGIuaW1hZ2UuaGVpZ2h0PTQ4LGIuaW1hZ2UuWT13LHc9Yi5pbWFnZS5ZK2IuaW1hZ2UuaGVpZ2h0O2JyZWFrfWIuc3ByaXRlJiYoYi5pbWFnZS53aWR0aD00OCxiLmltYWdlLmhlaWdodD00OCxiLmltYWdlLlk9dyx3PWIuaW1hZ2UuWStiLmltYWdlLmhlaWdodCk7bGV0IF89Yi53cmFwJiZkcy53cmFwLEE9ZHMud2lkdGgtZHMuYzRTaGFwZVBhZGRpbmcqMixJPWhGKGRzLGIudHlwZUM0U2hhcGUudGV4dCk7aWYoSS5mb250U2l6ZT1JLmZvbnRTaXplKzIsSS5mb250V2VpZ2h0PSJib2xkIixjbSgibGFiZWwiLGIsXyxJLEEpLGIubGFiZWwuWT13Kzgsdz1iLmxhYmVsLlkrYi5sYWJlbC5oZWlnaHQsYi50eXBlJiZiLnR5cGUudGV4dCE9PSIiKXtiLnR5cGUudGV4dD0iWyIrYi50eXBlLnRleHQrIl0iO2xldCBSPWhGKGRzLGIudHlwZUM0U2hhcGUudGV4dCk7Y20oInR5cGUiLGIsXyxSLEEpLGIudHlwZS5ZPXcrNSx3PWIudHlwZS5ZK2IudHlwZS5oZWlnaHR9ZWxzZSBpZihiLnRlY2huJiZiLnRlY2huLnRleHQhPT0iIil7Yi50ZWNobi50ZXh0PSJbIitiLnRlY2huLnRleHQrIl0iO2xldCBSPWhGKGRzLGIudGVjaG4udGV4dCk7Y20oInRlY2huIixiLF8sUixBKSxiLnRlY2huLlk9dys1LHc9Yi50ZWNobi5ZK2IudGVjaG4uaGVpZ2h0fWxldCBCPXcsTj1iLmxhYmVsLndpZHRoO2lmKGIuZGVzY3ImJmIuZGVzY3IudGV4dCE9PSIiKXtsZXQgUj1oRihkcyxiLnR5cGVDNFNoYXBlLnRleHQpO2NtKCJkZXNjciIsYixfLFIsQSksYi5kZXNjci5ZPXcrMjAsdz1iLmRlc2NyLlkrYi5kZXNjci5oZWlnaHQsTj1NYXRoLm1heChiLmxhYmVsLndpZHRoLGIuZGVzY3Iud2lkdGgpLEI9dy1iLmRlc2NyLnRleHRMaW5lcyo1fU49Titkcy5jNFNoYXBlUGFkZGluZyxiLndpZHRoPU1hdGgubWF4KGIud2lkdGh8fGRzLndpZHRoLE4sZHMud2lkdGgpLGIuaGVpZ2h0PU1hdGgubWF4KGIuaGVpZ2h0fHxkcy5oZWlnaHQsQixkcy5oZWlnaHQpLGIubWFyZ2luPWIubWFyZ2lufHxkcy5jNFNoYXBlTWFyZ2luLGkuaW5zZXJ0KGIpLGIzLmRyYXdDNFNoYXBlKGEsYixkcyl9aS5idW1wTGFzdE1hcmdpbihkcy5jNFNoYXBlTWFyZ2luKX07bGV0IHJ3PWNsYXNze2NvbnN0cnVjdG9yKGEsZil7dGhpcy54PWEsdGhpcy55PWZ9fSxDUHQ9ZnVuY3Rpb24oaSxhKXtsZXQgZj1pLngscD1pLnksdz1hLngsbT1hLnksYj1mK2kud2lkdGgvMixFPXAraS5oZWlnaHQvMixfPU1hdGguYWJzKGYtdyksQT1NYXRoLmFicyhwLW0pLEk9QS9fLEI9aS5oZWlnaHQvaS53aWR0aCxOPW51bGw7cmV0dXJuIHA9PW0mJmY8dz9OPW5ldyBydyhmK2kud2lkdGgsRSk6cD09bSYmZj53P049bmV3IHJ3KGYsRSk6Zj09dyYmcDxtP049bmV3IHJ3KGIscCtpLmhlaWdodCk6Zj09dyYmcD5tJiYoTj1uZXcgcncoYixwKSksZj53JiZwPG0/Qj49ST9OPW5ldyBydyhmLEUrSSppLndpZHRoLzIpOk49bmV3IHJ3KGItXy9BKmkuaGVpZ2h0LzIscCtpLmhlaWdodCk6Zjx3JiZwPG0/Qj49ST9OPW5ldyBydyhmK2kud2lkdGgsRStJKmkud2lkdGgvMik6Tj1uZXcgcncoYitfL0EqaS5oZWlnaHQvMixwK2kuaGVpZ2h0KTpmPHcmJnA+bT9CPj1JP049bmV3IHJ3KGYraS53aWR0aCxFLUkqaS53aWR0aC8yKTpOPW5ldyBydyhiK2kuaGVpZ2h0LzIqXy9BLHApOmY+dyYmcD5tJiYoQj49ST9OPW5ldyBydyhmLEUtaS53aWR0aC8yKkkpOk49bmV3IHJ3KGItaS5oZWlnaHQvMipfL0EscCkpLE59LHRJZT1mdW5jdGlvbihpLGEpe2xldCBmPXt4OjAseTowfTtmLng9YS54K2Eud2lkdGgvMixmLnk9YS55K2EuaGVpZ2h0LzI7bGV0IHA9Q1B0KGksZik7Zi54PWkueCtpLndpZHRoLzIsZi55PWkueStpLmhlaWdodC8yO2xldCB3PUNQdChhLGYpO3JldHVybntzdGFydFBvaW50OnAsZW5kUG9pbnQ6d319O2NvbnN0IGVJZT1mdW5jdGlvbihpLGEsZixwKXtsZXQgdz0wO2ZvcihsZXQgbSBvZiBhKXt3PXcrMTtsZXQgYj1tLndyYXAmJmRzLndyYXAsRT1KRGUoZHMpO3AuZGIuZ2V0QzRUeXBlKCk9PT0iQzREeW5hbWljIiYmKG0ubGFiZWwudGV4dD13KyI6ICIrbS5sYWJlbC50ZXh0KTtsZXQgQT1kMyhtLmxhYmVsLnRleHQsRSk7Y20oImxhYmVsIixtLGIsRSxBKSxtLnRlY2huJiZtLnRlY2huLnRleHQhPT0iIiYmKEE9ZDMobS50ZWNobi50ZXh0LEUpLGNtKCJ0ZWNobiIsbSxiLEUsQSkpLG0uZGVzY3ImJm0uZGVzY3IudGV4dCE9PSIiJiYoQT1kMyhtLmRlc2NyLnRleHQsRSksY20oImRlc2NyIixtLGIsRSxBKSk7bGV0IEk9ZihtLmZyb20pLEI9ZihtLnRvKSxOPXRJZShJLEIpO20uc3RhcnRQb2ludD1OLnN0YXJ0UG9pbnQsbS5lbmRQb2ludD1OLmVuZFBvaW50fWIzLmRyYXdSZWxzKGksYSxkcyl9O2Z1bmN0aW9uIF9QdChpLGEsZixwLHcpe2xldCBtPW5ldyBrUHQodyk7bS5kYXRhLndpZHRoTGltaXQ9Zi5kYXRhLndpZHRoTGltaXQvTWF0aC5taW4oJGR0LHAubGVuZ3RoKTtmb3IobGV0W2IsRV1vZiBwLmVudHJpZXMoKSl7bGV0IF89MDtFLmltYWdlPXt3aWR0aDowLGhlaWdodDowLFk6MH0sRS5zcHJpdGUmJihFLmltYWdlLndpZHRoPTQ4LEUuaW1hZ2UuaGVpZ2h0PTQ4LEUuaW1hZ2UuWT1fLF89RS5pbWFnZS5ZK0UuaW1hZ2UuaGVpZ2h0KTtsZXQgQT1FLndyYXAmJmRzLndyYXAsST1uWShkcyk7aWYoSS5mb250U2l6ZT1JLmZvbnRTaXplKzIsSS5mb250V2VpZ2h0PSJib2xkIixjbSgibGFiZWwiLEUsQSxJLG0uZGF0YS53aWR0aExpbWl0KSxFLmxhYmVsLlk9Xys4LF89RS5sYWJlbC5ZK0UubGFiZWwuaGVpZ2h0LEUudHlwZSYmRS50eXBlLnRleHQhPT0iIil7RS50eXBlLnRleHQ9IlsiK0UudHlwZS50ZXh0KyJdIjtsZXQgej1uWShkcyk7Y20oInR5cGUiLEUsQSx6LG0uZGF0YS53aWR0aExpbWl0KSxFLnR5cGUuWT1fKzUsXz1FLnR5cGUuWStFLnR5cGUuaGVpZ2h0fWlmKEUuZGVzY3ImJkUuZGVzY3IudGV4dCE9PSIiKXtsZXQgej1uWShkcyk7ei5mb250U2l6ZT16LmZvbnRTaXplLTIsY20oImRlc2NyIixFLEEseixtLmRhdGEud2lkdGhMaW1pdCksRS5kZXNjci5ZPV8rMjAsXz1FLmRlc2NyLlkrRS5kZXNjci5oZWlnaHR9aWYoYj09MHx8YiUkZHQ9PT0wKXtsZXQgej1mLmRhdGEuc3RhcnR4K2RzLmRpYWdyYW1NYXJnaW5YLFc9Zi5kYXRhLnN0b3B5K2RzLmRpYWdyYW1NYXJnaW5ZK187bS5zZXREYXRhKHoseixXLFcpfWVsc2V7bGV0IHo9bS5kYXRhLnN0b3B4IT09bS5kYXRhLnN0YXJ0eD9tLmRhdGEuc3RvcHgrZHMuZGlhZ3JhbU1hcmdpblg6bS5kYXRhLnN0YXJ0eCxXPW0uZGF0YS5zdGFydHk7bS5zZXREYXRhKHoseixXLFcpfW0ubmFtZT1FLmFsaWFzO2xldCBCPXcuZGIuZ2V0QzRTaGFwZUFycmF5KEUuYWxpYXMpLE49dy5kYi5nZXRDNFNoYXBlS2V5cyhFLmFsaWFzKTtOLmxlbmd0aD4wJiZUUHQobSxpLEIsTiksYT1FLmFsaWFzO2xldCBSPXcuZGIuZ2V0Qm91bmRhcnlzKGEpO1IubGVuZ3RoPjAmJl9QdChpLGEsbSxSLHcpLEUuYWxpYXMhPT0iZ2xvYmFsIiYmRVB0KGksRSxtKSxmLmRhdGEuc3RvcHk9TWF0aC5tYXgobS5kYXRhLnN0b3B5K2RzLmM0U2hhcGVNYXJnaW4sZi5kYXRhLnN0b3B5KSxmLmRhdGEuc3RvcHg9TWF0aC5tYXgobS5kYXRhLnN0b3B4K2RzLmM0U2hhcGVNYXJnaW4sZi5kYXRhLnN0b3B4KSx0WT1NYXRoLm1heCh0WSxmLmRhdGEuc3RvcHgpLGVZPU1hdGgubWF4KGVZLGYuZGF0YS5zdG9weSl9fWNvbnN0IFNQdD17ZHJhd1BlcnNvbk9yU3lzdGVtQXJyYXk6VFB0LGRyYXdCb3VuZGFyeTpFUHQsc2V0Q29uZjp6ZHQsZHJhdzpmdW5jdGlvbihpLGEsZixwKXtkcz1PZSgpLmM0O2NvbnN0IHc9T2UoKS5zZWN1cml0eUxldmVsO2xldCBtO3c9PT0ic2FuZGJveCImJihtPXlyKCIjaSIrYSkpO2NvbnN0IGI9eXIodz09PSJzYW5kYm94Ij9tLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHk6ImJvZHkiKTtsZXQgRT1wLmRiO3AuZGIuc2V0V3JhcChkcy53cmFwKSx4UHQ9RS5nZXRDNFNoYXBlSW5Sb3coKSwkZHQ9RS5nZXRDNEJvdW5kYXJ5SW5Sb3coKSxVdC5kZWJ1ZyhgQzoke0pTT04uc3RyaW5naWZ5KGRzLG51bGwsMil9YCk7Y29uc3QgXz13PT09InNhbmRib3giP2Iuc2VsZWN0KGBbaWQ9IiR7YX0iXWApOnlyKGBbaWQ9IiR7YX0iXWApO2IzLmluc2VydENvbXB1dGVySWNvbihfKSxiMy5pbnNlcnREYXRhYmFzZUljb24oXyksYjMuaW5zZXJ0Q2xvY2tJY29uKF8pO2xldCBBPW5ldyBrUHQocCk7QS5zZXREYXRhKGRzLmRpYWdyYW1NYXJnaW5YLGRzLmRpYWdyYW1NYXJnaW5YLGRzLmRpYWdyYW1NYXJnaW5ZLGRzLmRpYWdyYW1NYXJnaW5ZKSxBLmRhdGEud2lkdGhMaW1pdD1zY3JlZW4uYXZhaWxXaWR0aCx0WT1kcy5kaWFncmFtTWFyZ2luWCxlWT1kcy5kaWFncmFtTWFyZ2luWTtjb25zdCBJPXAuZGIuZ2V0VGl0bGUoKTtsZXQgQj1wLmRiLmdldEJvdW5kYXJ5cygiIik7X1B0KF8sIiIsQSxCLHApLGIzLmluc2VydEFycm93SGVhZChfKSxiMy5pbnNlcnRBcnJvd0VuZChfKSxiMy5pbnNlcnRBcnJvd0Nyb3NzSGVhZChfKSxiMy5pbnNlcnRBcnJvd0ZpbGxlZEhlYWQoXyksZUllKF8scC5kYi5nZXRSZWxzKCkscC5kYi5nZXRDNFNoYXBlLHApLEEuZGF0YS5zdG9weD10WSxBLmRhdGEuc3RvcHk9ZVk7Y29uc3QgTj1BLmRhdGE7bGV0IHo9Ti5zdG9weS1OLnN0YXJ0eSsyKmRzLmRpYWdyYW1NYXJnaW5ZO2NvbnN0IGV0PU4uc3RvcHgtTi5zdGFydHgrMipkcy5kaWFncmFtTWFyZ2luWDtJJiZfLmFwcGVuZCgidGV4dCIpLnRleHQoSSkuYXR0cigieCIsKE4uc3RvcHgtTi5zdGFydHgpLzItNCpkcy5kaWFncmFtTWFyZ2luWCkuYXR0cigieSIsTi5zdGFydHkrZHMuZGlhZ3JhbU1hcmdpblkpLGswKF8seixldCxkcy51c2VNYXhXaWR0aCk7Y29uc3Qgc3Q9ST82MDowO18uYXR0cigidmlld0JveCIsTi5zdGFydHgtZHMuZGlhZ3JhbU1hcmdpblgrIiAtIisoZHMuZGlhZ3JhbU1hcmdpblkrc3QpKyIgIitldCsiICIrKHorc3QpKSxVdC5kZWJ1ZygibW9kZWxzOiIsTil9fSxuSWU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpnRGUsZGI6QmR0LHJlbmRlcmVyOlNQdCxzdHlsZXM6aT0+YC5wZXJzb24gewogICAgc3Ryb2tlOiAke2kucGVyc29uQm9yZGVyfTsKICAgIGZpbGw6ICR7aS5wZXJzb25Ca2d9OwogIH0KYCxpbml0Oih7YzQ6aSx3cmFwOmF9KT0+e1NQdC5zZXRDb25mKGkpLEJkdC5zZXRXcmFwKGEpfX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIHFkdD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKGFmLFFpLFRzLGthKXtmb3IoVHM9VHN8fHt9LGthPWFmLmxlbmd0aDtrYS0tO1RzW2FmW2thXV09UWkpO3JldHVybiBUc30sYT1bMSw0XSxmPVsxLDNdLHA9WzEsNV0sdz1bMSw4LDksMTAsMTEsMjcsMzQsMzYsMzgsNDIsNTgsODEsODIsODMsODQsODUsODYsOTksMTAyLDEwMywxMDYsMTA4LDExMSwxMTIsMTEzLDExOCwxMTksMTIwLDEyMV0sbT1bMiwyXSxiPVsxLDEzXSxFPVsxLDE0XSxfPVsxLDE1XSxBPVsxLDE2XSxJPVsxLDIzXSxCPVsxLDI1XSxOPVsxLDI2XSxSPVsxLDI3XSx6PVsxLDQ5XSxXPVsxLDQ4XSxldD1bMSwyOV0sc3Q9WzEsMzBdLGF0PVsxLDMxXSxidD1bMSwzMl0sbXQ9WzEsMzNdLHl0PVsxLDQ0XSxmdD1bMSw0Nl0sdXQ9WzEsNDJdLHZ0PVsxLDQ3XSxYPVsxLDQzXSxwdD1bMSw1MF0sVT1bMSw0NV0sVHQ9WzEsNTFdLG50PVsxLDUyXSxJdD1bMSwzNF0sT3Q9WzEsMzVdLEJ0PVsxLDM2XSxFdD1bMSwzN10sWj1bMSw1N10sQ3Q9WzEsOCw5LDEwLDExLDI3LDMyLDM0LDM2LDM4LDQyLDU4LDgxLDgyLDgzLDg0LDg1LDg2LDk5LDEwMiwxMDMsMTA2LDEwOCwxMTEsMTEyLDExMywxMTgsMTE5LDEyMCwxMjFdLHh0PVsxLDYxXSxIdD1bMSw2MF0sTGU9WzEsNjJdLEZ0PVs4LDksMTEsNzMsNzVdLGduPVsxLDg4XSxTZT1bMSw5M10sbWU9WzEsOTJdLFZlPVsxLDg5XSxZZT1bMSw4NV0sY2U9WzEsOTFdLGtlPVsxLDg3XSx6dD1bMSw5NF0scmU9WzEsOTBdLHNlPVsxLDk1XSxQZT1bMSw4Nl0sdGU9WzgsOSwxMCwxMSw3Myw3NV0sTWU9WzgsOSwxMCwxMSw0NCw3Myw3NV0sZGU9WzgsOSwxMCwxMSwyOSw0Miw0NCw0Niw0OCw1MCw1Miw1NCw1Niw1OCw2MSw2Myw2NSw2Niw2OCw3Myw3NSw4Niw5OSwxMDIsMTAzLDEwNiwxMDgsMTExLDExMiwxMTNdLG9uPVs4LDksMTEsNDIsNTgsNzMsNzUsODYsOTksMTAyLDEwMywxMDYsMTA4LDExMSwxMTIsMTEzXSxuaT1bNDIsNTgsODYsOTksMTAyLDEwMywxMDYsMTA4LDExMSwxMTIsMTEzXSxLcz1bMSwxMjFdLHdzPVsxLDEyMF0sZm89WzEsMTI4XSxYaT1bMSwxNDJdLEVyPVsxLDE0M10sWG49WzEsMTQ0XSxkaT1bMSwxNDVdLEVlPVsxLDEzMF0sS249WzEsMTMyXSxIZT1bMSwxMzZdLFRpPVsxLDEzN10scG49WzEsMTM4XSxFcz1bMSwxMzldLHFhPVsxLDE0MF0sTWE9WzEsMTQxXSxHcz1bMSwxNDZdLFBvPVsxLDE0N10sdnM9WzEsMTI2XSxydT1bMSwxMjddLHpzPVsxLDEzNF0sRHU9WzEsMTI5XSxwbT1bMSwxMzNdLHV3PVsxLDEzMV0sV3U9WzgsOSwxMCwxMSwyNywzMiwzNCwzNiwzOCw0Miw1OCw4MSw4Miw4Myw4NCw4NSw4Niw5OSwxMDIsMTAzLDEwNiwxMDgsMTExLDExMiwxMTMsMTE4LDExOSwxMjAsMTIxXSx0aD1bMSwxNDldLEZhPVs4LDksMTFdLE1sPVs4LDksMTAsMTEsMTQsNDIsNTgsODYsMTAyLDEwMywxMDYsMTA4LDExMSwxMTIsMTEzXSxoYT1bMSwxNjldLGJjPVsxLDE2NV0sQ2M9WzEsMTY2XSxwYT1bMSwxNzBdLERhPVsxLDE2N10sSGE9WzEsMTY4XSxEbD1bNzUsMTEzLDExNl0sX2M9WzgsOSwxMCwxMSwxMiwxNCwyNywyOSwzMiw0Miw1OCw3Myw4MSw4Miw4Myw4NCw4NSw4Niw4NywxMDIsMTA2LDEwOCwxMTEsMTEyLDExM10sbHc9WzEwLDEwM10sZWg9WzMxLDQ3LDQ5LDUxLDUzLDU1LDYwLDYyLDY0LDY1LDY3LDY5LDExMywxMTQsMTE1XSxlZD1bMSwyMzVdLGpkPVsxLDIzM10sbmQ9WzEsMjM3XSwkZD1bMSwyMzFdLEEwPVsxLDIzMl0sQmk9WzEsMjM0XSxjbj1bMSwyMzZdLGtyPVsxLDIzOF0sRWk9WzEsMjU1XSxKbz1bOCw5LDExLDEwM10sd2M9WzgsOSwxMCwxMSw1OCw4MSwxMDIsMTAzLDEwNiwxMDcsMTA4LDEwOV0scmY9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGdyYXBoQ29uZmlnOjQsZG9jdW1lbnQ6NSxsaW5lOjYsc3RhdGVtZW50OjcsU0VNSTo4LE5FV0xJTkU6OSxTUEFDRToxMCxFT0Y6MTEsR1JBUEg6MTIsTk9ESVI6MTMsRElSOjE0LEZpcnN0U3RtdFNlcGVyYXRvcjoxNSxlbmRpbmc6MTYsZW5kVG9rZW46MTcsc3BhY2VMaXN0OjE4LHNwYWNlTGlzdE5ld2xpbmU6MTksdmVydGljZVN0YXRlbWVudDoyMCxzZXBhcmF0b3I6MjEsc3R5bGVTdGF0ZW1lbnQ6MjIsbGlua1N0eWxlU3RhdGVtZW50OjIzLGNsYXNzRGVmU3RhdGVtZW50OjI0LGNsYXNzU3RhdGVtZW50OjI1LGNsaWNrU3RhdGVtZW50OjI2LHN1YmdyYXBoOjI3LHRleHROb1RhZ3M6MjgsU1FTOjI5LHRleHQ6MzAsU1FFOjMxLGVuZDozMixkaXJlY3Rpb246MzMsYWNjX3RpdGxlOjM0LGFjY190aXRsZV92YWx1ZTozNSxhY2NfZGVzY3I6MzYsYWNjX2Rlc2NyX3ZhbHVlOjM3LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MzgsbGluazozOSxub2RlOjQwLHN0eWxlZFZlcnRleDo0MSxBTVA6NDIsdmVydGV4OjQzLFNUWUxFX1NFUEFSQVRPUjo0NCxpZFN0cmluZzo0NSxET1VCTEVDSVJDTEVTVEFSVDo0NixET1VCTEVDSVJDTEVFTkQ6NDcsUFM6NDgsUEU6NDksIigtIjo1MCwiLSkiOjUxLFNUQURJVU1TVEFSVDo1MixTVEFESVVNRU5EOjUzLFNVQlJPVVRJTkVTVEFSVDo1NCxTVUJST1VUSU5FRU5EOjU1LFZFUlRFWF9XSVRIX1BST1BTX1NUQVJUOjU2LCJOT0RFX1NUUklOR1tmaWVsZF0iOjU3LENPTE9OOjU4LCJOT0RFX1NUUklOR1t2YWx1ZV0iOjU5LFBJUEU6NjAsQ1lMSU5ERVJTVEFSVDo2MSxDWUxJTkRFUkVORDo2MixESUFNT05EX1NUQVJUOjYzLERJQU1PTkRfU1RPUDo2NCxUQUdFTkQ6NjUsVFJBUFNUQVJUOjY2LFRSQVBFTkQ6NjcsSU5WVFJBUFNUQVJUOjY4LElOVlRSQVBFTkQ6NjksbGlua1N0YXRlbWVudDo3MCxhcnJvd1RleHQ6NzEsVEVTVFNUUjo3MixTVEFSVF9MSU5LOjczLGVkZ2VUZXh0Ojc0LExJTks6NzUsZWRnZVRleHRUb2tlbjo3NixTVFI6NzcsTURfU1RSOjc4LHRleHRUb2tlbjo3OSxrZXl3b3Jkczo4MCxTVFlMRTo4MSxMSU5LU1RZTEU6ODIsQ0xBU1NERUY6ODMsQ0xBU1M6ODQsQ0xJQ0s6ODUsRE9XTjo4NixVUDo4Nyx0ZXh0Tm9UYWdzVG9rZW46ODgsc3R5bGVzT3B0Ojg5LCJpZFN0cmluZ1t2ZXJ0ZXhdIjo5MCwiaWRTdHJpbmdbY2xhc3NdIjo5MSxDQUxMQkFDS05BTUU6OTIsQ0FMTEJBQ0tBUkdTOjkzLEhSRUY6OTQsTElOS19UQVJHRVQ6OTUsIlNUUltsaW5rXSI6OTYsIlNUUlt0b29sdGlwXSI6OTcsYWxwaGFOdW06OTgsREVGQVVMVDo5OSxudW1MaXN0OjEwMCxJTlRFUlBPTEFURToxMDEsTlVNOjEwMixDT01NQToxMDMsc3R5bGU6MTA0LHN0eWxlQ29tcG9uZW50OjEwNSxOT0RFX1NUUklORzoxMDYsVU5JVDoxMDcsQlJLVDoxMDgsUENUOjEwOSxpZFN0cmluZ1Rva2VuOjExMCxNSU5VUzoxMTEsTVVMVDoxMTIsVU5JQ09ERV9URVhUOjExMyxURVhUOjExNCxUQUdTVEFSVDoxMTUsRURHRV9URVhUOjExNixhbHBoYU51bVRva2VuOjExNyxkaXJlY3Rpb25fdGI6MTE4LGRpcmVjdGlvbl9idDoxMTksZGlyZWN0aW9uX3JsOjEyMCxkaXJlY3Rpb25fbHI6MTIxLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw4OiJTRU1JIiw5OiJORVdMSU5FIiwxMDoiU1BBQ0UiLDExOiJFT0YiLDEyOiJHUkFQSCIsMTM6Ik5PRElSIiwxNDoiRElSIiwyNzoic3ViZ3JhcGgiLDI5OiJTUVMiLDMxOiJTUUUiLDMyOiJlbmQiLDM0OiJhY2NfdGl0bGUiLDM1OiJhY2NfdGl0bGVfdmFsdWUiLDM2OiJhY2NfZGVzY3IiLDM3OiJhY2NfZGVzY3JfdmFsdWUiLDM4OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiw0MjoiQU1QIiw0NDoiU1RZTEVfU0VQQVJBVE9SIiw0NjoiRE9VQkxFQ0lSQ0xFU1RBUlQiLDQ3OiJET1VCTEVDSVJDTEVFTkQiLDQ4OiJQUyIsNDk6IlBFIiw1MDoiKC0iLDUxOiItKSIsNTI6IlNUQURJVU1TVEFSVCIsNTM6IlNUQURJVU1FTkQiLDU0OiJTVUJST1VUSU5FU1RBUlQiLDU1OiJTVUJST1VUSU5FRU5EIiw1NjoiVkVSVEVYX1dJVEhfUFJPUFNfU1RBUlQiLDU3OiJOT0RFX1NUUklOR1tmaWVsZF0iLDU4OiJDT0xPTiIsNTk6Ik5PREVfU1RSSU5HW3ZhbHVlXSIsNjA6IlBJUEUiLDYxOiJDWUxJTkRFUlNUQVJUIiw2MjoiQ1lMSU5ERVJFTkQiLDYzOiJESUFNT05EX1NUQVJUIiw2NDoiRElBTU9ORF9TVE9QIiw2NToiVEFHRU5EIiw2NjoiVFJBUFNUQVJUIiw2NzoiVFJBUEVORCIsNjg6IklOVlRSQVBTVEFSVCIsNjk6IklOVlRSQVBFTkQiLDcyOiJURVNUU1RSIiw3MzoiU1RBUlRfTElOSyIsNzU6IkxJTksiLDc3OiJTVFIiLDc4OiJNRF9TVFIiLDgxOiJTVFlMRSIsODI6IkxJTktTVFlMRSIsODM6IkNMQVNTREVGIiw4NDoiQ0xBU1MiLDg1OiJDTElDSyIsODY6IkRPV04iLDg3OiJVUCIsOTA6ImlkU3RyaW5nW3ZlcnRleF0iLDkxOiJpZFN0cmluZ1tjbGFzc10iLDkyOiJDQUxMQkFDS05BTUUiLDkzOiJDQUxMQkFDS0FSR1MiLDk0OiJIUkVGIiw5NToiTElOS19UQVJHRVQiLDk2OiJTVFJbbGlua10iLDk3OiJTVFJbdG9vbHRpcF0iLDk5OiJERUZBVUxUIiwxMDE6IklOVEVSUE9MQVRFIiwxMDI6Ik5VTSIsMTAzOiJDT01NQSIsMTA2OiJOT0RFX1NUUklORyIsMTA3OiJVTklUIiwxMDg6IkJSS1QiLDEwOToiUENUIiwxMTE6Ik1JTlVTIiwxMTI6Ik1VTFQiLDExMzoiVU5JQ09ERV9URVhUIiwxMTQ6IlRFWFQiLDExNToiVEFHU1RBUlQiLDExNjoiRURHRV9URVhUIiwxMTg6ImRpcmVjdGlvbl90YiIsMTE5OiJkaXJlY3Rpb25fYnQiLDEyMDoiZGlyZWN0aW9uX3JsIiwxMjE6ImRpcmVjdGlvbl9sciJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbNSwwXSxbNSwyXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwzXSxbMTYsMl0sWzE2LDFdLFsxNywxXSxbMTcsMV0sWzE3LDFdLFsxNSwxXSxbMTUsMV0sWzE1LDJdLFsxOSwyXSxbMTksMl0sWzE5LDFdLFsxOSwxXSxbMTgsMl0sWzE4LDFdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDldLFs3LDZdLFs3LDRdLFs3LDFdLFs3LDJdLFs3LDJdLFs3LDFdLFsyMSwxXSxbMjEsMV0sWzIxLDFdLFsyMCwzXSxbMjAsNF0sWzIwLDJdLFsyMCwxXSxbNDAsMV0sWzQwLDVdLFs0MSwxXSxbNDEsM10sWzQzLDRdLFs0Myw0XSxbNDMsNl0sWzQzLDRdLFs0Myw0XSxbNDMsNF0sWzQzLDhdLFs0Myw0XSxbNDMsNF0sWzQzLDRdLFs0Myw2XSxbNDMsNF0sWzQzLDRdLFs0Myw0XSxbNDMsNF0sWzQzLDRdLFs0MywxXSxbMzksMl0sWzM5LDNdLFszOSwzXSxbMzksMV0sWzM5LDNdLFs3NCwxXSxbNzQsMl0sWzc0LDFdLFs3NCwxXSxbNzAsMV0sWzcxLDNdLFszMCwxXSxbMzAsMl0sWzMwLDFdLFszMCwxXSxbODAsMV0sWzgwLDFdLFs4MCwxXSxbODAsMV0sWzgwLDFdLFs4MCwxXSxbODAsMV0sWzgwLDFdLFs4MCwxXSxbODAsMV0sWzgwLDFdLFsyOCwxXSxbMjgsMl0sWzI4LDFdLFsyOCwxXSxbMjQsNV0sWzI1LDVdLFsyNiwyXSxbMjYsNF0sWzI2LDNdLFsyNiw1XSxbMjYsM10sWzI2LDVdLFsyNiw1XSxbMjYsN10sWzI2LDJdLFsyNiw0XSxbMjYsMl0sWzI2LDRdLFsyNiw0XSxbMjYsNl0sWzIyLDVdLFsyMyw1XSxbMjMsNV0sWzIzLDldLFsyMyw5XSxbMjMsN10sWzIzLDddLFsxMDAsMV0sWzEwMCwzXSxbODksMV0sWzg5LDNdLFsxMDQsMV0sWzEwNCwyXSxbMTA1LDFdLFsxMDUsMV0sWzEwNSwxXSxbMTA1LDFdLFsxMDUsMV0sWzEwNSwxXSxbMTA1LDFdLFsxMDUsMV0sWzExMCwxXSxbMTEwLDFdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFs3OSwxXSxbNzksMV0sWzc5LDFdLFs3OSwxXSxbODgsMV0sWzg4LDFdLFs4OCwxXSxbODgsMV0sWzg4LDFdLFs4OCwxXSxbODgsMV0sWzg4LDFdLFs4OCwxXSxbODgsMV0sWzg4LDFdLFs3NiwxXSxbNzYsMV0sWzExNywxXSxbMTE3LDFdLFsxMTcsMV0sWzExNywxXSxbMTE3LDFdLFsxMTcsMV0sWzExNywxXSxbMTE3LDFdLFsxMTcsMV0sWzExNywxXSxbMTE3LDFdLFs0NSwxXSxbNDUsMl0sWzk4LDFdLFs5OCwyXSxbMzMsMV0sWzMzLDFdLFszMywxXSxbMzMsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oUWksVHMsa2EseGksWWMsQ2UsdnApe3ZhciBCZT1DZS5sZW5ndGgtMTtzd2l0Y2goWWMpe2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOighQXJyYXkuaXNBcnJheShDZVtCZV0pfHxDZVtCZV0ubGVuZ3RoPjApJiZDZVtCZS0xXS5wdXNoKENlW0JlXSksdGhpcy4kPUNlW0JlLTFdO2JyZWFrO2Nhc2UgNDpjYXNlIDE3Njp0aGlzLiQ9Q2VbQmVdO2JyZWFrO2Nhc2UgMTE6eGkuc2V0RGlyZWN0aW9uKCJUQiIpLHRoaXMuJD0iVEIiO2JyZWFrO2Nhc2UgMTI6eGkuc2V0RGlyZWN0aW9uKENlW0JlLTFdKSx0aGlzLiQ9Q2VbQmUtMV07YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9Q2VbQmUtMV0ubm9kZXM7YnJlYWs7Y2FzZSAyODpjYXNlIDI5OmNhc2UgMzA6Y2FzZSAzMTpjYXNlIDMyOnRoaXMuJD1bXTticmVhaztjYXNlIDMzOnRoaXMuJD14aS5hZGRTdWJHcmFwaChDZVtCZS02XSxDZVtCZS0xXSxDZVtCZS00XSk7YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9eGkuYWRkU3ViR3JhcGgoQ2VbQmUtM10sQ2VbQmUtMV0sQ2VbQmUtM10pO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPXhpLmFkZFN1YkdyYXBoKHZvaWQgMCxDZVtCZS0xXSx2b2lkIDApO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPUNlW0JlXS50cmltKCkseGkuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDM4OmNhc2UgMzk6dGhpcy4kPUNlW0JlXS50cmltKCkseGkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDQzOnhpLmFkZExpbmsoQ2VbQmUtMl0uc3RtdCxDZVtCZV0sQ2VbQmUtMV0pLHRoaXMuJD17c3RtdDpDZVtCZV0sbm9kZXM6Q2VbQmVdLmNvbmNhdChDZVtCZS0yXS5ub2Rlcyl9O2JyZWFrO2Nhc2UgNDQ6eGkuYWRkTGluayhDZVtCZS0zXS5zdG10LENlW0JlLTFdLENlW0JlLTJdKSx0aGlzLiQ9e3N0bXQ6Q2VbQmUtMV0sbm9kZXM6Q2VbQmUtMV0uY29uY2F0KENlW0JlLTNdLm5vZGVzKX07YnJlYWs7Y2FzZSA0NTp0aGlzLiQ9e3N0bXQ6Q2VbQmUtMV0sbm9kZXM6Q2VbQmUtMV19O2JyZWFrO2Nhc2UgNDY6dGhpcy4kPXtzdG10OkNlW0JlXSxub2RlczpDZVtCZV19O2JyZWFrO2Nhc2UgNDc6dGhpcy4kPVtDZVtCZV1dO2JyZWFrO2Nhc2UgNDg6dGhpcy4kPUNlW0JlLTRdLmNvbmNhdChDZVtCZV0pO2JyZWFrO2Nhc2UgNDk6dGhpcy4kPUNlW0JlXTticmVhaztjYXNlIDUwOnRoaXMuJD1DZVtCZS0yXSx4aS5zZXRDbGFzcyhDZVtCZS0yXSxDZVtCZV0pO2JyZWFrO2Nhc2UgNTE6dGhpcy4kPUNlW0JlLTNdLHhpLmFkZFZlcnRleChDZVtCZS0zXSxDZVtCZS0xXSwic3F1YXJlIik7YnJlYWs7Y2FzZSA1Mjp0aGlzLiQ9Q2VbQmUtM10seGkuYWRkVmVydGV4KENlW0JlLTNdLENlW0JlLTFdLCJkb3VibGVjaXJjbGUiKTticmVhaztjYXNlIDUzOnRoaXMuJD1DZVtCZS01XSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtNV0sQ2VbQmUtMl0sImNpcmNsZSIpO2JyZWFrO2Nhc2UgNTQ6dGhpcy4kPUNlW0JlLTNdLHhpLmFkZFZlcnRleChDZVtCZS0zXSxDZVtCZS0xXSwiZWxsaXBzZSIpO2JyZWFrO2Nhc2UgNTU6dGhpcy4kPUNlW0JlLTNdLHhpLmFkZFZlcnRleChDZVtCZS0zXSxDZVtCZS0xXSwic3RhZGl1bSIpO2JyZWFrO2Nhc2UgNTY6dGhpcy4kPUNlW0JlLTNdLHhpLmFkZFZlcnRleChDZVtCZS0zXSxDZVtCZS0xXSwic3Vicm91dGluZSIpO2JyZWFrO2Nhc2UgNTc6dGhpcy4kPUNlW0JlLTddLHhpLmFkZFZlcnRleChDZVtCZS03XSxDZVtCZS0xXSwicmVjdCIsdm9pZCAwLHZvaWQgMCx2b2lkIDAsT2JqZWN0LmZyb21FbnRyaWVzKFtbQ2VbQmUtNV0sQ2VbQmUtM11dXSkpO2JyZWFrO2Nhc2UgNTg6dGhpcy4kPUNlW0JlLTNdLHhpLmFkZFZlcnRleChDZVtCZS0zXSxDZVtCZS0xXSwiY3lsaW5kZXIiKTticmVhaztjYXNlIDU5OnRoaXMuJD1DZVtCZS0zXSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtM10sQ2VbQmUtMV0sInJvdW5kIik7YnJlYWs7Y2FzZSA2MDp0aGlzLiQ9Q2VbQmUtM10seGkuYWRkVmVydGV4KENlW0JlLTNdLENlW0JlLTFdLCJkaWFtb25kIik7YnJlYWs7Y2FzZSA2MTp0aGlzLiQ9Q2VbQmUtNV0seGkuYWRkVmVydGV4KENlW0JlLTVdLENlW0JlLTJdLCJoZXhhZ29uIik7YnJlYWs7Y2FzZSA2Mjp0aGlzLiQ9Q2VbQmUtM10seGkuYWRkVmVydGV4KENlW0JlLTNdLENlW0JlLTFdLCJvZGQiKTticmVhaztjYXNlIDYzOnRoaXMuJD1DZVtCZS0zXSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtM10sQ2VbQmUtMV0sInRyYXBlem9pZCIpO2JyZWFrO2Nhc2UgNjQ6dGhpcy4kPUNlW0JlLTNdLHhpLmFkZFZlcnRleChDZVtCZS0zXSxDZVtCZS0xXSwiaW52X3RyYXBlem9pZCIpO2JyZWFrO2Nhc2UgNjU6dGhpcy4kPUNlW0JlLTNdLHhpLmFkZFZlcnRleChDZVtCZS0zXSxDZVtCZS0xXSwibGVhbl9yaWdodCIpO2JyZWFrO2Nhc2UgNjY6dGhpcy4kPUNlW0JlLTNdLHhpLmFkZFZlcnRleChDZVtCZS0zXSxDZVtCZS0xXSwibGVhbl9sZWZ0Iik7YnJlYWs7Y2FzZSA2Nzp0aGlzLiQ9Q2VbQmVdLHhpLmFkZFZlcnRleChDZVtCZV0pO2JyZWFrO2Nhc2UgNjg6Q2VbQmUtMV0udGV4dD1DZVtCZV0sdGhpcy4kPUNlW0JlLTFdO2JyZWFrO2Nhc2UgNjk6Y2FzZSA3MDpDZVtCZS0yXS50ZXh0PUNlW0JlLTFdLHRoaXMuJD1DZVtCZS0yXTticmVhaztjYXNlIDcxOnRoaXMuJD1DZVtCZV07YnJlYWs7Y2FzZSA3Mjp2YXIgQmY9eGkuZGVzdHJ1Y3RMaW5rKENlW0JlXSxDZVtCZS0yXSk7dGhpcy4kPXt0eXBlOkJmLnR5cGUsc3Ryb2tlOkJmLnN0cm9rZSxsZW5ndGg6QmYubGVuZ3RoLHRleHQ6Q2VbQmUtMV19O2JyZWFrO2Nhc2UgNzM6dGhpcy4kPXt0ZXh0OkNlW0JlXSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSA3NDp0aGlzLiQ9e3RleHQ6Q2VbQmUtMV0udGV4dCsiIitDZVtCZV0sdHlwZTpDZVtCZS0xXS50eXBlfTticmVhaztjYXNlIDc1OnRoaXMuJD17dGV4dDpDZVtCZV0sdHlwZToic3RyaW5nIn07YnJlYWs7Y2FzZSA3Njp0aGlzLiQ9e3RleHQ6Q2VbQmVdLHR5cGU6Im1hcmtkb3duIn07YnJlYWs7Y2FzZSA3Nzp2YXIgQmY9eGkuZGVzdHJ1Y3RMaW5rKENlW0JlXSk7dGhpcy4kPXt0eXBlOkJmLnR5cGUsc3Ryb2tlOkJmLnN0cm9rZSxsZW5ndGg6QmYubGVuZ3RofTticmVhaztjYXNlIDc4OnRoaXMuJD1DZVtCZS0xXTticmVhaztjYXNlIDc5OnRoaXMuJD17dGV4dDpDZVtCZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgODA6dGhpcy4kPXt0ZXh0OkNlW0JlLTFdLnRleHQrIiIrQ2VbQmVdLHR5cGU6Q2VbQmUtMV0udHlwZX07YnJlYWs7Y2FzZSA4MTp0aGlzLiQ9e3RleHQ6Q2VbQmVdLHR5cGU6InN0cmluZyJ9O2JyZWFrO2Nhc2UgODI6Y2FzZSA5Nzp0aGlzLiQ9e3RleHQ6Q2VbQmVdLHR5cGU6Im1hcmtkb3duIn07YnJlYWs7Y2FzZSA5NDp0aGlzLiQ9e3RleHQ6Q2VbQmVdLHR5cGU6InRleHQifTticmVhaztjYXNlIDk1OnRoaXMuJD17dGV4dDpDZVtCZS0xXS50ZXh0KyIiK0NlW0JlXSx0eXBlOkNlW0JlLTFdLnR5cGV9O2JyZWFrO2Nhc2UgOTY6dGhpcy4kPXt0ZXh0OkNlW0JlXSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSA5ODp0aGlzLiQ9Q2VbQmUtNF0seGkuYWRkQ2xhc3MoQ2VbQmUtMl0sQ2VbQmVdKTticmVhaztjYXNlIDk5OnRoaXMuJD1DZVtCZS00XSx4aS5zZXRDbGFzcyhDZVtCZS0yXSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTAwOmNhc2UgMTA4OnRoaXMuJD1DZVtCZS0xXSx4aS5zZXRDbGlja0V2ZW50KENlW0JlLTFdLENlW0JlXSk7YnJlYWs7Y2FzZSAxMDE6Y2FzZSAxMDk6dGhpcy4kPUNlW0JlLTNdLHhpLnNldENsaWNrRXZlbnQoQ2VbQmUtM10sQ2VbQmUtMl0pLHhpLnNldFRvb2x0aXAoQ2VbQmUtM10sQ2VbQmVdKTticmVhaztjYXNlIDEwMjp0aGlzLiQ9Q2VbQmUtMl0seGkuc2V0Q2xpY2tFdmVudChDZVtCZS0yXSxDZVtCZS0xXSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTAzOnRoaXMuJD1DZVtCZS00XSx4aS5zZXRDbGlja0V2ZW50KENlW0JlLTRdLENlW0JlLTNdLENlW0JlLTJdKSx4aS5zZXRUb29sdGlwKENlW0JlLTRdLENlW0JlXSk7YnJlYWs7Y2FzZSAxMDQ6dGhpcy4kPUNlW0JlLTJdLHhpLnNldExpbmsoQ2VbQmUtMl0sQ2VbQmVdKTticmVhaztjYXNlIDEwNTp0aGlzLiQ9Q2VbQmUtNF0seGkuc2V0TGluayhDZVtCZS00XSxDZVtCZS0yXSkseGkuc2V0VG9vbHRpcChDZVtCZS00XSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTA2OnRoaXMuJD1DZVtCZS00XSx4aS5zZXRMaW5rKENlW0JlLTRdLENlW0JlLTJdLENlW0JlXSk7YnJlYWs7Y2FzZSAxMDc6dGhpcy4kPUNlW0JlLTZdLHhpLnNldExpbmsoQ2VbQmUtNl0sQ2VbQmUtNF0sQ2VbQmVdKSx4aS5zZXRUb29sdGlwKENlW0JlLTZdLENlW0JlLTJdKTticmVhaztjYXNlIDExMDp0aGlzLiQ9Q2VbQmUtMV0seGkuc2V0TGluayhDZVtCZS0xXSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTExOnRoaXMuJD1DZVtCZS0zXSx4aS5zZXRMaW5rKENlW0JlLTNdLENlW0JlLTJdKSx4aS5zZXRUb29sdGlwKENlW0JlLTNdLENlW0JlXSk7YnJlYWs7Y2FzZSAxMTI6dGhpcy4kPUNlW0JlLTNdLHhpLnNldExpbmsoQ2VbQmUtM10sQ2VbQmUtMl0sQ2VbQmVdKTticmVhaztjYXNlIDExMzp0aGlzLiQ9Q2VbQmUtNV0seGkuc2V0TGluayhDZVtCZS01XSxDZVtCZS00XSxDZVtCZV0pLHhpLnNldFRvb2x0aXAoQ2VbQmUtNV0sQ2VbQmUtMl0pO2JyZWFrO2Nhc2UgMTE0OnRoaXMuJD1DZVtCZS00XSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtMl0sdm9pZCAwLHZvaWQgMCxDZVtCZV0pO2JyZWFrO2Nhc2UgMTE1OnRoaXMuJD1DZVtCZS00XSx4aS51cGRhdGVMaW5rKFtDZVtCZS0yXV0sQ2VbQmVdKTticmVhaztjYXNlIDExNjp0aGlzLiQ9Q2VbQmUtNF0seGkudXBkYXRlTGluayhDZVtCZS0yXSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTE3OnRoaXMuJD1DZVtCZS04XSx4aS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoW0NlW0JlLTZdXSxDZVtCZS0yXSkseGkudXBkYXRlTGluayhbQ2VbQmUtNl1dLENlW0JlXSk7YnJlYWs7Y2FzZSAxMTg6dGhpcy4kPUNlW0JlLThdLHhpLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShDZVtCZS02XSxDZVtCZS0yXSkseGkudXBkYXRlTGluayhDZVtCZS02XSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTE5OnRoaXMuJD1DZVtCZS02XSx4aS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoW0NlW0JlLTRdXSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTIwOnRoaXMuJD1DZVtCZS02XSx4aS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoQ2VbQmUtNF0sQ2VbQmVdKTticmVhaztjYXNlIDEyMTpjYXNlIDEyMzp0aGlzLiQ9W0NlW0JlXV07YnJlYWs7Y2FzZSAxMjI6Y2FzZSAxMjQ6Q2VbQmUtMl0ucHVzaChDZVtCZV0pLHRoaXMuJD1DZVtCZS0yXTticmVhaztjYXNlIDEyNjp0aGlzLiQ9Q2VbQmUtMV0rQ2VbQmVdO2JyZWFrO2Nhc2UgMTc0OnRoaXMuJD1DZVtCZV07YnJlYWs7Y2FzZSAxNzU6dGhpcy4kPUNlW0JlLTFdKyIiK0NlW0JlXTticmVhaztjYXNlIDE3Nzp0aGlzLiQ9Q2VbQmUtMV0rIiIrQ2VbQmVdO2JyZWFrO2Nhc2UgMTc4OnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiVEIifTticmVhaztjYXNlIDE3OTp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkJUIn07YnJlYWs7Y2FzZSAxODA6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJSTCJ9O2JyZWFrO2Nhc2UgMTgxOnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiTFIifTticmVha319LHRhYmxlOlt7MzoxLDQ6Miw5OmEsMTA6ZiwxMjpwfSx7MTpbM119LGkodyxtLHs1OjZ9KSx7NDo3LDk6YSwxMDpmLDEyOnB9LHs0OjgsOTphLDEwOmYsMTI6cH0sezEzOlsxLDldLDE0OlsxLDEwXX0sezE6WzIsMV0sNjoxMSw3OjEyLDg6Yiw5OkUsMTA6XywxMTpBLDIwOjE3LDIyOjE4LDIzOjE5LDI0OjIwLDI1OjIxLDI2OjIyLDI3OkksMzM6MjQsMzQ6QiwzNjpOLDM4OlIsNDA6MjgsNDE6MzgsNDI6eiw0MzozOSw0NTo0MCw1ODpXLDgxOmV0LDgyOnN0LDgzOmF0LDg0OmJ0LDg1Om10LDg2Onl0LDk5OmZ0LDEwMjp1dCwxMDM6dnQsMTA2OlgsMTA4OnB0LDExMDo0MSwxMTE6VSwxMTI6VHQsMTEzOm50LDExODpJdCwxMTk6T3QsMTIwOkJ0LDEyMTpFdH0saSh3LFsyLDldKSxpKHcsWzIsMTBdKSxpKHcsWzIsMTFdKSx7ODpbMSw1NF0sOTpbMSw1NV0sMTA6WiwxNTo1MywxODo1Nn0saShDdCxbMiwzXSksaShDdCxbMiw0XSksaShDdCxbMiw1XSksaShDdCxbMiw2XSksaShDdCxbMiw3XSksaShDdCxbMiw4XSksezg6eHQsOTpIdCwxMTpMZSwyMTo1OCwzOTo1OSw3MDo2Myw3MzpbMSw2NF0sNzU6WzEsNjVdfSx7ODp4dCw5Okh0LDExOkxlLDIxOjY2fSx7ODp4dCw5Okh0LDExOkxlLDIxOjY3fSx7ODp4dCw5Okh0LDExOkxlLDIxOjY4fSx7ODp4dCw5Okh0LDExOkxlLDIxOjY5fSx7ODp4dCw5Okh0LDExOkxlLDIxOjcwfSx7ODp4dCw5Okh0LDEwOlsxLDcxXSwxMTpMZSwyMTo3Mn0saShDdCxbMiwzNl0pLHszNTpbMSw3M119LHszNzpbMSw3NF19LGkoQ3QsWzIsMzldKSxpKEZ0LFsyLDQ2XSx7MTg6NzUsMTA6Wn0pLHsxMDpbMSw3Nl19LHsxMDpbMSw3N119LHsxMDpbMSw3OF19LHsxMDpbMSw3OV19LHsxNDpnbiw0MjpTZSw1ODptZSw3NzpbMSw4M10sODY6VmUsOTI6WzEsODBdLDk0OlsxLDgxXSw5ODo4MiwxMDI6WWUsMTAzOmNlLDEwNjprZSwxMDg6enQsMTExOnJlLDExMjpzZSwxMTM6UGUsMTE3Ojg0fSxpKEN0LFsyLDE3OF0pLGkoQ3QsWzIsMTc5XSksaShDdCxbMiwxODBdKSxpKEN0LFsyLDE4MV0pLGkodGUsWzIsNDddKSxpKHRlLFsyLDQ5XSx7NDQ6WzEsOTZdfSksaShNZSxbMiw2N10sezExMDoxMDksMjk6WzEsOTddLDQyOnosNDY6WzEsOThdLDQ4OlsxLDk5XSw1MDpbMSwxMDBdLDUyOlsxLDEwMV0sNTQ6WzEsMTAyXSw1NjpbMSwxMDNdLDU4OlcsNjE6WzEsMTA0XSw2MzpbMSwxMDVdLDY1OlsxLDEwNl0sNjY6WzEsMTA3XSw2ODpbMSwxMDhdLDg2Onl0LDk5OmZ0LDEwMjp1dCwxMDM6dnQsMTA2OlgsMTA4OnB0LDExMTpVLDExMjpUdCwxMTM6bnR9KSxpKGRlLFsyLDE3NF0pLGkoZGUsWzIsMTM1XSksaShkZSxbMiwxMzZdKSxpKGRlLFsyLDEzN10pLGkoZGUsWzIsMTM4XSksaShkZSxbMiwxMzldKSxpKGRlLFsyLDE0MF0pLGkoZGUsWzIsMTQxXSksaShkZSxbMiwxNDJdKSxpKGRlLFsyLDE0M10pLGkoZGUsWzIsMTQ0XSksaShkZSxbMiwxNDVdKSxpKHcsWzIsMTJdKSxpKHcsWzIsMThdKSxpKHcsWzIsMTldKSx7OTpbMSwxMTBdfSxpKG9uLFsyLDI2XSx7MTg6MTExLDEwOlp9KSxpKEN0LFsyLDI3XSksezQwOjExMiw0MTozOCw0Mjp6LDQzOjM5LDQ1OjQwLDU4OlcsODY6eXQsOTk6ZnQsMTAyOnV0LDEwMzp2dCwxMDY6WCwxMDg6cHQsMTEwOjQxLDExMTpVLDExMjpUdCwxMTM6bnR9LGkoQ3QsWzIsNDBdKSxpKEN0LFsyLDQxXSksaShDdCxbMiw0Ml0pLGkobmksWzIsNzFdLHs3MToxMTMsNjA6WzEsMTE1XSw3MjpbMSwxMTRdfSksezc0OjExNiw3NjoxMTcsNzc6WzEsMTE4XSw3ODpbMSwxMTldLDExMzpLcywxMTY6d3N9LGkoWzQyLDU4LDYwLDcyLDg2LDk5LDEwMiwxMDMsMTA2LDEwOCwxMTEsMTEyLDExM10sWzIsNzddKSxpKEN0LFsyLDI4XSksaShDdCxbMiwyOV0pLGkoQ3QsWzIsMzBdKSxpKEN0LFsyLDMxXSksaShDdCxbMiwzMl0pLHsxMDpmbywxMjpYaSwxNDpFciwyNzpYbiwyODoxMjIsMzI6ZGksNDI6RWUsNTg6S24sNzM6SGUsNzc6WzEsMTI0XSw3ODpbMSwxMjVdLDgwOjEzNSw4MTpUaSw4Mjpwbiw4MzpFcyw4NDpxYSw4NTpNYSw4NjpHcyw4NzpQbyw4ODoxMjMsMTAyOnZzLDEwNjpydSwxMDg6enMsMTExOkR1LDExMjpwbSwxMTM6dXd9LGkoV3UsbSx7NToxNDh9KSxpKEN0LFsyLDM3XSksaShDdCxbMiwzOF0pLGkoRnQsWzIsNDVdLHs0Mjp0aH0pLHs0Mjp6LDQ1OjE1MCw1ODpXLDg2Onl0LDk5OmZ0LDEwMjp1dCwxMDM6dnQsMTA2OlgsMTA4OnB0LDExMDo0MSwxMTE6VSwxMTI6VHQsMTEzOm50fSx7OTk6WzEsMTUxXSwxMDA6MTUyLDEwMjpbMSwxNTNdfSx7NDI6eiw0NToxNTQsNTg6Vyw4Njp5dCw5OTpmdCwxMDI6dXQsMTAzOnZ0LDEwNjpYLDEwODpwdCwxMTA6NDEsMTExOlUsMTEyOlR0LDExMzpudH0sezQyOnosNDU6MTU1LDU4OlcsODY6eXQsOTk6ZnQsMTAyOnV0LDEwMzp2dCwxMDY6WCwxMDg6cHQsMTEwOjQxLDExMTpVLDExMjpUdCwxMTM6bnR9LGkoRmEsWzIsMTAwXSx7MTA6WzEsMTU2XSw5MzpbMSwxNTddfSksezc3OlsxLDE1OF19LGkoRmEsWzIsMTA4XSx7MTE3OjE2MCwxMDpbMSwxNTldLDE0OmduLDQyOlNlLDU4Om1lLDg2OlZlLDEwMjpZZSwxMDM6Y2UsMTA2OmtlLDEwODp6dCwxMTE6cmUsMTEyOnNlLDExMzpQZX0pLGkoRmEsWzIsMTEwXSx7MTA6WzEsMTYxXX0pLGkoTWwsWzIsMTc2XSksaShNbCxbMiwxNjNdKSxpKE1sLFsyLDE2NF0pLGkoTWwsWzIsMTY1XSksaShNbCxbMiwxNjZdKSxpKE1sLFsyLDE2N10pLGkoTWwsWzIsMTY4XSksaShNbCxbMiwxNjldKSxpKE1sLFsyLDE3MF0pLGkoTWwsWzIsMTcxXSksaShNbCxbMiwxNzJdKSxpKE1sLFsyLDE3M10pLHs0Mjp6LDQ1OjE2Miw1ODpXLDg2Onl0LDk5OmZ0LDEwMjp1dCwxMDM6dnQsMTA2OlgsMTA4OnB0LDExMDo0MSwxMTE6VSwxMTI6VHQsMTEzOm50fSx7MzA6MTYzLDY1OmhhLDc3OmJjLDc4OkNjLDc5OjE2NCwxMTM6cGEsMTE0OkRhLDExNTpIYX0sezMwOjE3MSw2NTpoYSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOnBhLDExNDpEYSwxMTU6SGF9LHszMDoxNzMsNDg6WzEsMTcyXSw2NTpoYSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOnBhLDExNDpEYSwxMTU6SGF9LHszMDoxNzQsNjU6aGEsNzc6YmMsNzg6Q2MsNzk6MTY0LDExMzpwYSwxMTQ6RGEsMTE1OkhhfSx7MzA6MTc1LDY1OmhhLDc3OmJjLDc4OkNjLDc5OjE2NCwxMTM6cGEsMTE0OkRhLDExNTpIYX0sezMwOjE3Niw2NTpoYSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOnBhLDExNDpEYSwxMTU6SGF9LHsxMDY6WzEsMTc3XX0sezMwOjE3OCw2NTpoYSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOnBhLDExNDpEYSwxMTU6SGF9LHszMDoxNzksNjM6WzEsMTgwXSw2NTpoYSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOnBhLDExNDpEYSwxMTU6SGF9LHszMDoxODEsNjU6aGEsNzc6YmMsNzg6Q2MsNzk6MTY0LDExMzpwYSwxMTQ6RGEsMTE1OkhhfSx7MzA6MTgyLDY1OmhhLDc3OmJjLDc4OkNjLDc5OjE2NCwxMTM6cGEsMTE0OkRhLDExNTpIYX0sezMwOjE4Myw2NTpoYSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOnBhLDExNDpEYSwxMTU6SGF9LGkoZGUsWzIsMTc1XSksaSh3LFsyLDIwXSksaShvbixbMiwyNV0pLGkoRnQsWzIsNDNdLHsxODoxODQsMTA6Wn0pLGkobmksWzIsNjhdLHsxMDpbMSwxODVdfSksezEwOlsxLDE4Nl19LHszMDoxODcsNjU6aGEsNzc6YmMsNzg6Q2MsNzk6MTY0LDExMzpwYSwxMTQ6RGEsMTE1OkhhfSx7NzU6WzEsMTg4XSw3NjoxODksMTEzOktzLDExNjp3c30saShEbCxbMiw3M10pLGkoRGwsWzIsNzVdKSxpKERsLFsyLDc2XSksaShEbCxbMiwxNjFdKSxpKERsLFsyLDE2Ml0pLHs4Onh0LDk6SHQsMTA6Zm8sMTE6TGUsMTI6WGksMTQ6RXIsMjE6MTkxLDI3OlhuLDI5OlsxLDE5MF0sMzI6ZGksNDI6RWUsNTg6S24sNzM6SGUsODA6MTM1LDgxOlRpLDgyOnBuLDgzOkVzLDg0OnFhLDg1Ok1hLDg2OkdzLDg3OlBvLDg4OjE5MiwxMDI6dnMsMTA2OnJ1LDEwODp6cywxMTE6RHUsMTEyOnBtLDExMzp1d30saShfYyxbMiw5NF0pLGkoX2MsWzIsOTZdKSxpKF9jLFsyLDk3XSksaShfYyxbMiwxNTBdKSxpKF9jLFsyLDE1MV0pLGkoX2MsWzIsMTUyXSksaShfYyxbMiwxNTNdKSxpKF9jLFsyLDE1NF0pLGkoX2MsWzIsMTU1XSksaShfYyxbMiwxNTZdKSxpKF9jLFsyLDE1N10pLGkoX2MsWzIsMTU4XSksaShfYyxbMiwxNTldKSxpKF9jLFsyLDE2MF0pLGkoX2MsWzIsODNdKSxpKF9jLFsyLDg0XSksaShfYyxbMiw4NV0pLGkoX2MsWzIsODZdKSxpKF9jLFsyLDg3XSksaShfYyxbMiw4OF0pLGkoX2MsWzIsODldKSxpKF9jLFsyLDkwXSksaShfYyxbMiw5MV0pLGkoX2MsWzIsOTJdKSxpKF9jLFsyLDkzXSksezY6MTEsNzoxMiw4OmIsOTpFLDEwOl8sMTE6QSwyMDoxNywyMjoxOCwyMzoxOSwyNDoyMCwyNToyMSwyNjoyMiwyNzpJLDMyOlsxLDE5M10sMzM6MjQsMzQ6QiwzNjpOLDM4OlIsNDA6MjgsNDE6MzgsNDI6eiw0MzozOSw0NTo0MCw1ODpXLDgxOmV0LDgyOnN0LDgzOmF0LDg0OmJ0LDg1Om10LDg2Onl0LDk5OmZ0LDEwMjp1dCwxMDM6dnQsMTA2OlgsMTA4OnB0LDExMDo0MSwxMTE6VSwxMTI6VHQsMTEzOm50LDExODpJdCwxMTk6T3QsMTIwOkJ0LDEyMTpFdH0sezEwOlosMTg6MTk0fSx7MTA6WzEsMTk1XSw0Mjp6LDU4OlcsODY6eXQsOTk6ZnQsMTAyOnV0LDEwMzp2dCwxMDY6WCwxMDg6cHQsMTEwOjEwOSwxMTE6VSwxMTI6VHQsMTEzOm50fSx7MTA6WzEsMTk2XX0sezEwOlsxLDE5N10sMTAzOlsxLDE5OF19LGkobHcsWzIsMTIxXSksezEwOlsxLDE5OV0sNDI6eiw1ODpXLDg2Onl0LDk5OmZ0LDEwMjp1dCwxMDM6dnQsMTA2OlgsMTA4OnB0LDExMDoxMDksMTExOlUsMTEyOlR0LDExMzpudH0sezEwOlsxLDIwMF0sNDI6eiw1ODpXLDg2Onl0LDk5OmZ0LDEwMjp1dCwxMDM6dnQsMTA2OlgsMTA4OnB0LDExMDoxMDksMTExOlUsMTEyOlR0LDExMzpudH0sezc3OlsxLDIwMV19LGkoRmEsWzIsMTAyXSx7MTA6WzEsMjAyXX0pLGkoRmEsWzIsMTA0XSx7MTA6WzEsMjAzXX0pLHs3NzpbMSwyMDRdfSxpKE1sLFsyLDE3N10pLHs3NzpbMSwyMDVdLDk1OlsxLDIwNl19LGkodGUsWzIsNTBdLHsxMTA6MTA5LDQyOnosNTg6Vyw4Njp5dCw5OTpmdCwxMDI6dXQsMTAzOnZ0LDEwNjpYLDEwODpwdCwxMTE6VSwxMTI6VHQsMTEzOm50fSksezMxOlsxLDIwN10sNjU6aGEsNzk6MjA4LDExMzpwYSwxMTQ6RGEsMTE1OkhhfSxpKGVoLFsyLDc5XSksaShlaCxbMiw4MV0pLGkoZWgsWzIsODJdKSxpKGVoLFsyLDE0Nl0pLGkoZWgsWzIsMTQ3XSksaShlaCxbMiwxNDhdKSxpKGVoLFsyLDE0OV0pLHs0NzpbMSwyMDldLDY1OmhhLDc5OjIwOCwxMTM6cGEsMTE0OkRhLDExNTpIYX0sezMwOjIxMCw2NTpoYSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOnBhLDExNDpEYSwxMTU6SGF9LHs0OTpbMSwyMTFdLDY1OmhhLDc5OjIwOCwxMTM6cGEsMTE0OkRhLDExNTpIYX0sezUxOlsxLDIxMl0sNjU6aGEsNzk6MjA4LDExMzpwYSwxMTQ6RGEsMTE1OkhhfSx7NTM6WzEsMjEzXSw2NTpoYSw3OToyMDgsMTEzOnBhLDExNDpEYSwxMTU6SGF9LHs1NTpbMSwyMTRdLDY1OmhhLDc5OjIwOCwxMTM6cGEsMTE0OkRhLDExNTpIYX0sezU4OlsxLDIxNV19LHs2MjpbMSwyMTZdLDY1OmhhLDc5OjIwOCwxMTM6cGEsMTE0OkRhLDExNTpIYX0sezY0OlsxLDIxN10sNjU6aGEsNzk6MjA4LDExMzpwYSwxMTQ6RGEsMTE1OkhhfSx7MzA6MjE4LDY1OmhhLDc3OmJjLDc4OkNjLDc5OjE2NCwxMTM6cGEsMTE0OkRhLDExNTpIYX0sezMxOlsxLDIxOV0sNjU6aGEsNzk6MjA4LDExMzpwYSwxMTQ6RGEsMTE1OkhhfSx7NjU6aGEsNjc6WzEsMjIwXSw2OTpbMSwyMjFdLDc5OjIwOCwxMTM6cGEsMTE0OkRhLDExNTpIYX0sezY1OmhhLDY3OlsxLDIyM10sNjk6WzEsMjIyXSw3OToyMDgsMTEzOnBhLDExNDpEYSwxMTU6SGF9LGkoRnQsWzIsNDRdLHs0Mjp0aH0pLGkobmksWzIsNzBdKSxpKG5pLFsyLDY5XSksezYwOlsxLDIyNF0sNjU6aGEsNzk6MjA4LDExMzpwYSwxMTQ6RGEsMTE1OkhhfSxpKG5pLFsyLDcyXSksaShEbCxbMiw3NF0pLHszMDoyMjUsNjU6aGEsNzc6YmMsNzg6Q2MsNzk6MTY0LDExMzpwYSwxMTQ6RGEsMTE1OkhhfSxpKFd1LG0sezU6MjI2fSksaShfYyxbMiw5NV0pLGkoQ3QsWzIsMzVdKSx7NDE6MjI3LDQyOnosNDM6MzksNDU6NDAsNTg6Vyw4Njp5dCw5OTpmdCwxMDI6dXQsMTAzOnZ0LDEwNjpYLDEwODpwdCwxMTA6NDEsMTExOlUsMTEyOlR0LDExMzpudH0sezEwOmVkLDU4OmpkLDgxOm5kLDg5OjIyOCwxMDI6JGQsMTA0OjIyOSwxMDU6MjMwLDEwNjpBMCwxMDc6QmksMTA4OmNuLDEwOTprcn0sezEwOmVkLDU4OmpkLDgxOm5kLDg5OjIzOSwxMDE6WzEsMjQwXSwxMDI6JGQsMTA0OjIyOSwxMDU6MjMwLDEwNjpBMCwxMDc6QmksMTA4OmNuLDEwOTprcn0sezEwOmVkLDU4OmpkLDgxOm5kLDg5OjI0MSwxMDE6WzEsMjQyXSwxMDI6JGQsMTA0OjIyOSwxMDU6MjMwLDEwNjpBMCwxMDc6QmksMTA4OmNuLDEwOTprcn0sezEwMjpbMSwyNDNdfSx7MTA6ZWQsNTg6amQsODE6bmQsODk6MjQ0LDEwMjokZCwxMDQ6MjI5LDEwNToyMzAsMTA2OkEwLDEwNzpCaSwxMDg6Y24sMTA5OmtyfSx7NDI6eiw0NToyNDUsNTg6Vyw4Njp5dCw5OTpmdCwxMDI6dXQsMTAzOnZ0LDEwNjpYLDEwODpwdCwxMTA6NDEsMTExOlUsMTEyOlR0LDExMzpudH0saShGYSxbMiwxMDFdKSx7Nzc6WzEsMjQ2XX0sezc3OlsxLDI0N10sOTU6WzEsMjQ4XX0saShGYSxbMiwxMDldKSxpKEZhLFsyLDExMV0sezEwOlsxLDI0OV19KSxpKEZhLFsyLDExMl0pLGkoTWUsWzIsNTFdKSxpKGVoLFsyLDgwXSksaShNZSxbMiw1Ml0pLHs0OTpbMSwyNTBdLDY1OmhhLDc5OjIwOCwxMTM6cGEsMTE0OkRhLDExNTpIYX0saShNZSxbMiw1OV0pLGkoTWUsWzIsNTRdKSxpKE1lLFsyLDU1XSksaShNZSxbMiw1Nl0pLHsxMDY6WzEsMjUxXX0saShNZSxbMiw1OF0pLGkoTWUsWzIsNjBdKSx7NjQ6WzEsMjUyXSw2NTpoYSw3OToyMDgsMTEzOnBhLDExNDpEYSwxMTU6SGF9LGkoTWUsWzIsNjJdKSxpKE1lLFsyLDYzXSksaShNZSxbMiw2NV0pLGkoTWUsWzIsNjRdKSxpKE1lLFsyLDY2XSksaShbMTAsNDIsNTgsODYsOTksMTAyLDEwMywxMDYsMTA4LDExMSwxMTIsMTEzXSxbMiw3OF0pLHszMTpbMSwyNTNdLDY1OmhhLDc5OjIwOCwxMTM6cGEsMTE0OkRhLDExNTpIYX0sezY6MTEsNzoxMiw4OmIsOTpFLDEwOl8sMTE6QSwyMDoxNywyMjoxOCwyMzoxOSwyNDoyMCwyNToyMSwyNjoyMiwyNzpJLDMyOlsxLDI1NF0sMzM6MjQsMzQ6QiwzNjpOLDM4OlIsNDA6MjgsNDE6MzgsNDI6eiw0MzozOSw0NTo0MCw1ODpXLDgxOmV0LDgyOnN0LDgzOmF0LDg0OmJ0LDg1Om10LDg2Onl0LDk5OmZ0LDEwMjp1dCwxMDM6dnQsMTA2OlgsMTA4OnB0LDExMDo0MSwxMTE6VSwxMTI6VHQsMTEzOm50LDExODpJdCwxMTk6T3QsMTIwOkJ0LDEyMTpFdH0saSh0ZSxbMiw0OF0pLGkoRmEsWzIsMTE0XSx7MTAzOkVpfSksaShKbyxbMiwxMjNdLHsxMDU6MjU2LDEwOmVkLDU4OmpkLDgxOm5kLDEwMjokZCwxMDY6QTAsMTA3OkJpLDEwODpjbiwxMDk6a3J9KSxpKHdjLFsyLDEyNV0pLGkod2MsWzIsMTI3XSksaSh3YyxbMiwxMjhdKSxpKHdjLFsyLDEyOV0pLGkod2MsWzIsMTMwXSksaSh3YyxbMiwxMzFdKSxpKHdjLFsyLDEzMl0pLGkod2MsWzIsMTMzXSksaSh3YyxbMiwxMzRdKSxpKEZhLFsyLDExNV0sezEwMzpFaX0pLHsxMDpbMSwyNTddfSxpKEZhLFsyLDExNl0sezEwMzpFaX0pLHsxMDpbMSwyNThdfSxpKGx3LFsyLDEyMl0pLGkoRmEsWzIsOThdLHsxMDM6RWl9KSxpKEZhLFsyLDk5XSx7MTEwOjEwOSw0Mjp6LDU4OlcsODY6eXQsOTk6ZnQsMTAyOnV0LDEwMzp2dCwxMDY6WCwxMDg6cHQsMTExOlUsMTEyOlR0LDExMzpudH0pLGkoRmEsWzIsMTAzXSksaShGYSxbMiwxMDVdLHsxMDpbMSwyNTldfSksaShGYSxbMiwxMDZdKSx7OTU6WzEsMjYwXX0sezQ5OlsxLDI2MV19LHs2MDpbMSwyNjJdfSx7NjQ6WzEsMjYzXX0sezg6eHQsOTpIdCwxMTpMZSwyMToyNjR9LGkoQ3QsWzIsMzRdKSx7MTA6ZWQsNTg6amQsODE6bmQsMTAyOiRkLDEwNDoyNjUsMTA1OjIzMCwxMDY6QTAsMTA3OkJpLDEwODpjbiwxMDk6a3J9LGkod2MsWzIsMTI2XSksezE0OmduLDQyOlNlLDU4Om1lLDg2OlZlLDk4OjI2NiwxMDI6WWUsMTAzOmNlLDEwNjprZSwxMDg6enQsMTExOnJlLDExMjpzZSwxMTM6UGUsMTE3Ojg0fSx7MTQ6Z24sNDI6U2UsNTg6bWUsODY6VmUsOTg6MjY3LDEwMjpZZSwxMDM6Y2UsMTA2OmtlLDEwODp6dCwxMTE6cmUsMTEyOnNlLDExMzpQZSwxMTc6ODR9LHs5NTpbMSwyNjhdfSxpKEZhLFsyLDExM10pLGkoTWUsWzIsNTNdKSx7MzA6MjY5LDY1OmhhLDc3OmJjLDc4OkNjLDc5OjE2NCwxMTM6cGEsMTE0OkRhLDExNTpIYX0saShNZSxbMiw2MV0pLGkoV3UsbSx7NToyNzB9KSxpKEpvLFsyLDEyNF0sezEwNToyNTYsMTA6ZWQsNTg6amQsODE6bmQsMTAyOiRkLDEwNjpBMCwxMDc6QmksMTA4OmNuLDEwOTprcn0pLGkoRmEsWzIsMTE5XSx7MTE3OjE2MCwxMDpbMSwyNzFdLDE0OmduLDQyOlNlLDU4Om1lLDg2OlZlLDEwMjpZZSwxMDM6Y2UsMTA2OmtlLDEwODp6dCwxMTE6cmUsMTEyOnNlLDExMzpQZX0pLGkoRmEsWzIsMTIwXSx7MTE3OjE2MCwxMDpbMSwyNzJdLDE0OmduLDQyOlNlLDU4Om1lLDg2OlZlLDEwMjpZZSwxMDM6Y2UsMTA2OmtlLDEwODp6dCwxMTE6cmUsMTEyOnNlLDExMzpQZX0pLGkoRmEsWzIsMTA3XSksezMxOlsxLDI3M10sNjU6aGEsNzk6MjA4LDExMzpwYSwxMTQ6RGEsMTE1OkhhfSx7NjoxMSw3OjEyLDg6Yiw5OkUsMTA6XywxMTpBLDIwOjE3LDIyOjE4LDIzOjE5LDI0OjIwLDI1OjIxLDI2OjIyLDI3OkksMzI6WzEsMjc0XSwzMzoyNCwzNDpCLDM2Ok4sMzg6Uiw0MDoyOCw0MTozOCw0Mjp6LDQzOjM5LDQ1OjQwLDU4OlcsODE6ZXQsODI6c3QsODM6YXQsODQ6YnQsODU6bXQsODY6eXQsOTk6ZnQsMTAyOnV0LDEwMzp2dCwxMDY6WCwxMDg6cHQsMTEwOjQxLDExMTpVLDExMjpUdCwxMTM6bnQsMTE4Okl0LDExOTpPdCwxMjA6QnQsMTIxOkV0fSx7MTA6ZWQsNTg6amQsODE6bmQsODk6Mjc1LDEwMjokZCwxMDQ6MjI5LDEwNToyMzAsMTA2OkEwLDEwNzpCaSwxMDg6Y24sMTA5OmtyfSx7MTA6ZWQsNTg6amQsODE6bmQsODk6Mjc2LDEwMjokZCwxMDQ6MjI5LDEwNToyMzAsMTA2OkEwLDEwNzpCaSwxMDg6Y24sMTA5OmtyfSxpKE1lLFsyLDU3XSksaShDdCxbMiwzM10pLGkoRmEsWzIsMTE3XSx7MTAzOkVpfSksaShGYSxbMiwxMThdLHsxMDM6RWl9KV0sZGVmYXVsdEFjdGlvbnM6e30scGFyc2VFcnJvcjpmdW5jdGlvbihRaSxUcyl7aWYoVHMucmVjb3ZlcmFibGUpdGhpcy50cmFjZShRaSk7ZWxzZXt2YXIga2E9bmV3IEVycm9yKFFpKTt0aHJvdyBrYS5oYXNoPVRzLGthfX0scGFyc2U6ZnVuY3Rpb24oUWkpe3ZhciBUcz10aGlzLGthPVswXSx4aT1bXSxZYz1bbnVsbF0sQ2U9W10sdnA9dGhpcy50YWJsZSxCZT0iIixCZj0wLHlnPTAsYm09MixFaz0xLEUzPUNlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLElsPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksTDA9e3l5Ont9fTtmb3IodmFyIGh3IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksaHcpJiYoTDAueXlbaHddPXRoaXMueXlbaHddKTtJbC5zZXRJbnB1dChRaSxMMC55eSksTDAueXkubGV4ZXI9SWwsTDAueXkucGFyc2VyPXRoaXMsdHlwZW9mIElsLnl5bGxvYz4idSImJihJbC55eWxsb2M9e30pO3ZhciBINT1JbC55eWxsb2M7Q2UucHVzaChINSk7dmFyIEhiPUlsLm9wdGlvbnMmJklsLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBMMC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1MMC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBWNSgpe3ZhciB4ZztyZXR1cm4geGc9eGkucG9wKCl8fElsLmxleCgpfHxFayx0eXBlb2YgeGchPSJudW1iZXIiJiYoeGcgaW5zdGFuY2VvZiBBcnJheSYmKHhpPXhnLHhnPXhpLnBvcCgpKSx4Zz1Ucy5zeW1ib2xzX1t4Z118fHhnKSx4Z31mb3IodmFyIGYxLHJkLGlkLEc1LGZ3PXt9LFU1LG1wLFc1LFQzOzspe2lmKHJkPWthW2thLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3JkXT9pZD10aGlzLmRlZmF1bHRBY3Rpb25zW3JkXTooKGYxPT09bnVsbHx8dHlwZW9mIGYxPiJ1IikmJihmMT1WNSgpKSxpZD12cFtyZF0mJnZwW3JkXVtmMV0pLHR5cGVvZiBpZD4idSJ8fCFpZC5sZW5ndGh8fCFpZFswXSl7dmFyIHdtPSIiO1QzPVtdO2ZvcihVNSBpbiB2cFtyZF0pdGhpcy50ZXJtaW5hbHNfW1U1XSYmVTU+Ym0mJlQzLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tVNV0rIiciKTtJbC5zaG93UG9zaXRpb24/d209IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoQmYrMSkrYDoKYCtJbC5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK1QzLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bZjFdfHxmMSkrIiciOndtPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEJmKzEpKyI6IFVuZXhwZWN0ZWQgIisoZjE9PUVrPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW2YxXXx8ZjEpKyInIiksdGhpcy5wYXJzZUVycm9yKHdtLHt0ZXh0OklsLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tmMV18fGYxLGxpbmU6SWwueXlsaW5lbm8sbG9jOkg1LGV4cGVjdGVkOlQzfSl9aWYoaWRbMF1pbnN0YW5jZW9mIEFycmF5JiZpZC5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3JkKyIsIHRva2VuOiAiK2YxKTtzd2l0Y2goaWRbMF0pe2Nhc2UgMTprYS5wdXNoKGYxKSxZYy5wdXNoKElsLnl5dGV4dCksQ2UucHVzaChJbC55eWxsb2MpLGthLnB1c2goaWRbMV0pLGYxPW51bGwseWc9SWwueXlsZW5nLEJlPUlsLnl5dGV4dCxCZj1JbC55eWxpbmVubyxINT1JbC55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKG1wPXRoaXMucHJvZHVjdGlvbnNfW2lkWzFdXVsxXSxmdy4kPVljW1ljLmxlbmd0aC1tcF0sZncuXyQ9e2ZpcnN0X2xpbmU6Q2VbQ2UubGVuZ3RoLShtcHx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOkNlW0NlLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOkNlW0NlLmxlbmd0aC0obXB8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46Q2VbQ2UubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxIYiYmKGZ3Ll8kLnJhbmdlPVtDZVtDZS5sZW5ndGgtKG1wfHwxKV0ucmFuZ2VbMF0sQ2VbQ2UubGVuZ3RoLTFdLnJhbmdlWzFdXSksRzU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KGZ3LFtCZSx5ZyxCZixMMC55eSxpZFsxXSxZYyxDZV0uY29uY2F0KEUzKSksdHlwZW9mIEc1PCJ1IilyZXR1cm4gRzU7bXAmJihrYT1rYS5zbGljZSgwLC0xKm1wKjIpLFljPVljLnNsaWNlKDAsLTEqbXApLENlPUNlLnNsaWNlKDAsLTEqbXApKSxrYS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2lkWzFdXVswXSksWWMucHVzaChmdy4kKSxDZS5wdXNoKGZ3Ll8kKSxXNT12cFtrYVtrYS5sZW5ndGgtMl1dW2thW2thLmxlbmd0aC0xXV0sa2EucHVzaChXNSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LE9jPWZ1bmN0aW9uKCl7dmFyIGFmPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKFRzLGthKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKFRzLGthKTtlbHNlIHRocm93IG5ldyBFcnJvcihUcyl9LHNldElucHV0OmZ1bmN0aW9uKFFpLFRzKXtyZXR1cm4gdGhpcy55eT1Uc3x8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9UWksdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIFFpPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1RaSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9UWksdGhpcy5tYXRjaGVkKz1RaTt2YXIgVHM9UWkubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBUcz8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksUWl9LHVucHV0OmZ1bmN0aW9uKFFpKXt2YXIgVHM9UWkubGVuZ3RoLGthPVFpLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9UWkrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLVRzKSx0aGlzLm9mZnNldC09VHM7dmFyIHhpPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLGthLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09a2EubGVuZ3RoLTEpO3ZhciBZYz10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46a2E/KGthLmxlbmd0aD09PXhpLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkreGlbeGkubGVuZ3RoLWthLmxlbmd0aF0ubGVuZ3RoLWthWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tVHN9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bWWNbMF0sWWNbMF0rdGhpcy55eWxlbmctVHNdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihRaSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFFpKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBRaT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFFpLmxlbmd0aD4yMD8iLi4uIjoiIikrUWkuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgUWk9dGhpcy5tYXRjaDtyZXR1cm4gUWkubGVuZ3RoPDIwJiYoUWkrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVFpLmxlbmd0aCkpLChRaS5zdWJzdHIoMCwyMCkrKFFpLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgUWk9dGhpcy5wYXN0SW5wdXQoKSxUcz1uZXcgQXJyYXkoUWkubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gUWkrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK1RzKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihRaSxUcyl7dmFyIGthLHhpLFljO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihZYz17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihZYy55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSx4aT1RaVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykseGkmJih0aGlzLnl5bGluZW5vKz14aS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjp4aT94aVt4aS5sZW5ndGgtMV0ubGVuZ3RoLXhpW3hpLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK1FpWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVFpWzBdLHRoaXMubWF0Y2grPVFpWzBdLHRoaXMubWF0Y2hlcz1RaSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShRaVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9UWlbMF0sa2E9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsVHMsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksa2EpcmV0dXJuIGthO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBDZSBpbiBZYyl0aGlzW0NlXT1ZY1tDZV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgUWksVHMsa2EseGk7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgWWM9dGhpcy5fY3VycmVudFJ1bGVzKCksQ2U9MDtDZTxZYy5sZW5ndGg7Q2UrKylpZihrYT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW1ljW0NlXV0pLGthJiYoIVRzfHxrYVswXS5sZW5ndGg+VHNbMF0ubGVuZ3RoKSl7aWYoVHM9a2EseGk9Q2UsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoUWk9dGhpcy50ZXN0X21hdGNoKGthLFljW0NlXSksUWkhPT0hMSlyZXR1cm4gUWk7aWYodGhpcy5fYmFja3RyYWNrKXtUcz0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBUcz8oUWk9dGhpcy50ZXN0X21hdGNoKFRzLFljW3hpXSksUWkhPT0hMT9RaTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIFRzPXRoaXMubmV4dCgpO3JldHVybiBUc3x8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oVHMpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChUcyl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIFRzPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIFRzPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oVHMpe3JldHVybiBUcz10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKFRzfHwwKSxUcz49MD90aGlzLmNvbmRpdGlvblN0YWNrW1RzXToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihUcyl7dGhpcy5iZWdpbihUcyl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnt9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oVHMsa2EseGksWWMpe3N3aXRjaCh4aSl7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwzNDtjYXNlIDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDI6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDM2O2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgNDp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDY6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgNzp0aGlzLmJlZ2luKCJjYWxsYmFja25hbWUiKTticmVhaztjYXNlIDg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgOTp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiY2FsbGJhY2thcmdzIik7YnJlYWs7Y2FzZSAxMDpyZXR1cm4gOTI7Y2FzZSAxMTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMjpyZXR1cm4gOTM7Y2FzZSAxMzpyZXR1cm4iTURfU1RSIjtjYXNlIDE0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE1OnRoaXMuYmVnaW4oIm1kX3N0cmluZyIpO2JyZWFrO2Nhc2UgMTY6cmV0dXJuIlNUUiI7Y2FzZSAxNzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxODp0aGlzLnB1c2hTdGF0ZSgic3RyaW5nIik7YnJlYWs7Y2FzZSAxOTpyZXR1cm4gODE7Y2FzZSAyMDpyZXR1cm4gOTk7Y2FzZSAyMTpyZXR1cm4gODI7Y2FzZSAyMjpyZXR1cm4gMTAxO2Nhc2UgMjM6cmV0dXJuIDgzO2Nhc2UgMjQ6cmV0dXJuIDg0O2Nhc2UgMjU6cmV0dXJuIDk0O2Nhc2UgMjY6dGhpcy5iZWdpbigiY2xpY2siKTticmVhaztjYXNlIDI3OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI4OnJldHVybiA4NTtjYXNlIDI5OnJldHVybiBUcy5sZXguZmlyc3RHcmFwaCgpJiZ0aGlzLmJlZ2luKCJkaXIiKSwxMjtjYXNlIDMwOnJldHVybiBUcy5sZXguZmlyc3RHcmFwaCgpJiZ0aGlzLmJlZ2luKCJkaXIiKSwxMjtjYXNlIDMxOnJldHVybiBUcy5sZXguZmlyc3RHcmFwaCgpJiZ0aGlzLmJlZ2luKCJkaXIiKSwxMjtjYXNlIDMyOnJldHVybiAyNztjYXNlIDMzOnJldHVybiAzMjtjYXNlIDM0OnJldHVybiA5NTtjYXNlIDM1OnJldHVybiA5NTtjYXNlIDM2OnJldHVybiA5NTtjYXNlIDM3OnJldHVybiA5NTtjYXNlIDM4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTM7Y2FzZSAzOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNDA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7Y2FzZSA0MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQ0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7Y2FzZSA0NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQ3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7Y2FzZSA0ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNDk6cmV0dXJuIDExODtjYXNlIDUwOnJldHVybiAxMTk7Y2FzZSA1MTpyZXR1cm4gMTIwO2Nhc2UgNTI6cmV0dXJuIDEyMTtjYXNlIDUzOnJldHVybiAxMDI7Y2FzZSA1NDpyZXR1cm4gMTA4O2Nhc2UgNTU6cmV0dXJuIDQ0O2Nhc2UgNTY6cmV0dXJuIDU4O2Nhc2UgNTc6cmV0dXJuIDQyO2Nhc2UgNTg6cmV0dXJuIDg7Y2FzZSA1OTpyZXR1cm4gMTAzO2Nhc2UgNjA6cmV0dXJuIDExMjtjYXNlIDYxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzU7Y2FzZSA2MjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImVkZ2VUZXh0IiksNzM7Y2FzZSA2MzpyZXR1cm4gMTE2O2Nhc2UgNjQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw3NTtjYXNlIDY1OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGhpY2tFZGdlVGV4dCIpLDczO2Nhc2UgNjY6cmV0dXJuIDExNjtjYXNlIDY3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzU7Y2FzZSA2ODpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImRvdHRlZEVkZ2VUZXh0IiksNzM7Y2FzZSA2OTpyZXR1cm4gMTE2O2Nhc2UgNzA6cmV0dXJuIDc1O2Nhc2UgNzE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw1MTtjYXNlIDcyOnJldHVybiJURVhUIjtjYXNlIDczOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiZWxsaXBzZVRleHQiKSw1MDtjYXNlIDc0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNTM7Y2FzZSA3NTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw1MjtjYXNlIDc2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNTU7Y2FzZSA3NzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw1NDtjYXNlIDc4OnJldHVybiA1NjtjYXNlIDc5OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDY1O2Nhc2UgODA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw2MjtjYXNlIDgxOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDYxO2Nhc2UgODI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0NztjYXNlIDgzOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDQ2O2Nhc2UgODQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw2NztjYXNlIDg1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjk7Y2FzZSA4NjpyZXR1cm4gMTE0O2Nhc2UgODc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0cmFwVGV4dCIpLDY2O2Nhc2UgODg6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0cmFwVGV4dCIpLDY4O2Nhc2UgODk6cmV0dXJuIDExNTtjYXNlIDkwOnJldHVybiA2NTtjYXNlIDkxOnJldHVybiA4NztjYXNlIDkyOnJldHVybiJTRVAiO2Nhc2UgOTM6cmV0dXJuIDg2O2Nhc2UgOTQ6cmV0dXJuIDExMjtjYXNlIDk1OnJldHVybiAxMDg7Y2FzZSA5NjpyZXR1cm4gNDI7Y2FzZSA5NzpyZXR1cm4gMTA2O2Nhc2UgOTg6cmV0dXJuIDExMTtjYXNlIDk5OnJldHVybiAxMTM7Y2FzZSAxMDA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw2MDtjYXNlIDEwMTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw2MDtjYXNlIDEwMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQ5O2Nhc2UgMTAzOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDQ4O2Nhc2UgMTA0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMzE7Y2FzZSAxMDU6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksMjk7Y2FzZSAxMDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw2NDtjYXNlIDEwNzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw2MztjYXNlIDEwODpyZXR1cm4iVEVYVCI7Y2FzZSAxMDk6cmV0dXJuIlFVT1RFIjtjYXNlIDExMDpyZXR1cm4gOTtjYXNlIDExMTpyZXR1cm4gMTA7Y2FzZSAxMTI6cmV0dXJuIDExfX0scnVsZXM6Wy9eKD86YWNjVGl0bGVccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKlx7XHMqKS8sL14oPzpbXH1dKS8sL14oPzpbXlx9XSopLywvXig/OmNhbGxbXHNdKykvLC9eKD86XChbXHNdKlwpKS8sL14oPzpcKCkvLC9eKD86W14oXSopLywvXig/OlwpKS8sL14oPzpbXildKikvLC9eKD86W15gIl0rKS8sL14oPzpbYF1bIl0pLywvXig/OlsiXVtgXSkvLC9eKD86W14iXSspLywvXig/OlsiXSkvLC9eKD86WyJdKS8sL14oPzpzdHlsZVxiKS8sL14oPzpkZWZhdWx0XGIpLywvXig/OmxpbmtTdHlsZVxiKS8sL14oPzppbnRlcnBvbGF0ZVxiKS8sL14oPzpjbGFzc0RlZlxiKS8sL14oPzpjbGFzc1xiKS8sL14oPzpocmVmW1xzXSkvLC9eKD86Y2xpY2tbXHNdKykvLC9eKD86W1xzXG5dKS8sL14oPzpbXlxzXG5dKikvLC9eKD86Zmxvd2NoYXJ0LWVsa1xiKS8sL14oPzpncmFwaFxiKS8sL14oPzpmbG93Y2hhcnRcYikvLC9eKD86c3ViZ3JhcGhcYikvLC9eKD86ZW5kXGJccyopLywvXig/Ol9zZWxmXGIpLywvXig/Ol9ibGFua1xiKS8sL14oPzpfcGFyZW50XGIpLywvXig/Ol90b3BcYikvLC9eKD86KFxyP1xuKSpccypcbikvLC9eKD86XHMqTFJcYikvLC9eKD86XHMqUkxcYikvLC9eKD86XHMqVEJcYikvLC9eKD86XHMqQlRcYikvLC9eKD86XHMqVERcYikvLC9eKD86XHMqQlJcYikvLC9eKD86XHMqPCkvLC9eKD86XHMqPikvLC9eKD86XHMqXF4pLywvXig/OlxzKnZcYikvLC9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvLC9eKD86WzAtOV0rKS8sL14oPzojKS8sL14oPzo6OjopLywvXig/OjopLywvXig/OiYpLywvXig/OjspLywvXig/OiwpLywvXig/OlwqKS8sL14oPzpccypbeG88XT8tLStbLXhvPl1ccyopLywvXig/OlxzKlt4bzxdPy0tXHMqKS8sL14oPzpbXi1dfC0oPyEtKSspLywvXig/OlxzKlt4bzxdPz09K1s9eG8+XVxzKikvLC9eKD86XHMqW3hvPF0/PT1ccyopLywvXig/OltePV18PSg/ISkpLywvXig/OlxzKlt4bzxdPy0/XC4rLVt4bz5dP1xzKikvLC9eKD86XHMqW3hvPF0/LVwuXHMqKS8sL14oPzpbXlwuXXxcLig/ISkpLywvXig/OlxzKn5+W1x+XStccyopLywvXig/OlstL1wpXVtcKV0pLywvXig/OlteXChcKVxbXF1ce1x9XXwhXCkrKS8sL14oPzpcKC0pLywvXig/OlxdXCkpLywvXig/OlwoXFspLywvXig/OlxdXF0pLywvXig/OlxbXFspLywvXig/OlxbXHwpLywvXig/Oj4pLywvXig/OlwpXF0pLywvXig/OlxbXCgpLywvXig/OlwpXClcKSkvLC9eKD86XChcKFwoKS8sL14oPzpbXFwoPz1cXSldW1xdXSkvLC9eKD86XC8oPz1cXSlcXSkvLC9eKD86XC8oPyFcXSl8XFwoPyFcXSl8W15cXFxbXF1cKFwpXHtcfVwvXSspLywvXig/OlxbXC8pLywvXig/OlxbXFwpLywvXig/OjwpLywvXig/Oj4pLywvXig/OlxeKS8sL14oPzpcXFx8KS8sL14oPzp2XGIpLywvXig/OlwqKS8sL14oPzojKS8sL14oPzomKS8sL14oPzooW0EtWmEtejAtOSEiXCMkJSYnKitcLmA/XFxfXC9dfC0oPz1bXlw+XC1cLl0pfCg/ISkpKykvLC9eKD86LSkvLC9eKD86W1x1MDBBQVx1MDBCNVx1MDBCQVx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XXxbXHUwMEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N118W1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVdfFtcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQV18W1x1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRV18W1x1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFdfFtcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMF18W1x1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5NzddfFtcdTA5NzktXHUwOTdGXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXXxbXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXXxbXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzldfFtcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOF18W1x1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ118W1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q118W1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTldfFtcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMF18W1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNEXXxbXHUwQzU4XHUwQzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM118W1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMF18W1x1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFdfFtcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXXxbXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXXxbXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZdfFtcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQV18W1x1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFdfFtcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXXxbXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBdfFtcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMF18W1x1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXXxbXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFdfFtcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN118W1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNdfFtcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNl18W1x1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZdfFtcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ118W1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURdfFtcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXXxbXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNdfFtcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXXxbXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XXxbXHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE4M1x1MjE4NF18W1x1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNdfFtcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XXxbXHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VdfFtcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNVx1MzAwNlx1MzAzMS1cdTMwMzVcdTMwM0JcdTMwM0NdfFtcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRF18W1x1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXXxbXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQl18W1x1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjk3XHVBNkEwLVx1QTZFNVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XXxbXHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVdfFtcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQl18W1x1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XXxbXHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNV18W1x1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRdfFtcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRV18W1x1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXXxbXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZdfFtcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RdfFtcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ118W1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXXxbXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdKS8sL14oPzpcfCkvLC9eKD86XHwpLywvXig/OlwpKS8sL14oPzpcKCkvLC9eKD86XF0pLywvXig/OlxbKS8sL14oPzooXH0pKS8sL14oPzpceykvLC9eKD86W15cW1xdXChcKVx7XH1cfFwiXSspLywvXig/OiIpLywvXig/Oihccj9cbikrKS8sL14oPzpccykvLC9eKD86JCkvXSxjb25kaXRpb25zOntjYWxsYmFja2FyZ3M6e3J1bGVzOlsxMSwxMiwxNSwxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tuYW1lOntydWxlczpbOCw5LDEwLDE1LDE4LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGNsaWNrOntydWxlczpbMTUsMTgsMjcsMjgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGRvdHRlZEVkZ2VUZXh0OntydWxlczpbMTUsMTgsNjcsNjksNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LHRoaWNrRWRnZVRleHQ6e3J1bGVzOlsxNSwxOCw2NCw2Niw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sZWRnZVRleHQ6e3J1bGVzOlsxNSwxOCw2MSw2Myw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sdHJhcFRleHQ6e3J1bGVzOlsxNSwxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4NCw4NSw4Niw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sZWxsaXBzZVRleHQ6e3J1bGVzOlsxNSwxOCw3MCw3MSw3Miw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sdGV4dDp7cnVsZXM6WzE1LDE4LDcwLDczLDc0LDc1LDc2LDc3LDgwLDgxLDgyLDgzLDg3LDg4LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4XSxpbmNsdXNpdmU6ITF9LHZlcnRleDp7cnVsZXM6WzE1LDE4LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSxkaXI6e3J1bGVzOlsxNSwxOCwzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzUsNiwxNSwxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMywxNSwxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMSwxNSwxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sbWRfc3RyaW5nOntydWxlczpbMTMsMTQsMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzE1LDE2LDE3LDE4LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwyLDQsNywxNSwxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNyw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2NCw2NSw2Nyw2OCw3MCw3Myw3NSw3Nyw3OCw3OSw4MSw4Myw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDEsMTAzLDEwNSwxMDcsMTA5LDExMCwxMTEsMTEyXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIGFmfSgpO3JmLmxleGVyPU9jO2Z1bmN0aW9uIHNmKCl7dGhpcy55eT17fX1yZXR1cm4gc2YucHJvdG90eXBlPXJmLHJmLlBhcnNlcj1zZixuZXcgc2Z9KCk7cWR0LnBhcnNlcj1xZHQ7Y29uc3QgSGR0PXFkdCxySWU9ImZsb3djaGFydC0iO2xldCBBUHQ9MCxWZHQ9T2UoKSx3bD17fSxnaz1bXSxlTD17fSxNNT1bXSxyWT17fSxpWT17fSxzWT0wLEdkdD0hMCxpdyxhWSxvWT1bXTtjb25zdCBjWT1pPT5Lci5zYW5pdGl6ZVRleHQoaSxWZHQpLGZGPWZ1bmN0aW9uKGkpe2NvbnN0IGE9T2JqZWN0LmtleXMod2wpO2Zvcihjb25zdCBmIG9mIGEpaWYod2xbZl0uaWQ9PT1pKXJldHVybiB3bFtmXS5kb21JZDtyZXR1cm4gaX0sTFB0PWZ1bmN0aW9uKGksYSxmLHAsdyxtLGI9e30pe2xldCBFLF89aTtfIT09dm9pZCAwJiZfLnRyaW0oKS5sZW5ndGghPT0wJiYod2xbX109PT12b2lkIDAmJih3bFtfXT17aWQ6XyxsYWJlbFR5cGU6InRleHQiLGRvbUlkOnJJZStfKyItIitBUHQsc3R5bGVzOltdLGNsYXNzZXM6W119KSxBUHQrKyxhIT09dm9pZCAwPyhWZHQ9T2UoKSxFPWNZKGEudGV4dC50cmltKCkpLHdsW19dLmxhYmVsVHlwZT1hLnR5cGUsRVswXT09PSciJyYmRVtFLmxlbmd0aC0xXT09PSciJyYmKEU9RS5zdWJzdHJpbmcoMSxFLmxlbmd0aC0xKSksd2xbX10udGV4dD1FKTp3bFtfXS50ZXh0PT09dm9pZCAwJiYod2xbX10udGV4dD1pKSxmIT09dm9pZCAwJiYod2xbX10udHlwZT1mKSxwIT1udWxsJiZwLmZvckVhY2goZnVuY3Rpb24oQSl7d2xbX10uc3R5bGVzLnB1c2goQSl9KSx3IT1udWxsJiZ3LmZvckVhY2goZnVuY3Rpb24oQSl7d2xbX10uY2xhc3Nlcy5wdXNoKEEpfSksbSE9PXZvaWQgMCYmKHdsW19dLmRpcj1tKSx3bFtfXS5wcm9wcz09PXZvaWQgMD93bFtfXS5wcm9wcz1iOmIhPT12b2lkIDAmJk9iamVjdC5hc3NpZ24od2xbX10ucHJvcHMsYikpfSxNUHQ9ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IG09e3N0YXJ0OmksZW5kOmEsdHlwZTp2b2lkIDAsdGV4dDoiIixsYWJlbFR5cGU6InRleHQifTtVdC5pbmZvKCJhYmM3OCBHb3QgZWRnZS4uLiIsbSk7Y29uc3QgYj1mLnRleHQ7aWYoYiE9PXZvaWQgMCYmKG0udGV4dD1jWShiLnRleHQudHJpbSgpKSxtLnRleHRbMF09PT0nIicmJm0udGV4dFttLnRleHQubGVuZ3RoLTFdPT09JyInJiYobS50ZXh0PW0udGV4dC5zdWJzdHJpbmcoMSxtLnRleHQubGVuZ3RoLTEpKSxtLmxhYmVsVHlwZT1iLnR5cGUpLGYhPT12b2lkIDAmJihtLnR5cGU9Zi50eXBlLG0uc3Ryb2tlPWYuc3Ryb2tlLG0ubGVuZ3RoPWYubGVuZ3RoKSwobT09bnVsbD92b2lkIDA6bS5sZW5ndGgpPjEwJiYobS5sZW5ndGg9MTApLGdrLmxlbmd0aDwyODApVXQuaW5mbygiYWJjNzggcHVzaGluZyBlZGdlLi4uIiksZ2sucHVzaChtKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVG9vIG1hbnkgZWRnZXMiKX0sRFB0PWZ1bmN0aW9uKGksYSxmKXtVdC5pbmZvKCJhZGRMaW5rIChhYmM3OCkiLGksYSxmKTtsZXQgcCx3O2ZvcihwPTA7cDxpLmxlbmd0aDtwKyspZm9yKHc9MDt3PGEubGVuZ3RoO3crKylNUHQoaVtwXSxhW3ddLGYpfSxJUHQ9ZnVuY3Rpb24oaSxhKXtpLmZvckVhY2goZnVuY3Rpb24oZil7Zj09PSJkZWZhdWx0Ij9nay5kZWZhdWx0SW50ZXJwb2xhdGU9YTpna1tmXS5pbnRlcnBvbGF0ZT1hfSl9LE9QdD1mdW5jdGlvbihpLGEpe2kuZm9yRWFjaChmdW5jdGlvbihmKXtmPT09ImRlZmF1bHQiP2drLmRlZmF1bHRTdHlsZT1hOigkYS5pc1N1YnN0cmluZ0luQXJyYXkoImZpbGwiLGEpPT09LTEmJmEucHVzaCgiZmlsbDpub25lIiksZ2tbZl0uc3R5bGU9YSl9KX0sUFB0PWZ1bmN0aW9uKGksYSl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZil7ZUxbZl09PT12b2lkIDAmJihlTFtmXT17aWQ6ZixzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pLGEhPW51bGwmJmEuZm9yRWFjaChmdW5jdGlvbihwKXtpZihwLm1hdGNoKCJjb2xvciIpKXtjb25zdCB3PXAucmVwbGFjZSgiZmlsbCIsImJnRmlsbCIpLnJlcGxhY2UoImNvbG9yIiwiZmlsbCIpO2VMW2ZdLnRleHRTdHlsZXMucHVzaCh3KX1lTFtmXS5zdHlsZXMucHVzaChwKX0pfSl9LEZQdD1mdW5jdGlvbihpKXtpdz1pLGl3Lm1hdGNoKC8uKjwvKSYmKGl3PSJSTCIpLGl3Lm1hdGNoKC8uKlxeLykmJihpdz0iQlQiKSxpdy5tYXRjaCgvLio+LykmJihpdz0iTFIiKSxpdy5tYXRjaCgvLip2LykmJihpdz0iVEIiKSxpdz09PSJURCImJihpdz0iVEIiKX0sdVk9ZnVuY3Rpb24oaSxhKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihmKXtsZXQgcD1mO3dsW3BdIT09dm9pZCAwJiZ3bFtwXS5jbGFzc2VzLnB1c2goYSkscllbcF0hPT12b2lkIDAmJnJZW3BdLmNsYXNzZXMucHVzaChhKX0pfSxpSWU9ZnVuY3Rpb24oaSxhKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihmKXthIT09dm9pZCAwJiYoaVlbYVk9PT0iZ2VuLTEiP2ZGKGYpOmZdPWNZKGEpKX0pfSxzSWU9ZnVuY3Rpb24oaSxhLGYpe2xldCBwPWZGKGkpO2lmKE9lKCkuc2VjdXJpdHlMZXZlbCE9PSJsb29zZSJ8fGE9PT12b2lkIDApcmV0dXJuO2xldCB3PVtdO2lmKHR5cGVvZiBmPT0ic3RyaW5nIil7dz1mLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2ZvcihsZXQgbT0wO208dy5sZW5ndGg7bSsrKXtsZXQgYj13W21dLnRyaW0oKTtiLmNoYXJBdCgwKT09PSciJyYmYi5jaGFyQXQoYi5sZW5ndGgtMSk9PT0nIicmJihiPWIuc3Vic3RyKDEsYi5sZW5ndGgtMikpLHdbbV09Yn19dy5sZW5ndGg9PT0wJiZ3LnB1c2goaSksd2xbaV0hPT12b2lkIDAmJih3bFtpXS5oYXZlQ2FsbGJhY2s9ITAsb1kucHVzaChmdW5jdGlvbigpe2NvbnN0IG09ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPSIke3B9Il1gKTttIT09bnVsbCYmbS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXskYS5ydW5GdW5jKGEsLi4udyl9LCExKX0pKX0sTlB0PWZ1bmN0aW9uKGksYSxmKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihwKXt3bFtwXSE9PXZvaWQgMCYmKHdsW3BdLmxpbms9JGEuZm9ybWF0VXJsKGEsVmR0KSx3bFtwXS5saW5rVGFyZ2V0PWYpfSksdVkoaSwiY2xpY2thYmxlIil9LEJQdD1mdW5jdGlvbihpKXtpZihpWS5oYXNPd25Qcm9wZXJ0eShpKSlyZXR1cm4gaVlbaV19LFJQdD1mdW5jdGlvbihpLGEsZil7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24ocCl7c0llKHAsYSxmKX0pLHVZKGksImNsaWNrYWJsZSIpfSxqUHQ9ZnVuY3Rpb24oaSl7b1kuZm9yRWFjaChmdW5jdGlvbihhKXthKGkpfSl9LCRQdD1mdW5jdGlvbigpe3JldHVybiBpdy50cmltKCl9LHpQdD1mdW5jdGlvbigpe3JldHVybiB3bH0scVB0PWZ1bmN0aW9uKCl7cmV0dXJuIGdrfSxIUHQ9ZnVuY3Rpb24oKXtyZXR1cm4gZUx9LFZQdD1mdW5jdGlvbihpKXtsZXQgYT15cigiLm1lcm1haWRUb29sdGlwIik7KGEuX2dyb3Vwc3x8YSlbMF1bMF09PT1udWxsJiYoYT15cigiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSkseXIoaSkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7Y29uc3Qgdz15cih0aGlzKTtpZih3LmF0dHIoInRpdGxlIik9PT1udWxsKXJldHVybjtjb25zdCBiPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZSgib3BhY2l0eSIsIi45IiksYS50ZXh0KHcuYXR0cigidGl0bGUiKSkuc3R5bGUoImxlZnQiLHdpbmRvdy5zY3JvbGxYK2IubGVmdCsoYi5yaWdodC1iLmxlZnQpLzIrInB4Iikuc3R5bGUoInRvcCIsd2luZG93LnNjcm9sbFkrYi50b3AtMTQrZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ArInB4IiksYS5odG1sKGEuaHRtbCgpLnJlcGxhY2UoLyZsdDticlwvJmd0Oy9nLCI8YnIvPiIpKSx3LmNsYXNzZWQoImhvdmVyIiwhMCl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7YS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5zdHlsZSgib3BhY2l0eSIsMCkseXIodGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKX0pfTtvWS5wdXNoKFZQdCk7Y29uc3QgR1B0PWZ1bmN0aW9uKGk9Imdlbi0xIil7d2w9e30sZUw9e30sZ2s9W10sb1k9W1ZQdF0sTTU9W10sclk9e30sc1k9MCxpWT17fSxHZHQ9ITAsYVk9aSxoZygpfSxVUHQ9aT0+e2FZPWl8fCJnZW4tMiJ9LFdQdD1mdW5jdGlvbigpe3JldHVybiJmaWxsOiNmZmE7c3Ryb2tlOiAjZjY2OyBzdHJva2Utd2lkdGg6IDNweDsgc3Ryb2tlLWRhc2hhcnJheTogNSwgNTtmaWxsOiNmZmE7c3Ryb2tlOiAjNjY2OyJ9LFlQdD1mdW5jdGlvbihpLGEsZil7bGV0IHA9aS50ZXh0LnRyaW0oKSx3PWYudGV4dDtpPT09ZiYmZi50ZXh0Lm1hdGNoKC9ccy8pJiYocD12b2lkIDApO2Z1bmN0aW9uIG0oSSl7Y29uc3QgQj17Ym9vbGVhbjp7fSxudW1iZXI6e30sc3RyaW5nOnt9fSxOPVtdO2xldCBSO3JldHVybntub2RlTGlzdDpJLmZpbHRlcihmdW5jdGlvbihXKXtjb25zdCBldD10eXBlb2YgVztyZXR1cm4gVy5zdG10JiZXLnN0bXQ9PT0iZGlyIj8oUj1XLnZhbHVlLCExKTpXLnRyaW0oKT09PSIiPyExOmV0IGluIEI/QltldF0uaGFzT3duUHJvcGVydHkoVyk/ITE6QltldF1bV109ITA6Ti5pbmNsdWRlcyhXKT8hMTpOLnB1c2goVyl9KSxkaXI6Un19bGV0IGI9W107Y29uc3R7bm9kZUxpc3Q6RSxkaXI6X309bShiLmNvbmNhdC5hcHBseShiLGEpKTtpZihiPUUsYVk9PT0iZ2VuLTEiKWZvcihsZXQgST0wO0k8Yi5sZW5ndGg7SSsrKWJbSV09ZkYoYltJXSk7cD1wfHwic3ViR3JhcGgiK3NZLHc9d3x8IiIsdz1jWSh3KSxzWT1zWSsxO2NvbnN0IEE9e2lkOnAsbm9kZXM6Yix0aXRsZTp3LnRyaW0oKSxjbGFzc2VzOltdLGRpcjpfLGxhYmVsVHlwZTpmLnR5cGV9O3JldHVybiBVdC5pbmZvKCJBZGRpbmciLEEuaWQsQS5ub2RlcyxBLmRpciksQS5ub2Rlcz1yRnQoQSxNNSkubm9kZXMsTTUucHVzaChBKSxyWVtwXT1BLHB9LGFJZT1mdW5jdGlvbihpKXtmb3IoY29uc3RbYSxmXW9mIE01LmVudHJpZXMoKSlpZihmLmlkPT09aSlyZXR1cm4gYTtyZXR1cm4tMX07bGV0IGRGPS0xO2NvbnN0IEtQdD1bXSxYUHQ9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPU01W2FdLm5vZGVzO2lmKGRGPWRGKzEsZEY+MmUzKXJldHVybjtpZihLUHRbZEZdPWEsTTVbYV0uaWQ9PT1pKXJldHVybntyZXN1bHQ6ITAsY291bnQ6MH07bGV0IHA9MCx3PTE7Zm9yKDtwPGYubGVuZ3RoOyl7Y29uc3QgbT1hSWUoZltwXSk7aWYobT49MCl7Y29uc3QgYj1YUHQoaSxtKTtpZihiLnJlc3VsdClyZXR1cm57cmVzdWx0OiEwLGNvdW50OncrYi5jb3VudH07dz13K2IuY291bnR9cD1wKzF9cmV0dXJue3Jlc3VsdDohMSxjb3VudDp3fX0sUVB0PWZ1bmN0aW9uKGkpe3JldHVybiBLUHRbaV19LFpQdD1mdW5jdGlvbigpe2RGPS0xLE01Lmxlbmd0aD4wJiZYUHQoIm5vbmUiLE01Lmxlbmd0aC0xKX0sSlB0PWZ1bmN0aW9uKCl7cmV0dXJuIE01fSx0RnQ9KCk9PkdkdD8oR2R0PSExLCEwKTohMSxvSWU9aT0+e2xldCBhPWkudHJpbSgpLGY9ImFycm93X29wZW4iO3N3aXRjaChhWzBdKXtjYXNlIjwiOmY9ImFycm93X3BvaW50IixhPWEuc2xpY2UoMSk7YnJlYWs7Y2FzZSJ4IjpmPSJhcnJvd19jcm9zcyIsYT1hLnNsaWNlKDEpO2JyZWFrO2Nhc2UibyI6Zj0iYXJyb3dfY2lyY2xlIixhPWEuc2xpY2UoMSk7YnJlYWt9bGV0IHA9Im5vcm1hbCI7cmV0dXJuIGEuaW5jbHVkZXMoIj0iKSYmKHA9InRoaWNrIiksYS5pbmNsdWRlcygiLiIpJiYocD0iZG90dGVkIikse3R5cGU6ZixzdHJva2U6cH19LGNJZT0oaSxhKT0+e2NvbnN0IGY9YS5sZW5ndGg7bGV0IHA9MDtmb3IobGV0IHc9MDt3PGY7Kyt3KWFbd109PT1pJiYrK3A7cmV0dXJuIHB9LHVJZT1pPT57Y29uc3QgYT1pLnRyaW0oKTtsZXQgZj1hLnNsaWNlKDAsLTEpLHA9ImFycm93X29wZW4iO3N3aXRjaChhLnNsaWNlKC0xKSl7Y2FzZSJ4IjpwPSJhcnJvd19jcm9zcyIsYVswXT09PSJ4IiYmKHA9ImRvdWJsZV8iK3AsZj1mLnNsaWNlKDEpKTticmVhaztjYXNlIj4iOnA9ImFycm93X3BvaW50IixhWzBdPT09IjwiJiYocD0iZG91YmxlXyIrcCxmPWYuc2xpY2UoMSkpO2JyZWFrO2Nhc2UibyI6cD0iYXJyb3dfY2lyY2xlIixhWzBdPT09Im8iJiYocD0iZG91YmxlXyIrcCxmPWYuc2xpY2UoMSkpO2JyZWFrfWxldCB3PSJub3JtYWwiLG09Zi5sZW5ndGgtMTtmWzBdPT09Ij0iJiYodz0idGhpY2siKSxmWzBdPT09In4iJiYodz0iaW52aXNpYmxlIik7bGV0IGI9Y0llKCIuIixmKTtyZXR1cm4gYiYmKHc9ImRvdHRlZCIsbT1iKSx7dHlwZTpwLHN0cm9rZTp3LGxlbmd0aDptfX0sZUZ0PShpLGEpPT57Y29uc3QgZj11SWUoaSk7bGV0IHA7aWYoYSl7aWYocD1vSWUoYSkscC5zdHJva2UhPT1mLnN0cm9rZSlyZXR1cm57dHlwZToiSU5WQUxJRCIsc3Ryb2tlOiJJTlZBTElEIn07aWYocC50eXBlPT09ImFycm93X29wZW4iKXAudHlwZT1mLnR5cGU7ZWxzZXtpZihwLnR5cGUhPT1mLnR5cGUpcmV0dXJue3R5cGU6IklOVkFMSUQiLHN0cm9rZToiSU5WQUxJRCJ9O3AudHlwZT0iZG91YmxlXyIrcC50eXBlfXJldHVybiBwLnR5cGU9PT0iZG91YmxlX2Fycm93IiYmKHAudHlwZT0iZG91YmxlX2Fycm93X3BvaW50IikscC5sZW5ndGg9Zi5sZW5ndGgscH1yZXR1cm4gZn0sbkZ0PShpLGEpPT57bGV0IGY9ITE7cmV0dXJuIGkuZm9yRWFjaChwPT57cC5ub2Rlcy5pbmRleE9mKGEpPj0wJiYoZj0hMCl9KSxmfSxyRnQ9KGksYSk9Pntjb25zdCBmPVtdO3JldHVybiBpLm5vZGVzLmZvckVhY2goKHAsdyk9PntuRnQoYSxwKXx8Zi5wdXNoKGkubm9kZXNbd10pfSkse25vZGVzOmZ9fSxpRnQ9e2ZpcnN0R3JhcGg6dEZ0fSx3VD17ZGVmYXVsdENvbmZpZzooKT0+U090LmZsb3djaGFydCxzZXRBY2NUaXRsZTpFMCxnZXRBY2NUaXRsZTpmZyxnZXRBY2NEZXNjcmlwdGlvbjpnZyxzZXRBY2NEZXNjcmlwdGlvbjpkZyxhZGRWZXJ0ZXg6TFB0LGxvb2tVcERvbUlkOmZGLGFkZExpbms6RFB0LHVwZGF0ZUxpbmtJbnRlcnBvbGF0ZTpJUHQsdXBkYXRlTGluazpPUHQsYWRkQ2xhc3M6UFB0LHNldERpcmVjdGlvbjpGUHQsc2V0Q2xhc3M6dVksc2V0VG9vbHRpcDppSWUsZ2V0VG9vbHRpcDpCUHQsc2V0Q2xpY2tFdmVudDpSUHQsc2V0TGluazpOUHQsYmluZEZ1bmN0aW9uczpqUHQsZ2V0RGlyZWN0aW9uOiRQdCxnZXRWZXJ0aWNlczp6UHQsZ2V0RWRnZXM6cVB0LGdldENsYXNzZXM6SFB0LGNsZWFyOkdQdCxzZXRHZW46VVB0LGRlZmF1bHRTdHlsZTpXUHQsYWRkU3ViR3JhcGg6WVB0LGdldERlcHRoRmlyc3RQb3M6UVB0LGluZGV4Tm9kZXM6WlB0LGdldFN1YkdyYXBoczpKUHQsZGVzdHJ1Y3RMaW5rOmVGdCxsZXg6aUZ0LGV4aXN0czpuRnQsbWFrZVVuaXE6ckZ0LHNldERpYWdyYW1UaXRsZTpOYixnZXREaWFncmFtVGl0bGU6cGd9LGxJZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYWRkQ2xhc3M6UFB0LGFkZExpbms6RFB0LGFkZFNpbmdsZUxpbms6TVB0LGFkZFN1YkdyYXBoOllQdCxhZGRWZXJ0ZXg6TFB0LGJpbmRGdW5jdGlvbnM6alB0LGNsZWFyOkdQdCxkZWZhdWx0OndULGRlZmF1bHRTdHlsZTpXUHQsZGVzdHJ1Y3RMaW5rOmVGdCxmaXJzdEdyYXBoOnRGdCxnZXRDbGFzc2VzOkhQdCxnZXREZXB0aEZpcnN0UG9zOlFQdCxnZXREaXJlY3Rpb246JFB0LGdldEVkZ2VzOnFQdCxnZXRTdWJHcmFwaHM6SlB0LGdldFRvb2x0aXA6QlB0LGdldFZlcnRpY2VzOnpQdCxpbmRleE5vZGVzOlpQdCxsZXg6aUZ0LGxvb2tVcERvbUlkOmZGLHNldENsYXNzOnVZLHNldENsaWNrRXZlbnQ6UlB0LHNldERpcmVjdGlvbjpGUHQsc2V0R2VuOlVQdCxzZXRMaW5rOk5QdCx1cGRhdGVMaW5rOk9QdCx1cGRhdGVMaW5rSW50ZXJwb2xhdGU6SVB0fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBoSWU9IltvYmplY3QgU3ltYm9sXSI7ZnVuY3Rpb24gdlQoaSl7cmV0dXJuIHR5cGVvZiBpPT0ic3ltYm9sInx8ZjMoaSkmJnNUKGkpPT1oSWV9ZnVuY3Rpb24gbkwoaSxhKXtmb3IodmFyIGY9LTEscD1pPT1udWxsPzA6aS5sZW5ndGgsdz1BcnJheShwKTsrK2Y8cDspd1tmXT1hKGlbZl0sZixpKTtyZXR1cm4gd312YXIgZkllPTEvMCxzRnQ9dHc/dHcucHJvdG90eXBlOnZvaWQgMCxhRnQ9c0Z0P3NGdC50b1N0cmluZzp2b2lkIDA7ZnVuY3Rpb24gb0Z0KGkpe2lmKHR5cGVvZiBpPT0ic3RyaW5nIilyZXR1cm4gaTtpZihJZihpKSlyZXR1cm4gbkwoaSxvRnQpKyIiO2lmKHZUKGkpKXJldHVybiBhRnQ/YUZ0LmNhbGwoaSk6IiI7dmFyIGE9aSsiIjtyZXR1cm4gYT09IjAiJiYxL2k9PS1mSWU/Ii0wIjphfXZhciBkSWU9L1xzLztmdW5jdGlvbiBnSWUoaSl7Zm9yKHZhciBhPWkubGVuZ3RoO2EtLSYmZEllLnRlc3QoaS5jaGFyQXQoYSkpOyk7cmV0dXJuIGF9dmFyIHBJZT0vXlxzKy87ZnVuY3Rpb24gYkllKGkpe3JldHVybiBpJiZpLnNsaWNlKDAsZ0llKGkpKzEpLnJlcGxhY2UocEllLCIiKX12YXIgY0Z0PTAvMCx3SWU9L15bLStdMHhbMC05YS1mXSskL2ksdkllPS9eMGJbMDFdKyQvaSxtSWU9L14wb1swLTddKyQvaSx5SWU9cGFyc2VJbnQ7ZnVuY3Rpb24geEllKGkpe2lmKHR5cGVvZiBpPT0ibnVtYmVyIilyZXR1cm4gaTtpZih2VChpKSlyZXR1cm4gY0Z0O2lmKEZiKGkpKXt2YXIgYT10eXBlb2YgaS52YWx1ZU9mPT0iZnVuY3Rpb24iP2kudmFsdWVPZigpOmk7aT1GYihhKT9hKyIiOmF9aWYodHlwZW9mIGkhPSJzdHJpbmciKXJldHVybiBpPT09MD9pOitpO2k9YkllKGkpO3ZhciBmPXZJZS50ZXN0KGkpO3JldHVybiBmfHxtSWUudGVzdChpKT95SWUoaS5zbGljZSgyKSxmPzI6OCk6d0llLnRlc3QoaSk/Y0Z0OitpfXZhciB1RnQ9MS8wLGtJZT0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7ZnVuY3Rpb24gbFkoaSl7aWYoIWkpcmV0dXJuIGk9PT0wP2k6MDtpZihpPXhJZShpKSxpPT09dUZ0fHxpPT09LXVGdCl7dmFyIGE9aTwwPy0xOjE7cmV0dXJuIGEqa0llfXJldHVybiBpPT09aT9pOjB9ZnVuY3Rpb24gRUllKGkpe3ZhciBhPWxZKGkpLGY9YSUxO3JldHVybiBhPT09YT9mP2EtZjphOjB9ZnVuY3Rpb24gVEllKCl7fWZ1bmN0aW9uIGxGdChpLGEpe2Zvcih2YXIgZj0tMSxwPWk9PW51bGw/MDppLmxlbmd0aDsrK2Y8cCYmYShpW2ZdLGYsaSkhPT0hMTspO3JldHVybiBpfWZ1bmN0aW9uIGhGdChpLGEsZixwKXtmb3IodmFyIHc9aS5sZW5ndGgsbT1mKyhwPzE6LTEpO3A/bS0tOisrbTx3OylpZihhKGlbbV0sbSxpKSlyZXR1cm4gbTtyZXR1cm4tMX1mdW5jdGlvbiBDSWUoaSl7cmV0dXJuIGkhPT1pfWZ1bmN0aW9uIF9JZShpLGEsZil7Zm9yKHZhciBwPWYtMSx3PWkubGVuZ3RoOysrcDx3OylpZihpW3BdPT09YSlyZXR1cm4gcDtyZXR1cm4tMX1mdW5jdGlvbiBTSWUoaSxhLGYpe3JldHVybiBhPT09YT9fSWUoaSxhLGYpOmhGdChpLENJZSxmKX1mdW5jdGlvbiBBSWUoaSxhKXt2YXIgZj1pPT1udWxsPzA6aS5sZW5ndGg7cmV0dXJuISFmJiZTSWUoaSxhLDApPi0xfWZ1bmN0aW9uIFJiKGkpe3JldHVybiBjayhpKT9QSXQoaSk6Tk90KGkpfXZhciBMSWU9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sTUllPS9eXHcqJC87ZnVuY3Rpb24gVWR0KGksYSl7aWYoSWYoaSkpcmV0dXJuITE7dmFyIGY9dHlwZW9mIGk7cmV0dXJuIGY9PSJudW1iZXIifHxmPT0ic3ltYm9sInx8Zj09ImJvb2xlYW4ifHxpPT1udWxsfHx2VChpKT8hMDpNSWUudGVzdChpKXx8IUxJZS50ZXN0KGkpfHxhIT1udWxsJiZpIGluIE9iamVjdChhKX12YXIgREllPTUwMDtmdW5jdGlvbiBJSWUoaSl7dmFyIGE9akEoaSxmdW5jdGlvbihwKXtyZXR1cm4gZi5zaXplPT09REllJiZmLmNsZWFyKCkscH0pLGY9YS5jYWNoZTtyZXR1cm4gYX12YXIgT0llPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLFBJZT0vXFwoXFwpPy9nLEZJZT1JSWUoZnVuY3Rpb24oaSl7dmFyIGE9W107cmV0dXJuIGkuY2hhckNvZGVBdCgwKT09PTQ2JiZhLnB1c2goIiIpLGkucmVwbGFjZShPSWUsZnVuY3Rpb24oZixwLHcsbSl7YS5wdXNoKHc/bS5yZXBsYWNlKFBJZSwiJDEiKTpwfHxmKX0pLGF9KTtjb25zdCBOSWU9RkllO2Z1bmN0aW9uIGZGdChpKXtyZXR1cm4gaT09bnVsbD8iIjpvRnQoaSl9ZnVuY3Rpb24gaFkoaSxhKXtyZXR1cm4gSWYoaSk/aTpVZHQoaSxhKT9baV06TkllKGZGdChpKSl9dmFyIEJJZT0xLzA7ZnVuY3Rpb24gZ0YoaSl7aWYodHlwZW9mIGk9PSJzdHJpbmcifHx2VChpKSlyZXR1cm4gaTt2YXIgYT1pKyIiO3JldHVybiBhPT0iMCImJjEvaT09LUJJZT8iLTAiOmF9ZnVuY3Rpb24gZlkoaSxhKXthPWhZKGEsaSk7Zm9yKHZhciBmPTAscD1hLmxlbmd0aDtpIT1udWxsJiZmPHA7KWk9aVtnRihhW2YrK10pXTtyZXR1cm4gZiYmZj09cD9pOnZvaWQgMH1mdW5jdGlvbiBSSWUoaSxhLGYpe3ZhciBwPWk9PW51bGw/dm9pZCAwOmZZKGksYSk7cmV0dXJuIHA9PT12b2lkIDA/ZjpwfWZ1bmN0aW9uIFdkdChpLGEpe2Zvcih2YXIgZj0tMSxwPWEubGVuZ3RoLHc9aS5sZW5ndGg7KytmPHA7KWlbdytmXT1hW2ZdO3JldHVybiBpfXZhciBkRnQ9dHc/dHcuaXNDb25jYXRTcHJlYWRhYmxlOnZvaWQgMDtmdW5jdGlvbiBqSWUoaSl7cmV0dXJuIElmKGkpfHwkQShpKXx8ISEoZEZ0JiZpJiZpW2RGdF0pfWZ1bmN0aW9uIGRZKGksYSxmLHAsdyl7dmFyIG09LTEsYj1pLmxlbmd0aDtmb3IoZnx8KGY9akllKSx3fHwodz1bXSk7KyttPGI7KXt2YXIgRT1pW21dO2E+MCYmZihFKT9hPjE/ZFkoRSxhLTEsZixwLHcpOldkdCh3LEUpOnB8fCh3W3cubGVuZ3RoXT1FKX1yZXR1cm4gd31mdW5jdGlvbiByTChpKXt2YXIgYT1pPT1udWxsPzA6aS5sZW5ndGg7cmV0dXJuIGE/ZFkoaSwxKTpbXX1mdW5jdGlvbiAkSWUoaSl7cmV0dXJuIFJJdChCSXQoaSx2b2lkIDAsckwpLGkrIiIpfWZ1bmN0aW9uIHpJZShpLGEsZixwKXt2YXIgdz0tMSxtPWk9PW51bGw/MDppLmxlbmd0aDtmb3IocCYmbSYmKGY9aVsrK3ddKTsrK3c8bTspZj1hKGYsaVt3XSx3LGkpO3JldHVybiBmfWZ1bmN0aW9uIHFJZShpLGEpe3JldHVybiBpJiZlRihhLFJiKGEpLGkpfWZ1bmN0aW9uIEhJZShpLGEpe3JldHVybiBpJiZlRihhLHVUKGEpLGkpfWZ1bmN0aW9uIGdGdChpLGEpe2Zvcih2YXIgZj0tMSxwPWk9PW51bGw/MDppLmxlbmd0aCx3PTAsbT1bXTsrK2Y8cDspe3ZhciBiPWlbZl07YShiLGYsaSkmJihtW3crK109Yil9cmV0dXJuIG19ZnVuY3Rpb24gcEZ0KCl7cmV0dXJuW119dmFyIFZJZT1PYmplY3QucHJvdG90eXBlLEdJZT1WSWUucHJvcGVydHlJc0VudW1lcmFibGUsYkZ0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsVUllPWJGdD9mdW5jdGlvbihpKXtyZXR1cm4gaT09bnVsbD9bXTooaT1PYmplY3QoaSksZ0Z0KGJGdChpKSxmdW5jdGlvbihhKXtyZXR1cm4gR0llLmNhbGwoaSxhKX0pKX06cEZ0O2NvbnN0IFlkdD1VSWU7ZnVuY3Rpb24gV0llKGksYSl7cmV0dXJuIGVGKGksWWR0KGkpLGEpfXZhciBZSWU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxLSWU9WUllP2Z1bmN0aW9uKGkpe2Zvcih2YXIgYT1bXTtpOylXZHQoYSxZZHQoaSkpLGk9bmR0KGkpO3JldHVybiBhfTpwRnQ7Y29uc3Qgd0Z0PUtJZTtmdW5jdGlvbiBYSWUoaSxhKXtyZXR1cm4gZUYoaSx3RnQoaSksYSl9ZnVuY3Rpb24gdkZ0KGksYSxmKXt2YXIgcD1hKGkpO3JldHVybiBJZihpKT9wOldkdChwLGYoaSkpfWZ1bmN0aW9uIEtkdChpKXtyZXR1cm4gdkZ0KGksUmIsWWR0KX1mdW5jdGlvbiBRSWUoaSl7cmV0dXJuIHZGdChpLHVULHdGdCl9dmFyIFpJZT1PYmplY3QucHJvdG90eXBlLEpJZT1aSWUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gdE9lKGkpe3ZhciBhPWkubGVuZ3RoLGY9bmV3IGkuY29uc3RydWN0b3IoYSk7cmV0dXJuIGEmJnR5cGVvZiBpWzBdPT0ic3RyaW5nIiYmSkllLmNhbGwoaSwiaW5kZXgiKSYmKGYuaW5kZXg9aS5pbmRleCxmLmlucHV0PWkuaW5wdXQpLGZ9ZnVuY3Rpb24gZU9lKGksYSl7dmFyIGY9YT9lZHQoaS5idWZmZXIpOmkuYnVmZmVyO3JldHVybiBuZXcgaS5jb25zdHJ1Y3RvcihmLGkuYnl0ZU9mZnNldCxpLmJ5dGVMZW5ndGgpfXZhciBuT2U9L1x3KiQvO2Z1bmN0aW9uIHJPZShpKXt2YXIgYT1uZXcgaS5jb25zdHJ1Y3RvcihpLnNvdXJjZSxuT2UuZXhlYyhpKSk7cmV0dXJuIGEubGFzdEluZGV4PWkubGFzdEluZGV4LGF9dmFyIG1GdD10dz90dy5wcm90b3R5cGU6dm9pZCAwLHlGdD1tRnQ/bUZ0LnZhbHVlT2Y6dm9pZCAwO2Z1bmN0aW9uIGlPZShpKXtyZXR1cm4geUZ0P09iamVjdCh5RnQuY2FsbChpKSk6e319dmFyIHNPZT0iW29iamVjdCBCb29sZWFuXSIsYU9lPSJbb2JqZWN0IERhdGVdIixvT2U9IltvYmplY3QgTWFwXSIsY09lPSJbb2JqZWN0IE51bWJlcl0iLHVPZT0iW29iamVjdCBSZWdFeHBdIixsT2U9IltvYmplY3QgU2V0XSIsaE9lPSJbb2JqZWN0IFN0cmluZ10iLGZPZT0iW29iamVjdCBTeW1ib2xdIixkT2U9IltvYmplY3QgQXJyYXlCdWZmZXJdIixnT2U9IltvYmplY3QgRGF0YVZpZXddIixwT2U9IltvYmplY3QgRmxvYXQzMkFycmF5XSIsYk9lPSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iLHdPZT0iW29iamVjdCBJbnQ4QXJyYXldIix2T2U9IltvYmplY3QgSW50MTZBcnJheV0iLG1PZT0iW29iamVjdCBJbnQzMkFycmF5XSIseU9lPSJbb2JqZWN0IFVpbnQ4QXJyYXldIix4T2U9IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIixrT2U9IltvYmplY3QgVWludDE2QXJyYXldIixFT2U9IltvYmplY3QgVWludDMyQXJyYXldIjtmdW5jdGlvbiBUT2UoaSxhLGYpe3ZhciBwPWkuY29uc3RydWN0b3I7c3dpdGNoKGEpe2Nhc2UgZE9lOnJldHVybiBlZHQoaSk7Y2FzZSBzT2U6Y2FzZSBhT2U6cmV0dXJuIG5ldyBwKCtpKTtjYXNlIGdPZTpyZXR1cm4gZU9lKGksZik7Y2FzZSBwT2U6Y2FzZSBiT2U6Y2FzZSB3T2U6Y2FzZSB2T2U6Y2FzZSBtT2U6Y2FzZSB5T2U6Y2FzZSB4T2U6Y2FzZSBrT2U6Y2FzZSBFT2U6cmV0dXJuIG1JdChpLGYpO2Nhc2Ugb09lOnJldHVybiBuZXcgcDtjYXNlIGNPZTpjYXNlIGhPZTpyZXR1cm4gbmV3IHAoaSk7Y2FzZSB1T2U6cmV0dXJuIHJPZShpKTtjYXNlIGxPZTpyZXR1cm4gbmV3IHA7Y2FzZSBmT2U6cmV0dXJuIGlPZShpKX19dmFyIENPZT0iW29iamVjdCBNYXBdIjtmdW5jdGlvbiBfT2UoaSl7cmV0dXJuIGYzKGkpJiZYQShpKT09Q09lfXZhciB4RnQ9cUEmJnFBLmlzTWFwLFNPZT14RnQ/U1coeEZ0KTpfT2U7Y29uc3QgQU9lPVNPZTt2YXIgTE9lPSJbb2JqZWN0IFNldF0iO2Z1bmN0aW9uIE1PZShpKXtyZXR1cm4gZjMoaSkmJlhBKGkpPT1MT2V9dmFyIGtGdD1xQSYmcUEuaXNTZXQsRE9lPWtGdD9TVyhrRnQpOk1PZTtjb25zdCBJT2U9RE9lO3ZhciBPT2U9MSxQT2U9MixGT2U9NCxFRnQ9IltvYmplY3QgQXJndW1lbnRzXSIsTk9lPSJbb2JqZWN0IEFycmF5XSIsQk9lPSJbb2JqZWN0IEJvb2xlYW5dIixST2U9IltvYmplY3QgRGF0ZV0iLGpPZT0iW29iamVjdCBFcnJvcl0iLFRGdD0iW29iamVjdCBGdW5jdGlvbl0iLCRPZT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLHpPZT0iW29iamVjdCBNYXBdIixxT2U9IltvYmplY3QgTnVtYmVyXSIsQ0Z0PSJbb2JqZWN0IE9iamVjdF0iLEhPZT0iW29iamVjdCBSZWdFeHBdIixWT2U9IltvYmplY3QgU2V0XSIsR09lPSJbb2JqZWN0IFN0cmluZ10iLFVPZT0iW29iamVjdCBTeW1ib2xdIixXT2U9IltvYmplY3QgV2Vha01hcF0iLFlPZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLEtPZT0iW29iamVjdCBEYXRhVmlld10iLFhPZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixRT2U9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsWk9lPSJbb2JqZWN0IEludDhBcnJheV0iLEpPZT0iW29iamVjdCBJbnQxNkFycmF5XSIsdFBlPSJbb2JqZWN0IEludDMyQXJyYXldIixlUGU9IltvYmplY3QgVWludDhBcnJheV0iLG5QZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLHJQZT0iW29iamVjdCBVaW50MTZBcnJheV0iLGlQZT0iW29iamVjdCBVaW50MzJBcnJheV0iLHJsPXt9O3JsW0VGdF09cmxbTk9lXT1ybFtZT2VdPXJsW0tPZV09cmxbQk9lXT1ybFtST2VdPXJsW1hPZV09cmxbUU9lXT1ybFtaT2VdPXJsW0pPZV09cmxbdFBlXT1ybFt6T2VdPXJsW3FPZV09cmxbQ0Z0XT1ybFtIT2VdPXJsW1ZPZV09cmxbR09lXT1ybFtVT2VdPXJsW2VQZV09cmxbblBlXT1ybFtyUGVdPXJsW2lQZV09ITAscmxbak9lXT1ybFtURnRdPXJsW1dPZV09ITE7ZnVuY3Rpb24gcEYoaSxhLGYscCx3LG0pe3ZhciBiLEU9YSZPT2UsXz1hJlBPZSxBPWEmRk9lO2lmKGYmJihiPXc/ZihpLHAsdyxtKTpmKGkpKSxiIT09dm9pZCAwKXJldHVybiBiO2lmKCFGYihpKSlyZXR1cm4gaTt2YXIgST1JZihpKTtpZihJKXtpZihiPXRPZShpKSwhRSlyZXR1cm4geUl0KGksYil9ZWxzZXt2YXIgQj1YQShpKSxOPUI9PVRGdHx8Qj09JE9lO2lmKHpBKGkpKXJldHVybiB2SXQoaSxFKTtpZihCPT1DRnR8fEI9PUVGdHx8TiYmIXcpe2lmKGI9X3x8Tj97fTpFSXQoaSksIUUpcmV0dXJuIF8/WEllKGksSEllKGIsaSkpOldJZShpLHFJZShiLGkpKX1lbHNle2lmKCFybFtCXSlyZXR1cm4gdz9pOnt9O2I9VE9lKGksQixFKX19bXx8KG09bmV3IHJtKTt2YXIgUj1tLmdldChpKTtpZihSKXJldHVybiBSO20uc2V0KGksYiksSU9lKGkpP2kuZm9yRWFjaChmdW5jdGlvbihldCl7Yi5hZGQocEYoZXQsYSxmLGV0LGksbSkpfSk6QU9lKGkpJiZpLmZvckVhY2goZnVuY3Rpb24oZXQsc3Qpe2Iuc2V0KHN0LHBGKGV0LGEsZixzdCxpLG0pKX0pO3ZhciB6PUE/Xz9RSWU6S2R0Ol8/dVQ6UmIsVz1JP3ZvaWQgMDp6KGkpO3JldHVybiBsRnQoV3x8aSxmdW5jdGlvbihldCxzdCl7VyYmKHN0PWV0LGV0PWlbc3RdKSxMVyhiLHN0LHBGKGV0LGEsZixzdCxpLG0pKX0pLGJ9dmFyIHNQZT00O2Z1bmN0aW9uIGFQZShpKXtyZXR1cm4gcEYoaSxzUGUpfXZhciBvUGU9MSxjUGU9NDtmdW5jdGlvbiB1UGUoaSl7cmV0dXJuIHBGKGksb1BlfGNQZSl9dmFyIGxQZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7ZnVuY3Rpb24gaFBlKGkpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChpLGxQZSksdGhpc31mdW5jdGlvbiBmUGUoaSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGkpfWZ1bmN0aW9uIGJGKGkpe3ZhciBhPS0xLGY9aT09bnVsbD8wOmkubGVuZ3RoO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyBTNTsrK2E8ZjspdGhpcy5hZGQoaVthXSl9YkYucHJvdG90eXBlLmFkZD1iRi5wcm90b3R5cGUucHVzaD1oUGUsYkYucHJvdG90eXBlLmhhcz1mUGU7ZnVuY3Rpb24gZFBlKGksYSl7Zm9yKHZhciBmPS0xLHA9aT09bnVsbD8wOmkubGVuZ3RoOysrZjxwOylpZihhKGlbZl0sZixpKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBfRnQoaSxhKXtyZXR1cm4gaS5oYXMoYSl9dmFyIGdQZT0xLHBQZT0yO2Z1bmN0aW9uIFNGdChpLGEsZixwLHcsbSl7dmFyIGI9ZiZnUGUsRT1pLmxlbmd0aCxfPWEubGVuZ3RoO2lmKEUhPV8mJiEoYiYmXz5FKSlyZXR1cm4hMTt2YXIgQT1tLmdldChpKSxJPW0uZ2V0KGEpO2lmKEEmJkkpcmV0dXJuIEE9PWEmJkk9PWk7dmFyIEI9LTEsTj0hMCxSPWYmcFBlP25ldyBiRjp2b2lkIDA7Zm9yKG0uc2V0KGksYSksbS5zZXQoYSxpKTsrK0I8RTspe3ZhciB6PWlbQl0sVz1hW0JdO2lmKHApdmFyIGV0PWI/cChXLHosQixhLGksbSk6cCh6LFcsQixpLGEsbSk7aWYoZXQhPT12b2lkIDApe2lmKGV0KWNvbnRpbnVlO049ITE7YnJlYWt9aWYoUil7aWYoIWRQZShhLGZ1bmN0aW9uKHN0LGF0KXtpZighX0Z0KFIsYXQpJiYoej09PXN0fHx3KHosc3QsZixwLG0pKSlyZXR1cm4gUi5wdXNoKGF0KX0pKXtOPSExO2JyZWFrfX1lbHNlIGlmKCEoej09PVd8fHcoeixXLGYscCxtKSkpe049ITE7YnJlYWt9fXJldHVybiBtLmRlbGV0ZShpKSxtLmRlbGV0ZShhKSxOfWZ1bmN0aW9uIGJQZShpKXt2YXIgYT0tMSxmPUFycmF5KGkuc2l6ZSk7cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihwLHcpe2ZbKythXT1bdyxwXX0pLGZ9ZnVuY3Rpb24gWGR0KGkpe3ZhciBhPS0xLGY9QXJyYXkoaS5zaXplKTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKHApe2ZbKythXT1wfSksZn12YXIgd1BlPTEsdlBlPTIsbVBlPSJbb2JqZWN0IEJvb2xlYW5dIix5UGU9IltvYmplY3QgRGF0ZV0iLHhQZT0iW29iamVjdCBFcnJvcl0iLGtQZT0iW29iamVjdCBNYXBdIixFUGU9IltvYmplY3QgTnVtYmVyXSIsVFBlPSJbb2JqZWN0IFJlZ0V4cF0iLENQZT0iW29iamVjdCBTZXRdIixfUGU9IltvYmplY3QgU3RyaW5nXSIsU1BlPSJbb2JqZWN0IFN5bWJvbF0iLEFQZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLExQZT0iW29iamVjdCBEYXRhVmlld10iLEFGdD10dz90dy5wcm90b3R5cGU6dm9pZCAwLFFkdD1BRnQ/QUZ0LnZhbHVlT2Y6dm9pZCAwO2Z1bmN0aW9uIE1QZShpLGEsZixwLHcsbSxiKXtzd2l0Y2goZil7Y2FzZSBMUGU6aWYoaS5ieXRlTGVuZ3RoIT1hLmJ5dGVMZW5ndGh8fGkuYnl0ZU9mZnNldCE9YS5ieXRlT2Zmc2V0KXJldHVybiExO2k9aS5idWZmZXIsYT1hLmJ1ZmZlcjtjYXNlIEFQZTpyZXR1cm4hKGkuYnl0ZUxlbmd0aCE9YS5ieXRlTGVuZ3RofHwhbShuZXcgQ1coaSksbmV3IENXKGEpKSk7Y2FzZSBtUGU6Y2FzZSB5UGU6Y2FzZSBFUGU6cmV0dXJuIFJBKCtpLCthKTtjYXNlIHhQZTpyZXR1cm4gaS5uYW1lPT1hLm5hbWUmJmkubWVzc2FnZT09YS5tZXNzYWdlO2Nhc2UgVFBlOmNhc2UgX1BlOnJldHVybiBpPT1hKyIiO2Nhc2Uga1BlOnZhciBFPWJQZTtjYXNlIENQZTp2YXIgXz1wJndQZTtpZihFfHwoRT1YZHQpLGkuc2l6ZSE9YS5zaXplJiYhXylyZXR1cm4hMTt2YXIgQT1iLmdldChpKTtpZihBKXJldHVybiBBPT1hO3B8PXZQZSxiLnNldChpLGEpO3ZhciBJPVNGdChFKGkpLEUoYSkscCx3LG0sYik7cmV0dXJuIGIuZGVsZXRlKGkpLEk7Y2FzZSBTUGU6aWYoUWR0KXJldHVybiBRZHQuY2FsbChpKT09UWR0LmNhbGwoYSl9cmV0dXJuITF9dmFyIERQZT0xLElQZT1PYmplY3QucHJvdG90eXBlLE9QZT1JUGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gUFBlKGksYSxmLHAsdyxtKXt2YXIgYj1mJkRQZSxFPUtkdChpKSxfPUUubGVuZ3RoLEE9S2R0KGEpLEk9QS5sZW5ndGg7aWYoXyE9SSYmIWIpcmV0dXJuITE7Zm9yKHZhciBCPV87Qi0tOyl7dmFyIE49RVtCXTtpZighKGI/TiBpbiBhOk9QZS5jYWxsKGEsTikpKXJldHVybiExfXZhciBSPW0uZ2V0KGkpLHo9bS5nZXQoYSk7aWYoUiYmeilyZXR1cm4gUj09YSYmej09aTt2YXIgVz0hMDttLnNldChpLGEpLG0uc2V0KGEsaSk7Zm9yKHZhciBldD1iOysrQjxfOyl7Tj1FW0JdO3ZhciBzdD1pW05dLGF0PWFbTl07aWYocCl2YXIgYnQ9Yj9wKGF0LHN0LE4sYSxpLG0pOnAoc3QsYXQsTixpLGEsbSk7aWYoIShidD09PXZvaWQgMD9zdD09PWF0fHx3KHN0LGF0LGYscCxtKTpidCkpe1c9ITE7YnJlYWt9ZXR8fChldD1OPT0iY29uc3RydWN0b3IiKX1pZihXJiYhZXQpe3ZhciBtdD1pLmNvbnN0cnVjdG9yLHl0PWEuY29uc3RydWN0b3I7bXQhPXl0JiYiY29uc3RydWN0b3IiaW4gaSYmImNvbnN0cnVjdG9yImluIGEmJiEodHlwZW9mIG10PT0iZnVuY3Rpb24iJiZtdCBpbnN0YW5jZW9mIG10JiZ0eXBlb2YgeXQ9PSJmdW5jdGlvbiImJnl0IGluc3RhbmNlb2YgeXQpJiYoVz0hMSl9cmV0dXJuIG0uZGVsZXRlKGkpLG0uZGVsZXRlKGEpLFd9dmFyIEZQZT0xLExGdD0iW29iamVjdCBBcmd1bWVudHNdIixNRnQ9IltvYmplY3QgQXJyYXldIixnWT0iW29iamVjdCBPYmplY3RdIixOUGU9T2JqZWN0LnByb3RvdHlwZSxERnQ9TlBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIEJQZShpLGEsZixwLHcsbSl7dmFyIGI9SWYoaSksRT1JZihhKSxfPWI/TUZ0OlhBKGkpLEE9RT9NRnQ6WEEoYSk7Xz1fPT1MRnQ/Z1k6XyxBPUE9PUxGdD9nWTpBO3ZhciBJPV89PWdZLEI9QT09Z1ksTj1fPT1BO2lmKE4mJnpBKGkpKXtpZighekEoYSkpcmV0dXJuITE7Yj0hMCxJPSExfWlmKE4mJiFJKXJldHVybiBtfHwobT1uZXcgcm0pLGJ8fEFXKGkpP1NGdChpLGEsZixwLHcsbSk6TVBlKGksYSxfLGYscCx3LG0pO2lmKCEoZiZGUGUpKXt2YXIgUj1JJiZERnQuY2FsbChpLCJfX3dyYXBwZWRfXyIpLHo9QiYmREZ0LmNhbGwoYSwiX193cmFwcGVkX18iKTtpZihSfHx6KXt2YXIgVz1SP2kudmFsdWUoKTppLGV0PXo/YS52YWx1ZSgpOmE7cmV0dXJuIG18fChtPW5ldyBybSksdyhXLGV0LGYscCxtKX19cmV0dXJuIE4/KG18fChtPW5ldyBybSksUFBlKGksYSxmLHAsdyxtKSk6ITF9ZnVuY3Rpb24gWmR0KGksYSxmLHAsdyl7cmV0dXJuIGk9PT1hPyEwOmk9PW51bGx8fGE9PW51bGx8fCFmMyhpKSYmIWYzKGEpP2khPT1pJiZhIT09YTpCUGUoaSxhLGYscCxaZHQsdyl9dmFyIFJQZT0xLGpQZT0yO2Z1bmN0aW9uICRQZShpLGEsZixwKXt2YXIgdz1mLmxlbmd0aCxtPXcsYj0hcDtpZihpPT1udWxsKXJldHVybiFtO2ZvcihpPU9iamVjdChpKTt3LS07KXt2YXIgRT1mW3ddO2lmKGImJkVbMl0/RVsxXSE9PWlbRVswXV06IShFWzBdaW4gaSkpcmV0dXJuITF9Zm9yKDsrK3c8bTspe0U9Zlt3XTt2YXIgXz1FWzBdLEE9aVtfXSxJPUVbMV07aWYoYiYmRVsyXSl7aWYoQT09PXZvaWQgMCYmIShfIGluIGkpKXJldHVybiExfWVsc2V7dmFyIEI9bmV3IHJtO2lmKHApdmFyIE49cChBLEksXyxpLGEsQik7aWYoIShOPT09dm9pZCAwP1pkdChJLEEsUlBlfGpQZSxwLEIpOk4pKXJldHVybiExfX1yZXR1cm4hMH1mdW5jdGlvbiBJRnQoaSl7cmV0dXJuIGk9PT1pJiYhRmIoaSl9ZnVuY3Rpb24gelBlKGkpe2Zvcih2YXIgYT1SYihpKSxmPWEubGVuZ3RoO2YtLTspe3ZhciBwPWFbZl0sdz1pW3BdO2FbZl09W3AsdyxJRnQodyldfXJldHVybiBhfWZ1bmN0aW9uIE9GdChpLGEpe3JldHVybiBmdW5jdGlvbihmKXtyZXR1cm4gZj09bnVsbD8hMTpmW2ldPT09YSYmKGEhPT12b2lkIDB8fGkgaW4gT2JqZWN0KGYpKX19ZnVuY3Rpb24gcVBlKGkpe3ZhciBhPXpQZShpKTtyZXR1cm4gYS5sZW5ndGg9PTEmJmFbMF1bMl0/T0Z0KGFbMF1bMF0sYVswXVsxXSk6ZnVuY3Rpb24oZil7cmV0dXJuIGY9PT1pfHwkUGUoZixpLGEpfX1mdW5jdGlvbiBIUGUoaSxhKXtyZXR1cm4gaSE9bnVsbCYmYSBpbiBPYmplY3QoaSl9ZnVuY3Rpb24gUEZ0KGksYSxmKXthPWhZKGEsaSk7Zm9yKHZhciBwPS0xLHc9YS5sZW5ndGgsbT0hMTsrK3A8dzspe3ZhciBiPWdGKGFbcF0pO2lmKCEobT1pIT1udWxsJiZmKGksYikpKWJyZWFrO2k9aVtiXX1yZXR1cm4gbXx8KytwIT13P206KHc9aT09bnVsbD8wOmkubGVuZ3RoLCEhdyYmcmR0KHcpJiZNVyhiLHcpJiYoSWYoaSl8fCRBKGkpKSl9ZnVuY3Rpb24gRkZ0KGksYSl7cmV0dXJuIGkhPW51bGwmJlBGdChpLGEsSFBlKX12YXIgVlBlPTEsR1BlPTI7ZnVuY3Rpb24gVVBlKGksYSl7cmV0dXJuIFVkdChpKSYmSUZ0KGEpP09GdChnRihpKSxhKTpmdW5jdGlvbihmKXt2YXIgcD1SSWUoZixpKTtyZXR1cm4gcD09PXZvaWQgMCYmcD09PWE/RkZ0KGYsaSk6WmR0KGEscCxWUGV8R1BlKX19ZnVuY3Rpb24gV1BlKGkpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD92b2lkIDA6YVtpXX19ZnVuY3Rpb24gWVBlKGkpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gZlkoYSxpKX19ZnVuY3Rpb24gS1BlKGkpe3JldHVybiBVZHQoaSk/V1BlKGdGKGkpKTpZUGUoaSl9ZnVuY3Rpb24gcGsoaSl7cmV0dXJuIHR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6aT09bnVsbD9sVDp0eXBlb2YgaT09Im9iamVjdCI/SWYoaSk/VVBlKGlbMF0saVsxXSk6cVBlKGkpOktQZShpKX1mdW5jdGlvbiBKZHQoaSxhKXtyZXR1cm4gaSYmdGR0KGksYSxSYil9ZnVuY3Rpb24gWFBlKGksYSl7cmV0dXJuIGZ1bmN0aW9uKGYscCl7aWYoZj09bnVsbClyZXR1cm4gZjtpZighY2soZikpcmV0dXJuIGkoZixwKTtmb3IodmFyIHc9Zi5sZW5ndGgsbT1hP3c6LTEsYj1PYmplY3QoZik7KGE/bS0tOisrbTx3KSYmcChiW21dLG0sYikhPT0hMTspO3JldHVybiBmfX12YXIgUVBlPVhQZShKZHQpO2NvbnN0IHBZPVFQZTt2YXIgWlBlPWZ1bmN0aW9uKCl7cmV0dXJuIG5tLkRhdGUubm93KCl9O2NvbnN0IE5GdD1aUGU7dmFyIEJGdD1PYmplY3QucHJvdG90eXBlLEpQZT1CRnQuaGFzT3duUHJvcGVydHksdEZlPURXKGZ1bmN0aW9uKGksYSl7aT1PYmplY3QoaSk7dmFyIGY9LTEscD1hLmxlbmd0aCx3PXA+Mj9hWzJdOnZvaWQgMDtmb3IodyYmbkYoYVswXSxhWzFdLHcpJiYocD0xKTsrK2Y8cDspZm9yKHZhciBtPWFbZl0sYj11VChtKSxFPS0xLF89Yi5sZW5ndGg7KytFPF87KXt2YXIgQT1iW0VdLEk9aVtBXTsoST09PXZvaWQgMHx8UkEoSSxCRnRbQV0pJiYhSlBlLmNhbGwoaSxBKSkmJihpW0FdPW1bQV0pfXJldHVybiBpfSk7Y29uc3QgaUw9dEZlO2Z1bmN0aW9uIGVGZShpLGEsZil7Zm9yKHZhciBwPS0xLHc9aT09bnVsbD8wOmkubGVuZ3RoOysrcDx3OylpZihmKGEsaVtwXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gYlkoaSl7dmFyIGE9aT09bnVsbD8wOmkubGVuZ3RoO3JldHVybiBhP2lbYS0xXTp2b2lkIDB9ZnVuY3Rpb24gdDB0KGkpe3JldHVybiB0eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmxUfWZ1bmN0aW9uIGNyKGksYSl7dmFyIGY9SWYoaSk/bEZ0OnBZO3JldHVybiBmKGksdDB0KGEpKX1mdW5jdGlvbiBuRmUoaSxhKXt2YXIgZj1bXTtyZXR1cm4gcFkoaSxmdW5jdGlvbihwLHcsbSl7YShwLHcsbSkmJmYucHVzaChwKX0pLGZ9ZnVuY3Rpb24gRDUoaSxhKXt2YXIgZj1JZihpKT9nRnQ6bkZlO3JldHVybiBmKGkscGsoYSkpfWZ1bmN0aW9uIHJGZShpKXtyZXR1cm4gZnVuY3Rpb24oYSxmLHApe3ZhciB3PU9iamVjdChhKTtpZighY2soYSkpe3ZhciBtPXBrKGYpO2E9UmIoYSksZj1mdW5jdGlvbihFKXtyZXR1cm4gbSh3W0VdLEUsdyl9fXZhciBiPWkoYSxmLHApO3JldHVybiBiPi0xP3dbbT9hW2JdOmJdOnZvaWQgMH19dmFyIGlGZT1NYXRoLm1heDtmdW5jdGlvbiBzRmUoaSxhLGYpe3ZhciBwPWk9PW51bGw/MDppLmxlbmd0aDtpZighcClyZXR1cm4tMTt2YXIgdz1mPT1udWxsPzA6RUllKGYpO3JldHVybiB3PDAmJih3PWlGZShwK3csMCkpLGhGdChpLHBrKGEpLHcpfXZhciBhRmU9ckZlKHNGZSk7Y29uc3QgZTB0PWFGZTtmdW5jdGlvbiBSRnQoaSxhKXt2YXIgZj0tMSxwPWNrKGkpP0FycmF5KGkubGVuZ3RoKTpbXTtyZXR1cm4gcFkoaSxmdW5jdGlvbih3LG0sYil7cFsrK2ZdPWEodyxtLGIpfSkscH1mdW5jdGlvbiBGZihpLGEpe3ZhciBmPUlmKGkpP25MOlJGdDtyZXR1cm4gZihpLHBrKGEpKX1mdW5jdGlvbiBvRmUoaSxhKXtyZXR1cm4gaT09bnVsbD9pOnRkdChpLHQwdChhKSx1VCl9ZnVuY3Rpb24gY0ZlKGksYSl7cmV0dXJuIGkmJkpkdChpLHQwdChhKSl9ZnVuY3Rpb24gdUZlKGksYSl7cmV0dXJuIGk+YX12YXIgbEZlPU9iamVjdC5wcm90b3R5cGUsaEZlPWxGZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBmRmUoaSxhKXtyZXR1cm4gaSE9bnVsbCYmaEZlLmNhbGwoaSxhKX1mdW5jdGlvbiB6YShpLGEpe3JldHVybiBpIT1udWxsJiZQRnQoaSxhLGZGZSl9ZnVuY3Rpb24gZEZlKGksYSl7cmV0dXJuIG5MKGEsZnVuY3Rpb24oZil7cmV0dXJuIGlbZl19KX1mdW5jdGlvbiBJNShpKXtyZXR1cm4gaT09bnVsbD9bXTpkRmUoaSxSYihpKSl9ZnVuY3Rpb24gSmgoaSl7cmV0dXJuIGk9PT12b2lkIDB9ZnVuY3Rpb24gakZ0KGksYSl7cmV0dXJuIGk8YX1mdW5jdGlvbiB3WShpLGEpe3ZhciBmPXt9O3JldHVybiBhPXBrKGEpLEpkdChpLGZ1bmN0aW9uKHAsdyxtKXtUVyhmLHcsYShwLHcsbSkpfSksZn1mdW5jdGlvbiBuMHQoaSxhLGYpe2Zvcih2YXIgcD0tMSx3PWkubGVuZ3RoOysrcDx3Oyl7dmFyIG09aVtwXSxiPWEobSk7aWYoYiE9bnVsbCYmKEU9PT12b2lkIDA/Yj09PWImJiF2VChiKTpmKGIsRSkpKXZhciBFPWIsXz1tfXJldHVybiBffWZ1bmN0aW9uIG1UKGkpe3JldHVybiBpJiZpLmxlbmd0aD9uMHQoaSxsVCx1RmUpOnZvaWQgMH1mdW5jdGlvbiB3RihpKXtyZXR1cm4gaSYmaS5sZW5ndGg/bjB0KGksbFQsakZ0KTp2b2lkIDB9ZnVuY3Rpb24gcjB0KGksYSl7cmV0dXJuIGkmJmkubGVuZ3RoP24wdChpLHBrKGEpLGpGdCk6dm9pZCAwfWZ1bmN0aW9uIGdGZShpLGEsZixwKXtpZighRmIoaSkpcmV0dXJuIGk7YT1oWShhLGkpO2Zvcih2YXIgdz0tMSxtPWEubGVuZ3RoLGI9bS0xLEU9aTtFIT1udWxsJiYrK3c8bTspe3ZhciBfPWdGKGFbd10pLEE9ZjtpZihfPT09Il9fcHJvdG9fXyJ8fF89PT0iY29uc3RydWN0b3IifHxfPT09InByb3RvdHlwZSIpcmV0dXJuIGk7aWYodyE9Yil7dmFyIEk9RVtfXTtBPXA/cChJLF8sRSk6dm9pZCAwLEE9PT12b2lkIDAmJihBPUZiKEkpP0k6TVcoYVt3KzFdKT9bXTp7fSl9TFcoRSxfLEEpLEU9RVtfXX1yZXR1cm4gaX1mdW5jdGlvbiBwRmUoaSxhLGYpe2Zvcih2YXIgcD0tMSx3PWEubGVuZ3RoLG09e307KytwPHc7KXt2YXIgYj1hW3BdLEU9ZlkoaSxiKTtmKEUsYikmJmdGZShtLGhZKGIsaSksRSl9cmV0dXJuIG19ZnVuY3Rpb24gYkZlKGksYSl7dmFyIGY9aS5sZW5ndGg7Zm9yKGkuc29ydChhKTtmLS07KWlbZl09aVtmXS52YWx1ZTtyZXR1cm4gaX1mdW5jdGlvbiB3RmUoaSxhKXtpZihpIT09YSl7dmFyIGY9aSE9PXZvaWQgMCxwPWk9PT1udWxsLHc9aT09PWksbT12VChpKSxiPWEhPT12b2lkIDAsRT1hPT09bnVsbCxfPWE9PT1hLEE9dlQoYSk7aWYoIUUmJiFBJiYhbSYmaT5hfHxtJiZiJiZfJiYhRSYmIUF8fHAmJmImJl98fCFmJiZffHwhdylyZXR1cm4gMTtpZighcCYmIW0mJiFBJiZpPGF8fEEmJmYmJncmJiFwJiYhbXx8RSYmZiYmd3x8IWImJnd8fCFfKXJldHVybi0xfXJldHVybiAwfWZ1bmN0aW9uIHZGZShpLGEsZil7Zm9yKHZhciBwPS0xLHc9aS5jcml0ZXJpYSxtPWEuY3JpdGVyaWEsYj13Lmxlbmd0aCxFPWYubGVuZ3RoOysrcDxiOyl7dmFyIF89d0ZlKHdbcF0sbVtwXSk7aWYoXyl7aWYocD49RSlyZXR1cm4gXzt2YXIgQT1mW3BdO3JldHVybiBfKihBPT0iZGVzYyI/LTE6MSl9fXJldHVybiBpLmluZGV4LWEuaW5kZXh9ZnVuY3Rpb24gbUZlKGksYSxmKXthLmxlbmd0aD9hPW5MKGEsZnVuY3Rpb24obSl7cmV0dXJuIElmKG0pP2Z1bmN0aW9uKGIpe3JldHVybiBmWShiLG0ubGVuZ3RoPT09MT9tWzBdOm0pfTptfSk6YT1bbFRdO3ZhciBwPS0xO2E9bkwoYSxTVyhwaykpO3ZhciB3PVJGdChpLGZ1bmN0aW9uKG0sYixFKXt2YXIgXz1uTChhLGZ1bmN0aW9uKEEpe3JldHVybiBBKG0pfSk7cmV0dXJue2NyaXRlcmlhOl8saW5kZXg6KytwLHZhbHVlOm19fSk7cmV0dXJuIGJGZSh3LGZ1bmN0aW9uKG0sYil7cmV0dXJuIHZGZShtLGIsZil9KX1mdW5jdGlvbiB5RmUoaSxhKXtyZXR1cm4gcEZlKGksYSxmdW5jdGlvbihmLHApe3JldHVybiBGRnQoaSxwKX0pfXZhciB4RmU9JEllKGZ1bmN0aW9uKGksYSl7cmV0dXJuIGk9PW51bGw/e306eUZlKGksYSl9KTtjb25zdCB2Rj14RmU7dmFyIGtGZT1NYXRoLmNlaWwsRUZlPU1hdGgubWF4O2Z1bmN0aW9uIFRGZShpLGEsZixwKXtmb3IodmFyIHc9LTEsbT1FRmUoa0ZlKChhLWkpLyhmfHwxKSksMCksYj1BcnJheShtKTttLS07KWJbcD9tOisrd109aSxpKz1mO3JldHVybiBifWZ1bmN0aW9uIENGZShpKXtyZXR1cm4gZnVuY3Rpb24oYSxmLHApe3JldHVybiBwJiZ0eXBlb2YgcCE9Im51bWJlciImJm5GKGEsZixwKSYmKGY9cD12b2lkIDApLGE9bFkoYSksZj09PXZvaWQgMD8oZj1hLGE9MCk6Zj1sWShmKSxwPXA9PT12b2lkIDA/YTxmPzE6LTE6bFkocCksVEZlKGEsZixwLGkpfX12YXIgX0ZlPUNGZSgpO2NvbnN0IHlUPV9GZTtmdW5jdGlvbiBTRmUoaSxhLGYscCx3KXtyZXR1cm4gdyhpLGZ1bmN0aW9uKG0sYixFKXtmPXA/KHA9ITEsbSk6YShmLG0sYixFKX0pLGZ9ZnVuY3Rpb24gbUYoaSxhLGYpe3ZhciBwPUlmKGkpP3pJZTpTRmUsdz1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIHAoaSxwayhhKSxmLHcscFkpfXZhciBBRmU9RFcoZnVuY3Rpb24oaSxhKXtpZihpPT1udWxsKXJldHVybltdO3ZhciBmPWEubGVuZ3RoO3JldHVybiBmPjEmJm5GKGksYVswXSxhWzFdKT9hPVtdOmY+MiYmbkYoYVswXSxhWzFdLGFbMl0pJiYoYT1bYVswXV0pLG1GZShpLGRZKGEsMSksW10pfSk7Y29uc3QgeUY9QUZlO3ZhciBMRmU9MS8wLE1GZT1LQSYmMS9YZHQobmV3IEtBKFssLTBdKSlbMV09PUxGZT9mdW5jdGlvbihpKXtyZXR1cm4gbmV3IEtBKGkpfTpUSWU7Y29uc3QgREZlPU1GZTt2YXIgSUZlPTIwMDtmdW5jdGlvbiBPRmUoaSxhLGYpe3ZhciBwPS0xLHc9QUllLG09aS5sZW5ndGgsYj0hMCxFPVtdLF89RTtpZihmKWI9ITEsdz1lRmU7ZWxzZSBpZihtPj1JRmUpe3ZhciBBPWE/bnVsbDpERmUoaSk7aWYoQSlyZXR1cm4gWGR0KEEpO2I9ITEsdz1fRnQsXz1uZXcgYkZ9ZWxzZSBfPWE/W106RTt0OmZvcig7KytwPG07KXt2YXIgST1pW3BdLEI9YT9hKEkpOkk7aWYoST1mfHxJIT09MD9JOjAsYiYmQj09PUIpe2Zvcih2YXIgTj1fLmxlbmd0aDtOLS07KWlmKF9bTl09PT1CKWNvbnRpbnVlIHQ7YSYmXy5wdXNoKEIpLEUucHVzaChJKX1lbHNlIHcoXyxCLGYpfHwoXyE9PUUmJl8ucHVzaChCKSxFLnB1c2goSSkpfXJldHVybiBFfXZhciBQRmU9RFcoZnVuY3Rpb24oaSl7cmV0dXJuIE9GZShkWShpLDEsX0l0LCEwKSl9KTtjb25zdCBGRmU9UEZlO3ZhciBORmU9MDtmdW5jdGlvbiB2WShpKXt2YXIgYT0rK05GZTtyZXR1cm4gZkZ0KGkpK2F9ZnVuY3Rpb24gQkZlKGksYSxmKXtmb3IodmFyIHA9LTEsdz1pLmxlbmd0aCxtPWEubGVuZ3RoLGI9e307KytwPHc7KXt2YXIgRT1wPG0/YVtwXTp2b2lkIDA7ZihiLGlbcF0sRSl9cmV0dXJuIGJ9ZnVuY3Rpb24gUkZlKGksYSl7cmV0dXJuIEJGZShpfHxbXSxhfHxbXSxMVyl9dmFyIGpGZT0iXDAiLHhUPSJcMCIsJEZ0PSIBIjtjbGFzcyBjMXtjb25zdHJ1Y3RvcihhPXt9KXt0aGlzLl9pc0RpcmVjdGVkPXphKGEsImRpcmVjdGVkIik/YS5kaXJlY3RlZDohMCx0aGlzLl9pc011bHRpZ3JhcGg9emEoYSwibXVsdGlncmFwaCIpP2EubXVsdGlncmFwaDohMSx0aGlzLl9pc0NvbXBvdW5kPXphKGEsImNvbXBvdW5kIik/YS5jb21wb3VuZDohMSx0aGlzLl9sYWJlbD12b2lkIDAsdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPUhBKHZvaWQgMCksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPUhBKHZvaWQgMCksdGhpcy5fbm9kZXM9e30sdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3BhcmVudD17fSx0aGlzLl9jaGlsZHJlbj17fSx0aGlzLl9jaGlsZHJlblt4VF09e30pLHRoaXMuX2luPXt9LHRoaXMuX3ByZWRzPXt9LHRoaXMuX291dD17fSx0aGlzLl9zdWNzPXt9LHRoaXMuX2VkZ2VPYmpzPXt9LHRoaXMuX2VkZ2VMYWJlbHM9e319aXNEaXJlY3RlZCgpe3JldHVybiB0aGlzLl9pc0RpcmVjdGVkfWlzTXVsdGlncmFwaCgpe3JldHVybiB0aGlzLl9pc011bHRpZ3JhcGh9aXNDb21wb3VuZCgpe3JldHVybiB0aGlzLl9pc0NvbXBvdW5kfXNldEdyYXBoKGEpe3JldHVybiB0aGlzLl9sYWJlbD1hLHRoaXN9Z3JhcGgoKXtyZXR1cm4gdGhpcy5fbGFiZWx9c2V0RGVmYXVsdE5vZGVMYWJlbChhKXtyZXR1cm4gQkEoYSl8fChhPUhBKGEpKSx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49YSx0aGlzfW5vZGVDb3VudCgpe3JldHVybiB0aGlzLl9ub2RlQ291bnR9bm9kZXMoKXtyZXR1cm4gUmIodGhpcy5fbm9kZXMpfXNvdXJjZXMoKXt2YXIgYT10aGlzO3JldHVybiBENSh0aGlzLm5vZGVzKCksZnVuY3Rpb24oZil7cmV0dXJuIG9GKGEuX2luW2ZdKX0pfXNpbmtzKCl7dmFyIGE9dGhpcztyZXR1cm4gRDUodGhpcy5ub2RlcygpLGZ1bmN0aW9uKGYpe3JldHVybiBvRihhLl9vdXRbZl0pfSl9c2V0Tm9kZXMoYSxmKXt2YXIgcD1hcmd1bWVudHMsdz10aGlzO3JldHVybiBjcihhLGZ1bmN0aW9uKG0pe3AubGVuZ3RoPjE/dy5zZXROb2RlKG0sZik6dy5zZXROb2RlKG0pfSksdGhpc31zZXROb2RlKGEsZil7cmV0dXJuIHphKHRoaXMuX25vZGVzLGEpPyhhcmd1bWVudHMubGVuZ3RoPjEmJih0aGlzLl9ub2Rlc1thXT1mKSx0aGlzKToodGhpcy5fbm9kZXNbYV09YXJndW1lbnRzLmxlbmd0aD4xP2Y6dGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuKGEpLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9wYXJlbnRbYV09eFQsdGhpcy5fY2hpbGRyZW5bYV09e30sdGhpcy5fY2hpbGRyZW5beFRdW2FdPSEwKSx0aGlzLl9pblthXT17fSx0aGlzLl9wcmVkc1thXT17fSx0aGlzLl9vdXRbYV09e30sdGhpcy5fc3Vjc1thXT17fSwrK3RoaXMuX25vZGVDb3VudCx0aGlzKX1ub2RlKGEpe3JldHVybiB0aGlzLl9ub2Rlc1thXX1oYXNOb2RlKGEpe3JldHVybiB6YSh0aGlzLl9ub2RlcyxhKX1yZW1vdmVOb2RlKGEpe3ZhciBmPXRoaXM7aWYoemEodGhpcy5fbm9kZXMsYSkpe3ZhciBwPWZ1bmN0aW9uKHcpe2YucmVtb3ZlRWRnZShmLl9lZGdlT2Jqc1t3XSl9O2RlbGV0ZSB0aGlzLl9ub2Rlc1thXSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3QoYSksZGVsZXRlIHRoaXMuX3BhcmVudFthXSxjcih0aGlzLmNoaWxkcmVuKGEpLGZ1bmN0aW9uKHcpe2Yuc2V0UGFyZW50KHcpfSksZGVsZXRlIHRoaXMuX2NoaWxkcmVuW2FdKSxjcihSYih0aGlzLl9pblthXSkscCksZGVsZXRlIHRoaXMuX2luW2FdLGRlbGV0ZSB0aGlzLl9wcmVkc1thXSxjcihSYih0aGlzLl9vdXRbYV0pLHApLGRlbGV0ZSB0aGlzLl9vdXRbYV0sZGVsZXRlIHRoaXMuX3N1Y3NbYV0sLS10aGlzLl9ub2RlQ291bnR9cmV0dXJuIHRoaXN9c2V0UGFyZW50KGEsZil7aWYoIXRoaXMuX2lzQ29tcG91bmQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IHBhcmVudCBpbiBhIG5vbi1jb21wb3VuZCBncmFwaCIpO2lmKEpoKGYpKWY9eFQ7ZWxzZXtmKz0iIjtmb3IodmFyIHA9ZjshSmgocCk7cD10aGlzLnBhcmVudChwKSlpZihwPT09YSl0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgIitmKyIgYXMgcGFyZW50IG9mICIrYSsiIHdvdWxkIGNyZWF0ZSBhIGN5Y2xlIik7dGhpcy5zZXROb2RlKGYpfXJldHVybiB0aGlzLnNldE5vZGUoYSksdGhpcy5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3QoYSksdGhpcy5fcGFyZW50W2FdPWYsdGhpcy5fY2hpbGRyZW5bZl1bYV09ITAsdGhpc31fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3QoYSl7ZGVsZXRlIHRoaXMuX2NoaWxkcmVuW3RoaXMuX3BhcmVudFthXV1bYV19cGFyZW50KGEpe2lmKHRoaXMuX2lzQ29tcG91bmQpe3ZhciBmPXRoaXMuX3BhcmVudFthXTtpZihmIT09eFQpcmV0dXJuIGZ9fWNoaWxkcmVuKGEpe2lmKEpoKGEpJiYoYT14VCksdGhpcy5faXNDb21wb3VuZCl7dmFyIGY9dGhpcy5fY2hpbGRyZW5bYV07aWYoZilyZXR1cm4gUmIoZil9ZWxzZXtpZihhPT09eFQpcmV0dXJuIHRoaXMubm9kZXMoKTtpZih0aGlzLmhhc05vZGUoYSkpcmV0dXJuW119fXByZWRlY2Vzc29ycyhhKXt2YXIgZj10aGlzLl9wcmVkc1thXTtpZihmKXJldHVybiBSYihmKX1zdWNjZXNzb3JzKGEpe3ZhciBmPXRoaXMuX3N1Y3NbYV07aWYoZilyZXR1cm4gUmIoZil9bmVpZ2hib3JzKGEpe3ZhciBmPXRoaXMucHJlZGVjZXNzb3JzKGEpO2lmKGYpcmV0dXJuIEZGZShmLHRoaXMuc3VjY2Vzc29ycyhhKSl9aXNMZWFmKGEpe3ZhciBmO3JldHVybiB0aGlzLmlzRGlyZWN0ZWQoKT9mPXRoaXMuc3VjY2Vzc29ycyhhKTpmPXRoaXMubmVpZ2hib3JzKGEpLGYubGVuZ3RoPT09MH1maWx0ZXJOb2RlcyhhKXt2YXIgZj1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih7ZGlyZWN0ZWQ6dGhpcy5faXNEaXJlY3RlZCxtdWx0aWdyYXBoOnRoaXMuX2lzTXVsdGlncmFwaCxjb21wb3VuZDp0aGlzLl9pc0NvbXBvdW5kfSk7Zi5zZXRHcmFwaCh0aGlzLmdyYXBoKCkpO3ZhciBwPXRoaXM7Y3IodGhpcy5fbm9kZXMsZnVuY3Rpb24oYixFKXthKEUpJiZmLnNldE5vZGUoRSxiKX0pLGNyKHRoaXMuX2VkZ2VPYmpzLGZ1bmN0aW9uKGIpe2YuaGFzTm9kZShiLnYpJiZmLmhhc05vZGUoYi53KSYmZi5zZXRFZGdlKGIscC5lZGdlKGIpKX0pO3ZhciB3PXt9O2Z1bmN0aW9uIG0oYil7dmFyIEU9cC5wYXJlbnQoYik7cmV0dXJuIEU9PT12b2lkIDB8fGYuaGFzTm9kZShFKT8od1tiXT1FLEUpOkUgaW4gdz93W0VdOm0oRSl9cmV0dXJuIHRoaXMuX2lzQ29tcG91bmQmJmNyKGYubm9kZXMoKSxmdW5jdGlvbihiKXtmLnNldFBhcmVudChiLG0oYikpfSksZn1zZXREZWZhdWx0RWRnZUxhYmVsKGEpe3JldHVybiBCQShhKXx8KGE9SEEoYSkpLHRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbj1hLHRoaXN9ZWRnZUNvdW50KCl7cmV0dXJuIHRoaXMuX2VkZ2VDb3VudH1lZGdlcygpe3JldHVybiBJNSh0aGlzLl9lZGdlT2Jqcyl9c2V0UGF0aChhLGYpe3ZhciBwPXRoaXMsdz1hcmd1bWVudHM7cmV0dXJuIG1GKGEsZnVuY3Rpb24obSxiKXtyZXR1cm4gdy5sZW5ndGg+MT9wLnNldEVkZ2UobSxiLGYpOnAuc2V0RWRnZShtLGIpLGJ9KSx0aGlzfXNldEVkZ2UoKXt2YXIgYSxmLHAsdyxtPSExLGI9YXJndW1lbnRzWzBdO3R5cGVvZiBiPT0ib2JqZWN0IiYmYiE9PW51bGwmJiJ2ImluIGI/KGE9Yi52LGY9Yi53LHA9Yi5uYW1lLGFyZ3VtZW50cy5sZW5ndGg9PT0yJiYodz1hcmd1bWVudHNbMV0sbT0hMCkpOihhPWIsZj1hcmd1bWVudHNbMV0scD1hcmd1bWVudHNbM10sYXJndW1lbnRzLmxlbmd0aD4yJiYodz1hcmd1bWVudHNbMl0sbT0hMCkpLGE9IiIrYSxmPSIiK2YsSmgocCl8fChwPSIiK3ApO3ZhciBFPXhGKHRoaXMuX2lzRGlyZWN0ZWQsYSxmLHApO2lmKHphKHRoaXMuX2VkZ2VMYWJlbHMsRSkpcmV0dXJuIG0mJih0aGlzLl9lZGdlTGFiZWxzW0VdPXcpLHRoaXM7aWYoIUpoKHApJiYhdGhpcy5faXNNdWx0aWdyYXBoKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNldCBhIG5hbWVkIGVkZ2Ugd2hlbiBpc011bHRpZ3JhcGggPSBmYWxzZSIpO3RoaXMuc2V0Tm9kZShhKSx0aGlzLnNldE5vZGUoZiksdGhpcy5fZWRnZUxhYmVsc1tFXT1tP3c6dGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuKGEsZixwKTt2YXIgXz0kRmUodGhpcy5faXNEaXJlY3RlZCxhLGYscCk7cmV0dXJuIGE9Xy52LGY9Xy53LE9iamVjdC5mcmVlemUoXyksdGhpcy5fZWRnZU9ianNbRV09Xyx6RnQodGhpcy5fcHJlZHNbZl0sYSksekZ0KHRoaXMuX3N1Y3NbYV0sZiksdGhpcy5faW5bZl1bRV09Xyx0aGlzLl9vdXRbYV1bRV09Xyx0aGlzLl9lZGdlQ291bnQrKyx0aGlzfWVkZ2UoYSxmLHApe3ZhciB3PWFyZ3VtZW50cy5sZW5ndGg9PT0xP2kwdCh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6eEYodGhpcy5faXNEaXJlY3RlZCxhLGYscCk7cmV0dXJuIHRoaXMuX2VkZ2VMYWJlbHNbd119aGFzRWRnZShhLGYscCl7dmFyIHc9YXJndW1lbnRzLmxlbmd0aD09PTE/aTB0KHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTp4Rih0aGlzLl9pc0RpcmVjdGVkLGEsZixwKTtyZXR1cm4gemEodGhpcy5fZWRnZUxhYmVscyx3KX1yZW1vdmVFZGdlKGEsZixwKXt2YXIgdz1hcmd1bWVudHMubGVuZ3RoPT09MT9pMHQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOnhGKHRoaXMuX2lzRGlyZWN0ZWQsYSxmLHApLG09dGhpcy5fZWRnZU9ianNbd107cmV0dXJuIG0mJihhPW0udixmPW0udyxkZWxldGUgdGhpcy5fZWRnZUxhYmVsc1t3XSxkZWxldGUgdGhpcy5fZWRnZU9ianNbd10scUZ0KHRoaXMuX3ByZWRzW2ZdLGEpLHFGdCh0aGlzLl9zdWNzW2FdLGYpLGRlbGV0ZSB0aGlzLl9pbltmXVt3XSxkZWxldGUgdGhpcy5fb3V0W2FdW3ddLHRoaXMuX2VkZ2VDb3VudC0tKSx0aGlzfWluRWRnZXMoYSxmKXt2YXIgcD10aGlzLl9pblthXTtpZihwKXt2YXIgdz1JNShwKTtyZXR1cm4gZj9ENSh3LGZ1bmN0aW9uKG0pe3JldHVybiBtLnY9PT1mfSk6d319b3V0RWRnZXMoYSxmKXt2YXIgcD10aGlzLl9vdXRbYV07aWYocCl7dmFyIHc9STUocCk7cmV0dXJuIGY/RDUodyxmdW5jdGlvbihtKXtyZXR1cm4gbS53PT09Zn0pOnd9fW5vZGVFZGdlcyhhLGYpe3ZhciBwPXRoaXMuaW5FZGdlcyhhLGYpO2lmKHApcmV0dXJuIHAuY29uY2F0KHRoaXMub3V0RWRnZXMoYSxmKSl9fWMxLnByb3RvdHlwZS5fbm9kZUNvdW50PTAsYzEucHJvdG90eXBlLl9lZGdlQ291bnQ9MDtmdW5jdGlvbiB6RnQoaSxhKXtpW2FdP2lbYV0rKzppW2FdPTF9ZnVuY3Rpb24gcUZ0KGksYSl7LS1pW2FdfHxkZWxldGUgaVthXX1mdW5jdGlvbiB4RihpLGEsZixwKXt2YXIgdz0iIithLG09IiIrZjtpZighaSYmdz5tKXt2YXIgYj13O3c9bSxtPWJ9cmV0dXJuIHcrJEZ0K20rJEZ0KyhKaChwKT9qRmU6cCl9ZnVuY3Rpb24gJEZlKGksYSxmLHApe3ZhciB3PSIiK2EsbT0iIitmO2lmKCFpJiZ3Pm0pe3ZhciBiPXc7dz1tLG09Yn12YXIgRT17djp3LHc6bX07cmV0dXJuIHAmJihFLm5hbWU9cCksRX1mdW5jdGlvbiBpMHQoaSxhKXtyZXR1cm4geEYoaSxhLnYsYS53LGEubmFtZSl9Y2xhc3MgekZle2NvbnN0cnVjdG9yKCl7dmFyIGE9e307YS5fbmV4dD1hLl9wcmV2PWEsdGhpcy5fc2VudGluZWw9YX1kZXF1ZXVlKCl7dmFyIGE9dGhpcy5fc2VudGluZWwsZj1hLl9wcmV2O2lmKGYhPT1hKXJldHVybiBIRnQoZiksZn1lbnF1ZXVlKGEpe3ZhciBmPXRoaXMuX3NlbnRpbmVsO2EuX3ByZXYmJmEuX25leHQmJkhGdChhKSxhLl9uZXh0PWYuX25leHQsZi5fbmV4dC5fcHJldj1hLGYuX25leHQ9YSxhLl9wcmV2PWZ9dG9TdHJpbmcoKXtmb3IodmFyIGE9W10sZj10aGlzLl9zZW50aW5lbCxwPWYuX3ByZXY7cCE9PWY7KWEucHVzaChKU09OLnN0cmluZ2lmeShwLHFGZSkpLHA9cC5fcHJldjtyZXR1cm4iWyIrYS5qb2luKCIsICIpKyJdIn19ZnVuY3Rpb24gSEZ0KGkpe2kuX3ByZXYuX25leHQ9aS5fbmV4dCxpLl9uZXh0Ll9wcmV2PWkuX3ByZXYsZGVsZXRlIGkuX25leHQsZGVsZXRlIGkuX3ByZXZ9ZnVuY3Rpb24gcUZlKGksYSl7aWYoaSE9PSJfbmV4dCImJmkhPT0iX3ByZXYiKXJldHVybiBhfXZhciBIRmU9SEEoMSk7ZnVuY3Rpb24gVkZlKGksYSl7aWYoaS5ub2RlQ291bnQoKTw9MSlyZXR1cm5bXTt2YXIgZj1VRmUoaSxhfHxIRmUpLHA9R0ZlKGYuZ3JhcGgsZi5idWNrZXRzLGYuemVyb0lkeCk7cmV0dXJuIHJMKEZmKHAsZnVuY3Rpb24odyl7cmV0dXJuIGkub3V0RWRnZXMody52LHcudyl9KSl9ZnVuY3Rpb24gR0ZlKGksYSxmKXtmb3IodmFyIHA9W10sdz1hW2EubGVuZ3RoLTFdLG09YVswXSxiO2kubm9kZUNvdW50KCk7KXtmb3IoO2I9bS5kZXF1ZXVlKCk7KXMwdChpLGEsZixiKTtmb3IoO2I9dy5kZXF1ZXVlKCk7KXMwdChpLGEsZixiKTtpZihpLm5vZGVDb3VudCgpKXtmb3IodmFyIEU9YS5sZW5ndGgtMjtFPjA7LS1FKWlmKGI9YVtFXS5kZXF1ZXVlKCksYil7cD1wLmNvbmNhdChzMHQoaSxhLGYsYiwhMCkpO2JyZWFrfX19cmV0dXJuIHB9ZnVuY3Rpb24gczB0KGksYSxmLHAsdyl7dmFyIG09dz9bXTp2b2lkIDA7cmV0dXJuIGNyKGkuaW5FZGdlcyhwLnYpLGZ1bmN0aW9uKGIpe3ZhciBFPWkuZWRnZShiKSxfPWkubm9kZShiLnYpO3cmJm0ucHVzaCh7djpiLnYsdzpiLnd9KSxfLm91dC09RSxhMHQoYSxmLF8pfSksY3IoaS5vdXRFZGdlcyhwLnYpLGZ1bmN0aW9uKGIpe3ZhciBFPWkuZWRnZShiKSxfPWIudyxBPWkubm9kZShfKTtBLmluLT1FLGEwdChhLGYsQSl9KSxpLnJlbW92ZU5vZGUocC52KSxtfWZ1bmN0aW9uIFVGZShpLGEpe3ZhciBmPW5ldyBjMSxwPTAsdz0wO2NyKGkubm9kZXMoKSxmdW5jdGlvbihFKXtmLnNldE5vZGUoRSx7djpFLGluOjAsb3V0OjB9KX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihFKXt2YXIgXz1mLmVkZ2UoRS52LEUudyl8fDAsQT1hKEUpLEk9XytBO2Yuc2V0RWRnZShFLnYsRS53LEkpLHc9TWF0aC5tYXgodyxmLm5vZGUoRS52KS5vdXQrPUEpLHA9TWF0aC5tYXgocCxmLm5vZGUoRS53KS5pbis9QSl9KTt2YXIgbT15VCh3K3ArMykubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB6RmV9KSxiPXArMTtyZXR1cm4gY3IoZi5ub2RlcygpLGZ1bmN0aW9uKEUpe2EwdChtLGIsZi5ub2RlKEUpKX0pLHtncmFwaDpmLGJ1Y2tldHM6bSx6ZXJvSWR4OmJ9fWZ1bmN0aW9uIGEwdChpLGEsZil7Zi5vdXQ/Zi5pbj9pW2Yub3V0LWYuaW4rYV0uZW5xdWV1ZShmKTppW2kubGVuZ3RoLTFdLmVucXVldWUoZik6aVswXS5lbnF1ZXVlKGYpfWZ1bmN0aW9uIFdGZShpKXt2YXIgYT1pLmdyYXBoKCkuYWN5Y2xpY2VyPT09ImdyZWVkeSI/VkZlKGksZihpKSk6WUZlKGkpO2NyKGEsZnVuY3Rpb24ocCl7dmFyIHc9aS5lZGdlKHApO2kucmVtb3ZlRWRnZShwKSx3LmZvcndhcmROYW1lPXAubmFtZSx3LnJldmVyc2VkPSEwLGkuc2V0RWRnZShwLncscC52LHcsdlkoInJldiIpKX0pO2Z1bmN0aW9uIGYocCl7cmV0dXJuIGZ1bmN0aW9uKHcpe3JldHVybiBwLmVkZ2Uodykud2VpZ2h0fX19ZnVuY3Rpb24gWUZlKGkpe3ZhciBhPVtdLGY9e30scD17fTtmdW5jdGlvbiB3KG0pe3phKHAsbSl8fChwW21dPSEwLGZbbV09ITAsY3IoaS5vdXRFZGdlcyhtKSxmdW5jdGlvbihiKXt6YShmLGIudyk/YS5wdXNoKGIpOncoYi53KX0pLGRlbGV0ZSBmW21dKX1yZXR1cm4gY3IoaS5ub2RlcygpLHcpLGF9ZnVuY3Rpb24gS0ZlKGkpe2NyKGkuZWRnZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLmVkZ2UoYSk7aWYoZi5yZXZlcnNlZCl7aS5yZW1vdmVFZGdlKGEpO3ZhciBwPWYuZm9yd2FyZE5hbWU7ZGVsZXRlIGYucmV2ZXJzZWQsZGVsZXRlIGYuZm9yd2FyZE5hbWUsaS5zZXRFZGdlKGEudyxhLnYsZixwKX19KX1mdW5jdGlvbiBzTChpLGEsZixwKXt2YXIgdztkbyB3PXZZKHApO3doaWxlKGkuaGFzTm9kZSh3KSk7cmV0dXJuIGYuZHVtbXk9YSxpLnNldE5vZGUodyxmKSx3fWZ1bmN0aW9uIFhGZShpKXt2YXIgYT1uZXcgYzEoKS5zZXRHcmFwaChpLmdyYXBoKCkpO3JldHVybiBjcihpLm5vZGVzKCksZnVuY3Rpb24oZil7YS5zZXROb2RlKGYsaS5ub2RlKGYpKX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihmKXt2YXIgcD1hLmVkZ2UoZi52LGYudyl8fHt3ZWlnaHQ6MCxtaW5sZW46MX0sdz1pLmVkZ2UoZik7YS5zZXRFZGdlKGYudixmLncse3dlaWdodDpwLndlaWdodCt3LndlaWdodCxtaW5sZW46TWF0aC5tYXgocC5taW5sZW4sdy5taW5sZW4pfSl9KSxhfWZ1bmN0aW9uIFZGdChpKXt2YXIgYT1uZXcgYzEoe211bHRpZ3JhcGg6aS5pc011bHRpZ3JhcGgoKX0pLnNldEdyYXBoKGkuZ3JhcGgoKSk7cmV0dXJuIGNyKGkubm9kZXMoKSxmdW5jdGlvbihmKXtpLmNoaWxkcmVuKGYpLmxlbmd0aHx8YS5zZXROb2RlKGYsaS5ub2RlKGYpKX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihmKXthLnNldEVkZ2UoZixpLmVkZ2UoZikpfSksYX1mdW5jdGlvbiBHRnQoaSxhKXt2YXIgZj1pLngscD1pLnksdz1hLngtZixtPWEueS1wLGI9aS53aWR0aC8yLEU9aS5oZWlnaHQvMjtpZighdyYmIW0pdGhyb3cgbmV3IEVycm9yKCJOb3QgcG9zc2libGUgdG8gZmluZCBpbnRlcnNlY3Rpb24gaW5zaWRlIG9mIHRoZSByZWN0YW5nbGUiKTt2YXIgXyxBO3JldHVybiBNYXRoLmFicyhtKSpiPk1hdGguYWJzKHcpKkU/KG08MCYmKEU9LUUpLF89RSp3L20sQT1FKToodzwwJiYoYj0tYiksXz1iLEE9YiptL3cpLHt4OmYrXyx5OnArQX19ZnVuY3Rpb24gbVkoaSl7dmFyIGE9RmYoeVQoV0Z0KGkpKzEpLGZ1bmN0aW9uKCl7cmV0dXJuW119KTtyZXR1cm4gY3IoaS5ub2RlcygpLGZ1bmN0aW9uKGYpe3ZhciBwPWkubm9kZShmKSx3PXAucmFuaztKaCh3KXx8KGFbd11bcC5vcmRlcl09Zil9KSxhfWZ1bmN0aW9uIFFGZShpKXt2YXIgYT13RihGZihpLm5vZGVzKCksZnVuY3Rpb24oZil7cmV0dXJuIGkubm9kZShmKS5yYW5rfSkpO2NyKGkubm9kZXMoKSxmdW5jdGlvbihmKXt2YXIgcD1pLm5vZGUoZik7emEocCwicmFuayIpJiYocC5yYW5rLT1hKX0pfWZ1bmN0aW9uIFpGZShpKXt2YXIgYT13RihGZihpLm5vZGVzKCksZnVuY3Rpb24obSl7cmV0dXJuIGkubm9kZShtKS5yYW5rfSkpLGY9W107Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKG0pe3ZhciBiPWkubm9kZShtKS5yYW5rLWE7ZltiXXx8KGZbYl09W10pLGZbYl0ucHVzaChtKX0pO3ZhciBwPTAsdz1pLmdyYXBoKCkubm9kZVJhbmtGYWN0b3I7Y3IoZixmdW5jdGlvbihtLGIpe0poKG0pJiZiJXchPT0wPy0tcDpwJiZjcihtLGZ1bmN0aW9uKEUpe2kubm9kZShFKS5yYW5rKz1wfSl9KX1mdW5jdGlvbiBVRnQoaSxhLGYscCl7dmFyIHc9e3dpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj00JiYody5yYW5rPWYsdy5vcmRlcj1wKSxzTChpLCJib3JkZXIiLHcsYSl9ZnVuY3Rpb24gV0Z0KGkpe3JldHVybiBtVChGZihpLm5vZGVzKCksZnVuY3Rpb24oYSl7dmFyIGY9aS5ub2RlKGEpLnJhbms7aWYoIUpoKGYpKXJldHVybiBmfSkpfWZ1bmN0aW9uIEpGZShpLGEpe3ZhciBmPXtsaHM6W10scmhzOltdfTtyZXR1cm4gY3IoaSxmdW5jdGlvbihwKXthKHApP2YubGhzLnB1c2gocCk6Zi5yaHMucHVzaChwKX0pLGZ9ZnVuY3Rpb24gdE5lKGksYSl7dmFyIGY9TkZ0KCk7dHJ5e3JldHVybiBhKCl9ZmluYWxseXtjb25zb2xlLmxvZyhpKyIgdGltZTogIisoTkZ0KCktZikrIm1zIil9fWZ1bmN0aW9uIGVOZShpLGEpe3JldHVybiBhKCl9ZnVuY3Rpb24gbk5lKGkpe2Z1bmN0aW9uIGEoZil7dmFyIHA9aS5jaGlsZHJlbihmKSx3PWkubm9kZShmKTtpZihwLmxlbmd0aCYmY3IocCxhKSx6YSh3LCJtaW5SYW5rIikpe3cuYm9yZGVyTGVmdD1bXSx3LmJvcmRlclJpZ2h0PVtdO2Zvcih2YXIgbT13Lm1pblJhbmssYj13Lm1heFJhbmsrMTttPGI7KyttKVlGdChpLCJib3JkZXJMZWZ0IiwiX2JsIixmLHcsbSksWUZ0KGksImJvcmRlclJpZ2h0IiwiX2JyIixmLHcsbSl9fWNyKGkuY2hpbGRyZW4oKSxhKX1mdW5jdGlvbiBZRnQoaSxhLGYscCx3LG0pe3ZhciBiPXt3aWR0aDowLGhlaWdodDowLHJhbms6bSxib3JkZXJUeXBlOmF9LEU9d1thXVttLTFdLF89c0woaSwiYm9yZGVyIixiLGYpO3dbYV1bbV09XyxpLnNldFBhcmVudChfLHApLEUmJmkuc2V0RWRnZShFLF8se3dlaWdodDoxfSl9ZnVuY3Rpb24gck5lKGkpe3ZhciBhPWkuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7KGE9PT0ibHIifHxhPT09InJsIikmJktGdChpKX1mdW5jdGlvbiBpTmUoaSl7dmFyIGE9aS5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsoYT09PSJidCJ8fGE9PT0icmwiKSYmc05lKGkpLChhPT09ImxyInx8YT09PSJybCIpJiYoYU5lKGkpLEtGdChpKSl9ZnVuY3Rpb24gS0Z0KGkpe2NyKGkubm9kZXMoKSxmdW5jdGlvbihhKXtYRnQoaS5ub2RlKGEpKX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihhKXtYRnQoaS5lZGdlKGEpKX0pfWZ1bmN0aW9uIFhGdChpKXt2YXIgYT1pLndpZHRoO2kud2lkdGg9aS5oZWlnaHQsaS5oZWlnaHQ9YX1mdW5jdGlvbiBzTmUoaSl7Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKGEpe28wdChpLm5vZGUoYSkpfSksY3IoaS5lZGdlcygpLGZ1bmN0aW9uKGEpe3ZhciBmPWkuZWRnZShhKTtjcihmLnBvaW50cyxvMHQpLHphKGYsInkiKSYmbzB0KGYpfSl9ZnVuY3Rpb24gbzB0KGkpe2kueT0taS55fWZ1bmN0aW9uIGFOZShpKXtjcihpLm5vZGVzKCksZnVuY3Rpb24oYSl7YzB0KGkubm9kZShhKSl9KSxjcihpLmVkZ2VzKCksZnVuY3Rpb24oYSl7dmFyIGY9aS5lZGdlKGEpO2NyKGYucG9pbnRzLGMwdCksemEoZiwieCIpJiZjMHQoZil9KX1mdW5jdGlvbiBjMHQoaSl7dmFyIGE9aS54O2kueD1pLnksaS55PWF9ZnVuY3Rpb24gb05lKGkpe2kuZ3JhcGgoKS5kdW1teUNoYWlucz1bXSxjcihpLmVkZ2VzKCksZnVuY3Rpb24oYSl7Y05lKGksYSl9KX1mdW5jdGlvbiBjTmUoaSxhKXt2YXIgZj1hLnYscD1pLm5vZGUoZikucmFuayx3PWEudyxtPWkubm9kZSh3KS5yYW5rLGI9YS5uYW1lLEU9aS5lZGdlKGEpLF89RS5sYWJlbFJhbms7aWYobSE9PXArMSl7aS5yZW1vdmVFZGdlKGEpO3ZhciBBLEksQjtmb3IoQj0wLCsrcDtwPG07KytCLCsrcClFLnBvaW50cz1bXSxJPXt3aWR0aDowLGhlaWdodDowLGVkZ2VMYWJlbDpFLGVkZ2VPYmo6YSxyYW5rOnB9LEE9c0woaSwiZWRnZSIsSSwiX2QiKSxwPT09XyYmKEkud2lkdGg9RS53aWR0aCxJLmhlaWdodD1FLmhlaWdodCxJLmR1bW15PSJlZGdlLWxhYmVsIixJLmxhYmVscG9zPUUubGFiZWxwb3MpLGkuc2V0RWRnZShmLEEse3dlaWdodDpFLndlaWdodH0sYiksQj09PTAmJmkuZ3JhcGgoKS5kdW1teUNoYWlucy5wdXNoKEEpLGY9QTtpLnNldEVkZ2UoZix3LHt3ZWlnaHQ6RS53ZWlnaHR9LGIpfX1mdW5jdGlvbiB1TmUoaSl7Y3IoaS5ncmFwaCgpLmR1bW15Q2hhaW5zLGZ1bmN0aW9uKGEpe3ZhciBmPWkubm9kZShhKSxwPWYuZWRnZUxhYmVsLHc7Zm9yKGkuc2V0RWRnZShmLmVkZ2VPYmoscCk7Zi5kdW1teTspdz1pLnN1Y2Nlc3NvcnMoYSlbMF0saS5yZW1vdmVOb2RlKGEpLHAucG9pbnRzLnB1c2goe3g6Zi54LHk6Zi55fSksZi5kdW1teT09PSJlZGdlLWxhYmVsIiYmKHAueD1mLngscC55PWYueSxwLndpZHRoPWYud2lkdGgscC5oZWlnaHQ9Zi5oZWlnaHQpLGE9dyxmPWkubm9kZShhKX0pfWZ1bmN0aW9uIHUwdChpKXt2YXIgYT17fTtmdW5jdGlvbiBmKHApe3ZhciB3PWkubm9kZShwKTtpZih6YShhLHApKXJldHVybiB3LnJhbms7YVtwXT0hMDt2YXIgbT13RihGZihpLm91dEVkZ2VzKHApLGZ1bmN0aW9uKGIpe3JldHVybiBmKGIudyktaS5lZGdlKGIpLm1pbmxlbn0pKTtyZXR1cm4obT09PU51bWJlci5QT1NJVElWRV9JTkZJTklUWXx8bT09PXZvaWQgMHx8bT09PW51bGwpJiYobT0wKSx3LnJhbms9bX1jcihpLnNvdXJjZXMoKSxmKX1mdW5jdGlvbiBrRihpLGEpe3JldHVybiBpLm5vZGUoYS53KS5yYW5rLWkubm9kZShhLnYpLnJhbmstaS5lZGdlKGEpLm1pbmxlbn1mdW5jdGlvbiBRRnQoaSl7dmFyIGE9bmV3IGMxKHtkaXJlY3RlZDohMX0pLGY9aS5ub2RlcygpWzBdLHA9aS5ub2RlQ291bnQoKTthLnNldE5vZGUoZix7fSk7Zm9yKHZhciB3LG07bE5lKGEsaSk8cDspdz1oTmUoYSxpKSxtPWEuaGFzTm9kZSh3LnYpP2tGKGksdyk6LWtGKGksdyksZk5lKGEsaSxtKTtyZXR1cm4gYX1mdW5jdGlvbiBsTmUoaSxhKXtmdW5jdGlvbiBmKHApe2NyKGEubm9kZUVkZ2VzKHApLGZ1bmN0aW9uKHcpe3ZhciBtPXcudixiPXA9PT1tP3cudzptOyFpLmhhc05vZGUoYikmJiFrRihhLHcpJiYoaS5zZXROb2RlKGIse30pLGkuc2V0RWRnZShwLGIse30pLGYoYikpfSl9cmV0dXJuIGNyKGkubm9kZXMoKSxmKSxpLm5vZGVDb3VudCgpfWZ1bmN0aW9uIGhOZShpLGEpe3JldHVybiByMHQoYS5lZGdlcygpLGZ1bmN0aW9uKGYpe2lmKGkuaGFzTm9kZShmLnYpIT09aS5oYXNOb2RlKGYudykpcmV0dXJuIGtGKGEsZil9KX1mdW5jdGlvbiBmTmUoaSxhLGYpe2NyKGkubm9kZXMoKSxmdW5jdGlvbihwKXthLm5vZGUocCkucmFuays9Zn0pfWZ1bmN0aW9uIGROZSgpe31kTmUucHJvdG90eXBlPW5ldyBFcnJvcjtmdW5jdGlvbiBaRnQoaSxhLGYpe0lmKGEpfHwoYT1bYV0pO3ZhciBwPShpLmlzRGlyZWN0ZWQoKT9pLnN1Y2Nlc3NvcnM6aS5uZWlnaGJvcnMpLmJpbmQoaSksdz1bXSxtPXt9O3JldHVybiBjcihhLGZ1bmN0aW9uKGIpe2lmKCFpLmhhc05vZGUoYikpdGhyb3cgbmV3IEVycm9yKCJHcmFwaCBkb2VzIG5vdCBoYXZlIG5vZGU6ICIrYik7SkZ0KGksYixmPT09InBvc3QiLG0scCx3KX0pLHd9ZnVuY3Rpb24gSkZ0KGksYSxmLHAsdyxtKXt6YShwLGEpfHwocFthXT0hMCxmfHxtLnB1c2goYSksY3IodyhhKSxmdW5jdGlvbihiKXtKRnQoaSxiLGYscCx3LG0pfSksZiYmbS5wdXNoKGEpKX1mdW5jdGlvbiBnTmUoaSxhKXtyZXR1cm4gWkZ0KGksYSwicG9zdCIpfWZ1bmN0aW9uIHBOZShpLGEpe3JldHVybiBaRnQoaSxhLCJwcmUiKX1rVC5pbml0TG93TGltVmFsdWVzPWgwdCxrVC5pbml0Q3V0VmFsdWVzPWwwdCxrVC5jYWxjQ3V0VmFsdWU9dE50LGtULmxlYXZlRWRnZT1uTnQsa1QuZW50ZXJFZGdlPXJOdCxrVC5leGNoYW5nZUVkZ2VzPWlOdDtmdW5jdGlvbiBrVChpKXtpPVhGZShpKSx1MHQoaSk7dmFyIGE9UUZ0KGkpO2gwdChhKSxsMHQoYSxpKTtmb3IodmFyIGYscDtmPW5OdChhKTspcD1yTnQoYSxpLGYpLGlOdChhLGksZixwKX1mdW5jdGlvbiBsMHQoaSxhKXt2YXIgZj1nTmUoaSxpLm5vZGVzKCkpO2Y9Zi5zbGljZSgwLGYubGVuZ3RoLTEpLGNyKGYsZnVuY3Rpb24ocCl7Yk5lKGksYSxwKX0pfWZ1bmN0aW9uIGJOZShpLGEsZil7dmFyIHA9aS5ub2RlKGYpLHc9cC5wYXJlbnQ7aS5lZGdlKGYsdykuY3V0dmFsdWU9dE50KGksYSxmKX1mdW5jdGlvbiB0TnQoaSxhLGYpe3ZhciBwPWkubm9kZShmKSx3PXAucGFyZW50LG09ITAsYj1hLmVkZ2UoZix3KSxFPTA7cmV0dXJuIGJ8fChtPSExLGI9YS5lZGdlKHcsZikpLEU9Yi53ZWlnaHQsY3IoYS5ub2RlRWRnZXMoZiksZnVuY3Rpb24oXyl7dmFyIEE9Xy52PT09ZixJPUE/Xy53Ol8udjtpZihJIT09dyl7dmFyIEI9QT09PW0sTj1hLmVkZ2UoXykud2VpZ2h0O2lmKEUrPUI/TjotTix2TmUoaSxmLEkpKXt2YXIgUj1pLmVkZ2UoZixJKS5jdXR2YWx1ZTtFKz1CPy1SOlJ9fX0pLEV9ZnVuY3Rpb24gaDB0KGksYSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoYT1pLm5vZGVzKClbMF0pLGVOdChpLHt9LDEsYSl9ZnVuY3Rpb24gZU50KGksYSxmLHAsdyl7dmFyIG09ZixiPWkubm9kZShwKTtyZXR1cm4gYVtwXT0hMCxjcihpLm5laWdoYm9ycyhwKSxmdW5jdGlvbihFKXt6YShhLEUpfHwoZj1lTnQoaSxhLGYsRSxwKSl9KSxiLmxvdz1tLGIubGltPWYrKyx3P2IucGFyZW50PXc6ZGVsZXRlIGIucGFyZW50LGZ9ZnVuY3Rpb24gbk50KGkpe3JldHVybiBlMHQoaS5lZGdlcygpLGZ1bmN0aW9uKGEpe3JldHVybiBpLmVkZ2UoYSkuY3V0dmFsdWU8MH0pfWZ1bmN0aW9uIHJOdChpLGEsZil7dmFyIHA9Zi52LHc9Zi53O2EuaGFzRWRnZShwLHcpfHwocD1mLncsdz1mLnYpO3ZhciBtPWkubm9kZShwKSxiPWkubm9kZSh3KSxFPW0sXz0hMTttLmxpbT5iLmxpbSYmKEU9YixfPSEwKTt2YXIgQT1ENShhLmVkZ2VzKCksZnVuY3Rpb24oSSl7cmV0dXJuIF89PT1zTnQoaSxpLm5vZGUoSS52KSxFKSYmXyE9PXNOdChpLGkubm9kZShJLncpLEUpfSk7cmV0dXJuIHIwdChBLGZ1bmN0aW9uKEkpe3JldHVybiBrRihhLEkpfSl9ZnVuY3Rpb24gaU50KGksYSxmLHApe3ZhciB3PWYudixtPWYudztpLnJlbW92ZUVkZ2UodyxtKSxpLnNldEVkZ2UocC52LHAudyx7fSksaDB0KGkpLGwwdChpLGEpLHdOZShpLGEpfWZ1bmN0aW9uIHdOZShpLGEpe3ZhciBmPWUwdChpLm5vZGVzKCksZnVuY3Rpb24odyl7cmV0dXJuIWEubm9kZSh3KS5wYXJlbnR9KSxwPXBOZShpLGYpO3A9cC5zbGljZSgxKSxjcihwLGZ1bmN0aW9uKHcpe3ZhciBtPWkubm9kZSh3KS5wYXJlbnQsYj1hLmVkZ2UodyxtKSxFPSExO2J8fChiPWEuZWRnZShtLHcpLEU9ITApLGEubm9kZSh3KS5yYW5rPWEubm9kZShtKS5yYW5rKyhFP2IubWlubGVuOi1iLm1pbmxlbil9KX1mdW5jdGlvbiB2TmUoaSxhLGYpe3JldHVybiBpLmhhc0VkZ2UoYSxmKX1mdW5jdGlvbiBzTnQoaSxhLGYpe3JldHVybiBmLmxvdzw9YS5saW0mJmEubGltPD1mLmxpbX1mdW5jdGlvbiBtTmUoaSl7c3dpdGNoKGkuZ3JhcGgoKS5yYW5rZXIpe2Nhc2UibmV0d29yay1zaW1wbGV4IjphTnQoaSk7YnJlYWs7Y2FzZSJ0aWdodC10cmVlIjp4TmUoaSk7YnJlYWs7Y2FzZSJsb25nZXN0LXBhdGgiOnlOZShpKTticmVhaztkZWZhdWx0OmFOdChpKX19dmFyIHlOZT11MHQ7ZnVuY3Rpb24geE5lKGkpe3UwdChpKSxRRnQoaSl9ZnVuY3Rpb24gYU50KGkpe2tUKGkpfWZ1bmN0aW9uIGtOZShpKXt2YXIgYT1zTChpLCJyb290Iix7fSwiX3Jvb3QiKSxmPUVOZShpKSxwPW1UKEk1KGYpKS0xLHc9MipwKzE7aS5ncmFwaCgpLm5lc3RpbmdSb290PWEsY3IoaS5lZGdlcygpLGZ1bmN0aW9uKGIpe2kuZWRnZShiKS5taW5sZW4qPXd9KTt2YXIgbT1UTmUoaSkrMTtjcihpLmNoaWxkcmVuKCksZnVuY3Rpb24oYil7b050KGksYSx3LG0scCxmLGIpfSksaS5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yPXd9ZnVuY3Rpb24gb050KGksYSxmLHAsdyxtLGIpe3ZhciBFPWkuY2hpbGRyZW4oYik7aWYoIUUubGVuZ3RoKXtiIT09YSYmaS5zZXRFZGdlKGEsYix7d2VpZ2h0OjAsbWlubGVuOmZ9KTtyZXR1cm59dmFyIF89VUZ0KGksIl9idCIpLEE9VUZ0KGksIl9iYiIpLEk9aS5ub2RlKGIpO2kuc2V0UGFyZW50KF8sYiksSS5ib3JkZXJUb3A9XyxpLnNldFBhcmVudChBLGIpLEkuYm9yZGVyQm90dG9tPUEsY3IoRSxmdW5jdGlvbihCKXtvTnQoaSxhLGYscCx3LG0sQik7dmFyIE49aS5ub2RlKEIpLFI9Ti5ib3JkZXJUb3A/Ti5ib3JkZXJUb3A6Qix6PU4uYm9yZGVyQm90dG9tP04uYm9yZGVyQm90dG9tOkIsVz1OLmJvcmRlclRvcD9wOjIqcCxldD1SIT09ej8xOnctbVtiXSsxO2kuc2V0RWRnZShfLFIse3dlaWdodDpXLG1pbmxlbjpldCxuZXN0aW5nRWRnZTohMH0pLGkuc2V0RWRnZSh6LEEse3dlaWdodDpXLG1pbmxlbjpldCxuZXN0aW5nRWRnZTohMH0pfSksaS5wYXJlbnQoYil8fGkuc2V0RWRnZShhLF8se3dlaWdodDowLG1pbmxlbjp3K21bYl19KX1mdW5jdGlvbiBFTmUoaSl7dmFyIGE9e307ZnVuY3Rpb24gZihwLHcpe3ZhciBtPWkuY2hpbGRyZW4ocCk7bSYmbS5sZW5ndGgmJmNyKG0sZnVuY3Rpb24oYil7ZihiLHcrMSl9KSxhW3BdPXd9cmV0dXJuIGNyKGkuY2hpbGRyZW4oKSxmdW5jdGlvbihwKXtmKHAsMSl9KSxhfWZ1bmN0aW9uIFROZShpKXtyZXR1cm4gbUYoaS5lZGdlcygpLGZ1bmN0aW9uKGEsZil7cmV0dXJuIGEraS5lZGdlKGYpLndlaWdodH0sMCl9ZnVuY3Rpb24gQ05lKGkpe3ZhciBhPWkuZ3JhcGgoKTtpLnJlbW92ZU5vZGUoYS5uZXN0aW5nUm9vdCksZGVsZXRlIGEubmVzdGluZ1Jvb3QsY3IoaS5lZGdlcygpLGZ1bmN0aW9uKGYpe3ZhciBwPWkuZWRnZShmKTtwLm5lc3RpbmdFZGdlJiZpLnJlbW92ZUVkZ2UoZil9KX1mdW5jdGlvbiBfTmUoaSxhLGYpe3ZhciBwPXt9LHc7Y3IoZixmdW5jdGlvbihtKXtmb3IodmFyIGI9aS5wYXJlbnQobSksRSxfO2I7KXtpZihFPWkucGFyZW50KGIpLEU/KF89cFtFXSxwW0VdPWIpOihfPXcsdz1iKSxfJiZfIT09Yil7YS5zZXRFZGdlKF8sYik7cmV0dXJufWI9RX19KX1mdW5jdGlvbiBTTmUoaSxhLGYpe3ZhciBwPUFOZShpKSx3PW5ldyBjMSh7Y29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cm9vdDpwfSkuc2V0RGVmYXVsdE5vZGVMYWJlbChmdW5jdGlvbihtKXtyZXR1cm4gaS5ub2RlKG0pfSk7cmV0dXJuIGNyKGkubm9kZXMoKSxmdW5jdGlvbihtKXt2YXIgYj1pLm5vZGUobSksRT1pLnBhcmVudChtKTsoYi5yYW5rPT09YXx8Yi5taW5SYW5rPD1hJiZhPD1iLm1heFJhbmspJiYody5zZXROb2RlKG0pLHcuc2V0UGFyZW50KG0sRXx8cCksY3IoaVtmXShtKSxmdW5jdGlvbihfKXt2YXIgQT1fLnY9PT1tP18udzpfLnYsST13LmVkZ2UoQSxtKSxCPUpoKEkpPzA6SS53ZWlnaHQ7dy5zZXRFZGdlKEEsbSx7d2VpZ2h0OmkuZWRnZShfKS53ZWlnaHQrQn0pfSksemEoYiwibWluUmFuayIpJiZ3LnNldE5vZGUobSx7Ym9yZGVyTGVmdDpiLmJvcmRlckxlZnRbYV0sYm9yZGVyUmlnaHQ6Yi5ib3JkZXJSaWdodFthXX0pKX0pLHd9ZnVuY3Rpb24gQU5lKGkpe2Zvcih2YXIgYTtpLmhhc05vZGUoYT12WSgiX3Jvb3QiKSk7KTtyZXR1cm4gYX1mdW5jdGlvbiBMTmUoaSxhKXtmb3IodmFyIGY9MCxwPTE7cDxhLmxlbmd0aDsrK3ApZis9TU5lKGksYVtwLTFdLGFbcF0pO3JldHVybiBmfWZ1bmN0aW9uIE1OZShpLGEsZil7Zm9yKHZhciBwPVJGZShmLEZmKGYsZnVuY3Rpb24oQSxJKXtyZXR1cm4gSX0pKSx3PXJMKEZmKGEsZnVuY3Rpb24oQSl7cmV0dXJuIHlGKEZmKGkub3V0RWRnZXMoQSksZnVuY3Rpb24oSSl7cmV0dXJue3BvczpwW0kud10sd2VpZ2h0OmkuZWRnZShJKS53ZWlnaHR9fSksInBvcyIpfSkpLG09MTttPGYubGVuZ3RoOyltPDw9MTt2YXIgYj0yKm0tMTttLT0xO3ZhciBFPUZmKG5ldyBBcnJheShiKSxmdW5jdGlvbigpe3JldHVybiAwfSksXz0wO3JldHVybiBjcih3LmZvckVhY2goZnVuY3Rpb24oQSl7dmFyIEk9QS5wb3MrbTtFW0ldKz1BLndlaWdodDtmb3IodmFyIEI9MDtJPjA7KUklMiYmKEIrPUVbSSsxXSksST1JLTE+PjEsRVtJXSs9QS53ZWlnaHQ7Xys9QS53ZWlnaHQqQn0pKSxffWZ1bmN0aW9uIEROZShpKXt2YXIgYT17fSxmPUQ1KGkubm9kZXMoKSxmdW5jdGlvbihFKXtyZXR1cm4haS5jaGlsZHJlbihFKS5sZW5ndGh9KSxwPW1UKEZmKGYsZnVuY3Rpb24oRSl7cmV0dXJuIGkubm9kZShFKS5yYW5rfSkpLHc9RmYoeVQocCsxKSxmdW5jdGlvbigpe3JldHVybltdfSk7ZnVuY3Rpb24gbShFKXtpZighemEoYSxFKSl7YVtFXT0hMDt2YXIgXz1pLm5vZGUoRSk7d1tfLnJhbmtdLnB1c2goRSksY3IoaS5zdWNjZXNzb3JzKEUpLG0pfX12YXIgYj15RihmLGZ1bmN0aW9uKEUpe3JldHVybiBpLm5vZGUoRSkucmFua30pO3JldHVybiBjcihiLG0pLHd9ZnVuY3Rpb24gSU5lKGksYSl7cmV0dXJuIEZmKGEsZnVuY3Rpb24oZil7dmFyIHA9aS5pbkVkZ2VzKGYpO2lmKHAubGVuZ3RoKXt2YXIgdz1tRihwLGZ1bmN0aW9uKG0sYil7dmFyIEU9aS5lZGdlKGIpLF89aS5ub2RlKGIudik7cmV0dXJue3N1bTptLnN1bStFLndlaWdodCpfLm9yZGVyLHdlaWdodDptLndlaWdodCtFLndlaWdodH19LHtzdW06MCx3ZWlnaHQ6MH0pO3JldHVybnt2OmYsYmFyeWNlbnRlcjp3LnN1bS93LndlaWdodCx3ZWlnaHQ6dy53ZWlnaHR9fWVsc2UgcmV0dXJue3Y6Zn19KX1mdW5jdGlvbiBPTmUoaSxhKXt2YXIgZj17fTtjcihpLGZ1bmN0aW9uKHcsbSl7dmFyIGI9Zlt3LnZdPXtpbmRlZ3JlZTowLGluOltdLG91dDpbXSx2czpbdy52XSxpOm19O0poKHcuYmFyeWNlbnRlcil8fChiLmJhcnljZW50ZXI9dy5iYXJ5Y2VudGVyLGIud2VpZ2h0PXcud2VpZ2h0KX0pLGNyKGEuZWRnZXMoKSxmdW5jdGlvbih3KXt2YXIgbT1mW3cudl0sYj1mW3cud107IUpoKG0pJiYhSmgoYikmJihiLmluZGVncmVlKyssbS5vdXQucHVzaChmW3cud10pKX0pO3ZhciBwPUQ1KGYsZnVuY3Rpb24odyl7cmV0dXJuIXcuaW5kZWdyZWV9KTtyZXR1cm4gUE5lKHApfWZ1bmN0aW9uIFBOZShpKXt2YXIgYT1bXTtmdW5jdGlvbiBmKG0pe3JldHVybiBmdW5jdGlvbihiKXtiLm1lcmdlZHx8KEpoKGIuYmFyeWNlbnRlcil8fEpoKG0uYmFyeWNlbnRlcil8fGIuYmFyeWNlbnRlcj49bS5iYXJ5Y2VudGVyKSYmRk5lKG0sYil9fWZ1bmN0aW9uIHAobSl7cmV0dXJuIGZ1bmN0aW9uKGIpe2IuaW4ucHVzaChtKSwtLWIuaW5kZWdyZWU9PT0wJiZpLnB1c2goYil9fWZvcig7aS5sZW5ndGg7KXt2YXIgdz1pLnBvcCgpO2EucHVzaCh3KSxjcih3LmluLnJldmVyc2UoKSxmKHcpKSxjcih3Lm91dCxwKHcpKX1yZXR1cm4gRmYoRDUoYSxmdW5jdGlvbihtKXtyZXR1cm4hbS5tZXJnZWR9KSxmdW5jdGlvbihtKXtyZXR1cm4gdkYobSxbInZzIiwiaSIsImJhcnljZW50ZXIiLCJ3ZWlnaHQiXSl9KX1mdW5jdGlvbiBGTmUoaSxhKXt2YXIgZj0wLHA9MDtpLndlaWdodCYmKGYrPWkuYmFyeWNlbnRlcippLndlaWdodCxwKz1pLndlaWdodCksYS53ZWlnaHQmJihmKz1hLmJhcnljZW50ZXIqYS53ZWlnaHQscCs9YS53ZWlnaHQpLGkudnM9YS52cy5jb25jYXQoaS52cyksaS5iYXJ5Y2VudGVyPWYvcCxpLndlaWdodD1wLGkuaT1NYXRoLm1pbihhLmksaS5pKSxhLm1lcmdlZD0hMH1mdW5jdGlvbiBOTmUoaSxhKXt2YXIgZj1KRmUoaSxmdW5jdGlvbihJKXtyZXR1cm4gemEoSSwiYmFyeWNlbnRlciIpfSkscD1mLmxocyx3PXlGKGYucmhzLGZ1bmN0aW9uKEkpe3JldHVybi1JLml9KSxtPVtdLGI9MCxFPTAsXz0wO3Auc29ydChCTmUoISFhKSksXz1jTnQobSx3LF8pLGNyKHAsZnVuY3Rpb24oSSl7Xys9SS52cy5sZW5ndGgsbS5wdXNoKEkudnMpLGIrPUkuYmFyeWNlbnRlcipJLndlaWdodCxFKz1JLndlaWdodCxfPWNOdChtLHcsXyl9KTt2YXIgQT17dnM6ckwobSl9O3JldHVybiBFJiYoQS5iYXJ5Y2VudGVyPWIvRSxBLndlaWdodD1FKSxBfWZ1bmN0aW9uIGNOdChpLGEsZil7Zm9yKHZhciBwO2EubGVuZ3RoJiYocD1iWShhKSkuaTw9ZjspYS5wb3AoKSxpLnB1c2gocC52cyksZisrO3JldHVybiBmfWZ1bmN0aW9uIEJOZShpKXtyZXR1cm4gZnVuY3Rpb24oYSxmKXtyZXR1cm4gYS5iYXJ5Y2VudGVyPGYuYmFyeWNlbnRlcj8tMTphLmJhcnljZW50ZXI+Zi5iYXJ5Y2VudGVyPzE6aT9mLmktYS5pOmEuaS1mLml9fWZ1bmN0aW9uIHVOdChpLGEsZixwKXt2YXIgdz1pLmNoaWxkcmVuKGEpLG09aS5ub2RlKGEpLGI9bT9tLmJvcmRlckxlZnQ6dm9pZCAwLEU9bT9tLmJvcmRlclJpZ2h0OnZvaWQgMCxfPXt9O2ImJih3PUQ1KHcsZnVuY3Rpb24oeil7cmV0dXJuIHohPT1iJiZ6IT09RX0pKTt2YXIgQT1JTmUoaSx3KTtjcihBLGZ1bmN0aW9uKHope2lmKGkuY2hpbGRyZW4oei52KS5sZW5ndGgpe3ZhciBXPXVOdChpLHoudixmLHApO19bei52XT1XLHphKFcsImJhcnljZW50ZXIiKSYmak5lKHosVyl9fSk7dmFyIEk9T05lKEEsZik7Uk5lKEksXyk7dmFyIEI9Tk5lKEkscCk7aWYoYiYmKEIudnM9ckwoW2IsQi52cyxFXSksaS5wcmVkZWNlc3NvcnMoYikubGVuZ3RoKSl7dmFyIE49aS5ub2RlKGkucHJlZGVjZXNzb3JzKGIpWzBdKSxSPWkubm9kZShpLnByZWRlY2Vzc29ycyhFKVswXSk7emEoQiwiYmFyeWNlbnRlciIpfHwoQi5iYXJ5Y2VudGVyPTAsQi53ZWlnaHQ9MCksQi5iYXJ5Y2VudGVyPShCLmJhcnljZW50ZXIqQi53ZWlnaHQrTi5vcmRlcitSLm9yZGVyKS8oQi53ZWlnaHQrMiksQi53ZWlnaHQrPTJ9cmV0dXJuIEJ9ZnVuY3Rpb24gUk5lKGksYSl7Y3IoaSxmdW5jdGlvbihmKXtmLnZzPXJMKGYudnMubWFwKGZ1bmN0aW9uKHApe3JldHVybiBhW3BdP2FbcF0udnM6cH0pKX0pfWZ1bmN0aW9uIGpOZShpLGEpe0poKGkuYmFyeWNlbnRlcik/KGkuYmFyeWNlbnRlcj1hLmJhcnljZW50ZXIsaS53ZWlnaHQ9YS53ZWlnaHQpOihpLmJhcnljZW50ZXI9KGkuYmFyeWNlbnRlcippLndlaWdodCthLmJhcnljZW50ZXIqYS53ZWlnaHQpLyhpLndlaWdodCthLndlaWdodCksaS53ZWlnaHQrPWEud2VpZ2h0KX1mdW5jdGlvbiAkTmUoaSl7dmFyIGE9V0Z0KGkpLGY9bE50KGkseVQoMSxhKzEpLCJpbkVkZ2VzIikscD1sTnQoaSx5VChhLTEsLTEsLTEpLCJvdXRFZGdlcyIpLHc9RE5lKGkpO2hOdChpLHcpO2Zvcih2YXIgbT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYixFPTAsXz0wO188NDsrK0UsKytfKXt6TmUoRSUyP2Y6cCxFJTQ+PTIpLHc9bVkoaSk7dmFyIEE9TE5lKGksdyk7QTxtJiYoXz0wLGI9dVBlKHcpLG09QSl9aE50KGksYil9ZnVuY3Rpb24gbE50KGksYSxmKXtyZXR1cm4gRmYoYSxmdW5jdGlvbihwKXtyZXR1cm4gU05lKGkscCxmKX0pfWZ1bmN0aW9uIHpOZShpLGEpe3ZhciBmPW5ldyBjMTtjcihpLGZ1bmN0aW9uKHApe3ZhciB3PXAuZ3JhcGgoKS5yb290LG09dU50KHAsdyxmLGEpO2NyKG0udnMsZnVuY3Rpb24oYixFKXtwLm5vZGUoYikub3JkZXI9RX0pLF9OZShwLGYsbS52cyl9KX1mdW5jdGlvbiBoTnQoaSxhKXtjcihhLGZ1bmN0aW9uKGYpe2NyKGYsZnVuY3Rpb24ocCx3KXtpLm5vZGUocCkub3JkZXI9d30pfSl9ZnVuY3Rpb24gcU5lKGkpe3ZhciBhPVZOZShpKTtjcihpLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24oZil7Zm9yKHZhciBwPWkubm9kZShmKSx3PXAuZWRnZU9iaixtPUhOZShpLGEsdy52LHcudyksYj1tLnBhdGgsRT1tLmxjYSxfPTAsQT1iW19dLEk9ITA7ZiE9PXcudzspe2lmKHA9aS5ub2RlKGYpLEkpe2Zvcig7KEE9YltfXSkhPT1FJiZpLm5vZGUoQSkubWF4UmFuazxwLnJhbms7KV8rKztBPT09RSYmKEk9ITEpfWlmKCFJKXtmb3IoO188Yi5sZW5ndGgtMSYmaS5ub2RlKEE9YltfKzFdKS5taW5SYW5rPD1wLnJhbms7KV8rKztBPWJbX119aS5zZXRQYXJlbnQoZixBKSxmPWkuc3VjY2Vzc29ycyhmKVswXX19KX1mdW5jdGlvbiBITmUoaSxhLGYscCl7dmFyIHc9W10sbT1bXSxiPU1hdGgubWluKGFbZl0ubG93LGFbcF0ubG93KSxFPU1hdGgubWF4KGFbZl0ubGltLGFbcF0ubGltKSxfLEE7Xz1mO2RvIF89aS5wYXJlbnQoXyksdy5wdXNoKF8pO3doaWxlKF8mJihhW19dLmxvdz5ifHxFPmFbX10ubGltKSk7Zm9yKEE9XyxfPXA7KF89aS5wYXJlbnQoXykpIT09QTspbS5wdXNoKF8pO3JldHVybntwYXRoOncuY29uY2F0KG0ucmV2ZXJzZSgpKSxsY2E6QX19ZnVuY3Rpb24gVk5lKGkpe3ZhciBhPXt9LGY9MDtmdW5jdGlvbiBwKHcpe3ZhciBtPWY7Y3IoaS5jaGlsZHJlbih3KSxwKSxhW3ddPXtsb3c6bSxsaW06ZisrfX1yZXR1cm4gY3IoaS5jaGlsZHJlbigpLHApLGF9ZnVuY3Rpb24gR05lKGksYSl7dmFyIGY9e307ZnVuY3Rpb24gcCh3LG0pe3ZhciBiPTAsRT0wLF89dy5sZW5ndGgsQT1iWShtKTtyZXR1cm4gY3IobSxmdW5jdGlvbihJLEIpe3ZhciBOPVdOZShpLEkpLFI9Tj9pLm5vZGUoTikub3JkZXI6XzsoTnx8ST09PUEpJiYoY3IobS5zbGljZShFLEIrMSksZnVuY3Rpb24oeil7Y3IoaS5wcmVkZWNlc3NvcnMoeiksZnVuY3Rpb24oVyl7dmFyIGV0PWkubm9kZShXKSxzdD1ldC5vcmRlcjsoc3Q8Ynx8UjxzdCkmJiEoZXQuZHVtbXkmJmkubm9kZSh6KS5kdW1teSkmJmZOdChmLFcseil9KX0pLEU9QisxLGI9Uil9KSxtfXJldHVybiBtRihhLHApLGZ9ZnVuY3Rpb24gVU5lKGksYSl7dmFyIGY9e307ZnVuY3Rpb24gcChtLGIsRSxfLEEpe3ZhciBJO2NyKHlUKGIsRSksZnVuY3Rpb24oQil7ST1tW0JdLGkubm9kZShJKS5kdW1teSYmY3IoaS5wcmVkZWNlc3NvcnMoSSksZnVuY3Rpb24oTil7dmFyIFI9aS5ub2RlKE4pO1IuZHVtbXkmJihSLm9yZGVyPF98fFIub3JkZXI+QSkmJmZOdChmLE4sSSl9KX0pfWZ1bmN0aW9uIHcobSxiKXt2YXIgRT0tMSxfLEE9MDtyZXR1cm4gY3IoYixmdW5jdGlvbihJLEIpe2lmKGkubm9kZShJKS5kdW1teT09PSJib3JkZXIiKXt2YXIgTj1pLnByZWRlY2Vzc29ycyhJKTtOLmxlbmd0aCYmKF89aS5ub2RlKE5bMF0pLm9yZGVyLHAoYixBLEIsRSxfKSxBPUIsRT1fKX1wKGIsQSxiLmxlbmd0aCxfLG0ubGVuZ3RoKX0pLGJ9cmV0dXJuIG1GKGEsdyksZn1mdW5jdGlvbiBXTmUoaSxhKXtpZihpLm5vZGUoYSkuZHVtbXkpcmV0dXJuIGUwdChpLnByZWRlY2Vzc29ycyhhKSxmdW5jdGlvbihmKXtyZXR1cm4gaS5ub2RlKGYpLmR1bW15fSl9ZnVuY3Rpb24gZk50KGksYSxmKXtpZihhPmYpe3ZhciBwPWE7YT1mLGY9cH12YXIgdz1pW2FdO3d8fChpW2FdPXc9e30pLHdbZl09ITB9ZnVuY3Rpb24gWU5lKGksYSxmKXtpZihhPmYpe3ZhciBwPWE7YT1mLGY9cH1yZXR1cm4gemEoaVthXSxmKX1mdW5jdGlvbiBLTmUoaSxhLGYscCl7dmFyIHc9e30sbT17fSxiPXt9O3JldHVybiBjcihhLGZ1bmN0aW9uKEUpe2NyKEUsZnVuY3Rpb24oXyxBKXt3W19dPV8sbVtfXT1fLGJbX109QX0pfSksY3IoYSxmdW5jdGlvbihFKXt2YXIgXz0tMTtjcihFLGZ1bmN0aW9uKEEpe3ZhciBJPXAoQSk7aWYoSS5sZW5ndGgpe0k9eUYoSSxmdW5jdGlvbihXKXtyZXR1cm4gYltXXX0pO2Zvcih2YXIgQj0oSS5sZW5ndGgtMSkvMixOPU1hdGguZmxvb3IoQiksUj1NYXRoLmNlaWwoQik7Tjw9UjsrK04pe3ZhciB6PUlbTl07bVtBXT09PUEmJl88Ylt6XSYmIVlOZShmLEEseikmJihtW3pdPUEsbVtBXT13W0FdPXdbel0sXz1iW3pdKX19fSl9KSx7cm9vdDp3LGFsaWduOm19fWZ1bmN0aW9uIFhOZShpLGEsZixwLHcpe3ZhciBtPXt9LGI9UU5lKGksYSxmLHcpLEU9dz8iYm9yZGVyTGVmdCI6ImJvcmRlclJpZ2h0IjtmdW5jdGlvbiBfKEIsTil7Zm9yKHZhciBSPWIubm9kZXMoKSx6PVIucG9wKCksVz17fTt6OylXW3pdP0Ioeik6KFdbel09ITAsUi5wdXNoKHopLFI9Ui5jb25jYXQoTih6KSkpLHo9Ui5wb3AoKX1mdW5jdGlvbiBBKEIpe21bQl09Yi5pbkVkZ2VzKEIpLnJlZHVjZShmdW5jdGlvbihOLFIpe3JldHVybiBNYXRoLm1heChOLG1bUi52XStiLmVkZ2UoUikpfSwwKX1mdW5jdGlvbiBJKEIpe3ZhciBOPWIub3V0RWRnZXMoQikucmVkdWNlKGZ1bmN0aW9uKHosVyl7cmV0dXJuIE1hdGgubWluKHosbVtXLnddLWIuZWRnZShXKSl9LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSksUj1pLm5vZGUoQik7TiE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmUi5ib3JkZXJUeXBlIT09RSYmKG1bQl09TWF0aC5tYXgobVtCXSxOKSl9cmV0dXJuIF8oQSxiLnByZWRlY2Vzc29ycy5iaW5kKGIpKSxfKEksYi5zdWNjZXNzb3JzLmJpbmQoYikpLGNyKHAsZnVuY3Rpb24oQil7bVtCXT1tW2ZbQl1dfSksbX1mdW5jdGlvbiBRTmUoaSxhLGYscCl7dmFyIHc9bmV3IGMxLG09aS5ncmFwaCgpLGI9bkJlKG0ubm9kZXNlcCxtLmVkZ2VzZXAscCk7cmV0dXJuIGNyKGEsZnVuY3Rpb24oRSl7dmFyIF87Y3IoRSxmdW5jdGlvbihBKXt2YXIgST1mW0FdO2lmKHcuc2V0Tm9kZShJKSxfKXt2YXIgQj1mW19dLE49dy5lZGdlKEIsSSk7dy5zZXRFZGdlKEIsSSxNYXRoLm1heChiKGksQSxfKSxOfHwwKSl9Xz1BfSl9KSx3fWZ1bmN0aW9uIFpOZShpLGEpe3JldHVybiByMHQoSTUoYSksZnVuY3Rpb24oZil7dmFyIHA9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLHc9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3JldHVybiBvRmUoZixmdW5jdGlvbihtLGIpe3ZhciBFPXJCZShpLGIpLzI7cD1NYXRoLm1heChtK0UscCksdz1NYXRoLm1pbihtLUUsdyl9KSxwLXd9KX1mdW5jdGlvbiBKTmUoaSxhKXt2YXIgZj1JNShhKSxwPXdGKGYpLHc9bVQoZik7Y3IoWyJ1IiwiZCJdLGZ1bmN0aW9uKG0pe2NyKFsibCIsInIiXSxmdW5jdGlvbihiKXt2YXIgRT1tK2IsXz1pW0VdLEE7aWYoXyE9PWEpe3ZhciBJPUk1KF8pO0E9Yj09PSJsIj9wLXdGKEkpOnctbVQoSSksQSYmKGlbRV09d1koXyxmdW5jdGlvbihCKXtyZXR1cm4gQitBfSkpfX0pfSl9ZnVuY3Rpb24gdEJlKGksYSl7cmV0dXJuIHdZKGkudWwsZnVuY3Rpb24oZixwKXtpZihhKXJldHVybiBpW2EudG9Mb3dlckNhc2UoKV1bcF07dmFyIHc9eUYoRmYoaSxwKSk7cmV0dXJuKHdbMV0rd1syXSkvMn0pfWZ1bmN0aW9uIGVCZShpKXt2YXIgYT1tWShpKSxmPUlXKEdOZShpLGEpLFVOZShpLGEpKSxwPXt9LHc7Y3IoWyJ1IiwiZCJdLGZ1bmN0aW9uKGIpe3c9Yj09PSJ1Ij9hOkk1KGEpLnJldmVyc2UoKSxjcihbImwiLCJyIl0sZnVuY3Rpb24oRSl7RT09PSJyIiYmKHc9RmYodyxmdW5jdGlvbihCKXtyZXR1cm4gSTUoQikucmV2ZXJzZSgpfSkpO3ZhciBfPShiPT09InUiP2kucHJlZGVjZXNzb3JzOmkuc3VjY2Vzc29ycykuYmluZChpKSxBPUtOZShpLHcsZixfKSxJPVhOZShpLHcsQS5yb290LEEuYWxpZ24sRT09PSJyIik7RT09PSJyIiYmKEk9d1koSSxmdW5jdGlvbihCKXtyZXR1cm4tQn0pKSxwW2IrRV09SX0pfSk7dmFyIG09Wk5lKGkscCk7cmV0dXJuIEpOZShwLG0pLHRCZShwLGkuZ3JhcGgoKS5hbGlnbil9ZnVuY3Rpb24gbkJlKGksYSxmKXtyZXR1cm4gZnVuY3Rpb24ocCx3LG0pe3ZhciBiPXAubm9kZSh3KSxFPXAubm9kZShtKSxfPTAsQTtpZihfKz1iLndpZHRoLzIsemEoYiwibGFiZWxwb3MiKSlzd2l0Y2goYi5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOkE9LWIud2lkdGgvMjticmVhaztjYXNlInIiOkE9Yi53aWR0aC8yO2JyZWFrfWlmKEEmJihfKz1mP0E6LUEpLEE9MCxfKz0oYi5kdW1teT9hOmkpLzIsXys9KEUuZHVtbXk/YTppKS8yLF8rPUUud2lkdGgvMix6YShFLCJsYWJlbHBvcyIpKXN3aXRjaChFLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6QT1FLndpZHRoLzI7YnJlYWs7Y2FzZSJyIjpBPS1FLndpZHRoLzI7YnJlYWt9cmV0dXJuIEEmJihfKz1mP0E6LUEpLEE9MCxffX1mdW5jdGlvbiByQmUoaSxhKXtyZXR1cm4gaS5ub2RlKGEpLndpZHRofWZ1bmN0aW9uIGlCZShpKXtpPVZGdChpKSxzQmUoaSksY0ZlKGVCZShpKSxmdW5jdGlvbihhLGYpe2kubm9kZShmKS54PWF9KX1mdW5jdGlvbiBzQmUoaSl7dmFyIGE9bVkoaSksZj1pLmdyYXBoKCkucmFua3NlcCxwPTA7Y3IoYSxmdW5jdGlvbih3KXt2YXIgbT1tVChGZih3LGZ1bmN0aW9uKGIpe3JldHVybiBpLm5vZGUoYikuaGVpZ2h0fSkpO2NyKHcsZnVuY3Rpb24oYil7aS5ub2RlKGIpLnk9cCttLzJ9KSxwKz1tK2Z9KX1mdW5jdGlvbiBhTChpLGEpe3ZhciBmPWEmJmEuZGVidWdUaW1pbmc/dE5lOmVOZTtmKCJsYXlvdXQiLGZ1bmN0aW9uKCl7dmFyIHA9ZigiICBidWlsZExheW91dEdyYXBoIixmdW5jdGlvbigpe3JldHVybiBiQmUoaSl9KTtmKCIgIHJ1bkxheW91dCIsZnVuY3Rpb24oKXthQmUocCxmKX0pLGYoIiAgdXBkYXRlSW5wdXRHcmFwaCIsZnVuY3Rpb24oKXtvQmUoaSxwKX0pfSl9ZnVuY3Rpb24gYUJlKGksYSl7YSgiICAgIG1ha2VTcGFjZUZvckVkZ2VMYWJlbHMiLGZ1bmN0aW9uKCl7d0JlKGkpfSksYSgiICAgIHJlbW92ZVNlbGZFZGdlcyIsZnVuY3Rpb24oKXtfQmUoaSl9KSxhKCIgICAgYWN5Y2xpYyIsZnVuY3Rpb24oKXtXRmUoaSl9KSxhKCIgICAgbmVzdGluZ0dyYXBoLnJ1biIsZnVuY3Rpb24oKXtrTmUoaSl9KSxhKCIgICAgcmFuayIsZnVuY3Rpb24oKXttTmUoVkZ0KGkpKX0pLGEoIiAgICBpbmplY3RFZGdlTGFiZWxQcm94aWVzIixmdW5jdGlvbigpe3ZCZShpKX0pLGEoIiAgICByZW1vdmVFbXB0eVJhbmtzIixmdW5jdGlvbigpe1pGZShpKX0pLGEoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsZnVuY3Rpb24oKXtDTmUoaSl9KSxhKCIgICAgbm9ybWFsaXplUmFua3MiLGZ1bmN0aW9uKCl7UUZlKGkpfSksYSgiICAgIGFzc2lnblJhbmtNaW5NYXgiLGZ1bmN0aW9uKCl7bUJlKGkpfSksYSgiICAgIHJlbW92ZUVkZ2VMYWJlbFByb3hpZXMiLGZ1bmN0aW9uKCl7eUJlKGkpfSksYSgiICAgIG5vcm1hbGl6ZS5ydW4iLGZ1bmN0aW9uKCl7b05lKGkpfSksYSgiICAgIHBhcmVudER1bW15Q2hhaW5zIixmdW5jdGlvbigpe3FOZShpKX0pLGEoIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsZnVuY3Rpb24oKXtuTmUoaSl9KSxhKCIgICAgb3JkZXIiLGZ1bmN0aW9uKCl7JE5lKGkpfSksYSgiICAgIGluc2VydFNlbGZFZGdlcyIsZnVuY3Rpb24oKXtTQmUoaSl9KSxhKCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtyTmUoaSl9KSxhKCIgICAgcG9zaXRpb24iLGZ1bmN0aW9uKCl7aUJlKGkpfSksYSgiICAgIHBvc2l0aW9uU2VsZkVkZ2VzIixmdW5jdGlvbigpe0FCZShpKX0pLGEoIiAgICByZW1vdmVCb3JkZXJOb2RlcyIsZnVuY3Rpb24oKXtDQmUoaSl9KSxhKCIgICAgbm9ybWFsaXplLnVuZG8iLGZ1bmN0aW9uKCl7dU5lKGkpfSksYSgiICAgIGZpeHVwRWRnZUxhYmVsQ29vcmRzIixmdW5jdGlvbigpe0VCZShpKX0pLGEoIiAgICB1bmRvQ29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtpTmUoaSl9KSxhKCIgICAgdHJhbnNsYXRlR3JhcGgiLGZ1bmN0aW9uKCl7eEJlKGkpfSksYSgiICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzIixmdW5jdGlvbigpe2tCZShpKX0pLGEoIiAgICByZXZlcnNlUG9pbnRzIixmdW5jdGlvbigpe1RCZShpKX0pLGEoIiAgICBhY3ljbGljLnVuZG8iLGZ1bmN0aW9uKCl7S0ZlKGkpfSl9ZnVuY3Rpb24gb0JlKGksYSl7Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKGYpe3ZhciBwPWkubm9kZShmKSx3PWEubm9kZShmKTtwJiYocC54PXcueCxwLnk9dy55LGEuY2hpbGRyZW4oZikubGVuZ3RoJiYocC53aWR0aD13LndpZHRoLHAuaGVpZ2h0PXcuaGVpZ2h0KSl9KSxjcihpLmVkZ2VzKCksZnVuY3Rpb24oZil7dmFyIHA9aS5lZGdlKGYpLHc9YS5lZGdlKGYpO3AucG9pbnRzPXcucG9pbnRzLHphKHcsIngiKSYmKHAueD13LngscC55PXcueSl9KSxpLmdyYXBoKCkud2lkdGg9YS5ncmFwaCgpLndpZHRoLGkuZ3JhcGgoKS5oZWlnaHQ9YS5ncmFwaCgpLmhlaWdodH12YXIgY0JlPVsibm9kZXNlcCIsImVkZ2VzZXAiLCJyYW5rc2VwIiwibWFyZ2lueCIsIm1hcmdpbnkiXSx1QmU9e3JhbmtzZXA6NTAsZWRnZXNlcDoyMCxub2Rlc2VwOjUwLHJhbmtkaXI6InRiIn0sbEJlPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0saEJlPVsid2lkdGgiLCJoZWlnaHQiXSxmQmU9e3dpZHRoOjAsaGVpZ2h0OjB9LGRCZT1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSxnQmU9e21pbmxlbjoxLHdlaWdodDoxLHdpZHRoOjAsaGVpZ2h0OjAsbGFiZWxvZmZzZXQ6MTAsbGFiZWxwb3M6InIifSxwQmU9WyJsYWJlbHBvcyJdO2Z1bmN0aW9uIGJCZShpKXt2YXIgYT1uZXcgYzEoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KSxmPWQwdChpLmdyYXBoKCkpO3JldHVybiBhLnNldEdyYXBoKElXKHt9LHVCZSxmMHQoZixjQmUpLHZGKGYsbEJlKSkpLGNyKGkubm9kZXMoKSxmdW5jdGlvbihwKXt2YXIgdz1kMHQoaS5ub2RlKHApKTthLnNldE5vZGUocCxpTChmMHQodyxoQmUpLGZCZSkpLGEuc2V0UGFyZW50KHAsaS5wYXJlbnQocCkpfSksY3IoaS5lZGdlcygpLGZ1bmN0aW9uKHApe3ZhciB3PWQwdChpLmVkZ2UocCkpO2Euc2V0RWRnZShwLElXKHt9LGdCZSxmMHQodyxkQmUpLHZGKHcscEJlKSkpfSksYX1mdW5jdGlvbiB3QmUoaSl7dmFyIGE9aS5ncmFwaCgpO2EucmFua3NlcC89MixjcihpLmVkZ2VzKCksZnVuY3Rpb24oZil7dmFyIHA9aS5lZGdlKGYpO3AubWlubGVuKj0yLHAubGFiZWxwb3MudG9Mb3dlckNhc2UoKSE9PSJjIiYmKGEucmFua2Rpcj09PSJUQiJ8fGEucmFua2Rpcj09PSJCVCI/cC53aWR0aCs9cC5sYWJlbG9mZnNldDpwLmhlaWdodCs9cC5sYWJlbG9mZnNldCl9KX1mdW5jdGlvbiB2QmUoaSl7Y3IoaS5lZGdlcygpLGZ1bmN0aW9uKGEpe3ZhciBmPWkuZWRnZShhKTtpZihmLndpZHRoJiZmLmhlaWdodCl7dmFyIHA9aS5ub2RlKGEudiksdz1pLm5vZGUoYS53KSxtPXtyYW5rOih3LnJhbmstcC5yYW5rKS8yK3AucmFuayxlOmF9O3NMKGksImVkZ2UtcHJveHkiLG0sIl9lcCIpfX0pfWZ1bmN0aW9uIG1CZShpKXt2YXIgYT0wO2NyKGkubm9kZXMoKSxmdW5jdGlvbihmKXt2YXIgcD1pLm5vZGUoZik7cC5ib3JkZXJUb3AmJihwLm1pblJhbms9aS5ub2RlKHAuYm9yZGVyVG9wKS5yYW5rLHAubWF4UmFuaz1pLm5vZGUocC5ib3JkZXJCb3R0b20pLnJhbmssYT1tVChhLHAubWF4UmFuaykpfSksaS5ncmFwaCgpLm1heFJhbms9YX1mdW5jdGlvbiB5QmUoaSl7Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKGEpe3ZhciBmPWkubm9kZShhKTtmLmR1bW15PT09ImVkZ2UtcHJveHkiJiYoaS5lZGdlKGYuZSkubGFiZWxSYW5rPWYucmFuayxpLnJlbW92ZU5vZGUoYSkpfSl9ZnVuY3Rpb24geEJlKGkpe3ZhciBhPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxmPTAscD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksdz0wLG09aS5ncmFwaCgpLGI9bS5tYXJnaW54fHwwLEU9bS5tYXJnaW55fHwwO2Z1bmN0aW9uIF8oQSl7dmFyIEk9QS54LEI9QS55LE49QS53aWR0aCxSPUEuaGVpZ2h0O2E9TWF0aC5taW4oYSxJLU4vMiksZj1NYXRoLm1heChmLEkrTi8yKSxwPU1hdGgubWluKHAsQi1SLzIpLHc9TWF0aC5tYXgodyxCK1IvMil9Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKEEpe18oaS5ub2RlKEEpKX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihBKXt2YXIgST1pLmVkZ2UoQSk7emEoSSwieCIpJiZfKEkpfSksYS09YixwLT1FLGNyKGkubm9kZXMoKSxmdW5jdGlvbihBKXt2YXIgST1pLm5vZGUoQSk7SS54LT1hLEkueS09cH0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihBKXt2YXIgST1pLmVkZ2UoQSk7Y3IoSS5wb2ludHMsZnVuY3Rpb24oQil7Qi54LT1hLEIueS09cH0pLHphKEksIngiKSYmKEkueC09YSksemEoSSwieSIpJiYoSS55LT1wKX0pLG0ud2lkdGg9Zi1hK2IsbS5oZWlnaHQ9dy1wK0V9ZnVuY3Rpb24ga0JlKGkpe2NyKGkuZWRnZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLmVkZ2UoYSkscD1pLm5vZGUoYS52KSx3PWkubm9kZShhLncpLG0sYjtmLnBvaW50cz8obT1mLnBvaW50c1swXSxiPWYucG9pbnRzW2YucG9pbnRzLmxlbmd0aC0xXSk6KGYucG9pbnRzPVtdLG09dyxiPXApLGYucG9pbnRzLnVuc2hpZnQoR0Z0KHAsbSkpLGYucG9pbnRzLnB1c2goR0Z0KHcsYikpfSl9ZnVuY3Rpb24gRUJlKGkpe2NyKGkuZWRnZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLmVkZ2UoYSk7aWYoemEoZiwieCIpKXN3aXRjaCgoZi5sYWJlbHBvcz09PSJsInx8Zi5sYWJlbHBvcz09PSJyIikmJihmLndpZHRoLT1mLmxhYmVsb2Zmc2V0KSxmLmxhYmVscG9zKXtjYXNlImwiOmYueC09Zi53aWR0aC8yK2YubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpmLngrPWYud2lkdGgvMitmLmxhYmVsb2Zmc2V0O2JyZWFrfX0pfWZ1bmN0aW9uIFRCZShpKXtjcihpLmVkZ2VzKCksZnVuY3Rpb24oYSl7dmFyIGY9aS5lZGdlKGEpO2YucmV2ZXJzZWQmJmYucG9pbnRzLnJldmVyc2UoKX0pfWZ1bmN0aW9uIENCZShpKXtjcihpLm5vZGVzKCksZnVuY3Rpb24oYSl7aWYoaS5jaGlsZHJlbihhKS5sZW5ndGgpe3ZhciBmPWkubm9kZShhKSxwPWkubm9kZShmLmJvcmRlclRvcCksdz1pLm5vZGUoZi5ib3JkZXJCb3R0b20pLG09aS5ub2RlKGJZKGYuYm9yZGVyTGVmdCkpLGI9aS5ub2RlKGJZKGYuYm9yZGVyUmlnaHQpKTtmLndpZHRoPU1hdGguYWJzKGIueC1tLngpLGYuaGVpZ2h0PU1hdGguYWJzKHcueS1wLnkpLGYueD1tLngrZi53aWR0aC8yLGYueT1wLnkrZi5oZWlnaHQvMn19KSxjcihpLm5vZGVzKCksZnVuY3Rpb24oYSl7aS5ub2RlKGEpLmR1bW15PT09ImJvcmRlciImJmkucmVtb3ZlTm9kZShhKX0pfWZ1bmN0aW9uIF9CZShpKXtjcihpLmVkZ2VzKCksZnVuY3Rpb24oYSl7aWYoYS52PT09YS53KXt2YXIgZj1pLm5vZGUoYS52KTtmLnNlbGZFZGdlc3x8KGYuc2VsZkVkZ2VzPVtdKSxmLnNlbGZFZGdlcy5wdXNoKHtlOmEsbGFiZWw6aS5lZGdlKGEpfSksaS5yZW1vdmVFZGdlKGEpfX0pfWZ1bmN0aW9uIFNCZShpKXt2YXIgYT1tWShpKTtjcihhLGZ1bmN0aW9uKGYpe3ZhciBwPTA7Y3IoZixmdW5jdGlvbih3LG0pe3ZhciBiPWkubm9kZSh3KTtiLm9yZGVyPW0rcCxjcihiLnNlbGZFZGdlcyxmdW5jdGlvbihFKXtzTChpLCJzZWxmZWRnZSIse3dpZHRoOkUubGFiZWwud2lkdGgsaGVpZ2h0OkUubGFiZWwuaGVpZ2h0LHJhbms6Yi5yYW5rLG9yZGVyOm0rICsrcCxlOkUuZSxsYWJlbDpFLmxhYmVsfSwiX3NlIil9KSxkZWxldGUgYi5zZWxmRWRnZXN9KX0pfWZ1bmN0aW9uIEFCZShpKXtjcihpLm5vZGVzKCksZnVuY3Rpb24oYSl7dmFyIGY9aS5ub2RlKGEpO2lmKGYuZHVtbXk9PT0ic2VsZmVkZ2UiKXt2YXIgcD1pLm5vZGUoZi5lLnYpLHc9cC54K3Aud2lkdGgvMixtPXAueSxiPWYueC13LEU9cC5oZWlnaHQvMjtpLnNldEVkZ2UoZi5lLGYubGFiZWwpLGkucmVtb3ZlTm9kZShhKSxmLmxhYmVsLnBvaW50cz1be3g6dysyKmIvMyx5Om0tRX0se3g6dys1KmIvNix5Om0tRX0se3g6dytiLHk6bX0se3g6dys1KmIvNix5Om0rRX0se3g6dysyKmIvMyx5Om0rRX1dLGYubGFiZWwueD1mLngsZi5sYWJlbC55PWYueX19KX1mdW5jdGlvbiBmMHQoaSxhKXtyZXR1cm4gd1kodkYoaSxhKSxOdW1iZXIpfWZ1bmN0aW9uIGQwdChpKXt2YXIgYT17fTtyZXR1cm4gY3IoaSxmdW5jdGlvbihmLHApe2FbcC50b0xvd2VyQ2FzZSgpXT1mfSksYX1mdW5jdGlvbiBkTnQoaSxhKXtyZXR1cm4hIWkuY2hpbGRyZW4oYSkubGVuZ3RofWZ1bmN0aW9uIGdOdChpKXtyZXR1cm4gZzB0KGkudikrIjoiK2cwdChpLncpKyI6IitnMHQoaS5uYW1lKX12YXIgTEJlPS86L2c7ZnVuY3Rpb24gZzB0KGkpe3JldHVybiBpP1N0cmluZyhpKS5yZXBsYWNlKExCZSwiXFw6Iik6IiJ9ZnVuY3Rpb24gdzMoaSxhKXthJiZpLmF0dHIoInN0eWxlIixhKX1mdW5jdGlvbiBwTnQoaSxhLGYpe2EmJmkuYXR0cigiY2xhc3MiLGEpLmF0dHIoImNsYXNzIixmKyIgIitpLmF0dHIoImNsYXNzIikpfWZ1bmN0aW9uIHVtKGksYSl7dmFyIGY9YS5ncmFwaCgpO2lmKERJdChmKSl7dmFyIHA9Zi50cmFuc2l0aW9uO2lmKEJBKHApKXJldHVybiBwKGkpfXJldHVybiBpfXZhciBwMHQ9e25vcm1hbDpEQmUsdmVlOklCZSx1bmRpcmVjdGVkOk9CZX07ZnVuY3Rpb24gTUJlKGkpe3AwdD1pfWZ1bmN0aW9uIERCZShpLGEsZixwKXt2YXIgdz1pLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGEpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLG09dy5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTt3MyhtLGZbcCsiU3R5bGUiXSksZltwKyJDbGFzcyJdJiZtLmF0dHIoImNsYXNzIixmW3ArIkNsYXNzIl0pfWZ1bmN0aW9uIElCZShpLGEsZixwKXt2YXIgdz1pLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGEpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLG09dy5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCBMIDQgNSB6Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTt3MyhtLGZbcCsiU3R5bGUiXSksZltwKyJDbGFzcyJdJiZtLmF0dHIoImNsYXNzIixmW3ArIkNsYXNzIl0pfWZ1bmN0aW9uIE9CZShpLGEsZixwKXt2YXIgdz1pLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGEpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLG09dy5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDUgTCAxMCA1Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTt3MyhtLGZbcCsiU3R5bGUiXSksZltwKyJDbGFzcyJdJiZtLmF0dHIoImNsYXNzIixmW3ArIkNsYXNzIl0pfWZ1bmN0aW9uIGIwdChpLGEpe3ZhciBmPWkuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigid2lkdGgiLCIxMDAwMDAiKSxwPWYuYXBwZW5kKCJ4aHRtbDpkaXYiKTtwLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpO3ZhciB3PWEubGFiZWw7c3dpdGNoKHR5cGVvZiB3KXtjYXNlImZ1bmN0aW9uIjpwLmluc2VydCh3KTticmVhaztjYXNlIm9iamVjdCI6cC5pbnNlcnQoZnVuY3Rpb24oKXtyZXR1cm4gd30pO2JyZWFrO2RlZmF1bHQ6cC5odG1sKHcpfXczKHAsYS5sYWJlbFN0eWxlKSxwLnN0eWxlKCJkaXNwbGF5IiwiaW5saW5lLWJsb2NrIikscC5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKTt2YXIgbT1wLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gZi5hdHRyKCJ3aWR0aCIsbS53aWR0aCkuYXR0cigiaGVpZ2h0IixtLmhlaWdodCksZn1mdW5jdGlvbiBQQmUoaSxhKXt2YXIgZj1pO3JldHVybiBmLm5vZGUoKS5hcHBlbmRDaGlsZChhLmxhYmVsKSx3MyhmLGEubGFiZWxTdHlsZSksZn1mdW5jdGlvbiBGQmUoaSxhKXtmb3IodmFyIGY9aS5hcHBlbmQoInRleHQiKSxwPU5CZShhLmxhYmVsKS5zcGxpdChgCmApLHc9MDt3PHAubGVuZ3RoO3crKylmLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLmF0dHIoImR5IiwiMWVtIikuYXR0cigieCIsIjEiKS50ZXh0KHBbd10pO3JldHVybiB3MyhmLGEubGFiZWxTdHlsZSksZn1mdW5jdGlvbiBOQmUoaSl7Zm9yKHZhciBhPSIiLGY9ITEscCx3PTA7dzxpLmxlbmd0aDsrK3cpaWYocD1pW3ddLGYpe3N3aXRjaChwKXtjYXNlIm4iOmErPWAKYDticmVhaztkZWZhdWx0OmErPXB9Zj0hMX1lbHNlIHA9PT0iXFwiP2Y9ITA6YSs9cDtyZXR1cm4gYX1mdW5jdGlvbiB3MHQoaSxhLGYpe3ZhciBwPWEubGFiZWwsdz1pLmFwcGVuZCgiZyIpO2EubGFiZWxUeXBlPT09InN2ZyI/UEJlKHcsYSk6dHlwZW9mIHAhPSJzdHJpbmcifHxhLmxhYmVsVHlwZT09PSJodG1sIj9iMHQodyxhKTpGQmUodyxhKTt2YXIgbT13Lm5vZGUoKS5nZXRCQm94KCksYjtzd2l0Y2goZil7Y2FzZSJ0b3AiOmI9LWEuaGVpZ2h0LzI7YnJlYWs7Y2FzZSJib3R0b20iOmI9YS5oZWlnaHQvMi1tLmhlaWdodDticmVhaztkZWZhdWx0OmI9LW0uaGVpZ2h0LzJ9cmV0dXJuIHcuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLW0ud2lkdGgvMisiLCIrYisiKSIpLHd9dmFyIHYwdD1mdW5jdGlvbihpLGEpe3ZhciBmPWEubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24obSl7cmV0dXJuIGROdChhLG0pfSkscD1pLnNlbGVjdEFsbCgiZy5jbHVzdGVyIikuZGF0YShmLGZ1bmN0aW9uKG0pe3JldHVybiBtfSk7dW0ocC5leGl0KCksYSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpO3ZhciB3PXAuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXIiKS5hdHRyKCJpZCIsZnVuY3Rpb24obSl7dmFyIGI9YS5ub2RlKG0pO3JldHVybiBiLmlkfSkuc3R5bGUoIm9wYWNpdHkiLDApLmVhY2goZnVuY3Rpb24obSl7dmFyIGI9YS5ub2RlKG0pLEU9eXIodGhpcyk7eXIodGhpcykuYXBwZW5kKCJyZWN0Iik7dmFyIF89RS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIik7dzB0KF8sYixiLmNsdXN0ZXJMYWJlbFBvcyl9KTtyZXR1cm4gcD1wLm1lcmdlKHcpLHA9dW0ocCxhKS5zdHlsZSgib3BhY2l0eSIsMSkscC5zZWxlY3RBbGwoInJlY3QiKS5lYWNoKGZ1bmN0aW9uKG0pe3ZhciBiPWEubm9kZShtKSxFPXlyKHRoaXMpO3czKEUsYi5zdHlsZSl9KSxwfTtmdW5jdGlvbiBCQmUoaSl7djB0PWl9bGV0IG0wdD1mdW5jdGlvbihpLGEpe3ZhciBmPWkuc2VsZWN0QWxsKCJnLmVkZ2VMYWJlbCIpLmRhdGEoYS5lZGdlcygpLGZ1bmN0aW9uKHcpe3JldHVybiBnTnQodyl9KS5jbGFzc2VkKCJ1cGRhdGUiLCEwKTtmLmV4aXQoKS5yZW1vdmUoKSxmLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiZWRnZUxhYmVsIiwhMCkuc3R5bGUoIm9wYWNpdHkiLDApLGY9aS5zZWxlY3RBbGwoImcuZWRnZUxhYmVsIiksZi5lYWNoKGZ1bmN0aW9uKHcpe3ZhciBtPXlyKHRoaXMpO20uc2VsZWN0KCIubGFiZWwiKS5yZW1vdmUoKTt2YXIgYj1hLmVkZ2UodyksRT13MHQobSxhLmVkZ2UodyksMCkuY2xhc3NlZCgibGFiZWwiLCEwKSxfPUUubm9kZSgpLmdldEJCb3goKTtiLmxhYmVsSWQmJkUuYXR0cigiaWQiLGIubGFiZWxJZCksemEoYiwid2lkdGgiKXx8KGIud2lkdGg9Xy53aWR0aCksemEoYiwiaGVpZ2h0Iil8fChiLmhlaWdodD1fLmhlaWdodCl9KTt2YXIgcDtyZXR1cm4gZi5leGl0P3A9Zi5leGl0KCk6cD1mLnNlbGVjdEFsbChudWxsKSx1bShwLGEpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxmfTtmdW5jdGlvbiBSQmUoaSl7bTB0PWl9ZnVuY3Rpb24gYk50KGksYSl7cmV0dXJuIGkuaW50ZXJzZWN0KGEpfXZhciB5MHQ9ZnVuY3Rpb24oaSxhLGYpe3ZhciBwPWkuc2VsZWN0QWxsKCJnLmVkZ2VQYXRoIikuZGF0YShhLmVkZ2VzKCksZnVuY3Rpb24oYil7cmV0dXJuIGdOdChiKX0pLmNsYXNzZWQoInVwZGF0ZSIsITApLHc9SEJlKHAsYSk7VkJlKHAsYSk7dmFyIG09cC5tZXJnZSE9PXZvaWQgMD9wLm1lcmdlKHcpOnA7cmV0dXJuIHVtKG0sYSkuc3R5bGUoIm9wYWNpdHkiLDEpLG0uZWFjaChmdW5jdGlvbihiKXt2YXIgRT15cih0aGlzKSxfPWEuZWRnZShiKTtfLmVsZW09dGhpcyxfLmlkJiZFLmF0dHIoImlkIixfLmlkKSxwTnQoRSxfLmNsYXNzLChFLmNsYXNzZWQoInVwZGF0ZSIpPyJ1cGRhdGUgIjoiIikrImVkZ2VQYXRoIil9KSxtLnNlbGVjdEFsbCgicGF0aC5wYXRoIikuZWFjaChmdW5jdGlvbihiKXt2YXIgRT1hLmVkZ2UoYik7RS5hcnJvd2hlYWRJZD12WSgiYXJyb3doZWFkIik7dmFyIF89eXIodGhpcykuYXR0cigibWFya2VyLWVuZCIsZnVuY3Rpb24oKXtyZXR1cm4idXJsKCIrJEJlKGxvY2F0aW9uLmhyZWYsRS5hcnJvd2hlYWRJZCkrIikifSkuc3R5bGUoImZpbGwiLCJub25lIik7dW0oXyxhKS5hdHRyKCJkIixmdW5jdGlvbihBKXtyZXR1cm4gekJlKGEsQSl9KSx3MyhfLEUuc3R5bGUpfSksbS5zZWxlY3RBbGwoImRlZnMgKiIpLnJlbW92ZSgpLG0uc2VsZWN0QWxsKCJkZWZzIikuZWFjaChmdW5jdGlvbihiKXt2YXIgRT1hLmVkZ2UoYiksXz1mW0UuYXJyb3doZWFkXTtfKHlyKHRoaXMpLEUuYXJyb3doZWFkSWQsRSwiYXJyb3doZWFkIil9KSxtfTtmdW5jdGlvbiBqQmUoaSl7eTB0PWl9ZnVuY3Rpb24gJEJlKGksYSl7dmFyIGY9aS5zcGxpdCgiIyIpWzBdO3JldHVybiBmKyIjIithfWZ1bmN0aW9uIHpCZShpLGEpe3ZhciBmPWkuZWRnZShhKSxwPWkubm9kZShhLnYpLHc9aS5ub2RlKGEudyksbT1mLnBvaW50cy5zbGljZSgxLGYucG9pbnRzLmxlbmd0aC0xKTtyZXR1cm4gbS51bnNoaWZ0KGJOdChwLG1bMF0pKSxtLnB1c2goYk50KHcsbVttLmxlbmd0aC0xXSkpLHdOdChmLG0pfWZ1bmN0aW9uIHdOdChpLGEpe3ZhciBmPShFNXx8d0VlLmxpbmUpKCkueChmdW5jdGlvbihwKXtyZXR1cm4gcC54fSkueShmdW5jdGlvbihwKXtyZXR1cm4gcC55fSk7cmV0dXJuKGYuY3VydmV8fGYuaW50ZXJwb2xhdGUpKGkuY3VydmUpLGYoYSl9ZnVuY3Rpb24gcUJlKGkpe3ZhciBhPWkuZ2V0QkJveCgpLGY9aS5vd25lclNWR0VsZW1lbnQuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpLm11bHRpcGx5KGkuZ2V0U2NyZWVuQ1RNKCkpLnRyYW5zbGF0ZShhLndpZHRoLzIsYS5oZWlnaHQvMik7cmV0dXJue3g6Zi5lLHk6Zi5mfX1mdW5jdGlvbiBIQmUoaSxhKXt2YXIgZj1pLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJlZGdlUGF0aCIpLnN0eWxlKCJvcGFjaXR5IiwwKTtyZXR1cm4gZi5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInBhdGgiKS5hdHRyKCJkIixmdW5jdGlvbihwKXt2YXIgdz1hLmVkZ2UocCksbT1hLm5vZGUocC52KS5lbGVtLGI9eVQody5wb2ludHMubGVuZ3RoKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gcUJlKG0pfSk7cmV0dXJuIHdOdCh3LGIpfSksZi5hcHBlbmQoImRlZnMiKSxmfWZ1bmN0aW9uIFZCZShpLGEpe3ZhciBmPWkuZXhpdCgpO3VtKGYsYSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpfXZhciB4MHQ9ZnVuY3Rpb24oaSxhLGYpe3ZhciBwPWEubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuIWROdChhLGIpfSksdz1pLnNlbGVjdEFsbCgiZy5ub2RlIikuZGF0YShwLGZ1bmN0aW9uKGIpe3JldHVybiBifSkuY2xhc3NlZCgidXBkYXRlIiwhMCk7dy5leGl0KCkucmVtb3ZlKCksdy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSIpLnN0eWxlKCJvcGFjaXR5IiwwKSx3PWkuc2VsZWN0QWxsKCJnLm5vZGUiKSx3LmVhY2goZnVuY3Rpb24oYil7dmFyIEU9YS5ub2RlKGIpLF89eXIodGhpcyk7cE50KF8sRS5jbGFzcywoXy5jbGFzc2VkKCJ1cGRhdGUiKT8idXBkYXRlICI6IiIpKyJub2RlIiksXy5zZWxlY3QoImcubGFiZWwiKS5yZW1vdmUoKTt2YXIgQT1fLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxJPXcwdChBLEUpLEI9ZltFLnNoYXBlXSxOPXZGKEkubm9kZSgpLmdldEJCb3goKSwid2lkdGgiLCJoZWlnaHQiKTtFLmVsZW09dGhpcyxFLmlkJiZfLmF0dHIoImlkIixFLmlkKSxFLmxhYmVsSWQmJkEuYXR0cigiaWQiLEUubGFiZWxJZCksemEoRSwid2lkdGgiKSYmKE4ud2lkdGg9RS53aWR0aCksemEoRSwiaGVpZ2h0IikmJihOLmhlaWdodD1FLmhlaWdodCksTi53aWR0aCs9RS5wYWRkaW5nTGVmdCtFLnBhZGRpbmdSaWdodCxOLmhlaWdodCs9RS5wYWRkaW5nVG9wK0UucGFkZGluZ0JvdHRvbSxBLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhFLnBhZGRpbmdMZWZ0LUUucGFkZGluZ1JpZ2h0KS8yKyIsIisoRS5wYWRkaW5nVG9wLUUucGFkZGluZ0JvdHRvbSkvMisiKSIpO3ZhciBSPXlyKHRoaXMpO1Iuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIikucmVtb3ZlKCk7dmFyIHo9QihSLE4sRSkuY2xhc3NlZCgibGFiZWwtY29udGFpbmVyIiwhMCk7dzMoeixFLnN0eWxlKTt2YXIgVz16Lm5vZGUoKS5nZXRCQm94KCk7RS53aWR0aD1XLndpZHRoLEUuaGVpZ2h0PVcuaGVpZ2h0fSk7dmFyIG07cmV0dXJuIHcuZXhpdD9tPXcuZXhpdCgpOm09dy5zZWxlY3RBbGwobnVsbCksdW0obSxhKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksd307ZnVuY3Rpb24gR0JlKGkpe3gwdD1pfWZ1bmN0aW9uIFVCZShpLGEpe3ZhciBmPWkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIXlyKHRoaXMpLmNsYXNzZWQoInVwZGF0ZSIpfSk7ZnVuY3Rpb24gcCh3KXt2YXIgbT1hLm5vZGUodyk7cmV0dXJuInRyYW5zbGF0ZSgiK20ueCsiLCIrbS55KyIpIn1mLmF0dHIoInRyYW5zZm9ybSIscCksdW0oaSxhKS5zdHlsZSgib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixwKSx1bShmLnNlbGVjdEFsbCgicmVjdCIpLGEpLmF0dHIoIndpZHRoIixmdW5jdGlvbih3KXtyZXR1cm4gYS5ub2RlKHcpLndpZHRofSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih3KXtyZXR1cm4gYS5ub2RlKHcpLmhlaWdodH0pLmF0dHIoIngiLGZ1bmN0aW9uKHcpe3ZhciBtPWEubm9kZSh3KTtyZXR1cm4tbS53aWR0aC8yfSkuYXR0cigieSIsZnVuY3Rpb24odyl7dmFyIG09YS5ub2RlKHcpO3JldHVybi1tLmhlaWdodC8yfSl9ZnVuY3Rpb24gV0JlKGksYSl7dmFyIGY9aS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4heXIodGhpcykuY2xhc3NlZCgidXBkYXRlIil9KTtmdW5jdGlvbiBwKHcpe3ZhciBtPWEuZWRnZSh3KTtyZXR1cm4gemEobSwieCIpPyJ0cmFuc2xhdGUoIittLngrIiwiK20ueSsiKSI6IiJ9Zi5hdHRyKCJ0cmFuc2Zvcm0iLHApLHVtKGksYSkuc3R5bGUoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIscCl9ZnVuY3Rpb24gWUJlKGksYSl7dmFyIGY9aS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4heXIodGhpcykuY2xhc3NlZCgidXBkYXRlIil9KTtmdW5jdGlvbiBwKHcpe3ZhciBtPWEubm9kZSh3KTtyZXR1cm4idHJhbnNsYXRlKCIrbS54KyIsIittLnkrIikifWYuYXR0cigidHJhbnNmb3JtIixwKSx1bShpLGEpLnN0eWxlKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLHApfWZ1bmN0aW9uIHZOdChpLGEsZixwKXt2YXIgdz1pLngsbT1pLnksYj13LXAueCxFPW0tcC55LF89TWF0aC5zcXJ0KGEqYSpFKkUrZipmKmIqYiksQT1NYXRoLmFicyhhKmYqYi9fKTtwLng8dyYmKEE9LUEpO3ZhciBJPU1hdGguYWJzKGEqZipFL18pO3JldHVybiBwLnk8bSYmKEk9LUkpLHt4OncrQSx5Om0rSX19ZnVuY3Rpb24gS0JlKGksYSxmKXtyZXR1cm4gdk50KGksYSxhLGYpfWZ1bmN0aW9uIFhCZShpLGEsZixwKXt2YXIgdyxtLGIsRSxfLEEsSSxCLE4sUix6LFcsZXQsc3QsYXQ7aWYodz1hLnktaS55LGI9aS54LWEueCxfPWEueCppLnktaS54KmEueSxOPXcqZi54K2IqZi55K18sUj13KnAueCtiKnAueStfLCEoTiE9PTAmJlIhPT0wJiZtTnQoTixSKSkmJihtPXAueS1mLnksRT1mLngtcC54LEE9cC54KmYueS1mLngqcC55LEk9bSppLngrRSppLnkrQSxCPW0qYS54K0UqYS55K0EsIShJIT09MCYmQiE9PTAmJm1OdChJLEIpKSYmKHo9dypFLW0qYix6IT09MCkpKXJldHVybiBXPU1hdGguYWJzKHovMiksZXQ9YipBLUUqXyxzdD1ldDwwPyhldC1XKS96OihldCtXKS96LGV0PW0qXy13KkEsYXQ9ZXQ8MD8oZXQtVykvejooZXQrVykveix7eDpzdCx5OmF0fX1mdW5jdGlvbiBtTnQoaSxhKXtyZXR1cm4gaSphPjB9ZnVuY3Rpb24gdjMoaSxhLGYpe3ZhciBwPWkueCx3PWkueSxtPVtdLGI9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2EuZm9yRWFjaChmdW5jdGlvbih6KXtiPU1hdGgubWluKGIsei54KSxFPU1hdGgubWluKEUsei55KX0pO2Zvcih2YXIgXz1wLWkud2lkdGgvMi1iLEE9dy1pLmhlaWdodC8yLUUsST0wO0k8YS5sZW5ndGg7SSsrKXt2YXIgQj1hW0ldLE49YVtJPGEubGVuZ3RoLTE/SSsxOjBdLFI9WEJlKGksZix7eDpfK0IueCx5OkErQi55fSx7eDpfK04ueCx5OkErTi55fSk7UiYmbS5wdXNoKFIpfXJldHVybiBtLmxlbmd0aD8obS5sZW5ndGg+MSYmbS5zb3J0KGZ1bmN0aW9uKHosVyl7dmFyIGV0PXoueC1mLngsc3Q9ei55LWYueSxhdD1NYXRoLnNxcnQoZXQqZXQrc3Qqc3QpLGJ0PVcueC1mLngsbXQ9Vy55LWYueSx5dD1NYXRoLnNxcnQoYnQqYnQrbXQqbXQpO3JldHVybiBhdDx5dD8tMTphdD09PXl0PzA6MX0pLG1bMF0pOihjb25zb2xlLmxvZygiTk8gSU5URVJTRUNUSU9OIEZPVU5ELCBSRVRVUk4gTk9ERSBDRU5URVIiLGkpLGkpfWZ1bmN0aW9uIGswdChpLGEpe3ZhciBmPWkueCxwPWkueSx3PWEueC1mLG09YS55LXAsYj1pLndpZHRoLzIsRT1pLmhlaWdodC8yLF8sQTtyZXR1cm4gTWF0aC5hYnMobSkqYj5NYXRoLmFicyh3KSpFPyhtPDAmJihFPS1FKSxfPW09PT0wPzA6RSp3L20sQT1FKToodzwwJiYoYj0tYiksXz1iLEE9dz09PTA/MDpiKm0vdykse3g6ZitfLHk6cCtBfX12YXIgRTB0PXtyZWN0OlpCZSxlbGxpcHNlOkpCZSxjaXJjbGU6dFJlLGRpYW1vbmQ6ZVJlfTtmdW5jdGlvbiBRQmUoaSl7RTB0PWl9ZnVuY3Rpb24gWkJlKGksYSxmKXt2YXIgcD1pLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInJ4IixmLnJ4KS5hdHRyKCJyeSIsZi5yeSkuYXR0cigieCIsLWEud2lkdGgvMikuYXR0cigieSIsLWEuaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixhLndpZHRoKS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24odyl7cmV0dXJuIGswdChmLHcpfSxwfWZ1bmN0aW9uIEpCZShpLGEsZil7dmFyIHA9YS53aWR0aC8yLHc9YS5oZWlnaHQvMixtPWkuaW5zZXJ0KCJlbGxpcHNlIiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsLWEud2lkdGgvMikuYXR0cigieSIsLWEuaGVpZ2h0LzIpLmF0dHIoInJ4IixwKS5hdHRyKCJyeSIsdyk7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiB2TnQoZixwLHcsYil9LG19ZnVuY3Rpb24gdFJlKGksYSxmKXt2YXIgcD1NYXRoLm1heChhLndpZHRoLGEuaGVpZ2h0KS8yLHc9aS5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLC1hLndpZHRoLzIpLmF0dHIoInkiLC1hLmhlaWdodC8yKS5hdHRyKCJyIixwKTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24obSl7cmV0dXJuIEtCZShmLHAsbSl9LHd9ZnVuY3Rpb24gZVJlKGksYSxmKXt2YXIgcD1hLndpZHRoKk1hdGguU1FSVDIvMix3PWEuaGVpZ2h0Kk1hdGguU1FSVDIvMixtPVt7eDowLHk6LXd9LHt4Oi1wLHk6MH0se3g6MCx5Ond9LHt4OnAseTowfV0sYj1pLmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsbS5tYXAoZnVuY3Rpb24oRSl7cmV0dXJuIEUueCsiLCIrRS55fSkuam9pbigiICIpKTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIHYzKGYsbSxFKX0sYn1mdW5jdGlvbiBuUmUoKXt2YXIgaT1mdW5jdGlvbihhLGYpe3NSZShmKTt2YXIgcD1FRihhLCJvdXRwdXQiKSx3PUVGKHAsImNsdXN0ZXJzIiksbT1FRihwLCJlZGdlUGF0aHMiKSxiPW0wdChFRihwLCJlZGdlTGFiZWxzIiksZiksRT14MHQoRUYocCwibm9kZXMiKSxmLEUwdCk7YUwoZiksWUJlKEUsZiksV0JlKGIsZikseTB0KG0sZixwMHQpO3ZhciBfPXYwdCh3LGYpO1VCZShfLGYpLGFSZShmKX07cmV0dXJuIGkuY3JlYXRlTm9kZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEdCZShhKSxpKTp4MHR9LGkuY3JlYXRlQ2x1c3RlcnM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEJCZShhKSxpKTp2MHR9LGkuY3JlYXRlRWRnZUxhYmVscz1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUkJlKGEpLGkpOm0wdH0saS5jcmVhdGVFZGdlUGF0aHM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGpCZShhKSxpKTp5MHR9LGkuc2hhcGVzPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhRQmUoYSksaSk6RTB0fSxpLmFycm93cz1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTUJlKGEpLGkpOnAwdH0saX12YXIgclJlPXtwYWRkaW5nTGVmdDoxMCxwYWRkaW5nUmlnaHQ6MTAscGFkZGluZ1RvcDoxMCxwYWRkaW5nQm90dG9tOjEwLHJ4OjAscnk6MCxzaGFwZToicmVjdCJ9LGlSZT17YXJyb3doZWFkOiJub3JtYWwiLGN1cnZlOmNnfTtmdW5jdGlvbiBzUmUoaSl7aS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGY9aS5ub2RlKGEpOyF6YShmLCJsYWJlbCIpJiYhaS5jaGlsZHJlbihhKS5sZW5ndGgmJihmLmxhYmVsPWEpLHphKGYsInBhZGRpbmdYIikmJmlMKGYse3BhZGRpbmdMZWZ0OmYucGFkZGluZ1gscGFkZGluZ1JpZ2h0OmYucGFkZGluZ1h9KSx6YShmLCJwYWRkaW5nWSIpJiZpTChmLHtwYWRkaW5nVG9wOmYucGFkZGluZ1kscGFkZGluZ0JvdHRvbTpmLnBhZGRpbmdZfSksemEoZiwicGFkZGluZyIpJiZpTChmLHtwYWRkaW5nTGVmdDpmLnBhZGRpbmcscGFkZGluZ1JpZ2h0OmYucGFkZGluZyxwYWRkaW5nVG9wOmYucGFkZGluZyxwYWRkaW5nQm90dG9tOmYucGFkZGluZ30pLGlMKGYsclJlKSxjcihbInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxmdW5jdGlvbihwKXtmW3BdPU51bWJlcihmW3BdKX0pLHphKGYsIndpZHRoIikmJihmLl9wcmV2V2lkdGg9Zi53aWR0aCksemEoZiwiaGVpZ2h0IikmJihmLl9wcmV2SGVpZ2h0PWYuaGVpZ2h0KX0pLGkuZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBmPWkuZWRnZShhKTt6YShmLCJsYWJlbCIpfHwoZi5sYWJlbD0iIiksaUwoZixpUmUpfSl9ZnVuY3Rpb24gYVJlKGkpe2NyKGkubm9kZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLm5vZGUoYSk7emEoZiwiX3ByZXZXaWR0aCIpP2Yud2lkdGg9Zi5fcHJldldpZHRoOmRlbGV0ZSBmLndpZHRoLHphKGYsIl9wcmV2SGVpZ2h0Iik/Zi5oZWlnaHQ9Zi5fcHJldkhlaWdodDpkZWxldGUgZi5oZWlnaHQsZGVsZXRlIGYuX3ByZXZXaWR0aCxkZWxldGUgZi5fcHJldkhlaWdodH0pfWZ1bmN0aW9uIEVGKGksYSl7dmFyIGY9aS5zZWxlY3QoImcuIithKTtyZXR1cm4gZi5lbXB0eSgpJiYoZj1pLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixhKSksZn1mdW5jdGlvbiB5TnQoaSxhLGYpe2NvbnN0IHA9YS53aWR0aCx3PWEuaGVpZ2h0LG09KHArdykqLjksYj1be3g6bS8yLHk6MH0se3g6bSx5Oi1tLzJ9LHt4Om0vMix5Oi1tfSx7eDowLHk6LW0vMn1dLEU9TzUoaSxtLG0sYik7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKF8pe3JldHVybiB2MyhmLGIsXyl9LEV9ZnVuY3Rpb24geE50KGksYSxmKXtjb25zdCB3PWEuaGVpZ2h0LG09dy80LGI9YS53aWR0aCsyKm0sRT1be3g6bSx5OjB9LHt4OmItbSx5OjB9LHt4OmIseTotdy8yfSx7eDpiLW0seTotd30se3g6bSx5Oi13fSx7eDowLHk6LXcvMn1dLF89TzUoaSxiLHcsRSk7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKEEpe3JldHVybiB2MyhmLEUsQSl9LF99ZnVuY3Rpb24ga050KGksYSxmKXtjb25zdCBwPWEud2lkdGgsdz1hLmhlaWdodCxtPVt7eDotdy8yLHk6MH0se3g6cCx5OjB9LHt4OnAseTotd30se3g6LXcvMix5Oi13fSx7eDowLHk6LXcvMn1dLGI9TzUoaSxwLHcsbSk7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiB2MyhmLG0sRSl9LGJ9ZnVuY3Rpb24gRU50KGksYSxmKXtjb25zdCBwPWEud2lkdGgsdz1hLmhlaWdodCxtPVt7eDotMip3LzYseTowfSx7eDpwLXcvNix5OjB9LHt4OnArMip3LzYseTotd30se3g6dy82LHk6LXd9XSxiPU81KGkscCx3LG0pO3JldHVybiBmLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gdjMoZixtLEUpfSxifWZ1bmN0aW9uIFROdChpLGEsZil7Y29uc3QgcD1hLndpZHRoLHc9YS5oZWlnaHQsbT1be3g6Mip3LzYseTowfSx7eDpwK3cvNix5OjB9LHt4OnAtMip3LzYseTotd30se3g6LXcvNix5Oi13fV0sYj1PNShpLHAsdyxtKTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIHYzKGYsbSxFKX0sYn1mdW5jdGlvbiBDTnQoaSxhLGYpe2NvbnN0IHA9YS53aWR0aCx3PWEuaGVpZ2h0LG09W3t4Oi0yKncvNix5OjB9LHt4OnArMip3LzYseTowfSx7eDpwLXcvNix5Oi13fSx7eDp3LzYseTotd31dLGI9TzUoaSxwLHcsbSk7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiB2MyhmLG0sRSl9LGJ9ZnVuY3Rpb24gX050KGksYSxmKXtjb25zdCBwPWEud2lkdGgsdz1hLmhlaWdodCxtPVt7eDp3LzYseTowfSx7eDpwLXcvNix5OjB9LHt4OnArMip3LzYseTotd30se3g6LTIqdy82LHk6LXd9XSxiPU81KGkscCx3LG0pO3JldHVybiBmLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gdjMoZixtLEUpfSxifWZ1bmN0aW9uIFNOdChpLGEsZil7Y29uc3QgcD1hLndpZHRoLHc9YS5oZWlnaHQsbT1be3g6MCx5OjB9LHt4OnArdy8yLHk6MH0se3g6cCx5Oi13LzJ9LHt4OnArdy8yLHk6LXd9LHt4OjAseTotd31dLGI9TzUoaSxwLHcsbSk7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiB2MyhmLG0sRSl9LGJ9ZnVuY3Rpb24gQU50KGksYSxmKXtjb25zdCBwPWEuaGVpZ2h0LHc9YS53aWR0aCtwLzQsbT1pLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInJ4IixwLzIpLmF0dHIoInJ5IixwLzIpLmF0dHIoIngiLC13LzIpLmF0dHIoInkiLC1wLzIpLmF0dHIoIndpZHRoIix3KS5hdHRyKCJoZWlnaHQiLHApO3JldHVybiBmLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4gazB0KGYsYil9LG19ZnVuY3Rpb24gTE50KGksYSxmKXtjb25zdCBwPWEud2lkdGgsdz1hLmhlaWdodCxtPVt7eDowLHk6MH0se3g6cCx5OjB9LHt4OnAseTotd30se3g6MCx5Oi13fSx7eDowLHk6MH0se3g6LTgseTowfSx7eDpwKzgseTowfSx7eDpwKzgseTotd30se3g6LTgseTotd30se3g6LTgseTowfV0sYj1PNShpLHAsdyxtKTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIHYzKGYsbSxFKX0sYn1mdW5jdGlvbiBNTnQoaSxhLGYpe2NvbnN0IHA9YS53aWR0aCx3PXAvMixtPXcvKDIuNStwLzUwKSxiPWEuaGVpZ2h0K20sRT0iTSAwLCIrbSsiIGEgIit3KyIsIittKyIgMCwwLDAgIitwKyIgMCBhICIrdysiLCIrbSsiIDAsMCwwICIrLXArIiAwIGwgMCwiK2IrIiBhICIrdysiLCIrbSsiIDAsMCwwICIrcCsiIDAgbCAwLCIrLWIsXz1pLmF0dHIoImxhYmVsLW9mZnNldC15IixtKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJkIixFKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistcC8yKyIsIistKGIvMittKSsiKSIpO3JldHVybiBmLmludGVyc2VjdD1mdW5jdGlvbihBKXtjb25zdCBJPWswdChmLEEpLEI9SS54LWYueDtpZih3IT0wJiYoTWF0aC5hYnMoQik8Zi53aWR0aC8yfHxNYXRoLmFicyhCKT09Zi53aWR0aC8yJiZNYXRoLmFicyhJLnktZi55KT5mLmhlaWdodC8yLW0pKXtsZXQgTj1tKm0qKDEtQipCLyh3KncpKTtOIT0wJiYoTj1NYXRoLnNxcnQoTikpLE49bS1OLEEueS1mLnk+MCYmKE49LU4pLEkueSs9Tn1yZXR1cm4gSX0sX31mdW5jdGlvbiBvUmUoaSl7aS5zaGFwZXMoKS5xdWVzdGlvbj15TnQsaS5zaGFwZXMoKS5oZXhhZ29uPXhOdCxpLnNoYXBlcygpLnN0YWRpdW09QU50LGkuc2hhcGVzKCkuc3Vicm91dGluZT1MTnQsaS5zaGFwZXMoKS5jeWxpbmRlcj1NTnQsaS5zaGFwZXMoKS5yZWN0X2xlZnRfaW52X2Fycm93PWtOdCxpLnNoYXBlcygpLmxlYW5fcmlnaHQ9RU50LGkuc2hhcGVzKCkubGVhbl9sZWZ0PVROdCxpLnNoYXBlcygpLnRyYXBlem9pZD1DTnQsaS5zaGFwZXMoKS5pbnZfdHJhcGV6b2lkPV9OdCxpLnNoYXBlcygpLnJlY3RfcmlnaHRfaW52X2Fycm93PVNOdH1mdW5jdGlvbiBjUmUoaSl7aSh7cXVlc3Rpb246eU50fSksaSh7aGV4YWdvbjp4TnR9KSxpKHtzdGFkaXVtOkFOdH0pLGkoe3N1YnJvdXRpbmU6TE50fSksaSh7Y3lsaW5kZXI6TU50fSksaSh7cmVjdF9sZWZ0X2ludl9hcnJvdzprTnR9KSxpKHtsZWFuX3JpZ2h0OkVOdH0pLGkoe2xlYW5fbGVmdDpUTnR9KSxpKHt0cmFwZXpvaWQ6Q050fSksaSh7aW52X3RyYXBlem9pZDpfTnR9KSxpKHtyZWN0X3JpZ2h0X2ludl9hcnJvdzpTTnR9KX1mdW5jdGlvbiBPNShpLGEsZixwKXtyZXR1cm4gaS5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLHAubWFwKGZ1bmN0aW9uKHcpe3JldHVybiB3LngrIiwiK3cueX0pLmpvaW4oIiAiKSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWEvMisiLCIrZi8yKyIpIil9Y29uc3QgdVJlPXthZGRUb1JlbmRlcjpvUmUsYWRkVG9SZW5kZXJWMjpjUmV9LEROdD17fSxsUmU9ZnVuY3Rpb24oaSl7Y29uc3QgYT1PYmplY3Qua2V5cyhpKTtmb3IoY29uc3QgZiBvZiBhKUROdFtmXT1pW2ZdfSxJTnQ9ZnVuY3Rpb24oaSxhLGYscCx3LG0pe2NvbnN0IGI9cD9wLnNlbGVjdChgW2lkPSIke2Z9Il1gKTp5cihgW2lkPSIke2Z9Il1gKSxFPXd8fGRvY3VtZW50O09iamVjdC5rZXlzKGkpLmZvckVhY2goZnVuY3Rpb24oQSl7Y29uc3QgST1pW0FdO2xldCBCPSJkZWZhdWx0IjtJLmNsYXNzZXMubGVuZ3RoPjAmJihCPUkuY2xhc3Nlcy5qb2luKCIgIikpO2NvbnN0IE49aW0oSS5zdHlsZXMpO2xldCBSPUkudGV4dCE9PXZvaWQgMD9JLnRleHQ6SS5pZCx6O2lmKG8xKE9lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBzdD17bGFiZWw6Ui5yZXBsYWNlKC9mYVtibHJzXT86ZmEtW1x3LV0rL2csYXQ9PmA8aSBjbGFzcz0nJHthdC5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmApfTt6PWIwdChiLHN0KS5ub2RlKCksei5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHopfWVsc2V7Y29uc3Qgc3Q9RS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO3N0LnNldEF0dHJpYnV0ZSgic3R5bGUiLE4ubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKTtjb25zdCBhdD1SLnNwbGl0KEtyLmxpbmVCcmVha1JlZ2V4KTtmb3IoY29uc3QgYnQgb2YgYXQpe2NvbnN0IG10PUUuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7bXQuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIiksbXQuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLG10LnNldEF0dHJpYnV0ZSgieCIsIjEiKSxtdC50ZXh0Q29udGVudD1idCxzdC5hcHBlbmRDaGlsZChtdCl9ej1zdH1sZXQgVz0wLGV0PSIiO3N3aXRjaChJLnR5cGUpe2Nhc2Uicm91bmQiOlc9NSxldD0icmVjdCI7YnJlYWs7Y2FzZSJzcXVhcmUiOmV0PSJyZWN0IjticmVhaztjYXNlImRpYW1vbmQiOmV0PSJxdWVzdGlvbiI7YnJlYWs7Y2FzZSJoZXhhZ29uIjpldD0iaGV4YWdvbiI7YnJlYWs7Y2FzZSJvZGQiOmV0PSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImxlYW5fcmlnaHQiOmV0PSJsZWFuX3JpZ2h0IjticmVhaztjYXNlImxlYW5fbGVmdCI6ZXQ9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOmV0PSJ0cmFwZXpvaWQiO2JyZWFrO2Nhc2UiaW52X3RyYXBlem9pZCI6ZXQ9Imludl90cmFwZXpvaWQiO2JyZWFrO2Nhc2Uib2RkX3JpZ2h0IjpldD0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJjaXJjbGUiOmV0PSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6ZXQ9ImVsbGlwc2UiO2JyZWFrO2Nhc2Uic3RhZGl1bSI6ZXQ9InN0YWRpdW0iO2JyZWFrO2Nhc2Uic3Vicm91dGluZSI6ZXQ9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOmV0PSJjeWxpbmRlciI7YnJlYWs7Y2FzZSJncm91cCI6ZXQ9InJlY3QiO2JyZWFrO2RlZmF1bHQ6ZXQ9InJlY3QifVV0Lndhcm4oIkFkZGluZyBub2RlIixJLmlkLEkuZG9tSWQpLGEuc2V0Tm9kZShtLmRiLmxvb2tVcERvbUlkKEkuaWQpLHtsYWJlbFR5cGU6InN2ZyIsbGFiZWxTdHlsZTpOLmxhYmVsU3R5bGUsc2hhcGU6ZXQsbGFiZWw6eixyeDpXLHJ5OlcsY2xhc3M6QixzdHlsZTpOLnN0eWxlLGlkOm0uZGIubG9va1VwRG9tSWQoSS5pZCl9KX0pfSxPTnQ9ZnVuY3Rpb24oaSxhLGYpe2xldCBwPTAsdyxtO2lmKGkuZGVmYXVsdFN0eWxlIT09dm9pZCAwKXtjb25zdCBiPWltKGkuZGVmYXVsdFN0eWxlKTt3PWIuc3R5bGUsbT1iLmxhYmVsU3R5bGV9aS5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ArKztjb25zdCBFPSJMLSIrYi5zdGFydCsiLSIrYi5lbmQsXz0iTFMtIitiLnN0YXJ0LEE9IkxFLSIrYi5lbmQsST17fTtiLnR5cGU9PT0iYXJyb3dfb3BlbiI/SS5hcnJvd2hlYWQ9Im5vbmUiOkkuYXJyb3doZWFkPSJub3JtYWwiO2xldCBCPSIiLE49IiI7aWYoYi5zdHlsZSE9PXZvaWQgMCl7Y29uc3QgUj1pbShiLnN0eWxlKTtCPVIuc3R5bGUsTj1SLmxhYmVsU3R5bGV9ZWxzZSBzd2l0Y2goYi5zdHJva2Upe2Nhc2Uibm9ybWFsIjpCPSJmaWxsOm5vbmUiLHchPT12b2lkIDAmJihCPXcpLG0hPT12b2lkIDAmJihOPW0pO2JyZWFrO2Nhc2UiZG90dGVkIjpCPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtZGFzaGFycmF5OjM7IjticmVhaztjYXNlInRoaWNrIjpCPSIgc3Ryb2tlLXdpZHRoOiAzLjVweDtmaWxsOm5vbmUiO2JyZWFrfUkuc3R5bGU9QixJLmxhYmVsU3R5bGU9TixiLmludGVycG9sYXRlIT09dm9pZCAwP0kuY3VydmU9ZXcoYi5pbnRlcnBvbGF0ZSxjZyk6aS5kZWZhdWx0SW50ZXJwb2xhdGUhPT12b2lkIDA/SS5jdXJ2ZT1ldyhpLmRlZmF1bHRJbnRlcnBvbGF0ZSxjZyk6SS5jdXJ2ZT1ldyhETnQuY3VydmUsY2cpLGIudGV4dD09PXZvaWQgMD9iLnN0eWxlIT09dm9pZCAwJiYoSS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihJLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixJLmxhYmVscG9zPSJjIixvMShPZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKT8oSS5sYWJlbFR5cGU9Imh0bWwiLEkubGFiZWw9YDxzcGFuIGlkPSJMLSR7RX0iIGNsYXNzPSJlZGdlTGFiZWwgTC0ke199JyBMLSR7QX0iIHN0eWxlPSIke0kubGFiZWxTdHlsZX0iPiR7Yi50ZXh0LnJlcGxhY2UoL2ZhW2JscnNdPzpmYS1bXHctXSsvZyxSPT5gPGkgY2xhc3M9JyR7Ui5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmApfTwvc3Bhbj5gKTooSS5sYWJlbFR5cGU9InRleHQiLEkubGFiZWw9Yi50ZXh0LnJlcGxhY2UoS3IubGluZUJyZWFrUmVnZXgsYApgKSxiLnN0eWxlPT09dm9pZCAwJiYoSS5zdHlsZT1JLnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZSIpLEkubGFiZWxTdHlsZT1JLmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSkpLEkuaWQ9RSxJLmNsYXNzPV8rIiAiK0EsSS5taW5sZW49Yi5sZW5ndGh8fDEsYS5zZXRFZGdlKGYuZGIubG9va1VwRG9tSWQoYi5zdGFydCksZi5kYi5sb29rVXBEb21JZChiLmVuZCksSSxwKX0pfSxoUmU9e3NldENvbmY6bFJlLGFkZFZlcnRpY2VzOklOdCxhZGRFZGdlczpPTnQsZ2V0Q2xhc3NlczpmdW5jdGlvbihpLGEpe3JldHVybiBVdC5pbmZvKCJFeHRyYWN0aW5nIGNsYXNzZXMiKSxhLmRiLmdldENsYXNzZXMoKX0sZHJhdzpmdW5jdGlvbihpLGEsZixwKXtVdC5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCIpO2NvbnN0e3NlY3VyaXR5TGV2ZWw6dyxmbG93Y2hhcnQ6bX09T2UoKTtsZXQgYjt3PT09InNhbmRib3giJiYoYj15cigiI2kiK2EpKTtjb25zdCBFPXlyKHc9PT0ic2FuZGJveCI/Yi5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksXz13PT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQ7bGV0IEE9cC5kYi5nZXREaXJlY3Rpb24oKTtBPT09dm9pZCAwJiYoQT0iVEQiKTtjb25zdCBJPW0ubm9kZVNwYWNpbmd8fDUwLEI9bS5yYW5rU3BhY2luZ3x8NTAsTj1uZXcgYzEoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpBLG5vZGVzZXA6SSxyYW5rc2VwOkIsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO2xldCBSO2NvbnN0IHo9cC5kYi5nZXRTdWJHcmFwaHMoKTtmb3IobGV0IGZ0PXoubGVuZ3RoLTE7ZnQ+PTA7ZnQtLSlSPXpbZnRdLHAuZGIuYWRkVmVydGV4KFIuaWQsUi50aXRsZSwiZ3JvdXAiLHZvaWQgMCxSLmNsYXNzZXMpO2NvbnN0IFc9cC5kYi5nZXRWZXJ0aWNlcygpO1V0Lndhcm4oIkdldCB2ZXJ0aWNlcyIsVyk7Y29uc3QgZXQ9cC5kYi5nZXRFZGdlcygpO2xldCBzdD0wO2ZvcihzdD16Lmxlbmd0aC0xO3N0Pj0wO3N0LS0pe1I9eltzdF0sc010KCJjbHVzdGVyIikuYXBwZW5kKCJ0ZXh0Iik7Zm9yKGxldCBmdD0wO2Z0PFIubm9kZXMubGVuZ3RoO2Z0KyspVXQud2FybigiU2V0dGluZyBzdWJncmFwaCIsUi5ub2Rlc1tmdF0scC5kYi5sb29rVXBEb21JZChSLm5vZGVzW2Z0XSkscC5kYi5sb29rVXBEb21JZChSLmlkKSksTi5zZXRQYXJlbnQocC5kYi5sb29rVXBEb21JZChSLm5vZGVzW2Z0XSkscC5kYi5sb29rVXBEb21JZChSLmlkKSl9SU50KFcsTixhLEUsXyxwKSxPTnQoZXQsTixwKTtjb25zdCBhdD1uZXcgblJlO3VSZS5hZGRUb1JlbmRlcihhdCksYXQuYXJyb3dzKCkubm9uZT1mdW5jdGlvbih1dCx2dCxYLHB0KXtjb25zdCBUdD11dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix2dCkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMCAwIEwgMCAwIHoiKTt3MyhUdCxYW3B0KyJTdHlsZSJdKX0sYXQuYXJyb3dzKCkubm9ybWFsPWZ1bmN0aW9uKHV0LHZ0KXt1dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix2dCkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3doZWFkUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9O2NvbnN0IGJ0PUUuc2VsZWN0KGBbaWQ9IiR7YX0iXWApLG10PUUuc2VsZWN0KCIjIithKyIgZyIpO2ZvcihhdChtdCxOKSxtdC5zZWxlY3RBbGwoImcubm9kZSIpLmF0dHIoInRpdGxlIixmdW5jdGlvbigpe3JldHVybiBwLmRiLmdldFRvb2x0aXAodGhpcy5pZCl9KSxwLmRiLmluZGV4Tm9kZXMoInN1YkdyYXBoIitzdCksc3Q9MDtzdDx6Lmxlbmd0aDtzdCsrKWlmKFI9eltzdF0sUi50aXRsZSE9PSJ1bmRlZmluZWQiKXtjb25zdCBmdD1fLnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK2ErJyBbaWQ9IicrcC5kYi5sb29rVXBEb21JZChSLmlkKSsnIl0gcmVjdCcpLHV0PV8ucXVlcnlTZWxlY3RvckFsbCgiIyIrYSsnIFtpZD0iJytwLmRiLmxvb2tVcERvbUlkKFIuaWQpKyciXScpLHZ0PWZ0WzBdLnguYmFzZVZhbC52YWx1ZSxYPWZ0WzBdLnkuYmFzZVZhbC52YWx1ZSxwdD1mdFswXS53aWR0aC5iYXNlVmFsLnZhbHVlLFR0PXlyKHV0WzBdKS5zZWxlY3QoIi5sYWJlbCIpO1R0LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3Z0K3B0LzJ9LCAke1grMTR9KWApLFR0LmF0dHIoImlkIixhKyJUZXh0Iik7Zm9yKGxldCBudD0wO250PFIuY2xhc3Nlcy5sZW5ndGg7bnQrKyl1dFswXS5jbGFzc0xpc3QuYWRkKFIuY2xhc3Nlc1tudF0pfWlmKCFtLmh0bWxMYWJlbHMpe2NvbnN0IGZ0PV8ucXVlcnlTZWxlY3RvckFsbCgnW2lkPSInK2ErJyJdIC5lZGdlTGFiZWwgLmxhYmVsJyk7Zm9yKGNvbnN0IHV0IG9mIGZ0KXtjb25zdCB2dD11dC5nZXRCQm94KCksWD1fLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWN0Iik7WC5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxYLnNldEF0dHJpYnV0ZSgicnkiLDApLFguc2V0QXR0cmlidXRlKCJ3aWR0aCIsdnQud2lkdGgpLFguc2V0QXR0cmlidXRlKCJoZWlnaHQiLHZ0LmhlaWdodCksdXQuaW5zZXJ0QmVmb3JlKFgsdXQuZmlyc3RDaGlsZCl9fWZUKE4sYnQsbS5kaWFncmFtUGFkZGluZyxtLnVzZU1heFdpZHRoKSxPYmplY3Qua2V5cyhXKS5mb3JFYWNoKGZ1bmN0aW9uKGZ0KXtjb25zdCB1dD1XW2Z0XTtpZih1dC5saW5rKXtjb25zdCB2dD1FLnNlbGVjdCgiIyIrYSsnIFtpZD0iJytwLmRiLmxvb2tVcERvbUlkKGZ0KSsnIl0nKTtpZih2dCl7Y29uc3QgWD1fLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhIik7WC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJjbGFzcyIsdXQuY2xhc3Nlcy5qb2luKCIgIikpLFguc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsdXQubGluayksWC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWwiLCJub29wZW5lciIpLHc9PT0ic2FuZGJveCI/WC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLCJfdG9wIik6dXQubGlua1RhcmdldCYmWC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLHV0LmxpbmtUYXJnZXQpO2NvbnN0IHB0PXZ0Lmluc2VydChmdW5jdGlvbigpe3JldHVybiBYfSwiOmZpcnN0LWNoaWxkIiksVT12dC5zZWxlY3QoIi5sYWJlbC1jb250YWluZXIiKTtVJiZwdC5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gVS5ub2RlKCl9KTtjb25zdCBUdD12dC5zZWxlY3QoIi5sYWJlbCIpO1R0JiZwdC5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gVHQubm9kZSgpfSl9fX0pfX07ZnVuY3Rpb24gUDUoaSl7dmFyIGE9e29wdGlvbnM6e2RpcmVjdGVkOmkuaXNEaXJlY3RlZCgpLG11bHRpZ3JhcGg6aS5pc011bHRpZ3JhcGgoKSxjb21wb3VuZDppLmlzQ29tcG91bmQoKX0sbm9kZXM6ZlJlKGkpLGVkZ2VzOmRSZShpKX07cmV0dXJuIEpoKGkuZ3JhcGgoKSl8fChhLnZhbHVlPWFQZShpLmdyYXBoKCkpKSxhfWZ1bmN0aW9uIGZSZShpKXtyZXR1cm4gRmYoaS5ub2RlcygpLGZ1bmN0aW9uKGEpe3ZhciBmPWkubm9kZShhKSxwPWkucGFyZW50KGEpLHc9e3Y6YX07cmV0dXJuIEpoKGYpfHwody52YWx1ZT1mKSxKaChwKXx8KHcucGFyZW50PXApLHd9KX1mdW5jdGlvbiBkUmUoaSl7cmV0dXJuIEZmKGkuZWRnZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLmVkZ2UoYSkscD17djphLnYsdzphLnd9O3JldHVybiBKaChhLm5hbWUpfHwocC5uYW1lPWEubmFtZSksSmgoZil8fChwLnZhbHVlPWYpLHB9KX1jb25zdCBnUmU9KGksYSxmLHApPT57YS5mb3JFYWNoKHc9PntwUmVbd10oaSxmLHApfSl9LHBSZT17ZXh0ZW5zaW9uOihpLGEsZik9PntVdC50cmFjZSgiTWFraW5nIG1hcmtlcnMgZm9yICIsZiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBleHRlbnNpb24gIithKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDcgTDE4LDEzIFYgMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItZXh0ZW5zaW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZXh0ZW5zaW9uICIrYSkuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIFYgMTMgTDE4LDcgWiIpfSxjb21wb3NpdGlvbjooaSxhLGYpPT57aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrYSkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZisiXyIrYSsiLWNvbXBvc2l0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY29tcG9zaXRpb24gIithKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LGFnZ3JlZ2F0aW9uOihpLGEsZik9PntpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGYrIl8iK2ErIi1hZ2dyZWdhdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIithKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItYWdncmVnYXRpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBhZ2dyZWdhdGlvbiAiK2EpLmF0dHIoInJlZlgiLDEpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKX0sZGVwZW5kZW5jeTooaSxhLGYpPT57aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItZGVwZW5kZW5jeVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZGVwZW5kZW5jeSAiK2EpLmF0dHIoInJlZlgiLDYpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gNSw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItZGVwZW5kZW5jeUVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGRlcGVuZGVuY3kgIithKS5hdHRyKCJyZWZYIiwxMykuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0sbG9sbGlwb3A6KGksYSxmKT0+e2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZisiXyIrYSsiLWxvbGxpcG9wU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBsb2xsaXBvcCAiK2EpLmF0dHIoInJlZlgiLDEzKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwidHJhbnNwYXJlbnQiKS5hdHRyKCJjeCIsNykuYXR0cigiY3kiLDcpLmF0dHIoInIiLDYpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZisiXyIrYSsiLWxvbGxpcG9wRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgbG9sbGlwb3AgIithKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwidHJhbnNwYXJlbnQiKS5hdHRyKCJjeCIsNykuYXR0cigiY3kiLDcpLmF0dHIoInIiLDYpfSxwb2ludDooaSxhLGYpPT57aS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItcG9pbnRFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2EpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw2KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSxpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGYrIl8iK2ErIi1wb2ludFN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIithKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsNC41KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCA1IEwgMTAgMTAgTCAxMCAwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LGNpcmNsZTooaSxhLGYpPT57aS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItY2lyY2xlRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIithKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsMTEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwiNSIpLmF0dHIoImN5IiwiNSIpLmF0dHIoInIiLCI1IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLGkuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZisiXyIrYSsiLWNpcmNsZVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIithKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsLTEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwiNSIpLmF0dHIoImN5IiwiNSIpLmF0dHIoInIiLCI1IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSxjcm9zczooaSxhLGYpPT57aS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItY3Jvc3NFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK2EpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwxMikuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksaS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItY3Jvc3NTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNyb3NzICIrYSkuYXR0cigidmlld0JveCIsIjAgMCAxMSAxMSIpLmF0dHIoInJlZlgiLC0xKS5hdHRyKCJyZWZZIiw1LjIpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgbCA5LDkgTSAxMCwxIGwgLTksOSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sYmFyYjooaSxhLGYpPT57aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItYmFyYkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMTQpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTksNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX19LFBOdD1nUmU7ZnVuY3Rpb24gYlJlKGksYSl7YSYmaS5hdHRyKCJzdHlsZSIsYSl9ZnVuY3Rpb24gd1JlKGkpe2NvbnN0IGE9eXIoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImZvcmVpZ25PYmplY3QiKSksZj1hLmFwcGVuZCgieGh0bWw6ZGl2IikscD1pLmxhYmVsLHc9aS5pc05vZGU/Im5vZGVMYWJlbCI6ImVkZ2VMYWJlbCI7cmV0dXJuIGYuaHRtbCgnPHNwYW4gY2xhc3M9IicrdysnIiAnKyhpLmxhYmVsU3R5bGU/J3N0eWxlPSInK2kubGFiZWxTdHlsZSsnIic6IiIpKyI+IitwKyI8L3NwYW4+IiksYlJlKGYsaS5sYWJlbFN0eWxlKSxmLnN0eWxlKCJkaXNwbGF5IiwiaW5saW5lLWJsb2NrIiksZi5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKSxmLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLGEubm9kZSgpfWNvbnN0IGdwPShpLGEsZixwKT0+e2xldCB3PWl8fCIiO2lmKHR5cGVvZiB3PT0ib2JqZWN0IiYmKHc9d1swXSksbzEoT2UoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3c9dy5yZXBsYWNlKC9cXG58XG4vZywiPGJyIC8+IiksVXQuaW5mbygidmVydGV4VGV4dCIrdyk7Y29uc3QgbT17aXNOb2RlOnAsbGFiZWw6dUYodykucmVwbGFjZSgvZmFbYmxyc10/OmZhLVtcdy1dKy9nLEU9PmA8aSBjbGFzcz0nJHtFLnJlcGxhY2UoIjoiLCIgIil9Jz48L2k+YCksbGFiZWxTdHlsZTphLnJlcGxhY2UoImZpbGw6IiwiY29sb3I6Iil9O3JldHVybiB3UmUobSl9ZWxzZXtjb25zdCBtPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7bS5zZXRBdHRyaWJ1dGUoInN0eWxlIixhLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2xldCBiPVtdO3R5cGVvZiB3PT0ic3RyaW5nIj9iPXcuc3BsaXQoL1xcbnxcbnw8YnJccypcLz8+L2dpKTpBcnJheS5pc0FycmF5KHcpP2I9dzpiPVtdO2Zvcihjb25zdCBFIG9mIGIpe2NvbnN0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7Xy5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxfLnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSxfLnNldEF0dHJpYnV0ZSgieCIsIjAiKSxmP18uc2V0QXR0cmlidXRlKCJjbGFzcyIsInRpdGxlLXJvdyIpOl8uc2V0QXR0cmlidXRlKCJjbGFzcyIsInJvdyIpLF8udGV4dENvbnRlbnQ9RS50cmltKCksbS5hcHBlbmRDaGlsZChfKX1yZXR1cm4gbX19LHZSZT17fTtmdW5jdGlvbiBtUmUoaSxhKXtjb25zdCBmPWF8fHZSZSxwPXR5cGVvZiBmLmluY2x1ZGVJbWFnZUFsdD09ImJvb2xlYW4iP2YuaW5jbHVkZUltYWdlQWx0OiEwLHc9dHlwZW9mIGYuaW5jbHVkZUh0bWw9PSJib29sZWFuIj9mLmluY2x1ZGVIdG1sOiEwO3JldHVybiBGTnQoaSxwLHcpfWZ1bmN0aW9uIEZOdChpLGEsZil7aWYoeVJlKGkpKXtpZigidmFsdWUiaW4gaSlyZXR1cm4gaS50eXBlPT09Imh0bWwiJiYhZj8iIjppLnZhbHVlO2lmKGEmJiJhbHQiaW4gaSYmaS5hbHQpcmV0dXJuIGkuYWx0O2lmKCJjaGlsZHJlbiJpbiBpKXJldHVybiBOTnQoaS5jaGlsZHJlbixhLGYpfXJldHVybiBBcnJheS5pc0FycmF5KGkpP05OdChpLGEsZik6IiJ9ZnVuY3Rpb24gTk50KGksYSxmKXtjb25zdCBwPVtdO2xldCB3PS0xO2Zvcig7Kyt3PGkubGVuZ3RoOylwW3ddPUZOdChpW3ddLGEsZik7cmV0dXJuIHAuam9pbigiIil9ZnVuY3Rpb24geVJlKGkpe3JldHVybiEhKGkmJnR5cGVvZiBpPT0ib2JqZWN0Iil9ZnVuY3Rpb24gbTMoaSxhLGYscCl7Y29uc3Qgdz1pLmxlbmd0aDtsZXQgbT0wLGI7aWYoYTwwP2E9LWE+dz8wOncrYTphPWE+dz93OmEsZj1mPjA/ZjowLHAubGVuZ3RoPDFlNCliPUFycmF5LmZyb20ocCksYi51bnNoaWZ0KGEsZiksaS5zcGxpY2UoLi4uYik7ZWxzZSBmb3IoZiYmaS5zcGxpY2UoYSxmKTttPHAubGVuZ3RoOyliPXAuc2xpY2UobSxtKzFlNCksYi51bnNoaWZ0KGEsMCksaS5zcGxpY2UoLi4uYiksbSs9MWU0LGErPTFlNH1mdW5jdGlvbiBzdyhpLGEpe3JldHVybiBpLmxlbmd0aD4wPyhtMyhpLGkubGVuZ3RoLDAsYSksaSk6YX1jb25zdCBCTnQ9e30uaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24geFJlKGkpe2NvbnN0IGE9e307bGV0IGY9LTE7Zm9yKDsrK2Y8aS5sZW5ndGg7KWtSZShhLGlbZl0pO3JldHVybiBhfWZ1bmN0aW9uIGtSZShpLGEpe2xldCBmO2ZvcihmIGluIGEpe2NvbnN0IHc9KEJOdC5jYWxsKGksZik/aVtmXTp2b2lkIDApfHwoaVtmXT17fSksbT1hW2ZdO2xldCBiO2lmKG0pZm9yKGIgaW4gbSl7Qk50LmNhbGwodyxiKXx8KHdbYl09W10pO2NvbnN0IEU9bVtiXTtFUmUod1tiXSxBcnJheS5pc0FycmF5KEUpP0U6RT9bRV06W10pfX19ZnVuY3Rpb24gRVJlKGksYSl7bGV0IGY9LTE7Y29uc3QgcD1bXTtmb3IoOysrZjxhLmxlbmd0aDspKGFbZl0uYWRkPT09ImFmdGVyIj9pOnApLnB1c2goYVtmXSk7bTMoaSwwLDAscCl9Y29uc3QgVFJlPS9bIS1cLzotQFxbLWBcey1+XHhBMVx4QTdceEFCXHhCNlx4QjdceEJCXHhCRlx1MDM3RVx1MDM4N1x1MDU1QS1cdTA1NUZcdTA1ODlcdTA1OEFcdTA1QkVcdTA1QzBcdTA1QzNcdTA1QzZcdTA1RjNcdTA1RjRcdTA2MDlcdTA2MEFcdTA2MENcdTA2MERcdTA2MUJcdTA2MUQtXHUwNjFGXHUwNjZBLVx1MDY2RFx1MDZENFx1MDcwMC1cdTA3MERcdTA3RjctXHUwN0Y5XHUwODMwLVx1MDgzRVx1MDg1RVx1MDk2NFx1MDk2NVx1MDk3MFx1MDlGRFx1MEE3Nlx1MEFGMFx1MEM3N1x1MEM4NFx1MERGNFx1MEU0Rlx1MEU1QVx1MEU1Qlx1MEYwNC1cdTBGMTJcdTBGMTRcdTBGM0EtXHUwRjNEXHUwRjg1XHUwRkQwLVx1MEZENFx1MEZEOVx1MEZEQVx1MTA0QS1cdTEwNEZcdTEwRkJcdTEzNjAtXHUxMzY4XHUxNDAwXHUxNjZFXHUxNjlCXHUxNjlDXHUxNkVCLVx1MTZFRFx1MTczNVx1MTczNlx1MTdENC1cdTE3RDZcdTE3RDgtXHUxN0RBXHUxODAwLVx1MTgwQVx1MTk0NFx1MTk0NVx1MUExRVx1MUExRlx1MUFBMC1cdTFBQTZcdTFBQTgtXHUxQUFEXHUxQjVBLVx1MUI2MFx1MUI3RFx1MUI3RVx1MUJGQy1cdTFCRkZcdTFDM0ItXHUxQzNGXHUxQzdFXHUxQzdGXHUxQ0MwLVx1MUNDN1x1MUNEM1x1MjAxMC1cdTIwMjdcdTIwMzAtXHUyMDQzXHUyMDQ1LVx1MjA1MVx1MjA1My1cdTIwNUVcdTIwN0RcdTIwN0VcdTIwOERcdTIwOEVcdTIzMDgtXHUyMzBCXHUyMzI5XHUyMzJBXHUyNzY4LVx1Mjc3NVx1MjdDNVx1MjdDNlx1MjdFNi1cdTI3RUZcdTI5ODMtXHUyOTk4XHUyOUQ4LVx1MjlEQlx1MjlGQ1x1MjlGRFx1MkNGOS1cdTJDRkNcdTJDRkVcdTJDRkZcdTJENzBcdTJFMDAtXHUyRTJFXHUyRTMwLVx1MkU0Rlx1MkU1Mi1cdTJFNURcdTMwMDEtXHUzMDAzXHUzMDA4LVx1MzAxMVx1MzAxNC1cdTMwMUZcdTMwMzBcdTMwM0RcdTMwQTBcdTMwRkJcdUE0RkVcdUE0RkZcdUE2MEQtXHVBNjBGXHVBNjczXHVBNjdFXHVBNkYyLVx1QTZGN1x1QTg3NC1cdUE4NzdcdUE4Q0VcdUE4Q0ZcdUE4RjgtXHVBOEZBXHVBOEZDXHVBOTJFXHVBOTJGXHVBOTVGXHVBOUMxLVx1QTlDRFx1QTlERVx1QTlERlx1QUE1Qy1cdUFBNUZcdUFBREVcdUFBREZcdUFBRjBcdUFBRjFcdUFCRUJcdUZEM0VcdUZEM0ZcdUZFMTAtXHVGRTE5XHVGRTMwLVx1RkU1Mlx1RkU1NC1cdUZFNjFcdUZFNjNcdUZFNjhcdUZFNkFcdUZFNkJcdUZGMDEtXHVGRjAzXHVGRjA1LVx1RkYwQVx1RkYwQy1cdUZGMEZcdUZGMUFcdUZGMUJcdUZGMUZcdUZGMjBcdUZGM0ItXHVGRjNEXHVGRjNGXHVGRjVCXHVGRjVEXHVGRjVGLVx1RkY2NV0vLHkzPWJrKC9bQS1aYS16XS8pLGxtPWJrKC9bXGRBLVphLXpdLyksQ1JlPWJrKC9bIy0nKitcLS05PT9BLVpeLX5dLyk7ZnVuY3Rpb24gVDB0KGkpe3JldHVybiBpIT09bnVsbCYmKGk8MzJ8fGk9PT0xMjcpfWNvbnN0IEMwdD1iaygvXGQvKSxfUmU9YmsoL1tcZEEtRmEtZl0vKSxTUmU9YmsoL1shLS86LUBbLWB7LX5dLyk7ZnVuY3Rpb24geGEoaSl7cmV0dXJuIGkhPT1udWxsJiZpPC0yfWZ1bmN0aW9uIHBwKGkpe3JldHVybiBpIT09bnVsbCYmKGk8MHx8aT09PTMyKX1mdW5jdGlvbiBXYyhpKXtyZXR1cm4gaT09PS0yfHxpPT09LTF8fGk9PT0zMn1jb25zdCBBUmU9YmsoVFJlKSxMUmU9YmsoL1xzLyk7ZnVuY3Rpb24gYmsoaSl7cmV0dXJuIGE7ZnVuY3Rpb24gYShmKXtyZXR1cm4gZiE9PW51bGwmJmkudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGYpKX19ZnVuY3Rpb24gaWwoaSxhLGYscCl7Y29uc3Qgdz1wP3AtMTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7bGV0IG09MDtyZXR1cm4gYjtmdW5jdGlvbiBiKF8pe3JldHVybiBXYyhfKT8oaS5lbnRlcihmKSxFKF8pKTphKF8pfWZ1bmN0aW9uIEUoXyl7cmV0dXJuIFdjKF8pJiZtKys8dz8oaS5jb25zdW1lKF8pLEUpOihpLmV4aXQoZiksYShfKSl9fWNvbnN0IE1SZT17dG9rZW5pemU6RFJlfTtmdW5jdGlvbiBEUmUoaSl7Y29uc3QgYT1pLmF0dGVtcHQodGhpcy5wYXJzZXIuY29uc3RydWN0cy5jb250ZW50SW5pdGlhbCxwLHcpO2xldCBmO3JldHVybiBhO2Z1bmN0aW9uIHAoRSl7aWYoRT09PW51bGwpe2kuY29uc3VtZShFKTtyZXR1cm59cmV0dXJuIGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUoRSksaS5leGl0KCJsaW5lRW5kaW5nIiksaWwoaSxhLCJsaW5lUHJlZml4Iil9ZnVuY3Rpb24gdyhFKXtyZXR1cm4gaS5lbnRlcigicGFyYWdyYXBoIiksbShFKX1mdW5jdGlvbiBtKEUpe2NvbnN0IF89aS5lbnRlcigiY2h1bmtUZXh0Iix7Y29udGVudFR5cGU6InRleHQiLHByZXZpb3VzOmZ9KTtyZXR1cm4gZiYmKGYubmV4dD1fKSxmPV8sYihFKX1mdW5jdGlvbiBiKEUpe2lmKEU9PT1udWxsKXtpLmV4aXQoImNodW5rVGV4dCIpLGkuZXhpdCgicGFyYWdyYXBoIiksaS5jb25zdW1lKEUpO3JldHVybn1yZXR1cm4geGEoRSk/KGkuY29uc3VtZShFKSxpLmV4aXQoImNodW5rVGV4dCIpLG0pOihpLmNvbnN1bWUoRSksYil9fWNvbnN0IElSZT17dG9rZW5pemU6T1JlfSxSTnQ9e3Rva2VuaXplOlBSZX07ZnVuY3Rpb24gT1JlKGkpe2NvbnN0IGE9dGhpcyxmPVtdO2xldCBwPTAsdyxtLGI7cmV0dXJuIEU7ZnVuY3Rpb24gRShidCl7aWYocDxmLmxlbmd0aCl7Y29uc3QgbXQ9ZltwXTtyZXR1cm4gYS5jb250YWluZXJTdGF0ZT1tdFsxXSxpLmF0dGVtcHQobXRbMF0uY29udGludWF0aW9uLF8sQSkoYnQpfXJldHVybiBBKGJ0KX1mdW5jdGlvbiBfKGJ0KXtpZihwKyssYS5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93KXthLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3c9dm9pZCAwLHcmJmF0KCk7Y29uc3QgbXQ9YS5ldmVudHMubGVuZ3RoO2xldCB5dD1tdCxmdDtmb3IoO3l0LS07KWlmKGEuZXZlbnRzW3l0XVswXT09PSJleGl0IiYmYS5ldmVudHNbeXRdWzFdLnR5cGU9PT0iY2h1bmtGbG93Iil7ZnQ9YS5ldmVudHNbeXRdWzFdLmVuZDticmVha31zdChwKTtsZXQgdXQ9bXQ7Zm9yKDt1dDxhLmV2ZW50cy5sZW5ndGg7KWEuZXZlbnRzW3V0XVsxXS5lbmQ9T2JqZWN0LmFzc2lnbih7fSxmdCksdXQrKztyZXR1cm4gbTMoYS5ldmVudHMseXQrMSwwLGEuZXZlbnRzLnNsaWNlKG10KSksYS5ldmVudHMubGVuZ3RoPXV0LEEoYnQpfXJldHVybiBFKGJ0KX1mdW5jdGlvbiBBKGJ0KXtpZihwPT09Zi5sZW5ndGgpe2lmKCF3KXJldHVybiBOKGJ0KTtpZih3LmN1cnJlbnRDb25zdHJ1Y3QmJncuY3VycmVudENvbnN0cnVjdC5jb25jcmV0ZSlyZXR1cm4geihidCk7YS5pbnRlcnJ1cHQ9ISEody5jdXJyZW50Q29uc3RydWN0JiYhdy5fZ2ZtVGFibGVEeW5hbWljSW50ZXJydXB0SGFjayl9cmV0dXJuIGEuY29udGFpbmVyU3RhdGU9e30saS5jaGVjayhSTnQsSSxCKShidCl9ZnVuY3Rpb24gSShidCl7cmV0dXJuIHcmJmF0KCksc3QocCksTihidCl9ZnVuY3Rpb24gQihidCl7cmV0dXJuIGEucGFyc2VyLmxhenlbYS5ub3coKS5saW5lXT1wIT09Zi5sZW5ndGgsYj1hLm5vdygpLm9mZnNldCx6KGJ0KX1mdW5jdGlvbiBOKGJ0KXtyZXR1cm4gYS5jb250YWluZXJTdGF0ZT17fSxpLmF0dGVtcHQoUk50LFIseikoYnQpfWZ1bmN0aW9uIFIoYnQpe3JldHVybiBwKyssZi5wdXNoKFthLmN1cnJlbnRDb25zdHJ1Y3QsYS5jb250YWluZXJTdGF0ZV0pLE4oYnQpfWZ1bmN0aW9uIHooYnQpe2lmKGJ0PT09bnVsbCl7dyYmYXQoKSxzdCgwKSxpLmNvbnN1bWUoYnQpO3JldHVybn1yZXR1cm4gdz13fHxhLnBhcnNlci5mbG93KGEubm93KCkpLGkuZW50ZXIoImNodW5rRmxvdyIse2NvbnRlbnRUeXBlOiJmbG93IixwcmV2aW91czptLF90b2tlbml6ZXI6d30pLFcoYnQpfWZ1bmN0aW9uIFcoYnQpe2lmKGJ0PT09bnVsbCl7ZXQoaS5leGl0KCJjaHVua0Zsb3ciKSwhMCksc3QoMCksaS5jb25zdW1lKGJ0KTtyZXR1cm59cmV0dXJuIHhhKGJ0KT8oaS5jb25zdW1lKGJ0KSxldChpLmV4aXQoImNodW5rRmxvdyIpKSxwPTAsYS5pbnRlcnJ1cHQ9dm9pZCAwLEUpOihpLmNvbnN1bWUoYnQpLFcpfWZ1bmN0aW9uIGV0KGJ0LG10KXtjb25zdCB5dD1hLnNsaWNlU3RyZWFtKGJ0KTtpZihtdCYmeXQucHVzaChudWxsKSxidC5wcmV2aW91cz1tLG0mJihtLm5leHQ9YnQpLG09YnQsdy5kZWZpbmVTa2lwKGJ0LnN0YXJ0KSx3LndyaXRlKHl0KSxhLnBhcnNlci5sYXp5W2J0LnN0YXJ0LmxpbmVdKXtsZXQgZnQ9dy5ldmVudHMubGVuZ3RoO2Zvcig7ZnQtLTspaWYody5ldmVudHNbZnRdWzFdLnN0YXJ0Lm9mZnNldDxiJiYoIXcuZXZlbnRzW2Z0XVsxXS5lbmR8fHcuZXZlbnRzW2Z0XVsxXS5lbmQub2Zmc2V0PmIpKXJldHVybjtjb25zdCB1dD1hLmV2ZW50cy5sZW5ndGg7bGV0IHZ0PXV0LFgscHQ7Zm9yKDt2dC0tOylpZihhLmV2ZW50c1t2dF1bMF09PT0iZXhpdCImJmEuZXZlbnRzW3Z0XVsxXS50eXBlPT09ImNodW5rRmxvdyIpe2lmKFgpe3B0PWEuZXZlbnRzW3Z0XVsxXS5lbmQ7YnJlYWt9WD0hMH1mb3Ioc3QocCksZnQ9dXQ7ZnQ8YS5ldmVudHMubGVuZ3RoOylhLmV2ZW50c1tmdF1bMV0uZW5kPU9iamVjdC5hc3NpZ24oe30scHQpLGZ0Kys7bTMoYS5ldmVudHMsdnQrMSwwLGEuZXZlbnRzLnNsaWNlKHV0KSksYS5ldmVudHMubGVuZ3RoPWZ0fX1mdW5jdGlvbiBzdChidCl7bGV0IG10PWYubGVuZ3RoO2Zvcig7bXQtLSA+YnQ7KXtjb25zdCB5dD1mW210XTthLmNvbnRhaW5lclN0YXRlPXl0WzFdLHl0WzBdLmV4aXQuY2FsbChhLGkpfWYubGVuZ3RoPWJ0fWZ1bmN0aW9uIGF0KCl7dy53cml0ZShbbnVsbF0pLG09dm9pZCAwLHc9dm9pZCAwLGEuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdz12b2lkIDB9fWZ1bmN0aW9uIFBSZShpLGEsZil7cmV0dXJuIGlsKGksaS5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZG9jdW1lbnQsYSxmKSwibGluZVByZWZpeCIsdGhpcy5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KX1mdW5jdGlvbiBqTnQoaSl7aWYoaT09PW51bGx8fHBwKGkpfHxMUmUoaSkpcmV0dXJuIDE7aWYoQVJlKGkpKXJldHVybiAyfWZ1bmN0aW9uIF8wdChpLGEsZil7Y29uc3QgcD1bXTtsZXQgdz0tMTtmb3IoOysrdzxpLmxlbmd0aDspe2NvbnN0IG09aVt3XS5yZXNvbHZlQWxsO20mJiFwLmluY2x1ZGVzKG0pJiYoYT1tKGEsZikscC5wdXNoKG0pKX1yZXR1cm4gYX1jb25zdCBTMHQ9e25hbWU6ImF0dGVudGlvbiIsdG9rZW5pemU6TlJlLHJlc29sdmVBbGw6RlJlfTtmdW5jdGlvbiBGUmUoaSxhKXtsZXQgZj0tMSxwLHcsbSxiLEUsXyxBLEk7Zm9yKDsrK2Y8aS5sZW5ndGg7KWlmKGlbZl1bMF09PT0iZW50ZXIiJiZpW2ZdWzFdLnR5cGU9PT0iYXR0ZW50aW9uU2VxdWVuY2UiJiZpW2ZdWzFdLl9jbG9zZSl7Zm9yKHA9ZjtwLS07KWlmKGlbcF1bMF09PT0iZXhpdCImJmlbcF1bMV0udHlwZT09PSJhdHRlbnRpb25TZXF1ZW5jZSImJmlbcF1bMV0uX29wZW4mJmEuc2xpY2VTZXJpYWxpemUoaVtwXVsxXSkuY2hhckNvZGVBdCgwKT09PWEuc2xpY2VTZXJpYWxpemUoaVtmXVsxXSkuY2hhckNvZGVBdCgwKSl7aWYoKGlbcF1bMV0uX2Nsb3NlfHxpW2ZdWzFdLl9vcGVuKSYmKGlbZl1bMV0uZW5kLm9mZnNldC1pW2ZdWzFdLnN0YXJ0Lm9mZnNldCklMyYmISgoaVtwXVsxXS5lbmQub2Zmc2V0LWlbcF1bMV0uc3RhcnQub2Zmc2V0K2lbZl1bMV0uZW5kLm9mZnNldC1pW2ZdWzFdLnN0YXJ0Lm9mZnNldCklMykpY29udGludWU7Xz1pW3BdWzFdLmVuZC5vZmZzZXQtaVtwXVsxXS5zdGFydC5vZmZzZXQ+MSYmaVtmXVsxXS5lbmQub2Zmc2V0LWlbZl1bMV0uc3RhcnQub2Zmc2V0PjE/MjoxO2NvbnN0IEI9T2JqZWN0LmFzc2lnbih7fSxpW3BdWzFdLmVuZCksTj1PYmplY3QuYXNzaWduKHt9LGlbZl1bMV0uc3RhcnQpOyROdChCLC1fKSwkTnQoTixfKSxiPXt0eXBlOl8+MT8ic3Ryb25nU2VxdWVuY2UiOiJlbXBoYXNpc1NlcXVlbmNlIixzdGFydDpCLGVuZDpPYmplY3QuYXNzaWduKHt9LGlbcF1bMV0uZW5kKX0sRT17dHlwZTpfPjE/InN0cm9uZ1NlcXVlbmNlIjoiZW1waGFzaXNTZXF1ZW5jZSIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxpW2ZdWzFdLnN0YXJ0KSxlbmQ6Tn0sbT17dHlwZTpfPjE/InN0cm9uZ1RleHQiOiJlbXBoYXNpc1RleHQiLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30saVtwXVsxXS5lbmQpLGVuZDpPYmplY3QuYXNzaWduKHt9LGlbZl1bMV0uc3RhcnQpfSx3PXt0eXBlOl8+MT8ic3Ryb25nIjoiZW1waGFzaXMiLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30sYi5zdGFydCksZW5kOk9iamVjdC5hc3NpZ24oe30sRS5lbmQpfSxpW3BdWzFdLmVuZD1PYmplY3QuYXNzaWduKHt9LGIuc3RhcnQpLGlbZl1bMV0uc3RhcnQ9T2JqZWN0LmFzc2lnbih7fSxFLmVuZCksQT1bXSxpW3BdWzFdLmVuZC5vZmZzZXQtaVtwXVsxXS5zdGFydC5vZmZzZXQmJihBPXN3KEEsW1siZW50ZXIiLGlbcF1bMV0sYV0sWyJleGl0IixpW3BdWzFdLGFdXSkpLEE9c3coQSxbWyJlbnRlciIsdyxhXSxbImVudGVyIixiLGFdLFsiZXhpdCIsYixhXSxbImVudGVyIixtLGFdXSksQT1zdyhBLF8wdChhLnBhcnNlci5jb25zdHJ1Y3RzLmluc2lkZVNwYW4ubnVsbCxpLnNsaWNlKHArMSxmKSxhKSksQT1zdyhBLFtbImV4aXQiLG0sYV0sWyJlbnRlciIsRSxhXSxbImV4aXQiLEUsYV0sWyJleGl0Iix3LGFdXSksaVtmXVsxXS5lbmQub2Zmc2V0LWlbZl1bMV0uc3RhcnQub2Zmc2V0PyhJPTIsQT1zdyhBLFtbImVudGVyIixpW2ZdWzFdLGFdLFsiZXhpdCIsaVtmXVsxXSxhXV0pKTpJPTAsbTMoaSxwLTEsZi1wKzMsQSksZj1wK0EubGVuZ3RoLUktMjticmVha319Zm9yKGY9LTE7KytmPGkubGVuZ3RoOylpW2ZdWzFdLnR5cGU9PT0iYXR0ZW50aW9uU2VxdWVuY2UiJiYoaVtmXVsxXS50eXBlPSJkYXRhIik7cmV0dXJuIGl9ZnVuY3Rpb24gTlJlKGksYSl7Y29uc3QgZj10aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmF0dGVudGlvbk1hcmtlcnMubnVsbCxwPXRoaXMucHJldmlvdXMsdz1qTnQocCk7bGV0IG07cmV0dXJuIGI7ZnVuY3Rpb24gYihfKXtyZXR1cm4gbT1fLGkuZW50ZXIoImF0dGVudGlvblNlcXVlbmNlIiksRShfKX1mdW5jdGlvbiBFKF8pe2lmKF89PT1tKXJldHVybiBpLmNvbnN1bWUoXyksRTtjb25zdCBBPWkuZXhpdCgiYXR0ZW50aW9uU2VxdWVuY2UiKSxJPWpOdChfKSxCPSFJfHxJPT09MiYmd3x8Zi5pbmNsdWRlcyhfKSxOPSF3fHx3PT09MiYmSXx8Zi5pbmNsdWRlcyhwKTtyZXR1cm4gQS5fb3Blbj0hIShtPT09NDI/QjpCJiYod3x8IU4pKSxBLl9jbG9zZT0hIShtPT09NDI/TjpOJiYoSXx8IUIpKSxhKF8pfX1mdW5jdGlvbiAkTnQoaSxhKXtpLmNvbHVtbis9YSxpLm9mZnNldCs9YSxpLl9idWZmZXJJbmRleCs9YX1jb25zdCBCUmU9e25hbWU6ImF1dG9saW5rIix0b2tlbml6ZTpSUmV9O2Z1bmN0aW9uIFJSZShpLGEsZil7bGV0IHA9MDtyZXR1cm4gdztmdW5jdGlvbiB3KFIpe3JldHVybiBpLmVudGVyKCJhdXRvbGluayIpLGkuZW50ZXIoImF1dG9saW5rTWFya2VyIiksaS5jb25zdW1lKFIpLGkuZXhpdCgiYXV0b2xpbmtNYXJrZXIiKSxpLmVudGVyKCJhdXRvbGlua1Byb3RvY29sIiksbX1mdW5jdGlvbiBtKFIpe3JldHVybiB5MyhSKT8oaS5jb25zdW1lKFIpLGIpOkEoUil9ZnVuY3Rpb24gYihSKXtyZXR1cm4gUj09PTQzfHxSPT09NDV8fFI9PT00Nnx8bG0oUik/KHA9MSxFKFIpKTpBKFIpfWZ1bmN0aW9uIEUoUil7cmV0dXJuIFI9PT01OD8oaS5jb25zdW1lKFIpLHA9MCxfKTooUj09PTQzfHxSPT09NDV8fFI9PT00Nnx8bG0oUikpJiZwKys8MzI/KGkuY29uc3VtZShSKSxFKToocD0wLEEoUikpfWZ1bmN0aW9uIF8oUil7cmV0dXJuIFI9PT02Mj8oaS5leGl0KCJhdXRvbGlua1Byb3RvY29sIiksaS5lbnRlcigiYXV0b2xpbmtNYXJrZXIiKSxpLmNvbnN1bWUoUiksaS5leGl0KCJhdXRvbGlua01hcmtlciIpLGkuZXhpdCgiYXV0b2xpbmsiKSxhKTpSPT09bnVsbHx8Uj09PTMyfHxSPT09NjB8fFQwdChSKT9mKFIpOihpLmNvbnN1bWUoUiksXyl9ZnVuY3Rpb24gQShSKXtyZXR1cm4gUj09PTY0PyhpLmNvbnN1bWUoUiksSSk6Q1JlKFIpPyhpLmNvbnN1bWUoUiksQSk6ZihSKX1mdW5jdGlvbiBJKFIpe3JldHVybiBsbShSKT9CKFIpOmYoUil9ZnVuY3Rpb24gQihSKXtyZXR1cm4gUj09PTQ2PyhpLmNvbnN1bWUoUikscD0wLEkpOlI9PT02Mj8oaS5leGl0KCJhdXRvbGlua1Byb3RvY29sIikudHlwZT0iYXV0b2xpbmtFbWFpbCIsaS5lbnRlcigiYXV0b2xpbmtNYXJrZXIiKSxpLmNvbnN1bWUoUiksaS5leGl0KCJhdXRvbGlua01hcmtlciIpLGkuZXhpdCgiYXV0b2xpbmsiKSxhKTpOKFIpfWZ1bmN0aW9uIE4oUil7aWYoKFI9PT00NXx8bG0oUikpJiZwKys8NjMpe2NvbnN0IHo9Uj09PTQ1P046QjtyZXR1cm4gaS5jb25zdW1lKFIpLHp9cmV0dXJuIGYoUil9fWNvbnN0IHlZPXt0b2tlbml6ZTpqUmUscGFydGlhbDohMH07ZnVuY3Rpb24galJlKGksYSxmKXtyZXR1cm4gcDtmdW5jdGlvbiBwKG0pe3JldHVybiBXYyhtKT9pbChpLHcsImxpbmVQcmVmaXgiKShtKTp3KG0pfWZ1bmN0aW9uIHcobSl7cmV0dXJuIG09PT1udWxsfHx4YShtKT9hKG0pOmYobSl9fWNvbnN0IHpOdD17bmFtZToiYmxvY2tRdW90ZSIsdG9rZW5pemU6JFJlLGNvbnRpbnVhdGlvbjp7dG9rZW5pemU6elJlfSxleGl0OnFSZX07ZnVuY3Rpb24gJFJlKGksYSxmKXtjb25zdCBwPXRoaXM7cmV0dXJuIHc7ZnVuY3Rpb24gdyhiKXtpZihiPT09NjIpe2NvbnN0IEU9cC5jb250YWluZXJTdGF0ZTtyZXR1cm4gRS5vcGVufHwoaS5lbnRlcigiYmxvY2tRdW90ZSIse19jb250YWluZXI6ITB9KSxFLm9wZW49ITApLGkuZW50ZXIoImJsb2NrUXVvdGVQcmVmaXgiKSxpLmVudGVyKCJibG9ja1F1b3RlTWFya2VyIiksaS5jb25zdW1lKGIpLGkuZXhpdCgiYmxvY2tRdW90ZU1hcmtlciIpLG19cmV0dXJuIGYoYil9ZnVuY3Rpb24gbShiKXtyZXR1cm4gV2MoYik/KGkuZW50ZXIoImJsb2NrUXVvdGVQcmVmaXhXaGl0ZXNwYWNlIiksaS5jb25zdW1lKGIpLGkuZXhpdCgiYmxvY2tRdW90ZVByZWZpeFdoaXRlc3BhY2UiKSxpLmV4aXQoImJsb2NrUXVvdGVQcmVmaXgiKSxhKTooaS5leGl0KCJibG9ja1F1b3RlUHJlZml4IiksYShiKSl9fWZ1bmN0aW9uIHpSZShpLGEsZil7Y29uc3QgcD10aGlzO3JldHVybiB3O2Z1bmN0aW9uIHcoYil7cmV0dXJuIFdjKGIpP2lsKGksbSwibGluZVByZWZpeCIscC5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KShiKTptKGIpfWZ1bmN0aW9uIG0oYil7cmV0dXJuIGkuYXR0ZW1wdCh6TnQsYSxmKShiKX19ZnVuY3Rpb24gcVJlKGkpe2kuZXhpdCgiYmxvY2tRdW90ZSIpfWNvbnN0IHFOdD17bmFtZToiY2hhcmFjdGVyRXNjYXBlIix0b2tlbml6ZTpIUmV9O2Z1bmN0aW9uIEhSZShpLGEsZil7cmV0dXJuIHA7ZnVuY3Rpb24gcChtKXtyZXR1cm4gaS5lbnRlcigiY2hhcmFjdGVyRXNjYXBlIiksaS5lbnRlcigiZXNjYXBlTWFya2VyIiksaS5jb25zdW1lKG0pLGkuZXhpdCgiZXNjYXBlTWFya2VyIiksd31mdW5jdGlvbiB3KG0pe3JldHVybiBTUmUobSk/KGkuZW50ZXIoImNoYXJhY3RlckVzY2FwZVZhbHVlIiksaS5jb25zdW1lKG0pLGkuZXhpdCgiY2hhcmFjdGVyRXNjYXBlVmFsdWUiKSxpLmV4aXQoImNoYXJhY3RlckVzY2FwZSIpLGEpOmYobSl9fWNvbnN0IEhOdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpIik7ZnVuY3Rpb24gQTB0KGkpe2NvbnN0IGE9IiYiK2krIjsiO0hOdC5pbm5lckhUTUw9YTtjb25zdCBmPUhOdC50ZXh0Q29udGVudDtyZXR1cm4gZi5jaGFyQ29kZUF0KGYubGVuZ3RoLTEpPT09NTkmJmkhPT0ic2VtaSJ8fGY9PT1hPyExOmZ9Y29uc3QgVk50PXtuYW1lOiJjaGFyYWN0ZXJSZWZlcmVuY2UiLHRva2VuaXplOlZSZX07ZnVuY3Rpb24gVlJlKGksYSxmKXtjb25zdCBwPXRoaXM7bGV0IHc9MCxtLGI7cmV0dXJuIEU7ZnVuY3Rpb24gRShCKXtyZXR1cm4gaS5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlIiksaS5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyIiksaS5jb25zdW1lKEIpLGkuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyIiksX31mdW5jdGlvbiBfKEIpe3JldHVybiBCPT09MzU/KGkuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMiKSxpLmNvbnN1bWUoQiksaS5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljIiksQSk6KGkuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZVZhbHVlIiksbT0zMSxiPWxtLEkoQikpfWZ1bmN0aW9uIEEoQil7cmV0dXJuIEI9PT04OHx8Qj09PTEyMD8oaS5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWwiKSxpLmNvbnN1bWUoQiksaS5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJIZXhhZGVjaW1hbCIpLGkuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZVZhbHVlIiksbT02LGI9X1JlLEkpOihpLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZSIpLG09NyxiPUMwdCxJKEIpKX1mdW5jdGlvbiBJKEIpe2lmKEI9PT01OSYmdyl7Y29uc3QgTj1pLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZVZhbHVlIik7cmV0dXJuIGI9PT1sbSYmIUEwdChwLnNsaWNlU2VyaWFsaXplKE4pKT9mKEIpOihpLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXIiKSxpLmNvbnN1bWUoQiksaS5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXIiKSxpLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZSIpLGEpfXJldHVybiBiKEIpJiZ3Kys8bT8oaS5jb25zdW1lKEIpLEkpOmYoQil9fWNvbnN0IEdOdD17dG9rZW5pemU6VVJlLHBhcnRpYWw6ITB9LFVOdD17bmFtZToiY29kZUZlbmNlZCIsdG9rZW5pemU6R1JlLGNvbmNyZXRlOiEwfTtmdW5jdGlvbiBHUmUoaSxhLGYpe2NvbnN0IHA9dGhpcyx3PXt0b2tlbml6ZTp5dCxwYXJ0aWFsOiEwfTtsZXQgbT0wLGI9MCxFO3JldHVybiBfO2Z1bmN0aW9uIF8oZnQpe3JldHVybiBBKGZ0KX1mdW5jdGlvbiBBKGZ0KXtjb25zdCB1dD1wLmV2ZW50c1twLmV2ZW50cy5sZW5ndGgtMV07cmV0dXJuIG09dXQmJnV0WzFdLnR5cGU9PT0ibGluZVByZWZpeCI/dXRbMl0uc2xpY2VTZXJpYWxpemUodXRbMV0sITApLmxlbmd0aDowLEU9ZnQsaS5lbnRlcigiY29kZUZlbmNlZCIpLGkuZW50ZXIoImNvZGVGZW5jZWRGZW5jZSIpLGkuZW50ZXIoImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlIiksSShmdCl9ZnVuY3Rpb24gSShmdCl7cmV0dXJuIGZ0PT09RT8oYisrLGkuY29uc3VtZShmdCksSSk6YjwzP2YoZnQpOihpLmV4aXQoImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlIiksV2MoZnQpP2lsKGksQiwid2hpdGVzcGFjZSIpKGZ0KTpCKGZ0KSl9ZnVuY3Rpb24gQihmdCl7cmV0dXJuIGZ0PT09bnVsbHx8eGEoZnQpPyhpLmV4aXQoImNvZGVGZW5jZWRGZW5jZSIpLHAuaW50ZXJydXB0P2EoZnQpOmkuY2hlY2soR050LFcsbXQpKGZ0KSk6KGkuZW50ZXIoImNvZGVGZW5jZWRGZW5jZUluZm8iKSxpLmVudGVyKCJjaHVua1N0cmluZyIse2NvbnRlbnRUeXBlOiJzdHJpbmcifSksTihmdCkpfWZ1bmN0aW9uIE4oZnQpe3JldHVybiBmdD09PW51bGx8fHhhKGZ0KT8oaS5leGl0KCJjaHVua1N0cmluZyIpLGkuZXhpdCgiY29kZUZlbmNlZEZlbmNlSW5mbyIpLEIoZnQpKTpXYyhmdCk/KGkuZXhpdCgiY2h1bmtTdHJpbmciKSxpLmV4aXQoImNvZGVGZW5jZWRGZW5jZUluZm8iKSxpbChpLFIsIndoaXRlc3BhY2UiKShmdCkpOmZ0PT09OTYmJmZ0PT09RT9mKGZ0KTooaS5jb25zdW1lKGZ0KSxOKX1mdW5jdGlvbiBSKGZ0KXtyZXR1cm4gZnQ9PT1udWxsfHx4YShmdCk/QihmdCk6KGkuZW50ZXIoImNvZGVGZW5jZWRGZW5jZU1ldGEiKSxpLmVudGVyKCJjaHVua1N0cmluZyIse2NvbnRlbnRUeXBlOiJzdHJpbmcifSkseihmdCkpfWZ1bmN0aW9uIHooZnQpe3JldHVybiBmdD09PW51bGx8fHhhKGZ0KT8oaS5leGl0KCJjaHVua1N0cmluZyIpLGkuZXhpdCgiY29kZUZlbmNlZEZlbmNlTWV0YSIpLEIoZnQpKTpmdD09PTk2JiZmdD09PUU/ZihmdCk6KGkuY29uc3VtZShmdCkseil9ZnVuY3Rpb24gVyhmdCl7cmV0dXJuIGkuYXR0ZW1wdCh3LG10LGV0KShmdCl9ZnVuY3Rpb24gZXQoZnQpe3JldHVybiBpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKGZ0KSxpLmV4aXQoImxpbmVFbmRpbmciKSxzdH1mdW5jdGlvbiBzdChmdCl7cmV0dXJuIG0+MCYmV2MoZnQpP2lsKGksYXQsImxpbmVQcmVmaXgiLG0rMSkoZnQpOmF0KGZ0KX1mdW5jdGlvbiBhdChmdCl7cmV0dXJuIGZ0PT09bnVsbHx8eGEoZnQpP2kuY2hlY2soR050LFcsbXQpKGZ0KTooaS5lbnRlcigiY29kZUZsb3dWYWx1ZSIpLGJ0KGZ0KSl9ZnVuY3Rpb24gYnQoZnQpe3JldHVybiBmdD09PW51bGx8fHhhKGZ0KT8oaS5leGl0KCJjb2RlRmxvd1ZhbHVlIiksYXQoZnQpKTooaS5jb25zdW1lKGZ0KSxidCl9ZnVuY3Rpb24gbXQoZnQpe3JldHVybiBpLmV4aXQoImNvZGVGZW5jZWQiKSxhKGZ0KX1mdW5jdGlvbiB5dChmdCx1dCx2dCl7bGV0IFg9MDtyZXR1cm4gcHQ7ZnVuY3Rpb24gcHQoT3Qpe3JldHVybiBmdC5lbnRlcigibGluZUVuZGluZyIpLGZ0LmNvbnN1bWUoT3QpLGZ0LmV4aXQoImxpbmVFbmRpbmciKSxVfWZ1bmN0aW9uIFUoT3Qpe3JldHVybiBmdC5lbnRlcigiY29kZUZlbmNlZEZlbmNlIiksV2MoT3QpP2lsKGZ0LFR0LCJsaW5lUHJlZml4IixwLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIik/dm9pZCAwOjQpKE90KTpUdChPdCl9ZnVuY3Rpb24gVHQoT3Qpe3JldHVybiBPdD09PUU/KGZ0LmVudGVyKCJjb2RlRmVuY2VkRmVuY2VTZXF1ZW5jZSIpLG50KE90KSk6dnQoT3QpfWZ1bmN0aW9uIG50KE90KXtyZXR1cm4gT3Q9PT1FPyhYKyssZnQuY29uc3VtZShPdCksbnQpOlg+PWI/KGZ0LmV4aXQoImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlIiksV2MoT3QpP2lsKGZ0LEl0LCJ3aGl0ZXNwYWNlIikoT3QpOkl0KE90KSk6dnQoT3QpfWZ1bmN0aW9uIEl0KE90KXtyZXR1cm4gT3Q9PT1udWxsfHx4YShPdCk/KGZ0LmV4aXQoImNvZGVGZW5jZWRGZW5jZSIpLHV0KE90KSk6dnQoT3QpfX19ZnVuY3Rpb24gVVJlKGksYSxmKXtjb25zdCBwPXRoaXM7cmV0dXJuIHc7ZnVuY3Rpb24gdyhiKXtyZXR1cm4gYj09PW51bGw/ZihiKTooaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShiKSxpLmV4aXQoImxpbmVFbmRpbmciKSxtKX1mdW5jdGlvbiBtKGIpe3JldHVybiBwLnBhcnNlci5sYXp5W3Aubm93KCkubGluZV0/ZihiKTphKGIpfX1jb25zdCBMMHQ9e25hbWU6ImNvZGVJbmRlbnRlZCIsdG9rZW5pemU6WVJlfSxXUmU9e3Rva2VuaXplOktSZSxwYXJ0aWFsOiEwfTtmdW5jdGlvbiBZUmUoaSxhLGYpe2NvbnN0IHA9dGhpcztyZXR1cm4gdztmdW5jdGlvbiB3KEEpe3JldHVybiBpLmVudGVyKCJjb2RlSW5kZW50ZWQiKSxpbChpLG0sImxpbmVQcmVmaXgiLDQrMSkoQSl9ZnVuY3Rpb24gbShBKXtjb25zdCBJPXAuZXZlbnRzW3AuZXZlbnRzLmxlbmd0aC0xXTtyZXR1cm4gSSYmSVsxXS50eXBlPT09ImxpbmVQcmVmaXgiJiZJWzJdLnNsaWNlU2VyaWFsaXplKElbMV0sITApLmxlbmd0aD49ND9iKEEpOmYoQSl9ZnVuY3Rpb24gYihBKXtyZXR1cm4gQT09PW51bGw/XyhBKTp4YShBKT9pLmF0dGVtcHQoV1JlLGIsXykoQSk6KGkuZW50ZXIoImNvZGVGbG93VmFsdWUiKSxFKEEpKX1mdW5jdGlvbiBFKEEpe3JldHVybiBBPT09bnVsbHx8eGEoQSk/KGkuZXhpdCgiY29kZUZsb3dWYWx1ZSIpLGIoQSkpOihpLmNvbnN1bWUoQSksRSl9ZnVuY3Rpb24gXyhBKXtyZXR1cm4gaS5leGl0KCJjb2RlSW5kZW50ZWQiKSxhKEEpfX1mdW5jdGlvbiBLUmUoaSxhLGYpe2NvbnN0IHA9dGhpcztyZXR1cm4gdztmdW5jdGlvbiB3KGIpe3JldHVybiBwLnBhcnNlci5sYXp5W3Aubm93KCkubGluZV0/ZihiKTp4YShiKT8oaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShiKSxpLmV4aXQoImxpbmVFbmRpbmciKSx3KTppbChpLG0sImxpbmVQcmVmaXgiLDQrMSkoYil9ZnVuY3Rpb24gbShiKXtjb25zdCBFPXAuZXZlbnRzW3AuZXZlbnRzLmxlbmd0aC0xXTtyZXR1cm4gRSYmRVsxXS50eXBlPT09ImxpbmVQcmVmaXgiJiZFWzJdLnNsaWNlU2VyaWFsaXplKEVbMV0sITApLmxlbmd0aD49ND9hKGIpOnhhKGIpP3coYik6ZihiKX19Y29uc3QgWFJlPXtuYW1lOiJjb2RlVGV4dCIsdG9rZW5pemU6SlJlLHJlc29sdmU6UVJlLHByZXZpb3VzOlpSZX07ZnVuY3Rpb24gUVJlKGkpe2xldCBhPWkubGVuZ3RoLTQsZj0zLHAsdztpZigoaVtmXVsxXS50eXBlPT09ImxpbmVFbmRpbmcifHxpW2ZdWzFdLnR5cGU9PT0ic3BhY2UiKSYmKGlbYV1bMV0udHlwZT09PSJsaW5lRW5kaW5nInx8aVthXVsxXS50eXBlPT09InNwYWNlIikpe2ZvcihwPWY7KytwPGE7KWlmKGlbcF1bMV0udHlwZT09PSJjb2RlVGV4dERhdGEiKXtpW2ZdWzFdLnR5cGU9ImNvZGVUZXh0UGFkZGluZyIsaVthXVsxXS50eXBlPSJjb2RlVGV4dFBhZGRpbmciLGYrPTIsYS09MjticmVha319Zm9yKHA9Zi0xLGErKzsrK3A8PWE7KXc9PT12b2lkIDA/cCE9PWEmJmlbcF1bMV0udHlwZSE9PSJsaW5lRW5kaW5nIiYmKHc9cCk6KHA9PT1hfHxpW3BdWzFdLnR5cGU9PT0ibGluZUVuZGluZyIpJiYoaVt3XVsxXS50eXBlPSJjb2RlVGV4dERhdGEiLHAhPT13KzImJihpW3ddWzFdLmVuZD1pW3AtMV1bMV0uZW5kLGkuc3BsaWNlKHcrMixwLXctMiksYS09cC13LTIscD13KzIpLHc9dm9pZCAwKTtyZXR1cm4gaX1mdW5jdGlvbiBaUmUoaSl7cmV0dXJuIGkhPT05Nnx8dGhpcy5ldmVudHNbdGhpcy5ldmVudHMubGVuZ3RoLTFdWzFdLnR5cGU9PT0iY2hhcmFjdGVyRXNjYXBlIn1mdW5jdGlvbiBKUmUoaSxhLGYpe2xldCBwPTAsdyxtO3JldHVybiBiO2Z1bmN0aW9uIGIoQil7cmV0dXJuIGkuZW50ZXIoImNvZGVUZXh0IiksaS5lbnRlcigiY29kZVRleHRTZXF1ZW5jZSIpLEUoQil9ZnVuY3Rpb24gRShCKXtyZXR1cm4gQj09PTk2PyhpLmNvbnN1bWUoQikscCsrLEUpOihpLmV4aXQoImNvZGVUZXh0U2VxdWVuY2UiKSxfKEIpKX1mdW5jdGlvbiBfKEIpe3JldHVybiBCPT09bnVsbD9mKEIpOkI9PT0zMj8oaS5lbnRlcigic3BhY2UiKSxpLmNvbnN1bWUoQiksaS5leGl0KCJzcGFjZSIpLF8pOkI9PT05Nj8obT1pLmVudGVyKCJjb2RlVGV4dFNlcXVlbmNlIiksdz0wLEkoQikpOnhhKEIpPyhpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKEIpLGkuZXhpdCgibGluZUVuZGluZyIpLF8pOihpLmVudGVyKCJjb2RlVGV4dERhdGEiKSxBKEIpKX1mdW5jdGlvbiBBKEIpe3JldHVybiBCPT09bnVsbHx8Qj09PTMyfHxCPT09OTZ8fHhhKEIpPyhpLmV4aXQoImNvZGVUZXh0RGF0YSIpLF8oQikpOihpLmNvbnN1bWUoQiksQSl9ZnVuY3Rpb24gSShCKXtyZXR1cm4gQj09PTk2PyhpLmNvbnN1bWUoQiksdysrLEkpOnc9PT1wPyhpLmV4aXQoImNvZGVUZXh0U2VxdWVuY2UiKSxpLmV4aXQoImNvZGVUZXh0IiksYShCKSk6KG0udHlwZT0iY29kZVRleHREYXRhIixBKEIpKX19ZnVuY3Rpb24gV050KGkpe2NvbnN0IGE9e307bGV0IGY9LTEscCx3LG0sYixFLF8sQTtmb3IoOysrZjxpLmxlbmd0aDspe2Zvcig7ZiBpbiBhOylmPWFbZl07aWYocD1pW2ZdLGYmJnBbMV0udHlwZT09PSJjaHVua0Zsb3ciJiZpW2YtMV1bMV0udHlwZT09PSJsaXN0SXRlbVByZWZpeCImJihfPXBbMV0uX3Rva2VuaXplci5ldmVudHMsbT0wLG08Xy5sZW5ndGgmJl9bbV1bMV0udHlwZT09PSJsaW5lRW5kaW5nQmxhbmsiJiYobSs9MiksbTxfLmxlbmd0aCYmX1ttXVsxXS50eXBlPT09ImNvbnRlbnQiKSlmb3IoOysrbTxfLmxlbmd0aCYmX1ttXVsxXS50eXBlIT09ImNvbnRlbnQiOylfW21dWzFdLnR5cGU9PT0iY2h1bmtUZXh0IiYmKF9bbV1bMV0uX2lzSW5GaXJzdENvbnRlbnRPZkxpc3RJdGVtPSEwLG0rKyk7aWYocFswXT09PSJlbnRlciIpcFsxXS5jb250ZW50VHlwZSYmKE9iamVjdC5hc3NpZ24oYSx0amUoaSxmKSksZj1hW2ZdLEE9ITApO2Vsc2UgaWYocFsxXS5fY29udGFpbmVyKXtmb3IobT1mLHc9dm9pZCAwO20tLSYmKGI9aVttXSxiWzFdLnR5cGU9PT0ibGluZUVuZGluZyJ8fGJbMV0udHlwZT09PSJsaW5lRW5kaW5nQmxhbmsiKTspYlswXT09PSJlbnRlciImJih3JiYoaVt3XVsxXS50eXBlPSJsaW5lRW5kaW5nQmxhbmsiKSxiWzFdLnR5cGU9ImxpbmVFbmRpbmciLHc9bSk7dyYmKHBbMV0uZW5kPU9iamVjdC5hc3NpZ24oe30saVt3XVsxXS5zdGFydCksRT1pLnNsaWNlKHcsZiksRS51bnNoaWZ0KHApLG0zKGksdyxmLXcrMSxFKSl9fXJldHVybiFBfWZ1bmN0aW9uIHRqZShpLGEpe2NvbnN0IGY9aVthXVsxXSxwPWlbYV1bMl07bGV0IHc9YS0xO2NvbnN0IG09W10sYj1mLl90b2tlbml6ZXJ8fHAucGFyc2VyW2YuY29udGVudFR5cGVdKGYuc3RhcnQpLEU9Yi5ldmVudHMsXz1bXSxBPXt9O2xldCBJLEIsTj0tMSxSPWYsej0wLFc9MDtjb25zdCBldD1bV107Zm9yKDtSOyl7Zm9yKDtpWysrd11bMV0hPT1SOyk7bS5wdXNoKHcpLFIuX3Rva2VuaXplcnx8KEk9cC5zbGljZVN0cmVhbShSKSxSLm5leHR8fEkucHVzaChudWxsKSxCJiZiLmRlZmluZVNraXAoUi5zdGFydCksUi5faXNJbkZpcnN0Q29udGVudE9mTGlzdEl0ZW0mJihiLl9nZm1UYXNrbGlzdEZpcnN0Q29udGVudE9mTGlzdEl0ZW09ITApLGIud3JpdGUoSSksUi5faXNJbkZpcnN0Q29udGVudE9mTGlzdEl0ZW0mJihiLl9nZm1UYXNrbGlzdEZpcnN0Q29udGVudE9mTGlzdEl0ZW09dm9pZCAwKSksQj1SLFI9Ui5uZXh0fWZvcihSPWY7KytOPEUubGVuZ3RoOylFW05dWzBdPT09ImV4aXQiJiZFW04tMV1bMF09PT0iZW50ZXIiJiZFW05dWzFdLnR5cGU9PT1FW04tMV1bMV0udHlwZSYmRVtOXVsxXS5zdGFydC5saW5lIT09RVtOXVsxXS5lbmQubGluZSYmKFc9TisxLGV0LnB1c2goVyksUi5fdG9rZW5pemVyPXZvaWQgMCxSLnByZXZpb3VzPXZvaWQgMCxSPVIubmV4dCk7Zm9yKGIuZXZlbnRzPVtdLFI/KFIuX3Rva2VuaXplcj12b2lkIDAsUi5wcmV2aW91cz12b2lkIDApOmV0LnBvcCgpLE49ZXQubGVuZ3RoO04tLTspe2NvbnN0IHN0PUUuc2xpY2UoZXRbTl0sZXRbTisxXSksYXQ9bS5wb3AoKTtfLnVuc2hpZnQoW2F0LGF0K3N0Lmxlbmd0aC0xXSksbTMoaSxhdCwyLHN0KX1mb3IoTj0tMTsrK048Xy5sZW5ndGg7KUFbeitfW05dWzBdXT16K19bTl1bMV0seis9X1tOXVsxXS1fW05dWzBdLTE7cmV0dXJuIEF9Y29uc3QgZWplPXt0b2tlbml6ZTppamUscmVzb2x2ZTpyamV9LG5qZT17dG9rZW5pemU6c2plLHBhcnRpYWw6ITB9O2Z1bmN0aW9uIHJqZShpKXtyZXR1cm4gV050KGkpLGl9ZnVuY3Rpb24gaWplKGksYSl7bGV0IGY7cmV0dXJuIHA7ZnVuY3Rpb24gcChFKXtyZXR1cm4gaS5lbnRlcigiY29udGVudCIpLGY9aS5lbnRlcigiY2h1bmtDb250ZW50Iix7Y29udGVudFR5cGU6ImNvbnRlbnQifSksdyhFKX1mdW5jdGlvbiB3KEUpe3JldHVybiBFPT09bnVsbD9tKEUpOnhhKEUpP2kuY2hlY2sobmplLGIsbSkoRSk6KGkuY29uc3VtZShFKSx3KX1mdW5jdGlvbiBtKEUpe3JldHVybiBpLmV4aXQoImNodW5rQ29udGVudCIpLGkuZXhpdCgiY29udGVudCIpLGEoRSl9ZnVuY3Rpb24gYihFKXtyZXR1cm4gaS5jb25zdW1lKEUpLGkuZXhpdCgiY2h1bmtDb250ZW50IiksZi5uZXh0PWkuZW50ZXIoImNodW5rQ29udGVudCIse2NvbnRlbnRUeXBlOiJjb250ZW50IixwcmV2aW91czpmfSksZj1mLm5leHQsd319ZnVuY3Rpb24gc2plKGksYSxmKXtjb25zdCBwPXRoaXM7cmV0dXJuIHc7ZnVuY3Rpb24gdyhiKXtyZXR1cm4gaS5leGl0KCJjaHVua0NvbnRlbnQiKSxpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKGIpLGkuZXhpdCgibGluZUVuZGluZyIpLGlsKGksbSwibGluZVByZWZpeCIpfWZ1bmN0aW9uIG0oYil7aWYoYj09PW51bGx8fHhhKGIpKXJldHVybiBmKGIpO2NvbnN0IEU9cC5ldmVudHNbcC5ldmVudHMubGVuZ3RoLTFdO3JldHVybiFwLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIikmJkUmJkVbMV0udHlwZT09PSJsaW5lUHJlZml4IiYmRVsyXS5zbGljZVNlcmlhbGl6ZShFWzFdLCEwKS5sZW5ndGg+PTQ/YShiKTppLmludGVycnVwdChwLnBhcnNlci5jb25zdHJ1Y3RzLmZsb3csZixhKShiKX19ZnVuY3Rpb24gWU50KGksYSxmLHAsdyxtLGIsRSxfKXtjb25zdCBBPV98fE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtsZXQgST0wO3JldHVybiBCO2Z1bmN0aW9uIEIoc3Qpe3JldHVybiBzdD09PTYwPyhpLmVudGVyKHApLGkuZW50ZXIodyksaS5lbnRlcihtKSxpLmNvbnN1bWUoc3QpLGkuZXhpdChtKSxOKTpzdD09PW51bGx8fHN0PT09MzJ8fHN0PT09NDF8fFQwdChzdCk/ZihzdCk6KGkuZW50ZXIocCksaS5lbnRlcihiKSxpLmVudGVyKEUpLGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxXKHN0KSl9ZnVuY3Rpb24gTihzdCl7cmV0dXJuIHN0PT09NjI/KGkuZW50ZXIobSksaS5jb25zdW1lKHN0KSxpLmV4aXQobSksaS5leGl0KHcpLGkuZXhpdChwKSxhKTooaS5lbnRlcihFKSxpLmVudGVyKCJjaHVua1N0cmluZyIse2NvbnRlbnRUeXBlOiJzdHJpbmcifSksUihzdCkpfWZ1bmN0aW9uIFIoc3Qpe3JldHVybiBzdD09PTYyPyhpLmV4aXQoImNodW5rU3RyaW5nIiksaS5leGl0KEUpLE4oc3QpKTpzdD09PW51bGx8fHN0PT09NjB8fHhhKHN0KT9mKHN0KTooaS5jb25zdW1lKHN0KSxzdD09PTkyP3o6Uil9ZnVuY3Rpb24geihzdCl7cmV0dXJuIHN0PT09NjB8fHN0PT09NjJ8fHN0PT09OTI/KGkuY29uc3VtZShzdCksUik6UihzdCl9ZnVuY3Rpb24gVyhzdCl7cmV0dXJuIUkmJihzdD09PW51bGx8fHN0PT09NDF8fHBwKHN0KSk/KGkuZXhpdCgiY2h1bmtTdHJpbmciKSxpLmV4aXQoRSksaS5leGl0KGIpLGkuZXhpdChwKSxhKHN0KSk6STxBJiZzdD09PTQwPyhpLmNvbnN1bWUoc3QpLEkrKyxXKTpzdD09PTQxPyhpLmNvbnN1bWUoc3QpLEktLSxXKTpzdD09PW51bGx8fHN0PT09MzJ8fHN0PT09NDB8fFQwdChzdCk/ZihzdCk6KGkuY29uc3VtZShzdCksc3Q9PT05Mj9ldDpXKX1mdW5jdGlvbiBldChzdCl7cmV0dXJuIHN0PT09NDB8fHN0PT09NDF8fHN0PT09OTI/KGkuY29uc3VtZShzdCksVyk6VyhzdCl9fWZ1bmN0aW9uIEtOdChpLGEsZixwLHcsbSl7Y29uc3QgYj10aGlzO2xldCBFPTAsXztyZXR1cm4gQTtmdW5jdGlvbiBBKFIpe3JldHVybiBpLmVudGVyKHApLGkuZW50ZXIodyksaS5jb25zdW1lKFIpLGkuZXhpdCh3KSxpLmVudGVyKG0pLEl9ZnVuY3Rpb24gSShSKXtyZXR1cm4gRT45OTl8fFI9PT1udWxsfHxSPT09OTF8fFI9PT05MyYmIV98fFI9PT05NCYmIUUmJiJfaGlkZGVuRm9vdG5vdGVTdXBwb3J0ImluIGIucGFyc2VyLmNvbnN0cnVjdHM/ZihSKTpSPT09OTM/KGkuZXhpdChtKSxpLmVudGVyKHcpLGkuY29uc3VtZShSKSxpLmV4aXQodyksaS5leGl0KHApLGEpOnhhKFIpPyhpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKFIpLGkuZXhpdCgibGluZUVuZGluZyIpLEkpOihpLmVudGVyKCJjaHVua1N0cmluZyIse2NvbnRlbnRUeXBlOiJzdHJpbmcifSksQihSKSl9ZnVuY3Rpb24gQihSKXtyZXR1cm4gUj09PW51bGx8fFI9PT05MXx8Uj09PTkzfHx4YShSKXx8RSsrPjk5OT8oaS5leGl0KCJjaHVua1N0cmluZyIpLEkoUikpOihpLmNvbnN1bWUoUiksX3x8KF89IVdjKFIpKSxSPT09OTI/TjpCKX1mdW5jdGlvbiBOKFIpe3JldHVybiBSPT09OTF8fFI9PT05Mnx8Uj09PTkzPyhpLmNvbnN1bWUoUiksRSsrLEIpOkIoUil9fWZ1bmN0aW9uIFhOdChpLGEsZixwLHcsbSl7bGV0IGI7cmV0dXJuIEU7ZnVuY3Rpb24gRShOKXtyZXR1cm4gTj09PTM0fHxOPT09Mzl8fE49PT00MD8oaS5lbnRlcihwKSxpLmVudGVyKHcpLGkuY29uc3VtZShOKSxpLmV4aXQodyksYj1OPT09NDA/NDE6TixfKTpmKE4pfWZ1bmN0aW9uIF8oTil7cmV0dXJuIE49PT1iPyhpLmVudGVyKHcpLGkuY29uc3VtZShOKSxpLmV4aXQodyksaS5leGl0KHApLGEpOihpLmVudGVyKG0pLEEoTikpfWZ1bmN0aW9uIEEoTil7cmV0dXJuIE49PT1iPyhpLmV4aXQobSksXyhiKSk6Tj09PW51bGw/ZihOKTp4YShOKT8oaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShOKSxpLmV4aXQoImxpbmVFbmRpbmciKSxpbChpLEEsImxpbmVQcmVmaXgiKSk6KGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxJKE4pKX1mdW5jdGlvbiBJKE4pe3JldHVybiBOPT09Ynx8Tj09PW51bGx8fHhhKE4pPyhpLmV4aXQoImNodW5rU3RyaW5nIiksQShOKSk6KGkuY29uc3VtZShOKSxOPT09OTI/QjpJKX1mdW5jdGlvbiBCKE4pe3JldHVybiBOPT09Ynx8Tj09PTkyPyhpLmNvbnN1bWUoTiksSSk6SShOKX19ZnVuY3Rpb24gVEYoaSxhKXtsZXQgZjtyZXR1cm4gcDtmdW5jdGlvbiBwKHcpe3JldHVybiB4YSh3KT8oaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZSh3KSxpLmV4aXQoImxpbmVFbmRpbmciKSxmPSEwLHApOldjKHcpP2lsKGkscCxmPyJsaW5lUHJlZml4IjoibGluZVN1ZmZpeCIpKHcpOmEodyl9fWZ1bmN0aW9uIG9MKGkpe3JldHVybiBpLnJlcGxhY2UoL1tcdFxuXHIgXSsvZywiICIpLnJlcGxhY2UoL14gfCAkL2csIiIpLnRvTG93ZXJDYXNlKCkudG9VcHBlckNhc2UoKX1jb25zdCBhamU9e25hbWU6ImRlZmluaXRpb24iLHRva2VuaXplOmNqZX0sb2plPXt0b2tlbml6ZTp1amUscGFydGlhbDohMH07ZnVuY3Rpb24gY2plKGksYSxmKXtjb25zdCBwPXRoaXM7bGV0IHc7cmV0dXJuIG07ZnVuY3Rpb24gbShSKXtyZXR1cm4gaS5lbnRlcigiZGVmaW5pdGlvbiIpLGIoUil9ZnVuY3Rpb24gYihSKXtyZXR1cm4gS050LmNhbGwocCxpLEUsZiwiZGVmaW5pdGlvbkxhYmVsIiwiZGVmaW5pdGlvbkxhYmVsTWFya2VyIiwiZGVmaW5pdGlvbkxhYmVsU3RyaW5nIikoUil9ZnVuY3Rpb24gRShSKXtyZXR1cm4gdz1vTChwLnNsaWNlU2VyaWFsaXplKHAuZXZlbnRzW3AuZXZlbnRzLmxlbmd0aC0xXVsxXSkuc2xpY2UoMSwtMSkpLFI9PT01OD8oaS5lbnRlcigiZGVmaW5pdGlvbk1hcmtlciIpLGkuY29uc3VtZShSKSxpLmV4aXQoImRlZmluaXRpb25NYXJrZXIiKSxfKTpmKFIpfWZ1bmN0aW9uIF8oUil7cmV0dXJuIHBwKFIpP1RGKGksQSkoUik6QShSKX1mdW5jdGlvbiBBKFIpe3JldHVybiBZTnQoaSxJLGYsImRlZmluaXRpb25EZXN0aW5hdGlvbiIsImRlZmluaXRpb25EZXN0aW5hdGlvbkxpdGVyYWwiLCJkZWZpbml0aW9uRGVzdGluYXRpb25MaXRlcmFsTWFya2VyIiwiZGVmaW5pdGlvbkRlc3RpbmF0aW9uUmF3IiwiZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nIikoUil9ZnVuY3Rpb24gSShSKXtyZXR1cm4gaS5hdHRlbXB0KG9qZSxCLEIpKFIpfWZ1bmN0aW9uIEIoUil7cmV0dXJuIFdjKFIpP2lsKGksTiwid2hpdGVzcGFjZSIpKFIpOk4oUil9ZnVuY3Rpb24gTihSKXtyZXR1cm4gUj09PW51bGx8fHhhKFIpPyhpLmV4aXQoImRlZmluaXRpb24iKSxwLnBhcnNlci5kZWZpbmVkLnB1c2godyksYShSKSk6ZihSKX19ZnVuY3Rpb24gdWplKGksYSxmKXtyZXR1cm4gcDtmdW5jdGlvbiBwKEUpe3JldHVybiBwcChFKT9URihpLHcpKEUpOmYoRSl9ZnVuY3Rpb24gdyhFKXtyZXR1cm4gWE50KGksbSxmLCJkZWZpbml0aW9uVGl0bGUiLCJkZWZpbml0aW9uVGl0bGVNYXJrZXIiLCJkZWZpbml0aW9uVGl0bGVTdHJpbmciKShFKX1mdW5jdGlvbiBtKEUpe3JldHVybiBXYyhFKT9pbChpLGIsIndoaXRlc3BhY2UiKShFKTpiKEUpfWZ1bmN0aW9uIGIoRSl7cmV0dXJuIEU9PT1udWxsfHx4YShFKT9hKEUpOmYoRSl9fWNvbnN0IGxqZT17bmFtZToiaGFyZEJyZWFrRXNjYXBlIix0b2tlbml6ZTpoamV9O2Z1bmN0aW9uIGhqZShpLGEsZil7cmV0dXJuIHA7ZnVuY3Rpb24gcChtKXtyZXR1cm4gaS5lbnRlcigiaGFyZEJyZWFrRXNjYXBlIiksaS5jb25zdW1lKG0pLHd9ZnVuY3Rpb24gdyhtKXtyZXR1cm4geGEobSk/KGkuZXhpdCgiaGFyZEJyZWFrRXNjYXBlIiksYShtKSk6ZihtKX19Y29uc3QgZmplPXtuYW1lOiJoZWFkaW5nQXR4Iix0b2tlbml6ZTpnamUscmVzb2x2ZTpkamV9O2Z1bmN0aW9uIGRqZShpLGEpe2xldCBmPWkubGVuZ3RoLTIscD0zLHcsbTtyZXR1cm4gaVtwXVsxXS50eXBlPT09IndoaXRlc3BhY2UiJiYocCs9MiksZi0yPnAmJmlbZl1bMV0udHlwZT09PSJ3aGl0ZXNwYWNlIiYmKGYtPTIpLGlbZl1bMV0udHlwZT09PSJhdHhIZWFkaW5nU2VxdWVuY2UiJiYocD09PWYtMXx8Zi00PnAmJmlbZi0yXVsxXS50eXBlPT09IndoaXRlc3BhY2UiKSYmKGYtPXArMT09PWY/Mjo0KSxmPnAmJih3PXt0eXBlOiJhdHhIZWFkaW5nVGV4dCIsc3RhcnQ6aVtwXVsxXS5zdGFydCxlbmQ6aVtmXVsxXS5lbmR9LG09e3R5cGU6ImNodW5rVGV4dCIsc3RhcnQ6aVtwXVsxXS5zdGFydCxlbmQ6aVtmXVsxXS5lbmQsY29udGVudFR5cGU6InRleHQifSxtMyhpLHAsZi1wKzEsW1siZW50ZXIiLHcsYV0sWyJlbnRlciIsbSxhXSxbImV4aXQiLG0sYV0sWyJleGl0Iix3LGFdXSkpLGl9ZnVuY3Rpb24gZ2plKGksYSxmKXtsZXQgcD0wO3JldHVybiB3O2Z1bmN0aW9uIHcoSSl7cmV0dXJuIGkuZW50ZXIoImF0eEhlYWRpbmciKSxtKEkpfWZ1bmN0aW9uIG0oSSl7cmV0dXJuIGkuZW50ZXIoImF0eEhlYWRpbmdTZXF1ZW5jZSIpLGIoSSl9ZnVuY3Rpb24gYihJKXtyZXR1cm4gST09PTM1JiZwKys8Nj8oaS5jb25zdW1lKEkpLGIpOkk9PT1udWxsfHxwcChJKT8oaS5leGl0KCJhdHhIZWFkaW5nU2VxdWVuY2UiKSxFKEkpKTpmKEkpfWZ1bmN0aW9uIEUoSSl7cmV0dXJuIEk9PT0zNT8oaS5lbnRlcigiYXR4SGVhZGluZ1NlcXVlbmNlIiksXyhJKSk6ST09PW51bGx8fHhhKEkpPyhpLmV4aXQoImF0eEhlYWRpbmciKSxhKEkpKTpXYyhJKT9pbChpLEUsIndoaXRlc3BhY2UiKShJKTooaS5lbnRlcigiYXR4SGVhZGluZ1RleHQiKSxBKEkpKX1mdW5jdGlvbiBfKEkpe3JldHVybiBJPT09MzU/KGkuY29uc3VtZShJKSxfKTooaS5leGl0KCJhdHhIZWFkaW5nU2VxdWVuY2UiKSxFKEkpKX1mdW5jdGlvbiBBKEkpe3JldHVybiBJPT09bnVsbHx8ST09PTM1fHxwcChJKT8oaS5leGl0KCJhdHhIZWFkaW5nVGV4dCIpLEUoSSkpOihpLmNvbnN1bWUoSSksQSl9fWNvbnN0IHBqZT1bImFkZHJlc3MiLCJhcnRpY2xlIiwiYXNpZGUiLCJiYXNlIiwiYmFzZWZvbnQiLCJibG9ja3F1b3RlIiwiYm9keSIsImNhcHRpb24iLCJjZW50ZXIiLCJjb2wiLCJjb2xncm91cCIsImRkIiwiZGV0YWlscyIsImRpYWxvZyIsImRpciIsImRpdiIsImRsIiwiZHQiLCJmaWVsZHNldCIsImZpZ2NhcHRpb24iLCJmaWd1cmUiLCJmb290ZXIiLCJmb3JtIiwiZnJhbWUiLCJmcmFtZXNldCIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWQiLCJoZWFkZXIiLCJociIsImh0bWwiLCJpZnJhbWUiLCJsZWdlbmQiLCJsaSIsImxpbmsiLCJtYWluIiwibWVudSIsIm1lbnVpdGVtIiwibmF2Iiwibm9mcmFtZXMiLCJvbCIsIm9wdGdyb3VwIiwib3B0aW9uIiwicCIsInBhcmFtIiwic2VhcmNoIiwic2VjdGlvbiIsInN1bW1hcnkiLCJ0YWJsZSIsInRib2R5IiwidGQiLCJ0Zm9vdCIsInRoIiwidGhlYWQiLCJ0aXRsZSIsInRyIiwidHJhY2siLCJ1bCJdLFFOdD1bInByZSIsInNjcmlwdCIsInN0eWxlIiwidGV4dGFyZWEiXSxiamU9e25hbWU6Imh0bWxGbG93Iix0b2tlbml6ZTp5amUscmVzb2x2ZVRvOm1qZSxjb25jcmV0ZTohMH0sd2plPXt0b2tlbml6ZTpramUscGFydGlhbDohMH0sdmplPXt0b2tlbml6ZTp4amUscGFydGlhbDohMH07ZnVuY3Rpb24gbWplKGkpe2xldCBhPWkubGVuZ3RoO2Zvcig7YS0tJiYhKGlbYV1bMF09PT0iZW50ZXIiJiZpW2FdWzFdLnR5cGU9PT0iaHRtbEZsb3ciKTspO3JldHVybiBhPjEmJmlbYS0yXVsxXS50eXBlPT09ImxpbmVQcmVmaXgiJiYoaVthXVsxXS5zdGFydD1pW2EtMl1bMV0uc3RhcnQsaVthKzFdWzFdLnN0YXJ0PWlbYS0yXVsxXS5zdGFydCxpLnNwbGljZShhLTIsMikpLGl9ZnVuY3Rpb24geWplKGksYSxmKXtjb25zdCBwPXRoaXM7bGV0IHcsbSxiLEUsXztyZXR1cm4gQTtmdW5jdGlvbiBBKEZ0KXtyZXR1cm4gSShGdCl9ZnVuY3Rpb24gSShGdCl7cmV0dXJuIGkuZW50ZXIoImh0bWxGbG93IiksaS5lbnRlcigiaHRtbEZsb3dEYXRhIiksaS5jb25zdW1lKEZ0KSxCfWZ1bmN0aW9uIEIoRnQpe3JldHVybiBGdD09PTMzPyhpLmNvbnN1bWUoRnQpLE4pOkZ0PT09NDc/KGkuY29uc3VtZShGdCksbT0hMCxXKTpGdD09PTYzPyhpLmNvbnN1bWUoRnQpLHc9MyxwLmludGVycnVwdD9hOnh0KTp5MyhGdCk/KGkuY29uc3VtZShGdCksYj1TdHJpbmcuZnJvbUNoYXJDb2RlKEZ0KSxldCk6ZihGdCl9ZnVuY3Rpb24gTihGdCl7cmV0dXJuIEZ0PT09NDU/KGkuY29uc3VtZShGdCksdz0yLFIpOkZ0PT09OTE/KGkuY29uc3VtZShGdCksdz01LEU9MCx6KTp5MyhGdCk/KGkuY29uc3VtZShGdCksdz00LHAuaW50ZXJydXB0P2E6eHQpOmYoRnQpfWZ1bmN0aW9uIFIoRnQpe3JldHVybiBGdD09PTQ1PyhpLmNvbnN1bWUoRnQpLHAuaW50ZXJydXB0P2E6eHQpOmYoRnQpfWZ1bmN0aW9uIHooRnQpe2NvbnN0IGduPSJDREFUQVsiO3JldHVybiBGdD09PWduLmNoYXJDb2RlQXQoRSsrKT8oaS5jb25zdW1lKEZ0KSxFPT09Z24ubGVuZ3RoP3AuaW50ZXJydXB0P2E6VHQ6eik6ZihGdCl9ZnVuY3Rpb24gVyhGdCl7cmV0dXJuIHkzKEZ0KT8oaS5jb25zdW1lKEZ0KSxiPVN0cmluZy5mcm9tQ2hhckNvZGUoRnQpLGV0KTpmKEZ0KX1mdW5jdGlvbiBldChGdCl7aWYoRnQ9PT1udWxsfHxGdD09PTQ3fHxGdD09PTYyfHxwcChGdCkpe2NvbnN0IGduPUZ0PT09NDcsU2U9Yi50b0xvd2VyQ2FzZSgpO3JldHVybiFnbiYmIW0mJlFOdC5pbmNsdWRlcyhTZSk/KHc9MSxwLmludGVycnVwdD9hKEZ0KTpUdChGdCkpOnBqZS5pbmNsdWRlcyhiLnRvTG93ZXJDYXNlKCkpPyh3PTYsZ24/KGkuY29uc3VtZShGdCksc3QpOnAuaW50ZXJydXB0P2EoRnQpOlR0KEZ0KSk6KHc9NyxwLmludGVycnVwdCYmIXAucGFyc2VyLmxhenlbcC5ub3coKS5saW5lXT9mKEZ0KTptP2F0KEZ0KTpidChGdCkpfXJldHVybiBGdD09PTQ1fHxsbShGdCk/KGkuY29uc3VtZShGdCksYis9U3RyaW5nLmZyb21DaGFyQ29kZShGdCksZXQpOmYoRnQpfWZ1bmN0aW9uIHN0KEZ0KXtyZXR1cm4gRnQ9PT02Mj8oaS5jb25zdW1lKEZ0KSxwLmludGVycnVwdD9hOlR0KTpmKEZ0KX1mdW5jdGlvbiBhdChGdCl7cmV0dXJuIFdjKEZ0KT8oaS5jb25zdW1lKEZ0KSxhdCk6cHQoRnQpfWZ1bmN0aW9uIGJ0KEZ0KXtyZXR1cm4gRnQ9PT00Nz8oaS5jb25zdW1lKEZ0KSxwdCk6RnQ9PT01OHx8RnQ9PT05NXx8eTMoRnQpPyhpLmNvbnN1bWUoRnQpLG10KTpXYyhGdCk/KGkuY29uc3VtZShGdCksYnQpOnB0KEZ0KX1mdW5jdGlvbiBtdChGdCl7cmV0dXJuIEZ0PT09NDV8fEZ0PT09NDZ8fEZ0PT09NTh8fEZ0PT09OTV8fGxtKEZ0KT8oaS5jb25zdW1lKEZ0KSxtdCk6eXQoRnQpfWZ1bmN0aW9uIHl0KEZ0KXtyZXR1cm4gRnQ9PT02MT8oaS5jb25zdW1lKEZ0KSxmdCk6V2MoRnQpPyhpLmNvbnN1bWUoRnQpLHl0KTpidChGdCl9ZnVuY3Rpb24gZnQoRnQpe3JldHVybiBGdD09PW51bGx8fEZ0PT09NjB8fEZ0PT09NjF8fEZ0PT09NjJ8fEZ0PT09OTY/ZihGdCk6RnQ9PT0zNHx8RnQ9PT0zOT8oaS5jb25zdW1lKEZ0KSxfPUZ0LHV0KTpXYyhGdCk/KGkuY29uc3VtZShGdCksZnQpOnZ0KEZ0KX1mdW5jdGlvbiB1dChGdCl7cmV0dXJuIEZ0PT09Xz8oaS5jb25zdW1lKEZ0KSxfPW51bGwsWCk6RnQ9PT1udWxsfHx4YShGdCk/ZihGdCk6KGkuY29uc3VtZShGdCksdXQpfWZ1bmN0aW9uIHZ0KEZ0KXtyZXR1cm4gRnQ9PT1udWxsfHxGdD09PTM0fHxGdD09PTM5fHxGdD09PTQ3fHxGdD09PTYwfHxGdD09PTYxfHxGdD09PTYyfHxGdD09PTk2fHxwcChGdCk/eXQoRnQpOihpLmNvbnN1bWUoRnQpLHZ0KX1mdW5jdGlvbiBYKEZ0KXtyZXR1cm4gRnQ9PT00N3x8RnQ9PT02Mnx8V2MoRnQpP2J0KEZ0KTpmKEZ0KX1mdW5jdGlvbiBwdChGdCl7cmV0dXJuIEZ0PT09NjI/KGkuY29uc3VtZShGdCksVSk6ZihGdCl9ZnVuY3Rpb24gVShGdCl7cmV0dXJuIEZ0PT09bnVsbHx8eGEoRnQpP1R0KEZ0KTpXYyhGdCk/KGkuY29uc3VtZShGdCksVSk6ZihGdCl9ZnVuY3Rpb24gVHQoRnQpe3JldHVybiBGdD09PTQ1JiZ3PT09Mj8oaS5jb25zdW1lKEZ0KSxCdCk6RnQ9PT02MCYmdz09PTE/KGkuY29uc3VtZShGdCksRXQpOkZ0PT09NjImJnc9PT00PyhpLmNvbnN1bWUoRnQpLEh0KTpGdD09PTYzJiZ3PT09Mz8oaS5jb25zdW1lKEZ0KSx4dCk6RnQ9PT05MyYmdz09PTU/KGkuY29uc3VtZShGdCksQ3QpOnhhKEZ0KSYmKHc9PT02fHx3PT09Nyk/KGkuZXhpdCgiaHRtbEZsb3dEYXRhIiksaS5jaGVjayh3amUsTGUsbnQpKEZ0KSk6RnQ9PT1udWxsfHx4YShGdCk/KGkuZXhpdCgiaHRtbEZsb3dEYXRhIiksbnQoRnQpKTooaS5jb25zdW1lKEZ0KSxUdCl9ZnVuY3Rpb24gbnQoRnQpe3JldHVybiBpLmNoZWNrKHZqZSxJdCxMZSkoRnQpfWZ1bmN0aW9uIEl0KEZ0KXtyZXR1cm4gaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShGdCksaS5leGl0KCJsaW5lRW5kaW5nIiksT3R9ZnVuY3Rpb24gT3QoRnQpe3JldHVybiBGdD09PW51bGx8fHhhKEZ0KT9udChGdCk6KGkuZW50ZXIoImh0bWxGbG93RGF0YSIpLFR0KEZ0KSl9ZnVuY3Rpb24gQnQoRnQpe3JldHVybiBGdD09PTQ1PyhpLmNvbnN1bWUoRnQpLHh0KTpUdChGdCl9ZnVuY3Rpb24gRXQoRnQpe3JldHVybiBGdD09PTQ3PyhpLmNvbnN1bWUoRnQpLGI9IiIsWik6VHQoRnQpfWZ1bmN0aW9uIFooRnQpe2lmKEZ0PT09NjIpe2NvbnN0IGduPWIudG9Mb3dlckNhc2UoKTtyZXR1cm4gUU50LmluY2x1ZGVzKGduKT8oaS5jb25zdW1lKEZ0KSxIdCk6VHQoRnQpfXJldHVybiB5MyhGdCkmJmIubGVuZ3RoPDg/KGkuY29uc3VtZShGdCksYis9U3RyaW5nLmZyb21DaGFyQ29kZShGdCksWik6VHQoRnQpfWZ1bmN0aW9uIEN0KEZ0KXtyZXR1cm4gRnQ9PT05Mz8oaS5jb25zdW1lKEZ0KSx4dCk6VHQoRnQpfWZ1bmN0aW9uIHh0KEZ0KXtyZXR1cm4gRnQ9PT02Mj8oaS5jb25zdW1lKEZ0KSxIdCk6RnQ9PT00NSYmdz09PTI/KGkuY29uc3VtZShGdCkseHQpOlR0KEZ0KX1mdW5jdGlvbiBIdChGdCl7cmV0dXJuIEZ0PT09bnVsbHx8eGEoRnQpPyhpLmV4aXQoImh0bWxGbG93RGF0YSIpLExlKEZ0KSk6KGkuY29uc3VtZShGdCksSHQpfWZ1bmN0aW9uIExlKEZ0KXtyZXR1cm4gaS5leGl0KCJodG1sRmxvdyIpLGEoRnQpfX1mdW5jdGlvbiB4amUoaSxhLGYpe2NvbnN0IHA9dGhpcztyZXR1cm4gdztmdW5jdGlvbiB3KGIpe3JldHVybiB4YShiKT8oaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShiKSxpLmV4aXQoImxpbmVFbmRpbmciKSxtKTpmKGIpfWZ1bmN0aW9uIG0oYil7cmV0dXJuIHAucGFyc2VyLmxhenlbcC5ub3coKS5saW5lXT9mKGIpOmEoYil9fWZ1bmN0aW9uIGtqZShpLGEsZil7cmV0dXJuIHA7ZnVuY3Rpb24gcCh3KXtyZXR1cm4gaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZSh3KSxpLmV4aXQoImxpbmVFbmRpbmciKSxpLmF0dGVtcHQoeVksYSxmKX19Y29uc3QgRWplPXtuYW1lOiJodG1sVGV4dCIsdG9rZW5pemU6VGplfTtmdW5jdGlvbiBUamUoaSxhLGYpe2NvbnN0IHA9dGhpcztsZXQgdyxtLGI7cmV0dXJuIEU7ZnVuY3Rpb24gRSh4dCl7cmV0dXJuIGkuZW50ZXIoImh0bWxUZXh0IiksaS5lbnRlcigiaHRtbFRleHREYXRhIiksaS5jb25zdW1lKHh0KSxffWZ1bmN0aW9uIF8oeHQpe3JldHVybiB4dD09PTMzPyhpLmNvbnN1bWUoeHQpLEEpOnh0PT09NDc/KGkuY29uc3VtZSh4dCkseXQpOnh0PT09NjM/KGkuY29uc3VtZSh4dCksYnQpOnkzKHh0KT8oaS5jb25zdW1lKHh0KSx2dCk6Zih4dCl9ZnVuY3Rpb24gQSh4dCl7cmV0dXJuIHh0PT09NDU/KGkuY29uc3VtZSh4dCksSSk6eHQ9PT05MT8oaS5jb25zdW1lKHh0KSxtPTAseik6eTMoeHQpPyhpLmNvbnN1bWUoeHQpLGF0KTpmKHh0KX1mdW5jdGlvbiBJKHh0KXtyZXR1cm4geHQ9PT00NT8oaS5jb25zdW1lKHh0KSxSKTpmKHh0KX1mdW5jdGlvbiBCKHh0KXtyZXR1cm4geHQ9PT1udWxsP2YoeHQpOnh0PT09NDU/KGkuY29uc3VtZSh4dCksTik6eGEoeHQpPyhiPUIsRXQoeHQpKTooaS5jb25zdW1lKHh0KSxCKX1mdW5jdGlvbiBOKHh0KXtyZXR1cm4geHQ9PT00NT8oaS5jb25zdW1lKHh0KSxSKTpCKHh0KX1mdW5jdGlvbiBSKHh0KXtyZXR1cm4geHQ9PT02Mj9CdCh4dCk6eHQ9PT00NT9OKHh0KTpCKHh0KX1mdW5jdGlvbiB6KHh0KXtjb25zdCBIdD0iQ0RBVEFbIjtyZXR1cm4geHQ9PT1IdC5jaGFyQ29kZUF0KG0rKyk/KGkuY29uc3VtZSh4dCksbT09PUh0Lmxlbmd0aD9XOnopOmYoeHQpfWZ1bmN0aW9uIFcoeHQpe3JldHVybiB4dD09PW51bGw/Zih4dCk6eHQ9PT05Mz8oaS5jb25zdW1lKHh0KSxldCk6eGEoeHQpPyhiPVcsRXQoeHQpKTooaS5jb25zdW1lKHh0KSxXKX1mdW5jdGlvbiBldCh4dCl7cmV0dXJuIHh0PT09OTM/KGkuY29uc3VtZSh4dCksc3QpOlcoeHQpfWZ1bmN0aW9uIHN0KHh0KXtyZXR1cm4geHQ9PT02Mj9CdCh4dCk6eHQ9PT05Mz8oaS5jb25zdW1lKHh0KSxzdCk6Vyh4dCl9ZnVuY3Rpb24gYXQoeHQpe3JldHVybiB4dD09PW51bGx8fHh0PT09NjI/QnQoeHQpOnhhKHh0KT8oYj1hdCxFdCh4dCkpOihpLmNvbnN1bWUoeHQpLGF0KX1mdW5jdGlvbiBidCh4dCl7cmV0dXJuIHh0PT09bnVsbD9mKHh0KTp4dD09PTYzPyhpLmNvbnN1bWUoeHQpLG10KTp4YSh4dCk/KGI9YnQsRXQoeHQpKTooaS5jb25zdW1lKHh0KSxidCl9ZnVuY3Rpb24gbXQoeHQpe3JldHVybiB4dD09PTYyP0J0KHh0KTpidCh4dCl9ZnVuY3Rpb24geXQoeHQpe3JldHVybiB5Myh4dCk/KGkuY29uc3VtZSh4dCksZnQpOmYoeHQpfWZ1bmN0aW9uIGZ0KHh0KXtyZXR1cm4geHQ9PT00NXx8bG0oeHQpPyhpLmNvbnN1bWUoeHQpLGZ0KTp1dCh4dCl9ZnVuY3Rpb24gdXQoeHQpe3JldHVybiB4YSh4dCk/KGI9dXQsRXQoeHQpKTpXYyh4dCk/KGkuY29uc3VtZSh4dCksdXQpOkJ0KHh0KX1mdW5jdGlvbiB2dCh4dCl7cmV0dXJuIHh0PT09NDV8fGxtKHh0KT8oaS5jb25zdW1lKHh0KSx2dCk6eHQ9PT00N3x8eHQ9PT02Mnx8cHAoeHQpP1goeHQpOmYoeHQpfWZ1bmN0aW9uIFgoeHQpe3JldHVybiB4dD09PTQ3PyhpLmNvbnN1bWUoeHQpLEJ0KTp4dD09PTU4fHx4dD09PTk1fHx5Myh4dCk/KGkuY29uc3VtZSh4dCkscHQpOnhhKHh0KT8oYj1YLEV0KHh0KSk6V2MoeHQpPyhpLmNvbnN1bWUoeHQpLFgpOkJ0KHh0KX1mdW5jdGlvbiBwdCh4dCl7cmV0dXJuIHh0PT09NDV8fHh0PT09NDZ8fHh0PT09NTh8fHh0PT09OTV8fGxtKHh0KT8oaS5jb25zdW1lKHh0KSxwdCk6VSh4dCl9ZnVuY3Rpb24gVSh4dCl7cmV0dXJuIHh0PT09NjE/KGkuY29uc3VtZSh4dCksVHQpOnhhKHh0KT8oYj1VLEV0KHh0KSk6V2MoeHQpPyhpLmNvbnN1bWUoeHQpLFUpOlgoeHQpfWZ1bmN0aW9uIFR0KHh0KXtyZXR1cm4geHQ9PT1udWxsfHx4dD09PTYwfHx4dD09PTYxfHx4dD09PTYyfHx4dD09PTk2P2YoeHQpOnh0PT09MzR8fHh0PT09Mzk/KGkuY29uc3VtZSh4dCksdz14dCxudCk6eGEoeHQpPyhiPVR0LEV0KHh0KSk6V2MoeHQpPyhpLmNvbnN1bWUoeHQpLFR0KTooaS5jb25zdW1lKHh0KSxJdCl9ZnVuY3Rpb24gbnQoeHQpe3JldHVybiB4dD09PXc/KGkuY29uc3VtZSh4dCksdz12b2lkIDAsT3QpOnh0PT09bnVsbD9mKHh0KTp4YSh4dCk/KGI9bnQsRXQoeHQpKTooaS5jb25zdW1lKHh0KSxudCl9ZnVuY3Rpb24gSXQoeHQpe3JldHVybiB4dD09PW51bGx8fHh0PT09MzR8fHh0PT09Mzl8fHh0PT09NjB8fHh0PT09NjF8fHh0PT09OTY/Zih4dCk6eHQ9PT00N3x8eHQ9PT02Mnx8cHAoeHQpP1goeHQpOihpLmNvbnN1bWUoeHQpLEl0KX1mdW5jdGlvbiBPdCh4dCl7cmV0dXJuIHh0PT09NDd8fHh0PT09NjJ8fHBwKHh0KT9YKHh0KTpmKHh0KX1mdW5jdGlvbiBCdCh4dCl7cmV0dXJuIHh0PT09NjI/KGkuY29uc3VtZSh4dCksaS5leGl0KCJodG1sVGV4dERhdGEiKSxpLmV4aXQoImh0bWxUZXh0IiksYSk6Zih4dCl9ZnVuY3Rpb24gRXQoeHQpe3JldHVybiBpLmV4aXQoImh0bWxUZXh0RGF0YSIpLGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUoeHQpLGkuZXhpdCgibGluZUVuZGluZyIpLFp9ZnVuY3Rpb24gWih4dCl7cmV0dXJuIFdjKHh0KT9pbChpLEN0LCJsaW5lUHJlZml4IixwLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIik/dm9pZCAwOjQpKHh0KTpDdCh4dCl9ZnVuY3Rpb24gQ3QoeHQpe3JldHVybiBpLmVudGVyKCJodG1sVGV4dERhdGEiKSxiKHh0KX19Y29uc3QgTTB0PXtuYW1lOiJsYWJlbEVuZCIsdG9rZW5pemU6TWplLHJlc29sdmVUbzpMamUscmVzb2x2ZUFsbDpBamV9LENqZT17dG9rZW5pemU6RGplfSxfamU9e3Rva2VuaXplOklqZX0sU2plPXt0b2tlbml6ZTpPamV9O2Z1bmN0aW9uIEFqZShpKXtsZXQgYT0tMTtmb3IoOysrYTxpLmxlbmd0aDspe2NvbnN0IGY9aVthXVsxXTsoZi50eXBlPT09ImxhYmVsSW1hZ2UifHxmLnR5cGU9PT0ibGFiZWxMaW5rInx8Zi50eXBlPT09ImxhYmVsRW5kIikmJihpLnNwbGljZShhKzEsZi50eXBlPT09ImxhYmVsSW1hZ2UiPzQ6MiksZi50eXBlPSJkYXRhIixhKyspfXJldHVybiBpfWZ1bmN0aW9uIExqZShpLGEpe2xldCBmPWkubGVuZ3RoLHA9MCx3LG0sYixFO2Zvcig7Zi0tOylpZih3PWlbZl1bMV0sbSl7aWYody50eXBlPT09ImxpbmsifHx3LnR5cGU9PT0ibGFiZWxMaW5rIiYmdy5faW5hY3RpdmUpYnJlYWs7aVtmXVswXT09PSJlbnRlciImJncudHlwZT09PSJsYWJlbExpbmsiJiYody5faW5hY3RpdmU9ITApfWVsc2UgaWYoYil7aWYoaVtmXVswXT09PSJlbnRlciImJih3LnR5cGU9PT0ibGFiZWxJbWFnZSJ8fHcudHlwZT09PSJsYWJlbExpbmsiKSYmIXcuX2JhbGFuY2VkJiYobT1mLHcudHlwZSE9PSJsYWJlbExpbmsiKSl7cD0yO2JyZWFrfX1lbHNlIHcudHlwZT09PSJsYWJlbEVuZCImJihiPWYpO2NvbnN0IF89e3R5cGU6aVttXVsxXS50eXBlPT09ImxhYmVsTGluayI/ImxpbmsiOiJpbWFnZSIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxpW21dWzFdLnN0YXJ0KSxlbmQ6T2JqZWN0LmFzc2lnbih7fSxpW2kubGVuZ3RoLTFdWzFdLmVuZCl9LEE9e3R5cGU6ImxhYmVsIixzdGFydDpPYmplY3QuYXNzaWduKHt9LGlbbV1bMV0uc3RhcnQpLGVuZDpPYmplY3QuYXNzaWduKHt9LGlbYl1bMV0uZW5kKX0sST17dHlwZToibGFiZWxUZXh0IixzdGFydDpPYmplY3QuYXNzaWduKHt9LGlbbStwKzJdWzFdLmVuZCksZW5kOk9iamVjdC5hc3NpZ24oe30saVtiLTJdWzFdLnN0YXJ0KX07cmV0dXJuIEU9W1siZW50ZXIiLF8sYV0sWyJlbnRlciIsQSxhXV0sRT1zdyhFLGkuc2xpY2UobSsxLG0rcCszKSksRT1zdyhFLFtbImVudGVyIixJLGFdXSksRT1zdyhFLF8wdChhLnBhcnNlci5jb25zdHJ1Y3RzLmluc2lkZVNwYW4ubnVsbCxpLnNsaWNlKG0rcCs0LGItMyksYSkpLEU9c3coRSxbWyJleGl0IixJLGFdLGlbYi0yXSxpW2ItMV0sWyJleGl0IixBLGFdXSksRT1zdyhFLGkuc2xpY2UoYisxKSksRT1zdyhFLFtbImV4aXQiLF8sYV1dKSxtMyhpLG0saS5sZW5ndGgsRSksaX1mdW5jdGlvbiBNamUoaSxhLGYpe2NvbnN0IHA9dGhpcztsZXQgdz1wLmV2ZW50cy5sZW5ndGgsbSxiO2Zvcig7dy0tOylpZigocC5ldmVudHNbd11bMV0udHlwZT09PSJsYWJlbEltYWdlInx8cC5ldmVudHNbd11bMV0udHlwZT09PSJsYWJlbExpbmsiKSYmIXAuZXZlbnRzW3ddWzFdLl9iYWxhbmNlZCl7bT1wLmV2ZW50c1t3XVsxXTticmVha31yZXR1cm4gRTtmdW5jdGlvbiBFKE4pe3JldHVybiBtP20uX2luYWN0aXZlP0IoTik6KGI9cC5wYXJzZXIuZGVmaW5lZC5pbmNsdWRlcyhvTChwLnNsaWNlU2VyaWFsaXplKHtzdGFydDptLmVuZCxlbmQ6cC5ub3coKX0pKSksaS5lbnRlcigibGFiZWxFbmQiKSxpLmVudGVyKCJsYWJlbE1hcmtlciIpLGkuY29uc3VtZShOKSxpLmV4aXQoImxhYmVsTWFya2VyIiksaS5leGl0KCJsYWJlbEVuZCIpLF8pOmYoTil9ZnVuY3Rpb24gXyhOKXtyZXR1cm4gTj09PTQwP2kuYXR0ZW1wdChDamUsSSxiP0k6QikoTik6Tj09PTkxP2kuYXR0ZW1wdChfamUsSSxiP0E6QikoTik6Yj9JKE4pOkIoTil9ZnVuY3Rpb24gQShOKXtyZXR1cm4gaS5hdHRlbXB0KFNqZSxJLEIpKE4pfWZ1bmN0aW9uIEkoTil7cmV0dXJuIGEoTil9ZnVuY3Rpb24gQihOKXtyZXR1cm4gbS5fYmFsYW5jZWQ9ITAsZihOKX19ZnVuY3Rpb24gRGplKGksYSxmKXtyZXR1cm4gcDtmdW5jdGlvbiBwKEIpe3JldHVybiBpLmVudGVyKCJyZXNvdXJjZSIpLGkuZW50ZXIoInJlc291cmNlTWFya2VyIiksaS5jb25zdW1lKEIpLGkuZXhpdCgicmVzb3VyY2VNYXJrZXIiKSx3fWZ1bmN0aW9uIHcoQil7cmV0dXJuIHBwKEIpP1RGKGksbSkoQik6bShCKX1mdW5jdGlvbiBtKEIpe3JldHVybiBCPT09NDE/SShCKTpZTnQoaSxiLEUsInJlc291cmNlRGVzdGluYXRpb24iLCJyZXNvdXJjZURlc3RpbmF0aW9uTGl0ZXJhbCIsInJlc291cmNlRGVzdGluYXRpb25MaXRlcmFsTWFya2VyIiwicmVzb3VyY2VEZXN0aW5hdGlvblJhdyIsInJlc291cmNlRGVzdGluYXRpb25TdHJpbmciLDMyKShCKX1mdW5jdGlvbiBiKEIpe3JldHVybiBwcChCKT9URihpLF8pKEIpOkkoQil9ZnVuY3Rpb24gRShCKXtyZXR1cm4gZihCKX1mdW5jdGlvbiBfKEIpe3JldHVybiBCPT09MzR8fEI9PT0zOXx8Qj09PTQwP1hOdChpLEEsZiwicmVzb3VyY2VUaXRsZSIsInJlc291cmNlVGl0bGVNYXJrZXIiLCJyZXNvdXJjZVRpdGxlU3RyaW5nIikoQik6SShCKX1mdW5jdGlvbiBBKEIpe3JldHVybiBwcChCKT9URihpLEkpKEIpOkkoQil9ZnVuY3Rpb24gSShCKXtyZXR1cm4gQj09PTQxPyhpLmVudGVyKCJyZXNvdXJjZU1hcmtlciIpLGkuY29uc3VtZShCKSxpLmV4aXQoInJlc291cmNlTWFya2VyIiksaS5leGl0KCJyZXNvdXJjZSIpLGEpOmYoQil9fWZ1bmN0aW9uIElqZShpLGEsZil7Y29uc3QgcD10aGlzO3JldHVybiB3O2Z1bmN0aW9uIHcoRSl7cmV0dXJuIEtOdC5jYWxsKHAsaSxtLGIsInJlZmVyZW5jZSIsInJlZmVyZW5jZU1hcmtlciIsInJlZmVyZW5jZVN0cmluZyIpKEUpfWZ1bmN0aW9uIG0oRSl7cmV0dXJuIHAucGFyc2VyLmRlZmluZWQuaW5jbHVkZXMob0wocC5zbGljZVNlcmlhbGl6ZShwLmV2ZW50c1twLmV2ZW50cy5sZW5ndGgtMV1bMV0pLnNsaWNlKDEsLTEpKSk/YShFKTpmKEUpfWZ1bmN0aW9uIGIoRSl7cmV0dXJuIGYoRSl9fWZ1bmN0aW9uIE9qZShpLGEsZil7cmV0dXJuIHA7ZnVuY3Rpb24gcChtKXtyZXR1cm4gaS5lbnRlcigicmVmZXJlbmNlIiksaS5lbnRlcigicmVmZXJlbmNlTWFya2VyIiksaS5jb25zdW1lKG0pLGkuZXhpdCgicmVmZXJlbmNlTWFya2VyIiksd31mdW5jdGlvbiB3KG0pe3JldHVybiBtPT09OTM/KGkuZW50ZXIoInJlZmVyZW5jZU1hcmtlciIpLGkuY29uc3VtZShtKSxpLmV4aXQoInJlZmVyZW5jZU1hcmtlciIpLGkuZXhpdCgicmVmZXJlbmNlIiksYSk6ZihtKX19Y29uc3QgUGplPXtuYW1lOiJsYWJlbFN0YXJ0SW1hZ2UiLHRva2VuaXplOkZqZSxyZXNvbHZlQWxsOk0wdC5yZXNvbHZlQWxsfTtmdW5jdGlvbiBGamUoaSxhLGYpe2NvbnN0IHA9dGhpcztyZXR1cm4gdztmdW5jdGlvbiB3KEUpe3JldHVybiBpLmVudGVyKCJsYWJlbEltYWdlIiksaS5lbnRlcigibGFiZWxJbWFnZU1hcmtlciIpLGkuY29uc3VtZShFKSxpLmV4aXQoImxhYmVsSW1hZ2VNYXJrZXIiKSxtfWZ1bmN0aW9uIG0oRSl7cmV0dXJuIEU9PT05MT8oaS5lbnRlcigibGFiZWxNYXJrZXIiKSxpLmNvbnN1bWUoRSksaS5leGl0KCJsYWJlbE1hcmtlciIpLGkuZXhpdCgibGFiZWxJbWFnZSIpLGIpOmYoRSl9ZnVuY3Rpb24gYihFKXtyZXR1cm4gRT09PTk0JiYiX2hpZGRlbkZvb3Rub3RlU3VwcG9ydCJpbiBwLnBhcnNlci5jb25zdHJ1Y3RzP2YoRSk6YShFKX19Y29uc3QgTmplPXtuYW1lOiJsYWJlbFN0YXJ0TGluayIsdG9rZW5pemU6QmplLHJlc29sdmVBbGw6TTB0LnJlc29sdmVBbGx9O2Z1bmN0aW9uIEJqZShpLGEsZil7Y29uc3QgcD10aGlzO3JldHVybiB3O2Z1bmN0aW9uIHcoYil7cmV0dXJuIGkuZW50ZXIoImxhYmVsTGluayIpLGkuZW50ZXIoImxhYmVsTWFya2VyIiksaS5jb25zdW1lKGIpLGkuZXhpdCgibGFiZWxNYXJrZXIiKSxpLmV4aXQoImxhYmVsTGluayIpLG19ZnVuY3Rpb24gbShiKXtyZXR1cm4gYj09PTk0JiYiX2hpZGRlbkZvb3Rub3RlU3VwcG9ydCJpbiBwLnBhcnNlci5jb25zdHJ1Y3RzP2YoYik6YShiKX19Y29uc3QgRDB0PXtuYW1lOiJsaW5lRW5kaW5nIix0b2tlbml6ZTpSamV9O2Z1bmN0aW9uIFJqZShpLGEpe3JldHVybiBmO2Z1bmN0aW9uIGYocCl7cmV0dXJuIGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUocCksaS5leGl0KCJsaW5lRW5kaW5nIiksaWwoaSxhLCJsaW5lUHJlZml4Iil9fWNvbnN0IHhZPXtuYW1lOiJ0aGVtYXRpY0JyZWFrIix0b2tlbml6ZTpqamV9O2Z1bmN0aW9uIGpqZShpLGEsZil7bGV0IHA9MCx3O3JldHVybiBtO2Z1bmN0aW9uIG0oQSl7cmV0dXJuIGkuZW50ZXIoInRoZW1hdGljQnJlYWsiKSxiKEEpfWZ1bmN0aW9uIGIoQSl7cmV0dXJuIHc9QSxFKEEpfWZ1bmN0aW9uIEUoQSl7cmV0dXJuIEE9PT13PyhpLmVudGVyKCJ0aGVtYXRpY0JyZWFrU2VxdWVuY2UiKSxfKEEpKTpwPj0zJiYoQT09PW51bGx8fHhhKEEpKT8oaS5leGl0KCJ0aGVtYXRpY0JyZWFrIiksYShBKSk6ZihBKX1mdW5jdGlvbiBfKEEpe3JldHVybiBBPT09dz8oaS5jb25zdW1lKEEpLHArKyxfKTooaS5leGl0KCJ0aGVtYXRpY0JyZWFrU2VxdWVuY2UiKSxXYyhBKT9pbChpLEUsIndoaXRlc3BhY2UiKShBKTpFKEEpKX19Y29uc3QgYnA9e25hbWU6Imxpc3QiLHRva2VuaXplOnFqZSxjb250aW51YXRpb246e3Rva2VuaXplOkhqZX0sZXhpdDpHamV9LCRqZT17dG9rZW5pemU6VWplLHBhcnRpYWw6ITB9LHpqZT17dG9rZW5pemU6VmplLHBhcnRpYWw6ITB9O2Z1bmN0aW9uIHFqZShpLGEsZil7Y29uc3QgcD10aGlzLHc9cC5ldmVudHNbcC5ldmVudHMubGVuZ3RoLTFdO2xldCBtPXcmJndbMV0udHlwZT09PSJsaW5lUHJlZml4Ij93WzJdLnNsaWNlU2VyaWFsaXplKHdbMV0sITApLmxlbmd0aDowLGI9MDtyZXR1cm4gRTtmdW5jdGlvbiBFKFIpe2NvbnN0IHo9cC5jb250YWluZXJTdGF0ZS50eXBlfHwoUj09PTQyfHxSPT09NDN8fFI9PT00NT8ibGlzdFVub3JkZXJlZCI6Imxpc3RPcmRlcmVkIik7aWYoej09PSJsaXN0VW5vcmRlcmVkIj8hcC5jb250YWluZXJTdGF0ZS5tYXJrZXJ8fFI9PT1wLmNvbnRhaW5lclN0YXRlLm1hcmtlcjpDMHQoUikpe2lmKHAuY29udGFpbmVyU3RhdGUudHlwZXx8KHAuY29udGFpbmVyU3RhdGUudHlwZT16LGkuZW50ZXIoeix7X2NvbnRhaW5lcjohMH0pKSx6PT09Imxpc3RVbm9yZGVyZWQiKXJldHVybiBpLmVudGVyKCJsaXN0SXRlbVByZWZpeCIpLFI9PT00Mnx8Uj09PTQ1P2kuY2hlY2soeFksZixBKShSKTpBKFIpO2lmKCFwLmludGVycnVwdHx8Uj09PTQ5KXJldHVybiBpLmVudGVyKCJsaXN0SXRlbVByZWZpeCIpLGkuZW50ZXIoImxpc3RJdGVtVmFsdWUiKSxfKFIpfXJldHVybiBmKFIpfWZ1bmN0aW9uIF8oUil7cmV0dXJuIEMwdChSKSYmKytiPDEwPyhpLmNvbnN1bWUoUiksXyk6KCFwLmludGVycnVwdHx8YjwyKSYmKHAuY29udGFpbmVyU3RhdGUubWFya2VyP1I9PT1wLmNvbnRhaW5lclN0YXRlLm1hcmtlcjpSPT09NDF8fFI9PT00Nik/KGkuZXhpdCgibGlzdEl0ZW1WYWx1ZSIpLEEoUikpOmYoUil9ZnVuY3Rpb24gQShSKXtyZXR1cm4gaS5lbnRlcigibGlzdEl0ZW1NYXJrZXIiKSxpLmNvbnN1bWUoUiksaS5leGl0KCJsaXN0SXRlbU1hcmtlciIpLHAuY29udGFpbmVyU3RhdGUubWFya2VyPXAuY29udGFpbmVyU3RhdGUubWFya2VyfHxSLGkuY2hlY2soeVkscC5pbnRlcnJ1cHQ/ZjpJLGkuYXR0ZW1wdCgkamUsTixCKSl9ZnVuY3Rpb24gSShSKXtyZXR1cm4gcC5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lPSEwLG0rKyxOKFIpfWZ1bmN0aW9uIEIoUil7cmV0dXJuIFdjKFIpPyhpLmVudGVyKCJsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UiKSxpLmNvbnN1bWUoUiksaS5leGl0KCJsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UiKSxOKTpmKFIpfWZ1bmN0aW9uIE4oUil7cmV0dXJuIHAuY29udGFpbmVyU3RhdGUuc2l6ZT1tK3Auc2xpY2VTZXJpYWxpemUoaS5leGl0KCJsaXN0SXRlbVByZWZpeCIpLCEwKS5sZW5ndGgsYShSKX19ZnVuY3Rpb24gSGplKGksYSxmKXtjb25zdCBwPXRoaXM7cmV0dXJuIHAuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdz12b2lkIDAsaS5jaGVjayh5WSx3LG0pO2Z1bmN0aW9uIHcoRSl7cmV0dXJuIHAuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXM9cC5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lc3x8cC5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lLGlsKGksYSwibGlzdEl0ZW1JbmRlbnQiLHAuY29udGFpbmVyU3RhdGUuc2l6ZSsxKShFKX1mdW5jdGlvbiBtKEUpe3JldHVybiBwLmNvbnRhaW5lclN0YXRlLmZ1cnRoZXJCbGFua0xpbmVzfHwhV2MoRSk/KHAuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXM9dm9pZCAwLHAuY29udGFpbmVyU3RhdGUuaW5pdGlhbEJsYW5rTGluZT12b2lkIDAsYihFKSk6KHAuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXM9dm9pZCAwLHAuY29udGFpbmVyU3RhdGUuaW5pdGlhbEJsYW5rTGluZT12b2lkIDAsaS5hdHRlbXB0KHpqZSxhLGIpKEUpKX1mdW5jdGlvbiBiKEUpe3JldHVybiBwLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3c9ITAscC5pbnRlcnJ1cHQ9dm9pZCAwLGlsKGksaS5hdHRlbXB0KGJwLGEsZiksImxpbmVQcmVmaXgiLHAucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKT92b2lkIDA6NCkoRSl9fWZ1bmN0aW9uIFZqZShpLGEsZil7Y29uc3QgcD10aGlzO3JldHVybiBpbChpLHcsImxpc3RJdGVtSW5kZW50IixwLmNvbnRhaW5lclN0YXRlLnNpemUrMSk7ZnVuY3Rpb24gdyhtKXtjb25zdCBiPXAuZXZlbnRzW3AuZXZlbnRzLmxlbmd0aC0xXTtyZXR1cm4gYiYmYlsxXS50eXBlPT09Imxpc3RJdGVtSW5kZW50IiYmYlsyXS5zbGljZVNlcmlhbGl6ZShiWzFdLCEwKS5sZW5ndGg9PT1wLmNvbnRhaW5lclN0YXRlLnNpemU/YShtKTpmKG0pfX1mdW5jdGlvbiBHamUoaSl7aS5leGl0KHRoaXMuY29udGFpbmVyU3RhdGUudHlwZSl9ZnVuY3Rpb24gVWplKGksYSxmKXtjb25zdCBwPXRoaXM7cmV0dXJuIGlsKGksdywibGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlIixwLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIik/dm9pZCAwOjQrMSk7ZnVuY3Rpb24gdyhtKXtjb25zdCBiPXAuZXZlbnRzW3AuZXZlbnRzLmxlbmd0aC0xXTtyZXR1cm4hV2MobSkmJmImJmJbMV0udHlwZT09PSJsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UiP2EobSk6ZihtKX19Y29uc3QgWk50PXtuYW1lOiJzZXRleHRVbmRlcmxpbmUiLHRva2VuaXplOllqZSxyZXNvbHZlVG86V2plfTtmdW5jdGlvbiBXamUoaSxhKXtsZXQgZj1pLmxlbmd0aCxwLHcsbTtmb3IoO2YtLTspaWYoaVtmXVswXT09PSJlbnRlciIpe2lmKGlbZl1bMV0udHlwZT09PSJjb250ZW50Iil7cD1mO2JyZWFrfWlbZl1bMV0udHlwZT09PSJwYXJhZ3JhcGgiJiYodz1mKX1lbHNlIGlbZl1bMV0udHlwZT09PSJjb250ZW50IiYmaS5zcGxpY2UoZiwxKSwhbSYmaVtmXVsxXS50eXBlPT09ImRlZmluaXRpb24iJiYobT1mKTtjb25zdCBiPXt0eXBlOiJzZXRleHRIZWFkaW5nIixzdGFydDpPYmplY3QuYXNzaWduKHt9LGlbd11bMV0uc3RhcnQpLGVuZDpPYmplY3QuYXNzaWduKHt9LGlbaS5sZW5ndGgtMV1bMV0uZW5kKX07cmV0dXJuIGlbd11bMV0udHlwZT0ic2V0ZXh0SGVhZGluZ1RleHQiLG0/KGkuc3BsaWNlKHcsMCxbImVudGVyIixiLGFdKSxpLnNwbGljZShtKzEsMCxbImV4aXQiLGlbcF1bMV0sYV0pLGlbcF1bMV0uZW5kPU9iamVjdC5hc3NpZ24oe30saVttXVsxXS5lbmQpKTppW3BdWzFdPWIsaS5wdXNoKFsiZXhpdCIsYixhXSksaX1mdW5jdGlvbiBZamUoaSxhLGYpe2NvbnN0IHA9dGhpcztsZXQgdztyZXR1cm4gbTtmdW5jdGlvbiBtKEEpe2xldCBJPXAuZXZlbnRzLmxlbmd0aCxCO2Zvcig7SS0tOylpZihwLmV2ZW50c1tJXVsxXS50eXBlIT09ImxpbmVFbmRpbmciJiZwLmV2ZW50c1tJXVsxXS50eXBlIT09ImxpbmVQcmVmaXgiJiZwLmV2ZW50c1tJXVsxXS50eXBlIT09ImNvbnRlbnQiKXtCPXAuZXZlbnRzW0ldWzFdLnR5cGU9PT0icGFyYWdyYXBoIjticmVha31yZXR1cm4hcC5wYXJzZXIubGF6eVtwLm5vdygpLmxpbmVdJiYocC5pbnRlcnJ1cHR8fEIpPyhpLmVudGVyKCJzZXRleHRIZWFkaW5nTGluZSIpLHc9QSxiKEEpKTpmKEEpfWZ1bmN0aW9uIGIoQSl7cmV0dXJuIGkuZW50ZXIoInNldGV4dEhlYWRpbmdMaW5lU2VxdWVuY2UiKSxFKEEpfWZ1bmN0aW9uIEUoQSl7cmV0dXJuIEE9PT13PyhpLmNvbnN1bWUoQSksRSk6KGkuZXhpdCgic2V0ZXh0SGVhZGluZ0xpbmVTZXF1ZW5jZSIpLFdjKEEpP2lsKGksXywibGluZVN1ZmZpeCIpKEEpOl8oQSkpfWZ1bmN0aW9uIF8oQSl7cmV0dXJuIEE9PT1udWxsfHx4YShBKT8oaS5leGl0KCJzZXRleHRIZWFkaW5nTGluZSIpLGEoQSkpOmYoQSl9fWNvbnN0IEtqZT17dG9rZW5pemU6WGplfTtmdW5jdGlvbiBYamUoaSl7Y29uc3QgYT10aGlzLGY9aS5hdHRlbXB0KHlZLHAsaS5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZmxvd0luaXRpYWwsdyxpbChpLGkuYXR0ZW1wdCh0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmZsb3csdyxpLmF0dGVtcHQoZWplLHcpKSwibGluZVByZWZpeCIpKSk7cmV0dXJuIGY7ZnVuY3Rpb24gcChtKXtpZihtPT09bnVsbCl7aS5jb25zdW1lKG0pO3JldHVybn1yZXR1cm4gaS5lbnRlcigibGluZUVuZGluZ0JsYW5rIiksaS5jb25zdW1lKG0pLGkuZXhpdCgibGluZUVuZGluZ0JsYW5rIiksYS5jdXJyZW50Q29uc3RydWN0PXZvaWQgMCxmfWZ1bmN0aW9uIHcobSl7aWYobT09PW51bGwpe2kuY29uc3VtZShtKTtyZXR1cm59cmV0dXJuIGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUobSksaS5leGl0KCJsaW5lRW5kaW5nIiksYS5jdXJyZW50Q29uc3RydWN0PXZvaWQgMCxmfX1jb25zdCBRamU9e3Jlc29sdmVBbGw6dEJ0KCl9LFpqZT1KTnQoInN0cmluZyIpLEpqZT1KTnQoInRleHQiKTtmdW5jdGlvbiBKTnQoaSl7cmV0dXJue3Rva2VuaXplOmEscmVzb2x2ZUFsbDp0QnQoaT09PSJ0ZXh0Ij90JGU6dm9pZCAwKX07ZnVuY3Rpb24gYShmKXtjb25zdCBwPXRoaXMsdz10aGlzLnBhcnNlci5jb25zdHJ1Y3RzW2ldLG09Zi5hdHRlbXB0KHcsYixFKTtyZXR1cm4gYjtmdW5jdGlvbiBiKEkpe3JldHVybiBBKEkpP20oSSk6RShJKX1mdW5jdGlvbiBFKEkpe2lmKEk9PT1udWxsKXtmLmNvbnN1bWUoSSk7cmV0dXJufXJldHVybiBmLmVudGVyKCJkYXRhIiksZi5jb25zdW1lKEkpLF99ZnVuY3Rpb24gXyhJKXtyZXR1cm4gQShJKT8oZi5leGl0KCJkYXRhIiksbShJKSk6KGYuY29uc3VtZShJKSxfKX1mdW5jdGlvbiBBKEkpe2lmKEk9PT1udWxsKXJldHVybiEwO2NvbnN0IEI9d1tJXTtsZXQgTj0tMTtpZihCKWZvcig7KytOPEIubGVuZ3RoOyl7Y29uc3QgUj1CW05dO2lmKCFSLnByZXZpb3VzfHxSLnByZXZpb3VzLmNhbGwocCxwLnByZXZpb3VzKSlyZXR1cm4hMH1yZXR1cm4hMX19fWZ1bmN0aW9uIHRCdChpKXtyZXR1cm4gYTtmdW5jdGlvbiBhKGYscCl7bGV0IHc9LTEsbTtmb3IoOysrdzw9Zi5sZW5ndGg7KW09PT12b2lkIDA/Zlt3XSYmZlt3XVsxXS50eXBlPT09ImRhdGEiJiYobT13LHcrKyk6KCFmW3ddfHxmW3ddWzFdLnR5cGUhPT0iZGF0YSIpJiYodyE9PW0rMiYmKGZbbV1bMV0uZW5kPWZbdy0xXVsxXS5lbmQsZi5zcGxpY2UobSsyLHctbS0yKSx3PW0rMiksbT12b2lkIDApO3JldHVybiBpP2koZixwKTpmfX1mdW5jdGlvbiB0JGUoaSxhKXtsZXQgZj0wO2Zvcig7KytmPD1pLmxlbmd0aDspaWYoKGY9PT1pLmxlbmd0aHx8aVtmXVsxXS50eXBlPT09ImxpbmVFbmRpbmciKSYmaVtmLTFdWzFdLnR5cGU9PT0iZGF0YSIpe2NvbnN0IHA9aVtmLTFdWzFdLHc9YS5zbGljZVN0cmVhbShwKTtsZXQgbT13Lmxlbmd0aCxiPS0xLEU9MCxfO2Zvcig7bS0tOyl7Y29uc3QgQT13W21dO2lmKHR5cGVvZiBBPT0ic3RyaW5nIil7Zm9yKGI9QS5sZW5ndGg7QS5jaGFyQ29kZUF0KGItMSk9PT0zMjspRSsrLGItLTtpZihiKWJyZWFrO2I9LTF9ZWxzZSBpZihBPT09LTIpXz0hMCxFKys7ZWxzZSBpZihBIT09LTEpe20rKzticmVha319aWYoRSl7Y29uc3QgQT17dHlwZTpmPT09aS5sZW5ndGh8fF98fEU8Mj8ibGluZVN1ZmZpeCI6ImhhcmRCcmVha1RyYWlsaW5nIixzdGFydDp7bGluZTpwLmVuZC5saW5lLGNvbHVtbjpwLmVuZC5jb2x1bW4tRSxvZmZzZXQ6cC5lbmQub2Zmc2V0LUUsX2luZGV4OnAuc3RhcnQuX2luZGV4K20sX2J1ZmZlckluZGV4Om0/YjpwLnN0YXJ0Ll9idWZmZXJJbmRleCtifSxlbmQ6T2JqZWN0LmFzc2lnbih7fSxwLmVuZCl9O3AuZW5kPU9iamVjdC5hc3NpZ24oe30sQS5zdGFydCkscC5zdGFydC5vZmZzZXQ9PT1wLmVuZC5vZmZzZXQ/T2JqZWN0LmFzc2lnbihwLEEpOihpLnNwbGljZShmLDAsWyJlbnRlciIsQSxhXSxbImV4aXQiLEEsYV0pLGYrPTIpfWYrK31yZXR1cm4gaX1mdW5jdGlvbiBlJGUoaSxhLGYpe2xldCBwPU9iamVjdC5hc3NpZ24oZj9PYmplY3QuYXNzaWduKHt9LGYpOntsaW5lOjEsY29sdW1uOjEsb2Zmc2V0OjB9LHtfaW5kZXg6MCxfYnVmZmVySW5kZXg6LTF9KTtjb25zdCB3PXt9LG09W107bGV0IGI9W10sRT1bXTtjb25zdCBfPXtjb25zdW1lOmF0LGVudGVyOmJ0LGV4aXQ6bXQsYXR0ZW1wdDp1dCh5dCksY2hlY2s6dXQoZnQpLGludGVycnVwdDp1dChmdCx7aW50ZXJydXB0OiEwfSl9LEE9e3ByZXZpb3VzOm51bGwsY29kZTpudWxsLGNvbnRhaW5lclN0YXRlOnt9LGV2ZW50czpbXSxwYXJzZXI6aSxzbGljZVN0cmVhbTpSLHNsaWNlU2VyaWFsaXplOk4sbm93OnosZGVmaW5lU2tpcDpXLHdyaXRlOkJ9O2xldCBJPWEudG9rZW5pemUuY2FsbChBLF8pO3JldHVybiBhLnJlc29sdmVBbGwmJm0ucHVzaChhKSxBO2Z1bmN0aW9uIEIoVSl7cmV0dXJuIGI9c3coYixVKSxldCgpLGJbYi5sZW5ndGgtMV0hPT1udWxsP1tdOih2dChhLDApLEEuZXZlbnRzPV8wdChtLEEuZXZlbnRzLEEpLEEuZXZlbnRzKX1mdW5jdGlvbiBOKFUsVHQpe3JldHVybiByJGUoUihVKSxUdCl9ZnVuY3Rpb24gUihVKXtyZXR1cm4gbiRlKGIsVSl9ZnVuY3Rpb24geigpe2NvbnN0e2xpbmU6VSxjb2x1bW46VHQsb2Zmc2V0Om50LF9pbmRleDpJdCxfYnVmZmVySW5kZXg6T3R9PXA7cmV0dXJue2xpbmU6VSxjb2x1bW46VHQsb2Zmc2V0Om50LF9pbmRleDpJdCxfYnVmZmVySW5kZXg6T3R9fWZ1bmN0aW9uIFcoVSl7d1tVLmxpbmVdPVUuY29sdW1uLHB0KCl9ZnVuY3Rpb24gZXQoKXtsZXQgVTtmb3IoO3AuX2luZGV4PGIubGVuZ3RoOyl7Y29uc3QgVHQ9YltwLl9pbmRleF07aWYodHlwZW9mIFR0PT0ic3RyaW5nIilmb3IoVT1wLl9pbmRleCxwLl9idWZmZXJJbmRleDwwJiYocC5fYnVmZmVySW5kZXg9MCk7cC5faW5kZXg9PT1VJiZwLl9idWZmZXJJbmRleDxUdC5sZW5ndGg7KXN0KFR0LmNoYXJDb2RlQXQocC5fYnVmZmVySW5kZXgpKTtlbHNlIHN0KFR0KX19ZnVuY3Rpb24gc3QoVSl7ST1JKFUpfWZ1bmN0aW9uIGF0KFUpe3hhKFUpPyhwLmxpbmUrKyxwLmNvbHVtbj0xLHAub2Zmc2V0Kz1VPT09LTM/MjoxLHB0KCkpOlUhPT0tMSYmKHAuY29sdW1uKysscC5vZmZzZXQrKykscC5fYnVmZmVySW5kZXg8MD9wLl9pbmRleCsrOihwLl9idWZmZXJJbmRleCsrLHAuX2J1ZmZlckluZGV4PT09YltwLl9pbmRleF0ubGVuZ3RoJiYocC5fYnVmZmVySW5kZXg9LTEscC5faW5kZXgrKykpLEEucHJldmlvdXM9VX1mdW5jdGlvbiBidChVLFR0KXtjb25zdCBudD1UdHx8e307cmV0dXJuIG50LnR5cGU9VSxudC5zdGFydD16KCksQS5ldmVudHMucHVzaChbImVudGVyIixudCxBXSksRS5wdXNoKG50KSxudH1mdW5jdGlvbiBtdChVKXtjb25zdCBUdD1FLnBvcCgpO3JldHVybiBUdC5lbmQ9eigpLEEuZXZlbnRzLnB1c2goWyJleGl0IixUdCxBXSksVHR9ZnVuY3Rpb24geXQoVSxUdCl7dnQoVSxUdC5mcm9tKX1mdW5jdGlvbiBmdChVLFR0KXtUdC5yZXN0b3JlKCl9ZnVuY3Rpb24gdXQoVSxUdCl7cmV0dXJuIG50O2Z1bmN0aW9uIG50KEl0LE90LEJ0KXtsZXQgRXQsWixDdCx4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShJdCk/TGUoSXQpOiJ0b2tlbml6ZSJpbiBJdD9MZShbSXRdKTpIdChJdCk7ZnVuY3Rpb24gSHQobWUpe3JldHVybiBWZTtmdW5jdGlvbiBWZShZZSl7Y29uc3QgY2U9WWUhPT1udWxsJiZtZVtZZV0sa2U9WWUhPT1udWxsJiZtZS5udWxsLHp0PVsuLi5BcnJheS5pc0FycmF5KGNlKT9jZTpjZT9bY2VdOltdLC4uLkFycmF5LmlzQXJyYXkoa2UpP2tlOmtlP1trZV06W11dO3JldHVybiBMZSh6dCkoWWUpfX1mdW5jdGlvbiBMZShtZSl7cmV0dXJuIEV0PW1lLFo9MCxtZS5sZW5ndGg9PT0wP0J0OkZ0KG1lW1pdKX1mdW5jdGlvbiBGdChtZSl7cmV0dXJuIFZlO2Z1bmN0aW9uIFZlKFllKXtyZXR1cm4geHQ9WCgpLEN0PW1lLG1lLnBhcnRpYWx8fChBLmN1cnJlbnRDb25zdHJ1Y3Q9bWUpLG1lLm5hbWUmJkEucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKG1lLm5hbWUpP1NlKCk6bWUudG9rZW5pemUuY2FsbChUdD9PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoQSksVHQpOkEsXyxnbixTZSkoWWUpfX1mdW5jdGlvbiBnbihtZSl7cmV0dXJuIFUoQ3QseHQpLE90fWZ1bmN0aW9uIFNlKG1lKXtyZXR1cm4geHQucmVzdG9yZSgpLCsrWjxFdC5sZW5ndGg/RnQoRXRbWl0pOkJ0fX19ZnVuY3Rpb24gdnQoVSxUdCl7VS5yZXNvbHZlQWxsJiYhbS5pbmNsdWRlcyhVKSYmbS5wdXNoKFUpLFUucmVzb2x2ZSYmbTMoQS5ldmVudHMsVHQsQS5ldmVudHMubGVuZ3RoLVR0LFUucmVzb2x2ZShBLmV2ZW50cy5zbGljZShUdCksQSkpLFUucmVzb2x2ZVRvJiYoQS5ldmVudHM9VS5yZXNvbHZlVG8oQS5ldmVudHMsQSkpfWZ1bmN0aW9uIFgoKXtjb25zdCBVPXooKSxUdD1BLnByZXZpb3VzLG50PUEuY3VycmVudENvbnN0cnVjdCxJdD1BLmV2ZW50cy5sZW5ndGgsT3Q9QXJyYXkuZnJvbShFKTtyZXR1cm57cmVzdG9yZTpCdCxmcm9tOkl0fTtmdW5jdGlvbiBCdCgpe3A9VSxBLnByZXZpb3VzPVR0LEEuY3VycmVudENvbnN0cnVjdD1udCxBLmV2ZW50cy5sZW5ndGg9SXQsRT1PdCxwdCgpfX1mdW5jdGlvbiBwdCgpe3AubGluZSBpbiB3JiZwLmNvbHVtbjwyJiYocC5jb2x1bW49d1twLmxpbmVdLHAub2Zmc2V0Kz13W3AubGluZV0tMSl9fWZ1bmN0aW9uIG4kZShpLGEpe2NvbnN0IGY9YS5zdGFydC5faW5kZXgscD1hLnN0YXJ0Ll9idWZmZXJJbmRleCx3PWEuZW5kLl9pbmRleCxtPWEuZW5kLl9idWZmZXJJbmRleDtsZXQgYjtpZihmPT09dyliPVtpW2ZdLnNsaWNlKHAsbSldO2Vsc2V7aWYoYj1pLnNsaWNlKGYsdykscD4tMSl7Y29uc3QgRT1iWzBdO3R5cGVvZiBFPT0ic3RyaW5nIj9iWzBdPUUuc2xpY2UocCk6Yi5zaGlmdCgpfW0+MCYmYi5wdXNoKGlbd10uc2xpY2UoMCxtKSl9cmV0dXJuIGJ9ZnVuY3Rpb24gciRlKGksYSl7bGV0IGY9LTE7Y29uc3QgcD1bXTtsZXQgdztmb3IoOysrZjxpLmxlbmd0aDspe2NvbnN0IG09aVtmXTtsZXQgYjtpZih0eXBlb2YgbT09InN0cmluZyIpYj1tO2Vsc2Ugc3dpdGNoKG0pe2Nhc2UtNTp7Yj0iXHIiO2JyZWFrfWNhc2UtNDp7Yj1gCmA7YnJlYWt9Y2FzZS0zOntiPWBccgpgO2JyZWFrfWNhc2UtMjp7Yj1hPyIgIjoiCSI7YnJlYWt9Y2FzZS0xOntpZighYSYmdyljb250aW51ZTtiPSIgIjticmVha31kZWZhdWx0OmI9U3RyaW5nLmZyb21DaGFyQ29kZShtKX13PW09PT0tMixwLnB1c2goYil9cmV0dXJuIHAuam9pbigiIil9Y29uc3QgaSRlPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxhdHRlbnRpb25NYXJrZXJzOntudWxsOls0Miw5NV19LGNvbnRlbnRJbml0aWFsOns5MTphamV9LGRpc2FibGU6e251bGw6W119LGRvY3VtZW50Ons0MjpicCw0MzpicCw0NTpicCw0ODpicCw0OTpicCw1MDpicCw1MTpicCw1MjpicCw1MzpicCw1NDpicCw1NTpicCw1NjpicCw1NzpicCw2Mjp6TnR9LGZsb3c6ezM1OmZqZSw0Mjp4WSw0NTpbWk50LHhZXSw2MDpiamUsNjE6Wk50LDk1OnhZLDk2OlVOdCwxMjY6VU50fSxmbG93SW5pdGlhbDp7Wy0yXTpMMHQsWy0xXTpMMHQsMzI6TDB0fSxpbnNpZGVTcGFuOntudWxsOltTMHQsUWplXX0sc3RyaW5nOnszODpWTnQsOTI6cU50fSx0ZXh0OntbLTVdOkQwdCxbLTRdOkQwdCxbLTNdOkQwdCwzMzpQamUsMzg6Vk50LDQyOlMwdCw2MDpbQlJlLEVqZV0sOTE6TmplLDkyOltsamUscU50XSw5MzpNMHQsOTU6UzB0LDk2OlhSZX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7ZnVuY3Rpb24gcyRlKGkpe2NvbnN0IGY9eFJlKFtpJGUsLi4uKGl8fHt9KS5leHRlbnNpb25zfHxbXV0pLHA9e2RlZmluZWQ6W10sbGF6eTp7fSxjb25zdHJ1Y3RzOmYsY29udGVudDp3KE1SZSksZG9jdW1lbnQ6dyhJUmUpLGZsb3c6dyhLamUpLHN0cmluZzp3KFpqZSksdGV4dDp3KEpqZSl9O3JldHVybiBwO2Z1bmN0aW9uIHcobSl7cmV0dXJuIGI7ZnVuY3Rpb24gYihFKXtyZXR1cm4gZSRlKHAsbSxFKX19fWNvbnN0IGVCdD0vW1wwXHRcblxyXS9nO2Z1bmN0aW9uIGEkZSgpe2xldCBpPTEsYT0iIixmPSEwLHA7cmV0dXJuIHc7ZnVuY3Rpb24gdyhtLGIsRSl7Y29uc3QgXz1bXTtsZXQgQSxJLEIsTixSO2ZvcihtPWErbS50b1N0cmluZyhiKSxCPTAsYT0iIixmJiYobS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJkIrKyxmPXZvaWQgMCk7QjxtLmxlbmd0aDspe2lmKGVCdC5sYXN0SW5kZXg9QixBPWVCdC5leGVjKG0pLE49QSYmQS5pbmRleCE9PXZvaWQgMD9BLmluZGV4Om0ubGVuZ3RoLFI9bS5jaGFyQ29kZUF0KE4pLCFBKXthPW0uc2xpY2UoQik7YnJlYWt9aWYoUj09PTEwJiZCPT09TiYmcClfLnB1c2goLTMpLHA9dm9pZCAwO2Vsc2Ugc3dpdGNoKHAmJihfLnB1c2goLTUpLHA9dm9pZCAwKSxCPE4mJihfLnB1c2gobS5zbGljZShCLE4pKSxpKz1OLUIpLFIpe2Nhc2UgMDp7Xy5wdXNoKDY1NTMzKSxpKys7YnJlYWt9Y2FzZSA5Ontmb3IoST1NYXRoLmNlaWwoaS80KSo0LF8ucHVzaCgtMik7aSsrPEk7KV8ucHVzaCgtMSk7YnJlYWt9Y2FzZSAxMDp7Xy5wdXNoKC00KSxpPTE7YnJlYWt9ZGVmYXVsdDpwPSEwLGk9MX1CPU4rMX1yZXR1cm4gRSYmKHAmJl8ucHVzaCgtNSksYSYmXy5wdXNoKGEpLF8ucHVzaChudWxsKSksX319ZnVuY3Rpb24gbyRlKGkpe2Zvcig7IVdOdChpKTspO3JldHVybiBpfWZ1bmN0aW9uIG5CdChpLGEpe2NvbnN0IGY9TnVtYmVyLnBhcnNlSW50KGksYSk7cmV0dXJuIGY8OXx8Zj09PTExfHxmPjEzJiZmPDMyfHxmPjEyNiYmZjwxNjB8fGY+NTUyOTUmJmY8NTczNDR8fGY+NjQ5NzUmJmY8NjUwMDh8fChmJjY1NTM1KT09PTY1NTM1fHwoZiY2NTUzNSk9PT02NTUzNHx8Zj4xMTE0MTExPyLvv70iOlN0cmluZy5mcm9tQ2hhckNvZGUoZil9Y29uc3QgYyRlPS9cXChbIS0vOi1AWy1gey1+XSl8JigjKD86XGR7MSw3fXx4W1xkYS1mXXsxLDZ9KXxbXGRhLXpdezEsMzF9KTsvZ2k7ZnVuY3Rpb24gdSRlKGkpe3JldHVybiBpLnJlcGxhY2UoYyRlLGwkZSl9ZnVuY3Rpb24gbCRlKGksYSxmKXtpZihhKXJldHVybiBhO2lmKGYuY2hhckNvZGVBdCgwKT09PTM1KXtjb25zdCB3PWYuY2hhckNvZGVBdCgxKSxtPXc9PT0xMjB8fHc9PT04ODtyZXR1cm4gbkJ0KGYuc2xpY2UobT8yOjEpLG0/MTY6MTApfXJldHVybiBBMHQoZil8fGl9ZnVuY3Rpb24ga1koaSl7cmV0dXJuIWl8fHR5cGVvZiBpIT0ib2JqZWN0Ij8iIjoicG9zaXRpb24iaW4gaXx8InR5cGUiaW4gaT9yQnQoaS5wb3NpdGlvbik6InN0YXJ0ImluIGl8fCJlbmQiaW4gaT9yQnQoaSk6ImxpbmUiaW4gaXx8ImNvbHVtbiJpbiBpP0kwdChpKToiIn1mdW5jdGlvbiBJMHQoaSl7cmV0dXJuIGlCdChpJiZpLmxpbmUpKyI6IitpQnQoaSYmaS5jb2x1bW4pfWZ1bmN0aW9uIHJCdChpKXtyZXR1cm4gSTB0KGkmJmkuc3RhcnQpKyItIitJMHQoaSYmaS5lbmQpfWZ1bmN0aW9uIGlCdChpKXtyZXR1cm4gaSYmdHlwZW9mIGk9PSJudW1iZXIiP2k6MX1jb25zdCBzQnQ9e30uaGFzT3duUHJvcGVydHksYUJ0PWZ1bmN0aW9uKGksYSxmKXtyZXR1cm4gdHlwZW9mIGEhPSJzdHJpbmciJiYoZj1hLGE9dm9pZCAwKSxoJGUoZikobyRlKHMkZShmKS5kb2N1bWVudCgpLndyaXRlKGEkZSgpKGksYSwhMCkpKSl9O2Z1bmN0aW9uIGgkZShpKXtjb25zdCBhPXt0cmFuc2Zvcm1zOltdLGNhbkNvbnRhaW5Fb2xzOlsiZW1waGFzaXMiLCJmcmFnbWVudCIsImhlYWRpbmciLCJwYXJhZ3JhcGgiLCJzdHJvbmciXSxlbnRlcjp7YXV0b2xpbms6RShLcyksYXV0b2xpbmtQcm90b2NvbDpVLGF1dG9saW5rRW1haWw6VSxhdHhIZWFkaW5nOkUoTWUpLGJsb2NrUXVvdGU6RSh6dCksY2hhcmFjdGVyRXNjYXBlOlUsY2hhcmFjdGVyUmVmZXJlbmNlOlUsY29kZUZlbmNlZDpFKHJlKSxjb2RlRmVuY2VkRmVuY2VJbmZvOl8sY29kZUZlbmNlZEZlbmNlTWV0YTpfLGNvZGVJbmRlbnRlZDpFKHJlLF8pLGNvZGVUZXh0OkUoc2UsXyksY29kZVRleHREYXRhOlUsZGF0YTpVLGNvZGVGbG93VmFsdWU6VSxkZWZpbml0aW9uOkUoUGUpLGRlZmluaXRpb25EZXN0aW5hdGlvblN0cmluZzpfLGRlZmluaXRpb25MYWJlbFN0cmluZzpfLGRlZmluaXRpb25UaXRsZVN0cmluZzpfLGVtcGhhc2lzOkUodGUpLGhhcmRCcmVha0VzY2FwZTpFKGRlKSxoYXJkQnJlYWtUcmFpbGluZzpFKGRlKSxodG1sRmxvdzpFKG9uLF8pLGh0bWxGbG93RGF0YTpVLGh0bWxUZXh0OkUob24sXyksaHRtbFRleHREYXRhOlUsaW1hZ2U6RShuaSksbGFiZWw6XyxsaW5rOkUoS3MpLGxpc3RJdGVtOkUoZm8pLGxpc3RJdGVtVmFsdWU6eixsaXN0T3JkZXJlZDpFKHdzLFIpLGxpc3RVbm9yZGVyZWQ6RSh3cykscGFyYWdyYXBoOkUoWGkpLHJlZmVyZW5jZTpTZSxyZWZlcmVuY2VTdHJpbmc6XyxyZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nOl8scmVzb3VyY2VUaXRsZVN0cmluZzpfLHNldGV4dEhlYWRpbmc6RShNZSksc3Ryb25nOkUoRXIpLHRoZW1hdGljQnJlYWs6RShkaSl9LGV4aXQ6e2F0eEhlYWRpbmc6SSgpLGF0eEhlYWRpbmdTZXF1ZW5jZTp1dCxhdXRvbGluazpJKCksYXV0b2xpbmtFbWFpbDprZSxhdXRvbGlua1Byb3RvY29sOmNlLGJsb2NrUXVvdGU6SSgpLGNoYXJhY3RlckVzY2FwZVZhbHVlOlR0LGNoYXJhY3RlclJlZmVyZW5jZU1hcmtlckhleGFkZWNpbWFsOlZlLGNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWM6VmUsY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWU6WWUsY29kZUZlbmNlZDpJKGF0KSxjb2RlRmVuY2VkRmVuY2U6c3QsY29kZUZlbmNlZEZlbmNlSW5mbzpXLGNvZGVGZW5jZWRGZW5jZU1ldGE6ZXQsY29kZUZsb3dWYWx1ZTpUdCxjb2RlSW5kZW50ZWQ6SShidCksY29kZVRleHQ6SShFdCksY29kZVRleHREYXRhOlR0LGRhdGE6VHQsZGVmaW5pdGlvbjpJKCksZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nOmZ0LGRlZmluaXRpb25MYWJlbFN0cmluZzptdCxkZWZpbml0aW9uVGl0bGVTdHJpbmc6eXQsZW1waGFzaXM6SSgpLGhhcmRCcmVha0VzY2FwZTpJKEl0KSxoYXJkQnJlYWtUcmFpbGluZzpJKEl0KSxodG1sRmxvdzpJKE90KSxodG1sRmxvd0RhdGE6VHQsaHRtbFRleHQ6SShCdCksaHRtbFRleHREYXRhOlR0LGltYWdlOkkoQ3QpLGxhYmVsOkh0LGxhYmVsVGV4dDp4dCxsaW5lRW5kaW5nOm50LGxpbms6SShaKSxsaXN0SXRlbTpJKCksbGlzdE9yZGVyZWQ6SSgpLGxpc3RVbm9yZGVyZWQ6SSgpLHBhcmFncmFwaDpJKCkscmVmZXJlbmNlU3RyaW5nOm1lLHJlc291cmNlRGVzdGluYXRpb25TdHJpbmc6TGUscmVzb3VyY2VUaXRsZVN0cmluZzpGdCxyZXNvdXJjZTpnbixzZXRleHRIZWFkaW5nOkkocHQpLHNldGV4dEhlYWRpbmdMaW5lU2VxdWVuY2U6WCxzZXRleHRIZWFkaW5nVGV4dDp2dCxzdHJvbmc6SSgpLHRoZW1hdGljQnJlYWs6SSgpfX07b0J0KGEsKGl8fHt9KS5tZGFzdEV4dGVuc2lvbnN8fFtdKTtjb25zdCBmPXt9O3JldHVybiBwO2Z1bmN0aW9uIHAoRWUpe2xldCBLbj17dHlwZToicm9vdCIsY2hpbGRyZW46W119O2NvbnN0IEhlPXtzdGFjazpbS25dLHRva2VuU3RhY2s6W10sY29uZmlnOmEsZW50ZXI6QSxleGl0OkIsYnVmZmVyOl8scmVzdW1lOk4sc2V0RGF0YTptLGdldERhdGE6Yn0sVGk9W107bGV0IHBuPS0xO2Zvcig7KytwbjxFZS5sZW5ndGg7KWlmKEVlW3BuXVsxXS50eXBlPT09Imxpc3RPcmRlcmVkInx8RWVbcG5dWzFdLnR5cGU9PT0ibGlzdFVub3JkZXJlZCIpaWYoRWVbcG5dWzBdPT09ImVudGVyIilUaS5wdXNoKHBuKTtlbHNle2NvbnN0IEVzPVRpLnBvcCgpO3BuPXcoRWUsRXMscG4pfWZvcihwbj0tMTsrK3BuPEVlLmxlbmd0aDspe2NvbnN0IEVzPWFbRWVbcG5dWzBdXTtzQnQuY2FsbChFcyxFZVtwbl1bMV0udHlwZSkmJkVzW0VlW3BuXVsxXS50eXBlXS5jYWxsKE9iamVjdC5hc3NpZ24oe3NsaWNlU2VyaWFsaXplOkVlW3BuXVsyXS5zbGljZVNlcmlhbGl6ZX0sSGUpLEVlW3BuXVsxXSl9aWYoSGUudG9rZW5TdGFjay5sZW5ndGg+MCl7Y29uc3QgRXM9SGUudG9rZW5TdGFja1tIZS50b2tlblN0YWNrLmxlbmd0aC0xXTsoRXNbMV18fGNCdCkuY2FsbChIZSx2b2lkIDAsRXNbMF0pfWZvcihLbi5wb3NpdGlvbj17c3RhcnQ6d2soRWUubGVuZ3RoPjA/RWVbMF1bMV0uc3RhcnQ6e2xpbmU6MSxjb2x1bW46MSxvZmZzZXQ6MH0pLGVuZDp3ayhFZS5sZW5ndGg+MD9FZVtFZS5sZW5ndGgtMl1bMV0uZW5kOntsaW5lOjEsY29sdW1uOjEsb2Zmc2V0OjB9KX0scG49LTE7KytwbjxhLnRyYW5zZm9ybXMubGVuZ3RoOylLbj1hLnRyYW5zZm9ybXNbcG5dKEtuKXx8S247cmV0dXJuIEtufWZ1bmN0aW9uIHcoRWUsS24sSGUpe2xldCBUaT1Lbi0xLHBuPS0xLEVzPSExLHFhLE1hLEdzLFBvO2Zvcig7KytUaTw9SGU7KXtjb25zdCB2cz1FZVtUaV07aWYodnNbMV0udHlwZT09PSJsaXN0VW5vcmRlcmVkInx8dnNbMV0udHlwZT09PSJsaXN0T3JkZXJlZCJ8fHZzWzFdLnR5cGU9PT0iYmxvY2tRdW90ZSI/KHZzWzBdPT09ImVudGVyIj9wbisrOnBuLS0sUG89dm9pZCAwKTp2c1sxXS50eXBlPT09ImxpbmVFbmRpbmdCbGFuayI/dnNbMF09PT0iZW50ZXIiJiYocWEmJiFQbyYmIXBuJiYhR3MmJihHcz1UaSksUG89dm9pZCAwKTp2c1sxXS50eXBlPT09ImxpbmVQcmVmaXgifHx2c1sxXS50eXBlPT09Imxpc3RJdGVtVmFsdWUifHx2c1sxXS50eXBlPT09Imxpc3RJdGVtTWFya2VyInx8dnNbMV0udHlwZT09PSJsaXN0SXRlbVByZWZpeCJ8fHZzWzFdLnR5cGU9PT0ibGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlInx8KFBvPXZvaWQgMCksIXBuJiZ2c1swXT09PSJlbnRlciImJnZzWzFdLnR5cGU9PT0ibGlzdEl0ZW1QcmVmaXgifHxwbj09PS0xJiZ2c1swXT09PSJleGl0IiYmKHZzWzFdLnR5cGU9PT0ibGlzdFVub3JkZXJlZCJ8fHZzWzFdLnR5cGU9PT0ibGlzdE9yZGVyZWQiKSl7aWYocWEpe2xldCBydT1UaTtmb3IoTWE9dm9pZCAwO3J1LS07KXtjb25zdCB6cz1FZVtydV07aWYoenNbMV0udHlwZT09PSJsaW5lRW5kaW5nInx8enNbMV0udHlwZT09PSJsaW5lRW5kaW5nQmxhbmsiKXtpZih6c1swXT09PSJleGl0Iiljb250aW51ZTtNYSYmKEVlW01hXVsxXS50eXBlPSJsaW5lRW5kaW5nQmxhbmsiLEVzPSEwKSx6c1sxXS50eXBlPSJsaW5lRW5kaW5nIixNYT1ydX1lbHNlIGlmKCEoenNbMV0udHlwZT09PSJsaW5lUHJlZml4Inx8enNbMV0udHlwZT09PSJibG9ja1F1b3RlUHJlZml4Inx8enNbMV0udHlwZT09PSJibG9ja1F1b3RlUHJlZml4V2hpdGVzcGFjZSJ8fHpzWzFdLnR5cGU9PT0iYmxvY2tRdW90ZU1hcmtlciJ8fHpzWzFdLnR5cGU9PT0ibGlzdEl0ZW1JbmRlbnQiKSlicmVha31HcyYmKCFNYXx8R3M8TWEpJiYocWEuX3NwcmVhZD0hMCkscWEuZW5kPU9iamVjdC5hc3NpZ24oe30sTWE/RWVbTWFdWzFdLnN0YXJ0OnZzWzFdLmVuZCksRWUuc3BsaWNlKE1hfHxUaSwwLFsiZXhpdCIscWEsdnNbMl1dKSxUaSsrLEhlKyt9dnNbMV0udHlwZT09PSJsaXN0SXRlbVByZWZpeCImJihxYT17dHlwZToibGlzdEl0ZW0iLF9zcHJlYWQ6ITEsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSx2c1sxXS5zdGFydCl9LEVlLnNwbGljZShUaSwwLFsiZW50ZXIiLHFhLHZzWzJdXSksVGkrKyxIZSsrLEdzPXZvaWQgMCxQbz0hMCl9fXJldHVybiBFZVtLbl1bMV0uX3NwcmVhZD1FcyxIZX1mdW5jdGlvbiBtKEVlLEtuKXtmW0VlXT1Lbn1mdW5jdGlvbiBiKEVlKXtyZXR1cm4gZltFZV19ZnVuY3Rpb24gRShFZSxLbil7cmV0dXJuIEhlO2Z1bmN0aW9uIEhlKFRpKXtBLmNhbGwodGhpcyxFZShUaSksVGkpLEtuJiZLbi5jYWxsKHRoaXMsVGkpfX1mdW5jdGlvbiBfKCl7dGhpcy5zdGFjay5wdXNoKHt0eXBlOiJmcmFnbWVudCIsY2hpbGRyZW46W119KX1mdW5jdGlvbiBBKEVlLEtuLEhlKXtyZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXS5jaGlsZHJlbi5wdXNoKEVlKSx0aGlzLnN0YWNrLnB1c2goRWUpLHRoaXMudG9rZW5TdGFjay5wdXNoKFtLbixIZV0pLEVlLnBvc2l0aW9uPXtzdGFydDp3ayhLbi5zdGFydCl9LEVlfWZ1bmN0aW9uIEkoRWUpe3JldHVybiBLbjtmdW5jdGlvbiBLbihIZSl7RWUmJkVlLmNhbGwodGhpcyxIZSksQi5jYWxsKHRoaXMsSGUpfX1mdW5jdGlvbiBCKEVlLEtuKXtjb25zdCBIZT10aGlzLnN0YWNrLnBvcCgpLFRpPXRoaXMudG9rZW5TdGFjay5wb3AoKTtpZihUaSlUaVswXS50eXBlIT09RWUudHlwZSYmKEtuP0tuLmNhbGwodGhpcyxFZSxUaVswXSk6KFRpWzFdfHxjQnQpLmNhbGwodGhpcyxFZSxUaVswXSkpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2xvc2UgYCIrRWUudHlwZSsiYCAoIitrWSh7c3RhcnQ6RWUuc3RhcnQsZW5kOkVlLmVuZH0pKyIpOiBpdOKAmXMgbm90IG9wZW4iKTtyZXR1cm4gSGUucG9zaXRpb24uZW5kPXdrKEVlLmVuZCksSGV9ZnVuY3Rpb24gTigpe3JldHVybiBtUmUodGhpcy5zdGFjay5wb3AoKSl9ZnVuY3Rpb24gUigpe20oImV4cGVjdGluZ0ZpcnN0TGlzdEl0ZW1WYWx1ZSIsITApfWZ1bmN0aW9uIHooRWUpe2lmKGIoImV4cGVjdGluZ0ZpcnN0TGlzdEl0ZW1WYWx1ZSIpKXtjb25zdCBLbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTJdO0tuLnN0YXJ0PU51bWJlci5wYXJzZUludCh0aGlzLnNsaWNlU2VyaWFsaXplKEVlKSwxMCksbSgiZXhwZWN0aW5nRmlyc3RMaXN0SXRlbVZhbHVlIil9fWZ1bmN0aW9uIFcoKXtjb25zdCBFZT10aGlzLnJlc3VtZSgpLEtuPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07S24ubGFuZz1FZX1mdW5jdGlvbiBldCgpe2NvbnN0IEVlPXRoaXMucmVzdW1lKCksS249dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtLbi5tZXRhPUVlfWZ1bmN0aW9uIHN0KCl7YigiZmxvd0NvZGVJbnNpZGUiKXx8KHRoaXMuYnVmZmVyKCksbSgiZmxvd0NvZGVJbnNpZGUiLCEwKSl9ZnVuY3Rpb24gYXQoKXtjb25zdCBFZT10aGlzLnJlc3VtZSgpLEtuPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07S24udmFsdWU9RWUucmVwbGFjZSgvXihccj9cbnxccil8KFxyP1xufFxyKSQvZywiIiksbSgiZmxvd0NvZGVJbnNpZGUiKX1mdW5jdGlvbiBidCgpe2NvbnN0IEVlPXRoaXMucmVzdW1lKCksS249dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtLbi52YWx1ZT1FZS5yZXBsYWNlKC8oXHI/XG58XHIpJC9nLCIiKX1mdW5jdGlvbiBtdChFZSl7Y29uc3QgS249dGhpcy5yZXN1bWUoKSxIZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO0hlLmxhYmVsPUtuLEhlLmlkZW50aWZpZXI9b0wodGhpcy5zbGljZVNlcmlhbGl6ZShFZSkpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24geXQoKXtjb25zdCBFZT10aGlzLnJlc3VtZSgpLEtuPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07S24udGl0bGU9RWV9ZnVuY3Rpb24gZnQoKXtjb25zdCBFZT10aGlzLnJlc3VtZSgpLEtuPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07S24udXJsPUVlfWZ1bmN0aW9uIHV0KEVlKXtjb25zdCBLbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKCFLbi5kZXB0aCl7Y29uc3QgSGU9dGhpcy5zbGljZVNlcmlhbGl6ZShFZSkubGVuZ3RoO0tuLmRlcHRoPUhlfX1mdW5jdGlvbiB2dCgpe20oInNldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmciLCEwKX1mdW5jdGlvbiBYKEVlKXtjb25zdCBLbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO0tuLmRlcHRoPXRoaXMuc2xpY2VTZXJpYWxpemUoRWUpLmNoYXJDb2RlQXQoMCk9PT02MT8xOjJ9ZnVuY3Rpb24gcHQoKXttKCJzZXRleHRIZWFkaW5nU2x1cnBMaW5lRW5kaW5nIil9ZnVuY3Rpb24gVShFZSl7Y29uc3QgS249dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtsZXQgSGU9S24uY2hpbGRyZW5bS24uY2hpbGRyZW4ubGVuZ3RoLTFdOyghSGV8fEhlLnR5cGUhPT0idGV4dCIpJiYoSGU9WG4oKSxIZS5wb3NpdGlvbj17c3RhcnQ6d2soRWUuc3RhcnQpfSxLbi5jaGlsZHJlbi5wdXNoKEhlKSksdGhpcy5zdGFjay5wdXNoKEhlKX1mdW5jdGlvbiBUdChFZSl7Y29uc3QgS249dGhpcy5zdGFjay5wb3AoKTtLbi52YWx1ZSs9dGhpcy5zbGljZVNlcmlhbGl6ZShFZSksS24ucG9zaXRpb24uZW5kPXdrKEVlLmVuZCl9ZnVuY3Rpb24gbnQoRWUpe2NvbnN0IEtuPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07aWYoYigiYXRIYXJkQnJlYWsiKSl7Y29uc3QgSGU9S24uY2hpbGRyZW5bS24uY2hpbGRyZW4ubGVuZ3RoLTFdO0hlLnBvc2l0aW9uLmVuZD13ayhFZS5lbmQpLG0oImF0SGFyZEJyZWFrIik7cmV0dXJufSFiKCJzZXRleHRIZWFkaW5nU2x1cnBMaW5lRW5kaW5nIikmJmEuY2FuQ29udGFpbkVvbHMuaW5jbHVkZXMoS24udHlwZSkmJihVLmNhbGwodGhpcyxFZSksVHQuY2FsbCh0aGlzLEVlKSl9ZnVuY3Rpb24gSXQoKXttKCJhdEhhcmRCcmVhayIsITApfWZ1bmN0aW9uIE90KCl7Y29uc3QgRWU9dGhpcy5yZXN1bWUoKSxLbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO0tuLnZhbHVlPUVlfWZ1bmN0aW9uIEJ0KCl7Y29uc3QgRWU9dGhpcy5yZXN1bWUoKSxLbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO0tuLnZhbHVlPUVlfWZ1bmN0aW9uIEV0KCl7Y29uc3QgRWU9dGhpcy5yZXN1bWUoKSxLbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO0tuLnZhbHVlPUVlfWZ1bmN0aW9uIFooKXtjb25zdCBFZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKGIoImluUmVmZXJlbmNlIikpe2NvbnN0IEtuPWIoInJlZmVyZW5jZVR5cGUiKXx8InNob3J0Y3V0IjtFZS50eXBlKz0iUmVmZXJlbmNlIixFZS5yZWZlcmVuY2VUeXBlPUtuLGRlbGV0ZSBFZS51cmwsZGVsZXRlIEVlLnRpdGxlfWVsc2UgZGVsZXRlIEVlLmlkZW50aWZpZXIsZGVsZXRlIEVlLmxhYmVsO20oInJlZmVyZW5jZVR5cGUiKX1mdW5jdGlvbiBDdCgpe2NvbnN0IEVlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07aWYoYigiaW5SZWZlcmVuY2UiKSl7Y29uc3QgS249YigicmVmZXJlbmNlVHlwZSIpfHwic2hvcnRjdXQiO0VlLnR5cGUrPSJSZWZlcmVuY2UiLEVlLnJlZmVyZW5jZVR5cGU9S24sZGVsZXRlIEVlLnVybCxkZWxldGUgRWUudGl0bGV9ZWxzZSBkZWxldGUgRWUuaWRlbnRpZmllcixkZWxldGUgRWUubGFiZWw7bSgicmVmZXJlbmNlVHlwZSIpfWZ1bmN0aW9uIHh0KEVlKXtjb25zdCBLbj10aGlzLnNsaWNlU2VyaWFsaXplKEVlKSxIZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTJdO0hlLmxhYmVsPXUkZShLbiksSGUuaWRlbnRpZmllcj1vTChLbikudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBIdCgpe2NvbnN0IEVlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV0sS249dGhpcy5yZXN1bWUoKSxIZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKG0oImluUmVmZXJlbmNlIiwhMCksSGUudHlwZT09PSJsaW5rIil7Y29uc3QgVGk9RWUuY2hpbGRyZW47SGUuY2hpbGRyZW49VGl9ZWxzZSBIZS5hbHQ9S259ZnVuY3Rpb24gTGUoKXtjb25zdCBFZT10aGlzLnJlc3VtZSgpLEtuPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07S24udXJsPUVlfWZ1bmN0aW9uIEZ0KCl7Y29uc3QgRWU9dGhpcy5yZXN1bWUoKSxLbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO0tuLnRpdGxlPUVlfWZ1bmN0aW9uIGduKCl7bSgiaW5SZWZlcmVuY2UiKX1mdW5jdGlvbiBTZSgpe20oInJlZmVyZW5jZVR5cGUiLCJjb2xsYXBzZWQiKX1mdW5jdGlvbiBtZShFZSl7Y29uc3QgS249dGhpcy5yZXN1bWUoKSxIZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO0hlLmxhYmVsPUtuLEhlLmlkZW50aWZpZXI9b0wodGhpcy5zbGljZVNlcmlhbGl6ZShFZSkpLnRvTG93ZXJDYXNlKCksbSgicmVmZXJlbmNlVHlwZSIsImZ1bGwiKX1mdW5jdGlvbiBWZShFZSl7bSgiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIsRWUudHlwZSl9ZnVuY3Rpb24gWWUoRWUpe2NvbnN0IEtuPXRoaXMuc2xpY2VTZXJpYWxpemUoRWUpLEhlPWIoImNoYXJhY3RlclJlZmVyZW5jZVR5cGUiKTtsZXQgVGk7SGU/KFRpPW5CdChLbixIZT09PSJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljIj8xMDoxNiksbSgiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIpKTpUaT1BMHQoS24pO2NvbnN0IHBuPXRoaXMuc3RhY2sucG9wKCk7cG4udmFsdWUrPVRpLHBuLnBvc2l0aW9uLmVuZD13ayhFZS5lbmQpfWZ1bmN0aW9uIGNlKEVlKXtUdC5jYWxsKHRoaXMsRWUpO2NvbnN0IEtuPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07S24udXJsPXRoaXMuc2xpY2VTZXJpYWxpemUoRWUpfWZ1bmN0aW9uIGtlKEVlKXtUdC5jYWxsKHRoaXMsRWUpO2NvbnN0IEtuPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07S24udXJsPSJtYWlsdG86Iit0aGlzLnNsaWNlU2VyaWFsaXplKEVlKX1mdW5jdGlvbiB6dCgpe3JldHVybnt0eXBlOiJibG9ja3F1b3RlIixjaGlsZHJlbjpbXX19ZnVuY3Rpb24gcmUoKXtyZXR1cm57dHlwZToiY29kZSIsbGFuZzpudWxsLG1ldGE6bnVsbCx2YWx1ZToiIn19ZnVuY3Rpb24gc2UoKXtyZXR1cm57dHlwZToiaW5saW5lQ29kZSIsdmFsdWU6IiJ9fWZ1bmN0aW9uIFBlKCl7cmV0dXJue3R5cGU6ImRlZmluaXRpb24iLGlkZW50aWZpZXI6IiIsbGFiZWw6bnVsbCx0aXRsZTpudWxsLHVybDoiIn19ZnVuY3Rpb24gdGUoKXtyZXR1cm57dHlwZToiZW1waGFzaXMiLGNoaWxkcmVuOltdfX1mdW5jdGlvbiBNZSgpe3JldHVybnt0eXBlOiJoZWFkaW5nIixkZXB0aDp2b2lkIDAsY2hpbGRyZW46W119fWZ1bmN0aW9uIGRlKCl7cmV0dXJue3R5cGU6ImJyZWFrIn19ZnVuY3Rpb24gb24oKXtyZXR1cm57dHlwZToiaHRtbCIsdmFsdWU6IiJ9fWZ1bmN0aW9uIG5pKCl7cmV0dXJue3R5cGU6ImltYWdlIix0aXRsZTpudWxsLHVybDoiIixhbHQ6bnVsbH19ZnVuY3Rpb24gS3MoKXtyZXR1cm57dHlwZToibGluayIsdGl0bGU6bnVsbCx1cmw6IiIsY2hpbGRyZW46W119fWZ1bmN0aW9uIHdzKEVlKXtyZXR1cm57dHlwZToibGlzdCIsb3JkZXJlZDpFZS50eXBlPT09Imxpc3RPcmRlcmVkIixzdGFydDpudWxsLHNwcmVhZDpFZS5fc3ByZWFkLGNoaWxkcmVuOltdfX1mdW5jdGlvbiBmbyhFZSl7cmV0dXJue3R5cGU6Imxpc3RJdGVtIixzcHJlYWQ6RWUuX3NwcmVhZCxjaGVja2VkOm51bGwsY2hpbGRyZW46W119fWZ1bmN0aW9uIFhpKCl7cmV0dXJue3R5cGU6InBhcmFncmFwaCIsY2hpbGRyZW46W119fWZ1bmN0aW9uIEVyKCl7cmV0dXJue3R5cGU6InN0cm9uZyIsY2hpbGRyZW46W119fWZ1bmN0aW9uIFhuKCl7cmV0dXJue3R5cGU6InRleHQiLHZhbHVlOiIifX1mdW5jdGlvbiBkaSgpe3JldHVybnt0eXBlOiJ0aGVtYXRpY0JyZWFrIn19fWZ1bmN0aW9uIHdrKGkpe3JldHVybntsaW5lOmkubGluZSxjb2x1bW46aS5jb2x1bW4sb2Zmc2V0Omkub2Zmc2V0fX1mdW5jdGlvbiBvQnQoaSxhKXtsZXQgZj0tMTtmb3IoOysrZjxhLmxlbmd0aDspe2NvbnN0IHA9YVtmXTtBcnJheS5pc0FycmF5KHApP29CdChpLHApOmYkZShpLHApfX1mdW5jdGlvbiBmJGUoaSxhKXtsZXQgZjtmb3IoZiBpbiBhKWlmKHNCdC5jYWxsKGEsZikpe2lmKGY9PT0iY2FuQ29udGFpbkVvbHMiKXtjb25zdCBwPWFbZl07cCYmaVtmXS5wdXNoKC4uLnApfWVsc2UgaWYoZj09PSJ0cmFuc2Zvcm1zIil7Y29uc3QgcD1hW2ZdO3AmJmlbZl0ucHVzaCguLi5wKX1lbHNlIGlmKGY9PT0iZW50ZXIifHxmPT09ImV4aXQiKXtjb25zdCBwPWFbZl07cCYmT2JqZWN0LmFzc2lnbihpW2ZdLHApfX19ZnVuY3Rpb24gY0J0KGksYSl7dGhyb3cgaT9uZXcgRXJyb3IoIkNhbm5vdCBjbG9zZSBgIitpLnR5cGUrImAgKCIra1koe3N0YXJ0Omkuc3RhcnQsZW5kOmkuZW5kfSkrIik6IGEgZGlmZmVyZW50IHRva2VuIChgIithLnR5cGUrImAsICIra1koe3N0YXJ0OmEuc3RhcnQsZW5kOmEuZW5kfSkrIikgaXMgb3BlbiIpOm5ldyBFcnJvcigiQ2Fubm90IGNsb3NlIGRvY3VtZW50LCBhIHRva2VuIChgIithLnR5cGUrImAsICIra1koe3N0YXJ0OmEuc3RhcnQsZW5kOmEuZW5kfSkrIikgaXMgc3RpbGwgb3BlbiIpfWZ1bmN0aW9uIGQkZShpKXtjb25zdCBhPWkucmVwbGFjZSgvXG57Mix9L2csYApgKTtyZXR1cm4geEEoYSl9ZnVuY3Rpb24gZyRlKGkpe2NvbnN0IGE9ZCRlKGkpLHtjaGlsZHJlbjpmfT1hQnQoYSkscD1bW11dO2xldCB3PTA7ZnVuY3Rpb24gbShiLEU9Im5vcm1hbCIpe2IudHlwZT09PSJ0ZXh0Ij9iLnZhbHVlLnNwbGl0KGAKYCkuZm9yRWFjaCgoQSxJKT0+e0khPT0wJiYodysrLHAucHVzaChbXSkpLEEuc3BsaXQoIiAiKS5mb3JFYWNoKEI9PntCJiZwW3ddLnB1c2goe2NvbnRlbnQ6Qix0eXBlOkV9KX0pfSk6KGIudHlwZT09PSJzdHJvbmcifHxiLnR5cGU9PT0iZW1waGFzaXMiKSYmYi5jaGlsZHJlbi5mb3JFYWNoKF89PnttKF8sYi50eXBlKX0pfXJldHVybiBmLmZvckVhY2goYj0+e2IudHlwZT09PSJwYXJhZ3JhcGgiJiZiLmNoaWxkcmVuLmZvckVhY2goRT0+e20oRSl9KX0pLHB9ZnVuY3Rpb24gcCRlKGkpe2NvbnN0e2NoaWxkcmVuOmF9PWFCdChpKTtmdW5jdGlvbiBmKHApe3JldHVybiBwLnR5cGU9PT0idGV4dCI/cC52YWx1ZS5yZXBsYWNlKC9cbi9nLCI8YnIvPiIpOnAudHlwZT09PSJzdHJvbmciP2A8c3Ryb25nPiR7cC5jaGlsZHJlbi5tYXAoZikuam9pbigiIil9PC9zdHJvbmc+YDpwLnR5cGU9PT0iZW1waGFzaXMiP2A8ZW0+JHtwLmNoaWxkcmVuLm1hcChmKS5qb2luKCIiKX08L2VtPmA6cC50eXBlPT09InBhcmFncmFwaCI/YDxwPiR7cC5jaGlsZHJlbi5tYXAoZikuam9pbigiIil9PC9wPmA6YFVuc3VwcG9ydGVkIG1hcmtkb3duOiAke3AudHlwZX1gfXJldHVybiBhLm1hcChmKS5qb2luKCIiKX1mdW5jdGlvbiBiJGUoaSl7cmV0dXJuIEludGwuU2VnbWVudGVyP1suLi5uZXcgSW50bC5TZWdtZW50ZXIoKS5zZWdtZW50KGkpXS5tYXAoYT0+YS5zZWdtZW50KTpbLi4uaV19ZnVuY3Rpb24gdyRlKGksYSl7Y29uc3QgZj1iJGUoYS5jb250ZW50KTtyZXR1cm4gdUJ0KGksW10sZixhLnR5cGUpfWZ1bmN0aW9uIHVCdChpLGEsZixwKXtpZihmLmxlbmd0aD09PTApcmV0dXJuW3tjb250ZW50OmEuam9pbigiIiksdHlwZTpwfSx7Y29udGVudDoiIix0eXBlOnB9XTtjb25zdFt3LC4uLm1dPWYsYj1bLi4uYSx3XTtyZXR1cm4gaShbe2NvbnRlbnQ6Yi5qb2luKCIiKSx0eXBlOnB9XSk/dUJ0KGksYixtLHApOihhLmxlbmd0aD09PTAmJncmJihhLnB1c2godyksZi5zaGlmdCgpKSxbe2NvbnRlbnQ6YS5qb2luKCIiKSx0eXBlOnB9LHtjb250ZW50OmYuam9pbigiIiksdHlwZTpwfV0pfWZ1bmN0aW9uIHYkZShpLGEpe2lmKGkuc29tZSgoe2NvbnRlbnQ6Zn0pPT5mLmluY2x1ZGVzKGAKYCkpKXRocm93IG5ldyBFcnJvcigic3BsaXRMaW5lVG9GaXRXaWR0aCBkb2VzIG5vdCBzdXBwb3J0IG5ld2xpbmVzIGluIHRoZSBsaW5lIik7cmV0dXJuIE8wdChpLGEpfWZ1bmN0aW9uIE8wdChpLGEsZj1bXSxwPVtdKXtpZihpLmxlbmd0aD09PTApcmV0dXJuIHAubGVuZ3RoPjAmJmYucHVzaChwKSxmLmxlbmd0aD4wP2Y6W107bGV0IHc9IiI7aVswXS5jb250ZW50PT09IiAiJiYodz0iICIsaS5zaGlmdCgpKTtjb25zdCBtPWkuc2hpZnQoKT8/e2NvbnRlbnQ6IiAiLHR5cGU6Im5vcm1hbCJ9LGI9Wy4uLnBdO2lmKHchPT0iIiYmYi5wdXNoKHtjb250ZW50OncsdHlwZToibm9ybWFsIn0pLGIucHVzaChtKSxhKGIpKXJldHVybiBPMHQoaSxhLGYsYik7aWYocC5sZW5ndGg+MClmLnB1c2gocCksaS51bnNoaWZ0KG0pO2Vsc2UgaWYobS5jb250ZW50KXtjb25zdFtFLF9dPXckZShhLG0pO2YucHVzaChbRV0pLF8uY29udGVudCYmaS51bnNoaWZ0KF8pfXJldHVybiBPMHQoaSxhLGYpfWZ1bmN0aW9uIG0kZShpLGEpe2EmJmkuYXR0cigic3R5bGUiLGEpfWZ1bmN0aW9uIHkkZShpLGEsZixwLHc9ITEpe2NvbnN0IG09aS5hcHBlbmQoImZvcmVpZ25PYmplY3QiKSxiPW0uYXBwZW5kKCJ4aHRtbDpkaXYiKSxFPWEubGFiZWwsXz1hLmlzTm9kZT8ibm9kZUxhYmVsIjoiZWRnZUxhYmVsIjtiLmh0bWwoYAogICAgPHNwYW4gY2xhc3M9IiR7X30gJHtwfSIgYCsoYS5sYWJlbFN0eWxlPydzdHlsZT0iJythLmxhYmVsU3R5bGUrJyInOiIiKSsiPiIrRSsiPC9zcGFuPiIpLG0kZShiLGEubGFiZWxTdHlsZSksYi5zdHlsZSgiZGlzcGxheSIsInRhYmxlLWNlbGwiKSxiLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsIm5vd3JhcCIpLGIuc3R5bGUoIm1heC13aWR0aCIsZisicHgiKSxiLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLHcmJmIuYXR0cigiY2xhc3MiLCJsYWJlbEJrZyIpO2xldCBBPWIubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBBLndpZHRoPT09ZiYmKGIuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLGIuc3R5bGUoIndoaXRlLXNwYWNlIiwiYnJlYWstc3BhY2VzIiksYi5zdHlsZSgid2lkdGgiLGYrInB4IiksQT1iLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksbS5zdHlsZSgid2lkdGgiLEEud2lkdGgpLG0uc3R5bGUoImhlaWdodCIsQS5oZWlnaHQpLG0ubm9kZSgpfWZ1bmN0aW9uIFAwdChpLGEsZil7cmV0dXJuIGkuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoImNsYXNzIiwidGV4dC1vdXRlci10c3BhbiIpLmF0dHIoIngiLDApLmF0dHIoInkiLGEqZi0uMSsiZW0iKS5hdHRyKCJkeSIsZisiZW0iKX1mdW5jdGlvbiB4JGUoaSxhLGYpe2NvbnN0IHA9aS5hcHBlbmQoInRleHQiKSx3PVAwdChwLDEsYSk7RjB0KHcsZik7Y29uc3QgbT13Lm5vZGUoKS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKTtyZXR1cm4gcC5yZW1vdmUoKSxtfWZ1bmN0aW9uIGskZShpLGEsZil7dmFyIGI7Y29uc3QgcD1pLmFwcGVuZCgidGV4dCIpLHc9UDB0KHAsMSxhKTtGMHQodyxbe2NvbnRlbnQ6Zix0eXBlOiJub3JtYWwifV0pO2NvbnN0IG09KGI9dy5ub2RlKCkpPT1udWxsP3ZvaWQgMDpiLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBtJiZwLnJlbW92ZSgpLG19ZnVuY3Rpb24gRSRlKGksYSxmLHA9ITEpe2NvbnN0IG09YS5hcHBlbmQoImciKSxiPW0uaW5zZXJ0KCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYWNrZ3JvdW5kIiksRT1tLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLCItMTAuMSIpO2xldCBfPTA7Zm9yKGNvbnN0IEEgb2YgZil7Y29uc3QgST1OPT54JGUobSwxLjEsTik8PWksQj1JKEEpP1tBXTp2JGUoQSxJKTtmb3IoY29uc3QgTiBvZiBCKXtjb25zdCBSPVAwdChFLF8sMS4xKTtGMHQoUixOKSxfKyt9fWlmKHApe2NvbnN0IEE9RS5ub2RlKCkuZ2V0QkJveCgpLEk9MjtyZXR1cm4gYi5hdHRyKCJ4IiwtSSkuYXR0cigieSIsLUkpLmF0dHIoIndpZHRoIixBLndpZHRoKzIqSSkuYXR0cigiaGVpZ2h0IixBLmhlaWdodCsyKkkpLG0ubm9kZSgpfWVsc2UgcmV0dXJuIEUubm9kZSgpfWZ1bmN0aW9uIEYwdChpLGEpe2kudGV4dCgiIiksYS5mb3JFYWNoKChmLHApPT57Y29uc3Qgdz1pLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJmb250LXN0eWxlIixmLnR5cGU9PT0iZW1waGFzaXMiPyJpdGFsaWMiOiJub3JtYWwiKS5hdHRyKCJjbGFzcyIsInRleHQtaW5uZXItdHNwYW4iKS5hdHRyKCJmb250LXdlaWdodCIsZi50eXBlPT09InN0cm9uZyI/ImJvbGQiOiJub3JtYWwiKTtwPT09MD93LnRleHQoZi5jb250ZW50KTp3LnRleHQoIiAiK2YuY29udGVudCl9KX1jb25zdCBFWT0oaSxhPSIiLHtzdHlsZTpmPSIiLGlzVGl0bGU6cD0hMSxjbGFzc2VzOnc9IiIsdXNlSHRtbExhYmVsczptPSEwLGlzTm9kZTpiPSEwLHdpZHRoOkU9MjAwLGFkZFN2Z0JhY2tncm91bmQ6Xz0hMX09e30pPT57aWYoVXQuaW5mbygiY3JlYXRlVGV4dCIsYSxmLHAsdyxtLGIsXyksbSl7Y29uc3QgQT1wJGUoYSksST17aXNOb2RlOmIsbGFiZWw6dUYoQSkucmVwbGFjZSgvZmFbYmxyc10/OmZhLVtcdy1dKy9nLE49PmA8aSBjbGFzcz0nJHtOLnJlcGxhY2UoIjoiLCIgIil9Jz48L2k+YCksbGFiZWxTdHlsZTpmLnJlcGxhY2UoImZpbGw6IiwiY29sb3I6Iil9O3JldHVybiB5JGUoaSxJLEUsdyxfKX1lbHNle2NvbnN0IEE9ZyRlKGEpO3JldHVybiBFJGUoRSxpLEEsXyl9fSxOZD1hc3luYyhpLGEsZixwKT0+e2xldCB3O2NvbnN0IG09YS51c2VIdG1sTGFiZWxzfHxvMShPZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKTtmP3c9Zjp3PSJub2RlIGRlZmF1bHQiO2NvbnN0IGI9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsdykuYXR0cigiaWQiLGEuZG9tSWR8fGEuaWQpLEU9Yi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigic3R5bGUiLGEubGFiZWxTdHlsZSk7bGV0IF87YS5sYWJlbFRleHQ9PT12b2lkIDA/Xz0iIjpfPXR5cGVvZiBhLmxhYmVsVGV4dD09InN0cmluZyI/YS5sYWJlbFRleHQ6YS5sYWJlbFRleHRbMF07Y29uc3QgQT1FLm5vZGUoKTtsZXQgSTthLmxhYmVsVHlwZT09PSJtYXJrZG93biI/ST1FWShFLFExKHVGKF8pLE9lKCkpLHt1c2VIdG1sTGFiZWxzOm0sd2lkdGg6YS53aWR0aHx8T2UoKS5mbG93Y2hhcnQud3JhcHBpbmdXaWR0aCxjbGFzc2VzOiJtYXJrZG93bi1ub2RlLWxhYmVsIn0pOkk9QS5hcHBlbmRDaGlsZChncChRMSh1RihfKSxPZSgpKSxhLmxhYmVsU3R5bGUsITEscCkpO2xldCBCPUkuZ2V0QkJveCgpO2NvbnN0IE49YS5wYWRkaW5nLzI7aWYobzEoT2UoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IFI9SS5jaGlsZHJlblswXSx6PXlyKEkpLFc9Ui5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIik7aWYoVyl7Y29uc3QgZXQ9Xy5yZXBsYWNlKC88aW1nW14+XSo+L2csIiIpLnRyaW0oKT09PSIiO2F3YWl0IFByb21pc2UuYWxsKFsuLi5XXS5tYXAoc3Q9Pm5ldyBQcm9taXNlKGF0PT57ZnVuY3Rpb24gYnQoKXtpZihzdC5zdHlsZS5kaXNwbGF5PSJmbGV4IixzdC5zdHlsZS5mbGV4RGlyZWN0aW9uPSJjb2x1bW4iLGV0KXtjb25zdCBtdD1PZSgpLmZvbnRTaXplP09lKCkuZm9udFNpemU6d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZm9udFNpemUseXQ9NTtzdC5zdHlsZS53aWR0aD1wYXJzZUludChtdCwxMCkqeXQrInB4In1lbHNlIHN0LnN0eWxlLndpZHRoPSIxMDAlIjthdChzdCl9c2V0VGltZW91dCgoKT0+e3N0LmNvbXBsZXRlJiZidCgpfSksc3QuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGJ0KSxzdC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixidCl9KSkpfUI9Ui5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx6LmF0dHIoIndpZHRoIixCLndpZHRoKSx6LmF0dHIoImhlaWdodCIsQi5oZWlnaHQpfXJldHVybiBtP0UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLUIud2lkdGgvMisiLCAiKy1CLmhlaWdodC8yKyIpIik6RS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIistQi5oZWlnaHQvMisiKSIpLGEuY2VudGVyTGFiZWwmJkUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLUIud2lkdGgvMisiLCAiKy1CLmhlaWdodC8yKyIpIiksRS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx7c2hhcGVTdmc6YixiYm94OkIsaGFsZlBhZGRpbmc6TixsYWJlbDpFfX0sdGY9KGksYSk9Pntjb25zdCBmPWEubm9kZSgpLmdldEJCb3goKTtpLndpZHRoPWYud2lkdGgsaS5oZWlnaHQ9Zi5oZWlnaHR9O2Z1bmN0aW9uIEY1KGksYSxmLHApe3JldHVybiBpLmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIscC5tYXAoZnVuY3Rpb24odyl7cmV0dXJuIHcueCsiLCIrdy55fSkuam9pbigiICIpKS5hdHRyKCJjbGFzcyIsImxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1hLzIrIiwiK2YvMisiKSIpfWxldCBIbz17fSxobT17fSxsQnQ9e307Y29uc3QgVCRlPSgpPT57aG09e30sbEJ0PXt9LEhvPXt9fSxUWT0oaSxhKT0+KFV0LnRyYWNlKCJJbiBpc0RlY2VuZGFudCIsYSwiICIsaSwiID0gIixobVthXS5pbmNsdWRlcyhpKSksISFobVthXS5pbmNsdWRlcyhpKSksQyRlPShpLGEpPT4oVXQuaW5mbygiRGVjZW5kYW50cyBvZiAiLGEsIiBpcyAiLGhtW2FdKSxVdC5pbmZvKCJFZGdlIGlzICIsaSksaS52PT09YXx8aS53PT09YT8hMTpobVthXT9obVthXS5pbmNsdWRlcyhpLnYpfHxUWShpLnYsYSl8fFRZKGkudyxhKXx8aG1bYV0uaW5jbHVkZXMoaS53KTooVXQuZGVidWcoIlRpbHQsICIsYSwiLG5vdCBpbiBkZWNlbmRhbnRzIiksITEpKSxoQnQ9KGksYSxmLHApPT57VXQud2FybigiQ29weWluZyBjaGlsZHJlbiBvZiAiLGksInJvb3QiLHAsImRhdGEiLGEubm9kZShpKSxwKTtjb25zdCB3PWEuY2hpbGRyZW4oaSl8fFtdO2khPT1wJiZ3LnB1c2goaSksVXQud2FybigiQ29weWluZyAobm9kZXMpIGNsdXN0ZXJJZCIsaSwibm9kZXMiLHcpLHcuZm9yRWFjaChtPT57aWYoYS5jaGlsZHJlbihtKS5sZW5ndGg+MCloQnQobSxhLGYscCk7ZWxzZXtjb25zdCBiPWEubm9kZShtKTtVdC5pbmZvKCJjcCAiLG0sIiB0byAiLHAsIiB3aXRoIHBhcmVudCAiLGkpLGYuc2V0Tm9kZShtLGIpLHAhPT1hLnBhcmVudChtKSYmKFV0Lndhcm4oIlNldHRpbmcgcGFyZW50IixtLGEucGFyZW50KG0pKSxmLnNldFBhcmVudChtLGEucGFyZW50KG0pKSksaSE9PXAmJm0hPT1pPyhVdC5kZWJ1ZygiU2V0dGluZyBwYXJlbnQiLG0saSksZi5zZXRQYXJlbnQobSxpKSk6KFV0LmluZm8oIkluIGNvcHkgIixpLCJyb290IixwLCJkYXRhIixhLm5vZGUoaSkscCksVXQuZGVidWcoIk5vdCBTZXR0aW5nIHBhcmVudCBmb3Igbm9kZT0iLG0sImNsdXN0ZXIhPT1yb290SWQiLGkhPT1wLCJub2RlIT09Y2x1c3RlcklkIixtIT09aSkpO2NvbnN0IEU9YS5lZGdlcyhtKTtVdC5kZWJ1ZygiQ29weWluZyBFZGdlcyIsRSksRS5mb3JFYWNoKF89PntVdC5pbmZvKCJFZGdlIixfKTtjb25zdCBBPWEuZWRnZShfLnYsXy53LF8ubmFtZSk7VXQuaW5mbygiRWRnZSBkYXRhIixBLHApO3RyeXtDJGUoXyxwKT8oVXQuaW5mbygiQ29weWluZyBhcyAiLF8udixfLncsQSxfLm5hbWUpLGYuc2V0RWRnZShfLnYsXy53LEEsXy5uYW1lKSxVdC5pbmZvKCJuZXdHcmFwaCBlZGdlcyAiLGYuZWRnZXMoKSxmLmVkZ2UoZi5lZGdlcygpWzBdKSkpOlV0LmluZm8oIlNraXBwaW5nIGNvcHkgb2YgZWRnZSAiLF8udiwiLS0+IixfLncsIiByb290SWQ6ICIscCwiIGNsdXN0ZXJJZDoiLGkpfWNhdGNoKEkpe1V0LmVycm9yKEkpfX0pfVV0LmRlYnVnKCJSZW1vdmluZyBub2RlIixtKSxhLnJlbW92ZU5vZGUobSl9KX0sZkJ0PShpLGEpPT57Y29uc3QgZj1hLmNoaWxkcmVuKGkpO2xldCBwPVsuLi5mXTtmb3IoY29uc3QgdyBvZiBmKWxCdFt3XT1pLHA9Wy4uLnAsLi4uZkJ0KHcsYSldO3JldHVybiBwfSxDRj0oaSxhKT0+e1V0LnRyYWNlKCJTZWFyY2hpbmciLGkpO2NvbnN0IGY9YS5jaGlsZHJlbihpKTtpZihVdC50cmFjZSgiU2VhcmNoaW5nIGNoaWxkcmVuIG9mIGlkICIsaSxmKSxmLmxlbmd0aDwxKXJldHVybiBVdC50cmFjZSgiVGhpcyBpcyBhIHZhbGlkIG5vZGUiLGkpLGk7Zm9yKGNvbnN0IHAgb2YgZil7Y29uc3Qgdz1DRihwLGEpO2lmKHcpcmV0dXJuIFV0LnRyYWNlKCJGb3VuZCByZXBsYWNlbWVudCBmb3IiLGksIiA9PiAiLHcpLHd9fSxDWT1pPT4hSG9baV18fCFIb1tpXS5leHRlcm5hbENvbm5lY3Rpb25zP2k6SG9baV0/SG9baV0uaWQ6aSxfJGU9KGksYSk9PntpZighaXx8YT4xMCl7VXQuZGVidWcoIk9wdGluZyBvdXQsIG5vIGdyYXBoICIpO3JldHVybn1lbHNlIFV0LmRlYnVnKCJPcHRpbmcgaW4sIGdyYXBoICIpO2kubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2kuY2hpbGRyZW4oZikubGVuZ3RoPjAmJihVdC53YXJuKCJDbHVzdGVyIGlkZW50aWZpZWQiLGYsIiBSZXBsYWNlbWVudCBpZCBpbiBlZGdlczogIixDRihmLGkpKSxobVtmXT1mQnQoZixpKSxIb1tmXT17aWQ6Q0YoZixpKSxjbHVzdGVyRGF0YTppLm5vZGUoZil9KX0pLGkubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2NvbnN0IHA9aS5jaGlsZHJlbihmKSx3PWkuZWRnZXMoKTtwLmxlbmd0aD4wPyhVdC5kZWJ1ZygiQ2x1c3RlciBpZGVudGlmaWVkIixmLGhtKSx3LmZvckVhY2gobT0+e2lmKG0udiE9PWYmJm0udyE9PWYpe2NvbnN0IGI9VFkobS52LGYpLEU9VFkobS53LGYpO2JeRSYmKFV0Lndhcm4oIkVkZ2U6ICIsbSwiIGxlYXZlcyBjbHVzdGVyICIsZiksVXQud2FybigiRGVjZW5kYW50cyBvZiBYWFggIixmLCI6ICIsaG1bZl0pLEhvW2ZdLmV4dGVybmFsQ29ubmVjdGlvbnM9ITApfX0pKTpVdC5kZWJ1ZygiTm90IGEgY2x1c3RlciAiLGYsaG0pfSksaS5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oZil7Y29uc3QgcD1pLmVkZ2UoZik7VXQud2FybigiRWRnZSAiK2YudisiIC0+ICIrZi53KyI6ICIrSlNPTi5zdHJpbmdpZnkoZikpLFV0Lndhcm4oIkVkZ2UgIitmLnYrIiAtPiAiK2YudysiOiAiK0pTT04uc3RyaW5naWZ5KGkuZWRnZShmKSkpO2xldCB3PWYudixtPWYudztpZihVdC53YXJuKCJGaXggWFhYIixIbywiaWRzOiIsZi52LGYudywiVHJhbnNsYXRpbmc6ICIsSG9bZi52XSwiIC0tLSAiLEhvW2Yud10pLEhvW2Yudl0mJkhvW2Yud10mJkhvW2Yudl09PT1Ib1tmLnddKXtVdC53YXJuKCJGaXhpbmcgYW5kIHRyaXhpbmcgbGluayB0byBzZWxmIC0gcmVtb3ZpbmcgWFhYIixmLnYsZi53LGYubmFtZSksVXQud2FybigiRml4aW5nIGFuZCB0cml4aW5nIC0gcmVtb3ZpbmcgWFhYIixmLnYsZi53LGYubmFtZSksdz1DWShmLnYpLG09Q1koZi53KSxpLnJlbW92ZUVkZ2UoZi52LGYudyxmLm5hbWUpO2NvbnN0IGI9Zi53KyItLS0iK2YudjtpLnNldE5vZGUoYix7ZG9tSWQ6YixpZDpiLGxhYmVsU3R5bGU6IiIsbGFiZWxUZXh0OnAubGFiZWwscGFkZGluZzowLHNoYXBlOiJsYWJlbFJlY3QiLHN0eWxlOiIifSk7Y29uc3QgRT1zdHJ1Y3R1cmVkQ2xvbmUocCksXz1zdHJ1Y3R1cmVkQ2xvbmUocCk7RS5sYWJlbD0iIixFLmFycm93VHlwZUVuZD0ibm9uZSIsXy5sYWJlbD0iIixFLmZyb21DbHVzdGVyPWYudixfLnRvQ2x1c3Rlcj1mLnYsaS5zZXRFZGdlKHcsYixFLGYubmFtZSsiLWN5Y2xpYy1zcGVjaWFsIiksaS5zZXRFZGdlKGIsbSxfLGYubmFtZSsiLWN5Y2xpYy1zcGVjaWFsIil9ZWxzZShIb1tmLnZdfHxIb1tmLnddKSYmKFV0Lndhcm4oIkZpeGluZyBhbmQgdHJpeGluZyAtIHJlbW92aW5nIFhYWCIsZi52LGYudyxmLm5hbWUpLHc9Q1koZi52KSxtPUNZKGYudyksaS5yZW1vdmVFZGdlKGYudixmLncsZi5uYW1lKSx3IT09Zi52JiYocC5mcm9tQ2x1c3Rlcj1mLnYpLG0hPT1mLncmJihwLnRvQ2x1c3Rlcj1mLncpLFV0Lndhcm4oIkZpeCBSZXBsYWNpbmcgd2l0aCBYWFgiLHcsbSxmLm5hbWUpLGkuc2V0RWRnZSh3LG0scCxmLm5hbWUpKX0pLFV0Lndhcm4oIkFkanVzdGVkIEdyYXBoIixQNShpKSksZEJ0KGksMCksVXQudHJhY2UoSG8pfSxkQnQ9KGksYSk9PntpZihVdC53YXJuKCJleHRyYWN0b3IgLSAiLGEsUDUoaSksaS5jaGlsZHJlbigiRCIpKSxhPjEwKXtVdC5lcnJvcigiQmFpbGluZyBvdXQiKTtyZXR1cm59bGV0IGY9aS5ub2RlcygpLHA9ITE7Zm9yKGNvbnN0IHcgb2YgZil7Y29uc3QgbT1pLmNoaWxkcmVuKHcpO3A9cHx8bS5sZW5ndGg+MH1pZighcCl7VXQuZGVidWcoIkRvbmUsIG5vIG5vZGUgaGFzIGNoaWxkcmVuIixpLm5vZGVzKCkpO3JldHVybn1VdC5kZWJ1ZygiTm9kZXMgPSAiLGYsYSk7Zm9yKGNvbnN0IHcgb2YgZilpZihVdC5kZWJ1ZygiRXh0cmFjdGluZyBub2RlIix3LEhvLEhvW3ddJiYhSG9bd10uZXh0ZXJuYWxDb25uZWN0aW9ucywhaS5wYXJlbnQodyksaS5ub2RlKHcpLGkuY2hpbGRyZW4oIkQiKSwiIERlcHRoICIsYSksIUhvW3ddKVV0LmRlYnVnKCJOb3QgYSBjbHVzdGVyIix3LGEpO2Vsc2UgaWYoIUhvW3ddLmV4dGVybmFsQ29ubmVjdGlvbnMmJmkuY2hpbGRyZW4odykmJmkuY2hpbGRyZW4odykubGVuZ3RoPjApe1V0Lndhcm4oIkNsdXN0ZXIgd2l0aG91dCBleHRlcm5hbCBjb25uZWN0aW9ucywgd2l0aG91dCBhIHBhcmVudCBhbmQgd2l0aCBjaGlsZHJlbiIsdyxhKTtsZXQgYj1pLmdyYXBoKCkucmFua2Rpcj09PSJUQiI/IkxSIjoiVEIiO0hvW3ddJiZIb1t3XS5jbHVzdGVyRGF0YSYmSG9bd10uY2x1c3RlckRhdGEuZGlyJiYoYj1Ib1t3XS5jbHVzdGVyRGF0YS5kaXIsVXQud2FybigiRml4aW5nIGRpciIsSG9bd10uY2x1c3RlckRhdGEuZGlyLGIpKTtjb25zdCBFPW5ldyBjMSh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOmIsbm9kZXNlcDo1MCxyYW5rc2VwOjUwLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KTtVdC53YXJuKCJPbGQgZ3JhcGggYmVmb3JlIGNvcHkiLFA1KGkpKSxoQnQodyxpLEUsdyksaS5zZXROb2RlKHcse2NsdXN0ZXJOb2RlOiEwLGlkOncsY2x1c3RlckRhdGE6SG9bd10uY2x1c3RlckRhdGEsbGFiZWxUZXh0OkhvW3ddLmxhYmVsVGV4dCxncmFwaDpFfSksVXQud2FybigiTmV3IGdyYXBoIGFmdGVyIGNvcHkgbm9kZTogKCIsdywiKSIsUDUoRSkpLFV0LmRlYnVnKCJPbGQgZ3JhcGggYWZ0ZXIgY29weSIsUDUoaSkpfWVsc2UgVXQud2FybigiQ2x1c3RlciAqKiAiLHcsIiAqKm5vdCBtZWV0aW5nIHRoZSBjcml0ZXJpYSAhZXh0ZXJuYWxDb25uZWN0aW9uczoiLCFIb1t3XS5leHRlcm5hbENvbm5lY3Rpb25zLCIgbm8gcGFyZW50OiAiLCFpLnBhcmVudCh3KSwiIGNoaWxkcmVuICIsaS5jaGlsZHJlbih3KSYmaS5jaGlsZHJlbih3KS5sZW5ndGg+MCxpLmNoaWxkcmVuKCJEIiksYSksVXQuZGVidWcoSG8pO2Y9aS5ub2RlcygpLFV0Lndhcm4oIk5ldyBsaXN0IG9mIG5vZGVzIixmKTtmb3IoY29uc3QgdyBvZiBmKXtjb25zdCBtPWkubm9kZSh3KTtVdC53YXJuKCIgTm93IG5leHQgbGV2ZWwiLHcsbSksbS5jbHVzdGVyTm9kZSYmZEJ0KG0uZ3JhcGgsYSsxKX19LGdCdD0oaSxhKT0+e2lmKGEubGVuZ3RoPT09MClyZXR1cm5bXTtsZXQgZj1PYmplY3QuYXNzaWduKGEpO3JldHVybiBhLmZvckVhY2gocD0+e2NvbnN0IHc9aS5jaGlsZHJlbihwKSxtPWdCdChpLHcpO2Y9Wy4uLmYsLi4ubV19KSxmfSxTJGU9aT0+Z0J0KGksaS5jaGlsZHJlbigpKTtmdW5jdGlvbiBBJGUoaSxhKXtyZXR1cm4gaS5pbnRlcnNlY3QoYSl9ZnVuY3Rpb24gcEJ0KGksYSxmLHApe3ZhciB3PWkueCxtPWkueSxiPXctcC54LEU9bS1wLnksXz1NYXRoLnNxcnQoYSphKkUqRStmKmYqYipiKSxBPU1hdGguYWJzKGEqZipiL18pO3AueDx3JiYoQT0tQSk7dmFyIEk9TWF0aC5hYnMoYSpmKkUvXyk7cmV0dXJuIHAueTxtJiYoST0tSSkse3g6dytBLHk6bStJfX1mdW5jdGlvbiBMJGUoaSxhLGYpe3JldHVybiBwQnQoaSxhLGEsZil9ZnVuY3Rpb24gTSRlKGksYSxmLHApe3ZhciB3LG0sYixFLF8sQSxJLEIsTixSLHosVyxldCxzdCxhdDtpZih3PWEueS1pLnksYj1pLngtYS54LF89YS54KmkueS1pLngqYS55LE49dypmLngrYipmLnkrXyxSPXcqcC54K2IqcC55K18sIShOIT09MCYmUiE9PTAmJmJCdChOLFIpKSYmKG09cC55LWYueSxFPWYueC1wLngsQT1wLngqZi55LWYueCpwLnksST1tKmkueCtFKmkueStBLEI9bSphLngrRSphLnkrQSwhKEkhPT0wJiZCIT09MCYmYkJ0KEksQikpJiYoej13KkUtbSpiLHohPT0wKSkpcmV0dXJuIFc9TWF0aC5hYnMoei8yKSxldD1iKkEtRSpfLHN0PWV0PDA/KGV0LVcpL3o6KGV0K1cpL3osZXQ9bSpfLXcqQSxhdD1ldDwwPyhldC1XKS96OihldCtXKS96LHt4OnN0LHk6YXR9fWZ1bmN0aW9uIGJCdChpLGEpe3JldHVybiBpKmE+MH1mdW5jdGlvbiBEJGUoaSxhLGYpe3ZhciBwPWkueCx3PWkueSxtPVtdLGI9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3R5cGVvZiBhLmZvckVhY2g9PSJmdW5jdGlvbiI/YS5mb3JFYWNoKGZ1bmN0aW9uKHope2I9TWF0aC5taW4oYix6LngpLEU9TWF0aC5taW4oRSx6LnkpfSk6KGI9TWF0aC5taW4oYixhLngpLEU9TWF0aC5taW4oRSxhLnkpKTtmb3IodmFyIF89cC1pLndpZHRoLzItYixBPXctaS5oZWlnaHQvMi1FLEk9MDtJPGEubGVuZ3RoO0krKyl7dmFyIEI9YVtJXSxOPWFbSTxhLmxlbmd0aC0xP0krMTowXSxSPU0kZShpLGYse3g6XytCLngseTpBK0IueX0se3g6XytOLngseTpBK04ueX0pO1ImJm0ucHVzaChSKX1yZXR1cm4gbS5sZW5ndGg/KG0ubGVuZ3RoPjEmJm0uc29ydChmdW5jdGlvbih6LFcpe3ZhciBldD16LngtZi54LHN0PXoueS1mLnksYXQ9TWF0aC5zcXJ0KGV0KmV0K3N0KnN0KSxidD1XLngtZi54LG10PVcueS1mLnkseXQ9TWF0aC5zcXJ0KGJ0KmJ0K210Km10KTtyZXR1cm4gYXQ8eXQ/LTE6YXQ9PT15dD8wOjF9KSxtWzBdKTppfWNvbnN0IF9GPShpLGEpPT57dmFyIGY9aS54LHA9aS55LHc9YS54LWYsbT1hLnktcCxiPWkud2lkdGgvMixFPWkuaGVpZ2h0LzIsXyxBO3JldHVybiBNYXRoLmFicyhtKSpiPk1hdGguYWJzKHcpKkU/KG08MCYmKEU9LUUpLF89bT09PTA/MDpFKncvbSxBPUUpOih3PDAmJihiPS1iKSxfPWIsQT13PT09MD8wOmIqbS93KSx7eDpmK18seTpwK0F9fSxraD17bm9kZTpBJGUsY2lyY2xlOkwkZSxlbGxpcHNlOnBCdCxwb2x5Z29uOkQkZSxyZWN0Ol9GfSxJJGU9YXN5bmMoaSxhKT0+e2EudXNlSHRtbExhYmVsc3x8T2UoKS5mbG93Y2hhcnQuaHRtbExhYmVsc3x8KGEuY2VudGVyTGFiZWw9ITApO2NvbnN0e3NoYXBlU3ZnOnAsYmJveDp3LGhhbGZQYWRkaW5nOm19PWF3YWl0IE5kKGksYSwibm9kZSAiK2EuY2xhc3NlcywhMCk7VXQuaW5mbygiQ2xhc3NlcyA9ICIsYS5jbGFzc2VzKTtjb25zdCBiPXAuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIGIuYXR0cigicngiLGEucngpLmF0dHIoInJ5IixhLnJ5KS5hdHRyKCJ4Iiwtdy53aWR0aC8yLW0pLmF0dHIoInkiLC13LmhlaWdodC8yLW0pLmF0dHIoIndpZHRoIix3LndpZHRoK2EucGFkZGluZykuYXR0cigiaGVpZ2h0Iix3LmhlaWdodCthLnBhZGRpbmcpLHRmKGEsYiksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIGtoLnJlY3QoYSxFKX0scH0sd0J0PWk9Pmk/IiAiK2k6IiIsamI9KGksYSk9PmAke2F8fCJub2RlIGRlZmF1bHQifSR7d0J0KGkuY2xhc3Nlcyl9ICR7d0J0KGkuY2xhc3MpfWAsdkJ0PWFzeW5jKGksYSk9Pntjb25zdHtzaGFwZVN2ZzpmLGJib3g6cH09YXdhaXQgTmQoaSxhLGpiKGEsdm9pZCAwKSwhMCksdz1wLndpZHRoK2EucGFkZGluZyxtPXAuaGVpZ2h0K2EucGFkZGluZyxiPXcrbSxFPVt7eDpiLzIseTowfSx7eDpiLHk6LWIvMn0se3g6Yi8yLHk6LWJ9LHt4OjAseTotYi8yfV07VXQuaW5mbygiUXVlc3Rpb24gbWFpbiAoQ2lyY2xlKSIpO2NvbnN0IF89RjUoZixiLGIsRSk7cmV0dXJuIF8uYXR0cigic3R5bGUiLGEuc3R5bGUpLHRmKGEsXyksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oQSl7cmV0dXJuIFV0Lndhcm4oIkludGVyc2VjdCBjYWxsZWQiKSxraC5wb2x5Z29uKGEsRSxBKX0sZn0sTyRlPShpLGEpPT57Y29uc3QgZj1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGEuZG9tSWR8fGEuaWQpLHA9Mjgsdz1be3g6MCx5OnAvMn0se3g6cC8yLHk6MH0se3g6MCx5Oi1wLzJ9LHt4Oi1wLzIseTowfV07cmV0dXJuIGYuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIix3Lm1hcChmdW5jdGlvbihiKXtyZXR1cm4gYi54KyIsIitiLnl9KS5qb2luKCIgIikpLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMjgpLmF0dHIoImhlaWdodCIsMjgpLGEud2lkdGg9MjgsYS5oZWlnaHQ9MjgsYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIGtoLmNpcmNsZShhLDE0LGIpfSxmfSxQJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBOZChpLGEsamIoYSx2b2lkIDApLCEwKSx3PTQsbT1wLmhlaWdodCthLnBhZGRpbmcsYj1tL3csRT1wLndpZHRoKzIqYithLnBhZGRpbmcsXz1be3g6Yix5OjB9LHt4OkUtYix5OjB9LHt4OkUseTotbS8yfSx7eDpFLWIseTotbX0se3g6Yix5Oi1tfSx7eDowLHk6LW0vMn1dLEE9RjUoZixFLG0sXyk7cmV0dXJuIEEuYXR0cigic3R5bGUiLGEuc3R5bGUpLHRmKGEsQSksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oSSl7cmV0dXJuIGtoLnBvbHlnb24oYSxfLEkpfSxmfSxGJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBOZChpLGEsamIoYSx2b2lkIDApLCEwKSx3PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4Oi1tLzIseTowfSx7eDp3LHk6MH0se3g6dyx5Oi1tfSx7eDotbS8yLHk6LW19LHt4OjAseTotbS8yfV07cmV0dXJuIEY1KGYsdyxtLGIpLmF0dHIoInN0eWxlIixhLnN0eWxlKSxhLndpZHRoPXcrbSxhLmhlaWdodD1tLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKF8pe3JldHVybiBraC5wb2x5Z29uKGEsYixfKX0sZn0sTiRlPWFzeW5jKGksYSk9Pntjb25zdHtzaGFwZVN2ZzpmLGJib3g6cH09YXdhaXQgTmQoaSxhLGpiKGEpLCEwKSx3PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4Oi0yKm0vNix5OjB9LHt4OnctbS82LHk6MH0se3g6dysyKm0vNix5Oi1tfSx7eDptLzYseTotbX1dLEU9RjUoZix3LG0sYik7cmV0dXJuIEUuYXR0cigic3R5bGUiLGEuc3R5bGUpLHRmKGEsRSksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIGtoLnBvbHlnb24oYSxiLF8pfSxmfSxCJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBOZChpLGEsamIoYSx2b2lkIDApLCEwKSx3PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4OjIqbS82LHk6MH0se3g6dyttLzYseTowfSx7eDp3LTIqbS82LHk6LW19LHt4Oi1tLzYseTotbX1dLEU9RjUoZix3LG0sYik7cmV0dXJuIEUuYXR0cigic3R5bGUiLGEuc3R5bGUpLHRmKGEsRSksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIGtoLnBvbHlnb24oYSxiLF8pfSxmfSxSJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBOZChpLGEsamIoYSx2b2lkIDApLCEwKSx3PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4Oi0yKm0vNix5OjB9LHt4OncrMiptLzYseTowfSx7eDp3LW0vNix5Oi1tfSx7eDptLzYseTotbX1dLEU9RjUoZix3LG0sYik7cmV0dXJuIEUuYXR0cigic3R5bGUiLGEuc3R5bGUpLHRmKGEsRSksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIGtoLnBvbHlnb24oYSxiLF8pfSxmfSxqJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBOZChpLGEsamIoYSx2b2lkIDApLCEwKSx3PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4Om0vNix5OjB9LHt4OnctbS82LHk6MH0se3g6dysyKm0vNix5Oi1tfSx7eDotMiptLzYseTotbX1dLEU9RjUoZix3LG0sYik7cmV0dXJuIEUuYXR0cigic3R5bGUiLGEuc3R5bGUpLHRmKGEsRSksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIGtoLnBvbHlnb24oYSxiLF8pfSxmfSwkJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBOZChpLGEsamIoYSx2b2lkIDApLCEwKSx3PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4OjAseTowfSx7eDp3K20vMix5OjB9LHt4OncseTotbS8yfSx7eDp3K20vMix5Oi1tfSx7eDowLHk6LW19XSxFPUY1KGYsdyxtLGIpO3JldHVybiBFLmF0dHIoInN0eWxlIixhLnN0eWxlKSx0ZihhLEUpLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKF8pe3JldHVybiBraC5wb2x5Z29uKGEsYixfKX0sZn0seiRlPWFzeW5jKGksYSk9Pntjb25zdHtzaGFwZVN2ZzpmLGJib3g6cH09YXdhaXQgTmQoaSxhLGpiKGEsdm9pZCAwKSwhMCksdz1wLndpZHRoK2EucGFkZGluZyxtPXcvMixiPW0vKDIuNSt3LzUwKSxFPXAuaGVpZ2h0K2IrYS5wYWRkaW5nLF89Ik0gMCwiK2IrIiBhICIrbSsiLCIrYisiIDAsMCwwICIrdysiIDAgYSAiK20rIiwiK2IrIiAwLDAsMCAiKy13KyIgMCBsIDAsIitFKyIgYSAiK20rIiwiK2IrIiAwLDAsMCAiK3crIiAwIGwgMCwiKy1FLEE9Zi5hdHRyKCJsYWJlbC1vZmZzZXQteSIsYikuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuYXR0cigic3R5bGUiLGEuc3R5bGUpLmF0dHIoImQiLF8pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy13LzIrIiwiKy0oRS8yK2IpKyIpIik7cmV0dXJuIHRmKGEsQSksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oSSl7Y29uc3QgQj1raC5yZWN0KGEsSSksTj1CLngtYS54O2lmKG0hPTAmJihNYXRoLmFicyhOKTxhLndpZHRoLzJ8fE1hdGguYWJzKE4pPT1hLndpZHRoLzImJk1hdGguYWJzKEIueS1hLnkpPmEuaGVpZ2h0LzItYikpe2xldCBSPWIqYiooMS1OKk4vKG0qbSkpO1IhPTAmJihSPU1hdGguc3FydChSKSksUj1iLVIsSS55LWEueT4wJiYoUj0tUiksQi55Kz1SfXJldHVybiBCfSxmfSxxJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwLGhhbGZQYWRkaW5nOnd9PWF3YWl0IE5kKGksYSwibm9kZSAiK2EuY2xhc3NlcysiICIrYS5jbGFzcywhMCksbT1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGI9cC53aWR0aCthLnBhZGRpbmcsRT1wLmhlaWdodCthLnBhZGRpbmc7aWYobS5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixhLnN0eWxlKS5hdHRyKCJyeCIsYS5yeCkuYXR0cigicnkiLGEucnkpLmF0dHIoIngiLC1wLndpZHRoLzItdykuYXR0cigieSIsLXAuaGVpZ2h0LzItdykuYXR0cigid2lkdGgiLGIpLmF0dHIoImhlaWdodCIsRSksYS5wcm9wcyl7Y29uc3QgXz1uZXcgU2V0KE9iamVjdC5rZXlzKGEucHJvcHMpKTthLnByb3BzLmJvcmRlcnMmJihtQnQobSxhLnByb3BzLmJvcmRlcnMsYixFKSxfLmRlbGV0ZSgiYm9yZGVycyIpKSxfLmZvckVhY2goQT0+e1V0Lndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke0F9YCl9KX1yZXR1cm4gdGYoYSxtKSxhLmludGVyc2VjdD1mdW5jdGlvbihfKXtyZXR1cm4ga2gucmVjdChhLF8pfSxmfSxIJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmZ9PWF3YWl0IE5kKGksYSwibGFiZWwiLCEwKTtVdC50cmFjZSgiQ2xhc3NlcyA9ICIsYS5jbGFzcyk7Y29uc3QgcD1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHc9MCxtPTA7aWYocC5hdHRyKCJ3aWR0aCIsdykuYXR0cigiaGVpZ2h0IixtKSxmLmF0dHIoImNsYXNzIiwibGFiZWwgZWRnZUxhYmVsIiksYS5wcm9wcyl7Y29uc3QgYj1uZXcgU2V0KE9iamVjdC5rZXlzKGEucHJvcHMpKTthLnByb3BzLmJvcmRlcnMmJihtQnQocCxhLnByb3BzLmJvcmRlcnMsdyxtKSxiLmRlbGV0ZSgiYm9yZGVycyIpKSxiLmZvckVhY2goRT0+e1V0Lndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke0V9YCl9KX1yZXR1cm4gdGYoYSxwKSxhLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4ga2gucmVjdChhLGIpfSxmfTtmdW5jdGlvbiBtQnQoaSxhLGYscCl7Y29uc3Qgdz1bXSxtPUU9Pnt3LnB1c2goRSwwKX0sYj1FPT57dy5wdXNoKDAsRSl9O2EuaW5jbHVkZXMoInQiKT8oVXQuZGVidWcoImFkZCB0b3AgYm9yZGVyIiksbShmKSk6YihmKSxhLmluY2x1ZGVzKCJyIik/KFV0LmRlYnVnKCJhZGQgcmlnaHQgYm9yZGVyIiksbShwKSk6YihwKSxhLmluY2x1ZGVzKCJiIik/KFV0LmRlYnVnKCJhZGQgYm90dG9tIGJvcmRlciIpLG0oZikpOmIoZiksYS5pbmNsdWRlcygibCIpPyhVdC5kZWJ1ZygiYWRkIGxlZnQgYm9yZGVyIiksbShwKSk6YihwKSxpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLHcuam9pbigiICIpKX1jb25zdCBWJGU9KGksYSk9PntsZXQgZjthLmNsYXNzZXM/Zj0ibm9kZSAiK2EuY2xhc3NlczpmPSJub2RlIGRlZmF1bHQiO2NvbnN0IHA9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsZikuYXR0cigiaWQiLGEuZG9tSWR8fGEuaWQpLHc9cC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxtPXAuaW5zZXJ0KCJsaW5lIiksYj1wLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxFPWEubGFiZWxUZXh0LmZsYXQ/YS5sYWJlbFRleHQuZmxhdCgpOmEubGFiZWxUZXh0O2xldCBfPSIiO3R5cGVvZiBFPT0ib2JqZWN0Ij9fPUVbMF06Xz1FLFV0LmluZm8oIkxhYmVsIHRleHQgYWJjNzkiLF8sRSx0eXBlb2YgRT09Im9iamVjdCIpO2NvbnN0IEE9Yi5ub2RlKCkuYXBwZW5kQ2hpbGQoZ3AoXyxhLmxhYmVsU3R5bGUsITAsITApKTtsZXQgST17d2lkdGg6MCxoZWlnaHQ6MH07aWYobzEoT2UoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IFc9QS5jaGlsZHJlblswXSxldD15cihBKTtJPVcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZXQuYXR0cigid2lkdGgiLEkud2lkdGgpLGV0LmF0dHIoImhlaWdodCIsSS5oZWlnaHQpfVV0LmluZm8oIlRleHQgMiIsRSk7Y29uc3QgQj1FLnNsaWNlKDEsRS5sZW5ndGgpO2xldCBOPUEuZ2V0QkJveCgpO2NvbnN0IFI9Yi5ub2RlKCkuYXBwZW5kQ2hpbGQoZ3AoQi5qb2luP0Iuam9pbigiPGJyLz4iKTpCLGEubGFiZWxTdHlsZSwhMCwhMCkpO2lmKG8xKE9lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBXPVIuY2hpbGRyZW5bMF0sZXQ9eXIoUik7ST1XLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGV0LmF0dHIoIndpZHRoIixJLndpZHRoKSxldC5hdHRyKCJoZWlnaHQiLEkuaGVpZ2h0KX1jb25zdCB6PWEucGFkZGluZy8yO3JldHVybiB5cihSKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKEkud2lkdGg+Ti53aWR0aD8wOihOLndpZHRoLUkud2lkdGgpLzIpKyIsICIrKE4uaGVpZ2h0K3orNSkrIikiKSx5cihBKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKEkud2lkdGg8Ti53aWR0aD8wOi0oTi53aWR0aC1JLndpZHRoKS8yKSsiLCAwKSIpLEk9Yi5ub2RlKCkuZ2V0QkJveCgpLGIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLUkud2lkdGgvMisiLCAiKygtSS5oZWlnaHQvMi16KzMpKyIpIiksdy5hdHRyKCJjbGFzcyIsIm91dGVyIHRpdGxlLXN0YXRlIikuYXR0cigieCIsLUkud2lkdGgvMi16KS5hdHRyKCJ5IiwtSS5oZWlnaHQvMi16KS5hdHRyKCJ3aWR0aCIsSS53aWR0aCthLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsSS5oZWlnaHQrYS5wYWRkaW5nKSxtLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoIngxIiwtSS53aWR0aC8yLXopLmF0dHIoIngyIixJLndpZHRoLzIreikuYXR0cigieTEiLC1JLmhlaWdodC8yLXorTi5oZWlnaHQreikuYXR0cigieTIiLC1JLmhlaWdodC8yLXorTi5oZWlnaHQreiksdGYoYSx3KSxhLmludGVyc2VjdD1mdW5jdGlvbihXKXtyZXR1cm4ga2gucmVjdChhLFcpfSxwfSxHJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBOZChpLGEsamIoYSx2b2lkIDApLCEwKSx3PXAuaGVpZ2h0K2EucGFkZGluZyxtPXAud2lkdGgrdy80K2EucGFkZGluZyxiPWYuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigic3R5bGUiLGEuc3R5bGUpLmF0dHIoInJ4Iix3LzIpLmF0dHIoInJ5Iix3LzIpLmF0dHIoIngiLC1tLzIpLmF0dHIoInkiLC13LzIpLmF0dHIoIndpZHRoIixtKS5hdHRyKCJoZWlnaHQiLHcpO3JldHVybiB0ZihhLGIpLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBraC5yZWN0KGEsRSl9LGZ9LFUkZT1hc3luYyhpLGEpPT57Y29uc3R7c2hhcGVTdmc6ZixiYm94OnAsaGFsZlBhZGRpbmc6d309YXdhaXQgTmQoaSxhLGpiKGEsdm9pZCAwKSwhMCksbT1mLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIG0uYXR0cigic3R5bGUiLGEuc3R5bGUpLmF0dHIoInJ4IixhLnJ4KS5hdHRyKCJyeSIsYS5yeSkuYXR0cigiciIscC53aWR0aC8yK3cpLmF0dHIoIndpZHRoIixwLndpZHRoK2EucGFkZGluZykuYXR0cigiaGVpZ2h0IixwLmhlaWdodCthLnBhZGRpbmcpLFV0LmluZm8oIkNpcmNsZSBtYWluIiksdGYoYSxtKSxhLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4gVXQuaW5mbygiQ2lyY2xlIGludGVyc2VjdCIsYSxwLndpZHRoLzIrdyxiKSxraC5jaXJjbGUoYSxwLndpZHRoLzIrdyxiKX0sZn0sVyRlPWFzeW5jKGksYSk9Pntjb25zdHtzaGFwZVN2ZzpmLGJib3g6cCxoYWxmUGFkZGluZzp3fT1hd2FpdCBOZChpLGEsamIoYSx2b2lkIDApLCEwKSxtPTUsYj1mLmluc2VydCgiZyIsIjpmaXJzdC1jaGlsZCIpLEU9Yi5pbnNlcnQoImNpcmNsZSIpLF89Yi5pbnNlcnQoImNpcmNsZSIpO3JldHVybiBiLmF0dHIoImNsYXNzIixhLmNsYXNzKSxFLmF0dHIoInN0eWxlIixhLnN0eWxlKS5hdHRyKCJyeCIsYS5yeCkuYXR0cigicnkiLGEucnkpLmF0dHIoInIiLHAud2lkdGgvMit3K20pLmF0dHIoIndpZHRoIixwLndpZHRoK2EucGFkZGluZyttKjIpLmF0dHIoImhlaWdodCIscC5oZWlnaHQrYS5wYWRkaW5nK20qMiksXy5hdHRyKCJzdHlsZSIsYS5zdHlsZSkuYXR0cigicngiLGEucngpLmF0dHIoInJ5IixhLnJ5KS5hdHRyKCJyIixwLndpZHRoLzIrdykuYXR0cigid2lkdGgiLHAud2lkdGgrYS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHAuaGVpZ2h0K2EucGFkZGluZyksVXQuaW5mbygiRG91YmxlQ2lyY2xlIG1haW4iKSx0ZihhLEUpLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKEEpe3JldHVybiBVdC5pbmZvKCJEb3VibGVDaXJjbGUgaW50ZXJzZWN0IixhLHAud2lkdGgvMit3K20sQSksa2guY2lyY2xlKGEscC53aWR0aC8yK3crbSxBKX0sZn0sWSRlPWFzeW5jKGksYSk9Pntjb25zdHtzaGFwZVN2ZzpmLGJib3g6cH09YXdhaXQgTmQoaSxhLGpiKGEsdm9pZCAwKSwhMCksdz1wLndpZHRoK2EucGFkZGluZyxtPXAuaGVpZ2h0K2EucGFkZGluZyxiPVt7eDowLHk6MH0se3g6dyx5OjB9LHt4OncseTotbX0se3g6MCx5Oi1tfSx7eDowLHk6MH0se3g6LTgseTowfSx7eDp3KzgseTowfSx7eDp3KzgseTotbX0se3g6LTgseTotbX0se3g6LTgseTowfV0sRT1GNShmLHcsbSxiKTtyZXR1cm4gRS5hdHRyKCJzdHlsZSIsYS5zdHlsZSksdGYoYSxFKSxhLmludGVyc2VjdD1mdW5jdGlvbihfKXtyZXR1cm4ga2gucG9seWdvbihhLGIsXyl9LGZ9LEskZT0oaSxhKT0+e2NvbnN0IGY9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixhLmRvbUlkfHxhLmlkKSxwPWYuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gcC5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSx0ZihhLHApLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKHcpe3JldHVybiBraC5jaXJjbGUoYSw3LHcpfSxmfSx5QnQ9KGksYSxmKT0+e2NvbnN0IHA9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixhLmRvbUlkfHxhLmlkKTtsZXQgdz03MCxtPTEwO2Y9PT0iTFIiJiYodz0xMCxtPTcwKTtjb25zdCBiPXAuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLTEqdy8yKS5hdHRyKCJ5IiwtMSptLzIpLmF0dHIoIndpZHRoIix3KS5hdHRyKCJoZWlnaHQiLG0pLmF0dHIoImNsYXNzIiwiZm9yay1qb2luIik7cmV0dXJuIHRmKGEsYiksYS5oZWlnaHQ9YS5oZWlnaHQrYS5wYWRkaW5nLzIsYS53aWR0aD1hLndpZHRoK2EucGFkZGluZy8yLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBraC5yZWN0KGEsRSl9LHB9LHhCdD17cmhvbWJ1czp2QnQscXVlc3Rpb246dkJ0LHJlY3Q6cSRlLGxhYmVsUmVjdDpIJGUscmVjdFdpdGhUaXRsZTpWJGUsY2hvaWNlOk8kZSxjaXJjbGU6VSRlLGRvdWJsZWNpcmNsZTpXJGUsc3RhZGl1bTpHJGUsaGV4YWdvbjpQJGUscmVjdF9sZWZ0X2ludl9hcnJvdzpGJGUsbGVhbl9yaWdodDpOJGUsbGVhbl9sZWZ0OkIkZSx0cmFwZXpvaWQ6UiRlLGludl90cmFwZXpvaWQ6aiRlLHJlY3RfcmlnaHRfaW52X2Fycm93OiQkZSxjeWxpbmRlcjp6JGUsc3RhcnQ6SyRlLGVuZDooaSxhKT0+e2NvbnN0IGY9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixhLmRvbUlkfHxhLmlkKSxwPWYuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKSx3PWYuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gdy5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSxwLmF0dHIoImNsYXNzIiwic3RhdGUtZW5kIikuYXR0cigiciIsNSkuYXR0cigid2lkdGgiLDEwKS5hdHRyKCJoZWlnaHQiLDEwKSx0ZihhLHcpLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKG0pe3JldHVybiBraC5jaXJjbGUoYSw3LG0pfSxmfSxub3RlOkkkZSxzdWJyb3V0aW5lOlkkZSxmb3JrOnlCdCxqb2luOnlCdCxjbGFzc19ib3g6KGksYSk9Pntjb25zdCBmPWEucGFkZGluZy8yLHA9NCx3PTg7bGV0IG07YS5jbGFzc2VzP209Im5vZGUgIithLmNsYXNzZXM6bT0ibm9kZSBkZWZhdWx0Ijtjb25zdCBiPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLG0pLmF0dHIoImlkIixhLmRvbUlkfHxhLmlkKSxFPWIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksXz1iLmluc2VydCgibGluZSIpLEE9Yi5pbnNlcnQoImxpbmUiKTtsZXQgST0wLEI9cDtjb25zdCBOPWIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpO2xldCBSPTA7Y29uc3Qgej1hLmNsYXNzRGF0YS5hbm5vdGF0aW9ucyYmYS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0sVz1hLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXT8iwqsiK2EuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdKyLCuyI6IiIsZXQ9Ti5ub2RlKCkuYXBwZW5kQ2hpbGQoZ3AoVyxhLmxhYmVsU3R5bGUsITAsITApKTtsZXQgc3Q9ZXQuZ2V0QkJveCgpO2lmKG8xKE9lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCB2dD1ldC5jaGlsZHJlblswXSxYPXlyKGV0KTtzdD12dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxYLmF0dHIoIndpZHRoIixzdC53aWR0aCksWC5hdHRyKCJoZWlnaHQiLHN0LmhlaWdodCl9YS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0mJihCKz1zdC5oZWlnaHQrcCxJKz1zdC53aWR0aCk7bGV0IGF0PWEuY2xhc3NEYXRhLmxhYmVsO2EuY2xhc3NEYXRhLnR5cGUhPT12b2lkIDAmJmEuY2xhc3NEYXRhLnR5cGUhPT0iIiYmKE9lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHM/YXQrPSImbHQ7IithLmNsYXNzRGF0YS50eXBlKyImZ3Q7IjphdCs9IjwiK2EuY2xhc3NEYXRhLnR5cGUrIj4iKTtjb25zdCBidD1OLm5vZGUoKS5hcHBlbmRDaGlsZChncChhdCxhLmxhYmVsU3R5bGUsITAsITApKTt5cihidCkuYXR0cigiY2xhc3MiLCJjbGFzc1RpdGxlIik7bGV0IG10PWJ0LmdldEJCb3goKTtpZihvMShPZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7Y29uc3QgdnQ9YnQuY2hpbGRyZW5bMF0sWD15cihidCk7bXQ9dnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksWC5hdHRyKCJ3aWR0aCIsbXQud2lkdGgpLFguYXR0cigiaGVpZ2h0IixtdC5oZWlnaHQpfUIrPW10LmhlaWdodCtwLG10LndpZHRoPkkmJihJPW10LndpZHRoKTtjb25zdCB5dD1bXTthLmNsYXNzRGF0YS5tZW1iZXJzLmZvckVhY2godnQ9Pntjb25zdCBYPXZ0LmdldERpc3BsYXlEZXRhaWxzKCk7bGV0IHB0PVguZGlzcGxheVRleHQ7T2UoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmKHB0PXB0LnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpKTtjb25zdCBVPU4ubm9kZSgpLmFwcGVuZENoaWxkKGdwKHB0LFguY3NzU3R5bGU/WC5jc3NTdHlsZTphLmxhYmVsU3R5bGUsITAsITApKTtsZXQgVHQ9VS5nZXRCQm94KCk7aWYobzEoT2UoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IG50PVUuY2hpbGRyZW5bMF0sSXQ9eXIoVSk7VHQ9bnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksSXQuYXR0cigid2lkdGgiLFR0LndpZHRoKSxJdC5hdHRyKCJoZWlnaHQiLFR0LmhlaWdodCl9VHQud2lkdGg+SSYmKEk9VHQud2lkdGgpLEIrPVR0LmhlaWdodCtwLHl0LnB1c2goVSl9KSxCKz13O2NvbnN0IGZ0PVtdO2lmKGEuY2xhc3NEYXRhLm1ldGhvZHMuZm9yRWFjaCh2dD0+e2NvbnN0IFg9dnQuZ2V0RGlzcGxheURldGFpbHMoKTtsZXQgcHQ9WC5kaXNwbGF5VGV4dDtPZSgpLmZsb3djaGFydC5odG1sTGFiZWxzJiYocHQ9cHQucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikpO2NvbnN0IFU9Ti5ub2RlKCkuYXBwZW5kQ2hpbGQoZ3AocHQsWC5jc3NTdHlsZT9YLmNzc1N0eWxlOmEubGFiZWxTdHlsZSwhMCwhMCkpO2xldCBUdD1VLmdldEJCb3goKTtpZihvMShPZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7Y29uc3QgbnQ9VS5jaGlsZHJlblswXSxJdD15cihVKTtUdD1udC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxJdC5hdHRyKCJ3aWR0aCIsVHQud2lkdGgpLEl0LmF0dHIoImhlaWdodCIsVHQuaGVpZ2h0KX1UdC53aWR0aD5JJiYoST1UdC53aWR0aCksQis9VHQuaGVpZ2h0K3AsZnQucHVzaChVKX0pLEIrPXcseil7bGV0IHZ0PShJLXN0LndpZHRoKS8yO3lyKGV0KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKC0xKkkvMit2dCkrIiwgIistMSpCLzIrIikiKSxSPXN0LmhlaWdodCtwfWxldCB1dD0oSS1tdC53aWR0aCkvMjtyZXR1cm4geXIoYnQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoLTEqSS8yK3V0KSsiLCAiKygtMSpCLzIrUikrIikiKSxSKz1tdC5oZWlnaHQrcCxfLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoIngxIiwtSS8yLWYpLmF0dHIoIngyIixJLzIrZikuYXR0cigieTEiLC1CLzItZit3K1IpLmF0dHIoInkyIiwtQi8yLWYrdytSKSxSKz13LHl0LmZvckVhY2godnQ9Pnt5cih2dCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKy1JLzIrIiwgIisoLTEqQi8yK1Irdy8yKSsiKSIpO2NvbnN0IFg9dnQ9PW51bGw/dm9pZCAwOnZ0LmdldEJCb3goKTtSKz0oKFg9PW51bGw/dm9pZCAwOlguaGVpZ2h0KT8/MCkrcH0pLFIrPXcsQS5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MSIsLUkvMi1mKS5hdHRyKCJ4MiIsSS8yK2YpLmF0dHIoInkxIiwtQi8yLWYrdytSKS5hdHRyKCJ5MiIsLUIvMi1mK3crUiksUis9dyxmdC5mb3JFYWNoKHZ0PT57eXIodnQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIistSS8yKyIsICIrKC0xKkIvMitSKSsiKSIpO2NvbnN0IFg9dnQ9PW51bGw/dm9pZCAwOnZ0LmdldEJCb3goKTtSKz0oKFg9PW51bGw/dm9pZCAwOlguaGVpZ2h0KT8/MCkrcH0pLEUuYXR0cigiY2xhc3MiLCJvdXRlciB0aXRsZS1zdGF0ZSIpLmF0dHIoIngiLC1JLzItZikuYXR0cigieSIsLShCLzIpLWYpLmF0dHIoIndpZHRoIixJK2EucGFkZGluZykuYXR0cigiaGVpZ2h0IixCK2EucGFkZGluZyksdGYoYSxFKSxhLmludGVyc2VjdD1mdW5jdGlvbih2dCl7cmV0dXJuIGtoLnJlY3QoYSx2dCl9LGJ9fTtsZXQgY0w9e307Y29uc3Qga0J0PWFzeW5jKGksYSxmKT0+e2xldCBwLHc7aWYoYS5saW5rKXtsZXQgbTtPZSgpLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCI/bT0iX3RvcCI6YS5saW5rVGFyZ2V0JiYobT1hLmxpbmtUYXJnZXR8fCJfYmxhbmsiKSxwPWkuaW5zZXJ0KCJzdmc6YSIpLmF0dHIoInhsaW5rOmhyZWYiLGEubGluaykuYXR0cigidGFyZ2V0IixtKSx3PWF3YWl0IHhCdFthLnNoYXBlXShwLGEsZil9ZWxzZSB3PWF3YWl0IHhCdFthLnNoYXBlXShpLGEsZikscD13O3JldHVybiBhLnRvb2x0aXAmJncuYXR0cigidGl0bGUiLGEudG9vbHRpcCksYS5jbGFzcyYmdy5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCAiK2EuY2xhc3MpLGNMW2EuaWRdPXAsYS5oYXZlQ2FsbGJhY2smJmNMW2EuaWRdLmF0dHIoImNsYXNzIixjTFthLmlkXS5hdHRyKCJjbGFzcyIpKyIgY2xpY2thYmxlIikscH0sWCRlPShpLGEpPT57Y0xbYS5pZF09aX0sUSRlPSgpPT57Y0w9e319LEVCdD1pPT57Y29uc3QgYT1jTFtpLmlkXTtVdC50cmFjZSgiVHJhbnNmb3JtaW5nIG5vZGUiLGkuZGlmZixpLCJ0cmFuc2xhdGUoIisoaS54LWkud2lkdGgvMi01KSsiLCAiK2kud2lkdGgvMisiKSIpO2NvbnN0IGY9OCxwPWkuZGlmZnx8MDtyZXR1cm4gaS5jbHVzdGVyTm9kZT9hLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhpLngrcC1pLndpZHRoLzIpKyIsICIrKGkueS1pLmhlaWdodC8yLWYpKyIpIik6YS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpLngrIiwgIitpLnkrIikiKSxwfSxaJGU9e3JlY3Q6KGksYSk9PntVdC5pbmZvKCJDcmVhdGluZyBzdWJncmFwaCByZWN0IGZvciAiLGEuaWQsYSk7Y29uc3QgZj1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlciIrKGEuY2xhc3M/IiAiK2EuY2xhc3M6IiIpKS5hdHRyKCJpZCIsYS5pZCkscD1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHc9bzEoT2UoKS5mbG93Y2hhcnQuaHRtbExhYmVscyksbT1mLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3Rlci1sYWJlbCIpLGI9YS5sYWJlbFR5cGU9PT0ibWFya2Rvd24iP0VZKG0sYS5sYWJlbFRleHQse3N0eWxlOmEubGFiZWxTdHlsZSx1c2VIdG1sTGFiZWxzOnd9KTptLm5vZGUoKS5hcHBlbmRDaGlsZChncChhLmxhYmVsVGV4dCxhLmxhYmVsU3R5bGUsdm9pZCAwLCEwKSk7bGV0IEU9Yi5nZXRCQm94KCk7aWYobzEoT2UoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IE49Yi5jaGlsZHJlblswXSxSPXlyKGIpO0U9Ti5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxSLmF0dHIoIndpZHRoIixFLndpZHRoKSxSLmF0dHIoImhlaWdodCIsRS5oZWlnaHQpfWNvbnN0IF89MCphLnBhZGRpbmcsQT1fLzIsST1hLndpZHRoPD1FLndpZHRoK18/RS53aWR0aCtfOmEud2lkdGg7YS53aWR0aDw9RS53aWR0aCtfP2EuZGlmZj0oRS53aWR0aC1hLndpZHRoKS8yLWEucGFkZGluZy8yOmEuZGlmZj0tYS5wYWRkaW5nLzIsVXQudHJhY2UoIkRhdGEgIixhLEpTT04uc3RyaW5naWZ5KGEpKSxwLmF0dHIoInN0eWxlIixhLnN0eWxlKS5hdHRyKCJyeCIsYS5yeCkuYXR0cigicnkiLGEucnkpLmF0dHIoIngiLGEueC1JLzIpLmF0dHIoInkiLGEueS1hLmhlaWdodC8yLUEpLmF0dHIoIndpZHRoIixJKS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0K18pLHc/bS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoYS54LUUud2lkdGgvMikrIiwgIisoYS55LWEuaGVpZ2h0LzIpKyIpIik6bS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLngrIiwgIisoYS55LWEuaGVpZ2h0LzIpKyIpIik7Y29uc3QgQj1wLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGEud2lkdGg9Qi53aWR0aCxhLmhlaWdodD1CLmhlaWdodCxhLmludGVyc2VjdD1mdW5jdGlvbihOKXtyZXR1cm4gX0YoYSxOKX0sZn0scm91bmRlZFdpdGhUaXRsZTooaSxhKT0+e2NvbnN0IGY9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsYS5jbGFzc2VzKS5hdHRyKCJpZCIsYS5pZCkscD1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHc9Zi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXItbGFiZWwiKSxtPWYuYXBwZW5kKCJyZWN0IiksYj13Lm5vZGUoKS5hcHBlbmRDaGlsZChncChhLmxhYmVsVGV4dCxhLmxhYmVsU3R5bGUsdm9pZCAwLCEwKSk7bGV0IEU9Yi5nZXRCQm94KCk7aWYobzEoT2UoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IE49Yi5jaGlsZHJlblswXSxSPXlyKGIpO0U9Ti5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxSLmF0dHIoIndpZHRoIixFLndpZHRoKSxSLmF0dHIoImhlaWdodCIsRS5oZWlnaHQpfUU9Yi5nZXRCQm94KCk7Y29uc3QgXz0wKmEucGFkZGluZyxBPV8vMixJPWEud2lkdGg8PUUud2lkdGgrYS5wYWRkaW5nP0Uud2lkdGgrYS5wYWRkaW5nOmEud2lkdGg7YS53aWR0aDw9RS53aWR0aCthLnBhZGRpbmc/YS5kaWZmPShFLndpZHRoK2EucGFkZGluZyowLWEud2lkdGgpLzI6YS5kaWZmPS1hLnBhZGRpbmcvMixwLmF0dHIoImNsYXNzIiwib3V0ZXIiKS5hdHRyKCJ4IixhLngtSS8yLUEpLmF0dHIoInkiLGEueS1hLmhlaWdodC8yLUEpLmF0dHIoIndpZHRoIixJK18pLmF0dHIoImhlaWdodCIsYS5oZWlnaHQrXyksbS5hdHRyKCJjbGFzcyIsImlubmVyIikuYXR0cigieCIsYS54LUkvMi1BKS5hdHRyKCJ5IixhLnktYS5oZWlnaHQvMi1BK0UuaGVpZ2h0LTEpLmF0dHIoIndpZHRoIixJK18pLmF0dHIoImhlaWdodCIsYS5oZWlnaHQrXy1FLmhlaWdodC0zKSx3LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhhLngtRS53aWR0aC8yKSsiLCAiKyhhLnktYS5oZWlnaHQvMi1hLnBhZGRpbmcvMysobzEoT2UoKS5mbG93Y2hhcnQuaHRtbExhYmVscyk/NTozKSkrIikiKTtjb25zdCBCPXAubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gYS5oZWlnaHQ9Qi5oZWlnaHQsYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oTil7cmV0dXJuIF9GKGEsTil9LGZ9LG5vdGVHcm91cDooaSxhKT0+e2NvbnN0IGY9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vdGUtY2x1c3RlciIpLmF0dHIoImlkIixhLmlkKSxwPWYuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksdz0wKmEucGFkZGluZyxtPXcvMjtwLmF0dHIoInJ4IixhLnJ4KS5hdHRyKCJyeSIsYS5yeSkuYXR0cigieCIsYS54LWEud2lkdGgvMi1tKS5hdHRyKCJ5IixhLnktYS5oZWlnaHQvMi1tKS5hdHRyKCJ3aWR0aCIsYS53aWR0aCt3KS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0K3cpLmF0dHIoImZpbGwiLCJub25lIik7Y29uc3QgYj1wLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGEud2lkdGg9Yi53aWR0aCxhLmhlaWdodD1iLmhlaWdodCxhLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gX0YoYSxFKX0sZn0sZGl2aWRlcjooaSxhKT0+e2NvbnN0IGY9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsYS5jbGFzc2VzKS5hdHRyKCJpZCIsYS5pZCkscD1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHc9MCphLnBhZGRpbmcsbT13LzI7cC5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4IixhLngtYS53aWR0aC8yLW0pLmF0dHIoInkiLGEueS1hLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIsYS53aWR0aCt3KS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0K3cpO2NvbnN0IGI9cC5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBhLndpZHRoPWIud2lkdGgsYS5oZWlnaHQ9Yi5oZWlnaHQsYS5kaWZmPS1hLnBhZGRpbmcvMixhLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gX0YoYSxFKX0sZn19O2xldCBUQnQ9e307Y29uc3QgSiRlPShpLGEpPT57VXQudHJhY2UoIkluc2VydGluZyBjbHVzdGVyIik7Y29uc3QgZj1hLnNoYXBlfHwicmVjdCI7VEJ0W2EuaWRdPVokZVtmXShpLGEpfSx0emU9KCk9PntUQnQ9e319LHZrPXthZ2dyZWdhdGlvbjoxOCxleHRlbnNpb246MTgsY29tcG9zaXRpb246MTgsZGVwZW5kZW5jeTo2LGxvbGxpcG9wOjEzLjUsYXJyb3dfcG9pbnQ6NS4zfTtmdW5jdGlvbiBfWShpLGEpe2k9U1koaSksYT1TWShhKTtjb25zdFtmLHBdPVtpLngsaS55XSxbdyxtXT1bYS54LGEueV0sYj13LWYsRT1tLXA7cmV0dXJue2FuZ2xlOk1hdGguYXRhbihFL2IpLGRlbHRhWDpiLGRlbHRhWTpFfX1jb25zdCBTWT1pPT5BcnJheS5pc0FycmF5KGkpP3t4OmlbMF0seTppWzFdfTppLENCdD1pPT4oe3g6ZnVuY3Rpb24oYSxmLHApe2xldCB3PTA7aWYoZj09PTAmJk9iamVjdC5oYXNPd24odmssaS5hcnJvd1R5cGVTdGFydCkpe2NvbnN0e2FuZ2xlOm0sZGVsdGFYOmJ9PV9ZKHBbMF0scFsxXSk7dz12a1tpLmFycm93VHlwZVN0YXJ0XSpNYXRoLmNvcyhtKSooYj49MD8xOi0xKX1lbHNlIGlmKGY9PT1wLmxlbmd0aC0xJiZPYmplY3QuaGFzT3duKHZrLGkuYXJyb3dUeXBlRW5kKSl7Y29uc3R7YW5nbGU6bSxkZWx0YVg6Yn09X1kocFtwLmxlbmd0aC0xXSxwW3AubGVuZ3RoLTJdKTt3PXZrW2kuYXJyb3dUeXBlRW5kXSpNYXRoLmNvcyhtKSooYj49MD8xOi0xKX1yZXR1cm4gU1koYSkueCt3fSx5OmZ1bmN0aW9uKGEsZixwKXtsZXQgdz0wO2lmKGY9PT0wJiZPYmplY3QuaGFzT3duKHZrLGkuYXJyb3dUeXBlU3RhcnQpKXtjb25zdHthbmdsZTptLGRlbHRhWTpifT1fWShwWzBdLHBbMV0pO3c9dmtbaS5hcnJvd1R5cGVTdGFydF0qTWF0aC5hYnMoTWF0aC5zaW4obSkpKihiPj0wPzE6LTEpfWVsc2UgaWYoZj09PXAubGVuZ3RoLTEmJk9iamVjdC5oYXNPd24odmssaS5hcnJvd1R5cGVFbmQpKXtjb25zdHthbmdsZTptLGRlbHRhWTpifT1fWShwW3AubGVuZ3RoLTFdLHBbcC5sZW5ndGgtMl0pO3c9dmtbaS5hcnJvd1R5cGVFbmRdKk1hdGguYWJzKE1hdGguc2luKG0pKSooYj49MD8xOi0xKX1yZXR1cm4gU1koYSkueSt3fX0pO2xldCBBWT17fSxCZD17fTtjb25zdCBlemU9KCk9PntBWT17fSxCZD17fX0sX0J0PShpLGEpPT57Y29uc3QgZj1vMShPZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSxwPWEubGFiZWxUeXBlPT09Im1hcmtkb3duIj9FWShpLGEubGFiZWwse3N0eWxlOmEubGFiZWxTdHlsZSx1c2VIdG1sTGFiZWxzOmYsYWRkU3ZnQmFja2dyb3VuZDohMH0pOmdwKGEubGFiZWwsYS5sYWJlbFN0eWxlKTtVdC5pbmZvKCJhYmM4MiIsYSxhLmxhYmVsVHlwZSk7Y29uc3Qgdz1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZUxhYmVsIiksbT13Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKTttLm5vZGUoKS5hcHBlbmRDaGlsZChwKTtsZXQgYj1wLmdldEJCb3goKTtpZihmKXtjb25zdCBfPXAuY2hpbGRyZW5bMF0sQT15cihwKTtiPV8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksQS5hdHRyKCJ3aWR0aCIsYi53aWR0aCksQS5hdHRyKCJoZWlnaHQiLGIuaGVpZ2h0KX1tLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1iLndpZHRoLzIrIiwgIistYi5oZWlnaHQvMisiKSIpLEFZW2EuaWRdPXcsYS53aWR0aD1iLndpZHRoLGEuaGVpZ2h0PWIuaGVpZ2h0O2xldCBFO2lmKGEuc3RhcnRMYWJlbExlZnQpe2NvbnN0IF89Z3AoYS5zdGFydExhYmVsTGVmdCxhLmxhYmVsU3R5bGUpLEE9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxJPUEuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO0U9SS5ub2RlKCkuYXBwZW5kQ2hpbGQoXyk7Y29uc3QgQj1fLmdldEJCb3goKTtJLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1CLndpZHRoLzIrIiwgIistQi5oZWlnaHQvMisiKSIpLEJkW2EuaWRdfHwoQmRbYS5pZF09e30pLEJkW2EuaWRdLnN0YXJ0TGVmdD1BLExZKEUsYS5zdGFydExhYmVsTGVmdCl9aWYoYS5zdGFydExhYmVsUmlnaHQpe2NvbnN0IF89Z3AoYS5zdGFydExhYmVsUmlnaHQsYS5sYWJlbFN0eWxlKSxBPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksST1BLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtFPUEubm9kZSgpLmFwcGVuZENoaWxkKF8pLEkubm9kZSgpLmFwcGVuZENoaWxkKF8pO2NvbnN0IEI9Xy5nZXRCQm94KCk7SS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistQi53aWR0aC8yKyIsICIrLUIuaGVpZ2h0LzIrIikiKSxCZFthLmlkXXx8KEJkW2EuaWRdPXt9KSxCZFthLmlkXS5zdGFydFJpZ2h0PUEsTFkoRSxhLnN0YXJ0TGFiZWxSaWdodCl9aWYoYS5lbmRMYWJlbExlZnQpe2NvbnN0IF89Z3AoYS5lbmRMYWJlbExlZnQsYS5sYWJlbFN0eWxlKSxBPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksST1BLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtFPUkubm9kZSgpLmFwcGVuZENoaWxkKF8pO2NvbnN0IEI9Xy5nZXRCQm94KCk7SS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistQi53aWR0aC8yKyIsICIrLUIuaGVpZ2h0LzIrIikiKSxBLm5vZGUoKS5hcHBlbmRDaGlsZChfKSxCZFthLmlkXXx8KEJkW2EuaWRdPXt9KSxCZFthLmlkXS5lbmRMZWZ0PUEsTFkoRSxhLmVuZExhYmVsTGVmdCl9aWYoYS5lbmRMYWJlbFJpZ2h0KXtjb25zdCBfPWdwKGEuZW5kTGFiZWxSaWdodCxhLmxhYmVsU3R5bGUpLEE9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxJPUEuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO0U9SS5ub2RlKCkuYXBwZW5kQ2hpbGQoXyk7Y29uc3QgQj1fLmdldEJCb3goKTtJLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1CLndpZHRoLzIrIiwgIistQi5oZWlnaHQvMisiKSIpLEEubm9kZSgpLmFwcGVuZENoaWxkKF8pLEJkW2EuaWRdfHwoQmRbYS5pZF09e30pLEJkW2EuaWRdLmVuZFJpZ2h0PUEsTFkoRSxhLmVuZExhYmVsUmlnaHQpfXJldHVybiBwfTtmdW5jdGlvbiBMWShpLGEpe09lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJmkmJihpLnN0eWxlLndpZHRoPWEubGVuZ3RoKjkrInB4IixpLnN0eWxlLmhlaWdodD0iMTJweCIpfWNvbnN0IG56ZT0oaSxhKT0+e1V0LmluZm8oIk1vdmluZyBsYWJlbCBhYmM3OCAiLGkuaWQsaS5sYWJlbCxBWVtpLmlkXSk7bGV0IGY9YS51cGRhdGVkUGF0aD9hLnVwZGF0ZWRQYXRoOmEub3JpZ2luYWxQYXRoO2lmKGkubGFiZWwpe2NvbnN0IHA9QVlbaS5pZF07bGV0IHc9aS54LG09aS55O2lmKGYpe2NvbnN0IGI9JGEuY2FsY0xhYmVsUG9zaXRpb24oZik7VXQuaW5mbygiTW92aW5nIGxhYmVsICIraS5sYWJlbCsiIGZyb20gKCIsdywiLCIsbSwiKSB0byAoIixiLngsIiwiLGIueSwiKSBhYmM3OCIpLGEudXBkYXRlZFBhdGgmJih3PWIueCxtPWIueSl9cC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit3KyIsICIrbSsiKSIpfWlmKGkuc3RhcnRMYWJlbExlZnQpe2NvbnN0IHA9QmRbaS5pZF0uc3RhcnRMZWZ0O2xldCB3PWkueCxtPWkueTtpZihmKXtjb25zdCBiPSRhLmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24oaS5hcnJvd1R5cGVTdGFydD8xMDowLCJzdGFydF9sZWZ0IixmKTt3PWIueCxtPWIueX1wLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3crIiwgIittKyIpIil9aWYoaS5zdGFydExhYmVsUmlnaHQpe2NvbnN0IHA9QmRbaS5pZF0uc3RhcnRSaWdodDtsZXQgdz1pLngsbT1pLnk7aWYoZil7Y29uc3QgYj0kYS5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKGkuYXJyb3dUeXBlU3RhcnQ/MTA6MCwic3RhcnRfcmlnaHQiLGYpO3c9Yi54LG09Yi55fXAuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdysiLCAiK20rIikiKX1pZihpLmVuZExhYmVsTGVmdCl7Y29uc3QgcD1CZFtpLmlkXS5lbmRMZWZ0O2xldCB3PWkueCxtPWkueTtpZihmKXtjb25zdCBiPSRhLmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24oaS5hcnJvd1R5cGVFbmQ/MTA6MCwiZW5kX2xlZnQiLGYpO3c9Yi54LG09Yi55fXAuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdysiLCAiK20rIikiKX1pZihpLmVuZExhYmVsUmlnaHQpe2NvbnN0IHA9QmRbaS5pZF0uZW5kUmlnaHQ7bGV0IHc9aS54LG09aS55O2lmKGYpe2NvbnN0IGI9JGEuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbihpLmFycm93VHlwZUVuZD8xMDowLCJlbmRfcmlnaHQiLGYpO3c9Yi54LG09Yi55fXAuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdysiLCAiK20rIikiKX19LHJ6ZT0oaSxhKT0+e2NvbnN0IGY9aS54LHA9aS55LHc9TWF0aC5hYnMoYS54LWYpLG09TWF0aC5hYnMoYS55LXApLGI9aS53aWR0aC8yLEU9aS5oZWlnaHQvMjtyZXR1cm4gdz49Ynx8bT49RX0saXplPShpLGEsZik9PntVdC53YXJuKGBpbnRlcnNlY3Rpb24gY2FsYyBhYmM4OToKICBvdXRzaWRlUG9pbnQ6ICR7SlNPTi5zdHJpbmdpZnkoYSl9CiAgaW5zaWRlUG9pbnQgOiAke0pTT04uc3RyaW5naWZ5KGYpfQogIG5vZGUgICAgICAgIDogeDoke2kueH0geToke2kueX0gdzoke2kud2lkdGh9IGg6JHtpLmhlaWdodH1gKTtjb25zdCBwPWkueCx3PWkueSxtPU1hdGguYWJzKHAtZi54KSxiPWkud2lkdGgvMjtsZXQgRT1mLng8YS54P2ItbTpiK207Y29uc3QgXz1pLmhlaWdodC8yLEE9TWF0aC5hYnMoYS55LWYueSksST1NYXRoLmFicyhhLngtZi54KTtpZihNYXRoLmFicyh3LWEueSkqYj5NYXRoLmFicyhwLWEueCkqXyl7bGV0IEI9Zi55PGEueT9hLnktXy13OnctXy1hLnk7RT1JKkIvQTtjb25zdCBOPXt4OmYueDxhLng/Zi54K0U6Zi54LUkrRSx5OmYueTxhLnk/Zi55K0EtQjpmLnktQStCfTtyZXR1cm4gRT09PTAmJihOLng9YS54LE4ueT1hLnkpLEk9PT0wJiYoTi54PWEueCksQT09PTAmJihOLnk9YS55KSxVdC53YXJuKGBhYmM4OSB0b3BwL2JvdHQgY2FsYywgUSAke0F9LCBxICR7Qn0sIFIgJHtJfSwgciAke0V9YCxOKSxOfWVsc2V7Zi54PGEueD9FPWEueC1iLXA6RT1wLWItYS54O2xldCBCPUEqRS9JLE49Zi54PGEueD9mLngrSS1FOmYueC1JK0UsUj1mLnk8YS55P2YueStCOmYueS1CO3JldHVybiBVdC53YXJuKGBzaWRlcyBjYWxjIGFiYzg5LCBRICR7QX0sIHEgJHtCfSwgUiAke0l9LCByICR7RX1gLHtfeDpOLF95OlJ9KSxFPT09MCYmKE49YS54LFI9YS55KSxJPT09MCYmKE49YS54KSxBPT09MCYmKFI9YS55KSx7eDpOLHk6Un19fSxTQnQ9KGksYSk9PntVdC53YXJuKCJhYmM4OCBjdXRQYXRoQXRJbnRlcnNlY3QiLGksYSk7bGV0IGY9W10scD1pWzBdLHc9ITE7cmV0dXJuIGkuZm9yRWFjaChtPT57aWYoVXQuaW5mbygiYWJjODggY2hlY2tpbmcgcG9pbnQiLG0sYSksIXJ6ZShhLG0pJiYhdyl7Y29uc3QgYj1pemUoYSxwLG0pO1V0Lndhcm4oImFiYzg4IGluc2lkZSIsbSxwLGIpLFV0Lndhcm4oImFiYzg4IGludGVyc2VjdGlvbiIsYik7bGV0IEU9ITE7Zi5mb3JFYWNoKF89PntFPUV8fF8ueD09PWIueCYmXy55PT09Yi55fSksZi5zb21lKF89Pl8ueD09PWIueCYmXy55PT09Yi55KT9VdC53YXJuKCJhYmM4OCBubyBpbnRlcnNlY3QiLGIsZik6Zi5wdXNoKGIpLHc9ITB9ZWxzZSBVdC53YXJuKCJhYmM4OCBvdXRzaWRlIixtLHApLHA9bSx3fHxmLnB1c2gobSl9KSxVdC53YXJuKCJhYmM4OCByZXR1cm5pbmcgcG9pbnRzIixmKSxmfSxzemU9ZnVuY3Rpb24oaSxhLGYscCx3LG0sYil7bGV0IEU9Zi5wb2ludHMsXz0hMTtjb25zdCBBPW0ubm9kZShhLnYpO3ZhciBJPW0ubm9kZShhLncpO1V0LmluZm8oImFiYzg4IEluc2VydEVkZ2U6ICIsZiksSS5pbnRlcnNlY3QmJkEuaW50ZXJzZWN0JiYoRT1FLnNsaWNlKDEsZi5wb2ludHMubGVuZ3RoLTEpLEUudW5zaGlmdChBLmludGVyc2VjdChFWzBdKSksVXQuaW5mbygiTGFzdCBwb2ludCIsRVtFLmxlbmd0aC0xXSxJLEkuaW50ZXJzZWN0KEVbRS5sZW5ndGgtMV0pKSxFLnB1c2goSS5pbnRlcnNlY3QoRVtFLmxlbmd0aC0xXSkpKSxmLnRvQ2x1c3RlciYmKFV0LmluZm8oInRvIGNsdXN0ZXIgYWJjODgiLHBbZi50b0NsdXN0ZXJdKSxFPVNCdChmLnBvaW50cyxwW2YudG9DbHVzdGVyXS5ub2RlKSxfPSEwKSxmLmZyb21DbHVzdGVyJiYoVXQuaW5mbygiZnJvbSBjbHVzdGVyIGFiYzg4IixwW2YuZnJvbUNsdXN0ZXJdKSxFPVNCdChFLnJldmVyc2UoKSxwW2YuZnJvbUNsdXN0ZXJdLm5vZGUpLnJldmVyc2UoKSxfPSEwKTtjb25zdCBCPUUuZmlsdGVyKG10PT4hTnVtYmVyLmlzTmFOKG10LnkpKTtsZXQgTj1IUDtmLmN1cnZlJiYodz09PSJncmFwaCJ8fHc9PT0iZmxvd2NoYXJ0IikmJihOPWYuY3VydmUpO2NvbnN0e3g6Uix5Onp9PUNCdChmKSxXPUU1KCkueChSKS55KHopLmN1cnZlKE4pO2xldCBldDtzd2l0Y2goZi50aGlja25lc3Mpe2Nhc2Uibm9ybWFsIjpldD0iZWRnZS10aGlja25lc3Mtbm9ybWFsIjticmVhaztjYXNlInRoaWNrIjpldD0iZWRnZS10aGlja25lc3MtdGhpY2siO2JyZWFrO2Nhc2UiaW52aXNpYmxlIjpldD0iZWRnZS10aGlja25lc3MtdGhpY2siO2JyZWFrO2RlZmF1bHQ6ZXQ9IiJ9c3dpdGNoKGYucGF0dGVybil7Y2FzZSJzb2xpZCI6ZXQrPSIgZWRnZS1wYXR0ZXJuLXNvbGlkIjticmVhaztjYXNlImRvdHRlZCI6ZXQrPSIgZWRnZS1wYXR0ZXJuLWRvdHRlZCI7YnJlYWs7Y2FzZSJkYXNoZWQiOmV0Kz0iIGVkZ2UtcGF0dGVybi1kYXNoZWQiO2JyZWFrfWNvbnN0IHN0PWkuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsVyhCKSkuYXR0cigiaWQiLGYuaWQpLmF0dHIoImNsYXNzIiwiICIrZXQrKGYuY2xhc3Nlcz8iICIrZi5jbGFzc2VzOiIiKSkuYXR0cigic3R5bGUiLGYuc3R5bGUpO2xldCBhdD0iIjtzd2l0Y2goKE9lKCkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGV8fE9lKCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSkmJihhdD13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxhdD1hdC5yZXBsYWNlKC9cKC9nLCJcXCgiKSxhdD1hdC5yZXBsYWNlKC9cKS9nLCJcXCkiKSksVXQuaW5mbygiYXJyb3dUeXBlU3RhcnQiLGYuYXJyb3dUeXBlU3RhcnQpLFV0LmluZm8oImFycm93VHlwZUVuZCIsZi5hcnJvd1R5cGVFbmQpLGYuYXJyb3dUeXBlU3RhcnQpe2Nhc2UiYXJyb3dfY3Jvc3MiOnN0LmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK2F0KyIjIitiKyJfIit3KyItY3Jvc3NTdGFydCkiKTticmVhaztjYXNlImFycm93X3BvaW50IjpzdC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIithdCsiIyIrYisiXyIrdysiLXBvaW50U3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19iYXJiIjpzdC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIithdCsiIyIrYisiXyIrdysiLWJhcmJTdGFydCkiKTticmVhaztjYXNlImFycm93X2NpcmNsZSI6c3QuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrYXQrIiMiK2IrIl8iK3crIi1jaXJjbGVTdGFydCkiKTticmVhaztjYXNlImFnZ3JlZ2F0aW9uIjpzdC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIithdCsiIyIrYisiXyIrdysiLWFnZ3JlZ2F0aW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJleHRlbnNpb24iOnN0LmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK2F0KyIjIitiKyJfIit3KyItZXh0ZW5zaW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJjb21wb3NpdGlvbiI6c3QuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrYXQrIiMiK2IrIl8iK3crIi1jb21wb3NpdGlvblN0YXJ0KSIpO2JyZWFrO2Nhc2UiZGVwZW5kZW5jeSI6c3QuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrYXQrIiMiK2IrIl8iK3crIi1kZXBlbmRlbmN5U3RhcnQpIik7YnJlYWs7Y2FzZSJsb2xsaXBvcCI6c3QuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrYXQrIiMiK2IrIl8iK3crIi1sb2xsaXBvcFN0YXJ0KSIpO2JyZWFrfXN3aXRjaChmLmFycm93VHlwZUVuZCl7Y2FzZSJhcnJvd19jcm9zcyI6c3QuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2F0KyIjIitiKyJfIit3KyItY3Jvc3NFbmQpIik7YnJlYWs7Y2FzZSJhcnJvd19wb2ludCI6c3QuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2F0KyIjIitiKyJfIit3KyItcG9pbnRFbmQpIik7YnJlYWs7Y2FzZSJhcnJvd19iYXJiIjpzdC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrYXQrIiMiK2IrIl8iK3crIi1iYXJiRW5kKSIpO2JyZWFrO2Nhc2UiYXJyb3dfY2lyY2xlIjpzdC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrYXQrIiMiK2IrIl8iK3crIi1jaXJjbGVFbmQpIik7YnJlYWs7Y2FzZSJhZ2dyZWdhdGlvbiI6c3QuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2F0KyIjIitiKyJfIit3KyItYWdncmVnYXRpb25FbmQpIik7YnJlYWs7Y2FzZSJleHRlbnNpb24iOnN0LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIithdCsiIyIrYisiXyIrdysiLWV4dGVuc2lvbkVuZCkiKTticmVhaztjYXNlImNvbXBvc2l0aW9uIjpzdC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrYXQrIiMiK2IrIl8iK3crIi1jb21wb3NpdGlvbkVuZCkiKTticmVhaztjYXNlImRlcGVuZGVuY3kiOnN0LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIithdCsiIyIrYisiXyIrdysiLWRlcGVuZGVuY3lFbmQpIik7YnJlYWs7Y2FzZSJsb2xsaXBvcCI6c3QuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2F0KyIjIitiKyJfIit3KyItbG9sbGlwb3BFbmQpIik7YnJlYWt9bGV0IGJ0PXt9O3JldHVybiBfJiYoYnQudXBkYXRlZFBhdGg9RSksYnQub3JpZ2luYWxQYXRoPWYucG9pbnRzLGJ0fSxBQnQ9YXN5bmMoaSxhLGYscCx3KT0+e1V0LmluZm8oIkdyYXBoIGluIHJlY3Vyc2l2ZSByZW5kZXI6IFhYWCIsUDUoYSksdyk7Y29uc3QgbT1hLmdyYXBoKCkucmFua2RpcjtVdC50cmFjZSgiRGlyIGluIHJlY3Vyc2l2ZSByZW5kZXIgLSBkaXI6IixtKTtjb25zdCBiPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJyb290Iik7YS5ub2RlcygpP1V0LmluZm8oIlJlY3Vyc2l2ZSByZW5kZXIgWFhYIixhLm5vZGVzKCkpOlV0LmluZm8oIk5vIG5vZGVzIGZvdW5kIGZvciIsYSksYS5lZGdlcygpLmxlbmd0aD4wJiZVdC50cmFjZSgiUmVjdXJzaXZlIGVkZ2VzIixhLmVkZ2UoYS5lZGdlcygpWzBdKSk7Y29uc3QgRT1iLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlcnMiKSxfPWIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlUGF0aHMiKSxBPWIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWxzIiksST1iLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZXMiKTthd2FpdCBQcm9taXNlLmFsbChhLm5vZGVzKCkubWFwKGFzeW5jIGZ1bmN0aW9uKE4pe2NvbnN0IFI9YS5ub2RlKE4pO2lmKHchPT12b2lkIDApe2NvbnN0IHo9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh3LmNsdXN0ZXJEYXRhKSk7VXQuaW5mbygiU2V0dGluZyBkYXRhIGZvciBjbHVzdGVyIFhYWCAoIixOLCIpICIseix3KSxhLnNldE5vZGUody5pZCx6KSxhLnBhcmVudChOKXx8KFV0LnRyYWNlKCJTZXR0aW5nIHBhcmVudCIsTix3LmlkKSxhLnNldFBhcmVudChOLHcuaWQseikpfWlmKFV0LmluZm8oIihJbnNlcnQpIE5vZGUgWFhYIitOKyI6ICIrSlNPTi5zdHJpbmdpZnkoYS5ub2RlKE4pKSksUiYmUi5jbHVzdGVyTm9kZSl7VXQuaW5mbygiQ2x1c3RlciBpZGVudGlmaWVkIixOLFIud2lkdGgsYS5ub2RlKE4pKTtjb25zdCB6PWF3YWl0IEFCdChJLFIuZ3JhcGgsZixwLGEubm9kZShOKSksVz16LmVsZW07dGYoUixXKSxSLmRpZmY9ei5kaWZmfHwwLFV0LmluZm8oIk5vZGUgYm91bmRzIChhYmMxMjMpIixOLFIsUi53aWR0aCxSLngsUi55KSxYJGUoVyxSKSxVdC53YXJuKCJSZWN1cnNpdmUgcmVuZGVyIGNvbXBsZXRlICIsVyxSKX1lbHNlIGEuY2hpbGRyZW4oTikubGVuZ3RoPjA/KFV0LmluZm8oIkNsdXN0ZXIgLSB0aGUgbm9uIHJlY3Vyc2l2ZSBwYXRoIFhYWCIsTixSLmlkLFIsYSksVXQuaW5mbyhDRihSLmlkLGEpKSxIb1tSLmlkXT17aWQ6Q0YoUi5pZCxhKSxub2RlOlJ9KTooVXQuaW5mbygiTm9kZSAtIHRoZSBub24gcmVjdXJzaXZlIHBhdGgiLE4sUi5pZCxSKSxhd2FpdCBrQnQoSSxhLm5vZGUoTiksbSkpfSkpLGEuZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKE4pe2NvbnN0IFI9YS5lZGdlKE4udixOLncsTi5uYW1lKTtVdC5pbmZvKCJFZGdlICIrTi52KyIgLT4gIitOLncrIjogIitKU09OLnN0cmluZ2lmeShOKSksVXQuaW5mbygiRWRnZSAiK04udisiIC0+ICIrTi53KyI6ICIsTiwiICIsSlNPTi5zdHJpbmdpZnkoYS5lZGdlKE4pKSksVXQuaW5mbygiRml4IixIbywiaWRzOiIsTi52LE4udywiVHJhbnNsYXRlaW5nOiAiLEhvW04udl0sSG9bTi53XSksX0J0KEEsUil9KSxhLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihOKXtVdC5pbmZvKCJFZGdlICIrTi52KyIgLT4gIitOLncrIjogIitKU09OLnN0cmluZ2lmeShOKSl9KSxVdC5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSxVdC5pbmZvKCIjIyMgICAgICAgICAgICAgICAgTGF5b3V0ICAgICAgICAgICAgICAgICAjIyMiKSxVdC5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSxVdC5pbmZvKGEpLGFMKGEpLFV0LmluZm8oIkdyYXBoIGFmdGVyIGxheW91dDoiLFA1KGEpKTtsZXQgQj0wO3JldHVybiBTJGUoYSkuZm9yRWFjaChmdW5jdGlvbihOKXtjb25zdCBSPWEubm9kZShOKTtVdC5pbmZvKCJQb3NpdGlvbiAiK04rIjogIitKU09OLnN0cmluZ2lmeShhLm5vZGUoTikpKSxVdC5pbmZvKCJQb3NpdGlvbiAiK04rIjogKCIrUi54LCIsIitSLnksIikgd2lkdGg6ICIsUi53aWR0aCwiIGhlaWdodDogIixSLmhlaWdodCksUiYmUi5jbHVzdGVyTm9kZT9FQnQoUik6YS5jaGlsZHJlbihOKS5sZW5ndGg+MD8oSiRlKEUsUiksSG9bUi5pZF0ubm9kZT1SKTpFQnQoUil9KSxhLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihOKXtjb25zdCBSPWEuZWRnZShOKTtVdC5pbmZvKCJFZGdlICIrTi52KyIgLT4gIitOLncrIjogIitKU09OLnN0cmluZ2lmeShSKSxSKTtjb25zdCB6PXN6ZShfLE4sUixIbyxmLGEscCk7bnplKFIseil9KSxhLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihOKXtjb25zdCBSPWEubm9kZShOKTtVdC5pbmZvKE4sUi50eXBlLFIuZGlmZiksUi50eXBlPT09Imdyb3VwIiYmKEI9Ui5kaWZmKX0pLHtlbGVtOmIsZGlmZjpCfX0sTjB0PWFzeW5jKGksYSxmLHAsdyk9PntQTnQoaSxmLHAsdyksUSRlKCksZXplKCksdHplKCksVCRlKCksVXQud2FybigiR3JhcGggYXQgZmlyc3Q6IixKU09OLnN0cmluZ2lmeShQNShhKSkpLF8kZShhKSxVdC53YXJuKCJHcmFwaCBhZnRlcjoiLEpTT04uc3RyaW5naWZ5KFA1KGEpKSksYXdhaXQgQUJ0KGksYSxwLHcpfSxMQnQ9e30sYXplPWZ1bmN0aW9uKGkpe2NvbnN0IGE9T2JqZWN0LmtleXMoaSk7Zm9yKGNvbnN0IGYgb2YgYSlMQnRbZl09aVtmXX0sTUJ0PWZ1bmN0aW9uKGksYSxmLHAsdyxtKXtjb25zdCBiPXAuc2VsZWN0KGBbaWQ9IiR7Zn0iXWApO09iamVjdC5rZXlzKGkpLmZvckVhY2goZnVuY3Rpb24oXyl7Y29uc3QgQT1pW19dO2xldCBJPSJkZWZhdWx0IjtBLmNsYXNzZXMubGVuZ3RoPjAmJihJPUEuY2xhc3Nlcy5qb2luKCIgIikpLEk9SSsiIGZsb3djaGFydC1sYWJlbCI7Y29uc3QgQj1pbShBLnN0eWxlcyk7bGV0IE49QS50ZXh0IT09dm9pZCAwP0EudGV4dDpBLmlkLFI7aWYoVXQuaW5mbygidmVydGV4IixBLEEubGFiZWxUeXBlKSxBLmxhYmVsVHlwZT09PSJtYXJrZG93biIpVXQuaW5mbygidmVydGV4IixBLEEubGFiZWxUeXBlKTtlbHNlIGlmKG8xKE9lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBldD17bGFiZWw6Ti5yZXBsYWNlKC9mYVtibHJzXT86ZmEtW1x3LV0rL2csc3Q9PmA8aSBjbGFzcz0nJHtzdC5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmApfTtSPWIwdChiLGV0KS5ub2RlKCksUi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKFIpfWVsc2V7Y29uc3QgZXQ9dy5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO2V0LnNldEF0dHJpYnV0ZSgic3R5bGUiLEIubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKTtjb25zdCBzdD1OLnNwbGl0KEtyLmxpbmVCcmVha1JlZ2V4KTtmb3IoY29uc3QgYXQgb2Ygc3Qpe2NvbnN0IGJ0PXcuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7YnQuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIiksYnQuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLGJ0LnNldEF0dHJpYnV0ZSgieCIsIjEiKSxidC50ZXh0Q29udGVudD1hdCxldC5hcHBlbmRDaGlsZChidCl9Uj1ldH1sZXQgej0wLFc9IiI7c3dpdGNoKEEudHlwZSl7Y2FzZSJyb3VuZCI6ej01LFc9InJlY3QiO2JyZWFrO2Nhc2Uic3F1YXJlIjpXPSJyZWN0IjticmVhaztjYXNlImRpYW1vbmQiOlc9InF1ZXN0aW9uIjticmVhaztjYXNlImhleGFnb24iOlc9ImhleGFnb24iO2JyZWFrO2Nhc2Uib2RkIjpXPSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImxlYW5fcmlnaHQiOlc9ImxlYW5fcmlnaHQiO2JyZWFrO2Nhc2UibGVhbl9sZWZ0IjpXPSJsZWFuX2xlZnQiO2JyZWFrO2Nhc2UidHJhcGV6b2lkIjpXPSJ0cmFwZXpvaWQiO2JyZWFrO2Nhc2UiaW52X3RyYXBlem9pZCI6Vz0iaW52X3RyYXBlem9pZCI7YnJlYWs7Y2FzZSJvZGRfcmlnaHQiOlc9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UiY2lyY2xlIjpXPSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6Vz0iZWxsaXBzZSI7YnJlYWs7Y2FzZSJzdGFkaXVtIjpXPSJzdGFkaXVtIjticmVhaztjYXNlInN1YnJvdXRpbmUiOlc9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOlc9ImN5bGluZGVyIjticmVhaztjYXNlImdyb3VwIjpXPSJyZWN0IjticmVhaztjYXNlImRvdWJsZWNpcmNsZSI6Vz0iZG91YmxlY2lyY2xlIjticmVhaztkZWZhdWx0Olc9InJlY3QifWEuc2V0Tm9kZShBLmlkLHtsYWJlbFN0eWxlOkIubGFiZWxTdHlsZSxzaGFwZTpXLGxhYmVsVGV4dDpOLGxhYmVsVHlwZTpBLmxhYmVsVHlwZSxyeDp6LHJ5OnosY2xhc3M6SSxzdHlsZTpCLnN0eWxlLGlkOkEuaWQsbGluazpBLmxpbmssbGlua1RhcmdldDpBLmxpbmtUYXJnZXQsdG9vbHRpcDptLmRiLmdldFRvb2x0aXAoQS5pZCl8fCIiLGRvbUlkOm0uZGIubG9va1VwRG9tSWQoQS5pZCksaGF2ZUNhbGxiYWNrOkEuaGF2ZUNhbGxiYWNrLHdpZHRoOkEudHlwZT09PSJncm91cCI/NTAwOnZvaWQgMCxkaXI6QS5kaXIsdHlwZTpBLnR5cGUscHJvcHM6QS5wcm9wcyxwYWRkaW5nOk9lKCkuZmxvd2NoYXJ0LnBhZGRpbmd9KSxVdC5pbmZvKCJzZXROb2RlIix7bGFiZWxTdHlsZTpCLmxhYmVsU3R5bGUsbGFiZWxUeXBlOkEubGFiZWxUeXBlLHNoYXBlOlcsbGFiZWxUZXh0Ok4scng6eixyeTp6LGNsYXNzOkksc3R5bGU6Qi5zdHlsZSxpZDpBLmlkLGRvbUlkOm0uZGIubG9va1VwRG9tSWQoQS5pZCksd2lkdGg6QS50eXBlPT09Imdyb3VwIj81MDA6dm9pZCAwLHR5cGU6QS50eXBlLGRpcjpBLmRpcixwcm9wczpBLnByb3BzLHBhZGRpbmc6T2UoKS5mbG93Y2hhcnQucGFkZGluZ30pfSl9LERCdD1mdW5jdGlvbihpLGEsZil7VXQuaW5mbygiYWJjNzggZWRnZXMgPSAiLGkpO2xldCBwPTAsdz17fSxtLGI7aWYoaS5kZWZhdWx0U3R5bGUhPT12b2lkIDApe2NvbnN0IEU9aW0oaS5kZWZhdWx0U3R5bGUpO209RS5zdHlsZSxiPUUubGFiZWxTdHlsZX1pLmZvckVhY2goZnVuY3Rpb24oRSl7cCsrO2NvbnN0IF89IkwtIitFLnN0YXJ0KyItIitFLmVuZDt3W19dPT09dm9pZCAwPyh3W19dPTAsVXQuaW5mbygiYWJjNzggbmV3IGVudHJ5IixfLHdbX10pKTood1tfXSsrLFV0LmluZm8oImFiYzc4IG5ldyBlbnRyeSIsXyx3W19dKSk7bGV0IEE9XysiLSIrd1tfXTtVdC5pbmZvKCJhYmM3OCBuZXcgbGluayBpZCB0byBiZSB1c2VkIGlzIixfLEEsd1tfXSk7Y29uc3QgST0iTFMtIitFLnN0YXJ0LEI9IkxFLSIrRS5lbmQsTj17c3R5bGU6IiIsbGFiZWxTdHlsZToiIn07c3dpdGNoKE4ubWlubGVuPUUubGVuZ3RofHwxLEUudHlwZT09PSJhcnJvd19vcGVuIj9OLmFycm93aGVhZD0ibm9uZSI6Ti5hcnJvd2hlYWQ9Im5vcm1hbCIsTi5hcnJvd1R5cGVTdGFydD0iYXJyb3dfb3BlbiIsTi5hcnJvd1R5cGVFbmQ9ImFycm93X29wZW4iLEUudHlwZSl7Y2FzZSJkb3VibGVfYXJyb3dfY3Jvc3MiOk4uYXJyb3dUeXBlU3RhcnQ9ImFycm93X2Nyb3NzIjtjYXNlImFycm93X2Nyb3NzIjpOLmFycm93VHlwZUVuZD0iYXJyb3dfY3Jvc3MiO2JyZWFrO2Nhc2UiZG91YmxlX2Fycm93X3BvaW50IjpOLmFycm93VHlwZVN0YXJ0PSJhcnJvd19wb2ludCI7Y2FzZSJhcnJvd19wb2ludCI6Ti5hcnJvd1R5cGVFbmQ9ImFycm93X3BvaW50IjticmVhaztjYXNlImRvdWJsZV9hcnJvd19jaXJjbGUiOk4uYXJyb3dUeXBlU3RhcnQ9ImFycm93X2NpcmNsZSI7Y2FzZSJhcnJvd19jaXJjbGUiOk4uYXJyb3dUeXBlRW5kPSJhcnJvd19jaXJjbGUiO2JyZWFrfWxldCBSPSIiLHo9IiI7c3dpdGNoKEUuc3Ryb2tlKXtjYXNlIm5vcm1hbCI6Uj0iZmlsbDpub25lOyIsbSE9PXZvaWQgMCYmKFI9bSksYiE9PXZvaWQgMCYmKHo9YiksTi50aGlja25lc3M9Im5vcm1hbCIsTi5wYXR0ZXJuPSJzb2xpZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOk4udGhpY2tuZXNzPSJub3JtYWwiLE4ucGF0dGVybj0iZG90dGVkIixOLnN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtZGFzaGFycmF5OjM7IjticmVhaztjYXNlInRoaWNrIjpOLnRoaWNrbmVzcz0idGhpY2siLE4ucGF0dGVybj0ic29saWQiLE4uc3R5bGU9InN0cm9rZS13aWR0aDogMy41cHg7ZmlsbDpub25lOyI7YnJlYWs7Y2FzZSJpbnZpc2libGUiOk4udGhpY2tuZXNzPSJpbnZpc2libGUiLE4ucGF0dGVybj0ic29saWQiLE4uc3R5bGU9InN0cm9rZS13aWR0aDogMDtmaWxsOm5vbmU7IjticmVha31pZihFLnN0eWxlIT09dm9pZCAwKXtjb25zdCBXPWltKEUuc3R5bGUpO1I9Vy5zdHlsZSx6PVcubGFiZWxTdHlsZX1OLnN0eWxlPU4uc3R5bGUrPVIsTi5sYWJlbFN0eWxlPU4ubGFiZWxTdHlsZSs9eixFLmludGVycG9sYXRlIT09dm9pZCAwP04uY3VydmU9ZXcoRS5pbnRlcnBvbGF0ZSxjZyk6aS5kZWZhdWx0SW50ZXJwb2xhdGUhPT12b2lkIDA/Ti5jdXJ2ZT1ldyhpLmRlZmF1bHRJbnRlcnBvbGF0ZSxjZyk6Ti5jdXJ2ZT1ldyhMQnQuY3VydmUsY2cpLEUudGV4dD09PXZvaWQgMD9FLnN0eWxlIT09dm9pZCAwJiYoTi5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihOLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixOLmxhYmVscG9zPSJjIiksTi5sYWJlbFR5cGU9RS5sYWJlbFR5cGUsTi5sYWJlbD1FLnRleHQucmVwbGFjZShLci5saW5lQnJlYWtSZWdleCxgCmApLEUuc3R5bGU9PT12b2lkIDAmJihOLnN0eWxlPU4uc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lOyIpLE4ubGFiZWxTdHlsZT1OLmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSxOLmlkPUEsTi5jbGFzc2VzPSJmbG93Y2hhcnQtbGluayAiK0krIiAiK0IsYS5zZXRFZGdlKEUuc3RhcnQsRS5lbmQsTixwKX0pfSxCMHQ9e3NldENvbmY6YXplLGFkZFZlcnRpY2VzOk1CdCxhZGRFZGdlczpEQnQsZ2V0Q2xhc3NlczpmdW5jdGlvbihpLGEpe3JldHVybiBhLmRiLmdldENsYXNzZXMoKX0sZHJhdzphc3luYyBmdW5jdGlvbihpLGEsZixwKXtVdC5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCIpO2xldCB3PXAuZGIuZ2V0RGlyZWN0aW9uKCk7dz09PXZvaWQgMCYmKHc9IlREIik7Y29uc3R7c2VjdXJpdHlMZXZlbDptLGZsb3djaGFydDpifT1PZSgpLEU9Yi5ub2RlU3BhY2luZ3x8NTAsXz1iLnJhbmtTcGFjaW5nfHw1MDtsZXQgQTttPT09InNhbmRib3giJiYoQT15cigiI2kiK2EpKTtjb25zdCBJPXlyKG09PT0ic2FuZGJveCI/QS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksQj1tPT09InNhbmRib3giP0Eubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsTj1uZXcgYzEoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2Rpcjp3LG5vZGVzZXA6RSxyYW5rc2VwOl8sbWFyZ2lueDowLG1hcmdpbnk6MH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO2xldCBSO2NvbnN0IHo9cC5kYi5nZXRTdWJHcmFwaHMoKTtVdC5pbmZvKCJTdWJncmFwaHMgLSAiLHopO2ZvcihsZXQgeXQ9ei5sZW5ndGgtMTt5dD49MDt5dC0tKVI9elt5dF0sVXQuaW5mbygiU3ViZ3JhcGggLSAiLFIpLHAuZGIuYWRkVmVydGV4KFIuaWQse3RleHQ6Ui50aXRsZSx0eXBlOlIubGFiZWxUeXBlfSwiZ3JvdXAiLHZvaWQgMCxSLmNsYXNzZXMsUi5kaXIpO2NvbnN0IFc9cC5kYi5nZXRWZXJ0aWNlcygpLGV0PXAuZGIuZ2V0RWRnZXMoKTtVdC5pbmZvKCJFZGdlcyIsZXQpO2xldCBzdD0wO2ZvcihzdD16Lmxlbmd0aC0xO3N0Pj0wO3N0LS0pe1I9eltzdF0sc010KCJjbHVzdGVyIikuYXBwZW5kKCJ0ZXh0Iik7Zm9yKGxldCB5dD0wO3l0PFIubm9kZXMubGVuZ3RoO3l0KyspVXQuaW5mbygiU2V0dGluZyB1cCBzdWJncmFwaHMiLFIubm9kZXNbeXRdLFIuaWQpLE4uc2V0UGFyZW50KFIubm9kZXNbeXRdLFIuaWQpfU1CdChXLE4sYSxJLEIscCksREJ0KGV0LE4pO2NvbnN0IGF0PUkuc2VsZWN0KGBbaWQ9IiR7YX0iXWApLGJ0PUkuc2VsZWN0KCIjIithKyIgZyIpO2lmKGF3YWl0IE4wdChidCxOLFsicG9pbnQiLCJjaXJjbGUiLCJjcm9zcyJdLCJmbG93Y2hhcnQiLGEpLCRhLmluc2VydFRpdGxlKGF0LCJmbG93Y2hhcnRUaXRsZVRleHQiLGIudGl0bGVUb3BNYXJnaW4scC5kYi5nZXREaWFncmFtVGl0bGUoKSksZlQoTixhdCxiLmRpYWdyYW1QYWRkaW5nLGIudXNlTWF4V2lkdGgpLHAuZGIuaW5kZXhOb2Rlcygic3ViR3JhcGgiK3N0KSwhYi5odG1sTGFiZWxzKXtjb25zdCB5dD1CLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJythKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpO2Zvcihjb25zdCBmdCBvZiB5dCl7Y29uc3QgdXQ9ZnQuZ2V0QkJveCgpLHZ0PUIuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlY3QiKTt2dC5zZXRBdHRyaWJ1dGUoInJ4IiwwKSx2dC5zZXRBdHRyaWJ1dGUoInJ5IiwwKSx2dC5zZXRBdHRyaWJ1dGUoIndpZHRoIix1dC53aWR0aCksdnQuc2V0QXR0cmlidXRlKCJoZWlnaHQiLHV0LmhlaWdodCksZnQuaW5zZXJ0QmVmb3JlKHZ0LGZ0LmZpcnN0Q2hpbGQpfX1PYmplY3Qua2V5cyhXKS5mb3JFYWNoKGZ1bmN0aW9uKHl0KXtjb25zdCBmdD1XW3l0XTtpZihmdC5saW5rKXtjb25zdCB1dD15cigiIyIrYSsnIFtpZD0iJyt5dCsnIl0nKTtpZih1dCl7Y29uc3QgdnQ9Qi5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO3Z0LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNsYXNzIixmdC5jbGFzc2VzLmpvaW4oIiAiKSksdnQuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsZnQubGluayksdnQuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVsIiwibm9vcGVuZXIiKSxtPT09InNhbmRib3giP3Z0LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsIl90b3AiKTpmdC5saW5rVGFyZ2V0JiZ2dC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLGZ0LmxpbmtUYXJnZXQpO2NvbnN0IFg9dXQuaW5zZXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIHZ0fSwiOmZpcnN0LWNoaWxkIikscHQ9dXQuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIik7cHQmJlguYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIHB0Lm5vZGUoKX0pO2NvbnN0IFU9dXQuc2VsZWN0KCIubGFiZWwiKTtVJiZYLmFwcGVuZChmdW5jdGlvbigpe3JldHVybiBVLm5vZGUoKX0pfX19KX19LG96ZT0oaSxhKT0+e2NvbnN0IGY9Y0NlLHA9ZihpLCJyIiksdz1mKGksImciKSxtPWYoaSwiYiIpO3JldHVybiBGQShwLHcsbSxhKX0sSUJ0PWk9PmAubGFiZWwgewogICAgZm9udC1mYW1pbHk6ICR7aS5mb250RmFtaWx5fTsKICAgIGNvbG9yOiAke2kubm9kZVRleHRDb2xvcnx8aS50ZXh0Q29sb3J9OwogIH0KICAuY2x1c3Rlci1sYWJlbCB0ZXh0IHsKICAgIGZpbGw6ICR7aS50aXRsZUNvbG9yfTsKICB9CiAgLmNsdXN0ZXItbGFiZWwgc3BhbixwIHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAubGFiZWwgdGV4dCxzcGFuLHAgewogICAgZmlsbDogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICAgIGNvbG9yOiAke2kubm9kZVRleHRDb2xvcnx8aS50ZXh0Q29sb3J9OwogIH0KCiAgLm5vZGUgcmVjdCwKICAubm9kZSBjaXJjbGUsCiAgLm5vZGUgZWxsaXBzZSwKICAubm9kZSBwb2x5Z29uLAogIC5ub2RlIHBhdGggewogICAgZmlsbDogJHtpLm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CiAgLmZsb3djaGFydC1sYWJlbCB0ZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgfQogIC8vIC5mbG93Y2hhcnQtbGFiZWwgLnRleHQtb3V0ZXItdHNwYW4gewogIC8vICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAvLyB9CiAgLy8gLmZsb3djaGFydC1sYWJlbCAudGV4dC1pbm5lci10c3BhbiB7CiAgLy8gICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgLy8gfQoKICAubm9kZSAubGFiZWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAubm9kZS5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHtpLmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyLjBweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgICBmaWxsOiAke2kuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICB9CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQoKICAvKiBGb3IgaHRtbCBsYWJlbHMgb25seSAqLwogIC5sYWJlbEJrZyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke296ZShpLmVkZ2VMYWJlbEJhY2tncm91bmQsLjUpfTsKICAgIC8vIGJhY2tncm91bmQtY29sb3I6IAogIH0KCiAgLmNsdXN0ZXIgcmVjdCB7CiAgICBmaWxsOiAke2kuY2x1c3RlckJrZ307CiAgICBzdHJva2U6ICR7aS5jbHVzdGVyQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuY2x1c3RlciBzcGFuLHAgewogICAgY29sb3I6ICR7aS50aXRsZUNvbG9yfTsKICB9CiAgLyogLmNsdXN0ZXIgZGl2IHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfSAqLwoKICBkaXYubWVybWFpZFRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWF4LXdpZHRoOiAyMDBweDsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2kuYm9yZGVyMn07CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEwMDsKICB9CgogIC5mbG93Y2hhcnRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KYCxjemU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpIZHQsZGI6d1QscmVuZGVyZXI6QjB0LHN0eWxlczpJQnQsaW5pdDppPT57aS5mbG93Y2hhcnR8fChpLmZsb3djaGFydD17fSksaS5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZT1pLmFycm93TWFya2VyQWJzb2x1dGUsaFJlLnNldENvbmYoaS5mbG93Y2hhcnQpLHdULmNsZWFyKCksd1Quc2V0R2VuKCJnZW4tMSIpfX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksdXplPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6SGR0LGRiOndULHJlbmRlcmVyOkIwdCxzdHlsZXM6SUJ0LGluaXQ6aT0+e2kuZmxvd2NoYXJ0fHwoaS5mbG93Y2hhcnQ9e30pLGkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGU9aS5hcnJvd01hcmtlckFic29sdXRlLGNBZSh7Zmxvd2NoYXJ0OnthcnJvd01hcmtlckFic29sdXRlOmkuYXJyb3dNYXJrZXJBYnNvbHV0ZX19KSxCMHQuc2V0Q29uZihpLmZsb3djaGFydCksd1QuY2xlYXIoKSx3VC5zZXRHZW4oImdlbi0yIil9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgUjB0PWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24odnQsWCxwdCxVKXtmb3IocHQ9cHR8fHt9LFU9dnQubGVuZ3RoO1UtLTtwdFt2dFtVXV09WCk7cmV0dXJuIHB0fSxhPVs2LDgsMTAsMjAsMjIsMjQsMjYsMjcsMjhdLGY9WzEsMTBdLHA9WzEsMTFdLHc9WzEsMTJdLG09WzEsMTNdLGI9WzEsMTRdLEU9WzEsMTVdLF89WzEsMjFdLEE9WzEsMjJdLEk9WzEsMjNdLEI9WzEsMjRdLE49WzEsMjVdLFI9WzYsOCwxMCwxMywxNSwxOCwxOSwyMCwyMiwyNCwyNiwyNywyOCw0MSw0Miw0Myw0NCw0NV0sej1bMSwzNF0sVz1bMjcsMjgsNDYsNDddLGV0PVs0MSw0Miw0Myw0NCw0NV0sc3Q9WzE3LDM0XSxhdD1bMSw1NF0sYnQ9WzEsNTNdLG10PVsxNywzNCwzNiwzOF0seXQ9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLEVSX0RJQUdSQU06NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxTUEFDRTo4LHN0YXRlbWVudDo5LE5FV0xJTkU6MTAsZW50aXR5TmFtZToxMSxyZWxTcGVjOjEyLCI6IjoxMyxyb2xlOjE0LEJMT0NLX1NUQVJUOjE1LGF0dHJpYnV0ZXM6MTYsQkxPQ0tfU1RPUDoxNyxTUVM6MTgsU1FFOjE5LHRpdGxlOjIwLHRpdGxlX3ZhbHVlOjIxLGFjY190aXRsZToyMixhY2NfdGl0bGVfdmFsdWU6MjMsYWNjX2Rlc2NyOjI0LGFjY19kZXNjcl92YWx1ZToyNSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjI2LEFMUEhBTlVNOjI3LEVOVElUWV9OQU1FOjI4LGF0dHJpYnV0ZToyOSxhdHRyaWJ1dGVUeXBlOjMwLGF0dHJpYnV0ZU5hbWU6MzEsYXR0cmlidXRlS2V5VHlwZUxpc3Q6MzIsYXR0cmlidXRlQ29tbWVudDozMyxBVFRSSUJVVEVfV09SRDozNCxhdHRyaWJ1dGVLZXlUeXBlOjM1LENPTU1BOjM2LEFUVFJJQlVURV9LRVk6MzcsQ09NTUVOVDozOCxjYXJkaW5hbGl0eTozOSxyZWxUeXBlOjQwLFpFUk9fT1JfT05FOjQxLFpFUk9fT1JfTU9SRTo0MixPTkVfT1JfTU9SRTo0MyxPTkxZX09ORTo0NCxNRF9QQVJFTlQ6NDUsTk9OX0lERU5USUZZSU5HOjQ2LElERU5USUZZSU5HOjQ3LFdPUkQ6NDgsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IkVSX0RJQUdSQU0iLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJORVdMSU5FIiwxMzoiOiIsMTU6IkJMT0NLX1NUQVJUIiwxNzoiQkxPQ0tfU1RPUCIsMTg6IlNRUyIsMTk6IlNRRSIsMjA6InRpdGxlIiwyMToidGl0bGVfdmFsdWUiLDIyOiJhY2NfdGl0bGUiLDIzOiJhY2NfdGl0bGVfdmFsdWUiLDI0OiJhY2NfZGVzY3IiLDI1OiJhY2NfZGVzY3JfdmFsdWUiLDI2OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwyNzoiQUxQSEFOVU0iLDI4OiJFTlRJVFlfTkFNRSIsMzQ6IkFUVFJJQlVURV9XT1JEIiwzNjoiQ09NTUEiLDM3OiJBVFRSSUJVVEVfS0VZIiwzODoiQ09NTUVOVCIsNDE6IlpFUk9fT1JfT05FIiw0MjoiWkVST19PUl9NT1JFIiw0MzoiT05FX09SX01PUkUiLDQ0OiJPTkxZX09ORSIsNDU6Ik1EX1BBUkVOVCIsNDY6Ik5PTl9JREVOVElGWUlORyIsNDc6IklERU5USUZZSU5HIiw0ODoiV09SRCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbNSwwXSxbNSwyXSxbNywyXSxbNywxXSxbNywxXSxbNywxXSxbOSw1XSxbOSw0XSxbOSwzXSxbOSwxXSxbOSw3XSxbOSw2XSxbOSw0XSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwxXSxbMTEsMV0sWzExLDFdLFsxNiwxXSxbMTYsMl0sWzI5LDJdLFsyOSwzXSxbMjksM10sWzI5LDRdLFszMCwxXSxbMzEsMV0sWzMyLDFdLFszMiwzXSxbMzUsMV0sWzMzLDFdLFsxMiwzXSxbMzksMV0sWzM5LDFdLFszOSwxXSxbMzksMV0sWzM5LDFdLFs0MCwxXSxbNDAsMV0sWzE0LDFdLFsxNCwxXSxbMTQsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oWCxwdCxVLFR0LG50LEl0LE90KXt2YXIgQnQ9SXQubGVuZ3RoLTE7c3dpdGNoKG50KXtjYXNlIDE6YnJlYWs7Y2FzZSAyOnRoaXMuJD1bXTticmVhaztjYXNlIDM6SXRbQnQtMV0ucHVzaChJdFtCdF0pLHRoaXMuJD1JdFtCdC0xXTticmVhaztjYXNlIDQ6Y2FzZSA1OnRoaXMuJD1JdFtCdF07YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA4OlR0LmFkZEVudGl0eShJdFtCdC00XSksVHQuYWRkRW50aXR5KEl0W0J0LTJdKSxUdC5hZGRSZWxhdGlvbnNoaXAoSXRbQnQtNF0sSXRbQnRdLEl0W0J0LTJdLEl0W0J0LTNdKTticmVhaztjYXNlIDk6VHQuYWRkRW50aXR5KEl0W0J0LTNdKSxUdC5hZGRBdHRyaWJ1dGVzKEl0W0J0LTNdLEl0W0J0LTFdKTticmVhaztjYXNlIDEwOlR0LmFkZEVudGl0eShJdFtCdC0yXSk7YnJlYWs7Y2FzZSAxMTpUdC5hZGRFbnRpdHkoSXRbQnRdKTticmVhaztjYXNlIDEyOlR0LmFkZEVudGl0eShJdFtCdC02XSxJdFtCdC00XSksVHQuYWRkQXR0cmlidXRlcyhJdFtCdC02XSxJdFtCdC0xXSk7YnJlYWs7Y2FzZSAxMzpUdC5hZGRFbnRpdHkoSXRbQnQtNV0sSXRbQnQtM10pO2JyZWFrO2Nhc2UgMTQ6VHQuYWRkRW50aXR5KEl0W0J0LTNdLEl0W0J0LTFdKTticmVhaztjYXNlIDE1OmNhc2UgMTY6dGhpcy4kPUl0W0J0XS50cmltKCksVHQuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDE3OmNhc2UgMTg6dGhpcy4kPUl0W0J0XS50cmltKCksVHQuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDE5OmNhc2UgNDM6dGhpcy4kPUl0W0J0XTticmVhaztjYXNlIDIwOmNhc2UgNDE6Y2FzZSA0Mjp0aGlzLiQ9SXRbQnRdLnJlcGxhY2UoLyIvZywiIik7YnJlYWs7Y2FzZSAyMTpjYXNlIDI5OnRoaXMuJD1bSXRbQnRdXTticmVhaztjYXNlIDIyOkl0W0J0XS5wdXNoKEl0W0J0LTFdKSx0aGlzLiQ9SXRbQnRdO2JyZWFrO2Nhc2UgMjM6dGhpcy4kPXthdHRyaWJ1dGVUeXBlOkl0W0J0LTFdLGF0dHJpYnV0ZU5hbWU6SXRbQnRdfTticmVhaztjYXNlIDI0OnRoaXMuJD17YXR0cmlidXRlVHlwZTpJdFtCdC0yXSxhdHRyaWJ1dGVOYW1lOkl0W0J0LTFdLGF0dHJpYnV0ZUtleVR5cGVMaXN0Okl0W0J0XX07YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6SXRbQnQtMl0sYXR0cmlidXRlTmFtZTpJdFtCdC0xXSxhdHRyaWJ1dGVDb21tZW50Okl0W0J0XX07YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6SXRbQnQtM10sYXR0cmlidXRlTmFtZTpJdFtCdC0yXSxhdHRyaWJ1dGVLZXlUeXBlTGlzdDpJdFtCdC0xXSxhdHRyaWJ1dGVDb21tZW50Okl0W0J0XX07YnJlYWs7Y2FzZSAyNzpjYXNlIDI4OmNhc2UgMzE6dGhpcy4kPUl0W0J0XTticmVhaztjYXNlIDMwOkl0W0J0LTJdLnB1c2goSXRbQnRdKSx0aGlzLiQ9SXRbQnQtMl07YnJlYWs7Y2FzZSAzMjp0aGlzLiQ9SXRbQnRdLnJlcGxhY2UoLyIvZywiIik7YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9e2NhcmRBOkl0W0J0XSxyZWxUeXBlOkl0W0J0LTFdLGNhcmRCOkl0W0J0LTJdfTticmVhaztjYXNlIDM0OnRoaXMuJD1UdC5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTticmVhaztjYXNlIDM1OnRoaXMuJD1UdC5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU7YnJlYWs7Y2FzZSAzNjp0aGlzLiQ9VHQuQ2FyZGluYWxpdHkuT05FX09SX01PUkU7YnJlYWs7Y2FzZSAzNzp0aGlzLiQ9VHQuQ2FyZGluYWxpdHkuT05MWV9PTkU7YnJlYWs7Y2FzZSAzODp0aGlzLiQ9VHQuQ2FyZGluYWxpdHkuTURfUEFSRU5UO2JyZWFrO2Nhc2UgMzk6dGhpcy4kPVR0LklkZW50aWZpY2F0aW9uLk5PTl9JREVOVElGWUlORzticmVhaztjYXNlIDQwOnRoaXMuJD1UdC5JZGVudGlmaWNhdGlvbi5JREVOVElGWUlORzticmVha319LHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0saShhLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODpbMSw2XSw5OjcsMTA6WzEsOF0sMTE6OSwyMDpmLDIyOnAsMjQ6dywyNjptLDI3OmIsMjg6RX0saShhLFsyLDddLHsxOlsyLDFdfSksaShhLFsyLDNdKSx7OToxNiwxMTo5LDIwOmYsMjI6cCwyNDp3LDI2Om0sMjc6YiwyODpFfSxpKGEsWzIsNV0pLGkoYSxbMiw2XSksaShhLFsyLDExXSx7MTI6MTcsMzk6MjAsMTU6WzEsMThdLDE4OlsxLDE5XSw0MTpfLDQyOkEsNDM6SSw0NDpCLDQ1Ok59KSx7MjE6WzEsMjZdfSx7MjM6WzEsMjddfSx7MjU6WzEsMjhdfSxpKGEsWzIsMThdKSxpKFIsWzIsMTldKSxpKFIsWzIsMjBdKSxpKGEsWzIsNF0pLHsxMToyOSwyNzpiLDI4OkV9LHsxNjozMCwxNzpbMSwzMV0sMjk6MzIsMzA6MzMsMzQ6en0sezExOjM1LDI3OmIsMjg6RX0sezQwOjM2LDQ2OlsxLDM3XSw0NzpbMSwzOF19LGkoVyxbMiwzNF0pLGkoVyxbMiwzNV0pLGkoVyxbMiwzNl0pLGkoVyxbMiwzN10pLGkoVyxbMiwzOF0pLGkoYSxbMiwxNV0pLGkoYSxbMiwxNl0pLGkoYSxbMiwxN10pLHsxMzpbMSwzOV19LHsxNzpbMSw0MF19LGkoYSxbMiwxMF0pLHsxNjo0MSwxNzpbMiwyMV0sMjk6MzIsMzA6MzMsMzQ6en0sezMxOjQyLDM0OlsxLDQzXX0sezM0OlsyLDI3XX0sezE5OlsxLDQ0XX0sezM5OjQ1LDQxOl8sNDI6QSw0MzpJLDQ0OkIsNDU6Tn0saShldCxbMiwzOV0pLGkoZXQsWzIsNDBdKSx7MTQ6NDYsMjc6WzEsNDldLDI4OlsxLDQ4XSw0ODpbMSw0N119LGkoYSxbMiw5XSksezE3OlsyLDIyXX0saShzdCxbMiwyM10sezMyOjUwLDMzOjUxLDM1OjUyLDM3OmF0LDM4OmJ0fSksaShbMTcsMzQsMzcsMzhdLFsyLDI4XSksaShhLFsyLDE0XSx7MTU6WzEsNTVdfSksaShbMjcsMjhdLFsyLDMzXSksaShhLFsyLDhdKSxpKGEsWzIsNDFdKSxpKGEsWzIsNDJdKSxpKGEsWzIsNDNdKSxpKHN0LFsyLDI0XSx7MzM6NTYsMzY6WzEsNTddLDM4OmJ0fSksaShzdCxbMiwyNV0pLGkobXQsWzIsMjldKSxpKHN0LFsyLDMyXSksaShtdCxbMiwzMV0pLHsxNjo1OCwxNzpbMSw1OV0sMjk6MzIsMzA6MzMsMzQ6en0saShzdCxbMiwyNl0pLHszNTo2MCwzNzphdH0sezE3OlsxLDYxXX0saShhLFsyLDEzXSksaShtdCxbMiwzMF0pLGkoYSxbMiwxMl0pXSxkZWZhdWx0QWN0aW9uczp7MzQ6WzIsMjddLDQxOlsyLDIyXX0scGFyc2VFcnJvcjpmdW5jdGlvbihYLHB0KXtpZihwdC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKFgpO2Vsc2V7dmFyIFU9bmV3IEVycm9yKFgpO3Rocm93IFUuaGFzaD1wdCxVfX0scGFyc2U6ZnVuY3Rpb24oWCl7dmFyIHB0PXRoaXMsVT1bMF0sVHQ9W10sbnQ9W251bGxdLEl0PVtdLE90PXRoaXMudGFibGUsQnQ9IiIsRXQ9MCxaPTAsQ3Q9Mix4dD0xLEh0PUl0LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLExlPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksRnQ9e3l5Ont9fTtmb3IodmFyIGduIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZ24pJiYoRnQueXlbZ25dPXRoaXMueXlbZ25dKTtMZS5zZXRJbnB1dChYLEZ0Lnl5KSxGdC55eS5sZXhlcj1MZSxGdC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgTGUueXlsbG9jPiJ1IiYmKExlLnl5bGxvYz17fSk7dmFyIFNlPUxlLnl5bGxvYztJdC5wdXNoKFNlKTt2YXIgbWU9TGUub3B0aW9ucyYmTGUub3B0aW9ucy5yYW5nZXM7dHlwZW9mIEZ0Lnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPUZ0Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIFZlKCl7dmFyIG9uO3JldHVybiBvbj1UdC5wb3AoKXx8TGUubGV4KCl8fHh0LHR5cGVvZiBvbiE9Im51bWJlciImJihvbiBpbnN0YW5jZW9mIEFycmF5JiYoVHQ9b24sb249VHQucG9wKCkpLG9uPXB0LnN5bWJvbHNfW29uXXx8b24pLG9ufWZvcih2YXIgWWUsY2Usa2UsenQscmU9e30sc2UsUGUsdGUsTWU7Oyl7aWYoY2U9VVtVLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2NlXT9rZT10aGlzLmRlZmF1bHRBY3Rpb25zW2NlXTooKFllPT09bnVsbHx8dHlwZW9mIFllPiJ1IikmJihZZT1WZSgpKSxrZT1PdFtjZV0mJk90W2NlXVtZZV0pLHR5cGVvZiBrZT4idSJ8fCFrZS5sZW5ndGh8fCFrZVswXSl7dmFyIGRlPSIiO01lPVtdO2ZvcihzZSBpbiBPdFtjZV0pdGhpcy50ZXJtaW5hbHNfW3NlXSYmc2U+Q3QmJk1lLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tzZV0rIiciKTtMZS5zaG93UG9zaXRpb24/ZGU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoRXQrMSkrYDoKYCtMZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK01lLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bWWVdfHxZZSkrIiciOmRlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEV0KzEpKyI6IFVuZXhwZWN0ZWQgIisoWWU9PXh0PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW1llXXx8WWUpKyInIiksdGhpcy5wYXJzZUVycm9yKGRlLHt0ZXh0OkxlLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tZZV18fFllLGxpbmU6TGUueXlsaW5lbm8sbG9jOlNlLGV4cGVjdGVkOk1lfSl9aWYoa2VbMF1pbnN0YW5jZW9mIEFycmF5JiZrZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2NlKyIsIHRva2VuOiAiK1llKTtzd2l0Y2goa2VbMF0pe2Nhc2UgMTpVLnB1c2goWWUpLG50LnB1c2goTGUueXl0ZXh0KSxJdC5wdXNoKExlLnl5bGxvYyksVS5wdXNoKGtlWzFdKSxZZT1udWxsLFo9TGUueXlsZW5nLEJ0PUxlLnl5dGV4dCxFdD1MZS55eWxpbmVubyxTZT1MZS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKFBlPXRoaXMucHJvZHVjdGlvbnNfW2tlWzFdXVsxXSxyZS4kPW50W250Lmxlbmd0aC1QZV0scmUuXyQ9e2ZpcnN0X2xpbmU6SXRbSXQubGVuZ3RoLShQZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOkl0W0l0Lmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOkl0W0l0Lmxlbmd0aC0oUGV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46SXRbSXQubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxtZSYmKHJlLl8kLnJhbmdlPVtJdFtJdC5sZW5ndGgtKFBlfHwxKV0ucmFuZ2VbMF0sSXRbSXQubGVuZ3RoLTFdLnJhbmdlWzFdXSksenQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHJlLFtCdCxaLEV0LEZ0Lnl5LGtlWzFdLG50LEl0XS5jb25jYXQoSHQpKSx0eXBlb2YgenQ8InUiKXJldHVybiB6dDtQZSYmKFU9VS5zbGljZSgwLC0xKlBlKjIpLG50PW50LnNsaWNlKDAsLTEqUGUpLEl0PUl0LnNsaWNlKDAsLTEqUGUpKSxVLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba2VbMV1dWzBdKSxudC5wdXNoKHJlLiQpLEl0LnB1c2gocmUuXyQpLHRlPU90W1VbVS5sZW5ndGgtMl1dW1VbVS5sZW5ndGgtMV1dLFUucHVzaCh0ZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LGZ0PWZ1bmN0aW9uKCl7dmFyIHZ0PXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHB0LFUpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IocHQsVSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IocHQpfSxzZXRJbnB1dDpmdW5jdGlvbihYLHB0KXtyZXR1cm4gdGhpcy55eT1wdHx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9WCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgWD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9WCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9WCx0aGlzLm1hdGNoZWQrPVg7dmFyIHB0PVgubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBwdD8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksWH0sdW5wdXQ6ZnVuY3Rpb24oWCl7dmFyIHB0PVgubGVuZ3RoLFU9WC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PVgrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLXB0KSx0aGlzLm9mZnNldC09cHQ7dmFyIFR0PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLFUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1VLmxlbmd0aC0xKTt2YXIgbnQ9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlU/KFUubGVuZ3RoPT09VHQubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStUdFtUdC5sZW5ndGgtVS5sZW5ndGhdLmxlbmd0aC1VWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tcHR9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bbnRbMF0sbnRbMF0rdGhpcy55eWxlbmctcHRdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihYKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoWCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgWD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFgubGVuZ3RoPjIwPyIuLi4iOiIiKStYLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIFg9dGhpcy5tYXRjaDtyZXR1cm4gWC5sZW5ndGg8MjAmJihYKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1YLmxlbmd0aCkpLChYLnN1YnN0cigwLDIwKSsoWC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIFg9dGhpcy5wYXN0SW5wdXQoKSxwdD1uZXcgQXJyYXkoWC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBYK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtwdCsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oWCxwdCl7dmFyIFUsVHQsbnQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKG50PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKG50Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLFR0PVhbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLFR0JiYodGhpcy55eWxpbmVubys9VHQubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46VHQ/VHRbVHQubGVuZ3RoLTFdLmxlbmd0aC1UdFtUdC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitYWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVhbMF0sdGhpcy5tYXRjaCs9WFswXSx0aGlzLm1hdGNoZXM9WCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShYWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1YWzBdLFU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMscHQsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksVSlyZXR1cm4gVTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgSXQgaW4gbnQpdGhpc1tJdF09bnRbSXRdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIFgscHQsVSxUdDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBudD10aGlzLl9jdXJyZW50UnVsZXMoKSxJdD0wO0l0PG50Lmxlbmd0aDtJdCsrKWlmKFU9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tudFtJdF1dKSxVJiYoIXB0fHxVWzBdLmxlbmd0aD5wdFswXS5sZW5ndGgpKXtpZihwdD1VLFR0PUl0LHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKFg9dGhpcy50ZXN0X21hdGNoKFUsbnRbSXRdKSxYIT09ITEpcmV0dXJuIFg7aWYodGhpcy5fYmFja3RyYWNrKXtwdD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBwdD8oWD10aGlzLnRlc3RfbWF0Y2gocHQsbnRbVHRdKSxYIT09ITE/WDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHB0PXRoaXMubmV4dCgpO3JldHVybiBwdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24ocHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChwdCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIHB0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIHB0PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24ocHQpe3JldHVybiBwdD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHB0fHwwKSxwdD49MD90aGlzLmNvbmRpdGlvblN0YWNrW3B0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihwdCl7dGhpcy5iZWdpbihwdCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24ocHQsVSxUdCxudCl7c3dpdGNoKFR0KXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDIyO2Nhc2UgMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgMjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMjQ7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSA0OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA3OnJldHVybiAxMDtjYXNlIDg6YnJlYWs7Y2FzZSA5OnJldHVybiA4O2Nhc2UgMTA6cmV0dXJuIDI4O2Nhc2UgMTE6cmV0dXJuIDQ4O2Nhc2UgMTI6cmV0dXJuIDQ7Y2FzZSAxMzpyZXR1cm4gdGhpcy5iZWdpbigiYmxvY2siKSwxNTtjYXNlIDE0OnJldHVybiAzNjtjYXNlIDE1OmJyZWFrO2Nhc2UgMTY6cmV0dXJuIDM3O2Nhc2UgMTc6cmV0dXJuIDM0O2Nhc2UgMTg6cmV0dXJuIDM0O2Nhc2UgMTk6cmV0dXJuIDM4O2Nhc2UgMjA6YnJlYWs7Y2FzZSAyMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE3O2Nhc2UgMjI6cmV0dXJuIFUueXl0ZXh0WzBdO2Nhc2UgMjM6cmV0dXJuIDE4O2Nhc2UgMjQ6cmV0dXJuIDE5O2Nhc2UgMjU6cmV0dXJuIDQxO2Nhc2UgMjY6cmV0dXJuIDQzO2Nhc2UgMjc6cmV0dXJuIDQzO2Nhc2UgMjg6cmV0dXJuIDQzO2Nhc2UgMjk6cmV0dXJuIDQxO2Nhc2UgMzA6cmV0dXJuIDQxO2Nhc2UgMzE6cmV0dXJuIDQyO2Nhc2UgMzI6cmV0dXJuIDQyO2Nhc2UgMzM6cmV0dXJuIDQyO2Nhc2UgMzQ6cmV0dXJuIDQyO2Nhc2UgMzU6cmV0dXJuIDQyO2Nhc2UgMzY6cmV0dXJuIDQzO2Nhc2UgMzc6cmV0dXJuIDQyO2Nhc2UgMzg6cmV0dXJuIDQzO2Nhc2UgMzk6cmV0dXJuIDQ0O2Nhc2UgNDA6cmV0dXJuIDQ0O2Nhc2UgNDE6cmV0dXJuIDQ0O2Nhc2UgNDI6cmV0dXJuIDQ0O2Nhc2UgNDM6cmV0dXJuIDQxO2Nhc2UgNDQ6cmV0dXJuIDQyO2Nhc2UgNDU6cmV0dXJuIDQzO2Nhc2UgNDY6cmV0dXJuIDQ1O2Nhc2UgNDc6cmV0dXJuIDQ2O2Nhc2UgNDg6cmV0dXJuIDQ3O2Nhc2UgNDk6cmV0dXJuIDQ3O2Nhc2UgNTA6cmV0dXJuIDQ2O2Nhc2UgNTE6cmV0dXJuIDQ2O2Nhc2UgNTI6cmV0dXJuIDQ2O2Nhc2UgNTM6cmV0dXJuIDI3O2Nhc2UgNTQ6cmV0dXJuIFUueXl0ZXh0WzBdO2Nhc2UgNTU6cmV0dXJuIDZ9fSxydWxlczpbL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86W1xzXSspL2ksL14oPzoiW14iJVxyXG5cdlxiXFxdKyIpL2ksL14oPzoiW14iXSoiKS9pLC9eKD86ZXJEaWFncmFtXGIpL2ksL14oPzpceykvaSwvXig/OiwpL2ksL14oPzpccyspL2ksL14oPzpcYigoPzpQSyl8KD86RkspfCg/OlVLKSlcYikvaSwvXig/OiguKj8pW35dKC4qPykqW35dKS9pLC9eKD86W1wqQS1aYS16X11bQS1aYS16MC05XC1fXFtcXVwoXCldKikvaSwvXig/OiJbXiJdKiIpL2ksL14oPzpbXG5dKykvaSwvXig/Olx9KS9pLC9eKD86LikvaSwvXig/OlxbKS9pLC9eKD86XF0pL2ksL14oPzpvbmUgb3IgemVyb1xiKS9pLC9eKD86b25lIG9yIG1vcmVcYikvaSwvXig/Om9uZSBvciBtYW55XGIpL2ksL14oPzoxXCspL2ksL14oPzpcfG9cYikvaSwvXig/Onplcm8gb3Igb25lXGIpL2ksL14oPzp6ZXJvIG9yIG1vcmVcYikvaSwvXig/Onplcm8gb3IgbWFueVxiKS9pLC9eKD86MFwrKS9pLC9eKD86XH1vXGIpL2ksL14oPzptYW55XCgwXCkpL2ksL14oPzptYW55XCgxXCkpL2ksL14oPzptYW55XGIpL2ksL14oPzpcfVx8KS9pLC9eKD86b25lXGIpL2ksL14oPzpvbmx5IG9uZVxiKS9pLC9eKD86MVxiKS9pLC9eKD86XHxcfCkvaSwvXig/Om9cfCkvaSwvXig/Om9ceykvaSwvXig/Olx8XHspL2ksL14oPzpccyp1XGIpL2ksL14oPzpcLlwuKS9pLC9eKD86LS0pL2ksL14oPzp0b1xiKS9pLC9eKD86b3B0aW9uYWxseSB0b1xiKS9pLC9eKD86XC4tKS9pLC9eKD86LVwuKS9pLC9eKD86W0EtWmEtel9dW0EtWmEtejAtOVwtX10qKS9pLC9eKD86LikvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls1LDZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbM10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LGJsb2NrOntydWxlczpbMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjJdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsOCw5LDEwLDExLDEyLDEzLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHZ0fSgpO3l0LmxleGVyPWZ0O2Z1bmN0aW9uIHV0KCl7dGhpcy55eT17fX1yZXR1cm4gdXQucHJvdG90eXBlPXl0LHl0LlBhcnNlcj11dCxuZXcgdXR9KCk7UjB0LnBhcnNlcj1SMHQ7Y29uc3QgbHplPVIwdDtsZXQgbWs9e30sajB0PVtdO2NvbnN0IGh6ZT17WkVST19PUl9PTkU6IlpFUk9fT1JfT05FIixaRVJPX09SX01PUkU6IlpFUk9fT1JfTU9SRSIsT05FX09SX01PUkU6Ik9ORV9PUl9NT1JFIixPTkxZX09ORToiT05MWV9PTkUiLE1EX1BBUkVOVDoiTURfUEFSRU5UIn0sZnplPXtOT05fSURFTlRJRllJTkc6Ik5PTl9JREVOVElGWUlORyIsSURFTlRJRllJTkc6IklERU5USUZZSU5HIn0sT0J0PWZ1bmN0aW9uKGksYT12b2lkIDApe3JldHVybiBta1tpXT09PXZvaWQgMD8obWtbaV09e2F0dHJpYnV0ZXM6W10sYWxpYXM6YX0sVXQuaW5mbygiQWRkZWQgbmV3IGVudGl0eSA6IixpKSk6bWtbaV0mJiFta1tpXS5hbGlhcyYmYSYmKG1rW2ldLmFsaWFzPWEsVXQuaW5mbyhgQWRkIGFsaWFzICcke2F9JyB0byBlbnRpdHkgJyR7aX0nYCkpLG1rW2ldfSxkemU9e0NhcmRpbmFsaXR5Omh6ZSxJZGVudGlmaWNhdGlvbjpmemUsZ2V0Q29uZmlnOigpPT5PZSgpLmVyLGFkZEVudGl0eTpPQnQsYWRkQXR0cmlidXRlczpmdW5jdGlvbihpLGEpe2xldCBmPU9CdChpKSxwO2ZvcihwPWEubGVuZ3RoLTE7cD49MDtwLS0pZi5hdHRyaWJ1dGVzLnB1c2goYVtwXSksVXQuZGVidWcoIkFkZGVkIGF0dHJpYnV0ZSAiLGFbcF0uYXR0cmlidXRlTmFtZSl9LGdldEVudGl0aWVzOigpPT5tayxhZGRSZWxhdGlvbnNoaXA6ZnVuY3Rpb24oaSxhLGYscCl7bGV0IHc9e2VudGl0eUE6aSxyb2xlQTphLGVudGl0eUI6ZixyZWxTcGVjOnB9O2owdC5wdXNoKHcpLFV0LmRlYnVnKCJBZGRlZCBuZXcgcmVsYXRpb25zaGlwIDoiLHcpfSxnZXRSZWxhdGlvbnNoaXBzOigpPT5qMHQsY2xlYXI6ZnVuY3Rpb24oKXttaz17fSxqMHQ9W10saGcoKX0sc2V0QWNjVGl0bGU6RTAsZ2V0QWNjVGl0bGU6Zmcsc2V0QWNjRGVzY3JpcHRpb246ZGcsZ2V0QWNjRGVzY3JpcHRpb246Z2csc2V0RGlhZ3JhbVRpdGxlOk5iLGdldERpYWdyYW1UaXRsZTpwZ30sZm09e09OTFlfT05FX1NUQVJUOiJPTkxZX09ORV9TVEFSVCIsT05MWV9PTkVfRU5EOiJPTkxZX09ORV9FTkQiLFpFUk9fT1JfT05FX1NUQVJUOiJaRVJPX09SX09ORV9TVEFSVCIsWkVST19PUl9PTkVfRU5EOiJaRVJPX09SX09ORV9FTkQiLE9ORV9PUl9NT1JFX1NUQVJUOiJPTkVfT1JfTU9SRV9TVEFSVCIsT05FX09SX01PUkVfRU5EOiJPTkVfT1JfTU9SRV9FTkQiLFpFUk9fT1JfTU9SRV9TVEFSVDoiWkVST19PUl9NT1JFX1NUQVJUIixaRVJPX09SX01PUkVfRU5EOiJaRVJPX09SX01PUkVfRU5EIixNRF9QQVJFTlRfRU5EOiJNRF9QQVJFTlRfRU5EIixNRF9QQVJFTlRfU1RBUlQ6Ik1EX1BBUkVOVF9TVEFSVCJ9LGRtPXtFUk1hcmtlcnM6Zm0saW5zZXJ0TWFya2VyczpmdW5jdGlvbihpLGEpe2xldCBmO2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZm0uTURfUEFSRU5UX1NUQVJUKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGZtLk1EX1BBUkVOVF9FTkQpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmbS5PTkxZX09ORV9TVEFSVCkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDE4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTksMCBMOSwxOCBNMTUsMCBMMTUsMTgiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGZtLk9OTFlfT05FX0VORCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwxOCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0zLDAgTDMsMTggTTksMCBMOSwxOCIpLGY9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmbS5aRVJPX09SX09ORV9TVEFSVCkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDMwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIiksZi5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4IiwyMSkuYXR0cigiY3kiLDkpLmF0dHIoInIiLDYpLGYuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTksMCBMOSwxOCIpLGY9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmbS5aRVJPX09SX09ORV9FTkQpLmF0dHIoInJlZlgiLDMwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMzApLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKSxmLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDkpLmF0dHIoImN5Iiw5KS5hdHRyKCJyIiw2KSxmLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0yMSwwIEwyMSwxOCIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZm0uT05FX09SX01PUkVfU1RBUlQpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDQ1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTAsMTggUSAxOCwwIDM2LDE4IFEgMTgsMzYgMCwxOCBNNDIsOSBMNDIsMjciKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGZtLk9ORV9PUl9NT1JFX0VORCkuYXR0cigicmVmWCIsMjcpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNDUpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGEuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMyw5IEwzLDI3IE05LDE4IFEyNywwIDQ1LDE4IFEyNywzNiA5LDE4IiksZj1pLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGZtLlpFUk9fT1JfTU9SRV9TVEFSVCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKSxmLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDQ4KS5hdHRyKCJjeSIsMTgpLmF0dHIoInIiLDYpLGYuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTAsMTggUTE4LDAgMzYsMTggUTE4LDM2IDAsMTgiKSxmPWkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZm0uWkVST19PUl9NT1JFX0VORCkuYXR0cigicmVmWCIsMzkpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKSxmLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDkpLmF0dHIoImN5IiwxOCkuYXR0cigiciIsNiksZi5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGEuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMjEsMTggUTM5LDAgNTcsMTggUTM5LDM2IDIxLDE4Iil9fSxnemU9L14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO2Z1bmN0aW9uIHB6ZShpKXtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciJiZnemUudGVzdChpKX1jb25zdCBSZD1bXTtmb3IobGV0IGk9MDtpPDI1NjsrK2kpUmQucHVzaCgoaSsyNTYpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7ZnVuY3Rpb24gYnplKGksYT0wKXtyZXR1cm4oUmRbaVthKzBdXStSZFtpW2ErMV1dK1JkW2lbYSsyXV0rUmRbaVthKzNdXSsiLSIrUmRbaVthKzRdXStSZFtpW2ErNV1dKyItIitSZFtpW2ErNl1dK1JkW2lbYSs3XV0rIi0iK1JkW2lbYSs4XV0rUmRbaVthKzldXSsiLSIrUmRbaVthKzEwXV0rUmRbaVthKzExXV0rUmRbaVthKzEyXV0rUmRbaVthKzEzXV0rUmRbaVthKzE0XV0rUmRbaVthKzE1XV0pLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gd3plKGkpe2lmKCFwemUoaSkpdGhyb3cgVHlwZUVycm9yKCJJbnZhbGlkIFVVSUQiKTtsZXQgYTtjb25zdCBmPW5ldyBVaW50OEFycmF5KDE2KTtyZXR1cm4gZlswXT0oYT1wYXJzZUludChpLnNsaWNlKDAsOCksMTYpKT4+PjI0LGZbMV09YT4+PjE2JjI1NSxmWzJdPWE+Pj44JjI1NSxmWzNdPWEmMjU1LGZbNF09KGE9cGFyc2VJbnQoaS5zbGljZSg5LDEzKSwxNikpPj4+OCxmWzVdPWEmMjU1LGZbNl09KGE9cGFyc2VJbnQoaS5zbGljZSgxNCwxOCksMTYpKT4+PjgsZls3XT1hJjI1NSxmWzhdPShhPXBhcnNlSW50KGkuc2xpY2UoMTksMjMpLDE2KSk+Pj44LGZbOV09YSYyNTUsZlsxMF09KGE9cGFyc2VJbnQoaS5zbGljZSgyNCwzNiksMTYpKS8xMDk5NTExNjI3Nzc2JjI1NSxmWzExXT1hLzQyOTQ5NjcyOTYmMjU1LGZbMTJdPWE+Pj4yNCYyNTUsZlsxM109YT4+PjE2JjI1NSxmWzE0XT1hPj4+OCYyNTUsZlsxNV09YSYyNTUsZn1mdW5jdGlvbiB2emUoaSl7aT11bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoaSkpO2NvbnN0IGE9W107Zm9yKGxldCBmPTA7ZjxpLmxlbmd0aDsrK2YpYS5wdXNoKGkuY2hhckNvZGVBdChmKSk7cmV0dXJuIGF9Y29uc3QgbXplPSI2YmE3YjgxMC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgiLHl6ZT0iNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4IjtmdW5jdGlvbiB4emUoaSxhLGYpe2Z1bmN0aW9uIHAodyxtLGIsRSl7dmFyIF87aWYodHlwZW9mIHc9PSJzdHJpbmciJiYodz12emUodykpLHR5cGVvZiBtPT0ic3RyaW5nIiYmKG09d3plKG0pKSwoKF89bSk9PT1udWxsfHxfPT09dm9pZCAwP3ZvaWQgMDpfLmxlbmd0aCkhPT0xNil0aHJvdyBUeXBlRXJyb3IoIk5hbWVzcGFjZSBtdXN0IGJlIGFycmF5LWxpa2UgKDE2IGl0ZXJhYmxlIGludGVnZXIgdmFsdWVzLCAwLTI1NSkiKTtsZXQgQT1uZXcgVWludDhBcnJheSgxNit3Lmxlbmd0aCk7aWYoQS5zZXQobSksQS5zZXQodyxtLmxlbmd0aCksQT1mKEEpLEFbNl09QVs2XSYxNXxhLEFbOF09QVs4XSY2M3wxMjgsYil7RT1FfHwwO2ZvcihsZXQgST0wO0k8MTY7KytJKWJbRStJXT1BW0ldO3JldHVybiBifXJldHVybiBiemUoQSl9dHJ5e3AubmFtZT1pfWNhdGNoe31yZXR1cm4gcC5ETlM9bXplLHAuVVJMPXl6ZSxwfWZ1bmN0aW9uIGt6ZShpLGEsZixwKXtzd2l0Y2goaSl7Y2FzZSAwOnJldHVybiBhJmZefmEmcDtjYXNlIDE6cmV0dXJuIGFeZl5wO2Nhc2UgMjpyZXR1cm4gYSZmXmEmcF5mJnA7Y2FzZSAzOnJldHVybiBhXmZecH19ZnVuY3Rpb24gJDB0KGksYSl7cmV0dXJuIGk8PGF8aT4+PjMyLWF9ZnVuY3Rpb24gRXplKGkpe2NvbnN0IGE9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdLGY9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXTtpZih0eXBlb2YgaT09InN0cmluZyIpe2NvbnN0IGI9dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGkpKTtpPVtdO2ZvcihsZXQgRT0wO0U8Yi5sZW5ndGg7KytFKWkucHVzaChiLmNoYXJDb2RlQXQoRSkpfWVsc2UgQXJyYXkuaXNBcnJheShpKXx8KGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaSkpO2kucHVzaCgxMjgpO2NvbnN0IHA9aS5sZW5ndGgvNCsyLHc9TWF0aC5jZWlsKHAvMTYpLG09bmV3IEFycmF5KHcpO2ZvcihsZXQgYj0wO2I8dzsrK2Ipe2NvbnN0IEU9bmV3IFVpbnQzMkFycmF5KDE2KTtmb3IobGV0IF89MDtfPDE2OysrXylFW19dPWlbYio2NCtfKjRdPDwyNHxpW2IqNjQrXyo0KzFdPDwxNnxpW2IqNjQrXyo0KzJdPDw4fGlbYio2NCtfKjQrM107bVtiXT1FfW1bdy0xXVsxNF09KGkubGVuZ3RoLTEpKjgvTWF0aC5wb3coMiwzMiksbVt3LTFdWzE0XT1NYXRoLmZsb29yKG1bdy0xXVsxNF0pLG1bdy0xXVsxNV09KGkubGVuZ3RoLTEpKjgmNDI5NDk2NzI5NTtmb3IobGV0IGI9MDtiPHc7KytiKXtjb25zdCBFPW5ldyBVaW50MzJBcnJheSg4MCk7Zm9yKGxldCBSPTA7UjwxNjsrK1IpRVtSXT1tW2JdW1JdO2ZvcihsZXQgUj0xNjtSPDgwOysrUilFW1JdPSQwdChFW1ItM11eRVtSLThdXkVbUi0xNF1eRVtSLTE2XSwxKTtsZXQgXz1mWzBdLEE9ZlsxXSxJPWZbMl0sQj1mWzNdLE49Zls0XTtmb3IobGV0IFI9MDtSPDgwOysrUil7Y29uc3Qgej1NYXRoLmZsb29yKFIvMjApLFc9JDB0KF8sNSkra3plKHosQSxJLEIpK04rYVt6XStFW1JdPj4+MDtOPUIsQj1JLEk9JDB0KEEsMzApPj4+MCxBPV8sXz1XfWZbMF09ZlswXStfPj4+MCxmWzFdPWZbMV0rQT4+PjAsZlsyXT1mWzJdK0k+Pj4wLGZbM109ZlszXStCPj4+MCxmWzRdPWZbNF0rTj4+PjB9cmV0dXJuW2ZbMF0+PjI0JjI1NSxmWzBdPj4xNiYyNTUsZlswXT4+OCYyNTUsZlswXSYyNTUsZlsxXT4+MjQmMjU1LGZbMV0+PjE2JjI1NSxmWzFdPj44JjI1NSxmWzFdJjI1NSxmWzJdPj4yNCYyNTUsZlsyXT4+MTYmMjU1LGZbMl0+PjgmMjU1LGZbMl0mMjU1LGZbM10+PjI0JjI1NSxmWzNdPj4xNiYyNTUsZlszXT4+OCYyNTUsZlszXSYyNTUsZls0XT4+MjQmMjU1LGZbNF0+PjE2JjI1NSxmWzRdPj44JjI1NSxmWzRdJjI1NV19Y29uc3QgVHplPXh6ZSgidjUiLDgwLEV6ZSksQ3plPS9bXlxkQS1aYS16XShcVykqL2c7bGV0IHUxPXt9LFNGPW5ldyBNYXA7Y29uc3QgX3plPWZ1bmN0aW9uKGkpe2NvbnN0IGE9T2JqZWN0LmtleXMoaSk7Zm9yKGNvbnN0IGYgb2YgYSl1MVtmXT1pW2ZdfSxTemU9KGksYSxmKT0+e2NvbnN0IHA9dTEuZW50aXR5UGFkZGluZy8zLHc9dTEuZW50aXR5UGFkZGluZy8zLG09dTEuZm9udFNpemUqLjg1LGI9YS5ub2RlKCkuZ2V0QkJveCgpLEU9W107bGV0IF89ITEsQT0hMSxJPTAsQj0wLE49MCxSPTAsej1iLmhlaWdodCtwKjIsVz0xO2YuZm9yRWFjaChidD0+e2J0LmF0dHJpYnV0ZUtleVR5cGVMaXN0IT09dm9pZCAwJiZidC5hdHRyaWJ1dGVLZXlUeXBlTGlzdC5sZW5ndGg+MCYmKF89ITApLGJ0LmF0dHJpYnV0ZUNvbW1lbnQhPT12b2lkIDAmJihBPSEwKX0pLGYuZm9yRWFjaChidD0+e2NvbnN0IG10PWAke2Eubm9kZSgpLmlkfS1hdHRyLSR7V31gO2xldCB5dD0wO2NvbnN0IGZ0PVlQKGJ0LmF0dHJpYnV0ZVR5cGUpLHV0PWkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsYCR7bXR9LXR5cGVgKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJsZWZ0Iikuc3R5bGUoImZvbnQtZmFtaWx5IixPZSgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLG0rInB4IikudGV4dChmdCksdnQ9aS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJlciBlbnRpdHlMYWJlbCIsITApLmF0dHIoImlkIixgJHttdH0tbmFtZWApLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnN0eWxlKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImxlZnQiKS5zdHlsZSgiZm9udC1mYW1pbHkiLE9lKCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIsbSsicHgiKS50ZXh0KGJ0LmF0dHJpYnV0ZU5hbWUpLFg9e307WC50bj11dCxYLm5uPXZ0O2NvbnN0IHB0PXV0Lm5vZGUoKS5nZXRCQm94KCksVT12dC5ub2RlKCkuZ2V0QkJveCgpO2lmKEk9TWF0aC5tYXgoSSxwdC53aWR0aCksQj1NYXRoLm1heChCLFUud2lkdGgpLHl0PU1hdGgubWF4KHB0LmhlaWdodCxVLmhlaWdodCksXyl7Y29uc3QgVHQ9YnQuYXR0cmlidXRlS2V5VHlwZUxpc3QhPT12b2lkIDA/YnQuYXR0cmlidXRlS2V5VHlwZUxpc3Quam9pbigiLCIpOiIiLG50PWkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsYCR7bXR9LWtleWApLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnN0eWxlKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImxlZnQiKS5zdHlsZSgiZm9udC1mYW1pbHkiLE9lKCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIsbSsicHgiKS50ZXh0KFR0KTtYLmtuPW50O2NvbnN0IEl0PW50Lm5vZGUoKS5nZXRCQm94KCk7Tj1NYXRoLm1heChOLEl0LndpZHRoKSx5dD1NYXRoLm1heCh5dCxJdC5oZWlnaHQpfWlmKEEpe2NvbnN0IFR0PWkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsYCR7bXR9LWNvbW1lbnRgKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJsZWZ0Iikuc3R5bGUoImZvbnQtZmFtaWx5IixPZSgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLG0rInB4IikudGV4dChidC5hdHRyaWJ1dGVDb21tZW50fHwiIik7WC5jbj1UdDtjb25zdCBudD1UdC5ub2RlKCkuZ2V0QkJveCgpO1I9TWF0aC5tYXgoUixudC53aWR0aCkseXQ9TWF0aC5tYXgoeXQsbnQuaGVpZ2h0KX1YLmhlaWdodD15dCxFLnB1c2goWCkseis9eXQrcCoyLFcrPTF9KTtsZXQgZXQ9NDtfJiYoZXQrPTIpLEEmJihldCs9Mik7Y29uc3Qgc3Q9SStCK04rUixhdD17d2lkdGg6TWF0aC5tYXgodTEubWluRW50aXR5V2lkdGgsTWF0aC5tYXgoYi53aWR0aCt1MS5lbnRpdHlQYWRkaW5nKjIsc3QrdypldCkpLGhlaWdodDpmLmxlbmd0aD4wP3o6TWF0aC5tYXgodTEubWluRW50aXR5SGVpZ2h0LGIuaGVpZ2h0K3UxLmVudGl0eVBhZGRpbmcqMil9O2lmKGYubGVuZ3RoPjApe2NvbnN0IGJ0PU1hdGgubWF4KDAsKGF0LndpZHRoLXN0LXcqZXQpLyhldC8yKSk7YS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithdC53aWR0aC8yKyIsIisocCtiLmhlaWdodC8yKSsiKSIpO2xldCBtdD1iLmhlaWdodCtwKjIseXQ9ImF0dHJpYnV0ZUJveE9kZCI7RS5mb3JFYWNoKGZ0PT57Y29uc3QgdXQ9bXQrcCtmdC5oZWlnaHQvMjtmdC50bi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit3KyIsIit1dCsiKSIpO2NvbnN0IHZ0PWkuaW5zZXJ0KCJyZWN0IiwiIyIrZnQudG4ubm9kZSgpLmlkKS5jbGFzc2VkKGBlciAke3l0fWAsITApLmF0dHIoIngiLDApLmF0dHIoInkiLG10KS5hdHRyKCJ3aWR0aCIsSSt3KjIrYnQpLmF0dHIoImhlaWdodCIsZnQuaGVpZ2h0K3AqMiksWD1wYXJzZUZsb2F0KHZ0LmF0dHIoIngiKSkrcGFyc2VGbG9hdCh2dC5hdHRyKCJ3aWR0aCIpKTtmdC5ubi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoWCt3KSsiLCIrdXQrIikiKTtjb25zdCBwdD1pLmluc2VydCgicmVjdCIsIiMiK2Z0Lm5uLm5vZGUoKS5pZCkuY2xhc3NlZChgZXIgJHt5dH1gLCEwKS5hdHRyKCJ4IixYKS5hdHRyKCJ5IixtdCkuYXR0cigid2lkdGgiLEIrdyoyK2J0KS5hdHRyKCJoZWlnaHQiLGZ0LmhlaWdodCtwKjIpO2xldCBVPXBhcnNlRmxvYXQocHQuYXR0cigieCIpKStwYXJzZUZsb2F0KHB0LmF0dHIoIndpZHRoIikpO2lmKF8pe2Z0LmtuLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhVK3cpKyIsIit1dCsiKSIpO2NvbnN0IFR0PWkuaW5zZXJ0KCJyZWN0IiwiIyIrZnQua24ubm9kZSgpLmlkKS5jbGFzc2VkKGBlciAke3l0fWAsITApLmF0dHIoIngiLFUpLmF0dHIoInkiLG10KS5hdHRyKCJ3aWR0aCIsTit3KjIrYnQpLmF0dHIoImhlaWdodCIsZnQuaGVpZ2h0K3AqMik7VT1wYXJzZUZsb2F0KFR0LmF0dHIoIngiKSkrcGFyc2VGbG9hdChUdC5hdHRyKCJ3aWR0aCIpKX1BJiYoZnQuY24uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKFUrdykrIiwiK3V0KyIpIiksaS5pbnNlcnQoInJlY3QiLCIjIitmdC5jbi5ub2RlKCkuaWQpLmNsYXNzZWQoYGVyICR7eXR9YCwidHJ1ZSIpLmF0dHIoIngiLFUpLmF0dHIoInkiLG10KS5hdHRyKCJ3aWR0aCIsUit3KjIrYnQpLmF0dHIoImhlaWdodCIsZnQuaGVpZ2h0K3AqMikpLG10Kz1mdC5oZWlnaHQrcCoyLHl0PXl0PT09ImF0dHJpYnV0ZUJveE9kZCI/ImF0dHJpYnV0ZUJveEV2ZW4iOiJhdHRyaWJ1dGVCb3hPZGQifSl9ZWxzZSBhdC5oZWlnaHQ9TWF0aC5tYXgodTEubWluRW50aXR5SGVpZ2h0LHopLGEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYXQud2lkdGgvMisiLCIrYXQuaGVpZ2h0LzIrIikiKTtyZXR1cm4gYXR9LEF6ZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1PYmplY3Qua2V5cyhhKTtsZXQgdztyZXR1cm4gcC5mb3JFYWNoKGZ1bmN0aW9uKG0pe2NvbnN0IGI9UHplKG0sImVudGl0eSIpO1NGLnNldChtLGIpO2NvbnN0IEU9aS5hcHBlbmQoImciKS5hdHRyKCJpZCIsYik7dz13PT09dm9pZCAwP2I6dztjb25zdCBfPSJ0ZXh0LSIrYixBPUUuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsXykuYXR0cigieCIsMCkuYXR0cigieSIsMCkuc3R5bGUoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtZmFtaWx5IixPZSgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLHUxLmZvbnRTaXplKyJweCIpLnRleHQoYVttXS5hbGlhcz8/bSkse3dpZHRoOkksaGVpZ2h0OkJ9PVN6ZShFLEEsYVttXS5hdHRyaWJ1dGVzKSxSPUUuaW5zZXJ0KCJyZWN0IiwiIyIrXykuY2xhc3NlZCgiZXIgZW50aXR5Qm94IiwhMCkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLEkpLmF0dHIoImhlaWdodCIsQikubm9kZSgpLmdldEJCb3goKTtmLnNldE5vZGUoYix7d2lkdGg6Ui53aWR0aCxoZWlnaHQ6Ui5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOmJ9KX0pLHd9LEx6ZT1mdW5jdGlvbihpLGEpe2Eubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2YhPT12b2lkIDAmJmEubm9kZShmKSE9PXZvaWQgMCYmaS5zZWxlY3QoIiMiK2YpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhhLm5vZGUoZikueC1hLm5vZGUoZikud2lkdGgvMikrIiwiKyhhLm5vZGUoZikueS1hLm5vZGUoZikuaGVpZ2h0LzIpKyIgKSIpfSl9LFBCdD1mdW5jdGlvbihpKXtyZXR1cm4oaS5lbnRpdHlBK2kucm9sZUEraS5lbnRpdHlCKS5yZXBsYWNlKC9ccy9nLCIiKX0sTXplPWZ1bmN0aW9uKGksYSl7cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihmKXthLnNldEVkZ2UoU0YuZ2V0KGYuZW50aXR5QSksU0YuZ2V0KGYuZW50aXR5Qikse3JlbGF0aW9uc2hpcDpmfSxQQnQoZikpfSksaX07bGV0IEZCdD0wO2NvbnN0IER6ZT1mdW5jdGlvbihpLGEsZixwLHcpe0ZCdCsrO2NvbnN0IG09Zi5lZGdlKFNGLmdldChhLmVudGl0eUEpLFNGLmdldChhLmVudGl0eUIpLFBCdChhKSksYj1FNSgpLngoZnVuY3Rpb24oeil7cmV0dXJuIHoueH0pLnkoZnVuY3Rpb24oeil7cmV0dXJuIHoueX0pLmN1cnZlKEhQKSxFPWkuaW5zZXJ0KCJwYXRoIiwiIyIrcCkuY2xhc3NlZCgiZXIgcmVsYXRpb25zaGlwTGluZSIsITApLmF0dHIoImQiLGIobS5wb2ludHMpKS5zdHlsZSgic3Ryb2tlIix1MS5zdHJva2UpLnN0eWxlKCJmaWxsIiwibm9uZSIpO2EucmVsU3BlYy5yZWxUeXBlPT09dy5kYi5JZGVudGlmaWNhdGlvbi5OT05fSURFTlRJRllJTkcmJkUuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjgsOCIpO2xldCBfPSIiO3N3aXRjaCh1MS5hcnJvd01hcmtlckFic29sdXRlJiYoXz13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxfPV8ucmVwbGFjZSgvXCgvZywiXFwoIiksXz1fLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxhLnJlbFNwZWMuY2FyZEEpe2Nhc2Ugdy5kYi5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTpFLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitfKyIjIitkbS5FUk1hcmtlcnMuWkVST19PUl9PTkVfRU5EKyIpIik7YnJlYWs7Y2FzZSB3LmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTpFLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitfKyIjIitkbS5FUk1hcmtlcnMuWkVST19PUl9NT1JFX0VORCsiKSIpO2JyZWFrO2Nhc2Ugdy5kYi5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTpFLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitfKyIjIitkbS5FUk1hcmtlcnMuT05FX09SX01PUkVfRU5EKyIpIik7YnJlYWs7Y2FzZSB3LmRiLkNhcmRpbmFsaXR5Lk9OTFlfT05FOkUuYXR0cigibWFya2VyLWVuZCIsInVybCgiK18rIiMiK2RtLkVSTWFya2Vycy5PTkxZX09ORV9FTkQrIikiKTticmVhaztjYXNlIHcuZGIuQ2FyZGluYWxpdHkuTURfUEFSRU5UOkUuYXR0cigibWFya2VyLWVuZCIsInVybCgiK18rIiMiK2RtLkVSTWFya2Vycy5NRF9QQVJFTlRfRU5EKyIpIik7YnJlYWt9c3dpdGNoKGEucmVsU3BlYy5jYXJkQil7Y2FzZSB3LmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfT05FOkUuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrXysiIyIrZG0uRVJNYXJrZXJzLlpFUk9fT1JfT05FX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSB3LmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTpFLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK18rIiMiK2RtLkVSTWFya2Vycy5aRVJPX09SX01PUkVfU1RBUlQrIikiKTticmVhaztjYXNlIHcuZGIuQ2FyZGluYWxpdHkuT05FX09SX01PUkU6RS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitfKyIjIitkbS5FUk1hcmtlcnMuT05FX09SX01PUkVfU1RBUlQrIikiKTticmVhaztjYXNlIHcuZGIuQ2FyZGluYWxpdHkuT05MWV9PTkU6RS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitfKyIjIitkbS5FUk1hcmtlcnMuT05MWV9PTkVfU1RBUlQrIikiKTticmVhaztjYXNlIHcuZGIuQ2FyZGluYWxpdHkuTURfUEFSRU5UOkUuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrXysiIyIrZG0uRVJNYXJrZXJzLk1EX1BBUkVOVF9TVEFSVCsiKSIpO2JyZWFrfWNvbnN0IEE9RS5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSxJPUUubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoQSouNSksQj0icmVsIitGQnQsUj1pLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImVyIHJlbGF0aW9uc2hpcExhYmVsIiwhMCkuYXR0cigiaWQiLEIpLmF0dHIoIngiLEkueCkuYXR0cigieSIsSS55KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1mYW1pbHkiLE9lKCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIsdTEuZm9udFNpemUrInB4IikudGV4dChhLnJvbGVBKS5ub2RlKCkuZ2V0QkJveCgpO2kuaW5zZXJ0KCJyZWN0IiwiIyIrQikuY2xhc3NlZCgiZXIgcmVsYXRpb25zaGlwTGFiZWxCb3giLCEwKS5hdHRyKCJ4IixJLngtUi53aWR0aC8yKS5hdHRyKCJ5IixJLnktUi5oZWlnaHQvMikuYXR0cigid2lkdGgiLFIud2lkdGgpLmF0dHIoImhlaWdodCIsUi5oZWlnaHQpfSxJemU9ZnVuY3Rpb24oaSxhLGYscCl7dTE9T2UoKS5lcixVdC5pbmZvKCJEcmF3aW5nIEVSIGRpYWdyYW0iKTtjb25zdCB3PU9lKCkuc2VjdXJpdHlMZXZlbDtsZXQgbTt3PT09InNhbmRib3giJiYobT15cigiI2kiK2EpKTtjb25zdCBFPXlyKHc9PT0ic2FuZGJveCI/bS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5Iikuc2VsZWN0KGBbaWQ9JyR7YX0nXWApO2RtLmluc2VydE1hcmtlcnMoRSx1MSk7bGV0IF87Xz1uZXcgYzEoe211bHRpZ3JhcGg6ITAsZGlyZWN0ZWQ6ITAsY29tcG91bmQ6ITF9KS5zZXRHcmFwaCh7cmFua2Rpcjp1MS5sYXlvdXREaXJlY3Rpb24sbWFyZ2lueDoyMCxtYXJnaW55OjIwLG5vZGVzZXA6MTAwLGVkZ2VzZXA6MTAwLHJhbmtzZXA6MTAwfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7Y29uc3QgQT1BemUoRSxwLmRiLmdldEVudGl0aWVzKCksXyksST1NemUocC5kYi5nZXRSZWxhdGlvbnNoaXBzKCksXyk7YUwoXyksTHplKEUsXyksSS5mb3JFYWNoKGZ1bmN0aW9uKFcpe0R6ZShFLFcsXyxBLHApfSk7Y29uc3QgQj11MS5kaWFncmFtUGFkZGluZzskYS5pbnNlcnRUaXRsZShFLCJlbnRpdHlUaXRsZVRleHQiLHUxLnRpdGxlVG9wTWFyZ2luLHAuZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpO2NvbnN0IE49RS5ub2RlKCkuZ2V0QkJveCgpLFI9Ti53aWR0aCtCKjIsej1OLmhlaWdodCtCKjI7azAoRSx6LFIsdTEudXNlTWF4V2lkdGgpLEUuYXR0cigidmlld0JveCIsYCR7Ti54LUJ9ICR7Ti55LUJ9ICR7Un0gJHt6fWApfSxPemU9IjI4ZTlmOWRiLTNjOGQtNWFhNS05ZmFmLTQ0Mjg2YWU1OTM3YyI7ZnVuY3Rpb24gUHplKGk9IiIsYT0iIil7Y29uc3QgZj1pLnJlcGxhY2UoQ3plLCIiKTtyZXR1cm5gJHtOQnQoYSl9JHtOQnQoZil9JHtUemUoaSxPemUpfWB9ZnVuY3Rpb24gTkJ0KGk9IiIpe3JldHVybiBpLmxlbmd0aD4wP2Ake2l9LWA6IiJ9Y29uc3QgRnplPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6bHplLGRiOmR6ZSxyZW5kZXJlcjp7c2V0Q29uZjpfemUsZHJhdzpJemV9LHN0eWxlczppPT5gCiAgLmVudGl0eUJveCB7CiAgICBmaWxsOiAke2kubWFpbkJrZ307CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICB9CgogIC5hdHRyaWJ1dGVCb3hPZGQgewogICAgZmlsbDogJHtpLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZH07CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICB9CgogIC5hdHRyaWJ1dGVCb3hFdmVuIHsKICAgIGZpbGw6ICAke2kuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbn07CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICB9CgogIC5yZWxhdGlvbnNoaXBMYWJlbEJveCB7CiAgICBmaWxsOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBvcGFjaXR5OiAwLjc7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2kudGVydGlhcnlDb2xvcn07CiAgICAgIHJlY3QgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQogIH0KCiAgICAucmVsYXRpb25zaGlwTGluZSB7CiAgICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgICB9CgogIC5lbnRpdHlUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0gICAgCiAgI01EX1BBUkVOVF9TVEFSVCB7CiAgICBmaWxsOiAjZjVmNWY1ICFpbXBvcnRhbnQ7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgfQogICNNRF9QQVJFTlRfRU5EIHsKICAgIGZpbGw6ICNmNWY1ZjUgIWltcG9ydGFudDsKICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICAgIHN0cm9rZS13aWR0aDogMTsKICB9CiAgCmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciB6MHQ9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbih5dCxmdCx1dCx2dCl7Zm9yKHV0PXV0fHx7fSx2dD15dC5sZW5ndGg7dnQtLTt1dFt5dFt2dF1dPWZ0KTtyZXR1cm4gdXR9LGE9WzEsM10sZj1bMSw2XSxwPVsxLDRdLHc9WzEsNV0sbT1bMiw1XSxiPVsxLDEyXSxFPVs1LDcsMTMsMTksMjEsMjMsMjQsMjYsMjgsMzEsMzYsMzksNDZdLF89WzcsMTMsMTksMjEsMjMsMjQsMjYsMjgsMzEsMzYsMzldLEE9WzcsMTIsMTMsMTksMjEsMjMsMjQsMjYsMjgsMzEsMzYsMzldLEk9WzcsMTMsNDZdLEI9WzEsNDJdLE49WzEsNDFdLFI9WzcsMTMsMjksMzIsMzQsMzcsNDZdLHo9WzEsNTVdLFc9WzEsNTZdLGV0PVsxLDU3XSxzdD1bNywxMywzMiwzNCw0MSw0Nl0sYXQ9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGVvbDo0LEdHOjUsZG9jdW1lbnQ6NixFT0Y6NywiOiI6OCxESVI6OSxvcHRpb25zOjEwLGJvZHk6MTEsT1BUOjEyLE5MOjEzLGxpbmU6MTQsc3RhdGVtZW50OjE1LGNvbW1pdFN0YXRlbWVudDoxNixtZXJnZVN0YXRlbWVudDoxNyxjaGVycnlQaWNrU3RhdGVtZW50OjE4LGFjY190aXRsZToxOSxhY2NfdGl0bGVfdmFsdWU6MjAsYWNjX2Rlc2NyOjIxLGFjY19kZXNjcl92YWx1ZToyMixhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjIzLHNlY3Rpb246MjQsYnJhbmNoU3RhdGVtZW50OjI1LENIRUNLT1VUOjI2LHJlZjoyNyxCUkFOQ0g6MjgsT1JERVI6MjksTlVNOjMwLENIRVJSWV9QSUNLOjMxLENPTU1JVF9JRDozMixTVFI6MzMsQ09NTUlUX1RBRzozNCxFTVBUWVNUUjozNSxNRVJHRTozNixDT01NSVRfVFlQRTozNyxjb21taXRUeXBlOjM4LENPTU1JVDozOSxjb21taXRfYXJnOjQwLENPTU1JVF9NU0c6NDEsTk9STUFMOjQyLFJFVkVSU0U6NDMsSElHSExJR0hUOjQ0LElEOjQ1LCI7Ijo0NiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNToiR0ciLDc6IkVPRiIsODoiOiIsOToiRElSIiwxMjoiT1BUIiwxMzoiTkwiLDE5OiJhY2NfdGl0bGUiLDIwOiJhY2NfdGl0bGVfdmFsdWUiLDIxOiJhY2NfZGVzY3IiLDIyOiJhY2NfZGVzY3JfdmFsdWUiLDIzOiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwyNDoic2VjdGlvbiIsMjY6IkNIRUNLT1VUIiwyODoiQlJBTkNIIiwyOToiT1JERVIiLDMwOiJOVU0iLDMxOiJDSEVSUllfUElDSyIsMzI6IkNPTU1JVF9JRCIsMzM6IlNUUiIsMzQ6IkNPTU1JVF9UQUciLDM1OiJFTVBUWVNUUiIsMzY6Ik1FUkdFIiwzNzoiQ09NTUlUX1RZUEUiLDM5OiJDT01NSVQiLDQxOiJDT01NSVRfTVNHIiw0MjoiTk9STUFMIiw0MzoiUkVWRVJTRSIsNDQ6IkhJR0hMSUdIVCIsNDU6IklEIiw0NjoiOyJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywzXSxbMyw0XSxbMyw1XSxbNiwwXSxbNiwyXSxbMTAsMl0sWzEwLDFdLFsxMSwwXSxbMTEsMl0sWzE0LDJdLFsxNCwxXSxbMTUsMV0sWzE1LDFdLFsxNSwxXSxbMTUsMl0sWzE1LDJdLFsxNSwxXSxbMTUsMV0sWzE1LDFdLFsxNSwyXSxbMjUsMl0sWzI1LDRdLFsxOCwzXSxbMTgsNV0sWzE4LDVdLFsxOCw1XSxbMTgsNV0sWzE3LDJdLFsxNyw0XSxbMTcsNF0sWzE3LDRdLFsxNyw2XSxbMTcsNl0sWzE3LDZdLFsxNyw2XSxbMTcsNl0sWzE3LDZdLFsxNyw4XSxbMTcsOF0sWzE3LDhdLFsxNyw4XSxbMTcsOF0sWzE3LDhdLFsxNiwyXSxbMTYsM10sWzE2LDNdLFsxNiw1XSxbMTYsNV0sWzE2LDNdLFsxNiw1XSxbMTYsNV0sWzE2LDVdLFsxNiw1XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsM10sWzE2LDVdLFsxNiw1XSxbMTYsNV0sWzE2LDVdLFsxNiw1XSxbMTYsNV0sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzQwLDBdLFs0MCwxXSxbMzgsMV0sWzM4LDFdLFszOCwxXSxbMjcsMV0sWzI3LDFdLFs0LDFdLFs0LDFdLFs0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGZ0LHV0LHZ0LFgscHQsVSxUdCl7dmFyIG50PVUubGVuZ3RoLTE7c3dpdGNoKHB0KXtjYXNlIDI6cmV0dXJuIFVbbnRdO2Nhc2UgMzpyZXR1cm4gVVtudC0xXTtjYXNlIDQ6cmV0dXJuIFguc2V0RGlyZWN0aW9uKFVbbnQtM10pLFVbbnQtMV07Y2FzZSA2Olguc2V0T3B0aW9ucyhVW250LTFdKSx0aGlzLiQ9VVtudF07YnJlYWs7Y2FzZSA3OlVbbnQtMV0rPVVbbnRdLHRoaXMuJD1VW250LTFdO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxMDpVW250LTFdLnB1c2goVVtudF0pLHRoaXMuJD1VW250LTFdO2JyZWFrO2Nhc2UgMTE6dGhpcy4kPVVbbnQtMV07YnJlYWs7Y2FzZSAxNjp0aGlzLiQ9VVtudF0udHJpbSgpLFguc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDE3OmNhc2UgMTg6dGhpcy4kPVVbbnRdLnRyaW0oKSxYLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxOTpYLmFkZFNlY3Rpb24oVVtudF0uc3Vic3RyKDgpKSx0aGlzLiQ9VVtudF0uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMjE6WC5jaGVja291dChVW250XSk7YnJlYWs7Y2FzZSAyMjpYLmJyYW5jaChVW250XSk7YnJlYWs7Y2FzZSAyMzpYLmJyYW5jaChVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDI0OlguY2hlcnJ5UGljayhVW250XSwiIix2b2lkIDApO2JyZWFrO2Nhc2UgMjU6WC5jaGVycnlQaWNrKFVbbnQtMl0sIiIsVVtudF0pO2JyZWFrO2Nhc2UgMjY6Y2FzZSAyODpYLmNoZXJyeVBpY2soVVtudC0yXSwiIiwiIik7YnJlYWs7Y2FzZSAyNzpYLmNoZXJyeVBpY2soVVtudF0sIiIsVVtudC0yXSk7YnJlYWs7Y2FzZSAyOTpYLm1lcmdlKFVbbnRdLCIiLCIiLCIiKTticmVhaztjYXNlIDMwOlgubWVyZ2UoVVtudC0yXSxVW250XSwiIiwiIik7YnJlYWs7Y2FzZSAzMTpYLm1lcmdlKFVbbnQtMl0sIiIsVVtudF0sIiIpO2JyZWFrO2Nhc2UgMzI6WC5tZXJnZShVW250LTJdLCIiLCIiLFVbbnRdKTticmVhaztjYXNlIDMzOlgubWVyZ2UoVVtudC00XSxVW250XSwiIixVW250LTJdKTticmVhaztjYXNlIDM0OlgubWVyZ2UoVVtudC00XSwiIixVW250XSxVW250LTJdKTticmVhaztjYXNlIDM1OlgubWVyZ2UoVVtudC00XSwiIixVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDM2OlgubWVyZ2UoVVtudC00XSxVW250LTJdLFVbbnRdLCIiKTticmVhaztjYXNlIDM3OlgubWVyZ2UoVVtudC00XSxVW250LTJdLCIiLFVbbnRdKTticmVhaztjYXNlIDM4OlgubWVyZ2UoVVtudC00XSxVW250XSxVW250LTJdLCIiKTticmVhaztjYXNlIDM5OlgubWVyZ2UoVVtudC02XSxVW250LTRdLFVbbnQtMl0sVVtudF0pO2JyZWFrO2Nhc2UgNDA6WC5tZXJnZShVW250LTZdLFVbbnRdLFVbbnQtNF0sVVtudC0yXSk7YnJlYWs7Y2FzZSA0MTpYLm1lcmdlKFVbbnQtNl0sVVtudC00XSxVW250XSxVW250LTJdKTticmVhaztjYXNlIDQyOlgubWVyZ2UoVVtudC02XSxVW250LTJdLFVbbnQtNF0sVVtudF0pO2JyZWFrO2Nhc2UgNDM6WC5tZXJnZShVW250LTZdLFVbbnRdLFVbbnQtMl0sVVtudC00XSk7YnJlYWs7Y2FzZSA0NDpYLm1lcmdlKFVbbnQtNl0sVVtudC0yXSxVW250XSxVW250LTRdKTticmVhaztjYXNlIDQ1OlguY29tbWl0KFVbbnRdKTticmVhaztjYXNlIDQ2OlguY29tbWl0KCIiLCIiLFguY29tbWl0VHlwZS5OT1JNQUwsVVtudF0pO2JyZWFrO2Nhc2UgNDc6WC5jb21taXQoIiIsIiIsVVtudF0sIiIpO2JyZWFrO2Nhc2UgNDg6WC5jb21taXQoIiIsIiIsVVtudF0sVVtudC0yXSk7YnJlYWs7Y2FzZSA0OTpYLmNvbW1pdCgiIiwiIixVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDUwOlguY29tbWl0KCIiLFVbbnRdLFguY29tbWl0VHlwZS5OT1JNQUwsIiIpO2JyZWFrO2Nhc2UgNTE6WC5jb21taXQoIiIsVVtudC0yXSxYLmNvbW1pdFR5cGUuTk9STUFMLFVbbnRdKTticmVhaztjYXNlIDUyOlguY29tbWl0KCIiLFVbbnRdLFguY29tbWl0VHlwZS5OT1JNQUwsVVtudC0yXSk7YnJlYWs7Y2FzZSA1MzpYLmNvbW1pdCgiIixVW250LTJdLFVbbnRdLCIiKTticmVhaztjYXNlIDU0OlguY29tbWl0KCIiLFVbbnRdLFVbbnQtMl0sIiIpO2JyZWFrO2Nhc2UgNTU6WC5jb21taXQoIiIsVVtudC00XSxVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDU2OlguY29tbWl0KCIiLFVbbnQtNF0sVVtudF0sVVtudC0yXSk7YnJlYWs7Y2FzZSA1NzpYLmNvbW1pdCgiIixVW250LTJdLFVbbnQtNF0sVVtudF0pO2JyZWFrO2Nhc2UgNTg6WC5jb21taXQoIiIsVVtudF0sVVtudC00XSxVW250LTJdKTticmVhaztjYXNlIDU5OlguY29tbWl0KCIiLFVbbnRdLFVbbnQtMl0sVVtudC00XSk7YnJlYWs7Y2FzZSA2MDpYLmNvbW1pdCgiIixVW250LTJdLFVbbnRdLFVbbnQtNF0pO2JyZWFrO2Nhc2UgNjE6WC5jb21taXQoVVtudF0sIiIsWC5jb21taXRUeXBlLk5PUk1BTCwiIik7YnJlYWs7Y2FzZSA2MjpYLmNvbW1pdChVW250XSwiIixYLmNvbW1pdFR5cGUuTk9STUFMLFVbbnQtMl0pO2JyZWFrO2Nhc2UgNjM6WC5jb21taXQoVVtudC0yXSwiIixYLmNvbW1pdFR5cGUuTk9STUFMLFVbbnRdKTticmVhaztjYXNlIDY0OlguY29tbWl0KFVbbnQtMl0sIiIsVVtudF0sIiIpO2JyZWFrO2Nhc2UgNjU6WC5jb21taXQoVVtudF0sIiIsVVtudC0yXSwiIik7YnJlYWs7Y2FzZSA2NjpYLmNvbW1pdChVW250XSxVW250LTJdLFguY29tbWl0VHlwZS5OT1JNQUwsIiIpO2JyZWFrO2Nhc2UgNjc6WC5jb21taXQoVVtudC0yXSxVW250XSxYLmNvbW1pdFR5cGUuTk9STUFMLCIiKTticmVhaztjYXNlIDY4OlguY29tbWl0KFVbbnQtNF0sIiIsVVtudC0yXSxVW250XSk7YnJlYWs7Y2FzZSA2OTpYLmNvbW1pdChVW250LTRdLCIiLFVbbnRdLFVbbnQtMl0pO2JyZWFrO2Nhc2UgNzA6WC5jb21taXQoVVtudC0yXSwiIixVW250LTRdLFVbbnRdKTticmVhaztjYXNlIDcxOlguY29tbWl0KFVbbnRdLCIiLFVbbnQtNF0sVVtudC0yXSk7YnJlYWs7Y2FzZSA3MjpYLmNvbW1pdChVW250XSwiIixVW250LTJdLFVbbnQtNF0pO2JyZWFrO2Nhc2UgNzM6WC5jb21taXQoVVtudC0yXSwiIixVW250XSxVW250LTRdKTticmVhaztjYXNlIDc0OlguY29tbWl0KFVbbnQtNF0sVVtudF0sVVtudC0yXSwiIik7YnJlYWs7Y2FzZSA3NTpYLmNvbW1pdChVW250LTRdLFVbbnQtMl0sVVtudF0sIiIpO2JyZWFrO2Nhc2UgNzY6WC5jb21taXQoVVtudC0yXSxVW250XSxVW250LTRdLCIiKTticmVhaztjYXNlIDc3OlguY29tbWl0KFVbbnRdLFVbbnQtMl0sVVtudC00XSwiIik7YnJlYWs7Y2FzZSA3ODpYLmNvbW1pdChVW250XSxVW250LTRdLFVbbnQtMl0sIiIpO2JyZWFrO2Nhc2UgNzk6WC5jb21taXQoVVtudC0yXSxVW250LTRdLFVbbnRdLCIiKTticmVhaztjYXNlIDgwOlguY29tbWl0KFVbbnQtNF0sVVtudF0sWC5jb21taXRUeXBlLk5PUk1BTCxVW250LTJdKTticmVhaztjYXNlIDgxOlguY29tbWl0KFVbbnQtNF0sVVtudC0yXSxYLmNvbW1pdFR5cGUuTk9STUFMLFVbbnRdKTticmVhaztjYXNlIDgyOlguY29tbWl0KFVbbnQtMl0sVVtudF0sWC5jb21taXRUeXBlLk5PUk1BTCxVW250LTRdKTticmVhaztjYXNlIDgzOlguY29tbWl0KFVbbnRdLFVbbnQtMl0sWC5jb21taXRUeXBlLk5PUk1BTCxVW250LTRdKTticmVhaztjYXNlIDg0OlguY29tbWl0KFVbbnRdLFVbbnQtNF0sWC5jb21taXRUeXBlLk5PUk1BTCxVW250LTJdKTticmVhaztjYXNlIDg1OlguY29tbWl0KFVbbnQtMl0sVVtudC00XSxYLmNvbW1pdFR5cGUuTk9STUFMLFVbbnRdKTticmVhaztjYXNlIDg2OlguY29tbWl0KFVbbnQtNl0sVVtudC00XSxVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDg3OlguY29tbWl0KFVbbnQtNl0sVVtudC00XSxVW250XSxVW250LTJdKTticmVhaztjYXNlIDg4OlguY29tbWl0KFVbbnQtNl0sVVtudC0yXSxVW250LTRdLFVbbnRdKTticmVhaztjYXNlIDg5OlguY29tbWl0KFVbbnQtNl0sVVtudF0sVVtudC00XSxVW250LTJdKTticmVhaztjYXNlIDkwOlguY29tbWl0KFVbbnQtNl0sVVtudC0yXSxVW250XSxVW250LTRdKTticmVhaztjYXNlIDkxOlguY29tbWl0KFVbbnQtNl0sVVtudF0sVVtudC0yXSxVW250LTRdKTticmVhaztjYXNlIDkyOlguY29tbWl0KFVbbnQtNF0sVVtudC02XSxVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDkzOlguY29tbWl0KFVbbnQtNF0sVVtudC02XSxVW250XSxVW250LTJdKTticmVhaztjYXNlIDk0OlguY29tbWl0KFVbbnQtMl0sVVtudC02XSxVW250LTRdLFVbbnRdKTticmVhaztjYXNlIDk1OlguY29tbWl0KFVbbnRdLFVbbnQtNl0sVVtudC00XSxVW250LTJdKTticmVhaztjYXNlIDk2OlguY29tbWl0KFVbbnQtMl0sVVtudC02XSxVW250XSxVW250LTRdKTticmVhaztjYXNlIDk3OlguY29tbWl0KFVbbnRdLFVbbnQtNl0sVVtudC0yXSxVW250LTRdKTticmVhaztjYXNlIDk4OlguY29tbWl0KFVbbnRdLFVbbnQtNF0sVVtudC0yXSxVW250LTZdKTticmVhaztjYXNlIDk5OlguY29tbWl0KFVbbnQtMl0sVVtudC00XSxVW250XSxVW250LTZdKTticmVhaztjYXNlIDEwMDpYLmNvbW1pdChVW250XSxVW250LTJdLFVbbnQtNF0sVVtudC02XSk7YnJlYWs7Y2FzZSAxMDE6WC5jb21taXQoVVtudC0yXSxVW250XSxVW250LTRdLFVbbnQtNl0pO2JyZWFrO2Nhc2UgMTAyOlguY29tbWl0KFVbbnQtNF0sVVtudC0yXSxVW250XSxVW250LTZdKTticmVhaztjYXNlIDEwMzpYLmNvbW1pdChVW250LTRdLFVbbnRdLFVbbnQtMl0sVVtudC02XSk7YnJlYWs7Y2FzZSAxMDQ6WC5jb21taXQoVVtudC0yXSxVW250LTRdLFVbbnQtNl0sVVtudF0pO2JyZWFrO2Nhc2UgMTA1OlguY29tbWl0KFVbbnRdLFVbbnQtNF0sVVtudC02XSxVW250LTJdKTticmVhaztjYXNlIDEwNjpYLmNvbW1pdChVW250LTJdLFVbbnRdLFVbbnQtNl0sVVtudC00XSk7YnJlYWs7Y2FzZSAxMDc6WC5jb21taXQoVVtudF0sVVtudC0yXSxVW250LTZdLFVbbnQtNF0pO2JyZWFrO2Nhc2UgMTA4OlguY29tbWl0KFVbbnQtNF0sVVtudC0yXSxVW250LTZdLFVbbnRdKTticmVhaztjYXNlIDEwOTpYLmNvbW1pdChVW250LTRdLFVbbnRdLFVbbnQtNl0sVVtudC0yXSk7YnJlYWs7Y2FzZSAxMTA6dGhpcy4kPSIiO2JyZWFrO2Nhc2UgMTExOnRoaXMuJD1VW250XTticmVhaztjYXNlIDExMjp0aGlzLiQ9WC5jb21taXRUeXBlLk5PUk1BTDticmVhaztjYXNlIDExMzp0aGlzLiQ9WC5jb21taXRUeXBlLlJFVkVSU0U7YnJlYWs7Y2FzZSAxMTQ6dGhpcy4kPVguY29tbWl0VHlwZS5ISUdITElHSFQ7YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTphLDc6ZiwxMzpwLDQ2Ond9LHsxOlszXX0sezM6Nyw0OjIsNTphLDc6ZiwxMzpwLDQ2Ond9LHs2OjgsNzptLDg6WzEsOV0sOTpbMSwxMF0sMTA6MTEsMTM6Yn0saShFLFsyLDExN10pLGkoRSxbMiwxMThdKSxpKEUsWzIsMTE5XSksezE6WzIsMV19LHs3OlsxLDEzXX0sezY6MTQsNzptLDEwOjExLDEzOmJ9LHs4OlsxLDE1XX0saShfLFsyLDldLHsxMToxNiwxMjpbMSwxN119KSxpKEEsWzIsOF0pLHsxOlsyLDJdfSx7NzpbMSwxOF19LHs2OjE5LDc6bSwxMDoxMSwxMzpifSx7NzpbMiw2XSwxMzpbMSwyMl0sMTQ6MjAsMTU6MjEsMTY6MjMsMTc6MjQsMTg6MjUsMTk6WzEsMjZdLDIxOlsxLDI3XSwyMzpbMSwyOF0sMjQ6WzEsMjldLDI1OjMwLDI2OlsxLDMxXSwyODpbMSwzNV0sMzE6WzEsMzRdLDM2OlsxLDMzXSwzOTpbMSwzMl19LGkoQSxbMiw3XSksezE6WzIsM119LHs3OlsxLDM2XX0saShfLFsyLDEwXSksezQ6MzcsNzpmLDEzOnAsNDY6d30saShfLFsyLDEyXSksaShJLFsyLDEzXSksaShJLFsyLDE0XSksaShJLFsyLDE1XSksezIwOlsxLDM4XX0sezIyOlsxLDM5XX0saShJLFsyLDE4XSksaShJLFsyLDE5XSksaShJLFsyLDIwXSksezI3OjQwLDMzOkIsNDU6Tn0saShJLFsyLDExMF0sezQwOjQzLDMyOlsxLDQ2XSwzMzpbMSw0OF0sMzQ6WzEsNDRdLDM3OlsxLDQ1XSw0MTpbMSw0N119KSx7Mjc6NDksMzM6Qiw0NTpOfSx7MzI6WzEsNTBdLDM0OlsxLDUxXX0sezI3OjUyLDMzOkIsNDU6Tn0sezE6WzIsNF19LGkoXyxbMiwxMV0pLGkoSSxbMiwxNl0pLGkoSSxbMiwxN10pLGkoSSxbMiwyMV0pLGkoUixbMiwxMTVdKSxpKFIsWzIsMTE2XSksaShJLFsyLDQ1XSksezMzOlsxLDUzXX0sezM4OjU0LDQyOnosNDM6Vyw0NDpldH0sezMzOlsxLDU4XX0sezMzOlsxLDU5XX0saShJLFsyLDExMV0pLGkoSSxbMiwyOV0sezMyOlsxLDYwXSwzNDpbMSw2Ml0sMzc6WzEsNjFdfSksezMzOlsxLDYzXX0sezMzOlsxLDY0XSwzNTpbMSw2NV19LGkoSSxbMiwyMl0sezI5OlsxLDY2XX0pLGkoSSxbMiw0Nl0sezMyOlsxLDY4XSwzNzpbMSw2N10sNDE6WzEsNjldfSksaShJLFsyLDQ3XSx7MzI6WzEsNzFdLDM0OlsxLDcwXSw0MTpbMSw3Ml19KSxpKHN0LFsyLDExMl0pLGkoc3QsWzIsMTEzXSksaShzdCxbMiwxMTRdKSxpKEksWzIsNTBdLHszNDpbMSw3M10sMzc6WzEsNzRdLDQxOlsxLDc1XX0pLGkoSSxbMiw2MV0sezMyOlsxLDc4XSwzNDpbMSw3Nl0sMzc6WzEsNzddfSksezMzOlsxLDc5XX0sezM4OjgwLDQyOnosNDM6Vyw0NDpldH0sezMzOlsxLDgxXX0saShJLFsyLDI0XSx7MzQ6WzEsODJdfSksezMyOlsxLDgzXX0sezMyOlsxLDg0XX0sezMwOlsxLDg1XX0sezM4Ojg2LDQyOnosNDM6Vyw0NDpldH0sezMzOlsxLDg3XX0sezMzOlsxLDg4XX0sezMzOlsxLDg5XX0sezMzOlsxLDkwXX0sezMzOlsxLDkxXX0sezMzOlsxLDkyXX0sezM4OjkzLDQyOnosNDM6Vyw0NDpldH0sezMzOlsxLDk0XX0sezMzOlsxLDk1XX0sezM4Ojk2LDQyOnosNDM6Vyw0NDpldH0sezMzOlsxLDk3XX0saShJLFsyLDMwXSx7MzQ6WzEsOTldLDM3OlsxLDk4XX0pLGkoSSxbMiwzMV0sezMyOlsxLDEwMV0sMzQ6WzEsMTAwXX0pLGkoSSxbMiwzMl0sezMyOlsxLDEwMl0sMzc6WzEsMTAzXX0pLHszMzpbMSwxMDRdLDM1OlsxLDEwNV19LHszMzpbMSwxMDZdfSx7MzM6WzEsMTA3XX0saShJLFsyLDIzXSksaShJLFsyLDQ4XSx7MzI6WzEsMTA4XSw0MTpbMSwxMDldfSksaShJLFsyLDUyXSx7Mzc6WzEsMTEwXSw0MTpbMSwxMTFdfSksaShJLFsyLDYyXSx7MzI6WzEsMTEzXSwzNzpbMSwxMTJdfSksaShJLFsyLDQ5XSx7MzI6WzEsMTE0XSw0MTpbMSwxMTVdfSksaShJLFsyLDU0XSx7MzQ6WzEsMTE2XSw0MTpbMSwxMTddfSksaShJLFsyLDY1XSx7MzI6WzEsMTE5XSwzNDpbMSwxMThdfSksaShJLFsyLDUxXSx7Mzc6WzEsMTIwXSw0MTpbMSwxMjFdfSksaShJLFsyLDUzXSx7MzQ6WzEsMTIyXSw0MTpbMSwxMjNdfSksaShJLFsyLDY2XSx7MzQ6WzEsMTI1XSwzNzpbMSwxMjRdfSksaShJLFsyLDYzXSx7MzI6WzEsMTI3XSwzNzpbMSwxMjZdfSksaShJLFsyLDY0XSx7MzI6WzEsMTI5XSwzNDpbMSwxMjhdfSksaShJLFsyLDY3XSx7MzQ6WzEsMTMxXSwzNzpbMSwxMzBdfSksezM4OjEzMiw0Mjp6LDQzOlcsNDQ6ZXR9LHszMzpbMSwxMzNdfSx7MzM6WzEsMTM0XX0sezMzOlsxLDEzNV19LHszMzpbMSwxMzZdfSx7Mzg6MTM3LDQyOnosNDM6Vyw0NDpldH0saShJLFsyLDI1XSksaShJLFsyLDI2XSksaShJLFsyLDI3XSksaShJLFsyLDI4XSksezMzOlsxLDEzOF19LHszMzpbMSwxMzldfSx7Mzg6MTQwLDQyOnosNDM6Vyw0NDpldH0sezMzOlsxLDE0MV19LHszODoxNDIsNDI6eiw0MzpXLDQ0OmV0fSx7MzM6WzEsMTQzXX0sezMzOlsxLDE0NF19LHszMzpbMSwxNDVdfSx7MzM6WzEsMTQ2XX0sezMzOlsxLDE0N119LHszMzpbMSwxNDhdfSx7MzM6WzEsMTQ5XX0sezM4OjE1MCw0Mjp6LDQzOlcsNDQ6ZXR9LHszMzpbMSwxNTFdfSx7MzM6WzEsMTUyXX0sezMzOlsxLDE1M119LHszODoxNTQsNDI6eiw0MzpXLDQ0OmV0fSx7MzM6WzEsMTU1XX0sezM4OjE1Niw0Mjp6LDQzOlcsNDQ6ZXR9LHszMzpbMSwxNTddfSx7MzM6WzEsMTU4XX0sezMzOlsxLDE1OV19LHszODoxNjAsNDI6eiw0MzpXLDQ0OmV0fSx7MzM6WzEsMTYxXX0saShJLFsyLDM2XSx7MzQ6WzEsMTYyXX0pLGkoSSxbMiwzN10sezM3OlsxLDE2M119KSxpKEksWzIsMzVdLHszMjpbMSwxNjRdfSksaShJLFsyLDM4XSx7MzQ6WzEsMTY1XX0pLGkoSSxbMiwzM10sezM3OlsxLDE2Nl19KSxpKEksWzIsMzRdLHszMjpbMSwxNjddfSksaShJLFsyLDU5XSx7NDE6WzEsMTY4XX0pLGkoSSxbMiw3Ml0sezMyOlsxLDE2OV19KSxpKEksWzIsNjBdLHs0MTpbMSwxNzBdfSksaShJLFsyLDgzXSx7Mzc6WzEsMTcxXX0pLGkoSSxbMiw3M10sezMyOlsxLDE3Ml19KSxpKEksWzIsODJdLHszNzpbMSwxNzNdfSksaShJLFsyLDU4XSx7NDE6WzEsMTc0XX0pLGkoSSxbMiw3MV0sezMyOlsxLDE3NV19KSxpKEksWzIsNTddLHs0MTpbMSwxNzZdfSksaShJLFsyLDc3XSx7MzQ6WzEsMTc3XX0pLGkoSSxbMiw3MF0sezMyOlsxLDE3OF19KSxpKEksWzIsNzZdLHszNDpbMSwxNzldfSksaShJLFsyLDU2XSx7NDE6WzEsMTgwXX0pLGkoSSxbMiw4NF0sezM3OlsxLDE4MV19KSxpKEksWzIsNTVdLHs0MTpbMSwxODJdfSksaShJLFsyLDc4XSx7MzQ6WzEsMTgzXX0pLGkoSSxbMiw3OV0sezM0OlsxLDE4NF19KSxpKEksWzIsODVdLHszNzpbMSwxODVdfSksaShJLFsyLDY5XSx7MzI6WzEsMTg2XX0pLGkoSSxbMiw4MF0sezM3OlsxLDE4N119KSxpKEksWzIsNjhdLHszMjpbMSwxODhdfSksaShJLFsyLDc0XSx7MzQ6WzEsMTg5XX0pLGkoSSxbMiw3NV0sezM0OlsxLDE5MF19KSxpKEksWzIsODFdLHszNzpbMSwxOTFdfSksezMzOlsxLDE5Ml19LHszODoxOTMsNDI6eiw0MzpXLDQ0OmV0fSx7MzM6WzEsMTk0XX0sezMzOlsxLDE5NV19LHszODoxOTYsNDI6eiw0MzpXLDQ0OmV0fSx7MzM6WzEsMTk3XX0sezMzOlsxLDE5OF19LHszMzpbMSwxOTldfSx7MzM6WzEsMjAwXX0sezM4OjIwMSw0Mjp6LDQzOlcsNDQ6ZXR9LHszMzpbMSwyMDJdfSx7Mzg6MjAzLDQyOnosNDM6Vyw0NDpldH0sezMzOlsxLDIwNF19LHszMzpbMSwyMDVdfSx7MzM6WzEsMjA2XX0sezMzOlsxLDIwN119LHszMzpbMSwyMDhdfSx7MzM6WzEsMjA5XX0sezMzOlsxLDIxMF19LHszODoyMTEsNDI6eiw0MzpXLDQ0OmV0fSx7MzM6WzEsMjEyXX0sezMzOlsxLDIxM119LHszMzpbMSwyMTRdfSx7Mzg6MjE1LDQyOnosNDM6Vyw0NDpldH0sezMzOlsxLDIxNl19LHszODoyMTcsNDI6eiw0MzpXLDQ0OmV0fSx7MzM6WzEsMjE4XX0sezMzOlsxLDIxOV19LHszMzpbMSwyMjBdfSx7Mzg6MjIxLDQyOnosNDM6Vyw0NDpldH0saShJLFsyLDM5XSksaShJLFsyLDQxXSksaShJLFsyLDQwXSksaShJLFsyLDQyXSksaShJLFsyLDQ0XSksaShJLFsyLDQzXSksaShJLFsyLDEwMF0pLGkoSSxbMiwxMDFdKSxpKEksWzIsOThdKSxpKEksWzIsOTldKSxpKEksWzIsMTAzXSksaShJLFsyLDEwMl0pLGkoSSxbMiwxMDddKSxpKEksWzIsMTA2XSksaShJLFsyLDEwNV0pLGkoSSxbMiwxMDRdKSxpKEksWzIsMTA5XSksaShJLFsyLDEwOF0pLGkoSSxbMiw5N10pLGkoSSxbMiw5Nl0pLGkoSSxbMiw5NV0pLGkoSSxbMiw5NF0pLGkoSSxbMiw5Ml0pLGkoSSxbMiw5M10pLGkoSSxbMiw5MV0pLGkoSSxbMiw5MF0pLGkoSSxbMiw4OV0pLGkoSSxbMiw4OF0pLGkoSSxbMiw4Nl0pLGkoSSxbMiw4N10pXSxkZWZhdWx0QWN0aW9uczp7NzpbMiwxXSwxMzpbMiwyXSwxODpbMiwzXSwzNjpbMiw0XX0scGFyc2VFcnJvcjpmdW5jdGlvbihmdCx1dCl7aWYodXQucmVjb3ZlcmFibGUpdGhpcy50cmFjZShmdCk7ZWxzZXt2YXIgdnQ9bmV3IEVycm9yKGZ0KTt0aHJvdyB2dC5oYXNoPXV0LHZ0fX0scGFyc2U6ZnVuY3Rpb24oZnQpe3ZhciB1dD10aGlzLHZ0PVswXSxYPVtdLHB0PVtudWxsXSxVPVtdLFR0PXRoaXMudGFibGUsbnQ9IiIsSXQ9MCxPdD0wLEJ0PTIsRXQ9MSxaPVUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksQ3Q9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx4dD17eXk6e319O2Zvcih2YXIgSHQgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxIdCkmJih4dC55eVtIdF09dGhpcy55eVtIdF0pO0N0LnNldElucHV0KGZ0LHh0Lnl5KSx4dC55eS5sZXhlcj1DdCx4dC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgQ3QueXlsbG9jPiJ1IiYmKEN0Lnl5bGxvYz17fSk7dmFyIExlPUN0Lnl5bGxvYztVLnB1c2goTGUpO3ZhciBGdD1DdC5vcHRpb25zJiZDdC5vcHRpb25zLnJhbmdlczt0eXBlb2YgeHQueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9eHQueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gZ24oKXt2YXIgdGU7cmV0dXJuIHRlPVgucG9wKCl8fEN0LmxleCgpfHxFdCx0eXBlb2YgdGUhPSJudW1iZXIiJiYodGUgaW5zdGFuY2VvZiBBcnJheSYmKFg9dGUsdGU9WC5wb3AoKSksdGU9dXQuc3ltYm9sc19bdGVdfHx0ZSksdGV9Zm9yKHZhciBTZSxtZSxWZSxZZSxjZT17fSxrZSx6dCxyZSxzZTs7KXtpZihtZT12dFt2dC5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1ttZV0/VmU9dGhpcy5kZWZhdWx0QWN0aW9uc1ttZV06KChTZT09PW51bGx8fHR5cGVvZiBTZT4idSIpJiYoU2U9Z24oKSksVmU9VHRbbWVdJiZUdFttZV1bU2VdKSx0eXBlb2YgVmU+InUifHwhVmUubGVuZ3RofHwhVmVbMF0pe3ZhciBQZT0iIjtzZT1bXTtmb3Ioa2UgaW4gVHRbbWVdKXRoaXMudGVybWluYWxzX1trZV0mJmtlPkJ0JiZzZS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19ba2VdKyInIik7Q3Quc2hvd1Bvc2l0aW9uP1BlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEl0KzEpK2A6CmArQ3Quc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtzZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1NlXXx8U2UpKyInIjpQZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhJdCsxKSsiOiBVbmV4cGVjdGVkICIrKFNlPT1FdD8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tTZV18fFNlKSsiJyIpLHRoaXMucGFyc2VFcnJvcihQZSx7dGV4dDpDdC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bU2VdfHxTZSxsaW5lOkN0Lnl5bGluZW5vLGxvYzpMZSxleHBlY3RlZDpzZX0pfWlmKFZlWzBdaW5zdGFuY2VvZiBBcnJheSYmVmUubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIittZSsiLCB0b2tlbjogIitTZSk7c3dpdGNoKFZlWzBdKXtjYXNlIDE6dnQucHVzaChTZSkscHQucHVzaChDdC55eXRleHQpLFUucHVzaChDdC55eWxsb2MpLHZ0LnB1c2goVmVbMV0pLFNlPW51bGwsT3Q9Q3QueXlsZW5nLG50PUN0Lnl5dGV4dCxJdD1DdC55eWxpbmVubyxMZT1DdC55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKHp0PXRoaXMucHJvZHVjdGlvbnNfW1ZlWzFdXVsxXSxjZS4kPXB0W3B0Lmxlbmd0aC16dF0sY2UuXyQ9e2ZpcnN0X2xpbmU6VVtVLmxlbmd0aC0oenR8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpVW1UubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46VVtVLmxlbmd0aC0oenR8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46VVtVLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sRnQmJihjZS5fJC5yYW5nZT1bVVtVLmxlbmd0aC0oenR8fDEpXS5yYW5nZVswXSxVW1UubGVuZ3RoLTFdLnJhbmdlWzFdXSksWWU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KGNlLFtudCxPdCxJdCx4dC55eSxWZVsxXSxwdCxVXS5jb25jYXQoWikpLHR5cGVvZiBZZTwidSIpcmV0dXJuIFllO3p0JiYodnQ9dnQuc2xpY2UoMCwtMSp6dCoyKSxwdD1wdC5zbGljZSgwLC0xKnp0KSxVPVUuc2xpY2UoMCwtMSp6dCkpLHZ0LnB1c2godGhpcy5wcm9kdWN0aW9uc19bVmVbMV1dWzBdKSxwdC5wdXNoKGNlLiQpLFUucHVzaChjZS5fJCkscmU9VHRbdnRbdnQubGVuZ3RoLTJdXVt2dFt2dC5sZW5ndGgtMV1dLHZ0LnB1c2gocmUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxidD1mdW5jdGlvbigpe3ZhciB5dD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih1dCx2dCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih1dCx2dCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IodXQpfSxzZXRJbnB1dDpmdW5jdGlvbihmdCx1dCl7cmV0dXJuIHRoaXMueXk9dXR8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PWZ0LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBmdD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9ZnQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPWZ0LHRoaXMubWF0Y2hlZCs9ZnQ7dmFyIHV0PWZ0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gdXQ/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLGZ0fSx1bnB1dDpmdW5jdGlvbihmdCl7dmFyIHV0PWZ0Lmxlbmd0aCx2dD1mdC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PWZ0K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC11dCksdGhpcy5vZmZzZXQtPXV0O3ZhciBYPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLHZ0Lmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09dnQubGVuZ3RoLTEpO3ZhciBwdD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dnQ/KHZ0Lmxlbmd0aD09PVgubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStYW1gubGVuZ3RoLXZ0Lmxlbmd0aF0ubGVuZ3RoLXZ0WzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tdXR9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bcHRbMF0scHRbMF0rdGhpcy55eWxlbmctdXRdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihmdCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKGZ0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBmdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKGZ0Lmxlbmd0aD4yMD8iLi4uIjoiIikrZnQuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgZnQ9dGhpcy5tYXRjaDtyZXR1cm4gZnQubGVuZ3RoPDIwJiYoZnQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLWZ0Lmxlbmd0aCkpLChmdC5zdWJzdHIoMCwyMCkrKGZ0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgZnQ9dGhpcy5wYXN0SW5wdXQoKSx1dD1uZXcgQXJyYXkoZnQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gZnQrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK3V0KyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihmdCx1dCl7dmFyIHZ0LFgscHQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKHB0PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHB0Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLFg9ZnRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLFgmJih0aGlzLnl5bGluZW5vKz1YLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOlg/WFtYLmxlbmd0aC0xXS5sZW5ndGgtWFtYLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK2Z0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPWZ0WzBdLHRoaXMubWF0Y2grPWZ0WzBdLHRoaXMubWF0Y2hlcz1mdCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShmdFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9ZnRbMF0sdnQ9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsdXQsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksdnQpcmV0dXJuIHZ0O2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBVIGluIHB0KXRoaXNbVV09cHRbVV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgZnQsdXQsdnQsWDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBwdD10aGlzLl9jdXJyZW50UnVsZXMoKSxVPTA7VTxwdC5sZW5ndGg7VSsrKWlmKHZ0PXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbcHRbVV1dKSx2dCYmKCF1dHx8dnRbMF0ubGVuZ3RoPnV0WzBdLmxlbmd0aCkpe2lmKHV0PXZ0LFg9VSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihmdD10aGlzLnRlc3RfbWF0Y2godnQscHRbVV0pLGZ0IT09ITEpcmV0dXJuIGZ0O2lmKHRoaXMuX2JhY2t0cmFjayl7dXQ9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gdXQ/KGZ0PXRoaXMudGVzdF9tYXRjaCh1dCxwdFtYXSksZnQhPT0hMT9mdDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHV0PXRoaXMubmV4dCgpO3JldHVybiB1dHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odXQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh1dCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIHV0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIHV0PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odXQpe3JldHVybiB1dD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHV0fHwwKSx1dD49MD90aGlzLmNvbmRpdGlvblN0YWNrW3V0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih1dCl7dGhpcy5iZWdpbih1dCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odXQsdnQsWCxwdCl7c3dpdGNoKFgpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTk7Y2FzZSAxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSAyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwyMTtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDQ6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDc6cmV0dXJuIDEzO2Nhc2UgODpicmVhaztjYXNlIDk6YnJlYWs7Y2FzZSAxMDpyZXR1cm4gNTtjYXNlIDExOnJldHVybiAzOTtjYXNlIDEyOnJldHVybiAzMjtjYXNlIDEzOnJldHVybiAzNztjYXNlIDE0OnJldHVybiA0MTtjYXNlIDE1OnJldHVybiA0MjtjYXNlIDE2OnJldHVybiA0MztjYXNlIDE3OnJldHVybiA0NDtjYXNlIDE4OnJldHVybiAzNDtjYXNlIDE5OnJldHVybiAyODtjYXNlIDIwOnJldHVybiAyOTtjYXNlIDIxOnJldHVybiAzNjtjYXNlIDIyOnJldHVybiAzMTtjYXNlIDIzOnJldHVybiAyNjtjYXNlIDI0OnJldHVybiA5O2Nhc2UgMjU6cmV0dXJuIDk7Y2FzZSAyNjpyZXR1cm4gODtjYXNlIDI3OnJldHVybiJDQVJFVCI7Y2FzZSAyODp0aGlzLmJlZ2luKCJvcHRpb25zIik7YnJlYWs7Y2FzZSAyOTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gMTI7Y2FzZSAzMTpyZXR1cm4gMzU7Y2FzZSAzMjp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDMzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDM0OnJldHVybiAzMztjYXNlIDM1OnJldHVybiAzMDtjYXNlIDM2OnJldHVybiA0NTtjYXNlIDM3OnJldHVybiA3fX0scnVsZXM6Wy9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzooXHI/XG4pKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86Z2l0R3JhcGhcYikvaSwvXig/OmNvbW1pdCg/PVxzfCQpKS9pLC9eKD86aWQ6KS9pLC9eKD86dHlwZTopL2ksL14oPzptc2c6KS9pLC9eKD86Tk9STUFMXGIpL2ksL14oPzpSRVZFUlNFXGIpL2ksL14oPzpISUdITElHSFRcYikvaSwvXig/OnRhZzopL2ksL14oPzpicmFuY2goPz1cc3wkKSkvaSwvXig/Om9yZGVyOikvaSwvXig/Om1lcmdlKD89XHN8JCkpL2ksL14oPzpjaGVycnktcGljayg/PVxzfCQpKS9pLC9eKD86Y2hlY2tvdXQoPz1cc3wkKSkvaSwvXig/OkxSXGIpL2ksL14oPzpUQlxiKS9pLC9eKD86OikvaSwvXig/OlxeKS9pLC9eKD86b3B0aW9uc1xyP1xuKS9pLC9eKD86WyBcclxuXHRdK2VuZFxiKS9pLC9eKD86W1xzXFNdKyg/PVsgXHJcblx0XStlbmQpKS9pLC9eKD86WyJdWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbMC05XSsoPz1cc3wkKSkvaSwvXig/Olx3KFstXC4vXHddKlstXHddKT8pL2ksL14oPzokKS9pLC9eKD86XHMrKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNSw2XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzNdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSxvcHRpb25zOntydWxlczpbMjksMzBdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMzMsMzRdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDMxLDMyLDM1LDM2LDM3LDM4XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHl0fSgpO2F0LmxleGVyPWJ0O2Z1bmN0aW9uIG10KCl7dGhpcy55eT17fX1yZXR1cm4gbXQucHJvdG90eXBlPWF0LGF0LlBhcnNlcj1tdCxuZXcgbXR9KCk7ejB0LnBhcnNlcj16MHQ7Y29uc3QgTnplPXowdDtsZXQgTVk9T2UoKS5naXRHcmFwaC5tYWluQnJhbmNoTmFtZSxCemU9T2UoKS5naXRHcmFwaC5tYWluQnJhbmNoT3JkZXIsbDE9e30sdmc9bnVsbCxBRj17fTtBRltNWV09e25hbWU6TVksb3JkZXI6QnplfTtsZXQgTmY9e307TmZbTVldPXZnO2xldCBKMT1NWSxCQnQ9IkxSIixFVD0wO2Z1bmN0aW9uIHEwdCgpe3JldHVybiBHSXQoe2xlbmd0aDo3fSl9ZnVuY3Rpb24gUnplKGksYSl7Y29uc3QgZj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBpLnJlZHVjZSgocCx3KT0+e2NvbnN0IG09YSh3KTtyZXR1cm4gZlttXXx8KGZbbV09ITAscC5wdXNoKHcpKSxwfSxbXSl9Y29uc3QganplPWZ1bmN0aW9uKGkpe0JCdD1pfTtsZXQgUkJ0PXt9O2NvbnN0ICR6ZT1mdW5jdGlvbihpKXtVdC5kZWJ1Zygib3B0aW9ucyBzdHIiLGkpLGk9aSYmaS50cmltKCksaT1pfHwie30iO3RyeXtSQnQ9SlNPTi5wYXJzZShpKX1jYXRjaChhKXtVdC5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBnaXRHcmFwaCBvcHRpb25zIixhLm1lc3NhZ2UpfX0senplPWZ1bmN0aW9uKCl7cmV0dXJuIFJCdH0scXplPWZ1bmN0aW9uKGksYSxmLHApe1V0LmRlYnVnKCJFbnRlcmluZyBjb21taXQ6IixpLGEsZixwKSxhPUtyLnNhbml0aXplVGV4dChhLE9lKCkpLGk9S3Iuc2FuaXRpemVUZXh0KGksT2UoKSkscD1Lci5zYW5pdGl6ZVRleHQocCxPZSgpKTtjb25zdCB3PXtpZDphfHxFVCsiLSIrcTB0KCksbWVzc2FnZTppLHNlcTpFVCsrLHR5cGU6Znx8TEYuTk9STUFMLHRhZzpwfHwiIixwYXJlbnRzOnZnPT1udWxsP1tdOlt2Zy5pZF0sYnJhbmNoOkoxfTt2Zz13LGwxW3cuaWRdPXcsTmZbSjFdPXcuaWQsVXQuZGVidWcoImluIHB1c2hDb21taXQgIit3LmlkKX0sSHplPWZ1bmN0aW9uKGksYSl7aWYoaT1Lci5zYW5pdGl6ZVRleHQoaSxPZSgpKSxOZltpXT09PXZvaWQgMClOZltpXT12ZyE9bnVsbD92Zy5pZDpudWxsLEFGW2ldPXtuYW1lOmksb3JkZXI6YT9wYXJzZUludChhLDEwKTpudWxsfSxqQnQoaSksVXQuZGVidWcoImluIGNyZWF0ZUJyYW5jaCIpO2Vsc2V7bGV0IGY9bmV3IEVycm9yKCdUcnlpbmcgdG8gY3JlYXRlIGFuIGV4aXN0aW5nIGJyYW5jaC4gKEhlbHA6IEVpdGhlciB1c2UgYSBuZXcgbmFtZSBpZiB5b3Ugd2FudCBjcmVhdGUgYSBuZXcgYnJhbmNoIG9yIHRyeSB1c2luZyAiY2hlY2tvdXQgJytpKyciKScpO3Rocm93IGYuaGFzaD17dGV4dDoiYnJhbmNoICIraSx0b2tlbjoiYnJhbmNoICIraSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbJyJjaGVja291dCAnK2krJyInXX0sZn19LFZ6ZT1mdW5jdGlvbihpLGEsZixwKXtpPUtyLnNhbml0aXplVGV4dChpLE9lKCkpLGE9S3Iuc2FuaXRpemVUZXh0KGEsT2UoKSk7Y29uc3Qgdz1sMVtOZltKMV1dLG09bDFbTmZbaV1dO2lmKEoxPT09aSl7bGV0IEU9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ2Fubm90IG1lcmdlIGEgYnJhbmNoIHRvIGl0c2VsZicpO3Rocm93IEUuaGFzaD17dGV4dDoibWVyZ2UgIitpLHRva2VuOiJtZXJnZSAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJicmFuY2ggYWJjIl19LEV9ZWxzZSBpZih3PT09dm9pZCAwfHwhdyl7bGV0IEU9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ3VycmVudCBicmFuY2ggKCcrSjErIiloYXMgbm8gY29tbWl0cyIpO3Rocm93IEUuaGFzaD17dGV4dDoibWVyZ2UgIitpLHRva2VuOiJtZXJnZSAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJjb21taXQiXX0sRX1lbHNlIGlmKE5mW2ldPT09dm9pZCAwKXtsZXQgRT1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBCcmFuY2ggdG8gYmUgbWVyZ2VkICgnK2krIikgZG9lcyBub3QgZXhpc3QiKTt0aHJvdyBFLmhhc2g9e3RleHQ6Im1lcmdlICIraSx0b2tlbjoibWVyZ2UgIitpLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiYnJhbmNoICIraV19LEV9ZWxzZSBpZihtPT09dm9pZCAwfHwhbSl7bGV0IEU9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQnJhbmNoIHRvIGJlIG1lcmdlZCAoJytpKyIpIGhhcyBubyBjb21taXRzIik7dGhyb3cgRS5oYXNoPXt0ZXh0OiJtZXJnZSAiK2ksdG9rZW46Im1lcmdlICIraSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbJyJjb21taXQiJ119LEV9ZWxzZSBpZih3PT09bSl7bGV0IEU9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQm90aCBicmFuY2hlcyBoYXZlIHNhbWUgaGVhZCcpO3Rocm93IEUuaGFzaD17dGV4dDoibWVyZ2UgIitpLHRva2VuOiJtZXJnZSAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJicmFuY2ggYWJjIl19LEV9ZWxzZSBpZihhJiZsMVthXSE9PXZvaWQgMCl7bGV0IEU9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ29tbWl0IHdpdGggaWQ6JythKyIgYWxyZWFkeSBleGlzdHMsIHVzZSBkaWZmZXJlbnQgY3VzdG9tIElkIik7dGhyb3cgRS5oYXNoPXt0ZXh0OiJtZXJnZSAiK2krYStmK3AsdG9rZW46Im1lcmdlICIraSthK2YrcCxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbIm1lcmdlICIraSsiICIrYSsiX1VOSVFVRSAiK2YrIiAiK3BdfSxFfWNvbnN0IGI9e2lkOmF8fEVUKyItIitxMHQoKSxtZXNzYWdlOiJtZXJnZWQgYnJhbmNoICIraSsiIGludG8gIitKMSxzZXE6RVQrKyxwYXJlbnRzOlt2Zz09bnVsbD9udWxsOnZnLmlkLE5mW2ldXSxicmFuY2g6SjEsdHlwZTpMRi5NRVJHRSxjdXN0b21UeXBlOmYsY3VzdG9tSWQ6ISFhLHRhZzpwfHwiIn07dmc9YixsMVtiLmlkXT1iLE5mW0oxXT1iLmlkLFV0LmRlYnVnKE5mKSxVdC5kZWJ1ZygiaW4gbWVyZ2VCcmFuY2giKX0sR3plPWZ1bmN0aW9uKGksYSxmKXtpZihVdC5kZWJ1ZygiRW50ZXJpbmcgY2hlcnJ5UGljazoiLGksYSxmKSxpPUtyLnNhbml0aXplVGV4dChpLE9lKCkpLGE9S3Iuc2FuaXRpemVUZXh0KGEsT2UoKSksZj1Lci5zYW5pdGl6ZVRleHQoZixPZSgpKSwhaXx8bDFbaV09PT12b2lkIDApe2xldCBtPW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJjaGVycnlQaWNrIi4gU291cmNlIGNvbW1pdCBpZCBzaG91bGQgZXhpc3QgYW5kIHByb3ZpZGVkJyk7dGhyb3cgbS5oYXNoPXt0ZXh0OiJjaGVycnlQaWNrICIraSsiICIrYSx0b2tlbjoiY2hlcnJ5UGljayAiK2krIiAiK2EsbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJjaGVycnktcGljayBhYmMiXX0sbX1sZXQgcD1sMVtpXSx3PXAuYnJhbmNoO2lmKHAudHlwZT09PUxGLk1FUkdFKXtsZXQgbT1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAiY2hlcnJ5UGljayIuIFNvdXJjZSBjb21taXQgc2hvdWxkIG5vdCBiZSBhIG1lcmdlIGNvbW1pdCcpO3Rocm93IG0uaGFzaD17dGV4dDoiY2hlcnJ5UGljayAiK2krIiAiK2EsdG9rZW46ImNoZXJyeVBpY2sgIitpKyIgIithLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiY2hlcnJ5LXBpY2sgYWJjIl19LG19aWYoIWF8fGwxW2FdPT09dm9pZCAwKXtpZih3PT09SjEpe2xldCBFPW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJjaGVycnlQaWNrIi4gU291cmNlIGNvbW1pdCBpcyBhbHJlYWR5IG9uIGN1cnJlbnQgYnJhbmNoJyk7dGhyb3cgRS5oYXNoPXt0ZXh0OiJjaGVycnlQaWNrICIraSsiICIrYSx0b2tlbjoiY2hlcnJ5UGljayAiK2krIiAiK2EsbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJjaGVycnktcGljayBhYmMiXX0sRX1jb25zdCBtPWwxW05mW0oxXV07aWYobT09PXZvaWQgMHx8IW0pe2xldCBFPW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJjaGVycnktcGljayIuIEN1cnJlbnQgYnJhbmNoICgnK0oxKyIpaGFzIG5vIGNvbW1pdHMiKTt0aHJvdyBFLmhhc2g9e3RleHQ6ImNoZXJyeVBpY2sgIitpKyIgIithLHRva2VuOiJjaGVycnlQaWNrICIraSsiICIrYSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbImNoZXJyeS1waWNrIGFiYyJdfSxFfWNvbnN0IGI9e2lkOkVUKyItIitxMHQoKSxtZXNzYWdlOiJjaGVycnktcGlja2VkICIrcCsiIGludG8gIitKMSxzZXE6RVQrKyxwYXJlbnRzOlt2Zz09bnVsbD9udWxsOnZnLmlkLHAuaWRdLGJyYW5jaDpKMSx0eXBlOkxGLkNIRVJSWV9QSUNLLHRhZzpmPz8iY2hlcnJ5LXBpY2s6IitwLmlkfTt2Zz1iLGwxW2IuaWRdPWIsTmZbSjFdPWIuaWQsVXQuZGVidWcoTmYpLFV0LmRlYnVnKCJpbiBjaGVycnlQaWNrIil9fSxqQnQ9ZnVuY3Rpb24oaSl7aWYoaT1Lci5zYW5pdGl6ZVRleHQoaSxPZSgpKSxOZltpXT09PXZvaWQgMCl7bGV0IGE9bmV3IEVycm9yKCdUcnlpbmcgdG8gY2hlY2tvdXQgYnJhbmNoIHdoaWNoIGlzIG5vdCB5ZXQgY3JlYXRlZC4gKEhlbHAgdHJ5IHVzaW5nICJicmFuY2ggJytpKyciKScpO3Rocm93IGEuaGFzaD17dGV4dDoiY2hlY2tvdXQgIitpLHRva2VuOiJjaGVja291dCAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyciYnJhbmNoICcraSsnIiddfSxhfWVsc2V7SjE9aTtjb25zdCBhPU5mW0oxXTt2Zz1sMVthXX19O2Z1bmN0aW9uICRCdChpLGEsZil7Y29uc3QgcD1pLmluZGV4T2YoYSk7cD09PS0xP2kucHVzaChmKTppLnNwbGljZShwLDEsZil9ZnVuY3Rpb24gekJ0KGkpe2NvbnN0IGE9aS5yZWR1Y2UoKHcsbSk9Pncuc2VxPm0uc2VxP3c6bSxpWzBdKTtsZXQgZj0iIjtpLmZvckVhY2goZnVuY3Rpb24odyl7dz09PWE/Zis9IgkqIjpmKz0iCXwifSk7Y29uc3QgcD1bZixhLmlkLGEuc2VxXTtmb3IobGV0IHcgaW4gTmYpTmZbd109PT1hLmlkJiZwLnB1c2godyk7aWYoVXQuZGVidWcocC5qb2luKCIgIikpLGEucGFyZW50cyYmYS5wYXJlbnRzLmxlbmd0aD09Mil7Y29uc3Qgdz1sMVthLnBhcmVudHNbMF1dOyRCdChpLGEsdyksaS5wdXNoKGwxW2EucGFyZW50c1sxXV0pfWVsc2V7aWYoYS5wYXJlbnRzLmxlbmd0aD09MClyZXR1cm47e2NvbnN0IHc9bDFbYS5wYXJlbnRzXTskQnQoaSxhLHcpfX1pPVJ6ZShpLHc9PncuaWQpLHpCdChpKX1jb25zdCBVemU9ZnVuY3Rpb24oKXtVdC5kZWJ1ZyhsMSk7Y29uc3QgaT1xQnQoKVswXTt6QnQoW2ldKX0sV3plPWZ1bmN0aW9uKCl7bDE9e30sdmc9bnVsbDtsZXQgaT1PZSgpLmdpdEdyYXBoLm1haW5CcmFuY2hOYW1lLGE9T2UoKS5naXRHcmFwaC5tYWluQnJhbmNoT3JkZXI7TmY9e30sTmZbaV09bnVsbCxBRj17fSxBRltpXT17bmFtZTppLG9yZGVyOmF9LEoxPWksRVQ9MCxoZygpfSxZemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LnZhbHVlcyhBRikubWFwKChhLGYpPT5hLm9yZGVyIT09bnVsbD9hOnsuLi5hLG9yZGVyOnBhcnNlRmxvYXQoYDAuJHtmfWAsMTApfSkuc29ydCgoYSxmKT0+YS5vcmRlci1mLm9yZGVyKS5tYXAoKHtuYW1lOmF9KT0+KHtuYW1lOmF9KSl9LEt6ZT1mdW5jdGlvbigpe3JldHVybiBOZn0sWHplPWZ1bmN0aW9uKCl7cmV0dXJuIGwxfSxxQnQ9ZnVuY3Rpb24oKXtjb25zdCBpPU9iamVjdC5rZXlzKGwxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGwxW2FdfSk7cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihhKXtVdC5kZWJ1ZyhhLmlkKX0pLGkuc29ydCgoYSxmKT0+YS5zZXEtZi5zZXEpLGl9LFF6ZT1mdW5jdGlvbigpe3JldHVybiBKMX0sWnplPWZ1bmN0aW9uKCl7cmV0dXJuIEJCdH0sSnplPWZ1bmN0aW9uKCl7cmV0dXJuIHZnfSxMRj17Tk9STUFMOjAsUkVWRVJTRToxLEhJR0hMSUdIVDoyLE1FUkdFOjMsQ0hFUlJZX1BJQ0s6NH0sdHFlPXtnZXRDb25maWc6KCk9Pk9lKCkuZ2l0R3JhcGgsc2V0RGlyZWN0aW9uOmp6ZSxzZXRPcHRpb25zOiR6ZSxnZXRPcHRpb25zOnp6ZSxjb21taXQ6cXplLGJyYW5jaDpIemUsbWVyZ2U6VnplLGNoZXJyeVBpY2s6R3plLGNoZWNrb3V0OmpCdCxwcmV0dHlQcmludDpVemUsY2xlYXI6V3plLGdldEJyYW5jaGVzQXNPYmpBcnJheTpZemUsZ2V0QnJhbmNoZXM6S3plLGdldENvbW1pdHM6WHplLGdldENvbW1pdHNBcnJheTpxQnQsZ2V0Q3VycmVudEJyYW5jaDpRemUsZ2V0RGlyZWN0aW9uOlp6ZSxnZXRIZWFkOkp6ZSxzZXRBY2NUaXRsZTpFMCxnZXRBY2NUaXRsZTpmZyxnZXRBY2NEZXNjcmlwdGlvbjpnZyxzZXRBY2NEZXNjcmlwdGlvbjpkZyxzZXREaWFncmFtVGl0bGU6TmIsZ2V0RGlhZ3JhbVRpdGxlOnBnLGNvbW1pdFR5cGU6TEZ9O2xldCBNRj17fTtjb25zdCAkYj17Tk9STUFMOjAsUkVWRVJTRToxLEhJR0hMSUdIVDoyLE1FUkdFOjMsQ0hFUlJZX1BJQ0s6NH0sVFQ9ODtsZXQgdGQ9e30sREY9e30sRFk9W10sSUY9MCxDMD0iTFIiO2NvbnN0IGVxZT0oKT0+e3RkPXt9LERGPXt9LE1GPXt9LElGPTAsRFk9W10sQzA9IkxSIn0sSEJ0PWk9Pntjb25zdCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7bGV0IGY9W107dHlwZW9mIGk9PSJzdHJpbmciP2Y9aS5zcGxpdCgvXFxufFxufDxiclxzKlwvPz4vZ2kpOkFycmF5LmlzQXJyYXkoaSk/Zj1pOmY9W107Zm9yKGNvbnN0IHAgb2YgZil7Y29uc3Qgdz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTt3LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLHcuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLHcuc2V0QXR0cmlidXRlKCJ4IiwiMCIpLHcuc2V0QXR0cmlidXRlKCJjbGFzcyIsInJvdyIpLHcudGV4dENvbnRlbnQ9cC50cmltKCksYS5hcHBlbmRDaGlsZCh3KX1yZXR1cm4gYX0sVkJ0PShpLGEsZik9Pntjb25zdCBwPU9lKCkuZ2l0R3JhcGgsdz1pLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY29tbWl0LWJ1bGxldHMiKSxtPWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjb21taXQtbGFiZWxzIik7bGV0IGI9MDtDMD09PSJUQiImJihiPTMwKSxPYmplY3Qua2V5cyhhKS5zb3J0KChBLEkpPT5hW0FdLnNlcS1hW0ldLnNlcSkuZm9yRWFjaChBPT57Y29uc3QgST1hW0FdLEI9QzA9PT0iVEIiP2IrMTA6dGRbSS5icmFuY2hdLnBvcyxOPUMwPT09IlRCIj90ZFtJLmJyYW5jaF0ucG9zOmIrMTA7aWYoZil7bGV0IFIsej1JLmN1c3RvbVR5cGUhPT12b2lkIDAmJkkuY3VzdG9tVHlwZSE9PSIiP0kuY3VzdG9tVHlwZTpJLnR5cGU7c3dpdGNoKHope2Nhc2UgJGIuTk9STUFMOlI9ImNvbW1pdC1ub3JtYWwiO2JyZWFrO2Nhc2UgJGIuUkVWRVJTRTpSPSJjb21taXQtcmV2ZXJzZSI7YnJlYWs7Y2FzZSAkYi5ISUdITElHSFQ6Uj0iY29tbWl0LWhpZ2hsaWdodCI7YnJlYWs7Y2FzZSAkYi5NRVJHRTpSPSJjb21taXQtbWVyZ2UiO2JyZWFrO2Nhc2UgJGIuQ0hFUlJZX1BJQ0s6Uj0iY29tbWl0LWNoZXJyeS1waWNrIjticmVhaztkZWZhdWx0OlI9ImNvbW1pdC1ub3JtYWwifWlmKHo9PT0kYi5ISUdITElHSFQpe2NvbnN0IFc9dy5hcHBlbmQoInJlY3QiKTtXLmF0dHIoIngiLE4tMTApLFcuYXR0cigieSIsQi0xMCksVy5hdHRyKCJoZWlnaHQiLDIwKSxXLmF0dHIoIndpZHRoIiwyMCksVy5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke0kuaWR9IGNvbW1pdC1oaWdobGlnaHQke3RkW0kuYnJhbmNoXS5pbmRleCVUVH0gJHtSfS1vdXRlcmApLHcuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsTi02KS5hdHRyKCJ5IixCLTYpLmF0dHIoImhlaWdodCIsMTIpLmF0dHIoIndpZHRoIiwxMikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtJLmlkfSBjb21taXQke3RkW0kuYnJhbmNoXS5pbmRleCVUVH0gJHtSfS1pbm5lcmApfWVsc2UgaWYoej09PSRiLkNIRVJSWV9QSUNLKXcuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsTikuYXR0cigiY3kiLEIpLmF0dHIoInIiLDEwKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke0kuaWR9ICR7Un1gKSx3LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLE4tMykuYXR0cigiY3kiLEIrMikuYXR0cigiciIsMi43NSkuYXR0cigiZmlsbCIsIiNmZmYiKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke0kuaWR9ICR7Un1gKSx3LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLE4rMykuYXR0cigiY3kiLEIrMikuYXR0cigiciIsMi43NSkuYXR0cigiZmlsbCIsIiNmZmYiKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke0kuaWR9ICR7Un1gKSx3LmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixOKzMpLmF0dHIoInkxIixCKzEpLmF0dHIoIngyIixOKS5hdHRyKCJ5MiIsQi01KS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtJLmlkfSAke1J9YCksdy5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsTi0zKS5hdHRyKCJ5MSIsQisxKS5hdHRyKCJ4MiIsTikuYXR0cigieTIiLEItNSkuYXR0cigic3Ryb2tlIiwiI2ZmZiIpLmF0dHIoImNsYXNzIixgY29tbWl0ICR7SS5pZH0gJHtSfWApO2Vsc2V7Y29uc3QgVz13LmFwcGVuZCgiY2lyY2xlIik7aWYoVy5hdHRyKCJjeCIsTiksVy5hdHRyKCJjeSIsQiksVy5hdHRyKCJyIixJLnR5cGU9PT0kYi5NRVJHRT85OjEwKSxXLmF0dHIoImNsYXNzIixgY29tbWl0ICR7SS5pZH0gY29tbWl0JHt0ZFtJLmJyYW5jaF0uaW5kZXglVFR9YCksej09PSRiLk1FUkdFKXtjb25zdCBldD13LmFwcGVuZCgiY2lyY2xlIik7ZXQuYXR0cigiY3giLE4pLGV0LmF0dHIoImN5IixCKSxldC5hdHRyKCJyIiw2KSxldC5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke1J9ICR7SS5pZH0gY29tbWl0JHt0ZFtJLmJyYW5jaF0uaW5kZXglVFR9YCl9ej09PSRiLlJFVkVSU0UmJncuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYE0gJHtOLTV9LCR7Qi01fUwke04rNX0sJHtCKzV9TSR7Ti01fSwke0IrNX1MJHtOKzV9LCR7Qi01fWApLmF0dHIoImNsYXNzIixgY29tbWl0ICR7Un0gJHtJLmlkfSBjb21taXQke3RkW0kuYnJhbmNoXS5pbmRleCVUVH1gKX19aWYoQzA9PT0iVEIiP0RGW0kuaWRdPXt4Ok4seTpiKzEwfTpERltJLmlkXT17eDpiKzEwLHk6Qn0sZil7aWYoSS50eXBlIT09JGIuQ0hFUlJZX1BJQ0smJihJLmN1c3RvbUlkJiZJLnR5cGU9PT0kYi5NRVJHRXx8SS50eXBlIT09JGIuTUVSR0UpJiZwLnNob3dDb21taXRMYWJlbCl7Y29uc3QgVz1tLmFwcGVuZCgiZyIpLGV0PVcuaW5zZXJ0KCJyZWN0IikuYXR0cigiY2xhc3MiLCJjb21taXQtbGFiZWwtYmtnIiksc3Q9Vy5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixiKS5hdHRyKCJ5IixCKzI1KS5hdHRyKCJjbGFzcyIsImNvbW1pdC1sYWJlbCIpLnRleHQoSS5pZCk7bGV0IGF0PXN0Lm5vZGUoKS5nZXRCQm94KCk7aWYoZXQuYXR0cigieCIsYisxMC1hdC53aWR0aC8yLTIpLmF0dHIoInkiLEIrMTMuNSkuYXR0cigid2lkdGgiLGF0LndpZHRoKzIqMikuYXR0cigiaGVpZ2h0IixhdC5oZWlnaHQrMioyKSxDMD09PSJUQiImJihldC5hdHRyKCJ4IixOLShhdC53aWR0aCs0KjQrNSkpLmF0dHIoInkiLEItMTIpLHN0LmF0dHIoIngiLE4tKGF0LndpZHRoKzQqNCkpLmF0dHIoInkiLEIrYXQuaGVpZ2h0LTEyKSksQzAhPT0iVEIiJiZzdC5hdHRyKCJ4IixiKzEwLWF0LndpZHRoLzIpLHAucm90YXRlQ29tbWl0TGFiZWwpaWYoQzA9PT0iVEIiKXN0LmF0dHIoInRyYW5zZm9ybSIsInJvdGF0ZSgtNDUsICIrTisiLCAiK0IrIikiKSxldC5hdHRyKCJ0cmFuc2Zvcm0iLCJyb3RhdGUoLTQ1LCAiK04rIiwgIitCKyIpIik7ZWxzZXtsZXQgYnQ9LTcuNS0oYXQud2lkdGgrMTApLzI1KjkuNSxtdD0xMCthdC53aWR0aC8yNSo4LjU7Vy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitidCsiLCAiK210KyIpIHJvdGF0ZSgtNDUsICIrYisiLCAiK0IrIikiKX19aWYoSS50YWcpe2NvbnN0IFc9bS5pbnNlcnQoInBvbHlnb24iKSxldD1tLmFwcGVuZCgiY2lyY2xlIiksc3Q9bS5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IixCLTE2KS5hdHRyKCJjbGFzcyIsInRhZy1sYWJlbCIpLnRleHQoSS50YWcpO2xldCBhdD1zdC5ub2RlKCkuZ2V0QkJveCgpO3N0LmF0dHIoIngiLGIrMTAtYXQud2lkdGgvMik7Y29uc3QgYnQ9YXQuaGVpZ2h0LzIsbXQ9Qi0xOS4yO1cuYXR0cigiY2xhc3MiLCJ0YWctbGFiZWwtYmtnIikuYXR0cigicG9pbnRzIixgCiAgICAgICAgICAke2ItYXQud2lkdGgvMi00LzJ9LCR7bXQrMn0KICAgICAgICAgICR7Yi1hdC53aWR0aC8yLTQvMn0sJHttdC0yfQogICAgICAgICAgJHtiKzEwLWF0LndpZHRoLzItNH0sJHttdC1idC0yfQogICAgICAgICAgJHtiKzEwK2F0LndpZHRoLzIrNH0sJHttdC1idC0yfQogICAgICAgICAgJHtiKzEwK2F0LndpZHRoLzIrNH0sJHttdCtidCsyfQogICAgICAgICAgJHtiKzEwLWF0LndpZHRoLzItNH0sJHttdCtidCsyfWApLGV0LmF0dHIoImN4IixiLWF0LndpZHRoLzIrNC8yKS5hdHRyKCJjeSIsbXQpLmF0dHIoInIiLDEuNSkuYXR0cigiY2xhc3MiLCJ0YWctaG9sZSIpLEMwPT09IlRCIiYmKFcuYXR0cigiY2xhc3MiLCJ0YWctbGFiZWwtYmtnIikuYXR0cigicG9pbnRzIixgCiAgICAgICAgICAgICR7Tn0sJHtiKzJ9CiAgICAgICAgICAgICR7Tn0sJHtiLTJ9CiAgICAgICAgICAgICR7TisxMH0sJHtiLWJ0LTJ9CiAgICAgICAgICAgICR7TisxMCthdC53aWR0aCs0fSwke2ItYnQtMn0KICAgICAgICAgICAgJHtOKzEwK2F0LndpZHRoKzR9LCR7YitidCsyfQogICAgICAgICAgICAke04rMTB9LCR7YitidCsyfWApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxMiwxMikgcm90YXRlKDQ1LCAiK04rIiwiK2IrIikiKSxldC5hdHRyKCJjeCIsTis0LzIpLmF0dHIoImN5IixiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTIsMTIpIHJvdGF0ZSg0NSwgIitOKyIsIitiKyIpIiksc3QuYXR0cigieCIsTis1KS5hdHRyKCJ5IixiKzMpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxNCwxNCkgcm90YXRlKDQ1LCAiK04rIiwiK2IrIikiKSl9fWIrPTUwLGI+SUYmJihJRj1iKX0pfSxucWU9KGksYSxmKT0+T2JqZWN0LmtleXMoZikuZmlsdGVyKG09PmZbbV0uYnJhbmNoPT09YS5icmFuY2gmJmZbbV0uc2VxPmkuc2VxJiZmW21dLnNlcTxhLnNlcSkubGVuZ3RoPjAsT0Y9KGksYSxmPTApPT57Y29uc3QgcD1pK01hdGguYWJzKGktYSkvMjtpZihmPjUpcmV0dXJuIHA7aWYoRFkuZXZlcnkoYj0+TWF0aC5hYnMoYi1wKT49MTApKXJldHVybiBEWS5wdXNoKHApLHA7Y29uc3QgbT1NYXRoLmFicyhpLWEpO3JldHVybiBPRihpLGEtbS81LGYrMSl9LHJxZT0oaSxhLGYscCk9Pntjb25zdCB3PURGW2EuaWRdLG09REZbZi5pZF0sYj1ucWUoYSxmLHApO2xldCBFPSIiLF89IiIsQT0wLEk9MCxCPXRkW2YuYnJhbmNoXS5pbmRleCxOO2lmKGIpe0U9IkEgMTAgMTAsIDAsIDAsIDAsIixfPSJBIDEwIDEwLCAwLCAwLCAxLCIsQT0xMCxJPTEwLEI9dGRbZi5icmFuY2hdLmluZGV4O2NvbnN0IFI9dy55PG0ueT9PRih3LnksbS55KTpPRihtLnksdy55KSx6PXcueDxtLng/T0Yody54LG0ueCk6T0YobS54LHcueCk7QzA9PT0iVEIiP3cueDxtLng/Tj1gTSAke3cueH0gJHt3Lnl9IEwgJHt6LUF9ICR7dy55fSAke199ICR7en0gJHt3LnkrSX0gTCAke3p9ICR7bS55LUF9ICR7RX0gJHt6K0l9ICR7bS55fSBMICR7bS54fSAke20ueX1gOk49YE0gJHt3Lnh9ICR7dy55fSBMICR7eitBfSAke3cueX0gJHtFfSAke3p9ICR7dy55K0l9IEwgJHt6fSAke20ueS1BfSAke199ICR7ei1JfSAke20ueX0gTCAke20ueH0gJHttLnl9YDp3Lnk8bS55P049YE0gJHt3Lnh9ICR7dy55fSBMICR7dy54fSAke1ItQX0gJHtFfSAke3cueCtJfSAke1J9IEwgJHttLngtQX0gJHtSfSAke199ICR7bS54fSAke1IrSX0gTCAke20ueH0gJHttLnl9YDpOPWBNICR7dy54fSAke3cueX0gTCAke3cueH0gJHtSK0F9ICR7X30gJHt3LngrSX0gJHtSfSBMICR7bS54LUF9ICR7Un0gJHtFfSAke20ueH0gJHtSLUl9IEwgJHttLnh9ICR7bS55fWB9ZWxzZSBDMD09PSJUQiI/KHcueDxtLngmJihFPSJBIDIwIDIwLCAwLCAwLCAwLCIsXz0iQSAyMCAyMCwgMCwgMCwgMSwiLEE9MjAsST0yMCxCPXRkW2YuYnJhbmNoXS5pbmRleCxOPWBNICR7dy54fSAke3cueX0gTCAke20ueC1BfSAke3cueX0gJHtffSAke20ueH0gJHt3LnkrSX0gTCAke20ueH0gJHttLnl9YCksdy54Pm0ueCYmKEU9IkEgMjAgMjAsIDAsIDAsIDAsIixfPSJBIDIwIDIwLCAwLCAwLCAxLCIsQT0yMCxJPTIwLEI9dGRbYS5icmFuY2hdLmluZGV4LE49YE0gJHt3Lnh9ICR7dy55fSBMICR7dy54fSAke20ueS1BfSAke199ICR7dy54LUl9ICR7bS55fSBMICR7bS54fSAke20ueX1gKSx3Lng9PT1tLngmJihCPXRkW2EuYnJhbmNoXS5pbmRleCxOPWBNICR7dy54fSAke3cueX0gTCAke3cueCtBfSAke3cueX0gJHtFfSAke3cueCtJfSAke20ueStBfSBMICR7bS54fSAke20ueX1gKSk6KHcueTxtLnkmJihFPSJBIDIwIDIwLCAwLCAwLCAwLCIsQT0yMCxJPTIwLEI9dGRbZi5icmFuY2hdLmluZGV4LE49YE0gJHt3Lnh9ICR7dy55fSBMICR7dy54fSAke20ueS1BfSAke0V9ICR7dy54K0l9ICR7bS55fSBMICR7bS54fSAke20ueX1gKSx3Lnk+bS55JiYoRT0iQSAyMCAyMCwgMCwgMCwgMCwiLEE9MjAsST0yMCxCPXRkW2EuYnJhbmNoXS5pbmRleCxOPWBNICR7dy54fSAke3cueX0gTCAke20ueC1BfSAke3cueX0gJHtFfSAke20ueH0gJHt3LnktSX0gTCAke20ueH0gJHttLnl9YCksdy55PT09bS55JiYoQj10ZFthLmJyYW5jaF0uaW5kZXgsTj1gTSAke3cueH0gJHt3Lnl9IEwgJHt3Lnh9ICR7bS55LUF9ICR7RX0gJHt3LngrSX0gJHttLnl9IEwgJHttLnh9ICR7bS55fWApKTtpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLE4pLmF0dHIoImNsYXNzIiwiYXJyb3cgYXJyb3ciK0IlVFQpfSxpcWU9KGksYSk9Pntjb25zdCBmPWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjb21taXQtYXJyb3dzIik7T2JqZWN0LmtleXMoYSkuZm9yRWFjaChwPT57Y29uc3Qgdz1hW3BdO3cucGFyZW50cyYmdy5wYXJlbnRzLmxlbmd0aD4wJiZ3LnBhcmVudHMuZm9yRWFjaChtPT57cnFlKGYsYVttXSx3LGEpfSl9KX0sc3FlPShpLGEpPT57Y29uc3QgZj1PZSgpLmdpdEdyYXBoLHA9aS5hcHBlbmQoImciKTthLmZvckVhY2goKHcsbSk9Pntjb25zdCBiPW0lVFQsRT10ZFt3Lm5hbWVdLnBvcyxfPXAuYXBwZW5kKCJsaW5lIik7Xy5hdHRyKCJ4MSIsMCksXy5hdHRyKCJ5MSIsRSksXy5hdHRyKCJ4MiIsSUYpLF8uYXR0cigieTIiLEUpLF8uYXR0cigiY2xhc3MiLCJicmFuY2ggYnJhbmNoIitiKSxDMD09PSJUQiImJihfLmF0dHIoInkxIiwzMCksXy5hdHRyKCJ4MSIsRSksXy5hdHRyKCJ5MiIsSUYpLF8uYXR0cigieDIiLEUpKSxEWS5wdXNoKEUpO2xldCBBPXcubmFtZTtjb25zdCBJPUhCdChBKSxCPXAuaW5zZXJ0KCJyZWN0IiksUj1wLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiYnJhbmNoTGFiZWwiKS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIGJyYW5jaC1sYWJlbCIrYik7Ui5ub2RlKCkuYXBwZW5kQ2hpbGQoSSk7bGV0IHo9SS5nZXRCQm94KCk7Qi5hdHRyKCJjbGFzcyIsImJyYW5jaExhYmVsQmtnIGxhYmVsIitiKS5hdHRyKCJyeCIsNCkuYXR0cigicnkiLDQpLmF0dHIoIngiLC16LndpZHRoLTQtKGYucm90YXRlQ29tbWl0TGFiZWw9PT0hMD8zMDowKSkuYXR0cigieSIsLXouaGVpZ2h0LzIrOCkuYXR0cigid2lkdGgiLHoud2lkdGgrMTgpLmF0dHIoImhlaWdodCIsei5oZWlnaHQrNCksUi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoLXoud2lkdGgtMTQtKGYucm90YXRlQ29tbWl0TGFiZWw9PT0hMD8zMDowKSkrIiwgIisoRS16LmhlaWdodC8yLTEpKyIpIiksQzA9PT0iVEIiJiYoQi5hdHRyKCJ4IixFLXoud2lkdGgvMi0xMCkuYXR0cigieSIsMCksUi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoRS16LndpZHRoLzItNSkrIiwgMCkiKSksQzAhPT0iVEIiJiZCLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgtMTksICIrKEUtei5oZWlnaHQvMikrIikiKX0pfSxhcWU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpOemUsZGI6dHFlLHJlbmRlcmVyOntkcmF3OmZ1bmN0aW9uKGksYSxmLHApe2VxZSgpO2NvbnN0IHc9T2UoKSxtPXcuZ2l0R3JhcGg7VXQuZGVidWcoImluIGdpdGdyYXBoIHJlbmRlcmVyIixpK2AKYCwiaWQ6IixhLGYpLE1GPXAuZGIuZ2V0Q29tbWl0cygpO2NvbnN0IGI9cC5kYi5nZXRCcmFuY2hlc0FzT2JqQXJyYXkoKTtDMD1wLmRiLmdldERpcmVjdGlvbigpO2NvbnN0IEU9eXIoYFtpZD0iJHthfSJdYCk7bGV0IF89MDtiLmZvckVhY2goKEEsSSk9Pntjb25zdCBCPUhCdChBLm5hbWUpLE49RS5hcHBlbmQoImciKSxSPU4uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJicmFuY2hMYWJlbCIpLHo9Ui5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIGJyYW5jaC1sYWJlbCIpO3oubm9kZSgpLmFwcGVuZENoaWxkKEIpO2xldCBXPUIuZ2V0QkJveCgpO3RkW0EubmFtZV09e3BvczpfLGluZGV4Okl9LF8rPTUwKyhtLnJvdGF0ZUNvbW1pdExhYmVsPzQwOjApKyhDMD09PSJUQiI/Vy53aWR0aC8yOjApLHoucmVtb3ZlKCksUi5yZW1vdmUoKSxOLnJlbW92ZSgpfSksVkJ0KEUsTUYsITEpLG0uc2hvd0JyYW5jaGVzJiZzcWUoRSxiKSxpcWUoRSxNRiksVkJ0KEUsTUYsITApLCRhLmluc2VydFRpdGxlKEUsImdpdFRpdGxlVGV4dCIsbS50aXRsZVRvcE1hcmdpbixwLmRiLmdldERpYWdyYW1UaXRsZSgpKSxBT3Qodm9pZCAwLEUsbS5kaWFncmFtUGFkZGluZyxtLnVzZU1heFdpZHRoPz93LnVzZU1heFdpZHRoKX19LHN0eWxlczppPT5gCiAgLmNvbW1pdC1pZCwKICAuY29tbWl0LW1zZywKICAuYnJhbmNoLWxhYmVsIHsKICAgIGZpbGw6IGxpZ2h0Z3JleTsKICAgIGNvbG9yOiBsaWdodGdyZXk7CiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogIH0KICAke1swLDEsMiwzLDQsNSw2LDddLm1hcChhPT5gCiAgICAgICAgLmJyYW5jaC1sYWJlbCR7YX0geyBmaWxsOiAke2lbImdpdEJyYW5jaExhYmVsIithXX07IH0KICAgICAgICAuY29tbWl0JHthfSB7IHN0cm9rZTogJHtpWyJnaXQiK2FdfTsgZmlsbDogJHtpWyJnaXQiK2FdfTsgfQogICAgICAgIC5jb21taXQtaGlnaGxpZ2h0JHthfSB7IHN0cm9rZTogJHtpWyJnaXRJbnYiK2FdfTsgZmlsbDogJHtpWyJnaXRJbnYiK2FdfTsgfQogICAgICAgIC5sYWJlbCR7YX0gIHsgZmlsbDogJHtpWyJnaXQiK2FdfTsgfQogICAgICAgIC5hcnJvdyR7YX0geyBzdHJva2U6ICR7aVsiZ2l0IithXX07IH0KICAgICAgICBgKS5qb2luKGAKYCl9CgogIC5icmFuY2ggewogICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgc3Ryb2tlOiAke2kubGluZUNvbG9yfTsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDI7CiAgfQogIC5jb21taXQtbGFiZWwgeyBmb250LXNpemU6ICR7aS5jb21taXRMYWJlbEZvbnRTaXplfTsgZmlsbDogJHtpLmNvbW1pdExhYmVsQ29sb3J9O30KICAuY29tbWl0LWxhYmVsLWJrZyB7IGZvbnQtc2l6ZTogJHtpLmNvbW1pdExhYmVsRm9udFNpemV9OyBmaWxsOiAke2kuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfTsgb3BhY2l0eTogMC41OyB9CiAgLnRhZy1sYWJlbCB7IGZvbnQtc2l6ZTogJHtpLnRhZ0xhYmVsRm9udFNpemV9OyBmaWxsOiAke2kudGFnTGFiZWxDb2xvcn07fQogIC50YWctbGFiZWwtYmtnIHsgZmlsbDogJHtpLnRhZ0xhYmVsQmFja2dyb3VuZH07IHN0cm9rZTogJHtpLnRhZ0xhYmVsQm9yZGVyfTsgfQogIC50YWctaG9sZSB7IGZpbGw6ICR7aS50ZXh0Q29sb3J9OyB9CgogIC5jb21taXQtbWVyZ2UgewogICAgc3Ryb2tlOiAke2kucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7aS5wcmltYXJ5Q29sb3J9OwogIH0KICAuY29tbWl0LXJldmVyc2UgewogICAgc3Ryb2tlOiAke2kucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7aS5wcmltYXJ5Q29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAzOwogIH0KICAuY29tbWl0LWhpZ2hsaWdodC1vdXRlciB7CiAgfQogIC5jb21taXQtaGlnaGxpZ2h0LWlubmVyIHsKICAgIHN0cm9rZTogJHtpLnByaW1hcnlDb2xvcn07CiAgICBmaWxsOiAke2kucHJpbWFyeUNvbG9yfTsKICB9CgogIC5hcnJvdyB7IHN0cm9rZS13aWR0aDogODsgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOyBmaWxsOiBub25lfQogIC5naXRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KYH19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIEgwdD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKFUsVHQsbnQsSXQpe2ZvcihudD1udHx8e30sSXQ9VS5sZW5ndGg7SXQtLTtudFtVW0l0XV09VHQpO3JldHVybiBudH0sYT1bNiw4LDEwLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDMwLDMyLDMzLDM1LDM3XSxmPVsxLDI1XSxwPVsxLDI2XSx3PVsxLDI3XSxtPVsxLDI4XSxiPVsxLDI5XSxFPVsxLDMwXSxfPVsxLDMxXSxBPVsxLDldLEk9WzEsMTBdLEI9WzEsMTFdLE49WzEsMTJdLFI9WzEsMTNdLHo9WzEsMTRdLFc9WzEsMTVdLGV0PVsxLDE2XSxzdD1bMSwxOF0sYXQ9WzEsMTldLGJ0PVsxLDIwXSxtdD1bMSwyMV0seXQ9WzEsMjJdLGZ0PVsxLDI0XSx1dD1bMSwzMl0sdnQ9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGdhbnR0OjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsU1BBQ0U6OCxzdGF0ZW1lbnQ6OSxOTDoxMCx3ZWVrZGF5OjExLHdlZWtkYXlfbW9uZGF5OjEyLHdlZWtkYXlfdHVlc2RheToxMyx3ZWVrZGF5X3dlZG5lc2RheToxNCx3ZWVrZGF5X3RodXJzZGF5OjE1LHdlZWtkYXlfZnJpZGF5OjE2LHdlZWtkYXlfc2F0dXJkYXk6MTcsd2Vla2RheV9zdW5kYXk6MTgsZGF0ZUZvcm1hdDoxOSxpbmNsdXNpdmVFbmREYXRlczoyMCx0b3BBeGlzOjIxLGF4aXNGb3JtYXQ6MjIsdGlja0ludGVydmFsOjIzLGV4Y2x1ZGVzOjI0LGluY2x1ZGVzOjI1LHRvZGF5TWFya2VyOjI2LHRpdGxlOjI3LGFjY190aXRsZToyOCxhY2NfdGl0bGVfdmFsdWU6MjksYWNjX2Rlc2NyOjMwLGFjY19kZXNjcl92YWx1ZTozMSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjMyLHNlY3Rpb246MzMsY2xpY2tTdGF0ZW1lbnQ6MzQsdGFza1R4dDozNSx0YXNrRGF0YTozNixjbGljazozNyxjYWxsYmFja25hbWU6MzgsY2FsbGJhY2thcmdzOjM5LGhyZWY6NDAsY2xpY2tTdGF0ZW1lbnREZWJ1Zzo0MSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiZ2FudHQiLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJOTCIsMTI6IndlZWtkYXlfbW9uZGF5IiwxMzoid2Vla2RheV90dWVzZGF5IiwxNDoid2Vla2RheV93ZWRuZXNkYXkiLDE1OiJ3ZWVrZGF5X3RodXJzZGF5IiwxNjoid2Vla2RheV9mcmlkYXkiLDE3OiJ3ZWVrZGF5X3NhdHVyZGF5IiwxODoid2Vla2RheV9zdW5kYXkiLDE5OiJkYXRlRm9ybWF0IiwyMDoiaW5jbHVzaXZlRW5kRGF0ZXMiLDIxOiJ0b3BBeGlzIiwyMjoiYXhpc0Zvcm1hdCIsMjM6InRpY2tJbnRlcnZhbCIsMjQ6ImV4Y2x1ZGVzIiwyNToiaW5jbHVkZXMiLDI2OiJ0b2RheU1hcmtlciIsMjc6InRpdGxlIiwyODoiYWNjX3RpdGxlIiwyOToiYWNjX3RpdGxlX3ZhbHVlIiwzMDoiYWNjX2Rlc2NyIiwzMToiYWNjX2Rlc2NyX3ZhbHVlIiwzMjoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzM6InNlY3Rpb24iLDM1OiJ0YXNrVHh0IiwzNjoidGFza0RhdGEiLDM3OiJjbGljayIsMzg6ImNhbGxiYWNrbmFtZSIsMzk6ImNhbGxiYWNrYXJncyIsNDA6ImhyZWYifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDJdLFszNCwyXSxbMzQsM10sWzM0LDNdLFszNCw0XSxbMzQsM10sWzM0LDRdLFszNCwyXSxbNDEsMl0sWzQxLDNdLFs0MSwzXSxbNDEsNF0sWzQxLDNdLFs0MSw0XSxbNDEsMl1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oVHQsbnQsSXQsT3QsQnQsRXQsWil7dmFyIEN0PUV0Lmxlbmd0aC0xO3N3aXRjaChCdCl7Y2FzZSAxOnJldHVybiBFdFtDdC0xXTtjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzpFdFtDdC0xXS5wdXNoKEV0W0N0XSksdGhpcy4kPUV0W0N0LTFdO2JyZWFrO2Nhc2UgNDpjYXNlIDU6dGhpcy4kPUV0W0N0XTticmVhaztjYXNlIDY6Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6T3Quc2V0V2Vla2RheSgibW9uZGF5Iik7YnJlYWs7Y2FzZSA5Ok90LnNldFdlZWtkYXkoInR1ZXNkYXkiKTticmVhaztjYXNlIDEwOk90LnNldFdlZWtkYXkoIndlZG5lc2RheSIpO2JyZWFrO2Nhc2UgMTE6T3Quc2V0V2Vla2RheSgidGh1cnNkYXkiKTticmVhaztjYXNlIDEyOk90LnNldFdlZWtkYXkoImZyaWRheSIpO2JyZWFrO2Nhc2UgMTM6T3Quc2V0V2Vla2RheSgic2F0dXJkYXkiKTticmVhaztjYXNlIDE0Ok90LnNldFdlZWtkYXkoInN1bmRheSIpO2JyZWFrO2Nhc2UgMTU6T3Quc2V0RGF0ZUZvcm1hdChFdFtDdF0uc3Vic3RyKDExKSksdGhpcy4kPUV0W0N0XS5zdWJzdHIoMTEpO2JyZWFrO2Nhc2UgMTY6T3QuZW5hYmxlSW5jbHVzaXZlRW5kRGF0ZXMoKSx0aGlzLiQ9RXRbQ3RdLnN1YnN0cigxOCk7YnJlYWs7Y2FzZSAxNzpPdC5Ub3BBeGlzKCksdGhpcy4kPUV0W0N0XS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxODpPdC5zZXRBeGlzRm9ybWF0KEV0W0N0XS5zdWJzdHIoMTEpKSx0aGlzLiQ9RXRbQ3RdLnN1YnN0cigxMSk7YnJlYWs7Y2FzZSAxOTpPdC5zZXRUaWNrSW50ZXJ2YWwoRXRbQ3RdLnN1YnN0cigxMykpLHRoaXMuJD1FdFtDdF0uc3Vic3RyKDEzKTticmVhaztjYXNlIDIwOk90LnNldEV4Y2x1ZGVzKEV0W0N0XS5zdWJzdHIoOSkpLHRoaXMuJD1FdFtDdF0uc3Vic3RyKDkpO2JyZWFrO2Nhc2UgMjE6T3Quc2V0SW5jbHVkZXMoRXRbQ3RdLnN1YnN0cig5KSksdGhpcy4kPUV0W0N0XS5zdWJzdHIoOSk7YnJlYWs7Y2FzZSAyMjpPdC5zZXRUb2RheU1hcmtlcihFdFtDdF0uc3Vic3RyKDEyKSksdGhpcy4kPUV0W0N0XS5zdWJzdHIoMTIpO2JyZWFrO2Nhc2UgMjQ6T3Quc2V0RGlhZ3JhbVRpdGxlKEV0W0N0XS5zdWJzdHIoNikpLHRoaXMuJD1FdFtDdF0uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgMjU6dGhpcy4kPUV0W0N0XS50cmltKCksT3Quc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDI2OmNhc2UgMjc6dGhpcy4kPUV0W0N0XS50cmltKCksT3Quc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDI4Ok90LmFkZFNlY3Rpb24oRXRbQ3RdLnN1YnN0cig4KSksdGhpcy4kPUV0W0N0XS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAzMDpPdC5hZGRUYXNrKEV0W0N0LTFdLEV0W0N0XSksdGhpcy4kPSJ0YXNrIjticmVhaztjYXNlIDMxOnRoaXMuJD1FdFtDdC0xXSxPdC5zZXRDbGlja0V2ZW50KEV0W0N0LTFdLEV0W0N0XSxudWxsKTticmVhaztjYXNlIDMyOnRoaXMuJD1FdFtDdC0yXSxPdC5zZXRDbGlja0V2ZW50KEV0W0N0LTJdLEV0W0N0LTFdLEV0W0N0XSk7YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9RXRbQ3QtMl0sT3Quc2V0Q2xpY2tFdmVudChFdFtDdC0yXSxFdFtDdC0xXSxudWxsKSxPdC5zZXRMaW5rKEV0W0N0LTJdLEV0W0N0XSk7YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9RXRbQ3QtM10sT3Quc2V0Q2xpY2tFdmVudChFdFtDdC0zXSxFdFtDdC0yXSxFdFtDdC0xXSksT3Quc2V0TGluayhFdFtDdC0zXSxFdFtDdF0pO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPUV0W0N0LTJdLE90LnNldENsaWNrRXZlbnQoRXRbQ3QtMl0sRXRbQ3RdLG51bGwpLE90LnNldExpbmsoRXRbQ3QtMl0sRXRbQ3QtMV0pO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPUV0W0N0LTNdLE90LnNldENsaWNrRXZlbnQoRXRbQ3QtM10sRXRbQ3QtMV0sRXRbQ3RdKSxPdC5zZXRMaW5rKEV0W0N0LTNdLEV0W0N0LTJdKTticmVhaztjYXNlIDM3OnRoaXMuJD1FdFtDdC0xXSxPdC5zZXRMaW5rKEV0W0N0LTFdLEV0W0N0XSk7YnJlYWs7Y2FzZSAzODpjYXNlIDQ0OnRoaXMuJD1FdFtDdC0xXSsiICIrRXRbQ3RdO2JyZWFrO2Nhc2UgMzk6Y2FzZSA0MDpjYXNlIDQyOnRoaXMuJD1FdFtDdC0yXSsiICIrRXRbQ3QtMV0rIiAiK0V0W0N0XTticmVhaztjYXNlIDQxOmNhc2UgNDM6dGhpcy4kPUV0W0N0LTNdKyIgIitFdFtDdC0yXSsiICIrRXRbQ3QtMV0rIiAiK0V0W0N0XTticmVha319LHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0saShhLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODpbMSw2XSw5OjcsMTA6WzEsOF0sMTE6MTcsMTI6ZiwxMzpwLDE0OncsMTU6bSwxNjpiLDE3OkUsMTg6XywxOTpBLDIwOkksMjE6QiwyMjpOLDIzOlIsMjQ6eiwyNTpXLDI2OmV0LDI3OnN0LDI4OmF0LDMwOmJ0LDMyOm10LDMzOnl0LDM0OjIzLDM1OmZ0LDM3OnV0fSxpKGEsWzIsN10sezE6WzIsMV19KSxpKGEsWzIsM10pLHs5OjMzLDExOjE3LDEyOmYsMTM6cCwxNDp3LDE1Om0sMTY6YiwxNzpFLDE4Ol8sMTk6QSwyMDpJLDIxOkIsMjI6TiwyMzpSLDI0OnosMjU6VywyNjpldCwyNzpzdCwyODphdCwzMDpidCwzMjptdCwzMzp5dCwzNDoyMywzNTpmdCwzNzp1dH0saShhLFsyLDVdKSxpKGEsWzIsNl0pLGkoYSxbMiwxNV0pLGkoYSxbMiwxNl0pLGkoYSxbMiwxN10pLGkoYSxbMiwxOF0pLGkoYSxbMiwxOV0pLGkoYSxbMiwyMF0pLGkoYSxbMiwyMV0pLGkoYSxbMiwyMl0pLGkoYSxbMiwyM10pLGkoYSxbMiwyNF0pLHsyOTpbMSwzNF19LHszMTpbMSwzNV19LGkoYSxbMiwyN10pLGkoYSxbMiwyOF0pLGkoYSxbMiwyOV0pLHszNjpbMSwzNl19LGkoYSxbMiw4XSksaShhLFsyLDldKSxpKGEsWzIsMTBdKSxpKGEsWzIsMTFdKSxpKGEsWzIsMTJdKSxpKGEsWzIsMTNdKSxpKGEsWzIsMTRdKSx7Mzg6WzEsMzddLDQwOlsxLDM4XX0saShhLFsyLDRdKSxpKGEsWzIsMjVdKSxpKGEsWzIsMjZdKSxpKGEsWzIsMzBdKSxpKGEsWzIsMzFdLHszOTpbMSwzOV0sNDA6WzEsNDBdfSksaShhLFsyLDM3XSx7Mzg6WzEsNDFdfSksaShhLFsyLDMyXSx7NDA6WzEsNDJdfSksaShhLFsyLDMzXSksaShhLFsyLDM1XSx7Mzk6WzEsNDNdfSksaShhLFsyLDM0XSksaShhLFsyLDM2XSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6ZnVuY3Rpb24oVHQsbnQpe2lmKG50LnJlY292ZXJhYmxlKXRoaXMudHJhY2UoVHQpO2Vsc2V7dmFyIEl0PW5ldyBFcnJvcihUdCk7dGhyb3cgSXQuaGFzaD1udCxJdH19LHBhcnNlOmZ1bmN0aW9uKFR0KXt2YXIgbnQ9dGhpcyxJdD1bMF0sT3Q9W10sQnQ9W251bGxdLEV0PVtdLFo9dGhpcy50YWJsZSxDdD0iIix4dD0wLEh0PTAsTGU9MixGdD0xLGduPUV0LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLFNlPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksbWU9e3l5Ont9fTtmb3IodmFyIFZlIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksVmUpJiYobWUueXlbVmVdPXRoaXMueXlbVmVdKTtTZS5zZXRJbnB1dChUdCxtZS55eSksbWUueXkubGV4ZXI9U2UsbWUueXkucGFyc2VyPXRoaXMsdHlwZW9mIFNlLnl5bGxvYz4idSImJihTZS55eWxsb2M9e30pO3ZhciBZZT1TZS55eWxsb2M7RXQucHVzaChZZSk7dmFyIGNlPVNlLm9wdGlvbnMmJlNlLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBtZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1tZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBrZSgpe3ZhciB3cztyZXR1cm4gd3M9T3QucG9wKCl8fFNlLmxleCgpfHxGdCx0eXBlb2Ygd3MhPSJudW1iZXIiJiYod3MgaW5zdGFuY2VvZiBBcnJheSYmKE90PXdzLHdzPU90LnBvcCgpKSx3cz1udC5zeW1ib2xzX1t3c118fHdzKSx3c31mb3IodmFyIHp0LHJlLHNlLFBlLHRlPXt9LE1lLGRlLG9uLG5pOzspe2lmKHJlPUl0W0l0Lmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3JlXT9zZT10aGlzLmRlZmF1bHRBY3Rpb25zW3JlXTooKHp0PT09bnVsbHx8dHlwZW9mIHp0PiJ1IikmJih6dD1rZSgpKSxzZT1aW3JlXSYmWltyZV1benRdKSx0eXBlb2Ygc2U+InUifHwhc2UubGVuZ3RofHwhc2VbMF0pe3ZhciBLcz0iIjtuaT1bXTtmb3IoTWUgaW4gWltyZV0pdGhpcy50ZXJtaW5hbHNfW01lXSYmTWU+TGUmJm5pLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tNZV0rIiciKTtTZS5zaG93UG9zaXRpb24/S3M9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoeHQrMSkrYDoKYCtTZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK25pLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19benRdfHx6dCkrIiciOktzPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHh0KzEpKyI6IFVuZXhwZWN0ZWQgIisoenQ9PUZ0PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3p0XXx8enQpKyInIiksdGhpcy5wYXJzZUVycm9yKEtzLHt0ZXh0OlNlLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t6dF18fHp0LGxpbmU6U2UueXlsaW5lbm8sbG9jOlllLGV4cGVjdGVkOm5pfSl9aWYoc2VbMF1pbnN0YW5jZW9mIEFycmF5JiZzZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3JlKyIsIHRva2VuOiAiK3p0KTtzd2l0Y2goc2VbMF0pe2Nhc2UgMTpJdC5wdXNoKHp0KSxCdC5wdXNoKFNlLnl5dGV4dCksRXQucHVzaChTZS55eWxsb2MpLEl0LnB1c2goc2VbMV0pLHp0PW51bGwsSHQ9U2UueXlsZW5nLEN0PVNlLnl5dGV4dCx4dD1TZS55eWxpbmVubyxZZT1TZS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKGRlPXRoaXMucHJvZHVjdGlvbnNfW3NlWzFdXVsxXSx0ZS4kPUJ0W0J0Lmxlbmd0aC1kZV0sdGUuXyQ9e2ZpcnN0X2xpbmU6RXRbRXQubGVuZ3RoLShkZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOkV0W0V0Lmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOkV0W0V0Lmxlbmd0aC0oZGV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46RXRbRXQubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxjZSYmKHRlLl8kLnJhbmdlPVtFdFtFdC5sZW5ndGgtKGRlfHwxKV0ucmFuZ2VbMF0sRXRbRXQubGVuZ3RoLTFdLnJhbmdlWzFdXSksUGU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHRlLFtDdCxIdCx4dCxtZS55eSxzZVsxXSxCdCxFdF0uY29uY2F0KGduKSksdHlwZW9mIFBlPCJ1IilyZXR1cm4gUGU7ZGUmJihJdD1JdC5zbGljZSgwLC0xKmRlKjIpLEJ0PUJ0LnNsaWNlKDAsLTEqZGUpLEV0PUV0LnNsaWNlKDAsLTEqZGUpKSxJdC5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3NlWzFdXVswXSksQnQucHVzaCh0ZS4kKSxFdC5wdXNoKHRlLl8kKSxvbj1aW0l0W0l0Lmxlbmd0aC0yXV1bSXRbSXQubGVuZ3RoLTFdXSxJdC5wdXNoKG9uKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sWD1mdW5jdGlvbigpe3ZhciBVPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKG50LEl0KXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKG50LEl0KTtlbHNlIHRocm93IG5ldyBFcnJvcihudCl9LHNldElucHV0OmZ1bmN0aW9uKFR0LG50KXtyZXR1cm4gdGhpcy55eT1udHx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9VHQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIFR0PXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1UdCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9VHQsdGhpcy5tYXRjaGVkKz1UdDt2YXIgbnQ9VHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBudD8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksVHR9LHVucHV0OmZ1bmN0aW9uKFR0KXt2YXIgbnQ9VHQubGVuZ3RoLEl0PVR0LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9VHQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLW50KSx0aGlzLm9mZnNldC09bnQ7dmFyIE90PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLEl0Lmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09SXQubGVuZ3RoLTEpO3ZhciBCdD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46SXQ/KEl0Lmxlbmd0aD09PU90Lmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrT3RbT3QubGVuZ3RoLUl0Lmxlbmd0aF0ubGVuZ3RoLUl0WzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tbnR9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bQnRbMF0sQnRbMF0rdGhpcy55eWxlbmctbnRdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihUdCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFR0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBUdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFR0Lmxlbmd0aD4yMD8iLi4uIjoiIikrVHQuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgVHQ9dGhpcy5tYXRjaDtyZXR1cm4gVHQubGVuZ3RoPDIwJiYoVHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVR0Lmxlbmd0aCkpLChUdC5zdWJzdHIoMCwyMCkrKFR0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgVHQ9dGhpcy5wYXN0SW5wdXQoKSxudD1uZXcgQXJyYXkoVHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gVHQrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK250KyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihUdCxudCl7dmFyIEl0LE90LEJ0O2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihCdD17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihCdC55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxPdD1UdFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksT3QmJih0aGlzLnl5bGluZW5vKz1PdC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpPdD9PdFtPdC5sZW5ndGgtMV0ubGVuZ3RoLU90W090Lmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK1R0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVR0WzBdLHRoaXMubWF0Y2grPVR0WzBdLHRoaXMubWF0Y2hlcz1UdCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShUdFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9VHRbMF0sSXQ9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsbnQsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksSXQpcmV0dXJuIEl0O2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBFdCBpbiBCdCl0aGlzW0V0XT1CdFtFdF07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgVHQsbnQsSXQsT3Q7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgQnQ9dGhpcy5fY3VycmVudFJ1bGVzKCksRXQ9MDtFdDxCdC5sZW5ndGg7RXQrKylpZihJdD10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW0J0W0V0XV0pLEl0JiYoIW50fHxJdFswXS5sZW5ndGg+bnRbMF0ubGVuZ3RoKSl7aWYobnQ9SXQsT3Q9RXQsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoVHQ9dGhpcy50ZXN0X21hdGNoKEl0LEJ0W0V0XSksVHQhPT0hMSlyZXR1cm4gVHQ7aWYodGhpcy5fYmFja3RyYWNrKXtudD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBudD8oVHQ9dGhpcy50ZXN0X21hdGNoKG50LEJ0W090XSksVHQhPT0hMT9UdDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIG50PXRoaXMubmV4dCgpO3JldHVybiBudHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24obnQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChudCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIG50PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIG50PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24obnQpe3JldHVybiBudD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKG50fHwwKSxudD49MD90aGlzLmNvbmRpdGlvblN0YWNrW250XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihudCl7dGhpcy5iZWdpbihudCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24obnQsSXQsT3QsQnQpe3N3aXRjaChPdCl7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLCJvcGVuX2RpcmVjdGl2ZSI7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwyODtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDM6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDMwO2Nhc2UgNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgNTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDc6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgODpicmVhaztjYXNlIDk6YnJlYWs7Y2FzZSAxMDpicmVhaztjYXNlIDExOnJldHVybiAxMDtjYXNlIDEyOmJyZWFrO2Nhc2UgMTM6YnJlYWs7Y2FzZSAxNDpicmVhaztjYXNlIDE1OnRoaXMuYmVnaW4oImhyZWYiKTticmVhaztjYXNlIDE2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE3OnJldHVybiA0MDtjYXNlIDE4OnRoaXMuYmVnaW4oImNhbGxiYWNrbmFtZSIpO2JyZWFrO2Nhc2UgMTk6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjA6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrYXJncyIpO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIDM4O2Nhc2UgMjI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjM6cmV0dXJuIDM5O2Nhc2UgMjQ6dGhpcy5iZWdpbigiY2xpY2siKTticmVhaztjYXNlIDI1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI2OnJldHVybiAzNztjYXNlIDI3OnJldHVybiA0O2Nhc2UgMjg6cmV0dXJuIDE5O2Nhc2UgMjk6cmV0dXJuIDIwO2Nhc2UgMzA6cmV0dXJuIDIxO2Nhc2UgMzE6cmV0dXJuIDIyO2Nhc2UgMzI6cmV0dXJuIDIzO2Nhc2UgMzM6cmV0dXJuIDI1O2Nhc2UgMzQ6cmV0dXJuIDI0O2Nhc2UgMzU6cmV0dXJuIDI2O2Nhc2UgMzY6cmV0dXJuIDEyO2Nhc2UgMzc6cmV0dXJuIDEzO2Nhc2UgMzg6cmV0dXJuIDE0O2Nhc2UgMzk6cmV0dXJuIDE1O2Nhc2UgNDA6cmV0dXJuIDE2O2Nhc2UgNDE6cmV0dXJuIDE3O2Nhc2UgNDI6cmV0dXJuIDE4O2Nhc2UgNDM6cmV0dXJuImRhdGUiO2Nhc2UgNDQ6cmV0dXJuIDI3O2Nhc2UgNDU6cmV0dXJuImFjY0Rlc2NyaXB0aW9uIjtjYXNlIDQ2OnJldHVybiAzMztjYXNlIDQ3OnJldHVybiAzNTtjYXNlIDQ4OnJldHVybiAzNjtjYXNlIDQ5OnJldHVybiI6IjtjYXNlIDUwOnJldHVybiA2O2Nhc2UgNTE6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86JSUoPyFceykqW15cbl0qKS9pLC9eKD86W15cfV0lJSpbXlxuXSopL2ksL14oPzolJSpbXlxuXSpbXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiVbXlxuXSopL2ksL14oPzpocmVmW1xzXStbIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/OmNhbGxbXHNdKykvaSwvXig/OlwoW1xzXSpcKSkvaSwvXig/OlwoKS9pLC9eKD86W14oXSopL2ksL14oPzpcKSkvaSwvXig/OlteKV0qKS9pLC9eKD86Y2xpY2tbXHNdKykvaSwvXig/Oltcc1xuXSkvaSwvXig/OlteXHNcbl0qKS9pLC9eKD86Z2FudHRcYikvaSwvXig/OmRhdGVGb3JtYXRcc1teI1xuO10rKS9pLC9eKD86aW5jbHVzaXZlRW5kRGF0ZXNcYikvaSwvXig/OnRvcEF4aXNcYikvaSwvXig/OmF4aXNGb3JtYXRcc1teI1xuO10rKS9pLC9eKD86dGlja0ludGVydmFsXHNbXiNcbjtdKykvaSwvXig/OmluY2x1ZGVzXHNbXiNcbjtdKykvaSwvXig/OmV4Y2x1ZGVzXHNbXiNcbjtdKykvaSwvXig/OnRvZGF5TWFya2VyXHNbXlxuO10rKS9pLC9eKD86d2Vla2RheVxzK21vbmRheVxiKS9pLC9eKD86d2Vla2RheVxzK3R1ZXNkYXlcYikvaSwvXig/OndlZWtkYXlccyt3ZWRuZXNkYXlcYikvaSwvXig/OndlZWtkYXlccyt0aHVyc2RheVxiKS9pLC9eKD86d2Vla2RheVxzK2ZyaWRheVxiKS9pLC9eKD86d2Vla2RheVxzK3NhdHVyZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrc3VuZGF5XGIpL2ksL14oPzpcZFxkXGRcZC1cZFxkLVxkXGRcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OmFjY0Rlc2NyaXB0aW9uXHNbXiNcbjtdKykvaSwvXig/OnNlY3Rpb25cc1teIzpcbjtdKykvaSwvXig/OlteIzpcbjtdKykvaSwvXig/OjpbXiNcbjtdKykvaSwvXig/OjopL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzYsN10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls0XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzJdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2thcmdzOntydWxlczpbMjIsMjNdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tuYW1lOntydWxlczpbMTksMjAsMjFdLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzE2LDE3XSxpbmNsdXNpdmU6ITF9LGNsaWNrOntydWxlczpbMjUsMjZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwzLDUsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE4LDI0LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIFV9KCk7dnQubGV4ZXI9WDtmdW5jdGlvbiBwdCgpe3RoaXMueXk9e319cmV0dXJuIHB0LnByb3RvdHlwZT12dCx2dC5QYXJzZXI9cHQsbmV3IHB0fSgpO0gwdC5wYXJzZXI9SDB0O2NvbnN0IG9xZT1IMHQ7dmFyIEdCdD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGksYSl7KGZ1bmN0aW9uKGYscCl7aS5leHBvcnRzPXAoKX0pKGIwLGZ1bmN0aW9uKCl7dmFyIGY9ImRheSI7cmV0dXJuIGZ1bmN0aW9uKHAsdyxtKXt2YXIgYj1mdW5jdGlvbihBKXtyZXR1cm4gQS5hZGQoNC1BLmlzb1dlZWtkYXkoKSxmKX0sRT13LnByb3RvdHlwZTtFLmlzb1dlZWtZZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIGIodGhpcykueWVhcigpfSxFLmlzb1dlZWs9ZnVuY3Rpb24oQSl7aWYoIXRoaXMuJHV0aWxzKCkudShBKSlyZXR1cm4gdGhpcy5hZGQoNyooQS10aGlzLmlzb1dlZWsoKSksZik7dmFyIEksQixOLFIsej1iKHRoaXMpLFc9KEk9dGhpcy5pc29XZWVrWWVhcigpLEI9dGhpcy4kdSxOPShCP20udXRjOm0pKCkueWVhcihJKS5zdGFydE9mKCJ5ZWFyIiksUj00LU4uaXNvV2Vla2RheSgpLE4uaXNvV2Vla2RheSgpPjQmJihSKz03KSxOLmFkZChSLGYpKTtyZXR1cm4gei5kaWZmKFcsIndlZWsiKSsxfSxFLmlzb1dlZWtkYXk9ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuJHV0aWxzKCkudShBKT90aGlzLmRheSgpfHw3OnRoaXMuZGF5KHRoaXMuZGF5KCklNz9BOkEtNyl9O3ZhciBfPUUuc3RhcnRPZjtFLnN0YXJ0T2Y9ZnVuY3Rpb24oQSxJKXt2YXIgQj10aGlzLiR1dGlscygpLE49ISFCLnUoSSl8fEk7cmV0dXJuIEIucChBKT09PSJpc293ZWVrIj9OP3RoaXMuZGF0ZSh0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkpLnN0YXJ0T2YoImRheSIpOnRoaXMuZGF0ZSh0aGlzLmRhdGUoKS0xLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSs3KS5lbmRPZigiZGF5Iik6Xy5iaW5kKHRoaXMpKEEsSSl9fX0pfSkoR0J0KTt2YXIgY3FlPUdCdC5leHBvcnRzO2NvbnN0IHVxZT1HNyhjcWUpO3ZhciBVQnQ9e2V4cG9ydHM6e319OyhmdW5jdGlvbihpLGEpeyhmdW5jdGlvbihmLHApe2kuZXhwb3J0cz1wKCl9KShiMCxmdW5jdGlvbigpe3ZhciBmPXtMVFM6Img6bW06c3MgQSIsTFQ6Img6bW0gQSIsTDoiTU0vREQvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBIn0scD0vKFxbW15bXSpcXSl8KFstXzovLiwoKVxzXSspfChBfGF8WVlZWXxZWT98TU0/TT9NP3xEb3xERD98aGg/fEhIP3xtbT98c3M/fFN7MSwzfXx6fFpaPykvZyx3PS9cZFxkLyxtPS9cZFxkPy8sYj0vXGQqW14tXzovLCgpXHNcZF0rLyxFPXt9LF89ZnVuY3Rpb24oVyl7cmV0dXJuKFc9K1cpKyhXPjY4PzE5MDA6MmUzKX0sQT1mdW5jdGlvbihXKXtyZXR1cm4gZnVuY3Rpb24oZXQpe3RoaXNbV109K2V0fX0sST1bL1srLV1cZFxkOj8oXGRcZCk/fFovLGZ1bmN0aW9uKFcpeyh0aGlzLnpvbmV8fCh0aGlzLnpvbmU9e30pKS5vZmZzZXQ9ZnVuY3Rpb24oZXQpe2lmKCFldHx8ZXQ9PT0iWiIpcmV0dXJuIDA7dmFyIHN0PWV0Lm1hdGNoKC8oWystXXxcZFxkKS9nKSxhdD02MCpzdFsxXSsoK3N0WzJdfHwwKTtyZXR1cm4gYXQ9PT0wPzA6c3RbMF09PT0iKyI/LWF0OmF0fShXKX1dLEI9ZnVuY3Rpb24oVyl7dmFyIGV0PUVbV107cmV0dXJuIGV0JiYoZXQuaW5kZXhPZj9ldDpldC5zLmNvbmNhdChldC5mKSl9LE49ZnVuY3Rpb24oVyxldCl7dmFyIHN0LGF0PUUubWVyaWRpZW07aWYoYXQpe2Zvcih2YXIgYnQ9MTtidDw9MjQ7YnQrPTEpaWYoVy5pbmRleE9mKGF0KGJ0LDAsZXQpKT4tMSl7c3Q9YnQ+MTI7YnJlYWt9fWVsc2Ugc3Q9Vz09PShldD8icG0iOiJQTSIpO3JldHVybiBzdH0sUj17QTpbYixmdW5jdGlvbihXKXt0aGlzLmFmdGVybm9vbj1OKFcsITEpfV0sYTpbYixmdW5jdGlvbihXKXt0aGlzLmFmdGVybm9vbj1OKFcsITApfV0sUzpbL1xkLyxmdW5jdGlvbihXKXt0aGlzLm1pbGxpc2Vjb25kcz0xMDAqK1d9XSxTUzpbdyxmdW5jdGlvbihXKXt0aGlzLm1pbGxpc2Vjb25kcz0xMCorV31dLFNTUzpbL1xkezN9LyxmdW5jdGlvbihXKXt0aGlzLm1pbGxpc2Vjb25kcz0rV31dLHM6W20sQSgic2Vjb25kcyIpXSxzczpbbSxBKCJzZWNvbmRzIildLG06W20sQSgibWludXRlcyIpXSxtbTpbbSxBKCJtaW51dGVzIildLEg6W20sQSgiaG91cnMiKV0saDpbbSxBKCJob3VycyIpXSxISDpbbSxBKCJob3VycyIpXSxoaDpbbSxBKCJob3VycyIpXSxEOlttLEEoImRheSIpXSxERDpbdyxBKCJkYXkiKV0sRG86W2IsZnVuY3Rpb24oVyl7dmFyIGV0PUUub3JkaW5hbCxzdD1XLm1hdGNoKC9cZCsvKTtpZih0aGlzLmRheT1zdFswXSxldClmb3IodmFyIGF0PTE7YXQ8PTMxO2F0Kz0xKWV0KGF0KS5yZXBsYWNlKC9cW3xcXS9nLCIiKT09PVcmJih0aGlzLmRheT1hdCl9XSxNOlttLEEoIm1vbnRoIildLE1NOlt3LEEoIm1vbnRoIildLE1NTTpbYixmdW5jdGlvbihXKXt2YXIgZXQ9QigibW9udGhzIiksc3Q9KEIoIm1vbnRoc1Nob3J0Iil8fGV0Lm1hcChmdW5jdGlvbihhdCl7cmV0dXJuIGF0LnNsaWNlKDAsMyl9KSkuaW5kZXhPZihXKSsxO2lmKHN0PDEpdGhyb3cgbmV3IEVycm9yO3RoaXMubW9udGg9c3QlMTJ8fHN0fV0sTU1NTTpbYixmdW5jdGlvbihXKXt2YXIgZXQ9QigibW9udGhzIikuaW5kZXhPZihXKSsxO2lmKGV0PDEpdGhyb3cgbmV3IEVycm9yO3RoaXMubW9udGg9ZXQlMTJ8fGV0fV0sWTpbL1srLV0/XGQrLyxBKCJ5ZWFyIildLFlZOlt3LGZ1bmN0aW9uKFcpe3RoaXMueWVhcj1fKFcpfV0sWVlZWTpbL1xkezR9LyxBKCJ5ZWFyIildLFo6SSxaWjpJfTtmdW5jdGlvbiB6KFcpe3ZhciBldCxzdDtldD1XLHN0PUUmJkUuZm9ybWF0cztmb3IodmFyIGF0PShXPWV0LnJlcGxhY2UoLyhcW1teXF1dK10pfChMVFM/fGx7MSw0fXxMezEsNH0pL2csZnVuY3Rpb24oWCxwdCxVKXt2YXIgVHQ9VSYmVS50b1VwcGVyQ2FzZSgpO3JldHVybiBwdHx8c3RbVV18fGZbVV18fHN0W1R0XS5yZXBsYWNlKC8oXFtbXlxdXStdKXwoTU1NTXxNTXxERHxkZGRkKS9nLGZ1bmN0aW9uKG50LEl0LE90KXtyZXR1cm4gSXR8fE90LnNsaWNlKDEpfSl9KSkubWF0Y2gocCksYnQ9YXQubGVuZ3RoLG10PTA7bXQ8YnQ7bXQrPTEpe3ZhciB5dD1hdFttdF0sZnQ9Ult5dF0sdXQ9ZnQmJmZ0WzBdLHZ0PWZ0JiZmdFsxXTthdFttdF09dnQ/e3JlZ2V4OnV0LHBhcnNlcjp2dH06eXQucmVwbGFjZSgvXlxbfFxdJC9nLCIiKX1yZXR1cm4gZnVuY3Rpb24oWCl7Zm9yKHZhciBwdD17fSxVPTAsVHQ9MDtVPGJ0O1UrPTEpe3ZhciBudD1hdFtVXTtpZih0eXBlb2YgbnQ9PSJzdHJpbmciKVR0Kz1udC5sZW5ndGg7ZWxzZXt2YXIgSXQ9bnQucmVnZXgsT3Q9bnQucGFyc2VyLEJ0PVguc2xpY2UoVHQpLEV0PUl0LmV4ZWMoQnQpWzBdO090LmNhbGwocHQsRXQpLFg9WC5yZXBsYWNlKEV0LCIiKX19cmV0dXJuIGZ1bmN0aW9uKFope3ZhciBDdD1aLmFmdGVybm9vbjtpZihDdCE9PXZvaWQgMCl7dmFyIHh0PVouaG91cnM7Q3Q/eHQ8MTImJihaLmhvdXJzKz0xMik6eHQ9PT0xMiYmKFouaG91cnM9MCksZGVsZXRlIFouYWZ0ZXJub29ufX0ocHQpLHB0fX1yZXR1cm4gZnVuY3Rpb24oVyxldCxzdCl7c3QucC5jdXN0b21QYXJzZUZvcm1hdD0hMCxXJiZXLnBhcnNlVHdvRGlnaXRZZWFyJiYoXz1XLnBhcnNlVHdvRGlnaXRZZWFyKTt2YXIgYXQ9ZXQucHJvdG90eXBlLGJ0PWF0LnBhcnNlO2F0LnBhcnNlPWZ1bmN0aW9uKG10KXt2YXIgeXQ9bXQuZGF0ZSxmdD1tdC51dGMsdXQ9bXQuYXJnczt0aGlzLiR1PWZ0O3ZhciB2dD11dFsxXTtpZih0eXBlb2YgdnQ9PSJzdHJpbmciKXt2YXIgWD11dFsyXT09PSEwLHB0PXV0WzNdPT09ITAsVT1YfHxwdCxUdD11dFsyXTtwdCYmKFR0PXV0WzJdKSxFPXRoaXMuJGxvY2FsZSgpLCFYJiZUdCYmKEU9c3QuTHNbVHRdKSx0aGlzLiRkPWZ1bmN0aW9uKEJ0LEV0LFope3RyeXtpZihbIngiLCJYIl0uaW5kZXhPZihFdCk+LTEpcmV0dXJuIG5ldyBEYXRlKChFdD09PSJYIj8xZTM6MSkqQnQpO3ZhciBDdD16KEV0KShCdCkseHQ9Q3QueWVhcixIdD1DdC5tb250aCxMZT1DdC5kYXksRnQ9Q3QuaG91cnMsZ249Q3QubWludXRlcyxTZT1DdC5zZWNvbmRzLG1lPUN0Lm1pbGxpc2Vjb25kcyxWZT1DdC56b25lLFllPW5ldyBEYXRlLGNlPUxlfHwoeHR8fEh0PzE6WWUuZ2V0RGF0ZSgpKSxrZT14dHx8WWUuZ2V0RnVsbFllYXIoKSx6dD0wO3h0JiYhSHR8fCh6dD1IdD4wP0h0LTE6WWUuZ2V0TW9udGgoKSk7dmFyIHJlPUZ0fHwwLHNlPWdufHwwLFBlPVNlfHwwLHRlPW1lfHwwO3JldHVybiBWZT9uZXcgRGF0ZShEYXRlLlVUQyhrZSx6dCxjZSxyZSxzZSxQZSx0ZSs2MCpWZS5vZmZzZXQqMWUzKSk6Wj9uZXcgRGF0ZShEYXRlLlVUQyhrZSx6dCxjZSxyZSxzZSxQZSx0ZSkpOm5ldyBEYXRlKGtlLHp0LGNlLHJlLHNlLFBlLHRlKX1jYXRjaHtyZXR1cm4gbmV3IERhdGUoIiIpfX0oeXQsdnQsZnQpLHRoaXMuaW5pdCgpLFR0JiZUdCE9PSEwJiYodGhpcy4kTD10aGlzLmxvY2FsZShUdCkuJEwpLFUmJnl0IT10aGlzLmZvcm1hdCh2dCkmJih0aGlzLiRkPW5ldyBEYXRlKCIiKSksRT17fX1lbHNlIGlmKHZ0IGluc3RhbmNlb2YgQXJyYXkpZm9yKHZhciBudD12dC5sZW5ndGgsSXQ9MTtJdDw9bnQ7SXQrPTEpe3V0WzFdPXZ0W0l0LTFdO3ZhciBPdD1zdC5hcHBseSh0aGlzLHV0KTtpZihPdC5pc1ZhbGlkKCkpe3RoaXMuJGQ9T3QuJGQsdGhpcy4kTD1PdC4kTCx0aGlzLmluaXQoKTticmVha31JdD09PW50JiYodGhpcy4kZD1uZXcgRGF0ZSgiIikpfWVsc2UgYnQuY2FsbCh0aGlzLG10KX19fSl9KShVQnQpO3ZhciBscWU9VUJ0LmV4cG9ydHM7Y29uc3QgaHFlPUc3KGxxZSk7dmFyIFdCdD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGksYSl7KGZ1bmN0aW9uKGYscCl7aS5leHBvcnRzPXAoKX0pKGIwLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGYscCl7dmFyIHc9cC5wcm90b3R5cGUsbT13LmZvcm1hdDt3LmZvcm1hdD1mdW5jdGlvbihiKXt2YXIgRT10aGlzLF89dGhpcy4kbG9jYWxlKCk7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBtLmJpbmQodGhpcykoYik7dmFyIEE9dGhpcy4kdXRpbHMoKSxJPShifHwiWVlZWS1NTS1ERFRISDptbTpzc1oiKS5yZXBsYWNlKC9cWyhbXlxdXSspXXxRfHdvfHd3fHd8V1d8V3x6enp8enxnZ2dnfEdHR0d8RG98WHx4fGt7MSwyfXxTL2csZnVuY3Rpb24oQil7c3dpdGNoKEIpe2Nhc2UiUSI6cmV0dXJuIE1hdGguY2VpbCgoRS4kTSsxKS8zKTtjYXNlIkRvIjpyZXR1cm4gXy5vcmRpbmFsKEUuJEQpO2Nhc2UiZ2dnZyI6cmV0dXJuIEUud2Vla1llYXIoKTtjYXNlIkdHR0ciOnJldHVybiBFLmlzb1dlZWtZZWFyKCk7Y2FzZSJ3byI6cmV0dXJuIF8ub3JkaW5hbChFLndlZWsoKSwiVyIpO2Nhc2UidyI6Y2FzZSJ3dyI6cmV0dXJuIEEucyhFLndlZWsoKSxCPT09InciPzE6MiwiMCIpO2Nhc2UiVyI6Y2FzZSJXVyI6cmV0dXJuIEEucyhFLmlzb1dlZWsoKSxCPT09IlciPzE6MiwiMCIpO2Nhc2UiayI6Y2FzZSJrayI6cmV0dXJuIEEucyhTdHJpbmcoRS4kSD09PTA/MjQ6RS4kSCksQj09PSJrIj8xOjIsIjAiKTtjYXNlIlgiOnJldHVybiBNYXRoLmZsb29yKEUuJGQuZ2V0VGltZSgpLzFlMyk7Y2FzZSJ4IjpyZXR1cm4gRS4kZC5nZXRUaW1lKCk7Y2FzZSJ6IjpyZXR1cm4iWyIrRS5vZmZzZXROYW1lKCkrIl0iO2Nhc2Uienp6IjpyZXR1cm4iWyIrRS5vZmZzZXROYW1lKCJsb25nIikrIl0iO2RlZmF1bHQ6cmV0dXJuIEJ9fSk7cmV0dXJuIG0uYmluZCh0aGlzKShJKX19fSl9KShXQnQpO3ZhciBmcWU9V0J0LmV4cG9ydHM7Y29uc3QgZHFlPUc3KGZxZSk7dzAuZXh0ZW5kKHVxZSksdzAuZXh0ZW5kKGhxZSksdzAuZXh0ZW5kKGRxZSk7bGV0IHgzPSIiLFYwdD0iIixHMHQsVTB0PSIiLFBGPVtdLEZGPVtdLFcwdD17fSxZMHQ9W10sSVk9W10sdUw9IiIsSzB0PSIiO2NvbnN0IFlCdD1bImFjdGl2ZSIsImRvbmUiLCJjcml0IiwibWlsZXN0b25lIl07bGV0IFgwdD1bXSxORj0hMSxRMHQ9ITEsWjB0PSJzdW5kYXkiLEowdD0wO2NvbnN0IGdxZT1mdW5jdGlvbigpe1kwdD1bXSxJWT1bXSx1TD0iIixYMHQ9W10sT1k9MCxlZ3Q9dm9pZCAwLFBZPXZvaWQgMCxoMT1bXSx4Mz0iIixWMHQ9IiIsSzB0PSIiLEcwdD12b2lkIDAsVTB0PSIiLFBGPVtdLEZGPVtdLE5GPSExLFEwdD0hMSxKMHQ9MCxXMHQ9e30saGcoKSxaMHQ9InN1bmRheSJ9LHBxZT1mdW5jdGlvbihpKXtWMHQ9aX0sYnFlPWZ1bmN0aW9uKCl7cmV0dXJuIFYwdH0sd3FlPWZ1bmN0aW9uKGkpe0cwdD1pfSx2cWU9ZnVuY3Rpb24oKXtyZXR1cm4gRzB0fSxtcWU9ZnVuY3Rpb24oaSl7VTB0PWl9LHlxZT1mdW5jdGlvbigpe3JldHVybiBVMHR9LHhxZT1mdW5jdGlvbihpKXt4Mz1pfSxrcWU9ZnVuY3Rpb24oKXtORj0hMH0sRXFlPWZ1bmN0aW9uKCl7cmV0dXJuIE5GfSxUcWU9ZnVuY3Rpb24oKXtRMHQ9ITB9LENxZT1mdW5jdGlvbigpe3JldHVybiBRMHR9LF9xZT1mdW5jdGlvbihpKXtLMHQ9aX0sU3FlPWZ1bmN0aW9uKCl7cmV0dXJuIEswdH0sQXFlPWZ1bmN0aW9uKCl7cmV0dXJuIHgzfSxMcWU9ZnVuY3Rpb24oaSl7UEY9aS50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0sTXFlPWZ1bmN0aW9uKCl7cmV0dXJuIFBGfSxEcWU9ZnVuY3Rpb24oaSl7RkY9aS50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0sSXFlPWZ1bmN0aW9uKCl7cmV0dXJuIEZGfSxPcWU9ZnVuY3Rpb24oKXtyZXR1cm4gVzB0fSxQcWU9ZnVuY3Rpb24oaSl7dUw9aSxZMHQucHVzaChpKX0sRnFlPWZ1bmN0aW9uKCl7cmV0dXJuIFkwdH0sTnFlPWZ1bmN0aW9uKCl7bGV0IGk9dFJ0KCk7Y29uc3QgYT0xMDtsZXQgZj0wO2Zvcig7IWkmJmY8YTspaT10UnQoKSxmKys7cmV0dXJuIElZPWgxLElZfSxLQnQ9ZnVuY3Rpb24oaSxhLGYscCl7cmV0dXJuIHAuaW5jbHVkZXMoaS5mb3JtYXQoYS50cmltKCkpKT8hMTppLmlzb1dlZWtkYXkoKT49NiYmZi5pbmNsdWRlcygid2Vla2VuZHMiKXx8Zi5pbmNsdWRlcyhpLmZvcm1hdCgiZGRkZCIpLnRvTG93ZXJDYXNlKCkpPyEwOmYuaW5jbHVkZXMoaS5mb3JtYXQoYS50cmltKCkpKX0sQnFlPWZ1bmN0aW9uKGkpe1owdD1pfSxScWU9ZnVuY3Rpb24oKXtyZXR1cm4gWjB0fSxYQnQ9ZnVuY3Rpb24oaSxhLGYscCl7aWYoIWYubGVuZ3RofHxpLm1hbnVhbEVuZFRpbWUpcmV0dXJuO2xldCB3O2kuc3RhcnRUaW1lIGluc3RhbmNlb2YgRGF0ZT93PXcwKGkuc3RhcnRUaW1lKTp3PXcwKGkuc3RhcnRUaW1lLGEsITApLHc9dy5hZGQoMSwiZCIpO2xldCBtO2kuZW5kVGltZSBpbnN0YW5jZW9mIERhdGU/bT13MChpLmVuZFRpbWUpOm09dzAoaS5lbmRUaW1lLGEsITApO2NvbnN0W2IsRV09anFlKHcsbSxhLGYscCk7aS5lbmRUaW1lPWIudG9EYXRlKCksaS5yZW5kZXJFbmRUaW1lPUV9LGpxZT1mdW5jdGlvbihpLGEsZixwLHcpe2xldCBtPSExLGI9bnVsbDtmb3IoO2k8PWE7KW18fChiPWEudG9EYXRlKCkpLG09S0J0KGksZixwLHcpLG0mJihhPWEuYWRkKDEsImQiKSksaT1pLmFkZCgxLCJkIik7cmV0dXJuW2EsYl19LHRndD1mdW5jdGlvbihpLGEsZil7Zj1mLnRyaW0oKTtjb25zdCB3PS9eYWZ0ZXJccysoW1xkXHctIF0rKS8uZXhlYyhmLnRyaW0oKSk7aWYodyE9PW51bGwpe2xldCBiPW51bGw7aWYod1sxXS5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oRSl7bGV0IF89aEwoRSk7XyE9PXZvaWQgMCYmKGI/Xy5lbmRUaW1lPmIuZW5kVGltZSYmKGI9Xyk6Yj1fKX0pLGIpcmV0dXJuIGIuZW5kVGltZTt7Y29uc3QgRT1uZXcgRGF0ZTtyZXR1cm4gRS5zZXRIb3VycygwLDAsMCwwKSxFfX1sZXQgbT13MChmLGEudHJpbSgpLCEwKTtpZihtLmlzVmFsaWQoKSlyZXR1cm4gbS50b0RhdGUoKTt7VXQuZGVidWcoIkludmFsaWQgZGF0ZToiK2YpLFV0LmRlYnVnKCJXaXRoIGRhdGUgZm9ybWF0OiIrYS50cmltKCkpO2NvbnN0IGI9bmV3IERhdGUoZik7aWYoYj09PXZvaWQgMHx8aXNOYU4oYi5nZXRUaW1lKCkpfHxiLmdldEZ1bGxZZWFyKCk8LTFlNHx8Yi5nZXRGdWxsWWVhcigpPjFlNCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGF0ZToiK2YpO3JldHVybiBifX0sUUJ0PWZ1bmN0aW9uKGkpe2NvbnN0IGE9L14oXGQrKD86XC5cZCspPykoW01kaG1zd3ldfG1zKSQvLmV4ZWMoaS50cmltKCkpO3JldHVybiBhIT09bnVsbD9bTnVtYmVyLnBhcnNlRmxvYXQoYVsxXSksYVsyXV06W05hTiwibXMiXX0sWkJ0PWZ1bmN0aW9uKGksYSxmLHA9ITEpe2Y9Zi50cmltKCk7bGV0IHc9dzAoZixhLnRyaW0oKSwhMCk7aWYody5pc1ZhbGlkKCkpcmV0dXJuIHAmJih3PXcuYWRkKDEsImQiKSksdy50b0RhdGUoKTtsZXQgbT13MChpKTtjb25zdFtiLEVdPVFCdChmKTtpZighTnVtYmVyLmlzTmFOKGIpKXtjb25zdCBfPW0uYWRkKGIsRSk7Xy5pc1ZhbGlkKCkmJihtPV8pfXJldHVybiBtLnRvRGF0ZSgpfTtsZXQgT1k9MDtjb25zdCBsTD1mdW5jdGlvbihpKXtyZXR1cm4gaT09PXZvaWQgMD8oT1k9T1krMSwidGFzayIrT1kpOml9LCRxZT1mdW5jdGlvbihpLGEpe2xldCBmO2Euc3Vic3RyKDAsMSk9PT0iOiI/Zj1hLnN1YnN0cigxLGEubGVuZ3RoKTpmPWE7Y29uc3QgcD1mLnNwbGl0KCIsIiksdz17fTtyUnQocCx3LFlCdCk7Zm9yKGxldCBiPTA7YjxwLmxlbmd0aDtiKyspcFtiXT1wW2JdLnRyaW0oKTtsZXQgbT0iIjtzd2l0Y2gocC5sZW5ndGgpe2Nhc2UgMTp3LmlkPWxMKCksdy5zdGFydFRpbWU9aS5lbmRUaW1lLG09cFswXTticmVhaztjYXNlIDI6dy5pZD1sTCgpLHcuc3RhcnRUaW1lPXRndCh2b2lkIDAseDMscFswXSksbT1wWzFdO2JyZWFrO2Nhc2UgMzp3LmlkPWxMKHBbMF0pLHcuc3RhcnRUaW1lPXRndCh2b2lkIDAseDMscFsxXSksbT1wWzJdO2JyZWFrfXJldHVybiBtJiYody5lbmRUaW1lPVpCdCh3LnN0YXJ0VGltZSx4MyxtLE5GKSx3Lm1hbnVhbEVuZFRpbWU9dzAobSwiWVlZWS1NTS1ERCIsITApLmlzVmFsaWQoKSxYQnQodyx4MyxGRixQRikpLHd9LHpxZT1mdW5jdGlvbihpLGEpe2xldCBmO2Euc3Vic3RyKDAsMSk9PT0iOiI/Zj1hLnN1YnN0cigxLGEubGVuZ3RoKTpmPWE7Y29uc3QgcD1mLnNwbGl0KCIsIiksdz17fTtyUnQocCx3LFlCdCk7Zm9yKGxldCBtPTA7bTxwLmxlbmd0aDttKyspcFttXT1wW21dLnRyaW0oKTtzd2l0Y2gocC5sZW5ndGgpe2Nhc2UgMTp3LmlkPWxMKCksdy5zdGFydFRpbWU9e3R5cGU6InByZXZUYXNrRW5kIixpZDppfSx3LmVuZFRpbWU9e2RhdGE6cFswXX07YnJlYWs7Y2FzZSAyOncuaWQ9bEwoKSx3LnN0YXJ0VGltZT17dHlwZToiZ2V0U3RhcnREYXRlIixzdGFydERhdGE6cFswXX0sdy5lbmRUaW1lPXtkYXRhOnBbMV19O2JyZWFrO2Nhc2UgMzp3LmlkPWxMKHBbMF0pLHcuc3RhcnRUaW1lPXt0eXBlOiJnZXRTdGFydERhdGUiLHN0YXJ0RGF0YTpwWzFdfSx3LmVuZFRpbWU9e2RhdGE6cFsyXX07YnJlYWt9cmV0dXJuIHd9O2xldCBlZ3QsUFksaDE9W107Y29uc3QgSkJ0PXt9LHFxZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9e3NlY3Rpb246dUwsdHlwZTp1TCxwcm9jZXNzZWQ6ITEsbWFudWFsRW5kVGltZTohMSxyZW5kZXJFbmRUaW1lOm51bGwscmF3OntkYXRhOmF9LHRhc2s6aSxjbGFzc2VzOltdfSxwPXpxZShQWSxhKTtmLnJhdy5zdGFydFRpbWU9cC5zdGFydFRpbWUsZi5yYXcuZW5kVGltZT1wLmVuZFRpbWUsZi5pZD1wLmlkLGYucHJldlRhc2tJZD1QWSxmLmFjdGl2ZT1wLmFjdGl2ZSxmLmRvbmU9cC5kb25lLGYuY3JpdD1wLmNyaXQsZi5taWxlc3RvbmU9cC5taWxlc3RvbmUsZi5vcmRlcj1KMHQsSjB0Kys7Y29uc3Qgdz1oMS5wdXNoKGYpO1BZPWYuaWQsSkJ0W2YuaWRdPXctMX0saEw9ZnVuY3Rpb24oaSl7Y29uc3QgYT1KQnRbaV07cmV0dXJuIGgxW2FdfSxIcWU9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPXtzZWN0aW9uOnVMLHR5cGU6dUwsZGVzY3JpcHRpb246aSx0YXNrOmksY2xhc3NlczpbXX0scD0kcWUoZWd0LGEpO2Yuc3RhcnRUaW1lPXAuc3RhcnRUaW1lLGYuZW5kVGltZT1wLmVuZFRpbWUsZi5pZD1wLmlkLGYuYWN0aXZlPXAuYWN0aXZlLGYuZG9uZT1wLmRvbmUsZi5jcml0PXAuY3JpdCxmLm1pbGVzdG9uZT1wLm1pbGVzdG9uZSxlZ3Q9ZixJWS5wdXNoKGYpfSx0UnQ9ZnVuY3Rpb24oKXtjb25zdCBpPWZ1bmN0aW9uKGYpe2NvbnN0IHA9aDFbZl07bGV0IHc9IiI7c3dpdGNoKGgxW2ZdLnJhdy5zdGFydFRpbWUudHlwZSl7Y2FzZSJwcmV2VGFza0VuZCI6e2NvbnN0IG09aEwocC5wcmV2VGFza0lkKTtwLnN0YXJ0VGltZT1tLmVuZFRpbWU7YnJlYWt9Y2FzZSJnZXRTdGFydERhdGUiOnc9dGd0KHZvaWQgMCx4MyxoMVtmXS5yYXcuc3RhcnRUaW1lLnN0YXJ0RGF0YSksdyYmKGgxW2ZdLnN0YXJ0VGltZT13KTticmVha31yZXR1cm4gaDFbZl0uc3RhcnRUaW1lJiYoaDFbZl0uZW5kVGltZT1aQnQoaDFbZl0uc3RhcnRUaW1lLHgzLGgxW2ZdLnJhdy5lbmRUaW1lLmRhdGEsTkYpLGgxW2ZdLmVuZFRpbWUmJihoMVtmXS5wcm9jZXNzZWQ9ITAsaDFbZl0ubWFudWFsRW5kVGltZT13MChoMVtmXS5yYXcuZW5kVGltZS5kYXRhLCJZWVlZLU1NLUREIiwhMCkuaXNWYWxpZCgpLFhCdChoMVtmXSx4MyxGRixQRikpKSxoMVtmXS5wcm9jZXNzZWR9O2xldCBhPSEwO2Zvcihjb25zdFtmLHBdb2YgaDEuZW50cmllcygpKWkoZiksYT1hJiZwLnByb2Nlc3NlZDtyZXR1cm4gYX0sVnFlPWZ1bmN0aW9uKGksYSl7bGV0IGY9YTtPZSgpLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UiJiYoZj1payhhKSksaS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24ocCl7aEwocCkhPT12b2lkIDAmJihuUnQocCwoKT0+e3dpbmRvdy5vcGVuKGYsIl9zZWxmIil9KSxXMHRbcF09Zil9KSxlUnQoaSwiY2xpY2thYmxlIil9LGVSdD1mdW5jdGlvbihpLGEpe2kuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2xldCBwPWhMKGYpO3AhPT12b2lkIDAmJnAuY2xhc3Nlcy5wdXNoKGEpfSl9LEdxZT1mdW5jdGlvbihpLGEsZil7aWYoT2UoKS5zZWN1cml0eUxldmVsIT09Imxvb3NlInx8YT09PXZvaWQgMClyZXR1cm47bGV0IHA9W107aWYodHlwZW9mIGY9PSJzdHJpbmciKXtwPWYuc3BsaXQoLywoPz0oPzooPzpbXiJdKiIpezJ9KSpbXiJdKiQpLyk7Zm9yKGxldCBtPTA7bTxwLmxlbmd0aDttKyspe2xldCBiPXBbbV0udHJpbSgpO2IuY2hhckF0KDApPT09JyInJiZiLmNoYXJBdChiLmxlbmd0aC0xKT09PSciJyYmKGI9Yi5zdWJzdHIoMSxiLmxlbmd0aC0yKSkscFttXT1ifX1wLmxlbmd0aD09PTAmJnAucHVzaChpKSxoTChpKSE9PXZvaWQgMCYmblJ0KGksKCk9PnskYS5ydW5GdW5jKGEsLi4ucCl9KX0sblJ0PWZ1bmN0aW9uKGksYSl7WDB0LnB1c2goZnVuY3Rpb24oKXtjb25zdCBmPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtpfSJdYCk7ZiE9PW51bGwmJmYuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7YSgpfSl9LGZ1bmN0aW9uKCl7Y29uc3QgZj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9IiR7aX0tdGV4dCJdYCk7ZiE9PW51bGwmJmYuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7YSgpfSl9KX0sVXFlPXtnZXRDb25maWc6KCk9Pk9lKCkuZ2FudHQsY2xlYXI6Z3FlLHNldERhdGVGb3JtYXQ6eHFlLGdldERhdGVGb3JtYXQ6QXFlLGVuYWJsZUluY2x1c2l2ZUVuZERhdGVzOmtxZSxlbmREYXRlc0FyZUluY2x1c2l2ZTpFcWUsZW5hYmxlVG9wQXhpczpUcWUsdG9wQXhpc0VuYWJsZWQ6Q3FlLHNldEF4aXNGb3JtYXQ6cHFlLGdldEF4aXNGb3JtYXQ6YnFlLHNldFRpY2tJbnRlcnZhbDp3cWUsZ2V0VGlja0ludGVydmFsOnZxZSxzZXRUb2RheU1hcmtlcjptcWUsZ2V0VG9kYXlNYXJrZXI6eXFlLHNldEFjY1RpdGxlOkUwLGdldEFjY1RpdGxlOmZnLHNldERpYWdyYW1UaXRsZTpOYixnZXREaWFncmFtVGl0bGU6cGcsc2V0RGlzcGxheU1vZGU6X3FlLGdldERpc3BsYXlNb2RlOlNxZSxzZXRBY2NEZXNjcmlwdGlvbjpkZyxnZXRBY2NEZXNjcmlwdGlvbjpnZyxhZGRTZWN0aW9uOlBxZSxnZXRTZWN0aW9uczpGcWUsZ2V0VGFza3M6TnFlLGFkZFRhc2s6cXFlLGZpbmRUYXNrQnlJZDpoTCxhZGRUYXNrT3JnOkhxZSxzZXRJbmNsdWRlczpMcWUsZ2V0SW5jbHVkZXM6TXFlLHNldEV4Y2x1ZGVzOkRxZSxnZXRFeGNsdWRlczpJcWUsc2V0Q2xpY2tFdmVudDpmdW5jdGlvbihpLGEsZil7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24ocCl7R3FlKHAsYSxmKX0pLGVSdChpLCJjbGlja2FibGUiKX0sc2V0TGluazpWcWUsZ2V0TGlua3M6T3FlLGJpbmRGdW5jdGlvbnM6ZnVuY3Rpb24oaSl7WDB0LmZvckVhY2goZnVuY3Rpb24oYSl7YShpKX0pfSxwYXJzZUR1cmF0aW9uOlFCdCxpc0ludmFsaWREYXRlOktCdCxzZXRXZWVrZGF5OkJxZSxnZXRXZWVrZGF5OlJxZX07ZnVuY3Rpb24gclJ0KGksYSxmKXtsZXQgcD0hMDtmb3IoO3A7KXA9ITEsZi5mb3JFYWNoKGZ1bmN0aW9uKHcpe2NvbnN0IG09Il5cXHMqIit3KyJcXHMqJCIsYj1uZXcgUmVnRXhwKG0pO2lbMF0ubWF0Y2goYikmJihhW3ddPSEwLGkuc2hpZnQoMSkscD0hMCl9KX1jb25zdCBXcWU9ZnVuY3Rpb24oKXtVdC5kZWJ1ZygiU29tZXRoaW5nIGlzIGNhbGxpbmcsIHNldENvbmYsIHJlbW92ZSB0aGUgY2FsbCIpfSxpUnQ9e21vbmRheTpCUCx0dWVzZGF5OkpNdCx3ZWRuZXNkYXk6dER0LHRodXJzZGF5OnRULGZyaWRheTplRHQsc2F0dXJkYXk6bkR0LHN1bmRheTpOUH0sWXFlPShpLGEpPT57bGV0IGY9Wy4uLmldLm1hcCgoKT0+LTEvMCkscD1bLi4uaV0uc29ydCgobSxiKT0+bS5zdGFydFRpbWUtYi5zdGFydFRpbWV8fG0ub3JkZXItYi5vcmRlciksdz0wO2Zvcihjb25zdCBtIG9mIHApZm9yKGxldCBiPTA7YjxmLmxlbmd0aDtiKyspaWYobS5zdGFydFRpbWU+PWZbYl0pe2ZbYl09bS5lbmRUaW1lLG0ub3JkZXI9YithLGI+dyYmKHc9Yik7YnJlYWt9cmV0dXJuIHd9O2xldCBONTtjb25zdCBLcWU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpvcWUsZGI6VXFlLHJlbmRlcmVyOntzZXRDb25mOldxZSxkcmF3OmZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHc9T2UoKS5nYW50dCxtPU9lKCkuc2VjdXJpdHlMZXZlbDtsZXQgYjttPT09InNhbmRib3giJiYoYj15cigiI2kiK2EpKTtjb25zdCBFPXlyKG09PT0ic2FuZGJveCI/Yi5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksXz1tPT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsQT1fLmdldEVsZW1lbnRCeUlkKGEpO041PUEucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aCxONT09PXZvaWQgMCYmKE41PTEyMDApLHcudXNlV2lkdGghPT12b2lkIDAmJihONT13LnVzZVdpZHRoKTtjb25zdCBJPXAuZGIuZ2V0VGFza3MoKTtsZXQgQj1bXTtmb3IoY29uc3QgdnQgb2YgSSlCLnB1c2godnQudHlwZSk7Qj11dChCKTtjb25zdCBOPXt9O2xldCBSPTIqdy50b3BQYWRkaW5nO2lmKHAuZGIuZ2V0RGlzcGxheU1vZGUoKT09PSJjb21wYWN0Inx8dy5kaXNwbGF5TW9kZT09PSJjb21wYWN0Iil7Y29uc3QgdnQ9e307Zm9yKGNvbnN0IHB0IG9mIEkpdnRbcHQuc2VjdGlvbl09PT12b2lkIDA/dnRbcHQuc2VjdGlvbl09W3B0XTp2dFtwdC5zZWN0aW9uXS5wdXNoKHB0KTtsZXQgWD0wO2Zvcihjb25zdCBwdCBvZiBPYmplY3Qua2V5cyh2dCkpe2NvbnN0IFU9WXFlKHZ0W3B0XSxYKSsxO1grPVUsUis9VSoody5iYXJIZWlnaHQrdy5iYXJHYXApLE5bcHRdPVV9fWVsc2V7Uis9SS5sZW5ndGgqKHcuYmFySGVpZ2h0K3cuYmFyR2FwKTtmb3IoY29uc3QgdnQgb2YgQilOW3Z0XT1JLmZpbHRlcihYPT5YLnR5cGU9PT12dCkubGVuZ3RofUEuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IiwiMCAwICIrTjUrIiAiK1IpO2NvbnN0IHo9RS5zZWxlY3QoYFtpZD0iJHthfSJdYCksVz1ZN2UoKS5kb21haW4oW014ZShJLGZ1bmN0aW9uKHZ0KXtyZXR1cm4gdnQuc3RhcnRUaW1lfSksTHhlKEksZnVuY3Rpb24odnQpe3JldHVybiB2dC5lbmRUaW1lfSldKS5yYW5nZVJvdW5kKFswLE41LXcubGVmdFBhZGRpbmctdy5yaWdodFBhZGRpbmddKTtmdW5jdGlvbiBldCh2dCxYKXtjb25zdCBwdD12dC5zdGFydFRpbWUsVT1YLnN0YXJ0VGltZTtsZXQgVHQ9MDtyZXR1cm4gcHQ+VT9UdD0xOnB0PFUmJihUdD0tMSksVHR9SS5zb3J0KGV0KSxzdChJLE41LFIpLGswKHosUixONSx3LnVzZU1heFdpZHRoKSx6LmFwcGVuZCgidGV4dCIpLnRleHQocC5kYi5nZXREaWFncmFtVGl0bGUoKSkuYXR0cigieCIsTjUvMikuYXR0cigieSIsdy50aXRsZVRvcE1hcmdpbikuYXR0cigiY2xhc3MiLCJ0aXRsZVRleHQiKTtmdW5jdGlvbiBzdCh2dCxYLHB0KXtjb25zdCBVPXcuYmFySGVpZ2h0LFR0PVUrdy5iYXJHYXAsbnQ9dy50b3BQYWRkaW5nLEl0PXcubGVmdFBhZGRpbmcsT3Q9QUEoKS5kb21haW4oWzAsQi5sZW5ndGhdKS5yYW5nZShbIiMwMEI5RkEiLCIjRjk1MDAyIl0pLmludGVycG9sYXRlKFprZSk7YnQoVHQsbnQsSXQsWCxwdCx2dCxwLmRiLmdldEV4Y2x1ZGVzKCkscC5kYi5nZXRJbmNsdWRlcygpKSxtdChJdCxudCxYLHB0KSxhdCh2dCxUdCxudCxJdCxVLE90LFgpLHl0KFR0LG50KSxmdChJdCxudCxYLHB0KX1mdW5jdGlvbiBhdCh2dCxYLHB0LFUsVHQsbnQsSXQpe2NvbnN0IEJ0PVsuLi5uZXcgU2V0KHZ0Lm1hcCh4dD0+eHQub3JkZXIpKV0ubWFwKHh0PT52dC5maW5kKEh0PT5IdC5vcmRlcj09PXh0KSk7ei5hcHBlbmQoImciKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKEJ0KS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLGZ1bmN0aW9uKHh0LEh0KXtyZXR1cm4gSHQ9eHQub3JkZXIsSHQqWCtwdC0yfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKCl7cmV0dXJuIEl0LXcucmlnaHRQYWRkaW5nLzJ9KS5hdHRyKCJoZWlnaHQiLFgpLmF0dHIoImNsYXNzIixmdW5jdGlvbih4dCl7Zm9yKGNvbnN0W0h0LExlXW9mIEIuZW50cmllcygpKWlmKHh0LnR5cGU9PT1MZSlyZXR1cm4ic2VjdGlvbiBzZWN0aW9uIitIdCV3Lm51bWJlclNlY3Rpb25TdHlsZXM7cmV0dXJuInNlY3Rpb24gc2VjdGlvbjAifSk7Y29uc3QgRXQ9ei5hcHBlbmQoImciKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKHZ0KS5lbnRlcigpLFo9cC5kYi5nZXRMaW5rcygpO2lmKEV0LmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIixmdW5jdGlvbih4dCl7cmV0dXJuIHh0LmlkfSkuYXR0cigicngiLDMpLmF0dHIoInJ5IiwzKS5hdHRyKCJ4IixmdW5jdGlvbih4dCl7cmV0dXJuIHh0Lm1pbGVzdG9uZT9XKHh0LnN0YXJ0VGltZSkrVSsuNSooVyh4dC5lbmRUaW1lKS1XKHh0LnN0YXJ0VGltZSkpLS41KlR0OlcoeHQuc3RhcnRUaW1lKStVfSkuYXR0cigieSIsZnVuY3Rpb24oeHQsSHQpe3JldHVybiBIdD14dC5vcmRlcixIdCpYK3B0fSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHh0KXtyZXR1cm4geHQubWlsZXN0b25lP1R0OlcoeHQucmVuZGVyRW5kVGltZXx8eHQuZW5kVGltZSktVyh4dC5zdGFydFRpbWUpfSkuYXR0cigiaGVpZ2h0IixUdCkuYXR0cigidHJhbnNmb3JtLW9yaWdpbiIsZnVuY3Rpb24oeHQsSHQpe3JldHVybiBIdD14dC5vcmRlciwoVyh4dC5zdGFydFRpbWUpK1UrLjUqKFcoeHQuZW5kVGltZSktVyh4dC5zdGFydFRpbWUpKSkudG9TdHJpbmcoKSsicHggIisoSHQqWCtwdCsuNSpUdCkudG9TdHJpbmcoKSsicHgifSkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHh0KXtjb25zdCBIdD0idGFzayI7bGV0IExlPSIiO3h0LmNsYXNzZXMubGVuZ3RoPjAmJihMZT14dC5jbGFzc2VzLmpvaW4oIiAiKSk7bGV0IEZ0PTA7Zm9yKGNvbnN0W1NlLG1lXW9mIEIuZW50cmllcygpKXh0LnR5cGU9PT1tZSYmKEZ0PVNlJXcubnVtYmVyU2VjdGlvblN0eWxlcyk7bGV0IGduPSIiO3JldHVybiB4dC5hY3RpdmU/eHQuY3JpdD9nbis9IiBhY3RpdmVDcml0Ijpnbj0iIGFjdGl2ZSI6eHQuZG9uZT94dC5jcml0P2duPSIgZG9uZUNyaXQiOmduPSIgZG9uZSI6eHQuY3JpdCYmKGduKz0iIGNyaXQiKSxnbi5sZW5ndGg9PT0wJiYoZ249IiB0YXNrIikseHQubWlsZXN0b25lJiYoZ249IiBtaWxlc3RvbmUgIitnbiksZ24rPUZ0LGduKz0iICIrTGUsSHQrZ259KSxFdC5hcHBlbmQoInRleHQiKS5hdHRyKCJpZCIsZnVuY3Rpb24oeHQpe3JldHVybiB4dC5pZCsiLXRleHQifSkudGV4dChmdW5jdGlvbih4dCl7cmV0dXJuIHh0LnRhc2t9KS5hdHRyKCJmb250LXNpemUiLHcuZm9udFNpemUpLmF0dHIoIngiLGZ1bmN0aW9uKHh0KXtsZXQgSHQ9Vyh4dC5zdGFydFRpbWUpLExlPVcoeHQucmVuZGVyRW5kVGltZXx8eHQuZW5kVGltZSk7eHQubWlsZXN0b25lJiYoSHQrPS41KihXKHh0LmVuZFRpbWUpLVcoeHQuc3RhcnRUaW1lKSktLjUqVHQpLHh0Lm1pbGVzdG9uZSYmKExlPUh0K1R0KTtjb25zdCBGdD10aGlzLmdldEJCb3goKS53aWR0aDtyZXR1cm4gRnQ+TGUtSHQ/TGUrRnQrMS41KncubGVmdFBhZGRpbmc+SXQ/SHQrVS01OkxlK1UrNTooTGUtSHQpLzIrSHQrVX0pLmF0dHIoInkiLGZ1bmN0aW9uKHh0LEh0KXtyZXR1cm4gSHQ9eHQub3JkZXIsSHQqWCt3LmJhckhlaWdodC8yKyh3LmZvbnRTaXplLzItMikrcHR9KS5hdHRyKCJ0ZXh0LWhlaWdodCIsVHQpLmF0dHIoImNsYXNzIixmdW5jdGlvbih4dCl7Y29uc3QgSHQ9Vyh4dC5zdGFydFRpbWUpO2xldCBMZT1XKHh0LmVuZFRpbWUpO3h0Lm1pbGVzdG9uZSYmKExlPUh0K1R0KTtjb25zdCBGdD10aGlzLmdldEJCb3goKS53aWR0aDtsZXQgZ249IiI7eHQuY2xhc3Nlcy5sZW5ndGg+MCYmKGduPXh0LmNsYXNzZXMuam9pbigiICIpKTtsZXQgU2U9MDtmb3IoY29uc3RbVmUsWWVdb2YgQi5lbnRyaWVzKCkpeHQudHlwZT09PVllJiYoU2U9VmUldy5udW1iZXJTZWN0aW9uU3R5bGVzKTtsZXQgbWU9IiI7cmV0dXJuIHh0LmFjdGl2ZSYmKHh0LmNyaXQ/bWU9ImFjdGl2ZUNyaXRUZXh0IitTZTptZT0iYWN0aXZlVGV4dCIrU2UpLHh0LmRvbmU/eHQuY3JpdD9tZT1tZSsiIGRvbmVDcml0VGV4dCIrU2U6bWU9bWUrIiBkb25lVGV4dCIrU2U6eHQuY3JpdCYmKG1lPW1lKyIgY3JpdFRleHQiK1NlKSx4dC5taWxlc3RvbmUmJihtZSs9IiBtaWxlc3RvbmVUZXh0IiksRnQ+TGUtSHQ/TGUrRnQrMS41KncubGVmdFBhZGRpbmc+SXQ/Z24rIiB0YXNrVGV4dE91dHNpZGVMZWZ0IHRhc2tUZXh0T3V0c2lkZSIrU2UrIiAiK21lOmduKyIgdGFza1RleHRPdXRzaWRlUmlnaHQgdGFza1RleHRPdXRzaWRlIitTZSsiICIrbWUrIiB3aWR0aC0iK0Z0OmduKyIgdGFza1RleHQgdGFza1RleHQiK1NlKyIgIittZSsiIHdpZHRoLSIrRnR9KSxPZSgpLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCIpe2xldCB4dDt4dD15cigiI2kiK2EpO2NvbnN0IEh0PXh0Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50O0V0LmZpbHRlcihmdW5jdGlvbihMZSl7cmV0dXJuIFpbTGUuaWRdIT09dm9pZCAwfSkuZWFjaChmdW5jdGlvbihMZSl7dmFyIEZ0PUh0LnF1ZXJ5U2VsZWN0b3IoIiMiK0xlLmlkKSxnbj1IdC5xdWVyeVNlbGVjdG9yKCIjIitMZS5pZCsiLXRleHQiKTtjb25zdCBTZT1GdC5wYXJlbnROb2RlO3ZhciBtZT1IdC5jcmVhdGVFbGVtZW50KCJhIik7bWUuc2V0QXR0cmlidXRlKCJ4bGluazpocmVmIixaW0xlLmlkXSksbWUuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLCJfdG9wIiksU2UuYXBwZW5kQ2hpbGQobWUpLG1lLmFwcGVuZENoaWxkKEZ0KSxtZS5hcHBlbmRDaGlsZChnbil9KX19ZnVuY3Rpb24gYnQodnQsWCxwdCxVLFR0LG50LEl0LE90KXtpZihJdC5sZW5ndGg9PT0wJiZPdC5sZW5ndGg9PT0wKXJldHVybjtsZXQgQnQsRXQ7Zm9yKGNvbnN0e3N0YXJ0VGltZTpGdCxlbmRUaW1lOmdufW9mIG50KShCdD09PXZvaWQgMHx8RnQ8QnQpJiYoQnQ9RnQpLChFdD09PXZvaWQgMHx8Z24+RXQpJiYoRXQ9Z24pO2lmKCFCdHx8IUV0KXJldHVybjtpZih3MChFdCkuZGlmZih3MChCdCksInllYXIiKT41KXtVdC53YXJuKCJUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBtaW4gYW5kIG1heCB0aW1lIGlzIG1vcmUgdGhhbiA1IHllYXJzLiBUaGlzIHdpbGwgY2F1c2UgcGVyZm9ybWFuY2UgaXNzdWVzLiBTa2lwcGluZyBkcmF3aW5nIGV4Y2x1ZGUgZGF5cy4iKTtyZXR1cm59Y29uc3QgWj1wLmRiLmdldERhdGVGb3JtYXQoKSxDdD1bXTtsZXQgeHQ9bnVsbCxIdD13MChCdCk7Zm9yKDtIdC52YWx1ZU9mKCk8PUV0OylwLmRiLmlzSW52YWxpZERhdGUoSHQsWixJdCxPdCk/eHQ/eHQuZW5kPUh0Onh0PXtzdGFydDpIdCxlbmQ6SHR9Onh0JiYoQ3QucHVzaCh4dCkseHQ9bnVsbCksSHQ9SHQuYWRkKDEsImQiKTt6LmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoQ3QpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiaWQiLGZ1bmN0aW9uKEZ0KXtyZXR1cm4iZXhjbHVkZS0iK0Z0LnN0YXJ0LmZvcm1hdCgiWVlZWS1NTS1ERCIpfSkuYXR0cigieCIsZnVuY3Rpb24oRnQpe3JldHVybiBXKEZ0LnN0YXJ0KStwdH0pLmF0dHIoInkiLHcuZ3JpZExpbmVTdGFydFBhZGRpbmcpLmF0dHIoIndpZHRoIixmdW5jdGlvbihGdCl7Y29uc3QgZ249RnQuZW5kLmFkZCgxLCJkYXkiKTtyZXR1cm4gVyhnbiktVyhGdC5zdGFydCl9KS5hdHRyKCJoZWlnaHQiLFR0LVgtdy5ncmlkTGluZVN0YXJ0UGFkZGluZykuYXR0cigidHJhbnNmb3JtLW9yaWdpbiIsZnVuY3Rpb24oRnQsZ24pe3JldHVybihXKEZ0LnN0YXJ0KStwdCsuNSooVyhGdC5lbmQpLVcoRnQuc3RhcnQpKSkudG9TdHJpbmcoKSsicHggIisoZ24qdnQrLjUqVHQpLnRvU3RyaW5nKCkrInB4In0pLmF0dHIoImNsYXNzIiwiZXhjbHVkZS1yYW5nZSIpfWZ1bmN0aW9uIG10KHZ0LFgscHQsVSl7bGV0IFR0PWp4ZShXKS50aWNrU2l6ZSgtVStYK3cuZ3JpZExpbmVTdGFydFBhZGRpbmcpLnRpY2tGb3JtYXQoWlUocC5kYi5nZXRBeGlzRm9ybWF0KCl8fHcuYXhpc0Zvcm1hdHx8IiVZLSVtLSVkIikpO2NvbnN0IEl0PS9eKFsxLTldXGQqKShtaWxsaXNlY29uZHxzZWNvbmR8bWludXRlfGhvdXJ8ZGF5fHdlZWt8bW9udGgpJC8uZXhlYyhwLmRiLmdldFRpY2tJbnRlcnZhbCgpfHx3LnRpY2tJbnRlcnZhbCk7aWYoSXQhPT1udWxsKXtjb25zdCBPdD1JdFsxXSxCdD1JdFsyXSxFdD1wLmRiLmdldFdlZWtkYXkoKXx8dy53ZWVrZGF5O3N3aXRjaChCdCl7Y2FzZSJtaWxsaXNlY29uZCI6VHQudGlja3MoTEEuZXZlcnkoT3QpKTticmVhaztjYXNlInNlY29uZCI6VHQudGlja3Moc2suZXZlcnkoT3QpKTticmVhaztjYXNlIm1pbnV0ZSI6VHQudGlja3MoUFAuZXZlcnkoT3QpKTticmVhaztjYXNlImhvdXIiOlR0LnRpY2tzKEZQLmV2ZXJ5KE90KSk7YnJlYWs7Y2FzZSJkYXkiOlR0LnRpY2tzKFo3LmV2ZXJ5KE90KSk7YnJlYWs7Y2FzZSJ3ZWVrIjpUdC50aWNrcyhpUnRbRXRdLmV2ZXJ5KE90KSk7YnJlYWs7Y2FzZSJtb250aCI6VHQudGlja3MoUlAuZXZlcnkoT3QpKTticmVha319aWYoei5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyaWQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit2dCsiLCAiKyhVLTUwKSsiKSIpLmNhbGwoVHQpLnNlbGVjdEFsbCgidGV4dCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cigic3Ryb2tlIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImR5IiwiMWVtIikscC5kYi50b3BBeGlzRW5hYmxlZCgpfHx3LnRvcEF4aXMpe2xldCBPdD1SeGUoVykudGlja1NpemUoLVUrWCt3LmdyaWRMaW5lU3RhcnRQYWRkaW5nKS50aWNrRm9ybWF0KFpVKHAuZGIuZ2V0QXhpc0Zvcm1hdCgpfHx3LmF4aXNGb3JtYXR8fCIlWS0lbS0lZCIpKTtpZihJdCE9PW51bGwpe2NvbnN0IEJ0PUl0WzFdLEV0PUl0WzJdLFo9cC5kYi5nZXRXZWVrZGF5KCl8fHcud2Vla2RheTtzd2l0Y2goRXQpe2Nhc2UibWlsbGlzZWNvbmQiOk90LnRpY2tzKExBLmV2ZXJ5KEJ0KSk7YnJlYWs7Y2FzZSJzZWNvbmQiOk90LnRpY2tzKHNrLmV2ZXJ5KEJ0KSk7YnJlYWs7Y2FzZSJtaW51dGUiOk90LnRpY2tzKFBQLmV2ZXJ5KEJ0KSk7YnJlYWs7Y2FzZSJob3VyIjpPdC50aWNrcyhGUC5ldmVyeShCdCkpO2JyZWFrO2Nhc2UiZGF5IjpPdC50aWNrcyhaNy5ldmVyeShCdCkpO2JyZWFrO2Nhc2Uid2VlayI6T3QudGlja3MoaVJ0W1pdLmV2ZXJ5KEJ0KSk7YnJlYWs7Y2FzZSJtb250aCI6T3QudGlja3MoUlAuZXZlcnkoQnQpKTticmVha319ei5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyaWQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit2dCsiLCAiK1grIikiKS5jYWxsKE90KS5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmaWxsIiwiIzAwMCIpLmF0dHIoInN0cm9rZSIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKX19ZnVuY3Rpb24geXQodnQsWCl7bGV0IHB0PTA7Y29uc3QgVT1PYmplY3Qua2V5cyhOKS5tYXAoVHQ9PltUdCxOW1R0XV0pO3ouYXBwZW5kKCJnIikuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShVKS5lbnRlcigpLmFwcGVuZChmdW5jdGlvbihUdCl7Y29uc3QgbnQ9VHRbMF0uc3BsaXQoS3IubGluZUJyZWFrUmVnZXgpLEl0PS0obnQubGVuZ3RoLTEpLzIsT3Q9Xy5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO090LnNldEF0dHJpYnV0ZSgiZHkiLEl0KyJlbSIpO2Zvcihjb25zdFtCdCxFdF1vZiBudC5lbnRyaWVzKCkpe2NvbnN0IFo9Xy5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTtaLnNldEF0dHJpYnV0ZSgiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLFouc2V0QXR0cmlidXRlKCJ4IiwiMTAiKSxCdD4wJiZaLnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSxaLnRleHRDb250ZW50PUV0LE90LmFwcGVuZENoaWxkKFopfXJldHVybiBPdH0pLmF0dHIoIngiLDEwKS5hdHRyKCJ5IixmdW5jdGlvbihUdCxudCl7aWYobnQ+MClmb3IobGV0IEl0PTA7SXQ8bnQ7SXQrKylyZXR1cm4gcHQrPVVbbnQtMV1bMV0sVHRbMV0qdnQvMitwdCp2dCtYO2Vsc2UgcmV0dXJuIFR0WzFdKnZ0LzIrWH0pLmF0dHIoImZvbnQtc2l6ZSIsdy5zZWN0aW9uRm9udFNpemUpLmF0dHIoImNsYXNzIixmdW5jdGlvbihUdCl7Zm9yKGNvbnN0W250LEl0XW9mIEIuZW50cmllcygpKWlmKFR0WzBdPT09SXQpcmV0dXJuInNlY3Rpb25UaXRsZSBzZWN0aW9uVGl0bGUiK250JXcubnVtYmVyU2VjdGlvblN0eWxlcztyZXR1cm4ic2VjdGlvblRpdGxlIn0pfWZ1bmN0aW9uIGZ0KHZ0LFgscHQsVSl7Y29uc3QgVHQ9cC5kYi5nZXRUb2RheU1hcmtlcigpO2lmKFR0PT09Im9mZiIpcmV0dXJuO2NvbnN0IG50PXouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0b2RheSIpLEl0PW5ldyBEYXRlLE90PW50LmFwcGVuZCgibGluZSIpO090LmF0dHIoIngxIixXKEl0KSt2dCkuYXR0cigieDIiLFcoSXQpK3Z0KS5hdHRyKCJ5MSIsdy50aXRsZVRvcE1hcmdpbikuYXR0cigieTIiLFUtdy50aXRsZVRvcE1hcmdpbikuYXR0cigiY2xhc3MiLCJ0b2RheSIpLFR0IT09IiImJk90LmF0dHIoInN0eWxlIixUdC5yZXBsYWNlKC8sL2csIjsiKSl9ZnVuY3Rpb24gdXQodnQpe2NvbnN0IFg9e30scHQ9W107Zm9yKGxldCBVPTAsVHQ9dnQubGVuZ3RoO1U8VHQ7KytVKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChYLHZ0W1VdKXx8KFhbdnRbVV1dPSEwLHB0LnB1c2godnRbVV0pKTtyZXR1cm4gcHR9fX0sc3R5bGVzOmk9PmAKICAubWVybWFpZC1tYWluLWZvbnQgewogICAgZm9udC1mYW1pbHk6ICJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTsKICB9CiAgLmV4Y2x1ZGUtcmFuZ2UgewogICAgZmlsbDogJHtpLmV4Y2x1ZGVCa2dDb2xvcn07CiAgfQoKICAuc2VjdGlvbiB7CiAgICBzdHJva2U6IG5vbmU7CiAgICBvcGFjaXR5OiAwLjI7CiAgfQoKICAuc2VjdGlvbjAgewogICAgZmlsbDogJHtpLnNlY3Rpb25Ca2dDb2xvcn07CiAgfQoKICAuc2VjdGlvbjIgewogICAgZmlsbDogJHtpLnNlY3Rpb25Ca2dDb2xvcjJ9OwogIH0KCiAgLnNlY3Rpb24xLAogIC5zZWN0aW9uMyB7CiAgICBmaWxsOiAke2kuYWx0U2VjdGlvbkJrZ0NvbG9yfTsKICAgIG9wYWNpdHk6IDAuMjsKICB9CgogIC5zZWN0aW9uVGl0bGUwIHsKICAgIGZpbGw6ICR7aS50aXRsZUNvbG9yfTsKICB9CgogIC5zZWN0aW9uVGl0bGUxIHsKICAgIGZpbGw6ICR7aS50aXRsZUNvbG9yfTsKICB9CgogIC5zZWN0aW9uVGl0bGUyIHsKICAgIGZpbGw6ICR7aS50aXRsZUNvbG9yfTsKICB9CgogIC5zZWN0aW9uVGl0bGUzIHsKICAgIGZpbGw6ICR7aS50aXRsZUNvbG9yfTsKICB9CgogIC5zZWN0aW9uVGl0bGUgewogICAgdGV4dC1hbmNob3I6IHN0YXJ0OwogICAgLy8gZm9udC1zaXplOiAke2kuZ2FudHRGb250U2l6ZX07CiAgICAvLyB0ZXh0LWhlaWdodDogMTRweDsKICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7CgogIH0KCgogIC8qIEdyaWQgYW5kIGF4aXMgKi8KCiAgLmdyaWQgLnRpY2sgewogICAgc3Ryb2tlOiAke2kuZ3JpZENvbG9yfTsKICAgIG9wYWNpdHk6IDAuODsKICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKICAgIHRleHQgewogICAgICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogICAgICBmaWxsOiAke2kudGV4dENvbG9yfTsKICAgIH0KICB9CgogIC5ncmlkIHBhdGggewogICAgc3Ryb2tlLXdpZHRoOiAwOwogIH0KCgogIC8qIFRvZGF5IGxpbmUgKi8KCiAgLnRvZGF5IHsKICAgIGZpbGw6IG5vbmU7CiAgICBzdHJva2U6ICR7aS50b2RheUxpbmVDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDJweDsKICB9CgoKICAvKiBUYXNrIHN0eWxpbmcgKi8KCiAgLyogRGVmYXVsdCB0YXNrICovCgogIC50YXNrIHsKICAgIHN0cm9rZS13aWR0aDogMjsKICB9CgogIC50YXNrVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTsKICB9CgogIC8vIC50YXNrVGV4dDpub3QoW2ZvbnQtc2l6ZV0pIHsKICAvLyAgIGZvbnQtc2l6ZTogJHtpLmdhbnR0Rm9udFNpemV9OwogIC8vIH0KCiAgLnRhc2tUZXh0T3V0c2lkZVJpZ2h0IHsKICAgIGZpbGw6ICR7aS50YXNrVGV4dERhcmtDb2xvcn07CiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICAvLyBmb250LXNpemU6ICR7aS5nYW50dEZvbnRTaXplfTsKICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7CgogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZUxlZnQgewogICAgZmlsbDogJHtpLnRhc2tUZXh0RGFya0NvbG9yfTsKICAgIHRleHQtYW5jaG9yOiBlbmQ7CiAgICAvLyBmb250LXNpemU6ICR7aS5nYW50dEZvbnRTaXplfTsKICB9CgogIC8qIFNwZWNpYWwgY2FzZSBjbGlja2FibGUgKi8KICAudGFzay5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KICAudGFza1RleHQuY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZpbGw6ICR7aS50YXNrVGV4dENsaWNrYWJsZUNvbG9yfSAhaW1wb3J0YW50OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgfQoKICAudGFza1RleHRPdXRzaWRlTGVmdC5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZmlsbDogJHtpLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogYm9sZDsKICB9CgogIC50YXNrVGV4dE91dHNpZGVSaWdodC5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZmlsbDogJHtpLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogYm9sZDsKICB9CgogIC8qIFNwZWNpZmljIHRhc2sgc2V0dGluZ3MgZm9yIHRoZSBzZWN0aW9ucyovCgogIC50YXNrVGV4dDAsCiAgLnRhc2tUZXh0MSwKICAudGFza1RleHQyLAogIC50YXNrVGV4dDMgewogICAgZmlsbDogJHtpLnRhc2tUZXh0Q29sb3J9OwogIH0KCiAgLnRhc2swLAogIC50YXNrMSwKICAudGFzazIsCiAgLnRhc2szIHsKICAgIGZpbGw6ICR7aS50YXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlOiAke2kudGFza0JvcmRlckNvbG9yfTsKICB9CgogIC50YXNrVGV4dE91dHNpZGUwLAogIC50YXNrVGV4dE91dHNpZGUyCiAgewogICAgZmlsbDogJHtpLnRhc2tUZXh0T3V0c2lkZUNvbG9yfTsKICB9CgogIC50YXNrVGV4dE91dHNpZGUxLAogIC50YXNrVGV4dE91dHNpZGUzIHsKICAgIGZpbGw6ICR7aS50YXNrVGV4dE91dHNpZGVDb2xvcn07CiAgfQoKCiAgLyogQWN0aXZlIHRhc2sgKi8KCiAgLmFjdGl2ZTAsCiAgLmFjdGl2ZTEsCiAgLmFjdGl2ZTIsCiAgLmFjdGl2ZTMgewogICAgZmlsbDogJHtpLmFjdGl2ZVRhc2tCa2dDb2xvcn07CiAgICBzdHJva2U6ICR7aS5hY3RpdmVUYXNrQm9yZGVyQ29sb3J9OwogIH0KCiAgLmFjdGl2ZVRleHQwLAogIC5hY3RpdmVUZXh0MSwKICAuYWN0aXZlVGV4dDIsCiAgLmFjdGl2ZVRleHQzIHsKICAgIGZpbGw6ICR7aS50YXNrVGV4dERhcmtDb2xvcn0gIWltcG9ydGFudDsKICB9CgoKICAvKiBDb21wbGV0ZWQgdGFzayAqLwoKICAuZG9uZTAsCiAgLmRvbmUxLAogIC5kb25lMiwKICAuZG9uZTMgewogICAgc3Ryb2tlOiAke2kuZG9uZVRhc2tCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke2kuZG9uZVRhc2tCa2dDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDI7CiAgfQoKICAuZG9uZVRleHQwLAogIC5kb25lVGV4dDEsCiAgLmRvbmVUZXh0MiwKICAuZG9uZVRleHQzIHsKICAgIGZpbGw6ICR7aS50YXNrVGV4dERhcmtDb2xvcn0gIWltcG9ydGFudDsKICB9CgoKICAvKiBUYXNrcyBvbiB0aGUgY3JpdGljYWwgbGluZSAqLwoKICAuY3JpdDAsCiAgLmNyaXQxLAogIC5jcml0MiwKICAuY3JpdDMgewogICAgc3Ryb2tlOiAke2kuY3JpdEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7aS5jcml0QmtnQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyOwogIH0KCiAgLmFjdGl2ZUNyaXQwLAogIC5hY3RpdmVDcml0MSwKICAuYWN0aXZlQ3JpdDIsCiAgLmFjdGl2ZUNyaXQzIHsKICAgIHN0cm9rZTogJHtpLmNyaXRCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke2kuYWN0aXZlVGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMjsKICB9CgogIC5kb25lQ3JpdDAsCiAgLmRvbmVDcml0MSwKICAuZG9uZUNyaXQyLAogIC5kb25lQ3JpdDMgewogICAgc3Ryb2tlOiAke2kuY3JpdEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7aS5kb25lVGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMjsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKICB9CgogIC5taWxlc3RvbmUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpIHNjYWxlKDAuOCwwLjgpOwogIH0KCiAgLm1pbGVzdG9uZVRleHQgewogICAgZm9udC1zdHlsZTogaXRhbGljOwogIH0KICAuZG9uZUNyaXRUZXh0MCwKICAuZG9uZUNyaXRUZXh0MSwKICAuZG9uZUNyaXRUZXh0MiwKICAuZG9uZUNyaXRUZXh0MyB7CiAgICBmaWxsOiAke2kudGFza1RleHREYXJrQ29sb3J9ICFpbXBvcnRhbnQ7CiAgfQoKICAuYWN0aXZlQ3JpdFRleHQwLAogIC5hY3RpdmVDcml0VGV4dDEsCiAgLmFjdGl2ZUNyaXRUZXh0MiwKICAuYWN0aXZlQ3JpdFRleHQzIHsKICAgIGZpbGw6ICR7aS50YXNrVGV4dERhcmtDb2xvcn0gIWltcG9ydGFudDsKICB9CgogIC50aXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9ICAgIDsKICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7CiAgfQpgfX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgbmd0PWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24obSxiLEUsXyl7Zm9yKEU9RXx8e30sXz1tLmxlbmd0aDtfLS07RVttW19dXT1iKTtyZXR1cm4gRX0sYT1bNiw5LDEwXSxmPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxpbmZvOjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsc3RhdGVtZW50OjgsTkw6OSxzaG93SW5mbzoxMCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiaW5mbyIsNjoiRU9GIiw5OiJOTCIsMTA6InNob3dJbmZvIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFs1LDBdLFs1LDJdLFs3LDFdLFs3LDFdLFs4LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGIsRSxfLEEsSSxCLE4pe3N3aXRjaChCLmxlbmd0aC0xLEkpe2Nhc2UgMTpyZXR1cm4gQTtjYXNlIDQ6YnJlYWs7Y2FzZSA2OkEuc2V0SW5mbyghMCk7YnJlYWt9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LGkoYSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6Niw5OlsxLDddLDEwOlsxLDhdfSx7MTpbMiwxXX0saShhLFsyLDNdKSxpKGEsWzIsNF0pLGkoYSxbMiw1XSksaShhLFsyLDZdKV0sZGVmYXVsdEFjdGlvbnM6ezQ6WzIsMV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oYixFKXtpZihFLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoYik7ZWxzZXt2YXIgXz1uZXcgRXJyb3IoYik7dGhyb3cgXy5oYXNoPUUsX319LHBhcnNlOmZ1bmN0aW9uKGIpe3ZhciBFPXRoaXMsXz1bMF0sQT1bXSxJPVtudWxsXSxCPVtdLE49dGhpcy50YWJsZSxSPSIiLHo9MCxXPTAsZXQ9MixzdD0xLGF0PUIuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksYnQ9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxtdD17eXk6e319O2Zvcih2YXIgeXQgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx5dCkmJihtdC55eVt5dF09dGhpcy55eVt5dF0pO2J0LnNldElucHV0KGIsbXQueXkpLG10Lnl5LmxleGVyPWJ0LG10Lnl5LnBhcnNlcj10aGlzLHR5cGVvZiBidC55eWxsb2M+InUiJiYoYnQueXlsbG9jPXt9KTt2YXIgZnQ9YnQueXlsbG9jO0IucHVzaChmdCk7dmFyIHV0PWJ0Lm9wdGlvbnMmJmJ0Lm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBtdC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1tdC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiB2dCgpe3ZhciBDdDtyZXR1cm4gQ3Q9QS5wb3AoKXx8YnQubGV4KCl8fHN0LHR5cGVvZiBDdCE9Im51bWJlciImJihDdCBpbnN0YW5jZW9mIEFycmF5JiYoQT1DdCxDdD1BLnBvcCgpKSxDdD1FLnN5bWJvbHNfW0N0XXx8Q3QpLEN0fWZvcih2YXIgWCxwdCxVLFR0LG50PXt9LEl0LE90LEJ0LEV0Ozspe2lmKHB0PV9bXy5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1twdF0/VT10aGlzLmRlZmF1bHRBY3Rpb25zW3B0XTooKFg9PT1udWxsfHx0eXBlb2YgWD4idSIpJiYoWD12dCgpKSxVPU5bcHRdJiZOW3B0XVtYXSksdHlwZW9mIFU+InUifHwhVS5sZW5ndGh8fCFVWzBdKXt2YXIgWj0iIjtFdD1bXTtmb3IoSXQgaW4gTltwdF0pdGhpcy50ZXJtaW5hbHNfW0l0XSYmSXQ+ZXQmJkV0LnB1c2goIiciK3RoaXMudGVybWluYWxzX1tJdF0rIiciKTtidC5zaG93UG9zaXRpb24/Wj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh6KzEpK2A6CmArYnQuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtFdC5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1hdfHxYKSsiJyI6Wj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh6KzEpKyI6IFVuZXhwZWN0ZWQgIisoWD09c3Q/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bWF18fFgpKyInIiksdGhpcy5wYXJzZUVycm9yKFose3RleHQ6YnQubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1hdfHxYLGxpbmU6YnQueXlsaW5lbm8sbG9jOmZ0LGV4cGVjdGVkOkV0fSl9aWYoVVswXWluc3RhbmNlb2YgQXJyYXkmJlUubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitwdCsiLCB0b2tlbjogIitYKTtzd2l0Y2goVVswXSl7Y2FzZSAxOl8ucHVzaChYKSxJLnB1c2goYnQueXl0ZXh0KSxCLnB1c2goYnQueXlsbG9jKSxfLnB1c2goVVsxXSksWD1udWxsLFc9YnQueXlsZW5nLFI9YnQueXl0ZXh0LHo9YnQueXlsaW5lbm8sZnQ9YnQueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihPdD10aGlzLnByb2R1Y3Rpb25zX1tVWzFdXVsxXSxudC4kPUlbSS5sZW5ndGgtT3RdLG50Ll8kPXtmaXJzdF9saW5lOkJbQi5sZW5ndGgtKE90fHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6QltCLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOkJbQi5sZW5ndGgtKE90fHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkJbQi5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHV0JiYobnQuXyQucmFuZ2U9W0JbQi5sZW5ndGgtKE90fHwxKV0ucmFuZ2VbMF0sQltCLmxlbmd0aC0xXS5yYW5nZVsxXV0pLFR0PXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShudCxbUixXLHosbXQueXksVVsxXSxJLEJdLmNvbmNhdChhdCkpLHR5cGVvZiBUdDwidSIpcmV0dXJuIFR0O090JiYoXz1fLnNsaWNlKDAsLTEqT3QqMiksST1JLnNsaWNlKDAsLTEqT3QpLEI9Qi5zbGljZSgwLC0xKk90KSksXy5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW1VbMV1dWzBdKSxJLnB1c2gobnQuJCksQi5wdXNoKG50Ll8kKSxCdD1OW19bXy5sZW5ndGgtMl1dW19bXy5sZW5ndGgtMV1dLF8ucHVzaChCdCk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LHA9ZnVuY3Rpb24oKXt2YXIgbT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihFLF8pe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoRSxfKTtlbHNlIHRocm93IG5ldyBFcnJvcihFKX0sc2V0SW5wdXQ6ZnVuY3Rpb24oYixFKXtyZXR1cm4gdGhpcy55eT1FfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1iLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1iLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1iLHRoaXMubWF0Y2hlZCs9Yjt2YXIgRT1iLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gRT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksYn0sdW5wdXQ6ZnVuY3Rpb24oYil7dmFyIEU9Yi5sZW5ndGgsXz1iLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Yit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtRSksdGhpcy5vZmZzZXQtPUU7dmFyIEE9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksXy5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPV8ubGVuZ3RoLTEpO3ZhciBJPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpfPyhfLmxlbmd0aD09PUEubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStBW0EubGVuZ3RoLV8ubGVuZ3RoXS5sZW5ndGgtX1swXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLUV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bSVswXSxJWzBdK3RoaXMueXlsZW5nLUVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihiKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoYikpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKGIubGVuZ3RoPjIwPyIuLi4iOiIiKStiLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5tYXRjaDtyZXR1cm4gYi5sZW5ndGg8MjAmJihiKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1iLmxlbmd0aCkpLChiLnN1YnN0cigwLDIwKSsoYi5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wYXN0SW5wdXQoKSxFPW5ldyBBcnJheShiLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIGIrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKGIsRSl7dmFyIF8sQSxJO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihJPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksQT1iWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxBJiYodGhpcy55eWxpbmVubys9QS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpBP0FbQS5sZW5ndGgtMV0ubGVuZ3RoLUFbQS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitiWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPWJbMF0sdGhpcy5tYXRjaCs9YlswXSx0aGlzLm1hdGNoZXM9Yix0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShiWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1iWzBdLF89dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsRSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxfKXJldHVybiBfO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBCIGluIEkpdGhpc1tCXT1JW0JdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIGIsRSxfLEE7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgST10aGlzLl9jdXJyZW50UnVsZXMoKSxCPTA7QjxJLmxlbmd0aDtCKyspaWYoXz10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW0lbQl1dKSxfJiYoIUV8fF9bMF0ubGVuZ3RoPkVbMF0ubGVuZ3RoKSl7aWYoRT1fLEE9Qix0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihiPXRoaXMudGVzdF9tYXRjaChfLElbQl0pLGIhPT0hMSlyZXR1cm4gYjtpZih0aGlzLl9iYWNrdHJhY2spe0U9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gRT8oYj10aGlzLnRlc3RfbWF0Y2goRSxJW0FdKSxiIT09ITE/YjohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIEU9dGhpcy5uZXh0KCk7cmV0dXJuIEV8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKEUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChFKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgRT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBFPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oRSl7cmV0dXJuIEU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhFfHwwKSxFPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbRV06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oRSl7dGhpcy5iZWdpbihFKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihFLF8sQSxJKXtzd2l0Y2goQSl7Y2FzZSAwOnJldHVybiA0O2Nhc2UgMTpyZXR1cm4gOTtjYXNlIDI6cmV0dXJuInNwYWNlIjtjYXNlIDM6cmV0dXJuIDEwO2Nhc2UgNDpyZXR1cm4gNjtjYXNlIDU6cmV0dXJuIlRYVCJ9fSxydWxlczpbL14oPzppbmZvXGIpL2ksL14oPzpbXHNcblxyXSspL2ksL14oPzpbXHNdKykvaSwvXig/OnNob3dJbmZvXGIpL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7SU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIG19KCk7Zi5sZXhlcj1wO2Z1bmN0aW9uIHcoKXt0aGlzLnl5PXt9fXJldHVybiB3LnByb3RvdHlwZT1mLGYuUGFyc2VyPXcsbmV3IHd9KCk7bmd0LnBhcnNlcj1uZ3Q7Y29uc3QgWHFlPW5ndCxzUnQ9e2luZm86ITF9O2xldCByZ3Q9c1J0LmluZm87Y29uc3QgUXFlPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6WHFlLGRiOntjbGVhcjooKT0+e3JndD1zUnQuaW5mb30sc2V0SW5mbzppPT57cmd0PWl9LGdldEluZm86KCk9PnJndH0scmVuZGVyZXI6e2RyYXc6KGksYSxmKT0+e1V0LmRlYnVnKGByZW5kZXJpbmcgaW5mbyBkaWFncmFtCmAraSk7Y29uc3QgcD1WVyhhKTtrMChwLDEwMCw0MDAsITApLHAuYXBwZW5kKCJnIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMTAwKS5hdHRyKCJ5Iiw0MCkuYXR0cigiY2xhc3MiLCJ2ZXJzaW9uIikuYXR0cigiZm9udC1zaXplIiwzMikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChgdiR7Zn1gKX19fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgaWd0PWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oYnQsbXQseXQsZnQpe2Zvcih5dD15dHx8e30sZnQ9YnQubGVuZ3RoO2Z0LS07eXRbYnRbZnRdXT1tdCk7cmV0dXJuIHl0fSxhPVsxLDNdLGY9WzEsNF0scD1bMSw1XSx3PVsxLDZdLG09WzEsMTAsMTIsMTQsMTYsMTgsMTksMjAsMjEsMjJdLGI9WzIsNF0sRT1bMSw1LDEwLDEyLDE0LDE2LDE4LDE5LDIwLDIxLDIyXSxfPVsyMCwyMSwyMl0sQT1bMiw3XSxJPVsxLDEyXSxCPVsxLDEzXSxOPVsxLDE0XSxSPVsxLDE1XSx6PVsxLDE2XSxXPVsxLDE3XSxldD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZW9sOjQsUElFOjUsZG9jdW1lbnQ6NixzaG93RGF0YTo3LGxpbmU6OCxzdGF0ZW1lbnQ6OSx0eHQ6MTAsdmFsdWU6MTEsdGl0bGU6MTIsdGl0bGVfdmFsdWU6MTMsYWNjX3RpdGxlOjE0LGFjY190aXRsZV92YWx1ZToxNSxhY2NfZGVzY3I6MTYsYWNjX2Rlc2NyX3ZhbHVlOjE3LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MTgsc2VjdGlvbjoxOSxORVdMSU5FOjIwLCI7IjoyMSxFT0Y6MjIsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6IlBJRSIsNzoic2hvd0RhdGEiLDEwOiJ0eHQiLDExOiJ2YWx1ZSIsMTI6InRpdGxlIiwxMzoidGl0bGVfdmFsdWUiLDE0OiJhY2NfdGl0bGUiLDE1OiJhY2NfdGl0bGVfdmFsdWUiLDE2OiJhY2NfZGVzY3IiLDE3OiJhY2NfZGVzY3JfdmFsdWUiLDE4OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwxOToic2VjdGlvbiIsMjA6Ik5FV0xJTkUiLDIxOiI7IiwyMjoiRU9GIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDJdLFszLDNdLFs2LDBdLFs2LDJdLFs4LDJdLFs5LDBdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs0LDFdLFs0LDFdLFs0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKG10LHl0LGZ0LHV0LHZ0LFgscHQpe3ZhciBVPVgubGVuZ3RoLTE7c3dpdGNoKHZ0KXtjYXNlIDM6dXQuc2V0U2hvd0RhdGEoITApO2JyZWFrO2Nhc2UgNjp0aGlzLiQ9WFtVLTFdO2JyZWFrO2Nhc2UgODp1dC5hZGRTZWN0aW9uKFhbVS0xXSx1dC5jbGVhbnVwVmFsdWUoWFtVXSkpO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9WFtVXS50cmltKCksdXQuc2V0RGlhZ3JhbVRpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9WFtVXS50cmltKCksdXQuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDExOmNhc2UgMTI6dGhpcy4kPVhbVV0udHJpbSgpLHV0LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMzp1dC5hZGRTZWN0aW9uKFhbVV0uc3Vic3RyKDgpKSx0aGlzLiQ9WFtVXS5zdWJzdHIoOCk7YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTphLDIwOmYsMjE6cCwyMjp3fSx7MTpbM119LHszOjcsNDoyLDU6YSwyMDpmLDIxOnAsMjI6d30saShtLGIsezY6OCw3OlsxLDldfSksaShFLFsyLDE0XSksaShFLFsyLDE1XSksaShFLFsyLDE2XSksezE6WzIsMV19LGkoXyxBLHs4OjEwLDk6MTEsMTpbMiwyXSwxMDpJLDEyOkIsMTQ6TiwxNjpSLDE4OnosMTk6V30pLGkobSxiLHs2OjE4fSksaShtLFsyLDVdKSx7NDoxOSwyMDpmLDIxOnAsMjI6d30sezExOlsxLDIwXX0sezEzOlsxLDIxXX0sezE1OlsxLDIyXX0sezE3OlsxLDIzXX0saShfLFsyLDEyXSksaShfLFsyLDEzXSksaShfLEEsezg6MTAsOToxMSwxOlsyLDNdLDEwOkksMTI6QiwxNDpOLDE2OlIsMTg6eiwxOTpXfSksaShtLFsyLDZdKSxpKF8sWzIsOF0pLGkoXyxbMiw5XSksaShfLFsyLDEwXSksaShfLFsyLDExXSldLGRlZmF1bHRBY3Rpb25zOns3OlsyLDFdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKG10LHl0KXtpZih5dC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKG10KTtlbHNle3ZhciBmdD1uZXcgRXJyb3IobXQpO3Rocm93IGZ0Lmhhc2g9eXQsZnR9fSxwYXJzZTpmdW5jdGlvbihtdCl7dmFyIHl0PXRoaXMsZnQ9WzBdLHV0PVtdLHZ0PVtudWxsXSxYPVtdLHB0PXRoaXMudGFibGUsVT0iIixUdD0wLG50PTAsSXQ9MixPdD0xLEJ0PVguc2xpY2UuY2FsbChhcmd1bWVudHMsMSksRXQ9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxaPXt5eTp7fX07Zm9yKHZhciBDdCBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LEN0KSYmKFoueXlbQ3RdPXRoaXMueXlbQ3RdKTtFdC5zZXRJbnB1dChtdCxaLnl5KSxaLnl5LmxleGVyPUV0LFoueXkucGFyc2VyPXRoaXMsdHlwZW9mIEV0Lnl5bGxvYz4idSImJihFdC55eWxsb2M9e30pO3ZhciB4dD1FdC55eWxsb2M7WC5wdXNoKHh0KTt2YXIgSHQ9RXQub3B0aW9ucyYmRXQub3B0aW9ucy5yYW5nZXM7dHlwZW9mIFoueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Wi55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBMZSgpe3ZhciBzZTtyZXR1cm4gc2U9dXQucG9wKCl8fEV0LmxleCgpfHxPdCx0eXBlb2Ygc2UhPSJudW1iZXIiJiYoc2UgaW5zdGFuY2VvZiBBcnJheSYmKHV0PXNlLHNlPXV0LnBvcCgpKSxzZT15dC5zeW1ib2xzX1tzZV18fHNlKSxzZX1mb3IodmFyIEZ0LGduLFNlLG1lLFZlPXt9LFllLGNlLGtlLHp0Ozspe2lmKGduPWZ0W2Z0Lmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2duXT9TZT10aGlzLmRlZmF1bHRBY3Rpb25zW2duXTooKEZ0PT09bnVsbHx8dHlwZW9mIEZ0PiJ1IikmJihGdD1MZSgpKSxTZT1wdFtnbl0mJnB0W2duXVtGdF0pLHR5cGVvZiBTZT4idSJ8fCFTZS5sZW5ndGh8fCFTZVswXSl7dmFyIHJlPSIiO3p0PVtdO2ZvcihZZSBpbiBwdFtnbl0pdGhpcy50ZXJtaW5hbHNfW1llXSYmWWU+SXQmJnp0LnB1c2goIiciK3RoaXMudGVybWluYWxzX1tZZV0rIiciKTtFdC5zaG93UG9zaXRpb24/cmU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoVHQrMSkrYDoKYCtFdC5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK3p0LmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bRnRdfHxGdCkrIiciOnJlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFR0KzEpKyI6IFVuZXhwZWN0ZWQgIisoRnQ9PU90PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW0Z0XXx8RnQpKyInIiksdGhpcy5wYXJzZUVycm9yKHJlLHt0ZXh0OkV0Lm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tGdF18fEZ0LGxpbmU6RXQueXlsaW5lbm8sbG9jOnh0LGV4cGVjdGVkOnp0fSl9aWYoU2VbMF1pbnN0YW5jZW9mIEFycmF5JiZTZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2duKyIsIHRva2VuOiAiK0Z0KTtzd2l0Y2goU2VbMF0pe2Nhc2UgMTpmdC5wdXNoKEZ0KSx2dC5wdXNoKEV0Lnl5dGV4dCksWC5wdXNoKEV0Lnl5bGxvYyksZnQucHVzaChTZVsxXSksRnQ9bnVsbCxudD1FdC55eWxlbmcsVT1FdC55eXRleHQsVHQ9RXQueXlsaW5lbm8seHQ9RXQueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihjZT10aGlzLnByb2R1Y3Rpb25zX1tTZVsxXV1bMV0sVmUuJD12dFt2dC5sZW5ndGgtY2VdLFZlLl8kPXtmaXJzdF9saW5lOlhbWC5sZW5ndGgtKGNlfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6WFtYLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOlhbWC5sZW5ndGgtKGNlfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlhbWC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEh0JiYoVmUuXyQucmFuZ2U9W1hbWC5sZW5ndGgtKGNlfHwxKV0ucmFuZ2VbMF0sWFtYLmxlbmd0aC0xXS5yYW5nZVsxXV0pLG1lPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShWZSxbVSxudCxUdCxaLnl5LFNlWzFdLHZ0LFhdLmNvbmNhdChCdCkpLHR5cGVvZiBtZTwidSIpcmV0dXJuIG1lO2NlJiYoZnQ9ZnQuc2xpY2UoMCwtMSpjZSoyKSx2dD12dC5zbGljZSgwLC0xKmNlKSxYPVguc2xpY2UoMCwtMSpjZSkpLGZ0LnB1c2godGhpcy5wcm9kdWN0aW9uc19bU2VbMV1dWzBdKSx2dC5wdXNoKFZlLiQpLFgucHVzaChWZS5fJCksa2U9cHRbZnRbZnQubGVuZ3RoLTJdXVtmdFtmdC5sZW5ndGgtMV1dLGZ0LnB1c2goa2UpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxzdD1mdW5jdGlvbigpe3ZhciBidD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih5dCxmdCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih5dCxmdCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoeXQpfSxzZXRJbnB1dDpmdW5jdGlvbihtdCx5dCl7cmV0dXJuIHRoaXMueXk9eXR8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PW10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBtdD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9bXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPW10LHRoaXMubWF0Y2hlZCs9bXQ7dmFyIHl0PW10Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4geXQ/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLG10fSx1bnB1dDpmdW5jdGlvbihtdCl7dmFyIHl0PW10Lmxlbmd0aCxmdD1tdC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PW10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC15dCksdGhpcy5vZmZzZXQtPXl0O3ZhciB1dD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxmdC5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWZ0Lmxlbmd0aC0xKTt2YXIgdnQ9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmZ0PyhmdC5sZW5ndGg9PT11dC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3V0W3V0Lmxlbmd0aC1mdC5sZW5ndGhdLmxlbmd0aC1mdFswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLXl0fSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3Z0WzBdLHZ0WzBdK3RoaXMueXlsZW5nLXl0XSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24obXQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShtdCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgbXQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihtdC5sZW5ndGg+MjA/Ii4uLiI6IiIpK210LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIG10PXRoaXMubWF0Y2g7cmV0dXJuIG10Lmxlbmd0aDwyMCYmKG10Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1tdC5sZW5ndGgpKSwobXQuc3Vic3RyKDAsMjApKyhtdC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIG10PXRoaXMucGFzdElucHV0KCkseXQ9bmV3IEFycmF5KG10Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIG10K3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCt5dCsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24obXQseXQpe3ZhciBmdCx1dCx2dDtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYodnQ9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodnQueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksdXQ9bXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLHV0JiYodGhpcy55eWxpbmVubys9dXQubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46dXQ/dXRbdXQubGVuZ3RoLTFdLmxlbmd0aC11dFt1dC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbittdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1tdFswXSx0aGlzLm1hdGNoKz1tdFswXSx0aGlzLm1hdGNoZXM9bXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UobXRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPW10WzBdLGZ0PXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLHl0LHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGZ0KXJldHVybiBmdDtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgWCBpbiB2dCl0aGlzW1hdPXZ0W1hdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIG10LHl0LGZ0LHV0O3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIHZ0PXRoaXMuX2N1cnJlbnRSdWxlcygpLFg9MDtYPHZ0Lmxlbmd0aDtYKyspaWYoZnQ9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1t2dFtYXV0pLGZ0JiYoIXl0fHxmdFswXS5sZW5ndGg+eXRbMF0ubGVuZ3RoKSl7aWYoeXQ9ZnQsdXQ9WCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihtdD10aGlzLnRlc3RfbWF0Y2goZnQsdnRbWF0pLG10IT09ITEpcmV0dXJuIG10O2lmKHRoaXMuX2JhY2t0cmFjayl7eXQ9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4geXQ/KG10PXRoaXMudGVzdF9tYXRjaCh5dCx2dFt1dF0pLG10IT09ITE/bXQ6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB5dD10aGlzLm5leHQoKTtyZXR1cm4geXR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHl0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goeXQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciB5dD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiB5dD4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHl0KXtyZXR1cm4geXQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh5dHx8MCkseXQ+PTA/dGhpcy5jb25kaXRpb25TdGFja1t5dF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oeXQpe3RoaXMuYmVnaW4oeXQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHl0LGZ0LHV0LHZ0KXtzd2l0Y2godXQpe2Nhc2UgMDpicmVhaztjYXNlIDE6YnJlYWs7Y2FzZSAyOnJldHVybiAyMDtjYXNlIDM6YnJlYWs7Y2FzZSA0OmJyZWFrO2Nhc2UgNTpyZXR1cm4gdGhpcy5iZWdpbigidGl0bGUiKSwxMjtjYXNlIDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwidGl0bGVfdmFsdWUiO2Nhc2UgNzpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTQ7Y2FzZSA4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSA5OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxNjtjYXNlIDEwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSAxMTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMzpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxNDp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDE1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE2OnJldHVybiJ0eHQiO2Nhc2UgMTc6cmV0dXJuIDU7Y2FzZSAxODpyZXR1cm4gNztjYXNlIDE5OnJldHVybiJ2YWx1ZSI7Y2FzZSAyMDpyZXR1cm4gMjJ9fSxydWxlczpbL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5ccl0rKS9pLC9eKD86JSVbXlxuXSopL2ksL14oPzpbXHNdKykvaSwvXig/OnRpdGxlXGIpL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86cGllXGIpL2ksL14oPzpzaG93RGF0YVxiKS9pLC9eKD86Oltcc10qW1xkXSsoPzpcLltcZF0rKT8pL2ksL14oPzokKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTIsMTNdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMTBdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbOF0saW5jbHVzaXZlOiExfSx0aXRsZTp7cnVsZXM6WzZdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMTUsMTZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDcsOSwxMSwxNCwxNywxOCwxOSwyMF0saW5jbHVzaXZlOiEwfX19O3JldHVybiBidH0oKTtldC5sZXhlcj1zdDtmdW5jdGlvbiBhdCgpe3RoaXMueXk9e319cmV0dXJuIGF0LnByb3RvdHlwZT1ldCxldC5QYXJzZXI9YXQsbmV3IGF0fSgpO2lndC5wYXJzZXI9aWd0O2NvbnN0IFpxZT1pZ3QsYVJ0PVpoLnBpZSxGWT17c2VjdGlvbnM6e30sc2hvd0RhdGE6ITEsY29uZmlnOmFSdH07bGV0IE5ZPUZZLnNlY3Rpb25zLHNndD1GWS5zaG93RGF0YTtjb25zdCBKcWU9c3RydWN0dXJlZENsb25lKGFSdCksdEhlPXtnZXRDb25maWc6KCk9PnN0cnVjdHVyZWRDbG9uZShKcWUpLGNsZWFyOigpPT57Tlk9c3RydWN0dXJlZENsb25lKEZZLnNlY3Rpb25zKSxzZ3Q9Rlkuc2hvd0RhdGEsaGcoKX0sc2V0RGlhZ3JhbVRpdGxlOk5iLGdldERpYWdyYW1UaXRsZTpwZyxzZXRBY2NUaXRsZTpFMCxnZXRBY2NUaXRsZTpmZyxzZXRBY2NEZXNjcmlwdGlvbjpkZyxnZXRBY2NEZXNjcmlwdGlvbjpnZyxhZGRTZWN0aW9uOihpLGEpPT57aT1RMShpLE9lKCkpLE5ZW2ldPT09dm9pZCAwJiYoTllbaV09YSxVdC5kZWJ1ZyhgYWRkZWQgbmV3IHNlY3Rpb246ICR7aX0sIHdpdGggdmFsdWU6ICR7YX1gKSl9LGdldFNlY3Rpb25zOigpPT5OWSxjbGVhbnVwVmFsdWU6aT0+KGkuc3Vic3RyaW5nKDAsMSk9PT0iOiImJihpPWkuc3Vic3RyaW5nKDEpLnRyaW0oKSksTnVtYmVyKGkudHJpbSgpKSksc2V0U2hvd0RhdGE6aT0+e3NndD1pfSxnZXRTaG93RGF0YTooKT0+c2d0fSxlSGU9aT0+YAogIC5waWVDaXJjbGV7CiAgICBzdHJva2U6ICR7aS5waWVTdHJva2VDb2xvcn07CiAgICBzdHJva2Utd2lkdGggOiAke2kucGllU3Ryb2tlV2lkdGh9OwogICAgb3BhY2l0eSA6ICR7aS5waWVPcGFjaXR5fTsKICB9CiAgLnBpZU91dGVyQ2lyY2xlewogICAgc3Ryb2tlOiAke2kucGllT3V0ZXJTdHJva2VDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6ICR7aS5waWVPdXRlclN0cm9rZVdpZHRofTsKICAgIGZpbGw6IG5vbmU7CiAgfQogIC5waWVUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogJHtpLnBpZVRpdGxlVGV4dFNpemV9OwogICAgZmlsbDogJHtpLnBpZVRpdGxlVGV4dENvbG9yfTsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgfQogIC5zbGljZSB7CiAgICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogICAgZmlsbDogJHtpLnBpZVNlY3Rpb25UZXh0Q29sb3J9OwogICAgZm9udC1zaXplOiR7aS5waWVTZWN0aW9uVGV4dFNpemV9OwogICAgLy8gZmlsbDogd2hpdGU7CiAgfQogIC5sZWdlbmQgdGV4dCB7CiAgICBmaWxsOiAke2kucGllTGVnZW5kVGV4dENvbG9yfTsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6ICR7aS5waWVMZWdlbmRUZXh0U2l6ZX07CiAgfQpgLG5IZT1pPT57Y29uc3QgYT1PYmplY3QuZW50cmllcyhpKS5tYXAocD0+KHtsYWJlbDpwWzBdLHZhbHVlOnBbMV19KSkuc29ydCgocCx3KT0+dy52YWx1ZS1wLnZhbHVlKTtyZXR1cm4gdVRlKCkudmFsdWUocD0+cC52YWx1ZSkoYSl9LHJIZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOlpxZSxkYjp0SGUscmVuZGVyZXI6e2RyYXc6KGksYSxmLHApPT57dmFyIHB0LFU7VXQuZGVidWcoYHJlbmRlcmluZyBwaWUgY2hhcnQKYCtpKTtjb25zdCB3PXAuZGIsbT1PZSgpLGI9ckYody5nZXRDb25maWcoKSxtLnBpZSksRT00NTAsXz0oKFU9KHB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpKT09bnVsbD92b2lkIDA6cHQucGFyZW50RWxlbWVudCk9PW51bGw/dm9pZCAwOlUub2Zmc2V0V2lkdGgpPz9iLnVzZVdpZHRoLEE9VlcoYSk7QS5hdHRyKCJ2aWV3Qm94IixgMCAwICR7X30gJHtFfWApLGswKEEsRSxfLGIudXNlTWF4V2lkdGgpO2NvbnN0IEk9NDAsQj0xOCxOPTQsUj1BLmFwcGVuZCgiZyIpO1IuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrXy8yKyIsIitFLzIrIikiKTtjb25zdHt0aGVtZVZhcmlhYmxlczp6fT1tO2xldFtXXT1WQSh6LnBpZU91dGVyU3Ryb2tlV2lkdGgpO1c/PyhXPTIpO2NvbnN0IGV0PWIudGV4dFBvc2l0aW9uLHN0PU1hdGgubWluKF8sRSkvMi1JLGF0PU9BKCkuaW5uZXJSYWRpdXMoMCkub3V0ZXJSYWRpdXMoc3QpLGJ0PU9BKCkuaW5uZXJSYWRpdXMoc3QqZXQpLm91dGVyUmFkaXVzKHN0KmV0KTtSLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLDApLmF0dHIoImN5IiwwKS5hdHRyKCJyIixzdCtXLzIpLmF0dHIoImNsYXNzIiwicGllT3V0ZXJDaXJjbGUiKTtjb25zdCBtdD13LmdldFNlY3Rpb25zKCkseXQ9bkhlKG10KSxmdD1bei5waWUxLHoucGllMix6LnBpZTMsei5waWU0LHoucGllNSx6LnBpZTYsei5waWU3LHoucGllOCx6LnBpZTksei5waWUxMCx6LnBpZTExLHoucGllMTJdLHV0PVhVKGZ0KTtSLnNlbGVjdEFsbCgibXlTbGljZXMiKS5kYXRhKHl0KS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGF0KS5hdHRyKCJmaWxsIixUdD0+dXQoVHQuZGF0YS5sYWJlbCkpLmF0dHIoImNsYXNzIiwicGllQ2lyY2xlIik7bGV0IHZ0PTA7T2JqZWN0LmtleXMobXQpLmZvckVhY2goVHQ9Pnt2dCs9bXRbVHRdfSksUi5zZWxlY3RBbGwoIm15U2xpY2VzIikuZGF0YSh5dCkuZW50ZXIoKS5hcHBlbmQoInRleHQiKS50ZXh0KFR0PT4oVHQuZGF0YS52YWx1ZS92dCoxMDApLnRvRml4ZWQoMCkrIiUiKS5hdHRyKCJ0cmFuc2Zvcm0iLFR0PT4idHJhbnNsYXRlKCIrYnQuY2VudHJvaWQoVHQpKyIpIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiY2xhc3MiLCJzbGljZSIpLFIuYXBwZW5kKCJ0ZXh0IikudGV4dCh3LmdldERpYWdyYW1UaXRsZSgpKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwtKEUtNTApLzIpLmF0dHIoImNsYXNzIiwicGllVGl0bGVUZXh0Iik7Y29uc3QgWD1SLnNlbGVjdEFsbCgiLmxlZ2VuZCIpLmRhdGEodXQuZG9tYWluKCkpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsZWdlbmQiKS5hdHRyKCJ0cmFuc2Zvcm0iLChUdCxudCk9Pntjb25zdCBJdD1CK04sT3Q9SXQqdXQuZG9tYWluKCkubGVuZ3RoLzIsQnQ9MTIqQixFdD1udCpJdC1PdDtyZXR1cm4idHJhbnNsYXRlKCIrQnQrIiwiK0V0KyIpIn0pO1guYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLEIpLmF0dHIoImhlaWdodCIsQikuc3R5bGUoImZpbGwiLHV0KS5zdHlsZSgic3Ryb2tlIix1dCksWC5kYXRhKHl0KS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixCK04pLmF0dHIoInkiLEItTikudGV4dChUdD0+e2NvbnN0e2xhYmVsOm50LHZhbHVlOkl0fT1UdC5kYXRhO3JldHVybiB3LmdldFNob3dEYXRhKCk/YCR7bnR9IFske0l0fV1gOm50fSl9fSxzdHlsZXM6ZUhlfX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgYWd0PWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oU2UsbWUsVmUsWWUpe2ZvcihWZT1WZXx8e30sWWU9U2UubGVuZ3RoO1llLS07VmVbU2VbWWVdXT1tZSk7cmV0dXJuIFZlfSxhPVsxLDNdLGY9WzEsNF0scD1bMSw1XSx3PVsxLDZdLG09WzEsN10sYj1bMSw1LDEzLDE1LDE3LDE5LDIwLDI1LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM3LDM4LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwXSxFPVsxLDUsNiwxMywxNSwxNywxOSwyMCwyNSwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNywzOCw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MF0sXz1bMzIsMzMsMzRdLEE9WzIsN10sST1bMSwxM10sQj1bMSwxN10sTj1bMSwxOF0sUj1bMSwxOV0sej1bMSwyMF0sVz1bMSwyMV0sZXQ9WzEsMjJdLHN0PVsxLDIzXSxhdD1bMSwyNF0sYnQ9WzEsMjVdLG10PVsxLDI2XSx5dD1bMSwyN10sZnQ9WzEsMzBdLHV0PVsxLDMxXSx2dD1bMSwzMl0sWD1bMSwzM10scHQ9WzEsMzRdLFU9WzEsMzVdLFR0PVsxLDM2XSxudD1bMSwzN10sSXQ9WzEsMzhdLE90PVsxLDM5XSxCdD1bMSw0MF0sRXQ9WzEsNDFdLFo9WzEsNDJdLEN0PVsxLDU3XSx4dD1bMSw1OF0sSHQ9WzUsMjIsMjYsMzIsMzMsMzQsNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTFdLExlPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxlb2w6NCxTUEFDRTo1LFFVQURSQU5UOjYsZG9jdW1lbnQ6NyxsaW5lOjgsc3RhdGVtZW50OjksYXhpc0RldGFpbHM6MTAscXVhZHJhbnREZXRhaWxzOjExLHBvaW50czoxMix0aXRsZToxMyx0aXRsZV92YWx1ZToxNCxhY2NfdGl0bGU6MTUsYWNjX3RpdGxlX3ZhbHVlOjE2LGFjY19kZXNjcjoxNyxhY2NfZGVzY3JfdmFsdWU6MTgsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToxOSxzZWN0aW9uOjIwLHRleHQ6MjEscG9pbnRfc3RhcnQ6MjIscG9pbnRfeDoyMyxwb2ludF95OjI0LCJYLUFYSVMiOjI1LCJBWElTLVRFWFQtREVMSU1JVEVSIjoyNiwiWS1BWElTIjoyNyxRVUFEUkFOVF8xOjI4LFFVQURSQU5UXzI6MjksUVVBRFJBTlRfMzozMCxRVUFEUkFOVF80OjMxLE5FV0xJTkU6MzIsU0VNSTozMyxFT0Y6MzQsYWxwaGFOdW1Ub2tlbjozNSx0ZXh0Tm9UYWdzVG9rZW46MzYsU1RSOjM3LE1EX1NUUjozOCxhbHBoYU51bTozOSxQVU5DVFVBVElPTjo0MCxBTVA6NDEsTlVNOjQyLEFMUEhBOjQzLENPTU1BOjQ0LFBMVVM6NDUsRVFVQUxTOjQ2LE1VTFQ6NDcsRE9UOjQ4LEJSS1Q6NDksVU5ERVJTQ09SRTo1MCxNSU5VUzo1MSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNToiU1BBQ0UiLDY6IlFVQURSQU5UIiwxMzoidGl0bGUiLDE0OiJ0aXRsZV92YWx1ZSIsMTU6ImFjY190aXRsZSIsMTY6ImFjY190aXRsZV92YWx1ZSIsMTc6ImFjY19kZXNjciIsMTg6ImFjY19kZXNjcl92YWx1ZSIsMTk6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDIwOiJzZWN0aW9uIiwyMjoicG9pbnRfc3RhcnQiLDIzOiJwb2ludF94IiwyNDoicG9pbnRfeSIsMjU6IlgtQVhJUyIsMjY6IkFYSVMtVEVYVC1ERUxJTUlURVIiLDI3OiJZLUFYSVMiLDI4OiJRVUFEUkFOVF8xIiwyOToiUVVBRFJBTlRfMiIsMzA6IlFVQURSQU5UXzMiLDMxOiJRVUFEUkFOVF80IiwzMjoiTkVXTElORSIsMzM6IlNFTUkiLDM0OiJFT0YiLDM3OiJTVFIiLDM4OiJNRF9TVFIiLDQwOiJQVU5DVFVBVElPTiIsNDE6IkFNUCIsNDI6Ik5VTSIsNDM6IkFMUEhBIiw0NDoiQ09NTUEiLDQ1OiJQTFVTIiw0NjoiRVFVQUxTIiw0NzoiTVVMVCIsNDg6IkRPVCIsNDk6IkJSS1QiLDUwOiJVTkRFUlNDT1JFIiw1MToiTUlOVVMifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsMl0sWzMsMl0sWzcsMF0sWzcsMl0sWzgsMl0sWzksMF0sWzksMl0sWzksMV0sWzksMV0sWzksMV0sWzksMl0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzEyLDRdLFsxMCw0XSxbMTAsM10sWzEwLDJdLFsxMCw0XSxbMTAsM10sWzEwLDJdLFsxMSwyXSxbMTEsMl0sWzExLDJdLFsxMSwyXSxbNCwxXSxbNCwxXSxbNCwxXSxbMjEsMV0sWzIxLDJdLFsyMSwxXSxbMjEsMV0sWzM5LDFdLFszOSwyXSxbMzUsMV0sWzM1LDFdLFszNSwxXSxbMzUsMV0sWzM1LDFdLFszNSwxXSxbMzUsMV0sWzM1LDFdLFszNSwxXSxbMzUsMV0sWzM1LDFdLFszNiwxXSxbMzYsMV0sWzM2LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKG1lLFZlLFllLGNlLGtlLHp0LHJlKXt2YXIgc2U9enQubGVuZ3RoLTE7c3dpdGNoKGtlKXtjYXNlIDEyOnRoaXMuJD16dFtzZV0udHJpbSgpLGNlLnNldERpYWdyYW1UaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTM6dGhpcy4kPXp0W3NlXS50cmltKCksY2Uuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDE0OmNhc2UgMTU6dGhpcy4kPXp0W3NlXS50cmltKCksY2Uuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDE2OmNlLmFkZFNlY3Rpb24oenRbc2VdLnN1YnN0cig4KSksdGhpcy4kPXp0W3NlXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxNzpjZS5hZGRQb2ludCh6dFtzZS0zXSx6dFtzZS0xXSx6dFtzZV0pO2JyZWFrO2Nhc2UgMTg6Y2Uuc2V0WEF4aXNMZWZ0VGV4dCh6dFtzZS0yXSksY2Uuc2V0WEF4aXNSaWdodFRleHQoenRbc2VdKTticmVhaztjYXNlIDE5Onp0W3NlLTFdLnRleHQrPSIg4p+2ICIsY2Uuc2V0WEF4aXNMZWZ0VGV4dCh6dFtzZS0xXSk7YnJlYWs7Y2FzZSAyMDpjZS5zZXRYQXhpc0xlZnRUZXh0KHp0W3NlXSk7YnJlYWs7Y2FzZSAyMTpjZS5zZXRZQXhpc0JvdHRvbVRleHQoenRbc2UtMl0pLGNlLnNldFlBeGlzVG9wVGV4dCh6dFtzZV0pO2JyZWFrO2Nhc2UgMjI6enRbc2UtMV0udGV4dCs9IiDin7YgIixjZS5zZXRZQXhpc0JvdHRvbVRleHQoenRbc2UtMV0pO2JyZWFrO2Nhc2UgMjM6Y2Uuc2V0WUF4aXNCb3R0b21UZXh0KHp0W3NlXSk7YnJlYWs7Y2FzZSAyNDpjZS5zZXRRdWFkcmFudDFUZXh0KHp0W3NlXSk7YnJlYWs7Y2FzZSAyNTpjZS5zZXRRdWFkcmFudDJUZXh0KHp0W3NlXSk7YnJlYWs7Y2FzZSAyNjpjZS5zZXRRdWFkcmFudDNUZXh0KHp0W3NlXSk7YnJlYWs7Y2FzZSAyNzpjZS5zZXRRdWFkcmFudDRUZXh0KHp0W3NlXSk7YnJlYWs7Y2FzZSAzMTp0aGlzLiQ9e3RleHQ6enRbc2VdLHR5cGU6InRleHQifTticmVhaztjYXNlIDMyOnRoaXMuJD17dGV4dDp6dFtzZS0xXS50ZXh0KyIiK3p0W3NlXSx0eXBlOnp0W3NlLTFdLnR5cGV9O2JyZWFrO2Nhc2UgMzM6dGhpcy4kPXt0ZXh0Onp0W3NlXSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9e3RleHQ6enRbc2VdLHR5cGU6Im1hcmtkb3duIn07YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9enRbc2VdO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPXp0W3NlLTFdKyIiK3p0W3NlXTticmVha319LHRhYmxlOlt7MzoxLDQ6Miw1OmEsNjpmLDMyOnAsMzM6dywzNDptfSx7MTpbM119LHszOjgsNDoyLDU6YSw2OmYsMzI6cCwzMzp3LDM0Om19LHszOjksNDoyLDU6YSw2OmYsMzI6cCwzMzp3LDM0Om19LGkoYixbMiw0XSx7NzoxMH0pLGkoRSxbMiwyOF0pLGkoRSxbMiwyOV0pLGkoRSxbMiwzMF0pLHsxOlsyLDFdfSx7MTpbMiwyXX0saShfLEEsezg6MTEsOToxMiwxMDoxNCwxMToxNSwxMjoxNiwyMToyOCwzNToyOSwxOlsyLDNdLDU6SSwxMzpCLDE1Ok4sMTc6UiwxOTp6LDIwOlcsMjU6ZXQsMjc6c3QsMjg6YXQsMjk6YnQsMzA6bXQsMzE6eXQsMzc6ZnQsMzg6dXQsNDA6dnQsNDE6WCw0MjpwdCw0MzpVLDQ0OlR0LDQ1Om50LDQ2Okl0LDQ3Ok90LDQ4OkJ0LDQ5OkV0LDUwOlp9KSxpKGIsWzIsNV0pLHs0OjQzLDMyOnAsMzM6dywzNDptfSxpKF8sQSx7MTA6MTQsMTE6MTUsMTI6MTYsMjE6MjgsMzU6MjksOTo0NCw1OkksMTM6QiwxNTpOLDE3OlIsMTk6eiwyMDpXLDI1OmV0LDI3OnN0LDI4OmF0LDI5OmJ0LDMwOm10LDMxOnl0LDM3OmZ0LDM4OnV0LDQwOnZ0LDQxOlgsNDI6cHQsNDM6VSw0NDpUdCw0NTpudCw0NjpJdCw0NzpPdCw0ODpCdCw0OTpFdCw1MDpafSksaShfLFsyLDldKSxpKF8sWzIsMTBdKSxpKF8sWzIsMTFdKSx7MTQ6WzEsNDVdfSx7MTY6WzEsNDZdfSx7MTg6WzEsNDddfSxpKF8sWzIsMTVdKSxpKF8sWzIsMTZdKSx7MjE6NDgsMzU6MjksMzc6ZnQsMzg6dXQsNDA6dnQsNDE6WCw0MjpwdCw0MzpVLDQ0OlR0LDQ1Om50LDQ2Okl0LDQ3Ok90LDQ4OkJ0LDQ5OkV0LDUwOlp9LHsyMTo0OSwzNToyOSwzNzpmdCwzODp1dCw0MDp2dCw0MTpYLDQyOnB0LDQzOlUsNDQ6VHQsNDU6bnQsNDY6SXQsNDc6T3QsNDg6QnQsNDk6RXQsNTA6Wn0sezIxOjUwLDM1OjI5LDM3OmZ0LDM4OnV0LDQwOnZ0LDQxOlgsNDI6cHQsNDM6VSw0NDpUdCw0NTpudCw0NjpJdCw0NzpPdCw0ODpCdCw0OTpFdCw1MDpafSx7MjE6NTEsMzU6MjksMzc6ZnQsMzg6dXQsNDA6dnQsNDE6WCw0MjpwdCw0MzpVLDQ0OlR0LDQ1Om50LDQ2Okl0LDQ3Ok90LDQ4OkJ0LDQ5OkV0LDUwOlp9LHsyMTo1MiwzNToyOSwzNzpmdCwzODp1dCw0MDp2dCw0MTpYLDQyOnB0LDQzOlUsNDQ6VHQsNDU6bnQsNDY6SXQsNDc6T3QsNDg6QnQsNDk6RXQsNTA6Wn0sezIxOjUzLDM1OjI5LDM3OmZ0LDM4OnV0LDQwOnZ0LDQxOlgsNDI6cHQsNDM6VSw0NDpUdCw0NTpudCw0NjpJdCw0NzpPdCw0ODpCdCw0OTpFdCw1MDpafSx7NTpDdCwyMjpbMSw1NF0sMzU6NTYsMzY6NTUsNDA6dnQsNDE6WCw0MjpwdCw0MzpVLDQ0OlR0LDQ1Om50LDQ2Okl0LDQ3Ok90LDQ4OkJ0LDQ5OkV0LDUwOlosNTE6eHR9LGkoSHQsWzIsMzFdKSxpKEh0LFsyLDMzXSksaShIdCxbMiwzNF0pLGkoSHQsWzIsMzddKSxpKEh0LFsyLDM4XSksaShIdCxbMiwzOV0pLGkoSHQsWzIsNDBdKSxpKEh0LFsyLDQxXSksaShIdCxbMiw0Ml0pLGkoSHQsWzIsNDNdKSxpKEh0LFsyLDQ0XSksaShIdCxbMiw0NV0pLGkoSHQsWzIsNDZdKSxpKEh0LFsyLDQ3XSksaShiLFsyLDZdKSxpKF8sWzIsOF0pLGkoXyxbMiwxMl0pLGkoXyxbMiwxM10pLGkoXyxbMiwxNF0pLGkoXyxbMiwyMF0sezM2OjU1LDM1OjU2LDU6Q3QsMjY6WzEsNTldLDQwOnZ0LDQxOlgsNDI6cHQsNDM6VSw0NDpUdCw0NTpudCw0NjpJdCw0NzpPdCw0ODpCdCw0OTpFdCw1MDpaLDUxOnh0fSksaShfLFsyLDIzXSx7MzY6NTUsMzU6NTYsNTpDdCwyNjpbMSw2MF0sNDA6dnQsNDE6WCw0MjpwdCw0MzpVLDQ0OlR0LDQ1Om50LDQ2Okl0LDQ3Ok90LDQ4OkJ0LDQ5OkV0LDUwOlosNTE6eHR9KSxpKF8sWzIsMjRdLHszNjo1NSwzNTo1Niw1OkN0LDQwOnZ0LDQxOlgsNDI6cHQsNDM6VSw0NDpUdCw0NTpudCw0NjpJdCw0NzpPdCw0ODpCdCw0OTpFdCw1MDpaLDUxOnh0fSksaShfLFsyLDI1XSx7MzY6NTUsMzU6NTYsNTpDdCw0MDp2dCw0MTpYLDQyOnB0LDQzOlUsNDQ6VHQsNDU6bnQsNDY6SXQsNDc6T3QsNDg6QnQsNDk6RXQsNTA6Wiw1MTp4dH0pLGkoXyxbMiwyNl0sezM2OjU1LDM1OjU2LDU6Q3QsNDA6dnQsNDE6WCw0MjpwdCw0MzpVLDQ0OlR0LDQ1Om50LDQ2Okl0LDQ3Ok90LDQ4OkJ0LDQ5OkV0LDUwOlosNTE6eHR9KSxpKF8sWzIsMjddLHszNjo1NSwzNTo1Niw1OkN0LDQwOnZ0LDQxOlgsNDI6cHQsNDM6VSw0NDpUdCw0NTpudCw0NjpJdCw0NzpPdCw0ODpCdCw0OTpFdCw1MDpaLDUxOnh0fSksezIzOlsxLDYxXX0saShIdCxbMiwzMl0pLGkoSHQsWzIsNDhdKSxpKEh0LFsyLDQ5XSksaShIdCxbMiw1MF0pLGkoXyxbMiwxOV0sezM1OjI5LDIxOjYyLDM3OmZ0LDM4OnV0LDQwOnZ0LDQxOlgsNDI6cHQsNDM6VSw0NDpUdCw0NTpudCw0NjpJdCw0NzpPdCw0ODpCdCw0OTpFdCw1MDpafSksaShfLFsyLDIyXSx7MzU6MjksMjE6NjMsMzc6ZnQsMzg6dXQsNDA6dnQsNDE6WCw0MjpwdCw0MzpVLDQ0OlR0LDQ1Om50LDQ2Okl0LDQ3Ok90LDQ4OkJ0LDQ5OkV0LDUwOlp9KSx7MjQ6WzEsNjRdfSxpKF8sWzIsMThdLHszNjo1NSwzNTo1Niw1OkN0LDQwOnZ0LDQxOlgsNDI6cHQsNDM6VSw0NDpUdCw0NTpudCw0NjpJdCw0NzpPdCw0ODpCdCw0OTpFdCw1MDpaLDUxOnh0fSksaShfLFsyLDIxXSx7MzY6NTUsMzU6NTYsNTpDdCw0MDp2dCw0MTpYLDQyOnB0LDQzOlUsNDQ6VHQsNDU6bnQsNDY6SXQsNDc6T3QsNDg6QnQsNDk6RXQsNTA6Wiw1MTp4dH0pLGkoXyxbMiwxN10pXSxkZWZhdWx0QWN0aW9uczp7ODpbMiwxXSw5OlsyLDJdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKG1lLFZlKXtpZihWZS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKG1lKTtlbHNle3ZhciBZZT1uZXcgRXJyb3IobWUpO3Rocm93IFllLmhhc2g9VmUsWWV9fSxwYXJzZTpmdW5jdGlvbihtZSl7dmFyIFZlPXRoaXMsWWU9WzBdLGNlPVtdLGtlPVtudWxsXSx6dD1bXSxyZT10aGlzLnRhYmxlLHNlPSIiLFBlPTAsdGU9MCxNZT0yLGRlPTEsb249enQuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksbmk9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxLcz17eXk6e319O2Zvcih2YXIgd3MgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx3cykmJihLcy55eVt3c109dGhpcy55eVt3c10pO25pLnNldElucHV0KG1lLEtzLnl5KSxLcy55eS5sZXhlcj1uaSxLcy55eS5wYXJzZXI9dGhpcyx0eXBlb2YgbmkueXlsbG9jPiJ1IiYmKG5pLnl5bGxvYz17fSk7dmFyIGZvPW5pLnl5bGxvYzt6dC5wdXNoKGZvKTt2YXIgWGk9bmkub3B0aW9ucyYmbmkub3B0aW9ucy5yYW5nZXM7dHlwZW9mIEtzLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPUtzLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIEVyKCl7dmFyIEdzO3JldHVybiBHcz1jZS5wb3AoKXx8bmkubGV4KCl8fGRlLHR5cGVvZiBHcyE9Im51bWJlciImJihHcyBpbnN0YW5jZW9mIEFycmF5JiYoY2U9R3MsR3M9Y2UucG9wKCkpLEdzPVZlLnN5bWJvbHNfW0dzXXx8R3MpLEdzfWZvcih2YXIgWG4sZGksRWUsS24sSGU9e30sVGkscG4sRXMscWE7Oyl7aWYoZGk9WWVbWWUubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbZGldP0VlPXRoaXMuZGVmYXVsdEFjdGlvbnNbZGldOigoWG49PT1udWxsfHx0eXBlb2YgWG4+InUiKSYmKFhuPUVyKCkpLEVlPXJlW2RpXSYmcmVbZGldW1huXSksdHlwZW9mIEVlPiJ1Inx8IUVlLmxlbmd0aHx8IUVlWzBdKXt2YXIgTWE9IiI7cWE9W107Zm9yKFRpIGluIHJlW2RpXSl0aGlzLnRlcm1pbmFsc19bVGldJiZUaT5NZSYmcWEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1RpXSsiJyIpO25pLnNob3dQb3NpdGlvbj9NYT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhQZSsxKStgOgpgK25pLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArcWEuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tYbl18fFhuKSsiJyI6TWE9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoUGUrMSkrIjogVW5leHBlY3RlZCAiKyhYbj09ZGU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bWG5dfHxYbikrIiciKSx0aGlzLnBhcnNlRXJyb3IoTWEse3RleHQ6bmkubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1huXXx8WG4sbGluZTpuaS55eWxpbmVubyxsb2M6Zm8sZXhwZWN0ZWQ6cWF9KX1pZihFZVswXWluc3RhbmNlb2YgQXJyYXkmJkVlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrZGkrIiwgdG9rZW46ICIrWG4pO3N3aXRjaChFZVswXSl7Y2FzZSAxOlllLnB1c2goWG4pLGtlLnB1c2gobmkueXl0ZXh0KSx6dC5wdXNoKG5pLnl5bGxvYyksWWUucHVzaChFZVsxXSksWG49bnVsbCx0ZT1uaS55eWxlbmcsc2U9bmkueXl0ZXh0LFBlPW5pLnl5bGluZW5vLGZvPW5pLnl5bGxvYzticmVhaztjYXNlIDI6aWYocG49dGhpcy5wcm9kdWN0aW9uc19bRWVbMV1dWzFdLEhlLiQ9a2Vba2UubGVuZ3RoLXBuXSxIZS5fJD17Zmlyc3RfbGluZTp6dFt6dC5sZW5ndGgtKHBufHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6enRbenQubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46enRbenQubGVuZ3RoLShwbnx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp6dFt6dC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LFhpJiYoSGUuXyQucmFuZ2U9W3p0W3p0Lmxlbmd0aC0ocG58fDEpXS5yYW5nZVswXSx6dFt6dC5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxLbj10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoSGUsW3NlLHRlLFBlLEtzLnl5LEVlWzFdLGtlLHp0XS5jb25jYXQob24pKSx0eXBlb2YgS248InUiKXJldHVybiBLbjtwbiYmKFllPVllLnNsaWNlKDAsLTEqcG4qMiksa2U9a2Uuc2xpY2UoMCwtMSpwbiksenQ9enQuc2xpY2UoMCwtMSpwbikpLFllLnB1c2godGhpcy5wcm9kdWN0aW9uc19bRWVbMV1dWzBdKSxrZS5wdXNoKEhlLiQpLHp0LnB1c2goSGUuXyQpLEVzPXJlW1llW1llLmxlbmd0aC0yXV1bWWVbWWUubGVuZ3RoLTFdXSxZZS5wdXNoKEVzKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sRnQ9ZnVuY3Rpb24oKXt2YXIgU2U9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oVmUsWWUpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoVmUsWWUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKFZlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24obWUsVmUpe3JldHVybiB0aGlzLnl5PVZlfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1tZSx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgbWU9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPW1lLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1tZSx0aGlzLm1hdGNoZWQrPW1lO3ZhciBWZT1tZS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIFZlPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxtZX0sdW5wdXQ6ZnVuY3Rpb24obWUpe3ZhciBWZT1tZS5sZW5ndGgsWWU9bWUuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1tZSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtVmUpLHRoaXMub2Zmc2V0LT1WZTt2YXIgY2U9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksWWUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1ZZS5sZW5ndGgtMSk7dmFyIGtlPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpZZT8oWWUubGVuZ3RoPT09Y2UubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStjZVtjZS5sZW5ndGgtWWUubGVuZ3RoXS5sZW5ndGgtWWVbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1WZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtrZVswXSxrZVswXSt0aGlzLnl5bGVuZy1WZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKG1lKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobWUpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIG1lPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4obWUubGVuZ3RoPjIwPyIuLi4iOiIiKSttZS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBtZT10aGlzLm1hdGNoO3JldHVybiBtZS5sZW5ndGg8MjAmJihtZSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtbWUubGVuZ3RoKSksKG1lLnN1YnN0cigwLDIwKSsobWUubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBtZT10aGlzLnBhc3RJbnB1dCgpLFZlPW5ldyBBcnJheShtZS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBtZSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArVmUrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKG1lLFZlKXt2YXIgWWUsY2Usa2U7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGtlPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGtlLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLGNlPW1lWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxjZSYmKHRoaXMueXlsaW5lbm8rPWNlLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOmNlP2NlW2NlLmxlbmd0aC0xXS5sZW5ndGgtY2VbY2UubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rbWVbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9bWVbMF0sdGhpcy5tYXRjaCs9bWVbMF0sdGhpcy5tYXRjaGVzPW1lLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKG1lWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1tZVswXSxZZT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxWZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxZZSlyZXR1cm4gWWU7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIHp0IGluIGtlKXRoaXNbenRdPWtlW3p0XTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBtZSxWZSxZZSxjZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBrZT10aGlzLl9jdXJyZW50UnVsZXMoKSx6dD0wO3p0PGtlLmxlbmd0aDt6dCsrKWlmKFllPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNba2VbenRdXSksWWUmJighVmV8fFllWzBdLmxlbmd0aD5WZVswXS5sZW5ndGgpKXtpZihWZT1ZZSxjZT16dCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihtZT10aGlzLnRlc3RfbWF0Y2goWWUsa2VbenRdKSxtZSE9PSExKXJldHVybiBtZTtpZih0aGlzLl9iYWNrdHJhY2spe1ZlPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIFZlPyhtZT10aGlzLnRlc3RfbWF0Y2goVmUsa2VbY2VdKSxtZSE9PSExP21lOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgVmU9dGhpcy5uZXh0KCk7cmV0dXJuIFZlfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihWZSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKFZlKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgVmU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gVmU+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihWZSl7cmV0dXJuIFZlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoVmV8fDApLFZlPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbVmVdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKFZlKXt0aGlzLmJlZ2luKFZlKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihWZSxZZSxjZSxrZSl7c3dpdGNoKGNlKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gMzI7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpyZXR1cm4gdGhpcy5iZWdpbigidGl0bGUiKSwxMztjYXNlIDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwidGl0bGVfdmFsdWUiO2Nhc2UgNjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTU7Y2FzZSA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSA4OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxNztjYXNlIDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDEwOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDExOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEyOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDEzOnJldHVybiAyNTtjYXNlIDE0OnJldHVybiAyNztjYXNlIDE1OnJldHVybiAyNjtjYXNlIDE2OnJldHVybiAyODtjYXNlIDE3OnJldHVybiAyOTtjYXNlIDE4OnJldHVybiAzMDtjYXNlIDE5OnJldHVybiAzMTtjYXNlIDIwOnRoaXMuYmVnaW4oIm1kX3N0cmluZyIpO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIk1EX1NUUiI7Y2FzZSAyMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDI0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI1OnJldHVybiJTVFIiO2Nhc2UgMjY6cmV0dXJuIHRoaXMuYmVnaW4oInBvaW50X3N0YXJ0IiksMjI7Y2FzZSAyNzpyZXR1cm4gdGhpcy5iZWdpbigicG9pbnRfeCIpLDIzO2Nhc2UgMjg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjk6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oInBvaW50X3kiKTticmVhaztjYXNlIDMwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjQ7Y2FzZSAzMTpyZXR1cm4gNjtjYXNlIDMyOnJldHVybiA0MztjYXNlIDMzOnJldHVybiJDT0xPTiI7Y2FzZSAzNDpyZXR1cm4gNDU7Y2FzZSAzNTpyZXR1cm4gNDQ7Y2FzZSAzNjpyZXR1cm4gNDY7Y2FzZSAzNzpyZXR1cm4gNDY7Y2FzZSAzODpyZXR1cm4gNDc7Y2FzZSAzOTpyZXR1cm4gNDk7Y2FzZSA0MDpyZXR1cm4gNTA7Y2FzZSA0MTpyZXR1cm4gNDg7Y2FzZSA0MjpyZXR1cm4gNDE7Y2FzZSA0MzpyZXR1cm4gNTE7Y2FzZSA0NDpyZXR1cm4gNDI7Y2FzZSA0NTpyZXR1cm4gNTtjYXNlIDQ2OnJldHVybiAzMztjYXNlIDQ3OnJldHVybiA0MDtjYXNlIDQ4OnJldHVybiAzNH19LHJ1bGVzOlsvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/OltcblxyXSspL2ksL14oPzolJVteXG5dKikvaSwvXig/OnRpdGxlXGIpL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OiAqeC1heGlzICopL2ksL14oPzogKnktYXhpcyAqKS9pLC9eKD86ICotLSs+ICopL2ksL14oPzogKnF1YWRyYW50LTEgKikvaSwvXig/OiAqcXVhZHJhbnQtMiAqKS9pLC9eKD86ICpxdWFkcmFudC0zICopL2ksL14oPzogKnF1YWRyYW50LTQgKikvaSwvXig/OlsiXVtgXSkvaSwvXig/OlteYCJdKykvaSwvXig/OltgXVsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86XHMqOlxzKlxbXHMqKS9pLC9eKD86KDEpfCgwKC5cZCspPykpL2ksL14oPzpccypcXSAqKS9pLC9eKD86XHMqLFxzKikvaSwvXig/OigxKXwoMCguXGQrKT8pKS9pLC9eKD86ICpxdWFkcmFudENoYXJ0ICopL2ksL14oPzpbQS1aYS16XSspL2ksL14oPzo6KS9pLC9eKD86XCspL2ksL14oPzosKS9pLC9eKD86PSkvaSwvXig/Oj0pL2ksL14oPzpcKikvaSwvXig/OiMpL2ksL14oPzpbXF9dKS9pLC9eKD86XC4pL2ksL14oPzomKS9pLC9eKD86LSkvaSwvXig/OlswLTldKykvaSwvXig/OlxzKS9pLC9eKD86OykvaSwvXig/OlshIiMkJSYnKissLS5gP1xcXy9dKS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7cG9pbnRfeTp7cnVsZXM6WzMwXSxpbmNsdXNpdmU6ITF9LHBvaW50X3g6e3J1bGVzOlsyOV0saW5jbHVzaXZlOiExfSxwb2ludF9zdGFydDp7cnVsZXM6WzI3LDI4XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMSwxMl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls5XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzddLGluY2x1c2l2ZTohMX0sdGl0bGU6e3J1bGVzOls1XSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzIxLDIyXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzI0LDI1XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNiw4LDEwLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIzLDI2LDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIFNlfSgpO0xlLmxleGVyPUZ0O2Z1bmN0aW9uIGduKCl7dGhpcy55eT17fX1yZXR1cm4gZ24ucHJvdG90eXBlPUxlLExlLlBhcnNlcj1nbixuZXcgZ259KCk7YWd0LnBhcnNlcj1hZ3Q7Y29uc3QgaUhlPWFndCxtZz1YMXQoKTtjbGFzcyBzSGV7Y29uc3RydWN0b3IoKXt0aGlzLmNvbmZpZz10aGlzLmdldERlZmF1bHRDb25maWcoKSx0aGlzLnRoZW1lQ29uZmlnPXRoaXMuZ2V0RGVmYXVsdFRoZW1lQ29uZmlnKCksdGhpcy5kYXRhPXRoaXMuZ2V0RGVmYXVsdERhdGEoKX1nZXREZWZhdWx0RGF0YSgpe3JldHVybnt0aXRsZVRleHQ6IiIscXVhZHJhbnQxVGV4dDoiIixxdWFkcmFudDJUZXh0OiIiLHF1YWRyYW50M1RleHQ6IiIscXVhZHJhbnQ0VGV4dDoiIix4QXhpc0xlZnRUZXh0OiIiLHhBeGlzUmlnaHRUZXh0OiIiLHlBeGlzQm90dG9tVGV4dDoiIix5QXhpc1RvcFRleHQ6IiIscG9pbnRzOltdfX1nZXREZWZhdWx0Q29uZmlnKCl7dmFyIGEsZixwLHcsbSxiLEUsXyxBLEksQixOLFIseixXLGV0LHN0LGF0O3JldHVybntzaG93WEF4aXM6ITAsc2hvd1lBeGlzOiEwLHNob3dUaXRsZTohMCxjaGFydEhlaWdodDooKGE9WmgucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOmEuY2hhcnRXaWR0aCl8fDUwMCxjaGFydFdpZHRoOigoZj1aaC5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6Zi5jaGFydEhlaWdodCl8fDUwMCx0aXRsZVBhZGRpbmc6KChwPVpoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpwLnRpdGxlUGFkZGluZyl8fDEwLHRpdGxlRm9udFNpemU6KCh3PVpoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDp3LnRpdGxlRm9udFNpemUpfHwyMCxxdWFkcmFudFBhZGRpbmc6KChtPVpoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDptLnF1YWRyYW50UGFkZGluZyl8fDUseEF4aXNMYWJlbFBhZGRpbmc6KChiPVpoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpiLnhBeGlzTGFiZWxQYWRkaW5nKXx8NSx5QXhpc0xhYmVsUGFkZGluZzooKEU9WmgucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOkUueUF4aXNMYWJlbFBhZGRpbmcpfHw1LHhBeGlzTGFiZWxGb250U2l6ZTooKF89WmgucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOl8ueEF4aXNMYWJlbEZvbnRTaXplKXx8MTYseUF4aXNMYWJlbEZvbnRTaXplOigoQT1aaC5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6QS55QXhpc0xhYmVsRm9udFNpemUpfHwxNixxdWFkcmFudExhYmVsRm9udFNpemU6KChJPVpoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpJLnF1YWRyYW50TGFiZWxGb250U2l6ZSl8fDE2LHF1YWRyYW50VGV4dFRvcFBhZGRpbmc6KChCPVpoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpCLnF1YWRyYW50VGV4dFRvcFBhZGRpbmcpfHw1LHBvaW50VGV4dFBhZGRpbmc6KChOPVpoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpOLnBvaW50VGV4dFBhZGRpbmcpfHw1LHBvaW50TGFiZWxGb250U2l6ZTooKFI9WmgucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOlIucG9pbnRMYWJlbEZvbnRTaXplKXx8MTIscG9pbnRSYWRpdXM6KCh6PVpoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDp6LnBvaW50UmFkaXVzKXx8NSx4QXhpc1Bvc2l0aW9uOigoVz1aaC5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6Vy54QXhpc1Bvc2l0aW9uKXx8InRvcCIseUF4aXNQb3NpdGlvbjooKGV0PVpoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpldC55QXhpc1Bvc2l0aW9uKXx8ImxlZnQiLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDooKHN0PVpoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpzdC5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgpfHwxLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDooKGF0PVpoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDphdC5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgpfHwyfX1nZXREZWZhdWx0VGhlbWVDb25maWcoKXtyZXR1cm57cXVhZHJhbnQxRmlsbDptZy5xdWFkcmFudDFGaWxsLHF1YWRyYW50MkZpbGw6bWcucXVhZHJhbnQyRmlsbCxxdWFkcmFudDNGaWxsOm1nLnF1YWRyYW50M0ZpbGwscXVhZHJhbnQ0RmlsbDptZy5xdWFkcmFudDRGaWxsLHF1YWRyYW50MVRleHRGaWxsOm1nLnF1YWRyYW50MVRleHRGaWxsLHF1YWRyYW50MlRleHRGaWxsOm1nLnF1YWRyYW50MlRleHRGaWxsLHF1YWRyYW50M1RleHRGaWxsOm1nLnF1YWRyYW50M1RleHRGaWxsLHF1YWRyYW50NFRleHRGaWxsOm1nLnF1YWRyYW50NFRleHRGaWxsLHF1YWRyYW50UG9pbnRGaWxsOm1nLnF1YWRyYW50UG9pbnRGaWxsLHF1YWRyYW50UG9pbnRUZXh0RmlsbDptZy5xdWFkcmFudFBvaW50VGV4dEZpbGwscXVhZHJhbnRYQXhpc1RleHRGaWxsOm1nLnF1YWRyYW50WEF4aXNUZXh0RmlsbCxxdWFkcmFudFlBeGlzVGV4dEZpbGw6bWcucXVhZHJhbnRZQXhpc1RleHRGaWxsLHF1YWRyYW50VGl0bGVGaWxsOm1nLnF1YWRyYW50VGl0bGVGaWxsLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsOm1nLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsOm1nLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfX1jbGVhcigpe3RoaXMuY29uZmlnPXRoaXMuZ2V0RGVmYXVsdENvbmZpZygpLHRoaXMudGhlbWVDb25maWc9dGhpcy5nZXREZWZhdWx0VGhlbWVDb25maWcoKSx0aGlzLmRhdGE9dGhpcy5nZXREZWZhdWx0RGF0YSgpLFV0LmluZm8oImNsZWFyIGNhbGxlZCIpfXNldERhdGEoYSl7dGhpcy5kYXRhPXsuLi50aGlzLmRhdGEsLi4uYX19YWRkUG9pbnRzKGEpe3RoaXMuZGF0YS5wb2ludHM9Wy4uLmEsLi4udGhpcy5kYXRhLnBvaW50c119c2V0Q29uZmlnKGEpe1V0LnRyYWNlKCJzZXRDb25maWcgY2FsbGVkIHdpdGg6ICIsYSksdGhpcy5jb25maWc9ey4uLnRoaXMuY29uZmlnLC4uLmF9fXNldFRoZW1lQ29uZmlnKGEpe1V0LnRyYWNlKCJzZXRUaGVtZUNvbmZpZyBjYWxsZWQgd2l0aDogIixhKSx0aGlzLnRoZW1lQ29uZmlnPXsuLi50aGlzLnRoZW1lQ29uZmlnLC4uLmF9fWNhbGN1bGF0ZVNwYWNlKGEsZixwLHcpe2NvbnN0IG09dGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcqMit0aGlzLmNvbmZpZy54QXhpc0xhYmVsRm9udFNpemUsYj17dG9wOmE9PT0idG9wIiYmZj9tOjAsYm90dG9tOmE9PT0iYm90dG9tIiYmZj9tOjB9LEU9dGhpcy5jb25maWcueUF4aXNMYWJlbFBhZGRpbmcqMit0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsXz17bGVmdDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09ImxlZnQiJiZwP0U6MCxyaWdodDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09InJpZ2h0IiYmcD9FOjB9LEE9dGhpcy5jb25maWcudGl0bGVGb250U2l6ZSt0aGlzLmNvbmZpZy50aXRsZVBhZGRpbmcqMixJPXt0b3A6dz9BOjB9LEI9dGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nK18ubGVmdCxOPXRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZytiLnRvcCtJLnRvcCxSPXRoaXMuY29uZmlnLmNoYXJ0V2lkdGgtdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nKjItXy5sZWZ0LV8ucmlnaHQsej10aGlzLmNvbmZpZy5jaGFydEhlaWdodC10aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcqMi1iLnRvcC1iLmJvdHRvbS1JLnRvcCxXPVIvMixldD16LzI7cmV0dXJue3hBeGlzU3BhY2U6Yix5QXhpc1NwYWNlOl8sdGl0bGVTcGFjZTpJLHF1YWRyYW50U3BhY2U6e3F1YWRyYW50TGVmdDpCLHF1YWRyYW50VG9wOk4scXVhZHJhbnRXaWR0aDpSLHF1YWRyYW50SGFsZldpZHRoOlcscXVhZHJhbnRIZWlnaHQ6eixxdWFkcmFudEhhbGZIZWlnaHQ6ZXR9fX1nZXRBeGlzTGFiZWxzKGEsZixwLHcpe2NvbnN0e3F1YWRyYW50U3BhY2U6bSx0aXRsZVNwYWNlOmJ9PXcse3F1YWRyYW50SGFsZkhlaWdodDpFLHF1YWRyYW50SGVpZ2h0Ol8scXVhZHJhbnRMZWZ0OkEscXVhZHJhbnRIYWxmV2lkdGg6SSxxdWFkcmFudFRvcDpCLHF1YWRyYW50V2lkdGg6Tn09bSxSPSEhdGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0LHo9ISF0aGlzLmRhdGEueUF4aXNUb3BUZXh0LFc9W107cmV0dXJuIHRoaXMuZGF0YS54QXhpc0xlZnRUZXh0JiZmJiZXLnB1c2goe3RleHQ6dGhpcy5kYXRhLnhBeGlzTGVmdFRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50WEF4aXNUZXh0RmlsbCx4OkErKFI/SS8yOjApLHk6YT09PSJ0b3AiP3RoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK2IudG9wOnRoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK0IrXyt0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcsZm9udFNpemU6dGhpcy5jb25maWcueEF4aXNMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOlI/ImNlbnRlciI6ImxlZnQiLGhvcml6b250YWxQb3M6InRvcCIscm90YXRpb246MH0pLHRoaXMuZGF0YS54QXhpc1JpZ2h0VGV4dCYmZiYmVy5wdXNoKHt0ZXh0OnRoaXMuZGF0YS54QXhpc1JpZ2h0VGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRYQXhpc1RleHRGaWxsLHg6QStJKyhSP0kvMjowKSx5OmE9PT0idG9wIj90aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZytiLnRvcDp0aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZytCK18rdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLGZvbnRTaXplOnRoaXMuY29uZmlnLnhBeGlzTGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczpSPyJjZW50ZXIiOiJsZWZ0Iixob3Jpem9udGFsUG9zOiJ0b3AiLHJvdGF0aW9uOjB9KSx0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0JiZwJiZXLnB1c2goe3RleHQ6dGhpcy5kYXRhLnlBeGlzQm90dG9tVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRZQXhpc1RleHRGaWxsLHg6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJsZWZ0Ij90aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZzp0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZytBK04rdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLHk6QitfLSh6P0UvMjowKSxmb250U2l6ZTp0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsdmVydGljYWxQb3M6ej8iY2VudGVyIjoibGVmdCIsaG9yaXpvbnRhbFBvczoidG9wIixyb3RhdGlvbjotOTB9KSx0aGlzLmRhdGEueUF4aXNUb3BUZXh0JiZwJiZXLnB1c2goe3RleHQ6dGhpcy5kYXRhLnlBeGlzVG9wVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRZQXhpc1RleHRGaWxsLHg6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJsZWZ0Ij90aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZzp0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZytBK04rdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLHk6QitFLSh6P0UvMjowKSxmb250U2l6ZTp0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsdmVydGljYWxQb3M6ej8iY2VudGVyIjoibGVmdCIsaG9yaXpvbnRhbFBvczoidG9wIixyb3RhdGlvbjotOTB9KSxXfWdldFF1YWRyYW50cyhhKXtjb25zdHtxdWFkcmFudFNwYWNlOmZ9PWEse3F1YWRyYW50SGFsZkhlaWdodDpwLHF1YWRyYW50TGVmdDp3LHF1YWRyYW50SGFsZldpZHRoOm0scXVhZHJhbnRUb3A6Yn09ZixFPVt7dGV4dDp7dGV4dDp0aGlzLmRhdGEucXVhZHJhbnQxVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQxVGV4dEZpbGwseDowLHk6MCxmb250U2l6ZTp0aGlzLmNvbmZpZy5xdWFkcmFudExhYmVsRm9udFNpemUsdmVydGljYWxQb3M6ImNlbnRlciIsaG9yaXpvbnRhbFBvczoibWlkZGxlIixyb3RhdGlvbjowfSx4OncrbSx5OmIsd2lkdGg6bSxoZWlnaHQ6cCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQxRmlsbH0se3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50MlRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50MlRleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDp3LHk6Yix3aWR0aDptLGhlaWdodDpwLGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDJGaWxsfSx7dGV4dDp7dGV4dDp0aGlzLmRhdGEucXVhZHJhbnQzVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQzVGV4dEZpbGwseDowLHk6MCxmb250U2l6ZTp0aGlzLmNvbmZpZy5xdWFkcmFudExhYmVsRm9udFNpemUsdmVydGljYWxQb3M6ImNlbnRlciIsaG9yaXpvbnRhbFBvczoibWlkZGxlIixyb3RhdGlvbjowfSx4OncseTpiK3Asd2lkdGg6bSxoZWlnaHQ6cCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQzRmlsbH0se3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50NFRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50NFRleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDp3K20seTpiK3Asd2lkdGg6bSxoZWlnaHQ6cCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQ0RmlsbH1dO2Zvcihjb25zdCBfIG9mIEUpXy50ZXh0Lng9Xy54K18ud2lkdGgvMix0aGlzLmRhdGEucG9pbnRzLmxlbmd0aD09PTA/KF8udGV4dC55PV8ueStfLmhlaWdodC8yLF8udGV4dC5ob3Jpem9udGFsUG9zPSJtaWRkbGUiKTooXy50ZXh0Lnk9Xy55K3RoaXMuY29uZmlnLnF1YWRyYW50VGV4dFRvcFBhZGRpbmcsXy50ZXh0Lmhvcml6b250YWxQb3M9InRvcCIpO3JldHVybiBFfWdldFF1YWRyYW50UG9pbnRzKGEpe2NvbnN0e3F1YWRyYW50U3BhY2U6Zn09YSx7cXVhZHJhbnRIZWlnaHQ6cCxxdWFkcmFudExlZnQ6dyxxdWFkcmFudFRvcDptLHF1YWRyYW50V2lkdGg6Yn09ZixFPUFBKCkuZG9tYWluKFswLDFdKS5yYW5nZShbdyxiK3ddKSxfPUFBKCkuZG9tYWluKFswLDFdKS5yYW5nZShbcCttLG1dKTtyZXR1cm4gdGhpcy5kYXRhLnBvaW50cy5tYXAoST0+KHt4OkUoSS54KSx5Ol8oSS55KSxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRQb2ludEZpbGwscmFkaXVzOnRoaXMuY29uZmlnLnBvaW50UmFkaXVzLHRleHQ6e3RleHQ6SS50ZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFBvaW50VGV4dEZpbGwseDpFKEkueCkseTpfKEkueSkrdGhpcy5jb25maWcucG9pbnRUZXh0UGFkZGluZyx2ZXJ0aWNhbFBvczoiY2VudGVyIixob3Jpem9udGFsUG9zOiJ0b3AiLGZvbnRTaXplOnRoaXMuY29uZmlnLnBvaW50TGFiZWxGb250U2l6ZSxyb3RhdGlvbjowfX0pKX1nZXRCb3JkZXJzKGEpe2NvbnN0IGY9dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLzIse3F1YWRyYW50U3BhY2U6cH09YSx7cXVhZHJhbnRIYWxmSGVpZ2h0OncscXVhZHJhbnRIZWlnaHQ6bSxxdWFkcmFudExlZnQ6YixxdWFkcmFudEhhbGZXaWR0aDpFLHF1YWRyYW50VG9wOl8scXVhZHJhbnRXaWR0aDpBfT1wO3JldHVyblt7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpiLWYseTE6Xyx4MjpiK0ErZix5MjpffSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpiK0EseTE6XytmLHgyOmIrQSx5MjpfK20tZn0se3N0cm9rZUZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxzdHJva2VXaWR0aDp0aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgseDE6Yi1mLHkxOl8rbSx4MjpiK0ErZix5MjpfK219LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOmIseTE6XytmLHgyOmIseTI6XyttLWZ9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOmIrRSx5MTpfK2YseDI6YitFLHkyOl8rbS1mfSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpiK2YseTE6Xyt3LHgyOmIrQS1mLHkyOl8rd31dfWdldFRpdGxlKGEpe2lmKGEpcmV0dXJue3RleHQ6dGhpcy5kYXRhLnRpdGxlVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRUaXRsZUZpbGwsZm9udFNpemU6dGhpcy5jb25maWcudGl0bGVGb250U2l6ZSxob3Jpem9udGFsUG9zOiJ0b3AiLHZlcnRpY2FsUG9zOiJjZW50ZXIiLHJvdGF0aW9uOjAseTp0aGlzLmNvbmZpZy50aXRsZVBhZGRpbmcseDp0aGlzLmNvbmZpZy5jaGFydFdpZHRoLzJ9fWJ1aWxkKCl7Y29uc3QgYT10aGlzLmNvbmZpZy5zaG93WEF4aXMmJiEhKHRoaXMuZGF0YS54QXhpc0xlZnRUZXh0fHx0aGlzLmRhdGEueEF4aXNSaWdodFRleHQpLGY9dGhpcy5jb25maWcuc2hvd1lBeGlzJiYhISh0aGlzLmRhdGEueUF4aXNUb3BUZXh0fHx0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0KSxwPXRoaXMuY29uZmlnLnNob3dUaXRsZSYmISF0aGlzLmRhdGEudGl0bGVUZXh0LHc9dGhpcy5kYXRhLnBvaW50cy5sZW5ndGg+MD8iYm90dG9tIjp0aGlzLmNvbmZpZy54QXhpc1Bvc2l0aW9uLG09dGhpcy5jYWxjdWxhdGVTcGFjZSh3LGEsZixwKTtyZXR1cm57cG9pbnRzOnRoaXMuZ2V0UXVhZHJhbnRQb2ludHMobSkscXVhZHJhbnRzOnRoaXMuZ2V0UXVhZHJhbnRzKG0pLGF4aXNMYWJlbHM6dGhpcy5nZXRBeGlzTGFiZWxzKHcsYSxmLG0pLGJvcmRlckxpbmVzOnRoaXMuZ2V0Qm9yZGVycyhtKSx0aXRsZTp0aGlzLmdldFRpdGxlKHApfX19Y29uc3QgYUhlPU9lKCk7ZnVuY3Rpb24gQjUoaSl7cmV0dXJuIFExKGkudHJpbSgpLGFIZSl9Y29uc3QgXzA9bmV3IHNIZTtmdW5jdGlvbiBvSGUoaSl7XzAuc2V0RGF0YSh7cXVhZHJhbnQxVGV4dDpCNShpLnRleHQpfSl9ZnVuY3Rpb24gY0hlKGkpe18wLnNldERhdGEoe3F1YWRyYW50MlRleHQ6QjUoaS50ZXh0KX0pfWZ1bmN0aW9uIHVIZShpKXtfMC5zZXREYXRhKHtxdWFkcmFudDNUZXh0OkI1KGkudGV4dCl9KX1mdW5jdGlvbiBsSGUoaSl7XzAuc2V0RGF0YSh7cXVhZHJhbnQ0VGV4dDpCNShpLnRleHQpfSl9ZnVuY3Rpb24gaEhlKGkpe18wLnNldERhdGEoe3hBeGlzTGVmdFRleHQ6QjUoaS50ZXh0KX0pfWZ1bmN0aW9uIGZIZShpKXtfMC5zZXREYXRhKHt4QXhpc1JpZ2h0VGV4dDpCNShpLnRleHQpfSl9ZnVuY3Rpb24gZEhlKGkpe18wLnNldERhdGEoe3lBeGlzVG9wVGV4dDpCNShpLnRleHQpfSl9ZnVuY3Rpb24gZ0hlKGkpe18wLnNldERhdGEoe3lBeGlzQm90dG9tVGV4dDpCNShpLnRleHQpfSl9ZnVuY3Rpb24gcEhlKGksYSxmKXtfMC5hZGRQb2ludHMoW3t4OmEseTpmLHRleHQ6QjUoaS50ZXh0KX1dKX1mdW5jdGlvbiBiSGUoaSl7XzAuc2V0Q29uZmlnKHtjaGFydFdpZHRoOml9KX1mdW5jdGlvbiB3SGUoaSl7XzAuc2V0Q29uZmlnKHtjaGFydEhlaWdodDppfSl9ZnVuY3Rpb24gdkhlKCl7Y29uc3QgaT1PZSgpLHt0aGVtZVZhcmlhYmxlczphLHF1YWRyYW50Q2hhcnQ6Zn09aTtyZXR1cm4gZiYmXzAuc2V0Q29uZmlnKGYpLF8wLnNldFRoZW1lQ29uZmlnKHtxdWFkcmFudDFGaWxsOmEucXVhZHJhbnQxRmlsbCxxdWFkcmFudDJGaWxsOmEucXVhZHJhbnQyRmlsbCxxdWFkcmFudDNGaWxsOmEucXVhZHJhbnQzRmlsbCxxdWFkcmFudDRGaWxsOmEucXVhZHJhbnQ0RmlsbCxxdWFkcmFudDFUZXh0RmlsbDphLnF1YWRyYW50MVRleHRGaWxsLHF1YWRyYW50MlRleHRGaWxsOmEucXVhZHJhbnQyVGV4dEZpbGwscXVhZHJhbnQzVGV4dEZpbGw6YS5xdWFkcmFudDNUZXh0RmlsbCxxdWFkcmFudDRUZXh0RmlsbDphLnF1YWRyYW50NFRleHRGaWxsLHF1YWRyYW50UG9pbnRGaWxsOmEucXVhZHJhbnRQb2ludEZpbGwscXVhZHJhbnRQb2ludFRleHRGaWxsOmEucXVhZHJhbnRQb2ludFRleHRGaWxsLHF1YWRyYW50WEF4aXNUZXh0RmlsbDphLnF1YWRyYW50WEF4aXNUZXh0RmlsbCxxdWFkcmFudFlBeGlzVGV4dEZpbGw6YS5xdWFkcmFudFlBeGlzVGV4dEZpbGwscXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw6YS5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxxdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbDphLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHF1YWRyYW50VGl0bGVGaWxsOmEucXVhZHJhbnRUaXRsZUZpbGx9KSxfMC5zZXREYXRhKHt0aXRsZVRleHQ6cGcoKX0pLF8wLmJ1aWxkKCl9Y29uc3QgbUhlPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6aUhlLGRiOntzZXRXaWR0aDpiSGUsc2V0SGVpZ2h0OndIZSxzZXRRdWFkcmFudDFUZXh0Om9IZSxzZXRRdWFkcmFudDJUZXh0OmNIZSxzZXRRdWFkcmFudDNUZXh0OnVIZSxzZXRRdWFkcmFudDRUZXh0OmxIZSxzZXRYQXhpc0xlZnRUZXh0OmhIZSxzZXRYQXhpc1JpZ2h0VGV4dDpmSGUsc2V0WUF4aXNUb3BUZXh0OmRIZSxzZXRZQXhpc0JvdHRvbVRleHQ6Z0hlLGFkZFBvaW50OnBIZSxnZXRRdWFkcmFudERhdGE6dkhlLGNsZWFyOmZ1bmN0aW9uKCl7XzAuY2xlYXIoKSxoZygpfSxzZXRBY2NUaXRsZTpFMCxnZXRBY2NUaXRsZTpmZyxzZXREaWFncmFtVGl0bGU6TmIsZ2V0RGlhZ3JhbVRpdGxlOnBnLGdldEFjY0Rlc2NyaXB0aW9uOmdnLHNldEFjY0Rlc2NyaXB0aW9uOmRnfSxyZW5kZXJlcjp7ZHJhdzooaSxhLGYscCk9Pnt2YXIgdnQsWCxwdDtmdW5jdGlvbiB3KFUpe3JldHVybiBVPT09InRvcCI/ImhhbmdpbmciOiJtaWRkbGUifWZ1bmN0aW9uIG0oVSl7cmV0dXJuIFU9PT0ibGVmdCI/InN0YXJ0IjoibWlkZGxlIn1mdW5jdGlvbiBiKFUpe3JldHVybmB0cmFuc2xhdGUoJHtVLnh9LCAke1UueX0pIHJvdGF0ZSgke1Uucm90YXRpb258fDB9KWB9Y29uc3QgRT1PZSgpO1V0LmRlYnVnKGBSZW5kZXJpbmcgcXVhZHJhbnQgY2hhcnQKYCtpKTtjb25zdCBfPUUuc2VjdXJpdHlMZXZlbDtsZXQgQTtfPT09InNhbmRib3giJiYoQT15cigiI2kiK2EpKTtjb25zdCBCPXlyKF89PT0ic2FuZGJveCI/QS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5Iikuc2VsZWN0KGBbaWQ9IiR7YX0iXWApLE49Qi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm1haW4iKSxSPSgodnQ9RS5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6dnQuY2hhcnRXaWR0aCl8fDUwMCx6PSgoWD1FLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpYLmNoYXJ0SGVpZ2h0KXx8NTAwO2swKEIseixSLCgocHQ9RS5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6cHQudXNlTWF4V2lkdGgpfHwhMCksQi5hdHRyKCJ2aWV3Qm94IiwiMCAwICIrUisiICIreikscC5kYi5zZXRIZWlnaHQoeikscC5kYi5zZXRXaWR0aChSKTtjb25zdCBXPXAuZGIuZ2V0UXVhZHJhbnREYXRhKCksZXQ9Ti5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInF1YWRyYW50cyIpLHN0PU4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJib3JkZXIiKSxhdD1OLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZGF0YS1wb2ludHMiKSxidD1OLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWxzIiksbXQ9Ti5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpdGxlIik7Vy50aXRsZSYmbXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiZmlsbCIsVy50aXRsZS5maWxsKS5hdHRyKCJmb250LXNpemUiLFcudGl0bGUuZm9udFNpemUpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIix3KFcudGl0bGUuaG9yaXpvbnRhbFBvcykpLmF0dHIoInRleHQtYW5jaG9yIixtKFcudGl0bGUudmVydGljYWxQb3MpKS5hdHRyKCJ0cmFuc2Zvcm0iLGIoVy50aXRsZSkpLnRleHQoVy50aXRsZS50ZXh0KSxXLmJvcmRlckxpbmVzJiZzdC5zZWxlY3RBbGwoImxpbmUiKS5kYXRhKFcuYm9yZGVyTGluZXMpLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLFU9PlUueDEpLmF0dHIoInkxIixVPT5VLnkxKS5hdHRyKCJ4MiIsVT0+VS54MikuYXR0cigieTIiLFU9PlUueTIpLnN0eWxlKCJzdHJva2UiLFU9PlUuc3Ryb2tlRmlsbCkuc3R5bGUoInN0cm9rZS13aWR0aCIsVT0+VS5zdHJva2VXaWR0aCk7Y29uc3QgeXQ9ZXQuc2VsZWN0QWxsKCJnLnF1YWRyYW50IikuZGF0YShXLnF1YWRyYW50cykuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInF1YWRyYW50Iik7eXQuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsVT0+VS54KS5hdHRyKCJ5IixVPT5VLnkpLmF0dHIoIndpZHRoIixVPT5VLndpZHRoKS5hdHRyKCJoZWlnaHQiLFU9PlUuaGVpZ2h0KS5hdHRyKCJmaWxsIixVPT5VLmZpbGwpLHl0LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImZpbGwiLFU9PlUudGV4dC5maWxsKS5hdHRyKCJmb250LXNpemUiLFU9PlUudGV4dC5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLFU9PncoVS50ZXh0Lmhvcml6b250YWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsVT0+bShVLnRleHQudmVydGljYWxQb3MpKS5hdHRyKCJ0cmFuc2Zvcm0iLFU9PmIoVS50ZXh0KSkudGV4dChVPT5VLnRleHQudGV4dCksYnQuc2VsZWN0QWxsKCJnLmxhYmVsIikuZGF0YShXLmF4aXNMYWJlbHMpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnRleHQoVT0+VS50ZXh0KS5hdHRyKCJmaWxsIixVPT5VLmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIsVT0+VS5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLFU9PncoVS5ob3Jpem9udGFsUG9zKSkuYXR0cigidGV4dC1hbmNob3IiLFU9Pm0oVS52ZXJ0aWNhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIsVT0+YihVKSk7Y29uc3QgdXQ9YXQuc2VsZWN0QWxsKCJnLmRhdGEtcG9pbnQiKS5kYXRhKFcucG9pbnRzKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZGF0YS1wb2ludCIpO3V0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLFU9PlUueCkuYXR0cigiY3kiLFU9PlUueSkuYXR0cigiciIsVT0+VS5yYWRpdXMpLmF0dHIoImZpbGwiLFU9PlUuZmlsbCksdXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkudGV4dChVPT5VLnRleHQudGV4dCkuYXR0cigiZmlsbCIsVT0+VS50ZXh0LmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIsVT0+VS50ZXh0LmZvbnRTaXplKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsVT0+dyhVLnRleHQuaG9yaXpvbnRhbFBvcykpLmF0dHIoInRleHQtYW5jaG9yIixVPT5tKFUudGV4dC52ZXJ0aWNhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIsVT0+YihVLnRleHQpKX19LHN0eWxlczooKT0+IiJ9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBvZ3Q9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihPdCxCdCxFdCxaKXtmb3IoRXQ9RXR8fHt9LFo9T3QubGVuZ3RoO1otLTtFdFtPdFtaXV09QnQpO3JldHVybiBFdH0sYT1bMSwxMCwxMiwxNCwxNiwxOCwxOSwyMSwyM10sZj1bMiw2XSxwPVsxLDNdLHc9WzEsNV0sbT1bMSw2XSxiPVsxLDddLEU9WzEsNSwxMCwxMiwxNCwxNiwxOCwxOSwyMSwyMywzNCwzNSwzNl0sXz1bMSwyNV0sQT1bMSwyNl0sST1bMSwyOF0sQj1bMSwyOV0sTj1bMSwzMF0sUj1bMSwzMV0sej1bMSwzMl0sVz1bMSwzM10sZXQ9WzEsMzRdLHN0PVsxLDM1XSxhdD1bMSwzNl0sYnQ9WzEsMzddLG10PVsxLDQzXSx5dD1bMSw0Ml0sZnQ9WzEsNDddLHV0PVsxLDUwXSx2dD1bMSwxMCwxMiwxNCwxNiwxOCwxOSwyMSwyMywzNCwzNSwzNl0sWD1bMSwxMCwxMiwxNCwxNiwxOCwxOSwyMSwyMywyNCwyNiwyNywyOCwzNCwzNSwzNl0scHQ9WzEsMTAsMTIsMTQsMTYsMTgsMTksMjEsMjMsMjQsMjYsMjcsMjgsMzQsMzUsMzYsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTBdLFU9WzEsNjRdLFR0PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxlb2w6NCxYWUNIQVJUOjUsY2hhcnRDb25maWc6Nixkb2N1bWVudDo3LENIQVJUX09SSUVOVEFUSU9OOjgsc3RhdGVtZW50OjksdGl0bGU6MTAsdGV4dDoxMSxYX0FYSVM6MTIscGFyc2VYQXhpczoxMyxZX0FYSVM6MTQscGFyc2VZQXhpczoxNSxMSU5FOjE2LHBsb3REYXRhOjE3LEJBUjoxOCxhY2NfdGl0bGU6MTksYWNjX3RpdGxlX3ZhbHVlOjIwLGFjY19kZXNjcjoyMSxhY2NfZGVzY3JfdmFsdWU6MjIsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToyMyxTUVVBUkVfQlJBQ0VTX1NUQVJUOjI0LGNvbW1hU2VwYXJhdGVkTnVtYmVyczoyNSxTUVVBUkVfQlJBQ0VTX0VORDoyNixOVU1CRVJfV0lUSF9ERUNJTUFMOjI3LENPTU1BOjI4LHhBeGlzRGF0YToyOSxiYW5kRGF0YTozMCxBUlJPV19ERUxJTUlURVI6MzEsY29tbWFTZXBhcmF0ZWRUZXh0czozMix5QXhpc0RhdGE6MzMsTkVXTElORTozNCxTRU1JOjM1LEVPRjozNixhbHBoYU51bTozNyxTVFI6MzgsTURfU1RSOjM5LGFscGhhTnVtVG9rZW46NDAsQU1QOjQxLE5VTTo0MixBTFBIQTo0MyxQTFVTOjQ0LEVRVUFMUzo0NSxNVUxUOjQ2LERPVDo0NyxCUktUOjQ4LE1JTlVTOjQ5LFVOREVSU0NPUkU6NTAsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6IlhZQ0hBUlQiLDg6IkNIQVJUX09SSUVOVEFUSU9OIiwxMDoidGl0bGUiLDEyOiJYX0FYSVMiLDE0OiJZX0FYSVMiLDE2OiJMSU5FIiwxODoiQkFSIiwxOToiYWNjX3RpdGxlIiwyMDoiYWNjX3RpdGxlX3ZhbHVlIiwyMToiYWNjX2Rlc2NyIiwyMjoiYWNjX2Rlc2NyX3ZhbHVlIiwyMzoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMjQ6IlNRVUFSRV9CUkFDRVNfU1RBUlQiLDI2OiJTUVVBUkVfQlJBQ0VTX0VORCIsMjc6Ik5VTUJFUl9XSVRIX0RFQ0lNQUwiLDI4OiJDT01NQSIsMzE6IkFSUk9XX0RFTElNSVRFUiIsMzQ6Ik5FV0xJTkUiLDM1OiJTRU1JIiwzNjoiRU9GIiwzODoiU1RSIiwzOToiTURfU1RSIiw0MToiQU1QIiw0MjoiTlVNIiw0MzoiQUxQSEEiLDQ0OiJQTFVTIiw0NToiRVFVQUxTIiw0NjoiTVVMVCIsNDc6IkRPVCIsNDg6IkJSS1QiLDQ5OiJNSU5VUyIsNTA6IlVOREVSU0NPUkUifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsM10sWzMsMl0sWzMsMV0sWzYsMV0sWzcsMF0sWzcsMl0sWzksMl0sWzksMl0sWzksMl0sWzksMl0sWzksMl0sWzksM10sWzksMl0sWzksM10sWzksMl0sWzksMl0sWzksMV0sWzE3LDNdLFsyNSwzXSxbMjUsMV0sWzEzLDFdLFsxMywyXSxbMTMsMV0sWzI5LDFdLFsyOSwzXSxbMzAsM10sWzMyLDNdLFszMiwxXSxbMTUsMV0sWzE1LDJdLFsxNSwxXSxbMzMsM10sWzQsMV0sWzQsMV0sWzQsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzM3LDFdLFszNywyXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oQnQsRXQsWixDdCx4dCxIdCxMZSl7dmFyIEZ0PUh0Lmxlbmd0aC0xO3N3aXRjaCh4dCl7Y2FzZSA1OkN0LnNldE9yaWVudGF0aW9uKEh0W0Z0XSk7YnJlYWs7Y2FzZSA5OkN0LnNldERpYWdyYW1UaXRsZShIdFtGdF0udGV4dC50cmltKCkpO2JyZWFrO2Nhc2UgMTI6Q3Quc2V0TGluZURhdGEoe3RleHQ6IiIsdHlwZToidGV4dCJ9LEh0W0Z0XSk7YnJlYWs7Y2FzZSAxMzpDdC5zZXRMaW5lRGF0YShIdFtGdC0xXSxIdFtGdF0pO2JyZWFrO2Nhc2UgMTQ6Q3Quc2V0QmFyRGF0YSh7dGV4dDoiIix0eXBlOiJ0ZXh0In0sSHRbRnRdKTticmVhaztjYXNlIDE1OkN0LnNldEJhckRhdGEoSHRbRnQtMV0sSHRbRnRdKTticmVhaztjYXNlIDE2OnRoaXMuJD1IdFtGdF0udHJpbSgpLEN0LnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxNzpjYXNlIDE4OnRoaXMuJD1IdFtGdF0udHJpbSgpLEN0LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9SHRbRnQtMV07YnJlYWs7Y2FzZSAyMDp0aGlzLiQ9W051bWJlcihIdFtGdC0yXSksLi4uSHRbRnRdXTticmVhaztjYXNlIDIxOnRoaXMuJD1bTnVtYmVyKEh0W0Z0XSldO2JyZWFrO2Nhc2UgMjI6Q3Quc2V0WEF4aXNUaXRsZShIdFtGdF0pO2JyZWFrO2Nhc2UgMjM6Q3Quc2V0WEF4aXNUaXRsZShIdFtGdC0xXSk7YnJlYWs7Y2FzZSAyNDpDdC5zZXRYQXhpc1RpdGxlKHt0eXBlOiJ0ZXh0Iix0ZXh0OiIifSk7YnJlYWs7Y2FzZSAyNTpDdC5zZXRYQXhpc0JhbmQoSHRbRnRdKTticmVhaztjYXNlIDI2OkN0LnNldFhBeGlzUmFuZ2VEYXRhKE51bWJlcihIdFtGdC0yXSksTnVtYmVyKEh0W0Z0XSkpO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPUh0W0Z0LTFdO2JyZWFrO2Nhc2UgMjg6dGhpcy4kPVtIdFtGdC0yXSwuLi5IdFtGdF1dO2JyZWFrO2Nhc2UgMjk6dGhpcy4kPVtIdFtGdF1dO2JyZWFrO2Nhc2UgMzA6Q3Quc2V0WUF4aXNUaXRsZShIdFtGdF0pO2JyZWFrO2Nhc2UgMzE6Q3Quc2V0WUF4aXNUaXRsZShIdFtGdC0xXSk7YnJlYWs7Y2FzZSAzMjpDdC5zZXRZQXhpc1RpdGxlKHt0eXBlOiJ0ZXh0Iix0ZXh0OiIifSk7YnJlYWs7Y2FzZSAzMzpDdC5zZXRZQXhpc1JhbmdlRGF0YShOdW1iZXIoSHRbRnQtMl0pLE51bWJlcihIdFtGdF0pKTticmVhaztjYXNlIDM3OnRoaXMuJD17dGV4dDpIdFtGdF0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgMzg6dGhpcy4kPXt0ZXh0Okh0W0Z0XSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSAzOTp0aGlzLiQ9e3RleHQ6SHRbRnRdLHR5cGU6Im1hcmtkb3duIn07YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9SHRbRnRdO2JyZWFrO2Nhc2UgNDE6dGhpcy4kPUh0W0Z0LTFdKyIiK0h0W0Z0XTticmVha319LHRhYmxlOltpKGEsZix7MzoxLDQ6Miw3OjQsNTpwLDM0OncsMzU6bSwzNjpifSksezE6WzNdfSxpKGEsZix7NDoyLDc6NCwzOjgsNTpwLDM0OncsMzU6bSwzNjpifSksaShhLGYsezQ6Miw3OjQsNjo5LDM6MTAsNTpwLDg6WzEsMTFdLDM0OncsMzU6bSwzNjpifSksezE6WzIsNF0sOToxMiwxMDpbMSwxM10sMTI6WzEsMTRdLDE0OlsxLDE1XSwxNjpbMSwxNl0sMTg6WzEsMTddLDE5OlsxLDE4XSwyMTpbMSwxOV0sMjM6WzEsMjBdfSxpKEUsWzIsMzRdKSxpKEUsWzIsMzVdKSxpKEUsWzIsMzZdKSx7MTpbMiwxXX0saShhLGYsezQ6Miw3OjQsMzoyMSw1OnAsMzQ6dywzNTptLDM2OmJ9KSx7MTpbMiwzXX0saShFLFsyLDVdKSxpKGEsWzIsN10sezQ6MjIsMzQ6dywzNTptLDM2OmJ9KSx7MTE6MjMsMzc6MjQsMzg6XywzOTpBLDQwOjI3LDQxOkksNDI6Qiw0MzpOLDQ0OlIsNDU6eiw0NjpXLDQ3OmV0LDQ4OnN0LDQ5OmF0LDUwOmJ0fSx7MTE6MzksMTM6MzgsMjQ6bXQsMjc6eXQsMjk6NDAsMzA6NDEsMzc6MjQsMzg6XywzOTpBLDQwOjI3LDQxOkksNDI6Qiw0MzpOLDQ0OlIsNDU6eiw0NjpXLDQ3OmV0LDQ4OnN0LDQ5OmF0LDUwOmJ0fSx7MTE6NDUsMTU6NDQsMjc6ZnQsMzM6NDYsMzc6MjQsMzg6XywzOTpBLDQwOjI3LDQxOkksNDI6Qiw0MzpOLDQ0OlIsNDU6eiw0NjpXLDQ3OmV0LDQ4OnN0LDQ5OmF0LDUwOmJ0fSx7MTE6NDksMTc6NDgsMjQ6dXQsMzc6MjQsMzg6XywzOTpBLDQwOjI3LDQxOkksNDI6Qiw0MzpOLDQ0OlIsNDU6eiw0NjpXLDQ3OmV0LDQ4OnN0LDQ5OmF0LDUwOmJ0fSx7MTE6NTIsMTc6NTEsMjQ6dXQsMzc6MjQsMzg6XywzOTpBLDQwOjI3LDQxOkksNDI6Qiw0MzpOLDQ0OlIsNDU6eiw0NjpXLDQ3OmV0LDQ4OnN0LDQ5OmF0LDUwOmJ0fSx7MjA6WzEsNTNdfSx7MjI6WzEsNTRdfSxpKHZ0LFsyLDE4XSksezE6WzIsMl19LGkodnQsWzIsOF0pLGkodnQsWzIsOV0pLGkoWCxbMiwzN10sezQwOjU1LDQxOkksNDI6Qiw0MzpOLDQ0OlIsNDU6eiw0NjpXLDQ3OmV0LDQ4OnN0LDQ5OmF0LDUwOmJ0fSksaShYLFsyLDM4XSksaShYLFsyLDM5XSksaShwdCxbMiw0MF0pLGkocHQsWzIsNDJdKSxpKHB0LFsyLDQzXSksaShwdCxbMiw0NF0pLGkocHQsWzIsNDVdKSxpKHB0LFsyLDQ2XSksaShwdCxbMiw0N10pLGkocHQsWzIsNDhdKSxpKHB0LFsyLDQ5XSksaShwdCxbMiw1MF0pLGkocHQsWzIsNTFdKSxpKHZ0LFsyLDEwXSksaSh2dCxbMiwyMl0sezMwOjQxLDI5OjU2LDI0Om10LDI3Onl0fSksaSh2dCxbMiwyNF0pLGkodnQsWzIsMjVdKSx7MzE6WzEsNTddfSx7MTE6NTksMzI6NTgsMzc6MjQsMzg6XywzOTpBLDQwOjI3LDQxOkksNDI6Qiw0MzpOLDQ0OlIsNDU6eiw0NjpXLDQ3OmV0LDQ4OnN0LDQ5OmF0LDUwOmJ0fSxpKHZ0LFsyLDExXSksaSh2dCxbMiwzMF0sezMzOjYwLDI3OmZ0fSksaSh2dCxbMiwzMl0pLHszMTpbMSw2MV19LGkodnQsWzIsMTJdKSx7MTc6NjIsMjQ6dXR9LHsyNTo2MywyNzpVfSxpKHZ0LFsyLDE0XSksezE3OjY1LDI0OnV0fSxpKHZ0LFsyLDE2XSksaSh2dCxbMiwxN10pLGkocHQsWzIsNDFdKSxpKHZ0LFsyLDIzXSksezI3OlsxLDY2XX0sezI2OlsxLDY3XX0sezI2OlsyLDI5XSwyODpbMSw2OF19LGkodnQsWzIsMzFdKSx7Mjc6WzEsNjldfSxpKHZ0LFsyLDEzXSksezI2OlsxLDcwXX0sezI2OlsyLDIxXSwyODpbMSw3MV19LGkodnQsWzIsMTVdKSxpKHZ0LFsyLDI2XSksaSh2dCxbMiwyN10pLHsxMTo1OSwzMjo3MiwzNzoyNCwzODpfLDM5OkEsNDA6MjcsNDE6SSw0MjpCLDQzOk4sNDQ6Uiw0NTp6LDQ2OlcsNDc6ZXQsNDg6c3QsNDk6YXQsNTA6YnR9LGkodnQsWzIsMzNdKSxpKHZ0LFsyLDE5XSksezI1OjczLDI3OlV9LHsyNjpbMiwyOF19LHsyNjpbMiwyMF19XSxkZWZhdWx0QWN0aW9uczp7ODpbMiwxXSwxMDpbMiwzXSwyMTpbMiwyXSw3MjpbMiwyOF0sNzM6WzIsMjBdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKEJ0LEV0KXtpZihFdC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKEJ0KTtlbHNle3ZhciBaPW5ldyBFcnJvcihCdCk7dGhyb3cgWi5oYXNoPUV0LFp9fSxwYXJzZTpmdW5jdGlvbihCdCl7dmFyIEV0PXRoaXMsWj1bMF0sQ3Q9W10seHQ9W251bGxdLEh0PVtdLExlPXRoaXMudGFibGUsRnQ9IiIsZ249MCxTZT0wLG1lPTIsVmU9MSxZZT1IdC5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxjZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLGtlPXt5eTp7fX07Zm9yKHZhciB6dCBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHp0KSYmKGtlLnl5W3p0XT10aGlzLnl5W3p0XSk7Y2Uuc2V0SW5wdXQoQnQsa2UueXkpLGtlLnl5LmxleGVyPWNlLGtlLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBjZS55eWxsb2M+InUiJiYoY2UueXlsbG9jPXt9KTt2YXIgcmU9Y2UueXlsbG9jO0h0LnB1c2gocmUpO3ZhciBzZT1jZS5vcHRpb25zJiZjZS5vcHRpb25zLnJhbmdlczt0eXBlb2Yga2UueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9a2UueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gUGUoKXt2YXIgWG47cmV0dXJuIFhuPUN0LnBvcCgpfHxjZS5sZXgoKXx8VmUsdHlwZW9mIFhuIT0ibnVtYmVyIiYmKFhuIGluc3RhbmNlb2YgQXJyYXkmJihDdD1YbixYbj1DdC5wb3AoKSksWG49RXQuc3ltYm9sc19bWG5dfHxYbiksWG59Zm9yKHZhciB0ZSxNZSxkZSxvbixuaT17fSxLcyx3cyxmbyxYaTs7KXtpZihNZT1aW1oubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbTWVdP2RlPXRoaXMuZGVmYXVsdEFjdGlvbnNbTWVdOigodGU9PT1udWxsfHx0eXBlb2YgdGU+InUiKSYmKHRlPVBlKCkpLGRlPUxlW01lXSYmTGVbTWVdW3RlXSksdHlwZW9mIGRlPiJ1Inx8IWRlLmxlbmd0aHx8IWRlWzBdKXt2YXIgRXI9IiI7WGk9W107Zm9yKEtzIGluIExlW01lXSl0aGlzLnRlcm1pbmFsc19bS3NdJiZLcz5tZSYmWGkucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0tzXSsiJyIpO2NlLnNob3dQb3NpdGlvbj9Fcj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhnbisxKStgOgpgK2NlLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArWGkuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t0ZV18fHRlKSsiJyI6RXI9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoZ24rMSkrIjogVW5leHBlY3RlZCAiKyh0ZT09VmU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bdGVdfHx0ZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoRXIse3RleHQ6Y2UubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3RlXXx8dGUsbGluZTpjZS55eWxpbmVubyxsb2M6cmUsZXhwZWN0ZWQ6WGl9KX1pZihkZVswXWluc3RhbmNlb2YgQXJyYXkmJmRlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrTWUrIiwgdG9rZW46ICIrdGUpO3N3aXRjaChkZVswXSl7Y2FzZSAxOloucHVzaCh0ZSkseHQucHVzaChjZS55eXRleHQpLEh0LnB1c2goY2UueXlsbG9jKSxaLnB1c2goZGVbMV0pLHRlPW51bGwsU2U9Y2UueXlsZW5nLEZ0PWNlLnl5dGV4dCxnbj1jZS55eWxpbmVubyxyZT1jZS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKHdzPXRoaXMucHJvZHVjdGlvbnNfW2RlWzFdXVsxXSxuaS4kPXh0W3h0Lmxlbmd0aC13c10sbmkuXyQ9e2ZpcnN0X2xpbmU6SHRbSHQubGVuZ3RoLSh3c3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOkh0W0h0Lmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOkh0W0h0Lmxlbmd0aC0od3N8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46SHRbSHQubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxzZSYmKG5pLl8kLnJhbmdlPVtIdFtIdC5sZW5ndGgtKHdzfHwxKV0ucmFuZ2VbMF0sSHRbSHQubGVuZ3RoLTFdLnJhbmdlWzFdXSksb249dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KG5pLFtGdCxTZSxnbixrZS55eSxkZVsxXSx4dCxIdF0uY29uY2F0KFllKSksdHlwZW9mIG9uPCJ1IilyZXR1cm4gb247d3MmJihaPVouc2xpY2UoMCwtMSp3cyoyKSx4dD14dC5zbGljZSgwLC0xKndzKSxIdD1IdC5zbGljZSgwLC0xKndzKSksWi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2RlWzFdXVswXSkseHQucHVzaChuaS4kKSxIdC5wdXNoKG5pLl8kKSxmbz1MZVtaW1oubGVuZ3RoLTJdXVtaW1oubGVuZ3RoLTFdXSxaLnB1c2goZm8pO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxudD1mdW5jdGlvbigpe3ZhciBPdD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihFdCxaKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKEV0LFopO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEV0KX0sc2V0SW5wdXQ6ZnVuY3Rpb24oQnQsRXQpe3JldHVybiB0aGlzLnl5PUV0fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1CdCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgQnQ9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPUJ0LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1CdCx0aGlzLm1hdGNoZWQrPUJ0O3ZhciBFdD1CdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEV0Pyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxCdH0sdW5wdXQ6ZnVuY3Rpb24oQnQpe3ZhciBFdD1CdC5sZW5ndGgsWj1CdC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PUJ0K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1FdCksdGhpcy5vZmZzZXQtPUV0O3ZhciBDdD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxaLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09Wi5sZW5ndGgtMSk7dmFyIHh0PXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpaPyhaLmxlbmd0aD09PUN0Lmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrQ3RbQ3QubGVuZ3RoLVoubGVuZ3RoXS5sZW5ndGgtWlswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLUV0fSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3h0WzBdLHh0WzBdK3RoaXMueXlsZW5nLUV0XSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oQnQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShCdCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgQnQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihCdC5sZW5ndGg+MjA/Ii4uLiI6IiIpK0J0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIEJ0PXRoaXMubWF0Y2g7cmV0dXJuIEJ0Lmxlbmd0aDwyMCYmKEJ0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1CdC5sZW5ndGgpKSwoQnQuc3Vic3RyKDAsMjApKyhCdC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIEJ0PXRoaXMucGFzdElucHV0KCksRXQ9bmV3IEFycmF5KEJ0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIEJ0K3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtFdCsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oQnQsRXQpe3ZhciBaLEN0LHh0O2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJih4dD17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih4dC55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxDdD1CdFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksQ3QmJih0aGlzLnl5bGluZW5vKz1DdC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpDdD9DdFtDdC5sZW5ndGgtMV0ubGVuZ3RoLUN0W0N0Lmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK0J0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPUJ0WzBdLHRoaXMubWF0Y2grPUJ0WzBdLHRoaXMubWF0Y2hlcz1CdCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShCdFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9QnRbMF0sWj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxFdCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxaKXJldHVybiBaO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBIdCBpbiB4dCl0aGlzW0h0XT14dFtIdF07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgQnQsRXQsWixDdDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciB4dD10aGlzLl9jdXJyZW50UnVsZXMoKSxIdD0wO0h0PHh0Lmxlbmd0aDtIdCsrKWlmKFo9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1t4dFtIdF1dKSxaJiYoIUV0fHxaWzBdLmxlbmd0aD5FdFswXS5sZW5ndGgpKXtpZihFdD1aLEN0PUh0LHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKEJ0PXRoaXMudGVzdF9tYXRjaChaLHh0W0h0XSksQnQhPT0hMSlyZXR1cm4gQnQ7aWYodGhpcy5fYmFja3RyYWNrKXtFdD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBFdD8oQnQ9dGhpcy50ZXN0X21hdGNoKEV0LHh0W0N0XSksQnQhPT0hMT9CdDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIEV0PXRoaXMubmV4dCgpO3JldHVybiBFdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oRXQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChFdCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIEV0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIEV0PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oRXQpe3JldHVybiBFdD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKEV0fHwwKSxFdD49MD90aGlzLmNvbmRpdGlvblN0YWNrW0V0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihFdCl7dGhpcy5iZWdpbihFdCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oRXQsWixDdCx4dCl7c3dpdGNoKEN0KXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDM0O2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDM0O2Nhc2UgNDpyZXR1cm4gMzQ7Y2FzZSA1OmJyZWFrO2Nhc2UgNjpyZXR1cm4gMTA7Y2FzZSA3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYWNjX3RpdGxlIiksMTk7Y2FzZSA4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSA5OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYWNjX2Rlc2NyIiksMjE7Y2FzZSAxMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgMTE6dGhpcy5wdXNoU3RhdGUoImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDEyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEzOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE0OnJldHVybiA1O2Nhc2UgMTU6cmV0dXJuIDg7Y2FzZSAxNjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImF4aXNfZGF0YSIpLCJYX0FYSVMiO2Nhc2UgMTc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJheGlzX2RhdGEiKSwiWV9BWElTIjtjYXNlIDE4OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYXhpc19iYW5kX2RhdGEiKSwyNDtjYXNlIDE5OnJldHVybiAzMTtjYXNlIDIwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiZGF0YSIpLDE2O2Nhc2UgMjE6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJkYXRhIiksMTg7Y2FzZSAyMjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImRhdGFfaW5uZXIiKSwyNDtjYXNlIDIzOnJldHVybiAyNztjYXNlIDI0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjY7Y2FzZSAyNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNjp0aGlzLnB1c2hTdGF0ZSgic3RyaW5nIik7YnJlYWs7Y2FzZSAyNzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyODpyZXR1cm4iU1RSIjtjYXNlIDI5OnJldHVybiAyNDtjYXNlIDMwOnJldHVybiAyNjtjYXNlIDMxOnJldHVybiA0MztjYXNlIDMyOnJldHVybiJDT0xPTiI7Y2FzZSAzMzpyZXR1cm4gNDQ7Y2FzZSAzNDpyZXR1cm4gMjg7Y2FzZSAzNTpyZXR1cm4gNDU7Y2FzZSAzNjpyZXR1cm4gNDY7Y2FzZSAzNzpyZXR1cm4gNDg7Y2FzZSAzODpyZXR1cm4gNTA7Y2FzZSAzOTpyZXR1cm4gNDc7Y2FzZSA0MDpyZXR1cm4gNDE7Y2FzZSA0MTpyZXR1cm4gNDk7Y2FzZSA0MjpyZXR1cm4gNDI7Y2FzZSA0MzpicmVhaztjYXNlIDQ0OnJldHVybiAzNTtjYXNlIDQ1OnJldHVybiAzNn19LHJ1bGVzOlsvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oihccj9cbikpL2ksL14oPzooXHI/XG4pKS9pLC9eKD86W1xuXHJdKykvaSwvXig/OiUlW15cbl0qKS9pLC9eKD86dGl0bGVcYikvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpceykvaSwvXig/OlteXH1dKikvaSwvXig/Onh5Y2hhcnQtYmV0YVxiKS9pLC9eKD86KD86dmVydGljYWx8aG9yaXpvbnRhbCkpL2ksL14oPzp4LWF4aXNcYikvaSwvXig/OnktYXhpc1xiKS9pLC9eKD86XFspL2ksL14oPzotLT4pL2ksL14oPzpsaW5lXGIpL2ksL14oPzpiYXJcYikvaSwvXig/OlxbKS9pLC9eKD86WystXT8oPzpcZCsoPzpcLlxkKyk/fFwuXGQrKSkvaSwvXig/OlxdKS9pLC9eKD86KD86YFwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHsgdGhpc1wucHVzaFN0YXRlXChtZF9zdHJpbmdcKTsgXH1cbjxtZF9zdHJpbmc+XChcPzpcKFw/IWAiXClcLlwpXCsgICAgICAgICAgICAgICAgICBceyByZXR1cm4gTURfU1RSOyBcfVxuPG1kX3N0cmluZz5cKFw/OmApKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpcWykvaSwvXig/OlxdKS9pLC9eKD86W0EtWmEtel0rKS9pLC9eKD86OikvaSwvXig/OlwrKS9pLC9eKD86LCkvaSwvXig/Oj0pL2ksL14oPzpcKikvaSwvXig/OiMpL2ksL14oPzpbXF9dKS9pLC9eKD86XC4pL2ksL14oPzomKS9pLC9eKD86LSkvaSwvXig/OlswLTldKykvaSwvXig/OlxzKykvaSwvXig/OjspL2ksL14oPzokKS9pXSxjb25kaXRpb25zOntkYXRhX2lubmVyOntydWxlczpbMCwxLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywyMCwyMSwyMywyNCwyNSwyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NV0saW5jbHVzaXZlOiEwfSxkYXRhOntydWxlczpbMCwxLDMsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDIwLDIxLDIyLDI1LDI2LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1XSxpbmNsdXNpdmU6ITB9LGF4aXNfYmFuZF9kYXRhOntydWxlczpbMCwxLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywyMCwyMSwyNCwyNSwyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NV0saW5jbHVzaXZlOiEwfSxheGlzX2RhdGE6e3J1bGVzOlswLDEsMiw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjMsMjUsMjYsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDVdLGluY2x1c2l2ZTohMH0sYWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzEyLDEzXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzEwXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzhdLGluY2x1c2l2ZTohMX0sdGl0bGU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sbWRfc3RyaW5nOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzI3LDI4XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDIwLDIxLDI1LDI2LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIE90fSgpO1R0LmxleGVyPW50O2Z1bmN0aW9uIEl0KCl7dGhpcy55eT17fX1yZXR1cm4gSXQucHJvdG90eXBlPVR0LFR0LlBhcnNlcj1JdCxuZXcgSXR9KCk7b2d0LnBhcnNlcj1vZ3Q7Y29uc3QgeUhlPW9ndDtmdW5jdGlvbiBvUnQoaSl7cmV0dXJuIGkudHlwZT09PSJiYXIifWZ1bmN0aW9uIGNSdChpKXtyZXR1cm4gaS50eXBlPT09ImJhbmQifWZ1bmN0aW9uIEJGKGkpe3JldHVybiBpLnR5cGU9PT0ibGluZWFyIn1jbGFzcyB1UnR7Y29uc3RydWN0b3IoYSl7dGhpcy5wYXJlbnRHcm91cD1hfWdldE1heERpbWVuc2lvbihhLGYpe2lmKCF0aGlzLnBhcmVudEdyb3VwKXJldHVybnt3aWR0aDphLnJlZHVjZSgobSxiKT0+TWF0aC5tYXgoYi5sZW5ndGgsbSksMCkqZixoZWlnaHQ6Zn07Y29uc3QgcD17d2lkdGg6MCxoZWlnaHQ6MH0sdz10aGlzLnBhcmVudEdyb3VwLmFwcGVuZCgiZyIpLmF0dHIoInZpc2liaWxpdHkiLCJoaWRkZW4iKS5hdHRyKCJmb250LXNpemUiLGYpO2Zvcihjb25zdCBtIG9mIGEpe2NvbnN0IGI9ayRlKHcsMSxtKSxFPWI/Yi53aWR0aDptLmxlbmd0aCpmLF89Yj9iLmhlaWdodDpmO3Aud2lkdGg9TWF0aC5tYXgocC53aWR0aCxFKSxwLmhlaWdodD1NYXRoLm1heChwLmhlaWdodCxfKX1yZXR1cm4gdy5yZW1vdmUoKSxwfX1jb25zdCBsUnQ9LjcsaFJ0PS4yO2NsYXNzIGZSdHtjb25zdHJ1Y3RvcihhLGYscCx3KXt0aGlzLmF4aXNDb25maWc9YSx0aGlzLnRpdGxlPWYsdGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvcj1wLHRoaXMuYXhpc1RoZW1lQ29uZmlnPXcsdGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5heGlzUG9zaXRpb249ImxlZnQiLHRoaXMuc2hvd1RpdGxlPSExLHRoaXMuc2hvd0xhYmVsPSExLHRoaXMuc2hvd1RpY2s9ITEsdGhpcy5zaG93QXhpc0xpbmU9ITEsdGhpcy5vdXRlclBhZGRpbmc9MCx0aGlzLnRpdGxlVGV4dEhlaWdodD0wLHRoaXMubGFiZWxUZXh0SGVpZ2h0PTAsdGhpcy5yYW5nZT1bMCwxMF0sdGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5heGlzUG9zaXRpb249ImxlZnQifXNldFJhbmdlKGEpe3RoaXMucmFuZ2U9YSx0aGlzLmF4aXNQb3NpdGlvbj09PSJsZWZ0Inx8dGhpcy5heGlzUG9zaXRpb249PT0icmlnaHQiP3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodD1hWzFdLWFbMF06dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9YVsxXS1hWzBdLHRoaXMucmVjYWxjdWxhdGVTY2FsZSgpfWdldFJhbmdlKCl7cmV0dXJuW3RoaXMucmFuZ2VbMF0rdGhpcy5vdXRlclBhZGRpbmcsdGhpcy5yYW5nZVsxXS10aGlzLm91dGVyUGFkZGluZ119c2V0QXhpc1Bvc2l0aW9uKGEpe3RoaXMuYXhpc1Bvc2l0aW9uPWEsdGhpcy5zZXRSYW5nZSh0aGlzLnJhbmdlKX1nZXRUaWNrRGlzdGFuY2UoKXtjb25zdCBhPXRoaXMuZ2V0UmFuZ2UoKTtyZXR1cm4gTWF0aC5hYnMoYVswXS1hWzFdKS90aGlzLmdldFRpY2tWYWx1ZXMoKS5sZW5ndGh9Z2V0QXhpc091dGVyUGFkZGluZygpe3JldHVybiB0aGlzLm91dGVyUGFkZGluZ31nZXRMYWJlbERpbWVuc2lvbigpe3JldHVybiB0aGlzLnRleHREaW1lbnNpb25DYWxjdWxhdG9yLmdldE1heERpbWVuc2lvbih0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAoYT0+YS50b1N0cmluZygpKSx0aGlzLmF4aXNDb25maWcubGFiZWxGb250U2l6ZSl9cmVjYWxjdWxhdGVPdXRlclBhZGRpbmdUb0RyYXdCYXIoKXtsUnQqdGhpcy5nZXRUaWNrRGlzdGFuY2UoKT50aGlzLm91dGVyUGFkZGluZyoyJiYodGhpcy5vdXRlclBhZGRpbmc9TWF0aC5mbG9vcihsUnQqdGhpcy5nZXRUaWNrRGlzdGFuY2UoKS8yKSksdGhpcy5yZWNhbGN1bGF0ZVNjYWxlKCl9Y2FsY3VsYXRlU3BhY2VJZkRyYXduSG9yaXpvbnRhbGx5KGEpe2xldCBmPWEuaGVpZ2h0O2lmKHRoaXMuYXhpc0NvbmZpZy5zaG93QXhpc0xpbmUmJmY+dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgmJihmLT10aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aCx0aGlzLnNob3dBeGlzTGluZT0hMCksdGhpcy5heGlzQ29uZmlnLnNob3dMYWJlbCl7Y29uc3QgcD10aGlzLmdldExhYmVsRGltZW5zaW9uKCksdz1oUnQqYS53aWR0aDt0aGlzLm91dGVyUGFkZGluZz1NYXRoLm1pbihwLndpZHRoLzIsdyk7Y29uc3QgbT1wLmhlaWdodCt0aGlzLmF4aXNDb25maWcubGFiZWxQYWRkaW5nKjI7dGhpcy5sYWJlbFRleHRIZWlnaHQ9cC5oZWlnaHQsbTw9ZiYmKGYtPW0sdGhpcy5zaG93TGFiZWw9ITApfWlmKHRoaXMuYXhpc0NvbmZpZy5zaG93VGljayYmZj49dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgmJih0aGlzLnNob3dUaWNrPSEwLGYtPXRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RoKSx0aGlzLmF4aXNDb25maWcuc2hvd1RpdGxlJiZ0aGlzLnRpdGxlKXtjb25zdCBwPXRoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3IuZ2V0TWF4RGltZW5zaW9uKFt0aGlzLnRpdGxlXSx0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSksdz1wLmhlaWdodCt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nKjI7dGhpcy50aXRsZVRleHRIZWlnaHQ9cC5oZWlnaHQsdzw9ZiYmKGYtPXcsdGhpcy5zaG93VGl0bGU9ITApfXRoaXMuYm91bmRpbmdSZWN0LndpZHRoPWEud2lkdGgsdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0PWEuaGVpZ2h0LWZ9Y2FsY3VsYXRlU3BhY2VJZkRyYXduVmVydGljYWwoYSl7bGV0IGY9YS53aWR0aDtpZih0aGlzLmF4aXNDb25maWcuc2hvd0F4aXNMaW5lJiZmPnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoJiYoZi09dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgsdGhpcy5zaG93QXhpc0xpbmU9ITApLHRoaXMuYXhpc0NvbmZpZy5zaG93TGFiZWwpe2NvbnN0IHA9dGhpcy5nZXRMYWJlbERpbWVuc2lvbigpLHc9aFJ0KmEuaGVpZ2h0O3RoaXMub3V0ZXJQYWRkaW5nPU1hdGgubWluKHAuaGVpZ2h0LzIsdyk7Y29uc3QgbT1wLndpZHRoK3RoaXMuYXhpc0NvbmZpZy5sYWJlbFBhZGRpbmcqMjttPD1mJiYoZi09bSx0aGlzLnNob3dMYWJlbD0hMCl9aWYodGhpcy5heGlzQ29uZmlnLnNob3dUaWNrJiZmPj10aGlzLmF4aXNDb25maWcudGlja0xlbmd0aCYmKHRoaXMuc2hvd1RpY2s9ITAsZi09dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgpLHRoaXMuYXhpc0NvbmZpZy5zaG93VGl0bGUmJnRoaXMudGl0bGUpe2NvbnN0IHA9dGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvci5nZXRNYXhEaW1lbnNpb24oW3RoaXMudGl0bGVdLHRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplKSx3PXAuaGVpZ2h0K3RoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcqMjt0aGlzLnRpdGxlVGV4dEhlaWdodD1wLmhlaWdodCx3PD1mJiYoZi09dyx0aGlzLnNob3dUaXRsZT0hMCl9dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9YS53aWR0aC1mLHRoaXMuYm91bmRpbmdSZWN0LmhlaWdodD1hLmhlaWdodH1jYWxjdWxhdGVTcGFjZShhKXtyZXR1cm4gdGhpcy5heGlzUG9zaXRpb249PT0ibGVmdCJ8fHRoaXMuYXhpc1Bvc2l0aW9uPT09InJpZ2h0Ij90aGlzLmNhbGN1bGF0ZVNwYWNlSWZEcmF3blZlcnRpY2FsKGEpOnRoaXMuY2FsY3VsYXRlU3BhY2VJZkRyYXduSG9yaXpvbnRhbGx5KGEpLHRoaXMucmVjYWxjdWxhdGVTY2FsZSgpLHt3aWR0aDp0aGlzLmJvdW5kaW5nUmVjdC53aWR0aCxoZWlnaHQ6dGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0fX1zZXRCb3VuZGluZ0JveFhZKGEpe3RoaXMuYm91bmRpbmdSZWN0Lng9YS54LHRoaXMuYm91bmRpbmdSZWN0Lnk9YS55fWdldERyYXdhYmxlRWxlbWVudHNGb3JMZWZ0QXhpcygpe2NvbnN0IGE9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2NvbnN0IGY9dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC10aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aC8yO2EucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbImxlZnQtYXhpcyIsImF4aXNsLWxpbmUiXSxkYXRhOlt7cGF0aDpgTSAke2Z9LCR7dGhpcy5ib3VuZGluZ1JlY3QueX0gTCAke2Z9LCR7dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9IGAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5heGlzTGluZUNvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRofV19KX1pZih0aGlzLnNob3dMYWJlbCYmYS5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsibGVmdC1heGlzIiwibGFiZWwiXSxkYXRhOnRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcChmPT4oe3RleHQ6Zi50b1N0cmluZygpLHg6dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC0odGhpcy5zaG93TGFiZWw/dGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZzowKS0odGhpcy5zaG93VGljaz90aGlzLmF4aXNDb25maWcudGlja0xlbmd0aDowKS0odGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCkseTp0aGlzLmdldFNjYWxlVmFsdWUoZiksZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5sYWJlbENvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy5sYWJlbEZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6Im1pZGRsZSIsaG9yaXpvbnRhbFBvczoicmlnaHQifSkpfSksdGhpcy5zaG93VGljayl7Y29uc3QgZj10aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYm91bmRpbmdSZWN0LndpZHRoLSh0aGlzLnNob3dBeGlzTGluZT90aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aDowKTthLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJsZWZ0LWF4aXMiLCJ0aWNrcyJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKHA9Pih7cGF0aDpgTSAke2Z9LCR7dGhpcy5nZXRTY2FsZVZhbHVlKHApfSBMICR7Zi10aGlzLmF4aXNDb25maWcudGlja0xlbmd0aH0sJHt0aGlzLmdldFNjYWxlVmFsdWUocCl9YCxzdHJva2VGaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLnRpY2tDb2xvcixzdHJva2VXaWR0aDp0aGlzLmF4aXNDb25maWcudGlja1dpZHRofSkpfSl9cmV0dXJuIHRoaXMuc2hvd1RpdGxlJiZhLnB1c2goe3R5cGU6InRleHQiLGdyb3VwVGV4dHM6WyJsZWZ0LWF4aXMiLCJ0aXRsZSJdLGRhdGE6W3t0ZXh0OnRoaXMudGl0bGUseDp0aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcseTp0aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodC8yLGZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGl0bGVDb2xvcixmb250U2l6ZTp0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSxyb3RhdGlvbjoyNzAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn1dfSksYX1nZXREcmF3YWJsZUVsZW1lbnRzRm9yQm90dG9tQXhpcygpe2NvbnN0IGE9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2NvbnN0IGY9dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aC8yO2EucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbImJvdHRvbS1heGlzIiwiYXhpcy1saW5lIl0sZGF0YTpbe3BhdGg6YE0gJHt0aGlzLmJvdW5kaW5nUmVjdC54fSwke2Z9IEwgJHt0aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYm91bmRpbmdSZWN0LndpZHRofSwke2Z9YCxzdHJva2VGaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLmF4aXNMaW5lQ29sb3Isc3Ryb2tlV2lkdGg6dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGh9XX0pfWlmKHRoaXMuc2hvd0xhYmVsJiZhLnB1c2goe3R5cGU6InRleHQiLGdyb3VwVGV4dHM6WyJib3R0b20tYXhpcyIsImxhYmVsIl0sZGF0YTp0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAoZj0+KHt0ZXh0OmYudG9TdHJpbmcoKSx4OnRoaXMuZ2V0U2NhbGVWYWx1ZShmKSx5OnRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZysodGhpcy5zaG93VGljaz90aGlzLmF4aXNDb25maWcudGlja0xlbmd0aDowKSsodGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCksZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5sYWJlbENvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy5sYWJlbEZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn0pKX0pLHRoaXMuc2hvd1RpY2spe2NvbnN0IGY9dGhpcy5ib3VuZGluZ1JlY3QueSsodGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCk7YS5wdXNoKHt0eXBlOiJwYXRoIixncm91cFRleHRzOlsiYm90dG9tLWF4aXMiLCJ0aWNrcyJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKHA9Pih7cGF0aDpgTSAke3RoaXMuZ2V0U2NhbGVWYWx1ZShwKX0sJHtmfSBMICR7dGhpcy5nZXRTY2FsZVZhbHVlKHApfSwke2YrdGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGh9YCxzdHJva2VGaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLnRpY2tDb2xvcixzdHJva2VXaWR0aDp0aGlzLmF4aXNDb25maWcudGlja1dpZHRofSkpfSl9cmV0dXJuIHRoaXMuc2hvd1RpdGxlJiZhLnB1c2goe3R5cGU6InRleHQiLGdyb3VwVGV4dHM6WyJib3R0b20tYXhpcyIsInRpdGxlIl0sZGF0YTpbe3RleHQ6dGhpcy50aXRsZSx4OnRoaXMucmFuZ2VbMF0rKHRoaXMucmFuZ2VbMV0tdGhpcy5yYW5nZVswXSkvMix5OnRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LXRoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmctdGhpcy50aXRsZVRleHRIZWlnaHQsZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy50aXRsZUNvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn1dfSksYX1nZXREcmF3YWJsZUVsZW1lbnRzRm9yVG9wQXhpcygpe2NvbnN0IGE9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2NvbnN0IGY9dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQtdGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgvMjthLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJ0b3AtYXhpcyIsImF4aXMtbGluZSJdLGRhdGE6W3twYXRoOmBNICR7dGhpcy5ib3VuZGluZ1JlY3QueH0sJHtmfSBMICR7dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aH0sJHtmfWAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5heGlzTGluZUNvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRofV19KX1pZih0aGlzLnNob3dMYWJlbCYmYS5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsidG9wLWF4aXMiLCJsYWJlbCJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKGY9Pih7dGV4dDpmLnRvU3RyaW5nKCkseDp0aGlzLmdldFNjYWxlVmFsdWUoZikseTp0aGlzLmJvdW5kaW5nUmVjdC55Kyh0aGlzLnNob3dUaXRsZT90aGlzLnRpdGxlVGV4dEhlaWdodCt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nKjI6MCkrdGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZyxmaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLmxhYmVsQ29sb3IsZm9udFNpemU6dGhpcy5heGlzQ29uZmlnLmxhYmVsRm9udFNpemUscm90YXRpb246MCx2ZXJ0aWNhbFBvczoidG9wIixob3Jpem9udGFsUG9zOiJjZW50ZXIifSkpfSksdGhpcy5zaG93VGljayl7Y29uc3QgZj10aGlzLmJvdW5kaW5nUmVjdC55O2EucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbInRvcC1heGlzIiwidGlja3MiXSxkYXRhOnRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcChwPT4oe3BhdGg6YE0gJHt0aGlzLmdldFNjYWxlVmFsdWUocCl9LCR7Zit0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQtKHRoaXMuc2hvd0F4aXNMaW5lP3RoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoOjApfSBMICR7dGhpcy5nZXRTY2FsZVZhbHVlKHApfSwke2YrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LXRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RoLSh0aGlzLnNob3dBeGlzTGluZT90aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aDowKX1gLHN0cm9rZUZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGlja0NvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy50aWNrV2lkdGh9KSl9KX1yZXR1cm4gdGhpcy5zaG93VGl0bGUmJmEucHVzaCh7dHlwZToidGV4dCIsZ3JvdXBUZXh0czpbInRvcC1heGlzIiwidGl0bGUiXSxkYXRhOlt7dGV4dDp0aGlzLnRpdGxlLHg6dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC8yLHk6dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nLGZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGl0bGVDb2xvcixmb250U2l6ZTp0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSxyb3RhdGlvbjowLHZlcnRpY2FsUG9zOiJ0b3AiLGhvcml6b250YWxQb3M6ImNlbnRlciJ9XX0pLGF9Z2V0RHJhd2FibGVFbGVtZW50cygpe2lmKHRoaXMuYXhpc1Bvc2l0aW9uPT09ImxlZnQiKXJldHVybiB0aGlzLmdldERyYXdhYmxlRWxlbWVudHNGb3JMZWZ0QXhpcygpO2lmKHRoaXMuYXhpc1Bvc2l0aW9uPT09InJpZ2h0Iil0aHJvdyBFcnJvcigiRHJhd2luZyBvZiByaWdodCBheGlzIGlzIG5vdCBpbXBsZW1lbnRlZCIpO3JldHVybiB0aGlzLmF4aXNQb3NpdGlvbj09PSJib3R0b20iP3RoaXMuZ2V0RHJhd2FibGVFbGVtZW50c0ZvckJvdHRvbUF4aXMoKTp0aGlzLmF4aXNQb3NpdGlvbj09PSJ0b3AiP3RoaXMuZ2V0RHJhd2FibGVFbGVtZW50c0ZvclRvcEF4aXMoKTpbXX19Y2xhc3MgeEhlIGV4dGVuZHMgZlJ0e2NvbnN0cnVjdG9yKGEsZixwLHcsbSl7c3VwZXIoYSx3LG0sZiksdGhpcy5jYXRlZ29yaWVzPXAsdGhpcy5zY2FsZT1TMXQoKS5kb21haW4odGhpcy5jYXRlZ29yaWVzKS5yYW5nZSh0aGlzLmdldFJhbmdlKCkpfXNldFJhbmdlKGEpe3N1cGVyLnNldFJhbmdlKGEpfXJlY2FsY3VsYXRlU2NhbGUoKXt0aGlzLnNjYWxlPVMxdCgpLmRvbWFpbih0aGlzLmNhdGVnb3JpZXMpLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSkucGFkZGluZ0lubmVyKDEpLnBhZGRpbmdPdXRlcigwKS5hbGlnbiguNSksVXQudHJhY2UoIkJhbmRBeGlzIGF4aXMgZmluYWwgY2F0ZWdvcmllcywgcmFuZ2U6ICIsdGhpcy5jYXRlZ29yaWVzLHRoaXMuZ2V0UmFuZ2UoKSl9Z2V0VGlja1ZhbHVlcygpe3JldHVybiB0aGlzLmNhdGVnb3JpZXN9Z2V0U2NhbGVWYWx1ZShhKXtyZXR1cm4gdGhpcy5zY2FsZShhKXx8dGhpcy5nZXRSYW5nZSgpWzBdfX1jbGFzcyBrSGUgZXh0ZW5kcyBmUnR7Y29uc3RydWN0b3IoYSxmLHAsdyxtKXtzdXBlcihhLHcsbSxmKSx0aGlzLmRvbWFpbj1wLHRoaXMuc2NhbGU9QUEoKS5kb21haW4odGhpcy5kb21haW4pLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSl9Z2V0VGlja1ZhbHVlcygpe3JldHVybiB0aGlzLnNjYWxlLnRpY2tzKCl9cmVjYWxjdWxhdGVTY2FsZSgpe2NvbnN0IGE9Wy4uLnRoaXMuZG9tYWluXTt0aGlzLmF4aXNQb3NpdGlvbj09PSJsZWZ0IiYmYS5yZXZlcnNlKCksdGhpcy5zY2FsZT1BQSgpLmRvbWFpbihhKS5yYW5nZSh0aGlzLmdldFJhbmdlKCkpfWdldFNjYWxlVmFsdWUoYSl7cmV0dXJuIHRoaXMuc2NhbGUoYSl9fWZ1bmN0aW9uIGRSdChpLGEsZixwKXtjb25zdCB3PW5ldyB1UnQocCk7cmV0dXJuIGNSdChpKT9uZXcgeEhlKGEsZixpLmNhdGVnb3JpZXMsaS50aXRsZSx3KTpuZXcga0hlKGEsZixbaS5taW4saS5tYXhdLGkudGl0bGUsdyl9Y2xhc3MgRUhle2NvbnN0cnVjdG9yKGEsZixwLHcpe3RoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3I9YSx0aGlzLmNoYXJ0Q29uZmlnPWYsdGhpcy5jaGFydERhdGE9cCx0aGlzLmNoYXJ0VGhlbWVDb25maWc9dyx0aGlzLmJvdW5kaW5nUmVjdD17eDowLHk6MCx3aWR0aDowLGhlaWdodDowfSx0aGlzLnNob3dDaGFydFRpdGxlPSExfXNldEJvdW5kaW5nQm94WFkoYSl7dGhpcy5ib3VuZGluZ1JlY3QueD1hLngsdGhpcy5ib3VuZGluZ1JlY3QueT1hLnl9Y2FsY3VsYXRlU3BhY2UoYSl7Y29uc3QgZj10aGlzLnRleHREaW1lbnNpb25DYWxjdWxhdG9yLmdldE1heERpbWVuc2lvbihbdGhpcy5jaGFydERhdGEudGl0bGVdLHRoaXMuY2hhcnRDb25maWcudGl0bGVGb250U2l6ZSkscD1NYXRoLm1heChmLndpZHRoLGEud2lkdGgpLHc9Zi5oZWlnaHQrMip0aGlzLmNoYXJ0Q29uZmlnLnRpdGxlUGFkZGluZztyZXR1cm4gZi53aWR0aDw9cCYmZi5oZWlnaHQ8PXcmJnRoaXMuY2hhcnRDb25maWcuc2hvd1RpdGxlJiZ0aGlzLmNoYXJ0RGF0YS50aXRsZSYmKHRoaXMuYm91bmRpbmdSZWN0LndpZHRoPXAsdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0PXcsdGhpcy5zaG93Q2hhcnRUaXRsZT0hMCkse3dpZHRoOnRoaXMuYm91bmRpbmdSZWN0LndpZHRoLGhlaWdodDp0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9fWdldERyYXdhYmxlRWxlbWVudHMoKXtjb25zdCBhPVtdO3JldHVybiB0aGlzLnNob3dDaGFydFRpdGxlJiZhLnB1c2goe2dyb3VwVGV4dHM6WyJjaGFydC10aXRsZSJdLHR5cGU6InRleHQiLGRhdGE6W3tmb250U2l6ZTp0aGlzLmNoYXJ0Q29uZmlnLnRpdGxlRm9udFNpemUsdGV4dDp0aGlzLmNoYXJ0RGF0YS50aXRsZSx2ZXJ0aWNhbFBvczoibWlkZGxlIixob3Jpem9udGFsUG9zOiJjZW50ZXIiLHg6dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC8yLHk6dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQvMixmaWxsOnRoaXMuY2hhcnRUaGVtZUNvbmZpZy50aXRsZUNvbG9yLHJvdGF0aW9uOjB9XX0pLGF9fWZ1bmN0aW9uIFRIZShpLGEsZixwKXtjb25zdCB3PW5ldyB1UnQocCk7cmV0dXJuIG5ldyBFSGUodyxpLGEsZil9Y2xhc3MgQ0hle2NvbnN0cnVjdG9yKGEsZixwLHcsbSl7dGhpcy5wbG90RGF0YT1hLHRoaXMueEF4aXM9Zix0aGlzLnlBeGlzPXAsdGhpcy5vcmllbnRhdGlvbj13LHRoaXMucGxvdEluZGV4PW19Z2V0RHJhd2FibGVFbGVtZW50KCl7Y29uc3QgYT10aGlzLnBsb3REYXRhLmRhdGEubWFwKHA9Plt0aGlzLnhBeGlzLmdldFNjYWxlVmFsdWUocFswXSksdGhpcy55QXhpcy5nZXRTY2FsZVZhbHVlKHBbMV0pXSk7bGV0IGY7cmV0dXJuIHRoaXMub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCI/Zj1FNSgpLnkocD0+cFswXSkueChwPT5wWzFdKShhKTpmPUU1KCkueChwPT5wWzBdKS55KHA9PnBbMV0pKGEpLGY/W3tncm91cFRleHRzOlsicGxvdCIsYGxpbmUtcGxvdC0ke3RoaXMucGxvdEluZGV4fWBdLHR5cGU6InBhdGgiLGRhdGE6W3twYXRoOmYsc3Ryb2tlRmlsbDp0aGlzLnBsb3REYXRhLnN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5wbG90RGF0YS5zdHJva2VXaWR0aH1dfV06W119fWNsYXNzIF9IZXtjb25zdHJ1Y3RvcihhLGYscCx3LG0sYil7dGhpcy5iYXJEYXRhPWEsdGhpcy5ib3VuZGluZ1JlY3Q9Zix0aGlzLnhBeGlzPXAsdGhpcy55QXhpcz13LHRoaXMub3JpZW50YXRpb249bSx0aGlzLnBsb3RJbmRleD1ifWdldERyYXdhYmxlRWxlbWVudCgpe2NvbnN0IGE9dGhpcy5iYXJEYXRhLmRhdGEubWFwKG09Plt0aGlzLnhBeGlzLmdldFNjYWxlVmFsdWUobVswXSksdGhpcy55QXhpcy5nZXRTY2FsZVZhbHVlKG1bMV0pXSksZj0uMDUscD1NYXRoLm1pbih0aGlzLnhBeGlzLmdldEF4aXNPdXRlclBhZGRpbmcoKSoyLHRoaXMueEF4aXMuZ2V0VGlja0Rpc3RhbmNlKCkpKigxLWYpLHc9cC8yO3JldHVybiB0aGlzLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiP1t7Z3JvdXBUZXh0czpbInBsb3QiLGBiYXItcGxvdC0ke3RoaXMucGxvdEluZGV4fWBdLHR5cGU6InJlY3QiLGRhdGE6YS5tYXAobT0+KHt4OnRoaXMuYm91bmRpbmdSZWN0LngseTptWzBdLXcsaGVpZ2h0OnAsd2lkdGg6bVsxXS10aGlzLmJvdW5kaW5nUmVjdC54LGZpbGw6dGhpcy5iYXJEYXRhLmZpbGwsc3Ryb2tlV2lkdGg6MCxzdHJva2VGaWxsOnRoaXMuYmFyRGF0YS5maWxsfSkpfV06W3tncm91cFRleHRzOlsicGxvdCIsYGJhci1wbG90LSR7dGhpcy5wbG90SW5kZXh9YF0sdHlwZToicmVjdCIsZGF0YTphLm1hcChtPT4oe3g6bVswXS13LHk6bVsxXSx3aWR0aDpwLGhlaWdodDp0aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodC1tWzFdLGZpbGw6dGhpcy5iYXJEYXRhLmZpbGwsc3Ryb2tlV2lkdGg6MCxzdHJva2VGaWxsOnRoaXMuYmFyRGF0YS5maWxsfSkpfV19fWNsYXNzIFNIZXtjb25zdHJ1Y3RvcihhLGYscCl7dGhpcy5jaGFydENvbmZpZz1hLHRoaXMuY2hhcnREYXRhPWYsdGhpcy5jaGFydFRoZW1lQ29uZmlnPXAsdGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH19c2V0QXhlcyhhLGYpe3RoaXMueEF4aXM9YSx0aGlzLnlBeGlzPWZ9c2V0Qm91bmRpbmdCb3hYWShhKXt0aGlzLmJvdW5kaW5nUmVjdC54PWEueCx0aGlzLmJvdW5kaW5nUmVjdC55PWEueX1jYWxjdWxhdGVTcGFjZShhKXtyZXR1cm4gdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9YS53aWR0aCx0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQ9YS5oZWlnaHQse3dpZHRoOnRoaXMuYm91bmRpbmdSZWN0LndpZHRoLGhlaWdodDp0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9fWdldERyYXdhYmxlRWxlbWVudHMoKXtpZighKHRoaXMueEF4aXMmJnRoaXMueUF4aXMpKXRocm93IEVycm9yKCJBeGVzIG11c3QgYmUgcGFzc2VkIHRvIHJlbmRlciBQbG90cyIpO2NvbnN0IGE9W107Zm9yKGNvbnN0W2YscF1vZiB0aGlzLmNoYXJ0RGF0YS5wbG90cy5lbnRyaWVzKCkpc3dpdGNoKHAudHlwZSl7Y2FzZSJsaW5lIjp7Y29uc3Qgdz1uZXcgQ0hlKHAsdGhpcy54QXhpcyx0aGlzLnlBeGlzLHRoaXMuY2hhcnRDb25maWcuY2hhcnRPcmllbnRhdGlvbixmKTthLnB1c2goLi4udy5nZXREcmF3YWJsZUVsZW1lbnQoKSl9YnJlYWs7Y2FzZSJiYXIiOntjb25zdCB3PW5ldyBfSGUocCx0aGlzLmJvdW5kaW5nUmVjdCx0aGlzLnhBeGlzLHRoaXMueUF4aXMsdGhpcy5jaGFydENvbmZpZy5jaGFydE9yaWVudGF0aW9uLGYpO2EucHVzaCguLi53LmdldERyYXdhYmxlRWxlbWVudCgpKX1icmVha31yZXR1cm4gYX19ZnVuY3Rpb24gQUhlKGksYSxmKXtyZXR1cm4gbmV3IFNIZShpLGEsZil9Y2xhc3MgTEhle2NvbnN0cnVjdG9yKGEsZixwLHcpe3RoaXMuY2hhcnRDb25maWc9YSx0aGlzLmNoYXJ0RGF0YT1mLHRoaXMuY29tcG9uZW50U3RvcmU9e3RpdGxlOlRIZShhLGYscCx3KSxwbG90OkFIZShhLGYscCkseEF4aXM6ZFJ0KGYueEF4aXMsYS54QXhpcyx7dGl0bGVDb2xvcjpwLnhBeGlzVGl0bGVDb2xvcixsYWJlbENvbG9yOnAueEF4aXNMYWJlbENvbG9yLHRpY2tDb2xvcjpwLnhBeGlzVGlja0NvbG9yLGF4aXNMaW5lQ29sb3I6cC54QXhpc0xpbmVDb2xvcn0sdykseUF4aXM6ZFJ0KGYueUF4aXMsYS55QXhpcyx7dGl0bGVDb2xvcjpwLnlBeGlzVGl0bGVDb2xvcixsYWJlbENvbG9yOnAueUF4aXNMYWJlbENvbG9yLHRpY2tDb2xvcjpwLnlBeGlzVGlja0NvbG9yLGF4aXNMaW5lQ29sb3I6cC55QXhpc0xpbmVDb2xvcn0sdyl9fWNhbGN1bGF0ZVZlcnRpY2FsU3BhY2UoKXtsZXQgYT10aGlzLmNoYXJ0Q29uZmlnLndpZHRoLGY9dGhpcy5jaGFydENvbmZpZy5oZWlnaHQscD0wLHc9MCxtPU1hdGguZmxvb3IoYSp0aGlzLmNoYXJ0Q29uZmlnLnBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudC8xMDApLGI9TWF0aC5mbG9vcihmKnRoaXMuY2hhcnRDb25maWcucGxvdFJlc2VydmVkU3BhY2VQZXJjZW50LzEwMCksRT10aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOm0saGVpZ2h0OmJ9KTthLT1FLndpZHRoLGYtPUUuaGVpZ2h0LEU9dGhpcy5jb21wb25lbnRTdG9yZS50aXRsZS5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6dGhpcy5jaGFydENvbmZpZy53aWR0aCxoZWlnaHQ6Zn0pLHc9RS5oZWlnaHQsZi09RS5oZWlnaHQsdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRBeGlzUG9zaXRpb24oImJvdHRvbSIpLEU9dGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6YSxoZWlnaHQ6Zn0pLGYtPUUuaGVpZ2h0LHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0QXhpc1Bvc2l0aW9uKCJsZWZ0IiksRT10aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDphLGhlaWdodDpmfSkscD1FLndpZHRoLGEtPUUud2lkdGgsYT4wJiYobSs9YSxhPTApLGY+MCYmKGIrPWYsZj0wKSx0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOm0saGVpZ2h0OmJ9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3Quc2V0Qm91bmRpbmdCb3hYWSh7eDpwLHk6d30pLHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0UmFuZ2UoW3AscCttXSksdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRCb3VuZGluZ0JveFhZKHt4OnAseTp3K2J9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldFJhbmdlKFt3LHcrYl0pLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0Qm91bmRpbmdCb3hYWSh7eDowLHk6d30pLHRoaXMuY2hhcnREYXRhLnBsb3RzLnNvbWUoXz0+b1J0KF8pKSYmdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5yZWNhbGN1bGF0ZU91dGVyUGFkZGluZ1RvRHJhd0JhcigpfWNhbGN1bGF0ZUhvcml6b25hdGFsU3BhY2UoKXtsZXQgYT10aGlzLmNoYXJ0Q29uZmlnLndpZHRoLGY9dGhpcy5jaGFydENvbmZpZy5oZWlnaHQscD0wLHc9MCxtPTAsYj1NYXRoLmZsb29yKGEqdGhpcy5jaGFydENvbmZpZy5wbG90UmVzZXJ2ZWRTcGFjZVBlcmNlbnQvMTAwKSxFPU1hdGguZmxvb3IoZip0aGlzLmNoYXJ0Q29uZmlnLnBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudC8xMDApLF89dGhpcy5jb21wb25lbnRTdG9yZS5wbG90LmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDpiLGhlaWdodDpFfSk7YS09Xy53aWR0aCxmLT1fLmhlaWdodCxfPXRoaXMuY29tcG9uZW50U3RvcmUudGl0bGUuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOnRoaXMuY2hhcnRDb25maWcud2lkdGgsaGVpZ2h0OmZ9KSxwPV8uaGVpZ2h0LGYtPV8uaGVpZ2h0LHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0QXhpc1Bvc2l0aW9uKCJsZWZ0IiksXz10aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDphLGhlaWdodDpmfSksYS09Xy53aWR0aCx3PV8ud2lkdGgsdGhpcy5jb21wb25lbnRTdG9yZS55QXhpcy5zZXRBeGlzUG9zaXRpb24oInRvcCIpLF89dGhpcy5jb21wb25lbnRTdG9yZS55QXhpcy5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6YSxoZWlnaHQ6Zn0pLGYtPV8uaGVpZ2h0LG09cCtfLmhlaWdodCxhPjAmJihiKz1hLGE9MCksZj4wJiYoRSs9ZixmPTApLHRoaXMuY29tcG9uZW50U3RvcmUucGxvdC5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6YixoZWlnaHQ6RX0pLHRoaXMuY29tcG9uZW50U3RvcmUucGxvdC5zZXRCb3VuZGluZ0JveFhZKHt4OncseTptfSksdGhpcy5jb21wb25lbnRTdG9yZS55QXhpcy5zZXRSYW5nZShbdyx3K2JdKSx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldEJvdW5kaW5nQm94WFkoe3g6dyx5OnB9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLnNldFJhbmdlKFttLG0rRV0pLHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0Qm91bmRpbmdCb3hYWSh7eDowLHk6bX0pLHRoaXMuY2hhcnREYXRhLnBsb3RzLnNvbWUoQT0+b1J0KEEpKSYmdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5yZWNhbGN1bGF0ZU91dGVyUGFkZGluZ1RvRHJhd0JhcigpfWNhbGN1bGF0ZVNwYWNlKCl7dGhpcy5jaGFydENvbmZpZy5jaGFydE9yaWVudGF0aW9uPT09Imhvcml6b250YWwiP3RoaXMuY2FsY3VsYXRlSG9yaXpvbmF0YWxTcGFjZSgpOnRoaXMuY2FsY3VsYXRlVmVydGljYWxTcGFjZSgpfWdldERyYXdhYmxlRWxlbWVudCgpe3RoaXMuY2FsY3VsYXRlU3BhY2UoKTtjb25zdCBhPVtdO3RoaXMuY29tcG9uZW50U3RvcmUucGxvdC5zZXRBeGVzKHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMsdGhpcy5jb21wb25lbnRTdG9yZS55QXhpcyk7Zm9yKGNvbnN0IGYgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmNvbXBvbmVudFN0b3JlKSlhLnB1c2goLi4uZi5nZXREcmF3YWJsZUVsZW1lbnRzKCkpO3JldHVybiBhfX1jbGFzcyBNSGV7c3RhdGljIGJ1aWxkKGEsZixwLHcpe3JldHVybiBuZXcgTEhlKGEsZixwLHcpLmdldERyYXdhYmxlRWxlbWVudCgpfX1sZXQgUkY9MCxnUnQsakY9YlJ0KCksJEY9cFJ0KCksZnU9d1J0KCksY2d0PSRGLnBsb3RDb2xvclBhbGV0dGUuc3BsaXQoIiwiKS5tYXAoaT0+aS50cmltKCkpLEJZPSExLHVndD0hMTtmdW5jdGlvbiBwUnQoKXtjb25zdCBpPVgxdCgpLGE9RmQoKTtyZXR1cm4gckYoaS54eUNoYXJ0LGEudGhlbWVWYXJpYWJsZXMueHlDaGFydCl9ZnVuY3Rpb24gYlJ0KCl7Y29uc3QgaT1GZCgpO3JldHVybiByRihaaC54eUNoYXJ0LGkueHlDaGFydCl9ZnVuY3Rpb24gd1J0KCl7cmV0dXJue3lBeGlzOnt0eXBlOiJsaW5lYXIiLHRpdGxlOiIiLG1pbjoxLzAsbWF4Oi0xLzB9LHhBeGlzOnt0eXBlOiJiYW5kIix0aXRsZToiIixjYXRlZ29yaWVzOltdfSx0aXRsZToiIixwbG90czpbXX19ZnVuY3Rpb24gbGd0KGkpe2NvbnN0IGE9RmQoKTtyZXR1cm4gUTEoaS50cmltKCksYSl9ZnVuY3Rpb24gREhlKGkpe2dSdD1pfWZ1bmN0aW9uIElIZShpKXtpPT09Imhvcml6b250YWwiP2pGLmNoYXJ0T3JpZW50YXRpb249Imhvcml6b250YWwiOmpGLmNoYXJ0T3JpZW50YXRpb249InZlcnRpY2FsIn1mdW5jdGlvbiBPSGUoaSl7ZnUueEF4aXMudGl0bGU9bGd0KGkudGV4dCl9ZnVuY3Rpb24gdlJ0KGksYSl7ZnUueEF4aXM9e3R5cGU6ImxpbmVhciIsdGl0bGU6ZnUueEF4aXMudGl0bGUsbWluOmksbWF4OmF9LEJZPSEwfWZ1bmN0aW9uIFBIZShpKXtmdS54QXhpcz17dHlwZToiYmFuZCIsdGl0bGU6ZnUueEF4aXMudGl0bGUsY2F0ZWdvcmllczppLm1hcChhPT5sZ3QoYS50ZXh0KSl9LEJZPSEwfWZ1bmN0aW9uIEZIZShpKXtmdS55QXhpcy50aXRsZT1sZ3QoaS50ZXh0KX1mdW5jdGlvbiBOSGUoaSxhKXtmdS55QXhpcz17dHlwZToibGluZWFyIix0aXRsZTpmdS55QXhpcy50aXRsZSxtaW46aSxtYXg6YX0sdWd0PSEwfWZ1bmN0aW9uIEJIZShpKXtjb25zdCBhPU1hdGgubWluKC4uLmkpLGY9TWF0aC5tYXgoLi4uaSkscD1CRihmdS55QXhpcyk/ZnUueUF4aXMubWluOjEvMCx3PUJGKGZ1LnlBeGlzKT9mdS55QXhpcy5tYXg6LTEvMDtmdS55QXhpcz17dHlwZToibGluZWFyIix0aXRsZTpmdS55QXhpcy50aXRsZSxtaW46TWF0aC5taW4ocCxhKSxtYXg6TWF0aC5tYXgodyxmKX19ZnVuY3Rpb24gbVJ0KGkpe2xldCBhPVtdO2lmKGkubGVuZ3RoPT09MClyZXR1cm4gYTtpZighQlkpe2NvbnN0IGY9QkYoZnUueEF4aXMpP2Z1LnhBeGlzLm1pbjoxLzAscD1CRihmdS54QXhpcyk/ZnUueEF4aXMubWF4Oi0xLzA7dlJ0KE1hdGgubWluKGYsMSksTWF0aC5tYXgocCxpLmxlbmd0aCkpfWlmKHVndHx8QkhlKGkpLGNSdChmdS54QXhpcykmJihhPWZ1LnhBeGlzLmNhdGVnb3JpZXMubWFwKChmLHApPT5bZixpW3BdXSkpLEJGKGZ1LnhBeGlzKSl7Y29uc3QgZj1mdS54QXhpcy5taW4scD1mdS54QXhpcy5tYXgsdz0ocC1mKzEpL2kubGVuZ3RoLG09W107Zm9yKGxldCBiPWY7Yjw9cDtiKz13KW0ucHVzaChgJHtifWApO2E9bS5tYXAoKGIsRSk9PltiLGlbRV1dKX1yZXR1cm4gYX1mdW5jdGlvbiB5UnQoaSl7cmV0dXJuIGNndFtpPT09MD8wOmklY2d0Lmxlbmd0aF19ZnVuY3Rpb24gUkhlKGksYSl7Y29uc3QgZj1tUnQoYSk7ZnUucGxvdHMucHVzaCh7dHlwZToibGluZSIsc3Ryb2tlRmlsbDp5UnQoUkYpLHN0cm9rZVdpZHRoOjIsZGF0YTpmfSksUkYrK31mdW5jdGlvbiBqSGUoaSxhKXtjb25zdCBmPW1SdChhKTtmdS5wbG90cy5wdXNoKHt0eXBlOiJiYXIiLGZpbGw6eVJ0KFJGKSxkYXRhOmZ9KSxSRisrfWZ1bmN0aW9uICRIZSgpe2lmKGZ1LnBsb3RzLmxlbmd0aD09PTApdGhyb3cgRXJyb3IoIk5vIFBsb3QgdG8gcmVuZGVyLCBwbGVhc2UgcHJvdmlkZSBhIHBsb3Qgd2l0aCBzb21lIGRhdGEiKTtyZXR1cm4gZnUudGl0bGU9cGcoKSxNSGUuYnVpbGQoakYsZnUsJEYsZ1J0KX1mdW5jdGlvbiB6SGUoKXtyZXR1cm4gJEZ9ZnVuY3Rpb24gcUhlKCl7cmV0dXJuIGpGfWNvbnN0IEhIZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOnlIZSxkYjp7Z2V0RHJhd2FibGVFbGVtOiRIZSxjbGVhcjpmdW5jdGlvbigpe2hnKCksUkY9MCxqRj1iUnQoKSxmdT13UnQoKSwkRj1wUnQoKSxjZ3Q9JEYucGxvdENvbG9yUGFsZXR0ZS5zcGxpdCgiLCIpLm1hcChpPT5pLnRyaW0oKSksQlk9ITEsdWd0PSExfSxzZXRBY2NUaXRsZTpFMCxnZXRBY2NUaXRsZTpmZyxzZXREaWFncmFtVGl0bGU6TmIsZ2V0RGlhZ3JhbVRpdGxlOnBnLGdldEFjY0Rlc2NyaXB0aW9uOmdnLHNldEFjY0Rlc2NyaXB0aW9uOmRnLHNldE9yaWVudGF0aW9uOklIZSxzZXRYQXhpc1RpdGxlOk9IZSxzZXRYQXhpc1JhbmdlRGF0YTp2UnQsc2V0WEF4aXNCYW5kOlBIZSxzZXRZQXhpc1RpdGxlOkZIZSxzZXRZQXhpc1JhbmdlRGF0YTpOSGUsc2V0TGluZURhdGE6UkhlLHNldEJhckRhdGE6akhlLHNldFRtcFNWR0c6REhlLGdldENoYXJ0VGhlbWVDb25maWc6ekhlLGdldENoYXJ0Q29uZmlnOnFIZX0scmVuZGVyZXI6e2RyYXc6KGksYSxmLHApPT57Y29uc3Qgdz1wLmRiLG09dy5nZXRDaGFydFRoZW1lQ29uZmlnKCksYj13LmdldENoYXJ0Q29uZmlnKCk7ZnVuY3Rpb24gRShldCl7cmV0dXJuIGV0PT09InRvcCI/InRleHQtYmVmb3JlLWVkZ2UiOiJtaWRkbGUifWZ1bmN0aW9uIF8oZXQpe3JldHVybiBldD09PSJsZWZ0Ij8ic3RhcnQiOmV0PT09InJpZ2h0Ij8iZW5kIjoibWlkZGxlIn1mdW5jdGlvbiBBKGV0KXtyZXR1cm5gdHJhbnNsYXRlKCR7ZXQueH0sICR7ZXQueX0pIHJvdGF0ZSgke2V0LnJvdGF0aW9ufHwwfSlgfVV0LmRlYnVnKGBSZW5kZXJpbmcgeHljaGFydCBjaGFydApgK2kpO2NvbnN0IEk9VlcoYSksQj1JLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibWFpbiIpLE49Qi5hcHBlbmQoInJlY3QiKS5hdHRyKCJ3aWR0aCIsYi53aWR0aCkuYXR0cigiaGVpZ2h0IixiLmhlaWdodCkuYXR0cigiY2xhc3MiLCJiYWNrZ3JvdW5kIik7azAoSSxiLmhlaWdodCxiLndpZHRoLCEwKSxJLmF0dHIoInZpZXdCb3giLGAwIDAgJHtiLndpZHRofSAke2IuaGVpZ2h0fWApLE4uYXR0cigiZmlsbCIsbS5iYWNrZ3JvdW5kQ29sb3IpLHcuc2V0VG1wU1ZHRyhJLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibWVybWFpZC10bXAtZ3JvdXAiKSk7Y29uc3QgUj13LmdldERyYXdhYmxlRWxlbSgpLHo9e307ZnVuY3Rpb24gVyhldCl7bGV0IHN0PUIsYXQ9IiI7Zm9yKGNvbnN0W2J0XW9mIGV0LmVudHJpZXMoKSl7bGV0IG10PUI7YnQ+MCYmelthdF0mJihtdD16W2F0XSksYXQrPWV0W2J0XSxzdD16W2F0XSxzdHx8KHN0PXpbYXRdPW10LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixldFtidF0pKX1yZXR1cm4gc3R9Zm9yKGNvbnN0IGV0IG9mIFIpe2lmKGV0LmRhdGEubGVuZ3RoPT09MCljb250aW51ZTtjb25zdCBzdD1XKGV0Lmdyb3VwVGV4dHMpO3N3aXRjaChldC50eXBlKXtjYXNlInJlY3QiOnN0LnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoZXQuZGF0YSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixhdD0+YXQueCkuYXR0cigieSIsYXQ9PmF0LnkpLmF0dHIoIndpZHRoIixhdD0+YXQud2lkdGgpLmF0dHIoImhlaWdodCIsYXQ9PmF0LmhlaWdodCkuYXR0cigiZmlsbCIsYXQ9PmF0LmZpbGwpLmF0dHIoInN0cm9rZSIsYXQ9PmF0LnN0cm9rZUZpbGwpLmF0dHIoInN0cm9rZS13aWR0aCIsYXQ9PmF0LnN0cm9rZVdpZHRoKTticmVhaztjYXNlInRleHQiOnN0LnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoZXQuZGF0YSkuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJmaWxsIixhdD0+YXQuZmlsbCkuYXR0cigiZm9udC1zaXplIixhdD0+YXQuZm9udFNpemUpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIixhdD0+RShhdC52ZXJ0aWNhbFBvcykpLmF0dHIoInRleHQtYW5jaG9yIixhdD0+XyhhdC5ob3Jpem9udGFsUG9zKSkuYXR0cigidHJhbnNmb3JtIixhdD0+QShhdCkpLnRleHQoYXQ9PmF0LnRleHQpO2JyZWFrO2Nhc2UicGF0aCI6c3Quc2VsZWN0QWxsKCJwYXRoIikuZGF0YShldC5kYXRhKS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGF0PT5hdC5wYXRoKS5hdHRyKCJmaWxsIixhdD0+YXQuZmlsbD9hdC5maWxsOiJub25lIikuYXR0cigic3Ryb2tlIixhdD0+YXQuc3Ryb2tlRmlsbCkuYXR0cigic3Ryb2tlLXdpZHRoIixhdD0+YXQuc3Ryb2tlV2lkdGgpO2JyZWFrfX19fX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIGhndD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKFNlLG1lLFZlLFllKXtmb3IoVmU9VmV8fHt9LFllPVNlLmxlbmd0aDtZZS0tO1ZlW1NlW1llXV09bWUpO3JldHVybiBWZX0sYT1bMSwzXSxmPVsxLDRdLHA9WzEsNV0sdz1bMSw2XSxtPVs1LDYsOCw5LDExLDEzLDMxLDMyLDMzLDM0LDM1LDM2LDQ0LDYyLDYzXSxiPVsxLDE4XSxFPVsyLDddLF89WzEsMjJdLEE9WzEsMjNdLEk9WzEsMjRdLEI9WzEsMjVdLE49WzEsMjZdLFI9WzEsMjddLHo9WzEsMjBdLFc9WzEsMjhdLGV0PVsxLDI5XSxzdD1bNjIsNjNdLGF0PVs1LDgsOSwxMSwxMywzMSwzMiwzMywzNCwzNSwzNiw0NCw1MSw1Myw2Miw2M10sYnQ9WzEsNDddLG10PVsxLDQ4XSx5dD1bMSw0OV0sZnQ9WzEsNTBdLHV0PVsxLDUxXSx2dD1bMSw1Ml0sWD1bMSw1M10scHQ9WzUzLDU0XSxVPVsxLDY0XSxUdD1bMSw2MF0sbnQ9WzEsNjFdLEl0PVsxLDYyXSxPdD1bMSw2M10sQnQ9WzEsNjVdLEV0PVsxLDY5XSxaPVsxLDcwXSxDdD1bMSw2N10seHQ9WzEsNjhdLEh0PVs1LDgsOSwxMSwxMywzMSwzMiwzMywzNCwzNSwzNiw0NCw2Miw2M10sTGU9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGRpcmVjdGl2ZTo0LE5FV0xJTkU6NSxSRDo2LGRpYWdyYW06NyxFT0Y6OCxhY2NfdGl0bGU6OSxhY2NfdGl0bGVfdmFsdWU6MTAsYWNjX2Rlc2NyOjExLGFjY19kZXNjcl92YWx1ZToxMixhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjEzLHJlcXVpcmVtZW50RGVmOjE0LGVsZW1lbnREZWY6MTUscmVsYXRpb25zaGlwRGVmOjE2LHJlcXVpcmVtZW50VHlwZToxNyxyZXF1aXJlbWVudE5hbWU6MTgsU1RSVUNUX1NUQVJUOjE5LHJlcXVpcmVtZW50Qm9keToyMCxJRDoyMSxDT0xPTlNFUDoyMixpZDoyMyxURVhUOjI0LHRleHQ6MjUsUklTSzoyNixyaXNrTGV2ZWw6MjcsVkVSSUZZTVRIRDoyOCx2ZXJpZnlUeXBlOjI5LFNUUlVDVF9TVE9QOjMwLFJFUVVJUkVNRU5UOjMxLEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6MzIsSU5URVJGQUNFX1JFUVVJUkVNRU5UOjMzLFBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UOjM0LFBIWVNJQ0FMX1JFUVVJUkVNRU5UOjM1LERFU0lHTl9DT05TVFJBSU5UOjM2LExPV19SSVNLOjM3LE1FRF9SSVNLOjM4LEhJR0hfUklTSzozOSxWRVJJRllfQU5BTFlTSVM6NDAsVkVSSUZZX0RFTU9OU1RSQVRJT046NDEsVkVSSUZZX0lOU1BFQ1RJT046NDIsVkVSSUZZX1RFU1Q6NDMsRUxFTUVOVDo0NCxlbGVtZW50TmFtZTo0NSxlbGVtZW50Qm9keTo0NixUWVBFOjQ3LHR5cGU6NDgsRE9DUkVGOjQ5LHJlZjo1MCxFTkRfQVJST1dfTDo1MSxyZWxhdGlvbnNoaXA6NTIsTElORTo1MyxFTkRfQVJST1dfUjo1NCxDT05UQUlOUzo1NSxDT1BJRVM6NTYsREVSSVZFUzo1NyxTQVRJU0ZJRVM6NTgsVkVSSUZJRVM6NTksUkVGSU5FUzo2MCxUUkFDRVM6NjEsdW5xU3RyaW5nOjYyLHFTdHJpbmc6NjMsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6Ik5FV0xJTkUiLDY6IlJEIiw4OiJFT0YiLDk6ImFjY190aXRsZSIsMTA6ImFjY190aXRsZV92YWx1ZSIsMTE6ImFjY19kZXNjciIsMTI6ImFjY19kZXNjcl92YWx1ZSIsMTM6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDE5OiJTVFJVQ1RfU1RBUlQiLDIxOiJJRCIsMjI6IkNPTE9OU0VQIiwyNDoiVEVYVCIsMjY6IlJJU0siLDI4OiJWRVJJRllNVEhEIiwzMDoiU1RSVUNUX1NUT1AiLDMxOiJSRVFVSVJFTUVOVCIsMzI6IkZVTkNUSU9OQUxfUkVRVUlSRU1FTlQiLDMzOiJJTlRFUkZBQ0VfUkVRVUlSRU1FTlQiLDM0OiJQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVCIsMzU6IlBIWVNJQ0FMX1JFUVVJUkVNRU5UIiwzNjoiREVTSUdOX0NPTlNUUkFJTlQiLDM3OiJMT1dfUklTSyIsMzg6Ik1FRF9SSVNLIiwzOToiSElHSF9SSVNLIiw0MDoiVkVSSUZZX0FOQUxZU0lTIiw0MToiVkVSSUZZX0RFTU9OU1RSQVRJT04iLDQyOiJWRVJJRllfSU5TUEVDVElPTiIsNDM6IlZFUklGWV9URVNUIiw0NDoiRUxFTUVOVCIsNDc6IlRZUEUiLDQ5OiJET0NSRUYiLDUxOiJFTkRfQVJST1dfTCIsNTM6IkxJTkUiLDU0OiJFTkRfQVJST1dfUiIsNTU6IkNPTlRBSU5TIiw1NjoiQ09QSUVTIiw1NzoiREVSSVZFUyIsNTg6IlNBVElTRklFUyIsNTk6IlZFUklGSUVTIiw2MDoiUkVGSU5FUyIsNjE6IlRSQUNFUyIsNjI6InVucVN0cmluZyIsNjM6InFTdHJpbmcifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzMsMl0sWzMsNF0sWzQsMl0sWzQsMl0sWzQsMV0sWzcsMF0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzE0LDVdLFsyMCw1XSxbMjAsNV0sWzIwLDVdLFsyMCw1XSxbMjAsMl0sWzIwLDFdLFsxNywxXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMTcsMV0sWzE3LDFdLFsyNywxXSxbMjcsMV0sWzI3LDFdLFsyOSwxXSxbMjksMV0sWzI5LDFdLFsyOSwxXSxbMTUsNV0sWzQ2LDVdLFs0Niw1XSxbNDYsMl0sWzQ2LDFdLFsxNiw1XSxbMTYsNV0sWzUyLDFdLFs1MiwxXSxbNTIsMV0sWzUyLDFdLFs1MiwxXSxbNTIsMV0sWzUyLDFdLFsxOCwxXSxbMTgsMV0sWzIzLDFdLFsyMywxXSxbMjUsMV0sWzI1LDFdLFs0NSwxXSxbNDUsMV0sWzQ4LDFdLFs0OCwxXSxbNTAsMV0sWzUwLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKG1lLFZlLFllLGNlLGtlLHp0LHJlKXt2YXIgc2U9enQubGVuZ3RoLTE7c3dpdGNoKGtlKXtjYXNlIDQ6dGhpcy4kPXp0W3NlXS50cmltKCksY2Uuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDU6Y2FzZSA2OnRoaXMuJD16dFtzZV0udHJpbSgpLGNlLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDEzOmNlLmFkZFJlcXVpcmVtZW50KHp0W3NlLTNdLHp0W3NlLTRdKTticmVhaztjYXNlIDE0OmNlLnNldE5ld1JlcUlkKHp0W3NlLTJdKTticmVhaztjYXNlIDE1OmNlLnNldE5ld1JlcVRleHQoenRbc2UtMl0pO2JyZWFrO2Nhc2UgMTY6Y2Uuc2V0TmV3UmVxUmlzayh6dFtzZS0yXSk7YnJlYWs7Y2FzZSAxNzpjZS5zZXROZXdSZXFWZXJpZnlNZXRob2QoenRbc2UtMl0pO2JyZWFrO2Nhc2UgMjA6dGhpcy4kPWNlLlJlcXVpcmVtZW50VHlwZS5SRVFVSVJFTUVOVDticmVhaztjYXNlIDIxOnRoaXMuJD1jZS5SZXF1aXJlbWVudFR5cGUuRlVOQ1RJT05BTF9SRVFVSVJFTUVOVDticmVhaztjYXNlIDIyOnRoaXMuJD1jZS5SZXF1aXJlbWVudFR5cGUuSU5URVJGQUNFX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjM6dGhpcy4kPWNlLlJlcXVpcmVtZW50VHlwZS5QRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDticmVhaztjYXNlIDI0OnRoaXMuJD1jZS5SZXF1aXJlbWVudFR5cGUuUEhZU0lDQUxfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9Y2UuUmVxdWlyZW1lbnRUeXBlLkRFU0lHTl9DT05TVFJBSU5UO2JyZWFrO2Nhc2UgMjY6dGhpcy4kPWNlLlJpc2tMZXZlbC5MT1dfUklTSzticmVhaztjYXNlIDI3OnRoaXMuJD1jZS5SaXNrTGV2ZWwuTUVEX1JJU0s7YnJlYWs7Y2FzZSAyODp0aGlzLiQ9Y2UuUmlza0xldmVsLkhJR0hfUklTSzticmVhaztjYXNlIDI5OnRoaXMuJD1jZS5WZXJpZnlUeXBlLlZFUklGWV9BTkFMWVNJUzticmVhaztjYXNlIDMwOnRoaXMuJD1jZS5WZXJpZnlUeXBlLlZFUklGWV9ERU1PTlNUUkFUSU9OO2JyZWFrO2Nhc2UgMzE6dGhpcy4kPWNlLlZlcmlmeVR5cGUuVkVSSUZZX0lOU1BFQ1RJT047YnJlYWs7Y2FzZSAzMjp0aGlzLiQ9Y2UuVmVyaWZ5VHlwZS5WRVJJRllfVEVTVDticmVhaztjYXNlIDMzOmNlLmFkZEVsZW1lbnQoenRbc2UtM10pO2JyZWFrO2Nhc2UgMzQ6Y2Uuc2V0TmV3RWxlbWVudFR5cGUoenRbc2UtMl0pO2JyZWFrO2Nhc2UgMzU6Y2Uuc2V0TmV3RWxlbWVudERvY1JlZih6dFtzZS0yXSk7YnJlYWs7Y2FzZSAzODpjZS5hZGRSZWxhdGlvbnNoaXAoenRbc2UtMl0senRbc2VdLHp0W3NlLTRdKTticmVhaztjYXNlIDM5OmNlLmFkZFJlbGF0aW9uc2hpcCh6dFtzZS0yXSx6dFtzZS00XSx6dFtzZV0pO2JyZWFrO2Nhc2UgNDA6dGhpcy4kPWNlLlJlbGF0aW9uc2hpcHMuQ09OVEFJTlM7YnJlYWs7Y2FzZSA0MTp0aGlzLiQ9Y2UuUmVsYXRpb25zaGlwcy5DT1BJRVM7YnJlYWs7Y2FzZSA0Mjp0aGlzLiQ9Y2UuUmVsYXRpb25zaGlwcy5ERVJJVkVTO2JyZWFrO2Nhc2UgNDM6dGhpcy4kPWNlLlJlbGF0aW9uc2hpcHMuU0FUSVNGSUVTO2JyZWFrO2Nhc2UgNDQ6dGhpcy4kPWNlLlJlbGF0aW9uc2hpcHMuVkVSSUZJRVM7YnJlYWs7Y2FzZSA0NTp0aGlzLiQ9Y2UuUmVsYXRpb25zaGlwcy5SRUZJTkVTO2JyZWFrO2Nhc2UgNDY6dGhpcy4kPWNlLlJlbGF0aW9uc2hpcHMuVFJBQ0VTO2JyZWFrfX0sdGFibGU6W3szOjEsNDoyLDY6YSw5OmYsMTE6cCwxMzp3fSx7MTpbM119LHszOjgsNDoyLDU6WzEsN10sNjphLDk6ZiwxMTpwLDEzOnd9LHs1OlsxLDldfSx7MTA6WzEsMTBdfSx7MTI6WzEsMTFdfSxpKG0sWzIsNl0pLHszOjEyLDQ6Miw2OmEsOTpmLDExOnAsMTM6d30sezE6WzIsMl19LHs0OjE3LDU6Yiw3OjEzLDg6RSw5OmYsMTE6cCwxMzp3LDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE5LDIzOjIxLDMxOl8sMzI6QSwzMzpJLDM0OkIsMzU6TiwzNjpSLDQ0OnosNjI6Vyw2MzpldH0saShtLFsyLDRdKSxpKG0sWzIsNV0pLHsxOlsyLDFdfSx7ODpbMSwzMF19LHs0OjE3LDU6Yiw3OjMxLDg6RSw5OmYsMTE6cCwxMzp3LDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE5LDIzOjIxLDMxOl8sMzI6QSwzMzpJLDM0OkIsMzU6TiwzNjpSLDQ0OnosNjI6Vyw2MzpldH0sezQ6MTcsNTpiLDc6MzIsODpFLDk6ZiwxMTpwLDEzOncsMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTksMjM6MjEsMzE6XywzMjpBLDMzOkksMzQ6QiwzNTpOLDM2OlIsNDQ6eiw2MjpXLDYzOmV0fSx7NDoxNyw1OmIsNzozMyw4OkUsOTpmLDExOnAsMTM6dywxNDoxNCwxNToxNSwxNjoxNiwxNzoxOSwyMzoyMSwzMTpfLDMyOkEsMzM6SSwzNDpCLDM1Ok4sMzY6Uiw0NDp6LDYyOlcsNjM6ZXR9LHs0OjE3LDU6Yiw3OjM0LDg6RSw5OmYsMTE6cCwxMzp3LDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE5LDIzOjIxLDMxOl8sMzI6QSwzMzpJLDM0OkIsMzU6TiwzNjpSLDQ0OnosNjI6Vyw2MzpldH0sezQ6MTcsNTpiLDc6MzUsODpFLDk6ZiwxMTpwLDEzOncsMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTksMjM6MjEsMzE6XywzMjpBLDMzOkksMzQ6QiwzNTpOLDM2OlIsNDQ6eiw2MjpXLDYzOmV0fSx7MTg6MzYsNjI6WzEsMzddLDYzOlsxLDM4XX0sezQ1OjM5LDYyOlsxLDQwXSw2MzpbMSw0MV19LHs1MTpbMSw0Ml0sNTM6WzEsNDNdfSxpKHN0LFsyLDIwXSksaShzdCxbMiwyMV0pLGkoc3QsWzIsMjJdKSxpKHN0LFsyLDIzXSksaShzdCxbMiwyNF0pLGkoc3QsWzIsMjVdKSxpKGF0LFsyLDQ5XSksaShhdCxbMiw1MF0pLHsxOlsyLDNdfSx7ODpbMiw4XX0sezg6WzIsOV19LHs4OlsyLDEwXX0sezg6WzIsMTFdfSx7ODpbMiwxMl19LHsxOTpbMSw0NF19LHsxOTpbMiw0N119LHsxOTpbMiw0OF19LHsxOTpbMSw0NV19LHsxOTpbMiw1M119LHsxOTpbMiw1NF19LHs1Mjo0Niw1NTpidCw1NjptdCw1Nzp5dCw1ODpmdCw1OTp1dCw2MDp2dCw2MTpYfSx7NTI6NTQsNTU6YnQsNTY6bXQsNTc6eXQsNTg6ZnQsNTk6dXQsNjA6dnQsNjE6WH0sezU6WzEsNTVdfSx7NTpbMSw1Nl19LHs1MzpbMSw1N119LGkocHQsWzIsNDBdKSxpKHB0LFsyLDQxXSksaShwdCxbMiw0Ml0pLGkocHQsWzIsNDNdKSxpKHB0LFsyLDQ0XSksaShwdCxbMiw0NV0pLGkocHQsWzIsNDZdKSx7NTQ6WzEsNThdfSx7NTpVLDIwOjU5LDIxOlR0LDI0Om50LDI2Okl0LDI4Ok90LDMwOkJ0fSx7NTpFdCwzMDpaLDQ2OjY2LDQ3OkN0LDQ5Onh0fSx7MjM6NzEsNjI6Vyw2MzpldH0sezIzOjcyLDYyOlcsNjM6ZXR9LGkoSHQsWzIsMTNdKSx7MjI6WzEsNzNdfSx7MjI6WzEsNzRdfSx7MjI6WzEsNzVdfSx7MjI6WzEsNzZdfSx7NTpVLDIwOjc3LDIxOlR0LDI0Om50LDI2Okl0LDI4Ok90LDMwOkJ0fSxpKEh0LFsyLDE5XSksaShIdCxbMiwzM10pLHsyMjpbMSw3OF19LHsyMjpbMSw3OV19LHs1OkV0LDMwOlosNDY6ODAsNDc6Q3QsNDk6eHR9LGkoSHQsWzIsMzddKSxpKEh0LFsyLDM4XSksaShIdCxbMiwzOV0pLHsyMzo4MSw2MjpXLDYzOmV0fSx7MjU6ODIsNjI6WzEsODNdLDYzOlsxLDg0XX0sezI3Ojg1LDM3OlsxLDg2XSwzODpbMSw4N10sMzk6WzEsODhdfSx7Mjk6ODksNDA6WzEsOTBdLDQxOlsxLDkxXSw0MjpbMSw5Ml0sNDM6WzEsOTNdfSxpKEh0LFsyLDE4XSksezQ4Ojk0LDYyOlsxLDk1XSw2MzpbMSw5Nl19LHs1MDo5Nyw2MjpbMSw5OF0sNjM6WzEsOTldfSxpKEh0LFsyLDM2XSksezU6WzEsMTAwXX0sezU6WzEsMTAxXX0sezU6WzIsNTFdfSx7NTpbMiw1Ml19LHs1OlsxLDEwMl19LHs1OlsyLDI2XX0sezU6WzIsMjddfSx7NTpbMiwyOF19LHs1OlsxLDEwM119LHs1OlsyLDI5XX0sezU6WzIsMzBdfSx7NTpbMiwzMV19LHs1OlsyLDMyXX0sezU6WzEsMTA0XX0sezU6WzIsNTVdfSx7NTpbMiw1Nl19LHs1OlsxLDEwNV19LHs1OlsyLDU3XX0sezU6WzIsNThdfSx7NTpVLDIwOjEwNiwyMTpUdCwyNDpudCwyNjpJdCwyODpPdCwzMDpCdH0sezU6VSwyMDoxMDcsMjE6VHQsMjQ6bnQsMjY6SXQsMjg6T3QsMzA6QnR9LHs1OlUsMjA6MTA4LDIxOlR0LDI0Om50LDI2Okl0LDI4Ok90LDMwOkJ0fSx7NTpVLDIwOjEwOSwyMTpUdCwyNDpudCwyNjpJdCwyODpPdCwzMDpCdH0sezU6RXQsMzA6Wiw0NjoxMTAsNDc6Q3QsNDk6eHR9LHs1OkV0LDMwOlosNDY6MTExLDQ3OkN0LDQ5Onh0fSxpKEh0LFsyLDE0XSksaShIdCxbMiwxNV0pLGkoSHQsWzIsMTZdKSxpKEh0LFsyLDE3XSksaShIdCxbMiwzNF0pLGkoSHQsWzIsMzVdKV0sZGVmYXVsdEFjdGlvbnM6ezg6WzIsMl0sMTI6WzIsMV0sMzA6WzIsM10sMzE6WzIsOF0sMzI6WzIsOV0sMzM6WzIsMTBdLDM0OlsyLDExXSwzNTpbMiwxMl0sMzc6WzIsNDddLDM4OlsyLDQ4XSw0MDpbMiw1M10sNDE6WzIsNTRdLDgzOlsyLDUxXSw4NDpbMiw1Ml0sODY6WzIsMjZdLDg3OlsyLDI3XSw4ODpbMiwyOF0sOTA6WzIsMjldLDkxOlsyLDMwXSw5MjpbMiwzMV0sOTM6WzIsMzJdLDk1OlsyLDU1XSw5NjpbMiw1Nl0sOTg6WzIsNTddLDk5OlsyLDU4XX0scGFyc2VFcnJvcjpmdW5jdGlvbihtZSxWZSl7aWYoVmUucmVjb3ZlcmFibGUpdGhpcy50cmFjZShtZSk7ZWxzZXt2YXIgWWU9bmV3IEVycm9yKG1lKTt0aHJvdyBZZS5oYXNoPVZlLFllfX0scGFyc2U6ZnVuY3Rpb24obWUpe3ZhciBWZT10aGlzLFllPVswXSxjZT1bXSxrZT1bbnVsbF0senQ9W10scmU9dGhpcy50YWJsZSxzZT0iIixQZT0wLHRlPTAsTWU9MixkZT0xLG9uPXp0LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLG5pPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksS3M9e3l5Ont9fTtmb3IodmFyIHdzIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksd3MpJiYoS3MueXlbd3NdPXRoaXMueXlbd3NdKTtuaS5zZXRJbnB1dChtZSxLcy55eSksS3MueXkubGV4ZXI9bmksS3MueXkucGFyc2VyPXRoaXMsdHlwZW9mIG5pLnl5bGxvYz4idSImJihuaS55eWxsb2M9e30pO3ZhciBmbz1uaS55eWxsb2M7enQucHVzaChmbyk7dmFyIFhpPW5pLm9wdGlvbnMmJm5pLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBLcy55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1Lcy55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBFcigpe3ZhciBHcztyZXR1cm4gR3M9Y2UucG9wKCl8fG5pLmxleCgpfHxkZSx0eXBlb2YgR3MhPSJudW1iZXIiJiYoR3MgaW5zdGFuY2VvZiBBcnJheSYmKGNlPUdzLEdzPWNlLnBvcCgpKSxHcz1WZS5zeW1ib2xzX1tHc118fEdzKSxHc31mb3IodmFyIFhuLGRpLEVlLEtuLEhlPXt9LFRpLHBuLEVzLHFhOzspe2lmKGRpPVllW1llLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2RpXT9FZT10aGlzLmRlZmF1bHRBY3Rpb25zW2RpXTooKFhuPT09bnVsbHx8dHlwZW9mIFhuPiJ1IikmJihYbj1FcigpKSxFZT1yZVtkaV0mJnJlW2RpXVtYbl0pLHR5cGVvZiBFZT4idSJ8fCFFZS5sZW5ndGh8fCFFZVswXSl7dmFyIE1hPSIiO3FhPVtdO2ZvcihUaSBpbiByZVtkaV0pdGhpcy50ZXJtaW5hbHNfW1RpXSYmVGk+TWUmJnFhLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tUaV0rIiciKTtuaS5zaG93UG9zaXRpb24/TWE9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoUGUrMSkrYDoKYCtuaS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK3FhLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bWG5dfHxYbikrIiciOk1hPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFBlKzEpKyI6IFVuZXhwZWN0ZWQgIisoWG49PWRlPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW1huXXx8WG4pKyInIiksdGhpcy5wYXJzZUVycm9yKE1hLHt0ZXh0Om5pLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tYbl18fFhuLGxpbmU6bmkueXlsaW5lbm8sbG9jOmZvLGV4cGVjdGVkOnFhfSl9aWYoRWVbMF1pbnN0YW5jZW9mIEFycmF5JiZFZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2RpKyIsIHRva2VuOiAiK1huKTtzd2l0Y2goRWVbMF0pe2Nhc2UgMTpZZS5wdXNoKFhuKSxrZS5wdXNoKG5pLnl5dGV4dCksenQucHVzaChuaS55eWxsb2MpLFllLnB1c2goRWVbMV0pLFhuPW51bGwsdGU9bmkueXlsZW5nLHNlPW5pLnl5dGV4dCxQZT1uaS55eWxpbmVubyxmbz1uaS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKHBuPXRoaXMucHJvZHVjdGlvbnNfW0VlWzFdXVsxXSxIZS4kPWtlW2tlLmxlbmd0aC1wbl0sSGUuXyQ9e2ZpcnN0X2xpbmU6enRbenQubGVuZ3RoLShwbnx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOnp0W3p0Lmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnp0W3p0Lmxlbmd0aC0ocG58fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46enRbenQubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxYaSYmKEhlLl8kLnJhbmdlPVt6dFt6dC5sZW5ndGgtKHBufHwxKV0ucmFuZ2VbMF0senRbenQubGVuZ3RoLTFdLnJhbmdlWzFdXSksS249dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KEhlLFtzZSx0ZSxQZSxLcy55eSxFZVsxXSxrZSx6dF0uY29uY2F0KG9uKSksdHlwZW9mIEtuPCJ1IilyZXR1cm4gS247cG4mJihZZT1ZZS5zbGljZSgwLC0xKnBuKjIpLGtlPWtlLnNsaWNlKDAsLTEqcG4pLHp0PXp0LnNsaWNlKDAsLTEqcG4pKSxZZS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW0VlWzFdXVswXSksa2UucHVzaChIZS4kKSx6dC5wdXNoKEhlLl8kKSxFcz1yZVtZZVtZZS5sZW5ndGgtMl1dW1llW1llLmxlbmd0aC0xXV0sWWUucHVzaChFcyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LEZ0PWZ1bmN0aW9uKCl7dmFyIFNlPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKFZlLFllKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKFZlLFllKTtlbHNlIHRocm93IG5ldyBFcnJvcihWZSl9LHNldElucHV0OmZ1bmN0aW9uKG1lLFZlKXtyZXR1cm4gdGhpcy55eT1WZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9bWUsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIG1lPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1tZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9bWUsdGhpcy5tYXRjaGVkKz1tZTt2YXIgVmU9bWUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBWZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksbWV9LHVucHV0OmZ1bmN0aW9uKG1lKXt2YXIgVmU9bWUubGVuZ3RoLFllPW1lLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9bWUrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLVZlKSx0aGlzLm9mZnNldC09VmU7dmFyIGNlPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLFllLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09WWUubGVuZ3RoLTEpO3ZhciBrZT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46WWU/KFllLmxlbmd0aD09PWNlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrY2VbY2UubGVuZ3RoLVllLmxlbmd0aF0ubGVuZ3RoLVllWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tVmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1ba2VbMF0sa2VbMF0rdGhpcy55eWxlbmctVmVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihtZSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG1lKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBtZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKG1lLmxlbmd0aD4yMD8iLi4uIjoiIikrbWUuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgbWU9dGhpcy5tYXRjaDtyZXR1cm4gbWUubGVuZ3RoPDIwJiYobWUrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLW1lLmxlbmd0aCkpLChtZS5zdWJzdHIoMCwyMCkrKG1lLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgbWU9dGhpcy5wYXN0SW5wdXQoKSxWZT1uZXcgQXJyYXkobWUubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gbWUrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK1ZlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihtZSxWZSl7dmFyIFllLGNlLGtlO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihrZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihrZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxjZT1tZVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksY2UmJih0aGlzLnl5bGluZW5vKz1jZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpjZT9jZVtjZS5sZW5ndGgtMV0ubGVuZ3RoLWNlW2NlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK21lWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPW1lWzBdLHRoaXMubWF0Y2grPW1lWzBdLHRoaXMubWF0Y2hlcz1tZSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShtZVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9bWVbMF0sWWU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsVmUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksWWUpcmV0dXJuIFllO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciB6dCBpbiBrZSl0aGlzW3p0XT1rZVt6dF07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgbWUsVmUsWWUsY2U7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIga2U9dGhpcy5fY3VycmVudFJ1bGVzKCksenQ9MDt6dDxrZS5sZW5ndGg7enQrKylpZihZZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2tlW3p0XV0pLFllJiYoIVZlfHxZZVswXS5sZW5ndGg+VmVbMF0ubGVuZ3RoKSl7aWYoVmU9WWUsY2U9enQsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYobWU9dGhpcy50ZXN0X21hdGNoKFllLGtlW3p0XSksbWUhPT0hMSlyZXR1cm4gbWU7aWYodGhpcy5fYmFja3RyYWNrKXtWZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBWZT8obWU9dGhpcy50ZXN0X21hdGNoKFZlLGtlW2NlXSksbWUhPT0hMT9tZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIFZlPXRoaXMubmV4dCgpO3JldHVybiBWZXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oVmUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChWZSl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIFZlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIFZlPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oVmUpe3JldHVybiBWZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKFZlfHwwKSxWZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW1ZlXToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihWZSl7dGhpcy5iZWdpbihWZSl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oVmUsWWUsY2Usa2Upe3N3aXRjaChjZSl7Y2FzZSAwOnJldHVybiJ0aXRsZSI7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSw5O2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgMzpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMTE7Y2FzZSA0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSA1OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNzpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA4OnJldHVybiA1O2Nhc2UgOTpicmVhaztjYXNlIDEwOmJyZWFrO2Nhc2UgMTE6YnJlYWs7Y2FzZSAxMjpyZXR1cm4gODtjYXNlIDEzOnJldHVybiA2O2Nhc2UgMTQ6cmV0dXJuIDE5O2Nhc2UgMTU6cmV0dXJuIDMwO2Nhc2UgMTY6cmV0dXJuIDIyO2Nhc2UgMTc6cmV0dXJuIDIxO2Nhc2UgMTg6cmV0dXJuIDI0O2Nhc2UgMTk6cmV0dXJuIDI2O2Nhc2UgMjA6cmV0dXJuIDI4O2Nhc2UgMjE6cmV0dXJuIDMxO2Nhc2UgMjI6cmV0dXJuIDMyO2Nhc2UgMjM6cmV0dXJuIDMzO2Nhc2UgMjQ6cmV0dXJuIDM0O2Nhc2UgMjU6cmV0dXJuIDM1O2Nhc2UgMjY6cmV0dXJuIDM2O2Nhc2UgMjc6cmV0dXJuIDM3O2Nhc2UgMjg6cmV0dXJuIDM4O2Nhc2UgMjk6cmV0dXJuIDM5O2Nhc2UgMzA6cmV0dXJuIDQwO2Nhc2UgMzE6cmV0dXJuIDQxO2Nhc2UgMzI6cmV0dXJuIDQyO2Nhc2UgMzM6cmV0dXJuIDQzO2Nhc2UgMzQ6cmV0dXJuIDQ0O2Nhc2UgMzU6cmV0dXJuIDU1O2Nhc2UgMzY6cmV0dXJuIDU2O2Nhc2UgMzc6cmV0dXJuIDU3O2Nhc2UgMzg6cmV0dXJuIDU4O2Nhc2UgMzk6cmV0dXJuIDU5O2Nhc2UgNDA6cmV0dXJuIDYwO2Nhc2UgNDE6cmV0dXJuIDYxO2Nhc2UgNDI6cmV0dXJuIDQ3O2Nhc2UgNDM6cmV0dXJuIDQ5O2Nhc2UgNDQ6cmV0dXJuIDUxO2Nhc2UgNDU6cmV0dXJuIDU0O2Nhc2UgNDY6cmV0dXJuIDUzO2Nhc2UgNDc6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSA0ODp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA0OTpyZXR1cm4icVN0cmluZyI7Y2FzZSA1MDpyZXR1cm4gWWUueXl0ZXh0PVllLnl5dGV4dC50cmltKCksNjJ9fSxydWxlczpbL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/Oihccj9cbikrKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiVbXlxuXSopL2ksL14oPzokKS9pLC9eKD86cmVxdWlyZW1lbnREaWFncmFtXGIpL2ksL14oPzpceykvaSwvXig/Olx9KS9pLC9eKD86OikvaSwvXig/OmlkXGIpL2ksL14oPzp0ZXh0XGIpL2ksL14oPzpyaXNrXGIpL2ksL14oPzp2ZXJpZnlNZXRob2RcYikvaSwvXig/OnJlcXVpcmVtZW50XGIpL2ksL14oPzpmdW5jdGlvbmFsUmVxdWlyZW1lbnRcYikvaSwvXig/OmludGVyZmFjZVJlcXVpcmVtZW50XGIpL2ksL14oPzpwZXJmb3JtYW5jZVJlcXVpcmVtZW50XGIpL2ksL14oPzpwaHlzaWNhbFJlcXVpcmVtZW50XGIpL2ksL14oPzpkZXNpZ25Db25zdHJhaW50XGIpL2ksL14oPzpsb3dcYikvaSwvXig/Om1lZGl1bVxiKS9pLC9eKD86aGlnaFxiKS9pLC9eKD86YW5hbHlzaXNcYikvaSwvXig/OmRlbW9uc3RyYXRpb25cYikvaSwvXig/Omluc3BlY3Rpb25cYikvaSwvXig/OnRlc3RcYikvaSwvXig/OmVsZW1lbnRcYikvaSwvXig/OmNvbnRhaW5zXGIpL2ksL14oPzpjb3BpZXNcYikvaSwvXig/OmRlcml2ZXNcYikvaSwvXig/OnNhdGlzZmllc1xiKS9pLC9eKD86dmVyaWZpZXNcYikvaSwvXig/OnJlZmluZXNcYikvaSwvXig/OnRyYWNlc1xiKS9pLC9eKD86dHlwZVxiKS9pLC9eKD86ZG9jcmVmXGIpL2ksL14oPzo8LSkvaSwvXig/Oi0+KS9pLC9eKD86LSkvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86W1x3XVteXHJcblx7XDxcPlwtXD1dKikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzYsN10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls0XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzJdLGluY2x1c2l2ZTohMX0sdW5xU3RyaW5nOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHRva2VuOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzQ4LDQ5XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMyw1LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw1MF0saW5jbHVzaXZlOiEwfX19O3JldHVybiBTZX0oKTtMZS5sZXhlcj1GdDtmdW5jdGlvbiBnbigpe3RoaXMueXk9e319cmV0dXJuIGduLnByb3RvdHlwZT1MZSxMZS5QYXJzZXI9Z24sbmV3IGdufSgpO2hndC5wYXJzZXI9aGd0O2NvbnN0IFZIZT1oZ3Q7bGV0IGZndD1bXSx3cD17fSx6Rj17fSx5az17fSxxRj17fTtjb25zdCBHSGU9e1JlcXVpcmVtZW50VHlwZTp7UkVRVUlSRU1FTlQ6IlJlcXVpcmVtZW50IixGVU5DVElPTkFMX1JFUVVJUkVNRU5UOiJGdW5jdGlvbmFsIFJlcXVpcmVtZW50IixJTlRFUkZBQ0VfUkVRVUlSRU1FTlQ6IkludGVyZmFjZSBSZXF1aXJlbWVudCIsUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQ6IlBlcmZvcm1hbmNlIFJlcXVpcmVtZW50IixQSFlTSUNBTF9SRVFVSVJFTUVOVDoiUGh5c2ljYWwgUmVxdWlyZW1lbnQiLERFU0lHTl9DT05TVFJBSU5UOiJEZXNpZ24gQ29uc3RyYWludCJ9LFJpc2tMZXZlbDp7TE9XX1JJU0s6IkxvdyIsTUVEX1JJU0s6Ik1lZGl1bSIsSElHSF9SSVNLOiJIaWdoIn0sVmVyaWZ5VHlwZTp7VkVSSUZZX0FOQUxZU0lTOiJBbmFseXNpcyIsVkVSSUZZX0RFTU9OU1RSQVRJT046IkRlbW9uc3RyYXRpb24iLFZFUklGWV9JTlNQRUNUSU9OOiJJbnNwZWN0aW9uIixWRVJJRllfVEVTVDoiVGVzdCJ9LFJlbGF0aW9uc2hpcHM6e0NPTlRBSU5TOiJjb250YWlucyIsQ09QSUVTOiJjb3BpZXMiLERFUklWRVM6ImRlcml2ZXMiLFNBVElTRklFUzoic2F0aXNmaWVzIixWRVJJRklFUzoidmVyaWZpZXMiLFJFRklORVM6InJlZmluZXMiLFRSQUNFUzoidHJhY2VzIn0sZ2V0Q29uZmlnOigpPT5PZSgpLnJlcSxhZGRSZXF1aXJlbWVudDooaSxhKT0+KHpGW2ldPT09dm9pZCAwJiYoekZbaV09e25hbWU6aSx0eXBlOmEsaWQ6d3AuaWQsdGV4dDp3cC50ZXh0LHJpc2s6d3Aucmlzayx2ZXJpZnlNZXRob2Q6d3AudmVyaWZ5TWV0aG9kfSksd3A9e30sekZbaV0pLGdldFJlcXVpcmVtZW50czooKT0+ekYsc2V0TmV3UmVxSWQ6aT0+e3dwIT09dm9pZCAwJiYod3AuaWQ9aSl9LHNldE5ld1JlcVRleHQ6aT0+e3dwIT09dm9pZCAwJiYod3AudGV4dD1pKX0sc2V0TmV3UmVxUmlzazppPT57d3AhPT12b2lkIDAmJih3cC5yaXNrPWkpfSxzZXROZXdSZXFWZXJpZnlNZXRob2Q6aT0+e3dwIT09dm9pZCAwJiYod3AudmVyaWZ5TWV0aG9kPWkpfSxzZXRBY2NUaXRsZTpFMCxnZXRBY2NUaXRsZTpmZyxzZXRBY2NEZXNjcmlwdGlvbjpkZyxnZXRBY2NEZXNjcmlwdGlvbjpnZyxhZGRFbGVtZW50Omk9PihxRltpXT09PXZvaWQgMCYmKHFGW2ldPXtuYW1lOmksdHlwZTp5ay50eXBlLGRvY1JlZjp5ay5kb2NSZWZ9LFV0LmluZm8oIkFkZGVkIG5ldyByZXF1aXJlbWVudDogIixpKSkseWs9e30scUZbaV0pLGdldEVsZW1lbnRzOigpPT5xRixzZXROZXdFbGVtZW50VHlwZTppPT57eWshPT12b2lkIDAmJih5ay50eXBlPWkpfSxzZXROZXdFbGVtZW50RG9jUmVmOmk9Pnt5ayE9PXZvaWQgMCYmKHlrLmRvY1JlZj1pKX0sYWRkUmVsYXRpb25zaGlwOihpLGEsZik9PntmZ3QucHVzaCh7dHlwZTppLHNyYzphLGRzdDpmfSl9LGdldFJlbGF0aW9uc2hpcHM6KCk9PmZndCxjbGVhcjooKT0+e2ZndD1bXSx3cD17fSx6Rj17fSx5az17fSxxRj17fSxoZygpfX0sVUhlPWk9PmAKCiAgbWFya2VyIHsKICAgIGZpbGw6ICR7aS5yZWxhdGlvbkNvbG9yfTsKICAgIHN0cm9rZTogJHtpLnJlbGF0aW9uQ29sb3J9OwogIH0KCiAgbWFya2VyLmNyb3NzIHsKICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgfQoKICBzdmcgewogICAgZm9udC1mYW1pbHk6ICR7aS5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogJHtpLmZvbnRTaXplfTsKICB9CgogIC5yZXFCb3ggewogICAgZmlsbDogJHtpLnJlcXVpcmVtZW50QmFja2dyb3VuZH07CiAgICBmaWxsLW9wYWNpdHk6IDEuMDsKICAgIHN0cm9rZTogJHtpLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAke2kucmVxdWlyZW1lbnRCb3JkZXJTaXplfTsKICB9CiAgCiAgLnJlcVRpdGxlLCAucmVxTGFiZWx7CiAgICBmaWxsOiAgJHtpLnJlcXVpcmVtZW50VGV4dENvbG9yfTsKICB9CiAgLnJlcUxhYmVsQm94IHsKICAgIGZpbGw6ICR7aS5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZH07CiAgICBmaWxsLW9wYWNpdHk6IDEuMDsKICB9CgogIC5yZXEtdGl0bGUtbGluZSB7CiAgICBzdHJva2U6ICR7aS5yZXF1aXJlbWVudEJvcmRlckNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogJHtpLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZX07CiAgfQogIC5yZWxhdGlvbnNoaXBMaW5lIHsKICAgIHN0cm9rZTogJHtpLnJlbGF0aW9uQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAxOwogIH0KICAucmVsYXRpb25zaGlwTGFiZWwgewogICAgZmlsbDogJHtpLnJlbGF0aW9uTGFiZWxDb2xvcn07CiAgfQoKYCxkZ3Q9e0NPTlRBSU5TOiJjb250YWlucyIsQVJST1c6ImFycm93In0seFJ0PXtSZXFNYXJrZXJzOmRndCxpbnNlcnRMaW5lRW5kaW5nczooaSxhKT0+e2xldCBmPWkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZGd0LkNPTlRBSU5TKyJfbGluZV9lbmRpbmciKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIixhLmxpbmVfaGVpZ2h0LzIpLmF0dHIoIm1hcmtlcldpZHRoIixhLmxpbmVfaGVpZ2h0KS5hdHRyKCJtYXJrZXJIZWlnaHQiLGEubGluZV9oZWlnaHQpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImciKTtmLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGEubGluZV9oZWlnaHQvMikuYXR0cigiY3kiLGEubGluZV9oZWlnaHQvMikuYXR0cigiciIsYS5saW5lX2hlaWdodC8yKS5hdHRyKCJmaWxsIiwibm9uZSIpLGYuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoIngyIixhLmxpbmVfaGVpZ2h0KS5hdHRyKCJ5MSIsYS5saW5lX2hlaWdodC8yKS5hdHRyKCJ5MiIsYS5saW5lX2hlaWdodC8yKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEpLGYuYXBwZW5kKCJsaW5lIikuYXR0cigieTEiLDApLmF0dHIoInkyIixhLmxpbmVfaGVpZ2h0KS5hdHRyKCJ4MSIsYS5saW5lX2hlaWdodC8yKS5hdHRyKCJ4MiIsYS5saW5lX2hlaWdodC8yKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZGd0LkFSUk9XKyJfbGluZV9lbmRpbmciKS5hdHRyKCJyZWZYIixhLmxpbmVfaGVpZ2h0KS5hdHRyKCJyZWZZIiwuNSphLmxpbmVfaGVpZ2h0KS5hdHRyKCJtYXJrZXJXaWR0aCIsYS5saW5lX2hlaWdodCkuYXR0cigibWFya2VySGVpZ2h0IixhLmxpbmVfaGVpZ2h0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYE0wLDAKICAgICAgTCR7YS5saW5lX2hlaWdodH0sJHthLmxpbmVfaGVpZ2h0LzJ9CiAgICAgIE0ke2EubGluZV9oZWlnaHR9LCR7YS5saW5lX2hlaWdodC8yfQogICAgICBMMCwke2EubGluZV9oZWlnaHR9YCkuYXR0cigic3Ryb2tlLXdpZHRoIiwxKX19O2xldCBFaD17fSxrUnQ9MDtjb25zdCBFUnQ9KGksYSk9PmkuaW5zZXJ0KCJyZWN0IiwiIyIrYSkuYXR0cigiY2xhc3MiLCJyZXEgcmVxQm94IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLEVoLnJlY3RfbWluX3dpZHRoKyJweCIpLmF0dHIoImhlaWdodCIsRWgucmVjdF9taW5faGVpZ2h0KyJweCIpLFRSdD0oaSxhLGYpPT57bGV0IHA9RWgucmVjdF9taW5fd2lkdGgvMix3PWkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJyZXEgcmVxTGFiZWwgcmVxVGl0bGUiKS5hdHRyKCJpZCIsYSkuYXR0cigieCIscCkuYXR0cigieSIsRWgucmVjdF9wYWRkaW5nKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImhhbmdpbmciKSxtPTA7Zi5mb3JFYWNoKEE9PnttPT0wP3cuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieCIsRWgucmVjdF9taW5fd2lkdGgvMikuYXR0cigiZHkiLDApLnRleHQoQSk6dy5hcHBlbmQoInRzcGFuIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4IixFaC5yZWN0X21pbl93aWR0aC8yKS5hdHRyKCJkeSIsRWgubGluZV9oZWlnaHQqLjc1KS50ZXh0KEEpLG0rK30pO2xldCBiPTEuNSpFaC5yZWN0X3BhZGRpbmcsRT1tKkVoLmxpbmVfaGVpZ2h0Ki43NSxfPWIrRTtyZXR1cm4gaS5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsInJlcS10aXRsZS1saW5lIikuYXR0cigieDEiLCIwIikuYXR0cigieDIiLEVoLnJlY3RfbWluX3dpZHRoKS5hdHRyKCJ5MSIsXykuYXR0cigieTIiLF8pLHt0aXRsZU5vZGU6dyx5Ol99fSxDUnQ9KGksYSxmLHApPT57bGV0IHc9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZXFMYWJlbCIpLmF0dHIoImlkIixhKS5hdHRyKCJ4IixFaC5yZWN0X3BhZGRpbmcpLmF0dHIoInkiLHApLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiaGFuZ2luZyIpLG09MDtjb25zdCBiPTMwO2xldCBFPVtdO3JldHVybiBmLmZvckVhY2goXz0+e2xldCBBPV8ubGVuZ3RoO2Zvcig7QT5iJiZtPDM7KXtsZXQgST1fLnN1YnN0cmluZygwLGIpO189Xy5zdWJzdHJpbmcoYixfLmxlbmd0aCksQT1fLmxlbmd0aCxFW0UubGVuZ3RoXT1JLG0rK31pZihtPT0zKXtsZXQgST1FW0UubGVuZ3RoLTFdO0VbRS5sZW5ndGgtMV09SS5zdWJzdHJpbmcoMCxJLmxlbmd0aC00KSsiLi4uIn1lbHNlIEVbRS5sZW5ndGhdPV87bT0wfSksRS5mb3JFYWNoKF89Pnt3LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixFaC5yZWN0X3BhZGRpbmcpLmF0dHIoImR5IixFaC5saW5lX2hlaWdodCkudGV4dChfKX0pLHd9LFdIZT0oaSxhLGYscCk9Pntjb25zdCB3PWEubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCksbT1hLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKHcqLjUpLGI9InJlbCIra1J0O2tSdCsrO2NvbnN0IF89aS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZWxhdGlvbnNoaXBMYWJlbCIpLmF0dHIoImlkIixiKS5hdHRyKCJ4IixtLngpLmF0dHIoInkiLG0ueSkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnRleHQocCkubm9kZSgpLmdldEJCb3goKTtpLmluc2VydCgicmVjdCIsIiMiK2IpLmF0dHIoImNsYXNzIiwicmVxIHJlcUxhYmVsQm94IikuYXR0cigieCIsbS54LV8ud2lkdGgvMikuYXR0cigieSIsbS55LV8uaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixfLndpZHRoKS5hdHRyKCJoZWlnaHQiLF8uaGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCI4NSUiKX0sWUhlPWZ1bmN0aW9uKGksYSxmLHAsdyl7Y29uc3QgbT1mLmVkZ2UoZkwoYS5zcmMpLGZMKGEuZHN0KSksYj1FNSgpLngoZnVuY3Rpb24oXyl7cmV0dXJuIF8ueH0pLnkoZnVuY3Rpb24oXyl7cmV0dXJuIF8ueX0pLEU9aS5pbnNlcnQoInBhdGgiLCIjIitwKS5hdHRyKCJjbGFzcyIsImVyIHJlbGF0aW9uc2hpcExpbmUiKS5hdHRyKCJkIixiKG0ucG9pbnRzKSkuYXR0cigiZmlsbCIsIm5vbmUiKTthLnR5cGU9PXcuZGIuUmVsYXRpb25zaGlwcy5DT05UQUlOUz9FLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK0tyLmdldFVybChFaC5hcnJvd01hcmtlckFic29sdXRlKSsiIyIrYS50eXBlKyJfbGluZV9lbmRpbmcpIik6KEUuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjEwLDciKSxFLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitLci5nZXRVcmwoRWguYXJyb3dNYXJrZXJBYnNvbHV0ZSkrIiMiK3hSdC5SZXFNYXJrZXJzLkFSUk9XKyJfbGluZV9lbmRpbmcpIikpLFdIZShpLEUsRWgsYDw8JHthLnR5cGV9Pj5gKX0sS0hlPShpLGEsZik9PntPYmplY3Qua2V5cyhpKS5mb3JFYWNoKHA9PntsZXQgdz1pW3BdO3A9ZkwocCksVXQuaW5mbygiQWRkZWQgbmV3IHJlcXVpcmVtZW50OiAiLHApO2NvbnN0IG09Zi5hcHBlbmQoImciKS5hdHRyKCJpZCIscCksYj0icmVxLSIrcCxFPUVSdChtLGIpO2xldCBfPVRSdChtLHArIl90aXRsZSIsW2A8PCR7dy50eXBlfT4+YCxgJHt3Lm5hbWV9YF0pO0NSdChtLHArIl9ib2R5IixbYElkOiAke3cuaWR9YCxgVGV4dDogJHt3LnRleHR9YCxgUmlzazogJHt3LnJpc2t9YCxgVmVyaWZpY2F0aW9uOiAke3cudmVyaWZ5TWV0aG9kfWBdLF8ueSk7Y29uc3QgQT1FLm5vZGUoKS5nZXRCQm94KCk7YS5zZXROb2RlKHAse3dpZHRoOkEud2lkdGgsaGVpZ2h0OkEuaGVpZ2h0LHNoYXBlOiJyZWN0IixpZDpwfSl9KX0sWEhlPShpLGEsZik9PntPYmplY3Qua2V5cyhpKS5mb3JFYWNoKHA9PntsZXQgdz1pW3BdO2NvbnN0IG09ZkwocCksYj1mLmFwcGVuZCgiZyIpLmF0dHIoImlkIixtKSxFPSJlbGVtZW50LSIrbSxfPUVSdChiLEUpO2xldCBBPVRSdChiLEUrIl90aXRsZSIsWyI8PEVsZW1lbnQ+PiIsYCR7cH1gXSk7Q1J0KGIsRSsiX2JvZHkiLFtgVHlwZTogJHt3LnR5cGV8fCJOb3QgU3BlY2lmaWVkIn1gLGBEb2MgUmVmOiAke3cuZG9jUmVmfHwiTm9uZSJ9YF0sQS55KTtjb25zdCBJPV8ubm9kZSgpLmdldEJCb3goKTthLnNldE5vZGUobSx7d2lkdGg6SS53aWR0aCxoZWlnaHQ6SS5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOm19KX0pfSxRSGU9KGksYSk9PihpLmZvckVhY2goZnVuY3Rpb24oZil7bGV0IHA9ZkwoZi5zcmMpLHc9ZkwoZi5kc3QpO2Euc2V0RWRnZShwLHcse3JlbGF0aW9uc2hpcDpmfSl9KSxpKSxaSGU9ZnVuY3Rpb24oaSxhKXthLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihmKXtmIT09dm9pZCAwJiZhLm5vZGUoZikhPT12b2lkIDAmJihpLnNlbGVjdCgiIyIrZiksaS5zZWxlY3QoIiMiK2YpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhhLm5vZGUoZikueC1hLm5vZGUoZikud2lkdGgvMikrIiwiKyhhLm5vZGUoZikueS1hLm5vZGUoZikuaGVpZ2h0LzIpKyIgKSIpKX0pfSxmTD1pPT5pLnJlcGxhY2UoL1xzL2csIiIpLnJlcGxhY2UoL1wuL2csIl8iKSxKSGU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpWSGUsZGI6R0hlLHJlbmRlcmVyOntkcmF3OihpLGEsZixwKT0+e0VoPU9lKCkucmVxdWlyZW1lbnQ7Y29uc3Qgdz1FaC5zZWN1cml0eUxldmVsO2xldCBtO3c9PT0ic2FuZGJveCImJihtPXlyKCIjaSIrYSkpO2NvbnN0IEU9eXIodz09PSJzYW5kYm94Ij9tLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHk6ImJvZHkiKS5zZWxlY3QoYFtpZD0nJHthfSddYCk7eFJ0Lmluc2VydExpbmVFbmRpbmdzKEUsRWgpO2NvbnN0IF89bmV3IGMxKHttdWx0aWdyYXBoOiExLGNvbXBvdW5kOiExLGRpcmVjdGVkOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6RWgubGF5b3V0RGlyZWN0aW9uLG1hcmdpbng6MjAsbWFyZ2lueToyMCxub2Rlc2VwOjEwMCxlZGdlc2VwOjEwMCxyYW5rc2VwOjEwMH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO2xldCBBPXAuZGIuZ2V0UmVxdWlyZW1lbnRzKCksST1wLmRiLmdldEVsZW1lbnRzKCksQj1wLmRiLmdldFJlbGF0aW9uc2hpcHMoKTtLSGUoQSxfLEUpLFhIZShJLF8sRSksUUhlKEIsXyksYUwoXyksWkhlKEUsXyksQi5mb3JFYWNoKGZ1bmN0aW9uKGV0KXtZSGUoRSxldCxfLGEscCl9KTtjb25zdCBOPUVoLnJlY3RfcGFkZGluZyxSPUUubm9kZSgpLmdldEJCb3goKSx6PVIud2lkdGgrTioyLFc9Ui5oZWlnaHQrTioyO2swKEUsVyx6LEVoLnVzZU1heFdpZHRoKSxFLmF0dHIoInZpZXdCb3giLGAke1IueC1OfSAke1IueS1OfSAke3p9ICR7V31gKX19LHN0eWxlczpVSGV9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBnZ3Q9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihjZSxrZSx6dCxyZSl7Zm9yKHp0PXp0fHx7fSxyZT1jZS5sZW5ndGg7cmUtLTt6dFtjZVtyZV1dPWtlKTtyZXR1cm4genR9LGE9WzEsMl0sZj1bMSwzXSxwPVsxLDRdLHc9WzIsNF0sbT1bMSw5XSxiPVsxLDExXSxFPVsxLDEzXSxfPVsxLDE0XSxBPVsxLDE2XSxJPVsxLDE3XSxCPVsxLDE4XSxOPVsxLDI0XSxSPVsxLDI1XSx6PVsxLDI2XSxXPVsxLDI3XSxldD1bMSwyOF0sc3Q9WzEsMjldLGF0PVsxLDMwXSxidD1bMSwzMV0sbXQ9WzEsMzJdLHl0PVsxLDMzXSxmdD1bMSwzNF0sdXQ9WzEsMzVdLHZ0PVsxLDM2XSxYPVsxLDM3XSxwdD1bMSwzOF0sVT1bMSwzOV0sVHQ9WzEsNDFdLG50PVsxLDQyXSxJdD1bMSw0M10sT3Q9WzEsNDRdLEJ0PVsxLDQ1XSxFdD1bMSw0Nl0sWj1bMSw0LDUsMTMsMTQsMTYsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNDcsNDgsNDksNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLEN0PVs0LDUsMTYsNTAsNTIsNTNdLHh0PVs0LDUsMTMsMTQsMTYsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLEh0PVs0LDUsMTMsMTQsMTYsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNDksNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLExlPVs0LDUsMTMsMTQsMTYsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNDgsNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLEZ0PVs0LDUsMTMsMTQsMTYsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNDcsNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLGduPVs2OCw2OSw3MF0sU2U9WzEsMTIwXSxtZT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU1BBQ0U6NCxORVdMSU5FOjUsU0Q6Nixkb2N1bWVudDo3LGxpbmU6OCxzdGF0ZW1lbnQ6OSxib3hfc2VjdGlvbjoxMCxib3hfbGluZToxMSxwYXJ0aWNpcGFudF9zdGF0ZW1lbnQ6MTIsY3JlYXRlOjEzLGJveDoxNCxyZXN0T2ZMaW5lOjE1LGVuZDoxNixzaWduYWw6MTcsYXV0b251bWJlcjoxOCxOVU06MTksb2ZmOjIwLGFjdGl2YXRlOjIxLGFjdG9yOjIyLGRlYWN0aXZhdGU6MjMsbm90ZV9zdGF0ZW1lbnQ6MjQsbGlua3Nfc3RhdGVtZW50OjI1LGxpbmtfc3RhdGVtZW50OjI2LHByb3BlcnRpZXNfc3RhdGVtZW50OjI3LGRldGFpbHNfc3RhdGVtZW50OjI4LHRpdGxlOjI5LGxlZ2FjeV90aXRsZTozMCxhY2NfdGl0bGU6MzEsYWNjX3RpdGxlX3ZhbHVlOjMyLGFjY19kZXNjcjozMyxhY2NfZGVzY3JfdmFsdWU6MzQsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZTozNSxsb29wOjM2LHJlY3Q6Mzcsb3B0OjM4LGFsdDozOSxlbHNlX3NlY3Rpb25zOjQwLHBhcjo0MSxwYXJfc2VjdGlvbnM6NDIscGFyX292ZXI6NDMsY3JpdGljYWw6NDQsb3B0aW9uX3NlY3Rpb25zOjQ1LGJyZWFrOjQ2LG9wdGlvbjo0NyxhbmQ6NDgsZWxzZTo0OSxwYXJ0aWNpcGFudDo1MCxBUzo1MSxwYXJ0aWNpcGFudF9hY3Rvcjo1MixkZXN0cm95OjUzLG5vdGU6NTQscGxhY2VtZW50OjU1LHRleHQyOjU2LG92ZXI6NTcsYWN0b3JfcGFpcjo1OCxsaW5rczo1OSxsaW5rOjYwLHByb3BlcnRpZXM6NjEsZGV0YWlsczo2MixzcGFjZUxpc3Q6NjMsIiwiOjY0LGxlZnRfb2Y6NjUscmlnaHRfb2Y6NjYsc2lnbmFsdHlwZTo2NywiKyI6NjgsIi0iOjY5LEFDVE9SOjcwLFNPTElEX09QRU5fQVJST1c6NzEsRE9UVEVEX09QRU5fQVJST1c6NzIsU09MSURfQVJST1c6NzMsRE9UVEVEX0FSUk9XOjc0LFNPTElEX0NST1NTOjc1LERPVFRFRF9DUk9TUzo3NixTT0xJRF9QT0lOVDo3NyxET1RURURfUE9JTlQ6NzgsVFhUOjc5LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJTUEFDRSIsNToiTkVXTElORSIsNjoiU0QiLDEzOiJjcmVhdGUiLDE0OiJib3giLDE1OiJyZXN0T2ZMaW5lIiwxNjoiZW5kIiwxODoiYXV0b251bWJlciIsMTk6Ik5VTSIsMjA6Im9mZiIsMjE6ImFjdGl2YXRlIiwyMzoiZGVhY3RpdmF0ZSIsMjk6InRpdGxlIiwzMDoibGVnYWN5X3RpdGxlIiwzMToiYWNjX3RpdGxlIiwzMjoiYWNjX3RpdGxlX3ZhbHVlIiwzMzoiYWNjX2Rlc2NyIiwzNDoiYWNjX2Rlc2NyX3ZhbHVlIiwzNToiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzY6Imxvb3AiLDM3OiJyZWN0IiwzODoib3B0IiwzOToiYWx0Iiw0MToicGFyIiw0MzoicGFyX292ZXIiLDQ0OiJjcml0aWNhbCIsNDY6ImJyZWFrIiw0Nzoib3B0aW9uIiw0ODoiYW5kIiw0OToiZWxzZSIsNTA6InBhcnRpY2lwYW50Iiw1MToiQVMiLDUyOiJwYXJ0aWNpcGFudF9hY3RvciIsNTM6ImRlc3Ryb3kiLDU0OiJub3RlIiw1Nzoib3ZlciIsNTk6ImxpbmtzIiw2MDoibGluayIsNjE6InByb3BlcnRpZXMiLDYyOiJkZXRhaWxzIiw2NDoiLCIsNjU6ImxlZnRfb2YiLDY2OiJyaWdodF9vZiIsNjg6IisiLDY5OiItIiw3MDoiQUNUT1IiLDcxOiJTT0xJRF9PUEVOX0FSUk9XIiw3MjoiRE9UVEVEX09QRU5fQVJST1ciLDczOiJTT0xJRF9BUlJPVyIsNzQ6IkRPVFRFRF9BUlJPVyIsNzU6IlNPTElEX0NST1NTIiw3NjoiRE9UVEVEX0NST1NTIiw3NzoiU09MSURfUE9JTlQiLDc4OiJET1RURURfUE9JTlQiLDc5OiJUWFQifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsMl0sWzMsMl0sWzcsMF0sWzcsMl0sWzgsMl0sWzgsMV0sWzgsMV0sWzEwLDBdLFsxMCwyXSxbMTEsMl0sWzExLDFdLFsxMSwxXSxbOSwxXSxbOSwyXSxbOSw0XSxbOSwyXSxbOSw0XSxbOSwzXSxbOSwzXSxbOSwyXSxbOSwzXSxbOSwzXSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwxXSxbOSwxXSxbOSwyXSxbOSwyXSxbOSwxXSxbOSw0XSxbOSw0XSxbOSw0XSxbOSw0XSxbOSw0XSxbOSw0XSxbOSw0XSxbOSw0XSxbNDUsMV0sWzQ1LDRdLFs0MiwxXSxbNDIsNF0sWzQwLDFdLFs0MCw0XSxbMTIsNV0sWzEyLDNdLFsxMiw1XSxbMTIsM10sWzEyLDNdLFsyNCw0XSxbMjQsNF0sWzI1LDNdLFsyNiwzXSxbMjcsM10sWzI4LDNdLFs2MywyXSxbNjMsMV0sWzU4LDNdLFs1OCwxXSxbNTUsMV0sWzU1LDFdLFsxNyw1XSxbMTcsNV0sWzE3LDRdLFsyMiwxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs1NiwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihrZSx6dCxyZSxzZSxQZSx0ZSxNZSl7dmFyIGRlPXRlLmxlbmd0aC0xO3N3aXRjaChQZSl7Y2FzZSAzOnJldHVybiBzZS5hcHBseSh0ZVtkZV0pLHRlW2RlXTtjYXNlIDQ6Y2FzZSA5OnRoaXMuJD1bXTticmVhaztjYXNlIDU6Y2FzZSAxMDp0ZVtkZS0xXS5wdXNoKHRlW2RlXSksdGhpcy4kPXRlW2RlLTFdO2JyZWFrO2Nhc2UgNjpjYXNlIDc6Y2FzZSAxMTpjYXNlIDEyOnRoaXMuJD10ZVtkZV07YnJlYWs7Y2FzZSA4OmNhc2UgMTM6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTU6dGVbZGVdLnR5cGU9ImNyZWF0ZVBhcnRpY2lwYW50Iix0aGlzLiQ9dGVbZGVdO2JyZWFrO2Nhc2UgMTY6dGVbZGUtMV0udW5zaGlmdCh7dHlwZToiYm94U3RhcnQiLGJveERhdGE6c2UucGFyc2VCb3hEYXRhKHRlW2RlLTJdKX0pLHRlW2RlLTFdLnB1c2goe3R5cGU6ImJveEVuZCIsYm94VGV4dDp0ZVtkZS0yXX0pLHRoaXMuJD10ZVtkZS0xXTticmVhaztjYXNlIDE4OnRoaXMuJD17dHlwZToic2VxdWVuY2VJbmRleCIsc2VxdWVuY2VJbmRleDpOdW1iZXIodGVbZGUtMl0pLHNlcXVlbmNlSW5kZXhTdGVwOk51bWJlcih0ZVtkZS0xXSksc2VxdWVuY2VWaXNpYmxlOiEwLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuQVVUT05VTUJFUn07YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9e3R5cGU6InNlcXVlbmNlSW5kZXgiLHNlcXVlbmNlSW5kZXg6TnVtYmVyKHRlW2RlLTFdKSxzZXF1ZW5jZUluZGV4U3RlcDoxLHNlcXVlbmNlVmlzaWJsZTohMCxzaWduYWxUeXBlOnNlLkxJTkVUWVBFLkFVVE9OVU1CRVJ9O2JyZWFrO2Nhc2UgMjA6dGhpcy4kPXt0eXBlOiJzZXF1ZW5jZUluZGV4IixzZXF1ZW5jZVZpc2libGU6ITEsc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDIxOnRoaXMuJD17dHlwZToic2VxdWVuY2VJbmRleCIsc2VxdWVuY2VWaXNpYmxlOiEwLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuQVVUT05VTUJFUn07YnJlYWs7Y2FzZSAyMjp0aGlzLiQ9e3R5cGU6ImFjdGl2ZVN0YXJ0IixzaWduYWxUeXBlOnNlLkxJTkVUWVBFLkFDVElWRV9TVEFSVCxhY3Rvcjp0ZVtkZS0xXX07YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9e3R5cGU6ImFjdGl2ZUVuZCIsc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5BQ1RJVkVfRU5ELGFjdG9yOnRlW2RlLTFdfTticmVhaztjYXNlIDI5OnNlLnNldERpYWdyYW1UaXRsZSh0ZVtkZV0uc3Vic3RyaW5nKDYpKSx0aGlzLiQ9dGVbZGVdLnN1YnN0cmluZyg2KTticmVhaztjYXNlIDMwOnNlLnNldERpYWdyYW1UaXRsZSh0ZVtkZV0uc3Vic3RyaW5nKDcpKSx0aGlzLiQ9dGVbZGVdLnN1YnN0cmluZyg3KTticmVhaztjYXNlIDMxOnRoaXMuJD10ZVtkZV0udHJpbSgpLHNlLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAzMjpjYXNlIDMzOnRoaXMuJD10ZVtkZV0udHJpbSgpLHNlLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAzNDp0ZVtkZS0xXS51bnNoaWZ0KHt0eXBlOiJsb29wU3RhcnQiLGxvb3BUZXh0OnNlLnBhcnNlTWVzc2FnZSh0ZVtkZS0yXSksc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5MT09QX1NUQVJUfSksdGVbZGUtMV0ucHVzaCh7dHlwZToibG9vcEVuZCIsbG9vcFRleHQ6dGVbZGUtMl0sc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5MT09QX0VORH0pLHRoaXMuJD10ZVtkZS0xXTticmVhaztjYXNlIDM1OnRlW2RlLTFdLnVuc2hpZnQoe3R5cGU6InJlY3RTdGFydCIsY29sb3I6c2UucGFyc2VNZXNzYWdlKHRlW2RlLTJdKSxzaWduYWxUeXBlOnNlLkxJTkVUWVBFLlJFQ1RfU1RBUlR9KSx0ZVtkZS0xXS5wdXNoKHt0eXBlOiJyZWN0RW5kIixjb2xvcjpzZS5wYXJzZU1lc3NhZ2UodGVbZGUtMl0pLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuUkVDVF9FTkR9KSx0aGlzLiQ9dGVbZGUtMV07YnJlYWs7Y2FzZSAzNjp0ZVtkZS0xXS51bnNoaWZ0KHt0eXBlOiJvcHRTdGFydCIsb3B0VGV4dDpzZS5wYXJzZU1lc3NhZ2UodGVbZGUtMl0pLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuT1BUX1NUQVJUfSksdGVbZGUtMV0ucHVzaCh7dHlwZToib3B0RW5kIixvcHRUZXh0OnNlLnBhcnNlTWVzc2FnZSh0ZVtkZS0yXSksc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5PUFRfRU5EfSksdGhpcy4kPXRlW2RlLTFdO2JyZWFrO2Nhc2UgMzc6dGVbZGUtMV0udW5zaGlmdCh7dHlwZToiYWx0U3RhcnQiLGFsdFRleHQ6c2UucGFyc2VNZXNzYWdlKHRlW2RlLTJdKSxzaWduYWxUeXBlOnNlLkxJTkVUWVBFLkFMVF9TVEFSVH0pLHRlW2RlLTFdLnB1c2goe3R5cGU6ImFsdEVuZCIsc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5BTFRfRU5EfSksdGhpcy4kPXRlW2RlLTFdO2JyZWFrO2Nhc2UgMzg6dGVbZGUtMV0udW5zaGlmdCh7dHlwZToicGFyU3RhcnQiLHBhclRleHQ6c2UucGFyc2VNZXNzYWdlKHRlW2RlLTJdKSxzaWduYWxUeXBlOnNlLkxJTkVUWVBFLlBBUl9TVEFSVH0pLHRlW2RlLTFdLnB1c2goe3R5cGU6InBhckVuZCIsc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5QQVJfRU5EfSksdGhpcy4kPXRlW2RlLTFdO2JyZWFrO2Nhc2UgMzk6dGVbZGUtMV0udW5zaGlmdCh7dHlwZToicGFyU3RhcnQiLHBhclRleHQ6c2UucGFyc2VNZXNzYWdlKHRlW2RlLTJdKSxzaWduYWxUeXBlOnNlLkxJTkVUWVBFLlBBUl9PVkVSX1NUQVJUfSksdGVbZGUtMV0ucHVzaCh7dHlwZToicGFyRW5kIixzaWduYWxUeXBlOnNlLkxJTkVUWVBFLlBBUl9FTkR9KSx0aGlzLiQ9dGVbZGUtMV07YnJlYWs7Y2FzZSA0MDp0ZVtkZS0xXS51bnNoaWZ0KHt0eXBlOiJjcml0aWNhbFN0YXJ0Iixjcml0aWNhbFRleHQ6c2UucGFyc2VNZXNzYWdlKHRlW2RlLTJdKSxzaWduYWxUeXBlOnNlLkxJTkVUWVBFLkNSSVRJQ0FMX1NUQVJUfSksdGVbZGUtMV0ucHVzaCh7dHlwZToiY3JpdGljYWxFbmQiLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuQ1JJVElDQUxfRU5EfSksdGhpcy4kPXRlW2RlLTFdO2JyZWFrO2Nhc2UgNDE6dGVbZGUtMV0udW5zaGlmdCh7dHlwZToiYnJlYWtTdGFydCIsYnJlYWtUZXh0OnNlLnBhcnNlTWVzc2FnZSh0ZVtkZS0yXSksc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5CUkVBS19TVEFSVH0pLHRlW2RlLTFdLnB1c2goe3R5cGU6ImJyZWFrRW5kIixvcHRUZXh0OnNlLnBhcnNlTWVzc2FnZSh0ZVtkZS0yXSksc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5CUkVBS19FTkR9KSx0aGlzLiQ9dGVbZGUtMV07YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9dGVbZGUtM10uY29uY2F0KFt7dHlwZToib3B0aW9uIixvcHRpb25UZXh0OnNlLnBhcnNlTWVzc2FnZSh0ZVtkZS0xXSksc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5DUklUSUNBTF9PUFRJT059LHRlW2RlXV0pO2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXRlW2RlLTNdLmNvbmNhdChbe3R5cGU6ImFuZCIscGFyVGV4dDpzZS5wYXJzZU1lc3NhZ2UodGVbZGUtMV0pLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuUEFSX0FORH0sdGVbZGVdXSk7YnJlYWs7Y2FzZSA0Nzp0aGlzLiQ9dGVbZGUtM10uY29uY2F0KFt7dHlwZToiZWxzZSIsYWx0VGV4dDpzZS5wYXJzZU1lc3NhZ2UodGVbZGUtMV0pLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuQUxUX0VMU0V9LHRlW2RlXV0pO2JyZWFrO2Nhc2UgNDg6dGVbZGUtM10uZHJhdz0icGFydGljaXBhbnQiLHRlW2RlLTNdLnR5cGU9ImFkZFBhcnRpY2lwYW50Iix0ZVtkZS0zXS5kZXNjcmlwdGlvbj1zZS5wYXJzZU1lc3NhZ2UodGVbZGUtMV0pLHRoaXMuJD10ZVtkZS0zXTticmVhaztjYXNlIDQ5OnRlW2RlLTFdLmRyYXc9InBhcnRpY2lwYW50Iix0ZVtkZS0xXS50eXBlPSJhZGRQYXJ0aWNpcGFudCIsdGhpcy4kPXRlW2RlLTFdO2JyZWFrO2Nhc2UgNTA6dGVbZGUtM10uZHJhdz0iYWN0b3IiLHRlW2RlLTNdLnR5cGU9ImFkZFBhcnRpY2lwYW50Iix0ZVtkZS0zXS5kZXNjcmlwdGlvbj1zZS5wYXJzZU1lc3NhZ2UodGVbZGUtMV0pLHRoaXMuJD10ZVtkZS0zXTticmVhaztjYXNlIDUxOnRlW2RlLTFdLmRyYXc9ImFjdG9yIix0ZVtkZS0xXS50eXBlPSJhZGRQYXJ0aWNpcGFudCIsdGhpcy4kPXRlW2RlLTFdO2JyZWFrO2Nhc2UgNTI6dGVbZGUtMV0udHlwZT0iZGVzdHJveVBhcnRpY2lwYW50Iix0aGlzLiQ9dGVbZGUtMV07YnJlYWs7Y2FzZSA1Mzp0aGlzLiQ9W3RlW2RlLTFdLHt0eXBlOiJhZGROb3RlIixwbGFjZW1lbnQ6dGVbZGUtMl0sYWN0b3I6dGVbZGUtMV0uYWN0b3IsdGV4dDp0ZVtkZV19XTticmVhaztjYXNlIDU0OnRlW2RlLTJdPVtdLmNvbmNhdCh0ZVtkZS0xXSx0ZVtkZS0xXSkuc2xpY2UoMCwyKSx0ZVtkZS0yXVswXT10ZVtkZS0yXVswXS5hY3Rvcix0ZVtkZS0yXVsxXT10ZVtkZS0yXVsxXS5hY3Rvcix0aGlzLiQ9W3RlW2RlLTFdLHt0eXBlOiJhZGROb3RlIixwbGFjZW1lbnQ6c2UuUExBQ0VNRU5ULk9WRVIsYWN0b3I6dGVbZGUtMl0uc2xpY2UoMCwyKSx0ZXh0OnRlW2RlXX1dO2JyZWFrO2Nhc2UgNTU6dGhpcy4kPVt0ZVtkZS0xXSx7dHlwZToiYWRkTGlua3MiLGFjdG9yOnRlW2RlLTFdLmFjdG9yLHRleHQ6dGVbZGVdfV07YnJlYWs7Y2FzZSA1Njp0aGlzLiQ9W3RlW2RlLTFdLHt0eXBlOiJhZGRBTGluayIsYWN0b3I6dGVbZGUtMV0uYWN0b3IsdGV4dDp0ZVtkZV19XTticmVhaztjYXNlIDU3OnRoaXMuJD1bdGVbZGUtMV0se3R5cGU6ImFkZFByb3BlcnRpZXMiLGFjdG9yOnRlW2RlLTFdLmFjdG9yLHRleHQ6dGVbZGVdfV07YnJlYWs7Y2FzZSA1ODp0aGlzLiQ9W3RlW2RlLTFdLHt0eXBlOiJhZGREZXRhaWxzIixhY3Rvcjp0ZVtkZS0xXS5hY3Rvcix0ZXh0OnRlW2RlXX1dO2JyZWFrO2Nhc2UgNjE6dGhpcy4kPVt0ZVtkZS0yXSx0ZVtkZV1dO2JyZWFrO2Nhc2UgNjI6dGhpcy4kPXRlW2RlXTticmVhaztjYXNlIDYzOnRoaXMuJD1zZS5QTEFDRU1FTlQuTEVGVE9GO2JyZWFrO2Nhc2UgNjQ6dGhpcy4kPXNlLlBMQUNFTUVOVC5SSUdIVE9GO2JyZWFrO2Nhc2UgNjU6dGhpcy4kPVt0ZVtkZS00XSx0ZVtkZS0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTp0ZVtkZS00XS5hY3Rvcix0bzp0ZVtkZS0xXS5hY3RvcixzaWduYWxUeXBlOnRlW2RlLTNdLG1zZzp0ZVtkZV0sYWN0aXZhdGU6ITB9LHt0eXBlOiJhY3RpdmVTdGFydCIsc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQsYWN0b3I6dGVbZGUtMV19XTticmVhaztjYXNlIDY2OnRoaXMuJD1bdGVbZGUtNF0sdGVbZGUtMV0se3R5cGU6ImFkZE1lc3NhZ2UiLGZyb206dGVbZGUtNF0uYWN0b3IsdG86dGVbZGUtMV0uYWN0b3Isc2lnbmFsVHlwZTp0ZVtkZS0zXSxtc2c6dGVbZGVdfSx7dHlwZToiYWN0aXZlRW5kIixzaWduYWxUeXBlOnNlLkxJTkVUWVBFLkFDVElWRV9FTkQsYWN0b3I6dGVbZGUtNF19XTticmVhaztjYXNlIDY3OnRoaXMuJD1bdGVbZGUtM10sdGVbZGUtMV0se3R5cGU6ImFkZE1lc3NhZ2UiLGZyb206dGVbZGUtM10uYWN0b3IsdG86dGVbZGUtMV0uYWN0b3Isc2lnbmFsVHlwZTp0ZVtkZS0yXSxtc2c6dGVbZGVdfV07YnJlYWs7Y2FzZSA2ODp0aGlzLiQ9e3R5cGU6ImFkZFBhcnRpY2lwYW50IixhY3Rvcjp0ZVtkZV19O2JyZWFrO2Nhc2UgNjk6dGhpcy4kPXNlLkxJTkVUWVBFLlNPTElEX09QRU47YnJlYWs7Y2FzZSA3MDp0aGlzLiQ9c2UuTElORVRZUEUuRE9UVEVEX09QRU47YnJlYWs7Y2FzZSA3MTp0aGlzLiQ9c2UuTElORVRZUEUuU09MSUQ7YnJlYWs7Y2FzZSA3Mjp0aGlzLiQ9c2UuTElORVRZUEUuRE9UVEVEO2JyZWFrO2Nhc2UgNzM6dGhpcy4kPXNlLkxJTkVUWVBFLlNPTElEX0NST1NTO2JyZWFrO2Nhc2UgNzQ6dGhpcy4kPXNlLkxJTkVUWVBFLkRPVFRFRF9DUk9TUzticmVhaztjYXNlIDc1OnRoaXMuJD1zZS5MSU5FVFlQRS5TT0xJRF9QT0lOVDticmVhaztjYXNlIDc2OnRoaXMuJD1zZS5MSU5FVFlQRS5ET1RURURfUE9JTlQ7YnJlYWs7Y2FzZSA3Nzp0aGlzLiQ9c2UucGFyc2VNZXNzYWdlKHRlW2RlXS50cmltKCkuc3Vic3RyaW5nKDEpKTticmVha319LHRhYmxlOlt7MzoxLDQ6YSw1OmYsNjpwfSx7MTpbM119LHszOjUsNDphLDU6Ziw2OnB9LHszOjYsNDphLDU6Ziw2OnB9LGkoWzEsNCw1LDEzLDE0LDE4LDIxLDIzLDI5LDMwLDMxLDMzLDM1LDM2LDM3LDM4LDM5LDQxLDQzLDQ0LDQ2LDUwLDUyLDUzLDU0LDU5LDYwLDYxLDYyLDcwXSx3LHs3Ojd9KSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDNdLDQ6bSw1OmIsODo4LDk6MTAsMTI6MTIsMTM6RSwxNDpfLDE3OjE1LDE4OkEsMjE6SSwyMjo0MCwyMzpCLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5Ok4sMzA6UiwzMTp6LDMzOlcsMzU6ZXQsMzY6c3QsMzc6YXQsMzg6YnQsMzk6bXQsNDE6eXQsNDM6ZnQsNDQ6dXQsNDY6dnQsNTA6WCw1MjpwdCw1MzpVLDU0OlR0LDU5Om50LDYwOkl0LDYxOk90LDYyOkJ0LDcwOkV0fSxpKFosWzIsNV0pLHs5OjQ3LDEyOjEyLDEzOkUsMTQ6XywxNzoxNSwxODpBLDIxOkksMjI6NDAsMjM6QiwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpOLDMwOlIsMzE6eiwzMzpXLDM1OmV0LDM2OnN0LDM3OmF0LDM4OmJ0LDM5Om10LDQxOnl0LDQzOmZ0LDQ0OnV0LDQ2OnZ0LDUwOlgsNTI6cHQsNTM6VSw1NDpUdCw1OTpudCw2MDpJdCw2MTpPdCw2MjpCdCw3MDpFdH0saShaLFsyLDddKSxpKFosWzIsOF0pLGkoWixbMiwxNF0pLHsxMjo0OCw1MDpYLDUyOnB0LDUzOlV9LHsxNTpbMSw0OV19LHs1OlsxLDUwXX0sezU6WzEsNTNdLDE5OlsxLDUxXSwyMDpbMSw1Ml19LHsyMjo1NCw3MDpFdH0sezIyOjU1LDcwOkV0fSx7NTpbMSw1Nl19LHs1OlsxLDU3XX0sezU6WzEsNThdfSx7NTpbMSw1OV19LHs1OlsxLDYwXX0saShaLFsyLDI5XSksaShaLFsyLDMwXSksezMyOlsxLDYxXX0sezM0OlsxLDYyXX0saShaLFsyLDMzXSksezE1OlsxLDYzXX0sezE1OlsxLDY0XX0sezE1OlsxLDY1XX0sezE1OlsxLDY2XX0sezE1OlsxLDY3XX0sezE1OlsxLDY4XX0sezE1OlsxLDY5XX0sezE1OlsxLDcwXX0sezIyOjcxLDcwOkV0fSx7MjI6NzIsNzA6RXR9LHsyMjo3Myw3MDpFdH0sezY3Ojc0LDcxOlsxLDc1XSw3MjpbMSw3Nl0sNzM6WzEsNzddLDc0OlsxLDc4XSw3NTpbMSw3OV0sNzY6WzEsODBdLDc3OlsxLDgxXSw3ODpbMSw4Ml19LHs1NTo4Myw1NzpbMSw4NF0sNjU6WzEsODVdLDY2OlsxLDg2XX0sezIyOjg3LDcwOkV0fSx7MjI6ODgsNzA6RXR9LHsyMjo4OSw3MDpFdH0sezIyOjkwLDcwOkV0fSxpKFs1LDUxLDY0LDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5XSxbMiw2OF0pLGkoWixbMiw2XSksaShaLFsyLDE1XSksaShDdCxbMiw5XSx7MTA6OTF9KSxpKFosWzIsMTddKSx7NTpbMSw5M10sMTk6WzEsOTJdfSx7NTpbMSw5NF19LGkoWixbMiwyMV0pLHs1OlsxLDk1XX0sezU6WzEsOTZdfSxpKFosWzIsMjRdKSxpKFosWzIsMjVdKSxpKFosWzIsMjZdKSxpKFosWzIsMjddKSxpKFosWzIsMjhdKSxpKFosWzIsMzFdKSxpKFosWzIsMzJdKSxpKHh0LHcsezc6OTd9KSxpKHh0LHcsezc6OTh9KSxpKHh0LHcsezc6OTl9KSxpKEh0LHcsezQwOjEwMCw3OjEwMX0pLGkoTGUsdyx7NDI6MTAyLDc6MTAzfSksaShMZSx3LHs3OjEwMyw0MjoxMDR9KSxpKEZ0LHcsezQ1OjEwNSw3OjEwNn0pLGkoeHQsdyx7NzoxMDd9KSx7NTpbMSwxMDldLDUxOlsxLDEwOF19LHs1OlsxLDExMV0sNTE6WzEsMTEwXX0sezU6WzEsMTEyXX0sezIyOjExNSw2ODpbMSwxMTNdLDY5OlsxLDExNF0sNzA6RXR9LGkoZ24sWzIsNjldKSxpKGduLFsyLDcwXSksaShnbixbMiw3MV0pLGkoZ24sWzIsNzJdKSxpKGduLFsyLDczXSksaShnbixbMiw3NF0pLGkoZ24sWzIsNzVdKSxpKGduLFsyLDc2XSksezIyOjExNiw3MDpFdH0sezIyOjExOCw1ODoxMTcsNzA6RXR9LHs3MDpbMiw2M119LHs3MDpbMiw2NF19LHs1NjoxMTksNzk6U2V9LHs1NjoxMjEsNzk6U2V9LHs1NjoxMjIsNzk6U2V9LHs1NjoxMjMsNzk6U2V9LHs0OlsxLDEyNl0sNTpbMSwxMjhdLDExOjEyNSwxMjoxMjcsMTY6WzEsMTI0XSw1MDpYLDUyOnB0LDUzOlV9LHs1OlsxLDEyOV19LGkoWixbMiwxOV0pLGkoWixbMiwyMF0pLGkoWixbMiwyMl0pLGkoWixbMiwyM10pLHs0Om0sNTpiLDg6OCw5OjEwLDEyOjEyLDEzOkUsMTQ6XywxNjpbMSwxMzBdLDE3OjE1LDE4OkEsMjE6SSwyMjo0MCwyMzpCLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5Ok4sMzA6UiwzMTp6LDMzOlcsMzU6ZXQsMzY6c3QsMzc6YXQsMzg6YnQsMzk6bXQsNDE6eXQsNDM6ZnQsNDQ6dXQsNDY6dnQsNTA6WCw1MjpwdCw1MzpVLDU0OlR0LDU5Om50LDYwOkl0LDYxOk90LDYyOkJ0LDcwOkV0fSx7NDptLDU6Yiw4OjgsOToxMCwxMjoxMiwxMzpFLDE0Ol8sMTY6WzEsMTMxXSwxNzoxNSwxODpBLDIxOkksMjI6NDAsMjM6QiwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpOLDMwOlIsMzE6eiwzMzpXLDM1OmV0LDM2OnN0LDM3OmF0LDM4OmJ0LDM5Om10LDQxOnl0LDQzOmZ0LDQ0OnV0LDQ2OnZ0LDUwOlgsNTI6cHQsNTM6VSw1NDpUdCw1OTpudCw2MDpJdCw2MTpPdCw2MjpCdCw3MDpFdH0sezQ6bSw1OmIsODo4LDk6MTAsMTI6MTIsMTM6RSwxNDpfLDE2OlsxLDEzMl0sMTc6MTUsMTg6QSwyMTpJLDIyOjQwLDIzOkIsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6TiwzMDpSLDMxOnosMzM6VywzNTpldCwzNjpzdCwzNzphdCwzODpidCwzOTptdCw0MTp5dCw0MzpmdCw0NDp1dCw0Njp2dCw1MDpYLDUyOnB0LDUzOlUsNTQ6VHQsNTk6bnQsNjA6SXQsNjE6T3QsNjI6QnQsNzA6RXR9LHsxNjpbMSwxMzNdfSx7NDptLDU6Yiw4OjgsOToxMCwxMjoxMiwxMzpFLDE0Ol8sMTY6WzIsNDZdLDE3OjE1LDE4OkEsMjE6SSwyMjo0MCwyMzpCLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5Ok4sMzA6UiwzMTp6LDMzOlcsMzU6ZXQsMzY6c3QsMzc6YXQsMzg6YnQsMzk6bXQsNDE6eXQsNDM6ZnQsNDQ6dXQsNDY6dnQsNDk6WzEsMTM0XSw1MDpYLDUyOnB0LDUzOlUsNTQ6VHQsNTk6bnQsNjA6SXQsNjE6T3QsNjI6QnQsNzA6RXR9LHsxNjpbMSwxMzVdfSx7NDptLDU6Yiw4OjgsOToxMCwxMjoxMiwxMzpFLDE0Ol8sMTY6WzIsNDRdLDE3OjE1LDE4OkEsMjE6SSwyMjo0MCwyMzpCLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5Ok4sMzA6UiwzMTp6LDMzOlcsMzU6ZXQsMzY6c3QsMzc6YXQsMzg6YnQsMzk6bXQsNDE6eXQsNDM6ZnQsNDQ6dXQsNDY6dnQsNDg6WzEsMTM2XSw1MDpYLDUyOnB0LDUzOlUsNTQ6VHQsNTk6bnQsNjA6SXQsNjE6T3QsNjI6QnQsNzA6RXR9LHsxNjpbMSwxMzddfSx7MTY6WzEsMTM4XX0sezQ6bSw1OmIsODo4LDk6MTAsMTI6MTIsMTM6RSwxNDpfLDE2OlsyLDQyXSwxNzoxNSwxODpBLDIxOkksMjI6NDAsMjM6QiwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpOLDMwOlIsMzE6eiwzMzpXLDM1OmV0LDM2OnN0LDM3OmF0LDM4OmJ0LDM5Om10LDQxOnl0LDQzOmZ0LDQ0OnV0LDQ2OnZ0LDQ3OlsxLDEzOV0sNTA6WCw1MjpwdCw1MzpVLDU0OlR0LDU5Om50LDYwOkl0LDYxOk90LDYyOkJ0LDcwOkV0fSx7NDptLDU6Yiw4OjgsOToxMCwxMjoxMiwxMzpFLDE0Ol8sMTY6WzEsMTQwXSwxNzoxNSwxODpBLDIxOkksMjI6NDAsMjM6QiwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpOLDMwOlIsMzE6eiwzMzpXLDM1OmV0LDM2OnN0LDM3OmF0LDM4OmJ0LDM5Om10LDQxOnl0LDQzOmZ0LDQ0OnV0LDQ2OnZ0LDUwOlgsNTI6cHQsNTM6VSw1NDpUdCw1OTpudCw2MDpJdCw2MTpPdCw2MjpCdCw3MDpFdH0sezE1OlsxLDE0MV19LGkoWixbMiw0OV0pLHsxNTpbMSwxNDJdfSxpKFosWzIsNTFdKSxpKFosWzIsNTJdKSx7MjI6MTQzLDcwOkV0fSx7MjI6MTQ0LDcwOkV0fSx7NTY6MTQ1LDc5OlNlfSx7NTY6MTQ2LDc5OlNlfSx7NTY6MTQ3LDc5OlNlfSx7NjQ6WzEsMTQ4XSw3OTpbMiw2Ml19LHs1OlsyLDU1XX0sezU6WzIsNzddfSx7NTpbMiw1Nl19LHs1OlsyLDU3XX0sezU6WzIsNThdfSxpKFosWzIsMTZdKSxpKEN0LFsyLDEwXSksezEyOjE0OSw1MDpYLDUyOnB0LDUzOlV9LGkoQ3QsWzIsMTJdKSxpKEN0LFsyLDEzXSksaShaLFsyLDE4XSksaShaLFsyLDM0XSksaShaLFsyLDM1XSksaShaLFsyLDM2XSksaShaLFsyLDM3XSksezE1OlsxLDE1MF19LGkoWixbMiwzOF0pLHsxNTpbMSwxNTFdfSxpKFosWzIsMzldKSxpKFosWzIsNDBdKSx7MTU6WzEsMTUyXX0saShaLFsyLDQxXSksezU6WzEsMTUzXX0sezU6WzEsMTU0XX0sezU2OjE1NSw3OTpTZX0sezU2OjE1Niw3OTpTZX0sezU6WzIsNjddfSx7NTpbMiw1M119LHs1OlsyLDU0XX0sezIyOjE1Nyw3MDpFdH0saShDdCxbMiwxMV0pLGkoSHQsdyx7NzoxMDEsNDA6MTU4fSksaShMZSx3LHs3OjEwMyw0MjoxNTl9KSxpKEZ0LHcsezc6MTA2LDQ1OjE2MH0pLGkoWixbMiw0OF0pLGkoWixbMiw1MF0pLHs1OlsyLDY1XX0sezU6WzIsNjZdfSx7Nzk6WzIsNjFdfSx7MTY6WzIsNDddfSx7MTY6WzIsNDVdfSx7MTY6WzIsNDNdfV0sZGVmYXVsdEFjdGlvbnM6ezU6WzIsMV0sNjpbMiwyXSw4NTpbMiw2M10sODY6WzIsNjRdLDExOTpbMiw1NV0sMTIwOlsyLDc3XSwxMjE6WzIsNTZdLDEyMjpbMiw1N10sMTIzOlsyLDU4XSwxNDU6WzIsNjddLDE0NjpbMiw1M10sMTQ3OlsyLDU0XSwxNTU6WzIsNjVdLDE1NjpbMiw2Nl0sMTU3OlsyLDYxXSwxNTg6WzIsNDddLDE1OTpbMiw0NV0sMTYwOlsyLDQzXX0scGFyc2VFcnJvcjpmdW5jdGlvbihrZSx6dCl7aWYoenQucmVjb3ZlcmFibGUpdGhpcy50cmFjZShrZSk7ZWxzZXt2YXIgcmU9bmV3IEVycm9yKGtlKTt0aHJvdyByZS5oYXNoPXp0LHJlfX0scGFyc2U6ZnVuY3Rpb24oa2Upe3ZhciB6dD10aGlzLHJlPVswXSxzZT1bXSxQZT1bbnVsbF0sdGU9W10sTWU9dGhpcy50YWJsZSxkZT0iIixvbj0wLG5pPTAsS3M9Mix3cz0xLGZvPXRlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLFhpPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksRXI9e3l5Ont9fTtmb3IodmFyIFhuIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksWG4pJiYoRXIueXlbWG5dPXRoaXMueXlbWG5dKTtYaS5zZXRJbnB1dChrZSxFci55eSksRXIueXkubGV4ZXI9WGksRXIueXkucGFyc2VyPXRoaXMsdHlwZW9mIFhpLnl5bGxvYz4idSImJihYaS55eWxsb2M9e30pO3ZhciBkaT1YaS55eWxsb2M7dGUucHVzaChkaSk7dmFyIEVlPVhpLm9wdGlvbnMmJlhpLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBFci55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1Fci55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBLbigpe3ZhciB6cztyZXR1cm4genM9c2UucG9wKCl8fFhpLmxleCgpfHx3cyx0eXBlb2YgenMhPSJudW1iZXIiJiYoenMgaW5zdGFuY2VvZiBBcnJheSYmKHNlPXpzLHpzPXNlLnBvcCgpKSx6cz16dC5zeW1ib2xzX1t6c118fHpzKSx6c31mb3IodmFyIEhlLFRpLHBuLEVzLHFhPXt9LE1hLEdzLFBvLHZzOzspe2lmKFRpPXJlW3JlLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW1RpXT9wbj10aGlzLmRlZmF1bHRBY3Rpb25zW1RpXTooKEhlPT09bnVsbHx8dHlwZW9mIEhlPiJ1IikmJihIZT1LbigpKSxwbj1NZVtUaV0mJk1lW1RpXVtIZV0pLHR5cGVvZiBwbj4idSJ8fCFwbi5sZW5ndGh8fCFwblswXSl7dmFyIHJ1PSIiO3ZzPVtdO2ZvcihNYSBpbiBNZVtUaV0pdGhpcy50ZXJtaW5hbHNfW01hXSYmTWE+S3MmJnZzLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tNYV0rIiciKTtYaS5zaG93UG9zaXRpb24/cnU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisob24rMSkrYDoKYCtYaS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK3ZzLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bSGVdfHxIZSkrIiciOnJ1PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKG9uKzEpKyI6IFVuZXhwZWN0ZWQgIisoSGU9PXdzPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW0hlXXx8SGUpKyInIiksdGhpcy5wYXJzZUVycm9yKHJ1LHt0ZXh0OlhpLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tIZV18fEhlLGxpbmU6WGkueXlsaW5lbm8sbG9jOmRpLGV4cGVjdGVkOnZzfSl9aWYocG5bMF1pbnN0YW5jZW9mIEFycmF5JiZwbi5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK1RpKyIsIHRva2VuOiAiK0hlKTtzd2l0Y2gocG5bMF0pe2Nhc2UgMTpyZS5wdXNoKEhlKSxQZS5wdXNoKFhpLnl5dGV4dCksdGUucHVzaChYaS55eWxsb2MpLHJlLnB1c2gocG5bMV0pLEhlPW51bGwsbmk9WGkueXlsZW5nLGRlPVhpLnl5dGV4dCxvbj1YaS55eWxpbmVubyxkaT1YaS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKEdzPXRoaXMucHJvZHVjdGlvbnNfW3BuWzFdXVsxXSxxYS4kPVBlW1BlLmxlbmd0aC1Hc10scWEuXyQ9e2ZpcnN0X2xpbmU6dGVbdGUubGVuZ3RoLShHc3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRlW3RlLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRlW3RlLmxlbmd0aC0oR3N8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGVbdGUubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxFZSYmKHFhLl8kLnJhbmdlPVt0ZVt0ZS5sZW5ndGgtKEdzfHwxKV0ucmFuZ2VbMF0sdGVbdGUubGVuZ3RoLTFdLnJhbmdlWzFdXSksRXM9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHFhLFtkZSxuaSxvbixFci55eSxwblsxXSxQZSx0ZV0uY29uY2F0KGZvKSksdHlwZW9mIEVzPCJ1IilyZXR1cm4gRXM7R3MmJihyZT1yZS5zbGljZSgwLC0xKkdzKjIpLFBlPVBlLnNsaWNlKDAsLTEqR3MpLHRlPXRlLnNsaWNlKDAsLTEqR3MpKSxyZS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3BuWzFdXVswXSksUGUucHVzaChxYS4kKSx0ZS5wdXNoKHFhLl8kKSxQbz1NZVtyZVtyZS5sZW5ndGgtMl1dW3JlW3JlLmxlbmd0aC0xXV0scmUucHVzaChQbyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LFZlPWZ1bmN0aW9uKCl7dmFyIGNlPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHp0LHJlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHp0LHJlKTtlbHNlIHRocm93IG5ldyBFcnJvcih6dCl9LHNldElucHV0OmZ1bmN0aW9uKGtlLHp0KXtyZXR1cm4gdGhpcy55eT16dHx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9a2UsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIGtlPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1rZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9a2UsdGhpcy5tYXRjaGVkKz1rZTt2YXIgenQ9a2UubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiB6dD8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksa2V9LHVucHV0OmZ1bmN0aW9uKGtlKXt2YXIgenQ9a2UubGVuZ3RoLHJlPWtlLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9a2UrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLXp0KSx0aGlzLm9mZnNldC09enQ7dmFyIHNlPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLHJlLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09cmUubGVuZ3RoLTEpO3ZhciBQZT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46cmU/KHJlLmxlbmd0aD09PXNlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrc2Vbc2UubGVuZ3RoLXJlLmxlbmd0aF0ubGVuZ3RoLXJlWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tenR9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bUGVbMF0sUGVbMF0rdGhpcy55eWxlbmctenRdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihrZSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKGtlKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBrZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKGtlLmxlbmd0aD4yMD8iLi4uIjoiIikra2Uuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIga2U9dGhpcy5tYXRjaDtyZXR1cm4ga2UubGVuZ3RoPDIwJiYoa2UrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLWtlLmxlbmd0aCkpLChrZS5zdWJzdHIoMCwyMCkrKGtlLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIga2U9dGhpcy5wYXN0SW5wdXQoKSx6dD1uZXcgQXJyYXkoa2UubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4ga2UrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK3p0KyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihrZSx6dCl7dmFyIHJlLHNlLFBlO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihQZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihQZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxzZT1rZVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksc2UmJih0aGlzLnl5bGluZW5vKz1zZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpzZT9zZVtzZS5sZW5ndGgtMV0ubGVuZ3RoLXNlW3NlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK2tlWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPWtlWzBdLHRoaXMubWF0Y2grPWtlWzBdLHRoaXMubWF0Y2hlcz1rZSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShrZVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9a2VbMF0scmU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsenQsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSkscmUpcmV0dXJuIHJlO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciB0ZSBpbiBQZSl0aGlzW3RlXT1QZVt0ZV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIga2UsenQscmUsc2U7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgUGU9dGhpcy5fY3VycmVudFJ1bGVzKCksdGU9MDt0ZTxQZS5sZW5ndGg7dGUrKylpZihyZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW1BlW3RlXV0pLHJlJiYoIXp0fHxyZVswXS5sZW5ndGg+enRbMF0ubGVuZ3RoKSl7aWYoenQ9cmUsc2U9dGUsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoa2U9dGhpcy50ZXN0X21hdGNoKHJlLFBlW3RlXSksa2UhPT0hMSlyZXR1cm4ga2U7aWYodGhpcy5fYmFja3RyYWNrKXt6dD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiB6dD8oa2U9dGhpcy50ZXN0X21hdGNoKHp0LFBlW3NlXSksa2UhPT0hMT9rZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHp0PXRoaXMubmV4dCgpO3JldHVybiB6dHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oenQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh6dCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIHp0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIHp0PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oenQpe3JldHVybiB6dD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHp0fHwwKSx6dD49MD90aGlzLmNvbmRpdGlvblN0YWNrW3p0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih6dCl7dGhpcy5iZWdpbih6dCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oenQscmUsc2UsUGUpe3N3aXRjaChzZSl7Y2FzZSAwOnJldHVybiA1O2Nhc2UgMTpicmVhaztjYXNlIDI6YnJlYWs7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpicmVhaztjYXNlIDU6YnJlYWs7Y2FzZSA2OnJldHVybiAxOTtjYXNlIDc6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwxNDtjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksNTA7Y2FzZSA5OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDUyO2Nhc2UgMTA6cmV0dXJuIDEzO2Nhc2UgMTE6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksNTM7Y2FzZSAxMjpyZXR1cm4gcmUueXl0ZXh0PXJlLnl5dGV4dC50cmltKCksdGhpcy5iZWdpbigiQUxJQVMiKSw3MDtjYXNlIDEzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oIkxJTkUiKSw1MTtjYXNlIDE0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDU7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM2O2Nhc2UgMTY6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzNztjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzg7Y2FzZSAxODpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM5O2Nhc2UgMTk6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0OTtjYXNlIDIwOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDE7Y2FzZSAyMTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQzO2Nhc2UgMjI6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0ODtjYXNlIDIzOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDQ7Y2FzZSAyNDpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQ3O2Nhc2UgMjU6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0NjtjYXNlIDI2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTU7Y2FzZSAyNzpyZXR1cm4gMTY7Y2FzZSAyODpyZXR1cm4gNjU7Y2FzZSAyOTpyZXR1cm4gNjY7Y2FzZSAzMDpyZXR1cm4gNTk7Y2FzZSAzMTpyZXR1cm4gNjA7Y2FzZSAzMjpyZXR1cm4gNjE7Y2FzZSAzMzpyZXR1cm4gNjI7Y2FzZSAzNDpyZXR1cm4gNTc7Y2FzZSAzNTpyZXR1cm4gNTQ7Y2FzZSAzNjpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSwyMTtjYXNlIDM3OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDIzO2Nhc2UgMzg6cmV0dXJuIDI5O2Nhc2UgMzk6cmV0dXJuIDMwO2Nhc2UgNDA6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDMxO2Nhc2UgNDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDQyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzMztjYXNlIDQzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSA0NDp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA0NTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA0NjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA0NzpyZXR1cm4gNjtjYXNlIDQ4OnJldHVybiAxODtjYXNlIDQ5OnJldHVybiAyMDtjYXNlIDUwOnJldHVybiA2NDtjYXNlIDUxOnJldHVybiA1O2Nhc2UgNTI6cmV0dXJuIHJlLnl5dGV4dD1yZS55eXRleHQudHJpbSgpLDcwO2Nhc2UgNTM6cmV0dXJuIDczO2Nhc2UgNTQ6cmV0dXJuIDc0O2Nhc2UgNTU6cmV0dXJuIDcxO2Nhc2UgNTY6cmV0dXJuIDcyO2Nhc2UgNTc6cmV0dXJuIDc1O2Nhc2UgNTg6cmV0dXJuIDc2O2Nhc2UgNTk6cmV0dXJuIDc3O2Nhc2UgNjA6cmV0dXJuIDc4O2Nhc2UgNjE6cmV0dXJuIDc5O2Nhc2UgNjI6cmV0dXJuIDY4O2Nhc2UgNjM6cmV0dXJuIDY5O2Nhc2UgNjQ6cmV0dXJuIDU7Y2FzZSA2NTpyZXR1cm4iSU5WQUxJRCJ9fSxydWxlczpbL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OigoPyFcbilccykrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86WzAtOV0rKD89WyBcbl0rKSkvaSwvXig/OmJveFxiKS9pLC9eKD86cGFydGljaXBhbnRcYikvaSwvXig/OmFjdG9yXGIpL2ksL14oPzpjcmVhdGVcYikvaSwvXig/OmRlc3Ryb3lcYikvaSwvXig/OlteXC0+OlxuLDtdKz8oW1wtXSpbXlwtPjpcbiw7XSs/KSo/KD89KCg/IVxuKVxzKSthcyg/IVxuKVxzfFsjXG47XXwkKSkvaSwvXig/OmFzXGIpL2ksL14oPzooPzopKS9pLC9eKD86bG9vcFxiKS9pLC9eKD86cmVjdFxiKS9pLC9eKD86b3B0XGIpL2ksL14oPzphbHRcYikvaSwvXig/OmVsc2VcYikvaSwvXig/OnBhclxiKS9pLC9eKD86cGFyX292ZXJcYikvaSwvXig/OmFuZFxiKS9pLC9eKD86Y3JpdGljYWxcYikvaSwvXig/Om9wdGlvblxiKS9pLC9eKD86YnJlYWtcYikvaSwvXig/Oig/Ols6XT8oPzpubyk/d3JhcCk/W14jXG47XSopL2ksL14oPzplbmRcYikvaSwvXig/OmxlZnQgb2ZcYikvaSwvXig/OnJpZ2h0IG9mXGIpL2ksL14oPzpsaW5rc1xiKS9pLC9eKD86bGlua1xiKS9pLC9eKD86cHJvcGVydGllc1xiKS9pLC9eKD86ZGV0YWlsc1xiKS9pLC9eKD86b3ZlclxiKS9pLC9eKD86bm90ZVxiKS9pLC9eKD86YWN0aXZhdGVcYikvaSwvXig/OmRlYWN0aXZhdGVcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OnRpdGxlOlxzW14jXG47XSspL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OnNlcXVlbmNlRGlhZ3JhbVxiKS9pLC9eKD86YXV0b251bWJlclxiKS9pLC9eKD86b2ZmXGIpL2ksL14oPzosKS9pLC9eKD86OykvaSwvXig/OlteXCtcLT46XG4sO10rKCg/ISgteHwtLXh8LVwpfC0tXCkpKVtcLV0qW15cK1wtPjpcbiw7XSspKikvaSwvXig/Oi0+PikvaSwvXig/Oi0tPj4pL2ksL14oPzotPikvaSwvXig/Oi0tPikvaSwvXig/Oi1beF0pL2ksL14oPzotLVt4XSkvaSwvXig/Oi1bXCldKS9pLC9eKD86LS1bXCldKS9pLC9eKD86Oig/Oig/Om5vKT93cmFwKT9bXiNcbjtdKykvaSwvXig/OlwrKS9pLC9eKD86LSkvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNDUsNDZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbNDNdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbNDFdLGluY2x1c2l2ZTohMX0sSUQ6e3J1bGVzOlsyLDMsMTJdLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOlsyLDMsMTMsMTRdLGluY2x1c2l2ZTohMX0sTElORTp7cnVsZXM6WzIsMywyNl0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDMsNCw1LDYsNyw4LDksMTAsMTEsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDIsNDQsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gY2V9KCk7bWUubGV4ZXI9VmU7ZnVuY3Rpb24gWWUoKXt0aGlzLnl5PXt9fXJldHVybiBZZS5wcm90b3R5cGU9bWUsbWUuUGFyc2VyPVllLG5ldyBZZX0oKTtnZ3QucGFyc2VyPWdndDtjb25zdCB0VmU9Z2d0O2xldCBIRixSNT17fSxwZ3Q9e30sYmd0PXt9LGRMPVtdLHpiPVtdLFJZPSExLHdndCxqNSxWRixnTDtjb25zdCBlVmU9ZnVuY3Rpb24oaSl7ZEwucHVzaCh7bmFtZTppLnRleHQsd3JhcDppLndyYXA9PT12b2lkIDAmJkNUKCl8fCEhaS53cmFwLGZpbGw6aS5jb2xvcixhY3RvcktleXM6W119KSxqNT1kTC5zbGljZSgtMSlbMF19LHZndD1mdW5jdGlvbihpLGEsZixwKXtsZXQgdz1qNTtjb25zdCBtPVI1W2ldO2lmKG0pe2lmKGo1JiZtLmJveCYmajUhPT1tLmJveCl0aHJvdyBuZXcgRXJyb3IoIkEgc2FtZSBwYXJ0aWNpcGFudCBzaG91bGQgb25seSBiZSBkZWZpbmVkIGluIG9uZSBCb3g6ICIrbS5uYW1lKyIgY2FuJ3QgYmUgaW4gJyIrbS5ib3gubmFtZSsiJyBhbmQgaW4gJyIrajUubmFtZSsiJyBhdCB0aGUgc2FtZSB0aW1lLiIpO2lmKHc9bS5ib3g/bS5ib3g6ajUsbS5ib3g9dyxtJiZhPT09bS5uYW1lJiZmPT1udWxsKXJldHVybn0oZj09bnVsbHx8Zi50ZXh0PT1udWxsKSYmKGY9e3RleHQ6YSx3cmFwOm51bGwsdHlwZTpwfSksKHA9PW51bGx8fGYudGV4dD09bnVsbCkmJihmPXt0ZXh0OmEsd3JhcDpudWxsLHR5cGU6cH0pLFI1W2ldPXtib3g6dyxuYW1lOmEsZGVzY3JpcHRpb246Zi50ZXh0LHdyYXA6Zi53cmFwPT09dm9pZCAwJiZDVCgpfHwhIWYud3JhcCxwcmV2QWN0b3I6SEYsbGlua3M6e30scHJvcGVydGllczp7fSxhY3RvckNudDpudWxsLHJlY3REYXRhOm51bGwsdHlwZTpwfHwicGFydGljaXBhbnQifSxIRiYmUjVbSEZdJiYoUjVbSEZdLm5leHRBY3Rvcj1pKSxqNSYmajUuYWN0b3JLZXlzLnB1c2goaSksSEY9aX0sblZlPWk9PntsZXQgYSxmPTA7Zm9yKGE9MDthPHpiLmxlbmd0aDthKyspemJbYV0udHlwZT09PVVGLkFDVElWRV9TVEFSVCYmemJbYV0uZnJvbS5hY3Rvcj09PWkmJmYrKyx6YlthXS50eXBlPT09VUYuQUNUSVZFX0VORCYmemJbYV0uZnJvbS5hY3Rvcj09PWkmJmYtLTtyZXR1cm4gZn0sclZlPWZ1bmN0aW9uKGksYSxmLHApe3piLnB1c2goe2Zyb206aSx0bzphLG1lc3NhZ2U6Zi50ZXh0LHdyYXA6Zi53cmFwPT09dm9pZCAwJiZDVCgpfHwhIWYud3JhcCxhbnN3ZXI6cH0pfSxlZj1mdW5jdGlvbihpLGEsZj17dGV4dDp2b2lkIDAsd3JhcDp2b2lkIDB9LHAsdz0hMSl7aWYocD09PVVGLkFDVElWRV9FTkQmJm5WZShpLmFjdG9yKTwxKXtsZXQgYj1uZXcgRXJyb3IoIlRyeWluZyB0byBpbmFjdGl2YXRlIGFuIGluYWN0aXZlIHBhcnRpY2lwYW50ICgiK2kuYWN0b3IrIikiKTt0aHJvdyBiLmhhc2g9e3RleHQ6Ii0+Pi0iLHRva2VuOiItPj4tIixsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbIidBQ1RJVkVfUEFSVElDSVBBTlQnIl19LGJ9cmV0dXJuIHpiLnB1c2goe2Zyb206aSx0bzphLG1lc3NhZ2U6Zi50ZXh0LHdyYXA6Zi53cmFwPT09dm9pZCAwJiZDVCgpfHwhIWYud3JhcCx0eXBlOnAsYWN0aXZhdGU6d30pLCEwfSxpVmU9ZnVuY3Rpb24oKXtyZXR1cm4gZEwubGVuZ3RoPjB9LHNWZT1mdW5jdGlvbigpe3JldHVybiBkTC5zb21lKGk9PmkubmFtZSl9LGFWZT1mdW5jdGlvbigpe3JldHVybiB6Yn0sb1ZlPWZ1bmN0aW9uKCl7cmV0dXJuIGRMfSxjVmU9ZnVuY3Rpb24oKXtyZXR1cm4gUjV9LHVWZT1mdW5jdGlvbigpe3JldHVybiBwZ3R9LGxWZT1mdW5jdGlvbigpe3JldHVybiBiZ3R9LEdGPWZ1bmN0aW9uKGkpe3JldHVybiBSNVtpXX0saFZlPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKFI1KX0sZlZlPWZ1bmN0aW9uKCl7Ulk9ITB9LGRWZT1mdW5jdGlvbigpe1JZPSExfSxnVmU9KCk9PlJZLHBWZT1mdW5jdGlvbihpKXt3Z3Q9aX0sQ1Q9KCk9PndndCE9PXZvaWQgMD93Z3Q6T2UoKS5zZXF1ZW5jZS53cmFwLGJWZT1mdW5jdGlvbigpe1I1PXt9LHBndD17fSxiZ3Q9e30sZEw9W10semI9W10sUlk9ITEsaGcoKX0sd1ZlPWZ1bmN0aW9uKGkpe2NvbnN0IGE9aS50cmltKCksZj17dGV4dDphLnJlcGxhY2UoL146Pyg/Om5vKT93cmFwOi8sIiIpLnRyaW0oKSx3cmFwOmEubWF0Y2goL146P3dyYXA6LykhPT1udWxsPyEwOmEubWF0Y2goL146P25vd3JhcDovKSE9PW51bGw/ITE6dm9pZCAwfTtyZXR1cm4gVXQuZGVidWcoInBhcnNlTWVzc2FnZToiLGYpLGZ9LHZWZT1mdW5jdGlvbihpKXtjb25zdCBhPWkubWF0Y2goL14oKD86cmdiYT98aHNsYT8pXHMqXCguKlwpfFx3KikoLiopJC8pO2xldCBmPWEhPW51bGwmJmFbMV0/YVsxXS50cmltKCk6InRyYW5zcGFyZW50IixwPWEhPW51bGwmJmFbMl0/YVsyXS50cmltKCk6dm9pZCAwO2lmKHdpbmRvdyYmd2luZG93LkNTUyl3aW5kb3cuQ1NTLnN1cHBvcnRzKCJjb2xvciIsZil8fChmPSJ0cmFuc3BhcmVudCIscD1pLnRyaW0oKSk7ZWxzZXtjb25zdCBtPW5ldyBPcHRpb24oKS5zdHlsZTttLmNvbG9yPWYsbS5jb2xvciE9PWYmJihmPSJ0cmFuc3BhcmVudCIscD1pLnRyaW0oKSl9cmV0dXJue2NvbG9yOmYsdGV4dDpwIT09dm9pZCAwP1ExKHAucmVwbGFjZSgvXjo/KD86bm8pP3dyYXA6LywiIiksT2UoKSk6dm9pZCAwLHdyYXA6cCE9PXZvaWQgMD9wLm1hdGNoKC9eOj93cmFwOi8pIT09bnVsbD8hMDpwLm1hdGNoKC9eOj9ub3dyYXA6LykhPT1udWxsPyExOnZvaWQgMDp2b2lkIDB9fSxVRj17U09MSUQ6MCxET1RURUQ6MSxOT1RFOjIsU09MSURfQ1JPU1M6MyxET1RURURfQ1JPU1M6NCxTT0xJRF9PUEVOOjUsRE9UVEVEX09QRU46NixMT09QX1NUQVJUOjEwLExPT1BfRU5EOjExLEFMVF9TVEFSVDoxMixBTFRfRUxTRToxMyxBTFRfRU5EOjE0LE9QVF9TVEFSVDoxNSxPUFRfRU5EOjE2LEFDVElWRV9TVEFSVDoxNyxBQ1RJVkVfRU5EOjE4LFBBUl9TVEFSVDoxOSxQQVJfQU5EOjIwLFBBUl9FTkQ6MjEsUkVDVF9TVEFSVDoyMixSRUNUX0VORDoyMyxTT0xJRF9QT0lOVDoyNCxET1RURURfUE9JTlQ6MjUsQVVUT05VTUJFUjoyNixDUklUSUNBTF9TVEFSVDoyNyxDUklUSUNBTF9PUFRJT046MjgsQ1JJVElDQUxfRU5EOjI5LEJSRUFLX1NUQVJUOjMwLEJSRUFLX0VORDozMSxQQVJfT1ZFUl9TVEFSVDozMn0sbVZlPXtGSUxMRUQ6MCxPUEVOOjF9LHlWZT17TEVGVE9GOjAsUklHSFRPRjoxLE9WRVI6Mn0sX1J0PWZ1bmN0aW9uKGksYSxmKXtmLnRleHQsZi53cmFwPT09dm9pZCAwJiZDVCgpfHxmLndyYXA7Y29uc3QgcD1bXS5jb25jYXQoaSxpKTt6Yi5wdXNoKHtmcm9tOnBbMF0sdG86cFsxXSxtZXNzYWdlOmYudGV4dCx3cmFwOmYud3JhcD09PXZvaWQgMCYmQ1QoKXx8ISFmLndyYXAsdHlwZTpVRi5OT1RFLHBsYWNlbWVudDphfSl9LFNSdD1mdW5jdGlvbihpLGEpe2NvbnN0IGY9R0YoaSk7dHJ5e2xldCBwPVExKGEudGV4dCxPZSgpKTtwPXAucmVwbGFjZSgvJmFtcDsvZywiJiIpLHA9cC5yZXBsYWNlKC8mZXF1YWxzOy9nLCI9Iik7Y29uc3Qgdz1KU09OLnBhcnNlKHApO21ndChmLHcpfWNhdGNoKHApe1V0LmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIGxpbmsgdGV4dCIscCl9fSx4VmU9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPUdGKGkpO3RyeXtjb25zdCBiPXt9O2xldCBFPVExKGEudGV4dCxPZSgpKTt2YXIgcD1FLmluZGV4T2YoIkAiKTtFPUUucmVwbGFjZSgvJmFtcDsvZywiJiIpLEU9RS5yZXBsYWNlKC8mZXF1YWxzOy9nLCI9Iik7dmFyIHc9RS5zbGljZSgwLHAtMSkudHJpbSgpLG09RS5zbGljZShwKzEpLnRyaW0oKTtiW3ddPW0sbWd0KGYsYil9Y2F0Y2goYil7VXQuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgbGluayB0ZXh0IixiKX19O2Z1bmN0aW9uIG1ndChpLGEpe2lmKGkubGlua3M9PW51bGwpaS5saW5rcz1hO2Vsc2UgZm9yKGxldCBmIGluIGEpaS5saW5rc1tmXT1hW2ZdfWNvbnN0IEFSdD1mdW5jdGlvbihpLGEpe2NvbnN0IGY9R0YoaSk7dHJ5e2xldCBwPVExKGEudGV4dCxPZSgpKTtjb25zdCB3PUpTT04ucGFyc2UocCk7TFJ0KGYsdyl9Y2F0Y2gocCl7VXQuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgcHJvcGVydGllcyB0ZXh0IixwKX19O2Z1bmN0aW9uIExSdChpLGEpe2lmKGkucHJvcGVydGllcz09bnVsbClpLnByb3BlcnRpZXM9YTtlbHNlIGZvcihsZXQgZiBpbiBhKWkucHJvcGVydGllc1tmXT1hW2ZdfWZ1bmN0aW9uIGtWZSgpe2o1PXZvaWQgMH1jb25zdCBNUnQ9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPUdGKGkpLHA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYS50ZXh0KTt0cnl7Y29uc3Qgdz1wLmlubmVySFRNTCxtPUpTT04ucGFyc2Uodyk7bS5wcm9wZXJ0aWVzJiZMUnQoZixtLnByb3BlcnRpZXMpLG0ubGlua3MmJm1ndChmLG0ubGlua3MpfWNhdGNoKHcpe1V0LmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIGRldGFpbHMgdGV4dCIsdyl9fSxFVmU9ZnVuY3Rpb24oaSxhKXtpZihpIT09dm9pZCAwJiZpLnByb3BlcnRpZXMhPT12b2lkIDApcmV0dXJuIGkucHJvcGVydGllc1thXX0sRFJ0PWZ1bmN0aW9uKGkpe2lmKEFycmF5LmlzQXJyYXkoaSkpaS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RSdChhKX0pO2Vsc2Ugc3dpdGNoKGkudHlwZSl7Y2FzZSJzZXF1ZW5jZUluZGV4Ijp6Yi5wdXNoKHtmcm9tOnZvaWQgMCx0bzp2b2lkIDAsbWVzc2FnZTp7c3RhcnQ6aS5zZXF1ZW5jZUluZGV4LHN0ZXA6aS5zZXF1ZW5jZUluZGV4U3RlcCx2aXNpYmxlOmkuc2VxdWVuY2VWaXNpYmxlfSx3cmFwOiExLHR5cGU6aS5zaWduYWxUeXBlfSk7YnJlYWs7Y2FzZSJhZGRQYXJ0aWNpcGFudCI6dmd0KGkuYWN0b3IsaS5hY3RvcixpLmRlc2NyaXB0aW9uLGkuZHJhdyk7YnJlYWs7Y2FzZSJjcmVhdGVQYXJ0aWNpcGFudCI6aWYoUjVbaS5hY3Rvcl0pdGhyb3cgbmV3IEVycm9yKCJJdCBpcyBub3QgcG9zc2libGUgdG8gaGF2ZSBhY3RvcnMgd2l0aCB0aGUgc2FtZSBpZCwgZXZlbiBpZiBvbmUgaXMgZGVzdHJveWVkIGJlZm9yZSB0aGUgbmV4dCBpcyBjcmVhdGVkLiBVc2UgJ0FTJyBhbGlhc2VzIHRvIHNpbXVsYXRlIHRoZSBiZWhhdmlvciIpO1ZGPWkuYWN0b3Isdmd0KGkuYWN0b3IsaS5hY3RvcixpLmRlc2NyaXB0aW9uLGkuZHJhdykscGd0W2kuYWN0b3JdPXpiLmxlbmd0aDticmVhaztjYXNlImRlc3Ryb3lQYXJ0aWNpcGFudCI6Z0w9aS5hY3RvcixiZ3RbaS5hY3Rvcl09emIubGVuZ3RoO2JyZWFrO2Nhc2UiYWN0aXZlU3RhcnQiOmVmKGkuYWN0b3Isdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWN0aXZlRW5kIjplZihpLmFjdG9yLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImFkZE5vdGUiOl9SdChpLmFjdG9yLGkucGxhY2VtZW50LGkudGV4dCk7YnJlYWs7Y2FzZSJhZGRMaW5rcyI6U1J0KGkuYWN0b3IsaS50ZXh0KTticmVhaztjYXNlImFkZEFMaW5rIjp4VmUoaS5hY3RvcixpLnRleHQpO2JyZWFrO2Nhc2UiYWRkUHJvcGVydGllcyI6QVJ0KGkuYWN0b3IsaS50ZXh0KTticmVhaztjYXNlImFkZERldGFpbHMiOk1SdChpLmFjdG9yLGkudGV4dCk7YnJlYWs7Y2FzZSJhZGRNZXNzYWdlIjppZihWRil7aWYoaS50byE9PVZGKXRocm93IG5ldyBFcnJvcigiVGhlIGNyZWF0ZWQgcGFydGljaXBhbnQgIitWRisiIGRvZXMgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBjcmVhdGluZyBtZXNzYWdlIGFmdGVyIGl0cyBkZWNsYXJhdGlvbi4gUGxlYXNlIGNoZWNrIHRoZSBzZXF1ZW5jZSBkaWFncmFtLiIpO1ZGPXZvaWQgMH1lbHNlIGlmKGdMKXtpZihpLnRvIT09Z0wmJmkuZnJvbSE9PWdMKXRocm93IG5ldyBFcnJvcigiVGhlIGRlc3Ryb3llZCBwYXJ0aWNpcGFudCAiK2dMKyIgZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGRlc3Ryb3lpbmcgbWVzc2FnZSBhZnRlciBpdHMgZGVjbGFyYXRpb24uIFBsZWFzZSBjaGVjayB0aGUgc2VxdWVuY2UgZGlhZ3JhbS4iKTtnTD12b2lkIDB9ZWYoaS5mcm9tLGkudG8saS5tc2csaS5zaWduYWxUeXBlLGkuYWN0aXZhdGUpO2JyZWFrO2Nhc2UiYm94U3RhcnQiOmVWZShpLmJveERhdGEpO2JyZWFrO2Nhc2UiYm94RW5kIjprVmUoKTticmVhaztjYXNlImxvb3BTdGFydCI6ZWYodm9pZCAwLHZvaWQgMCxpLmxvb3BUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJsb29wRW5kIjplZih2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UicmVjdFN0YXJ0IjplZih2b2lkIDAsdm9pZCAwLGkuY29sb3IsaS5zaWduYWxUeXBlKTticmVhaztjYXNlInJlY3RFbmQiOmVmKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRTdGFydCI6ZWYodm9pZCAwLHZvaWQgMCxpLm9wdFRleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlIm9wdEVuZCI6ZWYodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImFsdFN0YXJ0IjplZih2b2lkIDAsdm9pZCAwLGkuYWx0VGV4dCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiZWxzZSI6ZWYodm9pZCAwLHZvaWQgMCxpLmFsdFRleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImFsdEVuZCI6ZWYodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVhaztjYXNlInNldEFjY1RpdGxlIjpFMChpLnRleHQpO2JyZWFrO2Nhc2UicGFyU3RhcnQiOmVmKHZvaWQgMCx2b2lkIDAsaS5wYXJUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhbmQiOmVmKHZvaWQgMCx2b2lkIDAsaS5wYXJUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJwYXJFbmQiOmVmKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJjcml0aWNhbFN0YXJ0IjplZih2b2lkIDAsdm9pZCAwLGkuY3JpdGljYWxUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRpb24iOmVmKHZvaWQgMCx2b2lkIDAsaS5vcHRpb25UZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJjcml0aWNhbEVuZCI6ZWYodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImJyZWFrU3RhcnQiOmVmKHZvaWQgMCx2b2lkIDAsaS5icmVha1RleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImJyZWFrRW5kIjplZih2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrfX0sSVJ0PXthZGRBY3Rvcjp2Z3QsYWRkTWVzc2FnZTpyVmUsYWRkU2lnbmFsOmVmLGFkZExpbmtzOlNSdCxhZGREZXRhaWxzOk1SdCxhZGRQcm9wZXJ0aWVzOkFSdCxhdXRvV3JhcDpDVCxzZXRXcmFwOnBWZSxlbmFibGVTZXF1ZW5jZU51bWJlcnM6ZlZlLGRpc2FibGVTZXF1ZW5jZU51bWJlcnM6ZFZlLHNob3dTZXF1ZW5jZU51bWJlcnM6Z1ZlLGdldE1lc3NhZ2VzOmFWZSxnZXRBY3RvcnM6Y1ZlLGdldENyZWF0ZWRBY3RvcnM6dVZlLGdldERlc3Ryb3llZEFjdG9yczpsVmUsZ2V0QWN0b3I6R0YsZ2V0QWN0b3JLZXlzOmhWZSxnZXRBY3RvclByb3BlcnR5OkVWZSxnZXRBY2NUaXRsZTpmZyxnZXRCb3hlczpvVmUsZ2V0RGlhZ3JhbVRpdGxlOnBnLHNldERpYWdyYW1UaXRsZTpOYixnZXRDb25maWc6KCk9Pk9lKCkuc2VxdWVuY2UsY2xlYXI6YlZlLHBhcnNlTWVzc2FnZTp3VmUscGFyc2VCb3hEYXRhOnZWZSxMSU5FVFlQRTpVRixBUlJPV1RZUEU6bVZlLFBMQUNFTUVOVDp5VmUsYWRkTm90ZTpfUnQsc2V0QWNjVGl0bGU6RTAsYXBwbHk6RFJ0LHNldEFjY0Rlc2NyaXB0aW9uOmRnLGdldEFjY0Rlc2NyaXB0aW9uOmdnLGhhc0F0TGVhc3RPbmVCb3g6aVZlLGhhc0F0TGVhc3RPbmVCb3hXaXRoVGl0bGU6c1ZlfSxUVmU9aT0+YC5hY3RvciB7CiAgICBzdHJva2U6ICR7aS5hY3RvckJvcmRlcn07CiAgICBmaWxsOiAke2kuYWN0b3JCa2d9OwogIH0KCiAgdGV4dC5hY3RvciA+IHRzcGFuIHsKICAgIGZpbGw6ICR7aS5hY3RvclRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAuYWN0b3ItbGluZSB7CiAgICBzdHJva2U6ICR7aS5hY3RvckxpbmVDb2xvcn07CiAgfQoKICAubWVzc2FnZUxpbmUwIHsKICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsKICAgIHN0cm9rZTogJHtpLnNpZ25hbENvbG9yfTsKICB9CgogIC5tZXNzYWdlTGluZTEgewogICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICBzdHJva2UtZGFzaGFycmF5OiAyLCAyOwogICAgc3Ryb2tlOiAke2kuc2lnbmFsQ29sb3J9OwogIH0KCiAgI2Fycm93aGVhZCBwYXRoIHsKICAgIGZpbGw6ICR7aS5zaWduYWxDb2xvcn07CiAgICBzdHJva2U6ICR7aS5zaWduYWxDb2xvcn07CiAgfQoKICAuc2VxdWVuY2VOdW1iZXIgewogICAgZmlsbDogJHtpLnNlcXVlbmNlTnVtYmVyQ29sb3J9OwogIH0KCiAgI3NlcXVlbmNlbnVtYmVyIHsKICAgIGZpbGw6ICR7aS5zaWduYWxDb2xvcn07CiAgfQoKICAjY3Jvc3NoZWFkIHBhdGggewogICAgZmlsbDogJHtpLnNpZ25hbENvbG9yfTsKICAgIHN0cm9rZTogJHtpLnNpZ25hbENvbG9yfTsKICB9CgogIC5tZXNzYWdlVGV4dCB7CiAgICBmaWxsOiAke2kuc2lnbmFsVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICB9CgogIC5sYWJlbEJveCB7CiAgICBzdHJva2U6ICR7aS5sYWJlbEJveEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7aS5sYWJlbEJveEJrZ0NvbG9yfTsKICB9CgogIC5sYWJlbFRleHQsIC5sYWJlbFRleHQgPiB0c3BhbiB7CiAgICBmaWxsOiAke2kubGFiZWxUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogIH0KCiAgLmxvb3BUZXh0LCAubG9vcFRleHQgPiB0c3BhbiB7CiAgICBmaWxsOiAke2kubG9vcFRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAubG9vcExpbmUgewogICAgc3Ryb2tlLXdpZHRoOiAycHg7CiAgICBzdHJva2UtZGFzaGFycmF5OiAyLCAyOwogICAgc3Ryb2tlOiAke2kubGFiZWxCb3hCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke2kubGFiZWxCb3hCb3JkZXJDb2xvcn07CiAgfQoKICAubm90ZSB7CiAgICAvL3N0cm9rZTogI2RlY2M5MzsKICAgIHN0cm9rZTogJHtpLm5vdGVCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke2kubm90ZUJrZ0NvbG9yfTsKICB9CgogIC5ub3RlVGV4dCwgLm5vdGVUZXh0ID4gdHNwYW4gewogICAgZmlsbDogJHtpLm5vdGVUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogIH0KCiAgLmFjdGl2YXRpb24wIHsKICAgIGZpbGw6ICR7aS5hY3RpdmF0aW9uQmtnQ29sb3J9OwogICAgc3Ryb2tlOiAke2kuYWN0aXZhdGlvbkJvcmRlckNvbG9yfTsKICB9CgogIC5hY3RpdmF0aW9uMSB7CiAgICBmaWxsOiAke2kuYWN0aXZhdGlvbkJrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHtpLmFjdGl2YXRpb25Cb3JkZXJDb2xvcn07CiAgfQoKICAuYWN0aXZhdGlvbjIgewogICAgZmlsbDogJHtpLmFjdGl2YXRpb25Ca2dDb2xvcn07CiAgICBzdHJva2U6ICR7aS5hY3RpdmF0aW9uQm9yZGVyQ29sb3J9OwogIH0KCiAgLmFjdG9yUG9wdXBNZW51IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB9CgogIC5hY3RvclBvcHVwTWVudVBhbmVsIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGZpbGw6ICR7aS5hY3RvckJrZ307CiAgICBib3gtc2hhZG93OiAwcHggOHB4IDE2cHggMHB4IHJnYmEoMCwwLDAsMC4yKTsKICAgIGZpbHRlcjogZHJvcC1zaGFkb3coM3B4IDVweCAycHggcmdiKDAgMCAwIC8gMC40KSk7Cn0KICAuYWN0b3ItbWFuIGxpbmUgewogICAgc3Ryb2tlOiAke2kuYWN0b3JCb3JkZXJ9OwogICAgZmlsbDogJHtpLmFjdG9yQmtnfTsKICB9CiAgLmFjdG9yLW1hbiBjaXJjbGUsIGxpbmUgewogICAgc3Ryb2tlOiAke2kuYWN0b3JCb3JkZXJ9OwogICAgZmlsbDogJHtpLmFjdG9yQmtnfTsKICAgIHN0cm9rZS13aWR0aDogMnB4OwogIH0KYCxfVD0xOCoyLHlndD1mdW5jdGlvbihpLGEpe3JldHVybiBKVyhpLGEpfSxPUnQ9KGksYSk9Pnt2QWUoKCk9Pntjb25zdCBmPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoaSk7Zi5sZW5ndGghPT0wJiYoZlswXS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7QVZlKCJhY3RvciIrYSsiX3BvcHVwIil9KSxmWzBdLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IixmdW5jdGlvbigpe0xWZSgiYWN0b3IiK2ErIl9wb3B1cCIpfSkpfSl9LENWZT1mdW5jdGlvbihpLGEsZixwLHcpe2lmKGEubGlua3M9PT12b2lkIDB8fGEubGlua3M9PT1udWxsfHxPYmplY3Qua2V5cyhhLmxpbmtzKS5sZW5ndGg9PT0wKXJldHVybntoZWlnaHQ6MCx3aWR0aDowfTtjb25zdCBtPWEubGlua3MsYj1hLmFjdG9yQ250LEU9YS5yZWN0RGF0YTt2YXIgXz0ibm9uZSI7dyYmKF89ImJsb2NrICFpbXBvcnRhbnQiKTtjb25zdCBBPWkuYXBwZW5kKCJnIik7QS5hdHRyKCJpZCIsImFjdG9yIitiKyJfcG9wdXAiKSxBLmF0dHIoImNsYXNzIiwiYWN0b3JQb3B1cE1lbnUiKSxBLmF0dHIoImRpc3BsYXkiLF8pLE9SdCgiI2FjdG9yIitiKyJfcG9wdXAiLGIpO3ZhciBJPSIiO0UuY2xhc3MhPT12b2lkIDAmJihJPSIgIitFLmNsYXNzKTtsZXQgQj1FLndpZHRoPmY/RS53aWR0aDpmO2NvbnN0IE49QS5hcHBlbmQoInJlY3QiKTtpZihOLmF0dHIoImNsYXNzIiwiYWN0b3JQb3B1cE1lbnVQYW5lbCIrSSksTi5hdHRyKCJ4IixFLngpLE4uYXR0cigieSIsRS5oZWlnaHQpLE4uYXR0cigiZmlsbCIsRS5maWxsKSxOLmF0dHIoInN0cm9rZSIsRS5zdHJva2UpLE4uYXR0cigid2lkdGgiLEIpLE4uYXR0cigiaGVpZ2h0IixFLmhlaWdodCksTi5hdHRyKCJyeCIsRS5yeCksTi5hdHRyKCJyeSIsRS5yeSksbSE9bnVsbCl7dmFyIFI9MjA7Zm9yKGxldCBldCBpbiBtKXt2YXIgej1BLmFwcGVuZCgiYSIpLFc9aWsobVtldF0pO3ouYXR0cigieGxpbms6aHJlZiIsVyksei5hdHRyKCJ0YXJnZXQiLCJfYmxhbmsiKSxHVmUocCkoZXQseixFLngrMTAsRS5oZWlnaHQrUixCLDIwLHtjbGFzczoiYWN0b3IifSxwKSxSKz0zMH19cmV0dXJuIE4uYXR0cigiaGVpZ2h0IixSKSx7aGVpZ2h0OkUuaGVpZ2h0K1Isd2lkdGg6Qn19LF9WZT1mdW5jdGlvbihpKXtyZXR1cm4idmFyIHB1ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJyIraSsiJyk7IGlmIChwdSAhPSBudWxsKSB7IHB1LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOyB9In0sU1ZlPWZ1bmN0aW9uKGkpe3JldHVybiJ2YXIgcHUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnIitpKyInKTsgaWYgKHB1ICE9IG51bGwpIHsgcHUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsgfSJ9LEFWZT1mdW5jdGlvbihpKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpKTthIT1udWxsJiYoYS5zdHlsZS5kaXNwbGF5PSJibG9jayIpfSxMVmU9ZnVuY3Rpb24oaSl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaSk7YSE9bnVsbCYmKGEuc3R5bGUuZGlzcGxheT0ibm9uZSIpfSxwTD1mdW5jdGlvbihpLGEpe2xldCBmPTAscD0wO2NvbnN0IHc9YS50ZXh0LnNwbGl0KEtyLmxpbmVCcmVha1JlZ2V4KSxbbSxiXT1WQShhLmZvbnRTaXplKTtsZXQgRT1bXSxfPTAsQT0oKT0+YS55O2lmKGEudmFsaWduIT09dm9pZCAwJiZhLnRleHRNYXJnaW4hPT12b2lkIDAmJmEudGV4dE1hcmdpbj4wKXN3aXRjaChhLnZhbGlnbil7Y2FzZSJ0b3AiOmNhc2Uic3RhcnQiOkE9KCk9Pk1hdGgucm91bmQoYS55K2EudGV4dE1hcmdpbik7YnJlYWs7Y2FzZSJtaWRkbGUiOmNhc2UiY2VudGVyIjpBPSgpPT5NYXRoLnJvdW5kKGEueSsoZitwK2EudGV4dE1hcmdpbikvMik7YnJlYWs7Y2FzZSJib3R0b20iOmNhc2UiZW5kIjpBPSgpPT5NYXRoLnJvdW5kKGEueSsoZitwKzIqYS50ZXh0TWFyZ2luKS1hLnRleHRNYXJnaW4pO2JyZWFrfWlmKGEuYW5jaG9yIT09dm9pZCAwJiZhLnRleHRNYXJnaW4hPT12b2lkIDAmJmEud2lkdGghPT12b2lkIDApc3dpdGNoKGEuYW5jaG9yKXtjYXNlImxlZnQiOmNhc2Uic3RhcnQiOmEueD1NYXRoLnJvdW5kKGEueCthLnRleHRNYXJnaW4pLGEuYW5jaG9yPSJzdGFydCIsYS5kb21pbmFudEJhc2VsaW5lPSJtaWRkbGUiLGEuYWxpZ25tZW50QmFzZWxpbmU9Im1pZGRsZSI7YnJlYWs7Y2FzZSJtaWRkbGUiOmNhc2UiY2VudGVyIjphLng9TWF0aC5yb3VuZChhLngrYS53aWR0aC8yKSxhLmFuY2hvcj0ibWlkZGxlIixhLmRvbWluYW50QmFzZWxpbmU9Im1pZGRsZSIsYS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIjticmVhaztjYXNlInJpZ2h0IjpjYXNlImVuZCI6YS54PU1hdGgucm91bmQoYS54K2Eud2lkdGgtYS50ZXh0TWFyZ2luKSxhLmFuY2hvcj0iZW5kIixhLmRvbWluYW50QmFzZWxpbmU9Im1pZGRsZSIsYS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIjticmVha31mb3IobGV0W0ksQl1vZiB3LmVudHJpZXMoKSl7YS50ZXh0TWFyZ2luIT09dm9pZCAwJiZhLnRleHRNYXJnaW49PT0wJiZtIT09dm9pZCAwJiYoXz1JKm0pO2NvbnN0IE49aS5hcHBlbmQoInRleHQiKTtOLmF0dHIoIngiLGEueCksTi5hdHRyKCJ5IixBKCkpLGEuYW5jaG9yIT09dm9pZCAwJiZOLmF0dHIoInRleHQtYW5jaG9yIixhLmFuY2hvcikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLGEuZG9taW5hbnRCYXNlbGluZSkuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIixhLmFsaWdubWVudEJhc2VsaW5lKSxhLmZvbnRGYW1pbHkhPT12b2lkIDAmJk4uc3R5bGUoImZvbnQtZmFtaWx5IixhLmZvbnRGYW1pbHkpLGIhPT12b2lkIDAmJk4uc3R5bGUoImZvbnQtc2l6ZSIsYiksYS5mb250V2VpZ2h0IT09dm9pZCAwJiZOLnN0eWxlKCJmb250LXdlaWdodCIsYS5mb250V2VpZ2h0KSxhLmZpbGwhPT12b2lkIDAmJk4uYXR0cigiZmlsbCIsYS5maWxsKSxhLmNsYXNzIT09dm9pZCAwJiZOLmF0dHIoImNsYXNzIixhLmNsYXNzKSxhLmR5IT09dm9pZCAwP04uYXR0cigiZHkiLGEuZHkpOl8hPT0wJiZOLmF0dHIoImR5IixfKTtjb25zdCBSPUJ8fGpJdDtpZihhLnRzcGFuKXtjb25zdCB6PU4uYXBwZW5kKCJ0c3BhbiIpO3ouYXR0cigieCIsYS54KSxhLmZpbGwhPT12b2lkIDAmJnouYXR0cigiZmlsbCIsYS5maWxsKSx6LnRleHQoUil9ZWxzZSBOLnRleHQoUik7YS52YWxpZ24hPT12b2lkIDAmJmEudGV4dE1hcmdpbiE9PXZvaWQgMCYmYS50ZXh0TWFyZ2luPjAmJihwKz0oTi5fZ3JvdXBzfHxOKVswXVswXS5nZXRCQm94KCkuaGVpZ2h0LGY9cCksRS5wdXNoKE4pfXJldHVybiBFfSxQUnQ9ZnVuY3Rpb24oaSxhKXtmdW5jdGlvbiBmKHcsbSxiLEUsXyl7cmV0dXJuIHcrIiwiK20rIiAiKyh3K2IpKyIsIittKyIgIisodytiKSsiLCIrKG0rRS1fKSsiICIrKHcrYi1fKjEuMikrIiwiKyhtK0UpKyIgIit3KyIsIisobStFKX1jb25zdCBwPWkuYXBwZW5kKCJwb2x5Z29uIik7cmV0dXJuIHAuYXR0cigicG9pbnRzIixmKGEueCxhLnksYS53aWR0aCxhLmhlaWdodCw3KSkscC5hdHRyKCJjbGFzcyIsImxhYmVsQm94IiksYS55PWEueSthLmhlaWdodC8yLHBMKGksYSkscH07bGV0IGdtPS0xO2NvbnN0IEZSdD0oaSxhLGYscCk9PntpLnNlbGVjdCYmZi5mb3JFYWNoKHc9Pntjb25zdCBtPWFbd10sYj1pLnNlbGVjdCgiI2FjdG9yIittLmFjdG9yQ250KTshcC5taXJyb3JBY3RvcnMmJm0uc3RvcHk/Yi5hdHRyKCJ5MiIsbS5zdG9weSttLmhlaWdodC8yKTpwLm1pcnJvckFjdG9ycyYmYi5hdHRyKCJ5MiIsbS5zdG9weSl9KX0sTVZlPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHc9cD9hLnN0b3B5OmEuc3RhcnR5LG09YS54K2Eud2lkdGgvMixiPXcrNSxFPWkuYXBwZW5kKCJnIikubG93ZXIoKTt2YXIgXz1FO3B8fChnbSsrLF8uYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3RvciIrZ20pLmF0dHIoIngxIixtKS5hdHRyKCJ5MSIsYikuYXR0cigieDIiLG0pLmF0dHIoInkyIiwyZTMpLmF0dHIoImNsYXNzIiwiYWN0b3ItbGluZSIpLmF0dHIoImNsYXNzIiwiMjAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41cHgiKS5hdHRyKCJzdHJva2UiLCIjOTk5IiksXz1FLmFwcGVuZCgiZyIpLGEuYWN0b3JDbnQ9Z20sYS5saW5rcyE9bnVsbCYmKF8uYXR0cigiaWQiLCJyb290LSIrZ20pLE9SdCgiI3Jvb3QtIitnbSxnbSkpKTtjb25zdCBBPWJUKCk7dmFyIEk9ImFjdG9yIjthLnByb3BlcnRpZXMhPW51bGwmJmEucHJvcGVydGllcy5jbGFzcz9JPWEucHJvcGVydGllcy5jbGFzczpBLmZpbGw9IiNlYWVhZWEiLEEueD1hLngsQS55PXcsQS53aWR0aD1hLndpZHRoLEEuaGVpZ2h0PWEuaGVpZ2h0LEEuY2xhc3M9SSxBLnJ4PTMsQS5yeT0zO2NvbnN0IEI9eWd0KF8sQSk7aWYoYS5yZWN0RGF0YT1BLGEucHJvcGVydGllcyE9bnVsbCYmYS5wcm9wZXJ0aWVzLmljb24pe2NvbnN0IFI9YS5wcm9wZXJ0aWVzLmljb24udHJpbSgpO1IuY2hhckF0KDApPT09IkAiPyREZShfLEEueCtBLndpZHRoLTIwLEEueSsxMCxSLnN1YnN0cigxKSk6akRlKF8sQS54K0Eud2lkdGgtMjAsQS55KzEwLFIpfXhndChmKShhLmRlc2NyaXB0aW9uLF8sQS54LEEueSxBLndpZHRoLEEuaGVpZ2h0LHtjbGFzczoiYWN0b3IifSxmKTtsZXQgTj1hLmhlaWdodDtpZihCLm5vZGUpe2NvbnN0IFI9Qi5ub2RlKCkuZ2V0QkJveCgpO2EuaGVpZ2h0PVIuaGVpZ2h0LE49Ui5oZWlnaHR9cmV0dXJuIE59LERWZT1mdW5jdGlvbihpLGEsZixwKXtjb25zdCB3PXA/YS5zdG9weTphLnN0YXJ0eSxtPWEueCthLndpZHRoLzIsYj13KzgwO2kubG93ZXIoKSxwfHwoZ20rKyxpLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3IiK2dtKS5hdHRyKCJ4MSIsbSkuYXR0cigieTEiLGIpLmF0dHIoIngyIixtKS5hdHRyKCJ5MiIsMmUzKS5hdHRyKCJjbGFzcyIsImFjdG9yLWxpbmUiKS5hdHRyKCJjbGFzcyIsIjIwMCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNXB4IikuYXR0cigic3Ryb2tlIiwiIzk5OSIpLGEuYWN0b3JDbnQ9Z20pO2NvbnN0IEU9aS5hcHBlbmQoImciKTtFLmF0dHIoImNsYXNzIiwiYWN0b3ItbWFuIik7Y29uc3QgXz1iVCgpO18ueD1hLngsXy55PXcsXy5maWxsPSIjZWFlYWVhIixfLndpZHRoPWEud2lkdGgsXy5oZWlnaHQ9YS5oZWlnaHQsXy5jbGFzcz0iYWN0b3IiLF8ucng9MyxfLnJ5PTMsRS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yLW1hbi10b3JzbyIrZ20pLmF0dHIoIngxIixtKS5hdHRyKCJ5MSIsdysyNSkuYXR0cigieDIiLG0pLmF0dHIoInkyIix3KzQ1KSxFLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3ItbWFuLWFybXMiK2dtKS5hdHRyKCJ4MSIsbS1fVC8yKS5hdHRyKCJ5MSIsdyszMykuYXR0cigieDIiLG0rX1QvMikuYXR0cigieTIiLHcrMzMpLEUuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLG0tX1QvMikuYXR0cigieTEiLHcrNjApLmF0dHIoIngyIixtKS5hdHRyKCJ5MiIsdys0NSksRS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsbSkuYXR0cigieTEiLHcrNDUpLmF0dHIoIngyIixtK19ULzItMikuYXR0cigieTIiLHcrNjApO2NvbnN0IEE9RS5hcHBlbmQoImNpcmNsZSIpO0EuYXR0cigiY3giLGEueCthLndpZHRoLzIpLEEuYXR0cigiY3kiLHcrMTApLEEuYXR0cigiciIsMTUpLEEuYXR0cigid2lkdGgiLGEud2lkdGgpLEEuYXR0cigiaGVpZ2h0IixhLmhlaWdodCk7Y29uc3QgST1FLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGEuaGVpZ2h0PUkuaGVpZ2h0LHhndChmKShhLmRlc2NyaXB0aW9uLEUsXy54LF8ueSszNSxfLndpZHRoLF8uaGVpZ2h0LHtjbGFzczoiYWN0b3IifSxmKSxhLmhlaWdodH0sSVZlPWZ1bmN0aW9uKGksYSxmLHApe3N3aXRjaChhLnR5cGUpe2Nhc2UiYWN0b3IiOnJldHVybiBEVmUoaSxhLGYscCk7Y2FzZSJwYXJ0aWNpcGFudCI6cmV0dXJuIE1WZShpLGEsZixwKX19LE9WZT1mdW5jdGlvbihpLGEsZil7Y29uc3Qgdz1pLmFwcGVuZCgiZyIpO05SdCh3LGEpLGEubmFtZSYmeGd0KGYpKGEubmFtZSx3LGEueCxhLnkrKGEudGV4dE1heEhlaWdodHx8MCkvMixhLndpZHRoLDAse2NsYXNzOiJ0ZXh0In0sZiksdy5sb3dlcigpfSxQVmU9ZnVuY3Rpb24oaSl7cmV0dXJuIGkuYXBwZW5kKCJnIil9LEZWZT1mdW5jdGlvbihpLGEsZixwLHcpe2NvbnN0IG09YlQoKSxiPWEuYW5jaG9yZWQ7bS54PWEuc3RhcnR4LG0ueT1hLnN0YXJ0eSxtLmNsYXNzPSJhY3RpdmF0aW9uIit3JTMsbS53aWR0aD1hLnN0b3B4LWEuc3RhcnR4LG0uaGVpZ2h0PWYtYS5zdGFydHkseWd0KGIsbSl9LE5WZT1mdW5jdGlvbihpLGEsZixwKXtjb25zdHtib3hNYXJnaW46dyxib3hUZXh0TWFyZ2luOm0sbGFiZWxCb3hIZWlnaHQ6YixsYWJlbEJveFdpZHRoOkUsbWVzc2FnZUZvbnRGYW1pbHk6XyxtZXNzYWdlRm9udFNpemU6QSxtZXNzYWdlRm9udFdlaWdodDpJfT1wLEI9aS5hcHBlbmQoImciKSxOPWZ1bmN0aW9uKFcsZXQsc3QsYXQpe3JldHVybiBCLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixXKS5hdHRyKCJ5MSIsZXQpLmF0dHIoIngyIixzdCkuYXR0cigieTIiLGF0KS5hdHRyKCJjbGFzcyIsImxvb3BMaW5lIil9O04oYS5zdGFydHgsYS5zdGFydHksYS5zdG9weCxhLnN0YXJ0eSksTihhLnN0b3B4LGEuc3RhcnR5LGEuc3RvcHgsYS5zdG9weSksTihhLnN0YXJ0eCxhLnN0b3B5LGEuc3RvcHgsYS5zdG9weSksTihhLnN0YXJ0eCxhLnN0YXJ0eSxhLnN0YXJ0eCxhLnN0b3B5KSxhLnNlY3Rpb25zIT09dm9pZCAwJiZhLnNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oVyl7TihhLnN0YXJ0eCxXLnksYS5zdG9weCxXLnkpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMywgMyIpfSk7bGV0IFI9UmR0KCk7Ui50ZXh0PWYsUi54PWEuc3RhcnR4LFIueT1hLnN0YXJ0eSxSLmZvbnRGYW1pbHk9XyxSLmZvbnRTaXplPUEsUi5mb250V2VpZ2h0PUksUi5hbmNob3I9Im1pZGRsZSIsUi52YWxpZ249Im1pZGRsZSIsUi50c3Bhbj0hMSxSLndpZHRoPUV8fDUwLFIuaGVpZ2h0PWJ8fDIwLFIudGV4dE1hcmdpbj1tLFIuY2xhc3M9ImxhYmVsVGV4dCIsUFJ0KEIsUiksUj1CUnQoKSxSLnRleHQ9YS50aXRsZSxSLng9YS5zdGFydHgrRS8yKyhhLnN0b3B4LWEuc3RhcnR4KS8yLFIueT1hLnN0YXJ0eSt3K20sUi5hbmNob3I9Im1pZGRsZSIsUi52YWxpZ249Im1pZGRsZSIsUi50ZXh0TWFyZ2luPW0sUi5jbGFzcz0ibG9vcFRleHQiLFIuZm9udEZhbWlseT1fLFIuZm9udFNpemU9QSxSLmZvbnRXZWlnaHQ9SSxSLndyYXA9ITA7bGV0IHo9cEwoQixSKTtyZXR1cm4gYS5zZWN0aW9uVGl0bGVzIT09dm9pZCAwJiZhLnNlY3Rpb25UaXRsZXMuZm9yRWFjaChmdW5jdGlvbihXLGV0KXtpZihXLm1lc3NhZ2Upe1IudGV4dD1XLm1lc3NhZ2UsUi54PWEuc3RhcnR4KyhhLnN0b3B4LWEuc3RhcnR4KS8yLFIueT1hLnNlY3Rpb25zW2V0XS55K3crbSxSLmNsYXNzPSJsb29wVGV4dCIsUi5hbmNob3I9Im1pZGRsZSIsUi52YWxpZ249Im1pZGRsZSIsUi50c3Bhbj0hMSxSLmZvbnRGYW1pbHk9XyxSLmZvbnRTaXplPUEsUi5mb250V2VpZ2h0PUksUi53cmFwPWEud3JhcCx6PXBMKEIsUik7bGV0IHN0PU1hdGgucm91bmQoei5tYXAoYXQ9PihhdC5fZ3JvdXBzfHxhdClbMF1bMF0uZ2V0QkJveCgpLmhlaWdodCkucmVkdWNlKChhdCxidCk9PmF0K2J0KSk7YS5zZWN0aW9uc1tldF0uaGVpZ2h0Kz1zdC0odyttKX19KSxhLmhlaWdodD1NYXRoLnJvdW5kKGEuc3RvcHktYS5zdGFydHkpLEJ9LE5SdD1mdW5jdGlvbihpLGEpe21QdChpLGEpfSxCVmU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiZGF0YWJhc2UiKS5hdHRyKCJmaWxsLXJ1bGUiLCJldmVub2RkIikuYXR0cigiY2xpcC1ydWxlIiwiZXZlbm9kZCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIuMjU4LjAwMWwuMjU2LjAwNC4yNTUuMDA1LjI1My4wMDguMjUxLjAxLjI0OS4wMTIuMjQ3LjAxNS4yNDYuMDE2LjI0Mi4wMTkuMjQxLjAyLjIzOS4wMjMuMjM2LjAyNC4yMzMuMDI3LjIzMS4wMjguMjI5LjAzMS4yMjUuMDMyLjIyMy4wMzQuMjIuMDM2LjIxNy4wMzguMjE0LjA0LjIxMS4wNDEuMjA4LjA0My4yMDUuMDQ1LjIwMS4wNDYuMTk4LjA0OC4xOTQuMDUuMTkxLjA1MS4xODcuMDUzLjE4My4wNTQuMTguMDU2LjE3NS4wNTcuMTcyLjA1OS4xNjguMDYuMTYzLjA2MS4xNi4wNjMuMTU1LjA2NC4xNS4wNjYuMDc0LjAzMy4wNzMuMDMzLjA3MS4wMzQuMDcuMDM0LjA2OS4wMzUuMDY4LjAzNS4wNjcuMDM1LjA2Ni4wMzUuMDY0LjAzNi4wNjQuMDM2LjA2Mi4wMzYuMDYuMDM2LjA2LjAzNy4wNTguMDM3LjA1OC4wMzcuMDU1LjAzOC4wNTUuMDM4LjA1My4wMzguMDUyLjAzOC4wNTEuMDM5LjA1LjAzOS4wNDguMDM5LjA0Ny4wMzkuMDQ1LjA0LjA0NC4wNC4wNDMuMDQuMDQxLjA0LjA0LjA0MS4wMzkuMDQxLjAzNy4wNDEuMDM2LjA0MS4wMzQuMDQxLjAzMy4wNDIuMDMyLjA0Mi4wMy4wNDIuMDI5LjA0Mi4wMjcuMDQyLjAyNi4wNDMuMDI0LjA0My4wMjMuMDQzLjAyMS4wNDMuMDIuMDQzLjAxOC4wNDQuMDE3LjA0My4wMTUuMDQ0LjAxMy4wNDQuMDEyLjA0NC4wMTEuMDQ1LjAwOS4wNDQuMDA3LjA0NS4wMDYuMDQ1LjAwNC4wNDUuMDAyLjA0NS4wMDEuMDQ1djE3bC0uMDAxLjA0NS0uMDAyLjA0NS0uMDA0LjA0NS0uMDA2LjA0NS0uMDA3LjA0NS0uMDA5LjA0NC0uMDExLjA0NS0uMDEyLjA0NC0uMDEzLjA0NC0uMDE1LjA0NC0uMDE3LjA0My0uMDE4LjA0NC0uMDIuMDQzLS4wMjEuMDQzLS4wMjMuMDQzLS4wMjQuMDQzLS4wMjYuMDQzLS4wMjcuMDQyLS4wMjkuMDQyLS4wMy4wNDItLjAzMi4wNDItLjAzMy4wNDItLjAzNC4wNDEtLjAzNi4wNDEtLjAzNy4wNDEtLjAzOS4wNDEtLjA0LjA0MS0uMDQxLjA0LS4wNDMuMDQtLjA0NC4wNC0uMDQ1LjA0LS4wNDcuMDM5LS4wNDguMDM5LS4wNS4wMzktLjA1MS4wMzktLjA1Mi4wMzgtLjA1My4wMzgtLjA1NS4wMzgtLjA1NS4wMzgtLjA1OC4wMzctLjA1OC4wMzctLjA2LjAzNy0uMDYuMDM2LS4wNjIuMDM2LS4wNjQuMDM2LS4wNjQuMDM2LS4wNjYuMDM1LS4wNjcuMDM1LS4wNjguMDM1LS4wNjkuMDM1LS4wNy4wMzQtLjA3MS4wMzQtLjA3My4wMzMtLjA3NC4wMzMtLjE1LjA2Ni0uMTU1LjA2NC0uMTYuMDYzLS4xNjMuMDYxLS4xNjguMDYtLjE3Mi4wNTktLjE3NS4wNTctLjE4LjA1Ni0uMTgzLjA1NC0uMTg3LjA1My0uMTkxLjA1MS0uMTk0LjA1LS4xOTguMDQ4LS4yMDEuMDQ2LS4yMDUuMDQ1LS4yMDguMDQzLS4yMTEuMDQxLS4yMTQuMDQtLjIxNy4wMzgtLjIyLjAzNi0uMjIzLjAzNC0uMjI1LjAzMi0uMjI5LjAzMS0uMjMxLjAyOC0uMjMzLjAyNy0uMjM2LjAyNC0uMjM5LjAyMy0uMjQxLjAyLS4yNDIuMDE5LS4yNDYuMDE2LS4yNDcuMDE1LS4yNDkuMDEyLS4yNTEuMDEtLjI1My4wMDgtLjI1NS4wMDUtLjI1Ni4wMDQtLjI1OC4wMDEtLjI1OC0uMDAxLS4yNTYtLjAwNC0uMjU1LS4wMDUtLjI1My0uMDA4LS4yNTEtLjAxLS4yNDktLjAxMi0uMjQ3LS4wMTUtLjI0NS0uMDE2LS4yNDMtLjAxOS0uMjQxLS4wMi0uMjM4LS4wMjMtLjIzNi0uMDI0LS4yMzQtLjAyNy0uMjMxLS4wMjgtLjIyOC0uMDMxLS4yMjYtLjAzMi0uMjIzLS4wMzQtLjIyLS4wMzYtLjIxNy0uMDM4LS4yMTQtLjA0LS4yMTEtLjA0MS0uMjA4LS4wNDMtLjIwNC0uMDQ1LS4yMDEtLjA0Ni0uMTk4LS4wNDgtLjE5NS0uMDUtLjE5LS4wNTEtLjE4Ny0uMDUzLS4xODQtLjA1NC0uMTc5LS4wNTYtLjE3Ni0uMDU3LS4xNzItLjA1OS0uMTY3LS4wNi0uMTY0LS4wNjEtLjE1OS0uMDYzLS4xNTUtLjA2NC0uMTUxLS4wNjYtLjA3NC0uMDMzLS4wNzItLjAzMy0uMDcyLS4wMzQtLjA3LS4wMzQtLjA2OS0uMDM1LS4wNjgtLjAzNS0uMDY3LS4wMzUtLjA2Ni0uMDM1LS4wNjQtLjAzNi0uMDYzLS4wMzYtLjA2Mi0uMDM2LS4wNjEtLjAzNi0uMDYtLjAzNy0uMDU4LS4wMzctLjA1Ny0uMDM3LS4wNTYtLjAzOC0uMDU1LS4wMzgtLjA1My0uMDM4LS4wNTItLjAzOC0uMDUxLS4wMzktLjA0OS0uMDM5LS4wNDktLjAzOS0uMDQ2LS4wMzktLjA0Ni0uMDQtLjA0NC0uMDQtLjA0My0uMDQtLjA0MS0uMDQtLjA0LS4wNDEtLjAzOS0uMDQxLS4wMzctLjA0MS0uMDM2LS4wNDEtLjAzNC0uMDQxLS4wMzMtLjA0Mi0uMDMyLS4wNDItLjAzLS4wNDItLjAyOS0uMDQyLS4wMjctLjA0Mi0uMDI2LS4wNDMtLjAyNC0uMDQzLS4wMjMtLjA0My0uMDIxLS4wNDMtLjAyLS4wNDMtLjAxOC0uMDQ0LS4wMTctLjA0My0uMDE1LS4wNDQtLjAxMy0uMDQ0LS4wMTItLjA0NC0uMDExLS4wNDUtLjAwOS0uMDQ0LS4wMDctLjA0NS0uMDA2LS4wNDUtLjAwNC0uMDQ1LS4wMDItLjA0NS0uMDAxLS4wNDV2LTE3bC4wMDEtLjA0NS4wMDItLjA0NS4wMDQtLjA0NS4wMDYtLjA0NS4wMDctLjA0NS4wMDktLjA0NC4wMTEtLjA0NS4wMTItLjA0NC4wMTMtLjA0NC4wMTUtLjA0NC4wMTctLjA0My4wMTgtLjA0NC4wMi0uMDQzLjAyMS0uMDQzLjAyMy0uMDQzLjAyNC0uMDQzLjAyNi0uMDQzLjAyNy0uMDQyLjAyOS0uMDQyLjAzLS4wNDIuMDMyLS4wNDIuMDMzLS4wNDIuMDM0LS4wNDEuMDM2LS4wNDEuMDM3LS4wNDEuMDM5LS4wNDEuMDQtLjA0MS4wNDEtLjA0LjA0My0uMDQuMDQ0LS4wNC4wNDYtLjA0LjA0Ni0uMDM5LjA0OS0uMDM5LjA0OS0uMDM5LjA1MS0uMDM5LjA1Mi0uMDM4LjA1My0uMDM4LjA1NS0uMDM4LjA1Ni0uMDM4LjA1Ny0uMDM3LjA1OC0uMDM3LjA2LS4wMzcuMDYxLS4wMzYuMDYyLS4wMzYuMDYzLS4wMzYuMDY0LS4wMzYuMDY2LS4wMzUuMDY3LS4wMzUuMDY4LS4wMzUuMDY5LS4wMzUuMDctLjAzNC4wNzItLjAzNC4wNzItLjAzMy4wNzQtLjAzMy4xNTEtLjA2Ni4xNTUtLjA2NC4xNTktLjA2My4xNjQtLjA2MS4xNjctLjA2LjE3Mi0uMDU5LjE3Ni0uMDU3LjE3OS0uMDU2LjE4NC0uMDU0LjE4Ny0uMDUzLjE5LS4wNTEuMTk1LS4wNS4xOTgtLjA0OC4yMDEtLjA0Ni4yMDQtLjA0NS4yMDgtLjA0My4yMTEtLjA0MS4yMTQtLjA0LjIxNy0uMDM4LjIyLS4wMzYuMjIzLS4wMzQuMjI2LS4wMzIuMjI4LS4wMzEuMjMxLS4wMjguMjM0LS4wMjcuMjM2LS4wMjQuMjM4LS4wMjMuMjQxLS4wMi4yNDMtLjAxOS4yNDUtLjAxNi4yNDctLjAxNS4yNDktLjAxMi4yNTEtLjAxLjI1My0uMDA4LjI1NS0uMDA1LjI1Ni0uMDA0LjI1OC0uMDAxLjI1OC4wMDF6bS05LjI1OCAyMC40OTl2LjAxbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMi4wMDUuMDIxLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI1LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDQ5LjA1Ni4wNS4wNjEuMDUxLjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTEuMDc5LjA1Mi4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTEuMTA1LjA1Mi4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OC4xNDQuMDQ5LjE0Ny4wNDcuMTUyLjA0Ny4xNTUuMDQ3LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQxLjE3OC4wNDEuMTgzLjAzOS4xODcuMDM5LjE5LjAzNy4xOTQuMDM1LjE5Ny4wMzUuMjAyLjAzMy4yMDQuMDMxLjIwOS4wMy4yMTIuMDI5LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNS4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDUuMjU2LjAwNC4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMS4yMjQtLjAyNC4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzEuMjAyLS4wMzQuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wNC4xNzktLjA0LjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1My4wODMtLjA1MS4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI0LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEyN2wtLjA3Ny4wNTUtLjA4LjA1My0uMDgzLjA1NC0uMDg1LjA1My0uMDg3LjA1Mi0uMDkuMDUyLS4wOTMuMDUxLS4wOTUuMDUtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDUtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wNC0uMTMyLjAzOC0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNy0uMTM5LjAzNS0uMTQyLjAzNS0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOS0uMTU0LjAyNy0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDEtLjE3OS4wMDgtLjE3OS4wMDgtLjE4MS4wMDYtLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNi0uMTc5LS4wMDgtLjE3OS0uMDA4LS4xNzgtLjAxLS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyNy0uMTUzLS4wMjktLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM1LS4xNC0uMDM1LS4xMzctLjAzNy0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOC0uMTMtLjA0LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQyLS4xMi0uMDQ0LS4xMTctLjA0My0uMTE2LS4wNDUtLjExMy0uMDQ1LS4xMTItLjA0Ni0uMTA5LS4wNDctLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNS0uMDkzLS4wNTItLjA5LS4wNTEtLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTI3em0wLTUuNjU0di4wMTFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjIuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjQuMDE2LjAyMy4wMTcuMDI0LjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjQuMDIzLjAyNS4wMjQuMDI0LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1Mi4xMS4wNTEuMTE0LjA1MS4xMTkuMDUyLjEyMy4wNS4xMjcuMDUxLjEzMS4wNS4xMzUuMDQ5LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQ0LjE3MS4wNDIuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMi4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTIuMjQxLS4wMTUuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDUuMTM2LS4wNDkuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUxLjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI1LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjMuMDEzLS4wMjQuMDEyLS4wMjIuMDEtLjAyMy4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIxLjAwNC0uMDIyLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEzOWwtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1NC0uMDg1LjA1Mi0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDQtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM1LS4xNDMuMDMzLS4xNDQuMDMzLS4xNDcuMDMzLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMDktLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDctLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNy0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAwOS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMy0uMTQ1LS4wMzMtLjE0My0uMDMzLS4xNDEtLjAzNS0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTEtLjA4Ny0uMDUzLS4wODUtLjA1Mi0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTM5em0wLTUuNjY2di4wMTFsLjAwMS4wMi4wMDMuMDIyLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIxLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjQuMDE4LjAyMy4wMTkuMDI0LjAyMS4wMjUuMDIyLjAyNC4wMjMuMDI0LjAyNC4wMjUuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUxLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE3LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEzLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA0OS4xMzEtLjA1MS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIyLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTUzbC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDUzLS4wODUuMDUzLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDgtLjEwNS4wNDgtLjEwNi4wNDgtLjEwOS4wNDYtLjExMS4wNDYtLjExNC4wNDYtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0My0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzQtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzItLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjQtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjMtLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxLS4xNzguMDEtLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDYtLjE4Mi4wMDYtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDEtLjE4NS4wMDEtLjE4NS0uMDAxLS4xODQtLjAwMS0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNi0uMTgxLS4wMDYtLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMS0uMTc2LS4wMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMy0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNC0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzItLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM0LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNDEtLjEyNi0uMDQxLS4xMjQtLjA0MS0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDgtLjEwNS0uMDQ4LS4xMDItLjA0OC0uMS0uMDUtLjA5Ny0uMDQ5LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTItLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTMtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTUzem04Ljc0LTguMTc5bC0uMjU3LjAwNC0uMjU0LjAwNS0uMjUuMDA4LS4yNDcuMDExLS4yNDQuMDEyLS4yNDEuMDE0LS4yMzcuMDE2LS4yMzMuMDE4LS4yMzEuMDIxLS4yMjYuMDIyLS4yMjQuMDIzLS4yMi4wMjYtLjIxNi4wMjctLjIxMi4wMjgtLjIxLjAzMS0uMjA1LjAzMi0uMjAyLjAzMy0uMTk4LjAzNC0uMTk0LjAzNi0uMTkxLjAzOC0uMTg3LjAzOC0uMTgzLjA0LS4xNzkuMDQxLS4xNzUuMDQyLS4xNzIuMDQzLS4xNjguMDQzLS4xNjMuMDQ1LS4xNi4wNDYtLjE1NS4wNDYtLjE1Mi4wNDgtLjE0OC4wNDgtLjE0My4wNDgtLjEzOS4wNDktLjEzNi4wNS0uMTMxLjA1LS4xMjYuMDUxLS4xMjMuMDUxLS4xMTguMDUxLS4xMTQuMDUyLS4xMS4wNTItLjEwNi4wNTItLjEwMS4wNTItLjA5Ni4wNTItLjA5Mi4wNTItLjA4OC4wNTItLjA4My4wNTItLjA3OS4wNTItLjA3NC4wNTEtLjA3LjA1Mi0uMDY1LjA1MS0uMDYuMDUtLjA1Ni4wNS0uMDUxLjA1LS4wMjMuMDI1LS4wMjMuMDI0LS4wMjEuMDI0LS4wMi4wMjUtLjAxOS4wMjQtLjAxOC4wMjQtLjAxNy4wMjMtLjAxNS4wMjQtLjAxNC4wMjMtLjAxMy4wMjMtLjAxMi4wMjMtLjAxLjAyMy0uMDEuMDIyLS4wMDguMDIyLS4wMDYuMDIzLS4wMDYuMDIxLS4wMDQuMDIyLS4wMDQuMDIxLS4wMDEuMDIxLS4wMDEuMDIxLjAwMS4wMjEuMDAxLjAyMS4wMDQuMDIxLjAwNC4wMjIuMDA2LjAyMS4wMDYuMDIzLjAwOC4wMjIuMDEuMDIyLjAxLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE0LjAyMy4wMTUuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyLjAyNS4wMjEuMDI0LjAyMy4wMjQuMDIzLjAyNS4wNTEuMDUuMDU2LjA1LjA2LjA1LjA2NS4wNTEuMDcuMDUyLjA3NC4wNTEuMDc5LjA1Mi4wODMuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTYuMDUyLjEwMS4wNTIuMTA2LjA1Mi4xMS4wNTIuMTE0LjA1Mi4xMTguMDUxLjEyMy4wNTEuMTI2LjA1MS4xMzEuMDUuMTM2LjA1LjEzOS4wNDkuMTQzLjA0OC4xNDguMDQ4LjE1Mi4wNDguMTU1LjA0Ni4xNi4wNDYuMTYzLjA0NS4xNjguMDQzLjE3Mi4wNDMuMTc1LjA0Mi4xNzkuMDQxLjE4My4wNC4xODcuMDM4LjE5MS4wMzguMTk0LjAzNi4xOTguMDM0LjIwMi4wMzMuMjA1LjAzMi4yMS4wMzEuMjEyLjAyOC4yMTYuMDI3LjIyLjAyNi4yMjQuMDIzLjIyNi4wMjIuMjMxLjAyMS4yMzMuMDE4LjIzNy4wMTYuMjQxLjAxNC4yNDQuMDEyLjI0Ny4wMTEuMjUuMDA4LjI1NC4wMDUuMjU3LjAwNC4yNi4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIyLjIyNC0uMDIzLjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzOC4xODctLjAzOC4xODMtLjA0LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQzLjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDguMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI0LjAyLS4wMjUuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjMuMDE1LS4wMjQuMDE0LS4wMjMuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIzLjAwNi0uMDIxLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwNC0uMDIxLS4wMDQtLjAyMi0uMDA2LS4wMjEtLjAwNi0uMDIzLS4wMDgtLjAyMi0uMDEtLjAyMi0uMDEtLjAyMy0uMDEyLS4wMjMtLjAxMy0uMDIzLS4wMTQtLjAyMy0uMDE1LS4wMjQtLjAxNy0uMDIzLS4wMTgtLjAyNC0uMDE5LS4wMjQtLjAyLS4wMjUtLjAyMS0uMDI0LS4wMjMtLjAyNC0uMDIzLS4wMjUtLjA1MS0uMDUtLjA1Ni0uMDUtLjA2LS4wNS0uMDY1LS4wNTEtLjA3LS4wNTItLjA3NC0uMDUxLS4wNzktLjA1Mi0uMDgzLS4wNTItLjA4OC0uMDUyLS4wOTItLjA1Mi0uMDk2LS4wNTItLjEwMS0uMDUyLS4xMDYtLjA1Mi0uMTEtLjA1Mi0uMTE0LS4wNTItLjExOC0uMDUxLS4xMjMtLjA1MS0uMTI2LS4wNTEtLjEzMS0uMDUtLjEzNi0uMDUtLjEzOS0uMDQ5LS4xNDMtLjA0OC0uMTQ4LS4wNDgtLjE1Mi0uMDQ4LS4xNTUtLjA0Ni0uMTYtLjA0Ni0uMTYzLS4wNDUtLjE2OC0uMDQzLS4xNzItLjA0My0uMTc1LS4wNDItLjE3OS0uMDQxLS4xODMtLjA0LS4xODctLjAzOC0uMTkxLS4wMzgtLjE5NC0uMDM2LS4xOTgtLjAzNC0uMjAyLS4wMzMtLjIwNS0uMDMyLS4yMS0uMDMxLS4yMTItLjAyOC0uMjE2LS4wMjctLjIyLS4wMjYtLjIyNC0uMDIzLS4yMjYtLjAyMi0uMjMxLS4wMjEtLjIzMy0uMDE4LS4yMzctLjAxNi0uMjQxLS4wMTQtLjI0NC0uMDEyLS4yNDctLjAxMS0uMjUtLjAwOC0uMjU0LS4wMDUtLjI1Ny0uMDA0LS4yNi0uMDAxLS4yNi4wMDF6Iil9LFJWZT1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjb21wdXRlciIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMiAydjEzaDIwdi0xM2gtMjB6bTE4IDExaC0xNnYtOWgxNnY5em0tMTAuMjI4IDZsLjQ2Ni0xaDMuNTI0bC40NjcgMWgtNC40NTd6bTE0LjIyOCAzaC0yNGwyLTZoMi4xMDRsLTEuMzMgNGgxOC40NWwtMS4yOTctNGgyLjA3M2wyIDZ6bS01LTEwaC0xNHYtN2gxNHY3eiIpfSxqVmU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiY2xvY2siKS5hdHRyKCJ3aWR0aCIsIjI0IikuYXR0cigiaGVpZ2h0IiwiMjQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyIDJjNS41MTQgMCAxMCA0LjQ4NiAxMCAxMHMtNC40ODYgMTAtMTAgMTAtMTAtNC40ODYtMTAtMTAgNC40ODYtMTAgMTAtMTB6bTAtMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnM1LjM3MyAxMiAxMiAxMiAxMi01LjM3MyAxMi0xMi01LjM3My0xMi0xMi0xMnptNS44NDggMTIuNDU5Yy4yMDIuMDM4LjIwMi4zMzMuMDAxLjM3Mi0xLjkwNy4zNjEtNi4wNDUgMS4xMTEtNi41NDcgMS4xMTEtLjcxOSAwLTEuMzAxLS41ODItMS4zMDEtMS4zMDEgMC0uNTEyLjc3LTUuNDQ3IDEuMTI1LTcuNDQ1LjAzNC0uMTkyLjMxMi0uMTgxLjM0My4wMTRsLjk4NSA2LjIzOCA1LjM5NCAxLjAxMXoiKX0sJFZlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93aGVhZCIpLmF0dHIoInJlZlgiLDcuOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKX0selZlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImZpbGxlZC1oZWFkIikuYXR0cigicmVmWCIsMTUuNSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0scVZlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsInNlcXVlbmNlbnVtYmVyIikuYXR0cigicmVmWCIsMTUpLmF0dHIoInJlZlkiLDE1KS5hdHRyKCJtYXJrZXJXaWR0aCIsNjApLmF0dHIoIm1hcmtlckhlaWdodCIsNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwxNSkuYXR0cigiY3kiLDE1KS5hdHRyKCJyIiw2KX0sSFZlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNyb3NzaGVhZCIpLmF0dHIoIm1hcmtlcldpZHRoIiwxNSkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXR0cigicmVmWCIsNCkuYXR0cigicmVmWSIsNC41KS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHQiKS5hdHRyKCJkIiwiTSAxLDIgTCA2LDcgTSA2LDIgTCAxLDciKX0sQlJ0PWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDp2b2lkIDAsYW5jaG9yOnZvaWQgMCxzdHlsZToiIzY2NiIsd2lkdGg6dm9pZCAwLGhlaWdodDp2b2lkIDAsdGV4dE1hcmdpbjowLHJ4OjAscnk6MCx0c3BhbjohMCx2YWxpZ246dm9pZCAwfX0sVlZlPWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDoiI0VERjJBRSIsc3Ryb2tlOiIjNjY2Iix3aWR0aDoxMDAsYW5jaG9yOiJzdGFydCIsaGVpZ2h0OjEwMCxyeDowLHJ5OjB9fSx4Z3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHcsbSxiLEUsXyxBLEkpe2NvbnN0IEI9bS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixiK18vMikuYXR0cigieSIsRStBLzIrNSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCh3KTtwKEIsSSl9ZnVuY3Rpb24gYSh3LG0sYixFLF8sQSxJLEIpe2NvbnN0e2FjdG9yRm9udFNpemU6TixhY3RvckZvbnRGYW1pbHk6UixhY3RvckZvbnRXZWlnaHQ6en09QixbVyxldF09VkEoTiksc3Q9dy5zcGxpdChLci5saW5lQnJlYWtSZWdleCk7Zm9yKGxldCBhdD0wO2F0PHN0Lmxlbmd0aDthdCsrKXtjb25zdCBidD1hdCpXLVcqKHN0Lmxlbmd0aC0xKS8yLG10PW0uYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYitfLzIpLmF0dHIoInkiLEUpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLGV0KS5zdHlsZSgiZm9udC13ZWlnaHQiLHopLnN0eWxlKCJmb250LWZhbWlseSIsUik7bXQuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLGIrXy8yKS5hdHRyKCJkeSIsYnQpLnRleHQoc3RbYXRdKSxtdC5hdHRyKCJ5IixFK0EvMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHAobXQsSSl9fWZ1bmN0aW9uIGYodyxtLGIsRSxfLEEsSSxCKXtjb25zdCBOPW0uYXBwZW5kKCJzd2l0Y2giKSx6PU4uYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsYikuYXR0cigieSIsRSkuYXR0cigid2lkdGgiLF8pLmF0dHIoImhlaWdodCIsQSkuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7ei5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dCh3KSxhKHcsTixiLEUsXyxBLEksQikscCh6LEkpfWZ1bmN0aW9uIHAodyxtKXtmb3IoY29uc3QgYiBpbiBtKW0uaGFzT3duUHJvcGVydHkoYikmJncuYXR0cihiLG1bYl0pfXJldHVybiBmdW5jdGlvbih3KXtyZXR1cm4gdy50ZXh0UGxhY2VtZW50PT09ImZvIj9mOncudGV4dFBsYWNlbWVudD09PSJvbGQiP2k6YX19KCksR1ZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSh3LG0sYixFLF8sQSxJKXtjb25zdCBCPW0uYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYikuYXR0cigieSIsRSkuc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKS50ZXh0KHcpO3AoQixJKX1mdW5jdGlvbiBhKHcsbSxiLEUsXyxBLEksQil7Y29uc3R7YWN0b3JGb250U2l6ZTpOLGFjdG9yRm9udEZhbWlseTpSLGFjdG9yRm9udFdlaWdodDp6fT1CLFc9dy5zcGxpdChLci5saW5lQnJlYWtSZWdleCk7Zm9yKGxldCBldD0wO2V0PFcubGVuZ3RoO2V0Kyspe2NvbnN0IHN0PWV0Kk4tTiooVy5sZW5ndGgtMSkvMixhdD1tLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIpLmF0dHIoInkiLEUpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0Iikuc3R5bGUoImZvbnQtc2l6ZSIsTikuc3R5bGUoImZvbnQtd2VpZ2h0Iix6KS5zdHlsZSgiZm9udC1mYW1pbHkiLFIpO2F0LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixiKS5hdHRyKCJkeSIsc3QpLnRleHQoV1tldF0pLGF0LmF0dHIoInkiLEUrQS8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIikscChhdCxJKX19ZnVuY3Rpb24gZih3LG0sYixFLF8sQSxJLEIpe2NvbnN0IE49bS5hcHBlbmQoInN3aXRjaCIpLHo9Ti5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixiKS5hdHRyKCJ5IixFKS5hdHRyKCJ3aWR0aCIsXykuYXR0cigiaGVpZ2h0IixBKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTt6LmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHcpLGEodyxOLGIsRSxfLEEsSSxCKSxwKHosSSl9ZnVuY3Rpb24gcCh3LG0pe2Zvcihjb25zdCBiIGluIG0pbS5oYXNPd25Qcm9wZXJ0eShiKSYmdy5hdHRyKGIsbVtiXSl9cmV0dXJuIGZ1bmN0aW9uKHcpe3JldHVybiB3LnRleHRQbGFjZW1lbnQ9PT0iZm8iP2Y6dy50ZXh0UGxhY2VtZW50PT09Im9sZCI/aTphfX0oKSxuZj17ZHJhd1JlY3Q6eWd0LGRyYXdUZXh0OnBMLGRyYXdMYWJlbDpQUnQsZHJhd0FjdG9yOklWZSxkcmF3Qm94Ok9WZSxkcmF3UG9wdXA6Q1ZlLGFuY2hvckVsZW1lbnQ6UFZlLGRyYXdBY3RpdmF0aW9uOkZWZSxkcmF3TG9vcDpOVmUsZHJhd0JhY2tncm91bmRSZWN0Ok5SdCxpbnNlcnRBcnJvd0hlYWQ6JFZlLGluc2VydEFycm93RmlsbGVkSGVhZDp6VmUsaW5zZXJ0U2VxdWVuY2VOdW1iZXI6cVZlLGluc2VydEFycm93Q3Jvc3NIZWFkOkhWZSxpbnNlcnREYXRhYmFzZUljb246QlZlLGluc2VydENvbXB1dGVySWNvbjpSVmUsaW5zZXJ0Q2xvY2tJY29uOmpWZSxnZXRUZXh0T2JqOkJSdCxnZXROb3RlUmVjdDpWVmUscG9wdXBNZW51Ol9WZSxwb3Bkb3duTWVudTpTVmUsZml4TGlmZUxpbmVIZWlnaHRzOkZSdCxzYW5pdGl6ZVVybDppa307bGV0IGZuPXt9O2NvbnN0IEZyPXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGFjdGl2YXRpb25zOltdLG1vZGVsczp7Z2V0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsdGhpcy5hY3RvcnMubGVuZ3RoPT09MD9bMF06dGhpcy5hY3RvcnMubWFwKGk9PmkuaGVpZ2h0fHwwKSkrKHRoaXMubG9vcHMubGVuZ3RoPT09MD8wOnRoaXMubG9vcHMubWFwKGk9PmkuaGVpZ2h0fHwwKS5yZWR1Y2UoKGksYSk9PmkrYSkpKyh0aGlzLm1lc3NhZ2VzLmxlbmd0aD09PTA/MDp0aGlzLm1lc3NhZ2VzLm1hcChpPT5pLmhlaWdodHx8MCkucmVkdWNlKChpLGEpPT5pK2EpKSsodGhpcy5ub3Rlcy5sZW5ndGg9PT0wPzA6dGhpcy5ub3Rlcy5tYXAoaT0+aS5oZWlnaHR8fDApLnJlZHVjZSgoaSxhKT0+aSthKSl9LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5hY3RvcnM9W10sdGhpcy5ib3hlcz1bXSx0aGlzLmxvb3BzPVtdLHRoaXMubWVzc2FnZXM9W10sdGhpcy5ub3Rlcz1bXX0sYWRkQm94OmZ1bmN0aW9uKGkpe3RoaXMuYm94ZXMucHVzaChpKX0sYWRkQWN0b3I6ZnVuY3Rpb24oaSl7dGhpcy5hY3RvcnMucHVzaChpKX0sYWRkTG9vcDpmdW5jdGlvbihpKXt0aGlzLmxvb3BzLnB1c2goaSl9LGFkZE1lc3NhZ2U6ZnVuY3Rpb24oaSl7dGhpcy5tZXNzYWdlcy5wdXNoKGkpfSxhZGROb3RlOmZ1bmN0aW9uKGkpe3RoaXMubm90ZXMucHVzaChpKX0sbGFzdEFjdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0b3JzW3RoaXMuYWN0b3JzLmxlbmd0aC0xXX0sbGFzdExvb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb29wc1t0aGlzLmxvb3BzLmxlbmd0aC0xXX0sbGFzdE1lc3NhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlc1t0aGlzLm1lc3NhZ2VzLmxlbmd0aC0xXX0sbGFzdE5vdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3Rlc1t0aGlzLm5vdGVzLmxlbmd0aC0xXX0sYWN0b3JzOltdLGJveGVzOltdLGxvb3BzOltdLG1lc3NhZ2VzOltdLG5vdGVzOltdfSxpbml0OmZ1bmN0aW9uKCl7dGhpcy5zZXF1ZW5jZUl0ZW1zPVtdLHRoaXMuYWN0aXZhdGlvbnM9W10sdGhpcy5tb2RlbHMuY2xlYXIoKSx0aGlzLmRhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx0aGlzLnZlcnRpY2FsUG9zPTAsalJ0KE9lKCkpfSx1cGRhdGVWYWw6ZnVuY3Rpb24oaSxhLGYscCl7aVthXT09PXZvaWQgMD9pW2FdPWY6aVthXT1wKGYsaVthXSl9LHVwZGF0ZUJvdW5kczpmdW5jdGlvbihpLGEsZixwKXtjb25zdCB3PXRoaXM7bGV0IG09MDtmdW5jdGlvbiBiKEUpe3JldHVybiBmdW5jdGlvbihBKXttKys7Y29uc3QgST13LnNlcXVlbmNlSXRlbXMubGVuZ3RoLW0rMTt3LnVwZGF0ZVZhbChBLCJzdGFydHkiLGEtSSpmbi5ib3hNYXJnaW4sTWF0aC5taW4pLHcudXBkYXRlVmFsKEEsInN0b3B5IixwK0kqZm4uYm94TWFyZ2luLE1hdGgubWF4KSx3LnVwZGF0ZVZhbChGci5kYXRhLCJzdGFydHgiLGktSSpmbi5ib3hNYXJnaW4sTWF0aC5taW4pLHcudXBkYXRlVmFsKEZyLmRhdGEsInN0b3B4IixmK0kqZm4uYm94TWFyZ2luLE1hdGgubWF4KSxFIT09ImFjdGl2YXRpb24iJiYody51cGRhdGVWYWwoQSwic3RhcnR4IixpLUkqZm4uYm94TWFyZ2luLE1hdGgubWluKSx3LnVwZGF0ZVZhbChBLCJzdG9weCIsZitJKmZuLmJveE1hcmdpbixNYXRoLm1heCksdy51cGRhdGVWYWwoRnIuZGF0YSwic3RhcnR5IixhLUkqZm4uYm94TWFyZ2luLE1hdGgubWluKSx3LnVwZGF0ZVZhbChGci5kYXRhLCJzdG9weSIscCtJKmZuLmJveE1hcmdpbixNYXRoLm1heCkpfX10aGlzLnNlcXVlbmNlSXRlbXMuZm9yRWFjaChiKCkpLHRoaXMuYWN0aXZhdGlvbnMuZm9yRWFjaChiKCJhY3RpdmF0aW9uIikpfSxpbnNlcnQ6ZnVuY3Rpb24oaSxhLGYscCl7Y29uc3Qgdz1Lci5nZXRNaW4oaSxmKSxtPUtyLmdldE1heChpLGYpLGI9S3IuZ2V0TWluKGEscCksRT1Lci5nZXRNYXgoYSxwKTt0aGlzLnVwZGF0ZVZhbChGci5kYXRhLCJzdGFydHgiLHcsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKEZyLmRhdGEsInN0YXJ0eSIsYixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwoRnIuZGF0YSwic3RvcHgiLG0sTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKEZyLmRhdGEsInN0b3B5IixFLE1hdGgubWF4KSx0aGlzLnVwZGF0ZUJvdW5kcyh3LGIsbSxFKX0sbmV3QWN0aXZhdGlvbjpmdW5jdGlvbihpLGEsZil7Y29uc3QgcD1mW2kuZnJvbS5hY3Rvcl0sdz1qWShpLmZyb20uYWN0b3IpLmxlbmd0aHx8MCxtPXAueCtwLndpZHRoLzIrKHctMSkqZm4uYWN0aXZhdGlvbldpZHRoLzI7dGhpcy5hY3RpdmF0aW9ucy5wdXNoKHtzdGFydHg6bSxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcysyLHN0b3B4Om0rZm4uYWN0aXZhdGlvbldpZHRoLHN0b3B5OnZvaWQgMCxhY3RvcjppLmZyb20uYWN0b3IsYW5jaG9yZWQ6bmYuYW5jaG9yRWxlbWVudChhKX0pfSxlbmRBY3RpdmF0aW9uOmZ1bmN0aW9uKGkpe2NvbnN0IGE9dGhpcy5hY3RpdmF0aW9ucy5tYXAoZnVuY3Rpb24oZil7cmV0dXJuIGYuYWN0b3J9KS5sYXN0SW5kZXhPZihpLmZyb20uYWN0b3IpO3JldHVybiB0aGlzLmFjdGl2YXRpb25zLnNwbGljZShhLDEpWzBdfSxjcmVhdGVMb29wOmZ1bmN0aW9uKGk9e21lc3NhZ2U6dm9pZCAwLHdyYXA6ITEsd2lkdGg6dm9pZCAwfSxhKXtyZXR1cm57c3RhcnR4OnZvaWQgMCxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcyxzdG9weDp2b2lkIDAsc3RvcHk6dm9pZCAwLHRpdGxlOmkubWVzc2FnZSx3cmFwOmkud3JhcCx3aWR0aDppLndpZHRoLGhlaWdodDowLGZpbGw6YX19LG5ld0xvb3A6ZnVuY3Rpb24oaT17bWVzc2FnZTp2b2lkIDAsd3JhcDohMSx3aWR0aDp2b2lkIDB9LGEpe3RoaXMuc2VxdWVuY2VJdGVtcy5wdXNoKHRoaXMuY3JlYXRlTG9vcChpLGEpKX0sZW5kTG9vcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlcXVlbmNlSXRlbXMucG9wKCl9LGlzTG9vcE92ZXJsYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXF1ZW5jZUl0ZW1zLmxlbmd0aD90aGlzLnNlcXVlbmNlSXRlbXNbdGhpcy5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC0xXS5vdmVybGFwOiExfSxhZGRTZWN0aW9uVG9Mb29wOmZ1bmN0aW9uKGkpe2NvbnN0IGE9dGhpcy5zZXF1ZW5jZUl0ZW1zLnBvcCgpO2Euc2VjdGlvbnM9YS5zZWN0aW9uc3x8W10sYS5zZWN0aW9uVGl0bGVzPWEuc2VjdGlvblRpdGxlc3x8W10sYS5zZWN0aW9ucy5wdXNoKHt5OkZyLmdldFZlcnRpY2FsUG9zKCksaGVpZ2h0OjB9KSxhLnNlY3Rpb25UaXRsZXMucHVzaChpKSx0aGlzLnNlcXVlbmNlSXRlbXMucHVzaChhKX0sc2F2ZVZlcnRpY2FsUG9zOmZ1bmN0aW9uKCl7dGhpcy5pc0xvb3BPdmVybGFwKCkmJih0aGlzLnNhdmVkVmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcyl9LHJlc2V0VmVydGljYWxQb3M6ZnVuY3Rpb24oKXt0aGlzLmlzTG9vcE92ZXJsYXAoKSYmKHRoaXMudmVydGljYWxQb3M9dGhpcy5zYXZlZFZlcnRpY2FsUG9zKX0sYnVtcFZlcnRpY2FsUG9zOmZ1bmN0aW9uKGkpe3RoaXMudmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcytpLHRoaXMuZGF0YS5zdG9weT1Lci5nZXRNYXgodGhpcy5kYXRhLnN0b3B5LHRoaXMudmVydGljYWxQb3MpfSxnZXRWZXJ0aWNhbFBvczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZlcnRpY2FsUG9zfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm57Ym91bmRzOnRoaXMuZGF0YSxtb2RlbHM6dGhpcy5tb2RlbHN9fX0sVVZlPWZ1bmN0aW9uKGksYSl7RnIuYnVtcFZlcnRpY2FsUG9zKGZuLmJveE1hcmdpbiksYS5oZWlnaHQ9Zm4uYm94TWFyZ2luLGEuc3RhcnR5PUZyLmdldFZlcnRpY2FsUG9zKCk7Y29uc3QgZj1iVCgpO2YueD1hLnN0YXJ0eCxmLnk9YS5zdGFydHksZi53aWR0aD1hLndpZHRofHxmbi53aWR0aCxmLmNsYXNzPSJub3RlIjtjb25zdCBwPWkuYXBwZW5kKCJnIiksdz1uZi5kcmF3UmVjdChwLGYpLG09UmR0KCk7bS54PWEuc3RhcnR4LG0ueT1hLnN0YXJ0eSxtLndpZHRoPWYud2lkdGgsbS5keT0iMWVtIixtLnRleHQ9YS5tZXNzYWdlLG0uY2xhc3M9Im5vdGVUZXh0IixtLmZvbnRGYW1pbHk9Zm4ubm90ZUZvbnRGYW1pbHksbS5mb250U2l6ZT1mbi5ub3RlRm9udFNpemUsbS5mb250V2VpZ2h0PWZuLm5vdGVGb250V2VpZ2h0LG0uYW5jaG9yPWZuLm5vdGVBbGlnbixtLnRleHRNYXJnaW49Zm4ubm90ZU1hcmdpbixtLnZhbGlnbj0iY2VudGVyIjtjb25zdCBiPXBMKHAsbSksRT1NYXRoLnJvdW5kKGIubWFwKF89PihfLl9ncm91cHN8fF8pWzBdWzBdLmdldEJCb3goKS5oZWlnaHQpLnJlZHVjZSgoXyxBKT0+XytBKSk7dy5hdHRyKCJoZWlnaHQiLEUrMipmbi5ub3RlTWFyZ2luKSxhLmhlaWdodCs9RSsyKmZuLm5vdGVNYXJnaW4sRnIuYnVtcFZlcnRpY2FsUG9zKEUrMipmbi5ub3RlTWFyZ2luKSxhLnN0b3B5PWEuc3RhcnR5K0UrMipmbi5ub3RlTWFyZ2luLGEuc3RvcHg9YS5zdGFydHgrZi53aWR0aCxGci5pbnNlcnQoYS5zdGFydHgsYS5zdGFydHksYS5zdG9weCxhLnN0b3B5KSxGci5tb2RlbHMuYWRkTm90ZShhKX0sU1Q9aT0+KHtmb250RmFtaWx5OmkubWVzc2FnZUZvbnRGYW1pbHksZm9udFNpemU6aS5tZXNzYWdlRm9udFNpemUsZm9udFdlaWdodDppLm1lc3NhZ2VGb250V2VpZ2h0fSksYkw9aT0+KHtmb250RmFtaWx5Omkubm90ZUZvbnRGYW1pbHksZm9udFNpemU6aS5ub3RlRm9udFNpemUsZm9udFdlaWdodDppLm5vdGVGb250V2VpZ2h0fSksa2d0PWk9Pih7Zm9udEZhbWlseTppLmFjdG9yRm9udEZhbWlseSxmb250U2l6ZTppLmFjdG9yRm9udFNpemUsZm9udFdlaWdodDppLmFjdG9yRm9udFdlaWdodH0pO2Z1bmN0aW9uIFdWZShpLGEpe0ZyLmJ1bXBWZXJ0aWNhbFBvcygxMCk7Y29uc3R7c3RhcnR4OmYsc3RvcHg6cCxtZXNzYWdlOnd9PWEsbT1Lci5zcGxpdEJyZWFrcyh3KS5sZW5ndGgsYj0kYS5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh3LFNUKGZuKSksRT1iLmhlaWdodC9tO2EuaGVpZ2h0Kz1FLEZyLmJ1bXBWZXJ0aWNhbFBvcyhFKTtsZXQgXyxBPWIuaGVpZ2h0LTEwO2NvbnN0IEk9Yi53aWR0aDtpZihmPT09cCl7Xz1Gci5nZXRWZXJ0aWNhbFBvcygpK0EsZm4ucmlnaHRBbmdsZXN8fChBKz1mbi5ib3hNYXJnaW4sXz1Gci5nZXRWZXJ0aWNhbFBvcygpK0EpLEErPTMwO2NvbnN0IEI9S3IuZ2V0TWF4KEkvMixmbi53aWR0aC8yKTtGci5pbnNlcnQoZi1CLEZyLmdldFZlcnRpY2FsUG9zKCktMTArQSxwK0IsRnIuZ2V0VmVydGljYWxQb3MoKSszMCtBKX1lbHNlIEErPWZuLmJveE1hcmdpbixfPUZyLmdldFZlcnRpY2FsUG9zKCkrQSxGci5pbnNlcnQoZixfLTEwLHAsXyk7cmV0dXJuIEZyLmJ1bXBWZXJ0aWNhbFBvcyhBKSxhLmhlaWdodCs9QSxhLnN0b3B5PWEuc3RhcnR5K2EuaGVpZ2h0LEZyLmluc2VydChhLmZyb21Cb3VuZHMsYS5zdGFydHksYS50b0JvdW5kcyxhLnN0b3B5KSxffWNvbnN0IFlWZT1mdW5jdGlvbihpLGEsZixwKXtjb25zdHtzdGFydHg6dyxzdG9weDptLHN0YXJ0eTpiLG1lc3NhZ2U6RSx0eXBlOl8sc2VxdWVuY2VJbmRleDpBLHNlcXVlbmNlVmlzaWJsZTpJfT1hLEI9JGEuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoRSxTVChmbikpLE49UmR0KCk7Ti54PXcsTi55PWIrMTAsTi53aWR0aD1tLXcsTi5jbGFzcz0ibWVzc2FnZVRleHQiLE4uZHk9IjFlbSIsTi50ZXh0PUUsTi5mb250RmFtaWx5PWZuLm1lc3NhZ2VGb250RmFtaWx5LE4uZm9udFNpemU9Zm4ubWVzc2FnZUZvbnRTaXplLE4uZm9udFdlaWdodD1mbi5tZXNzYWdlRm9udFdlaWdodCxOLmFuY2hvcj1mbi5tZXNzYWdlQWxpZ24sTi52YWxpZ249ImNlbnRlciIsTi50ZXh0TWFyZ2luPWZuLndyYXBQYWRkaW5nLE4udHNwYW49ITEscEwoaSxOKTtjb25zdCBSPUIud2lkdGg7bGV0IHo7dz09PW0/Zm4ucmlnaHRBbmdsZXM/ej1pLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGBNICAke3d9LCR7Zn0gSCAke3crS3IuZ2V0TWF4KGZuLndpZHRoLzIsUi8yKX0gViAke2YrMjV9IEggJHt3fWApOno9aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAiK3crIiwiK2YrIiBDICIrKHcrNjApKyIsIisoZi0xMCkrIiAiKyh3KzYwKSsiLCIrKGYrMzApKyIgIit3KyIsIisoZisyMCkpOih6PWkuYXBwZW5kKCJsaW5lIiksei5hdHRyKCJ4MSIsdyksei5hdHRyKCJ5MSIsZiksei5hdHRyKCJ4MiIsbSksei5hdHRyKCJ5MiIsZikpLF89PT1wLmRiLkxJTkVUWVBFLkRPVFRFRHx8Xz09PXAuZGIuTElORVRZUEUuRE9UVEVEX0NST1NTfHxfPT09cC5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlR8fF89PT1wLmRiLkxJTkVUWVBFLkRPVFRFRF9PUEVOPyh6LnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMywgMyIpLHouYXR0cigiY2xhc3MiLCJtZXNzYWdlTGluZTEiKSk6ei5hdHRyKCJjbGFzcyIsIm1lc3NhZ2VMaW5lMCIpO2xldCBXPSIiO2ZuLmFycm93TWFya2VyQWJzb2x1dGUmJihXPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLFc9Vy5yZXBsYWNlKC9cKC9nLCJcXCgiKSxXPVcucmVwbGFjZSgvXCkvZywiXFwpIikpLHouYXR0cigic3Ryb2tlLXdpZHRoIiwyKSx6LmF0dHIoInN0cm9rZSIsIm5vbmUiKSx6LnN0eWxlKCJmaWxsIiwibm9uZSIpLChfPT09cC5kYi5MSU5FVFlQRS5TT0xJRHx8Xz09PXAuZGIuTElORVRZUEUuRE9UVEVEKSYmei5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrVysiI2Fycm93aGVhZCkiKSwoXz09PXAuZGIuTElORVRZUEUuU09MSURfUE9JTlR8fF89PT1wLmRiLkxJTkVUWVBFLkRPVFRFRF9QT0lOVCkmJnouYXR0cigibWFya2VyLWVuZCIsInVybCgiK1crIiNmaWxsZWQtaGVhZCkiKSwoXz09PXAuZGIuTElORVRZUEUuU09MSURfQ1JPU1N8fF89PT1wLmRiLkxJTkVUWVBFLkRPVFRFRF9DUk9TUykmJnouYXR0cigibWFya2VyLWVuZCIsInVybCgiK1crIiNjcm9zc2hlYWQpIiksKEl8fGZuLnNob3dTZXF1ZW5jZU51bWJlcnMpJiYoei5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitXKyIjc2VxdWVuY2VudW1iZXIpIiksaS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4Iix3KS5hdHRyKCJ5IixmKzQpLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoImZvbnQtc2l6ZSIsIjEycHgiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImNsYXNzIiwic2VxdWVuY2VOdW1iZXIiKS50ZXh0KEEpKX0sS1ZlPWZ1bmN0aW9uKGksYSxmLHAsdyxtLGIpe2xldCBFPTAsXz0wLEEsST0wO2Zvcihjb25zdCBCIG9mIHApe2NvbnN0IE49YVtCXSxSPU4uYm94O0EmJkEhPVImJihifHxGci5tb2RlbHMuYWRkQm94KEEpLF8rPWZuLmJveE1hcmdpbitBLm1hcmdpbiksUiYmUiE9QSYmKGJ8fChSLng9RStfLFIueT13KSxfKz1SLm1hcmdpbiksTi53aWR0aD1OLndpZHRofHxmbi53aWR0aCxOLmhlaWdodD1Lci5nZXRNYXgoTi5oZWlnaHR8fGZuLmhlaWdodCxmbi5oZWlnaHQpLE4ubWFyZ2luPU4ubWFyZ2lufHxmbi5hY3Rvck1hcmdpbixJPUtyLmdldE1heChJLE4uaGVpZ2h0KSxmW04ubmFtZV0mJihfKz1OLndpZHRoLzIpLE4ueD1FK18sTi5zdGFydHk9RnIuZ2V0VmVydGljYWxQb3MoKSxGci5pbnNlcnQoTi54LHcsTi54K04ud2lkdGgsTi5oZWlnaHQpLEUrPU4ud2lkdGgrXyxOLmJveCYmKE4uYm94LndpZHRoPUUrUi5tYXJnaW4tTi5ib3gueCksXz1OLm1hcmdpbixBPU4uYm94LEZyLm1vZGVscy5hZGRBY3RvcihOKX1BJiYhYiYmRnIubW9kZWxzLmFkZEJveChBKSxGci5idW1wVmVydGljYWxQb3MoSSl9LEVndD1mdW5jdGlvbihpLGEsZixwKXtpZihwKXtsZXQgdz0wO0ZyLmJ1bXBWZXJ0aWNhbFBvcyhmbi5ib3hNYXJnaW4qMik7Zm9yKGNvbnN0IG0gb2YgZil7Y29uc3QgYj1hW21dO2Iuc3RvcHl8fChiLnN0b3B5PUZyLmdldFZlcnRpY2FsUG9zKCkpO2NvbnN0IEU9bmYuZHJhd0FjdG9yKGksYixmbiwhMCk7dz1Lci5nZXRNYXgodyxFKX1Gci5idW1wVmVydGljYWxQb3Modytmbi5ib3hNYXJnaW4pfWVsc2UgZm9yKGNvbnN0IHcgb2YgZil7Y29uc3QgbT1hW3ddO25mLmRyYXdBY3RvcihpLG0sZm4sITEpfX0sUlJ0PWZ1bmN0aW9uKGksYSxmLHApe2xldCB3PTAsbT0wO2Zvcihjb25zdCBiIG9mIGYpe2NvbnN0IEU9YVtiXSxfPUpWZShFKSxBPW5mLmRyYXdQb3B1cChpLEUsXyxmbixmbi5mb3JjZU1lbnVzLHApO0EuaGVpZ2h0PncmJih3PUEuaGVpZ2h0KSxBLndpZHRoK0UueD5tJiYobT1BLndpZHRoK0UueCl9cmV0dXJue21heEhlaWdodDp3LG1heFdpZHRoOm19fSxqUnQ9ZnVuY3Rpb24oaSl7WjEoZm4saSksaS5mb250RmFtaWx5JiYoZm4uYWN0b3JGb250RmFtaWx5PWZuLm5vdGVGb250RmFtaWx5PWZuLm1lc3NhZ2VGb250RmFtaWx5PWkuZm9udEZhbWlseSksaS5mb250U2l6ZSYmKGZuLmFjdG9yRm9udFNpemU9Zm4ubm90ZUZvbnRTaXplPWZuLm1lc3NhZ2VGb250U2l6ZT1pLmZvbnRTaXplKSxpLmZvbnRXZWlnaHQmJihmbi5hY3RvckZvbnRXZWlnaHQ9Zm4ubm90ZUZvbnRXZWlnaHQ9Zm4ubWVzc2FnZUZvbnRXZWlnaHQ9aS5mb250V2VpZ2h0KX0salk9ZnVuY3Rpb24oaSl7cmV0dXJuIEZyLmFjdGl2YXRpb25zLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5hY3Rvcj09PWl9KX0sJFJ0PWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1hW2ldLHA9alkoaSksdz1wLnJlZHVjZShmdW5jdGlvbihiLEUpe3JldHVybiBLci5nZXRNaW4oYixFLnN0YXJ0eCl9LGYueCtmLndpZHRoLzItMSksbT1wLnJlZHVjZShmdW5jdGlvbihiLEUpe3JldHVybiBLci5nZXRNYXgoYixFLnN0b3B4KX0sZi54K2Yud2lkdGgvMisxKTtyZXR1cm5bdyxtXX07ZnVuY3Rpb24gazMoaSxhLGYscCx3KXtGci5idW1wVmVydGljYWxQb3MoZik7bGV0IG09cDtpZihhLmlkJiZhLm1lc3NhZ2UmJmlbYS5pZF0pe2NvbnN0IGI9aVthLmlkXS53aWR0aCxFPVNUKGZuKTthLm1lc3NhZ2U9JGEud3JhcExhYmVsKGBbJHthLm1lc3NhZ2V9XWAsYi0yKmZuLndyYXBQYWRkaW5nLEUpLGEud2lkdGg9YixhLndyYXA9ITA7Y29uc3QgXz0kYS5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhhLm1lc3NhZ2UsRSksQT1Lci5nZXRNYXgoXy5oZWlnaHQsZm4ubGFiZWxCb3hIZWlnaHQpO209cCtBLFV0LmRlYnVnKGAke0F9IC0gJHthLm1lc3NhZ2V9YCl9dyhhKSxGci5idW1wVmVydGljYWxQb3MobSl9ZnVuY3Rpb24gWFZlKGksYSxmLHAsdyxtLGIpe2Z1bmN0aW9uIEUoQSxJKXtBLng8d1tpLmZyb21dLng/KEZyLmluc2VydChhLnN0b3B4LUksYS5zdGFydHksYS5zdGFydHgsYS5zdG9weStBLmhlaWdodC8yK2ZuLm5vdGVNYXJnaW4pLGEuc3RvcHg9YS5zdG9weCtJKTooRnIuaW5zZXJ0KGEuc3RhcnR4LGEuc3RhcnR5LGEuc3RvcHgrSSxhLnN0b3B5K0EuaGVpZ2h0LzIrZm4ubm90ZU1hcmdpbiksYS5zdG9weD1hLnN0b3B4LUkpfWZ1bmN0aW9uIF8oQSxJKXtBLng8d1tpLnRvXS54PyhGci5pbnNlcnQoYS5zdGFydHgtSSxhLnN0YXJ0eSxhLnN0b3B4LGEuc3RvcHkrQS5oZWlnaHQvMitmbi5ub3RlTWFyZ2luKSxhLnN0YXJ0eD1hLnN0YXJ0eCtJKTooRnIuaW5zZXJ0KGEuc3RvcHgsYS5zdGFydHksYS5zdGFydHgrSSxhLnN0b3B5K0EuaGVpZ2h0LzIrZm4ubm90ZU1hcmdpbiksYS5zdGFydHg9YS5zdGFydHgtSSl9aWYobVtpLnRvXT09cCl7Y29uc3QgQT13W2kudG9dLEk9QS50eXBlPT0iYWN0b3IiP19ULzIrMzpBLndpZHRoLzIrMztFKEEsSSksQS5zdGFydHk9Zi1BLmhlaWdodC8yLEZyLmJ1bXBWZXJ0aWNhbFBvcyhBLmhlaWdodC8yKX1lbHNlIGlmKGJbaS5mcm9tXT09cCl7Y29uc3QgQT13W2kuZnJvbV07aWYoZm4ubWlycm9yQWN0b3JzKXtjb25zdCBJPUEudHlwZT09ImFjdG9yIj9fVC8yOkEud2lkdGgvMjtfKEEsSSl9QS5zdG9weT1mLUEuaGVpZ2h0LzIsRnIuYnVtcFZlcnRpY2FsUG9zKEEuaGVpZ2h0LzIpfWVsc2UgaWYoYltpLnRvXT09cCl7Y29uc3QgQT13W2kudG9dO2lmKGZuLm1pcnJvckFjdG9ycyl7Y29uc3QgST1BLnR5cGU9PSJhY3RvciI/X1QvMiszOkEud2lkdGgvMiszO0UoQSxJKX1BLnN0b3B5PWYtQS5oZWlnaHQvMixGci5idW1wVmVydGljYWxQb3MoQS5oZWlnaHQvMil9fWNvbnN0IFFWZT1mdW5jdGlvbihpLGEsZixwKXtjb25zdHtzZWN1cml0eUxldmVsOncsc2VxdWVuY2U6bX09T2UoKTtmbj1tO2xldCBiO3c9PT0ic2FuZGJveCImJihiPXlyKCIjaSIrYSkpO2NvbnN0IEU9eXIodz09PSJzYW5kYm94Ij9iLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHk6ImJvZHkiKSxfPXc9PT0ic2FuZGJveCI/Yi5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudDpkb2N1bWVudDtGci5pbml0KCksVXQuZGVidWcocC5kYik7Y29uc3QgQT13PT09InNhbmRib3giP0Uuc2VsZWN0KGBbaWQ9IiR7YX0iXWApOnlyKGBbaWQ9IiR7YX0iXWApLEk9cC5kYi5nZXRBY3RvcnMoKSxCPXAuZGIuZ2V0Q3JlYXRlZEFjdG9ycygpLE49cC5kYi5nZXREZXN0cm95ZWRBY3RvcnMoKSxSPXAuZGIuZ2V0Qm94ZXMoKTtsZXQgej1wLmRiLmdldEFjdG9yS2V5cygpO2NvbnN0IFc9cC5kYi5nZXRNZXNzYWdlcygpLGV0PXAuZGIuZ2V0RGlhZ3JhbVRpdGxlKCksc3Q9cC5kYi5oYXNBdExlYXN0T25lQm94KCksYXQ9cC5kYi5oYXNBdExlYXN0T25lQm94V2l0aFRpdGxlKCksYnQ9WlZlKEksVyxwKTtpZihmbi5oZWlnaHQ9dEdlKEksYnQsUiksbmYuaW5zZXJ0Q29tcHV0ZXJJY29uKEEpLG5mLmluc2VydERhdGFiYXNlSWNvbihBKSxuZi5pbnNlcnRDbG9ja0ljb24oQSksc3QmJihGci5idW1wVmVydGljYWxQb3MoZm4uYm94TWFyZ2luKSxhdCYmRnIuYnVtcFZlcnRpY2FsUG9zKFJbMF0udGV4dE1heEhlaWdodCkpLGZuLmhpZGVVbnVzZWRQYXJ0aWNpcGFudHM9PT0hMCl7Y29uc3QgRXQ9bmV3IFNldDtXLmZvckVhY2goWj0+e0V0LmFkZChaLmZyb20pLEV0LmFkZChaLnRvKX0pLHo9ei5maWx0ZXIoWj0+RXQuaGFzKFopKX1LVmUoQSxJLEIseiwwLFcsITEpO2NvbnN0IG10PXJHZShXLEksYnQscCk7bmYuaW5zZXJ0QXJyb3dIZWFkKEEpLG5mLmluc2VydEFycm93Q3Jvc3NIZWFkKEEpLG5mLmluc2VydEFycm93RmlsbGVkSGVhZChBKSxuZi5pbnNlcnRTZXF1ZW5jZU51bWJlcihBKTtmdW5jdGlvbiB5dChFdCxaKXtjb25zdCBDdD1Gci5lbmRBY3RpdmF0aW9uKEV0KTtDdC5zdGFydHkrMTg+WiYmKEN0LnN0YXJ0eT1aLTYsWis9MTIpLG5mLmRyYXdBY3RpdmF0aW9uKEEsQ3QsWixmbixqWShFdC5mcm9tLmFjdG9yKS5sZW5ndGgpLEZyLmluc2VydChDdC5zdGFydHgsWi0xMCxDdC5zdG9weCxaKX1sZXQgZnQ9MSx1dD0xO2NvbnN0IHZ0PVtdLFg9W107Vy5mb3JFYWNoKGZ1bmN0aW9uKEV0LFope2xldCBDdCx4dCxIdDtzd2l0Y2goRXQudHlwZSl7Y2FzZSBwLmRiLkxJTkVUWVBFLk5PVEU6RnIucmVzZXRWZXJ0aWNhbFBvcygpLHh0PUV0Lm5vdGVNb2RlbCxVVmUoQSx4dCk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkFDVElWRV9TVEFSVDpGci5uZXdBY3RpdmF0aW9uKEV0LEEsSSk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkFDVElWRV9FTkQ6eXQoRXQsRnIuZ2V0VmVydGljYWxQb3MoKSk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkxPT1BfU1RBUlQ6azMobXQsRXQsZm4uYm94TWFyZ2luLGZuLmJveE1hcmdpbitmbi5ib3hUZXh0TWFyZ2luLExlPT5Gci5uZXdMb29wKExlKSk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkxPT1BfRU5EOkN0PUZyLmVuZExvb3AoKSxuZi5kcmF3TG9vcChBLEN0LCJsb29wIixmbiksRnIuYnVtcFZlcnRpY2FsUG9zKEN0LnN0b3B5LUZyLmdldFZlcnRpY2FsUG9zKCkpLEZyLm1vZGVscy5hZGRMb29wKEN0KTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuUkVDVF9TVEFSVDprMyhtdCxFdCxmbi5ib3hNYXJnaW4sZm4uYm94TWFyZ2luLExlPT5Gci5uZXdMb29wKHZvaWQgMCxMZS5tZXNzYWdlKSk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLlJFQ1RfRU5EOkN0PUZyLmVuZExvb3AoKSxYLnB1c2goQ3QpLEZyLm1vZGVscy5hZGRMb29wKEN0KSxGci5idW1wVmVydGljYWxQb3MoQ3Quc3RvcHktRnIuZ2V0VmVydGljYWxQb3MoKSk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLk9QVF9TVEFSVDprMyhtdCxFdCxmbi5ib3hNYXJnaW4sZm4uYm94TWFyZ2luK2ZuLmJveFRleHRNYXJnaW4sTGU9PkZyLm5ld0xvb3AoTGUpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuT1BUX0VORDpDdD1Gci5lbmRMb29wKCksbmYuZHJhd0xvb3AoQSxDdCwib3B0IixmbiksRnIuYnVtcFZlcnRpY2FsUG9zKEN0LnN0b3B5LUZyLmdldFZlcnRpY2FsUG9zKCkpLEZyLm1vZGVscy5hZGRMb29wKEN0KTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuQUxUX1NUQVJUOmszKG10LEV0LGZuLmJveE1hcmdpbixmbi5ib3hNYXJnaW4rZm4uYm94VGV4dE1hcmdpbixMZT0+RnIubmV3TG9vcChMZSkpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5BTFRfRUxTRTprMyhtdCxFdCxmbi5ib3hNYXJnaW4rZm4uYm94VGV4dE1hcmdpbixmbi5ib3hNYXJnaW4sTGU9PkZyLmFkZFNlY3Rpb25Ub0xvb3AoTGUpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuQUxUX0VORDpDdD1Gci5lbmRMb29wKCksbmYuZHJhd0xvb3AoQSxDdCwiYWx0IixmbiksRnIuYnVtcFZlcnRpY2FsUG9zKEN0LnN0b3B5LUZyLmdldFZlcnRpY2FsUG9zKCkpLEZyLm1vZGVscy5hZGRMb29wKEN0KTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuUEFSX1NUQVJUOmNhc2UgcC5kYi5MSU5FVFlQRS5QQVJfT1ZFUl9TVEFSVDprMyhtdCxFdCxmbi5ib3hNYXJnaW4sZm4uYm94TWFyZ2luK2ZuLmJveFRleHRNYXJnaW4sTGU9PkZyLm5ld0xvb3AoTGUpKSxGci5zYXZlVmVydGljYWxQb3MoKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuUEFSX0FORDprMyhtdCxFdCxmbi5ib3hNYXJnaW4rZm4uYm94VGV4dE1hcmdpbixmbi5ib3hNYXJnaW4sTGU9PkZyLmFkZFNlY3Rpb25Ub0xvb3AoTGUpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuUEFSX0VORDpDdD1Gci5lbmRMb29wKCksbmYuZHJhd0xvb3AoQSxDdCwicGFyIixmbiksRnIuYnVtcFZlcnRpY2FsUG9zKEN0LnN0b3B5LUZyLmdldFZlcnRpY2FsUG9zKCkpLEZyLm1vZGVscy5hZGRMb29wKEN0KTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuQVVUT05VTUJFUjpmdD1FdC5tZXNzYWdlLnN0YXJ0fHxmdCx1dD1FdC5tZXNzYWdlLnN0ZXB8fHV0LEV0Lm1lc3NhZ2UudmlzaWJsZT9wLmRiLmVuYWJsZVNlcXVlbmNlTnVtYmVycygpOnAuZGIuZGlzYWJsZVNlcXVlbmNlTnVtYmVycygpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5DUklUSUNBTF9TVEFSVDprMyhtdCxFdCxmbi5ib3hNYXJnaW4sZm4uYm94TWFyZ2luK2ZuLmJveFRleHRNYXJnaW4sTGU9PkZyLm5ld0xvb3AoTGUpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuQ1JJVElDQUxfT1BUSU9OOmszKG10LEV0LGZuLmJveE1hcmdpbitmbi5ib3hUZXh0TWFyZ2luLGZuLmJveE1hcmdpbixMZT0+RnIuYWRkU2VjdGlvblRvTG9vcChMZSkpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5DUklUSUNBTF9FTkQ6Q3Q9RnIuZW5kTG9vcCgpLG5mLmRyYXdMb29wKEEsQ3QsImNyaXRpY2FsIixmbiksRnIuYnVtcFZlcnRpY2FsUG9zKEN0LnN0b3B5LUZyLmdldFZlcnRpY2FsUG9zKCkpLEZyLm1vZGVscy5hZGRMb29wKEN0KTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuQlJFQUtfU1RBUlQ6azMobXQsRXQsZm4uYm94TWFyZ2luLGZuLmJveE1hcmdpbitmbi5ib3hUZXh0TWFyZ2luLExlPT5Gci5uZXdMb29wKExlKSk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkJSRUFLX0VORDpDdD1Gci5lbmRMb29wKCksbmYuZHJhd0xvb3AoQSxDdCwiYnJlYWsiLGZuKSxGci5idW1wVmVydGljYWxQb3MoQ3Quc3RvcHktRnIuZ2V0VmVydGljYWxQb3MoKSksRnIubW9kZWxzLmFkZExvb3AoQ3QpO2JyZWFrO2RlZmF1bHQ6dHJ5e0h0PUV0Lm1zZ01vZGVsLEh0LnN0YXJ0eT1Gci5nZXRWZXJ0aWNhbFBvcygpLEh0LnNlcXVlbmNlSW5kZXg9ZnQsSHQuc2VxdWVuY2VWaXNpYmxlPXAuZGIuc2hvd1NlcXVlbmNlTnVtYmVycygpO2NvbnN0IExlPVdWZShBLEh0KTtYVmUoRXQsSHQsTGUsWixJLEIsTiksdnQucHVzaCh7bWVzc2FnZU1vZGVsOkh0LGxpbmVTdGFydFk6TGV9KSxGci5tb2RlbHMuYWRkTWVzc2FnZShIdCl9Y2F0Y2goTGUpe1V0LmVycm9yKCJlcnJvciB3aGlsZSBkcmF3aW5nIG1lc3NhZ2UiLExlKX19W3AuZGIuTElORVRZUEUuU09MSURfT1BFTixwLmRiLkxJTkVUWVBFLkRPVFRFRF9PUEVOLHAuZGIuTElORVRZUEUuU09MSUQscC5kYi5MSU5FVFlQRS5ET1RURUQscC5kYi5MSU5FVFlQRS5TT0xJRF9DUk9TUyxwLmRiLkxJTkVUWVBFLkRPVFRFRF9DUk9TUyxwLmRiLkxJTkVUWVBFLlNPTElEX1BPSU5ULHAuZGIuTElORVRZUEUuRE9UVEVEX1BPSU5UXS5pbmNsdWRlcyhFdC50eXBlKSYmKGZ0PWZ0K3V0KX0pLFV0LmRlYnVnKCJjcmVhdGVkQWN0b3JzIixCKSxVdC5kZWJ1ZygiZGVzdHJveWVkQWN0b3JzIixOKSxFZ3QoQSxJLHosITEpLHZ0LmZvckVhY2goRXQ9PllWZShBLEV0Lm1lc3NhZ2VNb2RlbCxFdC5saW5lU3RhcnRZLHApKSxmbi5taXJyb3JBY3RvcnMmJkVndChBLEkseiwhMCksWC5mb3JFYWNoKEV0PT5uZi5kcmF3QmFja2dyb3VuZFJlY3QoQSxFdCkpLEZSdChBLEkseixmbiksRnIubW9kZWxzLmJveGVzLmZvckVhY2goZnVuY3Rpb24oRXQpe0V0LmhlaWdodD1Gci5nZXRWZXJ0aWNhbFBvcygpLUV0LnksRnIuaW5zZXJ0KEV0LngsRXQueSxFdC54K0V0LndpZHRoLEV0LmhlaWdodCksRXQuc3RhcnR4PUV0LngsRXQuc3RhcnR5PUV0LnksRXQuc3RvcHg9RXQuc3RhcnR4K0V0LndpZHRoLEV0LnN0b3B5PUV0LnN0YXJ0eStFdC5oZWlnaHQsRXQuc3Ryb2tlPSJyZ2IoMCwwLDAsIDAuNSkiLG5mLmRyYXdCb3goQSxFdCxmbil9KSxzdCYmRnIuYnVtcFZlcnRpY2FsUG9zKGZuLmJveE1hcmdpbik7Y29uc3QgcHQ9UlJ0KEEsSSx6LF8pLHtib3VuZHM6VX09RnIuZ2V0Qm91bmRzKCk7bGV0IFR0PVUuc3RvcHktVS5zdGFydHk7VHQ8cHQubWF4SGVpZ2h0JiYoVHQ9cHQubWF4SGVpZ2h0KTtsZXQgbnQ9VHQrMipmbi5kaWFncmFtTWFyZ2luWTtmbi5taXJyb3JBY3RvcnMmJihudD1udC1mbi5ib3hNYXJnaW4rZm4uYm90dG9tTWFyZ2luQWRqKTtsZXQgSXQ9VS5zdG9weC1VLnN0YXJ0eDtJdDxwdC5tYXhXaWR0aCYmKEl0PXB0Lm1heFdpZHRoKTtjb25zdCBPdD1JdCsyKmZuLmRpYWdyYW1NYXJnaW5YO2V0JiZBLmFwcGVuZCgidGV4dCIpLnRleHQoZXQpLmF0dHIoIngiLChVLnN0b3B4LVUuc3RhcnR4KS8yLTIqZm4uZGlhZ3JhbU1hcmdpblgpLmF0dHIoInkiLC0yNSksazAoQSxudCxPdCxmbi51c2VNYXhXaWR0aCk7Y29uc3QgQnQ9ZXQ/NDA6MDtBLmF0dHIoInZpZXdCb3giLFUuc3RhcnR4LWZuLmRpYWdyYW1NYXJnaW5YKyIgLSIrKGZuLmRpYWdyYW1NYXJnaW5ZK0J0KSsiICIrT3QrIiAiKyhudCtCdCkpLFV0LmRlYnVnKCJtb2RlbHM6IixGci5tb2RlbHMpfTtmdW5jdGlvbiBaVmUoaSxhLGYpe2NvbnN0IHA9e307cmV0dXJuIGEuZm9yRWFjaChmdW5jdGlvbih3KXtpZihpW3cudG9dJiZpW3cuZnJvbV0pe2NvbnN0IG09aVt3LnRvXTtpZih3LnBsYWNlbWVudD09PWYuZGIuUExBQ0VNRU5ULkxFRlRPRiYmIW0ucHJldkFjdG9yfHx3LnBsYWNlbWVudD09PWYuZGIuUExBQ0VNRU5ULlJJR0hUT0YmJiFtLm5leHRBY3RvcilyZXR1cm47Y29uc3QgYj13LnBsYWNlbWVudCE9PXZvaWQgMCxFPSFiLF89Yj9iTChmbik6U1QoZm4pLEE9dy53cmFwPyRhLndyYXBMYWJlbCh3Lm1lc3NhZ2UsZm4ud2lkdGgtMipmbi53cmFwUGFkZGluZyxfKTp3Lm1lc3NhZ2UsQj0kYS5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhBLF8pLndpZHRoKzIqZm4ud3JhcFBhZGRpbmc7RSYmdy5mcm9tPT09bS5uZXh0QWN0b3I/cFt3LnRvXT1Lci5nZXRNYXgocFt3LnRvXXx8MCxCKTpFJiZ3LmZyb209PT1tLnByZXZBY3Rvcj9wW3cuZnJvbV09S3IuZ2V0TWF4KHBbdy5mcm9tXXx8MCxCKTpFJiZ3LmZyb209PT13LnRvPyhwW3cuZnJvbV09S3IuZ2V0TWF4KHBbdy5mcm9tXXx8MCxCLzIpLHBbdy50b109S3IuZ2V0TWF4KHBbdy50b118fDAsQi8yKSk6dy5wbGFjZW1lbnQ9PT1mLmRiLlBMQUNFTUVOVC5SSUdIVE9GP3Bbdy5mcm9tXT1Lci5nZXRNYXgocFt3LmZyb21dfHwwLEIpOncucGxhY2VtZW50PT09Zi5kYi5QTEFDRU1FTlQuTEVGVE9GP3BbbS5wcmV2QWN0b3JdPUtyLmdldE1heChwW20ucHJldkFjdG9yXXx8MCxCKTp3LnBsYWNlbWVudD09PWYuZGIuUExBQ0VNRU5ULk9WRVImJihtLnByZXZBY3RvciYmKHBbbS5wcmV2QWN0b3JdPUtyLmdldE1heChwW20ucHJldkFjdG9yXXx8MCxCLzIpKSxtLm5leHRBY3RvciYmKHBbdy5mcm9tXT1Lci5nZXRNYXgocFt3LmZyb21dfHwwLEIvMikpKX19KSxVdC5kZWJ1ZygibWF4TWVzc2FnZVdpZHRoUGVyQWN0b3I6IixwKSxwfWNvbnN0IEpWZT1mdW5jdGlvbihpKXtsZXQgYT0wO2NvbnN0IGY9a2d0KGZuKTtmb3IoY29uc3QgcCBpbiBpLmxpbmtzKXtjb25zdCBtPSRhLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKHAsZikud2lkdGgrMipmbi53cmFwUGFkZGluZysyKmZuLmJveE1hcmdpbjthPG0mJihhPW0pfXJldHVybiBhfTtmdW5jdGlvbiB0R2UoaSxhLGYpe2xldCBwPTA7T2JqZWN0LmtleXMoaSkuZm9yRWFjaChtPT57Y29uc3QgYj1pW21dO2Iud3JhcCYmKGIuZGVzY3JpcHRpb249JGEud3JhcExhYmVsKGIuZGVzY3JpcHRpb24sZm4ud2lkdGgtMipmbi53cmFwUGFkZGluZyxrZ3QoZm4pKSk7Y29uc3QgRT0kYS5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhiLmRlc2NyaXB0aW9uLGtndChmbikpO2Iud2lkdGg9Yi53cmFwP2ZuLndpZHRoOktyLmdldE1heChmbi53aWR0aCxFLndpZHRoKzIqZm4ud3JhcFBhZGRpbmcpLGIuaGVpZ2h0PWIud3JhcD9Lci5nZXRNYXgoRS5oZWlnaHQsZm4uaGVpZ2h0KTpmbi5oZWlnaHQscD1Lci5nZXRNYXgocCxiLmhlaWdodCl9KTtmb3IoY29uc3QgbSBpbiBhKXtjb25zdCBiPWlbbV07aWYoIWIpY29udGludWU7Y29uc3QgRT1pW2IubmV4dEFjdG9yXTtpZighRSl7Y29uc3QgQj1hW21dK2ZuLmFjdG9yTWFyZ2luLWIud2lkdGgvMjtiLm1hcmdpbj1Lci5nZXRNYXgoQixmbi5hY3Rvck1hcmdpbik7Y29udGludWV9Y29uc3QgQT1hW21dK2ZuLmFjdG9yTWFyZ2luLWIud2lkdGgvMi1FLndpZHRoLzI7Yi5tYXJnaW49S3IuZ2V0TWF4KEEsZm4uYWN0b3JNYXJnaW4pfWxldCB3PTA7cmV0dXJuIGYuZm9yRWFjaChtPT57Y29uc3QgYj1TVChmbik7bGV0IEU9bS5hY3RvcktleXMucmVkdWNlKChJLEIpPT5JKz1pW0JdLndpZHRoKyhpW0JdLm1hcmdpbnx8MCksMCk7RS09Mipmbi5ib3hUZXh0TWFyZ2luLG0ud3JhcCYmKG0ubmFtZT0kYS53cmFwTGFiZWwobS5uYW1lLEUtMipmbi53cmFwUGFkZGluZyxiKSk7Y29uc3QgXz0kYS5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhtLm5hbWUsYik7dz1Lci5nZXRNYXgoXy5oZWlnaHQsdyk7Y29uc3QgQT1Lci5nZXRNYXgoRSxfLndpZHRoKzIqZm4ud3JhcFBhZGRpbmcpO2lmKG0ubWFyZ2luPWZuLmJveFRleHRNYXJnaW4sRTxBKXtjb25zdCBJPShBLUUpLzI7bS5tYXJnaW4rPUl9fSksZi5mb3JFYWNoKG09Pm0udGV4dE1heEhlaWdodD13KSxLci5nZXRNYXgocCxmbi5oZWlnaHQpfWNvbnN0IGVHZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1hW2kuZnJvbV0ueCx3PWFbaS50b10ueCxtPWkud3JhcCYmaS5tZXNzYWdlO2xldCBiPSRhLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKG0/JGEud3JhcExhYmVsKGkubWVzc2FnZSxmbi53aWR0aCxiTChmbikpOmkubWVzc2FnZSxiTChmbikpO2NvbnN0IEU9e3dpZHRoOm0/Zm4ud2lkdGg6S3IuZ2V0TWF4KGZuLndpZHRoLGIud2lkdGgrMipmbi5ub3RlTWFyZ2luKSxoZWlnaHQ6MCxzdGFydHg6YVtpLmZyb21dLngsc3RvcHg6MCxzdGFydHk6MCxzdG9weTowLG1lc3NhZ2U6aS5tZXNzYWdlfTtyZXR1cm4gaS5wbGFjZW1lbnQ9PT1mLmRiLlBMQUNFTUVOVC5SSUdIVE9GPyhFLndpZHRoPW0/S3IuZ2V0TWF4KGZuLndpZHRoLGIud2lkdGgpOktyLmdldE1heChhW2kuZnJvbV0ud2lkdGgvMithW2kudG9dLndpZHRoLzIsYi53aWR0aCsyKmZuLm5vdGVNYXJnaW4pLEUuc3RhcnR4PXArKGFbaS5mcm9tXS53aWR0aCtmbi5hY3Rvck1hcmdpbikvMik6aS5wbGFjZW1lbnQ9PT1mLmRiLlBMQUNFTUVOVC5MRUZUT0Y/KEUud2lkdGg9bT9Lci5nZXRNYXgoZm4ud2lkdGgsYi53aWR0aCsyKmZuLm5vdGVNYXJnaW4pOktyLmdldE1heChhW2kuZnJvbV0ud2lkdGgvMithW2kudG9dLndpZHRoLzIsYi53aWR0aCsyKmZuLm5vdGVNYXJnaW4pLEUuc3RhcnR4PXAtRS53aWR0aCsoYVtpLmZyb21dLndpZHRoLWZuLmFjdG9yTWFyZ2luKS8yKTppLnRvPT09aS5mcm9tPyhiPSRhLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKG0/JGEud3JhcExhYmVsKGkubWVzc2FnZSxLci5nZXRNYXgoZm4ud2lkdGgsYVtpLmZyb21dLndpZHRoKSxiTChmbikpOmkubWVzc2FnZSxiTChmbikpLEUud2lkdGg9bT9Lci5nZXRNYXgoZm4ud2lkdGgsYVtpLmZyb21dLndpZHRoKTpLci5nZXRNYXgoYVtpLmZyb21dLndpZHRoLGZuLndpZHRoLGIud2lkdGgrMipmbi5ub3RlTWFyZ2luKSxFLnN0YXJ0eD1wKyhhW2kuZnJvbV0ud2lkdGgtRS53aWR0aCkvMik6KEUud2lkdGg9TWF0aC5hYnMocCthW2kuZnJvbV0ud2lkdGgvMi0odythW2kudG9dLndpZHRoLzIpKStmbi5hY3Rvck1hcmdpbixFLnN0YXJ0eD1wPHc/cCthW2kuZnJvbV0ud2lkdGgvMi1mbi5hY3Rvck1hcmdpbi8yOncrYVtpLnRvXS53aWR0aC8yLWZuLmFjdG9yTWFyZ2luLzIpLG0mJihFLm1lc3NhZ2U9JGEud3JhcExhYmVsKGkubWVzc2FnZSxFLndpZHRoLTIqZm4ud3JhcFBhZGRpbmcsYkwoZm4pKSksVXQuZGVidWcoYE5NOlske0Uuc3RhcnR4fSwke0Uuc3RvcHh9LCR7RS5zdGFydHl9LCR7RS5zdG9weX06JHtFLndpZHRofSwke0UuaGVpZ2h0fT0ke2kubWVzc2FnZX1dYCksRX0sbkdlPWZ1bmN0aW9uKGksYSxmKXtpZighW2YuZGIuTElORVRZUEUuU09MSURfT1BFTixmLmRiLkxJTkVUWVBFLkRPVFRFRF9PUEVOLGYuZGIuTElORVRZUEUuU09MSUQsZi5kYi5MSU5FVFlQRS5ET1RURUQsZi5kYi5MSU5FVFlQRS5TT0xJRF9DUk9TUyxmLmRiLkxJTkVUWVBFLkRPVFRFRF9DUk9TUyxmLmRiLkxJTkVUWVBFLlNPTElEX1BPSU5ULGYuZGIuTElORVRZUEUuRE9UVEVEX1BPSU5UXS5pbmNsdWRlcyhpLnR5cGUpKXJldHVybnt9O2NvbnN0W3Asd109JFJ0KGkuZnJvbSxhKSxbbSxiXT0kUnQoaS50byxhKSxFPXA8PW0sXz1FP3c6cDtsZXQgQT1FP206Yjtjb25zdCBJPU1hdGguYWJzKG0tYik+MixCPVc9PkU/LVc6VztpLmZyb209PT1pLnRvP0E9XzooaS5hY3RpdmF0ZSYmIUkmJihBKz1CKGZuLmFjdGl2YXRpb25XaWR0aC8yLTEpKSxbZi5kYi5MSU5FVFlQRS5TT0xJRF9PUEVOLGYuZGIuTElORVRZUEUuRE9UVEVEX09QRU5dLmluY2x1ZGVzKGkudHlwZSl8fChBKz1CKDMpKSk7Y29uc3QgTj1bcCx3LG0sYl0sUj1NYXRoLmFicyhfLUEpO2kud3JhcCYmaS5tZXNzYWdlJiYoaS5tZXNzYWdlPSRhLndyYXBMYWJlbChpLm1lc3NhZ2UsS3IuZ2V0TWF4KFIrMipmbi53cmFwUGFkZGluZyxmbi53aWR0aCksU1QoZm4pKSk7Y29uc3Qgej0kYS5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhpLm1lc3NhZ2UsU1QoZm4pKTtyZXR1cm57d2lkdGg6S3IuZ2V0TWF4KGkud3JhcD8wOnoud2lkdGgrMipmbi53cmFwUGFkZGluZyxSKzIqZm4ud3JhcFBhZGRpbmcsZm4ud2lkdGgpLGhlaWdodDowLHN0YXJ0eDpfLHN0b3B4OkEsc3RhcnR5OjAsc3RvcHk6MCxtZXNzYWdlOmkubWVzc2FnZSx0eXBlOmkudHlwZSx3cmFwOmkud3JhcCxmcm9tQm91bmRzOk1hdGgubWluLmFwcGx5KG51bGwsTiksdG9Cb3VuZHM6TWF0aC5tYXguYXBwbHkobnVsbCxOKX19LHJHZT1mdW5jdGlvbihpLGEsZixwKXtjb25zdCB3PXt9LG09W107bGV0IGIsRSxfO3JldHVybiBpLmZvckVhY2goZnVuY3Rpb24oQSl7c3dpdGNoKEEuaWQ9JGEucmFuZG9tKHtsZW5ndGg6MTB9KSxBLnR5cGUpe2Nhc2UgcC5kYi5MSU5FVFlQRS5MT09QX1NUQVJUOmNhc2UgcC5kYi5MSU5FVFlQRS5BTFRfU1RBUlQ6Y2FzZSBwLmRiLkxJTkVUWVBFLk9QVF9TVEFSVDpjYXNlIHAuZGIuTElORVRZUEUuUEFSX1NUQVJUOmNhc2UgcC5kYi5MSU5FVFlQRS5QQVJfT1ZFUl9TVEFSVDpjYXNlIHAuZGIuTElORVRZUEUuQ1JJVElDQUxfU1RBUlQ6Y2FzZSBwLmRiLkxJTkVUWVBFLkJSRUFLX1NUQVJUOm0ucHVzaCh7aWQ6QS5pZCxtc2c6QS5tZXNzYWdlLGZyb206TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsdG86TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsd2lkdGg6MH0pO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5BTFRfRUxTRTpjYXNlIHAuZGIuTElORVRZUEUuUEFSX0FORDpjYXNlIHAuZGIuTElORVRZUEUuQ1JJVElDQUxfT1BUSU9OOkEubWVzc2FnZSYmKGI9bS5wb3AoKSx3W2IuaWRdPWIsd1tBLmlkXT1iLG0ucHVzaChiKSk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkxPT1BfRU5EOmNhc2UgcC5kYi5MSU5FVFlQRS5BTFRfRU5EOmNhc2UgcC5kYi5MSU5FVFlQRS5PUFRfRU5EOmNhc2UgcC5kYi5MSU5FVFlQRS5QQVJfRU5EOmNhc2UgcC5kYi5MSU5FVFlQRS5DUklUSUNBTF9FTkQ6Y2FzZSBwLmRiLkxJTkVUWVBFLkJSRUFLX0VORDpiPW0ucG9wKCksd1tiLmlkXT1iO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQ6e2NvbnN0IEI9YVtBLmZyb20/QS5mcm9tLmFjdG9yOkEudG8uYWN0b3JdLE49alkoQS5mcm9tP0EuZnJvbS5hY3RvcjpBLnRvLmFjdG9yKS5sZW5ndGgsUj1CLngrQi53aWR0aC8yKyhOLTEpKmZuLmFjdGl2YXRpb25XaWR0aC8yLHo9e3N0YXJ0eDpSLHN0b3B4OlIrZm4uYWN0aXZhdGlvbldpZHRoLGFjdG9yOkEuZnJvbS5hY3RvcixlbmFibGVkOiEwfTtGci5hY3RpdmF0aW9ucy5wdXNoKHopfWJyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5BQ1RJVkVfRU5EOntjb25zdCBCPUZyLmFjdGl2YXRpb25zLm1hcChOPT5OLmFjdG9yKS5sYXN0SW5kZXhPZihBLmZyb20uYWN0b3IpO2RlbGV0ZSBGci5hY3RpdmF0aW9ucy5zcGxpY2UoQiwxKVswXX1icmVha31BLnBsYWNlbWVudCE9PXZvaWQgMD8oRT1lR2UoQSxhLHApLEEubm90ZU1vZGVsPUUsbS5mb3JFYWNoKEI9PntiPUIsYi5mcm9tPUtyLmdldE1pbihiLmZyb20sRS5zdGFydHgpLGIudG89S3IuZ2V0TWF4KGIudG8sRS5zdGFydHgrRS53aWR0aCksYi53aWR0aD1Lci5nZXRNYXgoYi53aWR0aCxNYXRoLmFicyhiLmZyb20tYi50bykpLWZuLmxhYmVsQm94V2lkdGh9KSk6KF89bkdlKEEsYSxwKSxBLm1zZ01vZGVsPV8sXy5zdGFydHgmJl8uc3RvcHgmJm0ubGVuZ3RoPjAmJm0uZm9yRWFjaChCPT57aWYoYj1CLF8uc3RhcnR4PT09Xy5zdG9weCl7Y29uc3QgTj1hW0EuZnJvbV0sUj1hW0EudG9dO2IuZnJvbT1Lci5nZXRNaW4oTi54LV8ud2lkdGgvMixOLngtTi53aWR0aC8yLGIuZnJvbSksYi50bz1Lci5nZXRNYXgoUi54K18ud2lkdGgvMixSLngrTi53aWR0aC8yLGIudG8pLGIud2lkdGg9S3IuZ2V0TWF4KGIud2lkdGgsTWF0aC5hYnMoYi50by1iLmZyb20pKS1mbi5sYWJlbEJveFdpZHRofWVsc2UgYi5mcm9tPUtyLmdldE1pbihfLnN0YXJ0eCxiLmZyb20pLGIudG89S3IuZ2V0TWF4KF8uc3RvcHgsYi50byksYi53aWR0aD1Lci5nZXRNYXgoYi53aWR0aCxfLndpZHRoKS1mbi5sYWJlbEJveFdpZHRofSkpfSksRnIuYWN0aXZhdGlvbnM9W10sVXQuZGVidWcoIkxvb3AgdHlwZSB3aWR0aHM6Iix3KSx3fSxpR2U9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjp0VmUsZGI6SVJ0LHJlbmRlcmVyOntib3VuZHM6RnIsZHJhd0FjdG9yczpFZ3QsZHJhd0FjdG9yc1BvcHVwOlJSdCxzZXRDb25mOmpSdCxkcmF3OlFWZX0sc3R5bGVzOlRWZSxpbml0Oih7d3JhcDppfSk9PntJUnQuc2V0V3JhcChpKX19fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBUZ3Q9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihrZSx6dCxyZSxzZSl7Zm9yKHJlPXJlfHx7fSxzZT1rZS5sZW5ndGg7c2UtLTtyZVtrZVtzZV1dPXp0KTtyZXR1cm4gcmV9LGE9WzEsMTZdLGY9WzEsMTddLHA9WzEsMThdLHc9WzEsMzddLG09WzEsMzhdLGI9WzEsMjRdLEU9WzEsMjJdLF89WzEsMjNdLEE9WzEsMjldLEk9WzEsMzBdLEI9WzEsMzFdLE49WzEsMzJdLFI9WzEsMzNdLHo9WzEsMzRdLFc9WzEsMjVdLGV0PVsxLDI2XSxzdD1bMSwyN10sYXQ9WzEsMjhdLGJ0PVsxLDQyXSxtdD1bMSwzOV0seXQ9WzEsNDBdLGZ0PVsxLDQxXSx1dD1bMSw0M10sdnQ9WzEsOV0sWD1bMSw4LDldLHB0PVsxLDU0XSxVPVsxLDU1XSxUdD1bMSw1Nl0sbnQ9WzEsNTddLEl0PVsxLDU4XSxPdD1bMSw1OV0sQnQ9WzEsNjBdLEV0PVsxLDgsOSwzOF0sWj1bMSw3MV0sQ3Q9WzEsOCw5LDEyLDEzLDIxLDM2LDM4LDQxLDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY5LDcxXSx4dD1bMSw4LDksMTIsMTMsMTksMjEsMzYsMzgsNDEsNDUsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjksNzEsODQsODYsODcsODgsODldLEh0PVsxMyw4NCw4Niw4Nyw4OCw4OV0sTGU9WzEzLDYzLDY0LDg0LDg2LDg3LDg4LDg5XSxGdD1bMTMsNTgsNTksNjAsNjEsNjIsODQsODYsODcsODgsODldLGduPVsxLDkwXSxTZT1bMSw4LDksMzYsMzgsNDFdLG1lPVsxLDgsOSwyMV0sVmU9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxzdGF0ZW1lbnRzOjUsZ3JhcGhDb25maWc6NixDTEFTU19ESUFHUkFNOjcsTkVXTElORTo4LEVPRjo5LHN0YXRlbWVudDoxMCxjbGFzc0xhYmVsOjExLFNRUzoxMixTVFI6MTMsU1FFOjE0LG5hbWVzcGFjZU5hbWU6MTUsYWxwaGFOdW1Ub2tlbjoxNixjbGFzc05hbWU6MTcsY2xhc3NMaXRlcmFsTmFtZToxOCxHRU5FUklDVFlQRToxOSxyZWxhdGlvblN0YXRlbWVudDoyMCxMQUJFTDoyMSxuYW1lc3BhY2VTdGF0ZW1lbnQ6MjIsY2xhc3NTdGF0ZW1lbnQ6MjMsbWVtYmVyU3RhdGVtZW50OjI0LGFubm90YXRpb25TdGF0ZW1lbnQ6MjUsY2xpY2tTdGF0ZW1lbnQ6MjYsY3NzQ2xhc3NTdGF0ZW1lbnQ6Mjcsbm90ZVN0YXRlbWVudDoyOCxkaXJlY3Rpb246MjksYWNjX3RpdGxlOjMwLGFjY190aXRsZV92YWx1ZTozMSxhY2NfZGVzY3I6MzIsYWNjX2Rlc2NyX3ZhbHVlOjMzLGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MzQsbmFtZXNwYWNlSWRlbnRpZmllcjozNSxTVFJVQ1RfU1RBUlQ6MzYsY2xhc3NTdGF0ZW1lbnRzOjM3LFNUUlVDVF9TVE9QOjM4LE5BTUVTUEFDRTozOSxjbGFzc0lkZW50aWZpZXI6NDAsU1RZTEVfU0VQQVJBVE9SOjQxLG1lbWJlcnM6NDIsQ0xBU1M6NDMsQU5OT1RBVElPTl9TVEFSVDo0NCxBTk5PVEFUSU9OX0VORDo0NSxNRU1CRVI6NDYsU0VQQVJBVE9SOjQ3LHJlbGF0aW9uOjQ4LE5PVEVfRk9SOjQ5LG5vdGVUZXh0OjUwLE5PVEU6NTEsZGlyZWN0aW9uX3RiOjUyLGRpcmVjdGlvbl9idDo1MyxkaXJlY3Rpb25fcmw6NTQsZGlyZWN0aW9uX2xyOjU1LHJlbGF0aW9uVHlwZTo1NixsaW5lVHlwZTo1NyxBR0dSRUdBVElPTjo1OCxFWFRFTlNJT046NTksQ09NUE9TSVRJT046NjAsREVQRU5ERU5DWTo2MSxMT0xMSVBPUDo2MixMSU5FOjYzLERPVFRFRF9MSU5FOjY0LENBTExCQUNLOjY1LExJTks6NjYsTElOS19UQVJHRVQ6NjcsQ0xJQ0s6NjgsQ0FMTEJBQ0tfTkFNRTo2OSxDQUxMQkFDS19BUkdTOjcwLEhSRUY6NzEsQ1NTQ0xBU1M6NzIsY29tbWVudFRva2VuOjczLHRleHRUb2tlbjo3NCxncmFwaENvZGVUb2tlbnM6NzUsdGV4dE5vVGFnc1Rva2VuOjc2LFRBR1NUQVJUOjc3LFRBR0VORDo3OCwiPT0iOjc5LCItLSI6ODAsUENUOjgxLERFRkFVTFQ6ODIsU1BBQ0U6ODMsTUlOVVM6ODQsa2V5d29yZHM6ODUsVU5JQ09ERV9URVhUOjg2LE5VTTo4NyxBTFBIQTo4OCxCUVVPVEVfU1RSOjg5LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw3OiJDTEFTU19ESUFHUkFNIiw4OiJORVdMSU5FIiw5OiJFT0YiLDEyOiJTUVMiLDEzOiJTVFIiLDE0OiJTUUUiLDE5OiJHRU5FUklDVFlQRSIsMjE6IkxBQkVMIiwzMDoiYWNjX3RpdGxlIiwzMToiYWNjX3RpdGxlX3ZhbHVlIiwzMjoiYWNjX2Rlc2NyIiwzMzoiYWNjX2Rlc2NyX3ZhbHVlIiwzNDoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzY6IlNUUlVDVF9TVEFSVCIsMzg6IlNUUlVDVF9TVE9QIiwzOToiTkFNRVNQQUNFIiw0MToiU1RZTEVfU0VQQVJBVE9SIiw0MzoiQ0xBU1MiLDQ0OiJBTk5PVEFUSU9OX1NUQVJUIiw0NToiQU5OT1RBVElPTl9FTkQiLDQ2OiJNRU1CRVIiLDQ3OiJTRVBBUkFUT1IiLDQ5OiJOT1RFX0ZPUiIsNTE6Ik5PVEUiLDUyOiJkaXJlY3Rpb25fdGIiLDUzOiJkaXJlY3Rpb25fYnQiLDU0OiJkaXJlY3Rpb25fcmwiLDU1OiJkaXJlY3Rpb25fbHIiLDU4OiJBR0dSRUdBVElPTiIsNTk6IkVYVEVOU0lPTiIsNjA6IkNPTVBPU0lUSU9OIiw2MToiREVQRU5ERU5DWSIsNjI6IkxPTExJUE9QIiw2MzoiTElORSIsNjQ6IkRPVFRFRF9MSU5FIiw2NToiQ0FMTEJBQ0siLDY2OiJMSU5LIiw2NzoiTElOS19UQVJHRVQiLDY4OiJDTElDSyIsNjk6IkNBTExCQUNLX05BTUUiLDcwOiJDQUxMQkFDS19BUkdTIiw3MToiSFJFRiIsNzI6IkNTU0NMQVNTIiw3NToiZ3JhcGhDb2RlVG9rZW5zIiw3NzoiVEFHU1RBUlQiLDc4OiJUQUdFTkQiLDc5OiI9PSIsODA6Ii0tIiw4MToiUENUIiw4MjoiREVGQVVMVCIsODM6IlNQQUNFIiw4NDoiTUlOVVMiLDg1OiJrZXl3b3JkcyIsODY6IlVOSUNPREVfVEVYVCIsODc6Ik5VTSIsODg6IkFMUEhBIiw4OToiQlFVT1RFX1NUUiJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywxXSxbNCwxXSxbNiw0XSxbNSwxXSxbNSwyXSxbNSwzXSxbMTEsM10sWzE1LDFdLFsxNSwyXSxbMTcsMV0sWzE3LDFdLFsxNywyXSxbMTcsMl0sWzE3LDJdLFsxMCwxXSxbMTAsMl0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMl0sWzEwLDJdLFsxMCwxXSxbMjIsNF0sWzIyLDVdLFszNSwyXSxbMzcsMV0sWzM3LDJdLFszNywzXSxbMjMsMV0sWzIzLDNdLFsyMyw0XSxbMjMsNl0sWzQwLDJdLFs0MCwzXSxbMjUsNF0sWzQyLDFdLFs0MiwyXSxbMjQsMV0sWzI0LDJdLFsyNCwxXSxbMjQsMV0sWzIwLDNdLFsyMCw0XSxbMjAsNF0sWzIwLDVdLFsyOCwzXSxbMjgsMl0sWzI5LDFdLFsyOSwxXSxbMjksMV0sWzI5LDFdLFs0OCwzXSxbNDgsMl0sWzQ4LDJdLFs0OCwxXSxbNTYsMV0sWzU2LDFdLFs1NiwxXSxbNTYsMV0sWzU2LDFdLFs1NywxXSxbNTcsMV0sWzI2LDNdLFsyNiw0XSxbMjYsM10sWzI2LDRdLFsyNiw0XSxbMjYsNV0sWzI2LDNdLFsyNiw0XSxbMjYsNF0sWzI2LDVdLFsyNiw0XSxbMjYsNV0sWzI2LDVdLFsyNiw2XSxbMjcsM10sWzczLDFdLFs3MywxXSxbNzQsMV0sWzc0LDFdLFs3NCwxXSxbNzQsMV0sWzc0LDFdLFs3NCwxXSxbNzQsMV0sWzc2LDFdLFs3NiwxXSxbNzYsMV0sWzc2LDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTgsMV0sWzUwLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHp0LHJlLHNlLFBlLHRlLE1lLGRlKXt2YXIgb249TWUubGVuZ3RoLTE7c3dpdGNoKHRlKXtjYXNlIDg6dGhpcy4kPU1lW29uLTFdO2JyZWFrO2Nhc2UgOTpjYXNlIDExOmNhc2UgMTI6dGhpcy4kPU1lW29uXTticmVhaztjYXNlIDEwOmNhc2UgMTM6dGhpcy4kPU1lW29uLTFdK01lW29uXTticmVhaztjYXNlIDE0OmNhc2UgMTU6dGhpcy4kPU1lW29uLTFdKyJ+IitNZVtvbl0rIn4iO2JyZWFrO2Nhc2UgMTY6UGUuYWRkUmVsYXRpb24oTWVbb25dKTticmVhaztjYXNlIDE3Ok1lW29uLTFdLnRpdGxlPVBlLmNsZWFudXBMYWJlbChNZVtvbl0pLFBlLmFkZFJlbGF0aW9uKE1lW29uLTFdKTticmVhaztjYXNlIDI2OnRoaXMuJD1NZVtvbl0udHJpbSgpLFBlLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAyNzpjYXNlIDI4OnRoaXMuJD1NZVtvbl0udHJpbSgpLFBlLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAyOTpQZS5hZGRDbGFzc2VzVG9OYW1lc3BhY2UoTWVbb24tM10sTWVbb24tMV0pO2JyZWFrO2Nhc2UgMzA6UGUuYWRkQ2xhc3Nlc1RvTmFtZXNwYWNlKE1lW29uLTRdLE1lW29uLTFdKTticmVhaztjYXNlIDMxOnRoaXMuJD1NZVtvbl0sUGUuYWRkTmFtZXNwYWNlKE1lW29uXSk7YnJlYWs7Y2FzZSAzMjp0aGlzLiQ9W01lW29uXV07YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9W01lW29uLTFdXTticmVhaztjYXNlIDM0Ok1lW29uXS51bnNoaWZ0KE1lW29uLTJdKSx0aGlzLiQ9TWVbb25dO2JyZWFrO2Nhc2UgMzY6UGUuc2V0Q3NzQ2xhc3MoTWVbb24tMl0sTWVbb25dKTticmVhaztjYXNlIDM3OlBlLmFkZE1lbWJlcnMoTWVbb24tM10sTWVbb24tMV0pO2JyZWFrO2Nhc2UgMzg6UGUuc2V0Q3NzQ2xhc3MoTWVbb24tNV0sTWVbb24tM10pLFBlLmFkZE1lbWJlcnMoTWVbb24tNV0sTWVbb24tMV0pO2JyZWFrO2Nhc2UgMzk6dGhpcy4kPU1lW29uXSxQZS5hZGRDbGFzcyhNZVtvbl0pO2JyZWFrO2Nhc2UgNDA6dGhpcy4kPU1lW29uLTFdLFBlLmFkZENsYXNzKE1lW29uLTFdKSxQZS5zZXRDbGFzc0xhYmVsKE1lW29uLTFdLE1lW29uXSk7YnJlYWs7Y2FzZSA0MTpQZS5hZGRBbm5vdGF0aW9uKE1lW29uXSxNZVtvbi0yXSk7YnJlYWs7Y2FzZSA0Mjp0aGlzLiQ9W01lW29uXV07YnJlYWs7Y2FzZSA0MzpNZVtvbl0ucHVzaChNZVtvbi0xXSksdGhpcy4kPU1lW29uXTticmVhaztjYXNlIDQ0OmJyZWFrO2Nhc2UgNDU6UGUuYWRkTWVtYmVyKE1lW29uLTFdLFBlLmNsZWFudXBMYWJlbChNZVtvbl0pKTticmVhaztjYXNlIDQ2OmJyZWFrO2Nhc2UgNDc6YnJlYWs7Y2FzZSA0ODp0aGlzLiQ9e2lkMTpNZVtvbi0yXSxpZDI6TWVbb25dLHJlbGF0aW9uOk1lW29uLTFdLHJlbGF0aW9uVGl0bGUxOiJub25lIixyZWxhdGlvblRpdGxlMjoibm9uZSJ9O2JyZWFrO2Nhc2UgNDk6dGhpcy4kPXtpZDE6TWVbb24tM10saWQyOk1lW29uXSxyZWxhdGlvbjpNZVtvbi0xXSxyZWxhdGlvblRpdGxlMTpNZVtvbi0yXSxyZWxhdGlvblRpdGxlMjoibm9uZSJ9O2JyZWFrO2Nhc2UgNTA6dGhpcy4kPXtpZDE6TWVbb24tM10saWQyOk1lW29uXSxyZWxhdGlvbjpNZVtvbi0yXSxyZWxhdGlvblRpdGxlMToibm9uZSIscmVsYXRpb25UaXRsZTI6TWVbb24tMV19O2JyZWFrO2Nhc2UgNTE6dGhpcy4kPXtpZDE6TWVbb24tNF0saWQyOk1lW29uXSxyZWxhdGlvbjpNZVtvbi0yXSxyZWxhdGlvblRpdGxlMTpNZVtvbi0zXSxyZWxhdGlvblRpdGxlMjpNZVtvbi0xXX07YnJlYWs7Y2FzZSA1MjpQZS5hZGROb3RlKE1lW29uXSxNZVtvbi0xXSk7YnJlYWs7Y2FzZSA1MzpQZS5hZGROb3RlKE1lW29uXSk7YnJlYWs7Y2FzZSA1NDpQZS5zZXREaXJlY3Rpb24oIlRCIik7YnJlYWs7Y2FzZSA1NTpQZS5zZXREaXJlY3Rpb24oIkJUIik7YnJlYWs7Y2FzZSA1NjpQZS5zZXREaXJlY3Rpb24oIlJMIik7YnJlYWs7Y2FzZSA1NzpQZS5zZXREaXJlY3Rpb24oIkxSIik7YnJlYWs7Y2FzZSA1ODp0aGlzLiQ9e3R5cGUxOk1lW29uLTJdLHR5cGUyOk1lW29uXSxsaW5lVHlwZTpNZVtvbi0xXX07YnJlYWs7Y2FzZSA1OTp0aGlzLiQ9e3R5cGUxOiJub25lIix0eXBlMjpNZVtvbl0sbGluZVR5cGU6TWVbb24tMV19O2JyZWFrO2Nhc2UgNjA6dGhpcy4kPXt0eXBlMTpNZVtvbi0xXSx0eXBlMjoibm9uZSIsbGluZVR5cGU6TWVbb25dfTticmVhaztjYXNlIDYxOnRoaXMuJD17dHlwZTE6Im5vbmUiLHR5cGUyOiJub25lIixsaW5lVHlwZTpNZVtvbl19O2JyZWFrO2Nhc2UgNjI6dGhpcy4kPVBlLnJlbGF0aW9uVHlwZS5BR0dSRUdBVElPTjticmVhaztjYXNlIDYzOnRoaXMuJD1QZS5yZWxhdGlvblR5cGUuRVhURU5TSU9OO2JyZWFrO2Nhc2UgNjQ6dGhpcy4kPVBlLnJlbGF0aW9uVHlwZS5DT01QT1NJVElPTjticmVhaztjYXNlIDY1OnRoaXMuJD1QZS5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTticmVhaztjYXNlIDY2OnRoaXMuJD1QZS5yZWxhdGlvblR5cGUuTE9MTElQT1A7YnJlYWs7Y2FzZSA2Nzp0aGlzLiQ9UGUubGluZVR5cGUuTElORTticmVhaztjYXNlIDY4OnRoaXMuJD1QZS5saW5lVHlwZS5ET1RURURfTElORTticmVhaztjYXNlIDY5OmNhc2UgNzU6dGhpcy4kPU1lW29uLTJdLFBlLnNldENsaWNrRXZlbnQoTWVbb24tMV0sTWVbb25dKTticmVhaztjYXNlIDcwOmNhc2UgNzY6dGhpcy4kPU1lW29uLTNdLFBlLnNldENsaWNrRXZlbnQoTWVbb24tMl0sTWVbb24tMV0pLFBlLnNldFRvb2x0aXAoTWVbb24tMl0sTWVbb25dKTticmVhaztjYXNlIDcxOnRoaXMuJD1NZVtvbi0yXSxQZS5zZXRMaW5rKE1lW29uLTFdLE1lW29uXSk7YnJlYWs7Y2FzZSA3Mjp0aGlzLiQ9TWVbb24tM10sUGUuc2V0TGluayhNZVtvbi0yXSxNZVtvbi0xXSxNZVtvbl0pO2JyZWFrO2Nhc2UgNzM6dGhpcy4kPU1lW29uLTNdLFBlLnNldExpbmsoTWVbb24tMl0sTWVbb24tMV0pLFBlLnNldFRvb2x0aXAoTWVbb24tMl0sTWVbb25dKTticmVhaztjYXNlIDc0OnRoaXMuJD1NZVtvbi00XSxQZS5zZXRMaW5rKE1lW29uLTNdLE1lW29uLTJdLE1lW29uXSksUGUuc2V0VG9vbHRpcChNZVtvbi0zXSxNZVtvbi0xXSk7YnJlYWs7Y2FzZSA3Nzp0aGlzLiQ9TWVbb24tM10sUGUuc2V0Q2xpY2tFdmVudChNZVtvbi0yXSxNZVtvbi0xXSxNZVtvbl0pO2JyZWFrO2Nhc2UgNzg6dGhpcy4kPU1lW29uLTRdLFBlLnNldENsaWNrRXZlbnQoTWVbb24tM10sTWVbb24tMl0sTWVbb24tMV0pLFBlLnNldFRvb2x0aXAoTWVbb24tM10sTWVbb25dKTticmVhaztjYXNlIDc5OnRoaXMuJD1NZVtvbi0zXSxQZS5zZXRMaW5rKE1lW29uLTJdLE1lW29uXSk7YnJlYWs7Y2FzZSA4MDp0aGlzLiQ9TWVbb24tNF0sUGUuc2V0TGluayhNZVtvbi0zXSxNZVtvbi0xXSxNZVtvbl0pO2JyZWFrO2Nhc2UgODE6dGhpcy4kPU1lW29uLTRdLFBlLnNldExpbmsoTWVbb24tM10sTWVbb24tMV0pLFBlLnNldFRvb2x0aXAoTWVbb24tM10sTWVbb25dKTticmVhaztjYXNlIDgyOnRoaXMuJD1NZVtvbi01XSxQZS5zZXRMaW5rKE1lW29uLTRdLE1lW29uLTJdLE1lW29uXSksUGUuc2V0VG9vbHRpcChNZVtvbi00XSxNZVtvbi0xXSk7YnJlYWs7Y2FzZSA4MzpQZS5zZXRDc3NDbGFzcyhNZVtvbi0xXSxNZVtvbl0pO2JyZWFrfX0sdGFibGU6W3szOjEsNDoyLDU6Myw2OjQsNzpbMSw2XSwxMDo1LDE2OjM1LDE3OjE5LDE4OjM2LDIwOjcsMjI6OCwyMzo5LDI0OjEwLDI1OjExLDI2OjEyLDI3OjEzLDI4OjE0LDI5OjE1LDMwOmEsMzI6ZiwzNDpwLDM1OjIwLDM5OncsNDA6MjEsNDM6bSw0NDpiLDQ2OkUsNDc6Xyw0OTpBLDUxOkksNTI6Qiw1MzpOLDU0OlIsNTU6eiw2NTpXLDY2OmV0LDY4OnN0LDcyOmF0LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmZ0LDg5OnV0fSx7MTpbM119LHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM119LGkodnQsWzIsNV0sezg6WzEsNDRdfSksezg6WzEsNDVdfSxpKFgsWzIsMTZdLHsyMTpbMSw0Nl19KSxpKFgsWzIsMThdKSxpKFgsWzIsMTldKSxpKFgsWzIsMjBdKSxpKFgsWzIsMjFdKSxpKFgsWzIsMjJdKSxpKFgsWzIsMjNdKSxpKFgsWzIsMjRdKSxpKFgsWzIsMjVdKSx7MzE6WzEsNDddfSx7MzM6WzEsNDhdfSxpKFgsWzIsMjhdKSxpKFgsWzIsNDRdLHs0ODo0OSw1Njo1Miw1Nzo1MywxMzpbMSw1MF0sMjE6WzEsNTFdLDU4OnB0LDU5OlUsNjA6VHQsNjE6bnQsNjI6SXQsNjM6T3QsNjQ6QnR9KSx7MzY6WzEsNjFdfSxpKEV0LFsyLDM1XSx7MzY6WzEsNjNdLDQxOlsxLDYyXX0pLGkoWCxbMiw0Nl0pLGkoWCxbMiw0N10pLHsxNjo2NCw4NDpidCw4NjptdCw4Nzp5dCw4ODpmdH0sezE2OjM1LDE3OjY1LDE4OjM2LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmZ0LDg5OnV0fSx7MTY6MzUsMTc6NjYsMTg6MzYsODQ6YnQsODY6bXQsODc6eXQsODg6ZnQsODk6dXR9LHsxNjozNSwxNzo2NywxODozNiw4NDpidCw4NjptdCw4Nzp5dCw4ODpmdCw4OTp1dH0sezEzOlsxLDY4XX0sezE2OjM1LDE3OjY5LDE4OjM2LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmZ0LDg5OnV0fSx7MTM6Wiw1MDo3MH0saShYLFsyLDU0XSksaShYLFsyLDU1XSksaShYLFsyLDU2XSksaShYLFsyLDU3XSksaShDdCxbMiwxMV0sezE2OjM1LDE4OjM2LDE3OjcyLDE5OlsxLDczXSw4NDpidCw4NjptdCw4Nzp5dCw4ODpmdCw4OTp1dH0pLGkoQ3QsWzIsMTJdLHsxOTpbMSw3NF19KSx7MTU6NzUsMTY6NzYsODQ6YnQsODY6bXQsODc6eXQsODg6ZnR9LHsxNjozNSwxNzo3NywxODozNiw4NDpidCw4NjptdCw4Nzp5dCw4ODpmdCw4OTp1dH0saSh4dCxbMiw5N10pLGkoeHQsWzIsOThdKSxpKHh0LFsyLDk5XSksaSh4dCxbMiwxMDBdKSxpKFsxLDgsOSwxMiwxMywxOSwyMSwzNiwzOCw0MSw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2OSw3MV0sWzIsMTAxXSksaSh2dCxbMiw2XSx7MTA6NSwyMDo3LDIyOjgsMjM6OSwyNDoxMCwyNToxMSwyNjoxMiwyNzoxMywyODoxNCwyOToxNSwxNzoxOSwzNToyMCw0MDoyMSwxNjozNSwxODozNiw1Ojc4LDMwOmEsMzI6ZiwzNDpwLDM5OncsNDM6bSw0NDpiLDQ2OkUsNDc6Xyw0OTpBLDUxOkksNTI6Qiw1MzpOLDU0OlIsNTU6eiw2NTpXLDY2OmV0LDY4OnN0LDcyOmF0LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmZ0LDg5OnV0fSksezU6NzksMTA6NSwxNjozNSwxNzoxOSwxODozNiwyMDo3LDIyOjgsMjM6OSwyNDoxMCwyNToxMSwyNjoxMiwyNzoxMywyODoxNCwyOToxNSwzMDphLDMyOmYsMzQ6cCwzNToyMCwzOTp3LDQwOjIxLDQzOm0sNDQ6Yiw0NjpFLDQ3Ol8sNDk6QSw1MTpJLDUyOkIsNTM6Tiw1NDpSLDU1OnosNjU6Vyw2NjpldCw2ODpzdCw3MjphdCw4NDpidCw4NjptdCw4Nzp5dCw4ODpmdCw4OTp1dH0saShYLFsyLDE3XSksaShYLFsyLDI2XSksaShYLFsyLDI3XSksezEzOlsxLDgxXSwxNjozNSwxNzo4MCwxODozNiw4NDpidCw4NjptdCw4Nzp5dCw4ODpmdCw4OTp1dH0sezQ4OjgyLDU2OjUyLDU3OjUzLDU4OnB0LDU5OlUsNjA6VHQsNjE6bnQsNjI6SXQsNjM6T3QsNjQ6QnR9LGkoWCxbMiw0NV0pLHs1Nzo4Myw2MzpPdCw2NDpCdH0saShIdCxbMiw2MV0sezU2Ojg0LDU4OnB0LDU5OlUsNjA6VHQsNjE6bnQsNjI6SXR9KSxpKExlLFsyLDYyXSksaShMZSxbMiw2M10pLGkoTGUsWzIsNjRdKSxpKExlLFsyLDY1XSksaShMZSxbMiw2Nl0pLGkoRnQsWzIsNjddKSxpKEZ0LFsyLDY4XSksezg6WzEsODZdLDIzOjg3LDM3Ojg1LDQwOjIxLDQzOm19LHsxNjo4OCw4NDpidCw4NjptdCw4Nzp5dCw4ODpmdH0sezQyOjg5LDQ2OmdufSx7NDU6WzEsOTFdfSx7MTM6WzEsOTJdfSx7MTM6WzEsOTNdfSx7Njk6WzEsOTRdLDcxOlsxLDk1XX0sezE2Ojk2LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmZ0fSx7MTM6Wiw1MDo5N30saShYLFsyLDUzXSksaShYLFsyLDEwMl0pLGkoQ3QsWzIsMTNdKSxpKEN0LFsyLDE0XSksaShDdCxbMiwxNV0pLHszNjpbMiwzMV19LHsxNTo5OCwxNjo3NiwzNjpbMiw5XSw4NDpidCw4NjptdCw4Nzp5dCw4ODpmdH0saShTZSxbMiwzOV0sezExOjk5LDEyOlsxLDEwMF19KSxpKHZ0LFsyLDddKSx7OTpbMSwxMDFdfSxpKG1lLFsyLDQ4XSksezE2OjM1LDE3OjEwMiwxODozNiw4NDpidCw4NjptdCw4Nzp5dCw4ODpmdCw4OTp1dH0sezEzOlsxLDEwNF0sMTY6MzUsMTc6MTAzLDE4OjM2LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmZ0LDg5OnV0fSxpKEh0LFsyLDYwXSx7NTY6MTA1LDU4OnB0LDU5OlUsNjA6VHQsNjE6bnQsNjI6SXR9KSxpKEh0LFsyLDU5XSksezM4OlsxLDEwNl19LHsyMzo4NywzNzoxMDcsNDA6MjEsNDM6bX0sezg6WzEsMTA4XSwzODpbMiwzMl19LGkoRXQsWzIsMzZdLHszNjpbMSwxMDldfSksezM4OlsxLDExMF19LHszODpbMiw0Ml0sNDI6MTExLDQ2OmdufSx7MTY6MzUsMTc6MTEyLDE4OjM2LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmZ0LDg5OnV0fSxpKFgsWzIsNjldLHsxMzpbMSwxMTNdfSksaShYLFsyLDcxXSx7MTM6WzEsMTE1XSw2NzpbMSwxMTRdfSksaShYLFsyLDc1XSx7MTM6WzEsMTE2XSw3MDpbMSwxMTddfSksezEzOlsxLDExOF19LGkoWCxbMiw4M10pLGkoWCxbMiw1Ml0pLHszNjpbMiwxMF19LGkoU2UsWzIsNDBdKSx7MTM6WzEsMTE5XX0sezE6WzIsNF19LGkobWUsWzIsNTBdKSxpKG1lLFsyLDQ5XSksezE2OjM1LDE3OjEyMCwxODozNiw4NDpidCw4NjptdCw4Nzp5dCw4ODpmdCw4OTp1dH0saShIdCxbMiw1OF0pLGkoWCxbMiwyOV0pLHszODpbMSwxMjFdfSx7MjM6ODcsMzc6MTIyLDM4OlsyLDMzXSw0MDoyMSw0MzptfSx7NDI6MTIzLDQ2OmdufSxpKEV0LFsyLDM3XSksezM4OlsyLDQzXX0saShYLFsyLDQxXSksaShYLFsyLDcwXSksaShYLFsyLDcyXSksaShYLFsyLDczXSx7Njc6WzEsMTI0XX0pLGkoWCxbMiw3Nl0pLGkoWCxbMiw3N10sezEzOlsxLDEyNV19KSxpKFgsWzIsNzldLHsxMzpbMSwxMjddLDY3OlsxLDEyNl19KSx7MTQ6WzEsMTI4XX0saShtZSxbMiw1MV0pLGkoWCxbMiwzMF0pLHszODpbMiwzNF19LHszODpbMSwxMjldfSxpKFgsWzIsNzRdKSxpKFgsWzIsNzhdKSxpKFgsWzIsODBdKSxpKFgsWzIsODFdLHs2NzpbMSwxMzBdfSksaShTZSxbMiw4XSksaShFdCxbMiwzOF0pLGkoWCxbMiw4Ml0pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSwzOlsyLDJdLDQ6WzIsM10sNzU6WzIsMzFdLDk4OlsyLDEwXSwxMDE6WzIsNF0sMTExOlsyLDQzXSwxMjI6WzIsMzRdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHp0LHJlKXtpZihyZS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKHp0KTtlbHNle3ZhciBzZT1uZXcgRXJyb3IoenQpO3Rocm93IHNlLmhhc2g9cmUsc2V9fSxwYXJzZTpmdW5jdGlvbih6dCl7dmFyIHJlPXRoaXMsc2U9WzBdLFBlPVtdLHRlPVtudWxsXSxNZT1bXSxkZT10aGlzLnRhYmxlLG9uPSIiLG5pPTAsS3M9MCx3cz0yLGZvPTEsWGk9TWUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksRXI9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxYbj17eXk6e319O2Zvcih2YXIgZGkgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxkaSkmJihYbi55eVtkaV09dGhpcy55eVtkaV0pO0VyLnNldElucHV0KHp0LFhuLnl5KSxYbi55eS5sZXhlcj1FcixYbi55eS5wYXJzZXI9dGhpcyx0eXBlb2YgRXIueXlsbG9jPiJ1IiYmKEVyLnl5bGxvYz17fSk7dmFyIEVlPUVyLnl5bGxvYztNZS5wdXNoKEVlKTt2YXIgS249RXIub3B0aW9ucyYmRXIub3B0aW9ucy5yYW5nZXM7dHlwZW9mIFhuLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPVhuLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIEhlKCl7dmFyIER1O3JldHVybiBEdT1QZS5wb3AoKXx8RXIubGV4KCl8fGZvLHR5cGVvZiBEdSE9Im51bWJlciImJihEdSBpbnN0YW5jZW9mIEFycmF5JiYoUGU9RHUsRHU9UGUucG9wKCkpLER1PXJlLnN5bWJvbHNfW0R1XXx8RHUpLER1fWZvcih2YXIgVGkscG4sRXMscWEsTWE9e30sR3MsUG8sdnMscnU7Oyl7aWYocG49c2Vbc2UubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbcG5dP0VzPXRoaXMuZGVmYXVsdEFjdGlvbnNbcG5dOigoVGk9PT1udWxsfHx0eXBlb2YgVGk+InUiKSYmKFRpPUhlKCkpLEVzPWRlW3BuXSYmZGVbcG5dW1RpXSksdHlwZW9mIEVzPiJ1Inx8IUVzLmxlbmd0aHx8IUVzWzBdKXt2YXIgenM9IiI7cnU9W107Zm9yKEdzIGluIGRlW3BuXSl0aGlzLnRlcm1pbmFsc19bR3NdJiZHcz53cyYmcnUucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0dzXSsiJyIpO0VyLnNob3dQb3NpdGlvbj96cz0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhuaSsxKStgOgpgK0VyLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArcnUuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tUaV18fFRpKSsiJyI6enM9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisobmkrMSkrIjogVW5leHBlY3RlZCAiKyhUaT09Zm8/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bVGldfHxUaSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoenMse3RleHQ6RXIubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1RpXXx8VGksbGluZTpFci55eWxpbmVubyxsb2M6RWUsZXhwZWN0ZWQ6cnV9KX1pZihFc1swXWluc3RhbmNlb2YgQXJyYXkmJkVzLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrcG4rIiwgdG9rZW46ICIrVGkpO3N3aXRjaChFc1swXSl7Y2FzZSAxOnNlLnB1c2goVGkpLHRlLnB1c2goRXIueXl0ZXh0KSxNZS5wdXNoKEVyLnl5bGxvYyksc2UucHVzaChFc1sxXSksVGk9bnVsbCxLcz1Fci55eWxlbmcsb249RXIueXl0ZXh0LG5pPUVyLnl5bGluZW5vLEVlPUVyLnl5bGxvYzticmVhaztjYXNlIDI6aWYoUG89dGhpcy5wcm9kdWN0aW9uc19bRXNbMV1dWzFdLE1hLiQ9dGVbdGUubGVuZ3RoLVBvXSxNYS5fJD17Zmlyc3RfbGluZTpNZVtNZS5sZW5ndGgtKFBvfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6TWVbTWUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46TWVbTWUubGVuZ3RoLShQb3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpNZVtNZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEtuJiYoTWEuXyQucmFuZ2U9W01lW01lLmxlbmd0aC0oUG98fDEpXS5yYW5nZVswXSxNZVtNZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxxYT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTWEsW29uLEtzLG5pLFhuLnl5LEVzWzFdLHRlLE1lXS5jb25jYXQoWGkpKSx0eXBlb2YgcWE8InUiKXJldHVybiBxYTtQbyYmKHNlPXNlLnNsaWNlKDAsLTEqUG8qMiksdGU9dGUuc2xpY2UoMCwtMSpQbyksTWU9TWUuc2xpY2UoMCwtMSpQbykpLHNlLnB1c2godGhpcy5wcm9kdWN0aW9uc19bRXNbMV1dWzBdKSx0ZS5wdXNoKE1hLiQpLE1lLnB1c2goTWEuXyQpLHZzPWRlW3NlW3NlLmxlbmd0aC0yXV1bc2Vbc2UubGVuZ3RoLTFdXSxzZS5wdXNoKHZzKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sWWU9ZnVuY3Rpb24oKXt2YXIga2U9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24ocmUsc2Upe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IocmUsc2UpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKHJlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24oenQscmUpe3JldHVybiB0aGlzLnl5PXJlfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD16dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgenQ9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPXp0LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz16dCx0aGlzLm1hdGNoZWQrPXp0O3ZhciByZT16dC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIHJlPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx6dH0sdW5wdXQ6ZnVuY3Rpb24oenQpe3ZhciByZT16dC5sZW5ndGgsc2U9enQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD16dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtcmUpLHRoaXMub2Zmc2V0LT1yZTt2YXIgUGU9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksc2UubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1zZS5sZW5ndGgtMSk7dmFyIHRlPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpzZT8oc2UubGVuZ3RoPT09UGUubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStQZVtQZS5sZW5ndGgtc2UubGVuZ3RoXS5sZW5ndGgtc2VbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1yZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0ZVswXSx0ZVswXSt0aGlzLnl5bGVuZy1yZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKHp0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoenQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHp0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oenQubGVuZ3RoPjIwPyIuLi4iOiIiKSt6dC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB6dD10aGlzLm1hdGNoO3JldHVybiB6dC5sZW5ndGg8MjAmJih6dCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtenQubGVuZ3RoKSksKHp0LnN1YnN0cigwLDIwKSsoenQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB6dD10aGlzLnBhc3RJbnB1dCgpLHJlPW5ldyBBcnJheSh6dC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB6dCt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArcmUrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHp0LHJlKXt2YXIgc2UsUGUsdGU7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKHRlPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRlLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLFBlPXp0WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxQZSYmKHRoaXMueXlsaW5lbm8rPVBlLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOlBlP1BlW1BlLmxlbmd0aC0xXS5sZW5ndGgtUGVbUGUubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4renRbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9enRbMF0sdGhpcy5tYXRjaCs9enRbMF0sdGhpcy5tYXRjaGVzPXp0LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHp0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz16dFswXSxzZT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxyZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxzZSlyZXR1cm4gc2U7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIE1lIGluIHRlKXRoaXNbTWVdPXRlW01lXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciB6dCxyZSxzZSxQZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciB0ZT10aGlzLl9jdXJyZW50UnVsZXMoKSxNZT0wO01lPHRlLmxlbmd0aDtNZSsrKWlmKHNlPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbdGVbTWVdXSksc2UmJighcmV8fHNlWzBdLmxlbmd0aD5yZVswXS5sZW5ndGgpKXtpZihyZT1zZSxQZT1NZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZih6dD10aGlzLnRlc3RfbWF0Y2goc2UsdGVbTWVdKSx6dCE9PSExKXJldHVybiB6dDtpZih0aGlzLl9iYWNrdHJhY2spe3JlPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIHJlPyh6dD10aGlzLnRlc3RfbWF0Y2gocmUsdGVbUGVdKSx6dCE9PSExP3p0OiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgcmU9dGhpcy5uZXh0KCk7cmV0dXJuIHJlfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihyZSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHJlKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgcmU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gcmU+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihyZSl7cmV0dXJuIHJlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMocmV8fDApLHJlPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbcmVdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHJlKXt0aGlzLmJlZ2luKHJlKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihyZSxzZSxQZSx0ZSl7c3dpdGNoKFBlKXtjYXNlIDA6cmV0dXJuIDUyO2Nhc2UgMTpyZXR1cm4gNTM7Y2FzZSAyOnJldHVybiA1NDtjYXNlIDM6cmV0dXJuIDU1O2Nhc2UgNDpicmVhaztjYXNlIDU6YnJlYWs7Y2FzZSA2OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwzMDtjYXNlIDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDMyO2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgMTA6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTM6cmV0dXJuIDg7Y2FzZSAxNDpicmVhaztjYXNlIDE1OnJldHVybiA3O2Nhc2UgMTY6cmV0dXJuIDc7Y2FzZSAxNzpyZXR1cm4iRURHRV9TVEFURSI7Y2FzZSAxODp0aGlzLmJlZ2luKCJjYWxsYmFja19uYW1lIik7YnJlYWs7Y2FzZSAxOTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMDp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiY2FsbGJhY2tfYXJncyIpO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIDY5O2Nhc2UgMjI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjM6cmV0dXJuIDcwO2Nhc2UgMjQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjU6cmV0dXJuIlNUUiI7Y2FzZSAyNjp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDI3OnJldHVybiB0aGlzLmJlZ2luKCJuYW1lc3BhY2UiKSwzOTtjYXNlIDI4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksODtjYXNlIDI5OmJyZWFrO2Nhc2UgMzA6cmV0dXJuIHRoaXMuYmVnaW4oIm5hbWVzcGFjZS1ib2R5IiksMzY7Y2FzZSAzMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDM4O2Nhc2UgMzI6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgMzM6cmV0dXJuIDg7Y2FzZSAzNDpicmVhaztjYXNlIDM1OnJldHVybiJFREdFX1NUQVRFIjtjYXNlIDM2OnJldHVybiB0aGlzLmJlZ2luKCJjbGFzcyIpLDQzO2Nhc2UgMzc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw4O2Nhc2UgMzg6YnJlYWs7Y2FzZSAzOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwzODtjYXNlIDQwOnJldHVybiB0aGlzLmJlZ2luKCJjbGFzcy1ib2R5IiksMzY7Y2FzZSA0MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDM4O2Nhc2UgNDI6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgNDM6cmV0dXJuIkVER0VfU1RBVEUiO2Nhc2UgNDQ6cmV0dXJuIk9QRU5fSU5fU1RSVUNUIjtjYXNlIDQ1OmJyZWFrO2Nhc2UgNDY6cmV0dXJuIk1FTUJFUiI7Y2FzZSA0NzpyZXR1cm4gNzI7Y2FzZSA0ODpyZXR1cm4gNjU7Y2FzZSA0OTpyZXR1cm4gNjY7Y2FzZSA1MDpyZXR1cm4gNjg7Y2FzZSA1MTpyZXR1cm4gNDk7Y2FzZSA1MjpyZXR1cm4gNTE7Y2FzZSA1MzpyZXR1cm4gNDQ7Y2FzZSA1NDpyZXR1cm4gNDU7Y2FzZSA1NTpyZXR1cm4gNzE7Y2FzZSA1Njp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA1NzpyZXR1cm4iR0VORVJJQ1RZUEUiO2Nhc2UgNTg6dGhpcy5iZWdpbigiZ2VuZXJpYyIpO2JyZWFrO2Nhc2UgNTk6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjA6cmV0dXJuIkJRVU9URV9TVFIiO2Nhc2UgNjE6dGhpcy5iZWdpbigiYnFzdHJpbmciKTticmVhaztjYXNlIDYyOnJldHVybiA2NztjYXNlIDYzOnJldHVybiA2NztjYXNlIDY0OnJldHVybiA2NztjYXNlIDY1OnJldHVybiA2NztjYXNlIDY2OnJldHVybiA1OTtjYXNlIDY3OnJldHVybiA1OTtjYXNlIDY4OnJldHVybiA2MTtjYXNlIDY5OnJldHVybiA2MTtjYXNlIDcwOnJldHVybiA2MDtjYXNlIDcxOnJldHVybiA1ODtjYXNlIDcyOnJldHVybiA2MjtjYXNlIDczOnJldHVybiA2MztjYXNlIDc0OnJldHVybiA2NDtjYXNlIDc1OnJldHVybiAyMTtjYXNlIDc2OnJldHVybiA0MTtjYXNlIDc3OnJldHVybiA4NDtjYXNlIDc4OnJldHVybiJET1QiO2Nhc2UgNzk6cmV0dXJuIlBMVVMiO2Nhc2UgODA6cmV0dXJuIDgxO2Nhc2UgODE6cmV0dXJuIkVRVUFMUyI7Y2FzZSA4MjpyZXR1cm4iRVFVQUxTIjtjYXNlIDgzOnJldHVybiA4ODtjYXNlIDg0OnJldHVybiAxMjtjYXNlIDg1OnJldHVybiAxNDtjYXNlIDg2OnJldHVybiJQVU5DVFVBVElPTiI7Y2FzZSA4NzpyZXR1cm4gODc7Y2FzZSA4ODpyZXR1cm4gODY7Y2FzZSA4OTpyZXR1cm4gODM7Y2FzZSA5MDpyZXR1cm4gOX19LHJ1bGVzOlsvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopLywvXig/OiUlKD8hXHspKlteXG5dKihccj9cbj8pKykvLC9eKD86JSVbXlxuXSooXHI/XG4pKikvLC9eKD86YWNjVGl0bGVccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKlx7XHMqKS8sL14oPzpbXH1dKS8sL14oPzpbXlx9XSopLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/OmNsYXNzRGlhZ3JhbS12MlxiKS8sL14oPzpjbGFzc0RpYWdyYW1cYikvLC9eKD86XFtcKlxdKS8sL14oPzpjYWxsW1xzXSspLywvXig/OlwoW1xzXSpcKSkvLC9eKD86XCgpLywvXig/OlteKF0qKS8sL14oPzpcKSkvLC9eKD86W14pXSopLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OlsiXSkvLC9eKD86bmFtZXNwYWNlXGIpLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/Olt7XSkvLC9eKD86W31dKS8sL14oPzokKS8sL14oPzpccyooXHI/XG4pKykvLC9eKD86XHMrKS8sL14oPzpcW1wqXF0pLywvXig/OmNsYXNzXGIpLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/Olt9XSkvLC9eKD86W3tdKS8sL14oPzpbfV0pLywvXig/OiQpLywvXig/OlxbXCpcXSkvLC9eKD86W3tdKS8sL14oPzpbXG5dKS8sL14oPzpbXnt9XG5dKikvLC9eKD86Y3NzQ2xhc3NcYikvLC9eKD86Y2FsbGJhY2tcYikvLC9eKD86bGlua1xiKS8sL14oPzpjbGlja1xiKS8sL14oPzpub3RlIGZvclxiKS8sL14oPzpub3RlXGIpLywvXig/Ojw8KS8sL14oPzo+PikvLC9eKD86aHJlZlxiKS8sL14oPzpbfl0pLywvXig/Oltefl0qKS8sL14oPzp+KS8sL14oPzpbYF0pLywvXig/OlteYF0rKS8sL14oPzpbYF0pLywvXig/Ol9zZWxmXGIpLywvXig/Ol9ibGFua1xiKS8sL14oPzpfcGFyZW50XGIpLywvXig/Ol90b3BcYikvLC9eKD86XHMqPFx8KS8sL14oPzpccypcfD4pLywvXig/OlxzKj4pLywvXig/OlxzKjwpLywvXig/OlxzKlwqKS8sL14oPzpccypvXGIpLywvXig/OlxzKlwoXCkpLywvXig/Oi0tKS8sL14oPzpcLlwuKS8sL14oPzo6ezF9W146XG47XSspLywvXig/Ojp7M30pLywvXig/Oi0pLywvXig/OlwuKS8sL14oPzpcKykvLC9eKD86JSkvLC9eKD86PSkvLC9eKD86PSkvLC9eKD86XHcrKS8sL14oPzpcWykvLC9eKD86XF0pLywvXig/OlshIiMkJSYnKissLS5gP1xcL10pLywvXig/OlswLTldKykvLC9eKD86W1x1MDBBQVx1MDBCNVx1MDBCQVx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XXxbXHUwMEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N118W1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVdfFtcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQV18W1x1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRV18W1x1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFdfFtcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMF18W1x1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5NzddfFtcdTA5NzktXHUwOTdGXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXXxbXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXXxbXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzldfFtcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOF18W1x1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ118W1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q118W1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTldfFtcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMF18W1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNEXXxbXHUwQzU4XHUwQzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM118W1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMF18W1x1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFdfFtcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXXxbXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXXxbXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZdfFtcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQV18W1x1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFdfFtcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXXxbXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBdfFtcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMF18W1x1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXXxbXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFdfFtcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN118W1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNdfFtcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNl18W1x1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZdfFtcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ118W1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURdfFtcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXXxbXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNdfFtcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXXxbXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XXxbXHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE4M1x1MjE4NF18W1x1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNdfFtcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XXxbXHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VdfFtcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNVx1MzAwNlx1MzAzMS1cdTMwMzVcdTMwM0JcdTMwM0NdfFtcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRF18W1x1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXXxbXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQl18W1x1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjk3XHVBNkEwLVx1QTZFNVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XXxbXHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVdfFtcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQl18W1x1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XXxbXHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNV18W1x1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRdfFtcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRV18W1x1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXXxbXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZdfFtcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RdfFtcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ118W1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXXxbXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdKS8sL14oPzpccykvLC9eKD86JCkvXSxjb25kaXRpb25zOnsibmFtZXNwYWNlLWJvZHkiOntydWxlczpbMjYsMzEsMzIsMzMsMzQsMzUsMzYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTgsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGluY2x1c2l2ZTohMX0sbmFtZXNwYWNlOntydWxlczpbMjYsMjcsMjgsMjksMzAsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTgsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGluY2x1c2l2ZTohMX0sImNsYXNzLWJvZHkiOntydWxlczpbMjYsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTgsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGluY2x1c2l2ZTohMX0sY2xhc3M6e3J1bGVzOlsyNiwzNywzOCwzOSw0MCw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1OCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MF0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTEsMTIsMjYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTgsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbOSwyNiw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1OCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOls3LDI2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU4LDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwXSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrX2FyZ3M6e3J1bGVzOlsyMiwyMywyNiw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1OCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MF0saW5jbHVzaXZlOiExfSxjYWxsYmFja19uYW1lOntydWxlczpbMTksMjAsMjEsMjYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTgsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzI2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU4LDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwXSxpbmNsdXNpdmU6ITF9LHN0cnVjdDp7cnVsZXM6WzI2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU4LDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwXSxpbmNsdXNpdmU6ITF9LGdlbmVyaWM6e3J1bGVzOlsyNiw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MF0saW5jbHVzaXZlOiExfSxicXN0cmluZzp7cnVsZXM6WzI2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzI0LDI1LDI2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU4LDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwXSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDgsMTAsMTMsMTQsMTUsMTYsMTcsMTgsMjYsMjcsMzYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTgsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4ga2V9KCk7VmUubGV4ZXI9WWU7ZnVuY3Rpb24gY2UoKXt0aGlzLnl5PXt9fXJldHVybiBjZS5wcm90b3R5cGU9VmUsVmUuUGFyc2VyPWNlLG5ldyBjZX0oKTtUZ3QucGFyc2VyPVRndDtjb25zdCB6UnQ9VGd0LHFSdD1bIiMiLCIrIiwifiIsIi0iLCIiXTtjbGFzcyBIUnR7Y29uc3RydWN0b3IoYSxmKXt0aGlzLm1lbWJlclR5cGU9Zix0aGlzLnZpc2liaWxpdHk9IiIsdGhpcy5jbGFzc2lmaWVyPSIiO2NvbnN0IHA9UTEoYSxPZSgpKTt0aGlzLnBhcnNlTWVtYmVyKHApfWdldERpc3BsYXlEZXRhaWxzKCl7bGV0IGE9dGhpcy52aXNpYmlsaXR5K1lQKHRoaXMuaWQpO3RoaXMubWVtYmVyVHlwZT09PSJtZXRob2QiJiYoYSs9YCgke1lQKHRoaXMucGFyYW1ldGVycy50cmltKCkpfSlgLHRoaXMucmV0dXJuVHlwZSYmKGErPSIgOiAiK1lQKHRoaXMucmV0dXJuVHlwZSkpKSxhPWEudHJpbSgpO2NvbnN0IGY9dGhpcy5wYXJzZUNsYXNzaWZpZXIoKTtyZXR1cm57ZGlzcGxheVRleHQ6YSxjc3NTdHlsZTpmfX1wYXJzZU1lbWJlcihhKXtsZXQgZj0iIjtpZih0aGlzLm1lbWJlclR5cGU9PT0ibWV0aG9kIil7Y29uc3QgcD0vKFsjK34tXSk/KC4rKVwoKC4qKVwpKFtccyQqXSk/KC4qKShbJCpdKT8vLHc9YS5tYXRjaChwKTtpZih3KXtjb25zdCBtPXdbMV0/d1sxXS50cmltKCk6IiI7aWYocVJ0LmluY2x1ZGVzKG0pJiYodGhpcy52aXNpYmlsaXR5PW0pLHRoaXMuaWQ9d1syXS50cmltKCksdGhpcy5wYXJhbWV0ZXJzPXdbM10/d1szXS50cmltKCk6IiIsZj13WzRdP3dbNF0udHJpbSgpOiIiLHRoaXMucmV0dXJuVHlwZT13WzVdP3dbNV0udHJpbSgpOiIiLGY9PT0iIil7Y29uc3QgYj10aGlzLnJldHVyblR5cGUuc3Vic3RyaW5nKHRoaXMucmV0dXJuVHlwZS5sZW5ndGgtMSk7Yi5tYXRjaCgvWyQqXS8pJiYoZj1iLHRoaXMucmV0dXJuVHlwZT10aGlzLnJldHVyblR5cGUuc3Vic3RyaW5nKDAsdGhpcy5yZXR1cm5UeXBlLmxlbmd0aC0xKSl9fX1lbHNle2NvbnN0IHA9YS5sZW5ndGgsdz1hLnN1YnN0cmluZygwLDEpLG09YS5zdWJzdHJpbmcocC0xKTtxUnQuaW5jbHVkZXModykmJih0aGlzLnZpc2liaWxpdHk9dyksbS5tYXRjaCgvWyo/XS8pJiYoZj1tKSx0aGlzLmlkPWEuc3Vic3RyaW5nKHRoaXMudmlzaWJpbGl0eT09PSIiPzA6MSxmPT09IiI/cDpwLTEpfXRoaXMuY2xhc3NpZmllcj1mfXBhcnNlQ2xhc3NpZmllcigpe3N3aXRjaCh0aGlzLmNsYXNzaWZpZXIpe2Nhc2UiKiI6cmV0dXJuImZvbnQtc3R5bGU6aXRhbGljOyI7Y2FzZSIkIjpyZXR1cm4idGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsiO2RlZmF1bHQ6cmV0dXJuIiJ9fX1jb25zdCAkWT0iY2xhc3NJZC0iO2xldCBDZ3Q9W10sSmw9e30selk9W10sVlJ0PTAseGs9e30sX2d0PTAsV0Y9W107Y29uc3QgQVQ9aT0+S3Iuc2FuaXRpemVUZXh0KGksT2UoKSksd0w9ZnVuY3Rpb24oaSl7Y29uc3QgYT1Lci5zYW5pdGl6ZVRleHQoaSxPZSgpKTtsZXQgZj0iIixwPWE7aWYoYS5pbmRleE9mKCJ+Iik+MCl7Y29uc3Qgdz1hLnNwbGl0KCJ+Iik7cD1BVCh3WzBdKSxmPUFUKHdbMV0pfXJldHVybntjbGFzc05hbWU6cCx0eXBlOmZ9fSxzR2U9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPUtyLnNhbml0aXplVGV4dChpLE9lKCkpO2EmJihhPUFUKGEpKTtjb25zdHtjbGFzc05hbWU6cH09d0woZik7SmxbcF0ubGFiZWw9YX0scVk9ZnVuY3Rpb24oaSl7Y29uc3QgYT1Lci5zYW5pdGl6ZVRleHQoaSxPZSgpKSx7Y2xhc3NOYW1lOmYsdHlwZTpwfT13TChhKTtpZihPYmplY3QuaGFzT3duKEpsLGYpKXJldHVybjtjb25zdCB3PUtyLnNhbml0aXplVGV4dChmLE9lKCkpO0psW3ddPXtpZDp3LHR5cGU6cCxsYWJlbDp3LGNzc0NsYXNzZXM6W10sbWV0aG9kczpbXSxtZW1iZXJzOltdLGFubm90YXRpb25zOltdLGRvbUlkOiRZK3crIi0iK1ZSdH0sVlJ0Kyt9LEdSdD1mdW5jdGlvbihpKXtjb25zdCBhPUtyLnNhbml0aXplVGV4dChpLE9lKCkpO2lmKGEgaW4gSmwpcmV0dXJuIEpsW2FdLmRvbUlkO3Rocm93IG5ldyBFcnJvcigiQ2xhc3Mgbm90IGZvdW5kOiAiK2EpfSxhR2U9ZnVuY3Rpb24oKXtDZ3Q9W10sSmw9e30selk9W10sV0Y9W10sV0YucHVzaChXUnQpLHhrPXt9LF9ndD0wLGhnKCl9LG9HZT1mdW5jdGlvbihpKXtyZXR1cm4gSmxbaV19LGNHZT1mdW5jdGlvbigpe3JldHVybiBKbH0sdUdlPWZ1bmN0aW9uKCl7cmV0dXJuIENndH0sbEdlPWZ1bmN0aW9uKCl7cmV0dXJuIHpZfSxoR2U9ZnVuY3Rpb24oaSl7VXQuZGVidWcoIkFkZGluZyByZWxhdGlvbjogIitKU09OLnN0cmluZ2lmeShpKSkscVkoaS5pZDEpLHFZKGkuaWQyKSxpLmlkMT13TChpLmlkMSkuY2xhc3NOYW1lLGkuaWQyPXdMKGkuaWQyKS5jbGFzc05hbWUsaS5yZWxhdGlvblRpdGxlMT1Lci5zYW5pdGl6ZVRleHQoaS5yZWxhdGlvblRpdGxlMS50cmltKCksT2UoKSksaS5yZWxhdGlvblRpdGxlMj1Lci5zYW5pdGl6ZVRleHQoaS5yZWxhdGlvblRpdGxlMi50cmltKCksT2UoKSksQ2d0LnB1c2goaSl9LGZHZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9d0woaSkuY2xhc3NOYW1lO0psW2ZdLmFubm90YXRpb25zLnB1c2goYSl9LFVSdD1mdW5jdGlvbihpLGEpe3FZKGkpO2NvbnN0IGY9d0woaSkuY2xhc3NOYW1lLHA9SmxbZl07aWYodHlwZW9mIGE9PSJzdHJpbmciKXtjb25zdCB3PWEudHJpbSgpO3cuc3RhcnRzV2l0aCgiPDwiKSYmdy5lbmRzV2l0aCgiPj4iKT9wLmFubm90YXRpb25zLnB1c2goQVQody5zdWJzdHJpbmcoMix3Lmxlbmd0aC0yKSkpOncuaW5kZXhPZigiKSIpPjA/cC5tZXRob2RzLnB1c2gobmV3IEhSdCh3LCJtZXRob2QiKSk6dyYmcC5tZW1iZXJzLnB1c2gobmV3IEhSdCh3LCJhdHRyaWJ1dGUiKSl9fSxkR2U9ZnVuY3Rpb24oaSxhKXtBcnJheS5pc0FycmF5KGEpJiYoYS5yZXZlcnNlKCksYS5mb3JFYWNoKGY9PlVSdChpLGYpKSl9LGdHZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9e2lkOmBub3RlJHt6WS5sZW5ndGh9YCxjbGFzczphLHRleHQ6aX07elkucHVzaChmKX0scEdlPWZ1bmN0aW9uKGkpe3JldHVybiBpLnN0YXJ0c1dpdGgoIjoiKSYmKGk9aS5zdWJzdHJpbmcoMSkpLEFUKGkudHJpbSgpKX0sU2d0PWZ1bmN0aW9uKGksYSl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZil7bGV0IHA9ZjtmWzBdLm1hdGNoKC9cZC8pJiYocD0kWStwKSxKbFtwXSE9PXZvaWQgMCYmSmxbcF0uY3NzQ2xhc3Nlcy5wdXNoKGEpfSl9LGJHZT1mdW5jdGlvbihpLGEpe2kuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2EhPT12b2lkIDAmJihKbFtmXS50b29sdGlwPUFUKGEpKX0pfSx3R2U9ZnVuY3Rpb24oaSxhKXtyZXR1cm4gYT94a1thXS5jbGFzc2VzW2ldLnRvb2x0aXA6SmxbaV0udG9vbHRpcH0sdkdlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPU9lKCk7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24odyl7bGV0IG09dzt3WzBdLm1hdGNoKC9cZC8pJiYobT0kWSttKSxKbFttXSE9PXZvaWQgMCYmKEpsW21dLmxpbms9JGEuZm9ybWF0VXJsKGEscCkscC5zZWN1cml0eUxldmVsPT09InNhbmRib3giP0psW21dLmxpbmtUYXJnZXQ9Il90b3AiOnR5cGVvZiBmPT0ic3RyaW5nIj9KbFttXS5saW5rVGFyZ2V0PUFUKGYpOkpsW21dLmxpbmtUYXJnZXQ9Il9ibGFuayIpfSksU2d0KGksImNsaWNrYWJsZSIpfSxtR2U9ZnVuY3Rpb24oaSxhLGYpe2kuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHApe3lHZShwLGEsZiksSmxbcF0uaGF2ZUNhbGxiYWNrPSEwfSksU2d0KGksImNsaWNrYWJsZSIpfSx5R2U9ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IHA9S3Iuc2FuaXRpemVUZXh0KGksT2UoKSk7aWYoT2UoKS5zZWN1cml0eUxldmVsIT09Imxvb3NlInx8YT09PXZvaWQgMClyZXR1cm47Y29uc3QgbT1wO2lmKEpsW21dIT09dm9pZCAwKXtjb25zdCBiPUdSdChtKTtsZXQgRT1bXTtpZih0eXBlb2YgZj09InN0cmluZyIpe0U9Zi5zcGxpdCgvLCg/PSg/Oig/OlteIl0qIil7Mn0pKlteIl0qJCkvKTtmb3IobGV0IF89MDtfPEUubGVuZ3RoO18rKyl7bGV0IEE9RVtfXS50cmltKCk7QS5jaGFyQXQoMCk9PT0nIicmJkEuY2hhckF0KEEubGVuZ3RoLTEpPT09JyInJiYoQT1BLnN1YnN0cigxLEEubGVuZ3RoLTIpKSxFW19dPUF9fUUubGVuZ3RoPT09MCYmRS5wdXNoKGIpLFdGLnB1c2goZnVuY3Rpb24oKXtjb25zdCBfPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtifSJdYCk7XyE9PW51bGwmJl8uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7JGEucnVuRnVuYyhhLC4uLkUpfSwhMSl9KX19LHhHZT1mdW5jdGlvbihpKXtXRi5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EoaSl9KX0sa0dlPXtMSU5FOjAsRE9UVEVEX0xJTkU6MX0sRUdlPXtBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozLExPTExJUE9QOjR9LFdSdD1mdW5jdGlvbihpKXtsZXQgYT15cigiLm1lcm1haWRUb29sdGlwIik7KGEuX2dyb3Vwc3x8YSlbMF1bMF09PT1udWxsJiYoYT15cigiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSkseXIoaSkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7Y29uc3Qgdz15cih0aGlzKTtpZih3LmF0dHIoInRpdGxlIik9PT1udWxsKXJldHVybjtjb25zdCBiPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZSgib3BhY2l0eSIsIi45IiksYS50ZXh0KHcuYXR0cigidGl0bGUiKSkuc3R5bGUoImxlZnQiLHdpbmRvdy5zY3JvbGxYK2IubGVmdCsoYi5yaWdodC1iLmxlZnQpLzIrInB4Iikuc3R5bGUoInRvcCIsd2luZG93LnNjcm9sbFkrYi50b3AtMTQrZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ArInB4IiksYS5odG1sKGEuaHRtbCgpLnJlcGxhY2UoLyZsdDticlwvJmd0Oy9nLCI8YnIvPiIpKSx3LmNsYXNzZWQoImhvdmVyIiwhMCl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7YS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5zdHlsZSgib3BhY2l0eSIsMCkseXIodGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKX0pfTtXRi5wdXNoKFdSdCk7bGV0IFlSdD0iVEIiO2NvbnN0IEhZPXtzZXRBY2NUaXRsZTpFMCxnZXRBY2NUaXRsZTpmZyxnZXRBY2NEZXNjcmlwdGlvbjpnZyxzZXRBY2NEZXNjcmlwdGlvbjpkZyxnZXRDb25maWc6KCk9Pk9lKCkuY2xhc3MsYWRkQ2xhc3M6cVksYmluZEZ1bmN0aW9uczp4R2UsY2xlYXI6YUdlLGdldENsYXNzOm9HZSxnZXRDbGFzc2VzOmNHZSxnZXROb3RlczpsR2UsYWRkQW5ub3RhdGlvbjpmR2UsYWRkTm90ZTpnR2UsZ2V0UmVsYXRpb25zOnVHZSxhZGRSZWxhdGlvbjpoR2UsZ2V0RGlyZWN0aW9uOigpPT5ZUnQsc2V0RGlyZWN0aW9uOmk9PntZUnQ9aX0sYWRkTWVtYmVyOlVSdCxhZGRNZW1iZXJzOmRHZSxjbGVhbnVwTGFiZWw6cEdlLGxpbmVUeXBlOmtHZSxyZWxhdGlvblR5cGU6RUdlLHNldENsaWNrRXZlbnQ6bUdlLHNldENzc0NsYXNzOlNndCxzZXRMaW5rOnZHZSxnZXRUb29sdGlwOndHZSxzZXRUb29sdGlwOmJHZSxsb29rVXBEb21JZDpHUnQsc2V0RGlhZ3JhbVRpdGxlOk5iLGdldERpYWdyYW1UaXRsZTpwZyxzZXRDbGFzc0xhYmVsOnNHZSxhZGROYW1lc3BhY2U6ZnVuY3Rpb24oaSl7eGtbaV09PT12b2lkIDAmJih4a1tpXT17aWQ6aSxjbGFzc2VzOnt9LGNoaWxkcmVuOnt9LGRvbUlkOiRZK2krIi0iK19ndH0sX2d0KyspfSxhZGRDbGFzc2VzVG9OYW1lc3BhY2U6ZnVuY3Rpb24oaSxhKXt4a1tpXSE9PXZvaWQgMCYmYS5tYXAoZj0+e0psW2ZdLnBhcmVudD1pLHhrW2ldLmNsYXNzZXNbZl09SmxbZl19KX0sZ2V0TmFtZXNwYWNlOmZ1bmN0aW9uKGkpe3JldHVybiB4a1tpXX0sZ2V0TmFtZXNwYWNlczpmdW5jdGlvbigpe3JldHVybiB4a319LEtSdD1pPT5gZy5jbGFzc0dyb3VwIHRleHQgewogIGZpbGw6ICR7aS5ub2RlQm9yZGVyfHxpLmNsYXNzVGV4dH07CiAgc3Ryb2tlOiBub25lOwogIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgZm9udC1zaXplOiAxMHB4OwoKICAudGl0bGUgewogICAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKICB9Cgp9Cgoubm9kZUxhYmVsLCAuZWRnZUxhYmVsIHsKICBjb2xvcjogJHtpLmNsYXNzVGV4dH07Cn0KLmVkZ2VMYWJlbCAubGFiZWwgcmVjdCB7CiAgZmlsbDogJHtpLm1haW5Ca2d9Owp9Ci5sYWJlbCB0ZXh0IHsKICBmaWxsOiAke2kuY2xhc3NUZXh0fTsKfQouZWRnZUxhYmVsIC5sYWJlbCBzcGFuIHsKICBiYWNrZ3JvdW5kOiAke2kubWFpbkJrZ307Cn0KCi5jbGFzc1RpdGxlIHsKICBmb250LXdlaWdodDogYm9sZGVyOwp9Ci5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7aS5tYWluQmtnfTsKICAgIHN0cm9rZTogJHtpLm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKCi5kaXZpZGVyIHsKICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCmcuY2xpY2thYmxlIHsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCmcuY2xhc3NHcm91cCByZWN0IHsKICBmaWxsOiAke2kubWFpbkJrZ307CiAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07Cn0KCmcuY2xhc3NHcm91cCBsaW5lIHsKICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCi5jbGFzc0xhYmVsIC5ib3ggewogIHN0cm9rZTogbm9uZTsKICBzdHJva2Utd2lkdGg6IDA7CiAgZmlsbDogJHtpLm1haW5Ca2d9OwogIG9wYWNpdHk6IDAuNTsKfQoKLmNsYXNzTGFiZWwgLmxhYmVsIHsKICBmaWxsOiAke2kubm9kZUJvcmRlcn07CiAgZm9udC1zaXplOiAxMHB4Owp9CgoucmVsYXRpb24gewogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwogIGZpbGw6IG5vbmU7Cn0KCi5kYXNoZWQtbGluZXsKICBzdHJva2UtZGFzaGFycmF5OiAzOwp9CgouZG90dGVkLWxpbmV7CiAgc3Ryb2tlLWRhc2hhcnJheTogMSAyOwp9CgojY29tcG9zaXRpb25TdGFydCwgLmNvbXBvc2l0aW9uIHsKICBmaWxsOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNjb21wb3NpdGlvbkVuZCwgLmNvbXBvc2l0aW9uIHsKICBmaWxsOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHsKICBmaWxsOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHsKICBmaWxsOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNleHRlbnNpb25TdGFydCwgLmV4dGVuc2lvbiB7CiAgZmlsbDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojZXh0ZW5zaW9uRW5kLCAuZXh0ZW5zaW9uIHsKICBmaWxsOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNhZ2dyZWdhdGlvblN0YXJ0LCAuYWdncmVnYXRpb24gewogIGZpbGw6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2FnZ3JlZ2F0aW9uRW5kLCAuYWdncmVnYXRpb24gewogIGZpbGw6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2xvbGxpcG9wU3RhcnQsIC5sb2xsaXBvcCB7CiAgZmlsbDogJHtpLm1haW5Ca2d9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2xvbGxpcG9wRW5kLCAubG9sbGlwb3AgewogIGZpbGw6ICR7aS5tYWluQmtnfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCi5lZGdlVGVybWluYWxzIHsKICBmb250LXNpemU6IDExcHg7Cn0KCi5jbGFzc1RpdGxlVGV4dCB7CiAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICBmb250LXNpemU6IDE4cHg7CiAgZmlsbDogJHtpLnRleHRDb2xvcn07Cn0KYDtsZXQgWFJ0PTA7Y29uc3QgVEdlPWZ1bmN0aW9uKGksYSxmLHAsdyl7Y29uc3QgbT1mdW5jdGlvbihhdCl7c3dpdGNoKGF0KXtjYXNlIHcuZGIucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OOnJldHVybiJhZ2dyZWdhdGlvbiI7Y2FzZSB3LmRiLnJlbGF0aW9uVHlwZS5FWFRFTlNJT046cmV0dXJuImV4dGVuc2lvbiI7Y2FzZSB3LmRiLnJlbGF0aW9uVHlwZS5DT01QT1NJVElPTjpyZXR1cm4iY29tcG9zaXRpb24iO2Nhc2Ugdy5kYi5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTpyZXR1cm4iZGVwZW5kZW5jeSI7Y2FzZSB3LmRiLnJlbGF0aW9uVHlwZS5MT0xMSVBPUDpyZXR1cm4ibG9sbGlwb3AifX07YS5wb2ludHM9YS5wb2ludHMuZmlsdGVyKGF0PT4hTnVtYmVyLmlzTmFOKGF0LnkpKTtjb25zdCBiPWEucG9pbnRzLEU9RTUoKS54KGZ1bmN0aW9uKGF0KXtyZXR1cm4gYXQueH0pLnkoZnVuY3Rpb24oYXQpe3JldHVybiBhdC55fSkuY3VydmUoSFApLF89aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixFKGIpKS5hdHRyKCJpZCIsImVkZ2UiK1hSdCkuYXR0cigiY2xhc3MiLCJyZWxhdGlvbiIpO2xldCBBPSIiO3AuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKEE9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gsQT1BLnJlcGxhY2UoL1woL2csIlxcKCIpLEE9QS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksZi5yZWxhdGlvbi5saW5lVHlwZT09MSYmXy5hdHRyKCJjbGFzcyIsInJlbGF0aW9uIGRhc2hlZC1saW5lIiksZi5yZWxhdGlvbi5saW5lVHlwZT09MTAmJl8uYXR0cigiY2xhc3MiLCJyZWxhdGlvbiBkb3R0ZWQtbGluZSIpLGYucmVsYXRpb24udHlwZTEhPT0ibm9uZSImJl8uYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrQSsiIyIrbShmLnJlbGF0aW9uLnR5cGUxKSsiU3RhcnQpIiksZi5yZWxhdGlvbi50eXBlMiE9PSJub25lIiYmXy5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrQSsiIyIrbShmLnJlbGF0aW9uLnR5cGUyKSsiRW5kKSIpO2xldCBJLEI7Y29uc3QgTj1hLnBvaW50cy5sZW5ndGg7bGV0IFI9JGEuY2FsY0xhYmVsUG9zaXRpb24oYS5wb2ludHMpO0k9Ui54LEI9Ui55O2xldCB6LFcsZXQsc3Q7aWYoTiUyIT09MCYmTj4xKXtsZXQgYXQ9JGEuY2FsY0NhcmRpbmFsaXR5UG9zaXRpb24oZi5yZWxhdGlvbi50eXBlMSE9PSJub25lIixhLnBvaW50cyxhLnBvaW50c1swXSksYnQ9JGEuY2FsY0NhcmRpbmFsaXR5UG9zaXRpb24oZi5yZWxhdGlvbi50eXBlMiE9PSJub25lIixhLnBvaW50cyxhLnBvaW50c1tOLTFdKTtVdC5kZWJ1ZygiY2FyZGluYWxpdHlfMV9wb2ludCAiK0pTT04uc3RyaW5naWZ5KGF0KSksVXQuZGVidWcoImNhcmRpbmFsaXR5XzJfcG9pbnQgIitKU09OLnN0cmluZ2lmeShidCkpLHo9YXQueCxXPWF0LnksZXQ9YnQueCxzdD1idC55fWlmKGYudGl0bGUhPT12b2lkIDApe2NvbnN0IGF0PWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjbGFzc0xhYmVsIiksYnQ9YXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoIngiLEkpLmF0dHIoInkiLEIpLmF0dHIoImZpbGwiLCJyZWQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoZi50aXRsZSk7d2luZG93LmxhYmVsPWJ0O2NvbnN0IG10PWJ0Lm5vZGUoKS5nZXRCQm94KCk7YXQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJib3giKS5hdHRyKCJ4IixtdC54LXAucGFkZGluZy8yKS5hdHRyKCJ5IixtdC55LXAucGFkZGluZy8yKS5hdHRyKCJ3aWR0aCIsbXQud2lkdGgrcC5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLG10LmhlaWdodCtwLnBhZGRpbmcpfVV0LmluZm8oIlJlbmRlcmluZyByZWxhdGlvbiAiK0pTT04uc3RyaW5naWZ5KGYpKSxmLnJlbGF0aW9uVGl0bGUxIT09dm9pZCAwJiZmLnJlbGF0aW9uVGl0bGUxIT09Im5vbmUiJiZpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2FyZGluYWxpdHkiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInR5cGUxIikuYXR0cigieCIseikuYXR0cigieSIsVykuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigiZm9udC1zaXplIiwiNiIpLnRleHQoZi5yZWxhdGlvblRpdGxlMSksZi5yZWxhdGlvblRpdGxlMiE9PXZvaWQgMCYmZi5yZWxhdGlvblRpdGxlMiE9PSJub25lIiYmaS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNhcmRpbmFsaXR5IikuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJ0eXBlMiIpLmF0dHIoIngiLGV0KS5hdHRyKCJ5IixzdCkuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigiZm9udC1zaXplIiwiNiIpLnRleHQoZi5yZWxhdGlvblRpdGxlMiksWFJ0Kyt9LENHZT1mdW5jdGlvbihpLGEsZixwKXtVdC5kZWJ1ZygiUmVuZGVyaW5nIGNsYXNzICIsYSxmKTtjb25zdCB3PWEuaWQsbT17aWQ6dyxsYWJlbDphLmlkLHdpZHRoOjAsaGVpZ2h0OjB9LGI9aS5hcHBlbmQoImciKS5hdHRyKCJpZCIscC5kYi5sb29rVXBEb21JZCh3KSkuYXR0cigiY2xhc3MiLCJjbGFzc0dyb3VwIik7bGV0IEU7YS5saW5rP0U9Yi5hcHBlbmQoInN2ZzphIikuYXR0cigieGxpbms6aHJlZiIsYS5saW5rKS5hdHRyKCJ0YXJnZXQiLGEubGlua1RhcmdldCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieSIsZi50ZXh0SGVpZ2h0K2YucGFkZGluZykuYXR0cigieCIsMCk6RT1iLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLGYudGV4dEhlaWdodCtmLnBhZGRpbmcpLmF0dHIoIngiLDApO2xldCBfPSEwO2EuYW5ub3RhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihidCl7Y29uc3QgbXQ9RS5hcHBlbmQoInRzcGFuIikudGV4dCgiwqsiK2J0KyLCuyIpO198fG10LmF0dHIoImR5IixmLnRleHRIZWlnaHQpLF89ITF9KTtsZXQgQT1RUnQoYSk7Y29uc3QgST1FLmFwcGVuZCgidHNwYW4iKS50ZXh0KEEpLmF0dHIoImNsYXNzIiwidGl0bGUiKTtffHxJLmF0dHIoImR5IixmLnRleHRIZWlnaHQpO2NvbnN0IEI9RS5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodDtsZXQgTixSLHo7aWYoYS5tZW1iZXJzLmxlbmd0aD4wKXtOPWIuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoInkxIixmLnBhZGRpbmcrQitmLmRpdmlkZXJNYXJnaW4vMikuYXR0cigieTIiLGYucGFkZGluZytCK2YuZGl2aWRlck1hcmdpbi8yKTtjb25zdCBidD1iLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGYucGFkZGluZykuYXR0cigieSIsQitmLmRpdmlkZXJNYXJnaW4rZi50ZXh0SGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjbGFzcyIsImNsYXNzVGV4dCIpO189ITAsYS5tZW1iZXJzLmZvckVhY2goZnVuY3Rpb24obXQpe1pSdChidCxtdCxfLGYpLF89ITF9KSxSPWJ0Lm5vZGUoKS5nZXRCQm94KCl9aWYoYS5tZXRob2RzLmxlbmd0aD4wKXt6PWIuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoInkxIixmLnBhZGRpbmcrQitmLmRpdmlkZXJNYXJnaW4rUi5oZWlnaHQpLmF0dHIoInkyIixmLnBhZGRpbmcrQitmLmRpdmlkZXJNYXJnaW4rUi5oZWlnaHQpO2NvbnN0IGJ0PWIuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsZi5wYWRkaW5nKS5hdHRyKCJ5IixCKzIqZi5kaXZpZGVyTWFyZ2luK1IuaGVpZ2h0K2YudGV4dEhlaWdodCkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY2xhc3MiLCJjbGFzc1RleHQiKTtfPSEwLGEubWV0aG9kcy5mb3JFYWNoKGZ1bmN0aW9uKG10KXtaUnQoYnQsbXQsXyxmKSxfPSExfSl9Y29uc3QgVz1iLm5vZGUoKS5nZXRCQm94KCk7dmFyIGV0PSIgIjthLmNzc0NsYXNzZXMubGVuZ3RoPjAmJihldD1ldCthLmNzc0NsYXNzZXMuam9pbigiICIpKTtjb25zdCBhdD1iLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIixXLndpZHRoKzIqZi5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLFcuaGVpZ2h0K2YucGFkZGluZysuNSpmLmRpdmlkZXJNYXJnaW4pLmF0dHIoImNsYXNzIixldCkubm9kZSgpLmdldEJCb3goKS53aWR0aDtyZXR1cm4gRS5ub2RlKCkuY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKGJ0KXtidC5zZXRBdHRyaWJ1dGUoIngiLChhdC1idC5nZXRCQm94KCkud2lkdGgpLzIpfSksYS50b29sdGlwJiZFLmluc2VydCgidGl0bGUiKS50ZXh0KGEudG9vbHRpcCksTiYmTi5hdHRyKCJ4MiIsYXQpLHomJnouYXR0cigieDIiLGF0KSxtLndpZHRoPWF0LG0uaGVpZ2h0PVcuaGVpZ2h0K2YucGFkZGluZysuNSpmLmRpdmlkZXJNYXJnaW4sbX0sUVJ0PWZ1bmN0aW9uKGkpe2xldCBhPWkuaWQ7cmV0dXJuIGkudHlwZSYmKGErPSI8IitZUChpLnR5cGUpKyI+IiksYX0sX0dlPWZ1bmN0aW9uKGksYSxmLHApe1V0LmRlYnVnKCJSZW5kZXJpbmcgbm90ZSAiLGEsZik7Y29uc3Qgdz1hLmlkLG09e2lkOncsdGV4dDphLnRleHQsd2lkdGg6MCxoZWlnaHQ6MH0sYj1pLmFwcGVuZCgiZyIpLmF0dHIoImlkIix3KS5hdHRyKCJjbGFzcyIsImNsYXNzR3JvdXAiKTtsZXQgRT1iLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLGYudGV4dEhlaWdodCtmLnBhZGRpbmcpLmF0dHIoIngiLDApO2NvbnN0IF89SlNPTi5wYXJzZShgIiR7YS50ZXh0fSJgKS5zcGxpdChgCmApO18uZm9yRWFjaChmdW5jdGlvbihOKXtVdC5kZWJ1ZyhgQWRkaW5nIGxpbmU6ICR7Tn1gKSxFLmFwcGVuZCgidHNwYW4iKS50ZXh0KE4pLmF0dHIoImNsYXNzIiwidGl0bGUiKS5hdHRyKCJkeSIsZi50ZXh0SGVpZ2h0KX0pO2NvbnN0IEE9Yi5ub2RlKCkuZ2V0QkJveCgpLEI9Yi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsQS53aWR0aCsyKmYucGFkZGluZykuYXR0cigiaGVpZ2h0IixBLmhlaWdodCtfLmxlbmd0aCpmLnRleHRIZWlnaHQrZi5wYWRkaW5nKy41KmYuZGl2aWRlck1hcmdpbikubm9kZSgpLmdldEJCb3goKS53aWR0aDtyZXR1cm4gRS5ub2RlKCkuY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKE4pe04uc2V0QXR0cmlidXRlKCJ4IiwoQi1OLmdldEJCb3goKS53aWR0aCkvMil9KSxtLndpZHRoPUIsbS5oZWlnaHQ9QS5oZWlnaHQrXy5sZW5ndGgqZi50ZXh0SGVpZ2h0K2YucGFkZGluZysuNSpmLmRpdmlkZXJNYXJnaW4sbX0sWlJ0PWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0e2Rpc3BsYXlUZXh0OncsY3NzU3R5bGU6bX09YS5nZXREaXNwbGF5RGV0YWlscygpLGI9aS5hcHBlbmQoInRzcGFuIikuYXR0cigieCIscC5wYWRkaW5nKS50ZXh0KHcpO20hPT0iIiYmYi5hdHRyKCJzdHlsZSIsYS5jc3NTdHlsZSksZnx8Yi5hdHRyKCJkeSIscC50ZXh0SGVpZ2h0KX0sQWd0PXtnZXRDbGFzc1RpdGxlU3RyaW5nOlFSdCxkcmF3Q2xhc3M6Q0dlLGRyYXdFZGdlOlRHZSxkcmF3Tm90ZTpfR2V9O2xldCBWWT17fTtjb25zdCBHWT0yMCxZRj1mdW5jdGlvbihpKXtjb25zdCBhPU9iamVjdC5lbnRyaWVzKFZZKS5maW5kKGY9PmZbMV0ubGFiZWw9PT1pKTtpZihhKXJldHVybiBhWzBdfSxTR2U9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSw3IEwxOCwxMyBWIDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImV4dGVuc2lvbkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgViAxMyBMMTgsNyBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwiZXh0ZW5zaW9uIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY29tcG9zaXRpb25FbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFnZ3JlZ2F0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFnZ3JlZ2F0aW9uRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJkZXBlbmRlbmN5U3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gNSw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSxBR2U9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjp6UnQsZGI6SFkscmVuZGVyZXI6e2RyYXc6ZnVuY3Rpb24oaSxhLGYscCl7Y29uc3Qgdz1PZSgpLmNsYXNzO1ZZPXt9LFV0LmluZm8oIlJlbmRlcmluZyBkaWFncmFtICIraSk7Y29uc3QgbT1PZSgpLnNlY3VyaXR5TGV2ZWw7bGV0IGI7bT09PSJzYW5kYm94IiYmKGI9eXIoIiNpIithKSk7Y29uc3QgRT15cihtPT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLF89RS5zZWxlY3QoYFtpZD0nJHthfSddYCk7U0dlKF8pO2NvbnN0IEE9bmV3IGMxKHttdWx0aWdyYXBoOiEwfSk7QS5zZXRHcmFwaCh7aXNNdWx0aUdyYXBoOiEwfSksQS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KTtjb25zdCBJPXAuZGIuZ2V0Q2xhc3NlcygpLEI9T2JqZWN0LmtleXMoSSk7Zm9yKGNvbnN0IGF0IG9mIEIpe2NvbnN0IGJ0PUlbYXRdLG10PUFndC5kcmF3Q2xhc3MoXyxidCx3LHApO1ZZW210LmlkXT1tdCxBLnNldE5vZGUobXQuaWQsbXQpLFV0LmluZm8oIk9yZyBoZWlnaHQ6ICIrbXQuaGVpZ2h0KX1wLmRiLmdldFJlbGF0aW9ucygpLmZvckVhY2goZnVuY3Rpb24oYXQpe1V0LmluZm8oInRqb2hvIitZRihhdC5pZDEpK1lGKGF0LmlkMikrSlNPTi5zdHJpbmdpZnkoYXQpKSxBLnNldEVkZ2UoWUYoYXQuaWQxKSxZRihhdC5pZDIpLHtyZWxhdGlvbjphdH0sYXQudGl0bGV8fCJERUZBVUxUIil9KSxwLmRiLmdldE5vdGVzKCkuZm9yRWFjaChmdW5jdGlvbihhdCl7VXQuZGVidWcoYEFkZGluZyBub3RlOiAke0pTT04uc3RyaW5naWZ5KGF0KX1gKTtjb25zdCBidD1BZ3QuZHJhd05vdGUoXyxhdCx3LHApO1ZZW2J0LmlkXT1idCxBLnNldE5vZGUoYnQuaWQsYnQpLGF0LmNsYXNzJiZhdC5jbGFzcyBpbiBJJiZBLnNldEVkZ2UoYXQuaWQsWUYoYXQuY2xhc3MpLHtyZWxhdGlvbjp7aWQxOmF0LmlkLGlkMjphdC5jbGFzcyxyZWxhdGlvbjp7dHlwZTE6Im5vbmUiLHR5cGUyOiJub25lIixsaW5lVHlwZToxMH19fSwiREVGQVVMVCIpfSksYUwoQSksQS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oYXQpe2F0IT09dm9pZCAwJiZBLm5vZGUoYXQpIT09dm9pZCAwJiYoVXQuZGVidWcoIk5vZGUgIithdCsiOiAiK0pTT04uc3RyaW5naWZ5KEEubm9kZShhdCkpKSxFLnNlbGVjdCgiIyIrKHAuZGIubG9va1VwRG9tSWQoYXQpfHxhdCkpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhBLm5vZGUoYXQpLngtQS5ub2RlKGF0KS53aWR0aC8yKSsiLCIrKEEubm9kZShhdCkueS1BLm5vZGUoYXQpLmhlaWdodC8yKSsiICkiKSl9KSxBLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihhdCl7YXQhPT12b2lkIDAmJkEuZWRnZShhdCkhPT12b2lkIDAmJihVdC5kZWJ1ZygiRWRnZSAiK2F0LnYrIiAtPiAiK2F0LncrIjogIitKU09OLnN0cmluZ2lmeShBLmVkZ2UoYXQpKSksQWd0LmRyYXdFZGdlKF8sQS5lZGdlKGF0KSxBLmVkZ2UoYXQpLnJlbGF0aW9uLHcscCkpfSk7Y29uc3Qgej1fLm5vZGUoKS5nZXRCQm94KCksVz16LndpZHRoK0dZKjIsZXQ9ei5oZWlnaHQrR1kqMjtrMChfLGV0LFcsdy51c2VNYXhXaWR0aCk7Y29uc3Qgc3Q9YCR7ei54LUdZfSAke3oueS1HWX0gJHtXfSAke2V0fWA7VXQuZGVidWcoYHZpZXdCb3ggJHtzdH1gKSxfLmF0dHIoInZpZXdCb3giLHN0KX19LHN0eWxlczpLUnQsaW5pdDppPT57aS5jbGFzc3x8KGkuY2xhc3M9e30pLGkuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT1pLmFycm93TWFya2VyQWJzb2x1dGUsSFkuY2xlYXIoKX19fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLExndD1pPT5Lci5zYW5pdGl6ZVRleHQoaSxPZSgpKTtsZXQgTWd0PXtkaXZpZGVyTWFyZ2luOjEwLHBhZGRpbmc6NSx0ZXh0SGVpZ2h0OjEwLGN1cnZlOnZvaWQgMH07Y29uc3QgTEdlPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHc9T2JqZWN0LmtleXMoaSk7VXQuaW5mbygia2V5czoiLHcpLFV0LmluZm8oaSksdy5mb3JFYWNoKGZ1bmN0aW9uKG0pe3ZhciBBLEk7Y29uc3QgYj1pW21dLF89e3NoYXBlOiJyZWN0IixpZDpiLmlkLGRvbUlkOmIuZG9tSWQsbGFiZWxUZXh0OkxndChiLmlkKSxsYWJlbFN0eWxlOiIiLHN0eWxlOiJmaWxsOiBub25lOyBzdHJva2U6IGJsYWNrIixwYWRkaW5nOigoQT1PZSgpLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOkEucGFkZGluZyk/PygoST1PZSgpLmNsYXNzKT09bnVsbD92b2lkIDA6SS5wYWRkaW5nKX07YS5zZXROb2RlKGIuaWQsXyksSlJ0KGIuY2xhc3NlcyxhLGYscCxiLmlkKSxVdC5pbmZvKCJzZXROb2RlIixfKX0pfSxKUnQ9ZnVuY3Rpb24oaSxhLGYscCx3KXtjb25zdCBtPU9iamVjdC5rZXlzKGkpO1V0LmluZm8oImtleXM6IixtKSxVdC5pbmZvKGkpLG0uZmlsdGVyKGI9PmlbYl0ucGFyZW50PT13KS5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciB6LFc7Y29uc3QgRT1pW2JdLF89RS5jc3NDbGFzc2VzLmpvaW4oIiAiKSxBPXtsYWJlbFN0eWxlOiIiLHN0eWxlOiIifSxJPUUubGFiZWw/P0UuaWQsQj0wLE49ImNsYXNzX2JveCIsUj17bGFiZWxTdHlsZTpBLmxhYmVsU3R5bGUsc2hhcGU6TixsYWJlbFRleHQ6TGd0KEkpLGNsYXNzRGF0YTpFLHJ4OkIscnk6QixjbGFzczpfLHN0eWxlOkEuc3R5bGUsaWQ6RS5pZCxkb21JZDpFLmRvbUlkLHRvb2x0aXA6cC5kYi5nZXRUb29sdGlwKEUuaWQsdyl8fCIiLGhhdmVDYWxsYmFjazpFLmhhdmVDYWxsYmFjayxsaW5rOkUubGluayx3aWR0aDpFLnR5cGU9PT0iZ3JvdXAiPzUwMDp2b2lkIDAsdHlwZTpFLnR5cGUscGFkZGluZzooKHo9T2UoKS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDp6LnBhZGRpbmcpPz8oKFc9T2UoKS5jbGFzcyk9PW51bGw/dm9pZCAwOlcucGFkZGluZyl9O2Euc2V0Tm9kZShFLmlkLFIpLHcmJmEuc2V0UGFyZW50KEUuaWQsdyksVXQuaW5mbygic2V0Tm9kZSIsUil9KX0sTUdlPWZ1bmN0aW9uKGksYSxmLHApe1V0LmluZm8oaSksaS5mb3JFYWNoKGZ1bmN0aW9uKHcsbSl7dmFyIFcsZXQ7Y29uc3QgYj13LEU9IiIsXz17bGFiZWxTdHlsZToiIixzdHlsZToiIn0sQT1iLnRleHQsST0wLEI9Im5vdGUiLE49e2xhYmVsU3R5bGU6Xy5sYWJlbFN0eWxlLHNoYXBlOkIsbGFiZWxUZXh0OkxndChBKSxub3RlRGF0YTpiLHJ4Okkscnk6SSxjbGFzczpFLHN0eWxlOl8uc3R5bGUsaWQ6Yi5pZCxkb21JZDpiLmlkLHRvb2x0aXA6IiIsdHlwZToibm90ZSIscGFkZGluZzooKFc9T2UoKS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpXLnBhZGRpbmcpPz8oKGV0PU9lKCkuY2xhc3MpPT1udWxsP3ZvaWQgMDpldC5wYWRkaW5nKX07aWYoYS5zZXROb2RlKGIuaWQsTiksVXQuaW5mbygic2V0Tm9kZSIsTiksIWIuY2xhc3N8fCEoYi5jbGFzcyBpbiBwKSlyZXR1cm47Y29uc3QgUj1mK20sej17aWQ6YGVkZ2VOb3RlJHtSfWAsY2xhc3NlczoicmVsYXRpb24iLHBhdHRlcm46ImRvdHRlZCIsYXJyb3doZWFkOiJub25lIixzdGFydExhYmVsUmlnaHQ6IiIsZW5kTGFiZWxMZWZ0OiIiLGFycm93VHlwZVN0YXJ0OiJub25lIixhcnJvd1R5cGVFbmQ6Im5vbmUiLHN0eWxlOiJmaWxsOm5vbmUiLGxhYmVsU3R5bGU6IiIsY3VydmU6ZXcoTWd0LmN1cnZlLGNnKX07YS5zZXRFZGdlKGIuaWQsYi5jbGFzcyx6LFIpfSl9LERHZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9T2UoKS5mbG93Y2hhcnQ7bGV0IHA9MDtpLmZvckVhY2goZnVuY3Rpb24odyl7dmFyIGI7cCsrO2NvbnN0IG09e2NsYXNzZXM6InJlbGF0aW9uIixwYXR0ZXJuOncucmVsYXRpb24ubGluZVR5cGU9PTE/ImRhc2hlZCI6InNvbGlkIixpZDoiaWQiK3AsYXJyb3doZWFkOncudHlwZT09PSJhcnJvd19vcGVuIj8ibm9uZSI6Im5vcm1hbCIsc3RhcnRMYWJlbFJpZ2h0OncucmVsYXRpb25UaXRsZTE9PT0ibm9uZSI/IiI6dy5yZWxhdGlvblRpdGxlMSxlbmRMYWJlbExlZnQ6dy5yZWxhdGlvblRpdGxlMj09PSJub25lIj8iIjp3LnJlbGF0aW9uVGl0bGUyLGFycm93VHlwZVN0YXJ0OnRqdCh3LnJlbGF0aW9uLnR5cGUxKSxhcnJvd1R5cGVFbmQ6dGp0KHcucmVsYXRpb24udHlwZTIpLHN0eWxlOiJmaWxsOm5vbmUiLGxhYmVsU3R5bGU6IiIsY3VydmU6ZXcoZj09bnVsbD92b2lkIDA6Zi5jdXJ2ZSxjZyl9O2lmKFV0LmluZm8obSx3KSx3LnN0eWxlIT09dm9pZCAwKXtjb25zdCBFPWltKHcuc3R5bGUpO20uc3R5bGU9RS5zdHlsZSxtLmxhYmVsU3R5bGU9RS5sYWJlbFN0eWxlfXcudGV4dD13LnRpdGxlLHcudGV4dD09PXZvaWQgMD93LnN0eWxlIT09dm9pZCAwJiYobS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihtLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixtLmxhYmVscG9zPSJjIiwoKGI9T2UoKS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpiLmh0bWxMYWJlbHMpPz9PZSgpLmh0bWxMYWJlbHM/KG0ubGFiZWxUeXBlPSJodG1sIixtLmxhYmVsPSc8c3BhbiBjbGFzcz0iZWRnZUxhYmVsIj4nK3cudGV4dCsiPC9zcGFuPiIpOihtLmxhYmVsVHlwZT0idGV4dCIsbS5sYWJlbD13LnRleHQucmVwbGFjZShLci5saW5lQnJlYWtSZWdleCxgCmApLHcuc3R5bGU9PT12b2lkIDAmJihtLnN0eWxlPW0uc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lIiksbS5sYWJlbFN0eWxlPW0ubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKSksYS5zZXRFZGdlKHcuaWQxLHcuaWQyLG0scCl9KX0sSUdlPWZ1bmN0aW9uKGkpe01ndD17Li4uTWd0LC4uLml9fSxPR2U9YXN5bmMgZnVuY3Rpb24oaSxhLGYscCl7VXQuaW5mbygiRHJhd2luZyBjbGFzcyAtICIsYSk7Y29uc3Qgdz1PZSgpLmZsb3djaGFydD8/T2UoKS5jbGFzcyxtPU9lKCkuc2VjdXJpdHlMZXZlbDtVdC5pbmZvKCJjb25maWc6Iix3KTtjb25zdCBiPSh3PT1udWxsP3ZvaWQgMDp3Lm5vZGVTcGFjaW5nKT8/NTAsRT0odz09bnVsbD92b2lkIDA6dy5yYW5rU3BhY2luZyk/PzUwLF89bmV3IGMxKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6cC5kYi5nZXREaXJlY3Rpb24oKSxub2Rlc2VwOmIscmFua3NlcDpFLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KSxBPXAuZGIuZ2V0TmFtZXNwYWNlcygpLEk9cC5kYi5nZXRDbGFzc2VzKCksQj1wLmRiLmdldFJlbGF0aW9ucygpLE49cC5kYi5nZXROb3RlcygpO1V0LmluZm8oQiksTEdlKEEsXyxhLHApLEpSdChJLF8sYSxwKSxER2UoQixfKSxNR2UoTixfLEIubGVuZ3RoKzEsSSk7bGV0IFI7bT09PSJzYW5kYm94IiYmKFI9eXIoIiNpIithKSk7Y29uc3Qgej15cihtPT09InNhbmRib3giP1Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLFc9ei5zZWxlY3QoYFtpZD0iJHthfSJdYCksZXQ9ei5zZWxlY3QoIiMiK2ErIiBnIik7aWYoYXdhaXQgTjB0KGV0LF8sWyJhZ2dyZWdhdGlvbiIsImV4dGVuc2lvbiIsImNvbXBvc2l0aW9uIiwiZGVwZW5kZW5jeSIsImxvbGxpcG9wIl0sImNsYXNzRGlhZ3JhbSIsYSksJGEuaW5zZXJ0VGl0bGUoVywiY2xhc3NUaXRsZVRleHQiLCh3PT1udWxsP3ZvaWQgMDp3LnRpdGxlVG9wTWFyZ2luKT8/NSxwLmRiLmdldERpYWdyYW1UaXRsZSgpKSxmVChfLFcsdz09bnVsbD92b2lkIDA6dy5kaWFncmFtUGFkZGluZyx3PT1udWxsP3ZvaWQgMDp3LnVzZU1heFdpZHRoKSwhKHchPW51bGwmJncuaHRtbExhYmVscykpe2NvbnN0IHN0PW09PT0ic2FuZGJveCI/Ui5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudDpkb2N1bWVudCxhdD1zdC5xdWVyeVNlbGVjdG9yQWxsKCdbaWQ9IicrYSsnIl0gLmVkZ2VMYWJlbCAubGFiZWwnKTtmb3IoY29uc3QgYnQgb2YgYXQpe2NvbnN0IG10PWJ0LmdldEJCb3goKSx5dD1zdC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVjdCIpO3l0LnNldEF0dHJpYnV0ZSgicngiLDApLHl0LnNldEF0dHJpYnV0ZSgicnkiLDApLHl0LnNldEF0dHJpYnV0ZSgid2lkdGgiLG10LndpZHRoKSx5dC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsbXQuaGVpZ2h0KSxidC5pbnNlcnRCZWZvcmUoeXQsYnQuZmlyc3RDaGlsZCl9fX07ZnVuY3Rpb24gdGp0KGkpe2xldCBhO3N3aXRjaChpKXtjYXNlIDA6YT0iYWdncmVnYXRpb24iO2JyZWFrO2Nhc2UgMTphPSJleHRlbnNpb24iO2JyZWFrO2Nhc2UgMjphPSJjb21wb3NpdGlvbiI7YnJlYWs7Y2FzZSAzOmE9ImRlcGVuZGVuY3kiO2JyZWFrO2Nhc2UgNDphPSJsb2xsaXBvcCI7YnJlYWs7ZGVmYXVsdDphPSJub25lIn1yZXR1cm4gYX1jb25zdCBQR2U9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjp6UnQsZGI6SFkscmVuZGVyZXI6e3NldENvbmY6SUdlLGRyYXc6T0dlfSxzdHlsZXM6S1J0LGluaXQ6aT0+e2kuY2xhc3N8fChpLmNsYXNzPXt9KSxpLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9aS5hcnJvd01hcmtlckFic29sdXRlLEhZLmNsZWFyKCl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgRGd0PWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oRXQsWixDdCx4dCl7Zm9yKEN0PUN0fHx7fSx4dD1FdC5sZW5ndGg7eHQtLTtDdFtFdFt4dF1dPVopO3JldHVybiBDdH0sYT1bMSwyXSxmPVsxLDNdLHA9WzEsNF0sdz1bMiw0XSxtPVsxLDldLGI9WzEsMTFdLEU9WzEsMTVdLF89WzEsMTZdLEE9WzEsMTddLEk9WzEsMThdLEI9WzEsMzBdLE49WzEsMTldLFI9WzEsMjBdLHo9WzEsMjFdLFc9WzEsMjJdLGV0PVsxLDIzXSxzdD1bMSwyNV0sYXQ9WzEsMjZdLGJ0PVsxLDI3XSxtdD1bMSwyOF0seXQ9WzEsMjldLGZ0PVsxLDMyXSx1dD1bMSwzM10sdnQ9WzEsMzRdLFg9WzEsMzVdLHB0PVsxLDMxXSxVPVsxLDQsNSwxNSwxNiwxOCwyMCwyMSwyMywyNCwyNSwyNiwyNywyOCwzMiwzNCwzNiwzNyw0MSw0NCw0NSw0Niw0Nyw1MF0sVHQ9WzEsNCw1LDEzLDE0LDE1LDE2LDE4LDIwLDIxLDIzLDI0LDI1LDI2LDI3LDI4LDMyLDM0LDM2LDM3LDQxLDQ0LDQ1LDQ2LDQ3LDUwXSxudD1bNCw1LDE1LDE2LDE4LDIwLDIxLDIzLDI0LDI1LDI2LDI3LDI4LDMyLDM0LDM2LDM3LDQxLDQ0LDQ1LDQ2LDQ3LDUwXSxJdD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU1BBQ0U6NCxOTDo1LFNEOjYsZG9jdW1lbnQ6NyxsaW5lOjgsc3RhdGVtZW50OjksY2xhc3NEZWZTdGF0ZW1lbnQ6MTAsY3NzQ2xhc3NTdGF0ZW1lbnQ6MTEsaWRTdGF0ZW1lbnQ6MTIsREVTQ1I6MTMsIi0tPiI6MTQsSElERV9FTVBUWToxNSxzY2FsZToxNixXSURUSDoxNyxDT01QT1NJVF9TVEFURToxOCxTVFJVQ1RfU1RBUlQ6MTksU1RSVUNUX1NUT1A6MjAsU1RBVEVfREVTQ1I6MjEsQVM6MjIsSUQ6MjMsRk9SSzoyNCxKT0lOOjI1LENIT0lDRToyNixDT05DVVJSRU5UOjI3LG5vdGU6Mjgsbm90ZVBvc2l0aW9uOjI5LE5PVEVfVEVYVDozMCxkaXJlY3Rpb246MzEsYWNjX3RpdGxlOjMyLGFjY190aXRsZV92YWx1ZTozMyxhY2NfZGVzY3I6MzQsYWNjX2Rlc2NyX3ZhbHVlOjM1LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MzYsY2xhc3NEZWY6MzcsQ0xBU1NERUZfSUQ6MzgsQ0xBU1NERUZfU1RZTEVPUFRTOjM5LERFRkFVTFQ6NDAsY2xhc3M6NDEsQ0xBU1NFTlRJVFlfSURTOjQyLFNUWUxFQ0xBU1M6NDMsZGlyZWN0aW9uX3RiOjQ0LGRpcmVjdGlvbl9idDo0NSxkaXJlY3Rpb25fcmw6NDYsZGlyZWN0aW9uX2xyOjQ3LGVvbDo0OCwiOyI6NDksRURHRV9TVEFURTo1MCxTVFlMRV9TRVBBUkFUT1I6NTEsbGVmdF9vZjo1MixyaWdodF9vZjo1MywkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiU1BBQ0UiLDU6Ik5MIiw2OiJTRCIsMTM6IkRFU0NSIiwxNDoiLS0+IiwxNToiSElERV9FTVBUWSIsMTY6InNjYWxlIiwxNzoiV0lEVEgiLDE4OiJDT01QT1NJVF9TVEFURSIsMTk6IlNUUlVDVF9TVEFSVCIsMjA6IlNUUlVDVF9TVE9QIiwyMToiU1RBVEVfREVTQ1IiLDIyOiJBUyIsMjM6IklEIiwyNDoiRk9SSyIsMjU6IkpPSU4iLDI2OiJDSE9JQ0UiLDI3OiJDT05DVVJSRU5UIiwyODoibm90ZSIsMzA6Ik5PVEVfVEVYVCIsMzI6ImFjY190aXRsZSIsMzM6ImFjY190aXRsZV92YWx1ZSIsMzQ6ImFjY19kZXNjciIsMzU6ImFjY19kZXNjcl92YWx1ZSIsMzY6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDM3OiJjbGFzc0RlZiIsMzg6IkNMQVNTREVGX0lEIiwzOToiQ0xBU1NERUZfU1RZTEVPUFRTIiw0MDoiREVGQVVMVCIsNDE6ImNsYXNzIiw0MjoiQ0xBU1NFTlRJVFlfSURTIiw0MzoiU1RZTEVDTEFTUyIsNDQ6ImRpcmVjdGlvbl90YiIsNDU6ImRpcmVjdGlvbl9idCIsNDY6ImRpcmVjdGlvbl9ybCIsNDc6ImRpcmVjdGlvbl9sciIsNDk6IjsiLDUwOiJFREdFX1NUQVRFIiw1MToiU1RZTEVfU0VQQVJBVE9SIiw1MjoibGVmdF9vZiIsNTM6InJpZ2h0X29mIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDJdLFszLDJdLFs3LDBdLFs3LDJdLFs4LDJdLFs4LDFdLFs4LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDJdLFs5LDNdLFs5LDRdLFs5LDFdLFs5LDJdLFs5LDFdLFs5LDRdLFs5LDNdLFs5LDZdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDRdLFs5LDRdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFsxMCwzXSxbMTAsM10sWzExLDNdLFszMSwxXSxbMzEsMV0sWzMxLDFdLFszMSwxXSxbNDgsMV0sWzQ4LDFdLFsxMiwxXSxbMTIsMV0sWzEyLDNdLFsxMiwzXSxbMjksMV0sWzI5LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKFosQ3QseHQsSHQsTGUsRnQsZ24pe3ZhciBTZT1GdC5sZW5ndGgtMTtzd2l0Y2goTGUpe2Nhc2UgMzpyZXR1cm4gSHQuc2V0Um9vdERvYyhGdFtTZV0pLEZ0W1NlXTtjYXNlIDQ6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNTpGdFtTZV0hPSJubCImJihGdFtTZS0xXS5wdXNoKEZ0W1NlXSksdGhpcy4kPUZ0W1NlLTFdKTticmVhaztjYXNlIDY6Y2FzZSA3OnRoaXMuJD1GdFtTZV07YnJlYWs7Y2FzZSA4OnRoaXMuJD0ibmwiO2JyZWFrO2Nhc2UgMTE6dGhpcy4kPUZ0W1NlXTticmVhaztjYXNlIDEyOmNvbnN0IGNlPUZ0W1NlLTFdO2NlLmRlc2NyaXB0aW9uPUh0LnRyaW1Db2xvbihGdFtTZV0pLHRoaXMuJD1jZTticmVhaztjYXNlIDEzOnRoaXMuJD17c3RtdDoicmVsYXRpb24iLHN0YXRlMTpGdFtTZS0yXSxzdGF0ZTI6RnRbU2VdfTticmVhaztjYXNlIDE0OmNvbnN0IGtlPUh0LnRyaW1Db2xvbihGdFtTZV0pO3RoaXMuJD17c3RtdDoicmVsYXRpb24iLHN0YXRlMTpGdFtTZS0zXSxzdGF0ZTI6RnRbU2UtMV0sZGVzY3JpcHRpb246a2V9O2JyZWFrO2Nhc2UgMTg6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6RnRbU2UtM10sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiIsZG9jOkZ0W1NlLTFdfTticmVhaztjYXNlIDE5OnZhciBtZT1GdFtTZV0sVmU9RnRbU2UtMl0udHJpbSgpO2lmKEZ0W1NlXS5tYXRjaCgiOiIpKXt2YXIgWWU9RnRbU2VdLnNwbGl0KCI6Iik7bWU9WWVbMF0sVmU9W1ZlLFllWzFdXX10aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDptZSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjpWZX07YnJlYWs7Y2FzZSAyMDp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpGdFtTZS0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjpGdFtTZS01XSxkb2M6RnRbU2UtMV19O2JyZWFrO2Nhc2UgMjE6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6RnRbU2VdLHR5cGU6ImZvcmsifTticmVhaztjYXNlIDIyOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOkZ0W1NlXSx0eXBlOiJqb2luIn07YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpGdFtTZV0sdHlwZToiY2hvaWNlIn07YnJlYWs7Y2FzZSAyNDp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpIdC5nZXREaXZpZGVySWQoKSx0eXBlOiJkaXZpZGVyIn07YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpGdFtTZS0xXS50cmltKCksbm90ZTp7cG9zaXRpb246RnRbU2UtMl0udHJpbSgpLHRleHQ6RnRbU2VdLnRyaW0oKX19O2JyZWFrO2Nhc2UgMjg6dGhpcy4kPUZ0W1NlXS50cmltKCksSHQuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDI5OmNhc2UgMzA6dGhpcy4kPUZ0W1NlXS50cmltKCksSHQuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDMxOmNhc2UgMzI6dGhpcy4kPXtzdG10OiJjbGFzc0RlZiIsaWQ6RnRbU2UtMV0udHJpbSgpLGNsYXNzZXM6RnRbU2VdLnRyaW0oKX07YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9e3N0bXQ6ImFwcGx5Q2xhc3MiLGlkOkZ0W1NlLTFdLnRyaW0oKSxzdHlsZUNsYXNzOkZ0W1NlXS50cmltKCl9O2JyZWFrO2Nhc2UgMzQ6SHQuc2V0RGlyZWN0aW9uKCJUQiIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiVEIifTticmVhaztjYXNlIDM1Okh0LnNldERpcmVjdGlvbigiQlQiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkJUIn07YnJlYWs7Y2FzZSAzNjpIdC5zZXREaXJlY3Rpb24oIlJMIiksdGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJSTCJ9O2JyZWFrO2Nhc2UgMzc6SHQuc2V0RGlyZWN0aW9uKCJMUiIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiTFIifTticmVhaztjYXNlIDQwOmNhc2UgNDE6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6RnRbU2VdLnRyaW0oKSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn07YnJlYWs7Y2FzZSA0Mjp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpGdFtTZS0yXS50cmltKCksY2xhc3NlczpbRnRbU2VdLnRyaW0oKV0sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9O2JyZWFrO2Nhc2UgNDM6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6RnRbU2UtMl0udHJpbSgpLGNsYXNzZXM6W0Z0W1NlXS50cmltKCldLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifTticmVha319LHRhYmxlOlt7MzoxLDQ6YSw1OmYsNjpwfSx7MTpbM119LHszOjUsNDphLDU6Ziw2OnB9LHszOjYsNDphLDU6Ziw2OnB9LGkoWzEsNCw1LDE1LDE2LDE4LDIxLDIzLDI0LDI1LDI2LDI3LDI4LDMyLDM0LDM2LDM3LDQxLDQ0LDQ1LDQ2LDQ3LDUwXSx3LHs3Ojd9KSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDNdLDQ6bSw1OmIsODo4LDk6MTAsMTA6MTIsMTE6MTMsMTI6MTQsMTU6RSwxNjpfLDE4OkEsMjE6SSwyMzpCLDI0Ok4sMjU6UiwyNjp6LDI3OlcsMjg6ZXQsMzE6MjQsMzI6c3QsMzQ6YXQsMzY6YnQsMzc6bXQsNDE6eXQsNDQ6ZnQsNDU6dXQsNDY6dnQsNDc6WCw1MDpwdH0saShVLFsyLDVdKSx7OTozNiwxMDoxMiwxMToxMywxMjoxNCwxNTpFLDE2Ol8sMTg6QSwyMTpJLDIzOkIsMjQ6TiwyNTpSLDI2OnosMjc6VywyODpldCwzMToyNCwzMjpzdCwzNDphdCwzNjpidCwzNzptdCw0MTp5dCw0NDpmdCw0NTp1dCw0Njp2dCw0NzpYLDUwOnB0fSxpKFUsWzIsN10pLGkoVSxbMiw4XSksaShVLFsyLDldKSxpKFUsWzIsMTBdKSxpKFUsWzIsMTFdLHsxMzpbMSwzN10sMTQ6WzEsMzhdfSksaShVLFsyLDE1XSksezE3OlsxLDM5XX0saShVLFsyLDE3XSx7MTk6WzEsNDBdfSksezIyOlsxLDQxXX0saShVLFsyLDIxXSksaShVLFsyLDIyXSksaShVLFsyLDIzXSksaShVLFsyLDI0XSksezI5OjQyLDMwOlsxLDQzXSw1MjpbMSw0NF0sNTM6WzEsNDVdfSxpKFUsWzIsMjddKSx7MzM6WzEsNDZdfSx7MzU6WzEsNDddfSxpKFUsWzIsMzBdKSx7Mzg6WzEsNDhdLDQwOlsxLDQ5XX0sezQyOlsxLDUwXX0saShUdCxbMiw0MF0sezUxOlsxLDUxXX0pLGkoVHQsWzIsNDFdLHs1MTpbMSw1Ml19KSxpKFUsWzIsMzRdKSxpKFUsWzIsMzVdKSxpKFUsWzIsMzZdKSxpKFUsWzIsMzddKSxpKFUsWzIsNl0pLGkoVSxbMiwxMl0pLHsxMjo1MywyMzpCLDUwOnB0fSxpKFUsWzIsMTZdKSxpKG50LHcsezc6NTR9KSx7MjM6WzEsNTVdfSx7MjM6WzEsNTZdfSx7MjI6WzEsNTddfSx7MjM6WzIsNDRdfSx7MjM6WzIsNDVdfSxpKFUsWzIsMjhdKSxpKFUsWzIsMjldKSx7Mzk6WzEsNThdfSx7Mzk6WzEsNTldfSx7NDM6WzEsNjBdfSx7MjM6WzEsNjFdfSx7MjM6WzEsNjJdfSxpKFUsWzIsMTNdLHsxMzpbMSw2M119KSx7NDptLDU6Yiw4OjgsOToxMCwxMDoxMiwxMToxMywxMjoxNCwxNTpFLDE2Ol8sMTg6QSwyMDpbMSw2NF0sMjE6SSwyMzpCLDI0Ok4sMjU6UiwyNjp6LDI3OlcsMjg6ZXQsMzE6MjQsMzI6c3QsMzQ6YXQsMzY6YnQsMzc6bXQsNDE6eXQsNDQ6ZnQsNDU6dXQsNDY6dnQsNDc6WCw1MDpwdH0saShVLFsyLDE5XSx7MTk6WzEsNjVdfSksezMwOlsxLDY2XX0sezIzOlsxLDY3XX0saShVLFsyLDMxXSksaShVLFsyLDMyXSksaShVLFsyLDMzXSksaShUdCxbMiw0Ml0pLGkoVHQsWzIsNDNdKSxpKFUsWzIsMTRdKSxpKFUsWzIsMThdKSxpKG50LHcsezc6Njh9KSxpKFUsWzIsMjVdKSxpKFUsWzIsMjZdKSx7NDptLDU6Yiw4OjgsOToxMCwxMDoxMiwxMToxMywxMjoxNCwxNTpFLDE2Ol8sMTg6QSwyMDpbMSw2OV0sMjE6SSwyMzpCLDI0Ok4sMjU6UiwyNjp6LDI3OlcsMjg6ZXQsMzE6MjQsMzI6c3QsMzQ6YXQsMzY6YnQsMzc6bXQsNDE6eXQsNDQ6ZnQsNDU6dXQsNDY6dnQsNDc6WCw1MDpwdH0saShVLFsyLDIwXSldLGRlZmF1bHRBY3Rpb25zOns1OlsyLDFdLDY6WzIsMl0sNDQ6WzIsNDRdLDQ1OlsyLDQ1XX0scGFyc2VFcnJvcjpmdW5jdGlvbihaLEN0KXtpZihDdC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKFopO2Vsc2V7dmFyIHh0PW5ldyBFcnJvcihaKTt0aHJvdyB4dC5oYXNoPUN0LHh0fX0scGFyc2U6ZnVuY3Rpb24oWil7dmFyIEN0PXRoaXMseHQ9WzBdLEh0PVtdLExlPVtudWxsXSxGdD1bXSxnbj10aGlzLnRhYmxlLFNlPSIiLG1lPTAsVmU9MCxZZT0yLGNlPTEsa2U9RnQuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksenQ9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxyZT17eXk6e319O2Zvcih2YXIgc2UgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxzZSkmJihyZS55eVtzZV09dGhpcy55eVtzZV0pO3p0LnNldElucHV0KFoscmUueXkpLHJlLnl5LmxleGVyPXp0LHJlLnl5LnBhcnNlcj10aGlzLHR5cGVvZiB6dC55eWxsb2M+InUiJiYoenQueXlsbG9jPXt9KTt2YXIgUGU9enQueXlsbG9jO0Z0LnB1c2goUGUpO3ZhciB0ZT16dC5vcHRpb25zJiZ6dC5vcHRpb25zLnJhbmdlczt0eXBlb2YgcmUueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9cmUueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gTWUoKXt2YXIgRWU7cmV0dXJuIEVlPUh0LnBvcCgpfHx6dC5sZXgoKXx8Y2UsdHlwZW9mIEVlIT0ibnVtYmVyIiYmKEVlIGluc3RhbmNlb2YgQXJyYXkmJihIdD1FZSxFZT1IdC5wb3AoKSksRWU9Q3Quc3ltYm9sc19bRWVdfHxFZSksRWV9Zm9yKHZhciBkZSxvbixuaSxLcyx3cz17fSxmbyxYaSxFcixYbjs7KXtpZihvbj14dFt4dC5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tvbl0/bmk9dGhpcy5kZWZhdWx0QWN0aW9uc1tvbl06KChkZT09PW51bGx8fHR5cGVvZiBkZT4idSIpJiYoZGU9TWUoKSksbmk9Z25bb25dJiZnbltvbl1bZGVdKSx0eXBlb2Ygbmk+InUifHwhbmkubGVuZ3RofHwhbmlbMF0pe3ZhciBkaT0iIjtYbj1bXTtmb3IoZm8gaW4gZ25bb25dKXRoaXMudGVybWluYWxzX1tmb10mJmZvPlllJiZYbi5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bZm9dKyInIik7enQuc2hvd1Bvc2l0aW9uP2RpPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKG1lKzEpK2A6CmArenQuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtYbi5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW2RlXXx8ZGUpKyInIjpkaT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhtZSsxKSsiOiBVbmV4cGVjdGVkICIrKGRlPT1jZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tkZV18fGRlKSsiJyIpLHRoaXMucGFyc2VFcnJvcihkaSx7dGV4dDp6dC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bZGVdfHxkZSxsaW5lOnp0Lnl5bGluZW5vLGxvYzpQZSxleHBlY3RlZDpYbn0pfWlmKG5pWzBdaW5zdGFuY2VvZiBBcnJheSYmbmkubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitvbisiLCB0b2tlbjogIitkZSk7c3dpdGNoKG5pWzBdKXtjYXNlIDE6eHQucHVzaChkZSksTGUucHVzaCh6dC55eXRleHQpLEZ0LnB1c2goenQueXlsbG9jKSx4dC5wdXNoKG5pWzFdKSxkZT1udWxsLFZlPXp0Lnl5bGVuZyxTZT16dC55eXRleHQsbWU9enQueXlsaW5lbm8sUGU9enQueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihYaT10aGlzLnByb2R1Y3Rpb25zX1tuaVsxXV1bMV0sd3MuJD1MZVtMZS5sZW5ndGgtWGldLHdzLl8kPXtmaXJzdF9saW5lOkZ0W0Z0Lmxlbmd0aC0oWGl8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpGdFtGdC5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpGdFtGdC5sZW5ndGgtKFhpfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkZ0W0Z0Lmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdGUmJih3cy5fJC5yYW5nZT1bRnRbRnQubGVuZ3RoLShYaXx8MSldLnJhbmdlWzBdLEZ0W0Z0Lmxlbmd0aC0xXS5yYW5nZVsxXV0pLEtzPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseSh3cyxbU2UsVmUsbWUscmUueXksbmlbMV0sTGUsRnRdLmNvbmNhdChrZSkpLHR5cGVvZiBLczwidSIpcmV0dXJuIEtzO1hpJiYoeHQ9eHQuc2xpY2UoMCwtMSpYaSoyKSxMZT1MZS5zbGljZSgwLC0xKlhpKSxGdD1GdC5zbGljZSgwLC0xKlhpKSkseHQucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tuaVsxXV1bMF0pLExlLnB1c2god3MuJCksRnQucHVzaCh3cy5fJCksRXI9Z25beHRbeHQubGVuZ3RoLTJdXVt4dFt4dC5sZW5ndGgtMV1dLHh0LnB1c2goRXIpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxPdD1mdW5jdGlvbigpe3ZhciBFdD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihDdCx4dCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihDdCx4dCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoQ3QpfSxzZXRJbnB1dDpmdW5jdGlvbihaLEN0KXtyZXR1cm4gdGhpcy55eT1DdHx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9Wix0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgWj10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9Wix0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9Wix0aGlzLm1hdGNoZWQrPVo7dmFyIEN0PVoubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBDdD8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksWn0sdW5wdXQ6ZnVuY3Rpb24oWil7dmFyIEN0PVoubGVuZ3RoLHh0PVouc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1aK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1DdCksdGhpcy5vZmZzZXQtPUN0O3ZhciBIdD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSx4dC5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXh0Lmxlbmd0aC0xKTt2YXIgTGU9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnh0Pyh4dC5sZW5ndGg9PT1IdC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0h0W0h0Lmxlbmd0aC14dC5sZW5ndGhdLmxlbmd0aC14dFswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLUN0fSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W0xlWzBdLExlWzBdK3RoaXMueXlsZW5nLUN0XSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oWil7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFopKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIFo9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihaLmxlbmd0aD4yMD8iLi4uIjoiIikrWi5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBaPXRoaXMubWF0Y2g7cmV0dXJuIFoubGVuZ3RoPDIwJiYoWis9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtWi5sZW5ndGgpKSwoWi5zdWJzdHIoMCwyMCkrKFoubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBaPXRoaXMucGFzdElucHV0KCksQ3Q9bmV3IEFycmF5KFoubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gWit0aGlzLnVwY29taW5nSW5wdXQoKStgCmArQ3QrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKFosQ3Qpe3ZhciB4dCxIdCxMZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoTGU9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoTGUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksSHQ9WlswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksSHQmJih0aGlzLnl5bGluZW5vKz1IdC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpIdD9IdFtIdC5sZW5ndGgtMV0ubGVuZ3RoLUh0W0h0Lmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK1pbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9WlswXSx0aGlzLm1hdGNoKz1aWzBdLHRoaXMubWF0Y2hlcz1aLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKFpbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPVpbMF0seHQ9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsQ3QsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSkseHQpcmV0dXJuIHh0O2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBGdCBpbiBMZSl0aGlzW0Z0XT1MZVtGdF07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgWixDdCx4dCxIdDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBMZT10aGlzLl9jdXJyZW50UnVsZXMoKSxGdD0wO0Z0PExlLmxlbmd0aDtGdCsrKWlmKHh0PXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbTGVbRnRdXSkseHQmJighQ3R8fHh0WzBdLmxlbmd0aD5DdFswXS5sZW5ndGgpKXtpZihDdD14dCxIdD1GdCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihaPXRoaXMudGVzdF9tYXRjaCh4dCxMZVtGdF0pLFohPT0hMSlyZXR1cm4gWjtpZih0aGlzLl9iYWNrdHJhY2spe0N0PSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEN0PyhaPXRoaXMudGVzdF9tYXRjaChDdCxMZVtIdF0pLFohPT0hMT9aOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgQ3Q9dGhpcy5uZXh0KCk7cmV0dXJuIEN0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihDdCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEN0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgQ3Q9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gQ3Q+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihDdCl7cmV0dXJuIEN0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoQ3R8fDApLEN0Pj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbQ3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEN0KXt0aGlzLmJlZ2luKEN0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihDdCx4dCxIdCxMZSl7c3dpdGNoKEh0KXtjYXNlIDA6cmV0dXJuIDQwO2Nhc2UgMTpyZXR1cm4gNDQ7Y2FzZSAyOnJldHVybiA0NTtjYXNlIDM6cmV0dXJuIDQ2O2Nhc2UgNDpyZXR1cm4gNDc7Y2FzZSA1OmJyZWFrO2Nhc2UgNjpicmVhaztjYXNlIDc6cmV0dXJuIDU7Y2FzZSA4OmJyZWFrO2Nhc2UgOTpicmVhaztjYXNlIDEwOmJyZWFrO2Nhc2UgMTE6YnJlYWs7Y2FzZSAxMjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIlNDQUxFIiksMTY7Y2FzZSAxMzpyZXR1cm4gMTc7Y2FzZSAxNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzI7Y2FzZSAxNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgMTc6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDM0O2Nhc2UgMTg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDE5OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDIwOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDIxOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDIyOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NERUYiKSwzNztjYXNlIDIzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkNMQVNTREVGSUQiKSwiREVGQVVMVF9DTEFTU0RFRl9JRCI7Y2FzZSAyNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJDTEFTU0RFRklEIiksMzg7Y2FzZSAyNTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDM5O2Nhc2UgMjY6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJDTEFTUyIpLDQxO2Nhc2UgMjc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NfU1RZTEUiKSw0MjtjYXNlIDI4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDM7Y2FzZSAyOTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIlNDQUxFIiksMTY7Y2FzZSAzMDpyZXR1cm4gMTc7Y2FzZSAzMTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzMjp0aGlzLnB1c2hTdGF0ZSgiU1RBVEUiKTticmVhaztjYXNlIDMzOnJldHVybiB0aGlzLnBvcFN0YXRlKCkseHQueXl0ZXh0PXh0Lnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjQ7Y2FzZSAzNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHh0Lnl5dGV4dD14dC55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI1O2Nhc2UgMzU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx4dC55eXRleHQ9eHQueXl0ZXh0LnNsaWNlKDAsLTEwKS50cmltKCksMjY7Y2FzZSAzNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHh0Lnl5dGV4dD14dC55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI0O2Nhc2UgMzc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx4dC55eXRleHQ9eHQueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNTtjYXNlIDM4OnJldHVybiB0aGlzLnBvcFN0YXRlKCkseHQueXl0ZXh0PXh0Lnl5dGV4dC5zbGljZSgwLC0xMCkudHJpbSgpLDI2O2Nhc2UgMzk6cmV0dXJuIDQ0O2Nhc2UgNDA6cmV0dXJuIDQ1O2Nhc2UgNDE6cmV0dXJuIDQ2O2Nhc2UgNDI6cmV0dXJuIDQ3O2Nhc2UgNDM6dGhpcy5wdXNoU3RhdGUoIlNUQVRFX1NUUklORyIpO2JyZWFrO2Nhc2UgNDQ6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTVEFURV9JRCIpLCJBUyI7Y2FzZSA0NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJJRCI7Y2FzZSA0Njp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA0NzpyZXR1cm4iU1RBVEVfREVTQ1IiO2Nhc2UgNDg6cmV0dXJuIDE4O2Nhc2UgNDk6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgic3RydWN0IiksMTk7Y2FzZSA1MTpicmVhaztjYXNlIDUyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjA7Y2FzZSA1MzpicmVhaztjYXNlIDU0OnJldHVybiB0aGlzLmJlZ2luKCJOT1RFIiksMjg7Y2FzZSA1NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX0lEIiksNTI7Y2FzZSA1NjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX0lEIiksNTM7Y2FzZSA1Nzp0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkZMT0FUSU5HX05PVEUiKTticmVhaztjYXNlIDU4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkZMT0FUSU5HX05PVEVfSUQiKSwiQVMiO2Nhc2UgNTk6YnJlYWs7Y2FzZSA2MDpyZXR1cm4iTk9URV9URVhUIjtjYXNlIDYxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksIklEIjtjYXNlIDYyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIk5PVEVfVEVYVCIpLDIzO2Nhc2UgNjM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx4dC55eXRleHQ9eHQueXl0ZXh0LnN1YnN0cigyKS50cmltKCksMzA7Y2FzZSA2NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHh0Lnl5dGV4dD14dC55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDMwO2Nhc2UgNjU6cmV0dXJuIDY7Y2FzZSA2NjpyZXR1cm4gNjtjYXNlIDY3OnJldHVybiAxNTtjYXNlIDY4OnJldHVybiA1MDtjYXNlIDY5OnJldHVybiAyMztjYXNlIDcwOnJldHVybiB4dC55eXRleHQ9eHQueXl0ZXh0LnRyaW0oKSwxMztjYXNlIDcxOnJldHVybiAxNDtjYXNlIDcyOnJldHVybiAyNztjYXNlIDczOnJldHVybiA1MTtjYXNlIDc0OnJldHVybiA1O2Nhc2UgNzU6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86ZGVmYXVsdFxiKS9pLC9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvaSwvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86W1xzXSspL2ksL14oPzooKD8hXG4pXHMpKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86c2NhbGVccyspL2ksL14oPzpcZCspL2ksL14oPzpccyt3aWR0aFxiKS9pLC9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzpjbGFzc0RlZlxzKykvaSwvXig/OkRFRkFVTFRccyspL2ksL14oPzpcdytccyspL2ksL14oPzpbXlxuXSopL2ksL14oPzpjbGFzc1xzKykvaSwvXig/OihcdyspKygoLFxzKlx3KykqKSkvaSwvXig/OlteXG5dKikvaSwvXig/OnNjYWxlXHMrKS9pLC9eKD86XGQrKS9pLC9eKD86XHMrd2lkdGhcYikvaSwvXig/OnN0YXRlXHMrKS9pLC9eKD86Lio8PGZvcms+PikvaSwvXig/Oi4qPDxqb2luPj4pL2ksL14oPzouKjw8Y2hvaWNlPj4pL2ksL14oPzouKlxbXFtmb3JrXF1cXSkvaSwvXig/Oi4qXFtcW2pvaW5cXVxdKS9pLC9eKD86LipcW1xbY2hvaWNlXF1cXSkvaSwvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopL2ksL14oPzpbIl0pL2ksL14oPzpccyphc1xzKykvaSwvXig/OlteXG5ce10qKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXlxuXHNce10rKS9pLC9eKD86XG4pL2ksL14oPzpceykvaSwvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86XH0pL2ksL14oPzpbXG5dKS9pLC9eKD86bm90ZVxzKykvaSwvXig/OmxlZnQgb2ZcYikvaSwvXig/OnJpZ2h0IG9mXGIpL2ksL14oPzoiKS9pLC9eKD86XHMqYXNccyopL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/OlteXG5dKikvaSwvXig/OlxzKlteOlxuXHNcLV0rKS9pLC9eKD86XHMqOlteOlxuO10rKS9pLC9eKD86W1xzXFNdKj9lbmQgbm90ZVxiKS9pLC9eKD86c3RhdGVEaWFncmFtXHMrKS9pLC9eKD86c3RhdGVEaWFncmFtLXYyXHMrKS9pLC9eKD86aGlkZSBlbXB0eSBkZXNjcmlwdGlvblxiKS9pLC9eKD86XFtcKlxdKS9pLC9eKD86W146XG5cc1wtXHtdKykvaSwvXig/OlxzKjpbXjpcbjtdKykvaSwvXig/Oi0tPikvaSwvXig/Oi0tKS9pLC9eKD86Ojo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e0xJTkU6e3J1bGVzOls5LDEwXSxpbmNsdXNpdmU6ITF9LHN0cnVjdDp7cnVsZXM6WzksMTAsMjIsMjYsMzIsMzksNDAsNDEsNDIsNTEsNTIsNTMsNTQsNjgsNjksNzAsNzEsNzJdLGluY2x1c2l2ZTohMX0sRkxPQVRJTkdfTk9URV9JRDp7cnVsZXM6WzYxXSxpbmNsdXNpdmU6ITF9LEZMT0FUSU5HX05PVEU6e3J1bGVzOls1OCw1OSw2MF0saW5jbHVzaXZlOiExfSxOT1RFX1RFWFQ6e3J1bGVzOls2Myw2NF0saW5jbHVzaXZlOiExfSxOT1RFX0lEOntydWxlczpbNjJdLGluY2x1c2l2ZTohMX0sTk9URTp7cnVsZXM6WzU1LDU2LDU3XSxpbmNsdXNpdmU6ITF9LENMQVNTX1NUWUxFOntydWxlczpbMjhdLGluY2x1c2l2ZTohMX0sQ0xBU1M6e3J1bGVzOlsyN10saW5jbHVzaXZlOiExfSxDTEFTU0RFRklEOntydWxlczpbMjVdLGluY2x1c2l2ZTohMX0sQ0xBU1NERUY6e3J1bGVzOlsyMywyNF0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMjAsMjFdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMThdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMTZdLGluY2x1c2l2ZTohMX0sU0NBTEU6e3J1bGVzOlsxMywxNCwzMCwzMV0saW5jbHVzaXZlOiExfSxBTElBUzp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxTVEFURV9JRDp7cnVsZXM6WzQ1XSxpbmNsdXNpdmU6ITF9LFNUQVRFX1NUUklORzp7cnVsZXM6WzQ2LDQ3XSxpbmNsdXNpdmU6ITF9LEZPUktfU1RBVEU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sU1RBVEU6e3J1bGVzOls5LDEwLDMzLDM0LDM1LDM2LDM3LDM4LDQzLDQ0LDQ4LDQ5LDUwXSxpbmNsdXNpdmU6ITF9LElEOntydWxlczpbOSwxMF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3LDgsMTAsMTEsMTIsMTUsMTcsMTksMjIsMjYsMjksMzIsNTAsNTQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzMsNzQsNzVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gRXR9KCk7SXQubGV4ZXI9T3Q7ZnVuY3Rpb24gQnQoKXt0aGlzLnl5PXt9fXJldHVybiBCdC5wcm90b3R5cGU9SXQsSXQuUGFyc2VyPUJ0LG5ldyBCdH0oKTtEZ3QucGFyc2VyPURndDtjb25zdCBlanQ9RGd0LEZHZT0iTFIiLE5HZT0iVEIiLFVZPSJzdGF0ZSIsSWd0PSJyZWxhdGlvbiIsQkdlPSJjbGFzc0RlZiIsUkdlPSJhcHBseUNsYXNzIixLRj0iZGVmYXVsdCIsbmp0PSJkaXZpZGVyIixPZ3Q9IlsqXSIscmp0PSJzdGFydCIsaWp0PU9ndCxzanQ9ImVuZCIsYWp0PSJjb2xvciIsb2p0PSJmaWxsIixqR2U9ImJnRmlsbCIsJEdlPSIsIjtmdW5jdGlvbiBjanQoKXtyZXR1cm57fX1sZXQgdWp0PUZHZSxXWT1bXSxYRj1janQoKTtjb25zdCBsanQ9KCk9Pih7cmVsYXRpb25zOltdLHN0YXRlczp7fSxkb2N1bWVudHM6e319KTtsZXQgWVk9e3Jvb3Q6bGp0KCl9LFMwPVlZLnJvb3QsUUY9MCxoanQ9MDtjb25zdCB6R2U9e0xJTkU6MCxET1RURURfTElORToxfSxxR2U9e0FHR1JFR0FUSU9OOjAsRVhURU5TSU9OOjEsQ09NUE9TSVRJT046MixERVBFTkRFTkNZOjN9LEtZPWk9PkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaSkpLEhHZT1pPT57VXQuaW5mbygiU2V0dGluZyByb290IGRvYyIsaSksV1k9aX0sVkdlPSgpPT5XWSxYWT0oaSxhLGYpPT57aWYoYS5zdG10PT09SWd0KVhZKGksYS5zdGF0ZTEsITApLFhZKGksYS5zdGF0ZTIsITEpO2Vsc2UgaWYoYS5zdG10PT09VVkmJihhLmlkPT09IlsqXSI/KGEuaWQ9Zj9pLmlkKyJfc3RhcnQiOmkuaWQrIl9lbmQiLGEuc3RhcnQ9Zik6YS5pZD1hLmlkLnRyaW0oKSksYS5kb2Mpe2NvbnN0IHA9W107bGV0IHc9W10sbTtmb3IobT0wO208YS5kb2MubGVuZ3RoO20rKylpZihhLmRvY1ttXS50eXBlPT09bmp0KXtjb25zdCBiPUtZKGEuZG9jW21dKTtiLmRvYz1LWSh3KSxwLnB1c2goYiksdz1bXX1lbHNlIHcucHVzaChhLmRvY1ttXSk7aWYocC5sZW5ndGg+MCYmdy5sZW5ndGg+MCl7Y29uc3QgYj17c3RtdDpVWSxpZDpWSXQoKSx0eXBlOiJkaXZpZGVyIixkb2M6S1kodyl9O3AucHVzaChLWShiKSksYS5kb2M9cH1hLmRvYy5mb3JFYWNoKGI9PlhZKGEsYiwhMCkpfX0sR0dlPSgpPT4oWFkoe2lkOiJyb290In0se2lkOiJyb290Iixkb2M6V1l9LCEwKSx7aWQ6InJvb3QiLGRvYzpXWX0pLFVHZT1pPT57bGV0IGE7aS5kb2M/YT1pLmRvYzphPWksVXQuaW5mbyhhKSxmanQoITApLFV0LmluZm8oIkV4dHJhY3QiLGEpLGEuZm9yRWFjaChmPT57c3dpdGNoKGYuc3RtdCl7Y2FzZSBVWTpMVChmLmlkLnRyaW0oKSxmLnR5cGUsZi5kb2MsZi5kZXNjcmlwdGlvbixmLm5vdGUsZi5jbGFzc2VzLGYuc3R5bGVzLGYudGV4dFN0eWxlcyk7YnJlYWs7Y2FzZSBJZ3Q6ZGp0KGYuc3RhdGUxLGYuc3RhdGUyLGYuZGVzY3JpcHRpb24pO2JyZWFrO2Nhc2UgQkdlOmdqdChmLmlkLnRyaW0oKSxmLmNsYXNzZXMpO2JyZWFrO2Nhc2UgUkdlOkJndChmLmlkLnRyaW0oKSxmLnN0eWxlQ2xhc3MpO2JyZWFrfX0pfSxMVD1mdW5jdGlvbihpLGE9S0YsZj1udWxsLHA9bnVsbCx3PW51bGwsbT1udWxsLGI9bnVsbCxFPW51bGwpe2NvbnN0IF89aT09bnVsbD92b2lkIDA6aS50cmltKCk7UzAuc3RhdGVzW19dPT09dm9pZCAwPyhVdC5pbmZvKCJBZGRpbmcgc3RhdGUgIixfLHApLFMwLnN0YXRlc1tfXT17aWQ6XyxkZXNjcmlwdGlvbnM6W10sdHlwZTphLGRvYzpmLG5vdGU6dyxjbGFzc2VzOltdLHN0eWxlczpbXSx0ZXh0U3R5bGVzOltdfSk6KFMwLnN0YXRlc1tfXS5kb2N8fChTMC5zdGF0ZXNbX10uZG9jPWYpLFMwLnN0YXRlc1tfXS50eXBlfHwoUzAuc3RhdGVzW19dLnR5cGU9YSkpLHAmJihVdC5pbmZvKCJTZXR0aW5nIHN0YXRlIGRlc2NyaXB0aW9uIixfLHApLHR5cGVvZiBwPT0ic3RyaW5nIiYmTmd0KF8scC50cmltKCkpLHR5cGVvZiBwPT0ib2JqZWN0IiYmcC5mb3JFYWNoKEE9Pk5ndChfLEEudHJpbSgpKSkpLHcmJihTMC5zdGF0ZXNbX10ubm90ZT13LFMwLnN0YXRlc1tfXS5ub3RlLnRleHQ9S3Iuc2FuaXRpemVUZXh0KFMwLnN0YXRlc1tfXS5ub3RlLnRleHQsT2UoKSkpLG0mJihVdC5pbmZvKCJTZXR0aW5nIHN0YXRlIGNsYXNzZXMiLF8sbSksKHR5cGVvZiBtPT0ic3RyaW5nIj9bbV06bSkuZm9yRWFjaChJPT5CZ3QoXyxJLnRyaW0oKSkpKSxiJiYoVXQuaW5mbygiU2V0dGluZyBzdGF0ZSBzdHlsZXMiLF8sYiksKHR5cGVvZiBiPT0ic3RyaW5nIj9bYl06YikuZm9yRWFjaChJPT5uVWUoXyxJLnRyaW0oKSkpKSxFJiYoVXQuaW5mbygiU2V0dGluZyBzdGF0ZSBzdHlsZXMiLF8sYiksKHR5cGVvZiBFPT0ic3RyaW5nIj9bRV06RSkuZm9yRWFjaChJPT5yVWUoXyxJLnRyaW0oKSkpKX0sZmp0PWZ1bmN0aW9uKGkpe1lZPXtyb290OmxqdCgpfSxTMD1ZWS5yb290LFFGPTAsWEY9Y2p0KCksaXx8aGcoKX0sWkY9ZnVuY3Rpb24oaSl7cmV0dXJuIFMwLnN0YXRlc1tpXX0sV0dlPWZ1bmN0aW9uKCl7cmV0dXJuIFMwLnN0YXRlc30sWUdlPWZ1bmN0aW9uKCl7VXQuaW5mbygiRG9jdW1lbnRzID0gIixZWSl9LEtHZT1mdW5jdGlvbigpe3JldHVybiBTMC5yZWxhdGlvbnN9O2Z1bmN0aW9uIFBndChpPSIiKXtsZXQgYT1pO3JldHVybiBpPT09T2d0JiYoUUYrKyxhPWAke3JqdH0ke1FGfWApLGF9ZnVuY3Rpb24gRmd0KGk9IiIsYT1LRil7cmV0dXJuIGk9PT1PZ3Q/cmp0OmF9ZnVuY3Rpb24gWEdlKGk9IiIpe2xldCBhPWk7cmV0dXJuIGk9PT1panQmJihRRisrLGE9YCR7c2p0fSR7UUZ9YCksYX1mdW5jdGlvbiBRR2UoaT0iIixhPUtGKXtyZXR1cm4gaT09PWlqdD9zanQ6YX1mdW5jdGlvbiBaR2UoaSxhLGYpe2xldCBwPVBndChpLmlkLnRyaW0oKSksdz1GZ3QoaS5pZC50cmltKCksaS50eXBlKSxtPVBndChhLmlkLnRyaW0oKSksYj1GZ3QoYS5pZC50cmltKCksYS50eXBlKTtMVChwLHcsaS5kb2MsaS5kZXNjcmlwdGlvbixpLm5vdGUsaS5jbGFzc2VzLGkuc3R5bGVzLGkudGV4dFN0eWxlcyksTFQobSxiLGEuZG9jLGEuZGVzY3JpcHRpb24sYS5ub3RlLGEuY2xhc3NlcyxhLnN0eWxlcyxhLnRleHRTdHlsZXMpLFMwLnJlbGF0aW9ucy5wdXNoKHtpZDE6cCxpZDI6bSxyZWxhdGlvblRpdGxlOktyLnNhbml0aXplVGV4dChmLE9lKCkpfSl9Y29uc3QgZGp0PWZ1bmN0aW9uKGksYSxmKXtpZih0eXBlb2YgaT09Im9iamVjdCIpWkdlKGksYSxmKTtlbHNle2NvbnN0IHA9UGd0KGkudHJpbSgpKSx3PUZndChpKSxtPVhHZShhLnRyaW0oKSksYj1RR2UoYSk7TFQocCx3KSxMVChtLGIpLFMwLnJlbGF0aW9ucy5wdXNoKHtpZDE6cCxpZDI6bSx0aXRsZTpLci5zYW5pdGl6ZVRleHQoZixPZSgpKX0pfX0sTmd0PWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1TMC5zdGF0ZXNbaV0scD1hLnN0YXJ0c1dpdGgoIjoiKT9hLnJlcGxhY2UoIjoiLCIiKS50cmltKCk6YTtmLmRlc2NyaXB0aW9ucy5wdXNoKEtyLnNhbml0aXplVGV4dChwLE9lKCkpKX0sSkdlPWZ1bmN0aW9uKGkpe3JldHVybiBpLnN1YnN0cmluZygwLDEpPT09IjoiP2kuc3Vic3RyKDIpLnRyaW0oKTppLnRyaW0oKX0sdFVlPSgpPT4oaGp0KyssImRpdmlkZXItaWQtIitoanQpLGdqdD1mdW5jdGlvbihpLGE9IiIpe1hGW2ldPT09dm9pZCAwJiYoWEZbaV09e2lkOmksc3R5bGVzOltdLHRleHRTdHlsZXM6W119KTtjb25zdCBmPVhGW2ldO2EhPW51bGwmJmEuc3BsaXQoJEdlKS5mb3JFYWNoKHA9Pntjb25zdCB3PXAucmVwbGFjZSgvKFteO10qKTsvLCIkMSIpLnRyaW0oKTtpZihwLm1hdGNoKGFqdCkpe2NvbnN0IGI9dy5yZXBsYWNlKG9qdCxqR2UpLnJlcGxhY2UoYWp0LG9qdCk7Zi50ZXh0U3R5bGVzLnB1c2goYil9Zi5zdHlsZXMucHVzaCh3KX0pfSxlVWU9ZnVuY3Rpb24oKXtyZXR1cm4gWEZ9LEJndD1mdW5jdGlvbihpLGEpe2kuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2xldCBwPVpGKGYpO2lmKHA9PT12b2lkIDApe2NvbnN0IHc9Zi50cmltKCk7TFQodykscD1aRih3KX1wLmNsYXNzZXMucHVzaChhKX0pfSxuVWU9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPVpGKGkpO2YhPT12b2lkIDAmJmYudGV4dFN0eWxlcy5wdXNoKGEpfSxyVWU9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPVpGKGkpO2YhPT12b2lkIDAmJmYudGV4dFN0eWxlcy5wdXNoKGEpfSwkNT17Z2V0Q29uZmlnOigpPT5PZSgpLnN0YXRlLGFkZFN0YXRlOkxULGNsZWFyOmZqdCxnZXRTdGF0ZTpaRixnZXRTdGF0ZXM6V0dlLGdldFJlbGF0aW9uczpLR2UsZ2V0Q2xhc3NlczplVWUsZ2V0RGlyZWN0aW9uOigpPT51anQsYWRkUmVsYXRpb246ZGp0LGdldERpdmlkZXJJZDp0VWUsc2V0RGlyZWN0aW9uOmk9Pnt1anQ9aX0sY2xlYW51cExhYmVsOkpHZSxsaW5lVHlwZTp6R2UscmVsYXRpb25UeXBlOnFHZSxsb2dEb2N1bWVudHM6WUdlLGdldFJvb3REb2M6VkdlLHNldFJvb3REb2M6SEdlLGdldFJvb3REb2NWMjpHR2UsZXh0cmFjdDpVR2UsdHJpbUNvbG9uOmk9PmkmJmlbMF09PT0iOiI/aS5zdWJzdHIoMSkudHJpbSgpOmkudHJpbSgpLGdldEFjY1RpdGxlOmZnLHNldEFjY1RpdGxlOkUwLGdldEFjY0Rlc2NyaXB0aW9uOmdnLHNldEFjY0Rlc2NyaXB0aW9uOmRnLGFkZFN0eWxlQ2xhc3M6Z2p0LHNldENzc0NsYXNzOkJndCxhZGREZXNjcmlwdGlvbjpOZ3Qsc2V0RGlhZ3JhbVRpdGxlOk5iLGdldERpYWdyYW1UaXRsZTpwZ30scGp0PWk9PmAKZGVmcyAjc3RhdGVkaWFncmFtLWJhcmJFbmQgewogICAgZmlsbDogJHtpLnRyYW5zaXRpb25Db2xvcn07CiAgICBzdHJva2U6ICR7aS50cmFuc2l0aW9uQ29sb3J9OwogIH0KZy5zdGF0ZUdyb3VwIHRleHQgewogIGZpbGw6ICR7aS5ub2RlQm9yZGVyfTsKICBzdHJva2U6IG5vbmU7CiAgZm9udC1zaXplOiAxMHB4Owp9Cmcuc3RhdGVHcm91cCB0ZXh0IHsKICBmaWxsOiAke2kudGV4dENvbG9yfTsKICBzdHJva2U6IG5vbmU7CiAgZm9udC1zaXplOiAxMHB4OwoKfQpnLnN0YXRlR3JvdXAgLnN0YXRlLXRpdGxlIHsKICBmb250LXdlaWdodDogYm9sZGVyOwogIGZpbGw6ICR7aS5zdGF0ZUxhYmVsQ29sb3J9Owp9CgpnLnN0YXRlR3JvdXAgcmVjdCB7CiAgZmlsbDogJHtpLm1haW5Ca2d9OwogIHN0cm9rZTogJHtpLm5vZGVCb3JkZXJ9Owp9CgpnLnN0YXRlR3JvdXAgbGluZSB7CiAgc3Ryb2tlOiAke2kubGluZUNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCi50cmFuc2l0aW9uIHsKICBzdHJva2U6ICR7aS50cmFuc2l0aW9uQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMTsKICBmaWxsOiBub25lOwp9Cgouc3RhdGVHcm91cCAuY29tcG9zaXQgewogIGZpbGw6ICR7aS5iYWNrZ3JvdW5kfTsKICBib3JkZXItYm90dG9tOiAxcHgKfQoKLnN0YXRlR3JvdXAgLmFsdC1jb21wb3NpdCB7CiAgZmlsbDogI2UwZTBlMDsKICBib3JkZXItYm90dG9tOiAxcHgKfQoKLnN0YXRlLW5vdGUgewogIHN0cm9rZTogJHtpLm5vdGVCb3JkZXJDb2xvcn07CiAgZmlsbDogJHtpLm5vdGVCa2dDb2xvcn07CgogIHRleHQgewogICAgZmlsbDogJHtpLm5vdGVUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogICAgZm9udC1zaXplOiAxMHB4OwogIH0KfQoKLnN0YXRlTGFiZWwgLmJveCB7CiAgc3Ryb2tlOiBub25lOwogIHN0cm9rZS13aWR0aDogMDsKICBmaWxsOiAke2kubWFpbkJrZ307CiAgb3BhY2l0eTogMC41Owp9CgouZWRnZUxhYmVsIC5sYWJlbCByZWN0IHsKICBmaWxsOiAke2kubGFiZWxCYWNrZ3JvdW5kQ29sb3J9OwogIG9wYWNpdHk6IDAuNTsKfQouZWRnZUxhYmVsIC5sYWJlbCB0ZXh0IHsKICBmaWxsOiAke2kudHJhbnNpdGlvbkxhYmVsQ29sb3J8fGkudGVydGlhcnlUZXh0Q29sb3J9Owp9Ci5sYWJlbCBkaXYgLmVkZ2VMYWJlbCB7CiAgY29sb3I6ICR7aS50cmFuc2l0aW9uTGFiZWxDb2xvcnx8aS50ZXJ0aWFyeVRleHRDb2xvcn07Cn0KCi5zdGF0ZUxhYmVsIHRleHQgewogIGZpbGw6ICR7aS5zdGF0ZUxhYmVsQ29sb3J9OwogIGZvbnQtc2l6ZTogMTBweDsKICBmb250LXdlaWdodDogYm9sZDsKfQoKLm5vZGUgY2lyY2xlLnN0YXRlLXN0YXJ0IHsKICBmaWxsOiAke2kuc3BlY2lhbFN0YXRlQ29sb3J9OwogIHN0cm9rZTogJHtpLnNwZWNpYWxTdGF0ZUNvbG9yfTsKfQoKLm5vZGUgLmZvcmstam9pbiB7CiAgZmlsbDogJHtpLnNwZWNpYWxTdGF0ZUNvbG9yfTsKICBzdHJva2U6ICR7aS5zcGVjaWFsU3RhdGVDb2xvcn07Cn0KCi5ub2RlIGNpcmNsZS5zdGF0ZS1lbmQgewogIGZpbGw6ICR7aS5pbm5lckVuZEJhY2tncm91bmR9OwogIHN0cm9rZTogJHtpLmJhY2tncm91bmR9OwogIHN0cm9rZS13aWR0aDogMS41Cn0KLmVuZC1zdGF0ZS1pbm5lciB7CiAgZmlsbDogJHtpLmNvbXBvc2l0ZUJhY2tncm91bmR8fGkuYmFja2dyb3VuZH07CiAgLy8gc3Ryb2tlOiAke2kuYmFja2dyb3VuZH07CiAgc3Ryb2tlLXdpZHRoOiAxLjUKfQoKLm5vZGUgcmVjdCB7CiAgZmlsbDogJHtpLnN0YXRlQmtnfHxpLm1haW5Ca2d9OwogIHN0cm9rZTogJHtpLnN0YXRlQm9yZGVyfHxpLm5vZGVCb3JkZXJ9OwogIHN0cm9rZS13aWR0aDogMXB4Owp9Ci5ub2RlIHBvbHlnb24gewogIGZpbGw6ICR7aS5tYWluQmtnfTsKICBzdHJva2U6ICR7aS5zdGF0ZUJvcmRlcnx8aS5ub2RlQm9yZGVyfTs7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KI3N0YXRlZGlhZ3JhbS1iYXJiRW5kIHsKICBmaWxsOiAke2kubGluZUNvbG9yfTsKfQoKLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3QgewogIGZpbGw6ICR7aS5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR9OwogIHN0cm9rZTogJHtpLnN0YXRlQm9yZGVyfHxpLm5vZGVCb3JkZXJ9OwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgouY2x1c3Rlci1sYWJlbCwgLm5vZGVMYWJlbCB7CiAgY29sb3I6ICR7aS5zdGF0ZUxhYmVsQ29sb3J9Owp9Cgouc3RhdGVkaWFncmFtLWNsdXN0ZXIgcmVjdC5vdXRlciB7CiAgcng6IDVweDsKICByeTogNXB4Owp9Ci5zdGF0ZWRpYWdyYW0tc3RhdGUgLmRpdmlkZXIgewogIHN0cm9rZTogJHtpLnN0YXRlQm9yZGVyfHxpLm5vZGVCb3JkZXJ9Owp9Cgouc3RhdGVkaWFncmFtLXN0YXRlIC50aXRsZS1zdGF0ZSB7CiAgcng6IDVweDsKICByeTogNXB4Owp9Ci5zdGF0ZWRpYWdyYW0tY2x1c3Rlci5zdGF0ZWRpYWdyYW0tY2x1c3RlciAuaW5uZXIgewogIGZpbGw6ICR7aS5jb21wb3NpdGVCYWNrZ3JvdW5kfHxpLmJhY2tncm91bmR9Owp9Ci5zdGF0ZWRpYWdyYW0tY2x1c3Rlci5zdGF0ZWRpYWdyYW0tY2x1c3Rlci1hbHQgLmlubmVyIHsKICBmaWxsOiAke2kuYWx0QmFja2dyb3VuZD9pLmFsdEJhY2tncm91bmQ6IiNlZmVmZWYifTsKfQoKLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIC5pbm5lciB7CiAgcng6MDsKICByeTowOwp9Cgouc3RhdGVkaWFncmFtLXN0YXRlIHJlY3QuYmFzaWMgewogIHJ4OiA1cHg7CiAgcnk6IDVweDsKfQouc3RhdGVkaWFncmFtLXN0YXRlIHJlY3QuZGl2aWRlciB7CiAgc3Ryb2tlLWRhc2hhcnJheTogMTAsMTA7CiAgZmlsbDogJHtpLmFsdEJhY2tncm91bmQ/aS5hbHRCYWNrZ3JvdW5kOiIjZWZlZmVmIn07Cn0KCi5ub3RlLWVkZ2UgewogIHN0cm9rZS1kYXNoYXJyYXk6IDU7Cn0KCi5zdGF0ZWRpYWdyYW0tbm90ZSByZWN0IHsKICBmaWxsOiAke2kubm90ZUJrZ0NvbG9yfTsKICBzdHJva2U6ICR7aS5ub3RlQm9yZGVyQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMXB4OwogIHJ4OiAwOwogIHJ5OiAwOwp9Ci5zdGF0ZWRpYWdyYW0tbm90ZSByZWN0IHsKICBmaWxsOiAke2kubm90ZUJrZ0NvbG9yfTsKICBzdHJva2U6ICR7aS5ub3RlQm9yZGVyQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMXB4OwogIHJ4OiAwOwogIHJ5OiAwOwp9Cgouc3RhdGVkaWFncmFtLW5vdGUgdGV4dCB7CiAgZmlsbDogJHtpLm5vdGVUZXh0Q29sb3J9Owp9Cgouc3RhdGVkaWFncmFtLW5vdGUgLm5vZGVMYWJlbCB7CiAgY29sb3I6ICR7aS5ub3RlVGV4dENvbG9yfTsKfQouc3RhdGVkaWFncmFtIC5lZGdlTGFiZWwgewogIGNvbG9yOiByZWQ7IC8vICR7aS5ub3RlVGV4dENvbG9yfTsKfQoKI2RlcGVuZGVuY3lTdGFydCwgI2RlcGVuZGVuY3lFbmQgewogIGZpbGw6ICR7aS5saW5lQ29sb3J9OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwp9Cgouc3RhdGVkaWFncmFtVGl0bGVUZXh0IHsKICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogIGZvbnQtc2l6ZTogMThweDsKICBmaWxsOiAke2kudGV4dENvbG9yfTsKfQpgLFJndD17fSxpVWU9KGksYSk9PntSZ3RbaV09YX0sc1VlPWk9PlJndFtpXSxianQ9KCk9Pk9iamVjdC5rZXlzKFJndCksYVVlPXtnZXQ6c1VlLHNldDppVWUsa2V5czpianQsc2l6ZTooKT0+Ymp0KCkubGVuZ3RofSxvVWU9aT0+aS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwic3RhcnQtc3RhdGUiKS5hdHRyKCJyIixPZSgpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeCIsT2UoKS5zdGF0ZS5wYWRkaW5nK09lKCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN5IixPZSgpLnN0YXRlLnBhZGRpbmcrT2UoKS5zdGF0ZS5zaXplVW5pdCksY1VlPWk9PmkuYXBwZW5kKCJsaW5lIikuc3R5bGUoInN0cm9rZSIsImdyZXkiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjMiKS5hdHRyKCJ4MSIsT2UoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MiIsT2UoKS5zdGF0ZS50ZXh0SGVpZ2h0KjIpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsMCksdVVlPShpLGEpPT57Y29uc3QgZj1pLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDIqT2UoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixPZSgpLnN0YXRlLnRleHRIZWlnaHQrMipPZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImZvbnQtc2l6ZSIsT2UoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQoYS5pZCkscD1mLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsT2UoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixPZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixwLndpZHRoKzIqT2UoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHAuaGVpZ2h0KzIqT2UoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJyeCIsT2UoKS5zdGF0ZS5yYWRpdXMpLGZ9LGxVZT0oaSxhKT0+e2NvbnN0IGY9ZnVuY3Rpb24oTixSLHope2NvbnN0IFc9Ti5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsMipPZSgpLnN0YXRlLnBhZGRpbmcpLnRleHQoUik7enx8Vy5hdHRyKCJkeSIsT2UoKS5zdGF0ZS50ZXh0SGVpZ2h0KX0sdz1pLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDIqT2UoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixPZSgpLnN0YXRlLnRleHRIZWlnaHQrMS4zKk9lKCkuc3RhdGUucGFkZGluZykuYXR0cigiZm9udC1zaXplIixPZSgpLnN0YXRlLmZvbnRTaXplKS5hdHRyKCJjbGFzcyIsInN0YXRlLXRpdGxlIikudGV4dChhLmRlc2NyaXB0aW9uc1swXSkubm9kZSgpLmdldEJCb3goKSxtPXcuaGVpZ2h0LGI9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixPZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLG0rT2UoKS5zdGF0ZS5wYWRkaW5nKi40K09lKCkuc3RhdGUuZGl2aWRlck1hcmdpbitPZSgpLnN0YXRlLnRleHRIZWlnaHQpLmF0dHIoImNsYXNzIiwic3RhdGUtZGVzY3JpcHRpb24iKTtsZXQgRT0hMCxfPSEwO2EuZGVzY3JpcHRpb25zLmZvckVhY2goZnVuY3Rpb24oTil7RXx8KGYoYixOLF8pLF89ITEpLEU9ITF9KTtjb25zdCBBPWkuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLE9lKCkuc3RhdGUucGFkZGluZykuYXR0cigieTEiLE9lKCkuc3RhdGUucGFkZGluZyttK09lKCkuc3RhdGUuZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJ5MiIsT2UoKS5zdGF0ZS5wYWRkaW5nK20rT2UoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luLzIpLmF0dHIoImNsYXNzIiwiZGVzY3ItZGl2aWRlciIpLEk9Yi5ub2RlKCkuZ2V0QkJveCgpLEI9TWF0aC5tYXgoSS53aWR0aCx3LndpZHRoKTtyZXR1cm4gQS5hdHRyKCJ4MiIsQiszKk9lKCkuc3RhdGUucGFkZGluZyksaS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixPZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLE9lKCkuc3RhdGUucGFkZGluZykuYXR0cigid2lkdGgiLEIrMipPZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsSS5oZWlnaHQrbSsyKk9lKCkuc3RhdGUucGFkZGluZykuYXR0cigicngiLE9lKCkuc3RhdGUucmFkaXVzKSxpfSxoVWU9KGksYSxmKT0+e2NvbnN0IHA9T2UoKS5zdGF0ZS5wYWRkaW5nLHc9MipPZSgpLnN0YXRlLnBhZGRpbmcsbT1pLm5vZGUoKS5nZXRCQm94KCksYj1tLndpZHRoLEU9bS54LF89aS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixPZSgpLnN0YXRlLnRpdGxlU2hpZnQpLmF0dHIoImZvbnQtc2l6ZSIsT2UoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQoYS5pZCksST1fLm5vZGUoKS5nZXRCQm94KCkud2lkdGgrdztsZXQgQj1NYXRoLm1heChJLGIpO0I9PT1iJiYoQj1CK3cpO2xldCBOO2NvbnN0IFI9aS5ub2RlKCkuZ2V0QkJveCgpO2EuZG9jLE49RS1wLEk+YiYmKE49KGItQikvMitwKSxNYXRoLmFicyhFLVIueCk8cCYmST5iJiYoTj1FLShJLWIpLzIpO2NvbnN0IHo9MS1PZSgpLnN0YXRlLnRleHRIZWlnaHQ7cmV0dXJuIGkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsTikuYXR0cigieSIseikuYXR0cigiY2xhc3MiLGY/ImFsdC1jb21wb3NpdCI6ImNvbXBvc2l0IikuYXR0cigid2lkdGgiLEIpLmF0dHIoImhlaWdodCIsUi5oZWlnaHQrT2UoKS5zdGF0ZS50ZXh0SGVpZ2h0K09lKCkuc3RhdGUudGl0bGVTaGlmdCsxKS5hdHRyKCJyeCIsIjAiKSxfLmF0dHIoIngiLE4rcCksSTw9YiYmXy5hdHRyKCJ4IixFKyhCLXcpLzItSS8yK3ApLGkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsTikuYXR0cigieSIsT2UoKS5zdGF0ZS50aXRsZVNoaWZ0LU9lKCkuc3RhdGUudGV4dEhlaWdodC1PZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixCKS5hdHRyKCJoZWlnaHQiLE9lKCkuc3RhdGUudGV4dEhlaWdodCozKS5hdHRyKCJyeCIsT2UoKS5zdGF0ZS5yYWRpdXMpLGkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsTikuYXR0cigieSIsT2UoKS5zdGF0ZS50aXRsZVNoaWZ0LU9lKCkuc3RhdGUudGV4dEhlaWdodC1PZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixCKS5hdHRyKCJoZWlnaHQiLFIuaGVpZ2h0KzMrMipPZSgpLnN0YXRlLnRleHRIZWlnaHQpLmF0dHIoInJ4IixPZSgpLnN0YXRlLnJhZGl1cyksaX0sZlVlPWk9PihpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY2xhc3MiLCJlbmQtc3RhdGUtb3V0ZXIiKS5hdHRyKCJyIixPZSgpLnN0YXRlLnNpemVVbml0K09lKCkuc3RhdGUubWluaVBhZGRpbmcpLmF0dHIoImN4IixPZSgpLnN0YXRlLnBhZGRpbmcrT2UoKS5zdGF0ZS5zaXplVW5pdCtPZSgpLnN0YXRlLm1pbmlQYWRkaW5nKS5hdHRyKCJjeSIsT2UoKS5zdGF0ZS5wYWRkaW5nK09lKCkuc3RhdGUuc2l6ZVVuaXQrT2UoKS5zdGF0ZS5taW5pUGFkZGluZyksaS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwiZW5kLXN0YXRlLWlubmVyIikuYXR0cigiciIsT2UoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3giLE9lKCkuc3RhdGUucGFkZGluZytPZSgpLnN0YXRlLnNpemVVbml0KzIpLmF0dHIoImN5IixPZSgpLnN0YXRlLnBhZGRpbmcrT2UoKS5zdGF0ZS5zaXplVW5pdCsyKSksZFVlPShpLGEpPT57bGV0IGY9T2UoKS5zdGF0ZS5mb3JrV2lkdGgscD1PZSgpLnN0YXRlLmZvcmtIZWlnaHQ7aWYoYS5wYXJlbnRJZCl7bGV0IHc9ZjtmPXAscD13fXJldHVybiBpLmFwcGVuZCgicmVjdCIpLnN0eWxlKCJzdHJva2UiLCJibGFjayIpLnN0eWxlKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJ3aWR0aCIsZikuYXR0cigiaGVpZ2h0IixwKS5hdHRyKCJ4IixPZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLE9lKCkuc3RhdGUucGFkZGluZyl9LGdVZT0oaSxhLGYscCk9PntsZXQgdz0wO2NvbnN0IG09cC5hcHBlbmQoInRleHQiKTttLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IiksbS5hdHRyKCJjbGFzcyIsIm5vdGVUZXh0Iik7bGV0IGI9aS5yZXBsYWNlKC9cclxuL2csIjxici8+Iik7Yj1iLnJlcGxhY2UoL1xuL2csIjxici8+Iik7Y29uc3QgRT1iLnNwbGl0KEtyLmxpbmVCcmVha1JlZ2V4KTtsZXQgXz0xLjI1Kk9lKCkuc3RhdGUubm90ZU1hcmdpbjtmb3IoY29uc3QgQSBvZiBFKXtjb25zdCBJPUEudHJpbSgpO2lmKEkubGVuZ3RoPjApe2NvbnN0IEI9bS5hcHBlbmQoInRzcGFuIik7aWYoQi50ZXh0KEkpLF89PT0wKXtjb25zdCBOPUIubm9kZSgpLmdldEJCb3goKTtfKz1OLmhlaWdodH13Kz1fLEIuYXR0cigieCIsYStPZSgpLnN0YXRlLm5vdGVNYXJnaW4pLEIuYXR0cigieSIsZit3KzEuMjUqT2UoKS5zdGF0ZS5ub3RlTWFyZ2luKX19cmV0dXJue3RleHRXaWR0aDptLm5vZGUoKS5nZXRCQm94KCkud2lkdGgsdGV4dEhlaWdodDp3fX0scFVlPShpLGEpPT57YS5hdHRyKCJjbGFzcyIsInN0YXRlLW5vdGUiKTtjb25zdCBmPWEuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsMCkuYXR0cigieSIsT2UoKS5zdGF0ZS5wYWRkaW5nKSxwPWEuYXBwZW5kKCJnIikse3RleHRXaWR0aDp3LHRleHRIZWlnaHQ6bX09Z1VlKGksMCwwLHApO3JldHVybiBmLmF0dHIoImhlaWdodCIsbSsyKk9lKCkuc3RhdGUubm90ZU1hcmdpbiksZi5hdHRyKCJ3aWR0aCIsdytPZSgpLnN0YXRlLm5vdGVNYXJnaW4qMiksZn0sd2p0PWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1hLmlkLHA9e2lkOmYsbGFiZWw6YS5pZCx3aWR0aDowLGhlaWdodDowfSx3PWkuYXBwZW5kKCJnIikuYXR0cigiaWQiLGYpLmF0dHIoImNsYXNzIiwic3RhdGVHcm91cCIpO2EudHlwZT09PSJzdGFydCImJm9VZSh3KSxhLnR5cGU9PT0iZW5kIiYmZlVlKHcpLChhLnR5cGU9PT0iZm9yayJ8fGEudHlwZT09PSJqb2luIikmJmRVZSh3LGEpLGEudHlwZT09PSJub3RlIiYmcFVlKGEubm90ZS50ZXh0LHcpLGEudHlwZT09PSJkaXZpZGVyIiYmY1VlKHcpLGEudHlwZT09PSJkZWZhdWx0IiYmYS5kZXNjcmlwdGlvbnMubGVuZ3RoPT09MCYmdVVlKHcsYSksYS50eXBlPT09ImRlZmF1bHQiJiZhLmRlc2NyaXB0aW9ucy5sZW5ndGg+MCYmbFVlKHcsYSk7Y29uc3QgbT13Lm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIHAud2lkdGg9bS53aWR0aCsyKk9lKCkuc3RhdGUucGFkZGluZyxwLmhlaWdodD1tLmhlaWdodCsyKk9lKCkuc3RhdGUucGFkZGluZyxhVWUuc2V0KGYscCkscH07bGV0IHZqdD0wO2NvbnN0IGJVZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1mdW5jdGlvbihfKXtzd2l0Y2goXyl7Y2FzZSAkNS5yZWxhdGlvblR5cGUuQUdHUkVHQVRJT046cmV0dXJuImFnZ3JlZ2F0aW9uIjtjYXNlICQ1LnJlbGF0aW9uVHlwZS5FWFRFTlNJT046cmV0dXJuImV4dGVuc2lvbiI7Y2FzZSAkNS5yZWxhdGlvblR5cGUuQ09NUE9TSVRJT046cmV0dXJuImNvbXBvc2l0aW9uIjtjYXNlICQ1LnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZOnJldHVybiJkZXBlbmRlbmN5In19O2EucG9pbnRzPWEucG9pbnRzLmZpbHRlcihfPT4hTnVtYmVyLmlzTmFOKF8ueSkpO2NvbnN0IHc9YS5wb2ludHMsbT1FNSgpLngoZnVuY3Rpb24oXyl7cmV0dXJuIF8ueH0pLnkoZnVuY3Rpb24oXyl7cmV0dXJuIF8ueX0pLmN1cnZlKEhQKSxiPWkuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsbSh3KSkuYXR0cigiaWQiLCJlZGdlIit2anQpLmF0dHIoImNsYXNzIiwidHJhbnNpdGlvbiIpO2xldCBFPSIiO2lmKE9lKCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKEU9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gsRT1FLnJlcGxhY2UoL1woL2csIlxcKCIpLEU9RS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksYi5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrRSsiIyIrcCgkNS5yZWxhdGlvblR5cGUuREVQRU5ERU5DWSkrIkVuZCkiKSxmLnRpdGxlIT09dm9pZCAwKXtjb25zdCBfPWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJzdGF0ZUxhYmVsIikse3g6QSx5Okl9PSRhLmNhbGNMYWJlbFBvc2l0aW9uKGEucG9pbnRzKSxCPUtyLmdldFJvd3MoZi50aXRsZSk7bGV0IE49MDtjb25zdCBSPVtdO2xldCB6PTAsVz0wO2ZvcihsZXQgYXQ9MDthdDw9Qi5sZW5ndGg7YXQrKyl7Y29uc3QgYnQ9Xy5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoQlthdF0pLmF0dHIoIngiLEEpLmF0dHIoInkiLEkrTiksbXQ9YnQubm9kZSgpLmdldEJCb3goKTt6PU1hdGgubWF4KHosbXQud2lkdGgpLFc9TWF0aC5taW4oVyxtdC54KSxVdC5pbmZvKG10LngsQSxJK04pLE49PT0wJiYoTj1idC5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCxVdC5pbmZvKCJUaXRsZSBoZWlnaHQiLE4sSSkpLFIucHVzaChidCl9bGV0IGV0PU4qQi5sZW5ndGg7aWYoQi5sZW5ndGg+MSl7Y29uc3QgYXQ9KEIubGVuZ3RoLTEpKk4qLjU7Ui5mb3JFYWNoKChidCxtdCk9PmJ0LmF0dHIoInkiLEkrbXQqTi1hdCkpLGV0PU4qQi5sZW5ndGh9Y29uc3Qgc3Q9Xy5ub2RlKCkuZ2V0QkJveCgpO18uaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJib3giKS5hdHRyKCJ4IixBLXovMi1PZSgpLnN0YXRlLnBhZGRpbmcvMikuYXR0cigieSIsSS1ldC8yLU9lKCkuc3RhdGUucGFkZGluZy8yLTMuNSkuYXR0cigid2lkdGgiLHorT2UoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGV0K09lKCkuc3RhdGUucGFkZGluZyksVXQuaW5mbyhzdCl9dmp0Kyt9O2xldCBxYjtjb25zdCBqZ3Q9e30sd1VlPWZ1bmN0aW9uKCl7fSx2VWU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOSw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSxtVWU9ZnVuY3Rpb24oaSxhLGYscCl7cWI9T2UoKS5zdGF0ZTtjb25zdCB3PU9lKCkuc2VjdXJpdHlMZXZlbDtsZXQgbTt3PT09InNhbmRib3giJiYobT15cigiI2kiK2EpKTtjb25zdCBiPXlyKHc9PT0ic2FuZGJveCI/bS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksRT13PT09InNhbmRib3giP20ubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQ7VXQuZGVidWcoIlJlbmRlcmluZyBkaWFncmFtICIraSk7Y29uc3QgXz1iLnNlbGVjdChgW2lkPScke2F9J11gKTt2VWUoXyk7Y29uc3QgQT1wLmRiLmdldFJvb3REb2MoKTttanQoQSxfLHZvaWQgMCwhMSxiLEUscCk7Y29uc3QgST1xYi5wYWRkaW5nLEI9Xy5ub2RlKCkuZ2V0QkJveCgpLE49Qi53aWR0aCtJKjIsUj1CLmhlaWdodCtJKjIsej1OKjEuNzU7azAoXyxSLHoscWIudXNlTWF4V2lkdGgpLF8uYXR0cigidmlld0JveCIsYCR7Qi54LXFiLnBhZGRpbmd9ICAke0IueS1xYi5wYWRkaW5nfSBgK04rIiAiK1IpfSx5VWU9aT0+aT9pLmxlbmd0aCpxYi5mb250U2l6ZUZhY3RvcjoxLG1qdD0oaSxhLGYscCx3LG0sYik9Pntjb25zdCBFPW5ldyBjMSh7Y29tcG91bmQ6ITAsbXVsdGlncmFwaDohMH0pO2xldCBfLEE9ITA7Zm9yKF89MDtfPGkubGVuZ3RoO18rKylpZihpW19dLnN0bXQ9PT0icmVsYXRpb24iKXtBPSExO2JyZWFrfWY/RS5zZXRHcmFwaCh7cmFua2RpcjoiTFIiLG11bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITAscmFua2VyOiJ0aWdodC10cmVlIixyYW5rc2VwOkE/MTpxYi5lZGdlTGVuZ3RoRmFjdG9yLG5vZGVTZXA6QT8xOjUwLGlzTXVsdGlHcmFwaDohMH0pOkUuc2V0R3JhcGgoe3JhbmtkaXI6IlRCIixtdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwLHJhbmtzZXA6QT8xOnFiLmVkZ2VMZW5ndGhGYWN0b3Isbm9kZVNlcDpBPzE6NTAscmFua2VyOiJ0aWdodC10cmVlIixpc011bHRpR3JhcGg6ITB9KSxFLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pLGIuZGIuZXh0cmFjdChpKTtjb25zdCBJPWIuZGIuZ2V0U3RhdGVzKCksQj1iLmRiLmdldFJlbGF0aW9ucygpLE49T2JqZWN0LmtleXMoSSk7Zm9yKGNvbnN0IHN0IG9mIE4pe2NvbnN0IGF0PUlbc3RdO2YmJihhdC5wYXJlbnRJZD1mKTtsZXQgYnQ7aWYoYXQuZG9jKXtsZXQgbXQ9YS5hcHBlbmQoImciKS5hdHRyKCJpZCIsYXQuaWQpLmF0dHIoImNsYXNzIiwic3RhdGVHcm91cCIpO2J0PW1qdChhdC5kb2MsbXQsYXQuaWQsIXAsdyxtLGIpO3ttdD1oVWUobXQsYXQscCk7bGV0IHl0PW10Lm5vZGUoKS5nZXRCQm94KCk7YnQud2lkdGg9eXQud2lkdGgsYnQuaGVpZ2h0PXl0LmhlaWdodCtxYi5wYWRkaW5nLzIsamd0W2F0LmlkXT17eTpxYi5jb21wb3NpdFRpdGxlU2l6ZX19fWVsc2UgYnQ9d2p0KGEsYXQpO2lmKGF0Lm5vdGUpe2NvbnN0IG10PXtkZXNjcmlwdGlvbnM6W10saWQ6YXQuaWQrIi1ub3RlIixub3RlOmF0Lm5vdGUsdHlwZToibm90ZSJ9LHl0PXdqdChhLG10KTthdC5ub3RlLnBvc2l0aW9uPT09ImxlZnQgb2YiPyhFLnNldE5vZGUoYnQuaWQrIi1ub3RlIix5dCksRS5zZXROb2RlKGJ0LmlkLGJ0KSk6KEUuc2V0Tm9kZShidC5pZCxidCksRS5zZXROb2RlKGJ0LmlkKyItbm90ZSIseXQpKSxFLnNldFBhcmVudChidC5pZCxidC5pZCsiLWdyb3VwIiksRS5zZXRQYXJlbnQoYnQuaWQrIi1ub3RlIixidC5pZCsiLWdyb3VwIil9ZWxzZSBFLnNldE5vZGUoYnQuaWQsYnQpfVV0LmRlYnVnKCJDb3VudD0iLEUubm9kZUNvdW50KCksRSk7bGV0IFI9MDtCLmZvckVhY2goZnVuY3Rpb24oc3Qpe1IrKyxVdC5kZWJ1ZygiU2V0dGluZyBlZGdlIixzdCksRS5zZXRFZGdlKHN0LmlkMSxzdC5pZDIse3JlbGF0aW9uOnN0LHdpZHRoOnlVZShzdC50aXRsZSksaGVpZ2h0OnFiLmxhYmVsSGVpZ2h0KktyLmdldFJvd3Moc3QudGl0bGUpLmxlbmd0aCxsYWJlbHBvczoiYyJ9LCJpZCIrUil9KSxhTChFKSxVdC5kZWJ1ZygiR3JhcGggYWZ0ZXIgbGF5b3V0IixFLm5vZGVzKCkpO2NvbnN0IHo9YS5ub2RlKCk7RS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oc3Qpe3N0IT09dm9pZCAwJiZFLm5vZGUoc3QpIT09dm9pZCAwPyhVdC53YXJuKCJOb2RlICIrc3QrIjogIitKU09OLnN0cmluZ2lmeShFLm5vZGUoc3QpKSksdy5zZWxlY3QoIiMiK3ouaWQrIiAjIitzdCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKEUubm9kZShzdCkueC1FLm5vZGUoc3QpLndpZHRoLzIpKyIsIisoRS5ub2RlKHN0KS55KyhqZ3Rbc3RdP2pndFtzdF0ueTowKS1FLm5vZGUoc3QpLmhlaWdodC8yKSsiICkiKSx3LnNlbGVjdCgiIyIrei5pZCsiICMiK3N0KS5hdHRyKCJkYXRhLXgtc2hpZnQiLEUubm9kZShzdCkueC1FLm5vZGUoc3QpLndpZHRoLzIpLG0ucXVlcnlTZWxlY3RvckFsbCgiIyIrei5pZCsiICMiK3N0KyIgLmRpdmlkZXIiKS5mb3JFYWNoKGJ0PT57Y29uc3QgbXQ9YnQucGFyZW50RWxlbWVudDtsZXQgeXQ9MCxmdD0wO210JiYobXQucGFyZW50RWxlbWVudCYmKHl0PW10LnBhcmVudEVsZW1lbnQuZ2V0QkJveCgpLndpZHRoKSxmdD1wYXJzZUludChtdC5nZXRBdHRyaWJ1dGUoImRhdGEteC1zaGlmdCIpLDEwKSxOdW1iZXIuaXNOYU4oZnQpJiYoZnQ9MCkpLGJ0LnNldEF0dHJpYnV0ZSgieDEiLDAtZnQrOCksYnQuc2V0QXR0cmlidXRlKCJ4MiIseXQtZnQtOCl9KSk6VXQuZGVidWcoIk5vIE5vZGUgIitzdCsiOiAiK0pTT04uc3RyaW5naWZ5KEUubm9kZShzdCkpKX0pO2xldCBXPXouZ2V0QkJveCgpO0UuZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHN0KXtzdCE9PXZvaWQgMCYmRS5lZGdlKHN0KSE9PXZvaWQgMCYmKFV0LmRlYnVnKCJFZGdlICIrc3QudisiIC0+ICIrc3QudysiOiAiK0pTT04uc3RyaW5naWZ5KEUuZWRnZShzdCkpKSxiVWUoYSxFLmVkZ2Uoc3QpLEUuZWRnZShzdCkucmVsYXRpb24pKX0pLFc9ei5nZXRCQm94KCk7Y29uc3QgZXQ9e2lkOmZ8fCJyb290IixsYWJlbDpmfHwicm9vdCIsd2lkdGg6MCxoZWlnaHQ6MH07cmV0dXJuIGV0LndpZHRoPVcud2lkdGgrMipxYi5wYWRkaW5nLGV0LmhlaWdodD1XLmhlaWdodCsyKnFiLnBhZGRpbmcsVXQuZGVidWcoIkRvYyByZW5kZXJlZCIsZXQsRSksZXR9LHhVZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOmVqdCxkYjokNSxyZW5kZXJlcjp7c2V0Q29uZjp3VWUsZHJhdzptVWV9LHN0eWxlczpwanQsaW5pdDppPT57aS5zdGF0ZXx8KGkuc3RhdGU9e30pLGkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZT1pLmFycm93TWFya2VyQWJzb2x1dGUsJDUuY2xlYXIoKX19fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLFFZPSJyZWN0IiwkZ3Q9InJlY3RXaXRoVGl0bGUiLGtVZT0ic3RhcnQiLEVVZT0iZW5kIixUVWU9ImRpdmlkZXIiLENVZT0icm91bmRlZFdpdGhUaXRsZSIsX1VlPSJub3RlIixTVWU9Im5vdGVHcm91cCIsdkw9InN0YXRlZGlhZ3JhbSIsQVVlPWAke3ZMfS1zdGF0ZWAseWp0PSJ0cmFuc2l0aW9uIixMVWU9Im5vdGUiLE1VZT1gJHt5anR9IG5vdGUtZWRnZWAsRFVlPWAke3ZMfS0ke0xVZX1gLElVZT1gJHt2TH0tY2x1c3RlcmAsT1VlPWAke3ZMfS1jbHVzdGVyLWFsdGAseGp0PSJwYXJlbnQiLGtqdD0ibm90ZSIsUFVlPSJzdGF0ZSIsemd0PSItLS0tIixGVWU9YCR7emd0fSR7a2p0fWAsRWp0PWAke3pndH0ke3hqdH1gLFRqdD0iZmlsbDpub25lIixDanQ9ImZpbGw6ICMzMzMiLF9qdD0iYyIsU2p0PSJ0ZXh0IixBanQ9Im5vcm1hbCI7bGV0IFpZPXt9LGtrPTA7Y29uc3QgTlVlPWZ1bmN0aW9uKGkpe2NvbnN0IGE9T2JqZWN0LmtleXMoaSk7Zm9yKGNvbnN0IGYgb2YgYSlpW2ZdfSxCVWU9ZnVuY3Rpb24oaSxhKXtyZXR1cm4gYS5kYi5leHRyYWN0KGEuZGIuZ2V0Um9vdERvY1YyKCkpLGEuZGIuZ2V0Q2xhc3NlcygpfTtmdW5jdGlvbiBSVWUoaSl7cmV0dXJuIGk9PW51bGw/IiI6aS5jbGFzc2VzP2kuY2xhc3Nlcy5qb2luKCIgIik6IiJ9ZnVuY3Rpb24gcWd0KGk9IiIsYT0wLGY9IiIscD16Z3Qpe2NvbnN0IHc9ZiE9PW51bGwmJmYubGVuZ3RoPjA/YCR7cH0ke2Z9YDoiIjtyZXR1cm5gJHtQVWV9LSR7aX0ke3d9LSR7YX1gfWNvbnN0IEpGPShpLGEsZixwLHcsbSk9Pntjb25zdCBiPWYuaWQsRT1SVWUocFtiXSk7aWYoYiE9PSJyb290Iil7bGV0IF89UVk7Zi5zdGFydD09PSEwJiYoXz1rVWUpLGYuc3RhcnQ9PT0hMSYmKF89RVVlKSxmLnR5cGUhPT1LRiYmKF89Zi50eXBlKSxaWVtiXXx8KFpZW2JdPXtpZDpiLHNoYXBlOl8sZGVzY3JpcHRpb246S3Iuc2FuaXRpemVUZXh0KGIsT2UoKSksY2xhc3NlczpgJHtFfSAke0FVZX1gfSk7Y29uc3QgQT1aWVtiXTtmLmRlc2NyaXB0aW9uJiYoQXJyYXkuaXNBcnJheShBLmRlc2NyaXB0aW9uKT8oQS5zaGFwZT0kZ3QsQS5kZXNjcmlwdGlvbi5wdXNoKGYuZGVzY3JpcHRpb24pKTpBLmRlc2NyaXB0aW9uLmxlbmd0aD4wPyhBLnNoYXBlPSRndCxBLmRlc2NyaXB0aW9uPT09Yj9BLmRlc2NyaXB0aW9uPVtmLmRlc2NyaXB0aW9uXTpBLmRlc2NyaXB0aW9uPVtBLmRlc2NyaXB0aW9uLGYuZGVzY3JpcHRpb25dKTooQS5zaGFwZT1RWSxBLmRlc2NyaXB0aW9uPWYuZGVzY3JpcHRpb24pLEEuZGVzY3JpcHRpb249S3Iuc2FuaXRpemVUZXh0T3JBcnJheShBLmRlc2NyaXB0aW9uLE9lKCkpKSxBLmRlc2NyaXB0aW9uLmxlbmd0aD09PTEmJkEuc2hhcGU9PT0kZ3QmJihBLnNoYXBlPVFZKSwhQS50eXBlJiZmLmRvYyYmKFV0LmluZm8oIlNldHRpbmcgY2x1c3RlciBmb3IgIixiLEhndChmKSksQS50eXBlPSJncm91cCIsQS5kaXI9SGd0KGYpLEEuc2hhcGU9Zi50eXBlPT09bmp0P1RVZTpDVWUsQS5jbGFzc2VzPUEuY2xhc3NlcysiICIrSVVlKyIgIisobT9PVWU6IiIpKTtjb25zdCBJPXtsYWJlbFN0eWxlOiIiLHNoYXBlOkEuc2hhcGUsbGFiZWxUZXh0OkEuZGVzY3JpcHRpb24sY2xhc3NlczpBLmNsYXNzZXMsc3R5bGU6IiIsaWQ6YixkaXI6QS5kaXIsZG9tSWQ6cWd0KGIsa2spLHR5cGU6QS50eXBlLHBhZGRpbmc6MTV9O2lmKEkuY2VudGVyTGFiZWw9ITAsZi5ub3RlKXtjb25zdCBCPXtsYWJlbFN0eWxlOiIiLHNoYXBlOl9VZSxsYWJlbFRleHQ6Zi5ub3RlLnRleHQsY2xhc3NlczpEVWUsc3R5bGU6IiIsaWQ6YitGVWUrIi0iK2trLGRvbUlkOnFndChiLGtrLGtqdCksdHlwZTpBLnR5cGUscGFkZGluZzoxNX0sTj17bGFiZWxTdHlsZToiIixzaGFwZTpTVWUsbGFiZWxUZXh0OmYubm90ZS50ZXh0LGNsYXNzZXM6QS5jbGFzc2VzLHN0eWxlOiIiLGlkOmIrRWp0LGRvbUlkOnFndChiLGtrLHhqdCksdHlwZToiZ3JvdXAiLHBhZGRpbmc6MH07a2srKztjb25zdCBSPWIrRWp0O2kuc2V0Tm9kZShSLE4pLGkuc2V0Tm9kZShCLmlkLEIpLGkuc2V0Tm9kZShiLEkpLGkuc2V0UGFyZW50KGIsUiksaS5zZXRQYXJlbnQoQi5pZCxSKTtsZXQgej1iLFc9Qi5pZDtmLm5vdGUucG9zaXRpb249PT0ibGVmdCBvZiImJih6PUIuaWQsVz1iKSxpLnNldEVkZ2UoeixXLHthcnJvd2hlYWQ6Im5vbmUiLGFycm93VHlwZToiIixzdHlsZTpUanQsbGFiZWxTdHlsZToiIixjbGFzc2VzOk1VZSxhcnJvd2hlYWRTdHlsZTpDanQsbGFiZWxwb3M6X2p0LGxhYmVsVHlwZTpTanQsdGhpY2tuZXNzOkFqdH0pfWVsc2UgaS5zZXROb2RlKGIsSSl9YSYmYS5pZCE9PSJyb290IiYmKFV0LnRyYWNlKCJTZXR0aW5nIG5vZGUgIixiLCIgdG8gYmUgY2hpbGQgb2YgaXRzIHBhcmVudCAiLGEuaWQpLGkuc2V0UGFyZW50KGIsYS5pZCkpLGYuZG9jJiYoVXQudHJhY2UoIkFkZGluZyBub2RlcyBjaGlsZHJlbiAiKSxqVWUoaSxmLGYuZG9jLHAsdywhbSkpfSxqVWU9KGksYSxmLHAsdyxtKT0+e1V0LnRyYWNlKCJpdGVtcyIsZiksZi5mb3JFYWNoKGI9Pntzd2l0Y2goYi5zdG10KXtjYXNlIFVZOkpGKGksYSxiLHAsdyxtKTticmVhaztjYXNlIEtGOkpGKGksYSxiLHAsdyxtKTticmVhaztjYXNlIElndDp7SkYoaSxhLGIuc3RhdGUxLHAsdyxtKSxKRihpLGEsYi5zdGF0ZTIscCx3LG0pO2NvbnN0IEU9e2lkOiJlZGdlIitrayxhcnJvd2hlYWQ6Im5vcm1hbCIsYXJyb3dUeXBlRW5kOiJhcnJvd19iYXJiIixzdHlsZTpUanQsbGFiZWxTdHlsZToiIixsYWJlbDpLci5zYW5pdGl6ZVRleHQoYi5kZXNjcmlwdGlvbixPZSgpKSxhcnJvd2hlYWRTdHlsZTpDanQsbGFiZWxwb3M6X2p0LGxhYmVsVHlwZTpTanQsdGhpY2tuZXNzOkFqdCxjbGFzc2VzOnlqdH07aS5zZXRFZGdlKGIuc3RhdGUxLmlkLGIuc3RhdGUyLmlkLEUsa2spLGtrKyt9YnJlYWt9fSl9LEhndD0oaSxhPU5HZSk9PntsZXQgZj1hO2lmKGkuZG9jKWZvcihsZXQgcD0wO3A8aS5kb2MubGVuZ3RoO3ArKyl7Y29uc3Qgdz1pLmRvY1twXTt3LnN0bXQ9PT0iZGlyIiYmKGY9dy52YWx1ZSl9cmV0dXJuIGZ9LCRVZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOmVqdCxkYjokNSxyZW5kZXJlcjp7c2V0Q29uZjpOVWUsZ2V0Q2xhc3NlczpCVWUsZHJhdzphc3luYyBmdW5jdGlvbihpLGEsZixwKXtVdC5pbmZvKCJEcmF3aW5nIHN0YXRlIGRpYWdyYW0gKHYyKSIsYSksWlk9e30scC5kYi5nZXREaXJlY3Rpb24oKTtjb25zdHtzZWN1cml0eUxldmVsOncsc3RhdGU6bX09T2UoKSxiPW0ubm9kZVNwYWNpbmd8fDUwLEU9bS5yYW5rU3BhY2luZ3x8NTA7VXQuaW5mbyhwLmRiLmdldFJvb3REb2NWMigpKSxwLmRiLmV4dHJhY3QocC5kYi5nZXRSb290RG9jVjIoKSksVXQuaW5mbyhwLmRiLmdldFJvb3REb2NWMigpKTtjb25zdCBfPXAuZGIuZ2V0U3RhdGVzKCksQT1uZXcgYzEoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpIZ3QocC5kYi5nZXRSb290RG9jVjIoKSksbm9kZXNlcDpiLHJhbmtzZXA6RSxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7SkYoQSx2b2lkIDAscC5kYi5nZXRSb290RG9jVjIoKSxfLHAuZGIsITApO2xldCBJO3c9PT0ic2FuZGJveCImJihJPXlyKCIjaSIrYSkpO2NvbnN0IEI9eXIodz09PSJzYW5kYm94Ij9JLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHk6ImJvZHkiKSxOPUIuc2VsZWN0KGBbaWQ9IiR7YX0iXWApLFI9Qi5zZWxlY3QoIiMiK2ErIiBnIik7YXdhaXQgTjB0KFIsQSxbImJhcmIiXSx2TCxhKTtjb25zdCB6PTg7JGEuaW5zZXJ0VGl0bGUoTiwic3RhdGVkaWFncmFtVGl0bGVUZXh0IixtLnRpdGxlVG9wTWFyZ2luLHAuZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpO2NvbnN0IFc9Ti5ub2RlKCkuZ2V0QkJveCgpLGV0PVcud2lkdGgreioyLHN0PVcuaGVpZ2h0K3oqMjtOLmF0dHIoImNsYXNzIix2TCk7Y29uc3QgYXQ9Ti5ub2RlKCkuZ2V0QkJveCgpO2swKE4sc3QsZXQsbS51c2VNYXhXaWR0aCk7Y29uc3QgYnQ9YCR7YXQueC16fSAke2F0Lnkten0gJHtldH0gJHtzdH1gO1V0LmRlYnVnKGB2aWV3Qm94ICR7YnR9YCksTi5hdHRyKCJ2aWV3Qm94IixidCk7Y29uc3QgbXQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkPSInK2ErJyJdIC5lZGdlTGFiZWwgLmxhYmVsJyk7Zm9yKGNvbnN0IHl0IG9mIG10KXtjb25zdCBmdD15dC5nZXRCQm94KCksdXQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsUVkpO3V0LnNldEF0dHJpYnV0ZSgicngiLDApLHV0LnNldEF0dHJpYnV0ZSgicnkiLDApLHV0LnNldEF0dHJpYnV0ZSgid2lkdGgiLGZ0LndpZHRoKSx1dC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsZnQuaGVpZ2h0KSx5dC5pbnNlcnRCZWZvcmUodXQseXQuZmlyc3RDaGlsZCl9fX0sc3R5bGVzOnBqdCxpbml0Omk9PntpLnN0YXRlfHwoaS5zdGF0ZT17fSksaS5zdGF0ZS5hcnJvd01hcmtlckFic29sdXRlPWkuYXJyb3dNYXJrZXJBYnNvbHV0ZSwkNS5jbGVhcigpfX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIFZndD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKEIsTixSLHope2ZvcihSPVJ8fHt9LHo9Qi5sZW5ndGg7ei0tO1JbQlt6XV09Tik7cmV0dXJuIFJ9LGE9WzYsOCwxMCwxMSwxMiwxNCwxNiwxNywxOF0sZj1bMSw5XSxwPVsxLDEwXSx3PVsxLDExXSxtPVsxLDEyXSxiPVsxLDEzXSxFPVsxLDE0XSxfPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxqb3VybmV5OjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsU1BBQ0U6OCxzdGF0ZW1lbnQ6OSxORVdMSU5FOjEwLHRpdGxlOjExLGFjY190aXRsZToxMixhY2NfdGl0bGVfdmFsdWU6MTMsYWNjX2Rlc2NyOjE0LGFjY19kZXNjcl92YWx1ZToxNSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjE2LHNlY3Rpb246MTcsdGFza05hbWU6MTgsdGFza0RhdGE6MTksJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6ImpvdXJuZXkiLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJORVdMSU5FIiwxMToidGl0bGUiLDEyOiJhY2NfdGl0bGUiLDEzOiJhY2NfdGl0bGVfdmFsdWUiLDE0OiJhY2NfZGVzY3IiLDE1OiJhY2NfZGVzY3JfdmFsdWUiLDE2OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwxNzoic2VjdGlvbiIsMTg6InRhc2tOYW1lIiwxOToidGFza0RhdGEifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzksMV0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzksMl1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oTixSLHosVyxldCxzdCxhdCl7dmFyIGJ0PXN0Lmxlbmd0aC0xO3N3aXRjaChldCl7Y2FzZSAxOnJldHVybiBzdFtidC0xXTtjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzpzdFtidC0xXS5wdXNoKHN0W2J0XSksdGhpcy4kPXN0W2J0LTFdO2JyZWFrO2Nhc2UgNDpjYXNlIDU6dGhpcy4kPXN0W2J0XTticmVhaztjYXNlIDY6Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6Vy5zZXREaWFncmFtVGl0bGUoc3RbYnRdLnN1YnN0cig2KSksdGhpcy4kPXN0W2J0XS5zdWJzdHIoNik7YnJlYWs7Y2FzZSA5OnRoaXMuJD1zdFtidF0udHJpbSgpLFcuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDEwOmNhc2UgMTE6dGhpcy4kPXN0W2J0XS50cmltKCksVy5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMTI6Vy5hZGRTZWN0aW9uKHN0W2J0XS5zdWJzdHIoOCkpLHRoaXMuJD1zdFtidF0uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMTM6Vy5hZGRUYXNrKHN0W2J0LTFdLHN0W2J0XSksdGhpcy4kPSJ0YXNrIjticmVha319LHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0saShhLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODpbMSw2XSw5OjcsMTA6WzEsOF0sMTE6ZiwxMjpwLDE0OncsMTY6bSwxNzpiLDE4OkV9LGkoYSxbMiw3XSx7MTpbMiwxXX0pLGkoYSxbMiwzXSksezk6MTUsMTE6ZiwxMjpwLDE0OncsMTY6bSwxNzpiLDE4OkV9LGkoYSxbMiw1XSksaShhLFsyLDZdKSxpKGEsWzIsOF0pLHsxMzpbMSwxNl19LHsxNTpbMSwxN119LGkoYSxbMiwxMV0pLGkoYSxbMiwxMl0pLHsxOTpbMSwxOF19LGkoYSxbMiw0XSksaShhLFsyLDldKSxpKGEsWzIsMTBdKSxpKGEsWzIsMTNdKV0sZGVmYXVsdEFjdGlvbnM6e30scGFyc2VFcnJvcjpmdW5jdGlvbihOLFIpe2lmKFIucmVjb3ZlcmFibGUpdGhpcy50cmFjZShOKTtlbHNle3ZhciB6PW5ldyBFcnJvcihOKTt0aHJvdyB6Lmhhc2g9Uix6fX0scGFyc2U6ZnVuY3Rpb24oTil7dmFyIFI9dGhpcyx6PVswXSxXPVtdLGV0PVtudWxsXSxzdD1bXSxhdD10aGlzLnRhYmxlLGJ0PSIiLG10PTAseXQ9MCxmdD0yLHV0PTEsdnQ9c3Quc2xpY2UuY2FsbChhcmd1bWVudHMsMSksWD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHB0PXt5eTp7fX07Zm9yKHZhciBVIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksVSkmJihwdC55eVtVXT10aGlzLnl5W1VdKTtYLnNldElucHV0KE4scHQueXkpLHB0Lnl5LmxleGVyPVgscHQueXkucGFyc2VyPXRoaXMsdHlwZW9mIFgueXlsbG9jPiJ1IiYmKFgueXlsbG9jPXt9KTt2YXIgVHQ9WC55eWxsb2M7c3QucHVzaChUdCk7dmFyIG50PVgub3B0aW9ucyYmWC5vcHRpb25zLnJhbmdlczt0eXBlb2YgcHQueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9cHQueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gSXQoKXt2YXIgU2U7cmV0dXJuIFNlPVcucG9wKCl8fFgubGV4KCl8fHV0LHR5cGVvZiBTZSE9Im51bWJlciImJihTZSBpbnN0YW5jZW9mIEFycmF5JiYoVz1TZSxTZT1XLnBvcCgpKSxTZT1SLnN5bWJvbHNfW1NlXXx8U2UpLFNlfWZvcih2YXIgT3QsQnQsRXQsWixDdD17fSx4dCxIdCxMZSxGdDs7KXtpZihCdD16W3oubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbQnRdP0V0PXRoaXMuZGVmYXVsdEFjdGlvbnNbQnRdOigoT3Q9PT1udWxsfHx0eXBlb2YgT3Q+InUiKSYmKE90PUl0KCkpLEV0PWF0W0J0XSYmYXRbQnRdW090XSksdHlwZW9mIEV0PiJ1Inx8IUV0Lmxlbmd0aHx8IUV0WzBdKXt2YXIgZ249IiI7RnQ9W107Zm9yKHh0IGluIGF0W0J0XSl0aGlzLnRlcm1pbmFsc19beHRdJiZ4dD5mdCYmRnQucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW3h0XSsiJyIpO1guc2hvd1Bvc2l0aW9uP2duPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKG10KzEpK2A6CmArWC5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK0Z0LmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bT3RdfHxPdCkrIiciOmduPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKG10KzEpKyI6IFVuZXhwZWN0ZWQgIisoT3Q9PXV0PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW090XXx8T3QpKyInIiksdGhpcy5wYXJzZUVycm9yKGduLHt0ZXh0OlgubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW090XXx8T3QsbGluZTpYLnl5bGluZW5vLGxvYzpUdCxleHBlY3RlZDpGdH0pfWlmKEV0WzBdaW5zdGFuY2VvZiBBcnJheSYmRXQubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitCdCsiLCB0b2tlbjogIitPdCk7c3dpdGNoKEV0WzBdKXtjYXNlIDE6ei5wdXNoKE90KSxldC5wdXNoKFgueXl0ZXh0KSxzdC5wdXNoKFgueXlsbG9jKSx6LnB1c2goRXRbMV0pLE90PW51bGwseXQ9WC55eWxlbmcsYnQ9WC55eXRleHQsbXQ9WC55eWxpbmVubyxUdD1YLnl5bGxvYzticmVhaztjYXNlIDI6aWYoSHQ9dGhpcy5wcm9kdWN0aW9uc19bRXRbMV1dWzFdLEN0LiQ9ZXRbZXQubGVuZ3RoLUh0XSxDdC5fJD17Zmlyc3RfbGluZTpzdFtzdC5sZW5ndGgtKEh0fHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6c3Rbc3QubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46c3Rbc3QubGVuZ3RoLShIdHx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpzdFtzdC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LG50JiYoQ3QuXyQucmFuZ2U9W3N0W3N0Lmxlbmd0aC0oSHR8fDEpXS5yYW5nZVswXSxzdFtzdC5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxaPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShDdCxbYnQseXQsbXQscHQueXksRXRbMV0sZXQsc3RdLmNvbmNhdCh2dCkpLHR5cGVvZiBaPCJ1IilyZXR1cm4gWjtIdCYmKHo9ei5zbGljZSgwLC0xKkh0KjIpLGV0PWV0LnNsaWNlKDAsLTEqSHQpLHN0PXN0LnNsaWNlKDAsLTEqSHQpKSx6LnB1c2godGhpcy5wcm9kdWN0aW9uc19bRXRbMV1dWzBdKSxldC5wdXNoKEN0LiQpLHN0LnB1c2goQ3QuXyQpLExlPWF0W3pbei5sZW5ndGgtMl1dW3pbei5sZW5ndGgtMV1dLHoucHVzaChMZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LEE9ZnVuY3Rpb24oKXt2YXIgQj17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihSLHope2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoUix6KTtlbHNlIHRocm93IG5ldyBFcnJvcihSKX0sc2V0SW5wdXQ6ZnVuY3Rpb24oTixSKXtyZXR1cm4gdGhpcy55eT1SfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1OLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBOPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1OLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1OLHRoaXMubWF0Y2hlZCs9Tjt2YXIgUj1OLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gUj8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksTn0sdW5wdXQ6ZnVuY3Rpb24oTil7dmFyIFI9Ti5sZW5ndGgsej1OLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Tit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtUiksdGhpcy5vZmZzZXQtPVI7dmFyIFc9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksei5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXoubGVuZ3RoLTEpO3ZhciBldD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46ej8oei5sZW5ndGg9PT1XLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrV1tXLmxlbmd0aC16Lmxlbmd0aF0ubGVuZ3RoLXpbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1SfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2V0WzBdLGV0WzBdK3RoaXMueXlsZW5nLVJdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihOKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoTikpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgTj10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKE4ubGVuZ3RoPjIwPyIuLi4iOiIiKStOLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIE49dGhpcy5tYXRjaDtyZXR1cm4gTi5sZW5ndGg8MjAmJihOKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1OLmxlbmd0aCkpLChOLnN1YnN0cigwLDIwKSsoTi5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIE49dGhpcy5wYXN0SW5wdXQoKSxSPW5ldyBBcnJheShOLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIE4rdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK1IrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKE4sUil7dmFyIHosVyxldDtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoZXQ9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoZXQueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksVz1OWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxXJiYodGhpcy55eWxpbmVubys9Vy5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpXP1dbVy5sZW5ndGgtMV0ubGVuZ3RoLVdbVy5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitOWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPU5bMF0sdGhpcy5tYXRjaCs9TlswXSx0aGlzLm1hdGNoZXM9Tix0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShOWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1OWzBdLHo9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsUix0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSx6KXJldHVybiB6O2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBzdCBpbiBldCl0aGlzW3N0XT1ldFtzdF07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgTixSLHosVzt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBldD10aGlzLl9jdXJyZW50UnVsZXMoKSxzdD0wO3N0PGV0Lmxlbmd0aDtzdCsrKWlmKHo9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tldFtzdF1dKSx6JiYoIVJ8fHpbMF0ubGVuZ3RoPlJbMF0ubGVuZ3RoKSl7aWYoUj16LFc9c3QsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoTj10aGlzLnRlc3RfbWF0Y2goeixldFtzdF0pLE4hPT0hMSlyZXR1cm4gTjtpZih0aGlzLl9iYWNrdHJhY2spe1I9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gUj8oTj10aGlzLnRlc3RfbWF0Y2goUixldFtXXSksTiE9PSExP046ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBSPXRoaXMubmV4dCgpO3JldHVybiBSfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihSKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goUil9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIFI9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gUj4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKFIpe3JldHVybiBSPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoUnx8MCksUj49MD90aGlzLmNvbmRpdGlvblN0YWNrW1JdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKFIpe3RoaXMuYmVnaW4oUil9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oUix6LFcsZXQpe3N3aXRjaChXKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gMTA7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpicmVhaztjYXNlIDU6cmV0dXJuIDQ7Y2FzZSA2OnJldHVybiAxMTtjYXNlIDc6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDEyO2Nhc2UgODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgOTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMTQ7Y2FzZSAxMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgMTE6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTM6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTQ6cmV0dXJuIDE3O2Nhc2UgMTU6cmV0dXJuIDE4O2Nhc2UgMTY6cmV0dXJuIDE5O2Nhc2UgMTc6cmV0dXJuIjoiO2Nhc2UgMTg6cmV0dXJuIDY7Y2FzZSAxOTpyZXR1cm4iSU5WQUxJRCJ9fSxydWxlczpbL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OmpvdXJuZXlcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86c2VjdGlvblxzW14jOlxuO10rKS9pLC9eKD86W14jOlxuO10rKS9pLC9eKD86OlteI1xuO10rKS9pLC9eKD86OikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTIsMTNdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMTBdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbOF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMTgsMTldLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gQn0oKTtfLmxleGVyPUE7ZnVuY3Rpb24gSSgpe3RoaXMueXk9e319cmV0dXJuIEkucHJvdG90eXBlPV8sXy5QYXJzZXI9SSxuZXcgSX0oKTtWZ3QucGFyc2VyPVZndDtjb25zdCB6VWU9Vmd0O2xldCBtTD0iIjtjb25zdCBHZ3Q9W10sdE49W10sZU49W10scVVlPWZ1bmN0aW9uKCl7R2d0Lmxlbmd0aD0wLHROLmxlbmd0aD0wLG1MPSIiLGVOLmxlbmd0aD0wLGhnKCl9LEhVZT1mdW5jdGlvbihpKXttTD1pLEdndC5wdXNoKGkpfSxWVWU9ZnVuY3Rpb24oKXtyZXR1cm4gR2d0fSxHVWU9ZnVuY3Rpb24oKXtsZXQgaT1ManQoKTtjb25zdCBhPTEwMDtsZXQgZj0wO2Zvcig7IWkmJmY8YTspaT1ManQoKSxmKys7cmV0dXJuIHROLnB1c2goLi4uZU4pLHROfSxVVWU9ZnVuY3Rpb24oKXtjb25zdCBpPVtdO3JldHVybiB0Ti5mb3JFYWNoKGY9PntmLnBlb3BsZSYmaS5wdXNoKC4uLmYucGVvcGxlKX0pLFsuLi5uZXcgU2V0KGkpXS5zb3J0KCl9LFdVZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9YS5zdWJzdHIoMSkuc3BsaXQoIjoiKTtsZXQgcD0wLHc9W107Zi5sZW5ndGg9PT0xPyhwPU51bWJlcihmWzBdKSx3PVtdKToocD1OdW1iZXIoZlswXSksdz1mWzFdLnNwbGl0KCIsIikpO2NvbnN0IG09dy5tYXAoRT0+RS50cmltKCkpLGI9e3NlY3Rpb246bUwsdHlwZTptTCxwZW9wbGU6bSx0YXNrOmksc2NvcmU6cH07ZU4ucHVzaChiKX0sWVVlPWZ1bmN0aW9uKGkpe2NvbnN0IGE9e3NlY3Rpb246bUwsdHlwZTptTCxkZXNjcmlwdGlvbjppLHRhc2s6aSxjbGFzc2VzOltdfTt0Ti5wdXNoKGEpfSxManQ9ZnVuY3Rpb24oKXtjb25zdCBpPWZ1bmN0aW9uKGYpe3JldHVybiBlTltmXS5wcm9jZXNzZWR9O2xldCBhPSEwO2Zvcihjb25zdFtmLHBdb2YgZU4uZW50cmllcygpKWkoZiksYT1hJiZwLnByb2Nlc3NlZDtyZXR1cm4gYX0sTWp0PXtnZXRDb25maWc6KCk9Pk9lKCkuam91cm5leSxjbGVhcjpxVWUsc2V0RGlhZ3JhbVRpdGxlOk5iLGdldERpYWdyYW1UaXRsZTpwZyxzZXRBY2NUaXRsZTpFMCxnZXRBY2NUaXRsZTpmZyxzZXRBY2NEZXNjcmlwdGlvbjpkZyxnZXRBY2NEZXNjcmlwdGlvbjpnZyxhZGRTZWN0aW9uOkhVZSxnZXRTZWN0aW9uczpWVWUsZ2V0VGFza3M6R1VlLGFkZFRhc2s6V1VlLGFkZFRhc2tPcmc6WVVlLGdldEFjdG9yczpmdW5jdGlvbigpe3JldHVybiBVVWUoKX19LEtVZT1pPT5gLmxhYmVsIHsKICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7CiAgICBjb2xvcjogJHtpLnRleHRDb2xvcn07CiAgfQogIC5tb3V0aCB7CiAgICBzdHJva2U6ICM2NjY7CiAgfQoKICBsaW5lIHsKICAgIHN0cm9rZTogJHtpLnRleHRDb2xvcn0KICB9CgogIC5sZWdlbmQgewogICAgZmlsbDogJHtpLnRleHRDb2xvcn07CiAgfQoKICAubGFiZWwgdGV4dCB7CiAgICBmaWxsOiAjMzMzOwogIH0KICAubGFiZWwgewogICAgY29sb3I6ICR7aS50ZXh0Q29sb3J9CiAgfQoKICAuZmFjZSB7CiAgICAke2kuZmFjZUNvbG9yP2BmaWxsOiAke2kuZmFjZUNvbG9yfWA6ImZpbGw6ICNGRkY4REMifTsKICAgIHN0cm9rZTogIzk5OTsKICB9CgogIC5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7aS5tYWluQmtnfTsKICAgIHN0cm9rZTogJHtpLm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAubm9kZSAubGFiZWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAubm9kZS5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHtpLmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAxLjVweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuNTsKICAgIH0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CgogIC5jbHVzdGVyIHJlY3QgewogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICBkaXYubWVybWFpZFRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWF4LXdpZHRoOiAyMDBweDsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2kuYm9yZGVyMn07CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEwMDsKICB9CgogIC50YXNrLXR5cGUtMCwgLnNlY3Rpb24tdHlwZS0wICB7CiAgICAke2kuZmlsbFR5cGUwP2BmaWxsOiAke2kuZmlsbFR5cGUwfWA6IiJ9OwogIH0KICAudGFzay10eXBlLTEsIC5zZWN0aW9uLXR5cGUtMSAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlMX1gOiIifTsKICB9CiAgLnRhc2stdHlwZS0yLCAuc2VjdGlvbi10eXBlLTIgIHsKICAgICR7aS5maWxsVHlwZTA/YGZpbGw6ICR7aS5maWxsVHlwZTJ9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtMywgLnNlY3Rpb24tdHlwZS0zICB7CiAgICAke2kuZmlsbFR5cGUwP2BmaWxsOiAke2kuZmlsbFR5cGUzfWA6IiJ9OwogIH0KICAudGFzay10eXBlLTQsIC5zZWN0aW9uLXR5cGUtNCAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlNH1gOiIifTsKICB9CiAgLnRhc2stdHlwZS01LCAuc2VjdGlvbi10eXBlLTUgIHsKICAgICR7aS5maWxsVHlwZTA/YGZpbGw6ICR7aS5maWxsVHlwZTV9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtNiwgLnNlY3Rpb24tdHlwZS02ICB7CiAgICAke2kuZmlsbFR5cGUwP2BmaWxsOiAke2kuZmlsbFR5cGU2fWA6IiJ9OwogIH0KICAudGFzay10eXBlLTcsIC5zZWN0aW9uLXR5cGUtNyAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlN31gOiIifTsKICB9CgogIC5hY3Rvci0wIHsKICAgICR7aS5hY3RvcjA/YGZpbGw6ICR7aS5hY3RvcjB9YDoiIn07CiAgfQogIC5hY3Rvci0xIHsKICAgICR7aS5hY3RvcjE/YGZpbGw6ICR7aS5hY3RvcjF9YDoiIn07CiAgfQogIC5hY3Rvci0yIHsKICAgICR7aS5hY3RvcjI/YGZpbGw6ICR7aS5hY3RvcjJ9YDoiIn07CiAgfQogIC5hY3Rvci0zIHsKICAgICR7aS5hY3RvcjM/YGZpbGw6ICR7aS5hY3RvcjN9YDoiIn07CiAgfQogIC5hY3Rvci00IHsKICAgICR7aS5hY3RvcjQ/YGZpbGw6ICR7aS5hY3RvcjR9YDoiIn07CiAgfQogIC5hY3Rvci01IHsKICAgICR7aS5hY3RvcjU/YGZpbGw6ICR7aS5hY3RvcjV9YDoiIn07CiAgfQpgLFVndD1mdW5jdGlvbihpLGEpe3JldHVybiBKVyhpLGEpfSxYVWU9ZnVuY3Rpb24oaSxhKXtjb25zdCBwPWkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsYS5jeCkuYXR0cigiY3kiLGEuY3kpLmF0dHIoImNsYXNzIiwiZmFjZSIpLmF0dHIoInIiLDE1KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoIm92ZXJmbG93IiwidmlzaWJsZSIpLHc9aS5hcHBlbmQoImciKTt3LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGEuY3gtMTUvMykuYXR0cigiY3kiLGEuY3ktMTUvMykuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpLHcuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsYS5jeCsxNS8zKS5hdHRyKCJjeSIsYS5jeS0xNS8zKS5hdHRyKCJyIiwxLjUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigiZmlsbCIsIiM2NjYiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iik7ZnVuY3Rpb24gbShfKXtjb25zdCBBPU9BKCkuc3RhcnRBbmdsZShNYXRoLlBJLzIpLmVuZEFuZ2xlKDMqKE1hdGguUEkvMikpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoNi44MTgxODE4MTgxODE4MTc1KTtfLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixBKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLmN4KyIsIisoYS5jeSsyKSsiKSIpfWZ1bmN0aW9uIGIoXyl7Y29uc3QgQT1PQSgpLnN0YXJ0QW5nbGUoMypNYXRoLlBJLzIpLmVuZEFuZ2xlKDUqKE1hdGguUEkvMikpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoNi44MTgxODE4MTgxODE4MTc1KTtfLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixBKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLmN4KyIsIisoYS5jeSs3KSsiKSIpfWZ1bmN0aW9uIEUoXyl7Xy5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlIiwyKS5hdHRyKCJ4MSIsYS5jeC01KS5hdHRyKCJ5MSIsYS5jeSs3KS5hdHRyKCJ4MiIsYS5jeCs1KS5hdHRyKCJ5MiIsYS5jeSs3KS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpfXJldHVybiBhLnNjb3JlPjM/bSh3KTphLnNjb3JlPDM/Yih3KTpFKHcpLHB9LERqdD1mdW5jdGlvbihpLGEpe2NvbnN0IGY9aS5hcHBlbmQoImNpcmNsZSIpO3JldHVybiBmLmF0dHIoImN4IixhLmN4KSxmLmF0dHIoImN5IixhLmN5KSxmLmF0dHIoImNsYXNzIiwiYWN0b3ItIithLnBvcyksZi5hdHRyKCJmaWxsIixhLmZpbGwpLGYuYXR0cigic3Ryb2tlIixhLnN0cm9rZSksZi5hdHRyKCJyIixhLnIpLGYuY2xhc3MhPT12b2lkIDAmJmYuYXR0cigiY2xhc3MiLGYuY2xhc3MpLGEudGl0bGUhPT12b2lkIDAmJmYuYXBwZW5kKCJ0aXRsZSIpLnRleHQoYS50aXRsZSksZn0sSWp0PWZ1bmN0aW9uKGksYSl7cmV0dXJuIFJEZShpLGEpfSxRVWU9ZnVuY3Rpb24oaSxhKXtmdW5jdGlvbiBmKHcsbSxiLEUsXyl7cmV0dXJuIHcrIiwiK20rIiAiKyh3K2IpKyIsIittKyIgIisodytiKSsiLCIrKG0rRS1fKSsiICIrKHcrYi1fKjEuMikrIiwiKyhtK0UpKyIgIit3KyIsIisobStFKX1jb25zdCBwPWkuYXBwZW5kKCJwb2x5Z29uIik7cC5hdHRyKCJwb2ludHMiLGYoYS54LGEueSw1MCwyMCw3KSkscC5hdHRyKCJjbGFzcyIsImxhYmVsQm94IiksYS55PWEueSthLmxhYmVsTWFyZ2luLGEueD1hLngrLjUqYS5sYWJlbE1hcmdpbixJanQoaSxhKX0sWlVlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPWkuYXBwZW5kKCJnIiksdz1iVCgpO3cueD1hLngsdy55PWEueSx3LmZpbGw9YS5maWxsLHcud2lkdGg9Zi53aWR0aCphLnRhc2tDb3VudCtmLmRpYWdyYW1NYXJnaW5YKihhLnRhc2tDb3VudC0xKSx3LmhlaWdodD1mLmhlaWdodCx3LmNsYXNzPSJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrYS5udW0sdy5yeD0zLHcucnk9MyxVZ3QocCx3KSxQanQoZikoYS50ZXh0LHAsdy54LHcueSx3LndpZHRoLHcuaGVpZ2h0LHtjbGFzczoiam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2EubnVtfSxmLGEuY29sb3VyKX07bGV0IE9qdD0tMTtjb25zdCBKVWU9ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IHA9YS54K2Yud2lkdGgvMix3PWkuYXBwZW5kKCJnIik7T2p0Kys7Y29uc3QgbT0zMDArNSozMDt3LmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwidGFzayIrT2p0KS5hdHRyKCJ4MSIscCkuYXR0cigieTEiLGEueSkuYXR0cigieDIiLHApLmF0dHIoInkyIixtKS5hdHRyKCJjbGFzcyIsInRhc2stbGluZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCI0IDIiKS5hdHRyKCJzdHJva2UiLCIjNjY2IiksWFVlKHcse2N4OnAsY3k6MzAwKyg1LWEuc2NvcmUpKjMwLHNjb3JlOmEuc2NvcmV9KTtjb25zdCBiPWJUKCk7Yi54PWEueCxiLnk9YS55LGIuZmlsbD1hLmZpbGwsYi53aWR0aD1mLndpZHRoLGIuaGVpZ2h0PWYuaGVpZ2h0LGIuY2xhc3M9InRhc2sgdGFzay10eXBlLSIrYS5udW0sYi5yeD0zLGIucnk9MyxVZ3QodyxiKTtsZXQgRT1hLngrMTQ7YS5wZW9wbGUuZm9yRWFjaChfPT57Y29uc3QgQT1hLmFjdG9yc1tfXS5jb2xvcixJPXtjeDpFLGN5OmEueSxyOjcsZmlsbDpBLHN0cm9rZToiIzAwMCIsdGl0bGU6Xyxwb3M6YS5hY3RvcnNbX10ucG9zaXRpb259O0RqdCh3LEkpLEUrPTEwfSksUGp0KGYpKGEudGFzayx3LGIueCxiLnksYi53aWR0aCxiLmhlaWdodCx7Y2xhc3M6InRhc2sifSxmLGEuY29sb3VyKX0sdFdlPWZ1bmN0aW9uKGksYSl7bVB0KGksYSl9LFBqdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGkodyxtLGIsRSxfLEEsSSxCKXtjb25zdCBOPW0uYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYitfLzIpLmF0dHIoInkiLEUrQS8yKzUpLnN0eWxlKCJmb250LWNvbG9yIixCKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHcpO3AoTixJKX1mdW5jdGlvbiBhKHcsbSxiLEUsXyxBLEksQixOKXtjb25zdHt0YXNrRm9udFNpemU6Uix0YXNrRm9udEZhbWlseTp6fT1CLFc9dy5zcGxpdCgvPGJyXHMqXC8/Pi9naSk7Zm9yKGxldCBldD0wO2V0PFcubGVuZ3RoO2V0Kyspe2NvbnN0IHN0PWV0KlItUiooVy5sZW5ndGgtMSkvMixhdD1tLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrXy8yKS5hdHRyKCJ5IixFKS5hdHRyKCJmaWxsIixOKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1zaXplIixSKS5zdHlsZSgiZm9udC1mYW1pbHkiLHopO2F0LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixiK18vMikuYXR0cigiZHkiLHN0KS50ZXh0KFdbZXRdKSxhdC5hdHRyKCJ5IixFK0EvMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHAoYXQsSSl9fWZ1bmN0aW9uIGYodyxtLGIsRSxfLEEsSSxCKXtjb25zdCBOPW0uYXBwZW5kKCJzd2l0Y2giKSx6PU4uYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsYikuYXR0cigieSIsRSkuYXR0cigid2lkdGgiLF8pLmF0dHIoImhlaWdodCIsQSkuYXR0cigicG9zaXRpb24iLCJmaXhlZCIpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO3ouYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHcpLGEodyxOLGIsRSxfLEEsSSxCKSxwKHosSSl9ZnVuY3Rpb24gcCh3LG0pe2Zvcihjb25zdCBiIGluIG0pYiBpbiBtJiZ3LmF0dHIoYixtW2JdKX1yZXR1cm4gZnVuY3Rpb24odyl7cmV0dXJuIHcudGV4dFBsYWNlbWVudD09PSJmbyI/Zjp3LnRleHRQbGFjZW1lbnQ9PT0ib2xkIj9pOmF9fSgpLG5OPXtkcmF3UmVjdDpVZ3QsZHJhd0NpcmNsZTpEanQsZHJhd1NlY3Rpb246WlVlLGRyYXdUZXh0OklqdCxkcmF3TGFiZWw6UVVlLGRyYXdUYXNrOkpVZSxkcmF3QmFja2dyb3VuZFJlY3Q6dFdlLGluaXRHcmFwaGljczpmdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw1KS5hdHRyKCJyZWZZIiwyKS5hdHRyKCJtYXJrZXJXaWR0aCIsNikuYXR0cigibWFya2VySGVpZ2h0Iiw0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCwwIFYgNCBMNiwyIFoiKX19LGVXZT1mdW5jdGlvbihpKXtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe0pZW2ZdPWlbZl19KX0sejU9e307ZnVuY3Rpb24gbldlKGkpe2NvbnN0IGE9T2UoKS5qb3VybmV5O2xldCBmPTYwO09iamVjdC5rZXlzKHo1KS5mb3JFYWNoKHA9Pntjb25zdCB3PXo1W3BdLmNvbG9yLG09e2N4OjIwLGN5OmYscjo3LGZpbGw6dyxzdHJva2U6IiMwMDAiLHBvczp6NVtwXS5wb3NpdGlvbn07bk4uZHJhd0NpcmNsZShpLG0pO2NvbnN0IGI9e3g6NDAseTpmKzcsZmlsbDoiIzY2NiIsdGV4dDpwLHRleHRNYXJnaW46YS5ib3hUZXh0TWFyZ2lufDV9O25OLmRyYXdUZXh0KGksYiksZis9MjB9KX1jb25zdCBKWT1PZSgpLmpvdXJuZXksTVQ9SlkubGVmdE1hcmdpbixyV2U9ZnVuY3Rpb24oaSxhLGYscCl7Y29uc3Qgdz1PZSgpLmpvdXJuZXksbT1PZSgpLnNlY3VyaXR5TGV2ZWw7bGV0IGI7bT09PSJzYW5kYm94IiYmKGI9eXIoIiNpIithKSk7Y29uc3QgRT15cihtPT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpO2F3LmluaXQoKTtjb25zdCBfPUUuc2VsZWN0KCIjIithKTtuTi5pbml0R3JhcGhpY3MoXyk7Y29uc3QgQT1wLmRiLmdldFRhc2tzKCksST1wLmRiLmdldERpYWdyYW1UaXRsZSgpLEI9cC5kYi5nZXRBY3RvcnMoKTtmb3IoY29uc3Qgc3QgaW4gejUpZGVsZXRlIHo1W3N0XTtsZXQgTj0wO0IuZm9yRWFjaChzdD0+e3o1W3N0XT17Y29sb3I6dy5hY3RvckNvbG91cnNbTiV3LmFjdG9yQ29sb3Vycy5sZW5ndGhdLHBvc2l0aW9uOk59LE4rK30pLG5XZShfKSxhdy5pbnNlcnQoMCwwLE1ULE9iamVjdC5rZXlzKHo1KS5sZW5ndGgqNTApLGlXZShfLEEsMCk7Y29uc3QgUj1hdy5nZXRCb3VuZHMoKTtJJiZfLmFwcGVuZCgidGV4dCIpLnRleHQoSSkuYXR0cigieCIsTVQpLmF0dHIoImZvbnQtc2l6ZSIsIjRleCIpLmF0dHIoImZvbnQtd2VpZ2h0IiwiYm9sZCIpLmF0dHIoInkiLDI1KTtjb25zdCB6PVIuc3RvcHktUi5zdGFydHkrMip3LmRpYWdyYW1NYXJnaW5ZLFc9TVQrUi5zdG9weCsyKncuZGlhZ3JhbU1hcmdpblg7azAoXyx6LFcsdy51c2VNYXhXaWR0aCksXy5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsTVQpLmF0dHIoInkxIix3LmhlaWdodCo0KS5hdHRyKCJ4MiIsVy1NVC00KS5hdHRyKCJ5MiIsdy5oZWlnaHQqNCkuYXR0cigic3Ryb2tlLXdpZHRoIiw0KS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKTtjb25zdCBldD1JPzcwOjA7Xy5hdHRyKCJ2aWV3Qm94IixgJHtSLnN0YXJ0eH0gLTI1ICR7V30gJHt6K2V0fWApLF8uYXR0cigicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaW5ZTWluIG1lZXQiKSxfLmF0dHIoImhlaWdodCIseitldCsyNSl9LGF3PXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGluaXQ6ZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlSXRlbXM9W10sdGhpcy5kYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdGhpcy52ZXJ0aWNhbFBvcz0wfSx1cGRhdGVWYWw6ZnVuY3Rpb24oaSxhLGYscCl7aVthXT09PXZvaWQgMD9pW2FdPWY6aVthXT1wKGYsaVthXSl9LHVwZGF0ZUJvdW5kczpmdW5jdGlvbihpLGEsZixwKXtjb25zdCB3PU9lKCkuam91cm5leSxtPXRoaXM7bGV0IGI9MDtmdW5jdGlvbiBFKF8pe3JldHVybiBmdW5jdGlvbihJKXtiKys7Y29uc3QgQj1tLnNlcXVlbmNlSXRlbXMubGVuZ3RoLWIrMTttLnVwZGF0ZVZhbChJLCJzdGFydHkiLGEtQip3LmJveE1hcmdpbixNYXRoLm1pbiksbS51cGRhdGVWYWwoSSwic3RvcHkiLHArQip3LmJveE1hcmdpbixNYXRoLm1heCksbS51cGRhdGVWYWwoYXcuZGF0YSwic3RhcnR4IixpLUIqdy5ib3hNYXJnaW4sTWF0aC5taW4pLG0udXBkYXRlVmFsKGF3LmRhdGEsInN0b3B4IixmK0Iqdy5ib3hNYXJnaW4sTWF0aC5tYXgpLF8hPT0iYWN0aXZhdGlvbiImJihtLnVwZGF0ZVZhbChJLCJzdGFydHgiLGktQip3LmJveE1hcmdpbixNYXRoLm1pbiksbS51cGRhdGVWYWwoSSwic3RvcHgiLGYrQip3LmJveE1hcmdpbixNYXRoLm1heCksbS51cGRhdGVWYWwoYXcuZGF0YSwic3RhcnR5IixhLUIqdy5ib3hNYXJnaW4sTWF0aC5taW4pLG0udXBkYXRlVmFsKGF3LmRhdGEsInN0b3B5IixwK0Iqdy5ib3hNYXJnaW4sTWF0aC5tYXgpKX19dGhpcy5zZXF1ZW5jZUl0ZW1zLmZvckVhY2goRSgpKX0saW5zZXJ0OmZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHc9TWF0aC5taW4oaSxmKSxtPU1hdGgubWF4KGksZiksYj1NYXRoLm1pbihhLHApLEU9TWF0aC5tYXgoYSxwKTt0aGlzLnVwZGF0ZVZhbChhdy5kYXRhLCJzdGFydHgiLHcsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKGF3LmRhdGEsInN0YXJ0eSIsYixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwoYXcuZGF0YSwic3RvcHgiLG0sTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKGF3LmRhdGEsInN0b3B5IixFLE1hdGgubWF4KSx0aGlzLnVwZGF0ZUJvdW5kcyh3LGIsbSxFKX0sYnVtcFZlcnRpY2FsUG9zOmZ1bmN0aW9uKGkpe3RoaXMudmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcytpLHRoaXMuZGF0YS5zdG9weT10aGlzLnZlcnRpY2FsUG9zfSxnZXRWZXJ0aWNhbFBvczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZlcnRpY2FsUG9zfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfX0sV2d0PUpZLnNlY3Rpb25GaWxscyxGanQ9Slkuc2VjdGlvbkNvbG91cnMsaVdlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPU9lKCkuam91cm5leTtsZXQgdz0iIjtjb25zdCBtPXAuaGVpZ2h0KjIrcC5kaWFncmFtTWFyZ2luWSxiPWYrbTtsZXQgRT0wLF89IiNDQ0MiLEE9ImJsYWNrIixJPTA7Zm9yKGNvbnN0W0IsTl1vZiBhLmVudHJpZXMoKSl7aWYodyE9PU4uc2VjdGlvbil7Xz1XZ3RbRSVXZ3QubGVuZ3RoXSxJPUUlV2d0Lmxlbmd0aCxBPUZqdFtFJUZqdC5sZW5ndGhdO2xldCB6PTA7Y29uc3QgVz1OLnNlY3Rpb247Zm9yKGxldCBzdD1CO3N0PGEubGVuZ3RoJiZhW3N0XS5zZWN0aW9uPT1XO3N0Kyspej16KzE7Y29uc3QgZXQ9e3g6QipwLnRhc2tNYXJnaW4rQipwLndpZHRoK01ULHk6NTAsdGV4dDpOLnNlY3Rpb24sZmlsbDpfLG51bTpJLGNvbG91cjpBLHRhc2tDb3VudDp6fTtuTi5kcmF3U2VjdGlvbihpLGV0LHApLHc9Ti5zZWN0aW9uLEUrK31jb25zdCBSPU4ucGVvcGxlLnJlZHVjZSgoeixXKT0+KHo1W1ddJiYoeltXXT16NVtXXSkseikse30pO04ueD1CKnAudGFza01hcmdpbitCKnAud2lkdGgrTVQsTi55PWIsTi53aWR0aD1wLmRpYWdyYW1NYXJnaW5YLE4uaGVpZ2h0PXAuZGlhZ3JhbU1hcmdpblksTi5jb2xvdXI9QSxOLmZpbGw9XyxOLm51bT1JLE4uYWN0b3JzPVIsbk4uZHJhd1Rhc2soaSxOLHApLGF3Lmluc2VydChOLngsTi55LE4ueCtOLndpZHRoK3AudGFza01hcmdpbiwzMDArNSozMCl9fSxOanQ9e3NldENvbmY6ZVdlLGRyYXc6cldlfSxzV2U9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjp6VWUsZGI6TWp0LHJlbmRlcmVyOk5qdCxzdHlsZXM6S1VlLGluaXQ6aT0+e05qdC5zZXRDb25mKGkuam91cm5leSksTWp0LmNsZWFyKCl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxhV2U9KGksYSxmKT0+e2NvbnN0e3BhcmVudEJ5SWQ6cH09Zix3PW5ldyBTZXQ7bGV0IG09aTtmb3IoO207KXtpZih3LmFkZChtKSxtPT09YSlyZXR1cm4gbTttPXBbbV19Zm9yKG09YTttOyl7aWYody5oYXMobSkpcmV0dXJuIG07bT1wW21dfXJldHVybiJyb290In07ZnVuY3Rpb24gdEsoaSl7dGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZHluYW1pY2FsbHkgcmVxdWlyZSAiJytpKyciLiBQbGVhc2UgY29uZmlndXJlIHRoZSBkeW5hbWljUmVxdWlyZVRhcmdldHMgb3IvYW5kIGlnbm9yZUR5bmFtaWNSZXF1aXJlcyBvcHRpb24gb2YgQHJvbGx1cC9wbHVnaW4tY29tbW9uanMgYXBwcm9wcmlhdGVseSBmb3IgdGhpcyByZXF1aXJlIGNhbGwgdG8gd29yay4nKX12YXIgQmp0PXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oaSxhKXsoZnVuY3Rpb24oZil7aS5leHBvcnRzPWYoKX0pKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZihwLHcsbSl7ZnVuY3Rpb24gYihBLEkpe2lmKCF3W0FdKXtpZighcFtBXSl7dmFyIEI9dHlwZW9mIHRLPT0iZnVuY3Rpb24iJiZ0SztpZighSSYmQilyZXR1cm4gQihBLCEwKTtpZihFKXJldHVybiBFKEEsITApO3ZhciBOPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK0ErIiciKTt0aHJvdyBOLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLE59dmFyIFI9d1tBXT17ZXhwb3J0czp7fX07cFtBXVswXS5jYWxsKFIuZXhwb3J0cyxmdW5jdGlvbih6KXt2YXIgVz1wW0FdWzFdW3pdO3JldHVybiBiKFd8fHopfSxSLFIuZXhwb3J0cyxmLHAsdyxtKX1yZXR1cm4gd1tBXS5leHBvcnRzfWZvcih2YXIgRT10eXBlb2YgdEs9PSJmdW5jdGlvbiImJnRLLF89MDtfPG0ubGVuZ3RoO18rKyliKG1bX10pO3JldHVybiBifXJldHVybiBmfSgpKHsxOltmdW5jdGlvbihmLHAsdyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHcsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gQShJLEIpe2Zvcih2YXIgTj0wO048Qi5sZW5ndGg7TisrKXt2YXIgUj1CW05dO1IuZW51bWVyYWJsZT1SLmVudW1lcmFibGV8fCExLFIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBSJiYoUi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksUi5rZXksUil9fXJldHVybiBmdW5jdGlvbihJLEIsTil7cmV0dXJuIEImJkEoSS5wcm90b3R5cGUsQiksTiYmQShJLE4pLEl9fSgpO2Z1bmN0aW9uIGIoQSxJKXtpZighKEEgaW5zdGFuY2VvZiBJKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgRT1mdW5jdGlvbigpe2Z1bmN0aW9uIEEoKXt2YXIgST10aGlzLEI9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9LE49Qi5kZWZhdWx0TGF5b3V0T3B0aW9ucyxSPU49PT12b2lkIDA/e306Tix6PUIuYWxnb3JpdGhtcyxXPXo9PT12b2lkIDA/WyJsYXllcmVkIiwic3RyZXNzIiwibXJ0cmVlIiwicmFkaWFsIiwiZm9yY2UiLCJkaXNjbyIsInNwb3JlT3ZlcmxhcCIsInNwb3JlQ29tcGFjdGlvbiIsInJlY3RwYWNraW5nIl06eixldD1CLndvcmtlckZhY3Rvcnksc3Q9Qi53b3JrZXJVcmw7aWYoYih0aGlzLEEpLHRoaXMuZGVmYXVsdExheW91dE9wdGlvbnM9Uix0aGlzLmluaXRpYWxpemVkPSExLHR5cGVvZiBzdD4idSImJnR5cGVvZiBldD4idSIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29uc3RydWN0IGFuIEVMSyB3aXRob3V0IGJvdGggJ3dvcmtlclVybCcgYW5kICd3b3JrZXJGYWN0b3J5Jy4iKTt2YXIgYXQ9ZXQ7dHlwZW9mIHN0PCJ1IiYmdHlwZW9mIGV0PiJ1IiYmKGF0PWZ1bmN0aW9uKHl0KXtyZXR1cm4gbmV3IFdvcmtlcih5dCl9KTt2YXIgYnQ9YXQoc3QpO2lmKHR5cGVvZiBidC5wb3N0TWVzc2FnZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJDcmVhdGVkIHdvcmtlciBkb2VzIG5vdCBwcm92aWRlIHRoZSByZXF1aXJlZCAncG9zdE1lc3NhZ2UnIGZ1bmN0aW9uLiIpO3RoaXMud29ya2VyPW5ldyBfKGJ0KSx0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7Y21kOiJyZWdpc3RlciIsYWxnb3JpdGhtczpXfSkudGhlbihmdW5jdGlvbihtdCl7cmV0dXJuIEkuaW5pdGlhbGl6ZWQ9ITB9KS5jYXRjaChjb25zb2xlLmVycil9cmV0dXJuIG0oQSxbe2tleToibGF5b3V0Iix2YWx1ZTpmdW5jdGlvbihCKXt2YXIgTj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30sUj1OLmxheW91dE9wdGlvbnMsej1SPT09dm9pZCAwP3RoaXMuZGVmYXVsdExheW91dE9wdGlvbnM6UixXPU4ubG9nZ2luZyxldD1XPT09dm9pZCAwPyExOlcsc3Q9Ti5tZWFzdXJlRXhlY3V0aW9uVGltZSxhdD1zdD09PXZvaWQgMD8hMTpzdDtyZXR1cm4gQj90aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7Y21kOiJsYXlvdXQiLGdyYXBoOkIsbGF5b3V0T3B0aW9uczp6LG9wdGlvbnM6e2xvZ2dpbmc6ZXQsbWVhc3VyZUV4ZWN1dGlvblRpbWU6YXR9fSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIG1hbmRhdG9yeSBwYXJhbWV0ZXIgJ2dyYXBoJy4iKSl9fSx7a2V5OiJrbm93bkxheW91dEFsZ29yaXRobXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHtjbWQ6ImFsZ29yaXRobXMifSl9fSx7a2V5OiJrbm93bkxheW91dE9wdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHtjbWQ6Im9wdGlvbnMifSl9fSx7a2V5OiJrbm93bkxheW91dENhdGVnb3JpZXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHtjbWQ6ImNhdGVnb3JpZXMifSl9fSx7a2V5OiJ0ZXJtaW5hdGVXb3JrZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy53b3JrZXIudGVybWluYXRlKCl9fV0pLEF9KCk7dy5kZWZhdWx0PUU7dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiBBKEkpe3ZhciBCPXRoaXM7aWYoYih0aGlzLEEpLEk9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIG1hbmRhdG9yeSBwYXJhbWV0ZXIgJ3dvcmtlcicuIik7dGhpcy5yZXNvbHZlcnM9e30sdGhpcy53b3JrZXI9SSx0aGlzLndvcmtlci5vbm1lc3NhZ2U9ZnVuY3Rpb24oTil7c2V0VGltZW91dChmdW5jdGlvbigpe0IucmVjZWl2ZShCLE4pfSwwKX19cmV0dXJuIG0oQSxbe2tleToicG9zdE1lc3NhZ2UiLHZhbHVlOmZ1bmN0aW9uKEIpe3ZhciBOPXRoaXMuaWR8fDA7dGhpcy5pZD1OKzEsQi5pZD1OO3ZhciBSPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHosVyl7Ui5yZXNvbHZlcnNbTl09ZnVuY3Rpb24oZXQsc3Qpe2V0PyhSLmNvbnZlcnRHd3RTdHlsZUVycm9yKGV0KSxXKGV0KSk6eihzdCl9LFIud29ya2VyLnBvc3RNZXNzYWdlKEIpfSl9fSx7a2V5OiJyZWNlaXZlIix2YWx1ZTpmdW5jdGlvbihCLE4pe3ZhciBSPU4uZGF0YSx6PUIucmVzb2x2ZXJzW1IuaWRdO3omJihkZWxldGUgQi5yZXNvbHZlcnNbUi5pZF0sUi5lcnJvcj96KFIuZXJyb3IpOnoobnVsbCxSLmRhdGEpKX19LHtrZXk6InRlcm1pbmF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLndvcmtlci50ZXJtaW5hdGUmJnRoaXMud29ya2VyLnRlcm1pbmF0ZSgpfX0se2tleToiY29udmVydEd3dFN0eWxlRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKEIpe2lmKEIpe3ZhciBOPUIuX19qYXZhJGV4Y2VwdGlvbjtOJiYoTi5jYXVzZSYmTi5jYXVzZS5iYWNraW5nSnNPYmplY3QmJihCLmNhdXNlPU4uY2F1c2UuYmFja2luZ0pzT2JqZWN0LHRoaXMuY29udmVydEd3dFN0eWxlRXJyb3IoQi5jYXVzZSkpLGRlbGV0ZSBCLl9famF2YSRleGNlcHRpb24pfX19XSksQX0oKX0se31dLDI6W2Z1bmN0aW9uKGYscCx3KXsoZnVuY3Rpb24obSl7KGZ1bmN0aW9uKCl7dmFyIGI7dHlwZW9mIHdpbmRvdzwidSI/Yj13aW5kb3c6dHlwZW9mIG08InUiP2I9bTp0eXBlb2Ygc2VsZjwidSImJihiPXNlbGYpO3ZhciBFO2Z1bmN0aW9uIF8oKXt9ZnVuY3Rpb24gQSgpe31mdW5jdGlvbiBJKCl7fWZ1bmN0aW9uIEIoKXt9ZnVuY3Rpb24gTigpe31mdW5jdGlvbiBSKCl7fWZ1bmN0aW9uIHooKXt9ZnVuY3Rpb24gVygpe31mdW5jdGlvbiBldCgpe31mdW5jdGlvbiBzdCgpe31mdW5jdGlvbiBhdCgpe31mdW5jdGlvbiBidCgpe31mdW5jdGlvbiBtdCgpe31mdW5jdGlvbiB5dCgpe31mdW5jdGlvbiBmdCgpe31mdW5jdGlvbiB1dCgpe31mdW5jdGlvbiB2dCgpe31mdW5jdGlvbiBYKCl7fWZ1bmN0aW9uIHB0KCl7fWZ1bmN0aW9uIFUoKXt9ZnVuY3Rpb24gVHQoKXt9ZnVuY3Rpb24gbnQoKXt9ZnVuY3Rpb24gSXQoKXt9ZnVuY3Rpb24gT3QoKXt9ZnVuY3Rpb24gQnQoKXt9ZnVuY3Rpb24gRXQoKXt9ZnVuY3Rpb24gWigpe31mdW5jdGlvbiBDdCgpe31mdW5jdGlvbiB4dCgpe31mdW5jdGlvbiBIdCgpe31mdW5jdGlvbiBMZSgpe31mdW5jdGlvbiBGdCgpe31mdW5jdGlvbiBnbigpe31mdW5jdGlvbiBTZSgpe31mdW5jdGlvbiBtZSgpe31mdW5jdGlvbiBWZSgpe31mdW5jdGlvbiBZZSgpe31mdW5jdGlvbiBjZSgpe31mdW5jdGlvbiBrZSgpe31mdW5jdGlvbiB6dCgpe31mdW5jdGlvbiByZSgpe31mdW5jdGlvbiBzZSgpe31mdW5jdGlvbiBQZSgpe31mdW5jdGlvbiB0ZSgpe31mdW5jdGlvbiBNZSgpe31mdW5jdGlvbiBkZSgpe31mdW5jdGlvbiBvbigpe31mdW5jdGlvbiBuaSgpe31mdW5jdGlvbiBLcygpe31mdW5jdGlvbiB3cygpe31mdW5jdGlvbiBmbygpe31mdW5jdGlvbiBYaSgpe31mdW5jdGlvbiBFcigpe31mdW5jdGlvbiBYbigpe31mdW5jdGlvbiBkaSgpe31mdW5jdGlvbiBFZSgpe31mdW5jdGlvbiBLbigpe31mdW5jdGlvbiBIZSgpe31mdW5jdGlvbiBUaSgpe31mdW5jdGlvbiBwbigpe31mdW5jdGlvbiBFcygpe31mdW5jdGlvbiBxYSgpe31mdW5jdGlvbiBNYSgpe31mdW5jdGlvbiBHcygpe31mdW5jdGlvbiBQbygpe31mdW5jdGlvbiB2cygpe31mdW5jdGlvbiBydSgpe31mdW5jdGlvbiB6cygpe31mdW5jdGlvbiBEdSgpe31mdW5jdGlvbiBwbSgpe31mdW5jdGlvbiB1dygpe31mdW5jdGlvbiBXdSgpe31mdW5jdGlvbiB0aCgpe31mdW5jdGlvbiBGYSgpe31mdW5jdGlvbiBNbCgpe31mdW5jdGlvbiBoYSgpe31mdW5jdGlvbiBiYygpe31mdW5jdGlvbiBDYygpe31mdW5jdGlvbiBwYSgpe31mdW5jdGlvbiBEYSgpe31mdW5jdGlvbiBIYSgpe31mdW5jdGlvbiBEbCgpe31mdW5jdGlvbiBfYygpe31mdW5jdGlvbiBsdygpe31mdW5jdGlvbiBlaCgpe31mdW5jdGlvbiBlZCgpe31mdW5jdGlvbiBqZCgpe31mdW5jdGlvbiBuZCgpe31mdW5jdGlvbiAkZCgpe31mdW5jdGlvbiBBMCgpe31mdW5jdGlvbiBCaSgpe31mdW5jdGlvbiBjbigpe31mdW5jdGlvbiBrcigpe31mdW5jdGlvbiBFaSgpe31mdW5jdGlvbiBKbygpe31mdW5jdGlvbiB3Yygpe31mdW5jdGlvbiByZigpe31mdW5jdGlvbiBPYygpe31mdW5jdGlvbiBzZigpe31mdW5jdGlvbiBhZigpe31mdW5jdGlvbiBRaSgpe31mdW5jdGlvbiBUcygpe31mdW5jdGlvbiBrYSgpe31mdW5jdGlvbiB4aSgpe31mdW5jdGlvbiBZYygpe31mdW5jdGlvbiBDZSgpe31mdW5jdGlvbiB2cCgpe31mdW5jdGlvbiBCZSgpe31mdW5jdGlvbiBCZigpe31mdW5jdGlvbiB5Zygpe31mdW5jdGlvbiBibSgpe31mdW5jdGlvbiBFaygpe31mdW5jdGlvbiBFMygpe31mdW5jdGlvbiBJbCgpe31mdW5jdGlvbiBMMCgpe31mdW5jdGlvbiBodygpe31mdW5jdGlvbiBINSgpe31mdW5jdGlvbiBIYigpe31mdW5jdGlvbiBWNSgpe31mdW5jdGlvbiBmMSgpe31mdW5jdGlvbiByZCgpe31mdW5jdGlvbiBpZCgpe31mdW5jdGlvbiBHNSgpe31mdW5jdGlvbiBmdygpe31mdW5jdGlvbiBVNSgpe31mdW5jdGlvbiBtcCgpe31mdW5jdGlvbiBXNSgpe31mdW5jdGlvbiBUMygpe31mdW5jdGlvbiB3bSgpe31mdW5jdGlvbiB4Zygpe31mdW5jdGlvbiBFTCgpe31mdW5jdGlvbiB2bCgpe31mdW5jdGlvbiBpTigpe31mdW5jdGlvbiBTYygpe31mdW5jdGlvbiBjSygpe31mdW5jdGlvbiBWYigpe31mdW5jdGlvbiB1Sygpe31mdW5jdGlvbiBQVCgpe31mdW5jdGlvbiBsSygpe31mdW5jdGlvbiBzTigpe31mdW5jdGlvbiBSZigpe31mdW5jdGlvbiB2bSgpe31mdW5jdGlvbiBUTCgpe31mdW5jdGlvbiBhTigpe31mdW5jdGlvbiB5cCgpe31mdW5jdGlvbiBtbSgpe31mdW5jdGlvbiBoSygpe31mdW5jdGlvbiBHYigpe31mdW5jdGlvbiBmSygpe31mdW5jdGlvbiBkSygpe31mdW5jdGlvbiBZNSgpe31mdW5jdGlvbiBGVCgpe31mdW5jdGlvbiBvTigpe31mdW5jdGlvbiBUaygpe31mdW5jdGlvbiBnSygpe31mdW5jdGlvbiBDaygpe31mdW5jdGlvbiBwSygpe31mdW5jdGlvbiBiSygpe31mdW5jdGlvbiB3Sygpe31mdW5jdGlvbiB2Sygpe31mdW5jdGlvbiBtSygpe31mdW5jdGlvbiB5Sygpe31mdW5jdGlvbiB4Sygpe31mdW5jdGlvbiBrSygpe31mdW5jdGlvbiBFSygpe31mdW5jdGlvbiBUSygpe31mdW5jdGlvbiBDSygpe31mdW5jdGlvbiBDTCgpe31mdW5jdGlvbiBfSygpe31mdW5jdGlvbiBTSygpe31mdW5jdGlvbiBOVCgpe31mdW5jdGlvbiBjTigpe31mdW5jdGlvbiBLNSgpe31mdW5jdGlvbiBBSygpe31mdW5jdGlvbiBMSygpe31mdW5jdGlvbiBNSygpe31mdW5jdGlvbiBESygpe31mdW5jdGlvbiBJSygpe31mdW5jdGlvbiBCVCgpe31mdW5jdGlvbiBfTCgpe31mdW5jdGlvbiB1Tigpe31mdW5jdGlvbiBDMygpe31mdW5jdGlvbiBfMygpe31mdW5jdGlvbiBPSygpe31mdW5jdGlvbiBvZigpe31mdW5jdGlvbiBYNSgpe31mdW5jdGlvbiBQSygpe31mdW5jdGlvbiBfaygpe31mdW5jdGlvbiB6ZCgpe31mdW5jdGlvbiBGSygpe31mdW5jdGlvbiBOSygpe31mdW5jdGlvbiBCSygpe31mdW5jdGlvbiBSSygpe31mdW5jdGlvbiBSVCgpe31mdW5jdGlvbiBTTCgpe31mdW5jdGlvbiBsTigpe31mdW5jdGlvbiBBTCgpe31mdW5jdGlvbiBRNSgpe31mdW5jdGlvbiBqSygpe31mdW5jdGlvbiBoTigpe31mdW5jdGlvbiBmTigpe31mdW5jdGlvbiAkSygpe31mdW5jdGlvbiB6Sygpe31mdW5jdGlvbiBxSygpe31mdW5jdGlvbiBISygpe31mdW5jdGlvbiBWSygpe31mdW5jdGlvbiBHSygpe31mdW5jdGlvbiBxZCgpe31mdW5jdGlvbiBkdygpe31mdW5jdGlvbiBVSygpe31mdW5jdGlvbiBkTigpe31mdW5jdGlvbiBnTigpe31mdW5jdGlvbiBXSygpe31mdW5jdGlvbiBTMygpe31mdW5jdGlvbiBTaygpe31mdW5jdGlvbiBMTCgpe31mdW5jdGlvbiB5bSgpe31mdW5jdGlvbiBBaygpe31mdW5jdGlvbiBZSygpe31mdW5jdGlvbiBqVCgpe31mdW5jdGlvbiBzZCgpe31mdW5jdGlvbiBwTigpe31mdW5jdGlvbiBNTCgpe31mdW5jdGlvbiBMaygpe31mdW5jdGlvbiBETCgpe31mdW5jdGlvbiBiTigpe31mdW5jdGlvbiBLSygpe31mdW5jdGlvbiBJTCgpe31mdW5jdGlvbiBYSygpe31mdW5jdGlvbiBRSygpe31mdW5jdGlvbiB3Tigpe31mdW5jdGlvbiBaNSgpe31mdW5jdGlvbiB2Tigpe31mdW5jdGlvbiBKNSgpe31mdW5jdGlvbiBaSygpe31mdW5jdGlvbiBPTCgpe31mdW5jdGlvbiBKSygpe31mdW5jdGlvbiB0WCgpe31mdW5jdGlvbiBlWCgpe31mdW5jdGlvbiBuWCgpe31mdW5jdGlvbiBtTigpe31mdW5jdGlvbiByWCgpe31mdW5jdGlvbiBpWCgpe31mdW5jdGlvbiBzWCgpe31mdW5jdGlvbiB5Tigpe31mdW5jdGlvbiBhWCgpe31mdW5jdGlvbiBvWCgpe31mdW5jdGlvbiBjWCgpe31mdW5jdGlvbiB4Tigpe31mdW5jdGlvbiB1WCgpe31mdW5jdGlvbiBsWCgpe31mdW5jdGlvbiBrTigpe31mdW5jdGlvbiBFTigpe31mdW5jdGlvbiBUTigpe31mdW5jdGlvbiBoWCgpe31mdW5jdGlvbiBmWCgpe31mdW5jdGlvbiBNaygpe31mdW5jdGlvbiB0eCgpe31mdW5jdGlvbiAkVCgpe31mdW5jdGlvbiBkWCgpe31mdW5jdGlvbiBQTCgpe31mdW5jdGlvbiB6VCgpe31mdW5jdGlvbiBGTCgpe31mdW5jdGlvbiBDTigpe31mdW5jdGlvbiBfTigpe31mdW5jdGlvbiBnWCgpe31mdW5jdGlvbiBwWCgpe31mdW5jdGlvbiBiWCgpe31mdW5jdGlvbiBTTigpe31mdW5jdGlvbiBBTigpe31mdW5jdGlvbiB3WCgpe31mdW5jdGlvbiB2WCgpe31mdW5jdGlvbiBtWCgpe31mdW5jdGlvbiB5WCgpe31mdW5jdGlvbiB4WCgpe31mdW5jdGlvbiBMTigpe31mdW5jdGlvbiBrWCgpe31mdW5jdGlvbiBFWCgpe31mdW5jdGlvbiBUWCgpe31mdW5jdGlvbiBDWCgpe31mdW5jdGlvbiBNTigpe31mdW5jdGlvbiBxVCgpe31mdW5jdGlvbiBfWCgpe31mdW5jdGlvbiBTWCgpe31mdW5jdGlvbiBETigpe31mdW5jdGlvbiBBWCgpe31mdW5jdGlvbiBMWCgpe31mdW5jdGlvbiBNWCgpe31mdW5jdGlvbiBEWCgpe31mdW5jdGlvbiBJWCgpe31mdW5jdGlvbiBPWCgpe31mdW5jdGlvbiBJTigpe31mdW5jdGlvbiBQWCgpe31mdW5jdGlvbiBPTigpe31mdW5jdGlvbiBGWCgpe31mdW5jdGlvbiBOWCgpe31mdW5jdGlvbiBCWCgpe31mdW5jdGlvbiBIVCgpe31mdW5jdGlvbiBSWCgpe31mdW5jdGlvbiBWVCgpe31mdW5jdGlvbiBqWCgpe31mdW5jdGlvbiBQTigpe31mdW5jdGlvbiBGTigpe31mdW5jdGlvbiBOTigpe31mdW5jdGlvbiBCTigpe31mdW5jdGlvbiBndygpe31mdW5jdGlvbiBSTigpe31mdW5jdGlvbiBqTigpe31mdW5jdGlvbiAkTigpe31mdW5jdGlvbiB6Tigpe31mdW5jdGlvbiAkWCgpe31mdW5jdGlvbiBleCgpe31mdW5jdGlvbiBHVCgpe31mdW5jdGlvbiBBMygpe31mdW5jdGlvbiB6WCgpe31mdW5jdGlvbiBxWCgpe31mdW5jdGlvbiBVVCgpe31mdW5jdGlvbiBIWCgpe31mdW5jdGlvbiBWWCgpe31mdW5jdGlvbiBHWCgpe31mdW5jdGlvbiBVWCgpe31mdW5jdGlvbiBXWCgpe31mdW5jdGlvbiBZWCgpe31mdW5jdGlvbiBLWCgpe31mdW5jdGlvbiBYWCgpe31mdW5jdGlvbiBRWCgpe31mdW5jdGlvbiBaWCgpe31mdW5jdGlvbiBKWCgpe31mdW5jdGlvbiBOTCgpe31mdW5jdGlvbiBxTigpe31mdW5jdGlvbiB0USgpe31mdW5jdGlvbiBlUSgpe31mdW5jdGlvbiBuUSgpe31mdW5jdGlvbiBITigpe31mdW5jdGlvbiByUSgpe31mdW5jdGlvbiBpUSgpe31mdW5jdGlvbiBzUSgpe31mdW5jdGlvbiBhUSgpe31mdW5jdGlvbiBvUSgpe31mdW5jdGlvbiBjUSgpe31mdW5jdGlvbiBWTigpe31mdW5jdGlvbiBHTigpe31mdW5jdGlvbiB1USgpe31mdW5jdGlvbiBVTigpe31mdW5jdGlvbiBXTigpe31mdW5jdGlvbiBsUSgpe31mdW5jdGlvbiBoUSgpe31mdW5jdGlvbiBmUSgpe31mdW5jdGlvbiBCTCgpe31mdW5jdGlvbiBkUSgpe31mdW5jdGlvbiBEaygpe31mdW5jdGlvbiBnUSgpe31mdW5jdGlvbiBwUSgpe31mdW5jdGlvbiBiUSgpe31mdW5jdGlvbiBZTigpe31mdW5jdGlvbiB3USgpe31mdW5jdGlvbiB2USgpe31mdW5jdGlvbiBtUSgpe31mdW5jdGlvbiB5USgpe31mdW5jdGlvbiB4USgpe31mdW5jdGlvbiBrUSgpe31mdW5jdGlvbiBFUSgpe31mdW5jdGlvbiBUUSgpe31mdW5jdGlvbiBDUSgpe31mdW5jdGlvbiBfUSgpe31mdW5jdGlvbiBTUSgpe31mdW5jdGlvbiBBUSgpe31mdW5jdGlvbiBueCgpe31mdW5jdGlvbiBLTigpe31mdW5jdGlvbiBMUSgpe31mdW5jdGlvbiBNUSgpe31mdW5jdGlvbiBEUSgpe31mdW5jdGlvbiBYTigpe31mdW5jdGlvbiBJUSgpe31mdW5jdGlvbiBXVCgpe31mdW5jdGlvbiBPUSgpe31mdW5jdGlvbiBQUSgpe31mdW5jdGlvbiBGUSgpe31mdW5jdGlvbiBOUSgpe31mdW5jdGlvbiBCUSgpe31mdW5jdGlvbiBSUSgpe31mdW5jdGlvbiBqUSgpe31mdW5jdGlvbiAkUSgpe31mdW5jdGlvbiB6USgpe31mdW5jdGlvbiBxUSgpe31mdW5jdGlvbiByeCgpe31mdW5jdGlvbiBIUSgpe31mdW5jdGlvbiBWUSgpe31mdW5jdGlvbiBHUSgpe31mdW5jdGlvbiBVUSgpe31mdW5jdGlvbiBXUSgpe31mdW5jdGlvbiBZUSgpe31mdW5jdGlvbiBLUSgpe31mdW5jdGlvbiBYUSgpe31mdW5jdGlvbiBZVCgpe31mdW5jdGlvbiBRUSgpe31mdW5jdGlvbiBaUSgpe31mdW5jdGlvbiBKUSgpe31mdW5jdGlvbiB0Wigpe31mdW5jdGlvbiBlWigpe31mdW5jdGlvbiBuWigpe31mdW5jdGlvbiByWigpe31mdW5jdGlvbiBpWigpe31mdW5jdGlvbiBpeCgpe31mdW5jdGlvbiBRTigpe31mdW5jdGlvbiBzWigpe31mdW5jdGlvbiBSTCgpe31mdW5jdGlvbiBhWigpe31mdW5jdGlvbiBvWigpe31mdW5jdGlvbiBjWigpe31mdW5jdGlvbiB1Wigpe31mdW5jdGlvbiBsWigpe31mdW5jdGlvbiBoWigpe31mdW5jdGlvbiBmWigpe31mdW5jdGlvbiBaTigpe31mdW5jdGlvbiBkWigpe31mdW5jdGlvbiBKTigpe31mdW5jdGlvbiBnWigpe31mdW5jdGlvbiB0Qigpe31mdW5jdGlvbiBlQigpe31mdW5jdGlvbiBuQigpe31mdW5jdGlvbiBwWigpe31mdW5jdGlvbiBiWigpe31mdW5jdGlvbiBLVCgpe31mdW5jdGlvbiBqTCgpe31mdW5jdGlvbiBYVCgpe31mdW5jdGlvbiB3Wigpe31mdW5jdGlvbiB2Wigpe31mdW5jdGlvbiAkTCgpe31mdW5jdGlvbiBtWigpe31mdW5jdGlvbiB5Wigpe31mdW5jdGlvbiByQigpe31mdW5jdGlvbiB4Wigpe31mdW5jdGlvbiBrWigpe31mdW5jdGlvbiBFWigpe31mdW5jdGlvbiBUWigpe31mdW5jdGlvbiBDWigpe31mdW5jdGlvbiBfWigpe31mdW5jdGlvbiBTWigpe31mdW5jdGlvbiBBWigpe31mdW5jdGlvbiBMWigpe31mdW5jdGlvbiBNWigpe31mdW5jdGlvbiBrZygpe31mdW5jdGlvbiBEWigpe31mdW5jdGlvbiB4bSgpe31mdW5jdGlvbiBpQigpe31mdW5jdGlvbiBJWigpe31mdW5jdGlvbiBPWigpe31mdW5jdGlvbiBQWigpe31mdW5jdGlvbiBGWigpe31mdW5jdGlvbiBOWigpe31mdW5jdGlvbiBCWigpe31mdW5jdGlvbiBSWigpe31mdW5jdGlvbiBqWigpe31mdW5jdGlvbiAkWigpe31mdW5jdGlvbiBBYygpe31mdW5jdGlvbiB6Wigpe31mdW5jdGlvbiBRVCgpe31mdW5jdGlvbiB0Yygpe31mdW5jdGlvbiBLYygpe31mdW5jdGlvbiB6aSgpe31mdW5jdGlvbiB6TCgpe31mdW5jdGlvbiBxWigpe31mdW5jdGlvbiBIWigpe31mdW5jdGlvbiBWWigpe31mdW5jdGlvbiBzeCgpe31mdW5jdGlvbiBrbSgpe31mdW5jdGlvbiBVZSgpe31mdW5jdGlvbiBHWigpe31mdW5jdGlvbiBVWigpe31mdW5jdGlvbiBXWigpe31mdW5jdGlvbiBZWigpe31mdW5jdGlvbiBLWigpe31mdW5jdGlvbiBzQigpe31mdW5jdGlvbiBYWigpe31mdW5jdGlvbiBRWigpe31mdW5jdGlvbiBxTCgpe31mdW5jdGlvbiBaWigpe31mdW5jdGlvbiBZdSgpe31mdW5jdGlvbiBJdSgpe31mdW5jdGlvbiBKWigpe31mdW5jdGlvbiB0Sigpe31mdW5jdGlvbiBlSigpe31mdW5jdGlvbiBFbSgpe31mdW5jdGlvbiBwdygpe31mdW5jdGlvbiB4cCgpe31mdW5jdGlvbiBhZCgpe31mdW5jdGlvbiBheCgpe31mdW5jdGlvbiBaVCgpe31mdW5jdGlvbiBJaygpe31mdW5jdGlvbiBhQigpe31mdW5jdGlvbiBuSigpe31mdW5jdGlvbiBPaygpe31mdW5jdGlvbiBvQigpe31mdW5jdGlvbiBySigpe31mdW5jdGlvbiBKVCgpe31mdW5jdGlvbiBveCgpe31mdW5jdGlvbiBjeCgpe31mdW5jdGlvbiBrcCgpe31mdW5jdGlvbiBjQigpe31mdW5jdGlvbiBQaygpe31mdW5jdGlvbiB1Qigpe31mdW5jdGlvbiBsQigpe31mdW5jdGlvbiB1eCgpe31mdW5jdGlvbiBVYigpe31mdW5jdGlvbiBNMCgpe31mdW5jdGlvbiBFcCgpe31mdW5jdGlvbiBMMygpe31mdW5jdGlvbiBGaygpe31mdW5jdGlvbiB0Qygpe31mdW5jdGlvbiBoQigpe31mdW5jdGlvbiBpSigpe31mdW5jdGlvbiBmQigpe31mdW5jdGlvbiBkQigpe31mdW5jdGlvbiBnQigpe31mdW5jdGlvbiBOaygpe31mdW5jdGlvbiBwQigpe31mdW5jdGlvbiBiQigpe31mdW5jdGlvbiBzSigpe31mdW5jdGlvbiBCaygpe31mdW5jdGlvbiBSaygpe31mdW5jdGlvbiBUbSgpe31mdW5jdGlvbiBITCgpe31mdW5jdGlvbiBhSigpe31mdW5jdGlvbiBvSigpe31mdW5jdGlvbiBjSigpe31mdW5jdGlvbiB1Sigpe31mdW5jdGlvbiBsSigpe31mdW5jdGlvbiBoSigpe31mdW5jdGlvbiBmSigpe31mdW5jdGlvbiBkSigpe31mdW5jdGlvbiB3Qigpe31mdW5jdGlvbiBnSigpe31mdW5jdGlvbiBwSigpe31mdW5jdGlvbiBiSigpe31mdW5jdGlvbiB2Qigpe31mdW5jdGlvbiBqaygpe31mdW5jdGlvbiBlQygpe31mdW5jdGlvbiBtQigpe31mdW5jdGlvbiB3Sigpe31mdW5jdGlvbiB5Qigpe31mdW5jdGlvbiB4Qigpe31mdW5jdGlvbiB2Sigpe31mdW5jdGlvbiBuQygpe31mdW5jdGlvbiBDbSgpe31mdW5jdGlvbiBrQigpe31mdW5jdGlvbiBFQigpe31mdW5jdGlvbiBtSigpe31mdW5jdGlvbiB5Sigpe31mdW5jdGlvbiByQygpe31mdW5jdGlvbiBUQigpe31mdW5jdGlvbiBDQigpe31mdW5jdGlvbiB1Yygpe31mdW5jdGlvbiB4Sigpe31mdW5jdGlvbiBfQigpe31mdW5jdGlvbiBpQygpe31mdW5jdGlvbiBrSigpe31mdW5jdGlvbiBFSigpe31mdW5jdGlvbiBzQygpe31mdW5jdGlvbiBTQigpe31mdW5jdGlvbiBhQygpe31mdW5jdGlvbiBvQygpe31mdW5jdGlvbiBqZigpe31mdW5jdGlvbiBWTCgpe31mdW5jdGlvbiBHTCgpe31mdW5jdGlvbiBseCgpe31mdW5jdGlvbiBUSigpe31mdW5jdGlvbiBDSigpe31mdW5jdGlvbiBfSigpe31mdW5jdGlvbiBTSigpe31mdW5jdGlvbiBfbSgpe31mdW5jdGlvbiBBQigpe31mdW5jdGlvbiBoeCgpe31mdW5jdGlvbiBkMSgpe31mdW5jdGlvbiBMQigpe31mdW5jdGlvbiBNQigpe31mdW5jdGlvbiBEQigpe31mdW5jdGlvbiBJQigpe31mdW5jdGlvbiBPQigpe31mdW5jdGlvbiBQQigpe31mdW5jdGlvbiAkZigpe31mdW5jdGlvbiBkdSgpe31mdW5jdGlvbiBBSigpe31mdW5jdGlvbiBMSigpe31mdW5jdGlvbiBNSigpe31mdW5jdGlvbiBndSgpe31mdW5jdGlvbiBjQygpe31mdW5jdGlvbiBGQigpe31mdW5jdGlvbiBOQigpe31mdW5jdGlvbiBmeCgpe31mdW5jdGlvbiBESigpe31mdW5jdGlvbiAkaygpe31mdW5jdGlvbiBJSigpe31mdW5jdGlvbiBCQigpe31mdW5jdGlvbiBPSigpe31mdW5jdGlvbiBQSigpe31mdW5jdGlvbiB1Qygpe31mdW5jdGlvbiBSQigpe31mdW5jdGlvbiBVTCgpe31mdW5jdGlvbiBsQygpe31mdW5jdGlvbiBGSigpe31mdW5jdGlvbiBOSigpe31mdW5jdGlvbiBXTCgpe31mdW5jdGlvbiBoQygpe31mdW5jdGlvbiBnMSgpe31mdW5jdGlvbiB6aygpe31mdW5jdGlvbiBCSigpe31mdW5jdGlvbiBxaygpe31mdW5jdGlvbiBZTCgpe31mdW5jdGlvbiBXYigpe31mdW5jdGlvbiBmQygpe31mdW5jdGlvbiBLTCgpe31mdW5jdGlvbiB6Zigpe31mdW5jdGlvbiBkQygpe31mdW5jdGlvbiBwMSgpe31mdW5jdGlvbiBiMSgpe31mdW5jdGlvbiBSSigpe31mdW5jdGlvbiBqSigpe31mdW5jdGlvbiBNMygpe31mdW5jdGlvbiBIaygpe31mdW5jdGlvbiBWaygpe31mdW5jdGlvbiBnQygpe31mdW5jdGlvbiAkSigpe31mdW5jdGlvbiBkeCgpe31mdW5jdGlvbiBYTCgpe31mdW5jdGlvbiBqQigpe31mdW5jdGlvbiB6Sigpe31mdW5jdGlvbiBwQygpe1BDKCl9ZnVuY3Rpb24gcUooKXtSaXQoKX1mdW5jdGlvbiAkQigpe29fKCl9ZnVuY3Rpb24gUUwoKXtzcSgpfWZ1bmN0aW9uIEhKKCl7cTR0KCl9ZnVuY3Rpb24gYkMoKXtKZigpfWZ1bmN0aW9uIFZKKCl7SjN0KCl9ZnVuY3Rpb24gR0ooKXtpSSgpfWZ1bmN0aW9uIFVKKCl7RU0oKX1mdW5jdGlvbiBXSigpe2tNKCl9ZnVuY3Rpb24gWUooKXtLTSgpfWZ1bmN0aW9uIHpCKCl7QlZ0KCl9ZnVuY3Rpb24gS0ooKXtyNigpfWZ1bmN0aW9uIFhKKCl7JFIoKX1mdW5jdGlvbiBRSigpe1lKdCgpfWZ1bmN0aW9uIHFCKCl7b25lKCl9ZnVuY3Rpb24gWkooKXtfdGUoKX1mdW5jdGlvbiBKSigpe0hRdCgpfWZ1bmN0aW9uIHdDKCl7b0UoKX1mdW5jdGlvbiB0dHQoKXtuYigpfWZ1bmN0aW9uIGV0dCgpe2NuZSgpfWZ1bmN0aW9uIG50dCgpe05adCgpfWZ1bmN0aW9uIHJ0dCgpe0Z4dCgpfWZ1bmN0aW9uIGl0dCgpe0tzZSgpfWZ1bmN0aW9uIHN0dCgpe1ZRdCgpfWZ1bmN0aW9uIEhCKCl7VGUoKX1mdW5jdGlvbiBhdHQoKXtxUXQoKX1mdW5jdGlvbiBWQigpe3VuZSgpfWZ1bmN0aW9uIG90dCgpe2ZyZSgpfWZ1bmN0aW9uIFpMKCl7VVF0KCl9ZnVuY3Rpb24gY3R0KCl7RHRlKCl9ZnVuY3Rpb24gR0IoKXtSVnQoKX1mdW5jdGlvbiB1dHQoKXtFNXQoKX1mdW5jdGlvbiBVQigpe3V5KCl9ZnVuY3Rpb24gbHR0KCl7Tm5lKCl9ZnVuY3Rpb24gV0IoKXtjSSgpfWZ1bmN0aW9uIFlCKCl7ZGF0KCl9ZnVuY3Rpb24gS0IoKXt5c3QoKX1mdW5jdGlvbiBKTCgpe2d2KCl9ZnVuY3Rpb24gRDMoKXtteXQoKX1mdW5jdGlvbiB2Qygpe0dRdCgpfWZ1bmN0aW9uIG9kKCl7cmxlKCl9ZnVuY3Rpb24gWEIoKXt5NXQoKX1mdW5jdGlvbiBHaygpe3NhdCgpfWZ1bmN0aW9uIHRNKCl7ViQoKX1mdW5jdGlvbiBodHQoKXtmcSgpfWZ1bmN0aW9uIFRwKCl7dWkoKX1mdW5jdGlvbiBRQigpe1N6KCl9ZnVuY3Rpb24gWkIoKXtTM3QoKX1mdW5jdGlvbiBKQigpe0RxKCl9ZnVuY3Rpb24gbmgoKXtJWXQoKX1mdW5jdGlvbiBlTSgpe2tpdCgpfWZ1bmN0aW9uIHRSKCl7b3h0KCl9ZnVuY3Rpb24gVWsodCl7T24odCl9ZnVuY3Rpb24gbUModCl7dGhpcy5hPXR9ZnVuY3Rpb24gV2sodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZVIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZ3godCl7dGhpcy5hPXR9ZnVuY3Rpb24gYncodCl7dGhpcy5hPXR9ZnVuY3Rpb24gWWsodCl7dGhpcy5hPXR9ZnVuY3Rpb24gblIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZnR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIG5NKHQpe3RoaXMuYT10fWZ1bmN0aW9uIEkzKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHJNKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHlDKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGR0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB4Qyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBrQyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBweCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBpTSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBzTSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBndHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gcHR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGJ0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiByUih0KXt0aGlzLmI9dH1mdW5jdGlvbiB3dHQodCl7dGhpcy5jPXR9ZnVuY3Rpb24gdnR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIG10dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB5dHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24geHR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGt0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBFdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVHR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEN0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBieCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBfdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gS2sodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVGgodCl7dGhpcy5hPXR9ZnVuY3Rpb24gU3R0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHd4KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFhrKHQpe3RoaXMuYT10fWZ1bmN0aW9uIEVDKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFFrKHQpe3RoaXMuYT10fWZ1bmN0aW9uIEVnKCl7dGhpcy5hPVtdfWZ1bmN0aW9uIEF0dCh0LGUpe3QuYT1lfWZ1bmN0aW9uIGNwdCh0LGUpe3QuYT1lfWZ1bmN0aW9uIHVwdCh0LGUpe3QuYj1lfWZ1bmN0aW9uIGxwdCh0LGUpe3QuYj1lfWZ1bmN0aW9uIGhwdCh0LGUpe3QuYj1lfWZ1bmN0aW9uIGFNKHQsZSl7dC5qPWV9ZnVuY3Rpb24gZnB0KHQsZSl7dC5nPWV9ZnVuY3Rpb24gZHB0KHQsZSl7dC5pPWV9ZnVuY3Rpb24gTHR0KHQsZSl7dC5jPWV9ZnVuY3Rpb24gdzEodCxlKXt0LmQ9ZX1mdW5jdGlvbiBNdHQodCxlKXt0LmQ9ZX1mdW5jdGlvbiBncHQodCxlKXt0LmM9ZX1mdW5jdGlvbiBEMCh0LGUpe3Quaz1lfWZ1bmN0aW9uIER0dCh0LGUpe3QuYz1lfWZ1bmN0aW9uIGlSKHQsZSl7dC5jPWV9ZnVuY3Rpb24gc1IodCxlKXt0LmE9ZX1mdW5jdGlvbiBJdHQodCxlKXt0LmE9ZX1mdW5jdGlvbiBwcHQodCxlKXt0LmY9ZX1mdW5jdGlvbiBicHQodCxlKXt0LmE9ZX1mdW5jdGlvbiB3dyh0LGUpe3QuYj1lfWZ1bmN0aW9uIG9NKHQsZSl7dC5kPWV9ZnVuY3Rpb24gVEModCxlKXt0Lmk9ZX1mdW5jdGlvbiBhUih0LGUpe3Qubz1lfWZ1bmN0aW9uIHdwdCh0LGUpe3Qucj1lfWZ1bmN0aW9uIHZwdCh0LGUpe3QuYT1lfWZ1bmN0aW9uIG9SKHQsZSl7dC5iPWV9ZnVuY3Rpb24gdncodCxlKXt0LmU9ZX1mdW5jdGlvbiBPdHQodCxlKXt0LmY9ZX1mdW5jdGlvbiBDQyh0LGUpe3QuZz1lfWZ1bmN0aW9uIHZ4KHQsZSl7dC5lPWV9ZnVuY3Rpb24gbXB0KHQsZSl7dC5mPWV9ZnVuY3Rpb24gWmsodCxlKXt0LmY9ZX1mdW5jdGlvbiBQdHQodCxlKXt0Lm49ZX1mdW5jdGlvbiBUZyh0LGUpe3QuYT1lfWZ1bmN0aW9uIHlwdCh0LGUpe3QuYT1lfWZ1bmN0aW9uIE8zKHQsZSl7dC5jPWV9ZnVuY3Rpb24gRnR0KHQsZSl7dC5jPWV9ZnVuY3Rpb24gTnR0KHQsZSl7dC5kPWV9ZnVuY3Rpb24gY1IodCxlKXt0LmU9ZX1mdW5jdGlvbiB1Uih0LGUpe3QuZz1lfWZ1bmN0aW9uIEJ0dCh0LGUpe3QuYT1lfWZ1bmN0aW9uIEprKHQsZSl7dC5jPWV9ZnVuY3Rpb24gX0ModCxlKXt0LmQ9ZX1mdW5jdGlvbiB4cHQodCxlKXt0LmU9ZX1mdW5jdGlvbiBSdHQodCxlKXt0LmY9ZX1mdW5jdGlvbiBqdHQodCxlKXt0Lmo9ZX1mdW5jdGlvbiAkdHQodCxlKXt0LmE9ZX1mdW5jdGlvbiBrcHQodCxlKXt0LmI9ZX1mdW5jdGlvbiB2Yyh0LGUpe3QuYT1lfWZ1bmN0aW9uIGxSKHQpe3QuYj10LmF9ZnVuY3Rpb24genR0KHQpe3QuYz10LmQuZH1mdW5jdGlvbiBteCh0KXt0aGlzLmQ9dH1mdW5jdGlvbiBDZyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBTbSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBjTSh0KXt0aGlzLmE9dH1mdW5jdGlvbiB2MSh0KXt0aGlzLmE9dH1mdW5jdGlvbiB5eCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBxdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gaFIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gUDModCl7dGhpcy5hPXR9ZnVuY3Rpb24gdU0odCl7dGhpcy5hPXR9ZnVuY3Rpb24gQW0odCl7dGhpcy5hPXR9ZnVuY3Rpb24gZlIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gbTEodCl7dGhpcy5hPXR9ZnVuY3Rpb24geSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBnKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHgodCl7dGhpcy5iPXR9ZnVuY3Rpb24gVCh0KXt0aGlzLmI9dH1mdW5jdGlvbiBMKHQpe3RoaXMuYj10fWZ1bmN0aW9uIE8odCl7dGhpcy5hPXR9ZnVuY3Rpb24gUCh0KXt0aGlzLmE9dH1mdW5jdGlvbiAkKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHEodCl7dGhpcy5jPXR9ZnVuY3Rpb24gUyh0KXt0aGlzLmM9dH1mdW5jdGlvbiBWKHQpe3RoaXMuYz10fWZ1bmN0aW9uIFkodCl7dGhpcy5hPXR9ZnVuY3Rpb24gcnQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gb3QodCl7dGhpcy5hPXR9ZnVuY3Rpb24gaHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gTHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24ga3QodCl7dGhpcy5hPXR9ZnVuY3Rpb24gRHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gUHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gWnQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gWXQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gcXQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gbmUodCl7dGhpcy5hPXR9ZnVuY3Rpb24gR3QodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZ2UodCl7dGhpcy5hPXR9ZnVuY3Rpb24gYmUodCl7dGhpcy5hPXR9ZnVuY3Rpb24gaWUodCl7dGhpcy5hPXR9ZnVuY3Rpb24gRmUodCl7dGhpcy5hPXR9ZnVuY3Rpb24gd2UodCl7dGhpcy5hPXR9ZnVuY3Rpb24gYm4odCl7dGhpcy5hPXR9ZnVuY3Rpb24gemUodCl7dGhpcy5hPXR9ZnVuY3Rpb24gR2UodCl7dGhpcy5hPXR9ZnVuY3Rpb24gRW4odCl7dGhpcy5hPXR9ZnVuY3Rpb24gSW4odCl7dGhpcy5hPXR9ZnVuY3Rpb24gWW4odCl7dGhpcy5hPXR9ZnVuY3Rpb24gU24odCl7dGhpcy5hPXR9ZnVuY3Rpb24gV24odCl7dGhpcy5hPXR9ZnVuY3Rpb24gcnIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gd3IodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdXIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZXIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdm4odCl7dGhpcy5hPXR9ZnVuY3Rpb24gZ3IodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZnIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gSnIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdmkodCl7dGhpcy5hPXR9ZnVuY3Rpb24gWHModCl7dGhpcy5hPXR9ZnVuY3Rpb24gRWEodCl7dGhpcy5hPXR9ZnVuY3Rpb24gQ2kodCl7dGhpcy5hPXR9ZnVuY3Rpb24gaGkodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZ3ModCl7dGhpcy5hPXR9ZnVuY3Rpb24gcWkodCl7dGhpcy5hPXR9ZnVuY3Rpb24gU2kodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVWkodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVmEodCl7dGhpcy5lPXR9ZnVuY3Rpb24gUXModCl7dGhpcy5hPXR9ZnVuY3Rpb24gcXModCl7dGhpcy5hPXR9ZnVuY3Rpb24gVHIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gUXQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gam4odCl7dGhpcy5hPXR9ZnVuY3Rpb24gU3IodCl7dGhpcy5hPXR9ZnVuY3Rpb24gaXIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gc3IodCl7dGhpcy5hPXR9ZnVuY3Rpb24gSWEodCl7dGhpcy5hPXR9ZnVuY3Rpb24gJHIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gWWkodCl7dGhpcy5hPXR9ZnVuY3Rpb24gRm8odCl7dGhpcy5hPXR9ZnVuY3Rpb24gUGModCl7dGhpcy5hPXR9ZnVuY3Rpb24gWmEodCl7dGhpcy5hPXR9ZnVuY3Rpb24gbWModCl7dGhpcy5hPXR9ZnVuY3Rpb24gVGEodCl7dGhpcy5hPXR9ZnVuY3Rpb24gSmEodCl7dGhpcy5hPXR9ZnVuY3Rpb24gbWwodCl7dGhpcy5hPXR9ZnVuY3Rpb24gcWYodCl7dGhpcy5hPXR9ZnVuY3Rpb24gQ3AodCl7dGhpcy5hPXR9ZnVuY3Rpb24gX3AodCl7dGhpcy5hPXR9ZnVuY3Rpb24gSGYodCl7dGhpcy5hPXR9ZnVuY3Rpb24gX2codCl7dGhpcy5hPXR9ZnVuY3Rpb24gY2QodCl7dGhpcy5hPXR9ZnVuY3Rpb24gbXcodCl7dGhpcy5hPXR9ZnVuY3Rpb24gTG0odCl7dGhpcy5hPXR9ZnVuY3Rpb24geHgodCl7dGhpcy5hPXR9ZnVuY3Rpb24gRjModCl7dGhpcy5hPXR9ZnVuY3Rpb24ga3godCl7dGhpcy5hPXR9ZnVuY3Rpb24gU0ModCl7dGhpcy5hPXR9ZnVuY3Rpb24gTjModCl7dGhpcy5hPXR9ZnVuY3Rpb24gSGQodCl7dGhpcy5hPXR9ZnVuY3Rpb24geTEodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVmQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gQUModCl7dGhpcy5hPXR9ZnVuY3Rpb24gWWIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZFIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gSHR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFZ0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBHdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVXR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFd0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBZdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gS3R0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHQ4KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGxNKHQpe3RoaXMuYT10fWZ1bmN0aW9uIExDKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGdSKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHBSKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFh0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBTcCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBoTSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBiUih0KXt0aGlzLmE9dH1mdW5jdGlvbiBlOCh0KXt0aGlzLmM9dH1mdW5jdGlvbiBBcCh0KXt0aGlzLmI9dH1mdW5jdGlvbiBRdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gUyR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEEkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBMJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gTSR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEQkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBJJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gTyR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFAkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBGJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gTiR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEIkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBSJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gaiR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uICQkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB6JHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gcSR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEgkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBWJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gRyR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFUkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBXJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gWSR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEskdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBMcCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBFeCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBYJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gUSR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFokdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBKJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdHp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGV6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBuenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gcnp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGl6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBzenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gYXp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIG96dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBjenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdXp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGx6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBoenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gd1IodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZnp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGR6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBnenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gcHp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGJ6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB3enQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdnp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIG16dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB5enQodCl7dGhpcy5hPXR9ZnVuY3Rpb24geHp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGt6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBFenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVHp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEN6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBfenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gU3p0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEF6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBMenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gTXp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIER6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBJenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gT3p0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFB6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBGenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gTnp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEJ6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBSenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24ganp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEVwdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBWaSh0KXt0aGlzLmI9dH1mdW5jdGlvbiAkenQodCl7dGhpcy5mPXR9ZnVuY3Rpb24gVHB0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHp6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBxenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gSHp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFZ6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBHenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVXp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFd6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBZenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZk0odCl7dGhpcy5hPXR9ZnVuY3Rpb24gS3p0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFh6dCh0KXt0aGlzLmI9dH1mdW5jdGlvbiBDcHQodCl7dGhpcy5jPXR9ZnVuY3Rpb24gdlIodCl7dGhpcy5lPXR9ZnVuY3Rpb24gUXp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIG1SKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHlSKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFp0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBaenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gSnp0KHQpe3RoaXMuZD10fWZ1bmN0aW9uIF9wdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBTcHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24geXcodCl7dGhpcy5lPXR9ZnVuY3Rpb24gV1llKCl7dGhpcy5hPTB9ZnVuY3Rpb24gQjMoKXtJVXQodGhpcyl9ZnVuY3Rpb24gaGUoKXthbnQodGhpcyl9ZnVuY3Rpb24gX3IoKXtYdSh0aGlzKX1mdW5jdGlvbiBKdHQoKXtOWHQodGhpcyl9ZnVuY3Rpb24gdHF0KCl7fWZ1bmN0aW9uIHh3KCl7dGhpcy5jPW9MdH1mdW5jdGlvbiBZWWUodCxlKXtlLldiKHQpfWZ1bmN0aW9uIGVxdCh0LGUpe3QuYis9ZX1mdW5jdGlvbiBucXQodCl7dC5iPW5ldyB3ZXR9ZnVuY3Rpb24gaXQodCl7cmV0dXJuIHQuZX1mdW5jdGlvbiBLWWUodCl7cmV0dXJuIHQuYX1mdW5jdGlvbiBYWWUodCl7cmV0dXJuIHQuYX1mdW5jdGlvbiBRWWUodCl7cmV0dXJuIHQuYX1mdW5jdGlvbiBaWWUodCl7cmV0dXJuIHQuYX1mdW5jdGlvbiBKWWUodCl7cmV0dXJuIHQuYX1mdW5jdGlvbiB0S2UoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBlS2UoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBuS2UoKXtkYnQoKSxkeG4oKX1mdW5jdGlvbiByS2UodCl7dC5iLnRmKHQuZSl9ZnVuY3Rpb24gTUModCxlKXt0LmI9ZS10LmJ9ZnVuY3Rpb24gREModCxlKXt0LmE9ZS10LmF9ZnVuY3Rpb24gcnF0KHQsZSl7ZS5hZCh0LmEpfWZ1bmN0aW9uIGlLZSh0LGUpe0JzKGUsdCl9ZnVuY3Rpb24gc0tlKHQsZSxuKXt0Lk9kKG4sZSl9ZnVuY3Rpb24gZE0odCxlKXt0LmU9ZSxlLmI9dH1mdW5jdGlvbiBBcHQodCl7Z2QoKSx0aGlzLmE9dH1mdW5jdGlvbiBpcXQodCl7Z2QoKSx0aGlzLmE9dH1mdW5jdGlvbiBzcXQodCl7Z2QoKSx0aGlzLmE9dH1mdW5jdGlvbiBMcHQodCl7V20oKSx0aGlzLmE9dH1mdW5jdGlvbiBhcXQodCl7STgoKSxPdXQuYmUodCl9ZnVuY3Rpb24gS2IoKXtwV3QuY2FsbCh0aGlzKX1mdW5jdGlvbiBNcHQoKXtwV3QuY2FsbCh0aGlzKX1mdW5jdGlvbiBEcHQoKXtLYi5jYWxsKHRoaXMpfWZ1bmN0aW9uIHRldCgpe0tiLmNhbGwodGhpcyl9ZnVuY3Rpb24gb3F0KCl7S2IuY2FsbCh0aGlzKX1mdW5jdGlvbiBnTSgpe0tiLmNhbGwodGhpcyl9ZnVuY3Rpb24gT3UoKXtLYi5jYWxsKHRoaXMpfWZ1bmN0aW9uIElDKCl7S2IuY2FsbCh0aGlzKX1mdW5jdGlvbiBPcigpe0tiLmNhbGwodGhpcyl9ZnVuY3Rpb24gcmgoKXtLYi5jYWxsKHRoaXMpfWZ1bmN0aW9uIGNxdCgpe0tiLmNhbGwodGhpcyl9ZnVuY3Rpb24gbGMoKXtLYi5jYWxsKHRoaXMpfWZ1bmN0aW9uIHVxdCgpe0tiLmNhbGwodGhpcyl9ZnVuY3Rpb24gbHF0KCl7dGhpcy5hPXRoaXN9ZnVuY3Rpb24geFIoKXt0aGlzLkJifD0yNTZ9ZnVuY3Rpb24gaHF0KCl7dGhpcy5iPW5ldyBkVXR9ZnVuY3Rpb24gSXB0KCl7SXB0PVosbmV3IF9yfWZ1bmN0aW9uIE9wdCgpe0RwdC5jYWxsKHRoaXMpfWZ1bmN0aW9uIGZxdCh0LGUpe3QubGVuZ3RoPWV9ZnVuY3Rpb24ga1IodCxlKXtsZSh0LmEsZSl9ZnVuY3Rpb24gYUtlKHQsZSl7VjR0KHQuYyxlKX1mdW5jdGlvbiBvS2UodCxlKXtGcyh0LmIsZSl9ZnVuY3Rpb24gY0tlKHQsZSl7SnoodC5hLGUpfWZ1bmN0aW9uIHVLZSh0LGUpe1dpdCh0LmEsZSl9ZnVuY3Rpb24gbjgodCxlKXttaSh0LmUsZSl9ZnVuY3Rpb24gVHgodCl7cHEodC5jLHQuYil9ZnVuY3Rpb24gbEtlKHQsZSl7dC5rYygpLk5iKGUpfWZ1bmN0aW9uIFBwdCh0KXt0aGlzLmE9Y2huKHQpfWZ1bmN0aW9uIEhzKCl7dGhpcy5hPW5ldyBfcn1mdW5jdGlvbiBkcXQoKXt0aGlzLmE9bmV3IF9yfWZ1bmN0aW9uIEVSKCl7dGhpcy5hPW5ldyBoZX1mdW5jdGlvbiBlZXQoKXt0aGlzLmE9bmV3IGhlfWZ1bmN0aW9uIEZwdCgpe3RoaXMuYT1uZXcgaGV9ZnVuY3Rpb24gQ2goKXt0aGlzLmE9bmV3IHV3fWZ1bmN0aW9uIFhiKCl7dGhpcy5hPW5ldyBWSnR9ZnVuY3Rpb24gTnB0KCl7dGhpcy5hPW5ldyBINX1mdW5jdGlvbiBCcHQoKXt0aGlzLmE9bmV3IExWdH1mdW5jdGlvbiBncXQoKXt0aGlzLmE9bmV3IHdadH1mdW5jdGlvbiBScHQoKXt0aGlzLmE9bmV3IE9RdH1mdW5jdGlvbiBqcHQoKXt0aGlzLmE9bmV3IHJZdH1mdW5jdGlvbiBwcXQoKXt0aGlzLmE9bmV3IGhlfWZ1bmN0aW9uICRwdCgpe3RoaXMuYT1uZXcgaGV9ZnVuY3Rpb24gYnF0KCl7dGhpcy5hPW5ldyBoZX1mdW5jdGlvbiB3cXQoKXt0aGlzLmE9bmV3IGhlfWZ1bmN0aW9uIHZxdCgpe3RoaXMuZD1uZXcgaGV9ZnVuY3Rpb24gbXF0KCl7dGhpcy5hPW5ldyBIc31mdW5jdGlvbiB5cXQoKXt0aGlzLmE9bmV3IF9yfWZ1bmN0aW9uIHhxdCgpe3RoaXMuYj1uZXcgX3J9ZnVuY3Rpb24ga3F0KCl7dGhpcy5iPW5ldyBoZX1mdW5jdGlvbiB6cHQoKXt0aGlzLmU9bmV3IGhlfWZ1bmN0aW9uIEVxdCgpe3RoaXMuZD1uZXcgaGV9ZnVuY3Rpb24gVHF0KCl7dGhpcy5hPW5ldyB0dHR9ZnVuY3Rpb24gQ3F0KCl7aGUuY2FsbCh0aGlzKX1mdW5jdGlvbiBxcHQoKXtFUi5jYWxsKHRoaXMpfWZ1bmN0aW9uIF9xdCgpe0lqLmNhbGwodGhpcyl9ZnVuY3Rpb24gU3F0KCl7JHB0LmNhbGwodGhpcyl9ZnVuY3Rpb24gbmV0KCl7T0MuY2FsbCh0aGlzKX1mdW5jdGlvbiBPQygpe3RxdC5jYWxsKHRoaXMpfWZ1bmN0aW9uIEN4KCl7dHF0LmNhbGwodGhpcyl9ZnVuY3Rpb24gSHB0KCl7Q3guY2FsbCh0aGlzKX1mdW5jdGlvbiBBcXQoKXtsUXQuY2FsbCh0aGlzKX1mdW5jdGlvbiBMcXQoKXtsUXQuY2FsbCh0aGlzKX1mdW5jdGlvbiBNcXQoKXtYcHQuY2FsbCh0aGlzKX1mdW5jdGlvbiBEcXQoKXtYcHQuY2FsbCh0aGlzKX1mdW5jdGlvbiBJcXQoKXtYcHQuY2FsbCh0aGlzKX1mdW5jdGlvbiBPcXQoKXtRcHQuY2FsbCh0aGlzKX1mdW5jdGlvbiBQdSgpe1ppLmNhbGwodGhpcyl9ZnVuY3Rpb24gVnB0KCl7RW0uY2FsbCh0aGlzKX1mdW5jdGlvbiBHcHQoKXtFbS5jYWxsKHRoaXMpfWZ1bmN0aW9uIFBxdCgpe1hxdC5jYWxsKHRoaXMpfWZ1bmN0aW9uIEZxdCgpe1hxdC5jYWxsKHRoaXMpfWZ1bmN0aW9uIE5xdCgpe19yLmNhbGwodGhpcyl9ZnVuY3Rpb24gQnF0KCl7X3IuY2FsbCh0aGlzKX1mdW5jdGlvbiBScXQoKXtfci5jYWxsKHRoaXMpfWZ1bmN0aW9uIGpxdCgpe0hzLmNhbGwodGhpcyl9ZnVuY3Rpb24gcmV0KCl7aW5lLmNhbGwodGhpcyl9ZnVuY3Rpb24gJHF0KCl7eFIuY2FsbCh0aGlzKX1mdW5jdGlvbiBpZXQoKXt4MnQuY2FsbCh0aGlzKX1mdW5jdGlvbiBzZXQoKXt4MnQuY2FsbCh0aGlzKX1mdW5jdGlvbiBVcHQoKXtfci5jYWxsKHRoaXMpfWZ1bmN0aW9uIGFldCgpe19yLmNhbGwodGhpcyl9ZnVuY3Rpb24genF0KCl7X3IuY2FsbCh0aGlzKX1mdW5jdGlvbiBXcHQoKXtQay5jYWxsKHRoaXMpfWZ1bmN0aW9uIHFxdCgpe1BrLmNhbGwodGhpcyl9ZnVuY3Rpb24gSHF0KCl7V3B0LmNhbGwodGhpcyl9ZnVuY3Rpb24gVnF0KCl7WEwuY2FsbCh0aGlzKX1mdW5jdGlvbiBHcXQodCl7TGVlLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBVcXQodCl7TGVlLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBZcHQodCl7bk0uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEtwdCh0KXttVnQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGhLZSh0KXtLcHQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGZLZSh0KXttVnQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIHI4KCl7dGhpcy5hPW5ldyBaaX1mdW5jdGlvbiBYcHQoKXt0aGlzLmE9bmV3IEhzfWZ1bmN0aW9uIFFwdCgpe3RoaXMuYT1uZXcgX3J9ZnVuY3Rpb24gV3F0KCl7dGhpcy5hPW5ldyBoZX1mdW5jdGlvbiBZcXQoKXt0aGlzLmo9bmV3IGhlfWZ1bmN0aW9uIFpwdCgpe3RoaXMuYT1uZXcgbkJ9ZnVuY3Rpb24gS3F0KCl7dGhpcy5hPW5ldyBWSHR9ZnVuY3Rpb24gWHF0KCl7dGhpcy5hPW5ldyBjQn1mdW5jdGlvbiBvZXQoKXtvZXQ9WixTdXQ9bmV3IGdIdH1mdW5jdGlvbiBjZXQoKXtjZXQ9WixfdXQ9bmV3IGRIdH1mdW5jdGlvbiBQQygpe1BDPVosQ3V0PW5ldyBBfWZ1bmN0aW9uIFRSKCl7VFI9WixNdXQ9bmV3IGRXdH1mdW5jdGlvbiBkS2UodCl7S3B0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBnS2UodCl7S3B0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBRcXQodCl7JHJ0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBacXQodCl7JHJ0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBKcXQodCl7Q1l0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiB1ZXQodCl7UGduLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBrdyh0KXtPbS5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gRkModCl7TlIuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEpwdCh0KXtOUi5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gdEh0KHQpe05SLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBWbyh0KXtqS3QuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGVIdCh0KXtWby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gX3goKXtRay5jYWxsKHRoaXMse30pfWZ1bmN0aW9uIENSKHQpe3c4KCksdGhpcy5hPXR9ZnVuY3Rpb24gTkModCl7dC5iPW51bGwsdC5jPTB9ZnVuY3Rpb24gcEtlKHQsZSl7dC5lPWUsbnVlKHQsZSl9ZnVuY3Rpb24gYktlKHQsZSl7dC5hPWUseXBuKHQpfWZ1bmN0aW9uIGhldCh0LGUsbil7dC5hW2UuZ109bn1mdW5jdGlvbiB3S2UodCxlLG4pe05kbihuLHQsZSl9ZnVuY3Rpb24gdktlKHQsZSl7SFplKGUuaSx0Lm4pfWZ1bmN0aW9uIG5IdCh0LGUpe1Z1bih0KS50ZChlKX1mdW5jdGlvbiBtS2UodCxlKXtyZXR1cm4gdCp0L2V9ZnVuY3Rpb24gckh0KHQsZSl7cmV0dXJuIHQuZy1lLmd9ZnVuY3Rpb24geUtlKHQpe3JldHVybiBuZXcgRUModCl9ZnVuY3Rpb24geEtlKHQpe3JldHVybiBuZXcgVW0odCl9ZnVuY3Rpb24gX1IodCl7Vm8uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIHlvKHQpe1ZvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBpSHQodCl7Vm8uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGZldCh0KXtqS3QuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGRldCh0KXt3eXQoKSx0aGlzLmE9dH1mdW5jdGlvbiBzSHQodCl7RFl0KCksdGhpcy5hPXR9ZnVuY3Rpb24gTW0odCl7Vm50KCksdGhpcy5mPXR9ZnVuY3Rpb24gZ2V0KHQpe1ZudCgpLHRoaXMuZj10fWZ1bmN0aW9uIGk4KHQpe1ZvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBGbih0KXtWby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gTm8odCl7Vm8uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGFIdCh0KXtWby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gU3godCl7Vm8uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGplKHQpe3JldHVybiBPbih0KSx0fWZ1bmN0aW9uIFh0KHQpe3JldHVybiBPbih0KSx0fWZ1bmN0aW9uIHBNKHQpe3JldHVybiBPbih0KSx0fWZ1bmN0aW9uIHRidCh0KXtyZXR1cm4gT24odCksdH1mdW5jdGlvbiBrS2UodCl7cmV0dXJuIE9uKHQpLHR9ZnVuY3Rpb24gQkModCl7cmV0dXJuIHQuYj09dC5jfWZ1bmN0aW9uIERtKHQpe3JldHVybiEhdCYmdC5ifWZ1bmN0aW9uIEVLZSh0KXtyZXR1cm4hIXQmJnQua31mdW5jdGlvbiBUS2UodCl7cmV0dXJuISF0JiZ0Lmp9ZnVuY3Rpb24geWwodCl7T24odCksdGhpcy5hPXR9ZnVuY3Rpb24gZWJ0KHQpe3JldHVybiBnMih0KSx0fWZ1bmN0aW9uIFJDKHQpe2R2dCh0LHQubGVuZ3RoKX1mdW5jdGlvbiBTZyh0KXtWby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gdWQodCl7Vm8uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIHBldCh0KXtWby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gUjModCl7Vm8uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGpDKHQpe1ZvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBOcih0KXtWby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gYmV0KHQpe2oydC5jYWxsKHRoaXMsdCwwKX1mdW5jdGlvbiB3ZXQoKXtXdnQuY2FsbCh0aGlzLDEyLDMpfWZ1bmN0aW9uIG5idCgpe25idD1aLHJFdD1uZXcgcHR9ZnVuY3Rpb24gb0h0KCl7b0h0PVosbkV0PW5ldyBffWZ1bmN0aW9uIFNSKCl7U1I9WixjUz1uZXcgbXR9ZnVuY3Rpb24gY0h0KCl7Y0h0PVosQmdlPW5ldyBmdH1mdW5jdGlvbiB1SHQoKXt0aHJvdyBpdChuZXcgT3IpfWZ1bmN0aW9uIHJidCgpe3Rocm93IGl0KG5ldyBPcil9ZnVuY3Rpb24gbEh0KCl7dGhyb3cgaXQobmV3IE9yKX1mdW5jdGlvbiBDS2UoKXt0aHJvdyBpdChuZXcgT3IpfWZ1bmN0aW9uIF9LZSgpe3Rocm93IGl0KG5ldyBPcil9ZnVuY3Rpb24gU0tlKCl7dGhyb3cgaXQobmV3IE9yKX1mdW5jdGlvbiB2ZXQoKXt0aGlzLmE9QnIoTHIoWWEpKX1mdW5jdGlvbiBBeCh0KXtnZCgpLHRoaXMuYT1Mcih0KX1mdW5jdGlvbiBoSHQodCxlKXt0LlRkKGUpLGUuU2QodCl9ZnVuY3Rpb24gQUtlKHQsZSl7dC5hLmVjKCkuTWMoZSl9ZnVuY3Rpb24gTEtlKHQsZSxuKXt0LmMubGYoZSxuKX1mdW5jdGlvbiBpYnQodCl7eW8uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGxkKHQpe0ZuLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBBZygpe3l4LmNhbGwodGhpcywiIil9ZnVuY3Rpb24gJEMoKXt5eC5jYWxsKHRoaXMsIiIpfWZ1bmN0aW9uIE1wKCl7eXguY2FsbCh0aGlzLCIiKX1mdW5jdGlvbiBJbSgpe3l4LmNhbGwodGhpcywiIil9ZnVuY3Rpb24gc2J0KHQpe3lvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBzOCh0KXtULmNhbGwodGhpcyx0KX1mdW5jdGlvbiBtZXQodCl7RWouY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGZIdCh0KXtzOC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gZEh0KCl7eEMuY2FsbCh0aGlzLG51bGwpfWZ1bmN0aW9uIGdIdCgpe3hDLmNhbGwodGhpcyxudWxsKX1mdW5jdGlvbiBBUigpe0FSPVosSTgoKX1mdW5jdGlvbiBwSHQoKXtwSHQ9WixXZ2U9dTBuKCl9ZnVuY3Rpb24gYkh0KHQpe3JldHVybiB0LmE/dC5iOjB9ZnVuY3Rpb24gTUtlKHQpe3JldHVybiB0LmE/dC5iOjB9ZnVuY3Rpb24gREtlKHQsZSl7cmV0dXJuIHQuYS1lLmF9ZnVuY3Rpb24gSUtlKHQsZSl7cmV0dXJuIHQuYS1lLmF9ZnVuY3Rpb24gT0tlKHQsZSl7cmV0dXJuIHQuYS1lLmF9ZnVuY3Rpb24gTFIodCxlKXtyZXR1cm4gQm10KHQsZSl9ZnVuY3Rpb24gY3QodCxlKXtyZXR1cm4gTlF0KHQsZSl9ZnVuY3Rpb24gUEtlKHQsZSl7cmV0dXJuIGUgaW4gdC5hfWZ1bmN0aW9uIHdIdCh0LGUpe3JldHVybiB0LmY9ZSx0fWZ1bmN0aW9uIEZLZSh0LGUpe3JldHVybiB0LmI9ZSx0fWZ1bmN0aW9uIHZIdCh0LGUpe3JldHVybiB0LmM9ZSx0fWZ1bmN0aW9uIE5LZSh0LGUpe3JldHVybiB0Lmc9ZSx0fWZ1bmN0aW9uIGFidCh0LGUpe3JldHVybiB0LmE9ZSx0fWZ1bmN0aW9uIG9idCh0LGUpe3JldHVybiB0LmY9ZSx0fWZ1bmN0aW9uIEJLZSh0LGUpe3JldHVybiB0Lms9ZSx0fWZ1bmN0aW9uIGNidCh0LGUpe3JldHVybiB0LmE9ZSx0fWZ1bmN0aW9uIFJLZSh0LGUpe3JldHVybiB0LmU9ZSx0fWZ1bmN0aW9uIHVidCh0LGUpe3JldHVybiB0LmU9ZSx0fWZ1bmN0aW9uIGpLZSh0LGUpe3JldHVybiB0LmY9ZSx0fWZ1bmN0aW9uICRLZSh0LGUpe3QuYj0hMCx0LmQ9ZX1mdW5jdGlvbiB6S2UodCxlKXt0LmI9bmV3IHhvKGUpfWZ1bmN0aW9uIHFLZSh0LGUsbil7ZS50ZCh0LmFbbl0pfWZ1bmN0aW9uIEhLZSh0LGUsbil7ZS53ZSh0LmFbbl0pfWZ1bmN0aW9uIFZLZSh0LGUpe3JldHVybiB0LmItZS5ifWZ1bmN0aW9uIEdLZSh0LGUpe3JldHVybiB0LmctZS5nfWZ1bmN0aW9uIFVLZSh0LGUpe3JldHVybiB0LnMtZS5zfWZ1bmN0aW9uIFdLZSh0LGUpe3JldHVybiB0PzA6ZS0xfWZ1bmN0aW9uIG1IdCh0LGUpe3JldHVybiB0PzA6ZS0xfWZ1bmN0aW9uIFlLZSh0LGUpe3JldHVybiB0P2UtMTowfWZ1bmN0aW9uIEtLZSh0LGUpe3JldHVybiBlLllmKHQpfWZ1bmN0aW9uIEV3KHQsZSl7cmV0dXJuIHQuYj1lLHR9ZnVuY3Rpb24gTVIodCxlKXtyZXR1cm4gdC5hPWUsdH1mdW5jdGlvbiBUdyh0LGUpe3JldHVybiB0LmM9ZSx0fWZ1bmN0aW9uIEN3KHQsZSl7cmV0dXJuIHQuZD1lLHR9ZnVuY3Rpb24gX3codCxlKXtyZXR1cm4gdC5lPWUsdH1mdW5jdGlvbiBsYnQodCxlKXtyZXR1cm4gdC5mPWUsdH1mdW5jdGlvbiB6Qyh0LGUpe3JldHVybiB0LmE9ZSx0fWZ1bmN0aW9uIGE4KHQsZSl7cmV0dXJuIHQuYj1lLHR9ZnVuY3Rpb24gbzgodCxlKXtyZXR1cm4gdC5jPWUsdH1mdW5jdGlvbiBaZSh0LGUpe3JldHVybiB0LmM9ZSx0fWZ1bmN0aW9uIGtuKHQsZSl7cmV0dXJuIHQuYj1lLHR9ZnVuY3Rpb24gSmUodCxlKXtyZXR1cm4gdC5kPWUsdH1mdW5jdGlvbiB0bih0LGUpe3JldHVybiB0LmU9ZSx0fWZ1bmN0aW9uIFhLZSh0LGUpe3JldHVybiB0LmY9ZSx0fWZ1bmN0aW9uIGVuKHQsZSl7cmV0dXJuIHQuZz1lLHR9ZnVuY3Rpb24gbm4odCxlKXtyZXR1cm4gdC5hPWUsdH1mdW5jdGlvbiBybih0LGUpe3JldHVybiB0Lmk9ZSx0fWZ1bmN0aW9uIHNuKHQsZSl7cmV0dXJuIHQuaj1lLHR9ZnVuY3Rpb24geUh0KHQsZSl7cmV0dXJuIHQuaz1lLHR9ZnVuY3Rpb24gUUtlKHQsZSl7cmV0dXJuIHQuaj1lLHR9ZnVuY3Rpb24gWktlKHQsZSl7bmIoKSxVbyhlLHQpfWZ1bmN0aW9uIEpLZSh0LGUsbil7V2VuKHQuYSxlLG4pfWZ1bmN0aW9uIHhIdCh0KXtSWHQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGhidCh0KXtSWHQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIERSKHQpe1NudC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24ga0h0KHQpe2Jobi5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gRHAodCl7UXcuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEVIdCh0KXtwcnQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIFRIdCh0KXtwcnQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIENIdCgpe2IydC5jYWxsKHRoaXMsIiIpfWZ1bmN0aW9uIENhKCl7dGhpcy5hPTAsdGhpcy5iPTB9ZnVuY3Rpb24gX0h0KCl7dGhpcy5iPTAsdGhpcy5hPTB9ZnVuY3Rpb24gU0h0KHQsZSl7dC5iPTAscnkodCxlKX1mdW5jdGlvbiB0WGUodCxlKXt0LmM9ZSx0LmI9ITB9ZnVuY3Rpb24gQUh0KHQsZSl7cmV0dXJuIHQuYy5fYihlKX1mdW5jdGlvbiBWZih0KXtyZXR1cm4gdC5lJiZ0LmUoKX1mdW5jdGlvbiB5ZXQodCl7cmV0dXJuIHQ/dC5kOm51bGx9ZnVuY3Rpb24gTEh0KHQsZSl7cmV0dXJuIGVpZSh0LmIsZSl9ZnVuY3Rpb24gZVhlKHQpe3JldHVybiB0P3QuZzpudWxsfWZ1bmN0aW9uIG5YZSh0KXtyZXR1cm4gdD90Lmk6bnVsbH1mdW5jdGlvbiBJcCh0KXtyZXR1cm4gUDAodCksdC5vfWZ1bmN0aW9uIFN3KCl7U3c9WixHNGU9eWRuKCl9ZnVuY3Rpb24gTUh0KCl7TUh0PVosbmE9STBuKCl9ZnVuY3Rpb24gYzgoKXtjOD1aLGFMdD1rZG4oKX1mdW5jdGlvbiBESHQoKXtESHQ9WixMNWU9eGRuKCl9ZnVuY3Rpb24gZmJ0KCl7ZmJ0PVoscGM9d3BuKCl9ZnVuY3Rpb24gZGJ0KCl7ZGJ0PVosQWI9SzgoKX1mdW5jdGlvbiBJSHQoKXt0aHJvdyBpdChuZXcgT3IpfWZ1bmN0aW9uIE9IdCgpe3Rocm93IGl0KG5ldyBPcil9ZnVuY3Rpb24gUEh0KCl7dGhyb3cgaXQobmV3IE9yKX1mdW5jdGlvbiBGSHQoKXt0aHJvdyBpdChuZXcgT3IpfWZ1bmN0aW9uIE5IdCgpe3Rocm93IGl0KG5ldyBPcil9ZnVuY3Rpb24gQkh0KCl7dGhyb3cgaXQobmV3IE9yKX1mdW5jdGlvbiBJUih0KXt0aGlzLmE9bmV3IEx4KHQpfWZ1bmN0aW9uIGdidCh0KXtJaGUoKSxfeG4odGhpcyx0KX1mdW5jdGlvbiBPcCh0KXt0aGlzLmE9bmV3IFludCh0KX1mdW5jdGlvbiBqMyh0LGUpe2Zvcig7dC55ZShlKTspO31mdW5jdGlvbiBwYnQodCxlKXtmb3IoO3Quc2QoZSk7KTt9ZnVuY3Rpb24gJDModCxlKXtyZXR1cm4gdC5hKz1lLHR9ZnVuY3Rpb24geGV0KHQsZSl7cmV0dXJuIHQuYSs9ZSx0fWZ1bmN0aW9uIExnKHQsZSl7cmV0dXJuIHQuYSs9ZSx0fWZ1bmN0aW9uIEF3KHQsZSl7cmV0dXJuIHQuYSs9ZSx0fWZ1bmN0aW9uIHFDKHQpe3JldHVybiBWcCh0KSx0LmF9ZnVuY3Rpb24gT1IodCl7cmV0dXJuIHQuYiE9dC5kLmN9ZnVuY3Rpb24gUkh0KHQpe3JldHVybiB0Lmx8dC5tPDwyMn1mdW5jdGlvbiBiYnQodCxlKXtyZXR1cm4gdC5kW2UucF19ZnVuY3Rpb24gakh0KHQsZSl7cmV0dXJuIGF2bih0LGUpfWZ1bmN0aW9uIHdidCh0LGUsbil7dC5zcGxpY2UoZSxuKX1mdW5jdGlvbiAkSHQodCl7dC5jP0V1ZSh0KTpUdWUodCl9ZnVuY3Rpb24gUFIodCl7dGhpcy5hPTAsdGhpcy5iPXR9ZnVuY3Rpb24gekh0KCl7dGhpcy5hPW5ldyB2SShtX3QpfWZ1bmN0aW9uIHFIdCgpe3RoaXMuYj1uZXcgdkkoc190KX1mdW5jdGlvbiBISHQoKXt0aGlzLmI9bmV3IHZJKFpodCl9ZnVuY3Rpb24gVkh0KCl7dGhpcy5iPW5ldyB2SShaaHQpfWZ1bmN0aW9uIEdIdCgpe3Rocm93IGl0KG5ldyBPcil9ZnVuY3Rpb24gVUh0KCl7dGhyb3cgaXQobmV3IE9yKX1mdW5jdGlvbiBXSHQoKXt0aHJvdyBpdChuZXcgT3IpfWZ1bmN0aW9uIFlIdCgpe3Rocm93IGl0KG5ldyBPcil9ZnVuY3Rpb24gS0h0KCl7dGhyb3cgaXQobmV3IE9yKX1mdW5jdGlvbiBYSHQoKXt0aHJvdyBpdChuZXcgT3IpfWZ1bmN0aW9uIFFIdCgpe3Rocm93IGl0KG5ldyBPcil9ZnVuY3Rpb24gWkh0KCl7dGhyb3cgaXQobmV3IE9yKX1mdW5jdGlvbiBKSHQoKXt0aHJvdyBpdChuZXcgT3IpfWZ1bmN0aW9uIHRWdCgpe3Rocm93IGl0KG5ldyBPcil9ZnVuY3Rpb24gclhlKCl7dGhyb3cgaXQobmV3IGxjKX1mdW5jdGlvbiBpWGUoKXt0aHJvdyBpdChuZXcgbGMpfWZ1bmN0aW9uIGJNKHQpe3RoaXMuYT1uZXcgZVZ0KHQpfWZ1bmN0aW9uIGVWdCh0KXtwY24odGhpcyx0LHAwbigpKX1mdW5jdGlvbiB3TSh0KXtyZXR1cm4hdHx8a1h0KHQpfWZ1bmN0aW9uIHZNKHQpe3JldHVybiBZMVt0XSE9LTF9ZnVuY3Rpb24gc1hlKCl7WkghPTAmJihaSD0wKSxKSD0tMX1mdW5jdGlvbiBuVnQoKXtUdXQ9PW51bGwmJihUdXQ9W10pfWZ1bmN0aW9uIGFYZSh0LGUpe3RhdChXdCh0LmEpLGUpfWZ1bmN0aW9uIG9YZSh0LGUpe3RhdChXdCh0LmEpLGUpfWZ1bmN0aW9uIG1NKHQsZSl7SzMuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gdTgodCxlKXttTS5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiB2YnQodCxlKXt0aGlzLmI9dCx0aGlzLmM9ZX1mdW5jdGlvbiByVnQodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZX1mdW5jdGlvbiBpVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBzVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBhVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBvVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBjVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiB1VnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBsVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBoVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBmVnQodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZX1mdW5jdGlvbiBkVnQodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZX1mdW5jdGlvbiBnVnQodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZX1mdW5jdGlvbiBwVnQodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZX1mdW5jdGlvbiBWcih0LGUpe3RoaXMuZj10LHRoaXMuZz1lfWZ1bmN0aW9uIGw4KHQsZSl7dGhpcy5lPXQsdGhpcy5kPWV9ZnVuY3Rpb24gTHcodCxlKXt0aGlzLmc9dCx0aGlzLmk9ZX1mdW5jdGlvbiBrZXQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBiVnQodCxlKXt0aGlzLmE9dCx0aGlzLmY9ZX1mdW5jdGlvbiB3VnQodCxlKXt0aGlzLmI9dCx0aGlzLmM9ZX1mdW5jdGlvbiBjWGUodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiB2VnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBFZXQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBtVnQodCl7QTJ0KHQuZGMoKSksdGhpcy5jPXR9ZnVuY3Rpb24gRlIodCl7dGhpcy5iPXUoTHIodCksODMpfWZ1bmN0aW9uIHlWdCh0KXt0aGlzLmE9dShMcih0KSw4Myl9ZnVuY3Rpb24gT20odCl7dGhpcy5hPXUoTHIodCksMTUpfWZ1bmN0aW9uIHhWdCh0KXt0aGlzLmE9dShMcih0KSwxNSl9ZnVuY3Rpb24gTlIodCl7dGhpcy5iPXUoTHIodCksNDcpfWZ1bmN0aW9uIEJSKCl7dGhpcy5xPW5ldyBiLkRhdGV9ZnVuY3Rpb24gR2QoKXtHZD1aLHZFdD1uZXcgQ3R9ZnVuY3Rpb24gaDgoKXtoOD1aLGE3PW5ldyBPdH1mdW5jdGlvbiBIQyh0KXtyZXR1cm4gdC5mLmMrdC5nLmN9ZnVuY3Rpb24geU0odCxlKXtyZXR1cm4gdC5iLkhjKGUpfWZ1bmN0aW9uIGtWdCh0LGUpe3JldHVybiB0LmIuSWMoZSl9ZnVuY3Rpb24gRVZ0KHQsZSl7cmV0dXJuIHQuYi5RYyhlKX1mdW5jdGlvbiBUVnQodCxlKXtyZXR1cm4gdC5iLkhjKGUpfWZ1bmN0aW9uIENWdCh0LGUpe3JldHVybiB0LmMudWMoZSl9ZnVuY3Rpb24gSTAodCxlKXtyZXR1cm4gdC5hLl9iKGUpfWZ1bmN0aW9uIF9WdCh0LGUpe3JldHVybiB5aSh0LmMsZSl9ZnVuY3Rpb24gU1Z0KHQsZSl7cmV0dXJuIFRsKHQuYixlKX1mdW5jdGlvbiBBVnQodCxlKXtyZXR1cm4gdD5lJiZlPERffWZ1bmN0aW9uIHVYZSh0LGUpe3JldHVybiB0LkdjKGUpLHR9ZnVuY3Rpb24gbFhlKHQsZSl7cmV0dXJuIFVhKHQsZSksdH1mdW5jdGlvbiBoWGUodCl7cmV0dXJuIHdYdCgpLHQ/TmdlOkZnZX1mdW5jdGlvbiBMeCh0KXtkcmUuY2FsbCh0aGlzLHQsMCl9ZnVuY3Rpb24gTFZ0KCl7WW50LmNhbGwodGhpcyxudWxsKX1mdW5jdGlvbiBtYnQoKXtYcnQuY2FsbCh0aGlzLG51bGwpfWZ1bmN0aW9uIE14KHQpe3RoaXMuYz10LGNlZSh0aGlzKX1mdW5jdGlvbiBaaSgpeyRVdCh0aGlzKSxBaCh0aGlzKX1mdW5jdGlvbiBscyh0LGUpe1ZwKHQpLHQuYS5OYihlKX1mdW5jdGlvbiBNVnQodCxlKXtyZXR1cm4gdC5HYyhlKSx0fWZ1bmN0aW9uIGZYZSh0LGUpe3JldHVybiB0LmEuZj1lLHR9ZnVuY3Rpb24gRFZ0KHQsZSl7cmV0dXJuIHQuYS5kPWUsdH1mdW5jdGlvbiBJVnQodCxlKXtyZXR1cm4gdC5hLmc9ZSx0fWZ1bmN0aW9uIE9WdCh0LGUpe3JldHVybiB0LmEuaj1lLHR9ZnVuY3Rpb24gY2YodCxlKXtyZXR1cm4gdC5hLmE9ZSx0fWZ1bmN0aW9uIHVmKHQsZSl7cmV0dXJuIHQuYS5kPWUsdH1mdW5jdGlvbiBsZih0LGUpe3JldHVybiB0LmEuZT1lLHR9ZnVuY3Rpb24gaGYodCxlKXtyZXR1cm4gdC5hLmc9ZSx0fWZ1bmN0aW9uIHhNKHQsZSl7cmV0dXJuIHQuYS5mPWUsdH1mdW5jdGlvbiBkWGUodCl7cmV0dXJuIHQuYj0hMSx0fWZ1bmN0aW9uIGY4KCl7Zjg9WixNRXQ9bmV3IGdVdH1mdW5jdGlvbiBSUigpe1JSPVosS2dlPW5ldyBwVXR9ZnVuY3Rpb24gZDgoKXtkOD1aLE5FdD1uZXcgUGV9ZnVuY3Rpb24gUFZ0KCl7UFZ0PVosS2JlPW5ldyB2bX1mdW5jdGlvbiBqUigpe2pSPVosS3V0PW5ldyBfV3R9ZnVuY3Rpb24gUWIoKXtRYj1aLG83PW5ldyBwbn1mdW5jdGlvbiBWQygpe1ZDPVosUWJlPW5ldyBUTH1mdW5jdGlvbiBGVnQoKXtGVnQ9WixzcGU9bmV3IFBvfWZ1bmN0aW9uIHlidCgpe3lidD1aLFJiZT1uZXcgZnd9ZnVuY3Rpb24ga00oKXtrTT1aLHQyZT1uZXcgQ2F9ZnVuY3Rpb24gTlZ0KCl7TlZ0PVosamJlPW5ldyBFTH1mdW5jdGlvbiB4YnQoKXt4YnQ9WiwkYmU9bmV3IERLdH1mdW5jdGlvbiBrYnQoKXtrYnQ9WixPN3Q9bmV3IHdtfWZ1bmN0aW9uIEVNKCl7RU09WixlMmU9bmV3IE5UfWZ1bmN0aW9uIEJWdCgpe0JWdD1aLHMyZT1uZXcgZHd9ZnVuY3Rpb24gR0MoKXtHQz1aLGgyZT1uZXcgUlh9ZnVuY3Rpb24gJFIoKXskUj1aLEg0PW5ldyBLWH1mdW5jdGlvbiBSVnQoKXtSVnQ9WixPeWU9bmV3IFZzfWZ1bmN0aW9uIHpSKCl7elI9WixKaHQ9bmV3ICRWdH1mdW5jdGlvbiBxUigpe3FSPVosdGZ0PW5ldyAkV3R9ZnVuY3Rpb24gVUMoKXtVQz1aLFZPPW5ldyBNWHR9ZnVuY3Rpb24gSFIoKXtIUj1aLGVtZT1uZXcgUVp9ZnVuY3Rpb24galZ0KCl7YW5lKCksdGhpcy5jPW5ldyB3ZXR9ZnVuY3Rpb24gJFZ0KCl7VnIuY2FsbCh0aGlzLEExZSwwKX1mdW5jdGlvbiBNdyh0LGUpe20yKHQuYy5iLGUuYyxlKX1mdW5jdGlvbiBXQyh0LGUpe20yKHQuYy5jLGUuYixlKX1mdW5jdGlvbiBnWGUodCxlLG4pe2tvKHQuZCxlLmYsbil9ZnVuY3Rpb24gcFhlKHQsZSxuLHIpe0dmbih0LHIsZSxuKX1mdW5jdGlvbiBiWGUodCxlLG4scil7ZHduKHIsdCxlLG4pfWZ1bmN0aW9uIHdYZSh0LGUsbixyKXtNNW4ocix0LGUsbil9ZnVuY3Rpb24gVlIodCxlKXtyZXR1cm4gdC5hPWUuZyx0fWZ1bmN0aW9uIHpWdCh0LGUpe3JldHVybiB0ZG4odC5hLGUpfWZ1bmN0aW9uIHZYZSh0KXtyZXR1cm4gdC5iP3QuYjp0LmF9ZnVuY3Rpb24gbVhlKHQpe3JldHVybih0LmMrdC5hKS8yfWZ1bmN0aW9uIFBtKCl7UG09WixINGU9bmV3IGVKfWZ1bmN0aW9uIHFWdCgpe3FWdD1aLFE0ZT1uZXcgbkp9ZnVuY3Rpb24gSFZ0KCl7SFZ0PVosbDVlPW5ldyBCcXR9ZnVuY3Rpb24gVlZ0KCl7VlZ0PVosaDVlPW5ldyBScXR9ZnVuY3Rpb24gUHAoKXtQcD1aLFloPW5ldyBVcHR9ZnVuY3Rpb24gRWJ0KCl7RWJ0PVosc0x0PW5ldyB6cXR9ZnVuY3Rpb24gWUMoKXtZQz1aLFJmdD1uZXcgVVV0fWZ1bmN0aW9uIE1nKCl7TWc9WixiUD1uZXcgV1V0fWZ1bmN0aW9uIFRldCgpe1RldD1aLEM1ZT1uZXcgX0p9ZnVuY3Rpb24gdG8oKXt0bz1aLFM1ZT1uZXcgU0p9ZnVuY3Rpb24gR1IoKXtHUj1aLGRVPW5ldyBfcn1mdW5jdGlvbiBUYnQoKXtUYnQ9WixiTHQ9bmV3IGhlfWZ1bmN0aW9uIEZwKCl7RnA9WixJYj1uZXcgekp9ZnVuY3Rpb24geVhlKHQpe2IuY2xlYXJUaW1lb3V0KHQpfWZ1bmN0aW9uIENidCh0KXt0aGlzLmE9dShMcih0KSwyMjQpfWZ1bmN0aW9uIFVSKHQpe3JldHVybiB1KHQsNDIpLmNkKCl9ZnVuY3Rpb24gVE0odCl7cmV0dXJuIHQuYjx0LmQuZ2MoKX1mdW5jdGlvbiBHVnQodCxlKXtyZXR1cm4gem50KHQuYSxlKX1mdW5jdGlvbiBVVnQodCxlKXtyZXR1cm4geWModCxlKT4wfWZ1bmN0aW9uIENldCh0LGUpe3JldHVybiB5Yyh0LGUpPDB9ZnVuY3Rpb24gS0ModCxlKXtyZXR1cm4gdC5hLmdldChlKX1mdW5jdGlvbiB4WGUodCxlKXtyZXR1cm4gZS5zcGxpdCh0KX1mdW5jdGlvbiBXVnQodCxlKXtyZXR1cm4gVGwodC5lLGUpfWZ1bmN0aW9uIF9idCh0KXtyZXR1cm4gT24odCksITF9ZnVuY3Rpb24gV1IodCl7X24uY2FsbCh0aGlzLHQsMjEpfWZ1bmN0aW9uIGtYZSh0LGUpe1RRdC5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBZUih0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIF9ldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFNidCh0KXtvcnQoKSxDWXQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEFidCh0LGUpe0FLdCh0LHQubGVuZ3RoLGUpfWZ1bmN0aW9uIENNKHQsZSl7clh0KHQsdC5sZW5ndGgsZSl9ZnVuY3Rpb24gRVhlKHQsZSxuKXtlLnVkKHQuYS5HZShuKSl9ZnVuY3Rpb24gVFhlKHQsZSxuKXtlLndlKHQuYS5GZShuKSl9ZnVuY3Rpb24gQ1hlKHQsZSxuKXtlLnRkKHQuYS5LYihuKSl9ZnVuY3Rpb24gX1hlKHQsZSxuKXt0Lk1iKG4pJiZlLnRkKG4pfWZ1bmN0aW9uIFhDKHQsZSxuKXt0LnNwbGljZShlLDAsbil9ZnVuY3Rpb24gU1hlKHQsZSl7cmV0dXJuIE51KHQuZSxlKX1mdW5jdGlvbiBLUih0LGUpe3RoaXMuZD10LHRoaXMuZT1lfWZ1bmN0aW9uIFlWdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIEtWdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIExidCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIFhWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFFWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFpWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIEpWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIER4KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gTWJ0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gRGJ0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gWFIodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBRUih0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIElidCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIE9idCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHozKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gQWV0KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gTGV0KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gTWV0KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gWlIodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBQYnQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBEZXQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBfTSh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEpSKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gSWV0KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gUUModCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBGYnQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBtcyh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHRqKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gdEd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gZUd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gbkd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gckd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gaUd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gc0d0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gYUd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gb0d0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gY0d0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gTmJ0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gdUd0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gbEd0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gaEd0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gZzgodCxlKXt0aGlzLmM9dCx0aGlzLmQ9ZX1mdW5jdGlvbiBmR3QodCxlKXt0aGlzLmU9dCx0aGlzLmQ9ZX1mdW5jdGlvbiBkR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBnR3QodCxlKXt0aGlzLmI9ZSx0aGlzLmM9dH1mdW5jdGlvbiBlaih0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFNNKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gT2V0KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gWkModCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBCYnQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBQZXQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBGZXQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBBTSh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFJidCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIE5ldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEpDKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gamJ0KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gdDkodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBlOSh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEZtKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gQmV0KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gUmV0KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gJGJ0KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gbjkodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBqZXQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBuaih0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIExNKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gTU0odCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBJeCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uICRldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHpidCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHpldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHFldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHFidCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEhldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFZldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEdldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFVldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEhidCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHBHdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIGJHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIHdHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIHZHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIG1HdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFZidCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEdidCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHlHdCh0LGUpe3RoaXMuYj10LHRoaXMuZD1lfWZ1bmN0aW9uIFVidCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFdidCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHhHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIGtHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIHJqKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gcjkodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBZYnQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBLYnQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBYYnQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBXZXQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBRYnQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBZZXQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBpaih0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEtldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFhldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIERNKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gUWV0KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gWmJ0KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gSU0odCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBKYnQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBBWGUodCxlKXtyZXR1cm4gTnUodC5jLGUpfWZ1bmN0aW9uIExYZSh0LGUpe3JldHVybiBOdShlLmIsdCl9ZnVuY3Rpb24gTVhlKHQsZSl7cmV0dXJuLXQuYi5KZShlKX1mdW5jdGlvbiB0MnQodCxlKXtyZXR1cm4gTnUodC5nLGUpfWZ1bmN0aW9uIE9NKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gT3godCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBFR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBUR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiAkZSh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIGk5KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gczkodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBQTSh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFpldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHNqKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gYTkodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBKZXQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBhaih0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHEzKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gRk0odCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBvOSh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIGM5KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gTk0odCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBvaih0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEgzKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gY2oodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBDR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBfR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBTR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBBR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBMR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBNR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBmYSh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIHVqKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gREd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gSUd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gT0d0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gUEd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gRkd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gTkd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gQkd0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gUkd0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gakd0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gJEd0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gekd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gcUd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gRFhlKHQsZSl7b3duKHQuYSx1KGUsNTYpKX1mdW5jdGlvbiBIR3QodCxlKXttb24odC5hLHUoZSwxMSkpfWZ1bmN0aW9uIElYZSh0LGUpe3JldHVybiBrOCgpLGUhPXR9ZnVuY3Rpb24gVkd0KCl7cmV0dXJuIHBIdCgpLG5ldyBXZ2V9ZnVuY3Rpb24gR0d0KCl7X3J0KCksdGhpcy5iPW5ldyBIc31mdW5jdGlvbiBVR3QoKXtrcSgpLHRoaXMuYT1uZXcgSHN9ZnVuY3Rpb24gV0d0KCl7VXZ0KCksZXZ0LmNhbGwodGhpcyl9ZnVuY3Rpb24gUHgodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBZR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBLR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBsaih0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFhHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFFHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFpHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIEpHdCh0LGUpe3RoaXMuZD10LHRoaXMuYj1lfWZ1bmN0aW9uIGUydCh0LGUpe3RoaXMuZD10LHRoaXMuZT1lfWZ1bmN0aW9uIHRVdCh0LGUpe3RoaXMuZj10LHRoaXMuYz1lfWZ1bmN0aW9uIEJNKHQsZSl7dGhpcy5iPXQsdGhpcy5jPWV9ZnVuY3Rpb24gbjJ0KHQsZSl7dGhpcy5pPXQsdGhpcy5nPWV9ZnVuY3Rpb24gZVV0KHQsZSl7dGhpcy5lPXQsdGhpcy5hPWV9ZnVuY3Rpb24gblV0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gcjJ0KHQsZSl7dC5pPW51bGwsZnoodCxlKX1mdW5jdGlvbiBPWGUodCxlKXt0JiZraShkUCx0LGUpfWZ1bmN0aW9uIHJVdCh0LGUpe3JldHVybiBpc3QodC5hLGUpfWZ1bmN0aW9uIGhqKHQpe3JldHVybiBYRCh0LmMsdC5iKX1mdW5jdGlvbiBlYyh0KXtyZXR1cm4gdD90LmRkKCk6bnVsbH1mdW5jdGlvbiBWdCh0KXtyZXR1cm4gdD8/bnVsbH1mdW5jdGlvbiBObSh0KXtyZXR1cm4gdHlwZW9mIHQ9PT1iNn1mdW5jdGlvbiBCbSh0KXtyZXR1cm4gdHlwZW9mIHQ9PT1OeHR9ZnVuY3Rpb24gcmEodCl7cmV0dXJuIHR5cGVvZiB0PT09VmF0fWZ1bmN0aW9uIE5wKHQsZSl7cmV0dXJuIHQuSGQoKS5YYihlKX1mdW5jdGlvbiBmaih0LGUpe3JldHVybiBLY24odC5LYygpLGUpfWZ1bmN0aW9uIER3KHQsZSl7cmV0dXJuIHljKHQsZSk9PTB9ZnVuY3Rpb24gUFhlKHQsZSl7cmV0dXJuIHljKHQsZSk+PTB9ZnVuY3Rpb24gdTkodCxlKXtyZXR1cm4geWModCxlKSE9MH1mdW5jdGlvbiBGWGUodCl7cmV0dXJuIiIrKE9uKHQpLHQpfWZ1bmN0aW9uIFJNKHQsZSl7cmV0dXJuIHQuc3Vic3RyKGUpfWZ1bmN0aW9uIGlVdCh0KXtyZXR1cm4gY2wodCksdC5kLmdjKCl9ZnVuY3Rpb24gdG50KHQpe3JldHVybiBEYm4odCx0LmMpLHR9ZnVuY3Rpb24gZGoodCl7cmV0dXJuIGs5KHQ9PW51bGwpLHR9ZnVuY3Rpb24gbDkodCxlKXtyZXR1cm4gdC5hKz0iIitlLHR9ZnVuY3Rpb24gZ28odCxlKXtyZXR1cm4gdC5hKz0iIitlLHR9ZnVuY3Rpb24gaDkodCxlKXtyZXR1cm4gdC5hKz0iIitlLHR9ZnVuY3Rpb24gaGModCxlKXtyZXR1cm4gdC5hKz0iIitlLHR9ZnVuY3Rpb24gR3IodCxlKXtyZXR1cm4gdC5hKz0iIitlLHR9ZnVuY3Rpb24gaTJ0KHQsZSl7cmV0dXJuIHQuYSs9IiIrZSx0fWZ1bmN0aW9uIHNVdCh0LGUpe2ZzKHQsZSx0LmEsdC5hLmEpfWZ1bmN0aW9uIFpiKHQsZSl7ZnModCxlLHQuYy5iLHQuYyl9ZnVuY3Rpb24gTlhlKHQsZSxuKXtnYWUoZSxXc3QodCxuKSl9ZnVuY3Rpb24gQlhlKHQsZSxuKXtnYWUoZSxXc3QodCxuKSl9ZnVuY3Rpb24gUlhlKHQsZSl7TW9uKG5ldyBucih0KSxlKX1mdW5jdGlvbiBhVXQodCxlKXt0LnEuc2V0VGltZShZdyhlKSl9ZnVuY3Rpb24gb1V0KHQsZSl7bHZ0LmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIGNVdCh0LGUpe2x2dC5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBlbnQodCxlKXtsdnQuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gdVV0KHQpe1h1KHRoaXMpLFk5KHRoaXMsdCl9ZnVuY3Rpb24gczJ0KHQpe3JldHVybiBBbih0LDApLG51bGx9ZnVuY3Rpb24gR2YodCl7cmV0dXJuIHQuYT0wLHQuYj0wLHR9ZnVuY3Rpb24gbFV0KHQsZSl7cmV0dXJuIHQuYT1lLmcrMSx0fWZ1bmN0aW9uIGpYZSh0LGUpe3JldHVybiB0LmpbZS5wXT09Mn1mdW5jdGlvbiBhMnQodCl7cmV0dXJuIHhubih1KHQsNzkpKX1mdW5jdGlvbiBoVXQoKXtoVXQ9Wix6cGU9V3IobHN0KCkpfWZ1bmN0aW9uIGZVdCgpe2ZVdD1aLGkyZT1XcihZY2UoKSl9ZnVuY3Rpb24gZFV0KCl7dGhpcy5iPW5ldyBMeCh0eSgxMikpfWZ1bmN0aW9uIGdVdCgpe3RoaXMuYj0wLHRoaXMuYT0hMX1mdW5jdGlvbiBwVXQoKXt0aGlzLmI9MCx0aGlzLmE9ITF9ZnVuY3Rpb24gZjkodCl7dGhpcy5hPXQscEMuY2FsbCh0aGlzKX1mdW5jdGlvbiBiVXQodCl7dGhpcy5hPXQscEMuY2FsbCh0aGlzKX1mdW5jdGlvbiBtbih0LGUpe1BzLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIG5udCh0LGUpe3FtLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFYzKHQsZSl7bjJ0LmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHJudCh0LGUpe3RFLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHdVdCh0LGUpe2pNLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIGlpKHQsZSl7R1IoKSxraShkVSx0LGUpfWZ1bmN0aW9uIGludCh0LGUpe3JldHVybiBQbCh0LmEsMCxlKX1mdW5jdGlvbiB2VXQodCxlKXtyZXR1cm4gdC5hLmEuYS5jYyhlKX1mdW5jdGlvbiBtVXQodCxlKXtyZXR1cm4gVnQodCk9PT1WdChlKX1mdW5jdGlvbiAkWGUodCxlKXtyZXR1cm4gTXModC5hLGUuYSl9ZnVuY3Rpb24gelhlKHQsZSl7cmV0dXJuIHB1KHQuYSxlLmEpfWZ1bmN0aW9uIHFYZSh0LGUpe3JldHVybiB0WHQodC5hLGUuYSl9ZnVuY3Rpb24gaGQodCxlKXtyZXR1cm4gdC5pbmRleE9mKGUpfWZ1bmN0aW9uIEl3KHQsZSl7cmV0dXJuIHQ9PWU/MDp0PzE6LTF9ZnVuY3Rpb24gZ2oodCl7cmV0dXJuIHQ8MTA/IjAiK3Q6IiIrdH1mdW5jdGlvbiBIWGUodCl7cmV0dXJuIExyKHQpLG5ldyBmOSh0KX1mdW5jdGlvbiB5VXQodCl7cmV0dXJuIGl1KHQubCx0Lm0sdC5oKX1mdW5jdGlvbiBwOCh0KXtyZXR1cm4gcHMoKE9uKHQpLHQpKX1mdW5jdGlvbiBWWGUodCl7cmV0dXJuIHBzKChPbih0KSx0KSl9ZnVuY3Rpb24geFV0KHQsZSl7cmV0dXJuIHB1KHQuZyxlLmcpfWZ1bmN0aW9uIEJvKHQpe3JldHVybiB0eXBlb2YgdD09PU54dH1mdW5jdGlvbiBHWGUodCl7cmV0dXJuIHQ9PUx2fHx0PT1GeX1mdW5jdGlvbiBVWGUodCl7cmV0dXJuIHQ9PUx2fHx0PT1QeX1mdW5jdGlvbiBvMnQodCl7cmV0dXJuIFJvKHQuYi5iLHQsMCl9ZnVuY3Rpb24ga1V0KHQpe3RoaXMuYT1WR3QoKSx0aGlzLmI9dH1mdW5jdGlvbiBFVXQodCl7dGhpcy5hPVZHdCgpLHRoaXMuYj10fWZ1bmN0aW9uIFdYZSh0LGUpe3JldHVybiBsZSh0LmEsZSksZX1mdW5jdGlvbiBZWGUodCxlKXtyZXR1cm4gbGUodC5jLGUpLHR9ZnVuY3Rpb24gVFV0KHQsZSl7cmV0dXJuICRsKHQuYSxlKSx0fWZ1bmN0aW9uIEtYZSh0LGUpe3JldHVybiBkZigpLGUuYSs9dH1mdW5jdGlvbiBYWGUodCxlKXtyZXR1cm4gZGYoKSxlLmErPXR9ZnVuY3Rpb24gUVhlKHQsZSl7cmV0dXJuIGRmKCksZS5jKz10fWZ1bmN0aW9uIGMydCh0LGUpeyQ4KHQsMCx0Lmxlbmd0aCxlKX1mdW5jdGlvbiBPMCgpe2t0LmNhbGwodGhpcyxuZXcgYTIpfWZ1bmN0aW9uIENVdCgpe1dqLmNhbGwodGhpcywwLDAsMCwwKX1mdW5jdGlvbiBGeCgpe2FoLmNhbGwodGhpcywwLDAsMCwwKX1mdW5jdGlvbiB4byh0KXt0aGlzLmE9dC5hLHRoaXMuYj10LmJ9ZnVuY3Rpb24gQnAodCl7cmV0dXJuIHQ9PXpofHx0PT1DZn1mdW5jdGlvbiBiOCh0KXtyZXR1cm4gdD09cmd8fHQ9PW5nfWZ1bmN0aW9uIF9VdCh0KXtyZXR1cm4gdD09bjV8fHQ9PWU1fWZ1bmN0aW9uIEczKHQpe3JldHVybiB0IT1HMSYmdCE9VGJ9ZnVuY3Rpb24geGwodCl7cmV0dXJuIHQuTGcoKSYmdC5NZygpfWZ1bmN0aW9uIFNVdCh0KXtyZXR1cm4gdSQodSh0LDExOCkpfWZ1bmN0aW9uIHBqKHQpe3JldHVybiAkbChuZXcgVnMsdCl9ZnVuY3Rpb24gQVV0KHQsZSl7cmV0dXJuIG5ldyB0RShlLHQpfWZ1bmN0aW9uIFpYZSh0LGUpe3JldHVybiBuZXcgdEUoZSx0KX1mdW5jdGlvbiB1MnQodCxlLG4pe2l6KHQsZSksc3oodCxuKX1mdW5jdGlvbiBiaih0LGUsbil7dHYodCxlKSxKdyh0LG4pfWZ1bmN0aW9uIHgxKHQsZSxuKXtrdSh0LGUpLEV1KHQsbil9ZnVuY3Rpb24gd2oodCxlLG4pe1Y4KHQsZSksVTgodCxuKX1mdW5jdGlvbiB2aih0LGUsbil7RzgodCxlKSxXOCh0LG4pfWZ1bmN0aW9uIHNudCh0LGUpe2FFKHQsZSksWTgodCx0LkQpfWZ1bmN0aW9uIGwydCh0KXt0VXQuY2FsbCh0aGlzLHQsITApfWZ1bmN0aW9uIExVdCh0LGUsbil7SjJ0LmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gUnAodCl7cmIoKSxKY24uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIE1VdCgpe1lSLmNhbGwodGhpcywiSGVhZCIsMSl9ZnVuY3Rpb24gRFV0KCl7WVIuY2FsbCh0aGlzLCJUYWlsIiwzKX1mdW5jdGlvbiBhbnQodCl7dC5jPU50KFFuLERlLDEsMCw1LDEpfWZ1bmN0aW9uIElVdCh0KXt0LmE9TnQoUW4sRGUsMSw4LDUsMSl9ZnVuY3Rpb24gT1V0KHQpe3h1KHQueGYoKSxuZXcgdXIodCkpfWZ1bmN0aW9uIFUzKHQpe3JldHVybiB0IT1udWxsP0hpKHQpOjB9ZnVuY3Rpb24gSlhlKHQsZSl7cmV0dXJuIGV5KGUsVDEodCkpfWZ1bmN0aW9uIHRRZSh0LGUpe3JldHVybiBleShlLFQxKHQpKX1mdW5jdGlvbiBlUWUodCxlKXtyZXR1cm4gdFt0Lmxlbmd0aF09ZX1mdW5jdGlvbiBuUWUodCxlKXtyZXR1cm4gdFt0Lmxlbmd0aF09ZX1mdW5jdGlvbiBoMnQodCl7cmV0dXJuIGVlbih0LmIuS2MoKSx0LmEpfWZ1bmN0aW9uIHJRZSh0LGUpe3JldHVybiBoeihzcnQodC5kKSxlKX1mdW5jdGlvbiBpUWUodCxlKXtyZXR1cm4gaHooc3J0KHQuZyksZSl9ZnVuY3Rpb24gc1FlKHQsZSl7cmV0dXJuIGh6KHNydCh0LmopLGUpfWZ1bmN0aW9uIGVvKHQsZSl7UHMuY2FsbCh0aGlzLHQuYixlKX1mdW5jdGlvbiBPdyh0KXtXai5jYWxsKHRoaXMsdCx0LHQsdCl9ZnVuY3Rpb24gZjJ0KHQpe3JldHVybiB0LmImJlNhdCh0KSx0LmF9ZnVuY3Rpb24gZDJ0KHQpe3JldHVybiB0LmImJlNhdCh0KSx0LmN9ZnVuY3Rpb24gYVFlKHQsZSl7JDF8fCh0LmI9ZSl9ZnVuY3Rpb24gb250KHQsZSxuKXtyZXR1cm4gdHModCxlLG4pLG59ZnVuY3Rpb24gUFV0KHQsZSxuKXt0cyh0LmNbZS5nXSxlLmcsbil9ZnVuY3Rpb24gb1FlKHQsZSxuKXt1KHQuYyw2OSkuWGgoZSxuKX1mdW5jdGlvbiBjUWUodCxlLG4pe3gxKG4sbi5pK3Qsbi5qK2UpfWZ1bmN0aW9uIHVRZSh0LGUpe0RyKExjKHQuYSksWVF0KGUpKX1mdW5jdGlvbiBsUWUodCxlKXtEcihhbCh0LmEpLEtRdChlKSl9ZnVuY3Rpb24gZDkodCl7Z2koKSx5dy5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gaFFlKHQpe3JldHVybiB0PT1udWxsPzA6SGkodCl9ZnVuY3Rpb24gRlV0KCl7RlV0PVosRGh0PW5ldyBpXyhfZnQpfWZ1bmN0aW9uIFByKCl7UHI9WixuZXcgTlV0LG5ldyBoZX1mdW5jdGlvbiBOVXQoKXtuZXcgX3IsbmV3IF9yLG5ldyBfcn1mdW5jdGlvbiBnMnQoKXtnMnQ9WixJcHQoKSxpRXQ9bmV3IF9yfWZ1bmN0aW9uIGsxKCl7azE9WixiLk1hdGgubG9nKDIpfWZ1bmN0aW9uIGloKCl7aWg9WixwMD0ocVZ0KCksUTRlKX1mdW5jdGlvbiBmUWUoKXt0aHJvdyBpdChuZXcgU2coa2dlKSl9ZnVuY3Rpb24gZFFlKCl7dGhyb3cgaXQobmV3IFNnKGtnZSkpfWZ1bmN0aW9uIGdRZSgpe3Rocm93IGl0KG5ldyBTZyhFZ2UpKX1mdW5jdGlvbiBwUWUoKXt0aHJvdyBpdChuZXcgU2coRWdlKSl9ZnVuY3Rpb24gQlV0KHQpe3RoaXMuYT10LEl3dC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gY250KHQpe3RoaXMuYT10LEZSLmNhbGwodGhpcyx0KX1mdW5jdGlvbiB1bnQodCl7dGhpcy5hPXQsRlIuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIFpzKHQsZSl7JG50KHQuYyx0LmMubGVuZ3RoLGUpfWZ1bmN0aW9uIEdvKHQpe3JldHVybiB0LmE8dC5jLmMubGVuZ3RofWZ1bmN0aW9uIHAydCh0KXtyZXR1cm4gdC5hPHQuYy5hLmxlbmd0aH1mdW5jdGlvbiBSVXQodCxlKXtyZXR1cm4gdC5hP3QuYjplLkRlKCl9ZnVuY3Rpb24gcHUodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZnVuY3Rpb24galV0KHQsZSl7cmV0dXJuIHljKHQsZSk+MD90OmV9ZnVuY3Rpb24gaXUodCxlLG4pe3JldHVybntsOnQsbTplLGg6bn19ZnVuY3Rpb24gYlFlKHQsZSl7dC5hIT1udWxsJiZIR3QoZSx0LmEpfWZ1bmN0aW9uICRVdCh0KXt0LmE9bmV3IHh0LHQuYz1uZXcgeHR9ZnVuY3Rpb24gbWoodCl7dGhpcy5iPXQsdGhpcy5hPW5ldyBoZX1mdW5jdGlvbiB6VXQodCl7dGhpcy5iPW5ldyBDZSx0aGlzLmE9dH1mdW5jdGlvbiBiMnQodCl7Y3d0LmNhbGwodGhpcyksdGhpcy5hPXR9ZnVuY3Rpb24gcVV0KCl7WVIuY2FsbCh0aGlzLCJSYW5nZSIsMil9ZnVuY3Rpb24gSFV0KCl7bDR0KCksdGhpcy5hPW5ldyB2SShJN3QpfWZ1bmN0aW9uIHdRZSh0LGUpe0xyKGUpLFEzKHQpLkpjKG5ldyBzdCl9ZnVuY3Rpb24gdlFlKHQsZSl7cmV0dXJuIEZsKCksZS5uLmIrPXR9ZnVuY3Rpb24gbVFlKHQsZSxuKXtyZXR1cm4ga2kodC5nLG4sZSl9ZnVuY3Rpb24geVFlKHQsZSxuKXtyZXR1cm4ga2kodC5rLG4sZSl9ZnVuY3Rpb24geFFlKHQsZSl7cmV0dXJuIGtpKHQuYSxlLmEsZSl9ZnVuY3Rpb24gVzModCxlLG4pe3JldHVybiBNM3QoZSxuLHQuYyl9ZnVuY3Rpb24gdzJ0KHQpe3JldHVybiBuZXcgJGUodC5jLHQuZCl9ZnVuY3Rpb24ga1FlKHQpe3JldHVybiBuZXcgJGUodC5jLHQuZCl9ZnVuY3Rpb24gbmModCl7cmV0dXJuIG5ldyAkZSh0LmEsdC5iKX1mdW5jdGlvbiBWVXQodCxlKXtyZXR1cm4gRzRuKHQuYSxlLG51bGwpfWZ1bmN0aW9uIEVRZSh0KXtPYSh0LG51bGwpLG9hKHQsbnVsbCl9ZnVuY3Rpb24gR1V0KHQpe0FydCh0LG51bGwpLExydCh0LG51bGwpfWZ1bmN0aW9uIFVVdCgpe2pNLmNhbGwodGhpcyxudWxsLG51bGwpfWZ1bmN0aW9uIFdVdCgpe1NqLmNhbGwodGhpcyxudWxsLG51bGwpfWZ1bmN0aW9uIHYydCh0KXt0aGlzLmE9dCxfci5jYWxsKHRoaXMpfWZ1bmN0aW9uIFRRZSh0KXt0aGlzLmI9KHduKCksbmV3IHEodCkpfWZ1bmN0aW9uIHlqKHQpe3Quaj1OdCh3RXQsZWUsMzEwLDAsMCwxKX1mdW5jdGlvbiBDUWUodCxlLG4pe3QuYy5WYyhlLHUobiwxMzMpKX1mdW5jdGlvbiBfUWUodCxlLG4pe3QuYy5qaShlLHUobiwxMzMpKX1mdW5jdGlvbiBZVXQodCxlKXt4cih0KSx0LkdjKHUoZSwxNSkpfWZ1bmN0aW9uIGc5KHQsZSl7cmV0dXJuIG80bih0LmMsdC5iLGUpfWZ1bmN0aW9uIFNRZSh0LGUpe3JldHVybiBuZXcgYld0KHQuS2MoKSxlKX1mdW5jdGlvbiBsbnQodCxlKXtyZXR1cm4gX3VuKHQuS2MoKSxlKSE9LTF9ZnVuY3Rpb24gbTJ0KHQsZSl7cmV0dXJuIHQuYS5CYyhlKSE9bnVsbH1mdW5jdGlvbiB4aih0KXtyZXR1cm4gdC5PYigpP3QuUGIoKTpudWxsfWZ1bmN0aW9uIEtVdCh0KXtyZXR1cm4gTWgodCwwLHQubGVuZ3RoKX1mdW5jdGlvbiBfdCh0LGUpe3JldHVybiB0IT1udWxsJiZnc3QodCxlKX1mdW5jdGlvbiBBUWUodCxlKXt0LnEuc2V0SG91cnMoZSksRV8odCxlKX1mdW5jdGlvbiBYVXQodCxlKXt0LmMmJihId3QoZSksa1F0KGUpKX1mdW5jdGlvbiBMUWUodCxlLG4pe3UodC5LYihuKSwxNjQpLk5iKGUpfWZ1bmN0aW9uIE1RZSh0LGUsbil7cmV0dXJuIFI0bih0LGUsbiksbn1mdW5jdGlvbiBRVXQodCxlLG4pe3QuYT1lXjE1MDIsdC5iPW5eRW90fWZ1bmN0aW9uIGhudCh0LGUsbil7cmV0dXJuIHQuYVtlLmddW24uZ119ZnVuY3Rpb24gRTEodCxlKXtyZXR1cm4gdC5hW2UuYy5wXVtlLnBdfWZ1bmN0aW9uIERRZSh0LGUpe3JldHVybiB0LmVbZS5jLnBdW2UucF19ZnVuY3Rpb24gSVFlKHQsZSl7cmV0dXJuIHQuY1tlLmMucF1bZS5wXX1mdW5jdGlvbiBPUWUodCxlKXtyZXR1cm4gdC5qW2UucF09cTJuKGUpfWZ1bmN0aW9uIFBRZSh0LGUpe3JldHVybiBrbXQodC5mLGUudGcoKSl9ZnVuY3Rpb24gRlFlKHQsZSl7cmV0dXJuIGttdCh0LmIsZS50ZygpKX1mdW5jdGlvbiBOUWUodCxlKXtyZXR1cm4gdC5hPG13dChlKT8tMToxfWZ1bmN0aW9uIEJRZSh0LGUsbil7cmV0dXJuIG4/ZSE9MDplIT10LTF9ZnVuY3Rpb24gUlFlKHQsZSxuKXtyZXR1cm4gdC5hPWUsdC5iPW4sdH1mdW5jdGlvbiBmZCh0LGUpe3JldHVybiB0LmEqPWUsdC5iKj1lLHR9ZnVuY3Rpb24gcDkodCxlLG4pe3JldHVybiB0cyh0LmcsZSxuKSxufWZ1bmN0aW9uIGpRZSh0LGUsbixyKXt0cyh0LmFbZS5nXSxuLmcscil9ZnVuY3Rpb24gJFFlKHQsZSl7am0oZSx0LmEuYS5hLHQuYS5hLmIpfWZ1bmN0aW9uIFpVdCh0KXt0LmE9dShEbih0LmIuYSw0KSwxMjYpfWZ1bmN0aW9uIEpVdCh0KXt0LmE9dShEbih0LmIuYSw0KSwxMjYpfWZ1bmN0aW9uIHpRZSh0KXtzRCh0LFhkZSksb2F0KHQscTVuKHQpKX1mdW5jdGlvbiB3OCgpe3c4PVosaVY9bmV3IENSKG51bGwpfWZ1bmN0aW9uIHkydCgpe3kydD1aLHkydCgpLFhnZT1uZXcgc2V9ZnVuY3Rpb24geDJ0KCl7dGhpcy5CYnw9MjU2LHRoaXMuQmJ8PTUxMn1mdW5jdGlvbiBucih0KXt0aGlzLmk9dCx0aGlzLmY9dGhpcy5pLmp9ZnVuY3Rpb24gQXModCxlLG4pe1pNLmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24ga2oodCxlLG4pe0FzLmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gRnUodCxlLG4pe0FzLmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gdFd0KHQsZSxuKXtrai5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIGsydCh0LGUsbil7Wk0uY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBZMyh0LGUsbil7Wk0uY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBFMnQodCxlLG4pe1JqLmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gZVd0KHQsZSxuKXtSai5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIG5XdCh0LGUsbil7RTJ0LmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gcld0KHQsZSxuKXtrMnQuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBLMyh0LGUpe3RoaXMuYT10LEZSLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBpV3QodCxlKXt0aGlzLmE9dCxiZXQuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIHNXdCh0LGUpe3RoaXMuYT10LGJldC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gYVd0KHQsZSl7dGhpcy5hPXQsYmV0LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBUMnQodCl7dGhpcy5hPXQsd3R0LmNhbGwodGhpcyx0LmQpfWZ1bmN0aW9uIGpwKHQpe3RoaXMuYz10LHRoaXMuYT10aGlzLmMuYX1mdW5jdGlvbiBDMnQodCxlKXt0aGlzLmE9ZSxiZXQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIG9XdCh0LGUpe3RoaXMuYT1lLCRydC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gY1d0KHQsZSl7dGhpcy5hPXQsJHJ0LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBxUWUodCxlKXtyZXR1cm4gY3Z0KEdudCh0LmMpKS5YYihlKX1mdW5jdGlvbiBfMnQodCxlKXtyZXR1cm4gcmhuKHQsbmV3IE1wLGUpLmF9ZnVuY3Rpb24gbHIodCxlKXtyZXR1cm4gTHIoZSksbmV3IHVXdCh0LGUpfWZ1bmN0aW9uIHVXdCh0LGUpe3RoaXMuYT1lLE5SLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBTMnQodCl7dGhpcy5iPXQsdGhpcy5hPXRoaXMuYi5hLmV9ZnVuY3Rpb24gbFd0KHQpe3QuYi5RYigpLC0tdC5kLmYuZCxLaih0LmQpfWZ1bmN0aW9uIGhXdCh0KXt4Qy5jYWxsKHRoaXMsdShMcih0KSwzNSkpfWZ1bmN0aW9uIGZXdCh0KXt4Qy5jYWxsKHRoaXMsdShMcih0KSwzNSkpfWZ1bmN0aW9uIGRXdCgpe1ZyLmNhbGwodGhpcywiSU5TVEFOQ0UiLDApfWZ1bmN0aW9uIEEydCh0KXtpZighdCl0aHJvdyBpdChuZXcgZ00pfWZ1bmN0aW9uIEwydCh0KXtpZighdCl0aHJvdyBpdChuZXcgT3UpfWZ1bmN0aW9uIE0ydCh0KXtpZighdCl0aHJvdyBpdChuZXcgbGMpfWZ1bmN0aW9uIGdXdCgpe2dXdD1aLFRldCgpLF81ZT1uZXcgdFJ9ZnVuY3Rpb24gTm4oKXtObj1aLEYyPSExLHI3PSEwfWZ1bmN0aW9uIF9oKHQpe3l4LmNhbGwodGhpcywoT24odCksdCkpfWZ1bmN0aW9uIE9sKHQpe3l4LmNhbGwodGhpcywoT24odCksdCkpfWZ1bmN0aW9uIEVqKHQpe1QuY2FsbCh0aGlzLHQpLHRoaXMuYT10fWZ1bmN0aW9uIEQydCh0KXtMLmNhbGwodGhpcyx0KSx0aGlzLmE9dH1mdW5jdGlvbiBJMnQodCl7czguY2FsbCh0aGlzLHQpLHRoaXMuYT10fWZ1bmN0aW9uIHBXdCgpe3lqKHRoaXMpLGQkKHRoaXMpLHRoaXMuX2QoKX1mdW5jdGlvbiBiV3QodCxlKXt0aGlzLmE9ZSxOUi5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gd1d0KHQsZSl7cmV0dXJuIG5ldyBob2UodC5hLHQuYixlKX1mdW5jdGlvbiBUaih0LGUpe3JldHVybiB0Lmxhc3RJbmRleE9mKGUpfWZ1bmN0aW9uIE8ydCh0LGUsbil7cmV0dXJuIHQuaW5kZXhPZihlLG4pfWZ1bmN0aW9uIGI5KHQpe3JldHVybiB0PT1udWxsP191OiRvKHQpfWZ1bmN0aW9uIEhRZSh0KXtyZXR1cm4gdD09bnVsbD9udWxsOnQubmFtZX1mdW5jdGlvbiBQMnQodCl7cmV0dXJuIHQuYSE9bnVsbD90LmE6bnVsbH1mdW5jdGlvbiBWUWUodCl7cmV0dXJuIE9SKHQuYSk/SlF0KHQpOm51bGx9ZnVuY3Rpb24gZm50KHQsZSl7cmV0dXJuIFA5KHQuYSxlKSE9bnVsbH1mdW5jdGlvbiBOdSh0LGUpe3JldHVybiEhZSYmdC5iW2UuZ109PWV9ZnVuY3Rpb24gUHcodCl7cmV0dXJuIHQuJEh8fCh0LiRIPSsrcjZuKX1mdW5jdGlvbiBHUWUodCl7cmV0dXJuIHQubCt0Lm0qbTYrdC5oKkMyfWZ1bmN0aW9uIHZXdCh0LGUpe3JldHVybiBsZShlLmEsdC5hKSx0LmF9ZnVuY3Rpb24gbVd0KHQsZSl7cmV0dXJuIGxlKGUuYix0LmEpLHQuYX1mdW5jdGlvbiBGdyh0LGUpe3JldHVybiBsZShlLmEsdC5hKSx0LmF9ZnVuY3Rpb24gTncodCl7cmV0dXJuIFpuKHQuYSE9bnVsbCksdC5hfWZ1bmN0aW9uIGRudCh0KXtrdC5jYWxsKHRoaXMsbmV3IE1tdCh0KSl9ZnVuY3Rpb24gRjJ0KHQsZSl7TjN0LmNhbGwodGhpcyx0LGUsbnVsbCl9ZnVuY3Rpb24gdzkodCl7dGhpcy5hPXQseC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gQ2ooKXtDaj1aLHVWPW5ldyBQcyhYZmUsMCl9ZnVuY3Rpb24gX2oodCxlKXtyZXR1cm4rK3QuYixsZSh0LmEsZSl9ZnVuY3Rpb24gTjJ0KHQsZSl7cmV0dXJuKyt0LmIsbXUodC5hLGUpfWZ1bmN0aW9uIFVRZSh0LGUpe3JldHVybiBNcyh0Lm4uYSxlLm4uYSl9ZnVuY3Rpb24gV1FlKHQsZSl7cmV0dXJuIE1zKHQuYy5kLGUuYy5kKX1mdW5jdGlvbiBZUWUodCxlKXtyZXR1cm4gTXModC5jLmMsZS5jLmMpfWZ1bmN0aW9uIGJ1KHQsZSl7cmV0dXJuIHUoQWkodC5iLGUpLDE1KX1mdW5jdGlvbiBLUWUodCxlKXtyZXR1cm4gdC5uLmI9KE9uKGUpLGUpfWZ1bmN0aW9uIFhRZSh0LGUpe3JldHVybiB0Lm4uYj0oT24oZSksZSl9ZnVuY3Rpb24gdjkodCl7cmV0dXJuIEdvKHQuYSl8fEdvKHQuYil9ZnVuY3Rpb24gUVFlKHQsZSxuKXtyZXR1cm4gVVp0KHQsZSxuLHQuYil9ZnVuY3Rpb24gQjJ0KHQsZSxuKXtyZXR1cm4gVVp0KHQsZSxuLHQuYyl9ZnVuY3Rpb24gUjJ0KHQsZSxuKXt1KEVEKHQsZSksMjEpLkZjKG4pfWZ1bmN0aW9uIFpRZSh0LGUsbil7V2l0KHQuYSxuKSxKeih0LmEsZSl9ZnVuY3Rpb24gak0odCxlKXtZQygpLHRoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFNqKHQsZSl7TWcoKSx0aGlzLmI9dCx0aGlzLmM9ZX1mdW5jdGlvbiBnbnQodCxlKXtWbnQoKSx0aGlzLmY9ZSx0aGlzLmQ9dH1mdW5jdGlvbiBqMnQodCxlKXtFbXQoZSx0KSx0aGlzLmQ9dCx0aGlzLmM9ZX1mdW5jdGlvbiBEZyh0KXt2YXIgZTtlPXQuYSx0LmE9dC5iLHQuYj1lfWZ1bmN0aW9uIEpRZSh0KXtyZXR1cm4gZGYoKSwhIXQmJiF0LmRjKCl9ZnVuY3Rpb24gdFplKHQpe3JldHVybiBuZXcgWG0oMyx0KX1mdW5jdGlvbiAkMnQodCxlKXtyZXR1cm4gbmV3IGJZdCh0LHQuZ2MoKSxlKX1mdW5jdGlvbiBlWmUodCl7cmV0dXJuIFRSKCksVXIoKHpRdCgpLERnZSksdCl9ZnVuY3Rpb24gTngodCl7dGhpcy5kPXQsbnIuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEJ4KHQpe3RoaXMuYz10LG5yLmNhbGwodGhpcyx0KX1mdW5jdGlvbiAkTSh0KXt0aGlzLmM9dCxOeC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24geVd0KCl7R0MoKSx0aGlzLmI9bmV3IHkxKHRoaXMpfWZ1bmN0aW9uIFVkKHQpe3JldHVybiBqbCh0LGt5KSxuZXcgWGModCl9ZnVuY3Rpb24geFd0KHQpe3JldHVybiBJOCgpLHBhcnNlSW50KHQpfHwtMX1mdW5jdGlvbiBQbCh0LGUsbil7cmV0dXJuIHQuc3Vic3RyKGUsbi1lKX1mdW5jdGlvbiB2OCh0LGUsbil7cmV0dXJuIE8ydCh0LEN1KGUpLG4pfWZ1bmN0aW9uIHBudCh0KXtyZXR1cm4geXZ0KHQuYyx0LmMubGVuZ3RoKX1mdW5jdGlvbiBuWmUodCl7cmV0dXJuIHQuZiE9bnVsbD90LmY6IiIrdC5nfWZ1bmN0aW9uIGJudCh0KXtyZXR1cm4gdC5mIT1udWxsP3QuZjoiIit0Lmd9ZnVuY3Rpb24gd250KHQpe3JldHVybiBabih0LmIhPTApLHQuYS5hLmN9ZnVuY3Rpb24gQWoodCl7cmV0dXJuIFpuKHQuYiE9MCksdC5jLmIuY31mdW5jdGlvbiB6TSh0KXtfdCh0LDE1MCkmJnUodCwxNTApLkdoKCl9ZnVuY3Rpb24gTGoodCl7cmV0dXJuIHQuYj11KFpYdCh0LmEpLDQyKX1mdW5jdGlvbiB6MnQodCl7ZjgoKSx0aGlzLmI9dCx0aGlzLmE9ITB9ZnVuY3Rpb24ga1d0KHQpe1JSKCksdGhpcy5iPXQsdGhpcy5hPSEwfWZ1bmN0aW9uIEVXdCh0KXt0LmQ9bmV3IENXdCh0KSx0LmU9bmV3IF9yfWZ1bmN0aW9uIFRXdCh0KXtpZighdCl0aHJvdyBpdChuZXcgcmgpfWZ1bmN0aW9uIHEydCh0KXtpZighdCl0aHJvdyBpdChuZXcgZ00pfWZ1bmN0aW9uIFJtKHQpe2lmKCF0KXRocm93IGl0KG5ldyBPdSl9ZnVuY3Rpb24gclplKHQpe2lmKCF0KXRocm93IGl0KG5ldyB0ZXQpfWZ1bmN0aW9uIFpuKHQpe2lmKCF0KXRocm93IGl0KG5ldyBsYyl9ZnVuY3Rpb24gQ1d0KHQpe093dC5jYWxsKHRoaXMsdCxudWxsLG51bGwpfWZ1bmN0aW9uIF9XdCgpe1ZyLmNhbGwodGhpcywiUE9MWU9NSU5PIiwwKX1mdW5jdGlvbiBTV3QodCxlLG4scil7b3Z0LmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBpWmUodCxlKXtyZXR1cm4gbmIoKSxsbih0LGUuZSxlKX1mdW5jdGlvbiBzWmUodCxlLG4pe3JldHVybiBIUigpLG4ucWcodCxlKX1mdW5jdGlvbiBVcyh0LGUpe3JldHVybiEhdC5xJiZUbCh0LnEsZSl9ZnVuY3Rpb24gYVplKHQsZSl7cmV0dXJuIHQ+MD9lKmUvdDplKmUqMTAwfWZ1bmN0aW9uIG9aZSh0LGUpe3JldHVybiB0PjA/ZS8odCp0KTplKjEwMH1mdW5jdGlvbiBjWmUodCxlLG4pe3JldHVybiBsZShlLHlpZSh0LG4pKX1mdW5jdGlvbiB1WmUodCxlLG4pe1YkKCksdC5YZShlKSYmbi50ZCh0KX1mdW5jdGlvbiBtOCh0LGUsbil7dmFyIHI7cj10LlpjKGUpLHIuUmIobil9ZnVuY3Rpb24gam0odCxlLG4pe3JldHVybiB0LmErPWUsdC5iKz1uLHR9ZnVuY3Rpb24gbFplKHQsZSxuKXtyZXR1cm4gdC5hKj1lLHQuYio9bix0fWZ1bmN0aW9uIHFNKHQsZSxuKXtyZXR1cm4gdC5hLT1lLHQuYi09bix0fWZ1bmN0aW9uIEgydCh0LGUpe3JldHVybiB0LmE9ZS5hLHQuYj1lLmIsdH1mdW5jdGlvbiBNaih0KXtyZXR1cm4gdC5hPS10LmEsdC5iPS10LmIsdH1mdW5jdGlvbiBBV3QodCl7dGhpcy5jPXQsdGhpcy5hPTEsdGhpcy5iPTF9ZnVuY3Rpb24gTFd0KHQpe3RoaXMuYz10LGt1KHQsMCksRXUodCwwKX1mdW5jdGlvbiBNV3QodCl7WmkuY2FsbCh0aGlzKSxWOSh0aGlzLHQpfWZ1bmN0aW9uIERXdCh0KXtxYXQoKSxucXQodGhpcyksdGhpcy5tZih0KX1mdW5jdGlvbiBJV3QodCxlKXtZQygpLGpNLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFYydCh0LGUpe01nKCksU2ouY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gT1d0KHQsZSl7TWcoKSxTai5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBQV3QodCxlKXtNZygpLFYydC5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBrbCh0LGUsbil7X2wuY2FsbCh0aGlzLHQsZSxuLDIpfWZ1bmN0aW9uIHZudCh0LGUpe2loKCksVWouY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gRld0KHQsZSl7aWgoKSx2bnQuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gRzJ0KHQsZSl7aWgoKSx2bnQuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gTld0KHQsZSl7aWgoKSxHMnQuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gVTJ0KHQsZSl7aWgoKSxVai5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBCV3QodCxlKXtpaCgpLFUydC5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBSV3QodCxlKXtpaCgpLFVqLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIGhaZSh0LGUpe3JldHVybiB0LmMuRmModShlLDEzMykpfWZ1bmN0aW9uIFcydCh0LGUsbil7cmV0dXJuIFBxKFREKHQsZSksbil9ZnVuY3Rpb24gZlplKHQsZSxuKXtyZXR1cm4gZS5Rayh0LmUsdC5jLG4pfWZ1bmN0aW9uIGRaZSh0LGUsbil7cmV0dXJuIGUuUmsodC5lLHQuYyxuKX1mdW5jdGlvbiBtbnQodCxlKXtyZXR1cm4gWnAodC5lLHUoZSw0OSkpfWZ1bmN0aW9uIGdaZSh0LGUsbil7bl8oYWwodC5hKSxlLEtRdChuKSl9ZnVuY3Rpb24gcFplKHQsZSxuKXtuXyhMYyh0LmEpLGUsWVF0KG4pKX1mdW5jdGlvbiBZMnQodCxlKXtlLiRtb2RDb3VudD10LiRtb2RDb3VudH1mdW5jdGlvbiBtOSgpe205PVosSFM9bmV3IFZpKCJyb290Iil9ZnVuY3Rpb24geTgoKXt5OD1aLHBQPW5ldyBQcXQsbmV3IEZxdH1mdW5jdGlvbiBqV3QoKXt0aGlzLmE9bmV3IFV3LHRoaXMuYj1uZXcgVXd9ZnVuY3Rpb24gSzJ0KCl7aW5lLmNhbGwodGhpcyksdGhpcy5CYnw9S2F9ZnVuY3Rpb24gJFd0KCl7VnIuY2FsbCh0aGlzLCJHUk9XX1RSRUUiLDApfWZ1bmN0aW9uIGJaZSh0KXtyZXR1cm4gdD09bnVsbD9udWxsOlA1bih0KX1mdW5jdGlvbiB3WmUodCl7cmV0dXJuIHQ9PW51bGw/bnVsbDpxZ24odCl9ZnVuY3Rpb24gdlplKHQpe3JldHVybiB0PT1udWxsP251bGw6JG8odCl9ZnVuY3Rpb24gbVplKHQpe3JldHVybiB0PT1udWxsP251bGw6JG8odCl9ZnVuY3Rpb24gUDAodCl7dC5vPT1udWxsJiZiMm4odCl9ZnVuY3Rpb24gUmUodCl7cmV0dXJuIGs5KHQ9PW51bGx8fE5tKHQpKSx0fWZ1bmN0aW9uIHllKHQpe3JldHVybiBrOSh0PT1udWxsfHxCbSh0KSksdH1mdW5jdGlvbiBCcih0KXtyZXR1cm4gazkodD09bnVsbHx8cmEodCkpLHR9ZnVuY3Rpb24gWDJ0KHQpe3RoaXMucT1uZXcgYi5EYXRlKFl3KHQpKX1mdW5jdGlvbiBITSh0LGUpe3RoaXMuYz10LGw4LmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIERqKHQsZSl7dGhpcy5hPXQsSE0uY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24geVplKHQsZSl7dGhpcy5kPXQsenR0KHRoaXMpLHRoaXMuYj1lfWZ1bmN0aW9uIFEydCh0LGUpe1hydC5jYWxsKHRoaXMsdCksdGhpcy5hPWV9ZnVuY3Rpb24gWjJ0KHQsZSl7WHJ0LmNhbGwodGhpcyx0KSx0aGlzLmE9ZX1mdW5jdGlvbiB4WmUodCl7QzN0LmNhbGwodGhpcywwLDApLHRoaXMuZj10fWZ1bmN0aW9uIEoydCh0LGUsbil7cSQuY2FsbCh0aGlzLHQsZSxuLG51bGwpfWZ1bmN0aW9uIHpXdCh0LGUsbil7cSQuY2FsbCh0aGlzLHQsZSxuLG51bGwpfWZ1bmN0aW9uIGtaZSh0LGUsbil7cmV0dXJuIHQudWUoZSxuKTw9MD9uOmV9ZnVuY3Rpb24gRVplKHQsZSxuKXtyZXR1cm4gdC51ZShlLG4pPD0wP2U6bn1mdW5jdGlvbiBUWmUodCxlKXtyZXR1cm4gdShYdyh0LmIsZSksMTQ5KX1mdW5jdGlvbiBDWmUodCxlKXtyZXR1cm4gdShYdyh0LmMsZSksMjI5KX1mdW5jdGlvbiB5bnQodCl7cmV0dXJuIHUoTmUodC5hLHQuYiksMjg3KX1mdW5jdGlvbiBxV3QodCl7cmV0dXJuIG5ldyAkZSh0LmMsdC5kK3QuYSl9ZnVuY3Rpb24gSFd0KHQpe3JldHVybiBGbCgpLF9VdCh1KHQsMTk3KSl9ZnVuY3Rpb24gJG0oKXskbT1aLG83dD11bigoQWwoKSxLMikpfWZ1bmN0aW9uIF9aZSh0LGUpe2UuYT9odm4odCxlKTpmbnQodC5hLGUuYil9ZnVuY3Rpb24gVld0KHQsZSl7JDF8fGxlKHQuYSxlKX1mdW5jdGlvbiBTWmUodCxlKXtyZXR1cm4ga00oKSxKOChlLmQuaSx0KX1mdW5jdGlvbiBBWmUodCxlKXtyZXR1cm4gcjYoKSxuZXcgVXVlKGUsdCl9ZnVuY3Rpb24gZGQodCxlKXtyZXR1cm4gc0QoZSxuNnQpLHQuZj1lLHR9ZnVuY3Rpb24gdHd0KHQsZSxuKXtyZXR1cm4gbj1IbCh0LGUsMyxuKSxufWZ1bmN0aW9uIGV3dCh0LGUsbil7cmV0dXJuIG49SGwodCxlLDYsbiksbn1mdW5jdGlvbiBud3QodCxlLG4pe3JldHVybiBuPUhsKHQsZSw5LG4pLG59ZnVuY3Rpb24gVk0odCxlLG4peysrdC5qLHQuS2koKSxZcnQodCxlLG4pfWZ1bmN0aW9uIEdXdCh0LGUsbil7Kyt0LmosdC5IaShlLHQub2koZSxuKSl9ZnVuY3Rpb24gVVd0KHQsZSxuKXt2YXIgcjtyPXQuWmMoZSksci5SYihuKX1mdW5jdGlvbiBXV3QodCxlLG4pe3JldHVybiBieHQodC5jLHQuYixlLG4pfWZ1bmN0aW9uIHJ3dCh0LGUpe3JldHVybihlJndpKSV0LmQubGVuZ3RofWZ1bmN0aW9uIFBzKHQsZSl7VmkuY2FsbCh0aGlzLHQpLHRoaXMuYT1lfWZ1bmN0aW9uIGl3dCh0LGUpe0NwdC5jYWxsKHRoaXMsdCksdGhpcy5hPWV9ZnVuY3Rpb24geG50KHQsZSl7Q3B0LmNhbGwodGhpcyx0KSx0aGlzLmE9ZX1mdW5jdGlvbiBZV3QodCxlKXt0aGlzLmM9dCxRdy5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gS1d0KHQsZSl7dGhpcy5hPXQsWHp0LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBHTSh0LGUpe3RoaXMuYT10LFh6dC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gWFd0KHQpe3RoaXMuYT0oamwodCxreSksbmV3IFhjKHQpKX1mdW5jdGlvbiBRV3QodCl7dGhpcy5hPShqbCh0LGt5KSxuZXcgWGModCkpfWZ1bmN0aW9uIFVNKHQpe3JldHVybiF0LmEmJih0LmE9bmV3IGF0KSx0LmF9ZnVuY3Rpb24gWld0KHQpe3JldHVybiB0Pjg/MDp0KzF9ZnVuY3Rpb24gTFplKHQsZSl7cmV0dXJuIE5uKCksdD09ZT8wOnQ/MTotMX1mdW5jdGlvbiBzd3QodCxlLG4pe3JldHVybiB6eCh0LHUoZSwyMiksbil9ZnVuY3Rpb24gTVplKHQsZSxuKXtyZXR1cm4gdC5hcHBseShlLG4pfWZ1bmN0aW9uIEpXdCh0LGUsbil7cmV0dXJuIHQuYSs9TWgoZSwwLG4pLHR9ZnVuY3Rpb24gYXd0KHQsZSl7dmFyIG47cmV0dXJuIG49dC5lLHQuZT1lLG59ZnVuY3Rpb24gRFplKHQsZSl7dmFyIG47bj10W2tvdF0sbi5jYWxsKHQsZSl9ZnVuY3Rpb24gSVplKHQsZSl7dmFyIG47bj10W2tvdF0sbi5jYWxsKHQsZSl9ZnVuY3Rpb24gem0odCxlKXt0LmEuVmModC5iLGUpLCsrdC5iLHQuYz0tMX1mdW5jdGlvbiB0WXQodCl7WHUodC5lKSx0LmQuYj10LmQsdC5kLmE9dC5kfWZ1bmN0aW9uIFdNKHQpe3QuYj9XTSh0LmIpOnQuZi5jLnpjKHQuZSx0LmQpfWZ1bmN0aW9uIE9aZSh0LGUsbil7UWIoKSxBdHQodCxlLkNlKHQuYSxuKSl9ZnVuY3Rpb24gUFplKHQsZSl7cmV0dXJuIHlldChOaWUodC5hLGUsITApKX1mdW5jdGlvbiBGWmUodCxlKXtyZXR1cm4geWV0KEJpZSh0LmEsZSwhMCkpfWZ1bmN0aW9uIGZmKHQsZSl7cmV0dXJuIExSKG5ldyBBcnJheShlKSx0KX1mdW5jdGlvbiBrbnQodCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodCl9ZnVuY3Rpb24gTlplKHQpe3JldHVybiB0PT1udWxsP251bGw6dC5tZXNzYWdlfWZ1bmN0aW9uIGVZdCgpe3RoaXMuYT1uZXcgaGUsdGhpcy5iPW5ldyBoZX1mdW5jdGlvbiBuWXQoKXt0aGlzLmE9bmV3IEg1LHRoaXMuYj1uZXcgaHF0fWZ1bmN0aW9uIHJZdCgpe3RoaXMuYj1uZXcgQ2EsdGhpcy5jPW5ldyBoZX1mdW5jdGlvbiBvd3QoKXt0aGlzLmQ9bmV3IENhLHRoaXMuZT1uZXcgQ2F9ZnVuY3Rpb24gY3d0KCl7dGhpcy5uPW5ldyBDYSx0aGlzLm89bmV3IENhfWZ1bmN0aW9uIElqKCl7dGhpcy5uPW5ldyBDeCx0aGlzLmk9bmV3IEZ4fWZ1bmN0aW9uIGlZdCgpe3RoaXMuYT1uZXcgWEosdGhpcy5iPW5ldyBaWH1mdW5jdGlvbiBzWXQoKXt0aGlzLmE9bmV3IGhlLHRoaXMuZD1uZXcgaGV9ZnVuY3Rpb24gYVl0KCl7dGhpcy5iPW5ldyBIcyx0aGlzLmE9bmV3IEhzfWZ1bmN0aW9uIG9ZdCgpe3RoaXMuYj1uZXcgX3IsdGhpcy5hPW5ldyBfcn1mdW5jdGlvbiBjWXQoKXt0aGlzLmI9bmV3IHFIdCx0aGlzLmE9bmV3IEdRfWZ1bmN0aW9uIHVZdCgpe0lqLmNhbGwodGhpcyksdGhpcy5hPW5ldyBDYX1mdW5jdGlvbiB5OSh0KXtvdW4uY2FsbCh0aGlzLHQsKFUkKCksanV0KSl9ZnVuY3Rpb24gdXd0KHQsZSxuLHIpe1dqLmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBCWmUodCxlLG4pe24hPW51bGwmJnV6KGUsQ3N0KHQsbikpfWZ1bmN0aW9uIFJaZSh0LGUsbil7biE9bnVsbCYmbHooZSxDc3QodCxuKSl9ZnVuY3Rpb24gbHd0KHQsZSxuKXtyZXR1cm4gbj1IbCh0LGUsMTEsbiksbn1mdW5jdGlvbiBMaSh0LGUpe3JldHVybiB0LmErPWUuYSx0LmIrPWUuYix0fWZ1bmN0aW9uIGlhKHQsZSl7cmV0dXJuIHQuYS09ZS5hLHQuYi09ZS5iLHR9ZnVuY3Rpb24galplKHQsZSl7cmV0dXJuIHQubi5hPShPbihlKSxlKzEwKX1mdW5jdGlvbiAkWmUodCxlKXtyZXR1cm4gdC5uLmE9KE9uKGUpLGUrMTApfWZ1bmN0aW9uIHpaZSh0LGUpe3JldHVybiBlPT10fHx5RShtcShlKSx0KX1mdW5jdGlvbiBsWXQodCxlKXtyZXR1cm4ga2kodC5hLGUsIiIpPT1udWxsfWZ1bmN0aW9uIHFaZSh0LGUpe3JldHVybiBrTSgpLCFKOChlLmQuaSx0KX1mdW5jdGlvbiBIWmUodCxlKXtCcCh0LmYpP2Eybih0LGUpOlYwbih0LGUpfWZ1bmN0aW9uIFZaZSh0LGUpe3ZhciBuO3JldHVybiBuPWUuSGgodC5hKSxufWZ1bmN0aW9uIHFtKHQsZSl7eW8uY2FsbCh0aGlzLEpfK3QrRDIrZSl9ZnVuY3Rpb24gUngodCxlLG4scil7ZmUuY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIGh3dCh0LGUsbixyKXtmZS5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gaFl0KHQsZSxuLHIpe2h3dC5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gZll0KHQsZSxuLHIpe3IkLmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBFbnQodCxlLG4scil7ciQuY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIGZ3dCh0LGUsbixyKXtyJC5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gZFl0KHQsZSxuLHIpe0VudC5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gZHd0KHQsZSxuLHIpe0VudC5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gQ24odCxlLG4scil7Znd0LmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBnWXQodCxlLG4scil7ZHd0LmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBwWXQodCxlLG4scil7aHZ0LmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBiWXQodCxlLG4pe3RoaXMuYT10LGoydC5jYWxsKHRoaXMsZSxuKX1mdW5jdGlvbiB3WXQodCxlLG4pe3RoaXMuYz1lLHRoaXMuYj1uLHRoaXMuYT10fWZ1bmN0aW9uIEdaZSh0LGUsbil7cmV0dXJuIHQuZD11KGUuS2IobiksMTY0KX1mdW5jdGlvbiBnd3QodCxlKXtyZXR1cm4gdC5BaigpLk5oKCkuS2godCxlKX1mdW5jdGlvbiBwd3QodCxlKXtyZXR1cm4gdC5BaigpLk5oKCkuSWgodCxlKX1mdW5jdGlvbiB2WXQodCxlKXtyZXR1cm4gT24odCksVnQodCk9PT1WdChlKX1mdW5jdGlvbiBobih0LGUpe3JldHVybiBPbih0KSxWdCh0KT09PVZ0KGUpfWZ1bmN0aW9uIFRudCh0LGUpe3JldHVybiB5ZXQoTmllKHQuYSxlLCExKSl9ZnVuY3Rpb24gQ250KHQsZSl7cmV0dXJuIHlldChCaWUodC5hLGUsITEpKX1mdW5jdGlvbiBVWmUodCxlKXtyZXR1cm4gdC5iLnNkKG5ldyBRVnQodCxlKSl9ZnVuY3Rpb24gV1plKHQsZSl7cmV0dXJuIHQuYi5zZChuZXcgWlZ0KHQsZSkpfWZ1bmN0aW9uIG1ZdCh0LGUpe3JldHVybiB0LmIuc2QobmV3IEpWdCh0LGUpKX1mdW5jdGlvbiBid3QodCxlLG4pe3JldHVybiB0Lmxhc3RJbmRleE9mKGUsbil9ZnVuY3Rpb24gWVplKHQsZSxuKXtyZXR1cm4gTXModFtlLmJdLHRbbi5iXSl9ZnVuY3Rpb24gS1plKHQsZSl7cmV0dXJuIEp0KGUsKFRlKCksRE8pLHQpfWZ1bmN0aW9uIFhaZSh0LGUpe3JldHVybiBwdShlLmEuZC5wLHQuYS5kLnApfWZ1bmN0aW9uIFFaZSh0LGUpe3JldHVybiBwdSh0LmEuZC5wLGUuYS5kLnApfWZ1bmN0aW9uIFpaZSh0LGUpe3JldHVybiBNcyh0LmMtdC5zLGUuYy1lLnMpfWZ1bmN0aW9uIHlZdCh0KXtyZXR1cm4gdC5jP1JvKHQuYy5hLHQsMCk6LTF9ZnVuY3Rpb24gSlplKHQpe3JldHVybiB0PDEwMD9udWxsOm5ldyBEcCh0KX1mdW5jdGlvbiBqeCh0KXtyZXR1cm4gdD09WTJ8fHQ9PWcwfHx0PT1HY31mdW5jdGlvbiB4WXQodCxlKXtyZXR1cm4gX3QoZSwxNSkmJlN1ZSh0LmMsZSl9ZnVuY3Rpb24gdEplKHQsZSl7JDF8fGUmJih0LmQ9ZSl9ZnVuY3Rpb24gX250KHQsZSl7dmFyIG47cmV0dXJuIG49ZSwhIWp5dCh0LG4pfWZ1bmN0aW9uIHd3dCh0LGUpe3RoaXMuYz10LEpudC5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBrWXQodCl7dGhpcy5jPXQsZW50LmNhbGwodGhpcyxxcSwwKX1mdW5jdGlvbiBFWXQodCxlKXtzZW4uY2FsbCh0aGlzLHQsdC5sZW5ndGgsZSl9ZnVuY3Rpb24gZUplKHQsZSxuKXtyZXR1cm4gdSh0LmMsNjkpLmxrKGUsbil9ZnVuY3Rpb24gT2oodCxlLG4pe3JldHVybiB1KHQuYyw2OSkubWsoZSxuKX1mdW5jdGlvbiBuSmUodCxlLG4pe3JldHVybiBmWmUodCx1KGUsMzMyKSxuKX1mdW5jdGlvbiB2d3QodCxlLG4pe3JldHVybiBkWmUodCx1KGUsMzMyKSxuKX1mdW5jdGlvbiBySmUodCxlLG4pe3JldHVybiB4YWUodCx1KGUsMzMyKSxuKX1mdW5jdGlvbiBUWXQodCxlLG4pe3JldHVybiBlZ24odCx1KGUsMzMyKSxuKX1mdW5jdGlvbiB4OSh0LGUpe3JldHVybiBlPT1udWxsP251bGw6c3kodC5iLGUpfWZ1bmN0aW9uIG13dCh0KXtyZXR1cm4gQm0odCk/KE9uKHQpLHQpOnQua2UoKX1mdW5jdGlvbiBQaih0KXtyZXR1cm4haXNOYU4odCkmJiFpc0Zpbml0ZSh0KX1mdW5jdGlvbiBDWXQodCl7Z2QoKSx0aGlzLmE9KHduKCksbmV3IHM4KHQpKX1mdW5jdGlvbiBZTSh0KXtrOCgpLHRoaXMuZD10LHRoaXMuYT1uZXcgQjN9ZnVuY3Rpb24gc2godCxlLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1ufWZ1bmN0aW9uIF9ZdCh0LGUsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW59ZnVuY3Rpb24gU1l0KHQsZSxuKXt0aGlzLmQ9dCx0aGlzLmI9bix0aGlzLmE9ZX1mdW5jdGlvbiBTbnQodCl7JFV0KHRoaXMpLEFoKHRoaXMpLFVhKHRoaXMsdCl9ZnVuY3Rpb24gQnUodCl7YW50KHRoaXMpLFB3dCh0aGlzLmMsMCx0LlBjKCkpfWZ1bmN0aW9uIEFZdCh0KXtDbCh0LmEpLEN0ZSh0LmMsdC5iKSx0LmI9bnVsbH1mdW5jdGlvbiBMWXQodCl7dGhpcy5hPXQsR2QoKSxUdShEYXRlLm5vdygpKX1mdW5jdGlvbiBNWXQoKXtNWXQ9WixSRXQ9bmV3IF8sYVY9bmV3IF99ZnVuY3Rpb24gQW50KCl7QW50PVosTEV0PW5ldyBIdCxZZ2U9bmV3IExlfWZ1bmN0aW9uIERZdCgpe0RZdD1aLG41ZT1OdChRbixEZSwxLDAsNSwxKX1mdW5jdGlvbiBJWXQoKXtJWXQ9Wix5NWU9TnQoUW4sRGUsMSwwLDUsMSl9ZnVuY3Rpb24geXd0KCl7eXd0PVoseDVlPU50KFFuLERlLDEsMCw1LDEpfWZ1bmN0aW9uIGdkKCl7Z2Q9WixuZXcgQXB0KCh3bigpLHduKCksaW8pKX1mdW5jdGlvbiBpSmUodCl7cmV0dXJuIFUkKCksVXIoKE50ZSgpLFFnZSksdCl9ZnVuY3Rpb24gc0plKHQpe3JldHVybiBPMSgpLFVyKChldGUoKSxycGUpLHQpfWZ1bmN0aW9uIGFKZSh0KXtyZXR1cm4gR3ooKSxVcigoY0p0KCksdXBlKSx0KX1mdW5jdGlvbiBvSmUodCl7cmV0dXJuIFEkKCksVXIoKHVKdCgpLGxwZSksdCl9ZnVuY3Rpb24gY0plKHQpe3JldHVybiBDcSgpLFVyKChLbmUoKSxocGUpLHQpfWZ1bmN0aW9uIHVKZSh0KXtyZXR1cm4gS2YoKSxVcigoWkp0KCksZ3BlKSx0KX1mdW5jdGlvbiBsSmUodCl7cmV0dXJuIFF1KCksVXIoKEpKdCgpLGJwZSksdCl9ZnVuY3Rpb24gaEplKHQpe3JldHVybiB5dSgpLFVyKCh0dGUoKSx2cGUpLHQpfWZ1bmN0aW9uIGZKZSh0KXtyZXR1cm4gJHEoKSxVcigoaFV0KCksenBlKSx0KX1mdW5jdGlvbiBkSmUodCl7cmV0dXJuIHJ2KCksVXIoKFJ0ZSgpLEhwZSksdCl9ZnVuY3Rpb24gZ0plKHQpe3JldHVybiB1NigpLFVyKChqdGUoKSxHcGUpLHQpfWZ1bmN0aW9uIHBKZSh0KXtyZXR1cm4gY18oKSxVcigoJHRlKCksWXBlKSx0KX1mdW5jdGlvbiBiSmUodCl7cmV0dXJuIGpSKCksVXIoKCRadCgpLEtwZSksdCl9ZnVuY3Rpb24gd0plKHQpe3JldHVybiBaJCgpLFVyKChsSnQoKSxmYmUpLHQpfWZ1bmN0aW9uIHZKZSh0KXtyZXR1cm4gcTkoKSxVcigobnRlKCksT2JlKSx0KX1mdW5jdGlvbiBtSmUodCl7cmV0dXJuIFdhKCksVXIoKGJlZSgpLEJiZSksdCl9ZnVuY3Rpb24geUplKHQpe3JldHVybiBuRSgpLFVyKChCdGUoKSxxYmUpLHQpfWZ1bmN0aW9uIHhKZSh0KXtyZXR1cm4gaXYoKSxVcigocnRlKCksWWJlKSx0KX1mdW5jdGlvbiB4d3QodCxlKXtpZighdCl0aHJvdyBpdChuZXcgRm4oZSkpfWZ1bmN0aW9uIGtKZSh0KXtyZXR1cm4gVm4oKSxVcigoQmVlKCksWmJlKSx0KX1mdW5jdGlvbiBrd3QodCl7V2ouY2FsbCh0aGlzLHQuZCx0LmMsdC5hLHQuYil9ZnVuY3Rpb24gTG50KHQpe1dqLmNhbGwodGhpcyx0LmQsdC5jLHQuYSx0LmIpfWZ1bmN0aW9uIEV3dCh0LGUsbil7dGhpcy5iPXQsdGhpcy5jPWUsdGhpcy5hPW59ZnVuY3Rpb24gRmoodCxlLG4pe3RoaXMuYj10LHRoaXMuYT1lLHRoaXMuYz1ufWZ1bmN0aW9uIE9ZdCh0LGUsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW59ZnVuY3Rpb24gVHd0KHQsZSxuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bn1mdW5jdGlvbiBQWXQodCxlLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1ufWZ1bmN0aW9uIEN3dCh0LGUsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW59ZnVuY3Rpb24gRll0KHQsZSxuKXt0aGlzLmI9dCx0aGlzLmE9ZSx0aGlzLmM9bn1mdW5jdGlvbiBOaih0LGUsbil7dGhpcy5lPWUsdGhpcy5iPXQsdGhpcy5kPW59ZnVuY3Rpb24gRUplKHQsZSxuKXtyZXR1cm4gUWIoKSx0LmEuT2QoZSxuKSxlfWZ1bmN0aW9uIE1udCh0KXt2YXIgZTtyZXR1cm4gZT1uZXcgV3UsZS5lPXQsZX1mdW5jdGlvbiBfd3QodCl7dmFyIGU7cmV0dXJuIGU9bmV3IHZxdCxlLmI9dCxlfWZ1bmN0aW9uIEtNKCl7S009WixtVj1uZXcgQksseVY9bmV3IFJLfWZ1bmN0aW9uIGRmKCl7ZGY9WixmMmU9bmV3IFNYLGQyZT1uZXcgRE59ZnVuY3Rpb24gVEplKHQpe3JldHVybiBUeigpLFVyKChxdGUoKSxvMmUpLHQpfWZ1bmN0aW9uIENKZSh0KXtyZXR1cm4gSTEoKSxVcigoVnRlKCksYjJlKSx0KX1mdW5jdGlvbiBfSmUodCl7cmV0dXJuIEVxKCksVXIoKFJuZSgpLFQyZSksdCl9ZnVuY3Rpb24gU0plKHQpe3JldHVybiBoNigpLFVyKCgkZWUoKSxDMmUpLHQpfWZ1bmN0aW9uIEFKZSh0KXtyZXR1cm4gSCQoKSxVcigoYkp0KCksXzJlKSx0KX1mdW5jdGlvbiBMSmUodCl7cmV0dXJuIG42KCksVXIoKGl0ZSgpLFMyZSksdCl9ZnVuY3Rpb24gTUplKHQpe3JldHVybiBiNCgpLFVyKChoZWUoKSx2MmUpLHQpfWZ1bmN0aW9uIERKZSh0KXtyZXR1cm4gbnYoKSxVcigob3RlKCksRTJlKSx0KX1mdW5jdGlvbiBJSmUodCl7cmV0dXJuIG96KCksVXIoKHN0ZSgpLEEyZSksdCl9ZnVuY3Rpb24gT0plKHQpe3JldHVybiB4MigpLFVyKCh1ZWUoKSxMMmUpLHQpfWZ1bmN0aW9uIFBKZSh0KXtyZXR1cm4gTEQoKSxVcigoZkp0KCksTTJlKSx0KX1mdW5jdGlvbiBGSmUodCl7cmV0dXJuIGQyKCksVXIoKGF0ZSgpLEkyZSksdCl9ZnVuY3Rpb24gTkplKHQpe3JldHVybiBkcSgpLFVyKChWZWUoKSxPMmUpLHQpfWZ1bmN0aW9uIEJKZSh0KXtyZXR1cm4geEQoKSxVcigoZEp0KCksUDJlKSx0KX1mdW5jdGlvbiBSSmUodCl7cmV0dXJuIG9JKCksVXIoKHFlZSgpLEYyZSksdCl9ZnVuY3Rpb24gakplKHQpe3JldHVybiBrRSgpLFVyKCh6ZWUoKSxOMmUpLHQpfWZ1bmN0aW9uICRKZSh0KXtyZXR1cm4gb28oKSxVcigobHJlKCksQjJlKSx0KX1mdW5jdGlvbiB6SmUodCl7cmV0dXJuIGVFKCksVXIoKHV0ZSgpLFIyZSksdCl9ZnVuY3Rpb24gcUplKHQpe3JldHVybiBxMCgpLFVyKChjdGUoKSwkMmUpLHQpfWZ1bmN0aW9uIEhKZSh0KXtyZXR1cm4gSSQoKSxVcigod0p0KCksejJlKSx0KX1mdW5jdGlvbiBWSmUodCl7cmV0dXJuIGRoKCksVXIoKGZlZSgpLHEyZSksdCl9ZnVuY3Rpb24gR0plKHQpe3JldHVybiB1cSgpLFVyKChIZWUoKSxybWUpLHQpfWZ1bmN0aW9uIFVKZSh0KXtyZXR1cm4gWjkoKSxVcigobHRlKCksaW1lKSx0KX1mdW5jdGlvbiBXSmUodCl7cmV0dXJuIGN5KCksVXIoKEd0ZSgpLHNtZSksdCl9ZnVuY3Rpb24gWUplKHQpe3JldHVybiBzbygpLFVyKChkdGUoKSxobWUpLHQpfWZ1bmN0aW9uIEtKZSh0KXtyZXR1cm4geTQoKSxVcigoQm5lKCksb21lKSx0KX1mdW5jdGlvbiBYSmUodCl7cmV0dXJuIFYwKCksVXIoKGZ0ZSgpLGNtZSksdCl9ZnVuY3Rpb24gUUplKHQpe3JldHVybiBDRCgpLFVyKChwSnQoKSx1bWUpLHQpfWZ1bmN0aW9uIFpKZSh0KXtyZXR1cm4geXooKSxVcigoaHRlKCksZm1lKSx0KX1mdW5jdGlvbiBKSmUodCl7cmV0dXJuIHVfKCksVXIoKGxlZSgpLGFtZSksdCl9ZnVuY3Rpb24gdHRuKHQpe3JldHVybiBwRCgpLFVyKChnSnQoKSxkbWUpLHQpfWZ1bmN0aW9uIGV0bih0KXtyZXR1cm4gY0UoKSxVcigocHRlKCksZ21lKSx0KX1mdW5jdGlvbiBudG4odCl7cmV0dXJuIHZ6KCksVXIoKGJ0ZSgpLHBtZSksdCl9ZnVuY3Rpb24gcnRuKHQpe3JldHVybiBDeigpLFVyKChndGUoKSxibWUpLHQpfWZ1bmN0aW9uIGl0bih0KXtyZXR1cm4gZXYoKSxVcigod3RlKCksTG1lKSx0KX1mdW5jdGlvbiBzdG4odCl7cmV0dXJuICQ5KCksVXIoKG1KdCgpLFBtZSksdCl9ZnVuY3Rpb24gYXRuKHQpe3JldHVybiBiZCgpLFVyKCh5SnQoKSx6bWUpLHQpfWZ1bmN0aW9uIG90bih0KXtyZXR1cm4gQzEoKSxVcigoeEp0KCksSG1lKSx0KX1mdW5jdGlvbiBjdG4odCl7cmV0dXJuIFVmKCksVXIoKHZKdCgpLGl5ZSksdCl9ZnVuY3Rpb24gdXRuKHQpe3JldHVybiBHdygpLFVyKChrSnQoKSxoeWUpLHQpfWZ1bmN0aW9uIGx0bih0KXtyZXR1cm4gd0UoKSxVcigoenRlKCksZnllKSx0KX1mdW5jdGlvbiBodG4odCl7cmV0dXJuIHBfKCksVXIoKEdlZSgpLGd5ZSksdCl9ZnVuY3Rpb24gZnRuKHQpe3JldHVybiBUJCgpLFVyKChDSnQoKSxBeWUpLHQpfWZ1bmN0aW9uIGR0bih0KXtyZXR1cm4gcHooKSxVcigoVEp0KCksUHllKSx0KX1mdW5jdGlvbiBndG4odCl7cmV0dXJuIEEkKCksVXIoKEVKdCgpLEx5ZSksdCl9ZnVuY3Rpb24gcHRuKHQpe3JldHVybiBOeigpLFVyKCh2dGUoKSxOeWUpLHQpfWZ1bmN0aW9uIGJ0bih0KXtyZXR1cm4gRyQoKSxVcigoX0p0KCksQnllKSx0KX1mdW5jdGlvbiB3dG4odCl7cmV0dXJuIEhEKCksVXIoKG10ZSgpLFJ5ZSksdCl9ZnVuY3Rpb24gdnRuKHQpe3JldHVybiBlcSgpLFVyKChIdGUoKSxKeWUpLHQpfWZ1bmN0aW9uIG10bih0KXtyZXR1cm4gbXooKSxVcigoeHRlKCksdDNlKSx0KX1mdW5jdGlvbiB5dG4odCl7cmV0dXJuIEZ6KCksVXIoKHl0ZSgpLGUzZSksdCl9ZnVuY3Rpb24geHRuKHQpe3JldHVybiBBRSgpLFVyKChwZWUoKSx4M2UpLHQpfWZ1bmN0aW9uIGt0bih0KXtyZXR1cm4gS0QoKSxVcigoa3RlKCksazNlKSx0KX1mdW5jdGlvbiBFdG4odCl7cmV0dXJuIHpSKCksVXIoKFJadCgpLEUzZSksdCl9ZnVuY3Rpb24gVHRuKHQpe3JldHVybiBxUigpLFVyKChCWnQoKSxDM2UpLHQpfWZ1bmN0aW9uIEN0bih0KXtyZXR1cm4gYkQoKSxVcigoQUp0KCksXzNlKSx0KX1mdW5jdGlvbiBfdG4odCl7cmV0dXJuIHVJKCksVXIoKGRlZSgpLFMzZSksdCl9ZnVuY3Rpb24gU3RuKHQpe3JldHVybiBVQygpLFVyKChqWnQoKSxIM2UpLHQpfWZ1bmN0aW9uIEF0bih0KXtyZXR1cm4gakQoKSxVcigoU0p0KCksVjNlKSx0KX1mdW5jdGlvbiBMdG4odCl7cmV0dXJuIFFmKCksVXIoKGdlZSgpLFgzZSksdCl9ZnVuY3Rpb24gTXRuKHQpe3JldHVybiBVZygpLFVyKChqbmUoKSxaM2UpLHQpfWZ1bmN0aW9uIER0bih0KXtyZXR1cm4gdDAoKSxVcigoamVlKCksSjNlKSx0KX1mdW5jdGlvbiBJdG4odCl7cmV0dXJuIGh5KCksVXIoKFJlZSgpLHM0ZSksdCl9ZnVuY3Rpb24gT3RuKHQpe3JldHVybiBybygpLFVyKChmVXQoKSxpMmUpLHQpfWZ1bmN0aW9uIFB0bih0KXtyZXR1cm4gWDgoKSxVcigoaEp0KCkscjJlKSx0KX1mdW5jdGlvbiBGdG4odCl7cmV0dXJuIGFvKCksVXIoKHdlZSgpLHk0ZSksdCl9ZnVuY3Rpb24gTnRuKHQpe3JldHVybiBNMSgpLFVyKChUdGUoKSx4NGUpLHQpfWZ1bmN0aW9uIEJ0bih0KXtyZXR1cm4gVzAoKSxVcigoWXRlKCksazRlKSx0KX1mdW5jdGlvbiBSdG4odCl7cmV0dXJuIGhxKCksVXIoKFdlZSgpLEU0ZSksdCl9ZnVuY3Rpb24ganRuKHQpe3JldHVybiBHMCgpLFVyKChFdGUoKSxDNGUpLHQpfWZ1bmN0aW9uICR0bih0KXtyZXR1cm4gemwoKSxVcigoV3RlKCksUzRlKSx0KX1mdW5jdGlvbiB6dG4odCl7cmV0dXJuIHB5KCksVXIoKFluZSgpLEE0ZSksdCl9ZnVuY3Rpb24gcXRuKHQpe3JldHVybiBsNCgpLFVyKCh2ZWUoKSxMNGUpLHQpfWZ1bmN0aW9uIEh0bih0KXtyZXR1cm4gdWEoKSxVcigoT2VlKCksTTRlKSx0KX1mdW5jdGlvbiBWdG4odCl7cmV0dXJuIFp1KCksVXIoKFVlZSgpLEQ0ZSksdCl9ZnVuY3Rpb24gR3RuKHQpe3JldHVybiBBbCgpLFVyKChYdGUoKSxCNGUpLHQpfWZ1bmN0aW9uIFV0bih0KXtyZXR1cm4gbGwoKSxVcigoaHJlKCksUjRlKSx0KX1mdW5jdGlvbiBXdG4odCl7cmV0dXJuIHZlKCksVXIoKG1lZSgpLEk0ZSksdCl9ZnVuY3Rpb24gWXRuKHQpe3JldHVybiBqeigpLFVyKChLdGUoKSxqNGUpLHQpfWZ1bmN0aW9uIEt0bih0KXtyZXR1cm4gU2woKSxVcigoVXRlKCkscTRlKSx0KX1mdW5jdGlvbiBYdG4odCl7cmV0dXJuIENFKCksVXIoKCRuZSgpLGU1ZSksdCl9ZnVuY3Rpb24gUXRuKHQsZSl7cmV0dXJuIE9uKHQpLHQrKE9uKGUpLGUpfWZ1bmN0aW9uIFp0bih0LGUpe3JldHVybiBHZCgpLERyKFd0KHQuYSksZSl9ZnVuY3Rpb24gSnRuKHQsZSl7cmV0dXJuIEdkKCksRHIoV3QodC5hKSxlKX1mdW5jdGlvbiBEbnQodCxlKXt0aGlzLmM9dCx0aGlzLmE9ZSx0aGlzLmI9ZS10fWZ1bmN0aW9uIE5ZdCh0LGUsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW59ZnVuY3Rpb24gU3d0KHQsZSxuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bn1mdW5jdGlvbiBBd3QodCxlLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1ufWZ1bmN0aW9uIEJZdCh0LGUsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW59ZnVuY3Rpb24gUll0KHQsZSxuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bn1mdW5jdGlvbiBJZyh0LGUsbil7dGhpcy5lPXQsdGhpcy5hPWUsdGhpcy5jPW59ZnVuY3Rpb24gall0KHQsZSxuKXtpaCgpLCR2dC5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIEludCh0LGUsbil7aWgoKSxUdnQuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBMd3QodCxlLG4pe2loKCksVHZ0LmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gTXd0KHQsZSxuKXtpaCgpLFR2dC5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uICRZdCh0LGUsbil7aWgoKSxJbnQuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBEd3QodCxlLG4pe2loKCksSW50LmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gell0KHQsZSxuKXtpaCgpLER3dC5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIHFZdCh0LGUsbil7aWgoKSxMd3QuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBIWXQodCxlLG4pe2loKCksTXd0LmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gWE0odCxlKXtyZXR1cm4gTHIodCksTHIoZSksbmV3IGxWdCh0LGUpfWZ1bmN0aW9uICR4KHQsZSl7cmV0dXJuIExyKHQpLExyKGUpLG5ldyBuS3QodCxlKX1mdW5jdGlvbiB0ZW4odCxlKXtyZXR1cm4gTHIodCksTHIoZSksbmV3IHJLdCh0LGUpfWZ1bmN0aW9uIGVlbih0LGUpe3JldHVybiBMcih0KSxMcihlKSxuZXcgZlZ0KHQsZSl9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBrOSh0PT1udWxsfHxnc3QodCxlKSksdH1mdW5jdGlvbiB4OCh0KXt2YXIgZTtyZXR1cm4gZT1uZXcgaGUsb2l0KGUsdCksZX1mdW5jdGlvbiBuZW4odCl7dmFyIGU7cmV0dXJuIGU9bmV3IEhzLG9pdChlLHQpLGV9ZnVuY3Rpb24gVll0KHQpe3ZhciBlO3JldHVybiBlPW5ldyBCcHQseGl0KGUsdCksZX1mdW5jdGlvbiBRTSh0KXt2YXIgZTtyZXR1cm4gZT1uZXcgWmkseGl0KGUsdCksZX1mdW5jdGlvbiByZW4odCl7cmV0dXJuIXQuZSYmKHQuZT1uZXcgaGUpLHQuZX1mdW5jdGlvbiBpZW4odCl7cmV0dXJuIXQuYyYmKHQuYz1uZXcgVG0pLHQuY31mdW5jdGlvbiBsZSh0LGUpe3JldHVybiB0LmNbdC5jLmxlbmd0aF09ZSwhMH1mdW5jdGlvbiBHWXQodCxlKXt0aGlzLmM9dCx0aGlzLmI9ZSx0aGlzLmE9ITF9ZnVuY3Rpb24gSXd0KHQpe3RoaXMuZD10LHp0dCh0aGlzKSx0aGlzLmI9WGVuKHQuZCl9ZnVuY3Rpb24gVVl0KCl7dGhpcy5hPSI7LDsiLHRoaXMuYj0iIix0aGlzLmM9IiJ9ZnVuY3Rpb24gc2VuKHQsZSxuKXtXS3QuY2FsbCh0aGlzLGUsbiksdGhpcy5hPXR9ZnVuY3Rpb24gV1l0KHQsZSxuKXt0aGlzLmI9dCxvVXQuY2FsbCh0aGlzLGUsbil9ZnVuY3Rpb24gT3d0KHQsZSxuKXt0aGlzLmM9dCxLUi5jYWxsKHRoaXMsZSxuKX1mdW5jdGlvbiBQd3QodCxlLG4pe241dChuLDAsdCxlLG4ubGVuZ3RoLCExKX1mdW5jdGlvbiBXZCh0LGUsbixyLHMpe3QuYj1lLHQuYz1uLHQuZD1yLHQuYT1zfWZ1bmN0aW9uIGFlbih0LGUpe2UmJih0LmI9ZSx0LmE9KFZwKGUpLGUuYSkpfWZ1bmN0aW9uIEZ3dCh0LGUsbixyLHMpe3QuZD1lLHQuYz1uLHQuYT1yLHQuYj1zfWZ1bmN0aW9uIE53dCh0KXt2YXIgZSxuO2U9dC5iLG49dC5jLHQuYj1uLHQuYz1lfWZ1bmN0aW9uIEJ3dCh0KXt2YXIgZSxuO249dC5kLGU9dC5hLHQuZD1lLHQuYT1ufWZ1bmN0aW9uIFJ3dCh0KXtyZXR1cm4gS3AoZm5uKEJvKHQpP0xoKHQpOnQpKX1mdW5jdGlvbiBvZW4odCxlKXtyZXR1cm4gcHUodUt0KHQuZCksdUt0KGUuZCkpfWZ1bmN0aW9uIGNlbih0LGUpe3JldHVybiBlPT0odmUoKSxCbik/dC5jOnQuZH1mdW5jdGlvbiBrOCgpe2s4PVoscl90PSh2ZSgpLEJuKSxDRz1Ibn1mdW5jdGlvbiBZWXQoKXt0aGlzLmI9WHQoeWUoSWUoKEpmKCksbmx0KSkpKX1mdW5jdGlvbiBLWXQodCl7cmV0dXJuIFFiKCksTnQoUW4sRGUsMSx0LDUsMSl9ZnVuY3Rpb24gdWVuKHQpe3JldHVybiBuZXcgJGUodC5jK3QuYix0LmQrdC5hKX1mdW5jdGlvbiBsZW4odCxlKXtyZXR1cm4gJFIoKSxwdSh0LmQucCxlLmQucCl9ZnVuY3Rpb24gT250KHQpe3JldHVybiBabih0LmIhPTApLGxoKHQsdC5hLmEpfWZ1bmN0aW9uIGhlbih0KXtyZXR1cm4gWm4odC5iIT0wKSxsaCh0LHQuYy5iKX1mdW5jdGlvbiBqd3QodCxlKXtpZighdCl0aHJvdyBpdChuZXcgaUh0KGUpKX1mdW5jdGlvbiBCaih0LGUpe2lmKCF0KXRocm93IGl0KG5ldyBGbihlKSl9ZnVuY3Rpb24gJHd0KHQsZSxuKXtnOC5jYWxsKHRoaXMsdCxlKSx0aGlzLmI9bn1mdW5jdGlvbiBaTSh0LGUsbil7ZTJ0LmNhbGwodGhpcyx0LGUpLHRoaXMuYz1ufWZ1bmN0aW9uIFhZdCh0LGUsbil7U2VlLmNhbGwodGhpcyxlLG4pLHRoaXMuZD10fWZ1bmN0aW9uIHp3dCh0KXt5d3QoKSxQay5jYWxsKHRoaXMpLHRoaXMudGgodCl9ZnVuY3Rpb24gUVl0KHQsZSxuKXt0aGlzLmE9dCxWMy5jYWxsKHRoaXMsZSxuKX1mdW5jdGlvbiBaWXQodCxlLG4pe3RoaXMuYT10LFYzLmNhbGwodGhpcyxlLG4pfWZ1bmN0aW9uIFJqKHQsZSxuKXtlMnQuY2FsbCh0aGlzLHQsZSksdGhpcy5jPW59ZnVuY3Rpb24gSll0KCl7QjgoKSxNbm4uY2FsbCh0aGlzLChQcCgpLFloKSl9ZnVuY3Rpb24gdEt0KHQpe3JldHVybiB0IT1udWxsJiYhdHN0KHQsb0EsY0EpfWZ1bmN0aW9uIGZlbih0LGUpe3JldHVybih1aWUodCk8PDR8dWllKGUpKSZ5c31mdW5jdGlvbiBkZW4odCxlKXtyZXR1cm4gYyQoKSxrc3QodCxlKSxuZXcgU1h0KHQsZSl9ZnVuY3Rpb24gSmIodCxlKXt2YXIgbjt0Lm4mJihuPWUsbGUodC5mLG4pKX1mdW5jdGlvbiBFOCh0LGUsbil7dmFyIHI7cj1uZXcgVW0obiksWWYodCxlLHIpfWZ1bmN0aW9uIGdlbih0LGUpe3ZhciBuO3JldHVybiBuPXQuYyxzeXQodCxlKSxufWZ1bmN0aW9uIHF3dCh0LGUpe3JldHVybiBlPDA/dC5nPS0xOnQuZz1lLHR9ZnVuY3Rpb24gamoodCxlKXtyZXR1cm4gWm9uKHQpLHQuYSo9ZSx0LmIqPWUsdH1mdW5jdGlvbiBlS3QodCxlLG4scixzKXt0LmM9ZSx0LmQ9bix0LmI9cix0LmE9c31mdW5jdGlvbiByaSh0LGUpe3JldHVybiBmcyh0LGUsdC5jLmIsdC5jKSwhMH1mdW5jdGlvbiBId3QodCl7dC5hLmI9dC5iLHQuYi5hPXQuYSx0LmE9dC5iPW51bGx9ZnVuY3Rpb24gUG50KHQpe3RoaXMuYj10LHRoaXMuYT1Sdyh0aGlzLmIuYSkuRWQoKX1mdW5jdGlvbiBuS3QodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZSxwQy5jYWxsKHRoaXMpfWZ1bmN0aW9uIHJLdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lLHBDLmNhbGwodGhpcyl9ZnVuY3Rpb24gaUt0KHQsZSl7V0t0LmNhbGwodGhpcyxlLDEwNDApLHRoaXMuYT10fWZ1bmN0aW9uIEpNKHQpe3JldHVybiB0PT0wfHxpc05hTih0KT90OnQ8MD8tMToxfWZ1bmN0aW9uIHBlbih0KXtyZXR1cm4gVXgoKSxlMCh0KT09ZXModGIodCkpfWZ1bmN0aW9uIGJlbih0KXtyZXR1cm4gVXgoKSx0Yih0KT09ZXMoZTAodCkpfWZ1bmN0aW9uIEJ3KHQsZSl7cmV0dXJuIGRfKHQsbmV3IGc4KGUuYSxlLmIpKX1mdW5jdGlvbiB3ZW4odCl7cmV0dXJuIUdhKHQpJiZ0LmMuaS5jPT10LmQuaS5jfWZ1bmN0aW9uICRqKHQpe3ZhciBlO3JldHVybiBlPXQubix0LmEuYitlLmQrZS5hfWZ1bmN0aW9uIHNLdCh0KXt2YXIgZTtyZXR1cm4gZT10Lm4sdC5lLmIrZS5kK2UuYX1mdW5jdGlvbiBWd3QodCl7dmFyIGU7cmV0dXJuIGU9dC5uLHQuZS5hK2UuYitlLmN9ZnVuY3Rpb24gYUt0KHQpe3JldHVybiBnaSgpLG5ldyBZZCgwLHQpfWZ1bmN0aW9uIHZlbih0KXtyZXR1cm4gdC5hP3QuYTpncnQodCl9ZnVuY3Rpb24gazkodCl7aWYoIXQpdGhyb3cgaXQobmV3IGk4KG51bGwpKX1mdW5jdGlvbiBvS3QoKXtvS3Q9WiwkZnQ9KHduKCksbmV3IE8ocHV0KSl9ZnVuY3Rpb24gemooKXt6aj1aLG5ldyB6M3QoKG9ldCgpLFN1dCksKGNldCgpLF91dCkpfWZ1bmN0aW9uIGNLdCgpe2NLdD1aLGZFdD1OdChqYSxlZSwxOSwyNTYsMCwxKX1mdW5jdGlvbiBGbnQodCxlLG4scil7YjN0LmNhbGwodGhpcyx0LGUsbixyLDAsMCl9ZnVuY3Rpb24gbWVuKHQsZSxuKXtyZXR1cm4ga2kodC5iLHUobi5iLDE3KSxlKX1mdW5jdGlvbiB5ZW4odCxlLG4pe3JldHVybiBraSh0LmIsdShuLmIsMTcpLGUpfWZ1bmN0aW9uIHhlbih0LGUpe3JldHVybiBsZSh0LG5ldyAkZShlLmEsZS5iKSl9ZnVuY3Rpb24ga2VuKHQsZSl7cmV0dXJuIHQuYzxlLmM/LTE6dC5jPT1lLmM/MDoxfWZ1bmN0aW9uIE5udCh0KXtyZXR1cm4gdC5lLmMubGVuZ3RoK3QuZy5jLmxlbmd0aH1mdW5jdGlvbiB1S3QodCl7cmV0dXJuIHQuZS5jLmxlbmd0aC10LmcuYy5sZW5ndGh9ZnVuY3Rpb24gbEt0KHQpe3JldHVybiB0LmIuYy5sZW5ndGgtdC5lLmMubGVuZ3RofWZ1bmN0aW9uIEVlbih0KXtyZXR1cm4gRmwoKSwodmUoKSxsdSkuSGModC5qKX1mdW5jdGlvbiBoS3QodCl7eXd0KCksend0LmNhbGwodGhpcyx0KSx0aGlzLmE9LTF9ZnVuY3Rpb24gcWoodCxlKXtCTS5jYWxsKHRoaXMsdCxlKSx0aGlzLmE9dGhpc31mdW5jdGlvbiBLaSh0LGUpe3ZhciBuO3JldHVybiBuPXJydCh0LGUpLG4uaT0yLG59ZnVuY3Rpb24gSGoodCxlKXt2YXIgbjtyZXR1cm4rK3QuaixuPXQuVGkoZSksbn1mdW5jdGlvbiBiaSh0LGUsbil7cmV0dXJuIHQuYT0tMSxSMnQodCxlLmcsbiksdH1mdW5jdGlvbiBUZW4odCxlLG4pe3A1bih0LmEsdC5iLHQuYyx1KGUsMjAyKSxuKX1mdW5jdGlvbiBDZW4odCxlKXtveXQodCxlPT1udWxsP251bGw6KE9uKGUpLGUpKX1mdW5jdGlvbiBfZW4odCxlKXtpeXQodCxlPT1udWxsP251bGw6KE9uKGUpLGUpKX1mdW5jdGlvbiBTZW4odCxlKXtpeXQodCxlPT1udWxsP251bGw6KE9uKGUpLGUpKX1mdW5jdGlvbiBCbnQodCxlLG4pe3JldHVybiBuZXcgd1l0KERubih0KS5JZSgpLG4sZSl9ZnVuY3Rpb24gdDIodCxlLG4scixzLG8pe3JldHVybiBwYWUodCxlLG4scixzLDAsbyl9ZnVuY3Rpb24gZkt0KCl7Zkt0PVosdUV0PU50KE02LGVlLDIxNywyNTYsMCwxKX1mdW5jdGlvbiBkS3QoKXtkS3Q9WixkRXQ9TnQoU3YsZWUsMTYyLDI1NiwwLDEpfWZ1bmN0aW9uIGdLdCgpe2dLdD1aLGJFdD1OdChBdixlZSwxODQsMjU2LDAsMSl9ZnVuY3Rpb24gcEt0KCl7cEt0PVosaEV0PU50KHVTLGVlLDE3MiwxMjgsMCwxKX1mdW5jdGlvbiBHd3QoKXtXZCh0aGlzLCExLCExLCExLCExKX1mdW5jdGlvbiBSbnQodCl7V20oKSx0aGlzLmE9KHduKCksbmV3IE8oTHIodCkpKX1mdW5jdGlvbiBWaih0KXtmb3IoTHIodCk7dC5PYigpOyl0LlBiKCksdC5RYigpfWZ1bmN0aW9uIEFlbih0KXt0LmEuY2QoKSx1KHQuYS5kZCgpLDE0KS5nYygpLHJidCgpfWZ1bmN0aW9uIFV3dCh0KXt0aGlzLmM9dCx0aGlzLmI9dGhpcy5jLmQudmMoKS5LYygpfWZ1bmN0aW9uIGJLdCh0KXt0aGlzLmM9dCx0aGlzLmE9bmV3IE14KHRoaXMuYy5hKX1mdW5jdGlvbiBFOSh0KXt0aGlzLmE9bmV3IEx4KHQuZ2MoKSksVWEodGhpcyx0KX1mdW5jdGlvbiBXd3QodCl7a3QuY2FsbCh0aGlzLG5ldyBhMiksVWEodGhpcyx0KX1mdW5jdGlvbiB3S3QodCxlKXtyZXR1cm4gdC5hKz1NaChlLDAsZS5sZW5ndGgpLHR9ZnVuY3Rpb24gTmUodCxlKXtyZXR1cm4gQW4oZSx0LmMubGVuZ3RoKSx0LmNbZV19ZnVuY3Rpb24gdkt0KHQsZSl7cmV0dXJuIEFuKGUsdC5hLmxlbmd0aCksdC5hW2VdfWZ1bmN0aW9uIFRuKHQsZSl7UWIoKSxYcnQuY2FsbCh0aGlzLHQpLHRoaXMuYT1lfWZ1bmN0aW9uIExlbih0LGUpe3JldHVybiB2MihQYSh2Mih0LmEpLmEsZS5hKSl9ZnVuY3Rpb24gTWVuKHQsZSl7cmV0dXJuIE9uKHQpLElEKHQsKE9uKGUpLGUpKX1mdW5jdGlvbiBEZW4odCxlKXtyZXR1cm4gT24oZSksSUQoZSwoT24odCksdCkpfWZ1bmN0aW9uIEllbih0LGUpe3JldHVybiB0cyhlLDAsWXd0KGVbMF0sdjIoMSkpKX1mdW5jdGlvbiBZd3QodCxlKXtyZXR1cm4gTGVuKHUodCwxNjIpLHUoZSwxNjIpKX1mdW5jdGlvbiBtS3QodCl7cmV0dXJuIHQuYy11KE5lKHQuYSx0LmIpLDI4NykuYn1mdW5jdGlvbiB5S3QodCl7cmV0dXJuIHQucT90LnE6KHduKCksd24oKSx1MCl9ZnVuY3Rpb24geEt0KHQpe3JldHVybiB0LmUuSGQoKS5nYygpKnQuYy5IZCgpLmdjKCl9ZnVuY3Rpb24gT2VuKHQsZSxuKXtyZXR1cm4gcHUoZS5kW3QuZ10sbi5kW3QuZ10pfWZ1bmN0aW9uIFBlbih0LGUsbil7cmV0dXJuIHB1KHQuZFtlLnBdLHQuZFtuLnBdKX1mdW5jdGlvbiBGZW4odCxlLG4pe3JldHVybiBwdSh0LmRbZS5wXSx0LmRbbi5wXSl9ZnVuY3Rpb24gTmVuKHQsZSxuKXtyZXR1cm4gcHUodC5kW2UucF0sdC5kW24ucF0pfWZ1bmN0aW9uIEJlbih0LGUsbil7cmV0dXJuIHB1KHQuZFtlLnBdLHQuZFtuLnBdKX1mdW5jdGlvbiBLd3QodCxlLG4pe3JldHVybiBiLk1hdGgubWluKG4vdCwxL2UpfWZ1bmN0aW9uIGtLdCh0LGUpe3JldHVybiB0PzA6Yi5NYXRoLm1heCgwLGUtMSl9ZnVuY3Rpb24gUmVuKHQsZSl7dmFyIG47Zm9yKG49MDtuPGU7KytuKXRbbl09LTF9ZnVuY3Rpb24gRUt0KHQpe3ZhciBlO3JldHVybiBlPXdhZSh0KSxlP0VLdChlKTp0fWZ1bmN0aW9uIGplbih0LGUpe3JldHVybiB0LmE9PW51bGwmJkl1ZSh0KSx0LmFbZV19ZnVuY3Rpb24gRWwodCl7cmV0dXJuIHQuYz90LmMuZjp0LmUuYn1mdW5jdGlvbiBSdSh0KXtyZXR1cm4gdC5jP3QuYy5nOnQuZS5hfWZ1bmN0aW9uIEdqKHQpe1F3LmNhbGwodGhpcyx0LmdjKCkpLGlzKHRoaXMsdCl9ZnVuY3Rpb24gVWoodCxlKXtpaCgpLHZSLmNhbGwodGhpcyxlKSx0aGlzLmE9dH1mdW5jdGlvbiBUOSh0LGUsbil7dGhpcy5hPXQsQXMuY2FsbCh0aGlzLGUsbiwyKX1mdW5jdGlvbiBXaih0LGUsbixyKXtGd3QodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBZZCh0LGUpe2dpKCkseXcuY2FsbCh0aGlzLHQpLHRoaXMuYT1lfWZ1bmN0aW9uIFRLdCh0KXt0aGlzLmI9bmV3IFppLHRoaXMuYT10LHRoaXMuYz0tMX1mdW5jdGlvbiBDS3QoKXt0aGlzLmQ9bmV3ICRlKDAsMCksdGhpcy5lPW5ldyBIc31mdW5jdGlvbiBfS3QodCl7ajJ0LmNhbGwodGhpcywwLDApLHRoaXMuYT10LHRoaXMuYj0wfWZ1bmN0aW9uIFNLdCh0KXt0aGlzLmE9dCx0aGlzLmM9bmV3IF9yLE11bih0aGlzKX1mdW5jdGlvbiBYd3QodCl7aWYodC5lLmMhPXQuYil0aHJvdyBpdChuZXcgcmgpfWZ1bmN0aW9uIFF3dCh0KXtpZih0LmMuZSE9dC5hKXRocm93IGl0KG5ldyByaCl9ZnVuY3Rpb24gQXIodCl7cmV0dXJuIEJvKHQpP3R8MDpSSHQodCl9ZnVuY3Rpb24gWWoodCxlKXtyZXR1cm4gZ2koKSxuZXcgbXZ0KHQsZSl9ZnVuY3Rpb24gam50KHQsZSl7cmV0dXJuIHQ9PW51bGw/ZT09bnVsbDpobih0LGUpfWZ1bmN0aW9uICRlbih0LGUpe3JldHVybiB0PT1udWxsP2U9PW51bGw6VnoodCxlKX1mdW5jdGlvbiB6eCh0LGUsbil7cmV0dXJuIHZmKHQuYSxlKSxwdnQodCxlLmcsbil9ZnVuY3Rpb24gJG50KHQsZSxuKXtCcmUoMCxlLHQubGVuZ3RoKSwkOCh0LDAsZSxuKX1mdW5jdGlvbiBIbSh0LGUsbil7S20oZSx0LmMubGVuZ3RoKSxYQyh0LmMsZSxuKX1mdW5jdGlvbiBBS3QodCxlLG4pe3ZhciByO2ZvcihyPTA7cjxlOysrcil0W3JdPW59ZnVuY3Rpb24gamkodCxlKXt2YXIgbjtyZXR1cm4gbj11bih0KSxPeXQobixlKSxufWZ1bmN0aW9uIHplbih0LGUpe3JldHVybiF0JiYodD1bXSksdFt0Lmxlbmd0aF09ZSx0fWZ1bmN0aW9uIHFlbih0LGUpe3JldHVybiB0LmEuZ2V0KGUpIT09dm9pZCAwfWZ1bmN0aW9uIExLdCh0LGUpe3JldHVybiBiY24obmV3IGZvLG5ldyBZdCh0KSxlKX1mdW5jdGlvbiBIZW4odCl7cmV0dXJuIHQ9PW51bGw/aVY6bmV3IENSKE9uKHQpKX1mdW5jdGlvbiB6bnQodCxlKXtyZXR1cm4gX3QoZSwyMikmJk51KHQsdShlLDIyKSl9ZnVuY3Rpb24gTUt0KHQsZSl7cmV0dXJuIF90KGUsMjIpJiZVb24odCx1KGUsMjIpKX1mdW5jdGlvbiBad3QodCl7cmV0dXJuIHVsKHQsMjYpKklfK3VsKHQsMjcpKk9ffWZ1bmN0aW9uIEp3dCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5pbT09PUV0fWZ1bmN0aW9uIEtqKHQpe3QuYj9Laih0LmIpOnQuZC5kYygpJiZ0LmYuYy5CYyh0LmUpfWZ1bmN0aW9uIHFudCh0LGUpe0xpKHQuYyxlKSx0LmIuYys9ZS5hLHQuYi5kKz1lLmJ9ZnVuY3Rpb24gVmVuKHQsZSl7cW50KHQsaWEobmV3ICRlKGUuYSxlLmIpLHQuYykpfWZ1bmN0aW9uIEhudCh0LGUpe3RoaXMuYj1uZXcgWmksdGhpcy5hPXQsdGhpcy5jPWV9ZnVuY3Rpb24gREt0KCl7dGhpcy5iPW5ldyBTYyx0aGlzLmM9bmV3IGNRdCh0aGlzKX1mdW5jdGlvbiB0dnQoKXt0aGlzLmQ9bmV3IER1LHRoaXMuZT1uZXcgb1F0KHRoaXMpfWZ1bmN0aW9uIGV2dCgpe1V2dCgpLHRoaXMuZj1uZXcgWmksdGhpcy5lPW5ldyBaaX1mdW5jdGlvbiBJS3QoKXtGbCgpLHRoaXMuaz1uZXcgX3IsdGhpcy5kPW5ldyBIc31mdW5jdGlvbiBWbnQoKXtWbnQ9WixWNGU9bmV3IGVvKCh1aSgpLGRsKSwwKX1mdW5jdGlvbiBPS3QoKXtPS3Q9WixMZ2U9bmV3IF9LdChOdChRbixEZSwxLDAsNSwxKSl9ZnVuY3Rpb24gR2VuKHQsZSxuKXtDY2Uobix0LDEpLGxlKGUsbmV3IHJHdChuLHQpKX1mdW5jdGlvbiBVZW4odCxlLG4pe2hfKG4sdCwxKSxsZShlLG5ldyBsR3Qobix0KSl9ZnVuY3Rpb24gV2VuKHQsZSxuKXtyZXR1cm4gRnModCxuZXcgRHgoZS5hLG4uYSkpfWZ1bmN0aW9uIFllbih0LGUsbil7cmV0dXJuLXB1KHQuZltlLnBdLHQuZltuLnBdKX1mdW5jdGlvbiBYaih0LGUsbil7dmFyIHI7dCYmKHI9dC5pLHIuYz1lLHIuYj1uKX1mdW5jdGlvbiBRaih0LGUsbil7dmFyIHI7dCYmKHI9dC5pLHIuZD1lLHIuYT1uKX1mdW5jdGlvbiBLdSh0LGUsbil7cmV0dXJuIHQuYT0tMSxSMnQodCxlLmcrMSxuKSx0fWZ1bmN0aW9uIG52dCh0LGUsbil7cmV0dXJuIG49SGwodCx1KGUsNDkpLDcsbiksbn1mdW5jdGlvbiBydnQodCxlLG4pe3JldHVybiBuPUhsKHQsdShlLDQ5KSwzLG4pLG59ZnVuY3Rpb24gUEt0KHQsZSxuKXt0aGlzLmE9dCxrai5jYWxsKHRoaXMsZSxuLDIyKX1mdW5jdGlvbiBGS3QodCxlLG4pe3RoaXMuYT10LGtqLmNhbGwodGhpcyxlLG4sMTQpfWZ1bmN0aW9uIE5LdCh0LGUsbixyKXtpaCgpLGJadC5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gQkt0KHQsZSxuLHIpe2loKCksYlp0LmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBLZW4odCxlKXtlLkJiJmRjJiYhdC5hLm8mJih0LmEubz1lKX1mdW5jdGlvbiBSS3QodCl7cmV0dXJuIHQhPW51bGwmJlpudCh0KSYmdC5pbSE9PUV0fWZ1bmN0aW9uIGl2dCh0KXtyZXR1cm4hQXJyYXkuaXNBcnJheSh0KSYmdC5pbT09PUV0fWZ1bmN0aW9uIFhlbih0KXtyZXR1cm4gX3QodCwxNSk/dSh0LDE1KS5ZYygpOnQuS2MoKX1mdW5jdGlvbiBzdnQodCl7cmV0dXJuIHQuUWMoTnQoUW4sRGUsMSx0LmdjKCksNSwxKSl9ZnVuY3Rpb24gQzkodCxlKXtyZXR1cm4gbGZuKFREKHQsZSkpP2UuUWgoKTpudWxsfWZ1bmN0aW9uIGF2dCh0KXt0P1gzdCh0LChHZCgpLHZFdCkpOkdkKCl9ZnVuY3Rpb24gYXIodCl7dGhpcy5hPShPS3QoKSxMZ2UpLHRoaXMuZD11KExyKHQpLDQ3KX1mdW5jdGlvbiBvdnQodCxlLG4scil7dGhpcy5hPXQscSQuY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIGUyKHQpe0ZwKCksdGhpcy5hPTAsdGhpcy5iPXQtMSx0aGlzLmM9MX1mdW5jdGlvbiBqS3QodCl7eWoodGhpcyksdGhpcy5nPXQsZCQodGhpcyksdGhpcy5fZCgpfWZ1bmN0aW9uIFJ3KHQpe3JldHVybiB0LmM/dC5jOnQuYz10LklkKCl9ZnVuY3Rpb24gR250KHQpe3JldHVybiB0LmQ/dC5kOnQuZD10LkpkKCl9ZnVuY3Rpb24gY3Z0KHQpe3ZhciBlO3JldHVybiBlPXQuYyxlfHwodC5jPXQuRGQoKSl9ZnVuY3Rpb24gJEt0KHQpe3ZhciBlO3JldHVybiBlPXQuZixlfHwodC5mPXQuRGMoKSl9ZnVuY3Rpb24gcXgodCl7dmFyIGU7cmV0dXJuIGU9dC5pLGV8fCh0Lmk9dC5iYygpKX1mdW5jdGlvbiB6S3QodCl7cmV0dXJuIGdpKCksbmV3IGtydCgxMCx0LDApfWZ1bmN0aW9uIF85KHQpe3JldHVybiBCbyh0KT8iIit0Ol91ZSh0KX1mdW5jdGlvbiBaaih0KXtpZih0LmUuaiE9dC5kKXRocm93IGl0KG5ldyByaCl9ZnVuY3Rpb24gRjAodCxlKXtyZXR1cm4gS3AoV2FlKEJvKHQpP0xoKHQpOnQsZSkpfWZ1bmN0aW9uICRwKHQsZSl7cmV0dXJuIEtwKHY1dChCbyh0KT9MaCh0KTp0LGUpKX1mdW5jdGlvbiBWbSh0LGUpe3JldHVybiBLcChaZ24oQm8odCk/TGgodCk6dCxlKSl9ZnVuY3Rpb24gUWVuKHQsZSl7cmV0dXJuIExaZSgoT24odCksdCksKE9uKGUpLGUpKX1mdW5jdGlvbiBVbnQodCxlKXtyZXR1cm4gTXMoKE9uKHQpLHQpLChPbihlKSxlKSl9ZnVuY3Rpb24gcUt0KHQsZSl7cmV0dXJuIExyKGUpLHQuYS5BZChlKSYmIXQuYi5BZChlKX1mdW5jdGlvbiBaZW4odCxlKXtyZXR1cm4gaXUodC5sJmUubCx0Lm0mZS5tLHQuaCZlLmgpfWZ1bmN0aW9uIEplbih0LGUpe3JldHVybiBpdSh0Lmx8ZS5sLHQubXxlLm0sdC5ofGUuaCl9ZnVuY3Rpb24gdG5uKHQsZSl7cmV0dXJuIGl1KHQubF5lLmwsdC5tXmUubSx0LmheZS5oKX1mdW5jdGlvbiBKaih0LGUpe3JldHVybiBXRCh0LChPbihlKSxuZXcgUHQoZSkpKX1mdW5jdGlvbiB0JCh0LGUpe3JldHVybiBXRCh0LChPbihlKSxuZXcgJHQoZSkpKX1mdW5jdGlvbiBIS3QodCl7cmV0dXJuIGp1KCksdSh0LDExKS5lLmMubGVuZ3RoIT0wfWZ1bmN0aW9uIFZLdCh0KXtyZXR1cm4ganUoKSx1KHQsMTEpLmcuYy5sZW5ndGghPTB9ZnVuY3Rpb24gZW5uKHQsZSl7cmV0dXJuIHI2KCksTXMoZS5hLm8uYSx0LmEuby5hKX1mdW5jdGlvbiBHS3QodCxlLG4pe3JldHVybiBSNW4odCx1KGUsMTEpLHUobiwxMSkpfWZ1bmN0aW9uIG5ubih0KXtyZXR1cm4gdC5lP0NtdCh0LmUpOm51bGx9ZnVuY3Rpb24gdXZ0KHQpe3QuZHx8KHQuZD10LmIuS2MoKSx0LmM9dC5iLmdjKCkpfWZ1bmN0aW9uIHJubih0LGUsbil7dC5hLk1iKG4pJiYodC5iPSEwLGUudGQobikpfWZ1bmN0aW9uIFQ4KHQsZSl7aWYodDwwfHx0Pj1lKXRocm93IGl0KG5ldyBPcHQpfWZ1bmN0aW9uIGlubih0LGUsbil7cmV0dXJuIHRzKGUsMCxZd3QoZVswXSxuWzBdKSksZX1mdW5jdGlvbiBzbm4odCxlLG4pe2UuWWUobixYdCh5ZSh0cih0LmIsbikpKSp0LmEpfWZ1bmN0aW9uIFVLdCh0LGUsbil7cmV0dXJuIGs0KCksUTgodCxlKSYmUTgodCxuKX1mdW5jdGlvbiBTOSh0KXtyZXR1cm4gWnUoKSwhdC5IYyhzZykmJiF0LkhjKENiKX1mdW5jdGlvbiBlJCh0KXtyZXR1cm4gbmV3ICRlKHQuYyt0LmIvMix0LmQrdC5hLzIpfWZ1bmN0aW9uIFdudCh0LGUpe3JldHVybiBlLmtoKCk/WnAodC5iLHUoZSw0OSkpOmV9ZnVuY3Rpb24gbHZ0KHQsZSl7dGhpcy5lPXQsdGhpcy5kPWUmNjQ/ZXxtZDplfWZ1bmN0aW9uIFdLdCh0LGUpe3RoaXMuYz0wLHRoaXMuZD10LHRoaXMuYj1lfDY0fG1kfWZ1bmN0aW9uIG4kKHQpe3RoaXMuYj1uZXcgWGMoMTEpLHRoaXMuYT0oWjMoKSx0KX1mdW5jdGlvbiBZbnQodCl7dGhpcy5iPW51bGwsdGhpcy5hPShaMygpLHR8fF9FdCl9ZnVuY3Rpb24gWUt0KHQpe3RoaXMuYT13c2UodC5hKSx0aGlzLmI9bmV3IEJ1KHQuYil9ZnVuY3Rpb24gS0t0KHQpe3RoaXMuYj10LE54LmNhbGwodGhpcyx0KSxaVXQodGhpcyl9ZnVuY3Rpb24gWEt0KHQpe3RoaXMuYj10LCRNLmNhbGwodGhpcyx0KSxKVXQodGhpcyl9ZnVuY3Rpb24gR20odCxlLG4pe3RoaXMuYT10LFJ4LmNhbGwodGhpcyxlLG4sNSw2KX1mdW5jdGlvbiBodnQodCxlLG4scil7dGhpcy5iPXQsQXMuY2FsbCh0aGlzLGUsbixyKX1mdW5jdGlvbiBKcyh0LGUsbixyLHMpe0pydC5jYWxsKHRoaXMsdCxlLG4scixzLC0xKX1mdW5jdGlvbiBBOSh0LGUsbixyLHMpe21ELmNhbGwodGhpcyx0LGUsbixyLHMsLTEpfWZ1bmN0aW9uIGZlKHQsZSxuLHIpe0FzLmNhbGwodGhpcyx0LGUsbiksdGhpcy5iPXJ9ZnVuY3Rpb24gciQodCxlLG4scil7Wk0uY2FsbCh0aGlzLHQsZSxuKSx0aGlzLmI9cn1mdW5jdGlvbiBRS3QodCl7dFV0LmNhbGwodGhpcyx0LCExKSx0aGlzLmE9ITF9ZnVuY3Rpb24gWkt0KHQsZSl7dGhpcy5iPXQsd3R0LmNhbGwodGhpcyx0LmIpLHRoaXMuYT1lfWZ1bmN0aW9uIEpLdCh0LGUpe1dtKCksY1hlLmNhbGwodGhpcyx0LER6KG5ldyB5bChlKSkpfWZ1bmN0aW9uIGkkKHQsZSl7cmV0dXJuIGdpKCksbmV3IEN2dCh0LGUsMCl9ZnVuY3Rpb24gS250KHQsZSl7cmV0dXJuIGdpKCksbmV3IEN2dCg2LHQsZSl9ZnVuY3Rpb24gYW5uKHQsZSl7cmV0dXJuIGhuKHQuc3Vic3RyKDAsZS5sZW5ndGgpLGUpfWZ1bmN0aW9uIFRsKHQsZSl7cmV0dXJuIHJhKGUpP3dydCh0LGUpOiEhTG8odC5mLGUpfWZ1bmN0aW9uIGJhKHQsZSl7Zm9yKE9uKGUpO3QuT2IoKTspZS50ZCh0LlBiKCkpfWZ1bmN0aW9uIFgzKHQsZSxuKXtyYigpLHRoaXMuZT10LHRoaXMuZD1lLHRoaXMuYT1ufWZ1bmN0aW9uIE9nKHQsZSxuLHIpe3ZhciBzO3M9dC5pLHMuaT1lLHMuYT1uLHMuYj1yfWZ1bmN0aW9uIGZ2dCh0KXt2YXIgZTtmb3IoZT10O2UuZjspZT1lLmY7cmV0dXJuIGV9ZnVuY3Rpb24gSHgodCl7dmFyIGU7cmV0dXJuIGU9UTkodCksWm4oZSE9bnVsbCksZX1mdW5jdGlvbiBvbm4odCl7dmFyIGU7cmV0dXJuIGU9VWxuKHQpLFpuKGUhPW51bGwpLGV9ZnVuY3Rpb24gQzgodCxlKXt2YXIgbjtyZXR1cm4gbj10LmEuZ2MoKSxFbXQoZSxuKSxuLWV9ZnVuY3Rpb24gZHZ0KHQsZSl7dmFyIG47Zm9yKG49MDtuPGU7KytuKXRbbl09ITF9ZnVuY3Rpb24gY25uKHQsZSxuLHIpe3ZhciBzO2ZvcihzPWU7czxuOysrcyl0W3NdPXJ9ZnVuY3Rpb24ganQodCxlLG4scil7QnJlKGUsbix0Lmxlbmd0aCksY25uKHQsZSxuLHIpfWZ1bmN0aW9uIHVubih0LGUsbil7VDgobix0LmEuYy5sZW5ndGgpLGNoKHQuYSxuLGUpfWZ1bmN0aW9uIGd2dCh0LGUsbil7dGhpcy5jPXQsdGhpcy5hPWUsd24oKSx0aGlzLmI9bn1mdW5jdGlvbiBwdnQodCxlLG4pe3ZhciByO3JldHVybiByPXQuYltlXSx0LmJbZV09bixyfWZ1bmN0aW9uIEZzKHQsZSl7dmFyIG47cmV0dXJuIG49dC5hLnpjKGUsdCksbj09bnVsbH1mdW5jdGlvbiBsbm4odCl7aWYoIXQpdGhyb3cgaXQobmV3IGxjKTtyZXR1cm4gdC5kfWZ1bmN0aW9uIGJ2dCh0LGUpe2lmKHQ9PW51bGwpdGhyb3cgaXQobmV3IFN4KGUpKX1mdW5jdGlvbiB3dnQodCxlKXtyZXR1cm4gZT9VYSh0LGUpOiExfWZ1bmN0aW9uIEtkKHQsZSxuKXtyZXR1cm4gaWxuKHQsZS5nLG4pLHZmKHQuYyxlKSx0fWZ1bmN0aW9uIGhubih0KXtyZXR1cm4gXzQodCwoYW8oKSx6aCkpLHQuZD0hMCx0fWZ1bmN0aW9uIFhudCh0KXtyZXR1cm4hdC5qJiZqdHQodCxNbW4odC5nLHQuYikpLHQuan1mdW5jdGlvbiBMOSh0KXtSbSh0LmIhPS0xKSxGZyh0LmMsdC5hPXQuYiksdC5iPS0xfWZ1bmN0aW9uIFh1KHQpe3QuZj1uZXcga1V0KHQpLHQuZz1uZXcgRVV0KHQpLHckKHQpfWZ1bmN0aW9uIFFudCh0KXtyZXR1cm4gbmV3IFRuKG51bGwsYm5uKHQsdC5sZW5ndGgpKX1mdW5jdGlvbiB6cCh0KXtyZXR1cm4gbmV3IGFyKG5ldyBDMnQodC5hLmxlbmd0aCx0LmEpKX1mdW5jdGlvbiBmbm4odCl7cmV0dXJuIGl1KH50LmwmaGwsfnQubSZobCx+dC5oJlowKX1mdW5jdGlvbiBabnQodCl7cmV0dXJuIHR5cGVvZiB0PT09TUl8fHR5cGVvZiB0PT09R2F0fWZ1bmN0aW9uIGRubih0KXtyZXR1cm4gdD09YXM/b086dD09Q3M/Ii1JTkYiOiIiK3R9ZnVuY3Rpb24gZ25uKHQpe3JldHVybiB0PT1hcz9vTzp0PT1Dcz8iLUlORiI6IiIrdH1mdW5jdGlvbiBwbm4odCxlKXtyZXR1cm4gdD4wP2IuTWF0aC5sb2codC9lKTotMTAwfWZ1bmN0aW9uIHRYdCh0LGUpe3JldHVybiB5Yyh0LGUpPDA/LTE6eWModCxlKT4wPzE6MH1mdW5jdGlvbiB2dnQodCxlLG4pe3JldHVybiBHbGUodCx1KGUsNDYpLHUobiwxNjcpKX1mdW5jdGlvbiBlWHQodCxlKXtyZXR1cm4gdShjdnQoUncodC5hKSkuWGIoZSksNDIpLmNkKCl9ZnVuY3Rpb24gYm5uKHQsZSl7cmV0dXJuIGpvbihlLHQubGVuZ3RoKSxuZXcgaUt0KHQsZSl9ZnVuY3Rpb24gSm50KHQsZSl7dGhpcy5kPXQsbnIuY2FsbCh0aGlzLHQpLHRoaXMuZT1lfWZ1bmN0aW9uIGp3KHQpe3RoaXMuZD0oT24odCksdCksdGhpcy5hPTAsdGhpcy5jPXFxfWZ1bmN0aW9uIG12dCh0LGUpe3l3LmNhbGwodGhpcywxKSx0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBuWHQodCxlKXtyZXR1cm4gdC5jP25YdCh0LmMsZSk6bGUodC5iLGUpLHR9ZnVuY3Rpb24gd25uKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj1KbSh0LGUpLEJydCh0LGUsbikscn1mdW5jdGlvbiB5dnQodCxlKXt2YXIgbjtyZXR1cm4gbj10LnNsaWNlKDAsZSksQm10KG4sdCl9ZnVuY3Rpb24gclh0KHQsZSxuKXt2YXIgcjtmb3Iocj0wO3I8ZTsrK3IpdHModCxyLG4pfWZ1bmN0aW9uIGlYdCh0LGUsbixyLHMpe2Zvcig7ZTxuOylyW3MrK109d2EodCxlKyspfWZ1bmN0aW9uIHZubih0LGUpe3JldHVybiBNcyh0LmMuYyt0LmMuYixlLmMuYytlLmMuYil9ZnVuY3Rpb24gdEQodCxlKXtyZXR1cm4gX3oodC5hLGUsKE5uKCksRjIpKT09bnVsbH1mdW5jdGlvbiBlRCh0LGUpe2ZzKHQuZCxlLHQuYi5iLHQuYiksKyt0LmEsdC5jPW51bGx9ZnVuY3Rpb24gbkQodCxlKXtZVXQodCxfdChlLDE1Myk/ZTp1KGUsMTkzNykuZ2woKSl9ZnVuY3Rpb24gJHcodCxlKXtscyh3dSh0Lk9jKCksbmV3IFVUKSxuZXcgV3R0KGUpKX1mdW5jdGlvbiBfOCh0LGUsbixyLHMpe05zdCh0LHUoQWkoZS5rLG4pLDE1KSxuLHIscyl9ZnVuY3Rpb24gcyQodCl7dC5zPU5hTix0LmM9TmFOLGhjZSh0LHQuZSksaGNlKHQsdC5qKX1mdW5jdGlvbiBzWHQodCl7dC5hPW51bGwsdC5lPW51bGwsWHUodC5iKSx0LmQ9MCwrK3QuY31mdW5jdGlvbiB0cnQodCl7cmV0dXJuIGIuTWF0aC5hYnModC5kLmUtdC5lLmUpLXQuYX1mdW5jdGlvbiBtbm4odCxlLG4pe3JldHVybiB1KHQuYy5fYyhlLHUobiwxMzMpKSw0Mil9ZnVuY3Rpb24geW5uKCl7cmV0dXJuIFRSKCksbHQoY3QoTWdlLDEpLG9lLDUzOCwwLFtNdXRdKX1mdW5jdGlvbiB4bm4odCl7cmV0dXJuIFV4KCksZXMoZTAodCkpPT1lcyh0Yih0KSl9ZnVuY3Rpb24gYVh0KHQpe293dC5jYWxsKHRoaXMpLHRoaXMuYT10LGxlKHQuYSx0aGlzKX1mdW5jdGlvbiBlcnQodCxlKXt0aGlzLmQ9V2xuKHQpLHRoaXMuYz1lLHRoaXMuYT0uNSplfWZ1bmN0aW9uIG9YdCgpe2EyLmNhbGwodGhpcyksdGhpcy5hPSEwLHRoaXMuYj0hMH1mdW5jdGlvbiBKbih0KXtyZXR1cm4odC5pPT1udWxsJiZ2ZCh0KSx0LmkpLmxlbmd0aH1mdW5jdGlvbiBjWHQodCl7cmV0dXJuIF90KHQsOTkpJiYodSh0LDE4KS5CYiZkYykhPTB9ZnVuY3Rpb24ga25uKHQsZSl7Kyt0LmosUnN0KHQsdC5pLGUpLGxibih0LHUoZSwzMzIpKX1mdW5jdGlvbiBucnQodCxlKXtyZXR1cm4gZT10Lm5rKG51bGwsZSksTGFlKHQsbnVsbCxlKX1mdW5jdGlvbiBpcyh0LGUpe3JldHVybiB0LmhpKCkmJihlPURRdCh0LGUpKSx0LldoKGUpfWZ1bmN0aW9uIEYodCxlLG4pe3ZhciByO3JldHVybiByPXJydCh0LGUpLFFlZShuLHIpLHJ9ZnVuY3Rpb24gcnJ0KHQsZSl7dmFyIG47cmV0dXJuIG49bmV3IEx5dCxuLmo9dCxuLmQ9ZSxufWZ1bmN0aW9uIExyKHQpe2lmKHQ9PW51bGwpdGhyb3cgaXQobmV3IElDKTtyZXR1cm4gdH1mdW5jdGlvbiBpcnQodCl7dmFyIGU7cmV0dXJuIGU9dC5qLGV8fCh0Lmo9bmV3IHh0dCh0KSl9ZnVuY3Rpb24gdVh0KHQpe3ZhciBlO3JldHVybiBlPXQuZixlfHwodC5mPW5ldyBUMnQodCkpfWZ1bmN0aW9uIHh2dCh0KXt2YXIgZTtyZXR1cm4gZT10LmssZXx8KHQuaz1uZXcgSTModCkpfWZ1bmN0aW9uIGEkKHQpe3ZhciBlO3JldHVybiBlPXQuayxlfHwodC5rPW5ldyBJMyh0KSl9ZnVuY3Rpb24gTTkodCl7dmFyIGU7cmV0dXJuIGU9dC5nLGV8fCh0Lmc9bmV3IG5NKHQpKX1mdW5jdGlvbiBFbm4odCl7dmFyIGU7cmV0dXJuIGU9dC5pLGV8fCh0Lmk9bmV3IGR0dCh0KSl9ZnVuY3Rpb24gc3J0KHQpe3ZhciBlO3JldHVybiBlPXQuZCxlfHwodC5kPW5ldyBweCh0KSl9ZnVuY3Rpb24gbFh0KHQpe3JldHVybiBMcih0KSxfdCh0LDQ3NSk/dSh0LDQ3NSk6JG8odCl9ZnVuY3Rpb24ga3Z0KHQpe3JldHVybiBfdCh0LDYwNyk/dDpuZXcgbVF0KHQpfWZ1bmN0aW9uIGhYdCh0LGUpe3JldHVybiBmRChlLHQuYy5iLmMuZ2MoKSksbmV3IHVWdCh0LGUpfWZ1bmN0aW9uIGZYdCh0LGUsbil7cmV0dXJuIGdpKCksbmV3IG9adCh0LGUsbil9ZnVuY3Rpb24gdHModCxlLG4pe3JldHVybiByWmUobj09bnVsbHx8ZnluKHQsbikpLHRbZV09bn1mdW5jdGlvbiBFdnQodCxlKXt2YXIgbjtyZXR1cm4gbj10LmEuZ2MoKSxmRChlLG4pLG4tMS1lfWZ1bmN0aW9uIFM4KHQsZSl7cmV0dXJuIHQuYSs9U3RyaW5nLmZyb21DaGFyQ29kZShlKSx0fWZ1bmN0aW9uIHFwKHQsZSl7cmV0dXJuIHQuYSs9U3RyaW5nLmZyb21DaGFyQ29kZShlKSx0fWZ1bmN0aW9uIGFydCh0LGUpe2ZvcihPbihlKTt0LmM8dC5kOyl0LnplKGUsdC5jKyspfWZ1bmN0aW9uIHRyKHQsZSl7cmV0dXJuIHJhKGUpP05jKHQsZSk6ZWMoTG8odC5mLGUpKX1mdW5jdGlvbiBUbm4odCxlKXtyZXR1cm4gVXgoKSx0PT1lMChlKT90YihlKTplMChlKX1mdW5jdGlvbiBDbm4odCxlKXtWeCh0LG5ldyBVbShlLmYhPW51bGw/ZS5mOiIiK2UuZykpfWZ1bmN0aW9uIF9ubih0LGUpe1Z4KHQsbmV3IFVtKGUuZiE9bnVsbD9lLmY6IiIrZS5nKSl9ZnVuY3Rpb24gZFh0KHQpe3RoaXMuYj1uZXcgaGUsdGhpcy5hPW5ldyBoZSx0aGlzLmM9dH1mdW5jdGlvbiBTaCh0KXt0aGlzLmM9bmV3IENhLHRoaXMuYT1uZXcgaGUsdGhpcy5iPXR9ZnVuY3Rpb24gZ1h0KHQpe293dC5jYWxsKHRoaXMpLHRoaXMuYT1uZXcgQ2EsdGhpcy5jPXR9ZnVuY3Rpb24gVW0odCl7aWYodD09bnVsbCl0aHJvdyBpdChuZXcgSUMpO3RoaXMuYT10fWZ1bmN0aW9uIHBYdCh0KXtJcHQoKSx0aGlzLmI9bmV3IGhlLHRoaXMuYT10LEU0bih0aGlzLHQpfWZ1bmN0aW9uIGJYdCh0KXt0aGlzLmM9dCx0aGlzLmE9bmV3IFppLHRoaXMuYj1uZXcgWml9ZnVuY3Rpb24gd1h0KCl7d1h0PVosRmdlPW5ldyBYayghMSksTmdlPW5ldyBYayghMCl9ZnVuY3Rpb24gV20oKXtXbT1aLGdkKCksQXV0PW5ldyB2cnQoKHduKCksd24oKSxpbykpfWZ1bmN0aW9uIG9ydCgpe29ydD1aLGdkKCksZUV0PW5ldyBTYnQoKHduKCksd24oKSxyVikpfWZ1bmN0aW9uIEhwKCl7SHA9WixMbj11Ym4oKSxkbigpLHIzJiZiZG4oKX1mdW5jdGlvbiBTbm4odCxlKXtyZXR1cm4gcjYoKSx1KHBvKHQsZS5kKSwxNSkuRmMoZSl9ZnVuY3Rpb24gQW5uKHQsZSxuLHIpe3JldHVybiBuPT0wfHwobi1yKS9uPHQuZXx8ZT49dC5nfWZ1bmN0aW9uIGNydCh0LGUsbil7dmFyIHI7cmV0dXJuIHI9bWl0KHQsZSxuKSxZNXQodCxyKX1mdW5jdGlvbiBWeCh0LGUpe3ZhciBuO249dC5hLmxlbmd0aCxKbSh0LG4pLEJydCh0LG4sZSl9ZnVuY3Rpb24gdlh0KHQsZSl7dmFyIG47bj1jb25zb2xlW3RdLG4uY2FsbChjb25zb2xlLGUpfWZ1bmN0aW9uIG1YdCh0LGUpe3ZhciBuOysrdC5qLG49dC5WaSgpLHQuSWkodC5vaShuLGUpKX1mdW5jdGlvbiBMbm4odCxlLG4pe3UoZS5iLDY1KSx4dShlLmEsbmV3IFN3dCh0LG4sZSkpfWZ1bmN0aW9uIFR2dCh0LGUsbil7dlIuY2FsbCh0aGlzLGUpLHRoaXMuYT10LHRoaXMuYj1ufWZ1bmN0aW9uIEN2dCh0LGUsbil7eXcuY2FsbCh0aGlzLHQpLHRoaXMuYT1lLHRoaXMuYj1ufWZ1bmN0aW9uIF92dCh0LGUsbil7dGhpcy5hPXQsQ3B0LmNhbGwodGhpcyxlKSx0aGlzLmI9bn1mdW5jdGlvbiB5WHQodCxlLG4pe3RoaXMuYT10LG5tdC5jYWxsKHRoaXMsOCxlLG51bGwsbil9ZnVuY3Rpb24gTW5uKHQpe3RoaXMuYT0oT24oWXIpLFlyKSx0aGlzLmI9dCxuZXcgVXB0fWZ1bmN0aW9uIHhYdCh0KXt0aGlzLmM9dCx0aGlzLmI9dGhpcy5jLmEsdGhpcy5hPXRoaXMuYy5lfWZ1bmN0aW9uIFN2dCh0KXt0aGlzLmM9dCx0aGlzLmI9dC5hLmQuYSxZMnQodC5hLmUsdGhpcyl9ZnVuY3Rpb24gQ2wodCl7Um0odC5jIT0tMSksdC5kLiRjKHQuYyksdC5iPXQuYyx0LmM9LTF9ZnVuY3Rpb24gRDkodCl7cmV0dXJuIGIuTWF0aC5zcXJ0KHQuYSp0LmErdC5iKnQuYil9ZnVuY3Rpb24gencodCxlKXtyZXR1cm4gVDgoZSx0LmEuYy5sZW5ndGgpLE5lKHQuYSxlKX1mdW5jdGlvbiBwZCh0LGUpe3JldHVybiBWdCh0KT09PVZ0KGUpfHx0IT1udWxsJiZ5aSh0LGUpfWZ1bmN0aW9uIERubih0KXtyZXR1cm4gMD49dD9uZXcgbWJ0Ondjbih0LTEpfWZ1bmN0aW9uIElubih0KXtyZXR1cm4gczM/d3J0KHMzLHQpOiExfWZ1bmN0aW9uIGtYdCh0KXtyZXR1cm4gdD90LmRjKCk6IXQuS2MoKS5PYigpfWZ1bmN0aW9uIE5hKHQpe3JldHVybiF0LmEmJnQuYz90LmMuYjp0LmF9ZnVuY3Rpb24gT25uKHQpe3JldHVybiF0LmEmJih0LmE9bmV3IEFzKF9iLHQsNCkpLHQuYX1mdW5jdGlvbiBxdyh0KXtyZXR1cm4hdC5kJiYodC5kPW5ldyBBcyhobyx0LDEpKSx0LmR9ZnVuY3Rpb24gT24odCl7aWYodD09bnVsbCl0aHJvdyBpdChuZXcgSUMpO3JldHVybiB0fWZ1bmN0aW9uIEk5KHQpe3QuYz90LmMuSGUoKToodC5kPSEwLFJ3bih0KSl9ZnVuY3Rpb24gVnAodCl7dC5jP1ZwKHQuYyk6KHcyKHQpLHQuZD0hMCl9ZnVuY3Rpb24gRVh0KHQpe0R2dCh0LmEpLHQuYj1OdChRbixEZSwxLHQuYi5sZW5ndGgsNSwxKX1mdW5jdGlvbiBQbm4odCxlKXtyZXR1cm4gcHUoZS5qLmMubGVuZ3RoLHQuai5jLmxlbmd0aCl9ZnVuY3Rpb24gRm5uKHQsZSl7dC5jPDB8fHQuYi5iPHQuYz9aYih0LmIsZSk6dC5hLl9lKGUpfWZ1bmN0aW9uIE5ubih0LGUpe3ZhciBuO249dC5ZZyhlKSxuPj0wP3QuQmgobik6aTV0KHQsZSl9ZnVuY3Rpb24gVFh0KHQpe3ZhciBlLG47cmV0dXJuIGU9dC5jLmkuYyxuPXQuZC5pLmMsZT09bn1mdW5jdGlvbiBCbm4odCl7aWYodC5wIT00KXRocm93IGl0KG5ldyBPdSk7cmV0dXJuIHQuZX1mdW5jdGlvbiBSbm4odCl7aWYodC5wIT0zKXRocm93IGl0KG5ldyBPdSk7cmV0dXJuIHQuZX1mdW5jdGlvbiBqbm4odCl7aWYodC5wIT02KXRocm93IGl0KG5ldyBPdSk7cmV0dXJuIHQuZn1mdW5jdGlvbiAkbm4odCl7aWYodC5wIT02KXRocm93IGl0KG5ldyBPdSk7cmV0dXJuIHQua31mdW5jdGlvbiB6bm4odCl7aWYodC5wIT0zKXRocm93IGl0KG5ldyBPdSk7cmV0dXJuIHQuan1mdW5jdGlvbiBxbm4odCl7aWYodC5wIT00KXRocm93IGl0KG5ldyBPdSk7cmV0dXJuIHQuan1mdW5jdGlvbiBBdnQodCl7cmV0dXJuIXQuYiYmKHQuYj1uZXcgbVIobmV3IGFldCkpLHQuYn1mdW5jdGlvbiBIdyh0KXtyZXR1cm4gdC5jPT0tMiYmSmsodCxhZ24odC5nLHQuYikpLHQuY31mdW5jdGlvbiBBOCh0LGUpe3ZhciBuO3JldHVybiBuPXJydCgiIix0KSxuLm49ZSxuLmk9MSxufWZ1bmN0aW9uIEhubih0LGUpe3FudCh1KGUuYiw2NSksdCkseHUoZS5hLG5ldyBKcih0KSl9ZnVuY3Rpb24gVm5uKHQsZSl7RHIoKCF0LmEmJih0LmE9bmV3IEdNKHQsdCkpLHQuYSksZSl9ZnVuY3Rpb24gQ1h0KHQsZSl7dGhpcy5iPXQsSm50LmNhbGwodGhpcyx0LGUpLFpVdCh0aGlzKX1mdW5jdGlvbiBfWHQodCxlKXt0aGlzLmI9dCx3d3QuY2FsbCh0aGlzLHQsZSksSlV0KHRoaXMpfWZ1bmN0aW9uIEx2dCh0LGUsbixyKXtMdy5jYWxsKHRoaXMsdCxlKSx0aGlzLmQ9bix0aGlzLmE9cn1mdW5jdGlvbiBvJCh0LGUsbixyKXtMdy5jYWxsKHRoaXMsdCxuKSx0aGlzLmE9ZSx0aGlzLmY9cn1mdW5jdGlvbiBTWHQodCxlKXtUUWUuY2FsbCh0aGlzLHZjbihMcih0KSxMcihlKSkpLHRoaXMuYT1lfWZ1bmN0aW9uIEFYdCgpe040dC5jYWxsKHRoaXMsTzIsKERIdCgpLEw1ZSkpLGY0bih0aGlzKX1mdW5jdGlvbiBMWHQoKXtONHQuY2FsbCh0aGlzLEJoLChjOCgpLGFMdCkpLHgzbih0aGlzKX1mdW5jdGlvbiBNWHQoKXtWci5jYWxsKHRoaXMsIkRFTEFVTkFZX1RSSUFOR1VMQVRJT04iLDApfWZ1bmN0aW9uIEdubih0KXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQpfWZ1bmN0aW9uIGtpKHQsZSxuKXtyZXR1cm4gcmEoZSk/a28odCxlLG4pOmF1KHQuZixlLG4pfWZ1bmN0aW9uIE12dCh0KXtyZXR1cm4gd24oKSx0P3QudmUoKTooWjMoKSxaMygpLEFFdCl9ZnVuY3Rpb24gVW5uKHQsZSxuKXtyZXR1cm4gaTYoKSxuLnBnKHQsdShlLmNkKCksMTQ2KSl9ZnVuY3Rpb24gRFh0KHQsZSl7cmV0dXJuIHpqKCksbmV3IHozdChuZXcgZld0KHQpLG5ldyBoV3QoZSkpfWZ1bmN0aW9uIFdubih0KXtyZXR1cm4gamwodCxZYXQpLEokKFBhKFBhKDUsdCksdC8xMHwwKSl9ZnVuY3Rpb24gYyQoKXtjJD1aLEFnZT1uZXcgdWV0KGx0KGN0KFAyLDEpLEhxLDQyLDAsW10pKX1mdW5jdGlvbiBJWHQodCl7cmV0dXJuIXQuZCYmKHQuZD1uZXcgVCh0LmMuQ2MoKSkpLHQuZH1mdW5jdGlvbiBMOCh0KXtyZXR1cm4hdC5hJiYodC5hPW5ldyBmSHQodC5jLnZjKCkpKSx0LmF9ZnVuY3Rpb24gT1h0KHQpe3JldHVybiF0LmImJih0LmI9bmV3IHM4KHQuYy5lYygpKSksdC5ifWZ1bmN0aW9uIFhkKHQsZSl7Zm9yKDtlLS0gPjA7KXQ9dDw8MXwodDwwPzE6MCk7cmV0dXJuIHR9ZnVuY3Rpb24gRmModCxlKXtyZXR1cm4gVnQodCk9PT1WdChlKXx8dCE9bnVsbCYmeWkodCxlKX1mdW5jdGlvbiBZbm4odCxlKXtyZXR1cm4gTm4oKSx1KGUuYiwxOSkuYTx0fWZ1bmN0aW9uIEtubih0LGUpe3JldHVybiBObigpLHUoZS5hLDE5KS5hPHR9ZnVuY3Rpb24gcG8odCxlKXtyZXR1cm4gem50KHQuYSxlKT90LmJbdShlLDIyKS5nXTpudWxsfWZ1bmN0aW9uIFhubih0LGUsbixyKXt0LmE9UGwodC5hLDAsZSkrKCIiK3IpK1JNKHQuYSxuKX1mdW5jdGlvbiBQWHQodCxlKXt0LnUuSGMoKFp1KCksc2cpKSYmdGJuKHQsZSksTmFuKHQsZSl9ZnVuY3Rpb24gd2EodCxlKXtyZXR1cm4gUnIoZSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGUpfWZ1bmN0aW9uIEZYdCgpe1ZvLmNhbGwodGhpcywiVGhlcmUgaXMgbm8gbW9yZSBlbGVtZW50LiIpfWZ1bmN0aW9uIE85KHQpe3RoaXMuZD10LHRoaXMuYT10aGlzLmQuYix0aGlzLmI9dGhpcy5kLmN9ZnVuY3Rpb24gTlh0KHQpe3QuYj0hMSx0LmM9ITEsdC5kPSExLHQuYT0hMX1mdW5jdGlvbiBhaSh0LGUsbixyKXtyZXR1cm4gRm5lKHQsZSxuLCExKSxJeih0LHIpLHR9ZnVuY3Rpb24gUW5uKHQpe3JldHVybiB0LmouYz1OdChRbixEZSwxLDAsNSwxKSx0LmE9LTEsdH1mdW5jdGlvbiBabm4odCl7cmV0dXJuIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmN9ZnVuY3Rpb24gSm5uKHQpe3JldHVybiF0LmImJih0LmI9bmV3IENuKGJyLHQsNCw3KSksdC5ifWZ1bmN0aW9uIHUkKHQpe3JldHVybiF0Lm4mJih0Lm49bmV3IGZlKHFvLHQsMSw3KSksdC5ufWZ1bmN0aW9uIHVydCh0KXtyZXR1cm4hdC5jJiYodC5jPW5ldyBmZShnbCx0LDksOSkpLHQuY31mdW5jdGlvbiBNOCh0KXtyZXR1cm4gdC5lPT10NyYmeHB0KHQsd2ZuKHQuZyx0LmIpKSx0LmV9ZnVuY3Rpb24gckQodCl7cmV0dXJuIHQuZj09dDcmJlJ0dCh0LGlkbih0LmcsdC5iKSksdC5mfWZ1bmN0aW9uIFEzKHQpe3ZhciBlO3JldHVybiBlPXQuYiwhZSYmKHQuYj1lPW5ldyByTSh0KSksZX1mdW5jdGlvbiBEdnQodCl7dmFyIGU7Zm9yKGU9dC5LYygpO2UuT2IoKTspZS5QYigpLGUuUWIoKX1mdW5jdGlvbiBEOCh0KXtpZihjbCh0LmQpLHQuZC5kIT10LmMpdGhyb3cgaXQobmV3IHJoKX1mdW5jdGlvbiBJdnQodCxlKXt0aGlzLmI9dCx0aGlzLmM9ZSx0aGlzLmE9bmV3IE14KHRoaXMuYil9ZnVuY3Rpb24gbHJ0KHQsZSxuKXt0aGlzLmE9enh0LHRoaXMuZD10LHRoaXMuYj1lLHRoaXMuYz1ufWZ1bmN0aW9uIEJYdCh0LGUpe3RoaXMuZD0oT24odCksdCksdGhpcy5hPTE2NDQ5LHRoaXMuYz1lfWZ1bmN0aW9uIHRybih0LGUpe3BpZSh0LFh0KEgwKGUsIngiKSksWHQoSDAoZSwieSIpKSl9ZnVuY3Rpb24gZXJuKHQsZSl7cGllKHQsWHQoSDAoZSwieCIpKSxYdChIMChlLCJ5IikpKX1mdW5jdGlvbiBSaSh0LGUpe3JldHVybiB3Mih0KSxuZXcgVG4odCxuZXcgTm10KGUsdC5hKSl9ZnVuY3Rpb24gd3UodCxlKXtyZXR1cm4gdzIodCksbmV3IFRuKHQsbmV3IFRtdChlLHQuYSkpfWZ1bmN0aW9uIGwkKHQsZSl7cmV0dXJuIHcyKHQpLG5ldyBRMnQodCxuZXcgVUp0KGUsdC5hKSl9ZnVuY3Rpb24gaCQodCxlKXtyZXR1cm4gdzIodCksbmV3IFoydCh0LG5ldyBXSnQoZSx0LmEpKX1mdW5jdGlvbiBucm4odCxlKXtyZXR1cm4gbmV3IGhRdCh1KExyKHQpLDYyKSx1KExyKGUpLDYyKSl9ZnVuY3Rpb24gcnJuKHQsZSl7cmV0dXJuIGtidCgpLE1zKChPbih0KSx0KSwoT24oZSksZSkpfWZ1bmN0aW9uIGlybigpe3JldHVybiBqUigpLGx0KGN0KGw3dCwxKSxvZSw0ODEsMCxbS3V0XSl9ZnVuY3Rpb24gc3JuKCl7cmV0dXJuIHpSKCksbHQoY3QoZVN0LDEpLG9lLDQ4MiwwLFtKaHRdKX1mdW5jdGlvbiBhcm4oKXtyZXR1cm4gcVIoKSxsdChjdChUM2UsMSksb2UsNTUxLDAsW3RmdF0pfWZ1bmN0aW9uIG9ybigpe3JldHVybiBVQygpLGx0KGN0KGtTdCwxKSxvZSw1MzAsMCxbVk9dKX1mdW5jdGlvbiBSWHQodCl7dGhpcy5hPW5ldyBoZSx0aGlzLmU9TnQoQ3IsZWUsNDgsdCwwLDIpfWZ1bmN0aW9uIGhydCh0LGUsbixyKXt0aGlzLmE9dCx0aGlzLmU9ZSx0aGlzLmQ9bix0aGlzLmM9cn1mdW5jdGlvbiBmJCh0LGUsbixyKXt0aGlzLmE9dCx0aGlzLmM9ZSx0aGlzLmI9bix0aGlzLmQ9cn1mdW5jdGlvbiBPdnQodCxlLG4scil7dGhpcy5jPXQsdGhpcy5iPWUsdGhpcy5hPW4sdGhpcy5kPXJ9ZnVuY3Rpb24galh0KHQsZSxuLHIpe3RoaXMuYz10LHRoaXMuYj1lLHRoaXMuZD1uLHRoaXMuYT1yfWZ1bmN0aW9uIGFoKHQsZSxuLHIpe3RoaXMuYz10LHRoaXMuZD1lLHRoaXMuYj1uLHRoaXMuYT1yfWZ1bmN0aW9uICRYdCh0LGUsbixyKXt0aGlzLmE9dCx0aGlzLmQ9ZSx0aGlzLmM9bix0aGlzLmI9cn1mdW5jdGlvbiBHeCh0LGUsbixyKXtWci5jYWxsKHRoaXMsdCxlKSx0aGlzLmE9bix0aGlzLmI9cn1mdW5jdGlvbiB6WHQodCxlLG4scil7dGhpcy5hPXQsdGhpcy5jPWUsdGhpcy5kPW4sdGhpcy5iPXJ9ZnVuY3Rpb24gY3JuKHQsZSxuKXt2M24odC5hLG4pLHB1bihuKSxHYm4odC5iLG4pLE4zbihlLG4pfWZ1bmN0aW9uIGZydCh0LGUsbil7dmFyIHIscztyZXR1cm4gcj1NeHQodCkscz1lLktoKG4sciksc31mdW5jdGlvbiBxWHQodCxlKXt2YXIgbixyO3JldHVybiBuPXQvZSxyPXBzKG4pLG4+ciYmKytyLHJ9ZnVuY3Rpb24gTjAodCl7dmFyIGUsbjtyZXR1cm4gbj0oZT1uZXcgeHcsZSksSDgobix0KSxufWZ1bmN0aW9uIGRydCh0KXt2YXIgZSxuO3JldHVybiBuPShlPW5ldyB4dyxlKSxqNHQobix0KSxufWZ1bmN0aW9uIHVybih0LGUpe3ZhciBuO3JldHVybiBuPXRyKHQuZixlKSxieXQoZSxuKSxudWxsfWZ1bmN0aW9uIGdydCh0KXt2YXIgZTtyZXR1cm4gZT15Y24odCksZXx8bnVsbH1mdW5jdGlvbiBIWHQodCl7cmV0dXJuIXQuYiYmKHQuYj1uZXcgZmUoWXMsdCwxMiwzKSksdC5ifWZ1bmN0aW9uIGxybih0KXtyZXR1cm4gdCE9bnVsbCYmeU0oZ1UsdC50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBocm4odCxlKXtyZXR1cm4gTXMoUnUodCkqRWwodCksUnUoZSkqRWwoZSkpfWZ1bmN0aW9uIGZybih0LGUpe3JldHVybiBNcyhSdSh0KSpFbCh0KSxSdShlKSpFbChlKSl9ZnVuY3Rpb24gZHJuKHQsZSl7cmV0dXJuIE1zKHQuZC5jK3QuZC5iLzIsZS5kLmMrZS5kLmIvMil9ZnVuY3Rpb24gZ3JuKHQsZSl7cmV0dXJuIE1zKHQuZy5jK3QuZy5iLzIsZS5nLmMrZS5nLmIvMil9ZnVuY3Rpb24gVlh0KHQsZSxuKXtuLmE/RXUodCxlLmItdC5mLzIpOmt1KHQsZS5hLXQuZy8yKX1mdW5jdGlvbiBHWHQodCxlLG4scil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW4sdGhpcy5kPXJ9ZnVuY3Rpb24gVVh0KHQsZSxuLHIpe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1uLHRoaXMuZD1yfWZ1bmN0aW9uIG4yKHQsZSxuLHIpe3RoaXMuZT10LHRoaXMuYT1lLHRoaXMuYz1uLHRoaXMuZD1yfWZ1bmN0aW9uIFdYdCh0LGUsbixyKXt0aGlzLmE9dCx0aGlzLmM9ZSx0aGlzLmQ9bix0aGlzLmI9cn1mdW5jdGlvbiBZWHQodCxlLG4scil7aWgoKSwkSnQuY2FsbCh0aGlzLGUsbixyKSx0aGlzLmE9dH1mdW5jdGlvbiBLWHQodCxlLG4scil7aWgoKSwkSnQuY2FsbCh0aGlzLGUsbixyKSx0aGlzLmE9dH1mdW5jdGlvbiBYWHQodCxlKXt0aGlzLmE9dCx5WmUuY2FsbCh0aGlzLHQsdSh0LmQsMTUpLlpjKGUpKX1mdW5jdGlvbiBwcnQodCl7dGhpcy5mPXQsdGhpcy5jPXRoaXMuZi5lLHQuZj4wJiZjYWUodGhpcyl9ZnVuY3Rpb24gUVh0KHQsZSxuLHIpe3RoaXMuYj10LHRoaXMuYz1yLGVudC5jYWxsKHRoaXMsZSxuKX1mdW5jdGlvbiBaWHQodCl7cmV0dXJuIFpuKHQuYjx0LmQuZ2MoKSksdC5kLlhiKHQuYz10LmIrKyl9ZnVuY3Rpb24gQWgodCl7dC5hLmE9dC5jLHQuYy5iPXQuYSx0LmEuYj10LmMuYT1udWxsLHQuYj0wfWZ1bmN0aW9uIFB2dCh0LGUpe3JldHVybiB0LmI9ZS5iLHQuYz1lLmMsdC5kPWUuZCx0LmE9ZS5hLHR9ZnVuY3Rpb24gZCQodCl7cmV0dXJuIHQubiYmKHQuZSE9PXZmZSYmdC5fZCgpLHQuaj1udWxsKSx0fWZ1bmN0aW9uIEpYdCh0KXtyZXR1cm4gazkodD09bnVsbHx8Wm50KHQpJiZ0LmltIT09RXQpLHR9ZnVuY3Rpb24gdFF0KHQpe3RoaXMuYj1uZXcgaGUsTHModGhpcy5iLHRoaXMuYiksdGhpcy5hPXR9ZnVuY3Rpb24gVXgoKXtVeD1aLGRWPW5ldyBoZSxKdXQ9bmV3IF9yLFp1dD1uZXcgaGV9ZnVuY3Rpb24gd24oKXt3bj1aLGlvPW5ldyBJdCx1MD1uZXcgQnQsclY9bmV3IG50fWZ1bmN0aW9uIFozKCl7WjM9WixfRXQ9bmV3IFNlLFNFdD1uZXcgU2UsQUV0PW5ldyBtZX1mdW5jdGlvbiBGdnQoKXtGdnQ9WixhcGU9bmV3IHZzLGNwZT1uZXcgdHZ0LG9wZT1uZXcgcnV9ZnVuY3Rpb24gcHJuKCl7akV0PT0yNTYmJihSRXQ9YVYsYVY9bmV3IF8sakV0PTApLCsrakV0fWZ1bmN0aW9uIFd4KHQpe3ZhciBlO3JldHVybiBlPXQuZixlfHwodC5mPW5ldyBsOCh0LHQuYykpfWZ1bmN0aW9uIGJybih0KXtyZXR1cm4gZnYodCkmJmplKFJlKHFlKHQsKFRlKCksajIpKSkpfWZ1bmN0aW9uIHdybih0LGUpe3JldHVybiBsbih0LHUoUShlLChUZSgpLFQ3KSksMTkpLGUpfWZ1bmN0aW9uIGVRdCh0LGUpe3JldHVybiBjNCh0LmosZS5zLGUuYykrYzQoZS5lLHQucyx0LmMpfWZ1bmN0aW9uIG5RdCh0LGUpe3QuZSYmIXQuZS5hJiYoZXF0KHQuZSxlKSxuUXQodC5lLGUpKX1mdW5jdGlvbiByUXQodCxlKXt0LmQmJiF0LmQuYSYmKGVxdCh0LmQsZSksclF0KHQuZCxlKSl9ZnVuY3Rpb24gdnJuKHQsZSl7cmV0dXJuLU1zKFJ1KHQpKkVsKHQpLFJ1KGUpKkVsKGUpKX1mdW5jdGlvbiBtcm4odCl7cmV0dXJuIHUodC5jZCgpLDE0NikudGcoKSsiOiIrJG8odC5kZCgpKX1mdW5jdGlvbiB5cm4odCl7ZGYoKTt2YXIgZTtlPXUodC5nLDEwKSxlLm4uYT10LmQuYytlLmQuYn1mdW5jdGlvbiB4cm4odCxlLG4pe3JldHVybiBHQygpLGZobih1KHRyKHQuZSxlKSw1MjIpLG4pfWZ1bmN0aW9uIGtybih0LGUpe3JldHVybiBvbCh0KSxvbChlKSxySHQodSh0LDIyKSx1KGUsMjIpKX1mdW5jdGlvbiBFcm4odCxlLG4pe3QuaT0wLHQuZT0wLGUhPW4mJlRyZSh0LGUsbil9ZnVuY3Rpb24gVHJuKHQsZSxuKXt0Lmk9MCx0LmU9MCxlIT1uJiZDcmUodCxlLG4pfWZ1bmN0aW9uIHIyKHQsZSxuKXt2YXIgcixzO3I9bXd0KG4pLHM9bmV3IEVDKHIpLFlmKHQsZSxzKX1mdW5jdGlvbiBicnQodCxlLG4scixzLG8pe21ELmNhbGwodGhpcyx0LGUsbixyLHMsbz8tMjotMSl9ZnVuY3Rpb24gaVF0KHQsZSxuLHIpe2UydC5jYWxsKHRoaXMsZSxuKSx0aGlzLmI9dCx0aGlzLmE9cn1mdW5jdGlvbiBOdnQodCxlKXtuZXcgWmksdGhpcy5hPW5ldyBQdSx0aGlzLmI9dCx0aGlzLmM9ZX1mdW5jdGlvbiBDcm4odCxlKXtyZXR1cm4gdShRKHQsKGFlKCksUjYpKSwxNSkuRmMoZSksZX1mdW5jdGlvbiBnJCh0LGUpe2lmKHQ9PW51bGwpdGhyb3cgaXQobmV3IFN4KGUpKTtyZXR1cm4gdH1mdW5jdGlvbiBNaSh0KXtyZXR1cm4hdC5xJiYodC5xPW5ldyBmZShXaCx0LDExLDEwKSksdC5xfWZ1bmN0aW9uIFd0KHQpe3JldHVybiF0LnMmJih0LnM9bmV3IGZlKE11LHQsMjEsMTcpKSx0LnN9ZnVuY3Rpb24gcCQodCl7cmV0dXJuIXQuYSYmKHQuYT1uZXcgZmUocnMsdCwxMCwxMSkpLHQuYX1mdW5jdGlvbiBiJCh0KXtyZXR1cm4gX3QodCwxNCk/bmV3IEU5KHUodCwxNCkpOm5lbih0LktjKCkpfWZ1bmN0aW9uIF9ybih0KXtyZXR1cm4gbmV3IGlXdCh0LHQuZS5IZCgpLmdjKCkqdC5jLkhkKCkuZ2MoKSl9ZnVuY3Rpb24gU3JuKHQpe3JldHVybiBuZXcgc1d0KHQsdC5lLkhkKCkuZ2MoKSp0LmMuSGQoKS5nYygpKX1mdW5jdGlvbiBCdnQodCl7cmV0dXJuIHQmJnQuaGFzaENvZGU/dC5oYXNoQ29kZSgpOlB3KHQpfWZ1bmN0aW9uIHdydCh0LGUpe3JldHVybiBlPT1udWxsPyEhTG8odC5mLG51bGwpOnFlbih0LmcsZSl9ZnVuY3Rpb24gQXJuKHQpe3JldHVybiBMcih0KSxfc2UobmV3IGFyKGxyKHQuYS5LYygpLG5ldyB6KSkpfWZ1bmN0aW9uIGlEKHQpe3JldHVybiB3bigpLF90KHQsNTQpP25ldyBtZXQodCk6bmV3IEVqKHQpfWZ1bmN0aW9uIHNRdCh0LGUsbil7cmV0dXJuIHQuZj90LmYuTmUoZSxuKTohMX1mdW5jdGlvbiBMcm4odCxlKXtyZXR1cm4gdC5hPVBsKHQuYSwwLGUpKyIiK1JNKHQuYSxlKzEpLHR9ZnVuY3Rpb24gTXJuKHQsZSl7dmFyIG47cmV0dXJuIG49bTJ0KHQuYSxlKSxuJiYoZS5kPW51bGwpLG59ZnVuY3Rpb24gdyQodCl7dmFyIGUsbjtuPXQsZT1uLiRtb2RDb3VudHwwLG4uJG1vZENvdW50PWUrMX1mdW5jdGlvbiBSdnQodCl7dGhpcy5iPXQsdGhpcy5jPXQsdC5lPW51bGwsdC5jPW51bGwsdGhpcy5hPTF9ZnVuY3Rpb24gYVF0KHQpe3RoaXMuYj10LHRoaXMuYT1uZXcgT3AodShMcihuZXcgWWMpLDYyKSl9ZnVuY3Rpb24gb1F0KHQpe3RoaXMuYz10LHRoaXMuYj1uZXcgT3AodShMcihuZXcgenMpLDYyKSl9ZnVuY3Rpb24gY1F0KHQpe3RoaXMuYz10LHRoaXMuYj1uZXcgT3AodShMcihuZXcgaU4pLDYyKSl9ZnVuY3Rpb24gdVF0KCl7dGhpcy5hPW5ldyAkcHQsdGhpcy5iPW5ldyBTcXQsdGhpcy5kPW5ldyBzTn1mdW5jdGlvbiBWdygpe3RoaXMuYT1uZXcgUHUsdGhpcy5iPShqbCgzLGt5KSxuZXcgWGMoMykpfWZ1bmN0aW9uIGxRdCgpe3RoaXMuYj1uZXcgSHMsdGhpcy5kPW5ldyBaaSx0aGlzLmU9bmV3IHFwdH1mdW5jdGlvbiB2JCh0KXt0aGlzLmM9dC5jLHRoaXMuZD10LmQsdGhpcy5iPXQuYix0aGlzLmE9dC5hfWZ1bmN0aW9uIGhRdCh0LGUpe2hLZS5jYWxsKHRoaXMsbmV3IFludCh0KSksdGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gZlF0KCl7SHN0KHRoaXMsbmV3IEpCKSx0aGlzLndiPShIcCgpLExuKSxjOCgpfWZ1bmN0aW9uIERybih0KXt2cih0LCJObyBjcm9zc2luZyBtaW5pbWl6YXRpb24iLDEpLG9yKHQpfWZ1bmN0aW9uIElybih0KXtBUigpLGIuc2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IHR9LDApfWZ1bmN0aW9uIEFvKHQpe3JldHVybiB0LnV8fChzbCh0KSx0LnU9bmV3IEtXdCh0LHQpKSx0LnV9ZnVuY3Rpb24gdnUodCl7dmFyIGU7cmV0dXJuIGU9dShEbih0LDE2KSwyNiksZXx8dC56aCgpfWZ1bmN0aW9uIGRRdCh0LGUpe3JldHVybiBfdChlLDE0NikmJmhuKHQuYix1KGUsMTQ2KS50ZygpKX1mdW5jdGlvbiBPcm4odCxlKXtyZXR1cm4gdC5hP2UuV2coKS5LYygpOnUoZS5XZygpLDY5KS5aaCgpfWZ1bmN0aW9uIFBybih0KXtyZXR1cm4gdC5rPT0oVm4oKSxPcykmJlVzKHQsKGFlKCksa1MpKX1mdW5jdGlvbiB2cnQodCl7dGhpcy5hPSh3bigpLF90KHQsNTQpP25ldyBtZXQodCk6bmV3IEVqKHQpKX1mdW5jdGlvbiBJOCgpe0k4PVo7dmFyIHQsZTtlPSFlZm4oKSx0PW5ldyBidCxPdXQ9ZT9uZXcgVTp0fWZ1bmN0aW9uIG1ydCh0LGUpe3ZhciBuO3JldHVybiBuPUlwKHQuZ20pLGU9PW51bGw/bjpuKyI6ICIrZX1mdW5jdGlvbiBnUXQodCxlKXt2YXIgbjtyZXR1cm4gbj10LmIuUWMoZSksc0p0KG4sdC5iLmdjKCkpLG59ZnVuY3Rpb24gc0QodCxlKXtpZih0PT1udWxsKXRocm93IGl0KG5ldyBTeChlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gTG8odCxlKXtyZXR1cm4ganJlKHQsZSxiaW4odCxlPT1udWxsPzA6dC5iLnNlKGUpKSl9ZnVuY3Rpb24gRnJuKHQsZSxuKXtyZXR1cm4gbj49MCYmaG4odC5zdWJzdHIobixlLmxlbmd0aCksZSl9ZnVuY3Rpb24gR3AodCxlLG4scixzLG8saCl7cmV0dXJuIG5ldyBqcnQodC5lLGUsbixyLHMsbyxoKX1mdW5jdGlvbiBwUXQodCxlLG4scixzLG8pe3RoaXMuYT10LGZpdC5jYWxsKHRoaXMsZSxuLHIscyxvKX1mdW5jdGlvbiBiUXQodCxlLG4scixzLG8pe3RoaXMuYT10LGZpdC5jYWxsKHRoaXMsZSxuLHIscyxvKX1mdW5jdGlvbiB3UXQodCxlKXt0aGlzLmc9dCx0aGlzLmQ9bHQoY3QobDAsMSksWWcsMTAsMCxbZV0pfWZ1bmN0aW9uIFBnKHQsZSl7dGhpcy5lPXQsdGhpcy5hPVFuLHRoaXMuYj0kdWUoZSksdGhpcy5jPWV9ZnVuY3Rpb24gdlF0KHQsZSl7SWouY2FsbCh0aGlzKSxHbXQodGhpcyksdGhpcy5hPXQsdGhpcy5jPWV9ZnVuY3Rpb24gYUQodCxlLG4scil7dHModC5jW2UuZ10sbi5nLHIpLHRzKHQuY1tuLmddLGUuZyxyKX1mdW5jdGlvbiB5cnQodCxlLG4scil7dHModC5jW2UuZ10sZS5nLG4pLHRzKHQuYltlLmddLGUuZyxyKX1mdW5jdGlvbiBOcm4oKXtyZXR1cm4gcEQoKSxsdChjdChZOXQsMSksb2UsMzc2LDAsW1NodCxCT10pfWZ1bmN0aW9uIEJybigpe3JldHVybiB4RCgpLGx0KGN0KCRUdCwxKSxvZSw0NzksMCxbalR0LFdWXSl9ZnVuY3Rpb24gUnJuKCl7cmV0dXJuIExEKCksbHQoY3QoQlR0LDEpLG9lLDQxOSwwLFtHVixOVHRdKX1mdW5jdGlvbiBqcm4oKXtyZXR1cm4gSCQoKSxsdChjdChMVHQsMSksb2UsNDIyLDAsW0FUdCxBbHRdKX1mdW5jdGlvbiAkcm4oKXtyZXR1cm4gSSQoKSxsdChjdChKVHQsMSksb2UsNDIwLDAsW0hsdCxaVHRdKX1mdW5jdGlvbiB6cm4oKXtyZXR1cm4gQ0QoKSxsdChjdChWOXQsMSksb2UsNDIxLDAsW1RodCxDaHRdKX1mdW5jdGlvbiBxcm4oKXtyZXR1cm4gJDkoKSxsdChjdChPbWUsMSksb2UsNTIzLDAsW0JTLE5TXSl9ZnVuY3Rpb24gSHJuKCl7cmV0dXJuIFVmKCksbHQoY3QocnllLDEpLG9lLDUyMCwwLFtLeSxtYl0pfWZ1bmN0aW9uIFZybigpe3JldHVybiBiZCgpLGx0KGN0KCRtZSwxKSxvZSw1MTYsMCxbenYsZXBdKX1mdW5jdGlvbiBHcm4oKXtyZXR1cm4gQzEoKSxsdChjdChxbWUsMSksb2UsNTE1LDAsW0gyLEgxXSl9ZnVuY3Rpb24gVXJuKCl7cmV0dXJuIEd3KCksbHQoY3QobHllLDEpLG9lLDQ1NSwwLFt5YixyNV0pfWZ1bmN0aW9uIFdybigpe3JldHVybiBBJCgpLGx0KGN0KHZfdCwxKSxvZSw0MjUsMCxbcWh0LHdfdF0pfWZ1bmN0aW9uIFlybigpe3JldHVybiBUJCgpLGx0KGN0KGJfdCwxKSxvZSw0ODAsMCxbemh0LHBfdF0pfWZ1bmN0aW9uIEtybigpe3JldHVybiBweigpLGx0KGN0KG1fdCwxKSxvZSw0OTUsMCxbRkcsRDddKX1mdW5jdGlvbiBYcm4oKXtyZXR1cm4gRyQoKSxsdChjdCh4X3QsMSksb2UsNDI2LDAsW3lfdCxVaHRdKX1mdW5jdGlvbiBRcm4oKXtyZXR1cm4gakQoKSxsdChjdChUU3QsMSksb2UsNDI5LDAsW1ZHLEVTdF0pfWZ1bmN0aW9uIFpybigpe3JldHVybiBiRCgpLGx0KGN0KG5TdCwxKSxvZSw0MzAsMCxbZWZ0LHFHXSl9ZnVuY3Rpb24gSnJuKCl7cmV0dXJuIEd6KCksbHQoY3QoekV0LDEpLG9lLDQyOCwwLFtxdXQsJEV0XSl9ZnVuY3Rpb24gdGluKCl7cmV0dXJuIFEkKCksbHQoY3QoSEV0LDEpLG9lLDQyNywwLFtxRXQsSHV0XSl9ZnVuY3Rpb24gZWluKCl7cmV0dXJuIFokKCksbHQoY3Qodzd0LDEpLG9lLDQyNCwwLFt0bHQsZ1ZdKX1mdW5jdGlvbiBuaW4oKXtyZXR1cm4gWDgoKSxsdChjdChuMmUsMSksb2UsNTExLDAsW3lPLGRsdF0pfWZ1bmN0aW9uIG0kKHQsZSxuLHIpe3JldHVybiBuPj0wP3QuamgoZSxuLHIpOnQuU2cobnVsbCxuLHIpfWZ1bmN0aW9uIHhydCh0KXtyZXR1cm4gdC5iLmI9PTA/dC5hLiRlKCk6T250KHQuYil9ZnVuY3Rpb24gcmluKHQpe2lmKHQucCE9NSl0aHJvdyBpdChuZXcgT3UpO3JldHVybiBBcih0LmYpfWZ1bmN0aW9uIGlpbih0KXtpZih0LnAhPTUpdGhyb3cgaXQobmV3IE91KTtyZXR1cm4gQXIodC5rKX1mdW5jdGlvbiBqdnQodCl7cmV0dXJuIFZ0KHQuYSk9PT1WdCgoa2l0KCksQmZ0KSkmJnM0bih0KSx0LmF9ZnVuY3Rpb24gbVF0KHQpe3RoaXMuYT11KExyKHQpLDI3MSksdGhpcy5iPSh3bigpLG5ldyBJMnQodCkpfWZ1bmN0aW9uIHlRdCh0LGUpe3ZwdCh0aGlzLG5ldyAkZSh0LmEsdC5iKSksb1IodGhpcyxRTShlKSl9ZnVuY3Rpb24gR3coKXtHdz1aLHliPW5ldyBXYnQoeTYsMCkscjU9bmV3IFdidCh4NiwxKX1mdW5jdGlvbiBiZCgpe2JkPVosenY9bmV3IEdidCh4NiwwKSxlcD1uZXcgR2J0KHk2LDEpfWZ1bmN0aW9uIFV3KCl7Z0tlLmNhbGwodGhpcyxuZXcgTHgodHkoMTIpKSksQTJ0KCEwKSx0aGlzLmE9Mn1mdW5jdGlvbiBrcnQodCxlLG4pe2dpKCkseXcuY2FsbCh0aGlzLHQpLHRoaXMuYj1lLHRoaXMuYT1ufWZ1bmN0aW9uICR2dCh0LGUsbil7aWgoKSx2Ui5jYWxsKHRoaXMsZSksdGhpcy5hPXQsdGhpcy5iPW59ZnVuY3Rpb24geFF0KHQpe0lqLmNhbGwodGhpcyksR210KHRoaXMpLHRoaXMuYT10LHRoaXMuYz0hMH1mdW5jdGlvbiBrUXQodCl7dmFyIGU7ZT10LmMuZC5iLHQuYj1lLHQuYT10LmMuZCxlLmE9dC5jLmQuYj10fWZ1bmN0aW9uIHkkKHQpe3ZhciBlO2hjbih0LmEpLE9VdCh0LmEpLGU9bmV3IGVyKHQuYSkscDN0KGUpfWZ1bmN0aW9uIHNpbih0LGUpe0R1ZSh0LCEwKSx4dSh0LmUud2YoKSxuZXcgRXd0KHQsITAsZSkpfWZ1bmN0aW9uIHgkKHQsZSl7cmV0dXJuIGVKdChlKSxjY24odCxOdChDcixYciwyNSxlLDE1LDEpLGUpfWZ1bmN0aW9uIGFpbih0LGUpe3JldHVybiBVeCgpLHQ9PWVzKGUwKGUpKXx8dD09ZXModGIoZSkpfWZ1bmN0aW9uIE5jKHQsZSl7cmV0dXJuIGU9PW51bGw/ZWMoTG8odC5mLG51bGwpKTpLQyh0LmcsZSl9ZnVuY3Rpb24gb2luKHQpe3JldHVybiB0LmI9PTA/bnVsbDooWm4odC5iIT0wKSxsaCh0LHQuYS5hKSl9ZnVuY3Rpb24gcHModCl7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKHQsd2kpLC0yMTQ3NDgzNjQ4KXwwfWZ1bmN0aW9uIGNpbih0LGUpe3ZhciBuPUl1dFt0LmNoYXJDb2RlQXQoMCldO3JldHVybiBuPz90fWZ1bmN0aW9uIGskKHQsZSl7cmV0dXJuIGckKHQsInNldDEiKSxnJChlLCJzZXQyIiksbmV3IHZWdCh0LGUpfWZ1bmN0aW9uIHVpbih0LGUpe3ZhciBuO3JldHVybiBuPXJjbih0LmYsZSksTGkoTWoobiksdC5mLmQpfWZ1bmN0aW9uIFA5KHQsZSl7dmFyIG4scjtyZXR1cm4gbj1lLHI9bmV3IHp0LG1oZSh0LG4sciksci5kfWZ1bmN0aW9uIEVydCh0LGUsbixyKXt2YXIgcztzPW5ldyB1WXQsZS5hW24uZ109cyx6eCh0LmIscixzKX1mdW5jdGlvbiB6dnQodCxlLG4pe3ZhciByO3I9dC5ZZyhlKSxyPj0wP3Quc2gocixuKTpNNXQodCxlLG4pfWZ1bmN0aW9uIEozKHQsZSxuKXtDJCgpLHQmJmtpKFBmdCx0LGUpLHQmJmtpKGRQLHQsbil9ZnVuY3Rpb24gRVF0KHQsZSxuKXt0aGlzLmk9bmV3IGhlLHRoaXMuYj10LHRoaXMuZz1lLHRoaXMuYT1ufWZ1bmN0aW9uIEUkKHQsZSxuKXt0aGlzLmM9bmV3IGhlLHRoaXMuZT10LHRoaXMuZj1lLHRoaXMuYj1ufWZ1bmN0aW9uIHF2dCh0LGUsbil7dGhpcy5hPW5ldyBoZSx0aGlzLmU9dCx0aGlzLmY9ZSx0aGlzLmM9bn1mdW5jdGlvbiBUUXQodCxlKXt5aih0aGlzKSx0aGlzLmY9ZSx0aGlzLmc9dCxkJCh0aGlzKSx0aGlzLl9kKCl9ZnVuY3Rpb24gb0QodCxlKXt2YXIgbjtuPXQucS5nZXRIb3VycygpLHQucS5zZXREYXRlKGUpLEVfKHQsbil9ZnVuY3Rpb24gQ1F0KHQsZSl7dmFyIG47Zm9yKExyKGUpLG49dC5hO247bj1uLmMpZS5PZChuLmcsbi5pKX1mdW5jdGlvbiBfUXQodCl7dmFyIGU7cmV0dXJuIGU9bmV3IElSKHR5KHQubGVuZ3RoKSksT3l0KGUsdCksZX1mdW5jdGlvbiBsaW4odCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGU9dHx8e30sbmV3IGV9ZnVuY3Rpb24gaGluKHQsZSl7cmV0dXJuIGVyZSh0LGUpPyhKZWUodCksITApOiExfWZ1bmN0aW9uIEIwKHQsZSl7aWYoZT09bnVsbCl0aHJvdyBpdChuZXcgSUMpO3JldHVybiBjZm4odCxlKX1mdW5jdGlvbiBmaW4odCl7aWYodC5xZSgpKXJldHVybiBudWxsO3ZhciBlPXQubjtyZXR1cm4gUUhbZV19ZnVuY3Rpb24gY0QodCl7cmV0dXJuIHQuRGI+PjE2IT0zP251bGw6dSh0LkNiLDMzKX1mdW5jdGlvbiBUMSh0KXtyZXR1cm4gdC5EYj4+MTYhPTk/bnVsbDp1KHQuQ2IsMzMpfWZ1bmN0aW9uIFNRdCh0KXtyZXR1cm4gdC5EYj4+MTYhPTY/bnVsbDp1KHQuQ2IsNzkpfWZ1bmN0aW9uIEFRdCh0KXtyZXR1cm4gdC5EYj4+MTYhPTc/bnVsbDp1KHQuQ2IsMjM1KX1mdW5jdGlvbiBMUXQodCl7cmV0dXJuIHQuRGI+PjE2IT03P251bGw6dSh0LkNiLDE2MCl9ZnVuY3Rpb24gZXModCl7cmV0dXJuIHQuRGI+PjE2IT0xMT9udWxsOnUodC5DYiwzMyl9ZnVuY3Rpb24gTVF0KHQsZSl7dmFyIG47cmV0dXJuIG49dC5ZZyhlKSxuPj0wP3QubGgobik6WnN0KHQsZSl9ZnVuY3Rpb24gRFF0KHQsZSl7dmFyIG47cmV0dXJuIG49bmV3IFd3dChlKSxJYWUobix0KSxuZXcgQnUobil9ZnVuY3Rpb24gSHZ0KHQpe3ZhciBlO3JldHVybiBlPXQuZCxlPXQuc2kodC5mKSxEcih0LGUpLGUuT2IoKX1mdW5jdGlvbiBJUXQodCxlKXtyZXR1cm4gdC5iKz1lLmIsdC5jKz1lLmMsdC5kKz1lLmQsdC5hKz1lLmEsdH1mdW5jdGlvbiBUcnQodCxlKXtyZXR1cm4gYi5NYXRoLmFicyh0KTxiLk1hdGguYWJzKGUpP3Q6ZX1mdW5jdGlvbiBkaW4odCl7cmV0dXJuIXQuYSYmKHQuYT1uZXcgZmUocnMsdCwxMCwxMSkpLHQuYS5pPjB9ZnVuY3Rpb24gT1F0KCl7dGhpcy5hPW5ldyBPMCx0aGlzLmU9bmV3IEhzLHRoaXMuZz0wLHRoaXMuaT0wfWZ1bmN0aW9uIFBRdCh0KXt0aGlzLmE9dCx0aGlzLmI9TnQoTW1lLGVlLDE5NDQsdC5lLmxlbmd0aCwwLDIpfWZ1bmN0aW9uIENydCh0LGUsbil7dmFyIHI7cj14cmUodCxlLG4pLHQuYj1uZXcgZ3ooci5jLmxlbmd0aCl9ZnVuY3Rpb24gQzEoKXtDMT1aLEgyPW5ldyBWYnQoRG90LDApLEgxPW5ldyBWYnQoIlVQIiwxKX1mdW5jdGlvbiBUJCgpe1QkPVosemh0PW5ldyBZYnQoWTFlLDApLHBfdD1uZXcgWWJ0KCJGQU4iLDEpfWZ1bmN0aW9uIEMkKCl7QyQ9WixQZnQ9bmV3IF9yLGRQPW5ldyBfcixPWGUoVWdlLG5ldyBKVCl9ZnVuY3Rpb24gZ2luKHQpe2lmKHQucCE9MCl0aHJvdyBpdChuZXcgT3UpO3JldHVybiB1OSh0LmYsMCl9ZnVuY3Rpb24gcGluKHQpe2lmKHQucCE9MCl0aHJvdyBpdChuZXcgT3UpO3JldHVybiB1OSh0LmssMCl9ZnVuY3Rpb24gRlF0KHQpe3JldHVybiB0LkRiPj4xNiE9Mz9udWxsOnUodC5DYiwxNDcpfWZ1bmN0aW9uIE84KHQpe3JldHVybiB0LkRiPj4xNiE9Nj9udWxsOnUodC5DYiwyMzUpfWZ1bmN0aW9uIFltKHQpe3JldHVybiB0LkRiPj4xNiE9MTc/bnVsbDp1KHQuQ2IsMjYpfWZ1bmN0aW9uIE5RdCh0LGUpe3ZhciBuPXQuYT10LmF8fFtdO3JldHVybiBuW2VdfHwobltlXT10LmxlKGUpKX1mdW5jdGlvbiBiaW4odCxlKXt2YXIgbjtyZXR1cm4gbj10LmEuZ2V0KGUpLG4/P25ldyBBcnJheX1mdW5jdGlvbiB3aW4odCxlKXt2YXIgbjtuPXQucS5nZXRIb3VycygpLHQucS5zZXRNb250aChlKSxFXyh0LG4pfWZ1bmN0aW9uIGtvKHQsZSxuKXtyZXR1cm4gZT09bnVsbD9hdSh0LmYsbnVsbCxuKTpzdih0LmcsZSxuKX1mdW5jdGlvbiBGOSh0LGUsbixyLHMsbyl7cmV0dXJuIG5ldyB6MCh0LmUsZSx0LmFqKCksbixyLHMsbyl9ZnVuY3Rpb24gdUQodCxlLG4pe3JldHVybiB0LmE9UGwodC5hLDAsZSkrKCIiK24pK1JNKHQuYSxlKSx0fWZ1bmN0aW9uIHZpbih0LGUsbil7cmV0dXJuIGxlKHQuYSwoYyQoKSxrc3QoZSxuKSxuZXcgTHcoZSxuKSkpLHR9ZnVuY3Rpb24gVnZ0KHQpe3JldHVybiBNMnQodC5jKSx0LmU9dC5hPXQuYyx0LmM9dC5jLmMsKyt0LmQsdC5hLmZ9ZnVuY3Rpb24gQlF0KHQpe3JldHVybiBNMnQodC5lKSx0LmM9dC5hPXQuZSx0LmU9dC5lLmUsLS10LmQsdC5hLmZ9ZnVuY3Rpb24gb2EodCxlKXt0LmQmJm11KHQuZC5lLHQpLHQuZD1lLHQuZCYmbGUodC5kLmUsdCl9ZnVuY3Rpb24gT2EodCxlKXt0LmMmJm11KHQuYy5nLHQpLHQuYz1lLHQuYyYmbGUodC5jLmcsdCl9ZnVuY3Rpb24gRW8odCxlKXt0LmMmJm11KHQuYy5hLHQpLHQuYz1lLHQuYyYmbGUodC5jLmEsdCl9ZnVuY3Rpb24gVW8odCxlKXt0LmkmJm11KHQuaS5qLHQpLHQuaT1lLHQuaSYmbGUodC5pLmosdCl9ZnVuY3Rpb24gUlF0KHQsZSxuKXt0aGlzLmE9ZSx0aGlzLmM9dCx0aGlzLmI9KExyKG4pLG5ldyBCdShuKSl9ZnVuY3Rpb24galF0KHQsZSxuKXt0aGlzLmE9ZSx0aGlzLmM9dCx0aGlzLmI9KExyKG4pLG5ldyBCdShuKSl9ZnVuY3Rpb24gJFF0KHQsZSl7dGhpcy5hPXQsdGhpcy5jPW5jKHRoaXMuYSksdGhpcy5iPW5ldyB2JChlKX1mdW5jdGlvbiBtaW4odCl7dmFyIGU7cmV0dXJuIHcyKHQpLGU9bmV3IEhzLFJpKHQsbmV3IEdlKGUpKX1mdW5jdGlvbiBLbSh0LGUpe2lmKHQ8MHx8dD5lKXRocm93IGl0KG5ldyB5byhLeHQrdCtYeHQrZSkpfWZ1bmN0aW9uIEd2dCh0LGUpe3JldHVybiBNS3QodC5hLGUpP3B2dCh0LHUoZSwyMikuZyxudWxsKTpudWxsfWZ1bmN0aW9uIHlpbih0KXtyZXR1cm4gcWl0KCksTm4oKSx1KHQuYSw4MSkuZC5lIT0wfWZ1bmN0aW9uIHpRdCgpe3pRdD1aLERnZT1XcigoVFIoKSxsdChjdChNZ2UsMSksb2UsNTM4LDAsW011dF0pKSl9ZnVuY3Rpb24gcVF0KCl7cVF0PVosd21lPUt1KG5ldyBWcywoV2EoKSxJbyksKHJvKCkseE8pKX1mdW5jdGlvbiBVdnQoKXtVdnQ9Wix2bWU9S3UobmV3IFZzLChXYSgpLElvKSwocm8oKSx4TykpfWZ1bmN0aW9uIEhRdCgpe0hRdD1aLHltZT1LdShuZXcgVnMsKFdhKCksSW8pLChybygpLHhPKSl9ZnVuY3Rpb24gVlF0KCl7VlF0PVosRm1lPWJpKG5ldyBWcywoV2EoKSxJbyksKHJvKCkscFMpKX1mdW5jdGlvbiBGbCgpe0ZsPVosUm1lPWJpKG5ldyBWcywoV2EoKSxJbyksKHJvKCkscFMpKX1mdW5jdGlvbiBHUXQoKXtHUXQ9WixqbWU9YmkobmV3IFZzLChXYSgpLElvKSwocm8oKSxwUykpfWZ1bmN0aW9uIF9ydCgpe19ydD1aLFZtZT1iaShuZXcgVnMsKFdhKCksSW8pLChybygpLHBTKSl9ZnVuY3Rpb24gVVF0KCl7VVF0PVosTXllPUt1KG5ldyBWcywod0UoKSxqUyksKHBfKCksSWh0KSl9ZnVuY3Rpb24gaTIodCxlLG4scil7dGhpcy5jPXQsdGhpcy5kPXIsQXJ0KHRoaXMsZSksTHJ0KHRoaXMsbil9ZnVuY3Rpb24gWXgodCl7dGhpcy5jPW5ldyBaaSx0aGlzLmI9dC5iLHRoaXMuZD10LmMsdGhpcy5hPXQuYX1mdW5jdGlvbiBTcnQodCl7dGhpcy5hPWIuTWF0aC5jb3ModCksdGhpcy5iPWIuTWF0aC5zaW4odCl9ZnVuY3Rpb24gQXJ0KHQsZSl7dC5hJiZtdSh0LmEuayx0KSx0LmE9ZSx0LmEmJmxlKHQuYS5rLHQpfWZ1bmN0aW9uIExydCh0LGUpe3QuYiYmbXUodC5iLmYsdCksdC5iPWUsdC5iJiZsZSh0LmIuZix0KX1mdW5jdGlvbiBXUXQodCxlKXtMbm4odCx0LmIsdC5jKSx1KHQuYi5iLDY1KSxlJiZ1KGUuYiw2NSkuYn1mdW5jdGlvbiB4aW4odCxlKXtjM3QodCxlKSxfdCh0LkNiLDg4KSYmZ3koc2wodSh0LkNiLDg4KSksMil9ZnVuY3Rpb24gTXJ0KHQsZSl7X3QodC5DYiw4OCkmJmd5KHNsKHUodC5DYiw4OCkpLDQpLFFjKHQsZSl9ZnVuY3Rpb24gXyQodCxlKXtfdCh0LkNiLDE3OSkmJih1KHQuQ2IsMTc5KS50Yj1udWxsKSxRYyh0LGUpfWZ1bmN0aW9uIEJjKHQsZSl7cmV0dXJuIHRvKCksYWl0KGUpP25ldyBxaihlLHQpOm5ldyBCTShlLHQpfWZ1bmN0aW9uIGtpbih0LGUpe3ZhciBuLHI7bj1lLmMscj1uIT1udWxsLHImJlZ4KHQsbmV3IFVtKGUuYykpfWZ1bmN0aW9uIFlRdCh0KXt2YXIgZSxuO3JldHVybiBuPShjOCgpLGU9bmV3IHh3LGUpLEg4KG4sdCksbn1mdW5jdGlvbiBLUXQodCl7dmFyIGUsbjtyZXR1cm4gbj0oYzgoKSxlPW5ldyB4dyxlKSxIOChuLHQpLG59ZnVuY3Rpb24gWFF0KHQsZSl7dmFyIG47cmV0dXJuIG49bmV3IFNoKHQpLGUuY1tlLmMubGVuZ3RoXT1uLG59ZnVuY3Rpb24gUVF0KHQsZSl7dmFyIG47cmV0dXJuIG49dShzeShXeCh0LmEpLGUpLDE0KSxuP24uZ2MoKTowfWZ1bmN0aW9uIFpRdCh0KXt2YXIgZTtyZXR1cm4gdzIodCksZT0oWjMoKSxaMygpLFNFdCksZXoodCxlKX1mdW5jdGlvbiBKUXQodCl7Zm9yKHZhciBlOzspaWYoZT10LlBiKCksIXQuT2IoKSlyZXR1cm4gZX1mdW5jdGlvbiBXdnQodCxlKXtmS2UuY2FsbCh0aGlzLG5ldyBMeCh0eSh0KSkpLGpsKGUsZmZlKSx0aGlzLmE9ZX1mdW5jdGlvbiBRZCh0LGUsbil7YWllKGUsbix0LmdjKCkpLHRoaXMuYz10LHRoaXMuYT1lLHRoaXMuYj1uLWV9ZnVuY3Rpb24gdFp0KHQsZSxuKXt2YXIgcjthaWUoZSxuLHQuYy5sZW5ndGgpLHI9bi1lLHdidCh0LmMsZSxyKX1mdW5jdGlvbiBFaW4odCxlKXtRVXQodCxBcihOcygkcChlLDI0KSxVcSkpLEFyKE5zKGUsVXEpKSl9ZnVuY3Rpb24gQW4odCxlKXtpZih0PDB8fHQ+PWUpdGhyb3cgaXQobmV3IHlvKEt4dCt0K1h4dCtlKSl9ZnVuY3Rpb24gUnIodCxlKXtpZih0PDB8fHQ+PWUpdGhyb3cgaXQobmV3IHNidChLeHQrdCtYeHQrZSkpfWZ1bmN0aW9uIF9uKHQsZSl7dGhpcy5iPShPbih0KSx0KSx0aGlzLmE9ZSZFeT9lOmV8NjR8bWR9ZnVuY3Rpb24gZVp0KHQpe0lVdCh0aGlzKSxmcXQodGhpcy5hLER5dChiLk1hdGgubWF4KDgsdCkpPDwxKX1mdW5jdGlvbiBfMSh0KXtyZXR1cm4gWW8obHQoY3QoV3MsMSksZWUsOCwwLFt0Lmkubix0Lm4sdC5hXSkpfWZ1bmN0aW9uIFRpbigpe3JldHVybiBPMSgpLGx0KGN0KGZsLDEpLG9lLDEzMiwwLFtCRXQsVWwsSXldKX1mdW5jdGlvbiBDaW4oKXtyZXR1cm4gS2YoKSxsdChjdChPeSwxKSxvZSwyMzIsMCxbc2MsZXUsYWNdKX1mdW5jdGlvbiBfaW4oKXtyZXR1cm4gUXUoKSxsdChjdChwcGUsMSksb2UsNDYxLDAsW01kLGZiLGtmXSl9ZnVuY3Rpb24gU2luKCl7cmV0dXJuIHl1KCksbHQoY3Qod3BlLDEpLG9lLDQ2MiwwLFtuMSxkYixFZl0pfWZ1bmN0aW9uIEFpbigpe3JldHVybiBpdigpLGx0KGN0KEY3dCwxKSxvZSw0MjMsMCxbcTQsUDd0LGxsdF0pfWZ1bmN0aW9uIExpbigpe3JldHVybiBxOSgpLGx0KGN0KEQ3dCwxKSxvZSwzNzksMCxbaWx0LHJsdCxzbHRdKX1mdW5jdGlvbiBNaW4oKXtyZXR1cm4gWjkoKSxsdChjdChQOXQsMSksb2UsMzc4LDAsW3ZodCxPOXQseUddKX1mdW5jdGlvbiBEaW4oKXtyZXR1cm4gbjYoKSxsdChjdChEVHQsMSksb2UsMzE0LDAsW1A2LEVPLE1UdF0pfWZ1bmN0aW9uIElpbigpe3JldHVybiBveigpLGx0KGN0KE9UdCwxKSxvZSwzMzcsMCxbSVR0LFZWLExsdF0pfWZ1bmN0aW9uIE9pbigpe3JldHVybiBkMigpLGx0KGN0KEQyZSwxKSxvZSw0NTAsMCxbSWx0LHc3LFU0XSl9ZnVuY3Rpb24gUGluKCl7cmV0dXJuIG52KCksbHQoY3QobWx0LDEpLG9lLDM2MSwwLFtEdixwYixNdl0pfWZ1bmN0aW9uIEZpbigpe3JldHVybiBxMCgpLGx0KGN0KGoyZSwxKSxvZSwzMDMsMCxbQ08sWTQsRjZdKX1mdW5jdGlvbiBOaW4oKXtyZXR1cm4gZUUoKSxsdChjdChxbHQsMSksb2UsMjkyLDAsWyRsdCx6bHQsVE9dKX1mdW5jdGlvbiBCaW4oKXtyZXR1cm4gc28oKSxsdChjdChsbWUsMSksb2UsNDUyLDAsW09TLHRsLG51XSl9ZnVuY3Rpb24gUmluKCl7cmV0dXJuIFYwKCksbHQoY3QoSDl0LDEpLG9lLDMzOSwwLFt2YixxOXQsRWh0XSl9ZnVuY3Rpb24gamluKCl7cmV0dXJuIHl6KCksbHQoY3QoVzl0LDEpLG9lLDM3NSwwLFtHOXQsX2h0LFU5dF0pfWZ1bmN0aW9uICRpbigpe3JldHVybiBDeigpLGx0KGN0KHRfdCwxKSxvZSwzNzcsMCxbTWh0LEw3LFl5XSl9ZnVuY3Rpb24gemluKCl7cmV0dXJuIGNFKCksbHQoY3QoWDl0LDEpLG9lLDMzNiwwLFtBaHQsSzl0LFBTXSl9ZnVuY3Rpb24gcWluKCl7cmV0dXJuIHZ6KCksbHQoY3QoSjl0LDEpLG9lLDMzOCwwLFtaOXQsTGh0LFE5dF0pfWZ1bmN0aW9uIEhpbigpe3JldHVybiBldigpLGx0KGN0KEFtZSwxKSxvZSw0NTQsMCxbUk8sRlMsVEddKX1mdW5jdGlvbiBWaW4oKXtyZXR1cm4gTnooKSxsdChjdChGeWUsMSksb2UsNDQyLDAsW0dodCxIaHQsVmh0XSl9ZnVuY3Rpb24gR2luKCl7cmV0dXJuIEhEKCksbHQoY3QoVF90LDEpLG9lLDM4MCwwLFtORyxrX3QsRV90XSl9ZnVuY3Rpb24gVWluKCl7cmV0dXJuIEZ6KCksbHQoY3QocV90LDEpLG9lLDM4MSwwLFt6X3QsUWh0LCRfdF0pfWZ1bmN0aW9uIFdpbigpe3JldHVybiBteigpLGx0KGN0KFJfdCwxKSxvZSwyOTMsMCxbWGh0LEJfdCxOX3RdKX1mdW5jdGlvbiBZaW4oKXtyZXR1cm4gS0QoKSxsdChjdChaaHQsMSksb2UsNDM3LDAsW2pHLCRHLHpHXSl9ZnVuY3Rpb24gS2luKCl7cmV0dXJuIEcwKCksbHQoY3QoREF0LDEpLG9lLDMzNCwwLFt0VSxzcCxaU10pfWZ1bmN0aW9uIFhpbigpe3JldHVybiBNMSgpLGx0KGN0KG1BdCwxKSxvZSwyNzIsMCxbUDcsWnksRjddKX1mdW5jdGlvbiBRaW4odCxlKXtyZXR1cm4gdjJuKHQsZSxfdChlLDk5KSYmKHUoZSwxOCkuQmImS2EpIT0wKX1mdW5jdGlvbiBaaW4odCxlLG4pe3ZhciByO3JldHVybiByPV9fKHQsZSwhMSksci5iPD1lJiZyLmE8PW59ZnVuY3Rpb24gblp0KHQsZSxuKXt2YXIgcjtyPW5ldyBOUSxyLmI9ZSxyLmE9biwrK2UuYixsZSh0LmQscil9ZnVuY3Rpb24gSmluKHQsZSl7dmFyIG47cmV0dXJuIG49KE9uKHQpLHQpLmcscTJ0KCEhbiksT24oZSksbihlKX1mdW5jdGlvbiBZdnQodCxlKXt2YXIgbixyO3JldHVybiByPUM4KHQsZSksbj10LmEuWmMociksbmV3IHdWdCh0LG4pfWZ1bmN0aW9uIHRzbih0KXtyZXR1cm4gdC5EYj4+MTYhPTY/bnVsbDp1KGVhdCh0KSwyMzUpfWZ1bmN0aW9uIGVzbih0KXtpZih0LnAhPTIpdGhyb3cgaXQobmV3IE91KTtyZXR1cm4gQXIodC5mKSZ5c31mdW5jdGlvbiBuc24odCl7aWYodC5wIT0yKXRocm93IGl0KG5ldyBPdSk7cmV0dXJuIEFyKHQuaykmeXN9ZnVuY3Rpb24gcnNuKHQpe3JldHVybiB0LmE9PShCOCgpLHZVKSYmQnR0KHQsUDJuKHQuZyx0LmIpKSx0LmF9ZnVuY3Rpb24gS3godCl7cmV0dXJuIHQuZD09KEI4KCksdlUpJiZfQyh0LFNtbih0LmcsdC5iKSksdC5kfWZ1bmN0aW9uIEoodCl7cmV0dXJuIFpuKHQuYTx0LmMuYy5sZW5ndGgpLHQuYj10LmErKyx0LmMuY1t0LmJdfWZ1bmN0aW9uIGlzbih0LGUpe3QuYj10LmJ8ZS5iLHQuYz10LmN8ZS5jLHQuZD10LmR8ZS5kLHQuYT10LmF8ZS5hfWZ1bmN0aW9uIE5zKHQsZSl7cmV0dXJuIEtwKFplbihCbyh0KT9MaCh0KTp0LEJvKGUpP0xoKGUpOmUpKX1mdW5jdGlvbiBTMSh0LGUpe3JldHVybiBLcChKZW4oQm8odCk/TGgodCk6dCxCbyhlKT9MaChlKTplKSl9ZnVuY3Rpb24gRHJ0KHQsZSl7cmV0dXJuIEtwKHRubihCbyh0KT9MaCh0KTp0LEJvKGUpP0xoKGUpOmUpKX1mdW5jdGlvbiBzc24odCl7cmV0dXJuIFBhKEYwKFR1KHVsKHQsMzIpKSwzMiksVHUodWwodCwzMikpKX1mdW5jdGlvbiBXdyh0KXtyZXR1cm4gTHIodCksX3QodCwxNCk/bmV3IEJ1KHUodCwxNCkpOng4KHQuS2MoKSl9ZnVuY3Rpb24gYXNuKHQsZSl7cmV0dXJuIEg5KCksdC5jPT1lLmM/TXMoZS5kLHQuZCk6TXModC5jLGUuYyl9ZnVuY3Rpb24gb3NuKHQsZSl7cmV0dXJuIEg5KCksdC5jPT1lLmM/TXModC5kLGUuZCk6TXModC5jLGUuYyl9ZnVuY3Rpb24gY3NuKHQsZSl7cmV0dXJuIEg5KCksdC5jPT1lLmM/TXModC5kLGUuZCk6TXMoZS5jLHQuYyl9ZnVuY3Rpb24gdXNuKHQsZSl7cmV0dXJuIEg5KCksdC5jPT1lLmM/TXMoZS5kLHQuZCk6TXMoZS5jLHQuYyl9ZnVuY3Rpb24gbHNuKHQsZSl7dmFyIG47bj1YdCh5ZSh0LmEuV2UoKHVpKCksSkcpKSkpLFZoZSh0LGUsbil9ZnVuY3Rpb24gaHNuKHQsZSl7dmFyIG47bj11KHRyKHQuZyxlKSw1NykseHUoZS5kLG5ldyBhR3QodCxuKSl9ZnVuY3Rpb24gZnNuKHQsZSl7dmFyIG4scjtyZXR1cm4gbj1xc2UodCkscj1xc2UoZSksbjxyPy0xOm4+cj8xOjB9ZnVuY3Rpb24gclp0KHQsZSl7dmFyIG4scjtyZXR1cm4gbj1laXQoZSkscj1uLHUodHIodC5jLHIpLDE5KS5hfWZ1bmN0aW9uIGladCh0LGUpe3ZhciBuO2ZvcihuPXQrIiI7bi5sZW5ndGg8ZTspbj0iMCIrbjtyZXR1cm4gbn1mdW5jdGlvbiBTJCh0KXtyZXR1cm4gdC5jPT1udWxsfHx0LmMubGVuZ3RoPT0wPyJuXyIrdC5nOiJuXyIrdC5jfWZ1bmN0aW9uIEt2dCh0KXtyZXR1cm4gdC5jPT1udWxsfHx0LmMubGVuZ3RoPT0wPyJuXyIrdC5iOiJuXyIrdC5jfWZ1bmN0aW9uIFh2dCh0LGUpe3JldHVybiB0JiZ0LmVxdWFscz90LmVxdWFscyhlKTpWdCh0KT09PVZ0KGUpfWZ1bmN0aW9uIFF2dCh0LGUpe3JldHVybiBlPT0wPyEhdC5vJiZ0Lm8uZiE9MDpmc3QodCxlKX1mdW5jdGlvbiBnZih0LGUsbil7dmFyIHI7dC5uJiZlJiZuJiYocj1uZXcgSlosbGUodC5lLHIpKX1mdW5jdGlvbiBJcnQodCxlLG4pe3ZhciByO3I9dC5kW2UucF0sdC5kW2UucF09dC5kW24ucF0sdC5kW24ucF09cn1mdW5jdGlvbiBzWnQodCxlLG4pe3RoaXMuZD10LHRoaXMuaj1lLHRoaXMuZT1uLHRoaXMubz0tMSx0aGlzLnA9M31mdW5jdGlvbiBhWnQodCxlLG4pe3RoaXMuZD10LHRoaXMuaz1lLHRoaXMuZj1uLHRoaXMubz0tMSx0aGlzLnA9NX1mdW5jdGlvbiBvWnQodCxlLG4pe3l3LmNhbGwodGhpcywyNSksdGhpcy5iPXQsdGhpcy5hPWUsdGhpcy5jPW59ZnVuY3Rpb24gTmwodCl7Z2koKSx5dy5jYWxsKHRoaXMsdCksdGhpcy5jPSExLHRoaXMuYT0hMX1mdW5jdGlvbiBjWnQodCxlLG4scixzLG8pe1ltdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiB1WnQodCxlLG4scixzLG8pe0ttdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBsWnQodCxlLG4scixzLG8pe21tdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBoWnQodCxlLG4scixzLG8pe1ptdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBmWnQodCxlLG4scixzLG8pe3ltdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBkWnQodCxlLG4scixzLG8pe1htdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBnWnQodCxlLG4scixzLG8pe1FtdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBwWnQodCxlLG4scixzLG8pe3htdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBiWnQodCxlLG4scil7dlIuY2FsbCh0aGlzLG4pLHRoaXMuYj10LHRoaXMuYz1lLHRoaXMuZD1yfWZ1bmN0aW9uIFp2dCh0LGUpe3RoaXMuYT1uZXcgaGUsdGhpcy5kPW5ldyBoZSx0aGlzLmY9dCx0aGlzLmM9ZX1mdW5jdGlvbiB3WnQoKXt0aGlzLmM9bmV3IEhVdCx0aGlzLmE9bmV3IHVRdCx0aGlzLmI9bmV3IHhxdCxQVnQoKX1mdW5jdGlvbiB2WnQoKXtpNigpLHRoaXMuYj1uZXcgX3IsdGhpcy5hPW5ldyBfcix0aGlzLmM9bmV3IGhlfWZ1bmN0aW9uIG1adCh0LGUpe3RoaXMuZz10LHRoaXMuZD0oQjgoKSx2VSksdGhpcy5hPXZVLHRoaXMuYj1lfWZ1bmN0aW9uIHladCh0LGUpe3RoaXMuZj10LHRoaXMuYT0oQjgoKSx3VSksdGhpcy5jPXdVLHRoaXMuYj1lfWZ1bmN0aW9uIEp2dCh0LGUpeyF0LmMmJih0LmM9bmV3IHNzKHQsMCkpLE9xKHQuYywoSWkoKSxsQSksZSl9ZnVuY3Rpb24gQSQoKXtBJD1aLHFodD1uZXcgS2J0KCJERlMiLDApLHdfdD1uZXcgS2J0KCJCRlMiLDEpfWZ1bmN0aW9uIGRzbih0LGUsbil7dmFyIHI7cmV0dXJuIHI9dSh0LlpiKCkueGMoZSksMTQpLCEhciYmci5IYyhuKX1mdW5jdGlvbiB4WnQodCxlLG4pe3ZhciByO3JldHVybiByPXUodC5aYigpLnhjKGUpLDE0KSwhIXImJnIuTWMobil9ZnVuY3Rpb24ga1p0KHQsZSxuLHIpe3JldHVybiB0LmErPSIiK1BsKGU9PW51bGw/X3U6JG8oZSksbixyKSx0fWZ1bmN0aW9uIHJjKHQsZSxuLHIscyxvKXtyZXR1cm4gRm5lKHQsZSxuLG8pLHIzdCh0LHIpLGkzdCh0LHMpLHR9ZnVuY3Rpb24gT3J0KHQpe3JldHVybiBabih0LmIuYiE9dC5kLmEpLHQuYz10LmI9dC5iLmIsLS10LmEsdC5jLmN9ZnVuY3Rpb24gTjkodCl7Zm9yKDt0LmQ+MCYmdC5hWy0tdC5kXT09MDspO3QuYVt0LmQrK109PTAmJih0LmU9MCl9ZnVuY3Rpb24gRVp0KHQpe3JldHVybiB0LmE/dC5lLmxlbmd0aD09MD90LmEuYTp0LmEuYSsoIiIrdC5lKTp0LmN9ZnVuY3Rpb24gZ3NuKHQpe3JldHVybiEhdC5hJiZhbCh0LmEuYSkuaSE9MCYmISh0LmImJm1zdCh0LmIpKX1mdW5jdGlvbiBwc24odCl7cmV0dXJuISF0LnUmJkxjKHQudS5hKS5pIT0wJiYhKHQubiYmdnN0KHQubikpfWZ1bmN0aW9uIFRadCh0KXtyZXR1cm4gQm50KHQuZS5IZCgpLmdjKCkqdC5jLkhkKCkuZ2MoKSwxNixuZXcgZ3godCkpfWZ1bmN0aW9uIGJzbih0LGUpe3JldHVybiB0WHQoVHUodC5xLmdldFRpbWUoKSksVHUoZS5xLmdldFRpbWUoKSkpfWZ1bmN0aW9uIHdkKHQpe3JldHVybiB1KFAxKHQsTnQoaGx0LFdvdCwxNyx0LmMubGVuZ3RoLDAsMSkpLDQ3NCl9ZnVuY3Rpb24gbEQodCl7cmV0dXJuIHUoUDEodCxOdChsMCxZZywxMCx0LmMubGVuZ3RoLDAsMSkpLDE5Myl9ZnVuY3Rpb24gd3NuKHQpe3JldHVybiBGbCgpLCFHYSh0KSYmISghR2EodCkmJnQuYy5pLmM9PXQuZC5pLmMpfWZ1bmN0aW9uIENadCh0LGUsbil7dmFyIHI7cj0oTHIodCksbmV3IEJ1KHQpKSxXMW4obmV3IFJRdChyLGUsbikpfWZ1bmN0aW9uIGhEKHQsZSxuKXt2YXIgcjtyPShMcih0KSxuZXcgQnUodCkpLFkxbihuZXcgalF0KHIsZSxuKSl9ZnVuY3Rpb24gX1p0KHQsZSl7dmFyIG47cmV0dXJuIG49MS1lLHQuYVtuXT1keih0LmFbbl0sbiksZHoodCxlKX1mdW5jdGlvbiBTWnQodCxlKXt2YXIgbjt0LmU9bmV3IFpwdCxuPXd5KGUpLFpzKG4sdC5jKSx5dWUodCxuLDApfWZ1bmN0aW9uIGNhKHQsZSxuLHIpe3ZhciBzO3M9bmV3IGlCLHMuYT1lLHMuYj1uLHMuYz1yLHJpKHQuYSxzKX1mdW5jdGlvbiB4ZSh0LGUsbixyKXt2YXIgcztzPW5ldyBpQixzLmE9ZSxzLmI9bixzLmM9cixyaSh0LmIscyl9ZnVuY3Rpb24gcGYodCl7dmFyIGUsbixyO3JldHVybiBlPW5ldyBvWHQsbj15YXQoZSx0KSxuNW4oZSkscj1uLHJ9ZnVuY3Rpb24gdG10KCl7dmFyIHQsZSxuO3JldHVybiBlPShuPSh0PW5ldyB4dyx0KSxuKSxsZShiTHQsZSksZX1mdW5jdGlvbiBMJCh0KXtyZXR1cm4gdC5qLmM9TnQoUW4sRGUsMSwwLDUsMSksRHZ0KHQuYyksUW5uKHQuYSksdH1mdW5jdGlvbiB0NCh0KXtyZXR1cm4gR0MoKSxfdCh0LmcsMTApP3UodC5nLDEwKTpudWxsfWZ1bmN0aW9uIHZzbih0KXtyZXR1cm4gUTModCkuZGMoKT8hMTood1FlKHQsbmV3IHV0KSwhMCl9ZnVuY3Rpb24gbXNuKHQpe2lmKCEoInN0YWNrImluIHQpKXRyeXt0aHJvdyB0fWNhdGNoe31yZXR1cm4gdH1mdW5jdGlvbiBmRCh0LGUpe2lmKHQ8MHx8dD49ZSl0aHJvdyBpdChuZXcgeW8oSXBuKHQsZSkpKTtyZXR1cm4gdH1mdW5jdGlvbiBBWnQodCxlLG4pe2lmKHQ8MHx8ZTx0fHxlPm4pdGhyb3cgaXQobmV3IHlvKHJwbih0LGUsbikpKX1mdW5jdGlvbiBQcnQodCxlKXtpZihGcyh0LmEsZSksZS5kKXRocm93IGl0KG5ldyBWbyhQZmUpKTtlLmQ9dH1mdW5jdGlvbiBGcnQodCxlKXtpZihlLiRtb2RDb3VudCE9dC4kbW9kQ291bnQpdGhyb3cgaXQobmV3IHJoKX1mdW5jdGlvbiBMWnQodCxlKXtyZXR1cm4gX3QoZSw0Mik/VHN0KHQuYSx1KGUsNDIpKTohMX1mdW5jdGlvbiBNWnQodCxlKXtyZXR1cm4gX3QoZSw0Mik/VHN0KHQuYSx1KGUsNDIpKTohMX1mdW5jdGlvbiBEWnQodCxlKXtyZXR1cm4gX3QoZSw0Mik/VHN0KHQuYSx1KGUsNDIpKTohMX1mdW5jdGlvbiB5c24odCxlKXtyZXR1cm4gdC5hPD10LmI/KGUudWQodC5hKyspLCEwKTohMX1mdW5jdGlvbiBZdyh0KXt2YXIgZTtyZXR1cm4gQm8odCk/KGU9dCxlPT0tMD8wOmUpOkxvbih0KX1mdW5jdGlvbiBNJCh0KXt2YXIgZTtyZXR1cm4gVnAodCksZT1uZXcgWWUsajModC5hLG5ldyBibihlKSksZX1mdW5jdGlvbiBJWnQodCl7dmFyIGU7cmV0dXJuIFZwKHQpLGU9bmV3IFZlLGozKHQuYSxuZXcgd2UoZSkpLGV9ZnVuY3Rpb24gZGEodCxlKXt0aGlzLmE9dCxteC5jYWxsKHRoaXMsdCksS20oZSx0LmdjKCkpLHRoaXMuYj1lfWZ1bmN0aW9uIGVtdCh0KXt0aGlzLmU9dCx0aGlzLmI9dGhpcy5lLmEuZW50cmllcygpLHRoaXMuYT1uZXcgQXJyYXl9ZnVuY3Rpb24geHNuKHQpe3JldHVybiBCbnQodC5lLkhkKCkuZ2MoKSp0LmMuSGQoKS5nYygpLDI3MyxuZXcgZVIodCkpfWZ1bmN0aW9uIEQkKHQpe3JldHVybiBuZXcgWGMoKGpsKHQsWWF0KSxKJChQYShQYSg1LHQpLHQvMTB8MCkpKSl9ZnVuY3Rpb24gT1p0KHQpe3JldHVybiB1KFAxKHQsTnQoSmJlLGgxZSwxMSx0LmMubGVuZ3RoLDAsMSkpLDE5NDMpfWZ1bmN0aW9uIGtzbih0LGUsbil7cmV0dXJuIG4uZi5jLmxlbmd0aD4wP3Z2dCh0LmEsZSxuKTp2dnQodC5iLGUsbil9ZnVuY3Rpb24gRXNuKHQsZSxuKXt0LmQmJm11KHQuZC5lLHQpLHQuZD1lLHQuZCYmSG0odC5kLmUsbix0KX1mdW5jdGlvbiBOcnQodCxlKXtieG4oZSx0KSxCd3QodC5kKSxCd3QodShRKHQsKFRlKCksZEcpKSwyMDcpKX1mdW5jdGlvbiBCOSh0LGUpe3B4bihlLHQpLE53dCh0LmQpLE53dCh1KFEodCwoVGUoKSxkRykpLDIwNykpfWZ1bmN0aW9uIEt3KHQsZSl7dmFyIG4scjtyZXR1cm4gbj1CMCh0LGUpLHI9bnVsbCxuJiYocj1uLmZlKCkpLHJ9ZnVuY3Rpb24gUDgodCxlKXt2YXIgbixyO3JldHVybiBuPUptKHQsZSkscj1udWxsLG4mJihyPW4uaWUoKSkscn1mdW5jdGlvbiBSOSh0LGUpe3ZhciBuLHI7cmV0dXJuIG49QjAodCxlKSxyPW51bGwsbiYmKHI9bi5pZSgpKSxyfWZ1bmN0aW9uIFIwKHQsZSl7dmFyIG4scjtyZXR1cm4gbj1CMCh0LGUpLHI9bnVsbCxuJiYocj1VNHQobikpLHJ9ZnVuY3Rpb24gVHNuKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj1wRShuKSxBcSh0LmcscixlKSxBcSh0LmksZSxuKSxlfWZ1bmN0aW9uIENzbih0LGUsbil7dmFyIHI7cj1KaG4oKTt0cnl7cmV0dXJuIE1aZSh0LGUsbil9ZmluYWxseXtOc24ocil9fWZ1bmN0aW9uIFBadCh0KXt2YXIgZTtlPXQuV2coKSx0aGlzLmE9X3QoZSw2OSk/dShlLDY5KS5aaCgpOmUuS2MoKX1mdW5jdGlvbiBWcygpe1lxdC5jYWxsKHRoaXMpLHRoaXMuai5jPU50KFFuLERlLDEsMCw1LDEpLHRoaXMuYT0tMX1mdW5jdGlvbiBubXQodCxlLG4scil7dGhpcy5kPXQsdGhpcy5uPWUsdGhpcy5nPW4sdGhpcy5vPXIsdGhpcy5wPS0xfWZ1bmN0aW9uIEZadCh0LGUsbixyKXt0aGlzLmU9cix0aGlzLmQ9bnVsbCx0aGlzLmM9dCx0aGlzLmE9ZSx0aGlzLmI9bn1mdW5jdGlvbiBybXQodCxlLG4pe3RoaXMuZD1uZXcgYlIodGhpcyksdGhpcy5lPXQsdGhpcy5pPWUsdGhpcy5mPW59ZnVuY3Rpb24gSSQoKXtJJD1aLEhsdD1uZXcgJGJ0KHFFLDApLFpUdD1uZXcgJGJ0KCJUT1BfTEVGVCIsMSl9ZnVuY3Rpb24gTlp0KCl7Tlp0PVosbl90PURYdChwZSgxKSxwZSg0KSksZV90PURYdChwZSgxKSxwZSgyKSl9ZnVuY3Rpb24gQlp0KCl7Qlp0PVosQzNlPVdyKChxUigpLGx0KGN0KFQzZSwxKSxvZSw1NTEsMCxbdGZ0XSkpKX1mdW5jdGlvbiBSWnQoKXtSWnQ9WixFM2U9V3IoKHpSKCksbHQoY3QoZVN0LDEpLG9lLDQ4MiwwLFtKaHRdKSkpfWZ1bmN0aW9uIGpadCgpe2padD1aLEgzZT1XcigoVUMoKSxsdChjdChrU3QsMSksb2UsNTMwLDAsW1ZPXSkpKX1mdW5jdGlvbiAkWnQoKXskWnQ9WixLcGU9V3IoKGpSKCksbHQoY3QobDd0LDEpLG9lLDQ4MSwwLFtLdXRdKSkpfWZ1bmN0aW9uIF9zbigpe3JldHVybiBydigpLGx0KGN0KHFwZSwxKSxvZSw0MDYsMCxbaE8sbE8sV3V0LFl1dF0pfWZ1bmN0aW9uIFNzbigpe3JldHVybiBVJCgpLGx0KGN0KHNWLDEpLG9lLDI5NywwLFtqdXQsT0V0LFBFdCxGRXRdKX1mdW5jdGlvbiBBc24oKXtyZXR1cm4gY18oKSxsdChjdChXcGUsMSksb2UsMzk0LDAsW2JPLGxWLGhWLHdPXSl9ZnVuY3Rpb24gTHNuKCl7cmV0dXJuIHU2KCksbHQoY3QoVnBlLDEpLG9lLDMyMywwLFtkTyxmTyxnTyxwT10pfWZ1bmN0aW9uIE1zbigpe3JldHVybiBuRSgpLGx0KGN0KHpiZSwxKSxvZSw0MDUsMCxbTHYsRnksUHksejRdKX1mdW5jdGlvbiBEc24oKXtyZXR1cm4gVHooKSxsdChjdChhMmUsMSksb2UsMzYwLDAsW3dsdCxCVixSVixrT10pfWZ1bmN0aW9uIHpadCh0LGUsbixyKXtyZXR1cm4gX3Qobiw1NCk/bmV3IFNXdCh0LGUsbixyKTpuZXcgb3Z0KHQsZSxuLHIpfWZ1bmN0aW9uIElzbigpe3JldHVybiBJMSgpLGx0KGN0KHAyZSwxKSxvZSw0MTEsMCxbTzYsZjcsZDcsdmx0XSl9ZnVuY3Rpb24gT3NuKHQpe3ZhciBlO3JldHVybiB0Lmo9PSh2ZSgpLG1yKSYmKGU9dWNlKHQpLE51KGUsSG4pKX1mdW5jdGlvbiBQc24odCxlKXt2YXIgbjtuPWUuYSxPYShuLGUuYy5kKSxvYShuLGUuZC5kKSxueShuLmEsdC5uKX1mdW5jdGlvbiBxWnQodCxlKXtyZXR1cm4gdShOdyhKaih1KEFpKHQuayxlKSwxNSkuT2MoKSxINCkpLDExMyl9ZnVuY3Rpb24gSFp0KHQsZSl7cmV0dXJuIHUoTncodCQodShBaSh0LmssZSksMTUpLk9jKCksSDQpKSwxMTMpfWZ1bmN0aW9uIEZzbih0KXtyZXR1cm4gbmV3IF9uKEljbih1KHQuYS5kZCgpLDE0KS5nYygpLHQuYS5jZCgpKSwxNil9ZnVuY3Rpb24gRjgodCl7cmV0dXJuIF90KHQsMTQpP3UodCwxNCkuZGMoKTohdC5LYygpLk9iKCl9ZnVuY3Rpb24gWHgodCl7cmV0dXJuIEdDKCksX3QodC5nLDE0NSk/dSh0LmcsMTQ1KTpudWxsfWZ1bmN0aW9uIFZadCh0KXtpZih0LmUuZyE9dC5iKXRocm93IGl0KG5ldyByaCk7cmV0dXJuISF0LmMmJnQuZD4wfWZ1bmN0aW9uIHRpKHQpe3JldHVybiBabih0LmIhPXQuZC5jKSx0LmM9dC5iLHQuYj10LmIuYSwrK3QuYSx0LmMuY31mdW5jdGlvbiBpbXQodCxlKXtPbihlKSx0cyh0LmEsdC5jLGUpLHQuYz10LmMrMSZ0LmEubGVuZ3RoLTEsR3NlKHQpfWZ1bmN0aW9uIFVwKHQsZSl7T24oZSksdC5iPXQuYi0xJnQuYS5sZW5ndGgtMSx0cyh0LmEsdC5iLGUpLEdzZSh0KX1mdW5jdGlvbiBHWnQodCxlKXt2YXIgbjtmb3Iobj10LmouYy5sZW5ndGg7bjxlO24rKylsZSh0LmosdC5yZygpKX1mdW5jdGlvbiBVWnQodCxlLG4scil7dmFyIHM7cmV0dXJuIHM9cltlLmddW24uZ10sWHQoeWUoUSh0LmEscykpKX1mdW5jdGlvbiBzbXQodCxlLG4scixzKXt0aGlzLmk9dCx0aGlzLmE9ZSx0aGlzLmU9bix0aGlzLmo9cix0aGlzLmY9c31mdW5jdGlvbiBXWnQodCxlLG4scixzKXt0aGlzLmE9dCx0aGlzLmU9ZSx0aGlzLmY9bix0aGlzLmI9cix0aGlzLmc9c31mdW5jdGlvbiBOc24odCl7dCYmSW9uKChuYnQoKSxyRXQpKSwtLVpILHQmJkpIIT0tMSYmKHlYZShKSCksSkg9LTEpfWZ1bmN0aW9uIEJzbigpe3JldHVybiBjeSgpLGx0KGN0KHlodCwxKSxvZSwxOTcsMCxbeEcsbWh0LG41LGU1XSl9ZnVuY3Rpb24gUnNuKCl7cmV0dXJuIHdFKCksbHQoY3Qoc190LDEpLG9lLDM5MywwLFtBRyxSUywkTyxqU10pfWZ1bmN0aW9uIGpzbigpe3JldHVybiBlcSgpLGx0KGN0KEZfdCwxKSxvZSwzNDAsMCxbS2h0LE9fdCxQX3QsSV90XSl9ZnVuY3Rpb24gJHNuKCl7cmV0dXJuIEFsKCksbHQoY3QockEsMSksb2UsMzc0LDAsW29QLEsyLGFQLEp5XSl9ZnVuY3Rpb24genNuKCl7cmV0dXJuIHpsKCksbHQoY3QoXzRlLDEpLG9lLDI4NSwwLFtyUCxmMCxrYixuUF0pfWZ1bmN0aW9uIHFzbigpe3JldHVybiBXMCgpLGx0KGN0KF9mdCwxKSxvZSwyMTgsMCxbQ2Z0LGVQLE43LFg2XSl9ZnVuY3Rpb24gSHNuKCl7cmV0dXJuIGp6KCksbHQoY3QoJEF0LDEpLG9lLDMxMSwwLFtMZnQsQkF0LGpBdCxSQXRdKX1mdW5jdGlvbiBWc24oKXtyZXR1cm4gU2woKSxsdChjdCh6NGUsMSksb2UsMzk2LDAsW1FsLHFBdCx6QXQsSEF0XSl9ZnVuY3Rpb24gR3NuKHQpe3JldHVybiBDJCgpLFRsKFBmdCx0KT91KHRyKFBmdCx0KSwzMzEpLnVnKCk6bnVsbH1mdW5jdGlvbiBvaCh0LGUsbil7cmV0dXJuIGU8MD9ac3QodCxuKTp1KG4sNjYpLk5qKCkuU2oodCx0LnloKCksZSl9ZnVuY3Rpb24gVXNuKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj1wRShuKSxBcSh0LmQscixlKSxraSh0LmUsZSxuKSxlfWZ1bmN0aW9uIFdzbih0LGUsbil7dmFyIHI7cmV0dXJuIHI9cEUobiksQXEodC5qLHIsZSksa2kodC5rLGUsbiksZX1mdW5jdGlvbiBZWnQodCl7dmFyIGUsbjtyZXR1cm4gZT0oU3coKSxuPW5ldyBwdyxuKSx0JiZvYXQoZSx0KSxlfWZ1bmN0aW9uIGFtdCh0KXt2YXIgZTtyZXR1cm4gZT10LnJpKHQuaSksdC5pPjAmJkRjKHQuZywwLGUsMCx0LmkpLGV9ZnVuY3Rpb24gS1p0KHQsZSl7R1IoKTt2YXIgbjtyZXR1cm4gbj11KHRyKGRVLHQpLDU1KSwhbnx8bi53aihlKX1mdW5jdGlvbiBZc24odCl7aWYodC5wIT0xKXRocm93IGl0KG5ldyBPdSk7cmV0dXJuIEFyKHQuZik8PDI0Pj4yNH1mdW5jdGlvbiBLc24odCl7aWYodC5wIT0xKXRocm93IGl0KG5ldyBPdSk7cmV0dXJuIEFyKHQuayk8PDI0Pj4yNH1mdW5jdGlvbiBYc24odCl7aWYodC5wIT03KXRocm93IGl0KG5ldyBPdSk7cmV0dXJuIEFyKHQuayk8PDE2Pj4xNn1mdW5jdGlvbiBRc24odCl7aWYodC5wIT03KXRocm93IGl0KG5ldyBPdSk7cmV0dXJuIEFyKHQuZik8PDE2Pj4xNn1mdW5jdGlvbiBqMCh0KXt2YXIgZTtmb3IoZT0wO3QuT2IoKTspdC5QYigpLGU9UGEoZSwxKTtyZXR1cm4gSiQoZSl9ZnVuY3Rpb24gWFp0KHQsZSl7dmFyIG47cmV0dXJuIG49bmV3IEltLHQueGQobiksbi5hKz0iLi4iLGUueWQobiksbi5hfWZ1bmN0aW9uIFpzbih0LGUsbil7dmFyIHI7cj11KHRyKHQuZyxuKSw1NyksbGUodC5hLmMsbmV3IGZhKGUscikpfWZ1bmN0aW9uIEpzbih0LGUsbil7cmV0dXJuIFVudCh5ZShlYyhMbyh0LmYsZSkpKSx5ZShlYyhMbyh0LmYsbikpKSl9ZnVuY3Rpb24gTyQodCxlLG4pe3JldHVybiBNcSh0LGUsbixfdChlLDk5KSYmKHUoZSwxOCkuQmImS2EpIT0wKX1mdW5jdGlvbiB0YW4odCxlLG4pe3JldHVybiBERSh0LGUsbixfdChlLDk5KSYmKHUoZSwxOCkuQmImS2EpIT0wKX1mdW5jdGlvbiBlYW4odCxlLG4pe3JldHVybiBUMm4odCxlLG4sX3QoZSw5OSkmJih1KGUsMTgpLkJiJkthKSE9MCl9ZnVuY3Rpb24gb210KHQsZSl7cmV0dXJuIHQ9PShWbigpLE9zKSYmZT09T3M/NDp0PT1Pc3x8ZT09T3M/ODozMn1mdW5jdGlvbiBRWnQodCxlKXtyZXR1cm4gVnQoZSk9PT1WdCh0KT8iKHRoaXMgTWFwKSI6ZT09bnVsbD9fdTokbyhlKX1mdW5jdGlvbiBuYW4odCxlKXtyZXR1cm4gdShlPT1udWxsP2VjKExvKHQuZixudWxsKSk6S0ModC5nLGUpLDI4MSl9ZnVuY3Rpb24gWlp0KHQsZSxuKXt2YXIgcjtyZXR1cm4gcj1wRShuKSxraSh0LmIscixlKSxraSh0LmMsZSxuKSxlfWZ1bmN0aW9uIEpadCh0LGUpe3ZhciBuO2ZvcihuPWU7bjspam0odCxuLmksbi5qKSxuPWVzKG4pO3JldHVybiB0fWZ1bmN0aW9uIGNtdCh0LGUpe3ZhciBuO3JldHVybiBuPWlEKHg4KG5ldyBuaXQodCxlKSkpLFZqKG5ldyBuaXQodCxlKSksbn1mdW5jdGlvbiBaZCh0LGUpe3RvKCk7dmFyIG47cmV0dXJuIG49dSh0LDY2KS5NaigpLE5nbihuLGUpLG4uT2soZSl9ZnVuY3Rpb24gcmFuKHQsZSxuLHIscyl7dmFyIG87bz1MMm4ocyxuLHIpLGxlKGUsU3BuKHMsbykpLHZnbih0LHMsZSl9ZnVuY3Rpb24gdEp0KHQsZSxuKXt0Lmk9MCx0LmU9MCxlIT1uJiYoQ3JlKHQsZSxuKSxUcmUodCxlLG4pKX1mdW5jdGlvbiB1bXQodCxlKXt2YXIgbjtuPXQucS5nZXRIb3VycygpLHQucS5zZXRGdWxsWWVhcihlK2FiKSxFXyh0LG4pfWZ1bmN0aW9uIGlhbih0LGUsbil7aWYobil7dmFyIHI9bi5lZSgpO3QuYVtlXT1yKG4pfWVsc2UgZGVsZXRlIHQuYVtlXX1mdW5jdGlvbiBCcnQodCxlLG4pe2lmKG4pe3ZhciByPW4uZWUoKTtuPXIobil9ZWxzZSBuPXZvaWQgMDt0LmFbZV09bn1mdW5jdGlvbiBlSnQodCl7aWYodDwwKXRocm93IGl0KG5ldyBhSHQoIk5lZ2F0aXZlIGFycmF5IHNpemU6ICIrdCkpfWZ1bmN0aW9uIExjKHQpe3JldHVybiB0Lm58fChzbCh0KSx0Lm49bmV3IFBLdCh0LGhvLHQpLEFvKHQpKSx0Lm59ZnVuY3Rpb24gajkodCl7cmV0dXJuIFpuKHQuYTx0LmMuYS5sZW5ndGgpLHQuYj10LmEsY2VlKHQpLHQuYy5iW3QuYl19ZnVuY3Rpb24gbG10KHQpe3QuYiE9dC5jJiYodC5hPU50KFFuLERlLDEsOCw1LDEpLHQuYj0wLHQuYz0wKX1mdW5jdGlvbiBuSnQodCl7dGhpcy5iPW5ldyBfcix0aGlzLmM9bmV3IF9yLHRoaXMuZD1uZXcgX3IsdGhpcy5hPXR9ZnVuY3Rpb24gWG0odCxlKXtnaSgpLHl3LmNhbGwodGhpcyx0KSx0aGlzLmE9ZSx0aGlzLmM9LTEsdGhpcy5iPS0xfWZ1bmN0aW9uIFFtKHQsZSxuLHIpe3NadC5jYWxsKHRoaXMsMSxuLHIpLHRoaXMuYz10LHRoaXMuYj1lfWZ1bmN0aW9uIFJydCh0LGUsbixyKXthWnQuY2FsbCh0aGlzLDEsbixyKSx0aGlzLmM9dCx0aGlzLmI9ZX1mdW5jdGlvbiBqcnQodCxlLG4scixzLG8saCl7Zml0LmNhbGwodGhpcyxlLHIscyxvLGgpLHRoaXMuYz10LHRoaXMuYT1ufWZ1bmN0aW9uIHMyKHQsZSxuKXt0aGlzLmU9dCx0aGlzLmE9UW4sdGhpcy5iPSR1ZShlKSx0aGlzLmM9ZSx0aGlzLmQ9bn1mdW5jdGlvbiAkcnQodCl7dGhpcy5lPXQsdGhpcy5jPXRoaXMuZS5hLHRoaXMuYj10aGlzLmUuZyx0aGlzLmQ9dGhpcy5lLml9ZnVuY3Rpb24gckp0KHQpe3RoaXMuYz10LHRoaXMuYT11KERoKHQpLDE0OCksdGhpcy5iPXRoaXMuYS5BaigpLk5oKCl9ZnVuY3Rpb24gaG10KHQpe3RoaXMuZD10LHRoaXMuYj10aGlzLmQuYS5lbnRyaWVzKCksdGhpcy5hPXRoaXMuYi5uZXh0KCl9ZnVuY3Rpb24gYTIoKXtfci5jYWxsKHRoaXMpLEVXdCh0aGlzKSx0aGlzLmQuYj10aGlzLmQsdGhpcy5kLmE9dGhpcy5kfWZ1bmN0aW9uIGlKdCh0LGUpe293dC5jYWxsKHRoaXMpLHRoaXMuYT10LHRoaXMuYj1lLGxlKHRoaXMuYS5iLHRoaXMpfWZ1bmN0aW9uIHNhbih0LGUpe3ZhciBuO3JldHVybiBuPWUhPW51bGw/TmModCxlKTplYyhMbyh0LmYsZSkpLGRqKG4pfWZ1bmN0aW9uIGFhbih0LGUpe3ZhciBuO3JldHVybiBuPWUhPW51bGw/TmModCxlKTplYyhMbyh0LmYsZSkpLGRqKG4pfWZ1bmN0aW9uIHNKdCh0LGUpe3ZhciBuO2ZvcihuPTA7bjxlOysrbil0cyh0LG4sbmV3ICQodSh0W25dLDQyKSkpfWZ1bmN0aW9uIG9hbih0LGUpe3ZhciBuO2ZvcihuPXQuZC0xO24+PTAmJnQuYVtuXT09PWVbbl07bi0tKTtyZXR1cm4gbjwwfWZ1bmN0aW9uIGFKdCh0LGUpe29FKCk7dmFyIG47cmV0dXJuIG49dC5qLmctZS5qLmcsbiE9MD9uOjB9ZnVuY3Rpb24gb0p0KHQsZSl7cmV0dXJuIE9uKGUpLHQuYSE9bnVsbD9IZW4oZS5LYih0LmEpKTppVn1mdW5jdGlvbiBQJCh0KXt2YXIgZTtyZXR1cm4gdD9uZXcgV3d0KHQpOihlPW5ldyBPMCx4aXQoZSx0KSxlKX1mdW5jdGlvbiBCbCh0LGUpe3ZhciBuO3JldHVybiBlLmIuS2IoSnRlKHQsZS5jLkVlKCksKG49bmV3IEluKGUpLG4pKSl9ZnVuY3Rpb24gRiQodCl7TTR0KCksUVV0KHRoaXMsQXIoTnMoJHAodCwyNCksVXEpKSxBcihOcyh0LFVxKSkpfWZ1bmN0aW9uIGNKdCgpe2NKdD1aLHVwZT1XcigoR3ooKSxsdChjdCh6RXQsMSksb2UsNDI4LDAsW3F1dCwkRXRdKSkpfWZ1bmN0aW9uIHVKdCgpe3VKdD1aLGxwZT1XcigoUSQoKSxsdChjdChIRXQsMSksb2UsNDI3LDAsW3FFdCxIdXRdKSkpfWZ1bmN0aW9uIGxKdCgpe2xKdD1aLGZiZT1XcigoWiQoKSxsdChjdCh3N3QsMSksb2UsNDI0LDAsW3RsdCxnVl0pKSl9ZnVuY3Rpb24gaEp0KCl7aEp0PVoscjJlPVdyKChYOCgpLGx0KGN0KG4yZSwxKSxvZSw1MTEsMCxbeU8sZGx0XSkpKX1mdW5jdGlvbiBmSnQoKXtmSnQ9WixNMmU9V3IoKExEKCksbHQoY3QoQlR0LDEpLG9lLDQxOSwwLFtHVixOVHRdKSkpfWZ1bmN0aW9uIGRKdCgpe2RKdD1aLFAyZT1XcigoeEQoKSxsdChjdCgkVHQsMSksb2UsNDc5LDAsW2pUdCxXVl0pKSl9ZnVuY3Rpb24gZ0p0KCl7Z0p0PVosZG1lPVdyKChwRCgpLGx0KGN0KFk5dCwxKSxvZSwzNzYsMCxbU2h0LEJPXSkpKX1mdW5jdGlvbiBwSnQoKXtwSnQ9Wix1bWU9V3IoKENEKCksbHQoY3QoVjl0LDEpLG9lLDQyMSwwLFtUaHQsQ2h0XSkpKX1mdW5jdGlvbiBiSnQoKXtiSnQ9WixfMmU9V3IoKEgkKCksbHQoY3QoTFR0LDEpLG9lLDQyMiwwLFtBVHQsQWx0XSkpKX1mdW5jdGlvbiB3SnQoKXt3SnQ9Wix6MmU9V3IoKEkkKCksbHQoY3QoSlR0LDEpLG9lLDQyMCwwLFtIbHQsWlR0XSkpKX1mdW5jdGlvbiB2SnQoKXt2SnQ9WixpeWU9V3IoKFVmKCksbHQoY3QocnllLDEpLG9lLDUyMCwwLFtLeSxtYl0pKSl9ZnVuY3Rpb24gbUp0KCl7bUp0PVosUG1lPVdyKCgkOSgpLGx0KGN0KE9tZSwxKSxvZSw1MjMsMCxbQlMsTlNdKSkpfWZ1bmN0aW9uIHlKdCgpe3lKdD1aLHptZT1XcigoYmQoKSxsdChjdCgkbWUsMSksb2UsNTE2LDAsW3p2LGVwXSkpKX1mdW5jdGlvbiB4SnQoKXt4SnQ9WixIbWU9V3IoKEMxKCksbHQoY3QocW1lLDEpLG9lLDUxNSwwLFtIMixIMV0pKSl9ZnVuY3Rpb24ga0p0KCl7a0p0PVosaHllPVdyKChHdygpLGx0KGN0KGx5ZSwxKSxvZSw0NTUsMCxbeWIscjVdKSkpfWZ1bmN0aW9uIEVKdCgpe0VKdD1aLEx5ZT1XcigoQSQoKSxsdChjdCh2X3QsMSksb2UsNDI1LDAsW3FodCx3X3RdKSkpfWZ1bmN0aW9uIFRKdCgpe1RKdD1aLFB5ZT1XcigocHooKSxsdChjdChtX3QsMSksb2UsNDk1LDAsW0ZHLEQ3XSkpKX1mdW5jdGlvbiBDSnQoKXtDSnQ9WixBeWU9V3IoKFQkKCksbHQoY3QoYl90LDEpLG9lLDQ4MCwwLFt6aHQscF90XSkpKX1mdW5jdGlvbiBfSnQoKXtfSnQ9WixCeWU9V3IoKEckKCksbHQoY3QoeF90LDEpLG9lLDQyNiwwLFt5X3QsVWh0XSkpKX1mdW5jdGlvbiBTSnQoKXtTSnQ9WixWM2U9V3IoKGpEKCksbHQoY3QoVFN0LDEpLG9lLDQyOSwwLFtWRyxFU3RdKSkpfWZ1bmN0aW9uIEFKdCgpe0FKdD1aLF8zZT1XcigoYkQoKSxsdChjdChuU3QsMSksb2UsNDMwLDAsW2VmdCxxR10pKSl9ZnVuY3Rpb24gJDkoKXskOT1aLEJTPW5ldyBIYnQoIlVQUEVSIiwwKSxOUz1uZXcgSGJ0KCJMT1dFUiIsMSl9ZnVuY3Rpb24gY2FuKHQsZSl7dmFyIG47bj1uZXcgX3gscjIobiwieCIsZS5hKSxyMihuLCJ5IixlLmIpLFZ4KHQsbil9ZnVuY3Rpb24gdWFuKHQsZSl7dmFyIG47bj1uZXcgX3gscjIobiwieCIsZS5hKSxyMihuLCJ5IixlLmIpLFZ4KHQsbil9ZnVuY3Rpb24gbGFuKHQsZSl7dmFyIG4scjtyPSExO2RvIG49YnJlKHQsZSkscj1yfG47d2hpbGUobik7cmV0dXJuIHJ9ZnVuY3Rpb24gZm10KHQsZSl7dmFyIG4scjtmb3Iobj1lLHI9MDtuPjA7KXIrPXQuYVtuXSxuLT1uJi1uO3JldHVybiByfWZ1bmN0aW9uIExKdCh0LGUpe3ZhciBuO2ZvcihuPWU7bjspam0odCwtbi5pLC1uLmopLG49ZXMobik7cmV0dXJuIHR9ZnVuY3Rpb24gdmEodCxlKXt2YXIgbixyO2ZvcihPbihlKSxyPXQuS2MoKTtyLk9iKCk7KW49ci5QYigpLGUudGQobil9ZnVuY3Rpb24gTUp0KHQsZSl7dmFyIG47cmV0dXJuIG49ZS5jZCgpLG5ldyBMdyhuLHQuZS5wYyhuLHUoZS5kZCgpLDE0KSkpfWZ1bmN0aW9uIGZzKHQsZSxuLHIpe3ZhciBzO3M9bmV3IHh0LHMuYz1lLHMuYj1uLHMuYT1yLHIuYj1uLmE9cywrK3QuYn1mdW5jdGlvbiBjaCh0LGUsbil7dmFyIHI7cmV0dXJuIHI9KEFuKGUsdC5jLmxlbmd0aCksdC5jW2VdKSx0LmNbZV09bixyfWZ1bmN0aW9uIGhhbih0LGUsbil7cmV0dXJuIHUoZT09bnVsbD9hdSh0LmYsbnVsbCxuKTpzdih0LmcsZSxuKSwyODEpfWZ1bmN0aW9uIHpydCh0KXtyZXR1cm4gdC5jJiZ0LmQ/S3Z0KHQuYykrIi0+IitLdnQodC5kKToiZV8iK1B3KHQpfWZ1bmN0aW9uIE44KHQsZSl7cmV0dXJuKHcyKHQpLHFDKG5ldyBUbih0LG5ldyBObXQoZSx0LmEpKSkpLnNkKG83KX1mdW5jdGlvbiBmYW4oKXtyZXR1cm4gV2EoKSxsdChjdChJN3QsMSksb2UsMzU2LDAsW0RkLGdiLGN1LHFjLElvXSl9ZnVuY3Rpb24gZGFuKCl7cmV0dXJuIHZlKCksbHQoY3QoWGEsMSkseGMsNjEsMCxbWm8sUG4sSG4sbXIsQm5dKX1mdW5jdGlvbiBnYW4odCl7cmV0dXJuIEFSKCksZnVuY3Rpb24oKXtyZXR1cm4gQ3NuKHQsdGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBwYW4oKXtyZXR1cm4gRGF0ZS5ub3c/RGF0ZS5ub3coKTpuZXcgRGF0ZSgpLmdldFRpbWUoKX1mdW5jdGlvbiBHYSh0KXtyZXR1cm4hdC5jfHwhdC5kPyExOiEhdC5jLmkmJnQuYy5pPT10LmQuaX1mdW5jdGlvbiBESnQodCl7aWYoIXQuYy5TYigpKXRocm93IGl0KG5ldyBsYyk7cmV0dXJuIHQuYT0hMCx0LmMuVWIoKX1mdW5jdGlvbiBkRCh0KXt0Lmk9MCxDTSh0LmIsbnVsbCksQ00odC5jLG51bGwpLHQuYT1udWxsLHQuZT1udWxsLCsrdC5nfWZ1bmN0aW9uIGRtdCh0KXtrWGUuY2FsbCh0aGlzLHQ9PW51bGw/X3U6JG8odCksX3QodCw3OCk/dSh0LDc4KTpudWxsKX1mdW5jdGlvbiBJSnQodCl7cmZlKCksbnF0KHRoaXMpLHRoaXMuYT1uZXcgWmksJHl0KHRoaXMsdCkscmkodGhpcy5hLHQpfWZ1bmN0aW9uIE9KdCgpe2FudCh0aGlzKSx0aGlzLmI9bmV3ICRlKGFzLGFzKSx0aGlzLmE9bmV3ICRlKENzLENzKX1mdW5jdGlvbiBQSnQodCxlKXt0aGlzLmM9MCx0aGlzLmI9ZSxjVXQuY2FsbCh0aGlzLHQsMTc0OTMpLHRoaXMuYT10aGlzLmN9ZnVuY3Rpb24gcXJ0KHQpe04kKCksISQxJiYodGhpcy5jPXQsdGhpcy5lPSEwLHRoaXMuYT1uZXcgaGUpfWZ1bmN0aW9uIE4kKCl7TiQ9WiwkMT0hMCxKZ2U9ITEsdHBlPSExLG5wZT0hMSxlcGU9ITF9ZnVuY3Rpb24gZ210KHQsZSl7cmV0dXJuIF90KGUsMTQ5KT9obih0LmMsdShlLDE0OSkuYyk6ITF9ZnVuY3Rpb24gcG10KHQsZSl7dmFyIG47cmV0dXJuIG49MCx0JiYobis9dC5mLmEvMiksZSYmKG4rPWUuZi5hLzIpLG59ZnVuY3Rpb24gSHJ0KHQsZSl7dmFyIG47cmV0dXJuIG49dShYdyh0LmQsZSksMjMpLG58fHUoWHcodC5lLGUpLDIzKX1mdW5jdGlvbiBGSnQodCl7dGhpcy5iPXQsbnIuY2FsbCh0aGlzLHQpLHRoaXMuYT11KERuKHRoaXMuYi5hLDQpLDEyNil9ZnVuY3Rpb24gTkp0KHQpe3RoaXMuYj10LEJ4LmNhbGwodGhpcyx0KSx0aGlzLmE9dShEbih0aGlzLmIuYSw0KSwxMjYpfWZ1bmN0aW9uIHNsKHQpe3JldHVybiB0LnR8fCh0LnQ9bmV3IFV6dCh0KSxuXyhuZXcgc0h0KHQpLDAsdC50KSksdC50fWZ1bmN0aW9uIGJhbigpe3JldHVybiBhbygpLGx0KGN0KFhTLDEpLG9lLDEwMywwLFtoMCxDZix6aCxuZyxyZ10pfWZ1bmN0aW9uIHdhbigpe3JldHVybiBsNCgpLGx0KGN0KHRBLDEpLG9lLDI0OSwwLFtFYixpUCxJQXQsSlMsT0F0XSl9ZnVuY3Rpb24gdmFuKCl7cmV0dXJuIFFmKCksbHQoY3QoaXAsMSksb2UsMTc1LDAsW3FuLGVhLFBkLFYyLHJwXSl9ZnVuY3Rpb24gbWFuKCl7cmV0dXJuIHVJKCksbHQoY3QoYVN0LDEpLG9lLDMxNiwwLFtyU3QsbmZ0LHNTdCxyZnQsaVN0XSl9ZnVuY3Rpb24geWFuKCl7cmV0dXJuIHVfKCksbHQoY3QoTjl0LDEpLG9lLDMxNSwwLFtGOXQseGh0LGtodCxEUyxJU10pfWZ1bmN0aW9uIHhhbigpe3JldHVybiB4MigpLGx0KGN0KEZUdCwxKSxvZSwzMzUsMCxbTWx0LFBUdCxEbHQsdlMsd1NdKX1mdW5jdGlvbiBrYW4oKXtyZXR1cm4gQUUoKSxsdChjdCh5M2UsMSksb2UsMzU1LDAsW2k1LEc2LEdTLFZTLFVTXSl9ZnVuY3Rpb24gRWFuKCl7cmV0dXJuIGI0KCksbHQoY3QodzJlLDEpLG9lLDM2MywwLFskVixxVixIVix6VixqVl0pfWZ1bmN0aW9uIFRhbigpe3JldHVybiBkaCgpLGx0KGN0KGZDdCwxKSxvZSwxNjMsMCxbTU8sRVMsYmIsVFMsanldKX1mdW5jdGlvbiBCOCgpe0I4PVo7dmFyIHQsZTt3VT0oYzgoKSxlPW5ldyB4UixlKSx2VT0odD1uZXcgcmV0LHQpfWZ1bmN0aW9uIEJKdCh0KXt2YXIgZTtyZXR1cm4gdC5jfHwoZT10LnIsX3QoZSw4OCkmJih0LmM9dShlLDI2KSkpLHQuY31mdW5jdGlvbiBDYW4odCl7cmV0dXJuIHQuZT0zLHQuZD10LlliKCksdC5lIT0yPyh0LmU9MCwhMCk6ITF9ZnVuY3Rpb24gVnJ0KHQpe3ZhciBlLG4scjtyZXR1cm4gZT10JmhsLG49dD4+MjImaGwscj10PDA/WjA6MCxpdShlLG4scil9ZnVuY3Rpb24gX2FuKHQpe3ZhciBlLG4scixzO2ZvcihuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sSTkoZSl9ZnVuY3Rpb24gU2FuKHQsZSl7dmFyIG4scjtuPXUoRWxuKHQuYyxlKSwxNCksbiYmKHI9bi5nYygpLG4uJGIoKSx0LmQtPXIpfWZ1bmN0aW9uIFJKdCh0LGUpe3ZhciBuLHI7cmV0dXJuIG49ZS5jZCgpLHI9anl0KHQsbiksISFyJiZGYyhyLmUsZS5kZCgpKX1mdW5jdGlvbiBReCh0LGUpe3JldHVybiBlPT0wfHx0LmU9PTA/dDplPjA/RmllKHQsZSk6cnVlKHQsLWUpfWZ1bmN0aW9uIGJtdCh0LGUpe3JldHVybiBlPT0wfHx0LmU9PTA/dDplPjA/cnVlKHQsZSk6RmllKHQsLWUpfWZ1bmN0aW9uIE1yKHQpe2lmKHpyKHQpKXJldHVybiB0LmM9dC5hLHQuYS5QYigpO3Rocm93IGl0KG5ldyBsYyl9ZnVuY3Rpb24gakp0KHQpe3ZhciBlLG47cmV0dXJuIGU9dC5jLmksbj10LmQuaSxlLms9PShWbigpLGtzKSYmbi5rPT1rc31mdW5jdGlvbiBHcnQodCl7dmFyIGU7cmV0dXJuIGU9bmV3IFZ3LE1vKGUsdCksSnQoZSwoVGUoKSxTbyksbnVsbCksZX1mdW5jdGlvbiBVcnQodCxlLG4pe3ZhciByO3JldHVybiByPXQuWWcoZSkscj49MD90Ll9nKHIsbiwhMCk6ZHYodCxlLG4pfWZ1bmN0aW9uIHdtdCh0LGUsbixyKXt2YXIgcztmb3Iocz0wO3M8R3V0O3MrKylRaih0LmFbZS5nXVtzXSxuLHJbZS5nXSl9ZnVuY3Rpb24gdm10KHQsZSxuLHIpe3ZhciBzO2ZvcihzPTA7czxjVjtzKyspWGoodC5hW3NdW2UuZ10sbixyW2UuZ10pfWZ1bmN0aW9uIG1tdCh0LGUsbixyLHMpe3NadC5jYWxsKHRoaXMsZSxyLHMpLHRoaXMuYz10LHRoaXMuYT1ufWZ1bmN0aW9uIHltdCh0LGUsbixyLHMpe2FadC5jYWxsKHRoaXMsZSxyLHMpLHRoaXMuYz10LHRoaXMuYT1ufWZ1bmN0aW9uIHhtdCh0LGUsbixyLHMpe3pKdC5jYWxsKHRoaXMsZSxyLHMpLHRoaXMuYz10LHRoaXMuYT1ufWZ1bmN0aW9uIGJmKHQsZSxuLHIscyl7ekp0LmNhbGwodGhpcyxlLHIscyksdGhpcy5jPXQsdGhpcy5iPW59ZnVuY3Rpb24gJEp0KHQsZSxuKXt2Ui5jYWxsKHRoaXMsbiksdGhpcy5iPXQsdGhpcy5jPWUsdGhpcy5kPShyc3QoKSxqZnQpfWZ1bmN0aW9uIHpKdCh0LGUsbil7dGhpcy5kPXQsdGhpcy5rPWU/MTowLHRoaXMuZj1uPzE6MCx0aGlzLm89LTEsdGhpcy5wPTB9ZnVuY3Rpb24gcUp0KHQsZSxuKXt2YXIgcjtyPW5ldyB2MnQodC5hKSxZOShyLHQuYS5hKSxhdShyLmYsZSxuKSx0LmEuYT1yfWZ1bmN0aW9uIGdEKHQsZSl7dC5xaSh0LmkrMSkscDkodCx0LmksdC5vaSh0LmksZSkpLHQuYmkodC5pKyssZSksdC5jaSgpfWZ1bmN0aW9uIHo5KHQpe3ZhciBlLG47Kyt0LmosZT10Lmcsbj10LmksdC5nPW51bGwsdC5pPTAsdC5kaShuLGUpLHQuY2koKX1mdW5jdGlvbiBBMSh0KXt2YXIgZSxuO3JldHVybiBMcih0KSxlPVdubih0Lmxlbmd0aCksbj1uZXcgWGMoZSksT3l0KG4sdCksbn1mdW5jdGlvbiBaeCh0KXt2YXIgZTtyZXR1cm4gZT0oTHIodCksdD9uZXcgQnUodCk6eDgodC5LYygpKSksWXN0KGUpLER6KGUpfWZ1bmN0aW9uIEZnKHQsZSl7dmFyIG47cmV0dXJuIG49KEFuKGUsdC5jLmxlbmd0aCksdC5jW2VdKSx3YnQodC5jLGUsMSksbn1mdW5jdGlvbiBBaSh0LGUpe3ZhciBuO3JldHVybiBuPXUodC5jLnhjKGUpLDE0KSwhbiYmKG49dC5pYyhlKSksdC5wYyhlLG4pfWZ1bmN0aW9uIGttdCh0LGUpe3ZhciBuLHI7cmV0dXJuIG49KE9uKHQpLHQpLHI9KE9uKGUpLGUpLG49PXI/MDpuPHI/LTE6MX1mdW5jdGlvbiBISnQodCl7dmFyIGU7cmV0dXJuIGU9dC5lK3QuZixpc05hTihlKSYmUGoodC5kKT90LmQ6ZX1mdW5jdGlvbiAkMCh0LGUpe3JldHVybiB0LmE/R3IodC5hLHQuYik6dC5hPW5ldyBPbCh0LmQpLGg5KHQuYSxlKSx0fWZ1bmN0aW9uIEVtdCh0LGUpe2lmKHQ8MHx8dD5lKXRocm93IGl0KG5ldyB5byhKNHQodCxlLCJpbmRleCIpKSk7cmV0dXJuIHR9ZnVuY3Rpb24gV3J0KHQsZSxuLHIpe3ZhciBzO3JldHVybiBzPU50KENyLFhyLDI1LGUsMTUsMSksajBuKHMsdCxlLG4sciksc31mdW5jdGlvbiBBYW4odCxlKXt2YXIgbjtuPXQucS5nZXRIb3VycygpKyhlLzYwfDApLHQucS5zZXRNaW51dGVzKGUpLEVfKHQsbil9ZnVuY3Rpb24gTGFuKHQsZSl7cmV0dXJuIGIuTWF0aC5taW4oV3AoZS5hLHQuZC5kLmMpLFdwKGUuYix0LmQuZC5jKSl9ZnVuY3Rpb24gSngodCxlKXtyZXR1cm4gcmEoZSk/ZT09bnVsbD9iNXQodC5mLG51bGwpOlpuZSh0LmcsZSk6YjV0KHQuZixlKX1mdW5jdGlvbiBMMSh0KXt0aGlzLmM9dCx0aGlzLmE9bmV3IFModGhpcy5jLmEpLHRoaXMuYj1uZXcgUyh0aGlzLmMuYil9ZnVuY3Rpb24gQiQoKXt0aGlzLmU9bmV3IGhlLHRoaXMuYz1uZXcgaGUsdGhpcy5kPW5ldyBoZSx0aGlzLmI9bmV3IGhlfWZ1bmN0aW9uIFZKdCgpe3RoaXMuZz1uZXcgRnB0LHRoaXMuYj1uZXcgRnB0LHRoaXMuYT1uZXcgaGUsdGhpcy5rPW5ldyBoZX1mdW5jdGlvbiBHSnQodCxlLG4pe3RoaXMuYT10LHRoaXMuYz1lLHRoaXMuZD1uLGxlKGUuZSx0aGlzKSxsZShuLmIsdGhpcyl9ZnVuY3Rpb24gVUp0KHQsZSl7b1V0LmNhbGwodGhpcyxlLnJkKCksZS5xZCgpJi02KSxPbih0KSx0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBXSnQodCxlKXtjVXQuY2FsbCh0aGlzLGUucmQoKSxlLnFkKCkmLTYpLE9uKHQpLHRoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFRtdCh0LGUpe2VudC5jYWxsKHRoaXMsZS5yZCgpLGUucWQoKSYtNiksT24odCksdGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gUiQodCxlLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1uLGxlKHQudCx0aGlzKSxsZShlLmksdGhpcyl9ZnVuY3Rpb24gaiQoKXt0aGlzLmI9bmV3IFppLHRoaXMuYT1uZXcgWmksdGhpcy5iPW5ldyBaaSx0aGlzLmE9bmV3IFppfWZ1bmN0aW9uICQkKCl7JCQ9WixXUz1uZXcgVmkoIm9yZy5lY2xpcHNlLmVsay5sYWJlbHMubGFiZWxNYW5hZ2VyIil9ZnVuY3Rpb24gWUp0KCl7WUp0PVosRVR0PW5ldyBQcygic2VwYXJhdGVMYXllckNvbm5lY3Rpb25zIiwoVHooKSx3bHQpKX1mdW5jdGlvbiBVZigpe1VmPVosS3k9bmV3IFVidCgiUkVHVUxBUiIsMCksbWI9bmV3IFVidCgiQ1JJVElDQUwiLDEpfWZ1bmN0aW9uIHBEKCl7cEQ9WixTaHQ9bmV3IHFidCgiU1RBQ0tFRCIsMCksQk89bmV3IHFidCgiU0VRVUVOQ0VEIiwxKX1mdW5jdGlvbiBiRCgpe2JEPVosZWZ0PW5ldyBaYnQoIkZJWEVEIiwwKSxxRz1uZXcgWmJ0KCJDRU5URVJfTk9ERSIsMSl9ZnVuY3Rpb24gTWFuKHQsZSl7dmFyIG47cmV0dXJuIG49UDRuKHQsZSksdC5iPW5ldyBneihuLmMubGVuZ3RoKSxVM24odCxuKX1mdW5jdGlvbiBEYW4odCxlLG4pe3ZhciByO3JldHVybisrdC5lLC0tdC5mLHI9dSh0LmRbZV0uJGMobiksMTMzKSxyLmRkKCl9ZnVuY3Rpb24gS0p0KHQpe3ZhciBlO3JldHVybiB0LmF8fChlPXQucixfdChlLDE0OCkmJih0LmE9dShlLDE0OCkpKSx0LmF9ZnVuY3Rpb24gQ210KHQpe2lmKHQuYSl7aWYodC5lKXJldHVybiBDbXQodC5lKX1lbHNlIHJldHVybiB0O3JldHVybiBudWxsfWZ1bmN0aW9uIElhbih0LGUpe3JldHVybiB0LnA8ZS5wPzE6dC5wPmUucD8tMTowfWZ1bmN0aW9uIHokKHQsZSl7cmV0dXJuIE9uKGUpLHQuYzx0LmQ/KHQuemUoZSx0LmMrKyksITApOiExfWZ1bmN0aW9uIFhKdCh0LGUpe3JldHVybiBUbCh0LmEsZSk/KEp4KHQuYSxlKSwhMCk6ITF9ZnVuY3Rpb24gT2FuKHQpe3ZhciBlLG47cmV0dXJuIGU9dC5jZCgpLG49dSh0LmRkKCksMTQpLFhNKG4uTmMoKSxuZXcgZnR0KGUpKX1mdW5jdGlvbiBQYW4odCl7dmFyIGU7cmV0dXJuIGU9dSh5dnQodC5iLHQuYi5sZW5ndGgpLDkpLG5ldyBzaCh0LmEsZSx0LmMpfWZ1bmN0aW9uIEZhbih0KXt2YXIgZTtyZXR1cm4gdzIodCksZT1uZXcgV1l0KHQsdC5hLmUsdC5hLmR8NCksbmV3IFEydCh0LGUpfWZ1bmN0aW9uIFFKdCh0KXt2YXIgZTtmb3IoVnAodCksZT0wO3QuYS5zZChuZXcgRXMpOyllPVBhKGUsMSk7cmV0dXJuIGV9ZnVuY3Rpb24gX210KHQsZSxuKXt2YXIgcixzO2ZvcihyPTAscz0wO3M8ZS5sZW5ndGg7cysrKXIrPXQuJGYoZVtzXSxyLG4pfWZ1bmN0aW9uIE5hbih0LGUpe3ZhciBuO3QuQyYmKG49dShwbyh0LmIsZSksMTI0KS5uLG4uZD10LkMuZCxuLmE9dC5DLmEpfWZ1bmN0aW9uIHQ2KHQsZSxuKXtyZXR1cm4gZkQoZSx0LmUuSGQoKS5nYygpKSxmRChuLHQuYy5IZCgpLmdjKCkpLHQuYVtlXVtuXX1mdW5jdGlvbiBOZyh0LGUpe3JiKCksdGhpcy5lPXQsdGhpcy5kPTEsdGhpcy5hPWx0KGN0KENyLDEpLFhyLDI1LDE1LFtlXSl9ZnVuY3Rpb24gcSQodCxlLG4scil7dGhpcy5mPXQsdGhpcy5lPWUsdGhpcy5kPW4sdGhpcy5iPXIsdGhpcy5jPXI/ci5kOm51bGx9ZnVuY3Rpb24gU210KHQpe3ZhciBlLG4scixzO3M9dC5kLGU9dC5hLG49dC5iLHI9dC5jLHQuZD1uLHQuYT1yLHQuYj1zLHQuYz1lfWZ1bmN0aW9uIEJhbih0LGUsbixyKXtFbGUodCxlLG4sREUodCxlLHIsX3QoZSw5OSkmJih1KGUsMTgpLkJiJkthKSE9MCkpfWZ1bmN0aW9uIFJhbih0LGUpe3ZyKGUsIkxhYmVsIG1hbmFnZW1lbnQiLDEpLGRqKFEodCwoJCQoKSxXUykpKSxvcihlKX1mdW5jdGlvbiBYYyh0KXthbnQodGhpcyksQmoodD49MCwiSW5pdGlhbCBjYXBhY2l0eSBtdXN0IG5vdCBiZSBuZWdhdGl2ZSIpfWZ1bmN0aW9uIFpKdCgpe1pKdD1aLGdwZT1XcigoS2YoKSxsdChjdChPeSwxKSxvZSwyMzIsMCxbc2MsZXUsYWNdKSkpfWZ1bmN0aW9uIEpKdCgpe0pKdD1aLGJwZT1XcigoUXUoKSxsdChjdChwcGUsMSksb2UsNDYxLDAsW01kLGZiLGtmXSkpKX1mdW5jdGlvbiB0dGUoKXt0dGU9Wix2cGU9V3IoKHl1KCksbHQoY3Qod3BlLDEpLG9lLDQ2MiwwLFtuMSxkYixFZl0pKSl9ZnVuY3Rpb24gZXRlKCl7ZXRlPVoscnBlPVdyKChPMSgpLGx0KGN0KGZsLDEpLG9lLDEzMiwwLFtCRXQsVWwsSXldKSkpfWZ1bmN0aW9uIG50ZSgpe250ZT1aLE9iZT1XcigocTkoKSxsdChjdChEN3QsMSksb2UsMzc5LDAsW2lsdCxybHQsc2x0XSkpKX1mdW5jdGlvbiBydGUoKXtydGU9WixZYmU9V3IoKGl2KCksbHQoY3QoRjd0LDEpLG9lLDQyMywwLFtxNCxQN3QsbGx0XSkpKX1mdW5jdGlvbiBpdGUoKXtpdGU9WixTMmU9V3IoKG42KCksbHQoY3QoRFR0LDEpLG9lLDMxNCwwLFtQNixFTyxNVHRdKSkpfWZ1bmN0aW9uIHN0ZSgpe3N0ZT1aLEEyZT1Xcigob3ooKSxsdChjdChPVHQsMSksb2UsMzM3LDAsW0lUdCxWVixMbHRdKSkpfWZ1bmN0aW9uIGF0ZSgpe2F0ZT1aLEkyZT1XcigoZDIoKSxsdChjdChEMmUsMSksb2UsNDUwLDAsW0lsdCx3NyxVNF0pKSl9ZnVuY3Rpb24gb3RlKCl7b3RlPVosRTJlPVdyKChudigpLGx0KGN0KG1sdCwxKSxvZSwzNjEsMCxbRHYscGIsTXZdKSkpfWZ1bmN0aW9uIGN0ZSgpe2N0ZT1aLCQyZT1XcigocTAoKSxsdChjdChqMmUsMSksb2UsMzAzLDAsW0NPLFk0LEY2XSkpKX1mdW5jdGlvbiB1dGUoKXt1dGU9WixSMmU9V3IoKGVFKCksbHQoY3QocWx0LDEpLG9lLDI5MiwwLFskbHQsemx0LFRPXSkpKX1mdW5jdGlvbiBsdGUoKXtsdGU9WixpbWU9V3IoKFo5KCksbHQoY3QoUDl0LDEpLG9lLDM3OCwwLFt2aHQsTzl0LHlHXSkpKX1mdW5jdGlvbiBodGUoKXtodGU9WixmbWU9V3IoKHl6KCksbHQoY3QoVzl0LDEpLG9lLDM3NSwwLFtHOXQsX2h0LFU5dF0pKSl9ZnVuY3Rpb24gZnRlKCl7ZnRlPVosY21lPVdyKChWMCgpLGx0KGN0KEg5dCwxKSxvZSwzMzksMCxbdmIscTl0LEVodF0pKSl9ZnVuY3Rpb24gZHRlKCl7ZHRlPVosaG1lPVdyKChzbygpLGx0KGN0KGxtZSwxKSxvZSw0NTIsMCxbT1MsdGwsbnVdKSkpfWZ1bmN0aW9uIGd0ZSgpe2d0ZT1aLGJtZT1XcigoQ3ooKSxsdChjdCh0X3QsMSksb2UsMzc3LDAsW01odCxMNyxZeV0pKSl9ZnVuY3Rpb24gcHRlKCl7cHRlPVosZ21lPVdyKChjRSgpLGx0KGN0KFg5dCwxKSxvZSwzMzYsMCxbQWh0LEs5dCxQU10pKSl9ZnVuY3Rpb24gYnRlKCl7YnRlPVoscG1lPVdyKCh2eigpLGx0KGN0KEo5dCwxKSxvZSwzMzgsMCxbWjl0LExodCxROXRdKSkpfWZ1bmN0aW9uIHd0ZSgpe3d0ZT1aLExtZT1XcigoZXYoKSxsdChjdChBbWUsMSksb2UsNDU0LDAsW1JPLEZTLFRHXSkpKX1mdW5jdGlvbiB2dGUoKXt2dGU9WixOeWU9V3IoKE56KCksbHQoY3QoRnllLDEpLG9lLDQ0MiwwLFtHaHQsSGh0LFZodF0pKSl9ZnVuY3Rpb24gbXRlKCl7bXRlPVosUnllPVdyKChIRCgpLGx0KGN0KFRfdCwxKSxvZSwzODAsMCxbTkcsa190LEVfdF0pKSl9ZnVuY3Rpb24geXRlKCl7eXRlPVosZTNlPVdyKChGeigpLGx0KGN0KHFfdCwxKSxvZSwzODEsMCxbel90LFFodCwkX3RdKSkpfWZ1bmN0aW9uIHh0ZSgpe3h0ZT1aLHQzZT1XcigobXooKSxsdChjdChSX3QsMSksb2UsMjkzLDAsW1hodCxCX3QsTl90XSkpKX1mdW5jdGlvbiBrdGUoKXtrdGU9WixrM2U9V3IoKEtEKCksbHQoY3QoWmh0LDEpLG9lLDQzNywwLFtqRywkRyx6R10pKSl9ZnVuY3Rpb24gRXRlKCl7RXRlPVosQzRlPVdyKChHMCgpLGx0KGN0KERBdCwxKSxvZSwzMzQsMCxbdFUsc3AsWlNdKSkpfWZ1bmN0aW9uIFR0ZSgpe1R0ZT1aLHg0ZT1XcigoTTEoKSxsdChjdChtQXQsMSksb2UsMjcyLDAsW1A3LFp5LEY3XSkpKX1mdW5jdGlvbiBqYW4oKXtyZXR1cm4gdWEoKSxsdChjdChQQXQsMSksb2UsOTgsMCxbVGIsRzEsQjcsWTIsZzAsR2NdKX1mdW5jdGlvbiBvMih0LGUpe3JldHVybiF0Lm8mJih0Lm89bmV3IF9sKChKYygpLFNiKSxIdix0LDApKSxpc3QodC5vLGUpfWZ1bmN0aW9uICRhbih0KXtyZXR1cm4hdC5nJiYodC5nPW5ldyBJayksIXQuZy5kJiYodC5nLmQ9bmV3IEh6dCh0KSksdC5nLmR9ZnVuY3Rpb24gemFuKHQpe3JldHVybiF0LmcmJih0Lmc9bmV3IElrKSwhdC5nLmEmJih0LmcuYT1uZXcgVnp0KHQpKSx0LmcuYX1mdW5jdGlvbiBxYW4odCl7cmV0dXJuIXQuZyYmKHQuZz1uZXcgSWspLCF0LmcuYiYmKHQuZy5iPW5ldyBxenQodCkpLHQuZy5ifWZ1bmN0aW9uIHdEKHQpe3JldHVybiF0LmcmJih0Lmc9bmV3IElrKSwhdC5nLmMmJih0LmcuYz1uZXcgR3p0KHQpKSx0LmcuY31mdW5jdGlvbiBIYW4odCxlLG4pe3ZhciByLHM7Zm9yKHM9bmV3IHRFKGUsdCkscj0wO3I8bjsrK3IpUXoocyk7cmV0dXJuIHN9ZnVuY3Rpb24gWXJ0KHQsZSxuKXt2YXIgcixzO2lmKG4hPW51bGwpZm9yKHI9MDtyPGU7KytyKXM9bltyXSx0LmZpKHIscyl9ZnVuY3Rpb24gS3J0KHQsZSxuLHIpe3ZhciBzO3JldHVybiBzPU50KENyLFhyLDI1LGUrMSwxNSwxKSxDeW4ocyx0LGUsbixyKSxzfWZ1bmN0aW9uIE50KHQsZSxuLHIscyxvKXt2YXIgaDtyZXR1cm4gaD1Oc2UocyxyKSxzIT0xMCYmbHQoY3QodCxvKSxlLG4scyxoKSxofWZ1bmN0aW9uIFZhbih0LGUsbixyKXtyZXR1cm4gbiYmKHI9bi5naChlLEdpKG4uVGcoKSx0LmMuTGooKSksbnVsbCxyKSkscn1mdW5jdGlvbiBHYW4odCxlLG4scil7cmV0dXJuIG4mJihyPW4uaWgoZSxHaShuLlRnKCksdC5jLkxqKCkpLG51bGwscikpLHJ9ZnVuY3Rpb24gQW10KHQsZSxuKXt1KHQuYiw2NSksdSh0LmIsNjUpLHUodC5iLDY1KSx4dSh0LmEsbmV3IE9ZdChuLGUsdCkpfWZ1bmN0aW9uIExtdCh0LGUsbil7aWYodDwwfHxlPm58fGU8dCl0aHJvdyBpdChuZXcgc2J0KFdxK3QrWXh0K2UrVXh0K24pKX1mdW5jdGlvbiBSOCh0KXtpZighdCl0aHJvdyBpdChuZXcgTm8oIlVuYWJsZSB0byBhZGQgZWxlbWVudCB0byBxdWV1ZSIpKX1mdW5jdGlvbiBYcnQodCl7dD8odGhpcy5jPXQsdGhpcy5iPW51bGwpOih0aGlzLmM9bnVsbCx0aGlzLmI9bmV3IGhlKX1mdW5jdGlvbiBRcnQodCxlKXtLUi5jYWxsKHRoaXMsdCxlKSx0aGlzLmE9TnQodDZuLEhxLDQzNiwyLDAsMSksdGhpcy5iPSEwfWZ1bmN0aW9uIE1tdCh0KXtkcmUuY2FsbCh0aGlzLHQsMCksRVd0KHRoaXMpLHRoaXMuZC5iPXRoaXMuZCx0aGlzLmQuYT10aGlzLmR9ZnVuY3Rpb24gWnJ0KHQpe3ZhciBlO3JldHVybiBlPXQuYixlLmI9PTA/bnVsbDp1KFpmKGUsMCksMTg4KS5ifWZ1bmN0aW9uIEN0ZSh0LGUpe3ZhciBuO3JldHVybiBuPW5ldyB6dCxuLmM9ITAsbi5kPWUuZGQoKSxtaGUodCxlLmNkKCksbil9ZnVuY3Rpb24gVWFuKHQsZSl7dmFyIG47bj10LnEuZ2V0SG91cnMoKSsoZS8zNjAwfDApLHQucS5zZXRTZWNvbmRzKGUpLEVfKHQsbil9ZnVuY3Rpb24gRG10KHQsZSxuKXt2YXIgcjtyPXQuYltuLmMucF1bbi5wXSxyLmIrPWUuYixyLmMrPWUuYyxyLmErPWUuYSwrK3IuYX1mdW5jdGlvbiBXcCh0LGUpe3ZhciBuLHI7cmV0dXJuIG49dC5hLWUuYSxyPXQuYi1lLmIsYi5NYXRoLnNxcnQobipuK3Iqcil9ZnVuY3Rpb24gSCQoKXtIJD1aLEFUdD1uZXcgQmJ0KCJRVUFEUkFUSUMiLDApLEFsdD1uZXcgQmJ0KCJTQ0FOTElORSIsMSl9ZnVuY3Rpb24gX3RlKCl7X3RlPVosbW1lPUt1KGJpKG5ldyBWcywoV2EoKSxEZCksKHJvKCksZ2x0KSksSW8seE8pfWZ1bmN0aW9uIFdhbigpe3JldHVybiBoeSgpLGx0KGN0KGRmdCwxKSxvZSwyOTEsMCxbZmZ0LFhPLEtPLGhmdCxXTyxZT10pfWZ1bmN0aW9uIFlhbigpe3JldHVybiB0MCgpLGx0KGN0KExTdCwxKSxvZSwyNDgsMCxbdWZ0LEdPLFVPLFdHLEdHLFVHXSl9ZnVuY3Rpb24gS2FuKCl7cmV0dXJuIGg2KCksbHQoY3QoYjcsMSksb2UsMjI3LDAsW3A3LGJTLGc3LE55LEc0LFY0XSl9ZnVuY3Rpb24gWGFuKCl7cmV0dXJuIGtFKCksbHQoY3QoUVR0LDEpLG9lLDI3NSwwLFttUyxXVHQsWFR0LEtUdCxZVHQsVVR0XSl9ZnVuY3Rpb24gUWFuKCl7cmV0dXJuIG9JKCksbHQoY3QoR1R0LDEpLG9lLDI3NCwwLFtZVixxVHQsVlR0LHpUdCxIVHQsUmx0XSl9ZnVuY3Rpb24gWmFuKCl7cmV0dXJuIHVxKCksbHQoY3QoSTl0LDEpLG9lLDMxMywwLFt3aHQsTTl0LGJodCxMOXQsRDl0LG1HXSl9ZnVuY3Rpb24gSmFuKCl7cmV0dXJuIGRxKCksbHQoY3QoUlR0LDEpLG9lLDI3NiwwLFtQbHQsT2x0LE5sdCxGbHQsQmx0LFVWXSl9ZnVuY3Rpb24gdG9uKCl7cmV0dXJuIHBfKCksbHQoY3QoZHllLDEpLG9lLDMyNywwLFtMRyxPaHQsRmh0LFBodCxOaHQsSWh0XSl9ZnVuY3Rpb24gZW9uKCl7cmV0dXJuIFp1KCksbHQoY3QoZVUsMSksb2UsMjczLDAsW0NiLHNnLHNQLG5BLGVBLFE2XSl9ZnVuY3Rpb24gbm9uKCl7cmV0dXJuIGhxKCksbHQoY3QoQ0F0LDEpLG9lLDMxMiwwLFtTZnQsa0F0LFRBdCx5QXQsRUF0LHhBdF0pfWZ1bmN0aW9uIHJvbigpe3JldHVybiBWbigpLGx0KGN0KGZsdCwxKSxvZSwyNjcsMCxbT3MsdGEsa3MsSGMsTGwsejFdKX1mdW5jdGlvbiBTdGUodCl7Um0oISF0LmMpLEZydCh0LmUsdCksdC5jLlFiKCksdC5jPW51bGwsdC5iPXh5dCh0KSxZMnQodC5lLHQpfWZ1bmN0aW9uIEF0ZSh0KXtyZXR1cm4gRnJ0KHQuYy5hLmUsdCksWm4odC5iIT10LmMuYS5kKSx0LmE9dC5iLHQuYj10LmIuYSx0LmF9ZnVuY3Rpb24gSW10KHQpe3ZhciBlO3JldHVybiF0LmEmJnQuYiE9LTEmJihlPXQuYy5UZygpLHQuYT15bihlLHQuYikpLHQuYX1mdW5jdGlvbiBEcih0LGUpe3JldHVybiB0LmhpKCkmJnQuSGMoZSk/ITE6KHQuWWgoZSksITApfWZ1bmN0aW9uIFdmKHQsZSl7cmV0dXJuIHNEKGUsIkhvcml6b250YWwgYWxpZ25tZW50IGNhbm5vdCBiZSBudWxsIiksdC5iPWUsdH1mdW5jdGlvbiBMdGUodCxlLG4pe2dpKCk7dmFyIHI7cmV0dXJuIHI9aWIodCxlKSxuJiZyJiZJbm4odCkmJihyPW51bGwpLHJ9ZnVuY3Rpb24gQmcodCxlLG4pe3ZhciByLHM7Zm9yKHM9dC5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwzNykseF8ocixlLG4pfWZ1bmN0aW9uIE9tdCh0LGUpe3ZhciBuLHI7Zm9yKHI9ZS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwzNyksUXVlKHQsbiwwLDApfWZ1bmN0aW9uIFBtdCh0LGUsbil7dmFyIHI7dC5kW2UuZ109bixyPXQuZy5jLHJbZS5nXT1iLk1hdGgubWF4KHJbZS5nXSxuKzEpfWZ1bmN0aW9uIHZEKHQsZSl7dmFyIG4scixzO3JldHVybiBzPXQucixyPXQuZCxuPV9fKHQsZSwhMCksbi5iIT1zfHxuLmEhPXJ9ZnVuY3Rpb24gTXRlKHQsZSl7cmV0dXJuIFdWdCh0LmUsZSl8fG0yKHQuZSxlLG5ldyBvc2UoZSkpLHUoWHcodC5lLGUpLDExMyl9ZnVuY3Rpb24gYzIodCxlLG4scil7cmV0dXJuIE9uKHQpLE9uKGUpLE9uKG4pLE9uKHIpLG5ldyBndnQodCxlLG5ldyByZSl9ZnVuY3Rpb24gX2wodCxlLG4scil7dGhpcy5yaigpLHRoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1uZXcgaHZ0KHRoaXMsZSxuLHIpfWZ1bmN0aW9uIEpydCh0LGUsbixyLHMsbyl7bm10LmNhbGwodGhpcyxlLHIscyxvKSx0aGlzLmM9dCx0aGlzLmI9bn1mdW5jdGlvbiBtRCh0LGUsbixyLHMsbyl7bm10LmNhbGwodGhpcyxlLHIscyxvKSx0aGlzLmM9dCx0aGlzLmE9bn1mdW5jdGlvbiBpb24odCxlLG4pe3ZhciByLHMsbztyPUIwKHQsbikscz1udWxsLHImJihzPVU0dChyKSksbz1zLGlzZShlLG4sbyl9ZnVuY3Rpb24gc29uKHQsZSxuKXt2YXIgcixzLG87cj1CMCh0LG4pLHM9bnVsbCxyJiYocz1VNHQocikpLG89cyxpc2UoZSxuLG8pfWZ1bmN0aW9uIHlEKHQsZSxuKXt2YXIgcixzO3JldHVybiBzPShyPV9FKHQuYixlKSxyKSxzP1BxKFREKHQscyksbik6bnVsbH1mdW5jdGlvbiBqOCh0LGUpe3ZhciBuO3JldHVybiBuPXQuWWcoZSksbj49MD90Ll9nKG4sITAsITApOmR2KHQsZSwhMCl9ZnVuY3Rpb24gYW9uKHQsZSl7cmV0dXJuIE1zKFh0KHllKFEodCwoYWUoKSxGdikpKSksWHQoeWUoUShlLEZ2KSkpKX1mdW5jdGlvbiBEdGUoKXtEdGU9WixEeWU9dXYodXYoVlIobmV3IFZzLCh3RSgpLFJTKSksKHBfKCksTEcpKSxPaHQpfWZ1bmN0aW9uIG9vbih0LGUsbil7dmFyIHI7cmV0dXJuIHI9eHJlKHQsZSxuKSx0LmI9bmV3IGd6KHIuYy5sZW5ndGgpLHo1dCh0LHIpfWZ1bmN0aW9uIGNvbih0KXtpZih0LmI8PTApdGhyb3cgaXQobmV3IGxjKTtyZXR1cm4tLXQuYix0LmEtPXQuYy5jLHBlKHQuYSl9ZnVuY3Rpb24gdW9uKHQpe3ZhciBlO2lmKCF0LmEpdGhyb3cgaXQobmV3IEZYdCk7cmV0dXJuIGU9dC5hLHQuYT1lcyh0LmEpLGV9ZnVuY3Rpb24gbG9uKHQpe2Zvcig7IXQuYTspaWYoIW1ZdCh0LmMsbmV3IHplKHQpKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBlNih0KXt2YXIgZTtyZXR1cm4gTHIodCksX3QodCwxOTgpPyhlPXUodCwxOTgpLGUpOm5ldyBidHQodCl9ZnVuY3Rpb24gaG9uKHQpe1YkKCksdSh0LldlKCh1aSgpLFF5KSksMTc0KS5GYygoWnUoKSxzUCkpLHQuWWUoa2Z0LG51bGwpfWZ1bmN0aW9uIFYkKCl7ViQ9WixXM2U9bmV3IExaLEszZT1uZXcgTVosWTNlPUt1bigodWkoKSxrZnQpLFczZSx4YixLM2UpfWZ1bmN0aW9uIEckKCl7RyQ9Wix5X3Q9bmV3IFFidCgiTEVBRl9OVU1CRVIiLDApLFVodD1uZXcgUWJ0KCJOT0RFX1NJWkUiLDEpfWZ1bmN0aW9uIGZvbih0LGUsbil7dC5hPWUsdC5jPW4sdC5iLmEuJGIoKSxBaCh0LmQpLHQuZS5hLmM9TnQoUW4sRGUsMSwwLDUsMSl9ZnVuY3Rpb24gdGl0KHQpe3QuYT1OdChDcixYciwyNSx0LmIrMSwxNSwxKSx0LmM9TnQoQ3IsWHIsMjUsdC5iLDE1LDEpLHQuZD0wfWZ1bmN0aW9uIGRvbih0LGUpe3QuYS51ZShlLmQsdC5iKT4wJiYobGUodC5jLG5ldyAkd3QoZS5jLGUuZCx0LmQpKSx0LmI9ZS5kKX1mdW5jdGlvbiBGbXQodCxlKXtpZih0Lmc9PW51bGx8fGU+PXQuaSl0aHJvdyBpdChuZXcgbm50KGUsdC5pKSk7cmV0dXJuIHQuZ1tlXX1mdW5jdGlvbiBJdGUodCxlLG4pe2lmKHNFKHQsbiksbiE9bnVsbCYmIXQud2oobikpdGhyb3cgaXQobmV3IHRldCk7cmV0dXJuIG59ZnVuY3Rpb24gT3RlKHQpe3ZhciBlO2lmKHQuRWsoKSlmb3IoZT10LmktMTtlPj0wOy0tZSlBdCh0LGUpO3JldHVybiBhbXQodCl9ZnVuY3Rpb24gZ29uKHQpe3ZhciBlLG47aWYoIXQuYilyZXR1cm4gbnVsbDtmb3Iobj10LmI7ZT1uLmFbMF07KW49ZTtyZXR1cm4gbn1mdW5jdGlvbiBwb24odCxlKXt2YXIgbixyO3JldHVybiBlSnQoZSksbj0ocj10LnNsaWNlKDAsZSksQm10KHIsdCkpLG4ubGVuZ3RoPWUsbn1mdW5jdGlvbiAkOCh0LGUsbixyKXt2YXIgcztyPShaMygpLHJ8fF9FdCkscz10LnNsaWNlKGUsbiksdDV0KHMsdCxlLG4sLWUscil9ZnVuY3Rpb24gdWgodCxlLG4scixzKXtyZXR1cm4gZTwwP2R2KHQsbixyKTp1KG4sNjYpLk5qKCkuUGoodCx0LnloKCksZSxyLHMpfWZ1bmN0aW9uIGJvbih0KXtyZXR1cm4gX3QodCwxNzIpPyIiK3UodCwxNzIpLmE6dD09bnVsbD9udWxsOiRvKHQpfWZ1bmN0aW9uIHdvbih0KXtyZXR1cm4gX3QodCwxNzIpPyIiK3UodCwxNzIpLmE6dD09bnVsbD9udWxsOiRvKHQpfWZ1bmN0aW9uIFB0ZSh0LGUpe2lmKGUuYSl0aHJvdyBpdChuZXcgVm8oUGZlKSk7RnModC5hLGUpLGUuYT10LCF0LmomJih0Lmo9ZSl9ZnVuY3Rpb24gTm10KHQsZSl7ZW50LmNhbGwodGhpcyxlLnJkKCksZS5xZCgpJi0xNjQ0OSksT24odCksdGhpcy5hPXQsdGhpcy5jPWV9ZnVuY3Rpb24gRnRlKHQsZSl7dmFyIG4scjtyZXR1cm4gcj1lL3QuYy5IZCgpLmdjKCl8MCxuPWUldC5jLkhkKCkuZ2MoKSx0Nih0LHIsbil9ZnVuY3Rpb24gUXUoKXtRdT1aLE1kPW5ldyBMZXQoeTYsMCksZmI9bmV3IExldChxRSwxKSxrZj1uZXcgTGV0KHg2LDIpfWZ1bmN0aW9uIFUkKCl7VSQ9WixqdXQ9bmV3IFlSKCJBbGwiLDApLE9FdD1uZXcgTVV0LFBFdD1uZXcgcVV0LEZFdD1uZXcgRFV0fWZ1bmN0aW9uIE50ZSgpe050ZT1aLFFnZT1XcigoVSQoKSxsdChjdChzViwxKSxvZSwyOTcsMCxbanV0LE9FdCxQRXQsRkV0XSkpKX1mdW5jdGlvbiBCdGUoKXtCdGU9WixxYmU9V3IoKG5FKCksbHQoY3QoemJlLDEpLG9lLDQwNSwwLFtMdixGeSxQeSx6NF0pKSl9ZnVuY3Rpb24gUnRlKCl7UnRlPVosSHBlPVdyKChydigpLGx0KGN0KHFwZSwxKSxvZSw0MDYsMCxbaE8sbE8sV3V0LFl1dF0pKSl9ZnVuY3Rpb24ganRlKCl7anRlPVosR3BlPVdyKCh1NigpLGx0KGN0KFZwZSwxKSxvZSwzMjMsMCxbZE8sZk8sZ08scE9dKSkpfWZ1bmN0aW9uICR0ZSgpeyR0ZT1aLFlwZT1XcigoY18oKSxsdChjdChXcGUsMSksb2UsMzk0LDAsW2JPLGxWLGhWLHdPXSkpKX1mdW5jdGlvbiB6dGUoKXt6dGU9WixmeWU9V3IoKHdFKCksbHQoY3Qoc190LDEpLG9lLDM5MywwLFtBRyxSUywkTyxqU10pKSl9ZnVuY3Rpb24gcXRlKCl7cXRlPVosbzJlPVdyKChUeigpLGx0KGN0KGEyZSwxKSxvZSwzNjAsMCxbd2x0LEJWLFJWLGtPXSkpKX1mdW5jdGlvbiBIdGUoKXtIdGU9WixKeWU9V3IoKGVxKCksbHQoY3QoRl90LDEpLG9lLDM0MCwwLFtLaHQsT190LFBfdCxJX3RdKSkpfWZ1bmN0aW9uIFZ0ZSgpe1Z0ZT1aLGIyZT1XcigoSTEoKSxsdChjdChwMmUsMSksb2UsNDExLDAsW082LGY3LGQ3LHZsdF0pKSl9ZnVuY3Rpb24gR3RlKCl7R3RlPVosc21lPVdyKChjeSgpLGx0KGN0KHlodCwxKSxvZSwxOTcsMCxbeEcsbWh0LG41LGU1XSkpKX1mdW5jdGlvbiBVdGUoKXtVdGU9WixxNGU9V3IoKFNsKCksbHQoY3QoejRlLDEpLG9lLDM5NiwwLFtRbCxxQXQsekF0LEhBdF0pKSl9ZnVuY3Rpb24gV3RlKCl7V3RlPVosUzRlPVdyKCh6bCgpLGx0KGN0KF80ZSwxKSxvZSwyODUsMCxbclAsZjAsa2IsblBdKSkpfWZ1bmN0aW9uIFl0ZSgpe1l0ZT1aLGs0ZT1XcigoVzAoKSxsdChjdChfZnQsMSksb2UsMjE4LDAsW0NmdCxlUCxONyxYNl0pKSl9ZnVuY3Rpb24gS3RlKCl7S3RlPVosajRlPVdyKChqeigpLGx0KGN0KCRBdCwxKSxvZSwzMTEsMCxbTGZ0LEJBdCxqQXQsUkF0XSkpKX1mdW5jdGlvbiBYdGUoKXtYdGU9WixCNGU9V3IoKEFsKCksbHQoY3QockEsMSksb2UsMzc0LDAsW29QLEsyLGFQLEp5XSkpKX1mdW5jdGlvbiBRdGUoKXtRdGU9WixEcSgpLFRMdD1hcyxWNWU9Q3MsQ0x0PW5ldyBQMyhhcyksRzVlPW5ldyBQMyhDcyl9ZnVuY3Rpb24geEQoKXt4RD1aLGpUdD1uZXcgamJ0KEowLDApLFdWPW5ldyBqYnQoIklNUFJPVkVfU1RSQUlHSFRORVNTIiwxKX1mdW5jdGlvbiB2b24odCxlKXtyZXR1cm4gazgoKSxsZSh0LG5ldyBmYShlLHBlKGUuZS5jLmxlbmd0aCtlLmcuYy5sZW5ndGgpKSl9ZnVuY3Rpb24gbW9uKHQsZSl7cmV0dXJuIGs4KCksbGUodCxuZXcgZmEoZSxwZShlLmUuYy5sZW5ndGgrZS5nLmMubGVuZ3RoKSkpfWZ1bmN0aW9uIEJtdCh0LGUpe3JldHVybiBfRChlKSE9MTAmJmx0KG9sKGUpLGUuaG0sZS5fX2VsZW1lbnRUeXBlSWQkLF9EKGUpLHQpLHR9ZnVuY3Rpb24gbXUodCxlKXt2YXIgbjtyZXR1cm4gbj1Sbyh0LGUsMCksbj09LTE/ITE6KEZnKHQsbiksITApfWZ1bmN0aW9uIFp0ZSh0LGUpe3ZhciBuO3JldHVybiBuPXUoSngodC5lLGUpLDM4Nyksbj8oSHd0KG4pLG4uZSk6bnVsbH1mdW5jdGlvbiB6OCh0KXt2YXIgZTtyZXR1cm4gQm8odCkmJihlPTAtdCwhaXNOYU4oZSkpP2U6S3AockUodCkpfWZ1bmN0aW9uIFJvKHQsZSxuKXtmb3IoO248dC5jLmxlbmd0aDsrK24paWYoRmMoZSx0LmNbbl0pKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIEp0ZSh0LGUsbil7dmFyIHI7cmV0dXJuIFZwKHQpLHI9bmV3IFRpLHIuYT1lLHQuYS5OYihuZXcgS1Z0KHIsbikpLHIuYX1mdW5jdGlvbiB5b24odCl7dmFyIGU7cmV0dXJuIFZwKHQpLGU9TnQoYWEsdm8sMjUsMCwxNSwxKSxqMyh0LmEsbmV3IEZlKGUpKSxlfWZ1bmN0aW9uIGVpdCh0KXt2YXIgZSxuO3JldHVybiBuPXUoTmUodC5qLDApLDExKSxlPXUoUShuLChhZSgpLF9pKSksMTEpLGV9ZnVuY3Rpb24gUm10KHQpe3ZhciBlO2lmKCFiaXQodCkpdGhyb3cgaXQobmV3IGxjKTtyZXR1cm4gdC5lPTEsZT10LmQsdC5kPW51bGwsZX1mdW5jdGlvbiBuaXQodCxlKXt2YXIgbjt0aGlzLmY9dCx0aGlzLmI9ZSxuPXUodHIodC5iLGUpLDI4MyksdGhpcy5jPW4/bi5iOm51bGx9ZnVuY3Rpb24gdGVlKCl7ZGYoKSx0aGlzLmI9bmV3IF9yLHRoaXMuZj1uZXcgX3IsdGhpcy5nPW5ldyBfcix0aGlzLmU9bmV3IF9yfWZ1bmN0aW9uIGVlZSh0LGUpe3RoaXMuYT1OdChsMCxZZywxMCx0LmEuYy5sZW5ndGgsMCwxKSxQMSh0LmEsdGhpcy5hKSx0aGlzLmI9ZX1mdW5jdGlvbiBrRCh0KXt2YXIgZTtmb3IoZT10LnArMTtlPHQuYy5hLmMubGVuZ3RoOysrZSktLXUoTmUodC5jLmEsZSksMTApLnB9ZnVuY3Rpb24gcml0KHQpe3ZhciBlO2U9dC5BaSgpLGUhPW51bGwmJnQuZCE9LTEmJnUoZSw5MikuTmcodCksdC5pJiZ0LmkuRmkoKX1mdW5jdGlvbiBXJCh0KXt5aih0aGlzKSx0aGlzLmc9dD9tcnQodCx0LiRkKCkpOm51bGwsdGhpcy5mPXQsZCQodGhpcyksdGhpcy5fZCgpfWZ1bmN0aW9uIHowKHQsZSxuLHIscyxvLGgpe2ZpdC5jYWxsKHRoaXMsZSxyLHMsbyxoKSx0aGlzLmM9dCx0aGlzLmI9bn1mdW5jdGlvbiBabSh0LGUsbixyLHMpe3JldHVybiBPbih0KSxPbihlKSxPbihuKSxPbihyKSxPbihzKSxuZXcgZ3Z0KHQsZSxyKX1mdW5jdGlvbiBFRCh0LGUpe2lmKGU8MCl0aHJvdyBpdChuZXcgeW8oc2RlK2UpKTtyZXR1cm4gR1p0KHQsZSsxKSxOZSh0LmosZSl9ZnVuY3Rpb24gbmVlKHQsZSxuLHIpe2lmKCF0KXRocm93IGl0KG5ldyBGbih5XyhlLGx0KGN0KFFuLDEpLERlLDEsNSxbbixyXSkpKSl9ZnVuY3Rpb24gWSQodCxlKXtyZXR1cm4gRmMoZSxOZSh0LmYsMCkpfHxGYyhlLE5lKHQuZiwxKSl8fEZjKGUsTmUodC5mLDIpKX1mdW5jdGlvbiB4b24odCxlKXtqeCh1KHUodC5mLDMzKS5XZSgodWkoKSxLUykpLDk4KSkmJnhobih1cnQodSh0LmYsMzMpKSxlKX1mdW5jdGlvbiBURCh0LGUpe3ZhciBuLHI7cmV0dXJuIG49dShlLDY3NSkscj1uLk9oKCksIXImJm4uUmgocj1uZXcgZVV0KHQsZSkpLHJ9ZnVuY3Rpb24gVG8odCxlKXt2YXIgbixyO3JldHVybiBuPXUoZSw2NzcpLHI9bi5waygpLCFyJiZuLnRrKHI9bmV3IG1adCh0LGUpKSxyfWZ1bmN0aW9uIGFsKHQpe3JldHVybiB0LmJ8fCh0LmI9bmV3IEZLdCh0LGhvLHQpLCF0LmEmJih0LmE9bmV3IEdNKHQsdCkpKSx0LmJ9ZnVuY3Rpb24gcTkoKXtxOT1aLGlsdD1uZXcgRGV0KCJYWSIsMCkscmx0PW5ldyBEZXQoIlgiLDEpLHNsdD1uZXcgRGV0KCJZIiwyKX1mdW5jdGlvbiB5dSgpe3l1PVosbjE9bmV3IE1ldCgiVE9QIiwwKSxkYj1uZXcgTWV0KHFFLDEpLEVmPW5ldyBNZXQocjZ0LDIpfWZ1bmN0aW9uIHEwKCl7cTA9WixDTz1uZXcgUmV0KEowLDApLFk0PW5ldyBSZXQoIlRPUCIsMSksRjY9bmV3IFJldChyNnQsMil9ZnVuY3Rpb24gQ0QoKXtDRD1aLFRodD1uZXcgemJ0KCJJTlBVVF9PUkRFUiIsMCksQ2h0PW5ldyB6YnQoIlBPUlRfREVHUkVFIiwxKX1mdW5jdGlvbiBxOCgpe3E4PVosc0V0PWl1KGhsLGhsLDUyNDI4NyksUmdlPWl1KDAsMCxOSSksYUV0PVZydCgxKSxWcnQoMiksb0V0PVZydCgwKX1mdW5jdGlvbiBqbXQodCxlLG4pe3QuYS5jPU50KFFuLERlLDEsMCw1LDEpLGg0bih0LGUsbiksdC5hLmMubGVuZ3RoPT0wfHxIbW4odCxlKX1mdW5jdGlvbiBLJCh0KXt2YXIgZSxuO3JldHVybiBuPXQubGVuZ3RoLGU9TnQoeGgseWQsMjUsbiwxNSwxKSxpWHQodCwwLG4sZSwwKSxlfWZ1bmN0aW9uICRtdCh0KXt2YXIgZTtyZXR1cm4gdC5kaCgpfHwoZT1Kbih0LlRnKCkpLXQuQWgoKSx0LnBoKCkuYmsoZSkpLHQuUGcoKX1mdW5jdGlvbiB6bXQodCl7dmFyIGU7cmV0dXJuIGU9dTIoRG4odCwzMikpLGU9PW51bGwmJihzdSh0KSxlPXUyKERuKHQsMzIpKSksZX1mdW5jdGlvbiBpaXQodCxlKXt2YXIgbjtyZXR1cm4gbj1HaSh0LmQsZSksbj49MD9Yeih0LG4sITAsITApOmR2KHQsZSwhMCl9ZnVuY3Rpb24gcW10KHQsZSl7R0MoKTt2YXIgbixyO3JldHVybiBuPVh4KHQpLHI9WHgoZSksISFuJiYhIXImJiFnc2Uobi5rLHIuayl9ZnVuY3Rpb24ga29uKHQsZSl7a3UodCxlPT1udWxsfHxQaigoT24oZSksZSkpfHxpc05hTigoT24oZSksZSkpPzA6KE9uKGUpLGUpKX1mdW5jdGlvbiBFb24odCxlKXtFdSh0LGU9PW51bGx8fFBqKChPbihlKSxlKSl8fGlzTmFOKChPbihlKSxlKSk/MDooT24oZSksZSkpfWZ1bmN0aW9uIFRvbih0LGUpe3R2KHQsZT09bnVsbHx8UGooKE9uKGUpLGUpKXx8aXNOYU4oKE9uKGUpLGUpKT8wOihPbihlKSxlKSl9ZnVuY3Rpb24gQ29uKHQsZSl7SncodCxlPT1udWxsfHxQaigoT24oZSksZSkpfHxpc05hTigoT24oZSksZSkpPzA6KE9uKGUpLGUpKX1mdW5jdGlvbiByZWUodCl7KHRoaXMucT90aGlzLnE6KHduKCksd24oKSx1MCkpLkFjKHQucT90LnE6KHduKCksd24oKSx1MCkpfWZ1bmN0aW9uIF9vbih0LGUpe3JldHVybiBfdChlLDk5KSYmdShlLDE4KS5CYiZLYT9uZXcgcm50KGUsdCk6bmV3IHRFKGUsdCl9ZnVuY3Rpb24gU29uKHQsZSl7cmV0dXJuIF90KGUsOTkpJiZ1KGUsMTgpLkJiJkthP25ldyBybnQoZSx0KTpuZXcgdEUoZSx0KX1mdW5jdGlvbiBpZWUodCxlKXtjN3Q9bmV3IHZwLFVwZT1lLGhTPXQsdShoUy5iLDY1KSxBbXQoaFMsYzd0LG51bGwpLFFsZShoUyl9ZnVuY3Rpb24gc2l0KHQsZSxuKXt2YXIgcjtyZXR1cm4gcj10LmdbZV0scDkodCxlLHQub2koZSxuKSksdC5naShlLG4sciksdC5jaSgpLHJ9ZnVuY3Rpb24gWCQodCxlKXt2YXIgbjtyZXR1cm4gbj10LlhjKGUpLG4+PTA/KHQuJGMobiksITApOiExfWZ1bmN0aW9uIGFpdCh0KXt2YXIgZTtyZXR1cm4gdC5kIT10LnImJihlPURoKHQpLHQuZT0hIWUmJmUuQ2ooKT09ajBlLHQuZD1lKSx0LmV9ZnVuY3Rpb24gb2l0KHQsZSl7dmFyIG47Zm9yKExyKHQpLExyKGUpLG49ITE7ZS5PYigpOyluPW58dC5GYyhlLlBiKCkpO3JldHVybiBufWZ1bmN0aW9uIFh3KHQsZSl7dmFyIG47cmV0dXJuIG49dSh0cih0LmUsZSksMzg3KSxuPyhYVXQodCxuKSxuLmUpOm51bGx9ZnVuY3Rpb24gc2VlKHQpe3ZhciBlLG47cmV0dXJuIGU9dC82MHwwLG49dCU2MCxuPT0wPyIiK2U6IiIrZSsiOiIrKCIiK24pfWZ1bmN0aW9uIFdvKHQsZSl7dmFyIG4scjtyZXR1cm4gdzIodCkscj1uZXcgVG10KGUsdC5hKSxuPW5ldyBrWXQociksbmV3IFRuKHQsbil9ZnVuY3Rpb24gSm0odCxlKXt2YXIgbj10LmFbZV0scj0oX2l0KCksUHV0KVt0eXBlb2Ygbl07cmV0dXJuIHI/cihuKTpVeXQodHlwZW9mIG4pfWZ1bmN0aW9uIEFvbih0KXtzd2l0Y2godC5nKXtjYXNlIDA6cmV0dXJuIHdpO2Nhc2UgMTpyZXR1cm4tMTtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBMb24odCl7cmV0dXJuIHU0dCh0LChxOCgpLG9FdCkpPDA/LUdRZShyRSh0KSk6dC5sK3QubSptNit0LmgqQzJ9ZnVuY3Rpb24gX0QodCl7cmV0dXJuIHQuX19lbGVtZW50VHlwZUNhdGVnb3J5JD09bnVsbD8xMDp0Ll9fZWxlbWVudFR5cGVDYXRlZ29yeSR9ZnVuY3Rpb24gY2l0KHQpe3ZhciBlO3JldHVybiBlPXQuYi5jLmxlbmd0aD09MD9udWxsOk5lKHQuYiwwKSxlIT1udWxsJiZ2aXQodCwwKSxlfWZ1bmN0aW9uIGFlZSh0LGUpe2Zvcig7ZVswXTx0Lmxlbmd0aCYmaGQoYCAJXHIKYCxDdSh3YSh0LGVbMF0pKSk+PTA7KSsrZVswXX1mdW5jdGlvbiBTRCh0LGUpe3RoaXMuZT1lLHRoaXMuYT1KbmUodCksdGhpcy5hPDU0P3RoaXMuZj1Zdyh0KTp0aGlzLmM9SkQodCl9ZnVuY3Rpb24gb2VlKHQsZSxuLHIpe2dpKCkseXcuY2FsbCh0aGlzLDI2KSx0aGlzLmM9dCx0aGlzLmE9ZSx0aGlzLmQ9bix0aGlzLmI9cn1mdW5jdGlvbiBKZCh0LGUsbil7dmFyIHIscztmb3Iocj0xMCxzPTA7czxuLTE7cysrKWU8ciYmKHQuYSs9IjAiKSxyKj0xMDt0LmErPWV9ZnVuY3Rpb24gTW9uKHQsZSl7dmFyIG47Zm9yKG49MDt0LmUhPXQuaS5nYygpOylUZW4oZSxkcih0KSxwZShuKSksbiE9d2kmJisrbn1mdW5jdGlvbiBIbXQodCxlKXt2YXIgbjtmb3IoKyt0LmQsKyt0LmNbZV0sbj1lKzE7bjx0LmEubGVuZ3RoOykrK3QuYVtuXSxuKz1uJi1ufWZ1bmN0aW9uIERvbih0LGUpe3ZhciBuLHIscztzPWUuYy5pLG49dSh0cih0LmYscyksNTcpLHI9bi5kLmMtbi5lLmMsZHl0KGUuYSxyLDApfWZ1bmN0aW9uIEFEKHQpe3ZhciBlLG47cmV0dXJuIGU9dCsxMjgsbj0oZkt0KCksdUV0KVtlXSwhbiYmKG49dUV0W2VdPW5ldyBxdHQodCkpLG59ZnVuY3Rpb24gVXIodCxlKXt2YXIgbjtyZXR1cm4gT24oZSksbj10WyI6IitlXSxOb24oISFuLGx0KGN0KFFuLDEpLERlLDEsNSxbZV0pKSxufWZ1bmN0aW9uIElvbih0KXt2YXIgZSxuO2lmKHQuYil7bj1udWxsO2RvIGU9dC5iLHQuYj1udWxsLG49aW9lKGUsbik7d2hpbGUodC5iKTt0LmI9bn19ZnVuY3Rpb24gT29uKHQpe3ZhciBlLG47aWYodC5hKXtuPW51bGw7ZG8gZT10LmEsdC5hPW51bGwsbj1pb2UoZSxuKTt3aGlsZSh0LmEpO3QuYT1ufX1mdW5jdGlvbiBjZWUodCl7dmFyIGU7Zm9yKCsrdC5hLGU9dC5jLmEubGVuZ3RoO3QuYTxlOysrdC5hKWlmKHQuYy5iW3QuYV0pcmV0dXJufWZ1bmN0aW9uIFBvbih0LGUpe3ZhciBuLHI7Zm9yKHI9ZS5jLG49cisxO248PWUuZjtuKyspdC5hW25dPnQuYVtyXSYmKHI9bik7cmV0dXJuIHJ9ZnVuY3Rpb24gRm9uKHQsZSl7dmFyIG47cmV0dXJuIG49YXYodC5lLmMsZS5lLmMpLG49PTA/TXModC5lLmQsZS5lLmQpOm59ZnVuY3Rpb24gZTQodCxlKXtyZXR1cm4gZS5lPT0wfHx0LmU9PTA/czc6KFRFKCksdWF0KHQsZSkpfWZ1bmN0aW9uIE5vbih0LGUpe2lmKCF0KXRocm93IGl0KG5ldyBGbihqd24oIkVudW0gY29uc3RhbnQgdW5kZWZpbmVkOiAlcyIsZSkpKX1mdW5jdGlvbiBIOSgpe0g5PVosR2JlPW5ldyB4ZyxVYmU9bmV3IFQzLEhiZT1uZXcgY0ssVmJlPW5ldyBWYixXYmU9bmV3IHVLfWZ1bmN0aW9uIFEkKCl7USQ9WixxRXQ9bmV3IE9idCgiQllfU0laRSIsMCksSHV0PW5ldyBPYnQoIkJZX1NJWkVfQU5EX1NIQVBFIiwxKX1mdW5jdGlvbiBaJCgpe1okPVosdGx0PW5ldyBQYnQoIkVBREVTIiwwKSxnVj1uZXcgUGJ0KCJGUlVDSFRFUk1BTl9SRUlOR09MRCIsMSl9ZnVuY3Rpb24gTEQoKXtMRD1aLEdWPW5ldyBSYnQoIlJFQURJTkdfRElSRUNUSU9OIiwwKSxOVHQ9bmV3IFJidCgiUk9UQVRJT04iLDEpfWZ1bmN0aW9uIHVlZSgpe3VlZT1aLEwyZT1XcigoeDIoKSxsdChjdChGVHQsMSksb2UsMzM1LDAsW01sdCxQVHQsRGx0LHZTLHdTXSkpKX1mdW5jdGlvbiBsZWUoKXtsZWU9WixhbWU9V3IoKHVfKCksbHQoY3QoTjl0LDEpLG9lLDMxNSwwLFtGOXQseGh0LGtodCxEUyxJU10pKSl9ZnVuY3Rpb24gaGVlKCl7aGVlPVosdjJlPVdyKChiNCgpLGx0KGN0KHcyZSwxKSxvZSwzNjMsMCxbJFYscVYsSFYselYsalZdKSkpfWZ1bmN0aW9uIGZlZSgpe2ZlZT1aLHEyZT1XcigoZGgoKSxsdChjdChmQ3QsMSksb2UsMTYzLDAsW01PLEVTLGJiLFRTLGp5XSkpKX1mdW5jdGlvbiBkZWUoKXtkZWU9WixTM2U9V3IoKHVJKCksbHQoY3QoYVN0LDEpLG9lLDMxNiwwLFtyU3QsbmZ0LHNTdCxyZnQsaVN0XSkpKX1mdW5jdGlvbiBnZWUoKXtnZWU9WixYM2U9V3IoKFFmKCksbHQoY3QoaXAsMSksb2UsMTc1LDAsW3FuLGVhLFBkLFYyLHJwXSkpKX1mdW5jdGlvbiBwZWUoKXtwZWU9Wix4M2U9V3IoKEFFKCksbHQoY3QoeTNlLDEpLG9lLDM1NSwwLFtpNSxHNixHUyxWUyxVU10pKSl9ZnVuY3Rpb24gYmVlKCl7YmVlPVosQmJlPVdyKChXYSgpLGx0KGN0KEk3dCwxKSxvZSwzNTYsMCxbRGQsZ2IsY3UscWMsSW9dKSkpfWZ1bmN0aW9uIHdlZSgpe3dlZT1aLHk0ZT1XcigoYW8oKSxsdChjdChYUywxKSxvZSwxMDMsMCxbaDAsQ2YsemgsbmcscmddKSkpfWZ1bmN0aW9uIHZlZSgpe3ZlZT1aLEw0ZT1XcigobDQoKSxsdChjdCh0QSwxKSxvZSwyNDksMCxbRWIsaVAsSUF0LEpTLE9BdF0pKSl9ZnVuY3Rpb24gbWVlKCl7bWVlPVosSTRlPVdyKCh2ZSgpLGx0KGN0KFhhLDEpLHhjLDYxLDAsW1pvLFBuLEhuLG1yLEJuXSkpKX1mdW5jdGlvbiB1aXQodCxlKXt2YXIgbjtyZXR1cm4gbj11KHRyKHQuYSxlKSwxMzQpLG58fChuPW5ldyBrYSxraSh0LmEsZSxuKSksbn1mdW5jdGlvbiB5ZWUodCl7dmFyIGU7cmV0dXJuIGU9dShRKHQsKGFlKCksSXYpKSwzMDUpLGU/ZS5hPT10OiExfWZ1bmN0aW9uIHhlZSh0KXt2YXIgZTtyZXR1cm4gZT11KFEodCwoYWUoKSxJdikpLDMwNSksZT9lLmk9PXQ6ITF9ZnVuY3Rpb24ga2VlKHQsZSl7cmV0dXJuIE9uKGUpLHV2dCh0KSx0LmQuT2IoKT8oZS50ZCh0LmQuUGIoKSksITApOiExfWZ1bmN0aW9uIEokKHQpe3JldHVybiB5Yyh0LHdpKT4wP3dpOnljKHQsU2EpPDA/U2E6QXIodCl9ZnVuY3Rpb24gdHkodCl7cmV0dXJuIHQ8Mz8oamwodCxiZmUpLHQrMSk6dDxEXz9wcyh0Ly43NSsxKTp3aX1mdW5jdGlvbiB5bih0LGUpe3ZhciBuO3JldHVybiBuPSh0Lmk9PW51bGwmJnZkKHQpLHQuaSksZT49MCYmZTxuLmxlbmd0aD9uW2VdOm51bGx9ZnVuY3Rpb24gWWYodCxlLG4pe3ZhciByO2lmKGU9PW51bGwpdGhyb3cgaXQobmV3IElDKTtyZXR1cm4gcj1CMCh0LGUpLGlhbih0LGUsbikscn1mdW5jdGlvbiBFZWUodCl7cmV0dXJuIHQuYT49LS4wMSYmdC5hPD1CMSYmKHQuYT0wKSx0LmI+PS0uMDEmJnQuYjw9QjEmJih0LmI9MCksdH1mdW5jdGlvbiBUZWUodCxlKXtyZXR1cm4gZT09KEFudCgpLEFudCgpLFlnZSk/dC50b0xvY2FsZUxvd2VyQ2FzZSgpOnQudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBWbXQodCl7cmV0dXJuKHQuaSYyPyJpbnRlcmZhY2UgIjp0LmkmMT8iIjoiY2xhc3MgIikrKFAwKHQpLHQubyl9ZnVuY3Rpb24gQ28odCl7dmFyIGUsbjtuPShlPW5ldyBpZXQsZSksRHIoKCF0LnEmJih0LnE9bmV3IGZlKFdoLHQsMTEsMTApKSx0LnEpLG4pfWZ1bmN0aW9uIEJvbih0LGUpe3ZhciBuO3JldHVybiBuPWU+MD9lLTE6ZSx5SHQoUUtlKEtlZShxd3QobmV3IHI4LG4pLHQubiksdC5qKSx0LmspfWZ1bmN0aW9uIFJvbih0LGUsbixyKXt2YXIgczt0Lmo9LTEsZDV0KHQsVzR0KHQsZSxuKSwodG8oKSxzPXUoZSw2NikuTWooKSxzLk9rKHIpKSl9ZnVuY3Rpb24gQ2VlKHQpe3RoaXMuZz10LHRoaXMuZj1uZXcgaGUsdGhpcy5hPWIuTWF0aC5taW4odGhpcy5nLmMuYyx0aGlzLmcuZC5jKX1mdW5jdGlvbiBfZWUodCl7dGhpcy5iPW5ldyBoZSx0aGlzLmE9bmV3IGhlLHRoaXMuYz1uZXcgaGUsdGhpcy5kPW5ldyBoZSx0aGlzLmU9dH1mdW5jdGlvbiBTZWUodCxlKXt0aGlzLmE9bmV3IF9yLHRoaXMuZT1uZXcgX3IsdGhpcy5iPShaOSgpLHlHKSx0aGlzLmM9dCx0aGlzLmI9ZX1mdW5jdGlvbiBBZWUodCxlLG4pe0lqLmNhbGwodGhpcyksR210KHRoaXMpLHRoaXMuYT10LHRoaXMuYz1uLHRoaXMuYj1lLmQsdGhpcy5mPWUuZX1mdW5jdGlvbiBMZWUodCl7dGhpcy5kPXQsdGhpcy5jPXQuYy52YygpLktjKCksdGhpcy5iPW51bGwsdGhpcy5hPW51bGwsdGhpcy5lPShUUigpLE11dCl9ZnVuY3Rpb24gUXcodCl7aWYodDwwKXRocm93IGl0KG5ldyBGbigiSWxsZWdhbCBDYXBhY2l0eTogIit0KSk7dGhpcy5nPXRoaXMucmkodCl9ZnVuY3Rpb24gam9uKHQsZSl7aWYoMD50fHx0PmUpdGhyb3cgaXQobmV3IGlidCgiZnJvbUluZGV4OiAwLCB0b0luZGV4OiAiK3QrVXh0K2UpKX1mdW5jdGlvbiAkb24odCl7dmFyIGU7aWYodC5hPT10LmIuYSl0aHJvdyBpdChuZXcgbGMpO3JldHVybiBlPXQuYSx0LmM9ZSx0LmE9dC5hLmUsZX1mdW5jdGlvbiB0eih0KXt2YXIgZTtSbSghIXQuYyksZT10LmMuYSxsaCh0LmQsdC5jKSx0LmI9PXQuYz90LmI9ZTotLXQuYSx0LmM9bnVsbH1mdW5jdGlvbiBleih0LGUpe3ZhciBuO3JldHVybiB3Mih0KSxuPW5ldyBRWHQodCx0LmEucmQoKSx0LmEucWQoKXw0LGUpLG5ldyBUbih0LG4pfWZ1bmN0aW9uIHpvbih0LGUpe3ZhciBuLHI7cmV0dXJuIG49dShzeSh0LmQsZSksMTQpLG4/KHI9ZSx0LmUucGMocixuKSk6bnVsbH1mdW5jdGlvbiBueih0LGUpe3ZhciBuLHI7Zm9yKHI9dC5LYygpO3IuT2IoKTspbj11KHIuUGIoKSw3MCksSnQobiwoYWUoKSxqNiksZSl9ZnVuY3Rpb24gcW9uKHQpe3ZhciBlO3JldHVybiBlPVh0KHllKFEodCwoVGUoKSxKZykpKSksZTwwJiYoZT0wLEp0KHQsSmcsZSkpLGV9ZnVuY3Rpb24gSG9uKHQsZSxuKXt2YXIgcjtyPWIuTWF0aC5tYXgoMCx0LmIvMi0uNSksaF8obixyLDEpLGxlKGUsbmV3IGVHdChuLHIpKX1mdW5jdGlvbiBWb24odCxlLG4pe3ZhciByO3JldHVybiByPXQuYS5lW3UoZS5hLDEwKS5wXS10LmEuZVt1KG4uYSwxMCkucF0scHMoSk0ocikpfWZ1bmN0aW9uIE1lZSh0LGUsbixyLHMsbyl7dmFyIGg7aD1HcnQociksT2EoaCxzKSxvYShoLG8pLGxuKHQuYSxyLG5ldyBGaihoLGUsbi5mKSl9ZnVuY3Rpb24gRGVlKHQsZSl7dmFyIG47aWYobj1tSSh0LlRnKCksZSksIW4pdGhyb3cgaXQobmV3IEZuKGxiK2UrV2N0KSk7cmV0dXJuIG59ZnVuY3Rpb24gZXkodCxlKXt2YXIgbjtmb3Iobj10O2VzKG4pOylpZihuPWVzKG4pLG49PWUpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gR29uKHQsZSl7dmFyIG4scixzO2ZvcihyPWUuYS5jZCgpLG49dShlLmEuZGQoKSwxNCkuZ2MoKSxzPTA7czxuO3MrKyl0LnRkKHIpfWZ1bmN0aW9uIHh1KHQsZSl7dmFyIG4scixzLG87Zm9yKE9uKGUpLHI9dC5jLHM9MCxvPXIubGVuZ3RoO3M8bzsrK3Mpbj1yW3NdLGUudGQobil9ZnVuY3Rpb24gbGgodCxlKXt2YXIgbjtyZXR1cm4gbj1lLmMsZS5hLmI9ZS5iLGUuYi5hPWUuYSxlLmE9ZS5iPW51bGwsZS5jPW51bGwsLS10LmIsbn1mdW5jdGlvbiBVb24odCxlKXtyZXR1cm4gZSYmdC5iW2UuZ109PWU/KHRzKHQuYixlLmcsbnVsbCksLS10LmMsITApOiExfWZ1bmN0aW9uIEllZSh0LGUpe3JldHVybiEhVzkodCxlLEFyKF9hKGkwLFhkKEFyKF9hKGU9PW51bGw/MDpIaShlKSxzMCkpLDE1KSkpKX1mdW5jdGlvbiBXb24odCxlKXtqeCh1KFEodSh0LmUsMTApLChUZSgpLGNzKSksOTgpKSYmKHduKCksWnModSh0LmUsMTApLmosZSkpfWZ1bmN0aW9uIEdtdCh0KXt0LmI9KFF1KCksZmIpLHQuZj0oeXUoKSxkYiksdC5kPShqbCgyLGt5KSxuZXcgWGMoMikpLHQuZT1uZXcgQ2F9ZnVuY3Rpb24gS2YoKXtLZj1aLHNjPW5ldyBBZXQoIkJFR0lOIiwwKSxldT1uZXcgQWV0KHFFLDEpLGFjPW5ldyBBZXQoIkVORCIsMil9ZnVuY3Rpb24gTTEoKXtNMT1aLFA3PW5ldyBaZXQocUUsMCksWnk9bmV3IFpldCgiSEVBRCIsMSksRjc9bmV3IFpldCgiVEFJTCIsMil9ZnVuY3Rpb24gWW9uKCl7cmV0dXJuIENFKCksbHQoY3QoZlUsMSksb2UsMjM3LDAsW09mdCxsVSxoVSx1VSxJZnQsY1Usb1UsRGZ0XSl9ZnVuY3Rpb24gS29uKCl7cmV0dXJuIFVnKCksbHQoY3QoUTNlLDEpLG9lLDI3NywwLFtfU3QsTGEsZ2MsSTcsT28sdXMsVTYsVjFdKX1mdW5jdGlvbiBYb24oKXtyZXR1cm4gRXEoKSxsdChjdChTVHQsMSksb2UsMjcwLDAsW3hsdCxUbHQseWx0LFNsdCxFbHQsa2x0LF9sdCxDbHRdKX1mdW5jdGlvbiBRb24oKXtyZXR1cm4geTQoKSxsdChjdCh6OXQsMSksb2UsMjYwLDAsW2tHLEZPLE5PLFI5dCxqOXQsQjl0LCQ5dCxFR10pfWZ1bmN0aW9uIE9lZSgpe09lZT1aLE00ZT1XcigodWEoKSxsdChjdChQQXQsMSksb2UsOTgsMCxbVGIsRzEsQjcsWTIsZzAsR2NdKSkpfWZ1bmN0aW9uIFBlZSgpe1BlZT1aLGNWPShLZigpLGx0KGN0KE95LDEpLG9lLDIzMiwwLFtzYyxldSxhY10pKS5sZW5ndGgsR3V0PWNWfWZ1bmN0aW9uIHJ6KHQpe3RoaXMuYj0oTHIodCksbmV3IEJ1KHQpKSx0aGlzLmE9bmV3IGhlLHRoaXMuZD1uZXcgaGUsdGhpcy5lPW5ldyBDYX1mdW5jdGlvbiBab24odCl7dmFyIGU7cmV0dXJuIGU9Yi5NYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSxlPjAmJih0LmEvPWUsdC5iLz1lKSx0fWZ1bmN0aW9uIFJsKHQpe3ZhciBlO3JldHVybiB0Lnc/dC53OihlPXRzbih0KSxlJiYhZS5raCgpJiYodC53PWUpLGUpfWZ1bmN0aW9uIEpvbih0KXt2YXIgZTtyZXR1cm4gdD09bnVsbD9udWxsOihlPXUodCwxOTApLHRnbihlLGUubGVuZ3RoKSl9ZnVuY3Rpb24gQXQodCxlKXtpZih0Lmc9PW51bGx8fGU+PXQuaSl0aHJvdyBpdChuZXcgbm50KGUsdC5pKSk7cmV0dXJuIHQubGkoZSx0LmdbZV0pfWZ1bmN0aW9uIHRjbih0KXt2YXIgZSxuO2ZvcihlPXQuYS5kLmosbj10LmMuZC5qO2UhPW47KXZmKHQuYixlKSxlPU96KGUpO3ZmKHQuYixlKX1mdW5jdGlvbiBlY24odCl7dmFyIGU7Zm9yKGU9MDtlPHQuYy5sZW5ndGg7ZSsrKShBbihlLHQuYy5sZW5ndGgpLHUodC5jW2VdLDExKSkucD1lfWZ1bmN0aW9uIG5jbih0LGUsbil7dmFyIHIscyxvO2ZvcihzPWVbbl0scj0wO3I8cy5sZW5ndGg7cisrKW89c1tyXSx0LmVbby5jLnBdW28ucF09cn1mdW5jdGlvbiBsaXQodCxlKXt2YXIgbixyLHMsbztmb3Iocj10LmQscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sRTEodC5nLG4pLmE9ZX1mdW5jdGlvbiBueSh0LGUpe3ZhciBuLHI7Zm9yKHI9ZWkodCwwKTtyLmIhPXIuZC5jOyluPXUodGkociksOCksTGkobixlKTtyZXR1cm4gdH1mdW5jdGlvbiByY24odCxlKXt2YXIgbjtyZXR1cm4gbj1pYShuYyh1KHRyKHQuZyxlKSw4KSksdzJ0KHUodHIodC5mLGUpLDQ2MCkuYikpLG59ZnVuY3Rpb24gWncodCl7dmFyIGU7cmV0dXJuIEZydCh0LmUsdCksWm4odC5iKSx0LmM9dC5hLGU9dSh0LmEuUGIoKSw0MiksdC5iPXh5dCh0KSxlfWZ1bmN0aW9uIHUyKHQpe3ZhciBlO3JldHVybiBrOSh0PT1udWxsfHxBcnJheS5pc0FycmF5KHQpJiYoZT1fRCh0KSwhKGU+PTE0JiZlPD0xNikpKSx0fWZ1bmN0aW9uIEZlZSh0LGUsbil7dmFyIHI9ZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShyLGFyZ3VtZW50cyl9O3JldHVybiBlLmFwcGx5KHIsbikscn1mdW5jdGlvbiBOZWUodCxlLG4pe3ZhciByLHM7cj1lO2RvIHM9WHQodC5wW3IucF0pK24sdC5wW3IucF09cyxyPXQuYVtyLnBdO3doaWxlKHIhPWUpfWZ1bmN0aW9uIEg4KHQsZSl7dmFyIG4scjtyPXQuYSxuPUZsbih0LGUsbnVsbCksciE9ZSYmIXQuZSYmKG49UEUodCxlLG4pKSxuJiZuLkZpKCl9ZnVuY3Rpb24gVW10KHQsZSl7cmV0dXJuIGsxKCksd2Yoc2IpLGIuTWF0aC5hYnModC1lKTw9c2J8fHQ9PWV8fGlzTmFOKHQpJiZpc05hTihlKX1mdW5jdGlvbiBXbXQodCxlKXtyZXR1cm4gazEoKSx3ZihzYiksYi5NYXRoLmFicyh0LWUpPD1zYnx8dD09ZXx8aXNOYU4odCkmJmlzTmFOKGUpfWZ1bmN0aW9uIGljbih0LGUpe3JldHVybiBuYigpLHB1KHQuYi5jLmxlbmd0aC10LmUuYy5sZW5ndGgsZS5iLmMubGVuZ3RoLWUuZS5jLmxlbmd0aCl9ZnVuY3Rpb24gbjQodCxlKXtyZXR1cm4gblhlKFU5KHQsZSxBcihfYShpMCxYZChBcihfYShlPT1udWxsPzA6SGkoZSksczApKSwxNSkpKSkpfWZ1bmN0aW9uIEJlZSgpe0JlZT1aLFpiZT1XcigoVm4oKSxsdChjdChmbHQsMSksb2UsMjY3LDAsW09zLHRhLGtzLEhjLExsLHoxXSkpKX1mdW5jdGlvbiBSZWUoKXtSZWU9WixzNGU9V3IoKGh5KCksbHQoY3QoZGZ0LDEpLG9lLDI5MSwwLFtmZnQsWE8sS08saGZ0LFdPLFlPXSkpKX1mdW5jdGlvbiBqZWUoKXtqZWU9WixKM2U9V3IoKHQwKCksbHQoY3QoTFN0LDEpLG9lLDI0OCwwLFt1ZnQsR08sVU8sV0csR0csVUddKSkpfWZ1bmN0aW9uICRlZSgpeyRlZT1aLEMyZT1XcigoaDYoKSxsdChjdChiNywxKSxvZSwyMjcsMCxbcDcsYlMsZzcsTnksRzQsVjRdKSkpfWZ1bmN0aW9uIHplZSgpe3plZT1aLE4yZT1Xcigoa0UoKSxsdChjdChRVHQsMSksb2UsMjc1LDAsW21TLFdUdCxYVHQsS1R0LFlUdCxVVHRdKSkpfWZ1bmN0aW9uIHFlZSgpe3FlZT1aLEYyZT1Xcigob0koKSxsdChjdChHVHQsMSksb2UsMjc0LDAsW1lWLHFUdCxWVHQselR0LEhUdCxSbHRdKSkpfWZ1bmN0aW9uIEhlZSgpe0hlZT1aLHJtZT1XcigodXEoKSxsdChjdChJOXQsMSksb2UsMzEzLDAsW3dodCxNOXQsYmh0LEw5dCxEOXQsbUddKSkpfWZ1bmN0aW9uIFZlZSgpe1ZlZT1aLE8yZT1XcigoZHEoKSxsdChjdChSVHQsMSksb2UsMjc2LDAsW1BsdCxPbHQsTmx0LEZsdCxCbHQsVVZdKSkpfWZ1bmN0aW9uIEdlZSgpe0dlZT1aLGd5ZT1XcigocF8oKSxsdChjdChkeWUsMSksb2UsMzI3LDAsW0xHLE9odCxGaHQsUGh0LE5odCxJaHRdKSkpfWZ1bmN0aW9uIFVlZSgpe1VlZT1aLEQ0ZT1XcigoWnUoKSxsdChjdChlVSwxKSxvZSwyNzMsMCxbQ2Isc2csc1AsbkEsZUEsUTZdKSkpfWZ1bmN0aW9uIFdlZSgpe1dlZT1aLEU0ZT1XcigoaHEoKSxsdChjdChDQXQsMSksb2UsMzEyLDAsW1NmdCxrQXQsVEF0LHlBdCxFQXQseEF0XSkpKX1mdW5jdGlvbiBzY24oKXtyZXR1cm4gcHkoKSxsdChjdChsbywxKSxvZSw5MywwLFtfZixpZyxTZixMZixkMCxIaCxZbCxBZixxaF0pfWZ1bmN0aW9uIGl6KHQsZSl7dmFyIG47bj10LmEsdC5hPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFtKHQsMCxuLHQuYSkpfWZ1bmN0aW9uIHN6KHQsZSl7dmFyIG47bj10LmIsdC5iPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFtKHQsMSxuLHQuYikpfWZ1bmN0aW9uIFY4KHQsZSl7dmFyIG47bj10LmIsdC5iPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFtKHQsMyxuLHQuYikpfWZ1bmN0aW9uIEp3KHQsZSl7dmFyIG47bj10LmYsdC5mPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFtKHQsMyxuLHQuZikpfWZ1bmN0aW9uIHR2KHQsZSl7dmFyIG47bj10LmcsdC5nPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFtKHQsNCxuLHQuZykpfWZ1bmN0aW9uIGt1KHQsZSl7dmFyIG47bj10LmksdC5pPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFtKHQsNSxuLHQuaSkpfWZ1bmN0aW9uIEV1KHQsZSl7dmFyIG47bj10LmosdC5qPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFtKHQsNixuLHQuaikpfWZ1bmN0aW9uIEc4KHQsZSl7dmFyIG47bj10LmosdC5qPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFtKHQsMSxuLHQuaikpfWZ1bmN0aW9uIFU4KHQsZSl7dmFyIG47bj10LmMsdC5jPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFtKHQsNCxuLHQuYykpfWZ1bmN0aW9uIFc4KHQsZSl7dmFyIG47bj10LmssdC5rPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFtKHQsMixuLHQuaykpfWZ1bmN0aW9uIGhpdCh0LGUpe3ZhciBuO249dC5kLHQuZD1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBScnQodCwyLG4sdC5kKSl9ZnVuY3Rpb24gUmcodCxlKXt2YXIgbjtuPXQucyx0LnM9ZSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgUnJ0KHQsNCxuLHQucykpfWZ1bmN0aW9uIHJ5KHQsZSl7dmFyIG47bj10LnQsdC50PWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFJydCh0LDUsbix0LnQpKX1mdW5jdGlvbiBZOCh0LGUpe3ZhciBuO249dC5GLHQuRj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBKcyh0LDEsNSxuLGUpKX1mdW5jdGlvbiBNRCh0LGUpe3ZhciBuO3JldHVybiBuPXUodHIoKEdSKCksZFUpLHQpLDU1KSxuP24ueGooZSk6TnQoUW4sRGUsMSxlLDUsMSl9ZnVuY3Rpb24gSDAodCxlKXt2YXIgbixyO3JldHVybiBuPWUgaW4gdC5hLG4mJihyPUIwKHQsZSkuaGUoKSxyKT9yLmE6bnVsbH1mdW5jdGlvbiBhY24odCxlKXt2YXIgbixyLHM7cmV0dXJuIG49KHI9KFN3KCkscz1uZXcgWlQscyksZSYmRjV0KHIsZSksciksbnl0KG4sdCksbn1mdW5jdGlvbiBZZWUodCxlLG4pe2lmKHNFKHQsbiksIXQuQmsoKSYmbiE9bnVsbCYmIXQud2oobikpdGhyb3cgaXQobmV3IHRldCk7cmV0dXJuIG59ZnVuY3Rpb24gS2VlKHQsZSl7cmV0dXJuIHQubj1lLHQubj8odC5mPW5ldyBoZSx0LmU9bmV3IGhlKToodC5mPW51bGwsdC5lPW51bGwpLHR9ZnVuY3Rpb24ganIodCxlLG4scixzLG8pe3ZhciBoO3JldHVybiBoPXJydCh0LGUpLFFlZShuLGgpLGguaT1zPzg6MCxoLmY9cixoLmU9cyxoLmc9byxofWZ1bmN0aW9uIFltdCh0LGUsbixyLHMpe3RoaXMuZD1lLHRoaXMuaz1yLHRoaXMuZj1zLHRoaXMubz0tMSx0aGlzLnA9MSx0aGlzLmM9dCx0aGlzLmE9bn1mdW5jdGlvbiBLbXQodCxlLG4scixzKXt0aGlzLmQ9ZSx0aGlzLms9cix0aGlzLmY9cyx0aGlzLm89LTEsdGhpcy5wPTIsdGhpcy5jPXQsdGhpcy5hPW59ZnVuY3Rpb24gWG10KHQsZSxuLHIscyl7dGhpcy5kPWUsdGhpcy5rPXIsdGhpcy5mPXMsdGhpcy5vPS0xLHRoaXMucD02LHRoaXMuYz10LHRoaXMuYT1ufWZ1bmN0aW9uIFFtdCh0LGUsbixyLHMpe3RoaXMuZD1lLHRoaXMuaz1yLHRoaXMuZj1zLHRoaXMubz0tMSx0aGlzLnA9Nyx0aGlzLmM9dCx0aGlzLmE9bn1mdW5jdGlvbiBabXQodCxlLG4scixzKXt0aGlzLmQ9ZSx0aGlzLmo9cix0aGlzLmU9cyx0aGlzLm89LTEsdGhpcy5wPTQsdGhpcy5jPXQsdGhpcy5hPW59ZnVuY3Rpb24gWGVlKHQsZSl7dmFyIG4scixzLG87Zm9yKHI9ZSxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxQdGUodC5hLG4pO3JldHVybiB0fWZ1bmN0aW9uIEQxKHQpe3ZhciBlLG4scixzO2ZvcihuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sTHIoZSk7cmV0dXJuIG5ldyBiVXQodCl9ZnVuY3Rpb24gb2NuKHQpe3ZhciBlPS9mdW5jdGlvbig/OlxzKyhbXHckXSspKT9ccypcKC8sbj1lLmV4ZWModCk7cmV0dXJuIG4mJm5bMV18fEthdH1mdW5jdGlvbiBRZWUodCxlKXtpZih0KXtlLm49dDt2YXIgbj1maW4oZSk7aWYoIW4pe1FIW3RdPVtlXTtyZXR1cm59bi5nbT1lfX1mdW5jdGlvbiBjY24odCxlLG4pe3ZhciByLHM7cmV0dXJuIHM9dC5sZW5ndGgscj1iLk1hdGgubWluKG4scyksbjV0KHQsMCxlLDAsciwhMCksZX1mdW5jdGlvbiBaZWUodCxlLG4pe3ZhciByLHM7Zm9yKHM9ZS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSw3OSksRnModCx1KG4uS2IociksMzMpKX1mdW5jdGlvbiB1Y24oKXtuVnQoKTtmb3IodmFyIHQ9VHV0LGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXQucHVzaChhcmd1bWVudHNbZV0pfWZ1bmN0aW9uIFY5KHQsZSl7dmFyIG4scixzLG87Zm9yKHI9ZSxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxmcyh0LG4sdC5jLmIsdC5jKX1mdW5jdGlvbiBheih0LGUpe3QuYj1iLk1hdGgubWF4KHQuYixlLmQpLHQuZSs9ZS5yKyh0LmEuYy5sZW5ndGg9PTA/MDp0LmMpLGxlKHQuYSxlKX1mdW5jdGlvbiBKZWUodCl7Um0odC5jPj0wKSxhZm4odC5kLHQuYyk8MCYmKHQuYT10LmEtMSZ0LmQuYS5sZW5ndGgtMSx0LmI9dC5kLmMpLHQuYz0tMX1mdW5jdGlvbiBKbXQodCl7cmV0dXJuIHQuYTw1ND90LmY8MD8tMTp0LmY+MD8xOjA6KCF0LmMmJih0LmM9VkQodC5mKSksdC5jKS5lfWZ1bmN0aW9uIHdmKHQpe2lmKCEodD49MCkpdGhyb3cgaXQobmV3IEZuKCJ0b2xlcmFuY2UgKCIrdCsiKSBtdXN0IGJlID49IDAiKSk7cmV0dXJuIHR9ZnVuY3Rpb24gSzgoKXtyZXR1cm4gb2Z0fHwob2Z0PW5ldyBqdWUsbzQob2Z0LGx0KGN0KCQ0LDEpLERlLDEzMCwwLFtuZXcgVHBdKSkpLG9mdH1mdW5jdGlvbiBzbygpe3NvPVosT1M9bmV3IHpldChOXywwKSx0bD1uZXcgemV0KCJJTlBVVCIsMSksbnU9bmV3IHpldCgiT1VUUFVUIiwyKX1mdW5jdGlvbiBveigpe296PVosSVR0PW5ldyBGZXQoIkFSRCIsMCksVlY9bmV3IEZldCgiTVNEIiwxKSxMbHQ9bmV3IEZldCgiTUFOVUFMIiwyKX1mdW5jdGlvbiBldigpe2V2PVosUk89bmV3IFVldCgiQkFSWUNFTlRFUiIsMCksRlM9bmV3IFVldChFMWUsMSksVEc9bmV3IFVldChUMWUsMil9ZnVuY3Rpb24gREQodCxlKXt2YXIgbjtpZihuPXQuZ2MoKSxlPDB8fGU+bil0aHJvdyBpdChuZXcgcW0oZSxuKSk7cmV0dXJuIG5ldyB3d3QodCxlKX1mdW5jdGlvbiB0bmUodCxlKXt2YXIgbjtyZXR1cm4gX3QoZSw0Mik/dC5jLk1jKGUpOihuPWlzdCh0LGUpLHF6KHQsZSksbil9ZnVuY3Rpb24gYm8odCxlLG4pe3JldHVybiBiMih0LGUpLFFjKHQsbiksUmcodCwwKSxyeSh0LDEpLHFnKHQsITApLHpnKHQsITApLHR9ZnVuY3Rpb24gamwodCxlKXtpZih0PDApdGhyb3cgaXQobmV3IEZuKGUrIiBjYW5ub3QgYmUgbmVnYXRpdmUgYnV0IHdhczogIit0KSk7cmV0dXJuIHR9ZnVuY3Rpb24gZW5lKHQsZSl7dmFyIG4scjtmb3Iobj0wLHI9dC5nYygpO248cjsrK24paWYoRmMoZSx0LlhiKG4pKSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBjeih0KXt2YXIgZSxuO2ZvcihuPXQuYy5DYygpLktjKCk7bi5PYigpOyllPXUobi5QYigpLDE0KSxlLiRiKCk7dC5jLiRiKCksdC5kPTB9ZnVuY3Rpb24gbGNuKHQpe3ZhciBlLG4scixzO2ZvcihuPXQuYSxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxyWHQoZSxlLmxlbmd0aCxudWxsKX1mdW5jdGlvbiB0eXQodCl7dmFyIGUsbjtpZih0PT0wKXJldHVybiAzMjtmb3Iobj0wLGU9MTshKGUmdCk7ZTw8PTEpKytuO3JldHVybiBufWZ1bmN0aW9uIGhjbih0KXt2YXIgZSxuO2ZvcihuPW5ldyBTKHpzZSh0KSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksNjgwKSxlLkdmKCl9ZnVuY3Rpb24gbm5lKHQpe3lidCgpLHRoaXMuZz1uZXcgX3IsdGhpcy5mPW5ldyBfcix0aGlzLmI9bmV3IF9yLHRoaXMuYz1uZXcgVXcsdGhpcy5pPXR9ZnVuY3Rpb24gZXl0KCl7dGhpcy5mPW5ldyBDYSx0aGlzLmQ9bmV3IEhwdCx0aGlzLmM9bmV3IENhLHRoaXMuYT1uZXcgaGUsdGhpcy5iPW5ldyBoZX1mdW5jdGlvbiBybmUodCxlLG4scil7dGhpcy5yaigpLHRoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1udWxsLHRoaXMuYz1uZXcgcFl0KHRoaXMsZSxuLHIpfWZ1bmN0aW9uIGZpdCh0LGUsbixyLHMpe3RoaXMuZD10LHRoaXMubj1lLHRoaXMuZz1uLHRoaXMubz1yLHRoaXMucD0tMSxzfHwodGhpcy5vPS0yLXItMSl9ZnVuY3Rpb24gaW5lKCl7eDJ0LmNhbGwodGhpcyksdGhpcy5uPS0xLHRoaXMuZz1udWxsLHRoaXMuaT1udWxsLHRoaXMuaj1udWxsLHRoaXMuQmJ8PXhmfWZ1bmN0aW9uIGZjbigpe3JldHVybiBsbCgpLGx0KGN0KE5BdCwxKSxvZSwyNTksMCxbUjcsdVAsblUsaUEsclUsc1UsaVUsQWZ0LGNQXSl9ZnVuY3Rpb24gZGNuKCl7cmV0dXJuIENxKCksbHQoY3Qoczd0LDEpLG9lLDI1MCwwLFtpN3QsdDd0LGU3dCxKRXQsVnV0LHI3dCxuN3QsWkV0LFFFdF0pfWZ1bmN0aW9uIHNuZSgpe3NuZT1aLGpnZT1sdChjdChDciwxKSxYciwyNSwxNSxbMCw4LDQsMTIsMiwxMCw2LDE0LDEsOSw1LDEzLDMsMTEsNywxNV0pfWZ1bmN0aW9uIGFuZSgpe2FuZT1aLHhtZT1iaShiaShiaShuZXcgVnMsKFdhKCksRGQpLChybygpLGdTKSksZ2IsaDcpLGN1LGw3KX1mdW5jdGlvbiBvbmUoKXtvbmU9WixrbWU9YmkoYmkoYmkobmV3IFZzLChXYSgpLERkKSwocm8oKSxnUykpLGdiLGg3KSxjdSxsNyl9ZnVuY3Rpb24gY25lKCl7Y25lPVosRW1lPWJpKGJpKGJpKG5ldyBWcywoV2EoKSxEZCksKHJvKCksZ1MpKSxnYixoNyksY3UsbDcpfWZ1bmN0aW9uIHVuZSgpe3VuZT1aLF9tZT1LdShiaShiaShuZXcgVnMsKFdhKCksY3UpLChybygpLExWKSkscWMsVFYpLElvLEFWKX1mdW5jdGlvbiBuNigpe242PVosUDY9bmV3IFBldCgiTEFZRVJfU1dFRVAiLDApLEVPPW5ldyBQZXQoWG90LDEpLE1UdD1uZXcgUGV0KEowLDIpfWZ1bmN0aW9uIGdjbih0LGUpe3ZhciBuLHI7cmV0dXJuIG49dC5jLHI9ZS5lW3QucF0scj4wP3UoTmUobi5hLHItMSksMTApOm51bGx9ZnVuY3Rpb24gRzkodCxlKXt2YXIgbjtuPXQuayx0Lms9ZSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgSnModCwxLDIsbix0LmspKX1mdW5jdGlvbiB1eih0LGUpe3ZhciBuO249dC5mLHQuZj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBKcyh0LDEsOCxuLHQuZikpfWZ1bmN0aW9uIGx6KHQsZSl7dmFyIG47bj10LmksdC5pPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSw3LG4sdC5pKSl9ZnVuY3Rpb24gbnl0KHQsZSl7dmFyIG47bj10LmEsdC5hPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSw4LG4sdC5hKSl9ZnVuY3Rpb24gcnl0KHQsZSl7dmFyIG47bj10LmIsdC5iPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSwwLG4sdC5iKSl9ZnVuY3Rpb24gaXl0KHQsZSl7dmFyIG47bj10LmIsdC5iPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSwwLG4sdC5iKSl9ZnVuY3Rpb24gc3l0KHQsZSl7dmFyIG47bj10LmMsdC5jPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSwxLG4sdC5jKSl9ZnVuY3Rpb24gYXl0KHQsZSl7dmFyIG47bj10LmMsdC5jPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSwxLG4sdC5jKSl9ZnVuY3Rpb24gZGl0KHQsZSl7dmFyIG47bj10LmMsdC5jPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSw0LG4sdC5jKSl9ZnVuY3Rpb24gb3l0KHQsZSl7dmFyIG47bj10LmQsdC5kPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSwxLG4sdC5kKSl9ZnVuY3Rpb24gZ2l0KHQsZSl7dmFyIG47bj10LkQsdC5EPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSwyLG4sdC5EKSl9ZnVuY3Rpb24gcGl0KHQsZSl7dC5yPjAmJnQuYzx0LnImJih0LmMrPWUsdC5pJiZ0LmkuZD4wJiZ0LmchPTAmJnBpdCh0LmksZS90LnIqdC5pLmQpKX1mdW5jdGlvbiBwY24odCxlLG4pe3ZhciByO3QuYj1lLHQuYT1uLHI9KHQuYSY1MTIpPT01MTI/bmV3IFZxdDpuZXcgWEwsdC5jPUR2bihyLHQuYix0LmEpfWZ1bmN0aW9uIGxuZSh0LGUpe3JldHVybiBYMCh0LmUsZSk/KHRvKCksYWl0KGUpP25ldyBxaihlLHQpOm5ldyBCTShlLHQpKTpuZXcgblV0KGUsdCl9ZnVuY3Rpb24gaHoodCxlKXtyZXR1cm4gZVhlKFc5KHQuYSxlLEFyKF9hKGkwLFhkKEFyKF9hKGU9PW51bGw/MDpIaShlKSxzMCkpLDE1KSkpKSl9ZnVuY3Rpb24gYmNuKHQsZSxuKXtyZXR1cm4gWm0odCxuZXcgZ2UoZSksbmV3IEtuLG5ldyBiZShuKSxsdChjdChmbCwxKSxvZSwxMzIsMCxbXSkpfWZ1bmN0aW9uIHdjbih0KXt2YXIgZSxuO3JldHVybiAwPnQ/bmV3IG1idDooZT10KzEsbj1uZXcgUEp0KGUsdCksbmV3IFoydChudWxsLG4pKX1mdW5jdGlvbiB2Y24odCxlKXt3bigpO3ZhciBuO3JldHVybiBuPW5ldyBMeCgxKSxyYSh0KT9rbyhuLHQsZSk6YXUobi5mLHQsZSksbmV3IHEobil9ZnVuY3Rpb24gbWNuKHQsZSl7dmFyIG4scjtyZXR1cm4gbj10Lm8rdC5wLHI9ZS5vK2UucCxuPHI/LTE6bj09cj8wOjF9ZnVuY3Rpb24geWNuKHQpe3ZhciBlO3JldHVybiBlPVEodCwoYWUoKSxfaSkpLF90KGUsMTYwKT9FaWUodShlLDE2MCkpOm51bGx9ZnVuY3Rpb24gaG5lKHQpe3ZhciBlO3JldHVybiB0PWIuTWF0aC5tYXgodCwyKSxlPUR5dCh0KSx0PmU/KGU8PD0xLGU+MD9lOkRfKTplfWZ1bmN0aW9uIGJpdCh0KXtzd2l0Y2goTDJ0KHQuZSE9MyksdC5lKXtjYXNlIDI6cmV0dXJuITE7Y2FzZSAwOnJldHVybiEwfXJldHVybiBDYW4odCl9ZnVuY3Rpb24gZm5lKHQsZSl7dmFyIG47cmV0dXJuIF90KGUsOCk/KG49dShlLDgpLHQuYT09bi5hJiZ0LmI9PW4uYik6ITF9ZnVuY3Rpb24gd2l0KHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIG89ZT4+NSxzPWUmMzEscj1OcyhWbSh0Lm5bbl1bb10sQXIoRjAocywxKSkpLDMpLHJ9ZnVuY3Rpb24geGNuKHQsZSl7dmFyIG4scjtmb3Iocj1lLnZjKCkuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksNDIpLGFxKHQsbi5jZCgpLG4uZGQoKSl9ZnVuY3Rpb24ga2NuKHQsZSl7dmFyIG47bj1uZXcgdnAsdShlLmIsNjUpLHUoZS5iLDY1KSx1KGUuYiw2NSkseHUoZS5hLG5ldyBBd3QodCxuLGUpKX1mdW5jdGlvbiBjeXQodCxlKXt2YXIgbjtuPXQuYix0LmI9ZSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgSnModCwxLDIxLG4sdC5iKSl9ZnVuY3Rpb24gdXl0KHQsZSl7dmFyIG47bj10LmQsdC5kPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSwxMSxuLHQuZCkpfWZ1bmN0aW9uIGZ6KHQsZSl7dmFyIG47bj10LmosdC5qPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSwxMyxuLHQuaikpfWZ1bmN0aW9uIGRuZSh0LGUsbil7dmFyIHIscyxvO2ZvcihvPXQuYS5sZW5ndGgtMSxzPXQuYixyPTA7cjxuO3M9cysxJm8sKytyKXRzKGUscix0LmFbc10pfWZ1bmN0aW9uIHZmKHQsZSl7dmFyIG47cmV0dXJuIE9uKGUpLG49ZS5nLHQuYltuXT8hMToodHModC5iLG4sZSksKyt0LmMsITApfWZ1bmN0aW9uIGduZSh0LGUpe3ZhciBuO3JldHVybiBuPWU9PW51bGw/LTE6Um8odC5iLGUsMCksbjwwPyExOih2aXQodCxuKSwhMCl9ZnVuY3Rpb24gdml0KHQsZSl7dmFyIG47bj1GZyh0LmIsdC5iLmMubGVuZ3RoLTEpLGU8dC5iLmMubGVuZ3RoJiYoY2godC5iLGUsbiksQW9lKHQsZSkpfWZ1bmN0aW9uIEVjbih0LGUpeyhOJCgpLCQxP251bGw6ZS5jKS5sZW5ndGg9PTAmJlZXdChlLG5ldyB0ZSksa28odC5hLCQxP251bGw6ZS5jLGUpfWZ1bmN0aW9uIFRjbih0LGUpe3ZyKGUsIkhpZXJhcmNoaWNhbCBwb3J0IGNvbnN0cmFpbnQgcHJvY2Vzc2luZyIsMSksSWZuKHQpLE94bih0KSxvcihlKX1mdW5jdGlvbiBDY24odCxlKXt2YXIgbixyO2ZvcihyPWUuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMjY2KSx0LmI9ITAsRnModC5lLG4pLG4uYj10fWZ1bmN0aW9uIGR6KHQsZSl7dmFyIG4scjtyZXR1cm4gbj0xLWUscj10LmFbbl0sdC5hW25dPXIuYVtlXSxyLmFbZV09dCx0LmI9ITAsci5iPSExLHJ9ZnVuY3Rpb24gX2NuKHQsZSl7dmFyIG4scjtyZXR1cm4gbj11KFEodCwoVGUoKSxVeSkpLDgpLHI9dShRKGUsVXkpLDgpLE1zKG4uYixyLmIpfWZ1bmN0aW9uIHBuZSh0KXt0dnQuY2FsbCh0aGlzKSx0aGlzLmI9WHQoeWUoUSh0LChUZSgpLFRmKSkpKSx0aGlzLmE9dShRKHQsZWcpLDIxOCl9ZnVuY3Rpb24gYm5lKHQsZSxuKXtybXQuY2FsbCh0aGlzLHQsZSxuKSx0aGlzLmE9bmV3IF9yLHRoaXMuYj1uZXcgX3IsdGhpcy5kPW5ldyBEJHQodGhpcyl9ZnVuY3Rpb24gd25lKHQpe3RoaXMuZT10LHRoaXMuZD1uZXcgSVIodHkocXgodGhpcy5lKS5nYygpKSksdGhpcy5jPXRoaXMuZS5hLHRoaXMuYj10aGlzLmUuY31mdW5jdGlvbiBneih0KXt0aGlzLmI9dCx0aGlzLmE9TnQoQ3IsWHIsMjUsdCsxLDE1LDEpLHRoaXMuYz1OdChDcixYciwyNSx0LDE1LDEpLHRoaXMuZD0wfWZ1bmN0aW9uIG1pdCh0LGUsbil7dmFyIHI7cmV0dXJuIHI9bmV3IGhlLFI1dCh0LGUscixuLCEwLCEwKSx0LmI9bmV3IGd6KHIuYy5sZW5ndGgpLHJ9ZnVuY3Rpb24gdm5lKHQsZSl7dmFyIG47cmV0dXJuIG49dSh0cih0LmMsZSksNDU4KSxufHwobj1uZXcgRXF0LG4uYz1lLGtpKHQuYyxuLmMsbikpLG59ZnVuY3Rpb24geWl0KHQsZSl7dmFyIG49dC5hLHI9MDtmb3IodmFyIHMgaW4gbiluLmhhc093blByb3BlcnR5KHMpJiYoZVtyKytdPXMpO3JldHVybiBlfWZ1bmN0aW9uIGx5dCh0KXt2YXIgZTtyZXR1cm4gdC5iPT1udWxsPyhNZygpLE1nKCksYlApOihlPXQuTGsoKT90LktrKCk6dC5KaygpLGUpfWZ1bmN0aW9uIG1uZSh0KXt2YXIgZSxuO2ZvcihuPW5ldyBucih0KTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksMzMpLGt1KGUsMCksRXUoZSwwKX1mdW5jdGlvbiBZcCgpe1lwPVosSTY9bmV3IFZpKHc2dCksd1Y9bmV3IFZpKGkxZSksZFM9bmV3IFZpKHMxZSksdk89bmV3IFZpKGExZSl9ZnVuY3Rpb24gWDgoKXtYOD1aLHlPPW5ldyBGYnQoIlRPX0lOVEVSTkFMX0xUUiIsMCksZGx0PW5ldyBGYnQoIlRPX0lOUFVUX0RJUkVDVElPTiIsMSl9ZnVuY3Rpb24gcHooKXtwej1aLEZHPW5ldyBYYnQoIlAxX05PREVfUExBQ0VNRU5UIiwwKSxENz1uZXcgWGJ0KCJQMl9FREdFX1JPVVRJTkciLDEpfWZ1bmN0aW9uIG52KCl7bnY9WixEdj1uZXcgT2V0KCJTVEFSVCIsMCkscGI9bmV3IE9ldCgiTUlERExFIiwxKSxNdj1uZXcgT2V0KCJFTkQiLDIpfWZ1bmN0aW9uIHI2KCl7cjY9WixibHQ9bmV3IFBzKCJlZGdlbGFiZWxjZW50ZXJlZG5lc3NhbmFseXNpcy5pbmNsdWRlbGFiZWwiLChObigpLEYyKSl9ZnVuY3Rpb24gU2NuKHQsZSl7bHMoUmkobmV3IFRuKG51bGwsbmV3IF9uKG5ldyBTbSh0LmIpLDEpKSxuZXcgQ0d0KHQsZSkpLG5ldyBTR3QodCxlKSl9ZnVuY3Rpb24geW5lKCl7dGhpcy5jPW5ldyBQUigwKSx0aGlzLmI9bmV3IFBSKFUxZSksdGhpcy5kPW5ldyBQUihHMWUpLHRoaXMuYT1uZXcgUFIoem90KX1mdW5jdGlvbiBoeXQodCl7dmFyIGUsbjtmb3Iobj10LmMuYS5lYygpLktjKCk7bi5PYigpOyllPXUobi5QYigpLDIxNCkscHB0KGUsbmV3IHFhZShlLmUpKX1mdW5jdGlvbiB4bmUodCl7dmFyIGUsbjtmb3Iobj10LmMuYS5lYygpLktjKCk7bi5PYigpOyllPXUobi5QYigpLDIxNCksSXR0KGUsbmV3IFlLdChlLmYpKX1mdW5jdGlvbiBRYyh0LGUpe3ZhciBuO249dC56Yix0LnpiPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSwxLG4sdC56YikpfWZ1bmN0aW9uIGJ6KHQsZSl7dmFyIG47bj10LnhiLHQueGI9ZSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgSnModCwxLDMsbix0LnhiKSl9ZnVuY3Rpb24gd3oodCxlKXt2YXIgbjtuPXQueWIsdC55Yj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBKcyh0LDEsMixuLHQueWIpKX1mdW5jdGlvbiBucyh0LGUpe3ZhciBuLHI7bj0ocj1uZXcgcmV0LHIpLG4ubj1lLERyKCghdC5zJiYodC5zPW5ldyBmZShNdSx0LDIxLDE3KSksdC5zKSxuKX1mdW5jdGlvbiBGaSh0LGUpe3ZhciBuLHI7cj0obj1uZXcgSzJ0LG4pLHIubj1lLERyKCghdC5zJiYodC5zPW5ldyBmZShNdSx0LDIxLDE3KSksdC5zKSxyKX1mdW5jdGlvbiByNCh0LGUpe3ZhciBuLHI7Zm9yKG49dC5QYygpLCQ4KG4sMCxuLmxlbmd0aCxlKSxyPTA7cjxuLmxlbmd0aDtyKyspdC5fYyhyLG5bcl0pfWZ1bmN0aW9uIFVhKHQsZSl7dmFyIG4scixzO2ZvcihPbihlKSxuPSExLHM9ZS5LYygpO3MuT2IoKTspcj1zLlBiKCksbj1ufHQuRmMocik7cmV0dXJuIG59ZnVuY3Rpb24ga25lKHQpe3ZhciBlLG4scjtmb3IoZT0wLHI9dC5LYygpO3IuT2IoKTspbj1yLlBiKCksZSs9biE9bnVsbD9IaShuKTowLGU9fn5lO3JldHVybiBlfWZ1bmN0aW9uIEVuZSh0KXt2YXIgZTtyZXR1cm4gdD09MD8iVVRDIjoodDwwPyh0PS10LGU9IlVUQysiKTplPSJVVEMtIixlK3NlZSh0KSl9ZnVuY3Rpb24geGl0KHQsZSl7dmFyIG47cmV0dXJuIF90KGUsMTQpPyhuPXUoZSwxNCksdC5HYyhuKSk6b2l0KHQsdShMcihlKSwyMCkuS2MoKSl9ZnVuY3Rpb24gVG5lKHQsZSxuKXtTZWUuY2FsbCh0aGlzLGUsbiksdGhpcy5kPU50KGwwLFlnLDEwLHQuYS5jLmxlbmd0aCwwLDEpLFAxKHQuYSx0aGlzLmQpfWZ1bmN0aW9uIEFjbih0KXt0LmE9bnVsbCx0LmU9bnVsbCx0LmIuYz1OdChRbixEZSwxLDAsNSwxKSx0LmYuYz1OdChRbixEZSwxLDAsNSwxKSx0LmM9bnVsbH1mdW5jdGlvbiBDbmUodCxlKXtlP3QuQj09bnVsbCYmKHQuQj10LkQsdC5EPW51bGwpOnQuQiE9bnVsbCYmKHQuRD10LkIsdC5CPW51bGwpfWZ1bmN0aW9uIF9uZSh0LGUpe3JldHVybiBYdCh5ZShOdyhXRCh3dShuZXcgVG4obnVsbCxuZXcgX24odC5jLmIsMTYpKSxuZXcgZ1IodCkpLGUpKSkpfWZ1bmN0aW9uIGZ5dCh0LGUpe3JldHVybiBYdCh5ZShOdyhXRCh3dShuZXcgVG4obnVsbCxuZXcgX24odC5jLmIsMTYpKSxuZXcgTEModCkpLGUpKSkpfWZ1bmN0aW9uIExjbih0LGUpe3ZyKGUsazFlLDEpLGxzKFdvKG5ldyBUbihudWxsLG5ldyBfbih0LmIsMTYpKSxuZXcgcEspLG5ldyBiSyksb3IoZSl9ZnVuY3Rpb24gTWNuKHQsZSl7dmFyIG4scjtyZXR1cm4gbj11KHFlKHQsKHV5KCksQkcpKSwxOSkscj11KHFlKGUsQkcpLDE5KSxwdShuLmEsci5hKX1mdW5jdGlvbiBkeXQodCxlLG4pe3ZhciByLHM7Zm9yKHM9ZWkodCwwKTtzLmIhPXMuZC5jOylyPXUodGkocyksOCksci5hKz1lLHIuYis9bjtyZXR1cm4gdH1mdW5jdGlvbiBVOSh0LGUsbil7dmFyIHI7Zm9yKHI9dC5iW24mdC5mXTtyO3I9ci5iKWlmKG49PXIuYSYmcGQoZSxyLmcpKXJldHVybiByO3JldHVybiBudWxsfWZ1bmN0aW9uIFc5KHQsZSxuKXt2YXIgcjtmb3Iocj10LmNbbiZ0LmZdO3I7cj1yLmQpaWYobj09ci5mJiZwZChlLHIuaSkpcmV0dXJuIHI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gRGNuKHQsZSxuKXt2YXIgcixzLG87Zm9yKHI9MCxzPTA7czxuO3MrKylvPWVbc10sdFtzXT1vPDwxfHIscj1vPj4+MzE7ciE9MCYmKHRbbl09cil9ZnVuY3Rpb24gSWNuKHQsZSl7d24oKTt2YXIgbixyO2ZvcihyPW5ldyBoZSxuPTA7bjx0OysrbilyLmNbci5jLmxlbmd0aF09ZTtyZXR1cm4gbmV3IG1ldChyKX1mdW5jdGlvbiBTbmUodCl7dmFyIGU7cmV0dXJuIGU9SVp0KHQpLER3KGUuYSwwKT8oZjgoKSxmOCgpLE1FdCk6KGY4KCksbmV3IHoydChlLmIpKX1mdW5jdGlvbiBBbmUodCl7dmFyIGU7cmV0dXJuIGU9SVp0KHQpLER3KGUuYSwwKT8oZjgoKSxmOCgpLE1FdCk6KGY4KCksbmV3IHoydChlLmMpKX1mdW5jdGlvbiBPY24odCl7dmFyIGU7cmV0dXJuIGU9TSQodCksRHcoZS5hLDApPyhSUigpLFJSKCksS2dlKTooUlIoKSxuZXcga1d0KGUuYikpfWZ1bmN0aW9uIFBjbih0KXtyZXR1cm4gdC5iLmMuaS5rPT0oVm4oKSxrcyk/dShRKHQuYi5jLmksKGFlKCksX2kpKSwxMSk6dC5iLmN9ZnVuY3Rpb24gTG5lKHQpe3JldHVybiB0LmIuZC5pLms9PShWbigpLGtzKT91KFEodC5iLmQuaSwoYWUoKSxfaSkpLDExKTp0LmIuZH1mdW5jdGlvbiBocyh0LGUsbixyLHMsbyxoLGQsdixrLEMsTSxqKXtyZXR1cm4geG9lKHQsZSxuLHIscyxvLGgsZCx2LGssQyxNLGopLEtpdCh0LCExKSx0fWZ1bmN0aW9uIGhoKHQsZSxuLHIscyxvLGgpe1ZyLmNhbGwodGhpcyx0LGUpLHRoaXMuZD1uLHRoaXMuZT1yLHRoaXMuYz1zLHRoaXMuYj1vLHRoaXMuYT1BMShoKX1mdW5jdGlvbiBGY24odCxlKXt0eXBlb2Ygd2luZG93PT09TUkmJnR5cGVvZiB3aW5kb3cuJGd3dD09PU1JJiYod2luZG93LiRnd3RbdF09ZSl9ZnVuY3Rpb24gTmNuKHQsZSl7cmV0dXJuIG5FKCksdD09THYmJmU9PUZ5fHx0PT1GeSYmZT09THZ8fHQ9PXo0JiZlPT1QeXx8dD09UHkmJmU9PXo0fWZ1bmN0aW9uIEJjbih0LGUpe3JldHVybiBuRSgpLHQ9PUx2JiZlPT1QeXx8dD09THYmJmU9PXo0fHx0PT1GeSYmZT09ejR8fHQ9PUZ5JiZlPT1QeX1mdW5jdGlvbiBNbmUodCxlKXtyZXR1cm4gazEoKSx3ZihCMSksYi5NYXRoLmFicygwLWUpPD1CMXx8ZT09MHx8aXNOYU4oMCkmJmlzTmFOKGUpPzA6dC9lfWZ1bmN0aW9uIFJjbigpe3JldHVybiBvbygpLGx0KGN0KGpsdCwxKSxvZSwyNTYsMCxbS1YsdmgseVMsWFYseTcsVzQseFMsdjcsbTcsUVZdKX1mdW5jdGlvbiBraXQoKXtraXQ9Wix1QT1uZXcganF0LEJmdD1sdChjdChNdSwxKSxCNCwxNzAsMCxbXSksazVlPWx0KGN0KFdoLDEpLCQ4dCw1OSwwLFtdKX1mdW5jdGlvbiB2eigpe3Z6PVosWjl0PW5ldyBWZXQoIk5PIiwwKSxMaHQ9bmV3IFZldCgiR1JFRURZIiwxKSxROXQ9bmV3IFZldCgiTE9PS19CQUNLIiwyKX1mdW5jdGlvbiBqdSgpe2p1PVosejd0PW5ldyBtbSxqN3Q9bmV3IHlwLCQ3dD1uZXcgaEssUjd0PW5ldyBHYixxN3Q9bmV3IGZLLEg3dD1uZXcgZEt9ZnVuY3Rpb24gamNuKHQpe3ZhciBlLG4scjtmb3Iocj0wLG49bmV3IFModC5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwyOSksZS5wPXIsKytyfWZ1bmN0aW9uICRjbih0LGUpe3ZhciBuO3JldHVybiBuPUk0dCh0KSxvNXQobmV3ICRlKG4uYyxuLmQpLG5ldyAkZShuLmIsbi5hKSx0LnJmKCksZSx0LkhmKCkpfWZ1bmN0aW9uIFJjKHQsZSl7dmFyIG47cmV0dXJuIHQuYj9udWxsOihuPUJvbih0LHQuZykscmkodC5hLG4pLG4uaT10LHQuZD1lLG4pfWZ1bmN0aW9uIHpjbih0LGUsbil7dnIobiwiREZTIFRyZWVpZnlpbmcgcGhhc2UiLDEpLFhobih0LGUpLFV3bih0LGUpLHQuYT1udWxsLHQuYj1udWxsLG9yKG4pfWZ1bmN0aW9uIERuZSh0LGUsbil7dGhpcy5nPXQsdGhpcy5kPWUsdGhpcy5lPW4sdGhpcy5hPW5ldyBoZSxqcG4odGhpcyksd24oKSxacyh0aGlzLmEsbnVsbCl9ZnVuY3Rpb24gZ3l0KHQpe3RoaXMuaT10LmdjKCksdGhpcy5pPjAmJih0aGlzLmc9dGhpcy5yaSh0aGlzLmkrKHRoaXMuaS84fDApKzEpLHQuUWModGhpcy5nKSl9ZnVuY3Rpb24gc3ModCxlKXtSai5jYWxsKHRoaXMsRTVlLHQsZSksdGhpcy5iPXRoaXMsdGhpcy5hPW91KHQuVGcoKSx5bih0aGlzLmUuVGcoKSx0aGlzLmMpKX1mdW5jdGlvbiBZOSh0LGUpe3ZhciBuLHI7Zm9yKE9uKGUpLHI9ZS52YygpLktjKCk7ci5PYigpOyluPXUoci5QYigpLDQyKSx0LnpjKG4uY2QoKSxuLmRkKCkpfWZ1bmN0aW9uIHFjbih0LGUsbil7dmFyIHI7Zm9yKHI9bi5LYygpO3IuT2IoKTspaWYoIU8kKHQsZSxyLlBiKCkpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEhjbih0LGUsbixyLHMpe3ZhciBvO3JldHVybiBuJiYobz1HaShlLlRnKCksdC5jKSxzPW4uZ2goZSwtMS0obz09LTE/cjpvKSxudWxsLHMpKSxzfWZ1bmN0aW9uIFZjbih0LGUsbixyLHMpe3ZhciBvO3JldHVybiBuJiYobz1HaShlLlRnKCksdC5jKSxzPW4uaWgoZSwtMS0obz09LTE/cjpvKSxudWxsLHMpKSxzfWZ1bmN0aW9uIEluZSh0KXt2YXIgZTtpZih0LmI9PS0yKXtpZih0LmU9PTApZT0tMTtlbHNlIGZvcihlPTA7dC5hW2VdPT0wO2UrKyk7dC5iPWV9cmV0dXJuIHQuYn1mdW5jdGlvbiBPbmUodCl7c3dpdGNoKHQuZyl7Y2FzZSAyOnJldHVybiB2ZSgpLEJuO2Nhc2UgNDpyZXR1cm4gdmUoKSxIbjtkZWZhdWx0OnJldHVybiB0fX1mdW5jdGlvbiBQbmUodCl7c3dpdGNoKHQuZyl7Y2FzZSAxOnJldHVybiB2ZSgpLG1yO2Nhc2UgMzpyZXR1cm4gdmUoKSxQbjtkZWZhdWx0OnJldHVybiB0fX1mdW5jdGlvbiBHY24odCl7dmFyIGUsbixyO3JldHVybiB0Lmo9PSh2ZSgpLFBuKSYmKGU9dWNlKHQpLG49TnUoZSxIbikscj1OdShlLEJuKSxyfHxyJiZuKX1mdW5jdGlvbiBVY24odCl7dmFyIGUsbjtyZXR1cm4gZT11KHQuZSYmdC5lKCksOSksbj11KHl2dChlLGUubGVuZ3RoKSw5KSxuZXcgc2goZSxuLGUubGVuZ3RoKX1mdW5jdGlvbiBXY24odCxlKXt2cihlLGsxZSwxKSxwM3QoZFhlKG5ldyBlcigoVkMoKSxuZXcgaHJ0KHQsITEsITEsbmV3IGFOKSkpKSksb3IoZSl9ZnVuY3Rpb24gSUQodCxlKXtyZXR1cm4gTm4oKSxyYSh0KT9rbXQodCxCcihlKSk6Qm0odCk/VW50KHQseWUoZSkpOk5tKHQpP1Flbih0LFJlKGUpKTp0LndkKGUpfWZ1bmN0aW9uIHB5dCh0LGUpe2UucT10LHQuZD1iLk1hdGgubWF4KHQuZCxlLnIpLHQuYis9ZS5kKyh0LmEuYy5sZW5ndGg9PTA/MDp0LmMpLGxlKHQuYSxlKX1mdW5jdGlvbiBROCh0LGUpe3ZhciBuLHIscyxvO3JldHVybiBzPXQuYyxuPXQuYyt0LmIsbz10LmQscj10LmQrdC5hLGUuYT5zJiZlLmE8biYmZS5iPm8mJmUuYjxyfWZ1bmN0aW9uIEZuZSh0LGUsbixyKXtfdCh0LkNiLDE3OSkmJih1KHQuQ2IsMTc5KS50Yj1udWxsKSxRYyh0LG4pLGUmJm9ibih0LGUpLHImJnQueGsoITApfWZ1bmN0aW9uIGJ5dCh0LGUpe3ZhciBuO249dShlLDE4MykscjIobiwieCIsdC5pKSxyMihuLCJ5Iix0LmopLHIyKG4sWmN0LHQuZykscjIobixRY3QsdC5mKX1mdW5jdGlvbiB3eXQoKXt3eXQ9WixTbWU9dXYobFV0KGJpKGJpKG5ldyBWcywoV2EoKSxjdSksKHJvKCksTFYpKSxxYyxUViksSW8pLEFWKX1mdW5jdGlvbiBObmUoKXtObmU9WixEbWU9dXYobFV0KGJpKGJpKG5ldyBWcywoV2EoKSxjdSksKHJvKCksTFYpKSxxYyxUViksSW8pLEFWKX1mdW5jdGlvbiBteigpe216PVosWGh0PW5ldyBLZXQoSjAsMCksQl90PW5ldyBLZXQoIlBPTEFSX0NPT1JESU5BVEUiLDEpLE5fdD1uZXcgS2V0KCJJRCIsMil9ZnVuY3Rpb24geXooKXt5ej1aLEc5dD1uZXcgcWV0KCJFUVVBTExZIiwwKSxfaHQ9bmV3IHFldChLcSwxKSxVOXQ9bmV3IHFldCgiTk9SVEhfU09VVEgiLDIpfWZ1bmN0aW9uIEJuZSgpe0JuZT1aLG9tZT1XcigoeTQoKSxsdChjdCh6OXQsMSksb2UsMjYwLDAsW2tHLEZPLE5PLFI5dCxqOXQsQjl0LCQ5dCxFR10pKSl9ZnVuY3Rpb24gUm5lKCl7Um5lPVosVDJlPVdyKChFcSgpLGx0KGN0KFNUdCwxKSxvZSwyNzAsMCxbeGx0LFRsdCx5bHQsU2x0LEVsdCxrbHQsX2x0LENsdF0pKSl9ZnVuY3Rpb24gam5lKCl7am5lPVosWjNlPVdyKChVZygpLGx0KGN0KFEzZSwxKSxvZSwyNzcsMCxbX1N0LExhLGdjLEk3LE9vLHVzLFU2LFYxXSkpKX1mdW5jdGlvbiAkbmUoKXskbmU9WixlNWU9V3IoKENFKCksbHQoY3QoZlUsMSksb2UsMjM3LDAsW09mdCxsVSxoVSx1VSxJZnQsY1Usb1UsRGZ0XSkpKX1mdW5jdGlvbiBaOCgpe1o4PVosZlM9bmV3IFBzKCJkZWJ1Z1NWRyIsKE5uKCksITEpKSx1N3Q9bmV3IFBzKCJvdmVybGFwc0V4aXN0ZWQiLCEwKX1mdW5jdGlvbiB6bmUodCxlKXtyZXR1cm4gWm0obmV3IHF0KHQpLG5ldyBuZShlKSxuZXcgR3QoZSksbmV3IFhpLGx0KGN0KGZsLDEpLG9lLDEzMiwwLFtdKSl9ZnVuY3Rpb24gWWNuKCl7dmFyIHQ7cmV0dXJuICR1dHx8KCR1dD1uZXcgZHF0LHQ9bmV3IHFydCgiIiksYVFlKHQsKGQ4KCksTkV0KSksRWNuKCR1dCx0KSksJHV0fWZ1bmN0aW9uIEtjbih0LGUpe3ZhciBuO2ZvcihMcihlKTt0Lk9iKCk7KWlmKG49dC5QYigpLCF5eXQodShuLDEwKSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gcW5lKHQsZSl7dmFyIG47cmV0dXJuIG49YmF0KEs4KCksdCksbj8od28oZSwodWkoKSxPNyksbiksITApOiExfWZ1bmN0aW9uICRsKHQsZSl7dmFyIG47Zm9yKG49MDtuPGUuai5jLmxlbmd0aDtuKyspdShFRCh0LG4pLDIxKS5HYyh1KEVEKGUsbiksMTQpKTtyZXR1cm4gdH1mdW5jdGlvbiBYY24odCxlKXt2YXIgbixyO2ZvcihyPW5ldyBTKGUuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMjkpLHQuYVtuLnBdPXlnbihuKX1mdW5jdGlvbiBLOSh0LGUpe3ZhciBuLHI7Zm9yKE9uKGUpLHI9dC52YygpLktjKCk7ci5PYigpOyluPXUoci5QYigpLDQyKSxlLk9kKG4uY2QoKSxuLmRkKCkpfWZ1bmN0aW9uIHh6KHQsZSl7dmFyIG47X3QoZSw4Myk/KHUodC5jLDc2KS5YaigpLG49dShlLDgzKSx4Y24odCxuKSk6dSh0LmMsNzYpLldiKGUpfWZ1bmN0aW9uIGwyKHQpe3JldHVybiBfdCh0LDE1Mik/WngodSh0LDE1MikpOl90KHQsMTMxKT91KHQsMTMxKS5hOl90KHQsNTQpP25ldyBrdyh0KTpuZXcgT20odCl9ZnVuY3Rpb24gUWNuKHQsZSl7cmV0dXJuIGU8dC5iLmdjKCk/dSh0LmIuWGIoZSksMTApOmU9PXQuYi5nYygpP3QuYTp1KE5lKHQuZSxlLXQuYi5nYygpLTEpLDEwKX1mdW5jdGlvbiBIbmUodCxlKXt0LmE9UGEodC5hLDEpLHQuYz1iLk1hdGgubWluKHQuYyxlKSx0LmI9Yi5NYXRoLm1heCh0LmIsZSksdC5kPVBhKHQuZCxlKX1mdW5jdGlvbiBaY24odCxlKXt2YXIgbjt2cihlLCJFZGdlIGFuZCBsYXllciBjb25zdHJhaW50IGVkZ2UgcmV2ZXJzYWwiLDEpLG49ZW1uKHQpLHc1bihuKSxvcihlKX1mdW5jdGlvbiBWbmUodCl7dmFyIGU7dC5kPT1udWxsPygrK3QuZSx0LmY9MCxKcmUobnVsbCkpOigrK3QuZSxlPXQuZCx0LmQ9bnVsbCx0LmY9MCxKcmUoZSkpfWZ1bmN0aW9uIEtwKHQpe3ZhciBlO3JldHVybiBlPXQuaCxlPT0wP3QubCt0Lm0qbTY6ZT09WjA/dC5sK3QubSptNi1DMjp0fWZ1bmN0aW9uIEduZSh0KXtyZXR1cm4gJG0oKSx0LkEuSGMoKEFsKCksSnkpKSYmIXQuQi5IYygobGwoKSx1UCkpP1NpZSh0KTpudWxsfWZ1bmN0aW9uIEpjbih0KXtpZihPbih0KSx0Lmxlbmd0aD09MCl0aHJvdyBpdChuZXcgbGQoIlplcm8gbGVuZ3RoIEJpZ0ludGVnZXIiKSk7Zm1uKHRoaXMsdCl9ZnVuY3Rpb24gaTQodCl7aWYoIXQpdGhyb3cgaXQobmV3IE5vKCJubyBjYWxscyB0byBuZXh0KCkgc2luY2UgdGhlIGxhc3QgY2FsbCB0byByZW1vdmUoKSIpKX1mdW5jdGlvbiBUdSh0KXtyZXR1cm4gQkk8dCYmdDxDMj90PDA/Yi5NYXRoLmNlaWwodCk6Yi5NYXRoLmZsb29yKHQpOktwKG13bih0KSl9ZnVuY3Rpb24gdHVuKHQsZSl7dmFyIG4scixzO2ZvcihuPXQuYy5FZSgpLHM9ZS5LYygpO3MuT2IoKTspcj1zLlBiKCksdC5hLk9kKG4scik7cmV0dXJuIHQuYi5LYihuKX1mdW5jdGlvbiBtaSh0LGUpe3ZhciBuLHIscztpZihuPXQuSmcoKSxuIT1udWxsJiZ0Lk1nKCkpZm9yKHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpbltyXS51aShlKX1mdW5jdGlvbiBKOCh0LGUpe3ZhciBuLHI7Zm9yKG49dCxyPU5hKG4pLmU7cjspe2lmKG49cixuPT1lKXJldHVybiEwO3I9TmEobikuZX1yZXR1cm4hMX1mdW5jdGlvbiBldW4odCxlLG4pe3ZhciByLHM7cmV0dXJuIHI9dC5hLmZbZS5wXSxzPXQuYS5mW24ucF0scjxzPy0xOnI9PXM/MDoxfWZ1bmN0aW9uIGgyKHQsZSxuKXt2YXIgcixzO3JldHVybiBzPXUoeDkodC5kLGUpLDE5KSxyPXUoeDkodC5iLG4pLDE5KSwhc3x8IXI/bnVsbDp0Nih0LHMuYSxyLmEpfWZ1bmN0aW9uIG51bih0LGUpe3ZhciBuLHI7Zm9yKHI9bmV3IG5yKHQpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSwzMykseDEobixuLmkrZS5iLG4uaitlLmQpfWZ1bmN0aW9uIHJ1bih0LGUpe3ZhciBuLHI7Zm9yKHI9bmV3IFMoZSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNzApLGxlKHQuZCxuKSxkZ24odCxuKX1mdW5jdGlvbiBpdW4odCxlKXt2YXIgbixyO3I9bmV3IGhlLG49ZTtkbyByLmNbci5jLmxlbmd0aF09bixuPXUodHIodC5rLG4pLDE3KTt3aGlsZShuKTtyZXR1cm4gcn1mdW5jdGlvbiBEbih0LGUpe3ZhciBuO3JldHVybiB0LkRiJmU/KG49U3N0KHQsZSksbj09LTE/dC5FYjp1Mih0LkViKVtuXSk6bnVsbH1mdW5jdGlvbiBpYyh0LGUpe3ZhciBuLHI7cmV0dXJuIG49KHI9bmV3IGVNLHIpLG4uRz1lLCF0LnJiJiYodC5yYj1uZXcgR20odCxzMSx0KSksRHIodC5yYixuKSxufWZ1bmN0aW9uIG9pKHQsZSl7dmFyIG4scjtyZXR1cm4gbj0ocj1uZXcgeFIsciksbi5HPWUsIXQucmImJih0LnJiPW5ldyBHbSh0LHMxLHQpKSxEcih0LnJiLG4pLG59ZnVuY3Rpb24gdnl0KHQsZSl7c3dpdGNoKGUpe2Nhc2UgMTpyZXR1cm4hIXQubiYmdC5uLmkhPTA7Y2FzZSAyOnJldHVybiB0LmshPW51bGx9cmV0dXJuIFF2dCh0LGUpfWZ1bmN0aW9uIFVuZSh0KXtzd2l0Y2godC5hLmcpe2Nhc2UgMTpyZXR1cm4gbmV3IFVHdDtjYXNlIDM6cmV0dXJuIG5ldyBWc2U7ZGVmYXVsdDpyZXR1cm4gbmV3IG9kfX1mdW5jdGlvbiBreih0KXt2YXIgZTtpZih0Lmc+MXx8dC5PYigpKXJldHVybisrdC5hLHQuZz0wLGU9dC5pLHQuT2IoKSxlO3Rocm93IGl0KG5ldyBsYyl9ZnVuY3Rpb24gc3VuKHQpe0ZVdCgpO3ZhciBlO3JldHVybiBHVnQoRGh0LHQpfHwoZT1uZXcgUlEsZS5hPXQsc3d0KERodCx0LGUpKSx1KHBvKERodCx0KSw2MzUpfWZ1bmN0aW9uIExoKHQpe3ZhciBlLG4scixzO3JldHVybiBzPXQscj0wLHM8MCYmKHMrPUMyLHI9WjApLG49cHMocy9tNiksZT1wcyhzLW4qbTYpLGl1KGUsbixyKX1mdW5jdGlvbiBPRCh0KXt2YXIgZSxuLHI7Zm9yKHI9MCxuPW5ldyBNeCh0LmEpO24uYTxuLmMuYS5sZW5ndGg7KWU9ajkobiksdC5iLkhjKGUpJiYrK3I7cmV0dXJuIHJ9ZnVuY3Rpb24gYXVuKHQpe3ZhciBlLG4scjtmb3IoZT0xLHI9dC5LYygpO3IuT2IoKTspbj1yLlBiKCksZT0zMSplKyhuPT1udWxsPzA6SGkobikpLGU9fn5lO3JldHVybiBlfWZ1bmN0aW9uIG91bih0LGUpe3ZhciBuO3RoaXMuYz10LG49bmV3IGhlLFkzdCh0LG4sZSx0LmIsbnVsbCwhMSxudWxsLCExKSx0aGlzLmE9bmV3IGRhKG4sMCl9ZnVuY3Rpb24gdEUodCxlKXt0aGlzLmI9dCx0aGlzLmU9ZSx0aGlzLmQ9ZS5qLHRoaXMuZj0odG8oKSx1KHQsNjYpLk9qKCkpLHRoaXMuaz1vdShlLmUuVGcoKSx0KX1mdW5jdGlvbiBmMih0LGUsbil7dGhpcy5iPShPbih0KSx0KSx0aGlzLmQ9KE9uKGUpLGUpLHRoaXMuZT0oT24obiksbiksdGhpcy5jPXRoaXMuZCsoIiIrdGhpcy5lKX1mdW5jdGlvbiBXbmUoKXt0aGlzLmE9dShJZSgoSmYoKSxwVikpLDE5KS5hLHRoaXMuYz1YdCh5ZShJZShiVikpKSx0aGlzLmI9WHQoeWUoSWUoZWx0KSkpfWZ1bmN0aW9uIFluZSgpe1luZT1aLEE0ZT1XcigocHkoKSxsdChjdChsbywxKSxvZSw5MywwLFtfZixpZyxTZixMZixkMCxIaCxZbCxBZixxaF0pKSl9ZnVuY3Rpb24gS25lKCl7S25lPVosaHBlPVdyKChDcSgpLGx0KGN0KHM3dCwxKSxvZSwyNTAsMCxbaTd0LHQ3dCxlN3QsSkV0LFZ1dCxyN3Qsbjd0LFpFdCxRRXRdKSkpfWZ1bmN0aW9uIHJ2KCl7cnY9WixoTz1uZXcgWlIoIlVQIiwwKSxsTz1uZXcgWlIoRG90LDEpLFd1dD1uZXcgWlIoeTYsMiksWXV0PW5ldyBaUih4NiwzKX1mdW5jdGlvbiBteXQoKXtteXQ9Wix1X3Q9KFQkKCksemh0KSx2eWU9bmV3IG1uKEhrdCx1X3QpLGNfdD0oQSQoKSxxaHQpLHd5ZT1uZXcgbW4oVmt0LGNfdCl9ZnVuY3Rpb24gZUUoKXtlRT1aLCRsdD1uZXcgQmV0KCJPTkVfU0lERUQiLDApLHpsdD1uZXcgQmV0KCJUV09fU0lERUQiLDEpLFRPPW5ldyBCZXQoIk9GRiIsMil9ZnVuY3Rpb24gWG5lKHQpe3Qucj1uZXcgSHMsdC53PW5ldyBIcyx0LnQ9bmV3IGhlLHQuaT1uZXcgaGUsdC5kPW5ldyBIcyx0LmE9bmV3IEZ4LHQuYz1uZXcgX3J9ZnVuY3Rpb24gUEQodCl7dGhpcy5uPW5ldyBoZSx0aGlzLmU9bmV3IFppLHRoaXMuaj1uZXcgWmksdGhpcy5rPW5ldyBoZSx0aGlzLmY9bmV3IGhlLHRoaXMucD10fWZ1bmN0aW9uIFFuZSh0LGUpe3QuYyYmKHRsZSh0LGUsITApLGxzKG5ldyBUbihudWxsLG5ldyBfbihlLDE2KSksbmV3IFF0dCh0KSkpLHRsZSh0LGUsITEpfWZ1bmN0aW9uIGN1bih0LGUsbil7cmV0dXJuIHQ9PShldigpLFRHKT9uZXcgaFE6dWwoZSwxKSE9MD9uZXcgaGJ0KG4ubGVuZ3RoKTpuZXcgeEh0KG4ubGVuZ3RoKX1mdW5jdGlvbiBNbyh0LGUpe3ZhciBuO3JldHVybiBlJiYobj1lLlZlKCksbi5kYygpfHwodC5xP1k5KHQucSxuKTp0LnE9bmV3IHVVdChuKSkpLHR9ZnVuY3Rpb24gWm5lKHQsZSl7dmFyIG47cmV0dXJuIG49dC5hLmdldChlKSxuPT09dm9pZCAwPysrdC5kOihJWmUodC5hLGUpLC0tdC5jLHckKHQuYikpLG59ZnVuY3Rpb24gdXVuKHQsZSl7dmFyIG4scixzO3JldHVybiBuPWUucC10LnAsbj09MD8ocj10LmYuYSp0LmYuYixzPWUuZi5hKmUuZi5iLE1zKHIscykpOm59ZnVuY3Rpb24gbHVuKHQsZSl7dmFyIG4scjtyZXR1cm4gbj10LmYuYy5sZW5ndGgscj1lLmYuYy5sZW5ndGgsbjxyPy0xOm49PXI/MDoxfWZ1bmN0aW9uIGh1bih0KXtyZXR1cm4gdC5iLmMubGVuZ3RoIT0wJiZ1KE5lKHQuYiwwKSw3MCkuYT91KE5lKHQuYiwwKSw3MCkuYTpncnQodCl9ZnVuY3Rpb24gZnVuKHQpe3ZhciBlO2lmKHQpe2lmKGU9dCxlLmRjKCkpdGhyb3cgaXQobmV3IGxjKTtyZXR1cm4gZS5YYihlLmdjKCktMSl9cmV0dXJuIEpRdCh0LktjKCkpfWZ1bmN0aW9uIEpuZSh0KXt2YXIgZTtyZXR1cm4geWModCwwKTwwJiYodD1Sd3QodCkpLGU9QXIoJHAodCwzMikpLDY0LShlIT0wP3BJKGUpOnBJKEFyKHQpKSszMil9ZnVuY3Rpb24geXl0KHQpe3ZhciBlO3JldHVybiBlPXUoUSh0LChhZSgpLG9jKSksNjEpLHQuaz09KFZuKCksa3MpJiYoZT09KHZlKCksQm4pfHxlPT1Ibil9ZnVuY3Rpb24gZHVuKHQsZSxuKXt2YXIgcixzO3M9dShRKHQsKFRlKCksU28pKSw3NCkscyYmKHI9bmV3IFB1LGppdChyLDAscyksbnkocixuKSxVYShlLHIpKX1mdW5jdGlvbiBFeih0LGUsbil7dmFyIHIscyxvLGg7aD1OYSh0KSxyPWguZCxzPWguYyxvPXQubixlJiYoby5hPW8uYS1yLmItcy5hKSxuJiYoby5iPW8uYi1yLmQtcy5iKX1mdW5jdGlvbiBndW4odCxlKXt2YXIgbixyO3JldHVybiBuPXQuaixyPWUuaixuIT1yP24uZy1yLmc6dC5wPT1lLnA/MDpuPT0odmUoKSxQbik/dC5wLWUucDplLnAtdC5wfWZ1bmN0aW9uIHB1bih0KXt2YXIgZSxuO2ZvcigkNW4odCksbj1uZXcgUyh0LmQpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDEwMSksZS5pJiZLZ24oZSl9ZnVuY3Rpb24gWDkodCxlLG4scixzKXt0cyh0LmNbZS5nXSxuLmcsciksdHModC5jW24uZ10sZS5nLHIpLHRzKHQuYltlLmddLG4uZyxzKSx0cyh0LmJbbi5nXSxlLmcscyl9ZnVuY3Rpb24gYnVuKHQsZSxuLHIpe3Uobi5iLDY1KSx1KG4uYiw2NSksdShyLmIsNjUpLHUoci5iLDY1KSx1KHIuYiw2NSkseHUoci5hLG5ldyBTd3QodCxlLHIpKX1mdW5jdGlvbiB3dW4odCxlKXt0LmQ9PShhbygpLHpoKXx8dC5kPT1yZz91KGUuYSw1NykuYy5GYyh1KGUuYiw1NykpOnUoZS5iLDU3KS5jLkZjKHUoZS5hLDU3KSl9ZnVuY3Rpb24gRWl0KHQsZSxuLHIpe3JldHVybiBuPT0xPyghdC5uJiYodC5uPW5ldyBmZShxbyx0LDEsNykpLEJhKHQubixlLHIpKTokNHQodCxlLG4scil9ZnVuY3Rpb24gRkQodCxlKXt2YXIgbixyO3JldHVybiByPShuPW5ldyBITCxuKSxRYyhyLGUpLERyKCghdC5BJiYodC5BPW5ldyBGdShodSx0LDcpKSx0LkEpLHIpLHJ9ZnVuY3Rpb24gdnVuKHQsZSxuKXt2YXIgcixzLG8saDtyZXR1cm4gbz1udWxsLGg9ZSxzPUt3KGgsZXV0KSxyPW5ldyBER3QodCxuKSxvPShCZG4oci5hLHIuYixzKSxzKSxvfWZ1bmN0aW9uIFRpdCh0KXt2YXIgZTtyZXR1cm4oIXQuYXx8ISh0LkJiJjEpJiZ0LmEua2goKSkmJihlPURoKHQpLF90KGUsMTQ4KSYmKHQuYT11KGUsMTQ4KSkpLHQuYX1mdW5jdGlvbiBORCh0LGUpe3ZhciBuLHI7Zm9yKE9uKGUpLHI9ZS5LYygpO3IuT2IoKTspaWYobj1yLlBiKCksIXQuSGMobikpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gbXVuKHQsZSl7dmFyIG4scixzO3JldHVybiBuPXQubCtlLmwscj10Lm0rZS5tKyhuPj4yMikscz10LmgrZS5oKyhyPj4yMiksaXUobiZobCxyJmhsLHMmWjApfWZ1bmN0aW9uIHRyZSh0LGUpe3ZhciBuLHIscztyZXR1cm4gbj10LmwtZS5sLHI9dC5tLWUubSsobj4+MjIpLHM9dC5oLWUuaCsocj4+MjIpLGl1KG4maGwsciZobCxzJlowKX1mdW5jdGlvbiBCRCh0KXt2YXIgZTtyZXR1cm4gdDwxMjg/KGU9KHBLdCgpLGhFdClbdF0sIWUmJihlPWhFdFt0XT1uZXcgaFIodCkpLGUpOm5ldyBoUih0KX1mdW5jdGlvbiBXaSh0KXt2YXIgZTtyZXR1cm4gX3QodCw3OCk/dDooZT10JiZ0Ll9famF2YSRleGNlcHRpb24sZXx8KGU9bmV3IEhyZSh0KSxhcXQoZSkpLGUpfWZ1bmN0aW9uIFJEKHQpe2lmKF90KHQsMTg2KSlyZXR1cm4gdSh0LDExOCk7aWYodClyZXR1cm4gbnVsbDt0aHJvdyBpdChuZXcgU3goS2RlKSl9ZnVuY3Rpb24gZXJlKHQsZSl7aWYoZT09bnVsbClyZXR1cm4hMTtmb3IoO3QuYSE9dC5iOylpZih5aShlLE16KHQpKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB4eXQodCl7cmV0dXJuIHQuYS5PYigpPyEwOnQuYSE9dC5kPyExOih0LmE9bmV3IGVtdCh0LmUuZiksdC5hLk9iKCkpfWZ1bmN0aW9uIExzKHQsZSl7dmFyIG4scjtyZXR1cm4gbj1lLlBjKCkscj1uLmxlbmd0aCxyPT0wPyExOihQd3QodC5jLHQuYy5sZW5ndGgsbiksITApfWZ1bmN0aW9uIHl1bih0LGUsbil7dmFyIHIscztmb3Iocz1lLnZjKCkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksNDIpLHQueWMoci5jZCgpLHIuZGQoKSxuKTtyZXR1cm4gdH1mdW5jdGlvbiBucmUodCxlKXt2YXIgbixyO2ZvcihyPW5ldyBTKHQuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNzApLEp0KG4sKGFlKCksajYpLGUpfWZ1bmN0aW9uIHh1bih0LGUsbil7dmFyIHIscztmb3Iocz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDMzKSx4MShyLHIuaStlLHIuaituKX1mdW5jdGlvbiBycmUodCxlKXtpZighdCl0aHJvdyBpdChuZXcgRm4oeV8oInZhbHVlIGFscmVhZHkgcHJlc2VudDogJXMiLGx0KGN0KFFuLDEpLERlLDEsNSxbZV0pKSkpfWZ1bmN0aW9uIGlyZSh0LGUpe3JldHVybiF0fHwhZXx8dD09ZT8hMTokaWUodC5kLmMsZS5kLmMrZS5kLmIpJiYkaWUoZS5kLmMsdC5kLmMrdC5kLmIpfWZ1bmN0aW9uIGt1bigpe3JldHVybiBOJCgpLCQxP25ldyBxcnQobnVsbCk6b2NlKFljbigpLCJjb20uZ29vZ2xlLmNvbW1vbi5iYXNlLlN0cmluZ3MiKX1mdW5jdGlvbiBzcmUodCxlKXt2YXIgbjtyZXR1cm4gbj1VZChlLmEuZ2MoKSksbHMoZXoobmV3IFRuKG51bGwsbmV3IF9uKGUsMSkpLHQuaSksbmV3IFRHdCh0LG4pKSxufWZ1bmN0aW9uIGFyZSh0KXt2YXIgZSxuO3JldHVybiBuPShlPW5ldyBITCxlKSxRYyhuLCJUIiksRHIoKCF0LmQmJih0LmQ9bmV3IEZ1KGh1LHQsMTEpKSx0LmQpLG4pLG59ZnVuY3Rpb24ga3l0KHQpe3ZhciBlLG4scixzO2ZvcihlPTEsbj0wLHM9dC5nYygpO248czsrK24pcj10LmtpKG4pLGU9MzEqZSsocj09bnVsbD8wOkhpKHIpKTtyZXR1cm4gZX1mdW5jdGlvbiBvcmUodCxlLG4scil7dmFyIHM7cmV0dXJuIGZEKGUsdC5lLkhkKCkuZ2MoKSksZkQobix0LmMuSGQoKS5nYygpKSxzPXQuYVtlXVtuXSx0cyh0LmFbZV0sbixyKSxzfWZ1bmN0aW9uIGx0KHQsZSxuLHIscyl7cmV0dXJuIHMuZ209dCxzLmhtPWUscy5pbT1FdCxzLl9fZWxlbWVudFR5cGVJZCQ9bixzLl9fZWxlbWVudFR5cGVDYXRlZ29yeSQ9cixzfWZ1bmN0aW9uIEV1bih0LGUsbixyLHMpe3JldHVybiBrNCgpLGIuTWF0aC5taW4od2hlKHQsZSxuLHIscyksd2hlKG4scix0LGUsTWoobmV3ICRlKHMuYSxzLmIpKSkpfWZ1bmN0aW9uIFR6KCl7VHo9Wix3bHQ9bmV3IHRqKEowLDApLEJWPW5ldyB0aihDMWUsMSksUlY9bmV3IHRqKF8xZSwyKSxrTz1uZXcgdGooIkJPVEgiLDMpfWZ1bmN0aW9uIEkxKCl7STE9WixPNj1uZXcgZWoocUUsMCksZjc9bmV3IGVqKHk2LDEpLGQ3PW5ldyBlaih4NiwyKSx2bHQ9bmV3IGVqKCJUT1AiLDMpfWZ1bmN0aW9uIG5FKCl7bkU9WixMdj1uZXcgSlIoIlExIiwwKSxGeT1uZXcgSlIoIlE0IiwxKSxQeT1uZXcgSlIoIlEyIiwyKSx6ND1uZXcgSlIoIlEzIiwzKX1mdW5jdGlvbiBDeigpe0N6PVosTWh0PW5ldyBHZXQoIk9GRiIsMCksTDc9bmV3IEdldCgiU0lOR0xFX0VER0UiLDEpLFl5PW5ldyBHZXQoIk1VTFRJX0VER0UiLDIpfWZ1bmN0aW9uIGpEKCl7akQ9WixWRz1uZXcgSmJ0KCJNSU5JTVVNX1NQQU5OSU5HX1RSRUUiLDApLEVTdD1uZXcgSmJ0KCJNQVhJTVVNX1NQQU5OSU5HX1RSRUUiLDEpfWZ1bmN0aW9uIGk2KCl7aTY9WixVM2U9bmV3IFRaLEczZT1uZXcga1p9ZnVuY3Rpb24gRXl0KHQpe3ZhciBlLG4scjtmb3IoZT1uZXcgWmkscj1laSh0LmQsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDE4OCkscmkoZSxuLmMpO3JldHVybiBlfWZ1bmN0aW9uIENpdCh0KXt2YXIgZSxuLHIscztmb3Iocz1uZXcgaGUscj10LktjKCk7ci5PYigpOyluPXUoci5QYigpLDMzKSxlPXd5KG4pLExzKHMsZSk7cmV0dXJuIHN9ZnVuY3Rpb24gVHVuKHQpe3ZhciBlO2J2KHQsITApLGU9V2csVXModCwoVGUoKSxfNykpJiYoZSs9dShRKHQsXzcpLDE5KS5hKSxKdCh0LF83LHBlKGUpKX1mdW5jdGlvbiBjcmUodCxlLG4pe3ZhciByO1h1KHQuYSkseHUobi5pLG5ldyByenQodCkpLHI9bmV3IG1qKHUodHIodC5hLGUuYiksNjUpKSxLaWUodCxyLGUpLG4uZj1yfWZ1bmN0aW9uIEN1bih0LGUpe3ZhciBuLHI7cmV0dXJuIG49dC5jLHI9ZS5lW3QucF0scjxuLmEuYy5sZW5ndGgtMT91KE5lKG4uYSxyKzEpLDEwKTpudWxsfWZ1bmN0aW9uIF91bih0LGUpe3ZhciBuLHI7Zm9yKGckKGUsInByZWRpY2F0ZSIpLHI9MDt0Lk9iKCk7cisrKWlmKG49dC5QYigpLGUuTGIobikpcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gczYodCxlKXt2YXIgbixyO2lmKHI9MCx0PDY0JiZ0PD1lKWZvcihlPWU8NjQ/ZTo2MyxuPXQ7bjw9ZTtuKyspcj1TMShyLEYwKDEsbikpO3JldHVybiByfWZ1bmN0aW9uIFR5dCh0KXt3bigpO3ZhciBlLG4scjtmb3Iocj0wLG49dC5LYygpO24uT2IoKTspZT1uLlBiKCkscj1yKyhlIT1udWxsP0hpKGUpOjApLHI9cnwwO3JldHVybiByfWZ1bmN0aW9uIEN5dCh0KXt2YXIgZSxuO3JldHVybiBuPShTdygpLGU9bmV3IGFkLGUpLHQmJkRyKCghdC5hJiYodC5hPW5ldyBmZShKaSx0LDYsNikpLHQuYSksbiksbn1mdW5jdGlvbiBTdW4odCl7dmFyIGU7cmV0dXJuIGU9bmV3IHl0LGUuYT10LGUuYj1QdW4odCksZS5jPU50KEFlLGVlLDIsMiw2LDEpLGUuY1swXT1FbmUodCksZS5jWzFdPUVuZSh0KSxlfWZ1bmN0aW9uIF95dCh0LGUpe3N3aXRjaChlKXtjYXNlIDA6IXQubyYmKHQubz1uZXcgX2woKEpjKCksU2IpLEh2LHQsMCkpLHQuby5jLiRiKCk7cmV0dXJufUdzdCh0LGUpfWZ1bmN0aW9uICREKHQsZSxuKXtzd2l0Y2gobi5nKXtjYXNlIDI6dC5iPWU7YnJlYWs7Y2FzZSAxOnQuYz1lO2JyZWFrO2Nhc2UgNDp0LmQ9ZTticmVhaztjYXNlIDM6dC5hPWV9fWZ1bmN0aW9uIHVyZSh0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIGtiO2Nhc2UgMjpyZXR1cm4gZjA7Y2FzZSAzOnJldHVybiBuUDtkZWZhdWx0OnJldHVybiByUH19ZnVuY3Rpb24gQXVuKHQpe3N3aXRjaCh1KFEodCwoVGUoKSx1dSkpLDE2MykuZyl7Y2FzZSAyOmNhc2UgNDpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBscmUoKXtscmU9WixCMmU9V3IoKG9vKCksbHQoY3Qoamx0LDEpLG9lLDI1NiwwLFtLVix2aCx5UyxYVix5NyxXNCx4Uyx2NyxtNyxRVl0pKSl9ZnVuY3Rpb24gaHJlKCl7aHJlPVosUjRlPVdyKChsbCgpLGx0KGN0KE5BdCwxKSxvZSwyNTksMCxbUjcsdVAsblUsaUEsclUsc1UsaVUsQWZ0LGNQXSkpKX1mdW5jdGlvbiBmcmUoKXtmcmU9WixJeWU9YmkodXYodXYoVlIoYmkobmV3IFZzLCh3RSgpLFJTKSwocF8oKSxMRykpLCRPKSxQaHQpLEZodCksalMsTmh0KX1mdW5jdGlvbiBkMigpe2QyPVosSWx0PW5ldyBOZXQoSjAsMCksdzc9bmV3IE5ldCgiSU5DT01JTkdfT05MWSIsMSksVTQ9bmV3IE5ldCgiT1VUR09JTkdfT05MWSIsMil9ZnVuY3Rpb24gX2l0KCl7X2l0PVosUHV0PXtib29sZWFuOmhYZSxudW1iZXI6eUtlLHN0cmluZzp4S2Usb2JqZWN0OkNvZSxmdW5jdGlvbjpDb2UsdW5kZWZpbmVkOnRLZX19ZnVuY3Rpb24gZHJlKHQsZSl7QmoodD49MCwiTmVnYXRpdmUgaW5pdGlhbCBjYXBhY2l0eSIpLEJqKGU+PTAsIk5vbi1wb3NpdGl2ZSBsb2FkIGZhY3RvciIpLFh1KHRoaXMpfWZ1bmN0aW9uIFNpdCh0LGUsbil7cmV0dXJuIHQ+PTEyOD8hMTp0PDY0P3U5KE5zKEYwKDEsdCksbiksMCk6dTkoTnMoRjAoMSx0LTY0KSxlKSwwKX1mdW5jdGlvbiBMdW4odCxlKXtyZXR1cm4hdHx8IWV8fHQ9PWU/ITE6YXYodC5iLmMsZS5iLmMrZS5iLmIpPDAmJmF2KGUuYi5jLHQuYi5jK3QuYi5iKTwwfWZ1bmN0aW9uIGdyZSh0KXt2YXIgZSxuLHI7cmV0dXJuIG49dC5uLHI9dC5vLGU9dC5kLG5ldyBhaChuLmEtZS5iLG4uYi1lLmQsci5hKyhlLmIrZS5jKSxyLmIrKGUuZCtlLmEpKX1mdW5jdGlvbiBNdW4odCl7dmFyIGUsbixyLHM7Zm9yKG49dC5hLHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLHlyZSh0LGUsKHZlKCksbXIpKSx5cmUodCxlLFBuKX1mdW5jdGlvbiBEdW4odCl7dmFyIGUsbixyLHM7Zm9yKGU9KHQuaj09bnVsbCYmKHQuaj0oSTgoKSxzPU91dC5jZSh0KSxIZG4ocykpKSx0LmopLG49MCxyPWUubGVuZ3RoO248cjsrK24pO31mdW5jdGlvbiByRSh0KXt2YXIgZSxuLHI7cmV0dXJuIGU9fnQubCsxJmhsLG49fnQubSsoZT09MD8xOjApJmhsLHI9fnQuaCsoZT09MCYmbj09MD8xOjApJlowLGl1KGUsbixyKX1mdW5jdGlvbiBJdW4odCxlKXt2YXIgbixyO3JldHVybiBuPXUodSh0cih0LmcsZS5hKSw0NikuYSw2NSkscj11KHUodHIodC5nLGUuYiksNDYpLmEsNjUpLF9sZShuLHIpfWZ1bmN0aW9uIFN5dCh0LGUsbil7dmFyIHI7aWYocj10LmdjKCksZT5yKXRocm93IGl0KG5ldyBxbShlLHIpKTtyZXR1cm4gdC5oaSgpJiYobj1EUXQodCxuKSksdC5WaChlLG4pfWZ1bmN0aW9uIHpEKHQsZSxuKXtyZXR1cm4gbj09bnVsbD8oIXQucSYmKHQucT1uZXcgX3IpLEp4KHQucSxlKSk6KCF0LnEmJih0LnE9bmV3IF9yKSxraSh0LnEsZSxuKSksdH1mdW5jdGlvbiBKdCh0LGUsbil7cmV0dXJuIG49PW51bGw/KCF0LnEmJih0LnE9bmV3IF9yKSxKeCh0LnEsZSkpOighdC5xJiYodC5xPW5ldyBfciksa2kodC5xLGUsbikpLHR9ZnVuY3Rpb24gcHJlKHQpe3ZhciBlLG47cmV0dXJuIG49bmV3IEIkLE1vKG4sdCksSnQobiwoWXAoKSxJNiksdCksZT1uZXcgX3IsUHluKHQsbixlKSxhNW4odCxuLGUpLG59ZnVuY3Rpb24gT3VuKHQpe2s0KCk7dmFyIGUsbixyO2ZvcihuPU50KFdzLGVlLDgsMiwwLDEpLHI9MCxlPTA7ZTwyO2UrKylyKz0uNSxuW2VdPWcxbihyLHQpO3JldHVybiBufWZ1bmN0aW9uIGJyZSh0LGUpe3ZhciBuLHIscyxvO2ZvcihuPSExLHI9dC5hW2VdLmxlbmd0aCxvPTA7bzxyLTE7bysrKXM9bysxLG49bnxRaG4odCxlLG8scyk7cmV0dXJuIG59ZnVuY3Rpb24gaUUodCxlLG4scixzKXt2YXIgbyxoO2ZvcihoPW47aDw9cztoKyspZm9yKG89ZTtvPD1yO28rKylmNCh0LG8saCl8fFNxKHQsbyxoLCEwLCExKX1mdW5jdGlvbiB3cmUodCxlKXt0aGlzLmI9dCxWMy5jYWxsKHRoaXMsKHUoQXQoV3QoKEhwKCksTG4pLm8pLDEwKSwxOCksZS5pKSxlLmcpLHRoaXMuYT0oa2l0KCksQmZ0KX1mdW5jdGlvbiBBeXQodCxlKXt0aGlzLmM9dCx0aGlzLmQ9ZSx0aGlzLmI9dGhpcy5kL3RoaXMuYy5jLkhkKCkuZ2MoKXwwLHRoaXMuYT10aGlzLmQldGhpcy5jLmMuSGQoKS5nYygpfWZ1bmN0aW9uIEx5dCgpe3RoaXMubz1udWxsLHRoaXMuaz1udWxsLHRoaXMuaj1udWxsLHRoaXMuZD1udWxsLHRoaXMuYj1udWxsLHRoaXMubj1udWxsLHRoaXMuYT1udWxsfWZ1bmN0aW9uIE15dCh0LGUsbil7dGhpcy5xPW5ldyBiLkRhdGUsdGhpcy5xLnNldEZ1bGxZZWFyKHQrYWIsZSxuKSx0aGlzLnEuc2V0SG91cnMoMCwwLDAsMCksRV8odGhpcywwKX1mdW5jdGlvbiBWMCgpe1YwPVosdmI9bmV3ICRldChKMCwwKSxxOXQ9bmV3ICRldCgiTk9ERVNfQU5EX0VER0VTIiwxKSxFaHQ9bmV3ICRldCgiUFJFRkVSX0VER0VTIiwyKX1mdW5jdGlvbiBQdW4odCl7dmFyIGU7cmV0dXJuIHQ9PTA/IkV0Yy9HTVQiOih0PDA/KHQ9LXQsZT0iRXRjL0dNVC0iKTplPSJFdGMvR01UKyIsZStzZWUodCkpfWZ1bmN0aW9uIER5dCh0KXt2YXIgZTtpZih0PDApcmV0dXJuIFNhO2lmKHQ9PTApcmV0dXJuIDA7Zm9yKGU9RF87IShlJnQpO2U+Pj0xKTtyZXR1cm4gZX1mdW5jdGlvbiB2cmUodCl7dmFyIGUsbjtyZXR1cm4gbj1wSSh0LmgpLG49PTMyPyhlPXBJKHQubSksZT09MzI/cEkodC5sKSszMjplKzIwLTEwKTpuLTEyfWZ1bmN0aW9uIFE5KHQpe3ZhciBlO3JldHVybiBlPXQuYVt0LmJdLGU9PW51bGw/bnVsbDoodHModC5hLHQuYixudWxsKSx0LmI9dC5iKzEmdC5hLmxlbmd0aC0xLGUpfWZ1bmN0aW9uIG1yZSh0KXt2YXIgZSxuO3JldHVybiBlPXQudC10LmtbdC5vLnBdKnQuZCt0LmpbdC5vLnBdPnQuZixuPXQudSt0LmVbdC5vLnBdKnQuZD50LmYqdC5zKnQuZCxlfHxufWZ1bmN0aW9uIF96KHQsZSxuKXt2YXIgcixzO3JldHVybiByPW5ldyBRcnQoZSxuKSxzPW5ldyB6dCx0LmI9bHVlKHQsdC5iLHIscykscy5ifHwrK3QuYyx0LmIuYj0hMSxzLmR9ZnVuY3Rpb24geXJlKHQsZSxuKXt2YXIgcixzLG8saDtmb3IoaD10XyhlLG4pLG89MCxzPWguS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTEpLGtpKHQuYyxyLHBlKG8rKykpfWZ1bmN0aW9uIFhwKHQpe3ZhciBlLG47Zm9yKG49bmV3IFModC5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDgxKSxlLmcuYz0tZS5nLmMtZS5nLmI7eXEodCl9ZnVuY3Rpb24gUXAodCl7dmFyIGUsbjtmb3Iobj1uZXcgUyh0LmEuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksNTcpLGUuZC5jPS1lLmQuYy1lLmQuYjtQNXQodCl9ZnVuY3Rpb24gSXl0KHQpe3ZhciBlO3JldHVybighdC5jfHwhKHQuQmImMSkmJnQuYy5EYiY2NCkmJihlPURoKHQpLF90KGUsODgpJiYodC5jPXUoZSwyNikpKSx0LmN9ZnVuY3Rpb24gQWl0KHQpe3ZhciBlLG4scjtlPX50LmwrMSZobCxuPX50Lm0rKGU9PTA/MTowKSZobCxyPX50LmgrKGU9PTAmJm49PTA/MTowKSZaMCx0Lmw9ZSx0Lm09bix0Lmg9cn1mdW5jdGlvbiBZbyh0KXt2YXIgZSxuLHIscyxvO2ZvcihlPW5ldyBDYSxyPXQscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sZS5hKz1uLmEsZS5iKz1uLmI7cmV0dXJuIGV9ZnVuY3Rpb24gT3l0KHQsZSl7d24oKTt2YXIgbixyLHMsbyxoO2ZvcihoPSExLHI9ZSxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxoPWh8dC5GYyhuKTtyZXR1cm4gaH1mdW5jdGlvbiBzNCh0KXtrNCgpO3ZhciBlLG47Zm9yKG49LTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MixlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXT5uJiYobj10W2VdKTtyZXR1cm4gbn1mdW5jdGlvbiB4cmUodCxlLG4pe3ZhciByO3JldHVybiByPW5ldyBoZSxSNXQodCxlLHIsKHZlKCksSG4pLCEwLCExKSxSNXQodCxuLHIsQm4sITEsITEpLHJ9ZnVuY3Rpb24gTGl0KHQsZSxuKXt2YXIgcixzLG8saDtyZXR1cm4gbz1udWxsLGg9ZSxzPUt3KGgsImxhYmVscyIpLHI9bmV3IHpHdCh0LG4pLG89KFpibihyLmEsci5iLHMpLHMpLG99ZnVuY3Rpb24gRnVuKHQsZSxuLHIpe3ZhciBzO3JldHVybiBzPUM1dCh0LGUsbixyKSwhcyYmKHM9TmxuKHQsbixyKSxzJiYhQzQodCxlLHMpKT9udWxsOnN9ZnVuY3Rpb24gTnVuKHQsZSxuLHIpe3ZhciBzO3JldHVybiBzPV81dCh0LGUsbixyKSwhcyYmKHM9VWl0KHQsbixyKSxzJiYhQzQodCxlLHMpKT9udWxsOnN9ZnVuY3Rpb24ga3JlKHQsZSl7dmFyIG47Zm9yKG49MDtuPHQuYS5hLmxlbmd0aDtuKyspaWYoIXUodkt0KHQuYSxuKSwxNjkpLkxiKGUpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEJ1bih0LGUsbil7aWYoTHIoZSksbi5PYigpKWZvcihpMnQoZSxsWHQobi5QYigpKSk7bi5PYigpOylpMnQoZSx0LmEpLGkydChlLGxYdChuLlBiKCkpKTtyZXR1cm4gZX1mdW5jdGlvbiBQeXQodCl7d24oKTt2YXIgZSxuLHI7Zm9yKHI9MSxuPXQuS2MoKTtuLk9iKCk7KWU9bi5QYigpLHI9MzEqcisoZSE9bnVsbD9IaShlKTowKSxyPXJ8MDtyZXR1cm4gcn1mdW5jdGlvbiBSdW4odCxlLG4scixzKXt2YXIgbztyZXR1cm4gbz12NXQodCxlKSxuJiZBaXQobykscyYmKHQ9eTFuKHQsZSkscj9oYj1yRSh0KTpoYj1pdSh0LmwsdC5tLHQuaCkpLG99ZnVuY3Rpb24ganVuKHQsZSl7dmFyIG47dHJ5e2UuVmQoKX1jYXRjaChyKXtpZihyPVdpKHIpLF90KHIsNzgpKW49cix0LmNbdC5jLmxlbmd0aF09bjtlbHNlIHRocm93IGl0KHIpfX1mdW5jdGlvbiBFcmUodCxlLG4pe3ZhciByLHM7cmV0dXJuIF90KGUsMTQ0KSYmbj8ocj11KGUsMTQ0KSxzPW4sdC5hW3IuYl1bcy5iXSt0LmFbcy5iXVtyLmJdKTowfWZ1bmN0aW9uIEZ5dCh0LGUpe3N3aXRjaChlKXtjYXNlIDc6cmV0dXJuISF0LmUmJnQuZS5pIT0wO2Nhc2UgODpyZXR1cm4hIXQuZCYmdC5kLmkhPTB9cmV0dXJuIG0zdCh0LGUpfWZ1bmN0aW9uICR1bih0LGUpe3N3aXRjaChlLmcpe2Nhc2UgMDpfdCh0LmIsNjMxKXx8KHQuYj1uZXcgV25lKTticmVhaztjYXNlIDE6X3QodC5iLDYzMil8fCh0LmI9bmV3IFlZdCl9fWZ1bmN0aW9uIHp1bih0LGUpe2Zvcig7dC5nPT1udWxsJiYhdC5jP0h2dCh0KTp0Lmc9PW51bGx8fHQuaSE9MCYmdSh0LmdbdC5pLTFdLDQ3KS5PYigpOylEWGUoZSx3cSh0KSl9ZnVuY3Rpb24gVHJlKHQsZSxuKXt0Lmc9VXN0KHQsZSwodmUoKSxIbiksdC5iKSx0LmQ9VXN0KHQsbixIbix0LmIpLCEodC5nLmM9PTB8fHQuZC5jPT0wKSYmSGFlKHQpfWZ1bmN0aW9uIENyZSh0LGUsbil7dC5nPVVzdCh0LGUsKHZlKCksQm4pLHQuaiksdC5kPVVzdCh0LG4sQm4sdC5qKSwhKHQuZy5jPT0wfHx0LmQuYz09MCkmJkhhZSh0KX1mdW5jdGlvbiBxdW4odCxlLG4pe3JldHVybiFxQyhSaShuZXcgVG4obnVsbCxuZXcgX24odC5jLDE2KSksbmV3IFp0KG5ldyBfR3QoZSxuKSkpKS5zZCgoUWIoKSxvNykpfWZ1bmN0aW9uIE1pdCh0KXt2YXIgZTtyZXR1cm4gVnAodCksZT1uZXcgVGksdC5hLnNkKGUpPyh3OCgpLG5ldyBDUihPbihlLmEpKSk6KHc4KCksdzgoKSxpVil9ZnVuY3Rpb24gTnl0KHQpe3ZhciBlO3JldHVybiB0LmI8PTA/ITE6KGU9aGQoIk1MeWRoSG1zU0RrSyIsQ3Uod2EodC5jLDApKSksZT4xfHxlPj0wJiZ0LmI8Myl9ZnVuY3Rpb24gcUQodCl7dmFyIGUsbixyO2ZvcihlPW5ldyBQdSxyPWVpKHQsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDgpLG04KGUsMCxuZXcgeG8obikpO3JldHVybiBlfWZ1bmN0aW9uIGcyKHQpe3ZhciBlLG47Zm9yKG49bmV3IFModC5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDgxKSxlLmYuJGIoKTtiS2UodC5iLHQpLFFjZSh0KX1mdW5jdGlvbiBIaSh0KXtyZXR1cm4gcmEodCk/VmcodCk6Qm0odCk/cDgodCk6Tm0odCk/KE9uKHQpLHQ/MTIzMToxMjM3KTppdnQodCk/dC5IYigpOkp3dCh0KT9Qdyh0KTpCdnQodCl9ZnVuY3Rpb24gb2wodCl7cmV0dXJuIHJhKHQpP0FlOkJtKHQpP2xhOk5tKHQpP1JzOml2dCh0KXx8Snd0KHQpP3QuZ206dC5nbXx8QXJyYXkuaXNBcnJheSh0KSYmY3QoT2dlLDEpfHxPZ2V9ZnVuY3Rpb24gX3JlKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMDpyZXR1cm4gbmV3IHhaO2RlZmF1bHQ6dGhyb3cgaXQobmV3IEZuKF9IKyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gU3JlKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMDpyZXR1cm4gbmV3IHlaO2RlZmF1bHQ6dGhyb3cgaXQobmV3IEZuKF9IKyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gQnl0KHQsZSxuKXtzd2l0Y2goZSl7Y2FzZSAwOiF0Lm8mJih0Lm89bmV3IF9sKChKYygpLFNiKSxIdix0LDApKSx4eih0Lm8sbik7cmV0dXJufVhzdCh0LGUsbil9ZnVuY3Rpb24gRGl0KHQsZSxuKXt0aGlzLmc9dCx0aGlzLmU9bmV3IENhLHRoaXMuZj1uZXcgQ2EsdGhpcy5kPW5ldyBaaSx0aGlzLmI9bmV3IFppLHRoaXMuYT1lLHRoaXMuYz1ufWZ1bmN0aW9uIElpdCh0LGUsbixyKXt0aGlzLmI9bmV3IGhlLHRoaXMubj1uZXcgaGUsdGhpcy5pPXIsdGhpcy5qPW4sdGhpcy5zPXQsdGhpcy50PWUsdGhpcy5yPTAsdGhpcy5kPTB9ZnVuY3Rpb24gcDIodCl7dGhpcy5lPXQsdGhpcy5kPW5ldyBobXQodGhpcy5lLmcpLHRoaXMuYT10aGlzLmQsdGhpcy5iPXh5dCh0aGlzKSx0aGlzLiRtb2RDb3VudD10LiRtb2RDb3VudH1mdW5jdGlvbiBIdW4odCl7Zm9yKDshdC5kfHwhdC5kLk9iKCk7KWlmKHQuYiYmIUJDKHQuYikpdC5kPXUoSHgodC5iKSw0Nyk7ZWxzZSByZXR1cm4gbnVsbDtyZXR1cm4gdC5kfWZ1bmN0aW9uIFZ1bih0KXtyZXR1cm4gbGUodC5jLChpNigpLFUzZSkpLFdtdCh0LmEsWHQoeWUoSWUoKG5zdCgpLHZHKSkpKSk/bmV3IFdaOm5ldyB1enQodCl9ZnVuY3Rpb24gUnl0KHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMTpyZXR1cm4gRzFlO2RlZmF1bHQ6Y2FzZSAyOnJldHVybiAwO2Nhc2UgMzpyZXR1cm4gem90O2Nhc2UgNDpyZXR1cm4gVTFlfX1mdW5jdGlvbiBHdW4oKXtnaSgpO3ZhciB0O3JldHVybiBIZnR8fCh0PXRaZShpYigiTSIsITApKSx0PVlqKGliKCJNIiwhMSksdCksSGZ0PXQsSGZ0KX1mdW5jdGlvbiBqeXQodCxlKXt2YXIgbixyLHM7Zm9yKHM9dC5iO3M7KXtpZihuPXQuYS51ZShlLHMuZCksbj09MClyZXR1cm4gcztyPW48MD8wOjEscz1zLmFbcl19cmV0dXJuIG51bGx9ZnVuY3Rpb24gVXVuKHQsZSxuKXt2YXIgcixzO3I9KE5uKCksISFhMnQobikpLHM9dShlLnhjKHIpLDE1KSxzfHwocz1uZXcgaGUsZS56YyhyLHMpKSxzLkZjKG4pfWZ1bmN0aW9uIFd1bih0LGUpe3ZhciBuLHI7cmV0dXJuIG49dShxZSh0LChzYXQoKSxITykpLDE5KS5hLHI9dShxZShlLEhPKSwxOSkuYSxuPT1yfHxuPHI/LTE6bj5yPzE6MH1mdW5jdGlvbiAkeXQodCxlKXtyZXR1cm4gVWNlKHQsZSk/KGxuKHQuYix1KFEoZSwoYWUoKSxCeSkpLDIxKSxlKSxyaSh0LmEsZSksITApOiExfWZ1bmN0aW9uIFl1bih0KXt2YXIgZSxuO2U9dShRKHQsKGFlKCksSnUpKSwxMCksZSYmKG49ZS5jLG11KG4uYSxlKSxuLmEuYy5sZW5ndGg9PTAmJm11KE5hKGUpLmIsbikpfWZ1bmN0aW9uIEFyZSh0KXtyZXR1cm4gJDE/TnQoWmdlLE1mZSw1NzIsMCwwLDEpOnUoUDEodC5hLE50KFpnZSxNZmUsNTcyLHQuYS5jLmxlbmd0aCwwLDEpKSw4NDIpfWZ1bmN0aW9uIEt1bih0LGUsbixyKXtyZXR1cm4gYyQoKSxuZXcgdWV0KGx0KGN0KFAyLDEpLEhxLDQyLDAsWyhrc3QodCxlKSxuZXcgTHcodCxlKSksKGtzdChuLHIpLG5ldyBMdyhuLHIpKV0pKX1mdW5jdGlvbiBhNCh0LGUsbil7dmFyIHIscztyZXR1cm4gcz0ocj1uZXcgaWV0LHIpLGJvKHMsZSxuKSxEcigoIXQucSYmKHQucT1uZXcgZmUoV2gsdCwxMSwxMCkpLHQucSkscyksc31mdW5jdGlvbiBPaXQodCl7dmFyIGUsbixyLHM7Zm9yKHM9eFhlKFo0ZSx0KSxuPXMubGVuZ3RoLHI9TnQoQWUsZWUsMixuLDYsMSksZT0wO2U8bjsrK2UpcltlXT1zW2VdO3JldHVybiByfWZ1bmN0aW9uIG80KHQsZSl7dmFyIG4scixzLG8saDtmb3Iocj1lLHM9MCxvPXIubGVuZ3RoO3M8bzsrK3Mpbj1yW3NdLGg9bmV3IGJYdCh0KSxuLlFlKGgpLEp5bihoKTtYdSh0LmYpfWZ1bmN0aW9uIFBpdCh0LGUpe3ZhciBuO3JldHVybiBlPT09dD8hMDpfdChlLDIyNCk/KG49dShlLDIyNCkseWkodC5aYigpLG4uWmIoKSkpOiExfWZ1bmN0aW9uIHp5dCh0LGUpe3ZhciBuO2UqMisxPj10LmIuYy5sZW5ndGh8fCh6eXQodCwyKmUrMSksbj0yKmUrMixuPHQuYi5jLmxlbmd0aCYmenl0KHQsbiksQW9lKHQsZSkpfWZ1bmN0aW9uIExyZSh0LGUsbil7dmFyIHIsczt0aGlzLmc9dCx0aGlzLmM9ZSx0aGlzLmE9dGhpcyx0aGlzLmQ9dGhpcyxzPWhuZShuKSxyPU50KElnZSxQSSwzMzAscywwLDEpLHRoaXMuYj1yfWZ1bmN0aW9uIHF5dCh0LGUsbil7dmFyIHI7Zm9yKHI9bi0xO3I+PTAmJnRbcl09PT1lW3JdO3ItLSk7cmV0dXJuIHI8MD8wOkNldChOcyh0W3JdLGNvKSxOcyhlW3JdLGNvKSk/LTE6MX1mdW5jdGlvbiBYdW4odCxlKXt2YXIgbixyO2ZvcihyPWVpKHQsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDIxNCksbi5lLmxlbmd0aD4wJiYoZS50ZChuKSxuLmkmJlZsbihuKSl9ZnVuY3Rpb24gRml0KHQsZSl7dmFyIG4scjtyZXR1cm4gcj11KERuKHQuYSw0KSwxMjYpLG49TnQoRmZ0LGx1dCw0MTUsZSwwLDEpLHIhPW51bGwmJkRjKHIsMCxuLDAsci5sZW5ndGgpLG59ZnVuY3Rpb24gTXJlKHQsZSl7dmFyIG47cmV0dXJuIG49bmV3IGZhdCgodC5mJjI1NikhPTAsdC5pLHQuYSx0LmQsKHQuZiYxNikhPTAsdC5qLHQuZyxlKSx0LmUhPW51bGx8fChuLmM9dCksbn1mdW5jdGlvbiBRdW4odCxlKXt2YXIgbixyO2ZvcihyPXQuWmIoKS5DYygpLktjKCk7ci5PYigpOylpZihuPXUoci5QYigpLDE0KSxuLkhjKGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIE5pdCh0LGUsbixyLHMpe3ZhciBvLGg7Zm9yKGg9bjtoPD1zO2grKylmb3Iobz1lO288PXI7bysrKWlmKGY0KHQsbyxoKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBEcmUodCxlLG4pe3ZhciByLHMsbyxoO2ZvcihPbihuKSxoPSExLG89dC5aYyhlKSxzPW4uS2MoKTtzLk9iKCk7KXI9cy5QYigpLG8uUmIociksaD0hMDtyZXR1cm4gaH1mdW5jdGlvbiBadW4odCxlKXt2YXIgbjtyZXR1cm4gdD09PWU/ITA6X3QoZSw4Myk/KG49dShlLDgzKSxINHQoUncodCksbi52YygpKSk6ITF9ZnVuY3Rpb24gSXJlKHQsZSxuKXt2YXIgcixzO2ZvcihzPW4uS2MoKTtzLk9iKCk7KWlmKHI9dShzLlBiKCksNDIpLHQucmUoZSxyLmRkKCkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIE9yZSh0LGUsbil7cmV0dXJuIHQuZFtlLnBdW24ucF18fChZZm4odCxlLG4pLHQuZFtlLnBdW24ucF09ITAsdC5kW24ucF1bZS5wXT0hMCksdC5hW2UucF1bbi5wXX1mdW5jdGlvbiBzRSh0LGUpe2lmKCF0LmFpKCkmJmU9PW51bGwpdGhyb3cgaXQobmV3IEZuKCJUaGUgJ25vIG51bGwnIGNvbnN0cmFpbnQgaXMgdmlvbGF0ZWQiKSk7cmV0dXJuIGV9ZnVuY3Rpb24gYUUodCxlKXt0LkQ9PW51bGwmJnQuQiE9bnVsbCYmKHQuRD10LkIsdC5CPW51bGwpLGdpdCh0LGU9PW51bGw/bnVsbDooT24oZSksZSkpLHQuQyYmdC55ayhudWxsKX1mdW5jdGlvbiBKdW4odCxlKXt2YXIgbjtyZXR1cm4hdHx8dD09ZXx8IVVzKGUsKGFlKCksUHYpKT8hMToobj11KFEoZSwoYWUoKSxQdikpLDEwKSxuIT10KX1mdW5jdGlvbiBCaXQodCl7c3dpdGNoKHQuaSl7Y2FzZSAyOnJldHVybiEwO2Nhc2UgMTpyZXR1cm4hMTtjYXNlLTE6Kyt0LmM7ZGVmYXVsdDpyZXR1cm4gdC5wbCgpfX1mdW5jdGlvbiBQcmUodCl7c3dpdGNoKHQuaSl7Y2FzZS0yOnJldHVybiEwO2Nhc2UtMTpyZXR1cm4hMTtjYXNlIDE6LS10LmM7ZGVmYXVsdDpyZXR1cm4gdC5xbCgpfX1mdW5jdGlvbiBGcmUodCl7VFF0LmNhbGwodGhpcywiVGhlIGdpdmVuIHN0cmluZyBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0IGZvciBpbmRpdmlkdWFsIHNwYWNpbmdzLiIsdCl9ZnVuY3Rpb24gU2woKXtTbD1aLFFsPW5ldyB1aigiRUxLIiwwKSxxQXQ9bmV3IHVqKCJKU09OIiwxKSx6QXQ9bmV3IHVqKCJET1QiLDIpLEhBdD1uZXcgdWooIlNWRyIsMyl9ZnVuY3Rpb24gSEQoKXtIRD1aLE5HPW5ldyBZZXQoSjAsMCksa190PW5ldyBZZXQoIlJBRElBTF9DT01QQUNUSU9OIiwxKSxFX3Q9bmV3IFlldCgiV0VER0VfQ09NUEFDVElPTiIsMil9ZnVuY3Rpb24gTzEoKXtPMT1aLEJFdD1uZXcgX2V0KCJDT05DVVJSRU5UIiwwKSxVbD1uZXcgX2V0KCJJREVOVElUWV9GSU5JU0giLDEpLEl5PW5ldyBfZXQoIlVOT1JERVJFRCIsMil9ZnVuY3Rpb24gUml0KCl7Uml0PVosZjd0PShqUigpLEt1dCksaDd0PW5ldyBtbihvNnQsZjd0KSxYcGU9bmV3IFZpKGM2dCksUXBlPW5ldyBWaSh1NnQpLFpwZT1uZXcgVmkobDZ0KX1mdW5jdGlvbiBvRSgpe29FPVosQ1R0PW5ldyBKNSxfVHQ9bmV3IFpLLGwyZT1uZXcgT0wsdTJlPW5ldyBKSyxjMmU9bmV3IHRYLFRUdD0oT24oYzJlKSxuZXcgZ24pfWZ1bmN0aW9uIGNFKCl7Y0U9WixBaHQ9bmV3IEhldCgiQ09OU0VSVkFUSVZFIiwwKSxLOXQ9bmV3IEhldCgiQ09OU0VSVkFUSVZFX1NPRlQiLDEpLFBTPW5ldyBIZXQoIlNMT1BQWSIsMil9ZnVuY3Rpb24gU3ooKXtTej1aLE1BdD1uZXcgT3coMTUpLFQ0ZT1uZXcgZW8oKHVpKCksVTIpLE1BdCksUVM9WTYsX0F0PW80ZSxTQXQ9RzIsTEF0PWM1LEFBdD1YR31mdW5jdGlvbiBqaXQodCxlLG4pe3ZhciByLHMsbztmb3Iocj1uZXcgWmksbz1laShuLDApO28uYiE9by5kLmM7KXM9dSh0aShvKSw4KSxyaShyLG5ldyB4byhzKSk7RHJlKHQsZSxyKX1mdW5jdGlvbiB0bG4odCl7dmFyIGUsbixyO2ZvcihlPTAscj1OdChXcyxlZSw4LHQuYiwwLDEpLG49ZWkodCwwKTtuLmIhPW4uZC5jOylyW2UrK109dSh0aShuKSw4KTtyZXR1cm4gcn1mdW5jdGlvbiBIeXQodCl7dmFyIGU7cmV0dXJuIGU9KCF0LmEmJih0LmE9bmV3IGZlKGFnLHQsOSw1KSksdC5hKSxlLmkhPTA/dlhlKHUoQXQoZSwwKSw2NzgpKTpudWxsfWZ1bmN0aW9uIGVsbih0LGUpe3ZhciBuO3JldHVybiBuPVBhKHQsZSksQ2V0KERydCh0LGUpLDApfFBYZShEcnQodCxuKSwwKT9uOlBhKHFxLERydChWbShuLDYzKSwxKSl9ZnVuY3Rpb24gbmxuKHQsZSl7dmFyIG47bj1JZSgobnN0KCksdkcpKSE9bnVsbCYmZS53ZygpIT1udWxsP1h0KHllKGUud2coKSkpL1h0KHllKEllKHZHKSkpOjEsa2kodC5iLGUsbil9ZnVuY3Rpb24gcmxuKHQsZSl7dmFyIG4scjtyZXR1cm4gbj11KHQuZC5CYyhlKSwxNCksbj8ocj10LmUuaGMoKSxyLkdjKG4pLHQuZS5kLT1uLmdjKCksbi4kYigpLHIpOm51bGx9ZnVuY3Rpb24gVnl0KHQsZSl7dmFyIG4scjtpZihyPXQuY1tlXSxyIT0wKWZvcih0LmNbZV09MCx0LmQtPXIsbj1lKzE7bjx0LmEubGVuZ3RoOyl0LmFbbl0tPXIsbis9biYtbn1mdW5jdGlvbiBOcmUodCl7dmFyIGU7aWYoZT10LmEuYy5sZW5ndGgsZT4wKXJldHVybiBUOChlLTEsdC5hLmMubGVuZ3RoKSxGZyh0LmEsZS0xKTt0aHJvdyBpdChuZXcgY3F0KX1mdW5jdGlvbiBpbG4odCxlLG4pe2lmKGU8MCl0aHJvdyBpdChuZXcgeW8oc2RlK2UpKTtlPHQuai5jLmxlbmd0aD9jaCh0LmosZSxuKTooR1p0KHQsZSksbGUodC5qLG4pKX1mdW5jdGlvbiBCcmUodCxlLG4pe2lmKHQ+ZSl0aHJvdyBpdChuZXcgRm4oV3ErdCtEZmUrZSkpO2lmKHQ8MHx8ZT5uKXRocm93IGl0KG5ldyBpYnQoV3ErdCtZeHQrZStVeHQrbikpfWZ1bmN0aW9uIFJyZSh0KXtpZighdC5hfHwhKHQuYS5pJjgpKXRocm93IGl0KG5ldyBObygiRW51bWVyYXRpb24gY2xhc3MgZXhwZWN0ZWQgZm9yIGxheW91dCBvcHRpb24gIit0LmYpKX1mdW5jdGlvbiBpeSh0KXt2YXIgZTsrK3Quaix0Lmk9PTA/dC5nPW51bGw6dC5pPHQuZy5sZW5ndGgmJihlPXQuZyx0Lmc9dC5yaSh0LmkpLERjKGUsMCx0LmcsMCx0LmkpKX1mdW5jdGlvbiBzbG4odCxlKXt2YXIgbixyO2ZvcihuPXQuYS5sZW5ndGgtMSx0LmM9dC5jLTEmbjtlIT10LmM7KXI9ZSsxJm4sdHModC5hLGUsdC5hW3JdKSxlPXI7dHModC5hLHQuYyxudWxsKX1mdW5jdGlvbiBhbG4odCxlKXt2YXIgbixyO2ZvcihuPXQuYS5sZW5ndGgtMTtlIT10LmI7KXI9ZS0xJm4sdHModC5hLGUsdC5hW3JdKSxlPXI7dHModC5hLHQuYixudWxsKSx0LmI9dC5iKzEmbn1mdW5jdGlvbiBHeXQodCxlLG4pe3ZhciByLHM7cmV0dXJuIEttKGUsdC5jLmxlbmd0aCkscj1uLlBjKCkscz1yLmxlbmd0aCxzPT0wPyExOihQd3QodC5jLGUsciksITApfWZ1bmN0aW9uIG9sbih0KXt2YXIgZSxuO2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7Zm9yKGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspaWYoIXRLdCh0W2VdKSlyZXR1cm4gdFtlXTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBqcmUodCxlLG4pe3ZhciByLHMsbyxoO2ZvcihzPW4sbz0wLGg9cy5sZW5ndGg7bzxoOysrbylpZihyPXNbb10sdC5iLnJlKGUsci5jZCgpKSlyZXR1cm4gcjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBBeih0KXt2YXIgZSxuLHIscyxvO2ZvcihvPTEsbj10LHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLG89MzEqbysoZSE9bnVsbD9IaShlKTowKSxvPW98MDtyZXR1cm4gb31mdW5jdGlvbiBXcih0KXt2YXIgZSxuLHIscyxvO2ZvcihlPXt9LHI9dCxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxlWyI6Iisobi5mIT1udWxsP24uZjoiIituLmcpXT1uO3JldHVybiBlfWZ1bmN0aW9uIGNsbih0KXt2YXIgZTtmb3IoTHIodCkseHd0KCEwLCJudW1iZXJUb0FkdmFuY2UgbXVzdCBiZSBub25uZWdhdGl2ZSIpLGU9MDtlPDAmJnpyKHQpO2UrKylNcih0KTtyZXR1cm4gZX1mdW5jdGlvbiAkcmUodCl7dmFyIGUsbixyO2ZvcihyPTAsbj1uZXcgYXIobHIodC5hLktjKCksbmV3IHopKTt6cihuKTspZT11KE1yKG4pLDE3KSxlLmMuaT09ZS5kLml8fCsrcjtyZXR1cm4gcn1mdW5jdGlvbiB6cmUodCxlKXt2YXIgbixyLHM7bj10LHM9MDtkb3tpZihuPT1lKXJldHVybiBzO2lmKHI9bi5lLCFyKXRocm93IGl0KG5ldyBnTSk7bj1OYShyKSwrK3N9d2hpbGUoITApfWZ1bmN0aW9uIHFyZSh0LGUpe3ZhciBuLHIscztmb3Iocz1lLXQuZixyPW5ldyBTKHQuZCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNDQzKSxQaWUobixuLmUsbi5mK3MpO3QuZj1lfWZ1bmN0aW9uICRpdCh0LGUsbil7cmV0dXJuIGIuTWF0aC5hYnMoZS10KTxrSHx8Yi5NYXRoLmFicyhuLXQpPGtIPyEwOmUtdD5rSD90LW4+a0g6bi10PmtIfWZ1bmN0aW9uIHppdCh0LGUpe3JldHVybiF0fHxlJiYhdC5qfHxfdCh0LDEyNCkmJnUodCwxMjQpLmEuYj09MD8wOnQuUmUoKX1mdW5jdGlvbiBMeih0LGUpe3JldHVybiF0fHxlJiYhdC5rfHxfdCh0LDEyNCkmJnUodCwxMjQpLmEuYT09MD8wOnQuU2UoKX1mdW5jdGlvbiBWRCh0KXtyZXR1cm4gcmIoKSx0PDA/dCE9LTE/bmV3IGozdCgtMSwtdCk6QnV0OnQ8PTEwP0NFdFtwcyh0KV06bmV3IGozdCgxLHQpfWZ1bmN0aW9uIFV5dCh0KXt0aHJvdyBfaXQoKSxpdChuZXcgZUh0KCJVbmV4cGVjdGVkIHR5cGVvZiByZXN1bHQgJyIrdCsiJzsgcGxlYXNlIHJlcG9ydCB0aGlzIGJ1ZyB0byB0aGUgR1dUIHRlYW0iKSl9ZnVuY3Rpb24gSHJlKHQpe29IdCgpLHlqKHRoaXMpLGQkKHRoaXMpLHRoaXMuZT10LG51ZSh0aGlzLHQpLHRoaXMuZz10PT1udWxsP191OiRvKHQpLHRoaXMuYT0iIix0aGlzLmI9dCx0aGlzLmE9IiJ9ZnVuY3Rpb24gV3l0KCl7dGhpcy5hPW5ldyB2Wix0aGlzLmY9bmV3IFgkdCh0aGlzKSx0aGlzLmI9bmV3IFEkdCh0aGlzKSx0aGlzLmk9bmV3IFokdCh0aGlzKSx0aGlzLmU9bmV3IEokdCh0aGlzKX1mdW5jdGlvbiBWcmUoKXtkS2UuY2FsbCh0aGlzLG5ldyBNbXQodHkoMTYpKSksamwoMixmZmUpLHRoaXMuYj0yLHRoaXMuYT1uZXcgTHZ0KG51bGwsbnVsbCwwLG51bGwpLGRNKHRoaXMuYSx0aGlzLmEpfWZ1bmN0aW9uIFo5KCl7Wjk9Wix2aHQ9bmV3IGpldCgiRFVNTVlfTk9ERV9PVkVSIiwwKSxPOXQ9bmV3IGpldCgiRFVNTVlfTk9ERV9VTkRFUiIsMSkseUc9bmV3IGpldCgiRVFVQUwiLDIpfWZ1bmN0aW9uIHFpdCgpe3FpdD1aLG9sdD1fUXQobHQoY3QoWFMsMSksb2UsMTAzLDAsWyhhbygpLHpoKSxDZl0pKSxjbHQ9X1F0KGx0KGN0KFhTLDEpLG9lLDEwMywwLFtyZyxuZ10pKX1mdW5jdGlvbiBIaXQodCl7cmV0dXJuKHZlKCksQXUpLkhjKHQuaik/WHQoeWUoUSh0LChhZSgpLGs3KSkpKTpZbyhsdChjdChXcywxKSxlZSw4LDAsW3QuaS5uLHQubix0LmFdKSkuYn1mdW5jdGlvbiB1bG4odCl7dmFyIGUsbixyLHM7Zm9yKHI9dC5iLmEsbj1yLmEuZWMoKS5LYygpO24uT2IoKTspZT11KG4uUGIoKSw1NjEpLHM9bmV3IE5jZShlLHQuZSx0LmYpLGxlKHQuZyxzKX1mdW5jdGlvbiBiMih0LGUpe3ZhciBuLHIscztyPXQubmsoZSxudWxsKSxzPW51bGwsZSYmKHM9KGM4KCksbj1uZXcgeHcsbiksSDgocyx0LnIpKSxyPUYxKHQscyxyKSxyJiZyLkZpKCl9ZnVuY3Rpb24gbGxuKHQsZSl7dmFyIG4scjtmb3Iocj11bCh0LmQsMSkhPTAsbj0hMDtuOyluPSExLG49ZS5jLlRmKGUuZSxyKSxuPW58eUkodCxlLHIsITEpLHI9IXI7aHl0KHQpfWZ1bmN0aW9uIFl5dCh0LGUpe3ZhciBuLHIscztyZXR1cm4gcj0hMSxuPWUucS5kLGUuZDx0LmImJihzPVdjZShlLnEsdC5iKSxlLnEuZD5zJiYoYmFlKGUucSxzKSxyPW4hPWUucS5kKSkscn1mdW5jdGlvbiBHcmUodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrO3JldHVybiB2PWUuaSxrPWUuaixyPXQuZixzPXIuaSxvPXIuaixoPXYtcyxkPWstbyxuPWIuTWF0aC5zcXJ0KGgqaCtkKmQpLG59ZnVuY3Rpb24gS3l0KHQsZSl7dmFyIG4scjtyZXR1cm4gcj1Ieih0KSxyfHwobj0oRmF0KCksd29lKGUpKSxyPW5ldyBKenQobiksRHIoci5WaygpLHQpKSxyfWZ1bmN0aW9uIEdEKHQsZSl7dmFyIG4scjtyZXR1cm4gbj11KHQuYy5CYyhlKSwxNCksbj8ocj10LmhjKCksci5HYyhuKSx0LmQtPW4uZ2MoKSxuLiRiKCksdC5tYyhyKSk6dC5qYygpfWZ1bmN0aW9uIFVyZSh0LGUpe3ZhciBuO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspaWYodD09KFJyKG4sZS5sZW5ndGgpLGUuY2hhckNvZGVBdChuKSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gV3JlKHQsZSl7dmFyIG47Zm9yKG49MDtuPGUubGVuZ3RoO24rKylpZih0PT0oUnIobixlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG4pKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBobG4odCl7dmFyIGUsbjtpZih0PT1udWxsKXJldHVybiExO2ZvcihlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKWlmKCF0S3QodFtlXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gWXJlKHQpe3ZhciBlO2lmKHQuYyE9MClyZXR1cm4gdC5jO2ZvcihlPTA7ZTx0LmEubGVuZ3RoO2UrKyl0LmM9dC5jKjMzKyh0LmFbZV0mLTEpO3JldHVybiB0LmM9dC5jKnQuZSx0LmN9ZnVuY3Rpb24gTXoodCl7dmFyIGU7cmV0dXJuIFpuKHQuYSE9dC5iKSxlPXQuZC5hW3QuYV0sVFd0KHQuYj09dC5kLmMmJmUhPW51bGwpLHQuYz10LmEsdC5hPXQuYSsxJnQuZC5hLmxlbmd0aC0xLGV9ZnVuY3Rpb24gZmxuKHQpe3ZhciBlO2lmKCEodC5jLmM8MD90LmE+PXQuYy5iOnQuYTw9dC5jLmIpKXRocm93IGl0KG5ldyBsYyk7cmV0dXJuIGU9dC5hLHQuYSs9dC5jLmMsKyt0LmIscGUoZSl9ZnVuY3Rpb24gZGxuKHQpe3ZhciBlO3JldHVybiBlPW5ldyBDZWUodCksaEQodC5hLFdiZSxuZXcgeWwobHQoY3QobU8sMSksRGUsMzY5LDAsW2VdKSkpLGUuZCYmbGUoZS5mLGUuZCksZS5mfWZ1bmN0aW9uIFZpdCh0KXt2YXIgZTtyZXR1cm4gZT1uZXcgYjJ0KHQuYSksTW8oZSx0KSxKdChlLChhZSgpLF9pKSx0KSxlLm8uYT10LmcsZS5vLmI9dC5mLGUubi5hPXQuaSxlLm4uYj10LmosZX1mdW5jdGlvbiBnbG4odCxlLG4scil7dmFyIHMsbztmb3Iobz10LktjKCk7by5PYigpOylzPXUoby5QYigpLDcwKSxzLm4uYT1lLmErKHIuYS1zLm8uYSkvMixzLm4uYj1lLmIsZS5iKz1zLm8uYitufWZ1bmN0aW9uIHBsbih0LGUsbil7dmFyIHIscztmb3Iocz1lLmEuYS5lYygpLktjKCk7cy5PYigpOylpZihyPXUocy5QYigpLDU3KSxzUXQodCxyLG4pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGJsbih0KXt2YXIgZSxuO2ZvcihuPW5ldyBTKHQucik7bi5hPG4uYy5jLmxlbmd0aDspaWYoZT11KEoobiksMTApLHQubltlLnBdPD0wKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIEtyZSh0KXt2YXIgZSxuLHIscztmb3Iocz1uZXcgSHMscj1uZXcgUyh0KTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwzMyksZT1Ddm4obiksVWEocyxlKTtyZXR1cm4gc31mdW5jdGlvbiB3bG4odCl7dmFyIGU7cmV0dXJuIGU9cGooX21lKSx1KFEodCwoYWUoKSxWYykpLDIxKS5IYygob28oKSx5NykpJiZiaShlLChXYSgpLGN1KSwocm8oKSxJVikpLGV9ZnVuY3Rpb24gdmxuKHQsZSxuKXt2YXIgcjtyPW5ldyB0Y2UodCxlKSxsbih0LnIsZS5IZigpLHIpLG4mJiFTOSh0LnUpJiYoci5jPW5ldyB4UXQodC5kKSx4dShlLndmKCksbmV3IHZuKHIpKSl9ZnVuY3Rpb24geWModCxlKXt2YXIgbjtyZXR1cm4gQm8odCkmJkJvKGUpJiYobj10LWUsIWlzTmFOKG4pKT9uOnU0dChCbyh0KT9MaCh0KTp0LEJvKGUpP0xoKGUpOmUpfWZ1bmN0aW9uIG1sbih0LGUpe3JldHVybiBlPHQubGVuZ3RoJiYoUnIoZSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGUpIT02MykmJihScihlLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZSkhPTM1KX1mdW5jdGlvbiBYcmUodCxlLG4scil7dmFyIHMsbzt0LmE9ZSxvPXI/MDoxLHQuZj0ocz1uZXcgSmFlKHQuYyx0LmEsbixvKSxuZXcgTXVlKG4sdC5hLHMsdC5lLHQuYix0LmM9PShldigpLEZTKSkpfWZ1bmN0aW9uIFh5dCh0LGUsbil7dmFyIHIscztyZXR1cm4gcz10LmEsdC5hPWUsdC5EYiY0JiYhKHQuRGImMSkmJihyPW5ldyBKcyh0LDEsMSxzLGUpLG4/bi5FaShyKTpuPXIpLG59ZnVuY3Rpb24gUXJlKHQsZSxuKXt2YXIgcixzO3JldHVybiBzPXQuYix0LmI9ZSx0LkRiJjQmJiEodC5EYiYxKSYmKHI9bmV3IEpzKHQsMSwzLHMsZSksbj9uLkVpKHIpOm49ciksbn1mdW5jdGlvbiBacmUodCxlLG4pe3ZhciByLHM7cmV0dXJuIHM9dC5mLHQuZj1lLHQuRGImNCYmISh0LkRiJjEpJiYocj1uZXcgSnModCwxLDAscyxlKSxuP24uRWkocik6bj1yKSxufWZ1bmN0aW9uIFpwKHQsZSl7dmFyIG4scixzLG87cmV0dXJuIG89KHM9dD9Ieih0KTpudWxsLEVvZSgocj1lLHMmJnMuWGsoKSxyKSkpLG89PWUmJihuPUh6KHQpLG4mJm4uWGsoKSksb31mdW5jdGlvbiBReXQodCxlKXt2YXIgbixyLHM7Zm9yKHM9MSxuPXQscj1lPj0wP2U6LWU7cj4wOylyJTI9PTA/KG4qPW4scj1yLzJ8MCk6KHMqPW4sci09MSk7cmV0dXJuIGU8MD8xL3M6c31mdW5jdGlvbiB5bG4odCxlKXt2YXIgbixyLHM7Zm9yKHM9MSxuPXQscj1lPj0wP2U6LWU7cj4wOylyJTI9PTA/KG4qPW4scj1yLzJ8MCk6KHMqPW4sci09MSk7cmV0dXJuIGU8MD8xL3M6c31mdW5jdGlvbiBKcmUodCl7dmFyIGUsbjtpZih0IT1udWxsKWZvcihuPTA7bjx0Lmxlbmd0aDsrK24pZT10W25dLGUmJih1KGUuZywzNjcpLGUuaSl9ZnVuY3Rpb24geGxuKHQpe3ZhciBlLG4scjtmb3Iocj0wLG49bmV3IFModC5hKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxODcpLHI9Yi5NYXRoLm1heChyLGUuZyk7cmV0dXJuIHJ9ZnVuY3Rpb24ga2xuKHQpe3ZhciBlLG4scjtmb3Iocj1uZXcgUyh0LmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDIxNCksZT1uLmMuUmYoKT9uLmY6bi5hLGUmJnozbihlLG4uail9ZnVuY3Rpb24gRzAoKXtHMD1aLHRVPW5ldyBKZXQoIklOSEVSSVQiLDApLHNwPW5ldyBKZXQoIklOQ0xVREVfQ0hJTERSRU4iLDEpLFpTPW5ldyBKZXQoIlNFUEFSQVRFX0NISUxEUkVOIiwyKX1mdW5jdGlvbiBaeXQodCxlKXtzd2l0Y2goZSl7Y2FzZSAxOiF0Lm4mJih0Lm49bmV3IGZlKHFvLHQsMSw3KSkseHIodC5uKTtyZXR1cm47Y2FzZSAyOkc5KHQsbnVsbCk7cmV0dXJufV95dCh0LGUpfWZ1bmN0aW9uIER6KHQpe3ZhciBlO3N3aXRjaCh0LmdjKCkpe2Nhc2UgMDpyZXR1cm4gQXV0O2Nhc2UgMTpyZXR1cm4gbmV3IFJudChMcih0LlhiKDApKSk7ZGVmYXVsdDpyZXR1cm4gZT10LG5ldyB2cnQoZSl9fWZ1bmN0aW9uIHRpZSh0KXtzd2l0Y2goZ2QoKSx0LmdjKCkpe2Nhc2UgMDpyZXR1cm4gb3J0KCksZUV0O2Nhc2UgMTpyZXR1cm4gbmV3IEF4KHQuS2MoKS5QYigpKTtkZWZhdWx0OnJldHVybiBuZXcgU2J0KHQpfX1mdW5jdGlvbiBqZyh0KXtzd2l0Y2goZ2QoKSx0LmMpe2Nhc2UgMDpyZXR1cm4gb3J0KCksZUV0O2Nhc2UgMTpyZXR1cm4gbmV3IEF4KElvZShuZXcgTXgodCkpKTtkZWZhdWx0OnJldHVybiBuZXcgSnF0KHQpfX1mdW5jdGlvbiBzeSh0LGUpe0xyKHQpO3RyeXtyZXR1cm4gdC54YyhlKX1jYXRjaChuKXtpZihuPVdpKG4pLF90KG4sMjA1KXx8X3QobiwxNzMpKXJldHVybiBudWxsO3Rocm93IGl0KG4pfX1mdW5jdGlvbiBFbG4odCxlKXtMcih0KTt0cnl7cmV0dXJuIHQuQmMoZSl9Y2F0Y2gobil7aWYobj1XaShuKSxfdChuLDIwNSl8fF90KG4sMTczKSlyZXR1cm4gbnVsbDt0aHJvdyBpdChuKX19ZnVuY3Rpb24gSnl0KHQsZSl7THIodCk7dHJ5e3JldHVybiB0LkhjKGUpfWNhdGNoKG4pe2lmKG49V2kobiksX3QobiwyMDUpfHxfdChuLDE3MykpcmV0dXJuITE7dGhyb3cgaXQobil9fWZ1bmN0aW9uIFRsbih0LGUpe0xyKHQpO3RyeXtyZXR1cm4gdC5NYyhlKX1jYXRjaChuKXtpZihuPVdpKG4pLF90KG4sMjA1KXx8X3QobiwxNzMpKXJldHVybiExO3Rocm93IGl0KG4pfX1mdW5jdGlvbiBlaWUodCxlKXtMcih0KTt0cnl7cmV0dXJuIHQuX2IoZSl9Y2F0Y2gobil7aWYobj1XaShuKSxfdChuLDIwNSl8fF90KG4sMTczKSlyZXR1cm4hMTt0aHJvdyBpdChuKX19ZnVuY3Rpb24gbmllKHQsZSl7dmFyIG47dC5hLmMubGVuZ3RoPjAmJihuPXUoTmUodC5hLHQuYS5jLmxlbmd0aC0xKSw1NzApLCR5dChuLGUpKXx8bGUodC5hLG5ldyBJSnQoZSkpfWZ1bmN0aW9uIENsbih0KXtkZigpO3ZhciBlLG47ZT10LmQuYy10LmUuYyxuPXUodC5nLDE0NSkseHUobi5iLG5ldyBBQyhlKSkseHUobi5jLG5ldyBZYihlKSksdmEobi5pLG5ldyBkUihlKSl9ZnVuY3Rpb24gcmllKHQpe3ZhciBlO3JldHVybiBlPW5ldyBNcCxlLmErPSJWZXJ0aWNhbFNlZ21lbnQgIixoYyhlLHQuZSksZS5hKz0iICIsR3IoZSxfMnQobmV3IHZldCxuZXcgUyh0LmspKSksZS5hfWZ1bmN0aW9uIF9sbih0KXt2YXIgZTtyZXR1cm4gZT11KFh3KHQuYy5jLCIiKSwyMjkpLGV8fChlPW5ldyBZeChvOChhOChuZXcgeG0sIiIpLCJPdGhlciIpKSxtMih0LmMuYywiIixlKSksZX1mdW5jdGlvbiBKOSh0KXt2YXIgZTtyZXR1cm4gdC5EYiY2ND9tZih0KTooZT1uZXcgX2gobWYodCkpLGUuYSs9IiAobmFtZTogIixnbyhlLHQuemIpLGUuYSs9IikiLGUuYSl9ZnVuY3Rpb24gdDN0KHQsZSxuKXt2YXIgcixzO3JldHVybiBzPXQuc2IsdC5zYj1lLHQuRGImNCYmISh0LkRiJjEpJiYocj1uZXcgSnModCwxLDQscyxlKSxuP24uRWkocik6bj1yKSxufWZ1bmN0aW9uIEdpdCh0LGUpe3ZhciBuLHIscztmb3Iobj0wLHM9S28odCxlKS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwxMSksbis9UShyLChhZSgpLEp1KSkhPW51bGw/MTowO3JldHVybiBufWZ1bmN0aW9uIGM0KHQsZSxuKXt2YXIgcixzLG87Zm9yKHI9MCxvPWVpKHQsMCk7by5iIT1vLmQuYyYmKHM9WHQoeWUodGkobykpKSwhKHM+bikpOylzPj1lJiYrK3I7cmV0dXJuIHJ9ZnVuY3Rpb24gU2xuKHQsZSxuKXt2YXIgcixzO3JldHVybiByPW5ldyB6MCh0LmUsMywxMyxudWxsLChzPWUuYyxzfHwoZG4oKSxXMSkpLEhnKHQsZSksITEpLG4/bi5FaShyKTpuPXIsbn1mdW5jdGlvbiBBbG4odCxlLG4pe3ZhciByLHM7cmV0dXJuIHI9bmV3IHowKHQuZSw0LDEzLChzPWUuYyxzfHwoZG4oKSxXMSkpLG51bGwsSGcodCxlKSwhMSksbj9uLkVpKHIpOm49cixufWZ1bmN0aW9uIGUzdCh0LGUsbil7dmFyIHIscztyZXR1cm4gcz10LnIsdC5yPWUsdC5EYiY0JiYhKHQuRGImMSkmJihyPW5ldyBKcyh0LDEsOCxzLHQuciksbj9uLkVpKHIpOm49ciksbn1mdW5jdGlvbiAkZyh0LGUpe3ZhciBuLHI7cmV0dXJuIG49dShlLDY3Nikscj1uLnZrKCksIXImJm4ud2socj1fdChlLDg4KT9uZXcgSkd0KHQsdShlLDI2KSk6bmV3IHladCh0LHUoZSwxNDgpKSkscn1mdW5jdGlvbiBVRCh0LGUsbil7dmFyIHI7dC5xaSh0LmkrMSkscj10Lm9pKGUsbiksZSE9dC5pJiZEYyh0LmcsZSx0LmcsZSsxLHQuaS1lKSx0cyh0LmcsZSxyKSwrK3QuaSx0LmJpKGUsbiksdC5jaSgpfWZ1bmN0aW9uIExsbih0LGUpe3ZhciBuO3JldHVybiBlLmEmJihuPWUuYS5hLmxlbmd0aCx0LmE/R3IodC5hLHQuYik6dC5hPW5ldyBPbCh0LmQpLGtadCh0LmEsZS5hLGUuZC5sZW5ndGgsbikpLHR9ZnVuY3Rpb24gTWxuKHQsZSl7dmFyIG4scixzLG87aWYoZS52aSh0LmEpLG89dShEbih0LmEsOCksMTkzNiksbyE9bnVsbClmb3Iobj1vLHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpbnVsbC5qbSgpfWZ1bmN0aW9uIFdEKHQsZSl7dmFyIG47cmV0dXJuIG49bmV3IFRpLHQuYS5zZChuKT8odzgoKSxuZXcgQ1IoT24oSnRlKHQsbi5hLGUpKSkpOihWcCh0KSx3OCgpLHc4KCksaVYpfWZ1bmN0aW9uIHRfKHQsZSl7c3dpdGNoKGUuZyl7Y2FzZSAyOmNhc2UgMTpyZXR1cm4gS28odCxlKTtjYXNlIDM6Y2FzZSA0OnJldHVybiBsMihLbyh0LGUpKX1yZXR1cm4gd24oKSx3bigpLGlvfWZ1bmN0aW9uIHlpKHQsZSl7cmV0dXJuIHJhKHQpP2huKHQsZSk6Qm0odCk/dll0KHQsZSk6Tm0odCk/KE9uKHQpLFZ0KHQpPT09VnQoZSkpOml2dCh0KT90LkZiKGUpOkp3dCh0KT9tVXQodCxlKTpYdnQodCxlKX1mdW5jdGlvbiBEbG4odCl7cmV0dXJuIHQ/dC5pJjE/dD09cGw/UnM6dD09Q3I/amE6dD09YTM/aTc6dD09YWE/bGE6dD09T2I/U3Y6dD09ZzU/QXY6dD09R3U/TTY6dVM6dDpudWxsfWZ1bmN0aW9uIElsbih0LGUsbixyLHMpe2U9PTB8fHI9PTB8fChlPT0xP3Nbcl09cTN0KHMsbixyLHRbMF0pOnI9PTE/c1tlXT1xM3Qocyx0LGUsblswXSk6UGJuKHQsbixzLGUscikpfWZ1bmN0aW9uIGlpZSh0LGUpe3ZhciBuO3QuYy5sZW5ndGghPTAmJihuPXUoUDEodCxOdChsMCxZZywxMCx0LmMubGVuZ3RoLDAsMSkpLDE5MyksYzJ0KG4sbmV3IF9rKSxHb2UobixlKSl9ZnVuY3Rpb24gc2llKHQsZSl7dmFyIG47dC5jLmxlbmd0aCE9MCYmKG49dShQMSh0LE50KGwwLFlnLDEwLHQuYy5sZW5ndGgsMCwxKSksMTkzKSxjMnQobixuZXcgemQpLEdvZShuLGUpKX1mdW5jdGlvbiBuM3QodCxlLG4scil7c3dpdGNoKGUpe2Nhc2UgMTpyZXR1cm4hdC5uJiYodC5uPW5ldyBmZShxbyx0LDEsNykpLHQubjtjYXNlIDI6cmV0dXJuIHQua31yZXR1cm4gWjN0KHQsZSxuLHIpfWZ1bmN0aW9uIGFvKCl7YW89WixoMD1uZXcgUE0oTl8sMCksQ2Y9bmV3IFBNKHg2LDEpLHpoPW5ldyBQTSh5NiwyKSxuZz1uZXcgUE0oRG90LDMpLHJnPW5ldyBQTSgiVVAiLDQpfWZ1bmN0aW9uIGl2KCl7aXY9WixxND1uZXcgSWV0KEowLDApLFA3dD1uZXcgSWV0KCJJTlNJREVfUE9SVF9TSURFX0dST1VQUyIsMSksbGx0PW5ldyBJZXQoIkZPUkNFX01PREVMX09SREVSIiwyKX1mdW5jdGlvbiBhaWUodCxlLG4pe2lmKHQ8MHx8ZT5uKXRocm93IGl0KG5ldyB5byhXcSt0K1l4dCtlKyIsIHNpemU6ICIrbikpO2lmKHQ+ZSl0aHJvdyBpdChuZXcgRm4oV3ErdCtEZmUrZSkpfWZ1bmN0aW9uIGZoKHQsZSxuKXtpZihlPDApaTV0KHQsbik7ZWxzZXtpZighbi5JaigpKXRocm93IGl0KG5ldyBGbihsYituLm5lKCkrWF8pKTt1KG4sNjYpLk5qKCkuVmoodCx0LnloKCksZSl9fWZ1bmN0aW9uIE9sbih0LGUsbixyLHMsbyxoLGQpe3ZhciB2O2Zvcih2PW47bzxoOyl2Pj1yfHxlPG4mJmQudWUodFtlXSx0W3ZdKTw9MD90cyhzLG8rKyx0W2UrK10pOnRzKHMsbysrLHRbdisrXSl9ZnVuY3Rpb24gb2llKHQsZSxuLHIscyxvKXt0aGlzLmU9bmV3IGhlLHRoaXMuZj0oc28oKSxPUyksbGUodGhpcy5lLHQpLHRoaXMuZD1lLHRoaXMuYT1uLHRoaXMuYj1yLHRoaXMuZj1zLHRoaXMuYz1vfWZ1bmN0aW9uIGNpZSh0LGUpe3ZhciBuLHI7Zm9yKHI9bmV3IG5yKHQpO3IuZSE9ci5pLmdjKCk7KWlmKG49dShkcihyKSwyNiksVnQoZSk9PT1WdChuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBQbG4odCl7JHEoKTt2YXIgZSxuLHIscztmb3Iobj1sc3QoKSxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWlmKGU9bltyXSxSbyhlLmEsdCwwKSE9LTEpcmV0dXJuIGU7cmV0dXJuIFV1dH1mdW5jdGlvbiB1aWUodCl7cmV0dXJuIHQ+PTY1JiZ0PD03MD90LTY1KzEwOnQ+PTk3JiZ0PD0xMDI/dC05NysxMDp0Pj00OCYmdDw9NTc/dC00ODowfWZ1bmN0aW9uIGxpZSh0KXt2YXIgZTtyZXR1cm4gdC5EYiY2ND9tZih0KTooZT1uZXcgX2gobWYodCkpLGUuYSs9IiAoc291cmNlOiAiLGdvKGUsdC5kKSxlLmErPSIpIixlLmEpfWZ1bmN0aW9uIEZsbih0LGUsbil7dmFyIHIscztyZXR1cm4gcz10LmEsdC5hPWUsdC5EYiY0JiYhKHQuRGImMSkmJihyPW5ldyBKcyh0LDEsNSxzLHQuYSksbj9UNHQobixyKTpuPXIpLG59ZnVuY3Rpb24gemcodCxlKXt2YXIgbjtuPSh0LkJiJjI1NikhPTAsZT90LkJifD0yNTY6dC5CYiY9LTI1Nyx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgYmYodCwxLDIsbixlKSl9ZnVuY3Rpb24gcjN0KHQsZSl7dmFyIG47bj0odC5CYiYyNTYpIT0wLGU/dC5CYnw9MjU2OnQuQmImPS0yNTcsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IGJmKHQsMSw4LG4sZSkpfWZ1bmN0aW9uIEl6KHQsZSl7dmFyIG47bj0odC5CYiYyNTYpIT0wLGU/dC5CYnw9MjU2OnQuQmImPS0yNTcsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IGJmKHQsMSw4LG4sZSkpfWZ1bmN0aW9uIHFnKHQsZSl7dmFyIG47bj0odC5CYiY1MTIpIT0wLGU/dC5CYnw9NTEyOnQuQmImPS01MTMsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IGJmKHQsMSwzLG4sZSkpfWZ1bmN0aW9uIGkzdCh0LGUpe3ZhciBuO249KHQuQmImNTEyKSE9MCxlP3QuQmJ8PTUxMjp0LkJiJj0tNTEzLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBiZih0LDEsOSxuLGUpKX1mdW5jdGlvbiBlXyh0LGUpe3ZhciBuO3JldHVybiB0LmI9PS0xJiZ0LmEmJihuPXQuYS5HaigpLHQuYj1uP3QuYy5YZyh0LmEuYWooKSxuKTpHaSh0LmMuVGcoKSx0LmEpKSx0LmMuT2codC5iLGUpfWZ1bmN0aW9uIHBlKHQpe3ZhciBlLG47cmV0dXJuIHQ+LTEyOSYmdDwxMjg/KGU9dCsxMjgsbj0oY0t0KCksZkV0KVtlXSwhbiYmKG49ZkV0W2VdPW5ldyB1TSh0KSksbik6bmV3IHVNKHQpfWZ1bmN0aW9uIHVFKHQpe3ZhciBlLG47cmV0dXJuIHQ+LTEyOSYmdDwxMjg/KGU9dCsxMjgsbj0oZ0t0KCksYkV0KVtlXSwhbiYmKG49YkV0W2VdPW5ldyBmUih0KSksbik6bmV3IGZSKHQpfWZ1bmN0aW9uIHMzdCh0KXt2YXIgZSxuO3JldHVybiBlPXQuayxlPT0oVm4oKSxrcyk/KG49dShRKHQsKGFlKCksb2MpKSw2MSksbj09KHZlKCksUG4pfHxuPT1tcik6ITF9ZnVuY3Rpb24gTmxuKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIG89KHM9X0UodC5iLGUpLHMpLG8mJihyPXUoUHEoVEQodCxvKSwiIiksMjYpLHIpP0M1dCh0LHIsZSxuKTpudWxsfWZ1bmN0aW9uIFVpdCh0LGUsbil7dmFyIHIscyxvO3JldHVybiBvPShzPV9FKHQuYixlKSxzKSxvJiYocj11KFBxKFREKHQsbyksIiIpLDI2KSxyKT9fNXQodCxyLGUsbik6bnVsbH1mdW5jdGlvbiBoaWUodCxlKXt2YXIgbixyO2ZvcihyPW5ldyBucih0KTtyLmUhPXIuaS5nYygpOylpZihuPXUoZHIociksMTM4KSxWdChlKT09PVZ0KG4pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIG5fKHQsZSxuKXt2YXIgcjtpZihyPXQuZ2MoKSxlPnIpdGhyb3cgaXQobmV3IHFtKGUscikpO2lmKHQuaGkoKSYmdC5IYyhuKSl0aHJvdyBpdChuZXcgRm4oZU8pKTt0LlhoKGUsbil9ZnVuY3Rpb24gQmxuKHQsZSl7dmFyIG47aWYobj1uNCh0LmksZSksbj09bnVsbCl0aHJvdyBpdChuZXcgdWQoIk5vZGUgZGlkIG5vdCBleGlzdCBpbiBpbnB1dC4iKSk7cmV0dXJuIGJ5dChlLG4pLG51bGx9ZnVuY3Rpb24gUmxuKHQsZSl7dmFyIG47aWYobj1tSSh0LGUpLF90KG4sMzIyKSlyZXR1cm4gdShuLDM0KTt0aHJvdyBpdChuZXcgRm4obGIrZSsiJyBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUiKSl9ZnVuY3Rpb24gamxuKHQsZSxuKXt2YXIgcixzO2ZvcihzPV90KGUsOTkpJiZ1KGUsMTgpLkJiJkthP25ldyBybnQoZSx0KTpuZXcgdEUoZSx0KSxyPTA7cjxuOysrcilReihzKTtyZXR1cm4gc31mdW5jdGlvbiAkbG4odCl7dmFyIGUsbixyO2ZvcihyPTAsbj10Lmxlbmd0aCxlPTA7ZTxuO2UrKyl0W2VdPT0zMnx8dFtlXT09MTN8fHRbZV09PTEwfHx0W2VdPT05fHwodFtyKytdPXRbZV0pO3JldHVybiByfWZ1bmN0aW9uIHpsbih0KXt2YXIgZSxuLHI7Zm9yKGU9bmV3IGhlLHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw1OTQpLExzKGUsdShuLmpmKCksMTQpKTtyZXR1cm4gZX1mdW5jdGlvbiBxbG4odCl7dmFyIGUsbixyO2ZvcihlPXUoUSh0LChmYygpLGFfdCkpLDE1KSxyPWUuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMTg4KSxyaShuLmIuZCxuKSxyaShuLmMuYixuKX1mdW5jdGlvbiBIbG4odCl7c3dpdGNoKHUoUSh0LChhZSgpLEIyKSksMzAzKS5nKXtjYXNlIDE6SnQodCxCMiwocTAoKSxGNikpO2JyZWFrO2Nhc2UgMjpKdCh0LEIyLChxMCgpLFk0KSl9fWZ1bmN0aW9uIFZsbih0KXt2YXIgZTt0LmcmJihlPXQuYy5SZigpP3QuZjp0LmEsajV0KGUuYSx0Lm8sITApLGo1dChlLmEsdC5vLCExKSxKdCh0Lm8sKFRlKCksY3MpLCh1YSgpLFkyKSkpfWZ1bmN0aW9uIEdsbih0KXt2YXIgZTtpZighdC5hKXRocm93IGl0KG5ldyBObygiQ2Fubm90IG9mZnNldCBhbiB1bmFzc2lnbmVkIGN1dC4iKSk7ZT10LmMtdC5iLHQuYis9ZSxyUXQodCxlKSxuUXQodCxlKX1mdW5jdGlvbiBVbG4odCl7dmFyIGU7cmV0dXJuIGU9dC5hW3QuYy0xJnQuYS5sZW5ndGgtMV0sZT09bnVsbD9udWxsOih0LmM9dC5jLTEmdC5hLmxlbmd0aC0xLHRzKHQuYSx0LmMsbnVsbCksZSl9ZnVuY3Rpb24gZmllKHQpe3ZhciBlLG47Zm9yKG49dC5wLmEuZWMoKS5LYygpO24uT2IoKTspaWYoZT11KG4uUGIoKSwyMTMpLGUuZiYmdC5iW2UuY108LTFlLTEwKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIGEzdCh0LGUpe3N3aXRjaCh0LmIuZyl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gZTtjYXNlIDI6Y2FzZSAzOnJldHVybiBuZXcgYWgoZS5kLDAsZS5hLGUuYik7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gZGllKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMjpyZXR1cm4gQ2Y7Y2FzZSAxOnJldHVybiB6aDtjYXNlIDQ6cmV0dXJuIG5nO2Nhc2UgMzpyZXR1cm4gcmc7ZGVmYXVsdDpyZXR1cm4gaDB9fWZ1bmN0aW9uIG8zdCh0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIEJuO2Nhc2UgMjpyZXR1cm4gUG47Y2FzZSAzOnJldHVybiBIbjtjYXNlIDQ6cmV0dXJuIG1yO2RlZmF1bHQ6cmV0dXJuIFpvfX1mdW5jdGlvbiBZRCh0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIG1yO2Nhc2UgMjpyZXR1cm4gQm47Y2FzZSAzOnJldHVybiBQbjtjYXNlIDQ6cmV0dXJuIEhuO2RlZmF1bHQ6cmV0dXJuIFpvfX1mdW5jdGlvbiBPeih0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIEhuO2Nhc2UgMjpyZXR1cm4gbXI7Y2FzZSAzOnJldHVybiBCbjtjYXNlIDQ6cmV0dXJuIFBuO2RlZmF1bHQ6cmV0dXJuIFpvfX1mdW5jdGlvbiBXbG4odCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gbmV3IElxdDtjYXNlIDE6cmV0dXJuIG5ldyBNcXQ7Y2FzZSAyOnJldHVybiBuZXcgRHF0O2RlZmF1bHQ6dGhyb3cgaXQobmV3IGdNKX19ZnVuY3Rpb24gTXModCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ9PWU/dD09MD9NcygxL3QsMS9lKTowOmlzTmFOKHQpP2lzTmFOKGUpPzA6MTotMX1mdW5jdGlvbiBZbG4odCxlKXt2cihlLCJTb3J0IGVuZCBsYWJlbHMiLDEpLGxzKFJpKFdvKG5ldyBUbihudWxsLG5ldyBfbih0LmIsMTYpKSxuZXcgY04pLG5ldyBLNSksbmV3IEFLKSxvcihlKX1mdW5jdGlvbiByXyh0LGUsbil7dmFyIHIscztyZXR1cm4gdC5laigpPyhzPXQuZmooKSxyPUpzdCh0LGUsbiksdC4kaSh0LlppKDcscGUobikscixlLHMpKSxyKTpKc3QodCxlLG4pfWZ1bmN0aW9uIFdpdCh0LGUpe3ZhciBuLHIsczt0LmQ9PW51bGw/KCsrdC5lLC0tdC5mKToocz1lLmNkKCksbj1lLlNoKCkscj0obiZ3aSkldC5kLmxlbmd0aCxEYW4odCxyLExjZSh0LHIsbixzKSkpfWZ1bmN0aW9uIGxFKHQsZSl7dmFyIG47bj0odC5CYiZ4ZikhPTAsZT90LkJifD14Zjp0LkJiJj0tMTAyNSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgYmYodCwxLDEwLG4sZSkpfWZ1bmN0aW9uIGhFKHQsZSl7dmFyIG47bj0odC5CYiZFeSkhPTAsZT90LkJifD1FeTp0LkJiJj0tNDA5Nyx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgYmYodCwxLDEyLG4sZSkpfWZ1bmN0aW9uIGZFKHQsZSl7dmFyIG47bj0odC5CYiZIdSkhPTAsZT90LkJifD1IdTp0LkJiJj0tODE5Myx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgYmYodCwxLDE1LG4sZSkpfWZ1bmN0aW9uIGRFKHQsZSl7dmFyIG47bj0odC5CYiZEeSkhPTAsZT90LkJifD1EeTp0LkJiJj0tMjA0OSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgYmYodCwxLDExLG4sZSkpfWZ1bmN0aW9uIEtsbih0LGUpe3ZhciBuO3JldHVybiBuPU1zKHQuYi5jLGUuYi5jKSxuIT0wfHwobj1Ncyh0LmEuYSxlLmEuYSksbiE9MCk/bjpNcyh0LmEuYixlLmEuYil9ZnVuY3Rpb24gWGxuKHQsZSl7dmFyIG47aWYobj10cih0LmssZSksbj09bnVsbCl0aHJvdyBpdChuZXcgdWQoIlBvcnQgZGlkIG5vdCBleGlzdCBpbiBpbnB1dC4iKSk7cmV0dXJuIGJ5dChlLG4pLG51bGx9ZnVuY3Rpb24gUWxuKHQpe3ZhciBlLG47Zm9yKG49UGNlKFJsKHQpKS5LYygpO24uT2IoKTspaWYoZT1CcihuLlBiKCkpLGtfKHQsZSkpcmV0dXJuIHNhbigoSFZ0KCksbDVlKSxlKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBabG4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihoPW91KHQuZS5UZygpLGUpLG89MCxuPXUodC5nLDExOSkscz0wO3M8dC5pOysrcylyPW5bc10saC5ybChyLmFrKCkpJiYrK287cmV0dXJuIG99ZnVuY3Rpb24gSmxuKHQsZSxuKXt2YXIgcixzO3JldHVybiByPXUoZS5XZSh0LmEpLDM1KSxzPXUobi5XZSh0LmEpLDM1KSxyIT1udWxsJiZzIT1udWxsP0lEKHIscyk6ciE9bnVsbD8tMTpzIT1udWxsPzE6MH1mdW5jdGlvbiBnaWUodCxlLG4pe3ZhciByLHM7aWYodC5jKUY0dCh0LmMsZSxuKTtlbHNlIGZvcihzPW5ldyBTKHQuYik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTU3KSxnaWUocixlLG4pfWZ1bmN0aW9uIFlpdCh0LGUpe3ZhciBuLHI7Zm9yKHI9bmV3IFMoZSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNDYpLG11KHQuYi5iLG4uYiksTXJuKHUobi5hLDE4OSksdShuLmIsODEpKX1mdW5jdGlvbiB0aG4odCl7dmFyIGUsbjtmb3Iobj1xcChuZXcgTXAsOTEpLGU9ITA7dC5PYigpOyllfHwobi5hKz1ZYSksZT0hMSxoYyhuLHQuUGIoKSk7cmV0dXJuKG4uYSs9Il0iLG4pLmF9ZnVuY3Rpb24gZ0UodCxlKXt2YXIgbjtuPSh0LkJiJm1kKSE9MCxlP3QuQmJ8PW1kOnQuQmImPS0xNjM4NSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgYmYodCwxLDE2LG4sZSkpfWZ1bmN0aW9uIEtpdCh0LGUpe3ZhciBuO249KHQuQmImZGMpIT0wLGU/dC5CYnw9ZGM6dC5CYiY9LTMyNzY5LHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBiZih0LDEsMTgsbixlKSl9ZnVuY3Rpb24gYzN0KHQsZSl7dmFyIG47bj0odC5CYiZkYykhPTAsZT90LkJifD1kYzp0LkJiJj0tMzI3NjksdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IGJmKHQsMSwxOCxuLGUpKX1mdW5jdGlvbiB1M3QodCxlKXt2YXIgbjtuPSh0LkJiJkthKSE9MCxlP3QuQmJ8PUthOnQuQmImPS02NTUzNyx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgYmYodCwxLDIwLG4sZSkpfWZ1bmN0aW9uIGwzdCh0KXt2YXIgZTtyZXR1cm4gZT1OdCh4aCx5ZCwyNSwyLDE1LDEpLHQtPUthLGVbMF09KHQ+PjEwKStSSSZ5cyxlWzFdPSh0JjEwMjMpKzU2MzIwJnlzLE1oKGUsMCxlLmxlbmd0aCl9ZnVuY3Rpb24gUHoodCl7dmFyIGUsbjtyZXR1cm4gbj11KFEodCwoVGUoKSxXbCkpLDEwMyksbj09KGFvKCksaDApPyhlPVh0KHllKFEodCxyRykpKSxlPj0xP0NmOm5nKTpufWZ1bmN0aW9uIGVobih0KXtzd2l0Y2godShRKHQsKFRlKCksZWcpKSwyMTgpLmcpe2Nhc2UgMTpyZXR1cm4gbmV3IFlYO2Nhc2UgMzpyZXR1cm4gbmV3IEpYO2RlZmF1bHQ6cmV0dXJuIG5ldyBXWH19ZnVuY3Rpb24gdzIodCl7aWYodC5jKXcyKHQuYyk7ZWxzZSBpZih0LmQpdGhyb3cgaXQobmV3IE5vKCJTdHJlYW0gYWxyZWFkeSB0ZXJtaW5hdGVkLCBjYW4ndCBiZSBtb2RpZmllZCBvciB1c2VkIikpfWZ1bmN0aW9uIFhpdCh0KXt2YXIgZTtyZXR1cm4gdC5EYiY2ND9tZih0KTooZT1uZXcgX2gobWYodCkpLGUuYSs9IiAoaWRlbnRpZmllcjogIixnbyhlLHQuayksZS5hKz0iKSIsZS5hKX1mdW5jdGlvbiBwaWUodCxlLG4pe3ZhciByLHM7cmV0dXJuIHI9KFN3KCkscz1uZXcgeHAscyksaXoocixlKSxzeihyLG4pLHQmJkRyKCghdC5hJiYodC5hPW5ldyBBcyhHaCx0LDUpKSx0LmEpLHIpLHJ9ZnVuY3Rpb24gUWl0KHQsZSxuLHIpe3ZhciBzLG87cmV0dXJuIE9uKHIpLE9uKG4pLHM9dC54YyhlKSxvPXM9PW51bGw/bjpNVnQodShzLDE1KSx1KG4sMTQpKSxvPT1udWxsP3QuQmMoZSk6dC56YyhlLG8pLG99ZnVuY3Rpb24gdW4odCl7dmFyIGUsbixyLHM7cmV0dXJuIG49KGU9dShWZigocj10LmdtLHM9ci5mLHM9PUhyP3I6cykpLDkpLG5ldyBzaChlLHUoZmYoZSxlLmxlbmd0aCksOSksMCkpLHZmKG4sdCksbn1mdW5jdGlvbiBuaG4odCxlLG4pe3ZhciByLHM7Zm9yKHM9dC5hLmVjKCkuS2MoKTtzLk9iKCk7KWlmKHI9dShzLlBiKCksMTApLE5EKG4sdShOZShlLHIucCksMTQpKSlyZXR1cm4gcjtyZXR1cm4gbnVsbH1mdW5jdGlvbiByaG4odCxlLG4pe3ZhciByO3RyeXtCdW4odCxlLG4pfWNhdGNoKHMpe3Rocm93IHM9V2kocyksX3Qocyw1OTcpPyhyPXMsaXQobmV3IGRtdChyKSkpOml0KHMpfXJldHVybiBlfWZ1bmN0aW9uIEpwKHQsZSl7dmFyIG47cmV0dXJuIEJvKHQpJiZCbyhlKSYmKG49dC1lLEJJPG4mJm48QzIpP246S3AodHJlKEJvKHQpP0xoKHQpOnQsQm8oZSk/TGgoZSk6ZSkpfWZ1bmN0aW9uIFBhKHQsZSl7dmFyIG47cmV0dXJuIEJvKHQpJiZCbyhlKSYmKG49dCtlLEJJPG4mJm48QzIpP246S3AobXVuKEJvKHQpP0xoKHQpOnQsQm8oZSk/TGgoZSk6ZSkpfWZ1bmN0aW9uIF9hKHQsZSl7dmFyIG47cmV0dXJuIEJvKHQpJiZCbyhlKSYmKG49dCplLEJJPG4mJm48QzIpP246S3AoJDNuKEJvKHQpP0xoKHQpOnQsQm8oZSk/TGgoZSk6ZSkpfWZ1bmN0aW9uIEtvKHQsZSl7dmFyIG47cmV0dXJuIHQuaXx8cjV0KHQpLG49dShwbyh0LmcsZSksNDYpLG4/bmV3IFFkKHQuaix1KG4uYSwxOSkuYSx1KG4uYiwxOSkuYSk6KHduKCksd24oKSxpbyl9ZnVuY3Rpb24gc3YodCxlLG4pe3ZhciByO3JldHVybiByPXQuYS5nZXQoZSksdC5hLnNldChlLG49PT12b2lkIDA/bnVsbDpuKSxyPT09dm9pZCAwPygrK3QuYyx3JCh0LmIpKTorK3QuZCxyfWZ1bmN0aW9uIGlobih0LGUsbil7dC5uPXQyKE9iLFtlZSx3b3RdLFszNjQsMjVdLDE0LFtuLHBzKGIuTWF0aC5jZWlsKGUvMzIpKV0sMiksdC5vPWUsdC5wPW4sdC5qPWUtMT4+MSx0Lms9bi0xPj4xfWZ1bmN0aW9uIFppdCgpe000dCgpO3ZhciB0LGUsbjtuPUp4bisrK0RhdGUubm93KCksdD1wcyhiLk1hdGguZmxvb3IobiokSSkpJlVxLGU9cHMobi10Kkd4dCksdGhpcy5hPXReMTUwMix0aGlzLmI9ZV5Fb3R9ZnVuY3Rpb24gVTAodCl7dmFyIGUsbixyO2ZvcihlPW5ldyBoZSxyPW5ldyBTKHQuaik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTEpLGxlKGUsbi5iKTtyZXR1cm4gTHIoZSksbmV3IGY5KGUpfWZ1bmN0aW9uIGpvKHQpe3ZhciBlLG4scjtmb3IoZT1uZXcgaGUscj1uZXcgUyh0LmopO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDExKSxsZShlLG4uZSk7cmV0dXJuIExyKGUpLG5ldyBmOShlKX1mdW5jdGlvbiBEcyh0KXt2YXIgZSxuLHI7Zm9yKGU9bmV3IGhlLHI9bmV3IFModC5qKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxMSksbGUoZSxuLmcpO3JldHVybiBMcihlKSxuZXcgZjkoZSl9ZnVuY3Rpb24gc2huKHQpe3ZhciBlLG47Zm9yKG49bjJuKFJsKFltKHQpKSkuS2MoKTtuLk9iKCk7KWlmKGU9QnIobi5QYigpKSxrXyh0LGUpKXJldHVybiBhYW4oKFZWdCgpLGg1ZSksZSk7cmV0dXJuIG51bGx9ZnVuY3Rpb24gYWhuKHQpe3ZhciBlLG4scjtmb3Iobj0wLHI9dC5sZW5ndGg7bjxyO24rKylpZih0W25dPT1udWxsKXRocm93IGl0KG5ldyBTeCgiYXQgaW5kZXggIituKSk7cmV0dXJuIGU9dCxuZXcgeWwoZSl9ZnVuY3Rpb24gb2huKHQsZSl7dmFyIG47aWYobj1tSSh0LlRnKCksZSksX3Qobiw5OSkpcmV0dXJuIHUobiwxOCk7dGhyb3cgaXQobmV3IEZuKGxiK2UrIicgaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIikpfWZ1bmN0aW9uIGNobih0KXt2YXIgZTtyZXR1cm4gZT1keSh0KSxlPjM0MDI4MjM0NjYzODUyODg2ZTIyP2FzOmU8LTM0MDI4MjM0NjYzODUyODg2ZTIyP0NzOmV9ZnVuY3Rpb24gYmllKHQpe3JldHVybiB0LT10Pj4xJjE0MzE2NTU3NjUsdD0odD4+MiY4NTg5OTM0NTkpKyh0Jjg1ODk5MzQ1OSksdD0odD4+NCkrdCYyNTI2NDUxMzUsdCs9dD4+OCx0Kz10Pj4xNix0JjYzfWZ1bmN0aW9uIHdpZSh0KXt2YXIgZSxuLHIscztmb3IoZT1uZXcgUVd0KHQuSGQoKS5nYygpKSxzPTAscj1lNih0LkhkKCkuS2MoKSk7ci5PYigpOyluPXIuUGIoKSx2aW4oZSxuLHBlKHMrKykpO3JldHVybiBIZ24oZS5hKX1mdW5jdGlvbiB1aG4odCxlKXt2YXIgbixyLHM7Zm9yKHM9bmV3IF9yLHI9ZS52YygpLktjKCk7ci5PYigpOyluPXUoci5QYigpLDQyKSxraShzLG4uY2QoKSx0dW4odCx1KG4uZGQoKSwxNSkpKTtyZXR1cm4gc31mdW5jdGlvbiBoM3QodCxlKXt0Lm4uYy5sZW5ndGg9PTAmJmxlKHQubixuZXcgRSQodC5zLHQudCx0LmkpKSxsZSh0LmIsZSksVzN0KHUoTmUodC5uLHQubi5jLmxlbmd0aC0xKSwyMTEpLGUpLFNsZSh0LGUpfWZ1bmN0aW9uIHU0KHQpe3JldHVybih0LmMhPXQuYi5ifHx0LmkhPXQuZy5iKSYmKHQuYS5jPU50KFFuLERlLDEsMCw1LDEpLExzKHQuYSx0LmIpLExzKHQuYSx0LmcpLHQuYz10LmIuYix0Lmk9dC5nLmIpLHQuYX1mdW5jdGlvbiBKaXQodCxlKXt2YXIgbixyLHM7Zm9yKHM9MCxyPXUoZS5LYih0KSwyMCkuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMTcpLGplKFJlKFEobiwoYWUoKSxxMSkpKSl8fCsrcztyZXR1cm4gc31mdW5jdGlvbiBsaG4odCxlKXt2YXIgbixyLHM7cj10NChlKSxzPVh0KHllKG95KHIsKFRlKCksVGYpKSkpLG49Yi5NYXRoLm1heCgwLHMvMi0uNSksaF8oZSxuLDEpLGxlKHQsbmV3IHVHdChlLG4pKX1mdW5jdGlvbiBkaCgpe2RoPVosTU89bmV3IE1NKEowLDApLEVTPW5ldyBNTSgiRklSU1QiLDEpLGJiPW5ldyBNTShDMWUsMiksVFM9bmV3IE1NKCJMQVNUIiwzKSxqeT1uZXcgTU0oXzFlLDQpfWZ1bmN0aW9uIFcwKCl7VzA9WixDZnQ9bmV3IHNqKE5fLDApLGVQPW5ldyBzaigiUE9MWUxJTkUiLDEpLE43PW5ldyBzaigiT1JUSE9HT05BTCIsMiksWDY9bmV3IHNqKCJTUExJTkVTIiwzKX1mdW5jdGlvbiBGeigpe0Z6PVosel90PW5ldyBYZXQoIkFTUEVDVF9SQVRJT19EUklWRU4iLDApLFFodD1uZXcgWGV0KCJNQVhfU0NBTEVfRFJJVkVOIiwxKSwkX3Q9bmV3IFhldCgiQVJFQV9EUklWRU4iLDIpfWZ1bmN0aW9uIEtEKCl7S0Q9WixqRz1uZXcgUWV0KCJQMV9TVFJVQ1RVUkUiLDApLCRHPW5ldyBRZXQoIlAyX1BST0NFU1NJTkdfT1JERVIiLDEpLHpHPW5ldyBRZXQoIlAzX0VYRUNVVElPTiIsMil9ZnVuY3Rpb24gTnooKXtOej1aLEdodD1uZXcgV2V0KCJPVkVSTEFQX1JFTU9WQUwiLDApLEhodD1uZXcgV2V0KCJDT01QQUNUSU9OIiwxKSxWaHQ9bmV3IFdldCgiR1JBUEhfU0laRV9DQUxDVUxBVElPTiIsMil9ZnVuY3Rpb24gYXYodCxlKXtyZXR1cm4gazEoKSx3ZihzYiksYi5NYXRoLmFicyh0LWUpPD1zYnx8dD09ZXx8aXNOYU4odCkmJmlzTmFOKGUpPzA6dDxlPy0xOnQ+ZT8xOkl3KGlzTmFOKHQpLGlzTmFOKGUpKX1mdW5jdGlvbiB2aWUodCxlKXt2YXIgbixyO2ZvcihuPWVpKHQsMCk7bi5iIT1uLmQuYzspe2lmKHI9cE0oeWUodGkobikpKSxyPT1lKXJldHVybjtpZihyPmUpe09ydChuKTticmVha319ZUQobixlKX1mdW5jdGlvbiBhbih0LGUpe3ZhciBuLHIscyxvLGg7aWYobj1lLmYsbTIodC5jLmQsbixlKSxlLmchPW51bGwpZm9yKHM9ZS5nLG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLG0yKHQuYy5lLHIsZSl9ZnVuY3Rpb24gaGhuKHQsZSxuLHIpe3ZhciBzLG8saDtmb3Iocz1lKzE7czxuOysrcylmb3Iobz1zO28+ZSYmci51ZSh0W28tMV0sdFtvXSk+MDstLW8paD10W29dLHRzKHQsbyx0W28tMV0pLHRzKHQsby0xLGgpfWZ1bmN0aW9uIGdoKHQsZSxuLHIpe2lmKGU8MClNNXQodCxuLHIpO2Vsc2V7aWYoIW4uSWooKSl0aHJvdyBpdChuZXcgRm4obGIrbi5uZSgpK1hfKSk7dShuLDY2KS5OaigpLlRqKHQsdC55aCgpLGUscil9fWZ1bmN0aW9uIEJ6KHQsZSl7aWYoZT09dC5kKXJldHVybiB0LmU7aWYoZT09dC5lKXJldHVybiB0LmQ7dGhyb3cgaXQobmV3IEZuKCJOb2RlICIrZSsiIG5vdCBwYXJ0IG9mIGVkZ2UgIit0KSl9ZnVuY3Rpb24gZmhuKHQsZSl7c3dpdGNoKGUuZyl7Y2FzZSAyOnJldHVybiB0LmI7Y2FzZSAxOnJldHVybiB0LmM7Y2FzZSA0OnJldHVybiB0LmQ7Y2FzZSAzOnJldHVybiB0LmE7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gbWllKHQsZSl7c3dpdGNoKGUuZyl7Y2FzZSAyOnJldHVybiB0LmI7Y2FzZSAxOnJldHVybiB0LmM7Y2FzZSA0OnJldHVybiB0LmQ7Y2FzZSAzOnJldHVybiB0LmE7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gZjN0KHQsZSxuLHIpe3N3aXRjaChlKXtjYXNlIDM6cmV0dXJuIHQuZjtjYXNlIDQ6cmV0dXJuIHQuZztjYXNlIDU6cmV0dXJuIHQuaTtjYXNlIDY6cmV0dXJuIHQuan1yZXR1cm4gbjN0KHQsZSxuLHIpfWZ1bmN0aW9uIGRobih0KXtyZXR1cm4gdC5rIT0oVm4oKSxPcyk/ITE6TjgobmV3IFRuKG51bGwsbmV3IGp3KG5ldyBhcihscihEcyh0KS5hLktjKCksbmV3IHopKSkpLG5ldyAkTil9ZnVuY3Rpb24gZ2huKHQpe3JldHVybiB0LmU9PW51bGw/dDooIXQuYyYmKHQuYz1uZXcgZmF0KCh0LmYmMjU2KSE9MCx0LmksdC5hLHQuZCwodC5mJjE2KSE9MCx0LmosdC5nLG51bGwpKSx0LmMpfWZ1bmN0aW9uIHBobih0LGUpe3JldHVybiB0Lmg9PU5JJiZ0Lm09PTAmJnQubD09MD8oZSYmKGhiPWl1KDAsMCwwKSkseVV0KChxOCgpLGFFdCkpKTooZSYmKGhiPWl1KHQubCx0Lm0sdC5oKSksaXUoMCwwLDApKX1mdW5jdGlvbiAkbyh0KXt2YXIgZTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5pbT09PUV0P0lwKG9sKHQpKSsiQCIrKGU9SGkodCk+Pj4wLGUudG9TdHJpbmcoMTYpKTp0LnRvU3RyaW5nKCl9ZnVuY3Rpb24gaV8odCl7dmFyIGU7dGhpcy5hPShlPXUodC5lJiZ0LmUoKSw5KSxuZXcgc2goZSx1KGZmKGUsZS5sZW5ndGgpLDkpLDApKSx0aGlzLmI9TnQoUW4sRGUsMSx0aGlzLmEuYS5sZW5ndGgsNSwxKX1mdW5jdGlvbiBiaG4odCl7dmFyIGUsbixyO2Zvcih0aGlzLmE9bmV3IE8wLHI9bmV3IFModCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTQpLGU9bmV3IENLdCxDY24oZSxuKSxGcyh0aGlzLmEsZSl9ZnVuY3Rpb24gd2huKHQpeyRtKCk7dmFyIGUsbixyLHM7Zm9yKGU9dC5vLmIscj11KHUoQWkodC5yLCh2ZSgpLG1yKSksMjEpLDg0KS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwxMTEpLHM9bi5lLHMuYis9ZX1mdW5jdGlvbiBjbCh0KXt2YXIgZTtpZih0LmIpe2lmKGNsKHQuYiksdC5iLmQhPXQuYyl0aHJvdyBpdChuZXcgcmgpfWVsc2UgdC5kLmRjKCkmJihlPXUodC5mLmMueGModC5lKSwxNCksZSYmKHQuZD1lKSl9ZnVuY3Rpb24gdmhuKHQpe3ZhciBlO3JldHVybiB0PT1udWxsPyEwOihlPXQubGVuZ3RoLGU+MCYmKFJyKGUtMSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGUtMSk9PTU4KSYmIXRzdCh0LG9BLGNBKSl9ZnVuY3Rpb24gdHN0KHQsZSxuKXt2YXIgcixzO2ZvcihyPTAscz10Lmxlbmd0aDtyPHM7cisrKWlmKFNpdCgoUnIocix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHIpKSxlLG4pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIG1obih0LGUpe3ZhciBuLHI7Zm9yKHI9dC5lLmEuZWMoKS5LYygpO3IuT2IoKTspaWYobj11KHIuUGIoKSwyNjYpLEVnbihlLG4uZCl8fE1wbihlLG4uZCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24geWhuKHQsZSl7dmFyIG4scixzO2ZvcihyPXNtbih0LGUpLHM9cltyLmxlbmd0aC0xXS8yLG49MDtuPHIubGVuZ3RoO24rKylpZihyW25dPj1zKXJldHVybiBlLmMrbjtyZXR1cm4gZS5jK2UuYi5nYygpfWZ1bmN0aW9uIHhobih0LGUpe3k4KCk7dmFyIG4scixzLG87Zm9yKHI9T3RlKHQpLHM9ZSwkOChyLDAsci5sZW5ndGgscyksbj0wO248ci5sZW5ndGg7bisrKW89cmRuKHQscltuXSxuKSxuIT1vJiZyXyh0LG4sbyl9ZnVuY3Rpb24gZDN0KHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihyPTAsbj0wLG89ZSxoPTAsZD1vLmxlbmd0aDtoPGQ7KytoKXM9b1toXSxzPjAmJihyKz1zLCsrbik7cmV0dXJuIG4+MSYmKHIrPXQuZCoobi0xKSkscn1mdW5jdGlvbiBnM3QodCl7dmFyIGUsbixyO2ZvcihyPW5ldyBBZyxyLmErPSJbIixlPTAsbj10LmdjKCk7ZTxuOylnbyhyLGI5KHQua2koZSkpKSwrK2U8biYmKHIuYSs9WWEpO3JldHVybiByLmErPSJdIixyLmF9ZnVuY3Rpb24ga2huKHQpe3ZhciBlLG4scixzLG87cmV0dXJuIG89RDR0KHQpLG49d00odC5jKSxyPSFuLHImJihzPW5ldyBFZyxZZihvLCJrbm93bkxheW91dGVycyIscyksZT1uZXcgUnp0KHMpLHZhKHQuYyxlKSksb31mdW5jdGlvbiBFaG4odCxlKXt2YXIgbixyLHM7Zm9yKE9uKGUpLG49ITEscj1uZXcgUyh0KTtyLmE8ci5jLmMubGVuZ3RoOylzPUoociksYXkoZSxzLCExKSYmKEw5KHIpLG49ITApO3JldHVybiBufWZ1bmN0aW9uIHAzdCh0KXt2YXIgZSxuLHI7Zm9yKHI9WHQoeWUodC5hLldlKCh1aSgpLEpHKSkpKSxuPW5ldyBTKHQuYS54ZigpKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSw2ODApLFZoZSh0LGUscil9ZnVuY3Rpb24gZXN0KHQsZSl7dmFyIG4scjtmb3Iocj1uZXcgUyhlKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw0NiksbGUodC5iLmIsdShuLmIsODEpKSxQcnQodShuLmEsMTg5KSx1KG4uYiw4MSkpfWZ1bmN0aW9uIFRobih0LGUsbil7dmFyIHIscztmb3Iocz10LmEuYixyPXMuYy5sZW5ndGg7cjxuO3IrKylIbShzLDAsbmV3IFNoKHQuYSkpO0VvKGUsdShOZShzLHMuYy5sZW5ndGgtbiksMjkpKSx0LmJbZS5wXT1ufWZ1bmN0aW9uIENobih0LGUsbil7dmFyIHI7cj1uLCFyJiYocj1xd3QobmV3IHI4LDApKSx2cihyLGMxZSwyKSx5c2UodC5iLGUsUmMociwxKSksYTRuKHQsZSxSYyhyLDEpKSxaNW4oZSxSYyhyLDEpKSxvcihyKX1mdW5jdGlvbiBfaG4odCxlLG4scixzKXtGbCgpLHlmKGxmKHVmKGNmKGhmKG5ldyBDaCwwKSxzLmQuZS10KSxlKSxzLmQpKSx5ZihsZih1ZihjZihoZihuZXcgQ2gsMCksbi1zLmEuZSkscy5hKSxyKSl9ZnVuY3Rpb24gYjN0KHQsZSxuLHIscyxvKXt0aGlzLmE9dCx0aGlzLmM9ZSx0aGlzLmI9bix0aGlzLmY9cix0aGlzLmQ9cyx0aGlzLmU9byx0aGlzLmM+MCYmdGhpcy5iPjAmJkt3dCh0aGlzLmMsdGhpcy5iLHRoaXMuYSl9ZnVuY3Rpb24gdzN0KHQpe25zdCgpLHRoaXMuYz1BMShsdChjdCh3Nm4sMSksRGUsODMxLDAsW2VtZV0pKSx0aGlzLmI9bmV3IF9yLHRoaXMuYT10LGtpKHRoaXMuYix2RywxKSx4dShubWUsbmV3IGN6dCh0aGlzKSl9ZnVuY3Rpb24geWllKHQsZSl7dmFyIG47cmV0dXJuIHQuZD9UbCh0LmIsZSk/dSh0cih0LmIsZSksNTEpOihuPWUuS2YoKSxraSh0LmIsZSxuKSxuKTplLktmKCl9ZnVuY3Rpb24gdjN0KHQsZSl7dmFyIG47cmV0dXJuIFZ0KHQpPT09VnQoZSk/ITA6X3QoZSw5MSk/KG49dShlLDkxKSx0LmU9PW4uZSYmdC5kPT1uLmQmJm9hbih0LG4uYSkpOiExfWZ1bmN0aW9uIGE2KHQpe3N3aXRjaCh2ZSgpLHQuZyl7Y2FzZSA0OnJldHVybiBQbjtjYXNlIDE6cmV0dXJuIEhuO2Nhc2UgMzpyZXR1cm4gbXI7Y2FzZSAyOnJldHVybiBCbjtkZWZhdWx0OnJldHVybiBab319ZnVuY3Rpb24gbTN0KHQsZSl7c3dpdGNoKGUpe2Nhc2UgMzpyZXR1cm4gdC5mIT0wO2Nhc2UgNDpyZXR1cm4gdC5nIT0wO2Nhc2UgNTpyZXR1cm4gdC5pIT0wO2Nhc2UgNjpyZXR1cm4gdC5qIT0wfXJldHVybiB2eXQodCxlKX1mdW5jdGlvbiBTaG4odCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBuZXcgZ1o7Y2FzZSAxOnJldHVybiBuZXcgdEI7ZGVmYXVsdDp0aHJvdyBpdChuZXcgRm4oSWN0Kyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24geGllKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMDpyZXR1cm4gbmV3IEpOO2Nhc2UgMTpyZXR1cm4gbmV3IGVCO2RlZmF1bHQ6dGhyb3cgaXQobmV3IEZuKFlvdCsodC5mIT1udWxsP3QuZjoiIit0LmcpKSl9fWZ1bmN0aW9uIGtpZSh0KXtzd2l0Y2godC5nKXtjYXNlIDA6cmV0dXJuIG5ldyBRcHQ7Y2FzZSAxOnJldHVybiBuZXcgT3F0O2RlZmF1bHQ6dGhyb3cgaXQobmV3IEZuKF9IKyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gQWhuKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMTpyZXR1cm4gbmV3IHVaO2Nhc2UgMjpyZXR1cm4gbmV3IGpXdDtkZWZhdWx0OnRocm93IGl0KG5ldyBGbihJY3QrKHQuZiE9bnVsbD90LmY6IiIrdC5nKSkpfX1mdW5jdGlvbiBMaG4odCl7dmFyIGUsbjtpZih0LmIpcmV0dXJuIHQuYjtmb3Iobj0kMT9udWxsOnQuZDtuOyl7aWYoZT0kMT9udWxsOm4uYixlKXJldHVybiBlO249JDE/bnVsbDpuLmR9cmV0dXJuIGQ4KCksTkV0fWZ1bmN0aW9uIE1obih0KXt2YXIgZSxuLHI7cmV0dXJuIHQuZT09MD8wOihlPXQuZDw8NSxuPXQuYVt0LmQtMV0sdC5lPDAmJihyPUluZSh0KSxyPT10LmQtMSYmKC0tbixuPW58MCkpLGUtPXBJKG4pLGUpfWZ1bmN0aW9uIERobih0KXt2YXIgZSxuLHI7cmV0dXJuIHQ8blYubGVuZ3RoP25WW3RdOihuPXQ+PjUsZT10JjMxLHI9TnQoQ3IsWHIsMjUsbisxLDE1LDEpLHJbbl09MTw8ZSxuZXcgWDMoMSxuKzEscikpfWZ1bmN0aW9uIEVpZSh0KXt2YXIgZSxuLHI7cmV0dXJuIG49dC56ZygpLG4/KGU9dC5VZygpLF90KGUsMTYwKSYmKHI9RWllKHUoZSwxNjApKSxyIT1udWxsKT9yKyIuIituOm4pOm51bGx9ZnVuY3Rpb24gYXkodCxlLG4pe3ZhciByLHM7Zm9yKHM9dC5LYygpO3MuT2IoKTspaWYocj1zLlBiKCksVnQoZSk9PT1WdChyKXx8ZSE9bnVsbCYmeWkoZSxyKSlyZXR1cm4gbiYmcy5RYigpLCEwO3JldHVybiExfWZ1bmN0aW9uIHkzdCh0LGUsbil7dmFyIHIscztpZigrK3QuaixuLmRjKCkpcmV0dXJuITE7Zm9yKHM9bi5LYygpO3MuT2IoKTspcj1zLlBiKCksdC5IaShlLHQub2koZSxyKSksKytlO3JldHVybiEwfWZ1bmN0aW9uIElobih0LGUsbixyKXt2YXIgcyxvO2lmKG89bi1lLG88Mylmb3IoO288MzspdCo9MTAsKytvO2Vsc2V7Zm9yKHM9MTtvPjM7KXMqPTEwLC0tbzt0PSh0KyhzPj4xKSkvc3wwfXJldHVybiByLmk9dCwhMH1mdW5jdGlvbiBPaG4odCl7cmV0dXJuIHFpdCgpLE5uKCksISEobWllKHUodC5hLDgxKS5qLHUodC5iLDEwMykpfHx1KHQuYSw4MSkuZC5lIT0wJiZtaWUodSh0LmEsODEpLmosdSh0LmIsMTAzKSkpfWZ1bmN0aW9uIFBobih0KXtWJCgpLHUodC5XZSgodWkoKSx4YikpLDE3NCkuSGMoKGxsKCksaVUpKSYmKHUodC5XZShReSksMTc0KS5GYygoWnUoKSxRNikpLHUodC5XZSh4YiksMTc0KS5NYyhpVSkpfWZ1bmN0aW9uIFRpZSh0LGUpe3ZhciBuLHI7aWYoZSl7Zm9yKG49MDtuPHQuaTsrK24paWYocj11KHQuZ1tuXSwzNjYpLHIuRGkoZSkpcmV0dXJuITE7cmV0dXJuIERyKHQsZSl9ZWxzZSByZXR1cm4hMX1mdW5jdGlvbiB4M3QodCl7dmFyIGUsbixyLHM7Zm9yKGU9bmV3IEVnLHM9bmV3IEwodC5iLktjKCkpO3MuYi5PYigpOylyPXUocy5iLlBiKCksNjg2KSxuPVhnbihyKSx3bm4oZSxlLmEubGVuZ3RoLG4pO3JldHVybiBlLmF9ZnVuY3Rpb24gazN0KHQpe3ZhciBlO3JldHVybiF0LmMmJih0LmM9bmV3IGx3KSxacyh0LmQsbmV3IGVkKSxObW4odCksZT1Udm4odCksbHMobmV3IFRuKG51bGwsbmV3IF9uKHQuZCwxNikpLG5ldyBncih0KSksZX1mdW5jdGlvbiBSeih0KXt2YXIgZTtyZXR1cm4gdC5EYiY2ND9KOSh0KTooZT1uZXcgX2goSjkodCkpLGUuYSs9IiAoaW5zdGFuY2VDbGFzc05hbWU6ICIsZ28oZSx0LkQpLGUuYSs9IikiLGUuYSl9ZnVuY3Rpb24gRmhuKHQsZSl7dmFyIG4scixzLG87ZSYmKHM9SDAoZSwieCIpLG49bmV3IE96dCh0KSxWOChuLmEsKE9uKHMpLHMpKSxvPUgwKGUsInkiKSxyPW5ldyBQenQodCksVTgoci5hLChPbihvKSxvKSkpfWZ1bmN0aW9uIE5obih0LGUpe3ZhciBuLHIscyxvO2UmJihzPUgwKGUsIngiKSxuPW5ldyBMenQodCksRzgobi5hLChPbihzKSxzKSksbz1IMChlLCJ5Iikscj1uZXcgRHp0KHQpLFc4KHIuYSwoT24obyksbykpKX1mdW5jdGlvbiBHaSh0LGUpe3ZhciBuLHIscztpZihuPSh0Lmk9PW51bGwmJnZkKHQpLHQuaSkscj1lLmFqKCksciE9LTEpe2ZvcihzPW4ubGVuZ3RoO3I8czsrK3IpaWYobltyXT09ZSlyZXR1cm4gcn1yZXR1cm4tMX1mdW5jdGlvbiBCaG4odCl7dmFyIGUsbixyLHMsbztmb3Iobj11KHQuZyw2NzQpLHI9dC5pLTE7cj49MDstLXIpZm9yKGU9bltyXSxzPTA7czxyOysrcylpZihvPW5bc10sa2xlKHQsZSxvKSl7bDYodCxyKTticmVha319ZnVuY3Rpb24gUmhuKHQpe3ZhciBlPXQuZTtmdW5jdGlvbiBuKHIpe3JldHVybiFyfHxyLmxlbmd0aD09MD8iIjoiCSIrci5qb2luKGAKCWApfXJldHVybiBlJiYoZS5zdGFja3x8bih0W1hhdF0pKX1mdW5jdGlvbiBFM3QodCl7V20oKTt2YXIgZTtzd2l0Y2goZT10LlBjKCksZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gQXV0O2Nhc2UgMTpyZXR1cm4gbmV3IFJudChMcihlWzBdKSk7ZGVmYXVsdDpyZXR1cm4gbmV3IHZydChhaG4oZSkpfX1mdW5jdGlvbiBvdih0LGUpe3N3aXRjaChlLmcpe2Nhc2UgMTpyZXR1cm4gJHgodC5qLChqdSgpLGo3dCkpO2Nhc2UgMjpyZXR1cm4gJHgodC5qLChqdSgpLHo3dCkpO2RlZmF1bHQ6cmV0dXJuIHduKCksd24oKSxpb319ZnVuY3Rpb24gVDN0KHQsZSl7c3dpdGNoKGUpe2Nhc2UgMzpKdyh0LDApO3JldHVybjtjYXNlIDQ6dHYodCwwKTtyZXR1cm47Y2FzZSA1Omt1KHQsMCk7cmV0dXJuO2Nhc2UgNjpFdSh0LDApO3JldHVybn1aeXQodCxlKX1mdW5jdGlvbiBuc3QoKXtuc3Q9WixIUigpLHZHPShUZSgpLCR2KSxubWU9QTEobHQoY3QoY2Z0LDEpLHprdCwxNDYsMCxbT08sVGYsVjYsanYsV3ksaGh0LFM3LEE3LGZodCxMUyxKNCxxMix0NV0pKX1mdW5jdGlvbiBDaWUodCl7dmFyIGUsbjtlPXQuZD09KGg2KCksZzcpLG49RTR0KHQpLGUmJiFufHwhZSYmbj9KdCh0LmEsKFRlKCksSWQpLCh0MCgpLFVPKSk6SnQodC5hLChUZSgpLElkKSwodDAoKSxHTykpfWZ1bmN0aW9uIGpobih0LGUpe3ZhciBuO3JldHVybiBuPXUoQmwodCxjMihuZXcga2UsbmV3IGNlLG5ldyBYbixsdChjdChmbCwxKSxvZSwxMzIsMCxbKE8xKCksVWwpXSkpKSwxNSksbi5RYyhLWXQobi5nYygpKSl9ZnVuY3Rpb24ganooKXtqej1aLExmdD1uZXcgY2ooIlNJTVBMRSIsMCksQkF0PW5ldyBjaigiR1JPVVBfREVDIiwxKSxqQXQ9bmV3IGNqKCJHUk9VUF9NSVhFRCIsMiksUkF0PW5ldyBjaigiR1JPVVBfSU5DIiwzKX1mdW5jdGlvbiByc3QoKXtyc3Q9WixqZnQ9bmV3IGZCLGNMdD1uZXcgZEIsdUx0PW5ldyBnQixsTHQ9bmV3IE5rLGhMdD1uZXcgcEIsZkx0PW5ldyBiQixkTHQ9bmV3IHNKLGdMdD1uZXcgQmsscEx0PW5ldyBSa31mdW5jdGlvbiBfaWUodCxlLG4pe1BlZSgpLF9xdC5jYWxsKHRoaXMpLHRoaXMuYT10MihkcGUsW2VlLGU2dF0sWzU5NSwyMTJdLDAsW2NWLEd1dF0sMiksdGhpcy5jPW5ldyBGeCx0aGlzLmc9dCx0aGlzLmY9ZSx0aGlzLmQ9bn1mdW5jdGlvbiBDM3QodCxlKXt0aGlzLm49dDIoT2IsW2VlLHdvdF0sWzM2NCwyNV0sMTQsW2UscHMoYi5NYXRoLmNlaWwodC8zMikpXSwyKSx0aGlzLm89dCx0aGlzLnA9ZSx0aGlzLmo9dC0xPj4xLHRoaXMuaz1lLTE+PjF9ZnVuY3Rpb24gJGhuKHQsZSl7dnIoZSwiRW5kIGxhYmVsIHBvc3QtcHJvY2Vzc2luZyIsMSksbHMoUmkoV28obmV3IFRuKG51bGwsbmV3IF9uKHQuYiwxNikpLG5ldyBrSyksbmV3IEVLKSxuZXcgVEspLG9yKGUpfWZ1bmN0aW9uIHpobih0LGUsbil7dmFyIHIscztyZXR1cm4gcj1YdCh0LnBbZS5pLnBdKStYdCh0LmRbZS5pLnBdKStlLm4uYitlLmEuYixzPVh0KHQucFtuLmkucF0pK1h0KHQuZFtuLmkucF0pK24ubi5iK24uYS5iLHMtcn1mdW5jdGlvbiBxaG4odCxlLG4pe3ZhciByLHM7Zm9yKHI9TnMobixjbykscz0wO3ljKHIsMCkhPTAmJnM8ZTtzKyspcj1QYShyLE5zKHRbc10sY28pKSx0W3NdPUFyKHIpLHI9JHAociwzMik7cmV0dXJuIEFyKHIpfWZ1bmN0aW9uICR6KHQpe3ZhciBlLG4scixzO2ZvcihzPTAsbj0wLHI9dC5sZW5ndGg7bjxyO24rKyllPShScihuLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQobikpLGU8NjQmJihzPVMxKHMsRjAoMSxlKSkpO3JldHVybiBzfWZ1bmN0aW9uIEhobih0KXt2YXIgZTtyZXR1cm4gdD09bnVsbD9udWxsOm5ldyBScCgoZT0kYyh0LCEwKSxlLmxlbmd0aD4wJiYoUnIoMCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KDApPT00Myk/ZS5zdWJzdHIoMSk6ZSkpfWZ1bmN0aW9uIFZobih0KXt2YXIgZTtyZXR1cm4gdD09bnVsbD9udWxsOm5ldyBScCgoZT0kYyh0LCEwKSxlLmxlbmd0aD4wJiYoUnIoMCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KDApPT00Myk/ZS5zdWJzdHIoMSk6ZSkpfWZ1bmN0aW9uIF8zdCh0LGUpe3ZhciBuO3JldHVybiB0Lmk+MCYmKGUubGVuZ3RoPHQuaSYmKG49TUQob2woZSkuYyx0LmkpLGU9biksRGModC5nLDAsZSwwLHQuaSkpLGUubGVuZ3RoPnQuaSYmdHMoZSx0LmksbnVsbCksZX1mdW5jdGlvbiBaYyh0LGUsbil7dmFyIHIscyxvO3JldHVybiB0LmVqKCk/KHI9dC5pLG89dC5maigpLFVEKHQscixlKSxzPXQuWmkoMyxudWxsLGUscixvKSxuP24uRWkocyk6bj1zKTpVRCh0LHQuaSxlKSxufWZ1bmN0aW9uIEdobih0LGUsbil7dmFyIHIscztyZXR1cm4gcj1uZXcgejAodC5lLDQsMTAsKHM9ZS5jLF90KHMsODgpP3UocywyNik6KGRuKCksS2gpKSxudWxsLEhnKHQsZSksITEpLG4/bi5FaShyKTpuPXIsbn1mdW5jdGlvbiBVaG4odCxlLG4pe3ZhciByLHM7cmV0dXJuIHI9bmV3IHowKHQuZSwzLDEwLG51bGwsKHM9ZS5jLF90KHMsODgpP3UocywyNik6KGRuKCksS2gpKSxIZyh0LGUpLCExKSxuP24uRWkocik6bj1yLG59ZnVuY3Rpb24gU2llKHQpeyRtKCk7dmFyIGU7cmV0dXJuIGU9bmV3IHhvKHUodC5lLldlKCh1aSgpLGM1KSksOCkpLHQuQi5IYygobGwoKSxSNykpJiYoZS5hPD0wJiYoZS5hPTIwKSxlLmI8PTAmJihlLmI9MjApKSxlfWZ1bmN0aW9uIEFpZSh0KXtjeSgpO3ZhciBlO3JldHVybih0LnE/dC5xOih3bigpLHduKCksdTApKS5fYigoVGUoKSxCdikpP2U9dShRKHQsQnYpLDE5Nyk6ZT11KFEoTmEodCksQVMpLDE5NyksZX1mdW5jdGlvbiBveSh0LGUpe3ZhciBuLHI7cmV0dXJuIHI9bnVsbCxVcyh0LChUZSgpLGJHKSkmJihuPXUoUSh0LGJHKSw5NCksbi5YZShlKSYmKHI9bi5XZShlKSkpLHI9PW51bGwmJihyPVEoTmEodCksZSkpLHJ9ZnVuY3Rpb24gTGllKHQsZSl7dmFyIG4scixzO3JldHVybiBfdChlLDQyKT8obj11KGUsNDIpLHI9bi5jZCgpLHM9c3kodC5SYygpLHIpLHBkKHMsbi5kZCgpKSYmKHMhPW51bGx8fHQuUmMoKS5fYihyKSkpOiExfWZ1bmN0aW9uIGlzdCh0LGUpe3ZhciBuLHIscztyZXR1cm4gdC5mPjA/KHQucWooKSxyPWU9PW51bGw/MDpIaShlKSxzPShyJndpKSV0LmQubGVuZ3RoLG49TGNlKHQscyxyLGUpLG4hPS0xKTohMX1mdW5jdGlvbiBYZih0LGUpe3ZhciBuLHIscztyZXR1cm4gdC5mPjAmJih0LnFqKCkscj1lPT1udWxsPzA6SGkoZSkscz0ociZ3aSkldC5kLmxlbmd0aCxuPWw1dCh0LHMscixlKSxuKT9uLmRkKCk6bnVsbH1mdW5jdGlvbiBYRCh0LGUpe3ZhciBuLHIscyxvO2ZvcihvPW91KHQuZS5UZygpLGUpLG49dSh0LmcsMTE5KSxzPTA7czx0Lmk7KytzKWlmKHI9bltzXSxvLnJsKHIuYWsoKSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gTWllKHQpe2lmKHQuYj09bnVsbCl7Zm9yKDt0LmEuT2IoKTspaWYodC5iPXQuYS5QYigpLCF1KHQuYiw0OSkuWmcoKSlyZXR1cm4hMDtyZXR1cm4gdC5iPW51bGwsITF9ZWxzZSByZXR1cm4hMH1mdW5jdGlvbiBEaWUodCxlKXt0Lm1qKCk7dHJ5e3QuZC5WYyh0LmUrKyxlKSx0LmY9dC5kLmosdC5nPS0xfWNhdGNoKG4pe3Rocm93IG49V2kobiksX3Qobiw3Myk/aXQobmV3IHJoKTppdChuKX19ZnVuY3Rpb24genoodCxlKXtnMnQoKTt2YXIgbixyO3JldHVybiBuPVVNKChTUigpLFNSKCksY1MpKSxyPW51bGwsZT09biYmKHI9dShOYyhpRXQsdCksNjE1KSkscnx8KHI9bmV3IHBYdCh0KSxlPT1uJiZrbyhpRXQsdCxyKSkscn1mdW5jdGlvbiBJaWUodCxlKXt2YXIgbixyO3QuYT1QYSh0LmEsMSksdC5jPWIuTWF0aC5taW4odC5jLGUpLHQuYj1iLk1hdGgubWF4KHQuYixlKSx0LmQrPWUsbj1lLXQuZixyPXQuZStuLHQuZj1yLXQuZS1uLHQuZT1yfWZ1bmN0aW9uIFdobih0LGUpe3ZhciBuO3QuYz1lLHQuYT1NaG4oZSksdC5hPDU0JiYodC5mPShuPWUuZD4xP1MxKEYwKGUuYVsxXSwzMiksTnMoZS5hWzBdLGNvKSk6TnMoZS5hWzBdLGNvKSxZdyhfYShlLmUsbikpKSl9ZnVuY3Rpb24gUUQodCxlKXt2YXIgbjtyZXR1cm4gQm8odCkmJkJvKGUpJiYobj10JWUsQkk8biYmbjxDMik/bjpLcCgoeXh0KEJvKHQpP0xoKHQpOnQsQm8oZSk/TGgoZSk6ZSwhMCksaGIpKX1mdW5jdGlvbiBzXyh0LGUpe3ZhciBuO2Q1bihlKSxuPXUoUSh0LChUZSgpLHVHKSksMjc2KSxuJiZKdCh0LHVHLFUxbihuKSksRGcodC5jKSxEZyh0LmYpLFNtdCh0LmQpLFNtdCh1KFEodCxkRyksMjA3KSl9ZnVuY3Rpb24gT2llKHQpe3RoaXMuZT1OdChDcixYciwyNSx0Lmxlbmd0aCwxNSwxKSx0aGlzLmM9TnQocGwsbzAsMjUsdC5sZW5ndGgsMTYsMSksdGhpcy5iPU50KHBsLG8wLDI1LHQubGVuZ3RoLDE2LDEpLHRoaXMuZj0wfWZ1bmN0aW9uIFlobih0KXt2YXIgZSxuO2Zvcih0Lmo9TnQoYWEsdm8sMjUsdC5wLmMubGVuZ3RoLDE1LDEpLG49bmV3IFModC5wKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMCksdC5qW2UucF09ZS5vLmIvdC5pfWZ1bmN0aW9uIHNzdCh0KXt2YXIgZTt0LmMhPTAmJihlPXUoTmUodC5hLHQuYiksMjg3KSxlLmI9PTE/KCsrdC5iLHQuYjx0LmEuYy5sZW5ndGgmJmxSKHUoTmUodC5hLHQuYiksMjg3KSkpOi0tZS5iLC0tdC5jKX1mdW5jdGlvbiBLaG4odCl7dmFyIGU7ZT10LmE7ZG8gZT11KE1yKG5ldyBhcihscihEcyhlKS5hLktjKCksbmV3IHopKSksMTcpLmQuaSxlLms9PShWbigpLHRhKSYmbGUodC5lLGUpO3doaWxlKGUuaz09KFZuKCksdGEpKX1mdW5jdGlvbiBTM3QoKXtTM3Q9WixGQXQ9bmV3IE93KDE1KSxQNGU9bmV3IGVvKCh1aSgpLFUyKSxGQXQpLE40ZT1uZXcgZW8oVzIsMTUpLEY0ZT1uZXcgZW8oRWZ0LHBlKDApKSxPNGU9bmV3IGVvKFc2LEdFKX1mdW5jdGlvbiBBbCgpe0FsPVosb1A9bmV3IG9qKCJQT1JUUyIsMCksSzI9bmV3IG9qKCJQT1JUX0xBQkVMUyIsMSksYVA9bmV3IG9qKCJOT0RFX0xBQkVMUyIsMiksSnk9bmV3IG9qKCJNSU5JTVVNX1NJWkUiLDMpfWZ1bmN0aW9uIFpEKHQsZSl7dmFyIG4scjtmb3Iocj1lLmxlbmd0aCxuPTA7bjxyO24rPTIpamModCwoUnIobixlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG4pKSwoUnIobisxLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQobisxKSkpfWZ1bmN0aW9uIFBpZSh0LGUsbil7dmFyIHIscyxvLGg7Zm9yKG89ZS10LmUsaD1uLXQuZixzPW5ldyBTKHQuYSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTg3KSx0SShyLHIucytvLHIudCtoKTt0LmU9ZSx0LmY9bn1mdW5jdGlvbiBYaG4odCxlKXt2YXIgbixyLHMsbztmb3Iobz1lLmIuYix0LmE9bmV3IFppLHQuYj1OdChDcixYciwyNSxvLDE1LDEpLG49MCxzPWVpKGUuYiwwKTtzLmIhPXMuZC5jOylyPXUodGkocyksODYpLHIuZz1uKyt9ZnVuY3Rpb24gRmllKHQsZSl7dmFyIG4scixzLG87cmV0dXJuIG49ZT4+NSxlJj0zMSxzPXQuZCtuKyhlPT0wPzA6MSkscj1OdChDcixYciwyNSxzLDE1LDEpLFcwbihyLHQuYSxuLGUpLG89bmV3IFgzKHQuZSxzLHIpLE45KG8pLG99ZnVuY3Rpb24gQTN0KHQsZSxuKXt2YXIgcixzO3I9dShOYyh6NyxlKSwxMTcpLHM9dShOYyhnQSxlKSwxMTcpLG4/KGtvKHo3LHQsciksa28oZ0EsdCxzKSk6KGtvKGdBLHQsciksa28oejcsdCxzKSl9ZnVuY3Rpb24gTmllKHQsZSxuKXt2YXIgcixzLG87Zm9yKHM9bnVsbCxvPXQuYjtvOyl7aWYocj10LmEudWUoZSxvLmQpLG4mJnI9PTApcmV0dXJuIG87cj49MD9vPW8uYVsxXToocz1vLG89by5hWzBdKX1yZXR1cm4gc31mdW5jdGlvbiBCaWUodCxlLG4pe3ZhciByLHMsbztmb3Iocz1udWxsLG89dC5iO287KXtpZihyPXQuYS51ZShlLG8uZCksbiYmcj09MClyZXR1cm4gbztyPD0wP289by5hWzBdOihzPW8sbz1vLmFbMV0pfXJldHVybiBzfWZ1bmN0aW9uIFFobih0LGUsbixyKXt2YXIgcyxvLGg7cmV0dXJuIHM9ITEsSTRuKHQuZixuLHIpJiYoa2ZuKHQuZix0LmFbZV1bbl0sdC5hW2VdW3JdKSxvPXQuYVtlXSxoPW9bcl0sb1tyXT1vW25dLG9bbl09aCxzPSEwKSxzfWZ1bmN0aW9uIEwzdCh0LGUsbixyLHMpe3ZhciBvLGgsZDtmb3IoaD1zO2UuYiE9ZS5jOylvPXUoSHgoZSksMTApLGQ9dShLbyhvLHIpLlhiKDApLDExKSx0LmRbZC5wXT1oKyssbi5jW24uYy5sZW5ndGhdPWQ7cmV0dXJuIGh9ZnVuY3Rpb24gTTN0KHQsZSxuKXt2YXIgcixzLG8saCxkO3JldHVybiBoPXQuayxkPWUuayxyPW5baC5nXVtkLmddLHM9eWUob3kodCxyKSksbz15ZShveShlLHIpKSxiLk1hdGgubWF4KChPbihzKSxzKSwoT24obyksbykpfWZ1bmN0aW9uIFpobih0LGUsbil7dmFyIHIscyxvLGg7Zm9yKHI9bi90LmMubGVuZ3RoLHM9MCxoPW5ldyBTKHQpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDIwMCkscXJlKG8sby5mK3IqcyksRGRuKG8sZSxyKSwrK3N9ZnVuY3Rpb24gUmllKHQsZSxuKXt2YXIgcixzLG8saDtmb3Iocz11KHRyKHQuYixuKSwxNzcpLHI9MCxoPW5ldyBTKGUuaik7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTEzKSxzW28uZC5wXSYmKytyO3JldHVybiByfWZ1bmN0aW9uIGppZSh0KXt2YXIgZSxuO3JldHVybiBlPXUoRG4odC5hLDQpLDEyNiksZSE9bnVsbD8obj1OdChGZnQsbHV0LDQxNSxlLmxlbmd0aCwwLDEpLERjKGUsMCxuLDAsZS5sZW5ndGgpLG4pOm41ZX1mdW5jdGlvbiBKaG4oKXt2YXIgdDtyZXR1cm4gWkghPTAmJih0PXBhbigpLHQtUGdlPjJlMyYmKFBnZT10LEpIPWIuc2V0VGltZW91dChzWGUsMTApKSksWkgrKz09MD8oT29uKChuYnQoKSxyRXQpKSwhMCk6ITF9ZnVuY3Rpb24gdGZuKHQsZSl7dmFyIG4scixzO2ZvcihyPW5ldyBhcihscihEcyh0KS5hLktjKCksbmV3IHopKTt6cihyKTspaWYobj11KE1yKHIpLDE3KSxzPW4uZC5pLHMuYz09ZSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBEM3QodCxlKXt2YXIgbixyO2lmKF90KGUsMjQ1KSl7cj11KGUsMjQ1KTt0cnl7cmV0dXJuIG49dC52ZChyKSxuPT0wfWNhdGNoKHMpe2lmKHM9V2kocyksIV90KHMsMjA1KSl0aHJvdyBpdChzKX19cmV0dXJuITF9ZnVuY3Rpb24gZWZuKCl7cmV0dXJuIEVycm9yLnN0YWNrVHJhY2VMaW1pdD4wPyhiLkVycm9yLnN0YWNrVHJhY2VMaW1pdD1FcnJvci5zdGFja1RyYWNlTGltaXQ9NjQsITApOiJzdGFjayJpbiBuZXcgRXJyb3J9ZnVuY3Rpb24gbmZuKHQsZSl7cmV0dXJuIGsxKCksazEoKSx3ZihzYiksKGIuTWF0aC5hYnModC1lKTw9c2J8fHQ9PWV8fGlzTmFOKHQpJiZpc05hTihlKT8wOnQ8ZT8tMTp0PmU/MTpJdyhpc05hTih0KSxpc05hTihlKSkpPjB9ZnVuY3Rpb24gSTN0KHQsZSl7cmV0dXJuIGsxKCksazEoKSx3ZihzYiksKGIuTWF0aC5hYnModC1lKTw9c2J8fHQ9PWV8fGlzTmFOKHQpJiZpc05hTihlKT8wOnQ8ZT8tMTp0PmU/MTpJdyhpc05hTih0KSxpc05hTihlKSkpPDB9ZnVuY3Rpb24gJGllKHQsZSl7cmV0dXJuIGsxKCksazEoKSx3ZihzYiksKGIuTWF0aC5hYnModC1lKTw9c2J8fHQ9PWV8fGlzTmFOKHQpJiZpc05hTihlKT8wOnQ8ZT8tMTp0PmU/MTpJdyhpc05hTih0KSxpc05hTihlKSkpPD0wfWZ1bmN0aW9uIGFzdCh0LGUpe2Zvcih2YXIgbj0wOyFlW25dfHxlW25dPT0iIjspbisrO2Zvcih2YXIgcj1lW24rK107bjxlLmxlbmd0aDtuKyspIWVbbl18fGVbbl09PSIifHwocis9dCtlW25dKTtyZXR1cm4gcn1mdW5jdGlvbiBNaCh0LGUsbil7dmFyIHIscyxvLGg7Zm9yKG89ZStuLExtdChlLG8sdC5sZW5ndGgpLGg9IiIscz1lO3M8bzspcj1iLk1hdGgubWluKHMrMWU0LG8pLGgrPUdubih0LnNsaWNlKHMscikpLHM9cjtyZXR1cm4gaH1mdW5jdGlvbiB6aWUodCl7dmFyIGUsbixyLHMsbztpZih0PT1udWxsKXJldHVybiBudWxsO2ZvcihvPW5ldyBoZSxuPU9pdCh0KSxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxsZShvLCRjKGUsITApKTtyZXR1cm4gb31mdW5jdGlvbiBxaWUodCl7dmFyIGUsbixyLHMsbztpZih0PT1udWxsKXJldHVybiBudWxsO2ZvcihvPW5ldyBoZSxuPU9pdCh0KSxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxsZShvLCRjKGUsITApKTtyZXR1cm4gb31mdW5jdGlvbiBIaWUodCl7dmFyIGUsbixyLHMsbztpZih0PT1udWxsKXJldHVybiBudWxsO2ZvcihvPW5ldyBoZSxuPU9pdCh0KSxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxsZShvLCRjKGUsITApKTtyZXR1cm4gb31mdW5jdGlvbiBWaWUodCxlKXt2YXIgbixyLHM7aWYodC5jKXR2KHQuYyxlKTtlbHNlIGZvcihuPWUtUnUodCkscz1uZXcgUyh0LmQpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDE1NyksVmllKHIsUnUocikrbil9ZnVuY3Rpb24gR2llKHQsZSl7dmFyIG4scixzO2lmKHQuYylKdyh0LmMsZSk7ZWxzZSBmb3Iobj1lLUVsKHQpLHM9bmV3IFModC5hKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxNTcpLEdpZShyLEVsKHIpK24pfWZ1bmN0aW9uIHJmbih0LGUpe3ZhciBuLHIscyxvO2ZvcihzPW5ldyBYYyhlLmdjKCkpLHI9ZS5LYygpO3IuT2IoKTspbj1yLlBiKCksbz15YXQodCx1KG4sNTYpKSxvJiYocy5jW3MuYy5sZW5ndGhdPW8pO3JldHVybiBzfWZ1bmN0aW9uIHF6KHQsZSl7dmFyIG4scixzO3JldHVybiB0LnFqKCkscj1lPT1udWxsPzA6SGkoZSkscz0ociZ3aSkldC5kLmxlbmd0aCxuPWw1dCh0LHMscixlKSxuPyh0bmUodCxuKSxuLmRkKCkpOm51bGx9ZnVuY3Rpb24gY3YodCl7dmFyIGUsbjtmb3Iobj1yb2UodCksZT1udWxsO3QuYz09MjspZmkodCksZXx8KGU9KGdpKCksZ2koKSxuZXcgZDkoMikpLEUyKGUsbiksbj1lKSxuLiRsKHJvZSh0KSk7cmV0dXJuIG59ZnVuY3Rpb24gcEUodCl7dmFyIGUsbixyO2lmKHI9bnVsbCxlPUFkIGluIHQuYSxuPSFlLG4pdGhyb3cgaXQobmV3IHVkKCJFdmVyeSBlbGVtZW50IG11c3QgaGF2ZSBhbiBpZC4iKSk7cmV0dXJuIHI9ZjYoQjAodCxBZCkpLHJ9ZnVuY3Rpb24gSHoodCl7dmFyIGUsbixyO2lmKHI9dC5aZygpLCFyKWZvcihlPTAsbj10LmVoKCk7bjtuPW4uZWgoKSl7aWYoKytlPnZvdClyZXR1cm4gbi5maCgpO2lmKHI9bi5aZygpLHJ8fG49PXQpYnJlYWt9cmV0dXJuIHJ9ZnVuY3Rpb24gTzN0KHQpe3JldHVybiBDJCgpLF90KHQsMTU2KT91KHRyKGRQLFVnZSksMjg4KS52Zyh0KTpUbChkUCxvbCh0KSk/dSh0cihkUCxvbCh0KSksMjg4KS52Zyh0KTpudWxsfWZ1bmN0aW9uIGlmbih0KXtpZihWeihYRSx0KSlyZXR1cm4gTm4oKSxyNztpZihWeihWY3QsdCkpcmV0dXJuIE5uKCksRjI7dGhyb3cgaXQobmV3IEZuKCJFeHBlY3RpbmcgdHJ1ZSBvciBmYWxzZSIpKX1mdW5jdGlvbiBzZm4odCxlKXtpZihlLmM9PXQpcmV0dXJuIGUuZDtpZihlLmQ9PXQpcmV0dXJuIGUuYzt0aHJvdyBpdChuZXcgRm4oIklucHV0IGVkZ2UgaXMgbm90IGNvbm5lY3RlZCB0byB0aGUgaW5wdXQgcG9ydC4iKSl9ZnVuY3Rpb24gVWllKHQsZSl7cmV0dXJuIHQuZT5lLmU/MTp0LmU8ZS5lPy0xOnQuZD5lLmQ/dC5lOnQuZDxlLmQ/LWUuZTp0LmUqcXl0KHQuYSxlLmEsdC5kKX1mdW5jdGlvbiBXaWUodCl7cmV0dXJuIHQ+PTQ4JiZ0PDQ4K2IuTWF0aC5taW4oMTAsMTApP3QtNDg6dD49OTcmJnQ8OTc/dC05NysxMDp0Pj02NSYmdDw2NT90LTY1KzEwOi0xfWZ1bmN0aW9uIFlpZSh0LGUpe3ZhciBuO3JldHVybiBWdChlKT09PVZ0KHQpPyEwOiFfdChlLDIxKXx8KG49dShlLDIxKSxuLmdjKCkhPXQuZ2MoKSk/ITE6dC5JYyhuKX1mdW5jdGlvbiBhZm4odCxlKXt2YXIgbixyLHMsbztyZXR1cm4gcj10LmEubGVuZ3RoLTEsbj1lLXQuYiZyLG89dC5jLWUmcixzPXQuYy10LmImcixUV3QobjxzKSxuPj1vPyhzbG4odCxlKSwtMSk6KGFsbih0LGUpLDEpfWZ1bmN0aW9uIG9mbih0LGUpe3ZhciBuLHI7Zm9yKG49KFJyKGUsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChlKSkscj1lKzE7cjx0Lmxlbmd0aCYmKFJyKHIsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChyKT09bik7KSsrcjtyZXR1cm4gci1lfWZ1bmN0aW9uIFAzdCh0KXtzd2l0Y2godC5nKXtjYXNlIDEyOmNhc2UgMTM6Y2FzZSAxNDpjYXNlIDE1OmNhc2UgMTY6Y2FzZSAxNzpjYXNlIDE4OmNhc2UgMTk6Y2FzZSAyMDpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBjZm4odCxlKXt2YXIgbj10LmEscjtlPVN0cmluZyhlKSxuLmhhc093blByb3BlcnR5KGUpJiYocj1uW2VdKTt2YXIgcz0oX2l0KCksUHV0KVt0eXBlb2Ygcl0sbz1zP3Mocik6VXl0KHR5cGVvZiByKTtyZXR1cm4gb31mdW5jdGlvbiB1dih0LGUpe2lmKHQuYTwwKXRocm93IGl0KG5ldyBObygiRGlkIG5vdCBjYWxsIGJlZm9yZSguLi4pIG9yIGFmdGVyKC4uLikgYmVmb3JlIGNhbGxpbmcgYWRkKC4uLikuIikpO3JldHVybiBSMnQodCx0LmEsZSksdH1mdW5jdGlvbiB1Zm4odCxlLG4scil7dmFyIHMsbztlLmMubGVuZ3RoIT0wJiYocz1XMm4obixyKSxvPVVwbihlKSxscyhleihuZXcgVG4obnVsbCxuZXcgX24obywxKSksbmV3IFFRKSxuZXcgJFh0KHQsbixzLHIpKSl9ZnVuY3Rpb24gbzYodCxlLG4pe3ZhciByO3QuRGImZT9uPT1udWxsP0libih0LGUpOihyPVNzdCh0LGUpLHI9PS0xP3QuRWI9bjp0cyh1Mih0LkViKSxyLG4pKTpuIT1udWxsJiZydm4odCxlLG4pfWZ1bmN0aW9uIHN1KHQpe3ZhciBlLG47cmV0dXJuIHQuRGImMzJ8fChuPShlPXUoRG4odCwxNiksMjYpLEpuKGV8fHQuemgoKSktSm4odC56aCgpKSksbiE9MCYmbzYodCwzMixOdChRbixEZSwxLG4sNSwxKSkpLHR9ZnVuY3Rpb24gbGZuKHQpe3ZhciBlO3JldHVybiB0LmJ8fHRYZSh0LChlPVZaZSh0LmUsdC5hKSwhZXx8IWhuKFZjdCxYZigoIWUuYiYmKGUuYj1uZXcga2woKGRuKCksUWEpLGNjLGUpKSxlLmIpLCJxdWFsaWZpZWQiKSkpKSx0LmN9ZnVuY3Rpb24gaGZuKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIHI9dShBdChhbCh0LmEpLGUpLDg3KSxvPShzPXIuYyxzfHwoZG4oKSxXMSkpLChvLmtoKCk/WnAodC5iLHUobyw0OSkpOm8pPT1uP0xxKHIpOkg4KHIsbiksb31mdW5jdGlvbiBmZm4odCxlKXsoIWUmJmNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQhPW51bGw/Y29uc29sZS5ncm91cENvbGxhcHNlZDpjb25zb2xlLmdyb3VwPz9jb25zb2xlLmxvZykuY2FsbChjb25zb2xlLHQpfWZ1bmN0aW9uIGRmbih0LGUsbixyKXtyPT10LHUobi5iLDY1KSx1KG4uYiw2NSksdShyLmIsNjUpLHUoci5iLDY1KS5jLmIsQW10KHIsZSx0KX1mdW5jdGlvbiBnZm4odCl7dmFyIGUsbjtmb3IoZT1uZXcgUyh0LmcpO2UuYTxlLmMuYy5sZW5ndGg7KXUoSihlKSw1NjIpO249bmV3IEpjZSh0LmcsWHQodC5hKSx0LmMpLHg1bihuKSx0Lmc9bi5iLHQuZD1uLmF9ZnVuY3Rpb24gRjN0KHQsZSxuKXtlLmI9Yi5NYXRoLm1heChlLmIsLW4uYSksZS5jPWIuTWF0aC5tYXgoZS5jLG4uYS10LmEpLGUuZD1iLk1hdGgubWF4KGUuZCwtbi5iKSxlLmE9Yi5NYXRoLm1heChlLmEsbi5iLXQuYil9ZnVuY3Rpb24gcGZuKHQsZSl7cmV0dXJuIHQuZTxlLmU/LTE6dC5lPmUuZT8xOnQuZjxlLmY/LTE6dC5mPmUuZj8xOkhpKHQpLUhpKGUpfWZ1bmN0aW9uIFZ6KHQsZSl7cmV0dXJuIE9uKHQpLGU9PW51bGw/ITE6aG4odCxlKT8hMDp0Lmxlbmd0aD09ZS5sZW5ndGgmJmhuKHQudG9Mb3dlckNhc2UoKSxlLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIGJmbih0LGUpe3ZhciBuLHIscyxvO2ZvcihyPTAscz1lLmdjKCk7cjxzOysrciluPWUuaWwociksX3Qobiw5OSkmJnUobiwxOCkuQmImZGMmJihvPWUuamwociksbyE9bnVsbCYmeWF0KHQsdShvLDU2KSkpfWZ1bmN0aW9uIEtpZSh0LGUsbil7dmFyIHIscyxvO2ZvcihvPW5ldyBTKG4uYSk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMjIxKSxyPW5ldyBtaih1KHRyKHQuYSxzLmIpLDY1KSksbGUoZS5hLHIpLEtpZSh0LHIscyl9ZnVuY3Rpb24gdjIodCl7dmFyIGUsbjtyZXR1cm4geWModCwtMTI5KT4wJiZ5Yyh0LDEyOCk8MD8oZT1Bcih0KSsxMjgsbj0oZEt0KCksZEV0KVtlXSwhbiYmKG49ZEV0W2VdPW5ldyBBbSh0KSksbik6bmV3IEFtKHQpfWZ1bmN0aW9uIFhpZSh0LGUpe3ZhciBuLHI7cmV0dXJuIG49ZS5IaCh0LmEpLG4mJihyPUJyKFhmKCghbi5iJiYobi5iPW5ldyBrbCgoZG4oKSxRYSksY2MsbikpLG4uYiksY2kpKSxyIT1udWxsKT9yOmUubmUoKX1mdW5jdGlvbiB3Zm4odCxlKXt2YXIgbixyO3JldHVybiBuPWUuSGgodC5hKSxuJiYocj1CcihYZigoIW4uYiYmKG4uYj1uZXcga2woKGRuKCksUWEpLGNjLG4pKSxuLmIpLGNpKSksciE9bnVsbCk/cjplLm5lKCl9ZnVuY3Rpb24gdmZuKHQsZSl7X3J0KCk7dmFyIG4scjtmb3Iocj1uZXcgYXIobHIoVTAodCkuYS5LYygpLG5ldyB6KSk7enIocik7KWlmKG49dShNcihyKSwxNyksbi5kLmk9PWV8fG4uYy5pPT1lKXJldHVybiBuO3JldHVybiBudWxsfWZ1bmN0aW9uIE4zdCh0LGUsbil7dGhpcy5jPXQsdGhpcy5mPW5ldyBoZSx0aGlzLmU9bmV3IENhLHRoaXMuaj1uZXcgR3d0LHRoaXMubj1uZXcgR3d0LHRoaXMuYj1lLHRoaXMuZz1uZXcgYWgoZS5jLGUuZCxlLmIsZS5hKSx0aGlzLmE9bn1mdW5jdGlvbiBvc3QodCl7dmFyIGUsbixyLHM7Zm9yKHRoaXMuYT1uZXcgTzAsdGhpcy5kPW5ldyBIcyx0aGlzLmU9MCxuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sIXRoaXMuZiYmKHRoaXMuZj1lKSxQcnQodGhpcyxlKX1mdW5jdGlvbiBRaWUodCl7cmIoKSx0Lmxlbmd0aD09MD8odGhpcy5lPTAsdGhpcy5kPTEsdGhpcy5hPWx0KGN0KENyLDEpLFhyLDI1LDE1LFswXSkpOih0aGlzLmU9MSx0aGlzLmQ9dC5sZW5ndGgsdGhpcy5hPXQsTjkodGhpcykpfWZ1bmN0aW9uIGFfKHQsZSxuKXtfcXQuY2FsbCh0aGlzKSx0aGlzLmE9TnQoZHBlLGU2dCwyMTIsKEtmKCksbHQoY3QoT3ksMSksb2UsMjMyLDAsW3NjLGV1LGFjXSkpLmxlbmd0aCwwLDEpLHRoaXMuYj10LHRoaXMuZD1lLHRoaXMuYz1ufWZ1bmN0aW9uIFppZSh0KXt0aGlzLmQ9bmV3IGhlLHRoaXMuZT1uZXcgYTIsdGhpcy5jPU50KENyLFhyLDI1LCh2ZSgpLGx0KGN0KFhhLDEpLHhjLDYxLDAsW1pvLFBuLEhuLG1yLEJuXSkpLmxlbmd0aCwxNSwxKSx0aGlzLmI9dH1mdW5jdGlvbiBtZm4odCl7dmFyIGUsbixyLHMsbyxoO2ZvcihoPXUoUSh0LChhZSgpLF9pKSksMTEpLEp0KGgsazcsdC5pLm4uYiksZT13ZCh0LmUpLHI9ZSxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxvYShuLGgpfWZ1bmN0aW9uIHlmbih0KXt2YXIgZSxuLHIscyxvLGg7Zm9yKG49dShRKHQsKGFlKCksX2kpKSwxMSksSnQobixrNyx0Lmkubi5iKSxlPXdkKHQuZykscz1lLG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLE9hKHIsbil9ZnVuY3Rpb24geGZuKHQpe3ZhciBlLG47cmV0dXJuIFVzKHQuZC5pLChUZSgpLFQ3KSk/KGU9dShRKHQuYy5pLFQ3KSwxOSksbj11KFEodC5kLmksVDcpLDE5KSxwdShlLmEsbi5hKT4wKTohMX1mdW5jdGlvbiBKaWUodCl7dmFyIGU7VnQocWUodCwodWkoKSxzNSkpKT09PVZ0KChHMCgpLHRVKSkmJihlcyh0KT8oZT11KHFlKGVzKHQpLHM1KSwzMzQpLHdvKHQsczUsZSkpOndvKHQsczUsWlMpKX1mdW5jdGlvbiBrZm4odCxlLG4pe3ZhciByLHM7cXN0KHQuZSxlLG4sKHZlKCksQm4pKSxxc3QodC5pLGUsbixIbiksdC5hJiYocz11KFEoZSwoYWUoKSxfaSkpLDExKSxyPXUoUShuLF9pKSwxMSksSXJ0KHQuZyxzLHIpKX1mdW5jdGlvbiB0c2UodCxlLG4pe3ZhciByLHMsbztyPWUuYy5wLG89ZS5wLHQuYltyXVtvXT1uZXcgd1F0KHQsZSksbiYmKHQuYVtyXVtvXT1uZXcgZTgoZSkscz11KFEoZSwoYWUoKSxQdikpLDEwKSxzJiZsbih0LmQscyxlKSl9ZnVuY3Rpb24gZXNlKHQsZSl7dmFyIG4scixzO2lmKGxlKGRWLHQpLGUuRmModCksbj11KHRyKEp1dCx0KSwyMSksbilmb3Iocz1uLktjKCk7cy5PYigpOylyPXUocy5QYigpLDMzKSxSbyhkVixyLDApIT0tMXx8ZXNlKHIsZSl9ZnVuY3Rpb24gRWZuKHQsZSxuKXt2YXIgcjsoSmdlPyhMaG4odCksITApOnRwZXx8bnBlPyhkOCgpLCEwKTplcGUmJihkOCgpLCExKSkmJihyPW5ldyBMWXQoZSksci5iPW4sX2duKHQscikpfWZ1bmN0aW9uIGNzdCh0LGUpe3ZhciBuO249IXQuQS5IYygoQWwoKSxLMikpfHx0LnE9PSh1YSgpLEdjKSx0LnUuSGMoKFp1KCksc2cpKT9uP0c1bih0LGUpOkRoZSh0LGUpOnQudS5IYyhDYikmJihuP2w1bih0LGUpOkdoZSh0LGUpKX1mdW5jdGlvbiBiRSh0LGUpe3ZhciBuLHI7aWYoKyt0LmosZSE9bnVsbCYmKG49KHI9dC5hLkNiLF90KHIsOTcpP3Uociw5NykuSmcoKTpudWxsKSx2Ym4oZSxuKSkpe282KHQuYSw0LG4pO3JldHVybn1vNih0LmEsNCx1KGUsMTI2KSl9ZnVuY3Rpb24gbnNlKHQsZSxuKXtyZXR1cm4gbmV3IGFoKGIuTWF0aC5taW4odC5hLGUuYSktbi8yLGIuTWF0aC5taW4odC5iLGUuYiktbi8yLGIuTWF0aC5hYnModC5hLWUuYSkrbixiLk1hdGguYWJzKHQuYi1lLmIpK24pfWZ1bmN0aW9uIFRmbih0LGUpe3ZhciBuLHI7cmV0dXJuIG49cHUodC5hLmMucCxlLmEuYy5wKSxuIT0wP246KHI9cHUodC5hLmQuaS5wLGUuYS5kLmkucCksciE9MD9yOnB1KGUuYS5kLnAsdC5hLmQucCkpfWZ1bmN0aW9uIENmbih0LGUsbil7dmFyIHIscyxvLGg7cmV0dXJuIG89ZS5qLGg9bi5qLG8hPWg/by5nLWguZzoocj10LmZbZS5wXSxzPXQuZltuLnBdLHI9PTAmJnM9PTA/MDpyPT0wPy0xOnM9PTA/MTpNcyhyLHMpKX1mdW5jdGlvbiByc2UodCxlLG4pe3ZhciByLHMsbztpZighbltlLmRdKWZvcihuW2UuZF09ITAscz1uZXcgUyh1NChlKSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMjEzKSxvPUJ6KHIsZSkscnNlKHQsbyxuKX1mdW5jdGlvbiBCM3QodCxlLG4pe3ZhciByO3N3aXRjaChyPW5bdC5nXVtlXSx0Lmcpe2Nhc2UgMTpjYXNlIDM6cmV0dXJuIG5ldyAkZSgwLHIpO2Nhc2UgMjpjYXNlIDQ6cmV0dXJuIG5ldyAkZShyLDApO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIF9mbih0LGUsbil7dmFyIHIscztzPXUoeHJ0KGUuZiksMjA5KTt0cnl7cy5aZSh0LG4pLEZubihlLmYscyl9Y2F0Y2gobyl7dGhyb3cgbz1XaShvKSxfdChvLDEwMik/KHI9byxpdChyKSk6aXQobyl9fWZ1bmN0aW9uIGlzZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2O3JldHVybiByPW51bGwsZD1FeHQoSzgoKSxlKSxvPW51bGwsZCYmKHM9bnVsbCx2PXh4dChkLG4pLGg9bnVsbCx2IT1udWxsJiYoaD10LlllKGQsdikpLHM9aCxvPXMpLHI9byxyfWZ1bmN0aW9uIFNmbih0LGUsbixyKXt2YXIgcyxvLGg7cmV0dXJuIHM9bmV3IHowKHQuZSwxLDEzLChoPWUuYyxofHwoZG4oKSxXMSkpLChvPW4uYyxvfHwoZG4oKSxXMSkpLEhnKHQsZSksITEpLHI/ci5FaShzKTpyPXMscn1mdW5jdGlvbiB1c3QodCxlLG4scil7dmFyIHM7aWYocz10Lmxlbmd0aCxlPj1zKXJldHVybiBzO2ZvcihlPWU+MD9lOjA7ZTxzJiYhU2l0KChScihlLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZSkpLG4scik7ZSsrKTtyZXR1cm4gZX1mdW5jdGlvbiBQMSh0LGUpe3ZhciBuLHI7Zm9yKHI9dC5jLmxlbmd0aCxlLmxlbmd0aDxyJiYoZT1MUihuZXcgQXJyYXkociksZSkpLG49MDtuPHI7KytuKXRzKGUsbix0LmNbbl0pO3JldHVybiBlLmxlbmd0aD5yJiZ0cyhlLHIsbnVsbCksZX1mdW5jdGlvbiBzc2UodCxlKXt2YXIgbixyO2ZvcihyPXQuYS5sZW5ndGgsZS5sZW5ndGg8ciYmKGU9TFIobmV3IEFycmF5KHIpLGUpKSxuPTA7bjxyOysrbil0cyhlLG4sdC5hW25dKTtyZXR1cm4gZS5sZW5ndGg+ciYmdHMoZSxyLG51bGwpLGV9ZnVuY3Rpb24gbTIodCxlLG4pe3ZhciByLHMsbztyZXR1cm4gcz11KHRyKHQuZSxlKSwzODcpLHM/KG89YXd0KHMsbiksWFV0KHQscyksbyk6KHI9bmV3IE93dCh0LGUsbiksa2kodC5lLGUsciksa1F0KHIpLG51bGwpfWZ1bmN0aW9uIEFmbih0KXt2YXIgZTtpZih0PT1udWxsKXJldHVybiBudWxsO2lmKGU9azJuKCRjKHQsITApKSxlPT1udWxsKXRocm93IGl0KG5ldyBwZXQoIkludmFsaWQgaGV4QmluYXJ5IHZhbHVlOiAnIit0KyInIikpO3JldHVybiBlfWZ1bmN0aW9uIEpEKHQpe3JldHVybiByYigpLHljKHQsMCk8MD95Yyh0LC0xKSE9MD9uZXcgeDR0KC0xLHo4KHQpKTpCdXQ6eWModCwxMCk8PTA/Q0V0W0FyKHQpXTpuZXcgeDR0KDEsdCl9ZnVuY3Rpb24gbHN0KCl7cmV0dXJuICRxKCksbHQoY3QoJHBlLDEpLG9lLDE1OSwwLFtScGUsQnBlLGpwZSxMcGUsQXBlLE1wZSxPcGUsSXBlLERwZSxOcGUsRnBlLFBwZSxfcGUsQ3BlLFNwZSxFcGUsa3BlLFRwZSx5cGUsbXBlLHhwZSxVdXRdKX1mdW5jdGlvbiBhc2UodCl7dmFyIGU7dGhpcy5kPW5ldyBoZSx0aGlzLmo9bmV3IENhLHRoaXMuZz1uZXcgQ2EsZT10LmcuYix0aGlzLmY9dShRKE5hKGUpLChUZSgpLFdsKSksMTAzKSx0aGlzLmU9WHQoeWUoV3ooZSxXeSkpKX1mdW5jdGlvbiBvc2UodCl7dGhpcy5iPW5ldyBoZSx0aGlzLmU9bmV3IGhlLHRoaXMuZD10LHRoaXMuYT0hcUMoUmkobmV3IFRuKG51bGwsbmV3IGp3KG5ldyBMMSh0LmIpKSksbmV3IFp0KG5ldyB6TikpKS5zZCgoUWIoKSxvNykpfWZ1bmN0aW9uIFFmKCl7UWY9Wixxbj1uZXcgT00oIlBBUkVOVFMiLDApLGVhPW5ldyBPTSgiTk9ERVMiLDEpLFBkPW5ldyBPTSgiRURHRVMiLDIpLFYyPW5ldyBPTSgiUE9SVFMiLDMpLHJwPW5ldyBPTSgiTEFCRUxTIiw0KX1mdW5jdGlvbiBsNCgpe2w0PVosRWI9bmV3IEZNKCJESVNUUklCVVRFRCIsMCksaVA9bmV3IEZNKCJKVVNUSUZJRUQiLDEpLElBdD1uZXcgRk0oIkJFR0lOIiwyKSxKUz1uZXcgRk0ocUUsMyksT0F0PW5ldyBGTSgiRU5EIiw0KX1mdW5jdGlvbiBMZm4odCl7dmFyIGU7c3dpdGNoKGU9dC55aShudWxsKSxlKXtjYXNlIDEwOnJldHVybiAwO2Nhc2UgMTU6cmV0dXJuIDE7Y2FzZSAxNDpyZXR1cm4gMjtjYXNlIDExOnJldHVybiAzO2Nhc2UgMjE6cmV0dXJuIDR9cmV0dXJuLTF9ZnVuY3Rpb24gaHN0KHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMTpyZXR1cm4gYW8oKSxyZztjYXNlIDQ6cmV0dXJuIGFvKCksemg7Y2FzZSAyOnJldHVybiBhbygpLENmO2Nhc2UgMzpyZXR1cm4gYW8oKSxuZ31yZXR1cm4gYW8oKSxoMH1mdW5jdGlvbiBNZm4odCxlLG4pe3ZhciByO3N3aXRjaChyPW4ucS5nZXRGdWxsWWVhcigpLWFiK2FiLHI8MCYmKHI9LXIpLGUpe2Nhc2UgMTp0LmErPXI7YnJlYWs7Y2FzZSAyOkpkKHQsciUxMDAsMik7YnJlYWs7ZGVmYXVsdDpKZCh0LHIsZSl9fWZ1bmN0aW9uIGVpKHQsZSl7dmFyIG4scjtpZihLbShlLHQuYiksZT49dC5iPj4xKWZvcihyPXQuYyxuPXQuYjtuPmU7LS1uKXI9ci5iO2Vsc2UgZm9yKHI9dC5hLmEsbj0wO248ZTsrK24pcj1yLmE7cmV0dXJuIG5ldyBTWXQodCxlLHIpfWZ1bmN0aW9uIEd6KCl7R3o9WixxdXQ9bmV3IElidCgiTlVNX09GX0VYVEVSTkFMX1NJREVTX1RIQU5fTlVNX09GX0VYVEVOU0lPTlNfTEFTVCIsMCksJEV0PW5ldyBJYnQoIkNPUk5FUl9DQVNFU19USEFOX1NJTkdMRV9TSURFX0xBU1QiLDEpfWZ1bmN0aW9uIERmbih0KXt2YXIgZSxuLHIscztmb3Iocj14cG4odCksWnMocixlMmUpLHM9dC5kLHMuYz1OdChRbixEZSwxLDAsNSwxKSxuPW5ldyBTKHIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDQ1NiksTHMocyxlLmIpfWZ1bmN0aW9uIGNzZSh0KXt2YXIgZSxuLHI7Zm9yKHI9KCF0Lm8mJih0Lm89bmV3IF9sKChKYygpLFNiKSxIdix0LDApKSx0Lm8pLG49ci5jLktjKCk7bi5lIT1uLmkuZ2MoKTspZT11KG4ubmooKSw0MiksZS5kZCgpO3JldHVybiB3RChyKX1mdW5jdGlvbiBJZm4odCl7dmFyIGU7angodShRKHQsKFRlKCksY3MpKSw5OCkpJiYoZT10LmIsV29lKChBbigwLGUuYy5sZW5ndGgpLHUoZS5jWzBdLDI5KSkpLFdvZSh1KE5lKGUsZS5jLmxlbmd0aC0xKSwyOSkpKX1mdW5jdGlvbiB1c2UodCxlKXt2YXIgbixyLHMsbztmb3Iobj0wLHM9bmV3IFMoZS5hKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxMCksbz1yLm8uYStyLmQuYytyLmQuYit0Lmosbj1iLk1hdGgubWF4KG4sbyk7cmV0dXJuIG59ZnVuY3Rpb24gVXoodCl7dmFyIGUsbixyLHM7Zm9yKHM9MCxuPTAscj10Lmxlbmd0aDtuPHI7bisrKWU9KFJyKG4sdC5sZW5ndGgpLHQuY2hhckNvZGVBdChuKSksZT49NjQmJmU8MTI4JiYocz1TMShzLEYwKDEsZS02NCkpKTtyZXR1cm4gc31mdW5jdGlvbiBXeih0LGUpe3ZhciBuLHI7cmV0dXJuIHI9bnVsbCxVcyh0LCh1aSgpLEs2KSkmJihuPXUoUSh0LEs2KSw5NCksbi5YZShlKSYmKHI9bi5XZShlKSkpLHI9PW51bGwmJk5hKHQpJiYocj1RKE5hKHQpLGUpKSxyfWZ1bmN0aW9uIGxzZSh0LGUpe3ZhciBuLHIscztzPWUuZC5pLHI9cy5rLCEocj09KFZuKCksT3MpfHxyPT16MSkmJihuPW5ldyBhcihscihEcyhzKS5hLktjKCksbmV3IHopKSx6cihuKSYma2kodC5rLGUsdShNcihuKSwxNykpKX1mdW5jdGlvbiBmc3QodCxlKXt2YXIgbixyLHM7cmV0dXJuIHI9eW4odC5UZygpLGUpLG49ZS10LkFoKCksbjwwPyhzPXQuWWcocikscz49MD90LmxoKHMpOlpzdCh0LHIpKTpuPDA/WnN0KHQscik6dShyLDY2KS5OaigpLlNqKHQsdC55aCgpLG4pfWZ1bmN0aW9uIEllKHQpe3ZhciBlO2lmKF90KHQuYSw0KSl7aWYoZT1PM3QodC5hKSxlPT1udWxsKXRocm93IGl0KG5ldyBObyhvZGUrdC5iKyInLiAiK2FkZSsoUDAoZ1ApLGdQLmspK2Q4dCkpO3JldHVybiBlfWVsc2UgcmV0dXJuIHQuYX1mdW5jdGlvbiBPZm4odCl7dmFyIGU7aWYodD09bnVsbClyZXR1cm4gbnVsbDtpZihlPUo1bigkYyh0LCEwKSksZT09bnVsbCl0aHJvdyBpdChuZXcgcGV0KCJJbnZhbGlkIGJhc2U2NEJpbmFyeSB2YWx1ZTogJyIrdCsiJyIpKTtyZXR1cm4gZX1mdW5jdGlvbiBkcih0KXt2YXIgZTt0cnl7cmV0dXJuIGU9dC5pLlhiKHQuZSksdC5taigpLHQuZz10LmUrKyxlfWNhdGNoKG4pe3Rocm93IG49V2kobiksX3Qobiw3Myk/KHQubWooKSxpdChuZXcgbGMpKTppdChuKX19ZnVuY3Rpb24gZHN0KHQpe3ZhciBlO3RyeXtyZXR1cm4gZT10LmMua2kodC5lKSx0Lm1qKCksdC5nPXQuZSsrLGV9Y2F0Y2gobil7dGhyb3cgbj1XaShuKSxfdChuLDczKT8odC5taigpLGl0KG5ldyBsYykpOml0KG4pfX1mdW5jdGlvbiBvXygpe29fPVoscDd0PSh1aSgpLGhBdCksUXV0PUhTdCxKcGU9VzYsZzd0PVUyLHJiZT0oc3EoKSxXRXQpLG5iZT1HRXQsaWJlPUtFdCxlYmU9VkV0LHRiZT0oUml0KCksaDd0KSxYdXQ9WHBlLGQ3dD1RcGUsZlY9WnBlfWZ1bmN0aW9uIFl6KHQpe3N3aXRjaChrYnQoKSx0aGlzLmM9bmV3IGhlLHRoaXMuZD10LHQuZyl7Y2FzZSAwOmNhc2UgMjp0aGlzLmE9TXZ0KE83dCksdGhpcy5iPWFzO2JyZWFrO2Nhc2UgMzpjYXNlIDE6dGhpcy5hPU83dCx0aGlzLmI9Q3N9fWZ1bmN0aW9uIGhzZSh0LGUsbil7dmFyIHIscztpZih0LmMpa3UodC5jLHQuYy5pK2UpLEV1KHQuYyx0LmMuaituKTtlbHNlIGZvcihzPW5ldyBTKHQuYik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTU3KSxoc2UocixlLG4pfWZ1bmN0aW9uIFBmbih0LGUpe3ZhciBuLHI7aWYodC5qLmxlbmd0aCE9ZS5qLmxlbmd0aClyZXR1cm4hMTtmb3Iobj0wLHI9dC5qLmxlbmd0aDtuPHI7bisrKWlmKCFobih0Lmpbbl0sZS5qW25dKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBLeih0LGUsbil7dmFyIHI7ZS5hLmxlbmd0aD4wJiYobGUodC5iLG5ldyBHWXQoZS5hLG4pKSxyPWUuYS5sZW5ndGgsMDxyP2UuYT1lLmEuc3Vic3RyKDAsMCk6MD5yJiYoZS5hKz1LVXQoTnQoeGgseWQsMjUsLXIsMTUsMSkpKSl9ZnVuY3Rpb24gZnNlKHQsZSl7dmFyIG4scixzO2ZvcihuPXQubyxzPXUodShBaSh0LnIsZSksMjEpLDg0KS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwxMTEpLHIuZS5hPU4xbihyLG4uYSksci5lLmI9bi5iKlh0KHllKHIuYi5XZSh1VikpKX1mdW5jdGlvbiBGZm4odCxlKXt2YXIgbixyLHMsbztyZXR1cm4gcz10Lmssbj1YdCh5ZShRKHQsKGFlKCksRnYpKSkpLG89ZS5rLHI9WHQoeWUoUShlLEZ2KSkpLG8hPShWbigpLGtzKT8tMTpzIT1rcz8xOm49PXI/MDpuPHI/LTE6MX1mdW5jdGlvbiBOZm4odCxlKXt2YXIgbixyO3JldHVybiBuPXUodSh0cih0LmcsZS5hKSw0NikuYSw2NSkscj11KHUodHIodC5nLGUuYiksNDYpLmEsNjUpLFdwKGUuYSxlLmIpLVdwKGUuYSx3MnQobi5iKSktV3AoZS5iLHcydChyLmIpKX1mdW5jdGlvbiBCZm4odCxlKXt2YXIgbjtyZXR1cm4gbj11KFEodCwoVGUoKSxTbykpLDc0KSxsbnQoZSxLYmUpP24/QWgobik6KG49bmV3IFB1LEp0KHQsU28sbikpOm4mJkp0KHQsU28sbnVsbCksbn1mdW5jdGlvbiBkc2UodCl7dmFyIGU7cmV0dXJuIGU9bmV3IE1wLGUuYSs9Im4iLHQuayE9KFZuKCksT3MpJiZHcihHcigoZS5hKz0iKCIsZSksYm50KHQuaykudG9Mb3dlckNhc2UoKSksIikiKSxHcigoZS5hKz0iXyIsZSksckkodCkpLGUuYX1mdW5jdGlvbiBSZm4odCxlKXt2cihlLCJTZWxmLUxvb3AgcG9zdC1wcm9jZXNzaW5nIiwxKSxscyhSaShSaShXbyhuZXcgVG4obnVsbCxuZXcgX24odC5iLDE2KSksbmV3IG9YKSxuZXcgY1gpLG5ldyB4TiksbmV3IHVYKSxvcihlKX1mdW5jdGlvbiBjNih0LGUsbixyKXt2YXIgcztyZXR1cm4gbj49MD90LmhoKGUsbixyKToodC5laCgpJiYocj0ocz10LlZnKCkscz49MD90LlFnKHIpOnQuZWgoKS5paCh0LC0xLXMsbnVsbCxyKSkpLHQuU2coZSxuLHIpKX1mdW5jdGlvbiBSM3QodCxlKXtzd2l0Y2goZSl7Y2FzZSA3OiF0LmUmJih0LmU9bmV3IENuKFlzLHQsNyw0KSkseHIodC5lKTtyZXR1cm47Y2FzZSA4OiF0LmQmJih0LmQ9bmV3IENuKFlzLHQsOCw1KSkseHIodC5kKTtyZXR1cm59VDN0KHQsZSl9ZnVuY3Rpb24gWmYodCxlKXt2YXIgbjtuPXQuWmMoZSk7dHJ5e3JldHVybiBuLlBiKCl9Y2F0Y2gocil7dGhyb3cgcj1XaShyKSxfdChyLDEwOSk/aXQobmV3IHlvKCJDYW4ndCBnZXQgZWxlbWVudCAiK2UpKTppdChyKX19ZnVuY3Rpb24gajN0KHQsZSl7dGhpcy5lPXQsZTxtb3Q/KHRoaXMuZD0xLHRoaXMuYT1sdChjdChDciwxKSxYciwyNSwxNSxbZXwwXSkpOih0aGlzLmQ9Mix0aGlzLmE9bHQoY3QoQ3IsMSksWHIsMjUsMTUsW2UlbW90fDAsZS9tb3R8MF0pKX1mdW5jdGlvbiBnc2UodCxlKXt3bigpO3ZhciBuLHIscyxvO2ZvcihuPXQsbz1lLF90KHQsMjEpJiYhX3QoZSwyMSkmJihuPWUsbz10KSxzPW4uS2MoKTtzLk9iKCk7KWlmKHI9cy5QYigpLG8uSGMocikpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQmEodCxlLG4pe3ZhciByLHMsbyxoO3JldHVybiByPXQuWGMoZSksciE9LTEmJih0LmVqKCk/KG89dC5maigpLGg9bDYodCxyKSxzPXQuWmkoNCxoLG51bGwscixvKSxuP24uRWkocyk6bj1zKTpsNih0LHIpKSxufWZ1bmN0aW9uIGpmbih0LGUsbil7dmFyIHIscyxvLGg7cmV0dXJuIHI9dC5YYyhlKSxyIT0tMSYmKHQuZWooKT8obz10LmZqKCksaD1Iaih0LHIpLHM9dC5aaSg0LGgsbnVsbCxyLG8pLG4/bi5FaShzKTpuPXMpOkhqKHQscikpLG59ZnVuY3Rpb24gcHNlKHQsZSl7dmFyIG47c3dpdGNoKG49dShwbyh0LmIsZSksMTI0KS5uLGUuZyl7Y2FzZSAxOnQudD49MCYmKG4uZD10LnQpO2JyZWFrO2Nhc2UgMzp0LnQ+PTAmJihuLmE9dC50KX10LkMmJihuLmI9dC5DLmIsbi5jPXQuQy5jKX1mdW5jdGlvbiB1Nigpe3U2PVosZE89bmV3IFFSKEtxLDApLGZPPW5ldyBRUihJb3QsMSksZ089bmV3IFFSKE9vdCwyKSxwTz1uZXcgUVIoUG90LDMpLGRPLmE9ITEsZk8uYT0hMCxnTy5hPSExLHBPLmE9ITB9ZnVuY3Rpb24gY18oKXtjXz1aLGJPPW5ldyBYUihLcSwwKSxsVj1uZXcgWFIoSW90LDEpLGhWPW5ldyBYUihPb3QsMiksd089bmV3IFhSKFBvdCwzKSxiTy5hPSExLGxWLmE9ITAsaFYuYT0hMSx3Ty5hPSEwfWZ1bmN0aW9uICRmbih0KXt2YXIgZTtlPXQuYTtkbyBlPXUoTXIobmV3IGFyKGxyKGpvKGUpLmEuS2MoKSxuZXcgeikpKSwxNykuYy5pLGUuaz09KFZuKCksdGEpJiZ0LmIuRmMoZSk7d2hpbGUoZS5rPT0oVm4oKSx0YSkpO3QuYj1sMih0LmIpfWZ1bmN0aW9uIHpmbih0KXt2YXIgZSxuLHI7Zm9yKHI9dC5jLmEsdC5wPShMcihyKSxuZXcgQnUocikpLG49bmV3IFMocik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTApLGUucD1UcG4oZSkuYTt3bigpLFpzKHQucCxuZXcgZFEpfWZ1bmN0aW9uIGJzZSh0KXt2YXIgZSxuLHIscztpZihyPTAscz13eSh0KSxzLmMubGVuZ3RoPT0wKXJldHVybiAxO2ZvcihuPW5ldyBTKHMpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDMzKSxyKz1ic2UoZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gcWZuKHQsZSl7dmFyIG4scixzO2ZvcihzPTAscj11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMTExKSxzKz1uLmQuYituLmIucmYoKS5hK24uZC5jLHIuT2IoKSYmKHMrPXQudyk7cmV0dXJuIHN9ZnVuY3Rpb24gSGZuKHQsZSl7dmFyIG4scixzO2ZvcihzPTAscj11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMTExKSxzKz1uLmQuZCtuLmIucmYoKS5iK24uZC5hLHIuT2IoKSYmKHMrPXQudyk7cmV0dXJuIHN9ZnVuY3Rpb24gVmZuKHQsZSxuLHIpe2lmKGUuYTxyLmEpcmV0dXJuITA7aWYoZS5hPT1yLmEpe2lmKGUuYjxyLmIpcmV0dXJuITA7aWYoZS5iPT1yLmImJnQuYj5uLmIpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gZ3N0KHQsZSl7cmV0dXJuIHJhKHQpPyEhU2dlW2VdOnQuaG0/ISF0LmhtW2VdOkJtKHQpPyEhX2dlW2VdOk5tKHQpPyEhQ2dlW2VdOiExfWZ1bmN0aW9uIHdvKHQsZSxuKXtyZXR1cm4gbj09bnVsbD8oIXQubyYmKHQubz1uZXcgX2woKEpjKCksU2IpLEh2LHQsMCkpLHF6KHQubyxlKSk6KCF0Lm8mJih0Lm89bmV3IF9sKChKYygpLFNiKSxIdix0LDApKSxhcSh0Lm8sZSxuKSksdH1mdW5jdGlvbiBHZm4odCxlLG4scil7dmFyIHMsbztvPWUuWGUoKHVpKCksbzUpKT91KGUuV2UobzUpLDIxKTp0Lmoscz1QbG4obykscyE9KCRxKCksVXV0KSYmKG4mJiFQM3Qocyl8fFY0dChFMm4odCxzLHIpLGUpKX1mdW5jdGlvbiBYeih0LGUsbixyKXt2YXIgcyxvLGg7cmV0dXJuIG89eW4odC5UZygpLGUpLHM9ZS10LkFoKCksczwwPyhoPXQuWWcobyksaD49MD90Ll9nKGgsbiwhMCk6ZHYodCxvLG4pKTp1KG8sNjYpLk5qKCkuUGoodCx0LnloKCkscyxuLHIpfWZ1bmN0aW9uIFVmbih0LGUsbixyKXt2YXIgcyxvLGg7bi5taChlKSYmKHRvKCksYWl0KGUpPyhzPXUobi5haChlKSwxNTMpLGJmbih0LHMpKToobz0oaD1lLGg/dShyLDQ5KS54aChoKTpudWxsKSxvJiZZWWUobi5haChlKSxvKSkpfWZ1bmN0aW9uIFdmbih0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIHJ2KCksaE87Y2FzZSAzOnJldHVybiBydigpLGxPO2Nhc2UgMjpyZXR1cm4gcnYoKSxZdXQ7Y2FzZSA0OnJldHVybiBydigpLFd1dDtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiAkM3QodCl7c3dpdGNoKHR5cGVvZiB0KXtjYXNlIFZhdDpyZXR1cm4gVmcodCk7Y2FzZSBOeHQ6cmV0dXJuIHBzKHQpO2Nhc2UgYjY6cmV0dXJuIE5uKCksdD8xMjMxOjEyMzc7ZGVmYXVsdDpyZXR1cm4gdD09bnVsbD8wOlB3KHQpfX1mdW5jdGlvbiBZZm4odCxlLG4pe2lmKHQuZSlzd2l0Y2godC5iKXtjYXNlIDE6RXJuKHQuYyxlLG4pO2JyZWFrO2Nhc2UgMDpUcm4odC5jLGUsbil9ZWxzZSB0SnQodC5jLGUsbik7dC5hW2UucF1bbi5wXT10LmMuaSx0LmFbbi5wXVtlLnBdPXQuYy5lfWZ1bmN0aW9uIHdzZSh0KXt2YXIgZSxuO2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7Zm9yKG49TnQobDAsZWUsMTkzLHQubGVuZ3RoLDAsMiksZT0wO2U8bi5sZW5ndGg7ZSsrKW5bZV09dShwb24odFtlXSx0W2VdLmxlbmd0aCksMTkzKTtyZXR1cm4gbn1mdW5jdGlvbiBReih0KXt2YXIgZTtpZihCaXQodCkpcmV0dXJuIFpqKHQpLHQuTGsoKSYmKGU9Yl8odC5lLHQuYix0LmMsdC5hLHQuaiksdC5qPWUpLHQuZz10LmEsKyt0LmEsKyt0LmMsdC5pPTAsdC5qO3Rocm93IGl0KG5ldyBsYyl9ZnVuY3Rpb24gS2ZuKHQsZSl7dmFyIG4scixzLG87cmV0dXJuIG89dC5vLG49dC5wLG88bj9vKj1vOm4qPW4scj1vK24sbz1lLm8sbj1lLnAsbzxuP28qPW86bio9bixzPW8rbixyPHM/LTE6cj09cz8wOjF9ZnVuY3Rpb24gSGcodCxlKXt2YXIgbixyLHM7aWYocz1Yc2UodCxlKSxzPj0wKXJldHVybiBzO2lmKHQuRmsoKSl7Zm9yKHI9MDtyPHQuaTsrK3IpaWYobj10LkdrKHUodC5nW3JdLDU2KSksVnQobik9PT1WdChlKSlyZXR1cm4gcn1yZXR1cm4tMX1mdW5jdGlvbiBoNCh0LGUsbil7dmFyIHIscztpZihzPXQuZ2MoKSxlPj1zKXRocm93IGl0KG5ldyBxbShlLHMpKTtpZih0LmhpKCkmJihyPXQuWGMobikscj49MCYmciE9ZSkpdGhyb3cgaXQobmV3IEZuKGVPKSk7cmV0dXJuIHQubWkoZSxuKX1mdW5jdGlvbiB6M3QodCxlKXtpZih0aGlzLmE9dShMcih0KSwyNDUpLHRoaXMuYj11KExyKGUpLDI0NSksdC52ZChlKT4wfHx0PT0oY2V0KCksX3V0KXx8ZT09KG9ldCgpLFN1dCkpdGhyb3cgaXQobmV3IEZuKCJJbnZhbGlkIHJhbmdlOiAiK1hadCh0LGUpKSl9ZnVuY3Rpb24gdnNlKHQpe3ZhciBlLG47Zm9yKHRoaXMuYj1uZXcgaGUsdGhpcy5jPXQsdGhpcy5hPSExLG49bmV3IFModC5hKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMCksdGhpcy5hPXRoaXMuYXxlLms9PShWbigpLE9zKX1mdW5jdGlvbiBYZm4odCxlKXt2YXIgbixyLHM7Zm9yKG49RncobmV3IFhiLHQpLHM9bmV3IFMoZSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTIxKSx5ZihsZih1ZihoZihjZihuZXcgQ2gsMCksMCksbikscikpO3JldHVybiBufWZ1bmN0aW9uIG1zZSh0LGUsbil7dmFyIHIscyxvO2ZvcihzPW5ldyBhcihscigoZT9qbyh0KTpEcyh0KSkuYS5LYygpLG5ldyB6KSk7enIocyk7KXI9dShNcihzKSwxNyksbz1lP3IuYy5pOnIuZC5pLG8uaz09KFZuKCksTGwpJiZFbyhvLG4pfWZ1bmN0aW9uIGN5KCl7Y3k9Wix4Rz1uZXcgbmooSjAsMCksbWh0PW5ldyBuaigiUE9SVF9QT1NJVElPTiIsMSksbjU9bmV3IG5qKCJOT0RFX1NJWkVfV0hFUkVfU1BBQ0VfUEVSTUlUUyIsMiksZTU9bmV3IG5qKCJOT0RFX1NJWkUiLDMpfWZ1bmN0aW9uIHQwKCl7dDA9Wix1ZnQ9bmV3IGk5KCJBVVRPTUFUSUMiLDApLEdPPW5ldyBpOSh5NiwxKSxVTz1uZXcgaTkoeDYsMiksV0c9bmV3IGk5KCJUT1AiLDMpLEdHPW5ldyBpOShyNnQsNCksVUc9bmV3IGk5KHFFLDUpfWZ1bmN0aW9uIHEzdCh0LGUsbixyKXtURSgpO3ZhciBzLG87Zm9yKHM9MCxvPTA7bzxuO28rKylzPVBhKF9hKE5zKGVbb10sY28pLE5zKHIsY28pKSxOcyhBcihzKSxjbykpLHRbb109QXIocykscz1WbShzLDMyKTtyZXR1cm4gQXIocyl9ZnVuY3Rpb24gSDN0KHQsZSxuKXt2YXIgcixzO2ZvcihzPTAscj0wO3I8R3V0O3IrKylzPWIuTWF0aC5tYXgocyx6aXQodC5hW2UuZ11bcl0sbikpO3JldHVybiBlPT0oS2YoKSxldSkmJnQuYiYmKHM9Yi5NYXRoLm1heChzLHQuYi5iKSksc31mdW5jdGlvbiBaeih0LGUpe3ZhciBuLHI7aWYocTJ0KGU+MCksKGUmLWUpPT1lKXJldHVybiBwcyhlKnVsKHQsMzEpKjQ2NTY2MTI4NzMwNzczOTNlLTI1KTtkbyBuPXVsKHQsMzEpLHI9biVlO3doaWxlKG4tcisoZS0xKTwwKTtyZXR1cm4gcHMocil9ZnVuY3Rpb24gVmcodCl7TVl0KCk7dmFyIGUsbixyO3JldHVybiBuPSI6Iit0LHI9YVZbbl0sciE9bnVsbD9wcygoT24ocikscikpOihyPVJFdFtuXSxlPXI9PW51bGw/JHduKHQpOnBzKChPbihyKSxyKSkscHJuKCksYVZbbl09ZSxlKX1mdW5jdGlvbiB5c2UodCxlLG4pe3ZyKG4sIkNvbXBvdW5kIGdyYXBoIHByZXByb2Nlc3NvciIsMSksdC5hPW5ldyBVdyxfaGUodCxlLG51bGwpLFMzbih0LGUpLHV3bih0KSxKdChlLChhZSgpLHJDdCksdC5hKSx0LmE9bnVsbCxYdSh0LmIpLG9yKG4pfWZ1bmN0aW9uIFFmbih0LGUsbil7c3dpdGNoKG4uZyl7Y2FzZSAxOnQuYT1lLmEvMix0LmI9MDticmVhaztjYXNlIDI6dC5hPWUuYSx0LmI9ZS5iLzI7YnJlYWs7Y2FzZSAzOnQuYT1lLmEvMix0LmI9ZS5iO2JyZWFrO2Nhc2UgNDp0LmE9MCx0LmI9ZS5iLzJ9fWZ1bmN0aW9uIFpmbih0KXt2YXIgZSxuLHI7Zm9yKHI9dShBaSh0LmEsKGI0KCkscVYpKSwxNSkuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMTAxKSxlPXQ0dChuKSxfOCh0LG4sZVswXSwobnYoKSxNdiksMCksXzgodCxuLGVbMV0sRHYsMSl9ZnVuY3Rpb24gSmZuKHQpe3ZhciBlLG4scjtmb3Iocj11KEFpKHQuYSwoYjQoKSxIVikpLDE1KS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwxMDEpLGU9dDR0KG4pLF84KHQsbixlWzBdLChudigpLE12KSwwKSxfOCh0LG4sZVsxXSxEdiwxKX1mdW5jdGlvbiBwc3QodCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMTpyZXR1cm4gbmV3IHluZTtjYXNlIDI6cmV0dXJuIG5ldyBacHQ7ZGVmYXVsdDp0aHJvdyBpdChuZXcgRm4oSWN0Kyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gdEkodCxlLG4pe3ZhciByLHM7Zm9yKHh1bih0LGUtdC5zLG4tdC50KSxzPW5ldyBTKHQubik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMjExKSx2eChyLHIuZStlLXQucyksbXB0KHIsci5mK24tdC50KTt0LnM9ZSx0LnQ9bn1mdW5jdGlvbiB0MW4odCl7dmFyIGUsbixyLHMsbztmb3Iobj0wLHM9bmV3IFModC5hKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxMjEpLHIuZD1uKys7cmV0dXJuIGU9RGduKHQpLG89bnVsbCxlLmMubGVuZ3RoPjEmJihvPVhmbih0LGUpKSxvfWZ1bmN0aW9uIGJzdCh0KXt2YXIgZTtyZXR1cm4gdC5mJiZ0LmYua2goKSYmKGU9dSh0LmYsNDkpLHQuZj11KFpwKHQsZSksODIpLHQuZiE9ZSYmdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsOSw4LGUsdC5mKSkpLHQuZn1mdW5jdGlvbiB3c3QodCl7dmFyIGU7cmV0dXJuIHQuaSYmdC5pLmtoKCkmJihlPXUodC5pLDQ5KSx0Lmk9dShacCh0LGUpLDgyKSx0LmkhPWUmJnQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBKcyh0LDksNyxlLHQuaSkpKSx0Lml9ZnVuY3Rpb24gbm8odCl7dmFyIGU7cmV0dXJuIHQuYiYmdC5iLkRiJjY0JiYoZT10LmIsdC5iPXUoWnAodCxlKSwxOCksdC5iIT1lJiZ0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgSnModCw5LDIxLGUsdC5iKSkpLHQuYn1mdW5jdGlvbiBKeih0LGUpe3ZhciBuLHIsczt0LmQ9PW51bGw/KCsrdC5lLCsrdC5mKToocj1lLlNoKCksYnduKHQsdC5mKzEpLHM9KHImd2kpJXQuZC5sZW5ndGgsbj10LmRbc10sIW4mJihuPXQuZFtzXT10LnVqKCkpLG4uRmMoZSksKyt0LmYpfWZ1bmN0aW9uIFYzdCh0LGUsbil7dmFyIHI7cmV0dXJuIGUuS2ooKT8hMTplLlpqKCkhPS0yPyhyPWUuemooKSxyPT1udWxsP249PW51bGw6eWkocixuKSk6ZS5IaigpPT10LmUuVGcoKSYmbj09bnVsbH1mdW5jdGlvbiB0cSgpe3ZhciB0O2psKDE2LGJmZSksdD1obmUoMTYpLHRoaXMuYj1OdChMdXQsUEksMzE3LHQsMCwxKSx0aGlzLmM9TnQoTHV0LFBJLDMxNyx0LDAsMSksdGhpcy5hPW51bGwsdGhpcy5lPW51bGwsdGhpcy5pPTAsdGhpcy5mPXQtMSx0aGlzLmc9MH1mdW5jdGlvbiBZMCh0KXtjd3QuY2FsbCh0aGlzKSx0aGlzLms9KFZuKCksT3MpLHRoaXMuaj0oamwoNixreSksbmV3IFhjKDYpKSx0aGlzLmI9KGpsKDIsa3kpLG5ldyBYYygyKSksdGhpcy5kPW5ldyBuZXQsdGhpcy5mPW5ldyBIcHQsdGhpcy5hPXR9ZnVuY3Rpb24gZTFuKHQpe3ZhciBlLG47dC5jLmxlbmd0aDw9MXx8KGU9dnVlKHQsKHZlKCksbXIpKSxhb2UodCx1KGUuYSwxOSkuYSx1KGUuYiwxOSkuYSksbj12dWUodCxCbiksYW9lKHQsdShuLmEsMTkpLmEsdShuLmIsMTkpLmEpKX1mdW5jdGlvbiB1Xygpe3VfPVosRjl0PW5ldyBMTSgiU0lNUExFIiwwKSx4aHQ9bmV3IExNKFhvdCwxKSxraHQ9bmV3IExNKCJMSU5FQVJfU0VHTUVOVFMiLDIpLERTPW5ldyBMTSgiQlJBTkRFU19LT0VQRiIsMyksSVM9bmV3IExNKHExZSw0KX1mdW5jdGlvbiBHM3QodCxlLG4pe2p4KHUoUShlLChUZSgpLGNzKSksOTgpKXx8KGptdCh0LGUsR2coZSxuKSksam10KHQsZSxHZyhlLCh2ZSgpLG1yKSkpLGptdCh0LGUsR2coZSxQbikpLHduKCksWnMoZS5qLG5ldyBoTSh0KSkpfWZ1bmN0aW9uIHhzZSh0LGUsbixyKXt2YXIgcyxvLGg7Zm9yKHM9dShBaShyP3QuYTp0LmIsZSksMjEpLGg9cy5LYygpO2guT2IoKTspaWYobz11KGguUGIoKSwzMyksVHEodCxuLG8pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHZzdCh0KXt2YXIgZSxuO2ZvcihuPW5ldyBucih0KTtuLmUhPW4uaS5nYygpOylpZihlPXUoZHIobiksODcpLGUuZXx8KCFlLmQmJihlLmQ9bmV3IEFzKGhvLGUsMSkpLGUuZCkuaSE9MClyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBtc3QodCl7dmFyIGUsbjtmb3Iobj1uZXcgbnIodCk7bi5lIT1uLmkuZ2MoKTspaWYoZT11KGRyKG4pLDg3KSxlLmV8fCghZS5kJiYoZS5kPW5ldyBBcyhobyxlLDEpKSxlLmQpLmkhPTApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gbjFuKHQpe3ZhciBlLG4scjtmb3IoZT0wLHI9bmV3IFModC5jLmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDEwKSxlKz1qMChuZXcgYXIobHIoRHMobikuYS5LYygpLG5ldyB6KSkpO3JldHVybiBlL3QuYy5hLmMubGVuZ3RofWZ1bmN0aW9uIGtzZSh0KXt2YXIgZSxuO2Zvcih0LmN8fGw0bih0KSxuPW5ldyBQdSxlPW5ldyBTKHQuYSksSihlKTtlLmE8ZS5jLmMubGVuZ3RoOylyaShuLHUoSihlKSw0MDcpLmEpO3JldHVybiBabihuLmIhPTApLGxoKG4sbi5jLmIpLG59ZnVuY3Rpb24geXN0KCl7eXN0PVoseFN0PShkYXQoKSx3U3QpLHlTdD1uZXcgT3coOCksbmV3IGVvKCh1aSgpLFUyKSx5U3QpLG5ldyBlbyhXMiw4KSxxM2U9cFN0LHZTdD1QM2UsbVN0PUYzZSx6M2U9bmV3IGVvKFFPLChObigpLCExKSl9ZnVuY3Rpb24gVTN0KHQsZSxuLHIpe3N3aXRjaChlKXtjYXNlIDc6cmV0dXJuIXQuZSYmKHQuZT1uZXcgQ24oWXMsdCw3LDQpKSx0LmU7Y2FzZSA4OnJldHVybiF0LmQmJih0LmQ9bmV3IENuKFlzLHQsOCw1KSksdC5kfXJldHVybiBmM3QodCxlLG4scil9ZnVuY3Rpb24geHN0KHQpe3ZhciBlO3JldHVybiB0LmEmJnQuYS5raCgpJiYoZT11KHQuYSw0OSksdC5hPXUoWnAodCxlKSwxMzgpLHQuYSE9ZSYmdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsOSw1LGUsdC5hKSkpLHQuYX1mdW5jdGlvbiB5Mih0KXtyZXR1cm4gdDw0OHx8dD4xMDI/LTE6dDw9NTc/dC00ODp0PDY1Py0xOnQ8PTcwP3QtNjUrMTA6dDw5Nz8tMTp0LTk3KzEwfWZ1bmN0aW9uIGtzdCh0LGUpe2lmKHQ9PW51bGwpdGhyb3cgaXQobmV3IFN4KCJudWxsIGtleSBpbiBlbnRyeTogbnVsbD0iK2UpKTtpZihlPT1udWxsKXRocm93IGl0KG5ldyBTeCgibnVsbCB2YWx1ZSBpbiBlbnRyeTogIit0KyI9bnVsbCIpKX1mdW5jdGlvbiByMW4odCxlKXtmb3IodmFyIG4scjt0Lk9iKCk7KWlmKCFlLk9iKCl8fChuPXQuUGIoKSxyPWUuUGIoKSwhKFZ0KG4pPT09VnQocil8fG4hPW51bGwmJnlpKG4scikpKSlyZXR1cm4hMTtyZXR1cm4hZS5PYigpfWZ1bmN0aW9uIEVzZSh0LGUpe3ZhciBuO3JldHVybiBuPWx0KGN0KGFhLDEpLHZvLDI1LDE1LFt6aXQodC5hWzBdLGUpLHppdCh0LmFbMV0sZSkseml0KHQuYVsyXSxlKV0pLHQuZCYmKG5bMF09Yi5NYXRoLm1heChuWzBdLG5bMl0pLG5bMl09blswXSksbn1mdW5jdGlvbiBUc2UodCxlKXt2YXIgbjtyZXR1cm4gbj1sdChjdChhYSwxKSx2bywyNSwxNSxbTHoodC5hWzBdLGUpLEx6KHQuYVsxXSxlKSxMeih0LmFbMl0sZSldKSx0LmQmJihuWzBdPWIuTWF0aC5tYXgoblswXSxuWzJdKSxuWzJdPW5bMF0pLG59ZnVuY3Rpb24geDIoKXt4Mj1aLE1sdD1uZXcgQU0oIkdSRUVEWSIsMCksUFR0PW5ldyBBTShBMWUsMSksRGx0PW5ldyBBTShYb3QsMiksdlM9bmV3IEFNKCJNT0RFTF9PUkRFUiIsMyksd1M9bmV3IEFNKCJHUkVFRFlfTU9ERUxfT1JERVIiLDQpfWZ1bmN0aW9uIENzZSh0LGUpe3ZhciBuLHIscztmb3IodC5iW2UuZ109MSxyPWVpKGUuZCwwKTtyLmIhPXIuZC5jOyluPXUodGkociksMTg4KSxzPW4uYyx0LmJbcy5nXT09MT9yaSh0LmEsbik6dC5iW3MuZ109PTI/dC5iW3MuZ109MTpDc2UodCxzKX1mdW5jdGlvbiBpMW4odCxlKXt2YXIgbixyLHM7Zm9yKHM9bmV3IFhjKGUuZ2MoKSkscj1lLktjKCk7ci5PYigpOyluPXUoci5QYigpLDI4Niksbi5jPT1uLmY/RUUodCxuLG4uYyk6bnBuKHQsbil8fChzLmNbcy5jLmxlbmd0aF09bik7cmV0dXJuIHN9ZnVuY3Rpb24gczFuKHQsZSxuKXt2YXIgcixzLG8saCxkO2ZvcihkPXQucitlLHQucis9ZSx0LmQrPW4scj1uL3Qubi5jLmxlbmd0aCxzPTAsaD1uZXcgUyh0Lm4pO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDIxMSksZzJuKG8sZCxyLHMpLCsrc31mdW5jdGlvbiBhMW4odCl7dmFyIGUsbixyO2ZvcihOQyh0LmIuYSksdC5hPU50KG9WLERlLDU3LHQuYy5jLmEuYi5jLmxlbmd0aCwwLDEpLGU9MCxyPW5ldyBTKHQuYy5jLmEuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNTcpLG4uZj1lKyt9ZnVuY3Rpb24gbzFuKHQpe3ZhciBlLG4scjtmb3IoTkModC5iLmEpLHQuYT1OdChhbHQsRGUsODEsdC5jLmEuYS5iLmMubGVuZ3RoLDAsMSksZT0wLHI9bmV3IFModC5jLmEuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw4MSksbi5pPWUrK31mdW5jdGlvbiBjMW4odCxlLG4pe3ZhciByO3ZyKG4sIlNocmlua2luZyB0cmVlIGNvbXBhY3Rpb24iLDEpLGplKFJlKFEoZSwoWjgoKSxmUykpKSk/KGtjbih0LGUuZiksaWVlKGUuZiwocj1lLmMscikpKTppZWUoZS5mLGUuYyksb3Iobil9ZnVuY3Rpb24gX3NlKHQpe3ZhciBlO2lmKGU9Y2xuKHQpLCF6cih0KSl0aHJvdyBpdChuZXcgeW8oInBvc2l0aW9uICgwKSBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRoYXQgcmVtYWluZWQgKCIrZSsiKSIpKTtyZXR1cm4gTXIodCl9ZnVuY3Rpb24gU3NlKHQsZSxuKXt2YXIgcjt0cnl7cmV0dXJuIGY0KHQsZSt0Lmosbit0LmspfWNhdGNoKHMpe3Rocm93IHM9V2kocyksX3Qocyw3Myk/KHI9cyxpdChuZXcgeW8oci5nK1FxK2UrWWErbisiKS4iKSkpOml0KHMpfX1mdW5jdGlvbiB1MW4odCxlLG4pe3ZhciByO3RyeXtyZXR1cm4gTXNlKHQsZSt0Lmosbit0LmspfWNhdGNoKHMpe3Rocm93IHM9V2kocyksX3Qocyw3Myk/KHI9cyxpdChuZXcgeW8oci5nK1FxK2UrWWErbisiKS4iKSkpOml0KHMpfX1mdW5jdGlvbiBsMW4odCxlLG4pe3ZhciByO3RyeXtyZXR1cm4gRHNlKHQsZSt0Lmosbit0LmspfWNhdGNoKHMpe3Rocm93IHM9V2kocyksX3Qocyw3Myk/KHI9cyxpdChuZXcgeW8oci5nK1FxK2UrWWErbisiKS4iKSkpOml0KHMpfX1mdW5jdGlvbiBBc2UodCl7c3dpdGNoKHQuZyl7Y2FzZSAxOnJldHVybiB2ZSgpLEJuO2Nhc2UgNDpyZXR1cm4gdmUoKSxQbjtjYXNlIDM6cmV0dXJuIHZlKCksSG47Y2FzZSAyOnJldHVybiB2ZSgpLG1yO2RlZmF1bHQ6cmV0dXJuIHZlKCksWm99fWZ1bmN0aW9uIGgxbih0LGUsbil7ZS5rPT0oVm4oKSxPcykmJm4uaz09dGEmJih0LmQ9R2l0KGUsKHZlKCksbXIpKSx0LmI9R2l0KGUsUG4pKSxuLms9PU9zJiZlLms9PXRhJiYodC5kPUdpdChuLCh2ZSgpLFBuKSksdC5iPUdpdChuLG1yKSl9ZnVuY3Rpb24gRXN0KHQsZSl7dmFyIG4scixzO2ZvcihzPUtvKHQsZSkscj1zLktjKCk7ci5PYigpOylpZihuPXUoci5QYigpLDExKSxRKG4sKGFlKCksSnUpKSE9bnVsbHx8djkobmV3IEwxKG4uYikpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFczdCh0LGUpe3JldHVybiBrdShlLHQuZSt0LmQrKHQuYy5jLmxlbmd0aD09MD8wOnQuYikpLEV1KGUsdC5mKSx0LmE9Yi5NYXRoLm1heCh0LmEsZS5mKSx0LmQrPWUuZysodC5jLmMubGVuZ3RoPT0wPzA6dC5iKSxsZSh0LmMsZSksITB9ZnVuY3Rpb24gZjFuKHQsZSxuKXt2YXIgcixzLG8saDtmb3IoaD0wLHI9bi90LmEuYy5sZW5ndGgsbz1uZXcgUyh0LmEpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDE4NyksdEkocyxzLnMscy50K2gqciksczFuKHMsdC5kLXMucitlLHIpLCsraH1mdW5jdGlvbiBkMW4odCl7dmFyIGUsbixyLHMsbztmb3Iocj1uZXcgUyh0LmIpO3IuYTxyLmMuYy5sZW5ndGg7KWZvcihuPXUoSihyKSwyOSksZT0wLG89bmV3IFMobi5hKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxMCkscy5wPWUrK31mdW5jdGlvbiBnMW4odCxlKXt2YXIgbixyLHMsbyxoLGQ7Zm9yKHM9ZS5sZW5ndGgtMSxoPTAsZD0wLHI9MDtyPD1zO3IrKylvPWVbcl0sbj1PZ24ocyxyKSpReXQoMS10LHMtcikqUXl0KHQsciksaCs9by5hKm4sZCs9by5iKm47cmV0dXJuIG5ldyAkZShoLGQpfWZ1bmN0aW9uIExzZSh0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKG49ZS5nYygpLHQucWkodC5pK24pLG89ZS5LYygpLGg9dC5pLHQuaSs9bixyPWg7cjx0Lmk7KytyKXM9by5QYigpLHA5KHQscix0Lm9pKHIscykpLHQuYmkocixzKSx0LmNpKCk7cmV0dXJuIG4hPTB9ZnVuY3Rpb24gcDFuKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIHQuZWooKT8ocj10LlZpKCksbz10LmZqKCksKyt0LmosdC5IaShyLHQub2kocixlKSkscz10LlppKDMsbnVsbCxlLHIsbyksbj9uLkVpKHMpOm49cyk6R1d0KHQsdC5WaSgpLGUpLG59ZnVuY3Rpb24gYjFuKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIHI9dShBdChMYyh0LmEpLGUpLDg3KSxvPShzPXIuYyxfdChzLDg4KT91KHMsMjYpOihkbigpLEtoKSksKG8uRGImNjQ/WnAodC5iLG8pOm8pPT1uP0xxKHIpOkg4KHIsbiksb31mdW5jdGlvbiBZM3QodCxlLG4scixzLG8saCxkKXt2YXIgdixrO3ImJih2PXIuYVswXSx2JiZZM3QodCxlLG4sdixzLG8saCxkKSxWMW4odCxuLHIuZCxzLG8saCxkKSYmZS5GYyhyKSxrPXIuYVsxXSxrJiZZM3QodCxlLG4sayxzLG8saCxkKSl9ZnVuY3Rpb24gdzFuKHQsZSl7dmFyIG47cmV0dXJuIHQuYXx8KG49TnQoYWEsdm8sMjUsMCwxNSwxKSxqMyh0LmIuYSxuZXcgaWUobikpLG4uc29ydChGZWUoVHQucHJvdG90eXBlLnRlLFR0LFtdKSksdC5hPW5ldyBFWXQobix0LmQpKSx6JCh0LmEsZSl9ZnVuY3Rpb24gZjQodCxlLG4pe3RyeXtyZXR1cm4gRHcod2l0KHQsZSxuKSwxKX1jYXRjaChyKXt0aHJvdyByPVdpKHIpLF90KHIsMzIwKT9pdChuZXcgeW8oRm90K3QubysiKiIrdC5wK05vdCtlK1lhK24rQm90KSk6aXQocil9fWZ1bmN0aW9uIE1zZSh0LGUsbil7dHJ5e3JldHVybiBEdyh3aXQodCxlLG4pLDApfWNhdGNoKHIpe3Rocm93IHI9V2kociksX3QociwzMjApP2l0KG5ldyB5byhGb3QrdC5vKyIqIit0LnArTm90K2UrWWErbitCb3QpKTppdChyKX19ZnVuY3Rpb24gRHNlKHQsZSxuKXt0cnl7cmV0dXJuIER3KHdpdCh0LGUsbiksMil9Y2F0Y2gocil7dGhyb3cgcj1XaShyKSxfdChyLDMyMCk/aXQobmV3IHlvKEZvdCt0Lm8rIioiK3QucCtOb3QrZStZYStuK0JvdCkpOml0KHIpfX1mdW5jdGlvbiBJc2UodCxlKXtpZih0Lmc9PS0xKXRocm93IGl0KG5ldyBPdSk7dC5taigpO3RyeXt0LmQuX2ModC5nLGUpLHQuZj10LmQuan1jYXRjaChuKXt0aHJvdyBuPVdpKG4pLF90KG4sNzMpP2l0KG5ldyByaCk6aXQobil9fWZ1bmN0aW9uIHYxbih0LGUsbil7dnIobiwiTGluZWFyIHNlZ21lbnRzIG5vZGUgcGxhY2VtZW50IiwxKSx0LmI9dShRKGUsKGFlKCksUTQpKSwzMDQpLEl4bih0LGUpLHAzbih0LGUpLEQzbih0LGUpLGh4bih0KSx0LmE9bnVsbCx0LmI9bnVsbCxvcihuKX1mdW5jdGlvbiBlSSh0LGUpe3ZhciBuLHIscyxvO2ZvcihvPXQuZ2MoKSxlLmxlbmd0aDxvJiYoZT1MUihuZXcgQXJyYXkobyksZSkpLHM9ZSxyPXQuS2MoKSxuPTA7bjxvOysrbil0cyhzLG4sci5QYigpKTtyZXR1cm4gZS5sZW5ndGg+byYmdHMoZSxvLG51bGwpLGV9ZnVuY3Rpb24gbTFuKHQsZSl7dmFyIG4scjtpZihyPXQuZ2MoKSxlPT1udWxsKXtmb3Iobj0wO248cjtuKyspaWYodC5YYihuKT09bnVsbClyZXR1cm4gbn1lbHNlIGZvcihuPTA7bjxyO24rKylpZih5aShlLHQuWGIobikpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIFRzdCh0LGUpe3ZhciBuLHIscztyZXR1cm4gbj1lLmNkKCkscz1lLmRkKCkscj10LnhjKG4pLCEoIShWdChzKT09PVZ0KHIpfHxzIT1udWxsJiZ5aShzLHIpKXx8cj09bnVsbCYmIXQuX2IobikpfWZ1bmN0aW9uIHkxbih0LGUpe3ZhciBuLHIscztyZXR1cm4gZTw9MjI/KG49dC5sJigxPDxlKS0xLHI9cz0wKTplPD00ND8obj10Lmwscj10Lm0mKDE8PGUtMjIpLTEscz0wKToobj10Lmwscj10Lm0scz10LmgmKDE8PGUtNDQpLTEpLGl1KG4scixzKX1mdW5jdGlvbiB4MW4odCxlKXtzd2l0Y2goZS5nKXtjYXNlIDE6cmV0dXJuIHQuZi5uLmQrdC50O2Nhc2UgMzpyZXR1cm4gdC5mLm4uYSt0LnQ7Y2FzZSAyOnJldHVybiB0LmYubi5jK3QucztjYXNlIDQ6cmV0dXJuIHQuZi5uLmIrdC5zO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIGsxbih0LGUpe3ZhciBuLHI7c3dpdGNoKHI9ZS5jLG49ZS5hLHQuYi5nKXtjYXNlIDA6bi5kPXQuZS1yLmEtci5kO2JyZWFrO2Nhc2UgMTpuLmQrPXQuZTticmVhaztjYXNlIDI6bi5jPXQuZS1yLmEtci5kO2JyZWFrO2Nhc2UgMzpuLmM9dC5lK3IuZH19ZnVuY3Rpb24gSzN0KHQsZSxuLHIpe3ZhciBzLG87dGhpcy5hPWUsdGhpcy5jPXIscz10LmEsbHB0KHRoaXMsbmV3ICRlKC1zLmMsLXMuZCkpLExpKHRoaXMuYixuKSxvPXIvMixlLmE/cU0odGhpcy5iLDAsbyk6cU0odGhpcy5iLG8sMCksbGUodC5jLHRoaXMpfWZ1bmN0aW9uIGVxKCl7ZXE9WixLaHQ9bmV3IGlqKEowLDApLE9fdD1uZXcgaWooTDFlLDEpLFBfdD1uZXcgaWooIkVER0VfTEVOR1RIX0JZX1BPU0lUSU9OIiwyKSxJX3Q9bmV3IGlqKCJDUk9TU0lOR19NSU5JTUlaQVRJT05fQllfUE9TSVRJT04iLDMpfWZ1bmN0aW9uIENzdCh0LGUpe3ZhciBuLHI7aWYobj11KG40KHQuZyxlKSwzMyksbilyZXR1cm4gbjtpZihyPXUobjQodC5qLGUpLDExOCkscilyZXR1cm4gcjt0aHJvdyBpdChuZXcgdWQoIlJlZmVyZW5jZWQgc2hhcGUgZG9lcyBub3QgZXhpc3Q6ICIrZSkpfWZ1bmN0aW9uIEUxbih0LGUpe2lmKHQuYz09ZSlyZXR1cm4gdC5kO2lmKHQuZD09ZSlyZXR1cm4gdC5jO3Rocm93IGl0KG5ldyBGbigiTm9kZSAnb25lJyBtdXN0IGJlIGVpdGhlciBzb3VyY2Ugb3IgdGFyZ2V0IG9mIGVkZ2UgJ2VkZ2UnLiIpKX1mdW5jdGlvbiBUMW4odCxlKXtpZih0LmMuaT09ZSlyZXR1cm4gdC5kLmk7aWYodC5kLmk9PWUpcmV0dXJuIHQuYy5pO3Rocm93IGl0KG5ldyBGbigiTm9kZSAiK2UrIiBpcyBuZWl0aGVyIHNvdXJjZSBub3IgdGFyZ2V0IG9mIGVkZ2UgIit0KSl9ZnVuY3Rpb24gQzFuKHQsZSl7dmFyIG47c3dpdGNoKGUuZyl7Y2FzZSAyOmNhc2UgNDpuPXQuYSx0LmMuZC5uLmI8bi5kLm4uYiYmKG49dC5jKSxPZyh0LGUsKEkxKCksdmx0KSxuKTticmVhaztjYXNlIDE6Y2FzZSAzOk9nKHQsZSwoSTEoKSxPNiksbnVsbCl9fWZ1bmN0aW9uIF9zdCh0LGUsbixyLHMsbyl7dmFyIGgsZCx2LGssQztmb3IoaD1BZG4oZSxuLG8pLGQ9bj09KHZlKCksUG4pfHxuPT1Cbj8tMToxLGs9dFtuLmddLEM9MDtDPGsubGVuZ3RoO0MrKyl2PWtbQ10sdj4wJiYodis9cyksa1tDXT1oLGgrPWQqKHYrcil9ZnVuY3Rpb24gT3NlKHQpe3ZhciBlLG4scjtmb3Iocj10LmYsdC5uPU50KGFhLHZvLDI1LHIsMTUsMSksdC5kPU50KGFhLHZvLDI1LHIsMTUsMSksZT0wO2U8cjtlKyspbj11KE5lKHQuYy5iLGUpLDI5KSx0Lm5bZV09dXNlKHQsbiksdC5kW2VdPVZjZSh0LG4pfWZ1bmN0aW9uIFNzdCh0LGUpe3ZhciBuLHIscztmb3Iocz0wLHI9MjtyPGU7cjw8PTEpdC5EYiZyJiYrK3M7aWYocz09MCl7Zm9yKG49ZTw8PTE7bjw9MTI4O248PD0xKWlmKHQuRGImbilyZXR1cm4gMDtyZXR1cm4tMX1lbHNlIHJldHVybiBzfWZ1bmN0aW9uIFBzZSh0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKGg9b3UodC5lLlRnKCksZSksbz1udWxsLG49dSh0LmcsMTE5KSxzPTA7czx0Lmk7KytzKXI9bltzXSxoLnJsKHIuYWsoKSkmJighbyYmKG89bmV3IG94KSxEcihvLHIpKTtvJiZVaGUodCxvKX1mdW5jdGlvbiBGc2UodCl7dmFyIGUsbixyO2lmKCF0KXJldHVybiBudWxsO2lmKHQuZGMoKSlyZXR1cm4iIjtmb3Iocj1uZXcgQWcsbj10LktjKCk7bi5PYigpOyllPW4uUGIoKSxnbyhyLEJyKGUpKSxyLmErPSIgIjtyZXR1cm4gaW50KHIsci5hLmxlbmd0aC0xKX1mdW5jdGlvbiBYM3QodCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKER1bih0KSxzPSh0Lms9PW51bGwmJih0Lms9TnQoRHV0LGVlLDc4LDAsMCwxKSksdC5rKSxvPTAsaD1zLmxlbmd0aDtvPGg7KytvKXI9c1tvXSxYM3Qocik7ZD10LmYsZCYmWDN0KGQpfWZ1bmN0aW9uIE5zZSh0LGUpe3ZhciBuPW5ldyBBcnJheShlKSxyO3N3aXRjaCh0KXtjYXNlIDE0OmNhc2UgMTU6cj0wO2JyZWFrO2Nhc2UgMTY6cj0hMTticmVhaztkZWZhdWx0OnJldHVybiBufWZvcih2YXIgcz0wO3M8ZTsrK3MpbltzXT1yO3JldHVybiBufWZ1bmN0aW9uIGx2KHQpe3ZhciBlLG4scjtmb3Iobj1uZXcgUyh0LmEuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksNTcpLGUuYy4kYigpO0JwKHQuZCk/cj10LmEuYzpyPXQuYS5kLHh1KHIsbmV3IHdyKHQpKSx0LmMuTWUodCksb3VlKHQpfWZ1bmN0aW9uIEJzZSh0KXt2YXIgZSxuLHIscztmb3Iobj1uZXcgUyh0LmUuYyk7bi5hPG4uYy5jLmxlbmd0aDspe2ZvcihlPXUoSihuKSwyODIpLHM9bmV3IFMoZS5iKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSw0NDcpLGR4dChyKTtMb2UoZSl9fWZ1bmN0aW9uIG5xKHQpe3ZhciBlLG4scixzLG87Zm9yKHI9MCxvPTAscz0wLG49bmV3IFModC5hKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxODcpLG89Yi5NYXRoLm1heChvLGUucikscis9ZS5kKyhzPjA/dC5jOjApLCsrczt0LmI9cix0LmQ9b31mdW5jdGlvbiBfMW4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihyPTAscz0wLG49MCxoPW5ldyBTKGUpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDIwMCkscj1iLk1hdGgubWF4KHIsby5lKSxzKz1vLmIrKG4+MD90Lmc6MCksKytuO3QuYz1zLHQuZD1yfWZ1bmN0aW9uIFJzZSh0LGUpe3ZhciBuO3JldHVybiBuPWx0KGN0KGFhLDEpLHZvLDI1LDE1LFtIM3QodCwoS2YoKSxzYyksZSksSDN0KHQsZXUsZSksSDN0KHQsYWMsZSldKSx0LmYmJihuWzBdPWIuTWF0aC5tYXgoblswXSxuWzJdKSxuWzJdPW5bMF0pLG59ZnVuY3Rpb24gUzFuKHQsZSxuKXt2YXIgcjt0cnl7U3EodCxlK3QuaixuK3QuaywhMSwhMCl9Y2F0Y2gocyl7dGhyb3cgcz1XaShzKSxfdChzLDczKT8ocj1zLGl0KG5ldyB5byhyLmcrUXErZStZYStuKyIpLiIpKSk6aXQocyl9fWZ1bmN0aW9uIEExbih0LGUsbil7dmFyIHI7dHJ5e1NxKHQsZSt0Lmosbit0LmssITAsITEpfWNhdGNoKHMpe3Rocm93IHM9V2kocyksX3Qocyw3Myk/KHI9cyxpdChuZXcgeW8oci5nK1FxK2UrWWErbisiKS4iKSkpOml0KHMpfX1mdW5jdGlvbiBqc2UodCl7dmFyIGU7VXModCwoVGUoKSxOdikpJiYoZT11KFEodCxOdiksMjEpLGUuSGMoKHB5KCksX2YpKT8oZS5NYyhfZiksZS5GYyhTZikpOmUuSGMoU2YpJiYoZS5NYyhTZiksZS5GYyhfZikpKX1mdW5jdGlvbiAkc2UodCl7dmFyIGU7VXModCwoVGUoKSxOdikpJiYoZT11KFEodCxOdiksMjEpLGUuSGMoKHB5KCksTGYpKT8oZS5NYyhMZiksZS5GYyhIaCkpOmUuSGMoSGgpJiYoZS5NYyhIaCksZS5GYyhMZikpKX1mdW5jdGlvbiBMMW4odCxlLG4pe3ZyKG4sIlNlbGYtTG9vcCBvcmRlcmluZyIsMSksbHMod3UoUmkoUmkoV28obmV3IFRuKG51bGwsbmV3IF9uKGUuYiwxNikpLG5ldyBtTiksbmV3IHJYKSxuZXcgaVgpLG5ldyBzWCksbmV3IExtKHQpKSxvcihuKX1mdW5jdGlvbiBuSSh0LGUsbixyKXt2YXIgcyxvO2ZvcihzPWU7czx0LmMubGVuZ3RoO3MrKylpZihvPShBbihzLHQuYy5sZW5ndGgpLHUodC5jW3NdLDExKSksbi5NYihvKSlyLmNbci5jLmxlbmd0aF09bztlbHNlIHJldHVybiBzO3JldHVybiB0LmMubGVuZ3RofWZ1bmN0aW9uIEFzdCh0LGUsbixyKXt2YXIgcyxvLGgsZDtyZXR1cm4gdC5hPT1udWxsJiZJZ24odCxlKSxoPWUuYi5qLmMubGVuZ3RoLG89bi5kLnAsZD1yLmQucCxzPWQtMSxzPDAmJihzPWgtMSksbzw9cz90LmFbc10tdC5hW29dOnQuYVtoLTFdLXQuYVtvXSt0LmFbc119ZnVuY3Rpb24gTTFuKHQpe3ZhciBlLG47aWYoIXQuYilmb3IodC5iPUQkKHUodC5mLDMzKS5BZygpLmkpLG49bmV3IG5yKHUodC5mLDMzKS5BZygpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksMTM3KSxsZSh0LmIsbmV3IGdldChlKSk7cmV0dXJuIHQuYn1mdW5jdGlvbiBEMW4odCl7dmFyIGUsbjtpZighdC5lKWZvcih0LmU9RCQodXJ0KHUodC5mLDMzKSkuaSksbj1uZXcgbnIodXJ0KHUodC5mLDMzKSkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSwxMTgpLGxlKHQuZSxuZXcgJHp0KGUpKTtyZXR1cm4gdC5lfWZ1bmN0aW9uIHpzZSh0KXt2YXIgZSxuO2lmKCF0LmEpZm9yKHQuYT1EJChwJCh1KHQuZiwzMykpLmkpLG49bmV3IG5yKHAkKHUodC5mLDMzKSkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSwzMyksbGUodC5hLG5ldyBnbnQodCxlKSk7cmV0dXJuIHQuYX1mdW5jdGlvbiBodih0KXt2YXIgZTtpZighdC5DJiYodC5EIT1udWxsfHx0LkIhPW51bGwpKWlmKGU9WjRuKHQpLGUpdC55ayhlKTtlbHNlIHRyeXt0LnlrKG51bGwpfWNhdGNoKG4pe2lmKG49V2kobiksIV90KG4sNjApKXRocm93IGl0KG4pfXJldHVybiB0LkN9ZnVuY3Rpb24gSTFuKHQpe3N3aXRjaCh0LnEuZyl7Y2FzZSA1OmhhZSh0LCh2ZSgpLFBuKSksaGFlKHQsbXIpO2JyZWFrO2Nhc2UgNDpyaGUodCwodmUoKSxQbikpLHJoZSh0LG1yKTticmVhaztkZWZhdWx0OmZvZSh0LCh2ZSgpLFBuKSksZm9lKHQsbXIpfX1mdW5jdGlvbiBPMW4odCl7c3dpdGNoKHQucS5nKXtjYXNlIDU6ZmFlKHQsKHZlKCksSG4pKSxmYWUodCxCbik7YnJlYWs7Y2FzZSA0OmloZSh0LCh2ZSgpLEhuKSksaWhlKHQsQm4pO2JyZWFrO2RlZmF1bHQ6ZG9lKHQsKHZlKCksSG4pKSxkb2UodCxCbil9fWZ1bmN0aW9uIGQ0KHQsZSl7dmFyIG4scixzO2ZvcihzPW5ldyBDYSxyPXQuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMzcpLHhfKG4scy5hLDApLHMuYSs9bi5mLmErZSxzLmI9Yi5NYXRoLm1heChzLmIsbi5mLmIpO3JldHVybiBzLmI+MCYmKHMuYis9ZSksc31mdW5jdGlvbiBycSh0LGUpe3ZhciBuLHIscztmb3Iocz1uZXcgQ2Escj10LktjKCk7ci5PYigpOyluPXUoci5QYigpLDM3KSx4XyhuLDAscy5iKSxzLmIrPW4uZi5iK2Uscy5hPWIuTWF0aC5tYXgocy5hLG4uZi5hKTtyZXR1cm4gcy5hPjAmJihzLmErPWUpLHN9ZnVuY3Rpb24gcXNlKHQpe3ZhciBlLG4scjtmb3Iocj13aSxuPW5ldyBTKHQuYSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTApLFVzKGUsKGFlKCksVGMpKSYmKHI9Yi5NYXRoLm1pbihyLHUoUShlLFRjKSwxOSkuYSkpO3JldHVybiByfWZ1bmN0aW9uIEhzZSh0LGUpe3ZhciBuLHI7aWYoZS5sZW5ndGg9PTApcmV0dXJuIDA7Zm9yKG49Y3J0KHQuYSxlWzBdLCh2ZSgpLEJuKSksbis9Y3J0KHQuYSxlW2UubGVuZ3RoLTFdLEhuKSxyPTA7cjxlLmxlbmd0aDtyKyspbis9YmduKHQscixlKTtyZXR1cm4gbn1mdW5jdGlvbiBWc2UoKXttXygpLHRoaXMuYz1uZXcgaGUsdGhpcy5pPW5ldyBoZSx0aGlzLmU9bmV3IE8wLHRoaXMuZj1uZXcgTzAsdGhpcy5nPW5ldyBPMCx0aGlzLmo9bmV3IGhlLHRoaXMuYT1uZXcgaGUsdGhpcy5iPW5ldyBfcix0aGlzLms9bmV3IF9yfWZ1bmN0aW9uIExzdCh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT02P3QuQ2IuaWgodCw1LGkxLGUpOihyPW5vKHUoeW4oKG49dShEbih0LDE2KSwyNiksbnx8dC56aCgpKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gUDFuKHQpe0k4KCk7dmFyIGU9dC5lO2lmKGUmJmUuc3RhY2spe3ZhciBuPWUuc3RhY2sscj1lK2AKYDtyZXR1cm4gbi5zdWJzdHJpbmcoMCxyLmxlbmd0aCk9PXImJihuPW4uc3Vic3RyaW5nKHIubGVuZ3RoKSksbi5zcGxpdChgCmApfXJldHVybltdfWZ1bmN0aW9uIEYxbih0KXt2YXIgZTtyZXR1cm4gZT0oc25lKCksamdlKSxlW3Q+Pj4yOF18ZVt0Pj4yNCYxNV08PDR8ZVt0Pj4yMCYxNV08PDh8ZVt0Pj4xNiYxNV08PDEyfGVbdD4+MTImMTVdPDwxNnxlW3Q+PjgmMTVdPDwyMHxlW3Q+PjQmMTVdPDwyNHxlW3QmMTVdPDwyOH1mdW5jdGlvbiBHc2UodCl7dmFyIGUsbixyO3QuYj09dC5jJiYocj10LmEubGVuZ3RoLG49RHl0KGIuTWF0aC5tYXgoOCxyKSk8PDEsdC5iIT0wPyhlPWZmKHQuYSxuKSxkbmUodCxlLHIpLHQuYT1lLHQuYj0wKTpmcXQodC5hLG4pLHQuYz1yKX1mdW5jdGlvbiBOMW4odCxlKXt2YXIgbjtyZXR1cm4gbj10LmIsbi5YZSgodWkoKSxkbCkpP24uSGYoKT09KHZlKCksQm4pPy1uLnJmKCkuYS1YdCh5ZShuLldlKGRsKSkpOmUrWHQoeWUobi5XZShkbCkpKTpuLkhmKCk9PSh2ZSgpLEJuKT8tbi5yZigpLmE6ZX1mdW5jdGlvbiBySSh0KXt2YXIgZTtyZXR1cm4gdC5iLmMubGVuZ3RoIT0wJiZ1KE5lKHQuYiwwKSw3MCkuYT91KE5lKHQuYiwwKSw3MCkuYTooZT1ncnQodCksZT8/IiIrKHQuYz9Sbyh0LmMuYSx0LDApOi0xKSl9ZnVuY3Rpb24gaXEodCl7dmFyIGU7cmV0dXJuIHQuZi5jLmxlbmd0aCE9MCYmdShOZSh0LmYsMCksNzApLmE/dShOZSh0LmYsMCksNzApLmE6KGU9Z3J0KHQpLGU/PyIiKyh0Lmk/Um8odC5pLmosdCwwKTotMSkpfWZ1bmN0aW9uIEIxbih0LGUpe3ZhciBuLHI7aWYoZTwwfHxlPj10LmdjKCkpcmV0dXJuIG51bGw7Zm9yKG49ZTtuPHQuZ2MoKTsrK24paWYocj11KHQuWGIobiksMTI4KSxuPT10LmdjKCktMXx8IXIubylyZXR1cm4gbmV3IGZhKHBlKG4pLHIpO3JldHVybiBudWxsfWZ1bmN0aW9uIFIxbih0LGUsbil7dmFyIHIscyxvLGgsZDtmb3Iobz10LmMsZD1uP2U6dCxyPW4/dDplLHM9ZC5wKzE7czxyLnA7KytzKWlmKGg9dShOZShvLmEscyksMTApLCEoaC5rPT0oVm4oKSx6MSl8fGZkbihoKSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gUTN0KHQpe3ZhciBlLG4scixzLG87Zm9yKG89MCxzPUNzLHI9MCxuPW5ldyBTKHQuYSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTg3KSxvKz1lLnIrKHI+MD90LmM6MCkscz1iLk1hdGgubWF4KHMsZS5kKSwrK3I7dC5lPW8sdC5iPXN9ZnVuY3Rpb24gajFuKHQpe3ZhciBlLG47aWYoIXQuYilmb3IodC5iPUQkKHUodC5mLDExOCkuQWcoKS5pKSxuPW5ldyBucih1KHQuZiwxMTgpLkFnKCkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSwxMzcpLGxlKHQuYixuZXcgZ2V0KGUpKTtyZXR1cm4gdC5ifWZ1bmN0aW9uICQxbih0LGUpe3ZhciBuLHIscztpZihlLmRjKCkpcmV0dXJuIHk4KCkseTgoKSxwUDtmb3Iobj1uZXcgWVd0KHQsZS5nYygpKSxzPW5ldyBucih0KTtzLmUhPXMuaS5nYygpOylyPWRyKHMpLGUuSGMocikmJkRyKG4scik7cmV0dXJuIG59ZnVuY3Rpb24gWjN0KHQsZSxuLHIpe3JldHVybiBlPT0wP3I/KCF0Lm8mJih0Lm89bmV3IF9sKChKYygpLFNiKSxIdix0LDApKSx0Lm8pOighdC5vJiYodC5vPW5ldyBfbCgoSmMoKSxTYiksSHYsdCwwKSksd0QodC5vKSk6WHoodCxlLG4scil9ZnVuY3Rpb24gTXN0KHQpe3ZhciBlLG47aWYodC5yYilmb3IoZT0wLG49dC5yYi5pO2U8bjsrK2Upek0oQXQodC5yYixlKSk7aWYodC52Yilmb3IoZT0wLG49dC52Yi5pO2U8bjsrK2Upek0oQXQodC52YixlKSk7QzkoKCR1KCkseWEpLHQpLHQuQmJ8PTF9ZnVuY3Rpb24gTmkodCxlLG4scixzLG8saCxkLHYsayxDLE0saixIKXtyZXR1cm4geG9lKHQsZSxyLG51bGwscyxvLGgsZCx2LGssaiwhMCxIKSxjM3QodCxDKSxfdCh0LkNiLDg4KSYmZ3koc2wodSh0LkNiLDg4KSksMiksbiYmY3l0KHQsbiksdTN0KHQsTSksdH1mdW5jdGlvbiB6MW4odCl7dmFyIGUsbjtpZih0PT1udWxsKXJldHVybiBudWxsO249MDt0cnl7bj1xbCh0LFNhLHdpKSZ5c31jYXRjaChyKXtpZihyPVdpKHIpLF90KHIsMTI3KSllPUskKHQpLG49ZVswXTtlbHNlIHRocm93IGl0KHIpfXJldHVybiBCRChuKX1mdW5jdGlvbiBxMW4odCl7dmFyIGUsbjtpZih0PT1udWxsKXJldHVybiBudWxsO249MDt0cnl7bj1xbCh0LFNhLHdpKSZ5c31jYXRjaChyKXtpZihyPVdpKHIpLF90KHIsMTI3KSllPUskKHQpLG49ZVswXTtlbHNlIHRocm93IGl0KHIpfXJldHVybiBCRChuKX1mdW5jdGlvbiBIMW4odCxlKXt2YXIgbixyLHM7cmV0dXJuIHM9dC5oLWUuaCxzPDB8fChuPXQubC1lLmwscj10Lm0tZS5tKyhuPj4yMikscys9cj4+MjIsczwwKT8hMToodC5sPW4maGwsdC5tPXImaGwsdC5oPXMmWjAsITApfWZ1bmN0aW9uIFYxbih0LGUsbixyLHMsbyxoKXt2YXIgZCx2O3JldHVybiEoZS5BZSgpJiYodj10LmEudWUobixyKSx2PDB8fCFzJiZ2PT0wKXx8ZS5CZSgpJiYoZD10LmEudWUobixvKSxkPjB8fCFoJiZkPT0wKSl9ZnVuY3Rpb24gRzFuKHQsZSl7b0UoKTt2YXIgbjtpZihuPXQuai5nLWUuai5nLG4hPTApcmV0dXJuIDA7c3dpdGNoKHQuai5nKXtjYXNlIDI6cmV0dXJuIEppdChlLF9UdCktSml0KHQsX1R0KTtjYXNlIDQ6cmV0dXJuIEppdCh0LENUdCktSml0KGUsQ1R0KX1yZXR1cm4gMH1mdW5jdGlvbiBVMW4odCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBPbHQ7Y2FzZSAxOnJldHVybiBQbHQ7Y2FzZSAyOnJldHVybiBGbHQ7Y2FzZSAzOnJldHVybiBObHQ7Y2FzZSA0OnJldHVybiBVVjtjYXNlIDU6cmV0dXJuIEJsdDtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBfbyh0LGUsbil7dmFyIHIscztyZXR1cm4gcj0ocz1uZXcgc2V0LGIyKHMsZSksUWMocyxuKSxEcigoIXQuYyYmKHQuYz1uZXcgZmUoVnYsdCwxMiwxMCkpLHQuYykscykscyksUmcociwwKSxyeShyLDEpLHFnKHIsITApLHpnKHIsITApLHJ9ZnVuY3Rpb24gbDYodCxlKXt2YXIgbixyO2lmKGU+PXQuaSl0aHJvdyBpdChuZXcgbm50KGUsdC5pKSk7cmV0dXJuKyt0Lmosbj10LmdbZV0scj10LmktZS0xLHI+MCYmRGModC5nLGUrMSx0LmcsZSxyKSx0cyh0LmcsLS10LmksbnVsbCksdC5maShlLG4pLHQuY2koKSxufWZ1bmN0aW9uIFVzZSh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT0xNz90LkNiLmloKHQsMjEsVWgsZSk6KHI9bm8odSh5bigobj11KERuKHQsMTYpLDI2KSxufHx0LnpoKCkpLHQuRGI+PjE2KSwxOCkpLHQuQ2IuaWgodCxyLm4sci5mLGUpKX1mdW5jdGlvbiBXMW4odCl7dmFyIGUsbixyLHM7Zm9yKHduKCksWnModC5jLHQuYSkscz1uZXcgUyh0LmMpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPUoocyksbj1uZXcgUyh0LmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDY3OSksZS5LZShyKX1mdW5jdGlvbiBZMW4odCl7dmFyIGUsbixyLHM7Zm9yKHduKCksWnModC5jLHQuYSkscz1uZXcgUyh0LmMpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPUoocyksbj1uZXcgUyh0LmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDM2OSksZS5LZShyKX1mdW5jdGlvbiBLMW4odCl7dmFyIGUsbixyLHMsbztmb3Iocz13aSxvPW51bGwscj1uZXcgUyh0LmQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDIxMyksbi5kLmpebi5lLmomJihlPW4uZS5lLW4uZC5lLW4uYSxlPHMmJihzPWUsbz1uKSk7cmV0dXJuIG99ZnVuY3Rpb24gSjN0KCl7SjN0PVosX2JlPW5ldyBtbih2NnQsKE5uKCksITEpKSxFYmU9bmV3IG1uKG02dCwxMDApLFQ3dD0ocTkoKSxpbHQpLFRiZT1uZXcgbW4oeTZ0LFQ3dCksQ2JlPW5ldyBtbih4NnQsRWQpLFNiZT1uZXcgbW4oazZ0LHBlKHdpKSl9ZnVuY3Rpb24gV3NlKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDO2ZvcihrPTAscz10LmFbZV0sbz0wLGg9cy5sZW5ndGg7bzxoOysrbylmb3Iocj1zW29dLEM9dF8ocixuKSx2PUMuS2MoKTt2Lk9iKCk7KWQ9dSh2LlBiKCksMTEpLGtpKHQuZixkLHBlKGsrKykpfWZ1bmN0aW9uIFgxbih0LGUsbil7dmFyIHIscyxvLGg7aWYobilmb3Iocz1uLmEubGVuZ3RoLHI9bmV3IGUyKHMpLGg9KHIuYi1yLmEpKnIuYzwwPyhGcCgpLEliKTpuZXcganAocik7aC5PYigpOylvPXUoaC5QYigpLDE5KSxsbih0LGUsZjYoSm0obixvLmEpKSl9ZnVuY3Rpb24gUTFuKHQsZSxuKXt2YXIgcixzLG8saDtpZihuKWZvcihzPW4uYS5sZW5ndGgscj1uZXcgZTIocyksaD0oci5iLXIuYSkqci5jPDA/KEZwKCksSWIpOm5ldyBqcChyKTtoLk9iKCk7KW89dShoLlBiKCksMTkpLGxuKHQsZSxmNihKbShuLG8uYSkpKX1mdW5jdGlvbiB0NHQodCl7bmIoKTt2YXIgZTtyZXR1cm4gZT11KGVJKHF4KHQuayksTnQoWGEseGMsNjEsMiwwLDEpKSwxMjIpLCQ4KGUsMCxlLmxlbmd0aCxudWxsKSxlWzBdPT0odmUoKSxQbikmJmVbMV09PUJuJiYodHMoZSwwLEJuKSx0cyhlLDEsUG4pKSxlfWZ1bmN0aW9uIFlzZSh0LGUsbil7dmFyIHIscyxvO3JldHVybiBzPU53bih0LGUsbiksbz16NXQodCxzKSx0aXQodC5iKSxJcnQodCxlLG4pLHduKCksWnMocyxuZXcgSSR0KHQpKSxyPXo1dCh0LHMpLHRpdCh0LmIpLElydCh0LG4sZSksbmV3IGZhKHBlKG8pLHBlKHIpKX1mdW5jdGlvbiBLc2UoKXtLc2U9WixObWU9YmkobmV3IFZzLChXYSgpLElvKSwocm8oKSxwUykpLF9HPW5ldyBQcygibGluZWFyU2VnbWVudHMuaW5wdXRQcmlvIixwZSgwKSksU0c9bmV3IFBzKCJsaW5lYXJTZWdtZW50cy5vdXRwdXRQcmlvIixwZSgwKSl9ZnVuY3Rpb24gd0UoKXt3RT1aLEFHPW5ldyByaigiUDFfVFJFRUlGSUNBVElPTiIsMCksUlM9bmV3IHJqKCJQMl9OT0RFX09SREVSSU5HIiwxKSwkTz1uZXcgcmooIlAzX05PREVfUExBQ0VNRU5UIiwyKSxqUz1uZXcgcmooIlA0X0VER0VfUk9VVElORyIsMyl9ZnVuY3Rpb24gdXkoKXt1eT1aLFF5ZT0odWkoKSxZNiksWnllPVcyLFd5ZT1HMixZeWU9YzUsS3llPXhiLFV5ZT1vNSxMX3Q9dFAsWHllPVF5LFdodD0oRTV0KCksanllKSxZaHQ9JHllLE1fdD16eWUsQkc9cXllLFJHPUh5ZSxxTz1WeWUsRF90PUd5ZX1mdW5jdGlvbiB6bCgpe3psPVosclA9bmV3IGFqKCJVTktOT1dOIiwwKSxmMD1uZXcgYWooIkFCT1ZFIiwxKSxrYj1uZXcgYWooIkJFTE9XIiwyKSxuUD1uZXcgYWooIklOTElORSIsMyksbmV3IFBzKCJvcmcuZWNsaXBzZS5lbGsubGFiZWxTaWRlIixyUCl9ZnVuY3Rpb24gWHNlKHQsZSl7dmFyIG47aWYodC5uaSgpJiZlIT1udWxsKXtmb3Iobj0wO248dC5pOysrbilpZih5aShlLHQuZ1tuXSkpcmV0dXJuIG59ZWxzZSBmb3Iobj0wO248dC5pOysrbilpZihWdCh0Lmdbbl0pPT09VnQoZSkpcmV0dXJuIG47cmV0dXJuLTF9ZnVuY3Rpb24gWjFuKHQsZSxuKXt2YXIgcixzO3JldHVybiBlLmM9PShzbygpLG51KSYmbi5jPT10bD8tMTplLmM9PXRsJiZuLmM9PW51PzE6KHI9enJlKGUuYSx0LmEpLHM9enJlKG4uYSx0LmEpLGUuYz09bnU/cy1yOnItcyl9ZnVuY3Rpb24gbHkodCxlLG4pe2lmKG4mJihlPDB8fGU+bi5hLmMubGVuZ3RoKSl0aHJvdyBpdChuZXcgRm4oImluZGV4IG11c3QgYmUgPj0gMCBhbmQgPD0gbGF5ZXIgbm9kZSBjb3VudCIpKTt0LmMmJm11KHQuYy5hLHQpLHQuYz1uLG4mJkhtKG4uYSxlLHQpfWZ1bmN0aW9uIFFzZSh0LGUpe3ZhciBuLHIscztmb3Iocj1uZXcgYXIobHIoVTAodCkuYS5LYygpLG5ldyB6KSk7enIocik7KXJldHVybiBuPXUoTXIociksMTcpLHM9dShlLktiKG4pLDEwKSxuZXcgV2soTHIocy5uLmIrcy5vLmIvMikpO3JldHVybiBQQygpLFBDKCksQ3V0fWZ1bmN0aW9uIFpzZSh0LGUpe3RoaXMuYz1uZXcgX3IsdGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5kPXUoUSh0LChhZSgpLFE0KSksMzA0KSxWdChRKHQsKFRlKCksaDl0KSkpPT09VnQoKHhEKCksV1YpKT90aGlzLmU9bmV3IExxdDp0aGlzLmU9bmV3IEFxdH1mdW5jdGlvbiBKMW4odCxlKXt2YXIgbixyLHMsbztmb3Iobz0wLHI9bmV3IFModCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMzMpLG8rPWIuTWF0aC5wb3cobi5nKm4uZi1lLDIpO3JldHVybiBzPWIuTWF0aC5zcXJ0KG8vKHQuYy5sZW5ndGgtMSkpLHN9ZnVuY3Rpb24gbF8odCxlKXt2YXIgbixyO3JldHVybiByPW51bGwsdC5YZSgodWkoKSxLNikpJiYobj11KHQuV2UoSzYpLDk0KSxuLlhlKGUpJiYocj1uLldlKGUpKSkscj09bnVsbCYmdC55ZigpJiYocj10LnlmKCkuV2UoZSkpLHI9PW51bGwmJihyPUllKGUpKSxyfWZ1bmN0aW9uIERzdCh0LGUpe3ZhciBuLHI7bj10LlpjKGUpO3RyeXtyZXR1cm4gcj1uLlBiKCksbi5RYigpLHJ9Y2F0Y2gocyl7dGhyb3cgcz1XaShzKSxfdChzLDEwOSk/aXQobmV3IHlvKCJDYW4ndCByZW1vdmUgZWxlbWVudCAiK2UpKTppdChzKX19ZnVuY3Rpb24gdGRuKHQsZSl7dmFyIG4scixzO2lmKHI9bmV3IEJSLHM9bmV3IE15dChyLnEuZ2V0RnVsbFllYXIoKS1hYixyLnEuZ2V0TW9udGgoKSxyLnEuZ2V0RGF0ZSgpKSxuPWUzbih0LGUscyksbj09MHx8bjxlLmxlbmd0aCl0aHJvdyBpdChuZXcgRm4oZSkpO3JldHVybiBzfWZ1bmN0aW9uIGU0dCh0LGUpe3ZhciBuLHIscztmb3IoT24oZSkscTJ0KGUhPXQpLHM9dC5iLmMubGVuZ3RoLHI9ZS5LYygpO3IuT2IoKTspbj1yLlBiKCksbGUodC5iLE9uKG4pKTtyZXR1cm4gcyE9dC5iLmMubGVuZ3RoPyh6eXQodCwwKSwhMCk6ITF9ZnVuY3Rpb24gaUkoKXtpST1aLEE3dD0odWkoKSxLRyksbmV3IGVvKGdmdCwoTm4oKSwhMCkpLExiZT1HMixNYmU9YzUsRGJlPXhiLEFiZT1vNSxNN3Q9dFAsSWJlPVF5LFM3dD0oSjN0KCksX2JlKSxDN3Q9VGJlLF83dD1DYmUsTDd0PVNiZSx2Vj1FYmV9ZnVuY3Rpb24gZWRuKHQsZSl7aWYoZT09dC5jKXJldHVybiB0LmQ7aWYoZT09dC5kKXJldHVybiB0LmM7dGhyb3cgaXQobmV3IEZuKCIncG9ydCcgbXVzdCBiZSBlaXRoZXIgdGhlIHNvdXJjZSBwb3J0IG9yIHRhcmdldCBwb3J0IG9mIHRoZSBlZGdlLiIpKX1mdW5jdGlvbiBuZG4odCxlLG4pe3ZhciByLHM7c3dpdGNoKHM9dC5vLHI9dC5kLGUuZyl7Y2FzZSAxOnJldHVybi1yLmQtbjtjYXNlIDM6cmV0dXJuIHMuYityLmErbjtjYXNlIDI6cmV0dXJuIHMuYStyLmMrbjtjYXNlIDQ6cmV0dXJuLXIuYi1uO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIG40dCh0LGUsbixyKXt2YXIgcyxvLGgsZDtmb3IoRW8oZSx1KHIuWGIoMCksMjkpKSxkPXIuYmQoMSxyLmdjKCkpLG89dShuLktiKGUpLDIwKS5LYygpO28uT2IoKTspcz11KG8uUGIoKSwxNyksaD1zLmMuaT09ZT9zLmQuaTpzLmMuaSxuNHQodCxoLG4sZCl9ZnVuY3Rpb24gSnNlKHQpe3ZhciBlO3JldHVybiBlPW5ldyBfcixVcyh0LChhZSgpLFhsdCkpP3UoUSh0LFhsdCksODMpOihscyhSaShuZXcgVG4obnVsbCxuZXcgX24odC5qLDE2KSksbmV3IHBYKSxuZXcga3goZSkpLEp0KHQsWGx0LGUpLGUpfWZ1bmN0aW9uIHI0dCh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT02P3QuQ2IuaWgodCw2LFlzLGUpOihyPW5vKHUoeW4oKG49dShEbih0LDE2KSwyNiksbnx8KEpjKCksYVUpKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gaTR0KHQsZSl7dmFyIG4scjtyZXR1cm4gdC5EYj4+MTY9PTc/dC5DYi5paCh0LDEsbFAsZSk6KHI9bm8odSh5bigobj11KERuKHQsMTYpLDI2KSxufHwoSmMoKSxHQXQpKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gczR0KHQsZSl7dmFyIG4scjtyZXR1cm4gdC5EYj4+MTY9PTk/dC5DYi5paCh0LDkscnMsZSk6KHI9bm8odSh5bigobj11KERuKHQsMTYpLDI2KSxufHwoSmMoKSxXQXQpKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gdGFlKHQsZSl7dmFyIG4scjtyZXR1cm4gdC5EYj4+MTY9PTU/dC5DYi5paCh0LDkscFUsZSk6KHI9bm8odSh5bigobj11KERuKHQsMTYpLDI2KSxufHwoZG4oKSxvcCkpLHQuRGI+PjE2KSwxOCkpLHQuQ2IuaWgodCxyLm4sci5mLGUpKX1mdW5jdGlvbiBhNHQodCxlKXt2YXIgbixyO3JldHVybiB0LkRiPj4xNj09Mz90LkNiLmloKHQsMCxmUCxlKToocj1ubyh1KHluKChuPXUoRG4odCwxNiksMjYpLG58fChkbigpLGFwKSksdC5EYj4+MTYpLDE4KSksdC5DYi5paCh0LHIubixyLmYsZSkpfWZ1bmN0aW9uIGVhZSh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT03P3QuQ2IuaWgodCw2LGkxLGUpOihyPW5vKHUoeW4oKG49dShEbih0LDE2KSwyNiksbnx8KGRuKCksdXApKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gbmFlKCl7dGhpcy5hPW5ldyBvQix0aGlzLmc9bmV3IHRxLHRoaXMuaj1uZXcgdHEsdGhpcy5iPW5ldyBfcix0aGlzLmQ9bmV3IHRxLHRoaXMuaT1uZXcgdHEsdGhpcy5rPW5ldyBfcix0aGlzLmM9bmV3IF9yLHRoaXMuZT1uZXcgX3IsdGhpcy5mPW5ldyBfcn1mdW5jdGlvbiByZG4odCxlLG4pe3ZhciByLHMsbztmb3IobjwwJiYobj0wKSxvPXQuaSxzPW47czxvO3MrKylpZihyPUF0KHQscyksZT09bnVsbCl7aWYocj09bnVsbClyZXR1cm4gc31lbHNlIGlmKFZ0KGUpPT09VnQocil8fHlpKGUscikpcmV0dXJuIHM7cmV0dXJuLTF9ZnVuY3Rpb24gaWRuKHQsZSl7dmFyIG4scjtyZXR1cm4gbj1lLkhoKHQuYSksbj8ocj1CcihYZigoIW4uYiYmKG4uYj1uZXcga2woKGRuKCksUWEpLGNjLG4pKSxuLmIpLFZIKSksaG4oc08scik/QzkodCxSbChlLkhqKCkpKTpyKTpudWxsfWZ1bmN0aW9uIHZFKHQsZSl7dmFyIG4scjtpZihlKXtpZihlPT10KXJldHVybiEwO2ZvcihuPTAscj11KGUsNDkpLmVoKCk7ciYmciE9ZTtyPXIuZWgoKSl7aWYoKytuPnZvdClyZXR1cm4gdkUodCxyKTtpZihyPT10KXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBzZG4odCl7c3dpdGNoKENqKCksdC5xLmcpe2Nhc2UgNTokb2UodCwodmUoKSxQbikpLCRvZSh0LG1yKTticmVhaztjYXNlIDQ6RmNlKHQsKHZlKCksUG4pKSxGY2UodCxtcik7YnJlYWs7ZGVmYXVsdDpGaGUodCwodmUoKSxQbikpLEZoZSh0LG1yKX19ZnVuY3Rpb24gYWRuKHQpe3N3aXRjaChDaigpLHQucS5nKXtjYXNlIDU6ZWNlKHQsKHZlKCksSG4pKSxlY2UodCxCbik7YnJlYWs7Y2FzZSA0OmZzZSh0LCh2ZSgpLEhuKSksZnNlKHQsQm4pO2JyZWFrO2RlZmF1bHQ6TmhlKHQsKHZlKCksSG4pKSxOaGUodCxCbil9fWZ1bmN0aW9uIG9kbih0KXt2YXIgZSxuO2U9dShRKHQsKEpmKCkseWJlKSksMTkpLGU/KG49ZS5hLG49PTA/SnQodCwoWXAoKSx3ViksbmV3IFppdCk6SnQodCwoWXAoKSx3ViksbmV3IEYkKG4pKSk6SnQodCwoWXAoKSx3ViksbmV3IEYkKDEpKX1mdW5jdGlvbiBjZG4odCxlKXt2YXIgbjtzd2l0Y2gobj10LmksZS5nKXtjYXNlIDE6cmV0dXJuLSh0Lm4uYit0Lm8uYik7Y2FzZSAyOnJldHVybiB0Lm4uYS1uLm8uYTtjYXNlIDM6cmV0dXJuIHQubi5iLW4uby5iO2Nhc2UgNDpyZXR1cm4tKHQubi5hK3Quby5hKX1yZXR1cm4gMH1mdW5jdGlvbiB1ZG4odCxlKXtzd2l0Y2godC5nKXtjYXNlIDA6cmV0dXJuIGU9PShkaCgpLGJiKT9CVjpSVjtjYXNlIDE6cmV0dXJuIGU9PShkaCgpLGJiKT9CVjprTztjYXNlIDI6cmV0dXJuIGU9PShkaCgpLGJiKT9rTzpSVjtkZWZhdWx0OnJldHVybiBrT319ZnVuY3Rpb24gc0kodCxlKXt2YXIgbixyLHM7Zm9yKG11KHQuYSxlKSx0LmUtPWUucisodC5hLmMubGVuZ3RoPT0wPzA6dC5jKSxzPVVrdCxyPW5ldyBTKHQuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTg3KSxzPWIuTWF0aC5tYXgocyxuLmQpO3QuYj1zfWZ1bmN0aW9uIG80dCh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT0zP3QuQ2IuaWgodCwxMixycyxlKToocj1ubyh1KHluKChuPXUoRG4odCwxNiksMjYpLG58fChKYygpLFZBdCkpLHQuRGI+PjE2KSwxOCkpLHQuQ2IuaWgodCxyLm4sci5mLGUpKX1mdW5jdGlvbiBjNHQodCxlKXt2YXIgbixyO3JldHVybiB0LkRiPj4xNj09MTE/dC5DYi5paCh0LDEwLHJzLGUpOihyPW5vKHUoeW4oKG49dShEbih0LDE2KSwyNiksbnx8KEpjKCksVUF0KSksdC5EYj4+MTYpLDE4KSksdC5DYi5paCh0LHIubixyLmYsZSkpfWZ1bmN0aW9uIHJhZSh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT0xMD90LkNiLmloKHQsMTEsVWgsZSk6KHI9bm8odSh5bigobj11KERuKHQsMTYpLDI2KSxufHwoZG4oKSxjcCkpLHQuRGI+PjE2KSwxOCkpLHQuQ2IuaWgodCxyLm4sci5mLGUpKX1mdW5jdGlvbiBpYWUodCxlKXt2YXIgbixyO3JldHVybiB0LkRiPj4xNj09MTA/dC5DYi5paCh0LDEyLFdoLGUpOihyPW5vKHUoeW4oKG49dShEbih0LDE2KSwyNiksbnx8KGRuKCksaTMpKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gRGgodCl7dmFyIGU7cmV0dXJuISh0LkJiJjEpJiZ0LnImJnQuci5raCgpJiYoZT11KHQuciw0OSksdC5yPXUoWnAodCxlKSwxMzgpLHQuciE9ZSYmdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsOSw4LGUsdC5yKSkpLHQucn1mdW5jdGlvbiBJc3QodCxlLG4pe3ZhciByO3JldHVybiByPWx0KGN0KGFhLDEpLHZvLDI1LDE1LFtPNHQodCwoS2YoKSxzYyksZSxuKSxPNHQodCxldSxlLG4pLE80dCh0LGFjLGUsbildKSx0LmYmJihyWzBdPWIuTWF0aC5tYXgoclswXSxyWzJdKSxyWzJdPXJbMF0pLHJ9ZnVuY3Rpb24gbGRuKHQsZSl7dmFyIG4scixzO2lmKHM9aTFuKHQsZSkscy5jLmxlbmd0aCE9MClmb3IoWnMocyxuZXcgV0spLG49cy5jLmxlbmd0aCxyPTA7cjxuO3IrKylFRSh0LChBbihyLHMuYy5sZW5ndGgpLHUocy5jW3JdLDI4NikpLE12bih0LHMscikpfWZ1bmN0aW9uIGhkbih0KXt2YXIgZSxuLHIscztmb3Iocz11KEFpKHQuYSwoYjQoKSxqVikpLDE1KS5LYygpO3MuT2IoKTspZm9yKHI9dShzLlBiKCksMTAxKSxuPXF4KHIuaykuS2MoKTtuLk9iKCk7KWU9dShuLlBiKCksNjEpLF84KHQscixlLChudigpLHBiKSwxKX1mdW5jdGlvbiBmZG4odCl7dmFyIGUsbjtpZih0Lms9PShWbigpLHRhKSl7Zm9yKG49bmV3IGFyKGxyKFUwKHQpLmEuS2MoKSxuZXcgeikpO3pyKG4pOylpZihlPXUoTXIobiksMTcpLCFHYShlKSYmdC5jPT1wNHQoZSx0KS5jKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGRkbih0KXt2YXIgZSxuO2lmKHQuaz09KFZuKCksdGEpKXtmb3Iobj1uZXcgYXIobHIoVTAodCkuYS5LYygpLG5ldyB6KSk7enIobik7KWlmKGU9dShNcihuKSwxNyksIUdhKGUpJiZlLmMuaS5jPT1lLmQuaS5jKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGdkbih0LGUpe3ZhciBuLHIscyxvO2Zvcih2cihlLCJEdWxsIGVkZ2Ugcm91dGluZyIsMSksbz1laSh0LmIsMCk7by5iIT1vLmQuYzspZm9yKHM9dSh0aShvKSw4Nikscj1laShzLmQsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDE4OCksQWgobi5hKX1mdW5jdGlvbiBwZG4odCxlKXt2YXIgbixyLHMsbyxoO2lmKGUpZm9yKHM9ZS5hLmxlbmd0aCxuPW5ldyBlMihzKSxoPShuLmItbi5hKSpuLmM8MD8oRnAoKSxJYik6bmV3IGpwKG4pO2guT2IoKTspbz11KGguUGIoKSwxOSkscj1QOChlLG8uYSksciYmQWNlKHQscil9ZnVuY3Rpb24gYmRuKCl7VGJ0KCk7dmFyIHQsZTtmb3IoRnhuKChIcCgpLExuKSksU3huKExuKSxNc3QoTG4pLG9MdD0oZG4oKSxXMSksZT1uZXcgUyhiTHQpO2UuYTxlLmMuYy5sZW5ndGg7KXQ9dShKKGUpLDI0MSksUEUodCxXMSxudWxsKTtyZXR1cm4hMH1mdW5jdGlvbiB1NHQodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrO3JldHVybiB2PXQuaD4+MTksaz1lLmg+PjE5LHYhPWs/ay12OihzPXQuaCxkPWUuaCxzIT1kP3MtZDoocj10Lm0saD1lLm0sciE9aD9yLWg6KG49dC5sLG89ZS5sLG4tbykpKX1mdW5jdGlvbiBzcSgpe3NxPVosWEV0PShDcSgpLFZ1dCksS0V0PW5ldyBtbihReHQsWEV0KSxZRXQ9KFEkKCksSHV0KSxXRXQ9bmV3IG1uKFp4dCxZRXQpLFVFdD0oR3ooKSxxdXQpLEdFdD1uZXcgbW4oSnh0LFVFdCksVkV0PW5ldyBtbih0NnQsKE5uKCksITApKX1mdW5jdGlvbiBoXyh0LGUsbil7dmFyIHIscztyPWUqbixfdCh0LmcsMTQ1KT8ocz1YeCh0KSxzLmYuZD9zLmYuYXx8KHQuZC5hKz1yK0IxKToodC5kLmQtPXIrQjEsdC5kLmErPXIrQjEpKTpfdCh0LmcsMTApJiYodC5kLmQtPXIsdC5kLmErPTIqcil9ZnVuY3Rpb24gc2FlKHQsZSxuKXt2YXIgcixzLG8saCxkO2ZvcihzPXRbbi5nXSxkPW5ldyBTKGUuZCk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTAxKSxvPWguaSxvJiZvLmk9PW4mJihyPWguZFtuLmddLHNbcl09Yi5NYXRoLm1heChzW3JdLG8uai5iKSl9ZnVuY3Rpb24gd2RuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iocj0wLHM9MCxuPTAsaD1uZXcgUyhlLmQpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDQ0MyksbnEobykscj1iLk1hdGgubWF4KHIsby5iKSxzKz1vLmQrKG4+MD90Lmc6MCksKytuO2UuYj1yLGUuZT1zfWZ1bmN0aW9uIGFhZSh0KXt2YXIgZSxuLHI7aWYocj10LmIsQVZ0KHQuaSxyLmxlbmd0aCkpe2ZvcihuPXIubGVuZ3RoKjIsdC5iPU50KEx1dCxQSSwzMTcsbiwwLDEpLHQuYz1OdChMdXQsUEksMzE3LG4sMCwxKSx0LmY9bi0xLHQuaT0wLGU9dC5hO2U7ZT1lLmMpZkkodCxlLGUpOysrdC5nfX1mdW5jdGlvbiB2ZG4odCxlLG4scil7dmFyIHMsbyxoLGQ7Zm9yKHM9MDtzPGUubztzKyspZm9yKG89cy1lLmorbixoPTA7aDxlLnA7aCsrKWQ9aC1lLmsrcixmNChlLHMsaCk/bDFuKHQsbyxkKXx8UzFuKHQsbyxkKTpEc2UoZSxzLGgpJiYoU3NlKHQsbyxkKXx8QTFuKHQsbyxkKSl9ZnVuY3Rpb24gbWRuKHQsZSxuKXt2YXIgcjtyPWUuYy5pLHIuaz09KFZuKCksdGEpPyhKdCh0LChhZSgpLHIxKSx1KFEocixyMSksMTEpKSxKdCh0LCRoLHUoUShyLCRoKSwxMSkpKTooSnQodCwoYWUoKSxyMSksZS5jKSxKdCh0LCRoLG4uZCkpfWZ1bmN0aW9uIG1FKHQsZSxuKXtrNCgpO3ZhciByLHMsbyxoLGQsdjtyZXR1cm4gaD1lLzIsbz1uLzIscj1iLk1hdGguYWJzKHQuYSkscz1iLk1hdGguYWJzKHQuYiksZD0xLHY9MSxyPmgmJihkPWgvcikscz5vJiYodj1vL3MpLGZkKHQsYi5NYXRoLm1pbihkLHYpKSx0fWZ1bmN0aW9uIHlkbigpe0RxKCk7dmFyIHQsZTt0cnl7aWYoZT11KG00dCgoUHAoKSxZaCksWkUpLDIwMTQpLGUpcmV0dXJuIGV9Y2F0Y2gobil7aWYobj1XaShuKSxfdChuLDEwMikpdD1uLGF2dCgoUHIoKSx0KSk7ZWxzZSB0aHJvdyBpdChuKX1yZXR1cm4gbmV3IGF4fWZ1bmN0aW9uIHhkbigpe1F0ZSgpO3ZhciB0LGU7dHJ5e2lmKGU9dShtNHQoKFBwKCksWWgpLE8yKSwyMDI0KSxlKXJldHVybiBlfWNhdGNoKG4pe2lmKG49V2kobiksX3QobiwxMDIpKXQ9bixhdnQoKFByKCksdCkpO2Vsc2UgdGhyb3cgaXQobil9cmV0dXJuIG5ldyBfbX1mdW5jdGlvbiBrZG4oKXtEcSgpO3ZhciB0LGU7dHJ5e2lmKGU9dShtNHQoKFBwKCksWWgpLEJoKSwxOTQxKSxlKXJldHVybiBlfWNhdGNoKG4pe2lmKG49V2kobiksX3QobiwxMDIpKXQ9bixhdnQoKFByKCksdCkpO2Vsc2UgdGhyb3cgaXQobil9cmV0dXJuIG5ldyBhSn1mdW5jdGlvbiBFZG4odCxlLG4pe3ZhciByLHM7cmV0dXJuIHM9dC5lLHQuZT1lLHQuRGImNCYmISh0LkRiJjEpJiYocj1uZXcgSnModCwxLDQscyxlKSxuP24uRWkocik6bj1yKSxzIT1lJiYoZT9uPVBFKHQsdnEodCxlKSxuKTpuPVBFKHQsdC5hLG4pKSxufWZ1bmN0aW9uIG9hZSgpe0JSLmNhbGwodGhpcyksdGhpcy5lPS0xLHRoaXMuYT0hMSx0aGlzLnA9U2EsdGhpcy5rPS0xLHRoaXMuYz0tMSx0aGlzLmI9LTEsdGhpcy5nPSExLHRoaXMuZj0tMSx0aGlzLmo9LTEsdGhpcy5uPS0xLHRoaXMuaT0tMSx0aGlzLmQ9LTEsdGhpcy5vPVNhfWZ1bmN0aW9uIFRkbih0LGUpe3ZhciBuLHIscztpZihyPXQuYi5kLmQsdC5hfHwocis9dC5iLmQuYSkscz1lLmIuZC5kLGUuYXx8KHMrPWUuYi5kLmEpLG49TXMocixzKSxuPT0wKXtpZighdC5hJiZlLmEpcmV0dXJuLTE7aWYoIWUuYSYmdC5hKXJldHVybiAxfXJldHVybiBufWZ1bmN0aW9uIENkbih0LGUpe3ZhciBuLHIscztpZihyPXQuYi5iLmQsdC5hfHwocis9dC5iLmIuYSkscz1lLmIuYi5kLGUuYXx8KHMrPWUuYi5iLmEpLG49TXMocixzKSxuPT0wKXtpZighdC5hJiZlLmEpcmV0dXJuLTE7aWYoIWUuYSYmdC5hKXJldHVybiAxfXJldHVybiBufWZ1bmN0aW9uIF9kbih0LGUpe3ZhciBuLHIscztpZihyPXQuYi5nLmQsdC5hfHwocis9dC5iLmcuYSkscz1lLmIuZy5kLGUuYXx8KHMrPWUuYi5nLmEpLG49TXMocixzKSxuPT0wKXtpZighdC5hJiZlLmEpcmV0dXJuLTE7aWYoIWUuYSYmdC5hKXJldHVybiAxfXJldHVybiBufWZ1bmN0aW9uIGw0dCgpe2w0dD1aLFBiZT1LdShiaShiaShiaShuZXcgVnMsKFdhKCkscWMpLChybygpLGhUdCkpLHFjLGZUdCksSW8sZFR0KSxJbyx0VHQpLE5iZT1iaShiaShuZXcgVnMscWMsVzd0KSxxYyxlVHQpLEZiZT1LdShuZXcgVnMsSW8sclR0KX1mdW5jdGlvbiBTZG4odCl7dmFyIGUsbixyLHMsbztmb3IoZT11KFEodCwoYWUoKSxrUykpLDgzKSxvPXQubixyPWUuQ2MoKS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwzMDYpLHM9bi5pLHMuYys9by5hLHMuZCs9by5iLG4uYz9FdWUobik6VHVlKG4pO0p0KHQsa1MsbnVsbCl9ZnVuY3Rpb24gQWRuKHQsZSxuKXt2YXIgcixzO3N3aXRjaChzPXQuYixyPXMuZCxlLmcpe2Nhc2UgMTpyZXR1cm4tci5kLW47Y2FzZSAyOnJldHVybiBzLm8uYStyLmMrbjtjYXNlIDM6cmV0dXJuIHMuby5iK3IuYStuO2Nhc2UgNDpyZXR1cm4tci5iLW47ZGVmYXVsdDpyZXR1cm4tMX19ZnVuY3Rpb24gTGRuKHQpe3ZhciBlLG4scixzLG87aWYocj0wLHM9VkUsdC5iKWZvcihlPTA7ZTwzNjA7ZSsrKW49ZSouMDE3NDUzMjkyNTE5OTQzMjk1LHR4dCh0LHQuZCwwLDAsTzQsbiksbz10LmIuaWcodC5kKSxvPHMmJihyPW4scz1vKTt0eHQodCx0LmQsMCwwLE80LHIpfWZ1bmN0aW9uIE1kbih0LGUpe3ZhciBuLHIscyxvO2ZvcihvPW5ldyBfcixlLmU9bnVsbCxlLmY9bnVsbCxyPW5ldyBTKGUuaSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNjUpLHM9dSh0cih0Lmcsbi5hKSw0Niksbi5hPWUkKG4uYiksa2kobyxuLmEscyk7dC5nPW99ZnVuY3Rpb24gRGRuKHQsZSxuKXt2YXIgcixzLG8saCxkLHY7Zm9yKHM9ZS10LmUsbz1zL3QuZC5jLmxlbmd0aCxoPTAsdj1uZXcgUyh0LmQpO3YuYTx2LmMuYy5sZW5ndGg7KWQ9dShKKHYpLDQ0Mykscj10LmItZC5iK24sUGllKGQsZC5lK2gqbyxkLmYpLGYxbihkLG8sciksKytofWZ1bmN0aW9uIGNhZSh0KXt2YXIgZTtpZih0LmYucWooKSx0LmIhPS0xKXtpZigrK3QuYixlPXQuZi5kW3QuYV0sdC5iPGUuaSlyZXR1cm47Kyt0LmF9Zm9yKDt0LmE8dC5mLmQubGVuZ3RoOysrdC5hKWlmKGU9dC5mLmRbdC5hXSxlJiZlLmkhPTApe3QuYj0wO3JldHVybn10LmI9LTF9ZnVuY3Rpb24gSWRuKHQsZSl7dmFyIG4scixzO2ZvcihzPWUuYy5sZW5ndGgsbj1EcG4odCxzPT0wPyIiOihBbigwLGUuYy5sZW5ndGgpLEJyKGUuY1swXSkpKSxyPTE7cjxzJiZuOysrciluPXUobiw0OSkub2goKEFuKHIsZS5jLmxlbmd0aCksQnIoZS5jW3JdKSkpO3JldHVybiBufWZ1bmN0aW9uIHVhZSh0LGUpe3ZhciBuLHI7Zm9yKHI9bmV3IFMoZSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTApLHQuY1tuLmMucF1bbi5wXS5hPVp3dCh0LmkpLHQuY1tuLmMucF1bbi5wXS5kPVh0KHQuY1tuLmMucF1bbi5wXS5hKSx0LmNbbi5jLnBdW24ucF0uYj0xfWZ1bmN0aW9uIE9kbih0LGUpe3ZhciBuLHIscyxvO2ZvcihvPTAscj1uZXcgUyh0KTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxNTcpLG8rPWIuTWF0aC5wb3coUnUobikqRWwobiktZSwyKTtyZXR1cm4gcz1iLk1hdGguc3FydChvLyh0LmMubGVuZ3RoLTEpKSxzfWZ1bmN0aW9uIGxhZSh0LGUsbixyKXt2YXIgcyxvLGg7cmV0dXJuIG89YW1uKHQsZSxuLHIpLGg9WTV0KHQsbykscXN0KHQsZSxuLHIpLHRpdCh0LmIpLHduKCksWnMobyxuZXcgTyR0KHQpKSxzPVk1dCh0LG8pLHFzdCh0LG4sZSxyKSx0aXQodC5iKSxuZXcgZmEocGUoaCkscGUocykpfWZ1bmN0aW9uIFBkbih0LGUsbil7dmFyIHIscztmb3IodnIobiwiSW50ZXJhY3RpdmUgbm9kZSBwbGFjZW1lbnQiLDEpLHQuYT11KFEoZSwoYWUoKSxRNCkpLDMwNCkscz1uZXcgUyhlLmIpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDI5KSx2dm4odCxyKTtvcihuKX1mdW5jdGlvbiBGZG4odCxlKXt2YXIgbjt2cihlLCJHZW5lcmFsIENvbXBhY3RvciIsMSksZS5uJiZ0JiZnZihlLHBmKHQpLChTbCgpLFFsKSksbj1BaG4odShxZSh0LCh1eSgpLFlodCkpLDM4MCkpLG4uaGcodCksZS5uJiZ0JiZnZihlLHBmKHQpLChTbCgpLFFsKSl9ZnVuY3Rpb24gTmRuKHQsZSxuKXt2YXIgcixzO2Zvcih2aih0LHQuaitlLHQuaytuKSxzPW5ldyBucigoIXQuYSYmKHQuYT1uZXcgQXMoR2gsdCw1KSksdC5hKSk7cy5lIT1zLmkuZ2MoKTspcj11KGRyKHMpLDQ2OSksdTJ0KHIsci5hK2Usci5iK24pO3dqKHQsdC5iK2UsdC5jK24pfWZ1bmN0aW9uIGg0dCh0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSA3OnJldHVybiF0LmUmJih0LmU9bmV3IENuKFlzLHQsNyw0KSksWmModC5lLGUscik7Y2FzZSA4OnJldHVybiF0LmQmJih0LmQ9bmV3IENuKFlzLHQsOCw1KSksWmModC5kLGUscil9cmV0dXJuIGpzdCh0LGUsbixyKX1mdW5jdGlvbiBmNHQodCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgNzpyZXR1cm4hdC5lJiYodC5lPW5ldyBDbihZcyx0LDcsNCkpLEJhKHQuZSxlLHIpO2Nhc2UgODpyZXR1cm4hdC5kJiYodC5kPW5ldyBDbihZcyx0LDgsNSkpLEJhKHQuZCxlLHIpfXJldHVybiBFaXQodCxlLG4scil9ZnVuY3Rpb24gQmRuKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKG4pZm9yKG89bi5hLmxlbmd0aCxyPW5ldyBlMihvKSxkPShyLmItci5hKSpyLmM8MD8oRnAoKSxJYik6bmV3IGpwKHIpO2QuT2IoKTspaD11KGQuUGIoKSwxOSkscz1QOChuLGguYSkscyYmam9lKHQscyxlKX1mdW5jdGlvbiBhcSh0LGUsbil7dmFyIHIscyxvLGgsZDtyZXR1cm4gdC5xaigpLG89ZT09bnVsbD8wOkhpKGUpLHQuZj4wJiYoaD0obyZ3aSkldC5kLmxlbmd0aCxzPWw1dCh0LGgsbyxlKSxzKT8oZD1zLmVkKG4pLGQpOihyPXQudGoobyxlLG4pLHQuYy5GYyhyKSxudWxsKX1mdW5jdGlvbiBkNHQodCxlKXt2YXIgbixyLHMsbztzd2l0Y2goJGcodCxlKS5faygpKXtjYXNlIDM6Y2FzZSAyOntmb3Iobj1UNChlKSxzPTAsbz1uLmk7czxvOysrcylpZihyPXUoQXQobixzKSwzNCksSHcoVG8odCxyKSk9PTUpcmV0dXJuIHI7YnJlYWt9fXJldHVybiBudWxsfWZ1bmN0aW9uIFJkbih0KXt2YXIgZSxuLHIscyxvO2lmKEFWdCh0LmYsdC5iLmxlbmd0aCkpZm9yKHI9TnQoSWdlLFBJLDMzMCx0LmIubGVuZ3RoKjIsMCwxKSx0LmI9cixzPXIubGVuZ3RoLTEsbj10LmE7biE9dDtuPW4uUmQoKSlvPXUobiwzMzApLGU9by5kJnMsby5hPXJbZV0scltlXT1vfWZ1bmN0aW9uIGhhZSh0LGUpe3ZhciBuLHIscyxvO2ZvcihvPTAscz11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTExKSxvPWIuTWF0aC5tYXgobyxyLmUuYStyLmIucmYoKS5hKTtuPXUocG8odC5iLGUpLDEyNCksbi5uLmI9MCxuLmEuYT1vfWZ1bmN0aW9uIGZhZSh0LGUpe3ZhciBuLHIscyxvO2ZvcihuPTAsbz11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksMTExKSxuPWIuTWF0aC5tYXgobixzLmUuYitzLmIucmYoKS5iKTtyPXUocG8odC5iLGUpLDEyNCksci5uLmQ9MCxyLmEuYj1ufWZ1bmN0aW9uIGpkbih0KXt2YXIgZSxuO3JldHVybiBuPXUoUSh0LChhZSgpLFZjKSksMjEpLGU9cGooWm1lKSxuLkhjKChvbygpLFc0KSkmJiRsKGUsZXllKSxuLkhjKHhTKSYmJGwoZSxueWUpLG4uSGModjcpJiYkbChlLEptZSksbi5IYyhtNykmJiRsKGUsdHllKSxlfWZ1bmN0aW9uICRkbih0LGUpe3ZhciBuO3ZyKGUsIkRlbGF1bmF5IHRyaWFuZ3VsYXRpb24iLDEpLG49bmV3IGhlLHh1KHQuaSxuZXcgZXp0KG4pKSxqZShSZShRKHQsKFo4KCksZlMpKSkpLHQuZT9VYSh0LmUsUWhlKG4pKTp0LmU9UWhlKG4pLG9yKGUpfWZ1bmN0aW9uIGc0dCh0KXtpZih0PDApdGhyb3cgaXQobmV3IEZuKCJUaGUgaW5wdXQgbXVzdCBiZSBwb3NpdGl2ZSIpKTtyZXR1cm4gdDxTU3QubGVuZ3RoP1l3KFNTdFt0XSk6Yi5NYXRoLnNxcnQoTzQqdCkqKHlsbih0LHQpL1F5dCgyLjcxODI4MTgyODQ1OTA0NSx0KSl9ZnVuY3Rpb24geUUodCxlKXt2YXIgbjtpZih0Lm5pKCkmJmUhPW51bGwpe2ZvcihuPTA7bjx0Lmk7KytuKWlmKHlpKGUsdC5nW25dKSlyZXR1cm4hMH1lbHNlIGZvcihuPTA7bjx0Lmk7KytuKWlmKFZ0KHQuZ1tuXSk9PT1WdChlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB6ZG4odCxlKXtpZihlPT1udWxsKXtmb3IoO3QuYS5PYigpOylpZih1KHQuYS5QYigpLDQyKS5kZCgpPT1udWxsKXJldHVybiEwfWVsc2UgZm9yKDt0LmEuT2IoKTspaWYoeWkoZSx1KHQuYS5QYigpLDQyKS5kZCgpKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBxZG4odCxlKXt2YXIgbixyLHM7cmV0dXJuIGU9PT10PyEwOl90KGUsNjY0KT8ocz11KGUsMTk0NyksWWllKChyPXQuZyxyfHwodC5nPW5ldyB5Qyh0KSkpLChuPXMuZyxufHwocy5nPW5ldyB5QyhzKSkpKSk6ITF9ZnVuY3Rpb24gSGRuKHQpe3ZhciBlLG4scixzO2ZvcihlPSJTeiIsbj0iZXoiLHM9Yi5NYXRoLm1pbih0Lmxlbmd0aCw1KSxyPXMtMTtyPj0wO3ItLSlpZihobih0W3JdLmQsZSl8fGhuKHRbcl0uZCxuKSl7dC5sZW5ndGg+PXIrMSYmdC5zcGxpY2UoMCxyKzEpO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIGFJKHQsZSl7dmFyIG47cmV0dXJuIEJvKHQpJiZCbyhlKSYmKG49dC9lLEJJPG4mJm48QzIpP248MD9iLk1hdGguY2VpbChuKTpiLk1hdGguZmxvb3Iobik6S3AoeXh0KEJvKHQpP0xoKHQpOnQsQm8oZSk/TGgoZSk6ZSwhMSkpfWZ1bmN0aW9uIHA0dCh0LGUpe2lmKGU9PXQuYy5pKXJldHVybiB0LmQuaTtpZihlPT10LmQuaSlyZXR1cm4gdC5jLmk7dGhyb3cgaXQobmV3IEZuKCInbm9kZScgbXVzdCBlaXRoZXIgYmUgdGhlIHNvdXJjZSBub2RlIG9yIHRhcmdldCBub2RlIG9mIHRoZSBlZGdlLiIpKX1mdW5jdGlvbiBWZG4odCl7dmFyIGUsbixyLHM7aWYocz11KFEodCwoYWUoKSxuQ3QpKSwzNykscyl7Zm9yKHI9bmV3IENhLGU9TmEodC5jLmkpO2UhPXM7KW49ZS5lLGU9TmEobiksam0oTGkoTGkocixuLm4pLGUuYyksZS5kLmIsZS5kLmQpO3JldHVybiByfXJldHVybiB0MmV9ZnVuY3Rpb24gR2RuKHQpe3ZhciBlO2U9dShRKHQsKGFlKCkseDcpKSw0MDMpLGxzKFdvKG5ldyBUbihudWxsLG5ldyBfbihlLmQsMTYpKSxuZXcgbFgpLG5ldyB4eCh0KSksbHMoUmkobmV3IFRuKG51bGwsbmV3IF9uKGUuZCwxNikpLG5ldyBrTiksbmV3IEYzKHQpKX1mdW5jdGlvbiBPc3QodCxlKXt2YXIgbixyLHMsbztmb3Iocz1lP0RzKHQpOmpvKHQpLHI9bmV3IGFyKGxyKHMuYS5LYygpLG5ldyB6KSk7enIocik7KWlmKG49dShNcihyKSwxNyksbz1wNHQobix0KSxvLms9PShWbigpLHRhKSYmby5jIT10LmMpcmV0dXJuIG87cmV0dXJuIG51bGx9ZnVuY3Rpb24gVWRuKHQpe3ZhciBlLG4scjtmb3Iobj1uZXcgUyh0LnApO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDEwKSxlLms9PShWbigpLE9zKSYmKHI9ZS5vLmIsdC5pPWIuTWF0aC5taW4odC5pLHIpLHQuZz1iLk1hdGgubWF4KHQuZyxyKSl9ZnVuY3Rpb24gZGFlKHQsZSxuKXt2YXIgcixzLG87Zm9yKG89bmV3IFMoZSk7by5hPG8uYy5jLmxlbmd0aDspcj11KEoobyksMTApLHQuY1tyLmMucF1bci5wXS5lPSExO2ZvcihzPW5ldyBTKGUpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDEwKSxfeHQodCxyLG4pfWZ1bmN0aW9uIFBzdCh0LGUsbil7dmFyIHIscztyPWM0KGUuaixuLnMsbi5jKStjNChuLmUsZS5zLGUuYykscz1jNChuLmosZS5zLGUuYykrYzQoZS5lLG4ucyxuLmMpLHI9PXM/cj4wJiYodC5iKz0yLHQuYSs9cik6KHQuYis9MSx0LmErPWIuTWF0aC5taW4ocixzKSl9ZnVuY3Rpb24gZ2FlKHQsZSl7dmFyIG4scjtpZihyPSExLHJhKGUpJiYocj0hMCxWeCh0LG5ldyBVbShCcihlKSkpKSxyfHxfdChlLDIzNikmJihyPSEwLFZ4KHQsKG49bXd0KHUoZSwyMzYpKSxuZXcgRUMobikpKSksIXIpdGhyb3cgaXQobmV3IGZldChBOHQpKX1mdW5jdGlvbiBXZG4odCxlLG4scil7dmFyIHMsbyxoO3JldHVybiBzPW5ldyB6MCh0LmUsMSwxMCwoaD1lLmMsX3QoaCw4OCk/dShoLDI2KTooZG4oKSxLaCkpLChvPW4uYyxfdChvLDg4KT91KG8sMjYpOihkbigpLEtoKSksSGcodCxlKSwhMSkscj9yLkVpKHMpOnI9cyxyfWZ1bmN0aW9uIGI0dCh0KXt2YXIgZSxuO3N3aXRjaCh1KFEoTmEodCksKFRlKCkscjl0KSksNDIwKS5nKXtjYXNlIDA6cmV0dXJuIGU9dC5uLG49dC5vLG5ldyAkZShlLmErbi5hLzIsZS5iK24uYi8yKTtjYXNlIDE6cmV0dXJuIG5ldyB4byh0Lm4pO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIG9JKCl7b0k9WixZVj1uZXcgdDkoSjAsMCkscVR0PW5ldyB0OSgiTEVGVFVQIiwxKSxWVHQ9bmV3IHQ5KCJSSUdIVFVQIiwyKSx6VHQ9bmV3IHQ5KCJMRUZURE9XTiIsMyksSFR0PW5ldyB0OSgiUklHSFRET1dOIiw0KSxSbHQ9bmV3IHQ5KCJCQUxBTkNFRCIsNSl9ZnVuY3Rpb24gWWRuKHQsZSxuKXt2YXIgcixzLG87aWYocj1Ncyh0LmFbZS5wXSx0LmFbbi5wXSkscj09MCl7aWYocz11KFEoZSwoYWUoKSxSNikpLDE1KSxvPXUoUShuLFI2KSwxNSkscy5IYyhuKSlyZXR1cm4tMTtpZihvLkhjKGUpKXJldHVybiAxfXJldHVybiByfWZ1bmN0aW9uIEtkbih0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIG5ldyBoWjtjYXNlIDI6cmV0dXJuIG5ldyBmWjtjYXNlIDM6cmV0dXJuIG5ldyBsWjtjYXNlIDA6cmV0dXJuIG51bGw7ZGVmYXVsdDp0aHJvdyBpdChuZXcgRm4oSWN0Kyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gdzR0KHQsZSxuKXtzd2l0Y2goZSl7Y2FzZSAxOiF0Lm4mJih0Lm49bmV3IGZlKHFvLHQsMSw3KSkseHIodC5uKSwhdC5uJiYodC5uPW5ldyBmZShxbyx0LDEsNykpLGlzKHQubix1KG4sMTQpKTtyZXR1cm47Y2FzZSAyOkc5KHQsQnIobikpO3JldHVybn1CeXQodCxlLG4pfWZ1bmN0aW9uIHY0dCh0LGUsbil7c3dpdGNoKGUpe2Nhc2UgMzpKdyh0LFh0KHllKG4pKSk7cmV0dXJuO2Nhc2UgNDp0dih0LFh0KHllKG4pKSk7cmV0dXJuO2Nhc2UgNTprdSh0LFh0KHllKG4pKSk7cmV0dXJuO2Nhc2UgNjpFdSh0LFh0KHllKG4pKSk7cmV0dXJufXc0dCh0LGUsbil9ZnVuY3Rpb24gb3EodCxlLG4pe3ZhciByLHMsbztvPShyPW5ldyBzZXQscikscz1GMShvLGUsbnVsbCkscyYmcy5GaSgpLFFjKG8sbiksRHIoKCF0LmMmJih0LmM9bmV3IGZlKFZ2LHQsMTIsMTApKSx0LmMpLG8pLFJnKG8sMCkscnkobywxKSxxZyhvLCEwKSx6ZyhvLCEwKX1mdW5jdGlvbiBtNHQodCxlKXt2YXIgbixyLHM7cmV0dXJuIG49S0ModC5nLGUpLF90KG4sMjM1KT8ocz11KG4sMjM1KSxzLlFoKCk9PW51bGwscy5OaCgpKTpfdChuLDQ5OCk/KHI9dShuLDE5MzgpLHM9ci5iLHMpOm51bGx9ZnVuY3Rpb24gWGRuKHQsZSxuLHIpe3ZhciBzLG87cmV0dXJuIExyKGUpLExyKG4pLG89dSh4OSh0LmQsZSksMTkpLG5lZSghIW8sIlJvdyAlcyBub3QgaW4gJXMiLGUsdC5lKSxzPXUoeDkodC5iLG4pLDE5KSxuZWUoISFzLCJDb2x1bW4gJXMgbm90IGluICVzIixuLHQuYyksb3JlKHQsby5hLHMuYSxyKX1mdW5jdGlvbiBwYWUodCxlLG4scixzLG8saCl7dmFyIGQsdixrLEMsTTtpZihDPXNbb10saz1vPT1oLTEsZD1rP3I6MCxNPU5zZShkLEMpLHIhPTEwJiZsdChjdCh0LGgtbyksZVtvXSxuW29dLGQsTSksIWspZm9yKCsrbyx2PTA7djxDOysrdilNW3ZdPXBhZSh0LGUsbixyLHMsbyxoKTtyZXR1cm4gTX1mdW5jdGlvbiBmXyh0KXtpZih0Lmc9PS0xKXRocm93IGl0KG5ldyBPdSk7dC5taigpO3RyeXt0LmkuJGModC5nKSx0LmY9dC5pLmosdC5nPHQuZSYmLS10LmUsdC5nPS0xfWNhdGNoKGUpe3Rocm93IGU9V2koZSksX3QoZSw3Myk/aXQobmV3IHJoKTppdChlKX19ZnVuY3Rpb24gZF8odCxlKXtyZXR1cm4gdC5iLmE9Yi5NYXRoLm1pbih0LmIuYSxlLmMpLHQuYi5iPWIuTWF0aC5taW4odC5iLmIsZS5kKSx0LmEuYT1iLk1hdGgubWF4KHQuYS5hLGUuYyksdC5hLmI9Yi5NYXRoLm1heCh0LmEuYixlLmQpLHQuY1t0LmMubGVuZ3RoXT1lLCEwfWZ1bmN0aW9uIFFkbih0KXt2YXIgZSxuLHIscztmb3Iocz0tMSxyPTAsbj1uZXcgUyh0KTtuLmE8bi5jLmMubGVuZ3RoOyl7aWYoZT11KEoobiksMjQzKSxlLmM9PShzbygpLHRsKSl7cz1yPT0wPzA6ci0xO2JyZWFrfWVsc2Ugcj09dC5jLmxlbmd0aC0xJiYocz1yKTtyKz0xfXJldHVybiBzfWZ1bmN0aW9uIFpkbih0KXt2YXIgZSxuLHIscztmb3Iocz0wLGU9MCxyPW5ldyBTKHQuYyk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMzMpLGt1KG4sdC5lK3MpLEV1KG4sdC5mKSxzKz1uLmcrdC5iLGU9Yi5NYXRoLm1heChlLG4uZit0LmIpO3QuZD1zLXQuYix0LmE9ZS10LmJ9ZnVuY3Rpb24gZzQodCl7dmFyIGUsbixyO2ZvcihuPW5ldyBTKHQuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSw1Nykscj1lLmQuYyxlLmQuYz1lLmQuZCxlLmQuZD1yLHI9ZS5kLmIsZS5kLmI9ZS5kLmEsZS5kLmE9cixyPWUuYi5hLGUuYi5hPWUuYi5iLGUuYi5iPXI7UDV0KHQpfWZ1bmN0aW9uIHA0KHQpe3ZhciBlLG4scjtmb3Iobj1uZXcgUyh0LmEuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksODEpLHI9ZS5nLmMsZS5nLmM9ZS5nLmQsZS5nLmQ9cixyPWUuZy5iLGUuZy5iPWUuZy5hLGUuZy5hPXIscj1lLmUuYSxlLmUuYT1lLmUuYixlLmUuYj1yO3lxKHQpfWZ1bmN0aW9uIEpkbih0KXt2YXIgZSxuLHIscyxvO2ZvcihvPXF4KHQuayksbj0odmUoKSxsdChjdChYYSwxKSx4Yyw2MSwwLFtabyxQbixIbixtcixCbl0pKSxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWlmKGU9bltyXSxlIT1abyYmIW8uSGMoZSkpcmV0dXJuIGU7cmV0dXJuIG51bGx9ZnVuY3Rpb24gRnN0KHQsZSl7dmFyIG4scjtyZXR1cm4gcj11KFAydChNaXQoUmkobmV3IFRuKG51bGwsbmV3IF9uKGUuaiwxNikpLG5ldyBuUSkpKSwxMSksciYmKG49dShOZShyLmUsMCksMTcpLG4pP3UoUShuLChhZSgpLFRjKSksMTkpLmE6QW9uKHQuYil9ZnVuY3Rpb24gdDBuKHQsZSl7dmFyIG4scixzLG87Zm9yKG89bmV3IFMoZS5hKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KEoobyksMTApLFJDKHQuZCkscj1uZXcgYXIobHIoRHMocykuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShNcihyKSwxNyksbGNlKHQscyxuLmQuaSl9ZnVuY3Rpb24gZTBuKHQsZSl7dmFyIG4scjtmb3IobXUodC5iLGUpLHI9bmV3IFModC5uKTtyLmE8ci5jLmMubGVuZ3RoOylpZihuPXUoSihyKSwyMTEpLFJvKG4uYyxlLDApIT0tMSl7bXUobi5jLGUpLFpkbihuKSxuLmMuYy5sZW5ndGg9PTAmJm11KHQubixuKTticmVha31kM24odCl9ZnVuY3Rpb24gYmFlKHQsZSl7dmFyIG4scixzLG8saDtmb3IoaD10LmYscz0wLG89MCxyPW5ldyBTKHQuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTg3KSx0SShuLHQuZSxoKSx2RChuLGUpLG89Yi5NYXRoLm1heChvLG4uciksaCs9bi5kK3QuYyxzPWg7dC5kPW8sdC5iPXN9ZnVuY3Rpb24gd2FlKHQpe3ZhciBlLG47cmV0dXJuIG49d0kodCksRjgobik/bnVsbDooZT0oTHIobiksdShfc2UobmV3IGFyKGxyKG4uYS5LYygpLG5ldyB6KSkpLDc5KSksRG8odShBdCgoIWUuYiYmKGUuYj1uZXcgQ24oYnIsZSw0LDcpKSxlLmIpLDApLDgyKSkpfWZ1bmN0aW9uIGNxKHQpe3ZhciBlO3JldHVybiB0Lm98fChlPXQuTGooKSxlP3Qubz1uZXcgX3Z0KHQsdCxudWxsKTp0LnJrKCk/dC5vPW5ldyBpd3QodCxudWxsKTpIdyhUbygoJHUoKSx5YSksdCkpPT0xP3Qubz1uZXcgckp0KHQpOnQubz1uZXcgeG50KHQsbnVsbCkpLHQub31mdW5jdGlvbiBuMG4odCxlLG4scil7dmFyIHMsbyxoLGQsdjtuLm1oKGUpJiYocz0oaD1lLGg/dShyLDQ5KS54aChoKTpudWxsKSxzJiYodj1uLmFoKGUpLGQ9ZS50LGQ+MXx8ZD09LTE/KG89dSh2LDE1KSxzLldiKHJmbih0LG8pKSk6cy5XYih5YXQodCx1KHYsNTYpKSkpKX1mdW5jdGlvbiByMG4odCxlLG4scil7blZ0KCk7dmFyIHM9VHV0O2Z1bmN0aW9uIG8oKXtmb3IodmFyIGg9MDtoPHMubGVuZ3RoO2grKylzW2hdKCl9aWYodCl0cnl7bnhlKG8pKCl9Y2F0Y2goaCl7dChlLGgpfWVsc2UgbnhlKG8pKCl9ZnVuY3Rpb24gaTBuKHQpe3ZhciBlLG4scixzLG87Zm9yKHI9bmV3IHAyKG5ldyBDZyh0LmIpLmEpO3IuYjspbj1adyhyKSxlPXUobi5jZCgpLDEwKSxvPXUodShuLmRkKCksNDYpLmEsMTApLHM9dSh1KG4uZGQoKSw0NikuYiw4KSxMaShHZihlLm4pLExpKG5jKG8ubikscykpfWZ1bmN0aW9uIHMwbih0KXtzd2l0Y2godShRKHQuYiwoVGUoKSxYQ3QpKSwzNzUpLmcpe2Nhc2UgMTpscyh3dShXbyhuZXcgVG4obnVsbCxuZXcgX24odC5kLDE2KSksbmV3IEJOKSxuZXcgZ3cpLG5ldyBSTik7YnJlYWs7Y2FzZSAyOll2bih0KTticmVhaztjYXNlIDA6THBuKHQpfX1mdW5jdGlvbiBhMG4odCxlLG4pe3ZhciByO3ZyKG4sIlN0cmFpZ2h0IExpbmUgRWRnZSBSb3V0aW5nIiwxKSxuLm4mJmUmJmdmKG4scGYoZSksKFNsKCksUWwpKSxyPXUocWUoZSwobTkoKSxIUykpLDMzKSxIbGUodCxyKSxuLm4mJmUmJmdmKG4scGYoZSksKFNsKCksUWwpKX1mdW5jdGlvbiBoeSgpe2h5PVosZmZ0PW5ldyBzOSgiVl9UT1AiLDApLFhPPW5ldyBzOSgiVl9DRU5URVIiLDEpLEtPPW5ldyBzOSgiVl9CT1RUT00iLDIpLGhmdD1uZXcgczkoIkhfTEVGVCIsMyksV089bmV3IHM5KCJIX0NFTlRFUiIsNCksWU89bmV3IHM5KCJIX1JJR0hUIiw1KX1mdW5jdGlvbiB5NHQodCl7dmFyIGU7cmV0dXJuIHQuRGImNjQ/UnoodCk6KGU9bmV3IF9oKFJ6KHQpKSxlLmErPSIgKGFic3RyYWN0OiAiLExnKGUsKHQuQmImMjU2KSE9MCksZS5hKz0iLCBpbnRlcmZhY2U6ICIsTGcoZSwodC5CYiY1MTIpIT0wKSxlLmErPSIpIixlLmEpfWZ1bmN0aW9uIG8wbih0LGUsbixyKXt2YXIgcyxvLGgsZDtyZXR1cm4geGwodC5lKSYmKHM9ZS5haygpLGQ9ZS5kZCgpLG89bi5kZCgpLGg9R3AodCwxLHMsZCxvLHMuJGooKT9ERSh0LHMsbyxfdChzLDk5KSYmKHUocywxOCkuQmImS2EpIT0wKTotMSwhMCkscj9yLkVpKGgpOnI9aCkscn1mdW5jdGlvbiBjMG4odCl7dmFyIGU7dC5jPT1udWxsJiYoZT1WdCh0LmIpPT09VnQobkV0KT9udWxsOnQuYix0LmQ9ZT09bnVsbD9fdTpSS3QoZSk/SFFlKEpYdChlKSk6cmEoZSk/anh0OklwKG9sKGUpKSx0LmE9dC5hKyI6ICIrKFJLdChlKT9OWmUoSlh0KGUpKTplKyIiKSx0LmM9IigiK3QuZCsiKSAiK3QuYSl9ZnVuY3Rpb24geDR0KHQsZSl7dGhpcy5lPXQsRHcoTnMoZSwtNDI5NDk2NzI5NiksMCk/KHRoaXMuZD0xLHRoaXMuYT1sdChjdChDciwxKSxYciwyNSwxNSxbQXIoZSldKSk6KHRoaXMuZD0yLHRoaXMuYT1sdChjdChDciwxKSxYciwyNSwxNSxbQXIoZSksQXIoJHAoZSwzMikpXSkpfWZ1bmN0aW9uIHUwbigpe2Z1bmN0aW9uIHQoKXt0cnl7cmV0dXJuIG5ldyBNYXAoKS5lbnRyaWVzKCkubmV4dCgpLmRvbmV9Y2F0Y2h7cmV0dXJuITF9fXJldHVybiB0eXBlb2YgTWFwPT09R2F0JiZNYXAucHJvdG90eXBlLmVudHJpZXMmJnQoKT9NYXA6TzVuKCl9ZnVuY3Rpb24gbDBuKHQsZSl7dmFyIG4scixzLG87Zm9yKG89bmV3IGRhKHQuZSwwKSxuPTA7by5iPG8uZC5nYygpOyl7aWYocj1YdCgoWm4oby5iPG8uZC5nYygpKSx5ZShvLmQuWGIoby5jPW8uYisrKSkpKSxzPXItZSxzPkxjdClyZXR1cm4gbjtzPi0xZS02JiYrK259cmV0dXJuIG59ZnVuY3Rpb24gazR0KHQsZSl7dmFyIG47ZSE9dC5iPyhuPW51bGwsdC5iJiYobj1tJCh0LmIsdCwtNCxuKSksZSYmKG49YzYoZSx0LC00LG4pKSxuPVFyZSh0LGUsbiksbiYmbi5GaSgpKTp0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgSnModCwxLDMsZSxlKSl9ZnVuY3Rpb24gdmFlKHQsZSl7dmFyIG47ZSE9dC5mPyhuPW51bGwsdC5mJiYobj1tJCh0LmYsdCwtMSxuKSksZSYmKG49YzYoZSx0LC0xLG4pKSxuPVpyZSh0LGUsbiksbiYmbi5GaSgpKTp0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgSnModCwxLDAsZSxlKSl9ZnVuY3Rpb24gbWFlKHQpe3ZhciBlLG4scjtpZih0PT1udWxsKXJldHVybiBudWxsO2lmKG49dSh0LDE1KSxuLmRjKCkpcmV0dXJuIiI7Zm9yKHI9bmV3IEFnLGU9bi5LYygpO2UuT2IoKTspZ28ociwoSWkoKSxCcihlLlBiKCkpKSksci5hKz0iICI7cmV0dXJuIGludChyLHIuYS5sZW5ndGgtMSl9ZnVuY3Rpb24geWFlKHQpe3ZhciBlLG4scjtpZih0PT1udWxsKXJldHVybiBudWxsO2lmKG49dSh0LDE1KSxuLmRjKCkpcmV0dXJuIiI7Zm9yKHI9bmV3IEFnLGU9bi5LYygpO2UuT2IoKTspZ28ociwoSWkoKSxCcihlLlBiKCkpKSksci5hKz0iICI7cmV0dXJuIGludChyLHIuYS5sZW5ndGgtMSl9ZnVuY3Rpb24gaDBuKHQsZSxuKXt2YXIgcixzO3JldHVybiByPXQuY1tlLmMucF1bZS5wXSxzPXQuY1tuLmMucF1bbi5wXSxyLmEhPW51bGwmJnMuYSE9bnVsbD9VbnQoci5hLHMuYSk6ci5hIT1udWxsPy0xOnMuYSE9bnVsbD8xOjB9ZnVuY3Rpb24gZjBuKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKGUpZm9yKG89ZS5hLmxlbmd0aCxuPW5ldyBlMihvKSxkPShuLmItbi5hKSpuLmM8MD8oRnAoKSxJYik6bmV3IGpwKG4pO2QuT2IoKTspaD11KGQuUGIoKSwxOSkscz1QOChlLGguYSkscj1uZXcgeHp0KHQpLGVybihyLmEscyl9ZnVuY3Rpb24gZDBuKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKGUpZm9yKG89ZS5hLmxlbmd0aCxuPW5ldyBlMihvKSxkPShuLmItbi5hKSpuLmM8MD8oRnAoKSxJYik6bmV3IGpwKG4pO2QuT2IoKTspaD11KGQuUGIoKSwxOSkscz1QOChlLGguYSkscj1uZXcgZnp0KHQpLHRybihyLmEscyl9ZnVuY3Rpb24gZzBuKHQpe3ZhciBlO2lmKHQhPW51bGwmJnQubGVuZ3RoPjAmJndhKHQsdC5sZW5ndGgtMSk9PTMzKXRyeXtyZXR1cm4gZT13b2UoUGwodCwwLHQubGVuZ3RoLTEpKSxlLmU9PW51bGx9Y2F0Y2gobil7aWYobj1XaShuKSwhX3QobiwzMikpdGhyb3cgaXQobil9cmV0dXJuITF9ZnVuY3Rpb24geGFlKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIHI9ZS5haygpLG89ZS5kZCgpLHM9ci4kaigpP0dwKHQsMyxyLG51bGwsbyxERSh0LHIsbyxfdChyLDk5KSYmKHUociwxOCkuQmImS2EpIT0wKSwhMCk6R3AodCwxLHIsci56aigpLG8sLTEsITApLG4/bi5FaShzKTpuPXMsbn1mdW5jdGlvbiBwMG4oKXt2YXIgdCxlLG47Zm9yKGU9MCx0PTA7dDwxO3QrKyl7aWYobj1nNXQoKFJyKHQsMSksIlgiLmNoYXJDb2RlQXQodCkpKSxuPT0wKXRocm93IGl0KG5ldyBOcigiVW5rbm93biBPcHRpb246ICIrIlgiLnN1YnN0cih0KSkpO2V8PW59cmV0dXJuIGV9ZnVuY3Rpb24gYjBuKHQsZSxuKXt2YXIgcixzLG87c3dpdGNoKHI9TmEoZSkscz1QeihyKSxvPW5ldyBNYyxVbyhvLGUpLG4uZyl7Y2FzZSAxOkJzKG8sWUQoYTYocykpKTticmVhaztjYXNlIDI6QnMobyxhNihzKSl9cmV0dXJuIEp0KG8sKFRlKCksVnkpLHllKFEodCxWeSkpKSxvfWZ1bmN0aW9uIEU0dCh0KXt2YXIgZSxuO3JldHVybiBlPXUoTXIobmV3IGFyKGxyKGpvKHQuYSkuYS5LYygpLG5ldyB6KSkpLDE3KSxuPXUoTXIobmV3IGFyKGxyKERzKHQuYSkuYS5LYygpLG5ldyB6KSkpLDE3KSxqZShSZShRKGUsKGFlKCkscTEpKSkpfHxqZShSZShRKG4scTEpKSl9ZnVuY3Rpb24gYjQoKXtiND1aLCRWPW5ldyBTTSgiT05FX1NJREUiLDApLHFWPW5ldyBTTSgiVFdPX1NJREVTX0NPUk5FUiIsMSksSFY9bmV3IFNNKCJUV09fU0lERVNfT1BQT1NJTkciLDIpLHpWPW5ldyBTTSgiVEhSRUVfU0lERVMiLDMpLGpWPW5ldyBTTSgiRk9VUl9TSURFUyIsNCl9ZnVuY3Rpb24gTnN0KHQsZSxuLHIscyl7dmFyIG8saDtvPXUoQmwoUmkoZS5PYygpLG5ldyBWWCksYzIobmV3IGtlLG5ldyBjZSxuZXcgWG4sbHQoY3QoZmwsMSksb2UsMTMyLDAsWyhPMSgpLFVsKV0pKSksMTUpLGg9dShoMih0LmIsbixyKSwxNSkscz09MD9oLldjKDAsbyk6aC5HYyhvKX1mdW5jdGlvbiB3MG4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihvPW5ldyBTKGUuYSk7by5hPG8uYy5jLmxlbmd0aDspZm9yKHM9dShKKG8pLDEwKSxyPW5ldyBhcihscihqbyhzKS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KE1yKHIpLDE3KSxoPW4uYy5pLnAsdC5uW2hdPXQubltoXS0xfWZ1bmN0aW9uIHYwbih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKG89bmV3IFMoZS5kKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KEoobyksMTAxKSxoPXUodHIodC5jLHMpLDExMikubyxyPW5ldyBNeChzLmIpO3IuYTxyLmMuYS5sZW5ndGg7KW49dShqOShyKSw2MSksUG10KHMsbixoKX1mdW5jdGlvbiBtMG4odCl7dmFyIGUsbjtmb3Iobj1uZXcgUyh0LmUuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMjkpLEs0bih0LGUpO2xzKFJpKFdvKFdvKG5ldyBUbihudWxsLG5ldyBfbih0LmUuYiwxNikpLG5ldyBBUSksbmV3IFhOKSxuZXcgSVEpLG5ldyBXJHQodCkpfWZ1bmN0aW9uIFQ0dCh0LGUpe3JldHVybiBlP3QuRGkoZSk/ITE6dC5pP3QuaS5FaShlKTpfdChlLDE0Myk/KHQuaT11KGUsMTQzKSwhMCk6KHQuaT1uZXcgY3gsdC5pLkVpKGUpKTohMX1mdW5jdGlvbiB5MG4odCl7aWYodD0kYyh0LCEwKSxobihYRSx0KXx8aG4oIjEiLHQpKXJldHVybiBObigpLHI3O2lmKGhuKFZjdCx0KXx8aG4oIjAiLHQpKXJldHVybiBObigpLEYyO3Rocm93IGl0KG5ldyBwZXQoIkludmFsaWQgYm9vbGVhbiB2YWx1ZTogJyIrdCsiJyIpKX1mdW5jdGlvbiBDNHQodCxlLG4pe3ZhciByLHMsbztmb3Iocz10LnZjKCkuS2MoKTtzLk9iKCk7KWlmKHI9dShzLlBiKCksNDIpLG89ci5jZCgpLFZ0KGUpPT09VnQobyl8fGUhPW51bGwmJnlpKGUsbykpcmV0dXJuIG4mJihyPW5ldyBLUihyLmNkKCksci5kZCgpKSxzLlFiKCkpLHI7cmV0dXJuIG51bGx9ZnVuY3Rpb24geDBuKHQpeyRtKCk7dmFyIGUsbixyO3QuQi5IYygobGwoKSxuVSkpJiYocj10LmYuaSxlPW5ldyB2JCh0LmEuYyksbj1uZXcgQ3gsbi5iPWUuYy1yLmMsbi5kPWUuZC1yLmQsbi5jPXIuYytyLmItKGUuYytlLmIpLG4uYT1yLmQrci5hLShlLmQrZS5hKSx0LmUuRmYobikpfWZ1bmN0aW9uIGthZSh0LGUsbixyKXt2YXIgcyxvLGg7Zm9yKGg9Yi5NYXRoLm1pbihuLE1sZSh1KHQuYiw2NSksZSxuLHIpKSxvPW5ldyBTKHQuYSk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMjIxKSxzIT1lJiYoaD1iLk1hdGgubWluKGgsa2FlKHMsZSxoLHIpKSk7cmV0dXJuIGh9ZnVuY3Rpb24gXzR0KHQpe3ZhciBlLG4scixzO2ZvcihzPU50KGwwLGVlLDE5Myx0LmIuYy5sZW5ndGgsMCwyKSxyPW5ldyBkYSh0LmIsMCk7ci5iPHIuZC5nYygpOyllPShabihyLmI8ci5kLmdjKCkpLHUoci5kLlhiKHIuYz1yLmIrKyksMjkpKSxuPXIuYi0xLHNbbl09bEQoZS5hKTtyZXR1cm4gc31mdW5jdGlvbiBCc3QodCxlLG4scixzKXt2YXIgbyxoLGQsdjtmb3IoaD1SS2UoY2J0KF93dChXZm4obikpLHIpLG5kbih0LG4scykpLHY9R2codCxuKS5LYygpO3YuT2IoKTspZD11KHYuUGIoKSwxMSksZVtkLnBdJiYobz1lW2QucF0uaSxsZShoLmQsbmV3IEhudChvLGEzdChoLG8pKSkpO2szdChoKX1mdW5jdGlvbiBTNHQodCxlKXt0aGlzLmY9bmV3IF9yLHRoaXMuYj1uZXcgX3IsdGhpcy5qPW5ldyBfcix0aGlzLmE9dCx0aGlzLmM9ZSx0aGlzLmM+MCYmV3NlKHRoaXMsdGhpcy5jLTEsKHZlKCksSG4pKSx0aGlzLmM8dGhpcy5hLmxlbmd0aC0xJiZXc2UodGhpcyx0aGlzLmMrMSwodmUoKSxCbikpfWZ1bmN0aW9uIEE0dCh0KXt0Lmxlbmd0aD4wJiZ0WzBdLmxlbmd0aD4wJiYodGhpcy5jPWplKFJlKFEoTmEodFswXVswXSksKGFlKCksc0N0KSkpKSksdGhpcy5hPU50KFRtZSxlZSwyMDE4LHQubGVuZ3RoLDAsMiksdGhpcy5iPU50KENtZSxlZSwyMDE5LHQubGVuZ3RoLDAsMiksdGhpcy5kPW5ldyBWcmV9ZnVuY3Rpb24gazBuKHQpe3JldHVybiB0LmMubGVuZ3RoPT0wPyExOihBbigwLHQuYy5sZW5ndGgpLHUodC5jWzBdLDE3KSkuYy5pLms9PShWbigpLHRhKT8hMDpOOCh3dShuZXcgVG4obnVsbCxuZXcgX24odCwxNikpLG5ldyBtUSksbmV3IHlRKX1mdW5jdGlvbiBFMG4odCxlLG4pe3JldHVybiB2cihuLCJUcmVlIGxheW91dCIsMSksTCQodC5iKSxLZCh0LmIsKHdFKCksQUcpLEFHKSxLZCh0LmIsUlMsUlMpLEtkKHQuYiwkTywkTyksS2QodC5iLGpTLGpTKSx0LmE9RnEodC5iLGUpLFp3bih0LGUsUmMobiwxKSksb3IobiksZX1mdW5jdGlvbiBFYWUodCxlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3IoZD13eShlKSxvPWUuZix2PWUuZyxoPWIuTWF0aC5zcXJ0KG8qbyt2KnYpLHM9MCxyPW5ldyBTKGQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDMzKSxzKz1FYWUodCxuKTtyZXR1cm4gYi5NYXRoLm1heChzLGgpfWZ1bmN0aW9uIHVhKCl7dWE9WixUYj1uZXcgbzkoTl8sMCksRzE9bmV3IG85KCJGUkVFIiwxKSxCNz1uZXcgbzkoIkZJWEVEX1NJREUiLDIpLFkyPW5ldyBvOSgiRklYRURfT1JERVIiLDMpLGcwPW5ldyBvOSgiRklYRURfUkFUSU8iLDQpLEdjPW5ldyBvOSgiRklYRURfUE9TIiw1KX1mdW5jdGlvbiBUMG4odCxlKXt2YXIgbixyLHM7aWYobj1lLkhoKHQuYSksbil7Zm9yKHM9QnIoWGYoKCFuLmImJihuLmI9bmV3IGtsKChkbigpLFFhKSxjYyxuKSksbi5iKSxSaCkpLHI9MTtyPCgkdSgpLHlMdCkubGVuZ3RoOysrcilpZihobih5THRbcl0scykpcmV0dXJuIHJ9cmV0dXJuIDB9ZnVuY3Rpb24gQzBuKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gX3U7Zm9yKG89bmV3IGYyKFlhLCJbIiwiXSIpLG49dCxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSwkMChvLCIiK2UpO3JldHVybiBvLmE/by5lLmxlbmd0aD09MD9vLmEuYTpvLmEuYSsoIiIrby5lKTpvLmN9ZnVuY3Rpb24gXzBuKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gX3U7Zm9yKG89bmV3IGYyKFlhLCJbIiwiXSIpLG49dCxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSwkMChvLCIiK2UpO3JldHVybiBvLmE/by5lLmxlbmd0aD09MD9vLmEuYTpvLmEuYSsoIiIrby5lKTpvLmN9ZnVuY3Rpb24gVGFlKHQpe3ZhciBlLG4scjtmb3Iocj1uZXcgZjIoWWEsInsiLCJ9Iiksbj10LnZjKCkuS2MoKTtuLk9iKCk7KWU9dShuLlBiKCksNDIpLCQwKHIsUVp0KHQsZS5jZCgpKSsiPSIrUVp0KHQsZS5kZCgpKSk7cmV0dXJuIHIuYT9yLmUubGVuZ3RoPT0wP3IuYS5hOnIuYS5hKygiIityLmUpOnIuY31mdW5jdGlvbiBTMG4odCl7Zm9yKHZhciBlLG4scixzOyFCQyh0Lm8pOyluPXUoSHgodC5vKSw0Nikscj11KG4uYSwxMjEpLGU9dShuLmIsMjEzKSxzPUJ6KGUsciksZS5lPT1yPyhfaihzLmcsZSksci5lPXMuZStlLmEpOihfaihzLmIsZSksci5lPXMuZS1lLmEpLGxlKHQuZS5hLHIpfWZ1bmN0aW9uIEw0dCh0LGUpe3ZhciBuLHIscztmb3Iobj1udWxsLHM9dShlLktiKHQpLDIwKS5LYygpO3MuT2IoKTspaWYocj11KHMuUGIoKSwxNyksIW4pbj1yLmMuaT09dD9yLmQuaTpyLmMuaTtlbHNlIGlmKChyLmMuaT09dD9yLmQuaTpyLmMuaSkhPW4pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQ2FlKHQsZSl7dmFyIG4scixzLG8saDtmb3Iobj1HY2UodCwhMSxlKSxzPW5ldyBTKG4pO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDEyOSksci5kPT0wPyhBcnQocixudWxsKSxMcnQocixudWxsKSk6KG89ci5hLGg9ci5iLEFydChyLGgpLExydChyLG8pKX1mdW5jdGlvbiBBMG4odCl7dmFyIGUsbjtyZXR1cm4gZT1uZXcgVnMsJGwoZSxzeWUpLG49dShRKHQsKGFlKCksVmMpKSwyMSksbi5IYygob28oKSx4UykpJiYkbChlLHV5ZSksbi5IYyh2NykmJiRsKGUsYXllKSxuLkhjKFc0KSYmJGwoZSxjeWUpLG4uSGMobTcpJiYkbChlLG95ZSksZX1mdW5jdGlvbiBMMG4odCl7dmFyIGUsbixyLHM7Zm9yKFEzbih0KSxuPW5ldyBhcihscihVMCh0KS5hLktjKCksbmV3IHopKTt6cihuKTspZT11KE1yKG4pLDE3KSxyPWUuYy5pPT10LHM9cj9lLmQ6ZS5jLHI/b2EoZSxudWxsKTpPYShlLG51bGwpLEp0KGUsKGFlKCksdUN0KSxzKSxSYm4odCxzLmkpfWZ1bmN0aW9uIE0wbih0LGUsbixyKXt2YXIgcyxvO3N3aXRjaChvPWUuaSxzPW5bby5nXVt0LmRbby5nXV0sby5nKXtjYXNlIDE6cy09citlLmouYixlLmcuYj1zO2JyZWFrO2Nhc2UgMzpzKz1yLGUuZy5iPXM7YnJlYWs7Y2FzZSA0OnMtPXIrZS5qLmEsZS5nLmE9czticmVhaztjYXNlIDI6cys9cixlLmcuYT1zfX1mdW5jdGlvbiBEMG4odCl7dmFyIGUsbixyO2ZvcihuPW5ldyBucigoIXQuYSYmKHQuYT1uZXcgZmUocnMsdCwxMCwxMSkpLHQuYSkpO24uZSE9bi5pLmdjKCk7KWlmKGU9dShkcihuKSwzMykscj13SShlKSwhenIobmV3IGFyKGxyKHIuYS5LYygpLG5ldyB6KSkpKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIEkwbigpe3ZhciB0O3JldHVybiBKNGU/dShfRSgoUHAoKSxZaCksWkUpLDIwMTYpOih0PXUoX3QoTmMoKFBwKCksWWgpLFpFKSw1NTUpP05jKFloLFpFKTpuZXcgZ2NlLDU1NSksSjRlPSEwLE40bih0KSxWeG4odCksTXN0KHQpLGtvKFloLFpFLHQpLHQpfWZ1bmN0aW9uIFJzdCh0LGUsbil7dmFyIHIscztpZih0Lmo9PTApcmV0dXJuIG47aWYocz11KFllZSh0LGUsbiksNzIpLHI9bi5haygpLCFyLklqKCl8fCF0LmEucmwocikpdGhyb3cgaXQobmV3IFZvKCJJbnZhbGlkIGVudHJ5IGZlYXR1cmUgJyIrci5IaigpLnpiKyIuIityLm5lKCkrIiciKSk7cmV0dXJuIHN9ZnVuY3Rpb24gTzBuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsaztmb3IoZD10LmEsdj0wLGs9ZC5sZW5ndGg7djxrOysrdilmb3IoaD1kW3ZdLHI9aCxzPTAsbz1yLmxlbmd0aDtzPG87KytzKWlmKG49cltzXSxWdChlKT09PVZ0KG4pfHxlIT1udWxsJiZ5aShlLG4pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFAwbih0KXt2YXIgZSxuLHI7cmV0dXJuIHljKHQsMCk+PTA/KG49YUkodCxHcSkscj1RRCh0LEdxKSk6KGU9Vm0odCwxKSxuPWFJKGUsNWU4KSxyPVFEKGUsNWU4KSxyPVBhKEYwKHIsMSksTnModCwxKSkpLFMxKEYwKHIsMzIpLE5zKG4sY28pKX1mdW5jdGlvbiBfYWUodCxlLG4pe3ZhciByLHM7c3dpdGNoKHI9KFpuKGUuYiE9MCksdShsaChlLGUuYS5hKSw4KSksbi5nKXtjYXNlIDA6ci5iPTA7YnJlYWs7Y2FzZSAyOnIuYj10LmY7YnJlYWs7Y2FzZSAzOnIuYT0wO2JyZWFrO2RlZmF1bHQ6ci5hPXQuZ31yZXR1cm4gcz1laShlLDApLGVEKHMsciksZX1mdW5jdGlvbiBTYWUodCxlLG4scil7dmFyIHMsbyxoLGQsdjtzd2l0Y2godj10LmIsbz1lLmQsaD1vLmosZD1CM3QoaCx2LmRbaC5nXSxuKSxzPUxpKG5jKG8ubiksby5hKSxvLmouZyl7Y2FzZSAxOmNhc2UgMzpkLmErPXMuYTticmVhaztjYXNlIDI6Y2FzZSA0OmQuYis9cy5ifWZzKHIsZCxyLmMuYixyLmMpfWZ1bmN0aW9uIEYwbih0LGUsbil7dmFyIHIscyxvLGg7Zm9yKGg9Um8odC5lLGUsMCksbz1uZXcgenB0LG8uYj1uLHI9bmV3IGRhKHQuZSxoKTtyLmI8ci5kLmdjKCk7KXM9KFpuKHIuYjxyLmQuZ2MoKSksdShyLmQuWGIoci5jPXIuYisrKSwxMCkpLHMucD1uLGxlKG8uZSxzKSxDbChyKTtyZXR1cm4gb31mdW5jdGlvbiBOMG4odCxlLG4scil7dmFyIHMsbyxoLGQsdjtmb3Iocz1udWxsLG89MCxkPW5ldyBTKGUpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDMzKSx2PWguaStoLmcsdDxoLmoraC5mK3ImJihzP24uaS12PG4uaS1vJiYocz1oKTpzPWgsbz1zLmkrcy5nKTtyZXR1cm4gcz9vK3I6MH1mdW5jdGlvbiBCMG4odCxlLG4scil7dmFyIHMsbyxoLGQsdjtmb3Iobz1udWxsLHM9MCxkPW5ldyBTKGUpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDMzKSx2PWguaitoLmYsdDxoLmkraC5nK3ImJihvP24uai12PG4uai1zJiYobz1oKTpvPWgscz1vLmorby5mKTtyZXR1cm4gbz9zK3I6MH1mdW5jdGlvbiBSMG4odCl7dmFyIGUsbixyO2ZvcihlPSExLHI9dC5iLmMubGVuZ3RoLG49MDtuPHI7bisrKU55dCh1KE5lKHQuYixuKSw0MzQpKT8hZSYmbisxPHImJk55dCh1KE5lKHQuYixuKzEpLDQzNCkpJiYoZT0hMCx1KE5lKHQuYixuKSw0MzQpLmE9ITApOmU9ITF9ZnVuY3Rpb24gajBuKHQsZSxuLHIscyl7dmFyIG8saDtmb3Iobz0wLGg9MDtoPHM7aCsrKW89UGEobyxKcChOcyhlW2hdLGNvKSxOcyhyW2hdLGNvKSkpLHRbaF09QXIobyksbz0kcChvLDMyKTtmb3IoO2g8bjtoKyspbz1QYShvLE5zKGVbaF0sY28pKSx0W2hdPUFyKG8pLG89JHAobywzMil9ZnVuY3Rpb24gJDBuKHQsZSl7VEUoKTt2YXIgbixyO2ZvcihyPShyYigpLGVWKSxuPXQ7ZT4xO2U+Pj0xKWUmMSYmKHI9ZTQocixuKSksbi5kPT0xP249ZTQobixuKTpuPW5ldyBRaWUoYWxlKG4uYSxuLmQsTnQoQ3IsWHIsMjUsbi5kPDwxLDE1LDEpKSk7cmV0dXJuIHI9ZTQocixuKSxyfWZ1bmN0aW9uIE00dCgpe000dD1aO3ZhciB0LGUsbixyO2ZvcihERXQ9TnQoYWEsdm8sMjUsMjUsMTUsMSksSUV0PU50KGFhLHZvLDI1LDMzLDE1LDEpLHI9MTUyNTg3ODkwNjI1ZS0xNixlPTMyO2U+PTA7ZS0tKUlFdFtlXT1yLHIqPS41O2ZvcihuPTEsdD0yNDt0Pj0wO3QtLSlERXRbdF09bixuKj0uNX1mdW5jdGlvbiB6MG4odCl7dmFyIGUsbjtpZihqZShSZShxZSh0LChUZSgpLEh5KSkpKSl7Zm9yKG49bmV3IGFyKGxyKEswKHQpLmEuS2MoKSxuZXcgeikpO3pyKG4pOylpZihlPXUoTXIobiksNzkpLGZ2KGUpJiZqZShSZShxZShlLGoyKSkpKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIEFhZSh0LGUpe3ZhciBuLHIscztGcyh0LmYsZSkmJihlLmI9dCxyPWUuYyxSbyh0LmosciwwKSE9LTF8fGxlKHQuaixyKSxzPWUuZCxSbyh0LmoscywwKSE9LTF8fGxlKHQuaixzKSxuPWUuYS5iLG4uYy5sZW5ndGghPTAmJighdC5pJiYodC5pPW5ldyBhc2UodCkpLHJ1bih0LmksbikpKX1mdW5jdGlvbiBxMG4odCl7dmFyIGUsbixyLHMsbztyZXR1cm4gbj10LmMuZCxyPW4uaixzPXQuZC5kLG89cy5qLHI9PW8/bi5wPHMucD8wOjE6T3oocik9PW8/MDpvM3Qocik9PW8/MTooZT10LmIsTnUoZS5iLE96KHIpKT8wOjEpfWZ1bmN0aW9uIHVxKCl7dXE9Wix3aHQ9bmV3IG45KHExZSwwKSxNOXQ9bmV3IG45KCJMT05HRVNUX1BBVEgiLDEpLGJodD1uZXcgbjkoIkNPRkZNQU5fR1JBSEFNIiwyKSxMOXQ9bmV3IG45KFhvdCwzKSxEOXQ9bmV3IG45KCJTVFJFVENIX1dJRFRIIiw0KSxtRz1uZXcgbjkoIk1JTl9XSURUSCIsNSl9ZnVuY3Rpb24gazIodCl7dmFyIGU7dGhpcy5kPW5ldyBfcix0aGlzLmM9dC5jLHRoaXMuZT10LmQsdGhpcy5iPXQuYix0aGlzLmY9bmV3IFRLdCh0LmUpLHRoaXMuYT10LmEsdC5mP3RoaXMuZz10LmY6dGhpcy5nPShlPXUoVmYoZlUpLDkpLG5ldyBzaChlLHUoZmYoZSxlLmxlbmd0aCksOSksMCkpfWZ1bmN0aW9uIGxxKHQsZSl7dmFyIG4scixzLG8saCxkO3M9dCxoPVI5KHMsImxheW91dE9wdGlvbnMiKSwhaCYmKGg9UjkocywkZGUpKSxoJiYoZD1oLHI9bnVsbCxkJiYocj0obz15aXQoZCxOdChBZSxlZSwyLDAsNiwxKSksbmV3IEVldChkLG8pKSksciYmKG49bmV3IGpHdChkLGUpLHZhKHIsbikpKX1mdW5jdGlvbiBEbyh0KXtpZihfdCh0LDIzOSkpcmV0dXJuIHUodCwzMyk7aWYoX3QodCwxODYpKXJldHVybiBUMSh1KHQsMTE4KSk7dGhyb3cgaXQodD9uZXcgU2coIk9ubHkgc3VwcG9ydCBub2RlcyBhbmQgcG9ydHMuIik6bmV3IFN4KEtkZSkpfWZ1bmN0aW9uIEgwbih0LGUsbixyKXtyZXR1cm4oZT49MCYmaG4odC5zdWJzdHIoZSwzKSwiR01UIil8fGU+PTAmJmhuKHQuc3Vic3RyKGUsMyksIlVUQyIpKSYmKG5bMF09ZSszKSxyeHQodCxuLHIpfWZ1bmN0aW9uIFYwbih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKG89dC5nLmEsaD10LmcuYixyPW5ldyBTKHQuZCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNzApLHM9bi5uLHMuYT1vLHQuaT09KHZlKCksUG4pP3MuYj1oK3Quai5iLW4uby5iOnMuYj1oLExpKHMsZSksbys9bi5vLmErdC5lfWZ1bmN0aW9uIHZyKHQsZSxuKXtpZih0LmIpdGhyb3cgaXQobmV3IE5vKCJUaGUgdGFzayBpcyBhbHJlYWR5IGRvbmUuIikpO3JldHVybiB0LnAhPW51bGw/ITE6KHQucD1lLHQucj1uLHQuayYmKHQubz0oR2QoKSxfYShUdShEYXRlLm5vdygpKSxXZykpKSwhMCl9ZnVuY3Rpb24gRDR0KHQpe3ZhciBlLG4scixzLG8saCxkO3JldHVybiBkPW5ldyBfeCxuPXQudGcoKSxzPW4hPW51bGwscyYmRTgoZCxBZCx0LnRnKCkpLHI9dC5uZSgpLG89ciE9bnVsbCxvJiZFOChkLGNpLHQubmUoKSksZT10LnNnKCksaD1lIT1udWxsLGgmJkU4KGQsImRlc2NyaXB0aW9uIix0LnNnKCkpLGR9ZnVuY3Rpb24gTGFlKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIG89dC5xLHQucT1lLHQuRGImNCYmISh0LkRiJjEpJiYocz1uZXcgSnModCwxLDksbyxlKSxuP24uRWkocyk6bj1zKSxlPyhyPWUuYyxyIT10LnImJihuPXQubmsocixuKSkpOnQuciYmKG49dC5uayhudWxsLG4pKSxufWZ1bmN0aW9uIEcwbih0LGUsbil7dmFyIHIscyxvLGgsZDtmb3Iobj0oZD1lLGM2KGQsdC5lLC0xLXQuYyxuKSksaD1BdnQodC5hKSxvPShyPW5ldyBwMihuZXcgQ2coaC5hKS5hKSxuZXcgeVIocikpO28uYS5iOylzPXUoWncoby5hKS5jZCgpLDg3KSxuPVBFKHMsdnEocyx0LmEpLG4pO3JldHVybiBufWZ1bmN0aW9uIFUwbih0LGUsbil7dmFyIHIscyxvLGgsZDtmb3Iobj0oZD1lLG0kKGQsdC5lLC0xLXQuYyxuKSksaD1BdnQodC5hKSxvPShyPW5ldyBwMihuZXcgQ2coaC5hKS5hKSxuZXcgeVIocikpO28uYS5iOylzPXUoWncoby5hKS5jZCgpLDg3KSxuPVBFKHMsdnEocyx0LmEpLG4pO3JldHVybiBufWZ1bmN0aW9uIFcwbih0LGUsbixyKXt2YXIgcyxvLGg7aWYocj09MClEYyhlLDAsdCxuLHQubGVuZ3RoLW4pO2Vsc2UgZm9yKGg9MzItcix0W3QubGVuZ3RoLTFdPTAsbz10Lmxlbmd0aC0xO28+bjtvLS0pdFtvXXw9ZVtvLW4tMV0+Pj5oLHRbby0xXT1lW28tbi0xXTw8cjtmb3Iocz0wO3M8bjtzKyspdFtzXT0wfWZ1bmN0aW9uIFkwbih0KXt2YXIgZSxuLHIscyxvO2ZvcihlPTAsbj0wLG89dC5LYygpO28uT2IoKTspcj11KG8uUGIoKSwxMTEpLGU9Yi5NYXRoLm1heChlLHIuZC5iKSxuPWIuTWF0aC5tYXgobixyLmQuYyk7Zm9yKHM9dC5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwxMTEpLHIuZC5iPWUsci5kLmM9bn1mdW5jdGlvbiBLMG4odCl7dmFyIGUsbixyLHMsbztmb3Iobj0wLGU9MCxvPXQuS2MoKTtvLk9iKCk7KXI9dShvLlBiKCksMTExKSxuPWIuTWF0aC5tYXgobixyLmQuZCksZT1iLk1hdGgubWF4KGUsci5kLmEpO2ZvcihzPXQuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTExKSxyLmQuZD1uLHIuZC5hPWV9ZnVuY3Rpb24gTWFlKHQsZSl7dmFyIG4scixzLG87Zm9yKG89bmV3IGhlLHM9MCxyPWUuS2MoKTtyLk9iKCk7KXtmb3Iobj1wZSh1KHIuUGIoKSwxOSkuYStzKTtuLmE8dC5mJiYhamVuKHQsbi5hKTspbj1wZShuLmErMSksKytzO2lmKG4uYT49dC5mKWJyZWFrO28uY1tvLmMubGVuZ3RoXT1ufXJldHVybiBvfWZ1bmN0aW9uIEk0dCh0KXt2YXIgZSxuLHIscztmb3IoZT1udWxsLHM9bmV3IFModC53ZigpKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxODEpLG49bmV3IGFoKHIucWYoKS5hLHIucWYoKS5iLHIucmYoKS5hLHIucmYoKS5iKSxlP2dfKGUsbik6ZT1uO3JldHVybiFlJiYoZT1uZXcgRngpLGV9ZnVuY3Rpb24ganN0KHQsZSxuLHIpe3ZhciBzLG87cmV0dXJuIG49PTE/KCF0Lm4mJih0Lm49bmV3IGZlKHFvLHQsMSw3KSksWmModC5uLGUscikpOihvPXUoeW4oKHM9dShEbih0LDE2KSwyNiksc3x8dC56aCgpKSxuKSw2Niksby5OaigpLlFqKHQsc3UodCksbi1Kbih0LnpoKCkpLGUscikpfWZ1bmN0aW9uICRzdCh0LGUsbil7dmFyIHIscyxvLGgsZDtmb3Iocj1uLmdjKCksdC5xaSh0LmkrciksZD10LmktZSxkPjAmJkRjKHQuZyxlLHQuZyxlK3IsZCksaD1uLktjKCksdC5pKz1yLHM9MDtzPHI7KytzKW89aC5QYigpLHA5KHQsZSx0Lm9pKGUsbykpLHQuYmkoZSxvKSx0LmNpKCksKytlO3JldHVybiByIT0wfWZ1bmN0aW9uIEYxKHQsZSxuKXt2YXIgcjtyZXR1cm4gZSE9dC5xPyh0LnEmJihuPW0kKHQucSx0LC0xMCxuKSksZSYmKG49YzYoZSx0LC0xMCxuKSksbj1MYWUodCxlLG4pKTp0LkRiJjQmJiEodC5EYiYxKSYmKHI9bmV3IEpzKHQsMSw5LGUsZSksbj9uLkVpKHIpOm49ciksbn1mdW5jdGlvbiB6c3QodCxlLG4scil7cmV0dXJuIHh3dCgobiZtZCk9PTAsImZsYXRNYXAgZG9lcyBub3Qgc3VwcG9ydCBTVUJTSVpFRCBjaGFyYWN0ZXJpc3RpYyIpLHh3dCgobiY0KT09MCwiZmxhdE1hcCBkb2VzIG5vdCBzdXBwb3J0IFNPUlRFRCBjaGFyYWN0ZXJpc3RpYyIpLExyKHQpLExyKGUpLG5ldyBGWnQodCxuLHIsZSl9ZnVuY3Rpb24gWDBuKHQsZSl7YnZ0KGUsIkNhbm5vdCBzdXBwcmVzcyBhIG51bGwgZXhjZXB0aW9uLiIpLEJqKGUhPXQsIkV4Y2VwdGlvbiBjYW4gbm90IHN1cHByZXNzIGl0c2VsZi4iKSwhdC5pJiYodC5rPT1udWxsP3Quaz1sdChjdChEdXQsMSksZWUsNzgsMCxbZV0pOnQua1t0LmsubGVuZ3RoXT1lKX1mdW5jdGlvbiB3NCh0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGs7Zm9yKGg9bi5sZW5ndGgsbz0wLHM9LTEsaz1UZWUodC5zdWJzdHIoZSksKEFudCgpLExFdCkpLGQ9MDtkPGg7KytkKXY9bltkXS5sZW5ndGgsdj5vJiZhbm4oayxUZWUobltkXSxMRXQpKSYmKHM9ZCxvPXYpO3JldHVybiBzPj0wJiYoclswXT1lK28pLHN9ZnVuY3Rpb24gUTBuKHQsZSl7dmFyIG47aWYobj14VXQodC5iLkhmKCksZS5iLkhmKCkpLG4hPTApcmV0dXJuIG47c3dpdGNoKHQuYi5IZigpLmcpe2Nhc2UgMTpjYXNlIDI6cmV0dXJuIHB1KHQuYi5zZigpLGUuYi5zZigpKTtjYXNlIDM6Y2FzZSA0OnJldHVybiBwdShlLmIuc2YoKSx0LmIuc2YoKSl9cmV0dXJuIDB9ZnVuY3Rpb24gWjBuKHQpe3ZhciBlLG4scjtmb3Iocj10LmUuYy5sZW5ndGgsdC5hPXQyKENyLFtlZSxYcl0sWzQ4LDI1XSwxNSxbcixyXSwyKSxuPW5ldyBTKHQuYyk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMjgyKSx0LmFbZS5jLmJdW2UuZC5iXSs9dShRKGUsKEpmKCksYzcpKSwxOSkuYX1mdW5jdGlvbiBKMG4odCxlLG4pe3ZyKG4sIkdyb3cgVHJlZSIsMSksdC5iPWUuZixqZShSZShRKGUsKFo4KCksZlMpKSkpPyh0LmM9bmV3IHZwLFdRdCh0LG51bGwpKTp0LmM9bmV3IHZwLHQuYT0hMSxYY2UodCxlLmYpLEp0KGUsdTd0LChObigpLCEhdC5hKSksb3Iobil9ZnVuY3Rpb24gdGduKHQsZSl7dmFyIG4scixzLG8saDtpZih0PT1udWxsKXJldHVybiBudWxsO2ZvcihoPU50KHhoLHlkLDI1LDIqZSwxNSwxKSxyPTAscz0wO3I8ZTsrK3Ipbj10W3JdPj40JjE1LG89dFtyXSYxNSxoW3MrK109WUF0W25dLGhbcysrXT1ZQXRbb107cmV0dXJuIE1oKGgsMCxoLmxlbmd0aCl9ZnVuY3Rpb24gZWduKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIHI9ZS5haygpLG89ZS5kZCgpLHM9ci4kaigpP0dwKHQsNCxyLG8sbnVsbCxERSh0LHIsbyxfdChyLDk5KSYmKHUociwxOCkuQmImS2EpIT0wKSwhMCk6R3AodCxyLktqKCk/MjoxLHIsbyxyLnpqKCksLTEsITApLG4/bi5FaShzKTpuPXMsbn1mdW5jdGlvbiBDdSh0KXt2YXIgZSxuO3JldHVybiB0Pj1LYT8oZT1SSSsodC1LYT4+MTAmMTAyMykmeXMsbj01NjMyMCsodC1LYSYxMDIzKSZ5cyxTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKygiIitTdHJpbmcuZnJvbUNoYXJDb2RlKG4pKSk6U3RyaW5nLmZyb21DaGFyQ29kZSh0JnlzKX1mdW5jdGlvbiBuZ24odCxlKXskbSgpO3ZhciBuLHIscyxvO3JldHVybiBzPXUodShBaSh0LnIsZSksMjEpLDg0KSxzLmdjKCk+PTI/KHI9dShzLktjKCkuUGIoKSwxMTEpLG49dC51LkhjKChadSgpLG5BKSksbz10LnUuSGMoUTYpLCFyLmEmJiFuJiYocy5nYygpPT0yfHxvKSk6ITF9ZnVuY3Rpb24gRGFlKHQsZSxuLHIscyl7dmFyIG8saCxkO2ZvcihvPWd1ZSh0LGUsbixyLHMpLGQ9ITE7IW87KWJxKHQscywhMCksZD0hMCxvPWd1ZSh0LGUsbixyLHMpO2QmJmJxKHQscywhMSksaD1DaXQocyksaC5jLmxlbmd0aCE9MCYmKHQuZCYmdC5kLmxnKGgpLERhZSh0LHMsbixyLGgpKX1mdW5jdGlvbiBocSgpe2hxPVosU2Z0PW5ldyBhOShKMCwwKSxrQXQ9bmV3IGE5KCJESVJFQ1RFRCIsMSksVEF0PW5ldyBhOSgiVU5ESVJFQ1RFRCIsMikseUF0PW5ldyBhOSgiQVNTT0NJQVRJT04iLDMpLEVBdD1uZXcgYTkoIkdFTkVSQUxJWkFUSU9OIiw0KSx4QXQ9bmV3IGE5KCJERVBFTkRFTkNZIiw1KX1mdW5jdGlvbiByZ24odCxlKXt2YXIgbjtpZighVDEodCkpdGhyb3cgaXQobmV3IE5vKF9kZSkpO3N3aXRjaChuPVQxKHQpLGUuZyl7Y2FzZSAxOnJldHVybi0odC5qK3QuZik7Y2FzZSAyOnJldHVybiB0Lmktbi5nO2Nhc2UgMzpyZXR1cm4gdC5qLW4uZjtjYXNlIDQ6cmV0dXJuLSh0LmkrdC5nKX1yZXR1cm4gMH1mdW5jdGlvbiB4RSh0LGUpe3ZhciBuLHI7Zm9yKE9uKGUpLHI9dC5iLmMubGVuZ3RoLGxlKHQuYixlKTtyPjA7KXtpZihuPXIscj0oci0xKS8yfDAsdC5hLnVlKE5lKHQuYixyKSxlKTw9MClyZXR1cm4gY2godC5iLG4sZSksITA7Y2godC5iLG4sTmUodC5iLHIpKX1yZXR1cm4gY2godC5iLHIsZSksITB9ZnVuY3Rpb24gTzR0KHQsZSxuLHIpe3ZhciBzLG87aWYocz0wLG4pcz1Meih0LmFbbi5nXVtlLmddLHIpO2Vsc2UgZm9yKG89MDtvPGNWO28rKylzPWIuTWF0aC5tYXgocyxMeih0LmFbb11bZS5nXSxyKSk7cmV0dXJuIGU9PShLZigpLGV1KSYmdC5iJiYocz1iLk1hdGgubWF4KHMsdC5iLmEpKSxzfWZ1bmN0aW9uIGlnbih0LGUpe3ZhciBuLHIscyxvLGgsZDtyZXR1cm4gcz10Lmksbz1lLmksIXN8fCFvfHxzLmkhPW8uaXx8cy5pPT0odmUoKSxIbil8fHMuaT09KHZlKCksQm4pPyExOihoPXMuZy5hLG49aCtzLmouYSxkPW8uZy5hLHI9ZCtvLmouYSxoPD1yJiZuPj1kKX1mdW5jdGlvbiBQNHQodCxlLG4scil7dmFyIHM7aWYocz0hMSxyYShyKSYmKHM9ITAsRTgoZSxuLEJyKHIpKSksc3x8Tm0ocikmJihzPSEwLFA0dCh0LGUsbixyKSksc3x8X3QociwyMzYpJiYocz0hMCxyMihlLG4sdShyLDIzNikpKSwhcyl0aHJvdyBpdChuZXcgZmV0KEE4dCkpfWZ1bmN0aW9uIHNnbih0LGUpe3ZhciBuLHIscztpZihuPWUuSGgodC5hKSxuJiYocz1YZigoIW4uYiYmKG4uYj1uZXcga2woKGRuKCksUWEpLGNjLG4pKSxuLmIpLE5oKSxzIT1udWxsKSl7Zm9yKHI9MTtyPCgkdSgpLHZMdCkubGVuZ3RoOysrcilpZihobih2THRbcl0scykpcmV0dXJuIHJ9cmV0dXJuIDB9ZnVuY3Rpb24gYWduKHQsZSl7dmFyIG4scixzO2lmKG49ZS5IaCh0LmEpLG4mJihzPVhmKCghbi5iJiYobi5iPW5ldyBrbCgoZG4oKSxRYSksY2MsbikpLG4uYiksTmgpLHMhPW51bGwpKXtmb3Iocj0xO3I8KCR1KCksbUx0KS5sZW5ndGg7KytyKWlmKGhuKG1MdFtyXSxzKSlyZXR1cm4gcn1yZXR1cm4gMH1mdW5jdGlvbiBJYWUodCxlKXt2YXIgbixyLHMsbztpZihPbihlKSxvPXQuYS5nYygpLG88ZS5nYygpKWZvcihuPXQuYS5lYygpLktjKCk7bi5PYigpOylyPW4uUGIoKSxlLkhjKHIpJiZuLlFiKCk7ZWxzZSBmb3Iocz1lLktjKCk7cy5PYigpOylyPXMuUGIoKSx0LmEuQmMocikhPW51bGw7cmV0dXJuIG8hPXQuYS5nYygpfWZ1bmN0aW9uIE9hZSh0KXt2YXIgZSxuO3N3aXRjaChuPW5jKFlvKGx0KGN0KFdzLDEpLGVlLDgsMCxbdC5pLm4sdC5uLHQuYV0pKSksZT10LmkuZCx0LmouZyl7Y2FzZSAxOm4uYi09ZS5kO2JyZWFrO2Nhc2UgMjpuLmErPWUuYzticmVhaztjYXNlIDM6bi5iKz1lLmE7YnJlYWs7Y2FzZSA0Om4uYS09ZS5ifXJldHVybiBufWZ1bmN0aW9uIG9nbih0KXt2YXIgZTtmb3IoZT0ocjYoKSx1KE1yKG5ldyBhcihscihqbyh0KS5hLktjKCksbmV3IHopKSksMTcpLmMuaSk7ZS5rPT0oVm4oKSx0YSk7KUp0KGUsKGFlKCksQU8pLChObigpLCEwKSksZT11KE1yKG5ldyBhcihscihqbyhlKS5hLktjKCksbmV3IHopKSksMTcpLmMuaX1mdW5jdGlvbiBxc3QodCxlLG4scil7dmFyIHMsbyxoLGQ7Zm9yKGQ9dF8oZSxyKSxoPWQuS2MoKTtoLk9iKCk7KXM9dShoLlBiKCksMTEpLHQuZFtzLnBdPXQuZFtzLnBdK3QuY1tuLnBdO2ZvcihkPXRfKG4sciksbz1kLktjKCk7by5PYigpOylzPXUoby5QYigpLDExKSx0LmRbcy5wXT10LmRbcy5wXS10LmNbZS5wXX1mdW5jdGlvbiBGNHQodCxlLG4pe3ZhciByLHM7Zm9yKHM9bmV3IG5yKCghdC5hJiYodC5hPW5ldyBmZShycyx0LDEwLDExKSksdC5hKSk7cy5lIT1zLmkuZ2MoKTspcj11KGRyKHMpLDMzKSx4MShyLHIuaStlLHIuaituKTt2YSgoIXQuYiYmKHQuYj1uZXcgZmUoWXMsdCwxMiwzKSksdC5iKSxuZXcgQUd0KGUsbikpfWZ1bmN0aW9uIGNnbih0LGUsbixyKXt2YXIgcyxvO2ZvcihvPWUscz1vLmQ9PW51bGx8fHQuYS51ZShuLmQsby5kKT4wPzE6MDtvLmFbc10hPW47KW89by5hW3NdLHM9dC5hLnVlKG4uZCxvLmQpPjA/MTowO28uYVtzXT1yLHIuYj1uLmIsci5hWzBdPW4uYVswXSxyLmFbMV09bi5hWzFdLG4uYVswXT1udWxsLG4uYVsxXT1udWxsfWZ1bmN0aW9uIHVnbih0KXtadSgpO3ZhciBlLG47cmV0dXJuIGU9amkoc2csbHQoY3QoZVUsMSksb2UsMjczLDAsW0NiXSkpLCEoT0QoayQoZSx0KSk+MXx8KG49amkobkEsbHQoY3QoZVUsMSksb2UsMjczLDAsW2VBLFE2XSkpLE9EKGskKG4sdCkpPjEpKX1mdW5jdGlvbiBONHQodCxlKXt2YXIgbjtuPU5jKChQcCgpLFloKSx0KSxfdChuLDQ5OCk/a28oWWgsdCxuZXcgUUd0KHRoaXMsZSkpOmtvKFloLHQsdGhpcyksSHN0KHRoaXMsZSksZT09KGM4KCksYUx0KT8odGhpcy53Yj11KHRoaXMsMTkzOSksdShlLDE5NDEpKTp0aGlzLndiPShIcCgpLExuKX1mdW5jdGlvbiBsZ24odCl7dmFyIGUsbixyO2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7Zm9yKGU9bnVsbCxuPTA7bjxhQS5sZW5ndGg7KytuKXRyeXtyZXR1cm4gelZ0KGFBW25dLHQpfWNhdGNoKHMpe2lmKHM9V2kocyksX3QocywzMikpcj1zLGU9cjtlbHNlIHRocm93IGl0KHMpfXRocm93IGl0KG5ldyBXJChlKSl9ZnVuY3Rpb24gUGFlKCl7UGFlPVosVmdlPWx0KGN0KEFlLDEpLGVlLDIsNixbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdKSxHZ2U9bHQoY3QoQWUsMSksZWUsMiw2LFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIix3NiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0pfWZ1bmN0aW9uIEZhZSh0KXt2YXIgZSxuLHI7ZT1obih0eXBlb2YgZSxfb3QpP251bGw6bmV3IHFhLGUmJihkOCgpLG49KHI9OTAwLHI+PVdnPyJlcnJvciI6cj49OTAwPyJ3YXJuIjpyPj04MDA/ImluZm8iOiJsb2ciKSx2WHQobix0LmEpLHQuYiYmTjV0KGUsbix0LmIsIkV4Y2VwdGlvbjogIiwhMCkpfWZ1bmN0aW9uIFEodCxlKXt2YXIgbixyO3JldHVybiByPSghdC5xJiYodC5xPW5ldyBfciksdHIodC5xLGUpKSxyPz8obj1lLndnKCksX3Qobiw0KSYmKG49PW51bGw/KCF0LnEmJih0LnE9bmV3IF9yKSxKeCh0LnEsZSkpOighdC5xJiYodC5xPW5ldyBfciksa2kodC5xLGUsbikpKSxuKX1mdW5jdGlvbiBXYSgpe1dhPVosRGQ9bmV3IF9NKCJQMV9DWUNMRV9CUkVBS0lORyIsMCksZ2I9bmV3IF9NKCJQMl9MQVlFUklORyIsMSksY3U9bmV3IF9NKCJQM19OT0RFX09SREVSSU5HIiwyKSxxYz1uZXcgX00oIlA0X05PREVfUExBQ0VNRU5UIiwzKSxJbz1uZXcgX00oIlA1X0VER0VfUk9VVElORyIsNCl9ZnVuY3Rpb24gTmFlKHQsZSl7dmFyIG4scixzLG8saDtmb3Iocz1lPT0xP2NsdDpvbHQscj1zLmEuZWMoKS5LYygpO3IuT2IoKTspZm9yKG49dShyLlBiKCksMTAzKSxoPXUoQWkodC5mLmMsbiksMjEpLktjKCk7aC5PYigpOylvPXUoaC5QYigpLDQ2KSxtdSh0LmIuYixvLmIpLG11KHQuYi5hLHUoby5iLDgxKS5kKX1mdW5jdGlvbiBoZ24odCxlKXtIOSgpO3ZhciBuO2lmKHQuYz09ZS5jKXtpZih0LmI9PWUuYnx8TmNuKHQuYixlLmIpKXtpZihuPUdYZSh0LmIpPzE6LTEsdC5hJiYhZS5hKXJldHVybiBuO2lmKCF0LmEmJmUuYSlyZXR1cm4tbn1yZXR1cm4gcHUodC5iLmcsZS5iLmcpfWVsc2UgcmV0dXJuIE1zKHQuYyxlLmMpfWZ1bmN0aW9uIGZnbih0LGUpe3ZhciBuO3ZyKGUsIkhpZXJhcmNoaWNhbCBwb3J0IHBvc2l0aW9uIHByb2Nlc3NpbmciLDEpLG49dC5iLG4uYy5sZW5ndGg+MCYmZWxlKChBbigwLG4uYy5sZW5ndGgpLHUobi5jWzBdLDI5KSksdCksbi5jLmxlbmd0aD4xJiZlbGUodShOZShuLG4uYy5sZW5ndGgtMSksMjkpLHQpLG9yKGUpfWZ1bmN0aW9uIEJhZSh0LGUpe3ZhciBuLHIscztpZihSNHQodCxlKSlyZXR1cm4hMDtmb3Iocj1uZXcgUyhlKTtyLmE8ci5jLmMubGVuZ3RoOylpZihuPXUoSihyKSwzMykscz13YWUobiksVHEodCxuLHMpfHxHcmUodCxuKS10Lmc8PXQuYSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBjSSgpe2NJPVosSEc9KGRhdCgpLHdTdCksYWZ0PSQzZSxzZnQ9ajNlLGxTdD1OM2UsaWZ0PVIzZSx1U3Q9bmV3IE93KDgpLEwzZT1uZXcgZW8oKHVpKCksVTIpLHVTdCksTTNlPW5ldyBlbyhXMiw4KSxEM2U9cFN0LG9TdD1JM2UsY1N0PU8zZSxBM2U9bmV3IGVvKFFPLChObigpLCExKSl9ZnVuY3Rpb24gZnEoKXtmcT1aLFBTdD1uZXcgT3coMTUpLHI0ZT1uZXcgZW8oKHVpKCksVTIpLFBTdCksaTRlPW5ldyBlbyhXMiwxNSksRlN0PW5ldyBlbyhaRyxwZSgwKSksRFN0PUdTdCxlNGU9RzIsbjRlPXhiLE1TdD1uZXcgZW8oVzYsY2RlKSxJU3Q9S0csT1N0PWM1LGxmdD1jNGUsdDRlPVlHfWZ1bmN0aW9uIGUwKHQpe2lmKCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYikuaSE9MXx8KCF0LmMmJih0LmM9bmV3IENuKGJyLHQsNSw4KSksdC5jKS5pIT0xKXRocm93IGl0KG5ldyBGbihydXQpKTtyZXR1cm4gRG8odShBdCgoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLDApLDgyKSl9ZnVuY3Rpb24gUmFlKHQpe2lmKCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYikuaSE9MXx8KCF0LmMmJih0LmM9bmV3IENuKGJyLHQsNSw4KSksdC5jKS5pIT0xKXRocm93IGl0KG5ldyBGbihydXQpKTtyZXR1cm4gUkQodShBdCgoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLDApLDgyKSl9ZnVuY3Rpb24gamFlKHQpe2lmKCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYikuaSE9MXx8KCF0LmMmJih0LmM9bmV3IENuKGJyLHQsNSw4KSksdC5jKS5pIT0xKXRocm93IGl0KG5ldyBGbihydXQpKTtyZXR1cm4gUkQodShBdCgoIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmMpLDApLDgyKSl9ZnVuY3Rpb24gdGIodCl7aWYoKCF0LmImJih0LmI9bmV3IENuKGJyLHQsNCw3KSksdC5iKS5pIT0xfHwoIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmMpLmkhPTEpdGhyb3cgaXQobmV3IEZuKHJ1dCkpO3JldHVybiBEbyh1KEF0KCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYyksMCksODIpKX1mdW5jdGlvbiBCNHQodCxlLG4pe3ZhciByLHMsbztpZigrK3QuaixzPXQuVmkoKSxlPj1zfHxlPDApdGhyb3cgaXQobmV3IHlvKGl1dCtlK0QyK3MpKTtpZihuPj1zfHxuPDApdGhyb3cgaXQobmV3IHlvKHN1dCtuK0QyK3MpKTtyZXR1cm4gZSE9bj9yPShvPXQuVGkobiksdC5IaShlLG8pLG8pOnI9dC5PaShuKSxyfWZ1bmN0aW9uICRhZSh0KXt2YXIgZSxuLHI7aWYocj10LHQpZm9yKGU9MCxuPXQuVWcoKTtuO249bi5VZygpKXtpZigrK2U+dm90KXJldHVybiAkYWUobik7aWYocj1uLG49PXQpdGhyb3cgaXQobmV3IE5vKCJUaGVyZSBpcyBhIGN5Y2xlIGluIHRoZSBjb250YWlubWVudCBoaWVyYXJjaHkgb2YgIit0KSl9cmV0dXJuIHJ9ZnVuY3Rpb24gZWIodCl7dmFyIGUsbixyO2ZvcihyPW5ldyBmMihZYSwiWyIsIl0iKSxuPXQuS2MoKTtuLk9iKCk7KWU9bi5QYigpLCQwKHIsVnQoZSk9PT1WdCh0KT8iKHRoaXMgQ29sbGVjdGlvbikiOmU9PW51bGw/X3U6JG8oZSkpO3JldHVybiByLmE/ci5lLmxlbmd0aD09MD9yLmEuYTpyLmEuYSsoIiIrci5lKTpyLmN9ZnVuY3Rpb24gUjR0KHQsZSl7dmFyIG4scjtpZihyPSExLGUuZ2MoKTwyKXJldHVybiExO2ZvcihuPTA7bjxlLmdjKCk7bisrKW48ZS5nYygpLTE/cj1yfFRxKHQsdShlLlhiKG4pLDMzKSx1KGUuWGIobisxKSwzMykpOnI9cnxUcSh0LHUoZS5YYihuKSwzMyksdShlLlhiKDApLDMzKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gemFlKHQsZSl7dmFyIG47ZSE9dC5hPyhuPW51bGwsdC5hJiYobj11KHQuYSw0OSkuaWgodCw0LGkxLG4pKSxlJiYobj11KGUsNDkpLmdoKHQsNCxpMSxuKSksbj1YeXQodCxlLG4pLG4mJm4uRmkoKSk6dC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSwxLGUsZSkpfWZ1bmN0aW9uIGo0dCh0LGUpe3ZhciBuO2UhPXQuZT8odC5lJiZYSnQoQXZ0KHQuZSksdCksZSYmKCFlLmImJihlLmI9bmV3IG1SKG5ldyBhZXQpKSxsWXQoZS5iLHQpKSxuPUVkbih0LGUsbnVsbCksbiYmbi5GaSgpKTp0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgSnModCwxLDQsZSxlKSl9ZnVuY3Rpb24gZnkodCl7dmFyIGUsbixyO2ZvcihuPXQubGVuZ3RoLHI9MDtyPG4mJihScihyLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQocik8PTMyKTspKytyO2ZvcihlPW47ZT5yJiYoUnIoZS0xLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZS0xKTw9MzIpOyktLWU7cmV0dXJuIHI+MHx8ZTxuP3Quc3Vic3RyKHIsZS1yKTp0fWZ1bmN0aW9uIGRnbih0LGUpe3ZhciBuO249ZS5vLEJwKHQuZik/KHQuai5hPWIuTWF0aC5tYXgodC5qLmEsbi5hKSx0LmouYis9bi5iLHQuZC5jLmxlbmd0aD4xJiYodC5qLmIrPXQuZSkpOih0LmouYSs9bi5hLHQuai5iPWIuTWF0aC5tYXgodC5qLmIsbi5iKSx0LmQuYy5sZW5ndGg+MSYmKHQuai5hKz10LmUpKX1mdW5jdGlvbiBuYigpe25iPVoseTJlPWx0KGN0KFhhLDEpLHhjLDYxLDAsWyh2ZSgpLFBuKSxIbixtcl0pLG0yZT1sdChjdChYYSwxKSx4Yyw2MSwwLFtIbixtcixCbl0pLHgyZT1sdChjdChYYSwxKSx4Yyw2MSwwLFttcixCbixQbl0pLGsyZT1sdChjdChYYSwxKSx4Yyw2MSwwLFtCbixQbixIbl0pfWZ1bmN0aW9uIGdnbih0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGssQztpZihoPXQuYy5kLGQ9dC5kLmQsaC5qIT1kLmopZm9yKEM9dC5iLHM9aC5qLHY9bnVsbDtzIT1kLmo7KXY9ZT09MD9PeihzKTpvM3Qocyksbz1CM3QocyxDLmRbcy5nXSxuKSxrPUIzdCh2LEMuZFt2LmddLG4pLHJpKHIsTGkobyxrKSkscz12fWZ1bmN0aW9uIHBnbih0LGUsbixyKXt2YXIgcyxvLGgsZCx2O3JldHVybiBoPVlzZSh0LmEsZSxuKSxkPXUoaC5hLDE5KS5hLG89dShoLmIsMTkpLmEsciYmKHY9dShRKGUsKGFlKCksSnUpKSwxMCkscz11KFEobixKdSksMTApLHYmJnMmJih0SnQodC5iLHYscyksZCs9dC5iLmksbys9dC5iLmUpKSxkPm99ZnVuY3Rpb24gcWFlKHQpe3ZhciBlLG4scixzLG8saCxkLHYsaztmb3IodGhpcy5hPXdzZSh0KSx0aGlzLmI9bmV3IGhlLG49dCxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWZvcihlPW5bcl0sbz1uZXcgaGUsbGUodGhpcy5iLG8pLGQ9ZSx2PTAsaz1kLmxlbmd0aDt2PGs7Kyt2KWg9ZFt2XSxsZShvLG5ldyBCdShoLmopKX1mdW5jdGlvbiBiZ24odCxlLG4pe3ZhciByLHMsbztyZXR1cm4gbz0wLHI9bltlXSxlPG4ubGVuZ3RoLTEmJihzPW5bZSsxXSx0LmJbZV0/KG89enhuKHQuZCxyLHMpLG8rPWNydCh0LmEsciwodmUoKSxIbikpLG8rPWNydCh0LmEscyxCbikpOm89b29uKHQuYSxyLHMpKSx0LmNbZV0mJihvKz1NYW4odC5hLHIpKSxvfWZ1bmN0aW9uIHdnbih0LGUsbixyLHMpe3ZhciBvLGgsZCx2O2Zvcih2PW51bGwsZD1uZXcgUyhyKTtkLmE8ZC5jLmMubGVuZ3RoOylpZihoPXUoSihkKSw0NDEpLGghPW4mJlJvKGguZSxzLDApIT0tMSl7dj1oO2JyZWFrfW89R3J0KHMpLE9hKG8sbi5iKSxvYShvLHYuYiksbG4odC5hLHMsbmV3IEZqKG8sZSxuLmYpKX1mdW5jdGlvbiBIYWUodCl7Zm9yKDt0LmcuYyE9MCYmdC5kLmMhPTA7KXludCh0LmcpLmM+eW50KHQuZCkuYz8odC5pKz10LmcuYyxzc3QodC5kKSk6eW50KHQuZCkuYz55bnQodC5nKS5jPyh0LmUrPXQuZC5jLHNzdCh0LmcpKToodC5pKz1tS3QodC5nKSx0LmUrPW1LdCh0LmQpLHNzdCh0LmcpLHNzdCh0LmQpKX1mdW5jdGlvbiB2Z24odCxlLG4pe3ZhciByLHMsbyxoO2ZvcihvPWUucSxoPWUucixuZXcgaTIoKFVmKCksbWIpLGUsbywxKSxuZXcgaTIobWIsbyxoLDEpLHM9bmV3IFMobik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTEyKSxyIT1vJiZyIT1lJiZyIT1oJiYod3h0KHQuYSxyLGUpLHd4dCh0LmEscixoKSl9ZnVuY3Rpb24gVmFlKHQsZSxuLHIpe3QuYS5kPWIuTWF0aC5taW4oZSxuKSx0LmEuYT1iLk1hdGgubWF4KGUsciktdC5hLmQsZTxuPyh0LmI9LjUqKGUrbiksdC5nPU1jdCp0LmIrLjkqZSx0LmY9TWN0KnQuYisuOSpuKToodC5iPS41KihlK3IpLHQuZz1NY3QqdC5iKy45KnIsdC5mPU1jdCp0LmIrLjkqZSl9ZnVuY3Rpb24gbWduKCl7UUg9e30sIUFycmF5LmlzQXJyYXkmJihBcnJheS5pc0FycmF5PWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk9PT0iW29iamVjdCBBcnJheV0ifSk7ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKX0hRGF0ZS5ub3cmJihEYXRlLm5vdz10KX1mdW5jdGlvbiBHYWUodCxlKXt2YXIgbixyO3I9dShRKGUsKFRlKCksY3MpKSw5OCksSnQoZSwoYWUoKSxsQ3QpLHIpLG49ZS5lLG4mJihscyhuZXcgVG4obnVsbCxuZXcgX24obi5hLDE2KSksbmV3IGdzKHQpKSxscyhXbyhuZXcgVG4obnVsbCxuZXcgX24obi5iLDE2KSksbmV3IEc1KSxuZXcgcWkodCkpKX1mdW5jdGlvbiB5Z24odCl7dmFyIGUsbixyLHM7aWYoYjgodShRKHQuYiwoVGUoKSxXbCkpLDEwMykpKXJldHVybiAwO2ZvcihlPTAscj1uZXcgUyh0LmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDEwKSxuLms9PShWbigpLE9zKSYmKHM9bi5vLmEsZT1iLk1hdGgubWF4KGUscykpO3JldHVybiBlfWZ1bmN0aW9uIHhnbih0KXtzd2l0Y2godShRKHQsKFRlKCksdXUpKSwxNjMpLmcpe2Nhc2UgMTpKdCh0LHV1LChkaCgpLFRTKSk7YnJlYWs7Y2FzZSAyOkp0KHQsdXUsKGRoKCksankpKTticmVhaztjYXNlIDM6SnQodCx1dSwoZGgoKSxFUykpO2JyZWFrO2Nhc2UgNDpKdCh0LHV1LChkaCgpLGJiKSl9fWZ1bmN0aW9uIGtFKCl7a0U9WixtUz1uZXcgZTkoSjAsMCksV1R0PW5ldyBlOSh5NiwxKSxYVHQ9bmV3IGU5KHg2LDIpLEtUdD1uZXcgZTkoIkxFRlRfUklHSFRfQ09OU1RSQUlOVF9MT0NLSU5HIiwzKSxZVHQ9bmV3IGU5KCJMRUZUX1JJR0hUX0NPTk5FQ1RJT05fTE9DS0lORyIsNCksVVR0PW5ldyBlOShMMWUsNSl9ZnVuY3Rpb24gVWFlKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsaztkPW4uYS8yLG89bi5iLzIscj1iLk1hdGguYWJzKGUuYS10LmEpLHM9Yi5NYXRoLmFicyhlLmItdC5iKSx2PTEsaz0xLHI+ZCYmKHY9ZC9yKSxzPm8mJihrPW8vcyksaD1iLk1hdGgubWluKHYsayksdC5hKz1oKihlLmEtdC5hKSx0LmIrPWgqKGUuYi10LmIpfWZ1bmN0aW9uIGtnbih0LGUsbixyLHMpe3ZhciBvLGg7Zm9yKGg9ITEsbz11KE5lKG4uYiwwKSwzMyk7QnluKHQsZSxvLHIscykmJihoPSEwLGUwbihuLG8pLG4uYi5jLmxlbmd0aCE9MCk7KW89dShOZShuLmIsMCksMzMpO3JldHVybiBuLmIuYy5sZW5ndGg9PTAmJnNJKG4uaixuKSxoJiZucShlLnEpLGh9ZnVuY3Rpb24gRWduKHQsZSl7azQoKTt2YXIgbixyLHMsbztpZihlLmI8MilyZXR1cm4hMTtmb3Iobz1laShlLDApLG49dSh0aShvKSw4KSxyPW47by5iIT1vLmQuYzspe2lmKHM9dSh0aShvKSw4KSxjYXQodCxyLHMpKXJldHVybiEwO3I9c31yZXR1cm4hIWNhdCh0LHIsbil9ZnVuY3Rpb24gJDR0KHQsZSxuLHIpe3ZhciBzLG87cmV0dXJuIG49PTA/KCF0Lm8mJih0Lm89bmV3IF9sKChKYygpLFNiKSxIdix0LDApKSxPaih0Lm8sZSxyKSk6KG89dSh5bigocz11KERuKHQsMTYpLDI2KSxzfHx0LnpoKCkpLG4pLDY2KSxvLk5qKCkuUmoodCxzdSh0KSxuLUpuKHQuemgoKSksZSxyKSl9ZnVuY3Rpb24gSHN0KHQsZSl7dmFyIG47ZSE9dC5zYj8obj1udWxsLHQuc2ImJihuPXUodC5zYiw0OSkuaWgodCwxLHNBLG4pKSxlJiYobj11KGUsNDkpLmdoKHQsMSxzQSxuKSksbj10M3QodCxlLG4pLG4mJm4uRmkoKSk6dC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSw0LGUsZSkpfWZ1bmN0aW9uIFRnbih0LGUpe3ZhciBuLHIscyxvO2lmKGUpcz1IMChlLCJ4Iiksbj1uZXcgdnp0KHQpLFY4KG4uYSwoT24ocykscykpLG89SDAoZSwieSIpLHI9bmV3IG16dCh0KSxVOChyLmEsKE9uKG8pLG8pKTtlbHNlIHRocm93IGl0KG5ldyB1ZCgiQWxsIGVkZ2Ugc2VjdGlvbnMgbmVlZCBhbiBlbmQgcG9pbnQuIikpfWZ1bmN0aW9uIENnbih0LGUpe3ZhciBuLHIscyxvO2lmKGUpcz1IMChlLCJ4Iiksbj1uZXcgcHp0KHQpLEc4KG4uYSwoT24ocykscykpLG89SDAoZSwieSIpLHI9bmV3IGJ6dCh0KSxXOChyLmEsKE9uKG8pLG8pKTtlbHNlIHRocm93IGl0KG5ldyB1ZCgiQWxsIGVkZ2Ugc2VjdGlvbnMgbmVlZCBhIHN0YXJ0IHBvaW50LiIpKX1mdW5jdGlvbiBfZ24odCxlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3Iocj1BcmUodCksbz0wLGQ9ci5sZW5ndGg7bzxkOysrbylGYWUoZSk7Zm9yKHY9ISQxJiZ0LmU/JDE/bnVsbDp0LmQ6bnVsbDt2Oyl7Zm9yKG49QXJlKHYpLHM9MCxoPW4ubGVuZ3RoO3M8aDsrK3MpRmFlKGUpO3Y9ISQxJiZ2LmU/JDE/bnVsbDp2LmQ6bnVsbH19ZnVuY3Rpb24gVm4oKXtWbj1aLE9zPW5ldyBRQygiTk9STUFMIiwwKSx0YT1uZXcgUUMoIkxPTkdfRURHRSIsMSksa3M9bmV3IFFDKCJFWFRFUk5BTF9QT1JUIiwyKSxIYz1uZXcgUUMoIk5PUlRIX1NPVVRIX1BPUlQiLDMpLExsPW5ldyBRQygiTEFCRUwiLDQpLHoxPW5ldyBRQygiQlJFQUtJTkdfUE9JTlQiLDUpfWZ1bmN0aW9uIFNnbih0KXt2YXIgZSxuLHIscztpZihlPSExLFVzKHQsKGFlKCksa1MpKSlmb3Iobj11KFEodCxrUyksODMpLHM9bmV3IFModC5qKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxMSksTTJuKHIpJiYoZXx8KEdwbihOYSh0KSksZT0hMCksRGZuKHUobi54YyhyKSwzMDYpKSl9ZnVuY3Rpb24gQWduKHQsZSxuKXt2YXIgcjt2cihuLCJTZWxmLUxvb3Agcm91dGluZyIsMSkscj1laG4oZSksZGooUShlLCgkJCgpLFdTKSkpLGxzKHd1KFJpKFJpKFdvKG5ldyBUbihudWxsLG5ldyBfbihlLmIsMTYpKSxuZXcgTWspLG5ldyB0eCksbmV3ICRUKSxuZXcgZFgpLG5ldyB0R3QodCxyKSksb3Iobil9ZnVuY3Rpb24gTGduKHQpe3ZhciBlLG4scixzLG8saCxkLHYsaztyZXR1cm4gaz1ENHQodCksbj10LmUsbz1uIT1udWxsLG8mJkU4KGssTUgsdC5lKSxkPXQuayxoPSEhZCxoJiZFOChrLCJ0eXBlIixibnQodC5rKSkscj13TSh0LmopLHM9IXIscyYmKHY9bmV3IEVnLFlmKGssbnV0LHYpLGU9bmV3IGp6dCh2KSx2YSh0LmosZSkpLGt9ZnVuY3Rpb24gTWduKHQpe3ZhciBlLG4scixzO2ZvcihzPXFwKChqbCh0LmdjKCksInNpemUiKSxuZXcgSW0pLDEyMykscj0hMCxuPVJ3KHQpLktjKCk7bi5PYigpOyllPXUobi5QYigpLDQyKSxyfHwocy5hKz1ZYSkscj0hMSxoYyhxcChoYyhzLGUuY2QoKSksNjEpLGUuZGQoKSk7cmV0dXJuKHMuYSs9In0iLHMpLmF9ZnVuY3Rpb24gV2FlKHQsZSl7dmFyIG4scixzO3JldHVybiBlJj02MyxlPDIyPyhuPXQubDw8ZSxyPXQubTw8ZXx0Lmw+PjIyLWUscz10Lmg8PGV8dC5tPj4yMi1lKTplPDQ0PyhuPTAscj10Lmw8PGUtMjIscz10Lm08PGUtMjJ8dC5sPj40NC1lKToobj0wLHI9MCxzPXQubDw8ZS00NCksaXUobiZobCxyJmhsLHMmWjApfWZ1bmN0aW9uIGR5KHQpe2lmKGNFdD09bnVsbCYmKGNFdD1uZXcgUmVnRXhwKCJeXFxzKlsrLV0/KE5hTnxJbmZpbml0eXwoKFxcZCtcXC4/XFxkKil8KFxcLlxcZCspKShbZUVdWystXT9cXGQrKT9bZERmRl0/KVxccyokIikpLCFjRXQudGVzdCh0KSl0aHJvdyBpdChuZXcgbGQoeXYrdCsnIicpKTtyZXR1cm4gcGFyc2VGbG9hdCh0KX1mdW5jdGlvbiBEZ24odCl7dmFyIGUsbixyLHM7Zm9yKGU9bmV3IGhlLG49TnQocGwsbzAsMjUsdC5hLmMubGVuZ3RoLDE2LDEpLGR2dChuLG4ubGVuZ3RoKSxzPW5ldyBTKHQuYSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTIxKSxuW3IuZF18fChlLmNbZS5jLmxlbmd0aF09cixyc2UodCxyLG4pKTtyZXR1cm4gZX1mdW5jdGlvbiBJZ24odCxlKXt2YXIgbixyLHMsbztmb3Iobz1lLmIuaix0LmE9TnQoQ3IsWHIsMjUsby5jLmxlbmd0aCwxNSwxKSxzPTAscj0wO3I8by5jLmxlbmd0aDtyKyspbj0oQW4ocixvLmMubGVuZ3RoKSx1KG8uY1tyXSwxMSkpLG4uZS5jLmxlbmd0aD09MCYmbi5nLmMubGVuZ3RoPT0wP3MrPTE6cys9Myx0LmFbcl09c31mdW5jdGlvbiBkcSgpe2RxPVosUGx0PW5ldyBKQygiQUxXQVlTX1VQIiwwKSxPbHQ9bmV3IEpDKCJBTFdBWVNfRE9XTiIsMSksTmx0PW5ldyBKQygiRElSRUNUSU9OX1VQIiwyKSxGbHQ9bmV3IEpDKCJESVJFQ1RJT05fRE9XTiIsMyksQmx0PW5ldyBKQygiU01BUlRfVVAiLDQpLFVWPW5ldyBKQygiU01BUlRfRE9XTiIsNSl9ZnVuY3Rpb24gT2duKHQsZSl7aWYodDwwfHxlPDApdGhyb3cgaXQobmV3IEZuKCJrIGFuZCBuIG11c3QgYmUgcG9zaXRpdmUiKSk7aWYoZT50KXRocm93IGl0KG5ldyBGbigiayBtdXN0IGJlIHNtYWxsZXIgdGhhbiBuIikpO3JldHVybiBlPT0wfHxlPT10PzE6dD09MD8wOmc0dCh0KS8oZzR0KGUpKmc0dCh0LWUpKX1mdW5jdGlvbiB6NHQodCxlKXt2YXIgbixyLHMsbztmb3Iobj1uZXcgbDJ0KHQpO24uZz09bnVsbCYmIW4uYz9IdnQobik6bi5nPT1udWxsfHxuLmkhPTAmJnUobi5nW24uaS0xXSw0NykuT2IoKTspaWYobz11KHdxKG4pLDU2KSxfdChvLDE2MCkpZm9yKHI9dShvLDE2MCkscz0wO3M8ZS5sZW5ndGg7cysrKWVbc10ub2cocil9ZnVuY3Rpb24gVnN0KHQpe3ZhciBlO3JldHVybiB0LkRiJjY0P1hpdCh0KTooZT1uZXcgX2goWGl0KHQpKSxlLmErPSIgKGhlaWdodDogIiwkMyhlLHQuZiksZS5hKz0iLCB3aWR0aDogIiwkMyhlLHQuZyksZS5hKz0iLCB4OiAiLCQzKGUsdC5pKSxlLmErPSIsIHk6ICIsJDMoZSx0LmopLGUuYSs9IikiLGUuYSl9ZnVuY3Rpb24gUGduKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihlPW5ldyBhMixyPXQscz0wLG89ci5sZW5ndGg7czxvOysrcylpZihuPXJbc10saD1McihuLmNkKCkpLGQ9bTIoZSxoLExyKG4uZGQoKSkpLGQhPW51bGwpdGhyb3cgaXQobmV3IEZuKCJkdXBsaWNhdGUga2V5OiAiK2gpKTt0aGlzLmI9KHduKCksbmV3IHEoZSkpfWZ1bmN0aW9uIEZnbih0KXt2YXIgZSxuLHIscyxvO2lmKHQ9PW51bGwpcmV0dXJuIF91O2ZvcihvPW5ldyBmMihZYSwiWyIsIl0iKSxuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sJDAobyxTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKTtyZXR1cm4gby5hP28uZS5sZW5ndGg9PTA/by5hLmE6by5hLmErKCIiK28uZSk6by5jfWZ1bmN0aW9uIHE0dCgpe3E0dD1aLGI3dD0oWiQoKSxnViksYWJlPW5ldyBtbihKcSxiN3QpLHBlKDEpLHNiZT1uZXcgbW4ocDZ0LHBlKDMwMCkpLHBlKDApLHViZT1uZXcgbW4oYjZ0LHBlKDApKSxsYmU9bmV3IG1uKHFvdCxFZCksb2JlPW5ldyBtbihIb3QsNSksaGJlPWdWLGNiZT10bHR9ZnVuY3Rpb24gWWFlKHQsZSl7dmFyIG4scixzLG8saDtmb3Iocz1lPT0xP2NsdDpvbHQscj1zLmEuZWMoKS5LYygpO3IuT2IoKTspZm9yKG49dShyLlBiKCksMTAzKSxoPXUoQWkodC5mLmMsbiksMjEpLktjKCk7aC5PYigpOylvPXUoaC5QYigpLDQ2KSxsZSh0LmIuYix1KG8uYiw4MSkpLGxlKHQuYi5hLHUoby5iLDgxKS5kKX1mdW5jdGlvbiBOZ24odCxlKXt2YXIgbjtpZihlIT1udWxsJiYhdC5jLllqKCkud2ooZSkpdGhyb3cgbj1fdChlLDU2KT91KGUsNTYpLlRnKCkuemI6SXAob2woZSkpLGl0KG5ldyBpOChsYit0LmMubmUoKSsiJ3MgdHlwZSAnIit0LmMuWWooKS5uZSgpKyInIGRvZXMgbm90IHBlcm1pdCBhIHZhbHVlIG9mIHR5cGUgJyIrbisiJyIpKX1mdW5jdGlvbiBCZ24odCxlLG4pe3ZhciByLHM7Zm9yKHM9bmV3IGRhKHQuYiwwKTtzLmI8cy5kLmdjKCk7KXI9KFpuKHMuYjxzLmQuZ2MoKSksdShzLmQuWGIocy5jPXMuYisrKSw3MCkpLFZ0KFEociwoYWUoKSxjQ3QpKSk9PT1WdChlKSYmKFk0dChyLm4sTmEodC5jLmkpLG4pLENsKHMpLGxlKGUuYixyKSl9ZnVuY3Rpb24gUmduKHQsZSl7aWYoZS5hKXN3aXRjaCh1KFEoZS5iLChhZSgpLGxDdCkpLDk4KS5nKXtjYXNlIDA6Y2FzZSAxOnMwbihlKTtjYXNlIDI6bHMobmV3IFRuKG51bGwsbmV3IF9uKGUuZCwxNikpLG5ldyB5TiksamJuKHQuYSxlKX1lbHNlIGxzKG5ldyBUbihudWxsLG5ldyBfbihlLmQsMTYpKSxuZXcgeU4pfWZ1bmN0aW9uIEthZSh0KXt2YXIgZSxuO3JldHVybiBuPWIuTWF0aC5zcXJ0KCh0Lms9PW51bGwmJih0Lms9Znl0KHQsbmV3IHVRKSksWHQodC5rKS8odC5iKih0Lmc9PW51bGwmJih0Lmc9X25lKHQsbmV3IEdOKSksWHQodC5nKSkpKSksZT1BcihUdShiLk1hdGgucm91bmQobikpKSxlPWIuTWF0aC5taW4oZSx0LmYpLGV9ZnVuY3Rpb24gTWMoKXtqdSgpLGN3dC5jYWxsKHRoaXMpLHRoaXMuaj0odmUoKSxabyksdGhpcy5hPW5ldyBDYSxuZXcgbmV0LHRoaXMuZj0oamwoMixreSksbmV3IFhjKDIpKSx0aGlzLmU9KGpsKDQsa3kpLG5ldyBYYyg0KSksdGhpcy5nPShqbCg0LGt5KSxuZXcgWGMoNCkpLHRoaXMuYj1uZXcgY0d0KHRoaXMuZSx0aGlzLmcpfWZ1bmN0aW9uIGpnbih0LGUpe3ZhciBuLHI7cmV0dXJuIShqZShSZShRKGUsKGFlKCkscTEpKSkpfHwocj1lLmMuaSx0PT0oZGgoKSxFUykmJnIuaz09KFZuKCksTGwpKXx8KG49dShRKHIsKFRlKCksdXUpKSwxNjMpLG49PWJiKSl9ZnVuY3Rpb24gJGduKHQsZSl7dmFyIG4scjtyZXR1cm4hKGplKFJlKFEoZSwoYWUoKSxxMSkpKSl8fChyPWUuZC5pLHQ9PShkaCgpLFRTKSYmci5rPT0oVm4oKSxMbCkpfHwobj11KFEociwoVGUoKSx1dSkpLDE2Myksbj09ankpKX1mdW5jdGlvbiB6Z24odCxlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3IoaD10LmQsdj10Lm8sZD1uZXcgYWgoLWguYiwtaC5kLGguYit2LmEraC5jLGguZCt2LmIraC5hKSxyPWUscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sbiYmZ18oZCxuLmkpO2guYj0tZC5jLGguZD0tZC5kLGguYz1kLmItaC5iLXYuYSxoLmE9ZC5hLWguZC12LmJ9ZnVuY3Rpb24gdUkoKXt1ST1aLHJTdD1uZXcgSU0oIkNFTlRFUl9ESVNUQU5DRSIsMCksbmZ0PW5ldyBJTSgiQ0lSQ0xFX1VOREVSTEFQIiwxKSxzU3Q9bmV3IElNKCJSRUNUQU5HTEVfVU5ERVJMQVAiLDIpLHJmdD1uZXcgSU0oIklOVkVSVEVEX09WRVJMQVAiLDMpLGlTdD1uZXcgSU0oIk1JTklNVU1fUk9PVF9ESVNUQU5DRSIsNCl9ZnVuY3Rpb24gcWduKHQpe3E1dCgpO3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gbnVsbDtmb3Iocj10Lmxlbmd0aCxzPXIqMixlPU50KHhoLHlkLDI1LHMsMTUsMSksbj0wO248cjtuKyspbz10W25dLG88MCYmKG8rPTI1NiksZVtuKjJdPXlVW28+PjRdLGVbbioyKzFdPXlVW28mMTVdO3JldHVybiBNaChlLDAsZS5sZW5ndGgpfWZ1bmN0aW9uIEhnbih0KXtjJCgpO3ZhciBlLG4scjtzd2l0Y2gocj10LmMubGVuZ3RoLHIpe2Nhc2UgMDpyZXR1cm4gQWdlO2Nhc2UgMTpyZXR1cm4gZT11KElvZShuZXcgUyh0KSksNDIpLGRlbihlLmNkKCksZS5kZCgpKTtkZWZhdWx0OnJldHVybiBuPXUoUDEodCxOdChQMixIcSw0Mix0LmMubGVuZ3RoLDAsMSkpLDE2NSksbmV3IHVldChuKX19ZnVuY3Rpb24gVmduKHQpe3ZhciBlLG4scixzLG8saDtmb3IoZT1uZXcgQjMsbj1uZXcgQjMsVXAoZSx0KSxVcChuLHQpO24uYiE9bi5jOylmb3Iocz11KEh4KG4pLDM3KSxoPW5ldyBTKHMuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTApLG8uZSYmKHI9by5lLFVwKGUsciksVXAobixyKSk7cmV0dXJuIGV9ZnVuY3Rpb24gR2codCxlKXtzd2l0Y2goZS5nKXtjYXNlIDE6cmV0dXJuICR4KHQuaiwoanUoKSwkN3QpKTtjYXNlIDI6cmV0dXJuICR4KHQuaiwoanUoKSxSN3QpKTtjYXNlIDM6cmV0dXJuICR4KHQuaiwoanUoKSxxN3QpKTtjYXNlIDQ6cmV0dXJuICR4KHQuaiwoanUoKSxIN3QpKTtkZWZhdWx0OnJldHVybiB3bigpLHduKCksaW99fWZ1bmN0aW9uIEdnbih0LGUpe3ZhciBuLHIscztuPWNlbihlLHQuZSkscj11KHRyKHQuZy5mLG4pLDE5KS5hLHM9dC5hLmMubGVuZ3RoLTEsdC5hLmMubGVuZ3RoIT0wJiZ1KE5lKHQuYSxzKSwyODcpLmM9PXI/KCsrdShOZSh0LmEscyksMjg3KS5hLCsrdShOZSh0LmEscyksMjg3KS5iKTpsZSh0LmEsbmV3IEFXdChyKSl9ZnVuY3Rpb24gVWduKHQsZSxuKXt2YXIgcixzO3JldHVybiByPVp2bih0LGUsbiksciE9MD9yOlVzKGUsKGFlKCksVGMpKSYmVXMobixUYyk/KHM9cHUodShRKGUsVGMpLDE5KS5hLHUoUShuLFRjKSwxOSkuYSksczwwP2tJKHQsZSxuKTpzPjAmJmtJKHQsbixlKSxzKTpfYm4odCxlLG4pfWZ1bmN0aW9uIFhhZSh0LGUsbil7dmFyIHIscyxvLGg7aWYoZS5iIT0wKXtmb3Iocj1uZXcgWmksaD1laShlLDApO2guYiE9aC5kLmM7KW89dSh0aShoKSw4NiksVWEocixFeXQobykpLHM9by5lLHMuYT11KFEobywoZmMoKSwkaHQpKSwxOSkuYSxzLmI9dShRKG8sb190KSwxOSkuYTtYYWUodCxyLFJjKG4sci5iL3QuYXwwKSl9fWZ1bmN0aW9uIFFhZSh0LGUpe3ZhciBuLHIscyxvLGg7aWYodC5lPD1lfHxaaW4odCx0LmcsZSkpcmV0dXJuIHQuZztmb3Iobz10LnIscj10LmcsaD10LnIscz0oby1yKS8yK3I7cisxPG87KW49X18odCxzLCExKSxuLmI8PXMmJm4uYTw9ZT8oaD1zLG89cyk6cj1zLHM9KG8tcikvMityO3JldHVybiBofWZ1bmN0aW9uIFdnbih0LGUsbil7dmFyIHI7cj1idWUodCxlLCEwKSx2cihuLCJSZWN1cnNpdmUgR3JhcGggTGF5b3V0IixyKSx6NHQoZSxsdChjdChDU3QsMSksRGUsNTI3LDAsW25ldyB0TV0pKSxvMihlLCh1aSgpLE83KSl8fHo0dChlLGx0KGN0KENTdCwxKSxEZSw1MjcsMCxbbmV3IERaXSkpLER4dCh0LGUsbnVsbCxuKSxvcihuKX1mdW5jdGlvbiBvcih0KXt2YXIgZTtpZih0LnA9PW51bGwpdGhyb3cgaXQobmV3IE5vKCJUaGUgdGFzayBoYXMgbm90IGJlZ3VuIHlldC4iKSk7dC5ifHwodC5rJiYoZT0oR2QoKSxfYShUdShEYXRlLm5vdygpKSxXZykpLHQucT1ZdyhKcChlLHQubykpKjFlLTkpLHQuYzx0LnImJnBpdCh0LHQuci10LmMpLHQuYj0hMCl9ZnVuY3Rpb24gbEkodCl7dmFyIGUsbixyO2ZvcihyPW5ldyBQdSxyaShyLG5ldyAkZSh0LmosdC5rKSksbj1uZXcgbnIoKCF0LmEmJih0LmE9bmV3IEFzKEdoLHQsNSkpLHQuYSkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSw0NjkpLHJpKHIsbmV3ICRlKGUuYSxlLmIpKTtyZXR1cm4gcmkocixuZXcgJGUodC5iLHQuYykpLHJ9ZnVuY3Rpb24gWWduKHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDO2lmKHMpZm9yKHY9cy5hLmxlbmd0aCxvPW5ldyBlMih2KSxDPShvLmItby5hKSpvLmM8MD8oRnAoKSxJYik6bmV3IGpwKG8pO0MuT2IoKTspaz11KEMuUGIoKSwxOSksZD1QOChzLGsuYSksaD1uZXcgR1h0KHQsZSxuLHIpLGl5bihoLmEsaC5iLGguYyxoLmQsZCl9ZnVuY3Rpb24gSDR0KHQsZSl7dmFyIG47aWYoVnQodCk9PT1WdChlKSlyZXR1cm4hMDtpZihfdChlLDIxKSl7bj11KGUsMjEpO3RyeXtyZXR1cm4gdC5nYygpPT1uLmdjKCkmJnQuSWMobil9Y2F0Y2gocil7aWYocj1XaShyKSxfdChyLDE3Myl8fF90KHIsMjA1KSlyZXR1cm4hMTt0aHJvdyBpdChyKX19cmV0dXJuITF9ZnVuY3Rpb24gVjR0KHQsZSl7dmFyIG47bGUodC5kLGUpLG49ZS5yZigpLHQuYz8odC5lLmE9Yi5NYXRoLm1heCh0LmUuYSxuLmEpLHQuZS5iKz1uLmIsdC5kLmMubGVuZ3RoPjEmJih0LmUuYis9dC5hKSk6KHQuZS5hKz1uLmEsdC5lLmI9Yi5NYXRoLm1heCh0LmUuYixuLmIpLHQuZC5jLmxlbmd0aD4xJiYodC5lLmErPXQuYSkpfWZ1bmN0aW9uIEtnbih0KXt2YXIgZSxuLHIscztzd2l0Y2gocz10LmksZT1zLmIscj1zLmosbj1zLmcscy5hLmcpe2Nhc2UgMDpuLmE9KHQuZy5iLm8uYS1yLmEpLzI7YnJlYWs7Y2FzZSAxOm4uYT1lLmQubi5hK2UuZC5hLmE7YnJlYWs7Y2FzZSAyOm4uYT1lLmQubi5hK2UuZC5hLmEtci5hO2JyZWFrO2Nhc2UgMzpuLmI9ZS5kLm4uYitlLmQuYS5ifX1mdW5jdGlvbiBaYWUodCxlLG4scixzKXtpZihyPGV8fHM8bil0aHJvdyBpdChuZXcgRm4oIlRoZSBoaWdoeCBtdXN0IGJlIGJpZ2dlciB0aGVuIGxvd3ggYW5kIHRoZSBoaWdoeSBtdXN0IGJlIGJpZ2dlciB0aGVuIGxvd3kiKSk7cmV0dXJuIHQuYTxlP3QuYT1lOnQuYT5yJiYodC5hPXIpLHQuYjxuP3QuYj1uOnQuYj5zJiYodC5iPXMpLHR9ZnVuY3Rpb24gWGduKHQpe2lmKF90KHQsMTQ5KSlyZXR1cm4gQ3duKHUodCwxNDkpKTtpZihfdCh0LDIyOSkpcmV0dXJuIGtobih1KHQsMjI5KSk7aWYoX3QodCwyMykpcmV0dXJuIExnbih1KHQsMjMpKTt0aHJvdyBpdChuZXcgRm4oTDh0K2ViKG5ldyB5bChsdChjdChRbiwxKSxEZSwxLDUsW3RdKSkpKSl9ZnVuY3Rpb24gUWduKHQsZSxuLHIscyl7dmFyIG8saCxkO2ZvcihvPSEwLGg9MDtoPHI7aCsrKW89byZuW2hdPT0wO2lmKHM9PTApRGMobixyLHQsMCxlKSxoPWU7ZWxzZXtmb3IoZD0zMi1zLG89byZuW2hdPDxkPT0wLGg9MDtoPGUtMTtoKyspdFtoXT1uW2grcl0+Pj5zfG5baCtyKzFdPDxkO3RbaF09bltoK3JdPj4+cywrK2h9cmV0dXJuIG99ZnVuY3Rpb24gRzR0KHQsZSxuLHIpe3ZhciBzLG8saDtpZihlLms9PShWbigpLHRhKSl7Zm9yKG89bmV3IGFyKGxyKGpvKGUpLmEuS2MoKSxuZXcgeikpO3pyKG8pOylpZihzPXUoTXIobyksMTcpLGg9cy5jLmkuayxoPT10YSYmdC5jLmFbcy5jLmkuYy5wXT09ciYmdC5jLmFbZS5jLnBdPT1uKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIFpnbih0LGUpe3ZhciBuLHIscyxvO3JldHVybiBlJj02MyxuPXQuaCZaMCxlPDIyPyhvPW4+Pj5lLHM9dC5tPj5lfG48PDIyLWUscj10Lmw+PmV8dC5tPDwyMi1lKTplPDQ0PyhvPTAscz1uPj4+ZS0yMixyPXQubT4+ZS0yMnx0Lmg8PDQ0LWUpOihvPTAscz0wLHI9bj4+PmUtNDQpLGl1KHImaGwscyZobCxvJlowKX1mdW5jdGlvbiBKYWUodCxlLG4scil7dmFyIHM7dGhpcy5iPXIsdGhpcy5lPXQ9PShldigpLEZTKSxzPWVbbl0sdGhpcy5kPXQyKHBsLFtlZSxvMF0sWzE3NywyNV0sMTYsW3MubGVuZ3RoLHMubGVuZ3RoXSwyKSx0aGlzLmE9dDIoQ3IsW2VlLFhyXSxbNDgsMjVdLDE1LFtzLmxlbmd0aCxzLmxlbmd0aF0sMiksdGhpcy5jPW5ldyBTNHQoZSxuKX1mdW5jdGlvbiBKZ24odCl7dmFyIGUsbixyO2Zvcih0Lms9bmV3IFd2dCgodmUoKSxsdChjdChYYSwxKSx4Yyw2MSwwLFtabyxQbixIbixtcixCbl0pKS5sZW5ndGgsdC5qLmMubGVuZ3RoKSxyPW5ldyBTKHQuaik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTEzKSxlPW4uZC5qLGxuKHQuayxlLG4pO3QuZT1od24ocXgodC5rKSl9ZnVuY3Rpb24gdG9lKHQsZSl7dmFyIG4scixzO0ZzKHQuZCxlKSxuPW5ldyBZVCxraSh0LmMsZSxuKSxuLmY9SGl0KGUuYyksbi5hPUhpdChlLmQpLG4uZD0obV8oKSxzPWUuYy5pLmsscz09KFZuKCksT3MpfHxzPT16MSksbi5lPShyPWUuZC5pLmsscj09T3N8fHI9PXoxKSxuLmI9ZS5jLmo9PSh2ZSgpLEJuKSxuLmM9ZS5kLmo9PUhufWZ1bmN0aW9uIHRwbih0KXt2YXIgZSxuLHIscyxvO2ZvcihvPXdpLHM9d2kscj1uZXcgUyh1NCh0KSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMjEzKSxlPW4uZS5lLW4uZC5lLG4uZT09dCYmZTxzP3M9ZTplPG8mJihvPWUpO3JldHVybiBzPT13aSYmKHM9LTEpLG89PXdpJiYobz0tMSksbmV3IGZhKHBlKHMpLHBlKG8pKX1mdW5jdGlvbiBlcG4odCxlKXt2YXIgbixyLHM7cmV0dXJuIHM9VkUscj0oY18oKSxiTykscz1iLk1hdGguYWJzKHQuYiksbj1iLk1hdGguYWJzKGUuZi10LmIpLG48cyYmKHM9bixyPWhWKSxuPWIuTWF0aC5hYnModC5hKSxuPHMmJihzPW4scj13Tyksbj1iLk1hdGguYWJzKGUuZy10LmEpLG48cyYmKHM9bixyPWxWKSxyfWZ1bmN0aW9uIG5wbih0LGUpe3ZhciBuLHIscyxvO2ZvcihuPWUuYS5vLmEsbz1uZXcgUWQoTmEoZS5hKS5iLGUuYyxlLmYrMSkscz1uZXcgbXgobyk7cy5iPHMuZC5nYygpOylpZihyPShabihzLmI8cy5kLmdjKCkpLHUocy5kLlhiKHMuYz1zLmIrKyksMjkpKSxyLmMuYT49bilyZXR1cm4gRUUodCxlLHIucCksITA7cmV0dXJuITF9ZnVuY3Rpb24gZW9lKHQpe3ZhciBlO3JldHVybiB0LkRiJjY0P1ZzdCh0KTooZT1uZXcgT2wodjh0KSwhdC5hfHxHcihHcigoZS5hKz0nICInLGUpLHQuYSksJyInKSxHcihBdyhHcihBdyhHcihBdyhHcihBdygoZS5hKz0iICgiLGUpLHQuaSksIiwiKSx0LmopLCIgfCAiKSx0LmcpLCIsIiksdC5mKSwiKSIpLGUuYSl9ZnVuY3Rpb24gbm9lKHQsZSxuKXt2YXIgcixzLG8saCxkO2ZvcihkPW91KHQuZS5UZygpLGUpLHM9dSh0LmcsMTE5KSxyPTAsaD0wO2g8dC5pOysraClpZihvPXNbaF0sZC5ybChvLmFrKCkpKXtpZihyPT1uKXJldHVybiBieSh0LGgpLHRvKCksdShlLDY2KS5PaigpP286by5kZCgpOysrcn10aHJvdyBpdChuZXcgeW8oSl8rbitEMityKSl9ZnVuY3Rpb24gcm9lKHQpe3ZhciBlLG4scjtpZihlPXQuYyxlPT0yfHxlPT03fHxlPT0xKXJldHVybiBnaSgpLGdpKCkscEE7Zm9yKHI9SXh0KHQpLG49bnVsbDsoZT10LmMpIT0yJiZlIT03JiZlIT0xOylufHwobj0oZ2koKSxnaSgpLG5ldyBkOSgxKSksRTIobixyKSxyPW4pLEUyKG4sSXh0KHQpKTtyZXR1cm4gcn1mdW5jdGlvbiBycG4odCxlLG4pe3JldHVybiB0PDB8fHQ+bj9KNHQodCxuLCJzdGFydCBpbmRleCIpOmU8MHx8ZT5uP0o0dChlLG4sImVuZCBpbmRleCIpOnlfKCJlbmQgaW5kZXggKCVzKSBtdXN0IG5vdCBiZSBsZXNzIHRoYW4gc3RhcnQgaW5kZXggKCVzKSIsbHQoY3QoUW4sMSksRGUsMSw1LFtwZShlKSxwZSh0KV0pKX1mdW5jdGlvbiBpb2UodCxlKXt2YXIgbixyLHMsbztmb3Iocj0wLHM9dC5sZW5ndGg7cjxzO3IrKyl7bz10W3JdO3RyeXtvWzFdP29bMF0uam0oKSYmKGU9emVuKGUsbykpOm9bMF0uam0oKX1jYXRjaChoKXtpZihoPVdpKGgpLF90KGgsNzgpKW49aCxBUigpLElybihfdChuLDQ3Nyk/dShuLDQ3NykuYWUoKTpuKTtlbHNlIHRocm93IGl0KGgpfX1yZXR1cm4gZX1mdW5jdGlvbiBFRSh0LGUsbil7dmFyIHIscyxvO2ZvcihuIT1lLmMrZS5iLmdjKCkmJmczbihlLmEsUWNuKGUsbi1lLmMpKSxvPWUuYS5jLnAsdC5hW29dPWIuTWF0aC5tYXgodC5hW29dLGUuYS5vLmEpLHM9dShRKGUuYSwoYWUoKSxMTykpLDE1KS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSw3MCksSnQocixibHQsKE5uKCksITApKX1mdW5jdGlvbiBpcG4odCxlKXt2YXIgbixyLHM7cz1Pd24oZSksSnQoZSwoYWUoKSxXbHQpLHMpLHMmJihyPXdpLExvKHQuZixzKSYmKHI9dShlYyhMbyh0LmYscykpLDE5KS5hKSxuPXUoTmUoZS5nLDApLDE3KSxqZShSZShRKG4scTEpKSl8fGtpKHQscyxwZShiLk1hdGgubWluKHUoUShuLFRjKSwxOSkuYSxyKSkpKX1mdW5jdGlvbiBzb2UodCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKGUucD0tMSxkPW92KGUsKHNvKCksbnUpKS5LYygpO2QuT2IoKTspZm9yKGg9dShkLlBiKCksMTEpLHM9bmV3IFMoaC5nKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxNyksbz1yLmQuaSxlIT1vJiYoby5wPDA/bi5GYyhyKTpvLnA+MCYmc29lKHQsbyxuKSk7ZS5wPTB9ZnVuY3Rpb24gWGUodCl7dmFyIGU7dGhpcy5jPW5ldyBaaSx0aGlzLmY9dC5lLHRoaXMuZT10LmQsdGhpcy5pPXQuZyx0aGlzLmQ9dC5jLHRoaXMuYj10LmIsdGhpcy5rPXQuaix0aGlzLmE9dC5hLHQuaT90aGlzLmo9dC5pOnRoaXMuaj0oZT11KFZmKGlwKSw5KSxuZXcgc2goZSx1KGZmKGUsZS5sZW5ndGgpLDkpLDApKSx0aGlzLmc9dC5mfWZ1bmN0aW9uIHNwbih0KXt2YXIgZSxuLHIscztmb3IoZT1xcChHcihuZXcgT2woIlByZWRpY2F0ZXMuIiksImFuZCIpLDQwKSxuPSEwLHM9bmV3IG14KHQpO3MuYjxzLmQuZ2MoKTspcj0oWm4ocy5iPHMuZC5nYygpKSxzLmQuWGIocy5jPXMuYisrKSksbnx8KGUuYSs9IiwiKSxlLmErPSIiK3Isbj0hMTtyZXR1cm4oZS5hKz0iKSIsZSkuYX1mdW5jdGlvbiBhb2UodCxlLG4pe3ZhciByLHMsbztpZighKG48PWUrMikpZm9yKHM9KG4tZSkvMnwwLHI9MDtyPHM7KytyKW89KEFuKGUrcix0LmMubGVuZ3RoKSx1KHQuY1tlK3JdLDExKSksY2godCxlK3IsKEFuKG4tci0xLHQuYy5sZW5ndGgpLHUodC5jW24tci0xXSwxMSkpKSxBbihuLXItMSx0LmMubGVuZ3RoKSx0LmNbbi1yLTFdPW99ZnVuY3Rpb24gYXBuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDO289dC5kLnAsZD1vLmUsdj1vLnIsdC5nPW5ldyBZTSh2KSxoPXQuZC5vLmMucCxyPWg+MD9kW2gtMV06TnQobDAsWWcsMTAsMCwwLDEpLHM9ZFtoXSxrPWg8ZC5sZW5ndGgtMT9kW2grMV06TnQobDAsWWcsMTAsMCwwLDEpLEM9ZT09bi0xLEM/Q3J0KHQuZyxzLGspOkNydCh0LmcscixzKX1mdW5jdGlvbiBvb2UodCl7dmFyIGU7dGhpcy5qPW5ldyBoZSx0aGlzLmY9bmV3IEhzLHRoaXMuYj0oZT11KFZmKFhhKSw5KSxuZXcgc2goZSx1KGZmKGUsZS5sZW5ndGgpLDkpLDApKSx0aGlzLmQ9TnQoQ3IsWHIsMjUsKHZlKCksbHQoY3QoWGEsMSkseGMsNjEsMCxbWm8sUG4sSG4sbXIsQm5dKSkubGVuZ3RoLDE1LDEpLHRoaXMuZz10fWZ1bmN0aW9uIGNvZSh0LGUpe3ZhciBuLHIscztpZihlLmMubGVuZ3RoIT0wKXtmb3Iobj1CYWUodCxlKSxzPSExOyFuOylicSh0LGUsITApLHM9ITAsbj1CYWUodCxlKTtzJiZicSh0LGUsITEpLHI9Q2l0KGUpLHQuYiYmdC5iLmxnKHIpLHQuYT1HcmUodCwoQW4oMCxlLmMubGVuZ3RoKSx1KGUuY1swXSwzMykpKSxjb2UodCxyKX19ZnVuY3Rpb24gR3N0KHQsZSl7dmFyIG4scixzO2lmKHI9eW4odC5UZygpLGUpLG49ZS10LkFoKCksbjwwKWlmKHIpaWYoci5JaigpKXM9dC5ZZyhyKSxzPj0wP3QuQmgocyk6aTV0KHQscik7ZWxzZSB0aHJvdyBpdChuZXcgRm4obGIrci5uZSgpK1hfKSk7ZWxzZSB0aHJvdyBpdChuZXcgRm4oQmRlK2UrUmRlKSk7ZWxzZSBmaCh0LG4scil9ZnVuY3Rpb24gVTR0KHQpe3ZhciBlLG47aWYobj1udWxsLGU9ITEsX3QodCwyMDQpJiYoZT0hMCxuPXUodCwyMDQpLmEpLGV8fF90KHQsMjU4KSYmKGU9ITAsbj0iIit1KHQsMjU4KS5hKSxlfHxfdCh0LDQ4MykmJihlPSEwLG49IiIrdSh0LDQ4MykuYSksIWUpdGhyb3cgaXQobmV3IGZldChBOHQpKTtyZXR1cm4gbn1mdW5jdGlvbiB1b2UodCxlKXt2YXIgbixyO2lmKHQuZil7Zm9yKDtlLk9iKCk7KWlmKG49dShlLlBiKCksNzIpLHI9bi5haygpLF90KHIsOTkpJiZ1KHIsMTgpLkJiJmRjJiYoIXQuZXx8ci5HaigpIT1qN3x8ci5haigpIT0wKSYmbi5kZCgpIT1udWxsKXJldHVybiBlLlViKCksITA7cmV0dXJuITF9ZWxzZSByZXR1cm4gZS5PYigpfWZ1bmN0aW9uIGxvZSh0LGUpe3ZhciBuLHI7aWYodC5mKXtmb3IoO2UuU2IoKTspaWYobj11KGUuVWIoKSw3Mikscj1uLmFrKCksX3Qociw5OSkmJnUociwxOCkuQmImZGMmJighdC5lfHxyLkdqKCkhPWo3fHxyLmFqKCkhPTApJiZuLmRkKCkhPW51bGwpcmV0dXJuIGUuUGIoKSwhMDtyZXR1cm4hMX1lbHNlIHJldHVybiBlLlNiKCl9ZnVuY3Rpb24gVzR0KHQsZSxuKXt2YXIgcixzLG8saCxkLHY7Zm9yKHY9b3UodC5lLlRnKCksZSkscj0wLGQ9dC5pLHM9dSh0LmcsMTE5KSxoPTA7aDx0Lmk7KytoKWlmKG89c1toXSx2LnJsKG8uYWsoKSkpe2lmKG49PXIpcmV0dXJuIGg7KytyLGQ9aCsxfWlmKG49PXIpcmV0dXJuIGQ7dGhyb3cgaXQobmV3IHlvKEpfK24rRDIrcikpfWZ1bmN0aW9uIG9wbih0LGUpe3ZhciBuLHIscyxvO2lmKHQuZi5jLmxlbmd0aD09MClyZXR1cm4gbnVsbDtmb3Iobz1uZXcgRngscj1uZXcgUyh0LmYpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDcwKSxzPW4ubyxvLmI9Yi5NYXRoLm1heChvLmIscy5hKSxvLmErPXMuYjtyZXR1cm4gby5hKz0odC5mLmMubGVuZ3RoLTEpKmUsb31mdW5jdGlvbiBjcG4odCxlLG4pe3ZhciByLHMsbztmb3Iocz1uZXcgYXIobHIoVTAobikuYS5LYygpLG5ldyB6KSk7enIocyk7KXI9dShNcihzKSwxNyksIUdhKHIpJiYhKCFHYShyKSYmci5jLmkuYz09ci5kLmkuYykmJihvPUhjZSh0LHIsbixuZXcgQ3F0KSxvLmMubGVuZ3RoPjEmJihlLmNbZS5jLmxlbmd0aF09bykpfWZ1bmN0aW9uIHVwbih0KXt2YXIgZSxuLHIscztmb3Iobj1uZXcgWmksVWEobix0Lm8pLHI9bmV3IHFwdDtuLmIhPTA7KWU9dShuLmI9PTA/bnVsbDooWm4obi5iIT0wKSxsaChuLG4uYS5hKSksNTA4KSxzPUhoZSh0LGUsITApLHMmJmxlKHIuYSxlKTtmb3IoO3IuYS5jLmxlbmd0aCE9MDspZT11KE5yZShyKSw1MDgpLEhoZSh0LGUsITEpfWZ1bmN0aW9uIFVnKCl7VWc9WixfU3Q9bmV3IE94KE5fLDApLExhPW5ldyBPeCgiQk9PTEVBTiIsMSksZ2M9bmV3IE94KCJJTlQiLDIpLEk3PW5ldyBPeCgiU1RSSU5HIiwzKSxPbz1uZXcgT3goIkRPVUJMRSIsNCksdXM9bmV3IE94KCJFTlVNIiw1KSxVNj1uZXcgT3goIkVOVU1TRVQiLDYpLFYxPW5ldyBPeCgiT0JKRUNUIiw3KX1mdW5jdGlvbiBnXyh0LGUpe3ZhciBuLHIscyxvLGg7cj1iLk1hdGgubWluKHQuYyxlLmMpLG89Yi5NYXRoLm1pbih0LmQsZS5kKSxzPWIuTWF0aC5tYXgodC5jK3QuYixlLmMrZS5iKSxoPWIuTWF0aC5tYXgodC5kK3QuYSxlLmQrZS5hKSxzPHImJihuPXIscj1zLHM9biksaDxvJiYobj1vLG89aCxoPW4pLGVLdCh0LHIsbyxzLXIsaC1vKX1mdW5jdGlvbiAkdSgpeyR1PVosbUx0PWx0KGN0KEFlLDEpLGVlLDIsNixbSDh0LGlPLHFILHRnZSxISCxkdXQsTUhdKSx2THQ9bHQoY3QoQWUsMSksZWUsMiw2LFtIOHQsImVtcHR5IixpTyxyTywiZWxlbWVudE9ubHkiXSkseUx0PWx0KGN0KEFlLDEpLGVlLDIsNixbSDh0LCJwcmVzZXJ2ZSIsInJlcGxhY2UiLGUxXSkseWE9bmV3IEpZdH1mdW5jdGlvbiBZNHQodCxlLG4pe3ZhciByLHMsbztpZihlIT1uKXtyPWU7ZG8gTGkodCxyLmMpLHM9ci5lLHMmJihvPXIuZCxqbSh0LG8uYixvLmQpLExpKHQscy5uKSxyPU5hKHMpKTt3aGlsZShzKTtyPW47ZG8gaWEodCxyLmMpLHM9ci5lLHMmJihvPXIuZCxxTSh0LG8uYixvLmQpLGlhKHQscy5uKSxyPU5hKHMpKTt3aGlsZShzKX19ZnVuY3Rpb24gVXN0KHQsZSxuLHIpe3ZhciBzLG8saCxkLHY7aWYoci5mLmMrci5nLmM9PTApZm9yKGg9dC5hW3QuY10sZD0wLHY9aC5sZW5ndGg7ZDx2OysrZClvPWhbZF0sa2kocixvLG5ldyBEbmUodCxvLG4pKTtyZXR1cm4gcz11KGVjKExvKHIuZixlKSksNjYzKSxzLmI9MCxzLmM9cy5mLHMuYz09MHx8bFIodShOZShzLmEscy5iKSwyODcpKSxzfWZ1bmN0aW9uIGg2KCl7aDY9WixwNz1uZXcgWkMoIk1FRElBTl9MQVlFUiIsMCksYlM9bmV3IFpDKCJUQUlMX0xBWUVSIiwxKSxnNz1uZXcgWkMoIkhFQURfTEFZRVIiLDIpLE55PW5ldyBaQygiU1BBQ0VfRUZGSUNJRU5UX0xBWUVSIiwzKSxHND1uZXcgWkMoIldJREVTVF9MQVlFUiIsNCksVjQ9bmV3IFpDKCJDRU5URVJfTEFZRVIiLDUpfWZ1bmN0aW9uIGxwbih0KXtzd2l0Y2godC5nKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpyZXR1cm4gdmUoKSxQbjtjYXNlIDM6Y2FzZSA0OmNhc2UgNTpyZXR1cm4gdmUoKSxtcjtjYXNlIDY6Y2FzZSA3OmNhc2UgODpyZXR1cm4gdmUoKSxCbjtjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOnJldHVybiB2ZSgpLEhuO2RlZmF1bHQ6cmV0dXJuIHZlKCksWm99fWZ1bmN0aW9uIGhwbih0LGUpe3ZhciBuO3JldHVybiB0LmMubGVuZ3RoPT0wPyExOihuPUFpZSgoQW4oMCx0LmMubGVuZ3RoKSx1KHQuY1swXSwxNykpLmMuaSksRmwoKSxuPT0oY3koKSxuNSl8fG49PWU1PyEwOk44KHd1KG5ldyBUbihudWxsLG5ldyBfbih0LDE2KSksbmV3IHhRKSxuZXcgJCR0KGUpKSl9ZnVuY3Rpb24gSzR0KHQsZSxuKXt2YXIgcixzLG87aWYoIXQuYltlLmddKXtmb3IodC5iW2UuZ109ITAscj1uLCFyJiYocj1uZXcgaiQpLHJpKHIuYixlKSxvPXQuYVtlLmddLktjKCk7by5PYigpOylzPXUoby5QYigpLDE4OCkscy5iIT1lJiZLNHQodCxzLmIscikscy5jIT1lJiZLNHQodCxzLmMscikscmkoci5hLHMpO3JldHVybiByfXJldHVybiBudWxsfWZ1bmN0aW9uIHBfKCl7cF89WixMRz1uZXcgcjkoIlJPT1RfUFJPQyIsMCksT2h0PW5ldyByOSgiRkFOX1BST0MiLDEpLEZodD1uZXcgcjkoIk5FSUdIQk9SU19QUk9DIiwyKSxQaHQ9bmV3IHI5KCJMRVZFTF9IRUlHSFQiLDMpLE5odD1uZXcgcjkoIk5PREVfUE9TSVRJT05fUFJPQyIsNCksSWh0PW5ldyByOSgiREVUUkVFSUZZSU5HX1BST0MiLDUpfWZ1bmN0aW9uIFdzdCh0LGUpe2lmKF90KGUsMjM5KSlyZXR1cm4gaVFlKHQsdShlLDMzKSk7aWYoX3QoZSwxODYpKXJldHVybiBzUWUodCx1KGUsMTE4KSk7aWYoX3QoZSw0MzkpKXJldHVybiByUWUodCx1KGUsMjAyKSk7dGhyb3cgaXQobmV3IEZuKEw4dCtlYihuZXcgeWwobHQoY3QoUW4sMSksRGUsMSw1LFtlXSkpKSkpfWZ1bmN0aW9uIGhvZSh0LGUsbil7dmFyIHIscztpZih0aGlzLmY9dCxyPXUodHIodC5iLGUpLDI4Mykscz1yP3IuYTowLEVtdChuLHMpLG4+PShzLzJ8MCkpZm9yKHRoaXMuZT1yP3IuYzpudWxsLHRoaXMuZD1zO24rKzxzOylCUXQodGhpcyk7ZWxzZSBmb3IodGhpcy5jPXI/ci5iOm51bGw7bi0tID4wOylWdnQodGhpcyk7dGhpcy5iPWUsdGhpcy5hPW51bGx9ZnVuY3Rpb24gZnBuKHQsZSl7dmFyIG4scjtlLmE/RnduKHQsZSk6KG49dShDbnQodC5iLGUuYiksNTcpLG4mJm49PXQuYVtlLmIuZl0mJm4uYSYmbi5hIT1lLmIuYSYmbi5jLkZjKGUuYikscj11KFRudCh0LmIsZS5iKSw1NyksciYmdC5hW3IuZl09PWUuYiYmci5hJiZyLmEhPWUuYi5hJiZlLmIuYy5GYyhyKSxmbnQodC5iLGUuYikpfWZ1bmN0aW9uIGZvZSh0LGUpe3ZhciBuLHI7aWYobj11KHBvKHQuYixlKSwxMjQpLHUodShBaSh0LnIsZSksMjEpLDg0KS5kYygpKXtuLm4uYj0wLG4ubi5jPTA7cmV0dXJufW4ubi5iPXQuQy5iLG4ubi5jPXQuQy5jLHQuQS5IYygoQWwoKSxLMikpJiZOdWUodCxlKSxyPXFmbih0LGUpLGxhdCh0LGUpPT0obDQoKSxFYikmJihyKz0yKnQudyksbi5hLmE9cn1mdW5jdGlvbiBkb2UodCxlKXt2YXIgbixyO2lmKG49dShwbyh0LmIsZSksMTI0KSx1KHUoQWkodC5yLGUpLDIxKSw4NCkuZGMoKSl7bi5uLmQ9MCxuLm4uYT0wO3JldHVybn1uLm4uZD10LkMuZCxuLm4uYT10LkMuYSx0LkEuSGMoKEFsKCksSzIpKSYmQnVlKHQsZSkscj1IZm4odCxlKSxsYXQodCxlKT09KGw0KCksRWIpJiYocis9Mip0LncpLG4uYS5iPXJ9ZnVuY3Rpb24gZHBuKHQsZSl7dmFyIG4scixzLG87Zm9yKG89bmV3IGhlLHI9bmV3IFMoZSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNjUpLGxlKG8sbmV3IERidChuLCEwKSksbGUobyxuZXcgRGJ0KG4sITEpKTtzPW5ldyBhUXQodCksTkMocy5hLmEpLENadChvLHQuYixuZXcgeWwobHQoY3QoaXBlLDEpLERlLDY3OSwwLFtzXSkpKX1mdW5jdGlvbiBnb2UodCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0O3JldHVybiB2PXQuYSxIPXQuYixrPWUuYSxHPWUuYixDPW4uYSxLPW4uYixNPXIuYSx0dD1yLmIsbz12KkctSCprLGg9Qyp0dC1LKk0scz0odi1rKSooSy10dCktKEgtRykqKEMtTSksZD0obyooQy1NKS1oKih2LWspKS9zLGo9KG8qKEstdHQpLWgqKEgtRykpL3MsbmV3ICRlKGQsail9ZnVuY3Rpb24gWDR0KHQsZSl7dmFyIG4scixzO2lmKCF0LmRbZS5wXSl7Zm9yKHQuZFtlLnBdPSEwLHQuYVtlLnBdPSEwLHI9bmV3IGFyKGxyKERzKGUpLmEuS2MoKSxuZXcgeikpO3pyKHIpOyluPXUoTXIociksMTcpLCFHYShuKSYmKHM9bi5kLmksdC5hW3MucF0/bGUodC5iLG4pOlg0dCh0LHMpKTt0LmFbZS5wXT0hMX19ZnVuY3Rpb24gcG9lKHQsZSxuKXt2YXIgcjtzd2l0Y2gocj0wLHUoUShlLChUZSgpLHV1KSksMTYzKS5nKXtjYXNlIDI6cj0yKi1uK3QuYSwrK3QuYTticmVhaztjYXNlIDE6cj0tbjticmVhaztjYXNlIDM6cj1uO2JyZWFrO2Nhc2UgNDpyPTIqbit0LmIsKyt0LmJ9cmV0dXJuIFVzKGUsKGFlKCksVGMpKSYmKHIrPXUoUShlLFRjKSwxOSkuYSkscn1mdW5jdGlvbiBib2UodCxlLG4pe3ZhciByLHMsbztmb3Iobi56YyhlLHQpLGxlKHQubixlKSxvPXQucC5lZyhlKSxlLmo9PXQucC5mZygpP3ZpZSh0LmUsbyk6dmllKHQuaixvKSxzJCh0KSxzPXpwKEQxKGx0KGN0KGoxLDEpLERlLDIwLDAsW25ldyBRcyhlKSxuZXcgVHIoZSldKSkpO3pyKHMpOylyPXUoTXIocyksMTEpLG4uX2Iocil8fGJvZSh0LHIsbil9ZnVuY3Rpb24gUTR0KHQpe3ZhciBlLG4scjtyZXR1cm4gbj11KHFlKHQsKHVpKCksRzIpKSwyMSksbi5IYygoQWwoKSxKeSkpPyhyPXUocWUodCx4YiksMjEpLGU9bmV3IHhvKHUocWUodCxjNSksOCkpLHIuSGMoKGxsKCksUjcpKSYmKGUuYTw9MCYmKGUuYT0yMCksZS5iPD0wJiYoZS5iPTIwKSksZSk6bmV3IENhfWZ1bmN0aW9uIFo0dCh0KXt2YXIgZSxuLHI7aWYoIXQuYil7Zm9yKHI9bmV3IEZrLG49bmV3IEJ4KENfKHQpKTtuLmUhPW4uaS5nYygpOyllPXUoZHN0KG4pLDE4KSxlLkJiJmRjJiZEcihyLGUpO2l5KHIpLHQuYj1uZXcgVjMoKHUoQXQoV3QoKEhwKCksTG4pLm8pLDgpLDE4KSxyLmkpLHIuZyksc2wodCkuYiY9LTl9cmV0dXJuIHQuYn1mdW5jdGlvbiBncG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrO3Y9dShlSShxeChlLmspLE50KFhhLHhjLDYxLDIsMCwxKSksMTIyKSxrPWUuZyxuPUhadChlLHZbMF0pLHM9cVp0KGUsdlsxXSkscj1Bc3QodCxrLG4scyksbz1IWnQoZSx2WzFdKSxkPXFadChlLHZbMF0pLGg9QXN0KHQsayxvLGQpLHI8PWg/KGUuYT1uLGUuYz1zKTooZS5hPW8sZS5jPWQpfWZ1bmN0aW9uIHBwbih0LGUsbil7dmFyIHIscyxvO2Zvcih2cihuLCJQcm9jZXNzb3Igc2V0IG5laWdoYm9ycyIsMSksdC5hPWUuYi5iPT0wPzE6ZS5iLmIscz1udWxsLHI9ZWkoZS5iLDApOyFzJiZyLmIhPXIuZC5jOylvPXUodGkociksODYpLGplKFJlKFEobywoZmMoKSxYeSkpKSkmJihzPW8pO3MmJmt1ZSh0LG5ldyBMcChzKSxuKSxvcihuKX1mdW5jdGlvbiB3b2UodCl7RmF0KCk7dmFyIGUsbixyLHM7cmV0dXJuIHI9aGQodCxDdSgzNSkpLGU9cj09LTE/dDp0LnN1YnN0cigwLHIpLG49cj09LTE/bnVsbDp0LnN1YnN0cihyKzEpLHM9bmFuKGlMdCxlKSxzP24hPW51bGwmJihzPU1yZShzLChPbihuKSxuKSkpOihzPUR4bihlKSxoYW4oaUx0LGUscyksbiE9bnVsbCYmKHM9TXJlKHMsbikpKSxzfWZ1bmN0aW9uIFlzdCh0KXt2YXIgZTt3bigpO3ZhciBuLHIscyxvLGgsZDtpZihfdCh0LDU0KSlmb3Iobz0wLHM9dC5nYygpLTE7bzxzOysrbywtLXMpZT10LlhiKG8pLHQuX2Mobyx0LlhiKHMpKSx0Ll9jKHMsZSk7ZWxzZSBmb3Iobj10LlljKCksaD10LlpjKHQuZ2MoKSk7bi5UYigpPGguVmIoKTspcj1uLlBiKCksZD1oLlViKCksbi5XYihkKSxoLldiKHIpfWZ1bmN0aW9uIGJwbih0LGUpe3ZhciBuLHIsczt2cihlLCJFbmQgbGFiZWwgcHJlLXByb2Nlc3NpbmciLDEpLG49WHQoeWUoUSh0LChUZSgpLFY2KSkpKSxyPVh0KHllKFEodCxXeSkpKSxzPWI4KHUoUSh0LFdsKSwxMDMpKSxscyhXbyhuZXcgVG4obnVsbCxuZXcgX24odC5iLDE2KSksbmV3IENMKSxuZXcgUFl0KG4scixzKSksb3IoZSl9ZnVuY3Rpb24gS3N0KHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihkPTAsbz1uZXcgQjMsVXAobyxlKTtvLmIhPW8uYzspZm9yKGg9dShIeChvKSwyMTQpLGQrPUhzZShoLmQsaC5lKSxzPW5ldyBTKGguYik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMzcpLG49dShOZSh0LmIsci5wKSwyMTQpLG4uc3x8KGQrPUtzdCh0LG4pKTtyZXR1cm4gZH1mdW5jdGlvbiB2b2UodCxlLG4pe3ZhciByLHM7WG5lKHRoaXMpLGU9PShHdygpLHliKT9Gcyh0aGlzLnIsdC5jKTpGcyh0aGlzLncsdC5jKSxuPT15Yj9Gcyh0aGlzLnIsdC5kKTpGcyh0aGlzLncsdC5kKSx0b2UodGhpcyx0KSxyPUhpdCh0LmMpLHM9SGl0KHQuZCksVmFlKHRoaXMscixzLHMpLHRoaXMubz0obV8oKSxiLk1hdGguYWJzKHItcyk8LjIpfWZ1bmN0aW9uIG1vZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2O2lmKGQ9dShEbih0LmEsOCksMTkzNiksZCE9bnVsbClmb3Iocz1kLG89MCxoPXMubGVuZ3RoO288aDsrK28pbnVsbC5qbSgpO3I9bix0LmEuRGImMXx8KHY9bmV3IHlYdCh0LG4sZSksci51aSh2KSksX3Qociw2NzIpP3Uociw2NzIpLndpKHQuYSk6ci50aSgpPT10LmEmJnIudmkobnVsbCl9ZnVuY3Rpb24gd3BuKCl7dmFyIHQ7cmV0dXJuIFU1ZT91KF9FKChQcCgpLFloKSxPMiksMTk0NSk6KEQ1bigpLHQ9dShfdChOYygoUHAoKSxZaCksTzIpLDU4Nik/TmMoWWgsTzIpOm5ldyBBWHQsNTg2KSxVNWU9ITAsZ3huKHQpLHF4bih0KSxraSgoRWJ0KCksc0x0KSx0LG5ldyBoeCksTXN0KHQpLGtvKFloLE8yLHQpLHQpfWZ1bmN0aW9uIHZwbih0LGUsbixyKXt2YXIgcztyZXR1cm4gcz13NCh0LG4sbHQoY3QoQWUsMSksZWUsMiw2LFtjb3QsdW90LGxvdCxob3QsZm90LGRvdCxnb3RdKSxlKSxzPDAmJihzPXc0KHQsbixsdChjdChBZSwxKSxlZSwyLDYsWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSksZSkpLHM8MD8hMTooci5kPXMsITApfWZ1bmN0aW9uIG1wbih0LGUsbixyKXt2YXIgcztyZXR1cm4gcz13NCh0LG4sbHQoY3QoQWUsMSksZWUsMiw2LFtjb3QsdW90LGxvdCxob3QsZm90LGRvdCxnb3RdKSxlKSxzPDAmJihzPXc0KHQsbixsdChjdChBZSwxKSxlZSwyLDYsWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSksZSkpLHM8MD8hMTooci5kPXMsITApfWZ1bmN0aW9uIHlwbih0KXt2YXIgZSxuLHI7Zm9yKF8ybih0KSxyPW5ldyBoZSxuPW5ldyBTKHQuYS5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDgxKSxsZShyLG5ldyBOYnQoZSwhMCkpLGxlKHIsbmV3IE5idChlLCExKSk7bzFuKHQuYyksaEQocix0LmIsbmV3IHlsKGx0KGN0KG1PLDEpLERlLDM2OSwwLFt0LmNdKSkpLHpibih0KX1mdW5jdGlvbiB4cG4odCl7dmFyIGUsbixyLHM7Zm9yKG49bmV3IF9yLHM9bmV3IFModC5kKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxODEpLGU9dShyLldlKChhZSgpLEI2KSksMTcpLExvKG4uZixlKXx8a2kobixlLG5ldyB0UXQoZSkpLGxlKHUoZWMoTG8obi5mLGUpKSw0NTYpLmIscik7cmV0dXJuIG5ldyBCdShuZXcgdjEobikpfWZ1bmN0aW9uIGtwbih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKHI9bmV3IGVadCh0LmouYy5sZW5ndGgpLG49bnVsbCxvPW5ldyBTKHQuaik7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTEpLHMuaiE9biYmKHIuYj09ci5jfHxJY2UocixuLGUpLGxtdChyKSxuPXMuaiksaD1iY2UocyksaCYmaW10KHIsaCk7ci5iPT1yLmN8fEljZShyLG4sZSl9ZnVuY3Rpb24gRXBuKHQsZSl7dmFyIG4scixzO2ZvcihyPW5ldyBkYSh0LmIsMCk7ci5iPHIuZC5nYygpOyluPShabihyLmI8ci5kLmdjKCkpLHUoci5kLlhiKHIuYz1yLmIrKyksNzApKSxzPXUoUShuLChUZSgpLE9kKSksMjcyKSxzPT0oTTEoKSxaeSkmJihDbChyKSxsZShlLmIsbiksVXMobiwoYWUoKSxCNikpfHxKdChuLEI2LHQpKX1mdW5jdGlvbiBUcG4odCl7dmFyIGUsbixyLHMsbztmb3IoZT1qMChuZXcgYXIobHIoRHModCkuYS5LYygpLG5ldyB6KSkpLHM9bmV3IGFyKGxyKGpvKHQpLmEuS2MoKSxuZXcgeikpO3pyKHMpOylyPXUoTXIocyksMTcpLG49ci5jLmksbz1qMChuZXcgYXIobHIoRHMobikuYS5LYygpLG5ldyB6KSkpLGU9Yi5NYXRoLm1heChlLG8pO3JldHVybiBwZShlKX1mdW5jdGlvbiBDcG4odCxlLG4pe3ZhciByLHMsbyxoO2Zvcih2cihuLCJQcm9jZXNzb3IgYXJyYW5nZSBub2RlIiwxKSxzPW51bGwsbz1uZXcgWmkscj1laShlLmIsMCk7IXMmJnIuYiE9ci5kLmM7KWg9dSh0aShyKSw4NiksamUoUmUoUShoLChmYygpLFh5KSkpKSYmKHM9aCk7ZnMobyxzLG8uYy5iLG8uYyksTGhlKHQsbyxSYyhuLDEpKSxvcihuKX1mdW5jdGlvbiB5b2UodCxlLG4pe3ZhciByLHMsbztyPXUocWUodCwodWkoKSxZRykpLDIxKSxzPTAsbz0wLGUuYT5uLmEmJihyLkhjKChoeSgpLFdPKSk/cz0oZS5hLW4uYSkvMjpyLkhjKFlPKSYmKHM9ZS5hLW4uYSkpLGUuYj5uLmImJihyLkhjKChoeSgpLFhPKSk/bz0oZS5iLW4uYikvMjpyLkhjKEtPKSYmKG89ZS5iLW4uYikpLEY0dCh0LHMsbyl9ZnVuY3Rpb24geG9lKHQsZSxuLHIscyxvLGgsZCx2LGssQyxNLGope190KHQuQ2IsODgpJiZneShzbCh1KHQuQ2IsODgpKSw0KSxRYyh0LG4pLHQuZj1oLGhFKHQsZCksZEUodCx2KSxsRSh0LGspLGZFKHQsQykscWcodCxNKSxnRSh0LGopLHpnKHQsITApLFJnKHQscyksdC5vayhvKSxiMih0LGUpLHIhPW51bGwmJih0Lmk9bnVsbCxmeih0LHIpKX1mdW5jdGlvbiBrb2UodCl7dmFyIGUsbjtpZih0LmYpe2Zvcig7dC5uPjA7KXtpZihlPXUodC5rLlhiKHQubi0xKSw3Miksbj1lLmFrKCksX3Qobiw5OSkmJnUobiwxOCkuQmImZGMmJighdC5lfHxuLkdqKCkhPWo3fHxuLmFqKCkhPTApJiZlLmRkKCkhPW51bGwpcmV0dXJuITA7LS10Lm59cmV0dXJuITF9ZWxzZSByZXR1cm4gdC5uPjB9ZnVuY3Rpb24gSjR0KHQsZSxuKXtpZih0PDApcmV0dXJuIHlfKGFmZSxsdChjdChRbiwxKSxEZSwxLDUsW24scGUodCldKSk7aWYoZTwwKXRocm93IGl0KG5ldyBGbihvZmUrZSkpO3JldHVybiB5XygiJXMgKCVzKSBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gc2l6ZSAoJXMpIixsdChjdChRbiwxKSxEZSwxLDUsW24scGUodCkscGUoZSldKSl9ZnVuY3Rpb24gdDV0KHQsZSxuLHIscyxvKXt2YXIgaCxkLHYsaztpZihoPXItbixoPDcpe2hobihlLG4scixvKTtyZXR1cm59aWYodj1uK3MsZD1yK3Msaz12KyhkLXY+PjEpLHQ1dChlLHQsdixrLC1zLG8pLHQ1dChlLHQsayxkLC1zLG8pLG8udWUodFtrLTFdLHRba10pPD0wKXtmb3IoO248cjspdHMoZSxuKyssdFt2KytdKTtyZXR1cm59T2xuKHQsdixrLGQsZSxuLHIsbyl9ZnVuY3Rpb24gaEkodCxlKXt2YXIgbixyLHM7Zm9yKHM9bmV3IGhlLHI9bmV3IFModC5jLmEuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNTcpLGUuTGIobikmJihsZShzLG5ldyBMYnQobiwhMCkpLGxlKHMsbmV3IExidChuLCExKSkpO2Exbih0LmUpLENadChzLHQuZCxuZXcgeWwobHQoY3QoaXBlLDEpLERlLDY3OSwwLFt0LmVdKSkpfWZ1bmN0aW9uIF9wbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2O2Zvcih2PWUuZCxzPWUuYi5qLGQ9bmV3IFModik7ZC5hPGQuYy5jLmxlbmd0aDspZm9yKGg9dShKKGQpLDEwMSksbz1OdChwbCxvMCwyNSxzLmMubGVuZ3RoLDE2LDEpLGtpKHQuYixoLG8pLG49aC5hLmQucC0xLHI9aC5jLmQucDtuIT1yOyluPShuKzEpJXMuYy5sZW5ndGgsb1tuXT0hMH1mdW5jdGlvbiBTcG4odCxlKXtmb3IodC5yPW5ldyBQRCh0LnApLHdwdCh0LnIsdCksVWEodC5yLmosdC5qKSxBaCh0LmopLHJpKHQuaixlKSxyaSh0LnIuZSxlKSxzJCh0KSxzJCh0LnIpO3QuZi5jLmxlbmd0aCE9MDspR1V0KHUoTmUodC5mLDApLDEyOSkpO2Zvcig7dC5rLmMubGVuZ3RoIT0wOylHVXQodShOZSh0LmssMCksMTI5KSk7cmV0dXJuIHQucn1mdW5jdGlvbiBYc3QodCxlLG4pe3ZhciByLHMsbztpZihzPXluKHQuVGcoKSxlKSxyPWUtdC5BaCgpLHI8MClpZihzKWlmKHMuSWooKSlvPXQuWWcocyksbz49MD90LnNoKG8sbik6TTV0KHQscyxuKTtlbHNlIHRocm93IGl0KG5ldyBGbihsYitzLm5lKCkrWF8pKTtlbHNlIHRocm93IGl0KG5ldyBGbihCZGUrZStSZGUpKTtlbHNlIGdoKHQscixzLG4pfWZ1bmN0aW9uIEVvZSh0KXt2YXIgZSxuLHIscztpZihuPXUodCw0OSkucWgoKSxuKXRyeXtpZihyPW51bGwsZT1fRSgoUHAoKSxZaCksc2xlKGdobihuKSkpLGUmJihzPWUucmgoKSxzJiYocj1zLldrKGtLZShuLmUpKSkpLHImJnIhPXQpcmV0dXJuIEVvZShyKX1jYXRjaChvKXtpZihvPVdpKG8pLCFfdChvLDYwKSl0aHJvdyBpdChvKX1yZXR1cm4gdH1mdW5jdGlvbiBhdSh0LGUsbil7dmFyIHIscyxvLGg7aWYoaD1lPT1udWxsPzA6dC5iLnNlKGUpLHM9KHI9dC5hLmdldChoKSxyPz9uZXcgQXJyYXkpLHMubGVuZ3RoPT0wKXQuYS5zZXQoaCxzKTtlbHNlIGlmKG89anJlKHQsZSxzKSxvKXJldHVybiBvLmVkKG4pO3JldHVybiB0cyhzLHMubGVuZ3RoLG5ldyBLUihlLG4pKSwrK3QuYyx3JCh0LmIpLG51bGx9ZnVuY3Rpb24gVG9lKHQsZSl7dmFyIG4scjtyZXR1cm4gTCQodC5hKSxLZCh0LmEsKHB6KCksRkcpLEZHKSxLZCh0LmEsRDcsRDcpLHI9bmV3IFZzLGJpKHIsRDcsKE56KCksR2h0KSksVnQocWUoZSwodXkoKSxZaHQpKSkhPT1WdCgoSEQoKSxORykpJiZiaShyLEQ3LEhodCksYmkocixENyxWaHQpLFRVdCh0LmEsciksbj1GcSh0LmEsZSksbn1mdW5jdGlvbiBDb2UodCl7aWYoIXQpcmV0dXJuIGNIdCgpLEJnZTt2YXIgZT10LnZhbHVlT2Y/dC52YWx1ZU9mKCk6dDtpZihlIT09dCl7dmFyIG49UHV0W3R5cGVvZiBlXTtyZXR1cm4gbj9uKGUpOlV5dCh0eXBlb2YgZSl9ZWxzZSByZXR1cm4gdCBpbnN0YW5jZW9mIEFycmF5fHx0IGluc3RhbmNlb2YgYi5BcnJheT9uZXcgd3godCk6bmV3IFFrKHQpfWZ1bmN0aW9uIF9vZSh0LGUsbil7dmFyIHIscyxvO3N3aXRjaChvPXQubyxyPXUocG8odC5wLG4pLDI0NCkscz1yLmkscy5iPWdJKHIpLHMuYT1kSShyKSxzLmI9Yi5NYXRoLm1heChzLmIsby5hKSxzLmI+by5hJiYhZSYmKHMuYj1vLmEpLHMuYz0tKHMuYi1vLmEpLzIsbi5nKXtjYXNlIDE6cy5kPS1zLmE7YnJlYWs7Y2FzZSAzOnMuZD1vLmJ9RWF0KHIpLFRhdChyKX1mdW5jdGlvbiBTb2UodCxlLG4pe3ZhciByLHMsbztzd2l0Y2gobz10Lm8scj11KHBvKHQucCxuKSwyNDQpLHM9ci5pLHMuYj1nSShyKSxzLmE9ZEkocikscy5hPWIuTWF0aC5tYXgocy5hLG8uYikscy5hPm8uYiYmIWUmJihzLmE9by5iKSxzLmQ9LShzLmEtby5iKS8yLG4uZyl7Y2FzZSA0OnMuYz0tcy5iO2JyZWFrO2Nhc2UgMjpzLmM9by5hfUVhdChyKSxUYXQocil9ZnVuY3Rpb24gQXBuKHQsZSl7dmFyIG4scixzLG8saDtpZighZS5kYygpKXtpZihzPXUoZS5YYigwKSwxMjgpLGUuZ2MoKT09MSl7dHVlKHQscyxzLDEsMCxlKTtyZXR1cm59Zm9yKG49MTtuPGUuZ2MoKTspKHMuanx8IXMubykmJihvPUIxbihlLG4pLG8mJihyPXUoby5hLDE5KS5hLGg9dShvLmIsMTI4KSx0dWUodCxzLGgsbixyLGUpLG49cisxLHM9aCkpfX1mdW5jdGlvbiBMcG4odCl7dmFyIGUsbixyLHMsbyxoO2ZvcihoPW5ldyBCdSh0LmQpLFpzKGgsbmV3ICRYKSxlPShFcSgpLGx0KGN0KFNUdCwxKSxvZSwyNzAsMCxbeGx0LFRsdCx5bHQsU2x0LEVsdCxrbHQsX2x0LENsdF0pKSxuPTAsbz1uZXcgUyhoKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxMDEpLHI9ZVtuJWUubGVuZ3RoXSxDYm4ocyxyKSwrK259ZnVuY3Rpb24gTXBuKHQsZSl7azQoKTt2YXIgbixyLHMsbztpZihlLmI8MilyZXR1cm4hMTtmb3Iobz1laShlLDApLG49dSh0aShvKSw4KSxyPW47by5iIT1vLmQuYzspe2lmKHM9dSh0aShvKSw4KSwhKFE4KHQscikmJlE4KHQscykpKXJldHVybiExO3I9c31yZXR1cm4hIShROCh0LHIpJiZROCh0LG4pKX1mdW5jdGlvbiBlNXQodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTTtyZXR1cm4gQz1udWxsLE09dCxoPUgwKE0sIngiKSxuPW5ldyBFenQoZSksa29uKG4uYSxoKSxkPUgwKE0sInkiKSxyPW5ldyBUenQoZSksRW9uKHIuYSxkKSx2PUgwKE0sWmN0KSxzPW5ldyBDenQoZSksVG9uKHMuYSx2KSxrPUgwKE0sUWN0KSxvPW5ldyBfenQoZSksQz0oQ29uKG8uYSxrKSxrKSxDfWZ1bmN0aW9uIGd5KHQsZSl7T3VlKHQsZSksdC5iJjEmJih0LmEuYT1udWxsKSx0LmImMiYmKHQuYS5mPW51bGwpLHQuYiY0JiYodC5hLmc9bnVsbCx0LmEuaT1udWxsKSx0LmImMTYmJih0LmEuZD1udWxsLHQuYS5lPW51bGwpLHQuYiY4JiYodC5hLmI9bnVsbCksdC5iJjMyJiYodC5hLmo9bnVsbCx0LmEuYz1udWxsKX1mdW5jdGlvbiBEcG4odCxlKXt2YXIgbixyLHM7aWYocz0wLGUubGVuZ3RoPjApdHJ5e3M9cWwoZSxTYSx3aSl9Y2F0Y2gobyl7dGhyb3cgbz1XaShvKSxfdChvLDEyNyk/KHI9byxpdChuZXcgVyQocikpKTppdChvKX1yZXR1cm4gbj0oIXQuYSYmKHQuYT1uZXcgWnR0KHQpKSx0LmEpLHM8bi5pJiZzPj0wP3UoQXQobixzKSw1Nik6bnVsbH1mdW5jdGlvbiBJcG4odCxlKXtpZih0PDApcmV0dXJuIHlfKGFmZSxsdChjdChRbiwxKSxEZSwxLDUsWyJpbmRleCIscGUodCldKSk7aWYoZTwwKXRocm93IGl0KG5ldyBGbihvZmUrZSkpO3JldHVybiB5XygiJXMgKCVzKSBtdXN0IGJlIGxlc3MgdGhhbiBzaXplICglcykiLGx0KGN0KFFuLDEpLERlLDEsNSxbImluZGV4IixwZSh0KSxwZShlKV0pKX1mdW5jdGlvbiBPcG4odCl7dmFyIGUsbixyLHMsbztpZih0PT1udWxsKXJldHVybiBfdTtmb3Iobz1uZXcgZjIoWWEsIlsiLCJdIiksbj10LHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLG8uYT9HcihvLmEsby5iKTpvLmE9bmV3IE9sKG8uZCksaDkoby5hLCIiK2UpO3JldHVybiBvLmE/by5lLmxlbmd0aD09MD9vLmEuYTpvLmEuYSsoIiIrby5lKTpvLmN9ZnVuY3Rpb24gUHBuKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gX3U7Zm9yKG89bmV3IGYyKFlhLCJbIiwiXSIpLG49dCxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxvLmE/R3Ioby5hLG8uYik6by5hPW5ldyBPbChvLmQpLGg5KG8uYSwiIitlKTtyZXR1cm4gby5hP28uZS5sZW5ndGg9PTA/by5hLmE6by5hLmErKCIiK28uZSk6by5jfWZ1bmN0aW9uIEZwbih0KXt2YXIgZSxuLHIscyxvO2lmKHQ9PW51bGwpcmV0dXJuIF91O2ZvcihvPW5ldyBmMihZYSwiWyIsIl0iKSxuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sby5hP0dyKG8uYSxvLmIpOm8uYT1uZXcgT2woby5kKSxoOShvLmEsIiIrZSk7cmV0dXJuIG8uYT9vLmUubGVuZ3RoPT0wP28uYS5hOm8uYS5hKygiIitvLmUpOm8uY31mdW5jdGlvbiBOcG4odCl7dmFyIGUsbixyLHMsbztpZih0PT1udWxsKXJldHVybiBfdTtmb3Iobz1uZXcgZjIoWWEsIlsiLCJdIiksbj10LHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLG8uYT9HcihvLmEsby5iKTpvLmE9bmV3IE9sKG8uZCksaDkoby5hLCIiK2UpO3JldHVybiBvLmE/by5lLmxlbmd0aD09MD9vLmEuYTpvLmEuYSsoIiIrby5lKTpvLmN9ZnVuY3Rpb24gQW9lKHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihuPXQuYi5jLmxlbmd0aCxzPU5lKHQuYixlKTtlKjIrMTxuJiYocj0obz0yKmUrMSxoPW8rMSxkPW8saDxuJiZ0LmEudWUoTmUodC5iLGgpLE5lKHQuYixvKSk8MCYmKGQ9aCksZCksISh0LmEudWUocyxOZSh0LmIscikpPDApKTspY2godC5iLGUsTmUodC5iLHIpKSxlPXI7Y2godC5iLGUscyl9ZnVuY3Rpb24gbjV0KHQsZSxuLHIscyxvKXt2YXIgaCxkLHYsayxDO2ZvcihWdCh0KT09PVZ0KG4pJiYodD10LnNsaWNlKGUsZStzKSxlPTApLHY9bixkPWUsaz1lK3M7ZDxrOyloPWIuTWF0aC5taW4oZCsxZTQsaykscz1oLWQsQz10LnNsaWNlKGQsaCksQy5zcGxpY2UoMCwwLHIsbz9zOjApLEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkodixDKSxkPWgscis9c31mdW5jdGlvbiBRc3QodCxlLG4pe3ZhciByLHM7cmV0dXJuIHI9bi5kLHM9bi5lLHQuZ1tyLmRdPD10LmlbZS5kXSYmdC5pW2UuZF08PXQuaVtyLmRdJiZ0Lmdbcy5kXTw9dC5pW2UuZF0mJnQuaVtlLmRdPD10Lmlbcy5kXT8hKHQuaVtyLmRdPHQuaVtzLmRdKTp0Lmlbci5kXTx0Lmlbcy5kXX1mdW5jdGlvbiBMb2UodCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYocj10LmEuYy5sZW5ndGgscj4wKWZvcihoPXQuYy5kLGQ9dC5kLmQscz1mZChpYShuZXcgJGUoZC5hLGQuYiksaCksMS8ocisxKSksbz1uZXcgJGUoaC5hLGguYiksbj1uZXcgUyh0LmEpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDU1OSksZS5kLmE9by5hLGUuZC5iPW8uYixMaShvLHMpfWZ1bmN0aW9uIE1vZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2O2Zvcih2PWFzLG89bmV3IFMocWNlKHQuYikpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSwxNjgpLGQ9bmV3IFMocWNlKGUuYikpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDE2OCkscj1FdW4ocy5hLHMuYixoLmEsaC5iLG4pLHY9Yi5NYXRoLm1pbih2LHIpO3JldHVybiB2fWZ1bmN0aW9uIEJzKHQsZSl7aWYoIWUpdGhyb3cgaXQobmV3IElDKTtpZih0Lmo9ZSwhdC5kKXN3aXRjaCh0LmouZyl7Y2FzZSAxOnQuYS5hPXQuby5hLzIsdC5hLmI9MDticmVhaztjYXNlIDI6dC5hLmE9dC5vLmEsdC5hLmI9dC5vLmIvMjticmVhaztjYXNlIDM6dC5hLmE9dC5vLmEvMix0LmEuYj10Lm8uYjticmVhaztjYXNlIDQ6dC5hLmE9MCx0LmEuYj10Lm8uYi8yfX1mdW5jdGlvbiBCcG4odCxlKXt2YXIgbixyLHM7cmV0dXJuIF90KGUuZywxMCkmJnUoZS5nLDEwKS5rPT0oVm4oKSxrcyk/YXM6KHM9WHgoZSkscz9iLk1hdGgubWF4KDAsdC5iLzItLjUpOihuPXQ0KGUpLG4/KHI9WHQoeWUob3kobiwoVGUoKSwkdikpKSksYi5NYXRoLm1heCgwLHIvMi0uNSkpOmFzKSl9ZnVuY3Rpb24gUnBuKHQsZSl7dmFyIG4scixzO3JldHVybiBfdChlLmcsMTApJiZ1KGUuZywxMCkuaz09KFZuKCksa3MpP2FzOihzPVh4KGUpLHM/Yi5NYXRoLm1heCgwLHQuYi8yLS41KToobj10NChlKSxuPyhyPVh0KHllKG95KG4sKFRlKCksJHYpKSkpLGIuTWF0aC5tYXgoMCxyLzItLjUpKTphcykpfWZ1bmN0aW9uIGpwbih0KXt2YXIgZSxuLHIscyxvLGg7Zm9yKGg9dF8odC5kLHQuZSksbz1oLktjKCk7by5PYigpOylmb3Iocz11KG8uUGIoKSwxMSkscj10LmU9PSh2ZSgpLEJuKT9zLmU6cy5nLG49bmV3IFMocik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTcpLCFHYShlKSYmZS5jLmkuYyE9ZS5kLmkuYyYmKEdnbih0LGUpLCsrdC5mLCsrdC5jKX1mdW5jdGlvbiBEb2UodCxlKXt2YXIgbixyO2lmKGUuZGMoKSlyZXR1cm4gd24oKSx3bigpLGlvO2ZvcihyPW5ldyBoZSxsZShyLHBlKFNhKSksbj0xO248dC5mOysrbil0LmE9PW51bGwmJkl1ZSh0KSx0LmFbbl0mJmxlKHIscGUobikpO3JldHVybiByLmMubGVuZ3RoPT0xPyh3bigpLHduKCksaW8pOihsZShyLHBlKHdpKSksJHluKGUscikpfWZ1bmN0aW9uICRwbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2O2g9ZS5jLmkuayE9KFZuKCksT3MpLHY9aD9lLmQ6ZS5jLG49ZWRuKGUsdikuaSxzPXUodHIodC5rLHYpLDEyMSkscj10Lmlbbi5wXS5hLHlZdCh2LmkpPChuLmM/Um8obi5jLmEsbiwwKTotMSk/KG89cyxkPXIpOihvPXIsZD1zKSx5ZihsZih1ZihoZihjZihuZXcgQ2gsMCksNCksbyksZCkpfWZ1bmN0aW9uIHpwbih0LGUsbil7dmFyIHIscyxvLGgsZCx2O2lmKG4pZm9yKHM9bi5hLmxlbmd0aCxyPW5ldyBlMihzKSxkPShyLmItci5hKSpyLmM8MD8oRnAoKSxJYik6bmV3IGpwKHIpO2QuT2IoKTspaD11KGQuUGIoKSwxOSksdj1Dc3QodCxmNihKbShuLGguYSkpKSx2JiYobz0oIWUuYiYmKGUuYj1uZXcgQ24oYnIsZSw0LDcpKSxlLmIpLERyKG8sdikpfWZ1bmN0aW9uIHFwbih0LGUsbil7dmFyIHIscyxvLGgsZCx2O2lmKG4pZm9yKHM9bi5hLmxlbmd0aCxyPW5ldyBlMihzKSxkPShyLmItci5hKSpyLmM8MD8oRnAoKSxJYik6bmV3IGpwKHIpO2QuT2IoKTspaD11KGQuUGIoKSwxOSksdj1Dc3QodCxmNihKbShuLGguYSkpKSx2JiYobz0oIWUuYyYmKGUuYz1uZXcgQ24oYnIsZSw1LDgpKSxlLmMpLERyKG8sdikpfWZ1bmN0aW9uIGZJKHQsZSxuKXt2YXIgcixzO3I9ZS5hJnQuZixlLmI9dC5iW3JdLHQuYltyXT1lLHM9ZS5mJnQuZixlLmQ9dC5jW3NdLHQuY1tzXT1lLG4/KGUuZT1uLmUsZS5lP2UuZS5jPWU6dC5hPWUsZS5jPW4uYyxlLmM/ZS5jLmU9ZTp0LmU9ZSk6KGUuZT10LmUsZS5jPW51bGwsdC5lP3QuZS5jPWU6dC5hPWUsdC5lPWUpLCsrdC5pLCsrdC5nfWZ1bmN0aW9uIElvZSh0KXt2YXIgZSxuLHI7aWYoZT10LlBiKCksIXQuT2IoKSlyZXR1cm4gZTtmb3Iocj1oYyhHcihuZXcgTXAsImV4cGVjdGVkIG9uZSBlbGVtZW50IGJ1dCB3YXM6IDwiKSxlKSxuPTA7bjw0JiZ0Lk9iKCk7bisrKWhjKChyLmErPVlhLHIpLHQuUGIoKSk7dGhyb3cgdC5PYigpJiYoci5hKz0iLCAuLi4iKSxyLmErPSI+IixpdChuZXcgRm4oci5hKSl9ZnVuY3Rpb24gSHBuKHQsZSl7dmFyIG47ZS5kP2UuZC5iPWUuYjp0LmE9ZS5iLGUuYj9lLmIuZD1lLmQ6dC5lPWUuZCwhZS5lJiYhZS5jPyhuPXUoSngodC5iLGUuYSksMjgzKSxuLmE9MCwrK3QuYyk6KG49dSh0cih0LmIsZS5hKSwyODMpLC0tbi5hLGUuZT9lLmUuYz1lLmM6bi5iPWUuYyxlLmM/ZS5jLmU9ZS5lOm4uYz1lLmUpLC0tdC5kfWZ1bmN0aW9uIFZwbih0KXt2YXIgZSxuO3JldHVybiBuPS10LmEsZT1sdChjdCh4aCwxKSx5ZCwyNSwxNSxbNDMsNDgsNDgsNDgsNDhdKSxuPDAmJihlWzBdPTQ1LG49LW4pLGVbMV09ZVsxXSsoKG4vNjB8MCkvMTB8MCkmeXMsZVsyXT1lWzJdKyhuLzYwfDApJTEwJnlzLGVbM109ZVszXSsobiU2MC8xMHwwKSZ5cyxlWzRdPWVbNF0rbiUxMCZ5cyxNaChlLDAsZS5sZW5ndGgpfWZ1bmN0aW9uIE9vZSh0LGUsbil7dmFyIHIscztmb3Iocj1lLmQscz1uLmQ7ci5hLXMuYT09MCYmci5iLXMuYj09MDspci5hKz11bCh0LDI2KSpJXyt1bCh0LDI3KSpPXy0uNSxyLmIrPXVsKHQsMjYpKklfK3VsKHQsMjcpKk9fLS41LHMuYSs9dWwodCwyNikqSV8rdWwodCwyNykqT18tLjUscy5iKz11bCh0LDI2KSpJXyt1bCh0LDI3KSpPXy0uNX1mdW5jdGlvbiByNXQodCl7dmFyIGUsbixyLHM7Zm9yKHQuZz1uZXcgaV8odShMcihYYSksMjkwKSkscj0wLG49KHZlKCksUG4pLGU9MDtlPHQuai5jLmxlbmd0aDtlKyspcz11KE5lKHQuaixlKSwxMSkscy5qIT1uJiYociE9ZSYmengodC5nLG4sbmV3IGZhKHBlKHIpLHBlKGUpKSksbj1zLmoscj1lKTt6eCh0LmcsbixuZXcgZmEocGUocikscGUoZSkpKX1mdW5jdGlvbiBHcG4odCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKHI9MCxuPW5ldyBTKHQuYik7bi5hPG4uYy5jLmxlbmd0aDspZm9yKGU9dShKKG4pLDI5KSxvPW5ldyBTKGUuYSk7by5hPG8uYy5jLmxlbmd0aDspZm9yKHM9dShKKG8pLDEwKSxzLnA9cisrLGQ9bmV3IFMocy5qKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxMSksaC5wPXIrK31mdW5jdGlvbiBQb2UodCxlLG4scixzKXt2YXIgbyxoLGQsdixrO2lmKGUpZm9yKGQ9ZS5LYygpO2QuT2IoKTspZm9yKGg9dShkLlBiKCksMTApLGs9VTV0KGgsKHNvKCksbnUpLG4pLktjKCk7ay5PYigpOyl2PXUoay5QYigpLDExKSxvPXUoZWMoTG8ocy5mLHYpKSwxMTIpLG98fChvPW5ldyBQRCh0LmQpLHIuY1tyLmMubGVuZ3RoXT1vLGJvZShvLHYscykpfWZ1bmN0aW9uIGk1dCh0LGUpe3ZhciBuLHIscztpZihzPUM0KCgkdSgpLHlhKSx0LlRnKCksZSkscyl0bygpLHUocyw2NikuT2ooKXx8KHM9S3goVG8oeWEscykpKSxyPShuPXQuWWcocyksdShuPj0wP3QuX2cobiwhMCwhMCk6ZHYodCxzLCEwKSwxNTMpKSx1KHIsMjE1KS5vbChlKTtlbHNlIHRocm93IGl0KG5ldyBGbihsYitlLm5lKCkrWF8pKX1mdW5jdGlvbiBzNXQodCl7dmFyIGUsbjtyZXR1cm4gdD4tMHg4MDAwMDAwMDAwMDAmJnQ8MHg4MDAwMDAwMDAwMDA/dD09MD8wOihlPXQ8MCxlJiYodD0tdCksbj1wcyhiLk1hdGguZmxvb3IoYi5NYXRoLmxvZyh0KS8uNjkzMTQ3MTgwNTU5OTQ1MykpLCghZXx8dCE9Yi5NYXRoLnBvdygyLG4pKSYmKytuLG4pOkpuZShUdSh0KSl9ZnVuY3Rpb24gVXBuKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihvPW5ldyBPMCxuPW5ldyBTKHQpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDEyOSksaD1lLmEsZD1lLmIsIShvLmEuX2IoaCl8fG8uYS5fYihkKSkmJihzPWgscj1kLGguZS5iK2guai5iPjImJmQuZS5iK2Quai5iPD0yJiYocz1kLHI9aCksby5hLnpjKHMsbykscy5xPXIpO3JldHVybiBvfWZ1bmN0aW9uIEZvZSh0LGUpe3ZhciBuLHIscztyZXR1cm4gcj1uZXcgWTAodCksTW8ocixlKSxKdChyLChhZSgpLGVHKSxlKSxKdChyLChUZSgpLGNzKSwodWEoKSxHYykpLEp0KHIsSWQsKHQwKCksVUcpKSxEMChyLChWbigpLGtzKSksbj1uZXcgTWMsVW8obixyKSxCcyhuLCh2ZSgpLEJuKSkscz1uZXcgTWMsVW8ocyxyKSxCcyhzLEhuKSxyfWZ1bmN0aW9uIE5vZSh0KXtzd2l0Y2godC5nKXtjYXNlIDA6cmV0dXJuIG5ldyBkZXQoKGV2KCksUk8pKTtjYXNlIDE6cmV0dXJuIG5ldyBWQjtjYXNlIDI6cmV0dXJuIG5ldyBsdHQ7ZGVmYXVsdDp0aHJvdyBpdChuZXcgRm4oIk5vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGNyb3NzaW5nIG1pbmltaXplciAiKyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gQm9lKHQsZSl7dmFyIG4scixzLG8saDtmb3IodC5jW2UucF09ITAsbGUodC5hLGUpLGg9bmV3IFMoZS5qKTtoLmE8aC5jLmMubGVuZ3RoOylmb3Iobz11KEooaCksMTEpLHI9bmV3IEwxKG8uYik7R28oci5hKXx8R28oci5iKTspbj11KEdvKHIuYSk/SihyLmEpOkooci5iKSwxNykscz1zZm4obyxuKS5pLHQuY1tzLnBdfHxCb2UodCxzKX1mdW5jdGlvbiBSb2UodCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGg9MCxuPW5ldyBucigoIXQuYSYmKHQuYT1uZXcgZmUocnMsdCwxMCwxMSkpLHQuYSkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSwzMyksZD1lLmcscz1lLmYscj1iLk1hdGguc3FydChkKmQrcypzKSxoPWIuTWF0aC5tYXgocixoKSxvPVJvZShlKSxoPWIuTWF0aC5tYXgobyxoKTtyZXR1cm4gaH1mdW5jdGlvbiBadSgpe1p1PVosQ2I9bmV3IGM5KCJPVVRTSURFIiwwKSxzZz1uZXcgYzkoIklOU0lERSIsMSksc1A9bmV3IGM5KCJORVhUX1RPX1BPUlRfSUZfUE9TU0lCTEUiLDIpLG5BPW5ldyBjOSgiQUxXQVlTX1NBTUVfU0lERSIsMyksZUE9bmV3IGM5KCJBTFdBWVNfT1RIRVJfU0FNRV9TSURFIiw0KSxRNj1uZXcgYzkoIlNQQUNFX0VGRklDSUVOVCIsNSl9ZnVuY3Rpb24gam9lKHQsZSxuKXt2YXIgcixzLG8saCxkLHY7cmV0dXJuIHI9VHNuKHQsKHM9KFN3KCksbz1uZXcgVnB0LG8pLG4mJkk1dChzLG4pLHMpLGUpLEc5KHIsUjAoZSxBZCkpLGxxKGUsciksdTJuKGUsciksZTV0KGUsciksaD1lLGQ9S3coaCwicG9ydHMiKSx2PW5ldyBxR3QodCxyKSxLMm4odi5hLHYuYixkKSxMaXQodCxlLHIpLHZ1bih0LGUscikscn1mdW5jdGlvbiBXcG4odCl7dmFyIGUsbjtyZXR1cm4gbj0tdC5hLGU9bHQoY3QoeGgsMSkseWQsMjUsMTUsWzQzLDQ4LDQ4LDU4LDQ4LDQ4XSksbjwwJiYoZVswXT00NSxuPS1uKSxlWzFdPWVbMV0rKChuLzYwfDApLzEwfDApJnlzLGVbMl09ZVsyXSsobi82MHwwKSUxMCZ5cyxlWzRdPWVbNF0rKG4lNjAvMTB8MCkmeXMsZVs1XT1lWzVdK24lMTAmeXMsTWgoZSwwLGUubGVuZ3RoKX1mdW5jdGlvbiBZcG4odCl7dmFyIGU7cmV0dXJuIGU9bHQoY3QoeGgsMSkseWQsMjUsMTUsWzcxLDc3LDg0LDQ1LDQ4LDQ4LDU4LDQ4LDQ4XSksdDw9MCYmKGVbM109NDMsdD0tdCksZVs0XT1lWzRdKygodC82MHwwKS8xMHwwKSZ5cyxlWzVdPWVbNV0rKHQvNjB8MCklMTAmeXMsZVs3XT1lWzddKyh0JTYwLzEwfDApJnlzLGVbOF09ZVs4XSt0JTEwJnlzLE1oKGUsMCxlLmxlbmd0aCl9ZnVuY3Rpb24gS3BuKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gX3U7Zm9yKG89bmV3IGYyKFlhLCJbIiwiXSIpLG49dCxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxvLmE/R3Ioby5hLG8uYik6by5hPW5ldyBPbChvLmQpLGg5KG8uYSwiIitfOShlKSk7cmV0dXJuIG8uYT9vLmUubGVuZ3RoPT0wP28uYS5hOm8uYS5hKygiIitvLmUpOm8uY31mdW5jdGlvbiBhNXQodCxlKXt2YXIgbixyLHM7Zm9yKHM9d2kscj1uZXcgUyh1NChlKSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMjEzKSxuLmYmJiF0LmNbbi5jXSYmKHQuY1tuLmNdPSEwLHM9Yi5NYXRoLm1pbihzLGE1dCh0LEJ6KG4sZSkpKSk7cmV0dXJuIHQuaVtlLmRdPXQuaix0LmdbZS5kXT1iLk1hdGgubWluKHMsdC5qKyspLHQuZ1tlLmRdfWZ1bmN0aW9uICRvZSh0LGUpe3ZhciBuLHIscztmb3Iocz11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTExKSxyLmUuYj0obj1yLmIsbi5YZSgodWkoKSxkbCkpP24uSGYoKT09KHZlKCksUG4pPy1uLnJmKCkuYi1YdCh5ZShuLldlKGRsKSkpOlh0KHllKG4uV2UoZGwpKSk6bi5IZigpPT0odmUoKSxQbik/LW4ucmYoKS5iOjApfWZ1bmN0aW9uIFhwbih0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3Iobj1kMnQodC5lKSxvPWZkKHFNKG5jKGYydCh0LmUpKSx0LmQqdC5hLHQuYyp0LmIpLC0uNSksZT1uLmEtby5hLHM9bi5iLW8uYixkPTA7ZDx0LmM7ZCsrKXtmb3Iocj1lLGg9MDtoPHQuZDtoKyspbWhuKHQuZSxuZXcgYWgocixzLHQuYSx0LmIpKSYmU3EodCxoLGQsITEsITApLHIrPXQuYTtzKz10LmJ9fWZ1bmN0aW9uIFFwbih0KXt2YXIgZSxuLHI7aWYoamUoUmUocWUodCwodWkoKSxaTykpKSkpe2ZvcihyPW5ldyBoZSxuPW5ldyBhcihscihLMCh0KS5hLktjKCksbmV3IHopKTt6cihuKTspZT11KE1yKG4pLDc5KSxmdihlKSYmamUoUmUocWUoZSxiZnQpKSkmJihyLmNbci5jLmxlbmd0aF09ZSk7cmV0dXJuIHJ9ZWxzZSByZXR1cm4gd24oKSx3bigpLGlvfWZ1bmN0aW9uIGY2KHQpe3ZhciBlLG47aWYobj0hMSxfdCh0LDIwNCkpcmV0dXJuIG49ITAsdSh0LDIwNCkuYTtpZighbiYmX3QodCwyNTgpJiYoZT11KHQsMjU4KS5hJTE9PTAsZSkpcmV0dXJuIG49ITAscGUoVlhlKHUodCwyNTgpLmEpKTt0aHJvdyBpdChuZXcgdWQoIklkIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gaW50ZWdlcjogJyIrdCsiJy4iKSl9ZnVuY3Rpb24gWnBuKHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihvPW51bGwscz1uZXcgUUt0KCghdC5hJiYodC5hPW5ldyBadHQodCkpLHQuYSkpO2g1dChzKTspaWYobj11KHdxKHMpLDU2KSxyPShoPW4uVGcoKSxkPShUNChoKSxoLm8pLCFkfHwhbi5taChkKT9udWxsOnB3dChUaXQoZCksbi5haChkKSkpLHIhPW51bGwmJmhuKHIsZSkpe289bjticmVha31yZXR1cm4gb31mdW5jdGlvbiB6b2UodCxlLG4pe3ZhciByLHMsbyxoLGQ7aWYoamwobiwib2NjdXJyZW5jZXMiKSxuPT0wKXJldHVybiBkPXUoc3koV3godC5hKSxlKSwxNCksZD9kLmdjKCk6MDtpZihoPXUoc3koV3godC5hKSxlKSwxNCksIWgpcmV0dXJuIDA7aWYobz1oLmdjKCksbj49byloLiRiKCk7ZWxzZSBmb3Iocz1oLktjKCkscj0wO3I8bjtyKyspcy5QYigpLHMuUWIoKTtyZXR1cm4gb31mdW5jdGlvbiBKcG4odCxlLG4pe3ZhciByLHMsbyxoO3JldHVybiBqbChuLCJvbGRDb3VudCIpLGpsKDAsIm5ld0NvdW50Iikscj11KHN5KFd4KHQuYSksZSksMTQpLChyP3IuZ2MoKTowKT09bj8oamwoMCwiY291bnQiKSxzPShvPXUoc3koV3godC5hKSxlKSwxNCksbz9vLmdjKCk6MCksaD0tcyxoPjA/cmJ0KCk6aDwwJiZ6b2UodCxlLC1oKSwhMCk6ITF9ZnVuY3Rpb24gZEkodCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYoZD0wLHQuYj09MCl7Zm9yKGg9RXNlKHQsITApLGU9MCxyPWgscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sbj4wJiYoZCs9biwrK2UpO2U+MSYmKGQrPXQuYyooZS0xKSl9ZWxzZSBkPWJIdChTbmUobCQoUmkoUW50KHQuYSksbmV3IE1sKSxuZXcgaGEpKSk7cmV0dXJuIGQ+MD9kK3Qubi5kK3Qubi5hOjB9ZnVuY3Rpb24gZ0kodCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYoZD0wLHQuYj09MClkPWJIdChTbmUobCQoUmkoUW50KHQuYSksbmV3IHRoKSxuZXcgRmEpKSk7ZWxzZXtmb3IoaD1Uc2UodCwhMCksZT0wLHI9aCxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxuPjAmJihkKz1uLCsrZSk7ZT4xJiYoZCs9dC5jKihlLTEpKX1yZXR1cm4gZD4wP2QrdC5uLmIrdC5uLmM6MH1mdW5jdGlvbiB0Ym4odCxlKXt2YXIgbixyLHMsbztmb3Iobz11KHBvKHQuYixlKSwxMjQpLG49by5hLHM9dSh1KEFpKHQucixlKSwyMSksODQpLktjKCk7cy5PYigpOylyPXUocy5QYigpLDExMSksci5jJiYobi5hPWIuTWF0aC5tYXgobi5hLFZ3dChyLmMpKSk7aWYobi5hPjApc3dpdGNoKGUuZyl7Y2FzZSAyOm8ubi5jPXQuczticmVhaztjYXNlIDQ6by5uLmI9dC5zfX1mdW5jdGlvbiBlYm4odCxlKXt2YXIgbixyLHM7cmV0dXJuIG49dShRKGUsKEpmKCksYzcpKSwxOSkuYS11KFEodCxjNyksMTkpLmEsbj09MD8ocj1pYShuYyh1KFEodCwoWXAoKSx2TykpLDgpKSx1KFEodCxkUyksOCkpLHM9aWEobmModShRKGUsdk8pLDgpKSx1KFEoZSxkUyksOCkpLE1zKHIuYSpyLmIscy5hKnMuYikpOm59ZnVuY3Rpb24gbmJuKHQsZSl7dmFyIG4scixzO3JldHVybiBuPXUoUShlLChndigpLFBHKSksMTkpLmEtdShRKHQsUEcpLDE5KS5hLG49PTA/KHI9aWEobmModShRKHQsKGZjKCksek8pKSw4KSksdShRKHQsJFMpLDgpKSxzPWlhKG5jKHUoUShlLHpPKSw4KSksdShRKGUsJFMpLDgpKSxNcyhyLmEqci5iLHMuYSpzLmIpKTpufWZ1bmN0aW9uIHFvZSh0KXt2YXIgZSxuO3JldHVybiBuPW5ldyBNcCxuLmErPSJlXyIsZT1odW4odCksZSE9bnVsbCYmKG4uYSs9IiIrZSksdC5jJiZ0LmQmJihHcigobi5hKz0iICIsbiksaXEodC5jKSksR3IoaGMoKG4uYSs9IlsiLG4pLHQuYy5pKSwiXSIpLEdyKChuLmErPVVvdCxuKSxpcSh0LmQpKSxHcihoYygobi5hKz0iWyIsbiksdC5kLmkpLCJdIikpLG4uYX1mdW5jdGlvbiBIb2UodCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBuZXcgWkw7Y2FzZSAxOnJldHVybiBuZXcgY3R0O2Nhc2UgMjpyZXR1cm4gbmV3IG90dDtjYXNlIDM6cmV0dXJuIG5ldyBHQjtkZWZhdWx0OnRocm93IGl0KG5ldyBGbigiTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbGF5b3V0IHBoYXNlICIrKHQuZiE9bnVsbD90LmY6IiIrdC5nKSkpfX1mdW5jdGlvbiBvNXQodCxlLG4scixzKXt2YXIgbztzd2l0Y2gobz0wLHMuZyl7Y2FzZSAxOm89Yi5NYXRoLm1heCgwLGUuYit0LmItKG4uYityKSk7YnJlYWs7Y2FzZSAzOm89Yi5NYXRoLm1heCgwLC10LmItcik7YnJlYWs7Y2FzZSAyOm89Yi5NYXRoLm1heCgwLC10LmEtcik7YnJlYWs7Y2FzZSA0Om89Yi5NYXRoLm1heCgwLGUuYSt0LmEtKG4uYStyKSl9cmV0dXJuIG99ZnVuY3Rpb24gcmJuKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKG4pZm9yKHM9bi5hLmxlbmd0aCxyPW5ldyBlMihzKSxkPShyLmItci5hKSpyLmM8MD8oRnAoKSxJYik6bmV3IGpwKHIpO2QuT2IoKTspaD11KGQuUGIoKSwxOSksbz1QOChuLGguYSksazh0IGluIG8uYXx8bnV0IGluIG8uYT9nbW4odCxvLGUpOnl4bih0LG8sZSkselFlKHUodHIodC5iLHBFKG8pKSw3OSkpfWZ1bmN0aW9uIGM1dCh0KXt2YXIgZSxuO3N3aXRjaCh0LmIpe2Nhc2UtMTpyZXR1cm4hMDtjYXNlIDA6cmV0dXJuIG49dC50LG4+MXx8bj09LTE/KHQuYj0tMSwhMCk6KGU9RGgodCksZSYmKHRvKCksZS5DaigpPT1qMGUpPyh0LmI9LTEsITApOih0LmI9MSwhMSkpO2RlZmF1bHQ6Y2FzZSAxOnJldHVybiExfX1mdW5jdGlvbiBpYm4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihyPSghZS5zJiYoZS5zPW5ldyBmZShNdSxlLDIxLDE3KSksZS5zKSxvPW51bGwscz0wLGg9ci5pO3M8aDsrK3Mpc3dpdGNoKG49dShBdChyLHMpLDE3MCksSHcoVG8odCxuKSkpe2Nhc2UgMjpjYXNlIDM6IW8mJihvPW5ldyBoZSksby5jW28uYy5sZW5ndGhdPW59cmV0dXJuIG98fCh3bigpLHduKCksaW8pfWZ1bmN0aW9uIHU1dCh0LGUpe3ZhciBuLHIscyxvO2lmKGZpKHQpLHQuYyE9MHx8dC5hIT0xMjMpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLG8wZSkpKSk7aWYobz1lPT0xMTIscj10LmQsbj12OCh0LmksMTI1LHIpLG48MCl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksYzBlKSkpKTtyZXR1cm4gcz1QbCh0LmkscixuKSx0LmQ9bisxLEx0ZShzLG8sKHQuZSY1MTIpPT01MTIpfWZ1bmN0aW9uIHNibih0KXt2YXIgZTtpZihlPXUoUSh0LChUZSgpLF9TKSksMzE0KSxlPT0objYoKSxQNikpdGhyb3cgaXQobmV3IGpDKCJUaGUgaGllcmFyY2h5IGF3YXJlIHByb2Nlc3NvciAiK2UrIiBpbiBjaGlsZCBub2RlICIrdCsiIGlzIG9ubHkgYWxsb3dlZCBpZiB0aGUgcm9vdCBub2RlIHNwZWNpZmllcyB0aGUgc2FtZSBoaWVyYXJjaGljYWwgcHJvY2Vzc29yLiIpKX1mdW5jdGlvbiBhYm4odCxlKXtkZigpO3ZhciBuLHIscyxvLGgsZDtmb3Iobj1udWxsLGg9ZS5LYygpO2guT2IoKTspbz11KGguUGIoKSwxMjgpLCFvLm8mJihyPWtRZShvLmEpLHM9dWVuKG8uYSksZD1uZXcgVF8ocixzLG51bGwsdShvLmQuYS5lYygpLktjKCkuUGIoKSwxNykpLGxlKGQuYyxvLmEpLHQuY1t0LmMubGVuZ3RoXT1kLG4mJmxlKG4uZCxkKSxuPWQpfWZ1bmN0aW9uIG9ibih0LGUpe3ZhciBuLHIscztpZighZSlnaXQodCxudWxsKSxZOCh0LG51bGwpO2Vsc2UgaWYoZS5pJjQpZm9yKHI9IltdIixuPWUuYzs7bj1uLmMpe2lmKCEobi5pJjQpKXtzPXRidCgoUDAobiksbi5vK3IpKSxnaXQodCxzKSxZOCh0LHMpO2JyZWFrfXIrPSJbXSJ9ZWxzZSBzPXRidCgoUDAoZSksZS5vKSksZ2l0KHQscyksWTgodCxzKTt0LnlrKGUpfWZ1bmN0aW9uIGJfKHQsZSxuLHIscyl7dmFyIG8saCxkLHY7cmV0dXJuIHY9bW50KHQsdShzLDU2KSksVnQodikhPT1WdChzKT8oZD11KHQuZ1tuXSw3Miksbz1aZChlLHYpLHA5KHQsbixSc3QodCxuLG8pKSx4bCh0LmUpJiYoaD1HcCh0LDksby5haygpLHMsdixyLCExKSxUNHQoaCxuZXcgejAodC5lLDksdC5jLGQsbyxyLCExKSkscml0KGgpKSx2KTpzfWZ1bmN0aW9uIGNibih0LGUsbil7dmFyIHIscyxvLGgsZCx2O2ZvcihyPXUoQWkodC5jLGUpLDE1KSxzPXUoQWkodC5jLG4pLDE1KSxvPXIuWmMoci5nYygpKSxoPXMuWmMocy5nYygpKTtvLlNiKCkmJmguU2IoKTspaWYoZD11KG8uVWIoKSwxOSksdj11KGguVWIoKSwxOSksZCE9dilyZXR1cm4gcHUoZC5hLHYuYSk7cmV0dXJuIW8uT2IoKSYmIWguT2IoKT8wOm8uT2IoKT8xOi0xfWZ1bmN0aW9uIFZvZSh0LGUpe3ZhciBuLHIsczt0cnl7cmV0dXJuIHM9SmluKHQuYSxlKSxzfWNhdGNoKG8pe2lmKG89V2kobyksX3QobywzMikpe3RyeXtpZihyPXFsKGUsU2Esd2kpLG49VmYodC5hKSxyPj0wJiZyPG4ubGVuZ3RoKXJldHVybiBuW3JdfWNhdGNoKGgpe2lmKGg9V2koaCksIV90KGgsMTI3KSl0aHJvdyBpdChoKX1yZXR1cm4gbnVsbH1lbHNlIHRocm93IGl0KG8pfX1mdW5jdGlvbiBac3QodCxlKXt2YXIgbixyLHM7aWYocz1DNCgoJHUoKSx5YSksdC5UZygpLGUpLHMpcmV0dXJuIHRvKCksdShzLDY2KS5PaigpfHwocz1LeChUbyh5YSxzKSkpLHI9KG49dC5ZZyhzKSx1KG4+PTA/dC5fZyhuLCEwLCEwKTpkdih0LHMsITApLDE1MykpLHUociwyMTUpLmxsKGUpO3Rocm93IGl0KG5ldyBGbihsYitlLm5lKCkrV2N0KSl9ZnVuY3Rpb24gdWJuKCl7VGJ0KCk7dmFyIHQ7cmV0dXJuIFQ1ZT91KF9FKChQcCgpLFloKSxCaCksMTkzOSk6KGlpKFAyLG5ldyBqZiksVjRuKCksdD11KF90KE5jKChQcCgpLFloKSxCaCksNTQ3KT9OYyhZaCxCaCk6bmV3IExYdCw1NDcpLFQ1ZT0hMCwkeG4odCksR3huKHQpLGtpKChFYnQoKSxzTHQpLHQsbmV3IG9KKSxrbyhZaCxCaCx0KSx0KX1mdW5jdGlvbiBsYm4odCxlKXt2YXIgbixyLHMsbzt0Lmo9LTEseGwodC5lKT8obj10Lmksbz10LmkhPTAsZ0QodCxlKSxyPW5ldyB6MCh0LmUsMyx0LmMsbnVsbCxlLG4sbykscz1lLlFrKHQuZSx0LmMsbnVsbCkscz14YWUodCxlLHMpLHM/KHMuRWkocikscy5GaSgpKTptaSh0LmUscikpOihnRCh0LGUpLHM9ZS5Rayh0LmUsdC5jLG51bGwpLHMmJnMuRmkoKSl9ZnVuY3Rpb24gZ3EodCxlKXt2YXIgbixyLHM7aWYocz0wLHI9ZVswXSxyPj10Lmxlbmd0aClyZXR1cm4tMTtmb3Iobj0oUnIocix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHIpKTtuPj00OCYmbjw9NTcmJihzPXMqMTArKG4tNDgpLCsrciwhKHI+PXQubGVuZ3RoKSk7KW49KFJyKHIsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChyKSk7cmV0dXJuIHI+ZVswXT9lWzBdPXI6cz0tMSxzfWZ1bmN0aW9uIGhibih0KXt2YXIgZSxuLHIscyxvO3JldHVybiBzPXUodC5hLDE5KS5hLG89dSh0LmIsMTkpLmEsbj1zLHI9byxlPWIuTWF0aC5tYXgoYi5NYXRoLmFicyhzKSxiLk1hdGguYWJzKG8pKSxzPD0wJiZzPT1vPyhuPTAscj1vLTEpOnM9PS1lJiZvIT1lPyhuPW8scj1zLG8+PTAmJisrbik6KG49LW8scj1zKSxuZXcgZmEocGUobikscGUocikpfWZ1bmN0aW9uIGZibih0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGs7Zm9yKHM9MDtzPGUubztzKyspZm9yKG89cy1lLmorbixoPTA7aDxlLnA7aCsrKWlmKGQ9aC1lLmsrcix2PW8saz1kLHYrPXQuaixrKz10Lmssdj49MCYmaz49MCYmdjx0Lm8mJms8dC5wJiYoIU1zZShlLHMsaCkmJlNzZSh0LG8sZCl8fGY0KGUscyxoKSYmIXUxbih0LG8sZCkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGRibih0LGUsbil7dmFyIHIscyxvLGgsZDtoPXQuYyxkPXQuZCxvPVlvKGx0KGN0KFdzLDEpLGVlLDgsMCxbaC5pLm4saC5uLGguYV0pKS5iLHM9KG8rWW8obHQoY3QoV3MsMSksZWUsOCwwLFtkLmkubixkLm4sZC5hXSkpLmIpLzIscj1udWxsLGguaj09KHZlKCksSG4pP3I9bmV3ICRlKGUraC5pLmMuYy5hK24scyk6cj1uZXcgJGUoZS1uLHMpLG04KHQuYSwwLHIpfWZ1bmN0aW9uIGZ2KHQpe3ZhciBlLG4scixzO2ZvcihlPW51bGwscj16cChEMShsdChjdChqMSwxKSxEZSwyMCwwLFsoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYyldKSkpO3pyKHIpOylpZihuPXUoTXIociksODIpLHM9RG8obiksIWUpZT1zO2Vsc2UgaWYoZSE9cylyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBKc3QodCxlLG4pe3ZhciByO2lmKCsrdC5qLGU+PXQuaSl0aHJvdyBpdChuZXcgeW8oaXV0K2UrRDIrdC5pKSk7aWYobj49dC5pKXRocm93IGl0KG5ldyB5byhzdXQrbitEMit0LmkpKTtyZXR1cm4gcj10Lmdbbl0sZSE9biYmKGU8bj9EYyh0LmcsZSx0LmcsZSsxLG4tZSk6RGModC5nLG4rMSx0LmcsbixlLW4pLHRzKHQuZyxlLHIpLHQuZWkoZSxyLG4pLHQuY2koKSkscn1mdW5jdGlvbiBsbih0LGUsbil7dmFyIHI7aWYocj11KHQuYy54YyhlKSwxNCkscilyZXR1cm4gci5GYyhuKT8oKyt0LmQsITApOiExO2lmKHI9dC5pYyhlKSxyLkZjKG4pKXJldHVybisrdC5kLHQuYy56YyhlLHIpLCEwO3Rocm93IGl0KG5ldyBkbXQoIk5ldyBDb2xsZWN0aW9uIHZpb2xhdGVkIHRoZSBDb2xsZWN0aW9uIHNwZWMiKSl9ZnVuY3Rpb24gcEkodCl7dmFyIGUsbixyO3JldHVybiB0PDA/MDp0PT0wPzMyOihyPS0odD4+MTYpLGU9cj4+MTYmMTYsbj0xNi1lLHQ9dD4+ZSxyPXQtMjU2LGU9cj4+MTYmOCxuKz1lLHQ8PD1lLHI9dC1FeSxlPXI+PjE2JjQsbis9ZSx0PDw9ZSxyPXQtbWQsZT1yPj4xNiYyLG4rPWUsdDw8PWUscj10Pj4xNCxlPXImfihyPj4xKSxuKzItZSl9ZnVuY3Rpb24gZ2JuKHQpe1V4KCk7dmFyIGUsbixyLHM7Zm9yKGRWPW5ldyBoZSxKdXQ9bmV3IF9yLFp1dD1uZXcgaGUsZT0oIXQuYSYmKHQuYT1uZXcgZmUocnMsdCwxMCwxMSkpLHQuYSksVTVuKGUpLHM9bmV3IG5yKGUpO3MuZSE9cy5pLmdjKCk7KXI9dShkcihzKSwzMyksUm8oZFYsciwwKT09LTEmJihuPW5ldyBoZSxsZShadXQsbiksZXNlKHIsbikpO3JldHVybiBadXR9ZnVuY3Rpb24gcGJuKHQsZSxuKXt2YXIgcixzLG8saDt0LmE9bi5iLmQsX3QoZSwzNTIpPyhzPXg0KHUoZSw3OSksITEsITEpLG89bEkocykscj1uZXcgRWEodCksdmEobyxyKSxDSShvLHMpLGUuV2UoKHVpKCksYTUpKSE9bnVsbCYmdmEodShlLldlKGE1KSw3NCkscikpOihoPXUoZSw0NzApLGguSGcoaC5EZygpK3QuYS5hKSxoLklnKGguRWcoKSt0LmEuYikpfWZ1bmN0aW9uIEdvZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGs7Zm9yKGs9WHQoeWUoUShlLChUZSgpLExTKSkpKSx2PXRbMF0ubi5hK3RbMF0uby5hK3RbMF0uZC5jK2ssZD0xO2Q8dC5sZW5ndGg7ZCsrKXI9dFtkXS5uLHM9dFtkXS5vLG49dFtkXS5kLG89ci5hLW4uYi12LG88MCYmKHIuYS09byksaD1lLmYsaC5hPWIuTWF0aC5tYXgoaC5hLHIuYStzLmEpLHY9ci5hK3MuYStuLmMra31mdW5jdGlvbiBiYm4odCxlKXt2YXIgbixyLHMsbyxoLGQ7cmV0dXJuIHI9dSh1KHRyKHQuZyxlLmEpLDQ2KS5hLDY1KSxzPXUodSh0cih0LmcsZS5iKSw0NikuYSw2NSksbz1yLmIsaD1zLmIsbj1QM24obyxoKSxuPj0wP246KGQ9RDkoaWEobmV3ICRlKGguYytoLmIvMixoLmQraC5hLzIpLG5ldyAkZShvLmMrby5iLzIsby5kK28uYS8yKSkpLC0oZGxlKG8saCktMSkqZCl9ZnVuY3Rpb24gd2JuKHQsZSxuKXt2YXIgcjtscyhuZXcgVG4obnVsbCwoIW4uYSYmKG4uYT1uZXcgZmUoSmksbiw2LDYpKSxuZXcgX24obi5hLDE2KSkpLG5ldyBMR3QodCxlKSksbHMobmV3IFRuKG51bGwsKCFuLm4mJihuLm49bmV3IGZlKHFvLG4sMSw3KSksbmV3IF9uKG4ubiwxNikpKSxuZXcgTUd0KHQsZSkpLHI9dShxZShuLCh1aSgpLGE1KSksNzQpLHImJmR5dChyLHQsZSl9ZnVuY3Rpb24gZHYodCxlLG4pe3ZhciByLHMsbztpZihvPUM0KCgkdSgpLHlhKSx0LlRnKCksZSksbylyZXR1cm4gdG8oKSx1KG8sNjYpLk9qKCl8fChvPUt4KFRvKHlhLG8pKSkscz0ocj10LllnKG8pLHUocj49MD90Ll9nKHIsITAsITApOmR2KHQsbywhMCksMTUzKSksdShzLDIxNSkuaGwoZSxuKTt0aHJvdyBpdChuZXcgRm4obGIrZS5uZSgpK1djdCkpfWZ1bmN0aW9uIGw1dCh0LGUsbixyKXt2YXIgcyxvLGgsZCx2O2lmKHM9dC5kW2VdLHMpe2lmKG89cy5nLHY9cy5pLHIhPW51bGwpe2ZvcihkPTA7ZDx2OysrZClpZihoPXUob1tkXSwxMzMpLGguU2goKT09biYmeWkocixoLmNkKCkpKXJldHVybiBofWVsc2UgZm9yKGQ9MDtkPHY7KytkKWlmKGg9dShvW2RdLDEzMyksVnQoaC5jZCgpKT09PVZ0KHIpKXJldHVybiBofXJldHVybiBudWxsfWZ1bmN0aW9uIGJJKHQsZSl7dmFyIG47aWYoZTwwKXRocm93IGl0KG5ldyBfUigiTmVnYXRpdmUgZXhwb25lbnQiKSk7aWYoZT09MClyZXR1cm4gZVY7aWYoZT09MXx8djN0KHQsZVYpfHx2M3QodCxzNykpcmV0dXJuIHQ7aWYoIXBjZSh0LDApKXtmb3Iobj0xOyFwY2UodCxuKTspKytuO3JldHVybiBlNChEaG4obiplKSxiSShibXQodCxuKSxlKSl9cmV0dXJuICQwbih0LGUpfWZ1bmN0aW9uIHZibih0LGUpe3ZhciBuLHIscztpZihWdCh0KT09PVZ0KGUpKXJldHVybiEwO2lmKHQ9PW51bGx8fGU9PW51bGx8fHQubGVuZ3RoIT1lLmxlbmd0aClyZXR1cm4hMTtmb3Iobj0wO248dC5sZW5ndGg7KytuKWlmKHI9dFtuXSxzPWVbbl0sIShWdChyKT09PVZ0KHMpfHxyIT1udWxsJiZ5aShyLHMpKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBVb2UodCl7eGJ0KCk7dmFyIGUsbixyO2Zvcih0aGlzLmI9JGJlLHRoaXMuYz0oYW8oKSxoMCksdGhpcy5mPShOVnQoKSxqYmUpLHRoaXMuYT10LHVidCh0aGlzLG5ldyB2bCkseXEodGhpcykscj1uZXcgUyh0LmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDgxKSxuLmR8fChlPW5ldyBvc3QobHQoY3QoYWx0LDEpLERlLDgxLDAsW25dKSksbGUodC5hLGUpKX1mdW5jdGlvbiBtYm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdjtpZighdHx8dC5jLmxlbmd0aD09MClyZXR1cm4gbnVsbDtmb3Iobz1uZXcgdlF0KGUsIW4pLHM9bmV3IFModCk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksNzApLFY0dChvLChWQygpLG5ldyBWYShyKSkpO3JldHVybiBoPW8uaSxoLmE9KHY9by5uLG8uZS5iK3YuZCt2LmEpLGguYj0oZD1vLm4sby5lLmErZC5iK2QuYyksb31mdW5jdGlvbiBXb2UodCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGQ9bEQodC5hKSxjMnQoZCxuZXcgb2YpLG49bnVsbCxzPWQsbz0wLGg9cy5sZW5ndGg7bzxoJiYocj1zW29dLHIuaz09KFZuKCksa3MpKTsrK28pZT11KFEociwoYWUoKSxvYykpLDYxKSwhKGUhPSh2ZSgpLEJuKSYmZSE9SG4pJiYobiYmdShRKG4sUjYpLDE1KS5GYyhyKSxuPXIpfWZ1bmN0aW9uIHlibih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGs7dj0oQW4oZSx0LmMubGVuZ3RoKSx1KHQuY1tlXSwzMjkpKSxGZyh0LGUpLHYuYi8yPj1uJiYocj1lLGs9KHYuYyt2LmEpLzIsaD1rLW4sdi5jPD1rLW4mJihzPW5ldyBEbnQodi5jLGgpLEhtKHQscisrLHMpKSxkPWsrbixkPD12LmEmJihvPW5ldyBEbnQoZCx2LmEpLEttKHIsdC5jLmxlbmd0aCksWEModC5jLHIsbykpKX1mdW5jdGlvbiBoNXQodCl7dmFyIGU7aWYoIXQuYyYmdC5nPT1udWxsKXQuZD10LnNpKHQuZiksRHIodCx0LmQpLGU9dC5kO2Vsc2V7aWYodC5nPT1udWxsKXJldHVybiEwO2lmKHQuaT09MClyZXR1cm4hMTtlPXUodC5nW3QuaS0xXSw0Nyl9cmV0dXJuIGU9PXQuYiYmbnVsbC5rbT49bnVsbC5qbSgpPyh3cSh0KSxoNXQodCkpOmUuT2IoKX1mdW5jdGlvbiB4Ym4odCxlLG4pe3ZhciByLHMsbyxoLGQ7aWYoZD1uLCFkJiYoZD1xd3QobmV3IHI4LDApKSx2cihkLGMxZSwxKSxkaGUodC5jLGUpLGg9RjRuKHQuYSxlKSxoLmdjKCk9PTEpS2xlKHUoaC5YYigwKSwzNyksZCk7ZWxzZSBmb3Iobz0xL2guZ2MoKSxzPWguS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMzcpLEtsZShyLFJjKGQsbykpO0xLZSh0LmEsaCxlKSxGdm4oZSksb3IoZCl9ZnVuY3Rpb24gWW9lKHQpe2lmKHRoaXMuYT10LHQuYy5pLms9PShWbigpLGtzKSl0aGlzLmM9dC5jLHRoaXMuZD11KFEodC5jLmksKGFlKCksb2MpKSw2MSk7ZWxzZSBpZih0LmQuaS5rPT1rcyl0aGlzLmM9dC5kLHRoaXMuZD11KFEodC5kLmksKGFlKCksb2MpKSw2MSk7ZWxzZSB0aHJvdyBpdChuZXcgRm4oIkVkZ2UgIit0KyIgaXMgbm90IGFuIGV4dGVybmFsIGVkZ2UuIikpfWZ1bmN0aW9uIEtvZSh0LGUpe3ZhciBuLHIscztzPXQuYix0LmI9ZSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgSnModCwxLDMscyx0LmIpKSxlP2UhPXQmJihRYyh0LGUuemIpLGhpdCh0LGUuZCksbj0ocj1lLmMscj8/ZS56YiksZGl0KHQsbj09bnVsbHx8aG4obixlLnpiKT9udWxsOm4pKTooUWModCxudWxsKSxoaXQodCwwKSxkaXQodCxudWxsKSl9ZnVuY3Rpb24gWG9lKHQpe3ZhciBlLG47aWYodC5mKXtmb3IoO3Qubjx0Lm87KXtpZihlPXUodC5qP3Quai5waSh0Lm4pOnQuay5YYih0Lm4pLDcyKSxuPWUuYWsoKSxfdChuLDk5KSYmdShuLDE4KS5CYiZkYyYmKCF0LmV8fG4uR2ooKSE9ajd8fG4uYWooKSE9MCkmJmUuZGQoKSE9bnVsbClyZXR1cm4hMDsrK3Qubn1yZXR1cm4hMX1lbHNlIHJldHVybiB0Lm48dC5vfWZ1bmN0aW9uIFFvZSh0LGUpe3ZhciBuO3RoaXMuZT0oV20oKSxMcih0KSxXbSgpLEUzdCh0KSksdGhpcy5jPShMcihlKSxFM3QoZSkpLEEydCh0aGlzLmUuSGQoKS5kYygpPT10aGlzLmMuSGQoKS5kYygpKSx0aGlzLmQ9d2llKHRoaXMuZSksdGhpcy5iPXdpZSh0aGlzLmMpLG49dDIoUW4sW2VlLERlXSxbNSwxXSw1LFt0aGlzLmUuSGQoKS5nYygpLHRoaXMuYy5IZCgpLmdjKCldLDIpLHRoaXMuYT1uLGxjbih0aGlzKX1mdW5jdGlvbiBab2UodCl7IUl1dCYmKEl1dD1leG4oKSk7dmFyIGU9dC5yZXBsYWNlKC9bXHgwMC1ceDFmXHhhZFx1MDYwMC1cdTA2MDNcdTA2ZGRcdTA3MGZcdTE3YjRcdTE3YjVcdTIwMGItXHUyMDBmXHUyMDI4LVx1MjAyZVx1MjA2MC1cdTIwNjRcdTIwNmEtXHUyMDZmXHVmZWZmXHVmZmY5LVx1ZmZmYiJcXF0vZyxmdW5jdGlvbihuKXtyZXR1cm4gY2luKG4pfSk7cmV0dXJuJyInK2UrJyInfWZ1bmN0aW9uIEpvZSh0KXtGdnQoKTt2YXIgZSxuO2Zvcih0aGlzLmI9YXBlLHRoaXMuYz1jcGUsdGhpcy5nPShGVnQoKSxzcGUpLHRoaXMuZD0oYW8oKSxoMCksdGhpcy5hPXQsUDV0KHRoaXMpLG49bmV3IFModC5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSw1NyksIWUuYSYmdld0KFhlZShuZXcgUnB0LGx0KGN0KG9WLDEpLERlLDU3LDAsW2VdKSksdCksZS5lPW5ldyB2JChlLmQpfWZ1bmN0aW9uIGtibih0KXt2YXIgZSxuLHIscyxvLGg7Zm9yKHM9dC5lLmMubGVuZ3RoLHI9TnQod2gsVHksMTUscywwLDEpLGg9bmV3IFModC5lKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxNDQpLHJbby5iXT1uZXcgWmk7Zm9yKG49bmV3IFModC5jKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwyODIpLHJbZS5jLmJdLkZjKGUpLHJbZS5kLmJdLkZjKGUpO3JldHVybiByfWZ1bmN0aW9uIEVibih0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3IoZD1VZCh0LmMubGVuZ3RoKSxzPW5ldyBTKHQpO3MuYTxzLmMuYy5sZW5ndGg7KXtmb3Iocj11KEoocyksMTApLGg9bmV3IEhzLG89RHMociksbj1uZXcgYXIobHIoby5hLktjKCksbmV3IHopKTt6cihuKTspZT11KE1yKG4pLDE3KSxlLmMuaT09ZS5kLml8fEZzKGgsZS5kLmkpO2QuY1tkLmMubGVuZ3RoXT1ofXJldHVybiBkfWZ1bmN0aW9uIFRibih0LGUpe3ZhciBuLHIscyxvLGg7aWYobj11KERuKHQuYSw0KSwxMjYpLGg9bj09bnVsbD8wOm4ubGVuZ3RoLGU+PWgpdGhyb3cgaXQobmV3IHFtKGUsaCkpO3JldHVybiBzPW5bZV0saD09MT9yPW51bGw6KHI9TnQoRmZ0LGx1dCw0MTUsaC0xLDAsMSksRGMobiwwLHIsMCxlKSxvPWgtZS0xLG8+MCYmRGMobixlKzEscixlLG8pKSxiRSh0LHIpLG1vZSh0LGUscyksc31mdW5jdGlvbiBkNigpe2Q2PVosdGs9dShBdChXdCgoZmJ0KCkscGMpLnFiKSw2KSwzNCksSjY9dShBdChXdChwYy5xYiksMyksMzQpLHpmdD11KEF0KFd0KHBjLnFiKSw0KSwzNCkscWZ0PXUoQXQoV3QocGMucWIpLDUpLDE4KSxjcSh0ayksY3EoSjYpLGNxKHpmdCksY3EocWZ0KSxBNWU9bmV3IHlsKGx0KGN0KE11LDEpLEI0LDE3MCwwLFt0ayxKNl0pKX1mdW5jdGlvbiB0Y2UodCxlKXt2YXIgbjt0aGlzLmQ9bmV3IE9DLHRoaXMuYj1lLHRoaXMuZT1uZXcgeG8oZS5xZigpKSxuPXQudS5IYygoWnUoKSxzUCkpLHQudS5IYyhzZyk/dC5EP3RoaXMuYT1uJiYhZS5JZigpOnRoaXMuYT0hMDp0LnUuSGMoQ2IpP24/dGhpcy5hPSEoZS56ZigpLktjKCkuT2IoKXx8ZS5CZigpLktjKCkuT2IoKSk6dGhpcy5hPSExOnRoaXMuYT0hMX1mdW5jdGlvbiBlY2UodCxlKXt2YXIgbixyLHMsbztmb3Iobj10Lm8uYSxvPXUodShBaSh0LnIsZSksMjEpLDg0KS5LYygpO28uT2IoKTspcz11KG8uUGIoKSwxMTEpLHMuZS5hPShyPXMuYixyLlhlKCh1aSgpLGRsKSk/ci5IZigpPT0odmUoKSxCbik/LXIucmYoKS5hLVh0KHllKHIuV2UoZGwpKSk6bitYdCh5ZShyLldlKGRsKSkpOnIuSGYoKT09KHZlKCksQm4pPy1yLnJmKCkuYTpuKX1mdW5jdGlvbiBuY2UodCxlKXt2YXIgbixyLHMsbztuPXUoUSh0LChUZSgpLFdsKSksMTAzKSxvPXUocWUoZSxDNyksNjEpLHM9dShRKHQsY3MpLDk4KSxzIT0odWEoKSxHMSkmJnMhPVRiP289PSh2ZSgpLFpvKSYmKG89dXh0KGUsbiksbz09Wm8mJihvPWE2KG4pKSk6KHI9WWxlKGUpLHI+MD9vPWE2KG4pOm89WUQoYTYobikpKSx3byhlLEM3LG8pfWZ1bmN0aW9uIENibih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKGg9dC5qLGUuYSE9ZS5iJiZacyhoLG5ldyBleCkscz1oLmMubGVuZ3RoLzJ8MCxyPTA7cjxzO3IrKylvPShBbihyLGguYy5sZW5ndGgpLHUoaC5jW3JdLDExMykpLG8uYyYmQnMoby5kLGUuYSk7Zm9yKG49cztuPGguYy5sZW5ndGg7bisrKW89KEFuKG4saC5jLmxlbmd0aCksdShoLmNbbl0sMTEzKSksby5jJiZCcyhvLmQsZS5iKX1mdW5jdGlvbiBfYm4odCxlLG4pe3ZhciByLHMsbztyZXR1cm4gcj10LmNbZS5jLnBdW2UucF0scz10LmNbbi5jLnBdW24ucF0sci5hIT1udWxsJiZzLmEhPW51bGw/KG89VW50KHIuYSxzLmEpLG88MD9rSSh0LGUsbik6bz4wJiZrSSh0LG4sZSksbyk6ci5hIT1udWxsPyhrSSh0LGUsbiksLTEpOnMuYSE9bnVsbD8oa0kodCxuLGUpLDEpOjB9ZnVuY3Rpb24gcmNlKHQsZSl7dmFyIG4scixzLG87dC5laigpPyhuPXQuVmkoKSxvPXQuZmooKSwrK3Quaix0LkhpKG4sdC5vaShuLGUpKSxyPXQuWmkoMyxudWxsLGUsbixvKSx0LmJqKCk/KHM9dC5jaihlLG51bGwpLHM/KHMuRWkocikscy5GaSgpKTp0LiRpKHIpKTp0LiRpKHIpKToobVh0KHQsZSksdC5iaigpJiYocz10LmNqKGUsbnVsbCkscyYmcy5GaSgpKSl9ZnVuY3Rpb24gcHEodCxlKXt2YXIgbixyLHMsbyxoO2ZvcihoPW91KHQuZS5UZygpLGUpLHM9bmV3IG94LG49dSh0LmcsMTE5KSxvPXQuaTstLW8+PTA7KXI9bltvXSxoLnJsKHIuYWsoKSkmJkRyKHMscik7IVVoZSh0LHMpJiZ4bCh0LmUpJiZuOCh0LGUuJGooKT9HcCh0LDYsZSwod24oKSxpbyksbnVsbCwtMSwhMSk6R3AodCxlLktqKCk/MjoxLGUsbnVsbCxudWxsLC0xLCExKSl9ZnVuY3Rpb24gVEUoKXtURT1aO3ZhciB0LGU7Zm9yKEQ2PU50KGo0LGVlLDkxLDMyLDAsMSksbFM9TnQoajQsZWUsOTEsMzIsMCwxKSx0PTEsZT0wO2U8PTE4O2UrKylENltlXT1KRCh0KSxsU1tlXT1KRChGMCh0LGUpKSx0PV9hKHQsNSk7Zm9yKDtlPGxTLmxlbmd0aDtlKyspRDZbZV09ZTQoRDZbZS0xXSxENlsxXSksbFNbZV09ZTQobFNbZS0xXSwocmIoKSxSdXQpKX1mdW5jdGlvbiBTYm4odCxlKXt2YXIgbixyLHMsbyxoO3JldHVybiB0LmE9PShrRSgpLG1TKT8hMDoobz1lLmEuYyxuPWUuYS5jK2UuYS5iLCEoZS5qJiYocj1lLkEsaD1yLmMuYy5hLXIuby5hLzIscz1vLShyLm4uYStyLm8uYSkscz5oKXx8ZS5xJiYocj1lLkMsaD1yLmMuYy5hLXIuby5hLzIscz1yLm4uYS1uLHM+aCkpKX1mdW5jdGlvbiBBYm4odCxlKXt2YXIgbjt2cihlLCJQYXJ0aXRpb24gcHJlcHJvY2Vzc2luZyIsMSksbj11KEJsKFJpKFdvKFJpKG5ldyBUbihudWxsLG5ldyBfbih0LmEsMTYpKSxuZXcgUUspLG5ldyB3TiksbmV3IFo1KSxjMihuZXcga2UsbmV3IGNlLG5ldyBYbixsdChjdChmbCwxKSxvZSwxMzIsMCxbKE8xKCksVWwpXSkpKSwxNSksbHMobi5PYygpLG5ldyB2Tiksb3IoZSl9ZnVuY3Rpb24gaWNlKHQpe19ydCgpO3ZhciBlLG4scixzLG8saCxkO2ZvcihuPW5ldyBhMixzPW5ldyBTKHQuZS5iKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KEoocyksMjkpLGg9bmV3IFMoci5hKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxMCksZD10Lmdbby5wXSxlPXUoWHcobixkKSwxNSksZXx8KGU9bmV3IGhlLG0yKG4sZCxlKSksZS5GYyhvKTtyZXR1cm4gbn1mdW5jdGlvbiBMYm4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihzPWUuYi5iLHQuYT1OdCh3aCxUeSwxNSxzLDAsMSksdC5iPU50KHBsLG8wLDI1LHMsMTYsMSksaD1laShlLmIsMCk7aC5iIT1oLmQuYzspbz11KHRpKGgpLDg2KSx0LmFbby5nXT1uZXcgWmk7Zm9yKHI9ZWkoZS5hLDApO3IuYiE9ci5kLmM7KW49dSh0aShyKSwxODgpLHQuYVtuLmIuZ10uRmMobiksdC5hW24uYy5nXS5GYyhuKX1mdW5jdGlvbiBzY2UodCl7dmFyIGU7cmV0dXJuIHQuRGImNjQ/bWYodCk6KGU9bmV3IF9oKG1mKHQpKSxlLmErPSIgKHN0YXJ0WDogIiwkMyhlLHQuaiksZS5hKz0iLCBzdGFydFk6ICIsJDMoZSx0LmspLGUuYSs9IiwgZW5kWDogIiwkMyhlLHQuYiksZS5hKz0iLCBlbmRZOiAiLCQzKGUsdC5jKSxlLmErPSIsIGlkZW50aWZpZXI6ICIsZ28oZSx0LmQpLGUuYSs9IikiLGUuYSl9ZnVuY3Rpb24gZjV0KHQpe3ZhciBlO3JldHVybiB0LkRiJjY0P0o5KHQpOihlPW5ldyBfaChKOSh0KSksZS5hKz0iIChvcmRlcmVkOiAiLExnKGUsKHQuQmImMjU2KSE9MCksZS5hKz0iLCB1bmlxdWU6ICIsTGcoZSwodC5CYiY1MTIpIT0wKSxlLmErPSIsIGxvd2VyQm91bmQ6ICIseGV0KGUsdC5zKSxlLmErPSIsIHVwcGVyQm91bmQ6ICIseGV0KGUsdC50KSxlLmErPSIpIixlLmEpfWZ1bmN0aW9uIGFjZSh0LGUsbixyLHMsbyxoLGQpe3ZhciB2O3JldHVybiBfdCh0LkNiLDg4KSYmZ3koc2wodSh0LkNiLDg4KSksNCksUWModCxuKSx0LmY9cixoRSh0LHMpLGRFKHQsbyksbEUodCxoKSxmRSh0LCExKSxxZyh0LCEwKSxnRSh0LGQpLHpnKHQsITApLFJnKHQsMCksdC5iPTAscnkodCwxKSx2PUYxKHQsZSxudWxsKSx2JiZ2LkZpKCksS2l0KHQsITEpLHR9ZnVuY3Rpb24gb2NlKHQsZSl7dmFyIG4scixzLG87cmV0dXJuIG49dShOYyh0LmEsZSksNTEyKSxufHwocj1uZXcgcXJ0KGUpLHM9KE4kKCksJDE/bnVsbDpyLmMpLG89UGwocywwLGIuTWF0aC5tYXgoMCxUaihzLEN1KDQ2KSkpKSx0SmUocixvY2UodCxvKSksKCQxP251bGw6ci5jKS5sZW5ndGg9PTAmJlZXdChyLG5ldyB0ZSksa28odC5hLCQxP251bGw6ci5jLHIpLHIpfWZ1bmN0aW9uIE1ibih0LGUpe3ZhciBuO3QuYj1lLHQuZz1uZXcgaGUsbj1GYm4odC5iKSx0LmU9bix0LmY9bix0LmM9amUoUmUoUSh0LmIsKHNxKCksVkV0KSkpKSx0LmE9eWUoUSh0LmIsKHVpKCksVzYpKSksdC5hPT1udWxsJiYodC5hPTEpLFh0KHQuYSk+MT90LmUqPVh0KHQuYSk6dC5mLz1YdCh0LmEpLHVsbih0KSxnZm4odCksWHZuKHQpLEp0KHQuYiwob18oKSxmViksdC5nKX1mdW5jdGlvbiBjY2UodCxlLG4pe3ZhciByLHMsbyxoLGQsdjtmb3Iocj0wLHY9bixlfHwocj1uKih0LmMubGVuZ3RoLTEpLHYqPS0xKSxvPW5ldyBTKHQpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3Iocz11KEoobyksMTApLEp0KHMsKFRlKCksSWQpLCh0MCgpLFVHKSkscy5vLmE9cixkPUdnKHMsKHZlKCksSG4pKS5LYygpO2QuT2IoKTspaD11KGQuUGIoKSwxMSksaC5uLmE9cjtyKz12fX1mdW5jdGlvbiBkNXQodCxlLG4pe3ZhciByLHMsbzt0LmVqKCk/KG89dC5maigpLFVEKHQsZSxuKSxyPXQuWmkoMyxudWxsLG4sZSxvKSx0LmJqKCk/KHM9dC5jaihuLG51bGwpLHQuaWooKSYmKHM9dC5qaihuLHMpKSxzPyhzLkVpKHIpLHMuRmkoKSk6dC4kaShyKSk6dC4kaShyKSk6KFVEKHQsZSxuKSx0LmJqKCkmJihzPXQuY2oobixudWxsKSxzJiZzLkZpKCkpKX1mdW5jdGlvbiBnNih0LGUsbil7dmFyIHIscyxvLGgsZCx2O3JldHVybiBkPXQuR2sobiksZCE9bj8oaD10LmdbZV0sdj1kLHA5KHQsZSx0Lm9pKGUsdikpLG89aCx0LmdpKGUsdixvKSx0LnJrKCkmJihyPW4scz10LmRqKHIsbnVsbCksIXUoZCw0OSkuZWgoKSYmKHM9dC5jaih2LHMpKSxzJiZzLkZpKCkpLHhsKHQuZSkmJm44KHQsdC5aaSg5LG4sZCxlLCExKSksZCk6bn1mdW5jdGlvbiBEYm4odCxlKXt2YXIgbixyLHMsbztmb3Iocj1uZXcgUyh0LmEuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTg5KSxuLmc9ITA7Zm9yKG89bmV3IFModC5hLmIpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDgxKSxzLms9amUoUmUodC5lLktiKG5ldyBmYShzLGUpKSkpLHMuZC5nPXMuZC5nJmplKFJlKHQuZS5LYihuZXcgZmEocyxlKSkpKTtyZXR1cm4gdH1mdW5jdGlvbiB1Y2UodCl7dmFyIGUsbixyLHMsbztpZihuPShlPXUoVmYoWGEpLDkpLG5ldyBzaChlLHUoZmYoZSxlLmxlbmd0aCksOSksMCkpLG89dShRKHQsKGFlKCksSnUpKSwxMCksbylmb3Iocz1uZXcgUyhvLmopO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDExKSxWdChRKHIsX2kpKT09PVZ0KHQpJiZ2OShuZXcgTDEoci5iKSkmJnZmKG4sci5qKTtyZXR1cm4gbn1mdW5jdGlvbiBsY2UodCxlLG4pe3ZhciByLHMsbyxoLGQ7aWYoIXQuZFtuLnBdKXtmb3Iocz1uZXcgYXIobHIoRHMobikuYS5LYygpLG5ldyB6KSk7enIocyk7KXtmb3Iocj11KE1yKHMpLDE3KSxkPXIuZC5pLGg9bmV3IGFyKGxyKGpvKGQpLmEuS2MoKSxuZXcgeikpO3pyKGgpOylvPXUoTXIoaCksMTcpLG8uYy5pPT1lJiYodC5hW28ucF09ITApO2xjZSh0LGUsZCl9dC5kW24ucF09ITB9fWZ1bmN0aW9uIElibih0LGUpe3ZhciBuLHIscyxvLGgsZCx2O2lmKHI9YmllKHQuRGImMjU0KSxyPT0xKXQuRWI9bnVsbDtlbHNlIGlmKG89dTIodC5FYikscj09MilzPVNzdCh0LGUpLHQuRWI9b1tzPT0wPzE6MF07ZWxzZXtmb3IoaD1OdChRbixEZSwxLHItMSw1LDEpLG49MixkPTAsdj0wO248PTEyODtuPDw9MSluPT1lPysrZDp0LkRiJm4mJihoW3YrK109b1tkKytdKTt0LkViPWh9dC5EYiY9fmV9ZnVuY3Rpb24gT2JuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iocj0oIWUucyYmKGUucz1uZXcgZmUoTXUsZSwyMSwxNykpLGUucyksbz1udWxsLHM9MCxoPXIuaTtzPGg7KytzKXN3aXRjaChuPXUoQXQocixzKSwxNzApLEh3KFRvKHQsbikpKXtjYXNlIDQ6Y2FzZSA1OmNhc2UgNjp7IW8mJihvPW5ldyBoZSksby5jW28uYy5sZW5ndGhdPW47YnJlYWt9fXJldHVybiBvfHwod24oKSx3bigpLGlvKX1mdW5jdGlvbiBnNXQodCl7dmFyIGU7c3dpdGNoKGU9MCx0KXtjYXNlIDEwNTplPTI7YnJlYWs7Y2FzZSAxMDk6ZT04O2JyZWFrO2Nhc2UgMTE1OmU9NDticmVhaztjYXNlIDEyMDplPTE2O2JyZWFrO2Nhc2UgMTE3OmU9MzI7YnJlYWs7Y2FzZSAxMTk6ZT02NDticmVhaztjYXNlIDcwOmU9MjU2O2JyZWFrO2Nhc2UgNzI6ZT0xMjg7YnJlYWs7Y2FzZSA4ODplPTUxMjticmVhaztjYXNlIDQ0OmU9eGZ9cmV0dXJuIGV9ZnVuY3Rpb24gUGJuKHQsZSxuLHIscyl7dmFyIG8saCxkLHY7aWYoVnQodCk9PT1WdChlKSYmcj09cyl7YWxlKHQscixuKTtyZXR1cm59Zm9yKGQ9MDtkPHI7ZCsrKXtmb3IoaD0wLG89dFtkXSx2PTA7djxzO3YrKyloPVBhKFBhKF9hKE5zKG8sY28pLE5zKGVbdl0sY28pKSxOcyhuW2Qrdl0sY28pKSxOcyhBcihoKSxjbykpLG5bZCt2XT1BcihoKSxoPVZtKGgsMzIpO25bZCtzXT1BcihoKX19ZnVuY3Rpb24gRmJuKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE07Zm9yKEM9MCxrPTAscz10LmEsZD1zLmEuZ2MoKSxyPXMuYS5lYygpLktjKCk7ci5PYigpOyluPXUoci5QYigpLDU2MSksZT0obi5iJiZTYXQobiksbi5hKSxNPWUuYSxoPWUuYixDKz1NK2gsays9TSpoO3JldHVybiB2PWIuTWF0aC5zcXJ0KDQwMCpkKmstNCprK0MqQykrQyxvPTIqKDEwMCpkLTEpLG89PTA/djp2L299ZnVuY3Rpb24gaGNlKHQsZSl7ZS5iIT0wJiYoaXNOYU4odC5zKT90LnM9WHQoKFpuKGUuYiE9MCkseWUoZS5hLmEuYykpKTp0LnM9Yi5NYXRoLm1pbih0LnMsWHQoKFpuKGUuYiE9MCkseWUoZS5hLmEuYykpKSksaXNOYU4odC5jKT90LmM9WHQoKFpuKGUuYiE9MCkseWUoZS5jLmIuYykpKTp0LmM9Yi5NYXRoLm1heCh0LmMsWHQoKFpuKGUuYiE9MCkseWUoZS5jLmIuYykpKSkpfWZ1bmN0aW9uIHdfKHQpe3ZhciBlLG4scixzO2ZvcihlPW51bGwscj16cChEMShsdChjdChqMSwxKSxEZSwyMCwwLFsoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYyldKSkpO3pyKHIpOylpZihuPXUoTXIociksODIpLHM9RG8obiksIWUpZT1lcyhzKTtlbHNlIGlmKGUhPWVzKHMpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHRhdCh0LGUpe3ZhciBuLHIscyxvO3QuZWooKT8obj10Lmksbz10LmZqKCksZ0QodCxlKSxyPXQuWmkoMyxudWxsLGUsbixvKSx0LmJqKCk/KHM9dC5jaihlLG51bGwpLHQuaWooKSYmKHM9dC5qaihlLHMpKSxzPyhzLkVpKHIpLHMuRmkoKSk6dC4kaShyKSk6dC4kaShyKSk6KGdEKHQsZSksdC5iaigpJiYocz10LmNqKGUsbnVsbCkscyYmcy5GaSgpKSl9ZnVuY3Rpb24gZmNlKHQsZSxuKXt2YXIgcixzLG87dC5laigpPyhvPXQuZmooKSwrK3Quaix0LkhpKGUsdC5vaShlLG4pKSxyPXQuWmkoMyxudWxsLG4sZSxvKSx0LmJqKCk/KHM9dC5jaihuLG51bGwpLHM/KHMuRWkocikscy5GaSgpKTp0LiRpKHIpKTp0LiRpKHIpKTooKyt0LmosdC5IaShlLHQub2koZSxuKSksdC5iaigpJiYocz10LmNqKG4sbnVsbCkscyYmcy5GaSgpKSl9ZnVuY3Rpb24gTmJuKHQpe3ZhciBlLG4scixzO2ZvcihzPXQubGVuZ3RoLGU9bnVsbCxyPTA7cjxzO3IrKyluPShScihyLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQocikpLGhkKCIuKis/e1soKXxcXF4kIixDdShuKSk+PTA/KGV8fChlPW5ldyAkQyxyPjAmJmdvKGUsdC5zdWJzdHIoMCxyKSkpLGUuYSs9IlxcIixTOChlLG4meXMpKTplJiZTOChlLG4meXMpO3JldHVybiBlP2UuYTp0fWZ1bmN0aW9uIEJibih0KXt2YXIgZTtpZighdC5hKXRocm93IGl0KG5ldyBObygiSURhdGFUeXBlIGNsYXNzIGV4cGVjdGVkIGZvciBsYXlvdXQgb3B0aW9uICIrdC5mKSk7aWYoZT1Hc24odC5hKSxlPT1udWxsKXRocm93IGl0KG5ldyBObygiQ291bGRuJ3QgY3JlYXRlIG5ldyBpbnN0YW5jZSBvZiBwcm9wZXJ0eSAnIit0LmYrIicuICIrYWRlKyhQMChnUCksZ1AuaykrZDh0KSk7cmV0dXJuIHUoZSw0MTQpfWZ1bmN0aW9uIGVhdCh0KXt2YXIgZSxuLHIscyxvO3JldHVybiBvPXQuZWgoKSxvJiZvLmtoKCkmJihzPVpwKHQsbykscyE9byk/KG49dC5WZygpLHI9KGU9dC5WZygpLGU+PTA/dC5RZyhudWxsKTp0LmVoKCkuaWgodCwtMS1lLG51bGwsbnVsbCkpLHQuUmcodShzLDQ5KSxuKSxyJiZyLkZpKCksdC5MZygpJiZ0Lk1nKCkmJm4+LTEmJm1pKHQsbmV3IEpzKHQsOSxuLG8scykpLHMpOm99ZnVuY3Rpb24gZGNlKHQpe3ZhciBlLG4scixzLG8saCxkLHY7Zm9yKGg9MCxvPXQuZi5lLHI9MDtyPG8uYy5sZW5ndGg7KytyKWZvcihkPShBbihyLG8uYy5sZW5ndGgpLHUoby5jW3JdLDE0NCkpLHM9cisxO3M8by5jLmxlbmd0aDsrK3Mpdj0oQW4ocyxvLmMubGVuZ3RoKSx1KG8uY1tzXSwxNDQpKSxuPVdwKGQuZCx2LmQpLGU9bi10LmFbZC5iXVt2LmJdLGgrPXQuaVtkLmJdW3YuYl0qZSplO3JldHVybiBofWZ1bmN0aW9uIFJibih0LGUpe3ZhciBuO2lmKCFVcyhlLChUZSgpLHV1KSkmJihuPXVkbih1KFEoZSxFVHQpLDM2MCksdShRKHQsdXUpLDE2MykpLEp0KGUsRVR0LG4pLCF6cihuZXcgYXIobHIoVTAoZSkuYS5LYygpLG5ldyB6KSkpKSlzd2l0Y2gobi5nKXtjYXNlIDE6SnQoZSx1dSwoZGgoKSxFUykpO2JyZWFrO2Nhc2UgMjpKdChlLHV1LChkaCgpLFRTKSl9fWZ1bmN0aW9uIGpibih0LGUpe3ZhciBuO0t2bih0KSx0LmE9KG49bmV3IHdldCxscyhuZXcgVG4obnVsbCxuZXcgX24oZS5kLDE2KSksbmV3IFl0dChuKSksbiksc3ZuKHQsdShRKGUuYiwoVGUoKSxpaHQpKSwzNzYpKSxaZm4odCksVmJuKHQpLGhkbih0KSxKZm4odCksWTNuKHQsZSksbHMoV28obmV3IFRuKG51bGwsVFp0KEVubih0LmIpLmEpKSxuZXcgQTMpLG5ldyB6WCksZS5hPSExLHQuYT1udWxsfWZ1bmN0aW9uIGdjZSgpe040dC5jYWxsKHRoaXMsWkUsKFN3KCksRzRlKSksdGhpcy5wPW51bGwsdGhpcy5hPW51bGwsdGhpcy5mPW51bGwsdGhpcy5uPW51bGwsdGhpcy5nPW51bGwsdGhpcy5jPW51bGwsdGhpcy5pPW51bGwsdGhpcy5qPW51bGwsdGhpcy5kPW51bGwsdGhpcy5iPW51bGwsdGhpcy5lPW51bGwsdGhpcy5rPW51bGwsdGhpcy5vPW51bGwsdGhpcy5zPW51bGwsdGhpcy5xPSExLHRoaXMucj0hMX1mdW5jdGlvbiBDRSgpe0NFPVosT2Z0PW5ldyBQeChNMWUsMCksbFU9bmV3IFB4KCJJTlNJREVfU0VMRl9MT09QUyIsMSksaFU9bmV3IFB4KCJNVUxUSV9FREdFUyIsMiksdVU9bmV3IFB4KCJFREdFX0xBQkVMUyIsMyksSWZ0PW5ldyBQeCgiUE9SVFMiLDQpLGNVPW5ldyBQeCgiQ09NUE9VTkQiLDUpLG9VPW5ldyBQeCgiQ0xVU1RFUlMiLDYpLERmdD1uZXcgUHgoIkRJU0NPTk5FQ1RFRCIsNyl9ZnVuY3Rpb24gcGNlKHQsZSl7dmFyIG4scixzO2lmKGU9PTApcmV0dXJuKHQuYVswXSYxKSE9MDtpZihlPDApdGhyb3cgaXQobmV3IF9SKCJOZWdhdGl2ZSBiaXQgYWRkcmVzcyIpKTtpZihzPWU+PjUscz49dC5kKXJldHVybiB0LmU8MDtpZihuPXQuYVtzXSxlPTE8PChlJjMxKSx0LmU8MCl7aWYocj1JbmUodCksczxyKXJldHVybiExO3I9PXM/bj0tbjpuPX5ufXJldHVybihuJmUpIT0wfWZ1bmN0aW9uICRibih0LGUsbixyKXt2YXIgczt1KG4uYiw2NSksdShuLmIsNjUpLHUoci5iLDY1KSx1KHIuYiw2NSkscz1pYShuYyh1KG4uYiw2NSkuYyksdShyLmIsNjUpLmMpLGpqKHMsTW9lKHUobi5iLDY1KSx1KHIuYiw2NSkscykpLHUoci5iLDY1KSx1KHIuYiw2NSksdShyLmIsNjUpLmMuYStzLmEsdShyLmIsNjUpLmMuYitzLmIsdShyLmIsNjUpLHh1KHIuYSxuZXcgQXd0KHQsZSxyKSl9ZnVuY3Rpb24gcDV0KHQsZSl7dmFyIG4scixzLG8saCxkLHY7aWYobz1lLmUsbyl7Zm9yKG49ZWF0KG8pLHI9dSh0LmcsNjc0KSxoPTA7aDx0Lmk7KytoKWlmKHY9cltoXSx4c3Qodik9PW4mJihzPSghdi5kJiYodi5kPW5ldyBBcyhobyx2LDEpKSx2LmQpLGQ9dShuLmFoKHdhdChvLG8uQ2Isby5EYj4+MTYpKSwxNSkuWGMobyksZDxzLmkpKXJldHVybiBwNXQodCx1KEF0KHMsZCksODcpKX1yZXR1cm4gZX1mdW5jdGlvbiBEKHQsZSxuKXt2YXIgcj1RSCxzLG89clt0XSxoPW8gaW5zdGFuY2VvZiBBcnJheT9vWzBdOm51bGw7byYmIWg/bD1vOihsPShzPWUmJmUucHJvdG90eXBlLCFzJiYocz1RSFtlXSksbGluKHMpKSxsLmhtPW4sIWUmJihsLmltPUV0KSxyW3RdPWwpO2Zvcih2YXIgZD0zO2Q8YXJndW1lbnRzLmxlbmd0aDsrK2QpYXJndW1lbnRzW2RdLnByb3RvdHlwZT1sO2gmJihsLmdtPWgpfWZ1bmN0aW9uIHpyKHQpe2Zvcih2YXIgZTshdShMcih0LmEpLDQ3KS5PYigpOyl7aWYodC5kPUh1bih0KSwhdC5kKXJldHVybiExO2lmKHQuYT11KHQuZC5QYigpLDQ3KSxfdCh0LmEsMzkpKXtpZihlPXUodC5hLDM5KSx0LmE9ZS5hLCF0LmImJih0LmI9bmV3IEIzKSxVcCh0LmIsdC5kKSxlLmIpZm9yKDshQkMoZS5iKTspVXAodC5iLHUob25uKGUuYiksNDcpKTt0LmQ9ZS5kfX1yZXR1cm4hMH1mdW5jdGlvbiBiNXQodCxlKXt2YXIgbixyLHMsbyxoO2ZvcihvPWU9PW51bGw/MDp0LmIuc2UoZSkscj0obj10LmEuZ2V0KG8pLG4/P25ldyBBcnJheSksaD0wO2g8ci5sZW5ndGg7aCsrKWlmKHM9cltoXSx0LmIucmUoZSxzLmNkKCkpKXJldHVybiByLmxlbmd0aD09MT8oci5sZW5ndGg9MCxEWmUodC5hLG8pKTpyLnNwbGljZShoLDEpLC0tdC5jLHckKHQuYikscy5kZCgpO3JldHVybiBudWxsfWZ1bmN0aW9uIHc1dCh0LGUpe3ZhciBuLHIscyxvO2ZvcihzPTEsZS5qPSEwLG89bnVsbCxyPW5ldyBTKHU0KGUpKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwyMTMpLHQuY1tuLmNdfHwodC5jW24uY109ITAsbz1CeihuLGUpLG4uZj9zKz13NXQodCxvKTohby5qJiZuLmE9PW4uZS5lLW4uZC5lJiYobi5mPSEwLEZzKHQucCxuKSxzKz13NXQodCxvKSkpO3JldHVybiBzfWZ1bmN0aW9uIHpibih0KXt2YXIgZSxuLHI7Zm9yKG49bmV3IFModC5hLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksODEpLHI9KE9uKDApLDApLHI+MCYmKCEoQnAodC5hLmMpJiZlLm4uZCkmJiEoYjgodC5hLmMpJiZlLm4uYikmJihlLmcuZCs9Yi5NYXRoLm1heCgwLHIvMi0uNSkpLCEoQnAodC5hLmMpJiZlLm4uYSkmJiEoYjgodC5hLmMpJiZlLm4uYykmJihlLmcuYS09ci0xKSl9ZnVuY3Rpb24gYmNlKHQpe3ZhciBlLG4scixzLG87aWYocz1uZXcgaGUsbz11bGUodCxzKSxlPXUoUSh0LChhZSgpLEp1KSksMTApLGUpZm9yKHI9bmV3IFMoZS5qKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxMSksVnQoUShuLF9pKSk9PT1WdCh0KSYmKG89Yi5NYXRoLm1heChvLHVsZShuLHMpKSk7cmV0dXJuIHMuYy5sZW5ndGg9PTB8fEp0KHQsSzQsbyksbyE9LTE/czpudWxsfWZ1bmN0aW9uIHdjZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2O289dShOZShlLmUsMCksMTcpLmMscj1vLmkscz1yLmssdj11KE5lKG4uZywwKSwxNykuZCxoPXYuaSxkPWguayxzPT0oVm4oKSx0YSk/SnQodCwoYWUoKSxyMSksdShRKHIscjEpLDExKSk6SnQodCwoYWUoKSxyMSksbyksZD09dGE/SnQodCwoYWUoKSwkaCksdShRKGgsJGgpLDExKSk6SnQodCwoYWUoKSwkaCksdil9ZnVuY3Rpb24gdmNlKHQsZSl7dmFyIG4scixzLG87Zm9yKG89QXIoX2EoaTAsWGQoQXIoX2EoZT09bnVsbD8wOkhpKGUpLHMwKSksMTUpKSksbj1vJnQuYi5sZW5ndGgtMSxzPW51bGwscj10LmJbbl07cjtzPXIscj1yLmEpaWYoci5kPT1vJiZwZChyLmksZSkpcmV0dXJuIHM/cy5hPXIuYTp0LmJbbl09ci5hLGhIdChyLmMsci5mKSxkTShyLmIsci5lKSwtLXQuZiwrK3QuZSwhMDtyZXR1cm4hMX1mdW5jdGlvbiB2NXQodCxlKXt2YXIgbixyLHMsbyxoO3JldHVybiBlJj02MyxuPXQuaCxyPShuJk5JKSE9MCxyJiYobnw9LTEwNDg1NzYpLGU8MjI/KGg9bj4+ZSxvPXQubT4+ZXxuPDwyMi1lLHM9dC5sPj5lfHQubTw8MjItZSk6ZTw0ND8oaD1yP1owOjAsbz1uPj5lLTIyLHM9dC5tPj5lLTIyfG48PDQ0LWUpOihoPXI/WjA6MCxvPXI/aGw6MCxzPW4+PmUtNDQpLGl1KHMmaGwsbyZobCxoJlowKX1mdW5jdGlvbiBuYXQodCl7dmFyIGUsbixyLHMsbyxoO2Zvcih0aGlzLmM9bmV3IGhlLHRoaXMuZD10LHI9YXMscz1hcyxlPUNzLG49Q3MsaD1laSh0LDApO2guYiE9aC5kLmM7KW89dSh0aShoKSw4KSxyPWIuTWF0aC5taW4ocixvLmEpLHM9Yi5NYXRoLm1pbihzLG8uYiksZT1iLk1hdGgubWF4KGUsby5hKSxuPWIuTWF0aC5tYXgobixvLmIpO3RoaXMuYT1uZXcgYWgocixzLGUtcixuLXMpfWZ1bmN0aW9uIG1jZSh0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3Iobz1uZXcgUyh0LmIpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSwyOSksZD1uZXcgUyhzLmEpO2QuYTxkLmMuYy5sZW5ndGg7KWZvcihoPXUoSihkKSwxMCksaC5rPT0oVm4oKSxMbCkmJnA2KGgsZSkscj1uZXcgYXIobHIoRHMoaCkuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShNcihyKSwxNyksbnJlKG4sZSl9ZnVuY3Rpb24gbTV0KHQpe3ZhciBlLG4scjt0aGlzLmM9dCxyPXUoUSh0LChUZSgpLFdsKSksMTAzKSxlPVh0KHllKFEodCxyRykpKSxuPVh0KHllKFEodCxrOXQpKSkscj09KGFvKCksemgpfHxyPT1DZnx8cj09aDA/dGhpcy5iPWUqbjp0aGlzLmI9MS8oZSpuKSx0aGlzLmo9WHQoeWUoUSh0LHQ1KSkpLHRoaXMuZT1YdCh5ZShRKHQsJHYpKSksdGhpcy5mPXQuYi5jLmxlbmd0aH1mdW5jdGlvbiBxYm4odCl7dmFyIGUsbjtmb3IodC5lPU50KENyLFhyLDI1LHQucC5jLmxlbmd0aCwxNSwxKSx0Lms9TnQoQ3IsWHIsMjUsdC5wLmMubGVuZ3RoLDE1LDEpLG49bmV3IFModC5wKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMCksdC5lW2UucF09ajAobmV3IGFyKGxyKGpvKGUpLmEuS2MoKSxuZXcgeikpKSx0LmtbZS5wXT1qMChuZXcgYXIobHIoRHMoZSkuYS5LYygpLG5ldyB6KSkpfWZ1bmN0aW9uIEhibih0KXt2YXIgZSxuLHIscyxvLGg7Zm9yKHM9MCx0LnE9bmV3IGhlLGU9bmV3IEhzLGg9bmV3IFModC5wKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zm9yKG89dShKKGgpLDEwKSxvLnA9cyxyPW5ldyBhcihscihEcyhvKS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KE1yKHIpLDE3KSxGcyhlLG4uZC5pKTtlLmEuQmMobykhPW51bGwsbGUodC5xLG5ldyBFOShlKSksZS5hLiRiKCksKytzfX1mdW5jdGlvbiBndigpe2d2PVosZl90PW5ldyBPdygyMCksVHllPW5ldyBlbygodWkoKSxVMiksZl90KSxnX3Q9bmV3IGVvKFcyLDIwKSxteWU9bmV3IGVvKFc2LEdFKSxQRz1uZXcgZW8oWkcscGUoMSkpLF95ZT1uZXcgZW8oVGZ0LChObigpLCEwKSksbF90PVFPLHh5ZT1HMixreWU9YzUsRXllPXhiLHl5ZT1vNSxoX3Q9dFAsQ3llPVF5LFN5ZT0obXl0KCksdnllKSxkX3Q9d3llfWZ1bmN0aW9uIHljZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztpZih0LmEuZj4wJiZfdChlLDQyKSYmKHQuYS5xaigpLGs9dShlLDQyKSx2PWsuY2QoKSxvPXY9PW51bGw/MDpIaSh2KSxoPXJ3dCh0LmEsbyksbj10LmEuZFtoXSxuKSl7Zm9yKHI9dShuLmcsMzY3KSxDPW4uaSxkPTA7ZDxDOysrZClpZihzPXJbZF0scy5TaCgpPT1vJiZzLkZiKGspKXJldHVybiB5Y2UodCxrKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBWYm4odCl7dmFyIGUsbixyLHM7Zm9yKHM9dShBaSh0LmEsKGI0KCkselYpKSwxNSkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTAxKSxuPShlPXF4KHIuayksZS5IYygodmUoKSxQbikpP2UuSGMoSG4pP2UuSGMobXIpP2UuSGMoQm4pP251bGw6eTJlOmsyZTp4MmU6bTJlKSxfOCh0LHIsblswXSwobnYoKSxNdiksMCksXzgodCxyLG5bMV0scGIsMSksXzgodCxyLG5bMl0sRHYsMSl9ZnVuY3Rpb24gR2JuKHQsZSl7dmFyIG4scjtuPW1tbihlKSx3dm4odCxlLG4pLENhZSh0LmEsdShRKE5hKGUuYiksKGFlKCksJDYpKSwyMzApKSxWbW4odCksdjBuKHQsZSkscj1OdChDcixYciwyNSxlLmIuai5jLmxlbmd0aCwxNSwxKSxSYXQodCxlLCh2ZSgpLFBuKSxyLG4pLFJhdCh0LGUsSG4scixuKSxSYXQodCxlLG1yLHIsbiksUmF0KHQsZSxCbixyLG4pLHQuYT1udWxsLHQuYz1udWxsLHQuYj1udWxsfWZ1bmN0aW9uIHk1dCgpe3k1dD1aLEhfdD0oRnooKSxRaHQpLG8zZT1uZXcgbW4odDh0LEhfdCksczNlPW5ldyBtbihlOHQsKE5uKCksITApKSxwZSgtMSksbjNlPW5ldyBtbihuOHQscGUoLTEpKSxwZSgtMSkscjNlPW5ldyBtbihyOHQscGUoLTEpKSxhM2U9bmV3IG1uKGk4dCwhMSksYzNlPW5ldyBtbihzOHQsITApLGkzZT1uZXcgbW4oTmN0LCExKSx1M2U9bmV3IG1uKGE4dCwtMSl9ZnVuY3Rpb24geDV0KHQsZSxuKXtzd2l0Y2goZSl7Y2FzZSA3OiF0LmUmJih0LmU9bmV3IENuKFlzLHQsNyw0KSkseHIodC5lKSwhdC5lJiYodC5lPW5ldyBDbihZcyx0LDcsNCkpLGlzKHQuZSx1KG4sMTQpKTtyZXR1cm47Y2FzZSA4OiF0LmQmJih0LmQ9bmV3IENuKFlzLHQsOCw1KSkseHIodC5kKSwhdC5kJiYodC5kPW5ldyBDbihZcyx0LDgsNSkpLGlzKHQuZCx1KG4sMTQpKTtyZXR1cm59djR0KHQsZSxuKX1mdW5jdGlvbiBrNXQodCxlKXt2YXIgbixyLHMsbyxoO2lmKFZ0KGUpPT09VnQodCkpcmV0dXJuITA7aWYoIV90KGUsMTUpfHwoaD11KGUsMTUpLHQuZ2MoKSE9aC5nYygpKSlyZXR1cm4hMTtmb3Iobz1oLktjKCkscj10LktjKCk7ci5PYigpOylpZihuPXIuUGIoKSxzPW8uUGIoKSwhKFZ0KG4pPT09VnQocyl8fG4hPW51bGwmJnlpKG4scykpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFVibih0LGUpe3ZhciBuLHIscyxvO2ZvcihvPXUoQmwoV28oV28obmV3IFRuKG51bGwsbmV3IF9uKGUuYiwxNikpLG5ldyBTTCksbmV3IGxOKSxjMihuZXcga2UsbmV3IGNlLG5ldyBYbixsdChjdChmbCwxKSxvZSwxMzIsMCxbKE8xKCksVWwpXSkpKSwxNSksby5KYyhuZXcgQUwpLG49MCxzPW8uS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTEpLHIucD09LTEmJlQ1dCh0LHIsbisrKX1mdW5jdGlvbiB4Y2UodCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBuZXcgdkM7Y2FzZSAxOnJldHVybiBuZXcgc3R0O2Nhc2UgMjpyZXR1cm4gbmV3IGl0dDtjYXNlIDM6cmV0dXJuIG5ldyBHR3Q7Y2FzZSA0OnJldHVybiBuZXcgSUt0O2RlZmF1bHQ6dGhyb3cgaXQobmV3IEZuKCJObyBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgZm9yIHRoZSBub2RlIHBsYWNlciAiKyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24ga2NlKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMDpyZXR1cm4gbmV3IGV2dDtjYXNlIDE6cmV0dXJuIG5ldyBhdHQ7Y2FzZSAyOnJldHVybiBuZXcgWko7Y2FzZSAzOnJldHVybiBuZXcgSko7Y2FzZSA0OnJldHVybiBuZXcgV0d0O2RlZmF1bHQ6dGhyb3cgaXQobmV3IEZuKCJObyBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgZm9yIHRoZSBjeWNsZSBicmVha2VyICIrKHQuZiE9bnVsbD90LmY6IiIrdC5nKSkpfX1mdW5jdGlvbiBFNXQoKXtFNXQ9WixxeWU9bmV3IG1uKFlrdCxwZSgwKSksSHllPW5ldyBtbihLa3QsMCksQ190PShIRCgpLE5HKSwkeWU9bmV3IG1uKE9jdCxDX3QpLHBlKDApLGp5ZT1uZXcgbW4oUGN0LHBlKDEpKSxTX3Q9KG16KCksWGh0KSxWeWU9bmV3IG1uKFhrdCxTX3QpLEFfdD0oRyQoKSxVaHQpLEd5ZT1uZXcgbW4oUWt0LEFfdCksX190PShlcSgpLEtodCksenllPW5ldyBtbihaa3QsX190KX1mdW5jdGlvbiBXYm4odCxlLG4pe3ZhciByO3I9bnVsbCxlJiYocj1lLmQpLGRfKHQsbmV3IGc4KGUubi5hLXIuYituLmEsZS5uLmItci5kK24uYikpLGRfKHQsbmV3IGc4KGUubi5hLXIuYituLmEsZS5uLmIrZS5vLmIrci5hK24uYikpLGRfKHQsbmV3IGc4KGUubi5hK2Uuby5hK3IuYytuLmEsZS5uLmItci5kK24uYikpLGRfKHQsbmV3IGc4KGUubi5hK2Uuby5hK3IuYytuLmEsZS5uLmIrZS5vLmIrci5hK24uYikpfWZ1bmN0aW9uIFQ1dCh0LGUsbil7dmFyIHIscyxvO2ZvcihlLnA9bixvPXpwKEQxKGx0KGN0KGoxLDEpLERlLDIwLDAsW25ldyBRcyhlKSxuZXcgVHIoZSldKSkpO3pyKG8pOylyPXUoTXIobyksMTEpLHIucD09LTEmJlQ1dCh0LHIsbik7aWYoZS5pLms9PShWbigpLHRhKSlmb3Iocz1uZXcgUyhlLmkuaik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTEpLHIhPWUmJnIucD09LTEmJlQ1dCh0LHIsbil9ZnVuY3Rpb24gRWNlKHQpe3ZhciBlLG4scixzLG87aWYocz11KEJsKG1pbihaUXQodCkpLGMyKG5ldyBrZSxuZXcgY2UsbmV3IFhuLGx0KGN0KGZsLDEpLG9lLDEzMiwwLFsoTzEoKSxVbCldKSkpLDE1KSxyPVZFLHMuZ2MoKT49Milmb3Iobj1zLktjKCksZT15ZShuLlBiKCkpO24uT2IoKTspbz1lLGU9eWUobi5QYigpKSxyPWIuTWF0aC5taW4ociwoT24oZSksZS0oT24obyksbykpKTtyZXR1cm4gcn1mdW5jdGlvbiBZYm4odCxlKXt2YXIgbixyLHMsbyxoO3I9bmV3IFppLGZzKHIsZSxyLmMuYixyLmMpO2RvIGZvcihuPShabihyLmIhPTApLHUobGgocixyLmEuYSksODYpKSx0LmJbbi5nXT0xLG89ZWkobi5kLDApO28uYiE9by5kLmM7KXM9dSh0aShvKSwxODgpLGg9cy5jLHQuYltoLmddPT0xP3JpKHQuYSxzKTp0LmJbaC5nXT09Mj90LmJbaC5nXT0xOmZzKHIsaCxyLmMuYixyLmMpO3doaWxlKHIuYiE9MCl9ZnVuY3Rpb24gS2JuKHQsZSl7dmFyIG4scixzO2lmKFZ0KGUpPT09VnQoTHIodCkpKXJldHVybiEwO2lmKCFfdChlLDE1KXx8KHI9dShlLDE1KSxzPXQuZ2MoKSxzIT1yLmdjKCkpKXJldHVybiExO2lmKF90KHIsNTQpKXtmb3Iobj0wO248cztuKyspaWYoIXBkKHQuWGIobiksci5YYihuKSkpcmV0dXJuITE7cmV0dXJuITB9ZWxzZSByZXR1cm4gcjFuKHQuS2MoKSxyLktjKCkpfWZ1bmN0aW9uIFRjZSh0LGUpe3ZhciBuLHI7aWYodC5jLmxlbmd0aCE9MCl7aWYodC5jLmxlbmd0aD09MilwNigoQW4oMCx0LmMubGVuZ3RoKSx1KHQuY1swXSwxMCkpLCh6bCgpLGYwKSkscDYoKEFuKDEsdC5jLmxlbmd0aCksdSh0LmNbMV0sMTApKSxrYik7ZWxzZSBmb3Iocj1uZXcgUyh0KTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxMCkscDYobixlKTt0LmM9TnQoUW4sRGUsMSwwLDUsMSl9fWZ1bmN0aW9uIFhibih0KXt2YXIgZSxuO2lmKHQuYy5sZW5ndGghPTIpdGhyb3cgaXQobmV3IE5vKCJPcmRlciBvbmx5IGFsbG93ZWQgZm9yIHR3byBwYXRocy4iKSk7ZT0oQW4oMCx0LmMubGVuZ3RoKSx1KHQuY1swXSwxNykpLG49KEFuKDEsdC5jLmxlbmd0aCksdSh0LmNbMV0sMTcpKSxlLmQuaSE9bi5jLmkmJih0LmM9TnQoUW4sRGUsMSwwLDUsMSksdC5jW3QuYy5sZW5ndGhdPW4sdC5jW3QuYy5sZW5ndGhdPWUpfWZ1bmN0aW9uIFFibih0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3Iocj1uZXcgYTIsaD1QJChuZXcgeWwodC5nKSksbz1oLmEuZWMoKS5LYygpO28uT2IoKTspe2lmKHM9dShvLlBiKCksMTApLCFzKXtKYihlLCJUaGVyZSBhcmUgbm8gY2xhc3NlcyBpbiBhIGJhbGFuY2VkIGxheW91dC4iKTticmVha31kPXQualtzLnBdLG49dShYdyhyLGQpLDE1KSxufHwobj1uZXcgaGUsbTIocixkLG4pKSxuLkZjKHMpfXJldHVybiByfWZ1bmN0aW9uIFpibih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGs7aWYobilmb3Iobz1uLmEubGVuZ3RoLHI9bmV3IGUyKG8pLGQ9KHIuYi1yLmEpKnIuYzwwPyhGcCgpLEliKTpuZXcganAocik7ZC5PYigpOyloPXUoZC5QYigpLDE5KSx2PVA4KG4saC5hKSx2JiYoaz1hY24oUjAodix0dXQpLGUpLGtpKHQuZixrLHYpLHM9QWQgaW4gdi5hLHMmJkc5KGssUjAodixBZCkpLGxxKHYsayksZTV0KHYsaykpfWZ1bmN0aW9uIEpibih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKHZyKGUsIlBvcnQgc2lkZSBwcm9jZXNzaW5nIiwxKSxoPW5ldyBTKHQuYSk7aC5hPGguYy5jLmxlbmd0aDspcz11KEooaCksMTApLE9sZShzKTtmb3Iocj1uZXcgUyh0LmIpO3IuYTxyLmMuYy5sZW5ndGg7KWZvcihuPXUoSihyKSwyOSksbz1uZXcgUyhuLmEpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDEwKSxPbGUocyk7b3IoZSl9ZnVuY3Rpb24gQ2NlKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKHM9dC5mLCFzJiYocz11KHQuYS5hLmVjKCkuS2MoKS5QYigpLDU3KSksaF8ocyxlLG4pLHQuYS5hLmdjKCkhPTEpZm9yKHI9ZSpuLGg9dC5hLmEuZWMoKS5LYygpO2guT2IoKTspbz11KGguUGIoKSw1NyksbyE9cyYmKGQ9WHgobyksZC5mLmQ/KG8uZC5kKz1yK0IxLG8uZC5hLT1yK0IxKTpkLmYuYSYmKG8uZC5hLT1yK0IxKSl9ZnVuY3Rpb24gcmF0KHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE0saixIO3JldHVybiBoPW4tdCxkPXItZSxvPWIuTWF0aC5hdGFuMihoLGQpLHY9byt6b3Qsaz1vLXpvdCxDPXMqYi5NYXRoLnNpbih2KSt0LGo9cypiLk1hdGguY29zKHYpK2UsTT1zKmIuTWF0aC5zaW4oaykrdCxIPXMqYi5NYXRoLmNvcyhrKStlLEExKGx0KGN0KFdzLDEpLGVlLDgsMCxbbmV3ICRlKEMsaiksbmV3ICRlKE0sSCldKSl9ZnVuY3Rpb24gdDJuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE07cz1uLEM9ZSxvPUM7ZG8gbz10LmFbby5wXSxkPShNPXQuZ1tvLnBdLFh0KHQucFtNLnBdKStYdCh0LmRbby5wXSktby5kLmQpLHY9Z2NuKG8sciksdiYmKGg9KGs9dC5nW3YucF0sWHQodC5wW2sucF0pK1h0KHQuZFt2LnBdKSt2Lm8uYit2LmQuYSkscz1iLk1hdGgubWluKHMsZC0oaCtXMyh0Lmssbyx2KSkpKTt3aGlsZShDIT1vKTtyZXR1cm4gc31mdW5jdGlvbiBlMm4odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTTtzPW4sQz1lLG89QztkbyBvPXQuYVtvLnBdLGg9KE09dC5nW28ucF0sWHQodC5wW00ucF0pK1h0KHQuZFtvLnBdKStvLm8uYitvLmQuYSksdj1DdW4obyxyKSx2JiYoZD0oaz10Lmdbdi5wXSxYdCh0LnBbay5wXSkrWHQodC5kW3YucF0pLXYuZC5kKSxzPWIuTWF0aC5taW4ocyxkLShoK1czKHQuayxvLHYpKSkpO3doaWxlKEMhPW8pO3JldHVybiBzfWZ1bmN0aW9uIHFlKHQsZSl7dmFyIG4scjtyZXR1cm4gcj0oIXQubyYmKHQubz1uZXcgX2woKEpjKCksU2IpLEh2LHQsMCkpLFhmKHQubyxlKSkscj8/KG49ZS53ZygpLF90KG4sNCkmJihuPT1udWxsPyghdC5vJiYodC5vPW5ldyBfbCgoSmMoKSxTYiksSHYsdCwwKSkscXoodC5vLGUpKTooIXQubyYmKHQubz1uZXcgX2woKEpjKCksU2IpLEh2LHQsMCkpLGFxKHQubyxlLG4pKSksbil9ZnVuY3Rpb24gcHkoKXtweT1aLF9mPW5ldyBxMygiSF9MRUZUIiwwKSxpZz1uZXcgcTMoIkhfQ0VOVEVSIiwxKSxTZj1uZXcgcTMoIkhfUklHSFQiLDIpLExmPW5ldyBxMygiVl9UT1AiLDMpLGQwPW5ldyBxMygiVl9DRU5URVIiLDQpLEhoPW5ldyBxMygiVl9CT1RUT00iLDUpLFlsPW5ldyBxMygiSU5TSURFIiw2KSxBZj1uZXcgcTMoIk9VVFNJREUiLDcpLHFoPW5ldyBxMygiSF9QUklPUklUWSIsOCl9ZnVuY3Rpb24gbjJuKHQpe3ZhciBlLG4scixzLG8saCxkO2lmKGU9dC5IaChCaCksZSYmKGQ9QnIoWGYoKCFlLmImJihlLmI9bmV3IGtsKChkbigpLFFhKSxjYyxlKSksZS5iKSwic2V0dGluZ0RlbGVnYXRlcyIpKSxkIT1udWxsKSl7Zm9yKG49bmV3IGhlLHM9dnkoZCwiXFx3KyIpLG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLG4uY1tuLmMubGVuZ3RoXT1yO3JldHVybiBufXJldHVybiB3bigpLHduKCksaW99ZnVuY3Rpb24gcjJuKHQsZSl7dmFyIG4scixzLG8saCxkLHY7aWYoIWUuZil0aHJvdyBpdChuZXcgRm4oIlRoZSBpbnB1dCBlZGdlIGlzIG5vdCBhIHRyZWUgZWRnZS4iKSk7Zm9yKG89bnVsbCxzPXdpLHI9bmV3IFModC5kKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwyMTMpLGQ9bi5kLHY9bi5lLFFzdCh0LGQsZSkmJiFRc3QodCx2LGUpJiYoaD12LmUtZC5lLW4uYSxoPHMmJihzPWgsbz1uKSk7cmV0dXJuIG99ZnVuY3Rpb24gaTJuKHQpe3ZhciBlLG4scixzLG8saDtpZighKHQuZi5lLmMubGVuZ3RoPD0xKSl7ZT0wLHM9ZGNlKHQpLG49YXM7ZG97Zm9yKGU+MCYmKHM9biksaD1uZXcgUyh0LmYuZSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTQ0KSwhamUoUmUoUShvLChpSSgpLFM3dCkpKSkmJihyPWR5bih0LG8pLExpKEdmKG8uZCkscikpO249ZGNlKHQpfXdoaWxlKCFBbm4odCxlKysscyxuKSl9fWZ1bmN0aW9uIHMybih0LGUpe3ZhciBuLHIscztmb3IodnIoZSwiTGF5ZXIgY29uc3RyYWludCBwcmVwcm9jZXNzaW5nIiwxKSxuPW5ldyBoZSxzPW5ldyBkYSh0LmEsMCk7cy5iPHMuZC5nYygpOylyPShabihzLmI8cy5kLmdjKCkpLHUocy5kLlhiKHMuYz1zLmIrKyksMTApKSxBdW4ocikmJihMMG4ociksbi5jW24uYy5sZW5ndGhdPXIsQ2wocykpO24uYy5sZW5ndGg9PTB8fEp0KHQsKGFlKCksR2x0KSxuKSxvcihlKX1mdW5jdGlvbiBhMm4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihvPXQuZy5hLGg9dC5nLmIscj1uZXcgUyh0LmQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDcwKSxzPW4ubix0LmE9PShJMSgpLGY3KXx8dC5pPT0odmUoKSxIbik/cy5hPW86dC5hPT1kN3x8dC5pPT0odmUoKSxCbik/cy5hPW8rdC5qLmEtbi5vLmE6cy5hPW8rKHQuai5hLW4uby5hKS8yLHMuYj1oLExpKHMsZSksaCs9bi5vLmIrdC5lfWZ1bmN0aW9uIG8ybih0LGUsbil7dmFyIHIscyxvLGg7Zm9yKHZyKG4sIlByb2Nlc3NvciBzZXQgY29vcmRpbmF0ZXMiLDEpLHQuYT1lLmIuYj09MD8xOmUuYi5iLG89bnVsbCxyPWVpKGUuYiwwKTshbyYmci5iIT1yLmQuYzspaD11KHRpKHIpLDg2KSxqZShSZShRKGgsKGZjKCksWHkpKSkpJiYobz1oLHM9aC5lLHMuYT11KFEoaCwkaHQpLDE5KS5hLHMuYj0wKTtYYWUodCxFeXQobyksUmMobiwxKSksb3Iobil9ZnVuY3Rpb24gYzJuKHQsZSxuKXt2YXIgcixzLG87Zm9yKHZyKG4sIlByb2Nlc3NvciBkZXRlcm1pbmUgdGhlIGhlaWdodCBmb3IgZWFjaCBsZXZlbCIsMSksdC5hPWUuYi5iPT0wPzE6ZS5iLmIscz1udWxsLHI9ZWkoZS5iLDApOyFzJiZyLmIhPXIuZC5jOylvPXUodGkociksODYpLGplKFJlKFEobywoZmMoKSxYeSkpKSkmJihzPW8pO3MmJmR1ZSh0LEExKGx0KGN0KHA2biwxKSxoNnQsODYsMCxbc10pKSxuKSxvcihuKX1mdW5jdGlvbiB1Mm4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTTtrPXQsdj1SOShrLCJpbmRpdmlkdWFsU3BhY2luZ3MiKSx2JiYocj1vMihlLCh1aSgpLEs2KSksaD0hcixoJiYocz1uZXcgWXUsd28oZSxLNixzKSksZD11KHFlKGUsSzYpLDM3MyksTT12LG89bnVsbCxNJiYobz0oQz15aXQoTSxOdChBZSxlZSwyLDAsNiwxKSksbmV3IEVldChNLEMpKSksbyYmKG49bmV3ICRHdChNLGQpLHZhKG8sbikpKX1mdW5jdGlvbiBsMm4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqO3JldHVybiB2PW51bGwsTT10LEM9bnVsbCwoV2RlIGluIE0uYXx8WWRlIGluIE0uYXx8TEggaW4gTS5hKSYmKGs9bnVsbCxqPUN5dChlKSxoPVI5KE0sV2RlKSxuPW5ldyBrenQoaiksTmhuKG4uYSxoKSxkPVI5KE0sWWRlKSxyPW5ldyBJenQoaiksRmhuKHIuYSxkKSxvPUt3KE0sTEgpLHM9bmV3IEZ6dChqKSxrPShkMG4ocy5hLG8pLG8pLEM9ayksdj1DLHZ9ZnVuY3Rpb24gaDJuKHQsZSl7dmFyIG4scixzO2lmKGU9PT10KXJldHVybiEwO2lmKF90KGUsNTQzKSl7aWYocz11KGUsODM1KSx0LmEuZCE9cy5hLmR8fFEzKHQpLmdjKCkhPVEzKHMpLmdjKCkpcmV0dXJuITE7Zm9yKHI9UTMocykuS2MoKTtyLk9iKCk7KWlmKG49dShyLlBiKCksNDE2KSxRUXQodCxuLmEuY2QoKSkhPXUobi5hLmRkKCksMTQpLmdjKCkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gZjJuKHQpe3ZhciBlLG4scixzO3JldHVybiByPXUodC5hLDE5KS5hLHM9dSh0LmIsMTkpLmEsZT1yLG49cyxyPT0wJiZzPT0wP24tPTE6cj09LTEmJnM8PTA/KGU9MCxuLT0yKTpyPD0wJiZzPjA/KGUtPTEsbi09MSk6cj49MCYmczwwPyhlKz0xLG4rPTEpOnI+MCYmcz49MD8oZS09MSxuKz0xKTooZSs9MSxuLT0xKSxuZXcgZmEocGUoZSkscGUobikpfWZ1bmN0aW9uIGQybih0LGUpe3JldHVybiB0LmM8ZS5jPy0xOnQuYz5lLmM/MTp0LmI8ZS5iPy0xOnQuYj5lLmI/MTp0LmEhPWUuYT9IaSh0LmEpLUhpKGUuYSk6dC5kPT0oJDkoKSxCUykmJmUuZD09TlM/LTE6dC5kPT1OUyYmZS5kPT1CUz8xOjB9ZnVuY3Rpb24gX2NlKHQsZSl7dmFyIG4scixzLG8saDtyZXR1cm4gbz1lLmEsby5jLmk9PWUuYj9oPW8uZDpoPW8uYyxvLmMuaT09ZS5iP3I9by5jOnI9by5kLHM9emhuKHQuYSxoLHIpLHM+MCYmczxWRT8obj10Mm4odC5hLHIuaSxzLHQuYyksTmVlKHQuYSxyLmksLW4pLG4+MCk6czwwJiYtczxWRT8obj1lMm4odC5hLHIuaSwtcyx0LmMpLE5lZSh0LmEsci5pLG4pLG4+MCk6ITF9ZnVuY3Rpb24gZzJuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE07Zm9yKHM9KGUtdC5kKS90LmMuYy5sZW5ndGgsbz0wLHQuYSs9bix0LmQ9ZSxNPW5ldyBTKHQuYyk7TS5hPE0uYy5jLmxlbmd0aDspQz11KEooTSksMzMpLGs9Qy5nLHY9Qy5mLGt1KEMsQy5pK28qcyksRXUoQyxDLmorcipuKSx0dihDLEMuZytzKSxKdyhDLHQuYSksKytvLGQ9Qy5nLGg9Qy5mLHlvZShDLG5ldyAkZShkLGgpLG5ldyAkZShrLHYpKX1mdW5jdGlvbiBwMm4odCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYodD09bnVsbClyZXR1cm4gbnVsbDtmb3IoZD10Lmxlbmd0aCxzPShkKzEpLzJ8MCxoPU50KEd1LE40LDI1LHMsMTUsMSksZCUyIT0wJiYoaFstLXNdPUc1dCgoUnIoZC0xLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZC0xKSkpKSxuPTAscj0wO248czsrK24pZT1HNXQod2EodCxyKyspKSxvPUc1dCh3YSh0LHIrKykpLGhbbl09KGU8PDR8byk8PDI0Pj4yNDtyZXR1cm4gaH1mdW5jdGlvbiBiMm4odCl7aWYodC5wZSgpKXt2YXIgZT10LmM7ZS5xZSgpP3Qubz0iWyIrZS5uOmUucGUoKT90Lm89IlsiK2UubmUoKTp0Lm89IltMIitlLm5lKCkrIjsiLHQuYj1lLm1lKCkrIltdIix0Lms9ZS5vZSgpKyJbXSI7cmV0dXJufXZhciBuPXQuaixyPXQuZDtyPXIuc3BsaXQoIi8iKSx0Lm89YXN0KCIuIixbbixhc3QoIiQiLHIpXSksdC5iPWFzdCgiLiIsW24sYXN0KCIuIixyKV0pLHQuaz1yW3IubGVuZ3RoLTFdfWZ1bmN0aW9uIHcybih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKGg9bnVsbCxvPW5ldyBTKHQuZS5hKTtvLmE8by5jLmMubGVuZ3RoOylpZihzPXUoSihvKSwxMjEpLHMuYi5hLmMubGVuZ3RoPT1zLmcuYS5jLmxlbmd0aCl7Zm9yKHI9cy5lLGg9dHBuKHMpLG49cy5lLXUoaC5hLDE5KS5hKzE7bjxzLmUrdShoLmIsMTkpLmE7bisrKWVbbl08ZVtyXSYmKHI9bik7ZVtyXTxlW3MuZV0mJigtLWVbcy5lXSwrK2Vbcl0scy5lPXIpfX1mdW5jdGlvbiBpYXQodCl7dmFyIGUsbixyLHMsbyxoLGQsdjtmb3Iocz1hcyxyPUNzLG49bmV3IFModC5lLmIpO24uYTxuLmMuYy5sZW5ndGg7KWZvcihlPXUoSihuKSwyOSksaD1uZXcgUyhlLmEpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDEwKSx2PVh0KHQucFtvLnBdKSxkPXYrWHQodC5iW3QuZ1tvLnBdLnBdKSxzPWIuTWF0aC5taW4ocyx2KSxyPWIuTWF0aC5tYXgocixkKTtyZXR1cm4gci1zfWZ1bmN0aW9uIEM1dCh0LGUsbixyKXt2YXIgcyxvLGgsZCx2O2ZvcihzPVo1dCh0LGUpLGQ9MCx2PXMuZ2MoKTtkPHY7KytkKWlmKG89dShzLlhiKGQpLDE3MCksaG4ocixNOChUbyh0LG8pKSkpe2lmKGg9ckQoVG8odCxvKSksbj09bnVsbCl7aWYoaD09bnVsbClyZXR1cm4gb31lbHNlIGlmKGhuKG4saCkpcmV0dXJuIG99cmV0dXJuIG51bGx9ZnVuY3Rpb24gXzV0KHQsZSxuLHIpe3ZhciBzLG8saCxkLHY7Zm9yKHM9dmF0KHQsZSksZD0wLHY9cy5nYygpO2Q8djsrK2QpaWYobz11KHMuWGIoZCksMTcwKSxobihyLE04KFRvKHQsbykpKSl7aWYoaD1yRChUbyh0LG8pKSxuPT1udWxsKXtpZihoPT1udWxsKXJldHVybiBvfWVsc2UgaWYoaG4obixoKSlyZXR1cm4gb31yZXR1cm4gbnVsbH1mdW5jdGlvbiB2Mm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdjtpZihoPW5ldyBveCxkPW91KHQuZS5UZygpLGUpLHI9dSh0LmcsMTE5KSx0bygpLHUoZSw2NikuT2ooKSlmb3Iobz0wO288dC5pOysrbylzPXJbb10sZC5ybChzLmFrKCkpJiZEcihoLHMpO2Vsc2UgZm9yKG89MDtvPHQuaTsrK28pcz1yW29dLGQucmwocy5haygpKSYmKHY9cy5kZCgpLERyKGgsbj9iXyh0LGUsbyxoLmksdik6dikpO3JldHVybiBhbXQoaCl9ZnVuY3Rpb24gbTJuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iobj1uZXcgaV8oYjcpLHM9KGg2KCksbHQoY3QoYjcsMSksb2UsMjI3LDAsW3A3LGJTLGc3LE55LEc0LFY0XSkpLG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLHN3dChuLHIsbmV3IGhlKTtyZXR1cm4gbHMod3UoUmkoV28obmV3IFRuKG51bGwsbmV3IF9uKHQuYiwxNikpLG5ldyBkTiksbmV3IGdOKSxuZXcgX2coZSkpLG5ldyBjZChuKSksbn1mdW5jdGlvbiBicSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGo7Zm9yKG89ZS5LYygpO28uT2IoKTspcz11KG8uUGIoKSwzMyksQz1zLmkrcy5nLzIsaj1zLmorcy5mLzIsdj10LmYsaD12Lmkrdi5nLzIsZD12Lmordi5mLzIsaz1DLWgsTT1qLWQscj1iLk1hdGguc3FydChrKmsrTSpNKSxrKj10LmUvcixNKj10LmUvcixuPyhDLT1rLGotPU0pOihDKz1rLGorPU0pLGt1KHMsQy1zLmcvMiksRXUocyxqLXMuZi8yKX1mdW5jdGlvbiB2NCh0KXt2YXIgZSxuLHI7aWYoIXQuYyYmdC5iIT1udWxsKXtmb3IoZT10LmIubGVuZ3RoLTQ7ZT49MDtlLT0yKWZvcihuPTA7bjw9ZTtuKz0yKSh0LmJbbl0+dC5iW24rMl18fHQuYltuXT09PXQuYltuKzJdJiZ0LmJbbisxXT50LmJbbiszXSkmJihyPXQuYltuKzJdLHQuYltuKzJdPXQuYltuXSx0LmJbbl09cixyPXQuYltuKzNdLHQuYltuKzNdPXQuYltuKzFdLHQuYltuKzFdPXIpO3QuYz0hMH19ZnVuY3Rpb24gU2NlKHQsZSl7dmFyIG4scixzLG8saCxkLHYsaztmb3IoaD1lPT0xP2NsdDpvbHQsbz1oLmEuZWMoKS5LYygpO28uT2IoKTspZm9yKHM9dShvLlBiKCksMTAzKSx2PXUoQWkodC5mLmMscyksMjEpLktjKCk7di5PYigpOylzd2l0Y2goZD11KHYuUGIoKSw0Nikscj11KGQuYiw4MSksaz11KGQuYSwxODkpLG49ay5jLHMuZyl7Y2FzZSAyOmNhc2UgMTpyLmcuZCs9bjticmVhaztjYXNlIDQ6Y2FzZSAzOnIuZy5jKz1ufX1mdW5jdGlvbiB5Mm4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEM7Zm9yKGs9LTEsQz0wLGg9dCxkPTAsdj1oLmxlbmd0aDtkPHY7KytkKXtmb3Iobz1oW2RdLG49bmV3IFhZdChrPT0tMT90WzBdOnRba10sZSwoWjkoKSx5RykpLHI9MDtyPG8ubGVuZ3RoO3IrKylmb3Iocz1yKzE7czxvLmxlbmd0aDtzKyspVXMob1tyXSwoYWUoKSxUYykpJiZVcyhvW3NdLFRjKSYmWWhlKG4sb1tyXSxvW3NdKT4wJiYrK0M7KytrfXJldHVybiBDfWZ1bmN0aW9uIG1mKHQpe3ZhciBlLG47cmV0dXJuIG49bmV3IE9sKElwKHQuZ20pKSxuLmErPSJAIixHcihuLChlPUhpKHQpPj4+MCxlLnRvU3RyaW5nKDE2KSkpLHQua2goKT8obi5hKz0iIChlUHJveHlVUkk6ICIsaGMobix0LnFoKCkpLHQuJGcoKSYmKG4uYSs9IiBlQ2xhc3M6ICIsaGMobix0LiRnKCkpKSxuLmErPSIpIik6dC4kZygpJiYobi5hKz0iIChlQ2xhc3M6ICIsaGMobix0LiRnKCkpLG4uYSs9IikiKSxuLmF9ZnVuY3Rpb24gdl8odCl7dmFyIGUsbixyLHM7aWYodC5lKXRocm93IGl0KG5ldyBObygoUDAoenV0KSxTb3QrenV0LmsrQW90KSkpO2Zvcih0LmQ9PShhbygpLGgwKSYmQnEodCx6aCksbj1uZXcgUyh0LmEuYSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMzA3KSxlLmc9ZS5pO2ZvcihzPW5ldyBTKHQuYS5iKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSw1Nyksci5pPUNzO3JldHVybiB0LmIuTGUodCksdH1mdW5jdGlvbiB4Mm4odCxlKXt2YXIgbixyLHMsbyxoO2lmKGU8Mip0LmIpdGhyb3cgaXQobmV3IEZuKCJUaGUga25vdCB2ZWN0b3IgbXVzdCBoYXZlIGF0IGxlYXN0IHR3byB0aW1lIHRoZSBkaW1lbnNpb24gZWxlbWVudHMuIikpO2Zvcih0LmY9MSxzPTA7czx0LmI7cysrKWxlKHQuZSwwKTtmb3IoaD1lKzEtMip0LmIsbj1oLG89MTtvPGg7bysrKWxlKHQuZSxvL24pO2lmKHQuZClmb3Iocj0wO3I8dC5iO3IrKylsZSh0LmUsMSl9ZnVuY3Rpb24gQWNlKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDO2lmKGs9ZSxDPXUoaHooc3J0KHQuaSksayksMzMpLCFDKXRocm93IHM9UjAoayxBZCksZD0iVW5hYmxlIHRvIGZpbmQgZWxrIG5vZGUgZm9yIGpzb24gb2JqZWN0ICciK3Msdj1kKyInIFBhbmljISIsaXQobmV3IHVkKHYpKTtvPUt3KGssImVkZ2VzIiksbj1uZXcgSUd0KHQsQykscmJuKG4uYSxuLmIsbyksaD1LdyhrLGV1dCkscj1uZXcgZ3p0KHQpLHBkbihyLmEsaCl9ZnVuY3Rpb24gTGNlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHY7aWYociE9bnVsbCl7aWYocz10LmRbZV0scyl7Zm9yKG89cy5nLHY9cy5pLGQ9MDtkPHY7KytkKWlmKGg9dShvW2RdLDEzMyksaC5TaCgpPT1uJiZ5aShyLGguY2QoKSkpcmV0dXJuIGR9fWVsc2UgaWYocz10LmRbZV0scyl7Zm9yKG89cy5nLHY9cy5pLGQ9MDtkPHY7KytkKWlmKGg9dShvW2RdLDEzMyksVnQoaC5jZCgpKT09PVZ0KHIpKXJldHVybiBkfXJldHVybi0xfWZ1bmN0aW9uIF9FKHQsZSl7dmFyIG4scixzO3JldHVybiBuPWU9PW51bGw/ZWMoTG8odC5mLG51bGwpKTpLQyh0LmcsZSksX3QobiwyMzUpPyhzPXUobiwyMzUpLHMuUWgoKT09bnVsbCxzKTpfdChuLDQ5OCk/KHI9dShuLDE5MzgpLHM9ci5hLHMmJihzLnliPT1udWxsfHwoZT09bnVsbD9hdSh0LmYsbnVsbCxzKTpzdih0LmcsZSxzKSkpLHMpOm51bGx9ZnVuY3Rpb24gazJuKHQpe3E1dCgpO3ZhciBlLG4scixzLG8saCxkO2lmKHQ9PW51bGx8fChzPXQubGVuZ3RoLHMlMiE9MCkpcmV0dXJuIG51bGw7Zm9yKGU9SyQodCksbz1zLzJ8MCxuPU50KEd1LE40LDI1LG8sMTUsMSkscj0wO3I8bztyKyspe2lmKGg9ZEFbZVtyKjJdXSxoPT0tMXx8KGQ9ZEFbZVtyKjIrMV1dLGQ9PS0xKSlyZXR1cm4gbnVsbDtuW3JdPShoPDw0fGQpPDwyND4+MjR9cmV0dXJuIG59ZnVuY3Rpb24gRTJuKHQsZSxuKXt2YXIgcixzLG87aWYocz11KHBvKHQuaSxlKSwzMDYpLCFzKWlmKHM9bmV3IEFlZSh0LmQsZSxuKSx6eCh0LmksZSxzKSxQM3QoZSkpalFlKHQuYSxlLmMsZS5iLHMpO2Vsc2Ugc3dpdGNoKG89bHBuKGUpLHI9dShwbyh0LnAsbyksMjQ0KSxvLmcpe2Nhc2UgMTpjYXNlIDM6cy5qPSEwLGhldChyLGUuYixzKTticmVhaztjYXNlIDQ6Y2FzZSAyOnMuaz0hMCxoZXQocixlLmMscyl9cmV0dXJuIHN9ZnVuY3Rpb24gVDJuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsaztpZihkPW5ldyBveCx2PW91KHQuZS5UZygpLGUpLHM9dSh0LmcsMTE5KSx0bygpLHUoZSw2NikuT2ooKSlmb3IoaD0wO2g8dC5pOysraClvPXNbaF0sdi5ybChvLmFrKCkpJiZEcihkLG8pO2Vsc2UgZm9yKGg9MDtoPHQuaTsrK2gpbz1zW2hdLHYucmwoby5haygpKSYmKGs9by5kZCgpLERyKGQscj9iXyh0LGUsaCxkLmksayk6aykpO3JldHVybiBfM3QoZCxuKX1mdW5jdGlvbiBNY2UodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrO2lmKHM9dC5iW2UucF0scz49MClyZXR1cm4gcztmb3Iobz0xLGQ9bmV3IFMoZS5qKTtkLmE8ZC5jLmMubGVuZ3RoOylmb3IoaD11KEooZCksMTEpLHI9bmV3IFMoaC5nKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxNyksaz1uLmQuaSxlIT1rJiYodj1NY2UodCxrKSxvPWIuTWF0aC5tYXgobyx2KzEpKTtyZXR1cm4gVGhuKHQsZSxvKSxvfWZ1bmN0aW9uIERjZSh0LGUsbil7dmFyIHIscyxvO2ZvcihyPTE7cjx0LmMubGVuZ3RoO3IrKyl7Zm9yKG89KEFuKHIsdC5jLmxlbmd0aCksdSh0LmNbcl0sMTApKSxzPXI7cz4wJiZlLnVlKChBbihzLTEsdC5jLmxlbmd0aCksdSh0LmNbcy0xXSwxMCkpLG8pPjA7KWNoKHQscywoQW4ocy0xLHQuYy5sZW5ndGgpLHUodC5jW3MtMV0sMTApKSksLS1zO0FuKHMsdC5jLmxlbmd0aCksdC5jW3NdPW99bi5hPW5ldyBfcixuLmI9bmV3IF9yfWZ1bmN0aW9uIEMybih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQztmb3IoQz0ocj11KGUuZSYmZS5lKCksOSksbmV3IHNoKHIsdShmZihyLHIubGVuZ3RoKSw5KSwwKSksdj12eShuLCJbXFxbXFxdXFxzLF0rIiksbz12LGg9MCxkPW8ubGVuZ3RoO2g8ZDsrK2gpaWYocz1vW2hdLGZ5KHMpLmxlbmd0aCE9MCl7aWYoaz1Wb2UodCxzKSxrPT1udWxsKXJldHVybiBudWxsO3ZmKEMsdShrLDIyKSl9cmV0dXJuIEN9ZnVuY3Rpb24gXzJuKHQpe3ZhciBlLG4scjtmb3Iobj1uZXcgUyh0LmEuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSw4MSkscj0oT24oMCksMCkscj4wJiYoIShCcCh0LmEuYykmJmUubi5kKSYmIShiOCh0LmEuYykmJmUubi5iKSYmKGUuZy5kLT1iLk1hdGgubWF4KDAsci8yLS41KSksIShCcCh0LmEuYykmJmUubi5hKSYmIShiOCh0LmEuYykmJmUubi5jKSYmKGUuZy5hKz1iLk1hdGgubWF4KDAsci0xKSkpfWZ1bmN0aW9uIEljZSh0LGUsbil7dmFyIHIscztpZigodC5jLXQuYiZ0LmEubGVuZ3RoLTEpPT0yKWU9PSh2ZSgpLFBuKXx8ZT09SG4/KG56KHUoUTkodCksMTUpLCh6bCgpLGYwKSksbnoodShROSh0KSwxNSksa2IpKToobnoodShROSh0KSwxNSksKHpsKCksa2IpKSxueih1KFE5KHQpLDE1KSxmMCkpO2Vsc2UgZm9yKHM9bmV3IE85KHQpO3MuYSE9cy5iOylyPXUoTXoocyksMTUpLG56KHIsbil9ZnVuY3Rpb24gUzJuKHQsZSl7dmFyIG4scixzLG8saCxkLHY7Zm9yKHM9eDgobmV3IFRwdCh0KSksZD1uZXcgZGEocyxzLmMubGVuZ3RoKSxvPXg4KG5ldyBUcHQoZSkpLHY9bmV3IGRhKG8sby5jLmxlbmd0aCksaD1udWxsO2QuYj4wJiZ2LmI+MCYmKG49KFpuKGQuYj4wKSx1KGQuYS5YYihkLmM9LS1kLmIpLDMzKSkscj0oWm4odi5iPjApLHUodi5hLlhiKHYuYz0tLXYuYiksMzMpKSxuPT1yKTspaD1uO3JldHVybiBofWZ1bmN0aW9uIHVsKHQsZSl7dmFyIG4scixzLG8saCxkO3JldHVybiBvPXQuYSpFb3QrdC5iKjE1MDIsZD10LmIqRW90KzExLG49Yi5NYXRoLmZsb29yKGQqJEkpLG8rPW4sZC09bipHeHQsbyU9R3h0LHQuYT1vLHQuYj1kLGU8PTI0P2IuTWF0aC5mbG9vcih0LmEqREV0W2VdKToocz10LmEqKDE8PGUtMjQpLGg9Yi5NYXRoLmZsb29yKHQuYipJRXRbZV0pLHI9cytoLHI+PTIxNDc0ODM2NDgmJihyLT1tb3QpLHIpfWZ1bmN0aW9uIE9jZSh0LGUsbil7dmFyIHIscyxvLGg7clp0KHQsZSk+clp0KHQsbik/KHI9S28obiwodmUoKSxIbikpLHQuZD1yLmRjKCk/MDpObnQodShyLlhiKDApLDExKSksaD1LbyhlLEJuKSx0LmI9aC5kYygpPzA6Tm50KHUoaC5YYigwKSwxMSkpKToocz1LbyhuLCh2ZSgpLEJuKSksdC5kPXMuZGMoKT8wOk5udCh1KHMuWGIoMCksMTEpKSxvPUtvKGUsSG4pLHQuYj1vLmRjKCk/MDpObnQodShvLlhiKDApLDExKSkpfWZ1bmN0aW9uIFBjZSh0KXt2YXIgZSxuLHIscyxvLGgsZDtpZih0JiYoZT10LkhoKEJoKSxlJiYoaD1CcihYZigoIWUuYiYmKGUuYj1uZXcga2woKGRuKCksUWEpLGNjLGUpKSxlLmIpLCJjb252ZXJzaW9uRGVsZWdhdGVzIikpLGghPW51bGwpKSl7Zm9yKGQ9bmV3IGhlLHI9dnkoaCwiXFx3KyIpLHM9MCxvPXIubGVuZ3RoO3M8bzsrK3Mpbj1yW3NdLGQuY1tkLmMubGVuZ3RoXT1uO3JldHVybiBkfXJldHVybiB3bigpLHduKCksaW99ZnVuY3Rpb24gRmNlKHQsZSl7dmFyIG4scixzLG87Zm9yKG49dC5vLmEsbz11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksMTExKSxzLmUuYT1uKlh0KHllKHMuYi5XZSh1VikpKSxzLmUuYj0ocj1zLmIsci5YZSgodWkoKSxkbCkpP3IuSGYoKT09KHZlKCksUG4pPy1yLnJmKCkuYi1YdCh5ZShyLldlKGRsKSkpOlh0KHllKHIuV2UoZGwpKSk6ci5IZigpPT0odmUoKSxQbik/LXIucmYoKS5iOjApfWZ1bmN0aW9uIEEybih0KXt2YXIgZSxuLHIscyxvLGgsZCx2O2U9ITAscz1udWxsLG89bnVsbDt0OmZvcih2PW5ldyBTKHQuYSk7di5hPHYuYy5jLmxlbmd0aDspZm9yKGQ9dShKKHYpLDEwKSxyPW5ldyBhcihscihqbyhkKS5hLktjKCksbmV3IHopKTt6cihyKTspe2lmKG49dShNcihyKSwxNykscyYmcyE9ZCl7ZT0hMTticmVhayB0fWlmKHM9ZCxoPW4uYy5pLG8mJm8hPWgpe2U9ITE7YnJlYWsgdH1vPWh9cmV0dXJuIGV9ZnVuY3Rpb24gTDJuKHQsZSxuKXt2YXIgcixzLG8saCxkLHY7Zm9yKG89LTEsZD0tMSxoPTA7aDxlLmMubGVuZ3RoJiYocz0oQW4oaCxlLmMubGVuZ3RoKSx1KGUuY1toXSwzMjkpKSwhKHMuYz50LmMpKTtoKyspcy5hPj10LnMmJihvPDAmJihvPWgpLGQ9aCk7cmV0dXJuIHY9KHQucyt0LmMpLzIsbz49MCYmKHI9bG1uKHQsZSxvLGQpLHY9bVhlKChBbihyLGUuYy5sZW5ndGgpLHUoZS5jW3JdLDMyOSkpKSx5Ym4oZSxyLG4pKSx2fWZ1bmN0aW9uIHNhdCgpe3NhdD1aLGwzZT1uZXcgZW8oKHVpKCksVzYpLDEuMyksR190PUdTdCxaX3Q9bmV3IE93KDE1KSx3M2U9bmV3IGVvKFUyLFpfdCksbTNlPW5ldyBlbyhXMiwxNSksaDNlPVlHLGczZT1HMixwM2U9YzUsYjNlPXhiLGQzZT1vNSxLX3Q9dFAsdjNlPVF5LFFfdD0oeTV0KCksbzNlKSxZX3Q9czNlLFhfdD1hM2UsSl90PWMzZSxVX3Q9aTNlLFdfdD1LRyxmM2U9V1N0LEhPPXIzZSxWX3Q9bjNlLHRTdD11M2V9ZnVuY3Rpb24gSXIodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrO2ZvcihoPShvPW5ldyBsQixvKSxveXQoaCwoT24oZSksZSkpLGs9KCFoLmImJihoLmI9bmV3IGtsKChkbigpLFFhKSxjYyxoKSksaC5iKSx2PTE7djxuLmxlbmd0aDt2Kz0yKWFxKGssblt2LTFdLG5bdl0pO2ZvcihyPSghdC5BYiYmKHQuQWI9bmV3IGZlKFpyLHQsMCwzKSksdC5BYiksZD0wO2Q8MDsrK2Qpcz1Pbm4odShBdChyLHIuaS0xKSw1OTApKSxyPXM7RHIocixoKX1mdW5jdGlvbiBOY2UodCxlLG4pe3ZhciByLHMsbztmb3IoeFplLmNhbGwodGhpcyxuZXcgaGUpLHRoaXMuYT1lLHRoaXMuYj1uLHRoaXMuZT10LHI9KHQuYiYmU2F0KHQpLHQuYSksdGhpcy5kPXFYdChyLmEsdGhpcy5hKSx0aGlzLmM9cVh0KHIuYix0aGlzLmIpLGlobih0aGlzLHRoaXMuZCx0aGlzLmMpLFhwbih0aGlzKSxvPXRoaXMuZS5lLmEuZWMoKS5LYygpO28uT2IoKTspcz11KG8uUGIoKSwyNjYpLHMuYy5jLmxlbmd0aD4wJiZyNG4odGhpcyxzKX1mdW5jdGlvbiBTNXQodCxlLG4scixzLG8pe3ZhciBoLGQsdjtpZighc1tlLmJdKXtmb3Ioc1tlLmJdPSEwLGg9ciwhaCYmKGg9bmV3IEIkKSxsZShoLmUsZSksdj1vW2UuYl0uS2MoKTt2Lk9iKCk7KWQ9dSh2LlBiKCksMjgyKSwhKGQuZD09bnx8ZC5jPT1uKSYmKGQuYyE9ZSYmUzV0KHQsZC5jLGUsaCxzLG8pLGQuZCE9ZSYmUzV0KHQsZC5kLGUsaCxzLG8pLGxlKGguYyxkKSxMcyhoLmQsZC5iKSk7cmV0dXJuIGh9cmV0dXJuIG51bGx9ZnVuY3Rpb24gTTJuKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihlPTAscz1uZXcgUyh0LmUpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDE3KSxuPU44KG5ldyBUbihudWxsLG5ldyBfbihyLmIsMTYpKSxuZXcgTEspLG4mJisrZTtmb3IoaD1uZXcgUyh0LmcpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDE3KSxkPU44KG5ldyBUbihudWxsLG5ldyBfbihvLmIsMTYpKSxuZXcgTUspLGQmJisrZTtyZXR1cm4gZT49Mn1mdW5jdGlvbiBEMm4odCxlKXt2YXIgbixyLHMsbztmb3IodnIoZSwiU2VsZi1Mb29wIHByZS1wcm9jZXNzaW5nIiwxKSxyPW5ldyBTKHQuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTApLGRobihuKSYmKHM9KG89bmV3IFppZShuKSxKdChuLChhZSgpLHg3KSxvKSxLbW4obyksbyksbHMod3UoV28obmV3IFRuKG51bGwsbmV3IF9uKHMuZCwxNikpLG5ldyBUTiksbmV3IGhYKSxuZXcgZlgpLFZ3bihzKSk7b3IoZSl9ZnVuY3Rpb24gSTJuKHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDO2ZvcihvPXQuYy5kLmosaD11KFpmKG4sMCksOCksQz0xO0M8bi5iO0MrKylrPXUoWmYobixDKSw4KSxmcyhyLGgsci5jLmIsci5jKSxkPWZkKExpKG5ldyB4byhoKSxrKSwuNSksdj1mZChuZXcgU3J0KFJ5dChvKSkscyksTGkoZCx2KSxmcyhyLGQsci5jLmIsci5jKSxoPWssbz1lPT0wP096KG8pOm8zdChvKTtyaShyLChabihuLmIhPTApLHUobi5jLmIuYyw4KSkpfWZ1bmN0aW9uIE8ybih0KXtweSgpO3ZhciBlLG4scjtyZXR1cm4gbj1qaShZbCxsdChjdChsbywxKSxvZSw5MywwLFtBZl0pKSwhKE9EKGskKG4sdCkpPjF8fChlPWppKF9mLGx0KGN0KGxvLDEpLG9lLDkzLDAsW2lnLFNmXSkpLE9EKGskKGUsdCkpPjEpfHwocj1qaShMZixsdChjdChsbywxKSxvZSw5MywwLFtkMCxIaF0pKSxPRChrJChyLHQpKT4xKSl9ZnVuY3Rpb24gUDJuKHQsZSl7dmFyIG4scixzO3JldHVybiBuPWUuSGgodC5hKSxuJiYocz1CcihYZigoIW4uYiYmKG4uYj1uZXcga2woKGRuKCksUWEpLGNjLG4pKSxuLmIpLCJhZmZpbGlhdGlvbiIpKSxzIT1udWxsKT8ocj1UaihzLEN1KDM1KSkscj09LTE/VWl0KHQsQzkodCxSbChlLkhqKCkpKSxzKTpyPT0wP1VpdCh0LG51bGwscy5zdWJzdHIoMSkpOlVpdCh0LHMuc3Vic3RyKDAscikscy5zdWJzdHIocisxKSkpOm51bGx9ZnVuY3Rpb24gRjJuKHQpe3ZhciBlLG4scjt0cnl7cmV0dXJuIHQ9PW51bGw/X3U6JG8odCl9Y2F0Y2gocyl7aWYocz1XaShzKSxfdChzLDEwMikpcmV0dXJuIGU9cyxyPUlwKG9sKHQpKSsiQCIrKG49KEdkKCksJDN0KHQpPj4+MCksbi50b1N0cmluZygxNikpLEVmbihrdW4oKSwoZDgoKSwiRXhjZXB0aW9uIGR1cmluZyBsZW5pZW50Rm9ybWF0IGZvciAiK3IpLGUpLCI8IityKyIgdGhyZXcgIitJcChlLmdtKSsiPiI7dGhyb3cgaXQocyl9fWZ1bmN0aW9uIEJjZSh0KXtzd2l0Y2godC5nKXtjYXNlIDA6cmV0dXJuIG5ldyBldHQ7Y2FzZSAxOnJldHVybiBuZXcgcUI7Y2FzZSAyOnJldHVybiBuZXcgalZ0O2Nhc2UgMzpyZXR1cm4gbmV3IEJMO2Nhc2UgNDpyZXR1cm4gbmV3IGFZdDtjYXNlIDU6cmV0dXJuIG5ldyBudHQ7ZGVmYXVsdDp0aHJvdyBpdChuZXcgRm4oIk5vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGxheWVyZXIgIisodC5mIT1udWxsP3QuZjoiIit0LmcpKSl9fWZ1bmN0aW9uIEE1dCh0LGUsbil7dmFyIHIscyxvO2ZvcihvPW5ldyBTKHQudCk7by5hPG8uYy5jLmxlbmd0aDspcj11KEoobyksMjY4KSxyLmIuczwwJiZyLmM+MCYmKHIuYi5uLT1yLmMsci5iLm48PTAmJnIuYi51PjAmJnJpKGUsci5iKSk7Zm9yKHM9bmV3IFModC5pKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwyNjgpLHIuYS5zPDAmJnIuYz4wJiYoci5hLnUtPXIuYyxyLmEudTw9MCYmci5hLm4+MCYmcmkobixyLmEpKX1mdW5jdGlvbiB3cSh0KXt2YXIgZSxuLHIscyxvO2lmKHQuZz09bnVsbCYmKHQuZD10LnNpKHQuZiksRHIodCx0LmQpLHQuYykpcmV0dXJuIG89dC5mLG87aWYoZT11KHQuZ1t0LmktMV0sNDcpLHM9ZS5QYigpLHQuZT1lLG49dC5zaShzKSxuLk9iKCkpdC5kPW4sRHIodCxuKTtlbHNlIGZvcih0LmQ9bnVsbDshZS5PYigpJiYodHModC5nLC0tdC5pLG51bGwpLHQuaSE9MCk7KXI9dSh0LmdbdC5pLTFdLDQ3KSxlPXI7cmV0dXJuIHN9ZnVuY3Rpb24gTjJuKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKHI9ZSxzPXIuYWsoKSxYMCh0LmUscykpe2lmKHMuaGkoKSYmTyQodCxzLHIuZGQoKSkpcmV0dXJuITF9ZWxzZSBmb3IoZD1vdSh0LmUuVGcoKSxzKSxuPXUodC5nLDExOSksbz0wO288dC5pOysrbylpZihoPW5bb10sZC5ybChoLmFrKCkpKXJldHVybiB5aShoLHIpPyExOih1KGg0KHQsbyxlKSw3MiksITApO3JldHVybiBEcih0LGUpfWZ1bmN0aW9uIEIybih0LGUsbixyKXt2YXIgcyxvLGgsZDtmb3Iocz1uZXcgWTAodCksRDAocywoVm4oKSxMbCkpLEp0KHMsKGFlKCksX2kpLGUpLEp0KHMsTE8sciksSnQocywoVGUoKSxjcyksKHVhKCksR2MpKSxKdChzLHIxLGUuYyksSnQocywkaCxlLmQpLHV1ZShlLHMpLGQ9Yi5NYXRoLmZsb29yKG4vMiksaD1uZXcgUyhzLmopO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDExKSxvLm4uYj1kO3JldHVybiBzfWZ1bmN0aW9uIFIybih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztmb3Iodj1VZCh0LmMtdC5iJnQuYS5sZW5ndGgtMSksaz1udWxsLEM9bnVsbCxvPW5ldyBPOSh0KTtvLmEhPW8uYjspcz11KE16KG8pLDEwKSxuPShkPXUoUShzLChhZSgpLHIxKSksMTEpLGQ/ZC5pOm51bGwpLHI9KGg9dShRKHMsJGgpLDExKSxoP2guaTpudWxsKSwoayE9bnx8QyE9cikmJihUY2UodixlKSxrPW4sQz1yKSx2LmNbdi5jLmxlbmd0aF09cztUY2UodixlKX1mdW5jdGlvbiBSY2UodCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGU9MCxyPW5ldyBTKHQuYSk7ci5hPHIuYy5jLmxlbmd0aDspZm9yKG49dShKKHIpLDEwKSxvPW5ldyBhcihscihEcyhuKS5hLktjKCksbmV3IHopKTt6cihvKTspcz11KE1yKG8pLDE3KSx0PT1zLmQuaS5jJiZzLmMuaj09KHZlKCksQm4pJiYoaD1fMShzLmMpLmIsZD1fMShzLmQpLmIsZT1iLk1hdGgubWF4KGUsYi5NYXRoLmFicyhkLWgpKSk7cmV0dXJuIGV9ZnVuY3Rpb24gajJuKHQsZSxuKXt2YXIgcixzLG87dnIobiwiUmVtb3ZlIG92ZXJsYXBzIiwxKSxuLm4mJmUmJmdmKG4scGYoZSksKFNsKCksUWwpKSxyPXUocWUoZSwobTkoKSxIUykpLDMzKSx0LmY9cix0LmE9cHN0KHUocWUoZSwodXkoKSxxTykpLDI5MykpLHM9eWUocWUoZSwodWkoKSxXMikpKSxDQyh0LChPbihzKSxzKSksbz13eShyKSxBaGUodCxlLG8sbiksbi5uJiZlJiZnZihuLHBmKGUpLChTbCgpLFFsKSl9ZnVuY3Rpb24gTDV0KHQsZSxuKXtzd2l0Y2gobi5nKXtjYXNlIDE6cmV0dXJuIG5ldyAkZShlLmEsYi5NYXRoLm1pbih0LmQuYixlLmIpKTtjYXNlIDI6cmV0dXJuIG5ldyAkZShiLk1hdGgubWF4KHQuYy5hLGUuYSksZS5iKTtjYXNlIDM6cmV0dXJuIG5ldyAkZShlLmEsYi5NYXRoLm1heCh0LmMuYixlLmIpKTtjYXNlIDQ6cmV0dXJuIG5ldyAkZShiLk1hdGgubWluKGUuYSx0LmQuYSksZS5iKX1yZXR1cm4gbmV3ICRlKGUuYSxlLmIpfWZ1bmN0aW9uICQybih0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGssQyxNLGo7Zm9yKE09cj8odmUoKSxCbik6KHZlKCksSG4pLHM9ITEsdj1lW25dLGs9MCxDPXYubGVuZ3RoO2s8QzsrK2spZD12W2tdLCFqeCh1KFEoZCwoVGUoKSxjcykpLDk4KSkmJihoPWQuZSxqPSFLbyhkLE0pLmRjKCkmJiEhaCxqJiYobz1fNHQoaCksdC5iPW5ldyBTNHQobyxyPzA6by5sZW5ndGgtMSkpLHM9c3xSbW4odCxkLE0saikpO3JldHVybiBzfWZ1bmN0aW9uIHdJKHQpe3ZhciBlLG4scjtmb3IoZT1VZCgxKyghdC5jJiYodC5jPW5ldyBmZShnbCx0LDksOSkpLHQuYykuaSksbGUoZSwoIXQuZCYmKHQuZD1uZXcgQ24oWXMsdCw4LDUpKSx0LmQpKSxyPW5ldyBucigoIXQuYyYmKHQuYz1uZXcgZmUoZ2wsdCw5LDkpKSx0LmMpKTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksMTE4KSxsZShlLCghbi5kJiYobi5kPW5ldyBDbihZcyxuLDgsNSkpLG4uZCkpO3JldHVybiBMcihlKSxuZXcgZjkoZSl9ZnVuY3Rpb24gSzAodCl7dmFyIGUsbixyO2ZvcihlPVVkKDErKCF0LmMmJih0LmM9bmV3IGZlKGdsLHQsOSw5KSksdC5jKS5pKSxsZShlLCghdC5lJiYodC5lPW5ldyBDbihZcyx0LDcsNCkpLHQuZSkpLHI9bmV3IG5yKCghdC5jJiYodC5jPW5ldyBmZShnbCx0LDksOSkpLHQuYykpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSwxMTgpLGxlKGUsKCFuLmUmJihuLmU9bmV3IENuKFlzLG4sNyw0KSksbi5lKSk7cmV0dXJuIExyKGUpLG5ldyBmOShlKX1mdW5jdGlvbiB6Mm4odCl7dmFyIGUsbixyLHM7aWYodD09bnVsbClyZXR1cm4gbnVsbDtpZihyPSRjKHQsITApLHM9b08ubGVuZ3RoLGhuKHIuc3Vic3RyKHIubGVuZ3RoLXMscyksb08pKXtpZihuPXIubGVuZ3RoLG49PTQpe2lmKGU9KFJyKDAsci5sZW5ndGgpLHIuY2hhckNvZGVBdCgwKSksZT09NDMpcmV0dXJuIFRMdDtpZihlPT00NSlyZXR1cm4gVjVlfWVsc2UgaWYobj09MylyZXR1cm4gVEx0fXJldHVybiBkeShyKX1mdW5jdGlvbiBxMm4odCl7dmFyIGUsbixyLHM7Zm9yKGU9MCxuPTAscz1uZXcgUyh0LmopO3MuYTxzLmMuYy5sZW5ndGg7KWlmKHI9dShKKHMpLDExKSxlPUFyKFBhKGUsUUp0KFJpKG5ldyBUbihudWxsLG5ldyBfbihyLmUsMTYpKSxuZXcgTVEpKSkpLG49QXIoUGEobixRSnQoUmkobmV3IFRuKG51bGwsbmV3IF9uKHIuZywxNikpLG5ldyBEUSkpKSksZT4xfHxuPjEpcmV0dXJuIDI7cmV0dXJuIGUrbj09MT8yOjB9ZnVuY3Rpb24gamNlKHQsZSxuKXt2YXIgcixzLG8saCxkO2Zvcih2cihuLCJFTEsgRm9yY2UiLDEpLGplKFJlKHFlKGUsKEpmKCkseTd0KSkpKXx8eSQoKHI9bmV3IHJyKChQbSgpLG5ldyBNbShlKSkpLHIpKSxkPXByZShlKSxvZG4oZCksJHVuKHQsdShRKGQsbTd0KSw0MjQpKSxoPUFsZSh0LmEsZCksbz1oLktjKCk7by5PYigpOylzPXUoby5QYigpLDIzMSksa21uKHQuYixzLFJjKG4sMS9oLmdjKCkpKTtkPXpoZShoKSxSaGUoZCksb3Iobil9ZnVuY3Rpb24gSDJuKHQsZSl7dmFyIG4scixzLG8saDtpZih2cihlLCJCcmVha2luZyBQb2ludCBQcm9jZXNzb3IiLDEpLHU1bih0KSxqZShSZShRKHQsKFRlKCksUzl0KSkpKSl7Zm9yKHM9bmV3IFModC5iKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KEoocyksMjkpLG49MCxoPW5ldyBTKHIuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTApLG8ucD1uKys7aDNuKHQpLGN1ZSh0LCEwKSxjdWUodCwhMSl9b3IoZSl9ZnVuY3Rpb24gVjJuKHQsZSxuKXt2YXIgcixzLG8saCxkLHY7Zm9yKGQ9dC5jLGg9KG4ucT9uLnE6KHduKCksd24oKSx1MCkpLnZjKCkuS2MoKTtoLk9iKCk7KW89dShoLlBiKCksNDIpLHI9IXFDKFJpKG5ldyBUbihudWxsLG5ldyBfbihkLDE2KSksbmV3IFp0KG5ldyBFR3QoZSxvKSkpKS5zZCgoUWIoKSxvNykpLHImJih2PW8uZGQoKSxfdCh2LDQpJiYocz1PM3QodikscyE9bnVsbCYmKHY9cykpLGUuWWUodShvLmNkKCksMTQ2KSx2KSl9ZnVuY3Rpb24gdnEodCxlKXt2YXIgbixyLHMsbyxoO2lmKGUpe2ZvcihvPV90KHQuQ2IsODgpfHxfdCh0LkNiLDk5KSxoPSFvJiZfdCh0LkNiLDMyMikscj1uZXcgbnIoKCFlLmEmJihlLmE9bmV3IFQ5KGUsaG8sZSkpLGUuYSkpO3IuZSE9ci5pLmdjKCk7KWlmKG49dShkcihyKSw4Nykscz1McShuKSxvP190KHMsODgpOmg/X3QocywxNDgpOnMpcmV0dXJuIHM7cmV0dXJuIG8/KGRuKCksS2gpOihkbigpLFcxKX1lbHNlIHJldHVybiBudWxsfWZ1bmN0aW9uIEcybih0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3IodnIoZSwiQ29uc3RyYWludHMgUG9zdHByb2Nlc3NvciIsMSksaD0wLG89bmV3IFModC5iKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKHM9dShKKG8pLDI5KSxkPTAscj1uZXcgUyhzLmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDEwKSxuLms9PShWbigpLE9zKSYmKEp0KG4sKFRlKCksaEcpLHBlKGgpKSxKdChuLG9HLHBlKGQpKSwrK2QpOysraH1vcihlKX1mdW5jdGlvbiBVMm4odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEM7Zm9yKHY9bmV3ICRlKG4sciksaWEodix1KFEoZSwoZmMoKSwkUykpLDgpKSxDPWVpKGUuYiwwKTtDLmIhPUMuZC5jOylrPXUodGkoQyksODYpLExpKGsuZSx2KSxyaSh0LmIsayk7Zm9yKGQ9ZWkoZS5hLDApO2QuYiE9ZC5kLmM7KXtmb3IoaD11KHRpKGQpLDE4OCksbz1laShoLmEsMCk7by5iIT1vLmQuYzspcz11KHRpKG8pLDgpLExpKHMsdik7cmkodC5hLGgpfX1mdW5jdGlvbiBNNXQodCxlLG4pe3ZhciByLHMsbztpZihvPUM0KCgkdSgpLHlhKSx0LlRnKCksZSksbyl7aWYodG8oKSwhdShvLDY2KS5PaigpJiYobz1LeChUbyh5YSxvKSksIW8pKXRocm93IGl0KG5ldyBGbihsYitlLm5lKCkrWF8pKTtzPShyPXQuWWcobyksdShyPj0wP3QuX2cociwhMCwhMCk6ZHYodCxvLCEwKSwxNTMpKSx1KHMsMjE1KS5tbChlLG4pfWVsc2UgdGhyb3cgaXQobmV3IEZuKGxiK2UubmUoKStYXykpfWZ1bmN0aW9uIFcybih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKG49bmV3IGhlLHM9V28obmV3IFRuKG51bGwsbmV3IF9uKHQsMTYpKSxuZXcgWlEpLG89V28obmV3IFRuKG51bGwsbmV3IF9uKHQsMTYpKSxuZXcgSlEpLGg9eW9uKEZhbihsJChfd24obHQoY3QobjZuLDEpLERlLDgzMywwLFtzLG9dKSksbmV3IHRaKSkpLHI9MTtyPGgubGVuZ3RoO3IrKyloW3JdLWhbci0xXT49MiplJiZsZShuLG5ldyBEbnQoaFtyLTFdK2UsaFtyXS1lKSk7cmV0dXJuIG59ZnVuY3Rpb24gWTJuKHQsZSxuKXt2cihuLCJFYWRlcyByYWRpYWwiLDEpLG4ubiYmZSYmZ2YobixwZihlKSwoU2woKSxRbCkpLHQuZD11KHFlKGUsKG05KCksSFMpKSwzMyksdC5jPVh0KHllKHFlKGUsKHV5KCksUkcpKSkpLHQuZT1wc3QodShxZShlLHFPKSwyOTMpKSx0LmE9U2huKHUocWUoZSxEX3QpLDQyNikpLHQuYj1LZG4odShxZShlLE1fdCksMzQwKSksTGRuKHQpLG4ubiYmZSYmZ2YobixwZihlKSwoU2woKSxRbCkpfWZ1bmN0aW9uIEsybih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQztpZihuKWZvcihvPW4uYS5sZW5ndGgscj1uZXcgZTIobyksZD0oci5iLXIuYSkqci5jPDA/KEZwKCksSWIpOm5ldyBqcChyKTtkLk9iKCk7KWg9dShkLlBiKCksMTkpLHM9UDgobixoLmEpLHMmJih2PVdzbih0LChrPShTdygpLEM9bmV3IEdwdCxDKSxlJiZENXQoayxlKSxrKSxzKSxHOSh2LFIwKHMsQWQpKSxscShzLHYpLGU1dChzLHYpLExpdCh0LHMsdikpfWZ1bmN0aW9uIG1xKHQpe3ZhciBlLG4scixzLG8saDtpZighdC5qKXtpZihoPW5ldyB0QyxlPXVBLG89ZS5hLnpjKHQsZSksbz09bnVsbCl7Zm9yKHI9bmV3IG5yKEFvKHQpKTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksMjYpLHM9bXEobiksaXMoaCxzKSxEcihoLG4pO2UuYS5CYyh0KSE9bnVsbH1peShoKSx0Lmo9bmV3IFYzKCh1KEF0KFd0KChIcCgpLExuKS5vKSwxMSksMTgpLGguaSksaC5nKSxzbCh0KS5iJj0tMzN9cmV0dXJuIHQuan1mdW5jdGlvbiBYMm4odCl7dmFyIGUsbixyLHM7aWYodD09bnVsbClyZXR1cm4gbnVsbDtpZihyPSRjKHQsITApLHM9b08ubGVuZ3RoLGhuKHIuc3Vic3RyKHIubGVuZ3RoLXMscyksb08pKXtpZihuPXIubGVuZ3RoLG49PTQpe2lmKGU9KFJyKDAsci5sZW5ndGgpLHIuY2hhckNvZGVBdCgwKSksZT09NDMpcmV0dXJuIENMdDtpZihlPT00NSlyZXR1cm4gRzVlfWVsc2UgaWYobj09MylyZXR1cm4gQ0x0fXJldHVybiBuZXcgUHB0KHIpfWZ1bmN0aW9uIFEybih0KXt2YXIgZSxuLHI7cmV0dXJuIG49dC5sLG4mbi0xfHwocj10Lm0sciZyLTEpfHwoZT10LmgsZSZlLTEpfHxlPT0wJiZyPT0wJiZuPT0wPy0xOmU9PTAmJnI9PTAmJm4hPTA/dHl0KG4pOmU9PTAmJnIhPTAmJm49PTA/dHl0KHIpKzIyOmUhPTAmJnI9PTAmJm49PTA/dHl0KGUpKzQ0Oi0xfWZ1bmN0aW9uIFoybih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKHZyKGUsIkVkZ2Ugam9pbmluZyIsMSksbj1qZShSZShRKHQsKFRlKCksZGh0KSkpKSxzPW5ldyBTKHQuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShKKHMpLDI5KSxoPW5ldyBkYShyLmEsMCk7aC5iPGguZC5nYygpOylvPShabihoLmI8aC5kLmdjKCkpLHUoaC5kLlhiKGguYz1oLmIrKyksMTApKSxvLms9PShWbigpLHRhKSYmKEJhdChvLG4pLENsKGgpKTtvcihlKX1mdW5jdGlvbiBKMm4odCxlLG4pe3ZhciByLHM7aWYoTCQodC5iKSxLZCh0LmIsKEtEKCksakcpLChVQygpLFZPKSksS2QodC5iLCRHLGUuZyksS2QodC5iLHpHLGUuYSksdC5hPUZxKHQuYixlKSx2cihuLCJDb21wYWN0aW9uIGJ5IHNocmlua2luZyBhIHRyZWUiLHQuYS5jLmxlbmd0aCksZS5pLmMubGVuZ3RoPjEpZm9yKHM9bmV3IFModC5hKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSw1MSksci5wZihlLFJjKG4sMSkpO29yKG4pfWZ1bmN0aW9uIG00KHQsZSl7dmFyIG4scixzLG8saDtmb3Iocz1lLmEmdC5mLG89bnVsbCxyPXQuYltzXTs7cj1yLmIpe2lmKHI9PWUpe28/by5iPWUuYjp0LmJbc109ZS5iO2JyZWFrfW89cn1mb3IoaD1lLmYmdC5mLG89bnVsbCxuPXQuY1toXTs7bj1uLmQpe2lmKG49PWUpe28/by5kPWUuZDp0LmNbaF09ZS5kO2JyZWFrfW89bn1lLmU/ZS5lLmM9ZS5jOnQuYT1lLmMsZS5jP2UuYy5lPWUuZTp0LmU9ZS5lLC0tdC5pLCsrdC5nfWZ1bmN0aW9uIHR3bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQztmb3Iobj10Lm8sZT10LnAsaD13aSxzPVNhLGQ9d2ksbz1TYSxrPTA7azxuOysraylmb3IoQz0wO0M8ZTsrK0MpZjQodCxrLEMpJiYoaD1iLk1hdGgubWluKGgsaykscz1iLk1hdGgubWF4KHMsayksZD1iLk1hdGgubWluKGQsQyksbz1iLk1hdGgubWF4KG8sQykpO3JldHVybiB2PXMtaCsxLHI9by1kKzEsbmV3IHpYdChwZShoKSxwZShkKSxwZSh2KSxwZShyKSl9ZnVuY3Rpb24gYWF0KHQsZSl7dmFyIG4scixzLG87Zm9yKG89bmV3IGRhKHQsMCksbj0oWm4oby5iPG8uZC5nYygpKSx1KG8uZC5YYihvLmM9by5iKyspLDE0MCkpO28uYjxvLmQuZ2MoKTspcj0oWm4oby5iPG8uZC5nYygpKSx1KG8uZC5YYihvLmM9by5iKyspLDE0MCkpLHM9bmV3ICR3dChyLmMsbi5kLGUpLFpuKG8uYj4wKSxvLmEuWGIoby5jPS0tby5iKSx6bShvLHMpLFpuKG8uYjxvLmQuZ2MoKSksby5kLlhiKG8uYz1vLmIrKykscy5hPSExLG49cn1mdW5jdGlvbiAkY2UodCl7dmFyIGUsbixyLHMsbyxoO2ZvcihzPXUoUSh0LChhZSgpLFpWKSksMTEpLGg9bmV3IFModC5qKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zm9yKG89dShKKGgpLDExKSxyPW5ldyBTKG8uZyk7ci5hPHIuYy5jLmxlbmd0aDspcmV0dXJuIGU9dShKKHIpLDE3KSxvYShlLHMpLG87Zm9yKG49bmV3IFMoby5lKTtuLmE8bi5jLmMubGVuZ3RoOylyZXR1cm4gZT11KEoobiksMTcpLE9hKGUscyksb31yZXR1cm4gbnVsbH1mdW5jdGlvbiBld24odCxlLG4pe3ZhciByLHM7cj1UdShuLnEuZ2V0VGltZSgpKSx5YyhyLDApPDA/KHM9V2ctQXIoUUQoejgociksV2cpKSxzPT1XZyYmKHM9MCkpOnM9QXIoUUQocixXZykpLGU9PTE/KHM9Yi5NYXRoLm1pbigocys1MCkvMTAwfDAsOSkscXAodCw0OCtzJnlzKSk6ZT09Mj8ocz1iLk1hdGgubWluKChzKzUpLzEwfDAsOTkpLEpkKHQscywyKSk6KEpkKHQscywzKSxlPjMmJkpkKHQsMCxlLTMpKX1mdW5jdGlvbiBud24odCl7dmFyIGUsbixyLHM7cmV0dXJuIFZ0KFEodCwoVGUoKSxxeSkpKT09PVZ0KChHMCgpLHNwKSk/IXQuZSYmVnQoUSh0LERPKSkhPT1WdCgoZUUoKSxUTykpOihyPXUoUSh0LGVodCksMjkyKSxzPWplKFJlKFEodCxuaHQpKSl8fFZ0KFEodCxfUykpPT09VnQoKG42KCksRU8pKSxlPXUoUSh0LFZDdCksMTkpLmEsbj10LmEuYy5sZW5ndGgsIXMmJnIhPShlRSgpLFRPKSYmKGU9PTB8fGU+bikpfWZ1bmN0aW9uIHJ3bih0KXt2YXIgZSxuO2ZvcihuPTA7bjx0LmMubGVuZ3RoJiYhKGxLdCgoQW4obix0LmMubGVuZ3RoKSx1KHQuY1tuXSwxMTMpKSk+MCk7bisrKTtpZihuPjAmJm48dC5jLmxlbmd0aC0xKXJldHVybiBuO2ZvcihlPTA7ZTx0LmMubGVuZ3RoJiYhKGxLdCgoQW4oZSx0LmMubGVuZ3RoKSx1KHQuY1tlXSwxMTMpKSk+MCk7ZSsrKTtyZXR1cm4gZT4wJiZuPHQuYy5sZW5ndGgtMT9lOnQuYy5sZW5ndGgvMnwwfWZ1bmN0aW9uIHpjZSh0LGUpe3ZhciBuLHI7aWYoZSE9dC5DYnx8dC5EYj4+MTYhPTYmJmUpe2lmKHZFKHQsZSkpdGhyb3cgaXQobmV3IEZuKFFfK3NjZSh0KSkpO3I9bnVsbCx0LkNiJiYocj0obj10LkRiPj4xNixuPj0wP3I0dCh0LHIpOnQuQ2IuaWgodCwtMS1uLG51bGwscikpKSxlJiYocj1jNihlLHQsNixyKSkscj1ld3QodCxlLHIpLHImJnIuRmkoKX1lbHNlIHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBKcyh0LDEsNixlLGUpKX1mdW5jdGlvbiBENXQodCxlKXt2YXIgbixyO2lmKGUhPXQuQ2J8fHQuRGI+PjE2IT05JiZlKXtpZih2RSh0LGUpKXRocm93IGl0KG5ldyBGbihRXyt6dWUodCkpKTtyPW51bGwsdC5DYiYmKHI9KG49dC5EYj4+MTYsbj49MD9zNHQodCxyKTp0LkNiLmloKHQsLTEtbixudWxsLHIpKSksZSYmKHI9YzYoZSx0LDkscikpLHI9bnd0KHQsZSxyKSxyJiZyLkZpKCl9ZWxzZSB0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgSnModCwxLDksZSxlKSl9ZnVuY3Rpb24gb2F0KHQsZSl7dmFyIG4scjtpZihlIT10LkNifHx0LkRiPj4xNiE9MyYmZSl7aWYodkUodCxlKSl0aHJvdyBpdChuZXcgRm4oUV8rJGxlKHQpKSk7cj1udWxsLHQuQ2ImJihyPShuPXQuRGI+PjE2LG4+PTA/bzR0KHQscik6dC5DYi5paCh0LC0xLW4sbnVsbCxyKSkpLGUmJihyPWM2KGUsdCwxMixyKSkscj10d3QodCxlLHIpLHImJnIuRmkoKX1lbHNlIHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBKcyh0LDEsMyxlLGUpKX1mdW5jdGlvbiBTRSh0KXt2YXIgZSxuLHIscyxvO2lmKHI9RGgodCksbz10Lmosbz09bnVsbCYmcilyZXR1cm4gdC4kaigpP251bGw6ci56aigpO2lmKF90KHIsMTQ4KSl7aWYobj1yLkFqKCksbiYmKHM9bi5OaCgpLHMhPXQuaSkpe2lmKGU9dShyLDE0OCksZS5FaigpKXRyeXt0Lmc9cy5LaChlLG8pfWNhdGNoKGgpe2lmKGg9V2koaCksX3QoaCw3OCkpdC5nPW51bGw7ZWxzZSB0aHJvdyBpdChoKX10Lmk9c31yZXR1cm4gdC5nfXJldHVybiBudWxsfWZ1bmN0aW9uIHFjZSh0KXt2YXIgZTtyZXR1cm4gZT1uZXcgaGUsbGUoZSxuZXcgRHgobmV3ICRlKHQuYyx0LmQpLG5ldyAkZSh0LmMrdC5iLHQuZCkpKSxsZShlLG5ldyBEeChuZXcgJGUodC5jLHQuZCksbmV3ICRlKHQuYyx0LmQrdC5hKSkpLGxlKGUsbmV3IER4KG5ldyAkZSh0LmMrdC5iLHQuZCt0LmEpLG5ldyAkZSh0LmMrdC5iLHQuZCkpKSxsZShlLG5ldyBEeChuZXcgJGUodC5jK3QuYix0LmQrdC5hKSxuZXcgJGUodC5jLHQuZCt0LmEpKSksZX1mdW5jdGlvbiBIY2UodCxlLG4scil7dmFyIHMsbyxoO2lmKGg9cDR0KGUsbiksci5jW3IuYy5sZW5ndGhdPWUsdC5qW2gucF09PS0xfHx0LmpbaC5wXT09Mnx8dC5hW2UucF0pcmV0dXJuIHI7Zm9yKHQualtoLnBdPS0xLG89bmV3IGFyKGxyKFUwKGgpLmEuS2MoKSxuZXcgeikpO3pyKG8pOylpZihzPXUoTXIobyksMTcpLCEoISghR2EocykmJiEoIUdhKHMpJiZzLmMuaS5jPT1zLmQuaS5jKSl8fHM9PWUpKXJldHVybiBIY2UodCxzLGgscik7cmV0dXJuIHJ9ZnVuY3Rpb24gaXduKHQsZSxuKXt2YXIgcixzLG87Zm9yKG89ZS5hLmVjKCkuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksNzkpLHI9dSh0cih0LmIscyksMjY2KSwhciYmKGVzKGUwKHMpKT09ZXModGIocykpP212bih0LHMsbik6ZTAocyk9PWVzKHRiKHMpKT90cih0LmMscyk9PW51bGwmJnRyKHQuYix0YihzKSkhPW51bGwmJmtoZSh0LHMsbiwhMSk6dHIodC5kLHMpPT1udWxsJiZ0cih0LmIsZTAocykpIT1udWxsJiZraGUodCxzLG4sITApKX1mdW5jdGlvbiBzd24odCxlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3Iocz10LktjKCk7cy5PYigpOylmb3Iocj11KHMuUGIoKSwxMCksZD1uZXcgTWMsVW8oZCxyKSxCcyhkLCh2ZSgpLEhuKSksSnQoZCwoYWUoKSxuRyksKE5uKCksITApKSxoPWUuS2MoKTtoLk9iKCk7KW89dShoLlBiKCksMTApLHY9bmV3IE1jLFVvKHYsbyksQnModixCbiksSnQodixuRywhMCksbj1uZXcgVncsSnQobixuRywhMCksT2EobixkKSxvYShuLHYpfWZ1bmN0aW9uIGF3bih0LGUsbixyKXt2YXIgcyxvLGgsZDtzPVJpZSh0LGUsbiksbz1SaWUodCxuLGUpLGg9dSh0cih0LmMsZSksMTEyKSxkPXUodHIodC5jLG4pLDExMiksczxvP25ldyBpMigoVWYoKSxLeSksaCxkLG8tcyk6bzxzP25ldyBpMigoVWYoKSxLeSksZCxoLHMtbyk6KHMhPTB8fCEoIWUuaXx8IW4uaSkmJnJbZS5pLmNdW24uaS5jXSkmJihuZXcgaTIoKFVmKCksS3kpLGgsZCwwKSxuZXcgaTIoS3ksZCxoLDApKX1mdW5jdGlvbiBWY2UodCxlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3Iocz0wLGg9bmV3IFMoZS5hKTtoLmE8aC5jLmMubGVuZ3RoOylmb3Iobz11KEooaCksMTApLHMrPW8uby5iK28uZC5hK28uZC5kK3QuZSxyPW5ldyBhcihscihqbyhvKS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KE1yKHIpLDE3KSxuLmMuaS5rPT0oVm4oKSxIYykmJih2PW4uYy5pLGQ9dShRKHYsKGFlKCksX2kpKSwxMCkscys9ZC5vLmIrZC5kLmErZC5kLmQpO3JldHVybiBzfWZ1bmN0aW9uIEdjZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGs7Zm9yKG89bmV3IGhlLGs9bmV3IFppLGg9bmV3IFppLEt5bih0LGssaCxlKSxzNW4odCxrLGgsZSxuKSx2PW5ldyBTKHQpO3YuYTx2LmMuYy5sZW5ndGg7KWZvcihkPXUoSih2KSwxMTIpLHM9bmV3IFMoZC5rKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxMjkpLCghZXx8ci5jPT0oVWYoKSxtYikpJiZkLmc+ci5iLmcmJihvLmNbby5jLmxlbmd0aF09cik7cmV0dXJuIG99ZnVuY3Rpb24gQUUoKXtBRT1aLGk1PW5ldyBETSgiQ0FORElEQVRFX1BPU0lUSU9OX0xBU1RfUExBQ0VEX1JJR0hUIiwwKSxHNj1uZXcgRE0oIkNBTkRJREFURV9QT1NJVElPTl9MQVNUX1BMQUNFRF9CRUxPVyIsMSksR1M9bmV3IERNKCJDQU5ESURBVEVfUE9TSVRJT05fV0hPTEVfRFJBV0lOR19SSUdIVCIsMiksVlM9bmV3IERNKCJDQU5ESURBVEVfUE9TSVRJT05fV0hPTEVfRFJBV0lOR19CRUxPVyIsMyksVVM9bmV3IERNKCJXSE9MRV9EUkFXSU5HIiw0KX1mdW5jdGlvbiBvd24odCxlKXtpZihfdChlLDIzOSkpcmV0dXJuIEJsbih0LHUoZSwzMykpO2lmKF90KGUsMTg2KSlyZXR1cm4gWGxuKHQsdShlLDExOCkpO2lmKF90KGUsMzU0KSlyZXR1cm4gdXJuKHQsdShlLDEzNykpO2lmKF90KGUsMzUyKSlyZXR1cm4gT3luKHQsdShlLDc5KSk7aWYoZSlyZXR1cm4gbnVsbDt0aHJvdyBpdChuZXcgRm4oTDh0K2ViKG5ldyB5bChsdChjdChRbiwxKSxEZSwxLDUsW2VdKSkpKSl9ZnVuY3Rpb24gY3duKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihvPW5ldyBaaSxzPW5ldyBTKHQuZC5hKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxMjEpLHIuYi5hLmMubGVuZ3RoPT0wJiZmcyhvLHIsby5jLmIsby5jKTtpZihvLmI+MSlmb3IoZT1Gdygobj1uZXcgWGIsKyt0LmIsbiksdC5kKSxkPWVpKG8sMCk7ZC5iIT1kLmQuYzspaD11KHRpKGQpLDEyMSkseWYobGYodWYoaGYoY2YobmV3IENoLDEpLDApLGUpLGgpKX1mdW5jdGlvbiBJNXQodCxlKXt2YXIgbixyO2lmKGUhPXQuQ2J8fHQuRGI+PjE2IT0xMSYmZSl7aWYodkUodCxlKSl0aHJvdyBpdChuZXcgRm4oUV8rWDV0KHQpKSk7cj1udWxsLHQuQ2ImJihyPShuPXQuRGI+PjE2LG4+PTA/YzR0KHQscik6dC5DYi5paCh0LC0xLW4sbnVsbCxyKSkpLGUmJihyPWM2KGUsdCwxMCxyKSkscj1sd3QodCxlLHIpLHImJnIuRmkoKX1lbHNlIHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBKcyh0LDEsMTEsZSxlKSl9ZnVuY3Rpb24gdXduKHQpe3ZhciBlLG4scixzO2ZvcihyPW5ldyBwMihuZXcgQ2codC5iKS5hKTtyLmI7KW49Wncocikscz11KG4uY2QoKSwxMSksZT11KG4uZGQoKSwxMCksSnQoZSwoYWUoKSxfaSkscyksSnQocyxKdSxlKSxKdChzLFNPLChObigpLCEwKSksQnMocyx1KFEoZSxvYyksNjEpKSxRKGUsb2MpLEp0KHMuaSwoVGUoKSxjcyksKHVhKCksQjcpKSx1KFEoTmEocy5pKSxWYyksMjEpLkZjKChvbygpLHk3KSl9ZnVuY3Rpb24gbHduKHQsZSxuKXt2YXIgcixzLG8saCxkLHY7aWYobz0wLGg9MCx0LmMpZm9yKHY9bmV3IFModC5kLmkuaik7di5hPHYuYy5jLmxlbmd0aDspZD11KEoodiksMTEpLG8rPWQuZS5jLmxlbmd0aDtlbHNlIG89MTtpZih0LmQpZm9yKHY9bmV3IFModC5jLmkuaik7di5hPHYuYy5jLmxlbmd0aDspZD11KEoodiksMTEpLGgrPWQuZy5jLmxlbmd0aDtlbHNlIGg9MTtyZXR1cm4gcz1wcyhKTShoLW8pKSxyPShuK2UpLzIrKG4tZSkqKC40KnMpLHJ9ZnVuY3Rpb24gaHduKHQpe2I0KCk7dmFyIGUsbjtpZih0LkhjKCh2ZSgpLFpvKSkpdGhyb3cgaXQobmV3IEZuKCJQb3J0IHNpZGVzIG11c3Qgbm90IGNvbnRhaW4gVU5ERUZJTkVEIikpO3N3aXRjaCh0LmdjKCkpe2Nhc2UgMTpyZXR1cm4gJFY7Y2FzZSAyOnJldHVybiBlPXQuSGMoSG4pJiZ0LkhjKEJuKSxuPXQuSGMoUG4pJiZ0LkhjKG1yKSxlfHxuP0hWOnFWO2Nhc2UgMzpyZXR1cm4gelY7Y2FzZSA0OnJldHVybiBqVjtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBmd24odCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKHZyKG4sIkJyZWFraW5nIFBvaW50IFJlbW92aW5nIiwxKSx0LmE9dShRKGUsKFRlKCksZWcpKSwyMTgpLG89bmV3IFMoZS5iKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KEoobyksMjkpLGQ9bmV3IFMoV3cocy5hKSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTApLHllZShoKSYmKHI9dShRKGgsKGFlKCksSXYpKSwzMDUpLCFyLmQmJnFoZSh0LHIpKTtvcihuKX1mdW5jdGlvbiBjYXQodCxlLG4pe3JldHVybiBrNCgpLFE4KHQsZSkmJlE4KHQsbik/ITE6amF0KG5ldyAkZSh0LmMsdC5kKSxuZXcgJGUodC5jK3QuYix0LmQpLGUsbil8fGphdChuZXcgJGUodC5jK3QuYix0LmQpLG5ldyAkZSh0LmMrdC5iLHQuZCt0LmEpLGUsbil8fGphdChuZXcgJGUodC5jK3QuYix0LmQrdC5hKSxuZXcgJGUodC5jLHQuZCt0LmEpLGUsbil8fGphdChuZXcgJGUodC5jLHQuZCt0LmEpLG5ldyAkZSh0LmMsdC5kKSxlLG4pfWZ1bmN0aW9uIE81dCh0LGUpe3ZhciBuLHIscyxvO2lmKCF0LmRjKCkpe2ZvcihuPTAscj10LmdjKCk7bjxyOysrbilpZihvPUJyKHQuWGIobikpLG89PW51bGw/ZT09bnVsbDpobihvLnN1YnN0cigwLDMpLCIhIyMiKT9lIT1udWxsJiYocz1lLmxlbmd0aCwhaG4oby5zdWJzdHIoby5sZW5ndGgtcyxzKSxlKXx8by5sZW5ndGghPWUubGVuZ3RoKzMpJiYhaG4oTzIsZSk6aG4obyxwdXQpJiYhaG4oTzIsZSl8fGhuKG8sZSkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gZHduKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsaztmb3IoaD10LmouYy5sZW5ndGgsdj1OdChzNm4sZTZ0LDMwNixoLDAsMSksZD0wO2Q8aDtkKyspbz11KE5lKHQuaixkKSwxMSksby5wPWQsdltkXT1tYm4oYmNlKG8pLG4scik7Zm9yKEJ3bih0LHYsbixlLHIpLGs9bmV3IF9yLHM9MDtzPHYubGVuZ3RoO3MrKyl2W3NdJiZraShrLHUoTmUodC5qLHMpLDExKSx2W3NdKTtrLmYuYytrLmcuYyE9MCYmKEp0KHQsKGFlKCksa1MpLGspLHpnbih0LHYpKX1mdW5jdGlvbiBnd24odCxlLG4pe3ZhciByLHMsbztmb3Iocz1uZXcgUyh0LmEuYik7cy5hPHMuYy5jLmxlbmd0aDspaWYocj11KEoocyksNTcpLG89dDQociksbyYmby5rPT0oVm4oKSxrcykpc3dpdGNoKHUoUShvLChhZSgpLG9jKSksNjEpLmcpe2Nhc2UgNDpvLm4uYT1lLmE7YnJlYWs7Y2FzZSAyOm8ubi5hPW4uYS0oby5vLmErby5kLmMpO2JyZWFrO2Nhc2UgMTpvLm4uYj1lLmI7YnJlYWs7Y2FzZSAzOm8ubi5iPW4uYi0oby5vLmIrby5kLmEpfX1mdW5jdGlvbiB5NCgpe3k0PVosa0c9bmV3IEl4KEowLDApLEZPPW5ldyBJeCgiTklLT0xPViIsMSksTk89bmV3IEl4KCJOSUtPTE9WX1BJWEVMIiwyKSxSOXQ9bmV3IEl4KCJOSUtPTE9WX0lNUFJPVkVEIiwzKSxqOXQ9bmV3IEl4KCJOSUtPTE9WX0lNUFJPVkVEX1BJWEVMIiw0KSxCOXQ9bmV3IEl4KCJEVU1NWU5PREVfUEVSQ0VOVEFHRSIsNSksJDl0PW5ldyBJeCgiTk9ERUNPVU5UX1BFUkNFTlRBR0UiLDYpLEVHPW5ldyBJeCgiTk9fQk9VTkRBUlkiLDcpfWZ1bmN0aW9uIHB3bih0LGUsbil7dmFyIHIscyxvLGgsZDtyZXR1cm4gcz11KHFlKGUsKGZxKCksRlN0KSksMTkpLCFzJiYocz1wZSgwKSksbz11KHFlKG4sRlN0KSwxOSksIW8mJihvPXBlKDApKSxzLmE+by5hPy0xOnMuYTxvLmE/MTp0LmEmJihyPU1zKGUuaixuLmopLHIhPTB8fChyPU1zKGUuaSxuLmkpLHIhPTApKT9yOihoPWUuZyplLmYsZD1uLmcqbi5mLE1zKGgsZCkpfWZ1bmN0aW9uIGJ3bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNO2lmKCsrdC5lLHY9dC5kPT1udWxsPzA6dC5kLmxlbmd0aCxlPnYpe2ZvcihDPXQuZCx0LmQ9TnQoWEF0LFI4dCw2MywyKnYrNCwwLDEpLG89MDtvPHY7KytvKWlmKGs9Q1tvXSxrKWZvcihyPWsuZyxNPWsuaSxkPTA7ZDxNOysrZClzPXUocltkXSwxMzMpLGg9cnd0KHQscy5TaCgpKSxuPXQuZFtoXSwhbiYmKG49dC5kW2hdPXQudWooKSksbi5GYyhzKTtyZXR1cm4hMH1lbHNlIHJldHVybiExfWZ1bmN0aW9uIHd3bih0LGUsbil7dmFyIHIscyxvLGgsZCx2O2lmKHM9bixvPXMuYWsoKSxYMCh0LmUsbykpe2lmKG8uaGkoKSl7Zm9yKHI9dSh0LmcsMTE5KSxoPTA7aDx0Lmk7KytoKWlmKGQ9cltoXSx5aShkLHMpJiZoIT1lKXRocm93IGl0KG5ldyBGbihlTykpfX1lbHNlIGZvcih2PW91KHQuZS5UZygpLG8pLHI9dSh0LmcsMTE5KSxoPTA7aDx0Lmk7KytoKWlmKGQ9cltoXSx2LnJsKGQuYWsoKSkpdGhyb3cgaXQobmV3IEZuKGFPKSk7bl8odCxlLG4pfWZ1bmN0aW9uIFVjZSh0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3Iobj11KFEoZSwoYWUoKSxCeSkpLDIxKSxoPXUoQWkoKHFhdCgpLFBpKSxuKSwyMSksZD11KEFpKFFyLG4pLDIxKSxvPWguS2MoKTtvLk9iKCk7KWlmKHI9dShvLlBiKCksMjEpLCF1KEFpKHQuYixyKSwxNSkuZGMoKSlyZXR1cm4hMTtmb3Iocz1kLktjKCk7cy5PYigpOylpZihyPXUocy5QYigpLDIxKSwhdShBaSh0LmIsciksMTUpLmRjKCkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gdnduKHQsZSl7dmFyIG4scixzLG8saCxkO2Zvcih2cihlLCJQYXJ0aXRpb24gcG9zdHByb2Nlc3NpbmciLDEpLHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOylmb3Iobj11KEoociksMjkpLG89bmV3IFMobi5hKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KEoobyksMTApLGQ9bmV3IFMocy5qKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxMSksamUoUmUoUShoLChhZSgpLG5HKSkpKSYmTDkoZCk7b3IoZSl9ZnVuY3Rpb24gV2NlKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDO2lmKHQuYS5jLmxlbmd0aD09MSlyZXR1cm4gUWFlKHUoTmUodC5hLDApLDE4NyksZSk7Zm9yKGg9eGxuKHQpLHY9MCxrPXQuZCxvPWgsQz10LmQsZD0oay1vKS8yK287bysxPGs7KXtmb3Iodj0wLHI9bmV3IFModC5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxODcpLHYrPShzPV9fKG4sZCwhMSkscy5hKTt2PGU/KEM9ZCxrPWQpOm89ZCxkPShrLW8pLzIrb31yZXR1cm4gQ31mdW5jdGlvbiBtd24odCl7dmFyIGUsbixyLHMsbztyZXR1cm4gaXNOYU4odCk/KHE4KCksb0V0KTp0PC05MjIzMzcyMDM2ODU0Nzc2ZTM/KHE4KCksUmdlKTp0Pj05MjIzMzcyMDM2ODU0Nzc2ZTM/KHE4KCksc0V0KToocz0hMSx0PDAmJihzPSEwLHQ9LXQpLHI9MCx0Pj1DMiYmKHI9cHModC9DMiksdC09cipDMiksbj0wLHQ+PW02JiYobj1wcyh0L202KSx0LT1uKm02KSxlPXBzKHQpLG89aXUoZSxuLHIpLHMmJkFpdChvKSxvKX1mdW5jdGlvbiB5d24odCxlKXt2YXIgbixyLHMsbztmb3Iobj0hZXx8IXQudS5IYygoWnUoKSxzZykpLG89MCxzPW5ldyBTKHQuZS5DZigpKTtzLmE8cy5jLmMubGVuZ3RoOyl7aWYocj11KEoocyksODM4KSxyLkhmKCk9PSh2ZSgpLFpvKSl0aHJvdyBpdChuZXcgRm4oIkxhYmVsIGFuZCBub2RlIHNpemUgY2FsY3VsYXRvciBjYW4gb25seSBiZSB1c2VkIHdpdGggcG9ydHMgdGhhdCBoYXZlIHBvcnQgc2lkZXMgYXNzaWduZWQuIikpO3IudmYobysrKSx2bG4odCxyLG4pfX1mdW5jdGlvbiB4d24odCxlKXt2YXIgbixyLHMsbyxoO3JldHVybiBzPWUuSGgodC5hKSxzJiYocj0oIXMuYiYmKHMuYj1uZXcga2woKGRuKCksUWEpLGNjLHMpKSxzLmIpLG49QnIoWGYocixBYSkpLG4hPW51bGwmJihvPW4ubGFzdEluZGV4T2YoIiMiKSxoPW89PS0xP1cydCh0LGUuQWooKSxuKTpvPT0wP3lEKHQsbnVsbCxuLnN1YnN0cigxKSk6eUQodCxuLnN1YnN0cigwLG8pLG4uc3Vic3RyKG8rMSkpLF90KGgsMTQ4KSkpP3UoaCwxNDgpOm51bGx9ZnVuY3Rpb24ga3duKHQsZSl7dmFyIG4scixzLG8saDtyZXR1cm4gcj1lLkhoKHQuYSksciYmKG49KCFyLmImJihyLmI9bmV3IGtsKChkbigpLFFhKSxjYyxyKSksci5iKSxvPUJyKFhmKG4sZ3V0KSksbyE9bnVsbCYmKHM9by5sYXN0SW5kZXhPZigiIyIpLGg9cz09LTE/VzJ0KHQsZS5BaigpLG8pOnM9PTA/eUQodCxudWxsLG8uc3Vic3RyKDEpKTp5RCh0LG8uc3Vic3RyKDAscyksby5zdWJzdHIocysxKSksX3QoaCwxNDgpKSk/dShoLDE0OCk6bnVsbH1mdW5jdGlvbiBQNXQodCl7dmFyIGUsbixyLHMsbztmb3Iobj1uZXcgUyh0LmEuYSk7bi5hPG4uYy5jLmxlbmd0aDspe2ZvcihlPXUoSihuKSwzMDcpLGUuaj1udWxsLG89ZS5hLmEuZWMoKS5LYygpO28uT2IoKTspcj11KG8uUGIoKSw1NyksR2Yoci5iKSwoIWUuanx8ci5kLmM8ZS5qLmQuYykmJihlLmo9cik7Zm9yKHM9ZS5hLmEuZWMoKS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSw1Nyksci5iLmE9ci5kLmMtZS5qLmQuYyxyLmIuYj1yLmQuZC1lLmouZC5kfXJldHVybiB0fWZ1bmN0aW9uIHlxKHQpe3ZhciBlLG4scixzLG87Zm9yKG49bmV3IFModC5hLmEpO24uYTxuLmMuYy5sZW5ndGg7KXtmb3IoZT11KEoobiksMTg5KSxlLmY9bnVsbCxvPWUuYS5hLmVjKCkuS2MoKTtvLk9iKCk7KXI9dShvLlBiKCksODEpLEdmKHIuZSksKCFlLmZ8fHIuZy5jPGUuZi5nLmMpJiYoZS5mPXIpO2ZvcihzPWUuYS5hLmVjKCkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksODEpLHIuZS5hPXIuZy5jLWUuZi5nLmMsci5lLmI9ci5nLmQtZS5mLmcuZH1yZXR1cm4gdH1mdW5jdGlvbiBFd24odCl7dmFyIGUsbixyO3JldHVybiBuPXUodC5hLDE5KS5hLHI9dSh0LmIsMTkpLmEsZT1iLk1hdGgubWF4KGIuTWF0aC5hYnMobiksYi5NYXRoLmFicyhyKSksbjxlJiZyPT0tZT9uZXcgZmEocGUobisxKSxwZShyKSk6bj09ZSYmcjxlP25ldyBmYShwZShuKSxwZShyKzEpKTpuPj0tZSYmcj09ZT9uZXcgZmEocGUobi0xKSxwZShyKSk6bmV3IGZhKHBlKG4pLHBlKHItMSkpfWZ1bmN0aW9uIFljZSgpe3JldHVybiBybygpLGx0KGN0KGw2biwxKSxvZSw3NywwLFtKN3QsWDd0LGdTLGdsdCx2VHQsQ1YsRlYsaDcsYlR0LG9UdCxnVHQsbDcsd1R0LGlUdCxtVHQsVjd0LExWLHBsdCxFVixJVix4VHQsRFYsRzd0LHBUdCxrVHQsT1YseVR0LFRWLGVUdCxmVHQsaFR0LE5WLFk3dCxrVixTVixXN3QsdTcsdVR0LHNUdCxkVHQscFMsUTd0LEs3dCxsVHQsYVR0LEFWLFBWLFU3dCxNVixjVHQsX1YsblR0LHRUdCx4Tyx4VixyVHQsWjd0XSl9ZnVuY3Rpb24gVHduKHQsZSxuKXt0LmQ9MCx0LmI9MCxlLms9PShWbigpLEhjKSYmbi5rPT1IYyYmdShRKGUsKGFlKCksX2kpKSwxMCk9PXUoUShuLF9pKSwxMCkmJihlaXQoZSkuaj09KHZlKCksUG4pP09jZSh0LGUsbik6T2NlKHQsbixlKSksZS5rPT1IYyYmbi5rPT10YT9laXQoZSkuaj09KHZlKCksUG4pP3QuZD0xOnQuYj0xOm4uaz09SGMmJmUuaz09dGEmJihlaXQobikuaj09KHZlKCksUG4pP3QuYj0xOnQuZD0xKSxoMW4odCxlLG4pfWZ1bmN0aW9uIEN3bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNO3JldHVybiBNPUQ0dCh0KSxlPXQuYSx2PWUhPW51bGwsdiYmRTgoTSwiY2F0ZWdvcnkiLHQuYSkscz13TShuZXcgU20odC5kKSksaD0hcyxoJiYoaz1uZXcgRWcsWWYoTSwia25vd25PcHRpb25zIixrKSxuPW5ldyBOenQoayksdmEobmV3IFNtKHQuZCksbikpLG89d00odC5nKSxkPSFvLGQmJihDPW5ldyBFZyxZZihNLCJzdXBwb3J0ZWRGZWF0dXJlcyIsQykscj1uZXcgQnp0KEMpLHZhKHQuZyxyKSksTX1mdW5jdGlvbiBfd24odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrO2ZvcihyPSExLGU9MzM2LG49MCxvPW5ldyBYV3QodC5sZW5ndGgpLGQ9dCx2PTAsaz1kLmxlbmd0aDt2PGs7Kyt2KWg9ZFt2XSxyPXJ8KHcyKGgpLCExKSxzPShWcChoKSxoLmEpLGxlKG8uYSxMcihzKSksZSY9cy5xZCgpLG49ZWxuKG4scy5yZCgpKTtyZXR1cm4gdSh1KG5YdChuZXcgVG4obnVsbCx6c3QobmV3IF9uKChXbSgpLEUzdChvLmEpKSwxNiksbmV3IFgsZSxuKSksbmV3IFN0dCh0KSksNjcwKSw4MzMpfWZ1bmN0aW9uIFN3bih0LGUpe3ZhciBuO3QuZCYmKGUuYyE9dC5lLmN8fEJjbih0LmUuYixlLmIpKSYmKGxlKHQuZix0LmQpLHQuYT10LmQuYyt0LmQuYix0LmQ9bnVsbCx0LmU9bnVsbCksVVhlKGUuYik/dC5jPWU6dC5iPWUsKGUuYj09KG5FKCksTHYpJiYhZS5hfHxlLmI9PVB5JiZlLmF8fGUuYj09ejQmJmUuYXx8ZS5iPT1GeSYmIWUuYSkmJnQuYyYmdC5iJiYobj1uZXcgYWgodC5hLHQuYy5kLGUuYy10LmEsdC5iLmQtdC5jLmQpLHQuZD1uLHQuZT1lKX1mdW5jdGlvbiB2SSh0KXt2YXIgZTtpZihZcXQuY2FsbCh0aGlzKSx0aGlzLmk9bmV3IEFaLHRoaXMuZz10LHRoaXMuZj11KHQuZSYmdC5lKCksOSkubGVuZ3RoLHRoaXMuZj09MCl0aHJvdyBpdChuZXcgRm4oIlRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIHBoYXNlIGluIHRoZSBwaGFzZSBlbnVtZXJhdGlvbi4iKSk7dGhpcy5jPShlPXUoVmYodGhpcy5nKSw5KSxuZXcgc2goZSx1KGZmKGUsZS5sZW5ndGgpLDkpLDApKSx0aGlzLmE9bmV3IFZzLHRoaXMuYj1uZXcgX3J9ZnVuY3Rpb24gRjV0KHQsZSl7dmFyIG4scjtpZihlIT10LkNifHx0LkRiPj4xNiE9NyYmZSl7aWYodkUodCxlKSl0aHJvdyBpdChuZXcgRm4oUV8rZW9lKHQpKSk7cj1udWxsLHQuQ2ImJihyPShuPXQuRGI+PjE2LG4+PTA/aTR0KHQscik6dC5DYi5paCh0LC0xLW4sbnVsbCxyKSkpLGUmJihyPXUoZSw0OSkuZ2godCwxLGxQLHIpKSxyPW52dCh0LGUsciksciYmci5GaSgpfWVsc2UgdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSw3LGUsZSkpfWZ1bmN0aW9uIEtjZSh0LGUpe3ZhciBuLHI7aWYoZSE9dC5DYnx8dC5EYj4+MTYhPTMmJmUpe2lmKHZFKHQsZSkpdGhyb3cgaXQobmV3IEZuKFFfK2xpZSh0KSkpO3I9bnVsbCx0LkNiJiYocj0obj10LkRiPj4xNixuPj0wP2E0dCh0LHIpOnQuQ2IuaWgodCwtMS1uLG51bGwscikpKSxlJiYocj11KGUsNDkpLmdoKHQsMCxmUCxyKSkscj1ydnQodCxlLHIpLHImJnIuRmkoKX1lbHNlIHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBKcyh0LDEsMyxlLGUpKX1mdW5jdGlvbiB1YXQodCxlKXtURSgpO3ZhciBuLHIscyxvLGgsZCx2LGssQztyZXR1cm4gZS5kPnQuZCYmKGQ9dCx0PWUsZT1kKSxlLmQ8NjM/YnZuKHQsZSk6KGg9KHQuZCYtMik8PDQsaz1ibXQodCxoKSxDPWJtdChlLGgpLHI9Q2F0KHQsUXgoayxoKSkscz1DYXQoZSxReChDLGgpKSx2PXVhdChrLEMpLG49dWF0KHIscyksbz11YXQoQ2F0KGssciksQ2F0KHMsQykpLG89T2F0KE9hdChvLHYpLG4pLG89UXgobyxoKSx2PVF4KHYsaDw8MSksT2F0KE9hdCh2LG8pLG4pKX1mdW5jdGlvbiBBd24odCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKGg9dF8odCxuKSxkPU50KGwwLFlnLDEwLGUubGVuZ3RoLDAsMSkscj0wLG89aC5LYygpO28uT2IoKTspcz11KG8uUGIoKSwxMSksamUoUmUoUShzLChhZSgpLFNPKSkpKSYmKGRbcisrXT11KFEocyxKdSksMTApKTtpZihyPGUubGVuZ3RoKXRocm93IGl0KG5ldyBObygiRXhwZWN0ZWQgIitlLmxlbmd0aCsiIGhpZXJhcmNoaWNhbCBwb3J0cywgYnV0IGZvdW5kIG9ubHkgIityKyIuIikpO3JldHVybiBkfWZ1bmN0aW9uIEx3bih0LGUpe3ZhciBuLHIscyxvLGgsZDtpZighdC50Yil7Zm9yKG89KCF0LnJiJiYodC5yYj1uZXcgR20odCxzMSx0KSksdC5yYiksZD1uZXcgTHgoby5pKSxzPW5ldyBucihvKTtzLmUhPXMuaS5nYygpOylyPXUoZHIocyksMTM4KSxoPXIubmUoKSxuPXUoaD09bnVsbD9hdShkLmYsbnVsbCxyKTpzdihkLmcsaCxyKSwxMzgpLG4mJihoPT1udWxsP2F1KGQuZixudWxsLG4pOnN2KGQuZyxoLG4pKTt0LnRiPWR9cmV0dXJuIHUoTmModC50YixlKSwxMzgpfWZ1bmN0aW9uIG1JKHQsZSl7dmFyIG4scixzLG8saDtpZigodC5pPT1udWxsJiZ2ZCh0KSx0LmkpLmxlbmd0aCwhdC5wKXtmb3IoaD1uZXcgTHgoKDMqdC5nLmkvMnwwKSsxKSxzPW5ldyBCeCh0LmcpO3MuZSE9cy5pLmdjKCk7KXI9dShkc3QocyksMTcwKSxvPXIubmUoKSxuPXUobz09bnVsbD9hdShoLmYsbnVsbCxyKTpzdihoLmcsbyxyKSwxNzApLG4mJihvPT1udWxsP2F1KGguZixudWxsLG4pOnN2KGguZyxvLG4pKTt0LnA9aH1yZXR1cm4gdShOYyh0LnAsZSksMTcwKX1mdW5jdGlvbiBONXQodCxlLG4scixzKXt2YXIgbyxoLGQsdixrO2ZvcihmZm4ocittcnQobixuLiRkKCkpLHMpLHZYdChlLFJobihuKSksbz1uLmYsbyYmTjV0KHQsZSxvLCJDYXVzZWQgYnk6ICIsITEpLGQ9KG4uaz09bnVsbCYmKG4uaz1OdChEdXQsZWUsNzgsMCwwLDEpKSxuLmspLHY9MCxrPWQubGVuZ3RoO3Y8azsrK3YpaD1kW3ZdLE41dCh0LGUsaCwiU3VwcHJlc3NlZDogIiwhMSk7Y29uc29sZS5ncm91cEVuZCE9bnVsbCYmY29uc29sZS5ncm91cEVuZC5jYWxsKGNvbnNvbGUpfWZ1bmN0aW9uIHlJKHQsZSxuLHIpe3ZhciBzLG8saCxkLHY7Zm9yKHY9ZS5lLGQ9di5sZW5ndGgsaD1lLnEuX2YodixuPzA6ZC0xLG4pLHM9dltuPzA6ZC0xXSxoPWh8UHVlKHQscyxuLHIpLG89bj8xOmQtMjtuP288ZDpvPj0wO28rPW4/MTotMSloPWh8ZS5jLlNmKHYsbyxuLHImJiFqZShSZShRKGUuaiwoYWUoKSxPdikpKSkmJiFqZShSZShRKGUuaiwoYWUoKSxYNCkpKSkpLGg9aHxlLnEuX2YodixvLG4pLGg9aHxQdWUodCx2W29dLG4scik7cmV0dXJuIEZzKHQuYyxlKSxofWZ1bmN0aW9uIHhxKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0sajtmb3IoQz1PWnQodC5qKSxNPTAsaj1DLmxlbmd0aDtNPGo7KytNKXtpZihrPUNbTV0sbj09KHNvKCksdGwpfHxuPT1PUylmb3Iodj13ZChrLmcpLHM9dixvPTAsaD1zLmxlbmd0aDtvPGg7KytvKXI9c1tvXSwkZ24oZSxyKSYmYnYociwhMCk7aWYobj09bnV8fG49PU9TKWZvcihkPXdkKGsuZSkscz1kLG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLGpnbihlLHIpJiZidihyLCEwKX19ZnVuY3Rpb24gTXduKHQpe3ZhciBlLG47c3dpdGNoKGU9bnVsbCxuPW51bGwsSmRuKHQpLmcpe2Nhc2UgMTplPSh2ZSgpLEhuKSxuPUJuO2JyZWFrO2Nhc2UgMjplPSh2ZSgpLG1yKSxuPVBuO2JyZWFrO2Nhc2UgMzplPSh2ZSgpLEJuKSxuPUhuO2JyZWFrO2Nhc2UgNDplPSh2ZSgpLFBuKSxuPW1yfXNSKHQsdShOdyh0JCh1KEFpKHQuayxlKSwxNSkuT2MoKSxINCkpLDExMykpLGlSKHQsdShOdyhKaih1KEFpKHQuayxuKSwxNSkuT2MoKSxINCkpLDExMykpfWZ1bmN0aW9uIER3bih0KXt2YXIgZSxuLHIscyxvLGg7aWYocz11KE5lKHQuaiwwKSwxMSkscy5lLmMubGVuZ3RoK3MuZy5jLmxlbmd0aD09MCl0Lm4uYT0wO2Vsc2V7Zm9yKGg9MCxyPXpwKEQxKGx0KGN0KGoxLDEpLERlLDIwLDAsW25ldyBRcyhzKSxuZXcgVHIocyldKSkpO3pyKHIpOyluPXUoTXIociksMTEpLGgrPW4uaS5uLmErbi5uLmErbi5hLmE7ZT11KFEodCwoVGUoKSxSdikpLDgpLG89ZT9lLmE6MCx0Lm4uYT1oLyhzLmUuYy5sZW5ndGgrcy5nLmMubGVuZ3RoKS1vfX1mdW5jdGlvbiBYY2UodCxlKXt2YXIgbixyLHM7Zm9yKHI9bmV3IFMoZS5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwyMjEpLHFudCh1KG4uYiw2NSksaWEobmModShlLmIsNjUpLmMpLHUoZS5iLDY1KS5hKSkscz1kbGUodShlLmIsNjUpLmIsdShuLmIsNjUpLmIpLHM+MSYmKHQuYT0hMCksVmVuKHUobi5iLDY1KSxMaShuYyh1KGUuYiw2NSkuYyksZmQoaWEobmModShuLmIsNjUpLmEpLHUoZS5iLDY1KS5hKSxzKSkpLFdRdCh0LGUpLFhjZSh0LG4pfWZ1bmN0aW9uIFFjZSh0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3Iobz1uZXcgUyh0LmEuYSk7by5hPG8uYy5jLmxlbmd0aDspcj11KEoobyksMTg5KSxyLmU9MCxyLmQuYS4kYigpO2ZvcihzPW5ldyBTKHQuYS5hKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KEoocyksMTg5KSxuPXIuYS5hLmVjKCkuS2MoKTtuLk9iKCk7KWZvcihlPXUobi5QYigpLDgxKSxkPWUuZi5LYygpO2QuT2IoKTspaD11KGQuUGIoKSw4MSksaC5kIT1yJiYoRnMoci5kLGgpLCsraC5kLmUpfWZ1bmN0aW9uIEl3bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2O2Zvcih2PXQuai5jLmxlbmd0aCxuPTAsZT12LHM9Mip2LGQ9bmV3IFModC5qKTtkLmE8ZC5jLmMubGVuZ3RoOylzd2l0Y2goaD11KEooZCksMTEpLGguai5nKXtjYXNlIDI6Y2FzZSA0OmgucD0tMTticmVhaztjYXNlIDE6Y2FzZSAzOnI9aC5lLmMubGVuZ3RoLG89aC5nLmMubGVuZ3RoLHI+MCYmbz4wP2gucD1lKys6cj4wP2gucD1uKys6bz4wP2gucD1zKys6aC5wPW4rK313bigpLFpzKHQuaixuZXcgREwpfWZ1bmN0aW9uIE93bih0KXt2YXIgZSxuO249bnVsbCxlPXUoTmUodC5nLDApLDE3KTtkb3tpZihuPWUuZC5pLFVzKG4sKGFlKCksJGgpKSlyZXR1cm4gdShRKG4sJGgpLDExKS5pO2lmKG4uayE9KFZuKCksT3MpJiZ6cihuZXcgYXIobHIoRHMobikuYS5LYygpLG5ldyB6KSkpKWU9dShNcihuZXcgYXIobHIoRHMobikuYS5LYygpLG5ldyB6KSkpLDE3KTtlbHNlIGlmKG4uayE9T3MpcmV0dXJuIG51bGx9d2hpbGUobiYmbi5rIT0oVm4oKSxPcykpO3JldHVybiBufWZ1bmN0aW9uIFB3bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztmb3IoZD1lLmosaD1lLmcsdj11KE5lKGQsZC5jLmxlbmd0aC0xKSwxMTMpLEM9KEFuKDAsZC5jLmxlbmd0aCksdShkLmNbMF0sMTEzKSksaz1Bc3QodCxoLHYsQyksbz0xO288ZC5jLmxlbmd0aDtvKyspbj0oQW4oby0xLGQuYy5sZW5ndGgpLHUoZC5jW28tMV0sMTEzKSkscz0oQW4obyxkLmMubGVuZ3RoKSx1KGQuY1tvXSwxMTMpKSxyPUFzdCh0LGgsbixzKSxyPmsmJih2PW4sQz1zLGs9cik7ZS5hPUMsZS5jPXZ9ZnVuY3Rpb24gRnduKHQsZSl7dmFyIG4scjtpZihyPXREKHQuYixlLmIpLCFyKXRocm93IGl0KG5ldyBObygiSW52YWxpZCBoaXRib3hlcyBmb3Igc2NhbmxpbmUgY29uc3RyYWludCBjYWxjdWxhdGlvbi4iKSk7KGlyZShlLmIsdShGWmUodC5iLGUuYiksNTcpKXx8aXJlKGUuYix1KFBaZSh0LmIsZS5iKSw1NykpKSYmKEdkKCksZS5iKyIiKSx0LmFbZS5iLmZdPXUoQ250KHQuYixlLmIpLDU3KSxuPXUoVG50KHQuYixlLmIpLDU3KSxuJiYodC5hW24uZl09ZS5iKX1mdW5jdGlvbiB5Zih0KXtpZighdC5hLmR8fCF0LmEuZSl0aHJvdyBpdChuZXcgTm8oKFAwKGZwZSksZnBlLmsrIiBtdXN0IGhhdmUgYSBzb3VyY2UgYW5kIHRhcmdldCAiKyhQMChhN3QpLGE3dC5rKSsiIHNwZWNpZmllZC4iKSkpO2lmKHQuYS5kPT10LmEuZSl0aHJvdyBpdChuZXcgTm8oIk5ldHdvcmsgc2ltcGxleCBkb2VzIG5vdCBzdXBwb3J0IHNlbGYtbG9vcHM6ICIrdC5hKyIgIit0LmEuZCsiICIrdC5hLmUpKTtyZXR1cm4gX2oodC5hLmQuZyx0LmEpLF9qKHQuYS5lLmIsdC5hKSx0LmF9ZnVuY3Rpb24gTnduKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsaztmb3Ioaz1uZXcgT3AobmV3IEYkdCh0KSksaD1sdChjdChKYmUsMSksaDFlLDExLDAsW2Usbl0pLGQ9MCx2PWgubGVuZ3RoO2Q8djsrK2QpZm9yKG89aFtkXSxfeihrLmEsbywoTm4oKSxGMikpPT1udWxsLHM9bmV3IEwxKG8uYik7R28ocy5hKXx8R28ocy5iKTspcj11KEdvKHMuYSk/SihzLmEpOkoocy5iKSwxNyksci5jPT1yLmR8fHREKGssbz09ci5jP3IuZDpyLmMpO3JldHVybiBMcihrKSxuZXcgQnUoayl9ZnVuY3Rpb24gWmNlKHQsZSxuKXt2YXIgcixzLG8saCxkLHY7aWYocj0wLGUuYiE9MCYmbi5iIT0wKXtvPWVpKGUsMCksaD1laShuLDApLGQ9WHQoeWUodGkobykpKSx2PVh0KHllKHRpKGgpKSkscz0hMDtkb3tpZihkPnYtdC5iJiZkPHYrdC5iKXJldHVybi0xO2Q+di10LmEmJmQ8dit0LmEmJisrcixkPD12JiZvLmIhPW8uZC5jP2Q9WHQoeWUodGkobykpKTp2PD1kJiZoLmIhPWguZC5jP3Y9WHQoeWUodGkoaCkpKTpzPSExfXdoaWxlKHMpfXJldHVybiByfWZ1bmN0aW9uIEJ3bih0LGUsbixyLHMpe3ZhciBvLGgsZCx2O2Zvcih2PShvPXUoVmYoWGEpLDkpLG5ldyBzaChvLHUoZmYobyxvLmxlbmd0aCksOSksMCkpLGQ9bmV3IFModC5qKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxMSksZVtoLnBdJiYoWDVuKGgsZVtoLnBdLHIpLHZmKHYsaC5qKSk7cz8oQnN0KHQsZSwodmUoKSxIbiksMipuLHIpLEJzdCh0LGUsQm4sMipuLHIpKTooQnN0KHQsZSwodmUoKSxQbiksMipuLHIpLEJzdCh0LGUsbXIsMipuLHIpKX1mdW5jdGlvbiBSd24odCl7dmFyIGUsbixyLHMsbztpZihvPW5ldyBoZSx4dSh0LmIsbmV3IFluKG8pKSx0LmIuYz1OdChRbixEZSwxLDAsNSwxKSxvLmMubGVuZ3RoIT0wKXtmb3IoZT0oQW4oMCxvLmMubGVuZ3RoKSx1KG8uY1swXSw3OCkpLG49MSxyPW8uYy5sZW5ndGg7bjxyOysrbilzPShBbihuLG8uYy5sZW5ndGgpLHUoby5jW25dLDc4KSkscyE9ZSYmWDBuKGUscyk7aWYoX3QoZSw2MCkpdGhyb3cgaXQodShlLDYwKSk7aWYoX3QoZSwyODkpKXRocm93IGl0KHUoZSwyODkpKX19ZnVuY3Rpb24ganduKHQsZSl7dmFyIG4scixzLG87Zm9yKHQ9dD09bnVsbD9fdTooT24odCksdCksbj1uZXcgSW0sbz0wLHI9MDtyPGUubGVuZ3RoJiYocz10LmluZGV4T2YoIiVzIixvKSxzIT0tMSk7KUdyKG4sdC5zdWJzdHIobyxzLW8pKSxoYyhuLGVbcisrXSksbz1zKzI7aWYoR3Iobix0LnN1YnN0cihvKSkscjxlLmxlbmd0aCl7Zm9yKG4uYSs9IiBbIixoYyhuLGVbcisrXSk7cjxlLmxlbmd0aDspbi5hKz1ZYSxoYyhuLGVbcisrXSk7bi5hKz0iXSJ9cmV0dXJuIG4uYX1mdW5jdGlvbiAkd24odCl7dmFyIGUsbixyLHM7Zm9yKGU9MCxyPXQubGVuZ3RoLHM9ci00LG49MDtuPHM7KWU9KFJyKG4rMyx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KG4rMykrKFJyKG4rMix0Lmxlbmd0aCksMzEqKHQuY2hhckNvZGVBdChuKzIpKyhScihuKzEsdC5sZW5ndGgpLDMxKih0LmNoYXJDb2RlQXQobisxKSsoUnIobix0Lmxlbmd0aCksMzEqKHQuY2hhckNvZGVBdChuKSszMSplKSkpKSkpKSxlPWV8MCxuKz00O2Zvcig7bjxyOyllPWUqMzErd2EodCxuKyspO3JldHVybiBlPWV8MCxlfWZ1bmN0aW9uIHp3bih0KXt2YXIgZSxuO2ZvcihuPW5ldyBhcihscihEcyh0KS5hLktjKCksbmV3IHopKTt6cihuKTspaWYoZT11KE1yKG4pLDE3KSxlLmQuaS5rIT0oVm4oKSxMbCkpdGhyb3cgaXQobmV3IFIzKEtvdCtySSh0KSsiJyBoYXMgaXRzIGxheWVyIGNvbnN0cmFpbnQgc2V0IHRvIExBU1QsIGJ1dCBoYXMgYXQgbGVhc3Qgb25lIG91dGdvaW5nIGVkZ2UgdGhhdCAgZG9lcyBub3QgZ28gdG8gYSBMQVNUX1NFUEFSQVRFIG5vZGUuIFRoYXQgbXVzdCBub3QgaGFwcGVuLiIpKX1mdW5jdGlvbiBxd24odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqO2Zvcih2PTAsQz1uZXcgUyh0LmEpO0MuYTxDLmMuYy5sZW5ndGg7KXtmb3Ioaz11KEooQyksMTApLGQ9MCxvPW5ldyBhcihscihqbyhrKS5hLktjKCksbmV3IHopKTt6cihvKTspcz11KE1yKG8pLDE3KSxNPV8xKHMuYykuYixqPV8xKHMuZCkuYixkPWIuTWF0aC5tYXgoZCxiLk1hdGguYWJzKGotTSkpO3Y9Yi5NYXRoLm1heCh2LGQpfXJldHVybiBoPXIqYi5NYXRoLm1pbigxLGUvbikqdixofWZ1bmN0aW9uIEI1dCh0KXt2YXIgZTtyZXR1cm4gZT1uZXcgJEMsdCYyNTYmJihlLmErPSJGIiksdCYxMjgmJihlLmErPSJIIiksdCY1MTImJihlLmErPSJYIiksdCYyJiYoZS5hKz0iaSIpLHQmOCYmKGUuYSs9Im0iKSx0JjQmJihlLmErPSJzIiksdCYzMiYmKGUuYSs9InUiKSx0JjY0JiYoZS5hKz0idyIpLHQmMTYmJihlLmErPSJ4IiksdCZ4ZiYmKGUuYSs9IiwiKSx0YnQoZS5hKX1mdW5jdGlvbiBId24odCxlKXt2YXIgbixyLHMsbztmb3IodnIoZSwiUmVzaXplIGNoaWxkIGdyYXBoIHRvIGZpdCBwYXJlbnQuIiwxKSxyPW5ldyBTKHQuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMjkpLExzKHQuYSxuLmEpLG4uYS5jPU50KFFuLERlLDEsMCw1LDEpO2ZvcihvPW5ldyBTKHQuYSk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTApLEVvKHMsbnVsbCk7dC5iLmM9TnQoUW4sRGUsMSwwLDUsMSksZnZuKHQpLHQuZSYmWm1uKHQuZSx0KSxvcihlKX1mdW5jdGlvbiBWd24odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrO2lmKHI9dC5iLG89ci5lLGg9angodShRKHIsKFRlKCksY3MpKSw5OCkpLG49ISFvJiZ1KFEobywoYWUoKSxWYykpLDIxKS5IYygob28oKSx2aCkpLCEoaHx8bikpZm9yKGs9KGQ9bmV3IHYxKHQuZSkuYS52YygpLktjKCksbmV3IG0xKGQpKTtrLmEuT2IoKTspdj0oZT11KGsuYS5QYigpLDQyKSx1KGUuZGQoKSwxMTMpKSx2LmEmJihzPXYuZCxVbyhzLG51bGwpLHYuYz0hMCx0LmE9ITApfWZ1bmN0aW9uIEd3bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGosSDtmb3Ioaj0tMSxIPTAsaz10LEM9MCxNPWsubGVuZ3RoO0M8TTsrK0Mpe2Zvcih2PWtbQ10sbz12LGg9MCxkPW8ubGVuZ3RoO2g8ZDsrK2gpZm9yKHM9b1toXSxlPW5ldyBkR3Qoaj09LTE/dFswXTp0W2pdLEpzZShzKSksbj0wO248cy5qLmMubGVuZ3RoO24rKylmb3Iocj1uKzE7cjxzLmouYy5sZW5ndGg7cisrKUdLdChlLHUoTmUocy5qLG4pLDExKSx1KE5lKHMuaixyKSwxMSkpPjAmJisrSDsrK2p9cmV0dXJuIEh9ZnVuY3Rpb24gVXduKHQsZSl7dmFyIG4scixzLG8saDtmb3IoaD11KFEoZSwoZ3YoKSxkX3QpKSw0MjUpLG89ZWkoZS5iLDApO28uYiE9by5kLmM7KWlmKHM9dSh0aShvKSw4NiksdC5iW3MuZ109PTApe3N3aXRjaChoLmcpe2Nhc2UgMDpDc2UodCxzKTticmVhaztjYXNlIDE6WWJuKHQscyl9dC5iW3MuZ109Mn1mb3Iocj1laSh0LmEsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDE4OCksYXkobi5iLmQsbiwhMCksYXkobi5jLmIsbiwhMCk7SnQoZSwoZmMoKSxhX3QpLHQuYSl9ZnVuY3Rpb24gb3UodCxlKXt0bygpO3ZhciBuLHIscyxvO3JldHVybiBlP2U9PShJaSgpLEg1ZSl8fChlPT1ENWV8fGU9PVgyfHxlPT1NNWUpJiZ0IT1FTHQ/bmV3IEF4dCh0LGUpOihyPXUoZSw2NzcpLG49ci5waygpLG58fChNOChUbygoJHUoKSx5YSksZSkpLG49ci5waygpKSxvPSghbi5pJiYobi5pPW5ldyBfciksbi5pKSxzPXUoZWMoTG8oby5mLHQpKSwxOTQyKSwhcyYma2kobyx0LHM9bmV3IEF4dCh0LGUpKSxzKTpTNWV9ZnVuY3Rpb24gV3duKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDO2Zvcih2PXUoUSh0LChhZSgpLF9pKSksMTEpLGs9WW8obHQoY3QoV3MsMSksZWUsOCwwLFt2Lmkubix2Lm4sdi5hXSkpLmEsQz10Lmkubi5iLG49d2QodC5lKSxzPW4sbz0wLGg9cy5sZW5ndGg7bzxoOysrbylyPXNbb10sb2Eocix2KSxaYihyLmEsbmV3ICRlKGssQykpLGUmJihkPXUoUShyLChUZSgpLFNvKSksNzQpLGR8fChkPW5ldyBQdSxKdChyLFNvLGQpKSxyaShkLG5ldyAkZShrLEMpKSl9ZnVuY3Rpb24gWXduKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDO2ZvcihzPXUoUSh0LChhZSgpLF9pKSksMTEpLGs9WW8obHQoY3QoV3MsMSksZWUsOCwwLFtzLmkubixzLm4scy5hXSkpLmEsQz10Lmkubi5iLG49d2QodC5nKSxoPW4sZD0wLHY9aC5sZW5ndGg7ZDx2OysrZClvPWhbZF0sT2EobyxzKSxzVXQoby5hLG5ldyAkZShrLEMpKSxlJiYocj11KFEobywoVGUoKSxTbykpLDc0KSxyfHwocj1uZXcgUHUsSnQobyxTbyxyKSkscmkocixuZXcgJGUoayxDKSkpfWZ1bmN0aW9uIEt3bih0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3IodC5iPW5ldyBoZSx0LmQ9dShRKGUsKGFlKCksJDYpKSwyMzApLHQuZT1zc24odC5kKSxvPW5ldyBaaSxzPUExKGx0KGN0KFhiZSwxKSx1MWUsMzcsMCxbZV0pKSxoPTA7aDxzLmMubGVuZ3RoOylyPShBbihoLHMuYy5sZW5ndGgpLHUocy5jW2hdLDM3KSksci5wPWgrKyxuPW5ldyBoaGUocix0LmEsdC5iKSxMcyhzLG4uYiksbGUodC5iLG4pLG4ucyYmKGQ9ZWkobywwKSxlRChkLG4pKTtyZXR1cm4gdC5jPW5ldyBIcyxvfWZ1bmN0aW9uIFh3bih0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3IoaD11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtoLk9iKCk7KW89dShoLlBiKCksMTExKSxuPW8uYz9Wd3Qoby5jKTowLG4+MD9vLmE/KGQ9by5iLnJmKCkuYSxuPmQmJihzPShuLWQpLzIsby5kLmI9cyxvLmQuYz1zKSk6by5kLmM9dC5zK246UzkodC51KSYmKHI9STR0KG8uYiksci5jPDAmJihvLmQuYj0tci5jKSxyLmMrci5iPm8uYi5yZigpLmEmJihvLmQuYz1yLmMrci5iLW8uYi5yZigpLmEpKX1mdW5jdGlvbiBRd24odCxlKXt2YXIgbixyLHMsbztmb3IodnIoZSwiU2VtaS1JbnRlcmFjdGl2ZSBDcm9zc2luZyBNaW5pbWl6YXRpb24gUHJvY2Vzc29yIiwxKSxuPSExLHM9bmV3IFModC5iKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwyOSksbz1XRChleihSaShSaShuZXcgVG4obnVsbCxuZXcgX24oci5hLDE2KSksbmV3IHpUKSxuZXcgRkwpLG5ldyBDTiksbmV3IF9OKSxuPW58by5hIT1udWxsO24mJkp0KHQsKGFlKCksc0N0KSwoTm4oKSwhMCkpLG9yKGUpfWZ1bmN0aW9uIFp3bih0LGUsbil7dmFyIHIscyxvLGgsZDtpZihzPW4sIXMmJihzPW5ldyByOCksdnIocywiTGF5b3V0Iix0LmEuYy5sZW5ndGgpLGplKFJlKFEoZSwoZ3YoKSxsX3QpKSkpKWZvcihHZCgpLHI9MDtyPHQuYS5jLmxlbmd0aDtyKyspZD0ocjwxMD8iMCI6IiIpK3IrKywiIitkK0lwKG9sKHUoTmUodC5hLHIpLDUxKSkpO2ZvcihoPW5ldyBTKHQuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksNTEpLG8ucGYoZSxSYyhzLDEpKTtvcihzKX1mdW5jdGlvbiBKd24odCl7dmFyIGUsbjtpZihlPXUodC5hLDE5KS5hLG49dSh0LmIsMTkpLmEsZT49MCl7aWYoZT09bilyZXR1cm4gbmV3IGZhKHBlKC1lLTEpLHBlKC1lLTEpKTtpZihlPT0tbilyZXR1cm4gbmV3IGZhKHBlKC1lKSxwZShuKzEpKX1yZXR1cm4gYi5NYXRoLmFicyhlKT5iLk1hdGguYWJzKG4pP2U8MD9uZXcgZmEocGUoLWUpLHBlKG4pKTpuZXcgZmEocGUoLWUpLHBlKG4rMSkpOm5ldyBmYShwZShlKzEpLHBlKG4pKX1mdW5jdGlvbiB0dm4odCl7dmFyIGUsbjtuPXUoUSh0LChUZSgpLHV1KSksMTYzKSxlPXUoUSh0LChhZSgpLEIyKSksMzAzKSxuPT0oZGgoKSxiYik/KEp0KHQsdXUsTU8pLEp0KHQsQjIsKHEwKCksWTQpKSk6bj09ank/KEp0KHQsdXUsTU8pLEp0KHQsQjIsKHEwKCksRjYpKSk6ZT09KHEwKCksWTQpPyhKdCh0LHV1LGJiKSxKdCh0LEIyLENPKSk6ZT09RjYmJihKdCh0LHV1LGp5KSxKdCh0LEIyLENPKSl9ZnVuY3Rpb24ga3EoKXtrcT1aLGpPPW5ldyBqUSxabWU9YmkobmV3IFZzLChXYSgpLGN1KSwocm8oKSxFVikpLGV5ZT1LdShiaShuZXcgVnMsY3UsRFYpLElvLE1WKSxueWU9dXYodXYoVlIoS3UoYmkobmV3IFZzLERkLEZWKSxJbyxQVikscWMpLE9WKSxOViksSm1lPUt1KGJpKGJpKGJpKG5ldyBWcyxnYixDVikscWMsU1YpLHFjLHU3KSxJbyxfViksdHllPUt1KGJpKGJpKG5ldyBWcyxxYyx1NykscWMsa1YpLElvLHhWKX1mdW5jdGlvbiBtXygpe21fPVosc3llPWJpKEt1KG5ldyBWcywoV2EoKSxJbyksKHJvKCksblR0KSksY3UsRVYpLHV5ZT11dih1dihWUihLdShiaShuZXcgVnMsRGQsRlYpLElvLFBWKSxxYyksT1YpLE5WKSxheWU9S3UoYmkoYmkoYmkobmV3IFZzLGdiLENWKSxxYyxTVikscWMsdTcpLElvLF9WKSxjeWU9YmkoYmkobmV3IFZzLGN1LERWKSxJbyxNViksb3llPUt1KGJpKGJpKG5ldyBWcyxxYyx1NykscWMsa1YpLElvLHhWKX1mdW5jdGlvbiBldm4odCxlLG4scixzKXt2YXIgbyxoOyghR2EoZSkmJmUuYy5pLmM9PWUuZC5pLmN8fCFmbmUoWW8obHQoY3QoV3MsMSksZWUsOCwwLFtzLmkubixzLm4scy5hXSkpLG4pKSYmIUdhKGUpJiYoZS5jPT1zP204KGUuYSwwLG5ldyB4byhuKSk6cmkoZS5hLG5ldyB4byhuKSksciYmIUkwKHQuYSxuKSYmKGg9dShRKGUsKFRlKCksU28pKSw3NCksaHx8KGg9bmV3IFB1LEp0KGUsU28saCkpLG89bmV3IHhvKG4pLGZzKGgsbyxoLmMuYixoLmMpLEZzKHQuYSxvKSkpfWZ1bmN0aW9uIG52bih0KXt2YXIgZSxuO2ZvcihuPW5ldyBhcihscihqbyh0KS5hLktjKCksbmV3IHopKTt6cihuKTspaWYoZT11KE1yKG4pLDE3KSxlLmMuaS5rIT0oVm4oKSxMbCkpdGhyb3cgaXQobmV3IFIzKEtvdCtySSh0KSsiJyBoYXMgaXRzIGxheWVyIGNvbnN0cmFpbnQgc2V0IHRvIEZJUlNULCBidXQgaGFzIGF0IGxlYXN0IG9uZSBpbmNvbWluZyBlZGdlIHRoYXQgIGRvZXMgbm90IGNvbWUgZnJvbSBhIEZJUlNUX1NFUEFSQVRFIG5vZGUuIFRoYXQgbXVzdCBub3QgaGFwcGVuLiIpKX1mdW5jdGlvbiBydm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrO2lmKHM9YmllKHQuRGImMjU0KSxzPT0wKXQuRWI9bjtlbHNle2lmKHM9PTEpZD1OdChRbixEZSwxLDIsNSwxKSxvPVNzdCh0LGUpLG89PTA/KGRbMF09bixkWzFdPXQuRWIpOihkWzBdPXQuRWIsZFsxXT1uKTtlbHNlIGZvcihkPU50KFFuLERlLDEscysxLDUsMSksaD11Mih0LkViKSxyPTIsdj0wLGs9MDtyPD0xMjg7cjw8PTEpcj09ZT9kW2srK109bjp0LkRiJnImJihkW2srK109aFt2KytdKTt0LkViPWR9dC5EYnw9ZX1mdW5jdGlvbiBKY2UodCxlLG4pe3ZhciByLHMsbyxoO2Zvcih0aGlzLmI9bmV3IGhlLHM9MCxyPTAsaD1uZXcgUyh0KTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxNjcpLG4mJm4zbihvKSxsZSh0aGlzLmIsbykscys9by5vLHIrPW8ucDt0aGlzLmIuYy5sZW5ndGg+MCYmKG89dShOZSh0aGlzLmIsMCksMTY3KSxzKz1vLm8scis9by5wKSxzKj0yLHIqPTIsZT4xP3M9cHMoYi5NYXRoLmNlaWwocyplKSk6cj1wcyhiLk1hdGguY2VpbChyL2UpKSx0aGlzLmE9bmV3IEMzdChzLHIpfWZ1bmN0aW9uIHR1ZSh0LGUsbixyLHMsbyl7dmFyIGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3Q7Zm9yKEM9cixlLmomJmUubz8oSD11KHRyKHQuZixlLkEpLDU3KSxLPUguZC5jK0guZC5iLC0tQyk6Sz1lLmEuYytlLmEuYixNPXMsbi5xJiZuLm8/KEg9dSh0cih0LmYsbi5DKSw1Nyksaz1ILmQuYywrK00pOms9bi5hLmMsdHQ9ay1LLHY9Yi5NYXRoLm1heCgyLE0tQyksZD10dC92LEc9SytkLGo9QztqPE07KytqKWg9dShvLlhiKGopLDEyOCksZ3Q9aC5hLmIsaC5hLmM9Ry1ndC8yLEcrPWR9ZnVuY3Rpb24gUjV0KHQsZSxuLHIscyxvKXt2YXIgaCxkLHYsayxDLE07Zm9yKGs9bi5jLmxlbmd0aCxvJiYodC5jPU50KENyLFhyLDI1LGUubGVuZ3RoLDE1LDEpKSxoPXM/MDplLmxlbmd0aC0xO3M/aDxlLmxlbmd0aDpoPj0wO2grPXM/MTotMSl7Zm9yKGQ9ZVtoXSx2PXI9PSh2ZSgpLEhuKT9zP0tvKGQscik6bDIoS28oZCxyKSk6cz9sMihLbyhkLHIpKTpLbyhkLHIpLG8mJih0LmNbZC5wXT12LmdjKCkpLE09di5LYygpO00uT2IoKTspQz11KE0uUGIoKSwxMSksdC5kW0MucF09aysrO0xzKG4sdil9fWZ1bmN0aW9uIGV1ZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQztmb3Iobz1YdCh5ZSh0LmIuS2MoKS5QYigpKSksaz1YdCh5ZShmdW4oZS5iKSkpLHI9ZmQobmModC5hKSxrLW4pLHM9ZmQobmMoZS5hKSxuLW8pLEM9TGkocixzKSxmZChDLDEvKGstbykpLHRoaXMuYT1DLHRoaXMuYj1uZXcgaGUsZD0hMCxoPXQuYi5LYygpLGguUGIoKTtoLk9iKCk7KXY9WHQoeWUoaC5QYigpKSksZCYmdi1uPkxjdCYmKHRoaXMuYi5GYyhuKSxkPSExKSx0aGlzLmIuRmModik7ZCYmdGhpcy5iLkZjKG4pfWZ1bmN0aW9uIGl2bih0KXt2YXIgZSxuLHIscztpZihwbW4odCx0Lm4pLHQuZC5jLmxlbmd0aD4wKXtmb3IoUkModC5jKTt3NXQodCx1KEoobmV3IFModC5lLmEpKSwxMjEpKTx0LmUuYS5jLmxlbmd0aDspe2ZvcihlPUsxbih0KSxzPWUuZS5lLWUuZC5lLWUuYSxlLmUuaiYmKHM9LXMpLHI9bmV3IFModC5lLmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDEyMSksbi5qJiYobi5lKz1zKTtSQyh0LmMpfVJDKHQuYyksYTV0KHQsdShKKG5ldyBTKHQuZS5hKSksMTIxKSksY2hlKHQpfX1mdW5jdGlvbiBzdm4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihzPXUoQWkodC5hLChiNCgpLCRWKSksMTUpLktjKCk7cy5PYigpOylzd2l0Y2gocj11KHMuUGIoKSwxMDEpLG49dShOZShyLmosMCksMTEzKS5kLmosbz1uZXcgQnUoci5qKSxacyhvLG5ldyBIWCksZS5nKXtjYXNlIDE6TnN0KHQsbyxuLChudigpLHBiKSwxKTticmVhaztjYXNlIDA6aD1yd24obyksTnN0KHQsbmV3IFFkKG8sMCxoKSxuLChudigpLHBiKSwwKSxOc3QodCxuZXcgUWQobyxoLG8uYy5sZW5ndGgpLG4scGIsMSl9fWZ1bmN0aW9uIGF2bih0LGUpe2k2KCk7dmFyIG4scjtpZihuPUhydChLOCgpLGUudGcoKSksbil7aWYocj1uLmosX3QodCwyMzkpKXJldHVybiBkaW4odSh0LDMzKSk/TnUociwoUWYoKSxlYSkpfHxOdShyLHFuKTpOdShyLChRZigpLGVhKSk7aWYoX3QodCwzNTIpKXJldHVybiBOdShyLChRZigpLFBkKSk7aWYoX3QodCwxODYpKXJldHVybiBOdShyLChRZigpLFYyKSk7aWYoX3QodCwzNTQpKXJldHVybiBOdShyLChRZigpLHJwKSl9cmV0dXJuITB9ZnVuY3Rpb24gb3ZuKHQsZSxuKXt2YXIgcixzLG8saCxkLHY7aWYocz1uLG89cy5haygpLFgwKHQuZSxvKSl7aWYoby5oaSgpKXtmb3Iocj11KHQuZywxMTkpLGg9MDtoPHQuaTsrK2gpaWYoZD1yW2hdLHlpKGQscykmJmghPWUpdGhyb3cgaXQobmV3IEZuKGVPKSl9fWVsc2UgZm9yKHY9b3UodC5lLlRnKCksbykscj11KHQuZywxMTkpLGg9MDtoPHQuaTsrK2gpaWYoZD1yW2hdLHYucmwoZC5haygpKSYmaCE9ZSl0aHJvdyBpdChuZXcgRm4oYU8pKTtyZXR1cm4gdShoNCh0LGUsbiksNzIpfWZ1bmN0aW9uIG51ZSh0LGUpe2lmKGUgaW5zdGFuY2VvZiBPYmplY3QpdHJ5e2lmKGUuX19qYXZhJGV4Y2VwdGlvbj10LG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJtc2llIikhPS0xJiYkZG9jLmRvY3VtZW50TW9kZTw5KXJldHVybjt2YXIgbj10O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse2NhdXNlOntnZXQ6ZnVuY3Rpb24oKXt2YXIgcj1uLlpkKCk7cmV0dXJuIHImJnIuWGQoKX19LHN1cHByZXNzZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBuLllkKCl9fX0pfWNhdGNoe319ZnVuY3Rpb24gcnVlKHQsZSl7dmFyIG4scixzLG8saDtpZihyPWU+PjUsZSY9MzEscj49dC5kKXJldHVybiB0LmU8MD8ocmIoKSxCdXQpOihyYigpLHM3KTtpZihvPXQuZC1yLHM9TnQoQ3IsWHIsMjUsbysxLDE1LDEpLFFnbihzLG8sdC5hLHIsZSksdC5lPDApe2ZvcihuPTA7bjxyJiZ0LmFbbl09PTA7bisrKTtpZihuPHJ8fGU+MCYmdC5hW25dPDwzMi1lKXtmb3Iobj0wO248byYmc1tuXT09LTE7bisrKXNbbl09MDtuPT1vJiYrK28sKytzW25dfX1yZXR1cm4gaD1uZXcgWDModC5lLG8scyksTjkoaCksaH1mdW5jdGlvbiBpdWUodCl7dmFyIGUsbixyLHM7cmV0dXJuIHM9VDEodCksbj1uZXcgdmkocykscj1uZXcgWHMocyksZT1uZXcgaGUsTHMoZSwoIXQuZCYmKHQuZD1uZXcgQ24oWXMsdCw4LDUpKSx0LmQpKSxMcyhlLCghdC5lJiYodC5lPW5ldyBDbihZcyx0LDcsNCkpLHQuZSkpLHUoQmwod3UoUmkobmV3IFRuKG51bGwsbmV3IF9uKGUsMTYpKSxuKSxyKSxabShuZXcgb24sbmV3IG5pLG5ldyBkaSxuZXcgRWUsbHQoY3QoZmwsMSksb2UsMTMyLDAsWyhPMSgpLEl5KSxVbF0pKSksMjEpfWZ1bmN0aW9uIHN1ZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx2O2lmKGQ9KHRvKCksdShlLDY2KS5PaigpKSxYMCh0LmUsZSkpe2lmKGUuaGkoKSYmTXEodCxlLHIsX3QoZSw5OSkmJih1KGUsMTgpLkJiJkthKSE9MCkpdGhyb3cgaXQobmV3IEZuKGVPKSl9ZWxzZSBmb3Iodj1vdSh0LmUuVGcoKSxlKSxzPXUodC5nLDExOSksaD0wO2g8dC5pOysraClpZihvPXNbaF0sdi5ybChvLmFrKCkpKXRocm93IGl0KG5ldyBGbihhTykpO25fKHQsVzR0KHQsZSxuKSxkP3Uociw3Mik6WmQoZSxyKSl9ZnVuY3Rpb24gWDAodCxlKXt0bygpO3ZhciBuLHIscztyZXR1cm4gZS4kaigpPyEwOmUuWmooKT09LTI/ZT09KGQ2KCksdGspfHxlPT1KNnx8ZT09emZ0fHxlPT1xZnQ/ITA6KHM9dC5UZygpLEdpKHMsZSk+PTA/ITE6KG49QzQoKCR1KCkseWEpLHMsZSksbj8ocj1uLlpqKCksKHI+MXx8cj09LTEpJiZIdyhUbyh5YSxuKSkhPTMpOiEwKSk6ITF9ZnVuY3Rpb24gY3ZuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHY7cmV0dXJuIGQ9RG8odShBdCgoIWUuYiYmKGUuYj1uZXcgQ24oYnIsZSw0LDcpKSxlLmIpLDApLDgyKSksdj1Ebyh1KEF0KCghZS5jJiYoZS5jPW5ldyBDbihicixlLDUsOCkpLGUuYyksMCksODIpKSxlcyhkKT09ZXModil8fGV5KHYsZCk/bnVsbDooaD1jRChlKSxoPT1uP3I6KG89dSh0cih0LmEsaCksMTApLG8mJihzPW8uZSxzKT9zOm51bGwpKX1mdW5jdGlvbiB1dm4odCxlKXt2YXIgbjtzd2l0Y2gobj11KFEodCwoVGUoKSx1RykpLDI3NiksdnIoZSwiTGFiZWwgc2lkZSBzZWxlY3Rpb24gKCIrbisiKSIsMSksbi5nKXtjYXNlIDA6bWNlKHQsKHpsKCksZjApKTticmVhaztjYXNlIDE6bWNlKHQsKHpsKCksa2IpKTticmVhaztjYXNlIDI6UGxlKHQsKHpsKCksZjApKTticmVhaztjYXNlIDM6UGxlKHQsKHpsKCksa2IpKTticmVhaztjYXNlIDQ6cHVlKHQsKHpsKCksZjApKTticmVhaztjYXNlIDU6cHVlKHQsKHpsKCksa2IpKX1vcihlKX1mdW5jdGlvbiBqNXQodCxlLG4pe3ZhciByLHMsbyxoLGQsdjtpZihyPVlLZShuLHQubGVuZ3RoKSxoPXRbcl0saFswXS5rPT0oVm4oKSxrcykpZm9yKG89bUh0KG4saC5sZW5ndGgpLHY9ZS5qLHM9MDtzPHYuYy5sZW5ndGg7cysrKWQ9KEFuKHMsdi5jLmxlbmd0aCksdSh2LmNbc10sMTEpKSwobj9kLmo9PSh2ZSgpLEhuKTpkLmo9PSh2ZSgpLEJuKSkmJmplKFJlKFEoZCwoYWUoKSxTTykpKSkmJihjaCh2LHMsdShRKGhbb10sKGFlKCksX2kpKSwxMSkpLG8rPW4/MTotMSl9ZnVuY3Rpb24gbHZuKHQsZSl7dmFyIG4scixzLG8saDtoPW5ldyBoZSxuPWU7ZG8gbz11KHRyKHQuYixuKSwxMjgpLG8uQj1uLmMsby5EPW4uZCxoLmNbaC5jLmxlbmd0aF09byxuPXUodHIodC5rLG4pLDE3KTt3aGlsZShuKTtyZXR1cm4gcj0oQW4oMCxoLmMubGVuZ3RoKSx1KGguY1swXSwxMjgpKSxyLmo9ITAsci5BPXUoci5kLmEuZWMoKS5LYygpLlBiKCksMTcpLmMuaSxzPXUoTmUoaCxoLmMubGVuZ3RoLTEpLDEyOCkscy5xPSEwLHMuQz11KHMuZC5hLmVjKCkuS2MoKS5QYigpLDE3KS5kLmksaH1mdW5jdGlvbiBhdWUodCl7aWYodC5nPT1udWxsKXN3aXRjaCh0LnApe2Nhc2UgMDp0Lmc9Z2luKHQpPyhObigpLHI3KTooTm4oKSxGMik7YnJlYWs7Y2FzZSAxOnQuZz1BRChZc24odCkpO2JyZWFrO2Nhc2UgMjp0Lmc9QkQoZXNuKHQpKTticmVhaztjYXNlIDM6dC5nPVJubih0KTticmVhaztjYXNlIDQ6dC5nPW5ldyBQMyhCbm4odCkpO2JyZWFrO2Nhc2UgNjp0Lmc9djIoam5uKHQpKTticmVhaztjYXNlIDU6dC5nPXBlKHJpbih0KSk7YnJlYWs7Y2FzZSA3OnQuZz11RShRc24odCkpfXJldHVybiB0Lmd9ZnVuY3Rpb24gJDV0KHQpe2lmKHQubj09bnVsbClzd2l0Y2godC5wKXtjYXNlIDA6dC5uPXBpbih0KT8oTm4oKSxyNyk6KE5uKCksRjIpO2JyZWFrO2Nhc2UgMTp0Lm49QUQoS3NuKHQpKTticmVhaztjYXNlIDI6dC5uPUJEKG5zbih0KSk7YnJlYWs7Y2FzZSAzOnQubj16bm4odCk7YnJlYWs7Y2FzZSA0OnQubj1uZXcgUDMocW5uKHQpKTticmVhaztjYXNlIDY6dC5uPXYyKCRubih0KSk7YnJlYWs7Y2FzZSA1OnQubj1wZShpaW4odCkpO2JyZWFrO2Nhc2UgNzp0Lm49dUUoWHNuKHQpKX1yZXR1cm4gdC5ufWZ1bmN0aW9uIG91ZSh0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3Iobz1uZXcgUyh0LmEuYSk7by5hPG8uYy5jLmxlbmd0aDspcj11KEoobyksMzA3KSxyLmc9MCxyLmk9MCxyLmUuYS4kYigpO2ZvcihzPW5ldyBTKHQuYS5hKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KEoocyksMzA3KSxuPXIuYS5hLmVjKCkuS2MoKTtuLk9iKCk7KWZvcihlPXUobi5QYigpLDU3KSxkPWUuYy5LYygpO2QuT2IoKTspaD11KGQuUGIoKSw1NyksaC5hIT1yJiYoRnMoci5lLGgpLCsraC5hLmcsKytoLmEuaSl9ZnVuY3Rpb24gaHZuKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKGQ9dEQodC5hLGUuYiksIWQpdGhyb3cgaXQobmV3IE5vKCJJbnZhbGlkIGhpdGJveGVzIGZvciBzY2FubGluZSBvdmVybGFwIGNhbGN1bGF0aW9uLiIpKTtmb3IoaD0hMSxvPShyPW5ldyB5OShuZXcgdzkobmV3IHkodC5hLmEpLmEpLmIpLG5ldyBnKHIpKTtUTShvLmEuYSk7KWlmKHM9KG49TGooby5hKSx1KG4uY2QoKSw2NSkpLEx1bihlLmIscykpSktlKHQuYi5hLGUuYixzKSxoPSEwO2Vsc2UgaWYoaClicmVha31mdW5jdGlvbiBmdm4odCl7dmFyIGUsbixyLHMsbztzPXUoUSh0LChUZSgpLCQyKSksMjEpLG89dShRKHQscEcpLDIxKSxuPW5ldyAkZSh0LmYuYSt0LmQuYit0LmQuYyx0LmYuYit0LmQuZCt0LmQuYSksZT1uZXcgeG8obikscy5IYygoQWwoKSxKeSkpJiYocj11KFEodCxFNyksOCksby5IYygobGwoKSxSNykpJiYoci5hPD0wJiYoci5hPTIwKSxyLmI8PTAmJihyLmI9MjApKSxlLmE9Yi5NYXRoLm1heChuLmEsci5hKSxlLmI9Yi5NYXRoLm1heChuLmIsci5iKSksczNuKHQsbixlKX1mdW5jdGlvbiBjdWUodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqO3M9ZT9uZXcgc1E6bmV3IGFRLG89ITE7ZG8gZm9yKG89ITEsaz1lP2wyKHQuYik6dC5iLHY9ay5LYygpO3YuT2IoKTspZm9yKGQ9dSh2LlBiKCksMjkpLGo9V3coZC5hKSxlfHxuZXcga3coaiksTT1uZXcgUyhqKTtNLmE8TS5jLmMubGVuZ3RoOylDPXUoSihNKSwxMCkscy5NYihDKSYmKHI9QyxuPXUoUShDLChhZSgpLEl2KSksMzA1KSxoPWU/bi5iOm4uayxvPUx1ZShyLGgsZSwhMSkpO3doaWxlKG8pfWZ1bmN0aW9uIGR2bih0LGUsbil7dmFyIHIscyxvLGgsZDtmb3IodnIobiwiTG9uZ2VzdCBwYXRoIGxheWVyaW5nIiwxKSx0LmE9ZSxkPXQuYS5hLHQuYj1OdChDcixYciwyNSxkLmMubGVuZ3RoLDE1LDEpLHI9MCxoPW5ldyBTKGQpO2guYTxoLmMuYy5sZW5ndGg7KXM9dShKKGgpLDEwKSxzLnA9cix0LmJbcl09LTEsKytyO2ZvcihvPW5ldyBTKGQpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDEwKSxNY2UodCxzKTtkLmM9TnQoUW4sRGUsMSwwLDUsMSksdC5hPW51bGwsdC5iPW51bGwsb3Iobil9ZnVuY3Rpb24gZ3ZuKHQsZSl7dmFyIG4scixzO2UuYT8odEQodC5iLGUuYiksdC5hW2UuYi5pXT11KENudCh0LmIsZS5iKSw4MSksbj11KFRudCh0LmIsZS5iKSw4MSksbiYmKHQuYVtuLmldPWUuYikpOihyPXUoQ250KHQuYixlLmIpLDgxKSxyJiZyPT10LmFbZS5iLmldJiZyLmQmJnIuZCE9ZS5iLmQmJnIuZi5GYyhlLmIpLHM9dShUbnQodC5iLGUuYiksODEpLHMmJnQuYVtzLmldPT1lLmImJnMuZCYmcy5kIT1lLmIuZCYmZS5iLmYuRmMocyksZm50KHQuYixlLmIpKX1mdW5jdGlvbiB1dWUodCxlKXt2YXIgbixyLHMsbyxoLGQ7cmV0dXJuIG89dC5kLGQ9WHQoeWUoUSh0LChUZSgpLEpnKSkpKSxkPDAmJihkPTAsSnQodCxKZyxkKSksZS5vLmI9ZCxoPWIuTWF0aC5mbG9vcihkLzIpLHI9bmV3IE1jLEJzKHIsKHZlKCksQm4pKSxVbyhyLGUpLHIubi5iPWgscz1uZXcgTWMsQnMocyxIbiksVW8ocyxlKSxzLm4uYj1oLG9hKHQsciksbj1uZXcgVncsTW8obix0KSxKdChuLFNvLG51bGwpLE9hKG4scyksb2EobixvKSx5eW4oZSx0LG4pLEVwbih0LG4pLG59ZnVuY3Rpb24gcHZuKHQpe3ZhciBlLG47cmV0dXJuIG49dShRKHQsKGFlKCksVmMpKSwyMSksZT1uZXcgVnMsbi5IYygob28oKSx5UykpJiYoJGwoZSxZbWUpLCRsKGUsaV90KSksKG4uSGMoeTcpfHxqZShSZShRKHQsKFRlKCksYWh0KSkpKSkmJigkbChlLGlfdCksbi5IYyhXNCkmJiRsKGUsWG1lKSksbi5IYyh2aCkmJiRsKGUsV21lKSxuLkhjKHhTKSYmJGwoZSxRbWUpLG4uSGMoWFYpJiYkbChlLEttZSksbi5IYyh2NykmJiRsKGUsR21lKSxuLkhjKG03KSYmJGwoZSxVbWUpLGV9ZnVuY3Rpb24gYnZuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0sajtyZXR1cm4gcj10LmQsbz1lLmQsZD1yK28sdj10LmUhPWUuZT8tMToxLGQ9PTI/KEM9X2EoTnModC5hWzBdLGNvKSxOcyhlLmFbMF0sY28pKSxqPUFyKEMpLE09QXIoVm0oQywzMikpLE09PTA/bmV3IE5nKHYsaik6bmV3IFgzKHYsMixsdChjdChDciwxKSxYciwyNSwxNSxbaixNXSkpKToobj10LmEscz1lLmEsaD1OdChDcixYciwyNSxkLDE1LDEpLElsbihuLHIscyxvLGgpLGs9bmV3IFgzKHYsZCxoKSxOOShrKSxrKX1mdW5jdGlvbiBsdWUodCxlLG4scil7dmFyIHMsbztpZihlKXtpZihzPXQuYS51ZShuLmQsZS5kKSxzPT0wKXJldHVybiByLmQ9YXd0KGUsbi5lKSxyLmI9ITAsZTtvPXM8MD8wOjEsZS5hW29dPWx1ZSh0LGUuYVtvXSxuLHIpLERtKGUuYVtvXSkmJihEbShlLmFbMS1vXSk/KGUuYj0hMCxlLmFbMF0uYj0hMSxlLmFbMV0uYj0hMSk6RG0oZS5hW29dLmFbb10pP2U9ZHooZSwxLW8pOkRtKGUuYVtvXS5hWzEtb10pJiYoZT1fWnQoZSwxLW8pKSl9ZWxzZSByZXR1cm4gbjtyZXR1cm4gZX1mdW5jdGlvbiBodWUodCxlLG4pe3ZhciByLHMsbyxoO3M9dC5pLHI9dC5uLHZtdCh0LChLZigpLHNjKSxzLmMrci5iLG4pLHZtdCh0LGFjLHMuYytzLmItci5jLW5bMl0sbiksaD1zLmItci5iLXIuYyxuWzBdPjAmJihuWzBdKz10LmQsaC09blswXSksblsyXT4wJiYoblsyXSs9dC5kLGgtPW5bMl0pLG89Yi5NYXRoLm1heCgwLGgpLG5bMV09Yi5NYXRoLm1heChuWzFdLGgpLHZtdCh0LGV1LHMuYytyLmIrblswXS0oblsxXS1oKS8yLG4pLGU9PWV1JiYodC5jLmI9byx0LmMuYz1zLmMrci5iKyhvLWgpLzIpfWZ1bmN0aW9uIGZ1ZSgpe3RoaXMuYz1OdChhYSx2bywyNSwodmUoKSxsdChjdChYYSwxKSx4Yyw2MSwwLFtabyxQbixIbixtcixCbl0pKS5sZW5ndGgsMTUsMSksdGhpcy5iPU50KGFhLHZvLDI1LGx0KGN0KFhhLDEpLHhjLDYxLDAsW1pvLFBuLEhuLG1yLEJuXSkubGVuZ3RoLDE1LDEpLHRoaXMuYT1OdChhYSx2bywyNSxsdChjdChYYSwxKSx4Yyw2MSwwLFtabyxQbixIbixtcixCbl0pLmxlbmd0aCwxNSwxKSxBYnQodGhpcy5jLGFzKSxBYnQodGhpcy5iLENzKSxBYnQodGhpcy5hLENzKX1mdW5jdGlvbiBqYyh0LGUsbil7dmFyIHIscyxvLGg7aWYoZTw9bj8ocz1lLG89bik6KHM9bixvPWUpLHI9MCx0LmI9PW51bGwpdC5iPU50KENyLFhyLDI1LDIsMTUsMSksdC5iWzBdPXMsdC5iWzFdPW8sdC5jPSEwO2Vsc2V7aWYocj10LmIubGVuZ3RoLHQuYltyLTFdKzE9PXMpe3QuYltyLTFdPW87cmV0dXJufWg9TnQoQ3IsWHIsMjUscisyLDE1LDEpLERjKHQuYiwwLGgsMCxyKSx0LmI9aCx0LmJbci0xXT49cyYmKHQuYz0hMSx0LmE9ITEpLHQuYltyKytdPXMsdC5iW3JdPW8sdC5jfHx2NCh0KX19ZnVuY3Rpb24gd3ZuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsaztmb3Ioaz1lLmQsdC5hPW5ldyBYYyhrLmMubGVuZ3RoKSx0LmM9bmV3IF9yLGQ9bmV3IFMoayk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTAxKSxvPW5ldyBQRChudWxsKSxsZSh0LmEsbyksa2kodC5jLGgsbyk7Zm9yKHQuYj1uZXcgX3IsX3BuKHQsZSkscj0wO3I8ay5jLmxlbmd0aC0xO3IrKylmb3Iodj11KE5lKGUuZCxyKSwxMDEpLHM9cisxO3M8ay5jLmxlbmd0aDtzKyspYXduKHQsdix1KE5lKGUuZCxzKSwxMDEpLG4pfWZ1bmN0aW9uIGR1ZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2O2lmKCFGOChlKSl7Zm9yKHY9UmMobiwoX3QoZSwxNCk/dShlLDE0KS5nYygpOmowKGUuS2MoKSkpL3QuYXwwKSx2cih2LFcxZSwxKSxkPW5ldyBpWixoPTAsbz1lLktjKCk7by5PYigpOylyPXUoby5QYigpLDg2KSxkPUQxKGx0KGN0KGoxLDEpLERlLDIwLDAsW2QsbmV3IExwKHIpXSkpLGg8ci5mLmImJihoPXIuZi5iKTtmb3Iocz1lLktjKCk7cy5PYigpOylyPXUocy5QYigpLDg2KSxKdChyLChmYygpLElHKSxoKTtvcih2KSxkdWUodCxkLG4pfX1mdW5jdGlvbiB2dm4odCxlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3Iobj1DcyxkPShWbigpLE9zKSxzPW5ldyBTKGUuYSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTApLG89ci5rLG8hPU9zJiYoaD15ZShRKHIsKGFlKCksb0N0KSkpLGg9PW51bGw/KG49Yi5NYXRoLm1heChuLDApLHIubi5iPW4rQjJ0KHQuYSxvLGQpKTpyLm4uYj0oT24oaCksaCkpLHY9QjJ0KHQuYSxvLGQpLHIubi5iPG4rdityLmQuZCYmKHIubi5iPW4rdityLmQuZCksbj1yLm4uYityLm8uYityLmQuYSxkPW99ZnVuY3Rpb24gbXZuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE07Zm9yKG89eDQoZSwhMSwhMSksaz1sSShvKSxNPVh0KHllKHFlKGUsKG9fKCksUXV0KSkpKSxzPWVmZShrLE0rdC5hKSxDPW5ldyBuYXQocyksTW8oQyxlKSxraSh0LmIsZSxDKSxuLmNbbi5jLmxlbmd0aF09Qyx2PSghZS5uJiYoZS5uPW5ldyBmZShxbyxlLDEsNykpLGUubiksZD1uZXcgbnIodik7ZC5lIT1kLmkuZ2MoKTspaD11KGRyKGQpLDEzNykscj14SSh0LGgsITAsMCwwKSxuLmNbbi5jLmxlbmd0aF09cjtyZXR1cm4gQ31mdW5jdGlvbiBndWUodCxlLG4scixzKXt2YXIgbyxoLGQsdixrLEM7aWYodC5kJiZ0LmQubGcocyksbz11KHMuWGIoMCksMzMpLHhzZSh0LG4sbywhMSl8fChoPXUocy5YYihzLmdjKCktMSksMzMpLHhzZSh0LHIsaCwhMCkpfHxSNHQodCxzKSlyZXR1cm4hMDtmb3IoQz1zLktjKCk7Qy5PYigpOylmb3Ioaz11KEMuUGIoKSwzMyksdj1lLktjKCk7di5PYigpOylpZihkPXUodi5QYigpLDMzKSxUcSh0LGssZCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24geXZuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0sajtqPWUuYy5sZW5ndGgsTT0oaz10LllnKG4pLHUoaz49MD90Ll9nKGssITEsITApOmR2KHQsbiwhMSksNTgpKTt0OmZvcihvPU0uS2MoKTtvLk9iKCk7KXtmb3Iocz11KG8uUGIoKSw1NiksQz0wO0M8ajsrK0MpaWYoaD0oQW4oQyxlLmMubGVuZ3RoKSx1KGUuY1tDXSw3MikpLHY9aC5kZCgpLGQ9aC5haygpLHI9cy5iaChkLCExKSx2PT1udWxsP3IhPW51bGw6IXlpKHYscikpY29udGludWUgdDtyZXR1cm4gc31yZXR1cm4gbnVsbH1mdW5jdGlvbiB4dm4odCxlLG4scil7dmFyIHMsbyxoLGQ7Zm9yKHM9dShHZyhlLCh2ZSgpLEJuKSkuS2MoKS5QYigpLDExKSxvPXUoR2coZSxIbikuS2MoKS5QYigpLDExKSxkPW5ldyBTKHQuaik7ZC5hPGQuYy5jLmxlbmd0aDspe2ZvcihoPXUoSihkKSwxMSk7aC5lLmMubGVuZ3RoIT0wOylvYSh1KE5lKGguZSwwKSwxNykscyk7Zm9yKDtoLmcuYy5sZW5ndGghPTA7KU9hKHUoTmUoaC5nLDApLDE3KSxvKX1ufHxKdChlLChhZSgpLHIxKSxudWxsKSxyfHxKdChlLChhZSgpLCRoKSxudWxsKX1mdW5jdGlvbiB4NCh0LGUsbil7dmFyIHIscztpZigoIXQuYSYmKHQuYT1uZXcgZmUoSmksdCw2LDYpKSx0LmEpLmk9PTApcmV0dXJuIEN5dCh0KTtpZihyPXUoQXQoKCF0LmEmJih0LmE9bmV3IGZlKEppLHQsNiw2KSksdC5hKSwwKSwyMDIpLGUmJih4cigoIXIuYSYmKHIuYT1uZXcgQXMoR2gsciw1KSksci5hKSksRzgociwwKSxXOChyLDApLFY4KHIsMCksVTgociwwKSksbilmb3Iocz0oIXQuYSYmKHQuYT1uZXcgZmUoSmksdCw2LDYpKSx0LmEpO3MuaT4xOylieShzLHMuaS0xKTtyZXR1cm4gcn1mdW5jdGlvbiBrdm4odCxlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3IodnIoZSwiQ29tbWVudCBwb3N0LXByb2Nlc3NpbmciLDEpLG89bmV3IFModC5iKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKHM9dShKKG8pLDI5KSxyPW5ldyBoZSxkPW5ldyBTKHMuYSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTApLHY9dShRKGgsKGFlKCksejYpKSwxNSksbj11KFEoaCxONiksMTUpLCh2fHxuKSYmKEU1bihoLHYsbiksdiYmTHMocix2KSxuJiZMcyhyLG4pKTtMcyhzLmEscil9b3IoZSl9ZnVuY3Rpb24gcHVlKHQsZSl7dmFyIG4scixzLG8saCxkLHY7Zm9yKG49bmV3IEIzLG89bmV3IFModC5iKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKHM9dShKKG8pLDI5KSx2PSEwLHI9MCxkPW5ldyBTKHMuYSk7ZC5hPGQuYy5jLmxlbmd0aDspc3dpdGNoKGg9dShKKGQpLDEwKSxoLmsuZyl7Y2FzZSA0OisrcjtjYXNlIDE6aW10KG4saCk7YnJlYWs7Y2FzZSAwOmtwbihoLGUpO2RlZmF1bHQ6bi5iPT1uLmN8fGlsZShuLHIsdiwhMSxlKSx2PSExLHI9MH1uLmI9PW4uY3x8aWxlKG4scix2LCEwLGUpfX1mdW5jdGlvbiBFdm4odCxlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3Iocz1uZXcgaGUsbj0wO248PXQuaTtuKyspcj1uZXcgU2goZSksci5wPXQuaS1uLHMuY1tzLmMubGVuZ3RoXT1yO2ZvcihkPW5ldyBTKHQubyk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTApLEVvKGgsdShOZShzLHQuaS10LmZbaC5wXSksMjkpKTtmb3Iobz1uZXcgUyhzKTtvLmE8by5jLmMubGVuZ3RoOyl2PXUoSihvKSwyOSksdi5hLmMubGVuZ3RoPT0wJiZMOShvKTtlLmIuYz1OdChRbixEZSwxLDAsNSwxKSxMcyhlLmIscyl9ZnVuY3Rpb24gejV0KHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihuPTAsZD1uZXcgUyhlKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Zm9yKGg9dShKKGQpLDExKSxWeXQodC5iLHQuZFtoLnBdKSxzPW5ldyBMMShoLmIpO0dvKHMuYSl8fEdvKHMuYik7KXI9dShHbyhzLmEpP0oocy5hKTpKKHMuYiksMTcpLG89YmJ0KHQsaD09ci5jP3IuZDpyLmMpLG8+dC5kW2gucF0mJihuKz1mbXQodC5iLG8pLFVwKHQuYSxwZShvKSkpO2Zvcig7IUJDKHQuYSk7KUhtdCh0LmIsdShIeCh0LmEpLDE5KS5hKX1yZXR1cm4gbn1mdW5jdGlvbiBidWUodCxlLG4pe3ZhciByLHMsbyxoO2ZvcihvPSghZS5hJiYoZS5hPW5ldyBmZShycyxlLDEwLDExKSksZS5hKS5pLHM9bmV3IG5yKCghZS5hJiYoZS5hPW5ldyBmZShycyxlLDEwLDExKSksZS5hKSk7cy5lIT1zLmkuZ2MoKTspcj11KGRyKHMpLDMzKSwoIXIuYSYmKHIuYT1uZXcgZmUocnMsciwxMCwxMSkpLHIuYSkuaT09MHx8KG8rPWJ1ZSh0LHIsITEpKTtpZihuKWZvcihoPWVzKGUpO2g7KW8rPSghaC5hJiYoaC5hPW5ldyBmZShycyxoLDEwLDExKSksaC5hKS5pLGg9ZXMoaCk7cmV0dXJuIG99ZnVuY3Rpb24gYnkodCxlKXt2YXIgbixyLHMsbztyZXR1cm4gdC5laigpPyhyPW51bGwscz10LmZqKCksdC5paigpJiYocj10LmtqKHQucGkoZSksbnVsbCkpLG49dC5aaSg0LG89bDYodCxlKSxudWxsLGUscyksdC5iaigpJiZvIT1udWxsJiYocj10LmRqKG8scikpLHI/KHIuRWkobiksci5GaSgpKTp0LiRpKG4pLG8pOihvPWw2KHQsZSksdC5iaigpJiZvIT1udWxsJiYocj10LmRqKG8sbnVsbCksciYmci5GaSgpKSxvKX1mdW5jdGlvbiBUdm4odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEM7Zm9yKGs9dC5hLGU9bmV3IEhzLHY9MCxyPW5ldyBTKHQuZCk7ci5hPHIuYy5jLmxlbmd0aDspe2ZvcihuPXUoSihyKSwyMjIpLEM9MCxyNChuLmIsbmV3IERsKSxoPWVpKG4uYiwwKTtoLmIhPWguZC5jOylvPXUodGkoaCksMjIyKSxlLmEuX2IobykmJihzPW4uYyxkPW8uYyxDPGQuZCtkLmErayYmQytzLmEraz5kLmQmJihDPWQuZCtkLmEraykpO24uYy5kPUMsZS5hLnpjKG4sZSksdj1iLk1hdGgubWF4KHYsbi5jLmQrbi5jLmEpfXJldHVybiB2fWZ1bmN0aW9uIG9vKCl7b289WixLVj1uZXcgRm0oIkNPTU1FTlRTIiwwKSx2aD1uZXcgRm0oIkVYVEVSTkFMX1BPUlRTIiwxKSx5Uz1uZXcgRm0oIkhZUEVSRURHRVMiLDIpLFhWPW5ldyBGbSgiSFlQRVJOT0RFUyIsMykseTc9bmV3IEZtKCJOT05fRlJFRV9QT1JUUyIsNCksVzQ9bmV3IEZtKCJOT1JUSF9TT1VUSF9QT1JUUyIsNSkseFM9bmV3IEZtKE0xZSw2KSx2Nz1uZXcgRm0oIkNFTlRFUl9MQUJFTFMiLDcpLG03PW5ldyBGbSgiRU5EX0xBQkVMUyIsOCksUVY9bmV3IEZtKCJQQVJUSVRJT05TIiw5KX1mdW5jdGlvbiB3eSh0KXt2YXIgZSxuLHIscyxvO2ZvcihzPW5ldyBoZSxlPW5ldyBFOSgoIXQuYSYmKHQuYT1uZXcgZmUocnMsdCwxMCwxMSkpLHQuYSkpLHI9bmV3IGFyKGxyKEswKHQpLmEuS2MoKSxuZXcgeikpO3pyKHIpOyluPXUoTXIociksNzkpLF90KEF0KCghbi5iJiYobi5iPW5ldyBDbihicixuLDQsNykpLG4uYiksMCksMTg2KXx8KG89RG8odShBdCgoIW4uYyYmKG4uYz1uZXcgQ24oYnIsbiw1LDgpKSxuLmMpLDApLDgyKSksZS5hLl9iKG8pfHwocy5jW3MuYy5sZW5ndGhdPW8pKTtyZXR1cm4gc31mdW5jdGlvbiBDdm4odCl7dmFyIGUsbixyLHMsbyxoO2ZvcihvPW5ldyBIcyxlPW5ldyBFOSgoIXQuYSYmKHQuYT1uZXcgZmUocnMsdCwxMCwxMSkpLHQuYSkpLHM9bmV3IGFyKGxyKEswKHQpLmEuS2MoKSxuZXcgeikpO3pyKHMpOylyPXUoTXIocyksNzkpLF90KEF0KCghci5iJiYoci5iPW5ldyBDbihicixyLDQsNykpLHIuYiksMCksMTg2KXx8KGg9RG8odShBdCgoIXIuYyYmKHIuYz1uZXcgQ24oYnIsciw1LDgpKSxyLmMpLDApLDgyKSksZS5hLl9iKGgpfHwobj1vLmEuemMoaCxvKSxuPT1udWxsKSk7cmV0dXJuIG99ZnVuY3Rpb24gX3ZuKHQsZSxuLHIscyl7cmV0dXJuIHI8MD8ocj13NCh0LHMsbHQoY3QoQWUsMSksZWUsMiw2LFtRYXQsWmF0LEphdCx0b3QsdzYsZW90LG5vdCxyb3QsaW90LHNvdCxhb3Qsb290XSksZSkscjwwJiYocj13NCh0LHMsbHQoY3QoQWUsMSksZWUsMiw2LFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIix3NiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0pLGUpKSxyPDA/ITE6KG4uaz1yLCEwKSk6cj4wPyhuLms9ci0xLCEwKTohMX1mdW5jdGlvbiBTdm4odCxlLG4scixzKXtyZXR1cm4gcjwwPyhyPXc0KHQscyxsdChjdChBZSwxKSxlZSwyLDYsW1FhdCxaYXQsSmF0LHRvdCx3Nixlb3Qsbm90LHJvdCxpb3Qsc290LGFvdCxvb3RdKSxlKSxyPDAmJihyPXc0KHQscyxsdChjdChBZSwxKSxlZSwyLDYsWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLHc2LCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSksZSkpLHI8MD8hMToobi5rPXIsITApKTpyPjA/KG4uaz1yLTEsITApOiExfWZ1bmN0aW9uIEF2bih0LGUsbixyLHMsbyl7dmFyIGgsZCx2LGs7aWYoZD0zMixyPDApe2lmKGVbMF0+PXQubGVuZ3RofHwoZD13YSh0LGVbMF0pLGQhPTQzJiZkIT00NSl8fCgrK2VbMF0scj1ncSh0LGUpLHI8MCkpcmV0dXJuITE7ZD09NDUmJihyPS1yKX1yZXR1cm4gZD09MzImJmVbMF0tbj09MiYmcy5iPT0yJiYodj1uZXcgQlIsaz12LnEuZ2V0RnVsbFllYXIoKS1hYithYi04MCxoPWslMTAwLG8uYT1yPT1oLHIrPShrLzEwMHwwKSoxMDArKHI8aD8xMDA6MCkpLG8ucD1yLCEwfWZ1bmN0aW9uIHd1ZSh0LGUpe3ZhciBuLHIscyxvLGg7ZXModCkmJihoPXUoUShlLChUZSgpLCQyKSksMTc0KSxWdChxZSh0LGNzKSk9PT1WdCgodWEoKSxUYikpJiZ3byh0LGNzLEcxKSxyPShQbSgpLG5ldyBNbShlcyh0KSkpLG89bmV3IGdudChlcyh0KT9uZXcgTW0oZXModCkpOm51bGwsdCkscz1TaGUocixvLCExLCEwKSx2ZihoLChBbCgpLEp5KSksbj11KFEoZSxFNyksOCksbi5hPWIuTWF0aC5tYXgocy5hLG4uYSksbi5iPWIuTWF0aC5tYXgocy5iLG4uYikpfWZ1bmN0aW9uIEx2bih0LGUsbil7dmFyIHIscyxvLGgsZCx2O2ZvcihoPXUoUSh0LChhZSgpLEdsdCkpLDE1KS5LYygpO2guT2IoKTspe3N3aXRjaChvPXUoaC5QYigpLDEwKSx1KFEobywoVGUoKSx1dSkpLDE2MykuZyl7Y2FzZSAyOkVvKG8sZSk7YnJlYWs7Y2FzZSA0OkVvKG8sbil9Zm9yKHM9bmV3IGFyKGxyKFUwKG8pLmEuS2MoKSxuZXcgeikpO3pyKHMpOylyPXUoTXIocyksMTcpLCEoci5jJiZyLmQpJiYoZD0hci5kLHY9dShRKHIsdUN0KSwxMSksZD9vYShyLHYpOk9hKHIsdikpfX1mdW5jdGlvbiBFcSgpe0VxPVoseGx0PW5ldyBHeChLcSwwLCh2ZSgpLFBuKSxQbiksVGx0PW5ldyBHeChPb3QsMSxtcixtcikseWx0PW5ldyBHeChJb3QsMixIbixIbiksU2x0PW5ldyBHeChQb3QsMyxCbixCbiksRWx0PW5ldyBHeCgiTk9SVEhfV0VTVF9DT1JORVIiLDQsQm4sUG4pLGtsdD1uZXcgR3goIk5PUlRIX0VBU1RfQ09STkVSIiw1LFBuLEhuKSxfbHQ9bmV3IEd4KCJTT1VUSF9XRVNUX0NPUk5FUiIsNixtcixCbiksQ2x0PW5ldyBHeCgiU09VVEhfRUFTVF9DT1JORVIiLDcsSG4sbXIpfWZ1bmN0aW9uIGs0KCl7azQ9WixTU3Q9bHQoY3QoT2IsMSksd290LDI1LDE0LFsxLDEsMiw2LDI0LDEyMCw3MjAsNTA0MCw0MDMyMCwzNjI4ODAsMzYyODgwMCwzOTkxNjgwMCw0NzkwMDE2MDAsNjIyNzAyMDgwMCw4NzE3ODI5MTIwMCwxMzA3Njc0MzY4ZTMse2w6MzUwNjE3NixtOjc5NDA3NyxoOjF9LHtsOjg4NDczNixtOjkxNjQxMSxoOjIwfSx7bDozMzQyMzM2LG06MzkxMjQ4OSxoOjM2M30se2w6NTg5ODI0LG06MzAzNDEzOCxoOjY5MTR9LHtsOjM0MDc4NzIsbToxOTYyNTA2LGg6MTM4Mjk0fV0pLGIuTWF0aC5wb3coMiwtNjUpfWZ1bmN0aW9uIHZ1ZSh0LGUpe3ZhciBuLHIscyxvLGg7aWYodC5jLmxlbmd0aD09MClyZXR1cm4gbmV3IGZhKHBlKDApLHBlKDApKTtmb3Iobj0oQW4oMCx0LmMubGVuZ3RoKSx1KHQuY1swXSwxMSkpLmosaD0wLG89ZS5nLHI9ZS5nKzE7aDx0LmMubGVuZ3RoLTEmJm4uZzxvOykrK2gsbj0oQW4oaCx0LmMubGVuZ3RoKSx1KHQuY1toXSwxMSkpLmo7Zm9yKHM9aDtzPHQuYy5sZW5ndGgtMSYmbi5nPHI7KSsrcyxuPShBbihoLHQuYy5sZW5ndGgpLHUodC5jW2hdLDExKSkuajtyZXR1cm4gbmV3IGZhKHBlKGgpLHBlKHMpKX1mdW5jdGlvbiBNdm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqO2ZvcihvPWUuYy5sZW5ndGgsaD0oQW4obixlLmMubGVuZ3RoKSx1KGUuY1tuXSwyODYpKSxkPWguYS5vLmEsTT1oLmMsaj0wLGs9aC5jO2s8PWguZjtrKyspe2lmKGQ8PXQuYVtrXSlyZXR1cm4gaztmb3IoQz10LmFba10sdj1udWxsLHM9bisxO3M8bztzKyspcj0oQW4ocyxlLmMubGVuZ3RoKSx1KGUuY1tzXSwyODYpKSxyLmM8PWsmJnIuZj49ayYmKHY9cik7diYmKEM9Yi5NYXRoLm1heChDLHYuYS5vLmEpKSxDPmomJihNPWssaj1DKX1yZXR1cm4gTX1mdW5jdGlvbiBEdm4odCxlLG4pe3ZhciByLHMsbztpZih0LmU9bix0LmQ9MCx0LmI9MCx0LmY9MSx0Lmk9ZSwodC5lJjE2KT09MTYmJih0Lmk9d21uKHQuaSkpLHQuaj10LmkubGVuZ3RoLGZpKHQpLG89Y3YodCksdC5kIT10LmopdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLFpkZSkpKSk7aWYodC5nKXtmb3Iocj0wO3I8dC5nLmEuYy5sZW5ndGg7cisrKWlmKHM9dSh6dyh0LmcsciksNTg0KSx0LmY8PXMuYSl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksSmRlKSkpKTt0LmcuYS5jPU50KFFuLERlLDEsMCw1LDEpfXJldHVybiBvfWZ1bmN0aW9uIEl2bih0LGUpe3ZhciBuLHIscztpZihlPT1udWxsKXtmb3Iocj0oIXQuYSYmKHQuYT1uZXcgZmUoYWcsdCw5LDUpKSxuZXcgbnIodC5hKSk7ci5lIT1yLmkuZ2MoKTspaWYobj11KGRyKHIpLDY3OCkscz1uLmMsKHM/P24uemIpPT1udWxsKXJldHVybiBufWVsc2UgZm9yKHI9KCF0LmEmJih0LmE9bmV3IGZlKGFnLHQsOSw1KSksbmV3IG5yKHQuYSkpO3IuZSE9ci5pLmdjKCk7KWlmKG49dShkcihyKSw2NzgpLGhuKGUsKHM9bi5jLHM/P24uemIpKSlyZXR1cm4gbjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBsYXQodCxlKXt2YXIgbjtzd2l0Y2gobj1udWxsLGUuZyl7Y2FzZSAxOnQuZS5YZSgodWkoKSx2ZnQpKSYmKG49dSh0LmUuV2UodmZ0KSwyNDkpKTticmVhaztjYXNlIDM6dC5lLlhlKCh1aSgpLG1mdCkpJiYobj11KHQuZS5XZShtZnQpLDI0OSkpO2JyZWFrO2Nhc2UgMjp0LmUuWGUoKHVpKCksd2Z0KSkmJihuPXUodC5lLldlKHdmdCksMjQ5KSk7YnJlYWs7Y2FzZSA0OnQuZS5YZSgodWkoKSx5ZnQpKSYmKG49dSh0LmUuV2UoeWZ0KSwyNDkpKX1yZXR1cm4hbiYmKG49dSh0LmUuV2UoKHVpKCksaUF0KSksMjQ5KSksbn1mdW5jdGlvbiBtdWUodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTTtmb3IoZS5wPTEsbz1lLmMsTT1vdihlLChzbygpLG51KSkuS2MoKTtNLk9iKCk7KWZvcihDPXUoTS5QYigpLDExKSxzPW5ldyBTKEMuZyk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTcpLGs9ci5kLmksZSE9ayYmKGg9ay5jLGgucDw9by5wJiYoZD1vLnArMSxkPT1uLmIuYy5sZW5ndGg/KHY9bmV3IFNoKG4pLHYucD1kLGxlKG4uYix2KSxFbyhrLHYpKToodj11KE5lKG4uYixkKSwyOSksRW8oayx2KSksbXVlKHQsayxuKSkpfWZ1bmN0aW9uIHl1ZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2O2ZvcihzPW4sbz0wLGQ9bmV3IFMoZSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMzMpLHdvKGgsKHV5KCksQkcpLHBlKHMrKykpLHY9d3koaCkscj1iLk1hdGguYXRhbjIoaC5qK2guZi8yLGguaStoLmcvMikscis9cjwwP080OjAscjwuNzg1Mzk4MTYzMzk3NDQ4M3x8cj5KMWU/WnModix0LmIpOnI8PUoxZSYmcj50ZGU/WnModix0LmQpOnI8PXRkZSYmcj5lZGU/WnModix0LmMpOnI8PWVkZSYmWnModix0LmEpLG89eXVlKHQsdixvKTtyZXR1cm4gc31mdW5jdGlvbiByYigpe3JiPVo7dmFyIHQ7Zm9yKGVWPW5ldyBOZygxLDEpLFJ1dD1uZXcgTmcoMSwxMCksczc9bmV3IE5nKDAsMCksQnV0PW5ldyBOZygtMSwxKSxDRXQ9bHQoY3QoajQsMSksZWUsOTEsMCxbczcsZVYsbmV3IE5nKDEsMiksbmV3IE5nKDEsMyksbmV3IE5nKDEsNCksbmV3IE5nKDEsNSksbmV3IE5nKDEsNiksbmV3IE5nKDEsNyksbmV3IE5nKDEsOCksbmV3IE5nKDEsOSksUnV0XSksblY9TnQoajQsZWUsOTEsMzIsMCwxKSx0PTA7dDxuVi5sZW5ndGg7dCsrKW5WW3RdPUpEKEYwKDEsdCkpfWZ1bmN0aW9uIE92bih0LGUsbixyLHMsbyl7dmFyIGgsZCx2LGs7Zm9yKGQ9IXFDKFJpKHQuT2MoKSxuZXcgWnQobmV3IFVLKSkpLnNkKChRYigpLG83KSksaD10LG89PShhbygpLHJnKSYmKGg9X3QoaCwxNTIpP1p4KHUoaCwxNTIpKTpfdChoLDEzMSk/dShoLDEzMSkuYTpfdChoLDU0KT9uZXcga3coaCk6bmV3IE9tKGgpKSxrPWguS2MoKTtrLk9iKCk7KXY9dShrLlBiKCksNzApLHYubi5hPWUuYSxkP3Yubi5iPWUuYisoci5iLXYuby5iKS8yOnM/di5uLmI9ZS5iOnYubi5iPWUuYityLmItdi5vLmIsZS5hKz12Lm8uYStufWZ1bmN0aW9uIHh1ZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGs7Zm9yKHM9KHIuYytyLmEpLzIsQWgoZS5qKSxyaShlLmoscyksQWgobi5lKSxyaShuLmUscyksaz1uZXcgX0h0LGQ9bmV3IFModC5mKTtkLmE8ZC5jLmMubGVuZ3RoOylvPXUoSihkKSwxMjkpLHY9by5hLFBzdChrLGUsdiksUHN0KGssbix2KTtmb3IoaD1uZXcgUyh0LmspO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDEyOSksdj1vLmIsUHN0KGssZSx2KSxQc3QoayxuLHYpO3JldHVybiBrLmIrPTIsay5hKz1lUXQoZSx0LnEpLGsuYSs9ZVF0KHQucSxuKSxrfWZ1bmN0aW9uIGt1ZSh0LGUsbil7dmFyIHIscyxvLGgsZDtpZighRjgoZSkpe2ZvcihkPVJjKG4sKF90KGUsMTQpP3UoZSwxNCkuZ2MoKTpqMChlLktjKCkpKS90LmF8MCksdnIoZCxXMWUsMSksaD1uZXcgUU4sbz1udWxsLHM9ZS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSw4NiksaD1EMShsdChjdChqMSwxKSxEZSwyMCwwLFtoLG5ldyBMcChyKV0pKSxvJiYoSnQobywoZmMoKSxieWUpLHIpLEp0KHIsUmh0LG8pLFpydChyKT09WnJ0KG8pJiYoSnQobyxqaHQsciksSnQocixERyxvKSkpLG89cjtvcihkKSxrdWUodCxoLG4pfX1mdW5jdGlvbiBFdWUodCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKG49dC5pLGU9dC5uLGQ9bi5kLHQuZj09KHl1KCksZGIpP2QrPShuLmEtdC5lLmIpLzI6dC5mPT1FZiYmKGQrPW4uYS10LmUuYikscz1uZXcgUyh0LmQpO3MuYTxzLmMuYy5sZW5ndGg7KXtzd2l0Y2gocj11KEoocyksMTgxKSxoPXIucmYoKSxvPW5ldyBDYSxvLmI9ZCxkKz1oLmIrdC5hLHQuYi5nKXtjYXNlIDA6by5hPW4uYytlLmI7YnJlYWs7Y2FzZSAxOm8uYT1uLmMrZS5iKyhuLmItaC5hKS8yO2JyZWFrO2Nhc2UgMjpvLmE9bi5jK24uYi1lLmMtaC5hfXIudGYobyl9fWZ1bmN0aW9uIFR1ZSh0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3Iobj10LmksZT10Lm4sZD1uLmMsdC5iPT0oUXUoKSxmYik/ZCs9KG4uYi10LmUuYSkvMjp0LmI9PWtmJiYoZCs9bi5iLXQuZS5hKSxzPW5ldyBTKHQuZCk7cy5hPHMuYy5jLmxlbmd0aDspe3N3aXRjaChyPXUoSihzKSwxODEpLGg9ci5yZigpLG89bmV3IENhLG8uYT1kLGQrPWguYSt0LmEsdC5mLmcpe2Nhc2UgMDpvLmI9bi5kK2UuZDticmVhaztjYXNlIDE6by5iPW4uZCtlLmQrKG4uYS1oLmIpLzI7YnJlYWs7Y2FzZSAyOm8uYj1uLmQrbi5hLWUuYS1oLmJ9ci50ZihvKX19ZnVuY3Rpb24gUHZuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEc7Qz1uLmEuYyxoPW4uYS5jK24uYS5iLG89dSh0cihuLmMsZSksNDU5KSxIPW8uZixHPW8uYSx2PW5ldyAkZShDLEgpLE09bmV3ICRlKGgsRykscz1DLG4ucHx8KHMrPXQuYykscys9bi5GK24udip0LmIsaz1uZXcgJGUocyxIKSxqPW5ldyAkZShzLEcpLFY5KGUuYSxsdChjdChXcywxKSxlZSw4LDAsW3Ysa10pKSxkPW4uZC5hLmdjKCk+MSxkJiYocj1uZXcgJGUocyxuLmIpLHJpKGUuYSxyKSksVjkoZS5hLGx0KGN0KFdzLDEpLGVlLDgsMCxbaixNXSkpfWZ1bmN0aW9uIEN1ZSh0KXtNdyh0LG5ldyBrMihfdyhFdyhDdyhUdyhuZXcga2csQUgpLCJFTEsgUmFuZG9taXplciIpLCdEaXN0cmlidXRlcyB0aGUgbm9kZXMgcmFuZG9tbHkgb24gdGhlIHBsYW5lLCBsZWFkaW5nIHRvIHZlcnkgb2JmdXNjYXRpbmcgbGF5b3V0cy4gQ2FuIGJlIHVzZWZ1bCB0byBkZW1vbnN0cmF0ZSB0aGUgcG93ZXIgb2YgInJlYWwiIGxheW91dCBhbGdvcml0aG1zLicpLG5ldyBaWikpKSx4ZSh0LEFILHh2LEZBdCkseGUodCxBSCxDeSwxNSkseGUodCxBSCx0SCxwZSgwKSkseGUodCxBSCxFNixHRSl9ZnVuY3Rpb24gcTV0KCl7cTV0PVo7dmFyIHQsZSxuLHIscyxvO2ZvcihkQT1OdChHdSxONCwyNSwyNTUsMTUsMSkseVU9TnQoeGgseWQsMjUsMTYsMTUsMSksZT0wO2U8MjU1O2UrKylkQVtlXT0tMTtmb3Iobj01NztuPj00ODtuLS0pZEFbbl09bi00ODw8MjQ+PjI0O2ZvcihyPTcwO3I+PTY1O3ItLSlkQVtyXT1yLTY1KzEwPDwyND4+MjQ7Zm9yKHM9MTAyO3M+PTk3O3MtLSlkQVtzXT1zLTk3KzEwPDwyND4+MjQ7Zm9yKG89MDtvPDEwO28rKyl5VVtvXT00OCtvJnlzO2Zvcih0PTEwO3Q8PTE1O3QrKyl5VVt0XT02NSt0LTEwJnlzfWZ1bmN0aW9uIFRxKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDO3JldHVybiBkPWUuaS10LmcvMix2PW4uaS10LmcvMixrPWUuai10LmcvMixDPW4uai10LmcvMixvPWUuZyt0LmcvMixoPW4uZyt0LmcvMixyPWUuZit0LmcvMixzPW4uZit0LmcvMixkPHYraCYmdjxkJiZrPEMrcyYmQzxrfHx2PGQrbyYmZDx2JiZDPGsrciYmazxDfHxkPHYraCYmdjxkJiZrPEMmJkM8aytyPyEwOnY8ZCtvJiZkPHYmJms8QytzJiZDPGt9ZnVuY3Rpb24gRnZuKHQpe3ZhciBlLG4scixzLG87cz11KFEodCwoVGUoKSwkMikpLDIxKSxvPXUoUSh0LHBHKSwyMSksbj1uZXcgJGUodC5mLmErdC5kLmIrdC5kLmMsdC5mLmIrdC5kLmQrdC5kLmEpLGU9bmV3IHhvKG4pLHMuSGMoKEFsKCksSnkpKSYmKHI9dShRKHQsRTcpLDgpLG8uSGMoKGxsKCksUjcpKSYmKHIuYTw9MCYmKHIuYT0yMCksci5iPD0wJiYoci5iPTIwKSksZS5hPWIuTWF0aC5tYXgobi5hLHIuYSksZS5iPWIuTWF0aC5tYXgobi5iLHIuYikpLGplKFJlKFEodCx1aHQpKSl8fGkzbih0LG4sZSl9ZnVuY3Rpb24gTnZuKHQsZSl7dmFyIG4scixzLG87Zm9yKG89S28oZSwodmUoKSxtcikpLktjKCk7by5PYigpOylyPXUoby5QYigpLDExKSxuPXUoUShyLChhZSgpLEp1KSksMTApLG4mJnlmKGxmKHVmKGhmKGNmKG5ldyBDaCwwKSwuMSksdC5pW2UucF0uZCksdC5pW24ucF0uYSkpO2ZvcihzPUtvKGUsUG4pLktjKCk7cy5PYigpOylyPXUocy5QYigpLDExKSxuPXUoUShyLChhZSgpLEp1KSksMTApLG4mJnlmKGxmKHVmKGhmKGNmKG5ldyBDaCwwKSwuMSksdC5pW24ucF0uZCksdC5pW2UucF0uYSkpfWZ1bmN0aW9uIGhhdCh0KXt2YXIgZSxuLHIscyxvLGg7aWYoIXQuYyl7aWYoaD1uZXcgdXgsZT11QSxvPWUuYS56Yyh0LGUpLG89PW51bGwpe2ZvcihyPW5ldyBucihMYyh0KSk7ci5lIT1yLmkuZ2MoKTspbj11KGRyKHIpLDg3KSxzPUxxKG4pLF90KHMsODgpJiZpcyhoLGhhdCh1KHMsMjYpKSksRHIoaCxuKTtlLmEuQmModCkhPW51bGwsZS5hLmdjKCk9PTB9QmhuKGgpLGl5KGgpLHQuYz1uZXcgVjMoKHUoQXQoV3QoKEhwKCksTG4pLm8pLDE1KSwxOCksaC5pKSxoLmcpLHNsKHQpLmImPS0zM31yZXR1cm4gdC5jfWZ1bmN0aW9uIEg1dCh0KXt2YXIgZTtpZih0LmMhPTEwKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxPSCkpKSk7c3dpdGNoKGU9dC5hLGUpe2Nhc2UgMTEwOmU9MTA7YnJlYWs7Y2FzZSAxMTQ6ZT0xMzticmVhaztjYXNlIDExNjplPTk7YnJlYWs7Y2FzZSA5MjpjYXNlIDEyNDpjYXNlIDQ2OmNhc2UgOTQ6Y2FzZSA0NTpjYXNlIDYzOmNhc2UgNDI6Y2FzZSA0MzpjYXNlIDEyMzpjYXNlIDEyNTpjYXNlIDQwOmNhc2UgNDE6Y2FzZSA5MTpjYXNlIDkzOmJyZWFrO2RlZmF1bHQ6dGhyb3cgaXQobmV3IE5yKHFyKChQcigpLGJoKSkpKX1yZXR1cm4gZX1mdW5jdGlvbiBfdWUodCl7dmFyIGUsbixyLHMsbztpZih0Lmw9PTAmJnQubT09MCYmdC5oPT0wKXJldHVybiIwIjtpZih0Lmg9PU5JJiZ0Lm09PTAmJnQubD09MClyZXR1cm4iLTkyMjMzNzIwMzY4NTQ3NzU4MDgiO2lmKHQuaD4+MTkpcmV0dXJuIi0iK191ZShyRSh0KSk7Zm9yKG49dCxyPSIiOyEobi5sPT0wJiZuLm09PTAmJm4uaD09MCk7KXtpZihzPVZydChHcSksbj15eHQobixzLCEwKSxlPSIiK1JIdChoYiksIShuLmw9PTAmJm4ubT09MCYmbi5oPT0wKSlmb3Iobz05LWUubGVuZ3RoO28+MDtvLS0pZT0iMCIrZTtyPWUrcn1yZXR1cm4gcn1mdW5jdGlvbiBCdm4oKXtpZighT2JqZWN0LmNyZWF0ZXx8IU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKXJldHVybiExO3ZhciB0PSJfX3Byb3RvX18iLGU9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihlW3RdIT09dm9pZCAwKXJldHVybiExO3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpO3JldHVybiEobi5sZW5ndGghPTB8fChlW3RdPTQyLGVbdF0hPT00Mil8fE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLmxlbmd0aD09MCl9ZnVuY3Rpb24gUnZuKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihlPSExLG49MCxzPW5ldyBTKHQuZC5iKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KEoocyksMjkpLHIucD1uKyssaD1uZXcgUyhyLmEpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDEwKSwhZSYmIUY4KFUwKG8pKSYmKGU9ITApO2Q9amkoKGFvKCksaDApLGx0KGN0KFhTLDEpLG9lLDEwMywwLFt6aCxDZl0pKSxlfHwodmYoZCxyZyksdmYoZCxuZykpLHQuYT1uZXcgX2VlKGQpLFh1KHQuZiksWHUodC5iKSxYdSh0LmUpLFh1KHQuZyl9ZnVuY3Rpb24ganZuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE07Zm9yKHI9bi5jLHM9bi5kLGQ9XzEoZS5jKSx2PV8xKGUuZCkscj09ZS5jPyhkPUw1dCh0LGQscyksdj1PYWUoZS5kKSk6KGQ9T2FlKGUuYyksdj1MNXQodCx2LHMpKSxrPW5ldyBEUihlLmEpLGZzKGssZCxrLmEsay5hLmEpLGZzKGssdixrLmMuYixrLmMpLGg9ZS5jPT1yLE09bmV3IHdxdCxvPTA7bzxrLmItMTsrK28pQz1uZXcgZmEodShaZihrLG8pLDgpLHUoWmYoayxvKzEpLDgpKSxoJiZvPT0wfHwhaCYmbz09ay5iLTI/TS5iPUM6bGUoTS5hLEMpO3JldHVybiBNfWZ1bmN0aW9uICR2bih0LGUpe3ZhciBuLHIscyxvO2lmKG89dC5qLmctZS5qLmcsbyE9MClyZXR1cm4gbztpZihuPXUoUSh0LChUZSgpLHRwKSksMTkpLHI9dShRKGUsdHApLDE5KSxuJiZyJiYocz1uLmEtci5hLHMhPTApKXJldHVybiBzO3N3aXRjaCh0LmouZyl7Y2FzZSAxOnJldHVybiBNcyh0Lm4uYSxlLm4uYSk7Y2FzZSAyOnJldHVybiBNcyh0Lm4uYixlLm4uYik7Y2FzZSAzOnJldHVybiBNcyhlLm4uYSx0Lm4uYSk7Y2FzZSA0OnJldHVybiBNcyhlLm4uYix0Lm4uYik7ZGVmYXVsdDp0aHJvdyBpdChuZXcgTm8oRTZ0KSl9fWZ1bmN0aW9uIFY1dCh0LGUsbixyKXt2YXIgcyxvLGgsZCx2O2lmKGowKChLTSgpLG5ldyBhcihscihVMChlKS5hLktjKCksbmV3IHopKSkpPj10LmF8fCFMNHQoZSxuKSlyZXR1cm4tMTtpZihGOCh1KHIuS2IoZSksMjApKSlyZXR1cm4gMTtmb3Iocz0wLGg9dShyLktiKGUpLDIwKS5LYygpO2guT2IoKTspaWYobz11KGguUGIoKSwxNyksdj1vLmMuaT09ZT9vLmQuaTpvLmMuaSxkPVY1dCh0LHYsbixyKSxkPT0tMXx8KHM9Yi5NYXRoLm1heChzLGQpLHM+dC5jLTEpKXJldHVybi0xO3JldHVybiBzKzF9ZnVuY3Rpb24gU3VlKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKFZ0KGUpPT09VnQodCkpcmV0dXJuITA7aWYoIV90KGUsMTUpfHwocj11KGUsMTUpLGQ9dC5nYygpLHIuZ2MoKSE9ZCkpcmV0dXJuITE7aWYoaD1yLktjKCksdC5uaSgpKXtmb3Iobj0wO248ZDsrK24paWYocz10LmtpKG4pLG89aC5QYigpLHM9PW51bGw/byE9bnVsbDoheWkocyxvKSlyZXR1cm4hMX1lbHNlIGZvcihuPTA7bjxkOysrbilpZihzPXQua2kobiksbz1oLlBiKCksVnQocykhPT1WdChvKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBBdWUodCxlKXt2YXIgbixyLHMsbyxoLGQ7aWYodC5mPjApe2lmKHQucWooKSxlIT1udWxsKXtmb3Iobz0wO288dC5kLmxlbmd0aDsrK28paWYobj10LmRbb10sbil7Zm9yKHI9dShuLmcsMzY3KSxkPW4uaSxoPTA7aDxkOysraClpZihzPXJbaF0seWkoZSxzLmRkKCkpKXJldHVybiEwfX1lbHNlIGZvcihvPTA7bzx0LmQubGVuZ3RoOysrbylpZihuPXQuZFtvXSxuKXtmb3Iocj11KG4uZywzNjcpLGQ9bi5pLGg9MDtoPGQ7KytoKWlmKHM9cltoXSxWdChlKT09PVZ0KHMuZGQoKSkpcmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIHp2bih0LGUsbil7dmFyIHIscyxvLGg7dnIobiwiT3J0aG9nb25hbGx5IHJvdXRpbmcgaGllcmFyY2hpY2FsIHBvcnQgZWRnZXMiLDEpLHQuYT0wLHI9TDNuKGUpLE80bihlLHIpLGc0bih0LGUsciksSTVuKGUpLHM9dShRKGUsKFRlKCksY3MpKSw5OCksbz1lLmIsQ2hlKChBbigwLG8uYy5sZW5ndGgpLHUoby5jWzBdLDI5KSkscyxlKSxDaGUodShOZShvLG8uYy5sZW5ndGgtMSksMjkpLHMsZSksaD1lLmIsQmxlKChBbigwLGguYy5sZW5ndGgpLHUoaC5jWzBdLDI5KSkpLEJsZSh1KE5lKGgsaC5jLmxlbmd0aC0xKSwyOSkpLG9yKG4pfWZ1bmN0aW9uIEc1dCh0KXtzd2l0Y2godCl7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpyZXR1cm4gdC00ODw8MjQ+PjI0O2Nhc2UgOTc6Y2FzZSA5ODpjYXNlIDk5OmNhc2UgMTAwOmNhc2UgMTAxOmNhc2UgMTAyOnJldHVybiB0LTk3KzEwPDwyND4+MjQ7Y2FzZSA2NTpjYXNlIDY2OmNhc2UgNjc6Y2FzZSA2ODpjYXNlIDY5OmNhc2UgNzA6cmV0dXJuIHQtNjUrMTA8PDI0Pj4yNDtkZWZhdWx0OnRocm93IGl0KG5ldyBsZCgiSW52YWxpZCBoZXhhZGVjaW1hbCIpKX19ZnVuY3Rpb24gcXZuKHQsZSxuKXt2YXIgcixzLG8saDtmb3IodnIobiwiUHJvY2Vzc29yIG9yZGVyIG5vZGVzIiwyKSx0LmE9WHQoeWUoUShlLChndigpLGdfdCkpKSkscz1uZXcgWmksaD1laShlLmIsMCk7aC5iIT1oLmQuYzspbz11KHRpKGgpLDg2KSxqZShSZShRKG8sKGZjKCksWHkpKSkpJiZmcyhzLG8scy5jLmIscy5jKTtyPShabihzLmIhPTApLHUocy5hLmEuYyw4NikpLFdsZSh0LHIpLCFuLmImJnBpdChuLDEpLEs1dCh0LHIsMC1YdCh5ZShRKHIsKGZjKCksSUcpKSkpLzIsMCksIW4uYiYmcGl0KG4sMSksb3Iobil9ZnVuY3Rpb24gQ3EoKXtDcT1aLGk3dD1uZXcgejMoIlNQSVJBTCIsMCksdDd0PW5ldyB6MygiTElORV9CWV9MSU5FIiwxKSxlN3Q9bmV3IHozKCJNQU5IQVRUQU4iLDIpLEpFdD1uZXcgejMoIkpJVFRFUiIsMyksVnV0PW5ldyB6MygiUVVBRFJBTlRTX0xJTkVfQllfTElORSIsNCkscjd0PW5ldyB6MygiUVVBRFJBTlRTX01BTkhBVFRBTiIsNSksbjd0PW5ldyB6MygiUVVBRFJBTlRTX0pJVFRFUiIsNiksWkV0PW5ldyB6MygiQ09NQklORV9MSU5FX0JZX0xJTkVfTUFOSEFUVEFOIiw3KSxRRXQ9bmV3IHozKCJDT01CSU5FX0pJVFRFUl9NQU5IQVRUQU4iLDgpfWZ1bmN0aW9uIEx1ZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGs7Zm9yKHY9T3N0KHQsbiksaz1Pc3QoZSxuKSxzPSExO3YmJmsmJihyfHxSMW4odixrLG4pKTspaD1Pc3QodixuKSxkPU9zdChrLG4pLGtEKGUpLGtEKHQpLG89di5jLEJhdCh2LCExKSxCYXQoaywhMSksbj8obHkoZSxrLnAsbyksZS5wPWsucCxseSh0LHYucCsxLG8pLHQucD12LnApOihseSh0LHYucCxvKSx0LnA9di5wLGx5KGUsay5wKzEsbyksZS5wPWsucCksRW8odixudWxsKSxFbyhrLG51bGwpLHY9aCxrPWQscz0hMDtyZXR1cm4gc31mdW5jdGlvbiBIdm4odCxlLG4scil7dmFyIHMsbyxoLGQsdjtmb3Iocz0hMSxvPSExLGQ9bmV3IFMoci5qKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxMSksVnQoUShoLChhZSgpLF9pKSkpPT09VnQobikmJihoLmcuYy5sZW5ndGg9PTA/aC5lLmMubGVuZ3RoPT0wfHwocz0hMCk6bz0hMCk7cmV0dXJuIHY9MCxzJiZzXm8/dj1uLmo9PSh2ZSgpLFBuKT8tdC5lW3IuYy5wXVtyLnBdOmUtdC5lW3IuYy5wXVtyLnBdOm8mJnNebz92PXQuZVtyLmMucF1bci5wXSsxOnMmJm8mJih2PW4uaj09KHZlKCksUG4pPzA6ZS8yKSx2fWZ1bmN0aW9uIGZhdCh0LGUsbixyLHMsbyxoLGQpe3ZhciB2LGssQztmb3Iodj0wLGUhPW51bGwmJih2Xj1WZyhlLnRvTG93ZXJDYXNlKCkpKSxuIT1udWxsJiYodl49VmcobikpLHIhPW51bGwmJih2Xj1WZyhyKSksaCE9bnVsbCYmKHZePVZnKGgpKSxkIT1udWxsJiYodl49VmcoZCkpLGs9MCxDPW8ubGVuZ3RoO2s8QztrKyspdl49Vmcob1trXSk7dD92fD0yNTY6diY9LTI1NyxzP3Z8PTE2OnYmPS0xNyx0aGlzLmY9dix0aGlzLmk9ZT09bnVsbD9udWxsOihPbihlKSxlKSx0aGlzLmE9bix0aGlzLmQ9cix0aGlzLmo9byx0aGlzLmc9aCx0aGlzLmU9ZH1mdW5jdGlvbiBVNXQodCxlLG4pe3ZhciByLHM7c3dpdGNoKHM9bnVsbCxlLmcpe2Nhc2UgMTpzPShqdSgpLGo3dCk7YnJlYWs7Y2FzZSAyOnM9KGp1KCksejd0KX1zd2l0Y2gocj1udWxsLG4uZyl7Y2FzZSAxOnI9KGp1KCksJDd0KTticmVhaztjYXNlIDI6cj0oanUoKSxSN3QpO2JyZWFrO2Nhc2UgMzpyPShqdSgpLHE3dCk7YnJlYWs7Y2FzZSA0OnI9KGp1KCksSDd0KX1yZXR1cm4gcyYmcj8keCh0LmosbmV3IG1DKG5ldyB5bChsdChjdChZeG4sMSksRGUsMTY5LDAsW3UoTHIocyksMTY5KSx1KExyKHIpLDE2OSldKSkpKTood24oKSx3bigpLGlvKX1mdW5jdGlvbiBWdm4odCl7dmFyIGUsbixyO3N3aXRjaChlPXUoUSh0LChUZSgpLEU3KSksOCksSnQodCxFNyxuZXcgJGUoZS5iLGUuYSkpLHUoUSh0LElkKSwyNDgpLmcpe2Nhc2UgMTpKdCh0LElkLCh0MCgpLFdHKSk7YnJlYWs7Y2FzZSAyOkp0KHQsSWQsKHQwKCksR0cpKTticmVhaztjYXNlIDM6SnQodCxJZCwodDAoKSxHTykpO2JyZWFrO2Nhc2UgNDpKdCh0LElkLCh0MCgpLFVPKSl9KHQucT90LnE6KHduKCksd24oKSx1MCkpLl9iKFV5KSYmKG49dShRKHQsVXkpLDgpLHI9bi5hLG4uYT1uLmIsbi5iPXIpfWZ1bmN0aW9uIE11ZSh0LGUsbixyLHMsbyl7aWYodGhpcy5iPW4sdGhpcy5kPXMsdD49ZS5sZW5ndGgpdGhyb3cgaXQobmV3IHlvKCJHcmVlZHkgU3dpdGNoRGVjaWRlcjogRnJlZSBsYXllciBub3QgaW4gZ3JhcGguIikpO3RoaXMuYz1lW3RdLHRoaXMuZT1uZXcgWU0ociksbWl0KHRoaXMuZSx0aGlzLmMsKHZlKCksQm4pKSx0aGlzLmk9bmV3IFlNKHIpLG1pdCh0aGlzLmksdGhpcy5jLEhuKSx0aGlzLmY9bmV3IFNLdCh0aGlzLmMpLHRoaXMuYT0hbyYmcy5pJiYhcy5zJiZ0aGlzLmNbMF0uaz09KFZuKCksa3MpLHRoaXMuYSYmYXBuKHRoaXMsdCxlLmxlbmd0aCl9ZnVuY3Rpb24gRHVlKHQsZSl7dmFyIG4scixzLG8saCxkO289IXQuQi5IYygobGwoKSxjUCkpLGg9dC5CLkhjKEFmdCksdC5hPW5ldyBfaWUoaCxvLHQuYyksdC5uJiZQdnQodC5hLm4sdC5uKSxoZXQodC5nLChLZigpLGV1KSx0LmEpLGV8fChyPW5ldyBhXygxLG8sdC5jKSxyLm4uYT10LmssengodC5wLCh2ZSgpLFBuKSxyKSxzPW5ldyBhXygxLG8sdC5jKSxzLm4uZD10LmssengodC5wLG1yLHMpLGQ9bmV3IGFfKDAsbyx0LmMpLGQubi5jPXQuayx6eCh0LnAsQm4sZCksbj1uZXcgYV8oMCxvLHQuYyksbi5uLmI9dC5rLHp4KHQucCxIbixuKSl9ZnVuY3Rpb24gR3ZuKHQpe3ZhciBlLG4scjtzd2l0Y2goZT11KFEodC5kLChUZSgpLGVnKSksMjE4KSxlLmcpe2Nhc2UgMjpuPXh4bih0KTticmVhaztjYXNlIDM6bj0ocj1uZXcgaGUsbHMoUmkod3UoV28oV28obmV3IFRuKG51bGwsbmV3IF9uKHQuZC5iLDE2KSksbmV3IE5YKSxuZXcgQlgpLG5ldyBIVCksbmV3IF9YKSxuZXcgVXR0KHIpKSxyKTticmVhaztkZWZhdWx0OnRocm93IGl0KG5ldyBObygiQ29tcGFjdGlvbiBub3Qgc3VwcG9ydGVkIGZvciAiK2UrIiBlZGdlcy4iKSl9SDNuKHQsbiksdmEobmV3IFNtKHQuZyksbmV3IFZ0dCh0KSl9ZnVuY3Rpb24gVXZuKHQsZSl7dmFyIG47cmV0dXJuIG49bmV3IGthLGUmJk1vKG4sdSh0cih0LmEsbFApLDk0KSksX3QoZSw0NzApJiZNbyhuLHUodHIodC5hLGhQKSw5NCkpLF90KGUsMzU0KT8oTW8obix1KHRyKHQuYSxxbyksOTQpKSxuKTooX3QoZSw4MikmJk1vKG4sdSh0cih0LmEsYnIpLDk0KSksX3QoZSwyMzkpPyhNbyhuLHUodHIodC5hLHJzKSw5NCkpLG4pOl90KGUsMTg2KT8oTW8obix1KHRyKHQuYSxnbCksOTQpKSxuKTooX3QoZSwzNTIpJiZNbyhuLHUodHIodC5hLFlzKSw5NCkpLG4pKX1mdW5jdGlvbiBKZigpe0pmPVosYzc9bmV3IGVvKCh1aSgpLFpHKSxwZSgxKSksYlY9bmV3IGVvKFcyLDgwKSxrYmU9bmV3IGVvKGZBdCw1KSxkYmU9bmV3IGVvKFc2LEdFKSx5YmU9bmV3IGVvKEVmdCxwZSgxKSkseGJlPW5ldyBlbyhUZnQsKE5uKCksITApKSx4N3Q9bmV3IE93KDUwKSx2YmU9bmV3IGVvKFUyLHg3dCksdjd0PUtHLGs3dD1LUyxnYmU9bmV3IGVvKGdmdCwhMSkseTd0PXRQLHdiZT14YixiYmU9RzIscGJlPW81LG1iZT1ReSxtN3Q9KHE0dCgpLGFiZSksbmx0PWxiZSxwVj1zYmUsZWx0PW9iZSxFN3Q9dWJlfWZ1bmN0aW9uIFd2bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2O2Zvcih2PW5ldyBPSnQsZD1uZXcgUyh0LmEpO2QuYTxkLmMuYy5sZW5ndGg7KWlmKGg9dShKKGQpLDEwKSxoLmshPShWbigpLGtzKSl7Zm9yKFdibih2LGgsbmV3IENhKSxvPW5ldyBhcihscihEcyhoKS5hLktjKCksbmV3IHopKTt6cihvKTspaWYocz11KE1yKG8pLDE3KSwhKHMuYy5pLms9PWtzfHxzLmQuaS5rPT1rcykpZm9yKHI9ZWkocy5hLDApO3IuYiE9ci5kLmM7KW49dSh0aShyKSw4KSxlPW4sZF8odixuZXcgZzgoZS5hLGUuYikpfXJldHVybiB2fWZ1bmN0aW9uIGRhdCgpe2RhdD1aLHdTdD1uZXcgVmkoQmN0KSxiU3Q9KFVDKCksVk8pLHBTdD1uZXcgbW4oJGN0LGJTdCksZ1N0PShqRCgpLFZHKSwkM2U9bmV3IG1uKG84dCxnU3QpLGRTdD0odUkoKSxuZnQpLGozZT1uZXcgbW4oYzh0LGRTdCksTjNlPW5ldyBtbihSY3QsbnVsbCksZlN0PShiRCgpLHFHKSxSM2U9bmV3IG1uKGpjdCxmU3QpLGhTdD0oelIoKSxKaHQpLEkzZT1uZXcgbW4odTh0LGhTdCksTzNlPW5ldyBtbihsOHQsKE5uKCksITEpKSxQM2U9bmV3IG1uKGg4dCxwZSg2NCkpLEYzZT1uZXcgbW4oZjh0LCEwKSxCM2U9ZWZ0fWZ1bmN0aW9uIEl1ZSh0KXt2YXIgZSxuLHIscyxvLGg7aWYodC5hPT1udWxsKWlmKHQuYT1OdChwbCxvMCwyNSx0LmMuYi5jLmxlbmd0aCwxNiwxKSx0LmFbMF09ITEsVXModC5jLChUZSgpLHBodCkpKWZvcihyPXUoUSh0LmMscGh0KSwxNSksbj1yLktjKCk7bi5PYigpOyllPXUobi5QYigpLDE5KS5hLGU+MCYmZTx0LmEubGVuZ3RoJiYodC5hW2VdPSExKTtlbHNlIGZvcihoPW5ldyBTKHQuYy5iKSxoLmE8aC5jLmMubGVuZ3RoJiZKKGgpLHM9MTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwyOSksdC5hW3MrK109QTJuKG8pfWZ1bmN0aW9uIE91ZSh0LGUpe3ZhciBuLHIscyxvO3N3aXRjaChzPXQuYixlKXtjYXNlIDE6e3QuYnw9MSx0LmJ8PTQsdC5ifD04O2JyZWFrfWNhc2UgMjp7dC5ifD0yLHQuYnw9NCx0LmJ8PTg7YnJlYWt9Y2FzZSA0Ont0LmJ8PTEsdC5ifD0yLHQuYnw9NCx0LmJ8PTg7YnJlYWt9Y2FzZSAzOnt0LmJ8PTE2LHQuYnw9ODticmVha31jYXNlIDA6e3QuYnw9MzIsdC5ifD0xNix0LmJ8PTgsdC5ifD0xLHQuYnw9Mix0LmJ8PTQ7YnJlYWt9fWlmKHQuYiE9cyYmdC5jKWZvcihyPW5ldyBucih0LmMpO3IuZSE9ci5pLmdjKCk7KW89dShkcihyKSw0NzMpLG49c2wobyksZ3kobixlKX1mdW5jdGlvbiBQdWUodCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEgsRztmb3Iocz0hMSxoPWUsZD0wLHY9aC5sZW5ndGg7ZDx2OysrZClvPWhbZF0samUoKE5uKCksISFvLmUpKSYmIXUoTmUodC5iLG8uZS5wKSwyMTQpLnMmJihzPXN8KGs9by5lLEM9dShOZSh0LmIsay5wKSwyMTQpLE09Qy5lLGo9bUh0KG4sTS5sZW5ndGgpLEg9TVtqXVswXSxILms9PShWbigpLGtzKT9NW2pdPUF3bihvLE1bal0sbj8odmUoKSxCbik6KHZlKCksSG4pKTpDLmMuVGYoTSxuKSxHPXlJKHQsQyxuLHIpLGo1dChDLmUsQy5vLG4pLEcpKTtyZXR1cm4gc31mdW5jdGlvbiBGdWUodCxlKXt2YXIgbixyLHMsbyxoO2ZvcihvPSghZS5hJiYoZS5hPW5ldyBmZShycyxlLDEwLDExKSksZS5hKS5pLHM9bmV3IG5yKCghZS5hJiYoZS5hPW5ldyBmZShycyxlLDEwLDExKSksZS5hKSk7cy5lIT1zLmkuZ2MoKTspcj11KGRyKHMpLDMzKSxWdChxZShyLCh1aSgpLHM1KSkpIT09VnQoKEcwKCksWlMpKSYmKGg9dShxZShlLE83KSwxNDkpLG49dShxZShyLE83KSwxNDkpLChoPT1ufHxoJiZnbXQoaCxuKSkmJighci5hJiYoci5hPW5ldyBmZShycyxyLDEwLDExKSksci5hKS5pIT0wJiYobys9RnVlKHQscikpKTtyZXR1cm4gb31mdW5jdGlvbiBZdm4odCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKHI9MCxkPTAsaD1uZXcgUyh0LmQpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDEwMSkscz11KEJsKFJpKG5ldyBUbihudWxsLG5ldyBfbihvLmosMTYpKSxuZXcgR1QpLGMyKG5ldyBrZSxuZXcgY2UsbmV3IFhuLGx0KGN0KGZsLDEpLG9lLDEzMiwwLFsoTzEoKSxVbCldKSkpLDE1KSxuPW51bGwscjw9ZD8obj0odmUoKSxQbikscis9cy5nYygpKTpkPHImJihuPSh2ZSgpLG1yKSxkKz1zLmdjKCkpLGU9bixscyh3dShzLk9jKCksbmV3IGpOKSxuZXcgS3R0KGUpKX1mdW5jdGlvbiBLdm4odCl7dmFyIGUsbixyLHMsbyxoLGQsdjtmb3IodC5iPW5ldyBRb2UobmV3IHlsKCh2ZSgpLGx0KGN0KFhhLDEpLHhjLDYxLDAsW1pvLFBuLEhuLG1yLEJuXSkpKSxuZXcgeWwoKG52KCksbHQoY3QobWx0LDEpLG9lLDM2MSwwLFtEdixwYixNdl0pKSkpLGg9bHQoY3QoWGEsMSkseGMsNjEsMCxbWm8sUG4sSG4sbXIsQm5dKSxkPTAsdj1oLmxlbmd0aDtkPHY7KytkKWZvcihvPWhbZF0sbj1sdChjdChtbHQsMSksb2UsMzYxLDAsW0R2LHBiLE12XSkscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sWGRuKHQuYixvLGUsbmV3IGhlKX1mdW5jdGlvbiBOdWUodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTTtpZihoPXUodShBaSh0LnIsZSksMjEpLDg0KSxkPXQudS5IYygoWnUoKSxDYikpLG49dC51LkhjKG5BKSxyPXQudS5IYyhlQSksaz10LnUuSGMoUTYpLE09dC5CLkhjKChsbCgpLHNVKSksQz0hbiYmIXImJihrfHxoLmdjKCk9PTIpLFh3bih0LGUpLHM9bnVsbCx2PW51bGwsZCl7Zm9yKG89aC5LYygpLHM9dShvLlBiKCksMTExKSx2PXM7by5PYigpOyl2PXUoby5QYigpLDExMSk7cy5kLmI9MCx2LmQuYz0wLEMmJiFzLmEmJihzLmQuYz0wKX1NJiYoWTBuKGgpLGQmJihzLmQuYj0wLHYuZC5jPTApKX1mdW5jdGlvbiBCdWUodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTTtpZihoPXUodShBaSh0LnIsZSksMjEpLDg0KSxkPXQudS5IYygoWnUoKSxDYikpLG49dC51LkhjKG5BKSxyPXQudS5IYyhlQSksdj10LnUuSGMoUTYpLE09dC5CLkhjKChsbCgpLHNVKSksaz0hbiYmIXImJih2fHxoLmdjKCk9PTIpLGh5bih0LGUpLEM9bnVsbCxzPW51bGwsZCl7Zm9yKG89aC5LYygpLEM9dShvLlBiKCksMTExKSxzPUM7by5PYigpOylzPXUoby5QYigpLDExMSk7Qy5kLmQ9MCxzLmQuYT0wLGsmJiFDLmEmJihDLmQuYT0wKX1NJiYoSzBuKGgpLGQmJihDLmQuZD0wLHMuZC5hPTApKX1mdW5jdGlvbiBSdWUodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEM7aWYocz1lLmssZS5wPj0wKXJldHVybiExO2lmKGUucD1uLmIsbGUobi5lLGUpLHM9PShWbigpLHRhKXx8cz09SGMpe2ZvcihoPW5ldyBTKGUuaik7aC5hPGguYy5jLmxlbmd0aDspZm9yKG89dShKKGgpLDExKSxDPShyPW5ldyBTKG5ldyBUcihvKS5hLmcpLG5ldyBRdChyKSk7R28oQy5hKTspaWYoaz11KEooQy5hKSwxNykuZCxkPWsuaSx2PWQuayxlLmMhPWQuYyYmKHY9PXRhfHx2PT1IYykmJlJ1ZSh0LGQsbikpcmV0dXJuITB9cmV0dXJuITB9ZnVuY3Rpb24gX3EodCl7dmFyIGU7cmV0dXJuIHQuRGImNjQ/ZjV0KHQpOihlPW5ldyBfaChmNXQodCkpLGUuYSs9IiAoY2hhbmdlYWJsZTogIixMZyhlLCh0LkJiJnhmKSE9MCksZS5hKz0iLCB2b2xhdGlsZTogIixMZyhlLCh0LkJiJkR5KSE9MCksZS5hKz0iLCB0cmFuc2llbnQ6ICIsTGcoZSwodC5CYiZFeSkhPTApLGUuYSs9IiwgZGVmYXVsdFZhbHVlTGl0ZXJhbDogIixnbyhlLHQuaiksZS5hKz0iLCB1bnNldHRhYmxlOiAiLExnKGUsKHQuQmImSHUpIT0wKSxlLmErPSIsIGRlcml2ZWQ6ICIsTGcoZSwodC5CYiZtZCkhPTApLGUuYSs9IikiLGUuYSl9ZnVuY3Rpb24gWHZuKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0sajtmb3Iocz10d24odC5kKSxoPXUoUSh0LmIsKG9fKCksZzd0KSksMTE2KSxkPWguYitoLmMsdj1oLmQraC5hLEM9cy5kLmEqdC5lK2Qsaz1zLmIuYSp0LmYrdixocHQodC5iLG5ldyAkZShDLGspKSxqPW5ldyBTKHQuZyk7ai5hPGouYy5jLmxlbmd0aDspTT11KEooaiksNTYyKSxlPU0uZy1zLmEuYSxuPU0uaS1zLmMuYSxyPUxpKGxaZShuZXcgJGUoZSxuKSxNLmEsTS5iKSxmZChxTShuYyhmMnQoTS5lKSksTS5kKk0uYSxNLmMqTS5iKSwtLjUpKSxvPWQydChNLmUpLCRLZShNLmUsaWEocixvKSl9ZnVuY3Rpb24gUXZuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHY7Zm9yKHY9TnQoYWEsZWUsMTA0LCh2ZSgpLGx0KGN0KFhhLDEpLHhjLDYxLDAsW1pvLFBuLEhuLG1yLEJuXSkpLmxlbmd0aCwwLDIpLG89bHQoY3QoWGEsMSkseGMsNjEsMCxbWm8sUG4sSG4sbXIsQm5dKSxoPTAsZD1vLmxlbmd0aDtoPGQ7KytoKXM9b1toXSx2W3MuZ109TnQoYWEsdm8sMjUsdC5jW3MuZ10sMTUsMSk7cmV0dXJuIHNhZSh2LHQsUG4pLHNhZSh2LHQsbXIpLF9zdCh2LHQsUG4sZSxuLHIpLF9zdCh2LHQsSG4sZSxuLHIpLF9zdCh2LHQsbXIsZSxuLHIpLF9zdCh2LHQsQm4sZSxuLHIpLHZ9ZnVuY3Rpb24gWnZuKHQsZSxuKXtpZihUbCh0LmEsZSkpe2lmKEkwKHUodHIodC5hLGUpLDUzKSxuKSlyZXR1cm4gMX1lbHNlIGtpKHQuYSxlLG5ldyBIcyk7aWYoVGwodC5hLG4pKXtpZihJMCh1KHRyKHQuYSxuKSw1MyksZSkpcmV0dXJuLTF9ZWxzZSBraSh0LmEsbixuZXcgSHMpO2lmKFRsKHQuYixlKSl7aWYoSTAodSh0cih0LmIsZSksNTMpLG4pKXJldHVybi0xfWVsc2Uga2kodC5iLGUsbmV3IEhzKTtpZihUbCh0LmIsbikpe2lmKEkwKHUodHIodC5iLG4pLDUzKSxlKSlyZXR1cm4gMX1lbHNlIGtpKHQuYixuLG5ldyBIcyk7cmV0dXJuIDB9ZnVuY3Rpb24gVzV0KHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsaztpZihuPT1udWxsKXtmb3Iocz11KHQuZywxMTkpLGQ9MDtkPHQuaTsrK2QpaWYoaD1zW2RdLGguYWsoKT09ZSlyZXR1cm4gQmEodCxoLHIpfXJldHVybiBvPSh0bygpLHUoZSw2NikuT2ooKT91KG4sNzIpOlpkKGUsbikpLHhsKHQuZSk/KGs9IVhEKHQsZSkscj1aYyh0LG8sciksdj1lLiRqKCk/R3AodCwzLGUsbnVsbCxuLERFKHQsZSxuLF90KGUsOTkpJiYodShlLDE4KS5CYiZLYSkhPTApLGspOkdwKHQsMSxlLGUuemooKSxuLC0xLGspLHI/ci5FaSh2KTpyPXYpOnI9WmModCxvLHIpLHJ9ZnVuY3Rpb24gSnZuKHQpe3ZhciBlLG4scixzLG8saDt0LnE9PSh1YSgpLGcwKXx8dC5xPT1HY3x8KHM9dC5mLm4uZCskaih1KHBvKHQuYiwodmUoKSxQbikpLDEyNCkpK3QuYyxlPXQuZi5uLmErJGoodShwbyh0LmIsbXIpLDEyNCkpK3QuYyxyPXUocG8odC5iLEhuKSwxMjQpLGg9dShwbyh0LmIsQm4pLDEyNCksbz1iLk1hdGgubWF4KDAsci5uLmQtcyksbz1iLk1hdGgubWF4KG8saC5uLmQtcyksbj1iLk1hdGgubWF4KDAsci5uLmEtZSksbj1iLk1hdGgubWF4KG4saC5uLmEtZSksci5uLmQ9byxoLm4uZD1vLHIubi5hPW4saC5uLmE9bil9ZnVuY3Rpb24gdG1uKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0sajtmb3IodnIoZSwiUmVzdG9yaW5nIHJldmVyc2VkIGVkZ2VzIiwxKSx2PW5ldyBTKHQuYik7di5hPHYuYy5jLmxlbmd0aDspZm9yKGQ9dShKKHYpLDI5KSxDPW5ldyBTKGQuYSk7Qy5hPEMuYy5jLmxlbmd0aDspZm9yKGs9dShKKEMpLDEwKSxqPW5ldyBTKGsuaik7ai5hPGouYy5jLmxlbmd0aDspZm9yKE09dShKKGopLDExKSxoPXdkKE0uZykscj1oLHM9MCxvPXIubGVuZ3RoO3M8bzsrK3Mpbj1yW3NdLGplKFJlKFEobiwoYWUoKSxxMSkpKSkmJmJ2KG4sITEpO29yKGUpfWZ1bmN0aW9uIGp1ZSgpe3RoaXMuYj1uZXcgYTIsdGhpcy5kPW5ldyBhMix0aGlzLmU9bmV3IGEyLHRoaXMuYz1uZXcgYTIsdGhpcy5hPW5ldyBfcix0aGlzLmY9bmV3IF9yLEozKFdzLG5ldyBJWixuZXcgT1opLEozKEFTdCxuZXcgdGMsbmV3IEtjKSxKMyhON3QsbmV3IHppLG5ldyB6TCksSjMoQjd0LG5ldyBIWixuZXcgVlopLEozKCQ0ZSxuZXcgc3gsbmV3IGttKSxKMyhLeG4sbmV3IFBaLG5ldyBGWiksSjMoWnhuLG5ldyBOWixuZXcgQlopLEozKFh4bixuZXcgUlosbmV3IGpaKSxKMyhReG4sbmV3ICRaLG5ldyBBYyksSjMoZTZuLG5ldyB6WixuZXcgUVQpfWZ1bmN0aW9uICR1ZSh0KXt2YXIgZSxuLHIscyxvLGg7cmV0dXJuIG89MCxlPURoKHQpLGUuQmooKSYmKG98PTQpLHQuQmImSHUmJihvfD0yKSxfdCh0LDk5KT8obj11KHQsMTgpLHM9bm8obiksbi5CYiZkYyYmKG98PTMyKSxzJiYoSm4oWW0ocykpLG98PTgsaD1zLnQsKGg+MXx8aD09LTEpJiYob3w9MTYpLHMuQmImZGMmJihvfD02NCkpLG4uQmImS2EmJihvfD1EeSksb3w9eGYpOl90KGUsNDU3KT9vfD01MTI6KHI9ZS5CaigpLHImJnIuaSYxJiYob3w9MjU2KSksdC5CYiY1MTImJihvfD0xMjgpLG99ZnVuY3Rpb24geV8odCxlKXt2YXIgbixyLHMsbyxoO2Zvcih0PXQ9PW51bGw/X3U6KE9uKHQpLHQpLHM9MDtzPGUubGVuZ3RoO3MrKyllW3NdPUYybihlW3NdKTtmb3Iobj1uZXcgSW0saD0wLHI9MDtyPGUubGVuZ3RoJiYobz10LmluZGV4T2YoIiVzIixoKSxvIT0tMSk7KW4uYSs9IiIrUGwodD09bnVsbD9fdTooT24odCksdCksaCxvKSxoYyhuLGVbcisrXSksaD1vKzI7aWYoa1p0KG4sdCxoLHQubGVuZ3RoKSxyPGUubGVuZ3RoKXtmb3Iobi5hKz0iIFsiLGhjKG4sZVtyKytdKTtyPGUubGVuZ3RoOyluLmErPVlhLGhjKG4sZVtyKytdKTtuLmErPSJdIn1yZXR1cm4gbi5hfWZ1bmN0aW9uIGVtbih0KXt2YXIgZSxuLHIscyxvO2ZvcihvPW5ldyBYYyh0LmEuYy5sZW5ndGgpLHM9bmV3IFModC5hKTtzLmE8cy5jLmMubGVuZ3RoOyl7c3dpdGNoKHI9dShKKHMpLDEwKSxuPXUoUShyLChUZSgpLHV1KSksMTYzKSxlPW51bGwsbi5nKXtjYXNlIDE6Y2FzZSAyOmU9KGQyKCksVTQpO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6ZT0oZDIoKSx3Nyl9ZT8oSnQociwoYWUoKSx0RyksKGQyKCksVTQpKSxlPT13Nz94cShyLG4sKHNvKCksdGwpKTplPT1VNCYmeHEocixuLChzbygpLG51KSkpOm8uY1tvLmMubGVuZ3RoXT1yfXJldHVybiBvfWZ1bmN0aW9uIFk1dCh0LGUpe3ZhciBuLHIscyxvLGgsZCx2O2ZvcihuPTAsdj1uZXcgUyhlKTt2LmE8di5jLmMubGVuZ3RoOyl7Zm9yKGQ9dShKKHYpLDExKSxWeXQodC5iLHQuZFtkLnBdKSxoPTAscz1uZXcgTDEoZC5iKTtHbyhzLmEpfHxHbyhzLmIpOylyPXUoR28ocy5hKT9KKHMuYSk6SihzLmIpLDE3KSxUWHQocik/KG89YmJ0KHQsZD09ci5jP3IuZDpyLmMpLG8+dC5kW2QucF0mJihuKz1mbXQodC5iLG8pLFVwKHQuYSxwZShvKSkpKTorK2g7Zm9yKG4rPXQuYi5kKmg7IUJDKHQuYSk7KUhtdCh0LmIsdShIeCh0LmEpLDE5KS5hKX1yZXR1cm4gbn1mdW5jdGlvbiBubW4odCxlKXt2YXIgbjtyZXR1cm4gdC5mPT0kZnQ/KG49SHcoVG8oKCR1KCkseWEpLGUpKSx0LmU/bj09NCYmZSE9KGQ2KCksdGspJiZlIT0oZDYoKSxKNikmJmUhPShkNigpLHpmdCkmJmUhPShkNigpLHFmdCk6bj09Mik6dC5kJiYodC5kLkhjKGUpfHx0LmQuSGMoS3goVG8oKCR1KCkseWEpLGUpKSl8fHQuZC5IYyhDNCgoJHUoKSx5YSksdC5iLGUpKSk/ITA6dC5mJiZPNXQoKCR1KCksdC5mKSxyRChUbyh5YSxlKSkpPyhuPUh3KFRvKHlhLGUpKSx0LmU/bj09NDpuPT0yKTohMX1mdW5jdGlvbiBybW4odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTTtyZXR1cm4gaD11KHFlKG4sKHVpKCksWTYpKSw4KSx2PWguYSxDPWguYit0LHM9Yi5NYXRoLmF0YW4yKEMsdiksczwwJiYocys9TzQpLHMrPWUscz5PNCYmKHMtPU80KSxkPXUocWUocixZNiksOCksaz1kLmEsTT1kLmIrdCxvPWIuTWF0aC5hdGFuMihNLGspLG88MCYmKG8rPU80KSxvKz1lLG8+TzQmJihvLT1PNCksazEoKSx3ZigxZS0xMCksYi5NYXRoLmFicyhzLW8pPD0xZS0xMHx8cz09b3x8aXNOYU4ocykmJmlzTmFOKG8pPzA6czxvPy0xOnM+bz8xOkl3KGlzTmFOKHMpLGlzTmFOKG8pKX1mdW5jdGlvbiBnYXQodCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGQ9bmV3IF9yLHI9bmV3IFModC5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KWU9dShKKHIpLDU3KSxraShkLGUsbmV3IGhlKTtmb3Iocz1uZXcgUyh0LmEuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKGU9dShKKHMpLDU3KSxlLmk9Q3MsaD1lLmMuS2MoKTtoLk9iKCk7KW89dShoLlBiKCksNTcpLHUoZWMoTG8oZC5mLG8pKSwxNSkuRmMoZSk7Zm9yKG49bmV3IFModC5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDU3KSxlLmMuJGIoKSxlLmM9dShlYyhMbyhkLmYsZSkpLDE1KTtvdWUodCl9ZnVuY3Rpb24gcGF0KHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihkPW5ldyBfcixyPW5ldyBTKHQuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyllPXUoSihyKSw4MSksa2koZCxlLG5ldyBoZSk7Zm9yKHM9bmV3IFModC5hLmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihlPXUoSihzKSw4MSksZS5vPUNzLGg9ZS5mLktjKCk7aC5PYigpOylvPXUoaC5QYigpLDgxKSx1KGVjKExvKGQuZixvKSksMTUpLkZjKGUpO2ZvcihuPW5ldyBTKHQuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSw4MSksZS5mLiRiKCksZS5mPXUoZWMoTG8oZC5mLGUpKSwxNSk7UWNlKHQpfWZ1bmN0aW9uIGltbih0LGUsbixyKXt2YXIgcyxvO2Zvcih2ZG4odCxlLG4sciksZnB0KGUsdC5qLWUuaituKSxkcHQoZSx0LmstZS5rK3IpLG89bmV3IFMoZS5mKTtvLmE8by5jLmMubGVuZ3RoOylzd2l0Y2gocz11KEoobyksMzI0KSxzLmEuZyl7Y2FzZSAwOmlFKHQsZS5nK3MuYi5hLDAsZS5nK3MuYy5hLGUuaS0xKTticmVhaztjYXNlIDE6aUUodCxlLmcrZS5vLGUuaStzLmIuYSx0Lm8tMSxlLmkrcy5jLmEpO2JyZWFrO2Nhc2UgMjppRSh0LGUuZytzLmIuYSxlLmkrZS5wLGUuZytzLmMuYSx0LnAtMSk7YnJlYWs7ZGVmYXVsdDppRSh0LDAsZS5pK3MuYi5hLGUuZy0xLGUuaStzLmMuYSl9fWZ1bmN0aW9uIFNxKHQsZSxuLHIscyl7dmFyIG8saCxkO3RyeXtpZihlPj10Lm8pdGhyb3cgaXQobmV3IE9wdCk7ZD1lPj41LGg9ZSYzMSxvPUYwKDEsQXIoRjAoaCwxKSkpLHM/dC5uW25dW2RdPVMxKHQubltuXVtkXSxvKTp0Lm5bbl1bZF09TnModC5uW25dW2RdLFJ3dChvKSksbz1GMChvLDEpLHI/dC5uW25dW2RdPVMxKHQubltuXVtkXSxvKTp0Lm5bbl1bZF09TnModC5uW25dW2RdLFJ3dChvKSl9Y2F0Y2godil7dGhyb3cgdj1XaSh2KSxfdCh2LDMyMCk/aXQobmV3IHlvKEZvdCt0Lm8rIioiK3QucCtOb3QrZStZYStuK0JvdCkpOml0KHYpfX1mdW5jdGlvbiBLNXQodCxlLG4scil7dmFyIHMsbyxoO2UmJihvPVh0KHllKFEoZSwoZmMoKSxucCkpKSkrcixoPW4rWHQoeWUoUShlLElHKSkpLzIsSnQoZSwkaHQscGUoQXIoVHUoYi5NYXRoLnJvdW5kKG8pKSkpKSxKdChlLG9fdCxwZShBcihUdShiLk1hdGgucm91bmQoaCkpKSkpLGUuZC5iPT0wfHxLNXQodCx1KHhqKChzPWVpKG5ldyBMcChlKS5hLmQsMCksbmV3IEV4KHMpKSksODYpLG4rWHQoeWUoUShlLElHKSkpK3QuYSxyK1h0KHllKFEoZSxNNykpKSksUShlLGpodCkhPW51bGwmJks1dCh0LHUoUShlLGpodCksODYpLG4scikpfWZ1bmN0aW9uIHNtbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGo7Zm9yKHY9TmEoZS5hKSxzPVh0KHllKFEodiwoVGUoKSxxMikpKSkqMixDPVh0KHllKFEodix0NSkpKSxrPWIuTWF0aC5tYXgocyxDKSxvPU50KGFhLHZvLDI1LGUuZi1lLmMrMSwxNSwxKSxyPS1rLG49MCxkPWUuYi5LYygpO2QuT2IoKTspaD11KGQuUGIoKSwxMCkscis9dC5hW2guYy5wXStrLG9bbisrXT1yO2ZvcihyKz10LmFbZS5hLmMucF0rayxvW24rK109cixqPW5ldyBTKGUuZSk7ai5hPGouYy5jLmxlbmd0aDspTT11KEooaiksMTApLHIrPXQuYVtNLmMucF0rayxvW24rK109cjtyZXR1cm4gb31mdW5jdGlvbiBhbW4odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqO2ZvcihqPW5ldyBPcChuZXcgUCR0KHQpKSxkPWx0KGN0KGwwLDEpLFlnLDEwLDAsW2Usbl0pLHY9MCxrPWQubGVuZ3RoO3Y8azsrK3YpZm9yKGg9ZFt2XSxNPXRfKGgscikuS2MoKTtNLk9iKCk7KWZvcihDPXUoTS5QYigpLDExKSxvPW5ldyBMMShDLmIpO0dvKG8uYSl8fEdvKG8uYik7KXM9dShHbyhvLmEpP0ooby5hKTpKKG8uYiksMTcpLEdhKHMpfHwoX3ooai5hLEMsKE5uKCksRjIpKT09bnVsbCxUWHQocykmJnREKGosQz09cy5jP3MuZDpzLmMpKTtyZXR1cm4gTHIoaiksbmV3IEJ1KGopfWZ1bmN0aW9uIG9tbih0LGUpe3ZhciBuLHIscyxvO2lmKG89dShxZSh0LCh1aSgpLHU1KSksNjEpLmctdShxZShlLHU1KSw2MSkuZyxvIT0wKXJldHVybiBvO2lmKG49dShxZSh0LHhmdCksMTkpLHI9dShxZShlLHhmdCksMTkpLG4mJnImJihzPW4uYS1yLmEscyE9MCkpcmV0dXJuIHM7c3dpdGNoKHUocWUodCx1NSksNjEpLmcpe2Nhc2UgMTpyZXR1cm4gTXModC5pLGUuaSk7Y2FzZSAyOnJldHVybiBNcyh0LmosZS5qKTtjYXNlIDM6cmV0dXJuIE1zKGUuaSx0LmkpO2Nhc2UgNDpyZXR1cm4gTXMoZS5qLHQuaik7ZGVmYXVsdDp0aHJvdyBpdChuZXcgTm8oRTZ0KSl9fWZ1bmN0aW9uIFg1dCh0KXt2YXIgZSxuLHI7cmV0dXJuIHQuRGImNjQ/VnN0KHQpOihlPW5ldyBPbChtOHQpLG49dC5rLG4/R3IoR3IoKGUuYSs9JyAiJyxlKSxuKSwnIicpOighdC5uJiYodC5uPW5ldyBmZShxbyx0LDEsNykpLHQubi5pPjAmJihyPSghdC5uJiYodC5uPW5ldyBmZShxbyx0LDEsNykpLHUoQXQodC5uLDApLDEzNykpLmEsIXJ8fEdyKEdyKChlLmErPScgIicsZSksciksJyInKSkpLEdyKEF3KEdyKEF3KEdyKEF3KEdyKEF3KChlLmErPSIgKCIsZSksdC5pKSwiLCIpLHQuaiksIiB8ICIpLHQuZyksIiwiKSx0LmYpLCIpIiksZS5hKX1mdW5jdGlvbiB6dWUodCl7dmFyIGUsbixyO3JldHVybiB0LkRiJjY0P1ZzdCh0KTooZT1uZXcgT2woeTh0KSxuPXQuayxuP0dyKEdyKChlLmErPScgIicsZSksbiksJyInKTooIXQubiYmKHQubj1uZXcgZmUocW8sdCwxLDcpKSx0Lm4uaT4wJiYocj0oIXQubiYmKHQubj1uZXcgZmUocW8sdCwxLDcpKSx1KEF0KHQubiwwKSwxMzcpKS5hLCFyfHxHcihHcigoZS5hKz0nICInLGUpLHIpLCciJykpKSxHcihBdyhHcihBdyhHcihBdyhHcihBdygoZS5hKz0iICgiLGUpLHQuaSksIiwiKSx0LmopLCIgfCAiKSx0LmcpLCIsIiksdC5mKSwiKSIpLGUuYSl9ZnVuY3Rpb24gYmF0KHQsZSl7dmFyIG4scixzLG8saCxkLHY7aWYoZT09bnVsbHx8ZS5sZW5ndGg9PTApcmV0dXJuIG51bGw7aWYocz11KE5jKHQuYSxlKSwxNDkpLCFzKXtmb3Iocj0oZD1uZXcgdjEodC5iKS5hLnZjKCkuS2MoKSxuZXcgbTEoZCkpO3IuYS5PYigpOylpZihuPShvPXUoci5hLlBiKCksNDIpLHUoby5kZCgpLDE0OSkpLGg9bi5jLHY9ZS5sZW5ndGgsaG4oaC5zdWJzdHIoaC5sZW5ndGgtdix2KSxlKSYmKGUubGVuZ3RoPT1oLmxlbmd0aHx8d2EoaCxoLmxlbmd0aC1lLmxlbmd0aC0xKT09NDYpKXtpZihzKXJldHVybiBudWxsO3M9bn1zJiZrbyh0LmEsZSxzKX1yZXR1cm4gc31mdW5jdGlvbiBjbW4odCxlKXt2YXIgbixyLHMsbztyZXR1cm4gbj1uZXcgZWgscj11KEJsKHd1KG5ldyBUbihudWxsLG5ldyBfbih0LmYsMTYpKSxuKSxabShuZXcgb24sbmV3IG5pLG5ldyBkaSxuZXcgRWUsbHQoY3QoZmwsMSksb2UsMTMyLDAsWyhPMSgpLEl5KSxVbF0pKSksMjEpLHM9ci5nYygpLHI9dShCbCh3dShuZXcgVG4obnVsbCxuZXcgX24oZS5mLDE2KSksbiksWm0obmV3IG9uLG5ldyBuaSxuZXcgZGksbmV3IEVlLGx0KGN0KGZsLDEpLG9lLDEzMiwwLFtJeSxVbF0pKSksMjEpLG89ci5nYygpLHM8bz8tMTpzPT1vPzA6MX1mdW5jdGlvbiBxdWUodCl7dmFyIGUsbixyO1VzKHQsKFRlKCksTnYpKSYmKHI9dShRKHQsTnYpLDIxKSwhci5kYygpJiYobj0oZT11KFZmKGxvKSw5KSxuZXcgc2goZSx1KGZmKGUsZS5sZW5ndGgpLDkpLDApKSxyLkhjKChweSgpLFlsKSk/dmYobixZbCk6dmYobixBZiksci5IYyhxaCl8fHZmKG4scWgpLHIuSGMoX2YpP3ZmKG4sTGYpOnIuSGMoaWcpP3ZmKG4sZDApOnIuSGMoU2YpJiZ2ZihuLEhoKSxyLkhjKExmKT92ZihuLF9mKTpyLkhjKGQwKT92ZihuLGlnKTpyLkhjKEhoKSYmdmYobixTZiksSnQodCxOdixuKSkpfWZ1bmN0aW9uIHVtbih0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3Iocz11KFEodCwoYWUoKSxQdikpLDEwKSxyPXQuaixuPShBbigwLHIuYy5sZW5ndGgpLHUoci5jWzBdLDExKSksaD1uZXcgUyhzLmopO2guYTxoLmMuYy5sZW5ndGg7KWlmKG89dShKKGgpLDExKSxWdChvKT09PVZ0KFEobixfaSkpKXtvLmo9PSh2ZSgpLFBuKSYmdC5wPnMucD8oQnMobyxtciksby5kJiYoZD1vLm8uYixlPW8uYS5iLG8uYS5iPWQtZSkpOm8uaj09bXImJnMucD50LnAmJihCcyhvLFBuKSxvLmQmJihkPW8uby5iLGU9by5hLmIsby5hLmI9LShkLWUpKSk7YnJlYWt9cmV0dXJuIHN9ZnVuY3Rpb24gbG1uKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE0saixILEc7aWYobz1uLG48cilmb3Ioaj0oSD1uZXcgUEQodC5wKSxHPW5ldyBQRCh0LnApLFVhKEguZSx0LmUpLEgucT10LnEsSC5yPUcscyQoSCksVWEoRy5qLHQuaiksRy5yPUgscyQoRyksbmV3IGZhKEgsRykpLE09dShqLmEsMTEyKSxDPXUoai5iLDExMikscz0oQW4obyxlLmMubGVuZ3RoKSx1KGUuY1tvXSwzMjkpKSxoPXh1ZSh0LE0sQyxzKSxrPW4rMTtrPD1yO2srKylkPShBbihrLGUuYy5sZW5ndGgpLHUoZS5jW2tdLDMyOSkpLHY9eHVlKHQsTSxDLGQpLFZmbihkLHYscyxoKSYmKHM9ZCxoPXYpO3JldHVybiBvfWZ1bmN0aW9uIHhJKHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE07aWYoIShfdChlLDIzOSl8fF90KGUsMzU0KXx8X3QoZSwxODYpKSl0aHJvdyBpdChuZXcgRm4oIk1ldGhvZCBvbmx5IHdvcmtzIGZvciBFbGtOb2RlLSwgRWxrTGFiZWwgYW5kIEVsa1BvcnQtb2JqZWN0cy4iKSk7cmV0dXJuIGg9dC5hLzIsdj1lLmkrci1oLEM9ZS5qK3MtaCxrPXYrZS5nK3QuYSxNPUMrZS5mK3QuYSxvPW5ldyBQdSxyaShvLG5ldyAkZSh2LEMpKSxyaShvLG5ldyAkZSh2LE0pKSxyaShvLG5ldyAkZShrLE0pKSxyaShvLG5ldyAkZShrLEMpKSxkPW5ldyBuYXQobyksTW8oZCxlKSxuJiZraSh0LmIsZSxkKSxkfWZ1bmN0aW9uIHhfKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0sajtmb3Iobz1uZXcgJGUoZSxuKSxDPW5ldyBTKHQuYSk7Qy5hPEMuYy5jLmxlbmd0aDspZm9yKGs9dShKKEMpLDEwKSxMaShrLm4sbyksaj1uZXcgUyhrLmopO2ouYTxqLmMuYy5sZW5ndGg7KWZvcihNPXUoSihqKSwxMSkscz1uZXcgUyhNLmcpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoSihzKSwxNyksbnkoci5hLG8pLGg9dShRKHIsKFRlKCksU28pKSw3NCksaCYmbnkoaCxvKSx2PW5ldyBTKHIuYik7di5hPHYuYy5jLmxlbmd0aDspZD11KEoodiksNzApLExpKGQubixvKX1mdW5jdGlvbiBobW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqO2ZvcihvPW5ldyAkZShlLG4pLEM9bmV3IFModC5hKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3Ioaz11KEooQyksMTApLExpKGsubixvKSxqPW5ldyBTKGsuaik7ai5hPGouYy5jLmxlbmd0aDspZm9yKE09dShKKGopLDExKSxzPW5ldyBTKE0uZyk7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShKKHMpLDE3KSxueShyLmEsbyksaD11KFEociwoVGUoKSxTbykpLDc0KSxoJiZueShoLG8pLHY9bmV3IFMoci5iKTt2LmE8di5jLmMubGVuZ3RoOylkPXUoSih2KSw3MCksTGkoZC5uLG8pfWZ1bmN0aW9uIEh1ZSh0KXtpZigoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLmk9PTApdGhyb3cgaXQobmV3IGpDKCJFZGdlcyBtdXN0IGhhdmUgYSBzb3VyY2UuIikpO2lmKCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYykuaT09MCl0aHJvdyBpdChuZXcgakMoIkVkZ2VzIG11c3QgaGF2ZSBhIHRhcmdldC4iKSk7aWYoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSwhKHQuYi5pPD0xJiYoIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmMuaTw9MSkpKXRocm93IGl0KG5ldyBqQygiSHlwZXJlZGdlcyBhcmUgbm90IHN1cHBvcnRlZC4iKSl9ZnVuY3Rpb24gVnVlKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE07Zm9yKE09MCxvPW5ldyBCMyxVcChvLGUpO28uYiE9by5jOylmb3Iodj11KEh4KG8pLDIxNCksaz0wLEM9dShRKGUuaiwoVGUoKSx3YikpLDMzOSksaD1YdCh5ZShRKGUuaixhRykpKSxkPVh0KHllKFEoZS5qLHFDdCkpKSxDIT0oVjAoKSx2YikmJihrKz1oKnkybih2LmUsQyksays9ZCpHd24odi5lKSksTSs9SHNlKHYuZCx2LmUpK2sscz1uZXcgUyh2LmIpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDM3KSxuPXUoTmUodC5iLHIucCksMjE0KSxuLnN8fChNKz1Lc3QodCxuKSk7cmV0dXJuIE19ZnVuY3Rpb24gZm1uKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dDtmb3IoSD1lLmxlbmd0aCx2PUgsUnIoMCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KDApPT00NT8oTT0tMSxqPTEsLS1IKTooTT0xLGo9MCksbz0oTGF0KCksSGdlKVsxMF0scz1IL298MCx0dD1IJW8sdHQhPTAmJisrcyxkPU50KENyLFhyLDI1LHMsMTUsMSksbj1xZ2VbOF0saD0wLEc9aisodHQ9PTA/bzp0dCksSz1qO0s8djtLPUcsRz1LK28pcj1xbChlLnN1YnN0cihLLEctSyksU2Esd2kpLGs9KFRFKCkscTN0KGQsZCxoLG4pKSxrKz1xaG4oZCxoLHIpLGRbaCsrXT1rO0M9aCx0LmU9TSx0LmQ9Qyx0LmE9ZCxOOSh0KX1mdW5jdGlvbiBHdWUodCxlLG4scixzLG8saCl7aWYodC5jPXIucWYoKS5hLHQuZD1yLnFmKCkuYixzJiYodC5jKz1zLnFmKCkuYSx0LmQrPXMucWYoKS5iKSx0LmI9ZS5yZigpLmEsdC5hPWUucmYoKS5iLCFzKW4/dC5jLT1oK2UucmYoKS5hOnQuYys9ci5yZigpLmEraDtlbHNlIHN3aXRjaChzLkhmKCkuZyl7Y2FzZSAwOmNhc2UgMjp0LmMrPXMucmYoKS5hK2grby5hK2g7YnJlYWs7Y2FzZSA0OnQuYy09aCtvLmEraCtlLnJmKCkuYTticmVhaztjYXNlIDE6dC5jKz1zLnJmKCkuYStoLHQuZC09aCtvLmIraCtlLnJmKCkuYjticmVhaztjYXNlIDM6dC5jKz1zLnJmKCkuYStoLHQuZCs9cy5yZigpLmIraCtvLmIraH19ZnVuY3Rpb24gVXVlKHQsZSl7dmFyIG4scjtmb3IodGhpcy5iPW5ldyBoZSx0aGlzLmU9bmV3IGhlLHRoaXMuYT10LHRoaXMuZD1lLCRmbih0aGlzKSxLaG4odGhpcyksdGhpcy5iLmRjKCk/dGhpcy5jPXQuYy5wOnRoaXMuYz11KHRoaXMuYi5YYigwKSwxMCkuYy5wLHRoaXMuZS5jLmxlbmd0aD09MD90aGlzLmY9dC5jLnA6dGhpcy5mPXUoTmUodGhpcy5lLHRoaXMuZS5jLmxlbmd0aC0xKSwxMCkuYy5wLHI9dShRKHQsKGFlKCksTE8pKSwxNSkuS2MoKTtyLk9iKCk7KWlmKG49dShyLlBiKCksNzApLFVzKG4sKFRlKCksY0cpKSl7dGhpcy5kPXUoUShuLGNHKSwyMjcpO2JyZWFrfX1mdW5jdGlvbiBMRSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQztmb3Iocj11KHRyKHQuYSxlKSw1Myksbz11KHRyKHQuYSxuKSw1Mykscz11KHRyKHQuZSxlKSw1MyksaD11KHRyKHQuZSxuKSw1Myksci5hLnpjKG4sciksaC5hLnpjKGUsaCksQz1vLmEuZWMoKS5LYygpO0MuT2IoKTspaz11KEMuUGIoKSwxMCksci5hLnpjKGssciksRnModSh0cih0LmUsayksNTMpLGUpLFVhKHUodHIodC5lLGspLDUzKSxzKTtmb3Iodj1zLmEuZWMoKS5LYygpO3YuT2IoKTspZD11KHYuUGIoKSwxMCksaC5hLnpjKGQsaCksRnModSh0cih0LmEsZCksNTMpLG4pLFVhKHUodHIodC5hLGQpLDUzKSxvKX1mdW5jdGlvbiBrSSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQztmb3Iocj11KHRyKHQuYSxlKSw1Myksbz11KHRyKHQuYSxuKSw1Mykscz11KHRyKHQuYixlKSw1MyksaD11KHRyKHQuYixuKSw1Myksci5hLnpjKG4sciksaC5hLnpjKGUsaCksQz1vLmEuZWMoKS5LYygpO0MuT2IoKTspaz11KEMuUGIoKSwxMCksci5hLnpjKGssciksRnModSh0cih0LmIsayksNTMpLGUpLFVhKHUodHIodC5iLGspLDUzKSxzKTtmb3Iodj1zLmEuZWMoKS5LYygpO3YuT2IoKTspZD11KHYuUGIoKSwxMCksaC5hLnpjKGQsaCksRnModSh0cih0LmEsZCksNTMpLG4pLFVhKHUodHIodC5hLGQpLDUzKSxvKX1mdW5jdGlvbiBkbW4odCxlKXt2YXIgbixyLHM7c3dpdGNoKHZyKGUsIkJyZWFraW5nIFBvaW50IEluc2VydGlvbiIsMSkscj1uZXcgbTV0KHQpLHUoUSh0LChUZSgpLGdodCkpLDMzNykuZyl7Y2FzZSAyOnM9bmV3IFVOO2Nhc2UgMDpzPW5ldyBITjticmVhaztkZWZhdWx0OnM9bmV3IFdOfWlmKG49cy5WZih0LHIpLGplKFJlKFEodCxfOXQpKSkmJihuPWk0bih0LG4pKSwhcy5XZigpJiZVcyh0LHdHKSlzd2l0Y2godShRKHQsd0cpLDMzOCkuZyl7Y2FzZSAyOm49RG9lKHIsbik7YnJlYWs7Y2FzZSAxOm49TWFlKHIsbil9aWYobi5kYygpKXtvcihlKTtyZXR1cm59aXhuKHQsbiksb3IoZSl9ZnVuY3Rpb24gZ21uKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0sajtpZihDPW51bGwsaj1lLE09Wlp0KHQsWVp0KG4pLGopLEc5KE0sUjAoaixBZCkpLGg9S3coaixrOHQpLHI9bmV3IE9HdCh0LE0pLHpwbihyLmEsci5iLGgpLGQ9S3coaixudXQpLHM9bmV3IFBHdCh0LE0pLHFwbihzLmEscy5iLGQpLCghTS5iJiYoTS5iPW5ldyBDbihicixNLDQsNykpLE0uYikuaT09MHx8KCFNLmMmJihNLmM9bmV3IENuKGJyLE0sNSw4KSksTS5jKS5pPT0wKXRocm93IG89UjAoaixBZCksdj1WZGUrbyxrPXYrSkUsaXQobmV3IHVkKGspKTtyZXR1cm4gbHEoaixNKSxseG4odCxqLE0pLEM9TGl0KHQsaixNKSxDfWZ1bmN0aW9uIHBtbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2O2ZvcihzPU50KENyLFhyLDI1LHQuZS5hLmMubGVuZ3RoLDE1LDEpLGg9bmV3IFModC5lLmEpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDEyMSksc1tvLmRdKz1vLmIuYS5jLmxlbmd0aDtmb3IoZD1RTShlKTtkLmIhPTA7KWZvcihvPXUoZC5iPT0wP251bGw6KFpuKGQuYiE9MCksbGgoZCxkLmEuYSkpLDEyMSkscj1lNihuZXcgUyhvLmcuYSkpO3IuT2IoKTspbj11KHIuUGIoKSwyMTMpLHY9bi5lLHYuZT1iLk1hdGgubWF4KHYuZSxvLmUrbi5hKSwtLXNbdi5kXSxzW3YuZF09PTAmJmZzKGQsdixkLmMuYixkLmMpfWZ1bmN0aW9uIFd1ZSh0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNO2ZvcihuPVNhLHM9d2ksZD1uZXcgUyh0LmUuYSk7ZC5hPGQuYy5jLmxlbmd0aDspbz11KEooZCksMTIxKSxzPWIuTWF0aC5taW4ocyxvLmUpLG49Yi5NYXRoLm1heChuLG8uZSk7Zm9yKGU9TnQoQ3IsWHIsMjUsbi1zKzEsMTUsMSksaD1uZXcgUyh0LmUuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTIxKSxvLmUtPXMsKytlW28uZV07aWYocj0wLHQuayE9bnVsbClmb3Ioaz10LmssQz0wLE09ay5sZW5ndGg7QzxNJiYodj1rW0NdLGVbcisrXSs9dixlLmxlbmd0aCE9cik7KytDKTtyZXR1cm4gZX1mdW5jdGlvbiBZdWUodCl7c3dpdGNoKHQuZCl7Y2FzZSA5OmNhc2UgODpyZXR1cm4hMDtjYXNlIDM6Y2FzZSA1OmNhc2UgNDpjYXNlIDY6cmV0dXJuITE7Y2FzZSA3OnJldHVybiB1KCQ1dCh0KSwxOSkuYT09dC5vO2Nhc2UgMTpjYXNlIDI6e2lmKHQubz09LTIpcmV0dXJuITE7c3dpdGNoKHQucCl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6Y2FzZSA2OmNhc2UgNTpjYXNlIDc6cmV0dXJuIER3KHQuayx0LmYpO2Nhc2UgMzpjYXNlIDQ6cmV0dXJuIHQuaj09dC5lO2RlZmF1bHQ6cmV0dXJuIHQubj09bnVsbD90Lmc9PW51bGw6eWkodC5uLHQuZyl9fWRlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIEt1ZSh0KXtNdyh0LG5ldyBrMihfdyhFdyhDdyhUdyhuZXcga2csWV8pLCJFTEsgRml4ZWQiKSwiS2VlcHMgdGhlIGN1cnJlbnQgbGF5b3V0IGFzIGl0IGlzLCB3aXRob3V0IGFueSBhdXRvbWF0aWMgbW9kaWZpY2F0aW9uLiBPcHRpb25hbCBjb29yZGluYXRlcyBjYW4gYmUgZ2l2ZW4gZm9yIG5vZGVzIGFuZCBlZGdlIGJlbmQgcG9pbnRzLiIpLG5ldyBxTCkpKSx4ZSh0LFlfLHh2LE1BdCkseGUodCxZXyx5SCxJZShRUykpLHhlKHQsWV8scDh0LEllKF9BdCkpLHhlKHQsWV8sRDQsSWUoU0F0KSkseGUodCxZXyxDNixJZShMQXQpKSx4ZSh0LFlfLEVjdCxJZShBQXQpKX1mdW5jdGlvbiBBcSh0LGUsbil7dmFyIHIscyxvLGgsZDtpZihyPUFyKF9hKGkwLFhkKEFyKF9hKGU9PW51bGw/MDpIaShlKSxzMCkpLDE1KSkpLGQ9QXIoX2EoaTAsWGQoQXIoX2Eobj09bnVsbD8wOkhpKG4pLHMwKSksMTUpKSksbz1VOSh0LGUsciksbyYmZD09by5mJiZwZChuLG8uaSkpcmV0dXJuIG47aWYoaD1XOSh0LG4sZCksaCl0aHJvdyBpdChuZXcgRm4oInZhbHVlIGFscmVhZHkgcHJlc2VudDogIituKSk7cmV0dXJuIHM9bmV3IG8kKGUscixuLGQpLG8/KG00KHQsbyksZkkodCxzLG8pLG8uZT1udWxsLG8uYz1udWxsLG8uaSk6KGZJKHQscyxudWxsKSxhYWUodCksbnVsbCl9ZnVuY3Rpb24gYm1uKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEc7Qz1uLmEuYyxoPW4uYS5jK24uYS5iLG89dSh0cihuLmMsZSksNDU5KSxIPW8uZixHPW8uYSxvLmI/dj1uZXcgJGUoaCxIKTp2PW5ldyAkZShDLEgpLG8uYz9NPW5ldyAkZShDLEcpOk09bmV3ICRlKGgsRykscz1DLG4ucHx8KHMrPXQuYykscys9bi5GK24udip0LmIsaz1uZXcgJGUocyxIKSxqPW5ldyAkZShzLEcpLFY5KGUuYSxsdChjdChXcywxKSxlZSw4LDAsW3Ysa10pKSxkPW4uZC5hLmdjKCk+MSxkJiYocj1uZXcgJGUocyxuLmIpLHJpKGUuYSxyKSksVjkoZS5hLGx0KGN0KFdzLDEpLGVlLDgsMCxbaixNXSkpfWZ1bmN0aW9uIHdhdCh0LGUsbil7dmFyIHIscyxvLGgsZCx2O2lmKGUpaWYobjw9LTEpe2lmKHI9eW4oZS5UZygpLC0xLW4pLF90KHIsOTkpKXJldHVybiB1KHIsMTgpO2ZvcihoPXUoZS5haChyKSwxNTMpLGQ9MCx2PWguZ2MoKTtkPHY7KytkKWlmKFZ0KGguamwoZCkpPT09VnQodCkmJihzPWguaWwoZCksX3Qocyw5OSkmJihvPXUocywxOCksby5CYiZkYykpKXJldHVybiBvO3Rocm93IGl0KG5ldyBObygiVGhlIGNvbnRhaW5tZW50IGZlYXR1cmUgY291bGQgbm90IGJlIGxvY2F0ZWQiKSl9ZWxzZSByZXR1cm4gbm8odSh5bih0LlRnKCksbiksMTgpKTtlbHNlIHJldHVybiBudWxsfWZ1bmN0aW9uIHdtbih0KXt2YXIgZSxuLHIscyxvO2ZvcihyPXQubGVuZ3RoLGU9bmV3ICRDLG89MDtvPHI7KWlmKG49d2EodCxvKyspLCEobj09OXx8bj09MTB8fG49PTEyfHxuPT0xM3x8bj09MzIpKXtpZihuPT0zNSl7Zm9yKDtvPHImJihuPXdhKHQsbysrKSwhKG49PTEzfHxuPT0xMCkpOyk7Y29udGludWV9bj09OTImJm88cj8ocz0oUnIobyx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KG8pKSk9PTM1fHxzPT05fHxzPT0xMHx8cz09MTJ8fHM9PTEzfHxzPT0zMj8oUzgoZSxzJnlzKSwrK28pOihlLmErPSJcXCIsUzgoZSxzJnlzKSwrK28pOlM4KGUsbiZ5cyl9cmV0dXJuIGUuYX1mdW5jdGlvbiB2bW4odCxlKXt2YXIgbixyLHM7Zm9yKHI9bmV3IFMoZSk7ci5hPHIuYy5jLmxlbmd0aDspaWYobj11KEoociksMzMpLGxuKHQuYSxuLG4pLGxuKHQuYixuLG4pLHM9d3kobikscy5jLmxlbmd0aCE9MClmb3IodC5kJiZ0LmQubGcocyksbG4odC5hLG4sKEFuKDAscy5jLmxlbmd0aCksdShzLmNbMF0sMzMpKSksbG4odC5iLG4sdShOZShzLHMuYy5sZW5ndGgtMSksMzMpKTtDaXQocykuYy5sZW5ndGghPTA7KXM9Q2l0KHMpLHQuZCYmdC5kLmxnKHMpLGxuKHQuYSxuLChBbigwLHMuYy5sZW5ndGgpLHUocy5jWzBdLDMzKSkpLGxuKHQuYixuLHUoTmUocyxzLmMubGVuZ3RoLTEpLDMzKSl9ZnVuY3Rpb24gbW1uKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDO2ZvcihuPTAsZD1uZXcgUyh0LmQpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDEwMSksaC5pJiYoaC5pLmM9bisrKTtmb3IoZT10MihwbCxbZWUsbzBdLFsxNzcsMjVdLDE2LFtuLG5dLDIpLEM9dC5kLHM9MDtzPEMuYy5sZW5ndGg7cysrKWlmKHY9KEFuKHMsQy5jLmxlbmd0aCksdShDLmNbc10sMTAxKSksdi5pKWZvcihvPXMrMTtvPEMuYy5sZW5ndGg7bysrKWs9KEFuKG8sQy5jLmxlbmd0aCksdShDLmNbb10sMTAxKSksay5pJiYocj1pZ24odixrKSxlW3YuaS5jXVtrLmkuY109cixlW2suaS5jXVt2LmkuY109cik7cmV0dXJuIGV9ZnVuY3Rpb24gUTV0KHQsZSxuLHIpe3ZhciBzLG8saDtyZXR1cm4gaD1uZXcgYlZ0KGUsbiksdC5hP3I/KHM9dSh0cih0LmIsZSksMjgzKSwrK3MuYSxoLmQ9ci5kLGguZT1yLmUsaC5iPXIsaC5jPXIsci5lP3IuZS5jPWg6dSh0cih0LmIsZSksMjgzKS5iPWgsci5kP3IuZC5iPWg6dC5hPWgsci5kPWgsci5lPWgpOih0LmUuYj1oLGguZD10LmUsdC5lPWgscz11KHRyKHQuYixlKSwyODMpLHM/KCsrcy5hLG89cy5jLG8uYz1oLGguZT1vLHMuYz1oKTooa2kodC5iLGUscz1uZXcgUnZ0KGgpKSwrK3QuYykpOih0LmE9dC5lPWgsa2kodC5iLGUsbmV3IFJ2dChoKSksKyt0LmMpLCsrdC5kLGh9ZnVuY3Rpb24gdnkodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrO2ZvcihuPW5ldyBSZWdFeHAoZSwiZyIpLHY9TnQoQWUsZWUsMiwwLDYsMSkscj0wLGs9dCxvPW51bGw7OylpZihkPW4uZXhlYyhrKSxkPT1udWxsfHxrPT0iIil7dltyXT1rO2JyZWFrfWVsc2UgaD1kLmluZGV4LHZbcl09ay5zdWJzdHIoMCxoKSxrPVBsKGssaCtkWzBdLmxlbmd0aCxrLmxlbmd0aCksbi5sYXN0SW5kZXg9MCxvPT1rJiYodltyXT1rLnN1YnN0cigwLDEpLGs9ay5zdWJzdHIoMSkpLG89aywrK3I7aWYodC5sZW5ndGg+MCl7Zm9yKHM9di5sZW5ndGg7cz4wJiZ2W3MtMV09PSIiOyktLXM7czx2Lmxlbmd0aCYmKHYubGVuZ3RoPXMpfXJldHVybiB2fWZ1bmN0aW9uIFo1dCh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNO2ZvcihNPUFvKGUpLGs9bnVsbCxzPSExLGQ9MCxDPUxjKE0uYSkuaTtkPEM7KytkKWg9dShBSShNLGQsKG89dShBdChMYyhNLmEpLGQpLDg3KSx2PW8uYyxfdCh2LDg4KT91KHYsMjYpOihkbigpLEtoKSkpLDI2KSxuPVo1dCh0LGgpLG4uZGMoKXx8KGs/KHN8fChzPSEwLGs9bmV3IEdqKGspKSxrLkdjKG4pKTprPW4pO3JldHVybiByPWlibih0LGUpLHIuZGMoKT9rfHwod24oKSx3bigpLGlvKTprPyhzfHwoaz1uZXcgR2ooaykpLGsuR2Mociksayk6cn1mdW5jdGlvbiB2YXQodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTTtmb3IoTT1BbyhlKSxrPW51bGwscj0hMSxkPTAsQz1MYyhNLmEpLmk7ZDxDOysrZClvPXUoQUkoTSxkLChzPXUoQXQoTGMoTS5hKSxkKSw4Nyksdj1zLmMsX3Qodiw4OCk/dSh2LDI2KTooZG4oKSxLaCkpKSwyNiksbj12YXQodCxvKSxuLmRjKCl8fChrPyhyfHwocj0hMCxrPW5ldyBHaihrKSksay5HYyhuKSk6az1uKTtyZXR1cm4gaD1PYm4odCxlKSxoLmRjKCk/a3x8KHduKCksd24oKSxpbyk6az8ocnx8KGs9bmV3IEdqKGspKSxrLkdjKGgpLGspOmh9ZnVuY3Rpb24gRUkodCxlLG4pe3ZhciByLHMsbyxoLGQsdjtpZihfdChlLDcyKSlyZXR1cm4gQmEodCxlLG4pO2ZvcihkPW51bGwsbz1udWxsLHI9dSh0LmcsMTE5KSxoPTA7aDx0Lmk7KytoKWlmKHM9cltoXSx5aShlLHMuZGQoKSkmJihvPXMuYWsoKSxfdChvLDk5KSYmdShvLDE4KS5CYiZkYykpe2Q9czticmVha31yZXR1cm4gZCYmKHhsKHQuZSkmJih2PW8uJGooKT9HcCh0LDQsbyxlLG51bGwsREUodCxvLGUsX3Qobyw5OSkmJih1KG8sMTgpLkJiJkthKSE9MCksITApOkdwKHQsby5LaigpPzI6MSxvLGUsby56aigpLC0xLCEwKSxuP24uRWkodik6bj12KSxuPUVJKHQsZCxuKSksbn1mdW5jdGlvbiB5bW4odCl7dmFyIGUsbixyLHM7cj10Lm8sJG0oKSx0LkEuZGMoKXx8eWkodC5BLG83dCk/cz1yLmE6KHM9Z0kodC5mKSx0LkEuSGMoKEFsKCksYVApKSYmIXQuQi5IYygobGwoKSxpQSkpJiYocz1iLk1hdGgubWF4KHMsZ0kodShwbyh0LnAsKHZlKCksUG4pKSwyNDQpKSkscz1iLk1hdGgubWF4KHMsZ0kodShwbyh0LnAsbXIpLDI0NCkpKSksZT1HbmUodCksZSYmKHM9Yi5NYXRoLm1heChzLGUuYSkpKSxqZShSZSh0LmUueWYoKS5XZSgodWkoKSxYRykpKSk/ci5hPWIuTWF0aC5tYXgoci5hLHMpOnIuYT1zLG49dC5mLmksbi5jPTAsbi5iPXMsRWF0KHQuZil9ZnVuY3Rpb24geG1uKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDO2lmKG49ZS5IaCh0LmEpLG4mJih2PUJyKFhmKCghbi5iJiYobi5iPW5ldyBrbCgoZG4oKSxRYSksY2MsbikpLG4uYiksIm1lbWJlclR5cGVzIikpLHYhPW51bGwpKXtmb3Ioaz1uZXcgaGUsbz12eSh2LCJcXHciKSxoPTAsZD1vLmxlbmd0aDtoPGQ7KytoKXM9b1toXSxyPXMubGFzdEluZGV4T2YoIiMiKSxDPXI9PS0xP1cydCh0LGUuQWooKSxzKTpyPT0wP3lEKHQsbnVsbCxzLnN1YnN0cigxKSk6eUQodCxzLnN1YnN0cigwLHIpLHMuc3Vic3RyKHIrMSkpLF90KEMsMTQ4KSYmbGUoayx1KEMsMTQ4KSk7cmV0dXJuIGt9cmV0dXJuIHduKCksd24oKSxpb31mdW5jdGlvbiBrbW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEM7Zm9yKHZyKG4scjFlLDEpLHQuYmYoZSksbz0wO3QuZGYobyk7KXtmb3IoQz1uZXcgUyhlLmUpO0MuYTxDLmMuYy5sZW5ndGg7KWZvcih2PXUoSihDKSwxNDQpLGQ9enAoRDEobHQoY3QoajEsMSksRGUsMjAsMCxbZS5lLGUuZCxlLmJdKSkpO3pyKGQpOyloPXUoTXIoZCksMzU3KSxoIT12JiYocz10LmFmKGgsdikscyYmTGkodi5hLHMpKTtmb3Ioaz1uZXcgUyhlLmUpO2suYTxrLmMuYy5sZW5ndGg7KXY9dShKKGspLDE0NCkscj12LmEsWmFlKHIsLXQuZCwtdC5kLHQuZCx0LmQpLExpKHYuZCxyKSxHZihyKTt0LmNmKCksKytvfW9yKG4pfWZ1bmN0aW9uIEVtbih0LGUsbil7dmFyIHIscyxvLGg7aWYoaD1vdSh0LmUuVGcoKSxlKSxyPXUodC5nLDExOSksdG8oKSx1KGUsNjYpLk9qKCkpe2ZvcihvPTA7bzx0Lmk7KytvKWlmKHM9cltvXSxoLnJsKHMuYWsoKSkmJnlpKHMsbikpcmV0dXJuIGJ5KHQsbyksITB9ZWxzZSBpZihuIT1udWxsKXtmb3Iobz0wO288dC5pOysrbylpZihzPXJbb10saC5ybChzLmFrKCkpJiZ5aShuLHMuZGQoKSkpcmV0dXJuIGJ5KHQsbyksITB9ZWxzZSBmb3Iobz0wO288dC5pOysrbylpZihzPXJbb10saC5ybChzLmFrKCkpJiZzLmRkKCk9PW51bGwpcmV0dXJuIGJ5KHQsbyksITA7cmV0dXJuITF9ZnVuY3Rpb24gVG1uKHQsZSl7dmFyIG4scixzLG8saDtmb3IodC5jPT1udWxsfHx0LmMubGVuZ3RoPGUuYy5sZW5ndGg/dC5jPU50KHBsLG8wLDI1LGUuYy5sZW5ndGgsMTYsMSk6UkModC5jKSx0LmE9bmV3IGhlLHI9MCxoPW5ldyBTKGUpO2guYTxoLmMuYy5sZW5ndGg7KXM9dShKKGgpLDEwKSxzLnA9cisrO2ZvcihuPW5ldyBaaSxvPW5ldyBTKGUpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDEwKSx0LmNbcy5wXXx8KEJvZSh0LHMpLG4uYj09MHx8KFpuKG4uYiE9MCksdShuLmEuYS5jLDE1KSkuZ2MoKTx0LmEuYy5sZW5ndGg/c1V0KG4sdC5hKTpaYihuLHQuYSksdC5hPW5ldyBoZSk7cmV0dXJuIG59ZnVuY3Rpb24gQ21uKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE0saixILEc7Zm9yKGg9dShBdChlLDApLDMzKSxrdShoLDApLEV1KGgsMCksaj1uZXcgaGUsai5jW2ouYy5sZW5ndGhdPWgsZD1oLG89bmV3IEZudCh0LmEsaC5nLGguZiwoQUUoKSxVUykpLEg9MTtIPGUuaTtIKyspRz11KEF0KGUsSCksMzMpLHY9QWF0KHQsaTUsRyxkLG8saixuKSxrPUFhdCh0LEc2LEcsZCxvLGosbiksQz1BYXQodCxHUyxHLGQsbyxqLG4pLE09QWF0KHQsVlMsRyxkLG8saixuKSxzPVIzbih0LHYsayxDLE0sRyxkLHIpLGt1KEcscy5kKSxFdShHLHMuZSksWmsocyxVUyksbz1zLGQ9RyxqLmNbai5jLmxlbmd0aF09RztyZXR1cm4gb31mdW5jdGlvbiBYdWUodCl7TXcodCxuZXcgazIoX3coRXcoQ3coVHcobmV3IGtnLFlFKSwiRUxLIFNQT3JFIE92ZXJsYXAgUmVtb3ZhbCIpLCdBIG5vZGUgb3ZlcmxhcCByZW1vdmFsIGFsZ29yaXRobSBwcm9wb3NlZCBieSBOYWNobWFuc29uIGV0IGFsLiBpbiAiTm9kZSBvdmVybGFwIHJlbW92YWwgYnkgZ3Jvd2luZyBhIHRyZWUiLicpLG5ldyBtWikpKSx4ZSh0LFlFLEJjdCxJZSh4U3QpKSx4ZSh0LFlFLHh2LHlTdCkseGUodCxZRSxDeSw4KSx4ZSh0LFlFLCRjdCxJZShxM2UpKSx4ZSh0LFlFLGg4dCxJZSh2U3QpKSx4ZSh0LFlFLGY4dCxJZShtU3QpKSx4ZSh0LFlFLEpJLChObigpLCExKSl9ZnVuY3Rpb24gUXVlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE0saixIO2ZvcihoPWptKGUuYyxuLHIpLE09bmV3IFMoZS5hKTtNLmE8TS5jLmMubGVuZ3RoOyl7Zm9yKEM9dShKKE0pLDEwKSxMaShDLm4saCksSD1uZXcgUyhDLmopO0guYTxILmMuYy5sZW5ndGg7KWZvcihqPXUoSihIKSwxMSksbz1uZXcgUyhqLmcpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSwxNyksbnkocy5hLGgpLGQ9dShRKHMsKFRlKCksU28pKSw3NCksZCYmbnkoZCxoKSxrPW5ldyBTKHMuYik7ay5hPGsuYy5jLmxlbmd0aDspdj11KEooayksNzApLExpKHYubixoKTtsZSh0LmEsQyksQy5hPXR9fWZ1bmN0aW9uIF9tbih0LGUpe3ZhciBuLHIscyxvLGg7aWYodnIoZSwiTm9kZSBhbmQgUG9ydCBMYWJlbCBQbGFjZW1lbnQgYW5kIE5vZGUgU2l6aW5nIiwxKSxPVXQoKFZDKCksbmV3IGhydCh0LCEwLCEwLG5ldyBHSykpKSx1KFEodCwoYWUoKSxWYykpLDIxKS5IYygob28oKSx2aCkpKWZvcihvPXUoUSh0LChUZSgpLEd5KSksMjEpLHM9by5IYygoWnUoKSxzUCkpLGg9amUoUmUoUSh0LHc5dCkpKSxyPW5ldyBTKHQuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMjkpLGxzKFJpKG5ldyBUbihudWxsLG5ldyBfbihuLmEsMTYpKSxuZXcgcWQpLG5ldyBGWXQobyxzLGgpKTtvcihlKX1mdW5jdGlvbiBTbW4odCxlKXt2YXIgbixyLHMsbyxoLGQ7aWYobj1lLkhoKHQuYSksbiYmKGQ9QnIoWGYoKCFuLmImJihuLmI9bmV3IGtsKChkbigpLFFhKSxjYyxuKSksbi5iKSxNSCkpLGQhPW51bGwpKXN3aXRjaChzPVRqKGQsQ3UoMzUpKSxyPWUuSGooKSxzPT0tMT8oaD1DOSh0LFJsKHIpKSxvPWQpOnM9PTA/KGg9bnVsbCxvPWQuc3Vic3RyKDEpKTooaD1kLnN1YnN0cigwLHMpLG89ZC5zdWJzdHIocysxKSksSHcoVG8odCxlKSkpe2Nhc2UgMjpjYXNlIDM6cmV0dXJuIEZ1bih0LHIsaCxvKTtjYXNlIDA6Y2FzZSA0OmNhc2UgNTpjYXNlIDY6cmV0dXJuIE51bih0LHIsaCxvKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBKNXQodCxlLG4pe3ZhciByLHMsbyxoLGQ7aWYoaD0odG8oKSx1KGUsNjYpLk9qKCkpLFgwKHQuZSxlKSl7aWYoZS5oaSgpJiZNcSh0LGUsbixfdChlLDk5KSYmKHUoZSwxOCkuQmImS2EpIT0wKSlyZXR1cm4hMX1lbHNlIGZvcihkPW91KHQuZS5UZygpLGUpLHI9dSh0LmcsMTE5KSxvPTA7bzx0Lmk7KytvKWlmKHM9cltvXSxkLnJsKHMuYWsoKSkpcmV0dXJuKGg/eWkocyxuKTpuPT1udWxsP3MuZGQoKT09bnVsbDp5aShuLHMuZGQoKSkpPyExOih1KGg0KHQsbyxoP3Uobiw3Mik6WmQoZSxuKSksNzIpLCEwKTtyZXR1cm4gRHIodCxoP3Uobiw3Mik6WmQoZSxuKSl9ZnVuY3Rpb24gVEkodCl7dmFyIGUsbixyLHMsbyxoLGQsdjtpZih0LmQpdGhyb3cgaXQobmV3IE5vKChQMCh1bHQpLFNvdCt1bHQuaytBb3QpKSk7Zm9yKHQuYz09KGFvKCksaDApJiZfNCh0LHpoKSxuPW5ldyBTKHQuYS5hKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxODkpLGUuZT0wO2ZvcihoPW5ldyBTKHQuYS5iKTtoLmE8aC5jLmMubGVuZ3RoOylmb3Iobz11KEooaCksODEpLG8ubz1DcyxzPW8uZi5LYygpO3MuT2IoKTspcj11KHMuUGIoKSw4MSksKytyLmQuZTtmb3IoeTVuKHQpLHY9bmV3IFModC5hLmIpO3YuYTx2LmMuYy5sZW5ndGg7KWQ9dShKKHYpLDgxKSxkLms9ITA7cmV0dXJuIHR9ZnVuY3Rpb24gQW1uKHQsZSl7dmFyIG4scixzLG8saCxkLHYsaztmb3IoZD1uZXcgb29lKHQpLG49bmV3IFppLGZzKG4sZSxuLmMuYixuLmMpO24uYiE9MDspe2ZvcihyPXUobi5iPT0wP251bGw6KFpuKG4uYiE9MCksbGgobixuLmEuYSkpLDExMyksci5kLnA9MSxoPW5ldyBTKHIuZSk7aC5hPGguYy5jLmxlbmd0aDspcz11KEooaCksNDA5KSxBYWUoZCxzKSxrPXMuZCxrLmQucD09MCYmZnMobixrLG4uYy5iLG4uYyk7Zm9yKG89bmV3IFMoci5iKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSw0MDkpLEFhZShkLHMpLHY9cy5jLHYuZC5wPT0wJiZmcyhuLHYsbi5jLmIsbi5jKX1yZXR1cm4gZH1mdW5jdGlvbiBadWUodCl7dmFyIGUsbixyLHMsbztpZihyPVh0KHllKHFlKHQsKHVpKCksZzRlKSkpKSxyIT0xKWZvcihiaih0LHIqdC5nLHIqdC5mKSxuPUhYZSh0ZW4oKCF0LmMmJih0LmM9bmV3IGZlKGdsLHQsOSw5KSksdC5jKSxuZXcgR1opKSxvPXpwKEQxKGx0KGN0KGoxLDEpLERlLDIwLDAsWyghdC5uJiYodC5uPW5ldyBmZShxbyx0LDEsNykpLHQubiksKCF0LmMmJih0LmM9bmV3IGZlKGdsLHQsOSw5KSksdC5jKSxuXSkpKTt6cihvKTspcz11KE1yKG8pLDQ3MCkscy5HZyhyKnMuRGcoKSxyKnMuRWcoKSkscy5GZyhyKnMuQ2coKSxyKnMuQmcoKSksZT11KHMuV2UoYUF0KSw4KSxlJiYoZS5hKj1yLGUuYio9cil9ZnVuY3Rpb24gTG1uKHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE0sajtmb3IoaD1uZXcgUyh0LmIpO2guYTxoLmMuYy5sZW5ndGg7KWZvcihvPXUoSihoKSwyOSksaj1sRChvLmEpLGs9aixDPTAsTT1rLmxlbmd0aDtDPE07KytDKXN3aXRjaCh2PWtbQ10sdShRKHYsKFRlKCksdXUpKSwxNjMpLmcpe2Nhc2UgMTpudm4odiksRW8odixlKSxtc2UodiwhMCxyKTticmVhaztjYXNlIDM6enduKHYpLEVvKHYsbiksbXNlKHYsITEscyl9Zm9yKGQ9bmV3IGRhKHQuYiwwKTtkLmI8ZC5kLmdjKCk7KShabihkLmI8ZC5kLmdjKCkpLHUoZC5kLlhiKGQuYz1kLmIrKyksMjkpKS5hLmMubGVuZ3RoPT0wJiZDbChkKX1mdW5jdGlvbiBNbW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdjtpZihuPWUuSGgodC5hKSxuJiYodj1CcihYZigoIW4uYiYmKG4uYj1uZXcga2woKGRuKCksUWEpLGNjLG4pKSxuLmIpLFY4dCkpLHYhPW51bGwpKXtmb3Iocj1uZXcgaGUsbz12eSh2LCJcXHciKSxoPTAsZD1vLmxlbmd0aDtoPGQ7KytoKXM9b1toXSxobihzLCIjI290aGVyIik/bGUociwiISMjIitDOSh0LFJsKGUuSGooKSkpKTpobihzLCIjI2xvY2FsIik/ci5jW3IuYy5sZW5ndGhdPW51bGw6aG4ocyxzTyk/bGUocixDOSh0LFJsKGUuSGooKSkpKTpyLmNbci5jLmxlbmd0aF09cztyZXR1cm4gcn1yZXR1cm4gd24oKSx3bigpLGlvfWZ1bmN0aW9uIERtbih0LGUpe3ZhciBuLHIscyxvO3JldHVybiBuPW5ldyByZixyPXUoQmwod3UobmV3IFRuKG51bGwsbmV3IF9uKHQuZiwxNikpLG4pLFptKG5ldyBvbixuZXcgbmksbmV3IGRpLG5ldyBFZSxsdChjdChmbCwxKSxvZSwxMzIsMCxbKE8xKCksSXkpLFVsXSkpKSwyMSkscz1yLmdjKCkscj11KEJsKHd1KG5ldyBUbihudWxsLG5ldyBfbihlLmYsMTYpKSxuKSxabShuZXcgb24sbmV3IG5pLG5ldyBkaSxuZXcgRWUsbHQoY3QoZmwsMSksb2UsMTMyLDAsW0l5LFVsXSkpKSwyMSksbz1yLmdjKCkscz1zPT0xPzE6MCxvPW89PTE/MTowLHM8bz8tMTpzPT1vPzA6MX1mdW5jdGlvbiBJbW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqO2ZvcihkPXQuaSxzPWplKFJlKFEoZCwoVGUoKSxIeSkpKSksQz0wLHI9MCxrPW5ldyBTKHQuZyk7ay5hPGsuYy5jLmxlbmd0aDspdj11KEooayksMTcpLGg9R2Eodiksbz1oJiZzJiZqZShSZShRKHYsajIpKSksaj12LmQuaSxoJiZvPysrcjpoJiYhbz8rK0M6TmEoaikuZT09ZD8rK3I6KytDO2ZvcihuPW5ldyBTKHQuZSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTcpLGg9R2EoZSksbz1oJiZzJiZqZShSZShRKGUsajIpKSksTT1lLmMuaSxoJiZvPysrQzpoJiYhbz8rK3I6TmEoTSkuZT09ZD8rK0M6KytyO3JldHVybiBDLXJ9ZnVuY3Rpb24gRTQodCxlLG4scil7dGhpcy5lPXQsdGhpcy5rPXUoUSh0LChhZSgpLFE0KSksMzA0KSx0aGlzLmc9TnQobDAsWWcsMTAsZSwwLDEpLHRoaXMuYj1OdChsYSxlZSwzMzMsZSw3LDEpLHRoaXMuYT1OdChsMCxZZywxMCxlLDAsMSksdGhpcy5kPU50KGxhLGVlLDMzMyxlLDcsMSksdGhpcy5qPU50KGwwLFlnLDEwLGUsMCwxKSx0aGlzLmk9TnQobGEsZWUsMzMzLGUsNywxKSx0aGlzLnA9TnQobGEsZWUsMzMzLGUsNywxKSx0aGlzLm49TnQoUnMsZWUsNDc2LGUsOCwxKSxDTSh0aGlzLm4sKE5uKCksITEpKSx0aGlzLmY9TnQoUnMsZWUsNDc2LGUsOCwxKSxDTSh0aGlzLmYsITApLHRoaXMubz1uLHRoaXMuYz1yfWZ1bmN0aW9uIEp1ZSh0LGUpe3ZhciBuLHIscyxvLGgsZDtpZighZS5kYygpKWlmKHUoZS5YYigwKSwyODYpLmQ9PShoNigpLE55KSlsZG4odCxlKTtlbHNlIGZvcihyPWUuS2MoKTtyLk9iKCk7KXtzd2l0Y2gobj11KHIuUGIoKSwyODYpLG4uZC5nKXtjYXNlIDU6RUUodCxuLHlobih0LG4pKTticmVhaztjYXNlIDA6RUUodCxuLChoPW4uZi1uLmMrMSxkPShoLTEpLzJ8MCxuLmMrZCkpO2JyZWFrO2Nhc2UgNDpFRSh0LG4sUG9uKHQsbikpO2JyZWFrO2Nhc2UgMjpDaWUobiksRUUodCxuLChvPUU0dChuKSxvP24uYzpuLmYpKTticmVhaztjYXNlIDE6Q2llKG4pLEVFKHQsbiwocz1FNHQobikscz9uLmY6bi5jKSl9b2duKG4uYSl9fWZ1bmN0aW9uIE9tbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2O2lmKCFlLmUpe2ZvcihlLmU9ITAscj1lLmQuYS5lYygpLktjKCk7ci5PYigpOyl7aWYobj11KHIuUGIoKSwxNyksZS5vJiZlLmQuYS5nYygpPD0xKXtoPWUuYS5jLGQ9ZS5hLmMrZS5hLmIsdj1uZXcgJGUoaCsoZC1oKS8yLGUuYikscmkodShlLmQuYS5lYygpLktjKCkuUGIoKSwxNykuYSx2KTtjb250aW51ZX1pZihzPXUodHIoZS5jLG4pLDQ1OSkscy5ifHxzLmMpe2Jtbih0LG4sZSk7Y29udGludWV9bz10LmQ9PShjRSgpLFBTKSYmKHMuZHx8cy5lKSYmU2JuKHQsZSkmJmUuZC5hLmdjKCk8PTEsbz9KNG4obixlKTpQdm4odCxuLGUpfWUuayYmdmEoZS5kLG5ldyBDMyl9fWZ1bmN0aW9uIHR4dCh0LGUsbixyLHMsbyl7dmFyIGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3Q7Zm9yKGo9byxkPShyK3MpLzIraix0dD1uKmIuTWF0aC5jb3MoZCksZ3Q9bipiLk1hdGguc2luKGQpLE10PXR0LWUuZy8yLFN0PWd0LWUuZi8yLGt1KGUsTXQpLEV1KGUsU3QpLE09dC5hLmpnKGUpLEs9MipiLk1hdGguYWNvcyhuL24rdC5jKSxLPHMtcj8oSD1LL00saD0ocitzLUspLzIpOihIPShzLXIpL00saD1yKSxHPXd5KGUpLHQuZSYmKHQuZS5rZyh0LmQpLHQuZS5sZyhHKSksaz1uZXcgUyhHKTtrLmE8ay5jLmMubGVuZ3RoOyl2PXUoSihrKSwzMyksQz10LmEuamcodiksdHh0KHQsdixuK3QuYyxoLGgrSCpDLG8pLGgrPUgqQ31mdW5jdGlvbiBQbW4odCxlLG4pe3ZhciByO3N3aXRjaChyPW4ucS5nZXRNb250aCgpLGUpe2Nhc2UgNTpHcih0LGx0KGN0KEFlLDEpLGVlLDIsNixbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdKVtyXSk7YnJlYWs7Y2FzZSA0OkdyKHQsbHQoY3QoQWUsMSksZWUsMiw2LFtRYXQsWmF0LEphdCx0b3QsdzYsZW90LG5vdCxyb3QsaW90LHNvdCxhb3Qsb290XSlbcl0pO2JyZWFrO2Nhc2UgMzpHcih0LGx0KGN0KEFlLDEpLGVlLDIsNixbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsdzYsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdKVtyXSk7YnJlYWs7ZGVmYXVsdDpKZCh0LHIrMSxlKX19ZnVuY3Rpb24gbWF0KHQsZSl7dmFyIG4scixzLG8saDtpZih2cihlLCJOZXR3b3JrIHNpbXBsZXgiLDEpLHQuZS5hLmMubGVuZ3RoPDEpe29yKGUpO3JldHVybn1mb3Iobz1uZXcgUyh0LmUuYSk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTIxKSxzLmU9MDtmb3IoaD10LmUuYS5jLmxlbmd0aD49NDAsaCYmeHluKHQpLEMzbih0KSxpdm4odCksbj1maWUodCkscj0wO24mJnI8dC5mOylCbW4odCxuLHIybih0LG4pKSxuPWZpZSh0KSwrK3I7aCYmUzBuKHQpLHQuYT93Mm4odCxXdWUodCkpOld1ZSh0KSx0LmI9bnVsbCx0LmQ9bnVsbCx0LnA9bnVsbCx0LmM9bnVsbCx0Lmc9bnVsbCx0Lmk9bnVsbCx0Lm49bnVsbCx0Lm89bnVsbCxvcihlKX1mdW5jdGlvbiBGbW4odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqO2Zvcih2PW5ldyAkZShuLHIpLGlhKHYsdShRKGUsKFlwKCksZFMpKSw4KSksaj1uZXcgUyhlLmUpO2ouYTxqLmMuYy5sZW5ndGg7KU09dShKKGopLDE0NCksTGkoTS5kLHYpLGxlKHQuZSxNKTtmb3IoZD1uZXcgUyhlLmMpO2QuYTxkLmMuYy5sZW5ndGg7KXtmb3IoaD11KEooZCksMjgyKSxvPW5ldyBTKGguYSk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksNTU5KSxMaShzLmQsdik7bGUodC5jLGgpfWZvcihDPW5ldyBTKGUuZCk7Qy5hPEMuYy5jLmxlbmd0aDspaz11KEooQyksNDQ3KSxMaShrLmQsdiksbGUodC5kLGspfWZ1bmN0aW9uIGV4dCh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGs7Zm9yKHY9bmV3IFMoZS5qKTt2LmE8di5jLmMubGVuZ3RoOylmb3IoZD11KEoodiksMTEpLHM9bmV3IEwxKGQuYik7R28ocy5hKXx8R28ocy5iKTspcj11KEdvKHMuYSk/SihzLmEpOkoocy5iKSwxNyksbj1yLmM9PWQ/ci5kOnIuYyxvPW4uaSxlIT1vJiYoaz11KFEociwoVGUoKSxfNykpLDE5KS5hLGs8MCYmKGs9MCksaD1vLnAsdC5iW2hdPT0wJiYoci5kPT1uPyh0LmFbaF0tPWsrMSx0LmFbaF08PTAmJnQuY1toXT4wJiZyaSh0LmYsbykpOih0LmNbaF0tPWsrMSx0LmNbaF08PTAmJnQuYVtoXT4wJiZyaSh0LmUsbykpKSl9ZnVuY3Rpb24gTm1uKHQpe3ZhciBlLG4scixzLG8saCxkLHYsaztmb3IoZD1uZXcgT3AodShMcihuZXcgamQpLDYyKSksaz1DcyxuPW5ldyBTKHQuZCk7bi5hPG4uYy5jLmxlbmd0aDspe2ZvcihlPXUoSihuKSwyMjIpLGs9ZS5jLmM7ZC5hLmMhPTAmJih2PXUobG5uKGdvbihkLmEpKSwyMjIpLHYuYy5jK3YuYy5iPGspOylQOShkLmEsdikhPW51bGw7Zm9yKGg9KHM9bmV3IHk5KG5ldyB3OShuZXcgeShkLmEpLmEpLmIpLG5ldyBnKHMpKTtUTShoLmEuYSk7KW89KHI9TGooaC5hKSx1KHIuY2QoKSwyMjIpKSxyaShvLmIsZSkscmkoZS5iLG8pO196KGQuYSxlLChObigpLEYyKSk9PW51bGx9fWZ1bmN0aW9uIHRsZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNO2ZvcihvPW5ldyBYYyhlLmMubGVuZ3RoKSxrPW5ldyBTKGUpO2suYTxrLmMuYy5sZW5ndGg7KWg9dShKKGspLDEwKSxsZShvLHQuYltoLmMucF1baC5wXSk7Zm9yKEczbih0LG8sbiksTT1udWxsO009VTRuKG8pOylOeW4odCx1KE0uYSwyMzMpLHUoTS5iLDIzMyksbyk7Zm9yKGUuYz1OdChRbixEZSwxLDAsNSwxKSxzPW5ldyBTKG8pO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoSihzKSwyMzMpLGQ9ci5kLHY9MCxDPWQubGVuZ3RoO3Y8QzsrK3YpaD1kW3ZdLGUuY1tlLmMubGVuZ3RoXT1oLHQuYVtoLmMucF1baC5wXS5hPUUxKHIuZyxyLmRbMF0pLmF9ZnVuY3Rpb24gbnh0KHQsZSl7dmFyIG4scixzLG87aWYoMDwoX3QodCwxNCk/dSh0LDE0KS5nYygpOmowKHQuS2MoKSkpKXtpZihzPWUsMTxzKXtmb3IoLS1zLG89bmV3IFdRLHI9dC5LYygpO3IuT2IoKTspbj11KHIuUGIoKSw4Niksbz1EMShsdChjdChqMSwxKSxEZSwyMCwwLFtvLG5ldyBMcChuKV0pKTtyZXR1cm4gbnh0KG8scyl9aWYoczwwKXtmb3Iobz1uZXcgWVEscj10LktjKCk7ci5PYigpOyluPXUoci5QYigpLDg2KSxvPUQxKGx0KGN0KGoxLDEpLERlLDIwLDAsW28sbmV3IExwKG4pXSkpO2lmKDA8KF90KG8sMTQpP3UobywxNCkuZ2MoKTpqMChvLktjKCkpKSlyZXR1cm4gbnh0KG8scyl9fXJldHVybiB1KHhqKHQuS2MoKSksODYpfWZ1bmN0aW9uIGxsKCl7bGw9WixSNz1uZXcgSDMoIkRFRkFVTFRfTUlOSU1VTV9TSVpFIiwwKSx1UD1uZXcgSDMoIk1JTklNVU1fU0laRV9BQ0NPVU5UU19GT1JfUEFERElORyIsMSksblU9bmV3IEgzKCJDT01QVVRFX1BBRERJTkciLDIpLGlBPW5ldyBIMygiT1VUU0lERV9OT0RFX0xBQkVMU19PVkVSSEFORyIsMyksclU9bmV3IEgzKCJQT1JUU19PVkVSSEFORyIsNCksc1U9bmV3IEgzKCJVTklGT1JNX1BPUlRfU1BBQ0lORyIsNSksaVU9bmV3IEgzKCJTUEFDRV9FRkZJQ0lFTlRfUE9SVF9MQUJFTFMiLDYpLEFmdD1uZXcgSDMoIkZPUkNFX1RBQlVMQVJfTk9ERV9MQUJFTFMiLDcpLGNQPW5ldyBIMygiQVNZTU1FVFJJQ0FMIiw4KX1mdW5jdGlvbiB5YXQodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrO2lmKGUpe2lmKG49KG89ZS5UZygpLG8/UmwobykuTmgoKS5KaChvKTpudWxsKSxuKXtmb3IobTIodCxlLG4pLHM9ZS5UZygpLHY9MCxrPShzLmk9PW51bGwmJnZkKHMpLHMuaSkubGVuZ3RoO3Y8azsrK3YpZD0ocj0ocy5pPT1udWxsJiZ2ZChzKSxzLmkpLHY+PTAmJnY8ci5sZW5ndGg/clt2XTpudWxsKSxkLklqKCkmJiFkLkpqKCkmJihfdChkLDMyMik/VWZuKHQsdShkLDM0KSxlLG4pOihoPXUoZCwxOCksaC5CYiZkYyYmbjBuKHQsaCxlLG4pKSk7ZS5raCgpJiZ1KG4sNDkpLnZoKHUoZSw0OSkucWgoKSl9cmV0dXJuIG59ZWxzZSByZXR1cm4gbnVsbH1mdW5jdGlvbiBCbW4odCxlLG4pe3ZhciByLHMsbztpZighZS5mKXRocm93IGl0KG5ldyBGbigiR2l2ZW4gbGVhdmUgZWRnZSBpcyBubyB0cmVlIGVkZ2UuIikpO2lmKG4uZil0aHJvdyBpdChuZXcgRm4oIkdpdmVuIGVudGVyIGVkZ2UgaXMgYSB0cmVlIGVkZ2UgYWxyZWFkeS4iKSk7Zm9yKGUuZj0hMSxtMnQodC5wLGUpLG4uZj0hMCxGcyh0LnAsbikscj1uLmUuZS1uLmQuZS1uLmEsUXN0KHQsbi5lLGUpfHwocj0tciksbz1uZXcgUyh0LmUuYSk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTIxKSxRc3QodCxzLGUpfHwocy5lKz1yKTt0Lmo9MSxSQyh0LmMpLGE1dCh0LHUoSihuZXcgUyh0LmUuYSkpLDEyMSkpLGNoZSh0KX1mdW5jdGlvbiBlbGUodCxlKXt2YXIgbixyLHMsbyxoLGQ7aWYoZD11KFEoZSwoVGUoKSxjcykpLDk4KSxkPT0odWEoKSxnMCl8fGQ9PUdjKWZvcihzPW5ldyAkZShlLmYuYStlLmQuYitlLmQuYyxlLmYuYitlLmQuZCtlLmQuYSkuYixoPW5ldyBTKHQuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTApLG8uaz09KFZuKCksa3MpJiYobj11KFEobywoYWUoKSxvYykpLDYxKSwhKG4hPSh2ZSgpLEhuKSYmbiE9Qm4pJiYocj1YdCh5ZShRKG8sRnYpKSksZD09ZzAmJihyKj1zKSxvLm4uYj1yLXUoUShvLFJ2KSw4KS5iLEV6KG8sITEsITApKSl9ZnVuY3Rpb24gbmxlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE0saixIO2lmKG5jbih0LGUsbiksbz1lW25dLEg9cj8odmUoKSxCbik6KHZlKCksSG4pLEJRZShlLmxlbmd0aCxuLHIpKXtmb3Iocz1lW3I/bi0xOm4rMV0sX210KHQscyxyPyhzbygpLG51KTooc28oKSx0bCkpLHY9byxDPTAsaj12Lmxlbmd0aDtDPGo7KytDKWg9dltDXSxHM3QodCxoLEgpO2ZvcihfbXQodCxvLHI/KHNvKCksdGwpOihzbygpLG51KSksZD1zLGs9MCxNPWQubGVuZ3RoO2s8TTsrK2spaD1kW2tdLGguZXx8RzN0KHQsaCxZRChIKSl9ZWxzZSBmb3IoZD1vLGs9MCxNPWQubGVuZ3RoO2s8TTsrK2spaD1kW2tdLEczdCh0LGgsSCk7cmV0dXJuITF9ZnVuY3Rpb24gUm1uKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDO3Y9S28oZSxuKSwobj09KHZlKCksbXIpfHxuPT1CbikmJih2PV90KHYsMTUyKT9aeCh1KHYsMTUyKSk6X3QodiwxMzEpP3UodiwxMzEpLmE6X3Qodiw1NCk/bmV3IGt3KHYpOm5ldyBPbSh2KSksaD0hMTtkbyBmb3Iocz0hMSxvPTA7bzx2LmdjKCktMTtvKyspaz11KHYuWGIobyksMTEpLGQ9dSh2LlhiKG8rMSksMTEpLHBnbih0LGssZCxyKSYmKGg9ITAsSXJ0KHQuYSx1KHYuWGIobyksMTEpLHUodi5YYihvKzEpLDExKSksQz11KHYuWGIobysxKSwxMSksdi5fYyhvKzEsdSh2LlhiKG8pLDExKSksdi5fYyhvLEMpLHM9ITApO3doaWxlKHMpO3JldHVybiBofWZ1bmN0aW9uIGptbih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHO2lmKHhsKHQuZSkpe2lmKGUhPW4mJihzPXUodC5nLDExOSksSD1zW25dLGg9SC5haygpLFgwKHQuZSxoKSkpe2ZvcihHPW91KHQuZS5UZygpLGgpLHY9LTEsZD0tMSxyPTAsaz0wLE09ZT5uP2U6bjtrPD1NOysraylrPT1uP2Q9cisrOihvPXNba10sQz1HLnJsKG8uYWsoKSksaz09ZSYmKHY9az09TSYmIUM/ci0xOnIpLEMmJisrcik7cmV0dXJuIGo9dShyXyh0LGUsbiksNzIpLGQhPXYmJm44KHQsbmV3IG1EKHQuZSw3LGgscGUoZCksSC5kZCgpLHYpKSxqfX1lbHNlIHJldHVybiB1KEpzdCh0LGUsbiksNzIpO3JldHVybiB1KHJfKHQsZSxuKSw3Mil9ZnVuY3Rpb24gJG1uKHQsZSl7dmFyIG4scixzLG8saCxkLHY7Zm9yKHZyKGUsIlBvcnQgb3JkZXIgcHJvY2Vzc2luZyIsMSksdj11KFEodCwoVGUoKSx2OXQpKSw0MjEpLHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOylmb3Iobj11KEoociksMjkpLG89bmV3IFMobi5hKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxMCksaD11KFEocyxjcyksOTgpLGQ9cy5qLGg9PSh1YSgpLFkyKXx8aD09ZzB8fGg9PUdjPyh3bigpLFpzKGQsVFR0KSk6aCE9RzEmJmghPVRiJiYod24oKSxacyhkLGwyZSksZTFuKGQpLHY9PShDRCgpLENodCkmJlpzKGQsdTJlKSkscy5pPSEwLHI1dChzKTtvcihlKX1mdW5jdGlvbiB6bW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdjtmb3Iodj1uZXcgX3IsZT1uZXcgZWV0LGg9dC5LYygpO2guT2IoKTspcz11KGguUGIoKSwxMCksZD1Gdyh4TShuZXcgWGIscyksZSksYXUodi5mLHMsZCk7Zm9yKG89dC5LYygpO28uT2IoKTspZm9yKHM9dShvLlBiKCksMTApLHI9bmV3IGFyKGxyKERzKHMpLmEuS2MoKSxuZXcgeikpO3pyKHIpOyluPXUoTXIociksMTcpLCFHYShuKSYmeWYobGYodWYoY2YoaGYobmV3IENoLGIuTWF0aC5tYXgoMSx1KFEobiwoVGUoKSxtOXQpKSwxOSkuYSkpLDEpLHUodHIodixuLmMuaSksMTIxKSksdSh0cih2LG4uZC5pKSwxMjEpKSk7cmV0dXJuIGV9ZnVuY3Rpb24gcmxlKCl7cmxlPVosWW1lPWJpKG5ldyBWcywoV2EoKSxxYyksKHJvKCksdVR0KSksaV90PWJpKG5ldyBWcyxjdSxFViksWG1lPUt1KGJpKG5ldyBWcyxjdSxEViksSW8sTVYpLFdtZT1LdShiaShiaShuZXcgVnMsY3UsaVR0KSxxYyxzVHQpLElvLGFUdCksUW1lPXV2KHV2KFZSKEt1KGJpKG5ldyBWcyxEZCxGViksSW8sUFYpLHFjKSxPViksTlYpLEttZT1LdShuZXcgVnMsSW8sbFR0KSxHbWU9S3UoYmkoYmkoYmkobmV3IFZzLGdiLENWKSxxYyxTVikscWMsdTcpLElvLF9WKSxVbWU9S3UoYmkoYmkobmV3IFZzLHFjLHU3KSxxYyxrViksSW8seFYpfWZ1bmN0aW9uIHFtbih0LGUsbixyLHMsbyl7dmFyIGgsZCx2LGssQyxNLGo7Zm9yKGs9dnJlKGUpLXZyZSh0KSxoPVdhZShlLGspLHY9aXUoMCwwLDApO2s+PTAmJihkPUgxbih0LGgpLCEoZCYmKGs8MjI/di5sfD0xPDxrOms8NDQ/di5tfD0xPDxrLTIyOnYuaHw9MTw8ay00NCx0Lmw9PTAmJnQubT09MCYmdC5oPT0wKSkpOylDPWgubSxNPWguaCxqPWgubCxoLmg9TT4+PjEsaC5tPUM+Pj4xfChNJjEpPDwyMSxoLmw9aj4+PjF8KEMmMSk8PDIxLC0taztyZXR1cm4gbiYmQWl0KHYpLG8mJihyPyhoYj1yRSh0KSxzJiYoaGI9dHJlKGhiLChxOCgpLGFFdCkpKSk6aGI9aXUodC5sLHQubSx0LmgpKSx2fWZ1bmN0aW9uIEhtbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNO2ZvcihrPXQuZVtlLmMucF1bZS5wXSsxLHY9ZS5jLmEuYy5sZW5ndGgrMSxkPW5ldyBTKHQuYSk7ZC5hPGQuYy5jLmxlbmd0aDspe2ZvcihoPXUoSihkKSwxMSksTT0wLG89MCxzPXpwKEQxKGx0KGN0KGoxLDEpLERlLDIwLDAsW25ldyBRcyhoKSxuZXcgVHIoaCldKSkpO3pyKHMpOylyPXUoTXIocyksMTEpLHIuaS5jPT1lLmMmJihNKz1EUWUodCxyLmkpKzEsKytvKTtuPU0vbyxDPWguaixDPT0odmUoKSxIbik/bjxrP3QuZltoLnBdPXQuYy1uOnQuZltoLnBdPXQuYisodi1uKTpDPT1CbiYmKG48az90LmZbaC5wXT10LmIrbjp0LmZbaC5wXT10LmMtKHYtbikpfX1mdW5jdGlvbiBxbCh0LGUsbil7dmFyIHIscyxvLGgsZDtpZih0PT1udWxsKXRocm93IGl0KG5ldyBsZChfdSkpO2ZvcihvPXQubGVuZ3RoLGg9bz4wJiYoUnIoMCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KDApPT00NXx8KFJyKDAsdC5sZW5ndGgpLHQuY2hhckNvZGVBdCgwKT09NDMpKT8xOjAscj1oO3I8bztyKyspaWYoV2llKChScihyLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQocikpKT09LTEpdGhyb3cgaXQobmV3IGxkKHl2K3QrJyInKSk7aWYoZD1wYXJzZUludCh0LDEwKSxzPWQ8ZSxpc05hTihkKSl0aHJvdyBpdChuZXcgbGQoeXYrdCsnIicpKTtpZihzfHxkPm4pdGhyb3cgaXQobmV3IGxkKHl2K3QrJyInKSk7cmV0dXJuIGR9ZnVuY3Rpb24gVm1uKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihoPW5ldyBaaSxvPW5ldyBTKHQuYSk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTEyKSxvTShzLHMuZi5jLmxlbmd0aCksVEMocyxzLmsuYy5sZW5ndGgpLHMuaT09MCYmKHMubz0wLGZzKGgscyxoLmMuYixoLmMpKTtmb3IoO2guYiE9MDspZm9yKHM9dShoLmI9PTA/bnVsbDooWm4oaC5iIT0wKSxsaChoLGguYS5hKSksMTEyKSxyPXMubysxLG49bmV3IFMocy5mKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMjkpLGQ9ZS5hLGFSKGQsYi5NYXRoLm1heChkLm8scikpLFRDKGQsZC5pLTEpLGQuaT09MCYmZnMoaCxkLGguYy5iLGguYyl9ZnVuY3Rpb24gR21uKHQpe3ZhciBlLG4scixzLG8saCxkLHY7Zm9yKGg9bmV3IFModCk7aC5hPGguYy5jLmxlbmd0aDspe2ZvcihvPXUoSihoKSw3OSkscj1Ebyh1KEF0KCghby5iJiYoby5iPW5ldyBDbihicixvLDQsNykpLG8uYiksMCksODIpKSxkPXIuaSx2PXIuaixzPXUoQXQoKCFvLmEmJihvLmE9bmV3IGZlKEppLG8sNiw2KSksby5hKSwwKSwyMDIpLHZqKHMscy5qK2Qscy5rK3YpLHdqKHMscy5iK2Qscy5jK3YpLG49bmV3IG5yKCghcy5hJiYocy5hPW5ldyBBcyhHaCxzLDUpKSxzLmEpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksNDY5KSx1MnQoZSxlLmErZCxlLmIrdik7ZHl0KHUocWUobywodWkoKSxhNSkpLDc0KSxkLHYpfX1mdW5jdGlvbiBNRSh0KXt2YXIgZTtzd2l0Y2godCl7Y2FzZSAxMDA6cmV0dXJuIFM0KG9TLCEwKTtjYXNlIDY4OnJldHVybiBTNChvUywhMSk7Y2FzZSAxMTk6cmV0dXJuIFM0KHZ1dCwhMCk7Y2FzZSA4NzpyZXR1cm4gUzQodnV0LCExKTtjYXNlIDExNTpyZXR1cm4gUzQobXV0LCEwKTtjYXNlIDgzOnJldHVybiBTNChtdXQsITEpO2Nhc2UgOTk6cmV0dXJuIFM0KHl1dCwhMCk7Y2FzZSA2NzpyZXR1cm4gUzQoeXV0LCExKTtjYXNlIDEwNTpyZXR1cm4gUzQoeHV0LCEwKTtjYXNlIDczOnJldHVybiBTNCh4dXQsITEpO2RlZmF1bHQ6dGhyb3cgaXQobmV3IFZvKChlPXQsd2dlK2UudG9TdHJpbmcoMTYpKSkpfX1mdW5jdGlvbiBVbW4odCl7dmFyIGUsbixyLHMsbztzd2l0Y2gocz11KE5lKHQuYSwwKSwxMCksZT1uZXcgWTAodCksbGUodC5hLGUpLGUuby5hPWIuTWF0aC5tYXgoMSxzLm8uYSksZS5vLmI9Yi5NYXRoLm1heCgxLHMuby5iKSxlLm4uYT1zLm4uYSxlLm4uYj1zLm4uYix1KFEocywoYWUoKSxvYykpLDYxKS5nKXtjYXNlIDQ6ZS5uLmErPTI7YnJlYWs7Y2FzZSAxOmUubi5iKz0yO2JyZWFrO2Nhc2UgMjplLm4uYS09MjticmVhaztjYXNlIDM6ZS5uLmItPTJ9cmV0dXJuIHI9bmV3IE1jLFVvKHIsZSksbj1uZXcgVncsbz11KE5lKHMuaiwwKSwxMSksT2EobixvKSxvYShuLHIpLExpKEdmKHIubiksby5uKSxMaShHZihyLmEpLG8uYSksZX1mdW5jdGlvbiBpbGUodCxlLG4scixzKXtuJiYoIXJ8fCh0LmMtdC5iJnQuYS5sZW5ndGgtMSk+MSkmJmU9PTEmJnUodC5hW3QuYl0sMTApLms9PShWbigpLExsKT9wNih1KHQuYVt0LmJdLDEwKSwoemwoKSxmMCkpOnImJighbnx8KHQuYy10LmImdC5hLmxlbmd0aC0xKT4xKSYmZT09MSYmdSh0LmFbdC5jLTEmdC5hLmxlbmd0aC0xXSwxMCkuaz09KFZuKCksTGwpP3A2KHUodC5hW3QuYy0xJnQuYS5sZW5ndGgtMV0sMTApLCh6bCgpLGtiKSk6KHQuYy10LmImdC5hLmxlbmd0aC0xKT09Mj8ocDYodShROSh0KSwxMCksKHpsKCksZjApKSxwNih1KFE5KHQpLDEwKSxrYikpOlIybih0LHMpLGxtdCh0KX1mdW5jdGlvbiBXbW4odCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKG89MCxzPW5ldyBucigoIXQuYSYmKHQuYT1uZXcgZmUocnMsdCwxMCwxMSkpLHQuYSkpO3MuZSE9cy5pLmdjKCk7KXI9dShkcihzKSwzMyksaD0iIiwoIXIubiYmKHIubj1uZXcgZmUocW8sciwxLDcpKSxyLm4pLmk9PTB8fChoPXUoQXQoKCFyLm4mJihyLm49bmV3IGZlKHFvLHIsMSw3KSksci5uKSwwKSwxMzcpLmEpLGQ9bmV3IERpdChvKyssZSxoKSxNbyhkLHIpLEp0KGQsKGZjKCkscVMpLHIpLGQuZS5iPXIuaityLmYvMixkLmYuYT1iLk1hdGgubWF4KHIuZywxKSxkLmUuYT1yLmkrci5nLzIsZC5mLmI9Yi5NYXRoLm1heChyLmYsMSkscmkoZS5iLGQpLGF1KG4uZixyLGQpfWZ1bmN0aW9uIFltbih0KXt2YXIgZSxuLHIscyxvO3I9dShRKHQsKGFlKCksX2kpKSwzMyksbz11KHFlKHIsKFRlKCksJDIpKSwxNzQpLkhjKChBbCgpLEsyKSksdC5lfHwocz11KFEodCxWYyksMjEpLGU9bmV3ICRlKHQuZi5hK3QuZC5iK3QuZC5jLHQuZi5iK3QuZC5kK3QuZC5hKSxzLkhjKChvbygpLHZoKSk/KHdvKHIsY3MsKHVhKCksR2MpKSx3dihyLGUuYSxlLmIsITEsITApKTpqZShSZShxZShyLHVodCkpKXx8d3YocixlLmEsZS5iLCEwLCEwKSksbz93byhyLCQyLHVuKEsyKSk6d28ociwkMiwobj11KFZmKHJBKSw5KSxuZXcgc2gobix1KGZmKG4sbi5sZW5ndGgpLDkpLDApKSl9ZnVuY3Rpb24gcnh0KHQsZSxuKXt2YXIgcixzLG8saDtpZihlWzBdPj10Lmxlbmd0aClyZXR1cm4gbi5vPTAsITA7c3dpdGNoKHdhKHQsZVswXSkpe2Nhc2UgNDM6cz0xO2JyZWFrO2Nhc2UgNDU6cz0tMTticmVhaztkZWZhdWx0OnJldHVybiBuLm89MCwhMH1pZigrK2VbMF0sbz1lWzBdLGg9Z3EodCxlKSxoPT0wJiZlWzBdPT1vKXJldHVybiExO2lmKGVbMF08dC5sZW5ndGgmJndhKHQsZVswXSk9PTU4KXtpZihyPWgqNjAsKytlWzBdLG89ZVswXSxoPWdxKHQsZSksaD09MCYmZVswXT09bylyZXR1cm4hMTtyKz1ofWVsc2Ugcj1oLHI8MjQmJmVbMF0tbzw9Mj9yKj02MDpyPXIlMTAwKyhyLzEwMHwwKSo2MDtyZXR1cm4gcio9cyxuLm89LXIsITB9ZnVuY3Rpb24gS21uKHQpe3ZhciBlLG4scixzLG8saCxkLHYsaztmb3IoaD1uZXcgaGUscj1uZXcgYXIobHIoRHModC5iKS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KE1yKHIpLDE3KSxHYShuKSYmbGUoaCxuZXcgR0p0KG4sTXRlKHQsbi5jKSxNdGUodCxuLmQpKSk7Zm9yKGs9KG89bmV3IHYxKHQuZSkuYS52YygpLktjKCksbmV3IG0xKG8pKTtrLmEuT2IoKTspZD0oZT11KGsuYS5QYigpLDQyKSx1KGUuZGQoKSwxMTMpKSxkLmQucD0wO2Zvcih2PShzPW5ldyB2MSh0LmUpLmEudmMoKS5LYygpLG5ldyBtMShzKSk7di5hLk9iKCk7KWQ9KGU9dSh2LmEuUGIoKSw0MiksdShlLmRkKCksMTEzKSksZC5kLnA9PTAmJmxlKHQuZCxBbW4odCxkKSl9ZnVuY3Rpb24gWG1uKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihvPVQxKHQpLHM9bmV3IG5yKCghdC5lJiYodC5lPW5ldyBDbihZcyx0LDcsNCkpLHQuZSkpO3MuZSE9cy5pLmdjKCk7KWlmKHI9dShkcihzKSw3OSksZD1Ebyh1KEF0KCghci5jJiYoci5jPW5ldyBDbihicixyLDUsOCkpLHIuYyksMCksODIpKSwhZXkoZCxvKSlyZXR1cm4hMDtmb3Iobj1uZXcgbnIoKCF0LmQmJih0LmQ9bmV3IENuKFlzLHQsOCw1KSksdC5kKSk7bi5lIT1uLmkuZ2MoKTspaWYoZT11KGRyKG4pLDc5KSxoPURvKHUoQXQoKCFlLmImJihlLmI9bmV3IENuKGJyLGUsNCw3KSksZS5iKSwwKSw4MikpLCFleShoLG8pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFFtbih0KXt2YXIgZSxuLHIscyxvLGgsZCx2O2Zvcih2PW5ldyBQdSxlPWVpKHQsMCksZD1udWxsLG49dSh0aShlKSw4KSxzPXUodGkoZSksOCk7ZS5iIT1lLmQuYzspZD1uLG49cyxzPXUodGkoZSksOCksbz1FZWUoaWEobmV3ICRlKGQuYSxkLmIpLG4pKSxoPUVlZShpYShuZXcgJGUocy5hLHMuYiksbikpLHI9MTAscj1iLk1hdGgubWluKHIsYi5NYXRoLmFicyhvLmErby5iKS8yKSxyPWIuTWF0aC5taW4ocixiLk1hdGguYWJzKGguYStoLmIpLzIpLG8uYT1KTShvLmEpKnIsby5iPUpNKG8uYikqcixoLmE9Sk0oaC5hKSpyLGguYj1KTShoLmIpKnIscmkodixMaShvLG4pKSxyaSh2LExpKGgsbikpO3JldHVybiB2fWZ1bmN0aW9uIEhsKHQsZSxuLHIpe3ZhciBzLG8saCxkLHY7cmV0dXJuIGg9dC5laCgpLHY9dC5aZygpLHM9bnVsbCx2P2UmJiEod2F0KHQsZSxuKS5CYiZLYSk/KHI9QmEodi5WaygpLHQsciksdC51aChudWxsKSxzPWUuZmgoKSk6dj1udWxsOihoJiYodj1oLmZoKCkpLGUmJihzPWUuZmgoKSkpLHYhPXMmJnYmJnYuWmsodCksZD10LlZnKCksdC5SZyhlLG4pLHYhPXMmJnMmJnMuWWsodCksdC5MZygpJiZ0Lk1nKCkmJihoJiZkPj0wJiZkIT1uJiYobz1uZXcgSnModCwxLGQsaCxudWxsKSxyP3IuRWkobyk6cj1vKSxuPj0wJiYobz1uZXcgSnModCwxLG4sZD09bj9oOm51bGwsZSkscj9yLkVpKG8pOnI9bykpLHJ9ZnVuY3Rpb24gc2xlKHQpe3ZhciBlLG4scjtpZih0LmI9PW51bGwpe2lmKHI9bmV3IEFnLHQuaSE9bnVsbCYmKGdvKHIsdC5pKSxyLmErPSI6IiksdC5mJjI1Nil7Zm9yKHQuZiYyNTYmJnQuYSE9bnVsbCYmKGxybih0LmkpfHwoci5hKz0iLy8iKSxnbyhyLHQuYSkpLHQuZCE9bnVsbCYmKHIuYSs9Ii8iLGdvKHIsdC5kKSksdC5mJjE2JiYoci5hKz0iLyIpLGU9MCxuPXQuai5sZW5ndGg7ZTxuO2UrKyllIT0wJiYoci5hKz0iLyIpLGdvKHIsdC5qW2VdKTt0LmchPW51bGwmJihyLmErPSI/IixnbyhyLHQuZykpfWVsc2UgZ28ocix0LmEpO3QuZSE9bnVsbCYmKHIuYSs9IiMiLGdvKHIsdC5lKSksdC5iPXIuYX1yZXR1cm4gdC5ifWZ1bmN0aW9uIFptbih0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3Iocz1uZXcgUyhlLmEpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDEwKSxvPVEociwoYWUoKSxfaSkpLF90KG8sMTEpJiYoaD11KG8sMTEpLGQ9VGxlKGUscixoLm8uYSxoLm8uYiksaC5uLmE9ZC5hLGgubi5iPWQuYixCcyhoLHUoUShyLG9jKSw2MSkpKTtuPW5ldyAkZShlLmYuYStlLmQuYitlLmQuYyxlLmYuYitlLmQuZCtlLmQuYSksdShRKGUsKGFlKCksVmMpKSwyMSkuSGMoKG9vKCksdmgpKT8oSnQodCwoVGUoKSxjcyksKHVhKCksR2MpKSx1KFEoTmEodCksVmMpLDIxKS5GYyh5Nyksb2hlKHQsbiwhMSkpOm9oZSh0LG4sITApfWZ1bmN0aW9uIEptbih0LGUsbil7dmFyIHIscyxvLGgsZCx2O2lmKHZyKG4sIk1pbmltaXplIENyb3NzaW5ncyAiK3QuYSwxKSxyPWUuYi5jLmxlbmd0aD09MHx8IXFDKFJpKG5ldyBUbihudWxsLG5ldyBfbihlLmIsMTYpKSxuZXcgWnQobmV3IERrKSkpLnNkKChRYigpLG83KSksdj1lLmIuYy5sZW5ndGg9PTEmJnUoTmUoZS5iLDApLDI5KS5hLmMubGVuZ3RoPT0xLG89VnQoUShlLChUZSgpLHF5KSkpPT09VnQoKEcwKCksc3ApKSxyfHx2JiYhbyl7b3Iobik7cmV0dXJufXM9S3duKHQsZSksaD0oZD11KFpmKHMsMCksMjE0KSxkLmMuUmYoKT9kLmMuTGYoKT9uZXcgTCR0KHQpOm5ldyBNJHQodCk6bmV3IEEkdCh0KSksWHVuKHMsaCksa2xuKHQpLG9yKG4pfWZ1bmN0aW9uIHR5bih0LGUsbixyKXt2YXIgcyxvLGgsZCx2O2lmKHY9QXIoX2EoaTAsWGQoQXIoX2EoZT09bnVsbD8wOkhpKGUpLHMwKSksMTUpKSkscz1BcihfYShpMCxYZChBcihfYShuPT1udWxsPzA6SGkobiksczApKSwxNSkpKSxkPVc5KHQsZSx2KSxoPVU5KHQsbixzKSxkJiZzPT1kLmEmJnBkKG4sZC5nKSlyZXR1cm4gbjtpZihoJiYhcil0aHJvdyBpdChuZXcgRm4oImtleSBhbHJlYWR5IHByZXNlbnQ6ICIrbikpO3JldHVybiBkJiZtNCh0LGQpLGgmJm00KHQsaCksbz1uZXcgbyQobixzLGUsdiksZkkodCxvLGgpLGgmJihoLmU9bnVsbCxoLmM9bnVsbCksZCYmKGQuZT1udWxsLGQuYz1udWxsKSxhYWUodCksZD9kLmc6bnVsbH1mdW5jdGlvbiBhbGUodCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKG89MDtvPGU7bysrKXtmb3Iocj0wLGQ9bysxO2Q8ZTtkKyspcj1QYShQYShfYShOcyh0W29dLGNvKSxOcyh0W2RdLGNvKSksTnMobltvK2RdLGNvKSksTnMoQXIociksY28pKSxuW28rZF09QXIocikscj1WbShyLDMyKTtuW28rZV09QXIocil9Zm9yKERjbihuLG4sZTw8MSkscj0wLHM9MCxoPTA7czxlOysrcyxoKyspcj1QYShQYShfYShOcyh0W3NdLGNvKSxOcyh0W3NdLGNvKSksTnMobltoXSxjbykpLE5zKEFyKHIpLGNvKSksbltoXT1BcihyKSxyPVZtKHIsMzIpLCsraCxyPVBhKHIsTnMobltoXSxjbykpLG5baF09QXIocikscj1WbShyLDMyKTtyZXR1cm4gbn1mdW5jdGlvbiBvbGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEM7aWYoIUY4KGUpKXtmb3Iodj1YdCh5ZShveShuLmMsKFRlKCksTFMpKSkpLGs9dShveShuLmMsUE8pLDE0MiksIWsmJihrPW5ldyBPQykscj1uLmEscz1udWxsLGQ9ZS5LYygpO2QuT2IoKTspaD11KGQuUGIoKSwxMSksQz0wLHM/KEM9dixDKz1zLm8uYik6Qz1rLmQsbz1Gdyh4TShuZXcgWGIsaCksdC5mKSxraSh0LmssaCxvKSx5ZihsZih1ZihjZihoZihuZXcgQ2gsMCkscHMoYi5NYXRoLmNlaWwoQykpKSxyKSxvKSkscz1oLHI9bzt5ZihsZih1ZihjZihoZihuZXcgQ2gsMCkscHMoYi5NYXRoLmNlaWwoay5hK3Muby5iKSkpLHIpLG4uZCkpfX1mdW5jdGlvbiBleW4odCxlLG4scixzLG8saCxkKXt2YXIgdixrLEMsTSxqLEg7cmV0dXJuIEg9ITEsaj1vLW4ucyxDPW4udC1lLmYrKGs9X18obixqLCExKSxrLmEpLHIuZytkPmo/ITE6KE09KHY9X18ocixqLCExKSx2LmEpLEMrZCtNPD1lLmImJih2RChuLG8tbi5zKSxuLmM9ITAsdkQocixvLW4ucyksdEkocixuLnMsbi50K24uZCtkKSxyLms9ITAscHl0KG4ucSxyKSxIPSEwLHMmJihheihlLHIpLHIuaj1lLHQuYy5sZW5ndGg+aCYmKHNJKChBbihoLHQuYy5sZW5ndGgpLHUodC5jW2hdLDIwMCkpLHIpLChBbihoLHQuYy5sZW5ndGgpLHUodC5jW2hdLDIwMCkpLmEuYy5sZW5ndGg9PTAmJkZnKHQsaCkpKSksSCl9ZnVuY3Rpb24gbnluKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKHZyKGUsIlBhcnRpdGlvbiBtaWRwcm9jZXNzaW5nIiwxKSxzPW5ldyBVdyxscyhSaShuZXcgVG4obnVsbCxuZXcgX24odC5hLDE2KSksbmV3IEtLKSxuZXcgbXcocykpLHMuZCE9MCl7Zm9yKGQ9dShCbChaUXQoKG89cy5pLG5ldyBUbihudWxsLChvfHwocy5pPW5ldyBLMyhzLHMuYykpKS5OYygpKSkpLGMyKG5ldyBrZSxuZXcgY2UsbmV3IFhuLGx0KGN0KGZsLDEpLG9lLDEzMiwwLFsoTzEoKSxVbCldKSkpLDE1KSxyPWQuS2MoKSxuPXUoci5QYigpLDE5KTtyLk9iKCk7KWg9dShyLlBiKCksMTkpLHN3bih1KEFpKHMsbiksMjEpLHUoQWkocyxoKSwyMSkpLG49aDtvcihlKX19ZnVuY3Rpb24gY2xlKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDO2lmKGUucD09MCl7Zm9yKGUucD0xLGg9bixofHwocz1uZXcgaGUsbz0ocj11KFZmKFhhKSw5KSxuZXcgc2gocix1KGZmKHIsci5sZW5ndGgpLDkpLDApKSxoPW5ldyBmYShzLG8pKSx1KGguYSwxNSkuRmMoZSksZS5rPT0oVm4oKSxrcykmJnUoaC5iLDIxKS5GYyh1KFEoZSwoYWUoKSxvYykpLDYxKSksdj1uZXcgUyhlLmopO3YuYTx2LmMuYy5sZW5ndGg7KWZvcihkPXUoSih2KSwxMSksQz16cChEMShsdChjdChqMSwxKSxEZSwyMCwwLFtuZXcgUXMoZCksbmV3IFRyKGQpXSkpKTt6cihDKTspaz11KE1yKEMpLDExKSxjbGUodCxrLmksaCk7cmV0dXJuIGh9cmV0dXJuIG51bGx9ZnVuY3Rpb24ga18odCxlKXt2YXIgbixyLHMsbyxoO2lmKHQuQWIpe2lmKHQuQWIpe2lmKGg9dC5BYi5pLGg+MCl7aWYocz11KHQuQWIuZywxOTM0KSxlPT1udWxsKXtmb3Iobz0wO288aDsrK28paWYobj1zW29dLG4uZD09bnVsbClyZXR1cm4gbn1lbHNlIGZvcihvPTA7bzxoOysrbylpZihuPXNbb10saG4oZSxuLmQpKXJldHVybiBufX1lbHNlIGlmKGU9PW51bGwpe2ZvcihyPW5ldyBucih0LkFiKTtyLmUhPXIuaS5nYygpOylpZihuPXUoZHIociksNTkwKSxuLmQ9PW51bGwpcmV0dXJuIG59ZWxzZSBmb3Iocj1uZXcgbnIodC5BYik7ci5lIT1yLmkuZ2MoKTspaWYobj11KGRyKHIpLDU5MCksaG4oZSxuLmQpKXJldHVybiBufXJldHVybiBudWxsfWZ1bmN0aW9uIHJ5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGs7aWYoaz1SZShRKGUsKGd2KCksX3llKSkpLGs9PW51bGx8fChPbihrKSxrKSl7Zm9yKExibih0LGUpLHM9bmV3IGhlLHY9ZWkoZS5iLDApO3YuYiE9di5kLmM7KWg9dSh0aSh2KSw4Niksbj1LNHQodCxoLG51bGwpLG4mJihNbyhuLGUpLHMuY1tzLmMubGVuZ3RoXT1uKTtpZih0LmE9bnVsbCx0LmI9bnVsbCxzLmMubGVuZ3RoPjEpZm9yKHI9bmV3IFMocyk7ci5hPHIuYy5jLmxlbmd0aDspZm9yKG49dShKKHIpLDEzNSksbz0wLGQ9ZWkobi5iLDApO2QuYiE9ZC5kLmM7KWg9dSh0aShkKSw4NiksaC5nPW8rKztyZXR1cm4gc31yZXR1cm4gQTEobHQoY3QoZzZuLDEpLGg2dCwxMzUsMCxbZV0pKX1mdW5jdGlvbiBpeW4odCxlLG4scixzKXt2YXIgbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0O0g9VXNuKHQsQ3l0KGUpLHMpLHV5dChILFIwKHMsQWQpKSxFPW51bGwsRz1zLEs9UjkoRyxIZGUpLHR0PW5ldyBkenQoSCksQ2duKHR0LmEsSyksZ3Q9UjkoRywiZW5kUG9pbnQiKSxNdD1uZXcgd3p0KEgpLFRnbihNdC5hLGd0KSxTdD1LdyhHLExIKSxSdD1uZXcgeXp0KEgpLGYwbihSdC5hLFN0KSxNPVIwKHMsQzh0KSxvPW5ldyBGR3QodCxIKSxCWmUoby5hLG8uYixNKSxqPVIwKHMsVDh0KSxoPW5ldyBOR3QodCxIKSxSWmUoaC5hLGguYixqKSxrPUt3KHMsUzh0KSxkPW5ldyBCR3QobixIKSxYMW4oZC5iLGQuYSxrKSxDPUt3KHMsXzh0KSx2PW5ldyBSR3QocixIKSxRMW4odi5iLHYuYSxDKX1mdW5jdGlvbiBpeHQodCxlLG4pe3ZhciByLHMsbyxoLGQ7c3dpdGNoKGQ9bnVsbCxlLmcpe2Nhc2UgMTpmb3Iocz1uZXcgUyh0LmopO3MuYTxzLmMuYy5sZW5ndGg7KWlmKHI9dShKKHMpLDExKSxqZShSZShRKHIsKGFlKCksVWx0KSkpKSlyZXR1cm4gcjtkPW5ldyBNYyxKdChkLChhZSgpLFVsdCksKE5uKCksITApKTticmVhaztjYXNlIDI6Zm9yKGg9bmV3IFModC5qKTtoLmE8aC5jLmMubGVuZ3RoOylpZihvPXUoSihoKSwxMSksamUoUmUoUShvLChhZSgpLFlsdCkpKSkpcmV0dXJuIG87ZD1uZXcgTWMsSnQoZCwoYWUoKSxZbHQpLChObigpLCEwKSl9cmV0dXJuIGQmJihVbyhkLHQpLEJzKGQsbiksUWZuKGQubix0Lm8sbikpLGR9ZnVuY3Rpb24gdWxlKHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihkPS0xLGg9bmV3IFppLHI9bmV3IEwxKHQuYik7R28oci5hKXx8R28oci5iKTspe2ZvcihuPXUoR28oci5hKT9KKHIuYSk6SihyLmIpLDE3KSxkPWIuTWF0aC5tYXgoZCxYdCh5ZShRKG4sKFRlKCksSmcpKSkpKSxuLmM9PXQ/bHMoUmkobmV3IFRuKG51bGwsbmV3IF9uKG4uYiwxNikpLG5ldyBfSyksbmV3IFBjKGgpKTpscyhSaShuZXcgVG4obnVsbCxuZXcgX24obi5iLDE2KSksbmV3IFNLKSxuZXcgWmEoaCkpLG89ZWkoaCwwKTtvLmIhPW8uZC5jOylzPXUodGkobyksNzApLFVzKHMsKGFlKCksQjYpKXx8SnQocyxCNixuKTtMcyhlLGgpLEFoKGgpfXJldHVybiBkfWZ1bmN0aW9uIHN5bih0LGUsbixyLHMpe3ZhciBvLGgsZCx2O289bmV3IFkwKHQpLEQwKG8sKFZuKCksSGMpKSxKdChvLChUZSgpLGNzKSwodWEoKSxHYykpLEp0KG8sKGFlKCksX2kpLGUuYy5pKSxoPW5ldyBNYyxKdChoLF9pLGUuYyksQnMoaCxzKSxVbyhoLG8pLEp0KGUuYyxKdSxvKSxkPW5ldyBZMCh0KSxEMChkLEhjKSxKdChkLGNzLEdjKSxKdChkLF9pLGUuZC5pKSx2PW5ldyBNYyxKdCh2LF9pLGUuZCksQnModixzKSxVbyh2LGQpLEp0KGUuZCxKdSxkKSxPYShlLGgpLG9hKGUsdiksS20oMCxuLmMubGVuZ3RoKSxYQyhuLmMsMCxvKSxyLmNbci5jLmxlbmd0aF09ZCxKdChvLEpWLHBlKDEpKSxKdChkLEpWLHBlKDEpKX1mdW5jdGlvbiBwdih0LGUsbixyLHMpe3ZhciBvLGgsZCx2LGs7ZD1zP3IuYjpyLmEsIUkwKHQuYSxyKSYmKGs9ZD5uLnMmJmQ8bi5jLHY9ITEsbi5lLmIhPTAmJm4uai5iIT0wJiYodj12fChiLk1hdGguYWJzKGQtWHQoeWUod250KG4uZSkpKSk8RWQmJmIuTWF0aC5hYnMoZC1YdCh5ZSh3bnQobi5qKSkpKTxFZCksdj12fChiLk1hdGguYWJzKGQtWHQoeWUoQWoobi5lKSkpKTxFZCYmYi5NYXRoLmFicyhkLVh0KHllKEFqKG4uaikpKSk8RWQpKSwoa3x8dikmJihoPXUoUShlLChUZSgpLFNvKSksNzQpLGh8fChoPW5ldyBQdSxKdChlLFNvLGgpKSxvPW5ldyB4byhyKSxmcyhoLG8saC5jLmIsaC5jKSxGcyh0LmEsbykpKX1mdW5jdGlvbiBheW4odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEM7aWYoZmJuKHQsZSxuLHIpKXJldHVybiEwO2ZvcihoPW5ldyBTKGUuZik7aC5hPGguYy5jLmxlbmd0aDspe3N3aXRjaChvPXUoSihoKSwzMjQpLGQ9ITEsdj10LmotZS5qK24saz12K2UubyxDPXQuay1lLmsrcixzPUMrZS5wLG8uYS5nKXtjYXNlIDA6ZD1OaXQodCx2K28uYi5hLDAsditvLmMuYSxDLTEpO2JyZWFrO2Nhc2UgMTpkPU5pdCh0LGssQytvLmIuYSx0Lm8tMSxDK28uYy5hKTticmVhaztjYXNlIDI6ZD1OaXQodCx2K28uYi5hLHMsditvLmMuYSx0LnAtMSk7YnJlYWs7ZGVmYXVsdDpkPU5pdCh0LDAsQytvLmIuYSx2LTEsQytvLmMuYSl9aWYoZClyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBveW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEM7Zm9yKGg9bmV3IFMoZS5iKTtoLmE8aC5jLmMubGVuZ3RoOylmb3Iobz11KEooaCksMjkpLGs9bmV3IFMoby5hKTtrLmE8ay5jLmMubGVuZ3RoOyl7Zm9yKHY9dShKKGspLDEwKSxDPW5ldyBoZSxkPTAscj1uZXcgYXIobHIoam8odikuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShNcihyKSwxNyksIShHYShuKXx8IUdhKG4pJiZuLmMuaS5jPT1uLmQuaS5jKSYmKHM9dShRKG4sKFRlKCksSDYpKSwxOSkuYSxzPmQmJihkPXMsQy5jPU50KFFuLERlLDEsMCw1LDEpKSxzPT1kJiZsZShDLG5ldyBmYShuLmMuaSxuKSkpO3duKCksWnMoQyx0LmMpLEhtKHQuYix2LnAsQyl9fWZ1bmN0aW9uIGN5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztmb3IoaD1uZXcgUyhlLmIpO2guYTxoLmMuYy5sZW5ndGg7KWZvcihvPXUoSihoKSwyOSksaz1uZXcgUyhvLmEpO2suYTxrLmMuYy5sZW5ndGg7KXtmb3Iodj11KEooayksMTApLEM9bmV3IGhlLGQ9MCxyPW5ldyBhcihscihEcyh2KS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KE1yKHIpLDE3KSwhKEdhKG4pfHwhR2EobikmJm4uYy5pLmM9PW4uZC5pLmMpJiYocz11KFEobiwoVGUoKSxINikpLDE5KS5hLHM+ZCYmKGQ9cyxDLmM9TnQoUW4sRGUsMSwwLDUsMSkpLHM9PWQmJmxlKEMsbmV3IGZhKG4uZC5pLG4pKSk7d24oKSxacyhDLHQuYyksSG0odC5mLHYucCxDKX19ZnVuY3Rpb24gbGxlKHQpe013KHQsbmV3IGsyKF93KEV3KEN3KFR3KG5ldyBrZyxUdiksIkVMSyBCb3giKSwiQWxnb3JpdGhtIGZvciBwYWNraW5nIG9mIHVuY29ubmVjdGVkIGJveGVzLCBpLmUuIGdyYXBocyB3aXRob3V0IGVkZ2VzLiIpLG5ldyBxWikpKSx4ZSh0LFR2LHh2LFBTdCkseGUodCxUdixDeSwxNSkseGUodCxUdixWSSxwZSgwKSkseGUodCxUdixDSCxJZShEU3QpKSx4ZSh0LFR2LEQ0LEllKGU0ZSkpLHhlKHQsVHYsVDYsSWUobjRlKSkseGUodCxUdixFNixjZGUpLHhlKHQsVHYsR0ksSWUoSVN0KSkseGUodCxUdixDNixJZShPU3QpKSx4ZSh0LFR2LGc4dCxJZShsZnQpKSx4ZSh0LFR2LG1ILEllKHQ0ZSkpfWZ1bmN0aW9uIGhsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztpZihzPXQuaSxoPXMuby5hLG89cy5vLmIsaDw9MCYmbzw9MClyZXR1cm4gdmUoKSxabztzd2l0Y2goaz10Lm4uYSxDPXQubi5iLGQ9dC5vLmEsbj10Lm8uYixlLmcpe2Nhc2UgMjpjYXNlIDE6aWYoazwwKXJldHVybiB2ZSgpLEJuO2lmKGsrZD5oKXJldHVybiB2ZSgpLEhuO2JyZWFrO2Nhc2UgNDpjYXNlIDM6aWYoQzwwKXJldHVybiB2ZSgpLFBuO2lmKEMrbj5vKXJldHVybiB2ZSgpLG1yfXJldHVybiB2PShrK2QvMikvaCxyPShDK24vMikvbyx2K3I8PTEmJnYtcjw9MD8odmUoKSxCbik6dityPj0xJiZ2LXI+PTA/KHZlKCksSG4pOnI8LjU/KHZlKCksUG4pOih2ZSgpLG1yKX1mdW5jdGlvbiB1eW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLO2ZvcihuPSExLEM9WHQoeWUoUShlLChUZSgpLCR2KSkpKSxHPXNiKkMscz1uZXcgUyhlLmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoSihzKSwyOSksaz1uZXcgUyhyLmEpLG89dShKKGspLDEwKSxNPWZ2dCh0LmFbby5wXSk7ay5hPGsuYy5jLmxlbmd0aDspZD11KEooayksMTApLGo9ZnZ0KHQuYVtkLnBdKSxNIT1qJiYoSD1XMyh0LmIsbyxkKSxoPW8ubi5iK28uby5iK28uZC5hK00uYStILHY9ZC5uLmItZC5kLmQrai5hLGg+ditHJiYoSz1NLmcrai5nLGouYT0oai5nKmouYStNLmcqTS5hKS9LLGouZz1LLE0uZj1qLG49ITApKSxvPWQsTT1qO3JldHVybiBufWZ1bmN0aW9uIGZsZSh0LGUsbixyLHMsbyxoKXt2YXIgZCx2LGssQyxNLGo7Zm9yKGo9bmV3IEZ4LGs9ZS5LYygpO2suT2IoKTspZm9yKGQ9dShrLlBiKCksODM5KSxNPW5ldyBTKGQud2YoKSk7TS5hPE0uYy5jLmxlbmd0aDspQz11KEooTSksMTgxKSxWdChDLldlKCh1aSgpLHBmdCkpKT09PVZ0KChNMSgpLEY3KSkmJihHdWUoaixDLCExLHIscyxvLGgpLGdfKHQsaikpO2Zvcih2PW4uS2MoKTt2Lk9iKCk7KWZvcihkPXUodi5QYigpLDgzOSksTT1uZXcgUyhkLndmKCkpO00uYTxNLmMuYy5sZW5ndGg7KUM9dShKKE0pLDE4MSksVnQoQy5XZSgodWkoKSxwZnQpKSk9PT1WdCgoTTEoKSxaeSkpJiYoR3VlKGosQywhMCxyLHMsbyxoKSxnXyh0LGopKX1mdW5jdGlvbiBseW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrO2ZvcihoPW5ldyBucigoIXQuYSYmKHQuYT1uZXcgZmUocnMsdCwxMCwxMSkpLHQuYSkpO2guZSE9aC5pLmdjKCk7KWZvcihvPXUoZHIoaCksMzMpLHM9bmV3IGFyKGxyKEswKG8pLmEuS2MoKSxuZXcgeikpO3pyKHMpOylyPXUoTXIocyksNzkpLCF3XyhyKSYmIXdfKHIpJiYhZnYocikmJih2PXUoZWMoTG8obi5mLG8pKSw4Niksaz11KHRyKG4sRG8odShBdCgoIXIuYyYmKHIuYz1uZXcgQ24oYnIsciw1LDgpKSxyLmMpLDApLDgyKSkpLDg2KSx2JiZrJiYoZD1uZXcgTnZ0KHYsayksSnQoZCwoZmMoKSxxUyksciksTW8oZCxyKSxyaSh2LmQsZCkscmkoay5iLGQpLHJpKGUuYSxkKSkpfWZ1bmN0aW9uIGh5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGs7Zm9yKHY9dSh1KEFpKHQucixlKSwyMSksODQpLktjKCk7di5PYigpOylkPXUodi5QYigpLDExMSkscz1kLmM/c0t0KGQuYyk6MCxzPjA/ZC5hPyhrPWQuYi5yZigpLmIscz5rJiYodC52fHxkLmMuZC5jLmxlbmd0aD09MT8oaD0ocy1rKS8yLGQuZC5kPWgsZC5kLmE9aCk6KG49dShOZShkLmMuZCwwKSwxODEpLnJmKCkuYixyPShuLWspLzIsZC5kLmQ9Yi5NYXRoLm1heCgwLHIpLGQuZC5hPXMtci1rKSkpOmQuZC5hPXQudCtzOlM5KHQudSkmJihvPUk0dChkLmIpLG8uZDwwJiYoZC5kLmQ9LW8uZCksby5kK28uYT5kLmIucmYoKS5iJiYoZC5kLmE9by5kK28uYS1kLmIucmYoKS5iKSl9ZnVuY3Rpb24gZnluKHQsZSl7dmFyIG47c3dpdGNoKF9EKHQpKXtjYXNlIDY6cmV0dXJuIHJhKGUpO2Nhc2UgNzpyZXR1cm4gQm0oZSk7Y2FzZSA4OnJldHVybiBObShlKTtjYXNlIDM6cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJihuPV9EKGUpLCEobj49MTQmJm48PTE2KSk7Y2FzZSAxMTpyZXR1cm4gZSE9bnVsbCYmdHlwZW9mIGU9PT1HYXQ7Y2FzZSAxMjpyZXR1cm4gZSE9bnVsbCYmKHR5cGVvZiBlPT09TUl8fHR5cGVvZiBlPT1HYXQpO2Nhc2UgMDpyZXR1cm4gZ3N0KGUsdC5fX2VsZW1lbnRUeXBlSWQkKTtjYXNlIDI6cmV0dXJuIFpudChlKSYmZS5pbSE9PUV0O2Nhc2UgMTpyZXR1cm4gWm50KGUpJiZlLmltIT09RXR8fGdzdChlLHQuX19lbGVtZW50VHlwZUlkJCk7ZGVmYXVsdDpyZXR1cm4hMH19ZnVuY3Rpb24gZGxlKHQsZSl7dmFyIG4scixzLG87cmV0dXJuIHI9Yi5NYXRoLm1pbihiLk1hdGguYWJzKHQuYy0oZS5jK2UuYikpLGIuTWF0aC5hYnModC5jK3QuYi1lLmMpKSxvPWIuTWF0aC5taW4oYi5NYXRoLmFicyh0LmQtKGUuZCtlLmEpKSxiLk1hdGguYWJzKHQuZCt0LmEtZS5kKSksbj1iLk1hdGguYWJzKHQuYyt0LmIvMi0oZS5jK2UuYi8yKSksbj50LmIvMitlLmIvMnx8KHM9Yi5NYXRoLmFicyh0LmQrdC5hLzItKGUuZCtlLmEvMikpLHM+dC5hLzIrZS5hLzIpPzE6bj09MCYmcz09MD8wOm49PTA/by9zKzE6cz09MD9yL24rMTpiLk1hdGgubWluKHIvbixvL3MpKzF9ZnVuY3Rpb24gZ2xlKHQsZSl7dmFyIG4scixzLG8saCxkO3JldHVybiBzPUptdCh0KSxkPUptdChlKSxzPT1kP3QuZT09ZS5lJiZ0LmE8NTQmJmUuYTw1ND90LmY8ZS5mPy0xOnQuZj5lLmY/MTowOihyPXQuZS1lLmUsbj0odC5kPjA/dC5kOmIuTWF0aC5mbG9vcigodC5hLTEpKkNmZSkrMSktKGUuZD4wP2UuZDpiLk1hdGguZmxvb3IoKGUuYS0xKSpDZmUpKzEpLG4+cisxP3M6bjxyLTE/LXM6KG89KCF0LmMmJih0LmM9VkQodC5mKSksdC5jKSxoPSghZS5jJiYoZS5jPVZEKGUuZikpLGUuYykscjwwP289ZTQobyxObGUoLXIpKTpyPjAmJihoPWU0KGgsTmxlKHIpKSksVWllKG8saCkpKTpzPGQ/LTE6MX1mdW5jdGlvbiBkeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3Iobz0wLGQ9MCx2PTAscz1uZXcgUyh0LmYuZSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTQ0KSxlIT1yJiYoaD10LmlbZS5iXVtyLmJdLG8rPWgsbj1XcChlLmQsci5kKSxuPjAmJnQuZCE9KHE5KCksc2x0KSYmKGQrPWgqKHIuZC5hK3QuYVtlLmJdW3IuYl0qKGUuZC5hLXIuZC5hKS9uKSksbj4wJiZ0LmQhPShxOSgpLHJsdCkmJih2Kz1oKihyLmQuYit0LmFbZS5iXVtyLmJdKihlLmQuYi1yLmQuYikvbikpKTtzd2l0Y2godC5kLmcpe2Nhc2UgMTpyZXR1cm4gbmV3ICRlKGQvbyxlLmQuYik7Y2FzZSAyOnJldHVybiBuZXcgJGUoZS5kLmEsdi9vKTtkZWZhdWx0OnJldHVybiBuZXcgJGUoZC9vLHYvbyl9fWZ1bmN0aW9uIHBsZSh0LGUpe29FKCk7dmFyIG4scixzLG8saDtpZihoPXUoUSh0LmksKFRlKCksY3MpKSw5OCksbz10LmouZy1lLmouZyxvIT0wfHwhKGg9PSh1YSgpLFkyKXx8aD09ZzB8fGg9PUdjKSlyZXR1cm4gMDtpZihoPT0odWEoKSxZMikmJihuPXUoUSh0LHRwKSwxOSkscj11KFEoZSx0cCksMTkpLG4mJnImJihzPW4uYS1yLmEscyE9MCkpKXJldHVybiBzO3N3aXRjaCh0LmouZyl7Y2FzZSAxOnJldHVybiBNcyh0Lm4uYSxlLm4uYSk7Y2FzZSAyOnJldHVybiBNcyh0Lm4uYixlLm4uYik7Y2FzZSAzOnJldHVybiBNcyhlLm4uYSx0Lm4uYSk7Y2FzZSA0OnJldHVybiBNcyhlLm4uYix0Lm4uYik7ZGVmYXVsdDp0aHJvdyBpdChuZXcgTm8oRTZ0KSl9fWZ1bmN0aW9uIGJsZSh0KXt2YXIgZSxuLHIscyxvLGg7Zm9yKG49KCF0LmEmJih0LmE9bmV3IEFzKEdoLHQsNSkpLHQuYSkuaSsyLGg9bmV3IFhjKG4pLGxlKGgsbmV3ICRlKHQuaix0LmspKSxscyhuZXcgVG4obnVsbCwoIXQuYSYmKHQuYT1uZXcgQXMoR2gsdCw1KSksbmV3IF9uKHQuYSwxNikpKSxuZXcgbHp0KGgpKSxsZShoLG5ldyAkZSh0LmIsdC5jKSksZT0xO2U8aC5jLmxlbmd0aC0xOylyPShBbihlLTEsaC5jLmxlbmd0aCksdShoLmNbZS0xXSw4KSkscz0oQW4oZSxoLmMubGVuZ3RoKSx1KGguY1tlXSw4KSksbz0oQW4oZSsxLGguYy5sZW5ndGgpLHUoaC5jW2UrMV0sOCkpLHIuYT09cy5hJiZzLmE9PW8uYXx8ci5iPT1zLmImJnMuYj09by5iP0ZnKGgsZSk6KytlO3JldHVybiBofWZ1bmN0aW9uIHdsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2O2ZvcihuPW1XdChPVnQoRFZ0KElWdChuZXcganB0LGUpLG5ldyB2JChlLmUpKSxkMmUpLHQuYSksZS5qLmMubGVuZ3RoPT0wfHxQdGUodShOZShlLmosMCksNTcpLmEsbiksdj1uZXcgSnR0LGtpKHQuZSxuLHYpLGg9bmV3IEhzLGQ9bmV3IEhzLG89bmV3IFMoZS5rKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxNyksRnMoaCxzLmMpLEZzKGQscy5kKTtyPWguYS5nYygpLWQuYS5nYygpLHI8MD8oJEQodiwhMCwoYW8oKSx6aCkpLCREKHYsITEsQ2YpKTpyPjAmJigkRCh2LCExLChhbygpLHpoKSksJEQodiwhMCxDZikpLHh1KGUuZyxuZXcgb0d0KHQsbikpLGtpKHQuZyxlLG4pfWZ1bmN0aW9uIHZsZSgpe3ZsZT1aO3ZhciB0O2ZvcihnRXQ9bHQoY3QoQ3IsMSksWHIsMjUsMTUsWy0xLC0xLDMwLDE5LDE1LDEzLDExLDExLDEwLDksOSw4LDgsOCw4LDcsNyw3LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDVdKSxGdXQ9TnQoQ3IsWHIsMjUsMzcsMTUsMSksJGdlPWx0KGN0KENyLDEpLFhyLDI1LDE1LFstMSwtMSw2Myw0MCwzMiwyOCwyNSwyMywyMSwyMCwxOSwxOSwxOCwxOCwxNywxNywxNiwxNiwxNiwxNSwxNSwxNSwxNSwxNCwxNCwxNCwxNCwxNCwxNCwxMywxMywxMywxMywxMywxMywxMywxM10pLHBFdD1OdChPYix3b3QsMjUsMzcsMTQsMSksdD0yO3Q8PTM2O3QrKylGdXRbdF09cHMoYi5NYXRoLnBvdyh0LGdFdFt0XSkpLHBFdFt0XT1hSShxcSxGdXRbdF0pfWZ1bmN0aW9uIGd5bih0KXt2YXIgZTtpZigoIXQuYSYmKHQuYT1uZXcgZmUoSmksdCw2LDYpKSx0LmEpLmkhPTEpdGhyb3cgaXQobmV3IEZuKFNkZSsoIXQuYSYmKHQuYT1uZXcgZmUoSmksdCw2LDYpKSx0LmEpLmkpKTtyZXR1cm4gZT1uZXcgUHUsUkQodShBdCgoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLDApLDgyKSkmJlVhKGUsdGZlKHQsUkQodShBdCgoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLDApLDgyKSksITEpKSxSRCh1KEF0KCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYyksMCksODIpKSYmVWEoZSx0ZmUodCxSRCh1KEF0KCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYyksMCksODIpKSwhMCkpLGV9ZnVuY3Rpb24gbWxlKHQsZSl7dmFyIG4scixzLG8saDtmb3IoZS5kP3M9dC5hLmM9PShiZCgpLHp2KT9qbyhlLmIpOkRzKGUuYik6cz10LmEuYz09KGJkKCksZXApP2pvKGUuYik6RHMoZS5iKSxvPSExLHI9bmV3IGFyKGxyKHMuYS5LYygpLG5ldyB6KSk7enIocik7KWlmKG49dShNcihyKSwxNyksaD1qZSh0LmEuZlt0LmEuZ1tlLmIucF0ucF0pLCEoIWgmJiFHYShuKSYmbi5jLmkuYz09bi5kLmkuYykmJiEoamUodC5hLm5bdC5hLmdbZS5iLnBdLnBdKXx8amUodC5hLm5bdC5hLmdbZS5iLnBdLnBdKSkmJihvPSEwLEkwKHQuYix0LmEuZ1tUMW4obixlLmIpLnBdKSkpcmV0dXJuIGUuYz0hMCxlLmE9bixlO3JldHVybiBlLmM9byxlLmE9bnVsbCxlfWZ1bmN0aW9uIHB5bih0LGUsbixyLHMpe3ZhciBvLGgsZCx2LGssQyxNO2Zvcih3bigpLFpzKHQsbmV3IFhaKSxkPW5ldyBkYSh0LDApLE09bmV3IGhlLG89MDtkLmI8ZC5kLmdjKCk7KWg9KFpuKGQuYjxkLmQuZ2MoKSksdShkLmQuWGIoZC5jPWQuYisrKSwxNTcpKSxNLmMubGVuZ3RoIT0wJiZSdShoKSpFbChoKT5vKjI/KEM9bmV3IHJ6KE0pLGs9UnUoaCkvRWwoaCksdj16YXQoQyxlLG5ldyBDeCxuLHIscyxrKSxMaShHZihDLmUpLHYpLE0uYz1OdChRbixEZSwxLDAsNSwxKSxvPTAsTS5jW00uYy5sZW5ndGhdPUMsTS5jW00uYy5sZW5ndGhdPWgsbz1SdShDKSpFbChDKStSdShoKSpFbChoKSk6KE0uY1tNLmMubGVuZ3RoXT1oLG8rPVJ1KGgpKkVsKGgpKTtyZXR1cm4gTX1mdW5jdGlvbiBzeHQodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrO2lmKHI9bi5nYygpLHI9PTApcmV0dXJuITE7aWYodC5laigpKWlmKHY9dC5maigpLHkzdCh0LGUsbiksaD1yPT0xP3QuWmkoMyxudWxsLG4uS2MoKS5QYigpLGUsdik6dC5aaSg1LG51bGwsbixlLHYpLHQuYmooKSl7Zm9yKGQ9cjwxMDA/bnVsbDpuZXcgRHAociksbz1lK3Iscz1lO3M8bzsrK3Mpaz10Lk9pKHMpLGQ9dC5jaihrLGQpLGQ9ZDtkPyhkLkVpKGgpLGQuRmkoKSk6dC4kaShoKX1lbHNlIHQuJGkoaCk7ZWxzZSBpZih5M3QodCxlLG4pLHQuYmooKSl7Zm9yKGQ9cjwxMDA/bnVsbDpuZXcgRHAociksbz1lK3Iscz1lO3M8bzsrK3MpZD10LmNqKHQuT2kocyksZCk7ZCYmZC5GaSgpfXJldHVybiEwfWZ1bmN0aW9uIHlsZSh0LGUsbil7dmFyIHIscyxvLGgsZDtyZXR1cm4gdC5laigpPyhzPW51bGwsbz10LmZqKCkscj10LlppKDEsZD0oaD10LlVpKGUsdC5vaShlLG4pKSxoKSxuLGUsbyksdC5iaigpJiYhKHQubmkoKSYmZD95aShkLG4pOlZ0KGQpPT09VnQobikpJiYoZCYmKHM9dC5kaihkLHMpKSxzPXQuY2oobixzKSkscz8ocy5FaShyKSxzLkZpKCkpOnQuJGkociksZCk6KGQ9KGg9dC5VaShlLHQub2koZSxuKSksaCksdC5iaigpJiYhKHQubmkoKSYmZD95aShkLG4pOlZ0KGQpPT09VnQobikpJiYocz1udWxsLGQmJihzPXQuZGooZCxudWxsKSkscz10LmNqKG4scykscyYmcy5GaSgpKSxkKX1mdW5jdGlvbiBheHQodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEM7aWYodC5lPWUsdC5mPXUoUShlLChZcCgpLHdWKSksMjMwKSxaMG4oZSksdC5kPWIuTWF0aC5tYXgoZS5lLmMubGVuZ3RoKjE2K2UuYy5jLmxlbmd0aCwyNTYpLCFqZShSZShRKGUsKEpmKCksdjd0KSkpKSlmb3IoQz10LmUuZS5jLmxlbmd0aCx2PW5ldyBTKGUuZSk7di5hPHYuYy5jLmxlbmd0aDspZD11KEoodiksMTQ0KSxrPWQuZCxrLmE9Wnd0KHQuZikqQyxrLmI9Wnd0KHQuZikqQztmb3Iobj1lLmIsbz1uZXcgUyhlLmMpO28uYTxvLmMuYy5sZW5ndGg7KWlmKHM9dShKKG8pLDI4Mikscj11KFEocyxFN3QpLDE5KS5hLHI+MCl7Zm9yKGg9MDtoPHI7aCsrKWxlKG4sbmV3IGFYdChzKSk7TG9lKHMpfX1mdW5jdGlvbiBwNih0LGUpe3ZhciBuLHIscyxvLGgsZDtpZih0Lms9PShWbigpLExsKSYmKG49cUMoUmkodShRKHQsKGFlKCksTE8pKSwxNSkuT2MoKSxuZXcgWnQobmV3IExMKSkpLnNkKChRYigpLG83KSk/ZTooemwoKSxuUCksSnQodCxqNixuKSxuIT0oemwoKSxrYikpKWZvcihyPXUoUSh0LF9pKSwxNyksZD1YdCh5ZShRKHIsKFRlKCksSmcpKSkpLGg9MCxuPT1mMD9oPXQuby5iLWIuTWF0aC5jZWlsKGQvMik6bj09blAmJih0Lm8uYi09WHQoeWUoUShOYSh0KSxWNikpKSxoPSh0Lm8uYi1iLk1hdGguY2VpbChkKSkvMiksbz1uZXcgUyh0LmopO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDExKSxzLm4uYj1ofWZ1bmN0aW9uIG94dCgpe294dD1aLFRldCgpLGV4ZT1uZXcgakIsbHQoY3QoWjYsMiksZWUsMzY4LDAsW2x0KGN0KFo2LDEpLFdILDU5MiwwLFtuZXcgYk0ob2dlKV0pXSksbHQoY3QoWjYsMiksZWUsMzY4LDAsW2x0KGN0KFo2LDEpLFdILDU5MiwwLFtuZXcgYk0oWTh0KV0pXSksbHQoY3QoWjYsMiksZWUsMzY4LDAsW2x0KGN0KFo2LDEpLFdILDU5MiwwLFtuZXcgYk0oY2dlKV0pLGx0KGN0KFo2LDEpLFdILDU5MiwwLFtuZXcgYk0oWTh0KV0pXSksbmV3IFJwKCItMSIpLGx0KGN0KFo2LDIpLGVlLDM2OCwwLFtsdChjdChaNiwxKSxXSCw1OTIsMCxbbmV3IGJNKCJcXGMrIildKV0pLG5ldyBScCgiMCIpLG5ldyBScCgiMCIpLG5ldyBScCgiMSIpLG5ldyBScCgiMCIpLG5ldyBScChnZ2UpfWZ1bmN0aW9uIExxKHQpe3ZhciBlLG47cmV0dXJuIHQuYyYmdC5jLmtoKCkmJihuPXUodC5jLDQ5KSx0LmM9dShacCh0LG4pLDEzOCksdC5jIT1uJiYodC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsOSwyLG4sdC5jKSksX3QodC5DYiwzOTkpP3QuRGI+PjE2PT0tMTUmJnQuQ2IubmgoKSYmcml0KG5ldyBKcnQodC5DYiw5LDEzLG4sdC5jLEhnKGFsKHUodC5DYiw1OSkpLHQpKSk6X3QodC5DYiw4OCkmJnQuRGI+PjE2PT0tMjMmJnQuQ2IubmgoKSYmKGU9dC5jLF90KGUsODgpfHwoZT0oZG4oKSxLaCkpLF90KG4sODgpfHwobj0oZG4oKSxLaCkpLHJpdChuZXcgSnJ0KHQuQ2IsOSwxMCxuLGUsSGcoTGModSh0LkNiLDI2KSksdCkpKSkpKSx0LmN9ZnVuY3Rpb24gYnluKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE07Zm9yKHZyKGUsIkh5cGVybm9kZXMgcHJvY2Vzc2luZyIsMSkscz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoSihzKSwyOSksZD1uZXcgUyhyLmEpO2QuYTxkLmMuYy5sZW5ndGg7KWlmKGg9dShKKGQpLDEwKSxqZShSZShRKGgsKFRlKCksbEcpKSkpJiZoLmouYy5sZW5ndGg8PTIpe2ZvcihNPTAsQz0wLG49MCxvPTAsaz1uZXcgUyhoLmopO2suYTxrLmMuYy5sZW5ndGg7KXN3aXRjaCh2PXUoSihrKSwxMSksdi5qLmcpe2Nhc2UgMTorK007YnJlYWs7Y2FzZSAyOisrQzticmVhaztjYXNlIDM6KytuO2JyZWFrO2Nhc2UgNDorK299TT09MCYmbj09MCYmbXhuKHQsaCxvPD1DKX1vcihlKX1mdW5jdGlvbiB3eW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEM7Zm9yKHZyKGUsIkxheWVyIGNvbnN0cmFpbnQgZWRnZSByZXZlcnNhbCIsMSksaD1uZXcgUyh0LmIpO2guYTxoLmMuYy5sZW5ndGg7KXtmb3Iobz11KEooaCksMjkpLEM9LTEsbj1uZXcgaGUsaz1sRChvLmEpLHM9MDtzPGsubGVuZ3RoO3MrKylyPXUoUShrW3NdLChhZSgpLEIyKSksMzAzKSxDPT0tMT9yIT0ocTAoKSxZNCkmJihDPXMpOnI9PShxMCgpLFk0KSYmKEVvKGtbc10sbnVsbCksbHkoa1tzXSxDKyssbykpLHI9PShxMCgpLEY2KSYmbGUobixrW3NdKTtmb3Iodj1uZXcgUyhuKTt2LmE8di5jLmMubGVuZ3RoOylkPXUoSih2KSwxMCksRW8oZCxudWxsKSxFbyhkLG8pfW9yKGUpfWZ1bmN0aW9uIHZ5bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNO2Zvcih2cihuLCJIeXBlcmVkZ2UgbWVyZ2luZyIsMSksVWJuKHQsZSksdj1uZXcgZGEoZS5iLDApO3YuYjx2LmQuZ2MoKTspaWYoZD0oWm4odi5iPHYuZC5nYygpKSx1KHYuZC5YYih2LmM9di5iKyspLDI5KSksQz1kLmEsQy5jLmxlbmd0aCE9MClmb3Iocj1udWxsLHM9bnVsbCxvPW51bGwsaD1udWxsLGs9MDtrPEMuYy5sZW5ndGg7aysrKXI9KEFuKGssQy5jLmxlbmd0aCksdShDLmNba10sMTApKSxzPXIuayxzPT0oVm4oKSx0YSkmJmg9PXRhJiYoTT1mM24ocixvKSxNLmEmJih4dm4ocixvLE0uYixNLmMpLEFuKGssQy5jLmxlbmd0aCksd2J0KEMuYyxrLDEpLC0tayxyPW8scz1oKSksbz1yLGg9cztvcihuKX1mdW5jdGlvbiBteW4odCxlKXt2YXIgbixyLHM7cj11bCh0LmQsMSkhPTAsIWplKFJlKFEoZS5qLChhZSgpLE92KSkpKSYmIWplKFJlKFEoZS5qLFg0KSkpfHxWdChRKGUuaiwoVGUoKSx3YikpKT09PVZ0KChWMCgpLHZiKSk/ZS5jLlRmKGUuZSxyKTpyPWplKFJlKFEoZS5qLE92KSkpLHlJKHQsZSxyLCEwKSxqZShSZShRKGUuaixYNCkpKSYmSnQoZS5qLFg0LChObigpLCExKSksamUoUmUoUShlLmosT3YpKSkmJihKdChlLmosT3YsKE5uKCksITEpKSxKdChlLmosWDQsITApKSxuPVZ1ZSh0LGUpO2Rve2lmKGh5dCh0KSxuPT0wKXJldHVybiAwO3I9IXIscz1uLHlJKHQsZSxyLCExKSxuPVZ1ZSh0LGUpfXdoaWxlKHM+bik7cmV0dXJuIHN9ZnVuY3Rpb24geGxlKHQsZSl7dmFyIG4scixzO3I9dWwodC5kLDEpIT0wLCFqZShSZShRKGUuaiwoYWUoKSxPdikpKSkmJiFqZShSZShRKGUuaixYNCkpKXx8VnQoUShlLmosKFRlKCksd2IpKSk9PT1WdCgoVjAoKSx2YikpP2UuYy5UZihlLmUscik6cj1qZShSZShRKGUuaixPdikpKSx5SSh0LGUsciwhMCksamUoUmUoUShlLmosWDQpKSkmJkp0KGUuaixYNCwoTm4oKSwhMSkpLGplKFJlKFEoZS5qLE92KSkpJiYoSnQoZS5qLE92LChObigpLCExKSksSnQoZS5qLFg0LCEwKSksbj1Lc3QodCxlKTtkb3tpZihoeXQodCksbj09MClyZXR1cm4gMDtyPSFyLHM9bix5SSh0LGUsciwhMSksbj1Lc3QodCxlKX13aGlsZShzPm4pO3JldHVybiBzfWZ1bmN0aW9uIGtsZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHO2lmKGU9PW4pcmV0dXJuITA7aWYoZT1wNXQodCxlKSxuPXA1dCh0LG4pLHI9eHN0KGUpLHIpe2lmKEM9eHN0KG4pLEMhPXIpcmV0dXJuIEM/KHY9ci5EaigpLEc9Qy5EaigpLHY9PUcmJnYhPW51bGwpOiExO2lmKGg9KCFlLmQmJihlLmQ9bmV3IEFzKGhvLGUsMSkpLGUuZCksbz1oLmksaj0oIW4uZCYmKG4uZD1uZXcgQXMoaG8sbiwxKSksbi5kKSxvPT1qLmkpe2ZvcihrPTA7azxvOysraylpZihzPXUoQXQoaCxrKSw4NyksTT11KEF0KGosayksODcpLCFrbGUodCxzLE0pKXJldHVybiExfXJldHVybiEwfWVsc2UgcmV0dXJuIGQ9ZS5lLEg9bi5lLGQ9PUh9ZnVuY3Rpb24gRWxlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE07aWYoWDAodC5lLGUpKXtmb3IoTT1vdSh0LmUuVGcoKSxlKSxvPXUodC5nLDExOSksQz1udWxsLHY9LTEsZD0tMSxzPTAsaz0wO2s8dC5pOysrayloPW9ba10sTS5ybChoLmFrKCkpJiYocz09biYmKHY9aykscz09ciYmKGQ9ayxDPWguZGQoKSksKytzKTtpZih2PT0tMSl0aHJvdyBpdChuZXcgeW8oaXV0K24rRDIrcykpO2lmKGQ9PS0xKXRocm93IGl0KG5ldyB5byhzdXQrcitEMitzKSk7cmV0dXJuIHJfKHQsdixkKSx4bCh0LmUpJiZuOCh0LEdwKHQsNyxlLHBlKHIpLEMsbiwhMCkpLEN9ZWxzZSB0aHJvdyBpdChuZXcgRm4oIlRoZSBmZWF0dXJlIG11c3QgYmUgbWFueS12YWx1ZWQgdG8gc3VwcG9ydCBtb3ZlIikpfWZ1bmN0aW9uIFRsZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx2O3N3aXRjaCh2PW5ldyB4byhlLm4pLHYuYSs9ZS5vLmEvMix2LmIrPWUuby5iLzIsZD1YdCh5ZShRKGUsKFRlKCksVnkpKSkpLG89dC5mLGg9dC5kLHM9dC5jLHUoUShlLChhZSgpLG9jKSksNjEpLmcpe2Nhc2UgMTp2LmErPWguYitzLmEtbi8yLHYuYj0tci1kLGUubi5iPS0oaC5kK2Qrcy5iKTticmVhaztjYXNlIDI6di5hPW8uYStoLmIraC5jK2Qsdi5iKz1oLmQrcy5iLXIvMixlLm4uYT1vLmEraC5jK2Qtcy5hO2JyZWFrO2Nhc2UgMzp2LmErPWguYitzLmEtbi8yLHYuYj1vLmIraC5kK2guYStkLGUubi5iPW8uYitoLmErZC1zLmI7YnJlYWs7Y2FzZSA0OnYuYT0tbi1kLHYuYis9aC5kK3MuYi1yLzIsZS5uLmE9LShoLmIrZCtzLmEpfXJldHVybiB2fWZ1bmN0aW9uIENsZSh0KXt2YXIgZSxuLHIscyxvLGg7cmV0dXJuIHI9bmV3IGV5dCxNbyhyLHQpLFZ0KFEociwoVGUoKSxXbCkpKT09PVZ0KChhbygpLGgwKSkmJkp0KHIsV2wsUHoocikpLFEociwoJCQoKSxXUykpPT1udWxsJiYoaD11KCRhZSh0KSwxNjApLEp0KHIsV1MsZGooaC5XZShXUykpKSksSnQociwoYWUoKSxfaSksdCksSnQocixWYywoZT11KFZmKGpsdCksOSksbmV3IHNoKGUsdShmZihlLGUubGVuZ3RoKSw5KSwwKSkpLHM9bzVuKChlcyh0KSYmKFBtKCksbmV3IE1tKGVzKHQpKSksUG0oKSxuZXcgZ250KGVzKHQpP25ldyBNbShlcyh0KSk6bnVsbCx0KSksQ2YpLG89dShRKHIsZDl0KSwxMTYpLG49ci5kLElRdChuLG8pLElRdChuLHMpLHJ9ZnVuY3Rpb24geXluKHQsZSxuKXt2YXIgcixzO3I9ZS5jLmkscz1uLmQuaSxyLms9PShWbigpLHRhKT8oSnQodCwoYWUoKSxyMSksdShRKHIscjEpLDExKSksSnQodCwkaCx1KFEociwkaCksMTEpKSxKdCh0LFJ5LFJlKFEocixSeSkpKSk6ci5rPT1MbD8oSnQodCwoYWUoKSxyMSksdShRKHIscjEpLDExKSksSnQodCwkaCx1KFEociwkaCksMTEpKSxKdCh0LFJ5LChObigpLCEwKSkpOnMuaz09TGw/KEp0KHQsKGFlKCkscjEpLHUoUShzLHIxKSwxMSkpLEp0KHQsJGgsdShRKHMsJGgpLDExKSksSnQodCxSeSwoTm4oKSwhMCkpKTooSnQodCwoYWUoKSxyMSksZS5jKSxKdCh0LCRoLG4uZCkpfWZ1bmN0aW9uIHh5bih0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3IodC5vPW5ldyBCMyxyPW5ldyBaaSxoPW5ldyBTKHQuZS5hKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxMjEpLHU0KG8pLmMubGVuZ3RoPT0xJiZmcyhyLG8sci5jLmIsci5jKTtmb3IoO3IuYiE9MDspbz11KHIuYj09MD9udWxsOihabihyLmIhPTApLGxoKHIsci5hLmEpKSwxMjEpLHU0KG8pLmMubGVuZ3RoIT0wJiYoZT11KE5lKHU0KG8pLDApLDIxMyksbj1vLmcuYS5jLmxlbmd0aD4wLGQ9QnooZSxvKSxOMnQobj9kLmI6ZC5nLGUpLHU0KGQpLmMubGVuZ3RoPT0xJiZmcyhyLGQsci5jLmIsci5jKSxzPW5ldyBmYShvLGUpLFVwKHQubyxzKSxtdSh0LmUuYSxvKSl9ZnVuY3Rpb24gX2xlKHQsZSl7dmFyIG4scixzLG8saCxkLHY7cmV0dXJuIHI9Yi5NYXRoLmFicyhlJCh0LmIpLmEtZSQoZS5iKS5hKSxkPWIuTWF0aC5hYnMoZSQodC5iKS5iLWUkKGUuYikuYikscz0wLHY9MCxuPTEsaD0xLHI+dC5iLmIvMitlLmIuYi8yJiYocz1iLk1hdGgubWluKGIuTWF0aC5hYnModC5iLmMtKGUuYi5jK2UuYi5iKSksYi5NYXRoLmFicyh0LmIuYyt0LmIuYi1lLmIuYykpLG49MS1zL3IpLGQ+dC5iLmEvMitlLmIuYS8yJiYodj1iLk1hdGgubWluKGIuTWF0aC5hYnModC5iLmQtKGUuYi5kK2UuYi5hKSksYi5NYXRoLmFicyh0LmIuZCt0LmIuYS1lLmIuZCkpLGg9MS12L2QpLG89Yi5NYXRoLm1pbihuLGgpLCgxLW8pKmIuTWF0aC5zcXJ0KHIqcitkKmQpfWZ1bmN0aW9uIGt5bih0KXt2YXIgZSxuLHIscztmb3IoJGF0KHQsdC5lLHQuZiwoR3coKSx5YiksITAsdC5jLHQuaSksJGF0KHQsdC5lLHQuZix5YiwhMSx0LmMsdC5pKSwkYXQodCx0LmUsdC5mLHI1LCEwLHQuYyx0LmkpLCRhdCh0LHQuZSx0LmYscjUsITEsdC5jLHQuaSksVHluKHQsdC5jLHQuZSx0LmYsdC5pKSxyPW5ldyBkYSh0LmksMCk7ci5iPHIuZC5nYygpOylmb3IoZT0oWm4oci5iPHIuZC5nYygpKSx1KHIuZC5YYihyLmM9ci5iKyspLDEyOCkpLHM9bmV3IGRhKHQuaSxyLmIpO3MuYjxzLmQuZ2MoKTspbj0oWm4ocy5iPHMuZC5nYygpKSx1KHMuZC5YYihzLmM9cy5iKyspLDEyOCkpLG40bihlLG4pO1R4bih0LmksdShRKHQuZCwoYWUoKSwkNikpLDIzMCkpLGo0bih0LmkpfWZ1bmN0aW9uIHhhdCh0LGUpe3ZhciBuLHI7aWYoZSE9bnVsbCl7aWYocj1odih0KSxyKWlmKHIuaSYxKXtpZihyPT1wbClyZXR1cm4gTm0oZSk7aWYocj09Q3IpcmV0dXJuIF90KGUsMTkpO2lmKHI9PWEzKXJldHVybiBfdChlLDE1NSk7aWYocj09R3UpcmV0dXJuIF90KGUsMjE3KTtpZihyPT14aClyZXR1cm4gX3QoZSwxNzIpO2lmKHI9PWFhKXJldHVybiBCbShlKTtpZihyPT1nNSlyZXR1cm4gX3QoZSwxODQpO2lmKHI9PU9iKXJldHVybiBfdChlLDE2Mil9ZWxzZSByZXR1cm4gR1IoKSxuPXUodHIoZFUsciksNTUpLCFufHxuLndqKGUpO2Vsc2UgaWYoX3QoZSw1NikpcmV0dXJuIHQudWsodShlLDU2KSl9cmV0dXJuITF9ZnVuY3Rpb24gY3h0KCl7Y3h0PVo7dmFyIHQsZSxuLHIscyxvLGgsZCx2O2ZvcihZMT1OdChHdSxONCwyNSwyNTUsMTUsMSksbHA9TnQoeGgseWQsMjUsNjQsMTUsMSksZT0wO2U8MjU1O2UrKylZMVtlXT0tMTtmb3Iobj05MDtuPj02NTtuLS0pWTFbbl09bi02NTw8MjQ+PjI0O2ZvcihyPTEyMjtyPj05NztyLS0pWTFbcl09ci05NysyNjw8MjQ+PjI0O2ZvcihzPTU3O3M+PTQ4O3MtLSlZMVtzXT1zLTQ4KzUyPDwyND4+MjQ7Zm9yKFkxWzQzXT02MixZMVs0N109NjMsbz0wO288PTI1O28rKylscFtvXT02NStvJnlzO2ZvcihoPTI2LHY9MDtoPD01MTsrK2gsdisrKWxwW2hdPTk3K3YmeXM7Zm9yKHQ9NTIsZD0wO3Q8PTYxOysrdCxkKyspbHBbdF09NDgrZCZ5cztscFs2Ml09NDMsbHBbNjNdPTQ3fWZ1bmN0aW9uIEV5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSDtpZih0LmRjKCkpcmV0dXJuIG5ldyBDYTtmb3Ioaz0wLE09MCxzPXQuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMzcpLG89ci5mLGs9Yi5NYXRoLm1heChrLG8uYSksTSs9by5hKm8uYjtmb3Ioaz1iLk1hdGgubWF4KGssYi5NYXRoLnNxcnQoTSkqWHQoeWUoUSh1KHQuS2MoKS5QYigpLDM3KSwoVGUoKSxyRykpKSkpLGo9MCxIPTAsdj0wLG49ZSxkPXQuS2MoKTtkLk9iKCk7KWg9dShkLlBiKCksMzcpLEM9aC5mLGorQy5hPmsmJihqPTAsSCs9ditlLHY9MCkseF8oaCxqLEgpLG49Yi5NYXRoLm1heChuLGorQy5hKSx2PWIuTWF0aC5tYXgodixDLmIpLGorPUMuYStlO3JldHVybiBuZXcgJGUobitlLEgrditlKX1mdW5jdGlvbiBUeW4odCxlLG4scixzKXt2YXIgbyxoLGQsdixrLEMsTTtmb3IoaD1uZXcgUyhlKTtoLmE8aC5jLmMubGVuZ3RoOyl7aWYobz11KEooaCksMTcpLHY9by5jLG4uYS5fYih2KSlrPShHdygpLHliKTtlbHNlIGlmKHIuYS5fYih2KSlrPShHdygpLHI1KTtlbHNlIHRocm93IGl0KG5ldyBGbigiU291cmNlIHBvcnQgbXVzdCBiZSBpbiBvbmUgb2YgdGhlIHBvcnQgc2V0cy4iKSk7aWYoQz1vLmQsbi5hLl9iKEMpKU09KEd3KCkseWIpO2Vsc2UgaWYoci5hLl9iKEMpKU09KEd3KCkscjUpO2Vsc2UgdGhyb3cgaXQobmV3IEZuKCJUYXJnZXQgcG9ydCBtdXN0IGJlIGluIG9uZSBvZiB0aGUgcG9ydCBzZXRzLiIpKTtkPW5ldyB2b2UobyxrLE0pLGtpKHQuYixvLGQpLHMuY1tzLmMubGVuZ3RoXT1kfX1mdW5jdGlvbiB1eHQodCxlKXt2YXIgbixyLHMsbyxoLGQsdjtpZighVDEodCkpdGhyb3cgaXQobmV3IE5vKF9kZSkpO2lmKHI9VDEodCksbz1yLmcscz1yLmYsbzw9MCYmczw9MClyZXR1cm4gdmUoKSxabztzd2l0Y2goZD10Lmksdj10LmosZS5nKXtjYXNlIDI6Y2FzZSAxOmlmKGQ8MClyZXR1cm4gdmUoKSxCbjtpZihkK3QuZz5vKXJldHVybiB2ZSgpLEhuO2JyZWFrO2Nhc2UgNDpjYXNlIDM6aWYodjwwKXJldHVybiB2ZSgpLFBuO2lmKHYrdC5mPnMpcmV0dXJuIHZlKCksbXJ9cmV0dXJuIGg9KGQrdC5nLzIpL28sbj0odit0LmYvMikvcyxoK248PTEmJmgtbjw9MD8odmUoKSxCbik6aCtuPj0xJiZoLW4+PTA/KHZlKCksSG4pOm48LjU/KHZlKCksUG4pOih2ZSgpLG1yKX1mdW5jdGlvbiBDeW4odCxlLG4scixzKXt2YXIgbyxoO2lmKG89UGEoTnMoZVswXSxjbyksTnMoclswXSxjbykpLHRbMF09QXIobyksbz0kcChvLDMyKSxuPj1zKXtmb3IoaD0xO2g8cztoKyspbz1QYShvLFBhKE5zKGVbaF0sY28pLE5zKHJbaF0sY28pKSksdFtoXT1BcihvKSxvPSRwKG8sMzIpO2Zvcig7aDxuO2grKylvPVBhKG8sTnMoZVtoXSxjbykpLHRbaF09QXIobyksbz0kcChvLDMyKX1lbHNle2ZvcihoPTE7aDxuO2grKylvPVBhKG8sUGEoTnMoZVtoXSxjbyksTnMocltoXSxjbykpKSx0W2hdPUFyKG8pLG89JHAobywzMik7Zm9yKDtoPHM7aCsrKW89UGEobyxOcyhyW2hdLGNvKSksdFtoXT1BcihvKSxvPSRwKG8sMzIpfXljKG8sMCkhPTAmJih0W2hdPUFyKG8pKX1mdW5jdGlvbiBteSh0KXtnaSgpO3ZhciBlLG4scixzLG8saDtpZih0LmUhPTQmJnQuZSE9NSl0aHJvdyBpdChuZXcgRm4oIlRva2VuI2NvbXBsZW1lbnRSYW5nZXMoKTogbXVzdCBiZSBSQU5HRTogIit0LmUpKTtmb3Iobz10LHY0KG8pLFNfKG8pLHI9by5iLmxlbmd0aCsyLG8uYlswXT09MCYmKHItPTIpLG49by5iW28uYi5sZW5ndGgtMV0sbj09ZTcmJihyLT0yKSxzPW5ldyBObCg0KSxzLmI9TnQoQ3IsWHIsMjUsciwxNSwxKSxoPTAsby5iWzBdPjAmJihzLmJbaCsrXT0wLHMuYltoKytdPW8uYlswXS0xKSxlPTE7ZTxvLmIubGVuZ3RoLTI7ZSs9MilzLmJbaCsrXT1vLmJbZV0rMSxzLmJbaCsrXT1vLmJbZSsxXS0xO3JldHVybiBuIT1lNyYmKHMuYltoKytdPW4rMSxzLmJbaF09ZTcpLHMuYT0hMCxzfWZ1bmN0aW9uIGthdCh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQztpZihyPW4uZ2MoKSxyPT0wKXJldHVybiExO2lmKHQuZWooKSlpZihrPXQuZmooKSwkc3QodCxlLG4pLGg9cj09MT90LlppKDMsbnVsbCxuLktjKCkuUGIoKSxlLGspOnQuWmkoNSxudWxsLG4sZSxrKSx0LmJqKCkpe2ZvcihkPXI8MTAwP251bGw6bmV3IERwKHIpLG89ZStyLHM9ZTtzPG87KytzKUM9dC5nW3NdLGQ9dC5jaihDLGQpLGQ9dC5qaihDLGQpO2Q/KGQuRWkoaCksZC5GaSgpKTp0LiRpKGgpfWVsc2UgdC4kaShoKTtlbHNlIGlmKCRzdCh0LGUsbiksdC5iaigpKXtmb3IoZD1yPDEwMD9udWxsOm5ldyBEcChyKSxvPWUrcixzPWU7czxvOysrcyl2PXQuZ1tzXSxkPXQuY2oodixkKTtkJiZkLkZpKCl9cmV0dXJuITB9ZnVuY3Rpb24gbHh0KHQsZSxuLHIpe3ZhciBzLG8saCxkLHY7Zm9yKGg9bmV3IFModC5rKTtoLmE8aC5jLmMubGVuZ3RoOylzPXUoSihoKSwxMjkpLCghcnx8cy5jPT0oVWYoKSxtYikpJiYodj1zLmIsdi5nPDAmJnMuZD4wJiYob00odix2LmQtcy5kKSxzLmM9PShVZigpLG1iKSYmYnB0KHYsdi5hLXMuZCksdi5kPD0wJiZ2Lmk+MCYmZnMoZSx2LGUuYy5iLGUuYykpKTtmb3Iobz1uZXcgUyh0LmYpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDEyOSksKCFyfHxzLmM9PShVZigpLG1iKSkmJihkPXMuYSxkLmc8MCYmcy5kPjAmJihUQyhkLGQuaS1zLmQpLHMuYz09KFVmKCksbWIpJiZ3dyhkLGQuYi1zLmQpLGQuaTw9MCYmZC5kPjAmJmZzKG4sZCxuLmMuYixuLmMpKSl9ZnVuY3Rpb24gX3luKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDO2Zvcih2cihuLCJQcm9jZXNzb3IgY29tcHV0ZSBmYW5vdXQiLDEpLFh1KHQuYiksWHUodC5hKSxkPW51bGwsbz1laShlLmIsMCk7IWQmJm8uYiE9by5kLmM7KWs9dSh0aShvKSw4NiksamUoUmUoUShrLChmYygpLFh5KSkpKSYmKGQ9ayk7Zm9yKHY9bmV3IFppLGZzKHYsZCx2LmMuYix2LmMpLEJoZSh0LHYpLEM9ZWkoZS5iLDApO0MuYiE9Qy5kLmM7KWs9dSh0aShDKSw4NiksaD1CcihRKGssKGZjKCkselMpKSkscz1OYyh0LmIsaCkhPW51bGw/dShOYyh0LmIsaCksMTkpLmE6MCxKdChrLE1HLHBlKHMpKSxyPTErKE5jKHQuYSxoKSE9bnVsbD91KE5jKHQuYSxoKSwxOSkuYTowKSxKdChrLHB5ZSxwZShyKSk7b3Iobil9ZnVuY3Rpb24gU3luKHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE0saixILEc7Zm9yKGo9bDBuKHQsbiksdj0wO3Y8ZTt2Kyspe2Zvcih6bShzLG4pLEg9bmV3IGhlLEc9KFpuKHIuYjxyLmQuZ2MoKSksdShyLmQuWGIoci5jPXIuYisrKSw0MDcpKSxDPWordjtDPHQuYjtDKyspZD1HLEc9KFpuKHIuYjxyLmQuZ2MoKSksdShyLmQuWGIoci5jPXIuYisrKSw0MDcpKSxsZShILG5ldyBldWUoZCxHLG4pKTtmb3IoTT1qK3Y7TTx0LmI7TSsrKVpuKHIuYj4wKSxyLmEuWGIoci5jPS0tci5iKSxNPmordiYmQ2wocik7Zm9yKGg9bmV3IFMoSCk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksNDA3KSx6bShyLG8pO2lmKHY8ZS0xKWZvcihrPWordjtrPHQuYjtrKyspWm4oci5iPjApLHIuYS5YYihyLmM9LS1yLmIpfX1mdW5jdGlvbiBBeW4oKXtnaSgpO3ZhciB0LGUsbixyLHMsbztpZihWZnQpcmV0dXJuIFZmdDtmb3IodD1uZXcgTmwoNCkseXkodCxpYihrdXQsITApKSxMXyh0LGliKCJNIiwhMCkpLExfKHQsaWIoIkMiLCEwKSksbz1uZXcgTmwoNCkscj0wO3I8MTE7cisrKWpjKG8scixyKTtyZXR1cm4gZT1uZXcgTmwoNCkseXkoZSxpYigiTSIsITApKSxqYyhlLDQ0NDgsNDYwNyksamMoZSw2NTQzOCw2NTQzOSkscz1uZXcgZDkoMiksRTIocyx0KSxFMihzLHBBKSxuPW5ldyBkOSgyKSxuLiRsKFlqKG8saWIoIkwiLCEwKSkpLG4uJGwoZSksbj1uZXcgWG0oMyxuKSxuPW5ldyBtdnQocyxuKSxWZnQ9bixWZnR9ZnVuY3Rpb24gTHluKHQpe3ZhciBlLG47aWYoZT1CcihxZSh0LCh1aSgpLFlTKSkpLCFxbmUoZSx0KSYmIW8yKHQsTzcpJiYoKCF0LmEmJih0LmE9bmV3IGZlKHJzLHQsMTAsMTEpKSx0LmEpLmkhPTB8fGplKFJlKHFlKHQsWk8pKSkpKWlmKGU9PW51bGx8fGZ5KGUpLmxlbmd0aD09MCl7aWYoIXFuZShHbix0KSl0aHJvdyBuPUdyKEdyKG5ldyBPbCgiVW5hYmxlIHRvIGxvYWQgZGVmYXVsdCBsYXlvdXQgYWxnb3JpdGhtICIpLEduKSwiIGZvciB1bmNvbmZpZ3VyZWQgbm9kZSAiKSxOcSh0LG4pLGl0KG5ldyBSMyhuLmEpKX1lbHNlIHRocm93IG49R3IoR3IobmV3IE9sKCJMYXlvdXQgYWxnb3JpdGhtICciKSxlKSwiJyBub3QgZm91bmQgZm9yICIpLE5xKHQsbiksaXQobmV3IFIzKG4uYSkpfWZ1bmN0aW9uIEVhdCh0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGosSDtpZihuPXQuaSxlPXQubix0LmI9PTApZm9yKEg9bi5jK2UuYixqPW4uYi1lLmItZS5jLGg9dC5hLHY9MCxDPWgubGVuZ3RoO3Y8QzsrK3Ypcz1oW3ZdLFhqKHMsSCxqKTtlbHNlIHI9VHNlKHQsITEpLFhqKHQuYVswXSxuLmMrZS5iLHJbMF0pLFhqKHQuYVsyXSxuLmMrbi5iLWUuYy1yWzJdLHJbMl0pLE09bi5iLWUuYi1lLmMsclswXT4wJiYoTS09clswXSt0LmMsclswXSs9dC5jKSxyWzJdPjAmJihNLT1yWzJdK3QuYyksclsxXT1iLk1hdGgubWF4KHJbMV0sTSksWGoodC5hWzFdLG4uYytlLmIrclswXS0oclsxXS1NKS8yLHJbMV0pO2ZvcihvPXQuYSxkPTAsaz1vLmxlbmd0aDtkPGs7KytkKXM9b1tkXSxfdChzLDMyNikmJnUocywzMjYpLlRlKCl9ZnVuY3Rpb24gTXluKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE07Zm9yKE09bmV3IEJRLE0uZD0wLGg9bmV3IFModC5iKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwyOSksTS5kKz1vLmEuYy5sZW5ndGg7Zm9yKHI9MCxzPTAsTS5hPU50KENyLFhyLDI1LHQuYi5jLmxlbmd0aCwxNSwxKSxrPTAsQz0wLE0uZT1OdChDcixYciwyNSxNLmQsMTUsMSksbj1uZXcgUyh0LmIpO24uYTxuLmMuYy5sZW5ndGg7KWZvcihlPXUoSihuKSwyOSksZS5wPXIrKyxNLmFbZS5wXT1zKyssQz0wLHY9bmV3IFMoZS5hKTt2LmE8di5jLmMubGVuZ3RoOylkPXUoSih2KSwxMCksZC5wPWsrKyxNLmVbZC5wXT1DKys7cmV0dXJuIE0uYz1uZXcgWSR0KE0pLE0uYj1VZChNLmQpLG95bihNLHQpLE0uZj1VZChNLmQpLGN5bihNLHQpLE19ZnVuY3Rpb24gU2xlKHQsZSl7dmFyIG4scixzLG87Zm9yKG89dShOZSh0Lm4sdC5uLmMubGVuZ3RoLTEpLDIxMSkuZCx0LnA9Yi5NYXRoLm1pbih0LnAsZS5nKSx0LnI9Yi5NYXRoLm1heCh0LnIsbyksdC5nPWIuTWF0aC5tYXgodC5nLGUuZysodC5iLmMubGVuZ3RoPT0xPzA6dC5pKSksdC5vPWIuTWF0aC5taW4odC5vLGUuZiksdC5lKz1lLmYrKHQuYi5jLmxlbmd0aD09MT8wOnQuaSksdC5mPWIuTWF0aC5tYXgodC5mLGUuZikscz10Lm4uYy5sZW5ndGg+MD8odC5uLmMubGVuZ3RoLTEpKnQuaTowLHI9bmV3IFModC5uKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwyMTEpLHMrPW4uYTt0LmQ9cyx0LmE9dC5lL3QuYi5jLmxlbmd0aC10LmkqKCh0LmIuYy5sZW5ndGgtMSkvdC5iLmMubGVuZ3RoKSxRM3QodC5qKX1mdW5jdGlvbiBBbGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTTtpZihDPVJlKFEoZSwoSmYoKSx4YmUpKSksQz09bnVsbHx8KE9uKEMpLEMpKXtmb3IoTT1OdChwbCxvMCwyNSxlLmUuYy5sZW5ndGgsMTYsMSksaD1rYm4oZSkscz1uZXcgWmksaz1uZXcgUyhlLmUpO2suYTxrLmMuYy5sZW5ndGg7KWQ9dShKKGspLDE0NCksbj1TNXQodCxkLG51bGwsbnVsbCxNLGgpLG4mJihNbyhuLGUpLGZzKHMsbixzLmMuYixzLmMpKTtpZihzLmI+MSlmb3Iocj1laShzLDApO3IuYiE9ci5kLmM7KWZvcihuPXUodGkociksMjMxKSxvPTAsdj1uZXcgUyhuLmUpO3YuYTx2LmMuYy5sZW5ndGg7KWQ9dShKKHYpLDE0NCksZC5iPW8rKztyZXR1cm4gc31yZXR1cm4gQTEobHQoY3QobzZuLDEpLGg2dCwyMzEsMCxbZV0pKX1mdW5jdGlvbiB2ZCh0KXt2YXIgZSxuLHIscyxvLGgsZDtpZighdC5nKXtpZihkPW5ldyBVYixlPXVBLGg9ZS5hLnpjKHQsZSksaD09bnVsbCl7Zm9yKHI9bmV3IG5yKEFvKHQpKTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksMjYpLGlzKGQsdmQobikpO2UuYS5CYyh0KSE9bnVsbCxlLmEuZ2MoKT09MH1mb3Iocz1kLmksbz0oIXQucyYmKHQucz1uZXcgZmUoTXUsdCwyMSwxNykpLG5ldyBucih0LnMpKTtvLmUhPW8uaS5nYygpOysrcylQdHQodShkcihvKSw0NDkpLHMpO2lzKGQsKCF0LnMmJih0LnM9bmV3IGZlKE11LHQsMjEsMTcpKSx0LnMpKSxpeShkKSx0Lmc9bmV3IHdyZSh0LGQpLHQuaT11KGQuZywyNDcpLHQuaT09bnVsbCYmKHQuaT1CZnQpLHQucD1udWxsLHNsKHQpLmImPS01fXJldHVybiB0Lmd9ZnVuY3Rpb24gVGF0KHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0saixILEc7aWYocj10Lmksbj10Lm4sdC5iPT0wKWU9RXNlKHQsITEpLFFqKHQuYVswXSxyLmQrbi5kLGVbMF0pLFFqKHQuYVsyXSxyLmQrci5hLW4uYS1lWzJdLGVbMl0pLGo9ci5hLW4uZC1uLmEsTT1qLGVbMF0+MCYmKGVbMF0rPXQuYyxNLT1lWzBdKSxlWzJdPjAmJihNLT1lWzJdK3QuYyksZVsxXT1iLk1hdGgubWF4KGVbMV0sTSksUWoodC5hWzFdLHIuZCtuLmQrZVswXS0oZVsxXS1NKS8yLGVbMV0pO2Vsc2UgZm9yKEc9ci5kK24uZCxIPXIuYS1uLmQtbi5hLGg9dC5hLHY9MCxDPWgubGVuZ3RoO3Y8QzsrK3Ypcz1oW3ZdLFFqKHMsRyxIKTtmb3Iobz10LmEsZD0wLGs9by5sZW5ndGg7ZDxrOysrZClzPW9bZF0sX3QocywzMjYpJiZ1KHMsMzI2KS5VZSgpfWZ1bmN0aW9uIER5bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQztmb3IoQz1OdChDcixYciwyNSx0LmIuYy5sZW5ndGgrMSwxNSwxKSxrPW5ldyBIcyxyPTAsbz1uZXcgUyh0LmIpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3Iocz11KEoobyksMjkpLENbcisrXT1rLmEuZ2MoKSx2PW5ldyBTKHMuYSk7di5hPHYuYy5jLmxlbmd0aDspZm9yKGg9dShKKHYpLDEwKSxuPW5ldyBhcihscihEcyhoKS5hLktjKCksbmV3IHopKTt6cihuKTspZT11KE1yKG4pLDE3KSxrLmEuemMoZSxrKTtmb3IoZD1uZXcgUyhzLmEpO2QuYTxkLmMuYy5sZW5ndGg7KWZvcihoPXUoSihkKSwxMCksbj1uZXcgYXIobHIoam8oaCkuYS5LYygpLG5ldyB6KSk7enIobik7KWU9dShNcihuKSwxNyksay5hLkJjKGUpIT1udWxsfXJldHVybiBDfWZ1bmN0aW9uIE1xKHQsZSxuLHIpe3ZhciBzLG8saCxkLHY7aWYodj1vdSh0LmUuVGcoKSxlKSxzPXUodC5nLDExOSksdG8oKSx1KGUsNjYpLk9qKCkpe2ZvcihoPTA7aDx0Lmk7KytoKWlmKG89c1toXSx2LnJsKG8uYWsoKSkmJnlpKG8sbikpcmV0dXJuITB9ZWxzZSBpZihuIT1udWxsKXtmb3IoZD0wO2Q8dC5pOysrZClpZihvPXNbZF0sdi5ybChvLmFrKCkpJiZ5aShuLG8uZGQoKSkpcmV0dXJuITA7aWYocil7Zm9yKGg9MDtoPHQuaTsrK2gpaWYobz1zW2hdLHYucmwoby5haygpKSYmVnQobik9PT1WdChtbnQodCx1KG8uZGQoKSw1NikpKSlyZXR1cm4hMH19ZWxzZSBmb3IoaD0wO2g8dC5pOysraClpZihvPXNbaF0sdi5ybChvLmFrKCkpJiZvLmRkKCk9PW51bGwpcmV0dXJuITE7cmV0dXJuITF9ZnVuY3Rpb24gTGxlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsaztpZihrPW91KHQuZS5UZygpLGUpLGg9dSh0LmcsMTE5KSxYMCh0LmUsZSkpe2lmKGUuaGkoKSYmKG89REUodCxlLHIsX3QoZSw5OSkmJih1KGUsMTgpLkJiJkthKSE9MCksbz49MCYmbyE9bikpdGhyb3cgaXQobmV3IEZuKGVPKSk7Zm9yKHM9MCx2PTA7djx0Lmk7Kyt2KWlmKGQ9aFt2XSxrLnJsKGQuYWsoKSkpe2lmKHM9PW4pcmV0dXJuIHUoaDQodCx2LCh0bygpLHUoZSw2NikuT2ooKT91KHIsNzIpOlpkKGUscikpKSw3Mik7KytzfXRocm93IGl0KG5ldyB5byhKXytuK0QyK3MpKX1lbHNle2Zvcih2PTA7djx0Lmk7Kyt2KWlmKGQ9aFt2XSxrLnJsKGQuYWsoKSkpcmV0dXJuIHRvKCksdShlLDY2KS5PaigpP2Q6ZC5kZCgpO3JldHVybiBudWxsfX1mdW5jdGlvbiBNbGUodCxlLG4scil7dmFyIHMsbyxoLGQ7Zm9yKGQ9bixoPW5ldyBTKGUuYSk7aC5hPGguYy5jLmxlbmd0aDspe2lmKG89dShKKGgpLDIyMSkscz11KG8uYiw2NSksYXYodC5iLmMscy5iLmMrcy5iLmIpPD0wJiZhdihzLmIuYyx0LmIuYyt0LmIuYik8PTAmJmF2KHQuYi5kLHMuYi5kK3MuYi5hKTw9MCYmYXYocy5iLmQsdC5iLmQrdC5iLmEpPD0wKXtpZihhdihzLmIuYyx0LmIuYyt0LmIuYik9PTAmJnIuYTwwfHxhdihzLmIuYytzLmIuYix0LmIuYyk9PTAmJnIuYT4wfHxhdihzLmIuZCx0LmIuZCt0LmIuYSk9PTAmJnIuYjwwfHxhdihzLmIuZCtzLmIuYSx0LmIuZCk9PTAmJnIuYj4wKXtkPTA7YnJlYWt9fWVsc2UgZD1iLk1hdGgubWluKGQsTW9lKHQscyxyKSk7ZD1iLk1hdGgubWluKGQsTWxlKHQsbyxkLHIpKX1yZXR1cm4gZH1mdW5jdGlvbiBDSSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2O2lmKHQuYjwyKXRocm93IGl0KG5ldyBGbigiVGhlIHZlY3RvciBjaGFpbiBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgYSBzb3VyY2UgYW5kIGEgdGFyZ2V0IHBvaW50LiIpKTtmb3Iocz0oWm4odC5iIT0wKSx1KHQuYS5hLmMsOCkpLHZqKGUscy5hLHMuYiksdj1uZXcgTngoKCFlLmEmJihlLmE9bmV3IEFzKEdoLGUsNSkpLGUuYSkpLGg9ZWkodCwxKTtoLmE8dC5iLTE7KWQ9dSh0aShoKSw4KSx2LmUhPXYuaS5nYygpP249dShkcih2KSw0NjkpOihuPShTdygpLHI9bmV3IHhwLHIpLERpZSh2LG4pKSx1MnQobixkLmEsZC5iKTtmb3IoO3YuZSE9di5pLmdjKCk7KWRyKHYpLGZfKHYpO289KFpuKHQuYiE9MCksdSh0LmMuYi5jLDgpKSx3aihlLG8uYSxvLmIpfWZ1bmN0aW9uIERsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztmb3Iobj0wLHM9bmV3IFMoKEFuKDAsdC5jLmxlbmd0aCksdSh0LmNbMF0sMTAxKSkuZy5iLmopO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDExKSxyLnA9bisrO2ZvcihlPT0odmUoKSxQbik/WnModCxuZXcgR1gpOlpzKHQsbmV3IFVYKSxkPTAsQz10LmMubGVuZ3RoLTE7ZDxDOyloPShBbihkLHQuYy5sZW5ndGgpLHUodC5jW2RdLDEwMSkpLGs9KEFuKEMsdC5jLmxlbmd0aCksdSh0LmNbQ10sMTAxKSksbz1lPT1Qbj9oLmM6aC5hLHY9ZT09UG4/ay5hOmsuYyxPZyhoLGUsKEkxKCksZDcpLG8pLE9nKGssZSxmNyx2KSwrK2QsLS1DO2Q9PUMmJk9nKChBbihkLHQuYy5sZW5ndGgpLHUodC5jW2RdLDEwMSkpLGUsKEkxKCksTzYpLG51bGwpfWZ1bmN0aW9uIEl5bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3Q7cmV0dXJuIE09dC5hLmkrdC5hLmcvMixqPXQuYS5pK3QuYS5nLzIsRz1lLmkrZS5nLzIsdHQ9ZS5qK2UuZi8yLGQ9bmV3ICRlKEcsdHQpLGs9dShxZShlLCh1aSgpLFk2KSksOCksay5hPWsuYStNLGsuYj1rLmIraixvPShkLmItay5iKS8oZC5hLWsuYSkscj1kLmItbypkLmEsSz1uLmkrbi5nLzIsZ3Q9bi5qK24uZi8yLHY9bmV3ICRlKEssZ3QpLEM9dShxZShuLFk2KSw4KSxDLmE9Qy5hK00sQy5iPUMuYitqLGg9KHYuYi1DLmIpLyh2LmEtQy5hKSxzPXYuYi1oKnYuYSxIPShyLXMpLyhoLW8pLGsuYTxIJiZkLmE8SHx8SDxrLmEmJkg8ZC5hPyExOiEoQy5hPEgmJnYuYTxIfHxIPEMuYSYmSDx2LmEpfWZ1bmN0aW9uIE95bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSDtpZihqPXUodHIodC5jLGUpLDE4MyksIWopdGhyb3cgaXQobmV3IHVkKCJFZGdlIGRpZCBub3QgZXhpc3QgaW4gaW5wdXQuIikpO3JldHVybiBrPXBFKGopLG89d00oKCFlLmEmJihlLmE9bmV3IGZlKEppLGUsNiw2KSksZS5hKSksZD0hbyxkJiYoSD1uZXcgRWcsbj1uZXcgQll0KHQsayxIKSxSWGUoKCFlLmEmJihlLmE9bmV3IGZlKEppLGUsNiw2KSksZS5hKSxuKSxZZihqLEU4dCxIKSkscz1vMihlLCh1aSgpLGE1KSkscyYmKEM9dShxZShlLGE1KSw3NCksaD0hQ3x8a1h0KEMpLHY9IWgsdiYmKE09bmV3IEVnLHI9bmV3IE16dChNKSx2YShDLHIpLFlmKGosImp1bmN0aW9uUG9pbnRzIixNKSkpLEU4KGosImNvbnRhaW5lciIsY0QoZSkuayksbnVsbH1mdW5jdGlvbiBoeHQodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEM7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW4sdGhpcy5lPUExKGx0KGN0KGk2biwxKSxEZSwxNjgsMCxbbmV3IER4KHQsZSksbmV3IER4KGUsbiksbmV3IER4KG4sdCldKSksdGhpcy5mPUExKGx0KGN0KFdzLDEpLGVlLDgsMCxbdCxlLG5dKSksdGhpcy5kPShyPWlhKG5jKHRoaXMuYiksdGhpcy5hKSxzPWlhKG5jKHRoaXMuYyksdGhpcy5hKSxvPWlhKG5jKHRoaXMuYyksdGhpcy5iKSxoPXIuYSoodGhpcy5hLmErdGhpcy5iLmEpK3IuYioodGhpcy5hLmIrdGhpcy5iLmIpLGQ9cy5hKih0aGlzLmEuYSt0aGlzLmMuYSkrcy5iKih0aGlzLmEuYit0aGlzLmMuYiksdj0yKihyLmEqby5iLXIuYipvLmEpLGs9KHMuYipoLXIuYipkKS92LEM9KHIuYSpkLXMuYSpoKS92LG5ldyAkZShrLEMpKX1mdW5jdGlvbiBJbGUodCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEgsRztpZihqPW5ldyBVbSh0LnApLFlmKGUsY2ksaiksbiYmISh0LmY/aUQodC5mKTpudWxsKS5hLmRjKCkpZm9yKEM9bmV3IEVnLFlmKGUsImxvZ3MiLEMpLGQ9MCxHPW5ldyBMKCh0LmY/aUQodC5mKTpudWxsKS5iLktjKCkpO0cuYi5PYigpOylIPUJyKEcuYi5QYigpKSxNPW5ldyBVbShIKSxKbShDLGQpLEJydChDLGQsTSksKytkO2lmKHImJihrPW5ldyBFQyh0LnEpLFlmKGUsImV4ZWN1dGlvblRpbWUiLGspKSwhaUQodC5hKS5hLmRjKCkpZm9yKGg9bmV3IEVnLFlmKGUsZXV0LGgpLGQ9MCxvPW5ldyBMKGlEKHQuYSkuYi5LYygpKTtvLmIuT2IoKTspcz11KG8uYi5QYigpLDE5NDkpLHY9bmV3IF94LEptKGgsZCksQnJ0KGgsZCx2KSxJbGUocyx2LG4sciksKytkfWZ1bmN0aW9uIGJ2KHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihvPXQuYyxoPXQuZCxPYSh0LG51bGwpLG9hKHQsbnVsbCksZSYmamUoUmUoUShoLChhZSgpLFVsdCkpKSk/T2EodCxpeHQoaC5pLChzbygpLG51KSwodmUoKSxIbikpKTpPYSh0LGgpLGUmJmplKFJlKFEobywoYWUoKSxZbHQpKSkpP29hKHQsaXh0KG8uaSwoc28oKSx0bCksKHZlKCksQm4pKSk6b2EodCxvKSxyPW5ldyBTKHQuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNzApLHM9dShRKG4sKFRlKCksT2QpKSwyNzIpLHM9PShNMSgpLEY3KT9KdChuLE9kLFp5KTpzPT1aeSYmSnQobixPZCxGNyk7ZD1qZShSZShRKHQsKGFlKCkscTEpKSkpLEp0KHQscTEsKE5uKCksIWQpKSx0LmE9cUQodC5hKX1mdW5jdGlvbiBQeW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdjtmb3Iocj0wLG89bmV3IG5yKCghdC5hJiYodC5hPW5ldyBmZShycyx0LDEwLDExKSksdC5hKSk7by5lIT1vLmkuZ2MoKTspcz11KGRyKG8pLDMzKSxoPSIiLCghcy5uJiYocy5uPW5ldyBmZShxbyxzLDEsNykpLHMubikuaT09MHx8KGg9dShBdCgoIXMubiYmKHMubj1uZXcgZmUocW8scywxLDcpKSxzLm4pLDApLDEzNykuYSksZD1uZXcgZ1h0KGgpLE1vKGQscyksSnQoZCwoWXAoKSxJNikscyksZC5iPXIrKyxkLmQuYT1zLmkrcy5nLzIsZC5kLmI9cy5qK3MuZi8yLGQuZS5hPWIuTWF0aC5tYXgocy5nLDEpLGQuZS5iPWIuTWF0aC5tYXgocy5mLDEpLGxlKGUuZSxkKSxhdShuLmYscyxkKSx2PXUocWUocywoSmYoKSxrN3QpKSw5OCksdj09KHVhKCksVGIpJiYodj1HMSl9ZnVuY3Rpb24gRnluKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dDtuPUZ3KG5ldyBYYix0LmYpLGs9dC5pW2UuYy5pLnBdLEg9dC5pW2UuZC5pLnBdLHY9ZS5jLGo9ZS5kLGQ9di5hLmIsTT1qLmEuYixrLmJ8fChkKz12Lm4uYiksSC5ifHwoTSs9ai5uLmIpLEM9cHMoYi5NYXRoLm1heCgwLGQtTSkpLGg9cHMoYi5NYXRoLm1heCgwLE0tZCkpLEc9KEs9Yi5NYXRoLm1heCgxLHUoUShlLChUZSgpLEg2KSksMTkpLmEpLHR0PW9tdChlLmMuaS5rLGUuZC5pLmspLEsqdHQpLHM9eWYobGYodWYoY2YoaGYobmV3IENoLEcpLGgpLG4pLHUodHIodC5rLGUuYyksMTIxKSkpLG89eWYobGYodWYoY2YoaGYobmV3IENoLEcpLEMpLG4pLHUodHIodC5rLGUuZCksMTIxKSkpLHI9bmV3IGJHdChzLG8pLHQuY1tlLnBdPXJ9ZnVuY3Rpb24gTnluKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsaztmb3IoaD1uZXcgc2hlKHQsZSxuKSx2PW5ldyBkYShyLDApLHM9ITE7di5iPHYuZC5nYygpOylkPShabih2LmI8di5kLmdjKCkpLHUodi5kLlhiKHYuYz12LmIrKyksMjMzKSksZD09ZXx8ZD09bj9DbCh2KTohcyYmWHQoRTEoZC5nLGQuZFswXSkuYSk+WHQoRTEoaC5nLGguZFswXSkuYSk/KFpuKHYuYj4wKSx2LmEuWGIodi5jPS0tdi5iKSx6bSh2LGgpLHM9ITApOmQuZSYmZC5lLmdjKCk+MCYmKG89KCFkLmUmJihkLmU9bmV3IGhlKSxkLmUpLk1jKGUpLGs9KCFkLmUmJihkLmU9bmV3IGhlKSxkLmUpLk1jKG4pLChvfHxrKSYmKCghZC5lJiYoZC5lPW5ldyBoZSksZC5lKS5GYyhoKSwrK2guYykpO3N8fChyLmNbci5jLmxlbmd0aF09aCl9ZnVuY3Rpb24gT2xlKHQpe3ZhciBlLG4scjtpZihHMyh1KFEodCwoVGUoKSxjcykpLDk4KSkpZm9yKG49bmV3IFModC5qKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMSksZS5qPT0odmUoKSxabykmJihyPXUoUShlLChhZSgpLEp1KSksMTApLHI/QnMoZSx1KFEocixvYyksNjEpKTplLmUuYy5sZW5ndGgtZS5nLmMubGVuZ3RoPDA/QnMoZSxIbik6QnMoZSxCbikpO2Vsc2V7Zm9yKG49bmV3IFModC5qKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMSkscj11KFEoZSwoYWUoKSxKdSkpLDEwKSxyP0JzKGUsdShRKHIsb2MpLDYxKSk6ZS5lLmMubGVuZ3RoLWUuZy5jLmxlbmd0aDwwP0JzKGUsKHZlKCksSG4pKTpCcyhlLCh2ZSgpLEJuKSk7SnQodCxjcywodWEoKSxCNykpfX1mdW5jdGlvbiBfSSh0KXt2YXIgZSxuLHI7c3dpdGNoKHQpe2Nhc2UgOTE6Y2FzZSA5MzpjYXNlIDQ1OmNhc2UgOTQ6Y2FzZSA0NDpjYXNlIDkyOnI9IlxcIitTdHJpbmcuZnJvbUNoYXJDb2RlKHQmeXMpO2JyZWFrO2Nhc2UgMTI6cj0iXFxmIjticmVhaztjYXNlIDEwOnI9IlxcbiI7YnJlYWs7Y2FzZSAxMzpyPSJcXHIiO2JyZWFrO2Nhc2UgOTpyPSJcXHQiO2JyZWFrO2Nhc2UgMjc6cj0iXFxlIjticmVhaztkZWZhdWx0OnQ8MzI/KG49KGU9dD4+PjAsIjAiK2UudG9TdHJpbmcoMTYpKSxyPSJcXHgiK1BsKG4sbi5sZW5ndGgtMixuLmxlbmd0aCkpOnQ+PUthPyhuPShlPXQ+Pj4wLCIwIitlLnRvU3RyaW5nKDE2KSkscj0iXFx2IitQbChuLG4ubGVuZ3RoLTYsbi5sZW5ndGgpKTpyPSIiK1N0cmluZy5mcm9tQ2hhckNvZGUodCZ5cyl9cmV0dXJuIHJ9ZnVuY3Rpb24gQ2F0KHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE07aWYoaD10LmUsdj1lLmUsdj09MClyZXR1cm4gdDtpZihoPT0wKXJldHVybiBlLmU9PTA/ZTpuZXcgWDMoLWUuZSxlLmQsZS5hKTtpZihvPXQuZCxkPWUuZCxvK2Q9PTIpcmV0dXJuIG49TnModC5hWzBdLGNvKSxyPU5zKGUuYVswXSxjbyksaDwwJiYobj16OChuKSksdjwwJiYocj16OChyKSksSkQoSnAobixyKSk7aWYocz1vIT1kP28+ZD8xOi0xOnF5dCh0LmEsZS5hLG8pLHM9PS0xKU09LXYsQz1oPT12P1dydChlLmEsZCx0LmEsbyk6S3J0KGUuYSxkLHQuYSxvKTtlbHNlIGlmKE09aCxoPT12KXtpZihzPT0wKXJldHVybiByYigpLHM3O0M9V3J0KHQuYSxvLGUuYSxkKX1lbHNlIEM9S3J0KHQuYSxvLGUuYSxkKTtyZXR1cm4gaz1uZXcgWDMoTSxDLmxlbmd0aCxDKSxOOShrKSxrfWZ1bmN0aW9uIGZ4dCh0KXt2YXIgZSxuLHIscyxvLGg7Zm9yKHRoaXMuZT1uZXcgaGUsdGhpcy5hPW5ldyBoZSxuPXQuYi0xO248MztuKyspbTgodCwwLHUoWmYodCwwKSw4KSk7aWYodC5iPDQpdGhyb3cgaXQobmV3IEZuKCJBdCAobGVhc3QgZGltZW5zaW9uICsgMSkgY29udHJvbCBwb2ludHMgYXJlIG5lY2Vzc2FyeSEiKSk7Zm9yKHRoaXMuYj0zLHRoaXMuZD0hMCx0aGlzLmM9ITEseDJuKHRoaXMsdC5iK3RoaXMuYi0xKSxoPW5ldyBoZSxvPW5ldyBTKHRoaXMuZSksZT0wO2U8dGhpcy5iLTE7ZSsrKWxlKGgseWUoSihvKSkpO2ZvcihzPWVpKHQsMCk7cy5iIT1zLmQuYzspcj11KHRpKHMpLDgpLGxlKGgseWUoSihvKSkpLGxlKHRoaXMuYSxuZXcgeVF0KHIsaCkpLEFuKDAsaC5jLmxlbmd0aCksaC5jLnNwbGljZSgwLDEpfWZ1bmN0aW9uIFBsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztmb3Iobz1uZXcgUyh0LmIpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSwyOSksZD1uZXcgUyhzLmEpO2QuYTxkLmMuYy5sZW5ndGg7KWZvcihoPXUoSihkKSwxMCksaC5rPT0oVm4oKSxMbCkmJih2PShrPXUoTXIobmV3IGFyKGxyKGpvKGgpLmEuS2MoKSxuZXcgeikpKSwxNyksQz11KE1yKG5ldyBhcihscihEcyhoKS5hLktjKCksbmV3IHopKSksMTcpLCFqZShSZShRKGssKGFlKCkscTEpKSkpfHwhamUoUmUoUShDLHExKSkpP2U6dXJlKGUpKSxwNihoLHYpKSxyPW5ldyBhcihscihEcyhoKS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KE1yKHIpLDE3KSx2PWplKFJlKFEobiwoYWUoKSxxMSkpKSk/dXJlKGUpOmUsbnJlKG4sdil9ZnVuY3Rpb24gQnluKHQsZSxuLHIscyl7dmFyIG8saCxkO2lmKG4uZj49ZS5vJiZuLmY8PWUuZnx8ZS5hKi41PD1uLmYmJmUuYSoxLjU+PW4uZil7aWYoaD11KE5lKGUubixlLm4uYy5sZW5ndGgtMSksMjExKSxoLmUraC5kK24uZytzPD1yJiYobz11KE5lKGUubixlLm4uYy5sZW5ndGgtMSksMjExKSxvLmYtdC5mK24uZjw9dC5ifHx0LmEuYy5sZW5ndGg9PTEpKXJldHVybiBoM3QoZSxuKSwhMDtpZihlLnMrbi5nPD1yJiYoZS50K2UuZCtuLmYrczw9dC5ifHx0LmEuYy5sZW5ndGg9PTEpKXJldHVybiBsZShlLmIsbiksZD11KE5lKGUubixlLm4uYy5sZW5ndGgtMSksMjExKSxsZShlLm4sbmV3IEUkKGUucyxkLmYrZC5hK2UuaSxlLmkpKSxXM3QodShOZShlLm4sZS5uLmMubGVuZ3RoLTEpLDIxMSksbiksU2xlKGUsbiksITB9cmV0dXJuITF9ZnVuY3Rpb24gRmxlKHQsZSxuKXt2YXIgcixzLG8saDtyZXR1cm4gdC5laigpPyhzPW51bGwsbz10LmZqKCkscj10LlppKDEsaD1zaXQodCxlLG4pLG4sZSxvKSx0LmJqKCkmJiEodC5uaSgpJiZoIT1udWxsP3lpKGgsbik6VnQoaCk9PT1WdChuKSk/KGghPW51bGwmJihzPXQuZGooaCxzKSkscz10LmNqKG4scyksdC5paigpJiYocz10LmxqKGgsbixzKSkscz8ocy5FaShyKSxzLkZpKCkpOnQuJGkocikpOih0LmlqKCkmJihzPXQubGooaCxuLHMpKSxzPyhzLkVpKHIpLHMuRmkoKSk6dC4kaShyKSksaCk6KGg9c2l0KHQsZSxuKSx0LmJqKCkmJiEodC5uaSgpJiZoIT1udWxsP3lpKGgsbik6VnQoaCk9PT1WdChuKSkmJihzPW51bGwsaCE9bnVsbCYmKHM9dC5kaihoLG51bGwpKSxzPXQuY2oobixzKSxzJiZzLkZpKCkpLGgpfWZ1bmN0aW9uIEVfKHQsZSl7dmFyIG4scixzLG8saCxkLHYsaztlJT0yNCx0LnEuZ2V0SG91cnMoKSE9ZSYmKHI9bmV3IGIuRGF0ZSh0LnEuZ2V0VGltZSgpKSxyLnNldERhdGUoci5nZXREYXRlKCkrMSksZD10LnEuZ2V0VGltZXpvbmVPZmZzZXQoKS1yLmdldFRpbWV6b25lT2Zmc2V0KCksZD4wJiYodj1kLzYwfDAsaz1kJTYwLHM9dC5xLmdldERhdGUoKSxuPXQucS5nZXRIb3VycygpLG4rdj49MjQmJisrcyxvPW5ldyBiLkRhdGUodC5xLmdldEZ1bGxZZWFyKCksdC5xLmdldE1vbnRoKCkscyxlK3YsdC5xLmdldE1pbnV0ZXMoKStrLHQucS5nZXRTZWNvbmRzKCksdC5xLmdldE1pbGxpc2Vjb25kcygpKSx0LnEuc2V0VGltZShvLmdldFRpbWUoKSkpKSxoPXQucS5nZXRUaW1lKCksdC5xLnNldFRpbWUoaCszNmU1KSx0LnEuZ2V0SG91cnMoKSE9ZSYmdC5xLnNldFRpbWUoaCl9ZnVuY3Rpb24gUnluKHQsZSl7dmFyIG4scixzLG8saDtpZih2cihlLCJQYXRoLUxpa2UgR3JhcGggV3JhcHBpbmciLDEpLHQuYi5jLmxlbmd0aD09MCl7b3IoZSk7cmV0dXJufWlmKHM9bmV3IG01dCh0KSxoPShzLmk9PW51bGwmJihzLmk9Znl0KHMsbmV3IFZOKSksWHQocy5pKSpzLmYpLG49aC8ocy5pPT1udWxsJiYocy5pPWZ5dChzLG5ldyBWTikpLFh0KHMuaSkpLHMuYj5uKXtvcihlKTtyZXR1cm59c3dpdGNoKHUoUSh0LChUZSgpLGdodCkpLDMzNykuZyl7Y2FzZSAyOm89bmV3IFVOO2JyZWFrO2Nhc2UgMDpvPW5ldyBITjticmVhaztkZWZhdWx0Om89bmV3IFdOfWlmKHI9by5WZih0LHMpLCFvLldmKCkpc3dpdGNoKHUoUSh0LHdHKSwzMzgpLmcpe2Nhc2UgMjpyPURvZShzLHIpO2JyZWFrO2Nhc2UgMTpyPU1hZShzLHIpfUYzbih0LHMsciksb3IoZSl9ZnVuY3Rpb24ganluKHQsZSl7dmFyIG4scixzLG87aWYoRWluKHQuZCx0LmUpLHQuYy5hLiRiKCksWHQoeWUoUShlLmosKFRlKCksYUcpKSkpIT0wfHxYdCh5ZShRKGUuaixhRykpKSE9MClmb3Iobj1WRSxWdChRKGUuaix3YikpIT09VnQoKFYwKCksdmIpKSYmSnQoZS5qLChhZSgpLE92KSwoTm4oKSwhMCkpLG89dShRKGUuaixNUyksMTkpLmEscz0wO3M8byYmKHI9bXluKHQsZSksIShyPG4mJihuPXIseG5lKHQpLG49PTApKSk7cysrKTtlbHNlIGZvcihuPXdpLFZ0KFEoZS5qLHdiKSkhPT1WdCgoVjAoKSx2YikpJiZKdChlLmosKGFlKCksT3YpLChObigpLCEwKSksbz11KFEoZS5qLE1TKSwxOSkuYSxzPTA7czxvJiYocj14bGUodCxlKSwhKHI8biYmKG49cix4bmUodCksbj09MCkpKTtzKyspO31mdW5jdGlvbiAkeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrO2ZvcihoPW5ldyBoZSxkPTAsbj0wLHY9MDtkPGUuYy5sZW5ndGgtMSYmbjx0LmdjKCk7KXtmb3Iocj11KHQuWGIobiksMTkpLmErdjsoQW4oZCsxLGUuYy5sZW5ndGgpLHUoZS5jW2QrMV0sMTkpKS5hPHI7KSsrZDtmb3Ioaz0wLG89ci0oQW4oZCxlLmMubGVuZ3RoKSx1KGUuY1tkXSwxOSkpLmEscz0oQW4oZCsxLGUuYy5sZW5ndGgpLHUoZS5jW2QrMV0sMTkpKS5hLXIsbz5zJiYrK2ssbGUoaCwoQW4oZCtrLGUuYy5sZW5ndGgpLHUoZS5jW2Qra10sMTkpKSksdis9KEFuKGQrayxlLmMubGVuZ3RoKSx1KGUuY1tkK2tdLDE5KSkuYS1yLCsrbjtuPHQuZ2MoKSYmdSh0LlhiKG4pLDE5KS5hK3Y8PShBbihkK2ssZS5jLmxlbmd0aCksdShlLmNbZCtrXSwxOSkpLmE7KSsrbjtkKz0xK2t9cmV0dXJuIGh9ZnVuY3Rpb24gX2F0KHQpe3ZhciBlLG4scixzLG8saCxkO2lmKCF0LmQpe2lmKGQ9bmV3IEwzLGU9dUEsbz1lLmEuemModCxlKSxvPT1udWxsKXtmb3Iocj1uZXcgbnIoQW8odCkpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSwyNiksaXMoZCxfYXQobikpO2UuYS5CYyh0KSE9bnVsbCxlLmEuZ2MoKT09MH1mb3IoaD1kLmkscz0oIXQucSYmKHQucT1uZXcgZmUoV2gsdCwxMSwxMCkpLG5ldyBucih0LnEpKTtzLmUhPXMuaS5nYygpOysraCl1KGRyKHMpLDM5OSk7aXMoZCwoIXQucSYmKHQucT1uZXcgZmUoV2gsdCwxMSwxMCkpLHQucSkpLGl5KGQpLHQuZD1uZXcgVjMoKHUoQXQoV3QoKEhwKCksTG4pLm8pLDkpLDE4KSxkLmkpLGQuZyksdC5lPXUoZC5nLDY3MyksdC5lPT1udWxsJiYodC5lPWs1ZSksc2wodCkuYiY9LTE3fXJldHVybiB0LmR9ZnVuY3Rpb24gREUodCxlLG4scil7dmFyIHMsbyxoLGQsdixrO2lmKGs9b3UodC5lLlRnKCksZSksdj0wLHM9dSh0LmcsMTE5KSx0bygpLHUoZSw2NikuT2ooKSl7Zm9yKGg9MDtoPHQuaTsrK2gpaWYobz1zW2hdLGsucmwoby5haygpKSl7aWYoeWkobyxuKSlyZXR1cm4gdjsrK3Z9fWVsc2UgaWYobiE9bnVsbCl7Zm9yKGQ9MDtkPHQuaTsrK2QpaWYobz1zW2RdLGsucmwoby5haygpKSl7aWYoeWkobixvLmRkKCkpKXJldHVybiB2Oysrdn1pZihyKXtmb3Iodj0wLGg9MDtoPHQuaTsrK2gpaWYobz1zW2hdLGsucmwoby5haygpKSl7aWYoVnQobik9PT1WdChtbnQodCx1KG8uZGQoKSw1NikpKSlyZXR1cm4gdjsrK3Z9fX1lbHNlIGZvcihoPTA7aDx0Lmk7KytoKWlmKG89c1toXSxrLnJsKG8uYWsoKSkpe2lmKG8uZGQoKT09bnVsbClyZXR1cm4gdjsrK3Z9cmV0dXJuLTF9ZnVuY3Rpb24genluKHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE0saixIO2Zvcih3bigpLFpzKHQsbmV3IEtaKSxoPVFNKHQpLEg9bmV3IGhlLGo9bmV3IGhlLGQ9bnVsbCx2PTA7aC5iIT0wOylvPXUoaC5iPT0wP251bGw6KFpuKGguYiE9MCksbGgoaCxoLmEuYSkpLDE1NyksIWR8fFJ1KGQpKkVsKGQpLzI8UnUobykqRWwobyk/KGQ9byxILmNbSC5jLmxlbmd0aF09byk6KHYrPVJ1KG8pKkVsKG8pLGouY1tqLmMubGVuZ3RoXT1vLGouYy5sZW5ndGg+MSYmKHY+UnUoZCkqRWwoZCkvMnx8aC5iPT0wKSYmKE09bmV3IHJ6KGopLEM9UnUoZCkvRWwoZCksaz16YXQoTSxlLG5ldyBDeCxuLHIscyxDKSxMaShHZihNLmUpLGspLGQ9TSxILmNbSC5jLmxlbmd0aF09TSx2PTAsai5jPU50KFFuLERlLDEsMCw1LDEpKSk7cmV0dXJuIExzKEgsaiksSH1mdW5jdGlvbiBxeW4odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLO2lmKG4ubWgoZSkmJihDPShIPWUsSD91KHIsNDkpLnhoKEgpOm51bGwpLEMpKWlmKEs9bi5iaChlLHQuYSksRz1lLnQsRz4xfHxHPT0tMSlpZihNPXUoSyw2OSksaj11KEMsNjkpLE0uZGMoKSlqLiRiKCk7ZWxzZSBmb3IoaD0hIW5vKGUpLG89MCxkPXQuYT9NLktjKCk6TS5aaCgpO2QuT2IoKTspaz11KGQuUGIoKSw1Nikscz11KFh3KHQsayksNTYpLHM/KGg/KHY9ai5YYyhzKSx2PT0tMT9qLlhoKG8scyk6byE9diYmai5qaShvLHMpKTpqLlhoKG8scyksKytvKTp0LmImJiFoJiYoai5YaChvLGspLCsrbyk7ZWxzZSBLPT1udWxsP0MuV2IobnVsbCk6KHM9WHcodCxLKSxzPT1udWxsP3QuYiYmIW5vKGUpJiZDLldiKEspOkMuV2IocykpfWZ1bmN0aW9uIEh5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGs7Zm9yKG49bmV3IE5LLHM9bmV3IGFyKGxyKGpvKGUpLmEuS2MoKSxuZXcgeikpO3pyKHMpOylpZihyPXUoTXIocyksMTcpLCFHYShyKSYmKGQ9ci5jLmksTDR0KGQseVYpKSl7aWYoaz1WNXQodCxkLHlWLG1WKSxrPT0tMSljb250aW51ZTtuLmI9Yi5NYXRoLm1heChuLmIsayksIW4uYSYmKG4uYT1uZXcgaGUpLGxlKG4uYSxkKX1mb3IoaD1uZXcgYXIobHIoRHMoZSkuYS5LYygpLG5ldyB6KSk7enIoaCk7KWlmKG89dShNcihoKSwxNyksIUdhKG8pJiYodj1vLmQuaSxMNHQodixtVikpKXtpZihrPVY1dCh0LHYsbVYseVYpLGs9PS0xKWNvbnRpbnVlO24uZD1iLk1hdGgubWF4KG4uZCxrKSwhbi5jJiYobi5jPW5ldyBoZSksbGUobi5jLHYpfXJldHVybiBufWZ1bmN0aW9uIE5sZSh0KXtURSgpO3ZhciBlLG4scixzO2lmKGU9cHModCksdDxsUy5sZW5ndGgpcmV0dXJuIGxTW2VdO2lmKHQ8PTUwKXJldHVybiBiSSgocmIoKSxSdXQpLGUpO2lmKHQ8PVdnKXJldHVybiBReChiSShENlsxXSxlKSxlKTtpZih0PjFlNil0aHJvdyBpdChuZXcgX1IoInBvd2VyIG9mIHRlbiB0b28gYmlnIikpO2lmKHQ8PXdpKXJldHVybiBReChiSShENlsxXSxlKSxlKTtmb3Iocj1iSShENlsxXSx3aSkscz1yLG49VHUodC13aSksZT1wcyh0JXdpKTt5YyhuLHdpKT4wOylzPWU0KHMsciksbj1KcChuLHdpKTtmb3Iocz1lNChzLGJJKEQ2WzFdLGUpKSxzPVF4KHMsd2kpLG49VHUodC13aSk7eWMobix3aSk+MDspcz1ReChzLHdpKSxuPUpwKG4sd2kpO3JldHVybiBzPVF4KHMsZSksc31mdW5jdGlvbiBWeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEM7Zm9yKHZyKGUsIkhpZXJhcmNoaWNhbCBwb3J0IGR1bW15IHNpemUgcHJvY2Vzc2luZyIsMSksdj1uZXcgaGUsQz1uZXcgaGUscj1YdCh5ZShRKHQsKFRlKCksSjQpKSkpLG49cioyLG89bmV3IFModC5iKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKHM9dShKKG8pLDI5KSx2LmM9TnQoUW4sRGUsMSwwLDUsMSksQy5jPU50KFFuLERlLDEsMCw1LDEpLGQ9bmV3IFMocy5hKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxMCksaC5rPT0oVm4oKSxrcykmJihrPXUoUShoLChhZSgpLG9jKSksNjEpLGs9PSh2ZSgpLFBuKT92LmNbdi5jLmxlbmd0aF09aDprPT1tciYmKEMuY1tDLmMubGVuZ3RoXT1oKSk7Y2NlKHYsITAsbiksY2NlKEMsITEsbil9b3IoZSl9ZnVuY3Rpb24gR3luKHQsZSl7dmFyIG4scixzLG8saCxkLHY7dnIoZSwiTGF5ZXIgY29uc3RyYWludCBwb3N0cHJvY2Vzc2luZyIsMSksdj10LmIsdi5jLmxlbmd0aCE9MCYmKHI9KEFuKDAsdi5jLmxlbmd0aCksdSh2LmNbMF0sMjkpKSxoPXUoTmUodix2LmMubGVuZ3RoLTEpLDI5KSxuPW5ldyBTaCh0KSxvPW5ldyBTaCh0KSxMbW4odCxyLGgsbixvKSxuLmEuYy5sZW5ndGg9PTB8fChLbSgwLHYuYy5sZW5ndGgpLFhDKHYuYywwLG4pKSxvLmEuYy5sZW5ndGg9PTB8fCh2LmNbdi5jLmxlbmd0aF09bykpLFVzKHQsKGFlKCksR2x0KSkmJihzPW5ldyBTaCh0KSxkPW5ldyBTaCh0KSxMdm4odCxzLGQpLHMuYS5jLmxlbmd0aD09MHx8KEttKDAsdi5jLmxlbmd0aCksWEModi5jLDAscykpLGQuYS5jLmxlbmd0aD09MHx8KHYuY1t2LmMubGVuZ3RoXT1kKSksb3IoZSl9ZnVuY3Rpb24gQmxlKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDO2Zvcih2PW5ldyBTKHQuYSk7di5hPHYuYy5jLmxlbmd0aDspaWYoZD11KEoodiksMTApLGQuaz09KFZuKCksa3MpJiYocz11KFEoZCwoYWUoKSxvYykpLDYxKSxzPT0odmUoKSxIbil8fHM9PUJuKSlmb3Iocj1uZXcgYXIobHIoVTAoZCkuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShNcihyKSwxNyksZT1uLmEsZS5iIT0wJiYoaz1uLmMsay5pPT1kJiYobz0oWm4oZS5iIT0wKSx1KGUuYS5hLmMsOCkpLG8uYj1ZbyhsdChjdChXcywxKSxlZSw4LDAsW2suaS5uLGsubixrLmFdKSkuYiksQz1uLmQsQy5pPT1kJiYoaD0oWm4oZS5iIT0wKSx1KGUuYy5iLmMsOCkpLGguYj1ZbyhsdChjdChXcywxKSxlZSw4LDAsW0MuaS5uLEMubixDLmFdKSkuYikpfWZ1bmN0aW9uIFV5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2O2Zvcih2cihlLCJTb3J0IEJ5IElucHV0IE1vZGVsICIrUSh0LChUZSgpLHdiKSksMSkscz0wLHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOyl7Zm9yKG49dShKKHIpLDI5KSx2PXM9PTA/MDpzLTEsZD11KE5lKHQuYix2KSwyOSksaD1uZXcgUyhuLmEpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDEwKSxWdChRKG8sY3MpKSE9PVZ0KCh1YSgpLFkyKSkmJlZ0KFEobyxjcykpIT09VnQoR2MpJiYod24oKSxacyhvLmosbmV3IGVlZShkLEpzZShvKSkpLEpiKGUsIk5vZGUgIitvKyIgcG9ydHM6ICIrby5qKSk7d24oKSxacyhuLmEsbmV3IFRuZShkLHUoUSh0LHdiKSwzMzkpLHUoUSh0LEhDdCksMzc4KSkpLEpiKGUsIkxheWVyICIrcysiOiAiK24pLCsrc31vcihlKX1mdW5jdGlvbiBXeW4odCxlKXt2YXIgbixyLHMsbztpZihvPUNsZShlKSxscyhuZXcgVG4obnVsbCwoIWUuYyYmKGUuYz1uZXcgZmUoZ2wsZSw5LDkpKSxuZXcgX24oZS5jLDE2KSkpLG5ldyBqbihvKSkscz11KFEobywoYWUoKSxWYykpLDIxKSxZNG4oZSxzKSxzLkhjKChvbygpLHZoKSkpZm9yKHI9bmV3IG5yKCghZS5jJiYoZS5jPW5ldyBmZShnbCxlLDksOSkpLGUuYykpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSwxMTgpLEM1bih0LGUsbyxuKTtyZXR1cm4gdShxZShlLChUZSgpLCQyKSksMTc0KS5nYygpIT0wJiZ3dWUoZSxvKSxqZShSZShRKG8scDl0KSkpJiZzLkZjKFFWKSxVcyhvLElPKSYmbkh0KG5ldyB3M3QoWHQoeWUoUShvLElPKSkpKSxvKSxWdChxZShlLHF5KSk9PT1WdCgoRzAoKSxzcCkpP1J4bih0LGUsbyk6c3huKHQsZSxvKSxvfWZ1bmN0aW9uIFRfKHQsZSxuLHIpe3ZhciBzLG8saDtpZih0aGlzLmo9bmV3IGhlLHRoaXMuaz1uZXcgaGUsdGhpcy5iPW5ldyBoZSx0aGlzLmM9bmV3IGhlLHRoaXMuZT1uZXcgRngsdGhpcy5pPW5ldyBQdSx0aGlzLmY9bmV3IEp0dCx0aGlzLmQ9bmV3IGhlLHRoaXMuZz1uZXcgaGUsbGUodGhpcy5iLHQpLGxlKHRoaXMuYixlKSx0aGlzLmUuYz1iLk1hdGgubWluKHQuYSxlLmEpLHRoaXMuZS5kPWIuTWF0aC5taW4odC5iLGUuYiksdGhpcy5lLmI9Yi5NYXRoLmFicyh0LmEtZS5hKSx0aGlzLmUuYT1iLk1hdGguYWJzKHQuYi1lLmIpLHM9dShRKHIsKFRlKCksU28pKSw3NCkscylmb3IoaD1laShzLDApO2guYiE9aC5kLmM7KW89dSh0aShoKSw4KSxVbXQoby5hLHQuYSkmJnJpKHRoaXMuaSxvKTtuJiZsZSh0aGlzLmosbiksbGUodGhpcy5rLHIpfWZ1bmN0aW9uIFl5bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGo7Zm9yKEM9bmV3IG4kKG5ldyBDaShuKSksZD1OdChwbCxvMCwyNSx0LmYuZS5jLmxlbmd0aCwxNiwxKSxkdnQoZCxkLmxlbmd0aCksbltlLmJdPTAsaz1uZXcgUyh0LmYuZSk7ay5hPGsuYy5jLmxlbmd0aDspdj11KEooayksMTQ0KSx2LmIhPWUuYiYmKG5bdi5iXT13aSksUjgoeEUoQyx2KSk7Zm9yKDtDLmIuYy5sZW5ndGghPTA7KWZvcihNPXUoY2l0KEMpLDE0NCksZFtNLmJdPSEwLG89d1d0KG5ldyBrZXQodC5iLE0pLDApO28uYzspcz11KFZ2dChvKSwyODIpLGo9RTFuKHMsTSksIWRbai5iXSYmKFVzKHMsKGlJKCksdlYpKT9oPVh0KHllKFEocyx2VikpKTpoPXQuYyxyPW5bTS5iXStoLHI8bltqLmJdJiYobltqLmJdPXIsZ25lKEMsaiksUjgoeEUoQyxqKSkpKX1mdW5jdGlvbiBSbGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTTtmb3Iocz0hMCxoPW5ldyBTKHQuYik7aC5hPGguYy5jLmxlbmd0aDspe2ZvcihvPXUoSihoKSwyOSksaz1DcyxDPW51bGwsdj1uZXcgUyhvLmEpO3YuYTx2LmMuYy5sZW5ndGg7KWlmKGQ9dShKKHYpLDEwKSxNPVh0KGUucFtkLnBdKStYdChlLmRbZC5wXSktZC5kLmQscj1YdChlLnBbZC5wXSkrWHQoZS5kW2QucF0pK2Quby5iK2QuZC5hLE0+ayYmcj5rKUM9ZCxrPVh0KGUucFtkLnBdKStYdChlLmRbZC5wXSkrZC5vLmIrZC5kLmE7ZWxzZXtzPSExLG4ubiYmSmIobiwiYmsgbm9kZSBwbGFjZW1lbnQgYnJlYWtzIG9uICIrZCsiIHdoaWNoIHNob3VsZCBoYXZlIGJlZW4gYWZ0ZXIgIitDKTticmVha31pZighcylicmVha31yZXR1cm4gbi5uJiZKYihuLGUrIiBpcyBmZWFzaWJsZTogIitzKSxzfWZ1bmN0aW9uIEt5bih0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGssQztmb3IoZD0tMSxDPW5ldyBTKHQpO0MuYTxDLmMuYy5sZW5ndGg7KWs9dShKKEMpLDExMiksay5nPWQtLSxzPUFyKE0kKGgkKFJpKG5ldyBUbihudWxsLG5ldyBfbihrLmYsMTYpKSxuZXcgJFEpLG5ldyB6USkpLmQpLG89QXIoTSQoaCQoUmkobmV3IFRuKG51bGwsbmV3IF9uKGsuaywxNikpLG5ldyBxUSksbmV3IHJ4KSkuZCksaD1zLHY9byxyfHwoaD1BcihNJChoJChuZXcgVG4obnVsbCxuZXcgX24oay5mLDE2KSksbmV3IEhRKSkuZCksdj1BcihNJChoJChuZXcgVG4obnVsbCxuZXcgX24oay5rLDE2KSksbmV3IFZRKSkuZCkpLGsuZD1oLGsuYT1zLGsuaT12LGsuYj1vLHY9PTA/ZnMobixrLG4uYy5iLG4uYyk6aD09MCYmZnMoZSxrLGUuYy5iLGUuYyl9ZnVuY3Rpb24gWHluKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDO2lmKG4uZC5pIT1lLmkpe2ZvcihzPW5ldyBZMCh0KSxEMChzLChWbigpLHRhKSksSnQocywoYWUoKSxfaSksbiksSnQocywoVGUoKSxjcyksKHVhKCksR2MpKSxyLmNbci5jLmxlbmd0aF09cyxoPW5ldyBNYyxVbyhoLHMpLEJzKGgsKHZlKCksQm4pKSxkPW5ldyBNYyxVbyhkLHMpLEJzKGQsSG4pLEM9bi5kLG9hKG4saCksbz1uZXcgVncsTW8obyxuKSxKdChvLFNvLG51bGwpLE9hKG8sZCksb2EobyxDKSxrPW5ldyBkYShuLmIsMCk7ay5iPGsuZC5nYygpOyl2PShabihrLmI8ay5kLmdjKCkpLHUoay5kLlhiKGsuYz1rLmIrKyksNzApKSxWdChRKHYsT2QpKT09PVZ0KChNMSgpLFp5KSkmJihKdCh2LEI2LG4pLENsKGspLGxlKG8uYix2KSk7d2NlKHMsaCxkKX19ZnVuY3Rpb24gUXluKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDO2lmKG4uYy5pIT1lLmkpZm9yKHM9bmV3IFkwKHQpLEQwKHMsKFZuKCksdGEpKSxKdChzLChhZSgpLF9pKSxuKSxKdChzLChUZSgpLGNzKSwodWEoKSxHYykpLHIuY1tyLmMubGVuZ3RoXT1zLGg9bmV3IE1jLFVvKGgscyksQnMoaCwodmUoKSxCbikpLGQ9bmV3IE1jLFVvKGQscyksQnMoZCxIbiksb2EobixoKSxvPW5ldyBWdyxNbyhvLG4pLEp0KG8sU28sbnVsbCksT2EobyxkKSxvYShvLGUpLHdjZShzLGgsZCksaz1uZXcgZGEobi5iLDApO2suYjxrLmQuZ2MoKTspdj0oWm4oay5iPGsuZC5nYygpKSx1KGsuZC5YYihrLmM9ay5iKyspLDcwKSksQz11KFEodixPZCksMjcyKSxDPT0oTTEoKSxaeSkmJihVcyh2LEI2KXx8SnQodixCNixuKSxDbChrKSxsZShvLmIsdikpfWZ1bmN0aW9uIFp5bih0LGUsbixyLHMpe3ZhciBvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3Q7Zm9yKGo9bmV3IGhlLGd0PVAkKHIpLHR0PWUqdC5hLE09MCxHPTAsbz1uZXcgSHMsaD1uZXcgSHMsZD1uZXcgaGUsTXQ9MCxTdD0wLEg9MCxLPTAsaz0wLEM9MDtndC5hLmdjKCkhPTA7KXY9bmhuKGd0LHMsaCksdiYmKGd0LmEuQmModikhPW51bGwsZC5jW2QuYy5sZW5ndGhdPXYsby5hLnpjKHYsbyksRz10LmZbdi5wXSxNdCs9dC5lW3YucF0tRyp0LmIsTT10LmNbdi5wXSxTdCs9TSp0LmIsQys9Ryp0LmIsSys9dC5lW3YucF0pLCghdnx8Z3QuYS5nYygpPT0wfHxNdD49dHQmJnQuZVt2LnBdPkcqdC5ifHxTdD49bip0dCkmJihqLmNbai5jLmxlbmd0aF09ZCxkPW5ldyBoZSxVYShoLG8pLG8uYS4kYigpLGstPUMsSD1iLk1hdGgubWF4KEgsayp0LmIrSyksays9U3QsTXQ9U3QsU3Q9MCxDPTAsSz0wKTtyZXR1cm4gbmV3IGZhKEgsail9ZnVuY3Rpb24gSnluKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0saixIO2ZvcihuPShrPW5ldyB2MSh0LmMuYikuYS52YygpLktjKCksbmV3IG0xKGspKTtuLmEuT2IoKTspZT0oZD11KG4uYS5QYigpLDQyKSx1KGQuZGQoKSwxNDkpKSxzPWUuYSxzPT1udWxsJiYocz0iIikscj1DWmUodC5jLHMpLCFyJiZzLmxlbmd0aD09MCYmKHI9X2xuKHQpKSxyJiYhYXkoci5jLGUsITEpJiZyaShyLmMsZSk7Zm9yKGg9ZWkodC5hLDApO2guYiE9aC5kLmM7KW89dSh0aShoKSw0NzgpLEM9SHJ0KHQuYyxvLmEpLEg9SHJ0KHQuYyxvLmIpLEMmJkgmJnJpKEMuYyxuZXcgZmEoSCxvLmMpKTtmb3IoQWgodC5hKSxqPWVpKHQuYiwwKTtqLmIhPWouZC5jOylNPXUodGkoaiksNDc4KSxlPVRaZSh0LmMsTS5hKSx2PUhydCh0LmMsTS5iKSxlJiZ2JiZnWGUoZSx2LE0uYyk7QWgodC5iKX1mdW5jdGlvbiB0M24odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEg7bz1uZXcgUWsodCksaD1uZXcgbmFlLHM9KGREKGguZyksZEQoaC5qKSxYdShoLmIpLGREKGguZCksZEQoaC5pKSxYdShoLmspLFh1KGguYyksWHUoaC5lKSxIPWpvZShoLG8sbnVsbCksQWNlKGgsbyksSCksZSYmKGs9bmV3IFFrKGUpLGQ9bDNuKGspLHo0dChzLGx0KGN0KENTdCwxKSxEZSw1MjcsMCxbZF0pKSksaj0hMSxNPSExLG4mJihrPW5ldyBRayhuKSxJSCBpbiBrLmEmJihqPUIwKGssSUgpLmdlKCkuYSksUWRlIGluIGsuYSYmKE09QjAoayxRZGUpLmdlKCkuYSkpLEM9eUh0KEtlZShuZXcgcjgsaiksTSksV2duKG5ldyBDWixzLEMpLElIIGluIG8uYSYmWWYobyxJSCxudWxsKSwoanx8TSkmJih2PW5ldyBfeCxJbGUoQyx2LGosTSksWWYobyxJSCx2KSkscj1uZXcgU3p0KGgpLHp1bihuZXcgbDJ0KHMpLHIpfWZ1bmN0aW9uIGUzbih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNO2ZvcihoPW5ldyBvYWUsaz1sdChjdChDciwxKSxYciwyNSwxNSxbMF0pLHM9LTEsbz0wLHI9MCx2PTA7djx0LmIuYy5sZW5ndGg7Kyt2KWlmKEM9dShOZSh0LmIsdiksNDM0KSxDLmI+MCl7aWYoczwwJiZDLmEmJihzPXYsbz1rWzBdLHI9MCkscz49MCl7aWYoZD1DLmIsdj09cyYmKGQtPXIrKyxkPT0wKSlyZXR1cm4gMDtpZighamhlKGUsayxDLGQsaCkpe3Y9cy0xLGtbMF09bztjb250aW51ZX19ZWxzZSBpZihzPS0xLCFqaGUoZSxrLEMsMCxoKSlyZXR1cm4gMH1lbHNle2lmKHM9LTEsd2EoQy5jLDApPT0zMil7aWYoTT1rWzBdLGFlZShlLGspLGtbMF0+TSljb250aW51ZX1lbHNlIGlmKEZybihlLEMuYyxrWzBdKSl7a1swXSs9Qy5jLmxlbmd0aDtjb250aW51ZX1yZXR1cm4gMH1yZXR1cm4gRjVuKGgsbik/a1swXTowfWZ1bmN0aW9uIENfKHQpe3ZhciBlLG4scixzLG8saCxkLHY7aWYoIXQuZil7aWYodj1uZXcgTTAsZD1uZXcgTTAsZT11QSxoPWUuYS56Yyh0LGUpLGg9PW51bGwpe2ZvcihvPW5ldyBucihBbyh0KSk7by5lIT1vLmkuZ2MoKTspcz11KGRyKG8pLDI2KSxpcyh2LENfKHMpKTtlLmEuQmModCkhPW51bGwsZS5hLmdjKCk9PTB9Zm9yKHI9KCF0LnMmJih0LnM9bmV3IGZlKE11LHQsMjEsMTcpKSxuZXcgbnIodC5zKSk7ci5lIT1yLmkuZ2MoKTspbj11KGRyKHIpLDE3MCksX3Qobiw5OSkmJkRyKGQsdShuLDE4KSk7aXkoZCksdC5yPW5ldyBaWXQodCwodShBdChXdCgoSHAoKSxMbikubyksNiksMTgpLGQuaSksZC5nKSxpcyh2LHQuciksaXkodiksdC5mPW5ldyBWMygodShBdChXdChMbi5vKSw1KSwxOCksdi5pKSx2LmcpLHNsKHQpLmImPS0zfXJldHVybiB0LmZ9ZnVuY3Rpb24gbjNuKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0saixILEc7Zm9yKGg9dC5vLHI9TnQoQ3IsWHIsMjUsaCwxNSwxKSxzPU50KENyLFhyLDI1LGgsMTUsMSksbj10LnAsZT1OdChDcixYciwyNSxuLDE1LDEpLG89TnQoQ3IsWHIsMjUsbiwxNSwxKSxrPTA7azxoO2srKyl7Zm9yKE09MDtNPG4mJiFmNCh0LGssTSk7KSsrTTtyW2tdPU19Zm9yKEM9MDtDPGg7QysrKXtmb3IoTT1uLTE7TT49MCYmIWY0KHQsQyxNKTspLS1NO3NbQ109TX1mb3IoSD0wO0g8bjtIKyspe2ZvcihkPTA7ZDxoJiYhZjQodCxkLEgpOykrK2Q7ZVtIXT1kfWZvcihHPTA7RzxuO0crKyl7Zm9yKGQ9aC0xO2Q+PTAmJiFmNCh0LGQsRyk7KS0tZDtvW0ddPWR9Zm9yKHY9MDt2PGg7disrKWZvcihqPTA7ajxuO2orKyl2PG9bal0mJnY+ZVtqXSYmajxzW3ZdJiZqPnJbdl0mJlNxKHQsdixqLCExLCEwKX1mdW5jdGlvbiBkeHQodCl7dmFyIGUsbixyLHMsbyxoLGQsdjtuPWplKFJlKFEodCwoSmYoKSxnYmUpKSkpLG89dC5hLmMuZCxkPXQuYS5kLmQsbj8oaD1mZChpYShuZXcgJGUoZC5hLGQuYiksbyksLjUpLHY9ZmQobmModC5lKSwuNSksZT1pYShMaShuZXcgJGUoby5hLG8uYiksaCksdiksSDJ0KHQuZCxlKSk6KHM9WHQoeWUoUSh0LmEsa2JlKSkpLHI9dC5kLG8uYT49ZC5hP28uYj49ZC5iPyhyLmE9ZC5hKyhvLmEtZC5hKS8yK3Msci5iPWQuYisoby5iLWQuYikvMi1zLXQuZS5iKTooci5hPWQuYSsoby5hLWQuYSkvMitzLHIuYj1vLmIrKGQuYi1vLmIpLzIrcyk6by5iPj1kLmI/KHIuYT1vLmErKGQuYS1vLmEpLzIrcyxyLmI9ZC5iKyhvLmItZC5iKS8yK3MpOihyLmE9by5hKyhkLmEtby5hKS8yK3Msci5iPW8uYisoZC5iLW8uYikvMi1zLXQuZS5iKSl9ZnVuY3Rpb24gJGModCxlKXt2YXIgbixyLHMsbyxoLGQsdjtpZih0PT1udWxsKXJldHVybiBudWxsO2lmKG89dC5sZW5ndGgsbz09MClyZXR1cm4iIjtmb3Iodj1OdCh4aCx5ZCwyNSxvLDE1LDEpLExtdCgwLG8sdC5sZW5ndGgpLExtdCgwLG8sdi5sZW5ndGgpLGlYdCh0LDAsbyx2LDApLG49bnVsbCxkPWUscz0wLGg9MDtzPG87cysrKXI9dltzXSxzZmUoKSxyPD0zMiYmd3Rbcl0mMj9kPyghbiYmKG49bmV3IF9oKHQpKSxMcm4obixzLWgrKykpOihkPWUsciE9MzImJighbiYmKG49bmV3IF9oKHQpKSxYbm4obixzLWgscy1oKzEsU3RyaW5nLmZyb21DaGFyQ29kZSgzMikpKSk6ZD0hMTtyZXR1cm4gZD9uPyhvPW4uYS5sZW5ndGgsbz4wP1BsKG4uYSwwLG8tMSk6IiIpOnQuc3Vic3RyKDAsby0xKTpuP24uYTp0fWZ1bmN0aW9uIGpsZSh0KXtNdyh0LG5ldyBrMihfdyhFdyhDdyhUdyhuZXcga2csQTIpLCJFTEsgRGlzQ28iKSwiTGF5b3V0ZXIgZm9yIGFycmFuZ2luZyB1bmNvbm5lY3RlZCBzdWJncmFwaHMuIFRoZSBzdWJncmFwaHMgdGhlbXNlbHZlcyBhcmUsIGJ5IGRlZmF1bHQsIG5vdCBsYWlkIG91dC4iKSxuZXcgeWcpKSkseGUodCxBMixqb3QsSWUocDd0KSkseGUodCxBMiwkb3QsSWUoUXV0KSkseGUodCxBMixFNixJZShKcGUpKSx4ZSh0LEEyLHh2LEllKGc3dCkpLHhlKHQsQTIsWnh0LEllKHJiZSkpLHhlKHQsQTIsSnh0LEllKG5iZSkpLHhlKHQsQTIsUXh0LEllKGliZSkpLHhlKHQsQTIsdDZ0LEllKGViZSkpLHhlKHQsQTIsbzZ0LEllKHRiZSkpLHhlKHQsQTIsYzZ0LEllKFh1dCkpLHhlKHQsQTIsdTZ0LEllKGQ3dCkpLHhlKHQsQTIsbDZ0LEllKGZWKSl9ZnVuY3Rpb24gZ3h0KHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE0sajtpZihvPW5ldyBZMCh0KSxEMChvLChWbigpLEhjKSksSnQobywoVGUoKSxjcyksKHVhKCksR2MpKSxzPTAsZSl7Zm9yKGg9bmV3IE1jLEp0KGgsKGFlKCksX2kpLGUpLEp0KG8sX2ksZS5pKSxCcyhoLCh2ZSgpLEJuKSksVW8oaCxvKSxqPXdkKGUuZSksaz1qLEM9MCxNPWsubGVuZ3RoO0M8TTsrK0Mpdj1rW0NdLG9hKHYsaCk7SnQoZSxKdSxvKSwrK3N9aWYobil7Zm9yKGQ9bmV3IE1jLEp0KG8sKGFlKCksX2kpLG4uaSksSnQoZCxfaSxuKSxCcyhkLCh2ZSgpLEhuKSksVW8oZCxvKSxqPXdkKG4uZyksaz1qLEM9MCxNPWsubGVuZ3RoO0M8TTsrK0Mpdj1rW0NdLE9hKHYsZCk7SnQobixKdSxvKSwrK3N9cmV0dXJuIEp0KG8sKGFlKCksSlYpLHBlKHMpKSxyLmNbci5jLmxlbmd0aF09byxvfWZ1bmN0aW9uIERxKCl7RHE9WixZQXQ9bHQoY3QoeGgsMSkseWQsMjUsMTUsWzQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDY1LDY2LDY3LDY4LDY5LDcwXSksWjRlPW5ldyBSZWdFeHAoYFsgCQpcclxmXStgKTt0cnl7YUE9bHQoY3QoeDZuLDEpLERlLDIwMTUsMCxbbmV3IGZNKChnMnQoKSx6eigieXl5eS1NTS1kZCdUJ0hIOm1tOnNzJy4nU1NTWiIsVU0oKFNSKCksU1IoKSxjUykpKSkpLG5ldyBmTSh6eigieXl5eS1NTS1kZCdUJ0hIOm1tOnNzJy4nU1NTIixVTShjUykpKSxuZXcgZk0oenooInl5eXktTU0tZGQnVCdISDptbTpzcyIsVU0oY1MpKSksbmV3IGZNKHp6KCJ5eXl5LU1NLWRkJ1QnSEg6bW0iLFVNKGNTKSkpLG5ldyBmTSh6eigieXl5eS1NTS1kZCIsVU0oY1MpKSldKX1jYXRjaCh0KXtpZih0PVdpKHQpLCFfdCh0LDc4KSl0aHJvdyBpdCh0KX19ZnVuY3Rpb24gcjNuKHQpe3ZhciBlLG4scixzO2lmKHI9SGF0KCghdC5jJiYodC5jPVZEKHQuZikpLHQuYyksMCksdC5lPT0wfHx0LmE9PTAmJnQuZiE9LTEmJnQuZTwwKXJldHVybiByO2lmKGU9Sm10KHQpPDA/MTowLG49dC5lLHM9KHIubGVuZ3RoKzErYi5NYXRoLmFicyhwcyh0LmUpKSxuZXcgSW0pLGU9PTEmJihzLmErPSItIiksdC5lPjApaWYobi09ci5sZW5ndGgtZSxuPj0wKXtmb3Iocy5hKz0iMC4iO24+TjIubGVuZ3RoO24tPU4yLmxlbmd0aCl3S3QocyxOMik7Sld0KHMsTjIscHMobikpLEdyKHMsci5zdWJzdHIoZSkpfWVsc2Ugbj1lLW4sR3IocyxQbChyLGUscHMobikpKSxzLmErPSIuIixHcihzLFJNKHIscHMobikpKTtlbHNle2ZvcihHcihzLHIuc3Vic3RyKGUpKTtuPC1OMi5sZW5ndGg7bis9TjIubGVuZ3RoKXdLdChzLE4yKTtKV3QocyxOMixwcygtbikpfXJldHVybiBzLmF9ZnVuY3Rpb24gcHh0KHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE0sajtyZXR1cm4gdj1pYShuZXcgJGUobi5hLG4uYiksdCksaz12LmEqZS5iLXYuYiplLmEsQz1lLmEqci5iLWUuYipyLmEsTT0odi5hKnIuYi12LmIqci5hKS9DLGo9ay9DLEM9PTA/az09MD8ocz1MaShuZXcgJGUobi5hLG4uYiksZmQobmV3ICRlKHIuYSxyLmIpLC41KSksbz1XcCh0LHMpLGg9V3AoTGkobmV3ICRlKHQuYSx0LmIpLGUpLHMpLGQ9Yi5NYXRoLnNxcnQoci5hKnIuYStyLmIqci5iKSouNSxvPGgmJm88PWQ/bmV3ICRlKHQuYSx0LmIpOmg8PWQ/TGkobmV3ICRlKHQuYSx0LmIpLGUpOm51bGwpOm51bGw6TT49MCYmTTw9MSYmaj49MCYmajw9MT9MaShuZXcgJGUodC5hLHQuYiksZmQobmV3ICRlKGUuYSxlLmIpLE0pKTpudWxsfWZ1bmN0aW9uIGkzbih0LGUsbil7dmFyIHIscyxvLGgsZDtpZihyPXUoUSh0LChUZSgpLHRodCkpLDIxKSxuLmE+ZS5hJiYoci5IYygoaHkoKSxXTykpP3QuYy5hKz0obi5hLWUuYSkvMjpyLkhjKFlPKSYmKHQuYy5hKz1uLmEtZS5hKSksbi5iPmUuYiYmKHIuSGMoKGh5KCksWE8pKT90LmMuYis9KG4uYi1lLmIpLzI6ci5IYyhLTykmJih0LmMuYis9bi5iLWUuYikpLHUoUSh0LChhZSgpLFZjKSksMjEpLkhjKChvbygpLHZoKSkmJihuLmE+ZS5hfHxuLmI+ZS5iKSlmb3IoZD1uZXcgUyh0LmEpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDEwKSxoLms9PShWbigpLGtzKSYmKHM9dShRKGgsb2MpLDYxKSxzPT0odmUoKSxIbik/aC5uLmErPW4uYS1lLmE6cz09bXImJihoLm4uYis9bi5iLWUuYikpO289dC5kLHQuZi5hPW4uYS1vLmItby5jLHQuZi5iPW4uYi1vLmQtby5hfWZ1bmN0aW9uIHMzbih0LGUsbil7dmFyIHIscyxvLGgsZDtpZihyPXUoUSh0LChUZSgpLHRodCkpLDIxKSxuLmE+ZS5hJiYoci5IYygoaHkoKSxXTykpP3QuYy5hKz0obi5hLWUuYSkvMjpyLkhjKFlPKSYmKHQuYy5hKz1uLmEtZS5hKSksbi5iPmUuYiYmKHIuSGMoKGh5KCksWE8pKT90LmMuYis9KG4uYi1lLmIpLzI6ci5IYyhLTykmJih0LmMuYis9bi5iLWUuYikpLHUoUSh0LChhZSgpLFZjKSksMjEpLkhjKChvbygpLHZoKSkmJihuLmE+ZS5hfHxuLmI+ZS5iKSlmb3IoaD1uZXcgUyh0LmEpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDEwKSxvLms9PShWbigpLGtzKSYmKHM9dShRKG8sb2MpLDYxKSxzPT0odmUoKSxIbik/by5uLmErPW4uYS1lLmE6cz09bXImJihvLm4uYis9bi5iLWUuYikpO2Q9dC5kLHQuZi5hPW4uYS1kLmItZC5jLHQuZi5iPW4uYi1kLmQtZC5hfWZ1bmN0aW9uIGEzbih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGo7Zm9yKGU9aWNlKHQpLEM9KGQ9bmV3IFNtKGUpLmEudmMoKS5LYygpLG5ldyBjTShkKSk7Qy5hLk9iKCk7KXtmb3Ioaz0ocz11KEMuYS5QYigpLDQyKSx1KHMuY2QoKSwxMCkpLE09MCxqPTAsTT1rLmQuZCxqPWsuby5iK2suZC5hLHQuZFtrLnBdPTAsbj1rOyhvPXQuYVtuLnBdKSE9azspcj12Zm4obixvKSx2PTAsdC5jPT0oYmQoKSxlcCk/dj1yLmQubi5iK3IuZC5hLmItci5jLm4uYi1yLmMuYS5iOnY9ci5jLm4uYityLmMuYS5iLXIuZC5uLmItci5kLmEuYixoPVh0KHQuZFtuLnBdKSt2LHQuZFtvLnBdPWgsTT1iLk1hdGgubWF4KE0sby5kLmQtaCksaj1iLk1hdGgubWF4KGosaCtvLm8uYitvLmQuYSksbj1vO249aztkbyB0LmRbbi5wXT1YdCh0LmRbbi5wXSkrTSxuPXQuYVtuLnBdO3doaWxlKG4hPWspO3QuYltrLnBdPU0ran19ZnVuY3Rpb24gU2F0KHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0sajtmb3IodC5iPSExLE09YXMsdj1DcyxqPWFzLGs9Q3Mscj10LmUuYS5lYygpLktjKCk7ci5PYigpOylmb3Iobj11KHIuUGIoKSwyNjYpLHM9bi5hLE09Yi5NYXRoLm1pbihNLHMuYyksdj1iLk1hdGgubWF4KHYscy5jK3MuYiksaj1iLk1hdGgubWluKGoscy5kKSxrPWIuTWF0aC5tYXgoayxzLmQrcy5hKSxoPW5ldyBTKG4uYyk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMzk1KSxlPW8uYSxlLmE/KEM9cy5kK28uYi5iLGQ9QytvLmMsaj1iLk1hdGgubWluKGosQyksaz1iLk1hdGgubWF4KGssZCkpOihDPXMuYytvLmIuYSxkPUMrby5jLE09Yi5NYXRoLm1pbihNLEMpLHY9Yi5NYXRoLm1heCh2LGQpKTt0LmE9bmV3ICRlKHYtTSxrLWopLHQuYz1uZXcgJGUoTSt0LmQuYSxqK3QuZC5iKX1mdW5jdGlvbiBvM24odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTTtmb3IoTT1uZXcgaGUsQz1uZXcgWnZ0KDAsbiksbz0wLGF6KEMsbmV3IElpdCgwLDAsQyxuKSkscz0wLGs9bmV3IG5yKHQpO2suZSE9ay5pLmdjKCk7KXY9dShkcihrKSwzMykscj11KE5lKEMuYSxDLmEuYy5sZW5ndGgtMSksMTg3KSxkPXMrdi5nKyh1KE5lKEMuYSwwKSwxODcpLmIuYy5sZW5ndGg9PTA/MDpuKSxkPmUmJihzPTAsbys9Qy5iK24sTS5jW00uYy5sZW5ndGhdPUMsQz1uZXcgWnZ0KG8sbikscj1uZXcgSWl0KDAsQy5mLEMsbiksYXooQyxyKSxzPTApLHIuYi5jLmxlbmd0aD09MHx8di5mPj1yLm8mJnYuZjw9ci5mfHxyLmEqLjU8PXYuZiYmci5hKjEuNT49di5mP2gzdChyLHYpOihoPW5ldyBJaXQoci5zK3IucituLEMuZixDLG4pLGF6KEMsaCksaDN0KGgsdikpLHM9di5pK3YuZztyZXR1cm4gTS5jW00uYy5sZW5ndGhdPUMsTX1mdW5jdGlvbiBUNCh0KXt2YXIgZSxuLHIscyxvLGgsZCx2O2lmKCF0LmEpe2lmKHQubz1udWxsLHY9bmV3IFd6dCh0KSxlPW5ldyBFcCxuPXVBLGQ9bi5hLnpjKHQsbiksZD09bnVsbCl7Zm9yKGg9bmV3IG5yKEFvKHQpKTtoLmUhPWguaS5nYygpOylvPXUoZHIoaCksMjYpLGlzKHYsVDQobykpO24uYS5CYyh0KSE9bnVsbCxuLmEuZ2MoKT09MH1mb3Iocz0oIXQucyYmKHQucz1uZXcgZmUoTXUsdCwyMSwxNykpLG5ldyBucih0LnMpKTtzLmUhPXMuaS5nYygpOylyPXUoZHIocyksMTcwKSxfdChyLDMyMikmJkRyKGUsdShyLDM0KSk7aXkoZSksdC5rPW5ldyBRWXQodCwodShBdChXdCgoSHAoKSxMbikubyksNyksMTgpLGUuaSksZS5nKSxpcyh2LHQuayksaXkodiksdC5hPW5ldyBWMygodShBdChXdChMbi5vKSw0KSwxOCksdi5pKSx2LmcpLHNsKHQpLmImPS0yfXJldHVybiB0LmF9ZnVuY3Rpb24gYzNuKHQsZSxuLHIscyxvLGgpe3ZhciBkLHYsayxDLE0sajtyZXR1cm4gTT0hMSx2PVdjZShuLnEsZS5mK2UuYi1uLnEuZiksaj1zLShuLnEuZSt2LWgpLGo8ci5nfHwoaz1vPT10LmMubGVuZ3RoLTEmJmo+PShBbihvLHQuYy5sZW5ndGgpLHUodC5jW29dLDIwMCkpLmUsQz0oZD1fXyhyLGosITEpLGQuYSksQz5lLmImJiFrKT8hMTooKGt8fEM8PWUuYikmJihrJiZDPmUuYj8obi5kPUMsdkQobixRYWUobixDKSkpOihiYWUobi5xLHYpLG4uYz0hMCksdkQocixzLShuLnMrbi5yKSksdEkocixuLnEuZStuLnEuZCxlLmYpLGF6KGUsciksdC5jLmxlbmd0aD5vJiYoc0koKEFuKG8sdC5jLmxlbmd0aCksdSh0LmNbb10sMjAwKSksciksKEFuKG8sdC5jLmxlbmd0aCksdSh0LmNbb10sMjAwKSkuYS5jLmxlbmd0aD09MCYmRmcodCxvKSksTT0hMCksTSl9ZnVuY3Rpb24gYnh0KHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDO2lmKEM9b3UodC5lLlRnKCksZSkscz0wLG89dSh0LmcsMTE5KSx2PW51bGwsdG8oKSx1KGUsNjYpLk9qKCkpe2ZvcihkPTA7ZDx0Lmk7KytkKWlmKGg9b1tkXSxDLnJsKGguYWsoKSkpe2lmKHlpKGgsbikpe3Y9aDticmVha30rK3N9fWVsc2UgaWYobiE9bnVsbCl7Zm9yKGQ9MDtkPHQuaTsrK2QpaWYoaD1vW2RdLEMucmwoaC5haygpKSl7aWYoeWkobixoLmRkKCkpKXt2PWg7YnJlYWt9KytzfX1lbHNlIGZvcihkPTA7ZDx0Lmk7KytkKWlmKGg9b1tkXSxDLnJsKGguYWsoKSkpe2lmKGguZGQoKT09bnVsbCl7dj1oO2JyZWFrfSsrc31yZXR1cm4gdiYmKHhsKHQuZSkmJihrPWUuJGooKT9uZXcganJ0KHQuZSw0LGUsbixudWxsLHMsITApOkdwKHQsZS5LaigpPzI6MSxlLG4sZS56aigpLC0xLCEwKSxyP3IuRWkoayk6cj1rKSxyPUVJKHQsdixyKSkscn1mdW5jdGlvbiBBYXQodCxlLG4scixzLG8saCl7dmFyIGQsdixrLEMsTSxqLEgsRyxLO3N3aXRjaChHPTAsSz0wLHY9cy5jLGQ9cy5iLEM9bi5mLEg9bi5nLGUuZyl7Y2FzZSAwOkc9ci5pK3IuZytoLHQuYz9LPUIwbihHLG8scixoKTpLPXIuaixqPWIuTWF0aC5tYXgodixHK0gpLGs9Yi5NYXRoLm1heChkLEsrQyk7YnJlYWs7Y2FzZSAxOks9ci5qK3IuZitoLHQuYz9HPU4wbihLLG8scixoKTpHPXIuaSxqPWIuTWF0aC5tYXgodixHK0gpLGs9Yi5NYXRoLm1heChkLEsrQyk7YnJlYWs7Y2FzZSAyOkc9ditoLEs9MCxqPXYraCtILGs9Yi5NYXRoLm1heChkLEMpO2JyZWFrO2Nhc2UgMzpHPTAsSz1kK2gsaj1iLk1hdGgubWF4KHYsSCksaz1kK2grQzticmVhaztkZWZhdWx0OnRocm93IGl0KG5ldyBGbigiSWxsZWdhbFBsYWNlbWVudE9wdGlvbi4iKSl9cmV0dXJuIE09bmV3IGIzdCh0LmEsaixrLGUsRyxLKSxNfWZ1bmN0aW9uIHUzbih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGo7aWYoZD10LmQsTT11KFEodCwoYWUoKSx6NikpLDE1KSxlPXUoUSh0LE42KSwxNSksISghTSYmIWUpKXtpZihvPVh0KHllKG95KHQsKFRlKCksbGh0KSkpKSxoPVh0KHllKG95KHQseTl0KSkpLGo9MCxNKXtmb3Ioaz0wLHM9TS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwxMCksaz1iLk1hdGgubWF4KGssci5vLmIpLGorPXIuby5hO2orPW8qKE0uZ2MoKS0xKSxkLmQrPWsraH1pZihuPTAsZSl7Zm9yKGs9MCxzPWUuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTApLGs9Yi5NYXRoLm1heChrLHIuby5iKSxuKz1yLm8uYTtuKz1vKihlLmdjKCktMSksZC5hKz1rK2h9dj1iLk1hdGgubWF4KGosbiksdj50Lm8uYSYmKEM9KHYtdC5vLmEpLzIsZC5iPWIuTWF0aC5tYXgoZC5iLEMpLGQuYz1iLk1hdGgubWF4KGQuYyxDKSl9fWZ1bmN0aW9uIGwzbih0KXt2YXIgZSxuLHIscyxvLGgsZCx2O2ZvcihvPW5ldyB2WnQsWVhlKG8sKGk2KCksRzNlKSkscj0ocz15aXQodCxOdChBZSxlZSwyLDAsNiwxKSksbmV3IG14KG5ldyB5bChuZXcgRWV0KHQscykuYikpKTtyLmI8ci5kLmdjKCk7KW49KFpuKHIuYjxyLmQuZ2MoKSksQnIoci5kLlhiKHIuYz1yLmIrKykpKSxoPUV4dChBYixuKSxoJiYoZT1CMCh0LG4pLGUuamUoKT9kPWUuamUoKS5hOmUuZ2UoKT9kPSIiK2UuZ2UoKS5hOmUuaGUoKT9kPSIiK2UuaGUoKS5hOmQ9ZS5JYigpLHY9eHh0KGgsZCksdiE9bnVsbCYmKChOdShoLmosKFFmKCksZWEpKXx8TnUoaC5qLHFuKSkmJnpEKHVpdChvLHJzKSxoLHYpLE51KGguaixQZCkmJnpEKHVpdChvLFlzKSxoLHYpLE51KGguaixWMikmJnpEKHVpdChvLGdsKSxoLHYpLE51KGguaixycCkmJnpEKHVpdChvLHFvKSxoLHYpKSk7cmV0dXJuIG99ZnVuY3Rpb24gSXEodCxlLG4scil7dmFyIHMsbyxoLGQsdixrO2lmKHY9b3UodC5lLlRnKCksZSksbz11KHQuZywxMTkpLFgwKHQuZSxlKSl7Zm9yKHM9MCxkPTA7ZDx0Lmk7KytkKWlmKGg9b1tkXSx2LnJsKGguYWsoKSkpe2lmKHM9PW4pcmV0dXJuIHRvKCksdShlLDY2KS5PaigpP2g6KGs9aC5kZCgpLGshPW51bGwmJnImJl90KGUsOTkpJiZ1KGUsMTgpLkJiJkthJiYoaz1iXyh0LGUsZCxzLGspKSxrKTsrK3N9dGhyb3cgaXQobmV3IHlvKEpfK24rRDIrcykpfWVsc2V7Zm9yKHM9MCxkPTA7ZDx0Lmk7KytkKXtpZihoPW9bZF0sdi5ybChoLmFrKCkpKXJldHVybiB0bygpLHUoZSw2NikuT2ooKT9oOihrPWguZGQoKSxrIT1udWxsJiZyJiZfdChlLDk5KSYmdShlLDE4KS5CYiZLYSYmKGs9Yl8odCxlLGQscyxrKSksayk7KytzfXJldHVybiBlLnpqKCl9fWZ1bmN0aW9uIFNJKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDO2lmKHM9dSh0LmcsMTE5KSxYMCh0LmUsZSkpcmV0dXJuIHRvKCksdShlLDY2KS5PaigpP25ldyBxaihlLHQpOm5ldyBCTShlLHQpO2ZvcihrPW91KHQuZS5UZygpLGUpLHI9MCxkPTA7ZDx0Lmk7KytkKXtpZihvPXNbZF0saD1vLmFrKCksay5ybChoKSl7aWYodG8oKSx1KGUsNjYpLk9qKCkpcmV0dXJuIG87aWYoaD09KGQ2KCksdGspfHxoPT1KNil7Zm9yKHY9bmV3IE9sKCRvKG8uZGQoKSkpOysrZDx0Lmk7KW89c1tkXSxoPW8uYWsoKSwoaD09dGt8fGg9PUo2KSYmR3IodiwkbyhvLmRkKCkpKTtyZXR1cm4gZ3d0KHUoZS5ZaigpLDE0OCksdi5hKX1lbHNlIHJldHVybiBDPW8uZGQoKSxDIT1udWxsJiZuJiZfdChlLDk5KSYmdShlLDE4KS5CYiZLYSYmKEM9Yl8odCxlLGQscixDKSksQ30rK3J9cmV0dXJuIGUuemooKX1mdW5jdGlvbiBfXyh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGo7Zm9yKG89MCxoPXQudCxzPTAscj0wLHY9MCxqPTAsTT0wLG4mJih0Lm4uYz1OdChRbixEZSwxLDAsNSwxKSxsZSh0Lm4sbmV3IEUkKHQucyx0LnQsdC5pKSkpLGQ9MCxDPW5ldyBTKHQuYik7Qy5hPEMuYy5jLmxlbmd0aDspaz11KEooQyksMzMpLG8ray5nKyhkPjA/dC5pOjApPmUmJnY+MCYmKG89MCxoKz12K3QuaSxzPWIuTWF0aC5tYXgocyxqKSxyKz12K3QuaSx2PTAsaj0wLG4mJigrK00sbGUodC5uLG5ldyBFJCh0LnMsaCx0LmkpKSksZD0wKSxqKz1rLmcrKGQ+MD90Lmk6MCksdj1iLk1hdGgubWF4KHYsay5mKSxuJiZXM3QodShOZSh0Lm4sTSksMjExKSxrKSxvKz1rLmcrKGQ+MD90Lmk6MCksKytkO3JldHVybiBzPWIuTWF0aC5tYXgocyxqKSxyKz12LG4mJih0LnI9cyx0LmQ9cixRM3QodC5qKSksbmV3IGFoKHQucyx0LnQscyxyKX1mdW5jdGlvbiBEYyh0LGUsbixyLHMpe0dkKCk7dmFyIG8saCxkLHYsayxDLE0saixIO2lmKGJ2dCh0LCJzcmMiKSxidnQobiwiZGVzdCIpLGo9b2wodCksdj1vbChuKSxqd3QoKGouaSY0KSE9MCwic3JjVHlwZSBpcyBub3QgYW4gYXJyYXkiKSxqd3QoKHYuaSY0KSE9MCwiZGVzdFR5cGUgaXMgbm90IGFuIGFycmF5IiksTT1qLmMsaD12LmMsand0KE0uaSYxP009PWg6KGguaSYxKT09MCwiQXJyYXkgdHlwZXMgZG9uJ3QgbWF0Y2giKSxIPXQubGVuZ3RoLGs9bi5sZW5ndGgsZTwwfHxyPDB8fHM8MHx8ZStzPkh8fHIrcz5rKXRocm93IGl0KG5ldyBEcHQpO2lmKCEoTS5pJjEpJiZqIT12KWlmKEM9dTIodCksbz11MihuKSxWdCh0KT09PVZ0KG4pJiZlPHIpZm9yKGUrPXMsZD1yK3M7ZC0tID5yOyl0cyhvLGQsQ1stLWVdKTtlbHNlIGZvcihkPXIrcztyPGQ7KXRzKG8scisrLENbZSsrXSk7ZWxzZSBzPjAmJm41dCh0LGUsbixyLHMsITApfWZ1bmN0aW9uIExhdCgpe0xhdD1aLHFnZT1sdChjdChDciwxKSxYciwyNSwxNSxbU2EsMTE2MjI2MTQ2NyxEXywxMjIwNzAzMTI1LDM2Mjc5NzA1NiwxOTc3MzI2NzQzLERfLDM4NzQyMDQ4OSxHcSwyMTQzNTg4ODEsNDI5OTgxNjk2LDgxNTczMDcyMSwxNDc1Nzg5MDU2LDE3MDg1OTM3NSwyNjg0MzU0NTYsNDEwMzM4NjczLDYxMjIyMDAzMiw4OTM4NzE3MzksMTI4ZTcsMTgwMTA4ODU0MSwxMTMzNzk5MDQsMTQ4MDM1ODg5LDE5MTEwMjk3NiwyNDQxNDA2MjUsMzA4OTE1Nzc2LDM4NzQyMDQ4OSw0ODE4OTAzMDQsNTk0ODIzMzIxLDcyOWU2LDg4NzUwMzY4MSxEXywxMjkxNDY3OTY5LDE1NDQ4MDQ0MTYsMTgzODI2NTYyNSw2MDQ2NjE3Nl0pLEhnZT1sdChjdChDciwxKSxYciwyNSwxNSxbLTEsLTEsMzEsMTksMTUsMTMsMTEsMTEsMTAsOSw5LDgsOCw4LDgsNyw3LDcsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNV0pfWZ1bmN0aW9uIGgzbih0KXt2YXIgZSxuLHIscyxvLGgsZCx2O2ZvcihzPW5ldyBTKHQuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShKKHMpLDI5KSxoPW5ldyBTKFd3KHIuYSkpO2guYTxoLmMuYy5sZW5ndGg7KWlmKG89dShKKGgpLDEwKSx4ZWUobykmJihuPXUoUShvLChhZSgpLEl2KSksMzA1KSwhbi5nJiZuLmQpKWZvcihlPW4sdj1uLmQ7djspTHVlKHYuaSx2LmssITEsITApLGtEKGUuYSksa0Qodi5pKSxrRCh2LmspLGtEKHYuYiksb2Eodi5jLGUuYy5kKSxvYShlLmMsbnVsbCksRW8oZS5hLG51bGwpLEVvKHYuaSxudWxsKSxFbyh2LmssbnVsbCksRW8odi5iLG51bGwpLGQ9bmV3IHNtdChlLmksdi5hLGUuZSx2Lmosdi5mKSxkLms9ZS5rLGQubj1lLm4sZC5iPWUuYixkLmM9di5jLGQuZz1lLmcsZC5kPXYuZCxKdChlLmksSXYsZCksSnQodi5hLEl2LGQpLHY9di5kLGU9ZH1mdW5jdGlvbiB5eSh0LGUpe3ZhciBuLHIscyxvLGg7aWYoaD11KGUsMTM2KSx2NCh0KSx2NChoKSxoLmIhPW51bGwpe2lmKHQuYz0hMCx0LmI9PW51bGwpe3QuYj1OdChDcixYciwyNSxoLmIubGVuZ3RoLDE1LDEpLERjKGguYiwwLHQuYiwwLGguYi5sZW5ndGgpO3JldHVybn1mb3Iobz1OdChDcixYciwyNSx0LmIubGVuZ3RoK2guYi5sZW5ndGgsMTUsMSksbj0wLHI9MCxzPTA7bjx0LmIubGVuZ3RofHxyPGguYi5sZW5ndGg7KW4+PXQuYi5sZW5ndGg/KG9bcysrXT1oLmJbcisrXSxvW3MrK109aC5iW3IrK10pOnI+PWguYi5sZW5ndGg/KG9bcysrXT10LmJbbisrXSxvW3MrK109dC5iW24rK10pOmguYltyXTx0LmJbbl18fGguYltyXT09PXQuYltuXSYmaC5iW3IrMV08dC5iW24rMV0/KG9bcysrXT1oLmJbcisrXSxvW3MrK109aC5iW3IrK10pOihvW3MrK109dC5iW24rK10sb1tzKytdPXQuYltuKytdKTt0LmI9b319ZnVuY3Rpb24gZjNuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE07cmV0dXJuIG49amUoUmUoUSh0LChhZSgpLFJ5KSkpKSxkPWplKFJlKFEoZSxSeSkpKSxyPXUoUSh0LHIxKSwxMSksdj11KFEoZSxyMSksMTEpLHM9dShRKHQsJGgpLDExKSxrPXUoUShlLCRoKSwxMSksQz0hIXImJnI9PXYsTT0hIXMmJnM9PWssIW4mJiFkP25ldyBDd3QodShKKG5ldyBTKHQuaikpLDExKS5wPT11KEoobmV3IFMoZS5qKSksMTEpLnAsQyxNKToobz0oIWplKFJlKFEodCxSeSkpKXx8amUoUmUoUSh0LEFPKSkpKSYmKCFqZShSZShRKGUsUnkpKSl8fGplKFJlKFEoZSxBTykpKSksaD0oIWplKFJlKFEodCxSeSkpKXx8IWplKFJlKFEodCxBTykpKSkmJighamUoUmUoUShlLFJ5KSkpfHwhamUoUmUoUShlLEFPKSkpKSxuZXcgQ3d0KEMmJm98fE0mJmgsQyxNKSl9ZnVuY3Rpb24gZDNuKHQpe3ZhciBlLG4scixzLG8saCxkLHY7Zm9yKHI9MCxuPTAsdj1uZXcgWmksZT0wLGQ9bmV3IFModC5uKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwyMTEpLGguYy5jLmxlbmd0aD09MD9mcyh2LGgsdi5jLmIsdi5jKToocj1iLk1hdGgubWF4KHIsaC5kKSxuKz1oLmErKGU+MD90Lmk6MCkpLCsrZTtmb3IoRWhuKHQubix2KSx0LmQ9bix0LnI9cix0Lmc9MCx0LmY9MCx0LmU9MCx0Lm89YXMsdC5wPWFzLG89bmV3IFModC5iKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwzMyksdC5wPWIuTWF0aC5taW4odC5wLHMuZyksdC5nPWIuTWF0aC5tYXgodC5nLHMuZyksdC5mPWIuTWF0aC5tYXgodC5mLHMuZiksdC5vPWIuTWF0aC5taW4odC5vLHMuZiksdC5lKz1zLmYrdC5pO3QuYT10LmUvdC5iLmMubGVuZ3RoLXQuaSooKHQuYi5jLmxlbmd0aC0xKS90LmIuYy5sZW5ndGgpLFEzdCh0LmopfWZ1bmN0aW9uICRsZSh0KXt2YXIgZSxuLHIscztyZXR1cm4gdC5EYiY2ND9YaXQodCk6KGU9bmV3IE9sKHc4dCkscj10Lmsscj9HcihHcigoZS5hKz0nICInLGUpLHIpLCciJyk6KCF0Lm4mJih0Lm49bmV3IGZlKHFvLHQsMSw3KSksdC5uLmk+MCYmKHM9KCF0Lm4mJih0Lm49bmV3IGZlKHFvLHQsMSw3KSksdShBdCh0Lm4sMCksMTM3KSkuYSwhc3x8R3IoR3IoKGUuYSs9JyAiJyxlKSxzKSwnIicpKSksbj0oIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSwhKHQuYi5pPD0xJiYoIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmMuaTw9MSkpKSxuP2UuYSs9IiBbIjplLmErPSIgIixHcihlLF8ydChuZXcgdmV0LG5ldyBucih0LmIpKSksbiYmKGUuYSs9Il0iKSxlLmErPVVvdCxuJiYoZS5hKz0iWyIpLEdyKGUsXzJ0KG5ldyB2ZXQsbmV3IG5yKHQuYykpKSxuJiYoZS5hKz0iXSIpLGUuYSl9ZnVuY3Rpb24gTWF0KHQsZSl7dmFyIG4scixzLG8saCxkLHY7aWYodC5hKXtpZihkPXQuYS5uZSgpLHY9bnVsbCxkIT1udWxsP2UuYSs9IiIrZDooaD10LmEuRGooKSxoIT1udWxsJiYobz1oZChoLEN1KDkxKSksbyE9LTE/KHY9aC5zdWJzdHIobyksZS5hKz0iIitQbChoPT1udWxsP191OihPbihoKSxoKSwwLG8pKTplLmErPSIiK2gpKSx0LmQmJnQuZC5pIT0wKXtmb3Iocz0hMCxlLmErPSI8IixyPW5ldyBucih0LmQpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSw4Nykscz9zPSExOmUuYSs9WWEsTWF0KG4sZSk7ZS5hKz0iPiJ9diE9bnVsbCYmKGUuYSs9IiIrdil9ZWxzZSB0LmU/KGQ9dC5lLnpiLGQhPW51bGwmJihlLmErPSIiK2QpKTooZS5hKz0iPyIsdC5iPyhlLmErPSIgc3VwZXIgIixNYXQodC5iLGUpKTp0LmYmJihlLmErPSIgZXh0ZW5kcyAiLE1hdCh0LmYsZSkpKX1mdW5jdGlvbiBnM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuO2ZvcihLdD10LmMsdWU9ZS5jLG49Um8oS3QuYSx0LDApLHI9Um8odWUuYSxlLDApLFN0PXUob3YodCwoc28oKSx0bCkpLktjKCkuUGIoKSwxMSksUWU9dShvdih0LG51KS5LYygpLlBiKCksMTEpLFJ0PXUob3YoZSx0bCkuS2MoKS5QYigpLDExKSxSbj11KG92KGUsbnUpLktjKCkuUGIoKSwxMSksZ3Q9d2QoU3QuZSksX2U9d2QoUWUuZyksTXQ9d2QoUnQuZSksV2U9d2QoUm4uZyksbHkodCxyLHVlKSxoPU10LEM9MCxHPWgubGVuZ3RoO0M8RzsrK0Mpcz1oW0NdLG9hKHMsU3QpO2ZvcihkPVdlLE09MCxLPWQubGVuZ3RoO008SzsrK00pcz1kW01dLE9hKHMsUWUpO2ZvcihseShlLG4sS3QpLHY9Z3Qsaj0wLHR0PXYubGVuZ3RoO2o8dHQ7KytqKXM9dltqXSxvYShzLFJ0KTtmb3Iobz1fZSxrPTAsSD1vLmxlbmd0aDtrPEg7KytrKXM9b1trXSxPYShzLFJuKX1mdW5jdGlvbiB6bGUodCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEM7aWYobz1QeihyKSxkPWplKFJlKFEociwoVGUoKSx1OXQpKSkpLChkfHxqZShSZShRKHQsbEcpKSkpJiYhRzModShRKHQsY3MpLDk4KSkpcz1hNihvKSx2PWl4dCh0LG4sbj09KHNvKCksbnUpP3M6WUQocykpO2Vsc2Ugc3dpdGNoKHY9bmV3IE1jLFVvKHYsdCksZT8oQz12Lm4sQy5hPWUuYS10Lm4uYSxDLmI9ZS5iLXQubi5iLFphZShDLDAsMCx0Lm8uYSx0Lm8uYiksQnModixobGUodixvKSkpOihzPWE2KG8pLEJzKHYsbj09KHNvKCksbnUpP3M6WUQocykpKSxoPXUoUShyLChhZSgpLFZjKSksMjEpLGs9di5qLG8uZyl7Y2FzZSAyOmNhc2UgMTooaz09KHZlKCksUG4pfHxrPT1tcikmJmguRmMoKG9vKCksVzQpKTticmVhaztjYXNlIDQ6Y2FzZSAzOihrPT0odmUoKSxIbil8fGs9PUJuKSYmaC5GYygob28oKSxXNCkpfXJldHVybiB2fWZ1bmN0aW9uIHd4dCh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQztyZXR1cm4gYi5NYXRoLmFicyhlLnMtZS5jKTxFZHx8Yi5NYXRoLmFicyhuLnMtbi5jKTxFZD8wOihyPVpjZSh0LGUuaixuLmUpLHM9WmNlKHQsbi5qLGUuZSksbz1yPT0tMXx8cz09LTEsaD0wLG8/KHI9PS0xJiYobmV3IGkyKChVZigpLG1iKSxuLGUsMSksKytoKSxzPT0tMSYmKG5ldyBpMigoVWYoKSxtYiksZSxuLDEpLCsraCkpOihkPWM0KGUuaixuLnMsbi5jKSxkKz1jNChuLmUsZS5zLGUuYyksdj1jNChuLmosZS5zLGUuYyksdis9YzQoZS5lLG4ucyxuLmMpLGs9cisxNipkLEM9cysxNip2LGs8Qz9uZXcgaTIoKFVmKCksS3kpLGUsbixDLWspOms+Qz9uZXcgaTIoKFVmKCksS3kpLG4sZSxrLUMpOms+MCYmQz4wJiYobmV3IGkyKChVZigpLEt5KSxlLG4sMCksbmV3IGkyKEt5LG4sZSwwKSkpLGgpfWZ1bmN0aW9uIHFsZSh0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3IoaD1uZXcgcDIobmV3IENnKHQuZi5iKS5hKTtoLmI7KXtpZihvPVp3KGgpLHM9dShvLmNkKCksNTk0KSxlPT0xKXtpZihzLmdmKCkhPShhbygpLHJnKSYmcy5nZigpIT1uZyljb250aW51ZX1lbHNlIGlmKHMuZ2YoKSE9KGFvKCksemgpJiZzLmdmKCkhPUNmKWNvbnRpbnVlO3N3aXRjaChyPXUodShvLmRkKCksNDYpLmIsODEpLGQ9dSh1KG8uZGQoKSw0NikuYSwxODkpLG49ZC5jLHMuZ2YoKS5nKXtjYXNlIDI6ci5nLmM9dC5lLmEsci5nLmI9Yi5NYXRoLm1heCgxLHIuZy5iK24pO2JyZWFrO2Nhc2UgMTpyLmcuYz1yLmcuYytuLHIuZy5iPWIuTWF0aC5tYXgoMSxyLmcuYi1uKTticmVhaztjYXNlIDQ6ci5nLmQ9dC5lLmIsci5nLmE9Yi5NYXRoLm1heCgxLHIuZy5hK24pO2JyZWFrO2Nhc2UgMzpyLmcuZD1yLmcuZCtuLHIuZy5hPWIuTWF0aC5tYXgoMSxyLmcuYS1uKX19fWZ1bmN0aW9uIHAzbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEs7Zm9yKGQ9TnQoQ3IsWHIsMjUsZS5iLmMubGVuZ3RoLDE1LDEpLGs9TnQoZmx0LG9lLDI2NyxlLmIuYy5sZW5ndGgsMCwxKSx2PU50KGwwLFlnLDEwLGUuYi5jLmxlbmd0aCwwLDEpLE09dC5hLGo9MCxIPU0ubGVuZ3RoO2o8SDsrK2ope2ZvcihDPU1bal0sSz0wLGg9bmV3IFMoQy5lKTtoLmE8aC5jLmMubGVuZ3RoOylzPXUoSihoKSwxMCkscj1vMnQocy5jKSwrK2Rbcl0sRz1YdCh5ZShRKGUsKFRlKCksVGYpKSkpLGRbcl0+MCYmdltyXSYmKEc9VzModC5iLHZbcl0scykpLEs9Yi5NYXRoLm1heChLLHMuYy5jLmIrRyk7Zm9yKG89bmV3IFMoQy5lKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxMCkscy5uLmI9SytzLmQuZCxuPXMuYyxuLmMuYj1LK3MuZC5kK3Muby5iK3MuZC5hLGtbUm8obi5iLmIsbiwwKV09cy5rLHZbUm8obi5iLmIsbiwwKV09c319ZnVuY3Rpb24gSGxlKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0sajtmb3Iocj1uZXcgYXIobHIoSzAoZSkuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShNcihyKSw3OSksX3QoQXQoKCFuLmImJihuLmI9bmV3IENuKGJyLG4sNCw3KSksbi5iKSwwKSwxODYpfHwodj1Ebyh1KEF0KCghbi5jJiYobi5jPW5ldyBDbihicixuLDUsOCkpLG4uYyksMCksODIpKSx3XyhuKXx8KGg9ZS5pK2UuZy8yLGQ9ZS5qK2UuZi8yLEM9di5pK3YuZy8yLE09di5qK3YuZi8yLGo9bmV3IENhLGouYT1DLWgsai5iPU0tZCxvPW5ldyAkZShqLmEsai5iKSxtRShvLGUuZyxlLmYpLGouYS09by5hLGouYi09by5iLGg9Qy1qLmEsZD1NLWouYixrPW5ldyAkZShqLmEsai5iKSxtRShrLHYuZyx2LmYpLGouYS09ay5hLGouYi09ay5iLEM9aCtqLmEsTT1kK2ouYixzPXg0KG4sITAsITApLEc4KHMsaCksVzgocyxkKSxWOChzLEMpLFU4KHMsTSksSGxlKHQsdikpKX1mdW5jdGlvbiBWbGUodCl7TXcodCxuZXcgazIoX3coRXcoQ3coVHcobmV3IGtnLGt2KSwiRUxLIFNQT3JFIENvbXBhY3Rpb24iKSwiU2hyaW5rVHJlZSBpcyBhIGNvbXBhY3Rpb24gYWxnb3JpdGhtIHRoYXQgbWFpbnRhaW5zIHRoZSB0b3BvbG9neSBvZiBhIGxheW91dC4gVGhlIHJlbG9jYXRpb24gb2YgZGlhZ3JhbSBlbGVtZW50cyBpcyBiYXNlZCBvbiBjb250cmFjdGluZyBhIHNwYW5uaW5nIHRyZWUuIiksbmV3ICRMKSkpLHhlKHQsa3YsQmN0LEllKEhHKSkseGUodCxrdixvOHQsSWUoYWZ0KSkseGUodCxrdixjOHQsSWUoc2Z0KSkseGUodCxrdixSY3QsSWUobFN0KSkseGUodCxrdixqY3QsSWUoaWZ0KSkseGUodCxrdix4dix1U3QpLHhlKHQsa3YsQ3ksOCkseGUodCxrdiwkY3QsSWUoRDNlKSkseGUodCxrdix1OHQsSWUob1N0KSkseGUodCxrdixsOHQsSWUoY1N0KSkseGUodCxrdixKSSwoTm4oKSwhMSkpfWZ1bmN0aW9uIGIzbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNO2Zvcih2cihlLCJTaW1wbGUgbm9kZSBwbGFjZW1lbnQiLDEpLE09dShRKHQsKGFlKCksUTQpKSwzMDQpLGQ9MCxvPW5ldyBTKHQuYik7by5hPG8uYy5jLmxlbmd0aDspe2ZvcihyPXUoSihvKSwyOSksaD1yLmMsaC5iPTAsbj1udWxsLGs9bmV3IFMoci5hKTtrLmE8ay5jLmMubGVuZ3RoOyl2PXUoSihrKSwxMCksbiYmKGguYis9TTN0KHYsbixNLmMpKSxoLmIrPXYuZC5kK3Yuby5iK3YuZC5hLG49djtkPWIuTWF0aC5tYXgoZCxoLmIpfWZvcihzPW5ldyBTKHQuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShKKHMpLDI5KSxoPXIuYyxDPShkLWguYikvMixuPW51bGwsaz1uZXcgUyhyLmEpO2suYTxrLmMuYy5sZW5ndGg7KXY9dShKKGspLDEwKSxuJiYoQys9TTN0KHYsbixNLmMpKSxDKz12LmQuZCx2Lm4uYj1DLEMrPXYuby5iK3YuZC5hLG49djtvcihlKX1mdW5jdGlvbiB3M24odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTTtpZihyLmdjKCk9PTApcmV0dXJuITE7aWYodj0odG8oKSx1KGUsNjYpLk9qKCkpLGg9dj9yOm5ldyBRdyhyLmdjKCkpLFgwKHQuZSxlKSl7aWYoZS5oaSgpKWZvcihDPXIuS2MoKTtDLk9iKCk7KWs9Qy5QYigpLE1xKHQsZSxrLF90KGUsOTkpJiYodShlLDE4KS5CYiZLYSkhPTApfHwobz1aZChlLGspLGguRmMobykpO2Vsc2UgaWYoIXYpZm9yKEM9ci5LYygpO0MuT2IoKTspaz1DLlBiKCksbz1aZChlLGspLGguRmMobyl9ZWxzZXtmb3IoTT1vdSh0LmUuVGcoKSxlKSxzPXUodC5nLDExOSksZD0wO2Q8dC5pOysrZClpZihvPXNbZF0sTS5ybChvLmFrKCkpKXRocm93IGl0KG5ldyBGbihhTykpO2lmKHIuZ2MoKT4xKXRocm93IGl0KG5ldyBGbihhTykpO3Z8fChvPVpkKGUsci5LYygpLlBiKCkpLGguRmMobykpfXJldHVybiBTeXQodCxXNHQodCxlLG4pLGgpfWZ1bmN0aW9uIHYzbih0LGUpe3ZhciBuLHIscyxvO2ZvcihlY24oZS5iLmopLGxzKHd1KG5ldyBUbihudWxsLG5ldyBfbihlLmQsMTYpKSxuZXcgWFgpLG5ldyBRWCksbz1uZXcgUyhlLmQpO28uYTxvLmMuYy5sZW5ndGg7KXtzd2l0Y2gocz11KEoobyksMTAxKSxzLmUuZyl7Y2FzZSAwOm49dShOZShzLmosMCksMTEzKS5kLmosc1Iocyx1KE53KHQkKHUoQWkocy5rLG4pLDE1KS5PYygpLEg0KSksMTEzKSksaVIocyx1KE53KEpqKHUoQWkocy5rLG4pLDE1KS5PYygpLEg0KSksMTEzKSk7YnJlYWs7Y2FzZSAxOnI9dDR0KHMpLHNSKHMsdShOdyh0JCh1KEFpKHMuayxyWzBdKSwxNSkuT2MoKSxINCkpLDExMykpLGlSKHMsdShOdyhKaih1KEFpKHMuayxyWzFdKSwxNSkuT2MoKSxINCkpLDExMykpO2JyZWFrO2Nhc2UgMjpncG4odCxzKTticmVhaztjYXNlIDM6TXduKHMpO2JyZWFrO2Nhc2UgNDpQd24odCxzKX10Y24ocyl9dC5hPW51bGx9ZnVuY3Rpb24gRGF0KHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDO3JldHVybiByPXQuYS5vPT0oQzEoKSxIMSk/YXM6Q3MsZD1tbGUodCxuZXcgeUd0KGUsbikpLCFkLmEmJmQuYz8ocmkodC5kLGQpLHIpOmQuYT8ocz1kLmEuYyx2PWQuYS5kLG4/KGs9dC5hLmM9PShiZCgpLHp2KT92OnMsbz10LmEuYz09enY/czp2LGg9dC5hLmdbby5pLnBdLEM9WHQodC5hLnBbaC5wXSkrWHQodC5hLmRbby5pLnBdKStvLm4uYitvLmEuYi1YdCh0LmEuZFtrLmkucF0pLWsubi5iLWsuYS5iKTooaz10LmEuYz09KGJkKCksZXApP3Y6cyxvPXQuYS5jPT1lcD9zOnYsQz1YdCh0LmEucFt0LmEuZ1tvLmkucF0ucF0pK1h0KHQuYS5kW28uaS5wXSkrby5uLmIrby5hLmItWHQodC5hLmRbay5pLnBdKS1rLm4uYi1rLmEuYiksdC5hLm5bdC5hLmdbcy5pLnBdLnBdPShObigpLCEwKSx0LmEublt0LmEuZ1t2LmkucF0ucF09ITAsQyk6cn1mdW5jdGlvbiBPcSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQztpZihYMCh0LmUsZSkpdj0odG8oKSx1KGUsNjYpLk9qKCk/bmV3IHFqKGUsdCk6bmV3IEJNKGUsdCkpLHBxKHYuYyx2LmIpLGc5KHYsdShuLDE0KSk7ZWxzZXtmb3IoQz1vdSh0LmUuVGcoKSxlKSxyPXUodC5nLDExOSksaD0wO2g8dC5pOysraClpZihzPXJbaF0sbz1zLmFrKCksQy5ybChvKSl7aWYobz09KGQ2KCksdGspfHxvPT1KNil7Zm9yKGs9VjN0KHQsZSxuKSxkPWgsaz9ieSh0LGgpOisraDtoPHQuaTspcz1yW2hdLG89cy5haygpLG89PXRrfHxvPT1KNj9ieSh0LGgpOisraDtrfHx1KGg0KHQsZCxaZChlLG4pKSw3Mil9ZWxzZSBWM3QodCxlLG4pP2J5KHQsaCk6dShoNCh0LGgsKHRvKCksdShlLDY2KS5PaigpP3Uobiw3Mik6WmQoZSxuKSkpLDcyKTtyZXR1cm59VjN0KHQsZSxuKXx8RHIodCwodG8oKSx1KGUsNjYpLk9qKCk/dShuLDcyKTpaZChlLG4pKSl9fWZ1bmN0aW9uIEdsZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQztyZXR1cm4geWkobix0LmIpfHwodC5iPW4sbz1uZXcgVHMsaD11KEJsKHd1KG5ldyBUbihudWxsLG5ldyBfbihuLmYsMTYpKSxvKSxabShuZXcgb24sbmV3IG5pLG5ldyBkaSxuZXcgRWUsbHQoY3QoZmwsMSksb2UsMTMyLDAsWyhPMSgpLEl5KSxVbF0pKSksMjEpLHQuZT0hMCx0LmY9ITAsdC5jPSEwLHQuZD0hMCxzPWguSGMoKHU2KCksZE8pKSxyPWguSGMoZ08pLHMmJiFyJiYodC5mPSExKSwhcyYmciYmKHQuZD0hMSkscz1oLkhjKGZPKSxyPWguSGMocE8pLHMmJiFyJiYodC5jPSExKSwhcyYmciYmKHQuZT0hMSkpLEM9dSh0LmEuQ2UoZSxuKSw0Niksdj11KEMuYSwxOSkuYSxrPXUoQy5iLDE5KS5hLGQ9ITEsdjwwP3QuY3x8KGQ9ITApOnQuZXx8KGQ9ITApLGs8MD90LmR8fChkPSEwKTp0LmZ8fChkPSEwKSxkP0dsZSh0LEMsbik6Q31mdW5jdGlvbiBtM24odCl7dmFyIGUsbixyLHM7cz10Lm8sJG0oKSx0LkEuZGMoKXx8eWkodC5BLG83dCk/ZT1zLmI6KGU9ZEkodC5mKSx0LkEuSGMoKEFsKCksYVApKSYmIXQuQi5IYygobGwoKSxpQSkpJiYoZT1iLk1hdGgubWF4KGUsZEkodShwbyh0LnAsKHZlKCksSG4pKSwyNDQpKSksZT1iLk1hdGgubWF4KGUsZEkodShwbyh0LnAsQm4pLDI0NCkpKSksbj1HbmUodCksbiYmKGU9Yi5NYXRoLm1heChlLG4uYikpLHQuQS5IYyhvUCkmJih0LnE9PSh1YSgpLGcwKXx8dC5xPT1HYykmJihlPWIuTWF0aC5tYXgoZSwkaih1KHBvKHQuYiwodmUoKSxIbikpLDEyNCkpKSxlPWIuTWF0aC5tYXgoZSwkaih1KHBvKHQuYixCbiksMTI0KSkpKSksamUoUmUodC5lLnlmKCkuV2UoKHVpKCksWEcpKSkpP3MuYj1iLk1hdGgubWF4KHMuYixlKTpzLmI9ZSxyPXQuZi5pLHIuZD0wLHIuYT1lLFRhdCh0LmYpfWZ1bmN0aW9uIFVsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEs7Zm9yKE09MDtNPGUubGVuZ3RoO00rKyl7Zm9yKGQ9dC5LYygpO2QuT2IoKTspbz11KGQuUGIoKSwyMjUpLG8uT2YoTSxlKTtmb3Ioaj0wO2o8ZVtNXS5sZW5ndGg7aisrKXtmb3Iodj10LktjKCk7di5PYigpOylvPXUodi5QYigpLDIyNSksby5QZihNLGosZSk7Zm9yKEs9ZVtNXVtqXS5qLEg9MDtIPEsuYy5sZW5ndGg7SCsrKXtmb3Ioaz10LktjKCk7ay5PYigpOylvPXUoay5QYigpLDIyNSksby5RZihNLGosSCxlKTtmb3IoRz0oQW4oSCxLLmMubGVuZ3RoKSx1KEsuY1tIXSwxMSkpLG49MCxzPW5ldyBMMShHLmIpO0dvKHMuYSl8fEdvKHMuYik7KWZvcihyPXUoR28ocy5hKT9KKHMuYSk6SihzLmIpLDE3KSxDPXQuS2MoKTtDLk9iKCk7KW89dShDLlBiKCksMjI1KSxvLk5mKE0saixILG4rKyxyLGUpfX19Zm9yKGg9dC5LYygpO2guT2IoKTspbz11KGguUGIoKSwyMjUpLG8uTWYoKX1mdW5jdGlvbiB5M24odCxlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3IodC5iPVh0KHllKFEoZSwoVGUoKSxKNCkpKSksdC5jPVh0KHllKFEoZSxxMikpKSx0LmQ9dShRKGUsc2h0KSwzMzYpLHQuYT11KFEoZSxzRyksMjc1KSxkMW4oZSksZD11KEJsKFJpKFJpKFdvKFdvKG5ldyBUbihudWxsLG5ldyBfbihlLmIsMTYpKSxuZXcgSUspLG5ldyBCVCksbmV3IF9MKSxuZXcgdU4pLGMyKG5ldyBrZSxuZXcgY2UsbmV3IFhuLGx0KGN0KGZsLDEpLG9lLDEzMiwwLFsoTzEoKSxVbCldKSkpLDE1KSxzPWQuS2MoKTtzLk9iKCk7KW49dShzLlBiKCksMTcpLGg9dShRKG4sKGFlKCksUjIpKSwxNSksaC5KYyhuZXcgbWModCkpLEp0KG4sUjIsbnVsbCk7Zm9yKHI9ZC5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwxNyksdj11KFEobiwoYWUoKSxoQ3QpKSwxNyksbz11KFEobixaNCksMTUpLEF4bih0LG8sdiksSnQobixaNCxudWxsKX1mdW5jdGlvbiB4M24odCl7dC5iPW51bGwsdC5hPW51bGwsdC5vPW51bGwsdC5xPW51bGwsdC52PW51bGwsdC53PW51bGwsdC5CPW51bGwsdC5wPW51bGwsdC5RPW51bGwsdC5SPW51bGwsdC5TPW51bGwsdC5UPW51bGwsdC5VPW51bGwsdC5WPW51bGwsdC5XPW51bGwsdC5iYj1udWxsLHQuZWI9bnVsbCx0LmFiPW51bGwsdC5IPW51bGwsdC5kYj1udWxsLHQuYz1udWxsLHQuZD1udWxsLHQuZj1udWxsLHQubj1udWxsLHQucj1udWxsLHQucz1udWxsLHQudT1udWxsLHQuRz1udWxsLHQuSj1udWxsLHQuZT1udWxsLHQuaj1udWxsLHQuaT1udWxsLHQuZz1udWxsLHQuaz1udWxsLHQudD1udWxsLHQuRj1udWxsLHQuST1udWxsLHQuTD1udWxsLHQuTT1udWxsLHQuTz1udWxsLHQuUD1udWxsLHQuJD1udWxsLHQuTj1udWxsLHQuWj1udWxsLHQuY2I9bnVsbCx0Lks9bnVsbCx0LkQ9bnVsbCx0LkE9bnVsbCx0LkM9bnVsbCx0Ll89bnVsbCx0LmZiPW51bGwsdC5YPW51bGwsdC5ZPW51bGwsdC5nYj0hMSx0LmhiPSExfWZ1bmN0aW9uIElhdCh0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGs7cmV0dXJuISh0LmshPShWbigpLE9zKXx8dC5qLmMubGVuZ3RoPD0xfHwobz11KFEodCwoVGUoKSxjcykpLDk4KSxvPT0odWEoKSxHYykpfHwocz0oY3koKSwodC5xP3QucTood24oKSx3bigpLHUwKSkuX2IoQnYpP3I9dShRKHQsQnYpLDE5Nyk6cj11KFEoTmEodCksQVMpLDE5Nykscikscz09eEcpfHwhKHM9PW41fHxzPT1lNSkmJihoPVh0KHllKG95KHQsTFMpKSksZT11KFEodCxQTyksMTQyKSwhZSYmKGU9bmV3IHV3dChoLGgsaCxoKSksaz1Lbyh0LCh2ZSgpLEJuKSksdj1lLmQrZS5hKyhrLmdjKCktMSkqaCx2PnQuby5ifHwobj1Lbyh0LEhuKSxkPWUuZCtlLmErKG4uZ2MoKS0xKSpoLGQ+dC5vLmIpKSl9ZnVuY3Rpb24gT2F0KHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEc7aWYoaD10LmUsdj1lLmUsaD09MClyZXR1cm4gZTtpZih2PT0wKXJldHVybiB0O2lmKG89dC5kLGQ9ZS5kLG8rZD09MilyZXR1cm4gbj1Ocyh0LmFbMF0sY28pLHI9TnMoZS5hWzBdLGNvKSxoPT12PyhDPVBhKG4sciksRz1BcihDKSxIPUFyKFZtKEMsMzIpKSxIPT0wP25ldyBOZyhoLEcpOm5ldyBYMyhoLDIsbHQoY3QoQ3IsMSksWHIsMjUsMTUsW0csSF0pKSk6SkQoaDwwP0pwKHIsbik6SnAobixyKSk7aWYoaD09dilqPWgsTT1vPj1kP0tydCh0LmEsbyxlLmEsZCk6S3J0KGUuYSxkLHQuYSxvKTtlbHNle2lmKHM9byE9ZD9vPmQ/MTotMTpxeXQodC5hLGUuYSxvKSxzPT0wKXJldHVybiByYigpLHM3O3M9PTE/KGo9aCxNPVdydCh0LmEsbyxlLmEsZCkpOihqPXYsTT1XcnQoZS5hLGQsdC5hLG8pKX1yZXR1cm4gaz1uZXcgWDMoaixNLmxlbmd0aCxNKSxOOShrKSxrfWZ1bmN0aW9uIFBhdCh0LGUsbixyLHMsbyxoKXt2YXIgZCx2LGssQyxNLGosSDtyZXR1cm4gTT1qZShSZShRKGUsKFRlKCksbDl0KSkpKSxqPW51bGwsbz09KHNvKCksdGwpJiZyLmMuaT09bj9qPXIuYzpvPT1udSYmci5kLmk9PW4mJihqPXIuZCksaz1oLCFrfHwhTXx8aj8oQz0odmUoKSxabyksaj9DPWouajpHMyh1KFEobixjcyksOTgpKSYmKEM9bz09dGw/Qm46SG4pLHY9azNuKHQsZSxuLG8sQyxyKSxkPUdydCgoTmEobikscikpLG89PXRsPyhPYShkLHUoTmUodi5qLDApLDExKSksb2EoZCxzKSk6KE9hKGQscyksb2EoZCx1KE5lKHYuaiwwKSwxMSkpKSxrPW5ldyBvaWUocixkLHYsdShRKHYsKGFlKCksX2kpKSwxMSksbywhaikpOihsZShrLmUsciksSD1iLk1hdGgubWF4KFh0KHllKFEoay5kLEpnKSkpLFh0KHllKFEocixKZykpKSksSnQoay5kLEpnLEgpKSxsbih0LmEscixuZXcgRmooay5kLGUsbykpLGt9ZnVuY3Rpb24gUHEodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTTtpZihDPW51bGwsdC5kJiYoQz11KE5jKHQuZCxlKSwxMzgpKSwhQyl7aWYobz10LmEuTWgoKSxNPW8uaSwhdC5kfHxIQyh0LmQpIT1NKXtmb3Iodj1uZXcgX3IsdC5kJiZZOSh2LHQuZCksaz12LmYuYyt2LmcuYyxkPWs7ZDxNOysrZClyPXUoQXQobyxkKSwxMzgpLHM9JGcodC5lLHIpLm5lKCksbj11KHM9PW51bGw/YXUodi5mLG51bGwscik6c3Yodi5nLHMsciksMTM4KSxuJiZuIT1yJiYocz09bnVsbD9hdSh2LmYsbnVsbCxuKTpzdih2LmcscyxuKSk7aWYodi5mLmMrdi5nLmMhPU0pZm9yKGg9MDtoPGs7KytoKXI9dShBdChvLGgpLDEzOCkscz0kZyh0LmUscikubmUoKSxuPXUocz09bnVsbD9hdSh2LmYsbnVsbCxyKTpzdih2LmcscyxyKSwxMzgpLG4mJm4hPXImJihzPT1udWxsP2F1KHYuZixudWxsLG4pOnN2KHYuZyxzLG4pKTt0LmQ9dn1DPXUoTmModC5kLGUpLDEzOCl9cmV0dXJuIEN9ZnVuY3Rpb24gazNuKHQsZSxuLHIscyxvKXt2YXIgaCxkLHYsayxDLE07cmV0dXJuIGg9bnVsbCxrPXI9PShzbygpLHRsKT9vLmM6by5kLHY9UHooZSksay5pPT1uPyhoPXUodHIodC5iLGspLDEwKSxofHwoaD1MSShrLHUoUShuLChUZSgpLGNzKSksOTgpLHMsSW1uKGspLG51bGwsay5uLGsubyx2LGUpLEp0KGgsKGFlKCksX2kpLGspLGtpKHQuYixrLGgpKSk6KGg9TEkoKEM9bmV3IGthLE09WHQoeWUoUShlLChUZSgpLFRmKSkpKS8yLHpEKEMsVnksTSksQyksdShRKG4sY3MpLDk4KSxzLHI9PXRsPy0xOjEsbnVsbCxuZXcgQ2EsbmV3ICRlKDAsMCksdixlKSxkPWIwbihoLG4sciksSnQoaCwoYWUoKSxfaSksZCksa2kodC5iLGQsaCkpLHUoUShlLChhZSgpLFZjKSksMjEpLkZjKChvbygpLHZoKSksRzModShRKGUsKFRlKCksY3MpKSw5OCkpP0p0KGUsY3MsKHVhKCksQjcpKTpKdChlLGNzLCh1YSgpLEcxKSksaH1mdW5jdGlvbiBFM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0O3ZyKGUsIk9ydGhvZ29uYWwgZWRnZSByb3V0aW5nIiwxKSxrPVh0KHllKFEodCwoVGUoKSx0NSkpKSksbj1YdCh5ZShRKHQsSjQpKSkscj1YdCh5ZShRKHQscTIpKSksaj1uZXcgZXJ0KDAsbiksdHQ9MCxoPW5ldyBkYSh0LmIsMCksZD1udWxsLEM9bnVsbCx2PW51bGwsTT1udWxsO2RvIEM9aC5iPGguZC5nYygpPyhabihoLmI8aC5kLmdjKCkpLHUoaC5kLlhiKGguYz1oLmIrKyksMjkpKTpudWxsLE09Qz9DLmE6bnVsbCxkJiYobXh0KGQsdHQpLHR0Kz1kLmMuYSksSz1kP3R0K3I6dHQsRz1UeHQoaix0LHYsTSxLKSxzPSFkfHxmaih2LChrcSgpLGpPKSksbz0hQ3x8ZmooTSwoa3EoKSxqTykpLEc+MD8oSD0oRy0xKSpuLGQmJihIKz1yKSxDJiYoSCs9ciksSDxrJiYhcyYmIW8mJihIPWspLHR0Kz1IKTohcyYmIW8mJih0dCs9ayksZD1DLHY9TTt3aGlsZShDKTt0LmYuYT10dCxvcihlKX1mdW5jdGlvbiBGYXQoKXtGYXQ9Wjt2YXIgdDtpTHQ9bmV3IE5xdCxvNWU9TnQoQWUsZWUsMiwwLDYsMSksczVlPVMxKHM2KDMzLDU4KSxzNigxLDI2KSksYTVlPVMxKHM2KDk3LDEyMiksczYoNjUsOTApKSxKQXQ9czYoNDgsNTcpLHI1ZT1TMShzNWUsMCksaTVlPVMxKGE1ZSxKQXQpLHRMdD1TMShTMSgwLHM2KDEsNikpLHM2KDMzLDM4KSksZUx0PVMxKFMxKEpBdCxzNig2NSw3MCkpLHM2KDk3LDEwMikpLGM1ZT1TMShyNWUsVXooIi1fLiF+KicoKSIpKSx1NWU9UzEoaTVlLCR6KCItXy4hfionKCkiKSksVXooXzBlKSwkeihfMGUpLFMxKGM1ZSxVeigiOzpAJj0rJCwiKSksUzEodTVlLCR6KCI7OkAmPSskLCIpKSxuTHQ9VXooIjovPyMiKSxyTHQ9JHooIjovPyMiKSxvQT1VeigiLz8jIiksY0E9JHooIi8/IyIpLHQ9bmV3IEhzLHQuYS56YygiamFyIix0KSx0LmEuemMoInppcCIsdCksdC5hLnpjKCJhcmNoaXZlIix0KSxnVT0od24oKSxuZXcgczgodCkpfWZ1bmN0aW9uIFdsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNO2lmKEp0KGUsKGZjKCksTTcpLDApLHY9dShRKGUsREcpLDg2KSxlLmQuYj09MCl2PyhDPVh0KHllKFEodixucCkpKSt0LmErcG10KHYsZSksSnQoZSxucCxDKSk6SnQoZSxucCwwKTtlbHNle2ZvcihyPShvPWVpKG5ldyBMcChlKS5hLmQsMCksbmV3IEV4KG8pKTtPUihyLmEpOyluPXUodGkoci5hKSwxODgpLmMsV2xlKHQsbik7ZD11KHhqKChoPWVpKG5ldyBMcChlKS5hLmQsMCksbmV3IEV4KGgpKSksODYpLE09dShWUWUoKHM9ZWkobmV3IExwKGUpLmEuZCwwKSxuZXcgRXgocykpKSw4Niksaz0oWHQoeWUoUShNLG5wKSkpK1h0KHllKFEoZCxucCkpKSkvMix2PyhDPVh0KHllKFEodixucCkpKSt0LmErcG10KHYsZSksSnQoZSxucCxDKSxKdChlLE03LFh0KHllKFEoZSxucCkpKS1rKSxENG4odCxlKSk6SnQoZSxucCxrKX19ZnVuY3Rpb24gSUUodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRztkPTAsRz0wLHY9eCQodC5mLHQuZi5sZW5ndGgpLG89dC5kLGg9dC5pLHI9dC5hLHM9dC5iO2Rve2ZvcihIPTAsQz1uZXcgUyh0LnApO0MuYTxDLmMuYy5sZW5ndGg7KWs9dShKKEMpLDEwKSxqPWZoZSh0LGspLG49ITAsKHQucT09KHk0KCksRk8pfHx0LnE9PU5PKSYmKG49amUoUmUoai5iKSkpLHUoai5hLDE5KS5hPDAmJm4/KCsrSCx2PXgkKHQuZix0LmYubGVuZ3RoKSx0LmQ9dC5kK3Uoai5hLDE5KS5hLEcrPW8tdC5kLG89dC5kK3Uoai5hLDE5KS5hLGg9dC5pLHI9V3codC5hKSxzPVd3KHQuYikpOih0LmY9eCQodix2Lmxlbmd0aCksdC5kPW8sdC5hPShMcihyKSxyP25ldyBCdShyKTp4OChuZXcgUyhyKSkpLHQuYj0oTHIocykscz9uZXcgQnUocyk6eDgobmV3IFMocykpKSx0Lmk9aCk7KytkLE09SCE9MCYmamUoUmUoZS5LYihuZXcgZmEocGUoRykscGUoZCkpKSkpfXdoaWxlKE0pfWZ1bmN0aW9uIFQzbih0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWU7cmV0dXJuIGg9dC5mLGo9ZS5mLGQ9aD09KEFFKCksRzYpfHxoPT1WUyxIPWo9PUc2fHxqPT1WUyx2PWg9PWk1fHxoPT1HUyxHPWo9PWk1fHxqPT1HUyxrPWg9PWk1fHxoPT1HNixLPWo9PWk1fHxqPT1HNixkJiZIP3QuZj09VlM/dDplOnYmJkc/dC5mPT1HUz90OmU6ayYmSz8oaD09aTU/KE09dCxDPWUpOihNPWUsQz10KSxvPSh0dD1uLmorbi5mLGd0PU0uZStyLmYsTXQ9Yi5NYXRoLm1heCh0dCxndCksU3Q9TXQtYi5NYXRoLm1pbihuLmosTS5lKSxSdD1NLmQrci5nLW4uaSxSdCpTdCkscz0oS3Q9bi5pK24uZyx1ZT1DLmQrci5nLF9lPWIuTWF0aC5tYXgoS3QsdWUpLFdlPV9lLWIuTWF0aC5taW4obi5pLEMuZCksUWU9Qy5lK3IuZi1uLmosV2UqUWUpLG88PXM/dC5mPT1pNT90OmU6dC5mPT1HNj90OmUpOnR9ZnVuY3Rpb24gQzNuKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE07Zm9yKEM9dC5lLmEuYy5sZW5ndGgsaD1uZXcgUyh0LmUuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTIxKSxvLmo9ITE7Zm9yKHQuaT1OdChDcixYciwyNSxDLDE1LDEpLHQuZz1OdChDcixYciwyNSxDLDE1LDEpLHQubj1uZXcgaGUscz0wLE09bmV3IGhlLHY9bmV3IFModC5lLmEpO3YuYTx2LmMuYy5sZW5ndGg7KWQ9dShKKHYpLDEyMSksZC5kPXMrKyxkLmIuYS5jLmxlbmd0aD09MCYmbGUodC5uLGQpLExzKE0sZC5nKTtmb3IoZT0wLHI9bmV3IFMoTSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMjEzKSxuLmM9ZSsrLG4uZj0hMTtrPU0uYy5sZW5ndGgsdC5iPT1udWxsfHx0LmIubGVuZ3RoPGs/KHQuYj1OdChhYSx2bywyNSxrLDE1LDEpLHQuYz1OdChwbCxvMCwyNSxrLDE2LDEpKTpSQyh0LmMpLHQuZD1NLHQucD1uZXcgZG50KHR5KHQuZC5jLmxlbmd0aCkpLHQuaj0xfWZ1bmN0aW9uIF8zbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztpZighKGUuZS5jLmxlbmd0aDw9MSkpe2Zvcih0LmY9ZSx0LmQ9dShRKHQuZiwoaUkoKSxDN3QpKSwzNzkpLHQuZz11KFEodC5mLEw3dCksMTkpLmEsdC5lPVh0KHllKFEodC5mLF83dCkpKSx0LmM9WHQoeWUoUSh0LmYsdlYpKSksc1h0KHQuYikscz1uZXcgUyh0LmYuYyk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMjgyKSxRNXQodC5iLHIuYyxyLG51bGwpLFE1dCh0LmIsci5kLHIsbnVsbCk7Zm9yKGQ9dC5mLmUuYy5sZW5ndGgsdC5hPXQyKGFhLFtlZSx2b10sWzEwNCwyNV0sMTUsW2QsZF0sMiksaz1uZXcgUyh0LmYuZSk7ay5hPGsuYy5jLmxlbmd0aDspdj11KEooayksMTQ0KSxZeW4odCx2LHQuYVt2LmJdKTtmb3IodC5pPXQyKGFhLFtlZSx2b10sWzEwNCwyNV0sMTUsW2QsZF0sMiksbz0wO288ZDsrK28pZm9yKGg9MDtoPGQ7KytoKW49dC5hW29dW2hdLEM9MS8obipuKSx0Lmlbb11baF09Q319ZnVuY3Rpb24gU18odCl7dmFyIGUsbixyLHM7aWYoISh0LmI9PW51bGx8fHQuYi5sZW5ndGg8PTIpJiYhdC5hKXtmb3IoZT0wLHM9MDtzPHQuYi5sZW5ndGg7KXtmb3IoZSE9cz8odC5iW2VdPXQuYltzKytdLHQuYltlKzFdPXQuYltzKytdKTpzKz0yLG49dC5iW2UrMV07czx0LmIubGVuZ3RoJiYhKG4rMTx0LmJbc10pOylpZihuKzE9PXQuYltzXSl0LmJbZSsxXT10LmJbcysxXSxuPXQuYltlKzFdLHMrPTI7ZWxzZSBpZihuPj10LmJbcysxXSlzKz0yO2Vsc2UgaWYobjx0LmJbcysxXSl0LmJbZSsxXT10LmJbcysxXSxuPXQuYltlKzFdLHMrPTI7ZWxzZSB0aHJvdyBpdChuZXcgVm8oIlRva2VuI2NvbXBhY3RSYW5nZXMoKTogSW50ZXJuZWwgRXJyb3I6IFsiK3QuYltlXSsiLCIrdC5iW2UrMV0rIl0gWyIrdC5iW3NdKyIsIit0LmJbcysxXSsiXSIpKTtlKz0yfWUhPXQuYi5sZW5ndGgmJihyPU50KENyLFhyLDI1LGUsMTUsMSksRGModC5iLDAsciwwLGUpLHQuYj1yKSx0LmE9ITB9fWZ1bmN0aW9uIFMzbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2O2ZvcihoPXF4KHQuYSkuS2MoKTtoLk9iKCk7KXtpZihvPXUoaC5QYigpLDE3KSxvLmIuYy5sZW5ndGg+MClmb3Iocj1uZXcgQnUodShBaSh0LmEsbyksMjEpKSx3bigpLFpzKHIsbmV3IFNpKGUpKSxzPW5ldyBkYShvLmIsMCk7cy5iPHMuZC5nYygpOyl7c3dpdGNoKG49KFpuKHMuYjxzLmQuZ2MoKSksdShzLmQuWGIocy5jPXMuYisrKSw3MCkpLGQ9LTEsdShRKG4sKFRlKCksT2QpKSwyNzIpLmcpe2Nhc2UgMTpkPXIuYy5sZW5ndGgtMTticmVhaztjYXNlIDA6ZD1RZG4ocik7YnJlYWs7Y2FzZSAyOmQ9MH1kIT0tMSYmKHY9KEFuKGQsci5jLmxlbmd0aCksdShyLmNbZF0sMjQzKSksbGUodi5iLmIsbiksdShRKE5hKHYuYi5jLmkpLChhZSgpLFZjKSksMjEpLkZjKChvbygpLG03KSksdShRKE5hKHYuYi5jLmkpLFZjKSwyMSkuRmModjcpLENsKHMpLEp0KG4sY0N0LG8pKX1PYShvLG51bGwpLG9hKG8sbnVsbCl9fWZ1bmN0aW9uIEEzbih0LGUpe3ZhciBuLHIscyxvO3JldHVybiBuPW5ldyAkZCxyPXUoQmwod3UobmV3IFRuKG51bGwsbmV3IF9uKHQuZiwxNikpLG4pLFptKG5ldyBvbixuZXcgbmksbmV3IGRpLG5ldyBFZSxsdChjdChmbCwxKSxvZSwxMzIsMCxbKE8xKCksSXkpLFVsXSkpKSwyMSkscz1yLmdjKCkscz1zPT0yPzE6MCxzPT0xJiZEdyhRRCh1KEJsKFJpKHIuTGMoKSxuZXcgQTApLHpuZSh2MigwKSxuZXcgRXIpKSwxNjIpLmEsMiksMCkmJihzPTApLHI9dShCbCh3dShuZXcgVG4obnVsbCxuZXcgX24oZS5mLDE2KSksbiksWm0obmV3IG9uLG5ldyBuaSxuZXcgZGksbmV3IEVlLGx0KGN0KGZsLDEpLG9lLDEzMiwwLFtJeSxVbF0pKSksMjEpLG89ci5nYygpLG89bz09Mj8xOjAsbz09MSYmRHcoUUQodShCbChSaShyLkxjKCksbmV3IEJpKSx6bmUodjIoMCksbmV3IEVyKSksMTYyKS5hLDIpLDApJiYobz0wKSxzPG8/LTE6cz09bz8wOjF9ZnVuY3Rpb24gTDNuKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0saixIO2lmKGs9bmV3IGhlLCFVcyh0LChhZSgpLFZsdCkpKXJldHVybiBrO2ZvcihyPXUoUSh0LFZsdCksMTUpLktjKCk7ci5PYigpOyllPXUoci5QYigpLDEwKSxxM24oZSx0KSxrLmNbay5jLmxlbmd0aF09ZTtmb3Iobz1uZXcgUyh0LmIpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSwyOSksZD1uZXcgUyhzLmEpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDEwKSxoLms9PShWbigpLGtzKSYmKHY9dShRKGgsZUcpLDEwKSx2JiYoQz1uZXcgTWMsVW8oQyxoKSxNPXUoUShoLG9jKSw2MSksQnMoQyxNKSxqPXUoTmUodi5qLDApLDExKSxIPW5ldyBWdyxPYShILEMpLG9hKEgsaikpKTtmb3Iobj1uZXcgUyhrKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMCksRW8oZSx1KE5lKHQuYix0LmIuYy5sZW5ndGgtMSksMjkpKTtyZXR1cm4ga31mdW5jdGlvbiBZbGUodCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqO2ZvcihlPVQxKHQpLG89amUoUmUocWUoZSwoVGUoKSxIeSkpKSksQz0wLHM9MCxrPW5ldyBucigoIXQuZSYmKHQuZT1uZXcgQ24oWXMsdCw3LDQpKSx0LmUpKTtrLmUhPWsuaS5nYygpOyl2PXUoZHIoayksNzkpLGQ9ZnYodiksaD1kJiZvJiZqZShSZShxZSh2LGoyKSkpLGo9RG8odShBdCgoIXYuYyYmKHYuYz1uZXcgQ24oYnIsdiw1LDgpKSx2LmMpLDApLDgyKSksZCYmaD8rK3M6ZCYmIWg/KytDOmVzKGopPT1lfHxqPT1lPysrczorK0M7Zm9yKHI9bmV3IG5yKCghdC5kJiYodC5kPW5ldyBDbihZcyx0LDgsNSkpLHQuZCkpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSw3OSksZD1mdihuKSxoPWQmJm8mJmplKFJlKHFlKG4sajIpKSksTT1Ebyh1KEF0KCghbi5iJiYobi5iPW5ldyBDbihicixuLDQsNykpLG4uYiksMCksODIpKSxkJiZoPysrQzpkJiYhaD8rK3M6ZXMoTSk9PWV8fE09PWU/KytDOisrcztyZXR1cm4gQy1zfWZ1bmN0aW9uIE0zbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSDtpZih2cihlLCJFZGdlIHNwbGl0dGluZyIsMSksdC5iLmMubGVuZ3RoPD0yKXtvcihlKTtyZXR1cm59Zm9yKG89bmV3IGRhKHQuYiwwKSxoPShabihvLmI8by5kLmdjKCkpLHUoby5kLlhiKG8uYz1vLmIrKyksMjkpKTtvLmI8by5kLmdjKCk7KWZvcihzPWgsaD0oWm4oby5iPG8uZC5nYygpKSx1KG8uZC5YYihvLmM9by5iKyspLDI5KSksdj1uZXcgUyhzLmEpO3YuYTx2LmMuYy5sZW5ndGg7KWZvcihkPXUoSih2KSwxMCksQz1uZXcgUyhkLmopO0MuYTxDLmMuYy5sZW5ndGg7KWZvcihrPXUoSihDKSwxMSkscj1uZXcgUyhrLmcpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDE3KSxqPW4uZCxNPWouaS5jLE0hPXMmJk0hPWgmJnV1ZShuLChIPW5ldyBZMCh0KSxEMChILChWbigpLHRhKSksSnQoSCwoYWUoKSxfaSksbiksSnQoSCwoVGUoKSxjcyksKHVhKCksR2MpKSxFbyhILGgpLEgpKTtvcihlKX1mdW5jdGlvbiBLbGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEg7aWYoZD1lLnAhPW51bGwmJiFlLmIsZHx8dnIoZSxyMWUsMSksbj11KFEodCwoYWUoKSxLbHQpKSwxNSksaD0xL24uZ2MoKSxlLm4pZm9yKEpiKGUsIkVMSyBMYXllcmVkIHVzZXMgdGhlIGZvbGxvd2luZyAiK24uZ2MoKSsiIG1vZHVsZXM6IiksSD0wLGo9bi5LYygpO2ouT2IoKTspQz11KGouUGIoKSw1MSkscj0oSDwxMD8iMCI6IiIpK0grKyxKYihlLCIgICBTbG90ICIrcisiOiAiK0lwKG9sKEMpKSk7Zm9yKE09bi5LYygpO00uT2IoKTspQz11KE0uUGIoKSw1MSksQy5wZih0LFJjKGUsaCkpO2ZvcihvPW5ldyBTKHQuYik7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMjkpLExzKHQuYSxzLmEpLHMuYS5jPU50KFFuLERlLDEsMCw1LDEpO2ZvcihrPW5ldyBTKHQuYSk7ay5hPGsuYy5jLmxlbmd0aDspdj11KEooayksMTApLEVvKHYsbnVsbCk7dC5iLmM9TnQoUW4sRGUsMSwwLDUsMSksZHx8b3IoZSl9ZnVuY3Rpb24gRDNuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZTtyPVh0KHllKFEoZSwoVGUoKSxmOXQpKSkpLEt0PXUoUShlLE1TKSwxOSkuYSxqPTQscz0zLHVlPTIwL0t0LEg9ITEsdj0wLGg9d2k7ZG97Zm9yKG89diE9MSxNPXYhPTAsX2U9MCx0dD10LmEsTXQ9MCxSdD10dC5sZW5ndGg7TXQ8UnQ7KytNdClHPXR0W010XSxHLmY9bnVsbCx2NW4odCxHLG8sTSxyKSxfZSs9Yi5NYXRoLmFicyhHLmEpO2RvIGQ9dXluKHQsZSk7d2hpbGUoZCk7Zm9yKEs9dC5hLGd0PTAsU3Q9Sy5sZW5ndGg7Z3Q8U3Q7KytndClpZihHPUtbZ3RdLG49ZnZ0KEcpLmEsbiE9MClmb3IoQz1uZXcgUyhHLmUpO0MuYTxDLmMuYy5sZW5ndGg7KWs9dShKKEMpLDEwKSxrLm4uYis9bjt2PT0wfHx2PT0xPygtLWosajw9MCYmKF9lPGh8fC1qPkt0KT8odj0yLGg9d2kpOnY9PTA/KHY9MSxoPV9lKToodj0wLGg9X2UpKTooSD1fZT49aHx8aC1fZTx1ZSxoPV9lLEgmJi0tcyl9d2hpbGUoIShIJiZzPD0wKSl9ZnVuY3Rpb24gTmF0KHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEc7Zm9yKEc9bmV3IF9yLG89dC5hLmVjKCkuS2MoKTtvLk9iKCk7KXI9dShvLlBiKCksMTY4KSxraShHLHIsbi5KZShyKSk7Zm9yKGg9KExyKHQpLHQ/bmV3IEJ1KHQpOng4KHQuYS5lYygpLktjKCkpKSxacyhoLG5ldyBXbihHKSksZD1QJChoKSx2PW5ldyBtaihlKSxIPW5ldyBfcixhdShILmYsZSx2KTtkLmEuZ2MoKSE9MDspe2ZvcihrPW51bGwsQz1udWxsLE09bnVsbCxzPWQuYS5lYygpLktjKCk7cy5PYigpOylpZihyPXUocy5QYigpLDE2OCksWHQoeWUoZWMoTG8oRy5mLHIpKSkpPD1hcyl7aWYoVGwoSCxyLmEpJiYhVGwoSCxyLmIpKXtDPXIuYixNPXIuYSxrPXI7YnJlYWt9aWYoVGwoSCxyLmIpJiYhVGwoSCxyLmEpKXtDPXIuYSxNPXIuYixrPXI7YnJlYWt9fWlmKCFrKWJyZWFrO2o9bmV3IG1qKEMpLGxlKHUoZWMoTG8oSC5mLE0pKSwyMjEpLmEsaiksYXUoSC5mLEMsaiksZC5hLkJjKGspIT1udWxsfXJldHVybiB2fWZ1bmN0aW9uIEkzbih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSDtmb3IodnIobiwiRGVwdGgtZmlyc3QgY3ljbGUgcmVtb3ZhbCIsMSksTT1lLmEsQz1NLmMubGVuZ3RoLHQuYz1uZXcgaGUsdC5kPU50KHBsLG8wLDI1LEMsMTYsMSksdC5hPU50KHBsLG8wLDI1LEMsMTYsMSksdC5iPW5ldyBoZSxoPTAsaz1uZXcgUyhNKTtrLmE8ay5jLmMubGVuZ3RoOyl2PXUoSihrKSwxMCksdi5wPWgsRjgoam8odikpJiZsZSh0LmMsdiksKytoO2ZvcihIPW5ldyBTKHQuYyk7SC5hPEguYy5jLmxlbmd0aDspaj11KEooSCksMTApLFg0dCh0LGopO2ZvcihvPTA7bzxDO28rKyl0LmRbb118fChkPShBbihvLE0uYy5sZW5ndGgpLHUoTS5jW29dLDEwKSksWDR0KHQsZCkpO2ZvcihzPW5ldyBTKHQuYik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTcpLGJ2KHIsITApLEp0KGUsKGFlKCksX08pLChObigpLCEwKSk7dC5jPW51bGwsdC5kPW51bGwsdC5hPW51bGwsdC5iPW51bGwsb3Iobil9ZnVuY3Rpb24gTzNuKHQsZSl7dmFyIG4scixzLG8saCxkLHY7Zm9yKHQuYS5jPU50KFFuLERlLDEsMCw1LDEpLHI9ZWkoZS5iLDApO3IuYiE9ci5kLmM7KW49dSh0aShyKSw4Niksbi5iLmI9PTAmJihKdChuLChmYygpLFh5KSwoTm4oKSwhMCkpLGxlKHQuYSxuKSk7c3dpdGNoKHQuYS5jLmxlbmd0aCl7Y2FzZSAwOnM9bmV3IERpdCgwLGUsIkRVTU1ZX1JPT1QiKSxKdChzLChmYygpLFh5KSwoTm4oKSwhMCkpLEp0KHMsQmh0LCEwKSxyaShlLmIscyk7YnJlYWs7Y2FzZSAxOmJyZWFrO2RlZmF1bHQ6Zm9yKG89bmV3IERpdCgwLGUsIlNVUEVSX1JPT1QiKSxkPW5ldyBTKHQuYSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksODYpLHY9bmV3IE52dChvLGgpLEp0KHYsKGZjKCksQmh0KSwoTm4oKSwhMCkpLHJpKG8uYS5hLHYpLHJpKG8uZCx2KSxyaShoLmIsdiksSnQoaCxYeSwhMSk7SnQobywoZmMoKSxYeSksKE5uKCksITApKSxKdChvLEJodCwhMCkscmkoZS5iLG8pfX1mdW5jdGlvbiBQM24odCxlKXtrNCgpO3ZhciBuLHIscyxvLGgsZDtyZXR1cm4gbz1lLmMtKHQuYyt0LmIpLHM9dC5jLShlLmMrZS5iKSxoPXQuZC0oZS5kK2UuYSksbj1lLmQtKHQuZCt0LmEpLHI9Yi5NYXRoLm1heChzLG8pLGQ9Yi5NYXRoLm1heChoLG4pLGsxKCksd2YoX2QpLChiLk1hdGguYWJzKHIpPD1fZHx8cj09MHx8aXNOYU4ocikmJmlzTmFOKDApPzA6cjwwPy0xOnI+MD8xOkl3KGlzTmFOKHIpLGlzTmFOKDApKSk+PTBeKHdmKF9kKSwoYi5NYXRoLmFicyhkKTw9X2R8fGQ9PTB8fGlzTmFOKGQpJiZpc05hTigwKT8wOmQ8MD8tMTpkPjA/MTpJdyhpc05hTihkKSxpc05hTigwKSkpPj0wKT9iLk1hdGgubWF4KGQscik6KHdmKF9kKSwoYi5NYXRoLmFicyhyKTw9X2R8fHI9PTB8fGlzTmFOKHIpJiZpc05hTigwKT8wOnI8MD8tMTpyPjA/MTpJdyhpc05hTihyKSxpc05hTigwKSkpPjA/Yi5NYXRoLnNxcnQoZCpkK3Iqcik6LWIuTWF0aC5zcXJ0KGQqZCtyKnIpKX1mdW5jdGlvbiBFMih0LGUpe3ZhciBuLHIscyxvLGgsZDtpZihlKXtpZighdC5hJiYodC5hPW5ldyBFUiksdC5lPT0yKXtrUih0LmEsZSk7cmV0dXJufWlmKGUuZT09MSl7Zm9yKHM9MDtzPGUuZW0oKTtzKyspRTIodCxlLmFtKHMpKTtyZXR1cm59aWYoZD10LmEuYS5jLmxlbmd0aCxkPT0wKXtrUih0LmEsZSk7cmV0dXJufWlmKGg9dSh6dyh0LmEsZC0xKSwxMTcpLCEoKGguZT09MHx8aC5lPT0xMCkmJihlLmU9PTB8fGUuZT09MTApKSl7a1IodC5hLGUpO3JldHVybn1vPWUuZT09MD8yOmUuYm0oKS5sZW5ndGgsaC5lPT0wPyhuPW5ldyAkQyxyPWguX2woKSxyPj1LYT9nbyhuLGwzdChyKSk6UzgobixyJnlzKSxoPW5ldyBrcnQoMTAsbnVsbCwwKSx1bm4odC5hLGgsZC0xKSk6KG49KGguYm0oKS5sZW5ndGgrbyxuZXcgJEMpLGdvKG4saC5ibSgpKSksZS5lPT0wPyhyPWUuX2woKSxyPj1LYT9nbyhuLGwzdChyKSk6UzgobixyJnlzKSk6Z28obixlLmJtKCkpLHUoaCw1MjEpLmI9bi5hfX1mdW5jdGlvbiBYbGUodCl7dmFyIGUsbixyLHMsbztyZXR1cm4gdC5nIT1udWxsP3QuZzp0LmE8MzI/KHQuZz1XNW4oVHUodC5mKSxwcyh0LmUpKSx0LmcpOihzPUhhdCgoIXQuYyYmKHQuYz1WRCh0LmYpKSx0LmMpLDApLHQuZT09MD9zOihlPSghdC5jJiYodC5jPVZEKHQuZikpLHQuYykuZTwwPzI6MSxuPXMubGVuZ3RoLHI9LXQuZStuLWUsbz1uZXcgTXAsby5hKz0iIitzLHQuZT4wJiZyPj0tNj9yPj0wP3VEKG8sbi1wcyh0LmUpLFN0cmluZy5mcm9tQ2hhckNvZGUoNDYpKTooby5hPVBsKG8uYSwwLGUtMSkrIjAuIitSTShvLmEsZS0xKSx1RChvLGUrMSxNaChOMiwwLC1wcyhyKS0xKSkpOihuLWU+PTEmJih1RChvLGUsU3RyaW5nLmZyb21DaGFyQ29kZSg0NikpLCsrbiksdUQobyxuLFN0cmluZy5mcm9tQ2hhckNvZGUoNjkpKSxyPjAmJnVEKG8sKytuLFN0cmluZy5mcm9tQ2hhckNvZGUoNDMpKSx1RChvLCsrbiwiIitfOShUdShyKSkpKSx0Lmc9by5hLHQuZykpfWZ1bmN0aW9uIEYzbih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQ7aWYoIW4uZGMoKSl7Zm9yKGQ9MCxqPTAscj1uLktjKCksRz11KHIuUGIoKSwxOSkuYTtkPGUuZjspe2lmKGQ9PUcmJihqPTAsci5PYigpP0c9dShyLlBiKCksMTkpLmE6Rz1lLmYrMSksZCE9ail7Zm9yKHR0PXUoTmUodC5iLGQpLDI5KSxIPXUoTmUodC5iLGopLDI5KSxLPVd3KHR0LmEpLE09bmV3IFMoSyk7TS5hPE0uYy5jLmxlbmd0aDspaWYoQz11KEooTSksMTApLGx5KEMsSC5hLmMubGVuZ3RoLEgpLGo9PTApZm9yKGg9V3coam8oQykpLG89bmV3IFMoaCk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTcpLGJ2KHMsITApLEp0KHQsKGFlKCksX08pLChObigpLCEwKSksbmhlKHQscywxKX0rK2osKytkfWZvcih2PW5ldyBkYSh0LmIsMCk7di5iPHYuZC5nYygpOylrPShabih2LmI8di5kLmdjKCkpLHUodi5kLlhiKHYuYz12LmIrKyksMjkpKSxrLmEuYy5sZW5ndGg9PTAmJkNsKHYpfX1mdW5jdGlvbiBOM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0O2ZvcihoPWUuYixDPWgubyx2PWguZCxyPVh0KHllKFd6KGgsKFRlKCksVGYpKSkpLHM9WHQoeWUoV3ooaCxWNikpKSxrPVh0KHllKFd6KGgsZmh0KSkpLGQ9bmV3IG5ldCxGd3QoZCx2LmQsdi5jLHYuYSx2LmIpLGo9UXZuKGUscixzLGspLGd0PW5ldyBTKGUuZCk7Z3QuYTxndC5jLmMubGVuZ3RoOyl7Zm9yKHR0PXUoSihndCksMTAxKSxHPXR0LmYuYS5lYygpLktjKCk7Ry5PYigpOylIPXUoRy5QYigpLDQwOSksbz1ILmEsTT1xMG4oSCksbj0oTXQ9bmV3IFB1LFNhZShILEguYyxqLE10KSxnZ24oSCxNLGosTXQpLFNhZShILEguZCxqLE10KSxNdCksbj10LlVmKEgsTSxuKSxBaChvLmEpLFVhKG8uYSxuKSxscyhuZXcgVG4obnVsbCxuZXcgX24obiwxNikpLG5ldyBoR3QoQyxkKSk7Sz10dC5pLEsmJihNMG4odHQsSyxqLHMpLFN0PW5ldyB4byhLLmcpLEYzdChDLGQsU3QpLExpKFN0LEsuaiksRjN0KEMsZCxTdCkpfUZ3dCh2LGQuZCxkLmMsZC5hLGQuYil9ZnVuY3Rpb24gQjNuKHQsZSxuKXt2YXIgcixzLG87aWYocz11KFEoZSwoVGUoKSxzRykpLDI3NSkscyE9KGtFKCksbVMpKXtzd2l0Y2godnIobiwiSG9yaXpvbnRhbCBDb21wYWN0aW9uIiwxKSx0LmE9ZSxvPW5ldyB0ZWUscj1uZXcgSm9lKChvLmQ9ZSxvLmM9dShRKG8uZCxlZyksMjE4KSxSdm4obyksTDRuKG8pLEd2bihvKSxvLmEpKSxOS2Uocix0LmIpLHUoUShlLHpDdCksNDIyKS5nKXtjYXNlIDE6dkh0KHIsbmV3IHBuZSh0LmEpKTticmVhaztkZWZhdWx0OnZIdChyLChGdnQoKSxvcGUpKX1zd2l0Y2gocy5nKXtjYXNlIDE6dl8ocik7YnJlYWs7Y2FzZSAyOnZfKEJxKHIsKGFvKCksQ2YpKSk7YnJlYWs7Y2FzZSAzOnZfKHdIdChCcSh2XyhyKSwoYW8oKSxDZikpLG5ldyBxVCkpO2JyZWFrO2Nhc2UgNDp2Xyh3SHQoQnEodl8ociksKGFvKCksQ2YpKSxuZXcgVmQobykpKTticmVhaztjYXNlIDU6dl8oRktlKHIsaDJlKSl9QnEociwoYW8oKSx6aCkpLHIuZT0hMCxmNW4obyksb3Iobil9fWZ1bmN0aW9uIFIzbih0LGUsbixyLHMsbyxoLGQpe3ZhciB2LGssQyxNO3N3aXRjaCh2PUExKGx0KGN0KGI2biwxKSxEZSwyMjAsMCxbZSxuLHIsc10pKSxNPW51bGwsdC5iLmcpe2Nhc2UgMTpNPUExKGx0KGN0KGpfdCwxKSxEZSw1MjYsMCxbbmV3IFhULG5ldyBLVCxuZXcgakxdKSk7YnJlYWs7Y2FzZSAwOk09QTEobHQoY3Qoal90LDEpLERlLDUyNiwwLFtuZXcgakwsbmV3IEtULG5ldyBYVF0pKTticmVhaztjYXNlIDI6TT1BMShsdChjdChqX3QsMSksRGUsNTI2LDAsW25ldyBLVCxuZXcgWFQsbmV3IGpMXSkpfWZvcihDPW5ldyBTKE0pO0MuYTxDLmMuYy5sZW5ndGg7KWs9dShKKEMpLDUyNiksdi5jLmxlbmd0aD4xJiYodj1rLm1nKHYsdC5hLGQpKTtyZXR1cm4gdi5jLmxlbmd0aD09MT91KE5lKHYsdi5jLmxlbmd0aC0xKSwyMjApOnYuYy5sZW5ndGg9PTI/VDNuKChBbigwLHYuYy5sZW5ndGgpLHUodi5jWzBdLDIyMCkpLChBbigxLHYuYy5sZW5ndGgpLHUodi5jWzFdLDIyMCkpLGgsbyk6bnVsbH1mdW5jdGlvbiBRbGUodCl7dmFyIGUsbixyLHMsbyxoO2Zvcih4dSh0LmEsbmV3IHhpKSxuPW5ldyBTKHQuYSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMjIxKSxyPWlhKG5jKHUodC5iLDY1KS5jKSx1KGUuYiw2NSkuYyksVXBlPyhoPXUodC5iLDY1KS5iLG89dShlLmIsNjUpLmIsYi5NYXRoLmFicyhyLmEpPj1iLk1hdGguYWJzKHIuYik/KHIuYj0wLG8uZCtvLmE+aC5kJiZvLmQ8aC5kK2guYSYmamoocixiLk1hdGgubWF4KGguYy0oby5jK28uYiksby5jLShoLmMraC5iKSkpKTooci5hPTAsby5jK28uYj5oLmMmJm8uYzxoLmMraC5iJiZqaihyLGIuTWF0aC5tYXgoaC5kLShvLmQrby5hKSxvLmQtKGguZCtoLmEpKSkpKTpqaihyLF9sZSh1KHQuYiw2NSksdShlLmIsNjUpKSkscz1iLk1hdGguc3FydChyLmEqci5hK3IuYipyLmIpLHM9a2FlKGhTLGUscyxyKSxqaihyLHMpLHFudCh1KGUuYiw2NSkscikseHUoZS5hLG5ldyBKcihyKSksdShoUy5iLDY1KSxBbXQoaFMsYzd0LGUpfWZ1bmN0aW9uIGozbih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHO2Zvcih0LmY9bmV3IGVldCxrPTAscz0wLGg9bmV3IFModC5lLmIpO2guYTxoLmMuYy5sZW5ndGg7KWZvcihvPXUoSihoKSwyOSksdj1uZXcgUyhvLmEpO3YuYTx2LmMuYy5sZW5ndGg7KXtmb3IoZD11KEoodiksMTApLGQucD1rKysscj1uZXcgYXIobHIoRHMoZCkuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShNcihyKSwxNyksbi5wPXMrKztmb3IoZT1JYXQoZCksaj1uZXcgUyhkLmopO2ouYTxqLmMuYy5sZW5ndGg7KU09dShKKGopLDExKSxlJiYoRz1NLmEuYixHIT1iLk1hdGguZmxvb3IoRykmJihDPUctWXcoVHUoYi5NYXRoLnJvdW5kKEcpKSksTS5hLmItPUMpKSxIPU0ubi5iK00uYS5iLEghPWIuTWF0aC5mbG9vcihIKSYmKEM9SC1ZdyhUdShiLk1hdGgucm91bmQoSCkpKSxNLm4uYi09Qyl9dC5nPWssdC5iPXMsdC5pPU50KGQ2bixEZSw0MDEsaywwLDEpLHQuYz1OdChmNm4sRGUsNjQ5LHMsMCwxKSx0LmQuYS4kYigpfWZ1bmN0aW9uIHhyKHQpe3ZhciBlLG4scixzLG8saCxkLHYsaztpZih0LmVqKCkpaWYodj10LmZqKCksdC5pPjApe2lmKGU9bmV3IG4ydCh0LmksdC5nKSxuPXQuaSxvPW48MTAwP251bGw6bmV3IERwKG4pLHQuaWooKSlmb3Iocj0wO3I8dC5pOysrciloPXQuZ1tyXSxvPXQua2ooaCxvKTtpZih6OSh0KSxzPW49PTE/dC5aaSg0LEF0KGUsMCksbnVsbCwwLHYpOnQuWmkoNixlLG51bGwsLTEsdiksdC5iaigpKXtmb3Iocj1uZXcgQngoZSk7ci5lIT1yLmkuZ2MoKTspbz10LmRqKGRzdChyKSxvKTtvPyhvLkVpKHMpLG8uRmkoKSk6dC4kaShzKX1lbHNlIG8/KG8uRWkocyksby5GaSgpKTp0LiRpKHMpfWVsc2UgejkodCksdC4kaSh0LlppKDYsKHduKCksaW8pLG51bGwsLTEsdikpO2Vsc2UgaWYodC5iaigpKWlmKHQuaT4wKXtmb3IoZD10Lmcsaz10LmksejkodCksbz1rPDEwMD9udWxsOm5ldyBEcChrKSxyPTA7cjxrOysrciloPWRbcl0sbz10LmRqKGgsbyk7byYmby5GaSgpfWVsc2UgejkodCk7ZWxzZSB6OSh0KX1mdW5jdGlvbiB2eHQodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqO2ZvcihYbmUodGhpcyksbj09KEd3KCkseWIpP0ZzKHRoaXMucix0KTpGcyh0aGlzLncsdCksQz1hcyxrPUNzLGg9ZS5hLmVjKCkuS2MoKTtoLk9iKCk7KXM9dShoLlBiKCksNDYpLGQ9dShzLmEsNDU1KSxyPXUocy5iLDE3KSx2PXIuYyx2PT10JiYodj1yLmQpLGQ9PXliP0ZzKHRoaXMucix2KTpGcyh0aGlzLncsdiksaj0odmUoKSxBdSkuSGModi5qKT9YdCh5ZShRKHYsKGFlKCksazcpKSkpOllvKGx0KGN0KFdzLDEpLGVlLDgsMCxbdi5pLm4sdi5uLHYuYV0pKS5iLEM9Yi5NYXRoLm1pbihDLGopLGs9Yi5NYXRoLm1heChrLGopO2ZvcihNPSh2ZSgpLEF1KS5IYyh0LmopP1h0KHllKFEodCwoYWUoKSxrNykpKSk6WW8obHQoY3QoV3MsMSksZWUsOCwwLFt0Lmkubix0Lm4sdC5hXSkpLmIsVmFlKHRoaXMsTSxDLGspLG89ZS5hLmVjKCkuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksNDYpLHRvZSh0aGlzLHUocy5iLDE3KSk7dGhpcy5vPSExfWZ1bmN0aW9uICQzbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWUsUm4sem4saHI7cmV0dXJuIG49dC5sJjgxOTEscj10Lmw+PjEzfCh0Lm0mMTUpPDw5LHM9dC5tPj40JjgxOTEsbz10Lm0+PjE3fCh0LmgmMjU1KTw8NSxoPSh0LmgmMTA0ODMyMCk+PjgsZD1lLmwmODE5MSx2PWUubD4+MTN8KGUubSYxNSk8PDksaz1lLm0+PjQmODE5MSxDPWUubT4+MTd8KGUuaCYyNTUpPDw1LE09KGUuaCYxMDQ4MzIwKT4+OCxXZT1uKmQsUWU9cipkLFJuPXMqZCx6bj1vKmQsaHI9aCpkLHYhPTAmJihRZSs9bip2LFJuKz1yKnYsem4rPXMqdixocis9byp2KSxrIT0wJiYoUm4rPW4qayx6bis9ciprLGhyKz1zKmspLEMhPTAmJih6bis9bipDLGhyKz1yKkMpLE0hPTAmJihocis9bipNKSxIPVdlJmhsLEc9KFFlJjUxMSk8PDEzLGo9SCtHLHR0PVdlPj4yMixndD1RZT4+OSxNdD0oUm4mMjYyMTQzKTw8NCxTdD0oem4mMzEpPDwxNyxLPXR0K2d0K010K1N0LEt0PVJuPj4xOCx1ZT16bj4+NSxfZT0oaHImNDA5NSk8PDgsUnQ9S3QrdWUrX2UsSys9aj4+MjIsaiY9aGwsUnQrPUs+PjIyLEsmPWhsLFJ0Jj1aMCxpdShqLEssUnQpfWZ1bmN0aW9uIFpsZSh0KXt2YXIgZSxuLHIscyxvLGgsZDtpZihkPXUoTmUodC5qLDApLDExKSxkLmcuYy5sZW5ndGghPTAmJmQuZS5jLmxlbmd0aCE9MCl0aHJvdyBpdChuZXcgTm8oIkludGVyYWN0aXZlIGxheW91dCBkb2VzIG5vdCBzdXBwb3J0IE5PUlRIL1NPVVRIIHBvcnRzIHdpdGggaW5jb21pbmcgX2FuZF8gb3V0Z29pbmcgZWRnZXMuIikpO2lmKGQuZy5jLmxlbmd0aCE9MCl7Zm9yKG89YXMsbj1uZXcgUyhkLmcpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDE3KSxoPWUuZC5pLHI9dShRKGgsKFRlKCksZkcpKSwxNDIpLG89Yi5NYXRoLm1pbihvLGgubi5hLXIuYik7cmV0dXJuIG5ldyBXayhMcihvKSl9aWYoZC5lLmMubGVuZ3RoIT0wKXtmb3Iocz1DcyxuPW5ldyBTKGQuZSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTcpLGg9ZS5jLmkscj11KFEoaCwoVGUoKSxmRykpLDE0Mikscz1iLk1hdGgubWF4KHMsaC5uLmEraC5vLmErci5jKTtyZXR1cm4gbmV3IFdrKExyKHMpKX1yZXR1cm4gUEMoKSxQQygpLEN1dH1mdW5jdGlvbiBKbGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdjtpZih0LkZrKCkpe2lmKHQuaT40KWlmKHQud2ooZSkpe2lmKHQucmsoKSl7aWYocz11KGUsNDkpLHI9cy5VZygpLHY9cj09dC5lJiYodC5EaygpP3MuT2cocy5WZygpLHQuemsoKSk9PXQuQWsoKTotMS1zLlZnKCk9PXQuYWooKSksdC5FaygpJiYhdiYmIXImJnMuWmcoKSl7Zm9yKG89MDtvPHQuaTsrK28paWYobj10LkdrKHUodC5nW29dLDU2KSksVnQobik9PT1WdChlKSlyZXR1cm4hMH1yZXR1cm4gdn1lbHNlIGlmKHQuRGsoKSYmIXQuQ2soKSl7aWYoaD11KGUsNTYpLmFoKG5vKHUodC5haygpLDE4KSkpLFZ0KGgpPT09VnQodC5lKSlyZXR1cm4hMDtpZihoPT1udWxsfHwhdShoLDU2KS5raCgpKXJldHVybiExfX1lbHNlIHJldHVybiExO2lmKGQ9eUUodCxlKSx0LkVrKCkmJiFkKXtmb3Iobz0wO288dC5pOysrbylpZihzPXQuR2sodSh0Lmdbb10sNTYpKSxWdChzKT09PVZ0KGUpKXJldHVybiEwfXJldHVybiBkfWVsc2UgcmV0dXJuIHlFKHQsZSl9ZnVuY3Rpb24gejNuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0sajtmb3IoQz1uZXcgaGUsaj1uZXcgSHMsaD1lLmIscz0wO3M8aC5jLmxlbmd0aDtzKyspe2ZvcihrPShBbihzLGguYy5sZW5ndGgpLHUoaC5jW3NdLDI5KSkuYSxDLmM9TnQoUW4sRGUsMSwwLDUsMSksbz0wO288ay5jLmxlbmd0aDtvKyspZD10LmFbc11bb10sZC5wPW8sZC5rPT0oVm4oKSxIYykmJihDLmNbQy5jLmxlbmd0aF09ZCksY2godShOZShlLmIscyksMjkpLmEsbyxkKSxkLmouYz1OdChRbixEZSwxLDAsNSwxKSxMcyhkLmosdSh1KE5lKHQuYixzKSwxNSkuWGIobyksMTQpKSxqeCh1KFEoZCwoVGUoKSxjcykpLDk4KSl8fEp0KGQsY3MsKHVhKCksWTIpKTtmb3Iocj1uZXcgUyhDKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxMCksTT11bW4obiksai5hLnpjKE0saiksai5hLnpjKG4sail9Zm9yKHY9ai5hLmVjKCkuS2MoKTt2Lk9iKCk7KWQ9dSh2LlBiKCksMTApLHduKCksWnMoZC5qLChvRSgpLFRUdCkpLGQuaT0hMCxyNXQoZCl9ZnVuY3Rpb24gcTNuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE07aWYoQz11KFEodCwoYWUoKSxvYykpLDYxKSxyPXUoTmUodC5qLDApLDExKSxDPT0odmUoKSxQbik/QnMocixtcik6Qz09bXImJkJzKHIsUG4pLHUoUShlLChUZSgpLCQyKSksMTc0KS5IYygoQWwoKSxLMikpKXtpZih2PVh0KHllKFEodCxTNykpKSxrPVh0KHllKFEodCxBNykpKSxoPVh0KHllKFEodCxXeSkpKSxkPXUoUShlLEd5KSwyMSksZC5IYygoWnUoKSxzZykpKWZvcihuPWssTT10Lm8uYS8yLXIubi5hLG89bmV3IFMoci5mKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSw3MCkscy5uLmI9bixzLm4uYT1NLXMuby5hLzIsbis9cy5vLmIraDtlbHNlIGlmKGQuSGMoQ2IpKWZvcihvPW5ldyBTKHIuZik7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksNzApLHMubi5hPXYrdC5vLmEtci5uLmE7bHNuKG5ldyBlcigoVkMoKSxuZXcgaHJ0KGUsITEsITEsbmV3IGFOKSkpLG5ldyBOaihudWxsLHQsITEpKX19ZnVuY3Rpb24gSDNuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDO2lmKGUuYy5sZW5ndGghPTApe2Zvcih3bigpLCRudChlLmMsZS5jLmxlbmd0aCxudWxsKSxzPW5ldyBTKGUpLHI9dShKKHMpLDE0NSk7cy5hPHMuYy5jLmxlbmd0aDspbj11KEoocyksMTQ1KSxVbXQoci5lLmMsbi5lLmMpJiYhKEkzdChxV3Qoci5lKS5iLG4uZS5kKXx8STN0KHFXdChuLmUpLmIsci5lLmQpKT9yPShMcyhyLmssbi5rKSxMcyhyLmIsbi5iKSxMcyhyLmMsbi5jKSxVYShyLmksbi5pKSxMcyhyLmQsbi5kKSxMcyhyLmosbi5qKSxvPWIuTWF0aC5taW4oci5lLmMsbi5lLmMpLGg9Yi5NYXRoLm1pbihyLmUuZCxuLmUuZCksZD1iLk1hdGgubWF4KHIuZS5jK3IuZS5iLG4uZS5jK24uZS5iKSx2PWQtbyxrPWIuTWF0aC5tYXgoci5lLmQrci5lLmEsbi5lLmQrbi5lLmEpLEM9ay1oLGVLdChyLmUsbyxoLHYsQyksaXNuKHIuZixuLmYpLCFyLmEmJihyLmE9bi5hKSxMcyhyLmcsbi5nKSxsZShyLmcsbikscik6KHdsZSh0LHIpLHI9bik7d2xlKHQscil9fWZ1bmN0aW9uIFYzbih0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGs7aWYoZD10LmosZD09KHZlKCksWm8pJiZlIT0odWEoKSxHMSkmJmUhPSh1YSgpLFRiKSYmKGQ9aGxlKHQsbiksQnModCxkKSwhKHQucT90LnE6KHduKCksd24oKSx1MCkpLl9iKChUZSgpLFZ5KSkmJmQhPVpvJiYodC5uLmEhPTB8fHQubi5iIT0wKSYmSnQodCxWeSxjZG4odCxkKSkpLGU9PSh1YSgpLGcwKSl7c3dpdGNoKGs9MCxkLmcpe2Nhc2UgMTpjYXNlIDM6bz10Lmkuby5hLG8+MCYmKGs9dC5uLmEvbyk7YnJlYWs7Y2FzZSAyOmNhc2UgNDpzPXQuaS5vLmIscz4wJiYoaz10Lm4uYi9zKX1KdCh0LChhZSgpLEZ2KSxrKX1pZih2PXQubyxoPXQuYSxyKWguYT1yLmEsaC5iPXIuYix0LmQ9ITA7ZWxzZSBpZihlIT1HMSYmZSE9VGImJmQhPVpvKXN3aXRjaChkLmcpe2Nhc2UgMTpoLmE9di5hLzI7YnJlYWs7Y2FzZSAyOmguYT12LmEsaC5iPXYuYi8yO2JyZWFrO2Nhc2UgMzpoLmE9di5hLzIsaC5iPXYuYjticmVhaztjYXNlIDQ6aC5iPXYuYi8yfWVsc2UgaC5hPXYuYS8yLGguYj12LmIvMn1mdW5jdGlvbiBBXyh0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQztpZih0LmVqKCkpaWYoQz10LlZpKCksdj10LmZqKCksQz4wKWlmKGU9bmV3IGd5dCh0LkdpKCkpLG49QyxvPW48MTAwP251bGw6bmV3IERwKG4pLFZNKHQsbixlLmcpLHM9bj09MT90LlppKDQsQXQoZSwwKSxudWxsLDAsdik6dC5aaSg2LGUsbnVsbCwtMSx2KSx0LmJqKCkpe2ZvcihyPW5ldyBucihlKTtyLmUhPXIuaS5nYygpOylvPXQuZGooZHIociksbyk7bz8oby5FaShzKSxvLkZpKCkpOnQuJGkocyl9ZWxzZSBvPyhvLkVpKHMpLG8uRmkoKSk6dC4kaShzKTtlbHNlIFZNKHQsdC5WaSgpLHQuV2koKSksdC4kaSh0LlppKDYsKHduKCksaW8pLG51bGwsLTEsdikpO2Vsc2UgaWYodC5iaigpKWlmKEM9dC5WaSgpLEM+MCl7Zm9yKGQ9dC5XaSgpLGs9QyxWTSh0LEMsZCksbz1rPDEwMD9udWxsOm5ldyBEcChrKSxyPTA7cjxrOysrciloPWRbcl0sbz10LmRqKGgsbyk7byYmby5GaSgpfWVsc2UgVk0odCx0LlZpKCksdC5XaSgpKTtlbHNlIFZNKHQsdC5WaSgpLHQuV2koKSl9ZnVuY3Rpb24gRzNuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixIO2ZvcihkPW5ldyBTKGUpO2QuYTxkLmMuYy5sZW5ndGg7KW89dShKKGQpLDIzMyksby5lPW51bGwsby5jPTA7Zm9yKHY9bnVsbCxoPW5ldyBTKGUpO2guYTxoLmMuYy5sZW5ndGg7KWlmKG89dShKKGgpLDIzMyksTT1vLmRbMF0sIShuJiZNLmshPShWbigpLE9zKSkpe2ZvcihIPXUoUShNLChhZSgpLFI2KSksMTUpLktjKCk7SC5PYigpOylqPXUoSC5QYigpLDEwKSwoIW58fGouaz09KFZuKCksT3MpKSYmKCghby5lJiYoby5lPW5ldyBoZSksby5lKS5GYyh0LmJbai5jLnBdW2oucF0pLCsrdC5iW2ouYy5wXVtqLnBdLmMpO2lmKCFuJiZNLms9PShWbigpLE9zKSl7aWYodilmb3IoQz11KEFpKHQuZCx2KSwyMSkuS2MoKTtDLk9iKCk7KWZvcihrPXUoQy5QYigpLDEwKSxzPXUoQWkodC5kLE0pLDIxKS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwxMCkscmVuKHQuYltrLmMucF1bay5wXSkuRmModC5iW3IuYy5wXVtyLnBdKSwrK3QuYltyLmMucF1bci5wXS5jO3Y9TX19fWZ1bmN0aW9uIFUzbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztmb3Iobj0wLEM9bmV3IGhlLGQ9bmV3IFMoZSk7ZC5hPGQuYy5jLmxlbmd0aDspe3N3aXRjaChoPXUoSihkKSwxMSksVnl0KHQuYix0LmRbaC5wXSksQy5jPU50KFFuLERlLDEsMCw1LDEpLGguaS5rLmcpe2Nhc2UgMDpyPXUoUShoLChhZSgpLEp1KSksMTApLHh1KHIuaixuZXcgTiR0KEMpKTticmVhaztjYXNlIDE6YlFlKE1pdChSaShuZXcgVG4obnVsbCxuZXcgX24oaC5pLmosMTYpKSxuZXcgQiR0KGgpKSksbmV3IFIkdChDKSk7YnJlYWs7Y2FzZSAzOnM9dShRKGgsKGFlKCksX2kpKSwxMSksbGUoQyxuZXcgZmEocyxwZShoLmUuYy5sZW5ndGgraC5nLmMubGVuZ3RoKSkpfWZvcihrPW5ldyBTKEMpO2suYTxrLmMuYy5sZW5ndGg7KXY9dShKKGspLDQ2KSxvPWJidCh0LHUodi5hLDExKSksbz50LmRbaC5wXSYmKG4rPWZtdCh0LmIsbykqdSh2LmIsMTkpLmEsVXAodC5hLHBlKG8pKSk7Zm9yKDshQkModC5hKTspSG10KHQuYix1KEh4KHQuYSksMTkpLmEpfXJldHVybiBufWZ1bmN0aW9uIFczbih0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQ7Zm9yKE09bmV3IHhvKHUocWUodCwoZnEoKSxPU3QpKSw4KSksTS5hPWIuTWF0aC5tYXgoTS5hLW4uYi1uLmMsMCksTS5iPWIuTWF0aC5tYXgoTS5iLW4uZC1uLmEsMCkscz15ZShxZSh0LE1TdCkpLChzPT1udWxsfHwoT24ocyksczw9MCkpJiYocz0xLjMpLGQ9bmV3IGhlLEc9bmV3IG5yKCghdC5hJiYodC5hPW5ldyBmZShycyx0LDEwLDExKSksdC5hKSk7Ry5lIT1HLmkuZ2MoKTspSD11KGRyKEcpLDMzKSxoPW5ldyBMV3QoSCksZC5jW2QuYy5sZW5ndGhdPWg7c3dpdGNoKGo9dShxZSh0LGxmdCksMzExKSxqLmcpe2Nhc2UgMzp0dD1weW4oZCxlLE0uYSxNLmIsKGs9cixPbihzKSxrKSk7YnJlYWs7Y2FzZSAxOnR0PXp5bihkLGUsTS5hLE0uYiwoQz1yLE9uKHMpLEMpKTticmVhaztkZWZhdWx0OnR0PVgzbihkLGUsTS5hLE0uYiwodj1yLE9uKHMpLHYpKX1vPW5ldyByeih0dCksSz16YXQobyxlLG4sTS5hLE0uYixyLChPbihzKSxzKSksd3YodCxLLmEsSy5iLCExLCEwKX1mdW5jdGlvbiBZM24odCxlKXt2YXIgbixyLHMsbztuPWUuYixvPW5ldyBCdShuLmopLHM9MCxyPW4uaixyLmM9TnQoUW4sRGUsMSwwLDUsMSksJHcodShoMih0LmIsKHZlKCksUG4pLChudigpLER2KSksMTUpLG4pLHM9bkkobyxzLG5ldyBqWCxyKSwkdyh1KGgyKHQuYixQbixwYiksMTUpLG4pLHM9bkkobyxzLG5ldyBWVCxyKSwkdyh1KGgyKHQuYixQbixNdiksMTUpLG4pLCR3KHUoaDIodC5iLEhuLER2KSwxNSksbiksJHcodShoMih0LmIsSG4scGIpLDE1KSxuKSxzPW5JKG8scyxuZXcgUE4sciksJHcodShoMih0LmIsSG4sTXYpLDE1KSxuKSwkdyh1KGgyKHQuYixtcixEdiksMTUpLG4pLHM9bkkobyxzLG5ldyBGTixyKSwkdyh1KGgyKHQuYixtcixwYiksMTUpLG4pLHM9bkkobyxzLG5ldyBOTixyKSwkdyh1KGgyKHQuYixtcixNdiksMTUpLG4pLCR3KHUoaDIodC5iLEJuLER2KSwxNSksbikscz1uSShvLHMsbmV3IHFYLHIpLCR3KHUoaDIodC5iLEJuLHBiKSwxNSksbiksJHcodShoMih0LmIsQm4sTXYpLDE1KSxuKX1mdW5jdGlvbiBLM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLO2Zvcih2cihlLCJMYXllciBzaXplIGNhbGN1bGF0aW9uIiwxKSxDPWFzLGs9Q3Mscz0hMSxkPW5ldyBTKHQuYik7ZC5hPGQuYy5jLmxlbmd0aDspaWYoaD11KEooZCksMjkpLHY9aC5jLHYuYT0wLHYuYj0wLGguYS5jLmxlbmd0aCE9MCl7Zm9yKHM9ITAsaj1uZXcgUyhoLmEpO2ouYTxqLmMuYy5sZW5ndGg7KU09dShKKGopLDEwKSxHPU0ubyxIPU0uZCx2LmE9Yi5NYXRoLm1heCh2LmEsRy5hK0guYitILmMpO3I9dShOZShoLmEsMCksMTApLEs9ci5uLmItci5kLmQsci5rPT0oVm4oKSxrcykmJihLLT11KFEodCwoVGUoKSxQTykpLDE0MikuZCksbz11KE5lKGguYSxoLmEuYy5sZW5ndGgtMSksMTApLG49by5uLmIrby5vLmIrby5kLmEsby5rPT1rcyYmKG4rPXUoUSh0LChUZSgpLFBPKSksMTQyKS5hKSx2LmI9bi1LLEM9Yi5NYXRoLm1pbihDLEspLGs9Yi5NYXRoLm1heChrLG4pfXN8fChDPTAsaz0wKSx0LmYuYj1rLUMsdC5jLmItPUMsb3IoZSl9ZnVuY3Rpb24gbXh0KHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndDtmb3Iobz0wLGg9MCxrPW5ldyBTKHQuYSk7ay5hPGsuYy5jLmxlbmd0aDspZD11KEooayksMTApLG89Yi5NYXRoLm1heChvLGQuZC5iKSxoPWIuTWF0aC5tYXgoaCxkLmQuYyk7Zm9yKHY9bmV3IFModC5hKTt2LmE8di5jLmMubGVuZ3RoOyl7c3dpdGNoKGQ9dShKKHYpLDEwKSxuPXUoUShkLChUZSgpLElkKSksMjQ4KSxuLmcpe2Nhc2UgMTpHPTA7YnJlYWs7Y2FzZSAyOkc9MTticmVhaztjYXNlIDU6Rz0uNTticmVhaztkZWZhdWx0OmZvcihyPTAsTT0wLEg9bmV3IFMoZC5qKTtILmE8SC5jLmMubGVuZ3RoOylqPXUoSihIKSwxMSksai5lLmMubGVuZ3RoPT0wfHwrK3Isai5nLmMubGVuZ3RoPT0wfHwrK007citNPT0wP0c9LjU6Rz1NLyhyK00pfXR0PXQuYyxDPWQuby5hLGd0PSh0dC5hLUMpKkcsRz4uNT9ndC09aCoyKihHLS41KTpHPC41JiYoZ3QrPW8qMiooLjUtRykpLHM9ZC5kLmIsZ3Q8cyYmKGd0PXMpLEs9ZC5kLmMsZ3Q+dHQuYS1LLUMmJihndD10dC5hLUstQyksZC5uLmE9ZStndH19ZnVuY3Rpb24gWDNuKHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE0saixILEcsSyx0dDtmb3IoZD1OdChhYSx2bywyNSx0LmMubGVuZ3RoLDE1LDEpLGo9bmV3IG4kKG5ldyBzQiksZTR0KGosdCksaz0wLEs9bmV3IGhlO2ouYi5jLmxlbmd0aCE9MDspaWYoaD11KGouYi5jLmxlbmd0aD09MD9udWxsOk5lKGouYiwwKSwxNTcpLGs+MSYmUnUoaCkqRWwoaCkvMj5kWzBdKXtmb3Iobz0wO288Sy5jLmxlbmd0aC0xJiZSdShoKSpFbChoKS8yPmRbb107KSsrbztHPW5ldyBRZChLLDAsbysxKSxNPW5ldyByeihHKSxDPVJ1KGgpL0VsKGgpLHY9emF0KE0sZSxuZXcgQ3gsbixyLHMsQyksTGkoR2YoTS5lKSx2KSxSOCh4RShqLE0pKSxIPW5ldyBRZChLLG8rMSxLLmMubGVuZ3RoKSxlNHQoaixIKSxLLmM9TnQoUW4sRGUsMSwwLDUsMSksaz0wLEFLdChkLGQubGVuZ3RoLDApfWVsc2UgdHQ9ai5iLmMubGVuZ3RoPT0wP251bGw6TmUoai5iLDApLHR0IT1udWxsJiZ2aXQoaiwwKSxrPjAmJihkW2tdPWRbay0xXSksZFtrXSs9UnUoaCkqRWwoaCksKytrLEsuY1tLLmMubGVuZ3RoXT1oO3JldHVybiBLfWZ1bmN0aW9uIFEzbih0KXt2YXIgZSxuLHIscyxvO2lmKHI9dShRKHQsKFRlKCksdXUpKSwxNjMpLHI9PShkaCgpLGJiKSl7Zm9yKG49bmV3IGFyKGxyKGpvKHQpLmEuS2MoKSxuZXcgeikpO3pyKG4pOylpZihlPXUoTXIobiksMTcpLCFqSnQoZSkpdGhyb3cgaXQobmV3IFIzKEtvdCtySSh0KSsiJyBoYXMgaXRzIGxheWVyIGNvbnN0cmFpbnQgc2V0IHRvIEZJUlNUX1NFUEFSQVRFLCBidXQgaGFzIGF0IGxlYXN0IG9uZSBpbmNvbWluZyBlZGdlLiBGSVJTVF9TRVBBUkFURSBub2RlcyBtdXN0IG5vdCBoYXZlIGluY29taW5nIGVkZ2VzLiIpKX1lbHNlIGlmKHI9PWp5KXtmb3Iobz1uZXcgYXIobHIoRHModCkuYS5LYygpLG5ldyB6KSk7enIobyk7KWlmKHM9dShNcihvKSwxNyksIWpKdChzKSl0aHJvdyBpdChuZXcgUjMoS290K3JJKHQpKyInIGhhcyBpdHMgbGF5ZXIgY29uc3RyYWludCBzZXQgdG8gTEFTVF9TRVBBUkFURSwgYnV0IGhhcyBhdCBsZWFzdCBvbmUgb3V0Z29pbmcgZWRnZS4gTEFTVF9TRVBBUkFURSBub2RlcyBtdXN0IG5vdCBoYXZlIG91dGdvaW5nIGVkZ2VzLiIpKX19ZnVuY3Rpb24gWjNuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEc7Zm9yKHZyKGUsIkxhYmVsIGR1bW15IHJlbW92YWwiLDEpLHI9WHQoeWUoUSh0LChUZSgpLFY2KSkpKSxzPVh0KHllKFEodCxXeSkpKSxrPXUoUSh0LFdsKSwxMDMpLHY9bmV3IFModC5iKTt2LmE8di5jLmMubGVuZ3RoOylmb3IoZD11KEoodiksMjkpLE09bmV3IGRhKGQuYSwwKTtNLmI8TS5kLmdjKCk7KUM9KFpuKE0uYjxNLmQuZ2MoKSksdShNLmQuWGIoTS5jPU0uYisrKSwxMCkpLEMuaz09KFZuKCksTGwpJiYoaj11KFEoQywoYWUoKSxfaSkpLDE3KSxHPVh0KHllKFEoaixKZykpKSxoPVZ0KFEoQyxqNikpPT09VnQoKHpsKCksa2IpKSxuPW5ldyB4byhDLm4pLGgmJihuLmIrPUcrciksbz1uZXcgJGUoQy5vLmEsQy5vLmItRy1yKSxIPXUoUShDLExPKSwxNSksaz09KGFvKCkscmcpfHxrPT1uZz9Pdm4oSCxuLHMsbyxoLGspOmdsbihILG4scyxvKSxMcyhqLmIsSCksQmF0KEMsVnQoUSh0LGVnKSk9PT1WdCgoVzAoKSxlUCkpKSxDbChNKSk7b3IoZSl9ZnVuY3Rpb24gSjNuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdDtmb3Iodj1uZXcgaGUsbz1uZXcgUyhlLmEpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSwxMCksZD1uZXcgUyhzLmopO2QuYTxkLmMuYy5sZW5ndGg7KXtmb3IoaD11KEooZCksMTEpLEM9bnVsbCxTdD13ZChoLmcpLFJ0PTAsS3Q9U3QubGVuZ3RoO1J0PEt0OysrUnQpTXQ9U3RbUnRdLEo4KE10LmQuaSxuKXx8KGd0PVBhdCh0LGUsbixNdCxNdC5jLChzbygpLG51KSxDKSxndCE9QyYmKHYuY1t2LmMubGVuZ3RoXT1ndCksZ3QuYyYmKEM9Z3QpKTtmb3Ioaz1udWxsLEc9d2QoaC5lKSxLPTAsdHQ9Ry5sZW5ndGg7Szx0dDsrK0spSD1HW0tdLEo4KEguYy5pLG4pfHwoZ3Q9UGF0KHQsZSxuLEgsSC5kLChzbygpLHRsKSxrKSxndCE9ayYmKHYuY1t2LmMubGVuZ3RoXT1ndCksZ3QuYyYmKGs9Z3QpKX1mb3Ioaj1uZXcgUyh2KTtqLmE8ai5jLmMubGVuZ3RoOylNPXUoSihqKSw0NDEpLFJvKGUuYSxNLmEsMCkhPS0xfHxsZShlLmEsTS5hKSxNLmMmJihyLmNbci5jLmxlbmd0aF09TSl9ZnVuY3Rpb24gdDRuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dDtmb3IodnIobiwiSW50ZXJhY3RpdmUgY3ljbGUgYnJlYWtpbmciLDEpLE09bmV3IGhlLEg9bmV3IFMoZS5hKTtILmE8SC5jLmMubGVuZ3RoOylmb3Ioaj11KEooSCksMTApLGoucD0xLEc9YjR0KGopLmEsQz1vdihqLChzbygpLG51KSkuS2MoKTtDLk9iKCk7KWZvcihrPXUoQy5QYigpLDExKSxvPW5ldyBTKGsuZyk7by5hPG8uYy5jLmxlbmd0aDspcj11KEoobyksMTcpLEs9ci5kLmksSyE9aiYmKHR0PWI0dChLKS5hLHR0PEcmJihNLmNbTS5jLmxlbmd0aF09cikpO2ZvcihoPW5ldyBTKE0pO2guYTxoLmMuYy5sZW5ndGg7KXI9dShKKGgpLDE3KSxidihyLCEwKTtmb3IoTS5jPU50KFFuLERlLDEsMCw1LDEpLHY9bmV3IFMoZS5hKTt2LmE8di5jLmMubGVuZ3RoOylkPXUoSih2KSwxMCksZC5wPjAmJnNvZSh0LGQsTSk7Zm9yKHM9bmV3IFMoTSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTcpLGJ2KHIsITApO00uYz1OdChRbixEZSwxLDAsNSwxKSxvcihuKX1mdW5jdGlvbiB0aGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEM7cmV0dXJuIGs9IiIsZS5sZW5ndGg9PTA/dC5kZSh6eHQsS2F0LC0xLC0xKTooQz1meShlKSxobihDLnN1YnN0cigwLDMpLCJhdCAiKSYmKEM9Qy5zdWJzdHIoMykpLEM9Qy5yZXBsYWNlKC9cWy4qP1xdL2csIiIpLGg9Qy5pbmRleE9mKCIoIiksaD09LTE/KGg9Qy5pbmRleE9mKCJAIiksaD09LTE/KGs9QyxDPSIiKTooaz1meShDLnN1YnN0cihoKzEpKSxDPWZ5KEMuc3Vic3RyKDAsaCkpKSk6KG49Qy5pbmRleE9mKCIpIixoKSxrPUMuc3Vic3RyKGgrMSxuLShoKzEpKSxDPWZ5KEMuc3Vic3RyKDAsaCkpKSxoPWhkKEMsQ3UoNDYpKSxoIT0tMSYmKEM9Qy5zdWJzdHIoaCsxKSksKEMubGVuZ3RoPT0wfHxobihDLCJBbm9ueW1vdXMgZnVuY3Rpb24iKSkmJihDPUthdCksZD1UaihrLEN1KDU4KSkscz1id3QoayxDdSg1OCksZC0xKSx2PS0xLHI9LTEsbz16eHQsZCE9LTEmJnMhPS0xJiYobz1rLnN1YnN0cigwLHMpLHY9eFd0KGsuc3Vic3RyKHMrMSxkLShzKzEpKSkscj14V3Qoay5zdWJzdHIoZCsxKSkpLHQuZGUobyxDLHYscikpfWZ1bmN0aW9uIHl4dCh0LGUsbil7dmFyIHIscyxvLGgsZCx2O2lmKGUubD09MCYmZS5tPT0wJiZlLmg9PTApdGhyb3cgaXQobmV3IF9SKCJkaXZpZGUgYnkgemVybyIpKTtpZih0Lmw9PTAmJnQubT09MCYmdC5oPT0wKXJldHVybiBuJiYoaGI9aXUoMCwwLDApKSxpdSgwLDAsMCk7aWYoZS5oPT1OSSYmZS5tPT0wJiZlLmw9PTApcmV0dXJuIHBobih0LG4pO2lmKHY9ITEsZS5oPj4xOSYmKGU9ckUoZSksdj0hdiksaD1RMm4oZSksbz0hMSxzPSExLHI9ITEsdC5oPT1OSSYmdC5tPT0wJiZ0Lmw9PTApaWYocz0hMCxvPSEwLGg9PS0xKXQ9eVV0KChxOCgpLHNFdCkpLHI9ITAsdj0hdjtlbHNlIHJldHVybiBkPXY1dCh0LGgpLHYmJkFpdChkKSxuJiYoaGI9aXUoMCwwLDApKSxkO2Vsc2UgdC5oPj4xOSYmKG89ITAsdD1yRSh0KSxyPSEwLHY9IXYpO3JldHVybiBoIT0tMT9SdW4odCxoLHYsbyxuKTp1NHQodCxlKTwwPyhuJiYobz9oYj1yRSh0KTpoYj1pdSh0LmwsdC5tLHQuaCkpLGl1KDAsMCwwKSk6cW1uKHI/dDppdSh0LmwsdC5tLHQuaCksZSx2LG8scyxuKX1mdW5jdGlvbiBGcSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHO2lmKHQuZSYmdC5jLmM8dC5mKXRocm93IGl0KG5ldyBObygiRXhwZWN0ZWQgIit0LmYrIiBwaGFzZXMgdG8gYmUgY29uZmlndXJlZDsgb25seSBmb3VuZCAiK3QuYy5jKSk7Zm9yKEM9dShWZih0LmcpLDkpLEg9VWQodC5mKSxvPUMsZD0wLGs9by5sZW5ndGg7ZDxrOysrZClyPW9bZF0sTT11KEVEKHQsci5nKSwyNDYpLE0/bGUoSCx1KHlpZSh0LE0pLDEyMykpOkguY1tILmMubGVuZ3RoXT1udWxsO2ZvcihHPW5ldyBWcyxscyhSaSh3dShSaShuZXcgVG4obnVsbCxuZXcgX24oSCwxNikpLG5ldyBfWiksbmV3IGl6dChlKSksbmV3IFNaKSxuZXcgc3p0KEcpKSwkbChHLHQuYSksbj1uZXcgaGUscz1DLGg9MCx2PXMubGVuZ3RoO2g8djsrK2gpcj1zW2hdLExzKG4sc3JlKHQsYiQodShFRChHLHIuZyksMjApKSkpLGo9dShOZShILHIuZyksMTIzKSxqJiYobi5jW24uYy5sZW5ndGhdPWopO3JldHVybiBMcyhuLHNyZSh0LGIkKHUoRUQoRyxDW0MubGVuZ3RoLTFdLmcrMSksMjApKSkpLG59ZnVuY3Rpb24gZTRuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dDtmb3IodnIobiwiTW9kZWwgb3JkZXIgY3ljbGUgYnJlYWtpbmciLDEpLHQuYT0wLHQuYj0wLEg9bmV3IGhlLEM9ZS5hLmMubGVuZ3RoLGs9bmV3IFMoZS5hKTtrLmE8ay5jLmMubGVuZ3RoOyl2PXUoSihrKSwxMCksVXModiwoYWUoKSxUYykpJiYoQz1iLk1hdGgubWF4KEMsdShRKHYsVGMpLDE5KS5hKzEpKTtmb3IoSz1uZXcgUyhlLmEpO0suYTxLLmMuYy5sZW5ndGg7KWZvcihHPXUoSihLKSwxMCksaD1wb2UodCxHLEMpLGo9b3YoRywoc28oKSxudSkpLktjKCk7ai5PYigpOylmb3IoTT11KGouUGIoKSwxMSksbz1uZXcgUyhNLmcpO28uYTxvLmMuYy5sZW5ndGg7KXI9dShKKG8pLDE3KSx0dD1yLmQuaSxkPXBvZSh0LHR0LEMpLGQ8aCYmKEguY1tILmMubGVuZ3RoXT1yKTtmb3Iocz1uZXcgUyhIKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxNyksYnYociwhMCksSnQoZSwoYWUoKSxfTyksKE5uKCksITApKTtILmM9TnQoUW4sRGUsMSwwLDUsMSksb3Iobil9ZnVuY3Rpb24gbjRuKHQsZSl7dmFyIG4scixzLG8saCxkLHY7aWYoISh0Lmc+ZS5mfHxlLmc+dC5mKSl7Zm9yKG49MCxyPTAsaD10LncuYS5lYygpLktjKCk7aC5PYigpOylzPXUoaC5QYigpLDExKSwkaXQoWW8obHQoY3QoV3MsMSksZWUsOCwwLFtzLmkubixzLm4scy5hXSkpLmIsZS5nLGUuZikmJisrbjtmb3IoZD10LnIuYS5lYygpLktjKCk7ZC5PYigpOylzPXUoZC5QYigpLDExKSwkaXQoWW8obHQoY3QoV3MsMSksZWUsOCwwLFtzLmkubixzLm4scy5hXSkpLmIsZS5nLGUuZikmJi0tbjtmb3Iodj1lLncuYS5lYygpLktjKCk7di5PYigpOylzPXUodi5QYigpLDExKSwkaXQoWW8obHQoY3QoV3MsMSksZWUsOCwwLFtzLmkubixzLm4scy5hXSkpLmIsdC5nLHQuZikmJisrcjtmb3Iobz1lLnIuYS5lYygpLktjKCk7by5PYigpOylzPXUoby5QYigpLDExKSwkaXQoWW8obHQoY3QoV3MsMSksZWUsOCwwLFtzLmkubixzLm4scy5hXSkpLmIsdC5nLHQuZikmJi0tcjtuPHI/bmV3IFIkKHQsZSxyLW4pOnI8bj9uZXcgUiQoZSx0LG4tcik6KG5ldyBSJChlLHQsMCksbmV3IFIkKHQsZSwwKSl9fWZ1bmN0aW9uIHI0bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQ7Zm9yKGs9ZS5jLHM9ZDJ0KHQuZSksTT1mZChxTShuYyhmMnQodC5lKSksdC5kKnQuYSx0LmMqdC5iKSwtLjUpLG49cy5hLU0uYSxyPXMuYi1NLmIsaD1lLmEsbj1oLmMtbixyPWguZC1yLHY9bmV3IFMoayk7di5hPHYuYy5jLmxlbmd0aDspe3N3aXRjaChkPXUoSih2KSwzOTUpLGo9ZC5iLEg9bitqLmEsdHQ9citqLmIsRz1wcyhIL3QuYSksZ3Q9cHModHQvdC5iKSxvPWQuYSxvLmcpe2Nhc2UgMDpDPSh1NigpLGRPKTticmVhaztjYXNlIDE6Qz0odTYoKSxmTyk7YnJlYWs7Y2FzZSAyOkM9KHU2KCksZ08pO2JyZWFrO2RlZmF1bHQ6Qz0odTYoKSxwTyl9by5hPyhNdD1wcygodHQrZC5jKS90LmIpLGxlKHQuZixuZXcgVHd0KEMscGUoZ3QpLHBlKE10KSkpLG89PShjXygpLHdPKT9pRSh0LDAsZ3QsRyxNdCk6aUUodCxHLGd0LHQuZC0xLE10KSk6KEs9cHMoKEgrZC5jKS90LmEpLGxlKHQuZixuZXcgVHd0KEMscGUoRykscGUoSykpKSxvPT0oY18oKSxiTyk/aUUodCxHLDAsSyxndCk6aUUodCxHLGd0LEssdC5jLTEpKX19ZnVuY3Rpb24gaTRuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdDtmb3Ioaj1uZXcgaGUscz1uZXcgaGUsSz1udWxsLGQ9ZS5LYygpO2QuT2IoKTspaD11KGQuUGIoKSwxOSksbz1uZXcgQXAoaC5hKSxzLmNbcy5jLmxlbmd0aF09byxLJiYoby5kPUssSy5lPW8pLEs9bztmb3IoU3Q9RHluKHQpLEM9MDtDPHMuYy5sZW5ndGg7KytDKXtmb3IoSD1udWxsLHR0PUNtdCgoQW4oMCxzLmMubGVuZ3RoKSx1KHMuY1swXSw2NTIpKSksbj1udWxsLHI9YXMsTT0xO008dC5iLmMubGVuZ3RoOysrTSlndD10dD9iLk1hdGguYWJzKHR0LmItTSk6Yi5NYXRoLmFicyhNLUguYikrMSxHPUg/Yi5NYXRoLmFicyhNLUguYik6Z3QrMSxHPGd0PyhrPUgsdj1HKTooaz10dCx2PWd0KSxNdD0oUnQ9WHQoeWUoUSh0LChUZSgpLEM5dCkpKSksU3RbTV0rYi5NYXRoLnBvdyh2LFJ0KSksTXQ8ciYmKHI9TXQsbj1rLG4uYz1NKSx0dCYmTT09dHQuYiYmKEg9dHQsdHQ9bm5uKHR0KSk7biYmKGxlKGoscGUobi5jKSksbi5hPSEwLEdsbihuKSl9cmV0dXJuIHduKCksJG50KGouYyxqLmMubGVuZ3RoLG51bGwpLGp9ZnVuY3Rpb24gczRuKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDO2ZvcihlPW5ldyBVYixuPW5ldyBVYixrPWhuKHJPLChzPWtfKHQuYixZcikscz9CcihYZigoIXMuYiYmKHMuYj1uZXcga2woKGRuKCksUWEpLGNjLHMpKSxzLmIpLE5oKSk6bnVsbCkpLHY9MDt2PHQuaTsrK3YpZD11KHQuZ1t2XSwxNzApLF90KGQsOTkpPyhoPXUoZCwxOCksaC5CYiZkYz8oIShoLkJiJm1kKXx8IWsmJihvPWtfKGgsWXIpLChvP0JyKFhmKCghby5iJiYoby5iPW5ldyBrbCgoZG4oKSxRYSksY2MsbykpLG8uYiksTUgpKTpudWxsKT09bnVsbCkpJiZEcihlLGgpOihDPW5vKGgpLEMmJkMuQmImZGN8fCghKGguQmImbWQpfHwhayYmKHI9a18oaCxZciksKHI/QnIoWGYoKCFyLmImJihyLmI9bmV3IGtsKChkbigpLFFhKSxjYyxyKSksci5iKSxNSCkpOm51bGwpPT1udWxsKSkmJkRyKG4saCkpKToodG8oKSx1KGQsNjYpLk9qKCkmJihkLkpqKCl8fChEcihlLGQpLERyKG4sZCkpKSk7aXkoZSksaXkobiksdC5hPXUoZS5nLDI0NyksdShuLmcsMjQ3KX1mdW5jdGlvbiBhNG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0O2ZvcihrPVZnbihlKSxLPXUoUShlLChUZSgpLF9TKSksMzE0KSxLIT0objYoKSxQNikmJnZhKGssbmV3IGlkKSx0dD11KFEoZSxETyksMjkyKSx2YShrLG5ldyBoaSh0dCkpLEc9MCxDPW5ldyBoZSxvPW5ldyBPOShrKTtvLmEhPW8uYjspcz11KE16KG8pLDM3KSxkaGUodC5jLHMpLGo9dShRKHMsKGFlKCksS2x0KSksMTUpLEcrPWouZ2MoKSxyPWouS2MoKSxsZShDLG5ldyBmYShzLHIpKTtmb3IodnIobiwiUmVjdXJzaXZlIGhpZXJhcmNoaWNhbCBsYXlvdXQiLEcpLEg9dSh1KE5lKEMsQy5jLmxlbmd0aC0xKSw0NikuYiw0Nyk7SC5PYigpOylmb3Iodj1uZXcgUyhDKTt2LmE8di5jLmMubGVuZ3RoOylmb3IoZD11KEoodiksNDYpLGo9dShkLmIsNDcpLGg9dShkLmEsMzcpO2ouT2IoKTspaWYoTT11KGouUGIoKSw1MSksX3QoTSw1MDcpKXtpZihoLmUpYnJlYWs7TS5wZihoLFJjKG4sMSkpO2JyZWFrfWVsc2UgTS5wZihoLFJjKG4sMSkpO29yKG4pfWZ1bmN0aW9uIGVoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNO2lmKHY9ZS5sZW5ndGgtMSxkPShScih2LGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQodikpLGQ9PTkzKXtpZihoPWhkKGUsQ3UoOTEpKSxoPj0wKXJldHVybiBzPW9obih0LGUuc3Vic3RyKDEsaC0xKSksQz1lLnN1YnN0cihoKzEsdi0oaCsxKSksbnhuKHQsQyxzKX1lbHNle2lmKG49LTEsbEV0PT1udWxsJiYobEV0PW5ldyBSZWdFeHAoIlxcZCIpKSxsRXQudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGQpKSYmKG49Ynd0KGUsQ3UoNDYpLHYtMSksbj49MCkpe3I9dShVcnQodCxEZWUodCxlLnN1YnN0cigxLG4tMSkpLCExKSw1OCksaz0wO3RyeXtrPXFsKGUuc3Vic3RyKG4rMSksU2Esd2kpfWNhdGNoKGope3Rocm93IGo9V2koaiksX3QoaiwxMjcpPyhvPWosaXQobmV3IFckKG8pKSk6aXQoail9aWYoazxyLmdjKCkpcmV0dXJuIE09ci5YYihrKSxfdChNLDcyKSYmKE09dShNLDcyKS5kZCgpKSx1KE0sNTYpfWlmKG48MClyZXR1cm4gdShVcnQodCxEZWUodCxlLnN1YnN0cigxKSksITEpLDU2KX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBDNCh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNO2lmKEdpKGUsbik+PTApcmV0dXJuIG47c3dpdGNoKEh3KFRvKHQsbikpKXtjYXNlIDI6e2lmKGhuKCIiLCRnKHQsbi5IaigpKS5uZSgpKSl7aWYodj1yRChUbyh0LG4pKSxkPU04KFRvKHQsbikpLEM9QzV0KHQsZSx2LGQpLEMpcmV0dXJuIEM7Zm9yKHM9WjV0KHQsZSksaD0wLE09cy5nYygpO2g8TTsrK2gpaWYoQz11KHMuWGIoaCksMTcwKSxPNXQoWG50KFRvKHQsQykpLHYpKXJldHVybiBDfXJldHVybiBudWxsfWNhc2UgNDp7aWYoaG4oIiIsJGcodCxuLkhqKCkpLm5lKCkpKXtmb3Iocj1uO3I7cj1yc24oVG8odCxyKSkpaWYoaz1yRChUbyh0LHIpKSxkPU04KFRvKHQscikpLEM9XzV0KHQsZSxrLGQpLEMpcmV0dXJuIEM7aWYodj1yRChUbyh0LG4pKSxobihPMix2KSlyZXR1cm4gZDR0KHQsZSk7Zm9yKG89dmF0KHQsZSksaD0wLE09by5nYygpO2g8TTsrK2gpaWYoQz11KG8uWGIoaCksMTcwKSxPNXQoWG50KFRvKHQsQykpLHYpKXJldHVybiBDfXJldHVybiBudWxsfWRlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIG80bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQztpZihuLmdjKCk9PTApcmV0dXJuITE7aWYoZD0odG8oKSx1KGUsNjYpLk9qKCkpLG89ZD9uOm5ldyBRdyhuLmdjKCkpLFgwKHQuZSxlKSl7aWYoZS5oaSgpKWZvcihrPW4uS2MoKTtrLk9iKCk7KXY9ay5QYigpLE1xKHQsZSx2LF90KGUsOTkpJiYodShlLDE4KS5CYiZLYSkhPTApfHwocz1aZChlLHYpLG8uSGMocyl8fG8uRmMocykpO2Vsc2UgaWYoIWQpZm9yKGs9bi5LYygpO2suT2IoKTspdj1rLlBiKCkscz1aZChlLHYpLG8uRmMocyl9ZWxzZXtpZihuLmdjKCk+MSl0aHJvdyBpdChuZXcgRm4oYU8pKTtmb3IoQz1vdSh0LmUuVGcoKSxlKSxyPXUodC5nLDExOSksaD0wO2g8dC5pOysraClpZihzPXJbaF0sQy5ybChzLmFrKCkpKXtpZihuLkhjKGQ/czpzLmRkKCkpKXJldHVybiExO2ZvcihrPW4uS2MoKTtrLk9iKCk7KXY9ay5QYigpLHUoaDQodCxoLGQ/dSh2LDcyKTpaZChlLHYpKSw3Mik7cmV0dXJuITB9ZHx8KHM9WmQoZSxuLktjKCkuUGIoKSksby5GYyhzKSl9cmV0dXJuIGlzKHQsbyl9ZnVuY3Rpb24gYzRuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDO2ZvcihDPW5ldyBaaSxkPShrPW5ldyB2MSh0LmMpLmEudmMoKS5LYygpLG5ldyBtMShrKSk7ZC5hLk9iKCk7KW89KHM9dShkLmEuUGIoKSw0MiksdShzLmRkKCksNDU4KSksby5iPT0wJiZmcyhDLG8sQy5jLmIsQy5jKTtmb3IoO0MuYiE9MDspZm9yKG89dShDLmI9PTA/bnVsbDooWm4oQy5iIT0wKSxsaChDLEMuYS5hKSksNDU4KSxvLmE9PW51bGwmJihvLmE9MCkscj1uZXcgUyhvLmQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDY1NCksbi5iLmE9PW51bGw/bi5iLmE9WHQoby5hKStuLmE6ZS5vPT0oQzEoKSxIMik/bi5iLmE9Yi5NYXRoLm1pbihYdChuLmIuYSksWHQoby5hKStuLmEpOm4uYi5hPWIuTWF0aC5tYXgoWHQobi5iLmEpLFh0KG8uYSkrbi5hKSwtLW4uYi5iLG4uYi5iPT0wJiZyaShDLG4uYik7Zm9yKGg9KHY9bmV3IHYxKHQuYykuYS52YygpLktjKCksbmV3IG0xKHYpKTtoLmEuT2IoKTspbz0ocz11KGguYS5QYigpLDQyKSx1KHMuZGQoKSw0NTgpKSxlLmlbby5jLnBdPW8uYX1mdW5jdGlvbiBmYygpe2ZjPVoscVM9bmV3IFZpKHc2dCksbmV3IFBzKCJERVBUSCIscGUoMCkpLE1HPW5ldyBQcygiRkFOIixwZSgwKSkscHllPW5ldyBQcyhZMWUscGUoMCkpLFh5PW5ldyBQcygiUk9PVCIsKE5uKCksITEpKSxSaHQ9bmV3IFBzKCJMRUZUTkVJR0hCT1IiLG51bGwpLGJ5ZT1uZXcgUHMoIlJJR0hUTkVJR0hCT1IiLG51bGwpLERHPW5ldyBQcygiTEVGVFNJQkxJTkciLG51bGwpLGpodD1uZXcgUHMoIlJJR0hUU0lCTElORyIsbnVsbCksQmh0PW5ldyBQcygiRFVNTVkiLCExKSxuZXcgUHMoIkxFVkVMIixwZSgwKSksYV90PW5ldyBQcygiUkVNT1ZBQkxFX0VER0VTIixuZXcgWmkpLCRodD1uZXcgUHMoIlhDT09SIixwZSgwKSksb190PW5ldyBQcygiWUNPT1IiLHBlKDApKSxJRz1uZXcgUHMoIkxFVkVMSEVJR0hUIiwwKSx6Uz1uZXcgUHMoIklEIiwiIiksT0c9bmV3IFBzKCJQT1NJVElPTiIscGUoMCkpLG5wPW5ldyBQcygiUFJFTElNIiwwKSxNNz1uZXcgUHMoIk1PRElGSUVSIiwwKSwkUz1uZXcgVmkoczFlKSx6Tz1uZXcgVmkoYTFlKX1mdW5jdGlvbiB1NG4odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEgsRztmb3IoQz1uK2UuYy5jLmEsSD1uZXcgUyhlLmopO0guYTxILmMuYy5sZW5ndGg7KXtpZihqPXUoSihIKSwxMSkscz1ZbyhsdChjdChXcywxKSxlZSw4LDAsW2ouaS5uLGoubixqLmFdKSksZS5rPT0oVm4oKSxIYykmJihkPXUoUShqLChhZSgpLF9pKSksMTEpLHMuYT1ZbyhsdChjdChXcywxKSxlZSw4LDAsW2QuaS5uLGQubixkLmFdKSkuYSxlLm4uYT1zLmEpLGg9bmV3ICRlKDAscy5iKSxqLmo9PSh2ZSgpLEhuKSloLmE9QztlbHNlIGlmKGouaj09Qm4paC5hPW47ZWxzZSBjb250aW51ZTtpZihHPWIuTWF0aC5hYnMocy5hLWguYSksIShHPD1yJiYhZGRuKGUpKSlmb3Iobz1qLmcuYy5sZW5ndGgrai5lLmMubGVuZ3RoPjEsaz1uZXcgTDEoai5iKTtHbyhrLmEpfHxHbyhrLmIpOyl2PXUoR28oay5hKT9KKGsuYSk6SihrLmIpLDE3KSxNPXYuYz09aj92LmQ6di5jLGIuTWF0aC5hYnMoWW8obHQoY3QoV3MsMSksZWUsOCwwLFtNLmkubixNLm4sTS5hXSkpLmItaC5iKT4xJiZldm4odCx2LGgsbyxqKX19ZnVuY3Rpb24gbDRuKHQpe3ZhciBlLG4scixzLG8saDtpZihzPW5ldyBkYSh0LmUsMCkscj1uZXcgZGEodC5hLDApLHQuZClmb3Iobj0wO248dC5iO24rKylabihzLmI8cy5kLmdjKCkpLHMuZC5YYihzLmM9cy5iKyspO2Vsc2UgZm9yKG49MDtuPHQuYi0xO24rKylabihzLmI8cy5kLmdjKCkpLHMuZC5YYihzLmM9cy5iKyspLENsKHMpO2ZvcihlPVh0KChabihzLmI8cy5kLmdjKCkpLHllKHMuZC5YYihzLmM9cy5iKyspKSkpO3QuZi1lPkxjdDspe2ZvcihvPWUsaD0wO2IuTWF0aC5hYnMoZS1vKTxMY3Q7KSsraCxlPVh0KChabihzLmI8cy5kLmdjKCkpLHllKHMuZC5YYihzLmM9cy5iKyspKSkpLFpuKHIuYjxyLmQuZ2MoKSksci5kLlhiKHIuYz1yLmIrKyk7aDx0LmImJihabihzLmI+MCkscy5hLlhiKHMuYz0tLXMuYiksU3luKHQsdC5iLWgsbyxyLHMpLFpuKHMuYjxzLmQuZ2MoKSkscy5kLlhiKHMuYz1zLmIrKykpLFpuKHIuYj4wKSxyLmEuWGIoci5jPS0tci5iKX1pZighdC5kKWZvcihuPTA7bjx0LmItMTtuKyspWm4ocy5iPHMuZC5nYygpKSxzLmQuWGIocy5jPXMuYisrKSxDbChzKTt0LmQ9ITAsdC5jPSEwfWZ1bmN0aW9uIElpKCl7SWk9WixFTHQ9KGZidCgpLHBjKS5iLEQ1ZT11KEF0KFd0KHBjLmIpLDApLDM0KSxYMj11KEF0KFd0KHBjLmIpLDEpLDM0KSxNNWU9dShBdChXdChwYy5iKSwyKSwzNCksaDU9cGMuYmIsdShBdChXdChwYy5iYiksMCksMzQpLHUoQXQoV3QocGMuYmIpLDEpLDM0KSxmNT1wYy5mYixsQT11KEF0KFd0KHBjLmZiKSwwKSwzNCksdShBdChXdChwYy5mYiksMSksMzQpLHUoQXQoV3QocGMuZmIpLDIpLDE4KSxXdj1wYy5xYixINWU9dShBdChXdChwYy5xYiksMCksMzQpLHUoQXQoV3QocGMucWIpLDEpLDE4KSx1KEF0KFd0KHBjLnFiKSwyKSwxOCksbVA9dShBdChXdChwYy5xYiksMyksMzQpLHlQPXUoQXQoV3QocGMucWIpLDQpLDM0KSxmQT11KEF0KFd0KHBjLnFiKSw2KSwzNCksaEE9dShBdChXdChwYy5xYiksNSksMTgpLEk1ZT1wYy5qLE81ZT1wYy5rLFA1ZT1wYy5xLEY1ZT1wYy53LE41ZT1wYy5CLEI1ZT1wYy5BLFI1ZT1wYy5DLGo1ZT1wYy5ELCQ1ZT1wYy5fLHo1ZT1wYy5jYixxNWU9cGMuaGJ9ZnVuY3Rpb24gaDRuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixIO3QuYz0wLHQuYj0wLHI9MiplLmMuYS5jLmxlbmd0aCsxO3Q6Zm9yKE09bi5LYygpO00uT2IoKTspe2lmKEM9dShNLlBiKCksMTEpLGQ9Qy5qPT0odmUoKSxQbil8fEMuaj09bXIsSD0wLGQpe2lmKGo9dShRKEMsKGFlKCksSnUpKSwxMCksIWopY29udGludWU7SCs9SHZuKHQscixDLGopfWVsc2V7Zm9yKGs9bmV3IFMoQy5nKTtrLmE8ay5jLmMubGVuZ3RoOylpZih2PXUoSihrKSwxNykscz12LmQscy5pLmM9PWUuYyl7bGUodC5hLEMpO2NvbnRpbnVlIHR9ZWxzZSBIKz10Lmdbcy5wXTtmb3IoaD1uZXcgUyhDLmUpO2guYTxoLmMuYy5sZW5ndGg7KWlmKG89dShKKGgpLDE3KSxzPW8uYyxzLmkuYz09ZS5jKXtsZSh0LmEsQyk7Y29udGludWUgdH1lbHNlIEgtPXQuZ1tzLnBdfUMuZS5jLmxlbmd0aCtDLmcuYy5sZW5ndGg+MD8odC5mW0MucF09SC8oQy5lLmMubGVuZ3RoK0MuZy5jLmxlbmd0aCksdC5jPWIuTWF0aC5taW4odC5jLHQuZltDLnBdKSx0LmI9Yi5NYXRoLm1heCh0LmIsdC5mW0MucF0pKTpkJiYodC5mW0MucF09SCl9fWZ1bmN0aW9uIGY0bih0KXt0LmI9bnVsbCx0LmJiPW51bGwsdC5mYj1udWxsLHQucWI9bnVsbCx0LmE9bnVsbCx0LmM9bnVsbCx0LmQ9bnVsbCx0LmU9bnVsbCx0LmY9bnVsbCx0Lm49bnVsbCx0Lk09bnVsbCx0Lkw9bnVsbCx0LlE9bnVsbCx0LlI9bnVsbCx0Lks9bnVsbCx0LmRiPW51bGwsdC5lYj1udWxsLHQuZz1udWxsLHQuaT1udWxsLHQuaj1udWxsLHQuaz1udWxsLHQuZ2I9bnVsbCx0Lm89bnVsbCx0LnA9bnVsbCx0LnE9bnVsbCx0LnI9bnVsbCx0LiQ9bnVsbCx0LmliPW51bGwsdC5TPW51bGwsdC5UPW51bGwsdC50PW51bGwsdC5zPW51bGwsdC51PW51bGwsdC52PW51bGwsdC53PW51bGwsdC5CPW51bGwsdC5BPW51bGwsdC5DPW51bGwsdC5EPW51bGwsdC5GPW51bGwsdC5HPW51bGwsdC5IPW51bGwsdC5JPW51bGwsdC5KPW51bGwsdC5QPW51bGwsdC5aPW51bGwsdC5VPW51bGwsdC5WPW51bGwsdC5XPW51bGwsdC5YPW51bGwsdC5ZPW51bGwsdC5fPW51bGwsdC5hYj1udWxsLHQuY2I9bnVsbCx0LmhiPW51bGwsdC5uYj1udWxsLHQubGI9bnVsbCx0Lm1iPW51bGwsdC5vYj1udWxsLHQucGI9bnVsbCx0LmpiPW51bGwsdC5rYj1udWxsLHQuTj0hMSx0Lk89ITF9ZnVuY3Rpb24gZDRuKHQsZSxuKXt2YXIgcixzLG8saDtmb3IodnIobiwiR3JhcGggdHJhbnNmb3JtYXRpb24gKCIrdC5hKyIpIiwxKSxoPVd3KGUuYSksbz1uZXcgUyhlLmIpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDI5KSxMcyhoLHMuYSk7aWYocj11KFEoZSwoVGUoKSxVQ3QpKSw0MTkpLHI9PShMRCgpLEdWKSlzd2l0Y2godShRKGUsV2wpLDEwMykuZyl7Y2FzZSAyOkI5KGUsaCk7YnJlYWs7Y2FzZSAzOnNfKGUsaCk7YnJlYWs7Y2FzZSA0OnQuYT09KFg4KCkseU8pPyhzXyhlLGgpLE5ydChlLGgpKTooTnJ0KGUsaCksc18oZSxoKSl9ZWxzZSBpZih0LmE9PShYOCgpLHlPKSlzd2l0Y2godShRKGUsV2wpLDEwMykuZyl7Y2FzZSAyOkI5KGUsaCksTnJ0KGUsaCk7YnJlYWs7Y2FzZSAzOnNfKGUsaCksQjkoZSxoKTticmVhaztjYXNlIDQ6QjkoZSxoKSxzXyhlLGgpfWVsc2Ugc3dpdGNoKHUoUShlLFdsKSwxMDMpLmcpe2Nhc2UgMjpCOShlLGgpLE5ydChlLGgpO2JyZWFrO2Nhc2UgMzpCOShlLGgpLHNfKGUsaCk7YnJlYWs7Y2FzZSA0OnNfKGUsaCksQjkoZSxoKX1vcihuKX1mdW5jdGlvbiBnNG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLO2ZvcihrPW5ldyBPMCxDPW5ldyBPMCxHPW5ldyBPMCxLPW5ldyBPMCx2PVh0KHllKFEoZSwoVGUoKSwkdikpKSksbz1YdCh5ZShRKGUsVGYpKSksZD1uZXcgUyhuKTtkLmE8ZC5jLmMubGVuZ3RoOylpZihoPXUoSihkKSwxMCksTT11KFEoaCwoYWUoKSxvYykpLDYxKSxNPT0odmUoKSxQbikpZm9yKEMuYS56YyhoLEMpLHM9bmV3IGFyKGxyKGpvKGgpLmEuS2MoKSxuZXcgeikpO3pyKHMpOylyPXUoTXIocyksMTcpLEZzKGssci5jLmkpO2Vsc2UgaWYoTT09bXIpZm9yKEsuYS56YyhoLEspLHM9bmV3IGFyKGxyKGpvKGgpLmEuS2MoKSxuZXcgeikpO3pyKHMpOylyPXUoTXIocyksMTcpLEZzKEcsci5jLmkpO2suYS5nYygpIT0wJiYoaj1uZXcgZXJ0KDIsbyksSD1UeHQoaixlLGssQywtdi1lLmMuYiksSD4wJiYodC5hPXYrKEgtMSkqbyxlLmMuYis9dC5hLGUuZi5iKz10LmEpKSxHLmEuZ2MoKSE9MCYmKGo9bmV3IGVydCgxLG8pLEg9VHh0KGosZSxHLEssZS5mLmIrdi1lLmMuYiksSD4wJiYoZS5mLmIrPXYrKEgtMSkqbykpfWZ1bmN0aW9uIE9FKHQsZSl7dmFyIG4scixzLG87bz10LkYsZT09bnVsbD8odC5GPW51bGwsYUUodCxudWxsKSk6KHQuRj0oT24oZSksZSkscj1oZChlLEN1KDYwKSksciE9LTE/KHM9ZS5zdWJzdHIoMCxyKSxoZChlLEN1KDQ2KSk9PS0xJiYhaG4ocyxiNikmJiFobihzLHRTKSYmIWhuKHMsRkgpJiYhaG4ocyxlUykmJiFobihzLG5TKSYmIWhuKHMsclMpJiYhaG4ocyxpUykmJiFobihzLHNTKSYmKHM9JDBlKSxuPVRqKGUsQ3UoNjIpKSxuIT0tMSYmKHMrPSIiK2Uuc3Vic3RyKG4rMSkpLGFFKHQscykpOihzPWUsaGQoZSxDdSg0NikpPT0tMSYmKHI9aGQoZSxDdSg5MSkpLHIhPS0xJiYocz1lLnN1YnN0cigwLHIpKSwhaG4ocyxiNikmJiFobihzLHRTKSYmIWhuKHMsRkgpJiYhaG4ocyxlUykmJiFobihzLG5TKSYmIWhuKHMsclMpJiYhaG4ocyxpUykmJiFobihzLHNTKT8ocz0kMGUsciE9LTEmJihzKz0iIitlLnN1YnN0cihyKSkpOnM9ZSksYUUodCxzKSxzPT1lJiYodC5GPXQuRCkpKSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgSnModCwxLDUsbyxlKSl9ZnVuY3Rpb24gcDRuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdDtpZihLPWUuYi5jLmxlbmd0aCwhKEs8Mykpe2ZvcihIPU50KENyLFhyLDI1LEssMTUsMSksTT0wLEM9bmV3IFMoZS5iKTtDLmE8Qy5jLmMubGVuZ3RoOylrPXUoSihDKSwyOSksSFtNKytdPWsuYS5jLmxlbmd0aDtmb3Ioaj1uZXcgZGEoZS5iLDIpLHI9MTtyPEstMTtyKyspZm9yKG49KFpuKGouYjxqLmQuZ2MoKSksdShqLmQuWGIoai5jPWouYisrKSwyOSkpLEc9bmV3IFMobi5hKSxvPTAsZD0wLHY9MDt2PEhbcisxXTt2KyspaWYoU3Q9dShKKEcpLDEwKSx2PT1IW3IrMV0tMXx8RzR0KHQsU3QscisxLHIpKXtmb3IoaD1IW3JdLTEsRzR0KHQsU3QscisxLHIpJiYoaD10LmMuZVt1KHUodShOZSh0LmMuYixTdC5wKSwxNSkuWGIoMCksNDYpLmEsMTApLnBdKTtkPD12Oyl7aWYoTXQ9dShOZShuLmEsZCksMTApLCFHNHQodCxNdCxyKzEscikpZm9yKGd0PXUoTmUodC5jLmIsTXQucCksMTUpLktjKCk7Z3QuT2IoKTspdHQ9dShndC5QYigpLDQ2KSxzPXQuYy5lW3UodHQuYSwxMCkucF0sKHM8b3x8cz5oKSYmRnModC5iLHUodHQuYiwxNykpOysrZH1vPWh9fX1mdW5jdGlvbiB4eHQodCxlKXt2YXIgbjtpZihlPT1udWxsfHxobihlLF91KXx8ZS5sZW5ndGg9PTAmJnQuayE9KFVnKCksVTYpKXJldHVybiBudWxsO3N3aXRjaCh0LmsuZyl7Y2FzZSAxOnJldHVybiBWeihlLFhFKT8oTm4oKSxyNyk6VnooZSxWY3QpPyhObigpLEYyKTpudWxsO2Nhc2UgMjp0cnl7cmV0dXJuIHBlKHFsKGUsU2Esd2kpKX1jYXRjaChyKXtpZihyPVdpKHIpLF90KHIsMTI3KSlyZXR1cm4gbnVsbDt0aHJvdyBpdChyKX1jYXNlIDQ6dHJ5e3JldHVybiBkeShlKX1jYXRjaChyKXtpZihyPVdpKHIpLF90KHIsMTI3KSlyZXR1cm4gbnVsbDt0aHJvdyBpdChyKX1jYXNlIDM6cmV0dXJuIGU7Y2FzZSA1OnJldHVybiBScmUodCksVm9lKHQsZSk7Y2FzZSA2OnJldHVybiBScmUodCksQzJuKHQsdC5hLGUpO2Nhc2UgNzp0cnl7cmV0dXJuIG49QmJuKHQpLG4uSmYoZSksbn1jYXRjaChyKXtpZihyPVdpKHIpLF90KHIsMzIpKXJldHVybiBudWxsO3Rocm93IGl0KHIpfWRlZmF1bHQ6dGhyb3cgaXQobmV3IE5vKCJJbnZhbGlkIHR5cGUgc2V0IGZvciB0aGlzIGxheW91dCBvcHRpb24uIikpfX1mdW5jdGlvbiBiNG4odCl7SDkoKTt2YXIgZSxuLHIscyxvLGgsZDtmb3IoZD1uZXcgcHF0LG49bmV3IFModCk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTQwKSwoIWQuYnx8ZS5jPj1kLmIuYykmJihkLmI9ZSksKCFkLmN8fGUuYzw9ZC5jLmMpJiYoZC5kPWQuYyxkLmM9ZSksKCFkLmV8fGUuZD49ZC5lLmQpJiYoZC5lPWUpLCghZC5mfHxlLmQ8PWQuZi5kKSYmKGQuZj1lKTtyZXR1cm4gcj1uZXcgWXooKG5FKCksTHYpKSxoRCh0LFViZSxuZXcgeWwobHQoY3QobU8sMSksRGUsMzY5LDAsW3JdKSkpLGg9bmV3IFl6KEZ5KSxoRCh0LEdiZSxuZXcgeWwobHQoY3QobU8sMSksRGUsMzY5LDAsW2hdKSkpLHM9bmV3IFl6KFB5KSxoRCh0LFZiZSxuZXcgeWwobHQoY3QobU8sMSksRGUsMzY5LDAsW3NdKSkpLG89bmV3IFl6KHo0KSxoRCh0LEhiZSxuZXcgeWwobHQoY3QobU8sMSksRGUsMzY5LDAsW29dKSkpLGFhdChyLmMsTHYpLGFhdChzLmMsUHkpLGFhdChvLmMsejQpLGFhdChoLmMsRnkpLGQuYS5jPU50KFFuLERlLDEsMCw1LDEpLExzKGQuYSxyLmMpLExzKGQuYSxsMihzLmMpKSxMcyhkLmEsby5jKSxMcyhkLmEsbDIoaC5jKSksZH1mdW5jdGlvbiBreHQodCl7dmFyIGU7c3dpdGNoKHQuZCl7Y2FzZSAxOntpZih0LmhqKCkpcmV0dXJuIHQubyE9LTI7YnJlYWt9Y2FzZSAyOntpZih0LmhqKCkpcmV0dXJuIHQubz09LTI7YnJlYWt9Y2FzZSAzOmNhc2UgNTpjYXNlIDQ6Y2FzZSA2OmNhc2UgNzpyZXR1cm4gdC5vPi0yO2RlZmF1bHQ6cmV0dXJuITF9c3dpdGNoKGU9dC5naigpLHQucCl7Y2FzZSAwOnJldHVybiBlIT1udWxsJiZqZShSZShlKSkhPXU5KHQuaywwKTtjYXNlIDE6cmV0dXJuIGUhPW51bGwmJnUoZSwyMTcpLmEhPUFyKHQuayk8PDI0Pj4yNDtjYXNlIDI6cmV0dXJuIGUhPW51bGwmJnUoZSwxNzIpLmEhPShBcih0LmspJnlzKTtjYXNlIDY6cmV0dXJuIGUhPW51bGwmJnU5KHUoZSwxNjIpLmEsdC5rKTtjYXNlIDU6cmV0dXJuIGUhPW51bGwmJnUoZSwxOSkuYSE9QXIodC5rKTtjYXNlIDc6cmV0dXJuIGUhPW51bGwmJnUoZSwxODQpLmEhPUFyKHQuayk8PDE2Pj4xNjtjYXNlIDM6cmV0dXJuIGUhPW51bGwmJlh0KHllKGUpKSE9dC5qO2Nhc2UgNDpyZXR1cm4gZSE9bnVsbCYmdShlLDE1NSkuYSE9dC5qO2RlZmF1bHQ6cmV0dXJuIGU9PW51bGw/dC5uIT1udWxsOiF5aShlLHQubil9fWZ1bmN0aW9uIEFJKHQsZSxuKXt2YXIgcixzLG8saDtyZXR1cm4gdC5GaygpJiZ0LkVrKCkmJihoPVdudCh0LHUobiw1NikpLFZ0KGgpIT09VnQobikpPyh0Lk9pKGUpLHQuVWkoZSxJdGUodCxlLGgpKSx0LnJrKCkmJihvPShzPXUobiw0OSksdC5EaygpP3QuQmsoKT9zLmloKHQuYixubyh1KHluKHZ1KHQuYiksdC5haigpKSwxOCkpLm4sdSh5bih2dSh0LmIpLHQuYWooKSkuWWooKSwyNikuQmooKSxudWxsKTpzLmloKHQuYixHaShzLlRnKCksbm8odSh5bih2dSh0LmIpLHQuYWooKSksMTgpKSksbnVsbCxudWxsKTpzLmloKHQuYiwtMS10LmFqKCksbnVsbCxudWxsKSksIXUoaCw0OSkuZWgoKSYmKG89KHI9dShoLDQ5KSx0LkRrKCk/dC5CaygpP3IuZ2godC5iLG5vKHUoeW4odnUodC5iKSx0LmFqKCkpLDE4KSkubix1KHluKHZ1KHQuYiksdC5haigpKS5ZaigpLDI2KS5CaigpLG8pOnIuZ2godC5iLEdpKHIuVGcoKSxubyh1KHluKHZ1KHQuYiksdC5haigpKSwxOCkpKSxudWxsLG8pOnIuZ2godC5iLC0xLXQuYWooKSxudWxsLG8pKSksbyYmby5GaSgpKSx4bCh0LmIpJiZ0LiRpKHQuWmkoOSxuLGgsZSwhMSkpLGgpOm59ZnVuY3Rpb24gbmhlKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdDtmb3IoQz1YdCh5ZShRKHQsKFRlKCksanYpKSkpLHI9WHQoeWUoUSh0LHg5dCkpKSxqPW5ldyBZdSxKdChqLGp2LEMrciksaz1lLGd0PWsuZCxLPWsuYy5pLE10PWsuZC5pLHR0PW8ydChLLmMpLFN0PW8ydChNdC5jKSxzPW5ldyBoZSxNPXR0O008PVN0O00rKylkPW5ldyBZMCh0KSxEMChkLChWbigpLHRhKSksSnQoZCwoYWUoKSxfaSksayksSnQoZCxjcywodWEoKSxHYykpLEp0KGQsYkcsaiksSD11KE5lKHQuYixNKSwyOSksTT09dHQ/bHkoZCxILmEuYy5sZW5ndGgtbixIKTpFbyhkLEgpLFJ0PVh0KHllKFEoayxKZykpKSxSdDwwJiYoUnQ9MCxKdChrLEpnLFJ0KSksZC5vLmI9UnQsRz1iLk1hdGguZmxvb3IoUnQvMiksaD1uZXcgTWMsQnMoaCwodmUoKSxCbikpLFVvKGgsZCksaC5uLmI9Ryx2PW5ldyBNYyxCcyh2LEhuKSxVbyh2LGQpLHYubi5iPUcsb2EoayxoKSxvPW5ldyBWdyxNbyhvLGspLEp0KG8sU28sbnVsbCksT2Eobyx2KSxvYShvLGd0KSxtZG4oZCxrLG8pLHMuY1tzLmMubGVuZ3RoXT1vLGs9bztyZXR1cm4gc31mdW5jdGlvbiBCYXQodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0O2Zvcih2PXUoR2codCwodmUoKSxCbikpLktjKCkuUGIoKSwxMSkuZSxIPXUoR2codCxIbikuS2MoKS5QYigpLDExKS5nLGQ9di5jLmxlbmd0aCxTdD1fMSh1KE5lKHQuaiwwKSwxMSkpO2QtLSA+MDspe2ZvcihLPShBbigwLHYuYy5sZW5ndGgpLHUodi5jWzBdLDE3KSkscz0oQW4oMCxILmMubGVuZ3RoKSx1KEguY1swXSwxNykpLE10PXMuZC5lLG89Um8oTXQscywwKSxFc24oSyxzLmQsbyksT2EocyxudWxsKSxvYShzLG51bGwpLEc9Sy5hLGUmJnJpKEcsbmV3IHhvKFN0KSkscj1laShzLmEsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDgpLHJpKEcsbmV3IHhvKG4pKTtmb3IoZ3Q9Sy5iLGo9bmV3IFMocy5iKTtqLmE8ai5jLmMubGVuZ3RoOylNPXUoSihqKSw3MCksZ3QuY1tndC5jLmxlbmd0aF09TTtpZih0dD11KFEoSywoVGUoKSxTbykpLDc0KSxoPXUoUShzLFNvKSw3NCksaClmb3IodHR8fCh0dD1uZXcgUHUsSnQoSyxTbyx0dCkpLEM9ZWkoaCwwKTtDLmIhPUMuZC5jOylrPXUodGkoQyksOCkscmkodHQsbmV3IHhvKGspKX19ZnVuY3Rpb24gcmhlKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixIO2lmKG49dShwbyh0LmIsZSksMTI0KSx2PXUodShBaSh0LnIsZSksMjEpLDg0KSx2LmRjKCkpe24ubi5iPTAsbi5uLmM9MDtyZXR1cm59Zm9yKGs9dC51LkhjKChadSgpLHNnKSksaD0wLGQ9di5LYygpLEM9bnVsbCxNPTAsaj0wO2QuT2IoKTspcj11KGQuUGIoKSwxMTEpLHM9WHQoeWUoci5iLldlKChDaigpLHVWKSkpKSxvPXIuYi5yZigpLmEsdC5BLkhjKChBbCgpLEsyKSkmJk51ZSh0LGUpLEM/KEg9aitDLmQuYyt0Lncrci5kLmIsaD1iLk1hdGgubWF4KGgsKGsxKCksd2YoQjEpLGIuTWF0aC5hYnMoTS1zKTw9QjF8fE09PXN8fGlzTmFOKE0pJiZpc05hTihzKT8wOkgvKHMtTSkpKSk6dC5DJiZ0LkMuYj4wJiYoaD1iLk1hdGgubWF4KGgsTW5lKHQuQy5iK3IuZC5iLHMpKSksQz1yLE09cyxqPW87dC5DJiZ0LkMuYz4wJiYoSD1qK3QuQy5jLGsmJihIKz1DLmQuYyksaD1iLk1hdGgubWF4KGgsKGsxKCksd2YoQjEpLGIuTWF0aC5hYnMoTS0xKTw9QjF8fE09PTF8fGlzTmFOKE0pJiZpc05hTigxKT8wOkgvKDEtTSkpKSksbi5uLmI9MCxuLmEuYT1ofWZ1bmN0aW9uIGloZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSDtpZihuPXUocG8odC5iLGUpLDEyNCksdj11KHUoQWkodC5yLGUpLDIxKSw4NCksdi5kYygpKXtuLm4uZD0wLG4ubi5hPTA7cmV0dXJufWZvcihrPXQudS5IYygoWnUoKSxzZykpLGg9MCx0LkEuSGMoKEFsKCksSzIpKSYmQnVlKHQsZSksZD12LktjKCksQz1udWxsLGo9MCxNPTA7ZC5PYigpOylyPXUoZC5QYigpLDExMSksbz1YdCh5ZShyLmIuV2UoKENqKCksdVYpKSkpLHM9ci5iLnJmKCkuYixDPyhIPU0rQy5kLmErdC53K3IuZC5kLGg9Yi5NYXRoLm1heChoLChrMSgpLHdmKEIxKSxiLk1hdGguYWJzKGotbyk8PUIxfHxqPT1vfHxpc05hTihqKSYmaXNOYU4obyk/MDpILyhvLWopKSkpOnQuQyYmdC5DLmQ+MCYmKGg9Yi5NYXRoLm1heChoLE1uZSh0LkMuZCtyLmQuZCxvKSkpLEM9cixqPW8sTT1zO3QuQyYmdC5DLmE+MCYmKEg9TSt0LkMuYSxrJiYoSCs9Qy5kLmEpLGg9Yi5NYXRoLm1heChoLChrMSgpLHdmKEIxKSxiLk1hdGguYWJzKGotMSk8PUIxfHxqPT0xfHxpc05hTihqKSYmaXNOYU4oMSk/MDpILygxLWopKSkpLG4ubi5kPTAsbi5hLmI9aH1mdW5jdGlvbiBzaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdjtmb3IodGhpcy5nPXQsZD1lLmQubGVuZ3RoLHY9bi5kLmxlbmd0aCx0aGlzLmQ9TnQobDAsWWcsMTAsZCt2LDAsMSksaD0wO2g8ZDtoKyspdGhpcy5kW2hdPWUuZFtoXTtmb3Iobz0wO288djtvKyspdGhpcy5kW2Qrb109bi5kW29dO2lmKGUuZSl7aWYodGhpcy5lPVFNKGUuZSksdGhpcy5lLk1jKG4pLG4uZSlmb3Iocz1uLmUuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMjMzKSxyIT1lJiYodGhpcy5lLkhjKHIpPy0tci5jOnRoaXMuZS5GYyhyKSl9ZWxzZSBuLmUmJih0aGlzLmU9UU0obi5lKSx0aGlzLmUuTWMoZSkpO3RoaXMuZj1lLmYrbi5mLHRoaXMuYT1lLmErbi5hLHRoaXMuYT4wP2xpdCh0aGlzLHRoaXMuZi90aGlzLmEpOkUxKGUuZyxlLmRbMF0pLmEhPW51bGwmJkUxKG4uZyxuLmRbMF0pLmEhPW51bGw/bGl0KHRoaXMsKFh0KEUxKGUuZyxlLmRbMF0pLmEpK1h0KEUxKG4uZyxuLmRbMF0pLmEpKS8yKTpFMShlLmcsZS5kWzBdKS5hIT1udWxsP2xpdCh0aGlzLEUxKGUuZyxlLmRbMF0pLmEpOkUxKG4uZyxuLmRbMF0pLmEhPW51bGwmJmxpdCh0aGlzLEUxKG4uZyxuLmRbMF0pLmEpfWZ1bmN0aW9uIHc0bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNO2Zvcih0LmE9bmV3IGRYdChVY24oWFMpKSxyPW5ldyBTKGUuYSk7ci5hPHIuYy5jLmxlbmd0aDspe2ZvcihuPXUoSihyKSw4NDEpLGQ9bmV3IG9zdChsdChjdChhbHQsMSksRGUsODEsMCxbXSkpLGxlKHQuYS5hLGQpLGs9bmV3IFMobi5kKTtrLmE8ay5jLmMubGVuZ3RoOyl2PXUoSihrKSwxMTApLEM9bmV3IEYydCh0LHYpLEN4dChDLHUoUShuLmMsKGFlKCksQnkpKSwyMSkpLFRsKHQuZyxuKXx8KGtpKHQuZyxuLG5ldyAkZSh2LmMsdi5kKSksa2kodC5mLG4sQykpLGxlKHQuYS5iLEMpLFBydChkLEMpO2ZvcihoPW5ldyBTKG4uYik7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksNTk0KSxDPW5ldyBGMnQodCxvLmtmKCkpLGtpKHQuYixvLG5ldyBmYShkLEMpKSxDeHQoQyx1KFEobi5jLChhZSgpLEJ5KSksMjEpKSxvLmhmKCkmJihNPW5ldyBOM3QodCxvLmhmKCksMSksQ3h0KE0sdShRKG4uYyxCeSksMjEpKSxzPW5ldyBvc3QobHQoY3QoYWx0LDEpLERlLDgxLDAsW10pKSxQcnQocyxNKSxsbih0LmMsby5nZigpLG5ldyBmYShkLE0pKSl9cmV0dXJuIHQuYX1mdW5jdGlvbiBhaGUodCl7dmFyIGU7dGhpcy5hPXQsZT0oVm4oKSxsdChjdChmbHQsMSksb2UsMjY3LDAsW09zLHRhLGtzLEhjLExsLHoxXSkpLmxlbmd0aCx0aGlzLmI9dDIoY2Z0LFtlZSx6a3RdLFs1OTMsMTQ2XSwwLFtlLGVdLDIpLHRoaXMuYz10MihjZnQsW2VlLHprdF0sWzU5MywxNDZdLDAsW2UsZV0sMikseXJ0KHRoaXMsT3MsKFRlKCksJHYpLHQ1KSxYOSh0aGlzLE9zLHRhLGp2LHEyKSxhRCh0aGlzLE9zLEhjLGp2KSxhRCh0aGlzLE9zLGtzLGp2KSxYOSh0aGlzLE9zLExsLCR2LHQ1KSx5cnQodGhpcyx0YSxUZixKNCksYUQodGhpcyx0YSxIYyxUZiksYUQodGhpcyx0YSxrcyxUZiksWDkodGhpcyx0YSxMbCxqdixxMiksUFV0KHRoaXMsSGMsVGYpLGFEKHRoaXMsSGMsa3MsVGYpLGFEKHRoaXMsSGMsTGwsaGh0KSxQVXQodGhpcyxrcyxMUyksWDkodGhpcyxrcyxMbCxBNyxTNykseXJ0KHRoaXMsTGwsVGYsVGYpLHlydCh0aGlzLHoxLFRmLEo0KSxYOSh0aGlzLHoxLE9zLGp2LHEyKSxYOSh0aGlzLHoxLExsLGp2LHEyKSxYOSh0aGlzLHoxLHRhLGp2LHEyKX1mdW5jdGlvbiB2NG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0O2lmKGg9bi5haygpLF90KGgsOTkpJiZ1KGgsMTgpLkJiJkthJiYoaj11KG4uZGQoKSw0OSksSz1acCh0LmUsaiksSyE9aikpe2lmKEM9WmQoaCxLKSxwOSh0LGUsUnN0KHQsZSxDKSksTT1udWxsLHhsKHQuZSkmJihyPUM0KCgkdSgpLHlhKSx0LmUuVGcoKSxoKSxyIT15bih0LmUuVGcoKSx0LmMpKSl7Zm9yKHR0PW91KHQuZS5UZygpLGgpLGQ9MCxvPXUodC5nLDExOSksdj0wO3Y8ZTsrK3Ypcz1vW3ZdLHR0LnJsKHMuYWsoKSkmJisrZDtNPW5ldyBqcnQodC5lLDkscixqLEssZCwhMSksTS5FaShuZXcgejAodC5lLDksdC5jLG4sQyxlLCExKSl9cmV0dXJuIEc9dShoLDE4KSxIPW5vKEcpLEg/KE09ai5paCh0LmUsR2koai5UZygpLEgpLG51bGwsTSksTT11KEssNDkpLmdoKHQuZSxHaShLLlRnKCksSCksbnVsbCxNKSk6Ry5CYiZkYyYmKGs9LTEtR2kodC5lLlRnKCksRyksTT1qLmloKHQuZSxrLG51bGwsbnVsbCksIXUoSyw0OSkuZWgoKSYmKE09dShLLDQ5KS5naCh0LmUsayxudWxsLE0pKSksTSYmTS5GaSgpLEN9cmV0dXJuIG59ZnVuY3Rpb24gbTRuKHQpe3ZhciBlLG4scixzLG8saCxkLHY7Zm9yKG89bmV3IFModC5hLmIpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDgxKSxzLmIuYz1zLmcuYyxzLmIuZD1zLmcuZDtmb3Iodj1uZXcgJGUoYXMsYXMpLGU9bmV3ICRlKENzLENzKSxyPW5ldyBTKHQuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw4MSksdi5hPWIuTWF0aC5taW4odi5hLG4uZy5jKSx2LmI9Yi5NYXRoLm1pbih2LmIsbi5nLmQpLGUuYT1iLk1hdGgubWF4KGUuYSxuLmcuYytuLmcuYiksZS5iPWIuTWF0aC5tYXgoZS5iLG4uZy5kK24uZy5hKTtmb3IoZD1hJCh0LmMpLmEubmMoKTtkLk9iKCk7KWg9dShkLlBiKCksNDYpLG49dShoLmIsODEpLHYuYT1iLk1hdGgubWluKHYuYSxuLmcuYyksdi5iPWIuTWF0aC5taW4odi5iLG4uZy5kKSxlLmE9Yi5NYXRoLm1heChlLmEsbi5nLmMrbi5nLmIpLGUuYj1iLk1hdGgubWF4KGUuYixuLmcuZCtuLmcuYSk7dC5kPU1qKG5ldyAkZSh2LmEsdi5iKSksdC5lPWlhKG5ldyAkZShlLmEsZS5iKSx2KSx0LmEuYS5jPU50KFFuLERlLDEsMCw1LDEpLHQuYS5iLmM9TnQoUW4sRGUsMSwwLDUsMSl9ZnVuY3Rpb24geTRuKHQpe3ZhciBlLG4scjtmb3IobzQoQWIsbHQoY3QoJDQsMSksRGUsMTMwLDAsW25ldyBUcF0pKSxuPW5ldyB3eCh0KSxyPTA7cjxuLmEubGVuZ3RoOysrcillPUptKG4scikuamUoKS5hLGhuKGUsImxheWVyZWQiKT9vNChBYixsdChjdCgkNCwxKSxEZSwxMzAsMCxbbmV3IHJ0dF0pKTpobihlLCJmb3JjZSIpP280KEFiLGx0KGN0KCQ0LDEpLERlLDEzMCwwLFtuZXcgSEpdKSk6aG4oZSwic3RyZXNzIik/bzQoQWIsbHQoY3QoJDQsMSksRGUsMTMwLDAsW25ldyBWSl0pKTpobihlLCJtcnRyZWUiKT9vNChBYixsdChjdCgkNCwxKSxEZSwxMzAsMCxbbmV3IEQzXSkpOmhuKGUsInJhZGlhbCIpP280KEFiLGx0KGN0KCQ0LDEpLERlLDEzMCwwLFtuZXcgdXR0XSkpOmhuKGUsImRpc2NvIik/bzQoQWIsbHQoY3QoJDQsMSksRGUsMTMwLDAsW25ldyBRTCxuZXcgcUpdKSk6aG4oZSwic3BvcmVPdmVybGFwIil8fGhuKGUsInNwb3JlQ29tcGFjdGlvbiIpP280KEFiLGx0KGN0KCQ0LDEpLERlLDEzMCwwLFtuZXcgWUJdKSk6aG4oZSwicmVjdHBhY2tpbmciKSYmbzQoQWIsbHQoY3QoJDQsMSksRGUsMTMwLDAsW25ldyBYQl0pKX1mdW5jdGlvbiBvaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0O2lmKGo9bmV3IHhvKHQubyksZ3Q9ZS5hL2ouYSxkPWUuYi9qLmIsSz1lLmEtai5hLG89ZS5iLWouYixuKWZvcihzPVZ0KFEodCwoVGUoKSxjcykpKT09PVZ0KCh1YSgpLEdjKSksRz1uZXcgUyh0LmopO0cuYTxHLmMuYy5sZW5ndGg7KXN3aXRjaChIPXUoSihHKSwxMSksSC5qLmcpe2Nhc2UgMTpzfHwoSC5uLmEqPWd0KTticmVhaztjYXNlIDI6SC5uLmErPUssc3x8KEgubi5iKj1kKTticmVhaztjYXNlIDM6c3x8KEgubi5hKj1ndCksSC5uLmIrPW87YnJlYWs7Y2FzZSA0OnN8fChILm4uYio9ZCl9Zm9yKGs9bmV3IFModC5iKTtrLmE8ay5jLmMubGVuZ3RoOyl2PXUoSihrKSw3MCksQz12Lm4uYSt2Lm8uYS8yLE09di5uLmIrdi5vLmIvMix0dD1DL2ouYSxoPU0vai5iLHR0K2g+PTEmJih0dC1oPjAmJk0+PTA/KHYubi5hKz1LLHYubi5iKz1vKmgpOnR0LWg8MCYmQz49MCYmKHYubi5hKz1LKnR0LHYubi5iKz1vKSk7dC5vLmE9ZS5hLHQuby5iPWUuYixKdCh0LChUZSgpLCQyKSwoQWwoKSxyPXUoVmYockEpLDkpLG5ldyBzaChyLHUoZmYocixyLmxlbmd0aCksOSksMCkpKX1mdW5jdGlvbiB4NG4odCxlLG4scixzLG8pe3ZhciBoO2lmKCEoZT09bnVsbHx8IXRzdChlLG5MdCxyTHQpKSl0aHJvdyBpdChuZXcgRm4oImludmFsaWQgc2NoZW1lOiAiK2UpKTtpZighdCYmIShuIT1udWxsJiZoZChuLEN1KDM1KSk9PS0xJiZuLmxlbmd0aD4wJiYoUnIoMCxuLmxlbmd0aCksbi5jaGFyQ29kZUF0KDApIT00NykpKXRocm93IGl0KG5ldyBGbigiaW52YWxpZCBvcGFxdWVQYXJ0OiAiK24pKTtpZih0JiYhKGUhPW51bGwmJnlNKGdVLGUudG9Mb3dlckNhc2UoKSkpJiYhKG49PW51bGx8fCF0c3QobixvQSxjQSkpKXRocm93IGl0KG5ldyBGbihTMGUrbikpO2lmKHQmJmUhPW51bGwmJnlNKGdVLGUudG9Mb3dlckNhc2UoKSkmJiFnMG4obikpdGhyb3cgaXQobmV3IEZuKFMwZStuKSk7aWYoIXZobihyKSl0aHJvdyBpdChuZXcgRm4oImludmFsaWQgZGV2aWNlOiAiK3IpKTtpZighaGxuKHMpKXRocm93IGg9cz09bnVsbD8iaW52YWxpZCBzZWdtZW50czogbnVsbCI6ImludmFsaWQgc2VnbWVudDogIitvbG4ocyksaXQobmV3IEZuKGgpKTtpZighKG89PW51bGx8fGhkKG8sQ3UoMzUpKT09LTEpKXRocm93IGl0KG5ldyBGbigiaW52YWxpZCBxdWVyeTogIitvKSl9ZnVuY3Rpb24gazRuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndDtmb3IodnIoZSwiQ2FsY3VsYXRlIEdyYXBoIFNpemUiLDEpLGUubiYmdCYmZ2YoZSxwZih0KSwoU2woKSxRbCkpLGQ9VkUsdj1WRSxvPVVrdCxoPVVrdCxNPW5ldyBucigoIXQuYSYmKHQuYT1uZXcgZmUocnMsdCwxMCwxMSkpLHQuYSkpO00uZSE9TS5pLmdjKCk7KWs9dShkcihNKSwzMyksRz1rLmksSz1rLmosZ3Q9ay5nLHI9ay5mLHM9dShxZShrLCh1aSgpLEpPKSksMTQyKSxkPWIuTWF0aC5taW4oZCxHLXMuYiksdj1iLk1hdGgubWluKHYsSy1zLmQpLG89Yi5NYXRoLm1heChvLEcrZ3Qrcy5jKSxoPWIuTWF0aC5tYXgoaCxLK3Ircy5hKTtmb3IoSD11KHFlKHQsKHVpKCksVTIpKSwxMTYpLGo9bmV3ICRlKGQtSC5iLHYtSC5kKSxDPW5ldyBucigoIXQuYSYmKHQuYT1uZXcgZmUocnMsdCwxMCwxMSkpLHQuYSkpO0MuZSE9Qy5pLmdjKCk7KWs9dShkcihDKSwzMyksa3UoayxrLmktai5hKSxFdShrLGsuai1qLmIpO3R0PW8tZCsoSC5iK0guYyksbj1oLXYrKEguZCtILmEpLHR2KHQsdHQpLEp3KHQsbiksZS5uJiZ0JiZnZihlLHBmKHQpLChTbCgpLFFsKSl9ZnVuY3Rpb24gY2hlKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDO2ZvcihyPW5ldyBoZSxoPW5ldyBTKHQuZS5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zm9yKHM9dShKKGgpLDEyMSksQz0wLHMuay5jPU50KFFuLERlLDEsMCw1LDEpLG49bmV3IFModTQocykpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDIxMyksZS5mJiYobGUocy5rLGUpLCsrQyk7Qz09MSYmKHIuY1tyLmMubGVuZ3RoXT1zKX1mb3Iobz1uZXcgUyhyKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KEoobyksMTIxKTtzLmsuYy5sZW5ndGg9PTE7KXtmb3Ioaz11KEoobmV3IFMocy5rKSksMjEzKSx0LmJbay5jXT1rLmcsZD1rLmQsdj1rLmUsbj1uZXcgUyh1NChzKSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMjEzKSx5aShlLGspfHwoZS5mP2Q9PWUuZHx8dj09ZS5lP3QuYltrLmNdLT10LmJbZS5jXS1lLmc6dC5iW2suY10rPXQuYltlLmNdLWUuZzpzPT1kP2UuZD09cz90LmJbay5jXSs9ZS5nOnQuYltrLmNdLT1lLmc6ZS5kPT1zP3QuYltrLmNdLT1lLmc6dC5iW2suY10rPWUuZyk7bXUoZC5rLGspLG11KHYuayxrKSxkPT1zP3M9ay5lOnM9ay5kfX1mdW5jdGlvbiBFeHQodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRztpZihlPT1udWxsfHxlLmxlbmd0aD09MClyZXR1cm4gbnVsbDtpZihvPXUoTmModC5mLGUpLDIzKSwhbyl7Zm9yKHM9KEg9bmV3IHYxKHQuZCkuYS52YygpLktjKCksbmV3IG0xKEgpKTtzLmEuT2IoKTspaWYobj0oaD11KHMuYS5QYigpLDQyKSx1KGguZGQoKSwyMykpLGQ9bi5mLEc9ZS5sZW5ndGgsaG4oZC5zdWJzdHIoZC5sZW5ndGgtRyxHKSxlKSYmKGUubGVuZ3RoPT1kLmxlbmd0aHx8d2EoZCxkLmxlbmd0aC1lLmxlbmd0aC0xKT09NDYpKXtpZihvKXJldHVybiBudWxsO289bn1pZighbyl7Zm9yKHI9KGo9bmV3IHYxKHQuZCkuYS52YygpLktjKCksbmV3IG0xKGopKTtyLmEuT2IoKTspaWYobj0oaD11KHIuYS5QYigpLDQyKSx1KGguZGQoKSwyMykpLE09bi5nLE0hPW51bGwpe2Zvcih2PU0saz0wLEM9di5sZW5ndGg7azxDOysraylpZihkPXZba10sRz1lLmxlbmd0aCxobihkLnN1YnN0cihkLmxlbmd0aC1HLEcpLGUpJiYoZS5sZW5ndGg9PWQubGVuZ3RofHx3YShkLGQubGVuZ3RoLWUubGVuZ3RoLTEpPT00Nikpe2lmKG8pcmV0dXJuIG51bGw7bz1ufX19byYma28odC5mLGUsbyl9cmV0dXJuIG99ZnVuY3Rpb24gRTRuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iobj1uZXcgSW0saD0hMSxvPTA7bzxlLmxlbmd0aDtvKyspe2lmKHI9KFJyKG8sZS5sZW5ndGgpLGUuY2hhckNvZGVBdChvKSkscj09MzIpe2ZvcihLeih0LG4sMCksbi5hKz0iICIsS3oodCxuLDApO28rMTxlLmxlbmd0aCYmKFJyKG8rMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG8rMSk9PTMyKTspKytvO2NvbnRpbnVlfWlmKGgpe3I9PTM5P28rMTxlLmxlbmd0aCYmKFJyKG8rMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG8rMSk9PTM5KT8obi5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLCsrbyk6aD0hMTpuLmErPVN0cmluZy5mcm9tQ2hhckNvZGUocik7Y29udGludWV9aWYoaGQoIkd5TUxka0htc1NFY0RhaEt6WnYiLEN1KHIpKT4wKXtLeih0LG4sMCksbi5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLHM9b2ZuKGUsbyksS3oodCxuLHMpLG8rPXMtMTtjb250aW51ZX1yPT0zOT9vKzE8ZS5sZW5ndGgmJihScihvKzEsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChvKzEpPT0zOSk/KG4uYSs9IiciLCsrbyk6aD0hMDpuLmErPVN0cmluZy5mcm9tQ2hhckNvZGUocil9S3oodCxuLDApLFIwbih0KX1mdW5jdGlvbiBUNG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0O2lmKHZyKG4sIk5ldHdvcmsgc2ltcGxleCBsYXllcmluZyIsMSksdC5iPWUsZ3Q9dShRKGUsKFRlKCksTVMpKSwxOSkuYSo0LHR0PXQuYi5hLHR0LmMubGVuZ3RoPDEpe29yKG4pO3JldHVybn1mb3Iobz1UbW4odCx0dCksSz1udWxsLHM9ZWkobywwKTtzLmIhPXMuZC5jOyl7Zm9yKHI9dSh0aShzKSwxNSksZD1ndCpwcyhiLk1hdGguc3FydChyLmdjKCkpKSxoPXptbihyKSxtYXQoYWJ0KEJLZShvYnQoTW50KGgpLGQpLEspLCEwKSxSYyhuLDEpKSxqPXQuYi5iLEc9bmV3IFMoaC5hKTtHLmE8Ry5jLmMubGVuZ3RoOyl7Zm9yKEg9dShKKEcpLDEyMSk7ai5jLmxlbmd0aDw9SC5lOylIbShqLGouYy5sZW5ndGgsbmV3IFNoKHQuYikpO0M9dShILmYsMTApLEVvKEMsdShOZShqLEguZSksMjkpKX1pZihvLmI+MSlmb3IoSz1OdChDcixYciwyNSx0LmIuYi5jLmxlbmd0aCwxNSwxKSxNPTAsaz1uZXcgUyh0LmIuYik7ay5hPGsuYy5jLmxlbmd0aDspdj11KEooayksMjkpLEtbTSsrXT12LmEuYy5sZW5ndGh9dHQuYz1OdChRbixEZSwxLDAsNSwxKSx0LmE9bnVsbCx0LmI9bnVsbCx0LmM9bnVsbCxvcihuKX1mdW5jdGlvbiB1aGUodCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGU9MCxvPW5ldyBTKHQuYi5hKTtvLmE8by5jLmMubGVuZ3RoOylyPXUoSihvKSwxODkpLHIuYj0wLHIuYz0wO2ZvcihZYWUodCwwKSxlc3QodCx0LmcpLHlxKHQuYyksZWJ0KHQuYyksbj0oYW8oKSx6aCksVEkodG50KF80KFRJKHRudChfNChUSShfNCh0LmMsbikpLGRpZShuKSkpKSxuKSkpLF80KHQuYyx6aCksWWl0KHQsdC5nKSxOYWUodCwwKSxxbGUodCwwKSxTY2UodCwxKSxZYWUodCwxKSxlc3QodCx0LmQpLHlxKHQuYyksaD1uZXcgUyh0LmIuYSk7aC5hPGguYy5jLmxlbmd0aDspcj11KEooaCksMTg5KSxlKz1iLk1hdGguYWJzKHIuYyk7Zm9yKGQ9bmV3IFModC5iLmEpO2QuYTxkLmMuYy5sZW5ndGg7KXI9dShKKGQpLDE4OSksci5iPTAsci5jPTA7Zm9yKG49cmcsVEkodG50KF80KFRJKHRudChfNChUSShlYnQoXzQodC5jLG4pKSksZGllKG4pKSkpLG4pKSksXzQodC5jLHpoKSxZaXQodCx0LmQpLE5hZSh0LDEpLHFsZSh0LDEpLFNjZSh0LDApLGVidCh0LmMpLHM9bmV3IFModC5iLmEpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDE4OSksZSs9Yi5NYXRoLmFicyhyLmMpO3JldHVybiBlfWZ1bmN0aW9uIGxoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztpZihrPWUsIShrLmI9PW51bGx8fHQuYj09bnVsbCkpe2Zvcih2NCh0KSxTXyh0KSx2NChrKSxTXyhrKSxuPU50KENyLFhyLDI1LHQuYi5sZW5ndGgray5iLmxlbmd0aCwxNSwxKSxDPTAscj0wLGg9MDtyPHQuYi5sZW5ndGgmJmg8ay5iLmxlbmd0aDspaWYocz10LmJbcl0sbz10LmJbcisxXSxkPWsuYltoXSx2PWsuYltoKzFdLG88ZClyKz0yO2Vsc2UgaWYobz49ZCYmczw9dilkPD1zJiZvPD12PyhuW0MrK109cyxuW0MrK109byxyKz0yKTpkPD1zPyhuW0MrK109cyxuW0MrK109dix0LmJbcl09disxLGgrPTIpOm88PXY/KG5bQysrXT1kLG5bQysrXT1vLHIrPTIpOihuW0MrK109ZCxuW0MrK109dix0LmJbcl09disxKTtlbHNlIGlmKHY8cyloKz0yO2Vsc2UgdGhyb3cgaXQobmV3IFZvKCJUb2tlbiNpbnRlcnNlY3RSYW5nZXMoKTogSW50ZXJuYWwgRXJyb3I6IFsiK3QuYltyXSsiLCIrdC5iW3IrMV0rIl0gJiBbIitrLmJbaF0rIiwiK2suYltoKzFdKyJdIikpO2Zvcig7cjx0LmIubGVuZ3RoOyluW0MrK109dC5iW3IrK10sbltDKytdPXQuYltyKytdO3QuYj1OdChDcixYciwyNSxDLDE1LDEpLERjKG4sMCx0LmIsMCxDKX19ZnVuY3Rpb24gQzRuKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihlPW5ldyBoZSx0Lmc9bmV3IGhlLHQuZD1uZXcgaGUsaD1uZXcgcDIobmV3IENnKHQuZi5iKS5hKTtoLmI7KW89WncoaCksbGUoZSx1KHUoby5kZCgpLDQ2KS5iLDgxKSksQnAodShvLmNkKCksNTk0KS5nZigpKT9sZSh0LmQsdShvLmRkKCksNDYpKTpsZSh0LmcsdShvLmRkKCksNDYpKTtmb3IoZXN0KHQsdC5kKSxlc3QodCx0LmcpLHQuYz1uZXcgVW9lKHQuYiksaktlKHQuYywoeWJ0KCksUmJlKSksWWl0KHQsdC5kKSxZaXQodCx0LmcpLExzKGUsdC5jLmEuYiksdC5lPW5ldyAkZShhcyxhcyksdC5hPW5ldyAkZShDcyxDcykscj1uZXcgUyhlKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw4MSksdC5lLmE9Yi5NYXRoLm1pbih0LmUuYSxuLmcuYyksdC5lLmI9Yi5NYXRoLm1pbih0LmUuYixuLmcuZCksdC5hLmE9Yi5NYXRoLm1heCh0LmEuYSxuLmcuYytuLmcuYiksdC5hLmI9Yi5NYXRoLm1heCh0LmEuYixuLmcuZCtuLmcuYSk7dWJ0KHQuYyxuZXcgbXApLGQ9MDtkbyBzPXVoZSh0KSwrK2Q7d2hpbGUoKGQ8Mnx8cz5zYikmJmQ8MTApO3VidCh0LmMsbmV3IFc1KSx1aGUodCksaG5uKHQuYyksbTRuKHQuZil9ZnVuY3Rpb24gXzRuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dDtpZihqZShSZShRKG4sKFRlKCksSHkpKSkpKWZvcihkPW5ldyBTKG4uaik7ZC5hPGQuYy5jLmxlbmd0aDspZm9yKGg9dShKKGQpLDExKSxqPXdkKGguZyksaz1qLEM9MCxNPWsubGVuZ3RoO0M8TTsrK0Mpdj1rW0NdLG89di5kLmk9PW4scz1vJiZqZShSZShRKHYsajIpKSkscyYmKEc9di5jLEg9dSh0cih0LmIsRyksMTApLEh8fChIPUxJKEcsKHVhKCksRzEpLEcuaiwtMSxudWxsLG51bGwsRy5vLHUoUShlLFdsKSwxMDMpLGUpLEp0KEgsKGFlKCksX2kpLEcpLGtpKHQuYixHLEgpLGxlKGUuYSxIKSksdHQ9di5kLEs9dSh0cih0LmIsdHQpLDEwKSxLfHwoSz1MSSh0dCwodWEoKSxHMSksdHQuaiwxLG51bGwsbnVsbCx0dC5vLHUoUShlLFdsKSwxMDMpLGUpLEp0KEssKGFlKCksX2kpLHR0KSxraSh0LmIsdHQsSyksbGUoZS5hLEspKSxyPUdydCh2KSxPYShyLHUoTmUoSC5qLDApLDExKSksb2Eocix1KE5lKEsuaiwwKSwxMSkpLGxuKHQuYSx2LG5ldyBGaihyLGUsKHNvKCksbnUpKSksdShRKGUsKGFlKCksVmMpKSwyMSkuRmMoKG9vKCksdmgpKSl9ZnVuY3Rpb24gUzRuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEc7Zm9yKHZyKG4sIkxhYmVsIGR1bW15IHN3aXRjaGluZyIsMSkscj11KFEoZSwoVGUoKSxjRykpLDIyNyksamNuKGUpLHM9bTJuKGUsciksdC5hPU50KGFhLHZvLDI1LGUuYi5jLmxlbmd0aCwxNSwxKSxkPShoNigpLGx0KGN0KGI3LDEpLG9lLDIyNywwLFtwNyxiUyxnNyxOeSxHNCxWNF0pKSxDPTAsSD1kLmxlbmd0aDtDPEg7KytDKWlmKG89ZFtDXSwobz09RzR8fG89PVY0fHxvPT1OeSkmJiF1KE51KHMuYSxvKT9zLmJbby5nXTpudWxsLDE1KS5kYygpKXtYY24odCxlKTticmVha31mb3Iodj1sdChjdChiNywxKSxvZSwyMjcsMCxbcDcsYlMsZzcsTnksRzQsVjRdKSxNPTAsRz12Lmxlbmd0aDtNPEc7KytNKW89dltNXSxvPT1HNHx8bz09VjR8fG89PU55fHxKdWUodCx1KE51KHMuYSxvKT9zLmJbby5nXTpudWxsLDE1KSk7Zm9yKGg9bHQoY3QoYjcsMSksb2UsMjI3LDAsW3A3LGJTLGc3LE55LEc0LFY0XSksaz0wLGo9aC5sZW5ndGg7azxqOysraylvPWhba10sKG89PUc0fHxvPT1WNHx8bz09TnkpJiZKdWUodCx1KE51KHMuYSxvKT9zLmJbby5nXTpudWxsLDE1KSk7dC5hPW51bGwsb3Iobil9ZnVuY3Rpb24gQTRuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0sajtzd2l0Y2godC5rLmcpe2Nhc2UgMTppZihyPXUoUSh0LChhZSgpLF9pKSksMTcpLG49dShRKHIsYUN0KSw3NCksbj9qZShSZShRKHIscTEpKSkmJihuPXFEKG4pKTpuPW5ldyBQdSxrPXUoUSh0LHIxKSwxMSksayl7aWYoQz1ZbyhsdChjdChXcywxKSxlZSw4LDAsW2suaS5uLGsubixrLmFdKSksZTw9Qy5hKXJldHVybiBDLmI7ZnMobixDLG4uYSxuLmEuYSl9aWYoTT11KFEodCwkaCksMTEpLE0pe2lmKGo9WW8obHQoY3QoV3MsMSksZWUsOCwwLFtNLmkubixNLm4sTS5hXSkpLGouYTw9ZSlyZXR1cm4gai5iO2ZzKG4saixuLmMuYixuLmMpfWlmKG4uYj49Mil7Zm9yKHY9ZWkobiwwKSxoPXUodGkodiksOCksZD11KHRpKHYpLDgpO2QuYTxlJiZ2LmIhPXYuZC5jOyloPWQsZD11KHRpKHYpLDgpO3JldHVybiBoLmIrKGUtaC5hKS8oZC5hLWguYSkqKGQuYi1oLmIpfWJyZWFrO2Nhc2UgMzpzd2l0Y2gobz11KFEodShOZSh0LmosMCksMTEpLChhZSgpLF9pKSksMTEpLHM9by5pLG8uai5nKXtjYXNlIDE6cmV0dXJuIHMubi5iO2Nhc2UgMzpyZXR1cm4gcy5uLmIrcy5vLmJ9fXJldHVybiBiNHQodCkuYn1mdW5jdGlvbiBMNG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTTtmb3IoaD1uZXcgUyh0LmQuYik7aC5hPGguYy5jLmxlbmd0aDspZm9yKG89dShKKGgpLDI5KSx2PW5ldyBTKG8uYSk7di5hPHYuYy5jLmxlbmd0aDspe2lmKGQ9dShKKHYpLDEwKSxqZShSZShRKGQsKFRlKCksQ1MpKSkpJiYhRjgoVTAoZCkpKXtyPXUoQXJuKFUwKGQpKSwxNyksQz1yLmMuaSxDPT1kJiYoQz1yLmQuaSksTT1uZXcgZmEoQyxpYShuYyhkLm4pLEMubikpLGtpKHQuYixkLE0pO2NvbnRpbnVlfXM9bmV3IGFoKGQubi5hLWQuZC5iLGQubi5iLWQuZC5kLGQuby5hK2QuZC5iK2QuZC5jLGQuby5iK2QuZC5kK2QuZC5hKSxlPW1XdChPVnQoRFZ0KElWdChuZXcganB0LGQpLHMpLGYyZSksdC5hKSx2V3QoZlhlKFhlZShuZXcgUnB0LGx0KGN0KG9WLDEpLERlLDU3LDAsW2VdKSksZSksdC5hKSxrPW5ldyBKdHQsa2kodC5lLGUsayksbj1qMChuZXcgYXIobHIoam8oZCkuYS5LYygpLG5ldyB6KSkpLWowKG5ldyBhcihscihEcyhkKS5hLktjKCksbmV3IHopKSksbjwwPyREKGssITAsKGFvKCksemgpKTpuPjAmJiREKGssITAsKGFvKCksQ2YpKSxkLms9PShWbigpLGtzKSYmTlh0KGspLGtpKHQuZixkLGUpfX1mdW5jdGlvbiBNNG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqO3N3aXRjaCh2cihuLCJOb2RlIHByb21vdGlvbiBoZXVyaXN0aWMiLDEpLHQuZz1lLE41bih0KSx0LnE9dShRKGUsKFRlKCksb2h0KSksMjYwKSxDPXUoUSh0Lmcsbzl0KSwxOSkuYSxvPW5ldyBwTix0LnEuZyl7Y2FzZSAyOmNhc2UgMTpJRSh0LG8pO2JyZWFrO2Nhc2UgMzpmb3IodC5xPSh5NCgpLEVHKSxJRSh0LG8pLHY9MCxkPW5ldyBTKHQuYSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTkpLHY9Yi5NYXRoLm1heCh2LGguYSk7dj50LmomJih0LnE9Rk8sSUUodCxvKSk7YnJlYWs7Y2FzZSA0OmZvcih0LnE9KHk0KCksRUcpLElFKHQsbyksaz0wLHM9bmV3IFModC5iKTtzLmE8cy5jLmMubGVuZ3RoOylyPXllKEoocykpLGs9Yi5NYXRoLm1heChrLChPbihyKSxyKSk7az50LmsmJih0LnE9Tk8sSUUodCxvKSk7YnJlYWs7Y2FzZSA2Omo9cHMoYi5NYXRoLmNlaWwodC5mLmxlbmd0aCpDLzEwMCkpLElFKHQsbmV3IF9wKGopKTticmVhaztjYXNlIDU6TT1wcyhiLk1hdGguY2VpbCh0LmQqQy8xMDApKSxJRSh0LG5ldyBIZihNKSk7YnJlYWs7ZGVmYXVsdDpJRSh0LG8pfUV2bih0LGUpLG9yKG4pfWZ1bmN0aW9uIGhoZSh0LGUsbil7dmFyIHIscyxvLGg7dGhpcy5qPXQsdGhpcy5lPV80dCh0KSx0aGlzLm89dGhpcy5qLmUsdGhpcy5pPSEhdGhpcy5vLHRoaXMucD10aGlzLmk/dShOZShuLE5hKHRoaXMubykucCksMjE0KTpudWxsLHM9dShRKHQsKGFlKCksVmMpKSwyMSksdGhpcy5nPXMuSGMoKG9vKCksdmgpKSx0aGlzLmI9bmV3IGhlLHRoaXMuZD1uZXcgT2llKHRoaXMuZSksaD11KFEodGhpcy5qLCQ2KSwyMzApLHRoaXMucT1jdW4oZSxoLHRoaXMuZSksdGhpcy5rPW5ldyBQUXQodGhpcyksbz1BMShsdChjdChnMmUsMSksRGUsMjI1LDAsW3RoaXMsdGhpcy5kLHRoaXMuayx0aGlzLnFdKSksZT09KGV2KCksUk8pJiYhamUoUmUoUSh0LChUZSgpLCR5KSkpKT8ocj1uZXcgQTR0KHRoaXMuZSksby5jW28uYy5sZW5ndGhdPXIsdGhpcy5jPW5ldyBybXQocixoLHUodGhpcy5xLDQwMikpKTplPT1STyYmamUoUmUoUSh0LChUZSgpLCR5KSkpKT8ocj1uZXcgQTR0KHRoaXMuZSksby5jW28uYy5sZW5ndGhdPXIsdGhpcy5jPW5ldyBibmUocixoLHUodGhpcy5xLDQwMikpKTp0aGlzLmM9bmV3IGdHdChlLHRoaXMpLGxlKG8sdGhpcy5jKSxVbGUobyx0aGlzLmUpLHRoaXMucz1meG4odGhpcy5rKX1mdW5jdGlvbiBENG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0O2ZvcihNPXUoeGooKGg9ZWkobmV3IExwKGUpLmEuZCwwKSxuZXcgRXgoaCkpKSw4NiksRz1NP3UoUShNLChmYygpLFJodCkpLDg2KTpudWxsLHM9MTtNJiZHOyl7Zm9yKHY9MCxSdD0wLG49TSxyPUcsZD0wO2Q8cztkKyspbj1acnQobikscj1acnQociksUnQrPVh0KHllKFEobiwoZmMoKSxNNykpKSksdis9WHQoeWUoUShyLE03KSkpO2lmKFN0PVh0KHllKFEoRywoZmMoKSxucCkpKSksTXQ9WHQoeWUoUShNLG5wKSkpLGo9cG10KE0sRyksSD1TdCt2K3QuYStqLU10LVJ0LDA8SCl7Zm9yKGs9ZSxDPTA7ayYmayE9cjspKytDLGs9dShRKGssREcpLDg2KTtpZihrKWZvcihndD1IL0Msaz1lO2shPXI7KXR0PVh0KHllKFEoayxucCkpKStILEp0KGssbnAsdHQpLEs9WHQoeWUoUShrLE03KSkpK0gsSnQoayxNNyxLKSxILT1ndCxrPXUoUShrLERHKSw4Nik7ZWxzZSByZXR1cm59KytzLE0uZC5iPT0wP009bnh0KG5ldyBMcChlKSxzKTpNPXUoeGooKG89ZWkobmV3IExwKE0pLmEuZCwwKSxuZXcgRXgobykpKSw4NiksRz1NP3UoUShNLFJodCksODYpOm51bGx9fWZ1bmN0aW9uIGZoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNO2Zvcih2PSEwLHM9MCxrPXQuZltlLnBdLEM9ZS5vLmIrdC5uLG49dC5jW2UucF1bMl0sY2godC5hLGsscGUodShOZSh0LmEsayksMTkpLmEtMStuKSksY2godC5iLGssWHQoeWUoTmUodC5iLGspKSktQytuKnQuZSksKytrLGs+PXQuaT8oKyt0LmksbGUodC5hLHBlKDEpKSxsZSh0LmIsQykpOihyPXQuY1tlLnBdWzFdLGNoKHQuYSxrLHBlKHUoTmUodC5hLGspLDE5KS5hKzEtcikpLGNoKHQuYixrLFh0KHllKE5lKHQuYixrKSkpK0Mtcip0LmUpKSwodC5xPT0oeTQoKSxGTykmJih1KE5lKHQuYSxrKSwxOSkuYT50Lmp8fHUoTmUodC5hLGstMSksMTkpLmE+dC5qKXx8dC5xPT1OTyYmKFh0KHllKE5lKHQuYixrKSkpPnQua3x8WHQoeWUoTmUodC5iLGstMSkpKT50LmspKSYmKHY9ITEpLGg9bmV3IGFyKGxyKGpvKGUpLmEuS2MoKSxuZXcgeikpO3pyKGgpOylvPXUoTXIoaCksMTcpLGQ9by5jLmksdC5mW2QucF09PWsmJihNPWZoZSh0LGQpLHM9cyt1KE0uYSwxOSkuYSx2PXYmJmplKFJlKE0uYikpKTtyZXR1cm4gdC5mW2UucF09ayxzPXMrdC5jW2UucF1bMF0sbmV3IGZhKHBlKHMpLChObigpLCEhdikpfWZ1bmN0aW9uIFR4dCh0LGUsbixyLHMpe3ZhciBvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3Q7Zm9yKE09bmV3IF9yLGg9bmV3IGhlLFBvZSh0LG4sdC5kLmZnKCksaCxNKSxQb2UodCxyLHQuZC5nZygpLGgsTSksdC5iPS4yKihLPUVjZShXbyhuZXcgVG4obnVsbCxuZXcgX24oaCwxNikpLG5ldyBlWikpLHR0PUVjZShXbyhuZXcgVG4obnVsbCxuZXcgX24oaCwxNikpLG5ldyBuWikpLGIuTWF0aC5taW4oSyx0dCkpLG89MCxkPTA7ZDxoLmMubGVuZ3RoLTE7ZCsrKWZvcih2PShBbihkLGguYy5sZW5ndGgpLHUoaC5jW2RdLDExMikpLEc9ZCsxO0c8aC5jLmxlbmd0aDtHKyspbys9d3h0KHQsdiwoQW4oRyxoLmMubGVuZ3RoKSx1KGguY1tHXSwxMTIpKSk7Zm9yKGo9dShRKGUsKGFlKCksJDYpKSwyMzApLG8+PTImJihndD1HY2UoaCwhMCxqKSwhdC5lJiYodC5lPW5ldyBLJHQodCkpLHVmbih0LmUsZ3QsaCx0LmIpKSxDYWUoaCxqKSxXNG4oaCksSD0tMSxDPW5ldyBTKGgpO0MuYTxDLmMuYy5sZW5ndGg7KWs9dShKKEMpLDExMiksIShiLk1hdGguYWJzKGsucy1rLmMpPEVkKSYmKEg9Yi5NYXRoLm1heChILGsubyksdC5kLmRnKGsscyx0LmMpKTtyZXR1cm4gdC5kLmEuYS4kYigpLEgrMX1mdW5jdGlvbiBkaGUodCxlKXt2YXIgbixyLHMsbyxoO249WHQoeWUoUShlLChUZSgpLFRmKSkpKSxuPDImJkp0KGUsVGYsMikscj11KFEoZSxXbCksMTAzKSxyPT0oYW8oKSxoMCkmJkp0KGUsV2wsUHooZSkpLHM9dShRKGUsSnZlKSwxOSkscy5hPT0wP0p0KGUsKGFlKCksJDYpLG5ldyBaaXQpOkp0KGUsKGFlKCksJDYpLG5ldyBGJChzLmEpKSxvPVJlKFEoZSxTUykpLG89PW51bGwmJkp0KGUsU1MsKE5uKCksVnQoUShlLGVnKSk9PT1WdCgoVzAoKSxONykpKSksbHMobmV3IFRuKG51bGwsbmV3IF9uKGUuYSwxNikpLG5ldyBncyh0KSksbHMoV28obmV3IFRuKG51bGwsbmV3IF9uKGUuYiwxNikpLG5ldyBHNSksbmV3IHFpKHQpKSxoPW5ldyBhaGUoZSksSnQoZSwoYWUoKSxRNCksaCksTCQodC5hKSxLZCh0LmEsKFdhKCksRGQpLHUoUShlLHp5KSwyNDYpKSxLZCh0LmEsZ2IsdShRKGUsYzl0KSwyNDYpKSxLZCh0LmEsY3UsdShRKGUsX1MpLDI0NikpLEtkKHQuYSxxYyx1KFEoZSxnRyksMjQ2KSksS2QodC5hLElvLHN1bih1KFEoZSxlZyksMjE4KSkpLFRVdCh0LmEsQ3huKGUpKSxKdChlLEtsdCxGcSh0LmEsZSkpfWZ1bmN0aW9uIEk0bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWU7cmV0dXJuIGo9dC5jW2VdLEg9dC5jW25dLEc9dShRKGosKGFlKCksUjYpKSwxNSksISFHJiZHLmdjKCkhPTAmJkcuSGMoSCl8fChLPWouayE9KFZuKCksdGEpJiZILmshPXRhLHR0PXUoUShqLFB2KSwxMCksZ3Q9dShRKEgsUHYpLDEwKSxNdD10dCE9Z3QsU3Q9ISF0dCYmdHQhPWp8fCEhZ3QmJmd0IT1ILFJ0PUVzdChqLCh2ZSgpLFBuKSksS3Q9RXN0KEgsbXIpLFN0PVN0fChFc3Qoaixtcil8fEVzdChILFBuKSksdWU9U3QmJk10fHxSdHx8S3QsSyYmdWUpfHxqLms9PShWbigpLEhjKSYmSC5rPT1Pc3x8SC5rPT0oVm4oKSxIYykmJmouaz09T3M/ITE6KEM9dC5jW2VdLG89dC5jW25dLHM9bGFlKHQuZSxDLG8sKHZlKCksQm4pKSx2PWxhZSh0LmksQyxvLEhuKSxUd24odC5mLEMsbyksaz1PcmUodC5iLEMsbykrdShzLmEsMTkpLmErdSh2LmEsMTkpLmErdC5mLmQsZD1PcmUodC5iLG8sQykrdShzLmIsMTkpLmErdSh2LmIsMTkpLmErdC5mLmIsdC5hJiYoTT11KFEoQyxfaSksMTEpLGg9dShRKG8sX2kpLDExKSxyPVlzZSh0LmcsTSxoKSxrKz11KHIuYSwxOSkuYSxkKz11KHIuYiwxOSkuYSksaz5kKX1mdW5jdGlvbiBPNG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLO2ZvcihuPXUoUSh0LChUZSgpLGNzKSksOTgpLGg9dC5mLG89dC5kLGQ9aC5hK28uYitvLmMsdj0wLW8uZC10LmMuYixDPWguYitvLmQrby5hLXQuYy5iLGs9bmV3IGhlLE09bmV3IGhlLHM9bmV3IFMoZSk7cy5hPHMuYy5jLmxlbmd0aDspe3N3aXRjaChyPXUoSihzKSwxMCksbi5nKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzpEd24ocik7YnJlYWs7Y2FzZSA0Omo9dShRKHIsUnYpLDgpLEg9aj9qLmE6MCxyLm4uYT1kKlh0KHllKFEociwoYWUoKSxGdikpKSktSCxFeihyLCEwLCExKTticmVhaztjYXNlIDU6Rz11KFEocixSdiksOCksSz1HP0cuYTowLHIubi5hPVh0KHllKFEociwoYWUoKSxGdikpKSktSyxFeihyLCEwLCExKSxoLmE9Yi5NYXRoLm1heChoLmEsci5uLmErci5vLmEvMil9c3dpdGNoKHUoUShyLChhZSgpLG9jKSksNjEpLmcpe2Nhc2UgMTpyLm4uYj12LGsuY1trLmMubGVuZ3RoXT1yO2JyZWFrO2Nhc2UgMzpyLm4uYj1DLE0uY1tNLmMubGVuZ3RoXT1yfX1zd2l0Y2gobi5nKXtjYXNlIDE6Y2FzZSAyOmlpZShrLHQpLGlpZShNLHQpO2JyZWFrO2Nhc2UgMzpzaWUoayx0KSxzaWUoTSx0KX19ZnVuY3Rpb24gUDRuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE07Zm9yKEM9bmV3IGhlLE09bmV3IEIzLG89bnVsbCxzPTAscj0wO3I8ZS5sZW5ndGg7KytyKXN3aXRjaChuPWVbcl0sSnVuKG8sbikmJihzPUwzdCh0LE0sQyxDRyxzKSksVXMobiwoYWUoKSxQdikpJiYobz11KFEobixQdiksMTApKSxuLmsuZyl7Y2FzZSAwOmZvcih2PWgydCgkeChLbyhuLCh2ZSgpLFBuKSksbmV3IFlOKSk7Yml0KHYpOyloPXUoUm10KHYpLDExKSx0LmRbaC5wXT1zKyssQy5jW0MuYy5sZW5ndGhdPWg7Zm9yKHM9TDN0KHQsTSxDLENHLHMpLGs9aDJ0KCR4KEtvKG4sbXIpLG5ldyBZTikpO2JpdChrKTspaD11KFJtdChrKSwxMSksdC5kW2gucF09cysrLEMuY1tDLmMubGVuZ3RoXT1oO2JyZWFrO2Nhc2UgMzpLbyhuLHJfdCkuZGMoKXx8KGg9dShLbyhuLHJfdCkuWGIoMCksMTEpLHQuZFtoLnBdPXMrKyxDLmNbQy5jLmxlbmd0aF09aCksS28obixDRykuZGMoKXx8VXAoTSxuKTticmVhaztjYXNlIDE6Zm9yKGQ9S28obiwodmUoKSxCbikpLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDExKSx0LmRbaC5wXT1zKyssQy5jW0MuYy5sZW5ndGhdPWg7S28obixIbikuSmMobmV3IHBHdChNLG4pKX1yZXR1cm4gTDN0KHQsTSxDLENHLHMpLEN9ZnVuY3Rpb24gZ2hlKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdDtmb3Ioaz1hcyxDPWFzLGQ9Q3Msdj1DcyxqPW5ldyBTKGUuaSk7ai5hPGouYy5jLmxlbmd0aDspTT11KEooaiksNjUpLHM9dSh1KHRyKHQuZyxNLmEpLDQ2KS5iLDMzKSx4MShzLE0uYi5jLE0uYi5kKSxrPWIuTWF0aC5taW4oayxzLmkpLEM9Yi5NYXRoLm1pbihDLHMuaiksZD1iLk1hdGgubWF4KGQscy5pK3MuZyksdj1iLk1hdGgubWF4KHYscy5qK3MuZik7Zm9yKEg9dShxZSh0LmMsKGNJKCksTDNlKSksMTE2KSx3dih0LmMsZC1rKyhILmIrSC5jKSx2LUMrKEguZCtILmEpLCEwLCEwKSxGNHQodC5jLC1rK0guYiwtQytILmQpLHI9bmV3IG5yKEhYdCh0LmMpKTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksNzkpLGg9eDQobiwhMCwhMCksRz1lMChuKSx0dD10YihuKSxLPW5ldyAkZShHLmkrRy5nLzIsRy5qK0cuZi8yKSxvPW5ldyAkZSh0dC5pK3R0LmcvMix0dC5qK3R0LmYvMiksZ3Q9aWEobmV3ICRlKG8uYSxvLmIpLEspLG1FKGd0LEcuZyxHLmYpLExpKEssZ3QpLE10PWlhKG5ldyAkZShLLmEsSy5iKSxvKSxtRShNdCx0dC5nLHR0LmYpLExpKG8sTXQpLHZqKGgsSy5hLEsuYiksd2ooaCxvLmEsby5iKX1mdW5jdGlvbiBGNG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRztpZih0LmM9dC5kLEc9UmUoUShlLChUZSgpLHRtZSkpKSxIPUc9PW51bGx8fChPbihHKSxHKSxvPXUoUShlLChhZSgpLFZjKSksMjEpLkhjKChvbygpLHZoKSkscz11KFEoZSxjcyksOTgpLG49IShzPT0odWEoKSxZMil8fHM9PWcwfHxzPT1HYyksSCYmKG58fCFvKSl7Zm9yKE09bmV3IFMoZS5hKTtNLmE8TS5jLmMubGVuZ3RoOylrPXUoSihNKSwxMCksay5wPTA7Zm9yKGo9bmV3IGhlLEM9bmV3IFMoZS5hKTtDLmE8Qy5jLmMubGVuZ3RoOylpZihrPXUoSihDKSwxMCkscj1jbGUodCxrLG51bGwpLHIpe2Zvcih2PW5ldyBleXQsTW8odixlKSxKdCh2LEJ5LHUoci5iLDIxKSksUHZ0KHYuZCxlLmQpLEp0KHYsRTcsbnVsbCksZD11KHIuYSwxNSkuS2MoKTtkLk9iKCk7KWg9dShkLlBiKCksMTApLGxlKHYuYSxoKSxoLmE9djtqLkZjKHYpfW8mJihWdChRKGUscTYpKT09PVZ0KChpdigpLGxsdCkpP3QuYz10LmI6dC5jPXQuYSl9ZWxzZSBqPW5ldyB5bChsdChjdChYYmUsMSksdTFlLDM3LDAsW2VdKSk7cmV0dXJuIFZ0KFEoZSxxNikpIT09VnQoKGl2KCkscTQpKSYmKHduKCksai5hZChuZXcgbEspKSxqfWZ1bmN0aW9uIHBoZSh0KXtNdyh0LG5ldyBrMihsYnQoTVIoX3coRXcoQ3coVHcobmV3IGtnLFhnKSwiRUxLIE1yLiBUcmVlIiksIlRyZWUtYmFzZWQgYWxnb3JpdGhtIHByb3ZpZGVkIGJ5IHRoZSBFY2xpcHNlIExheW91dCBLZXJuZWwuIENvbXB1dGVzIGEgc3Bhbm5pbmcgdHJlZSBvZiB0aGUgaW5wdXQgZ3JhcGggYW5kIGFycmFuZ2VzIGFsbCBub2RlcyBhY2NvcmRpbmcgdG8gdGhlIHJlc3VsdGluZyBwYXJlbnQtY2hpbGRyZW4gaGllcmFyY2h5LiBJIHBpdHkgdGhlIGZvb2wgd2hvIGRvZXNuJ3QgdXNlIE1yLiBUcmVlIExheW91dC4iKSxuZXcgYVopLEsxZSksdW4oKENFKCksRGZ0KSkpKSkseGUodCxYZyx4dixmX3QpLHhlKHQsWGcsQ3ksMjApLHhlKHQsWGcsRTYsR0UpLHhlKHQsWGcsVkkscGUoMSkpLHhlKHQsWGcsUl8sKE5uKCksITApKSx4ZSh0LFhnLEpJLEllKGxfdCkpLHhlKHQsWGcsRDQsSWUoeHllKSkseGUodCxYZyxDNixJZShreWUpKSx4ZSh0LFhnLFQ2LEllKEV5ZSkpLHhlKHQsWGcsVUUsSWUoeXllKSkseGUodCxYZyxqXyxJZShoX3QpKSx4ZSh0LFhnLFdFLEllKEN5ZSkpLHhlKHQsWGcsSGt0LEllKFN5ZSkpLHhlKHQsWGcsVmt0LEllKGRfdCkpfWZ1bmN0aW9uIE40bih0KXt0LnF8fCh0LnE9ITAsdC5wPWljKHQsMCksdC5hPWljKHQsMSksRmkodC5hLDApLHQuZj1pYyh0LDIpLEZpKHQuZiwxKSxucyh0LmYsMiksdC5uPWljKHQsMyksbnModC5uLDMpLG5zKHQubiw0KSxucyh0Lm4sNSksbnModC5uLDYpLHQuZz1pYyh0LDQpLEZpKHQuZyw3KSxucyh0LmcsOCksdC5jPWljKHQsNSksRmkodC5jLDcpLEZpKHQuYyw4KSx0Lmk9aWModCw2KSxGaSh0LmksOSksRmkodC5pLDEwKSxGaSh0LmksMTEpLEZpKHQuaSwxMiksbnModC5pLDEzKSx0Lmo9aWModCw3KSxGaSh0LmosOSksdC5kPWljKHQsOCksRmkodC5kLDMpLEZpKHQuZCw0KSxGaSh0LmQsNSksRmkodC5kLDYpLG5zKHQuZCw3KSxucyh0LmQsOCksbnModC5kLDkpLG5zKHQuZCwxMCksdC5iPWljKHQsOSksbnModC5iLDApLG5zKHQuYiwxKSx0LmU9aWModCwxMCksbnModC5lLDEpLG5zKHQuZSwyKSxucyh0LmUsMyksbnModC5lLDQpLEZpKHQuZSw1KSxGaSh0LmUsNiksRmkodC5lLDcpLEZpKHQuZSw4KSxGaSh0LmUsOSksRmkodC5lLDEwKSxucyh0LmUsMTEpLHQuaz1pYyh0LDExKSxucyh0LmssMCksbnModC5rLDEpLHQubz1vaSh0LDEyKSx0LnM9b2kodCwxMykpfWZ1bmN0aW9uIEN4dCh0LGUpe2UuZGMoKSYmV2QodC5qLCEwLCEwLCEwLCEwKSx5aShlLCh2ZSgpLE1mKSkmJldkKHQuaiwhMCwhMCwhMCwhMSkseWkoZSxtaCkmJldkKHQuaiwhMSwhMCwhMCwhMCkseWkoZSxLbCkmJldkKHQuaiwhMCwhMCwhMSwhMCkseWkoZSxWaCkmJldkKHQuaiwhMCwhMSwhMCwhMCkseWkoZSxlbCkmJldkKHQuaiwhMSwhMCwhMCwhMSkseWkoZSx5aCkmJldkKHQuaiwhMSwhMCwhMSwhMCkseWkoZSxYbCkmJldkKHQuaiwhMCwhMSwhMSwhMCkseWkoZSxEZikmJldkKHQuaiwhMCwhMSwhMCwhMSkseWkoZSxBdSkmJldkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSxsdSkmJldkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSxBdSkmJldkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSxTdSkmJldkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSxMdSkmJldkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSxubCkmJldkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSxVYykmJldkKHQuaiwhMCwhMCwhMCwhMCl9ZnVuY3Rpb24gQjRuKHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE0saixILEcsSyx0dDtmb3Iobz1uZXcgaGUsaz1uZXcgUyhyKTtrLmE8ay5jLmMubGVuZ3RoOylpZihkPXUoSihrKSw0NDEpLGg9bnVsbCxkLmY9PShzbygpLG51KSlmb3IoRz1uZXcgUyhkLmUpO0cuYTxHLmMuYy5sZW5ndGg7KUg9dShKKEcpLDE3KSx0dD1ILmQuaSxOYSh0dCk9PWU/TWVlKHQsZSxkLEgsZC5iLEguZCk6IW58fEo4KHR0LG4pP3dnbih0LGUsZCxyLEgpOihqPVBhdCh0LGUsbixILGQuYixudSxoKSxqIT1oJiYoby5jW28uYy5sZW5ndGhdPWopLGouYyYmKGg9aikpO2Vsc2UgZm9yKE09bmV3IFMoZC5lKTtNLmE8TS5jLmMubGVuZ3RoOylpZihDPXUoSihNKSwxNyksSz1DLmMuaSxOYShLKT09ZSlNZWUodCxlLGQsQyxDLmMsZC5iKTtlbHNle2lmKCFufHxKOChLLG4pKWNvbnRpbnVlO2o9UGF0KHQsZSxuLEMsZC5iLHRsLGgpLGohPWgmJihvLmNbby5jLmxlbmd0aF09aiksai5jJiYoaD1qKX1mb3Iodj1uZXcgUyhvKTt2LmE8di5jLmMubGVuZ3RoOylkPXUoSih2KSw0NDEpLFJvKGUuYSxkLmEsMCkhPS0xfHxsZShlLmEsZC5hKSxkLmMmJihzLmNbcy5jLmxlbmd0aF09ZCl9ZnVuY3Rpb24gUjRuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0sajtmb3Ioaz1uZXcgaGUsdj1uZXcgUyhlLmEpO3YuYTx2LmMuYy5sZW5ndGg7KWZvcihoPXUoSih2KSwxMCksaj1LbyhoLCh2ZSgpLEhuKSkuS2MoKTtqLk9iKCk7KWZvcihNPXUoai5QYigpLDExKSxzPW5ldyBTKE0uZyk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTcpLCEoIUdhKHIpJiZyLmMuaS5jPT1yLmQuaS5jfHxHYShyKXx8ci5kLmkuYyE9bikmJihrLmNbay5jLmxlbmd0aF09cik7Zm9yKGQ9bDIobi5hKS5LYygpO2QuT2IoKTspZm9yKGg9dShkLlBiKCksMTApLGo9S28oaCwodmUoKSxCbikpLktjKCk7ai5PYigpOylmb3IoTT11KGouUGIoKSwxMSkscz1uZXcgUyhNLmUpO3MuYTxzLmMuYy5sZW5ndGg7KWlmKHI9dShKKHMpLDE3KSwhKCFHYShyKSYmci5jLmkuYz09ci5kLmkuY3x8R2Eocil8fHIuYy5pLmMhPWUpKXtmb3IoQz1uZXcgZGEoayxrLmMubGVuZ3RoKSxvPShabihDLmI+MCksdShDLmEuWGIoQy5jPS0tQy5iKSwxNykpO28hPXImJkMuYj4wOyl0LmFbby5wXT0hMCx0LmFbci5wXT0hMCxvPShabihDLmI+MCksdShDLmEuWGIoQy5jPS0tQy5iKSwxNykpO0MuYj4wJiZDbChDKX19ZnVuY3Rpb24gYmhlKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE07aWYodC5hIT1lLkFqKCkpdGhyb3cgaXQobmV3IEZuKFFFK2UubmUoKStDdikpO2lmKHI9JGcoKCR1KCkseWEpLGUpLiRrKCkscilyZXR1cm4gci5BaigpLk5oKCkuSWgocixuKTtpZihoPSRnKHlhLGUpLmFsKCksaCl7aWYobj09bnVsbClyZXR1cm4gbnVsbDtpZihkPXUobiwxNSksZC5kYygpKXJldHVybiIiO2ZvcihNPW5ldyBBZyxvPWQuS2MoKTtvLk9iKCk7KXM9by5QYigpLGdvKE0saC5BaigpLk5oKCkuSWgoaCxzKSksTS5hKz0iICI7cmV0dXJuIGludChNLE0uYS5sZW5ndGgtMSl9aWYoQz0kZyh5YSxlKS5ibCgpLCFDLmRjKCkpe2ZvcihrPUMuS2MoKTtrLk9iKCk7KWlmKHY9dShrLlBiKCksMTQ4KSx2LndqKG4pKXRyeXtpZihNPXYuQWooKS5OaCgpLkloKHYsbiksTSE9bnVsbClyZXR1cm4gTX1jYXRjaChqKXtpZihqPVdpKGopLCFfdChqLDEwMikpdGhyb3cgaXQoail9dGhyb3cgaXQobmV3IEZuKCJJbnZhbGlkIHZhbHVlOiAnIituKyInIGZvciBkYXRhdHlwZSA6IitlLm5lKCkpKX1yZXR1cm4gdShlLDgzNCkuRmooKSxuPT1udWxsP251bGw6X3QobiwxNzIpPyIiK3UobiwxNzIpLmE6b2wobik9PXRWP1ZVdChhQVswXSx1KG4sMTk5KSk6JG8obil9ZnVuY3Rpb24gajRuKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDO2ZvcihrPW5ldyBaaSxkPW5ldyBaaSxvPW5ldyBTKHQpO28uYTxvLmMuYy5sZW5ndGg7KXI9dShKKG8pLDEyOCksci52PTAsci5uPXIuaS5jLmxlbmd0aCxyLnU9ci50LmMubGVuZ3RoLHIubj09MCYmZnMoayxyLGsuYy5iLGsuYyksci51PT0wJiZyLnIuYS5nYygpPT0wJiZmcyhkLHIsZC5jLmIsZC5jKTtmb3IoaD0tMTtrLmIhPTA7KWZvcihyPXUoRHN0KGssMCksMTI4KSxuPW5ldyBTKHIudCk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMjY4KSxDPWUuYixDLnY9Yi5NYXRoLm1heChDLnYsci52KzEpLGg9Yi5NYXRoLm1heChoLEMudiksLS1DLm4sQy5uPT0wJiZmcyhrLEMsay5jLmIsay5jKTtpZihoPi0xKXtmb3Iocz1laShkLDApO3MuYiE9cy5kLmM7KXI9dSh0aShzKSwxMjgpLHIudj1oO2Zvcig7ZC5iIT0wOylmb3Iocj11KERzdChkLDApLDEyOCksbj1uZXcgUyhyLmkpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDI2OCksdj1lLmEsdi5yLmEuZ2MoKT09MCYmKHYudj1iLk1hdGgubWluKHYudixyLnYtMSksLS12LnUsdi51PT0wJiZmcyhkLHYsZC5jLmIsZC5jKSl9fWZ1bmN0aW9uIHdoZSh0LGUsbixyLHMpe3ZhciBvLGgsZCx2O3JldHVybiB2PWFzLGg9ITEsZD1weHQodCxpYShuZXcgJGUoZS5hLGUuYiksdCksTGkobmV3ICRlKG4uYSxuLmIpLHMpLGlhKG5ldyAkZShyLmEsci5iKSxuKSksbz0hIWQmJiEoYi5NYXRoLmFicyhkLmEtdC5hKTw9RXYmJmIuTWF0aC5hYnMoZC5iLXQuYik8PUV2fHxiLk1hdGguYWJzKGQuYS1lLmEpPD1FdiYmYi5NYXRoLmFicyhkLmItZS5iKTw9RXYpLGQ9cHh0KHQsaWEobmV3ICRlKGUuYSxlLmIpLHQpLG4scyksZCYmKChiLk1hdGguYWJzKGQuYS10LmEpPD1FdiYmYi5NYXRoLmFicyhkLmItdC5iKTw9RXYpPT0oYi5NYXRoLmFicyhkLmEtZS5hKTw9RXYmJmIuTWF0aC5hYnMoZC5iLWUuYik8PUV2KXx8bz92PWIuTWF0aC5taW4odixEOShpYShkLG4pKSk6aD0hMCksZD1weHQodCxpYShuZXcgJGUoZS5hLGUuYiksdCkscixzKSxkJiYoaHx8KGIuTWF0aC5hYnMoZC5hLXQuYSk8PUV2JiZiLk1hdGguYWJzKGQuYi10LmIpPD1Fdik9PShiLk1hdGguYWJzKGQuYS1lLmEpPD1FdiYmYi5NYXRoLmFicyhkLmItZS5iKTw9RXYpfHxvKSYmKHY9Yi5NYXRoLm1pbih2LEQ5KGlhKGQscikpKSksdn1mdW5jdGlvbiB2aGUodCl7TXcodCxuZXcgazIoTVIoX3coRXcoQ3coVHcobmV3IGtnLG9iKSxvMWUpLCJNaW5pbWl6ZXMgdGhlIHN0cmVzcyB3aXRoaW4gYSBsYXlvdXQgdXNpbmcgc3RyZXNzIG1ham9yaXphdGlvbi4gU3RyZXNzIGV4aXN0cyBpZiB0aGUgZXVjbGlkZWFuIGRpc3RhbmNlIGJldHdlZW4gYSBwYWlyIG9mIG5vZGVzIGRvZXNuJ3QgbWF0Y2ggdGhlaXIgZ3JhcGggdGhlb3JldGljIGRpc3RhbmNlLCB0aGF0IGlzLCB0aGUgc2hvcnRlc3QgcGF0aCBiZXR3ZWVuIHRoZSB0d28gbm9kZXMuIFRoZSBtZXRob2QgYWxsb3dzIHRvIHNwZWNpZnkgaW5kaXZpZHVhbCBlZGdlIGxlbmd0aHMuIiksbmV3IGYxKSxWbCkpKSx4ZSh0LG9iLEdJLEllKEE3dCkpLHhlKHQsb2IsZUgsKE5uKCksITApKSx4ZSh0LG9iLEQ0LEllKExiZSkpLHhlKHQsb2IsQzYsSWUoTWJlKSkseGUodCxvYixUNixJZShEYmUpKSx4ZSh0LG9iLFVFLEllKEFiZSkpLHhlKHQsb2Isal8sSWUoTTd0KSkseGUodCxvYixXRSxJZShJYmUpKSx4ZSh0LG9iLHY2dCxJZShTN3QpKSx4ZSh0LG9iLHk2dCxJZShDN3QpKSx4ZSh0LG9iLHg2dCxJZShfN3QpKSx4ZSh0LG9iLGs2dCxJZShMN3QpKSx4ZSh0LG9iLG02dCxJZSh2VikpfWZ1bmN0aW9uICQ0bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3Q7Zm9yKHZyKGUsIkludGVyYWN0aXZlIGNyb3NzaW5nIG1pbmltaXphdGlvbiIsMSksaD0wLG89bmV3IFModC5iKTtvLmE8by5jLmMubGVuZ3RoOylyPXUoSihvKSwyOSksci5wPWgrKztmb3Ioaj1fNHQodCksdHQ9bmV3IGhidChqLmxlbmd0aCksVWxlKG5ldyB5bChsdChjdChnMmUsMSksRGUsMjI1LDAsW3R0XSkpLGopLEs9MCxoPTAscz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KXtmb3Iocj11KEoocyksMjkpLG49MCxNPTAsQz1uZXcgUyhyLmEpO0MuYTxDLmMuYy5sZW5ndGg7KWZvcih2PXUoSihDKSwxMCksdi5uLmE+MCYmKG4rPXYubi5hK3Yuby5hLzIsKytNKSxHPW5ldyBTKHYuaik7Ry5hPEcuYy5jLmxlbmd0aDspSD11KEooRyksMTEpLEgucD1LKys7Zm9yKE0+MCYmKG4vPU0pLGd0PU50KGFhLHZvLDI1LHIuYS5jLmxlbmd0aCwxNSwxKSxkPTAsaz1uZXcgUyhyLmEpO2suYTxrLmMuYy5sZW5ndGg7KXY9dShKKGspLDEwKSx2LnA9ZCsrLGd0W3YucF09QTRuKHYsbiksdi5rPT0oVm4oKSx0YSkmJkp0KHYsKGFlKCksb0N0KSxndFt2LnBdKTt3bigpLFpzKHIuYSxuZXcgUyR0KGd0KSksbmxlKHR0LGosaCwhMCksKytofW9yKGUpfWZ1bmN0aW9uIExfKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDO2lmKGUuZT09NSl7bGhlKHQsZSk7cmV0dXJufWlmKGs9ZSwhKGsuYj09bnVsbHx8dC5iPT1udWxsKSl7Zm9yKHY0KHQpLFNfKHQpLHY0KGspLFNfKGspLG49TnQoQ3IsWHIsMjUsdC5iLmxlbmd0aCtrLmIubGVuZ3RoLDE1LDEpLEM9MCxyPTAsaD0wO3I8dC5iLmxlbmd0aCYmaDxrLmIubGVuZ3RoOylpZihzPXQuYltyXSxvPXQuYltyKzFdLGQ9ay5iW2hdLHY9ay5iW2grMV0sbzxkKW5bQysrXT10LmJbcisrXSxuW0MrK109dC5iW3IrK107ZWxzZSBpZihvPj1kJiZzPD12KWQ8PXMmJm88PXY/cis9MjpkPD1zPyh0LmJbcl09disxLGgrPTIpOm88PXY/KG5bQysrXT1zLG5bQysrXT1kLTEscis9Mik6KG5bQysrXT1zLG5bQysrXT1kLTEsdC5iW3JdPXYrMSxoKz0yKTtlbHNlIGlmKHY8cyloKz0yO2Vsc2UgdGhyb3cgaXQobmV3IFZvKCJUb2tlbiNzdWJ0cmFjdFJhbmdlcygpOiBJbnRlcm5hbCBFcnJvcjogWyIrdC5iW3JdKyIsIit0LmJbcisxXSsiXSAtIFsiK2suYltoXSsiLCIray5iW2grMV0rIl0iKSk7Zm9yKDtyPHQuYi5sZW5ndGg7KW5bQysrXT10LmJbcisrXSxuW0MrK109dC5iW3IrK107dC5iPU50KENyLFhyLDI1LEMsMTUsMSksRGMobiwwLHQuYiwwLEMpfX1mdW5jdGlvbiB6NG4odCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYoIXQuQS5kYygpKXtpZih0LkEuSGMoKEFsKCksb1ApKSYmKHUocG8odC5iLCh2ZSgpLFBuKSksMTI0KS5rPSEwLHUocG8odC5iLG1yKSwxMjQpLms9ITAsZT10LnEhPSh1YSgpLGcwKSYmdC5xIT1HYyxhTSh1KHBvKHQuYixIbiksMTI0KSxlKSxhTSh1KHBvKHQuYixCbiksMTI0KSxlKSxhTSh0LmcsZSksdC5BLkhjKEsyKSYmKHUocG8odC5iLFBuKSwxMjQpLmo9ITAsdShwbyh0LmIsbXIpLDEyNCkuaj0hMCx1KHBvKHQuYixIbiksMTI0KS5rPSEwLHUocG8odC5iLEJuKSwxMjQpLms9ITAsdC5nLms9ITApKSx0LkEuSGMoYVApKWZvcih0LmEuaj0hMCx0LmEuaz0hMCx0Lmcuaj0hMCx0Lmcuaz0hMCxkPXQuQi5IYygobGwoKSxpQSkpLHM9bHN0KCksbz0wLGg9cy5sZW5ndGg7bzxoOysrbylyPXNbb10sbj11KHBvKHQuaSxyKSwzMDYpLG4mJihQM3Qocik/KG4uaj0hMCxuLms9ITApOihuLmo9IWQsbi5rPSFkKSk7dC5BLkhjKEp5KSYmdC5CLkhjKChsbCgpLHVQKSkmJih0Lmcuaj0hMCx0Lmcuaj0hMCx0LmEuanx8KHQuYS5qPSEwLHQuYS5rPSEwLHQuYS5lPSEwKSl9fWZ1bmN0aW9uIHE0bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3Q7Zm9yKHI9bmV3IFModC5lLmIpO3IuYTxyLmMuYy5sZW5ndGg7KWZvcihuPXUoSihyKSwyOSksbz1uZXcgUyhuLmEpO28uYTxvLmMuYy5sZW5ndGg7KWlmKHM9dShKKG8pLDEwKSxIPXQuaVtzLnBdLGs9SC5hLmUsdj1ILmQuZSxzLm4uYj1rLGd0PXYtay1zLm8uYixlPUlhdChzKSxqPShjeSgpLChzLnE/cy5xOih3bigpLHduKCksdTApKS5fYigoVGUoKSxCdikpP009dShRKHMsQnYpLDE5Nyk6TT11KFEoTmEocyksQVMpLDE5NyksTSksZSYmKGo9PW41fHxqPT1lNSkmJihzLm8uYis9Z3QpLGUmJihqPT1taHR8fGo9PW41fHxqPT1lNSkpe2ZvcihLPW5ldyBTKHMuaik7Sy5hPEsuYy5jLmxlbmd0aDspRz11KEooSyksMTEpLCh2ZSgpLGx1KS5IYyhHLmopJiYoQz11KHRyKHQuayxHKSwxMjEpLEcubi5iPUMuZS1rKTtmb3IoZD1uZXcgUyhzLmIpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDcwKSx0dD11KFEocyxOdiksMjEpLHR0LkhjKChweSgpLEhoKSk/aC5uLmIrPWd0OnR0LkhjKGQwKSYmKGgubi5iKz1ndC8yKTsoaj09bjV8fGo9PWU1KSYmS28ocywodmUoKSxtcikpLkpjKG5ldyBIJHQoZ3QpKX19ZnVuY3Rpb24gbWhlKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixIO2lmKCF0LmIpcmV0dXJuITE7Zm9yKGg9bnVsbCxqPW51bGwsdj1uZXcgUXJ0KG51bGwsbnVsbCkscz0xLHYuYVsxXT10LmIsTT12O00uYVtzXTspaz1zLGQ9aixqPU0sTT1NLmFbc10scj10LmEudWUoZSxNLmQpLHM9cjwwPzA6MSxyPT0wJiYoIW4uY3x8RmMoTS5lLG4uZCkpJiYoaD1NKSwhKE0mJk0uYikmJiFEbShNLmFbc10pJiYoRG0oTS5hWzEtc10pP2o9ai5hW2tdPWR6KE0scyk6RG0oTS5hWzEtc10pfHwoSD1qLmFbMS1rXSxIJiYoIURtKEguYVsxLWtdKSYmIURtKEguYVtrXSk/KGouYj0hMSxILmI9ITAsTS5iPSEwKToobz1kLmFbMV09PWo/MTowLERtKEguYVtrXSk/ZC5hW29dPV9adChqLGspOkRtKEguYVsxLWtdKSYmKGQuYVtvXT1keihqLGspKSxNLmI9ZC5hW29dLmI9ITAsZC5hW29dLmFbMF0uYj0hMSxkLmFbb10uYVsxXS5iPSExKSkpKTtyZXR1cm4gaCYmKG4uYj0hMCxuLmQ9aC5lLE0hPWgmJihDPW5ldyBRcnQoTS5kLE0uZSksY2duKHQsdixoLEMpLGo9PWgmJihqPUMpKSxqLmFbai5hWzFdPT1NPzE6MF09TS5hW00uYVswXT8wOjFdLC0tdC5jKSx0LmI9di5hWzFdLHQuYiYmKHQuYi5iPSExKSxuLmJ9ZnVuY3Rpb24gSDRuKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0sajtmb3Iocz1uZXcgUyh0LmEuYS5iKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KEoocyksNTcpLHY9ci5jLktjKCk7di5PYigpOylkPXUodi5QYigpLDU3KSxyLmEhPWQuYSYmKEJwKHQuYS5kKT9NPXQuYS5nLk9lKHIsZCk6TT10LmEuZy5QZShyLGQpLG89ci5iLmErci5kLmIrTS1kLmIuYSxvPWIuTWF0aC5jZWlsKG8pLG89Yi5NYXRoLm1heCgwLG8pLHFtdChyLGQpPyhoPUZ3KG5ldyBYYix0LmQpLGs9cHMoYi5NYXRoLmNlaWwoZC5iLmEtci5iLmEpKSxlPWstKGQuYi5hLXIuYi5hKSxDPVh4KHIpLmEsbj1yLEN8fChDPVh4KGQpLmEsZT0tZSxuPWQpLEMmJihuLmIuYS09ZSxDLm4uYS09ZSkseWYobGYodWYoaGYoY2YobmV3IENoLGIuTWF0aC5tYXgoMCxrKSksMSksaCksdC5jW3IuYS5kXSkpLHlmKGxmKHVmKGhmKGNmKG5ldyBDaCxiLk1hdGgubWF4KDAsLWspKSwxKSxoKSx0LmNbZC5hLmRdKSkpOihqPTEsKF90KHIuZywxNDUpJiZfdChkLmcsMTApfHxfdChkLmcsMTQ1KSYmX3Qoci5nLDEwKSkmJihqPTIpLHlmKGxmKHVmKGhmKGNmKG5ldyBDaCxwcyhvKSksaiksdC5jW3IuYS5kXSksdC5jW2QuYS5kXSkpKSl9ZnVuY3Rpb24geWhlKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0sajtpZihuKWZvcihyPS0xLEM9bmV3IGRhKGUsMCk7Qy5iPEMuZC5nYygpOyl7aWYoZD0oWm4oQy5iPEMuZC5nYygpKSx1KEMuZC5YYihDLmM9Qy5iKyspLDEwKSksTT10LmNbZC5jLnBdW2QucF0uYSxNPT1udWxsKXtmb3IoaD1yKzEsbz1uZXcgZGEoZSxDLmIpO28uYjxvLmQuZ2MoKTspaWYoaj1JUWUodCwoWm4oby5iPG8uZC5nYygpKSx1KG8uZC5YYihvLmM9by5iKyspLDEwKSkpLmEsaiE9bnVsbCl7aD0oT24oaiksaik7YnJlYWt9TT0ocitoKS8yLHQuY1tkLmMucF1bZC5wXS5hPU0sdC5jW2QuYy5wXVtkLnBdLmQ9KE9uKE0pLE0pLHQuY1tkLmMucF1bZC5wXS5iPTF9cj0oT24oTSksTSl9ZWxzZXtmb3Iocz0wLGs9bmV3IFMoZSk7ay5hPGsuYy5jLmxlbmd0aDspZD11KEooayksMTApLHQuY1tkLmMucF1bZC5wXS5hIT1udWxsJiYocz1iLk1hdGgubWF4KHMsWHQodC5jW2QuYy5wXVtkLnBdLmEpKSk7Zm9yKHMrPTIsdj1uZXcgUyhlKTt2LmE8di5jLmMubGVuZ3RoOylkPXUoSih2KSwxMCksdC5jW2QuYy5wXVtkLnBdLmE9PW51bGwmJihNPXVsKHQuaSwyNCkqJEkqcy0xLHQuY1tkLmMucF1bZC5wXS5hPU0sdC5jW2QuYy5wXVtkLnBdLmQ9TSx0LmNbZC5jLnBdW2QucF0uYj0xKX19ZnVuY3Rpb24gVjRuKCl7aWkoZTMsbmV3IHZCKSxpaShacixuZXcgRUIpLGlpKFVoLG5ldyBFSiksaWkoczEsbmV3IFZMKSxpaShOZnQsbmV3IEdMKSxpaShwVSxuZXcgbHgpLGlpKGFnLG5ldyBUSiksaWkoc0EsbmV3IENKKSxpaShmUCxuZXcgY0opLGlpKE1mdCxuZXcgdUopLGlpKF9iLG5ldyBsSiksaWkoV2gsbmV3IGhKKSxpaShpMSxuZXcgZkopLGlpKFZ2LG5ldyBkSiksaWkobjMsbmV3IHdCKSxpaShNdSxuZXcgZ0opLGlpKHQzLG5ldyBwSiksaWkoY2MsbmV3IGJKKSxpaShobyxuZXcgamspLGlpKGh1LG5ldyBlQyksaWkoUnMsbmV3IG1CKSxpaShjdChHdSwxKSxuZXcgd0opLGlpKE02LG5ldyB5QiksaWkodVMsbmV3IHhCKSxpaSh0VixuZXcgdkopLGlpKFBMdCxuZXcgbkMpLGlpKGxhLG5ldyBDbSksaWkoS0F0LG5ldyBrQiksaWkoWkF0LG5ldyBtSiksaWkoeEx0LG5ldyB5SiksaWkoYlUsbmV3IHJDKSxpaShpNyxuZXcgVEIpLGlpKGphLG5ldyBDQiksaWkoSjh0LG5ldyB1YyksaWkoU3YsbmV3IHhKKSxpaSh0RXQsbmV3IF9CKSxpaSh3THQsbmV3IGlDKSxpaShGTHQsbmV3IGtKKSxpaShBdixuZXcgc0MpLGlpKEFlLG5ldyBTQiksaWkoUUF0LG5ldyBhQyksaWkoTkx0LG5ldyBvQyl9ZnVuY3Rpb24gRzRuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE07Zm9yKCFuJiYobj1TdW4oZS5xLmdldFRpbWV6b25lT2Zmc2V0KCkpKSxzPShlLnEuZ2V0VGltZXpvbmVPZmZzZXQoKS1uLmEpKjZlNCxkPW5ldyBYMnQoUGEoVHUoZS5xLmdldFRpbWUoKSkscykpLHY9ZCxkLnEuZ2V0VGltZXpvbmVPZmZzZXQoKSE9ZS5xLmdldFRpbWV6b25lT2Zmc2V0KCkmJihzPjA/cy09ODY0ZTU6cys9ODY0ZTUsdj1uZXcgWDJ0KFBhKFR1KGUucS5nZXRUaW1lKCkpLHMpKSksQz1uZXcgSW0saz10LmEubGVuZ3RoLG89MDtvPGs7KWlmKHI9d2EodC5hLG8pLHI+PTk3JiZyPD0xMjJ8fHI+PTY1JiZyPD05MCl7Zm9yKGg9bysxO2g8ayYmd2EodC5hLGgpPT1yOysraCk7anhuKEMscixoLW8sZCx2LG4pLG89aH1lbHNlIGlmKHI9PTM5KXtpZigrK28sbzxrJiZ3YSh0LmEsbyk9PTM5KXtDLmErPSInIiwrK287Y29udGludWV9Zm9yKE09ITE7IU07KXtmb3IoaD1vO2g8ayYmd2EodC5hLGgpIT0zOTspKytoO2lmKGg+PWspdGhyb3cgaXQobmV3IEZuKCJNaXNzaW5nIHRyYWlsaW5nICciKSk7aCsxPGsmJndhKHQuYSxoKzEpPT0zOT8rK2g6TT0hMCxHcihDLFBsKHQuYSxvLGgpKSxvPWgrMX19ZWxzZSBDLmErPVN0cmluZy5mcm9tQ2hhckNvZGUociksKytvO3JldHVybiBDLmF9ZnVuY3Rpb24gVTRuKHQpe3ZhciBlLG4scixzLG8saCxkLHY7Zm9yKGU9bnVsbCxyPW5ldyBTKHQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDIzMyksWHQoRTEobi5nLG4uZFswXSkuYSksbi5iPW51bGwsbi5lJiZuLmUuZ2MoKT4wJiZuLmM9PTAmJighZSYmKGU9bmV3IGhlKSxlLmNbZS5jLmxlbmd0aF09bik7aWYoZSlmb3IoO2UuYy5sZW5ndGghPTA7KXtpZihuPXUoRmcoZSwwKSwyMzMpLG4uYiYmbi5iLmMubGVuZ3RoPjApe2ZvcihvPSghbi5iJiYobi5iPW5ldyBoZSksbmV3IFMobi5iKSk7by5hPG8uYy5jLmxlbmd0aDspaWYocz11KEoobyksMjMzKSxwTShFMShzLmcscy5kWzBdKS5hKT09cE0oRTEobi5nLG4uZFswXSkuYSkpe2lmKFJvKHQscywwKT5Sbyh0LG4sMCkpcmV0dXJuIG5ldyBmYShzLG4pfWVsc2UgaWYoWHQoRTEocy5nLHMuZFswXSkuYSk+WHQoRTEobi5nLG4uZFswXSkuYSkpcmV0dXJuIG5ldyBmYShzLG4pfWZvcihkPSghbi5lJiYobi5lPW5ldyBoZSksbi5lKS5LYygpO2QuT2IoKTspaD11KGQuUGIoKSwyMzMpLHY9KCFoLmImJihoLmI9bmV3IGhlKSxoLmIpLEttKDAsdi5jLmxlbmd0aCksWEModi5jLDAsbiksaC5jPT12LmMubGVuZ3RoJiYoZS5jW2UuYy5sZW5ndGhdPWgpfXJldHVybiBudWxsfWZ1bmN0aW9uIHhoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztpZih0PT1udWxsKXJldHVybiBfdTtpZih2PWUuYS56Yyh0LGUpLHYhPW51bGwpcmV0dXJuIlsuLi5dIjtmb3Iobj1uZXcgZjIoWWEsIlsiLCJdIikscz10LG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLHIhPW51bGwmJm9sKHIpLmkmND9BcnJheS5pc0FycmF5KHIpJiYoQz1fRChyKSwhKEM+PTE0JiZDPD0xNikpP2UuYS5fYihyKT8obi5hP0dyKG4uYSxuLmIpOm4uYT1uZXcgT2wobi5kKSxoOShuLmEsIlsuLi5dIikpOihkPXUyKHIpLGs9bmV3IEU5KGUpLCQwKG4seGhlKGQsaykpKTpfdChyLDE3Nyk/JDAobixOcG4odShyLDE3NykpKTpfdChyLDE5MCk/JDAobixDMG4odShyLDE5MCkpKTpfdChyLDE5NSk/JDAobixGZ24odShyLDE5NSkpKTpfdChyLDIwMTIpPyQwKG4sXzBuKHUociwyMDEyKSkpOl90KHIsNDgpPyQwKG4sRnBuKHUociw0OCkpKTpfdChyLDM2NCk/JDAobixLcG4odShyLDM2NCkpKTpfdChyLDgzMik/JDAobixQcG4odShyLDgzMikpKTpfdChyLDEwNCkmJiQwKG4sT3BuKHUociwxMDQpKSk6JDAobixyPT1udWxsP191OiRvKHIpKTtyZXR1cm4gbi5hP24uZS5sZW5ndGg9PTA/bi5hLmE6bi5hLmErKCIiK24uZSk6bi5jfWZ1bmN0aW9uIGtoZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3Q7Zm9yKGQ9eDQoZSwhMSwhMSksZ3Q9bEkoZCksciYmKGd0PXFEKGd0KSksU3Q9WHQoeWUocWUoZSwob18oKSxRdXQpKSkpLHR0PShabihndC5iIT0wKSx1KGd0LmEuYS5jLDgpKSxNPXUoWmYoZ3QsMSksOCksZ3QuYj4yPyhDPW5ldyBoZSxMcyhDLG5ldyBRZChndCwxLGd0LmIpKSxvPWVmZShDLFN0K3QuYSksTXQ9bmV3IG5hdChvKSxNbyhNdCxlKSxuLmNbbi5jLmxlbmd0aF09TXQpOnI/TXQ9dSh0cih0LmIsZTAoZSkpLDI2Nik6TXQ9dSh0cih0LmIsdGIoZSkpLDI2Niksdj1lMChlKSxyJiYodj10YihlKSksaD1lcG4odHQsdiksaz1TdCt0LmEsaC5hPyhrKz1iLk1hdGguYWJzKHR0LmItTS5iKSxLPW5ldyAkZShNLmEsKE0uYit0dC5iKS8yKSk6KGsrPWIuTWF0aC5hYnModHQuYS1NLmEpLEs9bmV3ICRlKChNLmErdHQuYSkvMixNLmIpKSxyP2tpKHQuZCxlLG5ldyBLM3QoTXQsaCxLLGspKTpraSh0LmMsZSxuZXcgSzN0KE10LGgsSyxrKSksa2kodC5iLGUsTXQpLEc9KCFlLm4mJihlLm49bmV3IGZlKHFvLGUsMSw3KSksZS5uKSxIPW5ldyBucihHKTtILmUhPUguaS5nYygpOylqPXUoZHIoSCksMTM3KSxzPXhJKHQsaiwhMCwwLDApLG4uY1tuLmMubGVuZ3RoXT1zfWZ1bmN0aW9uIFc0bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQztmb3Ioaz1uZXcgaGUsZD1uZXcgaGUsaD1uZXcgUyh0KTtoLmE8aC5jLmMubGVuZ3RoOylzPXUoSihoKSwxMTIpLG9NKHMscy5mLmMubGVuZ3RoKSxUQyhzLHMuay5jLmxlbmd0aCkscy5kPT0wJiYoay5jW2suYy5sZW5ndGhdPXMpLHMuaT09MCYmcy5lLmI9PTAmJihkLmNbZC5jLmxlbmd0aF09cyk7Zm9yKHI9LTE7ay5jLmxlbmd0aCE9MDspZm9yKHM9dShGZyhrLDApLDExMiksbj1uZXcgUyhzLmspO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDEyOSksQz1lLmIsYVIoQyxiLk1hdGgubWF4KEMubyxzLm8rMSkpLHI9Yi5NYXRoLm1heChyLEMubyksb00oQyxDLmQtMSksQy5kPT0wJiYoay5jW2suYy5sZW5ndGhdPUMpO2lmKHI+LTEpe2ZvcihvPW5ldyBTKGQpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDExMikscy5vPXI7Zm9yKDtkLmMubGVuZ3RoIT0wOylmb3Iocz11KEZnKGQsMCksMTEyKSxuPW5ldyBTKHMuZik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTI5KSx2PWUuYSwhKHYuZS5iPjApJiYoYVIodixiLk1hdGgubWluKHYubyxzLm8tMSkpLFRDKHYsdi5pLTEpLHYuaT09MCYmKGQuY1tkLmMubGVuZ3RoXT12KSl9fWZ1bmN0aW9uIFBFKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsaztpZihrPXQuYywhZSYmKGU9b0x0KSx0LmM9ZSx0LkRiJjQmJiEodC5EYiYxKSYmKHY9bmV3IEpzKHQsMSwyLGssdC5jKSxuP24uRWkodik6bj12KSxrIT1lKXtpZihfdCh0LkNiLDI4NCkpdC5EYj4+MTY9PS0xMD9uPXUodC5DYiwyODQpLm5rKGUsbik6dC5EYj4+MTY9PS0xNSYmKCFlJiYoZT0oZG4oKSxXMSkpLCFrJiYoaz0oZG4oKSxXMSkpLHQuQ2IubmgoKSYmKHY9bmV3IHowKHQuQ2IsMSwxMyxrLGUsSGcoYWwodSh0LkNiLDU5KSksdCksITEpLG4/bi5FaSh2KTpuPXYpKTtlbHNlIGlmKF90KHQuQ2IsODgpKXQuRGI+PjE2PT0tMjMmJihfdChlLDg4KXx8KGU9KGRuKCksS2gpKSxfdChrLDg4KXx8KGs9KGRuKCksS2gpKSx0LkNiLm5oKCkmJih2PW5ldyB6MCh0LkNiLDEsMTAsayxlLEhnKExjKHUodC5DYiwyNikpLHQpLCExKSxuP24uRWkodik6bj12KSk7ZWxzZSBpZihfdCh0LkNiLDQ0NCkpZm9yKGQ9dSh0LkNiLDgzNiksaD0oIWQuYiYmKGQuYj1uZXcgbVIobmV3IGFldCkpLGQuYiksbz0ocj1uZXcgcDIobmV3IENnKGguYSkuYSksbmV3IHlSKHIpKTtvLmEuYjspcz11KFp3KG8uYSkuY2QoKSw4Nyksbj1QRShzLHZxKHMsZCksbil9cmV0dXJuIG59ZnVuY3Rpb24gWTRuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0sajtmb3IoaD1qZShSZShxZSh0LChUZSgpLEh5KSkpKSxqPXUocWUodCxHeSksMjEpLHY9ITEsaz0hMSxNPW5ldyBucigoIXQuYyYmKHQuYz1uZXcgZmUoZ2wsdCw5LDkpKSx0LmMpKTtNLmUhPU0uaS5nYygpJiYoIXZ8fCFrKTspe2ZvcihvPXUoZHIoTSksMTE4KSxkPTAscz16cChEMShsdChjdChqMSwxKSxEZSwyMCwwLFsoIW8uZCYmKG8uZD1uZXcgQ24oWXMsbyw4LDUpKSxvLmQpLCghby5lJiYoby5lPW5ldyBDbihZcyxvLDcsNCkpLG8uZSldKSkpO3pyKHMpJiYocj11KE1yKHMpLDc5KSxDPWgmJmZ2KHIpJiZqZShSZShxZShyLGoyKSkpLG49SmxlKCghci5iJiYoci5iPW5ldyBDbihicixyLDQsNykpLHIuYiksbyk/dD09ZXMoRG8odShBdCgoIXIuYyYmKHIuYz1uZXcgQ24oYnIsciw1LDgpKSxyLmMpLDApLDgyKSkpOnQ9PWVzKERvKHUoQXQoKCFyLmImJihyLmI9bmV3IENuKGJyLHIsNCw3KSksci5iKSwwKSw4MikpKSwhKChDfHxuKSYmKCsrZCxkPjEpKSk7KTsoZD4wfHxqLkhjKChadSgpLHNnKSkmJighby5uJiYoby5uPW5ldyBmZShxbyxvLDEsNykpLG8ubikuaT4wKSYmKHY9ITApLGQ+MSYmKGs9ITApfXYmJmUuRmMoKG9vKCksdmgpKSxrJiZlLkZjKChvbygpLHlTKSl9ZnVuY3Rpb24gRWhlKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0sajtpZihqPXUocWUodCwodWkoKSxHMikpLDIxKSxqLmRjKCkpcmV0dXJuIG51bGw7aWYoZD0wLGg9MCxqLkhjKChBbCgpLG9QKSkpe2ZvcihDPXUocWUodCxLUyksOTgpLHI9MixuPTIscz0yLG89MixlPWVzKHQpP3UocWUoZXModCkscXYpLDEwMyk6dShxZSh0LHF2KSwxMDMpLGs9bmV3IG5yKCghdC5jJiYodC5jPW5ldyBmZShnbCx0LDksOSkpLHQuYykpO2suZSE9ay5pLmdjKCk7KWlmKHY9dShkcihrKSwxMTgpLE09dShxZSh2LHU1KSw2MSksTT09KHZlKCksWm8pJiYoTT11eHQodixlKSx3byh2LHU1LE0pKSxDPT0odWEoKSxHYykpc3dpdGNoKE0uZyl7Y2FzZSAxOnI9Yi5NYXRoLm1heChyLHYuaSt2LmcpO2JyZWFrO2Nhc2UgMjpuPWIuTWF0aC5tYXgobix2Lmordi5mKTticmVhaztjYXNlIDM6cz1iLk1hdGgubWF4KHMsdi5pK3YuZyk7YnJlYWs7Y2FzZSA0Om89Yi5NYXRoLm1heChvLHYuait2LmYpfWVsc2Ugc3dpdGNoKE0uZyl7Y2FzZSAxOnIrPXYuZysyO2JyZWFrO2Nhc2UgMjpuKz12LmYrMjticmVhaztjYXNlIDM6cys9di5nKzI7YnJlYWs7Y2FzZSA0Om8rPXYuZisyfWQ9Yi5NYXRoLm1heChyLHMpLGg9Yi5NYXRoLm1heChuLG8pfXJldHVybiB3dih0LGQsaCwhMCwhMCl9ZnVuY3Rpb24gUmF0KHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdDtmb3IoTXQ9dShCbChleihSaShuZXcgVG4obnVsbCxuZXcgX24oZS5kLDE2KSksbmV3IHQ4KG4pKSxuZXcgbE0obikpLGMyKG5ldyBrZSxuZXcgY2UsbmV3IFhuLGx0KGN0KGZsLDEpLG9lLDEzMiwwLFsoTzEoKSxVbCldKSkpLDE1KSxNPXdpLEM9U2Esdj1uZXcgUyhlLmIuaik7di5hPHYuYy5jLmxlbmd0aDspZD11KEoodiksMTEpLGQuaj09biYmKE09Yi5NYXRoLm1pbihNLGQucCksQz1iLk1hdGgubWF4KEMsZC5wKSk7aWYoTT09d2kpZm9yKGg9MDtoPE10LmdjKCk7aCsrKVBtdCh1KE10LlhiKGgpLDEwMSksbixoKTtlbHNlIGZvcihTdD1OdChDcixYciwyNSxzLmxlbmd0aCwxNSwxKSxSZW4oU3QsU3QubGVuZ3RoKSxndD1NdC5LYygpO2d0Lk9iKCk7KXtmb3IodHQ9dShndC5QYigpLDEwMSksbz11KHRyKHQuYix0dCksMTc3KSxrPTAsSz1NO0s8PUM7SysrKW9bS10mJihrPWIuTWF0aC5tYXgoayxyW0tdKSk7aWYodHQuaSl7Zm9yKEg9dHQuaS5jLFJ0PW5ldyBIcyxqPTA7ajxzLmxlbmd0aDtqKyspc1tIXVtqXSYmRnMoUnQscGUoU3Rbal0pKTtmb3IoO0kwKFJ0LHBlKGspKTspKytrfWZvcihQbXQodHQsbixrKSxHPU07Rzw9QztHKyspb1tHXSYmKHJbR109aysxKTt0dC5pJiYoU3RbdHQuaS5jXT1rKX19ZnVuY3Rpb24gSzRuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSztmb3Iocz1udWxsLHI9bmV3IFMoZS5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxMCksSWF0KG4pP289KGQ9RncoeE0obmV3IFhiLG4pLHQuZiksdj1Gdyh4TShuZXcgWGIsbiksdC5mKSxrPW5ldyBPdnQobiwhMCxkLHYpLEM9bi5vLmIsTT0oY3koKSwobi5xP24ucTood24oKSx3bigpLHUwKSkuX2IoKFRlKCksQnYpKT9qPXUoUShuLEJ2KSwxOTcpOmo9dShRKE5hKG4pLEFTKSwxOTcpLGopLEg9MWU0LE09PWU1JiYoSD0xKSxHPXlmKGxmKHVmKGNmKGhmKG5ldyBDaCxIKSxwcyhiLk1hdGguY2VpbChDKSkpLGQpLHYpKSxNPT1uNSYmRnModC5kLEcpLG9sZSh0LGwyKEtvKG4sKHZlKCksQm4pKSksayksb2xlKHQsS28obixIbiksayksayk6bz0oSz1Gdyh4TShuZXcgWGIsbiksdC5mKSxscyhSaShuZXcgVG4obnVsbCxuZXcgX24obi5qLDE2KSksbmV3IGtRKSxuZXcgd0d0KHQsSykpLG5ldyBPdnQobiwhMSxLLEspKSx0Lmlbbi5wXT1vLHMmJihoPXMuYy5kLmErVzModC5uLHMuYyxuKStuLmQuZCxzLmJ8fChoKz1zLmMuby5iKSx5ZihsZih1ZihoZihjZihuZXcgQ2gscHMoYi5NYXRoLmNlaWwoaCkpKSwwKSxzLmQpLG8uYSkpKSxzPW99ZnVuY3Rpb24gWDRuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSztmb3IodnIoZSwiTGFiZWwgZHVtbXkgaW5zZXJ0aW9ucyIsMSksTT1uZXcgaGUsaD1YdCh5ZShRKHQsKFRlKCksVjYpKSkpLGs9WHQoeWUoUSh0LFd5KSkpLEM9dShRKHQsV2wpLDEwMyksSD1uZXcgUyh0LmEpO0guYTxILmMuYy5sZW5ndGg7KWZvcihqPXUoSihIKSwxMCksbz1uZXcgYXIobHIoRHMoaikuYS5LYygpLG5ldyB6KSk7enIobyk7KWlmKHM9dShNcihvKSwxNykscy5jLmkhPXMuZC5pJiZsbnQocy5iLHMyZSkpe2ZvcihLPXFvbihzKSxHPVVkKHMuYi5jLmxlbmd0aCksbj1CMm4odCxzLEssRyksTS5jW00uYy5sZW5ndGhdPW4scj1uLm8sZD1uZXcgZGEocy5iLDApO2QuYjxkLmQuZ2MoKTspdj0oWm4oZC5iPGQuZC5nYygpKSx1KGQuZC5YYihkLmM9ZC5iKyspLDcwKSksVnQoUSh2LE9kKSk9PT1WdCgoTTEoKSxQNykpJiYoQz09KGFvKCkscmcpfHxDPT1uZz8oci5hKz12Lm8uYStrLHIuYj1iLk1hdGgubWF4KHIuYix2Lm8uYikpOihyLmE9Yi5NYXRoLm1heChyLmEsdi5vLmEpLHIuYis9di5vLmIrayksRy5jW0cuYy5sZW5ndGhdPXYsQ2woZCkpO0M9PShhbygpLHJnKXx8Qz09bmc/KHIuYS09ayxyLmIrPWgrSyk6ci5iKz1oLWsrS31Mcyh0LmEsTSksb3IoZSl9ZnVuY3Rpb24gUTRuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE0saixIO2ZvcihvPW5ldyBZb2UoZSksTT1qdm4odCxlLG8pLEg9Yi5NYXRoLm1heChYdCh5ZShRKGUsKFRlKCksSmcpKSkpLDEpLEM9bmV3IFMoTS5hKTtDLmE8Qy5jLmMubGVuZ3RoOylrPXUoSihDKSw0Niksdj1uc2UodShrLmEsOCksdShrLmIsOCksSCksRT0hMCxFPUUmQncobixuZXcgJGUodi5jLHYuZCkpLEU9RSZCdyhuLGptKG5ldyAkZSh2LmMsdi5kKSx2LmIsMCkpLEU9RSZCdyhuLGptKG5ldyAkZSh2LmMsdi5kKSwwLHYuYSkpLEUmQncobixqbShuZXcgJGUodi5jLHYuZCksdi5iLHYuYSkpO3N3aXRjaChqPW8uZCxkPW5zZSh1KE0uYi5hLDgpLHUoTS5iLmIsOCksSCksaj09KHZlKCksQm4pfHxqPT1Ibj8oci5jW2ouZ109Yi5NYXRoLm1pbihyLmNbai5nXSxkLmQpLHIuYltqLmddPWIuTWF0aC5tYXgoci5iW2ouZ10sZC5kK2QuYSkpOihyLmNbai5nXT1iLk1hdGgubWluKHIuY1tqLmddLGQuYyksci5iW2ouZ109Yi5NYXRoLm1heChyLmJbai5nXSxkLmMrZC5iKSkscz1DcyxoPW8uYy5pLmQsai5nKXtjYXNlIDQ6cz1oLmM7YnJlYWs7Y2FzZSAyOnM9aC5iO2JyZWFrO2Nhc2UgMTpzPWguYTticmVhaztjYXNlIDM6cz1oLmR9cmV0dXJuIHIuYVtqLmddPWIuTWF0aC5tYXgoci5hW2ouZ10scyksb31mdW5jdGlvbiBaNG4odCl7dmFyIGUsbixyLHM7aWYobj10LkQhPW51bGw/dC5EOnQuQixlPWhkKG4sQ3UoOTEpKSxlIT0tMSl7cj1uLnN1YnN0cigwLGUpLHM9bmV3IEFnO2RvIHMuYSs9IlsiO3doaWxlKChlPXY4KG4sOTEsKytlKSkhPS0xKTtobihyLGI2KT9zLmErPSJaIjpobihyLHRTKT9zLmErPSJCIjpobihyLEZIKT9zLmErPSJDIjpobihyLGVTKT9zLmErPSJEIjpobihyLG5TKT9zLmErPSJGIjpobihyLHJTKT9zLmErPSJJIjpobihyLGlTKT9zLmErPSJKIjpobihyLHNTKT9zLmErPSJTIjoocy5hKz0iTCIscy5hKz0iIityLHMuYSs9IjsiKTt0cnl7cmV0dXJuIG51bGx9Y2F0Y2gobyl7aWYobz1XaShvKSwhX3Qobyw2MCkpdGhyb3cgaXQobyl9fWVsc2UgaWYoaGQobixDdSg0NikpPT0tMSl7aWYoaG4obixiNikpcmV0dXJuIHBsO2lmKGhuKG4sdFMpKXJldHVybiBHdTtpZihobihuLEZIKSlyZXR1cm4geGg7aWYoaG4obixlUykpcmV0dXJuIGFhO2lmKGhuKG4sblMpKXJldHVybiBhMztpZihobihuLHJTKSlyZXR1cm4gQ3I7aWYoaG4obixpUykpcmV0dXJuIE9iO2lmKGhuKG4sc1MpKXJldHVybiBnNX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBUaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEM7Zm9yKGs9bmV3IFkwKG4pLE1vKGssZSksSnQoaywoYWUoKSxfaSksZSksay5vLmE9ZS5nLGsuby5iPWUuZixrLm4uYT1lLmksay5uLmI9ZS5qLGxlKG4uYSxrKSxraSh0LmEsZSxrKSwoKCFlLmEmJihlLmE9bmV3IGZlKHJzLGUsMTAsMTEpKSxlLmEpLmkhPTB8fGplKFJlKHFlKGUsKFRlKCksSHkpKSkpKSYmSnQoayxlQ3QsKE5uKCksITApKSx2PXUoUShuLFZjKSwyMSksQz11KFEoaywoVGUoKSxjcykpLDk4KSxDPT0odWEoKSxUYik/SnQoayxjcyxHMSk6QyE9RzEmJnYuRmMoKG9vKCkseTcpKSxyPXUoUShuLFdsKSwxMDMpLGQ9bmV3IG5yKCghZS5jJiYoZS5jPW5ldyBmZShnbCxlLDksOSkpLGUuYykpO2QuZSE9ZC5pLmdjKCk7KWg9dShkcihkKSwxMTgpLGplKFJlKHFlKGgsejIpKSl8fFM1bih0LGgsayx2LHIsQyk7Zm9yKG89bmV3IG5yKCghZS5uJiYoZS5uPW5ldyBmZShxbyxlLDEsNykpLGUubikpO28uZSE9by5pLmdjKCk7KXM9dShkcihvKSwxMzcpLCFqZShSZShxZShzLHoyKSkpJiZzLmEmJmxlKGsuYixWaXQocykpO3JldHVybiBqZShSZShRKGssQ1MpKSkmJnYuRmMoKG9vKCksS1YpKSxqZShSZShRKGssbEcpKSkmJih2LkZjKChvbygpLFhWKSksdi5GYyh5UyksSnQoayxjcyxHMSkpLGt9ZnVuY3Rpb24gSjRuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZSxXZSxRZSxSbjtkPXUodHIoZS5jLHQpLDQ1OSksTXQ9ZS5hLmMsdj1lLmEuYytlLmEuYixRZT1kLmYsUm49ZC5hLGg9UWU8Um4sSz1uZXcgJGUoTXQsUWUpLFN0PW5ldyAkZSh2LFJuKSxzPShNdCt2KS8yLHR0PW5ldyAkZShzLFFlKSxSdD1uZXcgJGUocyxSbiksbz1sd24odCxRZSxSbiksdWU9XzEoZS5CKSxfZT1uZXcgJGUocyxvKSxXZT1fMShlLkQpLG49T3VuKGx0KGN0KFdzLDEpLGVlLDgsMCxbdWUsX2UsV2VdKSksSD0hMSxndD1lLkIuaSxndCYmZ3QuYyYmZC5kJiYoaz1oJiZndC5wPGd0LmMuYS5jLmxlbmd0aC0xfHwhaCYmZ3QucD4wLGs/ayYmKGo9Z3QucCxoPysrajotLWosTT11KE5lKGd0LmMuYSxqKSwxMCkscj1ncmUoTSksSD0hKGNhdChyLHVlLG5bMF0pfHxVS3Qocix1ZSxuWzBdKSkpOkg9ITApLEc9ITEsS3Q9ZS5ELmksS3QmJkt0LmMmJmQuZSYmKEM9aCYmS3QucD4wfHwhaCYmS3QucDxLdC5jLmEuYy5sZW5ndGgtMSxDPyhqPUt0LnAsaD8tLWo6KytqLE09dShOZShLdC5jLmEsaiksMTApLHI9Z3JlKE0pLEc9IShjYXQocixuWzBdLFdlKXx8VUt0KHIsblswXSxXZSkpKTpHPSEwKSxIJiZHJiZyaSh0LmEsX2UpLEh8fFY5KHQuYSxsdChjdChXcywxKSxlZSw4LDAsW0ssdHRdKSksR3x8VjkodC5hLGx0KGN0KFdzLDEpLGVlLDgsMCxbUnQsU3RdKSl9ZnVuY3Rpb24gTnEodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrO2lmKF90KHQuVWcoKSwxNjApPyhOcSh1KHQuVWcoKSwxNjApLGUpLGUuYSs9IiA+ICIpOmUuYSs9IlJvb3QgIixuPXQuVGcoKS56YixobihuLnN1YnN0cigwLDMpLCJFbGsiKT9HcihlLG4uc3Vic3RyKDMpKTplLmErPSIiK24scz10LnpnKCkscyl7R3IoKGUuYSs9IiAiLGUpLHMpO3JldHVybn1pZihfdCh0LDM1NCkmJihrPXUodCwxMzcpLmEsaykpe0dyKChlLmErPSIgIixlKSxrKTtyZXR1cm59Zm9yKGg9bmV3IG5yKHQuQWcoKSk7aC5lIT1oLmkuZ2MoKTspaWYobz11KGRyKGgpLDEzNyksaz1vLmEsayl7R3IoKGUuYSs9IiAiLGUpLGspO3JldHVybn1pZihfdCh0LDM1MikmJihyPXUodCw3OSksIXIuYiYmKHIuYj1uZXcgQ24oYnIsciw0LDcpKSxyLmIuaSE9MCYmKCFyLmMmJihyLmM9bmV3IENuKGJyLHIsNSw4KSksci5jLmkhPTApKSl7Zm9yKGUuYSs9IiAoIixkPW5ldyBOeCgoIXIuYiYmKHIuYj1uZXcgQ24oYnIsciw0LDcpKSxyLmIpKTtkLmUhPWQuaS5nYygpOylkLmU+MCYmKGUuYSs9WWEpLE5xKHUoZHIoZCksMTYwKSxlKTtmb3IoZS5hKz1Vb3Qsdj1uZXcgTngoKCFyLmMmJihyLmM9bmV3IENuKGJyLHIsNSw4KSksci5jKSk7di5lIT12LmkuZ2MoKTspdi5lPjAmJihlLmErPVlhKSxOcSh1KGRyKHYpLDE2MCksZSk7ZS5hKz0iKSJ9fWZ1bmN0aW9uIHQ1bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSDtpZihvPXUoUSh0LChhZSgpLF9pKSksNzkpLCEhbyl7Zm9yKHI9dC5hLHM9bmV3IHhvKG4pLExpKHMsVmRuKHQpKSxKOCh0LmQuaSx0LmMuaSk/KGo9dC5jLE09WW8obHQoY3QoV3MsMSksZWUsOCwwLFtqLm4sai5hXSkpLGlhKE0sbikpOk09XzEodC5jKSxmcyhyLE0sci5hLHIuYS5hKSxIPV8xKHQuZCksUSh0LFFsdCkhPW51bGwmJkxpKEgsdShRKHQsUWx0KSw4KSksZnMocixILHIuYy5iLHIuYyksbnkocixzKSxoPXg0KG8sITAsITApLHV6KGgsdShBdCgoIW8uYiYmKG8uYj1uZXcgQ24oYnIsbyw0LDcpKSxvLmIpLDApLDgyKSksbHooaCx1KEF0KCghby5jJiYoby5jPW5ldyBDbihicixvLDUsOCkpLG8uYyksMCksODIpKSxDSShyLGgpLEM9bmV3IFModC5iKTtDLmE8Qy5jLmMubGVuZ3RoOylrPXUoSihDKSw3MCksZD11KFEoayxfaSksMTM3KSx0dihkLGsuby5hKSxKdyhkLGsuby5iKSx4MShkLGsubi5hK3MuYSxrLm4uYitzLmIpLHdvKGQsKHI2KCksYmx0KSxSZShRKGssYmx0KSkpO3Y9dShRKHQsKFRlKCksU28pKSw3NCksdj8obnkodixzKSx3byhvLFNvLHYpKTp3byhvLFNvLG51bGwpLGU9PShXMCgpLFg2KT93byhvLGVnLFg2KTp3byhvLGVnLG51bGwpfX1mdW5jdGlvbiBlNW4odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10O2ZvcihIPWUuYy5sZW5ndGgsaj0wLE09bmV3IFModC5iKTtNLmE8TS5jLmMubGVuZ3RoOylpZihDPXUoSihNKSwyOSksZ3Q9Qy5hLGd0LmMubGVuZ3RoIT0wKXtmb3IodHQ9bmV3IFMoZ3QpLGs9MCxNdD1udWxsLHM9dShKKHR0KSwxMCksbz1udWxsO3M7KXtpZihvPXUoTmUoZSxzLnApLDI1Nyksby5jPj0wKXtmb3Iodj1udWxsLGQ9bmV3IGRhKEMuYSxrKzEpO2QuYjxkLmQuZ2MoKSYmKGg9KFpuKGQuYjxkLmQuZ2MoKSksdShkLmQuWGIoZC5jPWQuYisrKSwxMCkpLHY9dShOZShlLGgucCksMjU3KSwhKHYuZD09by5kJiZ2LmM8by5jKSk7KXY9bnVsbDt2JiYoTXQmJihjaChyLHMucCxwZSh1KE5lKHIscy5wKSwxOSkuYS0xKSksdShOZShuLE10LnApLDE1KS5NYyhvKSksbz1GMG4obyxzLEgrKyksZS5jW2UuYy5sZW5ndGhdPW8sbGUobixuZXcgaGUpLE10Pyh1KE5lKG4sTXQucCksMTUpLkZjKG8pLGxlKHIscGUoMSkpKTpsZShyLHBlKDApKSl9Rz1udWxsLHR0LmE8dHQuYy5jLmxlbmd0aCYmKEc9dShKKHR0KSwxMCksSz11KE5lKGUsRy5wKSwyNTcpLHUoTmUobixzLnApLDE1KS5GYyhLKSxjaChyLEcucCxwZSh1KE5lKHIsRy5wKSwxOSkuYSsxKSkpLG8uZD1qLG8uYz1rKyssTXQ9cyxzPUd9KytqfX1mdW5jdGlvbiBqYXQodCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0O3JldHVybiB2PXQsQz1pYShuZXcgJGUoZS5hLGUuYiksdCksaz1uLE09aWEobmV3ICRlKHIuYSxyLmIpLG4pLGo9di5hLHR0PXYuYixHPWsuYSxNdD1rLmIsSD1DLmEsZ3Q9Qy5iLEs9TS5hLFN0PU0uYixzPUsqZ3QtSCpTdCxrMSgpLHdmKF9kKSxiLk1hdGguYWJzKDAtcyk8PV9kfHxzPT0wfHxpc05hTigwKSYmaXNOYU4ocyk/ITE6KGg9MS9zKigoai1HKSpndC0odHQtTXQpKkgpLGQ9MS9zKi0oLShqLUcpKlN0Kyh0dC1NdCkqSyksbz0od2YoX2QpLChiLk1hdGguYWJzKDAtaCk8PV9kfHxoPT0wfHxpc05hTigwKSYmaXNOYU4oaCk/MDowPGg/LTE6MD5oPzE6SXcoaXNOYU4oMCksaXNOYU4oaCkpKTwwJiYod2YoX2QpLChiLk1hdGguYWJzKGgtMSk8PV9kfHxoPT0xfHxpc05hTihoKSYmaXNOYU4oMSk/MDpoPDE/LTE6aD4xPzE6SXcoaXNOYU4oaCksaXNOYU4oMSkpKTwwKSYmKHdmKF9kKSwoYi5NYXRoLmFicygwLWQpPD1fZHx8ZD09MHx8aXNOYU4oMCkmJmlzTmFOKGQpPzA6MDxkPy0xOjA+ZD8xOkl3KGlzTmFOKDApLGlzTmFOKGQpKSk8MCkmJih3ZihfZCksKGIuTWF0aC5hYnMoZC0xKTw9X2R8fGQ9PTF8fGlzTmFOKGQpJiZpc05hTigxKT8wOmQ8MT8tMTpkPjE/MTpJdyhpc05hTihkKSxpc05hTigxKSkpPDApKSxvKX1mdW5jdGlvbiBuNW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlO2ZvcihNPW5ldyBTdnQobmV3IER0KHQpKTtNLmIhPU0uYy5hLmQ7KWZvcihDPUF0ZShNKSxkPXUoQy5kLDU2KSxlPXUoQy5lLDU2KSxoPWQuVGcoKSxLPTAsUnQ9KGguaT09bnVsbCYmdmQoaCksaC5pKS5sZW5ndGg7SzxSdDsrK0spaWYoaz0obz0oaC5pPT1udWxsJiZ2ZChoKSxoLmkpLEs+PTAmJks8by5sZW5ndGg/b1tLXTpudWxsKSxrLklqKCkmJiFrLkpqKCkpe2lmKF90KGssOTkpKXY9dShrLDE4KSwhKHYuQmImZGMpJiYodWU9bm8odiksISh1ZSYmdWUuQmImZGMpKSYmcXluKHQsdixkLGUpO2Vsc2UgaWYodG8oKSx1KGssNjYpLk9qKCkmJihuPShLdD1rLHUoS3Q/dShlLDQ5KS54aChLdCk6bnVsbCwxNTMpKSxuKSlmb3IoSD11KGQuYWgoayksMTUzKSxyPW4uZ2MoKSx0dD0wLEc9SC5nYygpO3R0PEc7Kyt0dClpZihqPUguaWwodHQpLF90KGosOTkpKXtpZihTdD1ILmpsKHR0KSxzPVh3KHQsU3QpLHM9PW51bGwmJlN0IT1udWxsKXtpZihNdD11KGosMTgpLCF0LmJ8fE10LkJiJmRjfHxubyhNdCkpY29udGludWU7cz1TdH1pZighbi5kbChqLHMpKXtmb3IoZ3Q9MDtndDxyOysrZ3QpaWYobi5pbChndCk9PWomJlZ0KG4uamwoZ3QpKT09PVZ0KHMpKXtuLmlpKG4uZ2MoKS0xLGd0KSwtLXI7YnJlYWt9fX1lbHNlIG4uZGwoSC5pbCh0dCksSC5qbCh0dCkpfX1mdW5jdGlvbiByNW4odCxlLG4scixzLG8saCl7dmFyIGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0O2lmKGd0PW8zbihlLG4sdC5nKSxzLm4mJnMubiYmbyYmZ2YocyxwZihvKSwoU2woKSxRbCkpLHQuYilmb3IodHQ9MDt0dDxndC5jLmxlbmd0aDt0dCsrKU09KEFuKHR0LGd0LmMubGVuZ3RoKSx1KGd0LmNbdHRdLDIwMCkpLHR0IT0wJiYoSD0oQW4odHQtMSxndC5jLmxlbmd0aCksdShndC5jW3R0LTFdLDIwMCkpLHFyZShNLEguZitILmIrdC5nKSksd3huKHR0LGd0LG4sdC5nKSx3ZG4odCxNKSxzLm4mJm8mJmdmKHMscGYobyksKFNsKCksUWwpKTtlbHNlIGZvcihLPW5ldyBTKGd0KTtLLmE8Sy5jLmMubGVuZ3RoOylmb3IoRz11KEooSyksMjAwKSxDPW5ldyBTKEcuYSk7Qy5hPEMuYy5jLmxlbmd0aDspaz11KEooQyksMTg3KSxNdD1uZXcgcXZ0KGsucyxrLnQsdC5nKSxweXQoTXQsayksbGUoRy5kLE10KTtyZXR1cm4gXzFuKHQsZ3QpLHMubiYmcy5uJiZvJiZnZihzLHBmKG8pLChTbCgpLFFsKSksU3Q9Yi5NYXRoLm1heCh0LmQsci5hLShoLmIraC5jKSksaj1iLk1hdGgubWF4KHQuYyxyLmItKGguZCtoLmEpKSxkPWotdC5jLHQuZSYmdC5mJiYodj1TdC9qLHY8dC5hP1N0PWoqdC5hOmQrPVN0L3QuYS1qKSx0LmUmJlpobihndCxTdCxkKSxzLm4mJnMubiYmbyYmZ2YocyxwZihvKSwoU2woKSxRbCkpLG5ldyBGbnQodC5hLFN0LHQuYytkLChBRSgpLFVTKSl9ZnVuY3Rpb24gaTVuKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE07Zm9yKHQuaj1OdChDcixYciwyNSx0LmcsMTUsMSksdC5vPW5ldyBoZSxscyhXbyhuZXcgVG4obnVsbCxuZXcgX24odC5lLmIsMTYpKSxuZXcgbngpLG5ldyBWJHQodCkpLHQuYT1OdChwbCxvMCwyNSx0LmIsMTYsMSksV0QobmV3IFRuKG51bGwsbmV3IF9uKHQuZS5iLDE2KSksbmV3IFUkdCh0KSkscj0oTT1uZXcgaGUsbHMoUmkoV28obmV3IFRuKG51bGwsbmV3IF9uKHQuZS5iLDE2KSksbmV3IExRKSxuZXcgRyR0KHQpKSxuZXcgdkd0KHQsTSkpLE0pLHY9bmV3IFMocik7di5hPHYuYy5jLmxlbmd0aDspaWYoZD11KEoodiksNTA4KSwhKGQuYy5sZW5ndGg8PTEpKXtpZihkLmMubGVuZ3RoPT0yKXtYYm4oZCksSWF0KChBbigwLGQuYy5sZW5ndGgpLHUoZC5jWzBdLDE3KSkuZC5pKXx8bGUodC5vLGQpO2NvbnRpbnVlfWlmKCEoazBuKGQpfHxocG4oZCxuZXcgS04pKSlmb3Ioaz1uZXcgUyhkKSxzPW51bGw7ay5hPGsuYy5jLmxlbmd0aDspZT11KEooayksMTcpLG49dC5jW2UucF0sIXN8fGsuYT49ay5jLmMubGVuZ3RoP0M9b210KChWbigpLE9zKSx0YSk6Qz1vbXQoKFZuKCksdGEpLHRhKSxDKj0yLG89bi5hLmcsbi5hLmc9Yi5NYXRoLm1heChvLG8rKEMtbykpLGg9bi5iLmcsbi5iLmc9Yi5NYXRoLm1heChoLGgrKEMtaCkpLHM9ZX19ZnVuY3Rpb24gczVuKHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdDtmb3IoS3Q9Vll0KHQpLEM9bmV3IGhlLGQ9dC5jLmxlbmd0aCxNPWQtMSxqPWQrMTtLdC5hLmMhPTA7KXtmb3IoO24uYiE9MDspU3Q9KFpuKG4uYiE9MCksdShsaChuLG4uYS5hKSwxMTIpKSxQOShLdC5hLFN0KSE9bnVsbCxTdC5nPU0tLSxseHQoU3QsZSxuLHIpO2Zvcig7ZS5iIT0wOylSdD0oWm4oZS5iIT0wKSx1KGxoKGUsZS5hLmEpLDExMikpLFA5KEt0LmEsUnQpIT1udWxsLFJ0Lmc9aisrLGx4dChSdCxlLG4scik7Zm9yKGs9U2EsZ3Q9KGg9bmV3IHk5KG5ldyB3OShuZXcgeShLdC5hKS5hKS5iKSxuZXcgZyhoKSk7VE0oZ3QuYS5hKTspe2lmKHR0PShvPUxqKGd0LmEpLHUoby5jZCgpLDExMikpLCFyJiZ0dC5iPjAmJnR0LmE8PTApe0MuYz1OdChRbixEZSwxLDAsNSwxKSxDLmNbQy5jLmxlbmd0aF09dHQ7YnJlYWt9Sz10dC5pLXR0LmQsSz49ayYmKEs+ayYmKEMuYz1OdChRbixEZSwxLDAsNSwxKSxrPUspLEMuY1tDLmMubGVuZ3RoXT10dCl9Qy5jLmxlbmd0aCE9MCYmKHY9dShOZShDLFp6KHMsQy5jLmxlbmd0aCkpLDExMiksUDkoS3QuYSx2KSE9bnVsbCx2Lmc9aisrLGx4dCh2LGUsbixyKSxDLmM9TnQoUW4sRGUsMSwwLDUsMSkpfWZvcihNdD10LmMubGVuZ3RoKzEsRz1uZXcgUyh0KTtHLmE8Ry5jLmMubGVuZ3RoOylIPXUoSihHKSwxMTIpLEguZzxkJiYoSC5nPUguZytNdCl9ZnVuY3Rpb24gQnEodCxlKXt2YXIgbjtpZih0LmUpdGhyb3cgaXQobmV3IE5vKChQMCh6dXQpLFNvdCt6dXQuaytBb3QpKSk7aWYoIVNYZSh0LmEsZSkpdGhyb3cgaXQobmV3IFZvKE5mZStlK0JmZSkpO2lmKGU9PXQuZClyZXR1cm4gdDtzd2l0Y2gobj10LmQsdC5kPWUsbi5nKXtjYXNlIDA6c3dpdGNoKGUuZyl7Y2FzZSAyOmx2KHQpO2JyZWFrO2Nhc2UgMTpRcCh0KSxsdih0KTticmVhaztjYXNlIDQ6ZzQodCksbHYodCk7YnJlYWs7Y2FzZSAzOmc0KHQpLFFwKHQpLGx2KHQpfWJyZWFrO2Nhc2UgMjpzd2l0Y2goZS5nKXtjYXNlIDE6UXAodCksZ2F0KHQpO2JyZWFrO2Nhc2UgNDpnNCh0KSxsdih0KTticmVhaztjYXNlIDM6ZzQodCksUXAodCksbHYodCl9YnJlYWs7Y2FzZSAxOnN3aXRjaChlLmcpe2Nhc2UgMjpRcCh0KSxnYXQodCk7YnJlYWs7Y2FzZSA0OlFwKHQpLGc0KHQpLGx2KHQpO2JyZWFrO2Nhc2UgMzpRcCh0KSxnNCh0KSxRcCh0KSxsdih0KX1icmVhaztjYXNlIDQ6c3dpdGNoKGUuZyl7Y2FzZSAyOmc0KHQpLGx2KHQpO2JyZWFrO2Nhc2UgMTpnNCh0KSxRcCh0KSxsdih0KTticmVhaztjYXNlIDM6UXAodCksZ2F0KHQpfWJyZWFrO2Nhc2UgMzpzd2l0Y2goZS5nKXtjYXNlIDI6UXAodCksZzQodCksbHYodCk7YnJlYWs7Y2FzZSAxOlFwKHQpLGc0KHQpLFFwKHQpLGx2KHQpO2JyZWFrO2Nhc2UgNDpRcCh0KSxnYXQodCl9fXJldHVybiB0fWZ1bmN0aW9uIF80KHQsZSl7dmFyIG47aWYodC5kKXRocm93IGl0KG5ldyBObygoUDAodWx0KSxTb3QrdWx0LmsrQW90KSkpO2lmKCFBWGUodC5hLGUpKXRocm93IGl0KG5ldyBWbyhOZmUrZStCZmUpKTtpZihlPT10LmMpcmV0dXJuIHQ7c3dpdGNoKG49dC5jLHQuYz1lLG4uZyl7Y2FzZSAwOnN3aXRjaChlLmcpe2Nhc2UgMjpnMih0KTticmVhaztjYXNlIDE6WHAodCksZzIodCk7YnJlYWs7Y2FzZSA0OnA0KHQpLGcyKHQpO2JyZWFrO2Nhc2UgMzpwNCh0KSxYcCh0KSxnMih0KX1icmVhaztjYXNlIDI6c3dpdGNoKGUuZyl7Y2FzZSAxOlhwKHQpLHBhdCh0KTticmVhaztjYXNlIDQ6cDQodCksZzIodCk7YnJlYWs7Y2FzZSAzOnA0KHQpLFhwKHQpLGcyKHQpfWJyZWFrO2Nhc2UgMTpzd2l0Y2goZS5nKXtjYXNlIDI6WHAodCkscGF0KHQpO2JyZWFrO2Nhc2UgNDpYcCh0KSxwNCh0KSxnMih0KTticmVhaztjYXNlIDM6WHAodCkscDQodCksWHAodCksZzIodCl9YnJlYWs7Y2FzZSA0OnN3aXRjaChlLmcpe2Nhc2UgMjpwNCh0KSxnMih0KTticmVhaztjYXNlIDE6cDQodCksWHAodCksZzIodCk7YnJlYWs7Y2FzZSAzOlhwKHQpLHBhdCh0KX1icmVhaztjYXNlIDM6c3dpdGNoKGUuZyl7Y2FzZSAyOlhwKHQpLHA0KHQpLGcyKHQpO2JyZWFrO2Nhc2UgMTpYcCh0KSxwNCh0KSxYcCh0KSxnMih0KTticmVhaztjYXNlIDQ6WHAodCkscGF0KHQpfX1yZXR1cm4gdH1mdW5jdGlvbiBhNW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEM7Zm9yKHY9bmV3IG5yKCghdC5hJiYodC5hPW5ldyBmZShycyx0LDEwLDExKSksdC5hKSk7di5lIT12LmkuZ2MoKTspZm9yKGQ9dShkcih2KSwzMykscz1uZXcgYXIobHIoSzAoZCkuYS5LYygpLG5ldyB6KSk7enIocyk7KXtpZihyPXUoTXIocyksNzkpLCFyLmImJihyLmI9bmV3IENuKGJyLHIsNCw3KSksIShyLmIuaTw9MSYmKCFyLmMmJihyLmM9bmV3IENuKGJyLHIsNSw4KSksci5jLmk8PTEpKSl0aHJvdyBpdChuZXcgakMoIkdyYXBoIG11c3Qgbm90IGNvbnRhaW4gaHlwZXJlZGdlcy4iKSk7aWYoIXdfKHIpJiZkIT1Ebyh1KEF0KCghci5jJiYoci5jPW5ldyBDbihicixyLDUsOCkpLHIuYyksMCksODIpKSlmb3Ioaz1uZXcgZVl0LE1vKGssciksSnQoaywoWXAoKSxJNiksciksTHR0KGssdShlYyhMbyhuLmYsZCkpLDE0NCkpLHcxKGssdSh0cihuLERvKHUoQXQoKCFyLmMmJihyLmM9bmV3IENuKGJyLHIsNSw4KSksci5jKSwwKSw4MikpKSwxNDQpKSxsZShlLmMsayksaD1uZXcgbnIoKCFyLm4mJihyLm49bmV3IGZlKHFvLHIsMSw3KSksci5uKSk7aC5lIT1oLmkuZ2MoKTspbz11KGRyKGgpLDEzNyksQz1uZXcgaUp0KGssby5hKSxNbyhDLG8pLEp0KEMsSTYsbyksQy5lLmE9Yi5NYXRoLm1heChvLmcsMSksQy5lLmI9Yi5NYXRoLm1heChvLmYsMSksZHh0KEMpLGxlKGUuZCxDKX19ZnVuY3Rpb24gbzVuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdDtmb3IoTT1uZXcgU3h0KHQpLHNpbihNLCEoZT09KGFvKCkscmcpfHxlPT1uZykpLEM9TS5hLGo9bmV3IEN4LHM9KEtmKCksbHQoY3QoT3ksMSksb2UsMjMyLDAsW3NjLGV1LGFjXSkpLGg9MCx2PXMubGVuZ3RoO2g8djsrK2gpbj1zW2hdLGs9aG50KEMsc2MsbiksayYmKGouZD1iLk1hdGgubWF4KGouZCxrLlJlKCkpKTtmb3Iocj1sdChjdChPeSwxKSxvZSwyMzIsMCxbc2MsZXUsYWNdKSxvPTAsZD1yLmxlbmd0aDtvPGQ7KytvKW49cltvXSxrPWhudChDLGFjLG4pLGsmJihqLmE9Yi5NYXRoLm1heChqLmEsay5SZSgpKSk7Zm9yKEs9bHQoY3QoT3ksMSksb2UsMjMyLDAsW3NjLGV1LGFjXSksZ3Q9MCxTdD1LLmxlbmd0aDtndDxTdDsrK2d0KUg9S1tndF0saz1obnQoQyxILHNjKSxrJiYoai5iPWIuTWF0aC5tYXgoai5iLGsuU2UoKSkpO2ZvcihHPWx0KGN0KE95LDEpLG9lLDIzMiwwLFtzYyxldSxhY10pLHR0PTAsTXQ9Ry5sZW5ndGg7dHQ8TXQ7Kyt0dClIPUdbdHRdLGs9aG50KEMsSCxhYyksayYmKGouYz1iLk1hdGgubWF4KGouYyxrLlNlKCkpKTtyZXR1cm4gai5kPjAmJihqLmQrPUMubi5kLGouZCs9Qy5kKSxqLmE+MCYmKGouYSs9Qy5uLmEsai5hKz1DLmQpLGouYj4wJiYoai5iKz1DLm4uYixqLmIrPUMuZCksai5jPjAmJihqLmMrPUMubi5jLGouYys9Qy5kKSxqfWZ1bmN0aW9uIENoZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHO2ZvcihqPW4uZCxNPW4uYyxvPW5ldyAkZShuLmYuYStuLmQuYituLmQuYyxuLmYuYituLmQuZCtuLmQuYSksaD1vLmIsaz1uZXcgUyh0LmEpO2suYTxrLmMuYy5sZW5ndGg7KWlmKGQ9dShKKGspLDEwKSxkLms9PShWbigpLGtzKSl7c3dpdGNoKHI9dShRKGQsKGFlKCksb2MpKSw2MSkscz11KFEoZCxpQ3QpLDgpLEM9ZC5uLHIuZyl7Y2FzZSAyOkMuYT1uLmYuYStqLmMtTS5hO2JyZWFrO2Nhc2UgNDpDLmE9LU0uYS1qLmJ9c3dpdGNoKEc9MCxyLmcpe2Nhc2UgMjpjYXNlIDQ6ZT09KHVhKCksZzApPyhIPVh0KHllKFEoZCxGdikpKSxDLmI9by5iKkgtdShRKGQsKFRlKCksUnYpKSw4KS5iLEc9Qy5iK3MuYixFeihkLCExLCEwKSk6ZT09R2MmJihDLmI9WHQoeWUoUShkLEZ2KSkpLXUoUShkLChUZSgpLFJ2KSksOCkuYixHPUMuYitzLmIsRXooZCwhMSwhMCkpfWg9Yi5NYXRoLm1heChoLEcpfWZvcihuLmYuYis9aC1vLmIsdj1uZXcgUyh0LmEpO3YuYTx2LmMuYy5sZW5ndGg7KWlmKGQ9dShKKHYpLDEwKSxkLms9PShWbigpLGtzKSlzd2l0Y2gocj11KFEoZCwoYWUoKSxvYykpLDYxKSxDPWQubixyLmcpe2Nhc2UgMTpDLmI9LU0uYi1qLmQ7YnJlYWs7Y2FzZSAzOkMuYj1uLmYuYitqLmEtTS5ifX1mdW5jdGlvbiBjNW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlO2ZvcihzPXUoUSh0LChmYygpLHFTKSksMzMpLGs9d2ksQz13aSxkPVNhLHY9U2EsdWU9ZWkodC5iLDApO3VlLmIhPXVlLmQuYzspUnQ9dSh0aSh1ZSksODYpLEs9UnQuZSx0dD1SdC5mLGs9Yi5NYXRoLm1pbihrLEsuYS10dC5hLzIpLEM9Yi5NYXRoLm1pbihDLEsuYi10dC5iLzIpLGQ9Yi5NYXRoLm1heChkLEsuYSt0dC5hLzIpLHY9Yi5NYXRoLm1heCh2LEsuYit0dC5iLzIpO2ZvcihHPXUocWUocywoZ3YoKSxUeWUpKSwxMTYpLEg9bmV3ICRlKEcuYi1rLEcuZC1DKSxLdD1laSh0LmIsMCk7S3QuYiE9S3QuZC5jOylSdD11KHRpKEt0KSw4Niksaj1RKFJ0LHFTKSxfdChqLDIzOSkmJihvPXUoaiwzMyksTT1MaShSdC5lLEgpLHgxKG8sTS5hLW8uZy8yLE0uYi1vLmYvMikpO2ZvcihTdD1laSh0LmEsMCk7U3QuYiE9U3QuZC5jOylNdD11KHRpKFN0KSwxODgpLHI9dShRKE10LHFTKSw3OSksciYmKGU9TXQuYSxndD1uZXcgeG8oTXQuYi5lKSxmcyhlLGd0LGUuYSxlLmEuYSksX2U9bmV3IHhvKE10LmMuZSksZnMoZSxfZSxlLmMuYixlLmMpLFVhZShndCx1KFpmKGUsMSksOCksTXQuYi5mKSxVYWUoX2UsdShaZihlLGUuYi0yKSw4KSxNdC5jLmYpLG49eDQociwhMCwhMCksQ0koZSxuKSk7V2U9ZC1rKyhHLmIrRy5jKSxoPXYtQysoRy5kK0cuYSksd3YocyxXZSxoLCExLCExKX1mdW5jdGlvbiB1NW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0O2ZvcihNPXQuYixDPW5ldyBkYShNLDApLHptKEMsbmV3IFNoKHQpKSxNdD0hMSxoPTE7Qy5iPEMuZC5nYygpOyl7Zm9yKGs9KFpuKEMuYjxDLmQuZ2MoKSksdShDLmQuWGIoQy5jPUMuYisrKSwyOSkpLEs9KEFuKGgsTS5jLmxlbmd0aCksdShNLmNbaF0sMjkpKSx0dD1XdyhrLmEpLGd0PXR0LmMubGVuZ3RoLEc9bmV3IFModHQpO0cuYTxHLmMuYy5sZW5ndGg7KWo9dShKKEcpLDEwKSxFbyhqLEspO2lmKE10KXtmb3IoSD1ZdnQobmV3IGt3KHR0KSwwKTtILmMuU2IoKTspZm9yKGo9dShESnQoSCksMTApLG89bmV3IFMoV3coam8oaikpKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxNyksYnYocywhMCksSnQodCwoYWUoKSxfTyksKE5uKCksITApKSxyPW5oZSh0LHMsZ3QpLG49dShRKGosSXYpLDMwNSksU3Q9dShOZShyLHIuYy5sZW5ndGgtMSksMTcpLG4uaz1TdC5jLmksbi5uPVN0LG4uYj1zLmQuaSxuLmM9cztNdD0hMX1lbHNlIHR0LmMubGVuZ3RoIT0wJiYoZT0oQW4oMCx0dC5jLmxlbmd0aCksdSh0dC5jWzBdLDEwKSksZS5rPT0oVm4oKSx6MSkmJihNdD0hMCxoPS0xKSk7KytofWZvcihkPW5ldyBkYSh0LmIsMCk7ZC5iPGQuZC5nYygpOyl2PShabihkLmI8ZC5kLmdjKCkpLHUoZC5kLlhiKGQuYz1kLmIrKyksMjkpKSx2LmEuYy5sZW5ndGg9PTAmJkNsKGQpfWZ1bmN0aW9uIGw1bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3Q7aWYoQz11KHUoQWkodC5yLGUpLDIxKSw4NCksQy5nYygpPD0yfHxlPT0odmUoKSxIbil8fGU9PSh2ZSgpLEJuKSl7R2hlKHQsZSk7cmV0dXJufWZvcihLPXQudS5IYygoWnUoKSxRNikpLG49ZT09KHZlKCksUG4pPyhydigpLGhPKToocnYoKSxsTyksZ3Q9ZT09UG4/KHl1KCksRWYpOih5dSgpLG4xKSxyPWNidChfd3QobiksdC5zKSx0dD1lPT1Qbj9hczpDcyxrPUMuS2MoKTtrLk9iKCk7KWQ9dShrLlBiKCksMTExKSwhKCFkLmN8fGQuYy5kLmMubGVuZ3RoPD0wKSYmKEc9ZC5iLnJmKCksSD1kLmUsTT1kLmMsaj1NLmksai5iPShvPU0ubixNLmUuYStvLmIrby5jKSxqLmE9KGg9TS5uLE0uZS5iK2guZCtoLmEpLEs/KGouYz1ILmEtKHM9TS5uLE0uZS5hK3MuYitzLmMpLXQucyxLPSExKTpqLmM9SC5hK0cuYSt0LnMsc0QoZ3QsbjZ0KSxNLmY9Z3QsV2YoTSwoUXUoKSxrZikpLGxlKHIuZCxuZXcgSG50KGosYTN0KHIsaikpKSx0dD1lPT1Qbj9iLk1hdGgubWluKHR0LEguYik6Yi5NYXRoLm1heCh0dCxILmIrZC5iLnJmKCkuYikpO2Zvcih0dCs9ZT09UG4/LXQudDp0LnQsazN0KChyLmU9dHQscikpLHY9Qy5LYygpO3YuT2IoKTspZD11KHYuUGIoKSwxMTEpLCEoIWQuY3x8ZC5jLmQuYy5sZW5ndGg8PTApJiYoaj1kLmMuaSxqLmMtPWQuZS5hLGouZC09ZC5lLmIpfWZ1bmN0aW9uIGg1bih0LGUsbil7dmFyIHI7aWYodnIobiwiU3RyZXRjaFdpZHRoIGxheWVyaW5nIiwxKSxlLmEuYy5sZW5ndGg9PTApe29yKG4pO3JldHVybn1mb3IodC5jPWUsdC50PTAsdC51PTAsdC5pPWFzLHQuZz1Dcyx0LmQ9WHQoeWUoUShlLChUZSgpLFRmKSkpKSx6Zm4odCksSGJuKHQpLHFibih0KSxVZG4odCksWWhuKHQpLHQuaT1iLk1hdGgubWF4KDEsdC5pKSx0Lmc9Yi5NYXRoLm1heCgxLHQuZyksdC5kPXQuZC90LmksdC5mPXQuZy90LmksdC5zPW4xbih0KSxyPW5ldyBTaCh0LmMpLGxlKHQuYy5iLHIpLHQucj1Xdyh0LnApLHQubj14JCh0LmssdC5rLmxlbmd0aCk7dC5yLmMubGVuZ3RoIT0wOyl0Lm89YmxuKHQpLCF0Lm98fG1yZSh0KSYmdC5iLmEuZ2MoKSE9MD8odzBuKHQscikscj1uZXcgU2godC5jKSxsZSh0LmMuYixyKSxVYSh0LmEsdC5iKSx0LmIuYS4kYigpLHQudD10LnUsdC51PTApOm1yZSh0KT8odC5jLmIuYz1OdChRbixEZSwxLDAsNSwxKSxyPW5ldyBTaCh0LmMpLGxlKHQuYy5iLHIpLHQudD0wLHQudT0wLHQuYi5hLiRiKCksdC5hLmEuJGIoKSwrK3QuZix0LnI9V3codC5wKSx0Lm49eCQodC5rLHQuay5sZW5ndGgpKTooRW8odC5vLHIpLG11KHQucix0Lm8pLEZzKHQuYix0Lm8pLHQudD10LnQtdC5rW3Quby5wXSp0LmQrdC5qW3Quby5wXSx0LnUrPXQuZVt0Lm8ucF0qdC5kKTtlLmEuYz1OdChRbixEZSwxLDAsNSwxKSxZc3QoZS5iKSxvcihuKX1mdW5jdGlvbiBmNW4odCl7dmFyIGUsbixyLHM7Zm9yKGxzKFJpKG5ldyBUbihudWxsLG5ldyBfbih0LmEuYiwxNikpLG5ldyBBWCksbmV3IExYKSxpMG4odCksbHMoUmkobmV3IFRuKG51bGwsbmV3IF9uKHQuYS5iLDE2KSksbmV3IE1YKSxuZXcgRFgpLHQuYz09KFcwKCksWDYpJiYobHMoUmkoV28obmV3IFRuKG51bGwsbmV3IF9uKG5ldyBTbSh0LmYpLDEpKSxuZXcgSVgpLG5ldyBPWCksbmV3IEh0dCh0KSksbHMoUmkod3UoV28oV28obmV3IFRuKG51bGwsbmV3IF9uKHQuZC5iLDE2KSksbmV3IElOKSxuZXcgUFgpLG5ldyBPTiksbmV3IEZYKSxuZXcgR3R0KHQpKSkscz1uZXcgJGUoYXMsYXMpLGU9bmV3ICRlKENzLENzKSxyPW5ldyBTKHQuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw1Nykscy5hPWIuTWF0aC5taW4ocy5hLG4uZC5jKSxzLmI9Yi5NYXRoLm1pbihzLmIsbi5kLmQpLGUuYT1iLk1hdGgubWF4KGUuYSxuLmQuYytuLmQuYiksZS5iPWIuTWF0aC5tYXgoZS5iLG4uZC5kK24uZC5hKTtMaShHZih0LmQuYyksTWoobmV3ICRlKHMuYSxzLmIpKSksTGkoR2YodC5kLmYpLGlhKG5ldyAkZShlLmEsZS5iKSxzKSksZ3duKHQscyxlKSxYdSh0LmYpLFh1KHQuYiksWHUodC5nKSxYdSh0LmUpLHQuYS5hLmM9TnQoUW4sRGUsMSwwLDUsMSksdC5hLmIuYz1OdChRbixEZSwxLDAsNSwxKSx0LmE9bnVsbCx0LmQ9bnVsbH1mdW5jdGlvbiBfaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0O2ZvcihzPW5ldyBoZSxLPW5ldyBTKGUuYSk7Sy5hPEsuYy5jLmxlbmd0aDspaWYoRz11KEooSyksMTApLEg9Ry5lLEgmJihyPV9oZSh0LEgsRyksTHMocyxyKSxfNG4odCxILEcpLHUoUShILChhZSgpLFZjKSksMjEpLkhjKChvbygpLHZoKSkpKWZvcihNdD11KFEoRywoVGUoKSxjcykpLDk4KSxqPXUoUShHLEd5KSwxNzQpLkhjKChadSgpLHNnKSksZ3Q9bmV3IFMoRy5qKTtndC5hPGd0LmMuYy5sZW5ndGg7KWZvcih0dD11KEooZ3QpLDExKSxvPXUodHIodC5iLHR0KSwxMCksb3x8KG89TEkodHQsTXQsdHQuaiwtKHR0LmUuYy5sZW5ndGgtdHQuZy5jLmxlbmd0aCksbnVsbCxuZXcgQ2EsdHQubyx1KFEoSCxXbCksMTAzKSxIKSxKdChvLF9pLHR0KSxraSh0LmIsdHQsbyksbGUoSC5hLG8pKSxoPXUoTmUoby5qLDApLDExKSxDPW5ldyBTKHR0LmYpO0MuYTxDLmMuYy5sZW5ndGg7KWs9dShKKEMpLDcwKSxkPW5ldyBDSHQsZC5vLmE9ay5vLmEsZC5vLmI9ay5vLmIsbGUoaC5mLGQpLGp8fChTdD10dC5qLE09MCxTOSh1KFEoRyxHeSksMjEpKSYmKE09bzV0KGsubixrLm8sdHQubywwLFN0KSksTXQ9PSh1YSgpLEcxKXx8KHZlKCksbHUpLkhjKFN0KT9kLm8uYT1NOmQuby5iPU0pO3JldHVybiB2PW5ldyBoZSxCNG4odCxlLG4scyx2KSxuJiZKM24odCxlLG4sdiksdn1mdW5jdGlvbiBfeHQodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTTtpZighdC5jW2UuYy5wXVtlLnBdLmUpe2Zvcih0LmNbZS5jLnBdW2UucF0uZT0hMCx0LmNbZS5jLnBdW2UucF0uYj0wLHQuY1tlLmMucF1bZS5wXS5kPTAsdC5jW2UuYy5wXVtlLnBdLmE9bnVsbCxDPW5ldyBTKGUuaik7Qy5hPEMuYy5jLmxlbmd0aDspZm9yKGs9dShKKEMpLDExKSxNPW4/bmV3IFFzKGspOm5ldyBUcihrKSx2PU0uS2MoKTt2Lk9iKCk7KWQ9dSh2LlBiKCksMTEpLGg9ZC5pLGguYz09ZS5jP2ghPWUmJihfeHQodCxoLG4pLHQuY1tlLmMucF1bZS5wXS5iKz10LmNbaC5jLnBdW2gucF0uYix0LmNbZS5jLnBdW2UucF0uZCs9dC5jW2guYy5wXVtoLnBdLmQpOih0LmNbZS5jLnBdW2UucF0uZCs9dC5nW2QucF0sKyt0LmNbZS5jLnBdW2UucF0uYik7aWYobz11KFEoZSwoYWUoKSx0Q3QpKSwxNSksbylmb3Iocz1vLktjKCk7cy5PYigpOylyPXUocy5QYigpLDEwKSxlLmM9PXIuYyYmKF94dCh0LHIsbiksdC5jW2UuYy5wXVtlLnBdLmIrPXQuY1tyLmMucF1bci5wXS5iLHQuY1tlLmMucF1bZS5wXS5kKz10LmNbci5jLnBdW3IucF0uZCk7dC5jW2UuYy5wXVtlLnBdLmI+MCYmKHQuY1tlLmMucF1bZS5wXS5kKz11bCh0LmksMjQpKiRJKi4wNzAwMDAwMDAyOTgwMjMyMi0uMDM1MDAwMDAwMTQ5MDExNjEsdC5jW2UuYy5wXVtlLnBdLmE9dC5jW2UuYy5wXVtlLnBdLmQvdC5jW2UuYy5wXVtlLnBdLmIpfX1mdW5jdGlvbiBkNW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0O2ZvcihHPW5ldyBTKHQpO0cuYTxHLmMuYy5sZW5ndGg7KXtmb3IoSD11KEooRyksMTApLERnKEgubiksRGcoSC5vKSxTbXQoSC5mKSxxdWUoSCksVnZuKEgpLHR0PW5ldyBTKEguaik7dHQuYTx0dC5jLmMubGVuZ3RoOyl7Zm9yKEs9dShKKHR0KSwxMSksRGcoSy5uKSxEZyhLLmEpLERnKEsubyksQnMoSyxBc2UoSy5qKSksbz11KFEoSywoVGUoKSx0cCkpLDE5KSxvJiZKdChLLHRwLHBlKC1vLmEpKSxzPW5ldyBTKEsuZyk7cy5hPHMuYy5jLmxlbmd0aDspe2ZvcihyPXUoSihzKSwxNyksbj1laShyLmEsMCk7bi5iIT1uLmQuYzspZT11KHRpKG4pLDgpLERnKGUpO2lmKHY9dShRKHIsU28pLDc0KSx2KWZvcihkPWVpKHYsMCk7ZC5iIT1kLmQuYzspaD11KHRpKGQpLDgpLERnKGgpO2ZvcihNPW5ldyBTKHIuYik7TS5hPE0uYy5jLmxlbmd0aDspaz11KEooTSksNzApLERnKGsubiksRGcoay5vKX1mb3Ioaj1uZXcgUyhLLmYpO2ouYTxqLmMuYy5sZW5ndGg7KWs9dShKKGopLDcwKSxEZyhrLm4pLERnKGsubyl9Zm9yKEguaz09KFZuKCksa3MpJiYoSnQoSCwoYWUoKSxvYyksQXNlKHUoUShILG9jKSw2MSkpKSx0dm4oSCkpLEM9bmV3IFMoSC5iKTtDLmE8Qy5jLmMubGVuZ3RoOylrPXUoSihDKSw3MCkscXVlKGspLERnKGsubyksRGcoay5uKX19ZnVuY3Rpb24gZzVuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZTtmb3IodC5lPWUsZD1nYm4oZSksdWU9bmV3IGhlLHI9bmV3IFMoZCk7ci5hPHIuYy5jLmxlbmd0aDspe2ZvcihuPXUoSihyKSwxNSksX2U9bmV3IGhlLHVlLmNbdWUuYy5sZW5ndGhdPV9lLHY9bmV3IEhzLEc9bi5LYygpO0cuT2IoKTspe2ZvcihIPXUoRy5QYigpLDMzKSxvPXhJKHQsSCwhMCwwLDApLF9lLmNbX2UuYy5sZW5ndGhdPW8sSz1ILmksdHQ9SC5qLGo9KCFILm4mJihILm49bmV3IGZlKHFvLEgsMSw3KSksSC5uKSxNPW5ldyBucihqKTtNLmUhPU0uaS5nYygpOylrPXUoZHIoTSksMTM3KSxzPXhJKHQsaywhMSxLLHR0KSxfZS5jW19lLmMubGVuZ3RoXT1zO2ZvcihLdD0oIUguYyYmKEguYz1uZXcgZmUoZ2wsSCw5LDkpKSxILmMpLE10PW5ldyBucihLdCk7TXQuZSE9TXQuaS5nYygpOylmb3IoZ3Q9dShkcihNdCksMTE4KSxoPXhJKHQsZ3QsITEsSyx0dCksX2UuY1tfZS5jLmxlbmd0aF09aCxTdD1ndC5pK0ssUnQ9Z3Quait0dCxqPSghZ3QubiYmKGd0Lm49bmV3IGZlKHFvLGd0LDEsNykpLGd0Lm4pLEM9bmV3IG5yKGopO0MuZSE9Qy5pLmdjKCk7KWs9dShkcihDKSwxMzcpLHM9eEkodCxrLCExLFN0LFJ0KSxfZS5jW19lLmMubGVuZ3RoXT1zO1VhKHYsYiQoRDEobHQoY3QoajEsMSksRGUsMjAsMCxbSzAoSCksd0koSCldKSkpKX1pd24odCx2LF9lKX1yZXR1cm4gdC5mPW5ldyBrSHQodWUpLE1vKHQuZixlKSx0LmZ9ZnVuY3Rpb24gcDVuKHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZSxXZSxRZSxSbix6bixocjtSbj10cih0LmUsciksUm49PW51bGwmJihSbj1uZXcgX3gsSD11KFJuLDE4MyksTXQ9ZSsiX3MiLFN0PU10K3Msaj1uZXcgVW0oU3QpLFlmKEgsQWQsaikpLFFlPXUoUm4sMTgzKSxWeChuLFFlKSxocj1uZXcgX3gscjIoaHIsIngiLHIuaikscjIoaHIsInkiLHIuayksWWYoUWUsSGRlLGhyKSxfZT1uZXcgX3gscjIoX2UsIngiLHIuYikscjIoX2UsInkiLHIuYyksWWYoUWUsImVuZFBvaW50IixfZSksTT13TSgoIXIuYSYmKHIuYT1uZXcgQXMoR2gsciw1KSksci5hKSksRz0hTSxHJiYodWU9bmV3IEVnLG89bmV3IEF6dCh1ZSksdmEoKCFyLmEmJihyLmE9bmV3IEFzKEdoLHIsNSkpLHIuYSksbyksWWYoUWUsTEgsdWUpKSx2PWJzdChyKSxSdD0hIXYsUnQmJlA0dCh0LmEsUWUsQzh0LFdzdCh0LGJzdChyKSkpLGd0PXdzdChyKSxLdD0hIWd0LEt0JiZQNHQodC5hLFFlLFQ4dCxXc3QodCx3c3QocikpKSxrPSghci5lJiYoci5lPW5ldyBDbihKaSxyLDEwLDkpKSxyLmUpLmk9PTAsSz0hayxLJiYoV2U9bmV3IEVnLGg9bmV3IFlHdCh0LFdlKSx2YSgoIXIuZSYmKHIuZT1uZXcgQ24oSmksciwxMCw5KSksci5lKSxoKSxZZihRZSxTOHQsV2UpKSxDPSghci5nJiYoci5nPW5ldyBDbihKaSxyLDksMTApKSxyLmcpLmk9PTAsdHQ9IUMsdHQmJih6bj1uZXcgRWcsZD1uZXcgS0d0KHQsem4pLHZhKCghci5nJiYoci5nPW5ldyBDbihKaSxyLDksMTApKSxyLmcpLGQpLFlmKFFlLF84dCx6bikpfWZ1bmN0aW9uIGI1bih0KXskbSgpO3ZhciBlLG4scixzLG8saCxkO2ZvcihyPXQuZi5uLGg9eHZ0KHQucikuYS5uYygpO2guT2IoKTspe2lmKG89dShoLlBiKCksMTExKSxzPTAsby5iLlhlKCh1aSgpLGRsKSkmJihzPVh0KHllKG8uYi5XZShkbCkpKSxzPDApKXN3aXRjaChvLmIuSGYoKS5nKXtjYXNlIDE6ci5kPWIuTWF0aC5tYXgoci5kLC1zKTticmVhaztjYXNlIDM6ci5hPWIuTWF0aC5tYXgoci5hLC1zKTticmVhaztjYXNlIDI6ci5jPWIuTWF0aC5tYXgoci5jLC1zKTticmVhaztjYXNlIDQ6ci5iPWIuTWF0aC5tYXgoci5iLC1zKX1pZihTOSh0LnUpKXN3aXRjaChlPSRjbihvLmIscyksZD0hdSh0LmUuV2UoeGIpLDE3NCkuSGMoKGxsKCksY1ApKSxuPSExLG8uYi5IZigpLmcpe2Nhc2UgMTpuPWU+ci5kLHIuZD1iLk1hdGgubWF4KHIuZCxlKSxkJiZuJiYoci5kPWIuTWF0aC5tYXgoci5kLHIuYSksci5hPXIuZCtzKTticmVhaztjYXNlIDM6bj1lPnIuYSxyLmE9Yi5NYXRoLm1heChyLmEsZSksZCYmbiYmKHIuYT1iLk1hdGgubWF4KHIuYSxyLmQpLHIuZD1yLmErcyk7YnJlYWs7Y2FzZSAyOm49ZT5yLmMsci5jPWIuTWF0aC5tYXgoci5jLGUpLGQmJm4mJihyLmM9Yi5NYXRoLm1heChyLmIsci5jKSxyLmI9ci5jK3MpO2JyZWFrO2Nhc2UgNDpuPWU+ci5iLHIuYj1iLk1hdGgubWF4KHIuYixlKSxkJiZuJiYoci5iPWIuTWF0aC5tYXgoci5iLHIuYyksci5jPXIuYitzKX19fWZ1bmN0aW9uIHc1bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNO2ZvcihrPW5ldyBTKHQpO2suYTxrLmMuYy5sZW5ndGg7KXtzd2l0Y2godj11KEooayksMTApLGg9dShRKHYsKFRlKCksdXUpKSwxNjMpLG89bnVsbCxoLmcpe2Nhc2UgMTpjYXNlIDI6bz0oZDIoKSxVNCk7YnJlYWs7Y2FzZSAzOmNhc2UgNDpvPShkMigpLHc3KX1pZihvKUp0KHYsKGFlKCksdEcpLChkMigpLFU0KSksbz09dzc/eHEodixoLChzbygpLHRsKSk6bz09VTQmJnhxKHYsaCwoc28oKSxudSkpO2Vsc2UgaWYoRzModShRKHYsY3MpLDk4KSkmJnYuai5jLmxlbmd0aCE9MCl7Zm9yKGU9ITAsTT1uZXcgUyh2LmopO00uYTxNLmMuYy5sZW5ndGg7KXtpZihDPXUoSihNKSwxMSksIShDLmo9PSh2ZSgpLEhuKSYmQy5lLmMubGVuZ3RoLUMuZy5jLmxlbmd0aD4wfHxDLmo9PUJuJiZDLmUuYy5sZW5ndGgtQy5nLmMubGVuZ3RoPDApKXtlPSExO2JyZWFrfWZvcihzPW5ldyBTKEMuZyk7cy5hPHMuYy5jLmxlbmd0aDspaWYobj11KEoocyksMTcpLGQ9dShRKG4uZC5pLHV1KSwxNjMpLGQ9PShkaCgpLFRTKXx8ZD09ankpe2U9ITE7YnJlYWt9Zm9yKHI9bmV3IFMoQy5lKTtyLmE8ci5jLmMubGVuZ3RoOylpZihuPXUoSihyKSwxNyksZD11KFEobi5jLmksdXUpLDE2MyksZD09KGRoKCksRVMpfHxkPT1iYil7ZT0hMTticmVha319ZSYmeHEodixoLChzbygpLE9TKSl9fX1mdW5jdGlvbiB2NW4odCxlLG4scixzKXt2YXIgbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlO2Zvcih1ZT0wLEg9MCxNPW5ldyBTKGUuZSk7TS5hPE0uYy5jLmxlbmd0aDspe2ZvcihDPXUoSihNKSwxMCksaj0wLGQ9MCx2PW4/dShRKEMsX0cpLDE5KS5hOlNhLGd0PXI/dShRKEMsU0cpLDE5KS5hOlNhLGs9Yi5NYXRoLm1heCh2LGd0KSxTdD1uZXcgUyhDLmopO1N0LmE8U3QuYy5jLmxlbmd0aDspe2lmKE10PXUoSihTdCksMTEpLFJ0PUMubi5iK010Lm4uYitNdC5hLmIscilmb3IoaD1uZXcgUyhNdC5nKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxNyksSz1vLmQsRz1LLmksZSE9dC5hW0cucF0mJih0dD1iLk1hdGgubWF4KHUoUShHLF9HKSwxOSkuYSx1KFEoRyxTRyksMTkpLmEpLEt0PXUoUShvLChUZSgpLEg2KSksMTkpLmEsS3Q+PWsmJkt0Pj10dCYmKGorPUcubi5iK0subi5iK0suYS5iLVJ0LCsrZCkpO2lmKG4pZm9yKGg9bmV3IFMoTXQuZSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTcpLEs9by5jLEc9Sy5pLGUhPXQuYVtHLnBdJiYodHQ9Yi5NYXRoLm1heCh1KFEoRyxfRyksMTkpLmEsdShRKEcsU0cpLDE5KS5hKSxLdD11KFEobywoVGUoKSxINikpLDE5KS5hLEt0Pj1rJiZLdD49dHQmJihqKz1HLm4uYitLLm4uYitLLmEuYi1SdCwrK2QpKX1kPjAmJih1ZSs9ai9kLCsrSCl9SD4wPyhlLmE9cyp1ZS9ILGUuZz1IKTooZS5hPTAsZS5nPTApfWZ1bmN0aW9uIG01bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGo7Zm9yKHM9bmV3IFModC5hLmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihuPXUoSihzKSwyOSksdj1uZXcgUyhuLmEpO3YuYTx2LmMuYy5sZW5ndGg7KWQ9dShKKHYpLDEwKSxlLmpbZC5wXT1kLGUuaVtkLnBdPWUubz09KEMxKCksSDEpP0NzOmFzO2ZvcihYdSh0LmMpLGg9dC5hLmIsZS5jPT0oYmQoKSxlcCkmJihoPV90KGgsMTUyKT9aeCh1KGgsMTUyKSk6X3QoaCwxMzEpP3UoaCwxMzEpLmE6X3QoaCw1NCk/bmV3IGt3KGgpOm5ldyBPbShoKSksZm9uKHQuZSxlLHQuYiksQ00oZS5wLG51bGwpLG89aC5LYygpO28uT2IoKTspZm9yKG49dShvLlBiKCksMjkpLGs9bi5hLGUubz09KEMxKCksSDEpJiYoaz1fdChrLDE1Mik/WngodShrLDE1MikpOl90KGssMTMxKT91KGssMTMxKS5hOl90KGssNTQpP25ldyBrdyhrKTpuZXcgT20oaykpLGo9ay5LYygpO2ouT2IoKTspTT11KGouUGIoKSwxMCksZS5nW00ucF09PU0mJldoZSh0LE0sZSk7Zm9yKGM0bih0LGUpLHI9aC5LYygpO3IuT2IoKTspZm9yKG49dShyLlBiKCksMjkpLGo9bmV3IFMobi5hKTtqLmE8ai5jLmMubGVuZ3RoOylNPXUoSihqKSwxMCksZS5wW00ucF09ZS5wW2UuZ1tNLnBdLnBdLE09PWUuZ1tNLnBdJiYoQz1YdChlLmlbZS5qW00ucF0ucF0pLChlLm89PShDMSgpLEgxKSYmQz5Dc3x8ZS5vPT1IMiYmQzxhcykmJihlLnBbTS5wXT1YdChlLnBbTS5wXSkrQykpO3QuZS5jZygpfWZ1bmN0aW9uIFNoZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx2O3JldHVybiBkPW5ldyBTeHQoZSkseXduKGQscikscz0hMCx0JiZ0LlhlKCh1aSgpLHF2KSkmJihvPXUodC5XZSgodWkoKSxxdikpLDEwMykscz1vPT0oYW8oKSxoMCl8fG89PXpofHxvPT1DZiksRHVlKGQsITEpLHh1KGQuZS53ZigpLG5ldyBFd3QoZCwhMSxzKSksRXJ0KGQsZC5mLChLZigpLHNjKSwodmUoKSxQbikpLEVydChkLGQuZixhYyxtciksRXJ0KGQsZC5nLHNjLEJuKSxFcnQoZCxkLmcsYWMsSG4pLHBzZShkLFBuKSxwc2UoZCxtciksUFh0KGQsSG4pLFBYdChkLEJuKSwkbSgpLGg9ZC5BLkhjKChBbCgpLEp5KSkmJmQuQi5IYygobGwoKSx1UCkpP1NpZShkKTpudWxsLGgmJnpLZShkLmEsaCksYjVuKGQpLEkxbihkKSxPMW4oZCksejRuKGQpLHltbihkKSxzZG4oZCksY3N0KGQsUG4pLGNzdChkLG1yKSxKdm4oZCksbTNuKGQpLG4mJih3aG4oZCksYWRuKGQpLGNzdChkLEhuKSxjc3QoZCxCbiksdj1kLkIuSGMoKGxsKCksaUEpKSxfb2UoZCx2LFBuKSxfb2UoZCx2LG1yKSxTb2UoZCx2LEhuKSxTb2UoZCx2LEJuKSxscyhuZXcgVG4obnVsbCxuZXcgX24obmV3IHYxKGQuaSksMCkpLG5ldyBwYSksbHMoUmkobmV3IFRuKG51bGwseHZ0KGQucikuYS5vYygpKSxuZXcgRGEpLG5ldyBIYSkseDBuKGQpLGQuZS51ZihkLm8pLGxzKG5ldyBUbihudWxsLHh2dChkLnIpLmEub2MoKSksbmV3IF9jKSksZC5vfWZ1bmN0aW9uIHk1bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEs7Zm9yKGs9YXMscj1uZXcgUyh0LmEuYik7ci5hPHIuYy5jLmxlbmd0aDspZT11KEoociksODEpLGs9Yi5NYXRoLm1pbihrLGUuZC5mLmcuYytlLmUuYSk7Zm9yKEg9bmV3IFppLGg9bmV3IFModC5hLmEpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDE4OSksby5pPWssby5lPT0wJiZmcyhILG8sSC5jLmIsSC5jKTtmb3IoO0guYiE9MDspe2ZvcihvPXUoSC5iPT0wP251bGw6KFpuKEguYiE9MCksbGgoSCxILmEuYSkpLDE4OSkscz1vLmYuZy5jLGo9by5hLmEuZWMoKS5LYygpO2ouT2IoKTspQz11KGouUGIoKSw4MSksSz1vLmkrQy5lLmEsQy5kLmd8fEMuZy5jPEs/Qy5vPUs6Qy5vPUMuZy5jO2ZvcihzLT1vLmYubyxvLmIrPXMsdC5jPT0oYW8oKSxDZil8fHQuYz09bmc/by5jKz1zOm8uYy09cyxNPW8uYS5hLmVjKCkuS2MoKTtNLk9iKCk7KWZvcihDPXUoTS5QYigpLDgxKSx2PUMuZi5LYygpO3YuT2IoKTspZD11KHYuUGIoKSw4MSksQnAodC5jKT9HPXQuZi5lZihDLGQpOkc9dC5mLmZmKEMsZCksZC5kLmk9Yi5NYXRoLm1heChkLmQuaSxDLm8rQy5nLmIrRy1kLmUuYSksZC5rfHwoZC5kLmk9Yi5NYXRoLm1heChkLmQuaSxkLmcuYy1kLmUuYSkpLC0tZC5kLmUsZC5kLmU9PTAmJnJpKEgsZC5kKX1mb3Iobj1uZXcgUyh0LmEuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksODEpLGUuZy5jPWUub31mdW5jdGlvbiB4NW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdjtzd2l0Y2goZD10LmIsZT10LmEsdShRKHQsKHNxKCksV0V0KSksNDI3KS5nKXtjYXNlIDA6WnMoZCxuZXcgZHQobmV3IEVpKSk7YnJlYWs7Y2FzZSAxOmRlZmF1bHQ6WnMoZCxuZXcgZHQobmV3IEpvKSl9c3dpdGNoKHUoUSh0LEdFdCksNDI4KS5nKXtjYXNlIDE6WnMoZCxuZXcga3IpLFpzKGQsbmV3IHdjKSxacyhkLG5ldyBuZCk7YnJlYWs7Y2FzZSAwOmRlZmF1bHQ6WnMoZCxuZXcga3IpLFpzKGQsbmV3IGNuKX1zd2l0Y2godShRKHQsS0V0KSwyNTApLmcpe2Nhc2UgMDp2PW5ldyBRaTticmVhaztjYXNlIDE6dj1uZXcgc2Y7YnJlYWs7Y2FzZSAyOnY9bmV3IGFmO2JyZWFrO2Nhc2UgMzp2PW5ldyBPYzticmVhaztjYXNlIDU6dj1uZXcgZnIobmV3IGFmKTticmVhaztjYXNlIDQ6dj1uZXcgZnIobmV3IHNmKTticmVhaztjYXNlIDc6dj1uZXcgTWJ0KG5ldyBmcihuZXcgc2YpLG5ldyBmcihuZXcgYWYpKTticmVhaztjYXNlIDg6dj1uZXcgTWJ0KG5ldyBmcihuZXcgT2MpLG5ldyBmcihuZXcgYWYpKTticmVhaztjYXNlIDY6ZGVmYXVsdDp2PW5ldyBmcihuZXcgT2MpfWZvcihoPW5ldyBTKGQpO2guYTxoLmMuYy5sZW5ndGg7KXtmb3Iobz11KEooaCksMTY3KSxyPTAscz0wLG49bmV3IGZhKHBlKHIpLHBlKHMpKTtheW4oZSxvLHIscyk7KW49dSh2LkNlKG4sbyksNDYpLHI9dShuLmEsMTkpLmEscz11KG4uYiwxOSkuYTtpbW4oZSxvLHIscyl9fWZ1bmN0aW9uIGs1bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2U7Zm9yKG89dC5mLmIsaj1vLmEsQz1vLmIsRz10LmUuZyxIPXQuZS5mLGJqKHQuZSxvLmEsby5iKSx1ZT1qL0csX2U9Qy9ILGs9bmV3IG5yKHUkKHQuZSkpO2suZSE9ay5pLmdjKCk7KXY9dShkcihrKSwxMzcpLGt1KHYsdi5pKnVlKSxFdSh2LHYuaipfZSk7Zm9yKE10PW5ldyBucih1cnQodC5lKSk7TXQuZSE9TXQuaS5nYygpOylndD11KGRyKE10KSwxMTgpLFJ0PWd0LmksS3Q9Z3QuaixSdD4wJiZrdShndCxSdCp1ZSksS3Q+MCYmRXUoZ3QsS3QqX2UpO2ZvcihLOSh0LmIsbmV3IGh3KSxlPW5ldyBoZSxkPW5ldyBwMihuZXcgQ2codC5jKS5hKTtkLmI7KWg9WncoZCkscj11KGguY2QoKSw3OSksbj11KGguZGQoKSwzOTUpLmEscz14NChyLCExLCExKSxNPV9hZShlMChyKSxsSShzKSxuKSxDSShNLHMpLFN0PVJhZShyKSxTdCYmUm8oZSxTdCwwKT09LTEmJihlLmNbZS5jLmxlbmd0aF09U3QsVlh0KFN0LChabihNLmIhPTApLHUoTS5hLmEuYyw4KSksbikpO2Zvcih0dD1uZXcgcDIobmV3IENnKHQuZCkuYSk7dHQuYjspSz1adyh0dCkscj11KEsuY2QoKSw3OSksbj11KEsuZGQoKSwzOTUpLmEscz14NChyLCExLCExKSxNPV9hZSh0YihyKSxxRChsSShzKSksbiksTT1xRChNKSxDSShNLHMpLFN0PWphZShyKSxTdCYmUm8oZSxTdCwwKT09LTEmJihlLmNbZS5jLmxlbmd0aF09U3QsVlh0KFN0LChabihNLmIhPTApLHUoTS5jLmIuYyw4KSksbikpfWZ1bmN0aW9uIEFoZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2U7aWYobi5jLmxlbmd0aCE9MCl7Zm9yKEg9bmV3IGhlLGo9bmV3IFMobik7ai5hPGouYy5jLmxlbmd0aDspTT11KEooaiksMzMpLGxlKEgsbmV3ICRlKE0uaSxNLmopKTtmb3Ioci5uJiZlJiZnZihyLHBmKGUpLChTbCgpLFFsKSk7UjR0KHQsbik7KWJxKHQsbiwhMSk7Zm9yKHIubiYmZSYmZ2YocixwZihlKSwoU2woKSxRbCkpLGg9MCxkPTAscz1udWxsLG4uYy5sZW5ndGghPTAmJihzPShBbigwLG4uYy5sZW5ndGgpLHUobi5jWzBdLDMzKSksaD1zLmktKEFuKDAsSC5jLmxlbmd0aCksdShILmNbMF0sOCkpLmEsZD1zLmotKEFuKDAsSC5jLmxlbmd0aCksdShILmNbMF0sOCkpLmIpLG89Yi5NYXRoLnNxcnQoaCpoK2QqZCksQz1LcmUobik7Qy5hLmdjKCkhPTA7KXtmb3Ioaz1DLmEuZWMoKS5LYygpO2suT2IoKTspdj11KGsuUGIoKSwzMyksRz10LmYsSz1HLmkrRy5nLzIsdHQ9Ry5qK0cuZi8yLGd0PXYuaSt2LmcvMixNdD12Lmordi5mLzIsU3Q9Z3QtSyxSdD1NdC10dCxLdD1iLk1hdGguc3FydChTdCpTdCtSdCpSdCksdWU9U3QvS3QsX2U9UnQvS3Qsa3Uodix2LmkrdWUqbyksRXUodix2LmorX2Uqbyk7ci5uJiZlJiZnZihyLHBmKGUpLChTbCgpLFFsKSksQz1LcmUobmV3IEJ1KEMpKX10LmEmJnQuYS5sZyhuZXcgQnUoQykpLHIubiYmZSYmZ2YocixwZihlKSwoU2woKSxRbCkpLEFoZSh0LGUsbmV3IEJ1KEMpLHIpfX1mdW5jdGlvbiBFNW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0O2lmKEs9dC5uLHR0PXQubyxqPXQuZCxNPVh0KHllKG95KHQsKFRlKCksbGh0KSkpKSxlKXtmb3IoQz1NKihlLmdjKCktMSksSD0wLHY9ZS5LYygpO3YuT2IoKTspaD11KHYuUGIoKSwxMCksQys9aC5vLmEsSD1iLk1hdGgubWF4KEgsaC5vLmIpO2ZvcihndD1LLmEtKEMtdHQuYSkvMixvPUsuYi1qLmQrSCxyPXR0LmEvKGUuZ2MoKSsxKSxzPXIsZD1lLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDEwKSxoLm4uYT1ndCxoLm4uYj1vLWguby5iLGd0Kz1oLm8uYStNLGs9JGNlKGgpLGsubi5hPWguby5hLzItay5hLmEsay5uLmI9aC5vLmIsRz11KFEoaCwoYWUoKSxaVikpLDExKSxHLmUuYy5sZW5ndGgrRy5nLmMubGVuZ3RoPT0xJiYoRy5uLmE9cy1HLmEuYSxHLm4uYj0wLFVvKEcsdCkpLHMrPXJ9aWYobil7Zm9yKEM9TSoobi5nYygpLTEpLEg9MCx2PW4uS2MoKTt2Lk9iKCk7KWg9dSh2LlBiKCksMTApLEMrPWguby5hLEg9Yi5NYXRoLm1heChILGguby5iKTtmb3IoZ3Q9Sy5hLShDLXR0LmEpLzIsbz1LLmIrdHQuYitqLmEtSCxyPXR0LmEvKG4uZ2MoKSsxKSxzPXIsZD1uLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDEwKSxoLm4uYT1ndCxoLm4uYj1vLGd0Kz1oLm8uYStNLGs9JGNlKGgpLGsubi5hPWguby5hLzItay5hLmEsay5uLmI9MCxHPXUoUShoLChhZSgpLFpWKSksMTEpLEcuZS5jLmxlbmd0aCtHLmcuYy5sZW5ndGg9PTEmJihHLm4uYT1zLUcuYS5hLEcubi5iPXR0LmIsVW8oRyx0KSkscys9cn19ZnVuY3Rpb24gVDVuKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKHUoUShlLChhZSgpLFZjKSksMjEpLkhjKChvbygpLHZoKSkpe2ZvcihkPW5ldyBTKGUuYSk7ZC5hPGQuYy5jLmxlbmd0aDspbz11KEooZCksMTApLG8uaz09KFZuKCksT3MpJiYocz11KFEobywoVGUoKSxmRykpLDE0MiksdC5jPWIuTWF0aC5taW4odC5jLG8ubi5hLXMuYiksdC5hPWIuTWF0aC5tYXgodC5hLG8ubi5hK28uby5hK3MuYyksdC5kPWIuTWF0aC5taW4odC5kLG8ubi5iLXMuZCksdC5iPWIuTWF0aC5tYXgodC5iLG8ubi5iK28uby5iK3MuYSkpO2ZvcihoPW5ldyBTKGUuYSk7aC5hPGguYy5jLmxlbmd0aDspaWYobz11KEooaCksMTApLG8uayE9KFZuKCksT3MpKXN3aXRjaChvLmsuZyl7Y2FzZSAyOmlmKHI9dShRKG8sKFRlKCksdXUpKSwxNjMpLHI9PShkaCgpLGJiKSl7by5uLmE9dC5jLTEwLFFzZShvLG5ldyAkSykuSmIobmV3IEphKG8pKTticmVha31pZihyPT1qeSl7by5uLmE9dC5hKzEwLFFzZShvLG5ldyB6SykuSmIobmV3IG1sKG8pKTticmVha31pZihuPXUoUShvLEIyKSwzMDMpLG49PShxMCgpLFk0KSl7WmxlKG8pLkpiKG5ldyBxZihvKSksby5uLmI9dC5kLTEwO2JyZWFrfWlmKG49PUY2KXtabGUobykuSmIobmV3IENwKG8pKSxvLm4uYj10LmIrMTA7YnJlYWt9YnJlYWs7ZGVmYXVsdDp0aHJvdyBpdChuZXcgRm4oIlRoZSBub2RlIHR5cGUgIitvLmsrIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSAiK3U2bikpfX19ZnVuY3Rpb24gQzVuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE0saixILEcsSyx0dDtmb3Iodj1uZXcgJGUoci5pK3IuZy8yLHIuaityLmYvMiksSD1ZbGUociksRz11KHFlKGUsKFRlKCksY3MpKSw5OCksdHQ9dShxZShyLEM3KSw2MSksclV0KGNzZShyKSxWeSl8fChyLmk9PTAmJnIuaj09MD9LPTA6Sz1yZ24ocix0dCksd28ocixWeSxLKSksaz1uZXcgJGUoZS5nLGUuZikscz1MSShyLEcsdHQsSCxrLHYsbmV3ICRlKHIuZyxyLmYpLHUoUShuLFdsKSwxMDMpLG4pLEp0KHMsKGFlKCksX2kpLHIpLG89dShOZShzLmosMCksMTEpLER0dChvLFhtbihyKSksSnQocyxHeSwoWnUoKSx1bihDYikpKSxNPXUocWUoZSxHeSksMTc0KS5IYyhzZyksZD1uZXcgbnIoKCFyLm4mJihyLm49bmV3IGZlKHFvLHIsMSw3KSksci5uKSk7ZC5lIT1kLmkuZ2MoKTspaWYoaD11KGRyKGQpLDEzNyksIWplKFJlKHFlKGgsejIpKSkmJmguYSYmKGo9Vml0KGgpLGxlKG8uZixqKSwhTSkpc3dpdGNoKEM9MCxTOSh1KHFlKGUsR3kpLDIxKSkmJihDPW81dChuZXcgJGUoaC5pLGguaiksbmV3ICRlKGguZyxoLmYpLG5ldyAkZShyLmcsci5mKSwwLHR0KSksdHQuZyl7Y2FzZSAyOmNhc2UgNDpqLm8uYT1DO2JyZWFrO2Nhc2UgMTpjYXNlIDM6ai5vLmI9Q31KdChzLFM3LHllKHFlKGVzKGUpLFM3KSkpLEp0KHMsQTcseWUocWUoZXMoZSksQTcpKSksSnQocyxXeSx5ZShxZShlcyhlKSxXeSkpKSxsZShuLmEscyksa2kodC5hLHIscyl9ZnVuY3Rpb24gTGhlKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdDtmb3IodnIobiwiUHJvY2Vzc29yIGFycmFuZ2UgbGV2ZWwiLDEpLEM9MCx3bigpLHI0KGUsbmV3IEVwdCgoZmMoKSxNRykpKSxvPWUuYixkPWVpKGUsZS5iKSxrPSEwO2smJmQuYi5iIT1kLmQuYTspZ3Q9dShPcnQoZCksODYpLHUoUShndCxNRyksMTkpLmE9PTA/LS1vOms9ITE7aWYoS3Q9bmV3IFFkKGUsMCxvKSxoPW5ldyBTbnQoS3QpLEt0PW5ldyBRZChlLG8sZS5iKSx2PW5ldyBTbnQoS3QpLGguYj09MClmb3IoRz1laSh2LDApO0cuYiE9Ry5kLmM7KUg9dSh0aShHKSw4NiksSnQoSCxPRyxwZShDKyspKTtlbHNlIGZvcihNPWguYixSdD1laShoLDApO1J0LmIhPVJ0LmQuYzspe2ZvcihTdD11KHRpKFJ0KSw4NiksSnQoU3QsT0cscGUoQysrKSkscj1FeXQoU3QpLExoZSh0LHIsUmMobiwxL018MCkpLHI0KHIsTXZ0KG5ldyBFcHQoT0cpKSksaj1uZXcgWmksTXQ9ZWkociwwKTtNdC5iIT1NdC5kLmM7KWZvcihndD11KHRpKE10KSw4NiksdHQ9ZWkoU3QuZCwwKTt0dC5iIT10dC5kLmM7KUs9dSh0aSh0dCksMTg4KSxLLmM9PWd0JiZmcyhqLEssai5jLmIsai5jKTtmb3IoQWgoU3QuZCksVWEoU3QuZCxqKSxkPWVpKHYsdi5iKSxzPVN0LmQuYixrPSEwOzA8cyYmayYmZC5iLmIhPWQuZC5hOylndD11KE9ydChkKSw4NiksdShRKGd0LE1HKSwxOSkuYT09MD8oSnQoZ3QsT0cscGUoQysrKSksLS1zLHR6KGQpKTprPSExfW9yKG4pfWZ1bmN0aW9uIF81bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3Q7Zm9yKHZyKGUsIkludmVydGVkIHBvcnQgcHJlcHJvY2Vzc2luZyIsMSksQz10LmIsaz1uZXcgZGEoQywwKSxuPW51bGwsU3Q9bmV3IGhlO2suYjxrLmQuZ2MoKTspe2ZvcihNdD1uLG49KFpuKGsuYjxrLmQuZ2MoKSksdShrLmQuWGIoay5jPWsuYisrKSwyOSkpLEg9bmV3IFMoU3QpO0guYTxILmMuYy5sZW5ndGg7KU09dShKKEgpLDEwKSxFbyhNLE10KTtmb3IoU3QuYz1OdChRbixEZSwxLDAsNSwxKSxHPW5ldyBTKG4uYSk7Ry5hPEcuYy5jLmxlbmd0aDspaWYoTT11KEooRyksMTApLE0uaz09KFZuKCksT3MpJiZHMyh1KFEoTSwoVGUoKSxjcykpLDk4KSkpe2ZvcihndD1VNXQoTSwoc28oKSx0bCksKHZlKCksSG4pKS5LYygpO2d0Lk9iKCk7KWZvcihLPXUoZ3QuUGIoKSwxMSksdj1LLmUsZD11KFAxKHYsTnQoaGx0LFdvdCwxNyx2LmMubGVuZ3RoLDAsMSkpLDQ3NCkscz1kLG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLFF5bih0LEsscixTdCk7Zm9yKHR0PVU1dChNLG51LEJuKS5LYygpO3R0Lk9iKCk7KWZvcihLPXUodHQuUGIoKSwxMSksdj1LLmcsZD11KFAxKHYsTnQoaGx0LFdvdCwxNyx2LmMubGVuZ3RoLDAsMSkpLDQ3NCkscz1kLG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLFh5bih0LEsscixTdCl9fWZvcihqPW5ldyBTKFN0KTtqLmE8ai5jLmMubGVuZ3RoOylNPXUoSihqKSwxMCksRW8oTSxuKTtvcihlKX1mdW5jdGlvbiBTNW4odCxlLG4scixzLG8pe3ZhciBoLGQsdixrLEMsTTtmb3Ioaz1uZXcgTWMsTW8oayxlKSxCcyhrLHUocWUoZSwoVGUoKSxDNykpLDYxKSksSnQoaywoYWUoKSxfaSksZSksVW8oayxuKSxNPWsubyxNLmE9ZS5nLE0uYj1lLmYsQz1rLm4sQy5hPWUuaSxDLmI9ZS5qLGtpKHQuYSxlLGspLGg9Tjgod3UoV28obmV3IFRuKG51bGwsKCFlLmUmJihlLmU9bmV3IENuKFlzLGUsNyw0KSksbmV3IF9uKGUuZSwxNikpKSxuZXcgb04pLG5ldyBZNSksbmV3IGlyKGUpKSxofHwoaD1OOCh3dShXbyhuZXcgVG4obnVsbCwoIWUuZCYmKGUuZD1uZXcgQ24oWXMsZSw4LDUpKSxuZXcgX24oZS5kLDE2KSkpLG5ldyBUayksbmV3IEZUKSxuZXcgc3IoZSkpKSxofHwoaD1OOChuZXcgVG4obnVsbCwoIWUuZSYmKGUuZT1uZXcgQ24oWXMsZSw3LDQpKSxuZXcgX24oZS5lLDE2KSkpLG5ldyBnSykpLEp0KGssU08sKE5uKCksISFoKSksVjNuKGssbyxzLHUocWUoZSxSdiksOCkpLHY9bmV3IG5yKCghZS5uJiYoZS5uPW5ldyBmZShxbyxlLDEsNykpLGUubikpO3YuZSE9di5pLmdjKCk7KWQ9dShkcih2KSwxMzcpLCFqZShSZShxZShkLHoyKSkpJiZkLmEmJmxlKGsuZixWaXQoZCkpO3N3aXRjaChzLmcpe2Nhc2UgMjpjYXNlIDE6KGsuaj09KHZlKCksUG4pfHxrLmo9PW1yKSYmci5GYygob28oKSxXNCkpO2JyZWFrO2Nhc2UgNDpjYXNlIDM6KGsuaj09KHZlKCksSG4pfHxrLmo9PUJuKSYmci5GYygob28oKSxXNCkpfXJldHVybiBrfWZ1bmN0aW9uICRhdCh0LGUsbixyLHMsbyxoKXt2YXIgZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3Q7Zm9yKGo9bnVsbCxyPT0oR3coKSx5Yik/aj1lOnI9PXI1JiYoaj1uKSxLPWouYS5lYygpLktjKCk7Sy5PYigpOyl7Zm9yKEc9dShLLlBiKCksMTEpLHR0PVlvKGx0KGN0KFdzLDEpLGVlLDgsMCxbRy5pLm4sRy5uLEcuYV0pKS5iLFN0PW5ldyBIcyxkPW5ldyBIcyxrPW5ldyBMMShHLmIpO0dvKGsuYSl8fEdvKGsuYik7KWlmKHY9dShHbyhrLmEpP0ooay5hKTpKKGsuYiksMTcpLGplKFJlKFEodiwoYWUoKSxxMSkpKSk9PXMmJlJvKG8sdiwwKSE9LTEpe2lmKHYuZD09Rz9ndD12LmM6Z3Q9di5kLE10PVlvKGx0KGN0KFdzLDEpLGVlLDgsMCxbZ3QuaS5uLGd0Lm4sZ3QuYV0pKS5iLGIuTWF0aC5hYnMoTXQtdHQpPC4yKWNvbnRpbnVlO010PHR0P2UuYS5fYihndCk/RnMoU3QsbmV3IGZhKHliLHYpKTpGcyhTdCxuZXcgZmEocjUsdikpOmUuYS5fYihndCk/RnMoZCxuZXcgZmEoeWIsdikpOkZzKGQsbmV3IGZhKHI1LHYpKX1pZihTdC5hLmdjKCk+MSlmb3IoSD1uZXcgdnh0KEcsU3QsciksdmEoU3QsbmV3IHhHdCh0LEgpKSxoLmNbaC5jLmxlbmd0aF09SCxNPVN0LmEuZWMoKS5LYygpO00uT2IoKTspQz11KE0uUGIoKSw0NiksbXUobyxDLmIpO2lmKGQuYS5nYygpPjEpZm9yKEg9bmV3IHZ4dChHLGQsciksdmEoZCxuZXcga0d0KHQsSCkpLGguY1toLmMubGVuZ3RoXT1ILE09ZC5hLmVjKCkuS2MoKTtNLk9iKCk7KUM9dShNLlBiKCksNDYpLG11KG8sQy5iKX19ZnVuY3Rpb24gTWhlKHQpe013KHQsbmV3IGsyKE1SKF93KEV3KEN3KFR3KG5ldyBrZyxTZCksIkVMSyBSYWRpYWwiKSwnQSByYWRpYWwgbGF5b3V0IHByb3ZpZGVyIHdoaWNoIGlzIGJhc2VkIG9uIHRoZSBhbGdvcml0aG0gb2YgUGV0ZXIgRWFkZXMgcHVibGlzaGVkIGluICJEcmF3aW5nIGZyZWUgdHJlZXMuIiwgcHVibGlzaGVkIGJ5IEludGVybmF0aW9uYWwgSW5zdGl0dXRlIGZvciBBZHZhbmNlZCBTdHVkeSBvZiBTb2NpYWwgSW5mb3JtYXRpb24gU2NpZW5jZSwgRnVqaXRzdSBMaW1pdGVkIGluIDE5OTEuIFRoZSByYWRpYWwgbGF5b3V0ZXIgdGFrZXMgYSB0cmVlIGFuZCBwbGFjZXMgdGhlIG5vZGVzIGluIHJhZGlhbCBvcmRlciBhcm91bmQgdGhlIHJvb3QuIFRoZSBub2RlcyBvZiB0aGUgc2FtZSB0cmVlIGxldmVsIGFyZSBwbGFjZWQgb24gdGhlIHNhbWUgcmFkaXVzLicpLG5ldyBkWiksU2QpKSkseGUodCxTZCx5SCxJZShReWUpKSx4ZSh0LFNkLEN5LEllKFp5ZSkpLHhlKHQsU2QsRDQsSWUoV3llKSkseGUodCxTZCxDNixJZShZeWUpKSx4ZSh0LFNkLFQ2LEllKEt5ZSkpLHhlKHQsU2QsVUUsSWUoVXllKSkseGUodCxTZCxqXyxJZShMX3QpKSx4ZSh0LFNkLFdFLEllKFh5ZSkpLHhlKHQsU2QsUGN0LEllKFdodCkpLHhlKHQsU2QsT2N0LEllKFlodCkpLHhlKHQsU2QsWmt0LEllKE1fdCkpLHhlKHQsU2QsWWt0LEllKEJHKSkseGUodCxTZCxLa3QsSWUoUkcpKSx4ZSh0LFNkLFhrdCxJZShxTykpLHhlKHQsU2QsUWt0LEllKERfdCkpfWZ1bmN0aW9uIFN4dCh0KXt2YXIgZTtpZih0aGlzLnI9bnJuKG5ldyBiYyxuZXcgQ2MpLHRoaXMuYj1uZXcgaV8odShMcihYYSksMjkwKSksdGhpcy5wPW5ldyBpXyh1KExyKFhhKSwyOTApKSx0aGlzLmk9bmV3IGlfKHUoTHIoJHBlKSwyOTApKSx0aGlzLmU9dCx0aGlzLm89bmV3IHhvKHQucmYoKSksdGhpcy5EPXQuRGYoKXx8amUoUmUodC5XZSgodWkoKSxaTykpKSksdGhpcy5BPXUodC5XZSgodWkoKSxHMikpLDIxKSx0aGlzLkI9dSh0LldlKHhiKSwyMSksdGhpcy5xPXUodC5XZShLUyksOTgpLHRoaXMudT11KHQuV2UoUXkpLDIxKSwhdWduKHRoaXMudSkpdGhyb3cgaXQobmV3IFIzKCJJbnZhbGlkIHBvcnQgbGFiZWwgcGxhY2VtZW50OiAiK3RoaXMudSkpO2lmKHRoaXMudj1qZShSZSh0LldlKHVBdCkpKSx0aGlzLmo9dSh0LldlKG81KSwyMSksIU8ybih0aGlzLmopKXRocm93IGl0KG5ldyBSMygiSW52YWxpZCBub2RlIGxhYmVsIHBsYWNlbWVudDogIit0aGlzLmopKTt0aGlzLm49dShsXyh0LFhTdCksMTE2KSx0aGlzLms9WHQoeWUobF8odCxKRykpKSx0aGlzLmQ9WHQoeWUobF8odCxkQXQpKSksdGhpcy53PVh0KHllKGxfKHQsdkF0KSkpLHRoaXMucz1YdCh5ZShsXyh0LGdBdCkpKSx0aGlzLnQ9WHQoeWUobF8odCxwQXQpKSksdGhpcy5DPXUobF8odCxiQXQpLDE0MiksdGhpcy5jPTIqdGhpcy5kLGU9IXRoaXMuQi5IYygobGwoKSxjUCkpLHRoaXMuZj1uZXcgYV8oMCxlLDApLHRoaXMuZz1uZXcgYV8oMSxlLDApLGhldCh0aGlzLmYsKEtmKCksZXUpLHRoaXMuZyl9ZnVuY3Rpb24gQTVuKHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZSxXZSxRZSxSbjtmb3IoU3Q9MCxHPTAsSD0wLGo9MSxNdD1uZXcgbnIoKCF0LmEmJih0LmE9bmV3IGZlKHJzLHQsMTAsMTEpKSx0LmEpKTtNdC5lIT1NdC5pLmdjKCk7KXR0PXUoZHIoTXQpLDMzKSxqKz1qMChuZXcgYXIobHIoSzAodHQpLmEuS2MoKSxuZXcgeikpKSxXZT10dC5nLEc9Yi5NYXRoLm1heChHLFdlKSxNPXR0LmYsSD1iLk1hdGgubWF4KEgsTSksU3QrPVdlKk07Zm9yKEs9KCF0LmEmJih0LmE9bmV3IGZlKHJzLHQsMTAsMTEpKSx0LmEpLmksaD1TdCsyKnIqcipqKkssbz1iLk1hdGguc3FydChoKSx2PWIuTWF0aC5tYXgobypuLEcpLGQ9Yi5NYXRoLm1heChvL24sSCksZ3Q9bmV3IG5yKCghdC5hJiYodC5hPW5ldyBmZShycyx0LDEwLDExKSksdC5hKSk7Z3QuZSE9Z3QuaS5nYygpOyl0dD11KGRyKGd0KSwzMyksUWU9cy5iKyh1bChlLDI2KSpJXyt1bChlLDI3KSpPXykqKHYtdHQuZyksUm49cy5iKyh1bChlLDI2KSpJXyt1bChlLDI3KSpPXykqKGQtdHQuZiksa3UodHQsUWUpLEV1KHR0LFJuKTtmb3IoX2U9disocy5iK3MuYyksdWU9ZCsocy5kK3MuYSksS3Q9bmV3IG5yKCghdC5hJiYodC5hPW5ldyBmZShycyx0LDEwLDExKSksdC5hKSk7S3QuZSE9S3QuaS5nYygpOylmb3IoUnQ9dShkcihLdCksMzMpLEM9bmV3IGFyKGxyKEswKFJ0KS5hLktjKCksbmV3IHopKTt6cihDKTspaz11KE1yKEMpLDc5KSx3XyhrKXx8THhuKGssZSxfZSx1ZSk7X2UrPXMuYitzLmMsdWUrPXMuZCtzLmEsd3YodCxfZSx1ZSwhMSwhMCl9ZnVuY3Rpb24gUnEodCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTTtpZih0PT1udWxsKXRocm93IGl0KG5ldyBsZChfdSkpO2lmKGs9dCxvPXQubGVuZ3RoLHY9ITEsbz4wJiYoZT0oUnIoMCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KDApKSwoZT09NDV8fGU9PTQzKSYmKHQ9dC5zdWJzdHIoMSksLS1vLHY9ZT09NDUpKSxvPT0wKXRocm93IGl0KG5ldyBsZCh5ditrKyciJykpO2Zvcig7dC5sZW5ndGg+MCYmKFJyKDAsdC5sZW5ndGgpLHQuY2hhckNvZGVBdCgwKT09NDgpOyl0PXQuc3Vic3RyKDEpLC0tbztpZihvPih2bGUoKSwkZ2UpWzEwXSl0aHJvdyBpdChuZXcgbGQoeXYraysnIicpKTtmb3Iocz0wO3M8bztzKyspaWYoV2llKChScihzLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQocykpKT09LTEpdGhyb3cgaXQobmV3IGxkKHl2K2srJyInKSk7Zm9yKE09MCxoPWdFdFsxMF0sQz1GdXRbMTBdLGQ9ejgocEV0WzEwXSksbj0hMCxyPW8laCxyPjAmJihNPS1wYXJzZUludCh0LnN1YnN0cigwLHIpLDEwKSx0PXQuc3Vic3RyKHIpLG8tPXIsbj0hMSk7bz49aDspe2lmKHI9cGFyc2VJbnQodC5zdWJzdHIoMCxoKSwxMCksdD10LnN1YnN0cihoKSxvLT1oLG4pbj0hMTtlbHNle2lmKHljKE0sZCk8MCl0aHJvdyBpdChuZXcgbGQoeXYraysnIicpKTtNPV9hKE0sQyl9TT1KcChNLHIpfWlmKHljKE0sMCk+MCl0aHJvdyBpdChuZXcgbGQoeXYraysnIicpKTtpZighdiYmKE09ejgoTSkseWMoTSwwKTwwKSl0aHJvdyBpdChuZXcgbGQoeXYraysnIicpKTtyZXR1cm4gTX1mdW5jdGlvbiBBeHQodCxlKXtvS3QoKTt2YXIgbixyLHMsbyxoLGQsdjtpZih0aGlzLmE9bmV3IHYydCh0aGlzKSx0aGlzLmI9dCx0aGlzLmM9ZSx0aGlzLmY9WG50KFRvKCgkdSgpLHlhKSxlKSksdGhpcy5mLmRjKCkpaWYoKGQ9ZDR0KHlhLHQpKT09ZSlmb3IodGhpcy5lPSEwLHRoaXMuZD1uZXcgaGUsdGhpcy5mPW5ldyBPayx0aGlzLmYuRmMoTzIpLHUoUHEoVEQoeWEsUmwodCkpLCIiKSwyNik9PXQmJnRoaXMuZi5GYyhDOSh5YSxSbCh0KSkpLHM9dmF0KHlhLHQpLktjKCk7cy5PYigpOylzd2l0Y2gocj11KHMuUGIoKSwxNzApLEh3KFRvKHlhLHIpKSl7Y2FzZSA0Ont0aGlzLmQuRmMocik7YnJlYWt9Y2FzZSA1Ont0aGlzLmYuR2MoWG50KFRvKHlhLHIpKSk7YnJlYWt9fWVsc2UgaWYodG8oKSx1KGUsNjYpLk9qKCkpZm9yKHRoaXMuZT0hMCx0aGlzLmY9bnVsbCx0aGlzLmQ9bmV3IGhlLGg9MCx2PSh0Lmk9PW51bGwmJnZkKHQpLHQuaSkubGVuZ3RoO2g8djsrK2gpZm9yKHI9KG49KHQuaT09bnVsbCYmdmQodCksdC5pKSxoPj0wJiZoPG4ubGVuZ3RoP25baF06bnVsbCksbz1LeChUbyh5YSxyKSk7bztvPUt4KFRvKHlhLG8pKSlvPT1lJiZ0aGlzLmQuRmMocik7ZWxzZSBIdyhUbyh5YSxlKSk9PTEmJmQ/KHRoaXMuZj1udWxsLHRoaXMuZD0oZDYoKSxBNWUpKToodGhpcy5mPW51bGwsdGhpcy5lPSEwLHRoaXMuZD0od24oKSxuZXcgTyhlKSkpO2Vsc2UgdGhpcy5lPUh3KFRvKHlhLGUpKT09NSx0aGlzLmYuRmIoJGZ0KSYmKHRoaXMuZj0kZnQpfWZ1bmN0aW9uIERoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHO2ZvcihuPTAscj14MW4odCxlKSxqPXQucyxIPXQudCxrPXUodShBaSh0LnIsZSksMjEpLDg0KS5LYygpO2suT2IoKTspaWYodj11KGsuUGIoKSwxMTEpLCEoIXYuY3x8di5jLmQuYy5sZW5ndGg8PTApKXtzd2l0Y2goRz12LmIucmYoKSxkPXYuYi5YZSgodWkoKSxkbCkpP1h0KHllKHYuYi5XZShkbCkpKTowLEM9di5jLE09Qy5pLE0uYj0oaD1DLm4sQy5lLmEraC5iK2guYyksTS5hPShvPUMubixDLmUuYitvLmQrby5hKSxlLmcpe2Nhc2UgMTpNLmM9di5hPyhHLmEtTS5iKS8yOkcuYStqLE0uZD1HLmIrZCtyLFdmKEMsKFF1KCksZmIpKSxkZChDLCh5dSgpLG4xKSk7YnJlYWs7Y2FzZSAzOk0uYz12LmE/KEcuYS1NLmIpLzI6Ry5hK2osTS5kPS1kLXItTS5hLFdmKEMsKFF1KCksZmIpKSxkZChDLCh5dSgpLEVmKSk7YnJlYWs7Y2FzZSAyOk0uYz0tZC1yLU0uYix2LmE/KHM9dC52P00uYTp1KE5lKEMuZCwwKSwxODEpLnJmKCkuYixNLmQ9KEcuYi1zKS8yKTpNLmQ9Ry5iK0gsV2YoQywoUXUoKSxrZikpLGRkKEMsKHl1KCksZGIpKTticmVhaztjYXNlIDQ6TS5jPUcuYStkK3Isdi5hPyhzPXQudj9NLmE6dShOZShDLmQsMCksMTgxKS5yZigpLmIsTS5kPShHLmItcykvMik6TS5kPUcuYitILFdmKEMsKFF1KCksTWQpKSxkZChDLCh5dSgpLGRiKSl9KGU9PSh2ZSgpLFBuKXx8ZT09bXIpJiYobj1iLk1hdGgubWF4KG4sTS5hKSl9bj4wJiYodShwbyh0LmIsZSksMTI0KS5hLmI9bil9ZnVuY3Rpb24gTDVuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndDtmb3IodnIoZSwiQ29tbWVudCBwcmUtcHJvY2Vzc2luZyIsMSksbj0wLHY9bmV3IFModC5hKTt2LmE8di5jLmMubGVuZ3RoOylpZihkPXUoSih2KSwxMCksamUoUmUoUShkLChUZSgpLENTKSkpKSl7Zm9yKCsrbixzPTAscj1udWxsLGs9bnVsbCxHPW5ldyBTKGQuaik7Ry5hPEcuYy5jLmxlbmd0aDspaj11KEooRyksMTEpLHMrPWouZS5jLmxlbmd0aCtqLmcuYy5sZW5ndGgsai5lLmMubGVuZ3RoPT0xJiYocj11KE5lKGouZSwwKSwxNyksaz1yLmMpLGouZy5jLmxlbmd0aD09MSYmKHI9dShOZShqLmcsMCksMTcpLGs9ci5kKTtpZihzPT0xJiZrLmUuYy5sZW5ndGgray5nLmMubGVuZ3RoPT0xJiYhamUoUmUoUShrLmksQ1MpKSkpcnhuKGQscixrLGsuaSksTDkodik7ZWxzZXtmb3IoZ3Q9bmV3IGhlLEg9bmV3IFMoZC5qKTtILmE8SC5jLmMubGVuZ3RoOyl7Zm9yKGo9dShKKEgpLDExKSxNPW5ldyBTKGouZyk7TS5hPE0uYy5jLmxlbmd0aDspQz11KEooTSksMTcpLEMuZC5nLmMubGVuZ3RoPT0wfHwoZ3QuY1tndC5jLmxlbmd0aF09Qyk7Zm9yKGg9bmV3IFMoai5lKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxNyksby5jLmUuYy5sZW5ndGg9PTB8fChndC5jW2d0LmMubGVuZ3RoXT1vKX1mb3IodHQ9bmV3IFMoZ3QpO3R0LmE8dHQuYy5jLmxlbmd0aDspSz11KEoodHQpLDE3KSxidihLLCEwKX19ZS5uJiZKYihlLCJGb3VuZCAiK24rIiBjb21tZW50IGJveGVzIiksb3IoZSl9ZnVuY3Rpb24gTTVuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE0saixILEcsSztpZihqPVh0KHllKFEodCwoVGUoKSxTNykpKSksSD1YdCh5ZShRKHQsQTcpKSksTT1YdCh5ZShRKHQsV3kpKSksZD10Lm8sbz11KE5lKHQuaiwwKSwxMSksaD1vLm4sSz1vcG4obyxNKSwhIUspe2lmKGUuSGMoKFp1KCksc2cpKSlzd2l0Y2godShRKHQsKGFlKCksb2MpKSw2MSkuZyl7Y2FzZSAxOksuYz0oZC5hLUsuYikvMi1oLmEsSy5kPUg7YnJlYWs7Y2FzZSAzOksuYz0oZC5hLUsuYikvMi1oLmEsSy5kPS1ILUsuYTticmVhaztjYXNlIDI6biYmby5lLmMubGVuZ3RoPT0wJiZvLmcuYy5sZW5ndGg9PTA/KEM9cj9LLmE6dShOZShvLmYsMCksNzApLm8uYixLLmQ9KGQuYi1DKS8yLWguYik6Sy5kPWQuYitILWguYixLLmM9LWotSy5iO2JyZWFrO2Nhc2UgNDpuJiZvLmUuYy5sZW5ndGg9PTAmJm8uZy5jLmxlbmd0aD09MD8oQz1yP0suYTp1KE5lKG8uZiwwKSw3MCkuby5iLEsuZD0oZC5iLUMpLzItaC5iKTpLLmQ9ZC5iK0gtaC5iLEsuYz1qfWVsc2UgaWYoZS5IYyhDYikpc3dpdGNoKHUoUSh0LChhZSgpLG9jKSksNjEpLmcpe2Nhc2UgMTpjYXNlIDM6Sy5jPWguYStqO2JyZWFrO2Nhc2UgMjpjYXNlIDQ6biYmIW8uYz8oQz1yP0suYTp1KE5lKG8uZiwwKSw3MCkuby5iLEsuZD0oZC5iLUMpLzItaC5iKTpLLmQ9aC5iK0h9Zm9yKHM9Sy5kLGs9bmV3IFMoby5mKTtrLmE8ay5jLmMubGVuZ3RoOyl2PXUoSihrKSw3MCksRz12Lm4sRy5hPUsuYyxHLmI9cyxzKz12Lm8uYitNfX1mdW5jdGlvbiBENW4oKXtpaSh3UCxuZXcgTEopLGlpKG1VLG5ldyBPSiksaWkodlAsbmV3IHprKSxpaShrTHQsbmV3IFJKKSxpaShBZSxuZXcgVmspLGlpKGN0KEd1LDEpLG5ldyBnQyksaWkoUnMsbmV3ICRKKSxpaShNNixuZXcgZHgpLGlpKEFlLG5ldyBkMSksaWkoQWUsbmV3IExCKSxpaShBZSxuZXcgTUIpLGlpKGxhLG5ldyBEQiksaWkoQWUsbmV3IElCKSxpaSh3aCxuZXcgT0IpLGlpKHdoLG5ldyBQQiksaWkoQWUsbmV3ICRmKSxpaShpNyxuZXcgZHUpLGlpKEFlLG5ldyBBSiksaWkoQWUsbmV3IE1KKSxpaShBZSxuZXcgZ3UpLGlpKEFlLG5ldyBjQyksaWkoQWUsbmV3IEZCKSxpaShjdChHdSwxKSxuZXcgTkIpLGlpKEFlLG5ldyBmeCksaWkoQWUsbmV3IERKKSxpaSh3aCxuZXcgJGspLGlpKHdoLG5ldyBJSiksaWkoQWUsbmV3IEJCKSxpaShqYSxuZXcgUEopLGlpKEFlLG5ldyB1QyksaWkoU3YsbmV3IFJCKSxpaShBZSxuZXcgVUwpLGlpKEFlLG5ldyBsQyksaWkoQWUsbmV3IEZKKSxpaShBZSxuZXcgTkopLGlpKHdoLG5ldyBXTCksaWkod2gsbmV3IGhDKSxpaShBZSxuZXcgZzEpLGlpKEFlLG5ldyBCSiksaWkoQWUsbmV3IHFrKSxpaShBZSxuZXcgWUwpLGlpKEFlLG5ldyBXYiksaWkoQWUsbmV3IGZDKSxpaShBdixuZXcgS0wpLGlpKEFlLG5ldyB6ZiksaWkoQWUsbmV3IGRDKSxpaShBZSxuZXcgcDEpLGlpKEF2LG5ldyBiMSksaWkoU3YsbmV3IGpKKSxpaShBZSxuZXcgTTMpLGlpKGphLG5ldyBIayl9ZnVuY3Rpb24gTHh0KHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdDtpZihqPWUubGVuZ3RoLGo+MCYmKHY9KFJyKDAsZS5sZW5ndGgpLGUuY2hhckNvZGVBdCgwKSksdiE9NjQpKXtpZih2PT0zNyYmKE09ZS5sYXN0SW5kZXhPZigiJSIpLGs9ITEsTSE9MCYmKE09PWotMXx8KGs9KFJyKE0rMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KE0rMSk9PTQ2KSkpKSl7aWYoaD1lLnN1YnN0cigxLE0tMSksU3Q9aG4oIiUiLGgpP251bGw6TXh0KGgpLHI9MCxrKXRyeXtyPXFsKGUuc3Vic3RyKE0rMiksU2Esd2kpfWNhdGNoKFJ0KXt0aHJvdyBSdD1XaShSdCksX3QoUnQsMTI3KT8oZD1SdCxpdChuZXcgVyQoZCkpKTppdChSdCl9Zm9yKHR0PWx5dCh0LldnKCkpO3R0Lk9iKCk7KWlmKEc9a3oodHQpLF90KEcsNTEwKSYmKHM9dShHLDU5MCksTXQ9cy5kLChTdD09bnVsbD9NdD09bnVsbDpobihTdCxNdCkpJiZyLS09PTApKXJldHVybiBzO3JldHVybiBudWxsfWlmKEM9ZS5sYXN0SW5kZXhPZigiLiIpLEg9Qz09LTE/ZTplLnN1YnN0cigwLEMpLG49MCxDIT0tMSl0cnl7bj1xbChlLnN1YnN0cihDKzEpLFNhLHdpKX1jYXRjaChSdCl7aWYoUnQ9V2koUnQpLF90KFJ0LDEyNykpSD1lO2Vsc2UgdGhyb3cgaXQoUnQpfWZvcihIPWhuKCIlIixIKT9udWxsOk14dChIKSxLPWx5dCh0LldnKCkpO0suT2IoKTspaWYoRz1reihLKSxfdChHLDE5MSkmJihvPXUoRywxOTEpLGd0PW8ubmUoKSwoSD09bnVsbD9ndD09bnVsbDpobihILGd0KSkmJm4tLT09MCkpcmV0dXJuIG87cmV0dXJuIG51bGx9cmV0dXJuIGVoZSh0LGUpfWZ1bmN0aW9uIEk1bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWUsUm4sem47Zm9yKHVlPW5ldyBoZSxHPW5ldyBTKHQuYik7Ry5hPEcuYy5jLmxlbmd0aDspZm9yKEg9dShKKEcpLDI5KSxndD1uZXcgUyhILmEpO2d0LmE8Z3QuYy5jLmxlbmd0aDspaWYoSz11KEooZ3QpLDEwKSxLLms9PShWbigpLGtzKSYmVXMoSywoYWUoKSxlRykpKXtmb3IoTXQ9bnVsbCxSdD1udWxsLFN0PW51bGwsUWU9bmV3IFMoSy5qKTtRZS5hPFFlLmMuYy5sZW5ndGg7KXN3aXRjaChXZT11KEooUWUpLDExKSxXZS5qLmcpe2Nhc2UgNDpNdD1XZTticmVhaztjYXNlIDI6UnQ9V2U7YnJlYWs7ZGVmYXVsdDpTdD1XZX1mb3IoS3Q9dShOZShTdC5nLDApLDE3KSxDPW5ldyBEUihLdC5hKSxrPW5ldyB4byhTdC5uKSxMaShrLEsubiksTT1laShDLDApLGVEKE0sayksX2U9cUQoS3QuYSksaj1uZXcgeG8oU3QubiksTGkoaixLLm4pLGZzKF9lLGosX2UuYy5iLF9lLmMpLFJuPXUoUShLLGVHKSwxMCksem49dShOZShSbi5qLDApLDExKSx2PXUoUDEoTXQuZSxOdChobHQsV290LDE3LDAsMCwxKSksNDc0KSxyPXYsbz0wLGQ9ci5sZW5ndGg7bzxkOysrbyllPXJbb10sb2EoZSx6biksaml0KGUuYSxlLmEuYixDKTtmb3Iodj13ZChSdC5nKSxuPXYscz0wLGg9bi5sZW5ndGg7czxoOysrcyllPW5bc10sT2EoZSx6biksaml0KGUuYSwwLF9lKTtPYShLdCxudWxsKSxvYShLdCxudWxsKSx1ZS5jW3VlLmMubGVuZ3RoXT1LfWZvcih0dD1uZXcgUyh1ZSk7dHQuYTx0dC5jLmMubGVuZ3RoOylLPXUoSih0dCksMTApLEVvKEssbnVsbCl9ZnVuY3Rpb24gSWhlKCl7SWhlPVo7dmFyIHQsZSxuO2ZvcihuZXcgU0QoMSwwKSxuZXcgU0QoMTAsMCksbmV3IFNEKDAsMCksemdlPU50KE51dCxlZSwyNDAsMTEsMCwxKSxOMj1OdCh4aCx5ZCwyNSwxMDAsMTUsMSksbUV0PWx0KGN0KGFhLDEpLHZvLDI1LDE1LFsxLDUsMjUsMTI1LDYyNSwzMTI1LDE1NjI1LDc4MTI1LDM5MDYyNSwxOTUzMTI1LDk3NjU2MjUsNDg4MjgxMjUsMjQ0MTQwNjI1LDEyMjA3MDMxMjUsNjEwMzUxNTYyNSwzMDUxNzU3ODEyNSwxNTI1ODc4OTA2MjUsNzYyOTM5NDUzMTI1LDM4MTQ2OTcyNjU2MjUsMTkwNzM0ODYzMjgxMjUsOTUzNjc0MzE2NDA2MjUsNDc2ODM3MTU4MjAzMTI1LDB4ODc4Njc4MzI2ZWFjOV0pLHlFdD1OdChDcixYciwyNSxtRXQubGVuZ3RoLDE1LDEpLHhFdD1sdChjdChhYSwxKSx2bywyNSwxNSxbMSwxMCwxMDAsV2csMWU0LHZvdCwxZTYsMWU3LDFlOCxHcSwxZTEwLDFlMTEsMWUxMiwxZTEzLDFlMTQsMWUxNSwxZTE2XSksa0V0PU50KENyLFhyLDI1LHhFdC5sZW5ndGgsMTUsMSksRUV0PU50KE51dCxlZSwyNDAsMTEsMCwxKSx0PTA7dDxFRXQubGVuZ3RoO3QrKyl6Z2VbdF09bmV3IFNEKHQsMCksRUV0W3RdPW5ldyBTRCgwLHQpLE4yW3RdPTQ4O2Zvcig7dDxOMi5sZW5ndGg7dCsrKU4yW3RdPTQ4O2ZvcihuPTA7bjx5RXQubGVuZ3RoO24rKyl5RXRbbl09czV0KG1FdFtuXSk7Zm9yKGU9MDtlPGtFdC5sZW5ndGg7ZSsrKWtFdFtlXT1zNXQoeEV0W2VdKTtURSgpfWZ1bmN0aW9uIE81bigpe2Z1bmN0aW9uIHQoKXt0aGlzLm9iaj10aGlzLmNyZWF0ZU9iamVjdCgpfXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGVPYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vYmpbZV19LHQucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLG4pe3RoaXMub2JqW2VdPW59LHQucHJvdG90eXBlW2tvdF09ZnVuY3Rpb24oZSl7ZGVsZXRlIHRoaXMub2JqW2VdfSx0LnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMub2JqKX0sdC5wcm90b3R5cGUuZW50cmllcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMua2V5cygpLG49dGhpcyxyPTA7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtpZihyPj1lLmxlbmd0aClyZXR1cm57ZG9uZTohMH07dmFyIHM9ZVtyKytdO3JldHVybnt2YWx1ZTpbcyxuLmdldChzKV0sZG9uZTohMX19fX0sQnZuKCl8fCh0LnByb3RvdHlwZS5jcmVhdGVPYmplY3Q9ZnVuY3Rpb24oKXtyZXR1cm57fX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9ialsiOiIrZV19LHQucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLG4pe3RoaXMub2JqWyI6IitlXT1ufSx0LnByb3RvdHlwZVtrb3RdPWZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLm9ialsiOiIrZV19LHQucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdGhpcy5vYmopbi5jaGFyQ29kZUF0KDApPT01OCYmZS5wdXNoKG4uc3Vic3RyaW5nKDEpKTtyZXR1cm4gZX0pLHR9ZnVuY3Rpb24gUDVuKHQpe2N4dCgpO3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dDtpZih0PT1udWxsKXJldHVybiBudWxsO2lmKE09dC5sZW5ndGgqOCxNPT0wKXJldHVybiIiO2ZvcihkPU0lMjQsSD1NLzI0fDAsaj1kIT0wP0grMTpILG89bnVsbCxvPU50KHhoLHlkLDI1LGoqNCwxNSwxKSxrPTAsQz0wLGU9MCxuPTAscj0wLGg9MCxzPTAsdj0wO3Y8SDt2KyspZT10W3MrK10sbj10W3MrK10scj10W3MrK10sQz0obiYxNSk8PDI0Pj4yNCxrPShlJjMpPDwyND4+MjQsRz1lJi0xMjg/KGU+PjJeMTkyKTw8MjQ+PjI0OmU+PjI8PDI0Pj4yNCxLPW4mLTEyOD8obj4+NF4yNDApPDwyND4+MjQ6bj4+NDw8MjQ+PjI0LHR0PXImLTEyOD8ocj4+Nl4yNTIpPDwyND4+MjQ6cj4+Njw8MjQ+PjI0LG9baCsrXT1scFtHXSxvW2grK109bHBbS3xrPDw0XSxvW2grK109bHBbQzw8Mnx0dF0sb1toKytdPWxwW3ImNjNdO3JldHVybiBkPT04PyhlPXRbc10saz0oZSYzKTw8MjQ+PjI0LEc9ZSYtMTI4PyhlPj4yXjE5Mik8PDI0Pj4yNDplPj4yPDwyND4+MjQsb1toKytdPWxwW0ddLG9baCsrXT1scFtrPDw0XSxvW2grK109NjEsb1toKytdPTYxKTpkPT0xNiYmKGU9dFtzXSxuPXRbcysxXSxDPShuJjE1KTw8MjQ+PjI0LGs9KGUmMyk8PDI0Pj4yNCxHPWUmLTEyOD8oZT4+Ml4xOTIpPDwyND4+MjQ6ZT4+Mjw8MjQ+PjI0LEs9biYtMTI4PyhuPj40XjI0MCk8PDI0Pj4yNDpuPj40PDwyND4+MjQsb1toKytdPWxwW0ddLG9baCsrXT1scFtLfGs8PDRdLG9baCsrXT1scFtDPDwyXSxvW2grK109NjEpLE1oKG8sMCxvLmxlbmd0aCl9ZnVuY3Rpb24gRjVuKHQsZSl7dmFyIG4scixzLG8saCxkLHY7aWYodC5lPT0wJiZ0LnA+MCYmKHQucD0tKHQucC0xKSksdC5wPlNhJiZ1bXQoZSx0LnAtYWIpLGg9ZS5xLmdldERhdGUoKSxvRChlLDEpLHQuaz49MCYmd2luKGUsdC5rKSx0LmM+PTA/b0QoZSx0LmMpOnQuaz49MD8odj1uZXcgTXl0KGUucS5nZXRGdWxsWWVhcigpLWFiLGUucS5nZXRNb250aCgpLDM1KSxyPTM1LXYucS5nZXREYXRlKCksb0QoZSxiLk1hdGgubWluKHIsaCkpKTpvRChlLGgpLHQuZjwwJiYodC5mPWUucS5nZXRIb3VycygpKSx0LmI+MCYmdC5mPDEyJiYodC5mKz0xMiksQVFlKGUsdC5mPT0yNCYmdC5nPzA6dC5mKSx0Lmo+PTAmJkFhbihlLHQuaiksdC5uPj0wJiZVYW4oZSx0Lm4pLHQuaT49MCYmYVV0KGUsUGEoX2EoYUkoVHUoZS5xLmdldFRpbWUoKSksV2cpLFdnKSx0LmkpKSx0LmEmJihzPW5ldyBCUix1bXQocyxzLnEuZ2V0RnVsbFllYXIoKS1hYi04MCksQ2V0KFR1KGUucS5nZXRUaW1lKCkpLFR1KHMucS5nZXRUaW1lKCkpKSYmdW10KGUscy5xLmdldEZ1bGxZZWFyKCktYWIrMTAwKSksdC5kPj0wKXtpZih0LmM9PS0xKW49KDcrdC5kLWUucS5nZXREYXkoKSklNyxuPjMmJihuLT03KSxkPWUucS5nZXRNb250aCgpLG9EKGUsZS5xLmdldERhdGUoKStuKSxlLnEuZ2V0TW9udGgoKSE9ZCYmb0QoZSxlLnEuZ2V0RGF0ZSgpKyhuPjA/LTc6NykpO2Vsc2UgaWYoZS5xLmdldERheSgpIT10LmQpcmV0dXJuITF9cmV0dXJuIHQubz5TYSYmKG89ZS5xLmdldFRpbWV6b25lT2Zmc2V0KCksYVV0KGUsUGEoVHUoZS5xLmdldFRpbWUoKSksKHQuby1vKSo2MCpXZykpKSwhMH1mdW5jdGlvbiBPaGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0O2lmKHM9UShlLChhZSgpLF9pKSksISFfdChzLDIzOSkpe2ZvcihHPXUocywzMyksSz1lLmUsaj1uZXcgeG8oZS5jKSxvPWUuZCxqLmErPW8uYixqLmIrPW8uZCxSdD11KHFlKEcsKFRlKCkscEcpKSwxNzQpLE51KFJ0LChsbCgpLG5VKSkmJihIPXUocWUoRyxkOXQpLDExNiksY3B0KEgsby5hKSxNdHQoSCxvLmQpLHVwdChILG8uYiksZ3B0KEgsby5jKSksbj1uZXcgaGUsQz1uZXcgUyhlLmEpO0MuYTxDLmMuYy5sZW5ndGg7KWZvcih2PXUoSihDKSwxMCksX3QoUSh2LF9pKSwyMzkpP3o1bih2LGopOl90KFEodixfaSksMTg2KSYmIUsmJihyPXUoUSh2LF9pKSwxMTgpLE10PVRsZShlLHYsci5nLHIuZikseDEocixNdC5hLE10LmIpKSxndD1uZXcgUyh2LmopO2d0LmE8Z3QuYy5jLmxlbmd0aDspdHQ9dShKKGd0KSwxMSksbHMoUmkobmV3IFRuKG51bGwsbmV3IF9uKHR0LmcsMTYpKSxuZXcgSWEodikpLG5ldyAkcihuKSk7aWYoSylmb3IoZ3Q9bmV3IFMoSy5qKTtndC5hPGd0LmMuYy5sZW5ndGg7KXR0PXUoSihndCksMTEpLGxzKFJpKG5ldyBUbihudWxsLG5ldyBfbih0dC5nLDE2KSksbmV3IFlpKEspKSxuZXcgRm8obikpO2ZvcihTdD11KHFlKEcsZWcpLDIxOCksZD1uZXcgUyhuKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxNyksdDVuKGgsU3Qsaik7Zm9yKFltbihlKSxrPW5ldyBTKGUuYSk7ay5hPGsuYy5jLmxlbmd0aDspdj11KEooayksMTApLE09di5lLE0mJk9oZSh0LE0pfX1mdW5jdGlvbiBQaGUodCl7TXcodCxuZXcgazIobGJ0KE1SKF93KEV3KEN3KFR3KG5ldyBrZyxWbCksIkVMSyBGb3JjZSIpLCJGb3JjZS1iYXNlZCBhbGdvcml0aG0gcHJvdmlkZWQgYnkgdGhlIEVjbGlwc2UgTGF5b3V0IEtlcm5lbC4gSW1wbGVtZW50cyBtZXRob2RzIHRoYXQgZm9sbG93IHBoeXNpY2FsIGFuYWxvZ2llcyBieSBzaW11bGF0aW5nIGZvcmNlcyB0aGF0IG1vdmUgdGhlIG5vZGVzIGludG8gYSBiYWxhbmNlZCBkaXN0cmlidXRpb24uIEN1cnJlbnRseSB0aGUgb3JpZ2luYWwgRWFkZXMgbW9kZWwgYW5kIHRoZSBGcnVjaHRlcm1hbiAtIFJlaW5nb2xkIG1vZGVsIGFyZSBzdXBwb3J0ZWQuIiksbmV3IFY1KSxWbCksamkoKENFKCksaFUpLGx0KGN0KGZVLDEpLG9lLDIzNywwLFt1VV0pKSkpKSx4ZSh0LFZsLFZJLHBlKDEpKSx4ZSh0LFZsLEN5LDgwKSx4ZSh0LFZsLFZvdCw1KSx4ZSh0LFZsLEU2LEdFKSx4ZSh0LFZsLHRILHBlKDEpKSx4ZSh0LFZsLFJfLChObigpLCEwKSkseGUodCxWbCx4dix4N3QpLHhlKHQsVmwsR0ksSWUodjd0KSkseGUodCxWbCxHb3QsSWUoazd0KSkseGUodCxWbCxlSCwhMSkseGUodCxWbCxqXyxJZSh5N3QpKSx4ZSh0LFZsLFQ2LEllKHdiZSkpLHhlKHQsVmwsRDQsSWUoYmJlKSkseGUodCxWbCxVRSxJZShwYmUpKSx4ZSh0LFZsLFdFLEllKG1iZSkpLHhlKHQsVmwsSnEsSWUobTd0KSkseGUodCxWbCxxb3QsSWUobmx0KSkseGUodCxWbCxwNnQsSWUocFYpKSx4ZSh0LFZsLEhvdCxJZShlbHQpKSx4ZSh0LFZsLGI2dCxJZShFN3QpKX1mdW5jdGlvbiBGaGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEg7aWYoIXUodShBaSh0LnIsZSksMjEpLDg0KS5kYygpKXtpZihoPXUocG8odC5iLGUpLDEyNCksdj1oLmksZD1oLm4sQz1sYXQodCxlKSxyPXYuYi1kLmItZC5jLHM9aC5hLmEsbz12LmMrZC5iLEg9dC53LChDPT0obDQoKSxFYil8fEM9PWlQKSYmdSh1KEFpKHQucixlKSwyMSksODQpLmdjKCk9PTEmJihzPUM9PUViP3MtMip0Lnc6cyxDPUpTKSxyPHMmJiF0LkIuSGMoKGxsKCksclUpKSlDPT1FYj8oSCs9KHItcykvKHUodShBaSh0LnIsZSksMjEpLDg0KS5nYygpKzEpLG8rPUgpOkgrPShyLXMpLyh1KHUoQWkodC5yLGUpLDIxKSw4NCkuZ2MoKS0xKTtlbHNlIHN3aXRjaChyPHMmJihzPUM9PUViP3MtMip0Lnc6cyxDPUpTKSxDLmcpe2Nhc2UgMzpvKz0oci1zKS8yO2JyZWFrO2Nhc2UgNDpvKz1yLXM7YnJlYWs7Y2FzZSAwOm49KHItcykvKHUodShBaSh0LnIsZSksMjEpLDg0KS5nYygpKzEpLEgrPWIuTWF0aC5tYXgoMCxuKSxvKz1IO2JyZWFrO2Nhc2UgMTpuPShyLXMpLyh1KHUoQWkodC5yLGUpLDIxKSw4NCkuZ2MoKS0xKSxIKz1iLk1hdGgubWF4KDAsbil9Zm9yKGo9dSh1KEFpKHQucixlKSwyMSksODQpLktjKCk7ai5PYigpOylNPXUoai5QYigpLDExMSksTS5lLmE9bytNLmQuYixNLmUuYj0oaz1NLmIsay5YZSgodWkoKSxkbCkpP2suSGYoKT09KHZlKCksUG4pPy1rLnJmKCkuYi1YdCh5ZShrLldlKGRsKSkpOlh0KHllKGsuV2UoZGwpKSk6ay5IZigpPT0odmUoKSxQbik/LWsucmYoKS5iOjApLG8rPU0uZC5iK00uYi5yZigpLmErTS5kLmMrSH19ZnVuY3Rpb24gTmhlKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEc7aWYoIXUodShBaSh0LnIsZSksMjEpLDg0KS5kYygpKXtpZihoPXUocG8odC5iLGUpLDEyNCksdj1oLmksZD1oLm4sTT1sYXQodCxlKSxyPXYuYS1kLmQtZC5hLHM9aC5hLmIsbz12LmQrZC5kLEc9dC53LGs9dC5vLmEsKE09PShsNCgpLEViKXx8TT09aVApJiZ1KHUoQWkodC5yLGUpLDIxKSw4NCkuZ2MoKT09MSYmKHM9TT09RWI/cy0yKnQudzpzLE09SlMpLHI8cyYmIXQuQi5IYygobGwoKSxyVSkpKU09PUViPyhHKz0oci1zKS8odSh1KEFpKHQucixlKSwyMSksODQpLmdjKCkrMSksbys9Ryk6Rys9KHItcykvKHUodShBaSh0LnIsZSksMjEpLDg0KS5nYygpLTEpO2Vsc2Ugc3dpdGNoKHI8cyYmKHM9TT09RWI/cy0yKnQudzpzLE09SlMpLE0uZyl7Y2FzZSAzOm8rPShyLXMpLzI7YnJlYWs7Y2FzZSA0Om8rPXItczticmVhaztjYXNlIDA6bj0oci1zKS8odSh1KEFpKHQucixlKSwyMSksODQpLmdjKCkrMSksRys9Yi5NYXRoLm1heCgwLG4pLG8rPUc7YnJlYWs7Y2FzZSAxOm49KHItcykvKHUodShBaSh0LnIsZSksMjEpLDg0KS5nYygpLTEpLEcrPWIuTWF0aC5tYXgoMCxuKX1mb3IoSD11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtILk9iKCk7KWo9dShILlBiKCksMTExKSxqLmUuYT0oQz1qLmIsQy5YZSgodWkoKSxkbCkpP0MuSGYoKT09KHZlKCksQm4pPy1DLnJmKCkuYS1YdCh5ZShDLldlKGRsKSkpOmsrWHQoeWUoQy5XZShkbCkpKTpDLkhmKCk9PSh2ZSgpLEJuKT8tQy5yZigpLmE6ayksai5lLmI9bytqLmQuZCxvKz1qLmQuZCtqLmIucmYoKS5iK2ouZC5hK0d9fWZ1bmN0aW9uIE41bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEs7Zm9yKHQubj1YdCh5ZShRKHQuZywoVGUoKSwkdikpKSksdC5lPVh0KHllKFEodC5nLHEyKSkpLHQuaT10LmcuYi5jLmxlbmd0aCxkPXQuaS0xLGo9MCx0Lmo9MCx0Lms9MCx0LmE9QTEoTnQoamEsZWUsMTksdC5pLDAsMSkpLHQuYj1BMShOdChsYSxlZSwzMzMsdC5pLDcsMSkpLGg9bmV3IFModC5nLmIpO2guYTxoLmMuYy5sZW5ndGg7KXtmb3Iocz11KEooaCksMjkpLHMucD1kLE09bmV3IFMocy5hKTtNLmE8TS5jLmMubGVuZ3RoOylDPXUoSihNKSwxMCksQy5wPWosKytqOy0tZH1mb3IodC5mPU50KENyLFhyLDI1LGosMTUsMSksdC5jPXQyKENyLFtlZSxYcl0sWzQ4LDI1XSwxNSxbaiwzXSwyKSx0Lm89bmV3IGhlLHQucD1uZXcgaGUsZT0wLHQuZD0wLG89bmV3IFModC5nLmIpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3Iocz11KEoobyksMjkpLGQ9cy5wLHI9MCxLPTAsdj1zLmEuYy5sZW5ndGgsaz0wLE09bmV3IFMocy5hKTtNLmE8TS5jLmMubGVuZ3RoOylDPXUoSihNKSwxMCksaj1DLnAsdC5mW2pdPUMuYy5wLGsrPUMuby5iK3QubixuPWowKG5ldyBhcihscihqbyhDKS5hLktjKCksbmV3IHopKSksRz1qMChuZXcgYXIobHIoRHMoQykuYS5LYygpLG5ldyB6KSkpLHQuY1tqXVswXT1HLW4sdC5jW2pdWzFdPW4sdC5jW2pdWzJdPUcscis9bixLKz1HLG4+MCYmbGUodC5wLEMpLGxlKHQubyxDKTtlLT1yLEg9ditlLGsrPWUqdC5lLGNoKHQuYSxkLHBlKEgpKSxjaCh0LmIsZCxrKSx0Lmo9Yi5NYXRoLm1heCh0LmosSCksdC5rPWIuTWF0aC5tYXgodC5rLGspLHQuZCs9ZSxlKz1LfX1mdW5jdGlvbiB2ZSgpe3ZlPVo7dmFyIHQ7Wm89bmV3IE5NKE5fLDApLFBuPW5ldyBOTShLcSwxKSxIbj1uZXcgTk0oSW90LDIpLG1yPW5ldyBOTShPb3QsMyksQm49bmV3IE5NKFBvdCw0KSxVMT0od24oKSxuZXcgczgoKHQ9dShWZihYYSksOSksbmV3IHNoKHQsdShmZih0LHQubGVuZ3RoKSw5KSwwKSkpKSxNZj1qZyhqaShQbixsdChjdChYYSwxKSx4Yyw2MSwwLFtdKSkpLG1oPWpnKGppKEhuLGx0KGN0KFhhLDEpLHhjLDYxLDAsW10pKSksS2w9amcoamkobXIsbHQoY3QoWGEsMSkseGMsNjEsMCxbXSkpKSxWaD1qZyhqaShCbixsdChjdChYYSwxKSx4Yyw2MSwwLFtdKSkpLEF1PWpnKGppKFBuLGx0KGN0KFhhLDEpLHhjLDYxLDAsW21yXSkpKSxsdT1qZyhqaShIbixsdChjdChYYSwxKSx4Yyw2MSwwLFtCbl0pKSksRGY9amcoamkoUG4sbHQoY3QoWGEsMSkseGMsNjEsMCxbQm5dKSkpLGVsPWpnKGppKFBuLGx0KGN0KFhhLDEpLHhjLDYxLDAsW0huXSkpKSxYbD1qZyhqaShtcixsdChjdChYYSwxKSx4Yyw2MSwwLFtCbl0pKSkseWg9amcoamkoSG4sbHQoY3QoWGEsMSkseGMsNjEsMCxbbXJdKSkpLG5sPWpnKGppKFBuLGx0KGN0KFhhLDEpLHhjLDYxLDAsW0huLEJuXSkpKSxTdT1qZyhqaShIbixsdChjdChYYSwxKSx4Yyw2MSwwLFttcixCbl0pKSksTHU9amcoamkoUG4sbHQoY3QoWGEsMSkseGMsNjEsMCxbbXIsQm5dKSkpLFZ1PWpnKGppKFBuLGx0KGN0KFhhLDEpLHhjLDYxLDAsW0huLG1yXSkpKSxVYz1qZyhqaShQbixsdChjdChYYSwxKSx4Yyw2MSwwLFtIbixtcixCbl0pKSl9ZnVuY3Rpb24gQmhlKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdDtpZihlLmIhPTApe2ZvcihIPW5ldyBaaSxkPW51bGwsRz1udWxsLHI9cHMoYi5NYXRoLmZsb29yKGIuTWF0aC5sb2coZS5iKSpiLk1hdGguTE9HMTBFKSsxKSx2PTAsU3Q9ZWkoZSwwKTtTdC5iIT1TdC5kLmM7KWZvcihndD11KHRpKFN0KSw4NiksVnQoRykhPT1WdChRKGd0LChmYygpLHpTKSkpJiYoRz1CcihRKGd0LHpTKSksdj0wKSxHIT1udWxsP2Q9RytpWnQodisrLHIpOmQ9aVp0KHYrKyxyKSxKdChndCx6UyxkKSx0dD0ocz1laShuZXcgTHAoZ3QpLmEuZCwwKSxuZXcgRXgocykpO09SKHR0LmEpOylLPXUodGkodHQuYSksMTg4KS5jLGZzKEgsSyxILmMuYixILmMpLEp0KEsselMsZCk7Zm9yKGo9bmV3IF9yLGg9MDtoPGQubGVuZ3RoLXI7aCsrKWZvcihNdD1laShlLDApO010LmIhPU10LmQuYzspZ3Q9dSh0aShNdCksODYpLGs9UGwoQnIoUShndCwoZmMoKSx6UykpKSwwLGgrMSksbj0oaz09bnVsbD9lYyhMbyhqLmYsbnVsbCkpOktDKGouZyxrKSkhPW51bGw/dShrPT1udWxsP2VjKExvKGouZixudWxsKSk6S0Moai5nLGspLDE5KS5hKzE6MSxrbyhqLGsscGUobikpO2ZvcihNPW5ldyBwMihuZXcgQ2coaikuYSk7TS5iOylDPVp3KE0pLG89cGUodHIodC5hLEMuY2QoKSkhPW51bGw/dSh0cih0LmEsQy5jZCgpKSwxOSkuYTowKSxrbyh0LmEsQnIoQy5jZCgpKSxwZSh1KEMuZGQoKSwxOSkuYStvLmEpKSxvPXUodHIodC5iLEMuY2QoKSksMTkpLCghb3x8by5hPHUoQy5kZCgpLDE5KS5hKSYma28odC5iLEJyKEMuY2QoKSksdShDLmRkKCksMTkpKTtCaGUodCxIKX19ZnVuY3Rpb24gQjVuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndDtmb3IodnIobiwiSW50ZXJhY3RpdmUgbm9kZSBsYXllcmluZyIsMSkscj1uZXcgaGUsSD1uZXcgUyhlLmEpO0guYTxILmMuYy5sZW5ndGg7KXtmb3IoTT11KEooSCksMTApLGs9TS5uLmEsdj1rK00uby5hLHY9Yi5NYXRoLm1heChrKzEsdiksZ3Q9bmV3IGRhKHIsMCkscz1udWxsO2d0LmI8Z3QuZC5nYygpOylpZihLPShabihndC5iPGd0LmQuZ2MoKSksdShndC5kLlhiKGd0LmM9Z3QuYisrKSw1NjkpKSxLLmM+PXYpe1puKGd0LmI+MCksZ3QuYS5YYihndC5jPS0tZ3QuYik7YnJlYWt9ZWxzZSBLLmE+ayYmKHM/KExzKHMuYixLLmIpLHMuYT1iLk1hdGgubWF4KHMuYSxLLmEpLENsKGd0KSk6KGxlKEsuYixNKSxLLmM9Yi5NYXRoLm1pbihLLmMsayksSy5hPWIuTWF0aC5tYXgoSy5hLHYpLHM9SykpO3N8fChzPW5ldyBrcXQscy5jPWsscy5hPXYsem0oZ3QscyksbGUocy5iLE0pKX1mb3IoZD1lLmIsQz0wLHR0PW5ldyBTKHIpO3R0LmE8dHQuYy5jLmxlbmd0aDspZm9yKEs9dShKKHR0KSw1NjkpLG89bmV3IFNoKGUpLG8ucD1DKyssZC5jW2QuYy5sZW5ndGhdPW8sRz1uZXcgUyhLLmIpO0cuYTxHLmMuYy5sZW5ndGg7KU09dShKKEcpLDEwKSxFbyhNLG8pLE0ucD0wO2ZvcihqPW5ldyBTKGUuYSk7ai5hPGouYy5jLmxlbmd0aDspTT11KEooaiksMTApLE0ucD09MCYmbXVlKHQsTSxlKTtmb3IoaD1uZXcgZGEoZCwwKTtoLmI8aC5kLmdjKCk7KShabihoLmI8aC5kLmdjKCkpLHUoaC5kLlhiKGguYz1oLmIrKyksMjkpKS5hLmMubGVuZ3RoPT0wJiZDbChoKTtlLmEuYz1OdChRbixEZSwxLDAsNSwxKSxvcihuKX1mdW5jdGlvbiBSNW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqO2lmKGUuZS5jLmxlbmd0aCE9MCYmbi5lLmMubGVuZ3RoIT0wKXtpZihyPXUoTmUoZS5lLDApLDE3KS5jLmksaD11KE5lKG4uZSwwKSwxNykuYy5pLHI9PWgpcmV0dXJuIHB1KHUoUSh1KE5lKGUuZSwwKSwxNyksKGFlKCksVGMpKSwxOSkuYSx1KFEodShOZShuLmUsMCksMTcpLFRjKSwxOSkuYSk7Zm9yKEM9dC5hLE09MCxqPUMubGVuZ3RoO008ajsrK00pe2lmKGs9Q1tNXSxrPT1yKXJldHVybiAxO2lmKGs9PWgpcmV0dXJuLTF9fXJldHVybiBlLmcuYy5sZW5ndGghPTAmJm4uZy5jLmxlbmd0aCE9MD8obz11KFEoZSwoYWUoKSxXbHQpKSwxMCksdj11KFEobixXbHQpLDEwKSxzPTAsZD0wLFVzKHUoTmUoZS5nLDApLDE3KSxUYykmJihzPXUoUSh1KE5lKGUuZywwKSwxNyksVGMpLDE5KS5hKSxVcyh1KE5lKG4uZywwKSwxNyksVGMpJiYoZD11KFEodShOZShlLmcsMCksMTcpLFRjKSwxOSkuYSksbyYmbz09dj9qZShSZShRKHUoTmUoZS5nLDApLDE3KSxxMSkpKSYmIWplKFJlKFEodShOZShuLmcsMCksMTcpLHExKSkpPzE6IWplKFJlKFEodShOZShlLmcsMCksMTcpLHExKSkpJiZqZShSZShRKHUoTmUobi5nLDApLDE3KSxxMSkpKXx8czxkPy0xOnM+ZD8xOjA6KHQuYiYmKHQuYi5fYihvKSYmKHM9dSh0LmIueGMobyksMTkpLmEpLHQuYi5fYih2KSYmKGQ9dSh0LmIueGModiksMTkpLmEpKSxzPGQ/LTE6cz5kPzE6MCkpOmUuZS5jLmxlbmd0aCE9MCYmbi5nLmMubGVuZ3RoIT0wPzE6LTF9ZnVuY3Rpb24gajVuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZTtmb3IodnIoZSxTMWUsMSksSz1uZXcgaGUsdWU9bmV3IGhlLGs9bmV3IFModC5iKTtrLmE8ay5jLmMubGVuZ3RoOylmb3Iodj11KEooayksMjkpLGd0PS0xLEc9bEQodi5hKSxNPUcsaj0wLEg9TS5sZW5ndGg7ajxIOysrailpZihDPU1bal0sKytndCwhIShDLms9PShWbigpLE9zKSYmRzModShRKEMsKFRlKCksY3MpKSw5OCkpKSl7Zm9yKGp4KHUoUShDLChUZSgpLGNzKSksOTgpKXx8SXduKEMpLEp0KEMsKGFlKCksUHYpLEMpLEsuYz1OdChRbixEZSwxLDAsNSwxKSx1ZS5jPU50KFFuLERlLDEsMCw1LDEpLG49bmV3IGhlLFJ0PW5ldyBaaSx4aXQoUnQsR2coQywodmUoKSxQbikpKSxYaGUodCxSdCxLLHVlLG4pLGQ9Z3QsX2U9QyxvPW5ldyBTKEspO28uYTxvLmMuYy5sZW5ndGg7KXI9dShKKG8pLDEwKSxseShyLGQsdiksKytndCxKdChyLFB2LEMpLGg9dShOZShyLmosMCksMTEpLHR0PXUoUShoLF9pKSwxMSksamUoUmUoUSh0dCxabHQpKSl8fHUoUShyLFI2KSwxNSkuRmMoX2UpO2ZvcihBaChSdCksU3Q9R2coQyxtcikuS2MoKTtTdC5PYigpOylNdD11KFN0LlBiKCksMTEpLGZzKFJ0LE10LFJ0LmEsUnQuYS5hKTtmb3IoWGhlKHQsUnQsdWUsbnVsbCxuKSxLdD1DLHM9bmV3IFModWUpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDEwKSxseShyLCsrZ3QsdiksSnQocixQdixDKSxoPXUoTmUoci5qLDApLDExKSx0dD11KFEoaCxfaSksMTEpLGplKFJlKFEodHQsWmx0KSkpfHx1KFEoS3QsUjYpLDE1KS5GYyhyKTtuLmMubGVuZ3RoPT0wfHxKdChDLHRDdCxuKX1vcihlKX1mdW5jdGlvbiBSaGUodCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuLHpuLGhyLHBpLGpzO2ZvcihNPXUoUSh0LChZcCgpLEk2KSksMzMpLGd0PXdpLE10PXdpLEs9U2EsdHQ9U2EsUnQ9bmV3IFModC5lKTtSdC5hPFJ0LmMuYy5sZW5ndGg7KVN0PXUoSihSdCksMTQ0KSxRZT1TdC5kLFJuPVN0LmUsZ3Q9Yi5NYXRoLm1pbihndCxRZS5hLVJuLmEvMiksTXQ9Yi5NYXRoLm1pbihNdCxRZS5iLVJuLmIvMiksSz1iLk1hdGgubWF4KEssUWUuYStSbi5hLzIpLHR0PWIuTWF0aC5tYXgodHQsUWUuYitSbi5iLzIpO2ZvcihXZT11KHFlKE0sKEpmKCksdmJlKSksMTE2KSxfZT1uZXcgJGUoV2UuYi1ndCxXZS5kLU10KSxkPW5ldyBTKHQuZSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTQ0KSx1ZT1RKGgsSTYpLF90KHVlLDIzOSkmJihIPXUodWUsMzMpLEt0PUxpKGguZCxfZSkseDEoSCxLdC5hLUguZy8yLEt0LmItSC5mLzIpKTtmb3Iocj1uZXcgUyh0LmMpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDI4Miksaz11KFEobixJNiksNzkpLEM9eDQoaywhMCwhMCksem49KHBpPWlhKG5jKG4uZC5kKSxuLmMuZCksbUUocGksbi5jLmUuYSxuLmMuZS5iKSxMaShwaSxuLmMuZCkpLHZqKEMsem4uYSx6bi5iKSxlPShqcz1pYShuYyhuLmMuZCksbi5kLmQpLG1FKGpzLG4uZC5lLmEsbi5kLmUuYiksTGkoanMsbi5kLmQpKSx3aihDLGUuYSxlLmIpO2ZvcihvPW5ldyBTKHQuZCk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksNDQ3KSxqPXUoUShzLEk2KSwxMzcpLEc9TGkocy5kLF9lKSx4MShqLEcuYSxHLmIpO2hyPUstZ3QrKFdlLmIrV2UuYyksdj10dC1NdCsoV2UuZCtXZS5hKSx3dihNLGhyLHYsITEsITApfWZ1bmN0aW9uICQ1bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGo7Zm9yKG49bnVsbCx2PW51bGwscz11KFEodC5iLChUZSgpLGlodCkpLDM3Nikscz09KHBEKCksQk8pJiYobj1uZXcgaGUsdj1uZXcgaGUpLGQ9bmV3IFModC5kKTtkLmE8ZC5jLmMubGVuZ3RoOylpZihoPXUoSihkKSwxMDEpLG89aC5pLCEhbylzd2l0Y2goaC5lLmcpe2Nhc2UgMDplPXUoajkobmV3IE14KGguYikpLDYxKSxzPT1CTyYmZT09KHZlKCksUG4pP24uY1tuLmMubGVuZ3RoXT1oOnM9PUJPJiZlPT0odmUoKSxtcik/di5jW3YuYy5sZW5ndGhdPWg6QzFuKGgsZSk7YnJlYWs7Y2FzZSAxOms9aC5hLmQuaixDPWguYy5kLmosaz09KHZlKCksUG4pP09nKGgsUG4sKEkxKCksZjcpLGguYSk6Qz09UG4/T2coaCxQbiwoSTEoKSxkNyksaC5jKTprPT1tcj9PZyhoLG1yLChJMSgpLGQ3KSxoLmEpOkM9PW1yJiZPZyhoLG1yLChJMSgpLGY3KSxoLmMpO2JyZWFrO2Nhc2UgMjpjYXNlIDM6cj1oLmIsTnUociwodmUoKSxQbikpP051KHIsbXIpP051KHIsQm4pP051KHIsSG4pfHxPZyhoLFBuLChJMSgpLGQ3KSxoLmMpOk9nKGgsUG4sKEkxKCksZjcpLGguYSk6T2coaCxQbiwoSTEoKSxPNiksbnVsbCk6T2coaCxtciwoSTEoKSxPNiksbnVsbCk7YnJlYWs7Y2FzZSA0Ok09aC5hLmQuaixqPWguYS5kLmosTT09KHZlKCksUG4pfHxqPT1Qbj9PZyhoLG1yLChJMSgpLE82KSxudWxsKTpPZyhoLFBuLChJMSgpLE82KSxudWxsKX1uJiYobi5jLmxlbmd0aD09MHx8RGxlKG4sKHZlKCksUG4pKSx2LmMubGVuZ3RoPT0wfHxEbGUodiwodmUoKSxtcikpKX1mdW5jdGlvbiB6NW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLO2ZvcihyPXUoUSh0LChhZSgpLF9pKSksMzMpLEc9dShRKHQsKFRlKCksb0cpKSwxOSkuYSxvPXUoUSh0LGhHKSwxOSkuYSx3byhyLG9HLHBlKEcpKSx3byhyLGhHLHBlKG8pKSxrdShyLHQubi5hK2UuYSksRXUocix0Lm4uYitlLmIpLCh1KHFlKHIsJDIpLDE3NCkuZ2MoKSE9MHx8dC5lfHxWdChRKE5hKHQpLGdHKSk9PT1WdCgodV8oKSxJUykpJiZfVXQoKGN5KCksKHQucT90LnE6KHduKCksd24oKSx1MCkpLl9iKEJ2KT9qPXUoUSh0LEJ2KSwxOTcpOmo9dShRKE5hKHQpLEFTKSwxOTcpLGopKSkmJih0dihyLHQuby5hKSxKdyhyLHQuby5iKSksTT1uZXcgUyh0LmopO00uYTxNLmMuYy5sZW5ndGg7KWs9dShKKE0pLDExKSxLPVEoayxfaSksX3QoSywxODYpJiYocz11KEssMTE4KSx4MShzLGsubi5hLGsubi5iKSx3byhzLEM3LGsuaikpO2ZvcihIPXUoUSh0LE52KSwxNzQpLmdjKCkhPTAsdj1uZXcgUyh0LmIpO3YuYTx2LmMuYy5sZW5ndGg7KWg9dShKKHYpLDcwKSwoSHx8dShRKGgsTnYpLDE3NCkuZ2MoKSE9MCkmJihuPXUoUShoLF9pKSwxMzcpLGJqKG4saC5vLmEsaC5vLmIpLHgxKG4saC5uLmEsaC5uLmIpKTtpZighUzkodShRKHQsR3kpLDIxKSkpZm9yKEM9bmV3IFModC5qKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3Ioaz11KEooQyksMTEpLGQ9bmV3IFMoay5mKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSw3MCksbj11KFEoaCxfaSksMTM3KSx0dihuLGguby5hKSxKdyhuLGguby5iKSx4MShuLGgubi5hLGgubi5iKX1mdW5jdGlvbiBxNW4odCl7dmFyIGUsbixyLHMsbztzd2l0Y2goc0QodCxYZGUpLCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYikuaSsoIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmMpLmkpe2Nhc2UgMDp0aHJvdyBpdChuZXcgRm4oIlRoZSBlZGdlIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc291cmNlIG9yIHRhcmdldC4iKSk7Y2FzZSAxOnJldHVybighdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYikuaT09MD9lcyhEbyh1KEF0KCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYyksMCksODIpKSk6ZXMoRG8odShBdCgoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLDApLDgyKSkpfWlmKCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYikuaT09MSYmKCF0LmMmJih0LmM9bmV3IENuKGJyLHQsNSw4KSksdC5jKS5pPT0xKXtpZihzPURvKHUoQXQoKCF0LmImJih0LmI9bmV3IENuKGJyLHQsNCw3KSksdC5iKSwwKSw4MikpLG89RG8odShBdCgoIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmMpLDApLDgyKSksZXMocyk9PWVzKG8pKXJldHVybiBlcyhzKTtpZihzPT1lcyhvKSlyZXR1cm4gcztpZihvPT1lcyhzKSlyZXR1cm4gb31mb3Iocj16cChEMShsdChjdChqMSwxKSxEZSwyMCwwLFsoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYyldKSkpLGU9RG8odShNcihyKSw4MikpO3pyKHIpOylpZihuPURvKHUoTXIociksODIpKSxuIT1lJiYhZXkobixlKSl7aWYoZXMobik9PWVzKGUpKWU9ZXMobik7ZWxzZSBpZihlPVMybihlLG4pLCFlKXJldHVybiBudWxsfXJldHVybiBlfWZ1bmN0aW9uIEg1bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQ7Zm9yKHZyKG4sIlBvbHlsaW5lIGVkZ2Ugcm91dGluZyIsMSksdHQ9WHQoeWUoUShlLChUZSgpLEtDdCkpKSksSD1YdCh5ZShRKGUsdDUpKSkscz1YdCh5ZShRKGUsSjQpKSkscj1iLk1hdGgubWluKDEscy9IKSxTdD0wLHY9MCxlLmIuYy5sZW5ndGghPTAmJihSdD1SY2UodShOZShlLmIsMCksMjkpKSxTdD0uNCpyKlJ0KSxkPW5ldyBkYShlLmIsMCk7ZC5iPGQuZC5nYygpOyl7Zm9yKGg9KFpuKGQuYjxkLmQuZ2MoKSksdShkLmQuWGIoZC5jPWQuYisrKSwyOSkpLG89ZmooaCxqTyksbyYmU3Q+MCYmKFN0LT1IKSxteHQoaCxTdCksQz0wLGo9bmV3IFMoaC5hKTtqLmE8ai5jLmMubGVuZ3RoOyl7Zm9yKE09dShKKGopLDEwKSxrPTAsSz1uZXcgYXIobHIoRHMoTSkuYS5LYygpLG5ldyB6KSk7enIoSyk7KUc9dShNcihLKSwxNyksZ3Q9XzEoRy5jKS5iLE10PV8xKEcuZCkuYixoPT1HLmQuaS5jJiYhR2EoRykmJihkYm4oRyxTdCwuNCpyKmIuTWF0aC5hYnMoZ3QtTXQpKSxHLmMuaj09KHZlKCksQm4pJiYoZ3Q9MCxNdD0wKSksaz1iLk1hdGgubWF4KGssYi5NYXRoLmFicyhNdC1ndCkpO3N3aXRjaChNLmsuZyl7Y2FzZSAwOmNhc2UgNDpjYXNlIDE6Y2FzZSAzOmNhc2UgNTp1NG4odCxNLFN0LHR0KX1DPWIuTWF0aC5tYXgoQyxrKX1kLmI8ZC5kLmdjKCkmJihSdD1SY2UoKFpuKGQuYjxkLmQuZ2MoKSksdShkLmQuWGIoZC5jPWQuYisrKSwyOSkpKSxDPWIuTWF0aC5tYXgoQyxSdCksWm4oZC5iPjApLGQuYS5YYihkLmM9LS1kLmIpKSx2PS40KnIqQywhbyYmZC5iPGQuZC5nYygpJiYodis9SCksU3QrPWguYy5hK3Z9dC5hLmEuJGIoKSxlLmYuYT1TdCxvcihuKX1mdW5jdGlvbiBWNW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10O2ZvcihDPW5ldyBfcix2PW5ldyBVdyxyPW5ldyBTKHQuYS5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KWlmKGU9dShKKHIpLDU3KSxrPXQ0KGUpLGspYXUoQy5mLGssZSk7ZWxzZSBpZihNdD1YeChlKSxNdClmb3Iobz1uZXcgUyhNdC5rKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxNyksbG4odixzLGUpO2ZvcihuPW5ldyBTKHQuYS5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWlmKGU9dShKKG4pLDU3KSxrPXQ0KGUpLGspe2ZvcihkPW5ldyBhcihscihEcyhrKS5hLktjKCksbmV3IHopKTt6cihkKTspaWYoaD11KE1yKGQpLDE3KSwhR2EoaCkmJihHPWguYyxndD1oLmQsISgodmUoKSxBdSkuSGMoaC5jLmopJiZBdS5IYyhoLmQuaikpKSl7aWYoSz11KHRyKEMsaC5kLmkpLDU3KSx5ZihsZih1ZihoZihjZihuZXcgQ2gsMCksMTAwKSx0LmNbZS5hLmRdKSx0LmNbSy5hLmRdKSksRy5qPT1CbiYmVkt0KChqdSgpLEcpKSl7Zm9yKGo9dShBaSh2LGgpLDIxKS5LYygpO2ouT2IoKTspaWYoTT11KGouUGIoKSw1NyksTS5kLmM8ZS5kLmMpe2lmKEg9dC5jW00uYS5kXSx0dD10LmNbZS5hLmRdLEg9PXR0KWNvbnRpbnVlO3lmKGxmKHVmKGhmKGNmKG5ldyBDaCwxKSwxMDApLEgpLHR0KSl9fWlmKGd0Lmo9PUhuJiZIS3QoKGp1KCksZ3QpKSl7Zm9yKGo9dShBaSh2LGgpLDIxKS5LYygpO2ouT2IoKTspaWYoTT11KGouUGIoKSw1NyksTS5kLmM+ZS5kLmMpe2lmKEg9dC5jW2UuYS5kXSx0dD10LmNbTS5hLmRdLEg9PXR0KWNvbnRpbnVlO3lmKGxmKHVmKGhmKGNmKG5ldyBDaCwxKSwxMDApLEgpLHR0KSl9fX19fWZ1bmN0aW9uIE14dCh0KXtGYXQoKTt2YXIgZSxuLHIscyxvLGgsZCx2O2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7aWYocz1oZCh0LEN1KDM3KSksczwwKXJldHVybiB0O2Zvcih2PW5ldyBPbCh0LnN1YnN0cigwLHMpKSxlPU50KEd1LE40LDI1LDQsMTUsMSksZD0wLHI9MCxoPXQubGVuZ3RoO3M8aDtzKyspaWYoUnIocyx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHMpPT0zNyYmdC5sZW5ndGg+cysyJiZTaXQoKFJyKHMrMSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHMrMSkpLHRMdCxlTHQpJiZTaXQoKFJyKHMrMix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHMrMikpLHRMdCxlTHQpKWlmKG49ZmVuKChScihzKzEsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChzKzEpKSwoUnIocysyLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQocysyKSkpLHMrPTIscj4wPyhuJjE5Mik9PTEyOD9lW2QrK109bjw8MjQ+PjI0OnI9MDpuPj0xMjgmJigobiYyMjQpPT0xOTI/KGVbZCsrXT1uPDwyND4+MjQscj0yKToobiYyNDApPT0yMjQ/KGVbZCsrXT1uPDwyND4+MjQscj0zKToobiYyNDgpPT0yNDAmJihlW2QrK109bjw8MjQ+PjI0LHI9NCkpLHI+MCl7aWYoZD09cil7c3dpdGNoKGQpe2Nhc2UgMjp7cXAodiwoKGVbMF0mMzEpPDw2fGVbMV0mNjMpJnlzKTticmVha31jYXNlIDM6e3FwKHYsKChlWzBdJjE1KTw8MTJ8KGVbMV0mNjMpPDw2fGVbMl0mNjMpJnlzKTticmVha319ZD0wLHI9MH19ZWxzZXtmb3Iobz0wO288ZDsrK28pcXAodixlW29dJnlzKTtkPTAsdi5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG4pfWVsc2V7Zm9yKG89MDtvPGQ7KytvKXFwKHYsZVtvXSZ5cyk7ZD0wLHFwKHYsKFJyKHMsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChzKSkpfXJldHVybiB2LmF9ZnVuY3Rpb24gamhlKHQsZSxuLHIscyl7dmFyIG8saCxkO2lmKGFlZSh0LGUpLGg9ZVswXSxvPXdhKG4uYywwKSxkPS0xLE55dChuKSlpZihyPjApe2lmKGgrcj50Lmxlbmd0aClyZXR1cm4hMTtkPWdxKHQuc3Vic3RyKDAsaCtyKSxlKX1lbHNlIGQ9Z3EodCxlKTtzd2l0Y2gobyl7Y2FzZSA3MTpyZXR1cm4gZD13NCh0LGgsbHQoY3QoQWUsMSksZWUsMiw2LFttZmUseWZlXSksZSkscy5lPWQsITA7Y2FzZSA3NzpyZXR1cm4gX3ZuKHQsZSxzLGQsaCk7Y2FzZSA3NjpyZXR1cm4gU3ZuKHQsZSxzLGQsaCk7Y2FzZSA2OTpyZXR1cm4gdnBuKHQsZSxoLHMpO2Nhc2UgOTk6cmV0dXJuIG1wbih0LGUsaCxzKTtjYXNlIDk3OnJldHVybiBkPXc0KHQsaCxsdChjdChBZSwxKSxlZSwyLDYsWyJBTSIsIlBNIl0pLGUpLHMuYj1kLCEwO2Nhc2UgMTIxOnJldHVybiBBdm4odCxlLGgsZCxuLHMpO2Nhc2UgMTAwOnJldHVybiBkPD0wPyExOihzLmM9ZCwhMCk7Y2FzZSA4MzpyZXR1cm4gZDwwPyExOklobihkLGgsZVswXSxzKTtjYXNlIDEwNDpkPT0xMiYmKGQ9MCk7Y2FzZSA3NTpjYXNlIDcyOnJldHVybiBkPDA/ITE6KHMuZj1kLHMuZz0hMSwhMCk7Y2FzZSAxMDc6cmV0dXJuIGQ8MD8hMToocy5mPWQscy5nPSEwLCEwKTtjYXNlIDEwOTpyZXR1cm4gZDwwPyExOihzLmo9ZCwhMCk7Y2FzZSAxMTU6cmV0dXJuIGQ8MD8hMToocy5uPWQsITApO2Nhc2UgOTA6aWYoaDx0Lmxlbmd0aCYmKFJyKGgsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChoKT09OTApKXJldHVybisrZVswXSxzLm89MCwhMDtjYXNlIDEyMjpjYXNlIDExODpyZXR1cm4gSDBuKHQsaCxlLHMpO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIEc1bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWU7aWYoaj11KHUoQWkodC5yLGUpLDIxKSw4NCksZT09KHZlKCksSG4pfHxlPT1Cbil7RGhlKHQsZSk7cmV0dXJufWZvcihvPWU9PVBuPyhydigpLGxPKToocnYoKSxoTyksUnQ9ZT09UG4/KHl1KCksbjEpOih5dSgpLEVmKSxuPXUocG8odC5iLGUpLDEyNCkscj1uLmkscz1yLmMrczQobHQoY3QoYWEsMSksdm8sMjUsMTUsW24ubi5iLHQuQy5iLHQua10pKSxndD1yLmMrci5iLXM0KGx0KGN0KGFhLDEpLHZvLDI1LDE1LFtuLm4uYyx0LkMuYyx0LmtdKSksaD1jYnQoX3d0KG8pLHQudCksTXQ9ZT09UG4/Q3M6YXMsTT1qLktjKCk7TS5PYigpOylrPXUoTS5QYigpLDExMSksISghay5jfHxrLmMuZC5jLmxlbmd0aDw9MCkmJih0dD1rLmIucmYoKSxLPWsuZSxIPWsuYyxHPUguaSxHLmI9KHY9SC5uLEguZS5hK3YuYit2LmMpLEcuYT0oZD1ILm4sSC5lLmIrZC5kK2QuYSksc0QoUnQsbjZ0KSxILmY9UnQsV2YoSCwoUXUoKSxrZikpLEcuYz1LLmEtKEcuYi10dC5hKS8yLEt0PWIuTWF0aC5taW4ocyxLLmEpLHVlPWIuTWF0aC5tYXgoZ3QsSy5hK3R0LmEpLEcuYzxLdD9HLmM9S3Q6Ry5jK0cuYj51ZSYmKEcuYz11ZS1HLmIpLGxlKGguZCxuZXcgSG50KEcsYTN0KGgsRykpKSxNdD1lPT1Qbj9iLk1hdGgubWF4KE10LEsuYitrLmIucmYoKS5iKTpiLk1hdGgubWluKE10LEsuYikpO2ZvcihNdCs9ZT09UG4/dC50Oi10LnQsU3Q9azN0KChoLmU9TXQsaCkpLFN0PjAmJih1KHBvKHQuYixlKSwxMjQpLmEuYj1TdCksQz1qLktjKCk7Qy5PYigpOylrPXUoQy5QYigpLDExMSksISghay5jfHxrLmMuZC5jLmxlbmd0aDw9MCkmJihHPWsuYy5pLEcuYy09ay5lLmEsRy5kLT1rLmUuYil9ZnVuY3Rpb24gVTVuKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0saixIO2ZvcihlPW5ldyBfcix2PW5ldyBucih0KTt2LmUhPXYuaS5nYygpOyl7Zm9yKGQ9dShkcih2KSwzMyksbj1uZXcgSHMsa2koSnV0LGQsbiksSD1uZXcgYm0scz11KEJsKG5ldyBUbihudWxsLG5ldyBqdyhuZXcgYXIobHIod0koZCkuYS5LYygpLG5ldyB6KSkpKSxMS3QoSCxjMihuZXcga2UsbmV3IGNlLG5ldyBYbixsdChjdChmbCwxKSxvZSwxMzIsMCxbKE8xKCksVWwpXSkpKSksODMpLFplZShuLHUocy54YygoTm4oKSwhMCkpLDE0KSxuZXcgRWspLHI9dShCbChSaSh1KHMueGMoITEpLDE1KS5MYygpLG5ldyBFMyksYzIobmV3IGtlLG5ldyBjZSxuZXcgWG4sbHQoY3QoZmwsMSksb2UsMTMyLDAsW1VsXSkpKSwxNSksaD1yLktjKCk7aC5PYigpOylvPXUoaC5QYigpLDc5KSxqPVJhZShvKSxqJiYoaz11KGVjKExvKGUuZixqKSksMjEpLGt8fChrPWl1ZShqKSxhdShlLmYsaixrKSksVWEobixrKSk7Zm9yKHM9dShCbChuZXcgVG4obnVsbCxuZXcgancobmV3IGFyKGxyKEswKGQpLmEuS2MoKSxuZXcgeikpKSksTEt0KEgsYzIobmV3IGtlLG5ldyBjZSxuZXcgWG4sbHQoY3QoZmwsMSksb2UsMTMyLDAsW1VsXSkpKSksODMpLFplZShuLHUocy54YyghMCksMTQpLG5ldyBJbCkscj11KEJsKFJpKHUocy54YyghMSksMTUpLkxjKCksbmV3IEwwKSxjMihuZXcga2UsbmV3IGNlLG5ldyBYbixsdChjdChmbCwxKSxvZSwxMzIsMCxbVWxdKSkpLDE1KSxNPXIuS2MoKTtNLk9iKCk7KUM9dShNLlBiKCksNzkpLGo9amFlKEMpLGomJihrPXUoZWMoTG8oZS5mLGopKSwyMSksa3x8KGs9aXVlKGopLGF1KGUuZixqLGspKSxVYShuLGspKX19ZnVuY3Rpb24gVzVuKHQsZSl7TGF0KCk7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSztpZih2PXljKHQsMCk8MCx2JiYodD16OCh0KSkseWModCwwKT09MClzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiIwIjtjYXNlIDE6cmV0dXJuICRFO2Nhc2UgMjpyZXR1cm4iMC4wMCI7Y2FzZSAzOnJldHVybiIwLjAwMCI7Y2FzZSA0OnJldHVybiIwLjAwMDAiO2Nhc2UgNTpyZXR1cm4iMC4wMDAwMCI7Y2FzZSA2OnJldHVybiIwLjAwMDAwMCI7ZGVmYXVsdDpyZXR1cm4gSD1uZXcgTXAsZTwwP0guYSs9IjBFKyI6SC5hKz0iMEUiLEguYSs9ZT09U2E/IjIxNDc0ODM2NDgiOiIiKy1lLEguYX1DPTE4LE09TnQoeGgseWQsMjUsQysxLDE1LDEpLG49QyxLPXQ7ZG8gaz1LLEs9YUkoSywxMCksTVstLW5dPUFyKFBhKDQ4LEpwKGssX2EoSywxMCkpKSkmeXM7d2hpbGUoeWMoSywwKSE9MCk7aWYocz1KcChKcChKcChDLG4pLGUpLDEpLGU9PTApcmV0dXJuIHYmJihNWy0tbl09NDUpLE1oKE0sbixDLW4pO2lmKGU+MCYmeWMocywtNik+PTApe2lmKHljKHMsMCk+PTApe2ZvcihvPW4rQXIocyksZD1DLTE7ZD49bztkLS0pTVtkKzFdPU1bZF07cmV0dXJuIE1bKytvXT00Nix2JiYoTVstLW5dPTQ1KSxNaChNLG4sQy1uKzEpfWZvcihoPTI7Q2V0KGgsUGEoejgocyksMSkpO2grKylNWy0tbl09NDg7cmV0dXJuIE1bLS1uXT00NixNWy0tbl09NDgsdiYmKE1bLS1uXT00NSksTWgoTSxuLEMtbil9cmV0dXJuIEc9bisxLHI9QyxqPW5ldyBJbSx2JiYoai5hKz0iLSIpLHItRz49MT8ocXAoaixNW25dKSxqLmErPSIuIixqLmErPU1oKE0sbisxLEMtbi0xKSk6ai5hKz1NaChNLG4sQy1uKSxqLmErPSJFIix5YyhzLDApPjAmJihqLmErPSIrIiksai5hKz0iIitfOShzKSxqLmF9ZnVuY3Rpb24gWTVuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixIO2lmKHQuZS5hLiRiKCksdC5mLmEuJGIoKSx0LmMuYz1OdChRbixEZSwxLDAsNSwxKSx0LmkuYz1OdChRbixEZSwxLDAsNSwxKSx0LmcuYS4kYigpLGUpZm9yKGg9bmV3IFMoZS5hKTtoLmE8aC5jLmMubGVuZ3RoOylmb3Iobz11KEooaCksMTApLE09R2cobywodmUoKSxIbikpLktjKCk7TS5PYigpOylmb3IoQz11KE0uUGIoKSwxMSksRnModC5lLEMpLHM9bmV3IFMoQy5nKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxNyksIUdhKHIpJiYobGUodC5jLHIpLGxzZSh0LHIpLGQ9ci5jLmkuaywoZD09KFZuKCksT3MpfHxkPT1IY3x8ZD09a3N8fGQ9PXoxKSYmbGUodC5qLHIpLEg9ci5kLGo9SC5pLmMsaj09bj9Gcyh0LmYsSCk6aj09ZT9Gcyh0LmUsSCk6bXUodC5jLHIpKTtpZihuKWZvcihoPW5ldyBTKG4uYSk7aC5hPGguYy5jLmxlbmd0aDspe2ZvcihvPXUoSihoKSwxMCksaz1uZXcgUyhvLmopO2suYTxrLmMuYy5sZW5ndGg7KWZvcih2PXUoSihrKSwxMSkscz1uZXcgUyh2LmcpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDE3KSxHYShyKSYmRnModC5nLHIpO2ZvcihNPUdnKG8sKHZlKCksQm4pKS5LYygpO00uT2IoKTspZm9yKEM9dShNLlBiKCksMTEpLEZzKHQuZixDKSxzPW5ldyBTKEMuZyk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTcpLCFHYShyKSYmKGxlKHQuYyxyKSxsc2UodCxyKSxkPXIuYy5pLmssKGQ9PShWbigpLE9zKXx8ZD09SGN8fGQ9PWtzfHxkPT16MSkmJmxlKHQuaixyKSxIPXIuZCxqPUguaS5jLGo9PW4/RnModC5mLEgpOmo9PWU/RnModC5lLEgpOm11KHQuYyxyKSl9fWZ1bmN0aW9uIHd2KHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZTtpZih0dD1uZXcgJGUodC5nLHQuZiksSz1RNHQodCksSy5hPWIuTWF0aC5tYXgoSy5hLGUpLEsuYj1iLk1hdGgubWF4KEsuYixuKSx1ZT1LLmEvdHQuYSxDPUsuYi90dC5iLFJ0PUsuYS10dC5hLHY9Sy5iLXR0LmIscilmb3IoaD1lcyh0KT91KHFlKGVzKHQpLCh1aSgpLHF2KSksMTAzKTp1KHFlKHQsKHVpKCkscXYpKSwxMDMpLGQ9VnQocWUodCwodWkoKSxLUykpKT09PVZ0KCh1YSgpLEdjKSksTXQ9bmV3IG5yKCghdC5jJiYodC5jPW5ldyBmZShnbCx0LDksOSkpLHQuYykpO010LmUhPU10LmkuZ2MoKTspc3dpdGNoKGd0PXUoZHIoTXQpLDExOCksU3Q9dShxZShndCx1NSksNjEpLFN0PT0odmUoKSxabykmJihTdD11eHQoZ3QsaCksd28oZ3QsdTUsU3QpKSxTdC5nKXtjYXNlIDE6ZHx8a3UoZ3QsZ3QuaSp1ZSk7YnJlYWs7Y2FzZSAyOmt1KGd0LGd0LmkrUnQpLGR8fEV1KGd0LGd0LmoqQyk7YnJlYWs7Y2FzZSAzOmR8fGt1KGd0LGd0LmkqdWUpLEV1KGd0LGd0Lmordik7YnJlYWs7Y2FzZSA0OmR8fEV1KGd0LGd0LmoqQyl9aWYoYmoodCxLLmEsSy5iKSxzKWZvcihqPW5ldyBucigoIXQubiYmKHQubj1uZXcgZmUocW8sdCwxLDcpKSx0Lm4pKTtqLmUhPWouaS5nYygpOylNPXUoZHIoaiksMTM3KSxIPU0uaStNLmcvMixHPU0uaitNLmYvMixLdD1IL3R0LmEsaz1HL3R0LmIsS3Qraz49MSYmKEt0LWs+MCYmRz49MD8oa3UoTSxNLmkrUnQpLEV1KE0sTS5qK3YqaykpOkt0LWs8MCYmSD49MCYmKGt1KE0sTS5pK1J0Kkt0KSxFdShNLE0uait2KSkpO3JldHVybiB3byh0LCh1aSgpLEcyKSwoQWwoKSxvPXUoVmYockEpLDkpLG5ldyBzaChvLHUoZmYobyxvLmxlbmd0aCksOSksMCkpKSxuZXcgJGUodWUsQyl9ZnVuY3Rpb24gJGhlKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0saixILEc7aWYoSD1lcyhEbyh1KEF0KCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYiksMCksODIpKSksRz1lcyhEbyh1KEF0KCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYyksMCksODIpKSksTT1IPT1HLGQ9bmV3IENhLGU9dShxZSh0LChTeigpLF9BdCkpLDc0KSxlJiZlLmI+PTIpe2lmKCghdC5hJiYodC5hPW5ldyBmZShKaSx0LDYsNikpLHQuYSkuaT09MCluPShTdygpLHM9bmV3IGFkLHMpLERyKCghdC5hJiYodC5hPW5ldyBmZShKaSx0LDYsNikpLHQuYSksbik7ZWxzZSBpZigoIXQuYSYmKHQuYT1uZXcgZmUoSmksdCw2LDYpKSx0LmEpLmk+MSlmb3Ioaj1uZXcgTngoKCF0LmEmJih0LmE9bmV3IGZlKEppLHQsNiw2KSksdC5hKSk7ai5lIT1qLmkuZ2MoKTspZl8oaik7Q0koZSx1KEF0KCghdC5hJiYodC5hPW5ldyBmZShKaSx0LDYsNikpLHQuYSksMCksMjAyKSl9aWYoTSlmb3Iocj1uZXcgbnIoKCF0LmEmJih0LmE9bmV3IGZlKEppLHQsNiw2KSksdC5hKSk7ci5lIT1yLmkuZ2MoKTspZm9yKG49dShkcihyKSwyMDIpLGs9bmV3IG5yKCghbi5hJiYobi5hPW5ldyBBcyhHaCxuLDUpKSxuLmEpKTtrLmUhPWsuaS5nYygpOyl2PXUoZHIoayksNDY5KSxkLmE9Yi5NYXRoLm1heChkLmEsdi5hKSxkLmI9Yi5NYXRoLm1heChkLmIsdi5iKTtmb3IoaD1uZXcgbnIoKCF0Lm4mJih0Lm49bmV3IGZlKHFvLHQsMSw3KSksdC5uKSk7aC5lIT1oLmkuZ2MoKTspbz11KGRyKGgpLDEzNyksQz11KHFlKG8sUVMpLDgpLEMmJngxKG8sQy5hLEMuYiksTSYmKGQuYT1iLk1hdGgubWF4KGQuYSxvLmkrby5nKSxkLmI9Yi5NYXRoLm1heChkLmIsby5qK28uZikpO3JldHVybiBkfWZ1bmN0aW9uIEs1bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2U7Zm9yKFN0PWUuYy5sZW5ndGgscz1uZXcgRTQodC5hLG4sbnVsbCxudWxsKSxXZT1OdChhYSx2bywyNSxTdCwxNSwxKSxLPU50KGFhLHZvLDI1LFN0LDE1LDEpLEc9TnQoYWEsdm8sMjUsU3QsMTUsMSksdHQ9MCxkPTA7ZDxTdDtkKyspS1tkXT13aSxHW2RdPVNhO2Zvcih2PTA7djxTdDt2KyspZm9yKHI9KEFuKHYsZS5jLmxlbmd0aCksdShlLmNbdl0sMTgwKSksV2Vbdl09aWF0KHIpLFdlW3R0XT5XZVt2XSYmKHR0PXYpLE09bmV3IFModC5hLmIpO00uYTxNLmMuYy5sZW5ndGg7KWZvcihDPXUoSihNKSwyOSksTXQ9bmV3IFMoQy5hKTtNdC5hPE10LmMuYy5sZW5ndGg7KWd0PXUoSihNdCksMTApLHVlPVh0KHIucFtndC5wXSkrWHQoci5kW2d0LnBdKSxLW3ZdPWIuTWF0aC5taW4oS1t2XSx1ZSksR1t2XT1iLk1hdGgubWF4KEdbdl0sdWUrZ3Quby5iKTtmb3IoX2U9TnQoYWEsdm8sMjUsU3QsMTUsMSksaz0wO2s8U3Q7aysrKShBbihrLGUuYy5sZW5ndGgpLHUoZS5jW2tdLDE4MCkpLm89PShDMSgpLEgyKT9fZVtrXT1LW3R0XS1LW2tdOl9lW2tdPUdbdHRdLUdba107Zm9yKG89TnQoYWEsdm8sMjUsU3QsMTUsMSksSD1uZXcgUyh0LmEuYik7SC5hPEguYy5jLmxlbmd0aDspZm9yKGo9dShKKEgpLDI5KSxLdD1uZXcgUyhqLmEpO0t0LmE8S3QuYy5jLmxlbmd0aDspe2ZvcihSdD11KEooS3QpLDEwKSxoPTA7aDxTdDtoKyspb1toXT1YdCgoQW4oaCxlLmMubGVuZ3RoKSx1KGUuY1toXSwxODApKS5wW1J0LnBdKStYdCgoQW4oaCxlLmMubGVuZ3RoKSx1KGUuY1toXSwxODApKS5kW1J0LnBdKStfZVtoXTtvLnNvcnQoRmVlKFR0LnByb3RvdHlwZS50ZSxUdCxbXSkpLHMucFtSdC5wXT0ob1sxXStvWzJdKS8yLHMuZFtSdC5wXT0wfXJldHVybiBzfWZ1bmN0aW9uIFg1bih0LGUsbil7dmFyIHIscyxvLGgsZDtzd2l0Y2gocj1lLmksbz10LmkubyxzPXQuaS5kLGQ9dC5uLGg9WW8obHQoY3QoV3MsMSksZWUsOCwwLFtkLHQuYV0pKSx0LmouZyl7Y2FzZSAxOmRkKGUsKHl1KCksRWYpKSxyLmQ9LXMuZC1uLXIuYSx1KHUoTmUoZS5kLDApLDE4MSkuV2UoKGFlKCksajYpKSwyODUpPT0oemwoKSxmMCk/KFdmKGUsKFF1KCksa2YpKSxyLmM9aC5hLVh0KHllKFEodCxLNCkpKS1uLXIuYik6KFdmKGUsKFF1KCksTWQpKSxyLmM9aC5hK1h0KHllKFEodCxLNCkpKStuKTticmVhaztjYXNlIDI6V2YoZSwoUXUoKSxNZCkpLHIuYz1vLmErcy5jK24sdSh1KE5lKGUuZCwwKSwxODEpLldlKChhZSgpLGo2KSksMjg1KT09KHpsKCksZjApPyhkZChlLCh5dSgpLEVmKSksci5kPWguYi1YdCh5ZShRKHQsSzQpKSktbi1yLmEpOihkZChlLCh5dSgpLG4xKSksci5kPWguYitYdCh5ZShRKHQsSzQpKSkrbik7YnJlYWs7Y2FzZSAzOmRkKGUsKHl1KCksbjEpKSxyLmQ9by5iK3MuYStuLHUodShOZShlLmQsMCksMTgxKS5XZSgoYWUoKSxqNikpLDI4NSk9PSh6bCgpLGYwKT8oV2YoZSwoUXUoKSxrZikpLHIuYz1oLmEtWHQoeWUoUSh0LEs0KSkpLW4tci5iKTooV2YoZSwoUXUoKSxNZCkpLHIuYz1oLmErWHQoeWUoUSh0LEs0KSkpK24pO2JyZWFrO2Nhc2UgNDpXZihlLChRdSgpLGtmKSksci5jPS1zLmItbi1yLmIsdSh1KE5lKGUuZCwwKSwxODEpLldlKChhZSgpLGo2KSksMjg1KT09KHpsKCksZjApPyhkZChlLCh5dSgpLEVmKSksci5kPWguYi1YdCh5ZShRKHQsSzQpKSktbi1yLmEpOihkZChlLCh5dSgpLG4xKSksci5kPWguYitYdCh5ZShRKHQsSzQpKSkrbil9fWZ1bmN0aW9uIFE1bih0LGUsbixyLHMsbyxoKXt2YXIgZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWUsUm4sem4saHIscGksanM7Zm9yKEg9MCxSbj0wLHY9bmV3IFModCk7di5hPHYuYy5jLmxlbmd0aDspZD11KEoodiksMzMpLEVoZShkKSxIPWIuTWF0aC5tYXgoSCxkLmcpLFJuKz1kLmcqZC5mO2ZvcihHPVJuL3QuYy5sZW5ndGgsUWU9SjFuKHQsRyksUm4rPXQuYy5sZW5ndGgqUWUsSD1iLk1hdGgubWF4KEgsYi5NYXRoLnNxcnQoUm4qaCkpK24uYixwaT1uLmIsanM9bi5kLGo9MCxDPW4uYituLmMsV2U9bmV3IFppLHJpKFdlLHBlKDApKSx1ZT1uZXcgWmksaz1uZXcgZGEodCwwKTtrLmI8ay5kLmdjKCk7KWQ9KFpuKGsuYjxrLmQuZ2MoKSksdShrLmQuWGIoay5jPWsuYisrKSwzMykpLGhyPWQuZyxNPWQuZixwaStocj5IJiYobyYmKFpiKHVlLGopLFpiKFdlLHBlKGsuYi0xKSkpLHBpPW4uYixqcys9aitlLGo9MCxDPWIuTWF0aC5tYXgoQyxuLmIrbi5jK2hyKSksa3UoZCxwaSksRXUoZCxqcyksQz1iLk1hdGgubWF4KEMscGkraHIrbi5jKSxqPWIuTWF0aC5tYXgoaixNKSxwaSs9aHIrZTtpZihDPWIuTWF0aC5tYXgoQyxyKSx6bj1qcytqK24uYSx6bjxzJiYoais9cy16bix6bj1zKSxvKWZvcihwaT1uLmIsaz1uZXcgZGEodCwwKSxaYihXZSxwZSh0LmMubGVuZ3RoKSksX2U9ZWkoV2UsMCksZ3Q9dSh0aShfZSksMTkpLmEsWmIodWUsaiksS3Q9ZWkodWUsMCksUnQ9MDtrLmI8ay5kLmdjKCk7KWsuYj09Z3QmJihwaT1uLmIsUnQ9WHQoeWUodGkoS3QpKSksZ3Q9dSh0aShfZSksMTkpLmEpLGQ9KFpuKGsuYjxrLmQuZ2MoKSksdShrLmQuWGIoay5jPWsuYisrKSwzMykpLE10PWQuZixKdyhkLFJ0KSxLPVJ0LGsuYj09Z3QmJih0dD1DLXBpLW4uYyxTdD1kLmcsdHYoZCx0dCkseW9lKGQsbmV3ICRlKHR0LEspLG5ldyAkZShTdCxNdCkpKSxwaSs9ZC5nK2U7cmV0dXJuIG5ldyAkZShDLHpuKX1mdW5jdGlvbiBaNW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlO2Zvcih2cihlLCJDb21wb3VuZCBncmFwaCBwb3N0cHJvY2Vzc29yIiwxKSxuPWplKFJlKFEodCwoVGUoKSxkaHQpKSkpLGQ9dShRKHQsKGFlKCksckN0KSksMjI0KSxDPW5ldyBIcyxndD1kLmVjKCkuS2MoKTtndC5PYigpOyl7Zm9yKHR0PXUoZ3QuUGIoKSwxNyksaD1uZXcgQnUoZC5jYyh0dCkpLHduKCksWnMoaCxuZXcgU2kodCkpLEt0PVBjbigoQW4oMCxoLmMubGVuZ3RoKSx1KGguY1swXSwyNDMpKSksX2U9TG5lKHUoTmUoaCxoLmMubGVuZ3RoLTEpLDI0MykpLFN0PUt0LmksSjgoX2UuaSxTdCk/TXQ9U3QuZTpNdD1OYShTdCksTT1CZm4odHQsaCksQWgodHQuYSksaj1udWxsLG89bmV3IFMoaCk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMjQzKSxLPW5ldyBDYSxZNHQoSyxzLmEsTXQpLEg9cy5iLHI9bmV3IFB1LGppdChyLDAsSC5hKSxueShyLEspLFJ0PW5ldyB4byhfMShILmMpKSx1ZT1uZXcgeG8oXzEoSC5kKSksTGkoUnQsSyksTGkodWUsSyksaiYmKHIuYj09MD9HPXVlOkc9KFpuKHIuYiE9MCksdShyLmEuYS5jLDgpKSxXZT1iLk1hdGguYWJzKGouYS1HLmEpPkVkLFFlPWIuTWF0aC5hYnMoai5iLUcuYik+RWQsKCFuJiZXZSYmUWV8fG4mJihXZXx8UWUpKSYmcmkodHQuYSxSdCkpLFVhKHR0LmEsciksci5iPT0wP2o9UnQ6aj0oWm4oci5iIT0wKSx1KHIuYy5iLmMsOCkpLGR1bihILE0sSyksTG5lKHMpPT1fZSYmKE5hKF9lLmkpIT1zLmEmJihLPW5ldyBDYSxZNHQoSyxOYShfZS5pKSxNdCkpLEp0KHR0LFFsdCxLKSksQmduKEgsdHQsTXQpLEMuYS56YyhILEMpO09hKHR0LEt0KSxvYSh0dCxfZSl9Zm9yKGs9Qy5hLmVjKCkuS2MoKTtrLk9iKCk7KXY9dShrLlBiKCksMTcpLE9hKHYsbnVsbCksb2EodixudWxsKTtvcihlKX1mdW5jdGlvbiB6aGUodCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0O2lmKHQuZ2MoKT09MSlyZXR1cm4gdSh0LlhiKDApLDIzMSk7aWYodC5nYygpPD0wKXJldHVybiBuZXcgQiQ7Zm9yKHM9dC5LYygpO3MuT2IoKTspe2ZvcihuPXUocy5QYigpLDIzMSksRz0wLEM9d2ksTT13aSx2PVNhLGs9U2EsSD1uZXcgUyhuLmUpO0guYTxILmMuYy5sZW5ndGg7KWo9dShKKEgpLDE0NCksRys9dShRKGosKEpmKCksYzcpKSwxOSkuYSxDPWIuTWF0aC5taW4oQyxqLmQuYS1qLmUuYS8yKSxNPWIuTWF0aC5taW4oTSxqLmQuYi1qLmUuYi8yKSx2PWIuTWF0aC5tYXgodixqLmQuYStqLmUuYS8yKSxrPWIuTWF0aC5tYXgoayxqLmQuYitqLmUuYi8yKTtKdChuLChKZigpLGM3KSxwZShHKSksSnQobiwoWXAoKSxkUyksbmV3ICRlKEMsTSkpLEp0KG4sdk8sbmV3ICRlKHYsaykpfWZvcih3bigpLHQuYWQobmV3IEhiKSxLPW5ldyBCJCxNbyhLLHUodC5YYigwKSw5NCkpLGQ9MCxNdD0wLG89dC5LYygpO28uT2IoKTspbj11KG8uUGIoKSwyMzEpLHR0PWlhKG5jKHUoUShuLChZcCgpLHZPKSksOCkpLHUoUShuLGRTKSw4KSksZD1iLk1hdGgubWF4KGQsdHQuYSksTXQrPXR0LmEqdHQuYjtmb3IoZD1iLk1hdGgubWF4KGQsYi5NYXRoLnNxcnQoTXQpKlh0KHllKFEoSywoSmYoKSxkYmUpKSkpKSxndD1YdCh5ZShRKEssYlYpKSksU3Q9MCxSdD0wLGg9MCxlPWd0LHI9dC5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwyMzEpLHR0PWlhKG5jKHUoUShuLChZcCgpLHZPKSksOCkpLHUoUShuLGRTKSw4KSksU3QrdHQuYT5kJiYoU3Q9MCxSdCs9aCtndCxoPTApLEZtbihLLG4sU3QsUnQpLGU9Yi5NYXRoLm1heChlLFN0K3R0LmEpLGg9Yi5NYXRoLm1heChoLHR0LmIpLFN0Kz10dC5hK2d0O3JldHVybiBLfWZ1bmN0aW9uIHFoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHO3N3aXRjaChDPW5ldyBQdSx0LmEuZyl7Y2FzZSAzOmo9dShRKGUuZSwoYWUoKSxSMikpLDE1KSxIPXUoUShlLmosUjIpLDE1KSxHPXUoUShlLmYsUjIpLDE1KSxuPXUoUShlLmUsWjQpLDE1KSxyPXUoUShlLmosWjQpLDE1KSxzPXUoUShlLmYsWjQpLDE1KSxoPW5ldyBoZSxMcyhoLGopLEguSmMobmV3IGNRKSxMcyhoLF90KEgsMTUyKT9aeCh1KEgsMTUyKSk6X3QoSCwxMzEpP3UoSCwxMzEpLmE6X3QoSCw1NCk/bmV3IGt3KEgpOm5ldyBPbShIKSksTHMoaCxHKSxvPW5ldyBoZSxMcyhvLG4pLExzKG8sX3QociwxNTIpP1p4KHUociwxNTIpKTpfdChyLDEzMSk/dShyLDEzMSkuYTpfdChyLDU0KT9uZXcga3cocik6bmV3IE9tKHIpKSxMcyhvLHMpLEp0KGUuZixSMixoKSxKdChlLmYsWjQsbyksSnQoZS5mLGhDdCxlLmYpLEp0KGUuZSxSMixudWxsKSxKdChlLmUsWjQsbnVsbCksSnQoZS5qLFIyLG51bGwpLEp0KGUuaixaNCxudWxsKTticmVhaztjYXNlIDE6VWEoQyxlLmUuYSkscmkoQyxlLmkubiksVWEoQyxsMihlLmouYSkpLHJpKEMsZS5hLm4pLFVhKEMsZS5mLmEpO2JyZWFrO2RlZmF1bHQ6VWEoQyxlLmUuYSksVWEoQyxsMihlLmouYSkpLFVhKEMsZS5mLmEpfUFoKGUuZi5hKSxVYShlLmYuYSxDKSxPYShlLmYsZS5lLmMpLGQ9dShRKGUuZSwoVGUoKSxTbykpLDc0KSxrPXUoUShlLmosU28pLDc0KSx2PXUoUShlLmYsU28pLDc0KSwoZHx8a3x8dikmJihNPW5ldyBQdSx3dnQoTSx2KSx3dnQoTSxrKSx3dnQoTSxkKSxKdChlLmYsU28sTSkpLE9hKGUuaixudWxsKSxvYShlLmosbnVsbCksT2EoZS5lLG51bGwpLG9hKGUuZSxudWxsKSxFbyhlLmEsbnVsbCksRW8oZS5pLG51bGwpLGUuZyYmcWhlKHQsZS5nKX1mdW5jdGlvbiBKNW4odCl7Y3h0KCk7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0O2lmKHQ9PW51bGx8fChvPUskKHQpLEc9JGxuKG8pLEclNCE9MCkpcmV0dXJuIG51bGw7aWYoSz1HLzR8MCxLPT0wKXJldHVybiBOdChHdSxONCwyNSwwLDE1LDEpO2ZvcihNPW51bGwsZT0wLG49MCxyPTAscz0wLGg9MCxkPTAsdj0wLGs9MCxIPTAsaj0wLEM9MCxNPU50KEd1LE40LDI1LEsqMywxNSwxKTtIPEstMTtIKyspe2lmKCF2TShoPW9bQysrXSl8fCF2TShkPW9bQysrXSl8fCF2TSh2PW9bQysrXSl8fCF2TShrPW9bQysrXSkpcmV0dXJuIG51bGw7ZT1ZMVtoXSxuPVkxW2RdLHI9WTFbdl0scz1ZMVtrXSxNW2orK109KGU8PDJ8bj4+NCk8PDI0Pj4yNCxNW2orK109KChuJjE1KTw8NHxyPj4yJjE1KTw8MjQ+PjI0LE1baisrXT0ocjw8NnxzKTw8MjQ+PjI0fXJldHVybiF2TShoPW9bQysrXSl8fCF2TShkPW9bQysrXSk/bnVsbDooZT1ZMVtoXSxuPVkxW2RdLHY9b1tDKytdLGs9b1tDKytdLFkxW3ZdPT0tMXx8WTFba109PS0xP3Y9PTYxJiZrPT02MT9uJjE1P251bGw6KHR0PU50KEd1LE40LDI1LEgqMysxLDE1LDEpLERjKE0sMCx0dCwwLEgqMyksdHRbal09KGU8PDJ8bj4+NCk8PDI0Pj4yNCx0dCk6diE9NjEmJms9PTYxPyhyPVkxW3ZdLHImMz9udWxsOih0dD1OdChHdSxONCwyNSxIKjMrMiwxNSwxKSxEYyhNLDAsdHQsMCxIKjMpLHR0W2orK109KGU8PDJ8bj4+NCk8PDI0Pj4yNCx0dFtqXT0oKG4mMTUpPDw0fHI+PjImMTUpPDwyND4+MjQsdHQpKTpudWxsOihyPVkxW3ZdLHM9WTFba10sTVtqKytdPShlPDwyfG4+PjQpPDwyND4+MjQsTVtqKytdPSgobiYxNSk8PDR8cj4+MiYxNSk8PDI0Pj4yNCxNW2orK109KHI8PDZ8cyk8PDI0Pj4yNCxNKSl9ZnVuY3Rpb24gdHhuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdDtmb3IodnIoZSxTMWUsMSksRz11KFEodCwoVGUoKSxlZykpLDIxOCkscz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoSihzKSwyOSksaz1sRChyLmEpLGg9ayxkPTAsdj1oLmxlbmd0aDtkPHY7KytkKWlmKG89aFtkXSxvLms9PShWbigpLEhjKSl7aWYoRz09KFcwKCksWDYpKWZvcihNPW5ldyBTKG8uaik7TS5hPE0uYy5jLmxlbmd0aDspQz11KEooTSksMTEpLEMuZS5jLmxlbmd0aD09MHx8bWZuKEMpLEMuZy5jLmxlbmd0aD09MHx8eWZuKEMpO2Vsc2UgaWYoX3QoUShvLChhZSgpLF9pKSksMTcpKXR0PXUoUShvLF9pKSwxNyksZ3Q9dShHZyhvLCh2ZSgpLEJuKSkuS2MoKS5QYigpLDExKSxNdD11KEdnKG8sSG4pLktjKCkuUGIoKSwxMSksU3Q9dShRKGd0LF9pKSwxMSksUnQ9dShRKE10LF9pKSwxMSksT2EodHQsUnQpLG9hKHR0LFN0KSxLdD1uZXcgeG8oTXQuaS5uKSxLdC5hPVlvKGx0KGN0KFdzLDEpLGVlLDgsMCxbUnQuaS5uLFJ0Lm4sUnQuYV0pKS5hLHJpKHR0LmEsS3QpLEt0PW5ldyB4byhndC5pLm4pLEt0LmE9WW8obHQoY3QoV3MsMSksZWUsOCwwLFtTdC5pLm4sU3QubixTdC5hXSkpLmEscmkodHQuYSxLdCk7ZWxzZXtpZihvLmouYy5sZW5ndGg+PTIpe2ZvcihLPSEwLGo9bmV3IFMoby5qKSxuPXUoSihqKSwxMSksSD1udWxsO2ouYTxqLmMuYy5sZW5ndGg7KWlmKEg9bixuPXUoSihqKSwxMSksIXlpKFEoSCxfaSksUShuLF9pKSkpe0s9ITE7YnJlYWt9fWVsc2UgSz0hMTtmb3IoTT1uZXcgUyhvLmopO00uYTxNLmMuYy5sZW5ndGg7KUM9dShKKE0pLDExKSxDLmUuYy5sZW5ndGg9PTB8fFd3bihDLEspLEMuZy5jLmxlbmd0aD09MHx8WXduKEMsSyl9RW8obyxudWxsKX1vcihlKX1mdW5jdGlvbiBIaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlO3JldHVybiBTdD10LmNbKEFuKDAsZS5jLmxlbmd0aCksdShlLmNbMF0sMTcpKS5wXSxfZT10LmNbKEFuKDEsZS5jLmxlbmd0aCksdShlLmNbMV0sMTcpKS5wXSxTdC5hLmUuZS1TdC5hLmEtKFN0LmIuZS5lLVN0LmIuYSk9PTAmJl9lLmEuZS5lLV9lLmEuYS0oX2UuYi5lLmUtX2UuYi5hKT09MHx8KGd0PVN0LmIuZS5mLCFfdChndCwxMCkpPyExOih0dD11KGd0LDEwKSxLdD10LmlbdHQucF0sdWU9dHQuYz9Sbyh0dC5jLmEsdHQsMCk6LTEsbz1hcyx1ZT4wJiYocz11KE5lKHR0LmMuYSx1ZS0xKSwxMCksaD10Lmlbcy5wXSxXZT1iLk1hdGguY2VpbChXMyh0Lm4scyx0dCkpLG89S3QuYS5lLXR0LmQuZC0oaC5hLmUrcy5vLmIrcy5kLmEpLVdlKSxrPWFzLHVlPHR0LmMuYS5jLmxlbmd0aC0xJiYodj11KE5lKHR0LmMuYSx1ZSsxKSwxMCksQz10Lmlbdi5wXSxXZT1iLk1hdGguY2VpbChXMyh0Lm4sdix0dCkpLGs9Qy5hLmUtdi5kLmQtKEt0LmEuZSt0dC5vLmIrdHQuZC5hKS1XZSksbiYmKGsxKCksd2YoX2QpLGIuTWF0aC5hYnMoby1rKTw9X2R8fG89PWt8fGlzTmFOKG8pJiZpc05hTihrKSk/ITA6KHI9dHJ0KFN0LmEpLGQ9LXRydChTdC5iKSxNPS10cnQoX2UuYSksTXQ9dHJ0KF9lLmIpLEs9U3QuYS5lLmUtU3QuYS5hLShTdC5iLmUuZS1TdC5iLmEpPjAmJl9lLmEuZS5lLV9lLmEuYS0oX2UuYi5lLmUtX2UuYi5hKTwwLEc9U3QuYS5lLmUtU3QuYS5hLShTdC5iLmUuZS1TdC5iLmEpPDAmJl9lLmEuZS5lLV9lLmEuYS0oX2UuYi5lLmUtX2UuYi5hKT4wLEg9U3QuYS5lLmUrU3QuYi5hPF9lLmIuZS5lK19lLmEuYSxqPVN0LmEuZS5lK1N0LmIuYT5fZS5iLmUuZStfZS5hLmEsUnQ9MCwhSyYmIUcmJihqP28rTT4wP1J0PU06ay1yPjAmJihSdD1yKTpIJiYobytkPjA/UnQ9ZDprLU10PjAmJihSdD1NdCkpKSxLdC5hLmUrPVJ0LEt0LmImJihLdC5kLmUrPVJ0KSwhMSkpfWZ1bmN0aW9uIFZoZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGo7aWYocj1uZXcgYWgoZS5xZigpLmEsZS5xZigpLmIsZS5yZigpLmEsZS5yZigpLmIpLHM9bmV3IEZ4LHQuYylmb3IoaD1uZXcgUyhlLndmKCkpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDE4MSkscy5jPW8ucWYoKS5hK2UucWYoKS5hLHMuZD1vLnFmKCkuYitlLnFmKCkuYixzLmI9by5yZigpLmEscy5hPW8ucmYoKS5iLGdfKHIscyk7Zm9yKGs9bmV3IFMoZS5DZigpKTtrLmE8ay5jLmMubGVuZ3RoOyl7aWYodj11KEooayksODM4KSxDPXYucWYoKS5hK2UucWYoKS5hLE09di5xZigpLmIrZS5xZigpLmIsdC5lJiYocy5jPUMscy5kPU0scy5iPXYucmYoKS5hLHMuYT12LnJmKCkuYixnXyhyLHMpKSx0LmQpZm9yKGg9bmV3IFModi53ZigpKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxODEpLHMuYz1vLnFmKCkuYStDLHMuZD1vLnFmKCkuYitNLHMuYj1vLnJmKCkuYSxzLmE9by5yZigpLmIsZ18ocixzKTtpZih0LmIpe2lmKGo9bmV3ICRlKC1uLC1uKSx1KGUuV2UoKHVpKCksUXkpKSwxNzQpLkhjKChadSgpLENiKSkpZm9yKGg9bmV3IFModi53ZigpKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxODEpLGouYSs9by5yZigpLmErbixqLmIrPW8ucmYoKS5iK247ai5hPWIuTWF0aC5tYXgoai5hLDApLGouYj1iLk1hdGgubWF4KGouYiwwKSxmbGUocix2LkJmKCksdi56ZigpLGUsdixqLG4pfX10LmImJmZsZShyLGUuQmYoKSxlLnpmKCksZSxudWxsLG51bGwsbiksZD1uZXcgTG50KGUuQWYoKSksZC5kPWIuTWF0aC5tYXgoMCxlLnFmKCkuYi1yLmQpLGQuYT1iLk1hdGgubWF4KDAsci5kK3IuYS0oZS5xZigpLmIrZS5yZigpLmIpKSxkLmI9Yi5NYXRoLm1heCgwLGUucWYoKS5hLXIuYyksZC5jPWIuTWF0aC5tYXgoMCxyLmMrci5iLShlLnFmKCkuYStlLnJmKCkuYSkpLGUuRWYoZCl9ZnVuY3Rpb24gZXhuKCl7dmFyIHQ9WyJcXHUwMDAwIiwiXFx1MDAwMSIsIlxcdTAwMDIiLCJcXHUwMDAzIiwiXFx1MDAwNCIsIlxcdTAwMDUiLCJcXHUwMDA2IiwiXFx1MDAwNyIsIlxcYiIsIlxcdCIsIlxcbiIsIlxcdTAwMEIiLCJcXGYiLCJcXHIiLCJcXHUwMDBFIiwiXFx1MDAwRiIsIlxcdTAwMTAiLCJcXHUwMDExIiwiXFx1MDAxMiIsIlxcdTAwMTMiLCJcXHUwMDE0IiwiXFx1MDAxNSIsIlxcdTAwMTYiLCJcXHUwMDE3IiwiXFx1MDAxOCIsIlxcdTAwMTkiLCJcXHUwMDFBIiwiXFx1MDAxQiIsIlxcdTAwMUMiLCJcXHUwMDFEIiwiXFx1MDAxRSIsIlxcdTAwMUYiXTtyZXR1cm4gdFszNF09J1xcIicsdFs5Ml09IlxcXFwiLHRbMTczXT0iXFx1MDBhZCIsdFsxNTM2XT0iXFx1MDYwMCIsdFsxNTM3XT0iXFx1MDYwMSIsdFsxNTM4XT0iXFx1MDYwMiIsdFsxNTM5XT0iXFx1MDYwMyIsdFsxNzU3XT0iXFx1MDZkZCIsdFsxODA3XT0iXFx1MDcwZiIsdFs2MDY4XT0iXFx1MTdiNCIsdFs2MDY5XT0iXFx1MTdiNSIsdFs4MjAzXT0iXFx1MjAwYiIsdFs4MjA0XT0iXFx1MjAwYyIsdFs4MjA1XT0iXFx1MjAwZCIsdFs4MjA2XT0iXFx1MjAwZSIsdFs4MjA3XT0iXFx1MjAwZiIsdFs4MjMyXT0iXFx1MjAyOCIsdFs4MjMzXT0iXFx1MjAyOSIsdFs4MjM0XT0iXFx1MjAyYSIsdFs4MjM1XT0iXFx1MjAyYiIsdFs4MjM2XT0iXFx1MjAyYyIsdFs4MjM3XT0iXFx1MjAyZCIsdFs4MjM4XT0iXFx1MjAyZSIsdFs4Mjg4XT0iXFx1MjA2MCIsdFs4Mjg5XT0iXFx1MjA2MSIsdFs4MjkwXT0iXFx1MjA2MiIsdFs4MjkxXT0iXFx1MjA2MyIsdFs4MjkyXT0iXFx1MjA2NCIsdFs4Mjk4XT0iXFx1MjA2YSIsdFs4Mjk5XT0iXFx1MjA2YiIsdFs4MzAwXT0iXFx1MjA2YyIsdFs4MzAxXT0iXFx1MjA2ZCIsdFs4MzAyXT0iXFx1MjA2ZSIsdFs4MzAzXT0iXFx1MjA2ZiIsdFs2NTI3OV09IlxcdWZlZmYiLHRbNjU1MjldPSJcXHVmZmY5Iix0WzY1NTMwXT0iXFx1ZmZmYSIsdFs2NTUzMV09IlxcdWZmZmIiLHR9ZnVuY3Rpb24gbnhuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0sajtmb3Iodj1uZXcgaGUsTT1lLmxlbmd0aCxoPUl5dChuKSxrPTA7azxNOysrayl7c3dpdGNoKEM9TzJ0KGUsQ3UoNjEpLGspLHI9UmxuKGgsZS5zdWJzdHIoayxDLWspKSxzPVRpdChyKSxvPXMuQWooKS5OaCgpLHdhKGUsKytDKSl7Y2FzZSAzOTp7ZD12OChlLDM5LCsrQyksbGUodixuZXcgbGoocixmcnQoZS5zdWJzdHIoQyxkLUMpLG8scykpKSxrPWQrMTticmVha31jYXNlIDM0OntkPXY4KGUsMzQsKytDKSxsZSh2LG5ldyBsaihyLGZydChlLnN1YnN0cihDLGQtQyksbyxzKSkpLGs9ZCsxO2JyZWFrfWNhc2UgOTE6e2o9bmV3IGhlLGxlKHYsbmV3IGxqKHIsaikpO3Q6Zm9yKDs7KXtzd2l0Y2god2EoZSwrK0MpKXtjYXNlIDM5OntkPXY4KGUsMzksKytDKSxsZShqLGZydChlLnN1YnN0cihDLGQtQyksbyxzKSksQz1kKzE7YnJlYWt9Y2FzZSAzNDp7ZD12OChlLDM0LCsrQyksbGUoaixmcnQoZS5zdWJzdHIoQyxkLUMpLG8scykpLEM9ZCsxO2JyZWFrfWNhc2UgMTEwOntpZigrK0MsZS5pbmRleE9mKCJ1bGwiLEMpPT1DKWouY1tqLmMubGVuZ3RoXT1udWxsO2Vsc2UgdGhyb3cgaXQobmV3IFZvKE5kZSkpO0MrPTM7YnJlYWt9fWlmKEM8TSlzd2l0Y2goUnIoQyxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KEMpKXtjYXNlIDQ0OmJyZWFrO2Nhc2UgOTM6YnJlYWsgdDtkZWZhdWx0OnRocm93IGl0KG5ldyBWbygiRXhwZWN0aW5nICwgb3IgXSIpKX1lbHNlIGJyZWFrfWs9QysxO2JyZWFrfWNhc2UgMTEwOntpZigrK0MsZS5pbmRleE9mKCJ1bGwiLEMpPT1DKWxlKHYsbmV3IGxqKHIsbnVsbCkpO2Vsc2UgdGhyb3cgaXQobmV3IFZvKE5kZSkpO2s9QyszO2JyZWFrfX1pZihrPE0pe2lmKFJyKGssZS5sZW5ndGgpLGUuY2hhckNvZGVBdChrKSE9NDQpdGhyb3cgaXQobmV3IFZvKCJFeHBlY3RpbmcgLCIpKX1lbHNlIGJyZWFrfXJldHVybiB5dm4odCx2LG4pfWZ1bmN0aW9uIEdoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGo7Zm9yKGs9dSh1KEFpKHQucixlKSwyMSksODQpLGg9bmduKHQsZSksbj10LnUuSGMoKFp1KCksZUEpKSx2PWsuS2MoKTt2Lk9iKCk7KWlmKGQ9dSh2LlBiKCksMTExKSwhKCFkLmN8fGQuYy5kLmMubGVuZ3RoPD0wKSl7c3dpdGNoKGo9ZC5iLnJmKCksQz1kLmMsTT1DLmksTS5iPShvPUMubixDLmUuYStvLmIrby5jKSxNLmE9KHM9Qy5uLEMuZS5iK3MuZCtzLmEpLGUuZyl7Y2FzZSAxOmQuYT8oTS5jPShqLmEtTS5iKS8yLFdmKEMsKFF1KCksZmIpKSk6aHx8bj8oTS5jPS1NLmItdC5zLFdmKEMsKFF1KCksa2YpKSk6KE0uYz1qLmErdC5zLFdmKEMsKFF1KCksTWQpKSksTS5kPS1NLmEtdC50LGRkKEMsKHl1KCksRWYpKTticmVhaztjYXNlIDM6ZC5hPyhNLmM9KGouYS1NLmIpLzIsV2YoQywoUXUoKSxmYikpKTpofHxuPyhNLmM9LU0uYi10LnMsV2YoQywoUXUoKSxrZikpKTooTS5jPWouYSt0LnMsV2YoQywoUXUoKSxNZCkpKSxNLmQ9ai5iK3QudCxkZChDLCh5dSgpLG4xKSk7YnJlYWs7Y2FzZSAyOmQuYT8ocj10LnY/TS5hOnUoTmUoQy5kLDApLDE4MSkucmYoKS5iLE0uZD0oai5iLXIpLzIsZGQoQywoeXUoKSxkYikpKTpofHxuPyhNLmQ9LU0uYS10LnQsZGQoQywoeXUoKSxFZikpKTooTS5kPWouYit0LnQsZGQoQywoeXUoKSxuMSkpKSxNLmM9ai5hK3QucyxXZihDLChRdSgpLE1kKSk7YnJlYWs7Y2FzZSA0OmQuYT8ocj10LnY/TS5hOnUoTmUoQy5kLDApLDE4MSkucmYoKS5iLE0uZD0oai5iLXIpLzIsZGQoQywoeXUoKSxkYikpKTpofHxuPyhNLmQ9LU0uYS10LnQsZGQoQywoeXUoKSxFZikpKTooTS5kPWouYit0LnQsZGQoQywoeXUoKSxuMSkpKSxNLmM9LU0uYi10LnMsV2YoQywoUXUoKSxrZikpfWg9ITF9fWZ1bmN0aW9uIGliKHQsZSl7Z2koKTt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRztpZihIQyh6Nyk9PTApe2ZvcihNPU50KGs2bixlZSwxMTcsVzVlLmxlbmd0aCwwLDEpLGg9MDtoPE0ubGVuZ3RoO2grKylNW2hdPW5ldyBObCg0KTtmb3Iocj1uZXcgJEMsbz0wO288X0x0Lmxlbmd0aDtvKyspe2lmKEM9bmV3IE5sKDQpLG88ODQ/KGQ9byoyLEg9KFJyKGQsRXV0Lmxlbmd0aCksRXV0LmNoYXJDb2RlQXQoZCkpLGo9KFJyKGQrMSxFdXQubGVuZ3RoKSxFdXQuY2hhckNvZGVBdChkKzEpKSxqYyhDLEgsaikpOihkPShvLTg0KSoyLGpjKEMsU0x0W2RdLFNMdFtkKzFdKSksdj1fTHRbb10saG4odiwiU3BlY2lhbHMiKSYmamMoQyw2NTUyMCw2NTUzMyksaG4odix5Z2UpJiYoamMoQyw5ODMwNDAsMTA0ODU3MyksamMoQywxMDQ4NTc2LDExMTQxMDkpKSxrbyh6Nyx2LEMpLGtvKGdBLHYsbXkoQykpLGs9ci5hLmxlbmd0aCwwPGs/ci5hPXIuYS5zdWJzdHIoMCwwKTowPmsmJihyLmErPUtVdChOdCh4aCx5ZCwyNSwtaywxNSwxKSkpLHIuYSs9IklzIixoZCh2LEN1KDMyKSk+PTApZm9yKHM9MDtzPHYubGVuZ3RoO3MrKylScihzLHYubGVuZ3RoKSx2LmNoYXJDb2RlQXQocykhPTMyJiZTOChyLChScihzLHYubGVuZ3RoKSx2LmNoYXJDb2RlQXQocykpKTtlbHNlIHIuYSs9IiIrdjtBM3Qoci5hLHYsITApfUEzdChrdXQsIkNuIiwhMSksQTN0KFE4dCwiQ24iLCEwKSxuPW5ldyBObCg0KSxqYyhuLDAsZTcpLGtvKHo3LCJBTEwiLG4pLGtvKGdBLCJBTEwiLG15KG4pKSwhczMmJihzMz1uZXcgX3IpLGtvKHMzLGt1dCxrdXQpLCFzMyYmKHMzPW5ldyBfciksa28oczMsUTh0LFE4dCksIXMzJiYoczM9bmV3IF9yKSxrbyhzMywiQUxMIiwiQUxMIil9cmV0dXJuIEc9dShOYyhlP3o3OmdBLHQpLDEzNiksR31mdW5jdGlvbiByeG4odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10O2lmKGo9ITEsTT0hMSxHMyh1KFEociwoVGUoKSxjcykpLDk4KSkpe2g9ITEsZD0hMTt0OmZvcihHPW5ldyBTKHIuaik7Ry5hPEcuYy5jLmxlbmd0aDspZm9yKEg9dShKKEcpLDExKSx0dD16cChEMShsdChjdChqMSwxKSxEZSwyMCwwLFtuZXcgUXMoSCksbmV3IFRyKEgpXSkpKTt6cih0dCk7KWlmKEs9dShNcih0dCksMTEpLCFqZShSZShRKEsuaSxDUykpKSl7aWYoSC5qPT0odmUoKSxQbikpe2g9ITA7YnJlYWsgdH1pZihILmo9PW1yKXtkPSEwO2JyZWFrIHR9fWo9ZCYmIWgsTT1oJiYhZH1pZighaiYmIU0mJnIuYi5jLmxlbmd0aCE9MCl7Zm9yKEM9MCxrPW5ldyBTKHIuYik7ay5hPGsuYy5jLmxlbmd0aDspdj11KEooayksNzApLEMrPXYubi5iK3Yuby5iLzI7Qy89ci5iLmMubGVuZ3RoLE10PUM+PXIuby5iLzJ9ZWxzZSBNdD0hTTtNdD8oZ3Q9dShRKHIsKGFlKCksejYpKSwxNSksZ3Q/aj9vPWd0OihzPXUoUShyLE42KSwxNSkscz9ndC5nYygpPD1zLmdjKCk/bz1ndDpvPXM6KG89bmV3IGhlLEp0KHIsTjYsbykpKToobz1uZXcgaGUsSnQocix6NixvKSkpOihzPXUoUShyLChhZSgpLE42KSksMTUpLHM/TT9vPXM6KGd0PXUoUShyLHo2KSwxNSksZ3Q/cy5nYygpPD1ndC5nYygpP289czpvPWd0OihvPW5ldyBoZSxKdChyLHo2LG8pKSk6KG89bmV3IGhlLEp0KHIsTjYsbykpKSxvLkZjKHQpLEp0KHQsKGFlKCksWlYpLG4pLGUuZD09bj8ob2EoZSxudWxsKSxuLmUuYy5sZW5ndGgrbi5nLmMubGVuZ3RoPT0wJiZVbyhuLG51bGwpLFl1bihuKSk6KE9hKGUsbnVsbCksbi5lLmMubGVuZ3RoK24uZy5jLmxlbmd0aD09MCYmVW8obixudWxsKSksQWgoZS5hKX1mdW5jdGlvbiBpeG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuLHpuLGhyLHBpO2ZvcihNdD1uZXcgZGEodC5iLDApLEM9ZS5LYygpLEc9MCxrPXUoQy5QYigpLDE5KS5hLEt0PTAsbj1uZXcgSHMsX2U9bmV3IE8wO010LmI8TXQuZC5nYygpOyl7Zm9yKGd0PShabihNdC5iPE10LmQuZ2MoKSksdShNdC5kLlhiKE10LmM9TXQuYisrKSwyOSkpLFJ0PW5ldyBTKGd0LmEpO1J0LmE8UnQuYy5jLmxlbmd0aDspe2ZvcihTdD11KEooUnQpLDEwKSxIPW5ldyBhcihscihEcyhTdCkuYS5LYygpLG5ldyB6KSk7enIoSCk7KU09dShNcihIKSwxNyksX2UuYS56YyhNLF9lKTtmb3Ioaj1uZXcgYXIobHIoam8oU3QpLmEuS2MoKSxuZXcgeikpO3pyKGopOylNPXUoTXIoaiksMTcpLF9lLmEuQmMoTSkhPW51bGx9aWYoRysxPT1rKXtmb3Iocz1uZXcgU2godCksem0oTXQscyksbz1uZXcgU2godCksem0oTXQsbyksUWU9X2UuYS5lYygpLktjKCk7UWUuT2IoKTspV2U9dShRZS5QYigpLDE3KSxuLmEuX2IoV2UpfHwoKytLdCxuLmEuemMoV2UsbikpLGg9bmV3IFkwKHQpLEp0KGgsKFRlKCksY3MpLCh1YSgpLEI3KSksRW8oaCxzKSxEMChoLChWbigpLHoxKSksSz1uZXcgTWMsVW8oSyxoKSxCcyhLLCh2ZSgpLEJuKSksUm49bmV3IE1jLFVvKFJuLGgpLEJzKFJuLEhuKSxyPW5ldyBZMCh0KSxKdChyLGNzLEI3KSxFbyhyLG8pLEQwKHIsejEpLHR0PW5ldyBNYyxVbyh0dCxyKSxCcyh0dCxCbiksem49bmV3IE1jLFVvKHpuLHIpLEJzKHpuLEhuKSx1ZT1uZXcgVncsT2EodWUsV2UuYyksb2EodWUsSykscGk9bmV3IFZ3LE9hKHBpLFJuKSxvYShwaSx0dCksT2EoV2Usem4pLGQ9bmV3IHNtdChoLHIsdWUscGksV2UpLEp0KGgsKGFlKCksSXYpLGQpLEp0KHIsSXYsZCksaHI9dWUuYy5pLGhyLms9PXoxJiYodj11KFEoaHIsSXYpLDMwNSksdi5kPWQsZC5nPXYpO2lmKEMuT2IoKSlrPXUoQy5QYigpLDE5KS5hO2Vsc2UgYnJlYWt9KytHfXJldHVybiBwZShLdCl9ZnVuY3Rpb24gc3huKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEcsSztmb3IoTT0wLHM9bmV3IG5yKCghZS5hJiYoZS5hPW5ldyBmZShycyxlLDEwLDExKSksZS5hKSk7cy5lIT1zLmkuZ2MoKTspcj11KGRyKHMpLDMzKSxqZShSZShxZShyLChUZSgpLHoyKSkpKXx8KChWdChxZShlLHdiKSkhPT1WdCgoVjAoKSx2YikpfHxWdChxZShlLHp5KSk9PT1WdCgoeDIoKSx2UykpfHxWdChxZShlLHp5KSk9PT1WdCgoeDIoKSx3UykpfHxqZShSZShxZShlLCR5KSkpfHxWdChxZShlLHE2KSkhPT1WdCgoaXYoKSxxNCkpKSYmIWplKFJlKHFlKHIsSmx0KSkpJiYod28ociwoYWUoKSxUYykscGUoTSkpLCsrTSksVGhlKHQscixuKSk7Zm9yKE09MCxrPW5ldyBucigoIWUuYiYmKGUuYj1uZXcgZmUoWXMsZSwxMiwzKSksZS5iKSk7ay5lIT1rLmkuZ2MoKTspZD11KGRyKGspLDc5KSwoVnQocWUoZSwoVGUoKSx3YikpKSE9PVZ0KChWMCgpLHZiKSl8fFZ0KHFlKGUsenkpKT09PVZ0KCh4MigpLHZTKSl8fFZ0KHFlKGUsenkpKT09PVZ0KCh4MigpLHdTKSl8fGplKFJlKHFlKGUsJHkpKSl8fFZ0KHFlKGUscTYpKSE9PVZ0KChpdigpLHE0KSkpJiYod28oZCwoYWUoKSxUYykscGUoTSkpLCsrTSksRz1lMChkKSxLPXRiKGQpLEM9amUoUmUocWUoRyxIeSkpKSxIPSFqZShSZShxZShkLHoyKSkpLGo9QyYmZnYoZCkmJmplKFJlKHFlKGQsajIpKSksbz1lcyhHKT09ZSYmZXMoRyk9PWVzKEspLGg9KGVzKEcpPT1lJiZLPT1lKV4oZXMoSyk9PWUmJkc9PWUpLEgmJiFqJiYoaHx8bykmJlB4dCh0LGQsZSxuKTtpZihlcyhlKSlmb3Iodj1uZXcgbnIoSFh0KGVzKGUpKSk7di5lIT12LmkuZ2MoKTspZD11KGRyKHYpLDc5KSxHPWUwKGQpLEc9PWUmJmZ2KGQpJiYoaj1qZShSZShxZShHLChUZSgpLEh5KSkpKSYmamUoUmUocWUoZCxqMikpKSxqJiZQeHQodCxkLGUsbikpfWZ1bmN0aW9uIGF4bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWUsUm4sem4saHIscGksanM7Zm9yKHZyKG4sIk1pbldpZHRoIGxheWVyaW5nIiwxKSxIPWUuYixfZT1lLmEsanM9dShRKGUsKFRlKCksczl0KSksMTkpLmEsZD11KFEoZSxhOXQpLDE5KS5hLHQuYj1YdCh5ZShRKGUsVGYpKSksdC5kPWFzLFJ0PW5ldyBTKF9lKTtSdC5hPFJ0LmMuYy5sZW5ndGg7KU10PXUoSihSdCksMTApLE10Lms9PShWbigpLE9zKSYmKFJuPU10Lm8uYix0LmQ9Yi5NYXRoLm1pbih0LmQsUm4pKTtmb3IodC5kPWIuTWF0aC5tYXgoMSx0LmQpLFdlPV9lLmMubGVuZ3RoLHQuYz1OdChDcixYciwyNSxXZSwxNSwxKSx0LmY9TnQoQ3IsWHIsMjUsV2UsMTUsMSksdC5lPU50KGFhLHZvLDI1LFdlLDE1LDEpLGs9MCx0LmE9MCxLdD1uZXcgUyhfZSk7S3QuYTxLdC5jLmMubGVuZ3RoOylNdD11KEooS3QpLDEwKSxNdC5wPWsrKyx0LmNbTXQucF09JHJlKGpvKE10KSksdC5mW010LnBdPSRyZShEcyhNdCkpLHQuZVtNdC5wXT1NdC5vLmIvdC5kLHQuYSs9dC5lW010LnBdO2Zvcih0LmIvPXQuZCx0LmEvPVdlLHVlPUVibihfZSksWnMoX2UsTXZ0KG5ldyBTcCh0KSkpLEs9YXMsRz13aSxoPW51bGwscGk9anMsaHI9anMsbz1kLHM9ZCxqczwwJiYocGk9dShuX3QuYS56ZCgpLDE5KS5hLGhyPXUobl90LmIuemQoKSwxOSkuYSksZDwwJiYobz11KGVfdC5hLnpkKCksMTkpLmEscz11KGVfdC5iLnpkKCksMTkpLmEpLHpuPXBpO3puPD1ocjt6bisrKWZvcihyPW87cjw9cztyKyspUWU9WnluKHQsem4scixfZSx1ZSksZ3Q9WHQoeWUoUWUuYSkpLGo9dShRZS5iLDE1KSx0dD1qLmdjKCksKGd0PEt8fGd0PT1LJiZ0dDxHKSYmKEs9Z3QsRz10dCxoPWopO2ZvcihNPWguS2MoKTtNLk9iKCk7KXtmb3IoQz11KE0uUGIoKSwxNSksdj1uZXcgU2goZSksU3Q9Qy5LYygpO1N0Lk9iKCk7KU10PXUoU3QuUGIoKSwxMCksRW8oTXQsdik7SC5jW0guYy5sZW5ndGhdPXZ9WXN0KEgpLF9lLmM9TnQoUW4sRGUsMSwwLDUsMSksb3Iobil9ZnVuY3Rpb24gb3huKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZSxXZSxRZSxSbjtmb3IodC5iPWUsdC5hPXUoUShlLChUZSgpLEpDdCkpLDE5KS5hLHQuYz11KFEoZSxlOXQpLDE5KS5hLHQuYz09MCYmKHQuYz13aSksdHQ9bmV3IGRhKGUuYiwwKTt0dC5iPHR0LmQuZ2MoKTspe2ZvcihLPShabih0dC5iPHR0LmQuZ2MoKSksdSh0dC5kLlhiKHR0LmM9dHQuYisrKSwyOSkpLGQ9bmV3IGhlLEM9LTEsUnQ9LTEsU3Q9bmV3IFMoSy5hKTtTdC5hPFN0LmMuYy5sZW5ndGg7KU10PXUoSihTdCksMTApLGowKChLTSgpLG5ldyBhcihscihVMChNdCkuYS5LYygpLG5ldyB6KSkpKT49dC5hJiYocj1IeW4odCxNdCksQz1iLk1hdGgubWF4KEMsci5iKSxSdD1iLk1hdGgubWF4KFJ0LHIuZCksbGUoZCxuZXcgZmEoTXQscikpKTtmb3IoV2U9bmV3IGhlLGs9MDtrPEM7KytrKUhtKFdlLDAsKFpuKHR0LmI+MCksdHQuYS5YYih0dC5jPS0tdHQuYiksUWU9bmV3IFNoKHQuYiksem0odHQsUWUpLFpuKHR0LmI8dHQuZC5nYygpKSx0dC5kLlhiKHR0LmM9dHQuYisrKSxRZSkpO2ZvcihoPW5ldyBTKGQpO2guYTxoLmMuYy5sZW5ndGg7KWlmKHM9dShKKGgpLDQ2KSxIPXUocy5iLDU3MSkuYSwhIUgpZm9yKGo9bmV3IFMoSCk7ai5hPGouYy5jLmxlbmd0aDspTT11KEooaiksMTApLG40dCh0LE0sbVYsV2UpO2ZvcihuPW5ldyBoZSx2PTA7djxSdDsrK3YpbGUobiwoUm49bmV3IFNoKHQuYiksem0odHQsUm4pLFJuKSk7Zm9yKG89bmV3IFMoZCk7by5hPG8uYy5jLmxlbmd0aDspaWYocz11KEoobyksNDYpLF9lPXUocy5iLDU3MSkuYywhIV9lKWZvcih1ZT1uZXcgUyhfZSk7dWUuYTx1ZS5jLmMubGVuZ3RoOylLdD11KEoodWUpLDEwKSxuNHQodCxLdCx5VixuKX1mb3IoZ3Q9bmV3IGRhKGUuYiwwKTtndC5iPGd0LmQuZ2MoKTspRz0oWm4oZ3QuYjxndC5kLmdjKCkpLHUoZ3QuZC5YYihndC5jPWd0LmIrKyksMjkpKSxHLmEuYy5sZW5ndGg9PTAmJkNsKGd0KX1mdW5jdGlvbiBjeG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuLHpuLGhyO2lmKHZyKG4sIlNwbGluZSBlZGdlIHJvdXRpbmciLDEpLGUuYi5jLmxlbmd0aD09MCl7ZS5mLmE9MCxvcihuKTtyZXR1cm59TXQ9WHQoeWUoUShlLChUZSgpLHQ1KSkpKSxkPVh0KHllKFEoZSxxMikpKSxoPVh0KHllKFEoZSxKNCkpKSxndD11KFEoZSxzaHQpLDMzNiksV2U9Z3Q9PShjRSgpLFBTKSxfZT1YdCh5ZShRKGUsUUN0KSkpLHQuZD1lLHQuai5jPU50KFFuLERlLDEsMCw1LDEpLHQuYS5jPU50KFFuLERlLDEsMCw1LDEpLFh1KHQuayksdj11KE5lKGUuYiwwKSwyOSksQz1maih2LmEsKGtxKCksak8pKSxHPXUoTmUoZS5iLGUuYi5jLmxlbmd0aC0xKSwyOSksTT1maihHLmEsak8pLEs9bmV3IFMoZS5iKSx0dD1udWxsLGhyPTA7ZG97Zm9yKFN0PUsuYTxLLmMuYy5sZW5ndGg/dShKKEspLDI5KTpudWxsLFk1bih0LHR0LFN0KSxreW4odCksUWU9TUtlKE9jbihoJChSaShuZXcgVG4obnVsbCxuZXcgX24odC5pLDE2KSksbmV3IFhRKSxuZXcgS1EpKSksem49MCxSdD1ocixqPSF0dHx8QyYmdHQ9PXYsSD0hU3R8fE0mJlN0PT1HLFFlPjA/KGs9MCx0dCYmKGsrPWQpLGsrPShRZS0xKSpoLFN0JiYoays9ZCksV2UmJlN0JiYoaz1iLk1hdGgubWF4KGsscXduKFN0LGgsTXQsX2UpKSksazxNdCYmIWomJiFIJiYoem49KE10LWspLzIsaz1NdCksUnQrPWspOiFqJiYhSCYmKFJ0Kz1NdCksU3QmJm14dChTdCxSdCksdWU9bmV3IFModC5pKTt1ZS5hPHVlLmMuYy5sZW5ndGg7KUt0PXUoSih1ZSksMTI4KSxLdC5hLmM9aHIsS3QuYS5iPVJ0LWhyLEt0LkY9em4sS3QucD0hdHQ7THModC5hLHQuaSksaHI9UnQsU3QmJihocis9U3QuYy5hKSx0dD1TdCxqPUh9d2hpbGUoU3QpO2ZvcihzPW5ldyBTKHQuaik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTcpLG89aXVuKHQsciksSnQociwoYWUoKSxaNCksbyksUm49bHZuKHQsciksSnQocixSMixSbik7ZS5mLmE9aHIsdC5kPW51bGwsb3Iobil9ZnVuY3Rpb24gVWhlKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdDtpZihLPXQuaSE9MCxTdD0hMSxndD1udWxsLHhsKHQuZSkpe2lmKEM9ZS5nYygpLEM+MCl7Zm9yKGo9QzwxMDA/bnVsbDpuZXcgRHAoQyksaz1uZXcgZ3l0KGUpLEc9ay5nLGd0PU50KENyLFhyLDI1LEMsMTUsMSkscj0wLFJ0PW5ldyBRdyhDKSxzPTA7czx0Lmk7KytzKXtkPXQuZ1tzXSxIPWQ7dDpmb3IoTXQ9MDtNdDwyOysrTXQpe2Zvcih2PUM7LS12Pj0wOylpZihIIT1udWxsP3lpKEgsR1t2XSk6VnQoSCk9PT1WdChHW3ZdKSl7Z3QubGVuZ3RoPD1yJiYodHQ9Z3QsZ3Q9TnQoQ3IsWHIsMjUsMipndC5sZW5ndGgsMTUsMSksRGModHQsMCxndCwwLHIpKSxndFtyKytdPXMsRHIoUnQsR1t2XSk7YnJlYWsgdH1pZihIPUgsVnQoSCk9PT1WdChkKSlicmVha319aWYoaz1SdCxHPVJ0LmcsQz1yLHI+Z3QubGVuZ3RoJiYodHQ9Z3QsZ3Q9TnQoQ3IsWHIsMjUsciwxNSwxKSxEYyh0dCwwLGd0LDAscikpLHI+MCl7Zm9yKFN0PSEwLG89MDtvPHI7KytvKUg9R1tvXSxqPVRZdCh0LHUoSCw3Miksaik7Zm9yKGg9cjstLWg+PTA7KWw2KHQsZ3RbaF0pO2lmKHIhPUMpe2ZvcihzPUM7LS1zPj1yOylsNihrLHMpO3R0PWd0LGd0PU50KENyLFhyLDI1LHIsMTUsMSksRGModHQsMCxndCwwLHIpfWU9a319fWVsc2UgZm9yKGU9JDFuKHQsZSkscz10Lmk7LS1zPj0wOyllLkhjKHQuZ1tzXSkmJihsNih0LHMpLFN0PSEwKTtpZihTdCl7aWYoZ3QhPW51bGwpe2ZvcihuPWUuZ2MoKSxNPW49PTE/RjkodCw0LGUuS2MoKS5QYigpLG51bGwsZ3RbMF0sSyk6RjkodCw2LGUsZ3QsZ3RbMF0sSyksaj1uPDEwMD9udWxsOm5ldyBEcChuKSxzPWUuS2MoKTtzLk9iKCk7KUg9cy5QYigpLGo9dnd0KHQsdShILDcyKSxqKTtqPyhqLkVpKE0pLGouRmkoKSk6bWkodC5lLE0pfWVsc2V7Zm9yKGo9SlplKGUuZ2MoKSkscz1lLktjKCk7cy5PYigpOylIPXMuUGIoKSxqPXZ3dCh0LHUoSCw3Miksaik7aiYmai5GaSgpfXJldHVybiEwfWVsc2UgcmV0dXJuITF9ZnVuY3Rpb24gdXhuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdDtmb3Iobj1uZXcgdnNlKGUpLG4uYXx8VW1uKGUpLGs9V3ZuKGUpLHY9bmV3IFV3LHR0PW5ldyBmdWUsSz1uZXcgUyhlLmEpO0suYTxLLmMuYy5sZW5ndGg7KWZvcihHPXUoSihLKSwxMCkscz1uZXcgYXIobHIoRHMoRykuYS5LYygpLG5ldyB6KSk7enIocyk7KXI9dShNcihzKSwxNyksKHIuYy5pLms9PShWbigpLGtzKXx8ci5kLmkuaz09a3MpJiYoQz1RNG4odCxyLGssdHQpLGxuKHYsaHN0KEMuZCksQy5hKSk7Zm9yKGg9bmV3IGhlLFN0PXUoUShuLmMsKGFlKCksQnkpKSwyMSkuS2MoKTtTdC5PYigpOyl7c3dpdGNoKE10PXUoU3QuUGIoKSw2MSksSD10dC5jW010LmddLGo9dHQuYltNdC5nXSxkPXR0LmFbTXQuZ10sbz1udWxsLGd0PW51bGwsTXQuZyl7Y2FzZSA0Om89bmV3IGFoKHQuZC5hLEgsay5iLmEtdC5kLmEsai1IKSxndD1uZXcgYWgodC5kLmEsSCxkLGotSCksQncoayxuZXcgJGUoby5jK28uYixvLmQpKSxCdyhrLG5ldyAkZShvLmMrby5iLG8uZCtvLmEpKTticmVhaztjYXNlIDI6bz1uZXcgYWgoay5hLmEsSCx0LmMuYS1rLmEuYSxqLUgpLGd0PW5ldyBhaCh0LmMuYS1kLEgsZCxqLUgpLEJ3KGssbmV3ICRlKG8uYyxvLmQpKSxCdyhrLG5ldyAkZShvLmMsby5kK28uYSkpO2JyZWFrO2Nhc2UgMTpvPW5ldyBhaChILHQuZC5iLGotSCxrLmIuYi10LmQuYiksZ3Q9bmV3IGFoKEgsdC5kLmIsai1ILGQpLEJ3KGssbmV3ICRlKG8uYyxvLmQrby5hKSksQncoayxuZXcgJGUoby5jK28uYixvLmQrby5hKSk7YnJlYWs7Y2FzZSAzOm89bmV3IGFoKEgsay5hLmIsai1ILHQuYy5iLWsuYS5iKSxndD1uZXcgYWgoSCx0LmMuYi1kLGotSCxkKSxCdyhrLG5ldyAkZShvLmMsby5kKSksQncoayxuZXcgJGUoby5jK28uYixvLmQpKX1vJiYoTT1uZXcgbXF0LE0uZD1NdCxNLmI9byxNLmM9Z3QsTS5hPWIkKHUoQWkodixoc3QoTXQpKSwyMSkpLGguY1toLmMubGVuZ3RoXT1NKX1yZXR1cm4gTHMobi5iLGgpLG4uZD1kbG4oYjRuKGspKSxufWZ1bmN0aW9uIFdoZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEs7aWYobi5wW2UucF09PW51bGwpe2Q9ITAsbi5wW2UucF09MCxoPWUsSz1uLm89PShDMSgpLEgyKT9DczphcztkbyBzPXQuYi5lW2gucF0sbz1oLmMuYS5jLmxlbmd0aCxuLm89PUgyJiZzPjB8fG4ubz09SDEmJnM8by0xPyh2PW51bGwsaz1udWxsLG4ubz09SDE/dj11KE5lKGguYy5hLHMrMSksMTApOnY9dShOZShoLmMuYSxzLTEpLDEwKSxrPW4uZ1t2LnBdLFdoZSh0LGssbiksSz10LmUuYmcoSyxlLGgpLG4ualtlLnBdPT1lJiYobi5qW2UucF09bi5qW2sucF0pLG4ualtlLnBdPT1uLmpbay5wXT8oRz1XMyh0LmQsaCx2KSxuLm89PUgxPyhyPVh0KG4ucFtlLnBdKSxNPVh0KG4ucFtrLnBdKStYdChuLmRbdi5wXSktdi5kLmQtRy1oLmQuYS1oLm8uYi1YdChuLmRbaC5wXSksZD8oZD0hMSxuLnBbZS5wXT1iLk1hdGgubWluKE0sSykpOm4ucFtlLnBdPWIuTWF0aC5taW4ocixiLk1hdGgubWluKE0sSykpKToocj1YdChuLnBbZS5wXSksTT1YdChuLnBbay5wXSkrWHQobi5kW3YucF0pK3Yuby5iK3YuZC5hK0craC5kLmQtWHQobi5kW2gucF0pLGQ/KGQ9ITEsbi5wW2UucF09Yi5NYXRoLm1heChNLEspKTpuLnBbZS5wXT1iLk1hdGgubWF4KHIsYi5NYXRoLm1heChNLEspKSkpOihHPVh0KHllKFEodC5hLChUZSgpLCR2KSkpKSxIPXZuZSh0LG4ualtlLnBdKSxDPXZuZSh0LG4ualtrLnBdKSxuLm89PUgxPyhqPVh0KG4ucFtlLnBdKStYdChuLmRbaC5wXSkraC5vLmIraC5kLmErRy0oWHQobi5wW2sucF0pK1h0KG4uZFt2LnBdKS12LmQuZCksblp0KEgsQyxqKSk6KGo9WHQobi5wW2UucF0pK1h0KG4uZFtoLnBdKS1oLmQuZC1YdChuLnBbay5wXSktWHQobi5kW3YucF0pLXYuby5iLXYuZC5hLUcsblp0KEgsQyxqKSkpKTpLPXQuZS5iZyhLLGUsaCksaD1uLmFbaC5wXTt3aGlsZShoIT1lKTtvS2UodC5lLGUpfX1mdW5jdGlvbiBseG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuLHpuLGhyO2ZvcihTdD1lLE10PW5ldyBVdyxSdD1uZXcgVXcsQz1LdyhTdCxFOHQpLHI9bmV3IFVYdCh0LG4sTXQsUnQpLFlnbihyLmEsci5iLHIuYyxyLmQsQyksdj0oX2U9TXQuaSxfZXx8KE10Lmk9bmV3IEszKE10LE10LmMpKSksUWU9di5LYygpO1FlLk9iKCk7KWZvcihXZT11KFFlLlBiKCksMjAyKSxzPXUoQWkoTXQsV2UpLDIxKSxLPXMuS2MoKTtLLk9iKCk7KWlmKEc9Sy5QYigpLEt0PXUobjQodC5kLEcpLDIwMiksS3QpZD0oIVdlLmUmJihXZS5lPW5ldyBDbihKaSxXZSwxMCw5KSksV2UuZSksRHIoZCxLdCk7ZWxzZSB0aHJvdyBoPVIwKFN0LEFkKSxqPUdkZStHK1VkZStoLEg9aitKRSxpdChuZXcgdWQoSCkpO2ZvcihrPSh1ZT1SdC5pLHVlfHwoUnQuaT1uZXcgSzMoUnQsUnQuYykpKSx6bj1rLktjKCk7em4uT2IoKTspZm9yKFJuPXUoem4uUGIoKSwyMDIpLG89dShBaShSdCxSbiksMjEpLGd0PW8uS2MoKTtndC5PYigpOylpZih0dD1ndC5QYigpLEt0PXUobjQodC5kLHR0KSwyMDIpLEt0KU09KCFSbi5nJiYoUm4uZz1uZXcgQ24oSmksUm4sOSwxMCkpLFJuLmcpLERyKE0sS3QpO2Vsc2UgdGhyb3cgaD1SMChTdCxBZCksaj1HZGUrdHQrVWRlK2gsSD1qK0pFLGl0KG5ldyB1ZChIKSk7IW4uYiYmKG4uYj1uZXcgQ24oYnIsbiw0LDcpKSxuLmIuaSE9MCYmKCFuLmMmJihuLmM9bmV3IENuKGJyLG4sNSw4KSksbi5jLmkhPTApJiYoIW4uYiYmKG4uYj1uZXcgQ24oYnIsbiw0LDcpKSxuLmIuaTw9MSYmKCFuLmMmJihuLmM9bmV3IENuKGJyLG4sNSw4KSksbi5jLmk8PTEpKSYmKCFuLmEmJihuLmE9bmV3IGZlKEppLG4sNiw2KSksbi5hKS5pPT0xJiYoaHI9dShBdCgoIW4uYSYmKG4uYT1uZXcgZmUoSmksbiw2LDYpKSxuLmEpLDApLDIwMiksIWJzdChocikmJiF3c3QoaHIpJiYodXooaHIsdShBdCgoIW4uYiYmKG4uYj1uZXcgQ24oYnIsbiw0LDcpKSxuLmIpLDApLDgyKSksbHooaHIsdShBdCgoIW4uYyYmKG4uYz1uZXcgQ24oYnIsbiw1LDgpKSxuLmMpLDApLDgyKSkpKX1mdW5jdGlvbiBoeG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuO2ZvcihTdD10LmEsUnQ9MCxLdD1TdC5sZW5ndGg7UnQ8S3Q7KytSdCl7Zm9yKE10PVN0W1J0XSxrPXdpLEM9d2ksRz1uZXcgUyhNdC5lKTtHLmE8Ry5jLmMubGVuZ3RoOylqPXUoSihHKSwxMCksaD1qLmM/Um8oai5jLmEsaiwwKTotMSxoPjA/KE09dShOZShqLmMuYSxoLTEpLDEwKSxXZT1XMyh0LmIsaixNKSx0dD1qLm4uYi1qLmQuZC0oTS5uLmIrTS5vLmIrTS5kLmErV2UpKTp0dD1qLm4uYi1qLmQuZCxrPWIuTWF0aC5taW4odHQsayksaDxqLmMuYS5jLmxlbmd0aC0xPyhNPXUoTmUoai5jLmEsaCsxKSwxMCksV2U9VzModC5iLGosTSksZ3Q9TS5uLmItTS5kLmQtKGoubi5iK2ouby5iK2ouZC5hK1dlKSk6Z3Q9MipqLm4uYixDPWIuTWF0aC5taW4oZ3QsQyk7Zm9yKHY9d2ksbz0hMSxzPXUoTmUoTXQuZSwwKSwxMCksUm49bmV3IFMocy5qKTtSbi5hPFJuLmMuYy5sZW5ndGg7KWZvcihRZT11KEooUm4pLDExKSxLPXMubi5iK1FlLm4uYitRZS5hLmIscj1uZXcgUyhRZS5lKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxNyksdWU9bi5jLGU9dWUuaS5uLmIrdWUubi5iK3VlLmEuYi1LLGIuTWF0aC5hYnMoZSk8Yi5NYXRoLmFicyh2KSYmYi5NYXRoLmFicyhlKTwoZTwwP2s6QykmJih2PWUsbz0hMCk7Zm9yKGQ9dShOZShNdC5lLE10LmUuYy5sZW5ndGgtMSksMTApLF9lPW5ldyBTKGQuaik7X2UuYTxfZS5jLmMubGVuZ3RoOylmb3IodWU9dShKKF9lKSwxMSksSz1kLm4uYit1ZS5uLmIrdWUuYS5iLHI9bmV3IFModWUuZyk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTcpLFFlPW4uZCxlPVFlLmkubi5iK1FlLm4uYitRZS5hLmItSyxiLk1hdGguYWJzKGUpPGIuTWF0aC5hYnModikmJmIuTWF0aC5hYnMoZSk8KGU8MD9rOkMpJiYodj1lLG89ITApO2lmKG8mJnYhPTApZm9yKEg9bmV3IFMoTXQuZSk7SC5hPEguYy5jLmxlbmd0aDspaj11KEooSCksMTApLGoubi5iKz12fX1mdW5jdGlvbiBZaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0O2lmKFRsKHQuYSxlKSl7aWYoSTAodSh0cih0LmEsZSksNTMpLG4pKXJldHVybiAxfWVsc2Uga2kodC5hLGUsbmV3IEhzKTtpZihUbCh0LmEsbikpe2lmKEkwKHUodHIodC5hLG4pLDUzKSxlKSlyZXR1cm4tMX1lbHNlIGtpKHQuYSxuLG5ldyBIcyk7aWYoVGwodC5lLGUpKXtpZihJMCh1KHRyKHQuZSxlKSw1MyksbikpcmV0dXJuLTF9ZWxzZSBraSh0LmUsZSxuZXcgSHMpO2lmKFRsKHQuZSxuKSl7aWYoSTAodSh0cih0LmEsbiksNTMpLGUpKXJldHVybiAxfWVsc2Uga2kodC5lLG4sbmV3IEhzKTtpZih0LmM9PShWMCgpLEVodCl8fCFVcyhlLChhZSgpLFRjKSl8fCFVcyhuLChhZSgpLFRjKSkpe2lmKHY9dShQMnQob0p0KE1pdChSaShuZXcgVG4obnVsbCxuZXcgX24oZS5qLDE2KSksbmV3IE5MKSksbmV3IHFOKSksMTEpLEM9dShQMnQob0p0KE1pdChSaShuZXcgVG4obnVsbCxuZXcgX24obi5qLDE2KSksbmV3IHRRKSksbmV3IGVRKSksMTEpLHYmJkMpe2lmKGQ9di5pLGs9Qy5pLGQmJmQ9PWspe2ZvcihqPW5ldyBTKGQuaik7ai5hPGouYy5jLmxlbmd0aDspe2lmKE09dShKKGopLDExKSxNPT12KXJldHVybiBMRSh0LG4sZSksLTE7aWYoTT09QylyZXR1cm4gTEUodCxlLG4pLDF9cmV0dXJuIHB1KEZzdCh0LGUpLEZzdCh0LG4pKX1mb3IoRz10LmQsSz0wLHR0PUcubGVuZ3RoO0s8dHQ7KytLKXtpZihIPUdbS10sSD09ZClyZXR1cm4gTEUodCxuLGUpLC0xO2lmKEg9PWspcmV0dXJuIExFKHQsZSxuKSwxfX1pZighVXMoZSwoYWUoKSxUYykpfHwhVXMobixUYykpcmV0dXJuIHM9RnN0KHQsZSksaD1Gc3QodCxuKSxzPmg/TEUodCxlLG4pOkxFKHQsbixlKSxzPGg/LTE6cz5oPzE6MH1yZXR1cm4gcj11KFEoZSwoYWUoKSxUYykpLDE5KS5hLG89dShRKG4sVGMpLDE5KS5hLHI+bz9MRSh0LGUsbik6TEUodCxuLGUpLHI8bz8tMTpyPm8/MTowfWZ1bmN0aW9uIER4dCh0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQ7aWYoamUoUmUocWUoZSwodWkoKSxRRykpKSkpcmV0dXJuIHduKCksd24oKSxpbztpZihrPSghZS5hJiYoZS5hPW5ldyBmZShycyxlLDEwLDExKSksZS5hKS5pIT0wLE09UXBuKGUpLEM9IU0uZGMoKSxrfHxDKXtpZihzPXUocWUoZSxPNyksMTQ5KSwhcyl0aHJvdyBpdChuZXcgUjMoIlJlc29sdmVkIGFsZ29yaXRobSBpcyBub3Qgc2V0OyBhcHBseSBhIExheW91dEFsZ29yaXRobVJlc29sdmVyIGJlZm9yZSBjb21wdXRpbmcgbGF5b3V0LiIpKTtpZihNdD10MnQocywoQ0UoKSxsVSkpLEppZShlKSwhayYmQyYmIU10KXJldHVybiB3bigpLHduKCksaW87aWYodj1uZXcgaGUsVnQocWUoZSxzNSkpPT09VnQoKEcwKCksc3ApKSYmKHQydChzLGNVKXx8dDJ0KHMsb1UpKSlmb3IoSD1GdWUodCxlKSxHPW5ldyBaaSxVYShHLCghZS5hJiYoZS5hPW5ldyBmZShycyxlLDEwLDExKSksZS5hKSk7Ry5iIT0wOylqPXUoRy5iPT0wP251bGw6KFpuKEcuYiE9MCksbGgoRyxHLmEuYSkpLDMzKSxKaWUoaiksZ3Q9VnQocWUoaixzNSkpPT09VnQoWlMpLGd0fHxvMihqLFlTKSYmIWdtdChzLHFlKGosTzcpKT8oZD1EeHQodCxqLG4sciksTHModixkKSx3byhqLHM1LFpTKSxadWUoaikpOlVhKEcsKCFqLmEmJihqLmE9bmV3IGZlKHJzLGosMTAsMTEpKSxqLmEpKTtlbHNlIGZvcihIPSghZS5hJiYoZS5hPW5ldyBmZShycyxlLDEwLDExKSksZS5hKS5pLGg9bmV3IG5yKCghZS5hJiYoZS5hPW5ldyBmZShycyxlLDEwLDExKSksZS5hKSk7aC5lIT1oLmkuZ2MoKTspbz11KGRyKGgpLDMzKSxkPUR4dCh0LG8sbixyKSxMcyh2LGQpLFp1ZShvKTtmb3IodHQ9bmV3IFModik7dHQuYTx0dC5jLmMubGVuZ3RoOylLPXUoSih0dCksNzkpLHdvKEssUUcsKE5uKCksITApKTtyZXR1cm4gX2ZuKGUscyxSYyhyLEgpKSxHbW4odiksQyYmTXQ/TTood24oKSx3bigpLGlvKX1lbHNlIHJldHVybiB3bigpLHduKCksaW99ZnVuY3Rpb24gTEkodCxlLG4scixzLG8saCxkLHYpe3ZhciBrLEMsTSxqLEgsRyxLO3N3aXRjaChIPW4sQz1uZXcgWTAodiksRDAoQywoVm4oKSxrcykpLEp0KEMsKGFlKCksaUN0KSxoKSxKdChDLChUZSgpLGNzKSwodWEoKSxHYykpLEs9WHQoeWUodC5XZShWeSkpKSxKdChDLFZ5LEspLE09bmV3IE1jLFVvKE0sQyksZSE9RzEmJmUhPVRifHwocj49MD9IPWE2KGQpOkg9WUQoYTYoZCkpLHQuWWUoQzcsSCkpLGs9bmV3IENhLGo9ITEsdC5YZShSdik/KEgydChrLHUodC5XZShSdiksOCkpLGo9ITApOlJRZShrLGguYS8yLGguYi8yKSxILmcpe2Nhc2UgNDpKdChDLHV1LChkaCgpLGJiKSksSnQoQyx0RywoZDIoKSxVNCkpLEMuby5iPWguYixLPDAmJihDLm8uYT0tSyksQnMoTSwodmUoKSxIbikpLGp8fChrLmE9aC5hKSxrLmEtPWguYTticmVhaztjYXNlIDI6SnQoQyx1dSwoZGgoKSxqeSkpLEp0KEMsdEcsKGQyKCksdzcpKSxDLm8uYj1oLmIsSzwwJiYoQy5vLmE9LUspLEJzKE0sKHZlKCksQm4pKSxqfHwoay5hPTApO2JyZWFrO2Nhc2UgMTpKdChDLEIyLChxMCgpLFk0KSksQy5vLmE9aC5hLEs8MCYmKEMuby5iPS1LKSxCcyhNLCh2ZSgpLG1yKSksanx8KGsuYj1oLmIpLGsuYi09aC5iO2JyZWFrO2Nhc2UgMzpKdChDLEIyLChxMCgpLEY2KSksQy5vLmE9aC5hLEs8MCYmKEMuby5iPS1LKSxCcyhNLCh2ZSgpLFBuKSksanx8KGsuYj0wKX1pZihIMnQoTS5uLGspLEp0KEMsUnYsayksZT09WTJ8fGU9PWcwfHxlPT1HYyl7aWYoRz0wLGU9PVkyJiZ0LlhlKHRwKSlzd2l0Y2goSC5nKXtjYXNlIDE6Y2FzZSAyOkc9dSh0LldlKHRwKSwxOSkuYTticmVhaztjYXNlIDM6Y2FzZSA0Okc9LXUodC5XZSh0cCksMTkpLmF9ZWxzZSBzd2l0Y2goSC5nKXtjYXNlIDQ6Y2FzZSAyOkc9by5iLGU9PWcwJiYoRy89cy5iKTticmVhaztjYXNlIDE6Y2FzZSAzOkc9by5hLGU9PWcwJiYoRy89cy5hKX1KdChDLEZ2LEcpfXJldHVybiBKdChDLG9jLEgpLEN9ZnVuY3Rpb24gZnhuKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZSxXZSxRZTtpZihuPVh0KHllKFEodC5hLmosKFRlKCksR0N0KSkpKSxuPC0xfHwhdC5hLml8fGp4KHUoUSh0LmEubyxjcyksOTgpKXx8S28odC5hLm8sKHZlKCksSG4pKS5nYygpPDImJktvKHQuYS5vLEJuKS5nYygpPDIpcmV0dXJuITA7aWYodC5hLmMuUmYoKSlyZXR1cm4hMTtmb3IoS3Q9MCxSdD0wLFN0PW5ldyBoZSx2PXQuYS5lLGs9MCxDPXYubGVuZ3RoO2s8QzsrK2spe2ZvcihkPXZba10saj1kLEg9MCxLPWoubGVuZ3RoO0g8SzsrK0gpe2lmKE09altIXSxNLms9PShWbigpLEhjKSl7U3QuY1tTdC5jLmxlbmd0aF09TTtjb250aW51ZX1mb3Iocj10LmJbTS5jLnBdW00ucF0sTS5rPT1rcz8oci5iPTEsdShRKE0sKGFlKCksX2kpKSwxMSkuaj09KHZlKCksSG4pJiYoUnQrPXIuYSkpOihRZT1LbyhNLCh2ZSgpLEJuKSksUWUuZGMoKXx8IWxudChRZSxuZXcgYlEpP3IuYz0xOihzPUtvKE0sSG4pLChzLmRjKCl8fCFsbnQocyxuZXcgcFEpKSYmKEt0Kz1yLmEpKSksaD1uZXcgYXIobHIoRHMoTSkuYS5LYygpLG5ldyB6KSk7enIoaCk7KW89dShNcihoKSwxNyksS3QrPXIuYyxSdCs9ci5iLFdlPW8uZC5pLERtdCh0LHIsV2UpO2ZvcihndD1EMShsdChjdChqMSwxKSxEZSwyMCwwLFtLbyhNLCh2ZSgpLFBuKSksS28oTSxtcildKSksX2U9bmV3IGFyKG5ldyBDMnQoZ3QuYS5sZW5ndGgsZ3QuYSkpO3pyKF9lKTspdWU9dShNcihfZSksMTEpLE10PXUoUSh1ZSwoYWUoKSxKdSkpLDEwKSxNdCYmKEt0Kz1yLmMsUnQrPXIuYixEbXQodCxyLE10KSl9Zm9yKEc9bmV3IFMoU3QpO0cuYTxHLmMuYy5sZW5ndGg7KWZvcihNPXUoSihHKSwxMCkscj10LmJbTS5jLnBdW00ucF0saD1uZXcgYXIobHIoRHMoTSkuYS5LYygpLG5ldyB6KSk7enIoaCk7KW89dShNcihoKSwxNyksS3QrPXIuYyxSdCs9ci5iLFdlPW8uZC5pLERtdCh0LHIsV2UpO1N0LmM9TnQoUW4sRGUsMSwwLDUsMSl9cmV0dXJuIGU9S3QrUnQsdHQ9ZT09MD9hczooS3QtUnQpL2UsdHQ+PW59ZnVuY3Rpb24gZHhuKCl7ZGJ0KCk7ZnVuY3Rpb24gdChyKXt2YXIgcz10aGlzO3RoaXMuZGlzcGF0Y2g9ZnVuY3Rpb24obyl7dmFyIGg9by5kYXRhO3N3aXRjaChoLmNtZCl7Y2FzZSJhbGdvcml0aG1zIjp2YXIgZD14M3QoKHduKCksbmV3IFQobmV3IHYxKEFiLmIpKSkpO3IucG9zdE1lc3NhZ2Uoe2lkOmguaWQsZGF0YTpkfSk7YnJlYWs7Y2FzZSJjYXRlZ29yaWVzIjp2YXIgdj14M3QoKHduKCksbmV3IFQobmV3IHYxKEFiLmMpKSkpO3IucG9zdE1lc3NhZ2Uoe2lkOmguaWQsZGF0YTp2fSk7YnJlYWs7Y2FzZSJvcHRpb25zIjp2YXIgaz14M3QoKHduKCksbmV3IFQobmV3IHYxKEFiLmQpKSkpO3IucG9zdE1lc3NhZ2Uoe2lkOmguaWQsZGF0YTprfSk7YnJlYWs7Y2FzZSJyZWdpc3RlciI6eTRuKGguYWxnb3JpdGhtcyksci5wb3N0TWVzc2FnZSh7aWQ6aC5pZH0pO2JyZWFrO2Nhc2UibGF5b3V0Ijp0M24oaC5ncmFwaCxoLmxheW91dE9wdGlvbnN8fHt9LGgub3B0aW9uc3x8e30pLHIucG9zdE1lc3NhZ2Uoe2lkOmguaWQsZGF0YTpoLmdyYXBofSk7YnJlYWt9fSx0aGlzLnNhdmVEaXNwYXRjaD1mdW5jdGlvbihvKXt0cnl7cy5kaXNwYXRjaChvKX1jYXRjaChoKXtyLnBvc3RNZXNzYWdlKHtpZDpvLmRhdGEuaWQsZXJyb3I6aH0pfX19ZnVuY3Rpb24gZShyKXt2YXIgcz10aGlzO3RoaXMuZGlzcGF0Y2hlcj1uZXcgdCh7cG9zdE1lc3NhZ2U6ZnVuY3Rpb24obyl7cy5vbm1lc3NhZ2Uoe2RhdGE6b30pfX0pLHRoaXMucG9zdE1lc3NhZ2U9ZnVuY3Rpb24obyl7c2V0VGltZW91dChmdW5jdGlvbigpe3MuZGlzcGF0Y2hlci5zYXZlRGlzcGF0Y2goe2RhdGE6b30pfSwwKX19aWYodHlwZW9mIGRvY3VtZW50PT09X290JiZ0eXBlb2Ygc2VsZiE9PV9vdCl7dmFyIG49bmV3IHQoc2VsZik7c2VsZi5vbm1lc3NhZ2U9bi5zYXZlRGlzcGF0Y2h9ZWxzZSB0eXBlb2YgcCE9PV9vdCYmcC5leHBvcnRzJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHAuZXhwb3J0cz17ZGVmYXVsdDplLFdvcmtlcjplfSl9ZnVuY3Rpb24gZ3huKHQpe3QuTnx8KHQuTj0hMCx0LmI9aWModCwwKSxucyh0LmIsMCksbnModC5iLDEpLG5zKHQuYiwyKSx0LmJiPWljKHQsMSksbnModC5iYiwwKSxucyh0LmJiLDEpLHQuZmI9aWModCwyKSxucyh0LmZiLDMpLG5zKHQuZmIsNCksRmkodC5mYiw1KSx0LnFiPWljKHQsMyksbnModC5xYiwwKSxGaSh0LnFiLDEpLEZpKHQucWIsMiksbnModC5xYiwzKSxucyh0LnFiLDQpLEZpKHQucWIsNSksbnModC5xYiw2KSx0LmE9b2kodCw0KSx0LmM9b2kodCw1KSx0LmQ9b2kodCw2KSx0LmU9b2kodCw3KSx0LmY9b2kodCw4KSx0Lmc9b2kodCw5KSx0Lmk9b2kodCwxMCksdC5qPW9pKHQsMTEpLHQuaz1vaSh0LDEyKSx0Lm49b2kodCwxMyksdC5vPW9pKHQsMTQpLHQucD1vaSh0LDE1KSx0LnE9b2kodCwxNiksdC5zPW9pKHQsMTcpLHQucj1vaSh0LDE4KSx0LnQ9b2kodCwxOSksdC51PW9pKHQsMjApLHQudj1vaSh0LDIxKSx0Lnc9b2kodCwyMiksdC5CPW9pKHQsMjMpLHQuQT1vaSh0LDI0KSx0LkM9b2kodCwyNSksdC5EPW9pKHQsMjYpLHQuRj1vaSh0LDI3KSx0Lkc9b2kodCwyOCksdC5IPW9pKHQsMjkpLHQuSj1vaSh0LDMwKSx0Lkk9b2kodCwzMSksdC5LPW9pKHQsMzIpLHQuTT1vaSh0LDMzKSx0Lkw9b2kodCwzNCksdC5QPW9pKHQsMzUpLHQuUT1vaSh0LDM2KSx0LlI9b2kodCwzNyksdC5TPW9pKHQsMzgpLHQuVD1vaSh0LDM5KSx0LlU9b2kodCw0MCksdC5WPW9pKHQsNDEpLHQuWD1vaSh0LDQyKSx0Llc9b2kodCw0MyksdC5ZPW9pKHQsNDQpLHQuWj1vaSh0LDQ1KSx0LiQ9b2kodCw0NiksdC5fPW9pKHQsNDcpLHQuYWI9b2kodCw0OCksdC5jYj1vaSh0LDQ5KSx0LmRiPW9pKHQsNTApLHQuZWI9b2kodCw1MSksdC5nYj1vaSh0LDUyKSx0LmhiPW9pKHQsNTMpLHQuaWI9b2kodCw1NCksdC5qYj1vaSh0LDU1KSx0LmtiPW9pKHQsNTYpLHQubGI9b2kodCw1NyksdC5tYj1vaSh0LDU4KSx0Lm5iPW9pKHQsNTkpLHQub2I9b2kodCw2MCksdC5wYj1vaSh0LDYxKSl9ZnVuY3Rpb24gcHhuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdDtpZihNdD0wLGUuZi5hPT0wKWZvcih0dD1uZXcgUyh0KTt0dC5hPHR0LmMuYy5sZW5ndGg7KUc9dShKKHR0KSwxMCksTXQ9Yi5NYXRoLm1heChNdCxHLm4uYStHLm8uYStHLmQuYyk7ZWxzZSBNdD1lLmYuYS1lLmMuYTtmb3IoTXQtPWUuYy5hLEs9bmV3IFModCk7Sy5hPEsuYy5jLmxlbmd0aDspe3N3aXRjaChHPXUoSihLKSwxMCksREMoRy5uLE10LUcuby5hKSxOd3QoRy5mKSxqc2UoRyksKEcucT9HLnE6KHduKCksd24oKSx1MCkpLl9iKChUZSgpLFV5KSkmJkRDKHUoUShHLFV5KSw4KSxNdC1HLm8uYSksdShRKEcsSWQpLDI0OCkuZyl7Y2FzZSAxOkp0KEcsSWQsKHQwKCksVU8pKTticmVhaztjYXNlIDI6SnQoRyxJZCwodDAoKSxHTykpfWZvcihndD1HLm8sUnQ9bmV3IFMoRy5qKTtSdC5hPFJ0LmMuYy5sZW5ndGg7KXtmb3IoU3Q9dShKKFJ0KSwxMSksREMoU3QubixndC5hLVN0Lm8uYSksREMoU3QuYSxTdC5vLmEpLEJzKFN0LE9uZShTdC5qKSksaD11KFEoU3QsdHApLDE5KSxoJiZKdChTdCx0cCxwZSgtaC5hKSksbz1uZXcgUyhTdC5nKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKHM9dShKKG8pLDE3KSxyPWVpKHMuYSwwKTtyLmIhPXIuZC5jOyluPXUodGkociksOCksbi5hPU10LW4uYTtpZihrPXUoUShzLFNvKSw3NCksaylmb3Iodj1laShrLDApO3YuYiE9di5kLmM7KWQ9dSh0aSh2KSw4KSxkLmE9TXQtZC5hO2ZvcihqPW5ldyBTKHMuYik7ai5hPGouYy5jLmxlbmd0aDspQz11KEooaiksNzApLERDKEMubixNdC1DLm8uYSl9Zm9yKEg9bmV3IFMoU3QuZik7SC5hPEguYy5jLmxlbmd0aDspQz11KEooSCksNzApLERDKEMubixTdC5vLmEtQy5vLmEpfWZvcihHLms9PShWbigpLGtzKSYmKEp0KEcsKGFlKCksb2MpLE9uZSh1KFEoRyxvYyksNjEpKSkseGduKEcpKSxNPW5ldyBTKEcuYik7TS5hPE0uYy5jLmxlbmd0aDspQz11KEooTSksNzApLGpzZShDKSxEQyhDLm4sZ3QuYS1DLm8uYSl9fWZ1bmN0aW9uIGJ4bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQ7aWYoTXQ9MCxlLmYuYj09MClmb3IodHQ9bmV3IFModCk7dHQuYTx0dC5jLmMubGVuZ3RoOylHPXUoSih0dCksMTApLE10PWIuTWF0aC5tYXgoTXQsRy5uLmIrRy5vLmIrRy5kLmEpO2Vsc2UgTXQ9ZS5mLmItZS5jLmI7Zm9yKE10LT1lLmMuYixLPW5ldyBTKHQpO0suYTxLLmMuYy5sZW5ndGg7KXtzd2l0Y2goRz11KEooSyksMTApLE1DKEcubixNdC1HLm8uYiksQnd0KEcuZiksJHNlKEcpLChHLnE/Ry5xOih3bigpLHduKCksdTApKS5fYigoVGUoKSxVeSkpJiZNQyh1KFEoRyxVeSksOCksTXQtRy5vLmIpLHUoUShHLElkKSwyNDgpLmcpe2Nhc2UgMzpKdChHLElkLCh0MCgpLEdHKSk7YnJlYWs7Y2FzZSA0Okp0KEcsSWQsKHQwKCksV0cpKX1mb3IoZ3Q9Ry5vLFJ0PW5ldyBTKEcuaik7UnQuYTxSdC5jLmMubGVuZ3RoOyl7Zm9yKFN0PXUoSihSdCksMTEpLE1DKFN0Lm4sZ3QuYi1TdC5vLmIpLE1DKFN0LmEsU3Quby5iKSxCcyhTdCxQbmUoU3QuaikpLGg9dShRKFN0LHRwKSwxOSksaCYmSnQoU3QsdHAscGUoLWguYSkpLG89bmV3IFMoU3QuZyk7by5hPG8uYy5jLmxlbmd0aDspe2ZvcihzPXUoSihvKSwxNykscj1laShzLmEsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDgpLG4uYj1NdC1uLmI7aWYoaz11KFEocyxTbyksNzQpLGspZm9yKHY9ZWkoaywwKTt2LmIhPXYuZC5jOylkPXUodGkodiksOCksZC5iPU10LWQuYjtmb3Ioaj1uZXcgUyhzLmIpO2ouYTxqLmMuYy5sZW5ndGg7KUM9dShKKGopLDcwKSxNQyhDLm4sTXQtQy5vLmIpfWZvcihIPW5ldyBTKFN0LmYpO0guYTxILmMuYy5sZW5ndGg7KUM9dShKKEgpLDcwKSxNQyhDLm4sU3Quby5iLUMuby5iKX1mb3IoRy5rPT0oVm4oKSxrcykmJihKdChHLChhZSgpLG9jKSxQbmUodShRKEcsb2MpLDYxKSkpLEhsbihHKSksTT1uZXcgUyhHLmIpO00uYTxNLmMuYy5sZW5ndGg7KUM9dShKKE0pLDcwKSwkc2UoQyksTUMoQy5uLGd0LmItQy5vLmIpfX1mdW5jdGlvbiB3eG4odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEg7Zm9yKE09ITEsaz10KzEsQz0oQW4odCxlLmMubGVuZ3RoKSx1KGUuY1t0XSwyMDApKSxoPUMuYSxkPW51bGwsbz0wO288Qy5hLmMubGVuZ3RoO28rKylpZihzPShBbihvLGguYy5sZW5ndGgpLHUoaC5jW29dLDE4NykpLCFzLmMpe2lmKHMuYi5jLmxlbmd0aD09MCl7R2QoKSxzSShDLHMpLC0tbyxNPSEwO2NvbnRpbnVlfWlmKHMua3x8KGQmJm5xKGQpLGQ9bmV3IHF2dChkP2QuZStkLmQrcjowLEMuZixyKSx0SShzLGQuZStkLmQsQy5mKSxsZShDLmQsZCkscHl0KGQscykscy5rPSEwKSx2PW51bGwsdj0oSD1udWxsLG88Qy5hLmMubGVuZ3RoLTE/SD11KE5lKEMuYSxvKzEpLDE4Nyk6azxlLmMubGVuZ3RoJiYoQW4oayxlLmMubGVuZ3RoKSx1KGUuY1trXSwyMDApKS5hLmMubGVuZ3RoIT0wJiYoSD11KE5lKChBbihrLGUuYy5sZW5ndGgpLHUoZS5jW2tdLDIwMCkpLmEsMCksMTg3KSksSCksaj0hMSx2JiYoaj0heWkodi5qLEMpKSx2KXtpZih2LmIuYy5sZW5ndGg9PTApe3NJKEMsdik7YnJlYWt9ZWxzZSB2RChzLG4tcy5zKSxucShzLnEpLE09TXxrZ24oQyxzLHYsbixyKTtpZih2LmIuYy5sZW5ndGg9PTApZm9yKHNJKChBbihrLGUuYy5sZW5ndGgpLHUoZS5jW2tdLDIwMCkpLHYpLHY9bnVsbDtlLmMubGVuZ3RoPmsmJihBbihrLGUuYy5sZW5ndGgpLHUoZS5jW2tdLDIwMCkpLmEuYy5sZW5ndGg9PTA7KW11KGUsKEFuKGssZS5jLmxlbmd0aCksZS5jW2tdKSk7aWYoIXYpey0tbztjb250aW51ZX1pZihleW4oZSxDLHMsdixqLG4sayxyKSl7TT0hMDtjb250aW51ZX1pZihqKXtpZihjM24oZSxDLHMsdixuLGsscikpe009ITA7Y29udGludWV9ZWxzZSBpZihZeXQoQyxzKSl7cy5jPSEwLE09ITA7Y29udGludWV9fWVsc2UgaWYoWXl0KEMscykpe3MuYz0hMCxNPSEwO2NvbnRpbnVlfWlmKE0pY29udGludWV9aWYoWXl0KEMscykpe3MuYz0hMCxNPSEwLHYmJih2Lms9ITEpO2NvbnRpbnVlfWVsc2UgbnEocy5xKX1yZXR1cm4gTX1mdW5jdGlvbiB6YXQodCxlLG4scixzLG8saCl7dmFyIGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuLHpuLGhyLHBpLGpzO2ZvcihLPTAsUm49MCxrPW5ldyBTKHQuYik7ay5hPGsuYy5jLmxlbmd0aDspdj11KEooayksMTU3KSx2LmMmJkVoZSh2LmMpLEs9Yi5NYXRoLm1heChLLFJ1KHYpKSxSbis9UnUodikqRWwodik7Zm9yKHR0PVJuL3QuYi5jLmxlbmd0aCxRZT1PZG4odC5iLHR0KSxSbis9dC5iLmMubGVuZ3RoKlFlLEs9Yi5NYXRoLm1heChLLGIuTWF0aC5zcXJ0KFJuKmgpKStuLmIscGk9bi5iLGpzPW4uZCxIPTAsTT1uLmIrbi5jLFdlPW5ldyBaaSxyaShXZSxwZSgwKSksdWU9bmV3IFppLEM9bmV3IGRhKHQuYiwwKSxHPW51bGwsZD1uZXcgaGU7Qy5iPEMuZC5nYygpOyl2PShabihDLmI8Qy5kLmdjKCkpLHUoQy5kLlhiKEMuYz1DLmIrKyksMTU3KSksaHI9UnUodiksaj1FbCh2KSxwaStocj5LJiYobyYmKFpiKHVlLEgpLFpiKFdlLHBlKEMuYi0xKSksbGUodC5kLEcpLGQuYz1OdChRbixEZSwxLDAsNSwxKSkscGk9bi5iLGpzKz1IK2UsSD0wLE09Yi5NYXRoLm1heChNLG4uYituLmMraHIpKSxkLmNbZC5jLmxlbmd0aF09dixoc2UodixwaSxqcyksTT1iLk1hdGgubWF4KE0scGkraHIrbi5jKSxIPWIuTWF0aC5tYXgoSCxqKSxwaSs9aHIrZSxHPXY7aWYoTHModC5hLGQpLGxlKHQuZCx1KE5lKGQsZC5jLmxlbmd0aC0xKSwxNTcpKSxNPWIuTWF0aC5tYXgoTSxyKSx6bj1qcytIK24uYSx6bjxzJiYoSCs9cy16bix6bj1zKSxvKWZvcihwaT1uLmIsQz1uZXcgZGEodC5iLDApLFpiKFdlLHBlKHQuYi5jLmxlbmd0aCkpLF9lPWVpKFdlLDApLE10PXUodGkoX2UpLDE5KS5hLFpiKHVlLEgpLEt0PWVpKHVlLDApLFJ0PTA7Qy5iPEMuZC5nYygpOylDLmI9PU10JiYocGk9bi5iLFJ0PVh0KHllKHRpKEt0KSkpLE10PXUodGkoX2UpLDE5KS5hKSx2PShabihDLmI8Qy5kLmdjKCkpLHUoQy5kLlhiKEMuYz1DLmIrKyksMTU3KSksR2llKHYsUnQpLEMuYj09TXQmJihndD1NLXBpLW4uYyxTdD1SdSh2KSxWaWUodixndCksZ2llKHYsKGd0LVN0KS8yLDApKSxwaSs9UnUodikrZTtyZXR1cm4gbmV3ICRlKE0sem4pfWZ1bmN0aW9uIHZ4bih0KXt2YXIgZSxuLHIscyxvO3N3aXRjaChlPXQuYyxvPW51bGwsZSl7Y2FzZSA2OnJldHVybiB0LlZsKCk7Y2FzZSAxMzpyZXR1cm4gdC5XbCgpO2Nhc2UgMjM6cmV0dXJuIHQuTmwoKTtjYXNlIDIyOnJldHVybiB0LlNsKCk7Y2FzZSAxODpyZXR1cm4gdC5QbCgpO2Nhc2UgODpmaSh0KSxvPShnaSgpLEFMdCk7YnJlYWs7Y2FzZSA5OnJldHVybiB0LnZsKCEwKTtjYXNlIDE5OnJldHVybiB0LndsKCk7Y2FzZSAxMDpzd2l0Y2godC5hKXtjYXNlIDEwMDpjYXNlIDY4OmNhc2UgMTE5OmNhc2UgODc6Y2FzZSAxMTU6Y2FzZSA4MzpyZXR1cm4gbz10LnVsKHQuYSksZmkodCksbztjYXNlIDEwMTpjYXNlIDEwMjpjYXNlIDExMDpjYXNlIDExNDpjYXNlIDExNjpjYXNlIDExNzpjYXNlIDExODpjYXNlIDEyMDpuPXQudGwoKSxuPEthP289KGdpKCksZ2koKSxuZXcgWWQoMCxuKSk6bz16S3QobDN0KG4pKTticmVhaztjYXNlIDk5OnJldHVybiB0LkZsKCk7Y2FzZSA2NzpyZXR1cm4gdC5BbCgpO2Nhc2UgMTA1OnJldHVybiB0LklsKCk7Y2FzZSA3MzpyZXR1cm4gdC5CbCgpO2Nhc2UgMTAzOnJldHVybiB0LkdsKCk7Y2FzZSA4ODpyZXR1cm4gdC5DbCgpO2Nhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OnJldHVybiB0LnhsKCk7Y2FzZSA4MDpjYXNlIDExMjppZihvPXU1dCh0LHQuYSksIW8pdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLGN1dCkpKSk7YnJlYWs7ZGVmYXVsdDpvPWFLdCh0LmEpfWZpKHQpO2JyZWFrO2Nhc2UgMDppZih0LmE9PTkzfHx0LmE9PTEyM3x8dC5hPT0xMjUpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLEk4dCkpKSk7bz1hS3QodC5hKSxyPXQuYSxmaSh0KSwociY2NDUxMik9PVJJJiZ0LmM9PTAmJih0LmEmNjQ1MTIpPT01NjMyMCYmKHM9TnQoeGgseWQsMjUsMiwxNSwxKSxzWzBdPXImeXMsc1sxXT10LmEmeXMsbz1LbnQoekt0KE1oKHMsMCxzLmxlbmd0aCkpLDApLGZpKHQpKTticmVhaztkZWZhdWx0OnRocm93IGl0KG5ldyBOcihxcigoUHIoKSxJOHQpKSkpfXJldHVybiBvfWZ1bmN0aW9uIG14bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3Q7aWYocj1uZXcgaGUscz13aSxvPXdpLGg9d2ksbilmb3Iocz10LmYuYSxLPW5ldyBTKGUuaik7Sy5hPEsuYy5jLmxlbmd0aDspZm9yKEc9dShKKEspLDExKSx2PW5ldyBTKEcuZyk7di5hPHYuYy5jLmxlbmd0aDspZD11KEoodiksMTcpLGQuYS5iIT0wJiYoQz11KHdudChkLmEpLDgpLEMuYTxzJiYobz1zLUMuYSxoPXdpLHIuYz1OdChRbixEZSwxLDAsNSwxKSxzPUMuYSksQy5hPD1zJiYoci5jW3IuYy5sZW5ndGhdPWQsZC5hLmI+MSYmKGg9Yi5NYXRoLm1pbihoLGIuTWF0aC5hYnModShaZihkLmEsMSksOCkuYi1DLmIpKSkpKTtlbHNlIGZvcihLPW5ldyBTKGUuaik7Sy5hPEsuYy5jLmxlbmd0aDspZm9yKEc9dShKKEspLDExKSx2PW5ldyBTKEcuZSk7di5hPHYuYy5jLmxlbmd0aDspZD11KEoodiksMTcpLGQuYS5iIT0wJiYoaj11KEFqKGQuYSksOCksai5hPnMmJihvPWouYS1zLGg9d2ksci5jPU50KFFuLERlLDEsMCw1LDEpLHM9ai5hKSxqLmE+PXMmJihyLmNbci5jLmxlbmd0aF09ZCxkLmEuYj4xJiYoaD1iLk1hdGgubWluKGgsYi5NYXRoLmFicyh1KFpmKGQuYSxkLmEuYi0yKSw4KS5iLWouYikpKSkpO2lmKHIuYy5sZW5ndGghPTAmJm8+ZS5vLmEvMiYmaD5lLm8uYi8yKXtmb3IoSD1uZXcgTWMsVW8oSCxlKSxCcyhILCh2ZSgpLFBuKSksSC5uLmE9ZS5vLmEvMixndD1uZXcgTWMsVW8oZ3QsZSksQnMoZ3QsbXIpLGd0Lm4uYT1lLm8uYS8yLGd0Lm4uYj1lLm8uYix2PW5ldyBTKHIpO3YuYTx2LmMuYy5sZW5ndGg7KWQ9dShKKHYpLDE3KSxuPyhrPXUoT250KGQuYSksOCksdHQ9ZC5hLmI9PTA/XzEoZC5kKTp1KHdudChkLmEpLDgpLHR0LmI+PWsuYj9PYShkLGd0KTpPYShkLEgpKTooaz11KGhlbihkLmEpLDgpLHR0PWQuYS5iPT0wP18xKGQuYyk6dShBaihkLmEpLDgpLHR0LmI+PWsuYj9vYShkLGd0KTpvYShkLEgpKSxNPXUoUShkLChUZSgpLFNvKSksNzQpLE0mJmF5KE0saywhMCk7ZS5uLmE9cy1lLm8uYS8yfX1mdW5jdGlvbiB5eG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuLHpuLGhyLHBpLGpzLFpsLFhoO2lmKFJuPW51bGwsaHI9ZSx6bj1aWnQodCxZWnQobiksaHIpLEc5KHpuLFIwKGhyLEFkKSkscGk9dShuNCh0LmcsZjYoQjAoaHIsWGN0KSkpLDMzKSxqPUIwKGhyLCJzb3VyY2VQb3J0Iikscj1udWxsLGomJihyPWY2KGopKSxqcz11KG40KHQuaixyKSwxMTgpLCFwaSl0aHJvdyBkPXBFKGhyKSxHPSJBbiBlZGdlIG11c3QgaGF2ZSBhIHNvdXJjZSBub2RlIChlZGdlIGlkOiAnIitkLEs9RytKRSxpdChuZXcgdWQoSykpO2lmKGpzJiYhcGQoVDEoanMpLHBpKSl0aHJvdyB2PVIwKGhyLEFkKSx0dD0iVGhlIHNvdXJjZSBwb3J0IG9mIGFuIGVkZ2UgbXVzdCBiZSBhIHBvcnQgb2YgdGhlIGVkZ2UncyBzb3VyY2Ugbm9kZSAoZWRnZSBpZDogJyIrdixndD10dCtKRSxpdChuZXcgdWQoZ3QpKTtpZihXZT0oIXpuLmImJih6bi5iPW5ldyBDbihicix6biw0LDcpKSx6bi5iKSxvPW51bGwsanM/bz1qczpvPXBpLERyKFdlLG8pLFpsPXUobjQodC5nLGY2KEIwKGhyLE04dCkpKSwzMyksSD1CMChociwidGFyZ2V0UG9ydCIpLHM9bnVsbCxIJiYocz1mNihIKSksWGg9dShuNCh0LmoscyksMTE4KSwhWmwpdGhyb3cgTT1wRShociksTXQ9IkFuIGVkZ2UgbXVzdCBoYXZlIGEgdGFyZ2V0IG5vZGUgKGVkZ2UgaWQ6ICciK00sU3Q9TXQrSkUsaXQobmV3IHVkKFN0KSk7aWYoWGgmJiFwZChUMShYaCksWmwpKXRocm93IGs9UjAoaHIsQWQpLFJ0PSJUaGUgdGFyZ2V0IHBvcnQgb2YgYW4gZWRnZSBtdXN0IGJlIGEgcG9ydCBvZiB0aGUgZWRnZSdzIHRhcmdldCBub2RlIChlZGdlIGlkOiAnIitrLEt0PVJ0K0pFLGl0KG5ldyB1ZChLdCkpO2lmKFFlPSghem4uYyYmKHpuLmM9bmV3IENuKGJyLHpuLDUsOCkpLHpuLmMpLGg9bnVsbCxYaD9oPVhoOmg9WmwsRHIoUWUsaCksKCF6bi5iJiYoem4uYj1uZXcgQ24oYnIsem4sNCw3KSksem4uYikuaT09MHx8KCF6bi5jJiYoem4uYz1uZXcgQ24oYnIsem4sNSw4KSksem4uYykuaT09MCl0aHJvdyBDPVIwKGhyLEFkKSx1ZT1WZGUrQyxfZT11ZStKRSxpdChuZXcgdWQoX2UpKTtyZXR1cm4gbHEoaHIsem4pLGwybihocix6biksUm49TGl0KHQsaHIsem4pLFJufWZ1bmN0aW9uIEtoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWUsUm47cmV0dXJuIE09RXluKGJ1KHQsKHZlKCksVTEpKSxlKSxHPWQ0KGJ1KHQsTWYpLGUpLFJ0PWQ0KGJ1KHQsS2wpLGUpLFdlPXJxKGJ1KHQsVmgpLGUpLGo9cnEoYnUodCxtaCksZSksTXQ9ZDQoYnUodCxEZiksZSksSz1kNChidSh0LGVsKSxlKSx1ZT1kNChidSh0LFhsKSxlKSxLdD1kNChidSh0LHloKSxlKSxRZT1ycShidSh0LGx1KSxlKSxndD1kNChidSh0LEF1KSxlKSxTdD1kNChidSh0LG5sKSxlKSxfZT1kNChidSh0LFN1KSxlKSxSbj1ycShidSh0LEx1KSxlKSxIPXJxKGJ1KHQsVnUpLGUpLHR0PWQ0KGJ1KHQsVWMpLGUpLG49czQobHQoY3QoYWEsMSksdm8sMjUsMTUsW010LmEsV2UuYSx1ZS5hLFJuLmFdKSkscj1zNChsdChjdChhYSwxKSx2bywyNSwxNSxbRy5hLE0uYSxSdC5hLHR0LmFdKSkscz1ndC5hLG89czQobHQoY3QoYWEsMSksdm8sMjUsMTUsW0suYSxqLmEsS3QuYSxILmFdKSksaz1zNChsdChjdChhYSwxKSx2bywyNSwxNSxbTXQuYixHLmIsSy5iLFN0LmJdKSksdj1zNChsdChjdChhYSwxKSx2bywyNSwxNSxbV2UuYixNLmIsai5iLHR0LmJdKSksQz1RZS5iLGQ9czQobHQoY3QoYWEsMSksdm8sMjUsMTUsW3VlLmIsUnQuYixLdC5iLF9lLmJdKSksQmcoYnUodCxVMSksbitzLGsrQyksQmcoYnUodCxVYyksbitzLGsrQyksQmcoYnUodCxNZiksbitzLDApLEJnKGJ1KHQsS2wpLG4rcyxrK0MrdiksQmcoYnUodCxWaCksMCxrK0MpLEJnKGJ1KHQsbWgpLG4rcytyLGsrQyksQmcoYnUodCxlbCksbitzK3IsMCksQmcoYnUodCxYbCksMCxrK0MrdiksQmcoYnUodCx5aCksbitzK3IsaytDK3YpLEJnKGJ1KHQsbHUpLDAsayksQmcoYnUodCxBdSksbiwwKSxCZyhidSh0LFN1KSwwLGsrQyt2KSxCZyhidSh0LFZ1KSxuK3MrciwwKSxoPW5ldyBDYSxoLmE9czQobHQoY3QoYWEsMSksdm8sMjUsMTUsW24rcitzK28sUWUuYSxTdC5hLF9lLmFdKSksaC5iPXM0KGx0KGN0KGFhLDEpLHZvLDI1LDE1LFtrK3YrQytkLGd0LmIsUm4uYixILmJdKSksaH1mdW5jdGlvbiB4eG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0O2ZvcihLPW5ldyBoZSxqPW5ldyBTKHQuZC5iKTtqLmE8ai5jLmMubGVuZ3RoOylmb3IoTT11KEooaiksMjkpLEc9bmV3IFMoTS5hKTtHLmE8Ry5jLmMubGVuZ3RoOyl7Zm9yKEg9dShKKEcpLDEwKSxzPXUodHIodC5mLEgpLDU3KSx2PW5ldyBhcihscihEcyhIKS5hLktjKCksbmV3IHopKTt6cih2KTspaWYoaD11KE1yKHYpLDE3KSxyPWVpKGguYSwwKSxrPSEwLEM9bnVsbCxyLmIhPXIuZC5jKXtmb3IoZT11KHRpKHIpLDgpLG49bnVsbCxoLmMuaj09KHZlKCksUG4pJiYodHQ9bmV3IFRfKGUsbmV3ICRlKGUuYSxzLmQuZCkscyxoKSx0dC5mLmE9ITAsdHQuYT1oLmMsSy5jW0suYy5sZW5ndGhdPXR0KSxoLmMuaj09bXImJih0dD1uZXcgVF8oZSxuZXcgJGUoZS5hLHMuZC5kK3MuZC5hKSxzLGgpLHR0LmYuZD0hMCx0dC5hPWguYyxLLmNbSy5jLmxlbmd0aF09dHQpO3IuYiE9ci5kLmM7KW49dSh0aShyKSw4KSxVbXQoZS5iLG4uYil8fChDPW5ldyBUXyhlLG4sbnVsbCxoKSxLLmNbSy5jLmxlbmd0aF09QyxrJiYoaz0hMSxuLmI8cy5kLmQ/Qy5mLmE9ITA6bi5iPnMuZC5kK3MuZC5hP0MuZi5kPSEwOihDLmYuZD0hMCxDLmYuYT0hMCkpKSxyLmIhPXIuZC5jJiYoZT1uKTtDJiYobz11KHRyKHQuZixoLmQuaSksNTcpLGUuYjxvLmQuZD9DLmYuYT0hMDplLmI+by5kLmQrby5kLmE/Qy5mLmQ9ITA6KEMuZi5kPSEwLEMuZi5hPSEwKSl9Zm9yKGQ9bmV3IGFyKGxyKGpvKEgpLmEuS2MoKSxuZXcgeikpO3pyKGQpOyloPXUoTXIoZCksMTcpLGguYS5iIT0wJiYoZT11KEFqKGguYSksOCksaC5kLmo9PSh2ZSgpLFBuKSYmKHR0PW5ldyBUXyhlLG5ldyAkZShlLmEscy5kLmQpLHMsaCksdHQuZi5hPSEwLHR0LmE9aC5kLEsuY1tLLmMubGVuZ3RoXT10dCksaC5kLmo9PW1yJiYodHQ9bmV3IFRfKGUsbmV3ICRlKGUuYSxzLmQuZCtzLmQuYSkscyxoKSx0dC5mLmQ9ITAsdHQuYT1oLmQsSy5jW0suYy5sZW5ndGhdPXR0KSl9cmV0dXJuIEt9ZnVuY3Rpb24ga3huKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE07aWYodnIobiwiTmV0d29yayBzaW1wbGV4IG5vZGUgcGxhY2VtZW50IiwxKSx0LmU9ZSx0Lm49dShRKGUsKGFlKCksUTQpKSwzMDQpLGozbih0KSxtMG4odCksbHMoV28obmV3IFRuKG51bGwsbmV3IF9uKHQuZS5iLDE2KSksbmV3IEVRKSxuZXcgcSR0KHQpKSxscyhSaShXbyhSaShXbyhuZXcgVG4obnVsbCxuZXcgX24odC5lLmIsMTYpKSxuZXcgV1QpLG5ldyBPUSksbmV3IFBRKSxuZXcgRlEpLG5ldyB6JHQodCkpLGplKFJlKFEodC5lLChUZSgpLFNTKSkpKSYmKGg9UmMobiwxKSx2cihoLCJTdHJhaWdodCBFZGdlcyBQcmUtUHJvY2Vzc2luZyIsMSksaTVuKHQpLG9yKGgpKSx0MW4odC5mKSxvPXUoUShlLE1TKSwxOSkuYSp0LmYuYS5jLmxlbmd0aCxtYXQoYWJ0KG9idChNbnQodC5mKSxvKSwhMSksUmMobiwxKSksdC5kLmEuZ2MoKSE9MCl7Zm9yKGg9UmMobiwxKSx2cihoLCJGbGV4aWJsZSBXaGVyZSBTcGFjZSBQcm9jZXNzaW5nIiwxKSxkPXUoTncodCQod3UobmV3IFRuKG51bGwsbmV3IF9uKHQuZi5hLDE2KSksbmV3IFRRKSxuZXcgd1EpKSwxOSkuYSx2PXUoTncoSmood3UobmV3IFRuKG51bGwsbmV3IF9uKHQuZi5hLDE2KSksbmV3IENRKSxuZXcgdlEpKSwxOSkuYSxrPXYtZCxDPUZ3KG5ldyBYYix0LmYpLE09RncobmV3IFhiLHQuZikseWYobGYodWYoY2YoaGYobmV3IENoLDJlNCksayksQyksTSkpLGxzKFJpKFJpKFFudCh0LmkpLG5ldyBfUSksbmV3IFNRKSxuZXcgalh0KGQsQyxrLE0pKSxzPXQuZC5hLmVjKCkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMjEzKSxyLmc9MTttYXQoYWJ0KG9idChNbnQodC5mKSxvKSwhMSksUmMoaCwxKSksb3IoaCl9amUoUmUoUShlLFNTKSkpJiYoaD1SYyhuLDEpLHZyKGgsIlN0cmFpZ2h0IEVkZ2VzIFBvc3QtUHJvY2Vzc2luZyIsMSksdXBuKHQpLG9yKGgpKSxxNG4odCksdC5lPW51bGwsdC5mPW51bGwsdC5pPW51bGwsdC5jPW51bGwsWHUodC5rKSx0Lmo9bnVsbCx0LmE9bnVsbCx0Lm89bnVsbCx0LmQuYS4kYigpLG9yKG4pfWZ1bmN0aW9uIEV4bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3Q7Zm9yKGQ9bmV3IFModC5hLmIpO2QuYTxkLmMuYy5sZW5ndGg7KWZvcihvPXUoSihkKSwyOSksU3Q9bmV3IFMoby5hKTtTdC5hPFN0LmMuYy5sZW5ndGg7KU10PXUoSihTdCksMTApLGUuZ1tNdC5wXT1NdCxlLmFbTXQucF09TXQsZS5kW010LnBdPTA7Zm9yKHY9dC5hLmIsZS5jPT0oYmQoKSxlcCkmJih2PV90KHYsMTUyKT9aeCh1KHYsMTUyKSk6X3QodiwxMzEpP3UodiwxMzEpLmE6X3Qodiw1NCk/bmV3IGt3KHYpOm5ldyBPbSh2KSksaD12LktjKCk7aC5PYigpOylmb3Iobz11KGguUGIoKSwyOSksSD0tMSxqPW8uYSxlLm89PShDMSgpLEgxKSYmKEg9d2ksaj1fdChqLDE1Mik/WngodShqLDE1MikpOl90KGosMTMxKT91KGosMTMxKS5hOl90KGosNTQpP25ldyBrdyhqKTpuZXcgT20oaikpLEt0PWouS2MoKTtLdC5PYigpOylpZihSdD11KEt0LlBiKCksMTApLE09bnVsbCxlLmM9PWVwP009dShOZSh0LmIuZixSdC5wKSwxNSk6TT11KE5lKHQuYi5iLFJ0LnApLDE1KSxNLmdjKCk+MClpZihyPU0uZ2MoKSxrPXBzKGIuTWF0aC5mbG9vcigocisxKS8yKSktMSxzPXBzKGIuTWF0aC5jZWlsKChyKzEpLzIpKS0xLGUubz09SDEpZm9yKEM9cztDPj1rO0MtLSllLmFbUnQucF09PVJ0JiYoSz11KE0uWGIoQyksNDYpLEc9dShLLmEsMTApLCFJMChuLEsuYikmJkg+dC5iLmVbRy5wXSYmKGUuYVtHLnBdPVJ0LGUuZ1tSdC5wXT1lLmdbRy5wXSxlLmFbUnQucF09ZS5nW1J0LnBdLGUuZltlLmdbUnQucF0ucF09KE5uKCksISEoamUoZS5mW2UuZ1tSdC5wXS5wXSkmUnQuaz09KFZuKCksdGEpKSksSD10LmIuZVtHLnBdKSk7ZWxzZSBmb3IoQz1rO0M8PXM7QysrKWUuYVtSdC5wXT09UnQmJihndD11KE0uWGIoQyksNDYpLHR0PXUoZ3QuYSwxMCksIUkwKG4sZ3QuYikmJkg8dC5iLmVbdHQucF0mJihlLmFbdHQucF09UnQsZS5nW1J0LnBdPWUuZ1t0dC5wXSxlLmFbUnQucF09ZS5nW1J0LnBdLGUuZltlLmdbUnQucF0ucF09KE5uKCksISEoamUoZS5mW2UuZ1tSdC5wXS5wXSkmUnQuaz09KFZuKCksdGEpKSksSD10LmIuZVt0dC5wXSkpfWZ1bmN0aW9uIEpjKCl7SmM9WixNSHQoKSxYNGU9bmEuYSx1KEF0KFd0KG5hLmEpLDApLDE4KSxZNGU9bmEuZix1KEF0KFd0KG5hLmYpLDApLDE4KSx1KEF0KFd0KG5hLmYpLDEpLDM0KSxLNGU9bmEubix1KEF0KFd0KG5hLm4pLDApLDM0KSx1KEF0KFd0KG5hLm4pLDEpLDM0KSx1KEF0KFd0KG5hLm4pLDIpLDM0KSx1KEF0KFd0KG5hLm4pLDMpLDM0KSxHQXQ9bmEuZyx1KEF0KFd0KG5hLmcpLDApLDE4KSx1KEF0KFd0KG5hLmcpLDEpLDM0KSxXNGU9bmEuYyx1KEF0KFd0KG5hLmMpLDApLDE4KSx1KEF0KFd0KG5hLmMpLDEpLDE4KSxVQXQ9bmEuaSx1KEF0KFd0KG5hLmkpLDApLDE4KSx1KEF0KFd0KG5hLmkpLDEpLDE4KSx1KEF0KFd0KG5hLmkpLDIpLDE4KSx1KEF0KFd0KG5hLmkpLDMpLDE4KSx1KEF0KFd0KG5hLmkpLDQpLDM0KSxXQXQ9bmEuaix1KEF0KFd0KG5hLmopLDApLDE4KSxWQXQ9bmEuZCx1KEF0KFd0KG5hLmQpLDApLDE4KSx1KEF0KFd0KG5hLmQpLDEpLDE4KSx1KEF0KFd0KG5hLmQpLDIpLDE4KSx1KEF0KFd0KG5hLmQpLDMpLDE4KSx1KEF0KFd0KG5hLmQpLDQpLDM0KSx1KEF0KFd0KG5hLmQpLDUpLDM0KSx1KEF0KFd0KG5hLmQpLDYpLDM0KSx1KEF0KFd0KG5hLmQpLDcpLDM0KSxVNGU9bmEuYix1KEF0KFd0KG5hLmIpLDApLDM0KSx1KEF0KFd0KG5hLmIpLDEpLDM0KSxhVT1uYS5lLHUoQXQoV3QobmEuZSksMCksMzQpLHUoQXQoV3QobmEuZSksMSksMzQpLHUoQXQoV3QobmEuZSksMiksMzQpLHUoQXQoV3QobmEuZSksMyksMzQpLHUoQXQoV3QobmEuZSksNCksMTgpLHUoQXQoV3QobmEuZSksNSksMTgpLHUoQXQoV3QobmEuZSksNiksMTgpLHUoQXQoV3QobmEuZSksNyksMTgpLHUoQXQoV3QobmEuZSksOCksMTgpLHUoQXQoV3QobmEuZSksOSksMTgpLHUoQXQoV3QobmEuZSksMTApLDM0KSxTYj1uYS5rLHUoQXQoV3QobmEuayksMCksMzQpLHUoQXQoV3QobmEuayksMSksMzQpfWZ1bmN0aW9uIFR4bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWUsUm4sem47Zm9yKFFlPW5ldyBaaSx1ZT1uZXcgWmksdHQ9LTEsdj1uZXcgUyh0KTt2LmE8di5jLmMubGVuZ3RoOyl7Zm9yKGg9dShKKHYpLDEyOCksaC5zPXR0LS0sQz0wLFN0PTAsbz1uZXcgUyhoLnQpO28uYTxvLmMuYy5sZW5ndGg7KXI9dShKKG8pLDI2OCksU3QrPXIuYztmb3Iocz1uZXcgUyhoLmkpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDI2OCksQys9ci5jO2gubj1DLGgudT1TdCxTdD09MD9mcyh1ZSxoLHVlLmMuYix1ZS5jKTpDPT0wJiZmcyhRZSxoLFFlLmMuYixRZS5jKX1mb3Ioem49UCQodCksTT10LmMubGVuZ3RoLEs9TSsxLGd0PU0tMSxIPW5ldyBoZTt6bi5hLmdjKCkhPTA7KXtmb3IoO3VlLmIhPTA7KUt0PShabih1ZS5iIT0wKSx1KGxoKHVlLHVlLmEuYSksMTI4KSksem4uYS5CYyhLdCkhPW51bGwsS3Qucz1ndC0tLEE1dChLdCxRZSx1ZSk7Zm9yKDtRZS5iIT0wOylfZT0oWm4oUWUuYiE9MCksdShsaChRZSxRZS5hLmEpLDEyOCkpLHpuLmEuQmMoX2UpIT1udWxsLF9lLnM9SysrLEE1dChfZSxRZSx1ZSk7Zm9yKEc9U2Esaz16bi5hLmVjKCkuS2MoKTtrLk9iKCk7KWg9dShrLlBiKCksMTI4KSxNdD1oLnUtaC5uLE10Pj1HJiYoTXQ+RyYmKEguYz1OdChRbixEZSwxLDAsNSwxKSxHPU10KSxILmNbSC5jLmxlbmd0aF09aCk7SC5jLmxlbmd0aCE9MCYmKGo9dShOZShILFp6KGUsSC5jLmxlbmd0aCkpLDEyOCksem4uYS5CYyhqKSE9bnVsbCxqLnM9SysrLEE1dChqLFFlLHVlKSxILmM9TnQoUW4sRGUsMSwwLDUsMSkpfWZvcihSdD10LmMubGVuZ3RoKzEsZD1uZXcgUyh0KTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxMjgpLGguczxNJiYoaC5zKz1SdCk7Zm9yKFdlPW5ldyBTKHQpO1dlLmE8V2UuYy5jLmxlbmd0aDspZm9yKF9lPXUoSihXZSksMTI4KSxuPW5ldyBkYShfZS50LDApO24uYjxuLmQuZ2MoKTspcj0oWm4obi5iPG4uZC5nYygpKSx1KG4uZC5YYihuLmM9bi5iKyspLDI2OCkpLFJuPXIuYixfZS5zPlJuLnMmJihDbChuKSxtdShSbi5pLHIpLHIuYz4wJiYoci5hPVJuLGxlKFJuLnQsciksci5iPV9lLGxlKF9lLmkscikpKX1mdW5jdGlvbiBJeHQodCl7dmFyIGUsbixyLHMsbztzd2l0Y2goZT10LmMsZSl7Y2FzZSAxMTpyZXR1cm4gdC5NbCgpO2Nhc2UgMTI6cmV0dXJuIHQuT2woKTtjYXNlIDE0OnJldHVybiB0LlFsKCk7Y2FzZSAxNTpyZXR1cm4gdC5UbCgpO2Nhc2UgMTY6cmV0dXJuIHQuUmwoKTtjYXNlIDE3OnJldHVybiB0LlVsKCk7Y2FzZSAyMTpyZXR1cm4gZmkodCksZ2koKSxnaSgpLHBBO2Nhc2UgMTA6c3dpdGNoKHQuYSl7Y2FzZSA2NTpyZXR1cm4gdC55bCgpO2Nhc2UgOTA6cmV0dXJuIHQuRGwoKTtjYXNlIDEyMjpyZXR1cm4gdC5LbCgpO2Nhc2UgOTg6cmV0dXJuIHQuRWwoKTtjYXNlIDY2OnJldHVybiB0LnpsKCk7Y2FzZSA2MDpyZXR1cm4gdC5KbCgpO2Nhc2UgNjI6cmV0dXJuIHQuSGwoKX19c3dpdGNoKG89dnhuKHQpLGU9dC5jLGUpe2Nhc2UgMzpyZXR1cm4gdC5abChvKTtjYXNlIDQ6cmV0dXJuIHQuWGwobyk7Y2FzZSA1OnJldHVybiB0LllsKG8pO2Nhc2UgMDppZih0LmE9PTEyMyYmdC5kPHQuail7aWYocz10LmQscj0wLG49LTEsKGU9d2EodC5pLHMrKykpPj00OCYmZTw9NTcpe2ZvcihyPWUtNDg7czx0LmomJihlPXdhKHQuaSxzKyspKT49NDgmJmU8PTU3OylpZihyPXIqMTArZS00OCxyPDApdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLE44dCkpKSl9ZWxzZSB0aHJvdyBpdChuZXcgTnIocXIoKFByKCksdjBlKSkpKTtpZihuPXIsZT09NDQpe2lmKHM+PXQuail0aHJvdyBpdChuZXcgTnIocXIoKFByKCkseTBlKSkpKTtpZigoZT13YSh0LmkscysrKSk+PTQ4JiZlPD01Nyl7Zm9yKG49ZS00ODtzPHQuaiYmKGU9d2EodC5pLHMrKykpPj00OCYmZTw9NTc7KWlmKG49bioxMCtlLTQ4LG48MCl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksTjh0KSkpKTtpZihyPm4pdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLHgwZSkpKSl9ZWxzZSBuPS0xfWlmKGUhPTEyNSl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksbTBlKSkpKTt0LnNsKHMpPyhvPShnaSgpLGdpKCksbmV3IFhtKDksbykpLHQuZD1zKzEpOihvPShnaSgpLGdpKCksbmV3IFhtKDMsbykpLHQuZD1zKSxvLmRtKHIpLG8uY20obiksZmkodCl9fXJldHVybiBvfWZ1bmN0aW9uIFhoZSh0LGUsbixyLHMpe3ZhciBvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWUsUm4sem47Zm9yKEs9bmV3IFhjKGUuYiksUnQ9bmV3IFhjKGUuYiksaj1uZXcgWGMoZS5iKSxXZT1uZXcgWGMoZS5iKSx0dD1uZXcgWGMoZS5iKSxfZT1laShlLDApO19lLmIhPV9lLmQuYzspZm9yKEt0PXUodGkoX2UpLDExKSxkPW5ldyBTKEt0LmcpO2QuYTxkLmMuYy5sZW5ndGg7KWlmKG89dShKKGQpLDE3KSxvLmMuaT09by5kLmkpe2lmKEt0Lmo9PW8uZC5qKXtXZS5jW1dlLmMubGVuZ3RoXT1vO2NvbnRpbnVlfWVsc2UgaWYoS3Quaj09KHZlKCksUG4pJiZvLmQuaj09bXIpe3R0LmNbdHQuYy5sZW5ndGhdPW87Y29udGludWV9fWZvcih2PW5ldyBTKHR0KTt2LmE8di5jLmMubGVuZ3RoOylvPXUoSih2KSwxNyksc3luKHQsbyxuLHIsKHZlKCksSG4pKTtmb3IoaD1uZXcgUyhXZSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTcpLFFlPW5ldyBZMCh0KSxEMChRZSwoVm4oKSxIYykpLEp0KFFlLChUZSgpLGNzKSwodWEoKSxHYykpLEp0KFFlLChhZSgpLF9pKSxvKSxSbj1uZXcgTWMsSnQoUm4sX2ksby5kKSxCcyhSbiwodmUoKSxCbikpLFVvKFJuLFFlKSx6bj1uZXcgTWMsSnQoem4sX2ksby5jKSxCcyh6bixIbiksVW8oem4sUWUpLEp0KG8uYyxKdSxRZSksSnQoby5kLEp1LFFlKSxPYShvLG51bGwpLG9hKG8sbnVsbCksbi5jW24uYy5sZW5ndGhdPVFlLEp0KFFlLEpWLHBlKDIpKTtmb3IodWU9ZWkoZSwwKTt1ZS5iIT11ZS5kLmM7KUt0PXUodGkodWUpLDExKSxrPUt0LmUuYy5sZW5ndGg+MCxndD1LdC5nLmMubGVuZ3RoPjAsayYmZ3Q/ai5jW2ouYy5sZW5ndGhdPUt0Oms/Sy5jW0suYy5sZW5ndGhdPUt0Omd0JiYoUnQuY1tSdC5jLmxlbmd0aF09S3QpO2ZvcihHPW5ldyBTKEspO0cuYTxHLmMuYy5sZW5ndGg7KUg9dShKKEcpLDExKSxsZShzLGd4dCh0LEgsbnVsbCxuKSk7Zm9yKFN0PW5ldyBTKFJ0KTtTdC5hPFN0LmMuYy5sZW5ndGg7KU10PXUoSihTdCksMTEpLGxlKHMsZ3h0KHQsbnVsbCxNdCxuKSk7Zm9yKE09bmV3IFMoaik7TS5hPE0uYy5jLmxlbmd0aDspQz11KEooTSksMTEpLGxlKHMsZ3h0KHQsQyxDLG4pKX1mdW5jdGlvbiBRaGUodCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuO2ZvcihNdD1uZXcgJGUoYXMsYXMpLGU9bmV3ICRlKENzLENzKSxXZT1uZXcgUyh0KTtXZS5hPFdlLmMuYy5sZW5ndGg7KV9lPXUoSihXZSksOCksTXQuYT1iLk1hdGgubWluKE10LmEsX2UuYSksTXQuYj1iLk1hdGgubWluKE10LmIsX2UuYiksZS5hPWIuTWF0aC5tYXgoZS5hLF9lLmEpLGUuYj1iLk1hdGgubWF4KGUuYixfZS5iKTtmb3Ioaj1uZXcgJGUoZS5hLU10LmEsZS5iLU10LmIpLGs9bmV3ICRlKE10LmEtNTAsTXQuYi1qLmEtNTApLEM9bmV3ICRlKE10LmEtNTAsZS5iK2ouYSs1MCksTT1uZXcgJGUoZS5hK2ouYi8yKzUwLE10LmIrai5iLzIpLEg9bmV3IGh4dChrLEMsTSksdWU9bmV3IEhzLG89bmV3IGhlLG49bmV3IGhlLHVlLmEuemMoSCx1ZSksUm49bmV3IFModCk7Um4uYTxSbi5jLmMubGVuZ3RoOyl7Zm9yKFFlPXUoSihSbiksOCksby5jPU50KFFuLERlLDEsMCw1LDEpLEt0PXVlLmEuZWMoKS5LYygpO0t0Lk9iKCk7KVN0PXUoS3QuUGIoKSwzMDgpLHI9U3QuZCxXcChyLFN0LmEpLGF2KFdwKFN0LmQsUWUpLFdwKFN0LmQsU3QuYSkpPDAmJihvLmNbby5jLmxlbmd0aF09U3QpO2ZvcihuLmM9TnQoUW4sRGUsMSwwLDUsMSksUnQ9bmV3IFMobyk7UnQuYTxSdC5jLmMubGVuZ3RoOylmb3IoU3Q9dShKKFJ0KSwzMDgpLHR0PW5ldyBTKFN0LmUpO3R0LmE8dHQuYy5jLmxlbmd0aDspe2ZvcihHPXUoSih0dCksMTY4KSxoPSEwLHY9bmV3IFMobyk7di5hPHYuYy5jLmxlbmd0aDspZD11KEoodiksMzA4KSxkIT1TdCYmKEZjKEcsTmUoZC5lLDApKXx8RmMoRyxOZShkLmUsMSkpfHxGYyhHLE5lKGQuZSwyKSkpJiYoaD0hMSk7aCYmKG4uY1tuLmMubGVuZ3RoXT1HKX1mb3IoSWFlKHVlLG8pLHZhKHVlLG5ldyBNYSksSz1uZXcgUyhuKTtLLmE8Sy5jLmMubGVuZ3RoOylHPXUoSihLKSwxNjgpLEZzKHVlLG5ldyBoeHQoUWUsRy5hLEcuYikpfWZvcihndD1uZXcgSHMsdmEodWUsbmV3IFNuKGd0KSkscz1ndC5hLmVjKCkuS2MoKTtzLk9iKCk7KUc9dShzLlBiKCksMTY4KSwoWSQoSCxHLmEpfHxZJChILEcuYikpJiZzLlFiKCk7cmV0dXJuIHZhKGd0LG5ldyBHcyksZ3R9ZnVuY3Rpb24gQ3huKHQpe3ZhciBlLG4scixzLG87c3dpdGNoKG49dShRKHQsKGFlKCksVmMpKSwyMSksZT1waihQYmUpLHM9dShRKHQsKFRlKCkscXkpKSwzMzQpLHM9PShHMCgpLHNwKSYmJGwoZSxGYmUpLGplKFJlKFEodCxhaHQpKSk/YmkoZSwoV2EoKSxEZCksKHJvKCkscGx0KSk6YmkoZSwoV2EoKSxjdSksKHJvKCkscGx0KSksUSh0LCgkJCgpLFdTKSkhPW51bGwmJiRsKGUsTmJlKSwoamUoUmUoUSh0LG45dCkpKXx8amUoUmUoUSh0LFpDdCkpKSkmJkt1KGUsKFdhKCksSW8pLChybygpLFE3dCkpLHUoUSh0LFdsKSwxMDMpLmcpe2Nhc2UgMjpjYXNlIDM6Y2FzZSA0Okt1KGJpKGUsKFdhKCksRGQpLChybygpLEo3dCkpLElvLFo3dCl9c3dpdGNoKG4uSGMoKG9vKCksS1YpKSYmS3UoYmkoYmkoZSwoV2EoKSxEZCksKHJvKCksWDd0KSkscWMsWTd0KSxJbyxLN3QpLFZ0KFEodCxvaHQpKSE9PVZ0KCh5NCgpLGtHKSkmJmJpKGUsKFdhKCksY3UpLChybygpLGdUdCkpLG4uSGMoUVYpJiYoYmkoZSwoV2EoKSxEZCksKHJvKCksdlR0KSksYmkoZSxnYixiVHQpLGJpKGUsY3Usd1R0KSksVnQoUSh0LHNHKSkhPT1WdCgoa0UoKSxtUykpJiZWdChRKHQsZWcpKSE9PVZ0KChXMCgpLGVQKSkmJkt1KGUsKFdhKCksSW8pLChybygpLGNUdCkpLGplKFJlKFEodCx0OXQpKSkmJmJpKGUsKFdhKCksY3UpLChybygpLG9UdCkpLGplKFJlKFEodCxuaHQpKSkmJmJpKGUsKFdhKCksY3UpLChybygpLG1UdCkpLG53bih0KSYmKFZ0KFEodCxxeSkpPT09VnQoc3ApP3I9dShRKHQsRE8pLDI5Mik6cj11KFEodCxlaHQpLDI5Miksbz1yPT0oZUUoKSwkbHQpPyhybygpLHBUdCk6KHJvKCksa1R0KSxiaShlLChXYSgpLHFjKSxvKSksdShRKHQsQTl0KSwzNzcpLmcpe2Nhc2UgMTpiaShlLChXYSgpLHFjKSwocm8oKSx5VHQpKTticmVhaztjYXNlIDI6S3UoYmkoYmkoZSwoV2EoKSxjdSksKHJvKCksVjd0KSkscWMsRzd0KSxJbyxVN3QpfXJldHVybiBWdChRKHQsd2IpKSE9PVZ0KChWMCgpLHZiKSkmJmJpKGUsKFdhKCksY3UpLChybygpLHhUdCkpLGV9ZnVuY3Rpb24gWmhlKHQpe013KHQsbmV3IGsyKF93KEV3KEN3KFR3KG5ldyBrZyxQaCksIkVMSyBSZWN0YW5nbGUgUGFja2luZyIpLCJBbGdvcml0aG0gZm9yIHBhY2tpbmcgb2YgdW5jb25uZWN0ZWQgYm94ZXMsIGkuZS4gZ3JhcGhzIHdpdGhvdXQgZWRnZXMuIFRoZSBnaXZlbiBvcmRlciBvZiB0aGUgYm94ZXMgaXMgYWx3YXlzIHByZXNlcnZlZCBhbmQgdGhlIG1haW4gcmVhZGluZyBkaXJlY3Rpb24gb2YgdGhlIGJveGVzIGlzIGxlZnQgdG8gcmlnaHQuIFRoZSBhbGdvcml0aG0gaXMgZGl2aWRlZCBpbnRvIHR3byBwaGFzZXMuIE9uZSBwaGFzZSBhcHByb3hpbWF0ZXMgdGhlIHdpZHRoIGluIHdoaWNoIHRoZSByZWN0YW5nbGVzIGNhbiBiZSBwbGFjZWQuIFRoZSBuZXh0IHBoYXNlIHBsYWNlcyB0aGUgcmVjdGFuZ2xlcyBpbiByb3dzIHVzaW5nIHRoZSBwcmV2aW91c2x5IGNhbGN1bGF0ZWQgd2lkdGggYXMgYm91bmRpbmcgd2lkdGggYW5kIGJ1bmRsZXMgcmVjdGFuZ2xlcyB3aXRoIGEgc2ltaWxhciBoZWlnaHQgaW4gYmxvY2tzLiBBIGNvbXBhY3Rpb24gc3RlcCByZWR1Y2VzIHRoZSBzaXplIG9mIHRoZSBkcmF3aW5nLiBGaW5hbGx5LCB0aGUgcmVjdGFuZ2xlcyBhcmUgZXhwYW5kZWQgdG8gZmlsbCB0aGVpciBib3VuZGluZyBib3ggYW5kIGVsaW1pbmF0ZSBlbXB0eSB1bnVzZWQgc3BhY2VzLiIpLG5ldyB3WikpKSx4ZSh0LFBoLEU2LDEuMykseGUodCxQaCxDSCxJZShHX3QpKSx4ZSh0LFBoLHh2LFpfdCkseGUodCxQaCxDeSwxNSkseGUodCxQaCxtSCxJZShoM2UpKSx4ZSh0LFBoLEQ0LEllKGczZSkpLHhlKHQsUGgsQzYsSWUocDNlKSkseGUodCxQaCxUNixJZShiM2UpKSx4ZSh0LFBoLFVFLEllKGQzZSkpLHhlKHQsUGgsal8sSWUoS190KSkseGUodCxQaCxXRSxJZSh2M2UpKSx4ZSh0LFBoLHQ4dCxJZShRX3QpKSx4ZSh0LFBoLGU4dCxJZShZX3QpKSx4ZSh0LFBoLGk4dCxJZShYX3QpKSx4ZSh0LFBoLHM4dCxJZShKX3QpKSx4ZSh0LFBoLE5jdCxJZShVX3QpKSx4ZSh0LFBoLEdJLEllKFdfdCkpLHhlKHQsUGgsX2N0LEllKGYzZSkpLHhlKHQsUGgscjh0LEllKEhPKSkseGUodCxQaCxuOHQsSWUoVl90KSkseGUodCxQaCxhOHQsSWUodFN0KSl9ZnVuY3Rpb24gdnYodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0O2lmKG49PW51bGwpcmV0dXJuIG51bGw7aWYodC5hIT1lLkFqKCkpdGhyb3cgaXQobmV3IEZuKFFFK2UubmUoKStDdikpO2lmKF90KGUsNDU3KSl7aWYodHQ9SXZuKHUoZSw2NzEpLG4pLCF0dCl0aHJvdyBpdChuZXcgRm4oWWN0K24rIicgaXMgbm90IGEgdmFsaWQgZW51bWVyYXRvciBvZiAnIitlLm5lKCkrIiciKSk7cmV0dXJuIHR0fXN3aXRjaCgkZygoJHUoKSx5YSksZSkuY2woKSl7Y2FzZSAyOntuPSRjKG4sITEpO2JyZWFrfWNhc2UgMzp7bj0kYyhuLCEwKTticmVha319aWYocj0kZyh5YSxlKS4kaygpLHIpcmV0dXJuIHIuQWooKS5OaCgpLktoKHIsbik7aWYoaj0kZyh5YSxlKS5hbCgpLGope2Zvcih0dD1uZXcgaGUsaz1PaXQobiksQz0wLE09ay5sZW5ndGg7QzxNOysrQyl2PWtbQ10sbGUodHQsai5BaigpLk5oKCkuS2goaix2KSk7cmV0dXJuIHR0fWlmKEs9JGcoeWEsZSkuYmwoKSwhSy5kYygpKXtmb3IoRz1LLktjKCk7Ry5PYigpOyl7SD11KEcuUGIoKSwxNDgpO3RyeXtpZih0dD1ILkFqKCkuTmgoKS5LaChILG4pLHR0IT1udWxsKXJldHVybiB0dH1jYXRjaChndCl7aWYoZ3Q9V2koZ3QpLCFfdChndCw2MCkpdGhyb3cgaXQoZ3QpfX10aHJvdyBpdChuZXcgRm4oWWN0K24rIicgZG9lcyBub3QgbWF0Y2ggYW55IG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gZGF0YXR5cGUgJyIrZS5uZSgpKyInIikpfWlmKHUoZSw4MzQpLkZqKCkscz1EbG4oZS5CaigpKSwhcylyZXR1cm4gbnVsbDtpZihzPT11Uyl7aD0wO3RyeXtoPXFsKG4sU2Esd2kpJnlzfWNhdGNoKGd0KXtpZihndD1XaShndCksX3QoZ3QsMTI3KSlvPUskKG4pLGg9b1swXTtlbHNlIHRocm93IGl0KGd0KX1yZXR1cm4gQkQoaCl9aWYocz09dFYpe2ZvcihkPTA7ZDxhQS5sZW5ndGg7KytkKXRyeXtyZXR1cm4gelZ0KGFBW2RdLG4pfWNhdGNoKGd0KXtpZihndD1XaShndCksIV90KGd0LDMyKSl0aHJvdyBpdChndCl9dGhyb3cgaXQobmV3IEZuKFljdCtuKyInIGlzIG5vdCBhIGRhdGUgZm9ybWF0dGVkIHN0cmluZyBvZiB0aGUgZm9ybSB5eXl5LU1NLWRkJ1QnSEg6bW06c3MnLidTU1NaIG9yIGEgdmFsaWQgc3Vic2V0IHRoZXJlb2YiKSl9dGhyb3cgaXQobmV3IEZuKFljdCtuKyInIGlzIGludmFsaWQuICIpKX1mdW5jdGlvbiBfeG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrO2lmKG49MCxoPTAsbz1lLmxlbmd0aCxkPW51bGwsaz1uZXcgSW0saDxvJiYoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpPT00MykmJigrK2gsKytuLGg8byYmKFJyKGgsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChoKT09NDN8fChScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCk9PTQ1KSkpKXRocm93IGl0KG5ldyBsZCh5ditlKyciJykpO2Zvcig7aDxvJiYoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpIT00NikmJihScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCkhPTEwMSkmJihScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCkhPTY5KTspKytoO2lmKGsuYSs9IiIrUGwoZT09bnVsbD9fdTooT24oZSksZSksbixoKSxoPG8mJihScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCk9PTQ2KSl7Zm9yKCsraCxuPWg7aDxvJiYoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpIT0xMDEpJiYoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpIT02OSk7KSsraDt0LmU9aC1uLGsuYSs9IiIrUGwoZT09bnVsbD9fdTooT24oZSksZSksbixoKX1lbHNlIHQuZT0wO2lmKGg8byYmKFJyKGgsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChoKT09MTAxfHwoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpPT02OSkpJiYoKytoLG49aCxoPG8mJihScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCk9PTQzKSYmKCsraCxoPG8mJihScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCkhPTQ1KSYmKytuKSxkPWUuc3Vic3RyKG4sby1uKSx0LmU9dC5lLXFsKGQsU2Esd2kpLHQuZSE9cHModC5lKSkpdGhyb3cgaXQobmV3IGxkKCJTY2FsZSBvdXQgb2YgcmFuZ2UuIikpO2lmKHY9ay5hLHYubGVuZ3RoPDE2KXtpZih0LmY9KFRFdD09bnVsbCYmKFRFdD1uZXcgUmVnRXhwKCJeWystXT9cXGQqJCIsImkiKSksVEV0LnRlc3Qodik/cGFyc2VJbnQodiwxMCk6TmFOKSxpc05hTih0LmYpKXRocm93IGl0KG5ldyBsZCh5ditlKyciJykpO3QuYT1zNXQodC5mKX1lbHNlIFdobih0LG5ldyBScCh2KSk7Zm9yKHQuZD1rLmEubGVuZ3RoLHM9MDtzPGsuYS5sZW5ndGgmJihyPXdhKGsuYSxzKSwhKHIhPTQ1JiZyIT00OCkpOysrcyktLXQuZDt0LmQ9PTAmJih0LmQ9MSl9ZnVuY3Rpb24gcWF0KCl7cWF0PVosUGk9bmV3IFV3LGxuKFBpLCh2ZSgpLFUxKSxVYyksbG4oUGksVmgsVWMpLGxuKFBpLFZoLEx1KSxsbihQaSxtaCxWdSksbG4oUGksbWgsVWMpLGxuKFBpLE1mLFVjKSxsbihQaSxNZixubCksbG4oUGksS2wsU3UpLGxuKFBpLEtsLFVjKSxsbihQaSxBdSxsdSksbG4oUGksQXUsVWMpLGxuKFBpLEF1LG5sKSxsbihQaSxBdSxTdSksbG4oUGksbHUsQXUpLGxuKFBpLGx1LEx1KSxsbihQaSxsdSxWdSksbG4oUGksbHUsVWMpLGxuKFBpLERmLERmKSxsbihQaSxEZixubCksbG4oUGksRGYsTHUpLGxuKFBpLGVsLGVsKSxsbihQaSxlbCxubCksbG4oUGksZWwsVnUpLGxuKFBpLFhsLFhsKSxsbihQaSxYbCxTdSksbG4oUGksWGwsTHUpLGxuKFBpLHloLHloKSxsbihQaSx5aCxTdSksbG4oUGkseWgsVnUpLGxuKFBpLG5sLE1mKSxsbihQaSxubCxBdSksbG4oUGksbmwsRGYpLGxuKFBpLG5sLGVsKSxsbihQaSxubCxVYyksbG4oUGksbmwsbmwpLGxuKFBpLG5sLEx1KSxsbihQaSxubCxWdSksbG4oUGksU3UsS2wpLGxuKFBpLFN1LEF1KSxsbihQaSxTdSxYbCksbG4oUGksU3UseWgpLGxuKFBpLFN1LFN1KSxsbihQaSxTdSxMdSksbG4oUGksU3UsVnUpLGxuKFBpLFN1LFVjKSxsbihQaSxMdSxWaCksbG4oUGksTHUsbHUpLGxuKFBpLEx1LERmKSxsbihQaSxMdSxYbCksbG4oUGksTHUsbmwpLGxuKFBpLEx1LFN1KSxsbihQaSxMdSxMdSksbG4oUGksTHUsVWMpLGxuKFBpLFZ1LG1oKSxsbihQaSxWdSxsdSksbG4oUGksVnUsZWwpLGxuKFBpLFZ1LHloKSxsbihQaSxWdSxubCksbG4oUGksVnUsU3UpLGxuKFBpLFZ1LFZ1KSxsbihQaSxWdSxVYyksbG4oUGksVWMsVTEpLGxuKFBpLFVjLFZoKSxsbihQaSxVYyxtaCksbG4oUGksVWMsTWYpLGxuKFBpLFVjLEtsKSxsbihQaSxVYyxBdSksbG4oUGksVWMsbHUpLGxuKFBpLFVjLG5sKSxsbihQaSxVYyxTdSksbG4oUGksVWMsTHUpLGxuKFBpLFVjLFZ1KSxsbihQaSxVYyxVYyl9ZnVuY3Rpb24gT3h0KHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZSxXZTtmb3IodC5kPW5ldyAkZShhcyxhcyksdC5jPW5ldyAkZShDcyxDcyksaj1lLktjKCk7ai5PYigpOylmb3IoQz11KGouUGIoKSwzNyksU3Q9bmV3IFMoQy5hKTtTdC5hPFN0LmMuYy5sZW5ndGg7KU10PXUoSihTdCksMTApLHQuZC5hPWIuTWF0aC5taW4odC5kLmEsTXQubi5hLU10LmQuYiksdC5kLmI9Yi5NYXRoLm1pbih0LmQuYixNdC5uLmItTXQuZC5kKSx0LmMuYT1iLk1hdGgubWF4KHQuYy5hLE10Lm4uYStNdC5vLmErTXQuZC5jKSx0LmMuYj1iLk1hdGgubWF4KHQuYy5iLE10Lm4uYitNdC5vLmIrTXQuZC5hKTtmb3IoZD1uZXcgYnF0LE09ZS5LYygpO00uT2IoKTspQz11KE0uUGIoKSwzNykscj11eG4odCxDKSxsZShkLmEsciksci5hPXIuYXwhdShRKHIuYywoYWUoKSxCeSkpLDIxKS5kYygpO2Zvcih0LmI9KHFpdCgpLFdlPW5ldyBVNSxXZS5mPW5ldyBubmUobiksV2UuYj13NG4oV2UuZixkKSxXZSksQzRuKChHPXQuYixuZXcgcjgsRykpLHQuZT1uZXcgQ2EsdC5hPXQuYi5mLmUsaD1uZXcgUyhkLmEpO2guYTxoLmMuYy5sZW5ndGg7KWZvcihzPXUoSihoKSw4NDEpLFJ0PXVpbih0LmIscyksaG1uKHMuYyxSdC5hLFJ0LmIpLHR0PW5ldyBTKHMuYy5hKTt0dC5hPHR0LmMuYy5sZW5ndGg7KUs9dShKKHR0KSwxMCksSy5rPT0oVm4oKSxrcykmJihndD1MNXQodCxLLm4sdShRKEssKGFlKCksb2MpKSw2MSkpLExpKEdmKEsubiksZ3QpKTtmb3Iobz1uZXcgUyhkLmEpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSw4NDEpLGs9bmV3IFMoemxuKHMpKTtrLmE8ay5jLmMubGVuZ3RoOylmb3Iodj11KEooayksMTcpLF9lPW5ldyBEUih2LmEpLG04KF9lLDAsXzEodi5jKSkscmkoX2UsXzEodi5kKSksSD1udWxsLHVlPWVpKF9lLDApO3VlLmIhPXVlLmQuYzspe2lmKEt0PXUodGkodWUpLDgpLCFIKXtIPUt0O2NvbnRpbnVlfVdtdChILmEsS3QuYSk/KHQuZS5hPWIuTWF0aC5taW4odC5lLmEsSC5hKSx0LmEuYT1iLk1hdGgubWF4KHQuYS5hLEguYSkpOldtdChILmIsS3QuYikmJih0LmUuYj1iLk1hdGgubWluKHQuZS5iLEguYiksdC5hLmI9Yi5NYXRoLm1heCh0LmEuYixILmIpKSxIPUt0fU1qKHQuZSksTGkodC5hLHQuZSl9ZnVuY3Rpb24gU3huKHQpe0lyKHQuYixCaCxsdChjdChBZSwxKSxlZSwyLDYsW192LCJDb25zaXN0ZW50VHJhbnNpZW50Il0pKSxJcih0LmEsQmgsbHQoY3QoQWUsMSksZWUsMiw2LFtfdiwiV2VsbEZvcm1lZFNvdXJjZVVSSSJdKSksSXIodC5vLEJoLGx0KGN0KEFlLDEpLGVlLDIsNixbX3YsIkludGVyZmFjZUlzQWJzdHJhY3QgQXRNb3N0T25lSUQgVW5pcXVlRmVhdHVyZU5hbWVzIFVuaXF1ZU9wZXJhdGlvblNpZ25hdHVyZXMgTm9DaXJjdWxhclN1cGVyVHlwZXMgV2VsbEZvcm1lZE1hcEVudHJ5Q2xhc3MgQ29uc2lzdGVudFN1cGVyVHlwZXMgRGlzam9pbnRGZWF0dXJlQW5kT3BlcmF0aW9uU2lnbmF0dXJlcyJdKSksSXIodC5wLEJoLGx0KGN0KEFlLDEpLGVlLDIsNixbX3YsIldlbGxGb3JtZWRJbnN0YW5jZVR5cGVOYW1lIFVuaXF1ZVR5cGVQYXJhbWV0ZXJOYW1lcyJdKSksSXIodC52LEJoLGx0KGN0KEFlLDEpLGVlLDIsNixbX3YsIlVuaXF1ZUVudW1lcmF0b3JOYW1lcyBVbmlxdWVFbnVtZXJhdG9yTGl0ZXJhbHMiXSkpLElyKHQuUixCaCxsdChjdChBZSwxKSxlZSwyLDYsW192LCJXZWxsRm9ybWVkTmFtZSJdKSksSXIodC5ULEJoLGx0KGN0KEFlLDEpLGVlLDIsNixbX3YsIlVuaXF1ZVBhcmFtZXRlck5hbWVzIFVuaXF1ZVR5cGVQYXJhbWV0ZXJOYW1lcyBOb1JlcGVhdGluZ1ZvaWQiXSkpLElyKHQuVSxCaCxsdChjdChBZSwxKSxlZSwyLDYsW192LCJXZWxsRm9ybWVkTnNVUkkgV2VsbEZvcm1lZE5zUHJlZml4IFVuaXF1ZVN1YnBhY2thZ2VOYW1lcyBVbmlxdWVDbGFzc2lmaWVyTmFtZXMgVW5pcXVlTnNVUklzIl0pKSxJcih0LlcsQmgsbHQoY3QoQWUsMSksZWUsMiw2LFtfdiwiQ29uc2lzdGVudE9wcG9zaXRlIFNpbmdsZUNvbnRhaW5lciBDb25zaXN0ZW50S2V5cyBDb25zaXN0ZW50VW5pcXVlIENvbnNpc3RlbnRDb250YWluZXIiXSkpLElyKHQuYmIsQmgsbHQoY3QoQWUsMSksZWUsMiw2LFtfdiwiVmFsaWREZWZhdWx0VmFsdWVMaXRlcmFsIl0pKSxJcih0LmViLEJoLGx0KGN0KEFlLDEpLGVlLDIsNixbX3YsIlZhbGlkTG93ZXJCb3VuZCBWYWxpZFVwcGVyQm91bmQgQ29uc2lzdGVudEJvdW5kcyBWYWxpZFR5cGUiXSkpLElyKHQuSCxCaCxsdChjdChBZSwxKSxlZSwyLDYsW192LCJDb25zaXN0ZW50VHlwZSBDb25zaXN0ZW50Qm91bmRzIENvbnNpc3RlbnRBcmd1bWVudHMiXSkpfWZ1bmN0aW9uIEF4bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWU7aWYoIWUuZGMoKSl7aWYocz1uZXcgUHUsZD1ufHx1KGUuWGIoMCksMTcpLEc9ZC5jLG1fKCksaj1HLmkuaywhKGo9PShWbigpLE9zKXx8aj09SGN8fGo9PWtzfHxqPT16MSkpdGhyb3cgaXQobmV3IEZuKCJUaGUgdGFyZ2V0IG5vZGUgb2YgdGhlIGVkZ2UgbXVzdCBiZSBhIG5vcm1hbCBub2RlIG9yIGEgbm9ydGhTb3V0aFBvcnQuIikpO2ZvcihaYihzLFlvKGx0KGN0KFdzLDEpLGVlLDgsMCxbRy5pLm4sRy5uLEcuYV0pKSksKHZlKCksQXUpLkhjKEcuaikmJih0dD1YdCh5ZShRKEcsKGFlKCksazcpKSkpLE09bmV3ICRlKFlvKGx0KGN0KFdzLDEpLGVlLDgsMCxbRy5pLm4sRy5uLEcuYV0pKS5hLHR0KSxmcyhzLE0scy5jLmIscy5jKSksQz1udWxsLHI9ITEsdj1lLktjKCk7di5PYigpOyloPXUodi5QYigpLDE3KSxvPWguYSxvLmIhPTAmJihyPyhrPWZkKExpKEMsKFpuKG8uYiE9MCksdShvLmEuYS5jLDgpKSksLjUpLGZzKHMsayxzLmMuYixzLmMpLHI9ITEpOnI9ITAsQz1uYygoWm4oby5iIT0wKSx1KG8uYy5iLmMsOCkpKSxVYShzLG8pLEFoKG8pKTtLPWQuZCxBdS5IYyhLLmopJiYodHQ9WHQoeWUoUShLLChhZSgpLGs3KSkpKSxNPW5ldyAkZShZbyhsdChjdChXcywxKSxlZSw4LDAsW0suaS5uLEsubixLLmFdKSkuYSx0dCksZnMocyxNLHMuYy5iLHMuYykpLFpiKHMsWW8obHQoY3QoV3MsMSksZWUsOCwwLFtLLmkubixLLm4sSy5hXSkpKSx0LmQ9PShjRSgpLEFodCkmJihndD0oWm4ocy5iIT0wKSx1KHMuYS5hLmMsOCkpLE10PXUoWmYocywxKSw4KSxTdD1uZXcgU3J0KFJ5dChHLmopKSxTdC5hKj01LFN0LmIqPTUsUnQ9aWEobmV3ICRlKE10LmEsTXQuYiksZ3QpLEt0PW5ldyAkZShUcnQoU3QuYSxSdC5hKSxUcnQoU3QuYixSdC5iKSksTGkoS3QsZ3QpLHVlPWVpKHMsMSksZUQodWUsS3QpLF9lPShabihzLmIhPTApLHUocy5jLmIuYyw4KSksV2U9dShaZihzLHMuYi0yKSw4KSxTdD1uZXcgU3J0KFJ5dChLLmopKSxTdC5hKj01LFN0LmIqPTUsUnQ9aWEobmV3ICRlKFdlLmEsV2UuYiksX2UpLFFlPW5ldyAkZShUcnQoU3QuYSxSdC5hKSxUcnQoU3QuYixSdC5iKSksTGkoUWUsX2UpLG04KHMscy5iLTEsUWUpKSxIPW5ldyBmeHQocyksVWEoZC5hLGtzZShIKSl9fWZ1bmN0aW9uIEx4bih0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWUsUm4sem4saHIscGksanMsWmwsWGgsSzEsa1UseFAsYkEsa1A7aWYoU3Q9dShBdCgoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLDApLDgyKSxLdD1TdC5EZygpLHVlPVN0LkVnKCksUnQ9U3QuQ2coKS8yLEs9U3QuQmcoKS8yLF90KFN0LDE4NikmJihNdD11KFN0LDExOCksS3QrPVQxKE10KS5pLEt0Kz1UMShNdCkuaSksS3QrPVJ0LHVlKz1LLHpuPXUoQXQoKCF0LmImJih0LmI9bmV3IENuKGJyLHQsNCw3KSksdC5iKSwwKSw4MikscGk9em4uRGcoKSxqcz16bi5FZygpLGhyPXpuLkNnKCkvMixfZT16bi5CZygpLzIsX3Qoem4sMTg2KSYmKFJuPXUoem4sMTE4KSxwaSs9VDEoUm4pLmkscGkrPVQxKFJuKS5pKSxwaSs9aHIsanMrPV9lLCghdC5hJiYodC5hPW5ldyBmZShKaSx0LDYsNikpLHQuYSkuaT09MClkPShTdygpLGs9bmV3IGFkLGspLERyKCghdC5hJiYodC5hPW5ldyBmZShKaSx0LDYsNikpLHQuYSksZCk7ZWxzZSBpZigoIXQuYSYmKHQuYT1uZXcgZmUoSmksdCw2LDYpKSx0LmEpLmk+MSlmb3IoRz1uZXcgTngoKCF0LmEmJih0LmE9bmV3IGZlKEppLHQsNiw2KSksdC5hKSk7Ry5lIT1HLmkuZ2MoKTspZl8oRyk7Zm9yKGg9dShBdCgoIXQuYSYmKHQuYT1uZXcgZmUoSmksdCw2LDYpKSx0LmEpLDApLDIwMiksdHQ9cGkscGk+S3QrUnQ/dHQ9S3QrUnQ6cGk8S3QtUnQmJih0dD1LdC1SdCksZ3Q9anMsanM+dWUrSz9ndD11ZStLOmpzPHVlLUsmJihndD11ZS1LKSx0dD5LdC1SdCYmdHQ8S3QrUnQmJmd0PnVlLUsmJmd0PHVlK0smJih0dD1LdCtSdCksRzgoaCx0dCksVzgoaCxndCksV2U9S3QsS3Q+cGkraHI/V2U9cGkraHI6S3Q8cGktaHImJihXZT1waS1ociksUWU9dWUsdWU+anMrX2U/UWU9anMrX2U6dWU8anMtX2UmJihRZT1qcy1fZSksV2U+cGktaHImJldlPHBpK2hyJiZRZT5qcy1fZSYmUWU8anMrX2UmJihRZT1qcytfZSksVjgoaCxXZSksVTgoaCxRZSkseHIoKCFoLmEmJihoLmE9bmV3IEFzKEdoLGgsNSkpLGguYSkpLG89WnooZSw1KSxTdD09em4mJisrbyxLMT1XZS10dCxiQT1RZS1ndCxabD1iLk1hdGguc3FydChLMSpLMStiQSpiQSksTT1abCouMjAwMDAwMDAyOTgwMjMyMjQsa1U9SzEvKG8rMSksa1A9YkEvKG8rMSksWGg9dHQseFA9Z3QsQz0wO0M8bztDKyspWGgrPWtVLHhQKz1rUCxqPVhoK3VsKGUsMjQpKiRJKk0tTS8yLGo8MD9qPTE6aj5uJiYoaj1uLTEpLEg9eFArdWwoZSwyNCkqJEkqTS1NLzIsSDwwP0g9MTpIPnImJihIPXItMSkscz0oU3coKSx2PW5ldyB4cCx2KSxpeihzLGopLHN6KHMsSCksRHIoKCFoLmEmJihoLmE9bmV3IEFzKEdoLGgsNSkpLGguYSkscyl9ZnVuY3Rpb24gVGUoKXtUZT1aLGxodD0odWkoKSxwNGUpLHk5dD1iNGUsT089aEF0LFRmPXc0ZSxWNj1mQXQsanY9djRlLFd5PWRBdCxTNz1nQXQsQTc9cEF0LGhodD1KRywkdj1XMixmaHQ9bTRlLExTPXZBdCxiRz1LNixJTz0oRnh0KCksZnZlKSxKND1kdmUscTI9Z3ZlLHQ1PXB2ZSxadmU9bmV3IGVvKFpHLHBlKDApKSxfNz11dmUsbTl0PWx2ZSxINj1odmUsQTl0PUJ2ZSx4OXQ9dnZlLGs5dD14dmUsZ2h0PUF2ZSxFOXQ9VHZlLFQ5dD1fdmUsd0c9enZlLHBodD1SdmUsXzl0PU92ZSxDOXQ9RHZlLFM5dD1GdmUsQnY9cnZlLEFTPWl2ZSxzaHQ9eHdlLFFDdD1Fd2UsZzl0PW5ldyBPdygxMiksZDl0PW5ldyBlbyhVMixnOXQpLFlDdD0oVzAoKSxONyksZWc9bmV3IGVvKHpTdCxZQ3QpLFZ5PW5ldyBlbyhkbCwwKSxKdmU9bmV3IGVvKEVmdCxwZSgxKSksckc9bmV3IGVvKFc2LEdFKSx6Mj1RRyxjcz1LUyxDNz11NSxHdmU9UU8sSWQ9YTRlLHF5PXM1LHRtZT1uZXcgZW8oVGZ0LChObigpLCEwKSksSHk9Wk8sajI9YmZ0LCQyPUcyLHBHPXhiLHVodD1YRyxXQ3Q9KGFvKCksaDApLFdsPW5ldyBlbyhxdixXQ3QpLE52PW81LGRHPVhTdCxHeT1ReSxRdmU9a2Z0LHc5dD11QXQsYjl0PShsNCgpLGlQKSxuZXcgZW8oaUF0LGI5dCksWXZlPXZmdCxLdmU9bWZ0LFh2ZT15ZnQsV3ZlPXdmdCxkaHQ9d3ZlLGM5dD1Hd2Usb2h0PVZ3ZSxNUz1idmUsdXU9QndlLHp5PWR3ZSxfUz1md2UsJHk9SjJlLFZDdD10d2UsZWh0PWl3ZSxETz1ld2Usbmh0PWx3ZSx1OXQ9VXdlLGw5dD1Xd2Uscjl0PUR3ZSxnRz1vdmUsY2h0PVh3ZSxhaHQ9X3dlLGY5dD1ldmUsWEN0PW13ZSxpaHQ9eXdlLHRodD1ZRyxoOXQ9WXdlLHNHPVUyZSx6Q3Q9RzJlLGlHPVYyZSx0OXQ9THdlLEpDdD1Bd2UsZTl0PU13ZSxFNz1jNSxTbz1hNSxKZz1IU3QsT2Q9cGZ0LHJodD1nZnQsR0N0PWF3ZSx0cD14ZnQsQ1M9dTRlLGxHPWw0ZSxSdj1hQXQscDl0PWg0ZSxUNz1mNGUsczl0PWp3ZSxhOXQ9endlLFV5PVk2LFpsdD1IMmUsbzl0PUh3ZSx1Rz1id2UsY0c9cHdlLGZHPUpPLGk5dD1Qd2UsU1M9WndlLFBPPWJBdCxVQ3Q9Z3dlLHY5dD1jdmUsS0N0PXd3ZSxVdmU9TndlLFZ2ZT1jd2Usbjl0PVdTdCxoRz1Sd2Usb0c9dXdlLHdiPVoyZSxIQ3Q9WDJlLGFHPVkyZSxxQ3Q9SzJlLEpsdD1RMmUscTY9VzJlLFpDdD1Td2V9ZnVuY3Rpb24gSGF0KHQsZSl7TGF0KCk7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZSxXZSxRZSxSbix6bixocixwaTtpZihXZT10LmUsRz10LmQscz10LmEsV2U9PTApc3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4iMCI7Y2FzZSAxOnJldHVybiAkRTtjYXNlIDI6cmV0dXJuIjAuMDAiO2Nhc2UgMzpyZXR1cm4iMC4wMDAiO2Nhc2UgNDpyZXR1cm4iMC4wMDAwIjtjYXNlIDU6cmV0dXJuIjAuMDAwMDAiO2Nhc2UgNjpyZXR1cm4iMC4wMDAwMDAiO2RlZmF1bHQ6cmV0dXJuIHVlPW5ldyBNcCxlPDA/dWUuYSs9IjBFKyI6dWUuYSs9IjBFIix1ZS5hKz0tZSx1ZS5hfWlmKFN0PUcqMTArMSs3LFJ0PU50KHhoLHlkLDI1LFN0KzEsMTUsMSksbj1TdCxHPT0xKWlmKGQ9c1swXSxkPDApe3BpPU5zKGQsY28pO2RvIEs9cGkscGk9YUkocGksMTApLFJ0Wy0tbl09NDgrQXIoSnAoSyxfYShwaSwxMCkpKSZ5czt3aGlsZSh5YyhwaSwwKSE9MCl9ZWxzZXtwaT1kO2RvIEs9cGkscGk9cGkvMTB8MCxSdFstLW5dPTQ4KyhLLXBpKjEwKSZ5czt3aGlsZShwaSE9MCl9ZWxzZXtSbj1OdChDcixYciwyNSxHLDE1LDEpLGhyPUcsRGMocywwLFJuLDAsaHIpO3Q6Zm9yKDs7KXtmb3IoX2U9MCxrPWhyLTE7az49MDtrLS0pem49UGEoRjAoX2UsMzIpLE5zKFJuW2tdLGNvKSksZ3Q9UDBuKHpuKSxSbltrXT1BcihndCksX2U9QXIoJHAoZ3QsMzIpKTtNdD1BcihfZSksdHQ9bjtkbyBSdFstLW5dPTQ4K010JTEwJnlzO3doaWxlKChNdD1NdC8xMHwwKSE9MCYmbiE9MCk7Zm9yKHI9OS10dCtuLHY9MDt2PHImJm4+MDt2KyspUnRbLS1uXT00ODtmb3IoTT1oci0xO1JuW01dPT0wO00tLSlpZihNPT0wKWJyZWFrIHQ7aHI9TSsxfWZvcig7UnRbbl09PTQ4OykrK259aWYoSD1XZTwwLGg9U3Qtbi1lLTEsZT09MClyZXR1cm4gSCYmKFJ0Wy0tbl09NDUpLE1oKFJ0LG4sU3Qtbik7aWYoZT4wJiZoPj0tNil7aWYoaD49MCl7Zm9yKEM9bitoLGo9U3QtMTtqPj1DO2otLSlSdFtqKzFdPVJ0W2pdO3JldHVybiBSdFsrK0NdPTQ2LEgmJihSdFstLW5dPTQ1KSxNaChSdCxuLFN0LW4rMSl9Zm9yKE09MjtNPC1oKzE7TSsrKVJ0Wy0tbl09NDg7cmV0dXJuIFJ0Wy0tbl09NDYsUnRbLS1uXT00OCxIJiYoUnRbLS1uXT00NSksTWgoUnQsbixTdC1uKX1yZXR1cm4gUWU9bisxLG89U3QsS3Q9bmV3IEltLEgmJihLdC5hKz0iLSIpLG8tUWU+PTE/KHFwKEt0LFJ0W25dKSxLdC5hKz0iLiIsS3QuYSs9TWgoUnQsbisxLFN0LW4tMSkpOkt0LmErPU1oKFJ0LG4sU3QtbiksS3QuYSs9IkUiLGg+MCYmKEt0LmErPSIrIiksS3QuYSs9IiIraCxLdC5hfWZ1bmN0aW9uIEpoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWU7c3dpdGNoKHQuYz1lLHQuZz1uZXcgX3Isbj0oUG0oKSxuZXcgTW0odC5jKSkscj1uZXcgZXIobikscDN0KHIpLFN0PUJyKHFlKHQuYywoY0koKSxsU3QpKSksdj11KHFlKHQuYyxzZnQpLDMxNiksS3Q9dShxZSh0LmMsYWZ0KSw0MjkpLGg9dShxZSh0LmMsb1N0KSw0ODIpLFJ0PXUocWUodC5jLGlmdCksNDMwKSx0Lmo9WHQoeWUocWUodC5jLE0zZSkpKSxkPXQuYSx2Lmcpe2Nhc2UgMDpkPXQuYTticmVhaztjYXNlIDE6ZD10LmI7YnJlYWs7Y2FzZSAyOmQ9dC5pO2JyZWFrO2Nhc2UgMzpkPXQuZTticmVhaztjYXNlIDQ6ZD10LmY7YnJlYWs7ZGVmYXVsdDp0aHJvdyBpdChuZXcgRm4oX0grKHYuZiE9bnVsbD92LmY6IiIrdi5nKSkpfWlmKHQuZD1uZXcgRVF0KGQsS3QsaCksSnQodC5kLChaOCgpLGZTKSxSZShxZSh0LmMsQTNlKSkpLHQuZC5jPWplKFJlKHFlKHQuYyxjU3QpKSkscCQodC5jKS5pPT0wKXJldHVybiB0LmQ7Zm9yKE09bmV3IG5yKHAkKHQuYykpO00uZSE9TS5pLmdjKCk7KXtmb3IoQz11KGRyKE0pLDMzKSxIPUMuZy8yLGo9Qy5mLzIsdWU9bmV3ICRlKEMuaStILEMuaitqKTtUbCh0LmcsdWUpOylqbSh1ZSwoYi5NYXRoLnJhbmRvbSgpLS41KSpFZCwoYi5NYXRoLnJhbmRvbSgpLS41KSpFZCk7Sz11KHFlKEMsKHVpKCksSk8pKSwxNDIpLHR0PW5ldyAkUXQodWUsbmV3IGFoKHVlLmEtSC10LmovMi1LLmIsdWUuYi1qLXQuai8yLUsuZCxDLmcrdC5qKyhLLmIrSy5jKSxDLmYrdC5qKyhLLmQrSy5hKSkpLGxlKHQuZC5pLHR0KSxraSh0LmcsdWUsbmV3IGZhKHR0LEMpKX1zd2l0Y2goUnQuZyl7Y2FzZSAwOmlmKFN0PT1udWxsKXQuZC5kPXUoTmUodC5kLmksMCksNjUpO2Vsc2UgZm9yKE10PW5ldyBTKHQuZC5pKTtNdC5hPE10LmMuYy5sZW5ndGg7KXR0PXUoSihNdCksNjUpLEc9dSh1KHRyKHQuZyx0dC5hKSw0NikuYiwzMykuemcoKSxHIT1udWxsJiZobihHLFN0KSYmKHQuZC5kPXR0KTticmVhaztjYXNlIDE6Zm9yKHM9bmV3ICRlKHQuYy5nLHQuYy5mKSxzLmEqPS41LHMuYio9LjUsam0ocyx0LmMuaSx0LmMuaiksbz1hcyxndD1uZXcgUyh0LmQuaSk7Z3QuYTxndC5jLmMubGVuZ3RoOyl0dD11KEooZ3QpLDY1KSxrPVdwKHR0LmEscyksazxvJiYobz1rLHQuZC5kPXR0KTticmVhaztkZWZhdWx0OnRocm93IGl0KG5ldyBGbihfSCsoUnQuZiE9bnVsbD9SdC5mOiIiK1J0LmcpKSl9cmV0dXJuIHQuZH1mdW5jdGlvbiB0ZmUodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlO2ZvcihLdD11KEF0KCghdC5hJiYodC5hPW5ldyBmZShKaSx0LDYsNikpLHQuYSksMCksMjAyKSxDPW5ldyBQdSxSdD1uZXcgX3IsdWU9YmxlKEt0KSxhdShSdC5mLEt0LHVlKSxqPW5ldyBfcixyPW5ldyBaaSxHPXpwKEQxKGx0KGN0KGoxLDEpLERlLDIwLDAsWyghZS5kJiYoZS5kPW5ldyBDbihZcyxlLDgsNSkpLGUuZCksKCFlLmUmJihlLmU9bmV3IENuKFlzLGUsNyw0KSksZS5lKV0pKSk7enIoRyk7KXtpZihIPXUoTXIoRyksNzkpLCghdC5hJiYodC5hPW5ldyBmZShKaSx0LDYsNikpLHQuYSkuaSE9MSl0aHJvdyBpdChuZXcgRm4oU2RlKyghdC5hJiYodC5hPW5ldyBmZShKaSx0LDYsNikpLHQuYSkuaSkpO0ghPXQmJih0dD11KEF0KCghSC5hJiYoSC5hPW5ldyBmZShKaSxILDYsNikpLEguYSksMCksMjAyKSxmcyhyLHR0LHIuYy5iLHIuYyksSz11KGVjKExvKFJ0LmYsdHQpKSwxMiksS3x8KEs9YmxlKHR0KSxhdShSdC5mLHR0LEspKSxNPW4/aWEobmV3IHhvKHUoTmUodWUsdWUuYy5sZW5ndGgtMSksOCkpLHUoTmUoSyxLLmMubGVuZ3RoLTEpLDgpKTppYShuZXcgeG8oKEFuKDAsdWUuYy5sZW5ndGgpLHUodWUuY1swXSw4KSkpLChBbigwLEsuYy5sZW5ndGgpLHUoSy5jWzBdLDgpKSksYXUoai5mLHR0LE0pKX1pZihyLmIhPTApZm9yKGd0PXUoTmUodWUsbj91ZS5jLmxlbmd0aC0xOjApLDgpLGs9MTtrPHVlLmMubGVuZ3RoO2srKyl7Zm9yKE10PXUoTmUodWUsbj91ZS5jLmxlbmd0aC0xLWs6ayksOCkscz1laShyLDApO3MuYiE9cy5kLmM7KXR0PXUodGkocyksMjAyKSxLPXUoZWMoTG8oUnQuZix0dCkpLDEyKSxLLmMubGVuZ3RoPD1rP3R6KHMpOihTdD1MaShuZXcgeG8odShOZShLLG4/Sy5jLmxlbmd0aC0xLWs6ayksOCkpLHUoZWMoTG8oai5mLHR0KSksOCkpLChNdC5hIT1TdC5hfHxNdC5iIT1TdC5iKSYmKG89TXQuYS1ndC5hLGQ9TXQuYi1ndC5iLGg9U3QuYS1ndC5hLHY9U3QuYi1ndC5iLGgqZD09dipvJiYobz09MHx8aXNOYU4obyk/bzpvPDA/LTE6MSk9PShoPT0wfHxpc05hTihoKT9oOmg8MD8tMToxKSYmKGQ9PTB8fGlzTmFOKGQpP2Q6ZDwwPy0xOjEpPT0odj09MHx8aXNOYU4odik/djp2PDA/LTE6MSk/KGIuTWF0aC5hYnMobyk8Yi5NYXRoLmFicyhoKXx8Yi5NYXRoLmFicyhkKTxiLk1hdGguYWJzKHYpKSYmZnMoQyxNdCxDLmMuYixDLmMpOms+MSYmZnMoQyxndCxDLmMuYixDLmMpLHR6KHMpKSk7Z3Q9TXR9cmV0dXJuIEN9ZnVuY3Rpb24gTXhuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZSxXZSxRZSxSbix6bixocixwaSxqcyxabCxYaCxLMTtmb3IodnIobiwiR3JlZWR5IGN5Y2xlIHJlbW92YWwiLDEpLFN0PWUuYSxLMT1TdC5jLmxlbmd0aCx0LmE9TnQoQ3IsWHIsMjUsSzEsMTUsMSksdC5jPU50KENyLFhyLDI1LEsxLDE1LDEpLHQuYj1OdChDcixYciwyNSxLMSwxNSwxKSxrPTAsZ3Q9bmV3IFMoU3QpO2d0LmE8Z3QuYy5jLmxlbmd0aDspe2ZvcihLPXUoSihndCksMTApLEsucD1rLFFlPW5ldyBTKEsuaik7UWUuYTxRZS5jLmMubGVuZ3RoOyl7Zm9yKHVlPXUoSihRZSksMTEpLGQ9bmV3IFModWUuZSk7ZC5hPGQuYy5jLmxlbmd0aDspcj11KEooZCksMTcpLHIuYy5pIT1LJiYoaHI9dShRKHIsKFRlKCksXzcpKSwxOSkuYSx0LmFba10rPWhyPjA/aHIrMToxKTtmb3IoaD1uZXcgUyh1ZS5nKTtoLmE8aC5jLmMubGVuZ3RoOylyPXUoSihoKSwxNyksci5kLmkhPUsmJihocj11KFEociwoVGUoKSxfNykpLDE5KS5hLHQuY1trXSs9aHI+MD9ocisxOjEpfXQuY1trXT09MD9yaSh0LmUsSyk6dC5hW2tdPT0wJiZyaSh0LmYsSyksKytrfWZvcihHPS0xLEg9MSxNPW5ldyBoZSx0LmQ9dShRKGUsKGFlKCksJDYpKSwyMzApO0sxPjA7KXtmb3IoO3QuZS5iIT0wOylqcz11KE9udCh0LmUpLDEwKSx0LmJbanMucF09Ry0tLGV4dCh0LGpzKSwtLUsxO2Zvcig7dC5mLmIhPTA7KVpsPXUoT250KHQuZiksMTApLHQuYltabC5wXT1IKyssZXh0KHQsWmwpLC0tSzE7aWYoSzE+MCl7Zm9yKGo9U2EsTXQ9bmV3IFMoU3QpO010LmE8TXQuYy5jLmxlbmd0aDspSz11KEooTXQpLDEwKSx0LmJbSy5wXT09MCYmKFJ0PXQuY1tLLnBdLXQuYVtLLnBdLFJ0Pj1qJiYoUnQ+aiYmKE0uYz1OdChRbixEZSwxLDAsNSwxKSxqPVJ0KSxNLmNbTS5jLmxlbmd0aF09SykpO0M9dC5aZihNKSx0LmJbQy5wXT1IKyssZXh0KHQsQyksLS1LMX19Zm9yKHBpPVN0LmMubGVuZ3RoKzEsaz0wO2s8U3QuYy5sZW5ndGg7aysrKXQuYltrXTwwJiYodC5iW2tdKz1waSk7Zm9yKHR0PW5ldyBTKFN0KTt0dC5hPHR0LmMuYy5sZW5ndGg7KWZvcihLPXUoSih0dCksMTApLHpuPU9adChLLmopLF9lPXpuLFdlPTAsUm49X2UubGVuZ3RoO1dlPFJuOysrV2UpZm9yKHVlPV9lW1dlXSxLdD13ZCh1ZS5nKSxzPUt0LG89MCx2PXMubGVuZ3RoO288djsrK28pcj1zW29dLFhoPXIuZC5pLnAsdC5iW0sucF0+dC5iW1hoXSYmKGJ2KHIsITApLEp0KGUsX08sKE5uKCksITApKSk7dC5hPW51bGwsdC5jPW51bGwsdC5iPW51bGwsQWgodC5mKSxBaCh0LmUpLG9yKG4pfWZ1bmN0aW9uIGVmZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3Q7Zm9yKHI9bmV3IGhlLGQ9bmV3IGhlLHR0PWUvMixIPXQuZ2MoKSxzPXUodC5YYigwKSw4KSxndD11KHQuWGIoMSksOCksRz1yYXQocy5hLHMuYixndC5hLGd0LmIsdHQpLGxlKHIsKEFuKDAsRy5jLmxlbmd0aCksdShHLmNbMF0sOCkpKSxsZShkLChBbigxLEcuYy5sZW5ndGgpLHUoRy5jWzFdLDgpKSksaz0yO2s8SDtrKyspSz1zLHM9Z3QsZ3Q9dSh0LlhiKGspLDgpLEc9cmF0KHMuYSxzLmIsSy5hLEsuYix0dCksbGUociwoQW4oMSxHLmMubGVuZ3RoKSx1KEcuY1sxXSw4KSkpLGxlKGQsKEFuKDAsRy5jLmxlbmd0aCksdShHLmNbMF0sOCkpKSxHPXJhdChzLmEscy5iLGd0LmEsZ3QuYix0dCksbGUociwoQW4oMCxHLmMubGVuZ3RoKSx1KEcuY1swXSw4KSkpLGxlKGQsKEFuKDEsRy5jLmxlbmd0aCksdShHLmNbMV0sOCkpKTtmb3IoRz1yYXQoZ3QuYSxndC5iLHMuYSxzLmIsdHQpLGxlKHIsKEFuKDEsRy5jLmxlbmd0aCksdShHLmNbMV0sOCkpKSxsZShkLChBbigwLEcuYy5sZW5ndGgpLHUoRy5jWzBdLDgpKSksbj1uZXcgUHUsaD1uZXcgaGUscmkobiwoQW4oMCxyLmMubGVuZ3RoKSx1KHIuY1swXSw4KSkpLEM9MTtDPHIuYy5sZW5ndGgtMjtDKz0yKW89KEFuKEMsci5jLmxlbmd0aCksdShyLmNbQ10sOCkpLGo9Z29lKChBbihDLTEsci5jLmxlbmd0aCksdShyLmNbQy0xXSw4KSksbywoQW4oQysxLHIuYy5sZW5ndGgpLHUoci5jW0MrMV0sOCkpLChBbihDKzIsci5jLmxlbmd0aCksdShyLmNbQysyXSw4KSkpLCFpc0Zpbml0ZShqLmEpfHwhaXNGaW5pdGUoai5iKT9mcyhuLG8sbi5jLmIsbi5jKTpmcyhuLGosbi5jLmIsbi5jKTtmb3Iocmkobix1KE5lKHIsci5jLmxlbmd0aC0xKSw4KSksbGUoaCwoQW4oMCxkLmMubGVuZ3RoKSx1KGQuY1swXSw4KSkpLE09MTtNPGQuYy5sZW5ndGgtMjtNKz0yKW89KEFuKE0sZC5jLmxlbmd0aCksdShkLmNbTV0sOCkpLGo9Z29lKChBbihNLTEsZC5jLmxlbmd0aCksdShkLmNbTS0xXSw4KSksbywoQW4oTSsxLGQuYy5sZW5ndGgpLHUoZC5jW00rMV0sOCkpLChBbihNKzIsZC5jLmxlbmd0aCksdShkLmNbTSsyXSw4KSkpLCFpc0Zpbml0ZShqLmEpfHwhaXNGaW5pdGUoai5iKT9oLmNbaC5jLmxlbmd0aF09bzpoLmNbaC5jLmxlbmd0aF09ajtmb3IobGUoaCx1KE5lKGQsZC5jLmxlbmd0aC0xKSw4KSksdj1oLmMubGVuZ3RoLTE7dj49MDt2LS0pcmkobiwoQW4odixoLmMubGVuZ3RoKSx1KGguY1t2XSw4KSkpO3JldHVybiBufWZ1bmN0aW9uIER4bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGosSDtpZihoPSEwLE09bnVsbCxyPW51bGwscz1udWxsLGU9ITEsSD1vNWUsaz1udWxsLG89bnVsbCxkPTAsdj11c3QodCxkLG5MdCxyTHQpLHY8dC5sZW5ndGgmJihScih2LHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQodik9PTU4KSYmKE09dC5zdWJzdHIoZCx2LWQpLGQ9disxKSxuPU0hPW51bGwmJnlNKGdVLE0udG9Mb3dlckNhc2UoKSksbil7aWYodj10Lmxhc3RJbmRleE9mKCIhLyIpLHY9PS0xKXRocm93IGl0KG5ldyBGbigibm8gYXJjaGl2ZSBzZXBhcmF0b3IiKSk7aD0hMCxyPVBsKHQsZCwrK3YpLGQ9dn1lbHNlIGQ+PTAmJmhuKHQuc3Vic3RyKGQsMiksIi8vIik/KGQrPTIsdj11c3QodCxkLG9BLGNBKSxyPXQuc3Vic3RyKGQsdi1kKSxkPXYpOk0hPW51bGwmJihkPT10Lmxlbmd0aHx8KFJyKGQsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChkKSE9NDcpKSYmKGg9ITEsdj1PMnQodCxDdSgzNSksZCksdj09LTEmJih2PXQubGVuZ3RoKSxyPXQuc3Vic3RyKGQsdi1kKSxkPXYpO2lmKCFuJiZkPHQubGVuZ3RoJiYoUnIoZCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGQpPT00NykmJih2PXVzdCh0LGQrMSxvQSxjQSksQz10LnN1YnN0cihkKzEsdi0oZCsxKSksQy5sZW5ndGg+MCYmd2EoQyxDLmxlbmd0aC0xKT09NTgmJihzPUMsZD12KSksZDx0Lmxlbmd0aCYmKFJyKGQsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChkKT09NDcpJiYoKytkLGU9ITApLGQ8dC5sZW5ndGgmJihScihkLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZCkhPTYzKSYmKFJyKGQsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChkKSE9MzUpKXtmb3Ioaj1uZXcgaGU7ZDx0Lmxlbmd0aCYmKFJyKGQsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChkKSE9NjMpJiYoUnIoZCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGQpIT0zNSk7KXY9dXN0KHQsZCxvQSxjQSksbGUoaix0LnN1YnN0cihkLHYtZCkpLGQ9dixkPHQubGVuZ3RoJiYoUnIoZCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGQpPT00NykmJihtbG4odCwrK2QpfHwoai5jW2ouYy5sZW5ndGhdPSIiKSk7SD1OdChBZSxlZSwyLGouYy5sZW5ndGgsNiwxKSxQMShqLEgpfXJldHVybiBkPHQubGVuZ3RoJiYoUnIoZCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGQpPT02MykmJih2PXY4KHQsMzUsKytkKSx2PT0tMSYmKHY9dC5sZW5ndGgpLGs9dC5zdWJzdHIoZCx2LWQpLGQ9diksZDx0Lmxlbmd0aCYmKG89Uk0odCwrK2QpKSx4NG4oaCxNLHIscyxILGspLG5ldyBmYXQoaCxNLHIscyxlLEgsayxvKX1mdW5jdGlvbiBJeG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuLHpuLGhyLHBpLGpzLFpsLFhoO2Zvcihqcz1uZXcgaGUsRz1uZXcgUyhlLmIpO0cuYTxHLmMuYy5sZW5ndGg7KWZvcihqPXUoSihHKSwyOSksS3Q9bmV3IFMoai5hKTtLdC5hPEt0LmMuYy5sZW5ndGg7KXtmb3IoUnQ9dShKKEt0KSwxMCksUnQucD0tMSxNPVNhLFdlPVNhLFJuPW5ldyBTKFJ0LmopO1JuLmE8Um4uYy5jLmxlbmd0aDspe2ZvcihRZT11KEooUm4pLDExKSxzPW5ldyBTKFFlLmUpO3MuYTxzLmMuYy5sZW5ndGg7KW49dShKKHMpLDE3KSx6bj11KFEobiwoVGUoKSxINikpLDE5KS5hLE09Yi5NYXRoLm1heChNLHpuKTtmb3Iocj1uZXcgUyhRZS5nKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxNyksem49dShRKG4sKFRlKCksSDYpKSwxOSkuYSxXZT1iLk1hdGgubWF4KFdlLHpuKX1KdChSdCxfRyxwZShNKSksSnQoUnQsU0cscGUoV2UpKX1mb3IoZ3Q9MCxIPW5ldyBTKGUuYik7SC5hPEguYy5jLmxlbmd0aDspZm9yKGo9dShKKEgpLDI5KSxLdD1uZXcgUyhqLmEpO0t0LmE8S3QuYy5jLmxlbmd0aDspUnQ9dShKKEt0KSwxMCksUnQucDwwJiYocGk9bmV3IHpwdCxwaS5iPWd0KyssUnVlKHQsUnQscGkpLGpzLmNbanMuYy5sZW5ndGhdPXBpKTtmb3IoX2U9VWQoanMuYy5sZW5ndGgpLEM9VWQoanMuYy5sZW5ndGgpLGg9MDtoPGpzLmMubGVuZ3RoO2grKylsZShfZSxuZXcgaGUpLGxlKEMscGUoMCkpO2ZvcihlNW4oZSxqcyxfZSxDKSxabD11KFAxKGpzLE50KEJtZSxWMWUsMjU3LGpzLmMubGVuZ3RoLDAsMSkpLDg0MCksdWU9dShQMShfZSxOdCh3aCxUeSwxNSxfZS5jLmxlbmd0aCwwLDEpKSwxOTIpLGs9TnQoQ3IsWHIsMjUsQy5jLmxlbmd0aCwxNSwxKSxkPTA7ZDxrLmxlbmd0aDtkKyspa1tkXT0oQW4oZCxDLmMubGVuZ3RoKSx1KEMuY1tkXSwxOSkpLmE7Zm9yKE10PTAsU3Q9bmV3IGhlLHY9MDt2PFpsLmxlbmd0aDt2Kyspa1t2XT09MCYmbGUoU3QsWmxbdl0pO2Zvcih0dD1OdChDcixYciwyNSxabC5sZW5ndGgsMTUsMSk7U3QuYy5sZW5ndGghPTA7KWZvcihwaT11KEZnKFN0LDApLDI1NyksdHRbcGkuYl09TXQrKzshdWVbcGkuYl0uZGMoKTspWGg9dSh1ZVtwaS5iXS4kYygwKSwyNTcpLC0ta1tYaC5iXSxrW1hoLmJdPT0wJiYoU3QuY1tTdC5jLmxlbmd0aF09WGgpO2Zvcih0LmE9TnQoQm1lLFYxZSwyNTcsWmwubGVuZ3RoLDAsMSksbz0wO288WmwubGVuZ3RoO28rKylmb3IoSz1abFtvXSxocj10dFtvXSx0LmFbaHJdPUssSy5iPWhyLEt0PW5ldyBTKEsuZSk7S3QuYTxLdC5jLmMubGVuZ3RoOylSdD11KEooS3QpLDEwKSxSdC5wPWhyO3JldHVybiB0LmF9ZnVuY3Rpb24gZmkodCl7dmFyIGUsbixyO2lmKHQuZD49dC5qKXt0LmE9LTEsdC5jPTE7cmV0dXJufWlmKGU9d2EodC5pLHQuZCsrKSx0LmE9ZSx0LmI9PTEpe3N3aXRjaChlKXtjYXNlIDkyOmlmKHI9MTAsdC5kPj10LmopdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLE9IKSkpKTt0LmE9d2EodC5pLHQuZCsrKTticmVhaztjYXNlIDQ1Oih0LmUmNTEyKT09NTEyJiZ0LmQ8dC5qJiZ3YSh0LmksdC5kKT09OTE/KCsrdC5kLHI9MjQpOnI9MDticmVhaztjYXNlIDkxOmlmKCh0LmUmNTEyKSE9NTEyJiZ0LmQ8dC5qJiZ3YSh0LmksdC5kKT09NTgpeysrdC5kLHI9MjA7YnJlYWt9ZGVmYXVsdDooZSY2NDUxMik9PVJJJiZ0LmQ8dC5qJiYobj13YSh0LmksdC5kKSwobiY2NDUxMik9PTU2MzIwJiYodC5hPUthKyhlLVJJPDwxMCkrbi01NjMyMCwrK3QuZCkpLHI9MH10LmM9cjtyZXR1cm59c3dpdGNoKGUpe2Nhc2UgMTI0OnI9MjticmVhaztjYXNlIDQyOnI9MzticmVhaztjYXNlIDQzOnI9NDticmVhaztjYXNlIDYzOnI9NTticmVhaztjYXNlIDQxOnI9NzticmVhaztjYXNlIDQ2OnI9ODticmVhaztjYXNlIDkxOnI9OTticmVhaztjYXNlIDk0OnI9MTE7YnJlYWs7Y2FzZSAzNjpyPTEyO2JyZWFrO2Nhc2UgNDA6aWYocj02LHQuZD49dC5qfHx3YSh0LmksdC5kKSE9NjMpYnJlYWs7aWYoKyt0LmQ+PXQuail0aHJvdyBpdChuZXcgTnIocXIoKFByKCksb3V0KSkpKTtzd2l0Y2goZT13YSh0LmksdC5kKyspLGUpe2Nhc2UgNTg6cj0xMzticmVhaztjYXNlIDYxOnI9MTQ7YnJlYWs7Y2FzZSAzMzpyPTE1O2JyZWFrO2Nhc2UgOTE6cj0xOTticmVhaztjYXNlIDYyOnI9MTg7YnJlYWs7Y2FzZSA2MDppZih0LmQ+PXQuail0aHJvdyBpdChuZXcgTnIocXIoKFByKCksb3V0KSkpKTtpZihlPXdhKHQuaSx0LmQrKyksZT09NjEpcj0xNjtlbHNlIGlmKGU9PTMzKXI9MTc7ZWxzZSB0aHJvdyBpdChuZXcgTnIocXIoKFByKCksdDBlKSkpKTticmVhaztjYXNlIDM1OmZvcig7dC5kPHQuaiYmKGU9d2EodC5pLHQuZCsrKSxlIT00MSk7KTtpZihlIT00MSl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksZTBlKSkpKTtyPTIxO2JyZWFrO2RlZmF1bHQ6aWYoZT09NDV8fDk3PD1lJiZlPD0xMjJ8fDY1PD1lJiZlPD05MCl7LS10LmQscj0yMjticmVha31lbHNlIGlmKGU9PTQwKXtyPTIzO2JyZWFrfXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxvdXQpKSkpfWJyZWFrO2Nhc2UgOTI6aWYocj0xMCx0LmQ+PXQuail0aHJvdyBpdChuZXcgTnIocXIoKFByKCksT0gpKSkpO3QuYT13YSh0LmksdC5kKyspO2JyZWFrO2RlZmF1bHQ6cj0wfXQuYz1yfWZ1bmN0aW9uIE94bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWUsUm4sem4saHI7aWYoX2U9dShRKHQsKFRlKCksY3MpKSw5OCksX2UhPSh1YSgpLEcxKSYmX2UhPVRiKXtmb3IoRz10LmIsSD1HLmMubGVuZ3RoLEM9bmV3IFhjKChqbChIKzIsWWF0KSxKJChQYShQYSg1LEgrMiksKEgrMikvMTB8MCkpKSksSz1uZXcgWGMoKGpsKEgrMixZYXQpLEokKFBhKFBhKDUsSCsyKSwoSCsyKS8xMHwwKSkpKSxsZShDLG5ldyBfciksbGUoQyxuZXcgX3IpLGxlKEssbmV3IGhlKSxsZShLLG5ldyBoZSksdWU9bmV3IGhlLGU9MDtlPEg7ZSsrKWZvcihuPShBbihlLEcuYy5sZW5ndGgpLHUoRy5jW2VdLDI5KSksV2U9KEFuKGUsQy5jLmxlbmd0aCksdShDLmNbZV0sODMpKSx0dD1uZXcgX3IsQy5jW0MuYy5sZW5ndGhdPXR0LFJuPShBbihlLEsuYy5sZW5ndGgpLHUoSy5jW2VdLDE1KSksTXQ9bmV3IGhlLEsuY1tLLmMubGVuZ3RoXT1NdCxzPW5ldyBTKG4uYSk7cy5hPHMuYy5jLmxlbmd0aDspe2lmKHI9dShKKHMpLDEwKSxzM3Qocikpe3VlLmNbdWUuYy5sZW5ndGhdPXI7Y29udGludWV9Zm9yKGs9bmV3IGFyKGxyKGpvKHIpLmEuS2MoKSxuZXcgeikpO3pyKGspOylkPXUoTXIoayksMTcpLHpuPWQuYy5pLHMzdCh6bikmJihRZT11KFdlLnhjKFEoem4sKGFlKCksX2kpKSksMTApLFFlfHwoUWU9Rm9lKHQsem4pLFdlLnpjKFEoem4sX2kpLFFlKSxSbi5GYyhRZSkpLE9hKGQsdShOZShRZS5qLDEpLDExKSkpO2Zvcih2PW5ldyBhcihscihEcyhyKS5hLktjKCksbmV3IHopKTt6cih2KTspZD11KE1yKHYpLDE3KSxocj1kLmQuaSxzM3QoaHIpJiYoZ3Q9dSh0cih0dCxRKGhyLChhZSgpLF9pKSkpLDEwKSxndHx8KGd0PUZvZSh0LGhyKSxraSh0dCxRKGhyLF9pKSxndCksTXQuY1tNdC5jLmxlbmd0aF09Z3QpLG9hKGQsdShOZShndC5qLDApLDExKSkpfWZvcihNPTA7TTxLLmMubGVuZ3RoO00rKylpZihTdD0oQW4oTSxLLmMubGVuZ3RoKSx1KEsuY1tNXSwxNSkpLCFTdC5kYygpKWZvcihqPW51bGwsTT09MD8oaj1uZXcgU2godCksS20oMCxHLmMubGVuZ3RoKSxYQyhHLmMsMCxqKSk6TT09Qy5jLmxlbmd0aC0xPyhqPW5ldyBTaCh0KSxHLmNbRy5jLmxlbmd0aF09aik6aj0oQW4oTS0xLEcuYy5sZW5ndGgpLHUoRy5jW00tMV0sMjkpKSxoPVN0LktjKCk7aC5PYigpOylvPXUoaC5QYigpLDEwKSxFbyhvLGopO2ZvcihLdD1uZXcgUyh1ZSk7S3QuYTxLdC5jLmMubGVuZ3RoOylSdD11KEooS3QpLDEwKSxFbyhSdCxudWxsKTtKdCh0LChhZSgpLFZsdCksdWUpfX1mdW5jdGlvbiBQeG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0O2lmKHZyKG4sIkNvZmZtYW4tR3JhaGFtIExheWVyaW5nIiwxKSxlLmEuYy5sZW5ndGg9PTApe29yKG4pO3JldHVybn1mb3IoS3Q9dShRKGUsKFRlKCksaTl0KSksMTkpLmEsdj0wLGg9MCxqPW5ldyBTKGUuYSk7ai5hPGouYy5jLmxlbmd0aDspZm9yKE09dShKKGopLDEwKSxNLnA9disrLG89bmV3IGFyKGxyKERzKE0pLmEuS2MoKSxuZXcgeikpO3pyKG8pOylzPXUoTXIobyksMTcpLHMucD1oKys7Zm9yKHQuZD1OdChwbCxvMCwyNSx2LDE2LDEpLHQuYT1OdChwbCxvMCwyNSxoLDE2LDEpLHQuYj1OdChDcixYciwyNSx2LDE1LDEpLHQuZT1OdChDcixYciwyNSx2LDE1LDEpLHQuZj1OdChDcixYciwyNSx2LDE1LDEpLGN6KHQuYyksdDBuKHQsZSksRz1uZXcgbiQobmV3IHBSKHQpKSxSdD1uZXcgUyhlLmEpO1J0LmE8UnQuYy5jLmxlbmd0aDspe2ZvcihNdD11KEooUnQpLDEwKSxvPW5ldyBhcihscihqbyhNdCkuYS5LYygpLG5ldyB6KSk7enIobyk7KXM9dShNcihvKSwxNyksdC5hW3MucF18fCsrdC5iW010LnBdO3QuYltNdC5wXT09MCYmUjgoeEUoRyxNdCkpfWZvcihkPTA7Ry5iLmMubGVuZ3RoIT0wOylmb3IoTXQ9dShjaXQoRyksMTApLHQuZltNdC5wXT1kKyssbz1uZXcgYXIobHIoRHMoTXQpLmEuS2MoKSxuZXcgeikpO3pyKG8pOylzPXUoTXIobyksMTcpLCF0LmFbcy5wXSYmKHR0PXMuZC5pLC0tdC5iW3R0LnBdLGxuKHQuYyx0dCxwZSh0LmZbTXQucF0pKSx0LmJbdHQucF09PTAmJlI4KHhFKEcsdHQpKSk7Zm9yKEg9bmV3IG4kKG5ldyBYdHQodCkpLFN0PW5ldyBTKGUuYSk7U3QuYTxTdC5jLmMubGVuZ3RoOyl7Zm9yKE10PXUoSihTdCksMTApLG89bmV3IGFyKGxyKERzKE10KS5hLktjKCksbmV3IHopKTt6cihvKTspcz11KE1yKG8pLDE3KSx0LmFbcy5wXXx8Kyt0LmVbTXQucF07dC5lW010LnBdPT0wJiZSOCh4RShILE10KSl9Zm9yKEM9bmV3IGhlLHI9WFF0KGUsQyk7SC5iLmMubGVuZ3RoIT0wOylmb3IoZ3Q9dShjaXQoSCksMTApLChyLmEuYy5sZW5ndGg+PUt0fHwhdGZuKGd0LHIpKSYmKHI9WFF0KGUsQykpLEVvKGd0LHIpLG89bmV3IGFyKGxyKGpvKGd0KS5hLktjKCksbmV3IHopKTt6cihvKTspcz11KE1yKG8pLDE3KSwhdC5hW3MucF0mJihLPXMuYy5pLC0tdC5lW0sucF0sdC5lW0sucF09PTAmJlI4KHhFKEgsSykpKTtmb3Ioaz1DLmMubGVuZ3RoLTE7az49MDstLWspbGUoZS5iLChBbihrLEMuYy5sZW5ndGgpLHUoQy5jW2tdLDI5KSkpO2UuYS5jPU50KFFuLERlLDEsMCw1LDEpLG9yKG4pfWZ1bmN0aW9uIG5mZSh0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGs7Zm9yKHQuYj0xLGZpKHQpLGU9bnVsbCx0LmM9PTAmJnQuYT09OTQ/KGZpKHQpLGU9KGdpKCksZ2koKSxuZXcgTmwoNCkpLGpjKGUsMCxlNyksZD1uZXcgTmwoNCkpOmQ9KGdpKCksZ2koKSxuZXcgTmwoNCkpLHM9ITA7KGs9dC5jKSE9MTspe2lmKGs9PTAmJnQuYT09OTMmJiFzKXtlJiYoTF8oZSxkKSxkPWUpO2JyZWFrfWlmKG49dC5hLHI9ITEsaz09MTApc3dpdGNoKG4pe2Nhc2UgMTAwOmNhc2UgNjg6Y2FzZSAxMTk6Y2FzZSA4NzpjYXNlIDExNTpjYXNlIDgzOnl5KGQsTUUobikpLHI9ITA7YnJlYWs7Y2FzZSAxMDU6Y2FzZSA3MzpjYXNlIDk5OmNhc2UgNjc6bj0oeXkoZCxNRShuKSksLTEpLG48MCYmKHI9ITApO2JyZWFrO2Nhc2UgMTEyOmNhc2UgODA6aWYodj11NXQodCxuKSwhdil0aHJvdyBpdChuZXcgTnIocXIoKFByKCksY3V0KSkpKTt5eShkLHYpLHI9ITA7YnJlYWs7ZGVmYXVsdDpuPUg1dCh0KX1lbHNlIGlmKGs9PTI0JiYhcyl7aWYoZSYmKExfKGUsZCksZD1lKSxvPW5mZSh0KSxMXyhkLG8pLHQuYyE9MHx8dC5hIT05Myl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksbDBlKSkpKTticmVha31pZihmaSh0KSwhcil7aWYoaz09MCl7aWYobj09OTEpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLFA4dCkpKSk7aWYobj09OTMpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLEY4dCkpKSk7aWYobj09NDUmJiFzJiZ0LmEhPTkzKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSx1dXQpKSkpfWlmKHQuYyE9MHx8dC5hIT00NXx8bj09NDUmJnMpamMoZCxuLG4pO2Vsc2V7aWYoZmkodCksKGs9dC5jKT09MSl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksUEgpKSkpO2lmKGs9PTAmJnQuYT09OTMpamMoZCxuLG4pLGpjKGQsNDUsNDUpO2Vsc2V7aWYoaz09MCYmdC5hPT05M3x8az09MjQpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLHV1dCkpKSk7aWYoaD10LmEsaz09MCl7aWYoaD09OTEpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLFA4dCkpKSk7aWYoaD09OTMpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLEY4dCkpKSk7aWYoaD09NDUpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLHV1dCkpKSl9ZWxzZSBrPT0xMCYmKGg9SDV0KHQpKTtpZihmaSh0KSxuPmgpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLGQwZSkpKSk7amMoZCxuLGgpfX19cz0hMX1pZih0LmM9PTEpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLFBIKSkpKTtyZXR1cm4gdjQoZCksU18oZCksdC5iPTAsZmkodCksZH1mdW5jdGlvbiBGeG4odCl7SXIodC5jLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbQWEsImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2RlY2ltYWwiXSkpLElyKHQuZCxZcixsdChjdChBZSwxKSxlZSwyLDYsW0FhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNpbnRlZ2VyIl0pKSxJcih0LmUsWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtBYSwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjYm9vbGVhbiJdKSksSXIodC5mLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbQWEsIkVCb29sZWFuIixjaSwiRUJvb2xlYW46T2JqZWN0Il0pKSxJcih0LmksWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtBYSwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjYnl0ZSJdKSksSXIodC5nLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbQWEsImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2hleEJpbmFyeSJdKSksSXIodC5qLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbQWEsIkVCeXRlIixjaSwiRUJ5dGU6T2JqZWN0Il0pKSxJcih0Lm4sWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtBYSwiRUNoYXIiLGNpLCJFQ2hhcjpPYmplY3QiXSkpLElyKHQudCxZcixsdChjdChBZSwxKSxlZSwyLDYsW0FhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNkb3VibGUiXSkpLElyKHQudSxZcixsdChjdChBZSwxKSxlZSwyLDYsW0FhLCJFRG91YmxlIixjaSwiRURvdWJsZTpPYmplY3QiXSkpLElyKHQuRixZcixsdChjdChBZSwxKSxlZSwyLDYsW0FhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNmbG9hdCJdKSksSXIodC5HLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbQWEsIkVGbG9hdCIsY2ksIkVGbG9hdDpPYmplY3QiXSkpLElyKHQuSSxZcixsdChjdChBZSwxKSxlZSwyLDYsW0FhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNpbnQiXSkpLElyKHQuSixZcixsdChjdChBZSwxKSxlZSwyLDYsW0FhLCJFSW50IixjaSwiRUludDpPYmplY3QiXSkpLElyKHQuTixZcixsdChjdChBZSwxKSxlZSwyLDYsW0FhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNsb25nIl0pKSxJcih0Lk8sWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtBYSwiRUxvbmciLGNpLCJFTG9uZzpPYmplY3QiXSkpLElyKHQuWixZcixsdChjdChBZSwxKSxlZSwyLDYsW0FhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzaG9ydCJdKSksSXIodC4kLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbQWEsIkVTaG9ydCIsY2ksIkVTaG9ydDpPYmplY3QiXSkpLElyKHQuXyxZcixsdChjdChBZSwxKSxlZSwyLDYsW0FhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciXSkpfWZ1bmN0aW9uIE54bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWUsUm4sem4saHI7aWYodC5jLmxlbmd0aD09MSlyZXR1cm4gQW4oMCx0LmMubGVuZ3RoKSx1KHQuY1swXSwxMzUpO2lmKHQuYy5sZW5ndGg8PTApcmV0dXJuIG5ldyBqJDtmb3Iodj1uZXcgUyh0KTt2LmE8di5jLmMubGVuZ3RoOyl7Zm9yKGg9dShKKHYpLDEzNSksTXQ9MCxHPXdpLEs9d2ksaj1TYSxIPVNhLGd0PWVpKGguYiwwKTtndC5iIT1ndC5kLmM7KXR0PXUodGkoZ3QpLDg2KSxNdCs9dShRKHR0LChndigpLFBHKSksMTkpLmEsRz1iLk1hdGgubWluKEcsdHQuZS5hKSxLPWIuTWF0aC5taW4oSyx0dC5lLmIpLGo9Yi5NYXRoLm1heChqLHR0LmUuYSt0dC5mLmEpLEg9Yi5NYXRoLm1heChILHR0LmUuYit0dC5mLmIpO0p0KGgsKGd2KCksUEcpLHBlKE10KSksSnQoaCwoZmMoKSwkUyksbmV3ICRlKEcsSykpLEp0KGgsek8sbmV3ICRlKGosSCkpfWZvcih3bigpLFpzKHQsbmV3IFVRKSxLdD1uZXcgaiQsTW8oS3QsKEFuKDAsdC5jLmxlbmd0aCksdSh0LmNbMF0sOTQpKSksTT0wLFJuPTAsaz1uZXcgUyh0KTtrLmE8ay5jLmMubGVuZ3RoOyloPXUoSihrKSwxMzUpLHVlPWlhKG5jKHUoUShoLChmYygpLHpPKSksOCkpLHUoUShoLCRTKSw4KSksTT1iLk1hdGgubWF4KE0sdWUuYSksUm4rPXVlLmEqdWUuYjtmb3IoTT1iLk1hdGgubWF4KE0sYi5NYXRoLnNxcnQoUm4pKlh0KHllKFEoS3QsKGd2KCksbXllKSkpKSksX2U9WHQoeWUoUShLdCxnX3QpKSksem49MCxocj0wLEM9MCxlPV9lLGQ9bmV3IFModCk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTM1KSx1ZT1pYShuYyh1KFEoaCwoZmMoKSx6TykpLDgpKSx1KFEoaCwkUyksOCkpLHpuK3VlLmE+TSYmKHpuPTAsaHIrPUMrX2UsQz0wKSxVMm4oS3QsaCx6bixociksZT1iLk1hdGgubWF4KGUsem4rdWUuYSksQz1iLk1hdGgubWF4KEMsdWUuYiksem4rPXVlLmErX2U7Zm9yKFJ0PW5ldyBfcixuPW5ldyBfcixRZT1uZXcgUyh0KTtRZS5hPFFlLmMuYy5sZW5ndGg7KWZvcihXZT11KEooUWUpLDEzNSkscj1qZShSZShRKFdlLCh1aSgpLFFPKSkpKSxTdD1XZS5xP1dlLnE6dTAsbz1TdC52YygpLktjKCk7by5PYigpOylzPXUoby5QYigpLDQyKSxUbChSdCxzLmNkKCkpP1Z0KHUocy5jZCgpLDE0Nikud2coKSkhPT1WdChzLmRkKCkpJiYociYmVGwobixzLmNkKCkpPyhHZCgpLCIiK3Uocy5jZCgpLDE0NikudGcoKSk6KGtpKFJ0LHUocy5jZCgpLDE0Nikscy5kZCgpKSxKdChLdCx1KHMuY2QoKSwxNDYpLHMuZGQoKSksciYma2kobix1KHMuY2QoKSwxNDYpLHMuZGQoKSkpKTooa2koUnQsdShzLmNkKCksMTQ2KSxzLmRkKCkpLEp0KEt0LHUocy5jZCgpLDE0Nikscy5kZCgpKSk7cmV0dXJuIEt0fWZ1bmN0aW9uIHJmZSgpe3JmZT1aLHFhdCgpLFFyPW5ldyBVdyxsbihRciwodmUoKSxNZiksVTEpLGxuKFFyLFZoLFUxKSxsbihRcixlbCxVMSksbG4oUXIsRGYsVTEpLGxuKFFyLEx1LFUxKSxsbihRcixubCxVMSksbG4oUXIsRGYsTWYpLGxuKFFyLFUxLG1oKSxsbihRcixNZixtaCksbG4oUXIsVmgsbWgpLGxuKFFyLGVsLG1oKSxsbihRcixBdSxtaCksbG4oUXIsRGYsbWgpLGxuKFFyLEx1LG1oKSxsbihRcixubCxtaCksbG4oUXIsbHUsbWgpLGxuKFFyLFUxLEtsKSxsbihRcixNZixLbCksbG4oUXIsbWgsS2wpLGxuKFFyLFZoLEtsKSxsbihRcixlbCxLbCksbG4oUXIsQXUsS2wpLGxuKFFyLERmLEtsKSxsbihRcixsdSxLbCksbG4oUXIsWGwsS2wpLGxuKFFyLEx1LEtsKSxsbihRcixWdSxLbCksbG4oUXIsbmwsS2wpLGxuKFFyLE1mLFZoKSxsbihRcixlbCxWaCksbG4oUXIsRGYsVmgpLGxuKFFyLG5sLFZoKSxsbihRcixNZixlbCksbG4oUXIsVmgsZWwpLGxuKFFyLERmLGVsKSxsbihRcixlbCxlbCksbG4oUXIsTHUsZWwpLGxuKFFyLFUxLHloKSxsbihRcixNZix5aCksbG4oUXIsbWgseWgpLGxuKFFyLEtsLHloKSxsbihRcixWaCx5aCksbG4oUXIsZWwseWgpLGxuKFFyLEF1LHloKSxsbihRcixEZix5aCksbG4oUXIsWGwseWgpLGxuKFFyLGx1LHloKSxsbihRcixubCx5aCksbG4oUXIsTHUseWgpLGxuKFFyLFVjLHloKSxsbihRcixVMSxYbCksbG4oUXIsTWYsWGwpLGxuKFFyLG1oLFhsKSxsbihRcixWaCxYbCksbG4oUXIsZWwsWGwpLGxuKFFyLEF1LFhsKSxsbihRcixEZixYbCksbG4oUXIsbHUsWGwpLGxuKFFyLG5sLFhsKSxsbihRcixWdSxYbCksbG4oUXIsVWMsWGwpLGxuKFFyLE1mLGx1KSxsbihRcixWaCxsdSksbG4oUXIsZWwsbHUpLGxuKFFyLERmLGx1KSxsbihRcixYbCxsdSksbG4oUXIsbmwsbHUpLGxuKFFyLEx1LGx1KSxsbihRcixVMSxTdSksbG4oUXIsTWYsU3UpLGxuKFFyLG1oLFN1KSxsbihRcixWaCxTdSksbG4oUXIsZWwsU3UpLGxuKFFyLEF1LFN1KSxsbihRcixEZixTdSksbG4oUXIsbHUsU3UpLGxuKFFyLG5sLFN1KSxsbihRcixNZixMdSksbG4oUXIsbWgsTHUpLGxuKFFyLEtsLEx1KSxsbihRcixlbCxMdSksbG4oUXIsVTEsVnUpLGxuKFFyLE1mLFZ1KSxsbihRcixLbCxWdSksbG4oUXIsVmgsVnUpLGxuKFFyLGVsLFZ1KSxsbihRcixBdSxWdSksbG4oUXIsRGYsVnUpLGxuKFFyLERmLFVjKSxsbihRcixlbCxVYyksbG4oUXIsbHUsVTEpLGxuKFFyLGx1LFZoKSxsbihRcixsdSxtaCksbG4oUXIsQXUsVTEpLGxuKFFyLEF1LE1mKSxsbihRcixBdSxLbCl9ZnVuY3Rpb24ganEodCxlKXtzd2l0Y2godC5lKXtjYXNlIDA6Y2FzZSAyOmNhc2UgNDpjYXNlIDY6Y2FzZSA0MjpjYXNlIDQ0OmNhc2UgNDY6Y2FzZSA0ODpjYXNlIDg6Y2FzZSAxMDpjYXNlIDEyOmNhc2UgMTQ6Y2FzZSAxNjpjYXNlIDE4OmNhc2UgMjA6Y2FzZSAyMjpjYXNlIDI0OmNhc2UgMjY6Y2FzZSAyODpjYXNlIDMwOmNhc2UgMzI6Y2FzZSAzNDpjYXNlIDM2OmNhc2UgMzg6cmV0dXJuIG5ldyBpUXQodC5iLHQuYSxlLHQuYyk7Y2FzZSAxOnJldHVybiBuZXcga2oodC5hLGUsR2koZS5UZygpLHQuYykpO2Nhc2UgNDM6cmV0dXJuIG5ldyB0V3QodC5hLGUsR2koZS5UZygpLHQuYykpO2Nhc2UgMzpyZXR1cm4gbmV3IEFzKHQuYSxlLEdpKGUuVGcoKSx0LmMpKTtjYXNlIDQ1OnJldHVybiBuZXcgRnUodC5hLGUsR2koZS5UZygpLHQuYykpO2Nhc2UgNDE6cmV0dXJuIG5ldyBfbCh1KERoKHQuYyksMjYpLHQuYSxlLEdpKGUuVGcoKSx0LmMpKTtjYXNlIDUwOnJldHVybiBuZXcgcm5lKHUoRGgodC5jKSwyNiksdC5hLGUsR2koZS5UZygpLHQuYykpO2Nhc2UgNTpyZXR1cm4gbmV3IGh3dCh0LmEsZSxHaShlLlRnKCksdC5jKSx0LmQubik7Y2FzZSA0NzpyZXR1cm4gbmV3IGhZdCh0LmEsZSxHaShlLlRnKCksdC5jKSx0LmQubik7Y2FzZSA3OnJldHVybiBuZXcgZmUodC5hLGUsR2koZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgNDk6cmV0dXJuIG5ldyBSeCh0LmEsZSxHaShlLlRnKCksdC5jKSx0LmQubik7Y2FzZSA5OnJldHVybiBuZXcgbld0KHQuYSxlLEdpKGUuVGcoKSx0LmMpKTtjYXNlIDExOnJldHVybiBuZXcgZVd0KHQuYSxlLEdpKGUuVGcoKSx0LmMpKTtjYXNlIDEzOnJldHVybiBuZXcgRTJ0KHQuYSxlLEdpKGUuVGcoKSx0LmMpKTtjYXNlIDE1OnJldHVybiBuZXcgUmoodC5hLGUsR2koZS5UZygpLHQuYykpO2Nhc2UgMTc6cmV0dXJuIG5ldyByV3QodC5hLGUsR2koZS5UZygpLHQuYykpO2Nhc2UgMTk6cmV0dXJuIG5ldyBZMyh0LmEsZSxHaShlLlRnKCksdC5jKSk7Y2FzZSAyMTpyZXR1cm4gbmV3IGsydCh0LmEsZSxHaShlLlRnKCksdC5jKSk7Y2FzZSAyMzpyZXR1cm4gbmV3IFpNKHQuYSxlLEdpKGUuVGcoKSx0LmMpKTtjYXNlIDI1OnJldHVybiBuZXcgZ1l0KHQuYSxlLEdpKGUuVGcoKSx0LmMpLHQuZC5uKTtjYXNlIDI3OnJldHVybiBuZXcgQ24odC5hLGUsR2koZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMjk6cmV0dXJuIG5ldyBkWXQodC5hLGUsR2koZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMzE6cmV0dXJuIG5ldyBmWXQodC5hLGUsR2koZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMzM6cmV0dXJuIG5ldyBkd3QodC5hLGUsR2koZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMzU6cmV0dXJuIG5ldyBmd3QodC5hLGUsR2koZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMzc6cmV0dXJuIG5ldyBFbnQodC5hLGUsR2koZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMzk6cmV0dXJuIG5ldyByJCh0LmEsZSxHaShlLlRnKCksdC5jKSx0LmQubik7Y2FzZSA0MDpyZXR1cm4gbmV3IHNzKGUsR2koZS5UZygpLHQuYykpO2RlZmF1bHQ6dGhyb3cgaXQobmV3IFZvKCJVbmtub3duIGZlYXR1cmUgc3R5bGU6ICIrdC5lKSl9fWZ1bmN0aW9uIEJ4bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWU7c3dpdGNoKHZyKG4sIkJyYW5kZXMgJiBLb2VwZiBub2RlIHBsYWNlbWVudCIsMSksdC5hPWUsdC5jPU15bihlKSxyPXUoUShlLChUZSgpLGNodCkpLDI3NCksSD1qZShSZShRKGUsU1MpKSksdC5kPXI9PShvSSgpLFlWKSYmIUh8fHI9PVJsdCxwNG4odCxlKSxLdD1udWxsLHVlPW51bGwsZ3Q9bnVsbCxNdD1udWxsLHR0PShqbCg0LGt5KSxuZXcgWGMoNCkpLHUoUShlLGNodCksMjc0KS5nKXtjYXNlIDM6Z3Q9bmV3IEU0KGUsdC5jLmQsKEMxKCksSDIpLChiZCgpLGVwKSksdHQuY1t0dC5jLmxlbmd0aF09Z3Q7YnJlYWs7Y2FzZSAxOk10PW5ldyBFNChlLHQuYy5kLChDMSgpLEgxKSwoYmQoKSxlcCkpLHR0LmNbdHQuYy5sZW5ndGhdPU10O2JyZWFrO2Nhc2UgNDpLdD1uZXcgRTQoZSx0LmMuZCwoQzEoKSxIMiksKGJkKCksenYpKSx0dC5jW3R0LmMubGVuZ3RoXT1LdDticmVhaztjYXNlIDI6dWU9bmV3IEU0KGUsdC5jLmQsKEMxKCksSDEpLChiZCgpLHp2KSksdHQuY1t0dC5jLmxlbmd0aF09dWU7YnJlYWs7ZGVmYXVsdDpndD1uZXcgRTQoZSx0LmMuZCwoQzEoKSxIMiksKGJkKCksZXApKSxNdD1uZXcgRTQoZSx0LmMuZCxIMSxlcCksS3Q9bmV3IEU0KGUsdC5jLmQsSDIsenYpLHVlPW5ldyBFNChlLHQuYy5kLEgxLHp2KSx0dC5jW3R0LmMubGVuZ3RoXT1LdCx0dC5jW3R0LmMubGVuZ3RoXT11ZSx0dC5jW3R0LmMubGVuZ3RoXT1ndCx0dC5jW3R0LmMubGVuZ3RoXT1NdH1mb3Iocz1uZXcgbUd0KGUsdC5jKSxkPW5ldyBTKHR0KTtkLmE8ZC5jLmMubGVuZ3RoOylvPXUoSihkKSwxODApLEV4bihzLG8sdC5iKSxhM24obyk7Zm9yKGo9bmV3IFpzZShlLHQuYyksdj1uZXcgUyh0dCk7di5hPHYuYy5jLmxlbmd0aDspbz11KEoodiksMTgwKSxtNW4oaixvKTtpZihuLm4pZm9yKGs9bmV3IFModHQpO2suYTxrLmMuYy5sZW5ndGg7KW89dShKKGspLDE4MCksSmIobixvKyIgc2l6ZSBpcyAiK2lhdChvKSk7aWYoTT1udWxsLHQuZCYmKEM9SzVuKHQsdHQsdC5jLmQpLFJsZShlLEMsbikmJihNPUMpKSwhTSlmb3Ioaz1uZXcgUyh0dCk7ay5hPGsuYy5jLmxlbmd0aDspbz11KEooayksMTgwKSxSbGUoZSxvLG4pJiYoIU18fGlhdChNKT5pYXQobykpJiYoTT1vKTtmb3IoIU0mJihNPShBbigwLHR0LmMubGVuZ3RoKSx1KHR0LmNbMF0sMTgwKSkpLEs9bmV3IFMoZS5iKTtLLmE8Sy5jLmMubGVuZ3RoOylmb3IoRz11KEooSyksMjkpLFJ0PW5ldyBTKEcuYSk7UnQuYTxSdC5jLmMubGVuZ3RoOylTdD11KEooUnQpLDEwKSxTdC5uLmI9WHQoTS5wW1N0LnBdKStYdChNLmRbU3QucF0pO2ZvcihuLm4mJihKYihuLCJDaG9zZW4gbm9kZSBwbGFjZW1lbnQ6ICIrTSksSmIobiwiQmxvY2tzOiAiK2ljZShNKSksSmIobiwiQ2xhc3NlczogIitRYm4oTSxuKSksSmIobiwiTWFya2VkIGVkZ2VzOiAiK3QuYikpLGg9bmV3IFModHQpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDE4MCksby5nPW51bGwsby5iPW51bGwsby5hPW51bGwsby5kPW51bGwsby5qPW51bGwsby5pPW51bGwsby5wPW51bGw7QWNuKHQuYyksdC5iLmEuJGIoKSxvcihuKX1mdW5jdGlvbiBSeG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuLHpuO2ZvcihoPW5ldyBaaSxLdD11KFEobiwoVGUoKSxXbCkpLDEwMyksRz0wLFVhKGgsKCFlLmEmJihlLmE9bmV3IGZlKHJzLGUsMTAsMTEpKSxlLmEpKTtoLmIhPTA7KWs9dShoLmI9PTA/bnVsbDooWm4oaC5iIT0wKSxsaChoLGguYS5hKSksMzMpLChWdChxZShlLHdiKSkhPT1WdCgoVjAoKSx2YikpfHxWdChxZShlLHp5KSk9PT1WdCgoeDIoKSx2UykpfHxWdChxZShlLHp5KSk9PT1WdCgoeDIoKSx3UykpfHxqZShSZShxZShlLCR5KSkpfHxWdChxZShlLHE2KSkhPT1WdCgoaXYoKSxxNCkpKSYmIWplKFJlKHFlKGssSmx0KSkpJiZ3byhrLChhZSgpLFRjKSxwZShHKyspKSx0dD0hamUoUmUocWUoayx6MikpKSx0dCYmKE09KCFrLmEmJihrLmE9bmV3IGZlKHJzLGssMTAsMTEpKSxrLmEpLmkhPTAsSD16MG4oayksaj1WdChxZShrLHF5KSk9PT1WdCgoRzAoKSxzcCkpLHpuPSFvMihrLCh1aSgpLFlTKSl8fGhuKEJyKHFlKGssWVMpKSxHbiksU3Q9bnVsbCx6biYmaiYmKE18fEgpJiYoU3Q9Q2xlKGspLEp0KFN0LFdsLEt0KSxVcyhTdCxJTykmJm5IdChuZXcgdzN0KFh0KHllKFEoU3QsSU8pKSkpLFN0KSx1KHFlKGssJDIpLDE3NCkuZ2MoKSE9MCYmKEM9U3QsbHMobmV3IFRuKG51bGwsKCFrLmMmJihrLmM9bmV3IGZlKGdsLGssOSw5KSksbmV3IF9uKGsuYywxNikpKSxuZXcgU3IoQykpLHd1ZShrLFN0KSkpLHVlPW4sX2U9dSh0cih0LmEsZXMoaykpLDEwKSxfZSYmKHVlPV9lLmUpLE10PVRoZSh0LGssdWUpLFN0JiYoTXQuZT1TdCxTdC5lPU10LFVhKGgsKCFrLmEmJihrLmE9bmV3IGZlKHJzLGssMTAsMTEpKSxrLmEpKSkpO2ZvcihHPTAsZnMoaCxlLGguYy5iLGguYyk7aC5iIT0wOyl7Zm9yKG89dShoLmI9PTA/bnVsbDooWm4oaC5iIT0wKSxsaChoLGguYS5hKSksMzMpLHY9bmV3IG5yKCghby5iJiYoby5iPW5ldyBmZShZcyxvLDEyLDMpKSxvLmIpKTt2LmUhPXYuaS5nYygpOylkPXUoZHIodiksNzkpLEh1ZShkKSwoVnQocWUoZSx3YikpIT09VnQoKFYwKCksdmIpKXx8VnQocWUoZSx6eSkpPT09VnQoKHgyKCksdlMpKXx8VnQocWUoZSx6eSkpPT09VnQoKHgyKCksd1MpKXx8amUoUmUocWUoZSwkeSkpKXx8VnQocWUoZSxxNikpIT09VnQoKGl2KCkscTQpKSkmJndvKGQsKGFlKCksVGMpLHBlKEcrKykpLFFlPURvKHUoQXQoKCFkLmImJihkLmI9bmV3IENuKGJyLGQsNCw3KSksZC5iKSwwKSw4MikpLFJuPURvKHUoQXQoKCFkLmMmJihkLmM9bmV3IENuKGJyLGQsNSw4KSksZC5jKSwwKSw4MikpLCEoamUoUmUocWUoZCx6MikpKXx8amUoUmUocWUoUWUsejIpKSl8fGplKFJlKHFlKFJuLHoyKSkpKSYmKEs9ZnYoZCkmJmplKFJlKHFlKFFlLEh5KSkpJiZqZShSZShxZShkLGoyKSkpLFJ0PW8sS3x8ZXkoUm4sUWUpP1J0PVFlOmV5KFFlLFJuKSYmKFJ0PVJuKSx1ZT1uLF9lPXUodHIodC5hLFJ0KSwxMCksX2UmJih1ZT1fZS5lKSxndD1QeHQodCxkLFJ0LHVlKSxKdChndCwoYWUoKSxuQ3QpLGN2bih0LGQsZSxuKSkpO2lmKGo9VnQocWUobyxxeSkpPT09VnQoKEcwKCksc3ApKSxqKWZvcihzPW5ldyBucigoIW8uYSYmKG8uYT1uZXcgZmUocnMsbywxMCwxMSkpLG8uYSkpO3MuZSE9cy5pLmdjKCk7KXI9dShkcihzKSwzMyksem49IW8yKHIsKHVpKCksWVMpKXx8aG4oQnIocWUocixZUykpLEduKSxXZT1WdChxZShyLHF5KSk9PT1WdChzcCksem4mJldlJiZmcyhoLHIsaC5jLmIsaC5jKX19ZnVuY3Rpb24ganhuKHQsZSxuLHIscyxvKXt2YXIgaCxkLHYsayxDLE0saixILEcsSyx0dCxndDtzd2l0Y2goZSl7Y2FzZSA3MTpkPXIucS5nZXRGdWxsWWVhcigpLWFiPj0tMTkwMD8xOjAsbj49ND9Hcih0LGx0KGN0KEFlLDEpLGVlLDIsNixbbWZlLHlmZV0pW2RdKTpHcih0LGx0KGN0KEFlLDEpLGVlLDIsNixbIkJDIiwiQUQiXSlbZF0pO2JyZWFrO2Nhc2UgMTIxOk1mbih0LG4scik7YnJlYWs7Y2FzZSA3NzpQbW4odCxuLHIpO2JyZWFrO2Nhc2UgMTA3OnY9cy5xLmdldEhvdXJzKCksdj09MD9KZCh0LDI0LG4pOkpkKHQsdixuKTticmVhaztjYXNlIDgzOmV3bih0LG4scyk7YnJlYWs7Y2FzZSA2OTpDPXIucS5nZXREYXkoKSxuPT01P0dyKHQsbHQoY3QoQWUsMSksZWUsMiw2LFsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdKVtDXSk6bj09ND9Hcih0LGx0KGN0KEFlLDEpLGVlLDIsNixbY290LHVvdCxsb3QsaG90LGZvdCxkb3QsZ290XSlbQ10pOkdyKHQsbHQoY3QoQWUsMSksZWUsMiw2LFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0pW0NdKTticmVhaztjYXNlIDk3OnMucS5nZXRIb3VycygpPj0xMiYmcy5xLmdldEhvdXJzKCk8MjQ/R3IodCxsdChjdChBZSwxKSxlZSwyLDYsWyJBTSIsIlBNIl0pWzFdKTpHcih0LGx0KGN0KEFlLDEpLGVlLDIsNixbIkFNIiwiUE0iXSlbMF0pO2JyZWFrO2Nhc2UgMTA0Ok09cy5xLmdldEhvdXJzKCklMTIsTT09MD9KZCh0LDEyLG4pOkpkKHQsTSxuKTticmVhaztjYXNlIDc1Omo9cy5xLmdldEhvdXJzKCklMTIsSmQodCxqLG4pO2JyZWFrO2Nhc2UgNzI6SD1zLnEuZ2V0SG91cnMoKSxKZCh0LEgsbik7YnJlYWs7Y2FzZSA5OTpHPXIucS5nZXREYXkoKSxuPT01P0dyKHQsbHQoY3QoQWUsMSksZWUsMiw2LFsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdKVtHXSk6bj09ND9Hcih0LGx0KGN0KEFlLDEpLGVlLDIsNixbY290LHVvdCxsb3QsaG90LGZvdCxkb3QsZ290XSlbR10pOm49PTM/R3IodCxsdChjdChBZSwxKSxlZSwyLDYsWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSlbR10pOkpkKHQsRywxKTticmVhaztjYXNlIDc2Oks9ci5xLmdldE1vbnRoKCksbj09NT9Hcih0LGx0KGN0KEFlLDEpLGVlLDIsNixbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdKVtLXSk6bj09ND9Hcih0LGx0KGN0KEFlLDEpLGVlLDIsNixbUWF0LFphdCxKYXQsdG90LHc2LGVvdCxub3Qscm90LGlvdCxzb3QsYW90LG9vdF0pW0tdKTpuPT0zP0dyKHQsbHQoY3QoQWUsMSksZWUsMiw2LFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIix3NiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0pW0tdKTpKZCh0LEsrMSxuKTticmVhaztjYXNlIDgxOnR0PXIucS5nZXRNb250aCgpLzN8MCxuPDQ/R3IodCxsdChjdChBZSwxKSxlZSwyLDYsWyJRMSIsIlEyIiwiUTMiLCJRNCJdKVt0dF0pOkdyKHQsbHQoY3QoQWUsMSksZWUsMiw2LFsiMXN0IHF1YXJ0ZXIiLCIybmQgcXVhcnRlciIsIjNyZCBxdWFydGVyIiwiNHRoIHF1YXJ0ZXIiXSlbdHRdKTticmVhaztjYXNlIDEwMDpndD1yLnEuZ2V0RGF0ZSgpLEpkKHQsZ3Qsbik7YnJlYWs7Y2FzZSAxMDk6az1zLnEuZ2V0TWludXRlcygpLEpkKHQsayxuKTticmVhaztjYXNlIDExNTpoPXMucS5nZXRTZWNvbmRzKCksSmQodCxoLG4pO2JyZWFrO2Nhc2UgMTIyOm48ND9Hcih0LG8uY1swXSk6R3IodCxvLmNbMV0pO2JyZWFrO2Nhc2UgMTE4OkdyKHQsby5iKTticmVhaztjYXNlIDkwOm48Mz9Hcih0LFZwbihvKSk6bj09Mz9Hcih0LFdwbihvKSk6R3IodCxZcG4oby5hKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBQeHQodCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuLHpuLGhyLHBpO2lmKEh1ZShlKSx2PXUoQXQoKCFlLmImJihlLmI9bmV3IENuKGJyLGUsNCw3KSksZS5iKSwwKSw4MiksQz11KEF0KCghZS5jJiYoZS5jPW5ldyBDbihicixlLDUsOCkpLGUuYyksMCksODIpLGQ9RG8odiksaz1EbyhDKSxoPSghZS5hJiYoZS5hPW5ldyBmZShKaSxlLDYsNikpLGUuYSkuaT09MD9udWxsOnUoQXQoKCFlLmEmJihlLmE9bmV3IGZlKEppLGUsNiw2KSksZS5hKSwwKSwyMDIpLF9lPXUodHIodC5hLGQpLDEwKSx6bj11KHRyKHQuYSxrKSwxMCksV2U9bnVsbCxocj1udWxsLF90KHYsMTg2KSYmKHVlPXUodHIodC5hLHYpLDI5OSksX3QodWUsMTEpP1dlPXUodWUsMTEpOl90KHVlLDEwKSYmKF9lPXUodWUsMTApLFdlPXUoTmUoX2UuaiwwKSwxMSkpKSxfdChDLDE4NikmJihSbj11KHRyKHQuYSxDKSwyOTkpLF90KFJuLDExKT9ocj11KFJuLDExKTpfdChSbiwxMCkmJih6bj11KFJuLDEwKSxocj11KE5lKHpuLmosMCksMTEpKSksIV9lfHwhem4pdGhyb3cgaXQobmV3IGpDKCJUaGUgc291cmNlIG9yIHRoZSB0YXJnZXQgb2YgZWRnZSAiK2UrIiBjb3VsZCBub3QgYmUgZm91bmQuIFRoaXMgdXN1YWxseSBoYXBwZW5zIHdoZW4gYW4gZWRnZSBjb25uZWN0cyBhIG5vZGUgbGFpZCBvdXQgYnkgRUxLIExheWVyZWQgdG8gYSBub2RlIGluIGFub3RoZXIgbGV2ZWwgb2YgaGllcmFyY2h5IGxhaWQgb3V0IGJ5IGVpdGhlciBhbm90aGVyIGluc3RhbmNlIG9mIEVMSyBMYXllcmVkIG9yIGFub3RoZXIgbGF5b3V0IGFsZ29yaXRobSBhbGx0b2dldGhlci4gVGhlIGZvcm1lciBjYW4gYmUgc29sdmVkIGJ5IHNldHRpbmcgdGhlIGhpZXJhcmNoeUhhbmRsaW5nIG9wdGlvbiB0byBJTkNMVURFX0NISUxEUkVOLiIpKTtmb3IoSz1uZXcgVncsTW8oSyxlKSxKdChLLChhZSgpLF9pKSxlKSxKdChLLChUZSgpLFNvKSxudWxsKSxIPXUoUShyLFZjKSwyMSksX2U9PXpuJiZILkZjKChvbygpLHhTKSksV2V8fChLdD0oc28oKSxudSksUWU9bnVsbCxoJiZHMyh1KFEoX2UsY3MpLDk4KSkmJihRZT1uZXcgJGUoaC5qLGguayksSlp0KFFlLGNEKGUpKSxMSnQoUWUsbiksZXkoayxkKSYmKEt0PXRsLExpKFFlLF9lLm4pKSksV2U9emxlKF9lLFFlLEt0LHIpKSxocnx8KEt0PShzbygpLHRsKSxwaT1udWxsLGgmJkczKHUoUSh6bixjcyksOTgpKSYmKHBpPW5ldyAkZShoLmIsaC5jKSxKWnQocGksY0QoZSkpLExKdChwaSxuKSksaHI9emxlKHpuLHBpLEt0LE5hKHpuKSkpLE9hKEssV2UpLG9hKEssaHIpLChXZS5lLmMubGVuZ3RoPjF8fFdlLmcuYy5sZW5ndGg+MXx8aHIuZS5jLmxlbmd0aD4xfHxoci5nLmMubGVuZ3RoPjEpJiZILkZjKChvbygpLHlTKSksaj1uZXcgbnIoKCFlLm4mJihlLm49bmV3IGZlKHFvLGUsMSw3KSksZS5uKSk7ai5lIT1qLmkuZ2MoKTspaWYoTT11KGRyKGopLDEzNyksIWplKFJlKHFlKE0sejIpKSkmJk0uYSlzd2l0Y2godHQ9Vml0KE0pLGxlKEsuYix0dCksdShRKHR0LE9kKSwyNzIpLmcpe2Nhc2UgMTpjYXNlIDI6SC5GYygob28oKSxtNykpO2JyZWFrO2Nhc2UgMDpILkZjKChvbygpLHY3KSksSnQodHQsT2QsKE0xKCksUDcpKX1pZihvPXUoUShyLF9TKSwzMTQpLGd0PXUoUShyLGdHKSwzMTUpLHM9bz09KG42KCksRU8pfHxndD09KHVfKCkseGh0KSxoJiYoIWguYSYmKGguYT1uZXcgQXMoR2gsaCw1KSksaC5hKS5pIT0wJiZzKXtmb3IoTXQ9bEkoaCksRz1uZXcgUHUsUnQ9ZWkoTXQsMCk7UnQuYiE9UnQuZC5jOylTdD11KHRpKFJ0KSw4KSxyaShHLG5ldyB4byhTdCkpO0p0KEssYUN0LEcpfXJldHVybiBLfWZ1bmN0aW9uICR4bih0KXt0LmdifHwodC5nYj0hMCx0LmI9aWModCwwKSxucyh0LmIsMTgpLEZpKHQuYiwxOSksdC5hPWljKHQsMSksbnModC5hLDEpLEZpKHQuYSwyKSxGaSh0LmEsMyksRmkodC5hLDQpLEZpKHQuYSw1KSx0Lm89aWModCwyKSxucyh0Lm8sOCksbnModC5vLDkpLEZpKHQubywxMCksRmkodC5vLDExKSxGaSh0Lm8sMTIpLEZpKHQubywxMyksRmkodC5vLDE0KSxGaSh0Lm8sMTUpLEZpKHQubywxNiksRmkodC5vLDE3KSxGaSh0Lm8sMTgpLEZpKHQubywxOSksRmkodC5vLDIwKSxGaSh0Lm8sMjEpLEZpKHQubywyMiksRmkodC5vLDIzKSxDbyh0Lm8pLENvKHQubyksQ28odC5vKSxDbyh0Lm8pLENvKHQubyksQ28odC5vKSxDbyh0Lm8pLENvKHQubyksQ28odC5vKSxDbyh0Lm8pLHQucD1pYyh0LDMpLG5zKHQucCwyKSxucyh0LnAsMyksbnModC5wLDQpLG5zKHQucCw1KSxGaSh0LnAsNiksRmkodC5wLDcpLENvKHQucCksQ28odC5wKSx0LnE9aWModCw0KSxucyh0LnEsOCksdC52PWljKHQsNSksRmkodC52LDkpLENvKHQudiksQ28odC52KSxDbyh0LnYpLHQudz1pYyh0LDYpLG5zKHQudywyKSxucyh0LncsMyksbnModC53LDQpLEZpKHQudyw1KSx0LkI9aWModCw3KSxGaSh0LkIsMSksQ28odC5CKSxDbyh0LkIpLENvKHQuQiksdC5RPWljKHQsOCksRmkodC5RLDApLENvKHQuUSksdC5SPWljKHQsOSksbnModC5SLDEpLHQuUz1pYyh0LDEwKSxDbyh0LlMpLENvKHQuUyksQ28odC5TKSxDbyh0LlMpLENvKHQuUyksQ28odC5TKSxDbyh0LlMpLENvKHQuUyksQ28odC5TKSxDbyh0LlMpLENvKHQuUyksQ28odC5TKSxDbyh0LlMpLENvKHQuUyksQ28odC5TKSx0LlQ9aWModCwxMSksRmkodC5ULDEwKSxGaSh0LlQsMTEpLEZpKHQuVCwxMiksRmkodC5ULDEzKSxGaSh0LlQsMTQpLENvKHQuVCksQ28odC5UKSx0LlU9aWModCwxMiksbnModC5VLDIpLG5zKHQuVSwzKSxGaSh0LlUsNCksRmkodC5VLDUpLEZpKHQuVSw2KSxGaSh0LlUsNyksQ28odC5VKSx0LlY9aWModCwxMyksRmkodC5WLDEwKSx0Llc9aWModCwxNCksbnModC5XLDE4KSxucyh0LlcsMTkpLG5zKHQuVywyMCksRmkodC5XLDIxKSxGaSh0LlcsMjIpLEZpKHQuVywyMyksdC5iYj1pYyh0LDE1KSxucyh0LmJiLDEwKSxucyh0LmJiLDExKSxucyh0LmJiLDEyKSxucyh0LmJiLDEzKSxucyh0LmJiLDE0KSxucyh0LmJiLDE1KSxucyh0LmJiLDE2KSxGaSh0LmJiLDE3KSxDbyh0LmJiKSxDbyh0LmJiKSx0LmViPWljKHQsMTYpLG5zKHQuZWIsMiksbnModC5lYiwzKSxucyh0LmViLDQpLG5zKHQuZWIsNSksbnModC5lYiw2KSxucyh0LmViLDcpLEZpKHQuZWIsOCksRmkodC5lYiw5KSx0LmFiPWljKHQsMTcpLG5zKHQuYWIsMCksbnModC5hYiwxKSx0Lkg9aWModCwxOCksRmkodC5ILDApLEZpKHQuSCwxKSxGaSh0LkgsMiksRmkodC5ILDMpLEZpKHQuSCw0KSxGaSh0LkgsNSksQ28odC5IKSx0LmRiPWljKHQsMTkpLEZpKHQuZGIsMiksdC5jPW9pKHQsMjApLHQuZD1vaSh0LDIxKSx0LmU9b2kodCwyMiksdC5mPW9pKHQsMjMpLHQuaT1vaSh0LDI0KSx0Lmc9b2kodCwyNSksdC5qPW9pKHQsMjYpLHQuaz1vaSh0LDI3KSx0Lm49b2kodCwyOCksdC5yPW9pKHQsMjkpLHQucz1vaSh0LDMwKSx0LnQ9b2kodCwzMSksdC51PW9pKHQsMzIpLHQuZmI9b2kodCwzMyksdC5BPW9pKHQsMzQpLHQuQz1vaSh0LDM1KSx0LkQ9b2kodCwzNiksdC5GPW9pKHQsMzcpLHQuRz1vaSh0LDM4KSx0Lkk9b2kodCwzOSksdC5KPW9pKHQsNDApLHQuTD1vaSh0LDQxKSx0Lk09b2kodCw0MiksdC5OPW9pKHQsNDMpLHQuTz1vaSh0LDQ0KSx0LlA9b2kodCw0NSksdC5YPW9pKHQsNDYpLHQuWT1vaSh0LDQ3KSx0Llo9b2kodCw0OCksdC4kPW9pKHQsNDkpLHQuXz1vaSh0LDUwKSx0LmNiPW9pKHQsNTEpLHQuSz1vaSh0LDUyKSl9ZnVuY3Rpb24gdWkoKXt1aT1aO3ZhciB0LGU7WVM9bmV3IFZpKHVkZSksTzc9bmV3IFZpKGxkZSksTlN0PSh0MCgpLHVmdCksYTRlPW5ldyBtbih4a3QsTlN0KSxXNj1uZXcgbW4oRTYsbnVsbCksbzRlPW5ldyBWaShwOHQpLFJTdD0oaHkoKSxqaShmZnQsbHQoY3QoZGZ0LDEpLG9lLDI5MSwwLFtoZnRdKSkpLFlHPW5ldyBtbihtSCxSU3QpLFFPPW5ldyBtbihKSSwoTm4oKSwhMSkpLGpTdD0oYW8oKSxoMCkscXY9bmV3IG1uKFRrdCxqU3QpLHFTdD0oVzAoKSxDZnQpLHpTdD1uZXcgbW4oUUkscVN0KSxHU3Q9bmV3IG1uKENILCExKSxVU3Q9KEcwKCksdFUpLHM1PW5ldyBtbih2SCxVU3QpLG5BdD1uZXcgT3coMTIpLFUyPW5ldyBtbih4dixuQXQpLEtHPW5ldyBtbihHSSwhMSksV1N0PW5ldyBtbihfY3QsITEpLHRQPW5ldyBtbihqXywhMSksb0F0PSh1YSgpLFRiKSxLUz1uZXcgbW4oR290LG9BdCksWTY9bmV3IFZpKHlIKSxaRz1uZXcgVmkoVkkpLEVmdD1uZXcgVmkodEgpLFRmdD1uZXcgVmkoUl8pLFlTdD1uZXcgUHUsYTU9bmV3IG1uKE9rdCxZU3QpLHU0ZT1uZXcgbW4oTmt0LCExKSxsNGU9bmV3IG1uKEJrdCwhMSksS1N0PW5ldyBPQyxKTz1uZXcgbW4oamt0LEtTdCksUUc9bmV3IG1uKG1rdCwhMSksZzRlPW5ldyBtbihoZGUsMSksbmV3IG1uKGZkZSwhMCkscGUoMCksbmV3IG1uKGRkZSxwZSgxMDApKSxuZXcgbW4oZ2RlLCExKSxwZSgwKSxuZXcgbW4ocGRlLHBlKDRlMykpLHBlKDApLG5ldyBtbihiZGUscGUoNDAwKSksbmV3IG1uKHdkZSwhMSksbmV3IG1uKHZkZSwhMSksbmV3IG1uKG1kZSwhMCksbmV3IG1uKHlkZSwhMSksQlN0PShqeigpLExmdCksYzRlPW5ldyBtbihnOHQsQlN0KSxwNGU9bmV3IG1uKG9rdCwxMCksYjRlPW5ldyBtbihja3QsMTApLGhBdD1uZXcgbW4oam90LDIwKSx3NGU9bmV3IG1uKHVrdCwxMCksZkF0PW5ldyBtbihWb3QsMiksdjRlPW5ldyBtbihsa3QsMTApLGRBdD1uZXcgbW4oaGt0LDApLEpHPW5ldyBtbihna3QsNSksZ0F0PW5ldyBtbihma3QsMSkscEF0PW5ldyBtbihka3QsMSksVzI9bmV3IG1uKEN5LDIwKSxtNGU9bmV3IG1uKHBrdCwxMCksdkF0PW5ldyBtbihia3QsMTApLEs2PW5ldyBWaSh3a3QpLHdBdD1uZXcgQ1V0LGJBdD1uZXcgbW4oJGt0LHdBdCksZjRlPW5ldyBWaShDY3QpLHJBdD0hMSxoNGU9bmV3IG1uKFRjdCxyQXQpLFFTdD1uZXcgT3coNSksWFN0PW5ldyBtbihDa3QsUVN0KSxaU3Q9KHB5KCksZT11KFZmKGxvKSw5KSxuZXcgc2goZSx1KGZmKGUsZS5sZW5ndGgpLDkpLDApKSxvNT1uZXcgbW4oVUUsWlN0KSxzQXQ9KGw0KCksRWIpLGlBdD1uZXcgbW4oQWt0LHNBdCksdmZ0PW5ldyBWaShMa3QpLG1mdD1uZXcgVmkoTWt0KSx5ZnQ9bmV3IFZpKERrdCksd2Z0PW5ldyBWaShJa3QpLEpTdD0odD11KFZmKHJBKSw5KSxuZXcgc2godCx1KGZmKHQsdC5sZW5ndGgpLDkpLDApKSxHMj1uZXcgbW4oRDQsSlN0KSxlQXQ9dW4oKGxsKCksUjcpKSx4Yj1uZXcgbW4oVDYsZUF0KSx0QXQ9bmV3ICRlKDAsMCksYzU9bmV3IG1uKEM2LHRBdCksWEc9bmV3IG1uKEVjdCwhMSksJFN0PShNMSgpLFA3KSxwZnQ9bmV3IG1uKFBrdCwkU3QpLGdmdD1uZXcgbW4oZUgsITEpLHBlKDEpLG5ldyBtbih4ZGUsbnVsbCksYUF0PW5ldyBWaShSa3QpLHhmdD1uZXcgVmkoRmt0KSxsQXQ9KHZlKCksWm8pLHU1PW5ldyBtbih5a3QsbEF0KSxkbD1uZXcgVmkodmt0KSxjQXQ9KFp1KCksdW4oQ2IpKSxReT1uZXcgbW4oV0UsY0F0KSxrZnQ9bmV3IG1uKF9rdCwhMSksdUF0PW5ldyBtbihTa3QsITApLFpPPW5ldyBtbihra3QsITEpLGJmdD1uZXcgbW4oRWt0LCExKSxIU3Q9bmV3IG1uKCRvdCwxKSxWU3Q9KGhxKCksU2Z0KSxuZXcgbW4oa2RlLFZTdCksZDRlPSEwfWZ1bmN0aW9uIGFlKCl7YWU9Wjt2YXIgdCxlO19pPW5ldyBWaSh3NnQpLG5DdD1uZXcgVmkoImNvb3JkaW5hdGVPcmlnaW4iKSxLbHQ9bmV3IFZpKCJwcm9jZXNzb3JzIiksZUN0PW5ldyBQcygiY29tcG91bmROb2RlIiwoTm4oKSwhMSkpLFNPPW5ldyBQcygiaW5zaWRlQ29ubmVjdGlvbnMiLCExKSxhQ3Q9bmV3IFZpKCJvcmlnaW5hbEJlbmRwb2ludHMiKSxvQ3Q9bmV3IFZpKCJvcmlnaW5hbER1bW15Tm9kZVBvc2l0aW9uIiksY0N0PW5ldyBWaSgib3JpZ2luYWxMYWJlbEVkZ2UiKSxMTz1uZXcgVmkoInJlcHJlc2VudGVkTGFiZWxzIiksa1M9bmV3IFZpKCJlbmRMYWJlbHMiKSxCNj1uZXcgVmkoImVuZExhYmVsLm9yaWdpbiIpLGo2PW5ldyBQcygibGFiZWxTaWRlIiwoemwoKSxyUCkpLEs0PW5ldyBQcygibWF4RWRnZVRoaWNrbmVzcyIsMCkscTE9bmV3IFBzKCJyZXZlcnNlZCIsITEpLCQ2PW5ldyBWaShpMWUpLHIxPW5ldyBQcygibG9uZ0VkZ2VTb3VyY2UiLG51bGwpLCRoPW5ldyBQcygibG9uZ0VkZ2VUYXJnZXQiLG51bGwpLFJ5PW5ldyBQcygibG9uZ0VkZ2VIYXNMYWJlbER1bW1pZXMiLCExKSxBTz1uZXcgUHMoImxvbmdFZGdlQmVmb3JlTGFiZWxEdW1teSIsITEpLHRHPW5ldyBQcygiZWRnZUNvbnN0cmFpbnQiLChkMigpLElsdCkpLFB2PW5ldyBWaSgiaW5MYXllckxheW91dFVuaXQiKSxCMj1uZXcgUHMoImluTGF5ZXJDb25zdHJhaW50IiwocTAoKSxDTykpLFI2PW5ldyBQcygiaW5MYXllclN1Y2Nlc3NvckNvbnN0cmFpbnQiLG5ldyBoZSksc0N0PW5ldyBQcygiaW5MYXllclN1Y2Nlc3NvckNvbnN0cmFpbnRCZXR3ZWVuTm9uRHVtbWllcyIsITEpLEp1PW5ldyBWaSgicG9ydER1bW15IiksSlY9bmV3IFBzKCJjcm9zc2luZ0hpbnQiLHBlKDApKSxWYz1uZXcgUHMoImdyYXBoUHJvcGVydGllcyIsKGU9dShWZihqbHQpLDkpLG5ldyBzaChlLHUoZmYoZSxlLmxlbmd0aCksOSksMCkpKSxvYz1uZXcgUHMoImV4dGVybmFsUG9ydFNpZGUiLCh2ZSgpLFpvKSksaUN0PW5ldyBQcygiZXh0ZXJuYWxQb3J0U2l6ZSIsbmV3IENhKSxWbHQ9bmV3IFZpKCJleHRlcm5hbFBvcnRSZXBsYWNlZER1bW1pZXMiKSxlRz1uZXcgVmkoImV4dGVybmFsUG9ydFJlcGxhY2VkRHVtbXkiKSxCeT1uZXcgUHMoImV4dGVybmFsUG9ydENvbm5lY3Rpb25zIiwodD11KFZmKFhhKSw5KSxuZXcgc2godCx1KGZmKHQsdC5sZW5ndGgpLDkpLDApKSksRnY9bmV3IFBzKFhmZSwwKSx0Q3Q9bmV3IFZpKCJiYXJ5Y2VudGVyQXNzb2NpYXRlcyIpLHo2PW5ldyBWaSgiVG9wU2lkZUNvbW1lbnRzIiksTjY9bmV3IFZpKCJCb3R0b21TaWRlQ29tbWVudHMiKSxaVj1uZXcgVmkoIkNvbW1lbnRDb25uZWN0aW9uUG9ydCIpLFVsdD1uZXcgUHMoImlucHV0Q29sbGVjdCIsITEpLFlsdD1uZXcgUHMoIm91dHB1dENvbGxlY3QiLCExKSxfTz1uZXcgUHMoImN5Y2xpYyIsITEpLHJDdD1uZXcgVmkoImNyb3NzSGllcmFyY2h5TWFwIiksUWx0PW5ldyBWaSgidGFyZ2V0T2Zmc2V0IiksbmV3IFBzKCJzcGxpbmVMYWJlbFNpemUiLG5ldyBDYSksUTQ9bmV3IFZpKCJzcGFjaW5ncyIpLG5HPW5ldyBQcygicGFydGl0aW9uQ29uc3RyYWludCIsITEpLEl2PW5ldyBWaSgiYnJlYWtpbmdQb2ludC5pbmZvIiksaEN0PW5ldyBWaSgic3BsaW5lcy5zdXJ2aXZpbmdFZGdlIiksUjI9bmV3IFZpKCJzcGxpbmVzLnJvdXRlLnN0YXJ0IiksWjQ9bmV3IFZpKCJzcGxpbmVzLmVkZ2VDaGFpbiIpLGxDdD1uZXcgVmkoIm9yaWdpbmFsUG9ydENvbnN0cmFpbnRzIikseDc9bmV3IFZpKCJzZWxmTG9vcEhvbGRlciIpLGs3PW5ldyBWaSgic3BsaW5lcy5uc1BvcnRZIiksVGM9bmV3IFZpKCJtb2RlbE9yZGVyIiksV2x0PW5ldyBWaSgibG9uZ0VkZ2VUYXJnZXROb2RlIiksT3Y9bmV3IFBzKEQxZSwhMSksWDQ9bmV3IFBzKEQxZSwhMSksR2x0PW5ldyBWaSgibGF5ZXJDb25zdHJhaW50cy5oaWRkZW5Ob2RlcyIpLHVDdD1uZXcgVmkoImxheWVyQ29uc3RyYWludHMub3Bwb3NpZGVQb3J0IiksWGx0PW5ldyBWaSgidGFyZ2V0Tm9kZS5tb2RlbE9yZGVyIil9ZnVuY3Rpb24gRnh0KCl7Rnh0PVosa0N0PShMRCgpLEdWKSxnd2U9bmV3IG1uKEM2dCxrQ3QpLF93ZT1uZXcgbW4oXzZ0LChObigpLCExKSksQUN0PShJJCgpLEhsdCksRHdlPW5ldyBtbihzSCxBQ3QpLFV3ZT1uZXcgbW4oUzZ0LCExKSxXd2U9bmV3IG1uKEE2dCwhMCksSDJlPW5ldyBtbihMNnQsITEpLE5DdD0oQ0QoKSxUaHQpLGN2ZT1uZXcgbW4oTTZ0LE5DdCkscGUoMSksYnZlPW5ldyBtbihENnQscGUoNykpLHd2ZT1uZXcgbW4oSTZ0LCExKSxTd2U9bmV3IG1uKE82dCwhMSkseEN0PSh4MigpLE1sdCksZHdlPW5ldyBtbihRb3QseEN0KSxEQ3Q9KHVxKCksd2h0KSxHd2U9bmV3IG1uKEtJLERDdCksTEN0PShkaCgpLE1PKSxCd2U9bmV3IG1uKFA2dCxMQ3QpLHBlKC0xKSxOd2U9bmV3IG1uKEY2dCxwZSgtMSkpLHBlKC0xKSxSd2U9bmV3IG1uKE42dCxwZSgtMSkpLHBlKC0xKSxqd2U9bmV3IG1uKFpvdCxwZSg0KSkscGUoLTEpLHp3ZT1uZXcgbW4oSm90LHBlKDIpKSxNQ3Q9KHk0KCksa0cpLFZ3ZT1uZXcgbW4odGN0LE1DdCkscGUoMCksSHdlPW5ldyBtbihlY3QscGUoMCkpLFB3ZT1uZXcgbW4obmN0LHBlKHdpKSkseUN0PShuNigpLFA2KSxmd2U9bmV3IG1uKEhfLHlDdCksSjJlPW5ldyBtbihCNnQsITEpLGF3ZT1uZXcgbW4ocmN0LC4xKSxsd2U9bmV3IG1uKGljdCwhMSkscGUoLTEpLGN3ZT1uZXcgbW4oUjZ0LHBlKC0xKSkscGUoLTEpLHV3ZT1uZXcgbW4oajZ0LHBlKC0xKSkscGUoMCksdHdlPW5ldyBtbigkNnQscGUoNDApKSxtQ3Q9KGVFKCksemx0KSxpd2U9bmV3IG1uKHNjdCxtQ3QpLHZDdD1UTyxld2U9bmV3IG1uKGFILHZDdCksRkN0PSh1XygpLERTKSxvdmU9bmV3IG1uKEk0LEZDdCksWndlPW5ldyBWaShvSCksSUN0PSh4RCgpLFdWKSxZd2U9bmV3IG1uKGFjdCxJQ3QpLE9DdD0ob0koKSxZViksWHdlPW5ldyBtbihvY3QsT0N0KSxldmU9bmV3IG1uKGNjdCwuMykscnZlPW5ldyBWaSh1Y3QpLFBDdD0oY3koKSx4RyksaXZlPW5ldyBtbihsY3QsUEN0KSxDQ3Q9KHl6KCksX2h0KSxtd2U9bmV3IG1uKHo2dCxDQ3QpLF9DdD0ocEQoKSxTaHQpLHl3ZT1uZXcgbW4ocTZ0LF9DdCksU0N0PShjRSgpLFBTKSx4d2U9bmV3IG1uKGNILFNDdCksRXdlPW5ldyBtbih1SCwuMiksd3dlPW5ldyBtbihoY3QsMiksZnZlPW5ldyBtbihINnQsbnVsbCksZ3ZlPW5ldyBtbihWNnQsMTApLGR2ZT1uZXcgbW4oRzZ0LDEwKSxwdmU9bmV3IG1uKFU2dCwyMCkscGUoMCksdXZlPW5ldyBtbihXNnQscGUoMCkpLHBlKDApLGx2ZT1uZXcgbW4oWTZ0LHBlKDApKSxwZSgwKSxodmU9bmV3IG1uKEs2dCxwZSgwKSksVjJlPW5ldyBtbihmY3QsITEpLGdDdD0oa0UoKSxtUyksVTJlPW5ldyBtbihYNnQsZ0N0KSxkQ3Q9KEgkKCksQWx0KSxHMmU9bmV3IG1uKFE2dCxkQ3QpLEx3ZT1uZXcgbW4obEgsITEpLHBlKDApLEF3ZT1uZXcgbW4oZGN0LHBlKDE2KSkscGUoMCksTXdlPW5ldyBtbihnY3QscGUoNSkpLGpDdD0oQ3ooKSxNaHQpLEJ2ZT1uZXcgbW4odGcsakN0KSx2dmU9bmV3IG1uKGhILDEwKSx4dmU9bmV3IG1uKGZILDEpLFJDdD0ob3ooKSxWViksQXZlPW5ldyBtbihWXyxSQ3QpLFR2ZT1uZXcgVmkocGN0KSxCQ3Q9cGUoMSkscGUoMCksX3ZlPW5ldyBtbihiY3QsQkN0KSwkQ3Q9KHZ6KCksTGh0KSx6dmU9bmV3IG1uKGRILCRDdCksUnZlPW5ldyBWaShnSCksT3ZlPW5ldyBtbihwSCwhMCksRHZlPW5ldyBtbihiSCwyKSxGdmU9bmV3IG1uKHdjdCwhMCksVEN0PShkcSgpLFVWKSxid2U9bmV3IG1uKFo2dCxUQ3QpLEVDdD0oaDYoKSxwNykscHdlPW5ldyBtbihKNnQsRUN0KSx3Q3Q9KFYwKCksdmIpLFoyZT1uZXcgbW4od0gsd0N0KSxRMmU9bmV3IG1uKHRrdCwhMSkscEN0PShpdigpLHE0KSxXMmU9bmV3IG1uKHZjdCxwQ3QpLGJDdD0oWjkoKSx2aHQpLFgyZT1uZXcgbW4oZWt0LGJDdCksWTJlPW5ldyBtbihtY3QsMCksSzJlPW5ldyBtbih5Y3QsMCksT3dlPURsdCxJd2U9RU8sJHdlPW1HLHF3ZT1tRyxGd2U9Ymh0LG93ZT0oRzAoKSxzcCksaHdlPVA2LHN3ZT1QNixud2U9UDYscndlPXNwLEp3ZT1JUyx0dmU9RFMsS3dlPURTLFF3ZT1EUyxudmU9a2h0LGF2ZT1JUyxzdmU9SVMsa3dlPShXMCgpLFg2KSxUd2U9WDYsQ3dlPVBTLHZ3ZT1lUCxtdmU9TDcseXZlPVl5LGt2ZT1MNyxFdmU9WXksTHZlPUw3LE12ZT1ZeSxDdmU9TGx0LFN2ZT1WVixxdmU9TDcsSHZlPVl5LGp2ZT1MNywkdmU9WXksUHZlPVl5LEl2ZT1ZeSxOdmU9WXl9ZnVuY3Rpb24gcm8oKXtybz1aLEo3dD1uZXcgbXMoIkRJUkVDVElPTl9QUkVQUk9DRVNTT1IiLDApLFg3dD1uZXcgbXMoIkNPTU1FTlRfUFJFUFJPQ0VTU09SIiwxKSxnUz1uZXcgbXMoIkVER0VfQU5EX0xBWUVSX0NPTlNUUkFJTlRfRURHRV9SRVZFUlNFUiIsMiksZ2x0PW5ldyBtcygiSU5URVJBQ1RJVkVfRVhURVJOQUxfUE9SVF9QT1NJVElPTkVSIiwzKSx2VHQ9bmV3IG1zKCJQQVJUSVRJT05fUFJFUFJPQ0VTU09SIiw0KSxDVj1uZXcgbXMoIkxBQkVMX0RVTU1ZX0lOU0VSVEVSIiw1KSxGVj1uZXcgbXMoIlNFTEZfTE9PUF9QUkVQUk9DRVNTT1IiLDYpLGg3PW5ldyBtcygiTEFZRVJfQ09OU1RSQUlOVF9QUkVQUk9DRVNTT1IiLDcpLGJUdD1uZXcgbXMoIlBBUlRJVElPTl9NSURQUk9DRVNTT1IiLDgpLG9UdD1uZXcgbXMoIkhJR0hfREVHUkVFX05PREVfTEFZRVJfUFJPQ0VTU09SIiw5KSxnVHQ9bmV3IG1zKCJOT0RFX1BST01PVElPTiIsMTApLGw3PW5ldyBtcygiTEFZRVJfQ09OU1RSQUlOVF9QT1NUUFJPQ0VTU09SIiwxMSksd1R0PW5ldyBtcygiUEFSVElUSU9OX1BPU1RQUk9DRVNTT1IiLDEyKSxpVHQ9bmV3IG1zKCJISUVSQVJDSElDQUxfUE9SVF9DT05TVFJBSU5UX1BST0NFU1NPUiIsMTMpLG1UdD1uZXcgbXMoIlNFTUlfSU5URVJBQ1RJVkVfQ1JPU1NNSU5fUFJPQ0VTU09SIiwxNCksVjd0PW5ldyBtcygiQlJFQUtJTkdfUE9JTlRfSU5TRVJURVIiLDE1KSxMVj1uZXcgbXMoIkxPTkdfRURHRV9TUExJVFRFUiIsMTYpLHBsdD1uZXcgbXMoIlBPUlRfU0lERV9QUk9DRVNTT1IiLDE3KSxFVj1uZXcgbXMoIklOVkVSVEVEX1BPUlRfUFJPQ0VTU09SIiwxOCksSVY9bmV3IG1zKCJQT1JUX0xJU1RfU09SVEVSIiwxOSkseFR0PW5ldyBtcygiU09SVF9CWV9JTlBVVF9PUkRFUl9PRl9NT0RFTCIsMjApLERWPW5ldyBtcygiTk9SVEhfU09VVEhfUE9SVF9QUkVQUk9DRVNTT1IiLDIxKSxHN3Q9bmV3IG1zKCJCUkVBS0lOR19QT0lOVF9QUk9DRVNTT1IiLDIyKSxwVHQ9bmV3IG1zKEUxZSwyMyksa1R0PW5ldyBtcyhUMWUsMjQpLE9WPW5ldyBtcygiU0VMRl9MT09QX1BPUlRfUkVTVE9SRVIiLDI1KSx5VHQ9bmV3IG1zKCJTSU5HTEVfRURHRV9HUkFQSF9XUkFQUEVSIiwyNiksVFY9bmV3IG1zKCJJTl9MQVlFUl9DT05TVFJBSU5UX1BST0NFU1NPUiIsMjcpLGVUdD1uZXcgbXMoIkVORF9OT0RFX1BPUlRfTEFCRUxfTUFOQUdFTUVOVF9QUk9DRVNTT1IiLDI4KSxmVHQ9bmV3IG1zKCJMQUJFTF9BTkRfTk9ERV9TSVpFX1BST0NFU1NPUiIsMjkpLGhUdD1uZXcgbXMoIklOTkVSTU9TVF9OT0RFX01BUkdJTl9DQUxDVUxBVE9SIiwzMCksTlY9bmV3IG1zKCJTRUxGX0xPT1BfUk9VVEVSIiwzMSksWTd0PW5ldyBtcygiQ09NTUVOVF9OT0RFX01BUkdJTl9DQUxDVUxBVE9SIiwzMiksa1Y9bmV3IG1zKCJFTkRfTEFCRUxfUFJFUFJPQ0VTU09SIiwzMyksU1Y9bmV3IG1zKCJMQUJFTF9EVU1NWV9TV0lUQ0hFUiIsMzQpLFc3dD1uZXcgbXMoIkNFTlRFUl9MQUJFTF9NQU5BR0VNRU5UX1BST0NFU1NPUiIsMzUpLHU3PW5ldyBtcygiTEFCRUxfU0lERV9TRUxFQ1RPUiIsMzYpLHVUdD1uZXcgbXMoIkhZUEVSRURHRV9EVU1NWV9NRVJHRVIiLDM3KSxzVHQ9bmV3IG1zKCJISUVSQVJDSElDQUxfUE9SVF9EVU1NWV9TSVpFX1BST0NFU1NPUiIsMzgpLGRUdD1uZXcgbXMoIkxBWUVSX1NJWkVfQU5EX0dSQVBIX0hFSUdIVF9DQUxDVUxBVE9SIiwzOSkscFM9bmV3IG1zKCJISUVSQVJDSElDQUxfUE9SVF9QT1NJVElPTl9QUk9DRVNTT1IiLDQwKSxRN3Q9bmV3IG1zKCJDT05TVFJBSU5UU19QT1NUUFJPQ0VTU09SIiw0MSksSzd0PW5ldyBtcygiQ09NTUVOVF9QT1NUUFJPQ0VTU09SIiw0MiksbFR0PW5ldyBtcygiSFlQRVJOT0RFX1BST0NFU1NPUiIsNDMpLGFUdD1uZXcgbXMoIkhJRVJBUkNISUNBTF9QT1JUX09SVEhPR09OQUxfRURHRV9ST1VURVIiLDQ0KSxBVj1uZXcgbXMoIkxPTkdfRURHRV9KT0lORVIiLDQ1KSxQVj1uZXcgbXMoIlNFTEZfTE9PUF9QT1NUUFJPQ0VTU09SIiw0NiksVTd0PW5ldyBtcygiQlJFQUtJTkdfUE9JTlRfUkVNT1ZFUiIsNDcpLE1WPW5ldyBtcygiTk9SVEhfU09VVEhfUE9SVF9QT1NUUFJPQ0VTU09SIiw0OCksY1R0PW5ldyBtcygiSE9SSVpPTlRBTF9DT01QQUNUT1IiLDQ5KSxfVj1uZXcgbXMoIkxBQkVMX0RVTU1ZX1JFTU9WRVIiLDUwKSxuVHQ9bmV3IG1zKCJGSU5BTF9TUExJTkVfQkVORFBPSU5UU19DQUxDVUxBVE9SIiw1MSksdFR0PW5ldyBtcygiRU5EX0xBQkVMX1NPUlRFUiIsNTIpLHhPPW5ldyBtcygiUkVWRVJTRURfRURHRV9SRVNUT1JFUiIsNTMpLHhWPW5ldyBtcygiRU5EX0xBQkVMX1BPU1RQUk9DRVNTT1IiLDU0KSxyVHQ9bmV3IG1zKCJISUVSQVJDSElDQUxfTk9ERV9SRVNJWkVSIiw1NSksWjd0PW5ldyBtcygiRElSRUNUSU9OX1BPU1RQUk9DRVNTT1IiLDU2KX1mdW5jdGlvbiB6eG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuLHpuLGhyLHBpLGpzLFpsLFhoLEsxLGtVLHhQLGJBLGtQLEg3LEdmdCxpeGUsVWZ0LGhwLFl2LFY3LEVQLFRQLG5rLFdmdCx3QSxzeGUsQkx0LEt2LHZBLFlmdCxyayxtQSxvMyx5QSxLZnQsYXhlO2ZvcihCTHQ9MCxwaT1lLFhoPTAseFA9cGkubGVuZ3RoO1hoPHhQOysrWGgpZm9yKHpuPXBpW1hoXSxZdj1uZXcgUyh6bi5qKTtZdi5hPFl2LmMuYy5sZW5ndGg7KXtmb3IoaHA9dShKKFl2KSwxMSksRVA9MCxkPW5ldyBTKGhwLmcpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDE3KSx6bi5jIT1oLmQuaS5jJiYrK0VQO0VQPjAmJih0LmFbaHAucF09Qkx0KyspfWZvcihtQT0wLGpzPW4sSzE9MCxiQT1qcy5sZW5ndGg7SzE8YkE7KytLMSl7Zm9yKHpuPWpzW0sxXSxrUD0wLFl2PW5ldyBTKHpuLmopO1l2LmE8WXYuYy5jLmxlbmd0aCYmKGhwPXUoSihZdiksMTEpLGhwLmo9PSh2ZSgpLFBuKSk7KWZvcihkPW5ldyBTKGhwLmUpO2QuYTxkLmMuYy5sZW5ndGg7KWlmKGg9dShKKGQpLDE3KSx6bi5jIT1oLmMuaS5jKXsrK2tQO2JyZWFrfWZvcihHZnQ9MCxUUD1uZXcgZGEoem4uaix6bi5qLmMubGVuZ3RoKTtUUC5iPjA7KXtmb3IoaHA9KFpuKFRQLmI+MCksdShUUC5hLlhiKFRQLmM9LS1UUC5iKSwxMSkpLEVQPTAsZD1uZXcgUyhocC5lKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxNyksem4uYyE9aC5jLmkuYyYmKytFUDtFUD4wJiYoaHAuaj09KHZlKCksUG4pPyh0LmFbaHAucF09bUEsKyttQSk6KHQuYVtocC5wXT1tQStrUCtHZnQsKytHZnQpKX1tQSs9R2Z0fWZvcihWNz1uZXcgX3IsRz1uZXcgTzAsaHI9ZSxabD0wLGtVPWhyLmxlbmd0aDtabDxrVTsrK1psKWZvcih6bj1ocltabF0sWWZ0PW5ldyBTKHpuLmopO1lmdC5hPFlmdC5jLmMubGVuZ3RoOylmb3IodkE9dShKKFlmdCksMTEpLGQ9bmV3IFModkEuZyk7ZC5hPGQuYy5jLmxlbmd0aDspaWYoaD11KEooZCksMTcpLHlBPWguZCx6bi5jIT15QS5pLmMpaWYoS3Y9dShlYyhMbyhWNy5mLHZBKSksNDY3KSxvMz11KGVjKExvKFY3LmYseUEpKSw0NjcpLCFLdiYmIW8zKUg9bmV3IHNZdCxHLmEuemMoSCxHKSxsZShILmEsaCksbGUoSC5kLHZBKSxhdShWNy5mLHZBLEgpLGxlKEguZCx5QSksYXUoVjcuZix5QSxIKTtlbHNlIGlmKCFLdilsZShvMy5hLGgpLGxlKG8zLmQsdkEpLGF1KFY3LmYsdkEsbzMpO2Vsc2UgaWYoIW8zKWxlKEt2LmEsaCksbGUoS3YuZCx5QSksYXUoVjcuZix5QSxLdik7ZWxzZSBpZihLdj09bzMpbGUoS3YuYSxoKTtlbHNle2ZvcihsZShLdi5hLGgpLFVmdD1uZXcgUyhvMy5kKTtVZnQuYTxVZnQuYy5jLmxlbmd0aDspaXhlPXUoSihVZnQpLDExKSxhdShWNy5mLGl4ZSxLdik7THMoS3YuYSxvMy5hKSxMcyhLdi5kLG8zLmQpLEcuYS5CYyhvMykhPW51bGx9Zm9yKEs9dShlSShHLE50KGg2bix7MzoxLDQ6MSw1OjEsMTk0NjoxfSw0NjcsRy5hLmdjKCksMCwxKSksMTk0NiksUm49ZVswXS5jLHN4ZT1uWzBdLmMsQz1LLE09MCxqPUMubGVuZ3RoO008ajsrK00pZm9yKGs9Q1tNXSxrLmU9Qkx0LGsuZj1tQSxZdj1uZXcgUyhrLmQpO1l2LmE8WXYuYy5jLmxlbmd0aDspaHA9dShKKFl2KSwxMSksbms9dC5hW2hwLnBdLGhwLmkuYz09Um4/KG5rPGsuZSYmKGsuZT1uayksbms+ay5iJiYoay5iPW5rKSk6aHAuaS5jPT1zeGUmJihuazxrLmYmJihrLmY9bmspLG5rPmsuYyYmKGsuYz1uaykpO2ZvcigkOChLLDAsSy5sZW5ndGgsbnVsbCkscms9TnQoQ3IsWHIsMjUsSy5sZW5ndGgsMTUsMSkscj1OdChDcixYciwyNSxtQSsxLDE1LDEpLGd0PTA7Z3Q8Sy5sZW5ndGg7Z3QrKylya1tndF09S1tndF0uZixyW3JrW2d0XV09MTtmb3Iobz0wLE10PTA7TXQ8ci5sZW5ndGg7TXQrKylyW010XT09MT9yW010XT1vOi0tbztmb3IoV2Z0PTAsU3Q9MDtTdDxyay5sZW5ndGg7U3QrKylya1tTdF0rPXJbcmtbU3RdXSxXZnQ9Yi5NYXRoLm1heChXZnQscmtbU3RdKzEpO2Zvcih2PTE7djxXZnQ7KXYqPTI7Zm9yKGF4ZT0yKnYtMSx2LT0xLEtmdD1OdChDcixYciwyNSxheGUsMTUsMSkscz0wLFdlPTA7V2U8cmsubGVuZ3RoO1dlKyspZm9yKF9lPXJrW1dlXSt2LCsrS2Z0W19lXTtfZT4wOylfZSUyPjAmJihzKz1LZnRbX2UrMV0pLF9lPShfZS0xKS8yfDAsKytLZnRbX2VdO2ZvcihRZT1OdChJbWUsRGUsMzYyLEsubGVuZ3RoKjIsMCwxKSxSdD0wO1J0PEsubGVuZ3RoO1J0KyspUWVbMipSdF09bmV3IGYkKEtbUnRdLEtbUnRdLmUsS1tSdF0uYiwoJDkoKSxCUykpLFFlWzIqUnQrMV09bmV3IGYkKEtbUnRdLEtbUnRdLmIsS1tSdF0uZSxOUyk7Zm9yKCQ4KFFlLDAsUWUubGVuZ3RoLG51bGwpLEg3PTAsS3Q9MDtLdDxRZS5sZW5ndGg7S3QrKylzd2l0Y2goUWVbS3RdLmQuZyl7Y2FzZSAwOisrSDc7YnJlYWs7Y2FzZSAxOi0tSDcscys9SDd9Zm9yKHdBPU50KEltZSxEZSwzNjIsSy5sZW5ndGgqMiwwLDEpLHVlPTA7dWU8Sy5sZW5ndGg7dWUrKyl3QVsyKnVlXT1uZXcgZiQoS1t1ZV0sS1t1ZV0uZixLW3VlXS5jLCgkOSgpLEJTKSksd0FbMip1ZSsxXT1uZXcgZiQoS1t1ZV0sS1t1ZV0uYyxLW3VlXS5mLE5TKTtmb3IoJDgod0EsMCx3QS5sZW5ndGgsbnVsbCksSDc9MCx0dD0wO3R0PHdBLmxlbmd0aDt0dCsrKXN3aXRjaCh3QVt0dF0uZC5nKXtjYXNlIDA6KytINzticmVhaztjYXNlIDE6LS1INyxzKz1IN31yZXR1cm4gc31mdW5jdGlvbiBnaSgpe2dpPVoscEE9bmV3IHl3KDcpLExMdD1uZXcgWWQoOCw5NCksbmV3IFlkKDgsNjQpLE1MdD1uZXcgWWQoOCwzNiksSzVlPW5ldyBZZCg4LDY1KSxYNWU9bmV3IFlkKDgsMTIyKSxRNWU9bmV3IFlkKDgsOTApLEo1ZT1uZXcgWWQoOCw5OCksWTVlPW5ldyBZZCg4LDY2KSxaNWU9bmV3IFlkKDgsNjApLHR4ZT1uZXcgWWQoOCw2MiksQUx0PW5ldyB5dygxMSkseFU9bmV3IE5sKDQpLGpjKHhVLDQ4LDU3KSxxNz1uZXcgTmwoNCksamMocTcsNDgsNTcpLGpjKHE3LDY1LDkwKSxqYyhxNyw5NSw5NSksamMocTcsOTcsMTIyKSxlaz1uZXcgTmwoNCksamMoZWssOSw5KSxqYyhlaywxMCwxMCksamMoZWssMTIsMTIpLGpjKGVrLDEzLDEzKSxqYyhlaywzMiwzMiksREx0PW15KHhVKSxPTHQ9bXkocTcpLElMdD1teShlayksejc9bmV3IF9yLGdBPW5ldyBfcixXNWU9bHQoY3QoQWUsMSksZWUsMiw2LFsiQ24iLCJMdSIsIkxsIiwiTHQiLCJMbSIsIkxvIiwiTW4iLCJNZSIsIk1jIiwiTmQiLCJObCIsIk5vIiwiWnMiLCJabCIsIlpwIiwiQ2MiLCJDZiIsbnVsbCwiQ28iLCJDcyIsIlBkIiwiUHMiLCJQZSIsIlBjIiwiUG8iLCJTbSIsIlNjIiwiU2siLCJTbyIsIlBpIiwiUGYiLCJMIiwiTSIsIk4iLCJaIiwiQyIsIlAiLCJTIl0pLF9MdD1sdChjdChBZSwxKSxlZSwyLDYsWyJCYXNpYyBMYXRpbiIsIkxhdGluLTEgU3VwcGxlbWVudCIsIkxhdGluIEV4dGVuZGVkLUEiLCJMYXRpbiBFeHRlbmRlZC1CIiwiSVBBIEV4dGVuc2lvbnMiLCJTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMiLCJDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MiLCJHcmVlayIsIkN5cmlsbGljIiwiQXJtZW5pYW4iLCJIZWJyZXciLCJBcmFiaWMiLCJTeXJpYWMiLCJUaGFhbmEiLCJEZXZhbmFnYXJpIiwiQmVuZ2FsaSIsIkd1cm11a2hpIiwiR3VqYXJhdGkiLCJPcml5YSIsIlRhbWlsIiwiVGVsdWd1IiwiS2FubmFkYSIsIk1hbGF5YWxhbSIsIlNpbmhhbGEiLCJUaGFpIiwiTGFvIiwiVGliZXRhbiIsIk15YW5tYXIiLCJHZW9yZ2lhbiIsIkhhbmd1bCBKYW1vIiwiRXRoaW9waWMiLCJDaGVyb2tlZSIsIlVuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MiLCJPZ2hhbSIsIlJ1bmljIiwiS2htZXIiLCJNb25nb2xpYW4iLCJMYXRpbiBFeHRlbmRlZCBBZGRpdGlvbmFsIiwiR3JlZWsgRXh0ZW5kZWQiLCJHZW5lcmFsIFB1bmN0dWF0aW9uIiwiU3VwZXJzY3JpcHRzIGFuZCBTdWJzY3JpcHRzIiwiQ3VycmVuY3kgU3ltYm9scyIsIkNvbWJpbmluZyBNYXJrcyBmb3IgU3ltYm9scyIsIkxldHRlcmxpa2UgU3ltYm9scyIsIk51bWJlciBGb3JtcyIsIkFycm93cyIsIk1hdGhlbWF0aWNhbCBPcGVyYXRvcnMiLCJNaXNjZWxsYW5lb3VzIFRlY2huaWNhbCIsIkNvbnRyb2wgUGljdHVyZXMiLCJPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvbiIsIkVuY2xvc2VkIEFscGhhbnVtZXJpY3MiLCJCb3ggRHJhd2luZyIsIkJsb2NrIEVsZW1lbnRzIiwiR2VvbWV0cmljIFNoYXBlcyIsIk1pc2NlbGxhbmVvdXMgU3ltYm9scyIsIkRpbmdiYXRzIiwiQnJhaWxsZSBQYXR0ZXJucyIsIkNKSyBSYWRpY2FscyBTdXBwbGVtZW50IiwiS2FuZ3hpIFJhZGljYWxzIiwiSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycyIsIkNKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiIsIkhpcmFnYW5hIiwiS2F0YWthbmEiLCJCb3BvbW9mbyIsIkhhbmd1bCBDb21wYXRpYmlsaXR5IEphbW8iLCJLYW5idW4iLCJCb3BvbW9mbyBFeHRlbmRlZCIsIkVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMiLCJDSksgQ29tcGF0aWJpbGl0eSIsIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEiLCJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIiwiWWkgU3lsbGFibGVzIiwiWWkgUmFkaWNhbHMiLCJIYW5ndWwgU3lsbGFibGVzIix5Z2UsIkNKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMiLCJBbHBoYWJldGljIFByZXNlbnRhdGlvbiBGb3JtcyIsIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSIsIkNvbWJpbmluZyBIYWxmIE1hcmtzIiwiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMiLCJTbWFsbCBGb3JtIFZhcmlhbnRzIiwiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CIiwiU3BlY2lhbHMiLCJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyIsIk9sZCBJdGFsaWMiLCJHb3RoaWMiLCJEZXNlcmV0IiwiQnl6YW50aW5lIE11c2ljYWwgU3ltYm9scyIsIk11c2ljYWwgU3ltYm9scyIsIk1hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3ltYm9scyIsIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEIiLCJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIFN1cHBsZW1lbnQiLCJUYWdzIl0pLFNMdD1sdChjdChDciwxKSxYciwyNSwxNSxbNjYzMDQsNjYzNTEsNjYzNTIsNjYzODMsNjY1NjAsNjY2MzksMTE4Nzg0LDExOTAzOSwxMTkwNDAsMTE5Mjk1LDExOTgwOCwxMjA4MzEsMTMxMDcyLDE3Mzc4MiwxOTQ1NjAsMTk1MTAzLDkxNzUwNCw5MTc2MzFdKX1mdW5jdGlvbiAkcSgpeyRxPVosUnBlPW5ldyBoaCgiT1VUX1RfTCIsMCwoUXUoKSxNZCksKHl1KCksRWYpLChLZigpLHNjKSxzYyxsdChjdChqaCwxKSxEZSwyMSwwLFtqaSgocHkoKSxBZiksbHQoY3QobG8sMSksb2UsOTMsMCxbTGYsX2ZdKSldKSksQnBlPW5ldyBoaCgiT1VUX1RfQyIsMSxmYixFZixzYyxldSxsdChjdChqaCwxKSxEZSwyMSwwLFtqaShBZixsdChjdChsbywxKSxvZSw5MywwLFtMZixpZ10pKSxqaShBZixsdChjdChsbywxKSxvZSw5MywwLFtMZixpZyxxaF0pKV0pKSxqcGU9bmV3IGhoKCJPVVRfVF9SIiwyLGtmLEVmLHNjLGFjLGx0KGN0KGpoLDEpLERlLDIxLDAsW2ppKEFmLGx0KGN0KGxvLDEpLG9lLDkzLDAsW0xmLFNmXSkpXSkpLExwZT1uZXcgaGgoIk9VVF9CX0wiLDMsTWQsbjEsYWMsc2MsbHQoY3QoamgsMSksRGUsMjEsMCxbamkoQWYsbHQoY3QobG8sMSksb2UsOTMsMCxbSGgsX2ZdKSldKSksQXBlPW5ldyBoaCgiT1VUX0JfQyIsNCxmYixuMSxhYyxldSxsdChjdChqaCwxKSxEZSwyMSwwLFtqaShBZixsdChjdChsbywxKSxvZSw5MywwLFtIaCxpZ10pKSxqaShBZixsdChjdChsbywxKSxvZSw5MywwLFtIaCxpZyxxaF0pKV0pKSxNcGU9bmV3IGhoKCJPVVRfQl9SIiw1LGtmLG4xLGFjLGFjLGx0KGN0KGpoLDEpLERlLDIxLDAsW2ppKEFmLGx0KGN0KGxvLDEpLG9lLDkzLDAsW0hoLFNmXSkpXSkpLE9wZT1uZXcgaGgoIk9VVF9MX1QiLDYsa2YsbjEsc2Msc2MsbHQoY3QoamgsMSksRGUsMjEsMCxbamkoQWYsbHQoY3QobG8sMSksb2UsOTMsMCxbX2YsTGYscWhdKSldKSksSXBlPW5ldyBoaCgiT1VUX0xfQyIsNyxrZixkYixldSxzYyxsdChjdChqaCwxKSxEZSwyMSwwLFtqaShBZixsdChjdChsbywxKSxvZSw5MywwLFtfZixkMF0pKSxqaShBZixsdChjdChsbywxKSxvZSw5MywwLFtfZixkMCxxaF0pKV0pKSxEcGU9bmV3IGhoKCJPVVRfTF9CIiw4LGtmLEVmLGFjLHNjLGx0KGN0KGpoLDEpLERlLDIxLDAsW2ppKEFmLGx0KGN0KGxvLDEpLG9lLDkzLDAsW19mLEhoLHFoXSkpXSkpLE5wZT1uZXcgaGgoIk9VVF9SX1QiLDksTWQsbjEsc2MsYWMsbHQoY3QoamgsMSksRGUsMjEsMCxbamkoQWYsbHQoY3QobG8sMSksb2UsOTMsMCxbU2YsTGYscWhdKSldKSksRnBlPW5ldyBoaCgiT1VUX1JfQyIsMTAsTWQsZGIsZXUsYWMsbHQoY3QoamgsMSksRGUsMjEsMCxbamkoQWYsbHQoY3QobG8sMSksb2UsOTMsMCxbU2YsZDBdKSksamkoQWYsbHQoY3QobG8sMSksb2UsOTMsMCxbU2YsZDAscWhdKSldKSksUHBlPW5ldyBoaCgiT1VUX1JfQiIsMTEsTWQsRWYsYWMsYWMsbHQoY3QoamgsMSksRGUsMjEsMCxbamkoQWYsbHQoY3QobG8sMSksb2UsOTMsMCxbU2YsSGgscWhdKSldKSksX3BlPW5ldyBoaCgiSU5fVF9MIiwxMixNZCxuMSxzYyxzYyxsdChjdChqaCwxKSxEZSwyMSwwLFtqaShZbCxsdChjdChsbywxKSxvZSw5MywwLFtMZixfZl0pKSxqaShZbCxsdChjdChsbywxKSxvZSw5MywwLFtMZixfZixxaF0pKV0pKSxDcGU9bmV3IGhoKCJJTl9UX0MiLDEzLGZiLG4xLHNjLGV1LGx0KGN0KGpoLDEpLERlLDIxLDAsW2ppKFlsLGx0KGN0KGxvLDEpLG9lLDkzLDAsW0xmLGlnXSkpLGppKFlsLGx0KGN0KGxvLDEpLG9lLDkzLDAsW0xmLGlnLHFoXSkpXSkpLFNwZT1uZXcgaGgoIklOX1RfUiIsMTQsa2YsbjEsc2MsYWMsbHQoY3QoamgsMSksRGUsMjEsMCxbamkoWWwsbHQoY3QobG8sMSksb2UsOTMsMCxbTGYsU2ZdKSksamkoWWwsbHQoY3QobG8sMSksb2UsOTMsMCxbTGYsU2YscWhdKSldKSksRXBlPW5ldyBoaCgiSU5fQ19MIiwxNSxNZCxkYixldSxzYyxsdChjdChqaCwxKSxEZSwyMSwwLFtqaShZbCxsdChjdChsbywxKSxvZSw5MywwLFtkMCxfZl0pKSxqaShZbCxsdChjdChsbywxKSxvZSw5MywwLFtkMCxfZixxaF0pKV0pKSxrcGU9bmV3IGhoKCJJTl9DX0MiLDE2LGZiLGRiLGV1LGV1LGx0KGN0KGpoLDEpLERlLDIxLDAsW2ppKFlsLGx0KGN0KGxvLDEpLG9lLDkzLDAsW2QwLGlnXSkpLGppKFlsLGx0KGN0KGxvLDEpLG9lLDkzLDAsW2QwLGlnLHFoXSkpXSkpLFRwZT1uZXcgaGgoIklOX0NfUiIsMTcsa2YsZGIsZXUsYWMsbHQoY3QoamgsMSksRGUsMjEsMCxbamkoWWwsbHQoY3QobG8sMSksb2UsOTMsMCxbZDAsU2ZdKSksamkoWWwsbHQoY3QobG8sMSksb2UsOTMsMCxbZDAsU2YscWhdKSldKSkseXBlPW5ldyBoaCgiSU5fQl9MIiwxOCxNZCxFZixhYyxzYyxsdChjdChqaCwxKSxEZSwyMSwwLFtqaShZbCxsdChjdChsbywxKSxvZSw5MywwLFtIaCxfZl0pKSxqaShZbCxsdChjdChsbywxKSxvZSw5MywwLFtIaCxfZixxaF0pKV0pKSxtcGU9bmV3IGhoKCJJTl9CX0MiLDE5LGZiLEVmLGFjLGV1LGx0KGN0KGpoLDEpLERlLDIxLDAsW2ppKFlsLGx0KGN0KGxvLDEpLG9lLDkzLDAsW0hoLGlnXSkpLGppKFlsLGx0KGN0KGxvLDEpLG9lLDkzLDAsW0hoLGlnLHFoXSkpXSkpLHhwZT1uZXcgaGgoIklOX0JfUiIsMjAsa2YsRWYsYWMsYWMsbHQoY3QoamgsMSksRGUsMjEsMCxbamkoWWwsbHQoY3QobG8sMSksb2UsOTMsMCxbSGgsU2ZdKSksamkoWWwsbHQoY3QobG8sMSksb2UsOTMsMCxbSGgsU2YscWhdKSldKSksVXV0PW5ldyBoaChOXywyMSxudWxsLG51bGwsbnVsbCxudWxsLGx0KGN0KGpoLDEpLERlLDIxLDAsW10pKX1mdW5jdGlvbiBkbigpe2RuPVoscjM9KEhwKCksTG4pLmIsdShBdChXdChMbi5iKSwwKSwzNCksdShBdChXdChMbi5iKSwxKSwxOCksYXA9TG4uYSx1KEF0KFd0KExuLmEpLDApLDM0KSx1KEF0KFd0KExuLmEpLDEpLDE4KSx1KEF0KFd0KExuLmEpLDIpLDE4KSx1KEF0KFd0KExuLmEpLDMpLDE4KSx1KEF0KFd0KExuLmEpLDQpLDE4KSxMYj1Mbi5vLHUoQXQoV3QoTG4ubyksMCksMzQpLHUoQXQoV3QoTG4ubyksMSksMzQpLGQ1ZT11KEF0KFd0KExuLm8pLDIpLDE4KSx1KEF0KFd0KExuLm8pLDMpLDE4KSx1KEF0KFd0KExuLm8pLDQpLDE4KSx1KEF0KFd0KExuLm8pLDUpLDE4KSx1KEF0KFd0KExuLm8pLDYpLDE4KSx1KEF0KFd0KExuLm8pLDcpLDE4KSx1KEF0KFd0KExuLm8pLDgpLDE4KSx1KEF0KFd0KExuLm8pLDkpLDE4KSx1KEF0KFd0KExuLm8pLDEwKSwxOCksdShBdChXdChMbi5vKSwxMSksMTgpLHUoQXQoV3QoTG4ubyksMTIpLDE4KSx1KEF0KFd0KExuLm8pLDEzKSwxOCksdShBdChXdChMbi5vKSwxNCksMTgpLHUoQXQoV3QoTG4ubyksMTUpLDE4KSx1KEF0KE1pKExuLm8pLDApLDU5KSx1KEF0KE1pKExuLm8pLDEpLDU5KSx1KEF0KE1pKExuLm8pLDIpLDU5KSx1KEF0KE1pKExuLm8pLDMpLDU5KSx1KEF0KE1pKExuLm8pLDQpLDU5KSx1KEF0KE1pKExuLm8pLDUpLDU5KSx1KEF0KE1pKExuLm8pLDYpLDU5KSx1KEF0KE1pKExuLm8pLDcpLDU5KSx1KEF0KE1pKExuLm8pLDgpLDU5KSx1KEF0KE1pKExuLm8pLDkpLDU5KSxmNWU9TG4ucCx1KEF0KFd0KExuLnApLDApLDM0KSx1KEF0KFd0KExuLnApLDEpLDM0KSx1KEF0KFd0KExuLnApLDIpLDM0KSx1KEF0KFd0KExuLnApLDMpLDM0KSx1KEF0KFd0KExuLnApLDQpLDE4KSx1KEF0KFd0KExuLnApLDUpLDE4KSx1KEF0KE1pKExuLnApLDApLDU5KSx1KEF0KE1pKExuLnApLDEpLDU5KSxnNWU9TG4ucSx1KEF0KFd0KExuLnEpLDApLDM0KSxNYj1Mbi52LHUoQXQoV3QoTG4udiksMCksMTgpLHUoQXQoTWkoTG4udiksMCksNTkpLHUoQXQoTWkoTG4udiksMSksNTkpLHUoQXQoTWkoTG4udiksMiksNTkpLG9wPUxuLncsdShBdChXdChMbi53KSwwKSwzNCksdShBdChXdChMbi53KSwxKSwzNCksdShBdChXdChMbi53KSwyKSwzNCksdShBdChXdChMbi53KSwzKSwxOCksRGI9TG4uQix1KEF0KFd0KExuLkIpLDApLDE4KSx1KEF0KE1pKExuLkIpLDApLDU5KSx1KEF0KE1pKExuLkIpLDEpLDU5KSx1KEF0KE1pKExuLkIpLDIpLDU5KSxwNWU9TG4uUSx1KEF0KFd0KExuLlEpLDApLDE4KSx1KEF0KE1pKExuLlEpLDApLDU5KSxiNWU9TG4uUix1KEF0KFd0KExuLlIpLDApLDM0KSxLaD1Mbi5TLHUoQXQoTWkoTG4uUyksMCksNTkpLHUoQXQoTWkoTG4uUyksMSksNTkpLHUoQXQoTWkoTG4uUyksMiksNTkpLHUoQXQoTWkoTG4uUyksMyksNTkpLHUoQXQoTWkoTG4uUyksNCksNTkpLHUoQXQoTWkoTG4uUyksNSksNTkpLHUoQXQoTWkoTG4uUyksNiksNTkpLHUoQXQoTWkoTG4uUyksNyksNTkpLHUoQXQoTWkoTG4uUyksOCksNTkpLHUoQXQoTWkoTG4uUyksOSksNTkpLHUoQXQoTWkoTG4uUyksMTApLDU5KSx1KEF0KE1pKExuLlMpLDExKSw1OSksdShBdChNaShMbi5TKSwxMiksNTkpLHUoQXQoTWkoTG4uUyksMTMpLDU5KSx1KEF0KE1pKExuLlMpLDE0KSw1OSksY3A9TG4uVCx1KEF0KFd0KExuLlQpLDApLDE4KSx1KEF0KFd0KExuLlQpLDIpLDE4KSx3NWU9dShBdChXdChMbi5UKSwzKSwxOCksdShBdChXdChMbi5UKSw0KSwxOCksdShBdChNaShMbi5UKSwwKSw1OSksdShBdChNaShMbi5UKSwxKSw1OSksdShBdChXdChMbi5UKSwxKSwxOCksdXA9TG4uVSx1KEF0KFd0KExuLlUpLDApLDM0KSx1KEF0KFd0KExuLlUpLDEpLDM0KSx1KEF0KFd0KExuLlUpLDIpLDE4KSx1KEF0KFd0KExuLlUpLDMpLDE4KSx1KEF0KFd0KExuLlUpLDQpLDE4KSx1KEF0KFd0KExuLlUpLDUpLDE4KSx1KEF0KE1pKExuLlUpLDApLDU5KSxpMz1Mbi5WLHUoQXQoV3QoTG4uViksMCksMTgpLGw1PUxuLlcsdShBdChXdChMbi5XKSwwKSwzNCksdShBdChXdChMbi5XKSwxKSwzNCksdShBdChXdChMbi5XKSwyKSwzNCksdShBdChXdChMbi5XKSwzKSwxOCksdShBdChXdChMbi5XKSw0KSwxOCksdShBdChXdChMbi5XKSw1KSwxOCksdjVlPUxuLmJiLHUoQXQoV3QoTG4uYmIpLDApLDM0KSx1KEF0KFd0KExuLmJiKSwxKSwzNCksdShBdChXdChMbi5iYiksMiksMzQpLHUoQXQoV3QoTG4uYmIpLDMpLDM0KSx1KEF0KFd0KExuLmJiKSw0KSwzNCksdShBdChXdChMbi5iYiksNSksMzQpLHUoQXQoV3QoTG4uYmIpLDYpLDM0KSx1KEF0KFd0KExuLmJiKSw3KSwxOCksdShBdChNaShMbi5iYiksMCksNTkpLHUoQXQoTWkoTG4uYmIpLDEpLDU5KSxtNWU9TG4uZWIsdShBdChXdChMbi5lYiksMCksMzQpLHUoQXQoV3QoTG4uZWIpLDEpLDM0KSx1KEF0KFd0KExuLmViKSwyKSwzNCksdShBdChXdChMbi5lYiksMyksMzQpLHUoQXQoV3QoTG4uZWIpLDQpLDM0KSx1KEF0KFd0KExuLmViKSw1KSwzNCksdShBdChXdChMbi5lYiksNiksMTgpLHUoQXQoV3QoTG4uZWIpLDcpLDE4KSxRYT1Mbi5hYix1KEF0KFd0KExuLmFiKSwwKSwzNCksdShBdChXdChMbi5hYiksMSksMzQpLEd2PUxuLkgsdShBdChXdChMbi5IKSwwKSwxOCksdShBdChXdChMbi5IKSwxKSwxOCksdShBdChXdChMbi5IKSwyKSwxOCksdShBdChXdChMbi5IKSwzKSwxOCksdShBdChXdChMbi5IKSw0KSwxOCksdShBdChXdChMbi5IKSw1KSwxOCksdShBdChNaShMbi5IKSwwKSw1OSksVXY9TG4uZGIsdShBdChXdChMbi5kYiksMCksMTgpLFcxPUxuLk19ZnVuY3Rpb24gcXhuKHQpe3ZhciBlO3QuT3x8KHQuTz0hMCxRYyh0LCJ0eXBlIiksYnoodCwiZWNvcmUueG1sLnR5cGUiKSx3eih0LE8yKSxlPXUoX0UoKFBwKCksWWgpLE8yKSwxOTQ1KSxEcihBbyh0LmZiKSx0LmIpLHJjKHQuYix3UCwiQW55VHlwZSIsITEsITEsITApLGhzKHUoQXQoV3QodC5iKSwwKSwzNCksdC53Yi5ELHJPLG51bGwsMCwtMSx3UCwhMSwhMSwhMCwhMSwhMSwhMSksaHModShBdChXdCh0LmIpLDEpLDM0KSx0LndiLkQsImFueSIsbnVsbCwwLC0xLHdQLCEwLCEwLCEwLCExLCExLCEwKSxocyh1KEF0KFd0KHQuYiksMiksMzQpLHQud2IuRCwiYW55QXR0cmlidXRlIixudWxsLDAsLTEsd1AsITEsITEsITAsITEsITEsITEpLHJjKHQuYmIsbVUsZWdlLCExLCExLCEwKSxocyh1KEF0KFd0KHQuYmIpLDApLDM0KSx0LmdiLCJkYXRhIixudWxsLDAsMSxtVSwhMSwhMSwhMCwhMSwhMCwhMSksaHModShBdChXdCh0LmJiKSwxKSwzNCksdC5nYixNOHQsbnVsbCwxLDEsbVUsITEsITEsITAsITEsITAsITEpLHJjKHQuZmIsdlAsbmdlLCExLCExLCEwKSxocyh1KEF0KFd0KHQuZmIpLDApLDM0KSxlLmdiLCJyYXdWYWx1ZSIsbnVsbCwwLDEsdlAsITAsITAsITAsITEsITAsITApLGhzKHUoQXQoV3QodC5mYiksMSksMzQpLGUuYSxaXyxudWxsLDAsMSx2UCwhMCwhMCwhMCwhMSwhMCwhMCksTmkodShBdChXdCh0LmZiKSwyKSwxOCksdC53Yi5xLG51bGwsImluc3RhbmNlVHlwZSIsMSwxLHZQLCExLCExLCEwLCExLCExLCExLCExKSxyYyh0LnFiLGtMdCxyZ2UsITEsITEsITApLGhzKHUoQXQoV3QodC5xYiksMCksMzQpLHQud2IuRCxyTyxudWxsLDAsLTEsbnVsbCwhMSwhMSwhMCwhMSwhMSwhMSksTmkodShBdChXdCh0LnFiKSwxKSwxOCksdC53Yi5hYixudWxsLCJ4TUxOU1ByZWZpeE1hcCIsMCwtMSxudWxsLCEwLCExLCEwLCEwLCExLCExLCExKSxOaSh1KEF0KFd0KHQucWIpLDIpLDE4KSx0LndiLmFiLG51bGwsInhTSVNjaGVtYUxvY2F0aW9uIiwwLC0xLG51bGwsITAsITEsITAsITAsITEsITEsITEpLGhzKHUoQXQoV3QodC5xYiksMyksMzQpLHQuZ2IsImNEQVRBIixudWxsLDAsLTIsbnVsbCwhMCwhMCwhMCwhMSwhMSwhMCksaHModShBdChXdCh0LnFiKSw0KSwzNCksdC5nYiwiY29tbWVudCIsbnVsbCwwLC0yLG51bGwsITAsITAsITAsITEsITEsITApLE5pKHUoQXQoV3QodC5xYiksNSksMTgpLHQuYmIsbnVsbCxiZ2UsMCwtMixudWxsLCEwLCEwLCEwLCEwLCExLCExLCEwKSxocyh1KEF0KFd0KHQucWIpLDYpLDM0KSx0LmdiLHR1dCxudWxsLDAsLTIsbnVsbCwhMCwhMCwhMCwhMSwhMSwhMCksYWkodC5hLFFuLCJBbnlTaW1wbGVUeXBlIiwhMCksYWkodC5jLEFlLCJBbnlVUkkiLCEwKSxhaSh0LmQsY3QoR3UsMSksIkJhc2U2NEJpbmFyeSIsITApLGFpKHQuZSxwbCwiQm9vbGVhbiIsITApLGFpKHQuZixScywiQm9vbGVhbk9iamVjdCIsITApLGFpKHQuZyxHdSwiQnl0ZSIsITApLGFpKHQuaSxNNiwiQnl0ZU9iamVjdCIsITApLGFpKHQuaixBZSwiRGF0ZSIsITApLGFpKHQuayxBZSwiRGF0ZVRpbWUiLCEwKSxhaSh0Lm4sTnV0LCJEZWNpbWFsIiwhMCksYWkodC5vLGFhLCJEb3VibGUiLCEwKSxhaSh0LnAsbGEsIkRvdWJsZU9iamVjdCIsITApLGFpKHQucSxBZSwiRHVyYXRpb24iLCEwKSxhaSh0LnMsd2gsIkVOVElUSUVTIiwhMCksYWkodC5yLHdoLCJFTlRJVElFU0Jhc2UiLCEwKSxhaSh0LnQsQWUsVTh0LCEwKSxhaSh0LnUsYTMsIkZsb2F0IiwhMCksYWkodC52LGk3LCJGbG9hdE9iamVjdCIsITApLGFpKHQudyxBZSwiR0RheSIsITApLGFpKHQuQixBZSwiR01vbnRoIiwhMCksYWkodC5BLEFlLCJHTW9udGhEYXkiLCEwKSxhaSh0LkMsQWUsIkdZZWFyIiwhMCksYWkodC5ELEFlLCJHWWVhck1vbnRoIiwhMCksYWkodC5GLGN0KEd1LDEpLCJIZXhCaW5hcnkiLCEwKSxhaSh0LkcsQWUsIklEIiwhMCksYWkodC5ILEFlLCJJRFJFRiIsITApLGFpKHQuSix3aCwiSURSRUZTIiwhMCksYWkodC5JLHdoLCJJRFJFRlNCYXNlIiwhMCksYWkodC5LLENyLCJJbnQiLCEwKSxhaSh0Lk0sajQsIkludGVnZXIiLCEwKSxhaSh0LkwsamEsIkludE9iamVjdCIsITApLGFpKHQuUCxBZSwiTGFuZ3VhZ2UiLCEwKSxhaSh0LlEsT2IsIkxvbmciLCEwKSxhaSh0LlIsU3YsIkxvbmdPYmplY3QiLCEwKSxhaSh0LlMsQWUsIk5hbWUiLCEwKSxhaSh0LlQsQWUsVUgsITApLGFpKHQuVSxqNCwiTmVnYXRpdmVJbnRlZ2VyIiwhMCksYWkodC5WLEFlLEs4dCwhMCksYWkodC5YLHdoLCJOTVRPS0VOUyIsITApLGFpKHQuVyx3aCwiTk1UT0tFTlNCYXNlIiwhMCksYWkodC5ZLGo0LCJOb25OZWdhdGl2ZUludGVnZXIiLCEwKSxhaSh0LlosajQsIk5vblBvc2l0aXZlSW50ZWdlciIsITApLGFpKHQuJCxBZSwiTm9ybWFsaXplZFN0cmluZyIsITApLGFpKHQuXyxBZSwiTk9UQVRJT04iLCEwKSxhaSh0LmFiLEFlLCJQb3NpdGl2ZUludGVnZXIiLCEwKSxhaSh0LmNiLEFlLCJRTmFtZSIsITApLGFpKHQuZGIsZzUsIlNob3J0IiwhMCksYWkodC5lYixBdiwiU2hvcnRPYmplY3QiLCEwKSxhaSh0LmdiLEFlLGp4dCwhMCksYWkodC5oYixBZSwiVGltZSIsITApLGFpKHQuaWIsQWUsIlRva2VuIiwhMCksYWkodC5qYixnNSwiVW5zaWduZWRCeXRlIiwhMCksYWkodC5rYixBdiwiVW5zaWduZWRCeXRlT2JqZWN0IiwhMCksYWkodC5sYixPYiwiVW5zaWduZWRJbnQiLCEwKSxhaSh0Lm1iLFN2LCJVbnNpZ25lZEludE9iamVjdCIsITApLGFpKHQubmIsajQsIlVuc2lnbmVkTG9uZyIsITApLGFpKHQub2IsQ3IsIlVuc2lnbmVkU2hvcnQiLCEwKSxhaSh0LnBiLGphLCJVbnNpZ25lZFNob3J0T2JqZWN0IiwhMCksS3l0KHQsTzIpLEh4bih0KSl9ZnVuY3Rpb24gaWZlKHQpe013KHQsbmV3IGsyKGxidChNUihfdyhFdyhDdyhUdyhuZXcga2csR24pLCJFTEsgTGF5ZXJlZCIpLCJMYXllci1iYXNlZCBhbGdvcml0aG0gcHJvdmlkZWQgYnkgdGhlIEVjbGlwc2UgTGF5b3V0IEtlcm5lbC4gQXJyYW5nZXMgYXMgbWFueSBlZGdlcyBhcyBwb3NzaWJsZSBpbnRvIG9uZSBkaXJlY3Rpb24gYnkgcGxhY2luZyBub2RlcyBpbnRvIHN1YnNlcXVlbnQgbGF5ZXJzLiBUaGlzIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIGRpZmZlcmVudCByb3V0aW5nIHN0eWxlcyAoc3RyYWlnaHQsIG9ydGhvZ29uYWwsIHNwbGluZXMpOyBpZiBvcnRob2dvbmFsIHJvdXRpbmcgaXMgc2VsZWN0ZWQsIGFyYml0cmFyeSBwb3J0IGNvbnN0cmFpbnRzIGFyZSByZXNwZWN0ZWQsIHRodXMgZW5hYmxpbmcgdGhlIGxheW91dCBvZiBibG9jayBkaWFncmFtcyBzdWNoIGFzIGFjdG9yLW9yaWVudGVkIG1vZGVscyBvciBjaXJjdWl0IHNjaGVtYXRpY3MuIEZ1cnRoZXJtb3JlLCBmdWxsIGxheW91dCBvZiBjb21wb3VuZCBncmFwaHMgd2l0aCBjcm9zcy1oaWVyYXJjaHkgZWRnZXMgaXMgc3VwcG9ydGVkIHdoZW4gdGhlIHJlc3BlY3RpdmUgb3B0aW9uIGlzIGFjdGl2YXRlZCBvbiB0aGUgdG9wIGxldmVsLiIpLG5ldyBmUSksR24pLGppKChDRSgpLE9mdCksbHQoY3QoZlUsMSksb2UsMjM3LDAsW2xVLGhVLHVVLElmdCxjVSxvVV0pKSkpKSx4ZSh0LEduLG9rdCxJZShsaHQpKSx4ZSh0LEduLGNrdCxJZSh5OXQpKSx4ZSh0LEduLGpvdCxJZShPTykpLHhlKHQsR24sdWt0LEllKFRmKSkseGUodCxHbixWb3QsSWUoVjYpKSx4ZSh0LEduLGxrdCxJZShqdikpLHhlKHQsR24saGt0LEllKFd5KSkseGUodCxHbixma3QsSWUoUzcpKSx4ZSh0LEduLGRrdCxJZShBNykpLHhlKHQsR24sZ2t0LEllKGhodCkpLHhlKHQsR24sQ3ksSWUoJHYpKSx4ZSh0LEduLHBrdCxJZShmaHQpKSx4ZSh0LEduLGJrdCxJZShMUykpLHhlKHQsR24sd2t0LEllKGJHKSkseGUodCxHbixINnQsSWUoSU8pKSx4ZSh0LEduLEc2dCxJZShKNCkpLHhlKHQsR24sVjZ0LEllKHEyKSkseGUodCxHbixVNnQsSWUodDUpKSx4ZSh0LEduLFZJLHBlKDApKSx4ZSh0LEduLFc2dCxJZShfNykpLHhlKHQsR24sWTZ0LEllKG05dCkpLHhlKHQsR24sSzZ0LEllKEg2KSkseGUodCxHbix0ZyxJZShBOXQpKSx4ZSh0LEduLGhILEllKHg5dCkpLHhlKHQsR24sZkgsSWUoazl0KSkseGUodCxHbixWXyxJZShnaHQpKSx4ZSh0LEduLHBjdCxJZShFOXQpKSx4ZSh0LEduLGJjdCxJZShUOXQpKSx4ZSh0LEduLGRILEllKHdHKSkseGUodCxHbixnSCxJZShwaHQpKSx4ZSh0LEduLHBILEllKF85dCkpLHhlKHQsR24sYkgsSWUoQzl0KSkseGUodCxHbix3Y3QsSWUoUzl0KSkseGUodCxHbix1Y3QsSWUoQnYpKSx4ZSh0LEduLGxjdCxJZShBUykpLHhlKHQsR24sY0gsSWUoc2h0KSkseGUodCxHbix1SCxJZShRQ3QpKSx4ZSh0LEduLHh2LGc5dCkseGUodCxHbixRSSxZQ3QpLHhlKHQsR24sdmt0LDApLHhlKHQsR24sdEgscGUoMSkpLHhlKHQsR24sRTYsR0UpLHhlKHQsR24sbWt0LEllKHoyKSkseGUodCxHbixHb3QsSWUoY3MpKSx4ZSh0LEduLHlrdCxJZShDNykpLHhlKHQsR24sSkksSWUoR3ZlKSkseGUodCxHbix4a3QsSWUoSWQpKSx4ZSh0LEduLHZILEllKHF5KSkseGUodCxHbixSXywoTm4oKSwhMCkpLHhlKHQsR24sa2t0LEllKEh5KSkseGUodCxHbixFa3QsSWUoajIpKSx4ZSh0LEduLEQ0LEllKCQyKSkseGUodCxHbixUNixJZShwRykpLHhlKHQsR24sRWN0LEllKHVodCkpLHhlKHQsR24sVGt0LFdDdCkseGUodCxHbixVRSxJZShOdikpLHhlKHQsR24sQ2t0LEllKGRHKSkseGUodCxHbixXRSxJZShHeSkpLHhlKHQsR24sX2t0LEllKFF2ZSkpLHhlKHQsR24sU2t0LEllKHc5dCkpLHhlKHQsR24sQWt0LGI5dCkseGUodCxHbixMa3QsSWUoWXZlKSkseGUodCxHbixNa3QsSWUoS3ZlKSkseGUodCxHbixEa3QsSWUoWHZlKSkseGUodCxHbixJa3QsSWUoV3ZlKSkseGUodCxHbixJNnQsSWUoZGh0KSkseGUodCxHbixLSSxJZShjOXQpKSx4ZSh0LEduLHRjdCxJZShvaHQpKSx4ZSh0LEduLEQ2dCxJZShNUykpLHhlKHQsR24sUDZ0LEllKHV1KSkseGUodCxHbixRb3QsSWUoenkpKSx4ZSh0LEduLEhfLEllKF9TKSkseGUodCxHbixCNnQsSWUoJHkpKSx4ZSh0LEduLCQ2dCxJZShWQ3QpKSx4ZSh0LEduLHNjdCxJZShlaHQpKSx4ZSh0LEduLGFILEllKERPKSkseGUodCxHbixpY3QsSWUobmh0KSkseGUodCxHbixTNnQsSWUodTl0KSkseGUodCxHbixBNnQsSWUobDl0KSkseGUodCxHbixzSCxJZShyOXQpKSx4ZSh0LEduLEk0LEllKGdHKSkseGUodCxHbixvY3QsSWUoY2h0KSkseGUodCxHbixfNnQsSWUoYWh0KSkseGUodCxHbixjY3QsSWUoZjl0KSkseGUodCxHbix6NnQsSWUoWEN0KSkseGUodCxHbixxNnQsSWUoaWh0KSkseGUodCxHbixtSCxJZSh0aHQpKSx4ZSh0LEduLGFjdCxJZShoOXQpKSx4ZSh0LEduLFg2dCxJZShzRykpLHhlKHQsR24sUTZ0LEllKHpDdCkpLHhlKHQsR24sZmN0LEllKGlHKSkseGUodCxHbixsSCxJZSh0OXQpKSx4ZSh0LEduLGRjdCxJZShKQ3QpKSx4ZSh0LEduLGdjdCxJZShlOXQpKSx4ZSh0LEduLEM2LEllKEU3KSkseGUodCxHbixPa3QsSWUoU28pKSx4ZSh0LEduLCRvdCxJZShKZykpLHhlKHQsR24sUGt0LEllKE9kKSkseGUodCxHbixlSCxJZShyaHQpKSx4ZSh0LEduLHJjdCxJZShHQ3QpKSx4ZSh0LEduLEZrdCxJZSh0cCkpLHhlKHQsR24sTmt0LEllKENTKSkseGUodCxHbixCa3QsSWUobEcpKSx4ZSh0LEduLFJrdCxJZShSdikpLHhlKHQsR24sVGN0LEllKHA5dCkpLHhlKHQsR24sQ2N0LEllKFQ3KSkseGUodCxHbixab3QsSWUoczl0KSkseGUodCxHbixKb3QsSWUoYTl0KSkseGUodCxHbix5SCxJZShVeSkpLHhlKHQsR24sTDZ0LEllKFpsdCkpLHhlKHQsR24sZWN0LEllKG85dCkpLHhlKHQsR24sWjZ0LEllKHVHKSkseGUodCxHbixKNnQsSWUoY0cpKSx4ZSh0LEduLGprdCxJZShmRykpLHhlKHQsR24sbmN0LEllKGk5dCkpLHhlKHQsR24sb0gsSWUoU1MpKSx4ZSh0LEduLCRrdCxJZShQTykpLHhlKHQsR24sQzZ0LEllKFVDdCkpLHhlKHQsR24sTTZ0LEllKHY5dCkpLHhlKHQsR24saGN0LEllKEtDdCkpLHhlKHQsR24sRjZ0LEllKFV2ZSkpLHhlKHQsR24sUjZ0LEllKFZ2ZSkpLHhlKHQsR24sX2N0LEllKG45dCkpLHhlKHQsR24sTjZ0LEllKGhHKSkseGUodCxHbixqNnQsSWUob0cpKSx4ZSh0LEduLHdILEllKHdiKSkseGUodCxHbixla3QsSWUoSEN0KSkseGUodCxHbixtY3QsSWUoYUcpKSx4ZSh0LEduLHljdCxJZShxQ3QpKSx4ZSh0LEduLHRrdCxJZShKbHQpKSx4ZSh0LEduLHZjdCxJZShxNikpLHhlKHQsR24sTzZ0LEllKFpDdCkpfWZ1bmN0aW9uIFM0KHQsZSl7dmFyIG4scjtyZXR1cm4gZDV8fChkNT1uZXcgX3IsJDc9bmV3IF9yLHI9KGdpKCksZ2koKSxuZXcgTmwoNCkpLFpEKHIsYAkKXHJcciAgYCksa28oZDUsbXV0LHIpLGtvKCQ3LG11dCxteShyKSkscj1uZXcgTmwoNCksWkQocix2Z2UpLGtvKGQ1LG9TLHIpLGtvKCQ3LG9TLG15KHIpKSxyPW5ldyBObCg0KSxaRChyLHZnZSksa28oZDUsb1Msciksa28oJDcsb1MsbXkocikpLHI9bmV3IE5sKDQpLFpEKHIsbWdlKSx5eShyLHUoTmMoZDUsb1MpLDExNykpLGtvKGQ1LHZ1dCxyKSxrbygkNyx2dXQsbXkocikpLHI9bmV3IE5sKDQpLFpEKHIsIi0uMDpBWl9fYXrCt8K3w4DDlsOYw7bDuMSxxLTEvsWBxYjFisW+xoDHg8eNx7DHtMe1x7rIl8mQyqjKu8uBy5DLkcyAzYXNoM2hzobOis6MzozOjs6hzqPPjs+Qz5bPms+az5zPnM+ez57PoM+gz6LPs9CB0IzQjtGP0ZHRnNGe0oHSg9KG0pDThNOH04jTi9OM05DTq9Ou07XTuNO51LHVltWZ1ZnVodaG1pHWodaj1rnWu9a91r/Wv9eB14LXhNeE15DXqtew17LYodi62YDZktmg2anZsNq32rravtuA247bkNuT25XbqNuq263bsNu54KSB4KSD4KSF4KS54KS84KWN4KWR4KWU4KWY4KWj4KWm4KWv4KaB4KaD4KaF4KaM4KaP4KaQ4KaT4Kao4Kaq4Kaw4Kay4Kay4Ka24Ka54Ka84Ka84Ka+4KeE4KeH4KeI4KeL4KeN4KeX4KeX4Kec4Ked4Kef4Kej4Kem4Kex4KiC4KiC4KiF4KiK4KiP4KiQ4KiT4Kio4Kiq4Kiw4Kiy4Kiz4Ki14Ki24Ki44Ki54Ki84Ki84Ki+4KmC4KmH4KmI4KmL4KmN4KmZ4Kmc4Kme4Kme4Kmm4Km04KqB4KqD4KqF4KqL4KqN4KqN4KqP4KqR4KqT4Kqo4Kqq4Kqw4Kqy4Kqz4Kq14Kq54Kq84KuF4KuH4KuJ4KuL4KuN4Kug4Kug4Kum4Kuv4KyB4KyD4KyF4KyM4KyP4KyQ4KyT4Kyo4Kyq4Kyw4Kyy4Kyz4Ky24Ky54Ky84K2D4K2H4K2I4K2L4K2N4K2W4K2X4K2c4K2d4K2f4K2h4K2m4K2v4K6C4K6D4K6F4K6K4K6O4K6Q4K6S4K6V4K6Z4K6a4K6c4K6c4K6e4K6f4K6j4K6k4K6o4K6q4K6u4K614K634K654K6+4K+C4K+G4K+I4K+K4K+N4K+X4K+X4K+n4K+v4LCB4LCD4LCF4LCM4LCO4LCQ4LCS4LCo4LCq4LCz4LC14LC54LC+4LGE4LGG4LGI4LGK4LGN4LGV4LGW4LGg4LGh4LGm4LGv4LKC4LKD4LKF4LKM4LKO4LKQ4LKS4LKo4LKq4LKz4LK14LK54LK+4LOE4LOG4LOI4LOK4LON4LOV4LOW4LOe4LOe4LOg4LOh4LOm4LOv4LSC4LSD4LSF4LSM4LSO4LSQ4LSS4LSo4LSq4LS54LS+4LWD4LWG4LWI4LWK4LWN4LWX4LWX4LWg4LWh4LWm4LWv4LiB4Liu4Liw4Li64LmA4LmO4LmQ4LmZ4LqB4LqC4LqE4LqE4LqH4LqI4LqK4LqK4LqN4LqN4LqU4LqX4LqZ4Lqf4Lqh4Lqj4Lql4Lql4Lqn4Lqn4Lqq4Lqr4Lqt4Lqu4Lqw4Lq54Lq74Lq94LuA4LuE4LuG4LuG4LuI4LuN4LuQ4LuZ4LyY4LyZ4Lyg4Lyp4Ly14Ly14Ly34Ly34Ly54Ly54Ly+4L2H4L2J4L2p4L2x4L6E4L6G4L6L4L6Q4L6V4L6X4L6X4L6Z4L6t4L6x4L634L654L654YKg4YOF4YOQ4YO24YSA4YSA4YSC4YSD4YSF4YSH4YSJ4YSJ4YSL4YSM4YSO4YSS4YS84YS84YS+4YS+4YWA4YWA4YWM4YWM4YWO4YWO4YWQ4YWQ4YWU4YWV4YWZ4YWZ4YWf4YWh4YWj4YWj4YWl4YWl4YWn4YWn4YWp4YWp4YWt4YWu4YWy4YWz4YW14YW14Yae4Yae4Yao4Yao4Yar4Yar4Yau4Yav4Ya34Ya44Ya64Ya64Ya84YeC4Yer4Yer4Yew4Yew4Ye54Ye54biA4bqb4bqg4bu54byA4byV4byY4byd4byg4b2F4b2I4b2N4b2Q4b2X4b2Z4b2Z4b2b4b2b4b2d4b2d4b2f4b294b6A4b604b624b684b6+4b6+4b+C4b+E4b+G4b+M4b+Q4b+T4b+W4b+b4b+g4b+s4b+y4b+04b+24b+84oOQ4oOc4oOh4oOh4oSm4oSm4oSq4oSr4oSu4oSu4oaA4oaC44CF44CF44CH44CH44Ch44Cv44Cx44C144GB44KU44KZ44Ka44Kd44Ke44Kh44O644O844O+44SF44Ss5LiA6b6l6rCA7Z6jIiksa28oZDUseXV0LHIpLGtvKCQ3LHl1dCxteShyKSkscj1uZXcgTmwoNCksWkQocixtZ2UpLGpjKHIsOTUsOTUpLGpjKHIsNTgsNTgpLGtvKGQ1LHh1dCxyKSxrbygkNyx4dXQsbXkocikpKSxuPXUoTmMoZT9kNTokNyx0KSwxMzYpLG59ZnVuY3Rpb24gSHhuKHQpe0lyKHQuYSxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJhbnlTaW1wbGVUeXBlIl0pKSxJcih0LmIsWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSwiYW55VHlwZSIsTmgsck9dKSksSXIodShBdChXdCh0LmIpLDApLDM0KSxZcixsdChjdChBZSwxKSxlZSwyLDYsW05oLGR1dCxjaSwiOm1peGVkIl0pKSxJcih1KEF0KFd0KHQuYiksMSksMzQpLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbTmgsZHV0LFY4dCxwdXQsY2ksIjoxIixpZ2UsImxheCJdKSksSXIodShBdChXdCh0LmIpLDIpLDM0KSxZcixsdChjdChBZSwxKSxlZSwyLDYsW05oLHRnZSxWOHQscHV0LGNpLCI6MiIsaWdlLCJsYXgiXSkpLElyKHQuYyxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJhbnlVUkkiLFJoLGUxXSkpLElyKHQuZCxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJiYXNlNjRCaW5hcnkiLFJoLGUxXSkpLElyKHQuZSxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLGI2LFJoLGUxXSkpLElyKHQuZixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJib29sZWFuOk9iamVjdCIsQWEsYjZdKSksSXIodC5nLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksdFNdKSksSXIodC5pLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksImJ5dGU6T2JqZWN0IixBYSx0U10pKSxJcih0LmosWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSwiZGF0ZSIsUmgsZTFdKSksSXIodC5rLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksImRhdGVUaW1lIixSaCxlMV0pKSxJcih0Lm4sWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSwiZGVjaW1hbCIsUmgsZTFdKSksSXIodC5vLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksZVMsUmgsZTFdKSksSXIodC5wLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksImRvdWJsZTpPYmplY3QiLEFhLGVTXSkpLElyKHQucSxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJkdXJhdGlvbiIsUmgsZTFdKSksSXIodC5zLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksIkVOVElUSUVTIixBYSxzZ2UsRzh0LCIxIl0pKSxJcih0LnIsWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSxzZ2UsZ3V0LFU4dF0pKSxJcih0LnQsWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSxVOHQsQWEsVUhdKSksSXIodC51LFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksblMsUmgsZTFdKSksSXIodC52LFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksImZsb2F0Ok9iamVjdCIsQWEsblNdKSksSXIodC53LFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksImdEYXkiLFJoLGUxXSkpLElyKHQuQixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJnTW9udGgiLFJoLGUxXSkpLElyKHQuQSxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJnTW9udGhEYXkiLFJoLGUxXSkpLElyKHQuQyxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJnWWVhciIsUmgsZTFdKSksSXIodC5ELFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksImdZZWFyTW9udGgiLFJoLGUxXSkpLElyKHQuRixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJoZXhCaW5hcnkiLFJoLGUxXSkpLElyKHQuRyxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJJRCIsQWEsVUhdKSksSXIodC5ILFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksIklEUkVGIixBYSxVSF0pKSxJcih0LkosWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSwiSURSRUZTIixBYSxhZ2UsRzh0LCIxIl0pKSxJcih0LkksWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSxhZ2UsZ3V0LCJJRFJFRiJdKSksSXIodC5LLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksclNdKSksSXIodC5NLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksVzh0XSkpLElyKHQuTCxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJpbnQ6T2JqZWN0IixBYSxyU10pKSxJcih0LlAsWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSwibGFuZ3VhZ2UiLEFhLGJ1dCx3dXQsb2dlXSkpLElyKHQuUSxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLGlTXSkpLElyKHQuUixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJsb25nOk9iamVjdCIsQWEsaVNdKSksSXIodC5TLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksIk5hbWUiLEFhLGJ1dCx3dXQsWTh0XSkpLElyKHQuVCxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLFVILEFhLCJOYW1lIix3dXQsY2dlXSkpLElyKHQuVSxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJuZWdhdGl2ZUludGVnZXIiLEFhLHVnZSxjTywiLTEiXSkpLElyKHQuVixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLEs4dCxBYSxidXQsd3V0LCJcXGMrIl0pKSxJcih0LlgsWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSwiTk1UT0tFTlMiLEFhLGxnZSxHOHQsIjEiXSkpLElyKHQuVyxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLGxnZSxndXQsSzh0XSkpLElyKHQuWSxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLFg4dCxBYSxXOHQsdU8sIjAiXSkpLElyKHQuWixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLHVnZSxBYSxXOHQsY08sIjAiXSkpLElyKHQuJCxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLGhnZSxBYSxWYXQsUmgsInJlcGxhY2UiXSkpLElyKHQuXyxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJOT1RBVElPTiIsUmgsZTFdKSksSXIodC5hYixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJwb3NpdGl2ZUludGVnZXIiLEFhLFg4dCx1TywiMSJdKSksSXIodC5iYixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25fLl90eXBlIixOaCwiZW1wdHkiXSkpLElyKHUoQXQoV3QodC5iYiksMCksMzQpLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbTmgscUgsY2ksImRhdGEiXSkpLElyKHUoQXQoV3QodC5iYiksMSksMzQpLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbTmgscUgsY2ksTTh0XSkpLElyKHQuY2IsWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSwiUU5hbWUiLFJoLGUxXSkpLElyKHQuZGIsWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSxzU10pKSxJcih0LmViLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksInNob3J0Ok9iamVjdCIsQWEsc1NdKSksSXIodC5mYixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJzaW1wbGVBbnlUeXBlIixOaCxpT10pKSxJcih1KEF0KFd0KHQuZmIpLDApLDM0KSxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCI6MyIsTmgsaU9dKSksSXIodShBdChXdCh0LmZiKSwxKSwzNCksWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSwiOjQiLE5oLGlPXSkpLElyKHUoQXQoV3QodC5mYiksMiksMTgpLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksIjo1IixOaCxpT10pKSxJcih0LmdiLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksVmF0LFJoLCJwcmVzZXJ2ZSJdKSksSXIodC5oYixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJ0aW1lIixSaCxlMV0pKSxJcih0LmliLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksYnV0LEFhLGhnZSxSaCxlMV0pKSxJcih0LmpiLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksZmdlLGNPLCIyNTUiLHVPLCIwIl0pKSxJcih0LmtiLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksInVuc2lnbmVkQnl0ZTpPYmplY3QiLEFhLGZnZV0pKSxJcih0LmxiLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksZGdlLGNPLCI0Mjk0OTY3Mjk1Iix1TywiMCJdKSksSXIodC5tYixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJ1bnNpZ25lZEludDpPYmplY3QiLEFhLGRnZV0pKSxJcih0Lm5iLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksInVuc2lnbmVkTG9uZyIsQWEsWDh0LGNPLGdnZSx1TywiMCJdKSksSXIodC5vYixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLHBnZSxjTywiNjU1MzUiLHVPLCIwIl0pKSxJcih0LnBiLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksInVuc2lnbmVkU2hvcnQ6T2JqZWN0IixBYSxwZ2VdKSksSXIodC5xYixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCIiLE5oLHJPXSkpLElyKHUoQXQoV3QodC5xYiksMCksMzQpLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbTmgsZHV0LGNpLCI6bWl4ZWQiXSkpLElyKHUoQXQoV3QodC5xYiksMSksMTgpLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbTmgscUgsY2ksInhtbG5zOnByZWZpeCJdKSksSXIodShBdChXdCh0LnFiKSwyKSwxOCksWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtOaCxxSCxjaSwieHNpOnNjaGVtYUxvY2F0aW9uIl0pKSxJcih1KEF0KFd0KHQucWIpLDMpLDM0KSxZcixsdChjdChBZSwxKSxlZSwyLDYsW05oLEhILGNpLCJjREFUQSIsVkgsc09dKSksSXIodShBdChXdCh0LnFiKSw0KSwzNCksWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtOaCxISCxjaSwiY29tbWVudCIsVkgsc09dKSksSXIodShBdChXdCh0LnFiKSw1KSwxOCksWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtOaCxISCxjaSxiZ2UsVkgsc09dKSksSXIodShBdChXdCh0LnFiKSw2KSwzNCksWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtOaCxISCxjaSx0dXQsVkgsc09dKSl9ZnVuY3Rpb24gcXIodCl7cmV0dXJuIGhuKCJfVUlfRU1GRGlhZ25vc3RpY19tYXJrZXIiLHQpPyJFTUYgUHJvYmxlbSI6aG4oIl9VSV9DaXJjdWxhckNvbnRhaW5tZW50X2RpYWdub3N0aWMiLHQpPyJBbiBvYmplY3QgbWF5IG5vdCBjaXJjdWxhcmx5IGNvbnRhaW4gaXRzZWxmIjpobihaZGUsdCk/Ildyb25nIGNoYXJhY3Rlci4iOmhuKEpkZSx0KT8iSW52YWxpZCByZWZlcmVuY2UgbnVtYmVyLiI6aG4oT0gsdCk/IkEgY2hhcmFjdGVyIGlzIHJlcXVpcmVkIGFmdGVyIFxcLiI6aG4ob3V0LHQpPyInPycgaXMgbm90IGV4cGVjdGVkLiAgJyg/Oicgb3IgJyg/PScgb3IgJyg/IScgb3IgJyg/PCcgb3IgJyg/Iycgb3IgJyg/Pic/Ijpobih0MGUsdCk/IicoPzwnIG9yICcoPzwhJyBpcyBleHBlY3RlZC4iOmhuKGUwZSx0KT8iQSBjb21tZW50IGlzIG5vdCB0ZXJtaW5hdGVkLiI6aG4oSTIsdCk/IicpJyBpcyBleHBlY3RlZC4iOmhuKEQ4dCx0KT8iVW5leHBlY3RlZCBlbmQgb2YgdGhlIHBhdHRlcm4gaW4gYSBtb2RpZmllciBncm91cC4iOmhuKG4wZSx0KT8iJzonIGlzIGV4cGVjdGVkLiI6aG4ocjBlLHQpPyJVbmV4cGVjdGVkIGVuZCBvZiB0aGUgcGF0dGVybiBpbiBhIGNvbmRpdGlvbmFsIGdyb3VwLiI6aG4oaTBlLHQpPyJBIGJhY2sgcmVmZXJlbmNlIG9yIGFuIGFuY2hvciBvciBhIGxvb2thaGVhZCBvciBhIGxvb2stYmVoaW5kIGlzIGV4cGVjdGVkIGluIGEgY29uZGl0aW9uYWwgcGF0dGVybi4iOmhuKHMwZSx0KT8iVGhlcmUgYXJlIG1vcmUgdGhhbiB0aHJlZSBjaG9pY2VzIGluIGEgY29uZGl0aW9uYWwgZ3JvdXAuIjpobihhMGUsdCk/IkEgY2hhcmFjdGVyIGluIFUrMDA0MC1VKzAwNWYgbXVzdCBmb2xsb3cgXFxjLiI6aG4obzBlLHQpPyJBICd7JyBpcyByZXF1aXJlZCBiZWZvcmUgYSBjaGFyYWN0ZXIgY2F0ZWdvcnkuIjpobihjMGUsdCk/IkEgcHJvcGVydHkgbmFtZSBpcyBub3QgY2xvc2VkIGJ5ICd9Jy4iOmhuKEk4dCx0KT8iVW5leHBlY3RlZCBtZXRhIGNoYXJhY3Rlci4iOmhuKGN1dCx0KT8iVW5rbm93biBwcm9wZXJ0eS4iOmhuKE84dCx0KT8iQSBQT1NJWCBjaGFyYWN0ZXIgY2xhc3MgbXVzdCBiZSBjbG9zZWQgYnkgJzpdJy4iOmhuKFBILHQpPyJVbmV4cGVjdGVkIGVuZCBvZiB0aGUgcGF0dGVybiBpbiBhIGNoYXJhY3RlciBjbGFzcy4iOmhuKHUwZSx0KT8iVW5rbm93biBuYW1lIGZvciBhIFBPU0lYIGNoYXJhY3RlciBjbGFzcy4iOmhuKCJwYXJzZXIuY2MuNCIsdCk/IictJyBpcyBpbnZhbGlkIGhlcmUuIjpobihsMGUsdCk/IiddJyBpcyBleHBlY3RlZC4iOmhuKFA4dCx0KT8iJ1snIGlzIGludmFsaWQgaW4gYSBjaGFyYWN0ZXIgY2xhc3MuICBXcml0ZSAnXFxbJy4iOmhuKEY4dCx0KT8iJ10nIGlzIGludmFsaWQgaW4gYSBjaGFyYWN0ZXIgY2xhc3MuICBXcml0ZSAnXFxdJy4iOmhuKHV1dCx0KT8iJy0nIGlzIGFuIGludmFsaWQgY2hhcmFjdGVyIHJhbmdlLiBXcml0ZSAnXFwtJy4iOmhuKGgwZSx0KT8iJ1snIGlzIGV4cGVjdGVkLiI6aG4oZjBlLHQpPyInKScgb3IgJy1bJyBvciAnK1snIG9yICcmWycgaXMgZXhwZWN0ZWQuIjpobihkMGUsdCk/IlRoZSByYW5nZSBlbmQgY29kZSBwb2ludCBpcyBsZXNzIHRoYW4gdGhlIHN0YXJ0IGNvZGUgcG9pbnQuIjpobihRZyx0KT8iSW52YWxpZCBVbmljb2RlIGhleCBub3RhdGlvbi4iOmhuKGcwZSx0KT8iT3ZlcmZsb3cgaW4gYSBoZXggbm90YXRpb24uIjpobihwMGUsdCk/IidcXHh7JyBtdXN0IGJlIGNsb3NlZCBieSAnfScuIjpobihiMGUsdCk/IkludmFsaWQgVW5pY29kZSBjb2RlIHBvaW50LiI6aG4odzBlLHQpPyJBbiBhbmNob3IgbXVzdCBub3QgYmUgaGVyZS4iOmhuKGJoLHQpPyJUaGlzIGV4cHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBvcHRpb24gc2V0dGluZy4iOmhuKHYwZSx0KT8iSW52YWxpZCBxdWFudGlmaWVyLiBBIGRpZ2l0IGlzIGV4cGVjdGVkLiI6aG4obTBlLHQpPyJJbnZhbGlkIHF1YW50aWZpZXIuIEludmFsaWQgcXVhbnRpdHkgb3IgYSAnfScgaXMgbWlzc2luZy4iOmhuKHkwZSx0KT8iSW52YWxpZCBxdWFudGlmaWVyLiBBIGRpZ2l0IG9yICd9JyBpcyBleHBlY3RlZC4iOmhuKHgwZSx0KT8iSW52YWxpZCBxdWFudGlmaWVyLiBBIG1pbiBxdWFudGl0eSBtdXN0IGJlIDw9IGEgbWF4IHF1YW50aXR5LiI6aG4oTjh0LHQpPyJJbnZhbGlkIHF1YW50aWZpZXIuIEEgcXVhbnRpdHkgdmFsdWUgb3ZlcmZsb3cuIjpobigiX1VJX1BhY2thZ2VSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsdCk/IkVjb3JlIFBhY2thZ2UgUmVnaXN0cnkgZm9yIEdlbmVyYXRlZCBQYWNrYWdlcyI6aG4oIl9VSV9EeW5hbWljUGFja2FnZVJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50Iix0KT8iRWNvcmUgUGFja2FnZSBSZWdpc3RyeSBmb3IgRHluYW1pYyBQYWNrYWdlcyI6aG4oIl9VSV9GYWN0b3J5UmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLHQpPyJFY29yZSBGYWN0b3J5IE92ZXJyaWRlIFJlZ2lzdHJ5IjpobigiX1VJX1VSSUV4dGVuc2lvblBhcnNlclJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50Iix0KT8iVVJJIEV4dGVuc2lvbiBQYXJzZXIgUmVnaXN0cnkiOmhuKCJfVUlfVVJJUHJvdG9jb2xQYXJzZXJSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsdCk/IlVSSSBQcm90b2NvbCBQYXJzZXIgUmVnaXN0cnkiOmhuKCJfVUlfVVJJQ29udGVudFBhcnNlclJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50Iix0KT8iVVJJIENvbnRlbnQgUGFyc2VyIFJlZ2lzdHJ5IjpobigiX1VJX0NvbnRlbnRIYW5kbGVyUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLHQpPyJDb250ZW50IEhhbmRsZXIgUmVnaXN0cnkiOmhuKCJfVUlfVVJJTWFwcGluZ1JlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50Iix0KT8iVVJJIENvbnZlcnRlciBNYXBwaW5nIFJlZ2lzdHJ5IjpobigiX1VJX1BhY2thZ2VSZWdpc3RyeUltcGxlbWVudGF0aW9uX2V4dGVuc2lvbnBvaW50Iix0KT8iRWNvcmUgUGFja2FnZSBSZWdpc3RyeSBJbXBsZW1lbnRhdGlvbiI6aG4oIl9VSV9WYWxpZGF0aW9uRGVsZWdhdGVSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsdCk/IlZhbGlkYXRpb24gRGVsZWdhdGUgUmVnaXN0cnkiOmhuKCJfVUlfU2V0dGluZ0RlbGVnYXRlUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLHQpPyJGZWF0dXJlIFNldHRpbmcgRGVsZWdhdGUgRmFjdG9yeSBSZWdpc3RyeSI6aG4oIl9VSV9JbnZvY2F0aW9uRGVsZWdhdGVSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsdCk/Ik9wZXJhdGlvbiBJbnZvY2F0aW9uIERlbGVnYXRlIEZhY3RvcnkgUmVnaXN0cnkiOmhuKCJfVUlfRUNsYXNzSW50ZXJmYWNlTm90QWJzdHJhY3RfZGlhZ25vc3RpYyIsdCk/IkEgY2xhc3MgdGhhdCBpcyBhbiBpbnRlcmZhY2UgbXVzdCBhbHNvIGJlIGFic3RyYWN0IjpobigiX1VJX0VDbGFzc05vQ2lyY3VsYXJTdXBlclR5cGVzX2RpYWdub3N0aWMiLHQpPyJBIGNsYXNzIG1heSBub3QgYmUgYSBzdXBlciB0eXBlIG9mIGl0c2VsZiI6aG4oIl9VSV9FQ2xhc3NOb3RXZWxsRm9ybWVkTWFwRW50cnlOb0luc3RhbmNlQ2xhc3NOYW1lX2RpYWdub3N0aWMiLHQpPyJBIGNsYXNzIHRoYXQgaW5oZXJpdHMgZnJvbSBhIG1hcCBlbnRyeSBjbGFzcyBtdXN0IGhhdmUgaW5zdGFuY2UgY2xhc3MgbmFtZSAnamF2YS51dGlsLk1hcCRFbnRyeSciOmhuKCJfVUlfRVJlZmVyZW5jZU9wcG9zaXRlT2ZPcHBvc2l0ZUluY29uc2lzdGVudF9kaWFnbm9zdGljIix0KT8iVGhlIG9wcG9zaXRlIG9mIHRoZSBvcHBvc2l0ZSBtYXkgbm90IGJlIGEgcmVmZXJlbmNlIGRpZmZlcmVudCBmcm9tIHRoaXMgb25lIjpobigiX1VJX0VSZWZlcmVuY2VPcHBvc2l0ZU5vdEZlYXR1cmVPZlR5cGVfZGlhZ25vc3RpYyIsdCk/IlRoZSBvcHBvc2l0ZSBtdXN0IGJlIGEgZmVhdHVyZSBvZiB0aGUgcmVmZXJlbmNlJ3MgdHlwZSI6aG4oIl9VSV9FUmVmZXJlbmNlVHJhbnNpZW50T3Bwb3NpdGVOb3RUcmFuc2llbnRfZGlhZ25vc3RpYyIsdCk/IlRoZSBvcHBvc2l0ZSBvZiBhIHRyYW5zaWVudCByZWZlcmVuY2UgbXVzdCBiZSB0cmFuc2llbnQgaWYgaXQgaXMgcHJveHkgcmVzb2x2aW5nIjpobigiX1VJX0VSZWZlcmVuY2VPcHBvc2l0ZUJvdGhDb250YWlubWVudF9kaWFnbm9zdGljIix0KT8iVGhlIG9wcG9zaXRlIG9mIGEgY29udGFpbm1lbnQgcmVmZXJlbmNlIG11c3Qgbm90IGJlIGEgY29udGFpbm1lbnQgcmVmZXJlbmNlIjpobigiX1VJX0VSZWZlcmVuY2VDb25zaXN0ZW50VW5pcXVlX2RpYWdub3N0aWMiLHQpPyJBIGNvbnRhaW5tZW50IG9yIGJpZGlyZWN0aW9uYWwgcmVmZXJlbmNlIG11c3QgYmUgdW5pcXVlIGlmIGl0cyB1cHBlciBib3VuZCBpcyBkaWZmZXJlbnQgZnJvbSAxIjpobigiX1VJX0VUeXBlZEVsZW1lbnROb1R5cGVfZGlhZ25vc3RpYyIsdCk/IlRoZSB0eXBlZCBlbGVtZW50IG11c3QgaGF2ZSBhIHR5cGUiOmhuKCJfVUlfRUF0dHJpYnV0ZU5vRGF0YVR5cGVfZGlhZ25vc3RpYyIsdCk/IlRoZSBnZW5lcmljIGF0dHJpYnV0ZSB0eXBlIG11c3Qgbm90IHJlZmVyIHRvIGEgY2xhc3MiOmhuKCJfVUlfRVJlZmVyZW5jZU5vQ2xhc3NfZGlhZ25vc3RpYyIsdCk/IlRoZSBnZW5lcmljIHJlZmVyZW5jZSB0eXBlIG11c3Qgbm90IHJlZmVyIHRvIGEgZGF0YSB0eXBlIjpobigiX1VJX0VHZW5lcmljVHlwZU5vVHlwZVBhcmFtZXRlckFuZENsYXNzaWZpZXJfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIGNhbid0IHJlZmVyIHRvIGJvdGggYSB0eXBlIHBhcmFtZXRlciBhbmQgYSBjbGFzc2lmaWVyIjpobigiX1VJX0VHZW5lcmljVHlwZU5vQ2xhc3NfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyBzdXBlciB0eXBlIG11c3QgcmVmZXIgdG8gYSBjbGFzcyI6aG4oIl9VSV9FR2VuZXJpY1R5cGVOb1R5cGVQYXJhbWV0ZXJPckNsYXNzaWZpZXJfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIGluIHRoaXMgY29udGV4dCBtdXN0IHJlZmVyIHRvIGEgY2xhc3NpZmllciBvciBhIHR5cGUgcGFyYW1ldGVyIjpobigiX1VJX0VHZW5lcmljVHlwZUJvdW5kc09ubHlGb3JUeXBlQXJndW1lbnRfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIG1heSBoYXZlIGJvdW5kcyBvbmx5IHdoZW4gdXNlZCBhcyBhIHR5cGUgYXJndW1lbnQiOmhuKCJfVUlfRUdlbmVyaWNUeXBlTm9VcHBlckFuZExvd2VyQm91bmRfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIG11c3Qgbm90IGhhdmUgYm90aCBhIGxvd2VyIGFuZCBhbiB1cHBlciBib3VuZCI6aG4oIl9VSV9FR2VuZXJpY1R5cGVOb1R5cGVQYXJhbWV0ZXJPckNsYXNzaWZpZXJBbmRCb3VuZF9kaWFnbm9zdGljIix0KT8iQSBnZW5lcmljIHR5cGUgd2l0aCBib3VuZHMgbXVzdCBub3QgYWxzbyByZWZlciB0byBhIHR5cGUgcGFyYW1ldGVyIG9yIGNsYXNzaWZpZXIiOmhuKCJfVUlfRUdlbmVyaWNUeXBlTm9Bcmd1bWVudHNfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIG1heSBoYXZlIGFyZ3VtZW50cyBvbmx5IGlmIGl0IHJlZmVycyB0byBhIGNsYXNzaWZpZXIiOmhuKCJfVUlfRUdlbmVyaWNUeXBlT3V0T2ZTY29wZVR5cGVQYXJhbWV0ZXJfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIG1heSBvbmx5IHJlZmVyIHRvIGEgdHlwZSBwYXJhbWV0ZXIgdGhhdCBpcyBpbiBzY29wZSI6dH1mdW5jdGlvbiBWeG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLO3Qucnx8KHQucj0hMCxRYyh0LCJncmFwaCIpLGJ6KHQsImdyYXBoIiksd3oodCxaRSksRkQodC5vLCJUIiksRHIoQW8odC5hKSx0LnApLERyKEFvKHQuZiksdC5hKSxEcihBbyh0Lm4pLHQuZiksRHIoQW8odC5nKSx0Lm4pLERyKEFvKHQuYyksdC5uKSxEcihBbyh0LmkpLHQuYyksRHIoQW8odC5qKSx0LmMpLERyKEFvKHQuZCksdC5mKSxEcihBbyh0LmUpLHQuYSkscmModC5wLGE2bixRZmUsITAsITAsITEpLEc9YTQodC5wLHQucCwic2V0UHJvcGVydHkiKSxLPWFyZShHKSxrPU4wKHQubyksQz0obj0ocj1uZXcgeHcsciksbiksRHIoKCFrLmQmJihrLmQ9bmV3IEFzKGhvLGssMSkpLGsuZCksQyksTT1kcnQoSyksazR0KEMsTSksb3EoRyxrLHg4dCksaz1kcnQoSyksb3EoRyxrLFpfKSxHPWE0KHQucCxudWxsLCJnZXRQcm9wZXJ0eSIpLEs9YXJlKEcpLGs9TjAodC5vKSxDPWRydChLKSxEcigoIWsuZCYmKGsuZD1uZXcgQXMoaG8saywxKSksay5kKSxDKSxvcShHLGsseDh0KSxrPWRydChLKSxIPUYxKEcsayxudWxsKSxIJiZILkZpKCksRz1hNCh0LnAsdC53Yi5lLCJoYXNQcm9wZXJ0eSIpLGs9TjAodC5vKSxDPShzPShvPW5ldyB4dyxvKSxzKSxEcigoIWsuZCYmKGsuZD1uZXcgQXMoaG8saywxKSksay5kKSxDKSxvcShHLGsseDh0KSxHPWE0KHQucCx0LnAsImNvcHlQcm9wZXJ0aWVzIiksX28oRyx0LnAsWGN0KSxHPWE0KHQucCxudWxsLCJnZXRBbGxQcm9wZXJ0aWVzIiksaz1OMCh0LndiLlApLEM9TjAodC5vKSxEcigoIWsuZCYmKGsuZD1uZXcgQXMoaG8saywxKSksay5kKSxDKSxNPShoPShkPW5ldyB4dyxkKSxoKSxEcigoIUMuZCYmKEMuZD1uZXcgQXMoaG8sQywxKSksQy5kKSxNKSxDPU4wKHQud2IuTSksRHIoKCFrLmQmJihrLmQ9bmV3IEFzKGhvLGssMSkpLGsuZCksQyksaj1GMShHLGssbnVsbCksaiYmai5GaSgpLHJjKHQuYSxqNyxBZGUsITAsITEsITApLE5pKHUoQXQoV3QodC5hKSwwKSwxOCksdC5rLG51bGwsJGRlLDAsLTEsajcsITEsITEsITAsITAsITEsITEsITEpLHJjKHQuZixsUCxNZGUsITAsITEsITApLE5pKHUoQXQoV3QodC5mKSwwKSwxOCksdC5nLHUoQXQoV3QodC5nKSwwKSwxOCksImxhYmVscyIsMCwtMSxsUCwhMSwhMSwhMCwhMCwhMSwhMSwhMSksaHModShBdChXdCh0LmYpLDEpLDM0KSx0LndiLl8semRlLG51bGwsMCwxLGxQLCExLCExLCEwLCExLCEwLCExKSxyYyh0Lm4saFAsIkVsa1NoYXBlIiwhMCwhMSwhMCksaHModShBdChXdCh0Lm4pLDApLDM0KSx0LndiLnQsUWN0LCRFLDEsMSxoUCwhMSwhMSwhMCwhMSwhMCwhMSksaHModShBdChXdCh0Lm4pLDEpLDM0KSx0LndiLnQsWmN0LCRFLDEsMSxoUCwhMSwhMSwhMCwhMSwhMCwhMSksaHModShBdChXdCh0Lm4pLDIpLDM0KSx0LndiLnQsIngiLCRFLDEsMSxoUCwhMSwhMSwhMCwhMSwhMCwhMSksaHModShBdChXdCh0Lm4pLDMpLDM0KSx0LndiLnQsInkiLCRFLDEsMSxoUCwhMSwhMSwhMCwhMSwhMCwhMSksRz1hNCh0Lm4sbnVsbCwic2V0RGltZW5zaW9ucyIpLF9vKEcsdC53Yi50LFpjdCksX28oRyx0LndiLnQsUWN0KSxHPWE0KHQubixudWxsLCJzZXRMb2NhdGlvbiIpLF9vKEcsdC53Yi50LCJ4IiksX28oRyx0LndiLnQsInkiKSxyYyh0LmcscW8sdjh0LCExLCExLCEwKSxOaSh1KEF0KFd0KHQuZyksMCksMTgpLHQuZix1KEF0KFd0KHQuZiksMCksMTgpLEpjdCwwLDEscW8sITEsITEsITAsITEsITEsITEsITEpLGhzKHUoQXQoV3QodC5nKSwxKSwzNCksdC53Yi5fLHR1dCwiIiwwLDEscW8sITEsITEsITAsITEsITAsITEpLHJjKHQuYyxicixEZGUsITAsITEsITApLE5pKHUoQXQoV3QodC5jKSwwKSwxOCksdC5kLHUoQXQoV3QodC5kKSwxKSwxOCksIm91dGdvaW5nRWRnZXMiLDAsLTEsYnIsITEsITEsITAsITEsITAsITEsITEpLE5pKHUoQXQoV3QodC5jKSwxKSwxOCksdC5kLHUoQXQoV3QodC5kKSwyKSwxOCksImluY29taW5nRWRnZXMiLDAsLTEsYnIsITEsITEsITAsITEsITAsITEsITEpLHJjKHQuaSxycyxtOHQsITEsITEsITApLE5pKHUoQXQoV3QodC5pKSwwKSwxOCksdC5qLHUoQXQoV3QodC5qKSwwKSwxOCksInBvcnRzIiwwLC0xLHJzLCExLCExLCEwLCEwLCExLCExLCExKSxOaSh1KEF0KFd0KHQuaSksMSksMTgpLHQuaSx1KEF0KFd0KHQuaSksMiksMTgpLGV1dCwwLC0xLHJzLCExLCExLCEwLCEwLCExLCExLCExKSxOaSh1KEF0KFd0KHQuaSksMiksMTgpLHQuaSx1KEF0KFd0KHQuaSksMSksMTgpLEpjdCwwLDEscnMsITEsITEsITAsITEsITEsITEsITEpLE5pKHUoQXQoV3QodC5pKSwzKSwxOCksdC5kLHUoQXQoV3QodC5kKSwwKSwxOCksImNvbnRhaW5lZEVkZ2VzIiwwLC0xLHJzLCExLCExLCEwLCEwLCExLCExLCExKSxocyh1KEF0KFd0KHQuaSksNCksMzQpLHQud2IuZSxxZGUsbnVsbCwwLDEscnMsITAsITAsITEsITEsITAsITApLHJjKHQuaixnbCx5OHQsITEsITEsITApLE5pKHUoQXQoV3QodC5qKSwwKSwxOCksdC5pLHUoQXQoV3QodC5pKSwwKSwxOCksSmN0LDAsMSxnbCwhMSwhMSwhMCwhMSwhMSwhMSwhMSkscmModC5kLFlzLHc4dCwhMSwhMSwhMCksTmkodShBdChXdCh0LmQpLDApLDE4KSx0LmksdShBdChXdCh0LmkpLDMpLDE4KSwiY29udGFpbmluZ05vZGUiLDAsMSxZcywhMSwhMSwhMCwhMSwhMSwhMSwhMSksTmkodShBdChXdCh0LmQpLDEpLDE4KSx0LmMsdShBdChXdCh0LmMpLDApLDE4KSxrOHQsMCwtMSxZcywhMSwhMSwhMCwhMSwhMCwhMSwhMSksTmkodShBdChXdCh0LmQpLDIpLDE4KSx0LmMsdShBdChXdCh0LmMpLDEpLDE4KSxudXQsMCwtMSxZcywhMSwhMSwhMCwhMSwhMCwhMSwhMSksTmkodShBdChXdCh0LmQpLDMpLDE4KSx0LmUsdShBdChXdCh0LmUpLDUpLDE4KSxFOHQsMCwtMSxZcywhMSwhMSwhMCwhMCwhMSwhMSwhMSksaHModShBdChXdCh0LmQpLDQpLDM0KSx0LndiLmUsImh5cGVyZWRnZSIsbnVsbCwwLDEsWXMsITAsITAsITEsITEsITAsITApLGhzKHUoQXQoV3QodC5kKSw1KSwzNCksdC53Yi5lLHFkZSxudWxsLDAsMSxZcywhMCwhMCwhMSwhMSwhMCwhMCksaHModShBdChXdCh0LmQpLDYpLDM0KSx0LndiLmUsInNlbGZsb29wIixudWxsLDAsMSxZcywhMCwhMCwhMSwhMSwhMCwhMCksaHModShBdChXdCh0LmQpLDcpLDM0KSx0LndiLmUsImNvbm5lY3RlZCIsbnVsbCwwLDEsWXMsITAsITAsITEsITEsITAsITApLHJjKHQuYixHaCxMZGUsITEsITEsITApLGhzKHUoQXQoV3QodC5iKSwwKSwzNCksdC53Yi50LCJ4IiwkRSwxLDEsR2gsITEsITEsITAsITEsITAsITEpLGhzKHUoQXQoV3QodC5iKSwxKSwzNCksdC53Yi50LCJ5IiwkRSwxLDEsR2gsITEsITEsITAsITEsITAsITEpLEc9YTQodC5iLG51bGwsInNldCIpLF9vKEcsdC53Yi50LCJ4IiksX28oRyx0LndiLnQsInkiKSxyYyh0LmUsSmksSWRlLCExLCExLCEwKSxocyh1KEF0KFd0KHQuZSksMCksMzQpLHQud2IudCwic3RhcnRYIixudWxsLDAsMSxKaSwhMSwhMSwhMCwhMSwhMCwhMSksaHModShBdChXdCh0LmUpLDEpLDM0KSx0LndiLnQsInN0YXJ0WSIsbnVsbCwwLDEsSmksITEsITEsITAsITEsITAsITEpLGhzKHUoQXQoV3QodC5lKSwyKSwzNCksdC53Yi50LCJlbmRYIixudWxsLDAsMSxKaSwhMSwhMSwhMCwhMSwhMCwhMSksaHModShBdChXdCh0LmUpLDMpLDM0KSx0LndiLnQsImVuZFkiLG51bGwsMCwxLEppLCExLCExLCEwLCExLCEwLCExKSxOaSh1KEF0KFd0KHQuZSksNCksMTgpLHQuYixudWxsLExILDAsLTEsSmksITEsITEsITAsITAsITEsITEsITEpLE5pKHUoQXQoV3QodC5lKSw1KSwxOCksdC5kLHUoQXQoV3QodC5kKSwzKSwxOCksSmN0LDAsMSxKaSwhMSwhMSwhMCwhMSwhMSwhMSwhMSksTmkodShBdChXdCh0LmUpLDYpLDE4KSx0LmMsbnVsbCxUOHQsMCwxLEppLCExLCExLCEwLCExLCEwLCExLCExKSxOaSh1KEF0KFd0KHQuZSksNyksMTgpLHQuYyxudWxsLEM4dCwwLDEsSmksITEsITEsITAsITEsITAsITEsITEpLE5pKHUoQXQoV3QodC5lKSw4KSwxOCksdC5lLHUoQXQoV3QodC5lKSw5KSwxOCksXzh0LDAsLTEsSmksITEsITEsITAsITEsITAsITEsITEpLE5pKHUoQXQoV3QodC5lKSw5KSwxOCksdC5lLHUoQXQoV3QodC5lKSw4KSwxOCksUzh0LDAsLTEsSmksITEsITEsITAsITEsITAsITEsITEpLGhzKHUoQXQoV3QodC5lKSwxMCksMzQpLHQud2IuXyx6ZGUsbnVsbCwwLDEsSmksITEsITEsITAsITEsITAsITEpLEc9YTQodC5lLG51bGwsInNldFN0YXJ0TG9jYXRpb24iKSxfbyhHLHQud2IudCwieCIpLF9vKEcsdC53Yi50LCJ5IiksRz1hNCh0LmUsbnVsbCwic2V0RW5kTG9jYXRpb24iKSxfbyhHLHQud2IudCwieCIpLF9vKEcsdC53Yi50LCJ5IikscmModC5rLFAyLCJFbGtQcm9wZXJ0eVRvVmFsdWVNYXBFbnRyeSIsITEsITEsITEpLGs9TjAodC5vKSxDPSh2PShlPW5ldyB4dyxlKSx2KSxEcigoIWsuZCYmKGsuZD1uZXcgQXMoaG8saywxKSksay5kKSxDKSxhY2UodShBdChXdCh0LmspLDApLDM0KSxrLCJrZXkiLFAyLCExLCExLCEwLCExKSxocyh1KEF0KFd0KHQuayksMSksMzQpLHQucyxaXyxudWxsLDAsMSxQMiwhMSwhMSwhMCwhMSwhMCwhMSksYWkodC5vLGNmdCwiSVByb3BlcnR5IiwhMCksYWkodC5zLFFuLCJQcm9wZXJ0eVZhbHVlIiwhMCksS3l0KHQsWkUpKX1mdW5jdGlvbiBzZmUoKXtzZmU9Wix3dD1OdChHdSxONCwyNSxLYSwxNSwxKSx3dFs5XT0zNSx3dFsxMF09MTksd3RbMTNdPTE5LHd0WzMyXT01MSx3dFszM109NDksd3RbMzRdPTMzLGp0KHd0LDM1LDM4LDQ5KSx3dFszOF09MSxqdCh3dCwzOSw0NSw0OSksanQod3QsNDUsNDcsLTcxKSx3dFs0N109NDksanQod3QsNDgsNTgsLTcxKSx3dFs1OF09NjEsd3RbNTldPTQ5LHd0WzYwXT0xLHd0WzYxXT00OSx3dFs2Ml09MzMsanQod3QsNjMsNjUsNDkpLGp0KHd0LDY1LDkxLC0zKSxqdCh3dCw5MSw5MywzMyksd3RbOTNdPTEsd3RbOTRdPTMzLHd0Wzk1XT0tMyx3dFs5Nl09MzMsanQod3QsOTcsMTIzLC0zKSxqdCh3dCwxMjMsMTgzLDMzKSx3dFsxODNdPS04NyxqdCh3dCwxODQsMTkyLDMzKSxqdCh3dCwxOTIsMjE1LC0xOSksd3RbMjE1XT0zMyxqdCh3dCwyMTYsMjQ3LC0xOSksd3RbMjQ3XT0zMyxqdCh3dCwyNDgsMzA2LC0xOSksanQod3QsMzA2LDMwOCwzMyksanQod3QsMzA4LDMxOSwtMTkpLGp0KHd0LDMxOSwzMjEsMzMpLGp0KHd0LDMyMSwzMjksLTE5KSx3dFszMjldPTMzLGp0KHd0LDMzMCwzODMsLTE5KSx3dFszODNdPTMzLGp0KHd0LDM4NCw0NTIsLTE5KSxqdCh3dCw0NTIsNDYxLDMzKSxqdCh3dCw0NjEsNDk3LC0xOSksanQod3QsNDk3LDUwMCwzMyksanQod3QsNTAwLDUwMiwtMTkpLGp0KHd0LDUwMiw1MDYsMzMpLGp0KHd0LDUwNiw1MzYsLTE5KSxqdCh3dCw1MzYsNTkyLDMzKSxqdCh3dCw1OTIsNjgxLC0xOSksanQod3QsNjgxLDY5OSwzMyksanQod3QsNjk5LDcwNiwtMTkpLGp0KHd0LDcwNiw3MjAsMzMpLGp0KHd0LDcyMCw3MjIsLTg3KSxqdCh3dCw3MjIsNzY4LDMzKSxqdCh3dCw3NjgsODM4LC04NyksanQod3QsODM4LDg2NCwzMyksanQod3QsODY0LDg2NiwtODcpLGp0KHd0LDg2Niw5MDIsMzMpLHd0WzkwMl09LTE5LHd0WzkwM109LTg3LGp0KHd0LDkwNCw5MDcsLTE5KSx3dFs5MDddPTMzLHd0WzkwOF09LTE5LHd0WzkwOV09MzMsanQod3QsOTEwLDkzMCwtMTkpLHd0WzkzMF09MzMsanQod3QsOTMxLDk3NSwtMTkpLHd0Wzk3NV09MzMsanQod3QsOTc2LDk4MywtMTkpLGp0KHd0LDk4Myw5ODYsMzMpLHd0Wzk4Nl09LTE5LHd0Wzk4N109MzMsd3RbOTg4XT0tMTksd3RbOTg5XT0zMyx3dFs5OTBdPS0xOSx3dFs5OTFdPTMzLHd0Wzk5Ml09LTE5LHd0Wzk5M109MzMsanQod3QsOTk0LDEwMTIsLTE5KSxqdCh3dCwxMDEyLDEwMjUsMzMpLGp0KHd0LDEwMjUsMTAzNywtMTkpLHd0WzEwMzddPTMzLGp0KHd0LDEwMzgsMTEwNCwtMTkpLHd0WzExMDRdPTMzLGp0KHd0LDExMDUsMTExNywtMTkpLHd0WzExMTddPTMzLGp0KHd0LDExMTgsMTE1NCwtMTkpLHd0WzExNTRdPTMzLGp0KHd0LDExNTUsMTE1OSwtODcpLGp0KHd0LDExNTksMTE2OCwzMyksanQod3QsMTE2OCwxMjIxLC0xOSksanQod3QsMTIyMSwxMjIzLDMzKSxqdCh3dCwxMjIzLDEyMjUsLTE5KSxqdCh3dCwxMjI1LDEyMjcsMzMpLGp0KHd0LDEyMjcsMTIyOSwtMTkpLGp0KHd0LDEyMjksMTIzMiwzMyksanQod3QsMTIzMiwxMjYwLC0xOSksanQod3QsMTI2MCwxMjYyLDMzKSxqdCh3dCwxMjYyLDEyNzAsLTE5KSxqdCh3dCwxMjcwLDEyNzIsMzMpLGp0KHd0LDEyNzIsMTI3NCwtMTkpLGp0KHd0LDEyNzQsMTMyOSwzMyksanQod3QsMTMyOSwxMzY3LC0xOSksanQod3QsMTM2NywxMzY5LDMzKSx3dFsxMzY5XT0tMTksanQod3QsMTM3MCwxMzc3LDMzKSxqdCh3dCwxMzc3LDE0MTUsLTE5KSxqdCh3dCwxNDE1LDE0MjUsMzMpLGp0KHd0LDE0MjUsMTQ0MiwtODcpLHd0WzE0NDJdPTMzLGp0KHd0LDE0NDMsMTQ2NiwtODcpLHd0WzE0NjZdPTMzLGp0KHd0LDE0NjcsMTQ3MCwtODcpLHd0WzE0NzBdPTMzLHd0WzE0NzFdPS04Nyx3dFsxNDcyXT0zMyxqdCh3dCwxNDczLDE0NzUsLTg3KSx3dFsxNDc1XT0zMyx3dFsxNDc2XT0tODcsanQod3QsMTQ3NywxNDg4LDMzKSxqdCh3dCwxNDg4LDE1MTUsLTE5KSxqdCh3dCwxNTE1LDE1MjAsMzMpLGp0KHd0LDE1MjAsMTUyMywtMTkpLGp0KHd0LDE1MjMsMTU2OSwzMyksanQod3QsMTU2OSwxNTk1LC0xOSksanQod3QsMTU5NSwxNjAwLDMzKSx3dFsxNjAwXT0tODcsanQod3QsMTYwMSwxNjExLC0xOSksanQod3QsMTYxMSwxNjE5LC04NyksanQod3QsMTYxOSwxNjMyLDMzKSxqdCh3dCwxNjMyLDE2NDIsLTg3KSxqdCh3dCwxNjQyLDE2NDgsMzMpLHd0WzE2NDhdPS04NyxqdCh3dCwxNjQ5LDE3MjAsLTE5KSxqdCh3dCwxNzIwLDE3MjIsMzMpLGp0KHd0LDE3MjIsMTcyNywtMTkpLHd0WzE3MjddPTMzLGp0KHd0LDE3MjgsMTc0MywtMTkpLHd0WzE3NDNdPTMzLGp0KHd0LDE3NDQsMTc0OCwtMTkpLHd0WzE3NDhdPTMzLHd0WzE3NDldPS0xOSxqdCh3dCwxNzUwLDE3NjUsLTg3KSxqdCh3dCwxNzY1LDE3NjcsLTE5KSxqdCh3dCwxNzY3LDE3NjksLTg3KSx3dFsxNzY5XT0zMyxqdCh3dCwxNzcwLDE3NzQsLTg3KSxqdCh3dCwxNzc0LDE3NzYsMzMpLGp0KHd0LDE3NzYsMTc4NiwtODcpLGp0KHd0LDE3ODYsMjMwNSwzMyksanQod3QsMjMwNSwyMzA4LC04Nyksd3RbMjMwOF09MzMsanQod3QsMjMwOSwyMzYyLC0xOSksanQod3QsMjM2MiwyMzY0LDMzKSx3dFsyMzY0XT0tODcsd3RbMjM2NV09LTE5LGp0KHd0LDIzNjYsMjM4MiwtODcpLGp0KHd0LDIzODIsMjM4NSwzMyksanQod3QsMjM4NSwyMzg5LC04NyksanQod3QsMjM4OSwyMzkyLDMzKSxqdCh3dCwyMzkyLDI0MDIsLTE5KSxqdCh3dCwyNDAyLDI0MDQsLTg3KSxqdCh3dCwyNDA0LDI0MDYsMzMpLGp0KHd0LDI0MDYsMjQxNiwtODcpLGp0KHd0LDI0MTYsMjQzMywzMyksanQod3QsMjQzMywyNDM2LC04Nyksd3RbMjQzNl09MzMsanQod3QsMjQzNywyNDQ1LC0xOSksanQod3QsMjQ0NSwyNDQ3LDMzKSxqdCh3dCwyNDQ3LDI0NDksLTE5KSxqdCh3dCwyNDQ5LDI0NTEsMzMpLGp0KHd0LDI0NTEsMjQ3MywtMTkpLHd0WzI0NzNdPTMzLGp0KHd0LDI0NzQsMjQ4MSwtMTkpLHd0WzI0ODFdPTMzLHd0WzI0ODJdPS0xOSxqdCh3dCwyNDgzLDI0ODYsMzMpLGp0KHd0LDI0ODYsMjQ5MCwtMTkpLGp0KHd0LDI0OTAsMjQ5MiwzMyksd3RbMjQ5Ml09LTg3LHd0WzI0OTNdPTMzLGp0KHd0LDI0OTQsMjUwMSwtODcpLGp0KHd0LDI1MDEsMjUwMywzMyksanQod3QsMjUwMywyNTA1LC04NyksanQod3QsMjUwNSwyNTA3LDMzKSxqdCh3dCwyNTA3LDI1MTAsLTg3KSxqdCh3dCwyNTEwLDI1MTksMzMpLHd0WzI1MTldPS04NyxqdCh3dCwyNTIwLDI1MjQsMzMpLGp0KHd0LDI1MjQsMjUyNiwtMTkpLHd0WzI1MjZdPTMzLGp0KHd0LDI1MjcsMjUzMCwtMTkpLGp0KHd0LDI1MzAsMjUzMiwtODcpLGp0KHd0LDI1MzIsMjUzNCwzMyksanQod3QsMjUzNCwyNTQ0LC04NyksanQod3QsMjU0NCwyNTQ2LC0xOSksanQod3QsMjU0NiwyNTYyLDMzKSx3dFsyNTYyXT0tODcsanQod3QsMjU2MywyNTY1LDMzKSxqdCh3dCwyNTY1LDI1NzEsLTE5KSxqdCh3dCwyNTcxLDI1NzUsMzMpLGp0KHd0LDI1NzUsMjU3NywtMTkpLGp0KHd0LDI1NzcsMjU3OSwzMyksanQod3QsMjU3OSwyNjAxLC0xOSksd3RbMjYwMV09MzMsanQod3QsMjYwMiwyNjA5LC0xOSksd3RbMjYwOV09MzMsanQod3QsMjYxMCwyNjEyLC0xOSksd3RbMjYxMl09MzMsanQod3QsMjYxMywyNjE1LC0xOSksd3RbMjYxNV09MzMsanQod3QsMjYxNiwyNjE4LC0xOSksanQod3QsMjYxOCwyNjIwLDMzKSx3dFsyNjIwXT0tODcsd3RbMjYyMV09MzMsanQod3QsMjYyMiwyNjI3LC04NyksanQod3QsMjYyNywyNjMxLDMzKSxqdCh3dCwyNjMxLDI2MzMsLTg3KSxqdCh3dCwyNjMzLDI2MzUsMzMpLGp0KHd0LDI2MzUsMjYzOCwtODcpLGp0KHd0LDI2MzgsMjY0OSwzMyksanQod3QsMjY0OSwyNjUzLC0xOSksd3RbMjY1M109MzMsd3RbMjY1NF09LTE5LGp0KHd0LDI2NTUsMjY2MiwzMyksanQod3QsMjY2MiwyNjc0LC04NyksanQod3QsMjY3NCwyNjc3LC0xOSksanQod3QsMjY3NywyNjg5LDMzKSxqdCh3dCwyNjg5LDI2OTIsLTg3KSx3dFsyNjkyXT0zMyxqdCh3dCwyNjkzLDI3MDAsLTE5KSx3dFsyNzAwXT0zMyx3dFsyNzAxXT0tMTksd3RbMjcwMl09MzMsanQod3QsMjcwMywyNzA2LC0xOSksd3RbMjcwNl09MzMsanQod3QsMjcwNywyNzI5LC0xOSksd3RbMjcyOV09MzMsanQod3QsMjczMCwyNzM3LC0xOSksd3RbMjczN109MzMsanQod3QsMjczOCwyNzQwLC0xOSksd3RbMjc0MF09MzMsanQod3QsMjc0MSwyNzQ2LC0xOSksanQod3QsMjc0NiwyNzQ4LDMzKSx3dFsyNzQ4XT0tODcsd3RbMjc0OV09LTE5LGp0KHd0LDI3NTAsMjc1OCwtODcpLHd0WzI3NThdPTMzLGp0KHd0LDI3NTksMjc2MiwtODcpLHd0WzI3NjJdPTMzLGp0KHd0LDI3NjMsMjc2NiwtODcpLGp0KHd0LDI3NjYsMjc4NCwzMyksd3RbMjc4NF09LTE5LGp0KHd0LDI3ODUsMjc5MCwzMyksanQod3QsMjc5MCwyODAwLC04NyksanQod3QsMjgwMCwyODE3LDMzKSxqdCh3dCwyODE3LDI4MjAsLTg3KSx3dFsyODIwXT0zMyxqdCh3dCwyODIxLDI4MjksLTE5KSxqdCh3dCwyODI5LDI4MzEsMzMpLGp0KHd0LDI4MzEsMjgzMywtMTkpLGp0KHd0LDI4MzMsMjgzNSwzMyksanQod3QsMjgzNSwyODU3LC0xOSksd3RbMjg1N109MzMsanQod3QsMjg1OCwyODY1LC0xOSksd3RbMjg2NV09MzMsanQod3QsMjg2NiwyODY4LC0xOSksanQod3QsMjg2OCwyODcwLDMzKSxqdCh3dCwyODcwLDI4NzQsLTE5KSxqdCh3dCwyODc0LDI4NzYsMzMpLHd0WzI4NzZdPS04Nyx3dFsyODc3XT0tMTksanQod3QsMjg3OCwyODg0LC04NyksanQod3QsMjg4NCwyODg3LDMzKSxqdCh3dCwyODg3LDI4ODksLTg3KSxqdCh3dCwyODg5LDI4OTEsMzMpLGp0KHd0LDI4OTEsMjg5NCwtODcpLGp0KHd0LDI4OTQsMjkwMiwzMyksanQod3QsMjkwMiwyOTA0LC04NyksanQod3QsMjkwNCwyOTA4LDMzKSxqdCh3dCwyOTA4LDI5MTAsLTE5KSx3dFsyOTEwXT0zMyxqdCh3dCwyOTExLDI5MTQsLTE5KSxqdCh3dCwyOTE0LDI5MTgsMzMpLGp0KHd0LDI5MTgsMjkyOCwtODcpLGp0KHd0LDI5MjgsMjk0NiwzMyksanQod3QsMjk0NiwyOTQ4LC04Nyksd3RbMjk0OF09MzMsanQod3QsMjk0OSwyOTU1LC0xOSksanQod3QsMjk1NSwyOTU4LDMzKSxqdCh3dCwyOTU4LDI5NjEsLTE5KSx3dFsyOTYxXT0zMyxqdCh3dCwyOTYyLDI5NjYsLTE5KSxqdCh3dCwyOTY2LDI5NjksMzMpLGp0KHd0LDI5NjksMjk3MSwtMTkpLHd0WzI5NzFdPTMzLHd0WzI5NzJdPS0xOSx3dFsyOTczXT0zMyxqdCh3dCwyOTc0LDI5NzYsLTE5KSxqdCh3dCwyOTc2LDI5NzksMzMpLGp0KHd0LDI5NzksMjk4MSwtMTkpLGp0KHd0LDI5ODEsMjk4NCwzMyksanQod3QsMjk4NCwyOTg3LC0xOSksanQod3QsMjk4NywyOTkwLDMzKSxqdCh3dCwyOTkwLDI5OTgsLTE5KSx3dFsyOTk4XT0zMyxqdCh3dCwyOTk5LDMwMDIsLTE5KSxqdCh3dCwzMDAyLDMwMDYsMzMpLGp0KHd0LDMwMDYsMzAxMSwtODcpLGp0KHd0LDMwMTEsMzAxNCwzMyksanQod3QsMzAxNCwzMDE3LC04Nyksd3RbMzAxN109MzMsanQod3QsMzAxOCwzMDIyLC04NyksanQod3QsMzAyMiwzMDMxLDMzKSx3dFszMDMxXT0tODcsanQod3QsMzAzMiwzMDQ3LDMzKSxqdCh3dCwzMDQ3LDMwNTYsLTg3KSxqdCh3dCwzMDU2LDMwNzMsMzMpLGp0KHd0LDMwNzMsMzA3NiwtODcpLHd0WzMwNzZdPTMzLGp0KHd0LDMwNzcsMzA4NSwtMTkpLHd0WzMwODVdPTMzLGp0KHd0LDMwODYsMzA4OSwtMTkpLHd0WzMwODldPTMzLGp0KHd0LDMwOTAsMzExMywtMTkpLHd0WzMxMTNdPTMzLGp0KHd0LDMxMTQsMzEyNCwtMTkpLHd0WzMxMjRdPTMzLGp0KHd0LDMxMjUsMzEzMCwtMTkpLGp0KHd0LDMxMzAsMzEzNCwzMyksanQod3QsMzEzNCwzMTQxLC04Nyksd3RbMzE0MV09MzMsanQod3QsMzE0MiwzMTQ1LC04Nyksd3RbMzE0NV09MzMsanQod3QsMzE0NiwzMTUwLC04NyksanQod3QsMzE1MCwzMTU3LDMzKSxqdCh3dCwzMTU3LDMxNTksLTg3KSxqdCh3dCwzMTU5LDMxNjgsMzMpLGp0KHd0LDMxNjgsMzE3MCwtMTkpLGp0KHd0LDMxNzAsMzE3NCwzMyksanQod3QsMzE3NCwzMTg0LC04NyksanQod3QsMzE4NCwzMjAyLDMzKSxqdCh3dCwzMjAyLDMyMDQsLTg3KSx3dFszMjA0XT0zMyxqdCh3dCwzMjA1LDMyMTMsLTE5KSx3dFszMjEzXT0zMyxqdCh3dCwzMjE0LDMyMTcsLTE5KSx3dFszMjE3XT0zMyxqdCh3dCwzMjE4LDMyNDEsLTE5KSx3dFszMjQxXT0zMyxqdCh3dCwzMjQyLDMyNTIsLTE5KSx3dFszMjUyXT0zMyxqdCh3dCwzMjUzLDMyNTgsLTE5KSxqdCh3dCwzMjU4LDMyNjIsMzMpLGp0KHd0LDMyNjIsMzI2OSwtODcpLHd0WzMyNjldPTMzLGp0KHd0LDMyNzAsMzI3MywtODcpLHd0WzMyNzNdPTMzLGp0KHd0LDMyNzQsMzI3OCwtODcpLGp0KHd0LDMyNzgsMzI4NSwzMyksanQod3QsMzI4NSwzMjg3LC04NyksanQod3QsMzI4NywzMjk0LDMzKSx3dFszMjk0XT0tMTksd3RbMzI5NV09MzMsanQod3QsMzI5NiwzMjk4LC0xOSksanQod3QsMzI5OCwzMzAyLDMzKSxqdCh3dCwzMzAyLDMzMTIsLTg3KSxqdCh3dCwzMzEyLDMzMzAsMzMpLGp0KHd0LDMzMzAsMzMzMiwtODcpLHd0WzMzMzJdPTMzLGp0KHd0LDMzMzMsMzM0MSwtMTkpLHd0WzMzNDFdPTMzLGp0KHd0LDMzNDIsMzM0NSwtMTkpLHd0WzMzNDVdPTMzLGp0KHd0LDMzNDYsMzM2OSwtMTkpLHd0WzMzNjldPTMzLGp0KHd0LDMzNzAsMzM4NiwtMTkpLGp0KHd0LDMzODYsMzM5MCwzMyksanQod3QsMzM5MCwzMzk2LC04NyksanQod3QsMzM5NiwzMzk4LDMzKSxqdCh3dCwzMzk4LDM0MDEsLTg3KSx3dFszNDAxXT0zMyxqdCh3dCwzNDAyLDM0MDYsLTg3KSxqdCh3dCwzNDA2LDM0MTUsMzMpLHd0WzM0MTVdPS04NyxqdCh3dCwzNDE2LDM0MjQsMzMpLGp0KHd0LDM0MjQsMzQyNiwtMTkpLGp0KHd0LDM0MjYsMzQzMCwzMyksanQod3QsMzQzMCwzNDQwLC04NyksanQod3QsMzQ0MCwzNTg1LDMzKSxqdCh3dCwzNTg1LDM2MzEsLTE5KSx3dFszNjMxXT0zMyx3dFszNjMyXT0tMTksd3RbMzYzM109LTg3LGp0KHd0LDM2MzQsMzYzNiwtMTkpLGp0KHd0LDM2MzYsMzY0MywtODcpLGp0KHd0LDM2NDMsMzY0OCwzMyksanQod3QsMzY0OCwzNjU0LC0xOSksanQod3QsMzY1NCwzNjYzLC04Nyksd3RbMzY2M109MzMsanQod3QsMzY2NCwzNjc0LC04NyksanQod3QsMzY3NCwzNzEzLDMzKSxqdCh3dCwzNzEzLDM3MTUsLTE5KSx3dFszNzE1XT0zMyx3dFszNzE2XT0tMTksanQod3QsMzcxNywzNzE5LDMzKSxqdCh3dCwzNzE5LDM3MjEsLTE5KSx3dFszNzIxXT0zMyx3dFszNzIyXT0tMTksanQod3QsMzcyMywzNzI1LDMzKSx3dFszNzI1XT0tMTksanQod3QsMzcyNiwzNzMyLDMzKSxqdCh3dCwzNzMyLDM3MzYsLTE5KSx3dFszNzM2XT0zMyxqdCh3dCwzNzM3LDM3NDQsLTE5KSx3dFszNzQ0XT0zMyxqdCh3dCwzNzQ1LDM3NDgsLTE5KSx3dFszNzQ4XT0zMyx3dFszNzQ5XT0tMTksd3RbMzc1MF09MzMsd3RbMzc1MV09LTE5LGp0KHd0LDM3NTIsMzc1NCwzMyksanQod3QsMzc1NCwzNzU2LC0xOSksd3RbMzc1Nl09MzMsanQod3QsMzc1NywzNzU5LC0xOSksd3RbMzc1OV09MzMsd3RbMzc2MF09LTE5LHd0WzM3NjFdPS04NyxqdCh3dCwzNzYyLDM3NjQsLTE5KSxqdCh3dCwzNzY0LDM3NzAsLTg3KSx3dFszNzcwXT0zMyxqdCh3dCwzNzcxLDM3NzMsLTg3KSx3dFszNzczXT0tMTksanQod3QsMzc3NCwzNzc2LDMzKSxqdCh3dCwzNzc2LDM3ODEsLTE5KSx3dFszNzgxXT0zMyx3dFszNzgyXT0tODcsd3RbMzc4M109MzMsanQod3QsMzc4NCwzNzkwLC04NyksanQod3QsMzc5MCwzNzkyLDMzKSxqdCh3dCwzNzkyLDM4MDIsLTg3KSxqdCh3dCwzODAyLDM4NjQsMzMpLGp0KHd0LDM4NjQsMzg2NiwtODcpLGp0KHd0LDM4NjYsMzg3MiwzMyksanQod3QsMzg3MiwzODgyLC04NyksanQod3QsMzg4MiwzODkzLDMzKSx3dFszODkzXT0tODcsd3RbMzg5NF09MzMsd3RbMzg5NV09LTg3LHd0WzM4OTZdPTMzLHd0WzM4OTddPS04NyxqdCh3dCwzODk4LDM5MDIsMzMpLGp0KHd0LDM5MDIsMzkwNCwtODcpLGp0KHd0LDM5MDQsMzkxMiwtMTkpLHd0WzM5MTJdPTMzLGp0KHd0LDM5MTMsMzk0NiwtMTkpLGp0KHd0LDM5NDYsMzk1MywzMyksanQod3QsMzk1MywzOTczLC04Nyksd3RbMzk3M109MzMsanQod3QsMzk3NCwzOTgwLC04NyksanQod3QsMzk4MCwzOTg0LDMzKSxqdCh3dCwzOTg0LDM5OTAsLTg3KSx3dFszOTkwXT0zMyx3dFszOTkxXT0tODcsd3RbMzk5Ml09MzMsanQod3QsMzk5Myw0MDE0LC04NyksanQod3QsNDAxNCw0MDE3LDMzKSxqdCh3dCw0MDE3LDQwMjQsLTg3KSx3dFs0MDI0XT0zMyx3dFs0MDI1XT0tODcsanQod3QsNDAyNiw0MjU2LDMzKSxqdCh3dCw0MjU2LDQyOTQsLTE5KSxqdCh3dCw0Mjk0LDQzMDQsMzMpLGp0KHd0LDQzMDQsNDM0MywtMTkpLGp0KHd0LDQzNDMsNDM1MiwzMyksd3RbNDM1Ml09LTE5LHd0WzQzNTNdPTMzLGp0KHd0LDQzNTQsNDM1NiwtMTkpLHd0WzQzNTZdPTMzLGp0KHd0LDQzNTcsNDM2MCwtMTkpLHd0WzQzNjBdPTMzLHd0WzQzNjFdPS0xOSx3dFs0MzYyXT0zMyxqdCh3dCw0MzYzLDQzNjUsLTE5KSx3dFs0MzY1XT0zMyxqdCh3dCw0MzY2LDQzNzEsLTE5KSxqdCh3dCw0MzcxLDQ0MTIsMzMpLHd0WzQ0MTJdPS0xOSx3dFs0NDEzXT0zMyx3dFs0NDE0XT0tMTksd3RbNDQxNV09MzMsd3RbNDQxNl09LTE5LGp0KHd0LDQ0MTcsNDQyOCwzMyksd3RbNDQyOF09LTE5LHd0WzQ0MjldPTMzLHd0WzQ0MzBdPS0xOSx3dFs0NDMxXT0zMyx3dFs0NDMyXT0tMTksanQod3QsNDQzMyw0NDM2LDMzKSxqdCh3dCw0NDM2LDQ0MzgsLTE5KSxqdCh3dCw0NDM4LDQ0NDEsMzMpLHd0WzQ0NDFdPS0xOSxqdCh3dCw0NDQyLDQ0NDcsMzMpLGp0KHd0LDQ0NDcsNDQ1MCwtMTkpLHd0WzQ0NTBdPTMzLHd0WzQ0NTFdPS0xOSx3dFs0NDUyXT0zMyx3dFs0NDUzXT0tMTksd3RbNDQ1NF09MzMsd3RbNDQ1NV09LTE5LHd0WzQ0NTZdPTMzLHd0WzQ0NTddPS0xOSxqdCh3dCw0NDU4LDQ0NjEsMzMpLGp0KHd0LDQ0NjEsNDQ2MywtMTkpLGp0KHd0LDQ0NjMsNDQ2NiwzMyksanQod3QsNDQ2Niw0NDY4LC0xOSksd3RbNDQ2OF09MzMsd3RbNDQ2OV09LTE5LGp0KHd0LDQ0NzAsNDUxMCwzMyksd3RbNDUxMF09LTE5LGp0KHd0LDQ1MTEsNDUyMCwzMyksd3RbNDUyMF09LTE5LGp0KHd0LDQ1MjEsNDUyMywzMyksd3RbNDUyM109LTE5LGp0KHd0LDQ1MjQsNDUyNiwzMyksanQod3QsNDUyNiw0NTI4LC0xOSksanQod3QsNDUyOCw0NTM1LDMzKSxqdCh3dCw0NTM1LDQ1MzcsLTE5KSx3dFs0NTM3XT0zMyx3dFs0NTM4XT0tMTksd3RbNDUzOV09MzMsanQod3QsNDU0MCw0NTQ3LC0xOSksanQod3QsNDU0Nyw0NTg3LDMzKSx3dFs0NTg3XT0tMTksanQod3QsNDU4OCw0NTkyLDMzKSx3dFs0NTkyXT0tMTksanQod3QsNDU5Myw0NjAxLDMzKSx3dFs0NjAxXT0tMTksanQod3QsNDYwMiw3NjgwLDMzKSxqdCh3dCw3NjgwLDc4MzYsLTE5KSxqdCh3dCw3ODM2LDc4NDAsMzMpLGp0KHd0LDc4NDAsNzkzMCwtMTkpLGp0KHd0LDc5MzAsNzkzNiwzMyksanQod3QsNzkzNiw3OTU4LC0xOSksanQod3QsNzk1OCw3OTYwLDMzKSxqdCh3dCw3OTYwLDc5NjYsLTE5KSxqdCh3dCw3OTY2LDc5NjgsMzMpLGp0KHd0LDc5NjgsODAwNiwtMTkpLGp0KHd0LDgwMDYsODAwOCwzMyksanQod3QsODAwOCw4MDE0LC0xOSksanQod3QsODAxNCw4MDE2LDMzKSxqdCh3dCw4MDE2LDgwMjQsLTE5KSx3dFs4MDI0XT0zMyx3dFs4MDI1XT0tMTksd3RbODAyNl09MzMsd3RbODAyN109LTE5LHd0WzgwMjhdPTMzLHd0WzgwMjldPS0xOSx3dFs4MDMwXT0zMyxqdCh3dCw4MDMxLDgwNjIsLTE5KSxqdCh3dCw4MDYyLDgwNjQsMzMpLGp0KHd0LDgwNjQsODExNywtMTkpLHd0WzgxMTddPTMzLGp0KHd0LDgxMTgsODEyNSwtMTkpLHd0WzgxMjVdPTMzLHd0WzgxMjZdPS0xOSxqdCh3dCw4MTI3LDgxMzAsMzMpLGp0KHd0LDgxMzAsODEzMywtMTkpLHd0WzgxMzNdPTMzLGp0KHd0LDgxMzQsODE0MSwtMTkpLGp0KHd0LDgxNDEsODE0NCwzMyksanQod3QsODE0NCw4MTQ4LC0xOSksanQod3QsODE0OCw4MTUwLDMzKSxqdCh3dCw4MTUwLDgxNTYsLTE5KSxqdCh3dCw4MTU2LDgxNjAsMzMpLGp0KHd0LDgxNjAsODE3MywtMTkpLGp0KHd0LDgxNzMsODE3OCwzMyksanQod3QsODE3OCw4MTgxLC0xOSksd3RbODE4MV09MzMsanQod3QsODE4Miw4MTg5LC0xOSksanQod3QsODE4OSw4NDAwLDMzKSxqdCh3dCw4NDAwLDg0MTMsLTg3KSxqdCh3dCw4NDEzLDg0MTcsMzMpLHd0Wzg0MTddPS04NyxqdCh3dCw4NDE4LDg0ODYsMzMpLHd0Wzg0ODZdPS0xOSxqdCh3dCw4NDg3LDg0OTAsMzMpLGp0KHd0LDg0OTAsODQ5MiwtMTkpLGp0KHd0LDg0OTIsODQ5NCwzMyksd3RbODQ5NF09LTE5LGp0KHd0LDg0OTUsODU3NiwzMyksanQod3QsODU3Niw4NTc5LC0xOSksanQod3QsODU3OSwxMjI5MywzMyksd3RbMTIyOTNdPS04Nyx3dFsxMjI5NF09MzMsd3RbMTIyOTVdPS0xOSxqdCh3dCwxMjI5NiwxMjMyMSwzMyksanQod3QsMTIzMjEsMTIzMzAsLTE5KSxqdCh3dCwxMjMzMCwxMjMzNiwtODcpLHd0WzEyMzM2XT0zMyxqdCh3dCwxMjMzNywxMjM0MiwtODcpLGp0KHd0LDEyMzQyLDEyMzUzLDMzKSxqdCh3dCwxMjM1MywxMjQzNywtMTkpLGp0KHd0LDEyNDM3LDEyNDQxLDMzKSxqdCh3dCwxMjQ0MSwxMjQ0MywtODcpLGp0KHd0LDEyNDQzLDEyNDQ1LDMzKSxqdCh3dCwxMjQ0NSwxMjQ0NywtODcpLGp0KHd0LDEyNDQ3LDEyNDQ5LDMzKSxqdCh3dCwxMjQ0OSwxMjUzOSwtMTkpLHd0WzEyNTM5XT0zMyxqdCh3dCwxMjU0MCwxMjU0MywtODcpLGp0KHd0LDEyNTQzLDEyNTQ5LDMzKSxqdCh3dCwxMjU0OSwxMjU4OSwtMTkpLGp0KHd0LDEyNTg5LDE5OTY4LDMzKSxqdCh3dCwxOTk2OCw0MDg3MCwtMTkpLGp0KHd0LDQwODcwLDQ0MDMyLDMzKSxqdCh3dCw0NDAzMiw1NTIwNCwtMTkpLGp0KHd0LDU1MjA0LFJJLDMzKSxqdCh3dCw1NzM0NCw2NTUzNCwzMyl9ZnVuY3Rpb24gR3huKHQpe3ZhciBlLG4scixzLG8saCxkO3QuaGJ8fCh0LmhiPSEwLFFjKHQsImVjb3JlIiksYnoodCwiZWNvcmUiKSx3eih0LEJoKSxGRCh0LmZiLCJFIiksRkQodC5MLCJUIiksRkQodC5QLCJLIiksRkQodC5QLCJWIiksRkQodC5jYiwiRSIpLERyKEFvKHQuYiksdC5iYiksRHIoQW8odC5hKSx0LlEpLERyKEFvKHQubyksdC5wKSxEcihBbyh0LnApLHQuUiksRHIoQW8odC5xKSx0LnApLERyKEFvKHQudiksdC5xKSxEcihBbyh0LncpLHQuUiksRHIoQW8odC5CKSx0LlEpLERyKEFvKHQuUiksdC5RKSxEcihBbyh0LlQpLHQuZWIpLERyKEFvKHQuVSksdC5SKSxEcihBbyh0LlYpLHQuZWIpLERyKEFvKHQuVyksdC5iYiksRHIoQW8odC5iYiksdC5lYiksRHIoQW8odC5lYiksdC5SKSxEcihBbyh0LmRiKSx0LlIpLHJjKHQuYixlMyxEMGUsITEsITEsITApLGhzKHUoQXQoV3QodC5iKSwwKSwzNCksdC5lLCJpRCIsbnVsbCwwLDEsZTMsITEsITEsITAsITEsITAsITEpLE5pKHUoQXQoV3QodC5iKSwxKSwxOCksdC5xLG51bGwsImVBdHRyaWJ1dGVUeXBlIiwxLDEsZTMsITAsITAsITEsITEsITAsITEsITApLHJjKHQuYSxacixBMGUsITEsITEsITApLGhzKHUoQXQoV3QodC5hKSwwKSwzNCksdC5fLFhjdCxudWxsLDAsMSxaciwhMSwhMSwhMCwhMSwhMCwhMSksTmkodShBdChXdCh0LmEpLDEpLDE4KSx0LmFiLG51bGwsImRldGFpbHMiLDAsLTEsWnIsITEsITEsITAsITAsITEsITEsITEpLE5pKHUoQXQoV3QodC5hKSwyKSwxOCksdC5RLHUoQXQoV3QodC5RKSwwKSwxOCksImVNb2RlbEVsZW1lbnQiLDAsMSxaciwhMCwhMSwhMCwhMSwhMSwhMSwhMSksTmkodShBdChXdCh0LmEpLDMpLDE4KSx0LlMsbnVsbCwiY29udGVudHMiLDAsLTEsWnIsITEsITEsITAsITAsITEsITEsITEpLE5pKHUoQXQoV3QodC5hKSw0KSwxOCksdC5TLG51bGwsInJlZmVyZW5jZXMiLDAsLTEsWnIsITEsITEsITAsITEsITAsITEsITEpLHJjKHQubyxVaCwiRUNsYXNzIiwhMSwhMSwhMCksaHModShBdChXdCh0Lm8pLDApLDM0KSx0LmUsImFic3RyYWN0IixudWxsLDAsMSxVaCwhMSwhMSwhMCwhMSwhMCwhMSksaHModShBdChXdCh0Lm8pLDEpLDM0KSx0LmUsImludGVyZmFjZSIsbnVsbCwwLDEsVWgsITEsITEsITAsITEsITAsITEpLE5pKHUoQXQoV3QodC5vKSwyKSwxOCksdC5vLG51bGwsImVTdXBlclR5cGVzIiwwLC0xLFVoLCExLCExLCEwLCExLCEwLCEwLCExKSxOaSh1KEF0KFd0KHQubyksMyksMTgpLHQuVCx1KEF0KFd0KHQuVCksMCksMTgpLCJlT3BlcmF0aW9ucyIsMCwtMSxVaCwhMSwhMSwhMCwhMCwhMSwhMSwhMSksTmkodShBdChXdCh0Lm8pLDQpLDE4KSx0LmIsbnVsbCwiZUFsbEF0dHJpYnV0ZXMiLDAsLTEsVWgsITAsITAsITEsITEsITAsITEsITApLE5pKHUoQXQoV3QodC5vKSw1KSwxOCksdC5XLG51bGwsImVBbGxSZWZlcmVuY2VzIiwwLC0xLFVoLCEwLCEwLCExLCExLCEwLCExLCEwKSxOaSh1KEF0KFd0KHQubyksNiksMTgpLHQuVyxudWxsLCJlUmVmZXJlbmNlcyIsMCwtMSxVaCwhMCwhMCwhMSwhMSwhMCwhMSwhMCksTmkodShBdChXdCh0Lm8pLDcpLDE4KSx0LmIsbnVsbCwiZUF0dHJpYnV0ZXMiLDAsLTEsVWgsITAsITAsITEsITEsITAsITEsITApLE5pKHUoQXQoV3QodC5vKSw4KSwxOCksdC5XLG51bGwsImVBbGxDb250YWlubWVudHMiLDAsLTEsVWgsITAsITAsITEsITEsITAsITEsITApLE5pKHUoQXQoV3QodC5vKSw5KSwxOCksdC5ULG51bGwsImVBbGxPcGVyYXRpb25zIiwwLC0xLFVoLCEwLCEwLCExLCExLCEwLCExLCEwKSxOaSh1KEF0KFd0KHQubyksMTApLDE4KSx0LmJiLG51bGwsImVBbGxTdHJ1Y3R1cmFsRmVhdHVyZXMiLDAsLTEsVWgsITAsITAsITEsITEsITAsITEsITApLE5pKHUoQXQoV3QodC5vKSwxMSksMTgpLHQubyxudWxsLCJlQWxsU3VwZXJUeXBlcyIsMCwtMSxVaCwhMCwhMCwhMSwhMSwhMCwhMSwhMCksTmkodShBdChXdCh0Lm8pLDEyKSwxOCksdC5iLG51bGwsImVJREF0dHJpYnV0ZSIsMCwxLFVoLCEwLCEwLCExLCExLCExLCExLCEwKSxOaSh1KEF0KFd0KHQubyksMTMpLDE4KSx0LmJiLHUoQXQoV3QodC5iYiksNyksMTgpLCJlU3RydWN0dXJhbEZlYXR1cmVzIiwwLC0xLFVoLCExLCExLCEwLCEwLCExLCExLCExKSxOaSh1KEF0KFd0KHQubyksMTQpLDE4KSx0LkgsbnVsbCwiZUdlbmVyaWNTdXBlclR5cGVzIiwwLC0xLFVoLCExLCExLCEwLCEwLCExLCEwLCExKSxOaSh1KEF0KFd0KHQubyksMTUpLDE4KSx0LkgsbnVsbCwiZUFsbEdlbmVyaWNTdXBlclR5cGVzIiwwLC0xLFVoLCEwLCEwLCExLCExLCEwLCExLCEwKSxkPWJvKHUoQXQoTWkodC5vKSwwKSw1OSksdC5lLCJpc1N1cGVyVHlwZU9mIiksX28oZCx0Lm8sInNvbWVDbGFzcyIpLGJvKHUoQXQoTWkodC5vKSwxKSw1OSksdC5JLCJnZXRGZWF0dXJlQ291bnQiKSxkPWJvKHUoQXQoTWkodC5vKSwyKSw1OSksdC5iYixIMGUpLF9vKGQsdC5JLCJmZWF0dXJlSUQiKSxkPWJvKHUoQXQoTWkodC5vKSwzKSw1OSksdC5JLFYwZSksX28oZCx0LmJiLGFTKSxkPWJvKHUoQXQoTWkodC5vKSw0KSw1OSksdC5iYixIMGUpLF9vKGQsdC5fLCJmZWF0dXJlTmFtZSIpLGJvKHUoQXQoTWkodC5vKSw1KSw1OSksdC5JLCJnZXRPcGVyYXRpb25Db3VudCIpLGQ9Ym8odShBdChNaSh0Lm8pLDYpLDU5KSx0LlQsImdldEVPcGVyYXRpb24iKSxfbyhkLHQuSSwib3BlcmF0aW9uSUQiKSxkPWJvKHUoQXQoTWkodC5vKSw3KSw1OSksdC5JLEcwZSksX28oZCx0LlQscTh0KSxkPWJvKHUoQXQoTWkodC5vKSw4KSw1OSksdC5ULCJnZXRPdmVycmlkZSIpLF9vKGQsdC5ULHE4dCksZD1ibyh1KEF0KE1pKHQubyksOSksNTkpLHQuSCwiZ2V0RmVhdHVyZVR5cGUiKSxfbyhkLHQuYmIsYVMpLHJjKHQucCxzMSxJMGUsITAsITEsITApLGhzKHUoQXQoV3QodC5wKSwwKSwzNCksdC5fLCJpbnN0YW5jZUNsYXNzTmFtZSIsbnVsbCwwLDEsczEsITEsITAsITAsITAsITAsITEpLGU9TjAodC5MKSxuPXRtdCgpLERyKCghZS5kJiYoZS5kPW5ldyBBcyhobyxlLDEpKSxlLmQpLG4pLGFjZSh1KEF0KFd0KHQucCksMSksMzQpLGUsImluc3RhbmNlQ2xhc3MiLHMxLCEwLCEwLCExLCEwKSxocyh1KEF0KFd0KHQucCksMiksMzQpLHQuTSxVMGUsbnVsbCwwLDEsczEsITAsITAsITEsITEsITAsITApLGhzKHUoQXQoV3QodC5wKSwzKSwzNCksdC5fLCJpbnN0YW5jZVR5cGVOYW1lIixudWxsLDAsMSxzMSwhMSwhMCwhMCwhMCwhMCwhMSksTmkodShBdChXdCh0LnApLDQpLDE4KSx0LlUsdShBdChXdCh0LlUpLDMpLDE4KSwiZVBhY2thZ2UiLDAsMSxzMSwhMCwhMSwhMSwhMSwhMCwhMSwhMSksTmkodShBdChXdCh0LnApLDUpLDE4KSx0LmRiLG51bGwsVzBlLDAsLTEsczEsITEsITEsITAsITAsITAsITEsITEpLGQ9Ym8odShBdChNaSh0LnApLDApLDU5KSx0LmUsWTBlKSxfbyhkLHQuTSxNSSksYm8odShBdChNaSh0LnApLDEpLDU5KSx0LkksImdldENsYXNzaWZpZXJJRCIpLHJjKHQucSxOZnQsIkVEYXRhVHlwZSIsITEsITEsITApLGhzKHUoQXQoV3QodC5xKSwwKSwzNCksdC5lLCJzZXJpYWxpemFibGUiLFhFLDAsMSxOZnQsITEsITEsITAsITEsITAsITEpLHJjKHQudixwVSwiRUVudW0iLCExLCExLCEwKSxOaSh1KEF0KFd0KHQudiksMCksMTgpLHQudyx1KEF0KFd0KHQudyksMyksMTgpLCJlTGl0ZXJhbHMiLDAsLTEscFUsITEsITEsITAsITAsITEsITEsITEpLGQ9Ym8odShBdChNaSh0LnYpLDApLDU5KSx0LncsSzBlKSxfbyhkLHQuXyxjaSksZD1ibyh1KEF0KE1pKHQudiksMSksNTkpLHQudyxLMGUpLF9vKGQsdC5JLFpfKSxkPWJvKHUoQXQoTWkodC52KSwyKSw1OSksdC53LCJnZXRFRW51bUxpdGVyYWxCeUxpdGVyYWwiKSxfbyhkLHQuXywibGl0ZXJhbCIpLHJjKHQudyxhZyxPMGUsITEsITEsITApLGhzKHUoQXQoV3QodC53KSwwKSwzNCksdC5JLFpfLG51bGwsMCwxLGFnLCExLCExLCEwLCExLCEwLCExKSxocyh1KEF0KFd0KHQudyksMSksMzQpLHQuQSwiaW5zdGFuY2UiLG51bGwsMCwxLGFnLCEwLCExLCEwLCExLCEwLCExKSxocyh1KEF0KFd0KHQudyksMiksMzQpLHQuXywibGl0ZXJhbCIsbnVsbCwwLDEsYWcsITEsITEsITAsITEsITAsITEpLE5pKHUoQXQoV3QodC53KSwzKSwxOCksdC52LHUoQXQoV3QodC52KSwwKSwxOCksImVFbnVtIiwwLDEsYWcsITAsITEsITEsITEsITEsITEsITEpLHJjKHQuQixzQSwiRUZhY3RvcnkiLCExLCExLCEwKSxOaSh1KEF0KFd0KHQuQiksMCksMTgpLHQuVSx1KEF0KFd0KHQuVSksMiksMTgpLCJlUGFja2FnZSIsMSwxLHNBLCEwLCExLCEwLCExLCExLCExLCExKSxkPWJvKHUoQXQoTWkodC5CKSwwKSw1OSksdC5TLCJjcmVhdGUiKSxfbyhkLHQubywiZUNsYXNzIiksZD1ibyh1KEF0KE1pKHQuQiksMSksNTkpLHQuTSwiY3JlYXRlRnJvbVN0cmluZyIpLF9vKGQsdC5xLCJlRGF0YVR5cGUiKSxfbyhkLHQuXywibGl0ZXJhbFZhbHVlIiksZD1ibyh1KEF0KE1pKHQuQiksMiksNTkpLHQuXywiY29udmVydFRvU3RyaW5nIiksX28oZCx0LnEsImVEYXRhVHlwZSIpLF9vKGQsdC5NLCJpbnN0YW5jZVZhbHVlIikscmModC5RLGZQLE9kZSwhMCwhMSwhMCksTmkodShBdChXdCh0LlEpLDApLDE4KSx0LmEsdShBdChXdCh0LmEpLDIpLDE4KSwiZUFubm90YXRpb25zIiwwLC0xLGZQLCExLCExLCEwLCEwLCExLCExLCExKSxkPWJvKHUoQXQoTWkodC5RKSwwKSw1OSksdC5hLCJnZXRFQW5ub3RhdGlvbiIpLF9vKGQsdC5fLFhjdCkscmModC5SLE1mdCxQZGUsITAsITEsITApLGhzKHUoQXQoV3QodC5SKSwwKSwzNCksdC5fLGNpLG51bGwsMCwxLE1mdCwhMSwhMSwhMCwhMSwhMCwhMSkscmModC5TLF9iLCJFT2JqZWN0IiwhMSwhMSwhMCksYm8odShBdChNaSh0LlMpLDApLDU5KSx0Lm8sImVDbGFzcyIpLGJvKHUoQXQoTWkodC5TKSwxKSw1OSksdC5lLCJlSXNQcm94eSIpLGJvKHUoQXQoTWkodC5TKSwyKSw1OSksdC5YLCJlUmVzb3VyY2UiKSxibyh1KEF0KE1pKHQuUyksMyksNTkpLHQuUywiZUNvbnRhaW5lciIpLGJvKHUoQXQoTWkodC5TKSw0KSw1OSksdC5iYiwiZUNvbnRhaW5pbmdGZWF0dXJlIiksYm8odShBdChNaSh0LlMpLDUpLDU5KSx0LlcsImVDb250YWlubWVudEZlYXR1cmUiKSxkPWJvKHUoQXQoTWkodC5TKSw2KSw1OSksbnVsbCwiZUNvbnRlbnRzIiksZT1OMCh0LmZiKSxuPU4wKHQuUyksRHIoKCFlLmQmJihlLmQ9bmV3IEFzKGhvLGUsMSkpLGUuZCksbikscz1GMShkLGUsbnVsbCkscyYmcy5GaSgpLGQ9Ym8odShBdChNaSh0LlMpLDcpLDU5KSxudWxsLCJlQWxsQ29udGVudHMiKSxlPU4wKHQuY2IpLG49TjAodC5TKSxEcigoIWUuZCYmKGUuZD1uZXcgQXMoaG8sZSwxKSksZS5kKSxuKSxvPUYxKGQsZSxudWxsKSxvJiZvLkZpKCksZD1ibyh1KEF0KE1pKHQuUyksOCksNTkpLG51bGwsImVDcm9zc1JlZmVyZW5jZXMiKSxlPU4wKHQuZmIpLG49TjAodC5TKSxEcigoIWUuZCYmKGUuZD1uZXcgQXMoaG8sZSwxKSksZS5kKSxuKSxoPUYxKGQsZSxudWxsKSxoJiZoLkZpKCksZD1ibyh1KEF0KE1pKHQuUyksOSksNTkpLHQuTSwiZUdldCIpLF9vKGQsdC5iYixhUyksZD1ibyh1KEF0KE1pKHQuUyksMTApLDU5KSx0Lk0sImVHZXQiKSxfbyhkLHQuYmIsYVMpLF9vKGQsdC5lLCJyZXNvbHZlIiksZD1ibyh1KEF0KE1pKHQuUyksMTEpLDU5KSxudWxsLCJlU2V0IiksX28oZCx0LmJiLGFTKSxfbyhkLHQuTSwibmV3VmFsdWUiKSxkPWJvKHUoQXQoTWkodC5TKSwxMiksNTkpLHQuZSwiZUlzU2V0IiksX28oZCx0LmJiLGFTKSxkPWJvKHUoQXQoTWkodC5TKSwxMyksNTkpLG51bGwsImVVbnNldCIpLF9vKGQsdC5iYixhUyksZD1ibyh1KEF0KE1pKHQuUyksMTQpLDU5KSx0Lk0sImVJbnZva2UiKSxfbyhkLHQuVCxxOHQpLGU9TjAodC5mYiksbj10bXQoKSxEcigoIWUuZCYmKGUuZD1uZXcgQXMoaG8sZSwxKSksZS5kKSxuKSxvcShkLGUsImFyZ3VtZW50cyIpLFZubihkLHQuSykscmModC5ULFdoLEYwZSwhMSwhMSwhMCksTmkodShBdChXdCh0LlQpLDApLDE4KSx0Lm8sdShBdChXdCh0Lm8pLDMpLDE4KSxYMGUsMCwxLFdoLCEwLCExLCExLCExLCExLCExLCExKSxOaSh1KEF0KFd0KHQuVCksMSksMTgpLHQuZGIsbnVsbCxXMGUsMCwtMSxXaCwhMSwhMSwhMCwhMCwhMCwhMSwhMSksTmkodShBdChXdCh0LlQpLDIpLDE4KSx0LlYsdShBdChXdCh0LlYpLDApLDE4KSwiZVBhcmFtZXRlcnMiLDAsLTEsV2gsITEsITEsITAsITAsITEsITEsITEpLE5pKHUoQXQoV3QodC5UKSwzKSwxOCksdC5wLG51bGwsImVFeGNlcHRpb25zIiwwLC0xLFdoLCExLCExLCEwLCExLCEwLCEwLCExKSxOaSh1KEF0KFd0KHQuVCksNCksMTgpLHQuSCxudWxsLCJlR2VuZXJpY0V4Y2VwdGlvbnMiLDAsLTEsV2gsITEsITEsITAsITAsITEsITAsITEpLGJvKHUoQXQoTWkodC5UKSwwKSw1OSksdC5JLEcwZSksZD1ibyh1KEF0KE1pKHQuVCksMSksNTkpLHQuZSwiaXNPdmVycmlkZU9mIiksX28oZCx0LlQsInNvbWVPcGVyYXRpb24iKSxyYyh0LlUsaTEsIkVQYWNrYWdlIiwhMSwhMSwhMCksaHModShBdChXdCh0LlUpLDApLDM0KSx0Ll8sIm5zVVJJIixudWxsLDAsMSxpMSwhMSwhMSwhMCwhMSwhMCwhMSksaHModShBdChXdCh0LlUpLDEpLDM0KSx0Ll8sIm5zUHJlZml4IixudWxsLDAsMSxpMSwhMSwhMSwhMCwhMSwhMCwhMSksTmkodShBdChXdCh0LlUpLDIpLDE4KSx0LkIsdShBdChXdCh0LkIpLDApLDE4KSwiZUZhY3RvcnlJbnN0YW5jZSIsMSwxLGkxLCEwLCExLCEwLCExLCExLCExLCExKSxOaSh1KEF0KFd0KHQuVSksMyksMTgpLHQucCx1KEF0KFd0KHQucCksNCksMTgpLCJlQ2xhc3NpZmllcnMiLDAsLTEsaTEsITEsITEsITAsITAsITAsITEsITEpLE5pKHUoQXQoV3QodC5VKSw0KSwxOCksdC5VLHUoQXQoV3QodC5VKSw1KSwxOCksImVTdWJwYWNrYWdlcyIsMCwtMSxpMSwhMSwhMSwhMCwhMCwhMCwhMSwhMSksTmkodShBdChXdCh0LlUpLDUpLDE4KSx0LlUsdShBdChXdCh0LlUpLDQpLDE4KSwiZVN1cGVyUGFja2FnZSIsMCwxLGkxLCEwLCExLCExLCExLCEwLCExLCExKSxkPWJvKHUoQXQoTWkodC5VKSwwKSw1OSksdC5wLCJnZXRFQ2xhc3NpZmllciIpLF9vKGQsdC5fLGNpKSxyYyh0LlYsVnYsTjBlLCExLCExLCEwKSxOaSh1KEF0KFd0KHQuViksMCksMTgpLHQuVCx1KEF0KFd0KHQuVCksMiksMTgpLCJlT3BlcmF0aW9uIiwwLDEsVnYsITAsITEsITEsITEsITEsITEsITEpLHJjKHQuVyxuMyxCMGUsITEsITEsITApLGhzKHUoQXQoV3QodC5XKSwwKSwzNCksdC5lLCJjb250YWlubWVudCIsbnVsbCwwLDEsbjMsITEsITEsITAsITEsITAsITEpLGhzKHUoQXQoV3QodC5XKSwxKSwzNCksdC5lLCJjb250YWluZXIiLG51bGwsMCwxLG4zLCEwLCEwLCExLCExLCEwLCEwKSxocyh1KEF0KFd0KHQuVyksMiksMzQpLHQuZSwicmVzb2x2ZVByb3hpZXMiLFhFLDAsMSxuMywhMSwhMSwhMCwhMSwhMCwhMSksTmkodShBdChXdCh0LlcpLDMpLDE4KSx0LlcsbnVsbCwiZU9wcG9zaXRlIiwwLDEsbjMsITEsITEsITAsITEsITAsITEsITEpLE5pKHUoQXQoV3QodC5XKSw0KSwxOCksdC5vLG51bGwsImVSZWZlcmVuY2VUeXBlIiwxLDEsbjMsITAsITAsITEsITEsITAsITEsITApLE5pKHUoQXQoV3QodC5XKSw1KSwxOCksdC5iLG51bGwsImVLZXlzIiwwLC0xLG4zLCExLCExLCEwLCExLCEwLCExLCExKSxyYyh0LmJiLE11LE0wZSwhMCwhMSwhMCksaHModShBdChXdCh0LmJiKSwwKSwzNCksdC5lLCJjaGFuZ2VhYmxlIixYRSwwLDEsTXUsITEsITEsITAsITEsITAsITEpLGhzKHUoQXQoV3QodC5iYiksMSksMzQpLHQuZSwidm9sYXRpbGUiLG51bGwsMCwxLE11LCExLCExLCEwLCExLCEwLCExKSxocyh1KEF0KFd0KHQuYmIpLDIpLDM0KSx0LmUsInRyYW5zaWVudCIsbnVsbCwwLDEsTXUsITEsITEsITAsITEsITAsITEpLGhzKHUoQXQoV3QodC5iYiksMyksMzQpLHQuXywiZGVmYXVsdFZhbHVlTGl0ZXJhbCIsbnVsbCwwLDEsTXUsITEsITEsITAsITEsITAsITEpLGhzKHUoQXQoV3QodC5iYiksNCksMzQpLHQuTSxVMGUsbnVsbCwwLDEsTXUsITAsITAsITEsITEsITAsITApLGhzKHUoQXQoV3QodC5iYiksNSksMzQpLHQuZSwidW5zZXR0YWJsZSIsbnVsbCwwLDEsTXUsITEsITEsITAsITEsITAsITEpLGhzKHUoQXQoV3QodC5iYiksNiksMzQpLHQuZSwiZGVyaXZlZCIsbnVsbCwwLDEsTXUsITEsITEsITAsITEsITAsITEpLE5pKHUoQXQoV3QodC5iYiksNyksMTgpLHQubyx1KEF0KFd0KHQubyksMTMpLDE4KSxYMGUsMCwxLE11LCEwLCExLCExLCExLCExLCExLCExKSxibyh1KEF0KE1pKHQuYmIpLDApLDU5KSx0LkksVjBlKSxkPWJvKHUoQXQoTWkodC5iYiksMSksNTkpLG51bGwsImdldENvbnRhaW5lckNsYXNzIiksZT1OMCh0LkwpLG49dG10KCksRHIoKCFlLmQmJihlLmQ9bmV3IEFzKGhvLGUsMSkpLGUuZCksbikscj1GMShkLGUsbnVsbCksciYmci5GaSgpLHJjKHQuZWIsdDMsTDBlLCEwLCExLCEwKSxocyh1KEF0KFd0KHQuZWIpLDApLDM0KSx0LmUsIm9yZGVyZWQiLFhFLDAsMSx0MywhMSwhMSwhMCwhMSwhMCwhMSksaHModShBdChXdCh0LmViKSwxKSwzNCksdC5lLCJ1bmlxdWUiLFhFLDAsMSx0MywhMSwhMSwhMCwhMSwhMCwhMSksaHModShBdChXdCh0LmViKSwyKSwzNCksdC5JLCJsb3dlckJvdW5kIixudWxsLDAsMSx0MywhMSwhMSwhMCwhMSwhMCwhMSksaHModShBdChXdCh0LmViKSwzKSwzNCksdC5JLCJ1cHBlckJvdW5kIiwiMSIsMCwxLHQzLCExLCExLCEwLCExLCEwLCExKSxocyh1KEF0KFd0KHQuZWIpLDQpLDM0KSx0LmUsIm1hbnkiLG51bGwsMCwxLHQzLCEwLCEwLCExLCExLCEwLCEwKSxocyh1KEF0KFd0KHQuZWIpLDUpLDM0KSx0LmUsInJlcXVpcmVkIixudWxsLDAsMSx0MywhMCwhMCwhMSwhMSwhMCwhMCksTmkodShBdChXdCh0LmViKSw2KSwxOCksdC5wLG51bGwsImVUeXBlIiwwLDEsdDMsITEsITAsITAsITEsITAsITAsITEpLE5pKHUoQXQoV3QodC5lYiksNyksMTgpLHQuSCxudWxsLCJlR2VuZXJpY1R5cGUiLDAsMSx0MywhMSwhMCwhMCwhMCwhMSwhMCwhMSkscmModC5hYixQMiwiRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiLCExLCExLCExKSxocyh1KEF0KFd0KHQuYWIpLDApLDM0KSx0Ll8sImtleSIsbnVsbCwwLDEsUDIsITEsITEsITAsITEsITAsITEpLGhzKHUoQXQoV3QodC5hYiksMSksMzQpLHQuXyxaXyxudWxsLDAsMSxQMiwhMSwhMSwhMCwhMSwhMCwhMSkscmModC5ILGhvLFAwZSwhMSwhMSwhMCksTmkodShBdChXdCh0LkgpLDApLDE4KSx0LkgsbnVsbCwiZVVwcGVyQm91bmQiLDAsMSxobywhMSwhMSwhMCwhMCwhMSwhMSwhMSksTmkodShBdChXdCh0LkgpLDEpLDE4KSx0LkgsbnVsbCwiZVR5cGVBcmd1bWVudHMiLDAsLTEsaG8sITEsITEsITAsITAsITEsITEsITEpLE5pKHUoQXQoV3QodC5IKSwyKSwxOCksdC5wLG51bGwsImVSYXdUeXBlIiwxLDEsaG8sITAsITEsITEsITEsITAsITEsITApLE5pKHUoQXQoV3QodC5IKSwzKSwxOCksdC5ILG51bGwsImVMb3dlckJvdW5kIiwwLDEsaG8sITEsITEsITAsITAsITEsITEsITEpLE5pKHUoQXQoV3QodC5IKSw0KSwxOCksdC5kYixudWxsLCJlVHlwZVBhcmFtZXRlciIsMCwxLGhvLCExLCExLCEwLCExLCExLCExLCExKSxOaSh1KEF0KFd0KHQuSCksNSksMTgpLHQucCxudWxsLCJlQ2xhc3NpZmllciIsMCwxLGhvLCExLCExLCEwLCExLCEwLCExLCExKSxkPWJvKHUoQXQoTWkodC5IKSwwKSw1OSksdC5lLFkwZSksX28oZCx0Lk0sTUkpLHJjKHQuZGIsaHUsUjBlLCExLCExLCEwKSxOaSh1KEF0KFd0KHQuZGIpLDApLDE4KSx0LkgsbnVsbCwiZUJvdW5kcyIsMCwtMSxodSwhMSwhMSwhMCwhMCwhMSwhMSwhMSksYWkodC5jLE51dCwiRUJpZ0RlY2ltYWwiLCEwKSxhaSh0LmQsajQsIkVCaWdJbnRlZ2VyIiwhMCksYWkodC5lLHBsLCJFQm9vbGVhbiIsITApLGFpKHQuZixScywiRUJvb2xlYW5PYmplY3QiLCEwKSxhaSh0LmksR3UsIkVCeXRlIiwhMCksYWkodC5nLGN0KEd1LDEpLCJFQnl0ZUFycmF5IiwhMCksYWkodC5qLE02LCJFQnl0ZU9iamVjdCIsITApLGFpKHQuayx4aCwiRUNoYXIiLCEwKSxhaSh0Lm4sdVMsIkVDaGFyYWN0ZXJPYmplY3QiLCEwKSxhaSh0LnIsdFYsIkVEYXRlIiwhMCksYWkodC5zLFBMdCwiRURpYWdub3N0aWNDaGFpbiIsITEpLGFpKHQudCxhYSwiRURvdWJsZSIsITApLGFpKHQudSxsYSwiRURvdWJsZU9iamVjdCIsITApLGFpKHQuZmIsS0F0LCJFRUxpc3QiLCExKSxhaSh0LkEsWkF0LCJFRW51bWVyYXRvciIsITEpLGFpKHQuQyx4THQsIkVGZWF0dXJlTWFwIiwhMSksYWkodC5ELGJVLCJFRmVhdHVyZU1hcEVudHJ5IiwhMSksYWkodC5GLGEzLCJFRmxvYXQiLCEwKSxhaSh0LkcsaTcsIkVGbG9hdE9iamVjdCIsITApLGFpKHQuSSxDciwiRUludCIsITApLGFpKHQuSixqYSwiRUludGVnZXJPYmplY3QiLCEwKSxhaSh0LkwsSjh0LCJFSmF2YUNsYXNzIiwhMCksYWkodC5NLFFuLCJFSmF2YU9iamVjdCIsITApLGFpKHQuTixPYiwiRUxvbmciLCEwKSxhaSh0Lk8sU3YsIkVMb25nT2JqZWN0IiwhMCksYWkodC5QLHRFdCwiRU1hcCIsITEpLGFpKHQuWCx3THQsIkVSZXNvdXJjZSIsITEpLGFpKHQuWSxGTHQsIkVSZXNvdXJjZVNldCIsITEpLGFpKHQuWixnNSwiRVNob3J0IiwhMCksYWkodC4kLEF2LCJFU2hvcnRPYmplY3QiLCEwKSxhaSh0Ll8sQWUsIkVTdHJpbmciLCEwKSxhaSh0LmNiLFFBdCwiRVRyZWVJdGVyYXRvciIsITEpLGFpKHQuSyxOTHQsIkVJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIiwhMSksS3l0KHQsQmgpKX12YXIgTUk9Im9iamVjdCIsYjY9ImJvb2xlYW4iLE54dD0ibnVtYmVyIixWYXQ9InN0cmluZyIsR2F0PSJmdW5jdGlvbiIsd2k9MjE0NzQ4MzY0NyxYbz0iamF2YS5sYW5nIixEST17MzoxfSxJST0iY29tLmdvb2dsZS5jb21tb24uYmFzZSIsWWE9IiwgIixhZmU9IiVzICglcykgbXVzdCBub3QgYmUgbmVnYXRpdmUiLERlPXszOjEsNDoxLDU6MX0sb2ZlPSJuZWdhdGl2ZSBzaXplOiAiLGNmZT0iT3B0aW9uYWwub2YoIixfdT0ibnVsbCIsRkU9ezE5ODoxLDQ3OjF9LEtlPSJjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0IixORT17MTk4OjEsNDc6MSwxMjU6MX0sVDI9ezIyNDoxLDM6MX0sc2E9ezQ3OjF9LHByPSJqYXZhLnV0aWwiLG12PXs4MzoxfSx4eT17MjA6MSwyODoxLDE0OjF9LE4xPTE5NjUsenU9ezIwOjEsMjg6MSwxNDoxLDIxOjF9LHVmZT17ODM6MSwxNzE6MSwxNjE6MX0sbGZlPXsyMDoxLDI4OjEsMTQ6MSwyMToxLDg0OjF9LEJ4dD17MjA6MSwyODoxLDE0OjEsMjcxOjEsMjE6MSw4NDoxfSxuMD17NDc6MSwxMjU6MX0senE9ezM0NToxLDQyOjF9LGhmZT0iQWJzdHJhY3RNYXBFbnRyeSIsZmZlPSJleHBlY3RlZFZhbHVlc1BlcktleSIsZWU9ezM6MSw2OjEsNDoxLDU6MX0sbWQ9MTYzODQsSWg9ezE2NDoxfSxVbj17Mzg6MX0scXE9e2w6NDE5NDMwMyxtOjQxOTQzMDMsaDo1MjQyODd9LE9JPXsxOTY6MX0sVWF0PXsyNDU6MSwzOjEsMzU6MX0sZGZlPSJyYW5nZSB1bmJvdW5kZWQgb24gdGhpcyBzaWRlIixyMD17MjA6MX0sZ2ZlPXsyMDoxLDE0OjF9LFJ4dD17MzoxLDIwOjEsMjg6MSwxNDoxfSxNXz17MTUyOjEsMzoxLDIwOjEsMjg6MSwxNDoxLDE1OjEsNTQ6MX0sSHE9ezM6MSw0OjEsNToxLDE2NToxfSxCRT17MzoxLDgzOjF9LFdhdD17MjA6MSwxNDoxLDIxOjF9LFJFPXszOjEsMjA6MSwyODoxLDE0OjEsMjE6MX0scGZlPXsyMDoxLDE0OjEsMjE6MSw4NDoxfSxpMD00NjE4NDU5MDcsczA9LTg2MjA0ODk0MyxQST17MzoxLDY6MSw0OjEsNToxLDE2NToxfSxiZmU9ImV4cGVjdGVkU2l6ZSIsRF89MTA3Mzc0MTgyNCxreT0iaW5pdGlhbEFycmF5U2l6ZSIsb2U9ezM6MSw2OjEsNDoxLDk6MSw1OjF9LGpFPXsyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjF9LFlhdD0iYXJyYXlTaXplIix3ZmU9ezIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxfSxsaT17NDU6MX0sVnE9ezM2NToxfSxzYj0xZS00LFNhPS0yMTQ3NDgzNjQ4LHZmZT0iX19ub2luaXRfXyIsUTA9ezM6MSwxMDI6MSw2MDoxLDc4OjF9LEZJPSJjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudC5pbXBsIixqeHQ9IlN0cmluZyIsJHh0PSJjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudCIsS2F0PSJhbm9ueW1vdXMiLFhhdD0iZm5TdGFjayIsenh0PSJVbmtub3duIix5ZD17MTk1OjEsMzoxLDQ6MX0sV2c9MWUzLHlzPTY1NTM1LFFhdD0iSmFudWFyeSIsWmF0PSJGZWJydWFyeSIsSmF0PSJNYXJjaCIsdG90PSJBcHJpbCIsdzY9Ik1heSIsZW90PSJKdW5lIixub3Q9Ikp1bHkiLHJvdD0iQXVndXN0Iixpb3Q9IlNlcHRlbWJlciIsc290PSJPY3RvYmVyIixhb3Q9Ik5vdmVtYmVyIixvb3Q9IkRlY2VtYmVyIixhYj0xOTAwLFhyPXs0ODoxLDM6MSw0OjF9LG1mZT0iQmVmb3JlIENocmlzdCIseWZlPSJBbm5vIERvbWluaSIsY290PSJTdW5kYXkiLHVvdD0iTW9uZGF5Iixsb3Q9IlR1ZXNkYXkiLGhvdD0iV2VkbmVzZGF5Iixmb3Q9IlRodXJzZGF5Iixkb3Q9IkZyaWRheSIsZ290PSJTYXR1cmRheSIscXh0PSJjb20uZ29vZ2xlLmd3dC5pMThuLnNoYXJlZCIseGZlPSJEYXRlVGltZUZvcm1hdCIscG90PSJjb20uZ29vZ2xlLmd3dC5pMThuLmNsaWVudCIsa2ZlPSJEZWZhdWx0RGF0ZVRpbWVGb3JtYXRJbmZvIixFZmU9ezM6MSw0OjEsMzU6MSwxOTk6MX0sdjY9ImNvbS5nb29nbGUuZ3d0Lmpzb24uY2xpZW50IixobD00MTk0MzAzLFowPTEwNDg1NzUsTkk9NTI0Mjg4LG02PTQxOTQzMDQsQzI9MTc1OTIxODYwNDQ0MTYsR3E9MWU5LEJJPS0xNzU5MjE4NjA0NDQxNixIeHQ9ImphdmEuaW8iLGJvdD17MzoxLDEwMjoxLDczOjEsNjA6MSw3ODoxfSxUZmU9ezM6MSwyODk6MSw3ODoxfSx5dj0nRm9yIGlucHV0IHN0cmluZzogIicsYXM9MS8wLENzPS0xLzAsRXk9NDA5Nix3b3Q9ezM6MSw0OjEsMzY0OjF9LEthPTY1NTM2LFJJPTU1Mjk2LHZvPXsxMDQ6MSwzOjEsNDoxfSx2b3Q9MWU1LENmZT0uMzAxMDI5OTk1NjYzOTgxMixjbz00Mjk0OTY3Mjk1LG1vdD00Mjk0OTY3Mjk2LCRFPSIwLjAiLHlvdD17NDI6MX0sX2ZlPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDEyOjEsMTQ6MSwxNToxLDU0OjF9LFNmZT17MzoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxfSxBZmU9ezIwOjEsMTQ6MSwxNToxfSx4b3Q9ezM6MSw2MjoxfSxqST17MTgyOjF9LEE0PXszOjEsNDoxLDgzOjF9LFZ4dD17MzoxLDQ6MSwyMDoxLDI4OjEsMTQ6MSw1MzoxLDIxOjF9LGtvdD0iZGVsZXRlIixJXz0xNDkwMTE2MTE5Mzg0NzY1NmUtMjQsT189MTExMDIyMzAyNDYyNTE1NjVlLTMyLEVvdD0xNTUyNTQ4NSwkST01OTYwNDY0NDc3NTM5MDYzZS0yMyxHeHQ9MTY3NzcyMTYsVXE9MTY3NzcyMTUsVXh0PSIsIGxlbmd0aDogIixMZmU9ezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDU0OjF9LFRvdD17MzoxLDM1OjEsMjI6MSwyOTc6MX0sQ290PSJqYXZhLnV0aWwuZnVuY3Rpb24iLFBfPSJqYXZhLnV0aWwubG9nZ2luZyIsTWZlPXszOjEsNDoxLDU6MSw4NDI6MX0sX290PSJ1bmRlZmluZWQiLElzPSJqYXZhLnV0aWwuc3RyZWFtIixXeHQ9ezUyNToxLDY3MDoxfSxXcT0iZnJvbUluZGV4OiAiLERmZT0iID4gdG9JbmRleDogIixZeHQ9IiwgdG9JbmRleDogIixLeHQ9IkluZGV4OiAiLFh4dD0iLCBTaXplOiAiLHpFPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbiIsT2k9ezYyOjF9LElmZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24uY29tcGFjdGlvbiIsT2ZlPSJTY2FubGluZS9FdmVudEhhbmRsZXIiLGEwPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5jb21wYWN0aW9uLm9uZWQiLFBmZT0iQ05vZGUgYmVsb25ncyB0byBhbm90aGVyIENHcm91cC4iLEZmZT0iSVNwYWNpbmdzSGFuZGxlci8xIixTb3Q9IlRoZSAiLEFvdD0iIGluc3RhbmNlIGhhcyBiZWVuIGZpbmlzaGVkIGFscmVhZHkuIixOZmU9IlRoZSBkaXJlY3Rpb24gIixCZmU9IiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBDR3JhcGggaW5zdGFuY2UuIixSZmU9Ik9uZURpbWVuc2lvbmFsQ29tcGFjdG9yIixqZmU9Ik9uZURpbWVuc2lvbmFsQ29tcGFjdG9yL2xhbWJkYSQwJFR5cGUiLCRmZT0iUXVhZHJ1cGxldCIsemZlPSJTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdG9yIixxZmU9IlNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IvQ29uc3RyYWludHNTY2FubGluZUhhbmRsZXIiLEhmZT0iU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRvci9Db25zdHJhaW50c1NjYW5saW5lSGFuZGxlci9sYW1iZGEkMCRUeXBlIixWZmU9IlNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IvVGltZXN0YW1wIixHZmU9IlNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IvbGFtYmRhJDAkVHlwZSIseGQ9ezE2OToxLDQ1OjF9LExvdD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24uY29tcGFjdGlvbi5vcHRpb25zIixRbz0ib3JnLmVjbGlwc2UuZWxrLmNvcmUuZGF0YSIsUXh0PSJvcmcuZWNsaXBzZS5lbGsucG9seW9taW5vLnRyYXZlcnNhbFN0cmF0ZWd5IixaeHQ9Im9yZy5lY2xpcHNlLmVsay5wb2x5b21pbm8ubG93TGV2ZWxTb3J0IixKeHQ9Im9yZy5lY2xpcHNlLmVsay5wb2x5b21pbm8uaGlnaExldmVsU29ydCIsdDZ0PSJvcmcuZWNsaXBzZS5lbGsucG9seW9taW5vLmZpbGwiLE9oPXsxMzA6MX0sTW90PSJwb2x5b21pbm8iLEZfPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5uZXR3b3Jrc2ltcGxleCIsbzA9ezE3NzoxLDM6MSw0OjF9LFVmZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24ubm9kZXNwYWNpbmciLF8yPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5ub2Rlc3BhY2luZy5jZWxsc3lzdGVtIixxRT0iQ0VOVEVSIixXZmU9ezIxMjoxLDMyNjoxfSxlNnQ9ezM6MSw0OjEsNToxLDU5NToxfSx5Nj0iTEVGVCIseDY9IlJJR0hUIixuNnQ9IlZlcnRpY2FsIGFsaWdubWVudCBjYW5ub3QgYmUgbnVsbCIscjZ0PSJCT1RUT00iLFlxPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5ub2Rlc3BhY2luZy5pbnRlcm5hbCIsTl89IlVOREVGSU5FRCIsQjE9LjAxLHpJPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5ub2Rlc3BhY2luZy5pbnRlcm5hbC5hbGdvcml0aG0iLFlmZT0iTGFiZWxQbGFjZXIvbGFtYmRhJDAkVHlwZSIsS2ZlPSJMYWJlbFBsYWNlci9sYW1iZGEkMSRUeXBlIixYZmU9InBvcnRSYXRpb09yUG9zaXRpb24iLEhFPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5vdmVybGFwcyIsRG90PSJET1dOIixrZD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24ucG9seW9taW5vIixLcT0iTk9SVEgiLElvdD0iRUFTVCIsT290PSJTT1VUSCIsUG90PSJXRVNUIixYcT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24ucG9seW9taW5vLnN0cnVjdHVyZXMiLGk2dD0iRGlyZWN0aW9uIixGb3Q9IkdyaWQgaXMgb25seSBvZiBzaXplICIsTm90PSIuIFJlcXVlc3RlZCBwb2ludCAoIixCb3Q9IikgaXMgb3V0IG9mIGJvdW5kcy4iLFFxPSIgR2l2ZW4gY2VudGVyIGJhc2VkIGNvb3JkaW5hdGVzIHdlcmUgKCIscUk9Im9yZy5lY2xpcHNlLmVsay5ncmFwaC5wcm9wZXJ0aWVzIixRZmU9IklQcm9wZXJ0eUhvbGRlciIsczZ0PXszOjEsOTQ6MSwxMzQ6MX0sazY9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLnNwb3JlIixaZmU9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLnV0aWxzIixTMj17MjA5OjF9LEw0PSJvcmcuZWNsaXBzZS5lbGsuY29yZSIsSmZlPSJDb25uZWN0ZWQgQ29tcG9uZW50cyBDb21wYWN0aW9uIix0MWU9Im9yZy5lY2xpcHNlLmVsay5hbGcuZGlzY28iLFpxPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmRpc2NvLmdyYXBoIixSb3Q9Im9yZy5lY2xpcHNlLmVsay5hbGcuZGlzY28ub3B0aW9ucyIsYTZ0PSJDb21wYWN0aW9uU3RyYXRlZ3kiLG82dD0ib3JnLmVjbGlwc2UuZWxrLmRpc2NvLmNvbXBvbmVudENvbXBhY3Rpb24uc3RyYXRlZ3kiLGM2dD0ib3JnLmVjbGlwc2UuZWxrLmRpc2NvLmNvbXBvbmVudENvbXBhY3Rpb24uY29tcG9uZW50TGF5b3V0QWxnb3JpdGhtIix1NnQ9Im9yZy5lY2xpcHNlLmVsay5kaXNjby5kZWJ1Zy5kaXNjb0dyYXBoIixsNnQ9Im9yZy5lY2xpcHNlLmVsay5kaXNjby5kZWJ1Zy5kaXNjb1BvbHlzIixlMWU9ImNvbXBvbmVudENvbXBhY3Rpb24iLEEyPSJvcmcuZWNsaXBzZS5lbGsuZGlzY28iLGpvdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuY29tcG9uZW50Q29tcG9uZW50Iiwkb3Q9Im9yZy5lY2xpcHNlLmVsay5lZGdlLnRoaWNrbmVzcyIsRTY9Im9yZy5lY2xpcHNlLmVsay5hc3BlY3RSYXRpbyIseHY9Im9yZy5lY2xpcHNlLmVsay5wYWRkaW5nIixNND0ib3JnLmVjbGlwc2UuZWxrLmFsZy5kaXNjby50cmFuc2Zvcm0iLHpvdD0xLjU3MDc5NjMyNjc5NDg5NjYsVkU9MTc5NzY5MzEzNDg2MjMxNTdlMjkyLFR5PXszOjEsNDoxLDU6MSwxOTI6MX0saDZ0PXszOjEsNjoxLDQ6MSw1OjEsMTA2OjEsMTIwOjF9LGY2dD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5mb3JjZSIsZDZ0PSJDb21wb25lbnRzUHJvY2Vzc29yIixuMWU9IkNvbXBvbmVudHNQcm9jZXNzb3IvMSIsSEk9Im9yZy5lY2xpcHNlLmVsay5hbGcuZm9yY2UuZ3JhcGgiLHIxZT0iQ29tcG9uZW50IExheW91dCIsZzZ0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmZvcmNlLm1vZGVsIixKcT0ib3JnLmVjbGlwc2UuZWxrLmZvcmNlLm1vZGVsIixwNnQ9Im9yZy5lY2xpcHNlLmVsay5mb3JjZS5pdGVyYXRpb25zIixiNnQ9Im9yZy5lY2xpcHNlLmVsay5mb3JjZS5yZXB1bHNpdmVQb3dlciIscW90PSJvcmcuZWNsaXBzZS5lbGsuZm9yY2UudGVtcGVyYXR1cmUiLEVkPS4wMDEsSG90PSJvcmcuZWNsaXBzZS5lbGsuZm9yY2UucmVwdWxzaW9uIixCXz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5mb3JjZS5vcHRpb25zIixHRT0xLjYwMDAwMDAyMzg0MTg1OCxWbD0ib3JnLmVjbGlwc2UuZWxrLmZvcmNlIixWST0ib3JnLmVjbGlwc2UuZWxrLnByaW9yaXR5IixDeT0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcubm9kZU5vZGUiLFZvdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuZWRnZUxhYmVsIix0SD0ib3JnLmVjbGlwc2UuZWxrLnJhbmRvbVNlZWQiLFJfPSJvcmcuZWNsaXBzZS5lbGsuc2VwYXJhdGVDb25uZWN0ZWRDb21wb25lbnRzIixHST0ib3JnLmVjbGlwc2UuZWxrLmludGVyYWN0aXZlIixHb3Q9Im9yZy5lY2xpcHNlLmVsay5wb3J0Q29uc3RyYWludHMiLGVIPSJvcmcuZWNsaXBzZS5lbGsuZWRnZUxhYmVscy5pbmxpbmUiLGpfPSJvcmcuZWNsaXBzZS5lbGsub21pdE5vZGVNaWNyb0xheW91dCIsVDY9Im9yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5vcHRpb25zIixEND0ib3JnLmVjbGlwc2UuZWxrLm5vZGVTaXplLmNvbnN0cmFpbnRzIixVRT0ib3JnLmVjbGlwc2UuZWxrLm5vZGVMYWJlbHMucGxhY2VtZW50IixXRT0ib3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMucGxhY2VtZW50Iix3NnQ9Im9yaWdpbiIsaTFlPSJyYW5kb20iLHMxZT0iYm91bmRpbmdCb3gudXBMZWZ0IixhMWU9ImJvdW5kaW5nQm94Lmxvd1JpZ2h0Iix2NnQ9Im9yZy5lY2xpcHNlLmVsay5zdHJlc3MuZml4ZWQiLG02dD0ib3JnLmVjbGlwc2UuZWxrLnN0cmVzcy5kZXNpcmVkRWRnZUxlbmd0aCIseTZ0PSJvcmcuZWNsaXBzZS5lbGsuc3RyZXNzLmRpbWVuc2lvbiIseDZ0PSJvcmcuZWNsaXBzZS5lbGsuc3RyZXNzLmVwc2lsb24iLGs2dD0ib3JnLmVjbGlwc2UuZWxrLnN0cmVzcy5pdGVyYXRpb25MaW1pdCIsb2I9Im9yZy5lY2xpcHNlLmVsay5zdHJlc3MiLG8xZT0iRUxLIFN0cmVzcyIsQzY9Im9yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5taW5pbXVtIixuSD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5mb3JjZS5zdHJlc3MiLGMxZT0iTGF5ZXJlZCBsYXlvdXQiLF82PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQiLFVJPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuY29tcGFjdGlvbi5jb21wb25lbnRzIiwkXz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmNvbXBhY3Rpb24ub25lZCIsckg9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5jb21wYWN0aW9uLm9uZWQuYWxncyIsTDI9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5jb21wYWN0aW9uLnJlY3RodWxsIixUZD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmNvbXBvbmVudHMiLEowPSJOT05FIix4Yz17MzoxLDY6MSw0OjEsOToxLDU6MSwxMjI6MX0sdTFlPXszOjEsNjoxLDQ6MSw1OjEsMTQxOjEsMTA2OjEsMTIwOjF9LGlIPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuY29tcG91bmQiLG9zPXs1MToxfSx0dT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmdyYXBoIixVb3Q9IiAtPiAiLGwxZT0iTm90IHN1cHBvcnRlZCBieSBMR3JhcGgiLEU2dD0iUG9ydCBzaWRlIGlzIHVuZGVmaW5lZCIsV290PXszOjEsNjoxLDQ6MSw1OjEsNDc0OjEsMTQxOjEsMTA2OjEsMTIwOjF9LFlnPXszOjEsNjoxLDQ6MSw1OjEsMTQxOjEsMTkzOjEsMjAzOjEsMTA2OjEsMTIwOjF9LGgxZT17MzoxLDY6MSw0OjEsNToxLDE0MToxLDE5NDM6MSwyMDM6MSwxMDY6MSwxMjA6MX0sZjFlPWAoW3siJyAJXHIKYCxkMWU9YCldfSInIAlccgpgLGcxZT0iVGhlIGdpdmVuIHN0cmluZyBjb250YWlucyBwYXJ0cyB0aGF0IGNhbm5vdCBiZSBwYXJzZWQgYXMgbnVtYmVycy4iLFdJPSJvcmcuZWNsaXBzZS5lbGsuY29yZS5tYXRoIixwMWU9ezM6MSw0OjEsMTQyOjEsMjA3OjEsNDE0OjF9LGIxZT17MzoxLDQ6MSwxMTY6MSwyMDc6MSw0MTQ6MX0sR249Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkIixLZz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmdyYXBoLnRyYW5zZm9ybSIsdzFlPSJFbGtHcmFwaEltcG9ydGVyIix2MWU9IkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDAkVHlwZSIsbTFlPSJFbGtHcmFwaEltcG9ydGVyL2xhbWJkYSQxJFR5cGUiLHkxZT0iRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkMiRUeXBlIix4MWU9IkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDQkVHlwZSIsazFlPSJOb2RlIG1hcmdpbiBjYWxjdWxhdGlvbiIsJG49Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5pbnRlcm1lZGlhdGUiLEUxZT0iT05FX1NJREVEX0dSRUVEWV9TV0lUQ0giLFQxZT0iVFdPX1NJREVEX0dSRUVEWV9TV0lUQ0giLFlvdD0iTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbGF5b3V0IHByb2Nlc3NvciAiLFQ2dD0iSW50ZXJtZWRpYXRlUHJvY2Vzc29yU3RyYXRlZ3kiLEtvdD0iTm9kZSAnIixDMWU9IkZJUlNUX1NFUEFSQVRFIixfMWU9IkxBU1RfU0VQQVJBVEUiLFMxZT0iT2RkIHBvcnQgc2lkZSBwcm9jZXNzaW5nIixfcz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5jb21wYWN0aW9uIix6Xz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5ncmVlZHlzd2l0Y2giLGMwPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDNvcmRlci5jb3VudGluZyIsWUk9ezIyNToxfSxTNj0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5sb29wcyIsR2w9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5pbnRlcm1lZGlhdGUubG9vcHMub3JkZXJpbmciLGNiPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuaW50ZXJtZWRpYXRlLmxvb3BzLnJvdXRpbmciLHFfPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuaW50ZXJtZWRpYXRlLnByZXNlcnZlb3JkZXIiLENkPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuaW50ZXJtZWRpYXRlLndyYXBwaW5nIixrYz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLm9wdGlvbnMiLFhvdD0iSU5URVJBQ1RJVkUiLEExZT0iREVQVEhfRklSU1QiLEwxZT0iRURHRV9MRU5HVEgiLE0xZT0iU0VMRl9MT09QUyIsRDFlPSJmaXJzdFRyeVdpdGhJbml0aWFsT3JkZXIiLEM2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZGlyZWN0aW9uQ29uZ3J1ZW5jeSIsXzZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5mZWVkYmFja0VkZ2VzIixzSD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuaW50ZXJhY3RpdmVSZWZlcmVuY2VQb2ludCIsUzZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5tZXJnZUVkZ2VzIixBNnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm1lcmdlSGllcmFyY2h5RWRnZXMiLEw2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuYWxsb3dOb25GbG93UG9ydHNUb1N3aXRjaFNpZGVzIixNNnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLnBvcnRTb3J0aW5nU3RyYXRlZ3kiLEQ2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQudGhvcm91Z2huZXNzIixJNnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLnVubmVjZXNzYXJ5QmVuZHBvaW50cyIsTzZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5nZW5lcmF0ZVBvc2l0aW9uQW5kTGF5ZXJJZHMiLFFvdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3ljbGVCcmVha2luZy5zdHJhdGVneSIsS0k9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLnN0cmF0ZWd5IixQNnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLmxheWVyQ29uc3RyYWludCIsRjZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5sYXllckNob2ljZUNvbnN0cmFpbnQiLE42dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcubGF5ZXJJZCIsWm90PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5taW5XaWR0aC51cHBlckJvdW5kT25XaWR0aCIsSm90PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5taW5XaWR0aC51cHBlckxheWVyRXN0aW1hdGlvblNjYWxpbmdGYWN0b3IiLHRjdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcubm9kZVByb21vdGlvbi5zdHJhdGVneSIsZWN0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5ub2RlUHJvbW90aW9uLm1heEl0ZXJhdGlvbnMiLG5jdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcuY29mZm1hbkdyYWhhbS5sYXllckJvdW5kIixIXz0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uc3RyYXRlZ3kiLEI2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uZm9yY2VOb2RlTW9kZWxPcmRlciIscmN0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5oaWVyYXJjaGljYWxTd2VlcGluZXNzIixpY3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLnNlbWlJbnRlcmFjdGl2ZSIsUjZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5wb3NpdGlvbkNob2ljZUNvbnN0cmFpbnQiLGo2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24ucG9zaXRpb25JZCIsJDZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5ncmVlZHlTd2l0Y2guYWN0aXZhdGlvblRocmVzaG9sZCIsc2N0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5ncmVlZHlTd2l0Y2gudHlwZSIsYUg9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLmdyZWVkeVN3aXRjaEhpZXJhcmNoaWNhbC50eXBlIixJND0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5zdHJhdGVneSIsb0g9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vZGVQbGFjZW1lbnQuZmF2b3JTdHJhaWdodEVkZ2VzIixhY3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vZGVQbGFjZW1lbnQuYmsuZWRnZVN0cmFpZ2h0ZW5pbmciLG9jdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5iay5maXhlZEFsaWdubWVudCIsY2N0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5ub2RlUGxhY2VtZW50LmxpbmVhclNlZ21lbnRzLmRlZmxlY3Rpb25EYW1wZW5pbmciLHVjdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleC5ub2RlRmxleGliaWxpdHkiLGxjdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleC5ub2RlRmxleGliaWxpdHkuZGVmYXVsdCIsejZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlUm91dGluZy5zZWxmTG9vcERpc3RyaWJ1dGlvbiIscTZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlUm91dGluZy5zZWxmTG9vcE9yZGVyaW5nIixjSD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZWRnZVJvdXRpbmcuc3BsaW5lcy5tb2RlIix1SD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZWRnZVJvdXRpbmcuc3BsaW5lcy5zbG9wcHkubGF5ZXJTcGFjaW5nRmFjdG9yIixoY3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmVkZ2VSb3V0aW5nLnBvbHlsaW5lLnNsb3BlZEVkZ2Vab25lV2lkdGgiLEg2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5iYXNlVmFsdWUiLFY2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5lZGdlTm9kZUJldHdlZW5MYXllcnMiLEc2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5lZGdlRWRnZUJldHdlZW5MYXllcnMiLFU2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5ub2RlTm9kZUJldHdlZW5MYXllcnMiLFc2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQucHJpb3JpdHkuZGlyZWN0aW9uIixZNnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLnByaW9yaXR5LnNob3J0bmVzcyIsSzZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5wcmlvcml0eS5zdHJhaWdodG5lc3MiLGZjdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29tcGFjdGlvbi5jb25uZWN0ZWRDb21wb25lbnRzIixYNnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNvbXBhY3Rpb24ucG9zdENvbXBhY3Rpb24uc3RyYXRlZ3kiLFE2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29tcGFjdGlvbi5wb3N0Q29tcGFjdGlvbi5jb25zdHJhaW50cyIsbEg9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmhpZ2hEZWdyZWVOb2Rlcy50cmVhdG1lbnQiLGRjdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuaGlnaERlZ3JlZU5vZGVzLnRocmVzaG9sZCIsZ2N0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5oaWdoRGVncmVlTm9kZXMudHJlZUhlaWdodCIsdGc9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLnN0cmF0ZWd5IixoSD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuYWRkaXRpb25hbEVkZ2VTcGFjaW5nIixmSD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuY29ycmVjdGlvbkZhY3RvciIsVl89Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLmN1dHRpbmcuc3RyYXRlZ3kiLHBjdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuY3V0dGluZy5jdXRzIixiY3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLmN1dHRpbmcubXNkLmZyZWVkb20iLGRIPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy52YWxpZGlmeS5zdHJhdGVneSIsZ0g9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLnZhbGlkaWZ5LmZvcmJpZGRlbkluZGljZXMiLHBIPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5tdWx0aUVkZ2UuaW1wcm92ZUN1dHMiLGJIPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5tdWx0aUVkZ2UuZGlzdGFuY2VQZW5hbHR5Iix3Y3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLm11bHRpRWRnZS5pbXByb3ZlV3JhcHBlZEVkZ2VzIixaNnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmVkZ2VMYWJlbHMuc2lkZVNlbGVjdGlvbiIsSjZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlTGFiZWxzLmNlbnRlckxhYmVsUGxhY2VtZW50U3RyYXRlZ3kiLHdIPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuc3RyYXRlZ3kiLHRrdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLm5vTW9kZWxPcmRlciIsdmN0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuY29tcG9uZW50cyIsZWt0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIubG9uZ0VkZ2VTdHJhdGVneSIsbWN0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuY3Jvc3NpbmdDb3VudGVyTm9kZUluZmx1ZW5jZSIseWN0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuY3Jvc3NpbmdDb3VudGVyUG9ydEluZmx1ZW5jZSIseGN0PSJsYXllcmluZyIsSTFlPSJsYXllcmluZy5taW5XaWR0aCIsTzFlPSJsYXllcmluZy5ub2RlUHJvbW90aW9uIixYST0iY3Jvc3NpbmdNaW5pbWl6YXRpb24iLHZIPSJvcmcuZWNsaXBzZS5lbGsuaGllcmFyY2h5SGFuZGxpbmciLFAxZT0iY3Jvc3NpbmdNaW5pbWl6YXRpb24uZ3JlZWR5U3dpdGNoIixGMWU9Im5vZGVQbGFjZW1lbnQiLE4xZT0ibm9kZVBsYWNlbWVudC5iayIsQjFlPSJlZGdlUm91dGluZyIsUUk9Im9yZy5lY2xpcHNlLmVsay5lZGdlUm91dGluZyIsUjE9InNwYWNpbmciLG5rdD0icHJpb3JpdHkiLHJrdD0iY29tcGFjdGlvbiIsUjFlPSJjb21wYWN0aW9uLnBvc3RDb21wYWN0aW9uIixqMWU9IlNwZWNpZmllcyB3aGV0aGVyIGFuZCBob3cgcG9zdC1wcm9jZXNzIGNvbXBhY3Rpb24gaXMgYXBwbGllZC4iLGlrdD0iaGlnaERlZ3JlZU5vZGVzIixza3Q9IndyYXBwaW5nIiwkMWU9IndyYXBwaW5nLmN1dHRpbmciLHoxZT0id3JhcHBpbmcudmFsaWRpZnkiLGFrdD0id3JhcHBpbmcubXVsdGlFZGdlIixrY3Q9ImVkZ2VMYWJlbHMiLFpJPSJjb25zaWRlck1vZGVsT3JkZXIiLG9rdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuY29tbWVudENvbW1lbnQiLGNrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuY29tbWVudE5vZGUiLHVrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuZWRnZUVkZ2UiLGxrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuZWRnZU5vZGUiLGhrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcubGFiZWxMYWJlbCIsZmt0PSJvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5sYWJlbFBvcnRIb3Jpem9udGFsIixka3Q9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmxhYmVsUG9ydFZlcnRpY2FsIixna3Q9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmxhYmVsTm9kZSIscGt0PSJvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5ub2RlU2VsZkxvb3AiLGJrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcucG9ydFBvcnQiLHdrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuaW5kaXZpZHVhbCIsdmt0PSJvcmcuZWNsaXBzZS5lbGsucG9ydC5ib3JkZXJPZmZzZXQiLG1rdD0ib3JnLmVjbGlwc2UuZWxrLm5vTGF5b3V0Iix5a3Q9Im9yZy5lY2xpcHNlLmVsay5wb3J0LnNpZGUiLEpJPSJvcmcuZWNsaXBzZS5lbGsuZGVidWdNb2RlIix4a3Q9Im9yZy5lY2xpcHNlLmVsay5hbGlnbm1lbnQiLGtrdD0ib3JnLmVjbGlwc2UuZWxrLmluc2lkZVNlbGZMb29wcy5hY3RpdmF0ZSIsRWt0PSJvcmcuZWNsaXBzZS5lbGsuaW5zaWRlU2VsZkxvb3BzLnlvIixFY3Q9Im9yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5maXhlZEdyYXBoU2l6ZSIsVGt0PSJvcmcuZWNsaXBzZS5lbGsuZGlyZWN0aW9uIixDa3Q9Im9yZy5lY2xpcHNlLmVsay5ub2RlTGFiZWxzLnBhZGRpbmciLF9rdD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMubmV4dFRvUG9ydElmUG9zc2libGUiLFNrdD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMudHJlYXRBc0dyb3VwIixBa3Q9Im9yZy5lY2xpcHNlLmVsay5wb3J0QWxpZ25tZW50LmRlZmF1bHQiLExrdD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQubm9ydGgiLE1rdD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQuc291dGgiLERrdD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQud2VzdCIsSWt0PSJvcmcuZWNsaXBzZS5lbGsucG9ydEFsaWdubWVudC5lYXN0IixtSD0ib3JnLmVjbGlwc2UuZWxrLmNvbnRlbnRBbGlnbm1lbnQiLE9rdD0ib3JnLmVjbGlwc2UuZWxrLmp1bmN0aW9uUG9pbnRzIixQa3Q9Im9yZy5lY2xpcHNlLmVsay5lZGdlTGFiZWxzLnBsYWNlbWVudCIsRmt0PSJvcmcuZWNsaXBzZS5lbGsucG9ydC5pbmRleCIsTmt0PSJvcmcuZWNsaXBzZS5lbGsuY29tbWVudEJveCIsQmt0PSJvcmcuZWNsaXBzZS5lbGsuaHlwZXJub2RlIixSa3Q9Im9yZy5lY2xpcHNlLmVsay5wb3J0LmFuY2hvciIsVGN0PSJvcmcuZWNsaXBzZS5lbGsucGFydGl0aW9uaW5nLmFjdGl2YXRlIixDY3Q9Im9yZy5lY2xpcHNlLmVsay5wYXJ0aXRpb25pbmcucGFydGl0aW9uIix5SD0ib3JnLmVjbGlwc2UuZWxrLnBvc2l0aW9uIixqa3Q9Im9yZy5lY2xpcHNlLmVsay5tYXJnaW5zIiwka3Q9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLnBvcnRzU3Vycm91bmRpbmciLF9jdD0ib3JnLmVjbGlwc2UuZWxrLmludGVyYWN0aXZlTGF5b3V0IixFYz0ib3JnLmVjbGlwc2UuZWxrLmNvcmUudXRpbCIsemt0PXszOjEsNDoxLDU6MSw1OTM6MX0scTFlPSJORVRXT1JLX1NJTVBMRVgiLHpjPXsxMjM6MSw1MToxfSx4SD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnAxY3ljbGVzIixfeT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnAybGF5ZXJzIixxa3Q9ezQwMjoxLDIyNToxfSxIMWU9ezgzMjoxLDM6MSw0OjF9LHF1PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDNvcmRlciIsdW89Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5wNG5vZGVzIixWMWU9ezM6MSw0OjEsNToxLDg0MDoxfSxfZD0xZS01LHViPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDRub2Rlcy5iayIsU2N0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDVlZGdlcyIsdDE9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5wNWVkZ2VzLm9ydGhvZ29uYWwiLEFjdD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnA1ZWRnZXMub3J0aG9nb25hbC5kaXJlY3Rpb24iLExjdD0xZS02LFN5PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDVlZGdlcy5zcGxpbmVzIixNY3Q9LjA5OTk5OTk5OTk5OTk5OTk4LGtIPTFlLTgsRzFlPTQuNzEyMzg4OTgwMzg0NjksVTFlPTMuMTQxNTkyNjUzNTg5NzkzLEdfPSJvcmcuZWNsaXBzZS5lbGsuYWxnLm1ydHJlZSIsVV89Im9yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLmdyYXBoIixBNj0ib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUuaW50ZXJtZWRpYXRlIixXMWU9IlNldCBuZWlnaGJvcnMgaW4gbGV2ZWwiLFkxZT0iREVTQ0VOREFOVFMiLEhrdD0ib3JnLmVjbGlwc2UuZWxrLm1ydHJlZS53ZWlnaHRpbmciLFZrdD0ib3JnLmVjbGlwc2UuZWxrLm1ydHJlZS5zZWFyY2hPcmRlciIsRUg9Im9yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLm9wdGlvbnMiLFhnPSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlIixLMWU9Im9yZy5lY2xpcHNlLmVsay50cmVlIixHa3Q9Im9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsIixPND02LjI4MzE4NTMwNzE3OTU4NixVa3Q9NWUtMzI0LFgxZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwuaW50ZXJtZWRpYXRlIixEY3Q9Im9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLmludGVybWVkaWF0ZS5jb21wYWN0aW9uIixRMWU9ezM6MSw0OjEsNToxLDEwNjoxfSxXa3Q9Im9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLmludGVybWVkaWF0ZS5vcHRpbWl6YXRpb24iLEljdD0iTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbGF5b3V0IG9wdGlvbiAiLFdfPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5vcHRpb25zIixZa3Q9Im9yZy5lY2xpcHNlLmVsay5yYWRpYWwub3JkZXJJZCIsS2t0PSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLnJhZGl1cyIsT2N0PSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLmNvbXBhY3RvciIsUGN0PSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLmNvbXBhY3Rpb25TdGVwU2l6ZSIsWGt0PSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLnNvcnRlciIsUWt0PSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLndlZGdlQ3JpdGVyaWEiLFprdD0ib3JnLmVjbGlwc2UuZWxrLnJhZGlhbC5vcHRpbWl6YXRpb25Dcml0ZXJpYSIsU2Q9Im9yZy5lY2xpcHNlLmVsay5yYWRpYWwiLFoxZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwucDFwb3NpdGlvbi53ZWRnZSIsSmt0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5zb3J0aW5nIixKMWU9NS40OTc3ODcxNDM3ODIxMzgsdGRlPTMuOTI2OTkwODE2OTg3MjQxNCxlZGU9Mi4zNTYxOTQ0OTAxOTIzNDUsbmRlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJlY3RwYWNraW5nIixUSD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yZWN0cGFja2luZy5maXJzdGl0ZXJhdGlvbiIsRmN0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJlY3RwYWNraW5nLm9wdGlvbnMiLHQ4dD0ib3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLm9wdGltaXphdGlvbkdvYWwiLGU4dD0ib3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLmxhc3RQbGFjZVNoaWZ0IixuOHQ9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5jdXJyZW50UG9zaXRpb24iLHI4dD0ib3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLmRlc2lyZWRQb3NpdGlvbiIsaTh0PSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcub25seUZpcnN0SXRlcmF0aW9uIixzOHQ9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5yb3dDb21wYWN0aW9uIixOY3Q9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5leHBhbmRUb0FzcGVjdFJhdGlvIixhOHQ9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy50YXJnZXRXaWR0aCIsQ0g9Im9yZy5lY2xpcHNlLmVsay5leHBhbmROb2RlcyIsUGg9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZyIsdE89Im9yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcudXRpbCIsX0g9Ik5vIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSBmb3IgIixBeT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5zcG9yZSIsTHk9Im9yZy5lY2xpcHNlLmVsay5hbGcuc3BvcmUub3B0aW9ucyIsa3Y9Im9yZy5lY2xpcHNlLmVsay5zcG9yZUNvbXBhY3Rpb24iLEJjdD0ib3JnLmVjbGlwc2UuZWxrLnVuZGVybHlpbmdMYXlvdXRBbGdvcml0aG0iLG84dD0ib3JnLmVjbGlwc2UuZWxrLnByb2Nlc3NpbmdPcmRlci50cmVlQ29uc3RydWN0aW9uIixjOHQ9Im9yZy5lY2xpcHNlLmVsay5wcm9jZXNzaW5nT3JkZXIuc3Bhbm5pbmdUcmVlQ29zdEZ1bmN0aW9uIixSY3Q9Im9yZy5lY2xpcHNlLmVsay5wcm9jZXNzaW5nT3JkZXIucHJlZmVycmVkUm9vdCIsamN0PSJvcmcuZWNsaXBzZS5lbGsucHJvY2Vzc2luZ09yZGVyLnJvb3RTZWxlY3Rpb24iLCRjdD0ib3JnLmVjbGlwc2UuZWxrLnN0cnVjdHVyZS5zdHJ1Y3R1cmVFeHRyYWN0aW9uU3RyYXRlZ3kiLHU4dD0ib3JnLmVjbGlwc2UuZWxrLmNvbXBhY3Rpb24uY29tcGFjdGlvblN0cmF0ZWd5IixsOHQ9Im9yZy5lY2xpcHNlLmVsay5jb21wYWN0aW9uLm9ydGhvZ29uYWwiLGg4dD0ib3JnLmVjbGlwc2UuZWxrLm92ZXJsYXBSZW1vdmFsLm1heEl0ZXJhdGlvbnMiLGY4dD0ib3JnLmVjbGlwc2UuZWxrLm92ZXJsYXBSZW1vdmFsLnJ1blNjYW5saW5lIix6Y3Q9InByb2Nlc3NpbmdPcmRlciIscmRlPSJvdmVybGFwUmVtb3ZhbCIsWUU9Im9yZy5lY2xpcHNlLmVsay5zcG9yZU92ZXJsYXAiLGlkZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5zcG9yZS5wMXN0cnVjdHVyZSIscWN0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLnNwb3JlLnAycHJvY2Vzc2luZ29yZGVyIixIY3Q9Im9yZy5lY2xpcHNlLmVsay5hbGcuc3BvcmUucDNleGVjdXRpb24iLHNkZT0iSW52YWxpZCBpbmRleDogIixLRT0ib3JnLmVjbGlwc2UuZWxrLmNvcmUuYWxnIixQND17MzMxOjF9LE15PXsyODg6MX0sYWRlPSJNYWtlIHN1cmUgaXRzIHR5cGUgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSAiLGQ4dD0iIHV0aWxpdHkgY2xhc3MuIixYRT0idHJ1ZSIsVmN0PSJmYWxzZSIsb2RlPSJDb3VsZG4ndCBjbG9uZSBwcm9wZXJ0eSAnIixFdj0uMDUsRmg9Im9yZy5lY2xpcHNlLmVsay5jb3JlLm9wdGlvbnMiLGNkZT0xLjI5OTk5OTk1MjMxNjI4NDIsVHY9Im9yZy5lY2xpcHNlLmVsay5ib3giLGc4dD0ib3JnLmVjbGlwc2UuZWxrLmJveC5wYWNraW5nTW9kZSIsdWRlPSJvcmcuZWNsaXBzZS5lbGsuYWxnb3JpdGhtIixsZGU9Im9yZy5lY2xpcHNlLmVsay5yZXNvbHZlZEFsZ29yaXRobSIscDh0PSJvcmcuZWNsaXBzZS5lbGsuYmVuZFBvaW50cyIsVXhuPSJvcmcuZWNsaXBzZS5lbGsubGFiZWxNYW5hZ2VyIixoZGU9Im9yZy5lY2xpcHNlLmVsay5zY2FsZUZhY3RvciIsZmRlPSJvcmcuZWNsaXBzZS5lbGsuYW5pbWF0ZSIsZGRlPSJvcmcuZWNsaXBzZS5lbGsuYW5pbVRpbWVGYWN0b3IiLGdkZT0ib3JnLmVjbGlwc2UuZWxrLmxheW91dEFuY2VzdG9ycyIscGRlPSJvcmcuZWNsaXBzZS5lbGsubWF4QW5pbVRpbWUiLGJkZT0ib3JnLmVjbGlwc2UuZWxrLm1pbkFuaW1UaW1lIix3ZGU9Im9yZy5lY2xpcHNlLmVsay5wcm9ncmVzc0JhciIsdmRlPSJvcmcuZWNsaXBzZS5lbGsudmFsaWRhdGVHcmFwaCIsbWRlPSJvcmcuZWNsaXBzZS5lbGsudmFsaWRhdGVPcHRpb25zIix5ZGU9Im9yZy5lY2xpcHNlLmVsay56b29tVG9GaXQiLFd4bj0ib3JnLmVjbGlwc2UuZWxrLmZvbnQubmFtZSIseGRlPSJvcmcuZWNsaXBzZS5lbGsuZm9udC5zaXplIixrZGU9Im9yZy5lY2xpcHNlLmVsay5lZGdlLnR5cGUiLEVkZT0icGFydGl0aW9uaW5nIixUZGU9Im5vZGVMYWJlbHMiLFNIPSJwb3J0QWxpZ25tZW50IixHY3Q9Im5vZGVTaXplIixVY3Q9InBvcnQiLGI4dD0icG9ydExhYmVscyIsQ2RlPSJpbnNpZGVTZWxmTG9vcHMiLFlfPSJvcmcuZWNsaXBzZS5lbGsuZml4ZWQiLEFIPSJvcmcuZWNsaXBzZS5lbGsucmFuZG9tIixfZGU9InBvcnQgbXVzdCBoYXZlIGEgcGFyZW50IG5vZGUgdG8gY2FsY3VsYXRlIHRoZSBwb3J0IHNpZGUiLFNkZT0iVGhlIGVkZ2UgbmVlZHMgdG8gaGF2ZSBleGFjdGx5IG9uZSBlZGdlIHNlY3Rpb24uIEZvdW5kOiAiLEtfPSJvcmcuZWNsaXBzZS5lbGsuY29yZS51dGlsLmFkYXB0ZXJzIixwaD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlIixGND0ib3JnLmVjbGlwc2UuZWxrLmdyYXBoIixBZGU9IkVNYXBQcm9wZXJ0eUhvbGRlciIsTGRlPSJFbGtCZW5kUG9pbnQiLE1kZT0iRWxrR3JhcGhFbGVtZW50IixEZGU9IkVsa0Nvbm5lY3RhYmxlU2hhcGUiLHc4dD0iRWxrRWRnZSIsSWRlPSJFbGtFZGdlU2VjdGlvbiIsT2RlPSJFTW9kZWxFbGVtZW50IixQZGU9IkVOYW1lZEVsZW1lbnQiLHY4dD0iRWxrTGFiZWwiLG04dD0iRWxrTm9kZSIseTh0PSJFbGtQb3J0IixGZGU9ezkyOjEsOTA6MX0sTDY9Im9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwiLGxiPSJUaGUgZmVhdHVyZSAnIixYXz0iJyBpcyBub3QgYSB2YWxpZCBjaGFuZ2VhYmxlIGZlYXR1cmUiLE5kZT0iRXhwZWN0aW5nIG51bGwiLFdjdD0iJyBpcyBub3QgYSB2YWxpZCBmZWF0dXJlIixCZGU9IlRoZSBmZWF0dXJlIElEIixSZGU9IiBpcyBub3QgYSB2YWxpZCBmZWF0dXJlIElEIixkYz0zMjc2OCxqZGU9ezEwNToxLDkyOjEsOTA6MSw1NjoxLDQ5OjEsOTc6MX0sTW49Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsIixNMj0ib3JnLmVjbGlwc2UuZWxrLmdyYXBoLmltcGwiLFFfPSJSZWN1cnNpdmUgY29udGFpbm1lbnQgbm90IGFsbG93ZWQgZm9yICIsUUU9IlRoZSBkYXRhdHlwZSAnIixDdj0iJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIixZY3Q9IlRoZSB2YWx1ZSAnIixOND17MTkwOjEsMzoxLDQ6MX0sS2N0PSJUaGUgY2xhc3MgJyIsWkU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZWxrL0Vsa0dyYXBoIix4Zj0xMDI0LHg4dD0icHJvcGVydHkiLFpfPSJ2YWx1ZSIsWGN0PSJzb3VyY2UiLCRkZT0icHJvcGVydGllcyIsemRlPSJpZGVudGlmaWVyIixRY3Q9ImhlaWdodCIsWmN0PSJ3aWR0aCIsSmN0PSJwYXJlbnQiLHR1dD0idGV4dCIsZXV0PSJjaGlsZHJlbiIscWRlPSJoaWVyYXJjaGljYWwiLGs4dD0ic291cmNlcyIsbnV0PSJ0YXJnZXRzIixFOHQ9InNlY3Rpb25zIixMSD0iYmVuZFBvaW50cyIsVDh0PSJvdXRnb2luZ1NoYXBlIixDOHQ9ImluY29taW5nU2hhcGUiLF84dD0ib3V0Z29pbmdTZWN0aW9ucyIsUzh0PSJpbmNvbWluZ1NlY3Rpb25zIixSYT0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsIixBOHQ9IlNldmVyZSBpbXBsZW1lbnRhdGlvbiBlcnJvciBpbiB0aGUgSnNvbiB0byBFbGtHcmFwaCBpbXBvcnRlci4iLEFkPSJpZCIsbWE9Im9yZy5lY2xpcHNlLmVsay5ncmFwaC5qc29uIixMOHQ9IlVuaGFuZGxlZCBwYXJhbWV0ZXIgdHlwZXM6ICIsSGRlPSJzdGFydFBvaW50IixWZGU9IkFuIGVkZ2UgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBzb3VyY2UgYW5kIG9uZSB0YXJnZXQgKGVkZ2UgaWQ6ICciLEpFPSInKS4iLEdkZT0iUmVmZXJlbmNlZCBlZGdlIHNlY3Rpb24gZG9lcyBub3QgZXhpc3Q6ICIsVWRlPSIgKGVkZ2UgaWQ6ICciLE04dD0idGFyZ2V0IixXZGU9InNvdXJjZVBvaW50IixZZGU9InRhcmdldFBvaW50IixNSD0iZ3JvdXAiLGNpPSJuYW1lIixLZGU9ImNvbm5lY3RhYmxlU2hhcGUgY2Fubm90IGJlIG51bGwiLFhkZT0iZWRnZSBjYW5ub3QgYmUgbnVsbCIscnV0PSJQYXNzZWQgZWRnZSBpcyBub3QgJ3NpbXBsZScuIixESD0ib3JnLmVjbGlwc2UuZWxrLmdyYXBoLnV0aWwiLGVPPSJUaGUgJ25vIGR1cGxpY2F0ZXMnIGNvbnN0cmFpbnQgaXMgdmlvbGF0ZWQiLGl1dD0idGFyZ2V0SW5kZXg9IixEMj0iLCBzaXplPSIsc3V0PSJzb3VyY2VJbmRleD0iLExkPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxLDY3OjEsNjM6MSw1ODoxfSxhdXQ9ezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSw0NzoxLDE1OjEsNTQ6MSw2NzoxLDYzOjEsNTg6MSw1ODg6MX0sSUg9ImxvZ2dpbmciLFFkZT0ibWVhc3VyZUV4ZWN1dGlvblRpbWUiLFpkZT0icGFyc2VyLnBhcnNlLjEiLEpkZT0icGFyc2VyLnBhcnNlLjIiLE9IPSJwYXJzZXIubmV4dC4xIixvdXQ9InBhcnNlci5uZXh0LjIiLHQwZT0icGFyc2VyLm5leHQuMyIsZTBlPSJwYXJzZXIubmV4dC40IixJMj0icGFyc2VyLmZhY3Rvci4xIixEOHQ9InBhcnNlci5mYWN0b3IuMiIsbjBlPSJwYXJzZXIuZmFjdG9yLjMiLHIwZT0icGFyc2VyLmZhY3Rvci40IixpMGU9InBhcnNlci5mYWN0b3IuNSIsczBlPSJwYXJzZXIuZmFjdG9yLjYiLGEwZT0icGFyc2VyLmF0b20uMSIsbzBlPSJwYXJzZXIuYXRvbS4yIixjMGU9InBhcnNlci5hdG9tLjMiLEk4dD0icGFyc2VyLmF0b20uNCIsY3V0PSJwYXJzZXIuYXRvbS41IixPOHQ9InBhcnNlci5jYy4xIixQSD0icGFyc2VyLmNjLjIiLHUwZT0icGFyc2VyLmNjLjMiLGwwZT0icGFyc2VyLmNjLjUiLFA4dD0icGFyc2VyLmNjLjYiLEY4dD0icGFyc2VyLmNjLjciLHV1dD0icGFyc2VyLmNjLjgiLGgwZT0icGFyc2VyLm9wZS4xIixmMGU9InBhcnNlci5vcGUuMiIsZDBlPSJwYXJzZXIub3BlLjMiLFFnPSJwYXJzZXIuZGVzY2FwZS4xIixnMGU9InBhcnNlci5kZXNjYXBlLjIiLHAwZT0icGFyc2VyLmRlc2NhcGUuMyIsYjBlPSJwYXJzZXIuZGVzY2FwZS40Iix3MGU9InBhcnNlci5kZXNjYXBlLjUiLGJoPSJwYXJzZXIucHJvY2Vzcy4xIix2MGU9InBhcnNlci5xdWFudGlmaWVyLjEiLG0wZT0icGFyc2VyLnF1YW50aWZpZXIuMiIseTBlPSJwYXJzZXIucXVhbnRpZmllci4zIix4MGU9InBhcnNlci5xdWFudGlmaWVyLjQiLE44dD0icGFyc2VyLnF1YW50aWZpZXIuNSIsazBlPSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeSIsQjh0PXs0MTU6MSw2NzI6MX0sRTBlPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw2NzoxLDU4OjF9LG5PPXszNjY6MSwxNDM6MX0sSl89ImluZGV4PSIsbHV0PXszOjEsNDoxLDU6MSwxMjY6MX0sVDBlPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxLDY3OjEsNTg6MX0sUjh0PXszOjEsNjoxLDQ6MSw1OjEsMTkyOjF9LEMwZT17MzoxLDQ6MSw1OjEsMTY1OjEsMzY3OjF9LF8wZT0iOy8/OkAmPSskLCIsUzBlPSJpbnZhbGlkIGF1dGhvcml0eTogIixBMGU9IkVBbm5vdGF0aW9uIixMMGU9IkVUeXBlZEVsZW1lbnQiLE0wZT0iRVN0cnVjdHVyYWxGZWF0dXJlIixEMGU9IkVBdHRyaWJ1dGUiLEkwZT0iRUNsYXNzaWZpZXIiLE8wZT0iRUVudW1MaXRlcmFsIixQMGU9IkVHZW5lcmljVHlwZSIsRjBlPSJFT3BlcmF0aW9uIixOMGU9IkVQYXJhbWV0ZXIiLEIwZT0iRVJlZmVyZW5jZSIsUjBlPSJFVHlwZVBhcmFtZXRlciIsJGk9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsIixodXQ9ezc2OjF9LGo4dD17MzoxLDIwOjEsMTQ6MSwxNToxLDU4OjEsNTg5OjEsNzY6MSw2OToxLDk1OjF9LGowZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRmVhdHVyZU1hcCRFbnRyeSIsSHU9ODE5MixEeT0yMDQ4LHRTPSJieXRlIixGSD0iY2hhciIsZVM9ImRvdWJsZSIsblM9ImZsb2F0IixyUz0iaW50IixpUz0ibG9uZyIsc1M9InNob3J0IiwkMGU9ImphdmEubGFuZy5PYmplY3QiLEI0PXszOjEsNDoxLDU6MSwyNDc6MX0sJDh0PXszOjEsNDoxLDU6MSw2NzM6MX0sejBlPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxLDY3OjEsNjM6MSw1ODoxLDY5OjF9LHpvPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxLDY3OjEsNjM6MSw1ODoxLDc2OjEsNjk6MSw5NToxfSxyTz0ibWl4ZWQiLFlyPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiLE5oPSJraW5kIixxMGU9ezM6MSw0OjEsNToxLDY3NDoxfSx6OHQ9ezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDY3OjEsNTg6MSw3NjoxLDY5OjEsOTU6MX0sTkg9ezIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1ODoxLDY5OjF9LEJIPXs0NzoxLDEyNToxLDI3OToxfSxSSD17NzI6MSwzMzI6MX0sakg9IlRoZSB2YWx1ZSBvZiB0eXBlICciLCRIPSInIG11c3QgYmUgb2YgdHlwZSAnIixSND0xMzE2LEJoPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIix6SD0tMzI3NjgsX3Y9ImNvbnN0cmFpbnRzIixBYT0iYmFzZVR5cGUiLEgwZT0iZ2V0RVN0cnVjdHVyYWxGZWF0dXJlIixWMGU9ImdldEZlYXR1cmVJRCIsYVM9ImZlYXR1cmUiLEcwZT0iZ2V0T3BlcmF0aW9uSUQiLHE4dD0ib3BlcmF0aW9uIixVMGU9ImRlZmF1bHRWYWx1ZSIsVzBlPSJlVHlwZVBhcmFtZXRlcnMiLFkwZT0iaXNJbnN0YW5jZSIsSzBlPSJnZXRFRW51bUxpdGVyYWwiLFgwZT0iZUNvbnRhaW5pbmdDbGFzcyIsc2k9ezU1OjF9LFEwZT17MzoxLDQ6MSw1OjEsMTE5OjF9LFowZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlIixKMGU9ezkyOjEsOTA6MSw1OTE6MSwxOTM1OjF9LGZ1dD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwiLEg4dD0idW5zcGVjaWZpZWQiLGlPPSJzaW1wbGUiLHFIPSJhdHRyaWJ1dGUiLHRnZT0iYXR0cmlidXRlV2lsZGNhcmQiLEhIPSJlbGVtZW50IixkdXQ9ImVsZW1lbnRXaWxkY2FyZCIsZTE9ImNvbGxhcHNlIixndXQ9Iml0ZW1UeXBlIixWSD0ibmFtZXNwYWNlIixzTz0iIyN0YXJnZXROYW1lc3BhY2UiLFJoPSJ3aGl0ZVNwYWNlIixWOHQ9IndpbGRjYXJkcyIsTzI9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSIscHV0PSIjI2FueSIsdDc9InVuaW5pdGlhbGl6ZWQiLGFPPSJUaGUgbXVsdGlwbGljaXR5IGNvbnN0cmFpbnQgaXMgdmlvbGF0ZWQiLEdIPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUiLGVnZT0iUHJvY2Vzc2luZ0luc3RydWN0aW9uIixuZ2U9IlNpbXBsZUFueVR5cGUiLHJnZT0iWE1MVHlwZURvY3VtZW50Um9vdCIseHM9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5pbXBsIixvTz0iSU5GIixpZ2U9InByb2Nlc3NpbmciLHNnZT0iRU5USVRJRVNfLl9iYXNlIixHOHQ9Im1pbkxlbmd0aCIsVTh0PSJFTlRJVFkiLFVIPSJOQ05hbWUiLGFnZT0iSURSRUZTXy5fYmFzZSIsVzh0PSJpbnRlZ2VyIixidXQ9InRva2VuIix3dXQ9InBhdHRlcm4iLG9nZT0iW2EtekEtWl17MSw4fSgtW2EtekEtWjAtOV17MSw4fSkqIixZOHQ9IlxcaVxcYyoiLGNnZT0iW1xcaS1bOl1dW1xcYy1bOl1dKiIsdWdlPSJub25Qb3NpdGl2ZUludGVnZXIiLGNPPSJtYXhJbmNsdXNpdmUiLEs4dD0iTk1UT0tFTiIsbGdlPSJOTVRPS0VOU18uX2Jhc2UiLFg4dD0ibm9uTmVnYXRpdmVJbnRlZ2VyIix1Tz0ibWluSW5jbHVzaXZlIixoZ2U9Im5vcm1hbGl6ZWRTdHJpbmciLGZnZT0idW5zaWduZWRCeXRlIixkZ2U9InVuc2lnbmVkSW50IixnZ2U9IjE4NDQ2NzQ0MDczNzA5NTUxNjE1IixwZ2U9InVuc2lnbmVkU2hvcnQiLGJnZT0icHJvY2Vzc2luZ0luc3RydWN0aW9uIixaZz0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLmludGVybmFsIixlNz0xMTE0MTExLHdnZT0iSW50ZXJuYWwgRXJyb3I6IHNob3J0aGFuZHM6IFxcdSIsb1M9InhtbDppc0RpZ2l0Iix2dXQ9InhtbDppc1dvcmQiLG11dD0ieG1sOmlzU3BhY2UiLHl1dD0ieG1sOmlzTmFtZUNoYXIiLHh1dD0ieG1sOmlzSW5pdGlhbE5hbWVDaGFyIix2Z2U9IjA52aDZqduw27ngpabgpa/gp6bgp6/gqabgqa/gq6bgq6/grabgra/gr6fgr6/gsabgsa/gs6bgs6/gtabgta/guZDguZngu5Dgu5ngvKDgvKkiLG1nZT0iQVphesOAw5bDmMO2w7jEscS0xL7FgcWIxYrFvsaAx4PHjcewx7THtce6yJfJkMqoyrvLgc6GzobOiM6KzozOjM6OzqHOo8+Oz5DPls+az5rPnM+cz57Pns+gz6DPos+z0IHQjNCO0Y/RkdGc0Z7SgdKQ04TTh9OI04vTjNOQ06vTrtO107jTudSx1ZbVmdWZ1aHWhteQ16rXsNey2KHYutmB2YrZsdq32rravtuA247bkNuT25Xbldul26bgpIXgpLngpL3gpL3gpZjgpaHgpoXgpozgpo/gppDgppPgpqjgpqrgprDgprLgprLgprbgprngp5zgp53gp5/gp6Hgp7Dgp7HgqIXgqIrgqI/gqJDgqJPgqKjgqKrgqLDgqLLgqLPgqLXgqLbgqLjgqLngqZngqZzgqZ7gqZ7gqbLgqbTgqoXgqovgqo3gqo3gqo/gqpHgqpPgqqjgqqrgqrDgqrLgqrPgqrXgqrngqr3gqr3gq6Dgq6DgrIXgrIzgrI/grJDgrJPgrKjgrKrgrLDgrLLgrLPgrLbgrLngrL3grL3grZzgrZ3grZ/graHgroXgrorgro7grpDgrpLgrpXgrpngrprgrpzgrpzgrp7grp/grqPgrqTgrqjgrqrgrq7grrXgrrfgrrngsIXgsIzgsI7gsJDgsJLgsKjgsKrgsLPgsLXgsLngsaDgsaHgsoXgsozgso7gspDgspLgsqjgsqrgsrPgsrXgsrngs57gs57gs6Dgs6HgtIXgtIzgtI7gtJDgtJLgtKjgtKrgtLngtaDgtaHguIHguK7guLDguLDguLLguLPguYDguYXguoHguoLguoTguoTguofguojguorguorguo3guo3gupTgupfgupngup/guqHguqPguqXguqXguqfguqfguqrguqvguq3guq7gurDgurDgurLgurPgur3gur3gu4Dgu4TgvYDgvYfgvYngvanhgqDhg4Xhg5Dhg7bhhIDhhIDhhILhhIPhhIXhhIfhhInhhInhhIvhhIzhhI7hhJLhhLzhhLzhhL7hhL7hhYDhhYDhhYzhhYzhhY7hhY7hhZDhhZDhhZThhZXhhZnhhZnhhZ/hhaHhhaPhhaPhhaXhhaXhhafhhafhhanhhanhha3hha7hhbLhhbPhhbXhhbXhhp7hhp7hhqjhhqjhhqvhhqvhhq7hhq/hhrfhhrjhhrrhhrrhhrzhh4Lhh6vhh6vhh7Dhh7Dhh7nhh7nhuIDhupvhuqDhu7nhvIDhvJXhvJjhvJ3hvKDhvYXhvYjhvY3hvZDhvZfhvZnhvZnhvZvhvZvhvZ3hvZ3hvZ/hvb3hvoDhvrThvrbhvrzhvr7hvr7hv4Lhv4Thv4bhv4zhv5Dhv5Phv5bhv5vhv6Dhv6zhv7Lhv7Thv7bhv7zihKbihKbihKrihKvihK7ihK7ihoDihoLjgIfjgIfjgKHjgKnjgYHjgpTjgqHjg7rjhIXjhKzkuIDpvqXqsIDtnqMiLHlnZT0iUHJpdmF0ZSBVc2UiLGt1dD0iQVNTSUdORUQiLEV1dD0iXDB/woDDv8SAxb/GgMmPyZDKr8qwy7/MgM2vzbDPv9CA07/UsNaP1pDXv9iA27/cgN2P3oDev+CkgOClv+CmgOCnv+CogOCpv+CqgOCrv+CsgOCtv+CugOCvv+CwgOCxv+CygOCzv+C0gOC1v+C2gOC3v+C4gOC5v+C6gOC7v+C8gOC/v+GAgOGCn+GCoOGDv+GEgOGHv+GIgOGNv+GOoOGPv+GQgOGZv+GagOGan+GaoOGbv+GegOGfv+GggOGir+G4gOG7v+G8gOG/v+KAgOKBr+KBsOKCn+KCoOKDj+KDkOKDv+KEgOKFj+KFkOKGj+KGkOKHv+KIgOKLv+KMgOKPv+KQgOKQv+KRgOKRn+KRoOKTv+KUgOKVv+KWgOKWn+KWoOKXv+KYgOKbv+KcgOKev+KggOKjv+K6gOK7v+K8gOK/n+K/sOK/v+OAgOOAv+OBgOOCn+OCoOODv+OEgOOEr+OEsOOGj+OGkOOGn+OGoOOGv+OIgOOLv+OMgOOPv+OQgOS2teS4gOm/v+qAgOqSj+qSkOqTj+qwgO2eo+6AgO+jv++kgO+rv++sgO+tj++tkO+3v++4oO+4r++4sO+5j++5kO+5r++5sO+7vlx1RkVGRlx1RkVGRu+8gO+/ryIsUTh0PSJVTkFTU0lHTkVEIixuNz17MzoxLDExNzoxfSx4Z2U9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS51dGlsIixXSD17MzoxLDQ6MSw1OjEsMzY4OjF9LFo4dD0ib3JnLmVjbGlwc2UueHRleHQueGJhc2UubGliIixrZ2U9IkNhbm5vdCBhZGQgZWxlbWVudHMgdG8gYSBSYW5nZSIsRWdlPSJDYW5ub3Qgc2V0IGVsZW1lbnRzIGluIGEgUmFuZ2UiLFRnZT0iQ2Fubm90IHJlbW92ZSBlbGVtZW50cyBmcm9tIGEgUmFuZ2UiLFlIPSJsb2NhbGUiLEtIPSJkZWZhdWx0IixYSD0idXNlci5hZ2VudCIsbCxRSCxUdXQ7Yi5nb29nPWIuZ29vZ3x8e30sYi5nb29nLmdsb2JhbD1iLmdvb2cuZ2xvYmFsfHxiLG1nbigpLEQoMSxudWxsLHt9LF8pLGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIG1VdCh0aGlzLGUpfSxsLkdiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ219LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gUHcodGhpcyl9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gSXAob2wodGhpcykpKyJAIisoZT1IaSh0aGlzKT4+PjAsZS50b1N0cmluZygxNikpfSxsLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5GYih0KX0sbC5oYXNoQ29kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLkhiKCl9LGwudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5JYigpfTt2YXIgQ2dlLF9nZSxTZ2U7RCgyOTAsMSx7MjkwOjEsMjAyNjoxfSxMeXQpLGwubGU9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49bmV3IEx5dCxuLmk9NCxlPjE/bi5jPU5RdCh0aGlzLGUtMSk6bi5jPXRoaXMsbn0sbC5tZT1mdW5jdGlvbigpe3JldHVybiBQMCh0aGlzKSx0aGlzLmJ9LGwubmU9ZnVuY3Rpb24oKXtyZXR1cm4gSXAodGhpcyl9LGwub2U9ZnVuY3Rpb24oKXtyZXR1cm4gUDAodGhpcyksdGhpcy5rfSxsLnBlPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuaSY0KSE9MH0sbC5xZT1mdW5jdGlvbigpe3JldHVybih0aGlzLmkmMSkhPTB9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gVm10KHRoaXMpfSxsLmk9MDt2YXIgUW49RihYbywiT2JqZWN0IiwxKSxKOHQ9RihYbywiQ2xhc3MiLDI5MCk7RCgxOTk4LDEsREkpLEYoSUksIk9wdGlvbmFsIiwxOTk4KSxEKDExNzAsMTk5OCxESSxBKSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dGhpc30sbC5IYj1mdW5jdGlvbigpe3JldHVybiAyMDQwNzMyMzMyfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIk9wdGlvbmFsLmFic2VudCgpIn0sbC5KYj1mdW5jdGlvbihlKXtyZXR1cm4gTHIoZSksUEMoKSxDdXR9O3ZhciBDdXQ7RihJSSwiQWJzZW50IiwxMTcwKSxEKDYyOCwxLHt9LHZldCksRihJSSwiSm9pbmVyIiw2MjgpO3ZhciBZeG49S2koSUksIlByZWRpY2F0ZSIpO0QoNTgyLDEsezE2OToxLDU4MjoxLDM6MSw0NToxfSxtQyksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4ga3JlKHRoaXMsZSl9LGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIGtyZSh0aGlzLGUpfSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBfdChlLDU4Mik/KG49dShlLDU4MiksazV0KHRoaXMuYSxuLmEpKTohMX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBQeXQodGhpcy5hKSszMDY2NTQyNTJ9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gc3BuKHRoaXMuYSl9LEYoSUksIlByZWRpY2F0ZXMvQW5kUHJlZGljYXRlIiw1ODIpLEQoNDA4LDE5OTgsezQwODoxLDM6MX0sV2spLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIF90KGUsNDA4KT8obj11KGUsNDA4KSx5aSh0aGlzLmEsbi5hKSk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gMTUwMjQ3NjU3MitIaSh0aGlzLmEpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGNmZSt0aGlzLmErIikifSxsLkpiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgV2soZyQoZS5LYih0aGlzLmEpLCJ0aGUgRnVuY3Rpb24gcGFzc2VkIHRvIE9wdGlvbmFsLnRyYW5zZm9ybSgpIG11c3Qgbm90IHJldHVybiBudWxsLiIpKX0sRihJSSwiUHJlc2VudCIsNDA4KSxEKDE5OCwxLEZFKSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUWI9ZnVuY3Rpb24oKXt1SHQoKX0sRihLZSwiVW5tb2RpZmlhYmxlSXRlcmF0b3IiLDE5OCksRCgxOTc4LDE5OCxORSksbC5RYj1mdW5jdGlvbigpe3VIdCgpfSxsLlJiPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuV2I9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sRihLZSwiVW5tb2RpZmlhYmxlTGlzdEl0ZXJhdG9yIiwxOTc4KSxEKDM4NiwxOTc4LE5FKSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYzx0aGlzLmR9LGwuU2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jPjB9LGwuUGI9ZnVuY3Rpb24oKXtpZih0aGlzLmM+PXRoaXMuZCl0aHJvdyBpdChuZXcgbGMpO3JldHVybiB0aGlzLlhiKHRoaXMuYysrKX0sbC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwuVWI9ZnVuY3Rpb24oKXtpZih0aGlzLmM8PTApdGhyb3cgaXQobmV3IGxjKTtyZXR1cm4gdGhpcy5YYigtLXRoaXMuYyl9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLTF9LGwuYz0wLGwuZD0wLEYoS2UsIkFic3RyYWN0SW5kZXhlZExpc3RJdGVyYXRvciIsMzg2KSxEKDY5OSwxOTgsRkUpLGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gYml0KHRoaXMpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIFJtdCh0aGlzKX0sbC5lPTEsRihLZSwiQWJzdHJhY3RJdGVyYXRvciIsNjk5KSxEKDE5ODYsMSx7MjI0OjF9KSxsLlpiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5mLGV8fCh0aGlzLmY9dGhpcy5hYygpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gUGl0KHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSGkodGhpcy5aYigpKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdjKCk9PTB9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gcXgodGhpcyl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5aYigpKX0sRihLZSwiQWJzdHJhY3RNdWx0aW1hcCIsMTk4NiksRCg3MjYsMTk4NixUMiksbC4kYj1mdW5jdGlvbigpe2N6KHRoaXMpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiBBSHQodGhpcyxlKX0sbC5hYz1mdW5jdGlvbigpe3JldHVybiBuZXcgbDgodGhpcyx0aGlzLmMpfSxsLmljPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhjKCl9LGwuYmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEszKHRoaXMsdGhpcy5jKX0sbC5qYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1jKHRoaXMuaGMoKSl9LGwua2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFVxdCh0aGlzKX0sbC5sYz1mdW5jdGlvbigpe3JldHVybiB6c3QodGhpcy5jLnZjKCkuTmMoKSxuZXcgQiw2NCx0aGlzLmQpfSxsLmNjPWZ1bmN0aW9uKGUpe3JldHVybiBBaSh0aGlzLGUpfSxsLmZjPWZ1bmN0aW9uKGUpe3JldHVybiBHRCh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC5tYz1mdW5jdGlvbihlKXtyZXR1cm4gd24oKSxuZXcgVChlKX0sbC5uYz1mdW5jdGlvbigpe3JldHVybiBuZXcgR3F0KHRoaXMpfSxsLm9jPWZ1bmN0aW9uKCl7cmV0dXJuIHpzdCh0aGlzLmMuQ2MoKS5OYygpLG5ldyBJLDY0LHRoaXMuZCl9LGwucGM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IHEkKHRoaXMsZSxuLG51bGwpfSxsLmQ9MCxGKEtlLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAiLDcyNiksRCgxNjMxLDcyNixUMiksbC5oYz1mdW5jdGlvbigpe3JldHVybiBuZXcgWGModGhpcy5hKX0sbC5qYz1mdW5jdGlvbigpe3JldHVybiB3bigpLHduKCksaW99LGwuY2M9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoQWkodGhpcyxlKSwxNSl9LGwuZmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoR0QodGhpcyxlKSwxNSl9LGwuWmI9ZnVuY3Rpb24oKXtyZXR1cm4gV3godGhpcyl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIFBpdCh0aGlzLGUpfSxsLnFjPWZ1bmN0aW9uKGUpe3JldHVybiB1KEFpKHRoaXMsZSksMTUpfSxsLnJjPWZ1bmN0aW9uKGUpe3JldHVybiB1KEdEKHRoaXMsZSksMTUpfSxsLm1jPWZ1bmN0aW9uKGUpe3JldHVybiBpRCh1KGUsMTUpKX0sbC5wYz1mdW5jdGlvbihlLG4pe3JldHVybiB6WnQodGhpcyxlLHUobiwxNSksbnVsbCl9LEYoS2UsIkFic3RyYWN0TGlzdE11bHRpbWFwIiwxNjMxKSxEKDczMiwxLHNhKSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLk9iKCl8fHRoaXMuZS5PYigpfSxsLlBiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuZS5PYigpfHwoZT11KHRoaXMuYy5QYigpLDQyKSx0aGlzLmI9ZS5jZCgpLHRoaXMuYT11KGUuZGQoKSwxNCksdGhpcy5lPXRoaXMuYS5LYygpKSx0aGlzLnNjKHRoaXMuYix0aGlzLmUuUGIoKSl9LGwuUWI9ZnVuY3Rpb24oKXt0aGlzLmUuUWIoKSx0aGlzLmEuZGMoKSYmdGhpcy5jLlFiKCksLS10aGlzLmQuZH0sRihLZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL0l0ciIsNzMyKSxEKDEwOTksNzMyLHNhLEdxdCksbC5zYz1mdW5jdGlvbihlLG4pe3JldHVybiBufSxGKEtlLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvMSIsMTA5OSksRCgxMTAwLDEse30sSSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDE0KS5OYygpfSxGKEtlLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvMW1ldGhvZHJlZiRzcGxpdGVyYXRvciRUeXBlIiwxMTAwKSxEKDExMDEsNzMyLHNhLFVxdCksbC5zYz1mdW5jdGlvbihlLG4pe3JldHVybiBuZXcgTHcoZSxuKX0sRihLZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwLzIiLDExMDEpO3ZhciB0RXQ9S2kocHIsIk1hcCIpO0QoMTk2NywxLG12KSxsLndjPWZ1bmN0aW9uKGUpe0s5KHRoaXMsZSl9LGwueWM9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBRaXQodGhpcyxlLG4scil9LGwuJGI9ZnVuY3Rpb24oKXt0aGlzLnZjKCkuJGIoKX0sbC50Yz1mdW5jdGlvbihlKXtyZXR1cm4gVHN0KHRoaXMsZSl9LGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuISFDNHQodGhpcyxlLCExKX0sbC51Yz1mdW5jdGlvbihlKXt2YXIgbixyLHM7Zm9yKHI9dGhpcy52YygpLktjKCk7ci5PYigpOylpZihuPXUoci5QYigpLDQyKSxzPW4uZGQoKSxWdChlKT09PVZ0KHMpfHxlIT1udWxsJiZ5aShlLHMpKXJldHVybiEwO3JldHVybiExfSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztpZihlPT09dGhpcylyZXR1cm4hMDtpZighX3QoZSw4Myl8fChzPXUoZSw4MyksdGhpcy5nYygpIT1zLmdjKCkpKXJldHVybiExO2ZvcihyPXMudmMoKS5LYygpO3IuT2IoKTspaWYobj11KHIuUGIoKSw0MiksIXRoaXMudGMobikpcmV0dXJuITE7cmV0dXJuITB9LGwueGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGVjKEM0dCh0aGlzLGUsITEpKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBUeXQodGhpcy52YygpKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdjKCk9PTB9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNtKHRoaXMpfSxsLnpjPWZ1bmN0aW9uKGUsbil7dGhyb3cgaXQobmV3IFNnKCJQdXQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIG1hcCIpKX0sbC5BYz1mdW5jdGlvbihlKXtZOSh0aGlzLGUpfSxsLkJjPWZ1bmN0aW9uKGUpe3JldHVybiBlYyhDNHQodGhpcyxlLCEwKSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YygpLmdjKCl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gVGFlKHRoaXMpfSxsLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB2MSh0aGlzKX0sRihwciwiQWJzdHJhY3RNYXAiLDE5NjcpLEQoMTk4NywxOTY3LG12KSxsLmJjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGUih0aGlzKX0sbC52Yz1mdW5jdGlvbigpe3JldHVybiAkS3QodGhpcyl9LGwuZWM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmcsZXx8KHRoaXMuZz10aGlzLmJjKCkpfSxsLkNjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5pLGV8fCh0aGlzLmk9bmV3IHlWdCh0aGlzKSl9LEYoS2UsIk1hcHMvVmlld0NhY2hpbmdBYnN0cmFjdE1hcCIsMTk4NyksRCgzODksMTk4NyxtdixsOCksbC54Yz1mdW5jdGlvbihlKXtyZXR1cm4gem9uKHRoaXMsZSl9LGwuQmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJsbih0aGlzLGUpfSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5kPT10aGlzLmUuYz90aGlzLmUuJGIoKTpWaihuZXcgVXd0KHRoaXMpKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gZWllKHRoaXMuZCxlKX0sbC5FYz1mdW5jdGlvbigpe3JldHVybiBuZXcgWWsodGhpcyl9LGwuRGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5FYygpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZXx8eWkodGhpcy5kLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEhpKHRoaXMuZCl9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lLmVjKCl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kLmdjKCl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5kKX0sRihLZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL0FzTWFwIiwzODkpO3ZhciBqMT1LaShYbywiSXRlcmFibGUiKTtEKDI4LDEseHkpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5MYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLk9jKCl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMsMCl9LGwuT2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRuKG51bGwsdGhpcy5OYygpKX0sbC5GYz1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgU2coIkFkZCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgY29sbGVjdGlvbiIpKX0sbC5HYz1mdW5jdGlvbihlKXtyZXR1cm4gVWEodGhpcyxlKX0sbC4kYj1mdW5jdGlvbigpe0R2dCh0aGlzKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gYXkodGhpcyxlLCExKX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4gTkQodGhpcyxlKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdjKCk9PTB9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGF5KHRoaXMsZSwhMCl9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gc3Z0KHRoaXMpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiBlSSh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGViKHRoaXMpfSxGKHByLCJBYnN0cmFjdENvbGxlY3Rpb24iLDI4KTt2YXIgamg9S2kocHIsIlNldCIpO0QoTjEsMjgsenUpLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMsMSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIFlpZSh0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFR5dCh0aGlzKX0sRihwciwiQWJzdHJhY3RTZXQiLE4xKSxEKDE5NzAsTjEsenUpLEYoS2UsIlNldHMvSW1wcm92ZWRBYnN0cmFjdFNldCIsMTk3MCksRCgxOTcxLDE5NzAsenUpLGwuJGI9ZnVuY3Rpb24oKXt0aGlzLlJjKCkuJGIoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gTGllKHRoaXMsZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SYygpLmRjKCl9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIHRoaXMuSGMoZSk/KG49dShlLDQyKSx0aGlzLlJjKCkuZWMoKS5NYyhuLmNkKCkpKTohMX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJjKCkuZ2MoKX0sRihLZSwiTWFwcy9FbnRyeVNldCIsMTk3MSksRCgxMDk3LDE5NzEsenUsWWspLGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIEp5dCh0aGlzLmEuZC52YygpLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBVd3QodGhpcy5hKX0sbC5SYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIEp5dCh0aGlzLmEuZC52YygpLGUpPyhuPXUoZSw0MiksU2FuKHRoaXMuYS5lLG4uY2QoKSksITApOiExfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIFhNKHRoaXMuYS5kLnZjKCkuTmMoKSxuZXcgblIodGhpcy5hKSl9LEYoS2UsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9Bc01hcC9Bc01hcEVudHJpZXMiLDEwOTcpLEQoMTA5OCwxLHt9LG5SKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBNSnQodGhpcy5hLHUoZSw0MikpfSxGKEtlLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvQXNNYXAvQXNNYXBFbnRyaWVzLzBtZXRob2RyZWYkd3JhcEVudHJ5JFR5cGUiLDEwOTgpLEQoNzMwLDEsc2EsVXd0KSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT11KHRoaXMuYi5QYigpLDQyKSx0aGlzLmE9dShlLmRkKCksMTQpLE1KdCh0aGlzLmMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLk9iKCl9LGwuUWI9ZnVuY3Rpb24oKXtpNCghIXRoaXMuYSksdGhpcy5iLlFiKCksdGhpcy5jLmUuZC09dGhpcy5hLmdjKCksdGhpcy5hLiRiKCksdGhpcy5hPW51bGx9LEYoS2UsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9Bc01hcC9Bc01hcEl0ZXJhdG9yIiw3MzApLEQoNTMyLDE5NzAsenUsRlIpLGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmIuJGIoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5iLl9iKGUpfSxsLkpjPWZ1bmN0aW9uKGUpe0xyKGUpLHRoaXMuYi53YyhuZXcgQ3R0KGUpKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuZGMoKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRkModGhpcy5iLnZjKCkuS2MoKSl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYi5fYihlKT8odGhpcy5iLkJjKGUpLCEwKTohMX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuZ2MoKX0sRihLZSwiTWFwcy9LZXlTZXQiLDUzMiksRCgzMTgsNTMyLHp1LEszKSxsLiRiPWZ1bmN0aW9uKCl7dmFyIGU7VmooKGU9dGhpcy5iLnZjKCkuS2MoKSxuZXcgdmJ0KHRoaXMsZSkpKX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5iLmVjKCkuSWMoZSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfHx5aSh0aGlzLmIuZWMoKSxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBIaSh0aGlzLmIuZWMoKSl9LGwuS2M9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmIudmMoKS5LYygpLG5ldyB2YnQodGhpcyxlKX0sbC5NYz1mdW5jdGlvbihlKXt2YXIgbixyO3JldHVybiByPTAsbj11KHRoaXMuYi5CYyhlKSwxNCksbiYmKHI9bi5nYygpLG4uJGIoKSx0aGlzLmEuZC09cikscj4wfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5lYygpLk5jKCl9LEYoS2UsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9LZXlTZXQiLDMxOCksRCg3MzEsMSxzYSx2YnQpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuT2IoKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE9dSh0aGlzLmMuUGIoKSw0MiksdGhpcy5hLmNkKCl9LGwuUWI9ZnVuY3Rpb24oKXt2YXIgZTtpNCghIXRoaXMuYSksZT11KHRoaXMuYS5kZCgpLDE0KSx0aGlzLmMuUWIoKSx0aGlzLmIuYS5kLT1lLmdjKCksZS4kYigpLHRoaXMuYT1udWxsfSxGKEtlLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvS2V5U2V0LzEiLDczMSksRCg0OTEsMzg5LHs4MzoxLDE2MToxfSxITSksbC5iYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlNjKCl9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5UYygpfSxsLlNjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBtTSh0aGlzLmMsdGhpcy5VYygpKX0sbC5UYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuYixlfHwodGhpcy5iPXRoaXMuU2MoKSl9LGwuVWM9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzLmQsMTYxKX0sRihLZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1NvcnRlZEFzTWFwIiw0OTEpLEQoNTQyLDQ5MSx1ZmUsRGopLGwuYmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHU4KHRoaXMuYSx1KHUodGhpcy5kLDE2MSksMTcxKSl9LGwuU2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHU4KHRoaXMuYSx1KHUodGhpcy5kLDE2MSksMTcxKSl9LGwuZWM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmIsdShlfHwodGhpcy5iPW5ldyB1OCh0aGlzLmEsdSh1KHRoaXMuZCwxNjEpLDE3MSkpKSwyNzEpfSxsLlRjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5iLHUoZXx8KHRoaXMuYj1uZXcgdTgodGhpcy5hLHUodSh0aGlzLmQsMTYxKSwxNzEpKSksMjcxKX0sbC5VYz1mdW5jdGlvbigpe3JldHVybiB1KHUodGhpcy5kLDE2MSksMTcxKX0sRihLZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL05hdmlnYWJsZUFzTWFwIiw1NDIpLEQoNDkwLDMxOCxsZmUsbU0pLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmVjKCkuTmMoKX0sRihLZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1NvcnRlZEtleVNldCIsNDkwKSxEKDM4OCw0OTAsQnh0LHU4KSxGKEtlLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvTmF2aWdhYmxlS2V5U2V0IiwzODgpLEQoNTQxLDI4LHh5LHEkKSxsLkZjPWZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIGNsKHRoaXMpLHI9dGhpcy5kLmRjKCksbj10aGlzLmQuRmMoZSksbiYmKCsrdGhpcy5mLmQsciYmV00odGhpcykpLG59LGwuR2M9ZnVuY3Rpb24oZSl7dmFyIG4scixzO3JldHVybiBlLmRjKCk/ITE6KHM9KGNsKHRoaXMpLHRoaXMuZC5nYygpKSxuPXRoaXMuZC5HYyhlKSxuJiYocj10aGlzLmQuZ2MoKSx0aGlzLmYuZCs9ci1zLHM9PTAmJldNKHRoaXMpKSxuKX0sbC4kYj1mdW5jdGlvbigpe3ZhciBlO2U9KGNsKHRoaXMpLHRoaXMuZC5nYygpKSxlIT0wJiYodGhpcy5kLiRiKCksdGhpcy5mLmQtPWUsS2oodGhpcykpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBjbCh0aGlzKSx0aGlzLmQuSGMoZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNsKHRoaXMpLHRoaXMuZC5JYyhlKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXRoaXM/ITA6KGNsKHRoaXMpLHlpKHRoaXMuZCxlKSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gY2wodGhpcyksSGkodGhpcy5kKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBjbCh0aGlzKSxuZXcgSXd0KHRoaXMpfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBjbCh0aGlzKSxuPXRoaXMuZC5NYyhlKSxuJiYoLS10aGlzLmYuZCxLaih0aGlzKSksbn0sbC5nYz1mdW5jdGlvbigpe3JldHVybiBpVXQodGhpcyl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gY2wodGhpcyksdGhpcy5kLk5jKCl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gY2wodGhpcyksJG8odGhpcy5kKX0sRihLZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1dyYXBwZWRDb2xsZWN0aW9uIiw1NDEpO3ZhciB3aD1LaShwciwiTGlzdCIpO0QoNzI4LDU0MSx7MjA6MSwyODoxLDE0OjEsMTU6MX0sb3Z0KSxsLmFkPWZ1bmN0aW9uKGUpe3I0KHRoaXMsZSl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gY2wodGhpcyksdGhpcy5kLk5jKCl9LGwuVmM9ZnVuY3Rpb24oZSxuKXt2YXIgcjtjbCh0aGlzKSxyPXRoaXMuZC5kYygpLHUodGhpcy5kLDE1KS5WYyhlLG4pLCsrdGhpcy5hLmQsciYmV00odGhpcyl9LGwuV2M9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG87cmV0dXJuIG4uZGMoKT8hMToobz0oY2wodGhpcyksdGhpcy5kLmdjKCkpLHI9dSh0aGlzLmQsMTUpLldjKGUsbiksciYmKHM9dGhpcy5kLmdjKCksdGhpcy5hLmQrPXMtbyxvPT0wJiZXTSh0aGlzKSkscil9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIGNsKHRoaXMpLHUodGhpcy5kLDE1KS5YYihlKX0sbC5YYz1mdW5jdGlvbihlKXtyZXR1cm4gY2wodGhpcyksdSh0aGlzLmQsMTUpLlhjKGUpfSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIGNsKHRoaXMpLG5ldyBCVXQodGhpcyl9LGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNsKHRoaXMpLG5ldyBYWHQodGhpcyxlKX0sbC4kYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gY2wodGhpcyksbj11KHRoaXMuZCwxNSkuJGMoZSksLS10aGlzLmEuZCxLaih0aGlzKSxufSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGNsKHRoaXMpLHUodGhpcy5kLDE1KS5fYyhlLG4pfSxsLmJkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGNsKHRoaXMpLHpadCh0aGlzLmEsdGhpcy5lLHUodGhpcy5kLDE1KS5iZChlLG4pLHRoaXMuYj90aGlzLmI6dGhpcyl9LEYoS2UsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9XcmFwcGVkTGlzdCIsNzI4KSxEKDEwOTYsNzI4LHsyMDoxLDI4OjEsMTQ6MSwxNToxLDU0OjF9LFNXdCksRihLZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1JhbmRvbUFjY2Vzc1dyYXBwZWRMaXN0IiwxMDk2KSxEKDYyMCwxLHNhLEl3dCksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIEQ4KHRoaXMpLHRoaXMuYi5PYigpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIEQ4KHRoaXMpLHRoaXMuYi5QYigpfSxsLlFiPWZ1bmN0aW9uKCl7bFd0KHRoaXMpfSxGKEtlLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZENvbGxlY3Rpb24vV3JhcHBlZEl0ZXJhdG9yIiw2MjApLEQoNzI5LDYyMCxuMCxCVXQsWFh0KSxsLlFiPWZ1bmN0aW9uKCl7bFd0KHRoaXMpfSxsLlJiPWZ1bmN0aW9uKGUpe3ZhciBuO249aVV0KHRoaXMuYSk9PTAsKEQ4KHRoaXMpLHUodGhpcy5iLDEyNSkpLlJiKGUpLCsrdGhpcy5hLmEuZCxuJiZXTSh0aGlzLmEpfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuKEQ4KHRoaXMpLHUodGhpcy5iLDEyNSkpLlNiKCl9LGwuVGI9ZnVuY3Rpb24oKXtyZXR1cm4oRDgodGhpcyksdSh0aGlzLmIsMTI1KSkuVGIoKX0sbC5VYj1mdW5jdGlvbigpe3JldHVybihEOCh0aGlzKSx1KHRoaXMuYiwxMjUpKS5VYigpfSxsLlZiPWZ1bmN0aW9uKCl7cmV0dXJuKEQ4KHRoaXMpLHUodGhpcy5iLDEyNSkpLlZiKCl9LGwuV2I9ZnVuY3Rpb24oZSl7KEQ4KHRoaXMpLHUodGhpcy5iLDEyNSkpLldiKGUpfSxGKEtlLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZExpc3QvV3JhcHBlZExpc3RJdGVyYXRvciIsNzI5KSxEKDcyNyw1NDEsbGZlLEoydCksbC5OYz1mdW5jdGlvbigpe3JldHVybiBjbCh0aGlzKSx0aGlzLmQuTmMoKX0sRihLZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1dyYXBwZWRTb3J0ZWRTZXQiLDcyNyksRCgxMDk1LDcyNyxCeHQsTFV0KSxGKEtlLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZE5hdmlnYWJsZVNldCIsMTA5NSksRCgxMDk0LDU0MSx6dSx6V3QpLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gY2wodGhpcyksdGhpcy5kLk5jKCl9LEYoS2UsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9XcmFwcGVkU2V0IiwxMDk0KSxEKDExMDMsMSx7fSxCKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBPYW4odShlLDQyKSl9LEYoS2UsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9sYW1iZGEkMSRUeXBlIiwxMTAzKSxEKDExMDIsMSx7fSxmdHQpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBMdyh0aGlzLmEsZSl9LEYoS2UsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9sYW1iZGEkMiRUeXBlIiwxMTAyKTt2YXIgUDI9S2kocHIsIk1hcC9FbnRyeSIpO0QoMzQ1LDEsenEpLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIF90KGUsNDIpPyhuPXUoZSw0MikscGQodGhpcy5jZCgpLG4uY2QoKSkmJnBkKHRoaXMuZGQoKSxuLmRkKCkpKTohMX0sbC5IYj1mdW5jdGlvbigpe3ZhciBlLG47cmV0dXJuIGU9dGhpcy5jZCgpLG49dGhpcy5kZCgpLChlPT1udWxsPzA6SGkoZSkpXihuPT1udWxsPzA6SGkobikpfSxsLmVkPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jZCgpKyI9Iit0aGlzLmRkKCl9LEYoS2UsaGZlLDM0NSksRCgxOTg4LDI4LHh5KSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5mZCgpLiRiKCl9LGwuSGM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIF90KGUsNDIpPyhuPXUoZSw0MiksZHNuKHRoaXMuZmQoKSxuLmNkKCksbi5kZCgpKSk6ITF9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIF90KGUsNDIpPyhuPXUoZSw0MikseFp0KHRoaXMuZmQoKSxuLmNkKCksbi5kZCgpKSk6ITF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZCgpLmR9LEYoS2UsIk11bHRpbWFwcy9FbnRyaWVzIiwxOTg4KSxEKDczMywxOTg4LHh5LG5NKSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5rYygpfSxsLmZkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEubGMoKX0sRihLZSwiQWJzdHJhY3RNdWx0aW1hcC9FbnRyaWVzIiw3MzMpLEQoNzM0LDczMyx6dSxZcHQpLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmxjKCl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIEg0dCh0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIGtuZSh0aGlzKX0sRihLZSwiQWJzdHJhY3RNdWx0aW1hcC9FbnRyeVNldCIsNzM0KSxEKDczNSwyOCx4eSxJMyksbC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBRdW4odGhpcy5hLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5uYygpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5vYygpfSxGKEtlLCJBYnN0cmFjdE11bHRpbWFwL1ZhbHVlcyIsNzM1KSxEKDE5ODksMjgsezgzNToxLDIwOjEsMjg6MSwxNDoxfSksbC5KYz1mdW5jdGlvbihlKXtMcihlKSxRMyh0aGlzKS5KYyhuZXcgVHR0KGUpKX0sbC5OYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPVEzKHRoaXMpLk5jKCksenN0KGUsbmV3IHZ0LDY0fGUucWQoKSYxMjk2LHRoaXMuYS5kKX0sbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gcmJ0KCksITB9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIExyKHRoaXMpLExyKGUpLF90KGUsNTQzKT92c24odShlLDgzNSkpOiFlLmRjKCkmJm9pdCh0aGlzLGUuS2MoKSl9LGwuSGM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49dShzeShXeCh0aGlzLmEpLGUpLDE0KSwobj9uLmdjKCk6MCk+MH0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gaDJuKHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSGkoUTModGhpcykpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIFEzKHRoaXMpLmRjKCl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHpvZSh0aGlzLGUsMSk+MH0sbC5JYj1mdW5jdGlvbigpe3JldHVybiAkbyhRMyh0aGlzKSl9LEYoS2UsIkFic3RyYWN0TXVsdGlzZXQiLDE5ODkpLEQoMTk5MSwxOTcwLHp1KSxsLiRiPWZ1bmN0aW9uKCl7Y3oodGhpcy5hLmEpfSxsLkhjPWZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIF90KGUsNDkyKT8ocj11KGUsNDE2KSx1KHIuYS5kZCgpLDE0KS5nYygpPD0wPyExOihuPVFRdCh0aGlzLmEsci5hLmNkKCkpLG49PXUoci5hLmRkKCksMTQpLmdjKCkpKTohMX0sbC5NYz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbztyZXR1cm4gX3QoZSw0OTIpJiYocj11KGUsNDE2KSxuPXIuYS5jZCgpLHM9dShyLmEuZGQoKSwxNCkuZ2MoKSxzIT0wKT8obz10aGlzLmEsSnBuKG8sbixzKSk6ITF9LEYoS2UsIk11bHRpc2V0cy9FbnRyeVNldCIsMTk5MSksRCgxMTA5LDE5OTEsenUsck0pLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRIdCgkS3QoV3godGhpcy5hLmEpKS5LYygpKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiBXeCh0aGlzLmEuYSkuZ2MoKX0sRihLZSwiQWJzdHJhY3RNdWx0aXNldC9FbnRyeVNldCIsMTEwOSksRCg2MTksNzI2LFQyKSxsLmhjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2QoKX0sbC5qYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhkKCl9LGwuY2M9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuamQoZSl9LGwuZmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMua2QoZSl9LGwuWmI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmYsZXx8KHRoaXMuZj10aGlzLmFjKCkpfSxsLmhkPWZ1bmN0aW9uKCl7cmV0dXJuIHduKCksd24oKSxyVn0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gUGl0KHRoaXMsZSl9LGwuamQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoQWkodGhpcyxlKSwyMSl9LGwua2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoR0QodGhpcyxlKSwyMSl9LGwubWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHduKCksbmV3IHM4KHUoZSwyMSkpfSxsLnBjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyB6V3QodGhpcyxlLHUobiwyMSkpfSxGKEtlLCJBYnN0cmFjdFNldE11bHRpbWFwIiw2MTkpLEQoMTY1Nyw2MTksVDIpLGwuaGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE9wKHRoaXMuYil9LGwuZ2Q9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE9wKHRoaXMuYil9LGwuamM9ZnVuY3Rpb24oKXtyZXR1cm4ga3Z0KG5ldyBPcCh0aGlzLmIpKX0sbC5oZD1mdW5jdGlvbigpe3JldHVybiBrdnQobmV3IE9wKHRoaXMuYikpfSxsLmNjPWZ1bmN0aW9uKGUpe3JldHVybiB1KHUoQWkodGhpcyxlKSwyMSksODQpfSxsLmpkPWZ1bmN0aW9uKGUpe3JldHVybiB1KHUoQWkodGhpcyxlKSwyMSksODQpfSxsLmZjPWZ1bmN0aW9uKGUpe3JldHVybiB1KHUoR0QodGhpcyxlKSwyMSksODQpfSxsLmtkPWZ1bmN0aW9uKGUpe3JldHVybiB1KHUoR0QodGhpcyxlKSwyMSksODQpfSxsLm1jPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDI3MSk/a3Z0KHUoZSwyNzEpKTood24oKSxuZXcgSTJ0KHUoZSw4NCkpKX0sbC5aYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuZixlfHwodGhpcy5mPV90KHRoaXMuYywxNzEpP25ldyBEaih0aGlzLHUodGhpcy5jLDE3MSkpOl90KHRoaXMuYywxNjEpP25ldyBITSh0aGlzLHUodGhpcy5jLDE2MSkpOm5ldyBsOCh0aGlzLHRoaXMuYykpfSxsLnBjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIF90KG4sMjcxKT9uZXcgTFV0KHRoaXMsZSx1KG4sMjcxKSk6bmV3IEoydCh0aGlzLGUsdShuLDg0KSl9LEYoS2UsIkFic3RyYWN0U29ydGVkU2V0TXVsdGltYXAiLDE2NTcpLEQoMTY1OCwxNjU3LFQyKSxsLlpiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5mLHUodShlfHwodGhpcy5mPV90KHRoaXMuYywxNzEpP25ldyBEaih0aGlzLHUodGhpcy5jLDE3MSkpOl90KHRoaXMuYywxNjEpP25ldyBITSh0aGlzLHUodGhpcy5jLDE2MSkpOm5ldyBsOCh0aGlzLHRoaXMuYykpLDE2MSksMTcxKX0sbC5lYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuaSx1KHUoZXx8KHRoaXMuaT1fdCh0aGlzLmMsMTcxKT9uZXcgdTgodGhpcyx1KHRoaXMuYywxNzEpKTpfdCh0aGlzLmMsMTYxKT9uZXcgbU0odGhpcyx1KHRoaXMuYywxNjEpKTpuZXcgSzModGhpcyx0aGlzLmMpKSw4NCksMjcxKX0sbC5iYz1mdW5jdGlvbigpe3JldHVybiBfdCh0aGlzLmMsMTcxKT9uZXcgdTgodGhpcyx1KHRoaXMuYywxNzEpKTpfdCh0aGlzLmMsMTYxKT9uZXcgbU0odGhpcyx1KHRoaXMuYywxNjEpKTpuZXcgSzModGhpcyx0aGlzLmMpfSxGKEtlLCJBYnN0cmFjdFNvcnRlZEtleVNvcnRlZFNldE11bHRpbWFwIiwxNjU4KSxEKDIwMTAsMSx7MTk0NzoxfSksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gcWRuKHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gVHl0KChlPXRoaXMuZyxlfHwodGhpcy5nPW5ldyB5Qyh0aGlzKSkpKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBUYWUoKGU9dGhpcy5mLGV8fCh0aGlzLmY9bmV3IFQydCh0aGlzKSkpKX0sRihLZSwiQWJzdHJhY3RUYWJsZSIsMjAxMCksRCg2NjUsTjEsenUseUMpLGwuJGI9ZnVuY3Rpb24oKXtsSHQoKX0sbC5IYz1mdW5jdGlvbihlKXt2YXIgbixyO3JldHVybiBfdChlLDQ2OCk/KG49dShlLDY4Mikscj11KHN5KHVYdCh0aGlzLmEpLE5wKG4uYy5lLG4uYikpLDgzKSwhIXImJkp5dChyLnZjKCksbmV3IEx3KE5wKG4uYy5jLG4uYSksdDYobi5jLG4uYixuLmEpKSkpOiExfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIF9ybih0aGlzLmEpfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIF90KGUsNDY4KT8obj11KGUsNjgyKSxyPXUoc3kodVh0KHRoaXMuYSksTnAobi5jLmUsbi5iKSksODMpLCEhciYmVGxuKHIudmMoKSxuZXcgTHcoTnAobi5jLmMsbi5hKSx0NihuLmMsbi5iLG4uYSkpKSk6ITF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4geEt0KHRoaXMuYSl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4geHNuKHRoaXMuYSl9LEYoS2UsIkFic3RyYWN0VGFibGUvQ2VsbFNldCIsNjY1KSxEKDE5MjgsMjgseHksZHR0KSxsLiRiPWZ1bmN0aW9uKCl7bEh0KCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIE8wbih0aGlzLmEsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gU3JuKHRoaXMuYSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4geEt0KHRoaXMuYSl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gVFp0KHRoaXMuYSl9LEYoS2UsIkFic3RyYWN0VGFibGUvVmFsdWVzIiwxOTI4KSxEKDE2MzIsMTYzMSxUMiksRihLZSwiQXJyYXlMaXN0TXVsdGltYXBHd3RTZXJpYWxpemF0aW9uRGVwZW5kZW5jaWVzIiwxNjMyKSxEKDUxMywxNjMyLFQyLHdldCxXdnQpLGwuaGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFhjKHRoaXMuYSl9LGwuYT0wLEYoS2UsIkFycmF5TGlzdE11bHRpbWFwIiw1MTMpLEQoNjY0LDIwMTAsezY2NDoxLDE5NDc6MSwzOjF9LFFvZSksRihLZSwiQXJyYXlUYWJsZSIsNjY0KSxEKDE5MjQsMzg2LE5FLGlXdCksbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IEF5dCh0aGlzLmEsZSl9LEYoS2UsIkFycmF5VGFibGUvMSIsMTkyNCksRCgxOTI1LDEse30sZVIpLGwubGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBBeXQodGhpcy5hLGUpfSxGKEtlLCJBcnJheVRhYmxlLzFtZXRob2RyZWYkZ2V0Q2VsbCRUeXBlIiwxOTI1KSxEKDIwMTEsMSx7NjgyOjF9KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBlPT09dGhpcz8hMDpfdChlLDQ2OCk/KG49dShlLDY4MikscGQoTnAodGhpcy5jLmUsdGhpcy5iKSxOcChuLmMuZSxuLmIpKSYmcGQoTnAodGhpcy5jLmMsdGhpcy5hKSxOcChuLmMuYyxuLmEpKSYmcGQodDYodGhpcy5jLHRoaXMuYix0aGlzLmEpLHQ2KG4uYyxuLmIsbi5hKSkpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEF6KGx0KGN0KFFuLDEpLERlLDEsNSxbTnAodGhpcy5jLmUsdGhpcy5iKSxOcCh0aGlzLmMuYyx0aGlzLmEpLHQ2KHRoaXMuYyx0aGlzLmIsdGhpcy5hKV0pKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIoIitOcCh0aGlzLmMuZSx0aGlzLmIpKyIsIitOcCh0aGlzLmMuYyx0aGlzLmEpKyIpPSIrdDYodGhpcy5jLHRoaXMuYix0aGlzLmEpfSxGKEtlLCJUYWJsZXMvQWJzdHJhY3RDZWxsIiwyMDExKSxEKDQ2OCwyMDExLHs0Njg6MSw2ODI6MX0sQXl0KSxsLmE9MCxsLmI9MCxsLmQ9MCxGKEtlLCJBcnJheVRhYmxlLzIiLDQ2OCksRCgxOTI3LDEse30sZ3gpLGwubGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEZ0ZSh0aGlzLmEsZSl9LEYoS2UsIkFycmF5VGFibGUvMm1ldGhvZHJlZiRnZXRWYWx1ZSRUeXBlIiwxOTI3KSxEKDE5MjYsMzg2LE5FLHNXdCksbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gRnRlKHRoaXMuYSxlKX0sRihLZSwiQXJyYXlUYWJsZS8zIiwxOTI2KSxEKDE5NzksMTk2NyxtdiksbC4kYj1mdW5jdGlvbigpe1ZqKHRoaXMua2MoKSl9LGwudmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJ4KHRoaXMpfSxsLmxjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBCWHQodGhpcy5rYygpLHRoaXMuZ2MoKSl9LEYoS2UsIk1hcHMvSXRlcmF0b3JCYXNlZEFic3RyYWN0TWFwIiwxOTc5KSxEKDgyOCwxOTc5LG12KSxsLiRiPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE9yKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gTEh0KHRoaXMuYyxlKX0sbC5rYz1mdW5jdGlvbigpe3JldHVybiBuZXcgYVd0KHRoaXMsdGhpcy5jLmIuYy5nYygpKX0sbC5sYz1mdW5jdGlvbigpe3JldHVybiBCbnQodGhpcy5jLmIuYy5nYygpLDE2LG5ldyBidyh0aGlzKSl9LGwueGM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49dSh4OSh0aGlzLmMsZSksMTkpLG4/dGhpcy5uZChuLmEpOm51bGx9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmIuYy5kYygpfSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIEdudCh0aGlzLmMpfSxsLnpjPWZ1bmN0aW9uKGUsbil7dmFyIHI7aWYocj11KHg5KHRoaXMuYyxlKSwxOSksIXIpdGhyb3cgaXQobmV3IEZuKHRoaXMubWQoKSsiICIrZSsiIG5vdCBpbiAiK0dudCh0aGlzLmMpKSk7cmV0dXJuIHRoaXMub2Qoci5hLG4pfSxsLkJjPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmIuYy5nYygpfSxGKEtlLCJBcnJheVRhYmxlL0FycmF5TWFwIiw4MjgpLEQoMTkyMywxLHt9LGJ3KSxsLmxkPWZ1bmN0aW9uKGUpe3JldHVybiBoWHQodGhpcy5hLGUpfSxGKEtlLCJBcnJheVRhYmxlL0FycmF5TWFwLzBtZXRob2RyZWYkZ2V0RW50cnkkVHlwZSIsMTkyMyksRCgxOTIxLDM0NSx6cSx1VnQpLGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gcVFlKHRoaXMuYSx0aGlzLmIpfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5uZCh0aGlzLmIpfSxsLmVkPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEub2QodGhpcy5iLGUpfSxsLmI9MCxGKEtlLCJBcnJheVRhYmxlL0FycmF5TWFwLzEiLDE5MjEpLEQoMTkyMiwzODYsTkUsYVd0KSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBoWHQodGhpcy5hLGUpfSxGKEtlLCJBcnJheVRhYmxlL0FycmF5TWFwLzIiLDE5MjIpLEQoMTkyMCw4MjgsbXYsWkt0KSxsLm1kPWZ1bmN0aW9uKCl7cmV0dXJuIkNvbHVtbiJ9LGwubmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHQ2KHRoaXMuYix0aGlzLmEsZSl9LGwub2Q9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gb3JlKHRoaXMuYix0aGlzLmEsZSxuKX0sbC5hPTAsRihLZSwiQXJyYXlUYWJsZS9Sb3ciLDE5MjApLEQoODI5LDgyOCxtdixUMnQpLGwubmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBaS3QodGhpcy5hLGUpfSxsLnpjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHUobiw4MyksQ0tlKCl9LGwub2Q9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdShuLDgzKSxfS2UoKX0sbC5tZD1mdW5jdGlvbigpe3JldHVybiJSb3cifSxGKEtlLCJBcnJheVRhYmxlL1Jvd01hcCIsODI5KSxEKDExMjAsMSxJaCxsVnQpLGwucWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLnFkKCkmLTI2Mn0sbC5yZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEucmQoKX0sbC5OYj1mdW5jdGlvbihlKXt0aGlzLmEuTmIobmV3IHNWdChlLHRoaXMuYikpfSxsLnNkPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuc2QobmV3IGlWdChlLHRoaXMuYikpfSxGKEtlLCJDb2xsZWN0U3BsaXRlcmF0b3JzLzEiLDExMjApLEQoMTEyMSwxLFVuLGlWdCksbC50ZD1mdW5jdGlvbihlKXt0aGlzLmEudGQodGhpcy5iLktiKGUpKX0sRihLZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xL2xhbWJkYSQwJFR5cGUiLDExMjEpLEQoMTEyMiwxLFVuLHNWdCksbC50ZD1mdW5jdGlvbihlKXt0aGlzLmEudGQodGhpcy5iLktiKGUpKX0sRihLZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xL2xhbWJkYSQxJFR5cGUiLDExMjIpLEQoMTEyMywxLEloLEZadCksbC5xZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwucmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kJiYodGhpcy5iPWpVdCh0aGlzLmIsdGhpcy5kLnJkKCkpKSxqVXQodGhpcy5iLDApfSxsLk5iPWZ1bmN0aW9uKGUpe3RoaXMuZCYmKHRoaXMuZC5OYihlKSx0aGlzLmQ9bnVsbCksdGhpcy5jLk5iKG5ldyByVnQodGhpcy5lLGUpKSx0aGlzLmI9MH0sbC5zZD1mdW5jdGlvbihlKXtmb3IoOzspe2lmKHRoaXMuZCYmdGhpcy5kLnNkKGUpKXJldHVybiB1OSh0aGlzLmIscXEpJiYodGhpcy5iPUpwKHRoaXMuYiwxKSksITA7aWYodGhpcy5kPW51bGwsIXRoaXMuYy5zZChuZXcgYVZ0KHRoaXMsdGhpcy5lKSkpcmV0dXJuITF9fSxsLmE9MCxsLmI9MCxGKEtlLCJDb2xsZWN0U3BsaXRlcmF0b3JzLzFGbGF0TWFwU3BsaXRlcmF0b3IiLDExMjMpLEQoMTEyNCwxLFVuLGFWdCksbC50ZD1mdW5jdGlvbihlKXtHWmUodGhpcy5hLHRoaXMuYixlKX0sRihLZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xRmxhdE1hcFNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUiLDExMjQpLEQoMTEyNSwxLFVuLHJWdCksbC50ZD1mdW5jdGlvbihlKXtMUWUodGhpcy5iLHRoaXMuYSxlKX0sRihLZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xRmxhdE1hcFNwbGl0ZXJhdG9yL2xhbWJkYSQxJFR5cGUiLDExMjUpLEQoMTExNywxLEloLHdZdCksbC5xZD1mdW5jdGlvbigpe3JldHVybiAxNjQ2NHx0aGlzLmJ9LGwucmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLnJkKCl9LGwuTmI9ZnVuY3Rpb24oZSl7dGhpcy5hLnhlKG5ldyBjVnQoZSx0aGlzLmMpKX0sbC5zZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLnllKG5ldyBvVnQoZSx0aGlzLmMpKX0sbC5iPTAsRihLZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xV2l0aENoYXJhY3RlcmlzdGljcyIsMTExNyksRCgxMTE4LDEsT0ksb1Z0KSxsLnVkPWZ1bmN0aW9uKGUpe3RoaXMuYS50ZCh0aGlzLmIubGQoZSkpfSxGKEtlLCJDb2xsZWN0U3BsaXRlcmF0b3JzLzFXaXRoQ2hhcmFjdGVyaXN0aWNzL2xhbWJkYSQwJFR5cGUiLDExMTgpLEQoMTExOSwxLE9JLGNWdCksbC51ZD1mdW5jdGlvbihlKXt0aGlzLmEudGQodGhpcy5iLmxkKGUpKX0sRihLZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xV2l0aENoYXJhY3RlcmlzdGljcy9sYW1iZGEkMSRUeXBlIiwxMTE5KSxEKDI0NSwxLFVhdCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy52ZCh1KGUsMjQ1KSl9LGwudmQ9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIGU9PShvZXQoKSxTdXQpPzE6ZT09KGNldCgpLF91dCk/LTE6KG49KHpqKCksSUQodGhpcy5hLGUuYSkpLG4hPTA/bjpfdCh0aGlzLDUxOSk9PV90KGUsNTE5KT8wOl90KHRoaXMsNTE5KT8xOi0xKX0sbC56ZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIEQzdCh0aGlzLGUpfSxGKEtlLCJDdXQiLDI0NSksRCgxNzYxLDI0NSxVYXQsZEh0KSxsLnZkPWZ1bmN0aW9uKGUpe3JldHVybiBlPT10aGlzPzA6MX0sbC54ZD1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgTXB0KX0sbC55ZD1mdW5jdGlvbihlKXtlLmErPSIr4oieKSJ9LGwuemQ9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgTm8oZGZlKSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gR2QoKSwkM3QodGhpcyl9LGwuQWQ9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iK+KIniJ9O3ZhciBfdXQ7RihLZSwiQ3V0L0Fib3ZlQWxsIiwxNzYxKSxEKDUxOSwyNDUsezI0NToxLDUxOToxLDM6MSwzNToxfSxoV3QpLGwueGQ9ZnVuY3Rpb24oZSl7aGMoKGUuYSs9IigiLGUpLHRoaXMuYSl9LGwueWQ9ZnVuY3Rpb24oZSl7cXAoaGMoZSx0aGlzLmEpLDkzKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybn5IaSh0aGlzLmEpfSxsLkFkPWZ1bmN0aW9uKGUpe3JldHVybiB6aigpLElEKHRoaXMuYSxlKTwwfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIi8iK3RoaXMuYSsiXFwifSxGKEtlLCJDdXQvQWJvdmVWYWx1ZSIsNTE5KSxEKDE3NjAsMjQ1LFVhdCxnSHQpLGwudmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PXRoaXM/MDotMX0sbC54ZD1mdW5jdGlvbihlKXtlLmErPSIoLeKIniJ9LGwueWQ9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE1wdCl9LGwuemQ9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgTm8oZGZlKSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gR2QoKSwkM3QodGhpcyl9LGwuQWQ9ZnVuY3Rpb24oZSl7cmV0dXJuITB9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iLeKIniJ9O3ZhciBTdXQ7RihLZSwiQ3V0L0JlbG93QWxsIiwxNzYwKSxEKDE3NjIsMjQ1LFVhdCxmV3QpLGwueGQ9ZnVuY3Rpb24oZSl7aGMoKGUuYSs9IlsiLGUpLHRoaXMuYSl9LGwueWQ9ZnVuY3Rpb24oZSl7cXAoaGMoZSx0aGlzLmEpLDQxKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBIaSh0aGlzLmEpfSxsLkFkPWZ1bmN0aW9uKGUpe3JldHVybiB6aigpLElEKHRoaXMuYSxlKTw9MH0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJcXCIrdGhpcy5hKyIvIn0sRihLZSwiQ3V0L0JlbG93VmFsdWUiLDE3NjIpLEQoNTM3LDEscjApLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aG4odShnJCh0aGlzLCJ1c2UgT3B0aW9uYWwub3JOdWxsKCkgaW5zdGVhZCBvZiBPcHRpb25hbC5vcihudWxsKSIpLDIwKS5LYygpKX0sRihLZSwiRmx1ZW50SXRlcmFibGUiLDUzNyksRCg0MzMsNTM3LHIwLGY5KSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhcihscih0aGlzLmEuS2MoKSxuZXcgeikpfSxGKEtlLCJGbHVlbnRJdGVyYWJsZS8yIiw0MzMpLEQoMTA0Niw1MzcscjAsYlV0KSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHpwKHRoaXMpfSxGKEtlLCJGbHVlbnRJdGVyYWJsZS8zIiwxMDQ2KSxEKDcwOCwzODYsTkUsQzJ0KSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFbZV0uS2MoKX0sRihLZSwiRmx1ZW50SXRlcmFibGUvMy8xIiw3MDgpLEQoMTk3MiwxLHt9KSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuICRvKHRoaXMuQmQoKS5iKX0sRihLZSwiRm9yd2FyZGluZ09iamVjdCIsMTk3MiksRCgxOTczLDE5NzIsZ2ZlKSxsLkJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ2QoKX0sbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLkxjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuT2MoKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywwKX0sbC5PYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVG4obnVsbCx0aGlzLk5jKCkpfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkNkKCksT0h0KCl9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuQ2QoKSxQSHQoKX0sbC4kYj1mdW5jdGlvbigpe3RoaXMuQ2QoKSxGSHQoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5DZCgpLkhjKGUpfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkNkKCkuSWMoZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5DZCgpLmIuZGMoKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkNkKCkuS2MoKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5DZCgpLE5IdCgpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ2QoKS5iLmdjKCl9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5DZCgpLlBjKCl9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuQ2QoKS5RYyhlKX0sRihLZSwiRm9yd2FyZGluZ0NvbGxlY3Rpb24iLDE5NzMpLEQoMTk4MCwyOCxSeHQpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5FZCgpfSxsLkZjPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuR2M9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sbC4kYj1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBPcil9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGwmJmF5KHRoaXMsZSwhMSl9LGwuRGQ9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5nYygpKXtjYXNlIDA6cmV0dXJuIFdtKCksV20oKSxBdXQ7Y2FzZSAxOnJldHVybiBXbSgpLG5ldyBSbnQoTHIodGhpcy5FZCgpLlBiKCkpKTtkZWZhdWx0OnJldHVybiBuZXcgSkt0KHRoaXMsdGhpcy5QYygpKX19LGwuTWM9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sRihLZSwiSW1tdXRhYmxlQ29sbGVjdGlvbiIsMTk4MCksRCg3MTIsMTk4MCxSeHQsQXB0KSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIGU2KHRoaXMuYS5LYygpKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmdGhpcy5hLkhjKGUpfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuSWMoZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmRjKCl9LGwuRWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZTYodGhpcy5hLktjKCkpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5QYygpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuUWMoZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5hKX0sRihLZSwiRm9yd2FyZGluZ0ltbXV0YWJsZUNvbGxlY3Rpb24iLDcxMiksRCgxNTIsMTk4MCxNXyksbC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkVkKCl9LGwuWWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5GZCgwKX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5GZChlKX0sbC5hZD1mdW5jdGlvbihlKXtyNCh0aGlzLGUpfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBfbih0aGlzLDE2KX0sbC5iZD1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLkdkKGUsbil9LGwuVmM9ZnVuY3Rpb24oZSxuKXt0aHJvdyBpdChuZXcgT3IpfSxsLldjPWZ1bmN0aW9uKGUsbil7dGhyb3cgaXQobmV3IE9yKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gS2JuKHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gYXVuKHRoaXMpfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsPy0xOm0xbih0aGlzLGUpfSxsLkVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRmQoMCl9LGwuRmQ9ZnVuY3Rpb24oZSl7cmV0dXJuICQydCh0aGlzLGUpfSxsLiRjPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuX2M9ZnVuY3Rpb24oZSxuKXt0aHJvdyBpdChuZXcgT3IpfSxsLkdkPWZ1bmN0aW9uKGUsbil7dmFyIHI7cmV0dXJuIER6KChyPW5ldyB4VnQodGhpcyksbmV3IFFkKHIsZSxuKSkpfTt2YXIgQXV0O0YoS2UsIkltbXV0YWJsZUxpc3QiLDE1MiksRCgyMDA2LDE1MixNXyksbC5LYz1mdW5jdGlvbigpe3JldHVybiBlNih0aGlzLkhkKCkuS2MoKSl9LGwuYmQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRHoodGhpcy5IZCgpLmJkKGUsbikpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBlIT1udWxsJiZ0aGlzLkhkKCkuSGMoZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuSGQoKS5JYyhlKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4geWkodGhpcy5IZCgpLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBOcCh0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEhpKHRoaXMuSGQoKSl9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuSGQoKS5YYyhlKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkhkKCkuZGMoKX0sbC5FZD1mdW5jdGlvbigpe3JldHVybiBlNih0aGlzLkhkKCkuS2MoKSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5IZCgpLmdjKCl9LGwuR2Q9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRHoodGhpcy5IZCgpLmJkKGUsbikpfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSGQoKS5RYyhOdChRbixEZSwxLHRoaXMuSGQoKS5nYygpLDUsMSkpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkhkKCkuUWMoZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5IZCgpKX0sRihLZSwiRm9yd2FyZGluZ0ltbXV0YWJsZUxpc3QiLDIwMDYpLEQoNzE0LDEsQkUpLGwudmM9ZnVuY3Rpb24oKXtyZXR1cm4gUncodGhpcyl9LGwud2M9ZnVuY3Rpb24oZSl7SzkodGhpcyxlKX0sbC5lYz1mdW5jdGlvbigpe3JldHVybiBHbnQodGhpcyl9LGwueWM9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBRaXQodGhpcyxlLG4scil9LGwuQ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5MZCgpfSxsLiRiPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE9yKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy54YyhlKSE9bnVsbH0sbC51Yz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5MZCgpLkhjKGUpfSxsLkpkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpcXQodGhpcyl9LGwuS2Q9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHNxdCh0aGlzKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gWnVuKHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gUncodGhpcykuSGIoKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdjKCk9PTB9LGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gU0tlKCl9LGwuQmM9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBNZ24odGhpcyl9LGwuTGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lP3RoaXMuZTp0aGlzLmU9dGhpcy5LZCgpfSxsLmM9bnVsbCxsLmQ9bnVsbCxsLmU9bnVsbDt2YXIgQWdlO0YoS2UsIkltbXV0YWJsZU1hcCIsNzE0KSxEKDcxNSw3MTQsQkUpLGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuIExIdCh0aGlzLGUpfSxsLnVjPWZ1bmN0aW9uKGUpe3JldHVybiBDVnQodGhpcy5iLGUpfSxsLklkPWZ1bmN0aW9uKCl7cmV0dXJuIHRpZShuZXcga0ModGhpcykpfSxsLkpkPWZ1bmN0aW9uKCl7cmV0dXJuIHRpZShPWHQodGhpcy5iKSl9LGwuS2Q9ZnVuY3Rpb24oKXtyZXR1cm4gZ2QoKSxuZXcgQXB0KElYdCh0aGlzLmIpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gX1Z0KHRoaXMuYixlKX0sbC54Yz1mdW5jdGlvbihlKXtyZXR1cm4geDkodGhpcyxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBIaSh0aGlzLmIuYyl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmMuZGMoKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuYy5nYygpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuICRvKHRoaXMuYi5jKX0sRihLZSwiRm9yd2FyZGluZ0ltbXV0YWJsZU1hcCIsNzE1KSxEKDE5NzQsMTk3MyxXYXQpLGwuQmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5NZCgpfSxsLkNkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTWQoKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywxKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXRoaXN8fHRoaXMuTWQoKS5GYihlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLk1kKCkuSGIoKX0sRihLZSwiRm9yd2FyZGluZ1NldCIsMTk3NCksRCgxMDY5LDE5NzQsV2F0LGtDKSxsLkJkPWZ1bmN0aW9uKCl7cmV0dXJuIEw4KHRoaXMuYS5iKX0sbC5DZD1mdW5jdGlvbigpe3JldHVybiBMOCh0aGlzLmEuYil9LGwuSGM9ZnVuY3Rpb24oZSl7aWYoX3QoZSw0MikmJnUoZSw0MikuY2QoKT09bnVsbClyZXR1cm4hMTt0cnl7cmV0dXJuIFRWdChMOCh0aGlzLmEuYiksZSl9Y2F0Y2gobil7aWYobj1XaShuKSxfdChuLDIwNSkpcmV0dXJuITE7dGhyb3cgaXQobil9fSxsLk1kPWZ1bmN0aW9uKCl7cmV0dXJuIEw4KHRoaXMuYS5iKX0sbC5RYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj1nUXQoTDgodGhpcy5hLmIpLGUpLEw4KHRoaXMuYS5iKS5iLmdjKCk8bi5sZW5ndGgmJnRzKG4sTDgodGhpcy5hLmIpLmIuZ2MoKSxudWxsKSxufSxGKEtlLCJGb3J3YXJkaW5nSW1tdXRhYmxlTWFwLzEiLDEwNjkpLEQoMTk4MSwxOTgwLFJFKSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRWQoKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywxKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gSDR0KHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4ga25lKHRoaXMpfSxGKEtlLCJJbW11dGFibGVTZXQiLDE5ODEpLEQoNzAzLDE5ODEsUkUpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gZTYobmV3IEwodGhpcy5hLmIuS2MoKSkpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBlIT1udWxsJiZ5TSh0aGlzLmEsZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGtWdCh0aGlzLmEsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSGkodGhpcy5hLmIpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5iLmRjKCl9LGwuRWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZTYobmV3IEwodGhpcy5hLmIuS2MoKSkpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5iLmdjKCl9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmIuUGMoKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gRVZ0KHRoaXMuYSxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiAkbyh0aGlzLmEuYil9LEYoS2UsIkZvcndhcmRpbmdJbW11dGFibGVTZXQiLDcwMyksRCgxOTc1LDE5NzQscGZlKSxsLkJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5DZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuTWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBXUih0aGlzKX0sRihLZSwiRm9yd2FyZGluZ1NvcnRlZFNldCIsMTk3NSksRCg1MzMsMTk3OSxCRSx0cSksbC5BYz1mdW5jdGlvbihlKXtZOSh0aGlzLGUpfSxsLkNjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5kLG5ldyBjbnQoZXx8KHRoaXMuZD1uZXcgcHgodGhpcykpKX0sbC4kYj1mdW5jdGlvbigpe2REKHRoaXMpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiEhVTkodGhpcyxlLEFyKF9hKGkwLFhkKEFyKF9hKGU9PW51bGw/MDpIaShlKSxzMCkpLDE1KSkpKX0sbC51Yz1mdW5jdGlvbihlKXtyZXR1cm4gSWVlKHRoaXMsZSl9LGwua2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG9XdCh0aGlzLHRoaXMpfSxsLndjPWZ1bmN0aW9uKGUpe0NRdCh0aGlzLGUpfSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiBuNCh0aGlzLGUpfSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB1bnQodGhpcyl9LGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gQXEodGhpcyxlLG4pfSxsLkJjPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPVU5KHRoaXMsZSxBcihfYShpMCxYZChBcihfYShlPT1udWxsPzA6SGkoZSksczApKSwxNSkpKSksbj8obTQodGhpcyxuKSxuLmU9bnVsbCxuLmM9bnVsbCxuLmkpOm51bGx9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pfSxsLnBkPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5kLG5ldyBjbnQoZXx8KHRoaXMuZD1uZXcgcHgodGhpcykpKX0sbC5mPTAsbC5nPTAsbC5pPTAsRihLZSwiSGFzaEJpTWFwIiw1MzMpLEQoNTM0LDEsc2EpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBWWnQodGhpcyl9LGwuUGI9ZnVuY3Rpb24oKXt2YXIgZTtpZighVlp0KHRoaXMpKXRocm93IGl0KG5ldyBsYyk7cmV0dXJuIGU9dGhpcy5jLHRoaXMuYz1lLmMsdGhpcy5mPWUsLS10aGlzLmQsdGhpcy5OZChlKX0sbC5RYj1mdW5jdGlvbigpe2lmKHRoaXMuZS5nIT10aGlzLmIpdGhyb3cgaXQobmV3IHJoKTtpNCghIXRoaXMuZiksbTQodGhpcy5lLHRoaXMuZiksdGhpcy5iPXRoaXMuZS5nLHRoaXMuZj1udWxsfSxsLmI9MCxsLmQ9MCxsLmY9bnVsbCxGKEtlLCJIYXNoQmlNYXAvSXRyIiw1MzQpLEQoMTAxMSw1MzQsc2Esb1d0KSxsLk5kPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZFZ0KHRoaXMsZSl9LEYoS2UsIkhhc2hCaU1hcC8xIiwxMDExKSxEKDEwMTIsMzQ1LHpxLGRWdCksbC5jZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ30sbC5kZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuaX0sbC5lZD1mdW5jdGlvbihlKXt2YXIgbixyLHM7cmV0dXJuIHI9dGhpcy5hLmkscz1BcihfYShpMCxYZChBcihfYShlPT1udWxsPzA6SGkoZSksczApKSwxNSkpKSxzPT10aGlzLmEuZiYmKFZ0KGUpPT09VnQocil8fGUhPW51bGwmJnlpKGUscikpP2U6KHJyZSghVzkodGhpcy5iLmEsZSxzKSxlKSxtNCh0aGlzLmIuYSx0aGlzLmEpLG49bmV3IG8kKHRoaXMuYS5nLHRoaXMuYS5hLGUscyksZkkodGhpcy5iLmEsbix0aGlzLmEpLHRoaXMuYS5lPW51bGwsdGhpcy5hLmM9bnVsbCx0aGlzLmIuYj10aGlzLmIuYS5nLHRoaXMuYi5mPT10aGlzLmEmJih0aGlzLmIuZj1uKSx0aGlzLmE9bixyKX0sRihLZSwiSGFzaEJpTWFwLzEvTWFwRW50cnkiLDEwMTIpLEQoMjM4LDM0NSx7MzQ1OjEsMjM4OjEsMzoxLDQyOjF9LEx3KSxsLmNkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ30sbC5kZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLml9LGwuZWQ9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sRihLZSwiSW1tdXRhYmxlRW50cnkiLDIzOCksRCgzMTcsMjM4LHszNDU6MSwzMTc6MSwyMzg6MSwzOjEsNDI6MX0sbyQpLGwuYT0wLGwuZj0wO3ZhciBMdXQ9RihLZSwiSGFzaEJpTWFwL0JpRW50cnkiLDMxNyk7RCg2MTAsMTk3OSxCRSxweCksbC5BYz1mdW5jdGlvbihlKXtZOSh0aGlzLGUpfSxsLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB1bnQodGhpcy5hKX0sbC4kYj1mdW5jdGlvbigpe2REKHRoaXMuYSl9LGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuIEllZSh0aGlzLmEsZSl9LGwua2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGNXdCh0aGlzLHRoaXMuYSl9LGwud2M9ZnVuY3Rpb24oZSl7THIoZSksQ1F0KHRoaXMuYSxuZXcgaU0oZSkpfSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiBoeih0aGlzLGUpfSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjbnQodGhpcyl9LGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdHluKHRoaXMuYSxlLG4sITEpfSxsLkJjPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPVc5KHRoaXMuYSxlLEFyKF9hKGkwLFhkKEFyKF9hKGU9PW51bGw/MDpIaShlKSxzMCkpLDE1KSkpKSxuPyhtNCh0aGlzLmEsbiksbi5lPW51bGwsbi5jPW51bGwsbi5nKTpudWxsfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5pfSxsLnBkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB1bnQodGhpcy5hKX0sRihLZSwiSGFzaEJpTWFwL0ludmVyc2UiLDYxMCksRCgxMDA4LDUzNCxzYSxjV3QpLGwuTmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBnVnQodGhpcyxlKX0sRihLZSwiSGFzaEJpTWFwL0ludmVyc2UvMSIsMTAwOCksRCgxMDA5LDM0NSx6cSxnVnQpLGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLml9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmd9LGwuZWQ9ZnVuY3Rpb24oZSl7dmFyIG4scixzO3JldHVybiBzPXRoaXMuYS5nLG49QXIoX2EoaTAsWGQoQXIoX2EoZT09bnVsbD8wOkhpKGUpLHMwKSksMTUpKSksbj09dGhpcy5hLmEmJihWdChlKT09PVZ0KHMpfHxlIT1udWxsJiZ5aShlLHMpKT9lOihycmUoIVU5KHRoaXMuYi5hLmEsZSxuKSxlKSxtNCh0aGlzLmIuYS5hLHRoaXMuYSkscj1uZXcgbyQoZSxuLHRoaXMuYS5pLHRoaXMuYS5mKSx0aGlzLmE9cixmSSh0aGlzLmIuYS5hLHIsbnVsbCksdGhpcy5iLmI9dGhpcy5iLmEuYS5nLHMpfSxGKEtlLCJIYXNoQmlNYXAvSW52ZXJzZS8xL0ludmVyc2VFbnRyeSIsMTAwOSksRCg2MTEsNTMyLHp1LGNudCksbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgUXF0KHRoaXMuYS5hKX0sbC5NYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj1XOSh0aGlzLmEuYSxlLEFyKF9hKGkwLFhkKEFyKF9hKGU9PW51bGw/MDpIaShlKSxzMCkpLDE1KSkpKSxuPyhtNCh0aGlzLmEuYSxuKSwhMCk6ITF9LEYoS2UsIkhhc2hCaU1hcC9JbnZlcnNlL0ludmVyc2VLZXlTZXQiLDYxMSksRCgxMDA3LDUzNCxzYSxRcXQpLGwuTmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaX0sRihLZSwiSGFzaEJpTWFwL0ludmVyc2UvSW52ZXJzZUtleVNldC8xIiwxMDA3KSxEKDEwMTAsMSx7fSxpTSksbC5PZD1mdW5jdGlvbihlLG4pe3NLZSh0aGlzLmEsZSxuKX0sRihLZSwiSGFzaEJpTWFwL0ludmVyc2UvbGFtYmRhJDAkVHlwZSIsMTAxMCksRCg2MDksNTMyLHp1LHVudCksbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgWnF0KHRoaXMuYSl9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49VTkodGhpcy5hLGUsQXIoX2EoaTAsWGQoQXIoX2EoZT09bnVsbD8wOkhpKGUpLHMwKSksMTUpKSkpLG4/KG00KHRoaXMuYSxuKSxuLmU9bnVsbCxuLmM9bnVsbCwhMCk6ITF9LEYoS2UsIkhhc2hCaU1hcC9LZXlTZXQiLDYwOSksRCgxMDA2LDUzNCxzYSxacXQpLGwuTmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ30sRihLZSwiSGFzaEJpTWFwL0tleVNldC8xIiwxMDA2KSxEKDEwOTMsNjE5LFQyKSxGKEtlLCJIYXNoTXVsdGltYXBHd3RTZXJpYWxpemF0aW9uRGVwZW5kZW5jaWVzIiwxMDkzKSxEKDI2NSwxMDkzLFQyLFV3KSxsLmhjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBJUih0eSh0aGlzLmEpKX0sbC5nZD1mdW5jdGlvbigpe3JldHVybiBuZXcgSVIodHkodGhpcy5hKSl9LGwuYT0yLEYoS2UsIkhhc2hNdWx0aW1hcCIsMjY1KSxEKDE5OTksMTUyLE1fKSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlBkKCkuSGMoZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5QZCgpLmRjKCl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5QZCgpLmdjKCl9LEYoS2UsIkltbXV0YWJsZUFzTGlzdCIsMTk5OSksRCgxOTMxLDcxNSxCRSksbC5MZD1mdW5jdGlvbigpe3JldHVybiBnZCgpLG5ldyBBeCh0aGlzLmEpfSxsLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIGdkKCksbmV3IEF4KHRoaXMuYSl9LGwucGQ9ZnVuY3Rpb24oKXtyZXR1cm4gZ2QoKSxuZXcgQXgodGhpcy5hKX0sRihLZSwiSW1tdXRhYmxlQmlNYXAiLDE5MzEpLEQoMTk3NywxLHt9KSxGKEtlLCJJbW11dGFibGVDb2xsZWN0aW9uL0J1aWxkZXIiLDE5NzcpLEQoMTAyMiw3MDMsUkUsSnF0KSxGKEtlLCJJbW11dGFibGVFbnVtU2V0IiwxMDIyKSxEKDk2OSwzODYsTkUsYll0KSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuWGIoZSl9LEYoS2UsIkltbXV0YWJsZUxpc3QvMSIsOTY5KSxEKDk2OCwxOTc3LHt9LFhXdCksRihLZSwiSW1tdXRhYmxlTGlzdC9CdWlsZGVyIiw5NjgpLEQoNjE0LDE5OCxGRSxzTSksbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2IoKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB1KHRoaXMuYS5QYigpLDQyKS5jZCgpfSxGKEtlLCJJbW11dGFibGVNYXAvMSIsNjE0KSxEKDEwNDEsMSx7fSxOKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsNDIpLmNkKCl9LEYoS2UsIkltbXV0YWJsZU1hcC8ybWV0aG9kcmVmJGdldEtleSRUeXBlIiwxMDQxKSxEKDEwNDAsMSx7fSxRV3QpLEYoS2UsIkltbXV0YWJsZU1hcC9CdWlsZGVyIiwxMDQwKSxEKDJlMywxOTgxLFJFKSxsLktjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9UncodGhpcy5hKS5FZCgpLG5ldyBzTShlKX0sbC5EZD1mdW5jdGlvbigpe3JldHVybiBuZXcgTHB0KHRoaXMpfSxsLkpjPWZ1bmN0aW9uKGUpe3ZhciBuLHI7Zm9yKExyKGUpLHI9dGhpcy5nYygpLG49MDtuPHI7bisrKWUudGQodShjdnQoUncodGhpcy5hKSkuWGIobiksNDIpLmNkKCkpfSxsLkVkPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9dGhpcy5jLGV8fCh0aGlzLmM9bmV3IExwdCh0aGlzKSkpLkVkKCl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gQm50KHRoaXMuZ2MoKSwxMjk2LG5ldyBwdHQodGhpcykpfSxGKEtlLCJJbmRleGVkSW1tdXRhYmxlU2V0IiwyZTMpLEQoMTE4MCwyZTMsUkUsaXF0KSxsLktjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9UncodGhpcy5hKS5FZCgpLG5ldyBzTShlKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLl9iKGUpfSxsLkpjPWZ1bmN0aW9uKGUpe0xyKGUpLEs5KHRoaXMuYSxuZXcgZ3R0KGUpKX0sbC5FZD1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPVJ3KHRoaXMuYSkuRWQoKSxuZXcgc00oZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gWE0oUncodGhpcy5hKS5OYygpLG5ldyBOKX0sRihLZSwiSW1tdXRhYmxlTWFwS2V5U2V0IiwxMTgwKSxEKDExODEsMSx7fSxndHQpLGwuT2Q9ZnVuY3Rpb24oZSxuKXtnZCgpLHRoaXMuYS50ZChlKX0sRihLZSwiSW1tdXRhYmxlTWFwS2V5U2V0L2xhbWJkYSQwJFR5cGUiLDExODEpLEQoMTE3OCwxOTgwLFJ4dCxzcXQpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFBudCh0aGlzKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmemRuKG5ldyBQbnQodGhpcyksZSl9LGwuRWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFBudCh0aGlzKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBYTShSdyh0aGlzLmEpLk5jKCksbmV3IFIpfSxGKEtlLCJJbW11dGFibGVNYXBWYWx1ZXMiLDExNzgpLEQoMTE3OSwxLHt9LFIpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw0MikuZGQoKX0sRihLZSwiSW1tdXRhYmxlTWFwVmFsdWVzLzBtZXRob2RyZWYkZ2V0VmFsdWUkVHlwZSIsMTE3OSksRCg2MjYsMTk4LEZFLFBudCksbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2IoKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB1KHRoaXMuYS5QYigpLDQyKS5kZCgpfSxGKEtlLCJJbW11dGFibGVNYXBWYWx1ZXMvMSIsNjI2KSxEKDExODIsMSx7fSxwdHQpLGwubGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGVYdCh0aGlzLmEsZSl9LEYoS2UsIkluZGV4ZWRJbW11dGFibGVTZXQvMG1ldGhvZHJlZiRnZXQkVHlwZSIsMTE4MiksRCg3NTIsMTk5OSxNXyxMcHQpLGwuUGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBlWHQodGhpcy5hLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5hLmdjKCl9LEYoS2UsIkluZGV4ZWRJbW11dGFibGVTZXQvMSIsNzUyKSxEKDQ0LDEse30seiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDIwKS5LYygpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sRihLZSwiSXRlcmFibGVzLzEwIiw0NCksRCgxMDQyLDUzNyxyMCxuS3QpLGwuSmM9ZnVuY3Rpb24oZSl7THIoZSksdGhpcy5iLkpjKG5ldyBwVnQodGhpcy5hLGUpKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBoMnQodGhpcyl9LEYoS2UsIkl0ZXJhYmxlcy80IiwxMDQyKSxEKDEwNDMsMSxVbixwVnQpLGwudGQ9ZnVuY3Rpb24oZSl7X1hlKHRoaXMuYix0aGlzLmEsZSl9LEYoS2UsIkl0ZXJhYmxlcy80L2xhbWJkYSQwJFR5cGUiLDEwNDMpLEQoMTA0NCw1MzcscjAsckt0KSxsLkpjPWZ1bmN0aW9uKGUpe0xyKGUpLHZhKHRoaXMuYSxuZXcgaFZ0KGUsdGhpcy5iKSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbHIobmV3IG5yKHRoaXMuYSksdGhpcy5iKX0sRihLZSwiSXRlcmFibGVzLzUiLDEwNDQpLEQoMTA0NSwxLFVuLGhWdCksbC50ZD1mdW5jdGlvbihlKXt0aGlzLmEudGQoU1V0KGUpKX0sRihLZSwiSXRlcmFibGVzLzUvbGFtYmRhJDAkVHlwZSIsMTA0NSksRCgxMDcxLDE5OCxGRSxidHQpLGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLk9iKCl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLlBiKCl9LEYoS2UsIkl0ZXJhdG9ycy8xIiwxMDcxKSxEKDEwNzIsNjk5LEZFLGZWdCksbC5ZYj1mdW5jdGlvbigpe2Zvcih2YXIgZTt0aGlzLmIuT2IoKTspaWYoZT10aGlzLmIuUGIoKSx0aGlzLmEuTGIoZSkpcmV0dXJuIGU7cmV0dXJuIHRoaXMuZT0yLG51bGx9LEYoS2UsIkl0ZXJhdG9ycy81IiwxMDcyKSxEKDQ4NywxLHNhKSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLk9iKCl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5RZCh0aGlzLmIuUGIoKSl9LGwuUWI9ZnVuY3Rpb24oKXt0aGlzLmIuUWIoKX0sRihLZSwiVHJhbnNmb3JtZWRJdGVyYXRvciIsNDg3KSxEKDEwNzMsNDg3LHNhLHVXdCksbC5RZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLktiKGUpfSxGKEtlLCJJdGVyYXRvcnMvNiIsMTA3MyksRCg3MTcsMTk4LEZFLHJSKSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuYX0sbC5QYj1mdW5jdGlvbigpe2lmKHRoaXMuYSl0aHJvdyBpdChuZXcgbGMpO3JldHVybiB0aGlzLmE9ITAsdGhpcy5ifSxsLmE9ITEsRihLZSwiSXRlcmF0b3JzLzkiLDcxNyksRCgxMDcwLDM4NixORSxfS3QpLGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYVt0aGlzLmIrZV19LGwuYj0wO3ZhciBMZ2U7RihLZSwiSXRlcmF0b3JzL0FycmF5SXRyIiwxMDcwKSxEKDM5LDEsezM5OjEsNDc6MX0sYXIpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB6cih0aGlzKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBNcih0aGlzKX0sbC5RYj1mdW5jdGlvbigpe2k0KCEhdGhpcy5jKSx0aGlzLmMuUWIoKSx0aGlzLmM9bnVsbH0sRihLZSwiSXRlcmF0b3JzL0NvbmNhdGVuYXRlZEl0ZXJhdG9yIiwzOSksRCgyMiwxLHszOjEsMzU6MSwyMjoxfSksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gckh0KHRoaXMsdShlLDIyKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFB3KHRoaXMpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGJudCh0aGlzKX0sbC5nPTA7dmFyIEhyPUYoWG8sIkVudW0iLDIyKTtEKDUzOCwyMix7NTM4OjEsMzoxLDM1OjEsMjI6MSw0NzoxfSxkV3QpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiExfSxsLlBiPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IGxjKX0sbC5RYj1mdW5jdGlvbigpe2k0KCExKX07dmFyIE11dCxNZ2U9anIoS2UsIkl0ZXJhdG9ycy9FbXB0eU1vZGlmaWFibGVJdGVyYXRvciIsNTM4LEhyLHlubixlWmUpLERnZTtEKDE4MzQsNjE5LFQyKSxGKEtlLCJMaW5rZWRIYXNoTXVsdGltYXBHd3RTZXJpYWxpemF0aW9uRGVwZW5kZW5jaWVzIiwxODM0KSxEKDE4MzUsMTgzNCxUMixWcmUpLGwuaGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGRudCh0eSh0aGlzLmIpKX0sbC4kYj1mdW5jdGlvbigpe2N6KHRoaXMpLGRNKHRoaXMuYSx0aGlzLmEpfSxsLmdkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkbnQodHkodGhpcy5iKSl9LGwuaWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBMcmUodGhpcyxlLHRoaXMuYil9LGwua2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFMydCh0aGlzKX0sbC5sYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBuZXcgX24oKGU9dGhpcy5nLHUoZXx8KHRoaXMuZz1uZXcgWXB0KHRoaXMpKSwyMSkpLDE3KX0sbC5lYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuaSxlfHwodGhpcy5pPW5ldyBLMyh0aGlzLHRoaXMuYykpfSxsLm5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBKcHQobmV3IFMydCh0aGlzKSl9LGwub2M9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gWE0obmV3IF9uKChlPXRoaXMuZyx1KGV8fCh0aGlzLmc9bmV3IFlwdCh0aGlzKSksMjEpKSwxNyksbmV3IFcpfSxsLmI9MixGKEtlLCJMaW5rZWRIYXNoTXVsdGltYXAiLDE4MzUpLEQoMTgzOCwxLHt9LFcpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw0MikuZGQoKX0sRihLZSwiTGlua2VkSGFzaE11bHRpbWFwLzBtZXRob2RyZWYkZ2V0VmFsdWUkVHlwZSIsMTgzOCksRCg4MjQsMSxzYSxTMnQpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiAkb24odGhpcyl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hIT10aGlzLmIuYX0sbC5RYj1mdW5jdGlvbigpe2k0KCEhdGhpcy5jKSx4WnQodGhpcy5iLHRoaXMuYy5nLHRoaXMuYy5pKSx0aGlzLmM9bnVsbH0sRihLZSwiTGlua2VkSGFzaE11bHRpbWFwLzEiLDgyNCksRCgzMzAsMjM4LHszNDU6MSwyMzg6MSwzMzA6MSwyMDIwOjEsMzoxLDQyOjF9LEx2dCksbC5SZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGwuU2Q9ZnVuY3Rpb24oZSl7dGhpcy5jPWV9LGwuVGQ9ZnVuY3Rpb24oZSl7dGhpcy5mPWV9LGwuZD0wO3ZhciBJZ2U9RihLZSwiTGlua2VkSGFzaE11bHRpbWFwL1ZhbHVlRW50cnkiLDMzMCk7RCgxODM2LDE5NzAsezIwMjA6MSwyMDoxLDI4OjEsMTQ6MSwyMToxfSxMcmUpLGwuRmM9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saDtmb3IoaD1BcihfYShpMCxYZChBcihfYShlPT1udWxsPzA6SGkoZSksczApKSwxNSkpKSxuPWgmdGhpcy5iLmxlbmd0aC0xLG89dGhpcy5iW25dLHI9bztyO3I9ci5hKWlmKHIuZD09aCYmcGQoci5pLGUpKXJldHVybiExO3JldHVybiBzPW5ldyBMdnQodGhpcy5jLGUsaCxvKSxoSHQodGhpcy5kLHMpLHMuZj10aGlzLHRoaXMuZD1zLGRNKHRoaXMuZy5hLmIscyksZE0ocyx0aGlzLmcuYSksdGhpcy5iW25dPXMsKyt0aGlzLmYsKyt0aGlzLmUsUmRuKHRoaXMpLCEwfSxsLiRiPWZ1bmN0aW9uKCl7dmFyIGUsbjtmb3IoQ00odGhpcy5iLG51bGwpLHRoaXMuZj0wLGU9dGhpcy5hO2UhPXRoaXM7ZT1lLlJkKCkpbj11KGUsMzMwKSxkTShuLmIsbi5lKTt0aGlzLmE9dGhpcyx0aGlzLmQ9dGhpcywrK3RoaXMuZX0sbC5IYz1mdW5jdGlvbihlKXt2YXIgbixyO2ZvcihyPUFyKF9hKGkwLFhkKEFyKF9hKGU9PW51bGw/MDpIaShlKSxzMCkpLDE1KSkpLG49dGhpcy5iW3ImdGhpcy5iLmxlbmd0aC0xXTtuO249bi5hKWlmKG4uZD09ciYmcGQobi5pLGUpKXJldHVybiEwO3JldHVybiExfSxsLkpjPWZ1bmN0aW9uKGUpe3ZhciBuO2ZvcihMcihlKSxuPXRoaXMuYTtuIT10aGlzO249bi5SZCgpKWUudGQodShuLDMzMCkuaSl9LGwuUmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB4WHQodGhpcyl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZjZSh0aGlzLGUpfSxsLlNkPWZ1bmN0aW9uKGUpe3RoaXMuZD1lfSxsLlRkPWZ1bmN0aW9uKGUpe3RoaXMuYT1lfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0sbC5lPTAsbC5mPTAsRihLZSwiTGlua2VkSGFzaE11bHRpbWFwL1ZhbHVlU2V0IiwxODM2KSxEKDE4MzcsMSxzYSx4WHQpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBRd3QodGhpcyksdGhpcy5iIT10aGlzLmN9LGwuUGI9ZnVuY3Rpb24oKXt2YXIgZSxuO2lmKFF3dCh0aGlzKSx0aGlzLmI9PXRoaXMuYyl0aHJvdyBpdChuZXcgbGMpO3JldHVybiBlPXUodGhpcy5iLDMzMCksbj1lLmksdGhpcy5kPWUsdGhpcy5iPWUuZixufSxsLlFiPWZ1bmN0aW9uKCl7UXd0KHRoaXMpLGk0KCEhdGhpcy5kKSx2Y2UodGhpcy5jLHRoaXMuZC5pKSx0aGlzLmE9dGhpcy5jLmUsdGhpcy5kPW51bGx9LGwuYT0wLEYoS2UsIkxpbmtlZEhhc2hNdWx0aW1hcC9WYWx1ZVNldC8xIiwxODM3KSxEKDc2NiwxOTg2LFQyLGRVdCksbC5aYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuZixlfHwodGhpcy5mPW5ldyBDYnQodGhpcykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBQaXQodGhpcyxlKX0sbC5jYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGtldCh0aGlzLGUpfSxsLmZjPWZ1bmN0aW9uKGUpe3JldHVybiBjbXQodGhpcyxlKX0sbC4kYj1mdW5jdGlvbigpe3NYdCh0aGlzKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gU1Z0KHRoaXMsZSl9LGwuYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IENidCh0aGlzKX0sbC5iYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX3R0KHRoaXMpfSxsLnFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcga2V0KHRoaXMsZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5hfSxsLnJjPWZ1bmN0aW9uKGUpe3JldHVybiBjbXQodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwuYz0wLGwuZD0wLEYoS2UsIkxpbmtlZExpc3RNdWx0aW1hcCIsNzY2KSxEKDUyLDI4LGpFKSxsLmFkPWZ1bmN0aW9uKGUpe3I0KHRoaXMsZSl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMsMTYpfSxsLlZjPWZ1bmN0aW9uKGUsbil7dGhyb3cgaXQobmV3IFNnKCJBZGQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGxpc3QiKSl9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuVmModGhpcy5nYygpLGUpLCEwfSxsLldjPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvO2ZvcihPbihuKSxyPSExLG89bi5LYygpO28uT2IoKTspcz1vLlBiKCksdGhpcy5WYyhlKysscykscj0hMDtyZXR1cm4gcn0sbC4kYj1mdW5jdGlvbigpe3RoaXMuVWQoMCx0aGlzLmdjKCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBrNXQodGhpcyxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBQeXQodGhpcyl9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGVuZSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBteCh0aGlzKX0sbC5ZYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlpjKDApfSxsLlpjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZGEodGhpcyxlKX0sbC4kYz1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgU2coIlJlbW92ZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgbGlzdCIpKX0sbC5VZD1mdW5jdGlvbihlLG4pe3ZhciByLHM7Zm9yKHM9dGhpcy5aYyhlKSxyPWU7cjxuOysrcilzLlBiKCkscy5RYigpfSxsLl9jPWZ1bmN0aW9uKGUsbil7dGhyb3cgaXQobmV3IFNnKCJTZXQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGxpc3QiKSl9LGwuYmQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IFFkKHRoaXMsZSxuKX0sbC5qPTAsRihwciwiQWJzdHJhY3RMaXN0Iiw1MiksRCgxOTY0LDUyLGpFKSxsLlZjPWZ1bmN0aW9uKGUsbil7bTgodGhpcyxlLG4pfSxsLldjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIERyZSh0aGlzLGUsbil9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIFpmKHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5aYygwKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gRHN0KHRoaXMsZSl9LGwuX2M9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO3I9dGhpcy5aYyhlKTt0cnl7cmV0dXJuIHM9ci5QYigpLHIuV2Iobiksc31jYXRjaChvKXt0aHJvdyBvPVdpKG8pLF90KG8sMTA5KT9pdChuZXcgeW8oIkNhbid0IHNldCBlbGVtZW50ICIrZSkpOml0KG8pfX0sRihwciwiQWJzdHJhY3RTZXF1ZW50aWFsTGlzdCIsMTk2NCksRCg2MzYsMTk2NCxqRSxrZXQpLGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHdXdCh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dSh0cih0aGlzLmEuYix0aGlzLmIpLDI4MyksZT9lLmE6MH0sRihLZSwiTGlua2VkTGlzdE11bHRpbWFwLzEiLDYzNiksRCgxMjk3LDE5NzAsenUsX3R0KSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBTVnQodGhpcy5hLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3bmUodGhpcy5hKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4hY210KHRoaXMuYSxlKS5hLmRjKCl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gSEModGhpcy5hLmIpfSxGKEtlLCJMaW5rZWRMaXN0TXVsdGltYXAvMUtleVNldEltcGwiLDEyOTcpLEQoMTI5NiwxLHNhLHduZSksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIFh3dCh0aGlzKSwhIXRoaXMuY30sbC5QYj1mdW5jdGlvbigpe1h3dCh0aGlzKSxNMnQodGhpcy5jKSx0aGlzLmE9dGhpcy5jLEZzKHRoaXMuZCx0aGlzLmEuYSk7ZG8gdGhpcy5jPXRoaXMuYy5iO3doaWxlKHRoaXMuYyYmIUZzKHRoaXMuZCx0aGlzLmMuYSkpO3JldHVybiB0aGlzLmEuYX0sbC5RYj1mdW5jdGlvbigpe1h3dCh0aGlzKSxpNCghIXRoaXMuYSksVmoobmV3IG5pdCh0aGlzLmUsdGhpcy5hLmEpKSx0aGlzLmE9bnVsbCx0aGlzLmI9dGhpcy5lLmN9LGwuYj0wLEYoS2UsIkxpbmtlZExpc3RNdWx0aW1hcC9EaXN0aW5jdEtleUl0ZXJhdG9yIiwxMjk2KSxEKDI4MywxLHsyODM6MX0sUnZ0KSxsLmE9MCxGKEtlLCJMaW5rZWRMaXN0TXVsdGltYXAvS2V5TGlzdCIsMjgzKSxEKDEyOTUsMzQ1LHpxLGJWdCksbC5jZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mfSxsLmVkPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPXRoaXMuZix0aGlzLmY9ZSxufSxGKEtlLCJMaW5rZWRMaXN0TXVsdGltYXAvTm9kZSIsMTI5NSksRCg1NjAsMSxuMCxuaXQsaG9lKSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUmI9ZnVuY3Rpb24oZSl7dGhpcy5lPVE1dCh0aGlzLmYsdGhpcy5iLGUsdGhpcy5jKSwrK3RoaXMuZCx0aGlzLmE9bnVsbH0sbC5PYj1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5jfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmV9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gVnZ0KHRoaXMpfSxsLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC5VYj1mdW5jdGlvbigpe3JldHVybiBCUXQodGhpcyl9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kLTF9LGwuUWI9ZnVuY3Rpb24oKXtpNCghIXRoaXMuYSksdGhpcy5hIT10aGlzLmM/KHRoaXMuZT10aGlzLmEuZSwtLXRoaXMuZCk6dGhpcy5jPXRoaXMuYS5jLEhwbih0aGlzLmYsdGhpcy5hKSx0aGlzLmE9bnVsbH0sbC5XYj1mdW5jdGlvbihlKXtMMnQoISF0aGlzLmEpLHRoaXMuYS5mPWV9LGwuZD0wLEYoS2UsIkxpbmtlZExpc3RNdWx0aW1hcC9WYWx1ZUZvcktleUl0ZXJhdG9yIiw1NjApLEQoMTAxOCw1MixqRSksbC5WYz1mdW5jdGlvbihlLG4pe3RoaXMuYS5WYyhlLG4pfSxsLldjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuYS5XYyhlLG4pfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuSGMoZSl9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5YYihlKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLiRjKGUpfSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuYS5fYyhlLG4pfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxGKEtlLCJMaXN0cy9BYnN0cmFjdExpc3RXcmFwcGVyIiwxMDE4KSxEKDEwMTksMTAxOCx3ZmUpLEYoS2UsIkxpc3RzL1JhbmRvbUFjY2Vzc0xpc3RXcmFwcGVyIiwxMDE5KSxEKDEwMjEsMTAxOSx3ZmUseFZ0KSxsLlpjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuWmMoZSl9LEYoS2UsIkxpc3RzLzEiLDEwMjEpLEQoMTMxLDUyLHsxMzE6MSwyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjF9LE9tKSxsLlZjPWZ1bmN0aW9uKGUsbil7dGhpcy5hLlZjKEM4KHRoaXMsZSksbil9LGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuJGIoKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLlhiKEV2dCh0aGlzLGUpKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBZdnQodGhpcywwKX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gWXZ0KHRoaXMsZSl9LGwuJGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS4kYyhFdnQodGhpcyxlKSl9LGwuVWQ9ZnVuY3Rpb24oZSxuKXsoQVp0KGUsbix0aGlzLmEuZ2MoKSksbDIodGhpcy5hLmJkKEM4KHRoaXMsbiksQzgodGhpcyxlKSkpKS4kYigpfSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuYS5fYyhFdnQodGhpcyxlKSxuKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sbC5iZD1mdW5jdGlvbihlLG4pe3JldHVybiBBWnQoZSxuLHRoaXMuYS5nYygpKSxsMih0aGlzLmEuYmQoQzgodGhpcyxuKSxDOCh0aGlzLGUpKSl9LEYoS2UsIkxpc3RzL1JldmVyc2VMaXN0IiwxMzEpLEQoMjgwLDEzMSx7MTMxOjEsMjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDU0OjF9LGt3KSxGKEtlLCJMaXN0cy9SYW5kb21BY2Nlc3NSZXZlcnNlTGlzdCIsMjgwKSxEKDEwMjAsMSxuMCx3VnQpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5SYj1mdW5jdGlvbihlKXt0aGlzLmMuUmIoZSksdGhpcy5jLlViKCksdGhpcy5hPSExfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5TYigpfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5PYigpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIERKdCh0aGlzKX0sbC5UYj1mdW5jdGlvbigpe3JldHVybiBDOCh0aGlzLmIsdGhpcy5jLlRiKCkpfSxsLlViPWZ1bmN0aW9uKCl7aWYoIXRoaXMuYy5PYigpKXRocm93IGl0KG5ldyBsYyk7cmV0dXJuIHRoaXMuYT0hMCx0aGlzLmMuUGIoKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybiBDOCh0aGlzLmIsdGhpcy5jLlRiKCkpLTF9LGwuUWI9ZnVuY3Rpb24oKXtpNCh0aGlzLmEpLHRoaXMuYy5RYigpLHRoaXMuYT0hMX0sbC5XYj1mdW5jdGlvbihlKXtMMnQodGhpcy5hKSx0aGlzLmMuV2IoZSl9LGwuYT0hMSxGKEtlLCJMaXN0cy9SZXZlcnNlTGlzdC8xIiwxMDIwKSxEKDQzMiw0ODcsc2EsRkMpLGwuUWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFVSKGUpfSxGKEtlLCJNYXBzLzEiLDQzMiksRCg2OTgsNDg3LHNhLEpwdCksbC5RZD1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDQyKS5kZCgpfSxGKEtlLCJNYXBzLzIiLDY5OCksRCg5NjIsNDg3LHNhLGJXdCksbC5RZD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IEx3KGUsdlV0KHRoaXMuYSxlKSl9LEYoS2UsIk1hcHMvMyIsOTYyKSxEKDk1OSwxOTcxLHp1LGJ4KSxsLkpjPWZ1bmN0aW9uKGUpe2xLZSh0aGlzLmEsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmtjKCl9LGwuUmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5sYygpfSxGKEtlLCJNYXBzL0l0ZXJhdG9yQmFzZWRBYnN0cmFjdE1hcC8xIiw5NTkpLEQoOTYwLDEse30sQ3R0KSxsLk9kPWZ1bmN0aW9uKGUsbil7dGhpcy5hLnRkKGUpfSxGKEtlLCJNYXBzL0tleVNldC9sYW1iZGEkMCRUeXBlIiw5NjApLEQoOTU4LDI4LHh5LHlWdCksbC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEudWMoZSl9LGwuSmM9ZnVuY3Rpb24oZSl7THIoZSksdGhpcy5hLndjKG5ldyBtdHQoZSkpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kYygpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBKcHQodGhpcy5hLnZjKCkuS2MoKSl9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG4scjt0cnl7cmV0dXJuIGF5KHRoaXMsZSwhMCl9Y2F0Y2gocyl7aWYocz1XaShzKSxfdChzLDQxKSl7Zm9yKHI9dGhpcy5hLnZjKCkuS2MoKTtyLk9iKCk7KWlmKG49dShyLlBiKCksNDIpLHBkKGUsbi5kZCgpKSlyZXR1cm4gdGhpcy5hLkJjKG4uY2QoKSksITA7cmV0dXJuITF9ZWxzZSB0aHJvdyBpdChzKX19LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9LEYoS2UsIk1hcHMvVmFsdWVzIiw5NTgpLEQoOTYxLDEse30sbXR0KSxsLk9kPWZ1bmN0aW9uKGUsbil7dGhpcy5hLnRkKG4pfSxGKEtlLCJNYXBzL1ZhbHVlcy9sYW1iZGEkMCRUeXBlIiw5NjEpLEQoNzM2LDE5ODcsbXYsQ2J0KSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuX2IoZSk/dGhpcy5hLmNjKGUpOm51bGx9LGwuQmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5fYihlKT90aGlzLmEuZmMoZSk6bnVsbH0sbC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuX2IoZSl9LGwuRWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHZ0dCh0aGlzKX0sbC5EYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkVjKCl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmRjKCl9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmVjKCl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmVjKCkuZ2MoKX0sRihLZSwiTXVsdGltYXBzL0FzTWFwIiw3MzYpLEQoMTEwNCwxOTcxLHp1LHZ0dCksbC5LYz1mdW5jdGlvbigpe3JldHVybiBTUWUodGhpcy5hLmEuZWMoKSxuZXcgeXR0KHRoaXMpKX0sbC5SYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIExpZSh0aGlzLGUpPyhuPXUoZSw0MiksQUtlKHRoaXMuYSxuLmNkKCkpLCEwKTohMX0sRihLZSwiTXVsdGltYXBzL0FzTWFwL0VudHJ5U2V0IiwxMTA0KSxEKDExMDgsMSx7fSx5dHQpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHZVdCh0aGlzLGUpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sRihLZSwiTXVsdGltYXBzL0FzTWFwL0VudHJ5U2V0LzEiLDExMDgpLEQoNTQzLDE5ODksezU0MzoxLDgzNToxLDIwOjEsMjg6MSwxNDoxfSx4dHQpLGwuJGI9ZnVuY3Rpb24oKXtjeih0aGlzLmEpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBBSHQodGhpcy5hLGUpfSxsLkpjPWZ1bmN0aW9uKGUpe0xyKGUpLHZhKE05KHRoaXMuYSksbmV3IEV0dChlKSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEZDKE05KHRoaXMuYSkuYS5rYygpKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZH0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBYTShNOSh0aGlzLmEpLk5jKCksbmV3IGV0KX0sRihLZSwiTXVsdGltYXBzL0tleXMiLDU0MyksRCgxMTA2LDEse30sZXQpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw0MikuY2QoKX0sRihLZSwiTXVsdGltYXBzL0tleXMvMG1ldGhvZHJlZiRnZXRLZXkkVHlwZSIsMTEwNiksRCgxMTA1LDQ4NyxzYSx0SHQpLGwuUWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrdHQodShlLDQyKSl9LEYoS2UsIk11bHRpbWFwcy9LZXlzLzEiLDExMDUpLEQoMTk5MCwxLHs0MTY6MX0pLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIF90KGUsNDkyKT8obj11KGUsNDE2KSx1KHRoaXMuYS5kZCgpLDE0KS5nYygpPT11KG4uYS5kZCgpLDE0KS5nYygpJiZwZCh0aGlzLmEuY2QoKSxuLmEuY2QoKSkpOiExfSxsLkhiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5hLmNkKCksKGU9PW51bGw/MDpIaShlKSledSh0aGlzLmEuZGQoKSwxNCkuZ2MoKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlLG47cmV0dXJuIG49YjkodGhpcy5hLmNkKCkpLGU9dSh0aGlzLmEuZGQoKSwxNCkuZ2MoKSxlPT0xP246bisiIHggIitlfSxGKEtlLCJNdWx0aXNldHMvQWJzdHJhY3RFbnRyeSIsMTk5MCksRCg0OTIsMTk5MCx7NDkyOjEsNDE2OjF9LGt0dCksRihLZSwiTXVsdGltYXBzL0tleXMvMS8xIiw0OTIpLEQoMTEwNywxLFVuLEV0dCksbC50ZD1mdW5jdGlvbihlKXt0aGlzLmEudGQodShlLDQyKS5jZCgpKX0sRihLZSwiTXVsdGltYXBzL0tleXMvbGFtYmRhJDEkVHlwZSIsMTEwNyksRCgxMTEwLDEsVW4sc3QpLGwudGQ9ZnVuY3Rpb24oZSl7QWVuKHUoZSw0MTYpKX0sRihLZSwiTXVsdGlzZXQvbGFtYmRhJDAkVHlwZSIsMTExMCksRCg3MzcsMSxVbixUdHQpLGwudGQ9ZnVuY3Rpb24oZSl7R29uKHRoaXMuYSx1KGUsNDE2KSl9LEYoS2UsIk11bHRpc2V0L2xhbWJkYSQxJFR5cGUiLDczNyksRCgxMTExLDEse30sdXQpLEYoS2UsIk11bHRpc2V0cy8wbWV0aG9kcmVmJGFkZCRUeXBlIiwxMTExKSxEKDczOCwxLHt9LHZ0KSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBGc24odShlLDQxNikpfSxGKEtlLCJNdWx0aXNldHMvbGFtYmRhJDMkVHlwZSIsNzM4KSxEKDIwMDgsMSxESSksRihLZSwiUmFuZ2VHd3RTZXJpYWxpemF0aW9uRGVwZW5kZW5jaWVzIiwyMDA4KSxEKDUxNCwyMDA4LHsxNjk6MSw1MTQ6MSwzOjEsNDU6MX0sejN0KSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBxS3QodGhpcyx1KGUsMzUpKX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gcUt0KHRoaXMsdShlLDM1KSl9LGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIF90KGUsNTE0KT8obj11KGUsNTE0KSxEM3QodGhpcy5hLG4uYSkmJkQzdCh0aGlzLmIsbi5iKSk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLkhiKCkqMzErdGhpcy5iLkhiKCl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gWFp0KHRoaXMuYSx0aGlzLmIpfSxGKEtlLCJSYW5nZSIsNTE0KSxEKDc3OCwxOTk5LE1fLEpLdCksbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gJDJ0KHRoaXMuYixlKX0sbC5QZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIE5wKHRoaXMuYixlKX0sbC5GZD1mdW5jdGlvbihlKXtyZXR1cm4gJDJ0KHRoaXMuYixlKX0sRihLZSwiUmVndWxhckltbXV0YWJsZUFzTGlzdCIsNzc4KSxEKDY0NiwyMDA2LE1fLHZydCksbC5IZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LEYoS2UsIlJlZ3VsYXJJbW11dGFibGVMaXN0Iiw2NDYpLEQoNjE2LDcxNSxCRSx1ZXQpLEYoS2UsIlJlZ3VsYXJJbW11dGFibGVNYXAiLDYxNiksRCg3MTYsNzAzLFJFLFNidCk7dmFyIGVFdDtGKEtlLCJSZWd1bGFySW1tdXRhYmxlU2V0Iiw3MTYpLEQoMTk3NixOMSx6dSksbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgSXZ0KHRoaXMuYSx0aGlzLmIpfSxsLkZjPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuR2M9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sbC4kYj1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBPcil9LGwuTWM9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sRihLZSwiU2V0cy9TZXRWaWV3IiwxOTc2KSxEKDk2MywxOTc2LHp1LHZWdCksbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgSXZ0KHRoaXMuYSx0aGlzLmIpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB6bnQodGhpcy5hLGUpJiZ0aGlzLmIuSGMoZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIE5EKHRoaXMuYSxlKSYmdGhpcy5iLkljKGUpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIGdzZSh0aGlzLmIsdGhpcy5hKX0sbC5MYz1mdW5jdGlvbigpe3JldHVybiBSaShuZXcgVG4obnVsbCxuZXcgX24odGhpcy5hLDEpKSxuZXcgVGgodGhpcy5iKSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gT0QodGhpcyl9LGwuT2M9ZnVuY3Rpb24oKXtyZXR1cm4gUmkobmV3IFRuKG51bGwsbmV3IF9uKHRoaXMuYSwxKSksbmV3IEtrKHRoaXMuYikpfSxGKEtlLCJTZXRzLzIiLDk2MyksRCg3MDAsNjk5LEZFLEl2dCksbC5ZYj1mdW5jdGlvbigpe2Zvcih2YXIgZTtwMnQodGhpcy5hKTspaWYoZT1qOSh0aGlzLmEpLHRoaXMuYy5IYyhlKSlyZXR1cm4gZTtyZXR1cm4gdGhpcy5lPTIsbnVsbH0sRihLZSwiU2V0cy8yLzEiLDcwMCksRCg5NjQsMSxsaSxLayksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLkhjKGUpfSxGKEtlLCJTZXRzLzIvNG1ldGhvZHJlZiRjb250YWlucyRUeXBlIiw5NjQpLEQoOTY1LDEsbGksVGgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5IYyhlKX0sRihLZSwiU2V0cy8yLzVtZXRob2RyZWYkY29udGFpbnMkVHlwZSIsOTY1KSxEKDYwNywxOTc1LHs2MDc6MSwzOjEsMjA6MSwxNDoxLDI3MToxLDIxOjEsODQ6MX0sbVF0KSxsLkJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5DZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuTWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLkpjPWZ1bmN0aW9uKGUpe3RoaXMuYS5KYyhlKX0sbC5MYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuTGMoKX0sbC5PYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2MoKX0sRihLZSwiU2V0cy9Vbm1vZGlmaWFibGVOYXZpZ2FibGVTZXQiLDYwNyksRCgxOTMyLDE5MzEsQkUsU1h0KSxsLkxkPWZ1bmN0aW9uKCl7cmV0dXJuIGdkKCksbmV3IEF4KHRoaXMuYSl9LGwuQ2M9ZnVuY3Rpb24oKXtyZXR1cm4gZ2QoKSxuZXcgQXgodGhpcy5hKX0sbC5wZD1mdW5jdGlvbigpe3JldHVybiBnZCgpLG5ldyBBeCh0aGlzLmEpfSxGKEtlLCJTaW5nbGV0b25JbW11dGFibGVCaU1hcCIsMTkzMiksRCg2NDcsMjAwNixNXyxSbnQpLGwuSGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxGKEtlLCJTaW5nbGV0b25JbW11dGFibGVMaXN0Iiw2NDcpLEQoMzUwLDE5ODEsUkUsQXgpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHJSKHRoaXMuYSl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHlpKHRoaXMuYSxlKX0sbC5FZD1mdW5jdGlvbigpe3JldHVybiBuZXcgclIodGhpcy5hKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiAxfSxGKEtlLCJTaW5nbGV0b25JbW11dGFibGVTZXQiLDM1MCksRCgxMTE1LDEse30sWCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDE2NCl9LEYoS2UsIlN0cmVhbXMvbGFtYmRhJDAkVHlwZSIsMTExNSksRCgxMTE2LDEsVnEsU3R0KSxsLlZkPWZ1bmN0aW9uKCl7X2FuKHRoaXMuYSl9LEYoS2UsIlN0cmVhbXMvbGFtYmRhJDEkVHlwZSIsMTExNiksRCgxNjU5LDE2NTgsVDIsaFF0KSxsLlpiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5mLHUodShlfHwodGhpcy5mPV90KHRoaXMuYywxNzEpP25ldyBEaih0aGlzLHUodGhpcy5jLDE3MSkpOl90KHRoaXMuYywxNjEpP25ldyBITSh0aGlzLHUodGhpcy5jLDE2MSkpOm5ldyBsOCh0aGlzLHRoaXMuYykpLDE2MSksMTcxKX0sbC5oYz1mdW5jdGlvbigpe3JldHVybiBuZXcgT3AodGhpcy5iKX0sbC5nZD1mdW5jdGlvbigpe3JldHVybiBuZXcgT3AodGhpcy5iKX0sbC5lYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuaSx1KHUoZXx8KHRoaXMuaT1fdCh0aGlzLmMsMTcxKT9uZXcgdTgodGhpcyx1KHRoaXMuYywxNzEpKTpfdCh0aGlzLmMsMTYxKT9uZXcgbU0odGhpcyx1KHRoaXMuYywxNjEpKTpuZXcgSzModGhpcyx0aGlzLmMpKSw4NCksMjcxKX0sbC5hYz1mdW5jdGlvbigpe3JldHVybiBfdCh0aGlzLmMsMTcxKT9uZXcgRGoodGhpcyx1KHRoaXMuYywxNzEpKTpfdCh0aGlzLmMsMTYxKT9uZXcgSE0odGhpcyx1KHRoaXMuYywxNjEpKTpuZXcgbDgodGhpcyx0aGlzLmMpfSxsLmljPWZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsJiZ0aGlzLmEudWUoZSxlKSxuZXcgT3AodGhpcy5iKX0sRihLZSwiVHJlZU11bHRpbWFwIiwxNjU5KSxEKDc4LDEsezM6MSw3ODoxfSksbC5XZD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IEVycm9yKGUpfSxsLlhkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZX0sbC5ZZD1mdW5jdGlvbigpe3JldHVybiBqaG4od3UoUW50KCh0aGlzLms9PW51bGwmJih0aGlzLms9TnQoRHV0LGVlLDc4LDAsMCwxKSksdGhpcy5rKSksbmV3IEZ0KSl9LGwuWmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mfSxsLiRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ30sbC5fZD1mdW5jdGlvbigpe3BLZSh0aGlzLG1zbih0aGlzLldkKG1ydCh0aGlzLHRoaXMuZykpKSksYXF0KHRoaXMpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIG1ydCh0aGlzLHRoaXMuJGQoKSl9LGwuZT12ZmUsbC5pPSExLGwubj0hMDt2YXIgRHV0PUYoWG8sIlRocm93YWJsZSIsNzgpO0QoMTAyLDc4LHszOjEsMTAyOjEsNzg6MX0pLEYoWG8sIkV4Y2VwdGlvbiIsMTAyKSxEKDYwLDEwMixRMCxLYixWbyksRihYbywiUnVudGltZUV4Y2VwdGlvbiIsNjApLEQoNTk4LDYwLFEwKSxGKFhvLCJKc0V4Y2VwdGlvbiIsNTk4KSxEKDg2Myw1OTgsUTApLEYoRkksIkphdmFTY3JpcHRFeGNlcHRpb25CYXNlIiw4NjMpLEQoNDc3LDg2Myx7NDc3OjEsMzoxLDEwMjoxLDYwOjEsNzg6MX0sSHJlKSxsLiRkPWZ1bmN0aW9uKCl7cmV0dXJuIGMwbih0aGlzKSx0aGlzLmN9LGwuYWU9ZnVuY3Rpb24oKXtyZXR1cm4gVnQodGhpcy5iKT09PVZ0KG5FdCk/bnVsbDp0aGlzLmJ9O3ZhciBuRXQ7RigkeHQsIkphdmFTY3JpcHRFeGNlcHRpb24iLDQ3Nyk7dmFyIE9nZT1GKCR4dCwiSmF2YVNjcmlwdE9iamVjdCQiLDApLEl1dDtEKDE5NDgsMSx7fSksRigkeHQsIlNjaGVkdWxlciIsMTk0OCk7dmFyIFpIPTAsUGdlPTAsSkg9LTE7RCg4OTAsMTk0OCx7fSxwdCk7dmFyIHJFdDtGKEZJLCJTY2hlZHVsZXJJbXBsIiw4OTApO3ZhciBPdXQ7RCgxOTYwLDEse30pLEYoRkksIlN0YWNrVHJhY2VDcmVhdG9yL0NvbGxlY3RvciIsMTk2MCksRCg4NjQsMTk2MCx7fSxVKSxsLmJlPWZ1bmN0aW9uKGUpe3ZhciBuPXt9LHI9W107ZVtYYXRdPXI7Zm9yKHZhciBzPWFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyO3M7KXt2YXIgbz0oSTgoKSxzLm5hbWV8fChzLm5hbWU9b2NuKHMudG9TdHJpbmcoKSkpKTtyLnB1c2gobyk7dmFyIGg9IjoiK28sZD1uW2hdO2lmKGQpe3ZhciB2LGs7Zm9yKHY9MCxrPWQubGVuZ3RoO3Y8azt2KyspaWYoZFt2XT09PXMpcmV0dXJufShkfHwobltoXT1bXSkpLnB1c2gocykscz1zLmNhbGxlcn19LGwuY2U9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87Zm9yKHM9KEk4KCksZSYmZVtYYXRdP2VbWGF0XTpbXSkscj1zLmxlbmd0aCxvPU50KHdFdCxlZSwzMTAsciwwLDEpLG49MDtuPHI7bisrKW9bbl09bmV3IGxydChzW25dLG51bGwsLTEpO3JldHVybiBvfSxGKEZJLCJTdGFja1RyYWNlQ3JlYXRvci9Db2xsZWN0b3JMZWdhY3kiLDg2NCksRCgxOTYxLDE5NjAse30pLGwuYmU9ZnVuY3Rpb24oZSl7fSxsLmRlPWZ1bmN0aW9uKGUsbixyLHMpe3JldHVybiBuZXcgbHJ0KG4sZSsiQCIrcyxyPDA/LTE6cil9LGwuY2U9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkO2lmKG89UDFuKGUpLGg9TnQod0V0LGVlLDMxMCwwLDAsMSksbj0wLHM9by5sZW5ndGgscz09MClyZXR1cm4gaDtmb3IoZD10aGUodGhpcyxvWzBdKSxobihkLmQsS2F0KXx8KGhbbisrXT1kKSxyPTE7cjxzO3IrKyloW24rK109dGhlKHRoaXMsb1tyXSk7cmV0dXJuIGh9LEYoRkksIlN0YWNrVHJhY2VDcmVhdG9yL0NvbGxlY3Rvck1vZGVybiIsMTk2MSksRCg4NjUsMTk2MSx7fSxidCksbC5kZT1mdW5jdGlvbihlLG4scixzKXtyZXR1cm4gbmV3IGxydChuLGUsLTEpfSxGKEZJLCJTdGFja1RyYWNlQ3JlYXRvci9Db2xsZWN0b3JNb2Rlcm5Ob1NvdXJjZU1hcCIsODY1KSxEKDEwNTAsMSx7fSksRihxeHQseGZlLDEwNTApLEQoNjE1LDEwNTAsezYxNToxfSxwWHQpO3ZhciBpRXQ7Rihwb3QseGZlLDYxNSksRCgyMDAxLDEse30pLEYocXh0LGtmZSwyMDAxKSxEKDIwMDIsMjAwMSx7fSksRihwb3Qsa2ZlLDIwMDIpLEQoMTA5MCwxLHt9LG10KTt2YXIgY1M7Rihwb3QsIkxvY2FsZUluZm8iLDEwOTApLEQoMTkxOCwxLHt9LHl0KSxsLmE9MCxGKHBvdCwiVGltZVpvbmUiLDE5MTgpLEQoMTI1OCwyMDAyLHt9LGF0KSxGKCJjb20uZ29vZ2xlLmd3dC5pMThuLmNsaWVudC5pbXBsLmNsZHIiLCJEYXRlVGltZUZvcm1hdEluZm9JbXBsIiwxMjU4KSxEKDQzNCwxLHs0MzQ6MX0sR1l0KSxsLmE9ITEsbC5iPTAsRihxeHQsIkRhdGVUaW1lRm9ybWF0L1BhdHRlcm5QYXJ0Iiw0MzQpLEQoMTk5LDEsRWZlLEJSLE15dCxYMnQpLGwud2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGJzbih0aGlzLHUoZSwxOTkpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxOTkpJiZEdyhUdSh0aGlzLnEuZ2V0VGltZSgpKSxUdSh1KGUsMTk5KS5xLmdldFRpbWUoKSkpfSxsLkhiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9VHUodGhpcy5xLmdldFRpbWUoKSksQXIoRHJ0KGUsVm0oZSwzMikpKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlLG4scjtyZXR1cm4gcj0tdGhpcy5xLmdldFRpbWV6b25lT2Zmc2V0KCksZT0ocj49MD8iKyI6IiIpKyhyLzYwfDApLG49Z2ooYi5NYXRoLmFicyhyKSU2MCksKFBhZSgpLFZnZSlbdGhpcy5xLmdldERheSgpXSsiICIrR2dlW3RoaXMucS5nZXRNb250aCgpXSsiICIrZ2oodGhpcy5xLmdldERhdGUoKSkrIiAiK2dqKHRoaXMucS5nZXRIb3VycygpKSsiOiIrZ2oodGhpcy5xLmdldE1pbnV0ZXMoKSkrIjoiK2dqKHRoaXMucS5nZXRTZWNvbmRzKCkpKyIgR01UIitlK24rIiAiK3RoaXMucS5nZXRGdWxsWWVhcigpfTt2YXIgdFY9RihwciwiRGF0ZSIsMTk5KTtEKDE5MTUsMTk5LEVmZSxvYWUpLGwuYT0hMSxsLmI9MCxsLmM9MCxsLmQ9MCxsLmU9MCxsLmY9MCxsLmc9ITEsbC5pPTAsbC5qPTAsbC5rPTAsbC5uPTAsbC5vPTAsbC5wPTAsRigiY29tLmdvb2dsZS5nd3QuaTE4bi5zaGFyZWQuaW1wbCIsIkRhdGVSZWNvcmQiLDE5MTUpLEQoMTk2NiwxLHt9KSxsLmZlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5oZT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLmllPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuamU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sRih2NiwiSlNPTlZhbHVlIiwxOTY2KSxEKDIxNiwxOTY2LHsyMTY6MX0sRWcsd3gpLGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMjE2KT9YdnQodGhpcy5hLHUoZSwyMTYpLmEpOiExfSxsLmVlPWZ1bmN0aW9uKCl7cmV0dXJuIEtZZX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBCdnQodGhpcy5hKX0sbC5mZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGUsbixyO2ZvcihyPW5ldyBPbCgiWyIpLG49MCxlPXRoaXMuYS5sZW5ndGg7bjxlO24rKyluPjAmJihyLmErPSIsIiksaGMocixKbSh0aGlzLG4pKTtyZXR1cm4gci5hKz0iXSIsci5hfSxGKHY2LCJKU09OQXJyYXkiLDIxNiksRCg0ODMsMTk2Nix7NDgzOjF9LFhrKSxsLmVlPWZ1bmN0aW9uKCl7cmV0dXJuIFhZZX0sbC5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIE5uKCksIiIrdGhpcy5hfSxsLmE9ITE7dmFyIEZnZSxOZ2U7Rih2NiwiSlNPTkJvb2xlYW4iLDQ4MyksRCg5ODUsNjAsUTAsZUh0KSxGKHY2LCJKU09ORXhjZXB0aW9uIiw5ODUpLEQoMTAyMywxOTY2LHt9LGZ0KSxsLmVlPWZ1bmN0aW9uKCl7cmV0dXJuIGVLZX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBfdX07dmFyIEJnZTtGKHY2LCJKU09OTnVsbCIsMTAyMyksRCgyNTgsMTk2Nix7MjU4OjF9LEVDKSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDI1OCk/dGhpcy5hPT11KGUsMjU4KS5hOiExfSxsLmVlPWZ1bmN0aW9uKCl7cmV0dXJuIFFZZX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBwOCh0aGlzLmEpfSxsLmhlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hKyIifSxsLmE9MCxGKHY2LCJKU09OTnVtYmVyIiwyNTgpLEQoMTgzLDE5NjYsezE4MzoxfSxfeCxRayksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxODMpP1h2dCh0aGlzLmEsdShlLDE4MykuYSk6ITF9LGwuZWU9ZnVuY3Rpb24oKXtyZXR1cm4gWlllfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEJ2dCh0aGlzLmEpfSxsLmllPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGgsZDtmb3IoZD1uZXcgT2woInsiKSxlPSEwLGg9eWl0KHRoaXMsTnQoQWUsZWUsMiwwLDYsMSkpLHI9aCxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxlP2U9ITE6ZC5hKz1ZYSxHcihkLFpvZShuKSksZC5hKz0iOiIsaGMoZCxCMCh0aGlzLG4pKTtyZXR1cm4gZC5hKz0ifSIsZC5hfSxGKHY2LCJKU09OT2JqZWN0IiwxODMpLEQoNTk2LE4xLHp1LEVldCksbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSkmJlBLZSh0aGlzLmEsQnIoZSkpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBteChuZXcgeWwodGhpcy5iKSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmxlbmd0aH0sRih2NiwiSlNPTk9iamVjdC8xIiw1OTYpO3ZhciBQdXQ7RCgyMDQsMTk2Nix7MjA0OjF9LFVtKSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDIwNCk/aG4odGhpcy5hLHUoZSwyMDQpLmEpOiExfSxsLmVlPWZ1bmN0aW9uKCl7cmV0dXJuIEpZZX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBWZyh0aGlzLmEpfSxsLmplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gWm9lKHRoaXMuYSl9LEYodjYsIkpTT05TdHJpbmciLDIwNCk7dmFyIGhiLHNFdCxSZ2UsYUV0LG9FdDtEKDE5NjIsMSx7NTI1OjF9KSxGKEh4dCwiT3V0cHV0U3RyZWFtIiwxOTYyKSxEKDE5NjMsMTk2Mix7NTI1OjF9KSxGKEh4dCwiRmlsdGVyT3V0cHV0U3RyZWFtIiwxOTYzKSxEKDg2NiwxOTYzLHs1MjU6MX0sQ3QpLEYoSHh0LCJQcmludFN0cmVhbSIsODY2KSxEKDQxOCwxLHs0NzU6MX0pLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxGKFhvLCJBYnN0cmFjdFN0cmluZ0J1aWxkZXIiLDQxOCksRCg1MjksNjAsUTAsX1IpLEYoWG8sIkFyaXRobWV0aWNFeGNlcHRpb24iLDUyOSksRCg3Myw2MCxib3QsRHB0LHlvKSxGKFhvLCJJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIiw3MyksRCgzMjAsNzMsezM6MSwzMjA6MSwxMDI6MSw3MzoxLDYwOjEsNzg6MX0sT3B0LGlidCksRihYbywiQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIiwzMjApLEQoNTI4LDYwLFEwLHRldCxpSHQpLEYoWG8sIkFycmF5U3RvcmVFeGNlcHRpb24iLDUyOCksRCgyODksNzgsVGZlLGZldCksRihYbywiRXJyb3IiLDI4OSksRCgxOTQsMjg5LFRmZSxNcHQsZG10KSxGKFhvLCJBc3NlcnRpb25FcnJvciIsMTk0KSxDZ2U9ezM6MSw0NzY6MSwzNToxfTt2YXIgRjIscjcsUnM9RihYbywiQm9vbGVhbiIsNDc2KTtEKDIzNiwxLHszOjEsMjM2OjF9KTt2YXIgY0V0O0YoWG8sIk51bWJlciIsMjM2KSxEKDIxNywyMzYsezM6MSwyMTc6MSwzNToxLDIzNjoxfSxxdHQpLGwud2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIERLZSh0aGlzLHUoZSwyMTcpKX0sbC5rZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMjE3KSYmdShlLDIxNykuYT09dGhpcy5hfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0sbC5hPTA7dmFyIE02PUYoWG8sIkJ5dGUiLDIxNyksdUV0O0QoMTcyLDEsezM6MSwxNzI6MSwzNToxfSxoUiksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gSUtlKHRoaXMsdShlLDE3MikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE3MikmJnUoZSwxNzIpLmE9PXRoaXMuYX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLmEpfSxsLmE9MDt2YXIgbEV0LHVTPUYoWG8sIkNoYXJhY3RlciIsMTcyKSxoRXQ7RCgyMDUsNjAsezM6MSwyMDU6MSwxMDI6MSw2MDoxLDc4OjF9LG9xdCxpOCksRihYbywiQ2xhc3NDYXN0RXhjZXB0aW9uIiwyMDUpLF9nZT17MzoxLDM1OjEsMzMzOjEsMjM2OjF9O3ZhciBsYT1GKFhvLCJEb3VibGUiLDMzMyk7RCgxNTUsMjM2LHszOjEsMzU6MSwxNTU6MSwyMzY6MX0sUDMsUHB0KSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiAkWGUodGhpcyx1KGUsMTU1KSl9LGwua2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE1NSkmJnZZdCh0aGlzLmEsdShlLDE1NSkuYSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gcHModGhpcy5hKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0sbC5hPTA7dmFyIGk3PUYoWG8sIkZsb2F0IiwxNTUpO0QoMzIsNjAsezM6MSwxMDI6MSwzMjoxLDYwOjEsNzg6MX0sZ00sRm4sRnJlKSxGKFhvLCJJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iLDMyKSxEKDcxLDYwLFEwLE91LE5vKSxGKFhvLCJJbGxlZ2FsU3RhdGVFeGNlcHRpb24iLDcxKSxEKDE5LDIzNix7MzoxLDM1OjEsMTk6MSwyMzY6MX0sdU0pLGwud2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHpYZSh0aGlzLHUoZSwxOSkpfSxsLmtlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxOSkmJnUoZSwxOSkuYT09dGhpcy5hfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0sbC5hPTA7dmFyIGphPUYoWG8sIkludGVnZXIiLDE5KSxmRXQsamdlO0QoMTYyLDIzNix7MzoxLDM1OjEsMTYyOjEsMjM2OjF9LEFtKSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBxWGUodGhpcyx1KGUsMTYyKSl9LGwua2U9ZnVuY3Rpb24oKXtyZXR1cm4gWXcodGhpcy5hKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxNjIpJiZEdyh1KGUsMTYyKS5hLHRoaXMuYSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gQXIodGhpcy5hKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIiK185KHRoaXMuYSl9LGwuYT0wO3ZhciBTdj1GKFhvLCJMb25nIiwxNjIpLGRFdDtEKDIwMzksMSx7fSksRCgxODMxLDYwLFEwLGFIdCksRihYbywiTmVnYXRpdmVBcnJheVNpemVFeGNlcHRpb24iLDE4MzEpLEQoMTczLDU5OCx7MzoxLDEwMjoxLDE3MzoxLDYwOjEsNzg6MX0sSUMsU3gpLGwuV2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoZSl9LEYoWG8sIk51bGxQb2ludGVyRXhjZXB0aW9uIiwxNzMpO3ZhciBnRXQsRnV0LCRnZSxwRXQ7RCgxMjcsMzIsezM6MSwxMDI6MSwzMjoxLDEyNzoxLDYwOjEsNzg6MX0sbGQpLEYoWG8sIk51bWJlckZvcm1hdEV4Y2VwdGlvbiIsMTI3KSxEKDE4NCwyMzYsezM6MSwzNToxLDIzNjoxLDE4NDoxfSxmUiksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gT0tlKHRoaXMsdShlLDE4NCkpfSxsLmtlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxODQpJiZ1KGUsMTg0KS5hPT10aGlzLmF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5hfSxsLmE9MDt2YXIgQXY9RihYbywiU2hvcnQiLDE4NCksYkV0O0QoMzEwLDEsezM6MSwzMTA6MX0sbHJ0KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBfdChlLDMxMCk/KG49dShlLDMxMCksdGhpcy5jPT1uLmMmJnRoaXMuZD09bi5kJiZ0aGlzLmE9PW4uYSYmdGhpcy5iPT1uLmIpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEF6KGx0KGN0KFFuLDEpLERlLDEsNSxbcGUodGhpcy5jKSx0aGlzLmEsdGhpcy5kLHRoaXMuYl0pKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmErIi4iK3RoaXMuZCsiKCIrKHRoaXMuYiE9bnVsbD90aGlzLmI6IlVua25vd24gU291cmNlIikrKHRoaXMuYz49MD8iOiIrdGhpcy5jOiIiKSsiKSJ9LGwuYz0wO3ZhciB3RXQ9RihYbywiU3RhY2tUcmFjZUVsZW1lbnQiLDMxMCk7U2dlPXszOjEsNDc1OjEsMzU6MSwyOjF9O3ZhciBBZT1GKFhvLGp4dCwyKTtEKDEwNyw0MTgsezQ3NToxfSxBZywkQyxfaCksRihYbywiU3RyaW5nQnVmZmVyIiwxMDcpLEQoMTAwLDQxOCx7NDc1OjF9LE1wLEltLE9sKSxGKFhvLCJTdHJpbmdCdWlsZGVyIiwxMDApLEQoNjg3LDczLGJvdCxzYnQpLEYoWG8sIlN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24iLDY4NyksRCgyMDQzLDEse30pO3ZhciB2RXQ7RCg4NDQsMSx7fSxGdCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDc4KS5lfSxGKFhvLCJUaHJvd2FibGUvbGFtYmRhJDAkVHlwZSIsODQ0KSxEKDQxLDYwLHszOjEsMTAyOjEsNjA6MSw3ODoxLDQxOjF9LE9yLFNnKSxGKFhvLCJVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiIsNDEpLEQoMjQwLDIzNix7MzoxLDM1OjEsMjM2OjEsMjQwOjF9LFNELGdidCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gZ2xlKHRoaXMsdShlLDI0MCkpfSxsLmtlPWZ1bmN0aW9uKCl7cmV0dXJuIGR5KFhsZSh0aGlzKSl9LGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIHRoaXM9PT1lPyEwOl90KGUsMjQwKT8obj11KGUsMjQwKSx0aGlzLmU9PW4uZSYmZ2xlKHRoaXMsbik9PTApOiExfSxsLkhiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuYiE9MD90aGlzLmI6dGhpcy5hPDU0PyhlPVR1KHRoaXMuZiksdGhpcy5iPUFyKE5zKGUsLTEpKSx0aGlzLmI9MzMqdGhpcy5iK0FyKE5zKCRwKGUsMzIpLC0xKSksdGhpcy5iPTE3KnRoaXMuYitwcyh0aGlzLmUpLHRoaXMuYik6KHRoaXMuYj0xNypZcmUodGhpcy5jKStwcyh0aGlzLmUpLHRoaXMuYil9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gWGxlKHRoaXMpfSxsLmE9MCxsLmI9MCxsLmQ9MCxsLmU9MCxsLmY9MDt2YXIgemdlLE4yLG1FdCx5RXQseEV0LGtFdCxFRXQsVEV0LE51dD1GKCJqYXZhLm1hdGgiLCJCaWdEZWNpbWFsIiwyNDApO0QoOTEsMjM2LHszOjEsMzU6MSwyMzY6MSw5MToxfSxqM3QsTmcsWDMseDR0LFFpZSxScCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gVWllKHRoaXMsdShlLDkxKSl9LGwua2U9ZnVuY3Rpb24oKXtyZXR1cm4gZHkoSGF0KHRoaXMsMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB2M3QodGhpcyxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBZcmUodGhpcyl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gSGF0KHRoaXMsMCl9LGwuYj0tMixsLmM9MCxsLmQ9MCxsLmU9MDt2YXIgQnV0LGVWLENFdCxSdXQsblYsczcsajQ9RigiamF2YS5tYXRoIiwiQmlnSW50ZWdlciIsOTEpLHFnZSxIZ2UsRDYsbFM7RCg0ODgsMTk2NyxtdiksbC4kYj1mdW5jdGlvbigpe1h1KHRoaXMpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiBUbCh0aGlzLGUpfSxsLnVjPWZ1bmN0aW9uKGUpe3JldHVybiBJcmUodGhpcyxlLHRoaXMuZyl8fElyZSh0aGlzLGUsdGhpcy5mKX0sbC52Yz1mdW5jdGlvbigpe3JldHVybiBuZXcgQ2codGhpcyl9LGwueGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRyKHRoaXMsZSl9LGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4ga2kodGhpcyxlLG4pfSxsLkJjPWZ1bmN0aW9uKGUpe3JldHVybiBKeCh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIEhDKHRoaXMpfSxGKHByLCJBYnN0cmFjdEhhc2hNYXAiLDQ4OCksRCgyNjEsTjEsenUsQ2cpLGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuJGIoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gTVp0KHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHAyKHRoaXMuYSl9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIE1adCh0aGlzLGUpPyhuPXUoZSw0MikuY2QoKSx0aGlzLmEuQmMobiksITApOiExfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxGKHByLCJBYnN0cmFjdEhhc2hNYXAvRW50cnlTZXQiLDI2MSksRCgyNjIsMSxzYSxwMiksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIFp3KHRoaXMpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5RYj1mdW5jdGlvbigpe1N0ZSh0aGlzKX0sbC5iPSExLEYocHIsIkFic3RyYWN0SGFzaE1hcC9FbnRyeVNldEl0ZXJhdG9yIiwyNjIpLEQoNDE3LDEsc2EsbXgpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBUTSh0aGlzKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBaWHQodGhpcyl9LGwuUWI9ZnVuY3Rpb24oKXtDbCh0aGlzKX0sbC5iPTAsbC5jPS0xLEYocHIsIkFic3RyYWN0TGlzdC9JdGVyYXRvckltcGwiLDQxNyksRCg5Niw0MTcsbjAsZGEpLGwuUWI9ZnVuY3Rpb24oKXtDbCh0aGlzKX0sbC5SYj1mdW5jdGlvbihlKXt6bSh0aGlzLGUpfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYj4wfSxsLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5VYj1mdW5jdGlvbigpe3JldHVybiBabih0aGlzLmI+MCksdGhpcy5hLlhiKHRoaXMuYz0tLXRoaXMuYil9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLTF9LGwuV2I9ZnVuY3Rpb24oZSl7Um0odGhpcy5jIT0tMSksdGhpcy5hLl9jKHRoaXMuYyxlKX0sRihwciwiQWJzdHJhY3RMaXN0L0xpc3RJdGVyYXRvckltcGwiLDk2KSxEKDIxOSw1MixqRSxRZCksbC5WYz1mdW5jdGlvbihlLG4pe0ttKGUsdGhpcy5iKSx0aGlzLmMuVmModGhpcy5hK2UsbiksKyt0aGlzLmJ9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIEFuKGUsdGhpcy5iKSx0aGlzLmMuWGIodGhpcy5hK2UpfSxsLiRjPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBBbihlLHRoaXMuYiksbj10aGlzLmMuJGModGhpcy5hK2UpLC0tdGhpcy5iLG59LGwuX2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gQW4oZSx0aGlzLmIpLHRoaXMuYy5fYyh0aGlzLmErZSxuKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuYT0wLGwuYj0wLEYocHIsIkFic3RyYWN0TGlzdC9TdWJMaXN0IiwyMTkpLEQoMzg0LE4xLHp1LFNtKSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLiRiKCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5fYihlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuYS52YygpLktjKCksbmV3IGNNKGUpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuX2IoZSk/KHRoaXMuYS5CYyhlKSwhMCk6ITF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9LEYocHIsIkFic3RyYWN0TWFwLzEiLDM4NCksRCg2OTEsMSxzYSxjTSksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5PYigpfSxsLlBiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dSh0aGlzLmEuUGIoKSw0MiksZS5jZCgpfSxsLlFiPWZ1bmN0aW9uKCl7dGhpcy5hLlFiKCl9LEYocHIsIkFic3RyYWN0TWFwLzEvMSIsNjkxKSxEKDIyNiwyOCx4eSx2MSksbC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEudWMoZSl9LGwuS2M9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmEudmMoKS5LYygpLG5ldyBtMShlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sRihwciwiQWJzdHJhY3RNYXAvMiIsMjI2KSxEKDI5NCwxLHNhLG0xKSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLk9iKCl9LGwuUGI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT11KHRoaXMuYS5QYigpLDQyKSxlLmRkKCl9LGwuUWI9ZnVuY3Rpb24oKXt0aGlzLmEuUWIoKX0sRihwciwiQWJzdHJhY3RNYXAvMi8xIiwyOTQpLEQoNDg0LDEsezQ4NDoxLDQyOjF9KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBfdChlLDQyKT8obj11KGUsNDIpLEZjKHRoaXMuZCxuLmNkKCkpJiZGYyh0aGlzLmUsbi5kZCgpKSk6ITF9LGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBVMyh0aGlzLmQpXlUzKHRoaXMuZSl9LGwuZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGF3dCh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZCsiPSIrdGhpcy5lfSxGKHByLCJBYnN0cmFjdE1hcC9BYnN0cmFjdEVudHJ5Iiw0ODQpLEQoMzgzLDQ4NCx7NDg0OjEsMzgzOjEsNDI6MX0sS1IpLEYocHIsIkFic3RyYWN0TWFwL1NpbXBsZUVudHJ5IiwzODMpLEQoMTk4NCwxLHlvdCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gX3QoZSw0Mik/KG49dShlLDQyKSxGYyh0aGlzLmNkKCksbi5jZCgpKSYmRmModGhpcy5kZCgpLG4uZGQoKSkpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFUzKHRoaXMuY2QoKSleVTModGhpcy5kZCgpKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNkKCkrIj0iK3RoaXMuZGQoKX0sRihwcixoZmUsMTk4NCksRCgxOTkyLDE5NjcsdWZlKSxsLnRjPWZ1bmN0aW9uKGUpe3JldHVybiBSSnQodGhpcyxlKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gX250KHRoaXMsZSl9LGwudmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHgodGhpcyl9LGwueGM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49ZSxlYyhqeXQodGhpcyxuKSl9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHkodGhpcyl9LEYocHIsIkFic3RyYWN0TmF2aWdhYmxlTWFwIiwxOTkyKSxEKDczOSxOMSx6dSx4KSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDQyKSYmUkp0KHRoaXMuYix1KGUsNDIpKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgeTkodGhpcy5iKX0sbC5NYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gX3QoZSw0Mik/KG49dShlLDQyKSxDdGUodGhpcy5iLG4pKTohMX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuY30sRihwciwiQWJzdHJhY3ROYXZpZ2FibGVNYXAvRW50cnlTZXQiLDczOSksRCg0OTMsTjEsQnh0LHkpLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFdSKHRoaXMpfSxsLiRiPWZ1bmN0aW9uKCl7TkModGhpcy5hKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gX250KHRoaXMuYSxlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyB5OShuZXcgdzkodGhpcy5hKS5iKSxuZXcgZyhlKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gX250KHRoaXMuYSxlKT8oUDkodGhpcy5hLGUpLCEwKTohMX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuY30sRihwciwiQWJzdHJhY3ROYXZpZ2FibGVNYXAvTmF2aWdhYmxlS2V5U2V0Iiw0OTMpLEQoNDk0LDEsc2EsZyksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIFRNKHRoaXMuYS5hKX0sbC5QYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPUxqKHRoaXMuYSksZS5jZCgpfSxsLlFiPWZ1bmN0aW9uKCl7QVl0KHRoaXMuYSl9LEYocHIsIkFic3RyYWN0TmF2aWdhYmxlTWFwL05hdmlnYWJsZUtleVNldC8xIiw0OTQpLEQoMjAwNCwyOCx4eSksbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gUjgoeEUodGhpcyxlKSksITB9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIE9uKGUpLEJqKGUhPXRoaXMsIkNhbid0IGFkZCBhIHF1ZXVlIHRvIGl0c2VsZiIpLFVhKHRoaXMsZSl9LGwuJGI9ZnVuY3Rpb24oKXtmb3IoO2NpdCh0aGlzKSE9bnVsbDspO30sRihwciwiQWJzdHJhY3RRdWV1ZSIsMjAwNCksRCgzMDIsMjgsezQ6MSwyMDoxLDI4OjEsMTQ6MX0sQjMsZVp0KSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBpbXQodGhpcyxlKSwhMH0sbC4kYj1mdW5jdGlvbigpe2xtdCh0aGlzKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gZXJlKG5ldyBPOSh0aGlzKSxlKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiBCQyh0aGlzKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgTzkodGhpcyl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGhpbihuZXcgTzkodGhpcyksZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLXRoaXMuYiZ0aGlzLmEubGVuZ3RoLTF9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMsMjcyKX0sbC5RYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj10aGlzLmMtdGhpcy5iJnRoaXMuYS5sZW5ndGgtMSxlLmxlbmd0aDxuJiYoZT1MUihuZXcgQXJyYXkobiksZSkpLGRuZSh0aGlzLGUsbiksZS5sZW5ndGg+biYmdHMoZSxuLG51bGwpLGV9LGwuYj0wLGwuYz0wLEYocHIsIkFycmF5RGVxdWUiLDMwMiksRCg0NDYsMSxzYSxPOSksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSE9dGhpcy5ifSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIE16KHRoaXMpfSxsLlFiPWZ1bmN0aW9uKCl7SmVlKHRoaXMpfSxsLmE9MCxsLmI9MCxsLmM9LTEsRihwciwiQXJyYXlEZXF1ZS9JdGVyYXRvckltcGwiLDQ0NiksRCgxMiw1MixfZmUsaGUsWGMsQnUpLGwuVmM9ZnVuY3Rpb24oZSxuKXtIbSh0aGlzLGUsbil9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGxlKHRoaXMsZSl9LGwuV2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gR3l0KHRoaXMsZSxuKX0sbC5HYz1mdW5jdGlvbihlKXtyZXR1cm4gTHModGhpcyxlKX0sbC4kYj1mdW5jdGlvbigpe3RoaXMuYz1OdChRbixEZSwxLDAsNSwxKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gUm8odGhpcyxlLDApIT0tMX0sbC5KYz1mdW5jdGlvbihlKXt4dSh0aGlzLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBOZSh0aGlzLGUpfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiBSbyh0aGlzLGUsMCl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmxlbmd0aD09MH0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgUyh0aGlzKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gRmcodGhpcyxlKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gbXUodGhpcyxlKX0sbC5VZD1mdW5jdGlvbihlLG4pe3RadCh0aGlzLGUsbil9LGwuX2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gY2godGhpcyxlLG4pfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5sZW5ndGh9LGwuYWQ9ZnVuY3Rpb24oZSl7WnModGhpcyxlKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiBwbnQodGhpcyl9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIFAxKHRoaXMsZSl9O3ZhciBLeG49RihwciwiQXJyYXlMaXN0IiwxMik7RCg3LDEsc2EsUyksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIEdvKHRoaXMpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIEoodGhpcyl9LGwuUWI9ZnVuY3Rpb24oKXtMOSh0aGlzKX0sbC5hPTAsbC5iPS0xLEYocHIsIkFycmF5TGlzdC8xIiw3KSxEKDIwMTMsYi5GdW5jdGlvbix7fSxUdCksbC50ZT1mdW5jdGlvbihlLG4pe3JldHVybiBNcyhlLG4pfSxEKDE1NCw1MixTZmUseWwpLGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGVuZSh0aGlzLGUpIT0tMX0sbC5KYz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbztmb3IoT24oZSkscj10aGlzLmEscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sZS50ZChuKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gdkt0KHRoaXMsZSl9LGwuX2M9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gcj0oQW4oZSx0aGlzLmEubGVuZ3RoKSx0aGlzLmFbZV0pLHRzKHRoaXMuYSxlLG4pLHJ9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmxlbmd0aH0sbC5hZD1mdW5jdGlvbihlKXskbnQodGhpcy5hLHRoaXMuYS5sZW5ndGgsZSl9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gc3NlKHRoaXMsTnQoUW4sRGUsMSx0aGlzLmEubGVuZ3RoLDUsMSkpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiBzc2UodGhpcyxlKX0sRihwciwiQXJyYXlzL0FycmF5TGlzdCIsMTU0KTt2YXIgaW8sdTAsclY7RCg5NDAsNTIsU2ZlLEl0KSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBzMnQoZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gd24oKSxoOCgpLGE3fSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIHduKCksaDgoKSxhN30sbC5nYz1mdW5jdGlvbigpe3JldHVybiAwfSxGKHByLCJDb2xsZWN0aW9ucy9FbXB0eUxpc3QiLDk0MCksRCg5NDEsMSxuMCxPdCksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLlJiPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5TYj1mdW5jdGlvbigpe3JldHVybiExfSxsLlBiPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IGxjKX0sbC5UYj1mdW5jdGlvbigpe3JldHVybiAwfSxsLlViPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IGxjKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybi0xfSxsLlFiPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE91KX0sbC5XYj1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgT3UpfTt2YXIgYTc7RihwciwiQ29sbGVjdGlvbnMvRW1wdHlMaXN0SXRlcmF0b3IiLDk0MSksRCg5NDMsMTk2NyxCRSxCdCksbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC51Yz1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC52Yz1mdW5jdGlvbigpe3JldHVybiB3bigpLHJWfSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsfSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIHduKCksclZ9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sbC5DYz1mdW5jdGlvbigpe3JldHVybiB3bigpLGlvfSxGKHByLCJDb2xsZWN0aW9ucy9FbXB0eU1hcCIsOTQzKSxEKDk0MixOMSxSRSxudCksbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB3bigpLGg4KCksYTd9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sRihwciwiQ29sbGVjdGlvbnMvRW1wdHlTZXQiLDk0MiksRCg1OTksNTIsezM6MSwyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjF9LE8pLGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIEZjKHRoaXMuYSxlKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gQW4oZSwxKSx0aGlzLmF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gMX0sRihwciwiQ29sbGVjdGlvbnMvU2luZ2xldG9uTGlzdCIsNTk5KSxEKDM3MiwxLGdmZSxUKSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuTGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRuKG51bGwsdGhpcy5OYygpKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywwKX0sbC5PYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVG4obnVsbCx0aGlzLk5jKCkpfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBPSHQoKX0sbC5HYz1mdW5jdGlvbihlKXtyZXR1cm4gUEh0KCl9LGwuJGI9ZnVuY3Rpb24oKXtGSHQoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4geU0odGhpcyxlKX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4ga1Z0KHRoaXMsZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmRjKCl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEwodGhpcy5iLktjKCkpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiBOSHQoKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuZ2MoKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuUGMoKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gRVZ0KHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5iKX0sRihwciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlQ29sbGVjdGlvbiIsMzcyKSxEKDM3MSwxLHNhLEwpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuT2IoKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuUGIoKX0sbC5RYj1mdW5jdGlvbigpe0JIdCgpfSxGKHByLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVDb2xsZWN0aW9uSXRlcmF0b3IiLDM3MSksRCg1MzEsMzcyLEFmZSxFaiksbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywxNil9LGwuVmM9ZnVuY3Rpb24oZSxuKXt0aHJvdyBpdChuZXcgT3IpfSxsLldjPWZ1bmN0aW9uKGUsbil7dGhyb3cgaXQobmV3IE9yKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4geWkodGhpcy5hLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuWGIoZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSGkodGhpcy5hKX0sbC5YYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLlhjKGUpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kYygpfSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEMnQodGhpcy5hLlpjKDApKX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IEQydCh0aGlzLmEuWmMoZSkpfSxsLiRjPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuX2M9ZnVuY3Rpb24oZSxuKXt0aHJvdyBpdChuZXcgT3IpfSxsLmFkPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuYmQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IEVqKHRoaXMuYS5iZChlLG4pKX0sRihwciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlTGlzdCIsNTMxKSxEKDY5MCwzNzEsbjAsRDJ0KSxsLlFiPWZ1bmN0aW9uKCl7Qkh0KCl9LGwuUmI9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sbC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuU2IoKX0sbC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuVGIoKX0sbC5VYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuVWIoKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuVmIoKX0sbC5XYj1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgT3IpfSxGKHByLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVMaXN0SXRlcmF0b3IiLDY5MCksRCg2MDAsMSxtdixxKSxsLndjPWZ1bmN0aW9uKGUpe0s5KHRoaXMsZSl9LGwueWM9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBRaXQodGhpcyxlLG4scil9LGwuJGI9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgT3IpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmMuX2IoZSl9LGwudWM9ZnVuY3Rpb24oZSl7cmV0dXJuIENWdCh0aGlzLGUpfSxsLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIEw4KHRoaXMpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBfVnQodGhpcyxlKX0sbC54Yz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jLnhjKGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEhpKHRoaXMuYyl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmRjKCl9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gT1h0KHRoaXMpfSxsLnpjPWZ1bmN0aW9uKGUsbil7dGhyb3cgaXQobmV3IE9yKX0sbC5CYz1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgT3IpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5nYygpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuICRvKHRoaXMuYyl9LGwuQ2M9ZnVuY3Rpb24oKXtyZXR1cm4gSVh0KHRoaXMpfSxGKHByLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVNYXAiLDYwMCksRCgzODIsMzcyLFdhdCxzOCksbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywxKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4geWkodGhpcy5iLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEhpKHRoaXMuYil9LEYocHIsIkNvbGxlY3Rpb25zL1VubW9kaWZpYWJsZVNldCIsMzgyKSxEKDk0NCwzODIsV2F0LGZIdCksbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gVFZ0KHRoaXMsZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYi5JYyhlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuYi5LYygpLG5ldyBQKGUpfSxsLlBjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5iLlBjKCksc0p0KGUsZS5sZW5ndGgpLGV9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGdRdCh0aGlzLGUpfSxGKHByLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVNYXAvVW5tb2RpZmlhYmxlRW50cnlTZXQiLDk0NCksRCg5NDUsMSxzYSxQKSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3ICQodSh0aGlzLmEuUGIoKSw0MikpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5PYigpfSxsLlFiPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE9yKX0sRihwciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlTWFwL1VubW9kaWZpYWJsZUVudHJ5U2V0LzEiLDk0NSksRCg2ODgsMSx5b3QsJCksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLkZiKGUpfSxsLmNkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5jZCgpfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kZCgpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5IYigpfSxsLmVkPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5hKX0sRihwciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlTWFwL1VubW9kaWZpYWJsZUVudHJ5U2V0L1VubW9kaWZpYWJsZUVudHJ5Iiw2ODgpLEQoNjAxLDUzMSx7MjA6MSwxNDoxLDE1OjEsNTQ6MX0sbWV0KSxGKHByLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVSYW5kb21BY2Nlc3NMaXN0Iiw2MDEpLEQoNjg5LDM4MixwZmUsSTJ0KSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBXUih0aGlzKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4geWkodGhpcy5hLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEhpKHRoaXMuYSl9LEYocHIsIkNvbGxlY3Rpb25zL1VubW9kaWZpYWJsZVNvcnRlZFNldCIsNjg5KSxEKDg0NywxLHhvdCxnbiksbC51ZT1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiByPWFKdCh1KGUsMTEpLHUobiwxMSkpLHIhPTA/cjpwbGUodShlLDExKSx1KG4sMTEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKHByLCJDb21wYXJhdG9yL2xhbWJkYSQwJFR5cGUiLDg0Nyk7dmFyIF9FdCxTRXQsQUV0O0QoNzUxLDEseG90LFNlKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIE1lbih1KGUsMzUpLHUobiwzNSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBaMygpLEFFdH0sRihwciwiQ29tcGFyYXRvcnMvTmF0dXJhbE9yZGVyQ29tcGFyYXRvciIsNzUxKSxEKDExNzcsMSx4b3QsbWUpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRGVuKHUoZSwzNSksdShuLDM1KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIFozKCksU0V0fSxGKHByLCJDb21wYXJhdG9ycy9SZXZlcnNlTmF0dXJhbE9yZGVyQ29tcGFyYXRvciIsMTE3NyksRCg2NCwxLHhvdCxkdCksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy5hLnVlKG4sZSl9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxGKHByLCJDb21wYXJhdG9ycy9SZXZlcnNlZENvbXBhcmF0b3IiLDY0KSxEKDE2Niw2MCxRMCxyaCksRihwciwiQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbiIsMTY2KTt2YXIgVmdlLEdnZTtEKDE5MDQsMSxqSSxWZSksbC53ZT1mdW5jdGlvbihlKXtJaWUodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJEb3VibGVTdW1tYXJ5U3RhdGlzdGljc1tjb3VudCA9ICIrXzkodGhpcy5hKSsiLCBhdmcgPSAiKyhVVnQodGhpcy5hLDApP0hKdCh0aGlzKS9Zdyh0aGlzLmEpOjApKyIsIG1pbiA9ICIrdGhpcy5jKyIsIG1heCA9ICIrdGhpcy5iKyIsIHN1bSA9ICIrSEp0KHRoaXMpKyJdIn0sbC5hPTAsbC5iPUNzLGwuYz1hcyxsLmQ9MCxsLmU9MCxsLmY9MCxGKHByLCJEb3VibGVTdW1tYXJ5U3RhdGlzdGljcyIsMTkwNCksRCgxODA1LDYwLFEwLGNxdCksRihwciwiRW1wdHlTdGFja0V4Y2VwdGlvbiIsMTgwNSksRCg0NTEsMTk2NyxtdixpXyksbC56Yz1mdW5jdGlvbihlLG4pe3JldHVybiBzd3QodGhpcyxlLG4pfSxsLiRiPWZ1bmN0aW9uKCl7RVh0KHRoaXMpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiBHVnQodGhpcyxlKX0sbC51Yz1mdW5jdGlvbihlKXt2YXIgbixyO2ZvcihyPW5ldyBNeCh0aGlzLmEpO3IuYTxyLmMuYS5sZW5ndGg7KWlmKG49ajkociksRmMoZSx0aGlzLmJbbi5nXSkpcmV0dXJuITA7cmV0dXJuITF9LGwudmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEx0KHRoaXMpfSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiBwbyh0aGlzLGUpfSxsLkJjPWZ1bmN0aW9uKGUpe3JldHVybiBHdnQodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuY30sRihwciwiRW51bU1hcCIsNDUxKSxEKDEzNTIsTjEsenUsTHQpLGwuJGI9ZnVuY3Rpb24oKXtFWHQodGhpcy5hKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gTFp0KHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJLdCh0aGlzLmEpfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBMWnQodGhpcyxlKT8obj11KGUsNDIpLmNkKCksR3Z0KHRoaXMuYSxuKSwhMCk6ITF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmEuY30sRihwciwiRW51bU1hcC9FbnRyeVNldCIsMTM1MiksRCgxMzUzLDEsc2EsYkt0KSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iPWo5KHRoaXMuYSksbmV3IFlWdCh0aGlzLmMsdGhpcy5iKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBwMnQodGhpcy5hKX0sbC5RYj1mdW5jdGlvbigpe1JtKCEhdGhpcy5iKSxHdnQodGhpcy5jLHRoaXMuYiksdGhpcy5iPW51bGx9LEYocHIsIkVudW1NYXAvRW50cnlTZXRJdGVyYXRvciIsMTM1MyksRCgxMzU0LDE5ODQseW90LFlWdCksbC5jZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmJbdGhpcy5hLmddfSxsLmVkPWZ1bmN0aW9uKGUpe3JldHVybiBwdnQodGhpcy5iLHRoaXMuYS5nLGUpfSxGKHByLCJFbnVtTWFwL01hcEVudHJ5IiwxMzU0KSxEKDE3NCxOMSx7MjA6MSwyODoxLDE0OjEsMTc0OjEsMjE6MX0pO3ZhciBVZ2U9RihwciwiRW51bVNldCIsMTc0KTtEKDE1NiwxNzQsezIwOjEsMjg6MSwxNDoxLDE3NDoxLDE1NjoxLDIxOjF9LHNoKSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiB2Zih0aGlzLHUoZSwyMikpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB6bnQodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgTXgodGhpcyl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIE1LdCh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sbC5jPTAsRihwciwiRW51bVNldC9FbnVtU2V0SW1wbCIsMTU2KSxEKDM0MywxLHNhLE14KSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gajkodGhpcyl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gcDJ0KHRoaXMpfSxsLlFiPWZ1bmN0aW9uKCl7Um0odGhpcy5iIT0tMSksdHModGhpcy5jLmIsdGhpcy5iLG51bGwpLC0tdGhpcy5jLmMsdGhpcy5iPS0xfSxsLmE9LTEsbC5iPS0xLEYocHIsIkVudW1TZXQvRW51bVNldEltcGwvSXRlcmF0b3JJbXBsIiwzNDMpLEQoNDMsNDg4LEE0LF9yLEx4LHVVdCksbC5yZT1mdW5jdGlvbihlLG4pe3JldHVybiBWdChlKT09PVZ0KG4pfHxlIT1udWxsJiZ5aShlLG4pfSxsLnNlPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPUhpKGUpLG58MH0sRihwciwiSGFzaE1hcCIsNDMpLEQoNTMsTjEsVnh0LEhzLElSLEU5KSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBGcyh0aGlzLGUpfSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLiRiKCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIEkwKHRoaXMsZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCk9PTB9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmVjKCkuS2MoKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gbTJ0KHRoaXMsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9O3ZhciBYeG49RihwciwiSGFzaFNldCIsNTMpO0QoMTc4MSwxLE9JLFllKSxsLnVkPWZ1bmN0aW9uKGUpe0huZSh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkludFN1bW1hcnlTdGF0aXN0aWNzW2NvdW50ID0gIitfOSh0aGlzLmEpKyIsIGF2ZyA9ICIrKFVWdCh0aGlzLmEsMCk/WXcodGhpcy5kKS9Zdyh0aGlzLmEpOjApKyIsIG1pbiA9ICIrdGhpcy5jKyIsIG1heCA9ICIrdGhpcy5iKyIsIHN1bSA9ICIrXzkodGhpcy5kKSsiXSJ9LGwuYT0wLGwuYj1TYSxsLmM9d2ksbC5kPTAsRihwciwiSW50U3VtbWFyeVN0YXRpc3RpY3MiLDE3ODEpLEQoMTA0OSwxLHIwLGtVdCksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlbXQodGhpcyl9LGwuYz0wLEYocHIsIkludGVybmFsSGFzaENvZGVNYXAiLDEwNDkpLEQoNzExLDEsc2EsZW10KSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kPXRoaXMuYVt0aGlzLmMrK10sdGhpcy5kfSxsLk9iPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuYzx0aGlzLmEubGVuZ3RoPyEwOihlPXRoaXMuYi5uZXh0KCksZS5kb25lPyExOih0aGlzLmE9ZS52YWx1ZVsxXSx0aGlzLmM9MCwhMCkpfSxsLlFiPWZ1bmN0aW9uKCl7YjV0KHRoaXMuZSx0aGlzLmQuY2QoKSksdGhpcy5jIT0wJiYtLXRoaXMuY30sbC5jPTAsbC5kPW51bGwsRihwciwiSW50ZXJuYWxIYXNoQ29kZU1hcC8xIiw3MTEpO3ZhciBXZ2U7RCgxMDQ3LDEscjAsRVV0KSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGhtdCh0aGlzKX0sbC5jPTAsbC5kPTAsRihwciwiSW50ZXJuYWxTdHJpbmdNYXAiLDEwNDcpLEQoNzEwLDEsc2EsaG10KSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jPXRoaXMuYSx0aGlzLmE9dGhpcy5iLm5leHQoKSxuZXcgX1l0KHRoaXMuZCx0aGlzLmMsdGhpcy5kLmQpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuYS5kb25lfSxsLlFiPWZ1bmN0aW9uKCl7Wm5lKHRoaXMuZCx0aGlzLmMudmFsdWVbMF0pfSxGKHByLCJJbnRlcm5hbFN0cmluZ01hcC8xIiw3MTApLEQoMTA0OCwxOTg0LHlvdCxfWXQpLGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLnZhbHVlWzBdfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kIT10aGlzLmM/S0ModGhpcy5hLHRoaXMuYi52YWx1ZVswXSk6dGhpcy5iLnZhbHVlWzFdfSxsLmVkPWZ1bmN0aW9uKGUpe3JldHVybiBzdih0aGlzLmEsdGhpcy5iLnZhbHVlWzBdLGUpfSxsLmM9MCxGKHByLCJJbnRlcm5hbFN0cmluZ01hcC8yIiwxMDQ4KSxEKDIyOCw0MyxBNCxhMixNbXQpLGwuJGI9ZnVuY3Rpb24oKXt0WXQodGhpcyl9LGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFdWdCh0aGlzLGUpfSxsLnVjPWZ1bmN0aW9uKGUpe3ZhciBuO2ZvcihuPXRoaXMuZC5hO24hPXRoaXMuZDspe2lmKEZjKG4uZSxlKSlyZXR1cm4hMDtuPW4uYX1yZXR1cm4hMX0sbC52Yz1mdW5jdGlvbigpe3JldHVybiBuZXcgRHQodGhpcyl9LGwueGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFh3KHRoaXMsZSl9LGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbTIodGhpcyxlLG4pfSxsLkJjPWZ1bmN0aW9uKGUpe3JldHVybiBadGUodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiBIQyh0aGlzLmUpfSxsLmM9ITEsRihwciwiTGlua2VkSGFzaE1hcCIsMjI4KSxEKDM4NywzODMsezQ4NDoxLDM4MzoxLDM4NzoxLDQyOjF9LENXdCxPd3QpLEYocHIsIkxpbmtlZEhhc2hNYXAvQ2hhaW5FbnRyeSIsMzg3KSxEKDcwMSxOMSx6dSxEdCksbC4kYj1mdW5jdGlvbigpe3RZdCh0aGlzLmEpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBEWnQodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgU3Z0KHRoaXMpfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBEWnQodGhpcyxlKT8obj11KGUsNDIpLmNkKCksWnRlKHRoaXMuYSxuKSwhMCk6ITF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gSEModGhpcy5hLmUpfSxGKHByLCJMaW5rZWRIYXNoTWFwL0VudHJ5U2V0Iiw3MDEpLEQoNzAyLDEsc2EsU3Z0KSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gQXRlKHRoaXMpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYiE9dGhpcy5jLmEuZH0sbC5RYj1mdW5jdGlvbigpe1JtKCEhdGhpcy5hKSxGcnQodGhpcy5jLmEuZSx0aGlzKSxId3QodGhpcy5hKSxKeCh0aGlzLmMuYS5lLHRoaXMuYS5kKSxZMnQodGhpcy5jLmEuZSx0aGlzKSx0aGlzLmE9bnVsbH0sRihwciwiTGlua2VkSGFzaE1hcC9FbnRyeVNldC9FbnRyeUl0ZXJhdG9yIiw3MDIpLEQoMTc4LDUzLFZ4dCxPMCxkbnQsV3d0KTt2YXIgUXhuPUYocHIsIkxpbmtlZEhhc2hTZXQiLDE3OCk7RCg2OCwxOTY0LHszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsNjg6MSwxNToxfSxaaSxTbnQpLGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJpKHRoaXMsZSl9LGwuJGI9ZnVuY3Rpb24oKXtBaCh0aGlzKX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gZWkodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuYj0wO3ZhciBaeG49RihwciwiTGlua2VkTGlzdCIsNjgpO0QoOTcwLDEsbjAsU1l0KSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUmI9ZnVuY3Rpb24oZSl7ZUQodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBPUih0aGlzKX0sbC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuYiE9dGhpcy5kLmF9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGkodGhpcyl9LGwuVGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlViPWZ1bmN0aW9uKCl7cmV0dXJuIE9ydCh0aGlzKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEtMX0sbC5RYj1mdW5jdGlvbigpe3R6KHRoaXMpfSxsLldiPWZ1bmN0aW9uKGUpe1JtKCEhdGhpcy5jKSx0aGlzLmMuYz1lfSxsLmE9MCxsLmM9bnVsbCxGKHByLCJMaW5rZWRMaXN0L0xpc3RJdGVyYXRvckltcGwiLDk3MCksRCg2MDgsMSx7fSx4dCksRihwciwiTGlua2VkTGlzdC9Ob2RlIiw2MDgpLEQoMTk1OSwxLHt9KTt2YXIgTEV0LFlnZTtGKHByLCJMb2NhbGUiLDE5NTkpLEQoODYxLDE5NTkse30sSHQpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iIn0sRihwciwiTG9jYWxlLzEiLDg2MSksRCg4NjIsMTk1OSx7fSxMZSksbC5JYj1mdW5jdGlvbigpe3JldHVybiJ1bmtub3duIn0sRihwciwiTG9jYWxlLzQiLDg2MiksRCgxMDksNjAsezM6MSwxMDI6MSw2MDoxLDc4OjEsMTA5OjF9LGxjLEZYdCksRihwciwiTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiIsMTA5KSxEKDQwNCwxLHs0MDQ6MX0sQ1IpLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIGU9PT10aGlzPyEwOl90KGUsNDA0KT8obj11KGUsNDA0KSxGYyh0aGlzLmEsbi5hKSk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gVTModGhpcy5hKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEhPW51bGw/Y2ZlK2I5KHRoaXMuYSkrIikiOiJPcHRpb25hbC5lbXB0eSgpIn07dmFyIGlWO0YocHIsIk9wdGlvbmFsIiw0MDQpLEQoNDYzLDEsezQ2MzoxfSxnVXQsejJ0KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBlPT09dGhpcz8hMDpfdChlLDQ2Myk/KG49dShlLDQ2MyksdGhpcy5hPT1uLmEmJk1zKHRoaXMuYixuLmIpPT0wKTohMX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE/cHModGhpcy5iKTowfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT8iT3B0aW9uYWxEb3VibGUub2YoIisoIiIrdGhpcy5iKSsiKSI6Ik9wdGlvbmFsRG91YmxlLmVtcHR5KCkifSxsLmE9ITEsbC5iPTA7dmFyIE1FdDtGKHByLCJPcHRpb25hbERvdWJsZSIsNDYzKSxEKDUxNywxLHs1MTc6MX0scFV0LGtXdCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gZT09PXRoaXM/ITA6X3QoZSw1MTcpPyhuPXUoZSw1MTcpLHRoaXMuYT09bi5hJiZwdSh0aGlzLmIsbi5iKT09MCk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hP3RoaXMuYjowfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT8iT3B0aW9uYWxJbnQub2YoIisoIiIrdGhpcy5iKSsiKSI6Ik9wdGlvbmFsSW50LmVtcHR5KCkifSxsLmE9ITEsbC5iPTA7dmFyIEtnZTtGKHByLCJPcHRpb25hbEludCIsNTE3KSxEKDUwMywyMDA0LHh5LG4kKSxsLkdjPWZ1bmN0aW9uKGUpe3JldHVybiBlNHQodGhpcyxlKX0sbC4kYj1mdW5jdGlvbigpe3RoaXMuYi5jPU50KFFuLERlLDEsMCw1LDEpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybihlPT1udWxsPy0xOlJvKHRoaXMuYixlLDApKSE9LTF9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFYodGhpcyl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGduZSh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5jLmxlbmd0aH0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywyNTYpfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHBudCh0aGlzLmIpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiBQMSh0aGlzLmIsZSl9LEYocHIsIlByaW9yaXR5UXVldWUiLDUwMyksRCgxMjc3LDEsc2EsViksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYTx0aGlzLmMuYi5jLmxlbmd0aH0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBabih0aGlzLmE8dGhpcy5jLmIuYy5sZW5ndGgpLHRoaXMuYj10aGlzLmErKyxOZSh0aGlzLmMuYix0aGlzLmIpfSxsLlFiPWZ1bmN0aW9uKCl7Um0odGhpcy5iIT0tMSksdml0KHRoaXMuYyx0aGlzLmE9dGhpcy5iKSx0aGlzLmI9LTF9LGwuYT0wLGwuYj0tMSxGKHByLCJQcmlvcml0eVF1ZXVlLzEiLDEyNzcpLEQoMjMwLDEsezIzMDoxfSxaaXQsRiQpLGwuYT0wLGwuYj0wO3ZhciBERXQsSUV0LEp4bj0wO0YocHIsIlJhbmRvbSIsMjMwKSxEKDI3LDEsSWgsX24sancsQlh0KSxsLnFkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5yZD1mdW5jdGlvbigpe3JldHVybiB1dnQodGhpcyksdGhpcy5jfSxsLk5iPWZ1bmN0aW9uKGUpe3V2dCh0aGlzKSx0aGlzLmQuTmIoZSl9LGwuc2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGtlZSh0aGlzLGUpfSxsLmE9MCxsLmM9MCxGKHByLCJTcGxpdGVyYXRvcnMvSXRlcmF0b3JTcGxpdGVyYXRvciIsMjcpLEQoNDg1LDI3LEloLFdSKSxGKHByLCJTb3J0ZWRTZXQvMSIsNDg1KSxEKDYwMiwxLGpJLFkpLGwud2U9ZnVuY3Rpb24oZSl7dGhpcy5hLnRkKGUpfSxGKHByLCJTcGxpdGVyYXRvci9PZkRvdWJsZS8wbWV0aG9kcmVmJGFjY2VwdCRUeXBlIiw2MDIpLEQoNjAzLDEsakkscnQpLGwud2U9ZnVuY3Rpb24oZSl7dGhpcy5hLnRkKGUpfSxGKHByLCJTcGxpdGVyYXRvci9PZkRvdWJsZS8xbWV0aG9kcmVmJGFjY2VwdCRUeXBlIiw2MDMpLEQoNjA0LDEsT0ksb3QpLGwudWQ9ZnVuY3Rpb24oZSl7dGhpcy5hLnRkKHBlKGUpKX0sRihwciwiU3BsaXRlcmF0b3IvT2ZJbnQvMm1ldGhvZHJlZiRhY2NlcHQkVHlwZSIsNjA0KSxEKDYwNSwxLE9JLGh0KSxsLnVkPWZ1bmN0aW9uKGUpe3RoaXMuYS50ZChwZShlKSl9LEYocHIsIlNwbGl0ZXJhdG9yL09mSW50LzNtZXRob2RyZWYkYWNjZXB0JFR5cGUiLDYwNSksRCg2MTcsMSxJaCksbC5OYj1mdW5jdGlvbihlKXtwYnQodGhpcyxlKX0sbC5xZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwucmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxsLmQ9MCxsLmU9MCxGKHByLCJTcGxpdGVyYXRvcnMvQmFzZVNwbGl0ZXJhdG9yIiw2MTcpLEQoNzIxLDYxNyxJaCksbC54ZT1mdW5jdGlvbihlKXtqMyh0aGlzLGUpfSxsLk5iPWZ1bmN0aW9uKGUpe190KGUsMTgyKT9qMyh0aGlzLHUoZSwxODIpKTpqMyh0aGlzLG5ldyBydChlKSl9LGwuc2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTgyKT90aGlzLnllKHUoZSwxODIpKTp0aGlzLnllKG5ldyBZKGUpKX0sRihwciwiU3BsaXRlcmF0b3JzL0Fic3RyYWN0RG91YmxlU3BsaXRlcmF0b3IiLDcyMSksRCg3MjAsNjE3LEloKSxsLnhlPWZ1bmN0aW9uKGUpe2ozKHRoaXMsZSl9LGwuTmI9ZnVuY3Rpb24oZSl7X3QoZSwxOTYpP2ozKHRoaXMsdShlLDE5NikpOmozKHRoaXMsbmV3IGh0KGUpKX0sbC5zZD1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxOTYpP3RoaXMueWUodShlLDE5NikpOnRoaXMueWUobmV3IG90KGUpKX0sRihwciwiU3BsaXRlcmF0b3JzL0Fic3RyYWN0SW50U3BsaXRlcmF0b3IiLDcyMCksRCg1NDAsNjE3LEloKSxGKHByLCJTcGxpdGVyYXRvcnMvQWJzdHJhY3RTcGxpdGVyYXRvciIsNTQwKSxEKDY5MiwxLEloKSxsLk5iPWZ1bmN0aW9uKGUpe3BidCh0aGlzLGUpfSxsLnFkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5yZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmQtdGhpcy5jfSxsLmI9MCxsLmM9MCxsLmQ9MCxGKHByLCJTcGxpdGVyYXRvcnMvQmFzZUFycmF5U3BsaXRlcmF0b3IiLDY5MiksRCg5NDcsNjkyLEloLGlLdCksbC56ZT1mdW5jdGlvbihlLG4pe3FLZSh0aGlzLHUoZSwzOCksbil9LGwuTmI9ZnVuY3Rpb24oZSl7YXJ0KHRoaXMsZSl9LGwuc2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHokKHRoaXMsZSl9LEYocHIsIlNwbGl0ZXJhdG9ycy9BcnJheVNwbGl0ZXJhdG9yIiw5NDcpLEQoNjkzLDY5MixJaCxFWXQpLGwuemU9ZnVuY3Rpb24oZSxuKXtIS2UodGhpcyx1KGUsMTgyKSxuKX0sbC54ZT1mdW5jdGlvbihlKXthcnQodGhpcyxlKX0sbC5OYj1mdW5jdGlvbihlKXtfdChlLDE4Mik/YXJ0KHRoaXMsdShlLDE4MikpOmFydCh0aGlzLG5ldyBydChlKSl9LGwueWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHokKHRoaXMsZSl9LGwuc2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTgyKT96JCh0aGlzLHUoZSwxODIpKTp6JCh0aGlzLG5ldyBZKGUpKX0sRihwciwiU3BsaXRlcmF0b3JzL0RvdWJsZUFycmF5U3BsaXRlcmF0b3IiLDY5MyksRCgxOTY4LDEsSWgpLGwuTmI9ZnVuY3Rpb24oZSl7cGJ0KHRoaXMsZSl9LGwucWQ9ZnVuY3Rpb24oKXtyZXR1cm4gMTY0NDh9LGwucmQ9ZnVuY3Rpb24oKXtyZXR1cm4gMH07dmFyIFhnZTtGKHByLCJTcGxpdGVyYXRvcnMvRW1wdHlTcGxpdGVyYXRvciIsMTk2OCksRCg5NDYsMTk2OCxJaCxzZSksbC54ZT1mdW5jdGlvbihlKXtVayhlKX0sbC5OYj1mdW5jdGlvbihlKXtfdChlLDE5Nik/VWsodShlLDE5NikpOlVrKG5ldyBodChlKSl9LGwueWU9ZnVuY3Rpb24oZSl7cmV0dXJuIF9idChlKX0sbC5zZD1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxOTYpP19idCh1KGUsMTk2KSk6X2J0KG5ldyBvdChlKSl9LEYocHIsIlNwbGl0ZXJhdG9ycy9FbXB0eVNwbGl0ZXJhdG9yL09mSW50Iiw5NDYpLEQoNTgwLDUyLExmZSxFUiksbC5WYz1mdW5jdGlvbihlLG4pe1Q4KGUsdGhpcy5hLmMubGVuZ3RoKzEpLEhtKHRoaXMuYSxlLG4pfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBsZSh0aGlzLmEsZSl9LGwuV2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gVDgoZSx0aGlzLmEuYy5sZW5ndGgrMSksR3l0KHRoaXMuYSxlLG4pfSxsLkdjPWZ1bmN0aW9uKGUpe3JldHVybiBMcyh0aGlzLmEsZSl9LGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuYz1OdChRbixEZSwxLDAsNSwxKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gUm8odGhpcy5hLGUsMCkhPS0xfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiBORCh0aGlzLmEsZSl9LGwuSmM9ZnVuY3Rpb24oZSl7eHUodGhpcy5hLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBUOChlLHRoaXMuYS5jLmxlbmd0aCksTmUodGhpcy5hLGUpfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiBSbyh0aGlzLmEsZSwwKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYy5sZW5ndGg9PTB9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFModGhpcy5hKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gVDgoZSx0aGlzLmEuYy5sZW5ndGgpLEZnKHRoaXMuYSxlKX0sbC5VZD1mdW5jdGlvbihlLG4pe3RadCh0aGlzLmEsZSxuKX0sbC5fYz1mdW5jdGlvbihlLG4pe3JldHVybiBUOChlLHRoaXMuYS5jLmxlbmd0aCksY2godGhpcy5hLGUsbil9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmMubGVuZ3RofSxsLmFkPWZ1bmN0aW9uKGUpe1pzKHRoaXMuYSxlKX0sbC5iZD1mdW5jdGlvbihlLG4pe3JldHVybiBuZXcgUWQodGhpcy5hLGUsbil9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gcG50KHRoaXMuYSl9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIFAxKHRoaXMuYSxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBlYih0aGlzLmEpfSxGKHByLCJWZWN0b3IiLDU4MCksRCg4MDksNTgwLExmZSxxcHQpLEYocHIsIlN0YWNrIiw4MDkpLEQoMjA2LDEsezIwNjoxfSxmMiksbC5JYj1mdW5jdGlvbigpe3JldHVybiBFWnQodGhpcyl9LEYocHIsIlN0cmluZ0pvaW5lciIsMjA2KSxEKDU0NCwxOTkyLHszOjEsODM6MSwxNzE6MSwxNjE6MX0sTFZ0LFludCksbC4kYj1mdW5jdGlvbigpe05DKHRoaXMpfSxsLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3OSh0aGlzKX0sbC56Yz1mdW5jdGlvbihlLG4pe3JldHVybiBfeih0aGlzLGUsbil9LGwuQmM9ZnVuY3Rpb24oZSl7cmV0dXJuIFA5KHRoaXMsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLmM9MCxGKHByLCJUcmVlTWFwIiw1NDQpLEQoMzkwLDEsc2EseTkpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBMaih0aGlzKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBUTSh0aGlzLmEpfSxsLlFiPWZ1bmN0aW9uKCl7QVl0KHRoaXMpfSxGKHByLCJUcmVlTWFwL0VudHJ5SXRlcmF0b3IiLDM5MCksRCg0MzUsNzM5LHp1LHc5KSxsLiRiPWZ1bmN0aW9uKCl7TkModGhpcy5hKX0sRihwciwiVHJlZU1hcC9FbnRyeVNldCIsNDM1KSxEKDQzNiwzODMsezQ4NDoxLDM4MzoxLDQyOjEsNDM2OjF9LFFydCksbC5iPSExO3ZhciB0Nm49RihwciwiVHJlZU1hcC9Ob2RlIiw0MzYpO0QoNjIxLDEse30senQpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iU3RhdGU6IG12PSIrdGhpcy5jKyIgdmFsdWU9Iit0aGlzLmQrIiBkb25lPSIrdGhpcy5hKyIgZm91bmQ9Iit0aGlzLmJ9LGwuYT0hMSxsLmI9ITEsbC5jPSExLEYocHIsIlRyZWVNYXAvU3RhdGUiLDYyMSksRCgyOTcsMjIsVG90LFlSKSxsLkFlPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuQmU9ZnVuY3Rpb24oKXtyZXR1cm4hMX07dmFyIGp1dCxPRXQsUEV0LEZFdCxzVj1qcihwciwiVHJlZU1hcC9TdWJNYXBUeXBlIiwyOTcsSHIsU3NuLGlKZSk7RCgxMTEyLDI5NyxUb3QsTVV0KSxsLkJlPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGpyKHByLCJUcmVlTWFwL1N1Yk1hcFR5cGUvMSIsMTExMixzVixudWxsLG51bGwpLEQoMTExMywyOTcsVG90LHFVdCksbC5BZT1mdW5jdGlvbigpe3JldHVybiEwfSxsLkJlPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGpyKHByLCJUcmVlTWFwL1N1Yk1hcFR5cGUvMiIsMTExMyxzVixudWxsLG51bGwpLEQoMTExNCwyOTcsVG90LERVdCksbC5BZT1mdW5jdGlvbigpe3JldHVybiEwfSxqcihwciwiVHJlZU1hcC9TdWJNYXBUeXBlLzMiLDExMTQsc1YsbnVsbCxudWxsKTt2YXIgUWdlO0QoMjA4LE4xLHszOjEsMjA6MSwyODoxLDE0OjEsMjcxOjEsMjE6MSw4NDoxLDIwODoxfSxCcHQsT3ApLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFdSKHRoaXMpfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiB0RCh0aGlzLGUpfSxsLiRiPWZ1bmN0aW9uKCl7TkModGhpcy5hKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gX250KHRoaXMuYSxlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyB5OShuZXcgdzkobmV3IHkodGhpcy5hKS5hKS5iKSxuZXcgZyhlKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gZm50KHRoaXMsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmN9O3ZhciBlNm49RihwciwiVHJlZVNldCIsMjA4KTtEKDk2NiwxLHt9LFB0KSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGtaZSh0aGlzLmEsZSxuKX0sRihDb3QsIkJpbmFyeU9wZXJhdG9yL2xhbWJkYSQwJFR5cGUiLDk2NiksRCg5NjcsMSx7fSwkdCksbC5DZT1mdW5jdGlvbihlLG4pe3JldHVybiBFWmUodGhpcy5hLGUsbil9LEYoQ290LCJCaW5hcnlPcGVyYXRvci9sYW1iZGEkMSRUeXBlIiw5NjcpLEQoODQ2LDEse30scmUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LEYoQ290LCJGdW5jdGlvbi9sYW1iZGEkMCRUeXBlIiw4NDYpLEQoNDMxLDEsbGksWnQpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuYS5NYihlKX0sRihDb3QsIlByZWRpY2F0ZS9sYW1iZGEkMiRUeXBlIiw0MzEpLEQoNTcyLDEsezU3MjoxfSk7dmFyIFpnZT1GKFBfLCJIYW5kbGVyIiw1NzIpO0QoMjAwNywxLERJKSxsLm5lPWZ1bmN0aW9uKCl7cmV0dXJuIkRVTU1ZIn0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lKCl9O3ZhciBORXQ7RihQXywiTGV2ZWwiLDIwMDcpLEQoMTYyMSwyMDA3LERJLFBlKSxsLm5lPWZ1bmN0aW9uKCl7cmV0dXJuIklORk8ifSxGKFBfLCJMZXZlbC9MZXZlbEluZm8iLDE2MjEpLEQoMTY0MCwxLHt9LGRxdCk7dmFyICR1dDtGKFBfLCJMb2dNYW5hZ2VyIiwxNjQwKSxEKDE3ODAsMSxESSxMWXQpLGwuYj1udWxsLEYoUF8sIkxvZ1JlY29yZCIsMTc4MCksRCg1MTIsMSx7NTEyOjF9LHFydCksbC5lPSExO3ZhciBKZ2U9ITEsdHBlPSExLCQxPSExLGVwZT0hMSxucGU9ITE7RihQXywiTG9nZ2VyIiw1MTIpLEQoODE5LDU3Mix7NTcyOjF9LHRlKSxGKFBfLCJTaW1wbGVDb25zb2xlTG9nSGFuZGxlciIsODE5KSxEKDEzMiwyMix7MzoxLDM1OjEsMjI6MSwxMzI6MX0sX2V0KTt2YXIgQkV0LFVsLEl5LGZsPWpyKElzLCJDb2xsZWN0b3IvQ2hhcmFjdGVyaXN0aWNzIiwxMzIsSHIsVGluLHNKZSkscnBlO0QoNzQ0LDEse30sZ3Z0KSxGKElzLCJDb2xsZWN0b3JJbXBsIiw3NDQpLEQoMTA2MCwxLHt9LE1lKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIExsbih1KGUsMjA2KSx1KG4sMjA2KSl9LEYoSXMsIkNvbGxlY3RvcnMvMTBtZXRob2RyZWYkbWVyZ2UkVHlwZSIsMTA2MCksRCgxMDYxLDEse30sZGUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIEVadCh1KGUsMjA2KSl9LEYoSXMsIkNvbGxlY3RvcnMvMTFtZXRob2RyZWYkdG9TdHJpbmckVHlwZSIsMTA2MSksRCgxMDYyLDEse30sWXQpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIE5uKCksISFhMnQoZSl9LEYoSXMsIkNvbGxlY3RvcnMvMTJtZXRob2RyZWYkdGVzdCRUeXBlIiwxMDYyKSxEKDI1MSwxLHt9LGNlKSxsLk9kPWZ1bmN0aW9uKGUsbil7dShlLDE0KS5GYyhuKX0sRihJcywiQ29sbGVjdG9ycy8yMG1ldGhvZHJlZiRhZGQkVHlwZSIsMjUxKSxEKDI1MywxLHt9LGtlKSxsLkVlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBoZX0sRihJcywiQ29sbGVjdG9ycy8yMW1ldGhvZHJlZiRjdG9yJFR5cGUiLDI1MyksRCgzNDYsMSx7fSxvbiksbC5FZT1mdW5jdGlvbigpe3JldHVybiBuZXcgSHN9LEYoSXMsIkNvbGxlY3RvcnMvMjNtZXRob2RyZWYkY3RvciRUeXBlIiwzNDYpLEQoMzQ3LDEse30sbmkpLGwuT2Q9ZnVuY3Rpb24oZSxuKXtGcyh1KGUsNTMpLG4pfSxGKElzLCJDb2xsZWN0b3JzLzI0bWV0aG9kcmVmJGFkZCRUeXBlIiwzNDcpLEQoMTA1NSwxLHt9LEtzKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIE1WdCh1KGUsMTUpLHUobiwxNCkpfSxGKElzLCJDb2xsZWN0b3JzLzRtZXRob2RyZWYkYWRkQWxsJFR5cGUiLDEwNTUpLEQoMTA1OSwxLHt9LHdzKSxsLk9kPWZ1bmN0aW9uKGUsbil7JDAodShlLDIwNiksdShuLDQ3NSkpfSxGKElzLCJDb2xsZWN0b3JzLzltZXRob2RyZWYkYWRkJFR5cGUiLDEwNTkpLEQoMTA1OCwxLHt9LFVZdCksbC5FZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZjIodGhpcy5hLHRoaXMuYix0aGlzLmMpfSxGKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQxNSRUeXBlIiwxMDU4KSxEKDEwNjMsMSx7fSxmbyksbC5FZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBhMixtMihlLChObigpLCExKSxuZXcgaGUpLG0yKGUsITAsbmV3IGhlKSxlfSxGKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQyMiRUeXBlIiwxMDYzKSxEKDEwNjQsMSx7fSxxdCksbC5FZT1mdW5jdGlvbigpe3JldHVybiBsdChjdChRbiwxKSxEZSwxLDUsW3RoaXMuYV0pfSxGKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQyNSRUeXBlIiwxMDY0KSxEKDEwNjUsMSx7fSxuZSksbC5PZD1mdW5jdGlvbihlLG4pe0llbih0aGlzLmEsdTIoZSkpfSxGKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQyNiRUeXBlIiwxMDY1KSxEKDEwNjYsMSx7fSxHdCksbC5DZT1mdW5jdGlvbihlLG4pe3JldHVybiBpbm4odGhpcy5hLHUyKGUpLHUyKG4pKX0sRihJcywiQ29sbGVjdG9ycy9sYW1iZGEkMjckVHlwZSIsMTA2NiksRCgxMDY3LDEse30sWGkpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUyKGUpWzBdfSxGKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQyOCRUeXBlIiwxMDY3KSxEKDcxMywxLHt9LEVyKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFl3dChlLG4pfSxGKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQ0JFR5cGUiLDcxMyksRCgyNTIsMSx7fSxYbiksbC5DZT1mdW5jdGlvbihlLG4pe3JldHVybiB1WGUodShlLDE0KSx1KG4sMTQpKX0sRihJcywiQ29sbGVjdG9ycy9sYW1iZGEkNDIkVHlwZSIsMjUyKSxEKDM0OCwxLHt9LGRpKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGxYZSh1KGUsNTMpLHUobiw1MykpfSxGKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQ1MCRUeXBlIiwzNDgpLEQoMzQ5LDEse30sRWUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw1Myl9LEYoSXMsIkNvbGxlY3RvcnMvbGFtYmRhJDUxJFR5cGUiLDM0OSksRCgxMDU0LDEse30sZ2UpLGwuT2Q9ZnVuY3Rpb24oZSxuKXtVdW4odGhpcy5hLHUoZSw4Myksbil9LEYoSXMsIkNvbGxlY3RvcnMvbGFtYmRhJDckVHlwZSIsMTA1NCksRCgxMDU2LDEse30sS24pLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4geXVuKHUoZSw4MyksdShuLDgzKSxuZXcgS3MpfSxGKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQ4JFR5cGUiLDEwNTYpLEQoMTA1NywxLHt9LGJlKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1aG4odGhpcy5hLHUoZSw4MykpfSxGKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQ5JFR5cGUiLDEwNTcpLEQoNTM5LDEse30pLGwuSGU9ZnVuY3Rpb24oKXtJOSh0aGlzKX0sbC5kPSExLEYoSXMsIlRlcm1pbmF0YWJsZVN0cmVhbSIsNTM5KSxEKDgxMiw1MzksV3h0LFEydCksbC5IZT1mdW5jdGlvbigpe0k5KHRoaXMpfSxGKElzLCJEb3VibGVTdHJlYW1JbXBsIiw4MTIpLEQoMTc4NCw3MjEsSWgsV1l0KSxsLnllPWZ1bmN0aW9uKGUpe3JldHVybiB3MW4odGhpcyx1KGUsMTgyKSl9LGwuYT1udWxsLEYoSXMsIkRvdWJsZVN0cmVhbUltcGwvMiIsMTc4NCksRCgxNzg1LDEsakksaWUpLGwud2U9ZnVuY3Rpb24oZSl7blFlKHRoaXMuYSxlKX0sRihJcywiRG91YmxlU3RyZWFtSW1wbC8yL2xhbWJkYSQwJFR5cGUiLDE3ODUpLEQoMTc4MiwxLGpJLEZlKSxsLndlPWZ1bmN0aW9uKGUpe2VRZSh0aGlzLmEsZSl9LEYoSXMsIkRvdWJsZVN0cmVhbUltcGwvbGFtYmRhJDAkVHlwZSIsMTc4MiksRCgxNzgzLDEsakksd2UpLGwud2U9ZnVuY3Rpb24oZSl7SWllKHRoaXMuYSxlKX0sRihJcywiRG91YmxlU3RyZWFtSW1wbC9sYW1iZGEkMiRUeXBlIiwxNzgzKSxEKDEzNTgsNzIwLEloLFBKdCksbC55ZT1mdW5jdGlvbihlKXtyZXR1cm4geXNuKHRoaXMsdShlLDE5NikpfSxsLmE9MCxsLmI9MCxsLmM9MCxGKElzLCJJbnRTdHJlYW0vNSIsMTM1OCksRCg3ODcsNTM5LFd4dCxaMnQpLGwuSGU9ZnVuY3Rpb24oKXtJOSh0aGlzKX0sbC5JZT1mdW5jdGlvbigpe3JldHVybiBWcCh0aGlzKSx0aGlzLmF9LEYoSXMsIkludFN0cmVhbUltcGwiLDc4NyksRCg3ODgsNTM5LFd4dCxtYnQpLGwuSGU9ZnVuY3Rpb24oKXtJOSh0aGlzKX0sbC5JZT1mdW5jdGlvbigpe3JldHVybiBWcCh0aGlzKSx5MnQoKSxYZ2V9LEYoSXMsIkludFN0cmVhbUltcGwvRW1wdHkiLDc4OCksRCgxNDYzLDEsT0ksYm4pLGwudWQ9ZnVuY3Rpb24oZSl7SG5lKHRoaXMuYSxlKX0sRihJcywiSW50U3RyZWFtSW1wbC9sYW1iZGEkNCRUeXBlIiwxNDYzKTt2YXIgbjZuPUtpKElzLCJTdHJlYW0iKTtEKDMwLDUzOSx7NTI1OjEsNjcwOjEsODMzOjF9LFRuKSxsLkhlPWZ1bmN0aW9uKCl7STkodGhpcyl9O3ZhciBvNztGKElzLCJTdHJlYW1JbXBsIiwzMCksRCg4NDUsMSx7fSxIZSksbC5sZD1mdW5jdGlvbihlKXtyZXR1cm4gS1l0KGUpfSxGKElzLCJTdHJlYW1JbXBsLzBtZXRob2RyZWYkbGFtYmRhJDIkVHlwZSIsODQ1KSxEKDEwODQsNTQwLEloLGtZdCksbC5zZD1mdW5jdGlvbihlKXtmb3IoO2xvbih0aGlzKTspe2lmKHRoaXMuYS5zZChlKSlyZXR1cm4hMDtJOSh0aGlzLmIpLHRoaXMuYj1udWxsLHRoaXMuYT1udWxsfXJldHVybiExfSxGKElzLCJTdHJlYW1JbXBsLzEiLDEwODQpLEQoMTA4NSwxLFVuLHplKSxsLnRkPWZ1bmN0aW9uKGUpe2Flbih0aGlzLmEsdShlLDgzMykpfSxGKElzLCJTdHJlYW1JbXBsLzEvbGFtYmRhJDAkVHlwZSIsMTA4NSksRCgxMDg2LDEsbGksR2UpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEZzKHRoaXMuYSxlKX0sRihJcywiU3RyZWFtSW1wbC8xbWV0aG9kcmVmJGFkZCRUeXBlIiwxMDg2KSxEKDEwODcsNTQwLEloLFFYdCksbC5zZD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdGhpcy5hfHwobj1uZXcgaGUsdGhpcy5iLmEuTmIobmV3IEVuKG4pKSx3bigpLFpzKG4sdGhpcy5jKSx0aGlzLmE9bmV3IF9uKG4sMTYpKSxrZWUodGhpcy5hLGUpfSxsLmE9bnVsbCxGKElzLCJTdHJlYW1JbXBsLzUiLDEwODcpLEQoMTA4OCwxLFVuLEVuKSxsLnRkPWZ1bmN0aW9uKGUpe2xlKHRoaXMuYSxlKX0sRihJcywiU3RyZWFtSW1wbC81LzJtZXRob2RyZWYkYWRkJFR5cGUiLDEwODgpLEQoNzIyLDU0MCxJaCxObXQpLGwuc2Q9ZnVuY3Rpb24oZSl7Zm9yKHRoaXMuYj0hMTshdGhpcy5iJiZ0aGlzLmMuc2QobmV3IFhWdCh0aGlzLGUpKTspO3JldHVybiB0aGlzLmJ9LGwuYj0hMSxGKElzLCJTdHJlYW1JbXBsL0ZpbHRlclNwbGl0ZXJhdG9yIiw3MjIpLEQoMTA3OSwxLFVuLFhWdCksbC50ZD1mdW5jdGlvbihlKXtybm4odGhpcy5hLHRoaXMuYixlKX0sRihJcywiU3RyZWFtSW1wbC9GaWx0ZXJTcGxpdGVyYXRvci9sYW1iZGEkMCRUeXBlIiwxMDc5KSxEKDEwNzUsNzIxLEloLFVKdCksbC55ZT1mdW5jdGlvbihlKXtyZXR1cm4gVVplKHRoaXMsdShlLDE4MikpfSxGKElzLCJTdHJlYW1JbXBsL01hcFRvRG91YmxlU3BsaXRlcmF0b3IiLDEwNzUpLEQoMTA3OCwxLFVuLFFWdCksbC50ZD1mdW5jdGlvbihlKXtUWGUodGhpcy5hLHRoaXMuYixlKX0sRihJcywiU3RyZWFtSW1wbC9NYXBUb0RvdWJsZVNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUiLDEwNzgpLEQoMTA3NCw3MjAsSWgsV0p0KSxsLnllPWZ1bmN0aW9uKGUpe3JldHVybiBXWmUodGhpcyx1KGUsMTk2KSl9LEYoSXMsIlN0cmVhbUltcGwvTWFwVG9JbnRTcGxpdGVyYXRvciIsMTA3NCksRCgxMDc3LDEsVW4sWlZ0KSxsLnRkPWZ1bmN0aW9uKGUpe0VYZSh0aGlzLmEsdGhpcy5iLGUpfSxGKElzLCJTdHJlYW1JbXBsL01hcFRvSW50U3BsaXRlcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTA3NyksRCg3MTksNTQwLEloLFRtdCksbC5zZD1mdW5jdGlvbihlKXtyZXR1cm4gbVl0KHRoaXMsZSl9LEYoSXMsIlN0cmVhbUltcGwvTWFwVG9PYmpTcGxpdGVyYXRvciIsNzE5KSxEKDEwNzYsMSxVbixKVnQpLGwudGQ9ZnVuY3Rpb24oZSl7Q1hlKHRoaXMuYSx0aGlzLmIsZSl9LEYoSXMsIlN0cmVhbUltcGwvTWFwVG9PYmpTcGxpdGVyYXRvci9sYW1iZGEkMCRUeXBlIiwxMDc2KSxEKDYxOCwxLFVuLFRpKSxsLnRkPWZ1bmN0aW9uKGUpe0F0dCh0aGlzLGUpfSxGKElzLCJTdHJlYW1JbXBsL1ZhbHVlQ29uc3VtZXIiLDYxOCksRCgxMDgwLDEsVW4scG4pLGwudGQ9ZnVuY3Rpb24oZSl7UWIoKX0sRihJcywiU3RyZWFtSW1wbC9sYW1iZGEkMCRUeXBlIiwxMDgwKSxEKDEwODEsMSxVbixFcyksbC50ZD1mdW5jdGlvbihlKXtRYigpfSxGKElzLCJTdHJlYW1JbXBsL2xhbWJkYSQxJFR5cGUiLDEwODEpLEQoMTA4MiwxLHt9LEluKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEVKZSh0aGlzLmEsZSxuKX0sRihJcywiU3RyZWFtSW1wbC9sYW1iZGEkNCRUeXBlIiwxMDgyKSxEKDEwODMsMSxVbixLVnQpLGwudGQ9ZnVuY3Rpb24oZSl7T1plKHRoaXMuYix0aGlzLmEsZSl9LEYoSXMsIlN0cmVhbUltcGwvbGFtYmRhJDUkVHlwZSIsMTA4MyksRCgxMDg5LDEsVW4sWW4pLGwudGQ9ZnVuY3Rpb24oZSl7anVuKHRoaXMuYSx1KGUsMzY1KSl9LEYoSXMsIlRlcm1pbmF0YWJsZVN0cmVhbS9sYW1iZGEkMCRUeXBlIiwxMDg5KSxEKDIwNDEsMSx7fSksRCgxOTE0LDEse30scWEpLEYoImphdmFlbXVsLmludGVybmFsIiwiQ29uc29sZUxvZ2dlciIsMTkxNCksRCgyMDM4LDEse30pO3ZhciByNm49MCxSRXQsakV0PTAsYVY7RCgxNzY4LDEsVW4sTWEpLGwudGQ9ZnVuY3Rpb24oZSl7dShlLDMwOCl9LEYoekUsIkJvd3llcldhdHNvblRyaWFuZ3VsYXRpb24vbGFtYmRhJDAkVHlwZSIsMTc2OCksRCgxNzY5LDEsVW4sU24pLGwudGQ9ZnVuY3Rpb24oZSl7VWEodGhpcy5hLHUoZSwzMDgpLmUpfSxGKHpFLCJCb3d5ZXJXYXRzb25Ucmlhbmd1bGF0aW9uL2xhbWJkYSQxJFR5cGUiLDE3NjkpLEQoMTc3MCwxLFVuLEdzKSxsLnRkPWZ1bmN0aW9uKGUpe3UoZSwxNjgpfSxGKHpFLCJCb3d5ZXJXYXRzb25Ucmlhbmd1bGF0aW9uL2xhbWJkYSQyJFR5cGUiLDE3NzApLEQoMTc2NSwxLE9pLFduKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEpzbih0aGlzLmEsdShlLDE2OCksdShuLDE2OCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoekUsIk5haXZlTWluU1QvbGFtYmRhJDAkVHlwZSIsMTc2NSksRCg0OTksMSx7fSxyciksRih6RSwiTm9kZU1pY3JvTGF5b3V0Iiw0OTkpLEQoMTY4LDEsezE2ODoxfSxEeCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gX3QoZSwxNjgpPyhuPXUoZSwxNjgpLEZjKHRoaXMuYSxuLmEpJiZGYyh0aGlzLmIsbi5iKXx8RmModGhpcy5hLG4uYikmJkZjKHRoaXMuYixuLmEpKTohMX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBVMyh0aGlzLmEpK1UzKHRoaXMuYil9O3ZhciBpNm49Rih6RSwiVEVkZ2UiLDE2OCk7RCgzMDgsMSx7MzA4OjF9LGh4dCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gX3QoZSwzMDgpPyhuPXUoZSwzMDgpLFkkKHRoaXMsbi5hKSYmWSQodGhpcyxuLmIpJiZZJCh0aGlzLG4uYykpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFUzKHRoaXMuYSkrVTModGhpcy5iKStVMyh0aGlzLmMpfSxGKHpFLCJUVHJpYW5nbGUiLDMwOCksRCgyMjEsMSx7MjIxOjF9LG1qKSxGKHpFLCJUcmVlIiwyMjEpLEQoMTI1NCwxLHt9LFJRdCksRihJZmUsIlNjYW5saW5lIiwxMjU0KTt2YXIgaXBlPUtpKElmZSxPZmUpO0QoMTY5MiwxLHt9LF9lZSksRihhMCwiQ0dyYXBoIiwxNjkyKSxEKDMwNywxLHszMDc6MX0sT1F0KSxsLmI9MCxsLmM9MCxsLmQ9MCxsLmc9MCxsLmk9MCxsLms9Q3MsRihhMCwiQ0dyb3VwIiwzMDcpLEQoODE1LDEse30sUnB0KSxGKGEwLCJDR3JvdXAvQ0dyb3VwQnVpbGRlciIsODE1KSxEKDU3LDEsezU3OjF9LHJZdCksbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLmo/QnIodGhpcy5qLktiKHRoaXMpKTooUDAob1YpLG9WLm8rIkAiKyhlPVB3KHRoaXMpPj4+MCxlLnRvU3RyaW5nKDE2KSkpfSxsLmY9MCxsLmk9Q3M7dmFyIG9WPUYoYTAsIkNOb2RlIiw1Nyk7RCg4MTQsMSx7fSxqcHQpLEYoYTAsIkNOb2RlL0NOb2RlQnVpbGRlciIsODE0KTt2YXIgc3BlO0QoMTUyNSwxLHt9LFBvKSxsLk9lPWZ1bmN0aW9uKGUsbil7cmV0dXJuIDB9LGwuUGU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gMH0sRihhMCxGZmUsMTUyNSksRCgxNzkwLDEse30sdnMpLGwuTGU9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dDtmb3IoQz1hcyxzPW5ldyBTKGUuYS5iKTtzLmE8cy5jLmMubGVuZ3RoOyluPXUoSihzKSw1NyksQz1iLk1hdGgubWluKEMsbi5hLmouZC5jK24uYi5hKTtmb3IoRz1uZXcgWmksZD1uZXcgUyhlLmEuYSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMzA3KSxoLms9QyxoLmc9PTAmJmZzKEcsaCxHLmMuYixHLmMpO2Zvcig7Ry5iIT0wOyl7Zm9yKGg9dShHLmI9PTA/bnVsbDooWm4oRy5iIT0wKSxsaChHLEcuYS5hKSksMzA3KSxvPWguai5kLmMsSD1oLmEuYS5lYygpLktjKCk7SC5PYigpOylNPXUoSC5QYigpLDU3KSx0dD1oLmsrTS5iLmEsIXBsbihlLGgsZS5kKXx8TS5kLmM8dHQ/TS5pPXR0Ok0uaT1NLmQuYztmb3Ioby09aC5qLmksaC5iKz1vLGUuZD09KGFvKCksQ2YpfHxlLmQ9PW5nP2guYys9bzpoLmMtPW8saj1oLmEuYS5lYygpLktjKCk7ai5PYigpOylmb3IoTT11KGouUGIoKSw1Nyksaz1NLmMuS2MoKTtrLk9iKCk7KXY9dShrLlBiKCksNTcpLEJwKGUuZCk/Sz1lLmcuT2UoTSx2KTpLPWUuZy5QZShNLHYpLHYuYS5rPWIuTWF0aC5tYXgodi5hLmssTS5pK00uZC5iK0stdi5iLmEpLHNRdChlLHYsZS5kKSYmKHYuYS5rPWIuTWF0aC5tYXgodi5hLmssdi5kLmMtdi5iLmEpKSwtLXYuYS5nLHYuYS5nPT0wJiZyaShHLHYuYSl9Zm9yKHI9bmV3IFMoZS5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDU3KSxuLmQuYz1uLml9LEYoYTAsIkxvbmdlc3RQYXRoQ29tcGFjdGlvbiIsMTc5MCksRCgxNjkwLDEse30sSm9lKSxsLmU9ITE7dmFyIGFwZSxvcGUsY3BlLHp1dD1GKGEwLFJmZSwxNjkwKTtEKDE2OTEsMSxVbix3ciksbC50ZD1mdW5jdGlvbihlKXt3dW4odGhpcy5hLHUoZSw0NikpfSxGKGEwLGpmZSwxNjkxKSxEKDE3OTEsMSx7fSxydSksbC5NZT1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3Iocj1uZXcgUyhlLmEuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNTcpLG4uYy4kYigpO2ZvcihvPW5ldyBTKGUuYS5iKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KEoobyksNTcpLGQ9bmV3IFMoZS5hLmIpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDU3KSxzIT1oJiYocy5hJiZzLmE9PWguYXx8KEJwKGUuZCk/dj1lLmcuUGUocyxoKTp2PWUuZy5PZShzLGgpLChoLmQuYz5zLmQuY3x8cy5kLmM9PWguZC5jJiZzLmQuYjxoLmQuYikmJm5mbihoLmQuZCtoLmQuYSt2LHMuZC5kKSYmSTN0KGguZC5kLHMuZC5kK3MuZC5hK3YpJiZzLmMuRmMoaCkpKX0sRihhMCwiUXVhZHJhdGljQ29uc3RyYWludENhbGN1bGF0aW9uIiwxNzkxKSxEKDUyMiwxLHs1MjI6MX0sSnR0KSxsLmE9ITEsbC5iPSExLGwuYz0hMSxsLmQ9ITEsRihhMCwkZmUsNTIyKSxEKDgwMywxLHt9LHR2dCksbC5NZT1mdW5jdGlvbihlKXt0aGlzLmM9ZSxoSSh0aGlzLG5ldyBwbSl9LEYoYTAsemZlLDgwMyksRCgxNzE4LDEsezY3OToxfSxvUXQpLGwuS2U9ZnVuY3Rpb24oZSl7ZnBuKHRoaXMsdShlLDQ2NCkpfSxGKGEwLHFmZSwxNzE4KSxEKDE3MTksMSxPaSx6cyksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBkcm4odShlLDU3KSx1KG4sNTcpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKGEwLEhmZSwxNzE5KSxEKDQ2NCwxLHs0NjQ6MX0sTGJ0KSxsLmE9ITEsRihhMCxWZmUsNDY0KSxEKDE3MjAsMSxPaSxEdSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBUZG4odShlLDQ2NCksdShuLDQ2NCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoYTAsR2ZlLDE3MjApLEQoMTcyMSwxLHhkLHBtKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsNTcpLCEwfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDU3KSwhMH0sRihhMCwiU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRvci9sYW1iZGEkMSRUeXBlIiwxNzIxKSxEKDQyOCwyMix7MzoxLDM1OjEsMjI6MSw0Mjg6MX0sSWJ0KTt2YXIgJEV0LHF1dCx6RXQ9anIoTG90LCJIaWdoTGV2ZWxTb3J0aW5nQ3JpdGVyaW9uIiw0MjgsSHIsSnJuLGFKZSksdXBlO0QoNDI3LDIyLHszOjEsMzU6MSwyMjoxLDQyNzoxfSxPYnQpO3ZhciBxRXQsSHV0LEhFdD1qcihMb3QsIkxvd0xldmVsU29ydGluZ0NyaXRlcmlvbiIsNDI3LEhyLHRpbixvSmUpLGxwZSwkND1LaShRbywiSUxheW91dE1ldGFEYXRhUHJvdmlkZXIiKTtEKDg1MywxLE9oLFFMKSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxReHQpLE1vdCksIlBvbHlvbWlubyBUcmF2ZXJzYWwgU3RyYXRlZ3kiKSwiVHJhdmVyc2FsIHN0cmF0ZWd5IGZvciB0cnlpbmcgZGlmZmVyZW50IGNhbmRpZGF0ZSBwb3NpdGlvbnMgZm9yIHBvbHlvbWlub2VzLiIpLFhFdCksKFVnKCksdXMpKSxzN3QpLHVuKChRZigpLHFuKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFp4dCksTW90KSwiUG9seW9taW5vIFNlY29uZGFyeSBTb3J0aW5nIENyaXRlcmlvbiIpLCJQb3NzaWJsZSBzZWNvbmRhcnkgc29ydGluZyBjcml0ZXJpYSBmb3IgdGhlIHByb2Nlc3Npbmcgb3JkZXIgb2YgcG9seW9taW5vZXMuIFRoZXkgYXJlIHVzZWQgd2hlbiBwb2x5b21pbm9lcyBhcmUgZXF1YWwgYWNjb3JkaW5nIHRvIHRoZSBwcmltYXJ5IHNvcnRpbmcgY3JpdGVyaW9uIEhpZ2hMZXZlbFNvcnRpbmdDcml0ZXJpb24uIiksWUV0KSx1cyksSEV0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEp4dCksTW90KSwiUG9seW9taW5vIFByaW1hcnkgU29ydGluZyBDcml0ZXJpb24iKSwiUG9zc2libGUgcHJpbWFyeSBzb3J0aW5nIGNyaXRlcmlhIGZvciB0aGUgcHJvY2Vzc2luZyBvcmRlciBvZiBwb2x5b21pbm9lcy4iKSxVRXQpLHVzKSx6RXQpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsdDZ0KSxNb3QpLCJGaWxsIFBvbHlvbWlub2VzIiksIlVzZSB0aGUgUHJvZmlsZSBGaWxsIGFsZ29yaXRobSB0byBmaWxsIHBvbHlvbWlub2VzIHRvIHByZXZlbnQgc21hbGwgcG9seW9taW5vZXMgZnJvbSBiZWluZyBwbGFjZWQgaW5zaWRlIG9mIGJpZyBwb2x5b21pbm9lcyB3aXRoIGxhcmdlIGhvbGVzLiBNaWdodCBpbmNyZWFzZSBwYWNraW5nIGFyZWEuIiksKE5uKCksITApKSxMYSksUnMpLHVuKHFuKSkpKX07dmFyIFZFdCxHRXQsVUV0LFdFdCxZRXQsS0V0LFhFdDtGKExvdCwiUG9seW9taW5vT3B0aW9ucyIsODUzKSxEKDI1MCwyMix7MzoxLDM1OjEsMjI6MSwyNTA6MX0sejMpO3ZhciBRRXQsWkV0LEpFdCx0N3QsZTd0LG43dCxWdXQscjd0LGk3dCxzN3Q9anIoTG90LCJUcmF2ZXJzYWxTdHJhdGVneSIsMjUwLEhyLGRjbixjSmUpLGhwZTtEKDIxMywxLHsyMTM6MX0sdXcpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iTkVkZ2VbaWQ9Iit0aGlzLmIrIiB3PSIrdGhpcy5nKyIgZD0iK3RoaXMuYSsiXSJ9LGwuYT0xLGwuYj0wLGwuYz0wLGwuZj0hMSxsLmc9MDt2YXIgZnBlPUYoRl8sIk5FZGdlIiwyMTMpO0QoMTc2LDEse30sQ2gpLEYoRl8sIk5FZGdlL05FZGdlQnVpbGRlciIsMTc2KSxEKDY1MywxLHt9LGVldCksRihGXywiTkdyYXBoIiw2NTMpLEQoMTIxLDEsezEyMToxfSxWSnQpLGwuYz0tMSxsLmQ9MCxsLmU9MCxsLmk9LTEsbC5qPSExO3ZhciBhN3Q9RihGXywiTk5vZGUiLDEyMSk7RCg3OTUsMSxBZmUsRnB0KSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuTGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IF9uKHRoaXMsMTYpKX0sbC5hZD1mdW5jdGlvbihlKXtyNCh0aGlzLGUpfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBfbih0aGlzLDE2KX0sbC5PYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odGhpcywxNikpfSxsLlZjPWZ1bmN0aW9uKGUsbil7Kyt0aGlzLmIsSG0odGhpcy5hLGUsbil9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIF9qKHRoaXMsZSl9LGwuV2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4rK3RoaXMuYixHeXQodGhpcy5hLGUsbil9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuKyt0aGlzLmIsTHModGhpcy5hLGUpfSxsLiRiPWZ1bmN0aW9uKCl7Kyt0aGlzLmIsdGhpcy5hLmM9TnQoUW4sRGUsMSwwLDUsMSl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFJvKHRoaXMuYSxlLDApIT0tMX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4gTkQodGhpcy5hLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBOZSh0aGlzLmEsZSl9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFJvKHRoaXMuYSxlLDApfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5jLmxlbmd0aD09MH0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBlNihuZXcgUyh0aGlzLmEpKX0sbC5ZYz1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBPcil9LGwuWmM9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4rK3RoaXMuYixGZyh0aGlzLmEsZSl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIE4ydCh0aGlzLGUpfSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuKyt0aGlzLmIsY2godGhpcy5hLGUsbil9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmMubGVuZ3RofSxsLmJkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyBRZCh0aGlzLmEsZSxuKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiBwbnQodGhpcy5hKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gUDEodGhpcy5hLGUpfSxsLmI9MCxGKEZfLCJOTm9kZS9DaGFuZ2VBd2FyZUFycmF5TGlzdCIsNzk1KSxEKDI2OSwxLHt9LFhiKSxGKEZfLCJOTm9kZS9OTm9kZUJ1aWxkZXIiLDI2OSksRCgxNjMwLDEse30sV3UpLGwuYT0hMSxsLmY9d2ksbC5qPTAsRihGXywiTmV0d29ya1NpbXBsZXgiLDE2MzApLEQoMTI5NCwxLFVuLHVyKSxsLnRkPWZ1bmN0aW9uKGUpe1NoZSh0aGlzLmEsdShlLDY4MCksITAsITEpfSxGKFVmZSwiTm9kZUxhYmVsQW5kU2l6ZUNhbGN1bGF0b3IvbGFtYmRhJDAkVHlwZSIsMTI5NCksRCg1NTgsMSx7fSxlciksbC5iPSEwLGwuYz0hMCxsLmQ9ITAsbC5lPSEwLEYoVWZlLCJOb2RlTWFyZ2luQ2FsY3VsYXRvciIsNTU4KSxEKDIxMiwxLHsyMTI6MX0pLGwuaj0hMSxsLms9ITE7dmFyIGRwZT1GKF8yLCJDZWxsIiwyMTIpO0QoMTI0LDIxMix7MTI0OjEsMjEyOjF9LHVZdCksbC5SZT1mdW5jdGlvbigpe3JldHVybiAkaih0aGlzKX0sbC5TZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMubix0aGlzLmEuYStlLmIrZS5jfSxGKF8yLCJBdG9taWNDZWxsIiwxMjQpLEQoMjMyLDIyLHszOjEsMzU6MSwyMjoxLDIzMjoxfSxBZXQpO3ZhciBzYyxldSxhYyxPeT1qcihfMiwiQ29udGFpbmVyQXJlYSIsMjMyLEhyLENpbix1SmUpLGdwZTtEKDMyNiwyMTIsV2ZlKSxGKF8yLCJDb250YWluZXJDZWxsIiwzMjYpLEQoMTQ3MywzMjYsV2ZlLF9pZSksbC5SZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPTAsdGhpcy5lP3RoaXMuYj9lPXRoaXMuYi5iOnRoaXMuYVsxXVsxXSYmKGU9dGhpcy5hWzFdWzFdLlJlKCkpOmU9ZDN0KHRoaXMsUnNlKHRoaXMsITApKSxlPjA/ZSt0aGlzLm4uZCt0aGlzLm4uYTowfSxsLlNlPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbztpZihvPTAsdGhpcy5lKXRoaXMuYj9vPXRoaXMuYi5hOnRoaXMuYVsxXVsxXSYmKG89dGhpcy5hWzFdWzFdLlNlKCkpO2Vsc2UgaWYodGhpcy5nKW89ZDN0KHRoaXMsSXN0KHRoaXMsbnVsbCwhMCkpO2Vsc2UgZm9yKG49KEtmKCksbHQoY3QoT3ksMSksb2UsMjMyLDAsW3NjLGV1LGFjXSkpLHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLG89Yi5NYXRoLm1heChvLGQzdCh0aGlzLElzdCh0aGlzLGUsITApKSk7cmV0dXJuIG8+MD9vK3RoaXMubi5iK3RoaXMubi5jOjB9LGwuVGU9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvO2lmKHRoaXMuZylmb3IoZT1Jc3QodGhpcyxudWxsLCExKSxyPShLZigpLGx0KGN0KE95LDEpLG9lLDIzMiwwLFtzYyxldSxhY10pKSxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxodWUodGhpcyxuLGUpO2Vsc2UgZm9yKHI9KEtmKCksbHQoY3QoT3ksMSksb2UsMjMyLDAsW3NjLGV1LGFjXSkpLHM9MCxvPXIubGVuZ3RoO3M8bzsrK3Mpbj1yW3NdLGU9SXN0KHRoaXMsbiwhMSksaHVlKHRoaXMsbixlKX0sbC5VZT1mdW5jdGlvbigpe3ZhciBlLG4scixzO249dGhpcy5pLGU9dGhpcy5uLHM9UnNlKHRoaXMsITEpLHdtdCh0aGlzLChLZigpLHNjKSxuLmQrZS5kLHMpLHdtdCh0aGlzLGFjLG4uZCtuLmEtZS5hLXNbMl0scykscj1uLmEtZS5kLWUuYSxzWzBdPjAmJihzWzBdKz10aGlzLmQsci09c1swXSksc1syXT4wJiYoc1syXSs9dGhpcy5kLHItPXNbMl0pLHRoaXMuYy5hPWIuTWF0aC5tYXgoMCxyKSx0aGlzLmMuZD1uLmQrZS5kKyh0aGlzLmMuYS1yKS8yLHNbMV09Yi5NYXRoLm1heChzWzFdLHIpLHdtdCh0aGlzLGV1LG4uZCtlLmQrc1swXS0oc1sxXS1yKS8yLHMpfSxsLmI9bnVsbCxsLmQ9MCxsLmU9ITEsbC5mPSExLGwuZz0hMTt2YXIgR3V0PTAsY1Y9MDtGKF8yLCJHcmlkQ29udGFpbmVyQ2VsbCIsMTQ3MyksRCg0NjEsMjIsezM6MSwzNToxLDIyOjEsNDYxOjF9LExldCk7dmFyIGZiLE1kLGtmLHBwZT1qcihfMiwiSG9yaXpvbnRhbExhYmVsQWxpZ25tZW50Iiw0NjEsSHIsX2luLGxKZSksYnBlO0QoMzA2LDIxMix7MjEyOjEsMzA2OjF9LHhRdCxBZWUsdlF0KSxsLlJlPWZ1bmN0aW9uKCl7cmV0dXJuIHNLdCh0aGlzKX0sbC5TZT1mdW5jdGlvbigpe3JldHVybiBWd3QodGhpcyl9LGwuYT0wLGwuYz0hMTt2YXIgczZuPUYoXzIsIkxhYmVsQ2VsbCIsMzA2KTtEKDI0NCwzMjYsezIxMjoxLDMyNjoxLDI0NDoxfSxhXyksbC5SZT1mdW5jdGlvbigpe3JldHVybiBkSSh0aGlzKX0sbC5TZT1mdW5jdGlvbigpe3JldHVybiBnSSh0aGlzKX0sbC5UZT1mdW5jdGlvbigpe0VhdCh0aGlzKX0sbC5VZT1mdW5jdGlvbigpe1RhdCh0aGlzKX0sbC5iPTAsbC5jPTAsbC5kPSExLEYoXzIsIlN0cmlwQ29udGFpbmVyQ2VsbCIsMjQ0KSxEKDE2MjYsMSxsaSx0aCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gRUtlKHUoZSwyMTIpKX0sRihfMiwiU3RyaXBDb250YWluZXJDZWxsL2xhbWJkYSQwJFR5cGUiLDE2MjYpLEQoMTYyNywxLHt9LEZhKSxsLkZlPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMjEyKS5TZSgpfSxGKF8yLCJTdHJpcENvbnRhaW5lckNlbGwvbGFtYmRhJDEkVHlwZSIsMTYyNyksRCgxNjI4LDEsbGksTWwpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFRLZSh1KGUsMjEyKSl9LEYoXzIsIlN0cmlwQ29udGFpbmVyQ2VsbC9sYW1iZGEkMiRUeXBlIiwxNjI4KSxEKDE2MjksMSx7fSxoYSksbC5GZT1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDIxMikuUmUoKX0sRihfMiwiU3RyaXBDb250YWluZXJDZWxsL2xhbWJkYSQzJFR5cGUiLDE2MjkpLEQoNDYyLDIyLHszOjEsMzU6MSwyMjoxLDQ2MjoxfSxNZXQpO3ZhciBFZixkYixuMSx3cGU9anIoXzIsIlZlcnRpY2FsTGFiZWxBbGlnbm1lbnQiLDQ2MixIcixTaW4saEplKSx2cGU7RCg3ODksMSx7fSxTeHQpLGwuYz0wLGwuZD0wLGwuaz0wLGwucz0wLGwudD0wLGwudj0hMSxsLnc9MCxsLkQ9ITEsRihZcSwiTm9kZUNvbnRleHQiLDc4OSksRCgxNDcxLDEsT2ksYmMpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4geFV0KHUoZSw2MSksdShuLDYxKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihZcSwiTm9kZUNvbnRleHQvMG1ldGhvZHJlZiRjb21wYXJlUG9ydFNpZGVzJFR5cGUiLDE0NzEpLEQoMTQ3MiwxLE9pLENjKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFEwbih1KGUsMTExKSx1KG4sMTExKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihZcSwiTm9kZUNvbnRleHQvMW1ldGhvZHJlZiRjb21wYXJlUG9ydENvbnRleHRzJFR5cGUiLDE0NzIpLEQoMTU5LDIyLHszOjEsMzU6MSwyMjoxLDE1OToxfSxoaCk7dmFyIG1wZSx5cGUseHBlLGtwZSxFcGUsVHBlLENwZSxfcGUsU3BlLEFwZSxMcGUsTXBlLERwZSxJcGUsT3BlLFBwZSxGcGUsTnBlLEJwZSxScGUsanBlLFV1dCwkcGU9anIoWXEsIk5vZGVMYWJlbExvY2F0aW9uIiwxNTksSHIsbHN0LGZKZSksenBlO0QoMTExLDEsezExMToxfSx0Y2UpLGwuYT0hMSxGKFlxLCJQb3J0Q29udGV4dCIsMTExKSxEKDE0NzYsMSxVbixwYSksbC50ZD1mdW5jdGlvbihlKXskSHQodShlLDMwNikpfSxGKHpJLFlmZSwxNDc2KSxEKDE0NzcsMSxsaSxEYSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4hIXUoZSwxMTEpLmN9LEYoekksS2ZlLDE0NzcpLEQoMTQ3OCwxLFVuLEhhKSxsLnRkPWZ1bmN0aW9uKGUpeyRIdCh1KGUsMTExKS5jKX0sRih6SSwiTGFiZWxQbGFjZXIvbGFtYmRhJDIkVHlwZSIsMTQ3OCk7dmFyIG83dDtEKDE0NzUsMSxVbixfYyksbC50ZD1mdW5jdGlvbihlKXskbSgpLHJLZSh1KGUsMTExKSl9LEYoekksIk5vZGVMYWJlbEFuZFNpemVVdGlsaXRpZXMvbGFtYmRhJDAkVHlwZSIsMTQ3NSksRCg3OTAsMSxVbixFd3QpLGwudGQ9ZnVuY3Rpb24oZSl7cFhlKHRoaXMuYix0aGlzLmMsdGhpcy5hLHUoZSwxODEpKX0sbC5hPSExLGwuYz0hMSxGKHpJLCJOb2RlTGFiZWxDZWxsQ3JlYXRvci9sYW1iZGEkMCRUeXBlIiw3OTApLEQoMTQ3NCwxLFVuLHZuKSxsLnRkPWZ1bmN0aW9uKGUpe2FLZSh0aGlzLmEsdShlLDE4MSkpfSxGKHpJLCJQb3J0Q29udGV4dENyZWF0b3IvbGFtYmRhJDAkVHlwZSIsMTQ3NCk7dmFyIHVWO0QoMTgyOSwxLHt9LGx3KSxGKEhFLCJHcmVlZHlSZWN0YW5nbGVTdHJpcE92ZXJsYXBSZW1vdmVyIiwxODI5KSxEKDE4MzAsMSxPaSxEbCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBXUWUodShlLDIyMiksdShuLDIyMikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoSEUsIkdyZWVkeVJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIvMG1ldGhvZHJlZiRjb21wYXJlQnlZQ29vcmRpbmF0ZSRUeXBlIiwxODMwKSxEKDE3ODYsMSx7fSx2cXQpLGwuYT01LGwuZT0wLEYoSEUsIlJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIiLDE3ODYpLEQoMTc4NywxLE9pLGVkKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFlRZSh1KGUsMjIyKSx1KG4sMjIyKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihIRSwiUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci8wbWV0aG9kcmVmJGNvbXBhcmVMZWZ0UmVjdGFuZ2xlQm9yZGVycyRUeXBlIiwxNzg3KSxEKDE3ODksMSxPaSxqZCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiB2bm4odShlLDIyMiksdShuLDIyMikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoSEUsIlJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIvMW1ldGhvZHJlZiRjb21wYXJlUmlnaHRSZWN0YW5nbGVCb3JkZXJzJFR5cGUiLDE3ODkpLEQoNDA2LDIyLHszOjEsMzU6MSwyMjoxLDQwNjoxfSxaUik7dmFyIGxPLFd1dCxZdXQsaE8scXBlPWpyKEhFLCJSZWN0YW5nbGVTdHJpcE92ZXJsYXBSZW1vdmVyL092ZXJsYXBSZW1vdmFsRGlyZWN0aW9uIiw0MDYsSHIsX3NuLGRKZSksSHBlO0QoMjIyLDEsezIyMjoxfSxIbnQpLEYoSEUsIlJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIvUmVjdGFuZ2xlTm9kZSIsMjIyKSxEKDE3ODgsMSxVbixnciksbC50ZD1mdW5jdGlvbihlKXtrMW4odGhpcy5hLHUoZSwyMjIpKX0sRihIRSwiUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci9sYW1iZGEkMSRUeXBlIiwxNzg4KSxEKDEzMDQsMSxPaSxuZCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBBM24odShlLDE2NyksdShuLDE2NykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoa2QsIlBvbHlvbWlub0NvbXBhY3Rvci9Db3JuZXJDYXNlc0dyZWF0ZXJUaGFuUmVzdENvbXBhcmF0b3IiLDEzMDQpLEQoMTMwNywxLHt9LCRkKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzI0KS5hfSxGKGtkLCJQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQwJFR5cGUiLDEzMDcpLEQoMTMwOCwxLGxpLEEwKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzIzKS5hfSxGKGtkLCJQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQxJFR5cGUiLDEzMDgpLEQoMTMwOSwxLGxpLEJpKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzIzKS5hfSxGKGtkLCJQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQyJFR5cGUiLDEzMDkpLEQoMTMwMiwxLE9pLGNuKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGNtbih1KGUsMTY3KSx1KG4sMTY3KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihrZCwiUG9seW9taW5vQ29tcGFjdG9yL01pbk51bU9mRXh0ZW5zaW9uRGlyZWN0aW9uc0NvbXBhcmF0b3IiLDEzMDIpLEQoMTMwNSwxLHt9LGVoKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzI0KS5hfSxGKGtkLCJQb2x5b21pbm9Db21wYWN0b3IvTWluTnVtT2ZFeHRlbnNpb25EaXJlY3Rpb25zQ29tcGFyYXRvci9sYW1iZGEkMCRUeXBlIiwxMzA1KSxEKDc2NywxLE9pLGtyKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGx1bih1KGUsMTY3KSx1KG4sMTY3KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihrZCwiUG9seW9taW5vQ29tcGFjdG9yL01pbk51bU9mRXh0ZW5zaW9uc0NvbXBhcmF0b3IiLDc2NyksRCgxMzAwLDEsT2ksRWkpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbWNuKHUoZSwzMjEpLHUobiwzMjEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKGtkLCJQb2x5b21pbm9Db21wYWN0b3IvTWluUGVyaW1ldGVyQ29tcGFyYXRvciIsMTMwMCksRCgxMzAxLDEsT2ksSm8pLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gS2ZuKHUoZSwzMjEpLHUobiwzMjEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKGtkLCJQb2x5b21pbm9Db21wYWN0b3IvTWluUGVyaW1ldGVyQ29tcGFyYXRvcldpdGhTaGFwZSIsMTMwMSksRCgxMzAzLDEsT2ksd2MpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRG1uKHUoZSwxNjcpLHUobiwxNjcpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKGtkLCJQb2x5b21pbm9Db21wYWN0b3IvU2luZ2xlRXh0ZW5zaW9uU2lkZUdyZWF0ZXJUaGFuUmVzdENvbXBhcmF0b3IiLDEzMDMpLEQoMTMwNiwxLHt9LHJmKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzI0KS5hfSxGKGtkLCJQb2x5b21pbm9Db21wYWN0b3IvU2luZ2xlRXh0ZW5zaW9uU2lkZUdyZWF0ZXJUaGFuUmVzdENvbXBhcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTMwNiksRCg3NzcsMSx7fSxNYnQpLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4ga3NuKHRoaXMsdShlLDQ2KSx1KG4sMTY3KSl9LEYoa2QsIlN1Y2Nlc3NvckNvbWJpbmF0aW9uIiw3NzcpLEQoNjQ0LDEse30sT2MpLGwuQ2U9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gaGJuKChyPXUoZSw0NiksdShuLDE2NykscikpfSxGKGtkLCJTdWNjZXNzb3JKaXR0ZXIiLDY0NCksRCg2NDMsMSx7fSxzZiksbC5DZT1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiBKd24oKHI9dShlLDQ2KSx1KG4sMTY3KSxyKSl9LEYoa2QsIlN1Y2Nlc3NvckxpbmVCeUxpbmUiLDY0MyksRCg1NjgsMSx7fSxhZiksbC5DZT1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiBmMm4oKHI9dShlLDQ2KSx1KG4sMTY3KSxyKSl9LEYoa2QsIlN1Y2Nlc3Nvck1hbmhhdHRhbiIsNTY4KSxEKDEzNTYsMSx7fSxRaSksbC5DZT1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiBFd24oKHI9dShlLDQ2KSx1KG4sMTY3KSxyKSl9LEYoa2QsIlN1Y2Nlc3Nvck1heE5vcm1XaW5kaW5nSW5NYXRoUG9zU2Vuc2UiLDEzNTYpLEQoNDAwLDEse30sZnIpLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdnZ0KHRoaXMsZSxuKX0sbC5jPSExLGwuZD0hMSxsLmU9ITEsbC5mPSExLEYoa2QsIlN1Y2Nlc3NvclF1YWRyYW50c0dlbmVyaWMiLDQwMCksRCgxMzU3LDEse30sVHMpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzMjQpLmF9LEYoa2QsIlN1Y2Nlc3NvclF1YWRyYW50c0dlbmVyaWMvbGFtYmRhJDAkVHlwZSIsMTM1NyksRCgzMjMsMjIsezM6MSwzNToxLDIyOjEsMzIzOjF9LFFSKSxsLmE9ITE7dmFyIGZPLGRPLGdPLHBPLFZwZT1qcihYcSxpNnQsMzIzLEhyLExzbixnSmUpLEdwZTtEKDEyOTgsMSx7fSksbC5JYj1mdW5jdGlvbigpe3ZhciBlLG4scixzLG8saDtmb3Iocj0iICIsZT1wZSgwKSxvPTA7bzx0aGlzLm87bysrKXIrPSIiK2UuYSxlPXBlKFpXdChlLmEpKTtmb3Iocis9YApgLGU9cGUoMCksaD0wO2g8dGhpcy5wO2grKyl7Zm9yKHIrPSIiK2UuYSxlPXBlKFpXdChlLmEpKSxzPTA7czx0aGlzLm87cysrKW49d2l0KHRoaXMscyxoKSx5YyhuLDApPT0wP3IrPSJfIjp5YyhuLDEpPT0wP3IrPSJYIjpyKz0iMCI7cis9YApgfXJldHVybiBQbChyLDAsci5sZW5ndGgtMSl9LGwubz0wLGwucD0wLEYoWHEsIlR3b0JpdEdyaWQiLDEyOTgpLEQoMzIxLDEyOTgsezMyMToxfSxDM3QpLGwuaj0wLGwuaz0wLEYoWHEsIlBsYW5hckdyaWQiLDMyMSksRCgxNjcsMzIxLHszMjE6MSwxNjc6MX0pLGwuZz0wLGwuaT0wLEYoWHEsIlBvbHlvbWlubyIsMTY3KTt2YXIgYTZuPUtpKHFJLFFmZSk7RCgxMzQsMSxzNnQsa2EpLGwuWWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gekQodGhpcyxlLG4pfSxsLlZlPWZ1bmN0aW9uKCl7cmV0dXJuIHlLdCh0aGlzKX0sbC5XZT1mdW5jdGlvbihlKXtyZXR1cm4gUSh0aGlzLGUpfSxsLlhlPWZ1bmN0aW9uKGUpe3JldHVybiBVcyh0aGlzLGUpfSxGKHFJLCJNYXBQcm9wZXJ0eUhvbGRlciIsMTM0KSxEKDEyOTksMTM0LHM2dCxKY2UpLEYoWHEsIlBvbHlvbWlub2VzIiwxMjk5KTt2YXIgVXBlPSExLGhTLGM3dDtEKDE3NjYsMSxVbix4aSksbC50ZD1mdW5jdGlvbihlKXtRbGUodShlLDIyMSkpfSxGKGs2LCJEZXB0aEZpcnN0Q29tcGFjdGlvbi8wbWV0aG9kcmVmJGNvbXBhY3RUcmVlJFR5cGUiLDE3NjYpLEQoODEwLDEsVW4sSnIpLGwudGQ9ZnVuY3Rpb24oZSl7SG5uKHRoaXMuYSx1KGUsMjIxKSl9LEYoazYsIkRlcHRoRmlyc3RDb21wYWN0aW9uL2xhbWJkYSQxJFR5cGUiLDgxMCksRCgxNzY3LDEsVW4sT1l0KSxsLnRkPWZ1bmN0aW9uKGUpe2Rmbih0aGlzLmEsdGhpcy5iLHRoaXMuYyx1KGUsMjIxKSl9LEYoazYsIkRlcHRoRmlyc3RDb21wYWN0aW9uL2xhbWJkYSQyJFR5cGUiLDE3NjcpO3ZhciBmUyx1N3Q7RCg2NSwxLHs2NToxfSwkUXQpLEYoazYsIk5vZGUiLDY1KSxEKDEyNTAsMSx7fSx6VXQpLEYoazYsIlNjYW5saW5lT3ZlcmxhcENoZWNrIiwxMjUwKSxEKDEyNTEsMSx7Njc5OjF9LGFRdCksbC5LZT1mdW5jdGlvbihlKXtfWmUodGhpcyx1KGUsNDQwKSl9LEYoazYsIlNjYW5saW5lT3ZlcmxhcENoZWNrL092ZXJsYXBzU2NhbmxpbmVIYW5kbGVyIiwxMjUxKSxEKDEyNTIsMSxPaSxZYyksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBLbG4odShlLDY1KSx1KG4sNjUpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKGs2LCJTY2FubGluZU92ZXJsYXBDaGVjay9PdmVybGFwc1NjYW5saW5lSGFuZGxlci9sYW1iZGEkMCRUeXBlIiwxMjUyKSxEKDQ0MCwxLHs0NDA6MX0sRGJ0KSxsLmE9ITEsRihrNiwiU2NhbmxpbmVPdmVybGFwQ2hlY2svVGltZXN0YW1wIiw0NDApLEQoMTI1MywxLE9pLENlKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIENkbih1KGUsNDQwKSx1KG4sNDQwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihrNiwiU2NhbmxpbmVPdmVybGFwQ2hlY2svbGFtYmRhJDAkVHlwZSIsMTI1MyksRCg1NTAsMSx7fSx2cCksRihaZmUsIlNWR0ltYWdlIiw1NTApLEQoMzI0LDEsezMyNDoxfSxUd3QpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iKCIrdGhpcy5hK1lhK3RoaXMuYitZYSt0aGlzLmMrIikifSxGKFpmZSwiVW5pcXVlVHJpcGxlIiwzMjQpLEQoMjA5LDEsUzIpLEYoTDQsIkFic3RyYWN0TGF5b3V0UHJvdmlkZXIiLDIwOSksRCgxMTMyLDIwOSxTMixCZSksbC5aZT1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoO3N3aXRjaCh2cihuLEpmZSwxKSx0aGlzLmE9WHQoeWUocWUoZSwob18oKSxwN3QpKSkpLG8yKGUsWHV0KSYmKG89QnIocWUoZSxYdXQpKSxyPWJhdChLOCgpLG8pLHImJihzPXUoeHJ0KHIuZiksMjA5KSxzLlplKGUsUmMobiwxKSkpKSxoPW5ldyBuSnQodGhpcy5hKSx0aGlzLmI9ZzVuKGgsZSksdShxZShlLChSaXQoKSxoN3QpKSw0ODEpLmcpe2Nhc2UgMDpNYm4obmV3IEJmLHRoaXMuYiksd28oZSxmVixRKHRoaXMuYixmVikpO2JyZWFrO2RlZmF1bHQ6R2QoKX1rNW4oaCksd28oZSxkN3QsdGhpcy5iKSxvcihuKX0sbC5hPTAsRih0MWUsIkRpc0NvTGF5b3V0UHJvdmlkZXIiLDExMzIpLEQoMTI0NCwxLHt9LEJmKSxsLmM9ITEsbC5lPTAsbC5mPTAsRih0MWUsIkRpc0NvUG9seW9taW5vQ29tcGFjdG9yIiwxMjQ0KSxEKDU2MSwxLHs1NjE6MX0sQ0t0KSxsLmI9ITAsRihacSwiRENDb21wb25lbnQiLDU2MSksRCgzOTQsMjIsezM6MSwzNToxLDIyOjEsMzk0OjF9LFhSKSxsLmE9ITE7dmFyIGxWLGJPLGhWLHdPLFdwZT1qcihacSwiRENEaXJlY3Rpb24iLDM5NCxIcixBc24scEplKSxZcGU7RCgyNjYsMTM0LHszOjEsMjY2OjEsOTQ6MSwxMzQ6MX0sbmF0KSxGKFpxLCJEQ0VsZW1lbnQiLDI2NiksRCgzOTUsMSx7Mzk1OjF9LEszdCksbC5jPTAsRihacSwiRENFeHRlbnNpb24iLDM5NSksRCg3NTUsMTM0LHM2dCxrSHQpLEYoWnEsIkRDR3JhcGgiLDc1NSksRCg0ODEsMjIsezM6MSwzNToxLDIyOjEsNDgxOjF9LF9XdCk7dmFyIEt1dCxsN3Q9anIoUm90LGE2dCw0ODEsSHIsaXJuLGJKZSksS3BlO0QoODU0LDEsT2gscUopLGwuUWU9ZnVuY3Rpb24oZSl7YW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLG82dCksZTFlKSwiQ29ubmVjdGVkIENvbXBvbmVudHMgQ29tcGFjdGlvbiBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3IgcGFja2luZyBkaWZmZXJlbnQgY29ubmVjdGVkIGNvbXBvbmVudHMgaW4gb3JkZXIgdG8gc2F2ZSBzcGFjZSBhbmQgZW5oYW5jZSByZWFkYWJpbGl0eSBvZiBhIGdyYXBoLiIpLGY3dCksKFVnKCksdXMpKSxsN3QpLHVuKChRZigpLHFuKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLGM2dCksZTFlKSwiQ29ubmVjdGVkIENvbXBvbmVudHMgTGF5b3V0IEFsZ29yaXRobSIpLCJBIGxheW91dCBhbGdvcml0aG0gdGhhdCBpcyB0byBiZSBhcHBsaWVkIHRvIGVhY2ggY29ubmVjdGVkIGNvbXBvbmVudCBiZWZvcmUgdGhlIGNvbXBvbmVudHMgdGhlbXNlbHZlcyBhcmUgY29tcGFjdGVkLiBJZiB1bnNwZWNpZmllZCwgdGhlIHBvc2l0aW9ucyBvZiB0aGUgY29tcG9uZW50cycgbm9kZXMgYXJlIG5vdCBhbHRlcmVkLiIpLEk3KSxBZSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSx1NnQpLCJkZWJ1ZyIpLCJEQ0dyYXBoIiksIkFjY2VzcyB0byB0aGUgRENHcmFwaCBpcyBpbnRlbmRlZCBmb3IgdGhlIGRlYnVnIHZpZXcsIiksVjEpLFFuKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLGw2dCksImRlYnVnIiksIkxpc3Qgb2YgUG9seW9taW5vZXMiKSwiQWNjZXNzIHRvIHRoZSBwb2x5b21pbm9lcyBpcyBpbnRlbmRlZCBmb3IgdGhlIGRlYnVnIHZpZXcsIiksVjEpLFFuKSx1bihxbikpKSksamxlKChuZXcgJEIsZSkpfTt2YXIgWHBlLGg3dCxmN3QsUXBlLFpwZTtGKFJvdCwiRGlzQ29NZXRhRGF0YVByb3ZpZGVyIiw4NTQpLEQoOTk4LDEsT2gsJEIpLGwuUWU9ZnVuY3Rpb24oZSl7amxlKGUpfTt2YXIgSnBlLFh1dCx0YmUsZDd0LGZWLFF1dCxnN3QsZWJlLG5iZSxyYmUsaWJlLHA3dDtGKFJvdCwiRGlzQ29PcHRpb25zIiw5OTgpLEQoOTk5LDEse30seWcpLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgQmUsZX0sbC5fZT1mdW5jdGlvbihlKXt9LEYoUm90LCJEaXNDb09wdGlvbnMvRGlzY29GYWN0b3J5Iiw5OTkpLEQoNTYyLDE2Nyx7MzIxOjEsMTY3OjEsNTYyOjF9LE5jZSksbC5hPTAsbC5iPTAsbC5jPTAsbC5kPTAsRigib3JnLmVjbGlwc2UuZWxrLmFsZy5kaXNjby5zdHJ1Y3R1cmVzIiwiRENQb2x5b21pbm8iLDU2Mik7dmFyIFp1dCxKdXQsZFY7RCgxMjY4LDEsbGksYm0pLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGEydChlKX0sRihNNCwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDEyNjgpLEQoMTI2OSwxLHt9LEVrKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBVeCgpLGUwKHUoZSw3OSkpfSxGKE00LCJFbGtHcmFwaENvbXBvbmVudHNQcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTI2OSksRCgxMjcwLDEsbGksRTMpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHBlbih1KGUsNzkpKX0sRihNNCwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUiLDEyNzApLEQoMTI3MSwxLHt9LElsKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBVeCgpLHRiKHUoZSw3OSkpfSxGKE00LCJFbGtHcmFwaENvbXBvbmVudHNQcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTI3MSksRCgxMjcyLDEsbGksTDApLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGJlbih1KGUsNzkpKX0sRihNNCwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQ0JFR5cGUiLDEyNzIpLEQoMTI3MywxLGxpLHZpKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBhaW4odGhpcy5hLHUoZSw3OSkpfSxGKE00LCJFbGtHcmFwaENvbXBvbmVudHNQcm9jZXNzb3IvbGFtYmRhJDUkVHlwZSIsMTI3MyksRCgxMjc0LDEse30sWHMpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFRubih0aGlzLmEsdShlLDc5KSl9LEYoTTQsIkVsa0dyYXBoQ29tcG9uZW50c1Byb2Nlc3Nvci9sYW1iZGEkNiRUeXBlIiwxMjc0KSxEKDEyNDEsMSx7fSxuSnQpLGwuYT0wLEYoTTQsIkVsa0dyYXBoVHJhbnNmb3JtZXIiLDEyNDEpLEQoMTI0MiwxLHt9LGh3KSxsLk9kPWZ1bmN0aW9uKGUsbil7cGJuKHRoaXMsdShlLDE2MCksdShuLDI2NikpfSxGKE00LCJFbGtHcmFwaFRyYW5zZm9ybWVyL09mZnNldEFwcGxpZXIiLDEyNDIpLEQoMTI0MywxLFVuLEVhKSxsLnRkPWZ1bmN0aW9uKGUpeyRRZSh0aGlzLHUoZSw4KSl9LEYoTTQsIkVsa0dyYXBoVHJhbnNmb3JtZXIvT2Zmc2V0QXBwbGllci9PZmZTZXRUb0NoYWluQXBwbGllciIsMTI0MyksRCg3NTMsMSx7fSxINSksRihmNnQsZDZ0LDc1MyksRCgxMjMyLDEsT2ksSGIpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZWJuKHUoZSwyMzEpLHUobiwyMzEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKGY2dCxuMWUsMTIzMiksRCg3NDAsMjA5LFMyLE5wdCksbC5aZT1mdW5jdGlvbihlLG4pe2pjZSh0aGlzLGUsbil9LEYoZjZ0LCJGb3JjZUxheW91dFByb3ZpZGVyIiw3NDApLEQoMzU3LDEzNCx7MzoxLDM1NzoxLDk0OjEsMTM0OjF9KSxGKEhJLCJGUGFydGljbGUiLDM1NyksRCg1NTksMzU3LHszOjEsNTU5OjEsMzU3OjEsOTQ6MSwxMzQ6MX0sYVh0KSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuYT8oZT1Sbyh0aGlzLmEuYSx0aGlzLDApLGU+PTA/ImIiK2UrIlsiK3pydCh0aGlzLmEpKyJdIjoiYlsiK3pydCh0aGlzLmEpKyJdIik6ImJfIitQdyh0aGlzKX0sRihISSwiRkJlbmRwb2ludCIsNTU5KSxEKDI4MiwxMzQsezM6MSwyODI6MSw5NDoxLDEzNDoxfSxlWXQpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4genJ0KHRoaXMpfSxGKEhJLCJGRWRnZSIsMjgyKSxEKDIzMSwxMzQsezM6MSwyMzE6MSw5NDoxLDEzNDoxfSxCJCk7dmFyIG82bj1GKEhJLCJGR3JhcGgiLDIzMSk7RCg0NDcsMzU3LHszOjEsNDQ3OjEsMzU3OjEsOTQ6MSwxMzQ6MX0saUp0KSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYj09bnVsbHx8dGhpcy5iLmxlbmd0aD09MD8ibFsiK3pydCh0aGlzLmEpKyJdIjoibF8iK3RoaXMuYn0sRihISSwiRkxhYmVsIiw0NDcpLEQoMTQ0LDM1Nyx7MzoxLDE0NDoxLDM1NzoxLDk0OjEsMTM0OjF9LGdYdCksbC5JYj1mdW5jdGlvbigpe3JldHVybiBLdnQodGhpcyl9LGwuYj0wLEYoSEksIkZOb2RlIiwxNDQpLEQoMjAwMywxLHt9KSxsLmJmPWZ1bmN0aW9uKGUpe2F4dCh0aGlzLGUpfSxsLmNmPWZ1bmN0aW9uKCl7QnNlKHRoaXMpfSxsLmQ9MCxGKGc2dCwiQWJzdHJhY3RGb3JjZU1vZGVsIiwyMDAzKSxEKDYzMSwyMDAzLHs2MzE6MX0sV25lKSxsLmFmPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZDtyZXR1cm4gT29lKHRoaXMuZixlLG4pLG89aWEobmMobi5kKSxlLmQpLGQ9Yi5NYXRoLnNxcnQoby5hKm8uYStvLmIqby5iKSxzPWIuTWF0aC5tYXgoMCxkLUQ5KGUuZSkvMi1EOShuLmUpLzIpLHI9RXJlKHRoaXMuZSxlLG4pLHI+MD9oPS1wbm4ocyx0aGlzLmMpKnI6aD1vWmUocyx0aGlzLmIpKnUoUShlLChKZigpLGM3KSksMTkpLmEsZmQobyxoL2QpLG99LGwuYmY9ZnVuY3Rpb24oZSl7YXh0KHRoaXMsZSksdGhpcy5hPXUoUShlLChKZigpLHBWKSksMTkpLmEsdGhpcy5jPVh0KHllKFEoZSxiVikpKSx0aGlzLmI9WHQoeWUoUShlLGVsdCkpKX0sbC5kZj1mdW5jdGlvbihlKXtyZXR1cm4gZTx0aGlzLmF9LGwuYT0wLGwuYj0wLGwuYz0wLEYoZzZ0LCJFYWRlc01vZGVsIiw2MzEpLEQoNjMyLDIwMDMsezYzMjoxfSxZWXQpLGwuYWY9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkO3JldHVybiBPb2UodGhpcy5mLGUsbiksbz1pYShuYyhuLmQpLGUuZCksZD1iLk1hdGguc3FydChvLmEqby5hK28uYipvLmIpLHM9Yi5NYXRoLm1heCgwLGQtRDkoZS5lKS8yLUQ5KG4uZSkvMiksaD1hWmUocyx0aGlzLmEpKnUoUShlLChKZigpLGM3KSksMTkpLmEscj1FcmUodGhpcy5lLGUsbikscj4wJiYoaC09bUtlKHMsdGhpcy5hKSpyKSxmZChvLGgqdGhpcy5iL2QpLG99LGwuYmY9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHY7Zm9yKGF4dCh0aGlzLGUpLHRoaXMuYj1YdCh5ZShRKGUsKEpmKCksbmx0KSkpKSx0aGlzLmM9dGhpcy5iL3UoUShlLHBWKSwxOSkuYSxzPWUuZS5jLmxlbmd0aCxoPTAsbz0wLHY9bmV3IFMoZS5lKTt2LmE8di5jLmMubGVuZ3RoOylkPXUoSih2KSwxNDQpLGgrPWQuZS5hLG8rPWQuZS5iO249aCpvLHI9WHQoeWUoUShlLGJWKSkpKkIxLHRoaXMuYT1iLk1hdGguc3FydChuLygyKnMpKSpyfSxsLmNmPWZ1bmN0aW9uKCl7QnNlKHRoaXMpLHRoaXMuYi09dGhpcy5jfSxsLmRmPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmI+MH0sbC5hPTAsbC5iPTAsbC5jPTAsRihnNnQsIkZydWNodGVybWFuUmVpbmdvbGRNb2RlbCIsNjMyKSxEKDg0OSwxLE9oLEhKKSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxKcSksIiIpLCJGb3JjZSBNb2RlbCIpLCJEZXRlcm1pbmVzIHRoZSBtb2RlbCBmb3IgZm9yY2UgY2FsY3VsYXRpb24uIiksYjd0KSwoVWcoKSx1cykpLHc3dCksdW4oKFFmKCkscW4pKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUscDZ0KSwiIiksIkl0ZXJhdGlvbnMiKSwiVGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9uIHRoZSBmb3JjZSBtb2RlbC4iKSxwZSgzMDApKSxnYyksamEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsYjZ0KSwiIiksIlJlcHVsc2l2ZSBQb3dlciIpLCJEZXRlcm1pbmVzIGhvdyBtYW55IGJlbmQgcG9pbnRzIGFyZSBhZGRlZCB0byB0aGUgZWRnZTsgc3VjaCBiZW5kIHBvaW50cyBhcmUgcmVnYXJkZWQgYXMgcmVwZWxsaW5nIHBhcnRpY2xlcyBpbiB0aGUgZm9yY2UgbW9kZWwiKSxwZSgwKSksZ2MpLGphKSx1bihQZCkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHFvdCksIiIpLCJGUiBUZW1wZXJhdHVyZSIpLCJUaGUgdGVtcGVyYXR1cmUgaXMgdXNlZCBhcyBhIHNjYWxpbmcgZmFjdG9yIGZvciBwYXJ0aWNsZSBkaXNwbGFjZW1lbnRzLiIpLEVkKSxPbyksbGEpLHVuKHFuKSkpKSxjYShlLHFvdCxKcSxoYmUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxIb3QpLCIiKSwiRWFkZXMgUmVwdWxzaW9uIiksIkZhY3RvciBmb3IgcmVwdWxzaXZlIGZvcmNlcyBpbiBFYWRlcycgbW9kZWwuIiksNSksT28pLGxhKSx1bihxbikpKSksY2EoZSxIb3QsSnEsY2JlKSxQaGUoKG5ldyBiQyxlKSl9O3ZhciBzYmUsYWJlLGI3dCxvYmUsY2JlLHViZSxsYmUsaGJlO0YoQl8sIkZvcmNlTWV0YURhdGFQcm92aWRlciIsODQ5KSxEKDQyNCwyMix7MzoxLDM1OjEsMjI6MSw0MjQ6MX0sUGJ0KTt2YXIgdGx0LGdWLHc3dD1qcihCXywiRm9yY2VNb2RlbFN0cmF0ZWd5Iiw0MjQsSHIsZWluLHdKZSksZmJlO0QoOTg4LDEsT2gsYkMpLGwuUWU9ZnVuY3Rpb24oZSl7UGhlKGUpfTt2YXIgZGJlLGdiZSx2N3QscFYsbTd0LHBiZSxiYmUsd2JlLHk3dCx2YmUseDd0LGs3dCxtYmUsYzcseWJlLGVsdCxFN3QseGJlLGtiZSxiVixubHQ7RihCXywiRm9yY2VPcHRpb25zIiw5ODgpLEQoOTg5LDEse30sVjUpLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgTnB0LGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxGKEJfLCJGb3JjZU9wdGlvbnMvRm9yY2VGYWN0b3J5Iiw5ODkpO3ZhciB2TyxkUyxJNix3VjtEKDg1MCwxLE9oLFZKKSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSx2NnQpLCIiKSwiRml4ZWQgUG9zaXRpb24iKSwiUHJldmVudCB0aGF0IHRoZSBub2RlIGlzIG1vdmVkIGJ5IHRoZSBsYXlvdXQgYWxnb3JpdGhtLiIpLChObigpLCExKSksKFVnKCksTGEpKSxScyksdW4oKFFmKCksZWEpKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsbTZ0KSwiIiksIkRlc2lyZWQgRWRnZSBMZW5ndGgiKSwiRWl0aGVyIHNwZWNpZmllZCBmb3IgcGFyZW50IG5vZGVzIG9yIGZvciBpbmRpdmlkdWFsIGVkZ2VzLCB3aGVyZSB0aGUgbGF0dGVyIHRha2VzIGhpZ2hlciBwcmVjZWRlbmNlLiIpLDEwMCksT28pLGxhKSxqaShxbixsdChjdChpcCwxKSxvZSwxNzUsMCxbUGRdKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHk2dCksIiIpLCJMYXlvdXQgRGltZW5zaW9uIiksIkRpbWVuc2lvbnMgdGhhdCBhcmUgcGVybWl0dGVkIHRvIGJlIGFsdGVyZWQgZHVyaW5nIGxheW91dC4iKSxUN3QpLHVzKSxEN3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUseDZ0KSwiIiksIlN0cmVzcyBFcHNpbG9uIiksIlRlcm1pbmF0aW9uIGNyaXRlcmlvbiBmb3IgdGhlIGl0ZXJhdGl2ZSBwcm9jZXNzLiIpLEVkKSxPbyksbGEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsazZ0KSwiIiksIkl0ZXJhdGlvbiBMaW1pdCIpLCJNYXhpbXVtIG51bWJlciBvZiBwZXJmb3JtZWQgaXRlcmF0aW9ucy4gVGFrZXMgaGlnaGVyIHByZWNlZGVuY2UgdGhhbiAnZXBzaWxvbicuIikscGUod2kpKSxnYyksamEpLHVuKHFuKSkpKSx2aGUoKG5ldyBHSixlKSl9O3ZhciBFYmUsVGJlLFQ3dCxDYmUsX2JlLFNiZTtGKEJfLCJTdHJlc3NNZXRhRGF0YVByb3ZpZGVyIiw4NTApLEQoOTkyLDEsT2gsR0opLGwuUWU9ZnVuY3Rpb24oZSl7dmhlKGUpfTt2YXIgdlYsQzd0LF83dCxTN3QsQTd0LEw3dCxBYmUsTGJlLE1iZSxEYmUsTTd0LEliZTtGKEJfLCJTdHJlc3NPcHRpb25zIiw5OTIpLEQoOTkzLDEse30sZjEpLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgbll0LGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxGKEJfLCJTdHJlc3NPcHRpb25zL1N0cmVzc0ZhY3RvcnkiLDk5MyksRCgxMTI4LDIwOSxTMixuWXQpLGwuWmU9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkO2Zvcih2cihuLG8xZSwxKSxqZShSZShxZShlLChpSSgpLEE3dCkpKSk/amUoUmUocWUoZSxNN3QpKSl8fHkkKChyPW5ldyBycigoUG0oKSxuZXcgTW0oZSkpKSxyKSk6amNlKG5ldyBOcHQsZSxSYyhuLDEpKSxvPXByZShlKSxzPUFsZSh0aGlzLmEsbyksZD1zLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDIzMSksIShoLmUuYy5sZW5ndGg8PTEpJiYoXzNuKHRoaXMuYixoKSxpMm4odGhpcy5iKSx4dShoLmQsbmV3IHJkKSk7bz16aGUocyksUmhlKG8pLG9yKG4pfSxGKG5ILCJTdHJlc3NMYXlvdXRQcm92aWRlciIsMTEyOCksRCgxMTI5LDEsVW4scmQpLGwudGQ9ZnVuY3Rpb24oZSl7ZHh0KHUoZSw0NDcpKX0sRihuSCwiU3RyZXNzTGF5b3V0UHJvdmlkZXIvbGFtYmRhJDAkVHlwZSIsMTEyOSksRCg5OTAsMSx7fSxocXQpLGwuYz0wLGwuZT0wLGwuZz0wLEYobkgsIlN0cmVzc01ham9yaXphdGlvbiIsOTkwKSxEKDM3OSwyMix7MzoxLDM1OjEsMjI6MSwzNzk6MX0sRGV0KTt2YXIgcmx0LGlsdCxzbHQsRDd0PWpyKG5ILCJTdHJlc3NNYWpvcml6YXRpb24vRGltZW5zaW9uIiwzNzksSHIsTGluLHZKZSksT2JlO0QoOTkxLDEsT2ksQ2kpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWVplKHRoaXMuYSx1KGUsMTQ0KSx1KG4sMTQ0KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihuSCwiU3RyZXNzTWFqb3JpemF0aW9uL2xhbWJkYSQwJFR5cGUiLDk5MSksRCgxMjI5LDEse30sd1p0KSxGKF82LCJFbGtMYXllcmVkIiwxMjI5KSxEKDEyMzAsMSxVbixpZCksbC50ZD1mdW5jdGlvbihlKXtzYm4odShlLDM3KSl9LEYoXzYsIkVsa0xheWVyZWQvbGFtYmRhJDAkVHlwZSIsMTIzMCksRCgxMjMxLDEsVW4saGkpLGwudGQ9ZnVuY3Rpb24oZSl7S1plKHRoaXMuYSx1KGUsMzcpKX0sRihfNiwiRWxrTGF5ZXJlZC9sYW1iZGEkMSRUeXBlIiwxMjMxKSxEKDEyNjMsMSx7fSxIVXQpO3ZhciBQYmUsRmJlLE5iZTtGKF82LCJHcmFwaENvbmZpZ3VyYXRvciIsMTI2MyksRCg3NTksMSxVbixncyksbC50ZD1mdW5jdGlvbihlKXtHYWUodGhpcy5hLHUoZSwxMCkpfSxGKF82LCJHcmFwaENvbmZpZ3VyYXRvci9sYW1iZGEkMCRUeXBlIiw3NTkpLEQoNzYwLDEse30sRzUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGw0dCgpLG5ldyBUbihudWxsLG5ldyBfbih1KGUsMjkpLmEsMTYpKX0sRihfNiwiR3JhcGhDb25maWd1cmF0b3IvbGFtYmRhJDEkVHlwZSIsNzYwKSxEKDc2MSwxLFVuLHFpKSxsLnRkPWZ1bmN0aW9uKGUpe0dhZSh0aGlzLmEsdShlLDEwKSl9LEYoXzYsIkdyYXBoQ29uZmlndXJhdG9yL2xhbWJkYSQyJFR5cGUiLDc2MSksRCgxMTI3LDIwOSxTMixncXQpLGwuWmU9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyPVd5bihuZXcgeXF0LGUpLFZ0KHFlKGUsKFRlKCkscXkpKSk9PT1WdCgoRzAoKSxzcCkpP0Nobih0aGlzLmEscixuKTp4Ym4odGhpcy5hLHIsbiksT2hlKG5ldyBXSixyKX0sRihfNiwiTGF5ZXJlZExheW91dFByb3ZpZGVyIiwxMTI3KSxEKDM1NiwyMix7MzoxLDM1OjEsMjI6MSwzNTY6MX0sX00pO3ZhciBEZCxnYixjdSxxYyxJbyxJN3Q9anIoXzYsIkxheWVyZWRQaGFzZXMiLDM1NixIcixmYW4sbUplKSxCYmU7RCgxNjUxLDEse30sbm5lKSxsLmk9MDt2YXIgUmJlO0YoVUksIkNvbXBvbmVudHNUb0NHcmFwaFRyYW5zZm9ybWVyIiwxNjUxKTt2YXIgamJlO0QoMTY1MiwxLHt9LGZ3KSxsLmVmPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGIuTWF0aC5taW4oZS5hIT1udWxsP1h0KGUuYSk6ZS5jLmksbi5hIT1udWxsP1h0KG4uYSk6bi5jLmkpfSxsLmZmPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGIuTWF0aC5taW4oZS5hIT1udWxsP1h0KGUuYSk6ZS5jLmksbi5hIT1udWxsP1h0KG4uYSk6bi5jLmkpfSxGKFVJLCJDb21wb25lbnRzVG9DR3JhcGhUcmFuc2Zvcm1lci8xIiwxNjUyKSxEKDgxLDEsezgxOjF9KSxsLmk9MCxsLms9ITAsbC5vPUNzO3ZhciBhbHQ9RigkXywiQ05vZGUiLDgxKTtEKDQ2MCw4MSx7NDYwOjEsODE6MX0sRjJ0LE4zdCksbC5JYj1mdW5jdGlvbigpe3JldHVybiIifSxGKFVJLCJDb21wb25lbnRzVG9DR3JhcGhUcmFuc2Zvcm1lci9DUmVjdE5vZGUiLDQ2MCksRCgxNjIzLDEse30sVTUpO3ZhciBvbHQsY2x0O0YoVUksIk9uZURpbWVuc2lvbmFsQ29tcG9uZW50c0NvbXBhY3Rpb24iLDE2MjMpLEQoMTYyNCwxLHt9LG1wKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB5aW4odShlLDQ2KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxGKFVJLCJPbmVEaW1lbnNpb25hbENvbXBvbmVudHNDb21wYWN0aW9uL2xhbWJkYSQwJFR5cGUiLDE2MjQpLEQoMTYyNSwxLHt9LFc1KSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBPaG4odShlLDQ2KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxGKFVJLCJPbmVEaW1lbnNpb25hbENvbXBvbmVudHNDb21wYWN0aW9uL2xhbWJkYSQxJFR5cGUiLDE2MjUpLEQoMTY1NCwxLHt9LGRYdCksRigkXywiQ0dyYXBoIiwxNjU0KSxEKDE4OSwxLHsxODk6MX0sb3N0KSxsLmI9MCxsLmM9MCxsLmU9MCxsLmc9ITAsbC5pPUNzLEYoJF8sIkNHcm91cCIsMTg5KSxEKDE2NTMsMSx7fSxFTCksbC5lZj1mdW5jdGlvbihlLG4pe3JldHVybiBiLk1hdGgubWF4KGUuYSE9bnVsbD9YdChlLmEpOmUuYy5pLG4uYSE9bnVsbD9YdChuLmEpOm4uYy5pKX0sbC5mZj1mdW5jdGlvbihlLG4pe3JldHVybiBiLk1hdGgubWF4KGUuYSE9bnVsbD9YdChlLmEpOmUuYy5pLG4uYSE9bnVsbD9YdChuLmEpOm4uYy5pKX0sRigkXyxGZmUsMTY1MyksRCgxNjU1LDEse30sVW9lKSxsLmQ9ITE7dmFyICRiZSx1bHQ9RigkXyxSZmUsMTY1NSk7RCgxNjU2LDEse30sdmwpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHhidCgpLE5uKCksdSh1KGUsNDYpLmEsODEpLmQuZSE9MH0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LEYoJF8samZlLDE2NTYpLEQoODIzLDEse30sR3d0KSxsLmE9ITEsbC5iPSExLGwuYz0hMSxsLmQ9ITEsRigkXywkZmUsODIzKSxEKDE4MjUsMSx7fSxES3QpLEYockgsemZlLDE4MjUpO3ZhciBtTz1LaShMMixPZmUpO0QoMTgyNiwxLHszNjk6MX0sY1F0KSxsLktlPWZ1bmN0aW9uKGUpe2d2bih0aGlzLHUoZSw0NjYpKX0sRihySCxxZmUsMTgyNiksRCgxODI3LDEsT2ksaU4pLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZ3JuKHUoZSw4MSksdShuLDgxKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihySCxIZmUsMTgyNyksRCg0NjYsMSx7NDY2OjF9LE5idCksbC5hPSExLEYockgsVmZlLDQ2NiksRCgxODI4LDEsT2ksU2MpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gX2RuKHUoZSw0NjYpLHUobiw0NjYpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKHJILEdmZSwxODI4KSxEKDE0MCwxLHsxNDA6MX0sZzgsJHd0KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBlPT1udWxsfHxjNm4hPW9sKGUpPyExOihuPXUoZSwxNDApLEZjKHRoaXMuYyxuLmMpJiZGYyh0aGlzLmQsbi5kKSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gQXoobHQoY3QoUW4sMSksRGUsMSw1LFt0aGlzLmMsdGhpcy5kXSkpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIigiK3RoaXMuYytZYSt0aGlzLmQrKHRoaXMuYT8iY3giOiIiKSt0aGlzLmIrIikifSxsLmE9ITAsbC5jPTAsbC5kPTA7dmFyIGM2bj1GKEwyLCJQb2ludCIsMTQwKTtEKDQwNSwyMix7MzoxLDM1OjEsMjI6MSw0MDU6MX0sSlIpO3ZhciBMdixQeSx6NCxGeSx6YmU9anIoTDIsIlBvaW50L1F1YWRyYW50Iiw0MDUsSHIsTXNuLHlKZSkscWJlO0QoMTY0MiwxLHt9LHBxdCksbC5iPW51bGwsbC5jPW51bGwsbC5kPW51bGwsbC5lPW51bGwsbC5mPW51bGw7dmFyIEhiZSxWYmUsR2JlLFViZSxXYmU7RihMMiwiUmVjdGlsaW5lYXJDb252ZXhIdWxsIiwxNjQyKSxEKDU3NCwxLHszNjk6MX0sWXopLGwuS2U9ZnVuY3Rpb24oZSl7ZG9uKHRoaXMsdShlLDE0MCkpfSxsLmI9MDt2YXIgTzd0O0YoTDIsIlJlY3RpbGluZWFyQ29udmV4SHVsbC9NYXhpbWFsRWxlbWVudHNFdmVudEhhbmRsZXIiLDU3NCksRCgxNjQ0LDEsT2ksd20pLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gcnJuKHllKGUpLHllKG4pKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKEwyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvTWF4aW1hbEVsZW1lbnRzRXZlbnRIYW5kbGVyL2xhbWJkYSQwJFR5cGUiLDE2NDQpLEQoMTY0MywxLHszNjk6MX0sQ2VlKSxsLktlPWZ1bmN0aW9uKGUpe1N3bih0aGlzLHUoZSwxNDApKX0sbC5hPTAsbC5iPW51bGwsbC5jPW51bGwsbC5kPW51bGwsbC5lPW51bGwsRihMMiwiUmVjdGlsaW5lYXJDb252ZXhIdWxsL1JlY3RhbmdsZUV2ZW50SGFuZGxlciIsMTY0MyksRCgxNjQ1LDEsT2kseGcpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYXNuKHUoZSwxNDApLHUobiwxNDApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKEwyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDAkVHlwZSIsMTY0NSksRCgxNjQ2LDEsT2ksVDMpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gb3NuKHUoZSwxNDApLHUobiwxNDApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKEwyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDEkVHlwZSIsMTY0NiksRCgxNjQ3LDEsT2ksY0spLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdXNuKHUoZSwxNDApLHUobiwxNDApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKEwyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDIkVHlwZSIsMTY0NyksRCgxNjQ4LDEsT2ksVmIpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gY3NuKHUoZSwxNDApLHUobiwxNDApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKEwyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDMkVHlwZSIsMTY0OCksRCgxNjQ5LDEsT2ksdUspLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaGduKHUoZSwxNDApLHUobiwxNDApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKEwyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDQkVHlwZSIsMTY0OSksRCgxNjUwLDEse30salF0KSxGKEwyLCJTY2FubGluZSIsMTY1MCksRCgyMDA1LDEse30pLEYoVGQsIkFic3RyYWN0R3JhcGhQbGFjZXIiLDIwMDUpLEQoMzI1LDEsezMyNToxfSxEV3QpLGwubWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubmYoZSk/KGxuKHRoaXMuYix1KFEoZSwoYWUoKSxCeSkpLDIxKSxlKSwhMCk6ITF9LGwubmY9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87Zm9yKG49dShRKGUsKGFlKCksQnkpKSwyMSksbz11KEFpKFBpLG4pLDIxKSxzPW8uS2MoKTtzLk9iKCk7KWlmKHI9dShzLlBiKCksMjEpLCF1KEFpKHRoaXMuYixyKSwxNSkuZGMoKSlyZXR1cm4hMTtyZXR1cm4hMH07dmFyIFBpO0YoVGQsIkNvbXBvbmVudEdyb3VwIiwzMjUpLEQoNzY1LDIwMDUse30sJHB0KSxsLm9mPWZ1bmN0aW9uKGUpe3ZhciBuLHI7Zm9yKHI9bmV3IFModGhpcy5hKTtyLmE8ci5jLmMubGVuZ3RoOylpZihuPXUoSihyKSwzMjUpLG4ubWYoZSkpcmV0dXJuO2xlKHRoaXMuYSxuZXcgRFd0KGUpKX0sbC5sZj1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLO2lmKHRoaXMuYS5jPU50KFFuLERlLDEsMCw1LDEpLG4uYS5jPU50KFFuLERlLDEsMCw1LDEpLGUuZGMoKSl7bi5mLmE9MCxuLmYuYj0wO3JldHVybn1mb3IoZD11KGUuWGIoMCksMzcpLE1vKG4sZCksbz1lLktjKCk7by5PYigpOylzPXUoby5QYigpLDM3KSx0aGlzLm9mKHMpO2ZvcihLPW5ldyBDYSxoPVh0KHllKFEoZCwoVGUoKSxPTykpKSksQz1uZXcgUyh0aGlzLmEpO0MuYTxDLmMuYy5sZW5ndGg7KXY9dShKKEMpLDMyNSksTT1LaGUodixoKSxCZyhhJCh2LmIpLEsuYSxLLmIpLEsuYSs9TS5hLEsuYis9TS5iO2lmKG4uZi5hPUsuYS1oLG4uZi5iPUsuYi1oLGplKFJlKFEoZCxpRykpKSYmVnQoUShkLGVnKSk9PT1WdCgoVzAoKSxONykpKXtmb3IoRz1lLktjKCk7Ry5PYigpOylqPXUoRy5QYigpLDM3KSx4XyhqLGouYy5hLGouYy5iKTtmb3Iocj1uZXcgUFQsT3h0KHIsZSxoKSxIPWUuS2MoKTtILk9iKCk7KWo9dShILlBiKCksMzcpLExpKEdmKGouYyksci5lKTtMaShHZihuLmYpLHIuYSl9Zm9yKGs9bmV3IFModGhpcy5hKTtrLmE8ay5jLmMubGVuZ3RoOyl2PXUoSihrKSwzMjUpLE9tdChuLGEkKHYuYikpfSxGKFRkLCJDb21wb25lbnRHcm91cEdyYXBoUGxhY2VyIiw3NjUpLEQoMTI5Myw3NjUse30sU3F0KSxsLm9mPWZ1bmN0aW9uKGUpe25pZSh0aGlzLGUpfSxsLmxmPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQ7aWYodGhpcy5hLmM9TnQoUW4sRGUsMSwwLDUsMSksbi5hLmM9TnQoUW4sRGUsMSwwLDUsMSksZS5kYygpKXtuLmYuYT0wLG4uZi5iPTA7cmV0dXJufWZvcihkPXUoZS5YYigwKSwzNyksTW8obixkKSxvPWUuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksMzcpLG5pZSh0aGlzLHMpO2ZvcihSdD1uZXcgQ2EsU3Q9bmV3IENhLHR0PW5ldyBDYSxLPW5ldyBDYSxoPVh0KHllKFEoZCwoVGUoKSxPTykpKSksQz1uZXcgUyh0aGlzLmEpO0MuYTxDLmMuYy5sZW5ndGg7KXtpZih2PXUoSihDKSwzMjUpLEJwKHUoUShuLCh1aSgpLHF2KSksMTAzKSkpe2Zvcih0dC5hPVJ0LmEsTXQ9bmV3IEZDKE05KGlydCh2LmIpLmEpLmEua2MoKSk7TXQuYi5PYigpOylpZihndD11KFVSKE10LmIuUGIoKSksMjEpLGd0LkhjKCh2ZSgpLFBuKSkpe3R0LmE9U3QuYTticmVha319ZWxzZSBpZihiOCh1KFEobixxdiksMTAzKSkpe2Zvcih0dC5iPVJ0LmIsTXQ9bmV3IEZDKE05KGlydCh2LmIpLmEpLmEua2MoKSk7TXQuYi5PYigpOylpZihndD11KFVSKE10LmIuUGIoKSksMjEpLGd0LkhjKCh2ZSgpLEJuKSkpe3R0LmI9U3QuYjticmVha319aWYoTT1LaGUodSh2LDU3MCksaCksQmcoYSQodi5iKSx0dC5hLHR0LmIpLEJwKHUoUShuLHF2KSwxMDMpKSl7Zm9yKFN0LmE9dHQuYStNLmEsSy5hPWIuTWF0aC5tYXgoSy5hLFN0LmEpLE10PW5ldyBGQyhNOShpcnQodi5iKS5hKS5hLmtjKCkpO010LmIuT2IoKTspaWYoZ3Q9dShVUihNdC5iLlBiKCkpLDIxKSxndC5IYygodmUoKSxtcikpKXtSdC5hPXR0LmErTS5hO2JyZWFrfVN0LmI9dHQuYitNLmIsdHQuYj1TdC5iLEsuYj1iLk1hdGgubWF4KEsuYix0dC5iKX1lbHNlIGlmKGI4KHUoUShuLHF2KSwxMDMpKSl7Zm9yKFN0LmI9dHQuYitNLmIsSy5iPWIuTWF0aC5tYXgoSy5iLFN0LmIpLE10PW5ldyBGQyhNOShpcnQodi5iKS5hKS5hLmtjKCkpO010LmIuT2IoKTspaWYoZ3Q9dShVUihNdC5iLlBiKCkpLDIxKSxndC5IYygodmUoKSxIbikpKXtSdC5iPXR0LmIrTS5iO2JyZWFrfVN0LmE9dHQuYStNLmEsdHQuYT1TdC5hLEsuYT1iLk1hdGgubWF4KEsuYSx0dC5hKX19aWYobi5mLmE9Sy5hLWgsbi5mLmI9Sy5iLWgsamUoUmUoUShkLGlHKSkpJiZWdChRKGQsZWcpKT09PVZ0KChXMCgpLE43KSkpe2ZvcihHPWUuS2MoKTtHLk9iKCk7KWo9dShHLlBiKCksMzcpLHhfKGosai5jLmEsai5jLmIpO2ZvcihyPW5ldyBQVCxPeHQocixlLGgpLEg9ZS5LYygpO0guT2IoKTspaj11KEguUGIoKSwzNyksTGkoR2Yoai5jKSxyLmUpO0xpKEdmKG4uZiksci5hKX1mb3Ioaz1uZXcgUyh0aGlzLmEpO2suYTxrLmMuYy5sZW5ndGg7KXY9dShKKGspLDMyNSksT210KG4sYSQodi5iKSl9LEYoVGQsIkNvbXBvbmVudEdyb3VwTW9kZWxPcmRlckdyYXBoUGxhY2VyIiwxMjkzKSxEKDQyMywyMix7MzoxLDM1OjEsMjI6MSw0MjM6MX0sSWV0KTt2YXIgbGx0LFA3dCxxNCxGN3Q9anIoVGQsIkNvbXBvbmVudE9yZGVyaW5nU3RyYXRlZ3kiLDQyMyxIcixBaW4seEplKSxZYmU7RCg2NTAsMSx7fSxQVCksRihUZCwiQ29tcG9uZW50c0NvbXBhY3RvciIsNjUwKSxEKDE0NjgsMTIsX2ZlLE9KdCksbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gZF8odGhpcyx1KGUsMTQwKSl9LEYoVGQsIkNvbXBvbmVudHNDb21wYWN0b3IvSHVsbHBvaW50cyIsMTQ2OCksRCgxNDY1LDEsezg0MToxfSx2c2UpLGwuYT0hMSxGKFRkLCJDb21wb25lbnRzQ29tcGFjdG9yL0ludGVybmFsQ29tcG9uZW50IiwxNDY1KSxEKDE0NjQsMSxyMCxicXQpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgUyh0aGlzLmEpfSxGKFRkLCJDb21wb25lbnRzQ29tcGFjdG9yL0ludGVybmFsQ29ubmVjdGVkQ29tcG9uZW50cyIsMTQ2NCksRCgxNDY3LDEsezU5NDoxfSxZb2UpLGwuaGY9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5qZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuZ2Y9ZnVuY3Rpb24oKXtyZXR1cm4gaHN0KHRoaXMuZCl9LGwua2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxGKFRkLCJDb21wb25lbnRzQ29tcGFjdG9yL0ludGVybmFsRXh0ZXJuYWxFeHRlbnNpb24iLDE0NjcpLEQoMTQ2NiwxLHs1OTQ6MX0sbXF0KSxsLmpmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5nZj1mdW5jdGlvbigpe3JldHVybiBoc3QodGhpcy5kKX0sbC5oZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwua2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxGKFRkLCJDb21wb25lbnRzQ29tcGFjdG9yL0ludGVybmFsVW5pb25FeHRlcm5hbEV4dGVuc2lvbiIsMTQ2NiksRCgxNDcwLDEse30sZnVlKSxGKFRkLCJDb21wb25lbnRzQ29tcGFjdG9yL091dGVyU2VnbWVudHMiLDE0NzApLEQoMTQ2OSwxLHt9LHdxdCksRihUZCwiQ29tcG9uZW50c0NvbXBhY3Rvci9TZWdtZW50cyIsMTQ2OSksRCgxMjY0LDEse30sdVF0KSxGKFRkLGQ2dCwxMjY0KSxEKDEyNjUsMSxPaSxsSyksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBmc24odShlLDM3KSx1KG4sMzcpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKFRkLCJDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDEyNjUpLEQoNTcwLDMyNSx7MzI1OjEsNTcwOjF9LElKdCksbC5tZj1mdW5jdGlvbihlKXtyZXR1cm4gJHl0KHRoaXMsZSl9LGwubmY9ZnVuY3Rpb24oZSl7cmV0dXJuIFVjZSh0aGlzLGUpfTt2YXIgUXI7RihUZCwiTW9kZWxPcmRlckNvbXBvbmVudEdyb3VwIiw1NzApLEQoMTI5MSwyMDA1LHt9LHNOKSxsLmxmPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2U7aWYoZS5nYygpPT0xKXtSdD11KGUuWGIoMCksMzcpLFJ0IT1uJiYobi5hLmM9TnQoUW4sRGUsMSwwLDUsMSksUXVlKG4sUnQsMCwwKSxNbyhuLFJ0KSxQdnQobi5kLFJ0LmQpLG4uZi5hPVJ0LmYuYSxuLmYuYj1SdC5mLmIpO3JldHVybn1lbHNlIGlmKGUuZGMoKSl7bi5hLmM9TnQoUW4sRGUsMSwwLDUsMSksbi5mLmE9MCxuLmYuYj0wO3JldHVybn1pZihWdChRKG4sKFRlKCkscTYpKSk9PT1WdCgoaXYoKSxxNCkpKXtmb3Ioaz1lLktjKCk7ay5PYigpOyl7Zm9yKGQ9dShrLlBiKCksMzcpLE10PTAsdHQ9bmV3IFMoZC5hKTt0dC5hPHR0LmMuYy5sZW5ndGg7KUs9dShKKHR0KSwxMCksTXQrPXUoUShLLFp2ZSksMTkpLmE7ZC5wPU10fXduKCksZS5hZChuZXcgUmYpfWZvcihoPXUoZS5YYigwKSwzNyksbi5hLmM9TnQoUW4sRGUsMSwwLDUsMSksTW8obixoKSxHPTAsS3Q9MCxDPWUuS2MoKTtDLk9iKCk7KWQ9dShDLlBiKCksMzcpLFN0PWQuZixHPWIuTWF0aC5tYXgoRyxTdC5hKSxLdCs9U3QuYSpTdC5iO2ZvcihHPWIuTWF0aC5tYXgoRyxiLk1hdGguc3FydChLdCkqWHQoeWUoUShuLHJHKSkpKSxvPVh0KHllKFEobixPTykpKSx1ZT0wLF9lPTAsSD0wLHI9byx2PWUuS2MoKTt2Lk9iKCk7KWQ9dSh2LlBiKCksMzcpLFN0PWQuZix1ZStTdC5hPkcmJih1ZT0wLF9lKz1IK28sSD0wKSxndD1kLmMseF8oZCx1ZStndC5hLF9lK2d0LmIpLEdmKGd0KSxyPWIuTWF0aC5tYXgocix1ZStTdC5hKSxIPWIuTWF0aC5tYXgoSCxTdC5iKSx1ZSs9U3QuYStvO2lmKG4uZi5hPXIsbi5mLmI9X2UrSCxqZShSZShRKGgsaUcpKSkpe2ZvcihzPW5ldyBQVCxPeHQocyxlLG8pLGo9ZS5LYygpO2ouT2IoKTspTT11KGouUGIoKSwzNyksTGkoR2YoTS5jKSxzLmUpO0xpKEdmKG4uZikscy5hKX1PbXQobixlKX0sRihUZCwiU2ltcGxlUm93R3JhcGhQbGFjZXIiLDEyOTEpLEQoMTI5MiwxLE9pLFJmKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHV1bih1KGUsMzcpLHUobiwzNykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoVGQsIlNpbXBsZVJvd0dyYXBoUGxhY2VyLzEiLDEyOTIpO3ZhciBLYmU7RCgxMjYyLDEseGQsdm0pLGwuTGI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49dShRKHUoZSwyNDMpLmIsKFRlKCksU28pKSw3NCksISFuJiZuLmIhPTB9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPXUoUSh1KGUsMjQzKS5iLChUZSgpLFNvKSksNzQpLCEhbiYmbi5iIT0wfSxGKGlILCJDb21wb3VuZEdyYXBoUG9zdHByb2Nlc3Nvci8xIiwxMjYyKSxEKDEyNjEsMSxvcyx4cXQpLGwucGY9ZnVuY3Rpb24oZSxuKXt5c2UodGhpcyx1KGUsMzcpLG4pfSxGKGlILCJDb21wb3VuZEdyYXBoUHJlcHJvY2Vzc29yIiwxMjYxKSxEKDQ0MSwxLHs0NDE6MX0sb2llKSxsLmM9ITEsRihpSCwiQ29tcG91bmRHcmFwaFByZXByb2Nlc3Nvci9FeHRlcm5hbFBvcnQiLDQ0MSksRCgyNDMsMSx7MjQzOjF9LEZqKSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGJudCh0aGlzLmMpKyI6Iitxb2UodGhpcy5iKX0sRihpSCwiQ3Jvc3NIaWVyYXJjaHlFZGdlIiwyNDMpLEQoNzYzLDEsT2ksU2kpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWjFuKHRoaXMsdShlLDI0MyksdShuLDI0MykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoaUgsIkNyb3NzSGllcmFyY2h5RWRnZUNvbXBhcmF0b3IiLDc2MyksRCgyOTksMTM0LHszOjEsMjk5OjEsOTQ6MSwxMzQ6MX0pLGwucD0wLEYodHUsIkxHcmFwaEVsZW1lbnQiLDI5OSksRCgxNywyOTksezM6MSwxNzoxLDI5OToxLDk0OjEsMTM0OjF9LFZ3KSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHFvZSh0aGlzKX07dmFyIGhsdD1GKHR1LCJMRWRnZSIsMTcpO0QoMzcsMjk5LHszOjEsMjA6MSwzNzoxLDI5OToxLDk0OjEsMTM0OjF9LGV5dCksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTKHRoaXMuYil9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmMubGVuZ3RoPT0wPyJHLXVubGF5ZXJlZCIrZWIodGhpcy5hKTp0aGlzLmEuYy5sZW5ndGg9PTA/IkctbGF5ZXJlZCIrZWIodGhpcy5iKToiR1tsYXllcmxlc3MiK2ViKHRoaXMuYSkrIiwgbGF5ZXJzIitlYih0aGlzLmIpKyJdIn07dmFyIFhiZT1GKHR1LCJMR3JhcGgiLDM3KSxRYmU7RCg2NTcsMSx7fSksbC5xZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUubn0sbC5XZT1mdW5jdGlvbihlKXtyZXR1cm4gUSh0aGlzLmUsZSl9LGwucmY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lLm99LGwuc2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lLnB9LGwuWGU9ZnVuY3Rpb24oZSl7cmV0dXJuIFVzKHRoaXMuZSxlKX0sbC50Zj1mdW5jdGlvbihlKXt0aGlzLmUubi5hPWUuYSx0aGlzLmUubi5iPWUuYn0sbC51Zj1mdW5jdGlvbihlKXt0aGlzLmUuby5hPWUuYSx0aGlzLmUuby5iPWUuYn0sbC52Zj1mdW5jdGlvbihlKXt0aGlzLmUucD1lfSxGKHR1LCJMR3JhcGhBZGFwdGVycy9BYnN0cmFjdExTaGFwZUFkYXB0ZXIiLDY1NyksRCg1NzcsMSx7ODM5OjF9LFVpKSxsLndmPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZighdGhpcy5iKWZvcih0aGlzLmI9VWQodGhpcy5hLmIuYy5sZW5ndGgpLG49bmV3IFModGhpcy5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDcwKSxsZSh0aGlzLmIsbmV3IFZhKGUpKTtyZXR1cm4gdGhpcy5ifSxsLmI9bnVsbCxGKHR1LCJMR3JhcGhBZGFwdGVycy9MRWRnZUFkYXB0ZXIiLDU3NyksRCg2NTYsMSx7fSxocnQpLGwueGY9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGg7aWYoIXRoaXMuYil7Zm9yKHRoaXMuYj1uZXcgaGUscz1uZXcgUyh0aGlzLmEuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShKKHMpLDI5KSxoPW5ldyBTKHIuYSk7aC5hPGguYy5jLmxlbmd0aDspaWYobz11KEooaCksMTApLHRoaXMuYy5NYihvKSYmKGxlKHRoaXMuYixuZXcgTmoodGhpcyxvLHRoaXMuZSkpLHRoaXMuZCkpe2lmKFVzKG8sKGFlKCksejYpKSlmb3Iobj11KFEobyx6NiksMTUpLktjKCk7bi5PYigpOyllPXUobi5QYigpLDEwKSxsZSh0aGlzLmIsbmV3IE5qKHRoaXMsZSwhMSkpO2lmKFVzKG8sTjYpKWZvcihuPXUoUShvLE42KSwxNSkuS2MoKTtuLk9iKCk7KWU9dShuLlBiKCksMTApLGxlKHRoaXMuYixuZXcgTmoodGhpcyxlLCExKSl9fXJldHVybiB0aGlzLmJ9LGwucWY9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgU2cobDFlKSl9LGwuV2U9ZnVuY3Rpb24oZSl7cmV0dXJuIFEodGhpcy5hLGUpfSxsLnJmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mfSxsLnNmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5wfSxsLlhlPWZ1bmN0aW9uKGUpe3JldHVybiBVcyh0aGlzLmEsZSl9LGwudGY9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IFNnKGwxZSkpfSxsLnVmPWZ1bmN0aW9uKGUpe3RoaXMuYS5mLmE9ZS5hLHRoaXMuYS5mLmI9ZS5ifSxsLnZmPWZ1bmN0aW9uKGUpe3RoaXMuYS5wPWV9LGwuYj1udWxsLGwuZD0hMSxsLmU9ITEsRih0dSwiTEdyYXBoQWRhcHRlcnMvTEdyYXBoQWRhcHRlciIsNjU2KSxEKDU3Niw2NTcsezE4MToxfSxWYSksRih0dSwiTEdyYXBoQWRhcHRlcnMvTExhYmVsQWRhcHRlciIsNTc2KSxEKDU3NSw2NTcsezY4MDoxfSxOaiksbC55Zj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuemY9ZnVuY3Rpb24oKXtyZXR1cm4gd24oKSx3bigpLGlvfSxsLndmPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZighdGhpcy5hKWZvcih0aGlzLmE9VWQodSh0aGlzLmUsMTApLmIuYy5sZW5ndGgpLG49bmV3IFModSh0aGlzLmUsMTApLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDcwKSxsZSh0aGlzLmEsbmV3IFZhKGUpKTtyZXR1cm4gdGhpcy5hfSxsLkFmPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dSh0aGlzLmUsMTApLmQsbmV3IHV3dChlLmQsZS5jLGUuYSxlLmIpfSxsLkJmPWZ1bmN0aW9uKCl7cmV0dXJuIHduKCksd24oKSxpb30sbC5DZj1mdW5jdGlvbigpe3ZhciBlLG47aWYoIXRoaXMuYylmb3IodGhpcy5jPVVkKHUodGhpcy5lLDEwKS5qLmMubGVuZ3RoKSxuPW5ldyBTKHUodGhpcy5lLDEwKS5qKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMSksbGUodGhpcy5jLG5ldyBmR3QoZSx0aGlzLmQpKTtyZXR1cm4gdGhpcy5jfSxsLkRmPWZ1bmN0aW9uKCl7cmV0dXJuIGplKFJlKFEodSh0aGlzLmUsMTApLChhZSgpLGVDdCkpKSl9LGwuRWY9ZnVuY3Rpb24oZSl7dSh0aGlzLmUsMTApLmQuYj1lLmIsdSh0aGlzLmUsMTApLmQuZD1lLmQsdSh0aGlzLmUsMTApLmQuYz1lLmMsdSh0aGlzLmUsMTApLmQuYT1lLmF9LGwuRmY9ZnVuY3Rpb24oZSl7dSh0aGlzLmUsMTApLmYuYj1lLmIsdSh0aGlzLmUsMTApLmYuZD1lLmQsdSh0aGlzLmUsMTApLmYuYz1lLmMsdSh0aGlzLmUsMTApLmYuYT1lLmF9LGwuR2Y9ZnVuY3Rpb24oKXtXb24odGhpcywoVkMoKSxRYmUpKX0sbC5hPW51bGwsbC5iPW51bGwsbC5jPW51bGwsbC5kPSExLEYodHUsIkxHcmFwaEFkYXB0ZXJzL0xOb2RlQWRhcHRlciIsNTc1KSxEKDE3MjIsNjU3LHs4Mzg6MX0sZkd0KSxsLnpmPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHM7aWYodGhpcy5kJiZ1KHRoaXMuZSwxMSkuaS5rPT0oVm4oKSxIYykpcmV0dXJuIHduKCksd24oKSxpbztpZighdGhpcy5hKXtmb3IodGhpcy5hPW5ldyBoZSxyPW5ldyBTKHUodGhpcy5lLDExKS5lKTtyLmE8ci5jLmMubGVuZ3RoOyllPXUoSihyKSwxNyksbGUodGhpcy5hLG5ldyBVaShlKSk7aWYodGhpcy5kJiYocz11KFEodSh0aGlzLmUsMTEpLChhZSgpLEp1KSksMTApLHMpKWZvcihuPW5ldyBhcihscihqbyhzKS5hLktjKCksbmV3IHopKTt6cihuKTspZT11KE1yKG4pLDE3KSxsZSh0aGlzLmEsbmV3IFVpKGUpKX1yZXR1cm4gdGhpcy5hfSxsLndmPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZighdGhpcy5iKWZvcih0aGlzLmI9VWQodSh0aGlzLmUsMTEpLmYuYy5sZW5ndGgpLG49bmV3IFModSh0aGlzLmUsMTEpLmYpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDcwKSxsZSh0aGlzLmIsbmV3IFZhKGUpKTtyZXR1cm4gdGhpcy5ifSxsLkJmPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHM7aWYodGhpcy5kJiZ1KHRoaXMuZSwxMSkuaS5rPT0oVm4oKSxIYykpcmV0dXJuIHduKCksd24oKSxpbztpZighdGhpcy5jKXtmb3IodGhpcy5jPW5ldyBoZSxyPW5ldyBTKHUodGhpcy5lLDExKS5nKTtyLmE8ci5jLmMubGVuZ3RoOyllPXUoSihyKSwxNyksbGUodGhpcy5jLG5ldyBVaShlKSk7aWYodGhpcy5kJiYocz11KFEodSh0aGlzLmUsMTEpLChhZSgpLEp1KSksMTApLHMpKWZvcihuPW5ldyBhcihscihEcyhzKS5hLktjKCksbmV3IHopKTt6cihuKTspZT11KE1yKG4pLDE3KSxsZSh0aGlzLmMsbmV3IFVpKGUpKX1yZXR1cm4gdGhpcy5jfSxsLkhmPWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcy5lLDExKS5qfSxsLklmPWZ1bmN0aW9uKCl7cmV0dXJuIGplKFJlKFEodSh0aGlzLmUsMTEpLChhZSgpLFNPKSkpKX0sbC5hPW51bGwsbC5iPW51bGwsbC5jPW51bGwsbC5kPSExLEYodHUsIkxHcmFwaEFkYXB0ZXJzL0xQb3J0QWRhcHRlciIsMTcyMiksRCgxNzIzLDEsT2ksVEwpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gJHZuKHUoZSwxMSksdShuLDExKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRih0dSwiTEdyYXBoQWRhcHRlcnMvUG9ydENvbXBhcmF0b3IiLDE3MjMpLEQoODA0LDEsbGksYU4pLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMCksVkMoKSwhMH0sRih0dSwiTEdyYXBoQWRhcHRlcnMvbGFtYmRhJDAkVHlwZSIsODA0KSxEKDM5MiwyOTksezM6MSwyOTk6MSwzOTI6MSw5NDoxLDEzNDoxfSksRih0dSwiTFNoYXBlIiwzOTIpLEQoNzAsMzkyLHszOjEsMjk5OjEsNzA6MSwzOTI6MSw5NDoxLDEzNDoxfSxDSHQsYjJ0KSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dmVuKHRoaXMpLGU9PW51bGw/ImxhYmVsIjoibF8iK2V9LEYodHUsIkxMYWJlbCIsNzApLEQoMjA3LDEsezM6MSw0OjEsMjA3OjEsNDE0OjF9KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBfdChlLDIwNyk/KG49dShlLDIwNyksdGhpcy5kPT1uLmQmJnRoaXMuYT09bi5hJiZ0aGlzLmI9PW4uYiYmdGhpcy5jPT1uLmMpOiExfSxsLkhiPWZ1bmN0aW9uKCl7dmFyIGUsbjtyZXR1cm4gZT1wOCh0aGlzLmIpPDwxNixlfD1wOCh0aGlzLmEpJnlzLG49cDgodGhpcy5jKTw8MTYsbnw9cDgodGhpcy5kKSZ5cyxlXm59LGwuSmY9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0sajtmb3IoaD0wO2g8ZS5sZW5ndGgmJldyZSgoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpKSxmMWUpOykrK2g7Zm9yKG49ZS5sZW5ndGg7bj4wJiZXcmUoKFJyKG4tMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG4tMSkpLGQxZSk7KS0tbjtpZihoPG4pe009dnkoZS5zdWJzdHIoaCxuLWgpLCIsfDsiKTt0cnl7Zm9yKHY9TSxrPTAsQz12Lmxlbmd0aDtrPEM7KytrKXtpZihkPXZba10sbz12eShkLCI9Iiksby5sZW5ndGghPTIpdGhyb3cgaXQobmV3IEZuKCJFeHBlY3RpbmcgYSBsaXN0IG9mIGtleS12YWx1ZSBwYWlycy4iKSk7cz1meShvWzBdKSxqPWR5KGZ5KG9bMV0pKSxobihzLCJ0b3AiKT90aGlzLmQ9ajpobihzLCJsZWZ0Iik/dGhpcy5iPWo6aG4ocywiYm90dG9tIik/dGhpcy5hPWo6aG4ocywicmlnaHQiKSYmKHRoaXMuYz1qKX19Y2F0Y2goSCl7dGhyb3cgSD1XaShIKSxfdChILDEyNyk/KHI9SCxpdChuZXcgRm4oZzFlK3IpKSk6aXQoSCl9fX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJbdG9wPSIrdGhpcy5kKyIsbGVmdD0iK3RoaXMuYisiLGJvdHRvbT0iK3RoaXMuYSsiLHJpZ2h0PSIrdGhpcy5jKyJdIn0sbC5hPTAsbC5iPTAsbC5jPTAsbC5kPTAsRihXSSwiU3BhY2luZyIsMjA3KSxEKDE0MiwyMDcscDFlLE9DLENVdCx1d3QsTG50KTt2YXIgTjd0PUYoV0ksIkVsa01hcmdpbiIsMTQyKTtEKDY1MSwxNDIscDFlLG5ldCksRih0dSwiTE1hcmdpbiIsNjUxKSxEKDEwLDM5Mix7MzoxLDI5OToxLDEwOjEsMzkyOjEsOTQ6MSwxMzQ6MX0sWTApLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gZHNlKHRoaXMpfSxsLmk9ITE7dmFyIGwwPUYodHUsIkxOb2RlIiwxMCk7RCgyNjcsMjIsezM6MSwzNToxLDIyOjEsMjY3OjF9LFFDKTt2YXIgejEsa3MsTGwsdGEsT3MsSGMsZmx0PWpyKHR1LCJMTm9kZS9Ob2RlVHlwZSIsMjY3LEhyLHJvbixrSmUpLFpiZTtEKDExNiwyMDcsYjFlLEN4LE93LGt3dCk7dmFyIEI3dD1GKFdJLCJFbGtQYWRkaW5nIiwxMTYpO0QoNzY0LDExNixiMWUsSHB0KSxGKHR1LCJMUGFkZGluZyIsNzY0KSxEKDExLDM5Mix7MzoxLDI5OToxLDExOjEsMzkyOjEsOTQ6MSwxMzQ6MX0sTWMpLGwuSWI9ZnVuY3Rpb24oKXt2YXIgZSxuLHI7cmV0dXJuIGU9bmV3IE1wLEdyKChlLmErPSJwXyIsZSksaXEodGhpcykpLHRoaXMuaSYmR3IoaGMoKGUuYSs9IlsiLGUpLHRoaXMuaSksIl0iKSx0aGlzLmUuYy5sZW5ndGg9PTEmJnRoaXMuZy5jLmxlbmd0aD09MCYmdShOZSh0aGlzLmUsMCksMTcpLmMhPXRoaXMmJihuPXUoTmUodGhpcy5lLDApLDE3KS5jLEdyKChlLmErPSIgPDwgIixlKSxpcShuKSksR3IoaGMoKGUuYSs9IlsiLGUpLG4uaSksIl0iKSksdGhpcy5lLmMubGVuZ3RoPT0wJiZ0aGlzLmcuYy5sZW5ndGg9PTEmJnUoTmUodGhpcy5nLDApLDE3KS5kIT10aGlzJiYocj11KE5lKHRoaXMuZywwKSwxNykuZCxHcigoZS5hKz0iID4+ICIsZSksaXEocikpLEdyKGhjKChlLmErPSJbIixlKSxyLmkpLCJdIikpLGUuYX0sbC5jPSEwLGwuZD0hMTt2YXIgUjd0LGo3dCwkN3Qsejd0LHE3dCxIN3QsSmJlPUYodHUsIkxQb3J0IiwxMSk7RCgzOTcsMSxyMCxRcyksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IFModGhpcy5hLmUpLG5ldyBxcyhlKX0sRih0dSwiTFBvcnQvMSIsMzk3KSxEKDEyOTAsMSxzYSxxcyksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHUoSih0aGlzLmEpLDE3KS5jfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIEdvKHRoaXMuYSl9LGwuUWI9ZnVuY3Rpb24oKXtMOSh0aGlzLmEpfSxGKHR1LCJMUG9ydC8xLzEiLDEyOTApLEQoMzU5LDEscjAsVHIpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBTKHRoaXMuYS5nKSxuZXcgUXQoZSl9LEYodHUsIkxQb3J0LzIiLDM1OSksRCg3NjIsMSxzYSxRdCksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHUoSih0aGlzLmEpLDE3KS5kfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIEdvKHRoaXMuYSl9LGwuUWI9ZnVuY3Rpb24oKXtMOSh0aGlzLmEpfSxGKHR1LCJMUG9ydC8yLzEiLDc2MiksRCgxMjgzLDEscjAsY0d0KSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEwxKHRoaXMpfSxGKHR1LCJMUG9ydC9Db21iaW5lSXRlciIsMTI4MyksRCgyMDEsMSxzYSxMMSksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLlFiPWZ1bmN0aW9uKCl7SUh0KCl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdjkodGhpcyl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gR28odGhpcy5hKT9KKHRoaXMuYSk6Sih0aGlzLmIpfSxGKHR1LCJMUG9ydC9Db21iaW5lSXRlci8xIiwyMDEpLEQoMTI4NSwxLHhkLHlwKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBIS3QoZSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBqdSgpLHUoZSwxMSkuZS5jLmxlbmd0aCE9MH0sRih0dSwiTFBvcnQvbGFtYmRhJDAkVHlwZSIsMTI4NSksRCgxMjg0LDEseGQsbW0pLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIFZLdChlKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGp1KCksdShlLDExKS5nLmMubGVuZ3RoIT0wfSxGKHR1LCJMUG9ydC9sYW1iZGEkMSRUeXBlIiwxMjg0KSxEKDEyODYsMSx4ZCxoSyksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4ganUoKSx1KGUsMTEpLmo9PSh2ZSgpLFBuKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGp1KCksdShlLDExKS5qPT0odmUoKSxQbil9LEYodHUsIkxQb3J0L2xhbWJkYSQyJFR5cGUiLDEyODYpLEQoMTI4NywxLHhkLEdiKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBqdSgpLHUoZSwxMSkuaj09KHZlKCksSG4pfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4ganUoKSx1KGUsMTEpLmo9PSh2ZSgpLEhuKX0sRih0dSwiTFBvcnQvbGFtYmRhJDMkVHlwZSIsMTI4NyksRCgxMjg4LDEseGQsZkspLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIGp1KCksdShlLDExKS5qPT0odmUoKSxtcil9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBqdSgpLHUoZSwxMSkuaj09KHZlKCksbXIpfSxGKHR1LCJMUG9ydC9sYW1iZGEkNCRUeXBlIiwxMjg4KSxEKDEyODksMSx4ZCxkSyksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4ganUoKSx1KGUsMTEpLmo9PSh2ZSgpLEJuKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGp1KCksdShlLDExKS5qPT0odmUoKSxCbil9LEYodHUsIkxQb3J0L2xhbWJkYSQ1JFR5cGUiLDEyODkpLEQoMjksMjk5LHszOjEsMjA6MSwyOTk6MSwyOToxLDk0OjEsMTM0OjF9LFNoKSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFModGhpcy5hKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJMXyIrUm8odGhpcy5iLmIsdGhpcywwKStlYih0aGlzLmEpfSxGKHR1LCJMYXllciIsMjkpLEQoMTM0MiwxLHt9LHlxdCksRihLZyx3MWUsMTM0MiksRCgxMzQ2LDEse30sWTUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIERvKHUoZSw4MikpfSxGKEtnLCJFbGtHcmFwaEltcG9ydGVyLzBtZXRob2RyZWYkY29ubmVjdGFibGVTaGFwZVRvTm9kZSRUeXBlIiwxMzQ2KSxEKDEzNDksMSx7fSxGVCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gRG8odShlLDgyKSl9LEYoS2csIkVsa0dyYXBoSW1wb3J0ZXIvMW1ldGhvZHJlZiRjb25uZWN0YWJsZVNoYXBlVG9Ob2RlJFR5cGUiLDEzNDkpLEQoMTM0MywxLFVuLGpuKSxsLnRkPWZ1bmN0aW9uKGUpe25jZSh0aGlzLmEsdShlLDExOCkpfSxGKEtnLHYxZSwxMzQzKSxEKDEzNDQsMSxVbixTciksbC50ZD1mdW5jdGlvbihlKXtuY2UodGhpcy5hLHUoZSwxMTgpKX0sRihLZyxtMWUsMTM0NCksRCgxMzQ1LDEse30sb04pLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbihabm4odShlLDc5KSksMTYpKX0sRihLZyx5MWUsMTM0NSksRCgxMzQ3LDEsbGksaXIpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEpYZSh0aGlzLmEsdShlLDMzKSl9LEYoS2cseDFlLDEzNDcpLEQoMTM0OCwxLHt9LFRrKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24oSm5uKHUoZSw3OSkpLDE2KSl9LEYoS2csIkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDUkVHlwZSIsMTM0OCksRCgxMzUwLDEsbGksc3IpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRRZSh0aGlzLmEsdShlLDMzKSl9LEYoS2csIkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDckVHlwZSIsMTM1MCksRCgxMzUxLDEsbGksZ0spLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGJybih1KGUsNzkpKX0sRihLZywiRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkOCRUeXBlIiwxMzUxKSxEKDEyNzgsMSx7fSxXSik7dmFyIHQyZTtGKEtnLCJFbGtHcmFwaExheW91dFRyYW5zZmVycmVyIiwxMjc4KSxEKDEyNzksMSxsaSxJYSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gcVplKHRoaXMuYSx1KGUsMTcpKX0sRihLZywiRWxrR3JhcGhMYXlvdXRUcmFuc2ZlcnJlci9sYW1iZGEkMCRUeXBlIiwxMjc5KSxEKDEyODAsMSxVbiwkciksbC50ZD1mdW5jdGlvbihlKXtrTSgpLGxlKHRoaXMuYSx1KGUsMTcpKX0sRihLZywiRWxrR3JhcGhMYXlvdXRUcmFuc2ZlcnJlci9sYW1iZGEkMSRUeXBlIiwxMjgwKSxEKDEyODEsMSxsaSxZaSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gU1plKHRoaXMuYSx1KGUsMTcpKX0sRihLZywiRWxrR3JhcGhMYXlvdXRUcmFuc2ZlcnJlci9sYW1iZGEkMiRUeXBlIiwxMjgxKSxEKDEyODIsMSxVbixGbyksbC50ZD1mdW5jdGlvbihlKXtrTSgpLGxlKHRoaXMuYSx1KGUsMTcpKX0sRihLZywiRWxrR3JhcGhMYXlvdXRUcmFuc2ZlcnJlci9sYW1iZGEkMyRUeXBlIiwxMjgyKSxEKDE0ODUsMSxvcyxDayksbC5wZj1mdW5jdGlvbihlLG4pe0xjbih1KGUsMzcpLG4pfSxGKCRuLCJDb21tZW50Tm9kZU1hcmdpbkNhbGN1bGF0b3IiLDE0ODUpLEQoMTQ4NiwxLHt9LHBLKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LEYoJG4sIkNvbW1lbnROb2RlTWFyZ2luQ2FsY3VsYXRvci9sYW1iZGEkMCRUeXBlIiwxNDg2KSxEKDE0ODcsMSxVbixiSyksbC50ZD1mdW5jdGlvbihlKXt1M24odShlLDEwKSl9LEYoJG4sIkNvbW1lbnROb2RlTWFyZ2luQ2FsY3VsYXRvci9sYW1iZGEkMSRUeXBlIiwxNDg3KSxEKDE0ODgsMSxvcyx3SyksbC5wZj1mdW5jdGlvbihlLG4pe2t2bih1KGUsMzcpLG4pfSxGKCRuLCJDb21tZW50UG9zdHByb2Nlc3NvciIsMTQ4OCksRCgxNDg5LDEsb3MsdkspLGwucGY9ZnVuY3Rpb24oZSxuKXtMNW4odShlLDM3KSxuKX0sRigkbiwiQ29tbWVudFByZXByb2Nlc3NvciIsMTQ4OSksRCgxNDkwLDEsb3MsbUspLGwucGY9ZnVuY3Rpb24oZSxuKXtHMm4odShlLDM3KSxuKX0sRigkbiwiQ29uc3RyYWludHNQb3N0cHJvY2Vzc29yIiwxNDkwKSxEKDE0OTEsMSxvcyx5SyksbC5wZj1mdW5jdGlvbihlLG4pe1pjbih1KGUsMzcpLG4pfSxGKCRuLCJFZGdlQW5kTGF5ZXJDb25zdHJhaW50RWRnZVJldmVyc2VyIiwxNDkxKSxEKDE0OTIsMSxvcyx4SyksbC5wZj1mdW5jdGlvbihlLG4peyRobih1KGUsMzcpLG4pfSxGKCRuLCJFbmRMYWJlbFBvc3Rwcm9jZXNzb3IiLDE0OTIpLEQoMTQ5MywxLHt9LGtLKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LEYoJG4sIkVuZExhYmVsUG9zdHByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNDkzKSxEKDE0OTQsMSxsaSxFSyksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gUHJuKHUoZSwxMCkpfSxGKCRuLCJFbmRMYWJlbFBvc3Rwcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTQ5NCksRCgxNDk1LDEsVW4sVEspLGwudGQ9ZnVuY3Rpb24oZSl7U2RuKHUoZSwxMCkpfSxGKCRuLCJFbmRMYWJlbFBvc3Rwcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTQ5NSksRCgxNDk2LDEsb3MsQ0spLGwucGY9ZnVuY3Rpb24oZSxuKXticG4odShlLDM3KSxuKX0sRigkbiwiRW5kTGFiZWxQcmVwcm9jZXNzb3IiLDE0OTYpLEQoMTQ5NywxLHt9LENMKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LEYoJG4sIkVuZExhYmVsUHJlcHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE0OTcpLEQoMTQ5OCwxLFVuLFBZdCksbC50ZD1mdW5jdGlvbihlKXtiWGUodGhpcy5hLHRoaXMuYix0aGlzLmMsdShlLDEwKSl9LGwuYT0wLGwuYj0wLGwuYz0hMSxGKCRuLCJFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNDk4KSxEKDE0OTksMSxsaSxfSyksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gVnQoUSh1KGUsNzApLChUZSgpLE9kKSkpPT09VnQoKE0xKCksRjcpKX0sRigkbiwiRW5kTGFiZWxQcmVwcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTQ5OSksRCgxNTAwLDEsVW4sUGMpLGwudGQ9ZnVuY3Rpb24oZSl7cmkodGhpcy5hLHUoZSw3MCkpfSxGKCRuLCJFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkMyRUeXBlIiwxNTAwKSxEKDE1MDEsMSxsaSxTSyksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gVnQoUSh1KGUsNzApLChUZSgpLE9kKSkpPT09VnQoKE0xKCksWnkpKX0sRigkbiwiRW5kTGFiZWxQcmVwcm9jZXNzb3IvbGFtYmRhJDQkVHlwZSIsMTUwMSksRCgxNTAyLDEsVW4sWmEpLGwudGQ9ZnVuY3Rpb24oZSl7cmkodGhpcy5hLHUoZSw3MCkpfSxGKCRuLCJFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkNSRUeXBlIiwxNTAyKSxEKDE1NTEsMSxvcyxVSiksbC5wZj1mdW5jdGlvbihlLG4pe1lsbih1KGUsMzcpLG4pfTt2YXIgZTJlO0YoJG4sIkVuZExhYmVsU29ydGVyIiwxNTUxKSxEKDE1NTIsMSxPaSxOVCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBUZm4odShlLDQ1NiksdShuLDQ1NikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoJG4sIkVuZExhYmVsU29ydGVyLzEiLDE1NTIpLEQoNDU2LDEsezQ1NjoxfSx0UXQpLEYoJG4sIkVuZExhYmVsU29ydGVyL0xhYmVsR3JvdXAiLDQ1NiksRCgxNTUzLDEse30sY04pLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIEVNKCksbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwyOSkuYSwxNikpfSxGKCRuLCJFbmRMYWJlbFNvcnRlci9sYW1iZGEkMCRUeXBlIiwxNTUzKSxEKDE1NTQsMSxsaSxLNSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gRU0oKSx1KGUsMTApLms9PShWbigpLE9zKX0sRigkbiwiRW5kTGFiZWxTb3J0ZXIvbGFtYmRhJDEkVHlwZSIsMTU1NCksRCgxNTU1LDEsVW4sQUspLGwudGQ9ZnVuY3Rpb24oZSl7U2duKHUoZSwxMCkpfSxGKCRuLCJFbmRMYWJlbFNvcnRlci9sYW1iZGEkMiRUeXBlIiwxNTU1KSxEKDE1NTYsMSxsaSxMSyksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gRU0oKSxWdChRKHUoZSw3MCksKFRlKCksT2QpKSk9PT1WdCgoTTEoKSxaeSkpfSxGKCRuLCJFbmRMYWJlbFNvcnRlci9sYW1iZGEkMyRUeXBlIiwxNTU2KSxEKDE1NTcsMSxsaSxNSyksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gRU0oKSxWdChRKHUoZSw3MCksKFRlKCksT2QpKSk9PT1WdCgoTTEoKSxGNykpfSxGKCRuLCJFbmRMYWJlbFNvcnRlci9sYW1iZGEkNCRUeXBlIiwxNTU3KSxEKDE1MDMsMSxvcyxESyksbC5wZj1mdW5jdGlvbihlLG4pe3kzbih0aGlzLHUoZSwzNykpfSxsLmI9MCxsLmM9MCxGKCRuLCJGaW5hbFNwbGluZUJlbmRwb2ludHNDYWxjdWxhdG9yIiwxNTAzKSxEKDE1MDQsMSx7fSxJSyksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwyOSkuYSwxNikpfSxGKCRuLCJGaW5hbFNwbGluZUJlbmRwb2ludHNDYWxjdWxhdG9yL2xhbWJkYSQwJFR5cGUiLDE1MDQpLEQoMTUwNSwxLHt9LEJUKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgancobmV3IGFyKGxyKERzKHUoZSwxMCkpLmEuS2MoKSxuZXcgeikpKSl9LEYoJG4sIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDEkVHlwZSIsMTUwNSksRCgxNTA2LDEsbGksX0wpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIUdhKHUoZSwxNykpfSxGKCRuLCJGaW5hbFNwbGluZUJlbmRwb2ludHNDYWxjdWxhdG9yL2xhbWJkYSQyJFR5cGUiLDE1MDYpLEQoMTUwNywxLGxpLHVOKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBVcyh1KGUsMTcpLChhZSgpLFIyKSl9LEYoJG4sIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDMkVHlwZSIsMTUwNyksRCgxNTA4LDEsVW4sbWMpLGwudGQ9ZnVuY3Rpb24oZSl7T21uKHRoaXMuYSx1KGUsMTI4KSl9LEYoJG4sIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDQkVHlwZSIsMTUwOCksRCgxNTA5LDEsVW4sQzMpLGwudGQ9ZnVuY3Rpb24oZSl7WXN0KHUoZSwxNykuYSl9LEYoJG4sIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDUkVHlwZSIsMTUwOSksRCg3OTIsMSxvcyxUYSksbC5wZj1mdW5jdGlvbihlLG4pe2Q0bih0aGlzLHUoZSwzNyksbil9LEYoJG4sIkdyYXBoVHJhbnNmb3JtZXIiLDc5MiksRCg1MTEsMjIsezM6MSwzNToxLDIyOjEsNTExOjF9LEZidCk7dmFyIGRsdCx5TyxuMmU9anIoJG4sIkdyYXBoVHJhbnNmb3JtZXIvTW9kZSIsNTExLEhyLG5pbixQdG4pLHIyZTtEKDE1MTAsMSxvcyxfMyksbC5wZj1mdW5jdGlvbihlLG4pe0h3bih1KGUsMzcpLG4pfSxGKCRuLCJIaWVyYXJjaGljYWxOb2RlUmVzaXppbmdQcm9jZXNzb3IiLDE1MTApLEQoMTUxMSwxLG9zLE9LKSxsLnBmPWZ1bmN0aW9uKGUsbil7VGNuKHUoZSwzNyksbil9LEYoJG4sIkhpZXJhcmNoaWNhbFBvcnRDb25zdHJhaW50UHJvY2Vzc29yIiwxNTExKSxEKDE1MTIsMSxPaSxvZiksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBGZm4odShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKCRuLCJIaWVyYXJjaGljYWxQb3J0Q29uc3RyYWludFByb2Nlc3Nvci9Ob2RlQ29tcGFyYXRvciIsMTUxMiksRCgxNTEzLDEsb3MsWDUpLGwucGY9ZnVuY3Rpb24oZSxuKXtWeW4odShlLDM3KSxuKX0sRigkbiwiSGllcmFyY2hpY2FsUG9ydER1bW15U2l6ZVByb2Nlc3NvciIsMTUxMyksRCgxNTE0LDEsb3MsUEspLGwucGY9ZnVuY3Rpb24oZSxuKXt6dm4odGhpcyx1KGUsMzcpLG4pfSxsLmE9MCxGKCRuLCJIaWVyYXJjaGljYWxQb3J0T3J0aG9nb25hbEVkZ2VSb3V0ZXIiLDE1MTQpLEQoMTUxNSwxLE9pLF9rKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFVRZSh1KGUsMTApLHUobiwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoJG4sIkhpZXJhcmNoaWNhbFBvcnRPcnRob2dvbmFsRWRnZVJvdXRlci8xIiwxNTE1KSxEKDE1MTYsMSxPaSx6ZCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBhb24odShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKCRuLCJIaWVyYXJjaGljYWxQb3J0T3J0aG9nb25hbEVkZ2VSb3V0ZXIvMiIsMTUxNiksRCgxNTE3LDEsb3MsRkspLGwucGY9ZnVuY3Rpb24oZSxuKXtmZ24odShlLDM3KSxuKX0sRigkbiwiSGllcmFyY2hpY2FsUG9ydFBvc2l0aW9uUHJvY2Vzc29yIiwxNTE3KSxEKDE1MTgsMSxvcyxZSiksbC5wZj1mdW5jdGlvbihlLG4pe294bih0aGlzLHUoZSwzNykpfSxsLmE9MCxsLmM9MDt2YXIgbVYseVY7RigkbiwiSGlnaERlZ3JlZU5vZGVMYXllcmluZ1Byb2Nlc3NvciIsMTUxOCksRCg1NzEsMSx7NTcxOjF9LE5LKSxsLmI9LTEsbC5kPS0xLEYoJG4sIkhpZ2hEZWdyZWVOb2RlTGF5ZXJpbmdQcm9jZXNzb3IvSGlnaERlZ3JlZU5vZGVJbmZvcm1hdGlvbiIsNTcxKSxEKDE1MTksMSx7fSxCSyksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gS00oKSxqbyh1KGUsMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LEYoJG4sIkhpZ2hEZWdyZWVOb2RlTGF5ZXJpbmdQcm9jZXNzb3IvbGFtYmRhJDAkVHlwZSIsMTUxOSksRCgxNTIwLDEse30sUkspLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIEtNKCksRHModShlLDEwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxGKCRuLCJIaWdoRGVncmVlTm9kZUxheWVyaW5nUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE1MjApLEQoMTUyNiwxLG9zLFJUKSxsLnBmPWZ1bmN0aW9uKGUsbil7dnluKHRoaXMsdShlLDM3KSxuKX0sRigkbiwiSHlwZXJlZGdlRHVtbXlNZXJnZXIiLDE1MjYpLEQoNzkzLDEse30sQ3d0KSxsLmE9ITEsbC5iPSExLGwuYz0hMSxGKCRuLCJIeXBlcmVkZ2VEdW1teU1lcmdlci9NZXJnZVN0YXRlIiw3OTMpLEQoMTUyNywxLHt9LFNMKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LEYoJG4sIkh5cGVyZWRnZUR1bW15TWVyZ2VyL2xhbWJkYSQwJFR5cGUiLDE1MjcpLEQoMTUyOCwxLHt9LGxOKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDEwKS5qLDE2KSl9LEYoJG4sIkh5cGVyZWRnZUR1bW15TWVyZ2VyL2xhbWJkYSQxJFR5cGUiLDE1MjgpLEQoMTUyOSwxLFVuLEFMKSxsLnRkPWZ1bmN0aW9uKGUpe3UoZSwxMSkucD0tMX0sRigkbiwiSHlwZXJlZGdlRHVtbXlNZXJnZXIvbGFtYmRhJDIkVHlwZSIsMTUyOSksRCgxNTMwLDEsb3MsUTUpLGwucGY9ZnVuY3Rpb24oZSxuKXtieW4odShlLDM3KSxuKX0sRigkbiwiSHlwZXJub2Rlc1Byb2Nlc3NvciIsMTUzMCksRCgxNTMxLDEsb3MsakspLGwucGY9ZnVuY3Rpb24oZSxuKXt3eW4odShlLDM3KSxuKX0sRigkbiwiSW5MYXllckNvbnN0cmFpbnRQcm9jZXNzb3IiLDE1MzEpLEQoMTUzMiwxLG9zLGhOKSxsLnBmPWZ1bmN0aW9uKGUsbil7V2NuKHUoZSwzNyksbil9LEYoJG4sIklubmVybW9zdE5vZGVNYXJnaW5DYWxjdWxhdG9yIiwxNTMyKSxEKDE1MzMsMSxvcyxmTiksbC5wZj1mdW5jdGlvbihlLG4pe1Q1bih0aGlzLHUoZSwzNykpfSxsLmE9Q3MsbC5iPUNzLGwuYz1hcyxsLmQ9YXM7dmFyIHU2bj1GKCRuLCJJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIiLDE1MzMpO0QoMTUzNCwxLHt9LCRLKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTcpLmQuaX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LEYoJG4sIkludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lci9sYW1iZGEkMCRUeXBlIiwxNTM0KSxEKDE1MzUsMSx7fSxKYSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gS1FlKHRoaXMuYSx5ZShlKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxGKCRuLCJJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIvbGFtYmRhJDEkVHlwZSIsMTUzNSksRCgxNTM2LDEse30sekspLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxNykuYy5pfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sRigkbiwiSW50ZXJhY3RpdmVFeHRlcm5hbFBvcnRQb3NpdGlvbmVyL2xhbWJkYSQyJFR5cGUiLDE1MzYpLEQoMTUzNywxLHt9LG1sKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBYUWUodGhpcy5hLHllKGUpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LEYoJG4sIkludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lci9sYW1iZGEkMyRUeXBlIiwxNTM3KSxEKDE1MzgsMSx7fSxxZiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4galplKHRoaXMuYSx5ZShlKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxGKCRuLCJJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIvbGFtYmRhJDQkVHlwZSIsMTUzOCksRCgxNTM5LDEse30sQ3ApLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuICRaZSh0aGlzLmEseWUoZSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sRigkbiwiSW50ZXJhY3RpdmVFeHRlcm5hbFBvcnRQb3NpdGlvbmVyL2xhbWJkYSQ1JFR5cGUiLDE1MzkpLEQoNzcsMjIsezM6MSwzNToxLDIyOjEsNzc6MSwyMzQ6MX0sbXMpLGwuS2Y9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5nKXtjYXNlIDE1OnJldHVybiBuZXcgclE7Y2FzZSAyMjpyZXR1cm4gbmV3IGlRO2Nhc2UgNDc6cmV0dXJuIG5ldyBvUTtjYXNlIDI4OmNhc2UgMzU6cmV0dXJuIG5ldyBTMztjYXNlIDMyOnJldHVybiBuZXcgQ2s7Y2FzZSA0MjpyZXR1cm4gbmV3IHdLO2Nhc2UgMTpyZXR1cm4gbmV3IHZLO2Nhc2UgNDE6cmV0dXJuIG5ldyBtSztjYXNlIDU2OnJldHVybiBuZXcgVGEoKFg4KCkseU8pKTtjYXNlIDA6cmV0dXJuIG5ldyBUYSgoWDgoKSxkbHQpKTtjYXNlIDI6cmV0dXJuIG5ldyB5SztjYXNlIDU0OnJldHVybiBuZXcgeEs7Y2FzZSAzMzpyZXR1cm4gbmV3IENLO2Nhc2UgNTE6cmV0dXJuIG5ldyBESztjYXNlIDU1OnJldHVybiBuZXcgXzM7Y2FzZSAxMzpyZXR1cm4gbmV3IE9LO2Nhc2UgMzg6cmV0dXJuIG5ldyBYNTtjYXNlIDQ0OnJldHVybiBuZXcgUEs7Y2FzZSA0MDpyZXR1cm4gbmV3IEZLO2Nhc2UgOTpyZXR1cm4gbmV3IFlKO2Nhc2UgNDk6cmV0dXJuIG5ldyB5V3Q7Y2FzZSAzNzpyZXR1cm4gbmV3IFJUO2Nhc2UgNDM6cmV0dXJuIG5ldyBRNTtjYXNlIDI3OnJldHVybiBuZXcgaks7Y2FzZSAzMDpyZXR1cm4gbmV3IGhOO2Nhc2UgMzpyZXR1cm4gbmV3IGZOO2Nhc2UgMTg6cmV0dXJuIG5ldyBISztjYXNlIDI5OnJldHVybiBuZXcgVks7Y2FzZSA1OnJldHVybiBuZXcgekI7Y2FzZSA1MDpyZXR1cm4gbmV3IHFLO2Nhc2UgMzQ6cmV0dXJuIG5ldyBLSjtjYXNlIDM2OnJldHVybiBuZXcgU2s7Y2FzZSA1MjpyZXR1cm4gbmV3IFVKO2Nhc2UgMTE6cmV0dXJuIG5ldyB5bTtjYXNlIDc6cmV0dXJuIG5ldyBRSjtjYXNlIDM5OnJldHVybiBuZXcgQWs7Y2FzZSA0NTpyZXR1cm4gbmV3IFlLO2Nhc2UgMTY6cmV0dXJuIG5ldyBqVDtjYXNlIDEwOnJldHVybiBuZXcgc2Q7Y2FzZSA0ODpyZXR1cm4gbmV3IE1MO2Nhc2UgMjE6cmV0dXJuIG5ldyBMaztjYXNlIDIzOnJldHVybiBuZXcgZGV0KChldigpLEZTKSk7Y2FzZSA4OnJldHVybiBuZXcgYk47Y2FzZSAxMjpyZXR1cm4gbmV3IElMO2Nhc2UgNDpyZXR1cm4gbmV3IFhLO2Nhc2UgMTk6cmV0dXJuIG5ldyB3QztjYXNlIDE3OnJldHVybiBuZXcgZVg7Y2FzZSA1MzpyZXR1cm4gbmV3IG5YO2Nhc2UgNjpyZXR1cm4gbmV3IEVOO2Nhc2UgMjU6cmV0dXJuIG5ldyBUcXQ7Y2FzZSA0NjpyZXR1cm4gbmV3IGFYO2Nhc2UgMzE6cmV0dXJuIG5ldyBpWXQ7Y2FzZSAxNDpyZXR1cm4gbmV3IFBMO2Nhc2UgMjY6cmV0dXJuIG5ldyBsUTtjYXNlIDIwOnJldHVybiBuZXcgZ1g7Y2FzZSAyNDpyZXR1cm4gbmV3IGRldCgoZXYoKSxURykpO2RlZmF1bHQ6dGhyb3cgaXQobmV3IEZuKFlvdCsodGhpcy5mIT1udWxsP3RoaXMuZjoiIit0aGlzLmcpKSl9fTt2YXIgVjd0LEc3dCxVN3QsVzd0LFk3dCxLN3QsWDd0LFE3dCxaN3QsSjd0LGdTLHhWLGtWLHRUdCxlVHQsblR0LHJUdCxpVHQsc1R0LGFUdCxwUyxvVHQsY1R0LHVUdCxsVHQsaFR0LGdsdCxFVixUVixmVHQsQ1YsX1YsU1YsdTcsbDcsaDcsZFR0LEFWLExWLGdUdCxNVixEVixwVHQsYlR0LHdUdCx2VHQsSVYscGx0LHhPLE9WLFBWLEZWLE5WLG1UdCx5VHQseFR0LGtUdCxsNm49anIoJG4sVDZ0LDc3LEhyLFljZSxPdG4pLGkyZTtEKDE1NDAsMSxvcyxISyksbC5wZj1mdW5jdGlvbihlLG4pe181bih1KGUsMzcpLG4pfSxGKCRuLCJJbnZlcnRlZFBvcnRQcm9jZXNzb3IiLDE1NDApLEQoMTU0MSwxLG9zLFZLKSxsLnBmPWZ1bmN0aW9uKGUsbil7X21uKHUoZSwzNyksbil9LEYoJG4sIkxhYmVsQW5kTm9kZVNpemVQcm9jZXNzb3IiLDE1NDEpLEQoMTU0MiwxLGxpLEdLKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTApLms9PShWbigpLE9zKX0sRigkbiwiTGFiZWxBbmROb2RlU2l6ZVByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNTQyKSxEKDE1NDMsMSxsaSxxZCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEwKS5rPT0oVm4oKSxrcyl9LEYoJG4sIkxhYmVsQW5kTm9kZVNpemVQcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTU0MyksRCgxNTQ0LDEsVW4sRll0KSxsLnRkPWZ1bmN0aW9uKGUpe3dYZSh0aGlzLmIsdGhpcy5hLHRoaXMuYyx1KGUsMTApKX0sbC5hPSExLGwuYz0hMSxGKCRuLCJMYWJlbEFuZE5vZGVTaXplUHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUiLDE1NDQpLEQoMTU0NSwxLG9zLHpCKSxsLnBmPWZ1bmN0aW9uKGUsbil7WDRuKHUoZSwzNyksbil9O3ZhciBzMmU7RigkbiwiTGFiZWxEdW1teUluc2VydGVyIiwxNTQ1KSxEKDE1NDYsMSx4ZCxkdyksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gVnQoUSh1KGUsNzApLChUZSgpLE9kKSkpPT09VnQoKE0xKCksUDcpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFZ0KFEodShlLDcwKSwoVGUoKSxPZCkpKT09PVZ0KChNMSgpLFA3KSl9LEYoJG4sIkxhYmVsRHVtbXlJbnNlcnRlci8xIiwxNTQ2KSxEKDE1NDcsMSxvcyxxSyksbC5wZj1mdW5jdGlvbihlLG4pe1ozbih1KGUsMzcpLG4pfSxGKCRuLCJMYWJlbER1bW15UmVtb3ZlciIsMTU0NyksRCgxNTQ4LDEsbGksVUspLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGplKFJlKFEodShlLDcwKSwoVGUoKSxyaHQpKSkpfSxGKCRuLCJMYWJlbER1bW15UmVtb3Zlci9sYW1iZGEkMCRUeXBlIiwxNTQ4KSxEKDEzNTksMSxvcyxLSiksbC5wZj1mdW5jdGlvbihlLG4pe1M0bih0aGlzLHUoZSwzNyksbil9LGwuYT1udWxsO3ZhciBibHQ7RigkbiwiTGFiZWxEdW1teVN3aXRjaGVyIiwxMzU5KSxEKDI4NiwxLHsyODY6MX0sVXVlKSxsLmM9MCxsLmQ9bnVsbCxsLmY9MCxGKCRuLCJMYWJlbER1bW15U3dpdGNoZXIvTGFiZWxEdW1teUluZm8iLDI4NiksRCgxMzYwLDEse30sZE4pLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHI2KCksbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwyOSkuYSwxNikpfSxGKCRuLCJMYWJlbER1bW15U3dpdGNoZXIvbGFtYmRhJDAkVHlwZSIsMTM2MCksRCgxMzYxLDEsbGksZ04pLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHI2KCksdShlLDEwKS5rPT0oVm4oKSxMbCl9LEYoJG4sIkxhYmVsRHVtbXlTd2l0Y2hlci9sYW1iZGEkMSRUeXBlIiwxMzYxKSxEKDEzNjIsMSx7fSxfZyksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gQVplKHRoaXMuYSx1KGUsMTApKX0sRigkbiwiTGFiZWxEdW1teVN3aXRjaGVyL2xhbWJkYSQyJFR5cGUiLDEzNjIpLEQoMTM2MywxLFVuLGNkKSxsLnRkPWZ1bmN0aW9uKGUpe1Nubih0aGlzLmEsdShlLDI4NikpfSxGKCRuLCJMYWJlbER1bW15U3dpdGNoZXIvbGFtYmRhJDMkVHlwZSIsMTM2MyksRCgxMzY0LDEsT2ksV0spLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZW5uKHUoZSwyODYpLHUobiwyODYpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKCRuLCJMYWJlbER1bW15U3dpdGNoZXIvbGFtYmRhJDQkVHlwZSIsMTM2NCksRCg3OTEsMSxvcyxTMyksbC5wZj1mdW5jdGlvbihlLG4pe1Jhbih1KGUsMzcpLG4pfSxGKCRuLCJMYWJlbE1hbmFnZW1lbnRQcm9jZXNzb3IiLDc5MSksRCgxNTQ5LDEsb3MsU2spLGwucGY9ZnVuY3Rpb24oZSxuKXt1dm4odShlLDM3KSxuKX0sRigkbiwiTGFiZWxTaWRlU2VsZWN0b3IiLDE1NDkpLEQoMTU1MCwxLGxpLExMKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBqZShSZShRKHUoZSw3MCksKFRlKCkscmh0KSkpKX0sRigkbiwiTGFiZWxTaWRlU2VsZWN0b3IvbGFtYmRhJDAkVHlwZSIsMTU1MCksRCgxNTU4LDEsb3MseW0pLGwucGY9ZnVuY3Rpb24oZSxuKXtHeW4odShlLDM3KSxuKX0sRigkbiwiTGF5ZXJDb25zdHJhaW50UG9zdHByb2Nlc3NvciIsMTU1OCksRCgxNTU5LDEsb3MsUUopLGwucGY9ZnVuY3Rpb24oZSxuKXtzMm4odShlLDM3KSxuKX07dmFyIEVUdDtGKCRuLCJMYXllckNvbnN0cmFpbnRQcmVwcm9jZXNzb3IiLDE1NTkpLEQoMzYwLDIyLHszOjEsMzU6MSwyMjoxLDM2MDoxfSx0aik7dmFyIGtPLEJWLFJWLHdsdCxhMmU9anIoJG4sIkxheWVyQ29uc3RyYWludFByZXByb2Nlc3Nvci9IaWRkZW5Ob2RlQ29ubmVjdGlvbnMiLDM2MCxIcixEc24sVEplKSxvMmU7RCgxNTYwLDEsb3MsQWspLGwucGY9ZnVuY3Rpb24oZSxuKXtLM24odShlLDM3KSxuKX0sRigkbiwiTGF5ZXJTaXplQW5kR3JhcGhIZWlnaHRDYWxjdWxhdG9yIiwxNTYwKSxEKDE1NjEsMSxvcyxZSyksbC5wZj1mdW5jdGlvbihlLG4pe1oybih1KGUsMzcpLG4pfSxGKCRuLCJMb25nRWRnZUpvaW5lciIsMTU2MSksRCgxNTYyLDEsb3MsalQpLGwucGY9ZnVuY3Rpb24oZSxuKXtNM24odShlLDM3KSxuKX0sRigkbiwiTG9uZ0VkZ2VTcGxpdHRlciIsMTU2MiksRCgxNTYzLDEsb3Msc2QpLGwucGY9ZnVuY3Rpb24oZSxuKXtNNG4odGhpcyx1KGUsMzcpLG4pfSxsLmQ9MCxsLmU9MCxsLmk9MCxsLmo9MCxsLms9MCxsLm49MCxGKCRuLCJOb2RlUHJvbW90aW9uIiwxNTYzKSxEKDE1NjQsMSx7fSxwTiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDQ2KSxObigpLCEwfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sRigkbiwiTm9kZVByb21vdGlvbi9sYW1iZGEkMCRUeXBlIiwxNTY0KSxEKDE1NjUsMSx7fSxfcCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gWW5uKHRoaXMuYSx1KGUsNDYpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuYT0wLEYoJG4sIk5vZGVQcm9tb3Rpb24vbGFtYmRhJDEkVHlwZSIsMTU2NSksRCgxNTY2LDEse30sSGYpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIEtubih0aGlzLmEsdShlLDQ2KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLmE9MCxGKCRuLCJOb2RlUHJvbW90aW9uL2xhbWJkYSQyJFR5cGUiLDE1NjYpLEQoMTU2NywxLG9zLE1MKSxsLnBmPWZ1bmN0aW9uKGUsbil7dHhuKHUoZSwzNyksbil9LEYoJG4sIk5vcnRoU291dGhQb3J0UG9zdHByb2Nlc3NvciIsMTU2NyksRCgxNTY4LDEsb3MsTGspLGwucGY9ZnVuY3Rpb24oZSxuKXtqNW4odShlLDM3KSxuKX0sRigkbiwiTm9ydGhTb3V0aFBvcnRQcmVwcm9jZXNzb3IiLDE1NjgpLEQoMTU2OSwxLE9pLERMKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGd1bih1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoJG4sIk5vcnRoU291dGhQb3J0UHJlcHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE1NjkpLEQoMTU3MCwxLG9zLGJOKSxsLnBmPWZ1bmN0aW9uKGUsbil7bnluKHUoZSwzNyksbil9LEYoJG4sIlBhcnRpdGlvbk1pZHByb2Nlc3NvciIsMTU3MCksRCgxNTcxLDEsbGksS0spLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFVzKHUoZSwxMCksKFRlKCksVDcpKX0sRigkbiwiUGFydGl0aW9uTWlkcHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE1NzEpLEQoMTU3MiwxLFVuLG13KSxsLnRkPWZ1bmN0aW9uKGUpe3dybih0aGlzLmEsdShlLDEwKSl9LEYoJG4sIlBhcnRpdGlvbk1pZHByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNTcyKSxEKDE1NzMsMSxvcyxJTCksbC5wZj1mdW5jdGlvbihlLG4pe3Z3bih1KGUsMzcpLG4pfSxGKCRuLCJQYXJ0aXRpb25Qb3N0cHJvY2Vzc29yIiwxNTczKSxEKDE1NzQsMSxvcyxYSyksbC5wZj1mdW5jdGlvbihlLG4pe0Fibih1KGUsMzcpLG4pfSxGKCRuLCJQYXJ0aXRpb25QcmVwcm9jZXNzb3IiLDE1NzQpLEQoMTU3NSwxLGxpLFFLKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBVcyh1KGUsMTApLChUZSgpLFQ3KSl9LEYoJG4sIlBhcnRpdGlvblByZXByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNTc1KSxEKDE1NzYsMSx7fSx3TiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IGp3KG5ldyBhcihscihEcyh1KGUsMTApKS5hLktjKCksbmV3IHopKSkpfSxGKCRuLCJQYXJ0aXRpb25QcmVwcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTU3NiksRCgxNTc3LDEsbGksWjUpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHhmbih1KGUsMTcpKX0sRigkbiwiUGFydGl0aW9uUHJlcHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUiLDE1NzcpLEQoMTU3OCwxLFVuLHZOKSxsLnRkPWZ1bmN0aW9uKGUpe1R1bih1KGUsMTcpKX0sRigkbiwiUGFydGl0aW9uUHJlcHJvY2Vzc29yL2xhbWJkYSQzJFR5cGUiLDE1NzgpLEQoMTU3OSwxLG9zLHdDKSxsLnBmPWZ1bmN0aW9uKGUsbil7JG1uKHUoZSwzNyksbil9O3ZhciBUVHQsYzJlLHUyZSxsMmUsQ1R0LF9UdDtGKCRuLCJQb3J0TGlzdFNvcnRlciIsMTU3OSksRCgxNTgwLDEse30sSjUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG9FKCksdShlLDExKS5lfSxGKCRuLCJQb3J0TGlzdFNvcnRlci9sYW1iZGEkMCRUeXBlIiwxNTgwKSxEKDE1ODEsMSx7fSxaSyksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gb0UoKSx1KGUsMTEpLmd9LEYoJG4sIlBvcnRMaXN0U29ydGVyL2xhbWJkYSQxJFR5cGUiLDE1ODEpLEQoMTU4MiwxLE9pLE9MKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGFKdCh1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoJG4sIlBvcnRMaXN0U29ydGVyL2xhbWJkYSQyJFR5cGUiLDE1ODIpLEQoMTU4MywxLE9pLEpLKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEcxbih1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoJG4sIlBvcnRMaXN0U29ydGVyL2xhbWJkYSQzJFR5cGUiLDE1ODMpLEQoMTU4NCwxLE9pLHRYKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHBsZSh1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoJG4sIlBvcnRMaXN0U29ydGVyL2xhbWJkYSQ0JFR5cGUiLDE1ODQpLEQoMTU4NSwxLG9zLGVYKSxsLnBmPWZ1bmN0aW9uKGUsbil7SmJuKHUoZSwzNyksbil9LEYoJG4sIlBvcnRTaWRlUHJvY2Vzc29yIiwxNTg1KSxEKDE1ODYsMSxvcyxuWCksbC5wZj1mdW5jdGlvbihlLG4pe3Rtbih1KGUsMzcpLG4pfSxGKCRuLCJSZXZlcnNlZEVkZ2VSZXN0b3JlciIsMTU4NiksRCgxNTkxLDEsb3MsVHF0KSxsLnBmPWZ1bmN0aW9uKGUsbil7TDFuKHRoaXMsdShlLDM3KSxuKX0sRigkbiwiU2VsZkxvb3BQb3J0UmVzdG9yZXIiLDE1OTEpLEQoMTU5MiwxLHt9LG1OKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LEYoJG4sIlNlbGZMb29wUG9ydFJlc3RvcmVyL2xhbWJkYSQwJFR5cGUiLDE1OTIpLEQoMTU5MywxLGxpLHJYKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTApLms9PShWbigpLE9zKX0sRigkbiwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDEkVHlwZSIsMTU5MyksRCgxNTk0LDEsbGksaVgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFVzKHUoZSwxMCksKGFlKCkseDcpKX0sRigkbiwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDIkVHlwZSIsMTU5NCksRCgxNTk1LDEse30sc1gpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoUSh1KGUsMTApLChhZSgpLHg3KSksNDAzKX0sRigkbiwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDMkVHlwZSIsMTU5NSksRCgxNTk2LDEsVW4sTG0pLGwudGQ9ZnVuY3Rpb24oZSl7UmduKHRoaXMuYSx1KGUsNDAzKSl9LEYoJG4sIlNlbGZMb29wUG9ydFJlc3RvcmVyL2xhbWJkYSQ0JFR5cGUiLDE1OTYpLEQoNzk0LDEsVW4seU4pLGwudGQ9ZnVuY3Rpb24oZSl7SmduKHUoZSwxMDEpKX0sRigkbiwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDUkVHlwZSIsNzk0KSxEKDE1OTcsMSxvcyxhWCksbC5wZj1mdW5jdGlvbihlLG4pe1Jmbih1KGUsMzcpLG4pfSxGKCRuLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IiLDE1OTcpLEQoMTU5OCwxLHt9LG9YKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LEYoJG4sIlNlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNTk4KSxEKDE1OTksMSxsaSxjWCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEwKS5rPT0oVm4oKSxPcyl9LEYoJG4sIlNlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNTk5KSxEKDE2MDAsMSxsaSx4TiksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gVXModShlLDEwKSwoYWUoKSx4NykpfSxGKCRuLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTYwMCksRCgxNjAxLDEsVW4sdVgpLGwudGQ9ZnVuY3Rpb24oZSl7R2RuKHUoZSwxMCkpfSxGKCRuLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTYwMSksRCgxNjAyLDEse30sbFgpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih1KGUsMTAxKS5mLDEpKX0sRigkbiwiU2VsZkxvb3BQb3N0UHJvY2Vzc29yL2xhbWJkYSQ0JFR5cGUiLDE2MDIpLEQoMTYwMywxLFVuLHh4KSxsLnRkPWZ1bmN0aW9uKGUpe1Bzbih0aGlzLmEsdShlLDQwOSkpfSxGKCRuLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDUkVHlwZSIsMTYwMyksRCgxNjA0LDEsbGksa04pLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuISF1KGUsMTAxKS5pfSxGKCRuLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDYkVHlwZSIsMTYwNCksRCgxNjA1LDEsVW4sRjMpLGwudGQ9ZnVuY3Rpb24oZSl7dktlKHRoaXMuYSx1KGUsMTAxKSl9LEYoJG4sIlNlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkNyRUeXBlIiwxNjA1KSxEKDE1ODcsMSxvcyxFTiksbC5wZj1mdW5jdGlvbihlLG4pe0Qybih1KGUsMzcpLG4pfSxGKCRuLCJTZWxmTG9vcFByZVByb2Nlc3NvciIsMTU4NyksRCgxNTg4LDEse30sVE4pLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih1KGUsMTAxKS5mLDEpKX0sRigkbiwiU2VsZkxvb3BQcmVQcm9jZXNzb3IvbGFtYmRhJDAkVHlwZSIsMTU4OCksRCgxNTg5LDEse30saFgpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw0MDkpLmF9LEYoJG4sIlNlbGZMb29wUHJlUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE1ODkpLEQoMTU5MCwxLFVuLGZYKSxsLnRkPWZ1bmN0aW9uKGUpe0VRZSh1KGUsMTcpKX0sRigkbiwiU2VsZkxvb3BQcmVQcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTU5MCksRCgxNjA2LDEsb3MsaVl0KSxsLnBmPWZ1bmN0aW9uKGUsbil7QWduKHRoaXMsdShlLDM3KSxuKX0sRigkbiwiU2VsZkxvb3BSb3V0ZXIiLDE2MDYpLEQoMTYwNywxLHt9LE1rKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LEYoJG4sIlNlbGZMb29wUm91dGVyL2xhbWJkYSQwJFR5cGUiLDE2MDcpLEQoMTYwOCwxLGxpLHR4KSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTApLms9PShWbigpLE9zKX0sRigkbiwiU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDEkVHlwZSIsMTYwOCksRCgxNjA5LDEsbGksJFQpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFVzKHUoZSwxMCksKGFlKCkseDcpKX0sRigkbiwiU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDIkVHlwZSIsMTYwOSksRCgxNjEwLDEse30sZFgpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoUSh1KGUsMTApLChhZSgpLHg3KSksNDAzKX0sRigkbiwiU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDMkVHlwZSIsMTYxMCksRCgxNjExLDEsVW4sdEd0KSxsLnRkPWZ1bmN0aW9uKGUpe2Nybih0aGlzLmEsdGhpcy5iLHUoZSw0MDMpKX0sRigkbiwiU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDQkVHlwZSIsMTYxMSksRCgxNjEyLDEsb3MsUEwpLGwucGY9ZnVuY3Rpb24oZSxuKXtRd24odShlLDM3KSxuKX0sRigkbiwiU2VtaUludGVyYWN0aXZlQ3Jvc3NNaW5Qcm9jZXNzb3IiLDE2MTIpLEQoMTYxMywxLGxpLHpUKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTApLms9PShWbigpLE9zKX0sRigkbiwiU2VtaUludGVyYWN0aXZlQ3Jvc3NNaW5Qcm9jZXNzb3IvbGFtYmRhJDAkVHlwZSIsMTYxMyksRCgxNjE0LDEsbGksRkwpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHlLdCh1KGUsMTApKS5fYigoVGUoKSxVeSkpfSxGKCRuLCJTZW1pSW50ZXJhY3RpdmVDcm9zc01pblByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNjE0KSxEKDE2MTUsMSxPaSxDTiksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBfY24odShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKCRuLCJTZW1pSW50ZXJhY3RpdmVDcm9zc01pblByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxNjE1KSxEKDE2MTYsMSx7fSxfTiksbC5DZT1mdW5jdGlvbihlLG4pe3JldHVybiBDcm4odShlLDEwKSx1KG4sMTApKX0sRigkbiwiU2VtaUludGVyYWN0aXZlQ3Jvc3NNaW5Qcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTYxNiksRCgxNjE4LDEsb3MsZ1gpLGwucGY9ZnVuY3Rpb24oZSxuKXtVeW4odShlLDM3KSxuKX0sRigkbiwiU29ydEJ5SW5wdXRNb2RlbFByb2Nlc3NvciIsMTYxOCksRCgxNjE5LDEsbGkscFgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMSkuZy5jLmxlbmd0aCE9MH0sRigkbiwiU29ydEJ5SW5wdXRNb2RlbFByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNjE5KSxEKDE2MjAsMSxVbixreCksbC50ZD1mdW5jdGlvbihlKXtpcG4odGhpcy5hLHUoZSwxMSkpfSxGKCRuLCJTb3J0QnlJbnB1dE1vZGVsUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE2MjApLEQoMTY5Myw4MDMse30scG5lKSxsLk1lPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvO3N3aXRjaCh0aGlzLmM9ZSx0aGlzLmEuZyl7Y2FzZSAyOm49bmV3IGhlLGxzKFJpKG5ldyBUbihudWxsLG5ldyBfbih0aGlzLmMuYS5iLDE2KSksbmV3IE1OKSxuZXcgc0d0KHRoaXMsbikpLGhJKHRoaXMsbmV3IEFOKSx4dShuLG5ldyB3WCksbi5jPU50KFFuLERlLDEsMCw1LDEpLGxzKFJpKG5ldyBUbihudWxsLG5ldyBfbih0aGlzLmMuYS5iLDE2KSksbmV3IHZYKSxuZXcgTjMobikpLGhJKHRoaXMsbmV3IG1YKSx4dShuLG5ldyB5WCksbi5jPU50KFFuLERlLDEsMCw1LDEpLHI9UlV0KEFuZShsJChuZXcgVG4obnVsbCxuZXcgX24odGhpcy5jLmEuYiwxNikpLG5ldyBIZCh0aGlzKSkpLG5ldyB4WCksbHMobmV3IFRuKG51bGwsbmV3IF9uKHRoaXMuYy5hLmEsMTYpKSxuZXcgbkd0KHIsbikpLGhJKHRoaXMsbmV3IGtYKSx4dShuLG5ldyBiWCksbi5jPU50KFFuLERlLDEsMCw1LDEpO2JyZWFrO2Nhc2UgMzpzPW5ldyBoZSxoSSh0aGlzLG5ldyBTTiksbz1SVXQoQW5lKGwkKG5ldyBUbihudWxsLG5ldyBfbih0aGlzLmMuYS5iLDE2KSksbmV3IFNDKHRoaXMpKSksbmV3IExOKSxscyhSaShuZXcgVG4obnVsbCxuZXcgX24odGhpcy5jLmEuYiwxNikpLG5ldyBFWCksbmV3IGlHdChvLHMpKSxoSSh0aGlzLG5ldyBUWCkseHUocyxuZXcgQ1gpLHMuYz1OdChRbixEZSwxLDAsNSwxKTticmVhaztkZWZhdWx0OnRocm93IGl0KG5ldyB1cXQpfX0sbC5iPTAsRihfcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24iLDE2OTMpLEQoMTY5NCwxLHhkLFNOKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBfdCh1KGUsNTcpLmcsMTQ1KX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KHUoZSw1NykuZywxNDUpfSxGKF9zLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMCRUeXBlIiwxNjk0KSxEKDE2OTUsMSx7fSxTQyksbC5GZT1mdW5jdGlvbihlKXtyZXR1cm4gQnBuKHRoaXMuYSx1KGUsNTcpKX0sRihfcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDEkVHlwZSIsMTY5NSksRCgxNzAzLDEsVnEsZUd0KSxsLlZkPWZ1bmN0aW9uKCl7aF8odGhpcy5hLHRoaXMuYiwtMSl9LGwuYj0wLEYoX3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxMCRUeXBlIiwxNzAzKSxEKDE3MDUsMSx4ZCxBTiksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gX3QodShlLDU3KS5nLDE0NSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBfdCh1KGUsNTcpLmcsMTQ1KX0sRihfcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDExJFR5cGUiLDE3MDUpLEQoMTcwNiwxLFVuLHdYKSxsLnRkPWZ1bmN0aW9uKGUpe3UoZSwzNjUpLlZkKCl9LEYoX3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxMiRUeXBlIiwxNzA2KSxEKDE3MDcsMSxsaSx2WCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gX3QodShlLDU3KS5nLDEwKX0sRihfcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDEzJFR5cGUiLDE3MDcpLEQoMTcwOSwxLFVuLE4zKSxsLnRkPWZ1bmN0aW9uKGUpe2xobih0aGlzLmEsdShlLDU3KSl9LEYoX3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxNCRUeXBlIiwxNzA5KSxEKDE3MDgsMSxWcSx1R3QpLGwuVmQ9ZnVuY3Rpb24oKXtoXyh0aGlzLmIsdGhpcy5hLC0xKX0sbC5hPTAsRihfcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE1JFR5cGUiLDE3MDgpLEQoMTcxMCwxLHhkLG1YKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBfdCh1KGUsNTcpLmcsMTApfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gX3QodShlLDU3KS5nLDEwKX0sRihfcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE2JFR5cGUiLDE3MTApLEQoMTcxMSwxLFVuLHlYKSxsLnRkPWZ1bmN0aW9uKGUpe3UoZSwzNjUpLlZkKCl9LEYoX3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxNyRUeXBlIiwxNzExKSxEKDE3MTIsMSx7fSxIZCksbC5GZT1mdW5jdGlvbihlKXtyZXR1cm4gUnBuKHRoaXMuYSx1KGUsNTcpKX0sRihfcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE4JFR5cGUiLDE3MTIpLEQoMTcxMywxLHt9LHhYKSxsLkRlPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LEYoX3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxOSRUeXBlIiwxNzEzKSxEKDE2OTYsMSx7fSxMTiksbC5EZT1mdW5jdGlvbigpe3JldHVybiAwfSxGKF9zLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMiRUeXBlIiwxNjk2KSxEKDE3MTUsMSxVbixuR3QpLGwudGQ9ZnVuY3Rpb24oZSl7R2VuKHRoaXMuYSx0aGlzLmIsdShlLDMwNykpfSxsLmE9MCxGKF9zLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMjAkVHlwZSIsMTcxNSksRCgxNzE0LDEsVnEsckd0KSxsLlZkPWZ1bmN0aW9uKCl7Q2NlKHRoaXMuYSx0aGlzLmIsLTEpfSxsLmI9MCxGKF9zLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMjEkVHlwZSIsMTcxNCksRCgxNzE2LDEseGQsa1gpLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw1NyksITB9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsNTcpLCEwfSxGKF9zLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMjIkVHlwZSIsMTcxNiksRCgxNzE3LDEsVW4sYlgpLGwudGQ9ZnVuY3Rpb24oZSl7dShlLDM2NSkuVmQoKX0sRihfcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDIzJFR5cGUiLDE3MTcpLEQoMTY5NywxLGxpLEVYKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBfdCh1KGUsNTcpLmcsMTApfSxGKF9zLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMyRUeXBlIiwxNjk3KSxEKDE2OTksMSxVbixpR3QpLGwudGQ9ZnVuY3Rpb24oZSl7VWVuKHRoaXMuYSx0aGlzLmIsdShlLDU3KSl9LGwuYT0wLEYoX3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ0JFR5cGUiLDE2OTkpLEQoMTY5OCwxLFZxLGxHdCksbC5WZD1mdW5jdGlvbigpe2hfKHRoaXMuYix0aGlzLmEsLTEpfSxsLmE9MCxGKF9zLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkNSRUeXBlIiwxNjk4KSxEKDE3MDAsMSx4ZCxUWCksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDU3KSwhMH0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw1NyksITB9LEYoX3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ2JFR5cGUiLDE3MDApLEQoMTcwMSwxLFVuLENYKSxsLnRkPWZ1bmN0aW9uKGUpe3UoZSwzNjUpLlZkKCl9LEYoX3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ3JFR5cGUiLDE3MDEpLEQoMTcwMiwxLGxpLE1OKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBfdCh1KGUsNTcpLmcsMTQ1KX0sRihfcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDgkVHlwZSIsMTcwMiksRCgxNzA0LDEsVW4sc0d0KSxsLnRkPWZ1bmN0aW9uKGUpe0hvbih0aGlzLmEsdGhpcy5iLHUoZSw1NykpfSxGKF9zLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkOSRUeXBlIiwxNzA0KSxEKDE1MjEsMSxvcyx5V3QpLGwucGY9ZnVuY3Rpb24oZSxuKXtCM24odGhpcyx1KGUsMzcpLG4pfTt2YXIgaDJlO0YoX3MsIkhvcml6b250YWxHcmFwaENvbXBhY3RvciIsMTUyMSksRCgxNTIyLDEse30seTEpLGwuT2U9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG87cmV0dXJuIHFtdChlLG4pfHwocj10NChlKSxzPXQ0KG4pLHImJnIuaz09KFZuKCksa3MpfHxzJiZzLms9PShWbigpLGtzKSk/MDoobz11KFEodGhpcy5hLmEsKGFlKCksUTQpKSwzMDQpLFFRZShvLHI/ci5rOihWbigpLHRhKSxzP3MuazooVm4oKSx0YSkpKX0sbC5QZT1mdW5jdGlvbihlLG4pe3ZhciByLHMsbztyZXR1cm4gcW10KGUsbik/MToocj10NChlKSxzPXQ0KG4pLG89dShRKHRoaXMuYS5hLChhZSgpLFE0KSksMzA0KSxCMnQobyxyP3IuazooVm4oKSx0YSkscz9zLms6KFZuKCksdGEpKSl9LEYoX3MsIkhvcml6b250YWxHcmFwaENvbXBhY3Rvci8xIiwxNTIyKSxEKDE1MjMsMSx7fSxxVCksbC5OZT1mdW5jdGlvbihlLG4pe3JldHVybiBHQygpLGUuYS5pPT0wfSxGKF9zLCJIb3Jpem9udGFsR3JhcGhDb21wYWN0b3IvbGFtYmRhJDAkVHlwZSIsMTUyMyksRCgxNTI0LDEse30sVmQpLGwuTmU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4geHJuKHRoaXMuYSxlLG4pfSxGKF9zLCJIb3Jpem9udGFsR3JhcGhDb21wYWN0b3IvbGFtYmRhJDEkVHlwZSIsMTUyNCksRCgxNjY0LDEse30sdGVlKTt2YXIgZjJlLGQyZTtGKF9zLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyIiwxNjY0KSxEKDE2NzIsMSxsaSxfWCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbH0sRihfcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci8wbWV0aG9kcmVmJG5vbk51bGwkVHlwZSIsMTY3MiksRCgxNjY1LDEse30sU1gpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGRmKCksJG8oUSh1KHUoZSw1NykuZywxMCksKGFlKCksX2kpKSl9LEYoX3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDAkVHlwZSIsMTY2NSksRCgxNjY2LDEse30sRE4pLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGRmKCkscmllKHUodShlLDU3KS5nLDE0NSkpfSxGKF9zLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxJFR5cGUiLDE2NjYpLEQoMTY3NSwxLGxpLEFYKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBkZigpLF90KHUoZSw1NykuZywxMCl9LEYoX3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDEwJFR5cGUiLDE2NzUpLEQoMTY3NiwxLFVuLExYKSxsLnRkPWZ1bmN0aW9uKGUpe3lybih1KGUsNTcpKX0sRihfcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTEkVHlwZSIsMTY3NiksRCgxNjc3LDEsbGksTVgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGRmKCksX3QodShlLDU3KS5nLDE0NSl9LEYoX3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDEyJFR5cGUiLDE2NzcpLEQoMTY4MSwxLFVuLERYKSxsLnRkPWZ1bmN0aW9uKGUpe0Nsbih1KGUsNTcpKX0sRihfcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTMkVHlwZSIsMTY4MSksRCgxNjc4LDEsVW4sQUMpLGwudGQ9ZnVuY3Rpb24oZSl7S1hlKHRoaXMuYSx1KGUsOCkpfSxsLmE9MCxGKF9zLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxNCRUeXBlIiwxNjc4KSxEKDE2NzksMSxVbixZYiksbC50ZD1mdW5jdGlvbihlKXtRWGUodGhpcy5hLHUoZSwxMTApKX0sbC5hPTAsRihfcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTUkVHlwZSIsMTY3OSksRCgxNjgwLDEsVW4sZFIpLGwudGQ9ZnVuY3Rpb24oZSl7WFhlKHRoaXMuYSx1KGUsOCkpfSxsLmE9MCxGKF9zLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxNiRUeXBlIiwxNjgwKSxEKDE2ODIsMSx7fSxJWCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gZGYoKSxuZXcgVG4obnVsbCxuZXcgancobmV3IGFyKGxyKERzKHUoZSwxMCkpLmEuS2MoKSxuZXcgeikpKSl9LEYoX3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDE3JFR5cGUiLDE2ODIpLEQoMTY4MywxLGxpLE9YKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBkZigpLEdhKHUoZSwxNykpfSxGKF9zLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxOCRUeXBlIiwxNjgzKSxEKDE2ODQsMSxVbixIdHQpLGwudGQ9ZnVuY3Rpb24oZSl7RG9uKHRoaXMuYSx1KGUsMTcpKX0sRihfcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTkkVHlwZSIsMTY4NCksRCgxNjY4LDEsVW4sVnR0KSxsLnRkPWZ1bmN0aW9uKGUpe2hzbih0aGlzLmEsdShlLDE0NSkpfSxGKF9zLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyJFR5cGUiLDE2NjgpLEQoMTY4NSwxLHt9LElOKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBkZigpLG5ldyBUbihudWxsLG5ldyBfbih1KGUsMjkpLmEsMTYpKX0sRihfcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMjAkVHlwZSIsMTY4NSksRCgxNjg2LDEse30sUFgpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGRmKCksbmV3IFRuKG51bGwsbmV3IGp3KG5ldyBhcihscihEcyh1KGUsMTApKS5hLktjKCksbmV3IHopKSkpfSxGKF9zLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyMSRUeXBlIiwxNjg2KSxEKDE2ODcsMSx7fSxPTiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gZGYoKSx1KFEodShlLDE3KSwoYWUoKSxSMikpLDE1KX0sRihfcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMjIkVHlwZSIsMTY4NyksRCgxNjg4LDEsbGksRlgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEpRZSh1KGUsMTUpKX0sRihfcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMjMkVHlwZSIsMTY4OCksRCgxNjg5LDEsVW4sR3R0KSxsLnRkPWZ1bmN0aW9uKGUpe0Fwbih0aGlzLmEsdShlLDE1KSl9LEYoX3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDI0JFR5cGUiLDE2ODkpLEQoMTY2NywxLFVuLGFHdCksbC50ZD1mdW5jdGlvbihlKXtac24odGhpcy5hLHRoaXMuYix1KGUsMTQ1KSl9LEYoX3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDMkVHlwZSIsMTY2NyksRCgxNjY5LDEse30sTlgpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGRmKCksbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwyOSkuYSwxNikpfSxGKF9zLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQ0JFR5cGUiLDE2NjkpLEQoMTY3MCwxLHt9LEJYKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBkZigpLG5ldyBUbihudWxsLG5ldyBqdyhuZXcgYXIobHIoRHModShlLDEwKSkuYS5LYygpLG5ldyB6KSkpKX0sRihfcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkNSRUeXBlIiwxNjcwKSxEKDE2NzEsMSx7fSxIVCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gZGYoKSx1KFEodShlLDE3KSwoYWUoKSxSMikpLDE1KX0sRihfcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkNiRUeXBlIiwxNjcxKSxEKDE2NzMsMSxVbixVdHQpLGwudGQ9ZnVuY3Rpb24oZSl7YWJuKHRoaXMuYSx1KGUsMTUpKX0sRihfcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkOCRUeXBlIiwxNjczKSxEKDE2NzQsMSxVbixvR3QpLGwudGQ9ZnVuY3Rpb24oZSl7bVFlKHRoaXMuYSx0aGlzLmIsdShlLDE0NSkpfSxGKF9zLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQ5JFR5cGUiLDE2NzQpLEQoMTY2MywxLHt9LFJYKSxsLkxlPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGg7Zm9yKHRoaXMuYT1lLHRoaXMuZD1uZXcgZWV0LHRoaXMuYz1OdChhN3QsRGUsMTIxLHRoaXMuYS5hLmEuYy5sZW5ndGgsMCwxKSx0aGlzLmI9MCxyPW5ldyBTKHRoaXMuYS5hLmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDMwNyksbi5kPXRoaXMuYixoPUZ3KHhNKG5ldyBYYixuKSx0aGlzLmQpLHRoaXMuY1t0aGlzLmJdPWgsKyt0aGlzLmI7Zm9yKEg0bih0aGlzKSxWNW4odGhpcyksY3duKHRoaXMpLG1hdChNbnQodGhpcy5kKSxuZXcgcjgpLG89bmV3IFModGhpcy5hLmEuYik7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksNTcpLHMuZC5jPXRoaXMuY1tzLmEuZF0uZStzLmIuYX0sbC5iPTAsRihfcywiTmV0d29ya1NpbXBsZXhDb21wYWN0aW9uIiwxNjYzKSxEKDE0NSwxLHszNToxLDE0NToxfSxUXyksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gRm9uKHRoaXMsdShlLDE0NSkpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHJpZSh0aGlzKX0sRihfcywiVmVydGljYWxTZWdtZW50IiwxNDUpLEQoODI3LDEse30sUzR0KSxsLmM9MCxsLmU9MCxsLmk9MCxGKHpfLCJCZXR3ZWVuTGF5ZXJFZGdlVHdvTm9kZUNyb3NzaW5nc0NvdW50ZXIiLDgyNyksRCg2NjMsMSx7NjYzOjF9LERuZSksbC5JYj1mdW5jdGlvbigpe3JldHVybiJBZGphY2VuY3lMaXN0IFtub2RlPSIrdGhpcy5kKyIsIGFkamFjZW5jaWVzPSAiK3RoaXMuYSsiXSJ9LGwuYj0wLGwuYz0wLGwuZj0wLEYoel8sIkJldHdlZW5MYXllckVkZ2VUd29Ob2RlQ3Jvc3NpbmdzQ291bnRlci9BZGphY2VuY3lMaXN0Iiw2NjMpLEQoMjg3LDEsezM1OjEsMjg3OjF9LEFXdCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4ga2VuKHRoaXMsdShlLDI4NykpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkFkamFjZW5jeSBbcG9zaXRpb249Iit0aGlzLmMrIiwgY2FyZGluYWxpdHk9Iit0aGlzLmErIiwgY3VycmVudENhcmRpbmFsaXR5PSIrdGhpcy5iKyJdIn0sbC5hPTAsbC5iPTAsbC5jPTAsRih6XywiQmV0d2VlbkxheWVyRWRnZVR3b05vZGVDcm9zc2luZ3NDb3VudGVyL0FkamFjZW5jeUxpc3QvQWRqYWNlbmN5IiwyODcpLEQoMTkyOSwxLHt9LEphZSksbC5iPTAsbC5lPSExLEYoel8sIkNyb3NzaW5nTWF0cml4RmlsbGVyIiwxOTI5KTt2YXIgZzJlPUtpKGMwLCJJSW5pdGlhbGl6YWJsZSIpO0QoMTgwNCwxLFlJLGdHdCksbC5OZj1mdW5jdGlvbihlLG4scixzLG8saCl7fSxsLlBmPWZ1bmN0aW9uKGUsbixyKXt9LGwuTGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jIT0oZXYoKSxGUyl9LGwuTWY9ZnVuY3Rpb24oKXt0aGlzLmU9TnQoQ3IsWHIsMjUsdGhpcy5kLDE1LDEpfSxsLk9mPWZ1bmN0aW9uKGUsbil7bltlXVswXS5jLnA9ZX0sbC5RZj1mdW5jdGlvbihlLG4scixzKXsrK3RoaXMuZH0sbC5SZj1mdW5jdGlvbigpe3JldHVybiEwfSxsLlNmPWZ1bmN0aW9uKGUsbixyLHMpe3JldHVybiBYcmUodGhpcyxlLG4sciksbGFuKHRoaXMsbil9LGwuVGY9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gcj1XS2UobixlLmxlbmd0aCksWHJlKHRoaXMsZSxyLG4pLGJyZSh0aGlzLHIpfSxsLmQ9MCxGKHpfLCJHcmVlZHlTd2l0Y2hIZXVyaXN0aWMiLDE4MDQpLEQoMTkzMCwxLHt9LFNLdCksbC5iPTAsbC5kPTAsRih6XywiTm9ydGhTb3V0aEVkZ2VOZWlnaGJvdXJpbmdOb2RlQ3Jvc3NpbmdzQ291bnRlciIsMTkzMCksRCgxOTE3LDEse30sTXVlKSxsLmE9ITEsRih6XywiU3dpdGNoRGVjaWRlciIsMTkxNyksRCgxMDEsMSx7MTAxOjF9LG9vZSksbC5hPW51bGwsbC5jPW51bGwsbC5pPW51bGwsRihTNiwiU2VsZkh5cGVyTG9vcCIsMTAxKSxEKDE5MTYsMSx7fSxhc2UpLGwuYz0wLGwuZT0wLEYoUzYsIlNlbGZIeXBlckxvb3BMYWJlbHMiLDE5MTYpLEQoNDExLDIyLHszOjEsMzU6MSwyMjoxLDQxMToxfSxlaik7dmFyIE82LGY3LGQ3LHZsdCxwMmU9anIoUzYsIlNlbGZIeXBlckxvb3BMYWJlbHMvQWxpZ25tZW50Iiw0MTEsSHIsSXNuLENKZSksYjJlO0QoNDA5LDEsezQwOToxfSxHSnQpLEYoUzYsIlNlbGZMb29wRWRnZSIsNDA5KSxEKDQwMywxLHs0MDM6MX0sWmllKSxsLmE9ITEsRihTNiwiU2VsZkxvb3BIb2xkZXIiLDQwMyksRCgxNzI0LDEsbGksJE4pLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEdhKHUoZSwxNykpfSxGKFM2LCJTZWxmTG9vcEhvbGRlci9sYW1iZGEkMCRUeXBlIiwxNzI0KSxEKDExMywxLHsxMTM6MX0sb3NlKSxsLmE9ITEsbC5jPSExLEYoUzYsIlNlbGZMb29wUG9ydCIsMTEzKSxEKDE3OTIsMSxsaSx6TiksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gR2EodShlLDE3KSl9LEYoUzYsIlNlbGZMb29wUG9ydC9sYW1iZGEkMCRUeXBlIiwxNzkyKSxEKDM2MywyMix7MzoxLDM1OjEsMjI6MSwzNjM6MX0sU00pO3ZhciBqViwkVix6VixxVixIVix3MmU9anIoUzYsIlNlbGZMb29wVHlwZSIsMzYzLEhyLEVhbixNSmUpLHYyZTtEKDE3MzIsMSx7fSx0dHQpO3ZhciBtMmUseTJlLHgyZSxrMmU7RihHbCwiUG9ydFJlc3RvcmVyIiwxNzMyKSxEKDM2MSwyMix7MzoxLDM1OjEsMjI6MSwzNjE6MX0sT2V0KTt2YXIgTXYscGIsRHYsbWx0PWpyKEdsLCJQb3J0UmVzdG9yZXIvUG9ydFNpZGVBcmVhIiwzNjEsSHIsUGluLERKZSksRTJlO0QoMTczMywxLHt9LEEzKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuYigpLHUoZSwxNSkuT2MoKX0sRihHbCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQwJFR5cGUiLDE3MzMpLEQoMTczNCwxLFVuLHpYKSxsLnRkPWZ1bmN0aW9uKGUpe25iKCksdShlLDExMykuYz0hMX0sRihHbCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQxJFR5cGUiLDE3MzQpLEQoMTc0MywxLGxpLHFYKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBuYigpLHUoZSwxMSkuaj09KHZlKCksQm4pfSxGKEdsLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDEwJFR5cGUiLDE3NDMpLEQoMTc0NCwxLHt9LFVUKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuYigpLHUoZSwxMTMpLmR9LEYoR2wsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMTEkVHlwZSIsMTc0NCksRCgxNzQ1LDEsVW4sV3R0KSxsLnRkPWZ1bmN0aW9uKGUpe1pLZSh0aGlzLmEsdShlLDExKSl9LEYoR2wsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMTIkVHlwZSIsMTc0NSksRCgxNzM1LDEsVW4sWXR0KSxsLnRkPWZ1bmN0aW9uKGUpe2laZSh0aGlzLmEsdShlLDEwMSkpfSxGKEdsLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDIkVHlwZSIsMTczNSksRCgxNzM2LDEsT2ksSFgpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaWNuKHUoZSwxMTMpLHUobiwxMTMpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKEdsLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDMkVHlwZSIsMTczNiksRCgxNzM3LDEsbGksVlgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5iKCksdShlLDExMykuY30sRihHbCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQ0JFR5cGUiLDE3MzcpLEQoMTczOCwxLGxpLGpYKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBHY24odShlLDExKSl9LEYoR2wsIlBvcnRSZXN0b3Jlci9sYW1iZGEkNSRUeXBlIiwxNzM4KSxEKDE3MzksMSxsaSxWVCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gbmIoKSx1KGUsMTEpLmo9PSh2ZSgpLFBuKX0sRihHbCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQ2JFR5cGUiLDE3MzkpLEQoMTc0MCwxLGxpLFBOKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBuYigpLHUoZSwxMSkuaj09KHZlKCksSG4pfSxGKEdsLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDckVHlwZSIsMTc0MCksRCgxNzQxLDEsbGksRk4pLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIE9zbih1KGUsMTEpKX0sRihHbCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQ4JFR5cGUiLDE3NDEpLEQoMTc0MiwxLGxpLE5OKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBuYigpLHUoZSwxMSkuaj09KHZlKCksbXIpfSxGKEdsLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDkkVHlwZSIsMTc0MiksRCgyNzAsMjIsezM6MSwzNToxLDIyOjEsMjcwOjF9LEd4KTt2YXIgeWx0LHhsdCxrbHQsRWx0LFRsdCxDbHQsX2x0LFNsdCxTVHQ9anIoR2wsIlBvcnRTaWRlQXNzaWduZXIvVGFyZ2V0IiwyNzAsSHIsWG9uLF9KZSksVDJlO0QoMTcyNSwxLHt9LEJOKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBSaShuZXcgVG4obnVsbCxuZXcgX24odShlLDEwMSkuaiwxNikpLG5ldyBHVCl9LEYoR2wsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDEkVHlwZSIsMTcyNSksRCgxNzI2LDEse30sZ3cpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMTMpLmR9LEYoR2wsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDIkVHlwZSIsMTcyNiksRCgxNzI3LDEsVW4sUk4pLGwudGQ9ZnVuY3Rpb24oZSl7QnModShlLDExKSwodmUoKSxQbikpfSxGKEdsLCJQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQzJFR5cGUiLDE3MjcpLEQoMTcyOCwxLHt9LGpOKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTEzKS5kfSxGKEdsLCJQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQ0JFR5cGUiLDE3MjgpLEQoMTcyOSwxLFVuLEt0dCksbC50ZD1mdW5jdGlvbihlKXtpS2UodGhpcy5hLHUoZSwxMSkpfSxGKEdsLCJQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQ1JFR5cGUiLDE3MjkpLEQoMTczMCwxLE9pLCRYKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFBubih1KGUsMTAxKSx1KG4sMTAxKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihHbCwiUG9ydFNpZGVBc3NpZ25lci9sYW1iZGEkNiRUeXBlIiwxNzMwKSxEKDE3MzEsMSxPaSxleCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBvZW4odShlLDExMyksdShuLDExMykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoR2wsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDckVHlwZSIsMTczMSksRCg4MDUsMSxsaSxHVCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDExMykuY30sRihHbCwiUG9ydFNpZGVBc3NpZ25lci9sYW1iZGEkOCRUeXBlIiw4MDUpLEQoMjAwOSwxLHt9KSxGKGNiLCJBYnN0cmFjdFNlbGZMb29wUm91dGVyIiwyMDA5KSxEKDE3NTAsMSxPaSxHWCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBRWmUodShlLDEwMSksdShuLDEwMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoY2IsWWZlLDE3NTApLEQoMTc1MSwxLE9pLFVYKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFhaZSh1KGUsMTAxKSx1KG4sMTAxKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihjYixLZmUsMTc1MSksRCgxNzkzLDIwMDkse30sV1gpLGwuVWY9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiByfSxGKGNiLCJPcnRob2dvbmFsU2VsZkxvb3BSb3V0ZXIiLDE3OTMpLEQoMTc5NSwxLFVuLGhHdCksbC50ZD1mdW5jdGlvbihlKXtGM3QodGhpcy5iLHRoaXMuYSx1KGUsOCkpfSxGKGNiLCJPcnRob2dvbmFsU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDAkVHlwZSIsMTc5NSksRCgxNzk0LDE3OTMse30sWVgpLGwuVWY9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87cmV0dXJuIHM9ZS5jLmQsbTgociwwLExpKG5jKHMubikscy5hKSksbz1lLmQuZCxyaShyLExpKG5jKG8ubiksby5hKSksUW1uKHIpfSxGKGNiLCJQb2x5bGluZVNlbGZMb29wUm91dGVyIiwxNzk0KSxEKDE3NDYsMSx7fSxYSiksbC5hPW51bGw7dmFyIEg0O0YoY2IsIlJvdXRpbmdEaXJlY3RvciIsMTc0NiksRCgxNzQ3LDEsT2ksS1gpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbGVuKHUoZSwxMTMpLHUobiwxMTMpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKGNiLCJSb3V0aW5nRGlyZWN0b3IvbGFtYmRhJDAkVHlwZSIsMTc0NyksRCgxNzQ4LDEse30sWFgpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuICRSKCksdShlLDEwMSkuan0sRihjYiwiUm91dGluZ0RpcmVjdG9yL2xhbWJkYSQxJFR5cGUiLDE3NDgpLEQoMTc0OSwxLFVuLFFYKSxsLnRkPWZ1bmN0aW9uKGUpeyRSKCksdShlLDE1KS5hZChINCl9LEYoY2IsIlJvdXRpbmdEaXJlY3Rvci9sYW1iZGEkMiRUeXBlIiwxNzQ5KSxEKDE3NTIsMSx7fSxaWCksRihjYiwiUm91dGluZ1Nsb3RBc3NpZ25lciIsMTc1MiksRCgxNzUzLDEsbGksdDgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIExYZSh0aGlzLmEsdShlLDEwMSkpfSxGKGNiLCJSb3V0aW5nU2xvdEFzc2lnbmVyL2xhbWJkYSQwJFR5cGUiLDE3NTMpLEQoMTc1NCwxLE9pLGxNKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIE9lbih0aGlzLmEsdShlLDEwMSksdShuLDEwMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoY2IsIlJvdXRpbmdTbG90QXNzaWduZXIvbGFtYmRhJDEkVHlwZSIsMTc1NCksRCgxNzk2LDE3OTMse30sSlgpLGwuVWY9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saCxkO3JldHVybiBzPVh0KHllKFd6KGUuYi5nLmIsKFRlKCksVjYpKSkpLGQ9bmV3IE1XdChsdChjdChXcywxKSxlZSw4LDAsWyhoPWUuYy5kLExpKG5ldyB4byhoLm4pLGguYSkpXSkpLEkybihlLG4scixkLHMpLHJpKGQsKG89ZS5kLmQsTGkobmV3IHhvKG8ubiksby5hKSkpLGtzZShuZXcgZnh0KGQpKX0sRihjYiwiU3BsaW5lU2VsZkxvb3BSb3V0ZXIiLDE3OTYpLEQoNTc4LDEsT2ksVG5lLFhZdCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBZaGUodGhpcyx1KGUsMTApLHUobiwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYocV8sIk1vZGVsT3JkZXJOb2RlQ29tcGFyYXRvciIsNTc4KSxEKDE3NTUsMSxsaSxOTCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDExKS5lLmMubGVuZ3RoIT0wfSxGKHFfLCJNb2RlbE9yZGVyTm9kZUNvbXBhcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTc1NSksRCgxNzU2LDEse30scU4pLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoTmUodShlLDExKS5lLDApLDE3KS5jfSxGKHFfLCJNb2RlbE9yZGVyTm9kZUNvbXBhcmF0b3IvbGFtYmRhJDEkVHlwZSIsMTc1NiksRCgxNzU3LDEsbGksdFEpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMSkuZS5jLmxlbmd0aCE9MH0sRihxXywiTW9kZWxPcmRlck5vZGVDb21wYXJhdG9yL2xhbWJkYSQyJFR5cGUiLDE3NTcpLEQoMTc1OCwxLHt9LGVRKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KE5lKHUoZSwxMSkuZSwwKSwxNykuY30sRihxXywiTW9kZWxPcmRlck5vZGVDb21wYXJhdG9yL2xhbWJkYSQzJFR5cGUiLDE3NTgpLEQoMTc1OSwxLGxpLG5RKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTEpLmUuYy5sZW5ndGghPTB9LEYocV8sIk1vZGVsT3JkZXJOb2RlQ29tcGFyYXRvci9sYW1iZGEkNCRUeXBlIiwxNzU5KSxEKDgwNiwxLE9pLGVlZSxkR3QpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gR0t0KHRoaXMsZSxuKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKHFfLCJNb2RlbE9yZGVyUG9ydENvbXBhcmF0b3IiLDgwNiksRCg4MDEsMSx7fSxITiksbC5WZj1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoO2ZvcihvPUthZShuKSxyPW5ldyBoZSxoPW4uZi9vLHM9MTtzPG87KytzKWxlKHIscGUoQXIoVHUoYi5NYXRoLnJvdW5kKHMqaCkpKSkpO3JldHVybiByfSxsLldmPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoQ2QsIkFSREN1dEluZGV4SGV1cmlzdGljIiw4MDEpLEQoMTQ3OSwxLG9zLHJRKSxsLnBmPWZ1bmN0aW9uKGUsbil7ZG1uKHUoZSwzNyksbil9LEYoQ2QsIkJyZWFraW5nUG9pbnRJbnNlcnRlciIsMTQ3OSksRCgzMDUsMSx7MzA1OjF9LHNtdCksbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBNcCxlLmErPSJCUEluZm9bIixlLmErPWAKCXN0YXJ0PWAsaGMoZSx0aGlzLmkpLGUuYSs9YAoJZW5kPWAsaGMoZSx0aGlzLmEpLGUuYSs9YAoJbm9kZVN0YXJ0RWRnZT1gLGhjKGUsdGhpcy5lKSxlLmErPWAKCXN0YXJ0RW5kRWRnZT1gLGhjKGUsdGhpcy5qKSxlLmErPWAKCW9yaWdpbmFsRWRnZT1gLGhjKGUsdGhpcy5mKSxlLmErPWAKCXN0YXJ0SW5MYXllckR1bW15PWAsaGMoZSx0aGlzLmspLGUuYSs9YAoJc3RhcnRJbkxheWVyRWRnZT1gLGhjKGUsdGhpcy5uKSxlLmErPWAKCWVuZEluTGF5ZXJEdW1teT1gLGhjKGUsdGhpcy5iKSxlLmErPWAKCWVuZEluTGF5ZXJFZGdlPWAsaGMoZSx0aGlzLmMpLGUuYX0sRihDZCwiQnJlYWtpbmdQb2ludEluc2VydGVyL0JQSW5mbyIsMzA1KSxEKDY1MiwxLHs2NTI6MX0sQXApLGwuYT0hMSxsLmI9MCxsLmM9MCxGKENkLCJCcmVha2luZ1BvaW50SW5zZXJ0ZXIvQ3V0Iiw2NTIpLEQoMTQ4MCwxLG9zLGlRKSxsLnBmPWZ1bmN0aW9uKGUsbil7SDJuKHUoZSwzNyksbil9LEYoQ2QsIkJyZWFraW5nUG9pbnRQcm9jZXNzb3IiLDE0ODApLEQoMTQ4MSwxLGxpLHNRKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB5ZWUodShlLDEwKSl9LEYoQ2QsIkJyZWFraW5nUG9pbnRQcm9jZXNzb3IvMG1ldGhvZHJlZiRpc0VuZCRUeXBlIiwxNDgxKSxEKDE0ODIsMSxsaSxhUSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4geGVlKHUoZSwxMCkpfSxGKENkLCJCcmVha2luZ1BvaW50UHJvY2Vzc29yLzFtZXRob2RyZWYkaXNTdGFydCRUeXBlIiwxNDgyKSxEKDE0ODMsMSxvcyxvUSksbC5wZj1mdW5jdGlvbihlLG4pe2Z3bih0aGlzLHUoZSwzNyksbil9LEYoQ2QsIkJyZWFraW5nUG9pbnRSZW1vdmVyIiwxNDgzKSxEKDE0ODQsMSxVbixjUSksbC50ZD1mdW5jdGlvbihlKXt1KGUsMTI4KS5rPSEwfSxGKENkLCJCcmVha2luZ1BvaW50UmVtb3Zlci9sYW1iZGEkMCRUeXBlIiwxNDg0KSxEKDc5NywxLHt9LG01dCksbC5iPTAsbC5lPTAsbC5mPTAsbC5qPTAsRihDZCwiR3JhcGhTdGF0cyIsNzk3KSxEKDc5OCwxLHt9LFZOKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGIuTWF0aC5tYXgoWHQoeWUoZSkpLFh0KHllKG4pKSl9LEYoQ2QsIkdyYXBoU3RhdHMvMG1ldGhvZHJlZiRtYXgkVHlwZSIsNzk4KSxEKDc5OSwxLHt9LEdOKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGIuTWF0aC5tYXgoWHQoeWUoZSkpLFh0KHllKG4pKSl9LEYoQ2QsIkdyYXBoU3RhdHMvMm1ldGhvZHJlZiRtYXgkVHlwZSIsNzk5KSxEKDE2NjAsMSx7fSx1USksbC5DZT1mdW5jdGlvbihlLG4pe3JldHVybiBRdG4oeWUoZSkseWUobikpfSxGKENkLCJHcmFwaFN0YXRzL2xhbWJkYSQxJFR5cGUiLDE2NjApLEQoMTY2MSwxLHt9LExDKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1c2UodGhpcy5hLHUoZSwyOSkpfSxGKENkLCJHcmFwaFN0YXRzL2xhbWJkYSQyJFR5cGUiLDE2NjEpLEQoMTY2MiwxLHt9LGdSKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBWY2UodGhpcy5hLHUoZSwyOSkpfSxGKENkLCJHcmFwaFN0YXRzL2xhbWJkYSQ2JFR5cGUiLDE2NjIpLEQoODAwLDEse30sVU4pLGwuVmY9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gcj11KFEoZSwoVGUoKSxFOXQpKSwxNSkscnx8KHduKCksd24oKSxpbyl9LGwuV2Y9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sRihDZCwiSUN1dEluZGV4Q2FsY3VsYXRvci9NYW51YWxDdXRJbmRleENhbGN1bGF0b3IiLDgwMCksRCg4MDIsMSx7fSxXTiksbC5WZj1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0O2ZvcihLdD0obi5uPT1udWxsJiZPc2Uobiksbi5uKSxrPShuLmQ9PW51bGwmJk9zZShuKSxuLmQpLFJ0PU50KGFhLHZvLDI1LEt0Lmxlbmd0aCwxNSwxKSxSdFswXT1LdFswXSxNdD1LdFswXSxDPTE7QzxLdC5sZW5ndGg7QysrKVJ0W0NdPVJ0W0MtMV0rS3RbQ10sTXQrPUt0W0NdO2ZvcihvPUthZShuKS0xLGQ9dShRKGUsKFRlKCksVDl0KSksMTkpLmEscz1DcyxyPW5ldyBoZSxIPWIuTWF0aC5tYXgoMCxvLWQpO0g8PWIuTWF0aC5taW4obi5mLTEsbytkKTtIKyspe2lmKHR0PU10LyhIKzEpLGd0PTAsTT0xLGg9bmV3IGhlLFN0PUNzLGo9MCx2PTAsSz1rWzBdLEg9PTApU3Q9TXQsdj0obi5nPT1udWxsJiYobi5nPV9uZShuLG5ldyBHTikpLFh0KG4uZykpO2Vsc2V7Zm9yKDtNPG4uZjspUnRbTS0xXS1ndD49dHQmJihsZShoLHBlKE0pKSxTdD1iLk1hdGgubWF4KFN0LFJ0W00tMV0taiksdis9SyxndCs9UnRbTS0xXS1ndCxqPVJ0W00tMV0sSz1rW01dKSxLPWIuTWF0aC5tYXgoSyxrW01dKSwrK007dis9S31HPWIuTWF0aC5taW4oMS9TdCwxL24uYi92KSxHPnMmJihzPUcscj1oKX1yZXR1cm4gcn0sbC5XZj1mdW5jdGlvbigpe3JldHVybiExfSxGKENkLCJNU0RDdXRJbmRleEhldXJpc3RpYyIsODAyKSxEKDE2MTcsMSxvcyxsUSksbC5wZj1mdW5jdGlvbihlLG4pe1J5bih1KGUsMzcpLG4pfSxGKENkLCJTaW5nbGVFZGdlR3JhcGhXcmFwcGVyIiwxNjE3KSxEKDIyNywyMix7MzoxLDM1OjEsMjI6MSwyMjc6MX0sWkMpO3ZhciBWNCxnNyxwNyxOeSxiUyxHNCxiNz1qcihrYywiQ2VudGVyRWRnZUxhYmVsUGxhY2VtZW50U3RyYXRlZ3kiLDIyNyxIcixLYW4sU0plKSxDMmU7RCg0MjIsMjIsezM6MSwzNToxLDIyOjEsNDIyOjF9LEJidCk7dmFyIEFUdCxBbHQsTFR0PWpyKGtjLCJDb25zdHJhaW50Q2FsY3VsYXRpb25TdHJhdGVneSIsNDIyLEhyLGpybixBSmUpLF8yZTtEKDMxNCwyMix7MzoxLDM1OjEsMjI6MSwzMTQ6MSwyNDY6MSwyMzQ6MX0sUGV0KSxsLktmPWZ1bmN0aW9uKCl7cmV0dXJuIE5vZSh0aGlzKX0sbC5YZj1mdW5jdGlvbigpe3JldHVybiBOb2UodGhpcyl9O3ZhciBFTyxQNixNVHQsRFR0PWpyKGtjLCJDcm9zc2luZ01pbmltaXphdGlvblN0cmF0ZWd5IiwzMTQsSHIsRGluLExKZSksUzJlO0QoMzM3LDIyLHszOjEsMzU6MSwyMjoxLDMzNzoxfSxGZXQpO3ZhciBJVHQsTGx0LFZWLE9UdD1qcihrYywiQ3V0dGluZ1N0cmF0ZWd5IiwzMzcsSHIsSWluLElKZSksQTJlO0QoMzM1LDIyLHszOjEsMzU6MSwyMjoxLDMzNToxLDI0NjoxLDIzNDoxfSxBTSksbC5LZj1mdW5jdGlvbigpe3JldHVybiBrY2UodGhpcyl9LGwuWGY9ZnVuY3Rpb24oKXtyZXR1cm4ga2NlKHRoaXMpfTt2YXIgUFR0LE1sdCx3UyxEbHQsdlMsRlR0PWpyKGtjLCJDeWNsZUJyZWFraW5nU3RyYXRlZ3kiLDMzNSxIcix4YW4sT0plKSxMMmU7RCg0MTksMjIsezM6MSwzNToxLDIyOjEsNDE5OjF9LFJidCk7dmFyIEdWLE5UdCxCVHQ9anIoa2MsIkRpcmVjdGlvbkNvbmdydWVuY3kiLDQxOSxIcixScm4sUEplKSxNMmU7RCg0NTAsMjIsezM6MSwzNToxLDIyOjEsNDUwOjF9LE5ldCk7dmFyIHc3LElsdCxVNCxEMmU9anIoa2MsIkVkZ2VDb25zdHJhaW50Iiw0NTAsSHIsT2luLEZKZSksSTJlO0QoMjc2LDIyLHszOjEsMzU6MSwyMjoxLDI3NjoxfSxKQyk7dmFyIE9sdCxQbHQsRmx0LE5sdCxVVixCbHQsUlR0PWpyKGtjLCJFZGdlTGFiZWxTaWRlU2VsZWN0aW9uIiwyNzYsSHIsSmFuLE5KZSksTzJlO0QoNDc5LDIyLHszOjEsMzU6MSwyMjoxLDQ3OToxfSxqYnQpO3ZhciBXVixqVHQsJFR0PWpyKGtjLCJFZGdlU3RyYWlnaHRlbmluZ1N0cmF0ZWd5Iiw0NzksSHIsQnJuLEJKZSksUDJlO0QoMjc0LDIyLHszOjEsMzU6MSwyMjoxLDI3NDoxfSx0OSk7dmFyIFJsdCx6VHQscVR0LFlWLEhUdCxWVHQsR1R0PWpyKGtjLCJGaXhlZEFsaWdubWVudCIsMjc0LEhyLFFhbixSSmUpLEYyZTtEKDI3NSwyMix7MzoxLDM1OjEsMjI6MSwyNzU6MX0sZTkpO3ZhciBVVHQsV1R0LFlUdCxLVHQsbVMsWFR0LFFUdD1qcihrYywiR3JhcGhDb21wYWN0aW9uU3RyYXRlZ3kiLDI3NSxIcixYYW4sakplKSxOMmU7RCgyNTYsMjIsezM6MSwzNToxLDIyOjEsMjU2OjF9LEZtKTt2YXIgdjcsS1YsbTcsdmgseVMsWFYseTcsVzQsUVYseFMsamx0PWpyKGtjLCJHcmFwaFByb3BlcnRpZXMiLDI1NixIcixSY24sJEplKSxCMmU7RCgyOTIsMjIsezM6MSwzNToxLDIyOjEsMjkyOjF9LEJldCk7dmFyIFRPLCRsdCx6bHQscWx0PWpyKGtjLCJHcmVlZHlTd2l0Y2hUeXBlIiwyOTIsSHIsTmluLHpKZSksUjJlO0QoMzAzLDIyLHszOjEsMzU6MSwyMjoxLDMwMzoxfSxSZXQpO3ZhciBGNixDTyxZNCxqMmU9anIoa2MsIkluTGF5ZXJDb25zdHJhaW50IiwzMDMsSHIsRmluLHFKZSksJDJlO0QoNDIwLDIyLHszOjEsMzU6MSwyMjoxLDQyMDoxfSwkYnQpO3ZhciBIbHQsWlR0LEpUdD1qcihrYywiSW50ZXJhY3RpdmVSZWZlcmVuY2VQb2ludCIsNDIwLEhyLCRybixISmUpLHoyZSx0Q3QsTjYsSXYsWlYsZUN0LG5DdCxKVixyQ3QsX08sdEcsa1MsQjYsQnksVmx0LGVHLG9jLGlDdCxPdixWYyxHbHQsVWx0LFNPLEIyLFB2LFI2LHNDdCxqNixBTyxSeSxyMSwkaCxXbHQsSzQsVGMsX2ksYUN0LG9DdCxjQ3QsdUN0LGxDdCxZbHQsbkcsSnUsRnYsS2x0LCQ2LExPLHExLFg0LHg3LFE0LFo0LGs3LFIyLGhDdCxYbHQsUWx0LHo2O0QoMTYzLDIyLHszOjEsMzU6MSwyMjoxLDE2MzoxfSxNTSk7dmFyIEVTLGJiLFRTLGp5LE1PLGZDdD1qcihrYywiTGF5ZXJDb25zdHJhaW50IiwxNjMsSHIsVGFuLFZKZSkscTJlO0QoODQ4LDEsT2gscnR0KSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxDNnQpLCIiKSwiRGlyZWN0aW9uIENvbmdydWVuY3kiKSwiU3BlY2lmaWVzIGhvdyBkcmF3aW5ncyBvZiB0aGUgc2FtZSBncmFwaCB3aXRoIGRpZmZlcmVudCBsYXlvdXQgZGlyZWN0aW9ucyBjb21wYXJlIHRvIGVhY2ggb3RoZXI6IGVpdGhlciBhIG5hdHVyYWwgcmVhZGluZyBkaXJlY3Rpb24gaXMgcHJlc2VydmVkIG9yIHRoZSBkcmF3aW5ncyBhcmUgcm90YXRlZCB2ZXJzaW9ucyBvZiBlYWNoIG90aGVyLiIpLGtDdCksKFVnKCksdXMpKSxCVHQpLHVuKChRZigpLHFuKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLF82dCksIiIpLCJGZWVkYmFjayBFZGdlcyIpLCJXaGV0aGVyIGZlZWRiYWNrIGVkZ2VzIHNob3VsZCBiZSBoaWdobGlnaHRlZCBieSByb3V0aW5nIGFyb3VuZCB0aGUgbm9kZXMuIiksKE5uKCksITEpKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsc0gpLCIiKSwiSW50ZXJhY3RpdmUgUmVmZXJlbmNlIFBvaW50IiksIkRldGVybWluZXMgd2hpY2ggcG9pbnQgb2YgYSBub2RlIGlzIGNvbnNpZGVyZWQgYnkgaW50ZXJhY3RpdmUgbGF5b3V0IHBoYXNlcy4iKSxBQ3QpLHVzKSxKVHQpLHVuKHFuKSkpKSxjYShlLHNILFFvdCxPd2UpLGNhKGUsc0gsSF8sSXdlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsUzZ0KSwiIiksIk1lcmdlIEVkZ2VzIiksIkVkZ2VzIHRoYXQgaGF2ZSBubyBwb3J0cyBhcmUgbWVyZ2VkIHNvIHRoZXkgdG91Y2ggdGhlIGNvbm5lY3RlZCBub2RlcyBhdCB0aGUgc2FtZSBwb2ludHMuIFdoZW4gdGhpcyBvcHRpb24gaXMgZGlzYWJsZWQsIG9uZSBwb3J0IGlzIGNyZWF0ZWQgZm9yIGVhY2ggZWRnZSBkaXJlY3RseSBjb25uZWN0ZWQgdG8gYSBub2RlLiBXaGVuIGl0IGlzIGVuYWJsZWQsIGFsbCBzdWNoIGluY29taW5nIGVkZ2VzIHNoYXJlIGFuIGlucHV0IHBvcnQsIGFuZCBhbGwgb3V0Z29pbmcgZWRnZXMgc2hhcmUgYW4gb3V0cHV0IHBvcnQuIiksITEpLExhKSxScyksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxBNnQpLCIiKSwiTWVyZ2UgSGllcmFyY2h5LUNyb3NzaW5nIEVkZ2VzIiksIklmIGhpZXJhcmNoaWNhbCBsYXlvdXQgaXMgYWN0aXZlLCBoaWVyYXJjaHktY3Jvc3NpbmcgZWRnZXMgdXNlIGFzIGZldyBoaWVyYXJjaGljYWwgcG9ydHMgYXMgcG9zc2libGUuIFRoZXkgYXJlIGJyb2tlbiBieSB0aGUgYWxnb3JpdGhtLCB3aXRoIGhpZXJhcmNoaWNhbCBwb3J0cyBpbnNlcnRlZCBhcyByZXF1aXJlZC4gVXN1YWxseSwgb25lIHN1Y2ggcG9ydCBpcyBjcmVhdGVkIGZvciBlYWNoIGVkZ2UgYXQgZWFjaCBoaWVyYXJjaHkgY3Jvc3NpbmcgcG9pbnQuIFdpdGggdGhpcyBvcHRpb24gc2V0IHRvIHRydWUsIHdlIHRyeSB0byBjcmVhdGUgYXMgZmV3IGhpZXJhcmNoaWNhbCBwb3J0cyBhcyBwb3NzaWJsZSBpbiB0aGUgcHJvY2Vzcy4gSW4gcGFydGljdWxhciwgYWxsIGVkZ2VzIHRoYXQgZm9ybSBhIGh5cGVyZWRnZSBjYW4gc2hhcmUgYSBwb3J0LiIpLCEwKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShYS2Uocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEw2dCksIiIpLCJBbGxvdyBOb24tRmxvdyBQb3J0cyBUbyBTd2l0Y2ggU2lkZXMiKSwiU3BlY2lmaWVzIHdoZXRoZXIgbm9uLWZsb3cgcG9ydHMgbWF5IHN3aXRjaCBzaWRlcyBpZiB0aGVpciBub2RlJ3MgcG9ydCBjb25zdHJhaW50cyBhcmUgZWl0aGVyIEZJWEVEX1NJREUgb3IgRklYRURfT1JERVIuIEEgbm9uLWZsb3cgcG9ydCBpcyBhIHBvcnQgb24gYSBzaWRlIHRoYXQgaXMgbm90IHBhcnQgb2YgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIGxheW91dCBmbG93LiBGb3IgaW5zdGFuY2UsIGdpdmVuIGEgbGVmdC10by1yaWdodCBsYXlvdXQgZGlyZWN0aW9uLCBub3J0aCBhbmQgc291dGggcG9ydHMgd291bGQgYmUgY29uc2lkZXJlZCBub24tZmxvdyBwb3J0cy4gRnVydGhlciBub3RlIHRoYXQgdGhlIHVuZGVybHlpbmcgY3JpdGVyaXVtIHdoZXRoZXIgdG8gc3dpdGNoIHNpZGVzIG9yIG5vdCBzb2xlbHkgcmVsaWVzIG9uIHRoZSBtaW5pbWl6YXRpb24gb2YgZWRnZSBjcm9zc2luZ3MuIEhlbmNlLCBlZGdlIGxlbmd0aCBhbmQgb3RoZXIgYWVzdGhldGljcyBjcml0ZXJpYSBhcmUgbm90IGFkZHJlc3NlZC4iKSwhMSksTGEpLFJzKSx1bihWMikpLGx0KGN0KEFlLDEpLGVlLDIsNixbIm9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vcnRoT3JTb3V0aFBvcnQiXSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLE02dCksIiIpLCJQb3J0IFNvcnRpbmcgU3RyYXRlZ3kiKSwiT25seSByZWxldmFudCBmb3Igbm9kZXMgd2l0aCBGSVhFRF9TSURFIHBvcnQgY29uc3RyYWludHMuIERldGVybWluZXMgdGhlIHdheSBhIG5vZGUncyBwb3J0cyBhcmUgZGlzdHJpYnV0ZWQgb24gdGhlIHNpZGVzIG9mIGEgbm9kZSBpZiB0aGVpciBvcmRlciBpcyBub3QgcHJlc2NyaWJlZC4gVGhlIG9wdGlvbiBpcyBzZXQgb24gcGFyZW50IG5vZGVzLiIpLE5DdCksdXMpLFY5dCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxENnQpLCIiKSwiVGhvcm91Z2huZXNzIiksIkhvdyBtdWNoIGVmZm9ydCBzaG91bGQgYmUgc3BlbnQgdG8gcHJvZHVjZSBhIG5pY2UgbGF5b3V0LiIpLHBlKDcpKSxnYyksamEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsSTZ0KSwiIiksIkFkZCBVbm5lY2Vzc2FyeSBCZW5kcG9pbnRzIiksIkFkZHMgYmVuZCBwb2ludHMgZXZlbiBpZiBhbiBlZGdlIGRvZXMgbm90IGNoYW5nZSBkaXJlY3Rpb24uIElmIHRydWUsIGVhY2ggbG9uZyBlZGdlIGR1bW15IHdpbGwgY29udHJpYnV0ZSBhIGJlbmQgcG9pbnQgdG8gaXRzIGVkZ2VzIGFuZCBoaWVyYXJjaHktY3Jvc3NpbmcgZWRnZXMgd2lsbCBhbHdheXMgZ2V0IGEgYmVuZCBwb2ludCB3aGVyZSB0aGV5IGNyb3NzIGhpZXJhcmNoeSBib3VuZGFyaWVzLiBCeSBkZWZhdWx0LCBiZW5kIHBvaW50cyBhcmUgb25seSBhZGRlZCB3aGVyZSBhbiBlZGdlIGNoYW5nZXMgZGlyZWN0aW9uLiIpLCExKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsTzZ0KSwiIiksIkdlbmVyYXRlIFBvc2l0aW9uIGFuZCBMYXllciBJRHMiKSwiSWYgZW5hYmxlZCBwb3NpdGlvbiBpZCBhbmQgbGF5ZXIgaWQgYXJlIGdlbmVyYXRlZCwgd2hpY2ggYXJlIHVzdWFsbHkgb25seSB1c2VkIGludGVybmFsbHkgd2hlbiBzZXR0aW5nIHRoZSBpbnRlcmFjdGl2ZUxheW91dCBvcHRpb24uIFRoaXMgb3B0aW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgb24gdGhlIHJvb3Qgbm9kZS4iKSwhMSksTGEpLFJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFFvdCksImN5Y2xlQnJlYWtpbmciKSwiQ3ljbGUgQnJlYWtpbmcgU3RyYXRlZ3kiKSwiU3RyYXRlZ3kgZm9yIGN5Y2xlIGJyZWFraW5nLiBDeWNsZSBicmVha2luZyBsb29rcyBmb3IgY3ljbGVzIGluIHRoZSBncmFwaCBhbmQgZGV0ZXJtaW5lcyB3aGljaCBlZGdlcyB0byByZXZlcnNlIHRvIGJyZWFrIHRoZSBjeWNsZXMuIFJldmVyc2VkIGVkZ2VzIHdpbGwgZW5kIHVwIHBvaW50aW5nIHRvIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gb2YgcmVndWxhciBlZGdlcyAodGhhdCBpcywgcmV2ZXJzZWQgZWRnZXMgd2lsbCBwb2ludCBsZWZ0IGlmIGVkZ2VzIHVzdWFsbHkgcG9pbnQgcmlnaHQpLiIpLHhDdCksdXMpLEZUdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxLSSkseGN0KSwiTm9kZSBMYXllcmluZyBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3Igbm9kZSBsYXllcmluZy4iKSxEQ3QpLHVzKSxJOXQpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsUDZ0KSx4Y3QpLCJMYXllciBDb25zdHJhaW50IiksIkRldGVybWluZXMgYSBjb25zdHJhaW50IG9uIHRoZSBwbGFjZW1lbnQgb2YgdGhlIG5vZGUgcmVnYXJkaW5nIHRoZSBsYXllcmluZy4iKSxMQ3QpLHVzKSxmQ3QpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsRjZ0KSx4Y3QpLCJMYXllciBDaG9pY2UgQ29uc3RyYWludCIpLCJBbGxvd3MgdG8gc2V0IGEgY29uc3RyYWludCByZWdhcmRpbmcgdGhlIGxheWVyIHBsYWNlbWVudCBvZiBhIG5vZGUuIExldCBpIGJlIHRoZSB2YWx1ZSBvZiB0ZWggY29uc3RyYWludC4gQXNzdW1lZCB0aGUgZHJhd2luZyBoYXMgbiBsYXllcnMgYW5kIGkgPCBuLiBJZiBzZXQgdG8gaSwgaXQgZXhwcmVzc2VzIHRoYXQgdGhlIG5vZGUgc2hvdWxkIGJlIHBsYWNlZCBpbiBpLXRoIGxheWVyLiBTaG91bGQgaT49biBiZSB0cnVlIHRoZW4gdGhlIG5vZGUgaXMgcGxhY2VkIGluIHRoZSBsYXN0IGxheWVyIG9mIHRoZSBkcmF3aW5nLiBOb3RlIHRoYXQgdGhpcyBvcHRpb24gaXMgbm90IHBhcnQgb2YgYW55IG9mIEVMSyBMYXllcmVkJ3MgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBidXQgaXMgb25seSBldmFsdWF0ZWQgYXMgcGFydCBvZiB0aGUgYEludGVyYWN0aXZlTGF5ZXJlZEdyYXBoVmlzaXRvcmAsIHdoaWNoIG11c3QgYmUgYXBwbGllZCBtYW51YWxseSBvciB1c2VkIHZpYSB0aGUgYERpYWdyYW1MYXlvdXRFbmdpbmUuIikscGUoLTEpKSxnYyksamEpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsTjZ0KSx4Y3QpLCJMYXllciBJRCIpLCJMYXllciBpZGVudGlmaWVyIHRoYXQgd2FzIGNhbGN1bGF0ZWQgYnkgRUxLIExheWVyZWQgZm9yIGEgbm9kZS4gVGhpcyBpcyBvbmx5IGdlbmVyYXRlZCBpZiBpbnRlcmFjdGl2ZUxheW90IG9yIGdlbmVyYXRlUG9zaXRpb25BbmRMYXllcklkcyBpcyBzZXQuIikscGUoLTEpKSxnYyksamEpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsWm90KSxJMWUpLCJVcHBlciBCb3VuZCBPbiBXaWR0aCBbTWluV2lkdGggTGF5ZXJlcl0iKSwiRGVmaW5lcyBhIGxvb3NlIHVwcGVyIGJvdW5kIG9uIHRoZSB3aWR0aCBvZiB0aGUgTWluV2lkdGggbGF5ZXJlci4gSWYgc2V0IHRvICctMScgbXVsdGlwbGUgdmFsdWVzIGFyZSB0ZXN0ZWQgYW5kIHRoZSBiZXN0IHJlc3VsdCBpcyBzZWxlY3RlZC4iKSxwZSg0KSksZ2MpLGphKSx1bihxbikpKSksY2EoZSxab3QsS0ksJHdlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsSm90KSxJMWUpLCJVcHBlciBMYXllciBFc3RpbWF0aW9uIFNjYWxpbmcgRmFjdG9yIFtNaW5XaWR0aCBMYXllcmVyXSIpLCJNdWx0aXBsaWVkIHdpdGggVXBwZXIgQm91bmQgT24gV2lkdGggZm9yIGRlZmluaW5nIGFuIHVwcGVyIGJvdW5kIG9uIHRoZSB3aWR0aCBvZiBsYXllcnMgd2hpY2ggaGF2ZW4ndCBiZWVuIGRldGVybWluZWQgeWV0LCBidXQgd2hvc2UgbWF4aW11bSB3aWR0aCBoYWQgYmVlbiAocm91Z2hseSkgZXN0aW1hdGVkIGJ5IHRoZSBNaW5XaWR0aCBhbGdvcml0aG0uIENvbXBlbnNhdGVzIGZvciB0b28gaGlnaCBlc3RpbWF0aW9ucy4gSWYgc2V0IHRvICctMScgbXVsdGlwbGUgdmFsdWVzIGFyZSB0ZXN0ZWQgYW5kIHRoZSBiZXN0IHJlc3VsdCBpcyBzZWxlY3RlZC4iKSxwZSgyKSksZ2MpLGphKSx1bihxbikpKSksY2EoZSxKb3QsS0kscXdlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsdGN0KSxPMWUpLCJOb2RlIFByb21vdGlvbiBTdHJhdGVneSIpLCJSZWR1Y2VzIG51bWJlciBvZiBkdW1teSBub2RlcyBhZnRlciBsYXllcmluZyBwaGFzZSAoaWYgcG9zc2libGUpLiIpLE1DdCksdXMpLHo5dCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxlY3QpLE8xZSksIk1heCBOb2RlIFByb21vdGlvbiBJdGVyYXRpb25zIiksIkxpbWl0cyB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgZm9yIG5vZGUgcHJvbW90aW9uLiIpLHBlKDApKSxnYyksamEpLHVuKHFuKSkpKSxjYShlLGVjdCx0Y3QsbnVsbCksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLG5jdCksImxheWVyaW5nLmNvZmZtYW5HcmFoYW0iKSwiTGF5ZXIgQm91bmQiKSwiVGhlIG1heGltdW0gbnVtYmVyIG9mIG5vZGVzIGFsbG93ZWQgcGVyIGxheWVyLiIpLHBlKHdpKSksZ2MpLGphKSx1bihxbikpKSksY2EoZSxuY3QsS0ksRndlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsSF8pLFhJKSwiQ3Jvc3NpbmcgTWluaW1pemF0aW9uIFN0cmF0ZWd5IiksIlN0cmF0ZWd5IGZvciBjcm9zc2luZyBtaW5pbWl6YXRpb24uIikseUN0KSx1cyksRFR0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEI2dCksWEkpLCJGb3JjZSBOb2RlIE1vZGVsIE9yZGVyIiksIlRoZSBub2RlIG9yZGVyIGdpdmVuIGJ5IHRoZSBtb2RlbCBkb2VzIG5vdCBjaGFuZ2UgdG8gcHJvZHVjZSBhIGJldHRlciBsYXlvdXQuIEUuZy4gaWYgbm9kZSBBIGlzIGJlZm9yZSBub2RlIEIgaW4gdGhlIG1vZGVsIHRoaXMgaXMgbm90IGNoYW5nZWQgZHVyaW5nIGNyb3NzaW5nIG1pbmltaXphdGlvbi4gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIG5vZGUgbW9kZWwgb3JkZXIgaXMgYWxyZWFkeSByZXNwZWN0ZWQgYmVmb3JlIGNyb3NzaW5nIG1pbmltaXphdGlvbi4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgc2V0dGluZyBjb25zaWRlck1vZGVsT3JkZXIuc3RyYXRlZ3kgdG8gTk9ERVNfQU5EX0VER0VTLiIpLCExKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUscmN0KSxYSSksIkhpZXJhcmNoaWNhbCBTd2VlcGluZXNzIiksIkhvdyBsaWtlbHkgaXQgaXMgdG8gdXNlIGNyb3NzLWhpZXJhcmNoeSAoMSkgdnMgYm90dG9tLXVwICgtMSkuIiksLjEpLE9vKSxsYSksdW4ocW4pKSkpLGNhKGUscmN0LHZILG93ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGljdCksWEkpLCJTZW1pLUludGVyYWN0aXZlIENyb3NzaW5nIE1pbmltaXphdGlvbiIpLCJQcmVzZXJ2ZXMgdGhlIG9yZGVyIG9mIG5vZGVzIHdpdGhpbiBhIGxheWVyIGJ1dCBzdGlsbCBtaW5pbWl6ZXMgY3Jvc3NpbmdzIGJldHdlZW4gZWRnZXMgY29ubmVjdGluZyBsb25nIGVkZ2UgZHVtbWllcy4gRGVyaXZlcyB0aGUgZGVzaXJlZCBvcmRlciBmcm9tIHBvc2l0aW9ucyBzcGVjaWZpZWQgYnkgdGhlICdvcmcuZWNsaXBzZS5lbGsucG9zaXRpb24nIGxheW91dCBvcHRpb24uIFJlcXVpcmVzIGEgY3Jvc3NpbmcgbWluaW1pemF0aW9uIHN0cmF0ZWd5IHRoYXQgaXMgYWJsZSB0byBwcm9jZXNzICdpbi1sYXllcicgY29uc3RyYWludHMuIiksITEpLExhKSxScyksdW4ocW4pKSkpLGNhKGUsaWN0LEhfLGh3ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFI2dCksWEkpLCJQb3NpdGlvbiBDaG9pY2UgQ29uc3RyYWludCIpLCJBbGxvd3MgdG8gc2V0IGEgY29uc3RyYWludCByZWdhcmRpbmcgdGhlIHBvc2l0aW9uIHBsYWNlbWVudCBvZiBhIG5vZGUgaW4gYSBsYXllci4gQXNzdW1lZCB0aGUgbGF5ZXIgaW4gd2hpY2ggdGhlIG5vZGUgcGxhY2VkIGluY2x1ZGVzIG4gb3RoZXIgbm9kZXMgYW5kIGkgPCBuLiBJZiBzZXQgdG8gaSwgaXQgZXhwcmVzc2VzIHRoYXQgdGhlIG5vZGUgc2hvdWxkIGJlIHBsYWNlZCBhdCB0aGUgaS10aCBwb3NpdGlvbi4gU2hvdWxkIGk+PW4gYmUgdHJ1ZSB0aGVuIHRoZSBub2RlIGlzIHBsYWNlZCBhdCB0aGUgbGFzdCBwb3NpdGlvbiBpbiB0aGUgbGF5ZXIuIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBpcyBub3QgcGFydCBvZiBhbnkgb2YgRUxLIExheWVyZWQncyBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zIGJ1dCBpcyBvbmx5IGV2YWx1YXRlZCBhcyBwYXJ0IG9mIHRoZSBgSW50ZXJhY3RpdmVMYXllcmVkR3JhcGhWaXNpdG9yYCwgd2hpY2ggbXVzdCBiZSBhcHBsaWVkIG1hbnVhbGx5IG9yIHVzZWQgdmlhIHRoZSBgRGlhZ3JhbUxheW91dEVuZ2luZS4iKSxwZSgtMSkpLGdjKSxqYSksdW4oZWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxqNnQpLFhJKSwiUG9zaXRpb24gSUQiKSwiUG9zaXRpb24gd2l0aGluIGEgbGF5ZXIgdGhhdCB3YXMgZGV0ZXJtaW5lZCBieSBFTEsgTGF5ZXJlZCBmb3IgYSBub2RlLiBUaGlzIGlzIG9ubHkgZ2VuZXJhdGVkIGlmIGludGVyYWN0aXZlTGF5b3Qgb3IgZ2VuZXJhdGVQb3NpdGlvbkFuZExheWVySWRzIGlzIHNldC4iKSxwZSgtMSkpLGdjKSxqYSksdW4oZWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSwkNnQpLFAxZSksIkdyZWVkeSBTd2l0Y2ggQWN0aXZhdGlvbiBUaHJlc2hvbGQiKSwiQnkgZGVmYXVsdCBpdCBpcyBkZWNpZGVkIGF1dG9tYXRpY2FsbHkgaWYgdGhlIGdyZWVkeSBzd2l0Y2ggaXMgYWN0aXZhdGVkIG9yIG5vdC4gVGhlIGRlY2lzaW9uIGlzIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHNpemUgb2YgdGhlIGlucHV0IGdyYXBoICh3aXRob3V0IGR1bW15IG5vZGVzKSBpcyBzbWFsbGVyIHRoYW4gdGhlIHZhbHVlIG9mIHRoaXMgb3B0aW9uLiBBICcwJyBlbmZvcmNlcyB0aGUgYWN0aXZhdGlvbi4iKSxwZSg0MCkpLGdjKSxqYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxzY3QpLFAxZSksIkdyZWVkeSBTd2l0Y2ggQ3Jvc3NpbmcgTWluaW1pemF0aW9uIiksIkdyZWVkeSBTd2l0Y2ggc3RyYXRlZ3kgZm9yIGNyb3NzaW5nIG1pbmltaXphdGlvbi4gVGhlIGdyZWVkeSBzd2l0Y2ggaGV1cmlzdGljIGlzIGV4ZWN1dGVkIGFmdGVyIHRoZSByZWd1bGFyIGNyb3NzaW5nIG1pbmltaXphdGlvbiBhcyBhIHBvc3QtcHJvY2Vzc29yLiBOb3RlIHRoYXQgaWYgJ2hpZXJhcmNoeUhhbmRsaW5nJyBpcyBzZXQgdG8gJ0lOQ0xVREVfQ0hJTERSRU4nLCB0aGUgJ2dyZWVkeVN3aXRjaEhpZXJhcmNoaWNhbC50eXBlJyBvcHRpb24gbXVzdCBiZSB1c2VkLiIpLG1DdCksdXMpLHFsdCksdW4ocW4pKSkpLGNhKGUsc2N0LEhfLHN3ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGFIKSwiY3Jvc3NpbmdNaW5pbWl6YXRpb24uZ3JlZWR5U3dpdGNoSGllcmFyY2hpY2FsIiksIkdyZWVkeSBTd2l0Y2ggQ3Jvc3NpbmcgTWluaW1pemF0aW9uIChoaWVyYXJjaGljYWwpIiksIkFjdGl2YXRlcyB0aGUgZ3JlZWR5IHN3aXRjaCBoZXVyaXN0aWMgaW4gY2FzZSBoaWVyYXJjaGljYWwgbGF5b3V0IGlzIHVzZWQuIFRoZSBkaWZmZXJlbmNlcyB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCBjYXNlIChzZWUgJ2dyZWVkeVN3aXRjaC50eXBlJykgYXJlOiAxKSBncmVlZHkgc3dpdGNoIGlzIGluYWN0aXZlIGJ5IGRlZmF1bHQsIDMpIG9ubHkgdGhlIG9wdGlvbiB2YWx1ZSBzZXQgb24gdGhlIG5vZGUgYXQgd2hpY2ggaGllcmFyY2hpY2FsIGxheW91dCBzdGFydHMgaXMgcmVsZXZhbnQsIGFuZCAyKSBpZiBpdCdzIGFjdGl2YXRlZCBieSB0aGUgdXNlciwgaXQgcHJvcGVybHkgYWRkcmVzc2VzIGhpZXJhcmNoeS1jcm9zc2luZyBlZGdlcy4iKSx2Q3QpLHVzKSxxbHQpLHVuKHFuKSkpKSxjYShlLGFILEhfLG53ZSksY2EoZSxhSCx2SCxyd2UpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxJNCksRjFlKSwiTm9kZSBQbGFjZW1lbnQgU3RyYXRlZ3kiKSwiU3RyYXRlZ3kgZm9yIG5vZGUgcGxhY2VtZW50LiIpLEZDdCksdXMpLE45dCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxvSCksRjFlKSwiRmF2b3IgU3RyYWlnaHQgRWRnZXMgT3ZlciBCYWxhbmNpbmciKSwiRmF2b3Igc3RyYWlnaHQgZWRnZXMgb3ZlciBhIGJhbGFuY2VkIG5vZGUgcGxhY2VtZW50LiBUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gdGhlIHVzZWQgJ2VkZ2VSb3V0aW5nJy4gRm9yIGFuIG9ydGhvZ29uYWwgc3R5bGUgaXQgaXMgc2V0IHRvIHRydWUsIGZvciBhbGwgb3RoZXIgc3R5bGVzIHRvIGZhbHNlLiIpLExhKSxScyksdW4ocW4pKSkpLGNhKGUsb0gsSTQsSndlKSxjYShlLG9ILEk0LHR2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGFjdCksTjFlKSwiQksgRWRnZSBTdHJhaWdodGVuaW5nIiksIlNwZWNpZmllcyB3aGV0aGVyIHRoZSBCcmFuZGVzIEtvZXBmIG5vZGUgcGxhY2VyIHRyaWVzIHRvIGluY3JlYXNlIHRoZSBudW1iZXIgb2Ygc3RyYWlnaHQgZWRnZXMgYXQgdGhlIGV4cGVuc2Ugb2YgZGlhZ3JhbSBzaXplLiBUaGVyZSBpcyBhIHN1YnRsZSBkaWZmZXJlbmNlIHRvIHRoZSAnZmF2b3JTdHJhaWdodEVkZ2VzJyBvcHRpb24sIHdoaWNoIGRlY2lkZXMgd2hldGhlciBhIGJhbGFuY2VkIHBsYWNlbWVudCBvZiB0aGUgbm9kZXMgaXMgZGVzaXJlZCwgb3Igbm90LiBJbiBiayB0ZXJtcyB0aGlzIG1lYW5zIGNvbWJpbmluZyB0aGUgZm91ciBhbGlnbm1lbnRzIGludG8gYSBzaW5nbGUgYmFsYW5jZWQgb25lLCBvciBub3QuIFRoaXMgb3B0aW9uIG9uIHRoZSBvdGhlciBoYW5kIHRyaWVzIHRvIHN0cmFpZ2h0ZW4gYWRkaXRpb25hbCBlZGdlcyBkdXJpbmcgdGhlIGNyZWF0aW9uIG9mIGVhY2ggb2YgdGhlIGZvdXIgYWxpZ25tZW50cy4iKSxJQ3QpLHVzKSwkVHQpLHVuKHFuKSkpKSxjYShlLGFjdCxJNCxLd2UpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxvY3QpLE4xZSksIkJLIEZpeGVkIEFsaWdubWVudCIpLCJUZWxscyB0aGUgQksgbm9kZSBwbGFjZXIgdG8gdXNlIGEgY2VydGFpbiBhbGlnbm1lbnQgKG91dCBvZiBpdHMgZm91cikgaW5zdGVhZCBvZiB0aGUgb25lIHByb2R1Y2luZyB0aGUgc21hbGxlc3QgaGVpZ2h0LCBvciB0aGUgY29tYmluYXRpb24gb2YgYWxsIGZvdXIuIiksT0N0KSx1cyksR1R0KSx1bihxbikpKSksY2EoZSxvY3QsSTQsUXdlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsY2N0KSwibm9kZVBsYWNlbWVudC5saW5lYXJTZWdtZW50cyIpLCJMaW5lYXIgU2VnbWVudHMgRGVmbGVjdGlvbiBEYW1wZW5pbmciKSwiRGFtcGVucyB0aGUgbW92ZW1lbnQgb2Ygbm9kZXMgdG8ga2VlcCB0aGUgZGlhZ3JhbSBmcm9tIGdldHRpbmcgdG9vIGxhcmdlLiIpLC4zKSxPbyksbGEpLHVuKHFuKSkpKSxjYShlLGNjdCxJNCxudmUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSx1Y3QpLCJub2RlUGxhY2VtZW50Lm5ldHdvcmtTaW1wbGV4IiksIk5vZGUgRmxleGliaWxpdHkiKSwiQWltcyBhdCBzaG9ydGVyIGFuZCBzdHJhaWdodGVyIGVkZ2VzLiBUd28gY29uZmlndXJhdGlvbnMgYXJlIHBvc3NpYmxlOiAoYSkgYWxsb3cgcG9ydHMgdG8gbW92ZSBmcmVlbHkgb24gdGhlIHNpZGUgdGhleSBhcmUgYXNzaWduZWQgdG8gKHRoZSBvcmRlciBpcyBhbHdheXMgZGVmaW5lZCBiZWZvcmVoYW5kKSwgKGIpIGFkZGl0aW9uYWxseSBhbGxvdyB0byBlbmxhcmdlIGEgbm9kZSB3aGVyZXZlciBpdCBoZWxwcy4gSWYgdGhpcyBvcHRpb24gaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGEgbm9kZSwgdGhlICdub2RlRmxleGliaWxpdHkuZGVmYXVsdCcgdmFsdWUgaXMgdXNlZCwgd2hpY2ggaXMgc3BlY2lmaWVkIGZvciB0aGUgbm9kZSdzIHBhcmVudC4iKSx1cykseWh0KSx1bihlYSkpKSksY2EoZSx1Y3QsSTQsYXZlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsbGN0KSwibm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleC5ub2RlRmxleGliaWxpdHkiKSwiTm9kZSBGbGV4aWJpbGl0eSBEZWZhdWx0IiksIkRlZmF1bHQgdmFsdWUgb2YgdGhlICdub2RlRmxleGliaWxpdHknIG9wdGlvbiBmb3IgdGhlIGNoaWxkcmVuIG9mIGEgaGllcmFyY2hpY2FsIG5vZGUuIiksUEN0KSx1cykseWh0KSx1bihxbikpKSksY2EoZSxsY3QsSTQsc3ZlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsejZ0KSxCMWUpLCJTZWxmLUxvb3AgRGlzdHJpYnV0aW9uIiksIkFsdGVyIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIGxvb3BzIGFyb3VuZCB0aGUgbm9kZS4gSXQgb25seSB0YWtlcyBlZmZlY3QgZm9yIFBvcnRDb25zdHJhaW50cy5GUkVFLiIpLENDdCksdXMpLFc5dCksdW4oZWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxxNnQpLEIxZSksIlNlbGYtTG9vcCBPcmRlcmluZyIpLCJBbHRlciB0aGUgb3JkZXJpbmcgb2YgdGhlIGxvb3BzIHRoZXkgY2FuIGVpdGhlciBiZSBzdGFja2VkIG9yIHNlcXVlbmNlZC4gSXQgb25seSB0YWtlcyBlZmZlY3QgZm9yIFBvcnRDb25zdHJhaW50cy5GUkVFLiIpLF9DdCksdXMpLFk5dCksdW4oZWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxjSCksImVkZ2VSb3V0aW5nLnNwbGluZXMiKSwiU3BsaW5lIFJvdXRpbmcgTW9kZSIpLCJTcGVjaWZpZXMgdGhlIHdheSBjb250cm9sIHBvaW50cyBhcmUgYXNzZW1ibGVkIGZvciBlYWNoIGluZGl2aWR1YWwgZWRnZS4gQ09OU0VSVkFUSVZFIGVuc3VyZXMgdGhhdCBlZGdlcyBhcmUgcHJvcGVybHkgcm91dGVkIGFyb3VuZCB0aGUgbm9kZXMgYnV0IGZlZWxzIHJhdGhlciBvcnRob2dvbmFsIGF0IHRpbWVzLiBTTE9QUFkgdXNlcyBmZXdlciBjb250cm9sIHBvaW50cyB0byBvYnRhaW4gY3VydmllciBlZGdlIHJvdXRlcyBidXQgbWF5IHJlc3VsdCBpbiBlZGdlcyBvdmVybGFwcGluZyBub2Rlcy4iKSxTQ3QpLHVzKSxYOXQpLHVuKHFuKSkpKSxjYShlLGNILFFJLGt3ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHVIKSwiZWRnZVJvdXRpbmcuc3BsaW5lcy5zbG9wcHkiKSwiU2xvcHB5IFNwbGluZSBMYXllciBTcGFjaW5nIEZhY3RvciIpLCJTcGFjaW5nIGZhY3RvciBmb3Igcm91dGluZyBhcmVhIGJldHdlZW4gbGF5ZXJzIHdoZW4gdXNpbmcgc2xvcHB5IHNwbGluZSByb3V0aW5nLiIpLC4yKSxPbyksbGEpLHVuKHFuKSkpKSxjYShlLHVILFFJLFR3ZSksY2EoZSx1SCxjSCxDd2UpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxoY3QpLCJlZGdlUm91dGluZy5wb2x5bGluZSIpLCJTbG9wZWQgRWRnZSBab25lIFdpZHRoIiksIldpZHRoIG9mIHRoZSBzdHJpcCB0byB0aGUgbGVmdCBhbmQgdG8gdGhlIHJpZ2h0IG9mIGVhY2ggbGF5ZXIgd2hlcmUgdGhlIHBvbHlsaW5lIGVkZ2Ugcm91dGVyIGlzIGFsbG93ZWQgdG8gcmVmcmFpbiBmcm9tIGVuc3VyaW5nIHRoYXQgZWRnZXMgYXJlIHJvdXRlZCBob3Jpem9udGFsbHkuIFRoaXMgcHJldmVudHMgYXdrd2FyZCBiZW5kIHBvaW50cyBmb3Igbm9kZXMgdGhhdCBleHRlbnQgYWxtb3N0IHRvIHRoZSBlZGdlIG9mIHRoZWlyIGxheWVyLiIpLDIpLE9vKSxsYSksdW4ocW4pKSkpLGNhKGUsaGN0LFFJLHZ3ZSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLEg2dCksUjEpLCJTcGFjaW5nIEJhc2UgVmFsdWUiKSwiQW4gb3B0aW9uYWwgYmFzZSB2YWx1ZSBmb3IgYWxsIG90aGVyIGxheW91dCBvcHRpb25zIG9mIHRoZSAnc3BhY2luZycgZ3JvdXAuIEl0IGNhbiBiZSB1c2VkIHRvIGNvbnZlbmllbnRseSBhbHRlciB0aGUgb3ZlcmFsbCAnc3BhY2lvdXNuZXNzJyBvZiB0aGUgZHJhd2luZy4gV2hlbmV2ZXIgYW4gZXhwbGljaXQgdmFsdWUgaXMgc2V0IGZvciB0aGUgb3RoZXIgbGF5b3V0IG9wdGlvbnMsIHRoaXMgYmFzZSB2YWx1ZSB3aWxsIGhhdmUgbm8gZWZmZWN0LiBUaGUgYmFzZSB2YWx1ZSBpcyBub3QgaW5oZXJpdGVkLCBpLmUuIGl0IG11c3QgYmUgc2V0IGZvciBlYWNoIGhpZXJhcmNoaWNhbCBub2RlLiIpLE9vKSxsYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxWNnQpLFIxKSwiRWRnZSBOb2RlIEJldHdlZW4gTGF5ZXJzIFNwYWNpbmciKSwiVGhlIHNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gbm9kZXMgYW5kIGVkZ2VzIHRoYXQgYXJlIHJvdXRlZCBuZXh0IHRvIHRoZSBub2RlJ3MgbGF5ZXIuIEZvciB0aGUgc3BhY2luZyBiZXR3ZWVuIG5vZGVzIGFuZCBlZGdlcyB0aGF0IGNyb3NzIHRoZSBub2RlJ3MgbGF5ZXIgJ3NwYWNpbmcuZWRnZU5vZGUnIGlzIHVzZWQuIiksMTApLE9vKSxsYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxHNnQpLFIxKSwiRWRnZSBFZGdlIEJldHdlZW4gTGF5ZXIgU3BhY2luZyIpLCJTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIHBhaXJzIG9mIGVkZ2VzIHRoYXQgYXJlIHJvdXRlZCBiZXR3ZWVuIHRoZSBzYW1lIHBhaXIgb2YgbGF5ZXJzLiBOb3RlIHRoYXQgJ3NwYWNpbmcuZWRnZUVkZ2UnIGlzIHVzZWQgZm9yIHRoZSBzcGFjaW5nIGJldHdlZW4gcGFpcnMgb2YgZWRnZXMgY3Jvc3NpbmcgdGhlIHNhbWUgbGF5ZXIuIiksMTApLE9vKSxsYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxVNnQpLFIxKSwiTm9kZSBOb2RlIEJldHdlZW4gTGF5ZXJzIFNwYWNpbmciKSwiVGhlIHNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYW55IHBhaXIgb2Ygbm9kZXMgb2YgdHdvIGFkamFjZW50IGxheWVycy4gTm90ZSB0aGF0ICdzcGFjaW5nLm5vZGVOb2RlJyBpcyB1c2VkIGZvciB0aGUgc3BhY2luZyBiZXR3ZWVuIG5vZGVzIHdpdGhpbiB0aGUgbGF5ZXIgaXRzZWxmLiIpLDIwKSxPbyksbGEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsVzZ0KSxua3QpLCJEaXJlY3Rpb24gUHJpb3JpdHkiKSwiRGVmaW5lcyBob3cgaW1wb3J0YW50IGl0IGlzIHRvIGhhdmUgYSBjZXJ0YWluIGVkZ2UgcG9pbnQgaW50byB0aGUgZGlyZWN0aW9uIG9mIHRoZSBvdmVyYWxsIGxheW91dC4gVGhpcyBvcHRpb24gaXMgZXZhbHVhdGVkIGR1cmluZyB0aGUgY3ljbGUgYnJlYWtpbmcgcGhhc2UuIikscGUoMCkpLGdjKSxqYSksdW4oUGQpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxZNnQpLG5rdCksIlNob3J0bmVzcyBQcmlvcml0eSIpLCJEZWZpbmVzIGhvdyBpbXBvcnRhbnQgaXQgaXMgdG8ga2VlcCBhbiBlZGdlIGFzIHNob3J0IGFzIHBvc3NpYmxlLiBUaGlzIG9wdGlvbiBpcyBldmFsdWF0ZWQgZHVyaW5nIHRoZSBsYXllcmluZyBwaGFzZS4iKSxwZSgwKSksZ2MpLGphKSx1bihQZCkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEs2dCksbmt0KSwiU3RyYWlnaHRuZXNzIFByaW9yaXR5IiksIkRlZmluZXMgaG93IGltcG9ydGFudCBpdCBpcyB0byBrZWVwIGFuIGVkZ2Ugc3RyYWlnaHQsIGkuZS4gYWxpZ25lZCB3aXRoIG9uZSBvZiB0aGUgdHdvIGF4ZXMuIFRoaXMgb3B0aW9uIGlzIGV2YWx1YXRlZCBkdXJpbmcgbm9kZSBwbGFjZW1lbnQuIikscGUoMCkpLGdjKSxqYSksdW4oUGQpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxmY3QpLHJrdCksSmZlKSwiVHJpZXMgdG8gZnVydGhlciBjb21wYWN0IGNvbXBvbmVudHMgKGRpc2Nvbm5lY3RlZCBzdWItZ3JhcGhzKS4iKSwhMSksTGEpLFJzKSx1bihxbikpKSksY2EoZSxmY3QsUl8sITApLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxYNnQpLFIxZSksIlBvc3QgQ29tcGFjdGlvbiBTdHJhdGVneSIpLGoxZSksZ0N0KSx1cyksUVR0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFE2dCksUjFlKSwiUG9zdCBDb21wYWN0aW9uIENvbnN0cmFpbnQgQ2FsY3VsYXRpb24iKSxqMWUpLGRDdCksdXMpLExUdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxsSCksaWt0KSwiSGlnaCBEZWdyZWUgTm9kZSBUcmVhdG1lbnQiKSwiTWFrZXMgcm9vbSBhcm91bmQgaGlnaCBkZWdyZWUgbm9kZXMgdG8gcGxhY2UgbGVhZnMgYW5kIHRyZWVzLiIpLCExKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZGN0KSxpa3QpLCJIaWdoIERlZ3JlZSBOb2RlIFRocmVzaG9sZCIpLCJXaGV0aGVyIGEgbm9kZSBpcyBjb25zaWRlcmVkIHRvIGhhdmUgYSBoaWdoIGRlZ3JlZS4iKSxwZSgxNikpLGdjKSxqYSksdW4ocW4pKSkpLGNhKGUsZGN0LGxILCEwKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZ2N0KSxpa3QpLCJIaWdoIERlZ3JlZSBOb2RlIE1heGltdW0gVHJlZSBIZWlnaHQiKSwiTWF4aW11bSBoZWlnaHQgb2YgYSBzdWJ0cmVlIGNvbm5lY3RlZCB0byBhIGhpZ2ggZGVncmVlIG5vZGUgdG8gYmUgbW92ZWQgdG8gc2VwYXJhdGUgbGF5ZXJzLiIpLHBlKDUpKSxnYyksamEpLHVuKHFuKSkpKSxjYShlLGdjdCxsSCwhMCksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHRnKSxza3QpLCJHcmFwaCBXcmFwcGluZyBTdHJhdGVneSIpLCJGb3IgY2VydGFpbiBncmFwaHMgYW5kIGNlcnRhaW4gcHJlc2NyaWJlZCBkcmF3aW5nIGFyZWFzIGl0IG1heSBiZSBkZXNpcmFibGUgdG8gc3BsaXQgdGhlIGxhaWQgb3V0IGdyYXBoIGludG8gY2h1bmtzIHRoYXQgYXJlIHBsYWNlZCBzaWRlIGJ5IHNpZGUuIFRoZSBlZGdlcyB0aGF0IGNvbm5lY3QgZGlmZmVyZW50IGNodW5rcyBhcmUgJ3dyYXBwZWQnIGFyb3VuZCBmcm9tIHRoZSBlbmQgb2Ygb25lIGNodW5rIHRvIHRoZSBzdGFydCBvZiB0aGUgb3RoZXIgY2h1bmsuIFRoZSBwb2ludHMgYmV0d2VlbiB0aGUgY2h1bmtzIGFyZSByZWZlcnJlZCB0byBhcyAnY3V0cycuIiksakN0KSx1cyksdF90KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGhIKSxza3QpLCJBZGRpdGlvbmFsIFdyYXBwZWQgRWRnZXMgU3BhY2luZyIpLCJUbyB2aXN1YWxseSBzZXBhcmF0ZSBlZGdlcyB0aGF0IGFyZSB3cmFwcGVkIGZyb20gcmVndWxhcmx5IHJvdXRlZCBlZGdlcyBhbiBhZGRpdGlvbmFsIHNwYWNpbmcgdmFsdWUgY2FuIGJlIHNwZWNpZmllZCBpbiBmb3JtIG9mIHRoaXMgbGF5b3V0IG9wdGlvbi4gVGhlIHNwYWNpbmcgaXMgYWRkZWQgdG8gdGhlIHJlZ3VsYXIgZWRnZU5vZGUgc3BhY2luZy4iKSwxMCksT28pLGxhKSx1bihxbikpKSksY2EoZSxoSCx0ZyxtdmUpLGNhKGUsaEgsdGcseXZlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZkgpLHNrdCksIkNvcnJlY3Rpb24gRmFjdG9yIGZvciBXcmFwcGluZyIpLCJBdCB0aW1lcyBhbmQgZm9yIGNlcnRhaW4gdHlwZXMgb2YgZ3JhcGhzIHRoZSBleGVjdXRlZCB3cmFwcGluZyBtYXkgcHJvZHVjZSByZXN1bHRzIHRoYXQgYXJlIGNvbnNpc3RlbnRseSBiaWFzZWQgaW4gdGhlIHNhbWUgZmFzaGlvbjogZWl0aGVyIHdyYXBwaW5nIHRvIG9mdGVuIG9yIHRvIHJhcmVseS4gVGhpcyBmYWN0b3IgY2FuIGJlIHVzZWQgdG8gY29ycmVjdCB0aGUgYmlhcy4gSW50ZXJuYWxseSwgaXQgaXMgc2ltcGx5IG11bHRpcGxpZWQgd2l0aCB0aGUgJ2FzcGVjdCByYXRpbycgbGF5b3V0IG9wdGlvbi4iKSwxKSxPbyksbGEpLHVuKHFuKSkpKSxjYShlLGZILHRnLGt2ZSksY2EoZSxmSCx0ZyxFdmUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxWXyksJDFlKSwiQ3V0dGluZyBTdHJhdGVneSIpLCJUaGUgc3RyYXRlZ3kgYnkgd2hpY2ggdGhlIGxheWVyIGluZGV4ZXMgYXJlIGRldGVybWluZWQgYXQgd2hpY2ggdGhlIGxheWVyaW5nIGNydW1ibGVzIGludG8gY2h1bmtzLiIpLFJDdCksdXMpLE9UdCksdW4ocW4pKSkpLGNhKGUsVl8sdGcsTHZlKSxjYShlLFZfLHRnLE12ZSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLHBjdCksJDFlKSwiTWFudWFsbHkgU3BlY2lmaWVkIEN1dHMiKSwiQWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnkgaGVyIG93biBjdXRzIGZvciBhIGNlcnRhaW4gZ3JhcGguIiksVjEpLHdoKSx1bihxbikpKSksY2EoZSxwY3QsVl8sQ3ZlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsYmN0KSwid3JhcHBpbmcuY3V0dGluZy5tc2QiKSwiTVNEIEZyZWVkb20iKSwiVGhlIE1TRCBjdXR0aW5nIHN0cmF0ZWd5IHN0YXJ0cyB3aXRoIGFuIGluaXRpYWwgZ3Vlc3Mgb24gdGhlIG51bWJlciBvZiBjaHVua3MgdGhlIGdyYXBoIHNob3VsZCBiZSBzcGxpdCBpbnRvLiBUaGUgZnJlZWRvbSBzcGVjaWZpZXMgaG93IG11Y2ggdGhlIHN0cmF0ZWd5IG1heSBkZXZpYXRlIGZyb20gdGhpcyBndWVzcy4gRS5nLiBpZiBhbiBpbml0aWFsIG51bWJlciBvZiAzIGlzIGNvbXB1dGVkLCBhIGZyZWVkb20gb2YgMSBhbGxvd3MgMiwgMywgYW5kIDQgY3V0cy4iKSxCQ3QpLGdjKSxqYSksdW4ocW4pKSkpLGNhKGUsYmN0LFZfLFN2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGRIKSx6MWUpLCJWYWxpZGlmaWNhdGlvbiBTdHJhdGVneSIpLCJXaGVuIHdyYXBwaW5nIGdyYXBocywgb25lIGNhbiBzcGVjaWZ5IGluZGljZXMgdGhhdCBhcmUgbm90IGFsbG93ZWQgYXMgc3BsaXQgcG9pbnRzLiBUaGUgdmFsaWRpZmljYXRpb24gc3RyYXRlZ3kgbWFrZXMgc3VyZSBldmVyeSBjb21wdXRlZCBzcGxpdCBwb2ludCBpcyBhbGxvd2VkLiIpLCRDdCksdXMpLEo5dCksdW4ocW4pKSkpLGNhKGUsZEgsdGcscXZlKSxjYShlLGRILHRnLEh2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLGdIKSx6MWUpLCJWYWxpZCBJbmRpY2VzIGZvciBXcmFwcGluZyIpLG51bGwpLFYxKSx3aCksdW4ocW4pKSkpLGNhKGUsZ0gsdGcsanZlKSxjYShlLGdILHRnLCR2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHBIKSxha3QpLCJJbXByb3ZlIEN1dHMiKSwiRm9yIGdlbmVyYWwgZ3JhcGhzIGl0IGlzIGltcG9ydGFudCB0aGF0IG5vdCB0b28gbWFueSBlZGdlcyB3cmFwIGJhY2t3YXJkcy4gVGh1cyBhIGNvbXByb21pc2UgYmV0d2VlbiBldmVubHktZGlzdHJpYnV0ZWQgY3V0cyBhbmQgdGhlIHRvdGFsIG51bWJlciBvZiBjdXQgZWRnZXMgaXMgc291Z2h0LiIpLCEwKSxMYSksUnMpLHVuKHFuKSkpKSxjYShlLHBILHRnLFB2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGJIKSxha3QpLCJEaXN0YW5jZSBQZW5hbHR5IFdoZW4gSW1wcm92aW5nIEN1dHMiKSxudWxsKSwyKSxPbyksbGEpLHVuKHFuKSkpKSxjYShlLGJILHRnLEl2ZSksY2EoZSxiSCxwSCwhMCksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHdjdCksYWt0KSwiSW1wcm92ZSBXcmFwcGVkIEVkZ2VzIiksIlRoZSBpbml0aWFsIHdyYXBwaW5nIGlzIHBlcmZvcm1lZCBpbiBhIHZlcnkgc2ltcGxlIHdheS4gQXMgYSBjb25zZXF1ZW5jZSwgZWRnZXMgdGhhdCB3cmFwIGZyb20gb25lIGNodW5rIHRvIGFub3RoZXIgbWF5IGJlIHVubmVjZXNzYXJpbHkgbG9uZy4gQWN0aXZhdGluZyB0aGlzIG9wdGlvbiB0cmllcyB0byBzaG9ydGVuIHN1Y2ggZWRnZXMuIiksITApLExhKSxScyksdW4ocW4pKSkpLGNhKGUsd2N0LHRnLE52ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFo2dCksa2N0KSwiRWRnZSBMYWJlbCBTaWRlIFNlbGVjdGlvbiIpLCJNZXRob2QgdG8gZGVjaWRlIG9uIGVkZ2UgbGFiZWwgc2lkZXMuIiksVEN0KSx1cyksUlR0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEo2dCksa2N0KSwiRWRnZSBDZW50ZXIgTGFiZWwgUGxhY2VtZW50IFN0cmF0ZWd5IiksIkRldGVybWluZXMgaW4gd2hpY2ggbGF5ZXIgY2VudGVyIGxhYmVscyBvZiBsb25nIGVkZ2VzIHNob3VsZCBiZSBwbGFjZWQuIiksRUN0KSx1cyksYjcpLGppKHFuLGx0KGN0KGlwLDEpLG9lLDE3NSwwLFtycF0pKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsd0gpLFpJKSwiQ29uc2lkZXIgTW9kZWwgT3JkZXIiKSwiUHJlc2VydmVzIHRoZSBvcmRlciBvZiBub2RlcyBhbmQgZWRnZXMgaW4gdGhlIG1vZGVsIGZpbGUgaWYgdGhpcyBkb2VzIG5vdCBsZWFkIHRvIGFkZGl0aW9uYWwgZWRnZSBjcm9zc2luZ3MuIERlcGVuZGluZyBvbiB0aGUgc3RyYXRlZ3kgdGhpcyBpcyBub3QgYWx3YXlzIHBvc3NpYmxlIHNpbmNlIHRoZSBub2RlIGFuZCBlZGdlIG9yZGVyIG1pZ2h0IGJlIGNvbmZsaWN0aW5nLiIpLHdDdCksdXMpLEg5dCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSx0a3QpLFpJKSwiTm8gTW9kZWwgT3JkZXIiKSwiU2V0IG9uIGEgbm9kZSB0byBub3Qgc2V0IGEgbW9kZWwgb3JkZXIgZm9yIHRoaXMgbm9kZSBldmVuIHRob3VnaCBpdCBpcyBhIHJlYWwgbm9kZS4iKSwhMSksTGEpLFJzKSx1bihlYSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHZjdCksWkkpLCJDb25zaWRlciBNb2RlbCBPcmRlciBmb3IgQ29tcG9uZW50cyIpLCJJZiBzZXQgdG8gTk9ORSB0aGUgdXN1YWwgb3JkZXJpbmcgc3RyYXRlZ3kgKGJ5IGN1bXVsYXRpdmUgbm9kZSBwcmlvcml0eSBhbmQgc2l6ZSBvZiBub2RlcykgaXMgdXNlZC4gSU5TSURFX1BPUlRfU0lERVMgb3JkZXJzIHRoZSBjb21wb25lbnRzIHdpdGggZXh0ZXJuYWwgcG9ydHMgb25seSBpbnNpZGUgdGhlIGdyb3VwcyB3aXRoIHRoZSBzYW1lIHBvcnQgc2lkZS4gRk9SQ0VfTU9ERUxfT1JERVIgZW5mb3JjZXMgdGhlIG1vZGUgb3JkZXIgb24gY29tcG9uZW50cy4gVGhpcyBvcHRpb24gbWlnaHQgcHJvZHVjZSBiYWQgYWxpZ25tZW50cyBhbmQgc3ViIG9wdGltYWwgZHJhd2luZ3MgaW4gdGVybXMgb2YgdXNlZCBhcmVhIHNpbmNlIHRoZSBvcmRlcmluZyBzaG91bGQgYmUgcmVzcGVjdGVkLiIpLHBDdCksdXMpLEY3dCksdW4ocW4pKSkpLGNhKGUsdmN0LFJfLG51bGwpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxla3QpLFpJKSwiTG9uZyBFZGdlIE9yZGVyaW5nIFN0cmF0ZWd5IiksIkluZGljYXRlcyB3aGV0aGVyIGxvbmcgZWRnZXMgYXJlIHNvcnRlZCB1bmRlciwgb3Zlciwgb3IgZXF1YWwgdG8gbm9kZXMgdGhhdCBoYXZlIG5vIGNvbm5lY3Rpb24gdG8gYSBwcmV2aW91cyBsYXllciBpbiBhIGxlZnQtdG8tcmlnaHQgb3IgcmlnaHQtdG8tbGVmdCBsYXlvdXQuIFVuZGVyIGFuZCBvdmVyIGNoYW5nZXMgdG8gcmlnaHQgYW5kIGxlZnQgaW4gYSB2ZXJ0aWNhbCBsYXlvdXQuIiksYkN0KSx1cyksUDl0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLG1jdCksWkkpLCJDcm9zc2luZyBDb3VudGVyIE5vZGUgT3JkZXIgSW5mbHVlbmNlIiksIkluZGljYXRlcyB3aXRoIHdoYXQgcGVyY2VudGFnZSAoMSBmb3IgMTAwJSkgdmlvbGF0aW9ucyBvZiB0aGUgbm9kZSBtb2RlbCBvcmRlciBhcmUgd2VpZ2h0ZWQgYWdhaW5zdCB0aGUgY3Jvc3NpbmdzIGUuZy4gYSB2YWx1ZSBvZiAwLjUgbWVhbnMgdHdvIG1vZGVsIG9yZGVyIHZpb2xhdGlvbnMgYXJlIGFzIGltcG9ydGFudCBhcyBvbiBlZGdlIGNyb3NzaW5nLiBUaGlzIGFsbG93cyBzb21lIGVkZ2UgY3Jvc3NpbmdzIGluIGZhdm9yIG9mIHByZXNlcnZpbmcgdGhlIG1vZGVsIG9yZGVyLiBJdCBpcyBhZHZpc2VkIHRvIHNldCB0aGlzIHZhbHVlIHRvIGEgdmVyeSBzbWFsbCBwb3NpdGl2ZSB2YWx1ZSAoZS5nLiAwLjAwMSkgdG8gaGF2ZSBtaW5pbWFsIGNyb3NzaW5nIGFuZCBhIG9wdGltYWwgbm9kZSBvcmRlci4gRGVmYXVsdHMgdG8gbm8gaW5mbHVlbmNlICgwKS4iKSwwKSxPbyksbGEpLHVuKHFuKSkpKSxjYShlLG1jdCx3SCxudWxsKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUseWN0KSxaSSksIkNyb3NzaW5nIENvdW50ZXIgUG9ydCBPcmRlciBJbmZsdWVuY2UiKSwiSW5kaWNhdGVzIHdpdGggd2hhdCBwZXJjZW50YWdlICgxIGZvciAxMDAlKSB2aW9sYXRpb25zIG9mIHRoZSBwb3J0IG1vZGVsIG9yZGVyIGFyZSB3ZWlnaHRlZCBhZ2FpbnN0IHRoZSBjcm9zc2luZ3MgZS5nLiBhIHZhbHVlIG9mIDAuNSBtZWFucyB0d28gbW9kZWwgb3JkZXIgdmlvbGF0aW9ucyBhcmUgYXMgaW1wb3J0YW50IGFzIG9uIGVkZ2UgY3Jvc3NpbmcuIFRoaXMgYWxsb3dzIHNvbWUgZWRnZSBjcm9zc2luZ3MgaW4gZmF2b3Igb2YgcHJlc2VydmluZyB0aGUgbW9kZWwgb3JkZXIuIEl0IGlzIGFkdmlzZWQgdG8gc2V0IHRoaXMgdmFsdWUgdG8gYSB2ZXJ5IHNtYWxsIHBvc2l0aXZlIHZhbHVlIChlLmcuIDAuMDAxKSB0byBoYXZlIG1pbmltYWwgY3Jvc3NpbmcgYW5kIGEgb3B0aW1hbCBwb3J0IG9yZGVyLiBEZWZhdWx0cyB0byBubyBpbmZsdWVuY2UgKDApLiIpLDApLE9vKSxsYSksdW4ocW4pKSkpLGNhKGUseWN0LHdILG51bGwpLGlmZSgobmV3IEhCLGUpKX07dmFyIEgyZSxWMmUsRzJlLGRDdCxVMmUsZ0N0LFcyZSxwQ3QsWTJlLEsyZSxYMmUsYkN0LFEyZSxaMmUsd0N0LEoyZSx0d2UsZXdlLHZDdCxud2UscndlLGl3ZSxtQ3Qsc3dlLGF3ZSxvd2UsY3dlLHV3ZSxsd2UsaHdlLGZ3ZSx5Q3QsZHdlLHhDdCxnd2Usa0N0LHB3ZSxFQ3QsYndlLFRDdCx3d2UsdndlLG13ZSxDQ3QseXdlLF9DdCx4d2UsU0N0LGt3ZSxFd2UsVHdlLEN3ZSxfd2UsU3dlLEF3ZSxMd2UsTXdlLER3ZSxBQ3QsSXdlLE93ZSxQd2UsRndlLE53ZSxCd2UsTEN0LFJ3ZSxqd2UsJHdlLHp3ZSxxd2UsSHdlLFZ3ZSxNQ3QsR3dlLERDdCxVd2UsV3dlLFl3ZSxJQ3QsS3dlLFh3ZSxPQ3QsUXdlLFp3ZSxKd2UsdHZlLGV2ZSxudmUscnZlLGl2ZSxQQ3Qsc3ZlLGF2ZSxvdmUsRkN0LGN2ZSxOQ3QsdXZlLGx2ZSxodmUsZnZlLGR2ZSxndmUscHZlLGJ2ZSx3dmUsdnZlLG12ZSx5dmUseHZlLGt2ZSxFdmUsVHZlLEN2ZSxfdmUsQkN0LFN2ZSxBdmUsUkN0LEx2ZSxNdmUsRHZlLEl2ZSxPdmUsUHZlLEZ2ZSxOdmUsQnZlLGpDdCxSdmUsanZlLCR2ZSx6dmUsJEN0LHF2ZSxIdmU7RihrYywiTGF5ZXJlZE1ldGFEYXRhUHJvdmlkZXIiLDg0OCksRCg5ODYsMSxPaCxIQiksbC5RZT1mdW5jdGlvbihlKXtpZmUoZSl9O3ZhciBJZCxabHQsckcsQ1MsaUcsekN0LHNHLHE2LGFHLHFDdCxIQ3QsSmx0LHdiLHRodCwkeSxWQ3QsRE8sZWh0LEdDdCxWdmUsb0csbmh0LF9TLHp5LEd2ZSxXbCxVQ3QsV0N0LGNHLHJodCxPZCx1RyxlZyxZQ3QsS0N0LFhDdCxpaHQsc2h0LFFDdCxKZyxhaHQsWkN0LHF5LEpDdCx0OXQsZTl0LGxHLEh5LGoyLG45dCxyOXQsU28saTl0LFV2ZSx1dSxoRyxzOXQsYTl0LG85dCxvaHQsYzl0LGZHLHU5dCxsOXQsZEcsTnYsaDl0LGNodCxTUyxmOXQsQnYsQVMsZ0csJDIsdWh0LEU3LHBHLHoyLGQ5dCxnOXQscDl0LFQ3LGI5dCxXdmUsWXZlLEt2ZSxYdmUsUnYsVnksY3MsdHAsUXZlLEd5LHc5dCxDNyx2OXQsVXksWnZlLF83LG05dCxINixKdmUsdG1lLElPLGxodCx5OXQsT08sVGYsSjQsVjYsanYscTIsYkcsV3ksaGh0LFM3LEE3LCR2LHQ1LGZodCxQTyxMUyxNUyxkaHQseDl0LGs5dCxFOXQsVDl0LGdodCxDOXQsXzl0LFM5dCxBOXQscGh0LHdHO0Yoa2MsIkxheWVyZWRPcHRpb25zIiw5ODYpLEQoOTg3LDEse30sZlEpLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgZ3F0LGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxGKGtjLCJMYXllcmVkT3B0aW9ucy9MYXllcmVkRmFjdG9yeSIsOTg3KSxEKDEzNzIsMSx7fSksbC5hPTA7dmFyIGVtZTtGKEVjLCJFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlciIsMTM3MiksRCg3NzksMTM3Mix7fSx3M3QpO3ZhciB2RyxubWU7RihrYywiTGF5ZXJlZFNwYWNpbmdzL0xheWVyZWRTcGFjaW5nc0J1aWxkZXIiLDc3OSksRCgzMTMsMjIsezM6MSwzNToxLDIyOjEsMzEzOjEsMjQ2OjEsMjM0OjF9LG45KSxsLktmPWZ1bmN0aW9uKCl7cmV0dXJuIEJjZSh0aGlzKX0sbC5YZj1mdW5jdGlvbigpe3JldHVybiBCY2UodGhpcyl9O3ZhciBiaHQsTDl0LE05dCxtRyx3aHQsRDl0LEk5dD1qcihrYywiTGF5ZXJpbmdTdHJhdGVneSIsMzEzLEhyLFphbixHSmUpLHJtZTtEKDM3OCwyMix7MzoxLDM1OjEsMjI6MSwzNzg6MX0samV0KTt2YXIgdmh0LE85dCx5RyxQOXQ9anIoa2MsIkxvbmdFZGdlT3JkZXJpbmdTdHJhdGVneSIsMzc4LEhyLE1pbixVSmUpLGltZTtEKDE5NywyMix7MzoxLDM1OjEsMjI6MSwxOTc6MX0sbmopO3ZhciBlNSxuNSx4RyxtaHQseWh0PWpyKGtjLCJOb2RlRmxleGliaWxpdHkiLDE5NyxIcixCc24sV0plKSxzbWU7RCgzMTUsMjIsezM6MSwzNToxLDIyOjEsMzE1OjEsMjQ2OjEsMjM0OjF9LExNKSxsLktmPWZ1bmN0aW9uKCl7cmV0dXJuIHhjZSh0aGlzKX0sbC5YZj1mdW5jdGlvbigpe3JldHVybiB4Y2UodGhpcyl9O3ZhciBEUyx4aHQsa2h0LElTLEY5dCxOOXQ9anIoa2MsIk5vZGVQbGFjZW1lbnRTdHJhdGVneSIsMzE1LEhyLHlhbixKSmUpLGFtZTtEKDI2MCwyMix7MzoxLDM1OjEsMjI6MSwyNjA6MX0sSXgpO3ZhciBCOXQsRk8sUjl0LGo5dCxOTywkOXQsa0csRUcsejl0PWpyKGtjLCJOb2RlUHJvbW90aW9uU3RyYXRlZ3kiLDI2MCxIcixRb24sS0plKSxvbWU7RCgzMzksMjIsezM6MSwzNToxLDIyOjEsMzM5OjF9LCRldCk7dmFyIHE5dCx2YixFaHQsSDl0PWpyKGtjLCJPcmRlcmluZ1N0cmF0ZWd5IiwzMzksSHIsUmluLFhKZSksY21lO0QoNDIxLDIyLHszOjEsMzU6MSwyMjoxLDQyMToxfSx6YnQpO3ZhciBUaHQsQ2h0LFY5dD1qcihrYywiUG9ydFNvcnRpbmdTdHJhdGVneSIsNDIxLEhyLHpybixRSmUpLHVtZTtEKDQ1MiwyMix7MzoxLDM1OjEsMjI6MSw0NTI6MX0semV0KTt2YXIgdGwsbnUsT1MsbG1lPWpyKGtjLCJQb3J0VHlwZSIsNDUyLEhyLEJpbixZSmUpLGhtZTtEKDM3NSwyMix7MzoxLDM1OjEsMjI6MSwzNzU6MX0scWV0KTt2YXIgRzl0LF9odCxVOXQsVzl0PWpyKGtjLCJTZWxmTG9vcERpc3RyaWJ1dGlvblN0cmF0ZWd5IiwzNzUsSHIsamluLFpKZSksZm1lO0QoMzc2LDIyLHszOjEsMzU6MSwyMjoxLDM3NjoxfSxxYnQpO3ZhciBCTyxTaHQsWTl0PWpyKGtjLCJTZWxmTG9vcE9yZGVyaW5nU3RyYXRlZ3kiLDM3NixIcixOcm4sdHRuKSxkbWU7RCgzMDQsMSx7MzA0OjF9LGFoZSksRihrYywiU3BhY2luZ3MiLDMwNCksRCgzMzYsMjIsezM6MSwzNToxLDIyOjEsMzM2OjF9LEhldCk7dmFyIEFodCxLOXQsUFMsWDl0PWpyKGtjLCJTcGxpbmVSb3V0aW5nTW9kZSIsMzM2LEhyLHppbixldG4pLGdtZTtEKDMzOCwyMix7MzoxLDM1OjEsMjI6MSwzMzg6MX0sVmV0KTt2YXIgTGh0LFE5dCxaOXQsSjl0PWpyKGtjLCJWYWxpZGlmeVN0cmF0ZWd5IiwzMzgsSHIscWluLG50bikscG1lO0QoMzc3LDIyLHszOjEsMzU6MSwyMjoxLDM3NzoxfSxHZXQpO3ZhciBZeSxNaHQsTDcsdF90PWpyKGtjLCJXcmFwcGluZ1N0cmF0ZWd5IiwzNzcsSHIsJGluLHJ0biksYm1lO0QoMTM4MywxLHpjLGF0dCksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDM3KSx3bWV9LGwucGY9ZnVuY3Rpb24oZSxuKXtJM24odGhpcyx1KGUsMzcpLG4pfTt2YXIgd21lO0YoeEgsIkRlcHRoRmlyc3RDeWNsZUJyZWFrZXIiLDEzODMpLEQoNzgyLDEsemMsZXZ0KSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLHZtZX0sbC5wZj1mdW5jdGlvbihlLG4pe014bih0aGlzLHUoZSwzNyksbil9LGwuWmY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoTmUoZSxaeih0aGlzLmQsZS5jLmxlbmd0aCkpLDEwKX07dmFyIHZtZTtGKHhILCJHcmVlZHlDeWNsZUJyZWFrZXIiLDc4MiksRCgxMzg2LDc4Mix6YyxXR3QpLGwuWmY9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87Zm9yKG89bnVsbCxuPXdpLHM9bmV3IFMoZSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTApLFVzKHIsKGFlKCksVGMpKSYmdShRKHIsVGMpLDE5KS5hPG4mJihuPXUoUShyLFRjKSwxOSkuYSxvPXIpO3JldHVybiBvfHx1KE5lKGUsWnoodGhpcy5kLGUuYy5sZW5ndGgpKSwxMCl9LEYoeEgsIkdyZWVkeU1vZGVsT3JkZXJDeWNsZUJyZWFrZXIiLDEzODYpLEQoMTM4NCwxLHpjLFpKKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLG1tZX0sbC5wZj1mdW5jdGlvbihlLG4pe3Q0bih0aGlzLHUoZSwzNyksbil9O3ZhciBtbWU7Rih4SCwiSW50ZXJhY3RpdmVDeWNsZUJyZWFrZXIiLDEzODQpLEQoMTM4NSwxLHpjLEpKKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLHltZX0sbC5wZj1mdW5jdGlvbihlLG4pe2U0bih0aGlzLHUoZSwzNyksbil9LGwuYT0wLGwuYj0wO3ZhciB5bWU7Rih4SCwiTW9kZWxPcmRlckN5Y2xlQnJlYWtlciIsMTM4NSksRCgxMzg5LDEsemMsalZ0KSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLHhtZX0sbC5wZj1mdW5jdGlvbihlLG4pe1B4bih0aGlzLHUoZSwzNyksbil9O3ZhciB4bWU7RihfeSwiQ29mZm1hbkdyYWhhbUxheWVyZXIiLDEzODkpLEQoMTM5MCwxLE9pLHBSKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGNibih0aGlzLmEsdShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKF95LCJDb2ZmbWFuR3JhaGFtTGF5ZXJlci8wbWV0aG9kcmVmJGNvbXBhcmVOb2Rlc0luVG9wbyRUeXBlIiwxMzkwKSxEKDEzOTEsMSxPaSxYdHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWWVuKHRoaXMuYSx1KGUsMTApLHUobiwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoX3ksIkNvZmZtYW5HcmFoYW1MYXllcmVyL2xhbWJkYSQxJFR5cGUiLDEzOTEpLEQoMTM5MiwxLHpjLEJMKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLGJpKGJpKGJpKG5ldyBWcywoV2EoKSxEZCksKHJvKCksZ2x0KSksZ2IsaDcpLGN1LGw3KX0sbC5wZj1mdW5jdGlvbihlLG4pe0I1bih0aGlzLHUoZSwzNyksbil9LEYoX3ksIkludGVyYWN0aXZlTGF5ZXJlciIsMTM5MiksRCg1NjksMSx7NTY5OjF9LGtxdCksbC5hPTAsbC5jPTAsRihfeSwiSW50ZXJhY3RpdmVMYXllcmVyL0xheWVyU3BhbiIsNTY5KSxEKDEzODgsMSx6YyxxQiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDM3KSxrbWV9LGwucGY9ZnVuY3Rpb24oZSxuKXtkdm4odGhpcyx1KGUsMzcpLG4pfTt2YXIga21lO0YoX3ksIkxvbmdlc3RQYXRoTGF5ZXJlciIsMTM4OCksRCgxMzk1LDEsemMsbnR0KSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLGJpKGJpKGJpKG5ldyBWcywoV2EoKSxEZCksKHJvKCksZ1MpKSxnYixoNyksY3UsbDcpfSxsLnBmPWZ1bmN0aW9uKGUsbil7YXhuKHRoaXMsdShlLDM3KSxuKX0sbC5hPTAsbC5iPTAsbC5kPTA7dmFyIGVfdCxuX3Q7RihfeSwiTWluV2lkdGhMYXllcmVyIiwxMzk1KSxEKDEzOTYsMSxPaSxTcCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBldW4odGhpcyx1KGUsMTApLHUobiwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoX3ksIk1pbldpZHRoTGF5ZXJlci9NaW5PdXRnb2luZ0VkZ2VzQ29tcGFyYXRvciIsMTM5NiksRCgxMzg3LDEsemMsZXR0KSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLEVtZX0sbC5wZj1mdW5jdGlvbihlLG4pe1Q0bih0aGlzLHUoZSwzNyksbil9O3ZhciBFbWU7RihfeSwiTmV0d29ya1NpbXBsZXhMYXllcmVyIiwxMzg3KSxEKDEzOTMsMSx6YyxhWXQpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzNyksYmkoYmkoYmkobmV3IFZzLChXYSgpLERkKSwocm8oKSxnUykpLGdiLGg3KSxjdSxsNyl9LGwucGY9ZnVuY3Rpb24oZSxuKXtoNW4odGhpcyx1KGUsMzcpLG4pfSxsLmQ9MCxsLmY9MCxsLmc9MCxsLmk9MCxsLnM9MCxsLnQ9MCxsLnU9MCxGKF95LCJTdHJldGNoV2lkdGhMYXllcmVyIiwxMzkzKSxEKDEzOTQsMSxPaSxkUSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBJYW4odShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKF95LCJTdHJldGNoV2lkdGhMYXllcmVyLzEiLDEzOTQpLEQoNDAyLDEscWt0KSxsLk5mPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXt9LGwuX2Y9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBubGUodGhpcyxlLG4scil9LGwuTWY9ZnVuY3Rpb24oKXt0aGlzLmc9TnQoYTMsSDFlLDI1LHRoaXMuZCwxNSwxKSx0aGlzLmY9TnQoYTMsSDFlLDI1LHRoaXMuZCwxNSwxKX0sbC5PZj1mdW5jdGlvbihlLG4pe3RoaXMuZVtlXT1OdChDcixYciwyNSxuW2VdLmxlbmd0aCwxNSwxKX0sbC5QZj1mdW5jdGlvbihlLG4scil7dmFyIHM7cz1yW2VdW25dLHMucD1uLHRoaXMuZVtlXVtuXT1ufSxsLlFmPWZ1bmN0aW9uKGUsbixyLHMpe3UoTmUoc1tlXVtuXS5qLHIpLDExKS5wPXRoaXMuZCsrfSxsLmI9MCxsLmM9MCxsLmQ9MCxGKHF1LCJBYnN0cmFjdEJhcnljZW50ZXJQb3J0RGlzdHJpYnV0b3IiLDQwMiksRCgxNjMzLDEsT2ksaE0pLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gQ2ZuKHRoaXMuYSx1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYocXUsIkFic3RyYWN0QmFyeWNlbnRlclBvcnREaXN0cmlidXRvci9sYW1iZGEkMCRUeXBlIiwxNjMzKSxEKDgxNywxLFlJLHJtdCksbC5OZj1mdW5jdGlvbihlLG4scixzLG8saCl7fSxsLlBmPWZ1bmN0aW9uKGUsbixyKXt9LGwuUWY9ZnVuY3Rpb24oZSxuLHIscyl7fSxsLkxmPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuTWY9ZnVuY3Rpb24oKXt0aGlzLmM9dGhpcy5lLmEsdGhpcy5nPXRoaXMuZi5nfSxsLk9mPWZ1bmN0aW9uKGUsbil7bltlXVswXS5jLnA9ZX0sbC5SZj1mdW5jdGlvbigpe3JldHVybiExfSxsLmFnPWZ1bmN0aW9uKGUsbixyLHMpe3I/dWFlKHRoaXMsZSk6KGRhZSh0aGlzLGUscykseWhlKHRoaXMsZSxuKSksZS5jLmxlbmd0aD4xJiYoamUoUmUoUShOYSgoQW4oMCxlLmMubGVuZ3RoKSx1KGUuY1swXSwxMCkpKSwoVGUoKSwkeSkpKSk/RGNlKGUsdGhpcy5kLHUodGhpcyw2NjApKTood24oKSxacyhlLHRoaXMuZCkpLFFuZSh0aGlzLmUsZSkpfSxsLlNmPWZ1bmN0aW9uKGUsbixyLHMpe3ZhciBvLGgsZCx2LGssQyxNO2ZvcihuIT1rS3QocixlLmxlbmd0aCkmJihoPWVbbi0ocj8xOi0xKV0sX210KHRoaXMuZixoLHI/KHNvKCksbnUpOihzbygpLHRsKSkpLG89ZVtuXVswXSxNPSFzfHxvLms9PShWbigpLGtzKSxDPUExKGVbbl0pLHRoaXMuYWcoQyxNLCExLHIpLGQ9MCxrPW5ldyBTKEMpO2suYTxrLmMuYy5sZW5ndGg7KXY9dShKKGspLDEwKSxlW25dW2QrK109djtyZXR1cm4hMX0sbC5UZj1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKGQ9a0t0KG4sZS5sZW5ndGgpLGg9QTEoZVtkXSksdGhpcy5hZyhoLCExLCEwLG4pLHI9MCxvPW5ldyBTKGgpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDEwKSxlW2RdW3IrK109cztyZXR1cm4hMX0sRihxdSwiQmFyeWNlbnRlckhldXJpc3RpYyIsODE3KSxEKDY1OCwxLHs2NTg6MX0sZTgpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iQmFyeWNlbnRlclN0YXRlIFtub2RlPSIrdGhpcy5jKyIsIHN1bW1lZFdlaWdodD0iK3RoaXMuZCsiLCBkZWdyZWU9Iit0aGlzLmIrIiwgYmFyeWNlbnRlcj0iK3RoaXMuYSsiLCB2aXNpdGVkPSIrdGhpcy5lKyJdIn0sbC5iPTAsbC5kPTAsbC5lPSExO3ZhciBUbWU9RihxdSwiQmFyeWNlbnRlckhldXJpc3RpYy9CYXJ5Y2VudGVyU3RhdGUiLDY1OCk7RCgxODAyLDEsT2ksYlIpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaDBuKHRoaXMuYSx1KGUsMTApLHUobiwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYocXUsIkJhcnljZW50ZXJIZXVyaXN0aWMvbGFtYmRhJDAkVHlwZSIsMTgwMiksRCg4MTYsMSxZSSxBNHQpLGwuTWY9ZnVuY3Rpb24oKXt9LGwuTmY9ZnVuY3Rpb24oZSxuLHIscyxvLGgpe30sbC5RZj1mdW5jdGlvbihlLG4scixzKXt9LGwuT2Y9ZnVuY3Rpb24oZSxuKXt0aGlzLmFbZV09TnQoVG1lLHszOjEsNDoxLDU6MSwyMDE4OjF9LDY1OCxuW2VdLmxlbmd0aCwwLDEpLHRoaXMuYltlXT1OdChDbWUsezM6MSw0OjEsNToxLDIwMTk6MX0sMjMzLG5bZV0ubGVuZ3RoLDAsMSl9LGwuUGY9ZnVuY3Rpb24oZSxuLHIpe3RzZSh0aGlzLHJbZV1bbl0sITApfSxsLmM9ITEsRihxdSwiRm9yc3RlckNvbnN0cmFpbnRSZXNvbHZlciIsODE2KSxEKDIzMywxLHsyMzM6MX0sd1F0LHNoZSksbC5JYj1mdW5jdGlvbigpe3ZhciBlLG47Zm9yKG49bmV3IE1wLG4uYSs9IlsiLGU9MDtlPHRoaXMuZC5sZW5ndGg7ZSsrKUdyKG4sZHNlKHRoaXMuZFtlXSkpLEUxKHRoaXMuZyx0aGlzLmRbMF0pLmEhPW51bGwmJkdyKEdyKChuLmErPSI8IixuKSxGWGUoRTEodGhpcy5nLHRoaXMuZFswXSkuYSkpLCI+IiksZTx0aGlzLmQubGVuZ3RoLTEmJihuLmErPVlhKTtyZXR1cm4obi5hKz0iXSIsbikuYX0sbC5hPTAsbC5jPTAsbC5mPTA7dmFyIENtZT1GKHF1LCJGb3JzdGVyQ29uc3RyYWludFJlc29sdmVyL0NvbnN0cmFpbnRHcm91cCIsMjMzKTtEKDE3OTcsMSxVbixRdHQpLGwudGQ9ZnVuY3Rpb24oZSl7dHNlKHRoaXMuYSx1KGUsMTApLCExKX0sRihxdSwiRm9yc3RlckNvbnN0cmFpbnRSZXNvbHZlci9sYW1iZGEkMCRUeXBlIiwxNzk3KSxEKDIxNCwxLHsyMTQ6MSwyMjU6MX0saGhlKSxsLk5mPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXt9LGwuT2Y9ZnVuY3Rpb24oZSxuKXt9LGwuTWY9ZnVuY3Rpb24oKXt0aGlzLnI9TnQoQ3IsWHIsMjUsdGhpcy5uLDE1LDEpfSxsLlBmPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO289cltlXVtuXSxzPW8uZSxzJiZsZSh0aGlzLmIscyl9LGwuUWY9ZnVuY3Rpb24oZSxuLHIscyl7Kyt0aGlzLm59LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4geGhlKHRoaXMuZSxuZXcgSHMpfSxsLmc9ITEsbC5pPSExLGwubj0wLGwucz0hMSxGKHF1LCJHcmFwaEluZm9Ib2xkZXIiLDIxNCksRCgxODMyLDEsWUksaFEpLGwuTmY9ZnVuY3Rpb24oZSxuLHIscyxvLGgpe30sbC5PZj1mdW5jdGlvbihlLG4pe30sbC5RZj1mdW5jdGlvbihlLG4scixzKXt9LGwuX2Y9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiByJiZuPjA/Q3J0KHRoaXMuYSxlW24tMV0sZVtuXSk6IXImJm48ZS5sZW5ndGgtMT9DcnQodGhpcy5hLGVbbl0sZVtuKzFdKTptaXQodGhpcy5hLGVbbl0scj8odmUoKSxCbik6KHZlKCksSG4pKSwkMm4odGhpcyxlLG4scil9LGwuTWY9ZnVuY3Rpb24oKXt0aGlzLmQ9TnQoQ3IsWHIsMjUsdGhpcy5jLDE1LDEpLHRoaXMuYT1uZXcgWU0odGhpcy5kKX0sbC5QZj1mdW5jdGlvbihlLG4scil7dmFyIHM7cz1yW2VdW25dLHRoaXMuYys9cy5qLmMubGVuZ3RofSxsLmM9MCxGKHF1LCJHcmVlZHlQb3J0RGlzdHJpYnV0b3IiLDE4MzIpLEQoMTQwMSwxLHpjLFZCKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB3bG4odShlLDM3KSl9LGwucGY9ZnVuY3Rpb24oZSxuKXskNG4odShlLDM3KSxuKX07dmFyIF9tZTtGKHF1LCJJbnRlcmFjdGl2ZUNyb3NzaW5nTWluaW1pemVyIiwxNDAxKSxEKDE0MDIsMSxPaSxTJHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWWRuKHRoaXMsdShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKHF1LCJJbnRlcmFjdGl2ZUNyb3NzaW5nTWluaW1pemVyLzEiLDE0MDIpLEQoNTA3LDEsezUwNzoxLDEyMzoxLDUxOjF9LGRldCksbC5ZZj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdShlLDM3KSxuPXBqKFNtZSksYmkobiwoV2EoKSxjdSksKHJvKCksSVYpKSxufSxsLnBmPWZ1bmN0aW9uKGUsbil7Sm1uKHRoaXMsdShlLDM3KSxuKX0sbC5lPTA7dmFyIFNtZTtGKHF1LCJMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIiLDUwNyksRCgxMzk4LDEsVW4sQSR0KSxsLnRkPWZ1bmN0aW9uKGUpe2p5bih0aGlzLmEsdShlLDIxNCkpfSxGKHF1LCJMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIvMG1ldGhvZHJlZiRjb21wYXJlRGlmZmVyZW50UmFuZG9taXplZExheW91dHMkVHlwZSIsMTM5OCksRCgxMzk5LDEsVW4sTCR0KSxsLnRkPWZ1bmN0aW9uKGUpe2xsbih0aGlzLmEsdShlLDIxNCkpfSxGKHF1LCJMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIvMW1ldGhvZHJlZiRtaW5pbWl6ZUNyb3NzaW5nc05vQ291bnRlciRUeXBlIiwxMzk5KSxEKDE0MDAsMSxVbixNJHQpLGwudGQ9ZnVuY3Rpb24oZSl7eGxlKHRoaXMuYSx1KGUsMjE0KSl9LEYocXUsIkxheWVyU3dlZXBDcm9zc2luZ01pbmltaXplci8ybWV0aG9kcmVmJG1pbmltaXplQ3Jvc3NpbmdzV2l0aENvdW50ZXIkVHlwZSIsMTQwMCksRCg0NTQsMjIsezM6MSwzNToxLDIyOjEsNDU0OjF9LFVldCk7dmFyIFJPLEZTLFRHLEFtZT1qcihxdSwiTGF5ZXJTd2VlcENyb3NzaW5nTWluaW1pemVyL0Nyb3NzTWluVHlwZSIsNDU0LEhyLEhpbixpdG4pLExtZTtEKDEzOTcsMSxsaSxEayksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gd3l0KCksdShlLDI5KS5hLmMubGVuZ3RoPT0wfSxGKHF1LCJMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIvbGFtYmRhJDAkVHlwZSIsMTM5NyksRCgxNzk5LDEsWUksUFF0KSxsLk1mPWZ1bmN0aW9uKCl7fSxsLk5mPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXt9LGwuUWY9ZnVuY3Rpb24oZSxuLHIscyl7fSxsLk9mPWZ1bmN0aW9uKGUsbil7bltlXVswXS5jLnA9ZSx0aGlzLmJbZV09TnQoTW1lLHszOjEsNDoxLDU6MSwxOTQ0OjF9LDY1OSxuW2VdLmxlbmd0aCwwLDEpfSxsLlBmPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzPXJbZV1bbl0scy5wPW4sdHModGhpcy5iW2VdLG4sbmV3IGdRKX0sRihxdSwiTGF5ZXJTd2VlcFR5cGVEZWNpZGVyIiwxNzk5KSxEKDY1OSwxLHs2NTk6MX0sZ1EpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iTm9kZUluZm8gW2Nvbm5lY3RlZEVkZ2VzPSIrdGhpcy5hKyIsIGhpZXJhcmNoaWNhbEluZmx1ZW5jZT0iK3RoaXMuYisiLCByYW5kb21JbmZsdWVuY2U9Iit0aGlzLmMrIl0ifSxsLmE9MCxsLmI9MCxsLmM9MDt2YXIgTW1lPUYocXUsIkxheWVyU3dlZXBUeXBlRGVjaWRlci9Ob2RlSW5mbyIsNjU5KTtEKDE4MDAsMSx4ZCxwUSksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gdjkobmV3IEwxKHUoZSwxMSkuYikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdjkobmV3IEwxKHUoZSwxMSkuYikpfSxGKHF1LCJMYXllclN3ZWVwVHlwZURlY2lkZXIvbGFtYmRhJDAkVHlwZSIsMTgwMCksRCgxODAxLDEseGQsYlEpLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHY5KG5ldyBMMSh1KGUsMTEpLmIpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHY5KG5ldyBMMSh1KGUsMTEpLmIpKX0sRihxdSwiTGF5ZXJTd2VlcFR5cGVEZWNpZGVyL2xhbWJkYSQxJFR5cGUiLDE4MDEpLEQoMTgzMyw0MDIscWt0LHhIdCksbC4kZj1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqO3N3aXRjaChDPXRoaXMuZyxyLmcpe2Nhc2UgMTp7Zm9yKHM9MCxvPTAsaz1uZXcgUyhlLmopO2suYTxrLmMuYy5sZW5ndGg7KWQ9dShKKGspLDExKSxkLmUuYy5sZW5ndGghPTAmJigrK3MsZC5qPT0odmUoKSxQbikmJisrbyk7Zm9yKGg9bitvLGo9bitzLHY9b3YoZSwoc28oKSx0bCkpLktjKCk7di5PYigpOylkPXUodi5QYigpLDExKSxkLmo9PSh2ZSgpLFBuKT8oQ1tkLnBdPWgsLS1oKTooQ1tkLnBdPWosLS1qKTtyZXR1cm4gc31jYXNlIDI6e2ZvcihNPTAsdj1vdihlLChzbygpLG51KSkuS2MoKTt2Lk9iKCk7KWQ9dSh2LlBiKCksMTEpLCsrTSxDW2QucF09bitNO3JldHVybiBNfWRlZmF1bHQ6dGhyb3cgaXQobmV3IGdNKX19LEYocXUsIkxheWVyVG90YWxQb3J0RGlzdHJpYnV0b3IiLDE4MzMpLEQoNjYwLDgxNyx7NjYwOjEsMjI1OjF9LGJuZSksbC5hZz1mdW5jdGlvbihlLG4scixzKXtyP3VhZSh0aGlzLGUpOihkYWUodGhpcyxlLHMpLHloZSh0aGlzLGUsbikpLGUuYy5sZW5ndGg+MSYmKGplKFJlKFEoTmEoKEFuKDAsZS5jLmxlbmd0aCksdShlLmNbMF0sMTApKSksKFRlKCksJHkpKSkpP0RjZShlLHRoaXMuZCx0aGlzKTood24oKSxacyhlLHRoaXMuZCkpLGplKFJlKFEoTmEoKEFuKDAsZS5jLmxlbmd0aCksdShlLmNbMF0sMTApKSksJHkpKSl8fFFuZSh0aGlzLmUsZSkpfSxGKHF1LCJNb2RlbE9yZGVyQmFyeWNlbnRlckhldXJpc3RpYyIsNjYwKSxEKDE4MDMsMSxPaSxEJHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gVWduKHRoaXMuYSx1KGUsMTApLHUobiwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYocXUsIk1vZGVsT3JkZXJCYXJ5Y2VudGVySGV1cmlzdGljL2xhbWJkYSQwJFR5cGUiLDE4MDMpLEQoMTQwMywxLHpjLGx0dCksbC5ZZj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdShlLDM3KSxuPXBqKERtZSksYmkobiwoV2EoKSxjdSksKHJvKCksSVYpKSxufSxsLnBmPWZ1bmN0aW9uKGUsbil7RHJuKCh1KGUsMzcpLG4pKX07dmFyIERtZTtGKHF1LCJOb0Nyb3NzaW5nTWluaW1pemVyIiwxNDAzKSxEKDc5Niw0MDIscWt0LGhidCksbC4kZj1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEgsRztzd2l0Y2goaj10aGlzLmcsci5nKXtjYXNlIDE6e2ZvcihvPTAsaD0wLE09bmV3IFMoZS5qKTtNLmE8TS5jLmMubGVuZ3RoOylrPXUoSihNKSwxMSksay5lLmMubGVuZ3RoIT0wJiYoKytvLGsuaj09KHZlKCksUG4pJiYrK2gpO2ZvcihzPTEvKG8rMSksZD1uK2gqcyxHPW4rMS1zLEM9b3YoZSwoc28oKSx0bCkpLktjKCk7Qy5PYigpOylrPXUoQy5QYigpLDExKSxrLmo9PSh2ZSgpLFBuKT8oaltrLnBdPWQsZC09cyk6KGpbay5wXT1HLEctPXMpO2JyZWFrfWNhc2UgMjp7Zm9yKHY9MCxNPW5ldyBTKGUuaik7TS5hPE0uYy5jLmxlbmd0aDspaz11KEooTSksMTEpLGsuZy5jLmxlbmd0aD09MHx8Kyt2O2ZvcihzPTEvKHYrMSksSD1uK3MsQz1vdihlLChzbygpLG51KSkuS2MoKTtDLk9iKCk7KWs9dShDLlBiKCksMTEpLGpbay5wXT1ILEgrPXM7YnJlYWt9ZGVmYXVsdDp0aHJvdyBpdChuZXcgRm4oIlBvcnQgdHlwZSBpcyB1bmRlZmluZWQiKSl9cmV0dXJuIDF9LEYocXUsIk5vZGVSZWxhdGl2ZVBvcnREaXN0cmlidXRvciIsNzk2KSxEKDgwNywxLHt9LFlLdCxxYWUpLEYocXUsIlN3ZWVwQ29weSIsODA3KSxEKDE3OTgsMSxZSSxPaWUpLGwuT2Y9ZnVuY3Rpb24oZSxuKXt9LGwuTWY9ZnVuY3Rpb24oKXt2YXIgZTtlPU50KENyLFhyLDI1LHRoaXMuZiwxNSwxKSx0aGlzLmQ9bmV3IGokdChlKSx0aGlzLmE9bmV3IFlNKGUpfSxsLk5mPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXt2YXIgZDtkPXUoTmUoaFtlXVtuXS5qLHIpLDExKSxvLmM9PWQmJm8uYy5pLmM9PW8uZC5pLmMmJisrdGhpcy5lW2VdfSxsLlBmPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzPXJbZV1bbl0sdGhpcy5jW2VdPXRoaXMuY1tlXXxzLms9PShWbigpLEhjKX0sbC5RZj1mdW5jdGlvbihlLG4scixzKXt2YXIgbztvPXUoTmUoc1tlXVtuXS5qLHIpLDExKSxvLnA9dGhpcy5mKyssby5nLmMubGVuZ3RoK28uZS5jLmxlbmd0aD4xJiYoby5qPT0odmUoKSxIbik/dGhpcy5iW2VdPSEwOm8uaj09Qm4mJmU+MCYmKHRoaXMuYltlLTFdPSEwKSl9LGwuZj0wLEYoYzAsIkFsbENyb3NzaW5nc0NvdW50ZXIiLDE3OTgpLEQoNTg3LDEse30sZ3opLGwuYj0wLGwuZD0wLEYoYzAsIkJpbmFyeUluZGV4ZWRUcmVlIiw1ODcpLEQoNTI0LDEse30sWU0pO3ZhciByX3QsQ0c7RihjMCwiQ3Jvc3NpbmdzQ291bnRlciIsNTI0KSxEKDE5MDYsMSxPaSxJJHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gUGVuKHRoaXMuYSx1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoYzAsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDAkVHlwZSIsMTkwNiksRCgxOTA3LDEsT2ksTyR0KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEZlbih0aGlzLmEsdShlLDExKSx1KG4sMTEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKGMwLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQxJFR5cGUiLDE5MDcpLEQoMTkwOCwxLE9pLFAkdCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBOZW4odGhpcy5hLHUoZSwxMSksdShuLDExKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihjMCwiQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkMiRUeXBlIiwxOTA4KSxEKDE5MDksMSxPaSxGJHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gQmVuKHRoaXMuYSx1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoYzAsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDMkVHlwZSIsMTkwOSksRCgxOTEwLDEsVW4sTiR0KSxsLnRkPWZ1bmN0aW9uKGUpe3Zvbih0aGlzLmEsdShlLDExKSl9LEYoYzAsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDQkVHlwZSIsMTkxMCksRCgxOTExLDEsbGksQiR0KSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBJWGUodGhpcy5hLHUoZSwxMSkpfSxGKGMwLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQ1JFR5cGUiLDE5MTEpLEQoMTkxMiwxLFVuLFIkdCksbC50ZD1mdW5jdGlvbihlKXtIR3QodGhpcyxlKX0sRihjMCwiQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkNiRUeXBlIiwxOTEyKSxEKDE5MTMsMSxVbixwR3QpLGwudGQ9ZnVuY3Rpb24oZSl7dmFyIG47azgoKSxVcCh0aGlzLmIsKG49dGhpcy5hLHUoZSwxMSksbikpfSxGKGMwLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQ3JFR5cGUiLDE5MTMpLEQoODI2LDEseGQsWU4pLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIGs4KCksVXModShlLDExKSwoYWUoKSxKdSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gazgoKSxVcyh1KGUsMTEpLChhZSgpLEp1KSl9LEYoYzAsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDgkVHlwZSIsODI2KSxEKDE5MDUsMSx7fSxqJHQpLEYoYzAsIkh5cGVyZWRnZUNyb3NzaW5nc0NvdW50ZXIiLDE5MDUpLEQoNDY3LDEsezM1OjEsNDY3OjF9LHNZdCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gcGZuKHRoaXMsdShlLDQ2NykpfSxsLmI9MCxsLmM9MCxsLmU9MCxsLmY9MDt2YXIgaDZuPUYoYzAsIkh5cGVyZWRnZUNyb3NzaW5nc0NvdW50ZXIvSHlwZXJlZGdlIiw0NjcpO0QoMzYyLDEsezM1OjEsMzYyOjF9LGYkKSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBkMm4odGhpcyx1KGUsMzYyKSl9LGwuYj0wLGwuYz0wO3ZhciBJbWU9RihjMCwiSHlwZXJlZGdlQ3Jvc3NpbmdzQ291bnRlci9IeXBlcmVkZ2VDb3JuZXIiLDM2Mik7RCg1MjMsMjIsezM6MSwzNToxLDIyOjEsNTIzOjF9LEhidCk7dmFyIE5TLEJTLE9tZT1qcihjMCwiSHlwZXJlZGdlQ3Jvc3NpbmdzQ291bnRlci9IeXBlcmVkZ2VDb3JuZXIvVHlwZSIsNTIzLEhyLHFybixzdG4pLFBtZTtEKDE0MDUsMSx6YyxzdHQpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoUSh1KGUsMzcpLChhZSgpLFZjKSksMjEpLkhjKChvbygpLHZoKSk/Rm1lOm51bGx9LGwucGY9ZnVuY3Rpb24oZSxuKXtQZG4odGhpcyx1KGUsMzcpLG4pfTt2YXIgRm1lO0YodW8sIkludGVyYWN0aXZlTm9kZVBsYWNlciIsMTQwNSksRCgxNDA2LDEsemMsaXR0KSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KFEodShlLDM3KSwoYWUoKSxWYykpLDIxKS5IYygob28oKSx2aCkpP05tZTpudWxsfSxsLnBmPWZ1bmN0aW9uKGUsbil7djFuKHRoaXMsdShlLDM3KSxuKX07dmFyIE5tZSxfRyxTRztGKHVvLCJMaW5lYXJTZWdtZW50c05vZGVQbGFjZXIiLDE0MDYpLEQoMjU3LDEsezM1OjEsMjU3OjF9LHpwdCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gVktlKHRoaXMsdShlLDI1NykpfSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBfdChlLDI1Nyk/KG49dShlLDI1NyksdGhpcy5iPT1uLmIpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJscyIrZWIodGhpcy5lKX0sbC5hPTAsbC5iPTAsbC5jPS0xLGwuZD0tMSxsLmc9MDt2YXIgQm1lPUYodW8sIkxpbmVhclNlZ21lbnRzTm9kZVBsYWNlci9MaW5lYXJTZWdtZW50IiwyNTcpO0QoMTQwOCwxLHpjLElLdCksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShRKHUoZSwzNyksKGFlKCksVmMpKSwyMSkuSGMoKG9vKCksdmgpKT9SbWU6bnVsbH0sbC5wZj1mdW5jdGlvbihlLG4pe2t4bih0aGlzLHUoZSwzNyksbil9LGwuYj0wLGwuZz0wO3ZhciBSbWU7Rih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIiLDE0MDgpLEQoMTQyNywxLE9pLHdRKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHB1KHUoZSwxOSkuYSx1KG4sMTkpLmEpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyLzBtZXRob2RyZWYkY29tcGFyZSRUeXBlIiwxNDI3KSxEKDE0MjksMSxPaSx2USksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBwdSh1KGUsMTkpLmEsdShuLDE5KS5hKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci8xbWV0aG9kcmVmJGNvbXBhcmUkVHlwZSIsMTQyOSksRCg2NDksMSx7NjQ5OjF9LGJHdCk7dmFyIGY2bj1GKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9FZGdlUmVwIiw2NDkpO0QoNDAxLDEsezQwMToxfSxPdnQpLGwuYj0hMTt2YXIgZDZuPUYodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL05vZGVSZXAiLDQwMSk7RCg1MDgsMTIsezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTI6MSwxNDoxLDE1OjEsNTQ6MSw1MDg6MX0sQ3F0KSxGKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9QYXRoIiw1MDgpLEQoMTQwOSwxLHt9LG1RKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTcpLmQuaS5rfSxGKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9QYXRoL2xhbWJkYSQwJFR5cGUiLDE0MDkpLEQoMTQxMCwxLGxpLHlRKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMjY3KT09KFZuKCksdGEpfSxGKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9QYXRoL2xhbWJkYSQxJFR5cGUiLDE0MTApLEQoMTQxMSwxLHt9LHhRKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTcpLmQuaX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvUGF0aC9sYW1iZGEkMiRUeXBlIiwxNDExKSxEKDE0MTIsMSxsaSwkJHQpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEhXdChBaWUodShlLDEwKSkpfSxGKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9QYXRoL2xhbWJkYSQzJFR5cGUiLDE0MTIpLEQoMTQxMywxLGxpLGtRKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBFZW4odShlLDExKSl9LEYodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQwJFR5cGUiLDE0MTMpLEQoMTQxNCwxLFVuLHdHdCksbC50ZD1mdW5jdGlvbihlKXt5UWUodGhpcy5hLHRoaXMuYix1KGUsMTEpKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDEkVHlwZSIsMTQxNCksRCgxNDIzLDEsVW4seiR0KSxsLnRkPWZ1bmN0aW9uKGUpeyRwbih0aGlzLmEsdShlLDE3KSl9LEYodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxMCRUeXBlIiwxNDIzKSxEKDE0MjQsMSx7fSxFUSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gRmwoKSxuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LEYodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxMSRUeXBlIiwxNDI0KSxEKDE0MjUsMSxVbixxJHQpLGwudGQ9ZnVuY3Rpb24oZSl7TnZuKHRoaXMuYSx1KGUsMTApKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDEyJFR5cGUiLDE0MjUpLEQoMTQyNiwxLHt9LFRRKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBGbCgpLHBlKHUoZSwxMjEpLmUpfSxGKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTMkVHlwZSIsMTQyNiksRCgxNDI4LDEse30sQ1EpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIEZsKCkscGUodShlLDEyMSkuZSl9LEYodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxNSRUeXBlIiwxNDI4KSxEKDE0MzAsMSxsaSxfUSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gRmwoKSx1KGUsNDAxKS5jLms9PShWbigpLE9zKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDE3JFR5cGUiLDE0MzApLEQoMTQzMSwxLGxpLFNRKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBGbCgpLHUoZSw0MDEpLmMuai5jLmxlbmd0aD4xfSxGKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTgkVHlwZSIsMTQzMSksRCgxNDMyLDEsVW4salh0KSxsLnRkPWZ1bmN0aW9uKGUpe19obih0aGlzLmMsdGhpcy5iLHRoaXMuZCx0aGlzLmEsdShlLDQwMSkpfSxsLmM9MCxsLmQ9MCxGKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTkkVHlwZSIsMTQzMiksRCgxNDE1LDEse30sQVEpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIEZsKCksbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwyOSkuYSwxNikpfSxGKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMiRUeXBlIiwxNDE1KSxEKDE0MzMsMSxVbixIJHQpLGwudGQ9ZnVuY3Rpb24oZSl7dlFlKHRoaXMuYSx1KGUsMTEpKX0sbC5hPTAsRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDIwJFR5cGUiLDE0MzMpLEQoMTQzNCwxLHt9LG54KSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBGbCgpLG5ldyBUbihudWxsLG5ldyBfbih1KGUsMjkpLmEsMTYpKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDIxJFR5cGUiLDE0MzQpLEQoMTQzNSwxLFVuLFYkdCksbC50ZD1mdW5jdGlvbihlKXtPUWUodGhpcy5hLHUoZSwxMCkpfSxGKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMjIkVHlwZSIsMTQzNSksRCgxNDM2LDEsbGksS04pLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEhXdChlKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDIzJFR5cGUiLDE0MzYpLEQoMTQzNywxLHt9LExRKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBGbCgpLG5ldyBUbihudWxsLG5ldyBfbih1KGUsMjkpLmEsMTYpKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDI0JFR5cGUiLDE0MzcpLEQoMTQzOCwxLGxpLEckdCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4galhlKHRoaXMuYSx1KGUsMTApKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDI1JFR5cGUiLDE0MzgpLEQoMTQzOSwxLFVuLHZHdCksbC50ZD1mdW5jdGlvbihlKXtjcG4odGhpcy5hLHRoaXMuYix1KGUsMTApKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDI2JFR5cGUiLDE0MzkpLEQoMTQ0MCwxLGxpLE1RKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBGbCgpLCFHYSh1KGUsMTcpKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDI3JFR5cGUiLDE0NDApLEQoMTQ0MSwxLGxpLERRKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBGbCgpLCFHYSh1KGUsMTcpKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDI4JFR5cGUiLDE0NDEpLEQoMTQ0MiwxLHt9LFUkdCksbC5DZT1mdW5jdGlvbihlLG4pe3JldHVybiBNUWUodGhpcy5hLHUoZSwyOSksdShuLDI5KSl9LEYodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyOSRUeXBlIiwxNDQyKSxEKDE0MTYsMSx7fSxYTiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gRmwoKSxuZXcgVG4obnVsbCxuZXcgancobmV3IGFyKGxyKERzKHUoZSwxMCkpLmEuS2MoKSxuZXcgeikpKSl9LEYodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQzJFR5cGUiLDE0MTYpLEQoMTQxNywxLGxpLElRKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBGbCgpLHdzbih1KGUsMTcpKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDQkVHlwZSIsMTQxNyksRCgxNDE4LDEsVW4sVyR0KSxsLnRkPWZ1bmN0aW9uKGUpe0Z5bih0aGlzLmEsdShlLDE3KSl9LEYodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ1JFR5cGUiLDE0MTgpLEQoMTQxOSwxLHt9LFdUKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBGbCgpLG5ldyBUbihudWxsLG5ldyBfbih1KGUsMjkpLmEsMTYpKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDYkVHlwZSIsMTQxOSksRCgxNDIwLDEsbGksT1EpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEZsKCksdShlLDEwKS5rPT0oVm4oKSxPcyl9LEYodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ3JFR5cGUiLDE0MjApLEQoMTQyMSwxLHt9LFBRKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBGbCgpLG5ldyBUbihudWxsLG5ldyBqdyhuZXcgYXIobHIoVTAodShlLDEwKSkuYS5LYygpLG5ldyB6KSkpKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDgkVHlwZSIsMTQyMSksRCgxNDIyLDEsbGksRlEpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEZsKCksd2VuKHUoZSwxNykpfSxGKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkOSRUeXBlIiwxNDIyKSxEKDE0MDQsMSx6Yyx2QyksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShRKHUoZSwzNyksKGFlKCksVmMpKSwyMSkuSGMoKG9vKCksdmgpKT9qbWU6bnVsbH0sbC5wZj1mdW5jdGlvbihlLG4pe2Izbih1KGUsMzcpLG4pfTt2YXIgam1lO0YodW8sIlNpbXBsZU5vZGVQbGFjZXIiLDE0MDQpLEQoMTgwLDEsezE4MDoxfSxFNCksbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPSIiLHRoaXMuYz09KGJkKCksenYpP2UrPXg2OnRoaXMuYz09ZXAmJihlKz15NiksdGhpcy5vPT0oQzEoKSxIMik/ZSs9RG90OnRoaXMubz09SDE/ZSs9IlVQIjplKz0iQkFMQU5DRUQiLGV9LEYodWIsIkJLQWxpZ25lZExheW91dCIsMTgwKSxEKDUxNiwyMix7MzoxLDM1OjEsMjI6MSw1MTY6MX0sR2J0KTt2YXIgZXAsenYsJG1lPWpyKHViLCJCS0FsaWduZWRMYXlvdXQvSERpcmVjdGlvbiIsNTE2LEhyLFZybixhdG4pLHptZTtEKDUxNSwyMix7MzoxLDM1OjEsMjI6MSw1MTU6MX0sVmJ0KTt2YXIgSDIsSDEscW1lPWpyKHViLCJCS0FsaWduZWRMYXlvdXQvVkRpcmVjdGlvbiIsNTE1LEhyLEdybixvdG4pLEhtZTtEKDE2MzQsMSx7fSxtR3QpLEYodWIsIkJLQWxpZ25lciIsMTYzNCksRCgxNjM3LDEse30sWnNlKSxGKHViLCJCS0NvbXBhY3RvciIsMTYzNyksRCg2NTQsMSx7NjU0OjF9LE5RKSxsLmE9MCxGKHViLCJCS0NvbXBhY3Rvci9DbGFzc0VkZ2UiLDY1NCksRCg0NTgsMSx7NDU4OjF9LEVxdCksbC5hPW51bGwsbC5iPTAsRih1YiwiQktDb21wYWN0b3IvQ2xhc3NOb2RlIiw0NTgpLEQoMTQwNywxLHpjLEdHdCksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShRKHUoZSwzNyksKGFlKCksVmMpKSwyMSkuSGMoKG9vKCksdmgpKT9WbWU6bnVsbH0sbC5wZj1mdW5jdGlvbihlLG4pe0J4bih0aGlzLHUoZSwzNyksbil9LGwuZD0hMTt2YXIgVm1lO0YodWIsIkJLTm9kZVBsYWNlciIsMTQwNyksRCgxNjM1LDEse30sQlEpLGwuZD0wLEYodWIsIk5laWdoYm9yaG9vZEluZm9ybWF0aW9uIiwxNjM1KSxEKDE2MzYsMSxPaSxZJHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gVm9uKHRoaXMsdShlLDQ2KSx1KG4sNDYpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKHViLCJOZWlnaGJvcmhvb2RJbmZvcm1hdGlvbi9OZWlnaGJvckNvbXBhcmF0b3IiLDE2MzYpLEQoODA4LDEse30pLEYodWIsIlRocmVzaG9sZFN0cmF0ZWd5Iiw4MDgpLEQoMTc2Myw4MDgse30sQXF0KSxsLmJnPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdGhpcy5hLm89PShDMSgpLEgxKT9hczpDc30sbC5jZz1mdW5jdGlvbigpe30sRih1YiwiVGhyZXNob2xkU3RyYXRlZ3kvTnVsbFRocmVzaG9sZFN0cmF0ZWd5IiwxNzYzKSxEKDU3OSwxLHs1Nzk6MX0seUd0KSxsLmM9ITEsbC5kPSExLEYodWIsIlRocmVzaG9sZFN0cmF0ZWd5L1Bvc3Rwcm9jZXNzYWJsZSIsNTc5KSxEKDE3NjQsODA4LHt9LExxdCksbC5iZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3JldHVybiBvPW49PXIscz10aGlzLmEuYVtyLnBdPT1uLG98fHM/KGg9ZSx0aGlzLmEuYz09KGJkKCksenYpPyhvJiYoaD1EYXQodGhpcyxuLCEwKSksIWlzTmFOKGgpJiYhaXNGaW5pdGUoaCkmJnMmJihoPURhdCh0aGlzLHIsITEpKSk6KG8mJihoPURhdCh0aGlzLG4sITApKSwhaXNOYU4oaCkmJiFpc0Zpbml0ZShoKSYmcyYmKGg9RGF0KHRoaXMsciwhMSkpKSxoKTplfSxsLmNnPWZ1bmN0aW9uKCl7Zm9yKHZhciBlLG4scixzLG87dGhpcy5kLmIhPTA7KW89dShvaW4odGhpcy5kKSw1NzkpLHM9bWxlKHRoaXMsbykscy5hJiYoZT1zLmEscj1qZSh0aGlzLmEuZlt0aGlzLmEuZ1tvLmIucF0ucF0pLCEoIXImJiFHYShlKSYmZS5jLmkuYz09ZS5kLmkuYykmJihuPV9jZSh0aGlzLG8pLG58fFdYZSh0aGlzLmUsbykpKTtmb3IoO3RoaXMuZS5hLmMubGVuZ3RoIT0wOylfY2UodGhpcyx1KE5yZSh0aGlzLmUpLDU3OSkpfSxGKHViLCJUaHJlc2hvbGRTdHJhdGVneS9TaW1wbGVUaHJlc2hvbGRTdHJhdGVneSIsMTc2NCksRCg2MzUsMSx7NjM1OjEsMjQ2OjEsMjM0OjF9LFJRKSxsLktmPWZ1bmN0aW9uKCl7cmV0dXJuIFVuZSh0aGlzKX0sbC5YZj1mdW5jdGlvbigpe3JldHVybiBVbmUodGhpcyl9O3ZhciBEaHQ7RihTY3QsIkVkZ2VSb3V0ZXJGYWN0b3J5Iiw2MzUpLEQoMTQ1OCwxLHpjLG9kKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiBwdm4odShlLDM3KSl9LGwucGY9ZnVuY3Rpb24oZSxuKXtFM24odShlLDM3KSxuKX07dmFyIEdtZSxVbWUsV21lLFltZSxLbWUsaV90LFhtZSxRbWU7RihTY3QsIk9ydGhvZ29uYWxFZGdlUm91dGVyIiwxNDU4KSxEKDE0NTEsMSx6YyxVR3QpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIGpkbih1KGUsMzcpKX0sbC5wZj1mdW5jdGlvbihlLG4pe0g1bih0aGlzLHUoZSwzNyksbil9O3ZhciBabWUsSm1lLHR5ZSxleWUsak8sbnllO0YoU2N0LCJQb2x5bGluZUVkZ2VSb3V0ZXIiLDE0NTEpLEQoMTQ1MiwxLHhkLGpRKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiB5eXQodShlLDEwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB5eXQodShlLDEwKSl9LEYoU2N0LCJQb2x5bGluZUVkZ2VSb3V0ZXIvMSIsMTQ1MiksRCgxODA5LDEsbGksJFEpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMjkpLmM9PShVZigpLG1iKX0sRih0MSwiSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkMCRUeXBlIiwxODA5KSxEKDE4MTAsMSx7fSx6USksbC5HZT1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEyOSkuZH0sRih0MSwiSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkMSRUeXBlIiwxODEwKSxEKDE4MTEsMSxsaSxxUSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEyOSkuYz09KFVmKCksbWIpfSxGKHQxLCJIeXBlckVkZ2VDeWNsZURldGVjdG9yL2xhbWJkYSQyJFR5cGUiLDE4MTEpLEQoMTgxMiwxLHt9LHJ4KSxsLkdlPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTI5KS5kfSxGKHQxLCJIeXBlckVkZ2VDeWNsZURldGVjdG9yL2xhbWJkYSQzJFR5cGUiLDE4MTIpLEQoMTgxMywxLHt9LEhRKSxsLkdlPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTI5KS5kfSxGKHQxLCJIeXBlckVkZ2VDeWNsZURldGVjdG9yL2xhbWJkYSQ0JFR5cGUiLDE4MTMpLEQoMTgxNCwxLHt9LFZRKSxsLkdlPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTI5KS5kfSxGKHQxLCJIeXBlckVkZ2VDeWNsZURldGVjdG9yL2xhbWJkYSQ1JFR5cGUiLDE4MTQpLEQoMTEyLDEsezM1OjEsMTEyOjF9LFBEKSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBHS2UodGhpcyx1KGUsMTEyKSl9LGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIF90KGUsMTEyKT8obj11KGUsMTEyKSx0aGlzLmc9PW4uZyk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHM7Zm9yKGU9bmV3IE9sKCJ7Iikscz1uZXcgUyh0aGlzLm4pO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDExKSxuPXJJKHIuaSksbj09bnVsbCYmKG49Im4iK3lZdChyLmkpKSxlLmErPSIiK24scy5hPHMuYy5jLmxlbmd0aCYmKGUuYSs9IiwiKTtyZXR1cm4gZS5hKz0ifSIsZS5hfSxsLmE9MCxsLmI9MCxsLmM9TmFOLGwuZD0wLGwuZz0wLGwuaT0wLGwubz0wLGwucz1OYU4sRih0MSwiSHlwZXJFZGdlU2VnbWVudCIsMTEyKSxEKDEyOSwxLHsxMjk6MX0saTIpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hKyItPiIrdGhpcy5iKyIgKCIrblplKHRoaXMuYykrIikifSxsLmQ9MCxGKHQxLCJIeXBlckVkZ2VTZWdtZW50RGVwZW5kZW5jeSIsMTI5KSxEKDUyMCwyMix7MzoxLDM1OjEsMjI6MSw1MjA6MX0sVWJ0KTt2YXIgbWIsS3kscnllPWpyKHQxLCJIeXBlckVkZ2VTZWdtZW50RGVwZW5kZW5jeS9EZXBlbmRlbmN5VHlwZSIsNTIwLEhyLEhybixjdG4pLGl5ZTtEKDE4MTUsMSx7fSxLJHQpLEYodDEsIkh5cGVyRWRnZVNlZ21lbnRTcGxpdHRlciIsMTgxNSksRCgxODE2LDEse30sX0h0KSxsLmE9MCxsLmI9MCxGKHQxLCJIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXIvQXJlYVJhdGluZyIsMTgxNiksRCgzMjksMSx7MzI5OjF9LERudCksbC5hPTAsbC5iPTAsbC5jPTAsRih0MSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL0ZyZWVBcmVhIiwzMjkpLEQoMTgxNywxLE9pLFFRKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFpaZSh1KGUsMTEyKSx1KG4sMTEyKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRih0MSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQwJFR5cGUiLDE4MTcpLEQoMTgxOCwxLFVuLCRYdCksbC50ZD1mdW5jdGlvbihlKXtyYW4odGhpcy5hLHRoaXMuZCx0aGlzLmMsdGhpcy5iLHUoZSwxMTIpKX0sbC5iPTAsRih0MSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQxJFR5cGUiLDE4MTgpLEQoMTgxOSwxLHt9LFpRKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDExMikuZSwxNikpfSxGKHQxLCJIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXIvbGFtYmRhJDIkVHlwZSIsMTgxOSksRCgxODIwLDEse30sSlEpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih1KGUsMTEyKS5qLDE2KSl9LEYodDEsIkh5cGVyRWRnZVNlZ21lbnRTcGxpdHRlci9sYW1iZGEkMyRUeXBlIiwxODIwKSxEKDE4MjEsMSx7fSx0WiksbC5GZT1mdW5jdGlvbihlKXtyZXR1cm4gWHQoeWUoZSkpfSxGKHQxLCJIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXIvbGFtYmRhJDQkVHlwZSIsMTgyMSksRCg2NTUsMSx7fSxlcnQpLGwuYT0wLGwuYj0wLGwuYz0wLEYodDEsIk9ydGhvZ29uYWxSb3V0aW5nR2VuZXJhdG9yIiw2NTUpLEQoMTYzOCwxLHt9LGVaKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDExMikuZSwxNikpfSxGKHQxLCJPcnRob2dvbmFsUm91dGluZ0dlbmVyYXRvci9sYW1iZGEkMCRUeXBlIiwxNjM4KSxEKDE2MzksMSx7fSxuWiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwxMTIpLmosMTYpKX0sRih0MSwiT3J0aG9nb25hbFJvdXRpbmdHZW5lcmF0b3IvbGFtYmRhJDEkVHlwZSIsMTYzOSksRCg2NjEsMSx7fSksRihBY3QsIkJhc2VSb3V0aW5nRGlyZWN0aW9uU3RyYXRlZ3kiLDY2MSksRCgxODA3LDY2MSx7fSxNcXQpLGwuZGc9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE0saixILEcsSyx0dDtpZighKGUuciYmIWUucSkpZm9yKE09bitlLm8qcixDPW5ldyBTKGUubik7Qy5hPEMuYy5jLmxlbmd0aDspZm9yKGs9dShKKEMpLDExKSxqPVlvKGx0KGN0KFdzLDEpLGVlLDgsMCxbay5pLm4say5uLGsuYV0pKS5hLHY9bmV3IFMoay5nKTt2LmE8di5jLmMubGVuZ3RoOylkPXUoSih2KSwxNyksR2EoZCl8fChLPWQuZCx0dD1ZbyhsdChjdChXcywxKSxlZSw4LDAsW0suaS5uLEsubixLLmFdKSkuYSxiLk1hdGguYWJzKGotdHQpPkVkJiYoaD1NLG89ZSxzPW5ldyAkZShqLGgpLHJpKGQuYSxzKSxwdih0aGlzLGQsbyxzLCExKSxIPWUucixIJiYoRz1YdCh5ZShaZihILmUsMCkpKSxzPW5ldyAkZShHLGgpLHJpKGQuYSxzKSxwdih0aGlzLGQsbyxzLCExKSxoPW4rSC5vKnIsbz1ILHM9bmV3ICRlKEcsaCkscmkoZC5hLHMpLHB2KHRoaXMsZCxvLHMsITEpKSxzPW5ldyAkZSh0dCxoKSxyaShkLmEscykscHYodGhpcyxkLG8scywhMSkpKX0sbC5lZz1mdW5jdGlvbihlKXtyZXR1cm4gZS5pLm4uYStlLm4uYStlLmEuYX0sbC5mZz1mdW5jdGlvbigpe3JldHVybiB2ZSgpLG1yfSxsLmdnPWZ1bmN0aW9uKCl7cmV0dXJuIHZlKCksUG59LEYoQWN0LCJOb3J0aFRvU291dGhSb3V0aW5nU3RyYXRlZ3kiLDE4MDcpLEQoMTgwOCw2NjEse30sRHF0KSxsLmRnPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQ7aWYoIShlLnImJiFlLnEpKWZvcihNPW4tZS5vKnIsQz1uZXcgUyhlLm4pO0MuYTxDLmMuYy5sZW5ndGg7KWZvcihrPXUoSihDKSwxMSksaj1ZbyhsdChjdChXcywxKSxlZSw4LDAsW2suaS5uLGsubixrLmFdKSkuYSx2PW5ldyBTKGsuZyk7di5hPHYuYy5jLmxlbmd0aDspZD11KEoodiksMTcpLEdhKGQpfHwoSz1kLmQsdHQ9WW8obHQoY3QoV3MsMSksZWUsOCwwLFtLLmkubixLLm4sSy5hXSkpLmEsYi5NYXRoLmFicyhqLXR0KT5FZCYmKGg9TSxvPWUscz1uZXcgJGUoaixoKSxyaShkLmEscykscHYodGhpcyxkLG8scywhMSksSD1lLnIsSCYmKEc9WHQoeWUoWmYoSC5lLDApKSkscz1uZXcgJGUoRyxoKSxyaShkLmEscykscHYodGhpcyxkLG8scywhMSksaD1uLUgubypyLG89SCxzPW5ldyAkZShHLGgpLHJpKGQuYSxzKSxwdih0aGlzLGQsbyxzLCExKSkscz1uZXcgJGUodHQsaCkscmkoZC5hLHMpLHB2KHRoaXMsZCxvLHMsITEpKSl9LGwuZWc9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaS5uLmErZS5uLmErZS5hLmF9LGwuZmc9ZnVuY3Rpb24oKXtyZXR1cm4gdmUoKSxQbn0sbC5nZz1mdW5jdGlvbigpe3JldHVybiB2ZSgpLG1yfSxGKEFjdCwiU291dGhUb05vcnRoUm91dGluZ1N0cmF0ZWd5IiwxODA4KSxEKDE4MDYsNjYxLHt9LElxdCksbC5kZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0O2lmKCEoZS5yJiYhZS5xKSlmb3IoTT1uK2UubypyLEM9bmV3IFMoZS5uKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3Ioaz11KEooQyksMTEpLGo9WW8obHQoY3QoV3MsMSksZWUsOCwwLFtrLmkubixrLm4say5hXSkpLmIsdj1uZXcgUyhrLmcpO3YuYTx2LmMuYy5sZW5ndGg7KWQ9dShKKHYpLDE3KSxHYShkKXx8KEs9ZC5kLHR0PVlvKGx0KGN0KFdzLDEpLGVlLDgsMCxbSy5pLm4sSy5uLEsuYV0pKS5iLGIuTWF0aC5hYnMoai10dCk+RWQmJihoPU0sbz1lLHM9bmV3ICRlKGgsaikscmkoZC5hLHMpLHB2KHRoaXMsZCxvLHMsITApLEg9ZS5yLEgmJihHPVh0KHllKFpmKEguZSwwKSkpLHM9bmV3ICRlKGgsRykscmkoZC5hLHMpLHB2KHRoaXMsZCxvLHMsITApLGg9bitILm8qcixvPUgscz1uZXcgJGUoaCxHKSxyaShkLmEscykscHYodGhpcyxkLG8scywhMCkpLHM9bmV3ICRlKGgsdHQpLHJpKGQuYSxzKSxwdih0aGlzLGQsbyxzLCEwKSkpfSxsLmVnPWZ1bmN0aW9uKGUpe3JldHVybiBlLmkubi5iK2Uubi5iK2UuYS5ifSxsLmZnPWZ1bmN0aW9uKCl7cmV0dXJuIHZlKCksSG59LGwuZ2c9ZnVuY3Rpb24oKXtyZXR1cm4gdmUoKSxCbn0sRihBY3QsIldlc3RUb0Vhc3RSb3V0aW5nU3RyYXRlZ3kiLDE4MDYpLEQoODEzLDEse30sZnh0KSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGViKHRoaXMuYSl9LGwuYj0wLGwuYz0hMSxsLmQ9ITEsbC5mPTAsRihTeSwiTnViU3BsaW5lIiw4MTMpLEQoNDA3LDEsezQwNzoxfSxldWUseVF0KSxGKFN5LCJOdWJTcGxpbmUvUG9sYXJDUCIsNDA3KSxEKDE0NTMsMSx6YyxWc2UpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIEEwbih1KGUsMzcpKX0sbC5wZj1mdW5jdGlvbihlLG4pe2N4bih0aGlzLHUoZSwzNyksbil9O3ZhciBzeWUsYXllLG95ZSxjeWUsdXllO0YoU3ksIlNwbGluZUVkZ2VSb3V0ZXIiLDE0NTMpLEQoMjY4LDEsezI2ODoxfSxSJCksbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmErIiAtPigiK3RoaXMuYysiKSAiK3RoaXMuYn0sbC5jPTAsRihTeSwiU3BsaW5lRWRnZVJvdXRlci9EZXBlbmRlbmN5IiwyNjgpLEQoNDU1LDIyLHszOjEsMzU6MSwyMjoxLDQ1NToxfSxXYnQpO3ZhciB5YixyNSxseWU9anIoU3ksIlNwbGluZUVkZ2VSb3V0ZXIvU2lkZVRvUHJvY2VzcyIsNDU1LEhyLFVybix1dG4pLGh5ZTtEKDE0NTQsMSxsaSxYUSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gbV8oKSwhdShlLDEyOCkub30sRihTeSwiU3BsaW5lRWRnZVJvdXRlci9sYW1iZGEkMCRUeXBlIiwxNDU0KSxEKDE0NTUsMSx7fSxLUSksbC5HZT1mdW5jdGlvbihlKXtyZXR1cm4gbV8oKSx1KGUsMTI4KS52KzF9LEYoU3ksIlNwbGluZUVkZ2VSb3V0ZXIvbGFtYmRhJDEkVHlwZSIsMTQ1NSksRCgxNDU2LDEsVW4seEd0KSxsLnRkPWZ1bmN0aW9uKGUpe21lbih0aGlzLmEsdGhpcy5iLHUoZSw0NikpfSxGKFN5LCJTcGxpbmVFZGdlUm91dGVyL2xhbWJkYSQyJFR5cGUiLDE0NTYpLEQoMTQ1NywxLFVuLGtHdCksbC50ZD1mdW5jdGlvbihlKXt5ZW4odGhpcy5hLHRoaXMuYix1KGUsNDYpKX0sRihTeSwiU3BsaW5lRWRnZVJvdXRlci9sYW1iZGEkMyRUeXBlIiwxNDU3KSxEKDEyOCwxLHszNToxLDEyODoxfSx2b2Usdnh0KSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBVS2UodGhpcyx1KGUsMTI4KSl9LGwuYj0wLGwuZT0hMSxsLmY9MCxsLmc9MCxsLmo9ITEsbC5rPSExLGwubj0wLGwubz0hMSxsLnA9ITEsbC5xPSExLGwucz0wLGwudT0wLGwudj0wLGwuRj0wLEYoU3ksIlNwbGluZVNlZ21lbnQiLDEyOCksRCg0NTksMSx7NDU5OjF9LFlUKSxsLmE9MCxsLmI9ITEsbC5jPSExLGwuZD0hMSxsLmU9ITEsbC5mPTAsRihTeSwiU3BsaW5lU2VnbWVudC9FZGdlSW5mb3JtYXRpb24iLDQ1OSksRCgxMjM0LDEse30sR1EpLEYoR18sZDZ0LDEyMzQpLEQoMTIzNSwxLE9pLFVRKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ibih1KGUsMTM1KSx1KG4sMTM1KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihHXyxuMWUsMTIzNSksRCgxMjMzLDEse30scUh0KSxGKEdfLCJNclRyZWUiLDEyMzMpLEQoMzkzLDIyLHszOjEsMzU6MSwyMjoxLDM5MzoxLDI0NjoxLDIzNDoxfSxyaiksbC5LZj1mdW5jdGlvbigpe3JldHVybiBIb2UodGhpcyl9LGwuWGY9ZnVuY3Rpb24oKXtyZXR1cm4gSG9lKHRoaXMpfTt2YXIgQUcsUlMsJE8salMsc190PWpyKEdfLCJUcmVlTGF5b3V0UGhhc2VzIiwzOTMsSHIsUnNuLGx0biksZnllO0QoMTEzMCwyMDksUzIsY1l0KSxsLlplPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx2LGs7Zm9yKGplKFJlKHFlKGUsKGd2KCksaF90KSkpKXx8eSQoKHI9bmV3IHJyKChQbSgpLG5ldyBNbShlKSkpLHIpKSxkPSh2PW5ldyBqJCxNbyh2LGUpLEp0KHYsKGZjKCkscVMpLGUpLGs9bmV3IF9yLFdtbihlLHYsayksbHluKGUsdixrKSx2KSxoPXJ5bih0aGlzLmEsZCksbz1uZXcgUyhoKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxMzUpLEUwbih0aGlzLmIscyxSYyhuLDEvaC5jLmxlbmd0aCkpO2Q9TnhuKGgpLGM1bihkKX0sRihHXywiVHJlZUxheW91dFByb3ZpZGVyIiwxMTMwKSxEKDE4NDcsMSxyMCxXUSksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHduKCksaDgoKSxhN30sRihHXywiVHJlZVV0aWwvMSIsMTg0NyksRCgxODQ4LDEscjAsWVEpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB3bigpLGg4KCksYTd9LEYoR18sIlRyZWVVdGlsLzIiLDE4NDgpLEQoNTAyLDEzNCx7MzoxLDUwMjoxLDk0OjEsMTM0OjF9KSxsLmc9MCxGKFVfLCJUR3JhcGhFbGVtZW50Iiw1MDIpLEQoMTg4LDUwMix7MzoxLDE4ODoxLDUwMjoxLDk0OjEsMTM0OjF9LE52dCksbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmImJnRoaXMuYz9TJCh0aGlzLmIpKyItPiIrUyQodGhpcy5jKToiZV8iK0hpKHRoaXMpfSxGKFVfLCJURWRnZSIsMTg4KSxEKDEzNSwxMzQsezM6MSwxMzU6MSw5NDoxLDEzNDoxfSxqJCksbC5JYj1mdW5jdGlvbigpe3ZhciBlLG4scixzLG87Zm9yKG89bnVsbCxzPWVpKHRoaXMuYiwwKTtzLmIhPXMuZC5jOylyPXUodGkocyksODYpLG8rPShyLmM9PW51bGx8fHIuYy5sZW5ndGg9PTA/Im5fIityLmc6Im5fIityLmMpK2AKYDtmb3Iobj1laSh0aGlzLmEsMCk7bi5iIT1uLmQuYzspZT11KHRpKG4pLDE4OCksbys9KGUuYiYmZS5jP1MkKGUuYikrIi0+IitTJChlLmMpOiJlXyIrSGkoZSkpK2AKYDtyZXR1cm4gb307dmFyIGc2bj1GKFVfLCJUR3JhcGgiLDEzNSk7RCg2MzMsNTAyLHszOjEsNTAyOjEsNjMzOjEsOTQ6MSwxMzQ6MX0pLEYoVV8sIlRTaGFwZSIsNjMzKSxEKDg2LDYzMyx7MzoxLDUwMjoxLDg2OjEsNjMzOjEsOTQ6MSwxMzQ6MX0sRGl0KSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFMkKHRoaXMpfTt2YXIgcDZuPUYoVV8sIlROb2RlIiw4Nik7RCgyNTUsMSxyMCxMcCksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9ZWkodGhpcy5hLmQsMCksbmV3IEV4KGUpfSxGKFVfLCJUTm9kZS8yIiwyNTUpLEQoMzU4LDEsc2EsRXgpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB1KHRpKHRoaXMuYSksMTg4KS5jfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIE9SKHRoaXMuYSl9LGwuUWI9ZnVuY3Rpb24oKXt0eih0aGlzLmEpfSxGKFVfLCJUTm9kZS8yLzEiLDM1OCksRCgxODQwLDEsb3Msb1l0KSxsLnBmPWZ1bmN0aW9uKGUsbil7X3luKHRoaXMsdShlLDEzNSksbil9LEYoQTYsIkZhblByb2Nlc3NvciIsMTg0MCksRCgzMjcsMjIsezM6MSwzNToxLDIyOjEsMzI3OjEsMjM0OjF9LHI5KSxsLktmPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZyl7Y2FzZSAwOnJldHVybiBuZXcgV3F0O2Nhc2UgMTpyZXR1cm4gbmV3IG9ZdDtjYXNlIDI6cmV0dXJuIG5ldyBpeDtjYXNlIDM6cmV0dXJuIG5ldyByWjtjYXNlIDQ6cmV0dXJuIG5ldyBzWjtjYXNlIDU6cmV0dXJuIG5ldyBSTDtkZWZhdWx0OnRocm93IGl0KG5ldyBGbihZb3QrKHRoaXMuZiE9bnVsbD90aGlzLmY6IiIrdGhpcy5nKSkpfX07dmFyIElodCxPaHQsUGh0LEZodCxOaHQsTEcsZHllPWpyKEE2LFQ2dCwzMjcsSHIsdG9uLGh0biksZ3llO0QoMTg0MywxLG9zLHJaKSxsLnBmPWZ1bmN0aW9uKGUsbil7YzJuKHRoaXMsdShlLDEzNSksbil9LGwuYT0wLEYoQTYsIkxldmVsSGVpZ2h0UHJvY2Vzc29yIiwxODQzKSxEKDE4NDQsMSxyMCxpWiksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHduKCksaDgoKSxhN30sRihBNiwiTGV2ZWxIZWlnaHRQcm9jZXNzb3IvMSIsMTg0NCksRCgxODQxLDEsb3MsaXgpLGwucGY9ZnVuY3Rpb24oZSxuKXtwcG4odGhpcyx1KGUsMTM1KSxuKX0sbC5hPTAsRihBNiwiTmVpZ2hib3JzUHJvY2Vzc29yIiwxODQxKSxEKDE4NDIsMSxyMCxRTiksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHduKCksaDgoKSxhN30sRihBNiwiTmVpZ2hib3JzUHJvY2Vzc29yLzEiLDE4NDIpLEQoMTg0NSwxLG9zLHNaKSxsLnBmPWZ1bmN0aW9uKGUsbil7bzJuKHRoaXMsdShlLDEzNSksbil9LGwuYT0wLEYoQTYsIk5vZGVQb3NpdGlvblByb2Nlc3NvciIsMTg0NSksRCgxODM5LDEsb3MsV3F0KSxsLnBmPWZ1bmN0aW9uKGUsbil7TzNuKHRoaXMsdShlLDEzNSkpfSxGKEE2LCJSb290UHJvY2Vzc29yIiwxODM5KSxEKDE4NDYsMSxvcyxSTCksbC5wZj1mdW5jdGlvbihlLG4pe3Fsbih1KGUsMTM1KSl9LEYoQTYsIlVudHJlZWlmeWVyIiwxODQ2KTt2YXIgek8sJFMscHllLEJodCxNRyx6UyxSaHQsREcsSUcsTTcscVMsT0csbnAsYV90LGJ5ZSxqaHQsWHksJGh0LG9fdDtEKDg1MSwxLE9oLEQzKSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxIa3QpLCIiKSwiV2VpZ2h0aW5nIG9mIE5vZGVzIiksIldoaWNoIHdlaWdodGluZyB0byB1c2Ugd2hlbiBjb21wdXRpbmcgYSBub2RlIG9yZGVyLiIpLHVfdCksKFVnKCksdXMpKSxiX3QpLHVuKChRZigpLHFuKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFZrdCksIiIpLCJTZWFyY2ggT3JkZXIiKSwiV2hpY2ggc2VhcmNoIG9yZGVyIHRvIHVzZSB3aGVuIGNvbXB1dGluZyBhIHNwYW5uaW5nIHRyZWUuIiksY190KSx1cyksdl90KSx1bihxbikpKSkscGhlKChuZXcgSkwsZSkpfTt2YXIgd3llLGNfdCx2eWUsdV90O0YoRUgsIk1yVHJlZU1ldGFEYXRhUHJvdmlkZXIiLDg1MSksRCg5OTQsMSxPaCxKTCksbC5RZT1mdW5jdGlvbihlKXtwaGUoZSl9O3ZhciBteWUsbF90LHl5ZSx4eWUsa3llLEV5ZSxoX3QsVHllLGZfdCxDeWUsUEcsZF90LF95ZSxnX3QsU3llO0YoRUgsIk1yVHJlZU9wdGlvbnMiLDk5NCksRCg5OTUsMSx7fSxhWiksbC4kZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBjWXQsZX0sbC5fZT1mdW5jdGlvbihlKXt9LEYoRUgsIk1yVHJlZU9wdGlvbnMvTXJ0cmVlRmFjdG9yeSIsOTk1KSxEKDQ4MCwyMix7MzoxLDM1OjEsMjI6MSw0ODA6MX0sWWJ0KTt2YXIgemh0LHBfdCxiX3Q9anIoRUgsIk9yZGVyV2VpZ2h0aW5nIiw0ODAsSHIsWXJuLGZ0biksQXllO0QoNDI1LDIyLHszOjEsMzU6MSwyMjoxLDQyNToxfSxLYnQpO3ZhciB3X3QscWh0LHZfdD1qcihFSCwiVHJlZWlmeWluZ09yZGVyIiw0MjUsSHIsV3JuLGd0biksTHllO0QoMTQ1OSwxLHpjLFpMKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTM1KSxNeWV9LGwucGY9ZnVuY3Rpb24oZSxuKXt6Y24odGhpcyx1KGUsMTM1KSxuKX07dmFyIE15ZTtGKCJvcmcuZWNsaXBzZS5lbGsuYWxnLm1ydHJlZS5wMXRyZWVpZnkiLCJERlNUcmVlaWZ5ZXIiLDE0NTkpLEQoMTQ2MCwxLHpjLGN0dCksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEzNSksRHllfSxsLnBmPWZ1bmN0aW9uKGUsbil7Q3BuKHRoaXMsdShlLDEzNSksbil9O3ZhciBEeWU7Rigib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUucDJvcmRlciIsIk5vZGVPcmRlcmVyIiwxNDYwKSxEKDE0NjEsMSx6YyxvdHQpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMzUpLEl5ZX0sbC5wZj1mdW5jdGlvbihlLG4pe3F2bih0aGlzLHUoZSwxMzUpLG4pfSxsLmE9MDt2YXIgSXllO0YoIm9yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLnAzcGxhY2UiLCJOb2RlUGxhY2VyIiwxNDYxKSxEKDE0NjIsMSx6YyxHQiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEzNSksT3llfSxsLnBmPWZ1bmN0aW9uKGUsbil7Z2RuKHUoZSwxMzUpLG4pfTt2YXIgT3llO0YoIm9yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLnA0cm91dGUiLCJFZGdlUm91dGVyIiwxNDYyKTt2YXIgSFM7RCg0OTUsMjIsezM6MSwzNToxLDIyOjEsNDk1OjEsMjQ2OjEsMjM0OjF9LFhidCksbC5LZj1mdW5jdGlvbigpe3JldHVybiB4aWUodGhpcyl9LGwuWGY9ZnVuY3Rpb24oKXtyZXR1cm4geGllKHRoaXMpfTt2YXIgRkcsRDcsbV90PWpyKEdrdCwiUmFkaWFsTGF5b3V0UGhhc2VzIiw0OTUsSHIsS3JuLGR0biksUHllO0QoMTEzMSwyMDksUzIsekh0KSxsLlplPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx2O2lmKHI9VG9lKHRoaXMsZSksdnIobiwiUmFkaWFsIGxheW91dCIsci5jLmxlbmd0aCksamUoUmUocWUoZSwodXkoKSxMX3QpKSkpfHx5JCgocz1uZXcgcnIoKFBtKCksbmV3IE1tKGUpKSkscykpLHY9RDBuKGUpLHdvKGUsKG05KCksSFMpLHYpLCF2KXRocm93IGl0KG5ldyBGbigiVGhlIGdpdmVuIGdyYXBoIGlzIG5vdCBhIHRyZWUhIikpO2ZvcihvPVh0KHllKHFlKGUsUkcpKSksbz09MCYmKG89Um9lKGUpKSx3byhlLFJHLG8pLGQ9bmV3IFMoVG9lKHRoaXMsZSkpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDUxKSxoLnBmKGUsUmMobiwxKSk7b3Iobil9LEYoR2t0LCJSYWRpYWxMYXlvdXRQcm92aWRlciIsMTEzMSksRCg1NDksMSxPaSxQUiksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBybW4odGhpcy5hLHRoaXMuYix1KGUsMzMpLHUobiwzMykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LGwuYT0wLGwuYj0wLEYoR2t0LCJSYWRpYWxVdGlsL2xhbWJkYSQwJFR5cGUiLDU0OSksRCgxMzc1LDEsb3MsY1opLGwucGY9ZnVuY3Rpb24oZSxuKXtrNG4odShlLDMzKSxuKX0sRihYMWUsIkNhbGN1bGF0ZUdyYXBoU2l6ZSIsMTM3NSksRCg0NDIsMjIsezM6MSwzNToxLDIyOjEsNDQyOjEsMjM0OjF9LFdldCksbC5LZj1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IFpOO2Nhc2UgMTpyZXR1cm4gbmV3IG9aO2Nhc2UgMjpyZXR1cm4gbmV3IGNaO2RlZmF1bHQ6dGhyb3cgaXQobmV3IEZuKFlvdCsodGhpcy5mIT1udWxsP3RoaXMuZjoiIit0aGlzLmcpKSl9fTt2YXIgSGh0LFZodCxHaHQsRnllPWpyKFgxZSxUNnQsNDQyLEhyLFZpbixwdG4pLE55ZTtEKDY0NSwxLHt9KSxsLmU9MSxsLmc9MCxGKERjdCwiQWJzdHJhY3RSYWRpdXNFeHRlbnNpb25Db21wYWN0aW9uIiw2NDUpLEQoMTc3Miw2NDUse30sald0KSxsLmhnPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztmb3IodGhpcy5jPXUocWUoZSwobTkoKSxIUykpLDMzKSxPdHQodGhpcyx0aGlzLmMpLHRoaXMuZD1wc3QodShxZShlLCh1eSgpLHFPKSksMjkzKSksaz11KHFlKGUsV2h0KSwxOSksayYmdncodGhpcyxrLmEpLHY9eWUocWUoZSwodWkoKSxXMikpKSxDQyh0aGlzLChPbih2KSx2KSksQz13eSh0aGlzLmMpLHRoaXMuZCYmdGhpcy5kLmxnKEMpLHZtbih0aGlzLEMpLGQ9bmV3IHlsKGx0KGN0KHJzLDEpLFExZSwzMywwLFt0aGlzLmNdKSkscj0wO3I8MjtyKyspZm9yKG49MDtuPEMuYy5sZW5ndGg7bisrKW89bmV3IHlsKGx0KGN0KHJzLDEpLFExZSwzMywwLFsoQW4obixDLmMubGVuZ3RoKSx1KEMuY1tuXSwzMykpXSkpLGg9bjxDLmMubGVuZ3RoLTE/KEFuKG4rMSxDLmMubGVuZ3RoKSx1KEMuY1tuKzFdLDMzKSk6KEFuKDAsQy5jLmxlbmd0aCksdShDLmNbMF0sMzMpKSxzPW49PTA/dShOZShDLEMuYy5sZW5ndGgtMSksMzMpOihBbihuLTEsQy5jLmxlbmd0aCksdShDLmNbbi0xXSwzMykpLERhZSh0aGlzLChBbihuLEMuYy5sZW5ndGgpLHUoQy5jW25dLDMzKSxkKSxzLGgsbyl9LEYoRGN0LCJBbm51bHVzV2VkZ2VDb21wYWN0aW9uIiwxNzcyKSxEKDEzNzQsMSxvcyxvWiksbC5wZj1mdW5jdGlvbihlLG4pe0Zkbih1KGUsMzMpLG4pfSxGKERjdCwiR2VuZXJhbENvbXBhY3RvciIsMTM3NCksRCgxNzcxLDY0NSx7fSx1WiksbC5oZz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbztyPXUocWUoZSwobTkoKSxIUykpLDMzKSx0aGlzLmY9cix0aGlzLmI9cHN0KHUocWUoZSwodXkoKSxxTykpLDI5MykpLG89dShxZShlLFdodCksMTkpLG8mJnZ3KHRoaXMsby5hKSxzPXllKHFlKGUsKHVpKCksVzIpKSksQ0ModGhpcywoT24ocykscykpLG49d3kociksdGhpcy5iJiZ0aGlzLmIubGcobiksY29lKHRoaXMsbil9LGwuYT0wLEYoRGN0LCJSYWRpYWxDb21wYWN0aW9uIiwxNzcxKSxEKDE3NzksMSx7fSxsWiksbC5pZz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQ7Zm9yKHRoaXMuYT1lLG49MCxkPXd5KGUpLHM9MCxoPW5ldyBTKGQpO2guYTxoLmMuYy5sZW5ndGg7KWZvcihvPXUoSihoKSwzMyksKytzLHI9cztyPGQuYy5sZW5ndGg7cisrKUl5bih0aGlzLG8sKEFuKHIsZC5jLmxlbmd0aCksdShkLmNbcl0sMzMpKSkmJihuKz0xKTtyZXR1cm4gbn0sRihXa3QsIkNyb3NzaW5nTWluaW1pemF0aW9uUG9zaXRpb24iLDE3NzkpLEQoMTc3NywxLHt9LGhaKSxsLmlnPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHO2ZvcihzPTAscj1uZXcgYXIobHIoSzAoZSkuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShNcihyKSw3OSksdj1Ebyh1KEF0KCghbi5jJiYobi5jPW5ldyBDbihicixuLDUsOCkpLG4uYyksMCksODIpKSxDPXYuaSt2LmcvMixNPXYuait2LmYvMixvPWUuaStlLmcvMixoPWUuaitlLmYvMixqPW5ldyBDYSxqLmE9Qy1vLGouYj1NLWgsZD1uZXcgJGUoai5hLGouYiksbUUoZCxlLmcsZS5mKSxqLmEtPWQuYSxqLmItPWQuYixvPUMtai5hLGg9TS1qLmIsaz1uZXcgJGUoai5hLGouYiksbUUoayx2Lmcsdi5mKSxqLmEtPWsuYSxqLmItPWsuYixDPW8rai5hLE09aCtqLmIsSD1DLW8sRz1NLWgscys9Yi5NYXRoLnNxcnQoSCpIK0cqRyk7cmV0dXJuIHN9LEYoV2t0LCJFZGdlTGVuZ3RoT3B0aW1pemF0aW9uIiwxNzc3KSxEKDE3NzgsMSx7fSxmWiksbC5pZz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqO2ZvcihzPTAscj1uZXcgYXIobHIoSzAoZSkuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShNcihyKSw3OSksdj1Ebyh1KEF0KCghbi5jJiYobi5jPW5ldyBDbihicixuLDUsOCkpLG4uYyksMCksODIpKSxrPXYuaSt2LmcvMixDPXYuait2LmYvMixvPXUocWUodiwodWkoKSxZNikpLDgpLGg9ZS5pK28uYStlLmcvMixkPWUuaitvLmIrZS5mLE09ay1oLGo9Qy1kLHMrPWIuTWF0aC5zcXJ0KE0qTStqKmopO3JldHVybiBzfSxGKFdrdCwiRWRnZUxlbmd0aFBvc2l0aW9uT3B0aW1pemF0aW9uIiwxNzc4KSxEKDEzNzMsNjQ1LG9zLFpOKSxsLnBmPWZ1bmN0aW9uKGUsbil7ajJuKHRoaXMsdShlLDMzKSxuKX0sRigib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwuaW50ZXJtZWRpYXRlLm92ZXJsYXBzIiwiUmFkaXVzRXh0ZW5zaW9uT3ZlcmxhcFJlbW92YWwiLDEzNzMpLEQoNDI2LDIyLHszOjEsMzU6MSwyMjoxLDQyNjoxfSxRYnQpO3ZhciB5X3QsVWh0LHhfdD1qcihXXywiQW5udWx1c1dlZGdlQ3JpdGVyaWEiLDQyNixIcixYcm4sYnRuKSxCeWU7RCgzODAsMjIsezM6MSwzNToxLDIyOjEsMzgwOjF9LFlldCk7dmFyIE5HLGtfdCxFX3QsVF90PWpyKFdfLGE2dCwzODAsSHIsR2luLHd0biksUnllO0QoODUyLDEsT2gsdXR0KSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxZa3QpLCIiKSwiT3JkZXIgSUQiKSwiVGhlIGlkIGNhbiBiZSB1c2VkIHRvIGRlZmluZSBhbiBvcmRlciBmb3Igbm9kZXMgb2Ygb25lIHJhZGl1cy4gVGhpcyBjYW4gYmUgdXNlZCB0byBzb3J0IHRoZW0gaW4gdGhlIGxheWVyIGFjY29yZGluZ2x5LiIpLHBlKDApKSwoVWcoKSxnYykpLGphKSx1bigoUWYoKSxlYSkpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxLa3QpLCIiKSwiUmFkaXVzIiksIlRoZSByYWRpdXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgaW5pdGlhbCByYWRpdXMgZm9yIHRoZSByYWRpYWwgbGF5b3V0ZXIuIiksMCksT28pLGxhKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLE9jdCksIiIpLCJDb21wYWN0aW9uIiksIldpdGggdGhlIGNvbXBhY3RlciBvcHRpb24gaXQgY2FuIGJlIGRldGVybWluZWQgaG93IGNvbXBhY3Rpb24gb24gdGhlIGdyYXBoIGlzIGRvbmUuIEl0IGNhbiBiZSBjaG9zZW4gYmV0d2VlbiBub25lLCB0aGUgcmFkaWFsIGNvbXBhY3Rpb24gb3IgdGhlIGNvbXBhY3Rpb24gb2Ygd2VkZ2VzIHNlcGFyYXRlbHkuIiksQ190KSx1cyksVF90KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFBjdCksIiIpLCJDb21wYWN0aW9uIFN0ZXAgU2l6ZSIpLCJEZXRlcm1pbmUgdGhlIHNpemUgb2Ygc3RlcHMgd2l0aCB3aGljaCB0aGUgY29tcGFjdGlvbiBpcyBkb25lLiBTdGVwIHNpemUgMSBjb3JyZWxhdGVzIHRvIGEgY29tcGFjdGlvbiBvZiAxIHBpeGVsIHBlciBJdGVyYXRpb24uIikscGUoMSkpLGdjKSxqYSksdW4ocW4pKSkpLGNhKGUsUGN0LE9jdCxudWxsKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsWGt0KSwiIiksIlNvcnRlciIpLCJTb3J0IHRoZSBub2RlcyBwZXIgcmFkaXVzIGFjY29yZGluZyB0byB0aGUgc29ydGluZyBhbGdvcml0aG0uIFRoZSBzdHJhdGVnaWVzIGFyZSBub25lLCBieSB0aGUgZ2l2ZW4gb3JkZXIgaWQsIG9yIHNvcnRpbmcgdGhlbSBieSBwb2xhciBjb29yZGluYXRlcy4iKSxTX3QpLHVzKSxSX3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsUWt0KSwiIiksIkFubnVsdXMgV2VkZ2UgQ3JpdGVyaWEiKSwiRGV0ZXJtaW5lIGhvdyB0aGUgd2VkZ2UgZm9yIHRoZSBub2RlIHBsYWNlbWVudCBpcyBjYWxjdWxhdGVkLiBJdCBjYW4gYmUgY2hvc2VuIGJldHdlZW4gd2VkZ2UgZGV0ZXJtaW5hdGlvbiBieSB0aGUgbnVtYmVyIG9mIGxlYXZlcyBvciBieSB0aGUgbWF4aW11bSBzdW0gb2YgZGlhZ29uYWxzLiIpLEFfdCksdXMpLHhfdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxaa3QpLCIiKSwiVHJhbnNsYXRpb24gT3B0aW1pemF0aW9uIiksIkZpbmQgdGhlIG9wdGltYWwgdHJhbnNsYXRpb24gb2YgdGhlIG5vZGVzIG9mIHRoZSBmaXJzdCByYWRpaSBhY2NvcmRpbmcgdG8gdGhpcyBjcml0ZXJpYS4gRm9yIGV4YW1wbGUgZWRnZSBjcm9zc2luZ3MgY2FuIGJlIG1pbmltaXplZC4iKSxfX3QpLHVzKSxGX3QpLHVuKHFuKSkpKSxNaGUoKG5ldyBVQixlKSl9O3ZhciBqeWUsJHllLENfdCx6eWUsX190LHF5ZSxIeWUsVnllLFNfdCxHeWUsQV90O0YoV18sIlJhZGlhbE1ldGFEYXRhUHJvdmlkZXIiLDg1MiksRCg5OTYsMSxPaCxVQiksbC5RZT1mdW5jdGlvbihlKXtNaGUoZSl9O3ZhciBXaHQsWWh0LFV5ZSxXeWUsWXllLEt5ZSxMX3QsTV90LEJHLFh5ZSxReWUsUkcscU8sWnllLERfdDtGKFdfLCJSYWRpYWxPcHRpb25zIiw5OTYpLEQoOTk3LDEse30sZFopLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgekh0LGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxGKFdfLCJSYWRpYWxPcHRpb25zL1JhZGlhbEZhY3RvcnkiLDk5NyksRCgzNDAsMjIsezM6MSwzNToxLDIyOjEsMzQwOjF9LGlqKTt2YXIgSV90LE9fdCxQX3QsS2h0LEZfdD1qcihXXywiUmFkaWFsVHJhbnNsYXRpb25TdHJhdGVneSIsMzQwLEhyLGpzbix2dG4pLEp5ZTtEKDI5MywyMix7MzoxLDM1OjEsMjI6MSwyOTM6MX0sS2V0KTt2YXIgTl90LFhodCxCX3QsUl90PWpyKFdfLCJTb3J0aW5nU3RyYXRlZ3kiLDI5MyxIcixXaW4sbXRuKSx0M2U7RCgxNDQ5LDEsemMsSk4pLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzMyksbnVsbH0sbC5wZj1mdW5jdGlvbihlLG4pe1kybih0aGlzLHUoZSwzMyksbil9LGwuYz0wLEYoIm9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLnAxcG9zaXRpb24iLCJFYWRlc1JhZGlhbCIsMTQ0OSksRCgxNzc1LDEse30sZ1opLGwuamc9ZnVuY3Rpb24oZSl7cmV0dXJuIGJzZShlKX0sRihaMWUsIkFubnVsdXNXZWRnZUJ5TGVhZnMiLDE3NzUpLEQoMTc3NiwxLHt9LHRCKSxsLmpnPWZ1bmN0aW9uKGUpe3JldHVybiBFYWUodGhpcyxlKX0sRihaMWUsIkFubnVsdXNXZWRnZUJ5Tm9kZVNwYWNlIiwxNzc2KSxEKDE0NTAsMSx6YyxlQiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDMzKSxudWxsfSxsLnBmPWZ1bmN0aW9uKGUsbil7YTBuKHRoaXMsdShlLDMzKSxuKX0sRigib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwucDJyb3V0aW5nIiwiU3RyYWlnaHRMaW5lRWRnZVJvdXRlciIsMTQ1MCksRCg4MTEsMSx7fSxacHQpLGwua2c9ZnVuY3Rpb24oZSl7fSxsLmxnPWZ1bmN0aW9uKGUpe3JxdCh0aGlzLGUpfSxGKEprdCwiSURTb3J0ZXIiLDgxMSksRCgxNzc0LDEsT2ksbkIpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gTWNuKHUoZSwzMyksdShuLDMzKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihKa3QsIklEU29ydGVyL2xhbWJkYSQwJFR5cGUiLDE3NzQpLEQoMTc3MywxLHt9LHluZSksbC5rZz1mdW5jdGlvbihlKXtTWnQodGhpcyxlKX0sbC5sZz1mdW5jdGlvbihlKXt2YXIgbjtlLmRjKCl8fCh0aGlzLmV8fChuPUVLdCh1KGUuWGIoMCksMzMpKSxTWnQodGhpcyxuKSkscnF0KHRoaXMuZSxlKSl9LEYoSmt0LCJQb2xhckNvb3JkaW5hdGVTb3J0ZXIiLDE3NzMpLEQoMTEzNiwyMDksUzIscFopLGwuWmU9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZSxXZSxRZSxSbix6bixocjtpZih2cihuLCJSZWN0YW5nbGUgUGFja2luZyIsMSksbi5uJiZuLm4mJmUmJmdmKG4scGYoZSksKFNsKCksUWwpKSxyPVh0KHllKHFlKGUsKHNhdCgpLGwzZSkpKSksdHQ9dShxZShlLFFfdCksMzgxKSxTdD1qZShSZShxZShlLFlfdCkpKSxfZT1qZShSZShxZShlLFhfdCkpKSxqPWplKFJlKHFlKGUsR190KSkpLFdlPXUocWUoZSx3M2UpLDExNiksdWU9WHQoeWUocWUoZSxtM2UpKSksbz1qZShSZShxZShlLEpfdCkpKSxIPWplKFJlKHFlKGUsVV90KSkpLE10PWplKFJlKHFlKGUsV190KSkpLGhyPVh0KHllKHFlKGUsdFN0KSkpLFJuPSghZS5hJiYoZS5hPW5ldyBmZShycyxlLDEwLDExKSksZS5hKSxtbmUoUm4pLE10KXtmb3IoSz1uZXcgaGUsaz1uZXcgbnIoUm4pO2suZSE9ay5pLmdjKCk7KWQ9dShkcihrKSwzMyksbzIoZCxITykmJihLLmNbSy5jLmxlbmd0aF09ZCk7Zm9yKEM9bmV3IFMoSyk7Qy5hPEMuYy5jLmxlbmd0aDspZD11KEooQyksMzMpLFgkKFJuLGQpO2Zvcih3bigpLFpzKEssbmV3IGJaKSxNPW5ldyBTKEspO00uYTxNLmMuYy5sZW5ndGg7KWQ9dShKKE0pLDMzKSxRZT11KHFlKGQsSE8pLDE5KS5hLFFlPWIuTWF0aC5taW4oUWUsUm4uaSksbl8oUm4sUWUsZCk7Zm9yKGd0PTAsdj1uZXcgbnIoUm4pO3YuZSE9di5pLmdjKCk7KWQ9dShkcih2KSwzMyksd28oZCxWX3QscGUoZ3QpKSwrK2d0fUt0PVE0dChlKSxLdC5hLT1XZS5iK1dlLmMsS3QuYi09V2UuZCtXZS5hLFJ0PUt0LmEsaHI8MHx8aHI8S3QuYT8oRz1uZXcgTll0KHIsdHQsU3QpLGg9Q21uKEcsUm4sdWUsV2UpLG4ubiYmbi5uJiZlJiZnZihuLHBmKGUpLChTbCgpLFFsKSkpOmg9bmV3IEZudChyLGhyLDAsKEFFKCksVVMpKSxLdC5hKz1XZS5iK1dlLmMsS3QuYis9V2UuZCtXZS5hLF9lfHwobW5lKFJuKSx6bj1uZXcgV1p0KHIsaixILG8sdWUpLFJ0PWIuTWF0aC5tYXgoS3QuYSxoLmMpLGg9cjVuKHpuLFJuLFJ0LEt0LG4sZSxXZSkpLG51bihSbixXZSksd3YoZSxoLmMrKFdlLmIrV2UuYyksaC5iKyhXZS5kK1dlLmEpLCExLCEwKSxqZShSZShxZShlLEtfdCkpKXx8eSQoKHM9bmV3IHJyKChQbSgpLG5ldyBNbShlKSkpLHMpKSxuLm4mJm4ubiYmZSYmZ2YobixwZihlKSwoU2woKSxRbCkpLG9yKG4pfSxGKG5kZSwiUmVjdFBhY2tpbmdMYXlvdXRQcm92aWRlciIsMTEzNiksRCgxMTM3LDEsT2ksYlopLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gV3VuKHUoZSwzMyksdShuLDMzKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihuZGUsIlJlY3RQYWNraW5nTGF5b3V0UHJvdmlkZXIvbGFtYmRhJDAkVHlwZSIsMTEzNyksRCgxMjU2LDEse30sTll0KSxsLmE9MCxsLmM9ITEsRihUSCwiQXJlYUFwcHJveGltYXRpb24iLDEyNTYpO3ZhciBqX3Q9S2koVEgsIkJlc3RDYW5kaWRhdGVGaWx0ZXIiKTtEKDYzOCwxLHs1MjY6MX0sS1QpLGwubWc9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saCxkLHYsaztmb3Ioaz1uZXcgaGUsaD1hcyx2PW5ldyBTKGUpO3YuYTx2LmMuYy5sZW5ndGg7KWQ9dShKKHYpLDIyMCksaD1iLk1hdGgubWluKGgsKGQuYysoci5iK3IuYykpKihkLmIrKHIuZCtyLmEpKSk7Zm9yKG89bmV3IFMoZSk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMjIwKSwocy5jKyhyLmIrci5jKSkqKHMuYisoci5kK3IuYSkpPT1oJiYoay5jW2suYy5sZW5ndGhdPXMpO3JldHVybiBrfSxGKFRILCJBcmVhRmlsdGVyIiw2MzgpLEQoNjM5LDEsezUyNjoxfSxqTCksbC5tZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoLGQsdixrO2Zvcih2PW5ldyBoZSxrPWFzLGQ9bmV3IFMoZSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMjIwKSxrPWIuTWF0aC5taW4oayxiLk1hdGguYWJzKChoLmMrKHIuYityLmMpKS8oaC5iKyhyLmQrci5hKSktbikpO2ZvcihvPW5ldyBTKGUpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDIyMCksYi5NYXRoLmFicygocy5jKyhyLmIrci5jKSkvKHMuYisoci5kK3IuYSkpLW4pPT1rJiYodi5jW3YuYy5sZW5ndGhdPXMpO3JldHVybiB2fSxGKFRILCJBc3BlY3RSYXRpb0ZpbHRlciIsNjM5KSxEKDYzNywxLHs1MjY6MX0sWFQpLGwubWc9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saCxkLHYsaztmb3Ioaz1uZXcgaGUsaD1Dcyx2PW5ldyBTKGUpO3YuYTx2LmMuYy5sZW5ndGg7KWQ9dShKKHYpLDIyMCksaD1iLk1hdGgubWF4KGgsS3d0KGQuYysoci5iK3IuYyksZC5iKyhyLmQrci5hKSxkLmEpKTtmb3Iobz1uZXcgUyhlKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwyMjApLEt3dChzLmMrKHIuYityLmMpLHMuYisoci5kK3IuYSkscy5hKT09aCYmKGsuY1trLmMubGVuZ3RoXT1zKTtyZXR1cm4ga30sRihUSCwiU2NhbGVNZWFzdXJlRmlsdGVyIiw2MzcpLEQoMzgxLDIyLHszOjEsMzU6MSwyMjoxLDM4MToxfSxYZXQpO3ZhciAkX3Qsel90LFFodCxxX3Q9anIoRmN0LCJPcHRpbWl6YXRpb25Hb2FsIiwzODEsSHIsVWluLHl0biksZTNlO0QoODU2LDEsT2gsWEIpLGwuUWU9ZnVuY3Rpb24oZSl7YW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHQ4dCksIiIpLCJPcHRpbWl6YXRpb24gR29hbCIpLCJPcHRpbWl6YXRpb24gZ29hbCBmb3IgYXBwcm94aW1hdGlvbiBvZiB0aGUgYm91bmRpbmcgYm94IGdpdmVuIGJ5IHRoZSBmaXJzdCBpdGVyYXRpb24uIERldGVybWluZXMgd2hldGhlciBsYXlvdXQgaXMgc29ydGVkIGJ5IHRoZSBtYXhpbXVtIHNjYWxpbmcsIGFzcGVjdCByYXRpbywgb3IgYXJlYS4gRGVwZW5kaW5nIG9uIHRoZSBzdHJhdGVneSB0aGUgYXNwZWN0IHJhdGlvIG1pZ2h0IGJlIG5lYXJseSBpZ25vcmVkLiIpLEhfdCksKFVnKCksdXMpKSxxX3QpLHVuKChRZigpLGVhKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGU4dCksIiIpLCJTaGlmdCBMYXN0IFBsYWNlZC4iKSwiV2hlbiBwbGFjaW5nIGEgcmVjdGFuZ2xlIGJlaGluZCBvciBiZWxvdyB0aGUgbGFzdCBwbGFjZWQgcmVjdGFuZ2xlIGluIHRoZSBmaXJzdCBpdGVyYXRpb24sIGl0IGlzIHNvbWV0aW1lcyBwb3NzaWJsZSB0byBzaGlmdCB0aGUgcmVjdGFuZ2xlIGZ1cnRoZXIgdG8gdGhlIGxlZnQgb3IgcmlnaHQsIHJlc3VsdGluZyBpbiBsZXNzIHdoaXRlc3BhY2UuIFRydWUgKGRlZmF1bHQpIGVuYWJsZXMgdGhlIHNoaWZ0IGFuZCBmYWxzZSBkaXNhYmxlcyBpdC4gRGlzYWJsaW5nIHRoZSBzaGlmdCBwcm9kdWNlcyBhIGdyZWF0ZXIgYXBwcm94aW1hdGVkIGFyZWEgYnkgdGhlIGZpcnN0IGl0ZXJhdGlvbiBhbmQgYSBsYXlvdXQsIHdoZW4gdXNpbmcgT05MWSB0aGUgZmlyc3QgaXRlcmF0aW9uIChkZWZhdWx0IG5vdCB0aGUgY2FzZSksIHdoZXJlIGl0IGlzIHNvbWV0aW1lcyBpbXBvc3NpYmxlIHRvIGltcGxlbWVudCBhIHNpemUgdHJhbnNmb3JtYXRpb24gb2YgcmVjdGFuZ2xlcyB0aGF0IHdpbGwgZmlsbCB0aGUgYm91bmRpbmcgYm94IGFuZCBlbGltaW5hdGUgZW1wdHkgc3BhY2VzLiIpLChObigpLCEwKSksTGEpLFJzKSx1bihlYSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLG44dCksIiIpLCJDdXJyZW50IHBvc2l0aW9uIG9mIGEgbm9kZSBpbiB0aGUgb3JkZXIgb2Ygbm9kZXMiKSwiVGhlIHJlY3RhbmdsZXMgYXJlIG9yZGVyZWQuIE5vcm1hbGx5IGFjY29yZGluZyB0byB0aGVpciBkZWZpbml0aW9uIHRoZSB0aGUgbW9kZWwuIFRoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiBhIG5vZGUuIikscGUoLTEpKSxnYyksamEpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUscjh0KSwiIiksIkRlc2lyZWQgaW5kZXggb2Ygbm9kZSIpLCJUaGUgcmVjdGFuZ2xlcyBhcmUgb3JkZXJlZC4gTm9ybWFsbHkgYWNjb3JkaW5nIHRvIHRoZWlyIGRlZmluaXRpb24gdGhlIHRoZSBtb2RlbC4gVGhpcyBvcHRpb24gYWxsb3dzIHRvIHNwZWNpZnkgYSBkZXNpcmVkIHBvc2l0aW9uIHRoYXQgaGFzIHByZWZlcmVuY2Ugb3ZlciB0aGUgb3JpZ2luYWwgcG9zaXRpb24uIikscGUoLTEpKSxnYyksamEpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsaTh0KSwiIiksIk9ubHkgQXJlYSBBcHByb3hpbWF0aW9uIiksIklmIGVuYWJsZWQgb25seSB0aGUgd2lkdGggYXBwcm94aW1hdGlvbiBzdGVwIGlzIGV4ZWN1dGVkIGFuZCB0aGUgbm9kZXMgYXJlIHBsYWNlZCBhY2NvcmRpbmdseS4gVGhlIG5vZGVzIGFyZSBsYXlvdXRlZCBhY2NvcmRpbmcgdG8gdGhlIHBhY2tpbmdTdHJhdGVneS4gSWYgc2V0IHRvIHRydWUgbm90IGV4cGFuc2lvbiBvZiBub2RlcyBpcyB0YWtpbmcgcGxhY2UuIiksITEpLExhKSxScyksdW4oZWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxzOHQpLCIiKSwiQ29tcGFjdCBSb3dzIiksIkVuYWJsZXMgY29tcGFjdGlvbi4gQ29tcGFjdHMgYmxvY2tzIGlmIHRoZXkgZG8gbm90IHVzZSB0aGUgZnVsbCBoZWlnaHQgb2YgdGhlIHJvdy4gVGhpcyBvcHRpb24gYWxsb3dzIHRvIGhhdmUgYSBzbWFsbGVyIGRyYXdpbmcuIElmIHRoaXMgb3B0aW9uIGlzIGRpc2FibGVkIGFsbCBub2RlcyBhcmUgcGxhY2VkIG5leHQgdG8gZWFjaCBvdGhlciBpbiByb3dzLiIpLCEwKSxMYSksUnMpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsTmN0KSwiIiksIkZpdCBBc3BlY3QgUmF0aW8iKSwiRXhwYW5kcyBub2RlcyBpZiBleHBhbmROb2RlcyBpcyB0cnVlIHRvIGZpdCB0aGUgYXNwZWN0IHJhdGlvIGluc3RlYWQgb2Ygb25seSBpbiB0aGVpciBib3VuZHMuIFRoZSBvcHRpb24gaXMgb25seSB1c2VmdWwgaWYgdGhlIHVzZWQgcGFja2luZ1N0cmF0ZWd5IGlzIEFTUEVDVF9SQVRJT19EUklWRU4sIG90aGVyd2lzZSB0aGlzIG1heSByZXN1bHQgaW4gdW5yZWFzb25hYmxlIG5kb2UgZXhwYW5zaW9uLiIpLCExKSxMYSksUnMpLHVuKGVhKSkpKSxjYShlLE5jdCxDSCxudWxsKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsYTh0KSwiIiksIlRhcmdldCBXaWR0aCIpLCJPcHRpb24gdG8gcGxhY2UgdGhlIHJlY3RhbmdsZXMgaW4gdGhlIGdpdmVuIHRhcmdldCB3aWR0aCBpbnN0ZWFkIG9mIGFwcHJveGltYXRpbmcgdGhlIHdpZHRoIHVzaW5nIHRoZSBkZXNpcmVkIGFzcGVjdCByYXRpby4gVGhlIHBhZGRpbmcgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMuIE1lYW5pbmcgYSBkcmF3aW5nIHdpbGwgaGF2ZSB3aWR0aCBvZiB0YXJnZXR3aWR0aCArIGhvcml6b250YWwgcGFkZGluZy4iKSwtMSksT28pLGxhKSx1bihlYSkpKSksWmhlKChuZXcgR2ssZSkpfTt2YXIgbjNlLHIzZSxpM2UsczNlLGEzZSxvM2UsSF90LGMzZSx1M2U7RihGY3QsIlJlY3RQYWNraW5nTWV0YURhdGFQcm92aWRlciIsODU2KSxEKDEwMDQsMSxPaCxHayksbC5RZT1mdW5jdGlvbihlKXtaaGUoZSl9O3ZhciBsM2UsaDNlLFZfdCxITyxHX3QsVV90LFdfdCxmM2UsWV90LGQzZSxnM2UscDNlLGIzZSxLX3QsWF90LFFfdCx3M2UsWl90LHYzZSxKX3QsbTNlLHRTdDtGKEZjdCwiUmVjdFBhY2tpbmdPcHRpb25zIiwxMDA0KSxEKDEwMDUsMSx7fSx3WiksbC4kZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBwWixlfSxsLl9lPWZ1bmN0aW9uKGUpe30sRihGY3QsIlJlY3RQYWNraW5nT3B0aW9ucy9SZWN0cGFja2luZ0ZhY3RvcnkiLDEwMDUpLEQoMTI1NywxLHt9LFdadCksbC5hPTAsbC5iPSExLGwuYz0wLGwuZD0wLGwuZT0hMSxsLmY9ITEsbC5nPTAsRigib3JnLmVjbGlwc2UuZWxrLmFsZy5yZWN0cGFja2luZy5zZWNvbmRpdGVyYXRpb24iLCJSb3dGaWxsaW5nQW5kQ29tcGFjdGlvbiIsMTI1NyksRCgxODcsMSx7MTg3OjF9LElpdCksbC5hPTAsbC5jPSExLGwuZD0wLGwuZT0wLGwuZj0wLGwuZz0wLGwuaT0wLGwuaz0hMSxsLm89YXMsbC5wPWFzLGwucj0wLGwucz0wLGwudD0wLEYodE8sIkJsb2NrIiwxODcpLEQoMjExLDEsezIxMToxfSxFJCksbC5hPTAsbC5iPTAsbC5kPTAsbC5lPTAsbC5mPTAsRih0TywiQmxvY2tSb3ciLDIxMSksRCg0NDMsMSx7NDQzOjF9LHF2dCksbC5iPTAsbC5jPTAsbC5kPTAsbC5lPTAsbC5mPTAsRih0TywiQmxvY2tTdGFjayIsNDQzKSxEKDIyMCwxLHsyMjA6MX0sRm50LGIzdCksbC5hPTAsbC5iPTAsbC5jPTAsbC5kPTAsbC5lPTA7dmFyIGI2bj1GKHRPLCJEcmF3aW5nRGF0YSIsMjIwKTtEKDM1NSwyMix7MzoxLDM1OjEsMjI6MSwzNTU6MX0sRE0pO3ZhciBHNixpNSxWUyxHUyxVUyx5M2U9anIodE8sIkRyYXdpbmdEYXRhRGVzY3JpcHRvciIsMzU1LEhyLGthbix4dG4pLHgzZTtEKDIwMCwxLHsyMDA6MX0sWnZ0KSxsLmI9MCxsLmM9MCxsLmU9MCxsLmY9MCxGKHRPLCJSZWN0Um93IiwyMDApLEQoNzU2LDEse30sV3l0KSxsLmo9MCxGKEF5LHcxZSw3NTYpLEQoMTI0NSwxLHt9LHZaKSxsLkplPWZ1bmN0aW9uKGUpe3JldHVybiBXcChlLmEsZS5iKX0sRihBeSx2MWUsMTI0NSksRCgxMjQ2LDEse30sWCR0KSxsLkplPWZ1bmN0aW9uKGUpe3JldHVybiBMYW4odGhpcy5hLGUpfSxGKEF5LG0xZSwxMjQ2KSxEKDEyNDcsMSx7fSxRJHQpLGwuSmU9ZnVuY3Rpb24oZSl7cmV0dXJuIE5mbih0aGlzLmEsZSl9LEYoQXkseTFlLDEyNDcpLEQoMTI0OCwxLHt9LFokdCksbC5KZT1mdW5jdGlvbihlKXtyZXR1cm4gSXVuKHRoaXMuYSxlKX0sRihBeSwiRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkMyRUeXBlIiwxMjQ4KSxEKDEyNDksMSx7fSxKJHQpLGwuSmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGJibih0aGlzLmEsZSl9LEYoQXkseDFlLDEyNDkpLEQoMTEzMywyMDksUzIsSEh0KSxsLlplPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHO2ZvcihvMihlLChjSSgpLEhHKSkmJihHPUJyKHFlKGUsKHlzdCgpLHhTdCkpKSxoPWJhdChLOCgpLEcpLGgmJihkPXUoeHJ0KGguZiksMjA5KSxkLlplKGUsUmMobiwxKSkpKSx3byhlLGlmdCwoYkQoKSxxRykpLHdvKGUsc2Z0LCh1SSgpLHJmdCkpLHdvKGUsYWZ0LChqRCgpLFZHKSksdj11KHFlKGUsKHlzdCgpLHZTdCkpLDE5KS5hLHZyKG4sIk92ZXJsYXAgcmVtb3ZhbCIsMSksamUoUmUocWUoZSx6M2UpKSksaz1uZXcgSHMsQz1uZXcgdHp0KGspLHM9bmV3IFd5dCxyPUpoZShzLGUpLE09ITAsbz0wO288diYmTTspe2lmKGplKFJlKHFlKGUsbVN0KSkpKXtpZihrLmEuJGIoKSxkcG4obmV3IHpVdChDKSxyLmkpLGsuYS5nYygpPT0wKWJyZWFrO3IuZT1rfWZvcihMJCh0aGlzLmIpLEtkKHRoaXMuYiwoS0QoKSxqRyksKFVDKCksVk8pKSxLZCh0aGlzLmIsJEcsci5nKSxLZCh0aGlzLmIsekcsKHFSKCksdGZ0KSksdGhpcy5hPUZxKHRoaXMuYixyKSxIPW5ldyBTKHRoaXMuYSk7SC5hPEguYy5jLmxlbmd0aDspaj11KEooSCksNTEpLGoucGYocixSYyhuLDEpKTtNZG4ocyxyKSxNPWplKFJlKFEociwoWjgoKSx1N3QpKSkpLCsrb31naGUocyxyKSxvcihuKX0sRihBeSwiT3ZlcmxhcFJlbW92YWxMYXlvdXRQcm92aWRlciIsMTEzMyksRCgxMTM0LDEse30sdHp0KSxGKEF5LCJPdmVybGFwUmVtb3ZhbExheW91dFByb3ZpZGVyL2xhbWJkYSQwJFR5cGUiLDExMzQpLEQoNDM3LDIyLHszOjEsMzU6MSwyMjoxLDQzNzoxfSxRZXQpO3ZhciBqRywkRyx6RyxaaHQ9anIoQXksIlNQT3JFUGhhc2VzIiw0MzcsSHIsWWluLGt0biksazNlO0QoMTI1NSwxLHt9LFZIdCksRihBeSwiU2hyaW5rVHJlZSIsMTI1NSksRCgxMTM1LDIwOSxTMixLcXQpLGwuWmU9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkO28yKGUsKGNJKCksSEcpKSYmKGQ9QnIocWUoZSxIRykpLG89YmF0KEs4KCksZCksbyYmKGg9dSh4cnQoby5mKSwyMDkpLGguWmUoZSxSYyhuLDEpKSkpLHM9bmV3IFd5dCxyPUpoZShzLGUpLEoybih0aGlzLmEscixSYyhuLDEpKSxnaGUocyxyKX0sRihBeSwiU2hyaW5rVHJlZUxheW91dFByb3ZpZGVyIiwxMTM1KSxEKDMwMCwxMzQsezM6MSwzMDA6MSw5NDoxLDEzNDoxfSxFUXQpLGwuYz0hMSxGKCJvcmcuZWNsaXBzZS5lbGsuYWxnLnNwb3JlLmdyYXBoIiwiR3JhcGgiLDMwMCksRCg0ODIsMjIsezM6MSwzNToxLDIyOjEsNDgyOjEsMjQ2OjEsMjM0OjF9LCRWdCksbC5LZj1mdW5jdGlvbigpe3JldHVybiBfcmUodGhpcyl9LGwuWGY9ZnVuY3Rpb24oKXtyZXR1cm4gX3JlKHRoaXMpfTt2YXIgSmh0LGVTdD1qcihMeSxhNnQsNDgyLEhyLHNybixFdG4pLEUzZTtEKDU1MSwyMix7MzoxLDM1OjEsMjI6MSw1NTE6MSwyNDY6MSwyMzQ6MX0sJFd0KSxsLktmPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByQn0sbC5YZj1mdW5jdGlvbigpe3JldHVybiBuZXcgckJ9O3ZhciB0ZnQsVDNlPWpyKEx5LCJPdmVybGFwUmVtb3ZhbFN0cmF0ZWd5Iiw1NTEsSHIsYXJuLFR0biksQzNlO0QoNDMwLDIyLHszOjEsMzU6MSwyMjoxLDQzMDoxfSxaYnQpO3ZhciBxRyxlZnQsblN0PWpyKEx5LCJSb290U2VsZWN0aW9uIiw0MzAsSHIsWnJuLEN0biksXzNlO0QoMzE2LDIyLHszOjEsMzU6MSwyMjoxLDMxNjoxfSxJTSk7dmFyIHJTdCxuZnQscmZ0LGlTdCxzU3QsYVN0PWpyKEx5LCJTcGFubmluZ1RyZWVDb3N0RnVuY3Rpb24iLDMxNixIcixtYW4sX3RuKSxTM2U7RCgxMDAyLDEsT2gsV0IpLGwuUWU9ZnVuY3Rpb24oZSl7VmxlKGUpfTt2YXIgb1N0LGNTdCxBM2UsTDNlLHVTdCxsU3QsaWZ0LHNmdCxhZnQsTTNlLEQzZSxIRztGKEx5LCJTcG9yZUNvbXBhY3Rpb25PcHRpb25zIiwxMDAyKSxEKDEwMDMsMSx7fSwkTCksbC4kZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBLcXQsZX0sbC5fZT1mdW5jdGlvbihlKXt9LEYoTHksIlNwb3JlQ29tcGFjdGlvbk9wdGlvbnMvU3BvcmVDb21wYWN0aW9uRmFjdG9yeSIsMTAwMyksRCg4NTUsMSxPaCxZQiksbC5RZT1mdW5jdGlvbihlKXthbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsQmN0KSwiIiksIlVuZGVybHlpbmcgTGF5b3V0IEFsZ29yaXRobSIpLCJBIGxheW91dCBhbGdvcml0aG0gdGhhdCBpcyBhcHBsaWVkIHRvIHRoZSBncmFwaCBiZWZvcmUgaXQgaXMgY29tcGFjdGVkLiBJZiB0aGlzIGlzIG51bGwsIG5vdGhpbmcgaXMgYXBwbGllZCBiZWZvcmUgY29tcGFjdGlvbi4iKSwoVWcoKSxJNykpLEFlKSx1bigoUWYoKSxxbikpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSwkY3QpLCJzdHJ1Y3R1cmUiKSwiU3RydWN0dXJlIEV4dHJhY3Rpb24gU3RyYXRlZ3kiKSwiVGhpcyBvcHRpb24gZGVmaW5lcyB3aGF0IGtpbmQgb2YgdHJpYW5ndWxhdGlvbiBvciBvdGhlciBwYXJ0aXRpb25pbmcgb2YgdGhlIHBsYW5lIGlzIGFwcGxpZWQgdG8gdGhlIHZlcnRpY2VzLiIpLGJTdCksdXMpLGtTdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxvOHQpLHpjdCksIlRyZWUgQ29uc3RydWN0aW9uIFN0cmF0ZWd5IiksIldoZXRoZXIgYSBtaW5pbXVtIHNwYW5uaW5nIHRyZWUgb3IgYSBtYXhpbXVtIHNwYW5uaW5nIHRyZWUgc2hvdWxkIGJlIGNvbnN0cnVjdGVkLiIpLGdTdCksdXMpLFRTdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxjOHQpLHpjdCksIkNvc3QgRnVuY3Rpb24gZm9yIFNwYW5uaW5nIFRyZWUiKSwiVGhlIGNvc3QgZnVuY3Rpb24gaXMgdXNlZCBpbiB0aGUgY3JlYXRpb24gb2YgdGhlIHNwYW5uaW5nIHRyZWUuIiksZFN0KSx1cyksYVN0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFJjdCksemN0KSwiUm9vdCBub2RlIGZvciBzcGFubmluZyB0cmVlIGNvbnN0cnVjdGlvbiIpLCJUaGUgaWRlbnRpZmllciBvZiB0aGUgbm9kZSB0aGF0IGlzIHByZWZlcnJlZCBhcyB0aGUgcm9vdCBvZiB0aGUgc3Bhbm5pbmcgdHJlZS4gSWYgdGhpcyBpcyBudWxsLCB0aGUgZmlyc3Qgbm9kZSBpcyBjaG9zZW4uIiksbnVsbCksSTcpLEFlKSx1bihxbikpKSksY2EoZSxSY3QsamN0LEIzZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGpjdCksemN0KSwiUm9vdCBzZWxlY3Rpb24gZm9yIHNwYW5uaW5nIHRyZWUiKSwiVGhpcyBzZXRzIHRoZSBtZXRob2QgdXNlZCB0byBzZWxlY3QgYSByb290IG5vZGUgZm9yIHRoZSBjb25zdHJ1Y3Rpb24gb2YgYSBzcGFubmluZyB0cmVlIiksZlN0KSx1cyksblN0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHU4dCkscmt0KSwiQ29tcGFjdGlvbiBTdHJhdGVneSIpLCJUaGlzIG9wdGlvbiBkZWZpbmVzIGhvdyB0aGUgY29tcGFjdGlvbiBpcyBhcHBsaWVkLiIpLGhTdCksdXMpLGVTdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxsOHQpLHJrdCksIk9ydGhvZ29uYWwgQ29tcGFjdGlvbiIpLCJSZXN0cmljdHMgdGhlIHRyYW5zbGF0aW9uIG9mIG5vZGVzIHRvIG9ydGhvZ29uYWwgZGlyZWN0aW9ucyBpbiB0aGUgY29tcGFjdGlvbiBwaGFzZS4iKSwoTm4oKSwhMSkpLExhKSxScyksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxoOHQpLHJkZSksIlVwcGVyIGxpbWl0IGZvciBpdGVyYXRpb25zIG9mIG92ZXJsYXAgcmVtb3ZhbCIpLG51bGwpLHBlKDY0KSksZ2MpLGphKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGY4dCkscmRlKSwiV2hldGhlciB0byBydW4gYSBzdXBwbGVtZW50YXJ5IHNjYW5saW5lIG92ZXJsYXAgY2hlY2suIiksbnVsbCksITApLExhKSxScyksdW4ocW4pKSkpLFh1ZSgobmV3IEtCLGUpKSxWbGUoKG5ldyBXQixlKSl9O3ZhciBJM2UsaFN0LE8zZSxQM2UsRjNlLE4zZSxCM2UsUjNlLGZTdCxqM2UsZFN0LCQzZSxnU3QscFN0LGJTdCx3U3Q7RihMeSwiU3BvcmVNZXRhRGF0YVByb3ZpZGVyIiw4NTUpLEQoV2csMSxPaCxLQiksbC5RZT1mdW5jdGlvbihlKXtYdWUoZSl9O3ZhciB6M2UsdlN0LG1TdCx5U3QscTNlLHhTdDtGKEx5LCJTcG9yZU92ZXJsYXBSZW1vdmFsT3B0aW9ucyIsV2cpLEQoMTAwMSwxLHt9LG1aKSxsLiRlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IEhIdCxlfSxsLl9lPWZ1bmN0aW9uKGUpe30sRihMeSwiU3BvcmVPdmVybGFwUmVtb3ZhbE9wdGlvbnMvU3BvcmVPdmVybGFwRmFjdG9yeSIsMTAwMSksRCg1MzAsMjIsezM6MSwzNToxLDIyOjEsNTMwOjEsMjQ2OjEsMjM0OjF9LE1YdCksbC5LZj1mdW5jdGlvbigpe3JldHVybiBTcmUodGhpcyl9LGwuWGY9ZnVuY3Rpb24oKXtyZXR1cm4gU3JlKHRoaXMpfTt2YXIgVk8sa1N0PWpyKEx5LCJTdHJ1Y3R1cmVFeHRyYWN0aW9uU3RyYXRlZ3kiLDUzMCxIcixvcm4sU3RuKSxIM2U7RCg0MjksMjIsezM6MSwzNToxLDIyOjEsNDI5OjEsMjQ2OjEsMjM0OjF9LEpidCksbC5LZj1mdW5jdGlvbigpe3JldHVybiBraWUodGhpcyl9LGwuWGY9ZnVuY3Rpb24oKXtyZXR1cm4ga2llKHRoaXMpfTt2YXIgRVN0LFZHLFRTdD1qcihMeSwiVHJlZUNvbnN0cnVjdGlvblN0cmF0ZWd5Iiw0MjksSHIsUXJuLEF0biksVjNlO0QoMTQ0MywxLHpjLHlaKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzAwKSxuZXcgVnN9LGwucGY9ZnVuY3Rpb24oZSxuKXskZG4odShlLDMwMCksbil9LEYoaWRlLCJEZWxhdW5heVRyaWFuZ3VsYXRpb25QaGFzZSIsMTQ0MyksRCgxNDQ0LDEsVW4sZXp0KSxsLnRkPWZ1bmN0aW9uKGUpe2xlKHRoaXMuYSx1KGUsNjUpLmEpfSxGKGlkZSwiRGVsYXVuYXlUcmlhbmd1bGF0aW9uUGhhc2UvbGFtYmRhJDAkVHlwZSIsMTQ0NCksRCg3ODMsMSx6YyxRcHQpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzMDApLG5ldyBWc30sbC5wZj1mdW5jdGlvbihlLG4pe3RoaXMubmcodShlLDMwMCksbil9LGwubmc9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG87dnIobiwiTWluaW11bSBzcGFubmluZyB0cmVlIGNvbnN0cnVjdGlvbiIsMSksZS5kP3M9ZS5kLmE6cz11KE5lKGUuaSwwKSw2NSkuYSxqZShSZShRKGUsKFo4KCksZlMpKSkpP289TmF0KGUuZSxzLChyPWUuYixyKSk6bz1OYXQoZS5lLHMsZS5iKSxjcmUodGhpcyxvLGUpLG9yKG4pfSxGKHFjdCwiTWluU1RQaGFzZSIsNzgzKSxEKDE0NDYsNzgzLHpjLE9xdCksbC5uZz1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoO3ZyKG4sIk1heGltdW0gc3Bhbm5pbmcgdHJlZSBjb25zdHJ1Y3Rpb24iLDEpLHI9bmV3IG56dChlKSxlLmQ/bz1lLmQuYzpvPXUoTmUoZS5pLDApLDY1KS5jLGplKFJlKFEoZSwoWjgoKSxmUykpKSk/aD1OYXQoZS5lLG8sKHM9cixzKSk6aD1OYXQoZS5lLG8sciksY3JlKHRoaXMsaCxlKSxvcihuKX0sRihxY3QsIk1heFNUUGhhc2UiLDE0NDYpLEQoMTQ0NywxLHt9LG56dCksbC5KZT1mdW5jdGlvbihlKXtyZXR1cm4gTVhlKHRoaXMuYSxlKX0sRihxY3QsIk1heFNUUGhhc2UvbGFtYmRhJDAkVHlwZSIsMTQ0NyksRCgxNDQ1LDEsVW4scnp0KSxsLnRkPWZ1bmN0aW9uKGUpe3hRZSh0aGlzLmEsdShlLDY1KSl9LEYocWN0LCJNaW5TVFBoYXNlL2xhbWJkYSQwJFR5cGUiLDE0NDUpLEQoNzg1LDEsemMsckIpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzMDApLG5ldyBWc30sbC5wZj1mdW5jdGlvbihlLG4pe0owbih0aGlzLHUoZSwzMDApLG4pfSxsLmE9ITEsRihIY3QsIkdyb3dUcmVlUGhhc2UiLDc4NSksRCg3ODYsMSxVbixTd3QpLGwudGQ9ZnVuY3Rpb24oZSl7YnVuKHRoaXMuYSx0aGlzLmIsdGhpcy5jLHUoZSwyMjEpKX0sRihIY3QsIkdyb3dUcmVlUGhhc2UvbGFtYmRhJDAkVHlwZSIsNzg2KSxEKDE0NDgsMSx6Yyx4WiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDMwMCksbmV3IFZzfSxsLnBmPWZ1bmN0aW9uKGUsbil7YzFuKHRoaXMsdShlLDMwMCksbil9LEYoSGN0LCJTaHJpbmtUcmVlQ29tcGFjdGlvblBoYXNlIiwxNDQ4KSxEKDc4NCwxLFVuLEF3dCksbC50ZD1mdW5jdGlvbihlKXskYm4odGhpcy5hLHRoaXMuYix0aGlzLmMsdShlLDIyMSkpfSxGKEhjdCwiU2hyaW5rVHJlZUNvbXBhY3Rpb25QaGFzZS9sYW1iZGEkMCRUeXBlIiw3ODQpO3ZhciBDU3Q9S2koRWMsIklHcmFwaEVsZW1lbnRWaXNpdG9yIik7RCg4NjAsMSx7NTI3OjF9LHZadCksbC5vZz1mdW5jdGlvbihlKXt2YXIgbjtuPVV2bih0aGlzLGUpLE1vKG4sdSh0cih0aGlzLmIsZSksOTQpKSxWMm4odGhpcyxlLG4pfTt2YXIgRzNlLFUzZTtGKEw0LCJMYXlvdXRDb25maWd1cmF0b3IiLDg2MCk7dmFyIHc2bj1LaShMNCwiTGF5b3V0Q29uZmlndXJhdG9yL0lQcm9wZXJ0eUhvbGRlck9wdGlvbkZpbHRlciIpO0QoOTMyLDEsezE5MzM6MX0sa1opLGwucGc9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaTYoKSwhZS5YZShuKX0sRihMNCwiTGF5b3V0Q29uZmlndXJhdG9yL2xhbWJkYSQwJFR5cGUiLDkzMiksRCg5MzMsMSx7MTkzMzoxfSxFWiksbC5wZz1mdW5jdGlvbihlLG4pe3JldHVybiBqSHQoZSxuKX0sRihMNCwiTGF5b3V0Q29uZmlndXJhdG9yL2xhbWJkYSQxJFR5cGUiLDkzMyksRCg5MzEsMSx7ODMxOjF9LFRaKSxsLnFnPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGk2KCksIWUuWGUobil9LEYoTDQsIkxheW91dENvbmZpZ3VyYXRvci9sYW1iZGEkMiRUeXBlIiw5MzEpLEQoOTM0LDEsbGksRUd0KSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBVbm4odGhpcy5hLHRoaXMuYix1KGUsMTkzMykpfSxGKEw0LCJMYXlvdXRDb25maWd1cmF0b3IvbGFtYmRhJDMkVHlwZSIsOTM0KSxEKDg1OCwxLHt9LENaKSxGKEw0LCJSZWN1cnNpdmVHcmFwaExheW91dEVuZ2luZSIsODU4KSxEKDI5Niw2MCxRMCx1cXQsUjMpLEYoTDQsIlVuc3VwcG9ydGVkQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiIsMjk2KSxEKDQ1Myw2MCxRMCxqQyksRihMNCwiVW5zdXBwb3J0ZWRHcmFwaEV4Y2VwdGlvbiIsNDUzKSxEKDc1NCwxLHt9KSxGKEVjLCJBYnN0cmFjdFJhbmRvbUxpc3RBY2Nlc3NvciIsNzU0KSxEKDUwMCw3NTQse30sdkkpLGwucmc9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5kPSEwLGwuZT0hMCxsLmY9MCxGKEtFLCJBbGdvcml0aG1Bc3NlbWJsZXIiLDUwMCksRCgxMjM2LDEsbGksX1opLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuISF1KGUsMTIzKX0sRihLRSwiQWxnb3JpdGhtQXNzZW1ibGVyL2xhbWJkYSQwJFR5cGUiLDEyMzYpLEQoMTIzNywxLHt9LGl6dCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gS0tlKHRoaXMuYSx1KGUsMTIzKSl9LEYoS0UsIkFsZ29yaXRobUFzc2VtYmxlci9sYW1iZGEkMSRUeXBlIiwxMjM3KSxEKDEyMzgsMSxsaSxTWiksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4hIXUoZSw4MCl9LEYoS0UsIkFsZ29yaXRobUFzc2VtYmxlci9sYW1iZGEkMiRUeXBlIiwxMjM4KSxEKDEyMzksMSxVbixzenQpLGwudGQ9ZnVuY3Rpb24oZSl7JGwodGhpcy5hLHUoZSw4MCkpfSxGKEtFLCJBbGdvcml0aG1Bc3NlbWJsZXIvbGFtYmRhJDMkVHlwZSIsMTIzOSksRCgxMjQwLDEsVW4sVEd0KSxsLnRkPWZ1bmN0aW9uKGUpe2NaZSh0aGlzLmEsdGhpcy5iLHUoZSwyMzQpKX0sRihLRSwiQWxnb3JpdGhtQXNzZW1ibGVyL2xhbWJkYSQ0JFR5cGUiLDEyNDApLEQoMTM1NSwxLE9pLEFaKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGtybih1KGUsMjM0KSx1KG4sMjM0KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihLRSwiRW51bUJhc2VkRmFjdG9yeUNvbXBhcmF0b3IiLDEzNTUpLEQoODAsNzU0LHs4MDoxfSxWcyksbC5yZz1mdW5jdGlvbigpe3JldHVybiBuZXcgSHN9LGwuYT0wLEYoS0UsIkxheW91dFByb2Nlc3NvckNvbmZpZ3VyYXRpb24iLDgwKSxEKDEwMTMsMSx7NTI3OjF9LHRNKSxsLm9nPWZ1bmN0aW9uKGUpe0s5KFkzZSxuZXcgYXp0KGUpKX07dmFyIFczZSxZM2UsSzNlO0YoUW8sIkRlcHJlY2F0ZWRMYXlvdXRPcHRpb25SZXBsYWNlciIsMTAxMyksRCgxMDE0LDEsVW4sTFopLGwudGQ9ZnVuY3Rpb24oZSl7aG9uKHUoZSwxNjApKX0sRihRbywiRGVwcmVjYXRlZExheW91dE9wdGlvblJlcGxhY2VyL2xhbWJkYSQwJFR5cGUiLDEwMTQpLEQoMTAxNSwxLFVuLE1aKSxsLnRkPWZ1bmN0aW9uKGUpe1Bobih1KGUsMTYwKSl9LEYoUW8sIkRlcHJlY2F0ZWRMYXlvdXRPcHRpb25SZXBsYWNlci9sYW1iZGEkMSRUeXBlIiwxMDE1KSxEKDEwMTYsMSx7fSxhenQpLGwuT2Q9ZnVuY3Rpb24oZSxuKXt1WmUodGhpcy5hLHUoZSwxNDYpLHUobiwzOCkpfSxGKFFvLCJEZXByZWNhdGVkTGF5b3V0T3B0aW9uUmVwbGFjZXIvbGFtYmRhJDIkVHlwZSIsMTAxNiksRCgxNDksMSx7Njg2OjEsMTQ5OjF9LGsyKSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBnbXQodGhpcyxlKX0sbC5zZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwudGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLm5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBWZyh0aGlzLmMpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkxheW91dCBBbGdvcml0aG06ICIrdGhpcy5jfTt2YXIgdjZuPUYoUW8sIkxheW91dEFsZ29yaXRobURhdGEiLDE0OSk7RCgyNjMsMSx7fSxrZyksRihRbywiTGF5b3V0QWxnb3JpdGhtRGF0YS9CdWlsZGVyIiwyNjMpLEQoMTAxNywxLHs1Mjc6MX0sRFopLGwub2c9ZnVuY3Rpb24oZSl7X3QoZSwyMzkpJiYhamUoUmUoZS5XZSgodWkoKSxRRykpKSkmJkx5bih1KGUsMzMpKX0sRihRbywiTGF5b3V0QWxnb3JpdGhtUmVzb2x2ZXIiLDEwMTcpLEQoMjI5LDEsezY4NjoxLDIyOToxfSxZeCksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwyMjkpP2huKHRoaXMuYix1KGUsMjI5KS5iKTohMX0sbC5zZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwudGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLm5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBWZyh0aGlzLmIpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkxheW91dCBUeXBlOiAiK3RoaXMuYn0sRihRbywiTGF5b3V0Q2F0ZWdvcnlEYXRhIiwyMjkpLEQoMzQ0LDEse30seG0pLEYoUW8sIkxheW91dENhdGVnb3J5RGF0YS9CdWlsZGVyIiwzNDQpLEQoODY3LDEse30sanVlKTt2YXIgb2Z0O0YoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZSIsODY3KSxEKDg2OCwxLHt9LGJYdCksRihRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL1JlZ2lzdHJ5Iiw4NjgpLEQoNDc4LDEsezQ3ODoxfSxpQiksRihRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL1JlZ2lzdHJ5L1RyaXBsZSIsNDc4KSxEKDg2OSwxLFA0LElaKSxsLnVnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBDYX0sRihRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQwJFR5cGUiLDg2OSksRCg4NzAsMSxNeSxPWiksbC52Zz1mdW5jdGlvbihlKXtyZXR1cm4gbmModShlLDgpKX0sRihRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxJFR5cGUiLDg3MCksRCg4NzksMSxQNCxQWiksbC51Zz1mdW5jdGlvbigpe3JldHVybiBuZXcgaGV9LEYoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTAkVHlwZSIsODc5KSxEKDg4MCwxLE15LEZaKSxsLnZnPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQnUodShlLDEyKSl9LEYoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTEkVHlwZSIsODgwKSxEKDg4MSwxLFA0LE5aKSxsLnVnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBaaX0sRihRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxMiRUeXBlIiw4ODEpLEQoODgyLDEsTXksQlopLGwudmc9ZnVuY3Rpb24oZSl7cmV0dXJuIFFNKHUoZSw2OCkpfSxGKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDEzJFR5cGUiLDg4MiksRCg4ODMsMSxQNCxSWiksbC51Zz1mdW5jdGlvbigpe3JldHVybiBuZXcgSHN9LEYoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTQkVHlwZSIsODgzKSxEKDg4NCwxLE15LGpaKSxsLnZnPWZ1bmN0aW9uKGUpe3JldHVybiBiJCh1KGUsNTMpKX0sRihRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxNSRUeXBlIiw4ODQpLEQoODg1LDEsUDQsJFopLGwudWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE8wfSxGKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDE2JFR5cGUiLDg4NSksRCg4ODYsMSxNeSxBYyksbC52Zz1mdW5jdGlvbihlKXtyZXR1cm4gUCQodShlLDUzKSl9LEYoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTckVHlwZSIsODg2KSxEKDg4NywxLFA0LHpaKSxsLnVnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBCcHR9LEYoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTgkVHlwZSIsODg3KSxEKDg4OCwxLE15LFFUKSxsLnZnPWZ1bmN0aW9uKGUpe3JldHVybiBWWXQodShlLDIwOCkpfSxGKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDE5JFR5cGUiLDg4OCksRCg4NzEsMSxQNCx0YyksbC51Zz1mdW5jdGlvbigpe3JldHVybiBuZXcgUHV9LEYoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMiRUeXBlIiw4NzEpLEQoODcyLDEsTXksS2MpLGwudmc9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBEUih1KGUsNzQpKX0sRihRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQzJFR5cGUiLDg3MiksRCg4NzMsMSxQNCx6aSksbC51Zz1mdW5jdGlvbigpe3JldHVybiBuZXcgT0N9LEYoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkNCRUeXBlIiw4NzMpLEQoODc0LDEsTXksekwpLGwudmc9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBMbnQodShlLDE0MikpfSxGKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDUkVHlwZSIsODc0KSxEKDg3NSwxLFA0LEhaKSxsLnVnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBDeH0sRihRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQ2JFR5cGUiLDg3NSksRCg4NzYsMSxNeSxWWiksbC52Zz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGt3dCh1KGUsMTE2KSl9LEYoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkNyRUeXBlIiw4NzYpLEQoODc3LDEsUDQsc3gpLGwudWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFl1fSxGKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDgkVHlwZSIsODc3KSxEKDg3OCwxLE15LGttKSxsLnZnPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcmVlKHUoZSwzNzMpKX0sRihRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQ5JFR5cGUiLDg3OCk7dmFyIGNmdD1LaShxSSwiSVByb3BlcnR5Iik7RCgyMywxLHszNToxLDY4NjoxLDIzOjEsMTQ2OjF9LFhlKSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBQUWUodGhpcyx1KGUsMTQ2KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMjMpP2huKHRoaXMuZix1KGUsMjMpLmYpOl90KGUsMTQ2KSYmaG4odGhpcy5mLHUoZSwxNDYpLnRnKCkpfSxsLndnPWZ1bmN0aW9uKCl7dmFyIGU7aWYoX3QodGhpcy5iLDQpKXtpZihlPU8zdCh0aGlzLmIpLGU9PW51bGwpdGhyb3cgaXQobmV3IE5vKG9kZSt0aGlzLmYrIicuIE1ha2Ugc3VyZSBpdCdzIHR5cGUgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSAiKyhQMChnUCksZ1AuaykrZDh0KSk7cmV0dXJuIGV9ZWxzZSByZXR1cm4gdGhpcy5ifSxsLnNnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC50Zz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGwubmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFZnKHRoaXMuZil9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iTGF5b3V0IE9wdGlvbjogIit0aGlzLmZ9LEYoUW8sIkxheW91dE9wdGlvbkRhdGEiLDIzKSxEKDI0LDEse30sVWUpLEYoUW8sIkxheW91dE9wdGlvbkRhdGEvQnVpbGRlciIsMjQpLEQoMTc1LDIyLHszOjEsMzU6MSwyMjoxLDE3NToxfSxPTSk7dmFyIFBkLHJwLGVhLHFuLFYyLGlwPWpyKFFvLCJMYXlvdXRPcHRpb25EYXRhL1RhcmdldCIsMTc1LEhyLHZhbixMdG4pLFgzZTtEKDI3NywyMix7MzoxLDM1OjEsMjI6MSwyNzc6MX0sT3gpO3ZhciBMYSxPbyx1cyxVNixnYyxWMSxJNyxfU3QsUTNlPWpyKFFvLCJMYXlvdXRPcHRpb25EYXRhL1R5cGUiLDI3NyxIcixLb24sTXRuKSxaM2UsV1MsU1N0O0QoMTEwLDEsezExMDoxfSxGeCxhaCx2JCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gZT09bnVsbHx8IV90KGUsMTEwKT8hMToobj11KGUsMTEwKSxGYyh0aGlzLmMsbi5jKSYmRmModGhpcy5kLG4uZCkmJkZjKHRoaXMuYixuLmIpJiZGYyh0aGlzLmEsbi5hKSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gQXoobHQoY3QoUW4sMSksRGUsMSw1LFt0aGlzLmMsdGhpcy5kLHRoaXMuYix0aGlzLmFdKSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iUmVjdFt4PSIrdGhpcy5jKyIseT0iK3RoaXMuZCsiLHc9Iit0aGlzLmIrIixoPSIrdGhpcy5hKyJdIn0sbC5hPTAsbC5iPTAsbC5jPTAsbC5kPTAsRihXSSwiRWxrUmVjdGFuZ2xlIiwxMTApLEQoOCwxLHszOjEsNDoxLDg6MSw0MTQ6MX0sQ2EsU3J0LCRlLHhvKSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBmbmUodGhpcyxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBwOCh0aGlzLmEpK0YxbihwOCh0aGlzLmIpKX0sbC5KZj1mdW5jdGlvbihlKXt2YXIgbixyLHMsbztmb3Iocz0wO3M8ZS5sZW5ndGgmJlVyZSgoUnIocyxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KHMpKSxmMWUpOykrK3M7Zm9yKG49ZS5sZW5ndGg7bj4wJiZVcmUoKFJyKG4tMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG4tMSkpLGQxZSk7KS0tbjtpZihzPj1uKXRocm93IGl0KG5ldyBGbigiVGhlIGdpdmVuIHN0cmluZyBkb2VzIG5vdCBjb250YWluIGFueSBudW1iZXJzLiIpKTtpZihvPXZ5KGUuc3Vic3RyKHMsbi1zKSxgLHw7fFxyfApgKSxvLmxlbmd0aCE9Mil0aHJvdyBpdChuZXcgRm4oIkV4YWN0bHkgdHdvIG51bWJlcnMgYXJlIGV4cGVjdGVkLCAiK28ubGVuZ3RoKyIgd2VyZSBmb3VuZC4iKSk7dHJ5e3RoaXMuYT1keShmeShvWzBdKSksdGhpcy5iPWR5KGZ5KG9bMV0pKX1jYXRjaChoKXt0aHJvdyBoPVdpKGgpLF90KGgsMTI3KT8ocj1oLGl0KG5ldyBGbihnMWUrcikpKTppdChoKX19LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iKCIrdGhpcy5hKyIsIit0aGlzLmIrIikifSxsLmE9MCxsLmI9MDt2YXIgV3M9RihXSSwiS1ZlY3RvciIsOCk7RCg3NCw2OCx7MzoxLDQ6MSwyMDoxLDI4OjEsNTI6MSwxNDoxLDY4OjEsMTU6MSw3NDoxLDQxNDoxfSxQdSxEUixNV3QpLGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGxuKHRoaXMpfSxsLkpmPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZDtzPXZ5KGUsYCx8O3xcXCh8XFwpfFxcW3xcXF18XFx7fFxcfXwgfAl8CmApLEFoKHRoaXMpO3RyeXtmb3Iocj0wLGg9MCxvPTAsZD0wO3I8cy5sZW5ndGg7KXNbcl0hPW51bGwmJmZ5KHNbcl0pLmxlbmd0aD4wJiYoaCUyPT0wP289ZHkoc1tyXSk6ZD1keShzW3JdKSxoPjAmJmglMiE9MCYmcmkodGhpcyxuZXcgJGUobyxkKSksKytoKSwrK3J9Y2F0Y2godil7dGhyb3cgdj1XaSh2KSxfdCh2LDEyNyk/KG49dixpdChuZXcgRm4oIlRoZSBnaXZlbiBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGZvcm1hdCBmb3IgdmVjdG9ycy4iK24pKSk6aXQodil9fSxsLkliPWZ1bmN0aW9uKCl7dmFyIGUsbixyO2ZvcihlPW5ldyBPbCgiKCIpLG49ZWkodGhpcywwKTtuLmIhPW4uZC5jOylyPXUodGkobiksOCksR3IoZSxyLmErIiwiK3IuYiksbi5iIT1uLmQuYyYmKGUuYSs9IjsgIik7cmV0dXJuKGUuYSs9IikiLGUpLmF9O3ZhciBBU3Q9RihXSSwiS1ZlY3RvckNoYWluIiw3NCk7RCgyNDgsMjIsezM6MSwzNToxLDIyOjEsMjQ4OjF9LGk5KTt2YXIgdWZ0LEdHLFVHLEdPLFVPLFdHLExTdD1qcihGaCwiQWxpZ25tZW50IiwyNDgsSHIsWWFuLER0biksSjNlO0QoOTc5LDEsT2gsaHR0KSxsLlFlPWZ1bmN0aW9uKGUpe2xsZShlKX07dmFyIE1TdCxsZnQsdDRlLERTdCxJU3QsZTRlLE9TdCxuNGUscjRlLFBTdCxGU3QsaTRlO0YoRmgsIkJveExheW91dGVyT3B0aW9ucyIsOTc5KSxEKDk4MCwxLHt9LHFaKSxsLiRlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IFlaLGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxGKEZoLCJCb3hMYXlvdXRlck9wdGlvbnMvQm94RmFjdG9yeSIsOTgwKSxEKDI5MSwyMix7MzoxLDM1OjEsMjI6MSwyOTE6MX0sczkpO3ZhciBXTyxoZnQsWU8sS08sWE8sZmZ0LGRmdD1qcihGaCwiQ29udGVudEFsaWdubWVudCIsMjkxLEhyLFdhbixJdG4pLHM0ZTtEKDY4NCwxLE9oLFRwKSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSx1ZGUpLCIiKSwiTGF5b3V0IEFsZ29yaXRobSIpLCJTZWxlY3QgYSBzcGVjaWZpYyBsYXlvdXQgYWxnb3JpdGhtLiIpLChVZygpLEk3KSksQWUpLHVuKChRZigpLHFuKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLGxkZSksIiIpLCJSZXNvbHZlZCBMYXlvdXQgQWxnb3JpdGhtIiksIk1ldGEgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHNlbGVjdGVkIGFsZ29yaXRobS4iKSxWMSksdjZuKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHhrdCksIiIpLCJBbGlnbm1lbnQiKSwiQWxpZ25tZW50IG9mIHRoZSBzZWxlY3RlZCBub2RlIHJlbGF0aXZlIHRvIG90aGVyIG5vZGVzOyB0aGUgZXhhY3QgbWVhbmluZyBkZXBlbmRzIG9uIHRoZSB1c2VkIGFsZ29yaXRobS4iKSxOU3QpLHVzKSxMU3QpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsRTYpLCIiKSwiQXNwZWN0IFJhdGlvIiksIlRoZSBkZXNpcmVkIGFzcGVjdCByYXRpbyBvZiB0aGUgZHJhd2luZywgdGhhdCBpcyB0aGUgcXVvdGllbnQgb2Ygd2lkdGggYnkgaGVpZ2h0LiIpLE9vKSxsYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxwOHQpLCIiKSwiQmVuZCBQb2ludHMiKSwiQSBmaXhlZCBsaXN0IG9mIGJlbmQgcG9pbnRzIGZvciB0aGUgZWRnZS4gVGhpcyBpcyB1c2VkIGJ5IHRoZSAnRml4ZWQgTGF5b3V0JyBhbGdvcml0aG0gdG8gc3BlY2lmeSBhIHByZS1kZWZpbmVkIHJvdXRpbmcgZm9yIGFuIGVkZ2UuIFRoZSB2ZWN0b3IgY2hhaW4gbXVzdCBpbmNsdWRlIHRoZSBzb3VyY2UgcG9pbnQsIGFueSBiZW5kIHBvaW50cywgYW5kIHRoZSB0YXJnZXQgcG9pbnQsIHNvIGl0IG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gcG9pbnRzLiIpLFYxKSxBU3QpLHVuKFBkKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsbUgpLCIiKSwiQ29udGVudCBBbGlnbm1lbnQiKSwiU3BlY2lmaWVzIGhvdyB0aGUgY29udGVudCBvZiBhIG5vZGUgYXJlIGFsaWduZWQuIEVhY2ggbm9kZSBjYW4gaW5kaXZpZHVhbGx5IGNvbnRyb2wgdGhlIGFsaWdubWVudCBvZiBpdHMgY29udGVudHMuIEkuZS4gaWYgYSBub2RlIHNob3VsZCBiZSBhbGlnbmVkIHRvcCBsZWZ0IGluIGl0cyBwYXJlbnQgbm9kZSwgdGhlIHBhcmVudCBub2RlIHNob3VsZCBzcGVjaWZ5IHRoYXQgb3B0aW9uLiIpLFJTdCksVTYpLGRmdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxKSSksIiIpLCJEZWJ1ZyBNb2RlIiksIldoZXRoZXIgYWRkaXRpb25hbCBkZWJ1ZyBpbmZvcm1hdGlvbiBzaGFsbCBiZSBnZW5lcmF0ZWQuIiksKE5uKCksITEpKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsVGt0KSwiIiksaTZ0KSwiT3ZlcmFsbCBkaXJlY3Rpb24gb2YgZWRnZXM6IGhvcml6b250YWwgKHJpZ2h0IC8gbGVmdCkgb3IgdmVydGljYWwgKGRvd24gLyB1cCkuIiksalN0KSx1cyksWFMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsUUkpLCIiKSwiRWRnZSBSb3V0aW5nIiksIldoYXQga2luZCBvZiBlZGdlIHJvdXRpbmcgc3R5bGUgc2hvdWxkIGJlIGFwcGxpZWQgZm9yIHRoZSBjb250ZW50IG9mIGEgcGFyZW50IG5vZGUuIEFsZ29yaXRobXMgbWF5IGFsc28gc2V0IHRoaXMgb3B0aW9uIHRvIHNpbmdsZSBlZGdlcyBpbiBvcmRlciB0byBtYXJrIHRoZW0gYXMgc3BsaW5lcy4gVGhlIGJlbmQgcG9pbnQgbGlzdCBvZiBlZGdlcyB3aXRoIHRoaXMgb3B0aW9uIHNldCB0byBTUExJTkVTIG11c3QgYmUgaW50ZXJwcmV0ZWQgYXMgY29udHJvbCBwb2ludHMgZm9yIGEgcGllY2V3aXNlIGN1YmljIHNwbGluZS4iKSxxU3QpLHVzKSxfZnQpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsQ0gpLCIiKSwiRXhwYW5kIE5vZGVzIiksIklmIGFjdGl2ZSwgbm9kZXMgYXJlIGV4cGFuZGVkIHRvIGZpbGwgdGhlIGFyZWEgb2YgdGhlaXIgcGFyZW50LiIpLCExKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsdkgpLCIiKSwiSGllcmFyY2h5IEhhbmRsaW5nIiksIkRldGVybWluZXMgd2hldGhlciBzZXBhcmF0ZSBsYXlvdXQgcnVucyBhcmUgdHJpZ2dlcmVkIGZvciBkaWZmZXJlbnQgY29tcG91bmQgbm9kZXMgaW4gYSBoaWVyYXJjaGljYWwgZ3JhcGguIFNldHRpbmcgYSBub2RlJ3MgaGllcmFyY2h5IGhhbmRsaW5nIHRvIGBJTkNMVURFX0NISUxEUkVOYCB3aWxsIGxheSBvdXQgdGhhdCBub2RlIGFuZCBhbGwgb2YgaXRzIGRlc2NlbmRhbnRzIGluIGEgc2luZ2xlIGxheW91dCBydW4sIHVudGlsIGEgZGVzY2VuZGFudCBpcyBlbmNvdW50ZXJlZCB3aGljaCBoYXMgaXRzIGhpZXJhcmNoeSBoYW5kbGluZyBzZXQgdG8gYFNFUEFSQVRFX0NISUxEUkVOYC4gSW4gZ2VuZXJhbCwgYFNFUEFSQVRFX0NISUxEUkVOYCB3aWxsIGVuc3VyZSB0aGF0IGEgbmV3IGxheW91dCBydW4gaXMgdHJpZ2dlcmVkIGZvciBhIG5vZGUgd2l0aCB0aGF0IHNldHRpbmcuIEluY2x1ZGluZyBtdWx0aXBsZSBsZXZlbHMgb2YgaGllcmFyY2h5IGluIGEgc2luZ2xlIGxheW91dCBydW4gbWF5IGFsbG93IGNyb3NzLWhpZXJhcmNoaWNhbCBlZGdlcyB0byBiZSBsYWlkIG91dCBwcm9wZXJseS4gSWYgdGhlIHJvb3Qgbm9kZSBpcyBzZXQgdG8gYElOSEVSSVRgIChvciBub3Qgc2V0IGF0IGFsbCksIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIGBTRVBBUkFURV9DSElMRFJFTmAuIiksVVN0KSx1cyksREF0KSxqaShxbixsdChjdChpcCwxKSxvZSwxNzUsMCxbZWFdKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHh2KSwiIiksIlBhZGRpbmciKSwiVGhlIHBhZGRpbmcgdG8gYmUgbGVmdCB0byBhIHBhcmVudCBlbGVtZW50J3MgYm9yZGVyIHdoZW4gcGxhY2luZyBjaGlsZCBlbGVtZW50cy4gVGhpcyBjYW4gYWxzbyBzZXJ2ZSBhcyBhbiBvdXRwdXQgb3B0aW9uIG9mIGEgbGF5b3V0IGFsZ29yaXRobSBpZiBub2RlIHNpemUgY2FsY3VsYXRpb24gaXMgc2V0dXAgYXBwcm9wcmlhdGVseS4iKSxuQXQpLFYxKSxCN3QpLGppKHFuLGx0KGN0KGlwLDEpLG9lLDE3NSwwLFtlYV0pKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsR0kpLCIiKSwiSW50ZXJhY3RpdmUiKSwiV2hldGhlciB0aGUgYWxnb3JpdGhtIHNob3VsZCBiZSBydW4gaW4gaW50ZXJhY3RpdmUgbW9kZSBmb3IgdGhlIGNvbnRlbnQgb2YgYSBwYXJlbnQgbm9kZS4gV2hhdCB0aGlzIG1lYW5zIGV4YWN0bHkgZGVwZW5kcyBvbiBob3cgdGhlIHNwZWNpZmljIGFsZ29yaXRobSBpbnRlcnByZXRzIHRoaXMgb3B0aW9uLiBVc3VhbGx5IGluIHRoZSBpbnRlcmFjdGl2ZSBtb2RlIGFsZ29yaXRobXMgdHJ5IHRvIG1vZGlmeSB0aGUgY3VycmVudCBsYXlvdXQgYXMgbGl0dGxlIGFzIHBvc3NpYmxlLiIpLCExKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsX2N0KSwiIiksImludGVyYWN0aXZlIExheW91dCIpLCJXaGV0aGVyIHRoZSBncmFwaCBzaG91bGQgYmUgY2hhbmdlYWJsZSBpbnRlcmFjdGl2ZWx5IGFuZCBieSBzZXR0aW5nIGNvbnN0cmFpbnRzIiksITEpLExhKSxScyksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxqXyksIiIpLCJPbWl0IE5vZGUgTWljcm8gTGF5b3V0IiksIk5vZGUgbWljcm8gbGF5b3V0IGNvbXByaXNlcyB0aGUgY29tcHV0YXRpb24gb2Ygbm9kZSBkaW1lbnNpb25zIChpZiByZXF1ZXN0ZWQpLCB0aGUgcGxhY2VtZW50IG9mIHBvcnRzIGFuZCB0aGVpciBsYWJlbHMsIGFuZCB0aGUgcGxhY2VtZW50IG9mIG5vZGUgbGFiZWxzLiBUaGUgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZCBpbmRlcGVuZGVudCBvZiBhbnkgc3BlY2lmaWMgbGF5b3V0IGFsZ29yaXRobSBhbmQgc2hvdWxkbid0IGhhdmUgYW55IG5lZ2F0aXZlIGltcGFjdCBvbiB0aGUgbGF5b3V0IGFsZ29yaXRobSdzIHBlcmZvcm1hbmNlIGl0c2VsZi4gWWV0LCBpZiBhbnkgdW5mb3Jlc2VlbiBiZWhhdmlvciBvY2N1cnMsIHRoaXMgb3B0aW9uIGFsbG93cyB0byBkZWFjdGl2YXRlIHRoZSBtaWNybyBsYXlvdXQuIiksITEpLExhKSxScyksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxHb3QpLCIiKSwiUG9ydCBDb25zdHJhaW50cyIpLCJEZWZpbmVzIGNvbnN0cmFpbnRzIG9mIHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9ydHMgb2YgYSBub2RlLiIpLG9BdCksdXMpLFBBdCksdW4oZWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSx5SCksIiIpLCJQb3NpdGlvbiIpLCJUaGUgcG9zaXRpb24gb2YgYSBub2RlLCBwb3J0LCBvciBsYWJlbC4gVGhpcyBpcyB1c2VkIGJ5IHRoZSAnRml4ZWQgTGF5b3V0JyBhbGdvcml0aG0gdG8gc3BlY2lmeSBhIHByZS1kZWZpbmVkIHBvc2l0aW9uLiIpLFYxKSxXcyksamkoZWEsbHQoY3QoaXAsMSksb2UsMTc1LDAsW1YyLHJwXSkpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxWSSksIiIpLCJQcmlvcml0eSIpLCJEZWZpbmVzIHRoZSBwcmlvcml0eSBvZiBhbiBvYmplY3Q7IGl0cyBtZWFuaW5nIGRlcGVuZHMgb24gdGhlIHNwZWNpZmljIGxheW91dCBhbGdvcml0aG0gYW5kIHRoZSBjb250ZXh0IHdoZXJlIGl0IGlzIHVzZWQuIiksZ2MpLGphKSxqaShlYSxsdChjdChpcCwxKSxvZSwxNzUsMCxbUGRdKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLHRIKSwiIiksIlJhbmRvbWl6YXRpb24gU2VlZCIpLCJTZWVkIHVzZWQgZm9yIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvcnMgdG8gY29udHJvbCB0aGUgbGF5b3V0IGFsZ29yaXRobS4gSWYgdGhlIHZhbHVlIGlzIDAsIHRoZSBzZWVkIHNoYWxsIGJlIGRldGVybWluZWQgcHNldWRvLXJhbmRvbWx5IChlLmcuIGZyb20gdGhlIHN5c3RlbSB0aW1lKS4iKSxnYyksamEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsUl8pLCIiKSwiU2VwYXJhdGUgQ29ubmVjdGVkIENvbXBvbmVudHMiKSwiV2hldGhlciBlYWNoIGNvbm5lY3RlZCBjb21wb25lbnQgc2hvdWxkIGJlIHByb2Nlc3NlZCBzZXBhcmF0ZWx5LiIpLExhKSxScyksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxPa3QpLCIiKSwiSnVuY3Rpb24gUG9pbnRzIiksIlRoaXMgb3B0aW9uIGlzIG5vdCB1c2VkIGFzIG9wdGlvbiwgYnV0IGFzIG91dHB1dCBvZiB0aGUgbGF5b3V0IGFsZ29yaXRobXMuIEl0IGlzIGF0dGFjaGVkIHRvIGVkZ2VzIGFuZCBkZXRlcm1pbmVzIHRoZSBwb2ludHMgd2hlcmUganVuY3Rpb24gc3ltYm9scyBzaG91bGQgYmUgZHJhd24gaW4gb3JkZXIgdG8gcmVwcmVzZW50IGh5cGVyZWRnZXMgd2l0aCBvcnRob2dvbmFsIHJvdXRpbmcuIFdoZXRoZXIgc3VjaCBwb2ludHMgYXJlIGNvbXB1dGVkIGRlcGVuZHMgb24gdGhlIGNob3NlbiBsYXlvdXQgYWxnb3JpdGhtIGFuZCBlZGdlIHJvdXRpbmcgc3R5bGUuIFRoZSBwb2ludHMgYXJlIHB1dCBpbnRvIHRoZSB2ZWN0b3IgY2hhaW4gd2l0aCBubyBzcGVjaWZpYyBvcmRlci4iKSxZU3QpLFYxKSxBU3QpLHVuKFBkKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsTmt0KSwiIiksIkNvbW1lbnQgQm94IiksIldoZXRoZXIgdGhlIG5vZGUgc2hvdWxkIGJlIHJlZ2FyZGVkIGFzIGEgY29tbWVudCBib3ggaW5zdGVhZCBvZiBhIHJlZ3VsYXIgbm9kZS4gSW4gdGhhdCBjYXNlIGl0cyBwbGFjZW1lbnQgc2hvdWxkIGJlIHNpbWlsYXIgdG8gaG93IGxhYmVscyBhcmUgaGFuZGxlZC4gQW55IGVkZ2VzIGluY2lkZW50IHRvIGEgY29tbWVudCBib3ggc3BlY2lmeSB0byB3aGljaCBncmFwaCBlbGVtZW50cyB0aGUgY29tbWVudCBpcyByZWxhdGVkLiIpLCExKSxMYSksUnMpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsQmt0KSwiIiksIkh5cGVybm9kZSIpLCJXaGV0aGVyIHRoZSBub2RlIHNob3VsZCBiZSBoYW5kbGVkIGFzIGEgaHlwZXJub2RlLiIpLCExKSxMYSksUnMpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsVXhuKSwiIiksIkxhYmVsIE1hbmFnZXIiKSwiTGFiZWwgbWFuYWdlcnMgY2FuIHNob3J0ZW4gbGFiZWxzIHVwb24gYSBsYXlvdXQgYWxnb3JpdGhtJ3MgcmVxdWVzdC4iKSxWMSksRTZuKSxqaShxbixsdChjdChpcCwxKSxvZSwxNzUsMCxbcnBdKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGprdCksIiIpLCJNYXJnaW5zIiksIk1hcmdpbnMgZGVmaW5lIGFkZGl0aW9uYWwgc3BhY2UgYXJvdW5kIHRoZSBhY3R1YWwgYm91bmRzIG9mIGEgZ3JhcGggZWxlbWVudC4gRm9yIGluc3RhbmNlLCBwb3J0cyBvciBsYWJlbHMgYmVpbmcgcGxhY2VkIG9uIHRoZSBvdXRzaWRlIG9mIGEgbm9kZSdzIGJvcmRlciBtaWdodCBpbnRyb2R1Y2Ugc3VjaCBhIG1hcmdpbi4gVGhlIG1hcmdpbiBpcyB1c2VkIHRvIGd1YXJhbnRlZSBub24tb3ZlcmxhcCBvZiBvdGhlciBncmFwaCBlbGVtZW50cyB3aXRoIHRob3NlIHBvcnRzIG9yIGxhYmVscy4iKSxLU3QpLFYxKSxON3QpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsbWt0KSwiIiksIk5vIExheW91dCIpLCJObyBsYXlvdXQgaXMgZG9uZSBmb3IgdGhlIGFzc29jaWF0ZWQgZWxlbWVudC4gVGhpcyBpcyB1c2VkIHRvIG1hcmsgcGFydHMgb2YgYSBkaWFncmFtIHRvIGF2b2lkIHRoZWlyIGluY2x1c2lvbiBpbiB0aGUgbGF5b3V0IGdyYXBoLCBvciB0byBtYXJrIHBhcnRzIG9mIHRoZSBsYXlvdXQgZ3JhcGggdG8gcHJldmVudCBsYXlvdXQgZW5naW5lcyBmcm9tIHByb2Nlc3NpbmcgdGhlbS4gSWYgeW91IHdpc2ggdG8gZXhjbHVkZSB0aGUgY29udGVudHMgb2YgYSBjb21wb3VuZCBub2RlIGZyb20gYXV0b21hdGljIGxheW91dCwgd2hpbGUgdGhlIG5vZGUgaXRzZWxmIGlzIHN0aWxsIGNvbnNpZGVyZWQgb24gaXRzIG93biBsYXllciwgdXNlIHRoZSAnRml4ZWQgTGF5b3V0JyBhbGdvcml0aG0gZm9yIHRoYXQgbm9kZS4iKSwhMSksTGEpLFJzKSxqaShlYSxsdChjdChpcCwxKSxvZSwxNzUsMCxbUGQsVjIscnBdKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGhkZSksIiIpLCJTY2FsZSBGYWN0b3IiKSwiVGhlIHNjYWxpbmcgZmFjdG9yIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbm9kZSBpbiByZWN1cnNpdmUgbGF5b3V0LiBJdCBjYXVzZXMgdGhlIGNvcnJlc3BvbmRpbmcgbm9kZSdzIHNpemUgdG8gYmUgYWRqdXN0ZWQsIGFuZCBpdHMgcG9ydHMgYW5kIGxhYmVscyB0byBiZSBzaXplZCBhbmQgcGxhY2VkIGFjY29yZGluZ2x5IGFmdGVyIHRoZSBsYXlvdXQgb2YgdGhhdCBub2RlIGhhcyBiZWVuIGRldGVybWluZWQgKGFuZCBiZWZvcmUgdGhlIG5vZGUgaXRzZWxmIGFuZCBpdHMgc2libGluZ3MgYXJlIGFycmFuZ2VkKS4gVGhlIHNjYWxpbmcgaXMgbm90IHJldmVydGVkIGFmdGVyd2FyZHMsIHNvIHRoZSByZXN1bHRpbmcgbGF5b3V0IGdyYXBoIGNvbnRhaW5zIHRoZSBhZGp1c3RlZCBzaXplIGFuZCBwb3NpdGlvbiBkYXRhLiBUaGlzIG9wdGlvbiBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBpZiAnTGF5b3V0IEhpZXJhcmNoeScgaXMgc2V0LiIpLDEpLE9vKSxsYSksdW4oZWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxmZGUpLCIiKSwiQW5pbWF0ZSIpLCJXaGV0aGVyIHRoZSBzaGlmdCBmcm9tIHRoZSBvbGQgbGF5b3V0IHRvIHRoZSBuZXcgY29tcHV0ZWQgbGF5b3V0IHNoYWxsIGJlIGFuaW1hdGVkLiIpLCEwKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZGRlKSwiIiksIkFuaW1hdGlvbiBUaW1lIEZhY3RvciIpLCJGYWN0b3IgZm9yIGNvbXB1dGF0aW9uIG9mIGFuaW1hdGlvbiB0aW1lLiBUaGUgaGlnaGVyIHRoZSB2YWx1ZSwgdGhlIGxvbmdlciB0aGUgYW5pbWF0aW9uIHRpbWUuIElmIHRoZSB2YWx1ZSBpcyAwLCB0aGUgcmVzdWx0aW5nIHRpbWUgaXMgYWx3YXlzIGVxdWFsIHRvIHRoZSBtaW5pbXVtIGRlZmluZWQgYnkgJ01pbmltYWwgQW5pbWF0aW9uIFRpbWUnLiIpLHBlKDEwMCkpLGdjKSxqYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxnZGUpLCIiKSwiTGF5b3V0IEFuY2VzdG9ycyIpLCJXaGV0aGVyIHRoZSBoaWVyYXJjaHkgbGV2ZWxzIG9uIHRoZSBwYXRoIGZyb20gdGhlIHNlbGVjdGVkIGVsZW1lbnQgdG8gdGhlIHJvb3Qgb2YgdGhlIGRpYWdyYW0gc2hhbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGxheW91dCBwcm9jZXNzLiIpLCExKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUscGRlKSwiIiksIk1heGltYWwgQW5pbWF0aW9uIFRpbWUiKSwiVGhlIG1heGltYWwgdGltZSBmb3IgYW5pbWF0aW9ucywgaW4gbWlsbGlzZWNvbmRzLiIpLHBlKDRlMykpLGdjKSxqYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxiZGUpLCIiKSwiTWluaW1hbCBBbmltYXRpb24gVGltZSIpLCJUaGUgbWluaW1hbCB0aW1lIGZvciBhbmltYXRpb25zLCBpbiBtaWxsaXNlY29uZHMuIikscGUoNDAwKSksZ2MpLGphKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHdkZSksIiIpLCJQcm9ncmVzcyBCYXIiKSwiV2hldGhlciBhIHByb2dyZXNzIGJhciBzaGFsbCBiZSBkaXNwbGF5ZWQgZHVyaW5nIGxheW91dCBjb21wdXRhdGlvbnMuIiksITEpLExhKSxScyksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSx2ZGUpLCIiKSwiVmFsaWRhdGUgR3JhcGgiKSwiV2hldGhlciB0aGUgZ3JhcGggc2hhbGwgYmUgdmFsaWRhdGVkIGJlZm9yZSBhbnkgbGF5b3V0IGFsZ29yaXRobSBpcyBhcHBsaWVkLiBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGFuZCBhdCBsZWFzdCBvbmUgZXJyb3IgaXMgZm91bmQsIHRoZSBsYXlvdXQgcHJvY2VzcyBpcyBhYm9ydGVkIGFuZCBhIG1lc3NhZ2UgaXMgc2hvd24gdG8gdGhlIHVzZXIuIiksITEpLExhKSxScyksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxtZGUpLCIiKSwiVmFsaWRhdGUgT3B0aW9ucyIpLCJXaGV0aGVyIGxheW91dCBvcHRpb25zIHNoYWxsIGJlIHZhbGlkYXRlZCBiZWZvcmUgYW55IGxheW91dCBhbGdvcml0aG0gaXMgYXBwbGllZC4gSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBhbmQgYXQgbGVhc3Qgb25lIGVycm9yIGlzIGZvdW5kLCB0aGUgbGF5b3V0IHByb2Nlc3MgaXMgYWJvcnRlZCBhbmQgYSBtZXNzYWdlIGlzIHNob3duIHRvIHRoZSB1c2VyLiIpLCEwKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUseWRlKSwiIiksIlpvb20gdG8gRml0IiksIldoZXRoZXIgdGhlIHpvb20gbGV2ZWwgc2hhbGwgYmUgc2V0IHRvIHZpZXcgdGhlIHdob2xlIGRpYWdyYW0gYWZ0ZXIgbGF5b3V0LiIpLCExKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZzh0KSwiYm94IiksIkJveCBMYXlvdXQgTW9kZSIpLCJDb25maWd1cmVzIHRoZSBwYWNraW5nIG1vZGUgdXNlZCBieSB0aGUge0BsaW5rIEJveExheW91dFByb3ZpZGVyfS4gSWYgU0lNUExFIGlzIG5vdCByZXF1aXJlZCAobmVpdGhlciBwcmlvcml0aWVzIGFyZSB1c2VkIG5vciB0aGUgaW50ZXJhY3RpdmUgbW9kZSksIEdST1VQX0RFQyBjYW4gaW1wcm92ZSB0aGUgcGFja2luZyBhbmQgZGVjcmVhc2UgdGhlIGFyZWEuIEdST1VQX01JWEVEIGFuZCBHUk9VUF9JTkMgbWF5LCBpbiB2ZXJ5IHNwZWNpZmljIHNjZW5hcmlvcywgd29yayBiZXR0ZXIuIiksQlN0KSx1cyksJEF0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLG9rdCksUjEpLCJDb21tZW50IENvbW1lbnQgU3BhY2luZyIpLCJTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGEgY29tbWVudCBib3ggYW5kIG90aGVyIGNvbW1lbnQgYm94ZXMgY29ubmVjdGVkIHRvIHRoZSBzYW1lIG5vZGUuIFRoZSBzcGFjZSBsZWZ0IGJldHdlZW4gY29tbWVudCBib3hlcyBvZiBkaWZmZXJlbnQgbm9kZXMgaXMgY29udHJvbGxlZCBieSB0aGUgbm9kZS1ub2RlIHNwYWNpbmcuIiksMTApLE9vKSxsYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxja3QpLFIxKSwiQ29tbWVudCBOb2RlIFNwYWNpbmciKSwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBhIG5vZGUgYW5kIGl0cyBjb25uZWN0ZWQgY29tbWVudCBib3hlcy4gVGhlIHNwYWNlIGxlZnQgYmV0d2VlbiBhIG5vZGUgYW5kIHRoZSBjb21tZW50cyBvZiBhbm90aGVyIG5vZGUgaXMgY29udHJvbGxlZCBieSB0aGUgbm9kZS1ub2RlIHNwYWNpbmcuIiksMTApLE9vKSxsYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxqb3QpLFIxKSwiQ29tcG9uZW50cyBTcGFjaW5nIiksIlNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gcGFpcnMgb2YgY29ubmVjdGVkIGNvbXBvbmVudHMuIFRoaXMgb3B0aW9uIGlzIG9ubHkgcmVsZXZhbnQgaWYgJ3NlcGFyYXRlQ29ubmVjdGVkQ29tcG9uZW50cycgaXMgYWN0aXZhdGVkLiIpLDIwKSxPbyksbGEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsdWt0KSxSMSksIkVkZ2UgU3BhY2luZyIpLCJTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGFueSB0d28gZWRnZXMuIE5vdGUgdGhhdCB3aGlsZSB0aGlzIGNhbiBzb21ld2hhdCBlYXNpbHkgYmUgc2F0aXNmaWVkIGZvciB0aGUgc2VnbWVudHMgb2Ygb3J0aG9nb25hbGx5IGRyYXduIGVkZ2VzLCBpdCBpcyBoYXJkZXIgZm9yIGdlbmVyYWwgcG9seWxpbmVzIG9yIHNwbGluZXMuIiksMTApLE9vKSxsYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxWb3QpLFIxKSwiRWRnZSBMYWJlbCBTcGFjaW5nIiksIlRoZSBtaW5pbWFsIGRpc3RhbmNlIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGEgbGFiZWwgYW5kIHRoZSBlZGdlIGl0IGlzIGFzc29jaWF0ZWQgd2l0aC4gTm90ZSB0aGF0IHRoZSBwbGFjZW1lbnQgb2YgYSBsYWJlbCBpcyBpbmZsdWVuY2VkIGJ5IHRoZSAnZWRnZWxhYmVscy5wbGFjZW1lbnQnIG9wdGlvbi4iKSwyKSxPbyksbGEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsbGt0KSxSMSksIkVkZ2UgTm9kZSBTcGFjaW5nIiksIlNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gbm9kZXMgYW5kIGVkZ2VzLiIpLDEwKSxPbyksbGEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsaGt0KSxSMSksIkxhYmVsIFNwYWNpbmciKSwiRGV0ZXJtaW5lcyB0aGUgYW1vdW50IG9mIHNwYWNlIHRvIGJlIGxlZnQgYmV0d2VlbiB0d28gbGFiZWxzIG9mIHRoZSBzYW1lIGdyYXBoIGVsZW1lbnQuIiksMCksT28pLGxhKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGdrdCksUjEpLCJMYWJlbCBOb2RlIFNwYWNpbmciKSwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBsYWJlbHMgYW5kIHRoZSBib3JkZXIgb2Ygbm9kZSB0aGV5IGFyZSBhc3NvY2lhdGVkIHdpdGguIE5vdGUgdGhhdCB0aGUgcGxhY2VtZW50IG9mIGEgbGFiZWwgaXMgaW5mbHVlbmNlZCBieSB0aGUgJ25vZGVsYWJlbHMucGxhY2VtZW50JyBvcHRpb24uIiksNSksT28pLGxhKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGZrdCksUjEpLCJIb3Jpem9udGFsIHNwYWNpbmcgYmV0d2VlbiBMYWJlbCBhbmQgUG9ydCIpLCJIb3Jpem9udGFsIHNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gbGFiZWxzIGFuZCB0aGUgcG9ydHMgdGhleSBhcmUgYXNzb2NpYXRlZCB3aXRoLiBOb3RlIHRoYXQgdGhlIHBsYWNlbWVudCBvZiBhIGxhYmVsIGlzIGluZmx1ZW5jZWQgYnkgdGhlICdwb3J0bGFiZWxzLnBsYWNlbWVudCcgb3B0aW9uLiIpLDEpLE9vKSxsYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxka3QpLFIxKSwiVmVydGljYWwgc3BhY2luZyBiZXR3ZWVuIExhYmVsIGFuZCBQb3J0IiksIlZlcnRpY2FsIHNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gbGFiZWxzIGFuZCB0aGUgcG9ydHMgdGhleSBhcmUgYXNzb2NpYXRlZCB3aXRoLiBOb3RlIHRoYXQgdGhlIHBsYWNlbWVudCBvZiBhIGxhYmVsIGlzIGluZmx1ZW5jZWQgYnkgdGhlICdwb3J0bGFiZWxzLnBsYWNlbWVudCcgb3B0aW9uLiIpLDEpLE9vKSxsYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxDeSksUjEpLCJOb2RlIFNwYWNpbmciKSwiVGhlIG1pbmltYWwgZGlzdGFuY2UgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gZWFjaCB0d28gbm9kZXMuIiksMjApLE9vKSxsYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxwa3QpLFIxKSwiTm9kZSBTZWxmIExvb3AgU3BhY2luZyIpLCJTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGEgbm9kZSBhbmQgaXRzIHNlbGYgbG9vcHMuIiksMTApLE9vKSxsYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxia3QpLFIxKSwiUG9ydCBTcGFjaW5nIiksIlNwYWNpbmcgYmV0d2VlbiBwYWlycyBvZiBwb3J0cyBvZiB0aGUgc2FtZSBub2RlLiIpLDEwKSxPbyksbGEpLGppKHFuLGx0KGN0KGlwLDEpLG9lLDE3NSwwLFtlYV0pKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsd2t0KSxSMSksIkluZGl2aWR1YWwgU3BhY2luZyIpLCJBbGxvd3MgdG8gc3BlY2lmeSBpbmRpdmlkdWFsIHNwYWNpbmcgdmFsdWVzIGZvciBncmFwaCBlbGVtZW50cyB0aGF0IHNoYWxsIGJlIGRpZmZlcmVudCBmcm9tIHRoZSB2YWx1ZSBzcGVjaWZpZWQgZm9yIHRoZSBlbGVtZW50J3MgcGFyZW50LiIpLFYxKSwkNGUpLGppKGVhLGx0KGN0KGlwLDEpLG9lLDE3NSwwLFtQZCxWMixycF0pKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsJGt0KSxSMSksIkFkZGl0aW9uYWwgUG9ydCBTcGFjZSIpLCJBZGRpdGlvbmFsIHNwYWNlIGFyb3VuZCB0aGUgc2V0cyBvZiBwb3J0cyBvbiBlYWNoIG5vZGUgc2lkZS4gRm9yIGVhY2ggc2lkZSBvZiBhIG5vZGUsIHRoaXMgb3B0aW9uIGNhbiByZXNlcnZlIGFkZGl0aW9uYWwgc3BhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgcG9ydHMgb24gZWFjaCBzaWRlLiBGb3IgZXhhbXBsZSwgYSB0b3Agc3BhY2luZyBvZiAyMCBtYWtlcyBzdXJlIHRoYXQgdGhlIGZpcnN0IHBvcnQgb24gdGhlIHdlc3Rlcm4gYW5kIGVhc3Rlcm4gc2lkZSBpcyAyMCB1bml0cyBhd2F5IGZyb20gdGhlIG5vcnRoZXJuIGJvcmRlci4iKSx3QXQpLFYxKSxON3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsQ2N0KSxFZGUpLCJMYXlvdXQgUGFydGl0aW9uIiksIlBhcnRpdGlvbiB0byB3aGljaCB0aGUgbm9kZSBiZWxvbmdzLiBUaGlzIHJlcXVpcmVzIExheW91dCBQYXJ0aXRpb25pbmcgdG8gYmUgYWN0aXZlLiBOb2RlcyB3aXRoIGxvd2VyIHBhcnRpdGlvbiBJRHMgd2lsbCBhcHBlYXIgdG8gdGhlIGxlZnQgb2Ygbm9kZXMgd2l0aCBoaWdoZXIgcGFydGl0aW9uIElEcyAoYXNzdW1pbmcgYSBsZWZ0LXRvLXJpZ2h0IGxheW91dCBkaXJlY3Rpb24pLiIpLGdjKSxqYSksamkocW4sbHQoY3QoaXAsMSksb2UsMTc1LDAsW2VhXSkpKSkpLGNhKGUsQ2N0LFRjdCxkNGUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxUY3QpLEVkZSksIkxheW91dCBQYXJ0aXRpb25pbmciKSwiV2hldGhlciB0byBhY3RpdmF0ZSBwYXJ0aXRpb25lZCBsYXlvdXQuIFRoaXMgd2lsbCBhbGxvdyB0byBncm91cCBub2RlcyB0aHJvdWdoIHRoZSBMYXlvdXQgUGFydGl0aW9uIG9wdGlvbi4gYSBwYWlyIG9mIG5vZGVzIHdpdGggZGlmZmVyZW50IHBhcnRpdGlvbiBpbmRpY2VzIGlzIHRoZW4gcGxhY2VkIHN1Y2ggdGhhdCB0aGUgbm9kZSB3aXRoIGxvd2VyIGluZGV4IGlzIHBsYWNlZCB0byB0aGUgbGVmdCBvZiB0aGUgb3RoZXIgbm9kZSAod2l0aCBsZWZ0LXRvLXJpZ2h0IGxheW91dCBkaXJlY3Rpb24pLiBEZXBlbmRpbmcgb24gdGhlIGxheW91dCBhbGdvcml0aG0sIHRoaXMgbWF5IG9ubHkgYmUgZ3VhcmFudGVlZCB0byB3b3JrIGlmIGFsbCBub2RlcyBoYXZlIGEgbGF5b3V0IHBhcnRpdGlvbiBjb25maWd1cmVkLCBvciBhdCBsZWFzdCBpZiBlZGdlcyB0aGF0IGNyb3NzIHBhcnRpdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIGEgcGFydGl0aW9uLWNyb3NzaW5nIGN5Y2xlLiIpLHJBdCksTGEpLFJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLENrdCksVGRlKSwiTm9kZSBMYWJlbCBQYWRkaW5nIiksIkRlZmluZSBwYWRkaW5nIGZvciBub2RlIGxhYmVscyB0aGF0IGFyZSBwbGFjZWQgaW5zaWRlIG9mIGEgbm9kZS4iKSxRU3QpLFYxKSxCN3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsVUUpLFRkZSksIk5vZGUgTGFiZWwgUGxhY2VtZW50IiksIkhpbnRzIGZvciB3aGVyZSBub2RlIGxhYmVscyBhcmUgdG8gYmUgcGxhY2VkOyBpZiBlbXB0eSwgdGhlIG5vZGUgbGFiZWwncyBwb3NpdGlvbiBpcyBub3QgbW9kaWZpZWQuIiksWlN0KSxVNiksbG8pLGppKGVhLGx0KGN0KGlwLDEpLG9lLDE3NSwwLFtycF0pKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsQWt0KSxTSCksIlBvcnQgQWxpZ25tZW50IiksIkRlZmluZXMgdGhlIGRlZmF1bHQgcG9ydCBkaXN0cmlidXRpb24gZm9yIGEgbm9kZS4gTWF5IGJlIG92ZXJyaWRkZW4gZm9yIGVhY2ggc2lkZSBpbmRpdmlkdWFsbHkuIiksc0F0KSx1cyksdEEpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsTGt0KSxTSCksIlBvcnQgQWxpZ25tZW50IChOb3J0aCkiKSwiRGVmaW5lcyBob3cgcG9ydHMgb24gdGhlIG5vcnRoZXJuIHNpZGUgYXJlIHBsYWNlZCwgb3ZlcnJpZGluZyB0aGUgbm9kZSdzIGdlbmVyYWwgcG9ydCBhbGlnbm1lbnQuIiksdXMpLHRBKSx1bihlYSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLE1rdCksU0gpLCJQb3J0IEFsaWdubWVudCAoU291dGgpIiksIkRlZmluZXMgaG93IHBvcnRzIG9uIHRoZSBzb3V0aGVybiBzaWRlIGFyZSBwbGFjZWQsIG92ZXJyaWRpbmcgdGhlIG5vZGUncyBnZW5lcmFsIHBvcnQgYWxpZ25tZW50LiIpLHVzKSx0QSksdW4oZWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxEa3QpLFNIKSwiUG9ydCBBbGlnbm1lbnQgKFdlc3QpIiksIkRlZmluZXMgaG93IHBvcnRzIG9uIHRoZSB3ZXN0ZXJuIHNpZGUgYXJlIHBsYWNlZCwgb3ZlcnJpZGluZyB0aGUgbm9kZSdzIGdlbmVyYWwgcG9ydCBhbGlnbm1lbnQuIiksdXMpLHRBKSx1bihlYSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLElrdCksU0gpLCJQb3J0IEFsaWdubWVudCAoRWFzdCkiKSwiRGVmaW5lcyBob3cgcG9ydHMgb24gdGhlIGVhc3Rlcm4gc2lkZSBhcmUgcGxhY2VkLCBvdmVycmlkaW5nIHRoZSBub2RlJ3MgZ2VuZXJhbCBwb3J0IGFsaWdubWVudC4iKSx1cyksdEEpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsRDQpLEdjdCksIk5vZGUgU2l6ZSBDb25zdHJhaW50cyIpLCJXaGF0IHNob3VsZCBiZSB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBjYWxjdWxhdGluZyBhIG5vZGUncyBzaXplLiBFbXB0eSBzaXplIGNvbnN0cmFpbnRzIHNwZWNpZnkgdGhhdCBhIG5vZGUncyBzaXplIGlzIGFscmVhZHkgZml4ZWQgYW5kIHNob3VsZCBub3QgYmUgY2hhbmdlZC4iKSxKU3QpLFU2KSxyQSksdW4oZWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxUNiksR2N0KSwiTm9kZSBTaXplIE9wdGlvbnMiKSwiT3B0aW9ucyBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBzaXplIGNvbnN0cmFpbnRzIHNldCBvbiBhIG5vZGUuIEVhY2ggbWVtYmVyIG9mIHRoZSBzZXQgc3BlY2lmaWVzIHNvbWV0aGluZyB0aGF0IHNob3VsZCBiZSB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBjYWxjdWxhdGluZyBub2RlIHNpemVzLiBUaGUgZW1wdHkgc2V0IGNvcnJlc3BvbmRzIHRvIG5vIGZ1cnRoZXIgbW9kaWZpY2F0aW9ucy4iKSxlQXQpLFU2KSxOQXQpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsQzYpLEdjdCksIk5vZGUgU2l6ZSBNaW5pbXVtIiksIlRoZSBtaW5pbWFsIHNpemUgdG8gd2hpY2ggYSBub2RlIGNhbiBiZSByZWR1Y2VkLiIpLHRBdCksVjEpLFdzKSx1bihlYSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEVjdCksR2N0KSwiRml4ZWQgR3JhcGggU2l6ZSIpLCJCeSBkZWZhdWx0LCB0aGUgZml4ZWQgbGF5b3V0IHByb3ZpZGVyIHdpbGwgZW5sYXJnZSBhIGdyYXBoIHVudGlsIGl0IGlzIGxhcmdlIGVub3VnaCB0byBjb250YWluIGl0cyBjaGlsZHJlbi4gSWYgdGhpcyBvcHRpb24gaXMgc2V0LCBpdCB3b24ndCBkbyBzby4iKSwhMSksTGEpLFJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFBrdCksa2N0KSwiRWRnZSBMYWJlbCBQbGFjZW1lbnQiKSwiR2l2ZXMgYSBoaW50IG9uIHdoZXJlIHRvIHB1dCBlZGdlIGxhYmVscy4iKSwkU3QpLHVzKSxtQXQpLHVuKHJwKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZUgpLGtjdCksIklubGluZSBFZGdlIExhYmVscyIpLCJJZiB0cnVlLCBhbiBlZGdlIGxhYmVsIGlzIHBsYWNlZCBkaXJlY3RseSBvbiBpdHMgZWRnZS4gTWF5IG9ubHkgYXBwbHkgdG8gY2VudGVyIGVkZ2UgbGFiZWxzLiBUaGlzIGtpbmQgb2YgbGFiZWwgcGxhY2VtZW50IGlzIG9ubHkgYWR2aXNhYmxlIGlmIHRoZSBsYWJlbCdzIHJlbmRlcmluZyBpcyBzdWNoIHRoYXQgaXQgaXMgbm90IGNyb3NzZWQgYnkgaXRzIGVkZ2UgYW5kIHRodXMgc3RheXMgbGVnaWJsZS4iKSwhMSksTGEpLFJzKSx1bihycCkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLFd4biksImZvbnQiKSwiRm9udCBOYW1lIiksIkZvbnQgbmFtZSB1c2VkIGZvciBhIGxhYmVsLiIpLEk3KSxBZSksdW4ocnApKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSx4ZGUpLCJmb250IiksIkZvbnQgU2l6ZSIpLCJGb250IHNpemUgdXNlZCBmb3IgYSBsYWJlbC4iKSxnYyksamEpLHVuKHJwKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsUmt0KSxVY3QpLCJQb3J0IEFuY2hvciBPZmZzZXQiKSwiVGhlIG9mZnNldCB0byB0aGUgcG9ydCBwb3NpdGlvbiB3aGVyZSBjb25uZWN0aW9ucyBzaGFsbCBiZSBhdHRhY2hlZC4iKSxWMSksV3MpLHVuKFYyKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsRmt0KSxVY3QpLCJQb3J0IEluZGV4IiksIlRoZSBpbmRleCBvZiBhIHBvcnQgaW4gdGhlIGZpeGVkIG9yZGVyIGFyb3VuZCBhIG5vZGUuIFRoZSBvcmRlciBpcyBhc3N1bWVkIGFzIGNsb2Nrd2lzZSwgc3RhcnRpbmcgd2l0aCB0aGUgbGVmdG1vc3QgcG9ydCBvbiB0aGUgdG9wIHNpZGUuIFRoaXMgb3B0aW9uIG11c3QgYmUgc2V0IGlmICdQb3J0IENvbnN0cmFpbnRzJyBpcyBzZXQgdG8gRklYRURfT1JERVIgYW5kIG5vIHNwZWNpZmljIHBvc2l0aW9ucyBhcmUgZ2l2ZW4gZm9yIHRoZSBwb3J0cy4gQWRkaXRpb25hbGx5LCB0aGUgb3B0aW9uICdQb3J0IFNpZGUnIG11c3QgYmUgZGVmaW5lZCBpbiB0aGlzIGNhc2UuIiksZ2MpLGphKSx1bihWMikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHlrdCksVWN0KSwiUG9ydCBTaWRlIiksIlRoZSBzaWRlIG9mIGEgbm9kZSBvbiB3aGljaCBhIHBvcnQgaXMgc2l0dWF0ZWQuIFRoaXMgb3B0aW9uIG11c3QgYmUgc2V0IGlmICdQb3J0IENvbnN0cmFpbnRzJyBpcyBzZXQgdG8gRklYRURfU0lERSBvciBGSVhFRF9PUkRFUiBhbmQgbm8gc3BlY2lmaWMgcG9zaXRpb25zIGFyZSBnaXZlbiBmb3IgdGhlIHBvcnRzLiIpLGxBdCksdXMpLFhhKSx1bihWMikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLHZrdCksVWN0KSwiUG9ydCBCb3JkZXIgT2Zmc2V0IiksIlRoZSBvZmZzZXQgb2YgcG9ydHMgb24gdGhlIG5vZGUgYm9yZGVyLiBXaXRoIGEgcG9zaXRpdmUgb2Zmc2V0IHRoZSBwb3J0IGlzIG1vdmVkIG91dHNpZGUgb2YgdGhlIG5vZGUsIHdoaWxlIHdpdGggYSBuZWdhdGl2ZSBvZmZzZXQgdGhlIHBvcnQgaXMgbW92ZWQgdG93YXJkcyB0aGUgaW5zaWRlLiBBbiBvZmZzZXQgb2YgMCBtZWFucyB0aGF0IHRoZSBwb3J0IGlzIHBsYWNlZCBkaXJlY3RseSBvbiB0aGUgbm9kZSBib3JkZXIsIGkuZS4gaWYgdGhlIHBvcnQgc2lkZSBpcyBub3J0aCwgdGhlIHBvcnQncyBzb3V0aCBib3JkZXIgdG91Y2hlcyB0aGUgbm9kZXMncyBub3J0aCBib3JkZXI7IGlmIHRoZSBwb3J0IHNpZGUgaXMgZWFzdCwgdGhlIHBvcnQncyB3ZXN0IGJvcmRlciB0b3VjaGVzIHRoZSBub2RlcydzIGVhc3QgYm9yZGVyOyBpZiB0aGUgcG9ydCBzaWRlIGlzIHNvdXRoLCB0aGUgcG9ydCdzIG5vcnRoIGJvcmRlciB0b3VjaGVzIHRoZSBub2RlJ3Mgc291dGggYm9yZGVyOyBpZiB0aGUgcG9ydCBzaWRlIGlzIHdlc3QsIHRoZSBwb3J0J3MgZWFzdCBib3JkZXIgdG91Y2hlcyB0aGUgbm9kZSdzIHdlc3QgYm9yZGVyLiIpLE9vKSxsYSksdW4oVjIpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxXRSksYjh0KSwiUG9ydCBMYWJlbCBQbGFjZW1lbnQiKSwiRGVjaWRlcyBvbiBhIHBsYWNlbWVudCBtZXRob2QgZm9yIHBvcnQgbGFiZWxzOyBpZiBlbXB0eSwgdGhlIG5vZGUgbGFiZWwncyBwb3NpdGlvbiBpcyBub3QgbW9kaWZpZWQuIiksY0F0KSxVNiksZVUpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsX2t0KSxiOHQpLCJQb3J0IExhYmVscyBOZXh0IHRvIFBvcnQiKSwiVXNlICdwb3J0TGFiZWxzLnBsYWNlbWVudCc6IE5FWFRfVE9fUE9SVF9PRl9QT1NTSUJMRS4iKSwhMSksTGEpLFJzKSx1bihlYSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFNrdCksYjh0KSwiVHJlYXQgUG9ydCBMYWJlbHMgYXMgR3JvdXAiKSwiSWYgdGhpcyBvcHRpb24gaXMgdHJ1ZSAoZGVmYXVsdCksIHRoZSBsYWJlbHMgb2YgYSBwb3J0IHdpbGwgYmUgdHJlYXRlZCBhcyBhIGdyb3VwIHdoZW4gaXQgY29tZXMgdG8gY2VudGVyaW5nIHRoZW0gbmV4dCB0byB0aGVpciBwb3J0LiBJZiB0aGlzIG9wdGlvbiBpcyBmYWxzZSwgb25seSB0aGUgZmlyc3QgbGFiZWwgd2lsbCBiZSBjZW50ZXJlZCBuZXh0IHRvIHRoZSBwb3J0LCB3aXRoIHRoZSBvdGhlcnMgYmVpbmcgcGxhY2VkIGJlbG93LiBUaGlzIG9ubHkgYXBwbGllcyB0byBsYWJlbHMgb2YgZWFzdGVybiBhbmQgd2VzdGVybiBwb3J0cyBhbmQgd2lsbCBoYXZlIG5vIGVmZmVjdCBpZiBsYWJlbHMgYXJlIG5vdCBwbGFjZWQgbmV4dCB0byB0aGVpciBwb3J0LiIpLCEwKSxMYSksUnMpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsa2t0KSxDZGUpLCJBY3RpdmF0ZSBJbnNpZGUgU2VsZiBMb29wcyIpLCJXaGV0aGVyIHRoaXMgbm9kZSBhbGxvd3MgdG8gcm91dGUgc2VsZiBsb29wcyBpbnNpZGUgb2YgaXQgaW5zdGVhZCBvZiBhcm91bmQgaXQuIElmIHNldCB0byB0cnVlLCB0aGlzIHdpbGwgbWFrZSB0aGUgbm9kZSBhIGNvbXBvdW5kIG5vZGUgaWYgaXQgaXNuJ3QgYWxyZWFkeSwgYW5kIHdpbGwgcmVxdWlyZSB0aGUgbGF5b3V0IGFsZ29yaXRobSB0byBzdXBwb3J0IGNvbXBvdW5kIG5vZGVzIHdpdGggaGllcmFyY2hpY2FsIHBvcnRzLiIpLCExKSxMYSksUnMpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsRWt0KSxDZGUpLCJJbnNpZGUgU2VsZiBMb29wIiksIldoZXRoZXIgYSBzZWxmIGxvb3Agc2hvdWxkIGJlIHJvdXRlZCBpbnNpZGUgYSBub2RlIGluc3RlYWQgb2YgYXJvdW5kIHRoYXQgbm9kZS4iKSwhMSksTGEpLFJzKSx1bihQZCkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLCRvdCksImVkZ2UiKSwiRWRnZSBUaGlja25lc3MiKSwiVGhlIHRoaWNrbmVzcyBvZiBhbiBlZGdlLiBUaGlzIGlzIGEgaGludCBvbiB0aGUgbGluZSB3aWR0aCB1c2VkIHRvIGRyYXcgYW4gZWRnZSwgcG9zc2libHkgcmVxdWlyaW5nIG1vcmUgc3BhY2UgdG8gYmUgcmVzZXJ2ZWQgZm9yIGl0LiIpLDEpLE9vKSxsYSksdW4oUGQpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxrZGUpLCJlZGdlIiksIkVkZ2UgVHlwZSIpLCJUaGUgdHlwZSBvZiBhbiBlZGdlLiBUaGlzIGlzIHVzdWFsbHkgdXNlZCBmb3IgVU1MIGNsYXNzIGRpYWdyYW1zLCB3aGVyZSBhc3NvY2lhdGlvbnMgbXVzdCBiZSBoYW5kbGVkIGRpZmZlcmVudGx5IGZyb20gZ2VuZXJhbGl6YXRpb25zLiIpLFZTdCksdXMpLENBdCksdW4oUGQpKSkpLFdDKGUsbmV3IFl4KHpDKG84KGE4KG5ldyB4bSxHbiksIkxheWVyZWQiKSwnVGhlIGxheWVyLWJhc2VkIG1ldGhvZCB3YXMgaW50cm9kdWNlZCBieSBTdWdpeWFtYSwgVGFnYXdhIGFuZCBUb2RhIGluIDE5ODEuIEl0IGVtcGhhc2l6ZXMgdGhlIGRpcmVjdGlvbiBvZiBlZGdlcyBieSBwb2ludGluZyBhcyBtYW55IGVkZ2VzIGFzIHBvc3NpYmxlIGludG8gdGhlIHNhbWUgZGlyZWN0aW9uLiBUaGUgbm9kZXMgYXJlIGFycmFuZ2VkIGluIGxheWVycywgd2hpY2ggYXJlIHNvbWV0aW1lcyBjYWxsZWQgImhpZXJhcmNoaWVzIiwgYW5kIHRoZW4gcmVvcmRlcmVkIHN1Y2ggdGhhdCB0aGUgbnVtYmVyIG9mIGVkZ2UgY3Jvc3NpbmdzIGlzIG1pbmltaXplZC4gQWZ0ZXJ3YXJkcywgY29uY3JldGUgY29vcmRpbmF0ZXMgYXJlIGNvbXB1dGVkIGZvciB0aGUgbm9kZXMgYW5kIGVkZ2UgYmVuZCBwb2ludHMuJykpKSxXQyhlLG5ldyBZeCh6QyhvOChhOChuZXcgeG0sIm9yZy5lY2xpcHNlLmVsay5vcnRob2dvbmFsIiksIk9ydGhvZ29uYWwiKSxgT3J0aG9nb25hbCBtZXRob2RzIHRoYXQgZm9sbG93IHRoZSAidG9wb2xvZ3ktc2hhcGUtbWV0cmljcyIgYXBwcm9hY2ggYnkgQmF0aW5pLCBOYXJkZWxsaSBhbmQgVGFtYXNzaWEgJzg2LiBUaGUgZmlyc3QgcGhhc2UgZGV0ZXJtaW5lcyB0aGUgdG9wb2xvZ3kgb2YgdGhlIGRyYXdpbmcgYnkgYXBwbHlpbmcgYSBwbGFuYXJpemF0aW9uIHRlY2huaXF1ZSwgd2hpY2ggcmVzdWx0cyBpbiBhIHBsYW5hciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ3JhcGguIFRoZSBvcnRob2dvbmFsIHNoYXBlIGlzIGNvbXB1dGVkIGluIHRoZSBzZWNvbmQgcGhhc2UsIHdoaWNoIGFpbXMgYXQgbWluaW1pemluZyB0aGUgbnVtYmVyIG9mIGVkZ2UgYmVuZHMsIGFuZCBpcyBjYWxsZWQgb3J0aG9nb25hbGl6YXRpb24uIFRoZSB0aGlyZCBwaGFzZSBsZWFkcyB0byBjb25jcmV0ZSBjb29yZGluYXRlcyBmb3Igbm9kZXMgYW5kIGVkZ2UgYmVuZCBwb2ludHMgYnkgYXBwbHlpbmcgYSBjb21wYWN0aW9uIG1ldGhvZCwgdGh1cyBkZWZpbmluZyB0aGUgbWV0cmljcy5gKSkpLFdDKGUsbmV3IFl4KHpDKG84KGE4KG5ldyB4bSxWbCksIkZvcmNlIiksIkxheW91dCBhbGdvcml0aG1zIHRoYXQgZm9sbG93IHBoeXNpY2FsIGFuYWxvZ2llcyBieSBzaW11bGF0aW5nIGEgc3lzdGVtIG9mIGF0dHJhY3RpdmUgYW5kIHJlcHVsc2l2ZSBmb3JjZXMuIFRoZSBmaXJzdCBzdWNjZXNzZnVsIG1ldGhvZCBvZiB0aGlzIGtpbmQgd2FzIHByb3Bvc2VkIGJ5IEVhZGVzIGluIDE5ODQuIikpKSxXQyhlLG5ldyBZeCh6QyhvOChhOChuZXcgeG0sIm9yZy5lY2xpcHNlLmVsay5jaXJjbGUiKSwiQ2lyY2xlIiksIkNpcmN1bGFyIGxheW91dCBhbGdvcml0aG1zIGVtcGhhc2l6ZSBjeWNsZXMgb3IgYmljb25uZWN0ZWQgY29tcG9uZW50cyBvZiBhIGdyYXBoIGJ5IGFycmFuZ2luZyB0aGVtIGluIGNpcmNsZXMuIFRoaXMgaXMgdXNlZnVsIGlmIGEgZHJhd2luZyBpcyBkZXNpcmVkIHdoZXJlIHN1Y2ggY29tcG9uZW50cyBhcmUgY2xlYXJseSBncm91cGVkLCBvciB3aGVyZSBjeWNsZXMgYXJlIHNob3duIGFzIHByb21pbmVudCBPUFRJT05TIG9mIHRoZSBncmFwaC4iKSkpLFdDKGUsbmV3IFl4KHpDKG84KGE4KG5ldyB4bSxLMWUpLCJUcmVlIiksIlNwZWNpYWxpemVkIGxheW91dCBtZXRob2RzIGZvciB0cmVlcywgaS5lLiBhY3ljbGljIGdyYXBocy4gVGhlIHJlZ3VsYXIgc3RydWN0dXJlIG9mIGdyYXBocyB0aGF0IGhhdmUgbm8gdW5kaXJlY3RlZCBjeWNsZXMgY2FuIGJlIGVtcGhhc2l6ZWQgdXNpbmcgYW4gYWxnb3JpdGhtIG9mIHRoaXMgdHlwZS4iKSkpLFdDKGUsbmV3IFl4KHpDKG84KGE4KG5ldyB4bSwib3JnLmVjbGlwc2UuZWxrLnBsYW5hciIpLCJQbGFuYXIiKSwiQWxnb3JpdGhtcyB0aGF0IHJlcXVpcmUgYSBwbGFuYXIgb3IgdXB3YXJkIHBsYW5hciBncmFwaC4gTW9zdCBvZiB0aGVzZSBhbGdvcml0aG1zIGFyZSB0aGVvcmV0aWNhbGx5IGludGVyZXN0aW5nLCBidXQgbm90IHByYWN0aWNhbGx5IHVzYWJsZS4iKSkpLFdDKGUsbmV3IFl4KHpDKG84KGE4KG5ldyB4bSxTZCksIlJhZGlhbCIpLCJSYWRpYWwgbGF5b3V0IGFsZ29yaXRobXMgdXN1YWxseSBwb3NpdGlvbiB0aGUgbm9kZXMgb2YgdGhlIGdyYXBoIG9uIGNvbmNlbnRyaWMgY2lyY2xlcy4iKSkpLEt1ZSgobmV3IFFCLGUpKSxsbGUoKG5ldyBodHQsZSkpLEN1ZSgobmV3IFpCLGUpKX07dmFyIFlTLGE0ZSxOU3QsVzYsbzRlLGM0ZSxCU3QsdTRlLFlHLFJTdCxRTyxxdixqU3QsZ2Z0LHBmdCwkU3QselN0LHFTdCxIU3QsVlN0LEdTdCxzNSxVU3QsbDRlLFpPLGJmdCxLRyxXU3QsYTUsWVN0LEpPLEtTdCxYU3QsUVN0LG81LFpTdCxHMixKU3QsWEcsYzUsdEF0LHhiLGVBdCxRRyx0UCxVMixuQXQsaDRlLHJBdCxmNGUsZDRlLGlBdCxzQXQsd2Z0LHZmdCxtZnQseWZ0LGFBdCxkbCxLUyxvQXQseGZ0LGtmdCxReSxjQXQsdUF0LHU1LGxBdCxZNixaRyxFZnQsTzcsZzRlLFRmdCxwNGUsYjRlLGhBdCx3NGUsZkF0LHY0ZSxLNixkQXQsSkcsZ0F0LHBBdCxXMixtNGUsYkF0LHdBdCx2QXQ7RihGaCwiQ29yZU9wdGlvbnMiLDY4NCksRCgxMDMsMjIsezM6MSwzNToxLDIyOjEsMTAzOjF9LFBNKTt2YXIgbmcsemgsQ2YsaDAscmcsWFM9anIoRmgsaTZ0LDEwMyxIcixiYW4sRnRuKSx5NGU7RCgyNzIsMjIsezM6MSwzNToxLDIyOjEsMjcyOjF9LFpldCk7dmFyIFA3LFp5LEY3LG1BdD1qcihGaCwiRWRnZUxhYmVsUGxhY2VtZW50IiwyNzIsSHIsWGluLE50bikseDRlO0QoMjE4LDIyLHszOjEsMzU6MSwyMjoxLDIxODoxfSxzaik7dmFyIE43LGVQLFg2LENmdCxfZnQ9anIoRmgsIkVkZ2VSb3V0aW5nIiwyMTgsSHIscXNuLEJ0biksazRlO0QoMzEyLDIyLHszOjEsMzU6MSwyMjoxLDMxMjoxfSxhOSk7dmFyIHlBdCx4QXQsa0F0LEVBdCxTZnQsVEF0LENBdD1qcihGaCwiRWRnZVR5cGUiLDMxMixIcixub24sUnRuKSxFNGU7RCg5NzcsMSxPaCxRQiksbC5RZT1mdW5jdGlvbihlKXtLdWUoZSl9O3ZhciBfQXQsU0F0LEFBdCxMQXQsVDRlLE1BdCxRUztGKEZoLCJGaXhlZExheW91dGVyT3B0aW9ucyIsOTc3KSxEKDk3OCwxLHt9LHFMKSxsLiRlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IFVaLGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxGKEZoLCJGaXhlZExheW91dGVyT3B0aW9ucy9GaXhlZEZhY3RvcnkiLDk3OCksRCgzMzQsMjIsezM6MSwzNToxLDIyOjEsMzM0OjF9LEpldCk7dmFyIHNwLHRVLFpTLERBdD1qcihGaCwiSGllcmFyY2h5SGFuZGxpbmciLDMzNCxIcixLaW4sanRuKSxDNGU7RCgyODUsMjIsezM6MSwzNToxLDIyOjEsMjg1OjF9LGFqKTt2YXIgZjAsa2IsblAsclAsXzRlPWpyKEZoLCJMYWJlbFNpZGUiLDI4NSxIcix6c24sJHRuKSxTNGU7RCg5MywyMix7MzoxLDM1OjEsMjI6MSw5MzoxfSxxMyk7dmFyIGlnLF9mLHFoLFNmLFlsLEFmLEhoLGQwLExmLGxvPWpyKEZoLCJOb2RlTGFiZWxQbGFjZW1lbnQiLDkzLEhyLHNjbix6dG4pLEE0ZTtEKDI0OSwyMix7MzoxLDM1OjEsMjI6MSwyNDk6MX0sRk0pO3ZhciBJQXQsSlMsRWIsT0F0LGlQLHRBPWpyKEZoLCJQb3J0QWxpZ25tZW50IiwyNDksSHIsd2FuLHF0biksTDRlO0QoOTgsMjIsezM6MSwzNToxLDIyOjEsOTg6MX0sbzkpO3ZhciBZMixHYyxnMCxCNyxHMSxUYixQQXQ9anIoRmgsIlBvcnRDb25zdHJhaW50cyIsOTgsSHIsamFuLEh0biksTTRlO0QoMjczLDIyLHszOjEsMzU6MSwyMjoxLDI3MzoxfSxjOSk7dmFyIGVBLG5BLHNnLHNQLENiLFE2LGVVPWpyKEZoLCJQb3J0TGFiZWxQbGFjZW1lbnQiLDI3MyxIcixlb24sVnRuKSxENGU7RCg2MSwyMix7MzoxLDM1OjEsMjI6MSw2MToxfSxOTSk7dmFyIEhuLFBuLG1oLHloLFN1LGx1LFUxLE1mLGVsLFZ1LFVjLG5sLEF1LEx1LERmLEtsLFhsLFZoLG1yLFpvLEJuLFhhPWpyKEZoLCJQb3J0U2lkZSIsNjEsSHIsZGFuLFd0biksSTRlO0QoOTgxLDEsT2gsWkIpLGwuUWU9ZnVuY3Rpb24oZSl7Q3VlKGUpfTt2YXIgTzRlLFA0ZSxGQXQsRjRlLE40ZTtGKEZoLCJSYW5kb21MYXlvdXRlck9wdGlvbnMiLDk4MSksRCg5ODIsMSx7fSxaWiksbC4kZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyB0SixlfSxsLl9lPWZ1bmN0aW9uKGUpe30sRihGaCwiUmFuZG9tTGF5b3V0ZXJPcHRpb25zL1JhbmRvbUZhY3RvcnkiLDk4MiksRCgzNzQsMjIsezM6MSwzNToxLDIyOjEsMzc0OjF9LG9qKTt2YXIgSnksYVAsb1AsSzIsckE9anIoRmgsIlNpemVDb25zdHJhaW50IiwzNzQsSHIsJHNuLEd0biksQjRlO0QoMjU5LDIyLHszOjEsMzU6MSwyMjoxLDI1OToxfSxIMyk7dmFyIGNQLG5VLFI3LEFmdCx1UCxpQSxyVSxpVSxzVSxOQXQ9anIoRmgsIlNpemVPcHRpb25zIiwyNTksSHIsZmNuLFV0biksUjRlO0QoMzcwLDEsezE5NDk6MX0scjgpLGwuYj0hMSxsLmM9MCxsLmQ9LTEsbC5lPW51bGwsbC5mPW51bGwsbC5nPS0xLGwuaj0hMSxsLms9ITEsbC5uPSExLGwubz0wLGwucT0wLGwucj0wLEYoRWMsIkJhc2ljUHJvZ3Jlc3NNb25pdG9yIiwzNzApLEQoOTcyLDIwOSxTMixZWiksbC5aZT1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTTtzd2l0Y2godnIobiwiQm94IGxheW91dCIsMiksbz1wTSh5ZShxZShlLChmcSgpLGk0ZSkpKSksaD11KHFlKGUscjRlKSwxMTYpLHI9amUoUmUocWUoZSxEU3QpKSkscz1qZShSZShxZShlLElTdCkpKSx1KHFlKGUsbGZ0KSwzMTEpLmcpe2Nhc2UgMDpkPSh2PW5ldyBCdSgoIWUuYSYmKGUuYT1uZXcgZmUocnMsZSwxMCwxMSkpLGUuYSkpLHduKCksWnModixuZXcgb3p0KHMpKSx2KSxrPVE0dChlKSxDPXllKHFlKGUsTVN0KSksKEM9PW51bGx8fChPbihDKSxDPD0wKSkmJihDPTEuMyksTT1RNW4oZCxvLGgsay5hLGsuYixyLChPbihDKSxDKSksd3YoZSxNLmEsTS5iLCExLCEwKTticmVhaztkZWZhdWx0OlczbihlLG8saCxyKX1vcihuKX0sRihFYywiQm94TGF5b3V0UHJvdmlkZXIiLDk3MiksRCg5NzMsMSxPaSxvenQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gcHduKHRoaXMsdShlLDMzKSx1KG4sMzMpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxsLmE9ITEsRihFYywiQm94TGF5b3V0UHJvdmlkZXIvMSIsOTczKSxEKDE1NywxLHsxNTc6MX0scnosTFd0KSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYz9YNXQodGhpcy5jKTplYih0aGlzLmIpfSxGKEVjLCJCb3hMYXlvdXRQcm92aWRlci9Hcm91cCIsMTU3KSxEKDMxMSwyMix7MzoxLDM1OjEsMjI6MSwzMTE6MX0sY2opO3ZhciBCQXQsUkF0LGpBdCxMZnQsJEF0PWpyKEVjLCJCb3hMYXlvdXRQcm92aWRlci9QYWNraW5nTW9kZSIsMzExLEhyLEhzbixZdG4pLGo0ZTtEKDk3NCwxLE9pLEtaKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHZybih1KGUsMTU3KSx1KG4sMTU3KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihFYywiQm94TGF5b3V0UHJvdmlkZXIvbGFtYmRhJDAkVHlwZSIsOTc0KSxEKDk3NSwxLE9pLHNCKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGhybih1KGUsMTU3KSx1KG4sMTU3KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihFYywiQm94TGF5b3V0UHJvdmlkZXIvbGFtYmRhJDEkVHlwZSIsOTc1KSxEKDk3NiwxLE9pLFhaKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGZybih1KGUsMTU3KSx1KG4sMTU3KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihFYywiQm94TGF5b3V0UHJvdmlkZXIvbGFtYmRhJDIkVHlwZSIsOTc2KSxEKDEzNjUsMSx7ODMxOjF9LFFaKSxsLnFnPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEhSKCksIV90KG4sMTYwKXx8akh0KChpNigpLHUoZSwxNjApKSxuKX0sRihFYywiRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIvbGFtYmRhJDAkVHlwZSIsMTM2NSksRCgxMzY2LDEsVW4sY3p0KSxsLnRkPWZ1bmN0aW9uKGUpe25sbih0aGlzLmEsdShlLDE0NikpfSxGKEVjLCJFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlci9sYW1iZGEkMSRUeXBlIiwxMzY2KSxEKDEzNjcsMSxVbixXWiksbC50ZD1mdW5jdGlvbihlKXt1KGUsOTQpLEhSKCl9LEYoRWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQyJFR5cGUiLDEzNjcpLEQoMTM3MSwxLFVuLHV6dCksbC50ZD1mdW5jdGlvbihlKXtTY24odGhpcy5hLHUoZSw5NCkpfSxGKEVjLCJFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlci9sYW1iZGEkMyRUeXBlIiwxMzcxKSxEKDEzNjksMSxsaSxDR3QpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHF1bih0aGlzLmEsdGhpcy5iLHUoZSwxNDYpKX0sRihFYywiRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIvbGFtYmRhJDQkVHlwZSIsMTM2OSksRCgxMzY4LDEsbGksX0d0KSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBzWmUodGhpcy5hLHRoaXMuYix1KGUsODMxKSl9LEYoRWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQ1JFR5cGUiLDEzNjgpLEQoMTM3MCwxLFVuLFNHdCksbC50ZD1mdW5jdGlvbihlKXtzbm4odGhpcy5hLHRoaXMuYix1KGUsMTQ2KSl9LEYoRWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQ2JFR5cGUiLDEzNzApLEQoOTM1LDEse30sR1opLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFNVdChlKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LEYoRWMsIkVsa1V0aWwvbGFtYmRhJDAkVHlwZSIsOTM1KSxEKDkzNiwxLFVuLEFHdCksbC50ZD1mdW5jdGlvbihlKXt3Ym4odGhpcy5hLHRoaXMuYix1KGUsNzkpKX0sbC5hPTAsbC5iPTAsRihFYywiRWxrVXRpbC9sYW1iZGEkMSRUeXBlIiw5MzYpLEQoOTM3LDEsVW4sTEd0KSxsLnRkPWZ1bmN0aW9uKGUpe3dLZSh0aGlzLmEsdGhpcy5iLHUoZSwyMDIpKX0sbC5hPTAsbC5iPTAsRihFYywiRWxrVXRpbC9sYW1iZGEkMiRUeXBlIiw5MzcpLEQoOTM4LDEsVW4sTUd0KSxsLnRkPWZ1bmN0aW9uKGUpe2NRZSh0aGlzLmEsdGhpcy5iLHUoZSwxMzcpKX0sbC5hPTAsbC5iPTAsRihFYywiRWxrVXRpbC9sYW1iZGEkMyRUeXBlIiw5MzgpLEQoOTM5LDEsVW4sbHp0KSxsLnRkPWZ1bmN0aW9uKGUpe3hlbih0aGlzLmEsdShlLDQ2OSkpfSxGKEVjLCJFbGtVdGlsL2xhbWJkYSQ0JFR5cGUiLDkzOSksRCgzNDIsMSx7MzU6MSwzNDI6MX0sV1llKSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBOUWUodGhpcyx1KGUsMjM2KSl9LGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIF90KGUsMzQyKT8obj11KGUsMzQyKSx0aGlzLmE9PW4uYSk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gcHModGhpcy5hKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmErIiAoZXhjbHVzaXZlKSJ9LGwuYT0wLEYoRWMsIkV4Y2x1c2l2ZUJvdW5kcy9FeGNsdXNpdmVMb3dlckJvdW5kIiwzNDIpLEQoMTEzOCwyMDksUzIsVVopLGwuWmU9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZSxXZSxRZTtmb3IodnIobiwiRml4ZWQgTGF5b3V0IiwxKSxoPXUocWUoZSwodWkoKSx6U3QpKSwyMTgpLGo9MCxIPTAsU3Q9bmV3IG5yKCghZS5hJiYoZS5hPW5ldyBmZShycyxlLDEwLDExKSksZS5hKSk7U3QuZSE9U3QuaS5nYygpOyl7Zm9yKGd0PXUoZHIoU3QpLDMzKSxRZT11KHFlKGd0LChTeigpLFFTKSksOCksUWUmJih4MShndCxRZS5hLFFlLmIpLHUocWUoZ3QsU0F0KSwxNzQpLkhjKChBbCgpLEp5KSkmJihHPXUocWUoZ3QsTEF0KSw4KSxHLmE+MCYmRy5iPjAmJnd2KGd0LEcuYSxHLmIsITAsITApKSksaj1iLk1hdGgubWF4KGosZ3QuaStndC5nKSxIPWIuTWF0aC5tYXgoSCxndC5qK2d0LmYpLEM9bmV3IG5yKCghZ3QubiYmKGd0Lm49bmV3IGZlKHFvLGd0LDEsNykpLGd0Lm4pKTtDLmUhPUMuaS5nYygpOyl2PXUoZHIoQyksMTM3KSxRZT11KHFlKHYsUVMpLDgpLFFlJiZ4MSh2LFFlLmEsUWUuYiksaj1iLk1hdGgubWF4KGosZ3QuaSt2Lmkrdi5nKSxIPWIuTWF0aC5tYXgoSCxndC5qK3Yuait2LmYpO2Zvcih1ZT1uZXcgbnIoKCFndC5jJiYoZ3QuYz1uZXcgZmUoZ2wsZ3QsOSw5KSksZ3QuYykpO3VlLmUhPXVlLmkuZ2MoKTspZm9yKEt0PXUoZHIodWUpLDExOCksUWU9dShxZShLdCxRUyksOCksUWUmJngxKEt0LFFlLmEsUWUuYiksX2U9Z3QuaStLdC5pLFdlPWd0LmorS3QuaixqPWIuTWF0aC5tYXgoaixfZStLdC5nKSxIPWIuTWF0aC5tYXgoSCxXZStLdC5mKSxrPW5ldyBucigoIUt0Lm4mJihLdC5uPW5ldyBmZShxbyxLdCwxLDcpKSxLdC5uKSk7ay5lIT1rLmkuZ2MoKTspdj11KGRyKGspLDEzNyksUWU9dShxZSh2LFFTKSw4KSxRZSYmeDEodixRZS5hLFFlLmIpLGo9Yi5NYXRoLm1heChqLF9lK3YuaSt2LmcpLEg9Yi5NYXRoLm1heChILFdlK3Yuait2LmYpO2ZvcihvPW5ldyBhcihscihLMChndCkuYS5LYygpLG5ldyB6KSk7enIobyk7KXI9dShNcihvKSw3OSksTT0kaGUociksaj1iLk1hdGgubWF4KGosTS5hKSxIPWIuTWF0aC5tYXgoSCxNLmIpO2ZvcihzPW5ldyBhcihscih3SShndCkuYS5LYygpLG5ldyB6KSk7enIocyk7KXI9dShNcihzKSw3OSksZXMoZTAocikpIT1lJiYoTT0kaGUociksaj1iLk1hdGgubWF4KGosTS5hKSxIPWIuTWF0aC5tYXgoSCxNLmIpKX1pZihoPT0oVzAoKSxONykpZm9yKE10PW5ldyBucigoIWUuYSYmKGUuYT1uZXcgZmUocnMsZSwxMCwxMSkpLGUuYSkpO010LmUhPU10LmkuZ2MoKTspZm9yKGd0PXUoZHIoTXQpLDMzKSxzPW5ldyBhcihscihLMChndCkuYS5LYygpLG5ldyB6KSk7enIocyk7KXI9dShNcihzKSw3OSksZD1neW4ociksZC5iPT0wP3dvKHIsYTUsbnVsbCk6d28ocixhNSxkKTtqZShSZShxZShlLChTeigpLEFBdCkpKSl8fChSdD11KHFlKGUsVDRlKSwxMTYpLHR0PWorUnQuYitSdC5jLEs9SCtSdC5kK1J0LmEsd3YoZSx0dCxLLCEwLCEwKSksb3Iobil9LEYoRWMsIkZpeGVkTGF5b3V0UHJvdmlkZXIiLDExMzgpLEQoMzczLDEzNCx7MzoxLDQxNDoxLDM3MzoxLDk0OjEsMTM0OjF9LFl1LHJlZSksbC5KZj1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdixrLEM7aWYoZSl0cnl7Zm9yKGs9dnkoZSwiOyw7IiksaD1rLGQ9MCx2PWgubGVuZ3RoO2Q8djsrK2Qpe2lmKG89aFtkXSxyPXZ5KG8sIlxcOiIpLHM9RXh0KEs4KCksclswXSksIXMpdGhyb3cgaXQobmV3IEZuKCJJbnZhbGlkIG9wdGlvbiBpZDogIityWzBdKSk7aWYoQz14eHQocyxyWzFdKSxDPT1udWxsKXRocm93IGl0KG5ldyBGbigiSW52YWxpZCBvcHRpb24gdmFsdWU6ICIrclsxXSkpO0M9PW51bGw/KCF0aGlzLnEmJih0aGlzLnE9bmV3IF9yKSxKeCh0aGlzLnEscykpOighdGhpcy5xJiYodGhpcy5xPW5ldyBfciksa2kodGhpcy5xLHMsQykpfX1jYXRjaChNKXt0aHJvdyBNPVdpKE0pLF90KE0sMTAyKT8obj1NLGl0KG5ldyBGcmUobikpKTppdChNKX19LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1CcihCbCh3dSgodGhpcy5xP3RoaXMucTood24oKSx3bigpLHUwKSkudmMoKS5PYygpLG5ldyBJdSksWm0obmV3IFVZdCxuZXcgd3MsbmV3IE1lLG5ldyBkZSxsdChjdChmbCwxKSxvZSwxMzIsMCxbXSkpKSksZX07dmFyICQ0ZT1GKEVjLCJJbmRpdmlkdWFsU3BhY2luZ3MiLDM3Myk7RCg5NzEsMSx7fSxJdSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbXJuKHUoZSw0MikpfSxGKEVjLCJJbmRpdmlkdWFsU3BhY2luZ3MvbGFtYmRhJDAkVHlwZSIsOTcxKSxEKDcwOSwxLHt9LFRLdCksbC5jPTAsRihFYywiSW5zdGFuY2VQb29sIiw3MDkpLEQoMTI3NSwxLHt9LEpaKSxGKEVjLCJMb2dnZWRHcmFwaCIsMTI3NSksRCgzOTYsMjIsezM6MSwzNToxLDIyOjEsMzk2OjF9LHVqKTt2YXIgekF0LFFsLHFBdCxIQXQsejRlPWpyKEVjLCJMb2dnZWRHcmFwaC9UeXBlIiwzOTYsSHIsVnNuLEt0bikscTRlO0QoNDYsMSx7MjA6MSw0NjoxfSxmYSksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztyZXR1cm4gX3QoZSw0Nik/KHI9dShlLDQ2KSxuPXRoaXMuYT09bnVsbD9yLmE9PW51bGw6eWkodGhpcy5hLHIuYSkscz10aGlzLmI9PW51bGw/ci5iPT1udWxsOnlpKHRoaXMuYixyLmIpLG4mJnMpOiExfSxsLkhiPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbyxoO3JldHVybiByPXRoaXMuYT09bnVsbD8wOkhpKHRoaXMuYSksZT1yJnlzLG49ciYtNjU1MzYsaD10aGlzLmI9PW51bGw/MDpIaSh0aGlzLmIpLHM9aCZ5cyxvPWgmLTY1NTM2LGVebz4+MTYmeXN8bl5zPDwxNn0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgaHp0KHRoaXMpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT09bnVsbCYmdGhpcy5iPT1udWxsPyJwYWlyKG51bGwsbnVsbCkiOnRoaXMuYT09bnVsbD8icGFpcihudWxsLCIrJG8odGhpcy5iKSsiKSI6dGhpcy5iPT1udWxsPyJwYWlyKCIrJG8odGhpcy5hKSsiLG51bGwpIjoicGFpcigiKyRvKHRoaXMuYSkrIiwiKyRvKHRoaXMuYikrIikifSxGKEVjLCJQYWlyIiw0NiksRCg5ODMsMSxzYSxoenQpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiF0aGlzLmMmJighdGhpcy5iJiZ0aGlzLmEuYSE9bnVsbHx8dGhpcy5hLmIhPW51bGwpfSxsLlBiPWZ1bmN0aW9uKCl7aWYoIXRoaXMuYyYmIXRoaXMuYiYmdGhpcy5hLmEhPW51bGwpcmV0dXJuIHRoaXMuYj0hMCx0aGlzLmEuYTtpZighdGhpcy5jJiZ0aGlzLmEuYiE9bnVsbClyZXR1cm4gdGhpcy5jPSEwLHRoaXMuYS5iO3Rocm93IGl0KG5ldyBsYyl9LGwuUWI9ZnVuY3Rpb24oKXt0aHJvdyB0aGlzLmMmJnRoaXMuYS5iIT1udWxsP3RoaXMuYS5iPW51bGw6dGhpcy5iJiZ0aGlzLmEuYSE9bnVsbCYmKHRoaXMuYS5hPW51bGwpLGl0KG5ldyBPdSl9LGwuYj0hMSxsLmM9ITEsRihFYywiUGFpci8xIiw5ODMpLEQoNDQ4LDEsezQ0ODoxfSx6WHQpLGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIEZjKHRoaXMuYSx1KGUsNDQ4KS5hKSYmRmModGhpcy5jLHUoZSw0NDgpLmMpJiZGYyh0aGlzLmQsdShlLDQ0OCkuZCkmJkZjKHRoaXMuYix1KGUsNDQ4KS5iKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBBeihsdChjdChRbiwxKSxEZSwxLDUsW3RoaXMuYSx0aGlzLmMsdGhpcy5kLHRoaXMuYl0pKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIoIit0aGlzLmErWWErdGhpcy5jK1lhK3RoaXMuZCtZYSt0aGlzLmIrIikifSxGKEVjLCJRdWFkcnVwbGUiLDQ0OCksRCgxMTI2LDIwOSxTMix0SiksbC5aZT1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQ7aWYodnIobiwiUmFuZG9tIExheW91dCIsMSksKCFlLmEmJihlLmE9bmV3IGZlKHJzLGUsMTAsMTEpKSxlLmEpLmk9PTApe29yKG4pO3JldHVybn1oPXUocWUoZSwoUzN0KCksRjRlKSksMTkpLGgmJmguYSE9MD9vPW5ldyBGJChoLmEpOm89bmV3IFppdCxyPXBNKHllKHFlKGUsTzRlKSkpLGQ9cE0oeWUocWUoZSxONGUpKSkscz11KHFlKGUsUDRlKSwxMTYpLEE1bihlLG8scixkLHMpLG9yKG4pfSxGKEVjLCJSYW5kb21MYXlvdXRQcm92aWRlciIsMTEyNik7dmFyIEg0ZTtEKDU1MywxLHt9KSxsLnFmPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyAkZSh0aGlzLmYuaSx0aGlzLmYuail9LGwuV2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGRRdChlLCh1aSgpLGRsKSk/cWUodGhpcy5mLFY0ZSk6cWUodGhpcy5mLGUpfSxsLnJmPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyAkZSh0aGlzLmYuZyx0aGlzLmYuZil9LGwuc2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nfSxsLlhlPWZ1bmN0aW9uKGUpe3JldHVybiBvMih0aGlzLmYsZSl9LGwudGY9ZnVuY3Rpb24oZSl7a3UodGhpcy5mLGUuYSksRXUodGhpcy5mLGUuYil9LGwudWY9ZnVuY3Rpb24oZSl7dHYodGhpcy5mLGUuYSksSncodGhpcy5mLGUuYil9LGwudmY9ZnVuY3Rpb24oZSl7dGhpcy5nPWV9LGwuZz0wO3ZhciBWNGU7RihLXywiRWxrR3JhcGhBZGFwdGVycy9BYnN0cmFjdEVsa0dyYXBoRWxlbWVudEFkYXB0ZXIiLDU1MyksRCg1NTQsMSx7ODM5OjF9LHdSKSxsLndmPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZighdGhpcy5iKWZvcih0aGlzLmI9RCQodSQodGhpcy5hKS5pKSxuPW5ldyBucih1JCh0aGlzLmEpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksMTM3KSxsZSh0aGlzLmIsbmV3IGdldChlKSk7cmV0dXJuIHRoaXMuYn0sbC5iPW51bGwsRihLXywiRWxrR3JhcGhBZGFwdGVycy9FbGtFZGdlQWRhcHRlciIsNTU0KSxEKDMwMSw1NTMse30sTW0pLGwueGY9ZnVuY3Rpb24oKXtyZXR1cm4genNlKHRoaXMpfSxsLmE9bnVsbCxGKEtfLCJFbGtHcmFwaEFkYXB0ZXJzL0Vsa0dyYXBoQWRhcHRlciIsMzAxKSxEKDYzMCw1NTMsezE4MToxfSxnZXQpLEYoS18sIkVsa0dyYXBoQWRhcHRlcnMvRWxrTGFiZWxBZGFwdGVyIiw2MzApLEQoNjI5LDU1Myx7NjgwOjF9LGdudCksbC53Zj1mdW5jdGlvbigpe3JldHVybiBNMW4odGhpcyl9LGwuQWY9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT11KHFlKHRoaXMuZiwodWkoKSxKTykpLDE0MiksIWUmJihlPW5ldyBPQyksZX0sbC5DZj1mdW5jdGlvbigpe3JldHVybiBEMW4odGhpcyl9LGwuRWY9ZnVuY3Rpb24oZSl7dmFyIG47bj1uZXcgTG50KGUpLHdvKHRoaXMuZiwodWkoKSxKTyksbil9LGwuRmY9ZnVuY3Rpb24oZSl7d28odGhpcy5mLCh1aSgpLFUyKSxuZXcga3d0KGUpKX0sbC55Zj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwuemY9ZnVuY3Rpb24oKXt2YXIgZSxuO2lmKCF0aGlzLmEpZm9yKHRoaXMuYT1uZXcgaGUsbj1uZXcgYXIobHIod0kodSh0aGlzLmYsMzMpKS5hLktjKCksbmV3IHopKTt6cihuKTspZT11KE1yKG4pLDc5KSxsZSh0aGlzLmEsbmV3IHdSKGUpKTtyZXR1cm4gdGhpcy5hfSxsLkJmPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZighdGhpcy5jKWZvcih0aGlzLmM9bmV3IGhlLG49bmV3IGFyKGxyKEswKHUodGhpcy5mLDMzKSkuYS5LYygpLG5ldyB6KSk7enIobik7KWU9dShNcihuKSw3OSksbGUodGhpcy5jLG5ldyB3UihlKSk7cmV0dXJuIHRoaXMuY30sbC5EZj1mdW5jdGlvbigpe3JldHVybiBwJCh1KHRoaXMuZiwzMykpLmkhPTB8fGplKFJlKHUodGhpcy5mLDMzKS5XZSgodWkoKSxaTykpKSl9LGwuR2Y9ZnVuY3Rpb24oKXt4b24odGhpcywoUG0oKSxINGUpKX0sbC5hPW51bGwsbC5iPW51bGwsbC5jPW51bGwsbC5kPW51bGwsbC5lPW51bGwsRihLXywiRWxrR3JhcGhBZGFwdGVycy9FbGtOb2RlQWRhcHRlciIsNjI5KSxEKDEyNjYsNTUzLHs4Mzg6MX0sJHp0KSxsLndmPWZ1bmN0aW9uKCl7cmV0dXJuIGoxbih0aGlzKX0sbC56Zj1mdW5jdGlvbigpe3ZhciBlLG47aWYoIXRoaXMuYSlmb3IodGhpcy5hPVVkKHUodGhpcy5mLDExOCkueGcoKS5pKSxuPW5ldyBucih1KHRoaXMuZiwxMTgpLnhnKCkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSw3OSksbGUodGhpcy5hLG5ldyB3UihlKSk7cmV0dXJuIHRoaXMuYX0sbC5CZj1mdW5jdGlvbigpe3ZhciBlLG47aWYoIXRoaXMuYylmb3IodGhpcy5jPVVkKHUodGhpcy5mLDExOCkueWcoKS5pKSxuPW5ldyBucih1KHRoaXMuZiwxMTgpLnlnKCkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSw3OSksbGUodGhpcy5jLG5ldyB3UihlKSk7cmV0dXJuIHRoaXMuY30sbC5IZj1mdW5jdGlvbigpe3JldHVybiB1KHUodGhpcy5mLDExOCkuV2UoKHVpKCksdTUpKSw2MSl9LGwuSWY9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGgsZCx2O2ZvcihzPVQxKHUodGhpcy5mLDExOCkpLHI9bmV3IG5yKHUodGhpcy5mLDExOCkueWcoKSk7ci5lIT1yLmkuZ2MoKTspZm9yKGU9dShkcihyKSw3OSksdj1uZXcgbnIoKCFlLmMmJihlLmM9bmV3IENuKGJyLGUsNSw4KSksZS5jKSk7di5lIT12LmkuZ2MoKTspe2lmKGQ9dShkcih2KSw4MiksZXkoRG8oZCkscykpcmV0dXJuITA7aWYoRG8oZCk9PXMmJmplKFJlKHFlKGUsKHVpKCksYmZ0KSkpKSlyZXR1cm4hMH1mb3Iobj1uZXcgbnIodSh0aGlzLmYsMTE4KS54ZygpKTtuLmUhPW4uaS5nYygpOylmb3IoZT11KGRyKG4pLDc5KSxoPW5ldyBucigoIWUuYiYmKGUuYj1uZXcgQ24oYnIsZSw0LDcpKSxlLmIpKTtoLmUhPWguaS5nYygpOylpZihvPXUoZHIoaCksODIpLGV5KERvKG8pLHMpKXJldHVybiEwO3JldHVybiExfSxsLmE9bnVsbCxsLmI9bnVsbCxsLmM9bnVsbCxGKEtfLCJFbGtHcmFwaEFkYXB0ZXJzL0Vsa1BvcnRBZGFwdGVyIiwxMjY2KSxEKDEyNjcsMSxPaSxlSiksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBvbW4odShlLDExOCksdShuLDExOCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoS18sIkVsa0dyYXBoQWRhcHRlcnMvUG9ydENvbXBhcmF0b3IiLDEyNjcpO3ZhciBfYj1LaShwaCwiRU9iamVjdCIpLGo3PUtpKEY0LEFkZSksR2g9S2koRjQsTGRlKSxsUD1LaShGNCxNZGUpLGhQPUtpKEY0LCJFbGtTaGFwZSIpLGJyPUtpKEY0LERkZSksWXM9S2koRjQsdzh0KSxKaT1LaShGNCxJZGUpLGZQPUtpKHBoLE9kZSksc0E9S2kocGgsIkVGYWN0b3J5IiksRzRlLE1mdD1LaShwaCxQZGUpLGkxPUtpKHBoLCJFUGFja2FnZSIpLG5hLFU0ZSxXNGUsVkF0LGFVLFk0ZSxHQXQsVUF0LFdBdCxTYixLNGUsWDRlLHFvPUtpKEY0LHY4dCkscnM9S2koRjQsbTh0KSxnbD1LaShGNCx5OHQpO0QoOTAsMSxGZGUpLGwuSmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5LZygpLG51bGx9LGwuS2c9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5MZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLktnKCksITF9LGwuTWc9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5OZz1mdW5jdGlvbihlKXttaSh0aGlzLGUpfSxGKEw2LCJCYXNpY05vdGlmaWVySW1wbCIsOTApLEQoOTcsOTAsamRlKSxsLm5oPWZ1bmN0aW9uKCl7cmV0dXJuIHhsKHRoaXMpfSxsLk9nPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGV9LGwuUGc9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgT3IpfSxsLlFnPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPW5vKHUoeW4odGhpcy5UZygpLHRoaXMuVmcoKSksMTgpKSx0aGlzLmVoKCkuaWgodGhpcyxuLm4sbi5mLGUpfSxsLlJnPWZ1bmN0aW9uKGUsbil7dGhyb3cgaXQobmV3IE9yKX0sbC5TZz1mdW5jdGlvbihlLG4scil7cmV0dXJuIEhsKHRoaXMsZSxuLHIpfSxsLlRnPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuUGcoKSYmKGU9dGhpcy5QZygpLmNrKCksZSk/ZTp0aGlzLnpoKCl9LGwuVWc9ZnVuY3Rpb24oKXtyZXR1cm4gZWF0KHRoaXMpfSxsLlZnPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE9yKX0sbC5XZz1mdW5jdGlvbigpe3ZhciBlLG47cmV0dXJuIG49dGhpcy5waCgpLmRrKCksIW4mJnRoaXMuUGcoKS5payhuPShZQygpLGU9anZ0KHZkKHRoaXMuVGcoKSkpLGU9PW51bGw/UmZ0Om5ldyBqTSh0aGlzLGUpKSksbn0sbC5YZz1mdW5jdGlvbihlLG4pe3JldHVybiBlfSxsLllnPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPWUuR2ooKSxuP2UuYWooKTpHaSh0aGlzLlRnKCksZSl9LGwuWmc9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLlBnKCksZT9lLmZrKCk6bnVsbH0sbC4kZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlBnKCk/dGhpcy5QZygpLmNrKCk6bnVsbH0sbC5fZz1mdW5jdGlvbihlLG4scil7cmV0dXJuIFh6KHRoaXMsZSxuLHIpfSxsLmFoPWZ1bmN0aW9uKGUpe3JldHVybiBqOCh0aGlzLGUpfSxsLmJoPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFVydCh0aGlzLGUsbil9LGwuZGg9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLlBnKCksISFlJiZlLmdrKCl9LGwuZWg9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgT3IpfSxsLmZoPWZ1bmN0aW9uKCl7cmV0dXJuIEh6KHRoaXMpfSxsLmdoPWZ1bmN0aW9uKGUsbixyLHMpe3JldHVybiBjNih0aGlzLGUsbixzKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHM7cmV0dXJuIHM9dSh5bih0aGlzLlRnKCksbiksNjYpLHMuTmooKS5Raih0aGlzLHRoaXMueWgoKSxuLXRoaXMuQWgoKSxlLHIpfSxsLmloPWZ1bmN0aW9uKGUsbixyLHMpe3JldHVybiBtJCh0aGlzLGUsbixzKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHM7cmV0dXJuIHM9dSh5bih0aGlzLlRnKCksbiksNjYpLHMuTmooKS5Saih0aGlzLHRoaXMueWgoKSxuLXRoaXMuQWgoKSxlLHIpfSxsLmtoPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLlBnKCkmJiEhdGhpcy5QZygpLmVrKCl9LGwubGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGZzdCh0aGlzLGUpfSxsLm1oPWZ1bmN0aW9uKGUpe3JldHVybiBNUXQodGhpcyxlKX0sbC5vaD1mdW5jdGlvbihlKXtyZXR1cm4gZWhlKHRoaXMsZSl9LGwucGg9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgT3IpfSxsLnFoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUGcoKT90aGlzLlBnKCkuZWsoKTpudWxsfSxsLnJoPWZ1bmN0aW9uKCl7cmV0dXJuIEh6KHRoaXMpfSxsLnNoPWZ1bmN0aW9uKGUsbil7WHN0KHRoaXMsZSxuKX0sbC50aD1mdW5jdGlvbihlKXt0aGlzLnBoKCkuaGsoZSl9LGwudWg9ZnVuY3Rpb24oZSl7dGhpcy5waCgpLmtrKGUpfSxsLnZoPWZ1bmN0aW9uKGUpe3RoaXMucGgoKS5qayhlKX0sbC53aD1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoO3JldHVybiBoPXRoaXMuWmcoKSxoJiZlJiYobj1CYShoLlZrKCksdGhpcyxuKSxoLlprKHRoaXMpKSxzPXRoaXMuZWgoKSxzJiYod2F0KHRoaXMsdGhpcy5laCgpLHRoaXMuVmcoKSkuQmImS2E/KG89cy5maCgpLG8mJihlPyFoJiZvLlprKHRoaXMpOm8uWWsodGhpcykpKToobj0ocj10aGlzLlZnKCkscj49MD90aGlzLlFnKG4pOnRoaXMuZWgoKS5paCh0aGlzLC0xLXIsbnVsbCxuKSksbj10aGlzLlNnKG51bGwsLTEsbikpKSx0aGlzLnVoKGUpLG59LGwueGg9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHYsaztpZihyPXRoaXMuVGcoKSxoPUdpKHIsZSksbj10aGlzLkFoKCksaD49bilyZXR1cm4gdShlLDY2KS5OaigpLlVqKHRoaXMsdGhpcy55aCgpLGgtbik7aWYoaDw9LTEpaWYoZD1DNCgoJHUoKSx5YSkscixlKSxkKXtpZih0bygpLHUoZCw2NikuT2ooKXx8KGQ9S3goVG8oeWEsZCkpKSxvPShzPXRoaXMuWWcoZCksdShzPj0wP3RoaXMuX2cocywhMCwhMCk6ZHYodGhpcyxkLCEwKSwxNTMpKSxrPWQuWmooKSxrPjF8fGs9PS0xKXJldHVybiB1KHUobywyMTUpLmhsKGUsITEpLDc2KX1lbHNlIHRocm93IGl0KG5ldyBGbihsYitlLm5lKCkrV2N0KSk7ZWxzZSBpZihlLiRqKCkpcmV0dXJuIHM9dGhpcy5ZZyhlKSx1KHM+PTA/dGhpcy5fZyhzLCExLCEwKTpkdih0aGlzLGUsITEpLDc2KTtyZXR1cm4gdj1uZXcgWEd0KHRoaXMsZSksdn0sbC55aD1mdW5jdGlvbigpe3JldHVybiAkbXQodGhpcyl9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4oSHAoKSxMbikuU30sbC5BaD1mdW5jdGlvbigpe3JldHVybiBKbih0aGlzLnpoKCkpfSxsLkJoPWZ1bmN0aW9uKGUpe0dzdCh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIG1mKHRoaXMpfSxGKE1uLCJCYXNpY0VPYmplY3RJbXBsIiw5Nyk7dmFyIFE0ZTtEKDExNCw5Nyx7MTA1OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxfSksbC5DaD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj16bXQodGhpcyksbltlXX0sbC5EaD1mdW5jdGlvbihlLG4pe3ZhciByO3I9em10KHRoaXMpLHRzKHIsZSxuKX0sbC5FaD1mdW5jdGlvbihlKXt2YXIgbjtuPXptdCh0aGlzKSx0cyhuLGUsbnVsbCl9LGwuSmc9ZnVuY3Rpb24oKXtyZXR1cm4gdShEbih0aGlzLDQpLDEyNil9LGwuS2c9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgT3IpfSxsLkxnPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuRGImNCkhPTB9LGwuUGc9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgT3IpfSxsLkZoPWZ1bmN0aW9uKGUpe282KHRoaXMsMixlKX0sbC5SZz1mdW5jdGlvbihlLG4pe3RoaXMuRGI9bjw8MTZ8dGhpcy5EYiYyNTUsdGhpcy5GaChlKX0sbC5UZz1mdW5jdGlvbigpe3JldHVybiB2dSh0aGlzKX0sbC5WZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkRiPj4xNn0sbC5XZz1mdW5jdGlvbigpe3ZhciBlLG47cmV0dXJuIFlDKCksbj1qdnQodmQoKGU9dShEbih0aGlzLDE2KSwyNiksZXx8dGhpcy56aCgpKSkpLG49PW51bGw/UmZ0Om5ldyBqTSh0aGlzLG4pfSxsLk1nPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuRGImMSk9PTB9LGwuWmc9ZnVuY3Rpb24oKXtyZXR1cm4gdShEbih0aGlzLDEyOCksMTkzNSl9LGwuJGc9ZnVuY3Rpb24oKXtyZXR1cm4gdShEbih0aGlzLDE2KSwyNil9LGwuZGg9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5EYiYzMikhPTB9LGwuZWg9ZnVuY3Rpb24oKXtyZXR1cm4gdShEbih0aGlzLDIpLDQ5KX0sbC5raD1mdW5jdGlvbigpe3JldHVybih0aGlzLkRiJjY0KSE9MH0sbC5waD1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBPcil9LGwucWg9ZnVuY3Rpb24oKXtyZXR1cm4gdShEbih0aGlzLDY0KSwyODEpfSxsLnRoPWZ1bmN0aW9uKGUpe282KHRoaXMsMTYsZSl9LGwudWg9ZnVuY3Rpb24oZSl7bzYodGhpcywxMjgsZSl9LGwudmg9ZnVuY3Rpb24oZSl7bzYodGhpcyw2NCxlKX0sbC55aD1mdW5jdGlvbigpe3JldHVybiBzdSh0aGlzKX0sbC5EYj0wLEYoTW4sIk1pbmltYWxFT2JqZWN0SW1wbCIsMTE0KSxEKDExNSwxMTQsezEwNToxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0pLGwuRmg9ZnVuY3Rpb24oZSl7dGhpcy5DYj1lfSxsLmVoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ2J9LEYoTW4sIk1pbmltYWxFT2JqZWN0SW1wbC9Db250YWluZXIiLDExNSksRCgxOTg1LDExNSx7MTA1OjEsNDEzOjEsOTQ6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9KSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gWjN0KHRoaXMsZSxuLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gJDR0KHRoaXMsZSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3JldHVybiBRdnQodGhpcyxlKX0sbC5zaD1mdW5jdGlvbihlLG4pe0J5dCh0aGlzLGUsbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gSmMoKSxYNGV9LGwuQmg9ZnVuY3Rpb24oZSl7X3l0KHRoaXMsZSl9LGwuVmU9ZnVuY3Rpb24oKXtyZXR1cm4gY3NlKHRoaXMpfSxsLldlPWZ1bmN0aW9uKGUpe3JldHVybiBxZSh0aGlzLGUpfSxsLlhlPWZ1bmN0aW9uKGUpe3JldHVybiBvMih0aGlzLGUpfSxsLlllPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHdvKHRoaXMsZSxuKX0sRihNMiwiRU1hcFByb3BlcnR5SG9sZGVySW1wbCIsMTk4NSksRCg1NjcsMTE1LHsxMDU6MSw0Njk6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9LHhwKSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiB0aGlzLmE7Y2FzZSAxOnJldHVybiB0aGlzLmJ9cmV0dXJuIFh6KHRoaXMsZSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIHRoaXMuYSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuYiE9MH1yZXR1cm4gZnN0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSAwOml6KHRoaXMsWHQoeWUobikpKTtyZXR1cm47Y2FzZSAxOnN6KHRoaXMsWHQoeWUobikpKTtyZXR1cm59WHN0KHRoaXMsZSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBKYygpLFU0ZX0sbC5CaD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAwOml6KHRoaXMsMCk7cmV0dXJuO2Nhc2UgMTpzeih0aGlzLDApO3JldHVybn1Hc3QodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLkRiJjY0P21mKHRoaXMpOihlPW5ldyBfaChtZih0aGlzKSksZS5hKz0iICh4OiAiLCQzKGUsdGhpcy5hKSxlLmErPSIsIHk6ICIsJDMoZSx0aGlzLmIpLGUuYSs9IikiLGUuYSl9LGwuYT0wLGwuYj0wLEYoTTIsIkVsa0JlbmRQb2ludEltcGwiLDU2NyksRCg3MjMsMTk4NSx7MTA1OjEsNDEzOjEsMTYwOjEsOTQ6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9KSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gbjN0KHRoaXMsZSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4ganN0KHRoaXMsZSxuLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gRWl0KHRoaXMsZSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3JldHVybiB2eXQodGhpcyxlKX0sbC5zaD1mdW5jdGlvbihlLG4pe3c0dCh0aGlzLGUsbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gSmMoKSxZNGV9LGwuQmg9ZnVuY3Rpb24oZSl7Wnl0KHRoaXMsZSl9LGwuemc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rfSxsLkFnPWZ1bmN0aW9uKCl7cmV0dXJuIHUkKHRoaXMpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFhpdCh0aGlzKX0sbC5rPW51bGwsRihNMiwiRWxrR3JhcGhFbGVtZW50SW1wbCIsNzIzKSxEKDcyNCw3MjMsezEwNToxLDQxMzoxLDE2MDoxLDQ3MDoxLDk0OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxLDExNToxfSksbC5fZz1mdW5jdGlvbihlLG4scil7cmV0dXJuIGYzdCh0aGlzLGUsbixyKX0sbC5saD1mdW5jdGlvbihlKXtyZXR1cm4gbTN0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2NHQodGhpcyxlLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIEpjKCksSzRlfSxsLkJoPWZ1bmN0aW9uKGUpe1QzdCh0aGlzLGUpfSxsLkJnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0sbC5DZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd9LGwuRGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pfSxsLkVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuan0sbC5GZz1mdW5jdGlvbihlLG4pe2JqKHRoaXMsZSxuKX0sbC5HZz1mdW5jdGlvbihlLG4pe3gxKHRoaXMsZSxuKX0sbC5IZz1mdW5jdGlvbihlKXtrdSh0aGlzLGUpfSxsLklnPWZ1bmN0aW9uKGUpe0V1KHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gVnN0KHRoaXMpfSxsLmY9MCxsLmc9MCxsLmk9MCxsLmo9MCxGKE0yLCJFbGtTaGFwZUltcGwiLDcyNCksRCg3MjUsNzI0LHsxMDU6MSw0MTM6MSw4MjoxLDE2MDoxLDQ3MDoxLDk0OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxLDExNToxfSksbC5fZz1mdW5jdGlvbihlLG4scil7cmV0dXJuIFUzdCh0aGlzLGUsbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7cmV0dXJuIGg0dCh0aGlzLGUsbixyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7cmV0dXJuIGY0dCh0aGlzLGUsbixyKX0sbC5saD1mdW5jdGlvbihlKXtyZXR1cm4gRnl0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt4NXQodGhpcyxlLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIEpjKCksVzRlfSxsLkJoPWZ1bmN0aW9uKGUpe1IzdCh0aGlzLGUpfSxsLnhnPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZCYmKHRoaXMuZD1uZXcgQ24oWXMsdGhpcyw4LDUpKSx0aGlzLmR9LGwueWc9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5lJiYodGhpcy5lPW5ldyBDbihZcyx0aGlzLDcsNCkpLHRoaXMuZX0sRihNMiwiRWxrQ29ubmVjdGFibGVTaGFwZUltcGwiLDcyNSksRCgzNTIsNzIzLHsxMDU6MSw0MTM6MSw3OToxLDE2MDoxLDM1MjoxLDk0OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxLDExNToxfSxwdyksbC5RZz1mdW5jdGlvbihlKXtyZXR1cm4gbzR0KHRoaXMsZSl9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3N3aXRjaChlKXtjYXNlIDM6cmV0dXJuIGNEKHRoaXMpO2Nhc2UgNDpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBDbihicix0aGlzLDQsNykpLHRoaXMuYjtjYXNlIDU6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgQ24oYnIsdGhpcyw1LDgpKSx0aGlzLmM7Y2FzZSA2OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGZlKEppLHRoaXMsNiw2KSksdGhpcy5hO2Nhc2UgNzpyZXR1cm4gTm4oKSwhdGhpcy5iJiYodGhpcy5iPW5ldyBDbihicix0aGlzLDQsNykpLCEodGhpcy5iLmk8PTEmJighdGhpcy5jJiYodGhpcy5jPW5ldyBDbihicix0aGlzLDUsOCkpLHRoaXMuYy5pPD0xKSk7Y2FzZSA4OnJldHVybiBObigpLCEhd18odGhpcyk7Y2FzZSA5OnJldHVybiBObigpLCEhZnYodGhpcyk7Y2FzZSAxMDpyZXR1cm4gTm4oKSwhdGhpcy5iJiYodGhpcy5iPW5ldyBDbihicix0aGlzLDQsNykpLHRoaXMuYi5pIT0wJiYoIXRoaXMuYyYmKHRoaXMuYz1uZXcgQ24oYnIsdGhpcyw1LDgpKSx0aGlzLmMuaSE9MCl9cmV0dXJuIG4zdCh0aGlzLGUsbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKG4pe2Nhc2UgMzpyZXR1cm4gdGhpcy5DYiYmKHI9KHM9dGhpcy5EYj4+MTYscz49MD9vNHQodGhpcyxyKTp0aGlzLkNiLmloKHRoaXMsLTEtcyxudWxsLHIpKSksdHd0KHRoaXMsdShlLDMzKSxyKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgQ24oYnIsdGhpcyw0LDcpKSxaYyh0aGlzLmIsZSxyKTtjYXNlIDU6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgQ24oYnIsdGhpcyw1LDgpKSxaYyh0aGlzLmMsZSxyKTtjYXNlIDY6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgZmUoSmksdGhpcyw2LDYpKSxaYyh0aGlzLmEsZSxyKX1yZXR1cm4ganN0KHRoaXMsZSxuLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2gobil7Y2FzZSAzOnJldHVybiB0d3QodGhpcyxudWxsLHIpO2Nhc2UgNDpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBDbihicix0aGlzLDQsNykpLEJhKHRoaXMuYixlLHIpO2Nhc2UgNTpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBDbihicix0aGlzLDUsOCkpLEJhKHRoaXMuYyxlLHIpO2Nhc2UgNjpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBmZShKaSx0aGlzLDYsNikpLEJhKHRoaXMuYSxlLHIpfXJldHVybiBFaXQodGhpcyxlLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMzpyZXR1cm4hIWNEKHRoaXMpO2Nhc2UgNDpyZXR1cm4hIXRoaXMuYiYmdGhpcy5iLmkhPTA7Y2FzZSA1OnJldHVybiEhdGhpcy5jJiZ0aGlzLmMuaSE9MDtjYXNlIDY6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wO2Nhc2UgNzpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBDbihicix0aGlzLDQsNykpLCEodGhpcy5iLmk8PTEmJighdGhpcy5jJiYodGhpcy5jPW5ldyBDbihicix0aGlzLDUsOCkpLHRoaXMuYy5pPD0xKSk7Y2FzZSA4OnJldHVybiB3Xyh0aGlzKTtjYXNlIDk6cmV0dXJuIGZ2KHRoaXMpO2Nhc2UgMTA6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgQ24oYnIsdGhpcyw0LDcpKSx0aGlzLmIuaSE9MCYmKCF0aGlzLmMmJih0aGlzLmM9bmV3IENuKGJyLHRoaXMsNSw4KSksdGhpcy5jLmkhPTApfXJldHVybiB2eXQodGhpcyxlKX0sbC5zaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlKXtjYXNlIDM6b2F0KHRoaXMsdShuLDMzKSk7cmV0dXJuO2Nhc2UgNDohdGhpcy5iJiYodGhpcy5iPW5ldyBDbihicix0aGlzLDQsNykpLHhyKHRoaXMuYiksIXRoaXMuYiYmKHRoaXMuYj1uZXcgQ24oYnIsdGhpcyw0LDcpKSxpcyh0aGlzLmIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5jJiYodGhpcy5jPW5ldyBDbihicix0aGlzLDUsOCkpLHhyKHRoaXMuYyksIXRoaXMuYyYmKHRoaXMuYz1uZXcgQ24oYnIsdGhpcyw1LDgpKSxpcyh0aGlzLmMsdShuLDE0KSk7cmV0dXJuO2Nhc2UgNjohdGhpcy5hJiYodGhpcy5hPW5ldyBmZShKaSx0aGlzLDYsNikpLHhyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgZmUoSmksdGhpcyw2LDYpKSxpcyh0aGlzLmEsdShuLDE0KSk7cmV0dXJufXc0dCh0aGlzLGUsbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gSmMoKSxWQXR9LGwuQmg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMzpvYXQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA0OiF0aGlzLmImJih0aGlzLmI9bmV3IENuKGJyLHRoaXMsNCw3KSkseHIodGhpcy5iKTtyZXR1cm47Y2FzZSA1OiF0aGlzLmMmJih0aGlzLmM9bmV3IENuKGJyLHRoaXMsNSw4KSkseHIodGhpcy5jKTtyZXR1cm47Y2FzZSA2OiF0aGlzLmEmJih0aGlzLmE9bmV3IGZlKEppLHRoaXMsNiw2KSkseHIodGhpcy5hKTtyZXR1cm59Wnl0KHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJGxlKHRoaXMpfSxGKE0yLCJFbGtFZGdlSW1wbCIsMzUyKSxEKDQzOSwxOTg1LHsxMDU6MSw0MTM6MSwyMDI6MSw0Mzk6MSw5NDoxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0sYWQpLGwuUWc9ZnVuY3Rpb24oZSl7cmV0dXJuIHI0dCh0aGlzLGUpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2goZSl7Y2FzZSAxOnJldHVybiB0aGlzLmo7Y2FzZSAyOnJldHVybiB0aGlzLms7Y2FzZSAzOnJldHVybiB0aGlzLmI7Y2FzZSA0OnJldHVybiB0aGlzLmM7Y2FzZSA1OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IEFzKEdoLHRoaXMsNSkpLHRoaXMuYTtjYXNlIDY6cmV0dXJuIFNRdCh0aGlzKTtjYXNlIDc6cmV0dXJuIG4/d3N0KHRoaXMpOnRoaXMuaTtjYXNlIDg6cmV0dXJuIG4/YnN0KHRoaXMpOnRoaXMuZjtjYXNlIDk6cmV0dXJuIXRoaXMuZyYmKHRoaXMuZz1uZXcgQ24oSmksdGhpcyw5LDEwKSksdGhpcy5nO2Nhc2UgMTA6cmV0dXJuIXRoaXMuZSYmKHRoaXMuZT1uZXcgQ24oSmksdGhpcywxMCw5KSksdGhpcy5lO2Nhc2UgMTE6cmV0dXJuIHRoaXMuZH1yZXR1cm4gWjN0KHRoaXMsZSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGg7c3dpdGNoKG4pe2Nhc2UgNjpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD9yNHQodGhpcyxyKTp0aGlzLkNiLmloKHRoaXMsLTEtbyxudWxsLHIpKSksZXd0KHRoaXMsdShlLDc5KSxyKTtjYXNlIDk6cmV0dXJuIXRoaXMuZyYmKHRoaXMuZz1uZXcgQ24oSmksdGhpcyw5LDEwKSksWmModGhpcy5nLGUscik7Y2FzZSAxMDpyZXR1cm4hdGhpcy5lJiYodGhpcy5lPW5ldyBDbihKaSx0aGlzLDEwLDkpKSxaYyh0aGlzLmUsZSxyKX1yZXR1cm4gaD11KHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fChKYygpLGFVKSksbiksNjYpLGguTmooKS5Raih0aGlzLHN1KHRoaXMpLG4tSm4oKEpjKCksYVUpKSxlLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2gobil7Y2FzZSA1OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IEFzKEdoLHRoaXMsNSkpLEJhKHRoaXMuYSxlLHIpO2Nhc2UgNjpyZXR1cm4gZXd0KHRoaXMsbnVsbCxyKTtjYXNlIDk6cmV0dXJuIXRoaXMuZyYmKHRoaXMuZz1uZXcgQ24oSmksdGhpcyw5LDEwKSksQmEodGhpcy5nLGUscik7Y2FzZSAxMDpyZXR1cm4hdGhpcy5lJiYodGhpcy5lPW5ldyBDbihKaSx0aGlzLDEwLDkpKSxCYSh0aGlzLmUsZSxyKX1yZXR1cm4gJDR0KHRoaXMsZSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDE6cmV0dXJuIHRoaXMuaiE9MDtjYXNlIDI6cmV0dXJuIHRoaXMuayE9MDtjYXNlIDM6cmV0dXJuIHRoaXMuYiE9MDtjYXNlIDQ6cmV0dXJuIHRoaXMuYyE9MDtjYXNlIDU6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wO2Nhc2UgNjpyZXR1cm4hIVNRdCh0aGlzKTtjYXNlIDc6cmV0dXJuISF0aGlzLmk7Y2FzZSA4OnJldHVybiEhdGhpcy5mO2Nhc2UgOTpyZXR1cm4hIXRoaXMuZyYmdGhpcy5nLmkhPTA7Y2FzZSAxMDpyZXR1cm4hIXRoaXMuZSYmdGhpcy5lLmkhPTA7Y2FzZSAxMTpyZXR1cm4gdGhpcy5kIT1udWxsfXJldHVybiBRdnQodGhpcyxlKX0sbC5zaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlKXtjYXNlIDE6RzgodGhpcyxYdCh5ZShuKSkpO3JldHVybjtjYXNlIDI6VzgodGhpcyxYdCh5ZShuKSkpO3JldHVybjtjYXNlIDM6VjgodGhpcyxYdCh5ZShuKSkpO3JldHVybjtjYXNlIDQ6VTgodGhpcyxYdCh5ZShuKSkpO3JldHVybjtjYXNlIDU6IXRoaXMuYSYmKHRoaXMuYT1uZXcgQXMoR2gsdGhpcyw1KSkseHIodGhpcy5hKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBBcyhHaCx0aGlzLDUpKSxpcyh0aGlzLmEsdShuLDE0KSk7cmV0dXJuO2Nhc2UgNjp6Y2UodGhpcyx1KG4sNzkpKTtyZXR1cm47Y2FzZSA3Omx6KHRoaXMsdShuLDgyKSk7cmV0dXJuO2Nhc2UgODp1eih0aGlzLHUobiw4MikpO3JldHVybjtjYXNlIDk6IXRoaXMuZyYmKHRoaXMuZz1uZXcgQ24oSmksdGhpcyw5LDEwKSkseHIodGhpcy5nKSwhdGhpcy5nJiYodGhpcy5nPW5ldyBDbihKaSx0aGlzLDksMTApKSxpcyh0aGlzLmcsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTA6IXRoaXMuZSYmKHRoaXMuZT1uZXcgQ24oSmksdGhpcywxMCw5KSkseHIodGhpcy5lKSwhdGhpcy5lJiYodGhpcy5lPW5ldyBDbihKaSx0aGlzLDEwLDkpKSxpcyh0aGlzLmUsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTE6dXl0KHRoaXMsQnIobikpO3JldHVybn1CeXQodGhpcyxlLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIEpjKCksYVV9LGwuQmg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMTpHOCh0aGlzLDApO3JldHVybjtjYXNlIDI6VzgodGhpcywwKTtyZXR1cm47Y2FzZSAzOlY4KHRoaXMsMCk7cmV0dXJuO2Nhc2UgNDpVOCh0aGlzLDApO3JldHVybjtjYXNlIDU6IXRoaXMuYSYmKHRoaXMuYT1uZXcgQXMoR2gsdGhpcyw1KSkseHIodGhpcy5hKTtyZXR1cm47Y2FzZSA2OnpjZSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDc6bHoodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA4OnV6KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgOTohdGhpcy5nJiYodGhpcy5nPW5ldyBDbihKaSx0aGlzLDksMTApKSx4cih0aGlzLmcpO3JldHVybjtjYXNlIDEwOiF0aGlzLmUmJih0aGlzLmU9bmV3IENuKEppLHRoaXMsMTAsOSkpLHhyKHRoaXMuZSk7cmV0dXJuO2Nhc2UgMTE6dXl0KHRoaXMsbnVsbCk7cmV0dXJufV95dCh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHNjZSh0aGlzKX0sbC5iPTAsbC5jPTAsbC5kPW51bGwsbC5qPTAsbC5rPTAsRihNMiwiRWxrRWRnZVNlY3Rpb25JbXBsIiw0MzkpLEQoMTUwLDExNSx7MTA1OjEsOTI6MSw5MDoxLDE0NzoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDE1MDoxLDExNDoxLDExNToxfSksbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHM7cmV0dXJuIGU9PTA/KCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx0aGlzLkFiKTp1aCh0aGlzLGUtSm4odGhpcy56aCgpKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLGUpLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87cmV0dXJuIG49PTA/KCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxaYyh0aGlzLkFiLGUscikpOihvPXUoeW4oKHM9dShEbih0aGlzLDE2KSwyNiksc3x8dGhpcy56aCgpKSxuKSw2Niksby5OaigpLlFqKHRoaXMsc3UodGhpcyksbi1Kbih0aGlzLnpoKCkpLGUscikpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3JldHVybiBuPT0wPyghdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksQmEodGhpcy5BYixlLHIpKToobz11KHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fHRoaXMuemgoKSksbiksNjYpLG8uTmooKS5Saih0aGlzLHN1KHRoaXMpLG4tSm4odGhpcy56aCgpKSxlLHIpKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gZT09MD8hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDpvaCh0aGlzLGUtSm4odGhpcy56aCgpKSx5bigobj11KERuKHRoaXMsMTYpLDI2KSxufHx0aGlzLnpoKCkpLGUpKX0sbC5vaD1mdW5jdGlvbihlKXtyZXR1cm4gTHh0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksaXModGhpcy5BYix1KG4sMTQpKTtyZXR1cm59Z2godGhpcyxlLUpuKHRoaXMuemgoKSkseW4oKHI9dShEbih0aGlzLDE2KSwyNikscnx8dGhpcy56aCgpKSxlKSxuKX0sbC51aD1mdW5jdGlvbihlKXtvNih0aGlzLDEyOCxlKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBkbigpLHA1ZX0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKTtyZXR1cm59ZmgodGhpcyxlLUpuKHRoaXMuemgoKSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8dGhpcy56aCgpKSxlKSl9LGwuR2g9ZnVuY3Rpb24oKXt0aGlzLkJifD0xfSxsLkhoPWZ1bmN0aW9uKGUpe3JldHVybiBrXyh0aGlzLGUpfSxsLkJiPTAsRihNbiwiRU1vZGVsRWxlbWVudEltcGwiLDE1MCksRCg3MDQsMTUwLHsxMDU6MSw5MjoxLDkwOjEsNDcxOjEsMTQ3OjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTUwOjEsMTE0OjEsMTE1OjF9LEpCKSxsLkloPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGJoZSh0aGlzLGUsbil9LGwuSmg9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saDtpZih0aGlzLmEhPVJsKGUpfHxlLkJiJjI1Nil0aHJvdyBpdChuZXcgRm4oS2N0K2UuemIrQ3YpKTtmb3Iocz1BbyhlKTtMYyhzLmEpLmkhPTA7KXtpZihyPXUoQUkocywwLChuPXUoQXQoTGMocy5hKSwwKSw4NyksaD1uLmMsX3QoaCw4OCk/dShoLDI2KTooZG4oKSxLaCkpKSwyNiksaHYocikpcmV0dXJuIG89UmwocikuTmgoKS5KaChyKSx1KG8sNDkpLnRoKGUpLG87cz1BbyhyKX1yZXR1cm4oZS5EIT1udWxsP2UuRDplLkIpPT0iamF2YS51dGlsLk1hcCRFbnRyeSI/bmV3IGhLdChlKTpuZXcgend0KGUpfSxsLktoPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHZ2KHRoaXMsZSxuKX0sbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuYX1yZXR1cm4gdWgodGhpcyxlLUpuKChkbigpLERiKSkseW4oKHM9dShEbih0aGlzLDE2KSwyNiksc3x8RGIpLGUpLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksWmModGhpcy5BYixlLHIpO2Nhc2UgMTpyZXR1cm4gdGhpcy5hJiYocj11KHRoaXMuYSw0OSkuaWgodGhpcyw0LGkxLHIpKSxYeXQodGhpcyx1KGUsMjM1KSxyKX1yZXR1cm4gbz11KHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fChkbigpLERiKSksbiksNjYpLG8uTmooKS5Raih0aGlzLHN1KHRoaXMpLG4tSm4oKGRuKCksRGIpKSxlLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLEJhKHRoaXMuQWIsZSxyKTtjYXNlIDE6cmV0dXJuIFh5dCh0aGlzLG51bGwscil9cmV0dXJuIG89dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxEYikpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxzdSh0aGlzKSxuLUpuKChkbigpLERiKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4hIXRoaXMuYX1yZXR1cm4gb2godGhpcyxlLUpuKChkbigpLERiKSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8RGIpLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxpcyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6emFlKHRoaXMsdShuLDIzNSkpO3JldHVybn1naCh0aGlzLGUtSm4oKGRuKCksRGIpKSx5bigocj11KERuKHRoaXMsMTYpLDI2KSxyfHxEYiksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxEYn0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOnphZSh0aGlzLG51bGwpO3JldHVybn1maCh0aGlzLGUtSm4oKGRuKCksRGIpKSx5bigobj11KERuKHRoaXMsMTYpLDI2KSxufHxEYiksZSkpfTt2YXIgYUEsWUF0LFo0ZTtGKE1uLCJFRmFjdG9yeUltcGwiLDcwNCksRCh4Ziw3MDQsezEwNToxLDIwMTQ6MSw5MjoxLDkwOjEsNDcxOjEsMTQ3OjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTUwOjEsMTE0OjEsMTE1OjF9LGF4KSxsLkloPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUueWooKSl7Y2FzZSAxMjpyZXR1cm4gdShuLDE0NikudGcoKTtjYXNlIDEzOnJldHVybiAkbyhuKTtkZWZhdWx0OnRocm93IGl0KG5ldyBGbihRRStlLm5lKCkrQ3YpKX19LGwuSmg9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHYsaztzd2l0Y2goZS5HPT0tMSYmKGUuRz0obj1SbChlKSxuP0hnKG4uTWgoKSxlKTotMSkpLGUuRyl7Y2FzZSA0OnJldHVybiBoPW5ldyBaVCxoO2Nhc2UgNjpyZXR1cm4gZD1uZXcgVnB0LGQ7Y2FzZSA3OnJldHVybiB2PW5ldyBHcHQsdjtjYXNlIDg6cmV0dXJuIHM9bmV3IHB3LHM7Y2FzZSA5OnJldHVybiByPW5ldyB4cCxyO2Nhc2UgMTA6cmV0dXJuIG89bmV3IGFkLG87Y2FzZSAxMTpyZXR1cm4gaz1uZXcgYUIsaztkZWZhdWx0OnRocm93IGl0KG5ldyBGbihLY3QrZS56YitDdikpfX0sbC5LaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlLnlqKCkpe2Nhc2UgMTM6Y2FzZSAxMjpyZXR1cm4gbnVsbDtkZWZhdWx0OnRocm93IGl0KG5ldyBGbihRRStlLm5lKCkrQ3YpKX19LEYoTTIsIkVsa0dyYXBoRmFjdG9yeUltcGwiLHhmKSxEKDQzOCwxNTAsezEwNToxLDkyOjEsOTA6MSwxNDc6MSwxOTE6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxNTA6MSwxMTQ6MSwxMTU6MX0pLGwuV2c9ZnVuY3Rpb24oKXt2YXIgZSxuO3JldHVybiBuPShlPXUoRG4odGhpcywxNiksMjYpLGp2dCh2ZChlfHx0aGlzLnpoKCkpKSksbj09bnVsbD8oWUMoKSxZQygpLFJmdCk6bmV3IElXdCh0aGlzLG4pfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy5uZSgpfXJldHVybiB1aCh0aGlzLGUtSm4odGhpcy56aCgpKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLGUpLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGx9cmV0dXJuIG9oKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fHRoaXMuemgoKSksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLGlzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTp0aGlzLkxoKEJyKG4pKTtyZXR1cm59Z2godGhpcyxlLUpuKHRoaXMuemgoKSkseW4oKHI9dShEbih0aGlzLDE2KSwyNikscnx8dGhpcy56aCgpKSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBkbigpLGI1ZX0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOnRoaXMuTGgobnVsbCk7cmV0dXJufWZoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fHRoaXMuemgoKSksZSkpfSxsLm5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuemJ9LGwuTGg9ZnVuY3Rpb24oZSl7UWModGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBKOSh0aGlzKX0sbC56Yj1udWxsLEYoTW4sIkVOYW1lZEVsZW1lbnRJbXBsIiw0MzgpLEQoMTc5LDQzOCx7MTA1OjEsOTI6MSw5MDoxLDE0NzoxLDE5MToxLDU2OjEsMjM1OjEsMTA4OjEsNDk6MSw5NzoxLDE1MDoxLDE3OToxLDExNDoxLDExNToxLDY3NToxfSxmUXQpLGwuUWc9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhZSh0aGlzLGUpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIHRoaXMueWI7Y2FzZSAzOnJldHVybiB0aGlzLnhiO2Nhc2UgNDpyZXR1cm4gdGhpcy5zYjtjYXNlIDU6cmV0dXJuIXRoaXMucmImJih0aGlzLnJiPW5ldyBHbSh0aGlzLHMxLHRoaXMpKSx0aGlzLnJiO2Nhc2UgNjpyZXR1cm4hdGhpcy52YiYmKHRoaXMudmI9bmV3IFJ4KGkxLHRoaXMsNiw3KSksdGhpcy52YjtjYXNlIDc6cmV0dXJuIG4/dGhpcy5EYj4+MTY9PTc/dSh0aGlzLkNiLDIzNSk6bnVsbDpBUXQodGhpcyl9cmV0dXJuIHVoKHRoaXMsZS1KbigoZG4oKSx1cCkpLHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fHVwKSxlKSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGg7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksWmModGhpcy5BYixlLHIpO2Nhc2UgNDpyZXR1cm4gdGhpcy5zYiYmKHI9dSh0aGlzLnNiLDQ5KS5paCh0aGlzLDEsc0EscikpLHQzdCh0aGlzLHUoZSw0NzEpLHIpO2Nhc2UgNTpyZXR1cm4hdGhpcy5yYiYmKHRoaXMucmI9bmV3IEdtKHRoaXMsczEsdGhpcykpLFpjKHRoaXMucmIsZSxyKTtjYXNlIDY6cmV0dXJuIXRoaXMudmImJih0aGlzLnZiPW5ldyBSeChpMSx0aGlzLDYsNykpLFpjKHRoaXMudmIsZSxyKTtjYXNlIDc6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/ZWFlKHRoaXMscik6dGhpcy5DYi5paCh0aGlzLC0xLW8sbnVsbCxyKSkpLEhsKHRoaXMsZSw3LHIpfXJldHVybiBoPXUoeW4oKHM9dShEbih0aGlzLDE2KSwyNiksc3x8KGRuKCksdXApKSxuKSw2NiksaC5OaigpLlFqKHRoaXMsc3UodGhpcyksbi1KbigoZG4oKSx1cCkpLGUscil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksQmEodGhpcy5BYixlLHIpO2Nhc2UgNDpyZXR1cm4gdDN0KHRoaXMsbnVsbCxyKTtjYXNlIDU6cmV0dXJuIXRoaXMucmImJih0aGlzLnJiPW5ldyBHbSh0aGlzLHMxLHRoaXMpKSxCYSh0aGlzLnJiLGUscik7Y2FzZSA2OnJldHVybiF0aGlzLnZiJiYodGhpcy52Yj1uZXcgUngoaTEsdGhpcyw2LDcpKSxCYSh0aGlzLnZiLGUscik7Y2FzZSA3OnJldHVybiBIbCh0aGlzLG51bGwsNyxyKX1yZXR1cm4gbz11KHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fChkbigpLHVwKSksbiksNjYpLG8uTmooKS5Saih0aGlzLHN1KHRoaXMpLG4tSm4oKGRuKCksdXApKSxlLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4gdGhpcy55YiE9bnVsbDtjYXNlIDM6cmV0dXJuIHRoaXMueGIhPW51bGw7Y2FzZSA0OnJldHVybiEhdGhpcy5zYjtjYXNlIDU6cmV0dXJuISF0aGlzLnJiJiZ0aGlzLnJiLmkhPTA7Y2FzZSA2OnJldHVybiEhdGhpcy52YiYmdGhpcy52Yi5pIT0wO2Nhc2UgNzpyZXR1cm4hIUFRdCh0aGlzKX1yZXR1cm4gb2godGhpcyxlLUpuKChkbigpLHVwKSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8dXApLGUpKX0sbC5vaD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj1Md24odGhpcyxlKSxufHxMeHQodGhpcyxlKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxpcyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6UWModGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgMjp3eih0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAzOmJ6KHRoaXMsQnIobikpO3JldHVybjtjYXNlIDQ6SHN0KHRoaXMsdShuLDQ3MSkpO3JldHVybjtjYXNlIDU6IXRoaXMucmImJih0aGlzLnJiPW5ldyBHbSh0aGlzLHMxLHRoaXMpKSx4cih0aGlzLnJiKSwhdGhpcy5yYiYmKHRoaXMucmI9bmV3IEdtKHRoaXMsczEsdGhpcykpLGlzKHRoaXMucmIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgNjohdGhpcy52YiYmKHRoaXMudmI9bmV3IFJ4KGkxLHRoaXMsNiw3KSkseHIodGhpcy52YiksIXRoaXMudmImJih0aGlzLnZiPW5ldyBSeChpMSx0aGlzLDYsNykpLGlzKHRoaXMudmIsdShuLDE0KSk7cmV0dXJufWdoKHRoaXMsZS1KbigoZG4oKSx1cCkpLHluKChyPXUoRG4odGhpcywxNiksMjYpLHJ8fHVwKSxlKSxuKX0sbC52aD1mdW5jdGlvbihlKXt2YXIgbixyO2lmKGUmJnRoaXMucmIpZm9yKHI9bmV3IG5yKHRoaXMucmIpO3IuZSE9ci5pLmdjKCk7KW49ZHIociksX3QobiwzNTEpJiYodShuLDM1MSkudz1udWxsKTtvNih0aGlzLDY0LGUpfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKCksdXB9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpRYyh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6d3oodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAzOmJ6KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNDpIc3QodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA1OiF0aGlzLnJiJiYodGhpcy5yYj1uZXcgR20odGhpcyxzMSx0aGlzKSkseHIodGhpcy5yYik7cmV0dXJuO2Nhc2UgNjohdGhpcy52YiYmKHRoaXMudmI9bmV3IFJ4KGkxLHRoaXMsNiw3KSkseHIodGhpcy52Yik7cmV0dXJufWZoKHRoaXMsZS1KbigoZG4oKSx1cCkpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fHVwKSxlKSl9LGwuR2g9ZnVuY3Rpb24oKXtNc3QodGhpcyl9LGwuTWg9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5yYiYmKHRoaXMucmI9bmV3IEdtKHRoaXMsczEsdGhpcykpLHRoaXMucmJ9LGwuTmg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zYn0sbC5PaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVifSxsLlBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueGJ9LGwuUWg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55Yn0sbC5SaD1mdW5jdGlvbihlKXt0aGlzLnViPWV9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5EYiY2ND9KOSh0aGlzKTooZT1uZXcgX2goSjkodGhpcykpLGUuYSs9IiAobnNVUkk6ICIsZ28oZSx0aGlzLnliKSxlLmErPSIsIG5zUHJlZml4OiAiLGdvKGUsdGhpcy54YiksZS5hKz0iKSIsZS5hKX0sbC54Yj1udWxsLGwueWI9bnVsbCxGKE1uLCJFUGFja2FnZUltcGwiLDE3OSksRCg1NTUsMTc5LHsxMDU6MSwyMDE2OjEsNTU1OjEsOTI6MSw5MDoxLDE0NzoxLDE5MToxLDU2OjEsMjM1OjEsMTA4OjEsNDk6MSw5NzoxLDE1MDoxLDE3OToxLDExNDoxLDExNToxLDY3NToxfSxnY2UpLGwucT0hMSxsLnI9ITE7dmFyIEo0ZT0hMTtGKE0yLCJFbGtHcmFwaFBhY2thZ2VJbXBsIiw1NTUpLEQoMzU0LDcyNCx7MTA1OjEsNDEzOjEsMTYwOjEsMTM3OjEsNDcwOjEsMzU0OjEsOTQ6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9LFpUKSxsLlFnPWZ1bmN0aW9uKGUpe3JldHVybiBpNHQodGhpcyxlKX0sbC5fZz1mdW5jdGlvbihlLG4scil7c3dpdGNoKGUpe2Nhc2UgNzpyZXR1cm4gTFF0KHRoaXMpO2Nhc2UgODpyZXR1cm4gdGhpcy5hfXJldHVybiBmM3QodGhpcyxlLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChuKXtjYXNlIDc6cmV0dXJuIHRoaXMuQ2ImJihyPShzPXRoaXMuRGI+PjE2LHM+PTA/aTR0KHRoaXMscik6dGhpcy5DYi5paCh0aGlzLC0xLXMsbnVsbCxyKSkpLG52dCh0aGlzLHUoZSwxNjApLHIpfXJldHVybiBqc3QodGhpcyxlLG4scil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBuPT03P252dCh0aGlzLG51bGwscik6RWl0KHRoaXMsZSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDc6cmV0dXJuISFMUXQodGhpcyk7Y2FzZSA4OnJldHVybiFobigiIix0aGlzLmEpfXJldHVybiBtM3QodGhpcyxlKX0sbC5zaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlKXtjYXNlIDc6RjV0KHRoaXMsdShuLDE2MCkpO3JldHVybjtjYXNlIDg6bnl0KHRoaXMsQnIobikpO3JldHVybn12NHQodGhpcyxlLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIEpjKCksR0F0fSxsLkJoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDc6RjV0KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgODpueXQodGhpcywiIik7cmV0dXJufVQzdCh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGVvZSh0aGlzKX0sbC5hPSIiLEYoTTIsIkVsa0xhYmVsSW1wbCIsMzU0KSxEKDIzOSw3MjUsezEwNToxLDQxMzoxLDgyOjEsMTYwOjEsMzM6MSw0NzA6MSwyMzk6MSw5NDoxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0sVnB0KSxsLlFnPWZ1bmN0aW9uKGUpe3JldHVybiBjNHQodGhpcyxlKX0sbC5fZz1mdW5jdGlvbihlLG4scil7c3dpdGNoKGUpe2Nhc2UgOTpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBmZShnbCx0aGlzLDksOSkpLHRoaXMuYztjYXNlIDEwOnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGZlKHJzLHRoaXMsMTAsMTEpKSx0aGlzLmE7Y2FzZSAxMTpyZXR1cm4gZXModGhpcyk7Y2FzZSAxMjpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBmZShZcyx0aGlzLDEyLDMpKSx0aGlzLmI7Y2FzZSAxMzpyZXR1cm4gTm4oKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBmZShycyx0aGlzLDEwLDExKSksdGhpcy5hLmk+MH1yZXR1cm4gVTN0KHRoaXMsZSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2gobil7Y2FzZSA5OnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IGZlKGdsLHRoaXMsOSw5KSksWmModGhpcy5jLGUscik7Y2FzZSAxMDpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBmZShycyx0aGlzLDEwLDExKSksWmModGhpcy5hLGUscik7Y2FzZSAxMTpyZXR1cm4gdGhpcy5DYiYmKHI9KHM9dGhpcy5EYj4+MTYscz49MD9jNHQodGhpcyxyKTp0aGlzLkNiLmloKHRoaXMsLTEtcyxudWxsLHIpKSksbHd0KHRoaXMsdShlLDMzKSxyKTtjYXNlIDEyOnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IGZlKFlzLHRoaXMsMTIsMykpLFpjKHRoaXMuYixlLHIpfXJldHVybiBoNHQodGhpcyxlLG4scil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3N3aXRjaChuKXtjYXNlIDk6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgZmUoZ2wsdGhpcyw5LDkpKSxCYSh0aGlzLmMsZSxyKTtjYXNlIDEwOnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGZlKHJzLHRoaXMsMTAsMTEpKSxCYSh0aGlzLmEsZSxyKTtjYXNlIDExOnJldHVybiBsd3QodGhpcyxudWxsLHIpO2Nhc2UgMTI6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgZmUoWXMsdGhpcywxMiwzKSksQmEodGhpcy5iLGUscil9cmV0dXJuIGY0dCh0aGlzLGUsbixyKX0sbC5saD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSA5OnJldHVybiEhdGhpcy5jJiZ0aGlzLmMuaSE9MDtjYXNlIDEwOnJldHVybiEhdGhpcy5hJiZ0aGlzLmEuaSE9MDtjYXNlIDExOnJldHVybiEhZXModGhpcyk7Y2FzZSAxMjpyZXR1cm4hIXRoaXMuYiYmdGhpcy5iLmkhPTA7Y2FzZSAxMzpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBmZShycyx0aGlzLDEwLDExKSksdGhpcy5hLmk+MH1yZXR1cm4gRnl0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSA5OiF0aGlzLmMmJih0aGlzLmM9bmV3IGZlKGdsLHRoaXMsOSw5KSkseHIodGhpcy5jKSwhdGhpcy5jJiYodGhpcy5jPW5ldyBmZShnbCx0aGlzLDksOSkpLGlzKHRoaXMuYyx1KG4sMTQpKTtyZXR1cm47Y2FzZSAxMDohdGhpcy5hJiYodGhpcy5hPW5ldyBmZShycyx0aGlzLDEwLDExKSkseHIodGhpcy5hKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBmZShycyx0aGlzLDEwLDExKSksaXModGhpcy5hLHUobiwxNCkpO3JldHVybjtjYXNlIDExOkk1dCh0aGlzLHUobiwzMykpO3JldHVybjtjYXNlIDEyOiF0aGlzLmImJih0aGlzLmI9bmV3IGZlKFlzLHRoaXMsMTIsMykpLHhyKHRoaXMuYiksIXRoaXMuYiYmKHRoaXMuYj1uZXcgZmUoWXMsdGhpcywxMiwzKSksaXModGhpcy5iLHUobiwxNCkpO3JldHVybn14NXQodGhpcyxlLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIEpjKCksVUF0fSxsLkJoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDk6IXRoaXMuYyYmKHRoaXMuYz1uZXcgZmUoZ2wsdGhpcyw5LDkpKSx4cih0aGlzLmMpO3JldHVybjtjYXNlIDEwOiF0aGlzLmEmJih0aGlzLmE9bmV3IGZlKHJzLHRoaXMsMTAsMTEpKSx4cih0aGlzLmEpO3JldHVybjtjYXNlIDExOkk1dCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDEyOiF0aGlzLmImJih0aGlzLmI9bmV3IGZlKFlzLHRoaXMsMTIsMykpLHhyKHRoaXMuYik7cmV0dXJufVIzdCh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFg1dCh0aGlzKX0sRihNMiwiRWxrTm9kZUltcGwiLDIzOSksRCgxODYsNzI1LHsxMDU6MSw0MTM6MSw4MjoxLDE2MDoxLDExODoxLDQ3MDoxLDE4NjoxLDk0OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxLDExNToxfSxHcHQpLGwuUWc9ZnVuY3Rpb24oZSl7cmV0dXJuIHM0dCh0aGlzLGUpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gZT09OT9UMSh0aGlzKTpVM3QodGhpcyxlLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChuKXtjYXNlIDk6cmV0dXJuIHRoaXMuQ2ImJihyPShzPXRoaXMuRGI+PjE2LHM+PTA/czR0KHRoaXMscik6dGhpcy5DYi5paCh0aGlzLC0xLXMsbnVsbCxyKSkpLG53dCh0aGlzLHUoZSwzMykscil9cmV0dXJuIGg0dCh0aGlzLGUsbixyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7cmV0dXJuIG49PTk/bnd0KHRoaXMsbnVsbCxyKTpmNHQodGhpcyxlLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PTk/ISFUMSh0aGlzKTpGeXQodGhpcyxlKX0sbC5zaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlKXtjYXNlIDk6RDV0KHRoaXMsdShuLDMzKSk7cmV0dXJufXg1dCh0aGlzLGUsbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gSmMoKSxXQXR9LGwuQmg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgOTpENXQodGhpcyxudWxsKTtyZXR1cm59UjN0KHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4genVlKHRoaXMpfSxGKE0yLCJFbGtQb3J0SW1wbCIsMTg2KTt2YXIgdDVlPUtpKFJhLCJCYXNpY0VNYXAvRW50cnkiKTtEKDEwOTIsMTE1LHsxMDU6MSw0MjoxLDkyOjEsOTA6MSwxMzM6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0sYUIpLGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLmNkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBQdyh0aGlzKX0sbC5VaD1mdW5jdGlvbihlKXtyeXQodGhpcyx1KGUsMTQ2KSl9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIHRoaXMuYjtjYXNlIDE6cmV0dXJuIHRoaXMuY31yZXR1cm4gWHoodGhpcyxlLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuYjtjYXNlIDE6cmV0dXJuIHRoaXMuYyE9bnVsbH1yZXR1cm4gZnN0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSAwOnJ5dCh0aGlzLHUobiwxNDYpKTtyZXR1cm47Y2FzZSAxOmF5dCh0aGlzLG4pO3JldHVybn1Yc3QodGhpcyxlLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIEpjKCksU2J9LGwuQmg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMDpyeXQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAxOmF5dCh0aGlzLG51bGwpO3JldHVybn1Hc3QodGhpcyxlKX0sbC5TaD1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLmE9PS0xJiYoZT10aGlzLmIsdGhpcy5hPWU/SGkoZSk6MCksdGhpcy5hfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sbC5UaD1mdW5jdGlvbihlKXt0aGlzLmE9ZX0sbC5lZD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj10aGlzLmMsYXl0KHRoaXMsZSksbn0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLkRiJjY0P21mKHRoaXMpOihlPW5ldyBNcCxHcihHcihHcihlLHRoaXMuYj90aGlzLmIudGcoKTpfdSksVW90KSxiOSh0aGlzLmMpKSxlLmEpfSxsLmE9LTEsbC5jPW51bGw7dmFyIEh2PUYoTTIsIkVsa1Byb3BlcnR5VG9WYWx1ZU1hcEVudHJ5SW1wbCIsMTA5Mik7RCg5ODQsMSx7fSxvQiksRihtYSwiSnNvbkFkYXB0ZXIiLDk4NCksRCgyMTAsNjAsUTAsdWQpLEYobWEsIkpzb25JbXBvcnRFeGNlcHRpb24iLDIxMCksRCg4NTcsMSx7fSxuYWUpLEYobWEsIkpzb25JbXBvcnRlciIsODU3KSxEKDg5MSwxLHt9LERHdCksRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQwJFR5cGUiLDg5MSksRCg4OTIsMSx7fSxJR3QpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkMSRUeXBlIiw4OTIpLEQoOTAwLDEse30sZnp0KSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDEwJFR5cGUiLDkwMCksRCg5MDIsMSx7fSxPR3QpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkMTEkVHlwZSIsOTAyKSxEKDkwMywxLHt9LFBHdCksRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQxMiRUeXBlIiw5MDMpLEQoOTA5LDEse30sVVh0KSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDEzJFR5cGUiLDkwOSksRCg5MDgsMSx7fSxHWHQpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkMTQkVHlwZSIsOTA4KSxEKDkwNCwxLHt9LEZHdCksRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQxNSRUeXBlIiw5MDQpLEQoOTA1LDEse30sTkd0KSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDE2JFR5cGUiLDkwNSksRCg5MDYsMSx7fSxCR3QpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkMTckVHlwZSIsOTA2KSxEKDkwNywxLHt9LFJHdCksRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQxOCRUeXBlIiw5MDcpLEQoOTEyLDEse30sZHp0KSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDE5JFR5cGUiLDkxMiksRCg4OTMsMSx7fSxnenQpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkMiRUeXBlIiw4OTMpLEQoOTEwLDEse30scHp0KSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDIwJFR5cGUiLDkxMCksRCg5MTEsMSx7fSxienQpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkMjEkVHlwZSIsOTExKSxEKDkxNSwxLHt9LHd6dCksRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQyMiRUeXBlIiw5MTUpLEQoOTEzLDEse30sdnp0KSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDIzJFR5cGUiLDkxMyksRCg5MTQsMSx7fSxtenQpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkMjQkVHlwZSIsOTE0KSxEKDkxNywxLHt9LHl6dCksRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQyNSRUeXBlIiw5MTcpLEQoOTE2LDEse30seHp0KSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDI2JFR5cGUiLDkxNiksRCg5MTgsMSxVbixqR3QpLGwudGQ9ZnVuY3Rpb24oZSl7aW9uKHRoaXMuYix0aGlzLmEsQnIoZSkpfSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDI3JFR5cGUiLDkxOCksRCg5MTksMSxVbiwkR3QpLGwudGQ9ZnVuY3Rpb24oZSl7c29uKHRoaXMuYix0aGlzLmEsQnIoZSkpfSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDI4JFR5cGUiLDkxOSksRCg5MjAsMSx7fSx6R3QpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkMjkkVHlwZSIsOTIwKSxEKDg5NiwxLHt9LGt6dCksRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQzJFR5cGUiLDg5NiksRCg5MjEsMSx7fSxxR3QpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkMzAkVHlwZSIsOTIxKSxEKDkyMiwxLHt9LEV6dCksRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQzMSRUeXBlIiw5MjIpLEQoOTIzLDEse30sVHp0KSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDMyJFR5cGUiLDkyMyksRCg5MjQsMSx7fSxDenQpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkMzMkVHlwZSIsOTI0KSxEKDkyNSwxLHt9LF96dCksRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQzNCRUeXBlIiw5MjUpLEQoODU5LDEse30sU3p0KSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDM1JFR5cGUiLDg1OSksRCg5MjksMSx7fSxCWXQpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkMzYkVHlwZSIsOTI5KSxEKDkyNiwxLFVuLEF6dCksbC50ZD1mdW5jdGlvbihlKXtjYW4odGhpcy5hLHUoZSw0NjkpKX0sRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQzNyRUeXBlIiw5MjYpLEQoOTI3LDEsVW4sWUd0KSxsLnRkPWZ1bmN0aW9uKGUpe05YZSh0aGlzLmEsdGhpcy5iLHUoZSwyMDIpKX0sRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQzOCRUeXBlIiw5MjcpLEQoOTI4LDEsVW4sS0d0KSxsLnRkPWZ1bmN0aW9uKGUpe0JYZSh0aGlzLmEsdGhpcy5iLHUoZSwyMDIpKX0sRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQzOSRUeXBlIiw5MjgpLEQoODk0LDEse30sTHp0KSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDQkVHlwZSIsODk0KSxEKDkzMCwxLFVuLE16dCksbC50ZD1mdW5jdGlvbihlKXt1YW4odGhpcy5hLHUoZSw4KSl9LEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkNDAkVHlwZSIsOTMwKSxEKDg5NSwxLHt9LER6dCksRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQ1JFR5cGUiLDg5NSksRCg4OTksMSx7fSxJenQpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkNiRUeXBlIiw4OTkpLEQoODk3LDEse30sT3p0KSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDckVHlwZSIsODk3KSxEKDg5OCwxLHt9LFB6dCksRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQ4JFR5cGUiLDg5OCksRCg5MDEsMSx7fSxGenQpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkOSRUeXBlIiw5MDEpLEQoOTQ4LDEsVW4sTnp0KSxsLnRkPWZ1bmN0aW9uKGUpe1Z4KHRoaXMuYSxuZXcgVW0oQnIoZSkpKX0sRihtYSwiSnNvbk1ldGFEYXRhQ29udmVydGVyL2xhbWJkYSQwJFR5cGUiLDk0OCksRCg5NDksMSxVbixCenQpLGwudGQ9ZnVuY3Rpb24oZSl7Q25uKHRoaXMuYSx1KGUsMjM3KSl9LEYobWEsIkpzb25NZXRhRGF0YUNvbnZlcnRlci9sYW1iZGEkMSRUeXBlIiw5NDkpLEQoOTUwLDEsVW4sUnp0KSxsLnRkPWZ1bmN0aW9uKGUpe2tpbih0aGlzLmEsdShlLDE0OSkpfSxGKG1hLCJKc29uTWV0YURhdGFDb252ZXJ0ZXIvbGFtYmRhJDIkVHlwZSIsOTUwKSxEKDk1MSwxLFVuLGp6dCksbC50ZD1mdW5jdGlvbihlKXtfbm4odGhpcy5hLHUoZSwxNzUpKX0sRihtYSwiSnNvbk1ldGFEYXRhQ29udmVydGVyL2xhbWJkYSQzJFR5cGUiLDk1MSksRCgyMzcsMjIsezM6MSwzNToxLDIyOjEsMjM3OjF9LFB4KTt2YXIgb1UsY1UsRGZ0LHVVLGxVLGhVLElmdCxPZnQsZlU9anIocUksIkdyYXBoRmVhdHVyZSIsMjM3LEhyLFlvbixYdG4pLGU1ZTtEKDEzLDEsezM1OjEsMTQ2OjF9LFZpLFBzLG1uLGVvKSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBGUWUodGhpcyx1KGUsMTQ2KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIGRRdCh0aGlzLGUpfSxsLndnPWZ1bmN0aW9uKCl7cmV0dXJuIEllKHRoaXMpfSxsLnRnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBWZyh0aGlzLmIpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sRihxSSwiUHJvcGVydHkiLDEzKSxEKDgxOCwxLE9pLEVwdCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBKbG4odGhpcyx1KGUsOTQpLHUobiw5NCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYocUksIlByb3BlcnR5SG9sZGVyQ29tcGFyYXRvciIsODE4KSxEKDY5NSwxLHNhLFRwdCksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHVvbih0aGlzKX0sbC5RYj1mdW5jdGlvbigpe0lIdCgpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmF9LEYoREgsIkVsa0dyYXBoVXRpbC9BbmNlc3Rvckl0ZXJhdG9yIiw2OTUpO3ZhciBLQXQ9S2koUmEsIkVMaXN0Iik7RCg2Nyw1Mix7MjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDY3OjEsNTg6MX0pLGwuVmM9ZnVuY3Rpb24oZSxuKXtuXyh0aGlzLGUsbil9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIERyKHRoaXMsZSl9LGwuV2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gU3l0KHRoaXMsZSxuKX0sbC5HYz1mdW5jdGlvbihlKXtyZXR1cm4gaXModGhpcyxlKX0sbC5aaD1mdW5jdGlvbigpe3JldHVybiBuZXcgQngodGhpcyl9LGwuJGg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3ICRNKHRoaXMpfSxsLl9oPWZ1bmN0aW9uKGUpe3JldHVybiBERCh0aGlzLGUpfSxsLmFpPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuYmk9ZnVuY3Rpb24oZSxuKXt9LGwuY2k9ZnVuY3Rpb24oKXt9LGwuZGk9ZnVuY3Rpb24oZSxuKXtZcnQodGhpcyxlLG4pfSxsLmVpPWZ1bmN0aW9uKGUsbixyKXt9LGwuZmk9ZnVuY3Rpb24oZSxuKXt9LGwuZ2k9ZnVuY3Rpb24oZSxuLHIpe30sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gU3VlKHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4ga3l0KHRoaXMpfSxsLmhpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG5yKHRoaXMpfSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBOeCh0aGlzKX0sbC5aYz1mdW5jdGlvbihlKXt2YXIgbjtpZihuPXRoaXMuZ2MoKSxlPDB8fGU+bil0aHJvdyBpdChuZXcgcW0oZSxuKSk7cmV0dXJuIG5ldyBKbnQodGhpcyxlKX0sbC5qaT1mdW5jdGlvbihlLG4pe3RoaXMuaWkoZSx0aGlzLlhjKG4pKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gWCQodGhpcyxlKX0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiBufSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGg0KHRoaXMsZSxuKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBnM3QodGhpcyl9LGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5vaT1mdW5jdGlvbihlLG4pe3JldHVybiBzRSh0aGlzLG4pfSxGKFJhLCJBYnN0cmFjdEVMaXN0Iiw2NyksRCg2Myw2NyxMZCxveCxRdyxneXQpLGwuVmg9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gJHN0KHRoaXMsZSxuKX0sbC5XaD1mdW5jdGlvbihlKXtyZXR1cm4gTHNlKHRoaXMsZSl9LGwuWGg9ZnVuY3Rpb24oZSxuKXtVRCh0aGlzLGUsbil9LGwuWWg9ZnVuY3Rpb24oZSl7Z0QodGhpcyxlKX0sbC5waT1mdW5jdGlvbihlKXtyZXR1cm4gRm10KHRoaXMsZSl9LGwuJGI9ZnVuY3Rpb24oKXt6OSh0aGlzKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4geUUodGhpcyxlKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gQXQodGhpcyxlKX0sbC5xaT1mdW5jdGlvbihlKXt2YXIgbixyLHM7Kyt0aGlzLmoscj10aGlzLmc9PW51bGw/MDp0aGlzLmcubGVuZ3RoLGU+ciYmKHM9dGhpcy5nLG49cisoci8yfDApKzQsbjxlJiYobj1lKSx0aGlzLmc9dGhpcy5yaShuKSxzIT1udWxsJiZEYyhzLDAsdGhpcy5nLDAsdGhpcy5pKSl9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFhzZSh0aGlzLGUpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaT09MH0sbC5paT1mdW5jdGlvbihlLG4pe3JldHVybiBKc3QodGhpcyxlLG4pfSxsLnJpPWZ1bmN0aW9uKGUpe3JldHVybiBOdChRbixEZSwxLGUsNSwxKX0sbC5raT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5nW2VdfSxsLiRjPWZ1bmN0aW9uKGUpe3JldHVybiBsNih0aGlzLGUpfSxsLm1pPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHNpdCh0aGlzLGUsbil9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIGFtdCh0aGlzKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gXzN0KHRoaXMsZSl9LGwuaT0wO3ZhciBYQXQ9RihSYSwiQmFzaWNFTGlzdCIsNjMpLFFBdD1LaShSYSwiVHJlZUl0ZXJhdG9yIik7RCg2OTQsNjMsYXV0KSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nPT1udWxsJiYhdGhpcy5jP0h2dCh0aGlzKTp0aGlzLmc9PW51bGx8fHRoaXMuaSE9MCYmdSh0aGlzLmdbdGhpcy5pLTFdLDQ3KS5PYigpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHdxKHRoaXMpfSxsLlFiPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZSl0aHJvdyBpdChuZXcgTm8oIlRoZXJlIGlzIG5vIHZhbGlkIG9iamVjdCB0byByZW1vdmUuIikpO3RoaXMuZS5RYigpfSxsLmM9ITEsRihSYSwiQWJzdHJhY3RUcmVlSXRlcmF0b3IiLDY5NCksRCg2ODUsNjk0LGF1dCxsMnQpLGwuc2k9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49dShlLDU2KS5XZygpLktjKCksX3QobiwyNzkpJiZ1KG4sMjc5KS5OayhuZXcgckopLG59LEYoREgsIkVsa0dyYXBoVXRpbC9Qcm9wZXJ0aWVzU2tpcHBpbmdUcmVlSXRlcmF0b3IiLDY4NSksRCg5NTIsMSx7fSxySiksRihESCwiRWxrR3JhcGhVdGlsL1Byb3BlcnRpZXNTa2lwcGluZ1RyZWVJdGVyYXRvci8xIiw5NTIpO3ZhciBkUCxQZnQsZ1A9RihESCwiRWxrUmVmbGVjdCIsbnVsbCk7RCg4ODksMSxNeSxKVCksbC52Zz1mdW5jdGlvbihlKXtyZXR1cm4gQyQoKSxQYW4odShlLDE3NCkpfSxGKERILCJFbGtSZWZsZWN0L2xhbWJkYSQwJFR5cGUiLDg4OSk7dmFyIEFiO0tpKFJhLCJSZXNvdXJjZUxvY2F0b3IiKSxEKDEwNTEsMSx7fSksRihSYSwiRGVsZWdhdGluZ1Jlc291cmNlTG9jYXRvciIsMTA1MSksRCgxMDUyLDEwNTEse30pLEYoIm9yZy5lY2xpcHNlLmVtZi5jb21tb24iLCJFTUZQbHVnaW4iLDEwNTIpO3ZhciBGZnQ9S2koazBlLCJBZGFwdGVyIiksbTZuPUtpKGswZSwiTm90aWZpY2F0aW9uIik7RCgxMTUzLDEsQjh0KSxsLnRpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC51aT1mdW5jdGlvbihlKXt9LGwudmk9ZnVuY3Rpb24oZSl7dGhpcy5kPWV9LGwud2k9ZnVuY3Rpb24oZSl7dGhpcy5kPT1lJiYodGhpcy5kPW51bGwpfSxsLmQ9bnVsbCxGKEw2LCJBZGFwdGVySW1wbCIsMTE1MyksRCgxOTk1LDY3LEUwZSksbC5WaD1mdW5jdGlvbihlLG4pe3JldHVybiB5M3QodGhpcyxlLG4pfSxsLldoPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztpZigrK3RoaXMuaixlLmRjKCkpcmV0dXJuITE7Zm9yKG49dGhpcy5WaSgpLHM9ZS5LYygpO3MuT2IoKTspcj1zLlBiKCksdGhpcy5JaSh0aGlzLm9pKG4scikpLCsrbjtyZXR1cm4hMH0sbC5YaD1mdW5jdGlvbihlLG4pe0dXdCh0aGlzLGUsbil9LGwuWWg9ZnVuY3Rpb24oZSl7bVh0KHRoaXMsZSl9LGwuR2k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5KaSgpfSxsLiRiPWZ1bmN0aW9uKCl7Vk0odGhpcyx0aGlzLlZpKCksdGhpcy5XaSgpKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5MaShlKX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5NaShlKX0sbC5IaT1mdW5jdGlvbihlLG4pe3RoaXMuU2koKS5qbSgpfSxsLklpPWZ1bmN0aW9uKGUpe3RoaXMuU2koKS5qbSgpfSxsLkppPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuU2koKX0sbC5LaT1mdW5jdGlvbigpe3RoaXMuU2koKS5qbSgpfSxsLkxpPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlNpKCkuam0oKX0sbC5NaT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9LGwuTmk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfSxsLk9pPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlNpKCkuam0oKX0sbC5QaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLlNpKCkuam0oKX0sbC5RaT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9LGwuUmk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9LGwuVGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfSxsLlVpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuU2koKS5qbSgpfSxsLlZpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfSxsLldpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfSxsLlhpPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlNpKCkuam0oKX0sbC5ZaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLlNpKCkuam0oKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5OaShlKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5saShlLHRoaXMuT2koZSkpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUGkoKX0sbC5YYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5RaShlKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJpKCl9LGwuaWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gQjR0KHRoaXMsZSxuKX0sbC5raT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5PaShlKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gSGoodGhpcyxlKX0sbC5NYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj10aGlzLlhjKGUpLG4+PTA/KHRoaXMuJGMobiksITApOiExfSxsLm1pPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuVWkoZSx0aGlzLm9pKGUsbikpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuVmkoKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLldpKCl9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuWGkoZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ZaSgpfSxGKFJhLCJEZWxlZ2F0aW5nRUxpc3QiLDE5OTUpLEQoMTk5NiwxOTk1LEUwZSksbC5WaD1mdW5jdGlvbihlLG4pe3JldHVybiBzeHQodGhpcyxlLG4pfSxsLldoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlZoKHRoaXMuVmkoKSxlKX0sbC5YaD1mdW5jdGlvbihlLG4pe2ZjZSh0aGlzLGUsbil9LGwuWWg9ZnVuY3Rpb24oZSl7cmNlKHRoaXMsZSl9LGwuYWk9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5iaigpfSxsLiRiPWZ1bmN0aW9uKCl7QV8odGhpcyl9LGwuWmk9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbmV3IHBRdCh0aGlzLGUsbixyLHMsbyl9LGwuJGk9ZnVuY3Rpb24oZSl7bWkodGhpcy5BaSgpLGUpfSxsLl9pPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuYWo9ZnVuY3Rpb24oKXtyZXR1cm4tMX0sbC5BaT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuY2o9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbn0sbC5kaj1mdW5jdGlvbihlLG4pe3JldHVybiBufSxsLmVqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5SaSgpfSxsLmlpPWZ1bmN0aW9uKGUsbil7dmFyIHIscztyZXR1cm4gdGhpcy5laigpPyhzPXRoaXMuZmooKSxyPUI0dCh0aGlzLGUsbiksdGhpcy4kaSh0aGlzLlppKDcscGUobikscixlLHMpKSxyKTpCNHQodGhpcyxlLG4pfSxsLiRjPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvO3JldHVybiB0aGlzLmVqKCk/KHI9bnVsbCxzPXRoaXMuZmooKSxuPXRoaXMuWmkoNCxvPUhqKHRoaXMsZSksbnVsbCxlLHMpLHRoaXMuYmooKSYmbz8ocj10aGlzLmRqKG8scikscj8oci5FaShuKSxyLkZpKCkpOnRoaXMuJGkobikpOnI/KHIuRWkobiksci5GaSgpKTp0aGlzLiRpKG4pLG8pOihvPUhqKHRoaXMsZSksdGhpcy5iaigpJiZvJiYocj10aGlzLmRqKG8sbnVsbCksciYmci5GaSgpKSxvKX0sbC5taT1mdW5jdGlvbihlLG4pe3JldHVybiB5bGUodGhpcyxlLG4pfSxGKEw2LCJEZWxlZ2F0aW5nTm90aWZ5aW5nTGlzdEltcGwiLDE5OTYpLEQoMTQzLDEsbk8pLGwuRWk9ZnVuY3Rpb24oZSl7cmV0dXJuIFQ0dCh0aGlzLGUpfSxsLkZpPWZ1bmN0aW9uKCl7cml0KHRoaXMpfSxsLnhpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC5faT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLmdqPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwueWk9ZnVuY3Rpb24oZSl7cmV0dXJuLTF9LGwuemk9ZnVuY3Rpb24oKXtyZXR1cm4gYXVlKHRoaXMpfSxsLkFpPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuQmk9ZnVuY3Rpb24oKXtyZXR1cm4gJDV0KHRoaXMpfSxsLkNpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubzwwP3RoaXMubzwtMj8tMi10aGlzLm8tMTotMTp0aGlzLm99LGwuaGo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5EaT1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqO3N3aXRjaCh0aGlzLmQpe2Nhc2UgMTpjYXNlIDI6c3dpdGNoKG89ZS54aSgpLG8pe2Nhc2UgMTpjYXNlIDI6aWYoaD1lLkFpKCksVnQoaCk9PT1WdCh0aGlzLkFpKCkpJiZ0aGlzLnlpKG51bGwpPT1lLnlpKG51bGwpKXJldHVybiB0aGlzLmc9ZS56aSgpLGUueGkoKT09MSYmKHRoaXMuZD0xKSwhMH1jYXNlIDQ6e3N3aXRjaChvPWUueGkoKSxvKXtjYXNlIDQ6e2lmKGg9ZS5BaSgpLFZ0KGgpPT09VnQodGhpcy5BaSgpKSYmdGhpcy55aShudWxsKT09ZS55aShudWxsKSlyZXR1cm4gQz1reHQodGhpcyksaz10aGlzLm88MD90aGlzLm88LTI/LTItdGhpcy5vLTE6LTE6dGhpcy5vLGQ9ZS5DaSgpLHRoaXMuZD02LGo9bmV3IFF3KDIpLGs8PWQ/KERyKGosdGhpcy5uKSxEcihqLGUuQmkoKSksdGhpcy5nPWx0KGN0KENyLDEpLFhyLDI1LDE1LFt0aGlzLm89ayxkKzFdKSk6KERyKGosZS5CaSgpKSxEcihqLHRoaXMubiksdGhpcy5nPWx0KGN0KENyLDEpLFhyLDI1LDE1LFt0aGlzLm89ZCxrXSkpLHRoaXMubj1qLEN8fCh0aGlzLm89LTItdGhpcy5vLTEpLCEwO2JyZWFrfX1icmVha31jYXNlIDY6e3N3aXRjaChvPWUueGkoKSxvKXtjYXNlIDQ6e2lmKGg9ZS5BaSgpLFZ0KGgpPT09VnQodGhpcy5BaSgpKSYmdGhpcy55aShudWxsKT09ZS55aShudWxsKSl7Zm9yKEM9a3h0KHRoaXMpLGQ9ZS5DaSgpLE09dSh0aGlzLmcsNDgpLHM9TnQoQ3IsWHIsMjUsTS5sZW5ndGgrMSwxNSwxKSxuPTA7bjxNLmxlbmd0aCYmKHY9TVtuXSx2PD1kKTspc1tuKytdPXYsKytkO2ZvcihyPXUodGhpcy5uLDE1KSxyLlZjKG4sZS5CaSgpKSxzW25dPWQ7KytuPHMubGVuZ3RoOylzW25dPU1bbi0xXTtyZXR1cm4gdGhpcy5nPXMsQ3x8KHRoaXMubz0tMi1zWzBdKSwhMH1icmVha319YnJlYWt9fXJldHVybiExfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHM7c3dpdGNoKHM9bmV3IF9oKElwKHRoaXMuZ20pKyJAIisobj1IaSh0aGlzKT4+PjAsbi50b1N0cmluZygxNikpKSxzLmErPSIgKGV2ZW50VHlwZTogIix0aGlzLmQpe2Nhc2UgMTp7cy5hKz0iU0VUIjticmVha31jYXNlIDI6e3MuYSs9IlVOU0VUIjticmVha31jYXNlIDM6e3MuYSs9IkFERCI7YnJlYWt9Y2FzZSA1OntzLmErPSJBRERfTUFOWSI7YnJlYWt9Y2FzZSA0OntzLmErPSJSRU1PVkUiO2JyZWFrfWNhc2UgNjp7cy5hKz0iUkVNT1ZFX01BTlkiO2JyZWFrfWNhc2UgNzp7cy5hKz0iTU9WRSI7YnJlYWt9Y2FzZSA4OntzLmErPSJSRU1PVklOR19BREFQVEVSIjticmVha31jYXNlIDk6e3MuYSs9IlJFU09MVkUiO2JyZWFrfWRlZmF1bHQ6e3hldChzLHRoaXMuZCk7YnJlYWt9fWlmKFl1ZSh0aGlzKSYmKHMuYSs9IiwgdG91Y2g6IHRydWUiKSxzLmErPSIsIHBvc2l0aW9uOiAiLHhldChzLHRoaXMubzwwP3RoaXMubzwtMj8tMi10aGlzLm8tMTotMTp0aGlzLm8pLHMuYSs9Iiwgbm90aWZpZXI6ICIsbDkocyx0aGlzLkFpKCkpLHMuYSs9IiwgZmVhdHVyZTogIixsOShzLHRoaXMuX2koKSkscy5hKz0iLCBvbGRWYWx1ZTogIixsOShzLCQ1dCh0aGlzKSkscy5hKz0iLCBuZXdWYWx1ZTogIix0aGlzLmQ9PTYmJl90KHRoaXMuZyw0OCkpe2ZvcihyPXUodGhpcy5nLDQ4KSxzLmErPSJbIixlPTA7ZTxyLmxlbmd0aDspcy5hKz1yW2VdLCsrZTxyLmxlbmd0aCYmKHMuYSs9WWEpO3MuYSs9Il0ifWVsc2UgbDkocyxhdWUodGhpcykpO3JldHVybiBzLmErPSIsIGlzVG91Y2g6ICIsTGcocyxZdWUodGhpcykpLHMuYSs9Iiwgd2FzU2V0OiAiLExnKHMsa3h0KHRoaXMpKSxzLmErPSIpIixzLmF9LGwuZD0wLGwuZT0wLGwuZj0wLGwuaj0wLGwuaz0wLGwubz0wLGwucD0wLEYoTDYsIk5vdGlmaWNhdGlvbkltcGwiLDE0MyksRCgxMTY3LDE0MyxuTyxwUXQpLGwuX2k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLl9pKCl9LGwueWk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5haigpfSxsLkFpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5BaSgpfSxGKEw2LCJEZWxlZ2F0aW5nTm90aWZ5aW5nTGlzdEltcGwvMSIsMTE2NyksRCgyNDIsNjMsTGQsY3gsRHApLGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIFRpZSh0aGlzLHUoZSwzNjYpKX0sbC5FaT1mdW5jdGlvbihlKXtyZXR1cm4gVGllKHRoaXMsZSl9LGwuRmk9ZnVuY3Rpb24oKXt2YXIgZSxuLHI7Zm9yKGU9MDtlPHRoaXMuaTsrK2Upbj11KHRoaXMuZ1tlXSwzNjYpLHI9bi5BaSgpLHIhPW51bGwmJm4ueGkoKSE9LTEmJnUociw5MikuTmcobil9LGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KG02bixEZSwzNjYsZSwwLDEpfSxGKEw2LCJOb3RpZmljYXRpb25DaGFpbkltcGwiLDI0MiksRCgxMzc4LDkwLEZkZSksbC5LZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV9LGwuTWc9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5mJjEpIT0wfSxsLmY9MSxGKEw2LCJOb3RpZmllckltcGwiLDEzNzgpLEQoMTk5Myw2MyxMZCksbC5WaD1mdW5jdGlvbihlLG4pe3JldHVybiBrYXQodGhpcyxlLG4pfSxsLldoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlZoKHRoaXMuaSxlKX0sbC5YaD1mdW5jdGlvbihlLG4pe2Q1dCh0aGlzLGUsbil9LGwuWWg9ZnVuY3Rpb24oZSl7dGF0KHRoaXMsZSl9LGwuYWk9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5iaigpfSxsLiRiPWZ1bmN0aW9uKCl7eHIodGhpcyl9LGwuWmk9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbmV3IGJRdCh0aGlzLGUsbixyLHMsbyl9LGwuJGk9ZnVuY3Rpb24oZSl7bWkodGhpcy5BaSgpLGUpfSxsLl9pPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuYWo9ZnVuY3Rpb24oKXtyZXR1cm4tMX0sbC5BaT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuaWo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5jaj1mdW5jdGlvbihlLG4pe3JldHVybiBufSxsLmRqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG59LGwuZWo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmkhPTB9LGwuaWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gcl8odGhpcyxlLG4pfSxsLiRjPWZ1bmN0aW9uKGUpe3JldHVybiBieSh0aGlzLGUpfSxsLm1pPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEZsZSh0aGlzLGUsbil9LGwuamo9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbn0sbC5raj1mdW5jdGlvbihlLG4pe3JldHVybiBufSxsLmxqPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gcn0sRihMNiwiTm90aWZ5aW5nTGlzdEltcGwiLDE5OTMpLEQoMTE2NiwxNDMsbk8sYlF0KSxsLl9pPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5faSgpfSxsLnlpPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuYWooKX0sbC5BaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuQWkoKX0sRihMNiwiTm90aWZ5aW5nTGlzdEltcGwvMSIsMTE2NiksRCg5NTMsNjMsTGQsWVd0KSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmk+MTA/KCghdGhpcy5ifHx0aGlzLmMuaiE9dGhpcy5hKSYmKHRoaXMuYj1uZXcgRTkodGhpcyksdGhpcy5hPXRoaXMuaiksSTAodGhpcy5iLGUpKTp5RSh0aGlzLGUpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuYT0wLEYoUmEsIkFic3RyYWN0RUxpc3QvMSIsOTUzKSxEKDI5NSw3Myxib3QscW0pLEYoUmEsIkFic3RyYWN0RUxpc3QvQmFzaWNJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIiwyOTUpLEQoNDAsMSxzYSxuciksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLm1qPWZ1bmN0aW9uKCl7aWYodGhpcy5pLmohPXRoaXMuZil0aHJvdyBpdChuZXcgcmgpfSxsLm5qPWZ1bmN0aW9uKCl7cmV0dXJuIGRyKHRoaXMpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZSE9dGhpcy5pLmdjKCl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uaigpfSxsLlFiPWZ1bmN0aW9uKCl7Zl8odGhpcyl9LGwuZT0wLGwuZj0wLGwuZz0tMSxGKFJhLCJBYnN0cmFjdEVMaXN0L0VJdGVyYXRvciIsNDApLEQoMjc4LDQwLG4wLE54LEpudCksbC5RYj1mdW5jdGlvbigpe2ZfKHRoaXMpfSxsLlJiPWZ1bmN0aW9uKGUpe0RpZSh0aGlzLGUpfSxsLm9qPWZ1bmN0aW9uKCl7dmFyIGU7dHJ5e3JldHVybiBlPXRoaXMuZC5YYigtLXRoaXMuZSksdGhpcy5taigpLHRoaXMuZz10aGlzLmUsZX1jYXRjaChuKXt0aHJvdyBuPVdpKG4pLF90KG4sNzMpPyh0aGlzLm1qKCksaXQobmV3IGxjKSk6aXQobil9fSxsLnBqPWZ1bmN0aW9uKGUpe0lzZSh0aGlzLGUpfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZSE9MH0sbC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV9LGwuVWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vaigpfSxsLlZiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZS0xfSxsLldiPWZ1bmN0aW9uKGUpe3RoaXMucGooZSl9LEYoUmEsIkFic3RyYWN0RUxpc3QvRUxpc3RJdGVyYXRvciIsMjc4KSxEKDM0MSw0MCxzYSxCeCksbC5uaj1mdW5jdGlvbigpe3JldHVybiBkc3QodGhpcyl9LGwuUWI9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgT3IpfSxGKFJhLCJBYnN0cmFjdEVMaXN0L05vblJlc29sdmluZ0VJdGVyYXRvciIsMzQxKSxEKDM4NSwyNzgsbjAsJE0sd3d0KSxsLlJiPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwubmo9ZnVuY3Rpb24oKXt2YXIgZTt0cnl7cmV0dXJuIGU9dGhpcy5jLmtpKHRoaXMuZSksdGhpcy5taigpLHRoaXMuZz10aGlzLmUrKyxlfWNhdGNoKG4pe3Rocm93IG49V2kobiksX3Qobiw3Myk/KHRoaXMubWooKSxpdChuZXcgbGMpKTppdChuKX19LGwub2o9ZnVuY3Rpb24oKXt2YXIgZTt0cnl7cmV0dXJuIGU9dGhpcy5jLmtpKC0tdGhpcy5lKSx0aGlzLm1qKCksdGhpcy5nPXRoaXMuZSxlfWNhdGNoKG4pe3Rocm93IG49V2kobiksX3Qobiw3Myk/KHRoaXMubWooKSxpdChuZXcgbGMpKTppdChuKX19LGwuUWI9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgT3IpfSxsLldiPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LEYoUmEsIkFic3RyYWN0RUxpc3QvTm9uUmVzb2x2aW5nRUxpc3RJdGVyYXRvciIsMzg1KSxEKDE5ODIsNjcsVDBlKSxsLlZoPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSDtpZihvPW4uZ2MoKSxvIT0wKXtmb3IoQz11KERuKHRoaXMuYSw0KSwxMjYpLE09Qz09bnVsbD8wOkMubGVuZ3RoLEg9TStvLHM9Rml0KHRoaXMsSCksaj1NLWUsaj4wJiZEYyhDLGUscyxlK28saiksaz1uLktjKCksZD0wO2Q8bzsrK2Qpdj1rLlBiKCkscj1lK2Qsb250KHMscixzRSh0aGlzLHYpKTtmb3IoYkUodGhpcyxzKSxoPTA7aDxvOysraCl2PXNbZV0sdGhpcy5iaShlLHYpLCsrZTtyZXR1cm4hMH1lbHNlIHJldHVybisrdGhpcy5qLCExfSxsLldoPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztpZihzPWUuZ2MoKSxzIT0wKXtmb3Ioaz0ocj11KERuKHRoaXMuYSw0KSwxMjYpLHI9PW51bGw/MDpyLmxlbmd0aCksQz1rK3Msbj1GaXQodGhpcyxDKSx2PWUuS2MoKSxoPWs7aDxDOysraClkPXYuUGIoKSxvbnQobixoLHNFKHRoaXMsZCkpO2ZvcihiRSh0aGlzLG4pLG89aztvPEM7KytvKWQ9bltvXSx0aGlzLmJpKG8sZCk7cmV0dXJuITB9ZWxzZSByZXR1cm4rK3RoaXMuaiwhMX0sbC5YaD1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoO3M9dShEbih0aGlzLmEsNCksMTI2KSxvPXM9PW51bGw/MDpzLmxlbmd0aCxyPUZpdCh0aGlzLG8rMSksaD1zRSh0aGlzLG4pLGUhPW8mJkRjKHMsZSxyLGUrMSxvLWUpLHRzKHIsZSxoKSxiRSh0aGlzLHIpLHRoaXMuYmkoZSxuKX0sbC5ZaD1mdW5jdGlvbihlKXt2YXIgbixyLHM7cz0ocj11KERuKHRoaXMuYSw0KSwxMjYpLHI9PW51bGw/MDpyLmxlbmd0aCksbj1GaXQodGhpcyxzKzEpLG9udChuLHMsc0UodGhpcyxlKSksYkUodGhpcyxuKSx0aGlzLmJpKHMsZSl9LGwuWmg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE5KdCh0aGlzKX0sbC4kaD1mdW5jdGlvbigpe3JldHVybiBuZXcgWEt0KHRoaXMpfSxsLl9oPWZ1bmN0aW9uKGUpe3ZhciBuLHI7aWYocj0obj11KERuKHRoaXMuYSw0KSwxMjYpLG49PW51bGw/MDpuLmxlbmd0aCksZTwwfHxlPnIpdGhyb3cgaXQobmV3IHFtKGUscikpO3JldHVybiBuZXcgX1h0KHRoaXMsZSl9LGwuJGI9ZnVuY3Rpb24oKXt2YXIgZSxuOysrdGhpcy5qLGU9dShEbih0aGlzLmEsNCksMTI2KSxuPWU9PW51bGw/MDplLmxlbmd0aCxiRSh0aGlzLG51bGwpLFlydCh0aGlzLG4sZSl9LGwuSGM9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saDtpZihuPXUoRG4odGhpcy5hLDQpLDEyNiksbiE9bnVsbCl7aWYoZSE9bnVsbCl7Zm9yKHM9bixvPTAsaD1zLmxlbmd0aDtvPGg7KytvKWlmKHI9c1tvXSx5aShlLHIpKXJldHVybiEwfWVsc2UgZm9yKHM9bixvPTAsaD1zLmxlbmd0aDtvPGg7KytvKWlmKHI9c1tvXSxWdChyKT09PVZ0KGUpKXJldHVybiEwfXJldHVybiExfSxsLlhiPWZ1bmN0aW9uKGUpe3ZhciBuLHI7aWYobj11KERuKHRoaXMuYSw0KSwxMjYpLHI9bj09bnVsbD8wOm4ubGVuZ3RoLGU+PXIpdGhyb3cgaXQobmV3IHFtKGUscikpO3JldHVybiBuW2VdfSxsLlhjPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztpZihuPXUoRG4odGhpcy5hLDQpLDEyNiksbiE9bnVsbCl7aWYoZSE9bnVsbCl7Zm9yKHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpaWYoeWkoZSxuW3JdKSlyZXR1cm4gcn1lbHNlIGZvcihyPTAscz1uLmxlbmd0aDtyPHM7KytyKWlmKFZ0KG5bcl0pPT09VnQoZSkpcmV0dXJuIHJ9cmV0dXJuLTF9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdShEbih0aGlzLmEsNCksMTI2KT09bnVsbH0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRkp0KHRoaXMpfSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBLS3QodGhpcyl9LGwuWmM9ZnVuY3Rpb24oZSl7dmFyIG4scjtpZihyPShuPXUoRG4odGhpcy5hLDQpLDEyNiksbj09bnVsbD8wOm4ubGVuZ3RoKSxlPDB8fGU+cil0aHJvdyBpdChuZXcgcW0oZSxyKSk7cmV0dXJuIG5ldyBDWHQodGhpcyxlKX0sbC5paT1mdW5jdGlvbihlLG4pe3ZhciByLHMsbztpZihyPWppZSh0aGlzKSxvPXI9PW51bGw/MDpyLmxlbmd0aCxlPj1vKXRocm93IGl0KG5ldyB5byhpdXQrZStEMitvKSk7aWYobj49byl0aHJvdyBpdChuZXcgeW8oc3V0K24rRDIrbykpO3JldHVybiBzPXJbbl0sZSE9biYmKGU8bj9EYyhyLGUscixlKzEsbi1lKTpEYyhyLG4rMSxyLG4sZS1uKSx0cyhyLGUscyksYkUodGhpcyxyKSksc30sbC5raT1mdW5jdGlvbihlKXtyZXR1cm4gdShEbih0aGlzLmEsNCksMTI2KVtlXX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gVGJuKHRoaXMsZSl9LGwubWk9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO3JldHVybiByPWppZSh0aGlzKSxzPXJbZV0sb250KHIsZSxzRSh0aGlzLG4pKSxiRSh0aGlzLHIpLHN9LGwuZ2M9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT11KERuKHRoaXMuYSw0KSwxMjYpLGU9PW51bGw/MDplLmxlbmd0aH0sbC5QYz1mdW5jdGlvbigpe3ZhciBlLG4scjtyZXR1cm4gZT11KERuKHRoaXMuYSw0KSwxMjYpLHI9ZT09bnVsbD8wOmUubGVuZ3RoLG49TnQoRmZ0LGx1dCw0MTUsciwwLDEpLHI+MCYmRGMoZSwwLG4sMCxyKSxufSxsLlFjPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztyZXR1cm4gbj11KERuKHRoaXMuYSw0KSwxMjYpLHM9bj09bnVsbD8wOm4ubGVuZ3RoLHM+MCYmKGUubGVuZ3RoPHMmJihyPU1EKG9sKGUpLmMscyksZT1yKSxEYyhuLDAsZSwwLHMpKSxlLmxlbmd0aD5zJiZ0cyhlLHMsbnVsbCksZX07dmFyIG41ZTtGKFJhLCJBcnJheURlbGVnYXRpbmdFTGlzdCIsMTk4MiksRCgxMDM4LDQwLHNhLEZKdCksbC5taj1mdW5jdGlvbigpe2lmKHRoaXMuYi5qIT10aGlzLmZ8fFZ0KHUoRG4odGhpcy5iLmEsNCksMTI2KSkhPT1WdCh0aGlzLmEpKXRocm93IGl0KG5ldyByaCl9LGwuUWI9ZnVuY3Rpb24oKXtmXyh0aGlzKSx0aGlzLmE9dShEbih0aGlzLmIuYSw0KSwxMjYpfSxGKFJhLCJBcnJheURlbGVnYXRpbmdFTGlzdC9FSXRlcmF0b3IiLDEwMzgpLEQoNzA2LDI3OCxuMCxLS3QsQ1h0KSxsLm1qPWZ1bmN0aW9uKCl7aWYodGhpcy5iLmohPXRoaXMuZnx8VnQodShEbih0aGlzLmIuYSw0KSwxMjYpKSE9PVZ0KHRoaXMuYSkpdGhyb3cgaXQobmV3IHJoKX0sbC5waj1mdW5jdGlvbihlKXtJc2UodGhpcyxlKSx0aGlzLmE9dShEbih0aGlzLmIuYSw0KSwxMjYpfSxsLlFiPWZ1bmN0aW9uKCl7Zl8odGhpcyksdGhpcy5hPXUoRG4odGhpcy5iLmEsNCksMTI2KX0sRihSYSwiQXJyYXlEZWxlZ2F0aW5nRUxpc3QvRUxpc3RJdGVyYXRvciIsNzA2KSxEKDEwMzksMzQxLHNhLE5KdCksbC5taj1mdW5jdGlvbigpe2lmKHRoaXMuYi5qIT10aGlzLmZ8fFZ0KHUoRG4odGhpcy5iLmEsNCksMTI2KSkhPT1WdCh0aGlzLmEpKXRocm93IGl0KG5ldyByaCl9LEYoUmEsIkFycmF5RGVsZWdhdGluZ0VMaXN0L05vblJlc29sdmluZ0VJdGVyYXRvciIsMTAzOSksRCg3MDcsMzg1LG4wLFhLdCxfWHQpLGwubWo9ZnVuY3Rpb24oKXtpZih0aGlzLmIuaiE9dGhpcy5mfHxWdCh1KERuKHRoaXMuYi5hLDQpLDEyNikpIT09VnQodGhpcy5hKSl0aHJvdyBpdChuZXcgcmgpfSxGKFJhLCJBcnJheURlbGVnYXRpbmdFTGlzdC9Ob25SZXNvbHZpbmdFTGlzdEl0ZXJhdG9yIiw3MDcpLEQoNjA2LDI5NSxib3Qsbm50KSxGKFJhLCJCYXNpY0VMaXN0L0Jhc2ljSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiIsNjA2KSxEKDY5Niw2MyxMZCxuMnQpLGwuVmM9ZnVuY3Rpb24oZSxuKXt0aHJvdyBpdChuZXcgT3IpfSxsLkZjPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuV2M9ZnVuY3Rpb24oZSxuKXt0aHJvdyBpdChuZXcgT3IpfSxsLkdjPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuJGI9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgT3IpfSxsLnFpPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5aaCgpfSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGgoKX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faChlKX0sbC5paT1mdW5jdGlvbihlLG4pe3Rocm93IGl0KG5ldyBPcil9LGwuamk9ZnVuY3Rpb24oZSxuKXt0aHJvdyBpdChuZXcgT3IpfSxsLiRjPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuTWM9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sbC5fYz1mdW5jdGlvbihlLG4pe3Rocm93IGl0KG5ldyBPcil9LEYoUmEsIkJhc2ljRUxpc3QvVW5tb2RpZmlhYmxlRUxpc3QiLDY5NiksRCg3MDUsMSx7MzoxLDIwOjEsMTQ6MSwxNToxLDU4OjEsNTg5OjF9KSxsLlZjPWZ1bmN0aW9uKGUsbil7Q1FlKHRoaXMsZSx1KG4sNDIpKX0sbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gaFplKHRoaXMsdShlLDQyKSl9LGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gdShBdCh0aGlzLmMsZSksMTMzKX0sbC5paT1mdW5jdGlvbihlLG4pe3JldHVybiB1KHRoaXMuYy5paShlLG4pLDQyKX0sbC5qaT1mdW5jdGlvbihlLG4pe19RZSh0aGlzLGUsdShuLDQyKSl9LGwuTGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IF9uKHRoaXMsMTYpKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gdSh0aGlzLmMuJGMoZSksNDIpfSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG1ubih0aGlzLGUsdShuLDQyKSl9LGwuYWQ9ZnVuY3Rpb24oZSl7cjQodGhpcyxlKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywxNil9LGwuT2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IF9uKHRoaXMsMTYpKX0sbC5XYz1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLmMuV2MoZSxuKX0sbC5HYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jLkdjKGUpfSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5jLiRiKCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYy5IYyhlKX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4gTkQodGhpcy5jLGUpfSxsLnFqPWZ1bmN0aW9uKCl7dmFyIGUsbixyO2lmKHRoaXMuZD09bnVsbCl7Zm9yKHRoaXMuZD1OdChYQXQsUjh0LDYzLDIqdGhpcy5mKzEsMCwxKSxyPXRoaXMuZSx0aGlzLmY9MCxuPXRoaXMuYy5LYygpO24uZSE9bi5pLmdjKCk7KWU9dShuLm5qKCksMTMzKSxKeih0aGlzLGUpO3RoaXMuZT1yfX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4geFl0KHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4ga3l0KHRoaXMuYyl9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYy5YYyhlKX0sbC5yaj1mdW5jdGlvbigpe3RoaXMuYz1uZXcgenp0KHRoaXMpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZj09MH0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuS2MoKX0sbC5ZYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuWWMoKX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jLlpjKGUpfSxsLnNqPWZ1bmN0aW9uKCl7cmV0dXJuIHdEKHRoaXMpfSxsLnRqPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gbmV3IFJZdChlLG4scil9LGwudWo9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtwfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiB0bmUodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGwuYmQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IFFkKHRoaXMuYyxlLG4pfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5QYygpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmMuUWMoZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gZzN0KHRoaXMuYyl9LGwuZT0wLGwuZj0wLEYoUmEsIkJhc2ljRU1hcCIsNzA1KSxEKDEwMzMsNjMsTGQsenp0KSxsLmJpPWZ1bmN0aW9uKGUsbil7Y0tlKHRoaXMsdShuLDEzMykpfSxsLmVpPWZ1bmN0aW9uKGUsbixyKXt2YXIgczsrKyhzPXRoaXMsdShuLDEzMykscykuYS5lfSxsLmZpPWZ1bmN0aW9uKGUsbil7dUtlKHRoaXMsdShuLDEzMykpfSxsLmdpPWZ1bmN0aW9uKGUsbixyKXtaUWUodGhpcyx1KG4sMTMzKSx1KHIsMTMzKSl9LGwuZGk9ZnVuY3Rpb24oZSxuKXtWbmUodGhpcy5hKX0sRihSYSwiQmFzaWNFTWFwLzEiLDEwMzMpLEQoMTAzNCw2MyxMZCxrcCksbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gTnQoeTZuLEMwZSw2MTIsZSwwLDEpfSxGKFJhLCJCYXNpY0VNYXAvMiIsMTAzNCksRCgxMDM1LE4xLHp1LHF6dCksbC4kYj1mdW5jdGlvbigpe3RoaXMuYS5jLiRiKCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGlzdCh0aGlzLmEsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmY9PTA/KHk4KCkscFAuYSk6bmV3IEVIdCh0aGlzLmEpfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPXRoaXMuYS5mLHF6KHRoaXMuYSxlKSx0aGlzLmEuZiE9bn0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZn0sRihSYSwiQmFzaWNFTWFwLzMiLDEwMzUpLEQoMTAzNiwyOCx4eSxIenQpLGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuYy4kYigpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBBdWUodGhpcy5hLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mPT0wPyh5OCgpLHBQLmEpOm5ldyBUSHQodGhpcy5hKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZn0sRihSYSwiQmFzaWNFTWFwLzQiLDEwMzYpLEQoMTAzNyxOMSx6dSxWenQpLGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuYy4kYigpfSxsLkhjPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztpZih0aGlzLmEuZj4wJiZfdChlLDQyKSYmKHRoaXMuYS5xaigpLGs9dShlLDQyKSx2PWsuY2QoKSxvPXY9PW51bGw/MDpIaSh2KSxoPXJ3dCh0aGlzLmEsbyksbj10aGlzLmEuZFtoXSxuKSl7Zm9yKHI9dShuLmcsMzY3KSxDPW4uaSxkPTA7ZDxDOysrZClpZihzPXJbZF0scy5TaCgpPT1vJiZzLkZiKGspKXJldHVybiEwfXJldHVybiExfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mPT0wPyh5OCgpLHBQLmEpOm5ldyBwcnQodGhpcy5hKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4geWNlKHRoaXMsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmZ9LEYoUmEsIkJhc2ljRU1hcC81IiwxMDM3KSxEKDYxMywxLHNhLHBydCksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYiE9LTF9LGwuUGI9ZnVuY3Rpb24oKXt2YXIgZTtpZih0aGlzLmYuZSE9dGhpcy5jKXRocm93IGl0KG5ldyByaCk7aWYodGhpcy5iPT0tMSl0aHJvdyBpdChuZXcgbGMpO3JldHVybiB0aGlzLmQ9dGhpcy5hLHRoaXMuZT10aGlzLmIsY2FlKHRoaXMpLGU9dSh0aGlzLmYuZFt0aGlzLmRdLmdbdGhpcy5lXSwxMzMpLHRoaXMudmooZSl9LGwuUWI9ZnVuY3Rpb24oKXtpZih0aGlzLmYuZSE9dGhpcy5jKXRocm93IGl0KG5ldyByaCk7aWYodGhpcy5lPT0tMSl0aHJvdyBpdChuZXcgT3UpO3RoaXMuZi5jLk1jKEF0KHRoaXMuZi5kW3RoaXMuZF0sdGhpcy5lKSksdGhpcy5jPXRoaXMuZi5lLHRoaXMuZT0tMSx0aGlzLmE9PXRoaXMuZCYmdGhpcy5iIT0tMSYmLS10aGlzLmJ9LGwudmo9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGwuYT0wLGwuYj0tMSxsLmM9MCxsLmQ9MCxsLmU9MCxGKFJhLCJCYXNpY0VNYXAvQmFzaWNFTWFwSXRlcmF0b3IiLDYxMyksRCgxMDMxLDYxMyxzYSxFSHQpLGwudmo9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2QoKX0sRihSYSwiQmFzaWNFTWFwL0Jhc2ljRU1hcEtleUl0ZXJhdG9yIiwxMDMxKSxEKDEwMzIsNjEzLHNhLFRIdCksbC52aj1mdW5jdGlvbihlKXtyZXR1cm4gZS5kZCgpfSxGKFJhLCJCYXNpY0VNYXAvQmFzaWNFTWFwVmFsdWVJdGVyYXRvciIsMTAzMiksRCgxMDMwLDEsbXYsR3p0KSxsLndjPWZ1bmN0aW9uKGUpe0s5KHRoaXMsZSl9LGwueWM9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBRaXQodGhpcyxlLG4scil9LGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuYy4kYigpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiByVXQodGhpcyxlKX0sbC51Yz1mdW5jdGlvbihlKXtyZXR1cm4gQXVlKHRoaXMuYSxlKX0sbC52Yz1mdW5jdGlvbigpe3JldHVybiB6YW4odGhpcy5hKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4geFl0KHRoaXMuYSxlKX0sbC54Yz1mdW5jdGlvbihlKXtyZXR1cm4gWGYodGhpcy5hLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIGt5dCh0aGlzLmEuYyl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmY9PTB9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gcWFuKHRoaXMuYSl9LGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYXEodGhpcy5hLGUsbil9LGwuQmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHF6KHRoaXMuYSxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZn0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBnM3QodGhpcy5hLmMpfSxsLkNjPWZ1bmN0aW9uKCl7cmV0dXJuICRhbih0aGlzLmEpfSxGKFJhLCJCYXNpY0VNYXAvRGVsZWdhdGluZ01hcCIsMTAzMCksRCg2MTIsMSx7NDI6MSwxMzM6MSw2MTI6MX0sUll0KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBfdChlLDQyKT8obj11KGUsNDIpLCh0aGlzLmIhPW51bGw/eWkodGhpcy5iLG4uY2QoKSk6VnQodGhpcy5iKT09PVZ0KG4uY2QoKSkpJiYodGhpcy5jIT1udWxsP3lpKHRoaXMuYyxuLmRkKCkpOlZ0KHRoaXMuYyk9PT1WdChuLmRkKCkpKSk6ITF9LGwuU2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLmNkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5kZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hXih0aGlzLmM9PW51bGw/MDpIaSh0aGlzLmMpKX0sbC5UaD1mdW5jdGlvbihlKXt0aGlzLmE9ZX0sbC5VaD1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgS2IpfSxsLmVkPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPXRoaXMuYyx0aGlzLmM9ZSxufSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYisiLT4iK3RoaXMuY30sbC5hPTA7dmFyIHk2bj1GKFJhLCJCYXNpY0VNYXAvRW50cnlJbXBsIiw2MTIpO0QoNTM2LDEse30sSWspLEYoUmEsIkJhc2ljRU1hcC9WaWV3Iiw1MzYpO3ZhciBwUDtEKDc2OCwxLHt9KSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBrNXQoKHduKCksaW8pLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFB5dCgod24oKSxpbykpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGViKCh3bigpLGlvKSl9LEYoUmEsIkVDb2xsZWN0aW9ucy9CYXNpY0VtcHR5VW5tb2RpZmlhYmxlRUxpc3QiLDc2OCksRCgxMzEyLDEsbjAsY0IpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5SYj1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgT3IpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuU2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5QYj1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBsYyl9LGwuVGI9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sbC5VYj1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBsYyl9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4tMX0sbC5RYj1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBPcil9LGwuV2I9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sRihSYSwiRUNvbGxlY3Rpb25zL0Jhc2ljRW1wdHlVbm1vZGlmaWFibGVFTGlzdC8xIiwxMzEyKSxEKDEzMTAsNzY4LHsyMDoxLDE0OjEsMTU6MSw1ODoxfSxQcXQpLGwuVmM9ZnVuY3Rpb24oZSxuKXtHSHQoKX0sbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gVUh0KCl9LGwuV2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gV0h0KCl9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIFlIdCgpfSxsLiRiPWZ1bmN0aW9uKCl7S0h0KCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gczJ0KCh3bigpLGUpKSxudWxsfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybi0xfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hfSxsLmlpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFhIdCgpfSxsLmppPWZ1bmN0aW9uKGUsbil7UUh0KCl9LGwuTGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IF9uKHRoaXMsMTYpKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gWkh0KCl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIEpIdCgpfSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRWdCgpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGwuYWQ9ZnVuY3Rpb24oZSl7cjQodGhpcyxlKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywxNil9LGwuT2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IF9uKHRoaXMsMTYpKX0sbC5iZD1mdW5jdGlvbihlLG4pe3JldHVybiB3bigpLG5ldyBRZChpbyxlLG4pfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHN2dCgod24oKSxpbykpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiB3bigpLGVJKGlvLGUpfSxGKFJhLCJFQ29sbGVjdGlvbnMvRW1wdHlVbm1vZGlmaWFibGVFTGlzdCIsMTMxMCksRCgxMzExLDc2OCx7MjA6MSwxNDoxLDE1OjEsNTg6MSw1ODk6MX0sRnF0KSxsLlZjPWZ1bmN0aW9uKGUsbil7R0h0KCl9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIFVIdCgpfSxsLldjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFdIdCgpfSxsLkdjPWZ1bmN0aW9uKGUpe3JldHVybiBZSHQoKX0sbC4kYj1mdW5jdGlvbigpe0tIdCgpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHMydCgod24oKSxlKSksbnVsbH0sbC5YYz1mdW5jdGlvbihlKXtyZXR1cm4tMX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiEwfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5ZYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYX0sbC5paT1mdW5jdGlvbihlLG4pe3JldHVybiBYSHQoKX0sbC5qaT1mdW5jdGlvbihlLG4pe1FIdCgpfSxsLkxjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih0aGlzLDE2KSl9LGwuJGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFpIdCgpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiBKSHQoKX0sbC5fYz1mdW5jdGlvbihlLG4pe3JldHVybiB0VnQoKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiAwfSxsLmFkPWZ1bmN0aW9uKGUpe3I0KHRoaXMsZSl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMsMTYpfSxsLk9jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih0aGlzLDE2KSl9LGwuYmQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gd24oKSxuZXcgUWQoaW8sZSxuKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiBzdnQoKHduKCksaW8pKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gd24oKSxlSShpbyxlKX0sbC5zaj1mdW5jdGlvbigpe3JldHVybiB3bigpLHduKCksdTB9LEYoUmEsIkVDb2xsZWN0aW9ucy9FbXB0eVVubW9kaWZpYWJsZUVNYXAiLDEzMTEpO3ZhciBaQXQ9S2koUmEsIkVudW1lcmF0b3IiKSxkVTtEKDI4MSwxLHsyODE6MX0sZmF0KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiB0aGlzPT09ZT8hMDpfdChlLDI4MSk/KG49dShlLDI4MSksdGhpcy5mPT1uLmYmJiRlbih0aGlzLmksbi5pKSYmam50KHRoaXMuYSx0aGlzLmYmMjU2P24uZiYyNTY/bi5hOm51bGw6bi5mJjI1Nj9udWxsOm4uYSkmJmpudCh0aGlzLmQsbi5kKSYmam50KHRoaXMuZyxuLmcpJiZqbnQodGhpcy5lLG4uZSkmJlBmbih0aGlzLG4pKTohMX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gc2xlKHRoaXMpfSxsLmY9MDt2YXIgcjVlPTAsaTVlPTAsczVlPTAsYTVlPTAsSkF0PTAsdEx0PTAsZUx0PTAsbkx0PTAsckx0PTAsbzVlLG9BPTAsY0E9MCxjNWU9MCx1NWU9MCxnVSxpTHQ7RihSYSwiVVJJIiwyODEpLEQoMTA5MSw0MyxBNCxOcXQpLGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdShrbyh0aGlzLEJyKGUpLHUobiwyODEpKSwyODEpfSxGKFJhLCJVUkkvVVJJQ2FjaGUiLDEwOTEpLEQoNDk3LDYzLExkLE9rLEdqKSxsLmhpPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEYoUmEsIlVuaXF1ZUVMaXN0Iiw0OTcpLEQoNTgxLDYwLFEwLFckKSxGKFJhLCJXcmFwcGVkRXhjZXB0aW9uIiw1ODEpO3ZhciBacj1LaShwaCxBMGUpLHQzPUtpKHBoLEwwZSksTXU9S2kocGgsTTBlKSxlMz1LaShwaCxEMGUpLHMxPUtpKHBoLEkwZSksVWg9S2kocGgsIkVDbGFzcyIpLE5mdD1LaShwaCwiRURhdGFUeXBlIiksbDVlO0QoMTE4Myw0MyxBNCxCcXQpLGwueGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpP05jKHRoaXMsZSk6ZWMoTG8odGhpcy5mLGUpKX0sRihwaCwiRURhdGFUeXBlL0ludGVybmFsL0NvbnZlcnNpb25EZWxlZ2F0ZS9GYWN0b3J5L1JlZ2lzdHJ5L0ltcGwiLDExODMpO3ZhciBwVT1LaShwaCwiRUVudW0iKSxhZz1LaShwaCxPMGUpLGhvPUtpKHBoLFAwZSksV2g9S2kocGgsRjBlKSxZaCxWdj1LaShwaCxOMGUpLG4zPUtpKHBoLEIwZSk7RCgxMDI5LDEse30sbkopLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iTklMIn0sRihwaCwiRVN0cnVjdHVyYWxGZWF0dXJlL0ludGVybmFsL0R5bmFtaWNWYWx1ZUhvbGRlci8xIiwxMDI5KTt2YXIgaDVlO0QoMTAyOCw0MyxBNCxScXQpLGwueGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpP05jKHRoaXMsZSk6ZWMoTG8odGhpcy5mLGUpKX0sRihwaCwiRVN0cnVjdHVyYWxGZWF0dXJlL0ludGVybmFsL1NldHRpbmdEZWxlZ2F0ZS9GYWN0b3J5L1JlZ2lzdHJ5L0ltcGwiLDEwMjgpO3ZhciBodT1LaShwaCxSMGUpLFo2PUtpKHBoLCJFVmFsaWRhdG9yL1BhdHRlcm5NYXRjaGVyIiksc0x0LGFMdCxMbixhcCxyMyxMYixmNWUsZDVlLGc1ZSxNYixvcCxEYixHdixXMSxwNWUsYjVlLEtoLGNwLHc1ZSx1cCxpMyxsNSxRYSx2NWUsbTVlLFV2LGJVPUtpKCRpLCJGZWF0dXJlTWFwL0VudHJ5Iik7RCg1MzUsMSx7NzI6MX0sbGopLGwuYWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sRihNbiwiQmFzaWNFT2JqZWN0SW1wbC8xIiw1MzUpLEQoMTAyNywxLGh1dCxYR3QpLGwuV2o9ZnVuY3Rpb24oZSl7cmV0dXJuIFVydCh0aGlzLmEsdGhpcy5iLGUpfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIE1RdCh0aGlzLmEsdGhpcy5iKX0sbC5XYj1mdW5jdGlvbihlKXt6dnQodGhpcy5hLHRoaXMuYixlKX0sbC5Yaj1mdW5jdGlvbigpe05ubih0aGlzLmEsdGhpcy5iKX0sRihNbiwiQmFzaWNFT2JqZWN0SW1wbC80IiwxMDI3KSxEKDE5ODMsMSx7MTA4OjF9KSxsLmJrPWZ1bmN0aW9uKGUpe3RoaXMuZT1lPT0wP3k1ZTpOdChRbixEZSwxLGUsNSwxKX0sbC5DaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lW2VdfSxsLkRoPWZ1bmN0aW9uKGUsbil7dGhpcy5lW2VdPW59LGwuRWg9ZnVuY3Rpb24oZSl7dGhpcy5lW2VdPW51bGx9LGwuY2s9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLmRrPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE9yKX0sbC5laz1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBPcil9LGwuZms9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxsLmdrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZSE9bnVsbH0sbC5oaz1mdW5jdGlvbihlKXt0aGlzLmM9ZX0sbC5paz1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgT3IpfSxsLmprPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwua2s9ZnVuY3Rpb24oZSl7dGhpcy5kPWV9O3ZhciB5NWU7RihNbiwiQmFzaWNFT2JqZWN0SW1wbC9FUHJvcGVydGllc0hvbGRlckJhc2VJbXBsIiwxOTgzKSxEKDE4NSwxOTgzLHsxMDg6MX0sbmgpLGwuZGs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLmVrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5paz1mdW5jdGlvbihlKXt0aGlzLmE9ZX0sbC5qaz1mdW5jdGlvbihlKXt0aGlzLmI9ZX0sRihNbiwiQmFzaWNFT2JqZWN0SW1wbC9FUHJvcGVydGllc0hvbGRlckltcGwiLDE4NSksRCg1MDYsOTcsamRlLFBrKSxsLktnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0sbC5QZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmt9LGwuUmc9ZnVuY3Rpb24oZSxuKXt0aGlzLmc9ZSx0aGlzLmk9bn0sbC5UZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmomMj90aGlzLnBoKCkuY2soKTp0aGlzLnpoKCl9LGwuVmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pfSxsLk1nPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuaiYxKSE9MH0sbC5laD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd9LGwua2g9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5qJjQpIT0wfSxsLnBoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuayYmKHRoaXMuaz1uZXcgbmgpLHRoaXMua30sbC50aD1mdW5jdGlvbihlKXt0aGlzLnBoKCkuaGsoZSksZT90aGlzLmp8PTI6dGhpcy5qJj0tM30sbC52aD1mdW5jdGlvbihlKXt0aGlzLnBoKCkuamsoZSksZT90aGlzLmp8PTQ6dGhpcy5qJj0tNX0sbC56aD1mdW5jdGlvbigpe3JldHVybihIcCgpLExuKS5TfSxsLmk9MCxsLmo9MSxGKE1uLCJFT2JqZWN0SW1wbCIsNTA2KSxEKDc4MCw1MDYsezEwNToxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MX0send0KSxsLkNoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVbZV19LGwuRGg9ZnVuY3Rpb24oZSxuKXt0aGlzLmVbZV09bn0sbC5FaD1mdW5jdGlvbihlKXt0aGlzLmVbZV09bnVsbH0sbC5UZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwuWWc9ZnVuY3Rpb24oZSl7cmV0dXJuIEdpKHRoaXMuZCxlKX0sbC4kZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwuZGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lIT1udWxsfSxsLnBoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuayYmKHRoaXMuaz1uZXcgdUIpLHRoaXMua30sbC50aD1mdW5jdGlvbihlKXt0aGlzLmQ9ZX0sbC55aD1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLmU9PW51bGwmJihlPUpuKHRoaXMuZCksdGhpcy5lPWU9PTA/eDVlOk50KFFuLERlLDEsZSw1LDEpKSx0aGlzfSxsLkFoPWZ1bmN0aW9uKCl7cmV0dXJuIDB9O3ZhciB4NWU7RihNbiwiRHluYW1pY0VPYmplY3RJbXBsIiw3ODApLEQoMTM3Niw3ODAsezEwNToxLDQyOjEsOTI6MSw5MDoxLDEzMzoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxfSxoS3QpLGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFB3KHRoaXMpfSxsLnRoPWZ1bmN0aW9uKGUpe3RoaXMuZD1lLHRoaXMuYj1tSShlLCJrZXkiKSx0aGlzLmM9bUkoZSxaXyl9LGwuU2g9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5hPT0tMSYmKGU9aWl0KHRoaXMsdGhpcy5iKSx0aGlzLmE9ZT09bnVsbD8wOkhpKGUpKSx0aGlzLmF9LGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gaWl0KHRoaXMsdGhpcy5iKX0sbC5kZD1mdW5jdGlvbigpe3JldHVybiBpaXQodGhpcyx0aGlzLmMpfSxsLlRoPWZ1bmN0aW9uKGUpe3RoaXMuYT1lfSxsLlVoPWZ1bmN0aW9uKGUpe3p2dCh0aGlzLHRoaXMuYixlKX0sbC5lZD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj1paXQodGhpcyx0aGlzLmMpLHp2dCh0aGlzLHRoaXMuYyxlKSxufSxsLmE9MCxGKE1uLCJEeW5hbWljRU9iamVjdEltcGwvQmFzaWNFTWFwRW50cnkiLDEzNzYpLEQoMTM3NywxLHsxMDg6MX0sdUIpLGwuYms9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sbC5DaD1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgT3IpfSxsLkRoPWZ1bmN0aW9uKGUsbil7dGhyb3cgaXQobmV3IE9yKX0sbC5FaD1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgT3IpfSxsLmNrPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE9yKX0sbC5kaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLmZrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sbC5naz1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBPcil9LGwuaGs9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sbC5paz1mdW5jdGlvbihlKXt0aGlzLmE9ZX0sbC5qaz1mdW5jdGlvbihlKXt0aGlzLmI9ZX0sbC5raz1mdW5jdGlvbihlKXt0aGlzLmM9ZX0sRihNbiwiRHluYW1pY0VPYmplY3RJbXBsL0R5bmFtaWNFUHJvcGVydGllc0hvbGRlckltcGwiLDEzNzcpLEQoNTEwLDE1MCx7MTA1OjEsOTI6MSw5MDoxLDU5MDoxLDE0NzoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDUxMDoxLDE1MDoxLDExNDoxLDExNToxfSxsQiksbC5RZz1mdW5jdGlvbihlKXtyZXR1cm4gYTR0KHRoaXMsZSl9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLmQ7Y2FzZSAyOnJldHVybiByPyghdGhpcy5iJiYodGhpcy5iPW5ldyBrbCgoZG4oKSxRYSksY2MsdGhpcykpLHRoaXMuYik6KCF0aGlzLmImJih0aGlzLmI9bmV3IGtsKChkbigpLFFhKSxjYyx0aGlzKSksd0QodGhpcy5iKSk7Y2FzZSAzOnJldHVybiBGUXQodGhpcyk7Y2FzZSA0OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IEFzKF9iLHRoaXMsNCkpLHRoaXMuYTtjYXNlIDU6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgWTMoX2IsdGhpcyw1KSksdGhpcy5jfXJldHVybiB1aCh0aGlzLGUtSm4oKGRuKCksYXApKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHxhcCksZSksbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLFpjKHRoaXMuQWIsZSxyKTtjYXNlIDM6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/YTR0KHRoaXMscik6dGhpcy5DYi5paCh0aGlzLC0xLW8sbnVsbCxyKSkpLHJ2dCh0aGlzLHUoZSwxNDcpLHIpfXJldHVybiBoPXUoeW4oKHM9dShEbih0aGlzLDE2KSwyNiksc3x8KGRuKCksYXApKSxuKSw2NiksaC5OaigpLlFqKHRoaXMsc3UodGhpcyksbi1KbigoZG4oKSxhcCkpLGUscil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksQmEodGhpcy5BYixlLHIpO2Nhc2UgMjpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBrbCgoZG4oKSxRYSksY2MsdGhpcykpLE9qKHRoaXMuYixlLHIpO2Nhc2UgMzpyZXR1cm4gcnZ0KHRoaXMsbnVsbCxyKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgQXMoX2IsdGhpcyw0KSksQmEodGhpcy5hLGUscil9cmV0dXJuIG89dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxhcCkpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxzdSh0aGlzKSxuLUpuKChkbigpLGFwKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy5kIT1udWxsO2Nhc2UgMjpyZXR1cm4hIXRoaXMuYiYmdGhpcy5iLmYhPTA7Y2FzZSAzOnJldHVybiEhRlF0KHRoaXMpO2Nhc2UgNDpyZXR1cm4hIXRoaXMuYSYmdGhpcy5hLmkhPTA7Y2FzZSA1OnJldHVybiEhdGhpcy5jJiZ0aGlzLmMuaSE9MH1yZXR1cm4gb2godGhpcyxlLUpuKChkbigpLGFwKSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8YXApLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxpcyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6Q2VuKHRoaXMsQnIobikpO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcga2woKGRuKCksUWEpLGNjLHRoaXMpKSx4eih0aGlzLmIsbik7cmV0dXJuO2Nhc2UgMzpLY2UodGhpcyx1KG4sMTQ3KSk7cmV0dXJuO2Nhc2UgNDohdGhpcy5hJiYodGhpcy5hPW5ldyBBcyhfYix0aGlzLDQpKSx4cih0aGlzLmEpLCF0aGlzLmEmJih0aGlzLmE9bmV3IEFzKF9iLHRoaXMsNCkpLGlzKHRoaXMuYSx1KG4sMTQpKTtyZXR1cm47Y2FzZSA1OiF0aGlzLmMmJih0aGlzLmM9bmV3IFkzKF9iLHRoaXMsNSkpLHhyKHRoaXMuYyksIXRoaXMuYyYmKHRoaXMuYz1uZXcgWTMoX2IsdGhpcyw1KSksaXModGhpcy5jLHUobiwxNCkpO3JldHVybn1naCh0aGlzLGUtSm4oKGRuKCksYXApKSx5bigocj11KERuKHRoaXMsMTYpLDI2KSxyfHxhcCksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxhcH0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOm95dCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcga2woKGRuKCksUWEpLGNjLHRoaXMpKSx0aGlzLmIuYy4kYigpO3JldHVybjtjYXNlIDM6S2NlKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNDohdGhpcy5hJiYodGhpcy5hPW5ldyBBcyhfYix0aGlzLDQpKSx4cih0aGlzLmEpO3JldHVybjtjYXNlIDU6IXRoaXMuYyYmKHRoaXMuYz1uZXcgWTMoX2IsdGhpcyw1KSkseHIodGhpcy5jKTtyZXR1cm59ZmgodGhpcyxlLUpuKChkbigpLGFwKSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8YXApLGUpKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBsaWUodGhpcyl9LGwuZD1udWxsLEYoTW4sIkVBbm5vdGF0aW9uSW1wbCIsNTEwKSxEKDE1MSw3MDUsajh0LF9sKSxsLlhoPWZ1bmN0aW9uKGUsbil7b1FlKHRoaXMsZSx1KG4sNDIpKX0sbC5saz1mdW5jdGlvbihlLG4pe3JldHVybiBlSmUodGhpcyx1KGUsNDIpLG4pfSxsLnBpPWZ1bmN0aW9uKGUpe3JldHVybiB1KHUodGhpcy5jLDY5KS5waShlKSwxMzMpfSxsLlpoPWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcy5jLDY5KS5aaCgpfSxsLiRoPWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcy5jLDY5KS4kaCgpfSxsLl9oPWZ1bmN0aW9uKGUpe3JldHVybiB1KHRoaXMuYyw2OSkuX2goZSl9LGwubWs9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gT2oodGhpcyxlLG4pfSxsLldqPWZ1bmN0aW9uKGUpe3JldHVybiB1KHRoaXMuYyw3NikuV2ooZSl9LGwucmo9ZnVuY3Rpb24oKXt9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzLmMsNzYpLmZqKCl9LGwudGo9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3JldHVybiBzPXUoUmwodGhpcy5iKS5OaCgpLkpoKHRoaXMuYiksMTMzKSxzLlRoKGUpLHMuVWgobikscy5lZChyKSxzfSxsLnVqPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBfcHQodGhpcyl9LGwuV2I9ZnVuY3Rpb24oZSl7eHoodGhpcyxlKX0sbC5Yaj1mdW5jdGlvbigpe3UodGhpcy5jLDc2KS5YaigpfSxGKCRpLCJFY29yZUVNYXAiLDE1MSksRCgxNTgsMTUxLGo4dCxrbCksbC5xaj1mdW5jdGlvbigpe3ZhciBlLG4scixzLG8saDtpZih0aGlzLmQ9PW51bGwpe2ZvcihoPU50KFhBdCxSOHQsNjMsMip0aGlzLmYrMSwwLDEpLHI9dGhpcy5jLktjKCk7ci5lIT1yLmkuZ2MoKTspbj11KHIubmooKSwxMzMpLHM9bi5TaCgpLG89KHMmd2kpJWgubGVuZ3RoLGU9aFtvXSwhZSYmKGU9aFtvXT1uZXcgX3B0KHRoaXMpKSxlLkZjKG4pO3RoaXMuZD1ofX0sRihNbiwiRUFubm90YXRpb25JbXBsLzEiLDE1OCksRCgyODQsNDM4LHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSwxMDg6MSw0NzI6MSw0OToxLDk3OjEsMTUwOjEsMjg0OjEsMTE0OjEsMTE1OjF9KSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJjI1Nik7Y2FzZSAzOnJldHVybiBObigpLCEhKHRoaXMuQmImNTEyKTtjYXNlIDQ6cmV0dXJuIHBlKHRoaXMucyk7Y2FzZSA1OnJldHVybiBwZSh0aGlzLnQpO2Nhc2UgNjpyZXR1cm4gTm4oKSwhIXRoaXMuJGooKTtjYXNlIDc6cmV0dXJuIE5uKCksbz10aGlzLnMsbz49MTtjYXNlIDg6cmV0dXJuIG4/RGgodGhpcyk6dGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xfXJldHVybiB1aCh0aGlzLGUtSm4odGhpcy56aCgpKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLGUpLG4scil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksQmEodGhpcy5BYixlLHIpO2Nhc2UgOTpyZXR1cm4gbnJ0KHRoaXMscil9cmV0dXJuIG89dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxzdSh0aGlzKSxuLUpuKHRoaXMuemgoKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbixyO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4odGhpcy5CYiYyNTYpPT0wO2Nhc2UgMzpyZXR1cm4odGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gdGhpcy4kaigpO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmcXcodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmcXcodGhpcy5xKS5pPT0wKX1yZXR1cm4gb2godGhpcyxlLUpuKHRoaXMuemgoKSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8dGhpcy56aCgpKSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxpcyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6dGhpcy5MaChCcihuKSk7cmV0dXJuO2Nhc2UgMjp6Zyh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMzpxZyh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgNDpSZyh0aGlzLHUobiwxOSkuYSk7cmV0dXJuO2Nhc2UgNTp0aGlzLm9rKHUobiwxOSkuYSk7cmV0dXJuO2Nhc2UgODpiMih0aGlzLHUobiwxMzgpKTtyZXR1cm47Y2FzZSA5OnM9RjEodGhpcyx1KG4sODcpLG51bGwpLHMmJnMuRmkoKTtyZXR1cm59Z2godGhpcyxlLUpuKHRoaXMuemgoKSkseW4oKHI9dShEbih0aGlzLDE2KSwyNikscnx8dGhpcy56aCgpKSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBkbigpLG01ZX0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbixyO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6dGhpcy5MaChudWxsKTtyZXR1cm47Y2FzZSAyOnpnKHRoaXMsITApO3JldHVybjtjYXNlIDM6cWcodGhpcywhMCk7cmV0dXJuO2Nhc2UgNDpSZyh0aGlzLDApO3JldHVybjtjYXNlIDU6dGhpcy5vaygxKTtyZXR1cm47Y2FzZSA4OmIyKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgOTpyPUYxKHRoaXMsbnVsbCxudWxsKSxyJiZyLkZpKCk7cmV0dXJufWZoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fHRoaXMuemgoKSksZSkpfSxsLkdoPWZ1bmN0aW9uKCl7RGgodGhpcyksdGhpcy5CYnw9MX0sbC5Zaj1mdW5jdGlvbigpe3JldHVybiBEaCh0aGlzKX0sbC5aaj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnR9LGwuJGo9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLnQsZT4xfHxlPT0tMX0sbC5oaT1mdW5jdGlvbigpe3JldHVybih0aGlzLkJiJjUxMikhPTB9LGwubms9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZTN0KHRoaXMsZSxuKX0sbC5vaz1mdW5jdGlvbihlKXtyeSh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGY1dCh0aGlzKX0sbC5zPTAsbC50PTEsRihNbiwiRVR5cGVkRWxlbWVudEltcGwiLDI4NCksRCg0NDksMjg0LHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSwxNzA6MSw2NjoxLDEwODoxLDQ3MjoxLDQ5OjEsOTc6MSwxNTA6MSw0NDk6MSwyODQ6MSwxMTQ6MSwxMTU6MSw2Nzc6MX0pLGwuUWc9ZnVuY3Rpb24oZSl7cmV0dXJuIFVzZSh0aGlzLGUpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJjI1Nik7Y2FzZSAzOnJldHVybiBObigpLCEhKHRoaXMuQmImNTEyKTtjYXNlIDQ6cmV0dXJuIHBlKHRoaXMucyk7Y2FzZSA1OnJldHVybiBwZSh0aGlzLnQpO2Nhc2UgNjpyZXR1cm4gTm4oKSwhIXRoaXMuJGooKTtjYXNlIDc6cmV0dXJuIE5uKCksbz10aGlzLnMsbz49MTtjYXNlIDg6cmV0dXJuIG4/RGgodGhpcyk6dGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xO2Nhc2UgMTA6cmV0dXJuIE5uKCksISEodGhpcy5CYiZ4Zik7Y2FzZSAxMTpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJkR5KTtjYXNlIDEyOnJldHVybiBObigpLCEhKHRoaXMuQmImRXkpO2Nhc2UgMTM6cmV0dXJuIHRoaXMuajtjYXNlIDE0OnJldHVybiBTRSh0aGlzKTtjYXNlIDE1OnJldHVybiBObigpLCEhKHRoaXMuQmImSHUpO2Nhc2UgMTY6cmV0dXJuIE5uKCksISEodGhpcy5CYiZtZCk7Y2FzZSAxNzpyZXR1cm4gWW0odGhpcyl9cmV0dXJuIHVoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fHRoaXMuemgoKSksZSksbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLFpjKHRoaXMuQWIsZSxyKTtjYXNlIDE3OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP1VzZSh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1vLG51bGwscikpKSxIbCh0aGlzLGUsMTcscil9cmV0dXJuIGg9dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLG4pLDY2KSxoLk5qKCkuUWoodGhpcyxzdSh0aGlzKSxuLUpuKHRoaXMuemgoKSksZSxyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxCYSh0aGlzLkFiLGUscik7Y2FzZSA5OnJldHVybiBucnQodGhpcyxyKTtjYXNlIDE3OnJldHVybiBIbCh0aGlzLG51bGwsMTcscil9cmV0dXJuIG89dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxzdSh0aGlzKSxuLUpuKHRoaXMuemgoKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbixyO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4odGhpcy5CYiYyNTYpPT0wO2Nhc2UgMzpyZXR1cm4odGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gdGhpcy4kaigpO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmcXcodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmcXcodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybih0aGlzLkJiJnhmKT09MDtjYXNlIDExOnJldHVybih0aGlzLkJiJkR5KSE9MDtjYXNlIDEyOnJldHVybih0aGlzLkJiJkV5KSE9MDtjYXNlIDEzOnJldHVybiB0aGlzLmohPW51bGw7Y2FzZSAxNDpyZXR1cm4gU0UodGhpcykhPW51bGw7Y2FzZSAxNTpyZXR1cm4odGhpcy5CYiZIdSkhPTA7Y2FzZSAxNjpyZXR1cm4odGhpcy5CYiZtZCkhPTA7Y2FzZSAxNzpyZXR1cm4hIVltKHRoaXMpfXJldHVybiBvaCh0aGlzLGUtSm4odGhpcy56aCgpKSx5bigobj11KERuKHRoaXMsMTYpLDI2KSxufHx0aGlzLnpoKCkpLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByLHM7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLGlzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTpNcnQodGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgMjp6Zyh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMzpxZyh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgNDpSZyh0aGlzLHUobiwxOSkuYSk7cmV0dXJuO2Nhc2UgNTp0aGlzLm9rKHUobiwxOSkuYSk7cmV0dXJuO2Nhc2UgODpiMih0aGlzLHUobiwxMzgpKTtyZXR1cm47Y2FzZSA5OnM9RjEodGhpcyx1KG4sODcpLG51bGwpLHMmJnMuRmkoKTtyZXR1cm47Y2FzZSAxMDpsRSh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMTE6ZEUodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDEyOmhFKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAxMzpyMnQodGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgMTU6ZkUodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDE2OmdFKHRoaXMsamUoUmUobikpKTtyZXR1cm59Z2godGhpcyxlLUpuKHRoaXMuemgoKSkseW4oKHI9dShEbih0aGlzLDE2KSwyNikscnx8dGhpcy56aCgpKSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBkbigpLHY1ZX0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbixyO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6X3QodGhpcy5DYiw4OCkmJmd5KHNsKHUodGhpcy5DYiw4OCkpLDQpLFFjKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjp6Zyh0aGlzLCEwKTtyZXR1cm47Y2FzZSAzOnFnKHRoaXMsITApO3JldHVybjtjYXNlIDQ6UmcodGhpcywwKTtyZXR1cm47Y2FzZSA1OnRoaXMub2soMSk7cmV0dXJuO2Nhc2UgODpiMih0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6cj1GMSh0aGlzLG51bGwsbnVsbCksciYmci5GaSgpO3JldHVybjtjYXNlIDEwOmxFKHRoaXMsITApO3JldHVybjtjYXNlIDExOmRFKHRoaXMsITEpO3JldHVybjtjYXNlIDEyOmhFKHRoaXMsITEpO3JldHVybjtjYXNlIDEzOnRoaXMuaT1udWxsLGZ6KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTU6ZkUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTY6Z0UodGhpcywhMSk7cmV0dXJufWZoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fHRoaXMuemgoKSksZSkpfSxsLkdoPWZ1bmN0aW9uKCl7TTgoVG8oKCR1KCkseWEpLHRoaXMpKSxEaCh0aGlzKSx0aGlzLkJifD0xfSxsLkdqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0sbC56aj1mdW5jdGlvbigpe3JldHVybiBTRSh0aGlzKX0sbC5Iaj1mdW5jdGlvbigpe3JldHVybiBZbSh0aGlzKX0sbC5Maj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLnBrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua30sbC5haj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm59LGwuTWo9ZnVuY3Rpb24oKXtyZXR1cm4gY3EodGhpcyl9LGwuTmo9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGgsZCx2LGs7cmV0dXJuIHRoaXMucHx8KHI9WW0odGhpcyksKHIuaT09bnVsbCYmdmQociksci5pKS5sZW5ndGgscz10aGlzLkxqKCkscyYmSm4oWW0ocykpLG89RGgodGhpcyksZD1vLkJqKCksZT1kP2QuaSYxP2Q9PXBsP1JzOmQ9PUNyP2phOmQ9PWEzP2k3OmQ9PWFhP2xhOmQ9PU9iP1N2OmQ9PWc1P0F2OmQ9PUd1P002OnVTOmQ6bnVsbCxuPVNFKHRoaXMpLHY9by56aigpLHNobih0aGlzKSx0aGlzLkJiJm1kJiYoKGg9ZDR0KCgkdSgpLHlhKSxyKSkmJmghPXRoaXN8fChoPUt4KFRvKHlhLHRoaXMpKSkpP3RoaXMucD1uZXcgWkd0KHRoaXMsaCk6dGhpcy4kaigpP3RoaXMucmsoKT9zP3RoaXMuQmImSHU/ZT90aGlzLnNrKCk/dGhpcy5wPW5ldyBuMig0NyxlLHRoaXMscyk6dGhpcy5wPW5ldyBuMig1LGUsdGhpcyxzKTp0aGlzLnNrKCk/dGhpcy5wPW5ldyBzMig0Nix0aGlzLHMpOnRoaXMucD1uZXcgczIoNCx0aGlzLHMpOmU/dGhpcy5zaygpP3RoaXMucD1uZXcgbjIoNDksZSx0aGlzLHMpOnRoaXMucD1uZXcgbjIoNyxlLHRoaXMscyk6dGhpcy5zaygpP3RoaXMucD1uZXcgczIoNDgsdGhpcyxzKTp0aGlzLnA9bmV3IHMyKDYsdGhpcyxzKTp0aGlzLkJiJkh1P2U/ZT09UDI/dGhpcy5wPW5ldyBJZyg1MCx0NWUsdGhpcyk6dGhpcy5zaygpP3RoaXMucD1uZXcgSWcoNDMsZSx0aGlzKTp0aGlzLnA9bmV3IElnKDEsZSx0aGlzKTp0aGlzLnNrKCk/dGhpcy5wPW5ldyBQZyg0Mix0aGlzKTp0aGlzLnA9bmV3IFBnKDAsdGhpcyk6ZT9lPT1QMj90aGlzLnA9bmV3IElnKDQxLHQ1ZSx0aGlzKTp0aGlzLnNrKCk/dGhpcy5wPW5ldyBJZyg0NSxlLHRoaXMpOnRoaXMucD1uZXcgSWcoMyxlLHRoaXMpOnRoaXMuc2soKT90aGlzLnA9bmV3IFBnKDQ0LHRoaXMpOnRoaXMucD1uZXcgUGcoMix0aGlzKTpfdChvLDE0OCk/ZT09YlU/dGhpcy5wPW5ldyBQZyg0MCx0aGlzKTp0aGlzLkJiJjUxMj90aGlzLkJiJkh1P2U/dGhpcy5wPW5ldyBJZyg5LGUsdGhpcyk6dGhpcy5wPW5ldyBQZyg4LHRoaXMpOmU/dGhpcy5wPW5ldyBJZygxMSxlLHRoaXMpOnRoaXMucD1uZXcgUGcoMTAsdGhpcyk6dGhpcy5CYiZIdT9lP3RoaXMucD1uZXcgSWcoMTMsZSx0aGlzKTp0aGlzLnA9bmV3IFBnKDEyLHRoaXMpOmU/dGhpcy5wPW5ldyBJZygxNSxlLHRoaXMpOnRoaXMucD1uZXcgUGcoMTQsdGhpcyk6cz8oaz1zLnQsaz4xfHxrPT0tMT90aGlzLnNrKCk/dGhpcy5CYiZIdT9lP3RoaXMucD1uZXcgbjIoMjUsZSx0aGlzLHMpOnRoaXMucD1uZXcgczIoMjQsdGhpcyxzKTplP3RoaXMucD1uZXcgbjIoMjcsZSx0aGlzLHMpOnRoaXMucD1uZXcgczIoMjYsdGhpcyxzKTp0aGlzLkJiJkh1P2U/dGhpcy5wPW5ldyBuMigyOSxlLHRoaXMscyk6dGhpcy5wPW5ldyBzMigyOCx0aGlzLHMpOmU/dGhpcy5wPW5ldyBuMigzMSxlLHRoaXMscyk6dGhpcy5wPW5ldyBzMigzMCx0aGlzLHMpOnRoaXMuc2soKT90aGlzLkJiJkh1P2U/dGhpcy5wPW5ldyBuMigzMyxlLHRoaXMscyk6dGhpcy5wPW5ldyBzMigzMix0aGlzLHMpOmU/dGhpcy5wPW5ldyBuMigzNSxlLHRoaXMscyk6dGhpcy5wPW5ldyBzMigzNCx0aGlzLHMpOnRoaXMuQmImSHU/ZT90aGlzLnA9bmV3IG4yKDM3LGUsdGhpcyxzKTp0aGlzLnA9bmV3IHMyKDM2LHRoaXMscyk6ZT90aGlzLnA9bmV3IG4yKDM5LGUsdGhpcyxzKTp0aGlzLnA9bmV3IHMyKDM4LHRoaXMscykpOnRoaXMuc2soKT90aGlzLkJiJkh1P2U/dGhpcy5wPW5ldyBJZygxNyxlLHRoaXMpOnRoaXMucD1uZXcgUGcoMTYsdGhpcyk6ZT90aGlzLnA9bmV3IElnKDE5LGUsdGhpcyk6dGhpcy5wPW5ldyBQZygxOCx0aGlzKTp0aGlzLkJiJkh1P2U/dGhpcy5wPW5ldyBJZygyMSxlLHRoaXMpOnRoaXMucD1uZXcgUGcoMjAsdGhpcyk6ZT90aGlzLnA9bmV3IElnKDIzLGUsdGhpcyk6dGhpcy5wPW5ldyBQZygyMix0aGlzKTp0aGlzLnFrKCk/dGhpcy5zaygpP3RoaXMucD1uZXcgall0KHUobywyNiksdGhpcyxzKTp0aGlzLnA9bmV3ICR2dCh1KG8sMjYpLHRoaXMscyk6X3QobywxNDgpP2U9PWJVP3RoaXMucD1uZXcgUGcoNDAsdGhpcyk6dGhpcy5CYiZIdT9lP3RoaXMucD1uZXcgQkt0KG4sdix0aGlzLChyc3QoKSxkPT1Dcj9kTHQ6ZD09cGw/Y0x0OmQ9PU9iP2dMdDpkPT1hMz9mTHQ6ZD09YWE/aEx0OmQ9PWc1P3BMdDpkPT1HdT91THQ6ZD09eGg/bEx0OmpmdCkpOnRoaXMucD1uZXcgS1h0KHUobywxNDgpLG4sdix0aGlzKTplP3RoaXMucD1uZXcgTkt0KG4sdix0aGlzLChyc3QoKSxkPT1Dcj9kTHQ6ZD09cGw/Y0x0OmQ9PU9iP2dMdDpkPT1hMz9mTHQ6ZD09YWE/aEx0OmQ9PWc1P3BMdDpkPT1HdT91THQ6ZD09eGg/bEx0OmpmdCkpOnRoaXMucD1uZXcgWVh0KHUobywxNDgpLG4sdix0aGlzKTp0aGlzLnJrKCk/cz90aGlzLkJiJkh1P3RoaXMuc2soKT90aGlzLnA9bmV3IHpZdCh1KG8sMjYpLHRoaXMscyk6dGhpcy5wPW5ldyBEd3QodShvLDI2KSx0aGlzLHMpOnRoaXMuc2soKT90aGlzLnA9bmV3ICRZdCh1KG8sMjYpLHRoaXMscyk6dGhpcy5wPW5ldyBJbnQodShvLDI2KSx0aGlzLHMpOnRoaXMuQmImSHU/dGhpcy5zaygpP3RoaXMucD1uZXcgTld0KHUobywyNiksdGhpcyk6dGhpcy5wPW5ldyBHMnQodShvLDI2KSx0aGlzKTp0aGlzLnNrKCk/dGhpcy5wPW5ldyBGV3QodShvLDI2KSx0aGlzKTp0aGlzLnA9bmV3IHZudCh1KG8sMjYpLHRoaXMpOnRoaXMuc2soKT9zP3RoaXMuQmImSHU/dGhpcy5wPW5ldyBxWXQodShvLDI2KSx0aGlzLHMpOnRoaXMucD1uZXcgTHd0KHUobywyNiksdGhpcyxzKTp0aGlzLkJiJkh1P3RoaXMucD1uZXcgQld0KHUobywyNiksdGhpcyk6dGhpcy5wPW5ldyBVMnQodShvLDI2KSx0aGlzKTpzP3RoaXMuQmImSHU/dGhpcy5wPW5ldyBIWXQodShvLDI2KSx0aGlzLHMpOnRoaXMucD1uZXcgTXd0KHUobywyNiksdGhpcyxzKTp0aGlzLkJiJkh1P3RoaXMucD1uZXcgUld0KHUobywyNiksdGhpcyk6dGhpcy5wPW5ldyBVaih1KG8sMjYpLHRoaXMpKSx0aGlzLnB9LGwuSWo9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5CYiZ4ZikhPTB9LGwucWs9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5yaz1mdW5jdGlvbigpe3JldHVybiExfSxsLkpqPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuQmImbWQpIT0wfSxsLk9qPWZ1bmN0aW9uKCl7cmV0dXJuIGFpdCh0aGlzKX0sbC5zaz1mdW5jdGlvbigpe3JldHVybiExfSxsLktqPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuQmImSHUpIT0wfSxsLnRrPWZ1bmN0aW9uKGUpe3RoaXMuaz1lfSxsLkxoPWZ1bmN0aW9uKGUpe01ydCh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIF9xKHRoaXMpfSxsLmU9ITEsbC5uPTAsRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbCIsNDQ5KSxEKDMyMiw0NDksezEwNToxLDkyOjEsOTA6MSwzNDoxLDE0NzoxLDE5MToxLDU2OjEsMTcwOjEsNjY6MSwxMDg6MSw0NzI6MSw0OToxLDk3OjEsMzIyOjEsMTUwOjEsNDQ5OjEsMjg0OjEsMTE0OjEsMTE1OjEsNjc3OjF9LHJldCksbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIE5uKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgMzpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJjUxMik7Y2FzZSA0OnJldHVybiBwZSh0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gcGUodGhpcy50KTtjYXNlIDY6cmV0dXJuIE5uKCksISFjNXQodGhpcyk7Y2FzZSA3OnJldHVybiBObigpLG89dGhpcy5zLG8+PTE7Y2FzZSA4OnJldHVybiBuP0RoKHRoaXMpOnRoaXMucjtjYXNlIDk6cmV0dXJuIHRoaXMucTtjYXNlIDEwOnJldHVybiBObigpLCEhKHRoaXMuQmImeGYpO2Nhc2UgMTE6cmV0dXJuIE5uKCksISEodGhpcy5CYiZEeSk7Y2FzZSAxMjpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJkV5KTtjYXNlIDEzOnJldHVybiB0aGlzLmo7Y2FzZSAxNDpyZXR1cm4gU0UodGhpcyk7Y2FzZSAxNTpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJkh1KTtjYXNlIDE2OnJldHVybiBObigpLCEhKHRoaXMuQmImbWQpO2Nhc2UgMTc6cmV0dXJuIFltKHRoaXMpO2Nhc2UgMTg6cmV0dXJuIE5uKCksISEodGhpcy5CYiZkYyk7Y2FzZSAxOTpyZXR1cm4gbj9UaXQodGhpcyk6S0p0KHRoaXMpfXJldHVybiB1aCh0aGlzLGUtSm4oKGRuKCkscjMpKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHxyMyksZSksbixyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbixyO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4odGhpcy5CYiYyNTYpPT0wO2Nhc2UgMzpyZXR1cm4odGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gYzV0KHRoaXMpO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmcXcodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmcXcodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybih0aGlzLkJiJnhmKT09MDtjYXNlIDExOnJldHVybih0aGlzLkJiJkR5KSE9MDtjYXNlIDEyOnJldHVybih0aGlzLkJiJkV5KSE9MDtjYXNlIDEzOnJldHVybiB0aGlzLmohPW51bGw7Y2FzZSAxNDpyZXR1cm4gU0UodGhpcykhPW51bGw7Y2FzZSAxNTpyZXR1cm4odGhpcy5CYiZIdSkhPTA7Y2FzZSAxNjpyZXR1cm4odGhpcy5CYiZtZCkhPTA7Y2FzZSAxNzpyZXR1cm4hIVltKHRoaXMpO2Nhc2UgMTg6cmV0dXJuKHRoaXMuQmImZGMpIT0wO2Nhc2UgMTk6cmV0dXJuISFLSnQodGhpcyl9cmV0dXJuIG9oKHRoaXMsZS1KbigoZG4oKSxyMykpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fHIzKSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxpcyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6TXJ0KHRoaXMsQnIobikpO3JldHVybjtjYXNlIDI6emcodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDM6cWcodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDQ6UmcodGhpcyx1KG4sMTkpLmEpO3JldHVybjtjYXNlIDU6U0h0KHRoaXMsdShuLDE5KS5hKTtyZXR1cm47Y2FzZSA4OmIyKHRoaXMsdShuLDEzOCkpO3JldHVybjtjYXNlIDk6cz1GMSh0aGlzLHUobiw4NyksbnVsbCkscyYmcy5GaSgpO3JldHVybjtjYXNlIDEwOmxFKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAxMTpkRSh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMTI6aEUodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDEzOnIydCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAxNTpmRSh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMTY6Z0UodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDE4OktpdCh0aGlzLGplKFJlKG4pKSk7cmV0dXJufWdoKHRoaXMsZS1KbigoZG4oKSxyMykpLHluKChyPXUoRG4odGhpcywxNiksMjYpLHJ8fHIzKSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBkbigpLHIzfSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuLHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpfdCh0aGlzLkNiLDg4KSYmZ3koc2wodSh0aGlzLkNiLDg4KSksNCksUWModGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOnpnKHRoaXMsITApO3JldHVybjtjYXNlIDM6cWcodGhpcywhMCk7cmV0dXJuO2Nhc2UgNDpSZyh0aGlzLDApO3JldHVybjtjYXNlIDU6dGhpcy5iPTAscnkodGhpcywxKTtyZXR1cm47Y2FzZSA4OmIyKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgOTpyPUYxKHRoaXMsbnVsbCxudWxsKSxyJiZyLkZpKCk7cmV0dXJuO2Nhc2UgMTA6bEUodGhpcywhMCk7cmV0dXJuO2Nhc2UgMTE6ZEUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTI6aEUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTM6dGhpcy5pPW51bGwsZnoodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAxNTpmRSh0aGlzLCExKTtyZXR1cm47Y2FzZSAxNjpnRSh0aGlzLCExKTtyZXR1cm47Y2FzZSAxODpLaXQodGhpcywhMSk7cmV0dXJufWZoKHRoaXMsZS1KbigoZG4oKSxyMykpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fHIzKSxlKSl9LGwuR2g9ZnVuY3Rpb24oKXtUaXQodGhpcyksTTgoVG8oKCR1KCkseWEpLHRoaXMpKSxEaCh0aGlzKSx0aGlzLkJifD0xfSxsLiRqPWZ1bmN0aW9uKCl7cmV0dXJuIGM1dCh0aGlzKX0sbC5uaz1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLmI9MCx0aGlzLmE9bnVsbCxlM3QodGhpcyxlLG4pfSxsLm9rPWZ1bmN0aW9uKGUpe1NIdCh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuRGImNjQ/X3EodGhpcyk6KGU9bmV3IF9oKF9xKHRoaXMpKSxlLmErPSIgKGlEOiAiLExnKGUsKHRoaXMuQmImZGMpIT0wKSxlLmErPSIpIixlLmEpfSxsLmI9MCxGKE1uLCJFQXR0cmlidXRlSW1wbCIsMzIyKSxEKDM1MSw0MzgsezEwNToxLDkyOjEsOTA6MSwxMzg6MSwxNDc6MSwxOTE6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwzNTE6MSwxNTA6MSwxMTQ6MSwxMTU6MSw2NzY6MX0pLGwudWs9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuVGcoKT09dGhpc30sbC5RZz1mdW5jdGlvbihlKXtyZXR1cm4gTHN0KHRoaXMsZSl9LGwuUmc9ZnVuY3Rpb24oZSxuKXt0aGlzLnc9bnVsbCx0aGlzLkRiPW48PDE2fHRoaXMuRGImMjU1LHRoaXMuQ2I9ZX0sbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGw/dGhpcy5EOnRoaXMuQjtjYXNlIDM6cmV0dXJuIGh2KHRoaXMpO2Nhc2UgNDpyZXR1cm4gdGhpcy56aigpO2Nhc2UgNTpyZXR1cm4gdGhpcy5GO2Nhc2UgNjpyZXR1cm4gbj9SbCh0aGlzKTpPOCh0aGlzKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgRnUoaHUsdGhpcyw3KSksdGhpcy5BfXJldHVybiB1aCh0aGlzLGUtSm4odGhpcy56aCgpKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLGUpLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxaYyh0aGlzLkFiLGUscik7Y2FzZSA2OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP0xzdCh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1vLG51bGwscikpKSxIbCh0aGlzLGUsNixyKX1yZXR1cm4gaD11KHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fHRoaXMuemgoKSksbiksNjYpLGguTmooKS5Raih0aGlzLHN1KHRoaXMpLG4tSm4odGhpcy56aCgpKSxlLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLEJhKHRoaXMuQWIsZSxyKTtjYXNlIDY6cmV0dXJuIEhsKHRoaXMsbnVsbCw2LHIpO2Nhc2UgNzpyZXR1cm4hdGhpcy5BJiYodGhpcy5BPW5ldyBGdShodSx0aGlzLDcpKSxCYSh0aGlzLkEsZSxyKX1yZXR1cm4gbz11KHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fHRoaXMuemgoKSksbiksNjYpLG8uTmooKS5Saih0aGlzLHN1KHRoaXMpLG4tSm4odGhpcy56aCgpKSxlLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4gdGhpcy5EIT1udWxsJiZ0aGlzLkQ9PXRoaXMuRjtjYXNlIDM6cmV0dXJuISFodih0aGlzKTtjYXNlIDQ6cmV0dXJuIHRoaXMuemooKSE9bnVsbDtjYXNlIDU6cmV0dXJuIHRoaXMuRiE9bnVsbCYmdGhpcy5GIT10aGlzLkQmJnRoaXMuRiE9dGhpcy5CO2Nhc2UgNjpyZXR1cm4hIU84KHRoaXMpO2Nhc2UgNzpyZXR1cm4hIXRoaXMuQSYmdGhpcy5BLmkhPTB9cmV0dXJuIG9oKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fHRoaXMuemgoKSksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLGlzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTpfJCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAyOnNudCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSA1Ok9FKHRoaXMsQnIobikpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgRnUoaHUsdGhpcyw3KSkseHIodGhpcy5BKSwhdGhpcy5BJiYodGhpcy5BPW5ldyBGdShodSx0aGlzLDcpKSxpcyh0aGlzLkEsdShuLDE0KSk7cmV0dXJufWdoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHluKChyPXUoRG4odGhpcywxNiksMjYpLHJ8fHRoaXMuemgoKSksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxmNWV9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpfdCh0aGlzLkNiLDE3OSkmJih1KHRoaXMuQ2IsMTc5KS50Yj1udWxsKSxRYyh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6YUUodGhpcyxudWxsKSxZOCh0aGlzLHRoaXMuRCk7cmV0dXJuO2Nhc2UgNTpPRSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgRnUoaHUsdGhpcyw3KSkseHIodGhpcy5BKTtyZXR1cm59ZmgodGhpcyxlLUpuKHRoaXMuemgoKSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8dGhpcy56aCgpKSxlKSl9LGwueWo9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5HPT0tMSYmKHRoaXMuRz0oZT1SbCh0aGlzKSxlP0hnKGUuTWgoKSx0aGlzKTotMSkpLHRoaXMuR30sbC56aj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLkFqPWZ1bmN0aW9uKCl7cmV0dXJuIFJsKHRoaXMpfSxsLnZrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudn0sbC5Caj1mdW5jdGlvbigpe3JldHVybiBodih0aGlzKX0sbC5Daj1mdW5jdGlvbigpe3JldHVybiB0aGlzLkQhPW51bGw/dGhpcy5EOnRoaXMuQn0sbC5Eaj1mdW5jdGlvbigpe3JldHVybiB0aGlzLkZ9LGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHhhdCh0aGlzLGUpfSxsLndrPWZ1bmN0aW9uKGUpe3RoaXMudj1lfSxsLnhrPWZ1bmN0aW9uKGUpe0NuZSh0aGlzLGUpfSxsLnlrPWZ1bmN0aW9uKGUpe3RoaXMuQz1lfSxsLkxoPWZ1bmN0aW9uKGUpe18kKHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gUnoodGhpcyl9LGwuQz1udWxsLGwuRD1udWxsLGwuRz0tMSxGKE1uLCJFQ2xhc3NpZmllckltcGwiLDM1MSksRCg4OCwzNTEsezEwNToxLDkyOjEsOTA6MSwyNjoxLDEzODoxLDE0NzoxLDE5MToxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDg4OjEsMzUxOjEsMTUwOjEsNDczOjEsMTE0OjEsMTE1OjEsNjc2OjF9LGVNKSxsLnVrPWZ1bmN0aW9uKGUpe3JldHVybiB6WmUodGhpcyxlLlRnKCkpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbD90aGlzLkQ6dGhpcy5CO2Nhc2UgMzpyZXR1cm4gaHYodGhpcyk7Y2FzZSA0OnJldHVybiBudWxsO2Nhc2UgNTpyZXR1cm4gdGhpcy5GO2Nhc2UgNjpyZXR1cm4gbj9SbCh0aGlzKTpPOCh0aGlzKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgRnUoaHUsdGhpcyw3KSksdGhpcy5BO2Nhc2UgODpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJjI1Nik7Y2FzZSA5OnJldHVybiBObigpLCEhKHRoaXMuQmImNTEyKTtjYXNlIDEwOnJldHVybiBBbyh0aGlzKTtjYXNlIDExOnJldHVybiF0aGlzLnEmJih0aGlzLnE9bmV3IGZlKFdoLHRoaXMsMTEsMTApKSx0aGlzLnE7Y2FzZSAxMjpyZXR1cm4gVDQodGhpcyk7Y2FzZSAxMzpyZXR1cm4gQ18odGhpcyk7Y2FzZSAxNDpyZXR1cm4gQ18odGhpcyksdGhpcy5yO2Nhc2UgMTU6cmV0dXJuIFQ0KHRoaXMpLHRoaXMuaztjYXNlIDE2OnJldHVybiBaNHQodGhpcyk7Y2FzZSAxNzpyZXR1cm4gX2F0KHRoaXMpO2Nhc2UgMTg6cmV0dXJuIHZkKHRoaXMpO2Nhc2UgMTk6cmV0dXJuIG1xKHRoaXMpO2Nhc2UgMjA6cmV0dXJuIFQ0KHRoaXMpLHRoaXMubztjYXNlIDIxOnJldHVybiF0aGlzLnMmJih0aGlzLnM9bmV3IGZlKE11LHRoaXMsMjEsMTcpKSx0aGlzLnM7Y2FzZSAyMjpyZXR1cm4gTGModGhpcyk7Y2FzZSAyMzpyZXR1cm4gaGF0KHRoaXMpfXJldHVybiB1aCh0aGlzLGUtSm4oKGRuKCksTGIpKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHxMYiksZSksbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLFpjKHRoaXMuQWIsZSxyKTtjYXNlIDY6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/THN0KHRoaXMscik6dGhpcy5DYi5paCh0aGlzLC0xLW8sbnVsbCxyKSkpLEhsKHRoaXMsZSw2LHIpO2Nhc2UgMTE6cmV0dXJuIXRoaXMucSYmKHRoaXMucT1uZXcgZmUoV2gsdGhpcywxMSwxMCkpLFpjKHRoaXMucSxlLHIpO2Nhc2UgMjE6cmV0dXJuIXRoaXMucyYmKHRoaXMucz1uZXcgZmUoTXUsdGhpcywyMSwxNykpLFpjKHRoaXMucyxlLHIpfXJldHVybiBoPXUoeW4oKHM9dShEbih0aGlzLDE2KSwyNiksc3x8KGRuKCksTGIpKSxuKSw2NiksaC5OaigpLlFqKHRoaXMsc3UodGhpcyksbi1KbigoZG4oKSxMYikpLGUscil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksQmEodGhpcy5BYixlLHIpO2Nhc2UgNjpyZXR1cm4gSGwodGhpcyxudWxsLDYscik7Y2FzZSA3OnJldHVybiF0aGlzLkEmJih0aGlzLkE9bmV3IEZ1KGh1LHRoaXMsNykpLEJhKHRoaXMuQSxlLHIpO2Nhc2UgMTE6cmV0dXJuIXRoaXMucSYmKHRoaXMucT1uZXcgZmUoV2gsdGhpcywxMSwxMCkpLEJhKHRoaXMucSxlLHIpO2Nhc2UgMjE6cmV0dXJuIXRoaXMucyYmKHRoaXMucz1uZXcgZmUoTXUsdGhpcywyMSwxNykpLEJhKHRoaXMucyxlLHIpO2Nhc2UgMjI6cmV0dXJuIEJhKExjKHRoaXMpLGUscil9cmV0dXJuIG89dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxMYikpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxzdSh0aGlzKSxuLUpuKChkbigpLExiKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbCYmdGhpcy5EPT10aGlzLkY7Y2FzZSAzOnJldHVybiEhaHYodGhpcyk7Y2FzZSA0OnJldHVybiExO2Nhc2UgNTpyZXR1cm4gdGhpcy5GIT1udWxsJiZ0aGlzLkYhPXRoaXMuRCYmdGhpcy5GIT10aGlzLkI7Y2FzZSA2OnJldHVybiEhTzgodGhpcyk7Y2FzZSA3OnJldHVybiEhdGhpcy5BJiZ0aGlzLkEuaSE9MDtjYXNlIDg6cmV0dXJuKHRoaXMuQmImMjU2KSE9MDtjYXNlIDk6cmV0dXJuKHRoaXMuQmImNTEyKSE9MDtjYXNlIDEwOnJldHVybiEhdGhpcy51JiZMYyh0aGlzLnUuYSkuaSE9MCYmISh0aGlzLm4mJnZzdCh0aGlzLm4pKTtjYXNlIDExOnJldHVybiEhdGhpcy5xJiZ0aGlzLnEuaSE9MDtjYXNlIDEyOnJldHVybiBUNCh0aGlzKS5pIT0wO2Nhc2UgMTM6cmV0dXJuIENfKHRoaXMpLmkhPTA7Y2FzZSAxNDpyZXR1cm4gQ18odGhpcyksdGhpcy5yLmkhPTA7Y2FzZSAxNTpyZXR1cm4gVDQodGhpcyksdGhpcy5rLmkhPTA7Y2FzZSAxNjpyZXR1cm4gWjR0KHRoaXMpLmkhPTA7Y2FzZSAxNzpyZXR1cm4gX2F0KHRoaXMpLmkhPTA7Y2FzZSAxODpyZXR1cm4gdmQodGhpcykuaSE9MDtjYXNlIDE5OnJldHVybiBtcSh0aGlzKS5pIT0wO2Nhc2UgMjA6cmV0dXJuIFQ0KHRoaXMpLCEhdGhpcy5vO2Nhc2UgMjE6cmV0dXJuISF0aGlzLnMmJnRoaXMucy5pIT0wO2Nhc2UgMjI6cmV0dXJuISF0aGlzLm4mJnZzdCh0aGlzLm4pO2Nhc2UgMjM6cmV0dXJuIGhhdCh0aGlzKS5pIT0wfXJldHVybiBvaCh0aGlzLGUtSm4oKGRuKCksTGIpKSx5bigobj11KERuKHRoaXMsMTYpLDI2KSxufHxMYiksZSkpfSxsLm9oPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPXRoaXMuaT09bnVsbHx8dGhpcy5xJiZ0aGlzLnEuaSE9MD9udWxsOm1JKHRoaXMsZSksbnx8THh0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksaXModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOl8kKHRoaXMsQnIobikpO3JldHVybjtjYXNlIDI6c250KHRoaXMsQnIobikpO3JldHVybjtjYXNlIDU6T0UodGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgNzohdGhpcy5BJiYodGhpcy5BPW5ldyBGdShodSx0aGlzLDcpKSx4cih0aGlzLkEpLCF0aGlzLkEmJih0aGlzLkE9bmV3IEZ1KGh1LHRoaXMsNykpLGlzKHRoaXMuQSx1KG4sMTQpKTtyZXR1cm47Y2FzZSA4OnIzdCh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgOTppM3QodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDEwOkFfKEFvKHRoaXMpKSxpcyhBbyh0aGlzKSx1KG4sMTQpKTtyZXR1cm47Y2FzZSAxMTohdGhpcy5xJiYodGhpcy5xPW5ldyBmZShXaCx0aGlzLDExLDEwKSkseHIodGhpcy5xKSwhdGhpcy5xJiYodGhpcy5xPW5ldyBmZShXaCx0aGlzLDExLDEwKSksaXModGhpcy5xLHUobiwxNCkpO3JldHVybjtjYXNlIDIxOiF0aGlzLnMmJih0aGlzLnM9bmV3IGZlKE11LHRoaXMsMjEsMTcpKSx4cih0aGlzLnMpLCF0aGlzLnMmJih0aGlzLnM9bmV3IGZlKE11LHRoaXMsMjEsMTcpKSxpcyh0aGlzLnMsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMjI6eHIoTGModGhpcykpLGlzKExjKHRoaXMpLHUobiwxNCkpO3JldHVybn1naCh0aGlzLGUtSm4oKGRuKCksTGIpKSx5bigocj11KERuKHRoaXMsMTYpLDI2KSxyfHxMYiksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxMYn0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOl90KHRoaXMuQ2IsMTc5KSYmKHUodGhpcy5DYiwxNzkpLnRiPW51bGwpLFFjKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjphRSh0aGlzLG51bGwpLFk4KHRoaXMsdGhpcy5EKTtyZXR1cm47Y2FzZSA1Ok9FKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNzohdGhpcy5BJiYodGhpcy5BPW5ldyBGdShodSx0aGlzLDcpKSx4cih0aGlzLkEpO3JldHVybjtjYXNlIDg6cjN0KHRoaXMsITEpO3JldHVybjtjYXNlIDk6aTN0KHRoaXMsITEpO3JldHVybjtjYXNlIDEwOnRoaXMudSYmQV8odGhpcy51KTtyZXR1cm47Y2FzZSAxMTohdGhpcy5xJiYodGhpcy5xPW5ldyBmZShXaCx0aGlzLDExLDEwKSkseHIodGhpcy5xKTtyZXR1cm47Y2FzZSAyMTohdGhpcy5zJiYodGhpcy5zPW5ldyBmZShNdSx0aGlzLDIxLDE3KSkseHIodGhpcy5zKTtyZXR1cm47Y2FzZSAyMjp0aGlzLm4mJnhyKHRoaXMubik7cmV0dXJufWZoKHRoaXMsZS1KbigoZG4oKSxMYikpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fExiKSxlKSl9LGwuR2g9ZnVuY3Rpb24oKXt2YXIgZSxuO2lmKFQ0KHRoaXMpLENfKHRoaXMpLFo0dCh0aGlzKSxfYXQodGhpcyksdmQodGhpcyksbXEodGhpcyksaGF0KHRoaXMpLHo5KGllbihzbCh0aGlzKSkpLHRoaXMucylmb3IoZT0wLG49dGhpcy5zLmk7ZTxuOysrZSl6TShBdCh0aGlzLnMsZSkpO2lmKHRoaXMucSlmb3IoZT0wLG49dGhpcy5xLmk7ZTxuOysrZSl6TShBdCh0aGlzLnEsZSkpOyRnKCgkdSgpLHlhKSx0aGlzKS5uZSgpLHRoaXMuQmJ8PTF9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4geTR0KHRoaXMpfSxsLms9bnVsbCxsLnI9bnVsbDt2YXIgdUEsazVlLEJmdDtGKE1uLCJFQ2xhc3NJbXBsIiw4OCksRCgxOTk0LDE5OTMsejBlKSxsLlZoPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGthdCh0aGlzLGUsbil9LGwuV2g9ZnVuY3Rpb24oZSl7cmV0dXJuIGthdCh0aGlzLHRoaXMuaSxlKX0sbC5YaD1mdW5jdGlvbihlLG4pe2Q1dCh0aGlzLGUsbil9LGwuWWg9ZnVuY3Rpb24oZSl7dGF0KHRoaXMsZSl9LGwubGs9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWmModGhpcyxlLG4pfSxsLnBpPWZ1bmN0aW9uKGUpe3JldHVybiBGbXQodGhpcyxlKX0sbC5taz1mdW5jdGlvbihlLG4pe3JldHVybiBCYSh0aGlzLGUsbil9LGwubWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRmxlKHRoaXMsZSxuKX0sbC5aaD1mdW5jdGlvbigpe3JldHVybiBuZXcgQngodGhpcyl9LGwuJGg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3ICRNKHRoaXMpfSxsLl9oPWZ1bmN0aW9uKGUpe3JldHVybiBERCh0aGlzLGUpfSxGKCRpLCJOb3RpZnlpbmdJbnRlcm5hbEVMaXN0SW1wbCIsMTk5NCksRCg2MjIsMTk5NCx6byksbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gSmxlKHRoaXMsZSl9LGwuWmk9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gRjkodGhpcyxlLG4scixzLG8pfSxsLiRpPWZ1bmN0aW9uKGUpe244KHRoaXMsZSl9LGwuV2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXN9LGwuYWs9ZnVuY3Rpb24oKXtyZXR1cm4geW4odGhpcy5lLlRnKCksdGhpcy5haigpKX0sbC5faT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFrKCl9LGwuYWo9ZnVuY3Rpb24oKXtyZXR1cm4gR2kodGhpcy5lLlRnKCksdGhpcy5haygpKX0sbC56az1mdW5jdGlvbigpe3JldHVybiB1KHRoaXMuYWsoKS5ZaigpLDI2KS5CaigpfSxsLkFrPWZ1bmN0aW9uKCl7cmV0dXJuIG5vKHUodGhpcy5haygpLDE4KSkubn0sbC5BaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV9LGwuQms9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5Daz1mdW5jdGlvbigpe3JldHVybiExfSxsLkRrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuRWs9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5YYz1mdW5jdGlvbihlKXtyZXR1cm4gSGcodGhpcyxlKX0sbC5jaj1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiByPXUoZSw0OSksdGhpcy5EaygpP3RoaXMuQmsoKT9yLmdoKHRoaXMuZSx0aGlzLkFrKCksdGhpcy56aygpLG4pOnIuZ2godGhpcy5lLEdpKHIuVGcoKSxubyh1KHRoaXMuYWsoKSwxOCkpKSxudWxsLG4pOnIuZ2godGhpcy5lLC0xLXRoaXMuYWooKSxudWxsLG4pfSxsLmRqPWZ1bmN0aW9uKGUsbil7dmFyIHI7cmV0dXJuIHI9dShlLDQ5KSx0aGlzLkRrKCk/dGhpcy5CaygpP3IuaWgodGhpcy5lLHRoaXMuQWsoKSx0aGlzLnprKCksbik6ci5paCh0aGlzLmUsR2koci5UZygpLG5vKHUodGhpcy5haygpLDE4KSkpLG51bGwsbik6ci5paCh0aGlzLmUsLTEtdGhpcy5haigpLG51bGwsbil9LGwucms9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Gaz1mdW5jdGlvbigpe3JldHVybiEwfSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBLWnQodGhpcy5kLGUpfSxsLmVqPWZ1bmN0aW9uKCl7cmV0dXJuIHhsKHRoaXMuZSl9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pIT0wfSxsLnJpPWZ1bmN0aW9uKGUpe3JldHVybiBNRCh0aGlzLmQsZSl9LGwubGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy5GaygpJiZ0aGlzLkVrKCk/ZzYodGhpcyxlLHUobiw1NikpOm59LGwuR2s9ZnVuY3Rpb24oZSl7cmV0dXJuIGUua2goKT9acCh0aGlzLmUsdShlLDQ5KSk6ZX0sbC5XYj1mdW5jdGlvbihlKXtZVXQodGhpcyxlKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiBPdGUodGhpcyl9LGwuUWM9ZnVuY3Rpb24oZSl7dmFyIG47aWYodGhpcy5FaygpKWZvcihuPXRoaXMuaS0xO24+PTA7LS1uKUF0KHRoaXMsbik7cmV0dXJuIF8zdCh0aGlzLGUpfSxsLlhqPWZ1bmN0aW9uKCl7eHIodGhpcyl9LGwub2k9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWWVlKHRoaXMsZSxuKX0sRigkaSwiRWNvcmVFTGlzdCIsNjIyKSxEKDQ5Niw2MjIsem8sWk0pLGwuYWk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5haj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwuYmo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Gaz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmhpPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwubGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbn0sbC5uaT1mdW5jdGlvbigpe3JldHVybiExfSxsLmM9MCxGKCRpLCJFT2JqZWN0RUxpc3QiLDQ5NiksRCg4NSw0OTYsem8sQXMpLGwuYmo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5Eaz1mdW5jdGlvbigpe3JldHVybiExfSxsLnJrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEYoJGksIkVPYmplY3RDb250YWlubWVudEVMaXN0Iiw4NSksRCg1NDUsODUsem8sa2opLGwuY2k9ZnVuY3Rpb24oKXt0aGlzLmI9ITB9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLlhqPWZ1bmN0aW9uKCl7dmFyIGU7eHIodGhpcykseGwodGhpcy5lKT8oZT10aGlzLmIsdGhpcy5iPSExLG1pKHRoaXMuZSxuZXcgYmYodGhpcy5lLDIsdGhpcy5jLGUsITEpKSk6dGhpcy5iPSExfSxsLmI9ITEsRigkaSwiRU9iamVjdENvbnRhaW5tZW50RUxpc3QvVW5zZXR0YWJsZSIsNTQ1KSxEKDExNDAsNTQ1LHpvLFBLdCksbC5paT1mdW5jdGlvbihlLG4pe3ZhciByLHM7cmV0dXJuIHI9dShyXyh0aGlzLGUsbiksODcpLHhsKHRoaXMuZSkmJm44KHRoaXMsbmV3IG1EKHRoaXMuYSw3LChkbigpLGQ1ZSkscGUobiksKHM9ci5jLF90KHMsODgpP3UocywyNik6S2gpLGUpKSxyfSxsLmpqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFVobih0aGlzLHUoZSw4Nyksbil9LGwua2o9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gR2huKHRoaXMsdShlLDg3KSxuKX0sbC5saj1mdW5jdGlvbihlLG4scil7cmV0dXJuIFdkbih0aGlzLHUoZSw4NyksdShuLDg3KSxyKX0sbC5aaT1mdW5jdGlvbihlLG4scixzLG8pe3N3aXRjaChlKXtjYXNlIDM6cmV0dXJuIEY5KHRoaXMsZSxuLHIscyx0aGlzLmk+MSk7Y2FzZSA1OnJldHVybiBGOSh0aGlzLGUsbixyLHMsdGhpcy5pLXUociwxNSkuZ2MoKT4wKTtkZWZhdWx0OnJldHVybiBuZXcgejAodGhpcy5lLGUsdGhpcy5jLG4scixzLCEwKX19LGwuaWo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5maj1mdW5jdGlvbigpe3JldHVybiB2c3QodGhpcyl9LGwuWGo9ZnVuY3Rpb24oKXt4cih0aGlzKX0sRihNbiwiRUNsYXNzSW1wbC8xIiwxMTQwKSxEKDExNTQsMTE1MyxCOHQpLGwudWk9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHY7aWYocj1lLnhpKCksciE9OCl7aWYocz1MZm4oZSkscz09MClzd2l0Y2gocil7Y2FzZSAxOmNhc2UgOTp7dj1lLkJpKCksdiE9bnVsbCYmKG49c2wodSh2LDQ3MykpLCFuLmMmJihuLmM9bmV3IFRtKSxYJChuLmMsZS5BaSgpKSksZD1lLnppKCksZCE9bnVsbCYmKG89dShkLDQ3Myksby5CYiYxfHwobj1zbChvKSwhbi5jJiYobi5jPW5ldyBUbSksRHIobi5jLHUoZS5BaSgpLDI2KSkpKTticmVha31jYXNlIDM6e2Q9ZS56aSgpLGQhPW51bGwmJihvPXUoZCw0NzMpLG8uQmImMXx8KG49c2wobyksIW4uYyYmKG4uYz1uZXcgVG0pLERyKG4uYyx1KGUuQWkoKSwyNikpKSk7YnJlYWt9Y2FzZSA1OntpZihkPWUuemkoKSxkIT1udWxsKWZvcihoPXUoZCwxNCkuS2MoKTtoLk9iKCk7KW89dShoLlBiKCksNDczKSxvLkJiJjF8fChuPXNsKG8pLCFuLmMmJihuLmM9bmV3IFRtKSxEcihuLmMsdShlLkFpKCksMjYpKSk7YnJlYWt9Y2FzZSA0Ont2PWUuQmkoKSx2IT1udWxsJiYobz11KHYsNDczKSxvLkJiJjF8fChuPXNsKG8pLCFuLmMmJihuLmM9bmV3IFRtKSxYJChuLmMsZS5BaSgpKSkpO2JyZWFrfWNhc2UgNjp7aWYodj1lLkJpKCksdiE9bnVsbClmb3IoaD11KHYsMTQpLktjKCk7aC5PYigpOylvPXUoaC5QYigpLDQ3Myksby5CYiYxfHwobj1zbChvKSwhbi5jJiYobi5jPW5ldyBUbSksWCQobi5jLGUuQWkoKSkpO2JyZWFrfX10aGlzLkhrKHMpfX0sbC5Iaz1mdW5jdGlvbihlKXtPdWUodGhpcyxlKX0sbC5iPTYzLEYoTW4sIkVTdXBlckFkYXB0ZXIiLDExNTQpLEQoMTE1NSwxMTU0LEI4dCxVenQpLGwuSGs9ZnVuY3Rpb24oZSl7Z3kodGhpcyxlKX0sRihNbiwiRUNsYXNzSW1wbC8xMCIsMTE1NSksRCgxMTQ0LDY5Nix6byksbC5WaD1mdW5jdGlvbihlLG4pe3JldHVybiAkc3QodGhpcyxlLG4pfSxsLldoPWZ1bmN0aW9uKGUpe3JldHVybiBMc2UodGhpcyxlKX0sbC5YaD1mdW5jdGlvbihlLG4pe1VEKHRoaXMsZSxuKX0sbC5ZaD1mdW5jdGlvbihlKXtnRCh0aGlzLGUpfSxsLnBpPWZ1bmN0aW9uKGUpe3JldHVybiBGbXQodGhpcyxlKX0sbC5taT1mdW5jdGlvbihlLG4pe3JldHVybiBzaXQodGhpcyxlLG4pfSxsLmxrPWZ1bmN0aW9uKGUsbil7dGhyb3cgaXQobmV3IE9yKX0sbC5aaD1mdW5jdGlvbigpe3JldHVybiBuZXcgQngodGhpcyl9LGwuJGg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3ICRNKHRoaXMpfSxsLl9oPWZ1bmN0aW9uKGUpe3JldHVybiBERCh0aGlzLGUpfSxsLm1rPWZ1bmN0aW9uKGUsbil7dGhyb3cgaXQobmV3IE9yKX0sbC5Xaj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpc30sbC5maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmkhPTB9LGwuV2I9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sbC5Yaj1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBPcil9LEYoJGksIkVjb3JlRUxpc3QvVW5tb2RpZmlhYmxlRUxpc3QiLDExNDQpLEQoMzE5LDExNDQsem8sVjMpLGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sRigkaSwiRWNvcmVFTGlzdC9Vbm1vZGlmaWFibGVFTGlzdC9GYXN0Q29tcGFyZSIsMzE5KSxEKDExNDcsMzE5LHpvLHdyZSksbC5YYz1mdW5jdGlvbihlKXt2YXIgbixyLHM7aWYoX3QoZSwxNzApJiYobj11KGUsMTcwKSxyPW4uYWooKSxyIT0tMSkpe2ZvcihzPXRoaXMuaTtyPHM7KytyKWlmKFZ0KHRoaXMuZ1tyXSk9PT1WdChlKSlyZXR1cm4gcn1yZXR1cm4tMX0sRihNbiwiRUNsYXNzSW1wbC8xRUFsbFN0cnVjdHVyYWxGZWF0dXJlc0xpc3QiLDExNDcpLEQoMTE0MSw0OTcsTGQsdXgpLGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGhvLHEwZSw4NyxlLDAsMSl9LGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sRihNbiwiRUNsYXNzSW1wbC8xRUdlbmVyaWNTdXBlclR5cGVFTGlzdCIsMTE0MSksRCg2MjMsNDk3LExkLFViKSxsLnJpPWZ1bmN0aW9uKGUpe3JldHVybiBOdChNdSxCNCwxNzAsZSwwLDEpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoTW4sIkVDbGFzc0ltcGwvMUVTdHJ1Y3R1cmFsRmVhdHVyZVVuaXF1ZUVMaXN0Iiw2MjMpLEQoNzQxLDQ5NyxMZCxNMCksbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gTnQobjMsQjQsMTgsZSwwLDEpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoTW4sIkVDbGFzc0ltcGwvMVJlZmVyZW5jZUxpc3QiLDc0MSksRCgxMTQyLDQ5NyxMZCxXenQpLGwuYmk9ZnVuY3Rpb24oZSxuKXtLZW4odGhpcyx1KG4sMzQpKX0sbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gTnQoZTMsQjQsMzQsZSwwLDEpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoTW4sIkVDbGFzc0ltcGwvMiIsMTE0MiksRCgxMTQzLDQ5NyxMZCxFcCksbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gTnQoZTMsQjQsMzQsZSwwLDEpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoTW4sIkVDbGFzc0ltcGwvMyIsMTE0MyksRCgxMTQ1LDMxOSx6byxRWXQpLGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIFp0bih0aGlzLHUoZSwzNCkpfSxsLlloPWZ1bmN0aW9uKGUpe2FYZSh0aGlzLHUoZSwzNCkpfSxGKE1uLCJFQ2xhc3NJbXBsLzQiLDExNDUpLEQoMTE0NiwzMTksem8sWll0KSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBKdG4odGhpcyx1KGUsMTgpKX0sbC5ZaD1mdW5jdGlvbihlKXtvWGUodGhpcyx1KGUsMTgpKX0sRihNbiwiRUNsYXNzSW1wbC81IiwxMTQ2KSxEKDExNDgsNDk3LExkLEwzKSxsLnJpPWZ1bmN0aW9uKGUpe3JldHVybiBOdChXaCwkOHQsNTksZSwwLDEpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoTW4sIkVDbGFzc0ltcGwvNiIsMTE0OCksRCgxMTQ5LDQ5NyxMZCxGayksbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gTnQobjMsQjQsMTgsZSwwLDEpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoTW4sIkVDbGFzc0ltcGwvNyIsMTE0OSksRCgxOTk3LDE5OTYsezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDY3OjEsNTg6MSw2OToxfSksbC5WaD1mdW5jdGlvbihlLG4pe3JldHVybiBzeHQodGhpcyxlLG4pfSxsLldoPWZ1bmN0aW9uKGUpe3JldHVybiBzeHQodGhpcyx0aGlzLlZpKCksZSl9LGwuWGg9ZnVuY3Rpb24oZSxuKXtmY2UodGhpcyxlLG4pfSxsLlloPWZ1bmN0aW9uKGUpe3JjZSh0aGlzLGUpfSxsLmxrPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHAxbih0aGlzLGUsbil9LGwubWs9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gamZuKHRoaXMsZSxuKX0sbC5taT1mdW5jdGlvbihlLG4pe3JldHVybiB5bGUodGhpcyxlLG4pfSxsLnBpPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLk9pKGUpfSxsLlpoPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBCeCh0aGlzKX0sbC5HaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLkppKCl9LGwuJGg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3ICRNKHRoaXMpfSxsLl9oPWZ1bmN0aW9uKGUpe3JldHVybiBERCh0aGlzLGUpfSxGKCRpLCJEZWxlZ2F0aW5nTm90aWZ5aW5nSW50ZXJuYWxFTGlzdEltcGwiLDE5OTcpLEQoNzQyLDE5OTcsejh0KSxsLmFpPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9eW4odnUodGhpcy5iKSx0aGlzLmFqKCkpLllqKCksX3QoZSwxNDgpJiYhX3QoZSw0NTcpJiYoZS5CaigpLmkmMSk9PTB9LGwuSGM9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHYsaztpZih0aGlzLkZrKCkpe2lmKGs9dGhpcy5WaSgpLGs+NClpZih0aGlzLndqKGUpKXtpZih0aGlzLnJrKCkpe2lmKHM9dShlLDQ5KSxyPXMuVWcoKSx2PXI9PXRoaXMuYiYmKHRoaXMuRGsoKT9zLk9nKHMuVmcoKSx1KHluKHZ1KHRoaXMuYiksdGhpcy5haigpKS5ZaigpLDI2KS5CaigpKT09bm8odSh5bih2dSh0aGlzLmIpLHRoaXMuYWooKSksMTgpKS5uOi0xLXMuVmcoKT09dGhpcy5haigpKSx0aGlzLkVrKCkmJiF2JiYhciYmcy5aZygpKXtmb3Iobz0wO288azsrK28paWYobj1XbnQodGhpcyx0aGlzLk9pKG8pKSxWdChuKT09PVZ0KGUpKXJldHVybiEwfXJldHVybiB2fWVsc2UgaWYodGhpcy5EaygpJiYhdGhpcy5DaygpKXtpZihoPXUoZSw1NikuYWgobm8odSh5bih2dSh0aGlzLmIpLHRoaXMuYWooKSksMTgpKSksVnQoaCk9PT1WdCh0aGlzLmIpKXJldHVybiEwO2lmKGg9PW51bGx8fCF1KGgsNTYpLmtoKCkpcmV0dXJuITF9fWVsc2UgcmV0dXJuITE7aWYoZD10aGlzLkxpKGUpLHRoaXMuRWsoKSYmIWQpe2ZvcihvPTA7bzxrOysrbylpZihzPVdudCh0aGlzLHRoaXMuT2kobykpLFZ0KHMpPT09VnQoZSkpcmV0dXJuITB9cmV0dXJuIGR9ZWxzZSByZXR1cm4gdGhpcy5MaShlKX0sbC5aaT1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiBuZXcgejAodGhpcy5iLGUsdGhpcy5haigpLG4scixzLG8pfSxsLiRpPWZ1bmN0aW9uKGUpe21pKHRoaXMuYixlKX0sbC5Xaj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpc30sbC5faT1mdW5jdGlvbigpe3JldHVybiB5bih2dSh0aGlzLmIpLHRoaXMuYWooKSl9LGwuYWo9ZnVuY3Rpb24oKXtyZXR1cm4gR2kodnUodGhpcy5iKSx5bih2dSh0aGlzLmIpLHRoaXMuYWooKSkpfSxsLkFpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5Caz1mdW5jdGlvbigpe3JldHVybiEheW4odnUodGhpcy5iKSx0aGlzLmFqKCkpLllqKCkuQmooKX0sbC5iaj1mdW5jdGlvbigpe3ZhciBlLG47cmV0dXJuIG49eW4odnUodGhpcy5iKSx0aGlzLmFqKCkpLF90KG4sOTkpPyhlPXUobiwxOCksKGUuQmImZGMpIT0wfHwhIW5vKHUobiwxOCkpKTohMX0sbC5Daz1mdW5jdGlvbigpe3ZhciBlLG4scixzO3JldHVybiBuPXluKHZ1KHRoaXMuYiksdGhpcy5haigpKSxfdChuLDk5KT8oZT11KG4sMTgpLHI9bm8oZSksISFyJiYocz1yLnQscz4xfHxzPT0tMSkpOiExfSxsLkRrPWZ1bmN0aW9uKCl7dmFyIGUsbixyO3JldHVybiBuPXluKHZ1KHRoaXMuYiksdGhpcy5haigpKSxfdChuLDk5KT8oZT11KG4sMTgpLHI9bm8oZSksISFyKTohMX0sbC5Faz1mdW5jdGlvbigpe3ZhciBlLG47cmV0dXJuIG49eW4odnUodGhpcy5iKSx0aGlzLmFqKCkpLF90KG4sOTkpPyhlPXUobiwxOCksKGUuQmImS2EpIT0wKTohMX0sbC5YYz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbztpZihzPXRoaXMuUWkoZSkscz49MClyZXR1cm4gcztpZih0aGlzLkZrKCkpe2ZvcihyPTAsbz10aGlzLlZpKCk7cjxvOysrcilpZihuPVdudCh0aGlzLHRoaXMuT2kocikpLFZ0KG4pPT09VnQoZSkpcmV0dXJuIHJ9cmV0dXJuLTF9LGwuY2o9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gcj11KGUsNDkpLHRoaXMuRGsoKT90aGlzLkJrKCk/ci5naCh0aGlzLmIsbm8odSh5bih2dSh0aGlzLmIpLHRoaXMuYWooKSksMTgpKS5uLHUoeW4odnUodGhpcy5iKSx0aGlzLmFqKCkpLllqKCksMjYpLkJqKCksbik6ci5naCh0aGlzLmIsR2koci5UZygpLG5vKHUoeW4odnUodGhpcy5iKSx0aGlzLmFqKCkpLDE4KSkpLG51bGwsbik6ci5naCh0aGlzLmIsLTEtdGhpcy5haigpLG51bGwsbil9LGwuZGo9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gcj11KGUsNDkpLHRoaXMuRGsoKT90aGlzLkJrKCk/ci5paCh0aGlzLmIsbm8odSh5bih2dSh0aGlzLmIpLHRoaXMuYWooKSksMTgpKS5uLHUoeW4odnUodGhpcy5iKSx0aGlzLmFqKCkpLllqKCksMjYpLkJqKCksbik6ci5paCh0aGlzLmIsR2koci5UZygpLG5vKHUoeW4odnUodGhpcy5iKSx0aGlzLmFqKCkpLDE4KSkpLG51bGwsbik6ci5paCh0aGlzLmIsLTEtdGhpcy5haigpLG51bGwsbil9LGwucms9ZnVuY3Rpb24oKXt2YXIgZSxuO3JldHVybiBuPXluKHZ1KHRoaXMuYiksdGhpcy5haigpKSxfdChuLDk5KT8oZT11KG4sMTgpLChlLkJiJmRjKSE9MCk6ITF9LGwuRms9ZnVuY3Rpb24oKXtyZXR1cm4gX3QoeW4odnUodGhpcy5iKSx0aGlzLmFqKCkpLllqKCksODgpfSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiB5bih2dSh0aGlzLmIpLHRoaXMuYWooKSkuWWooKS53aihlKX0sbC5laj1mdW5jdGlvbigpe3JldHVybiB4bCh0aGlzLmIpfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuUmkoKX0sbC5oaT1mdW5jdGlvbigpe3JldHVybiB5bih2dSh0aGlzLmIpLHRoaXMuYWooKSkuaGkoKX0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiBBSSh0aGlzLGUsbil9LGwuV2I9ZnVuY3Rpb24oZSl7QV8odGhpcyksaXModGhpcyx1KGUsMTUpKX0sbC5QYz1mdW5jdGlvbigpe3ZhciBlO2lmKHRoaXMuRWsoKSlmb3IoZT10aGlzLlZpKCktMTtlPj0wOy0tZSlBSSh0aGlzLGUsdGhpcy5PaShlKSk7cmV0dXJuIHRoaXMuV2koKX0sbC5RYz1mdW5jdGlvbihlKXt2YXIgbjtpZih0aGlzLkVrKCkpZm9yKG49dGhpcy5WaSgpLTE7bj49MDstLW4pQUkodGhpcyxuLHRoaXMuT2kobikpO3JldHVybiB0aGlzLlhpKGUpfSxsLlhqPWZ1bmN0aW9uKCl7QV8odGhpcyl9LGwub2k9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gSXRlKHRoaXMsZSxuKX0sRigkaSwiRGVsZWdhdGluZ0Vjb3JlRUxpc3QiLDc0MiksRCgxMTUwLDc0Mix6OHQsS1d0KSxsLkhpPWZ1bmN0aW9uKGUsbil7cFplKHRoaXMsZSx1KG4sMjYpKX0sbC5JaT1mdW5jdGlvbihlKXt1UWUodGhpcyx1KGUsMjYpKX0sbC5PaT1mdW5jdGlvbihlKXt2YXIgbixyO3JldHVybiBuPXUoQXQoTGModGhpcy5hKSxlKSw4Nykscj1uLmMsX3Qociw4OCk/dShyLDI2KTooZG4oKSxLaCl9LGwuVGk9ZnVuY3Rpb24oZSl7dmFyIG4scjtyZXR1cm4gbj11KGJ5KExjKHRoaXMuYSksZSksODcpLHI9bi5jLF90KHIsODgpP3UociwyNik6KGRuKCksS2gpfSxsLlVpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGIxbih0aGlzLGUsdShuLDI2KSl9LGwuYWk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5aaT1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiBudWxsfSxsLkppPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBZenQodGhpcyl9LGwuS2k9ZnVuY3Rpb24oKXt4cihMYyh0aGlzLmEpKX0sbC5MaT1mdW5jdGlvbihlKXtyZXR1cm4gY2llKHRoaXMsZSl9LGwuTWk9ZnVuY3Rpb24oZSl7dmFyIG4scjtmb3Iocj1lLktjKCk7ci5PYigpOylpZihuPXIuUGIoKSwhY2llKHRoaXMsbikpcmV0dXJuITE7cmV0dXJuITB9LGwuTmk9ZnVuY3Rpb24oZSl7dmFyIG4scixzO2lmKF90KGUsMTUpJiYocz11KGUsMTUpLHMuZ2MoKT09TGModGhpcy5hKS5pKSl7Zm9yKG49cy5LYygpLHI9bmV3IG5yKHRoaXMpO24uT2IoKTspaWYoVnQobi5QYigpKSE9PVZ0KGRyKHIpKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX0sbC5QaT1mdW5jdGlvbigpe3ZhciBlLG4scixzLG87Zm9yKHI9MSxuPW5ldyBucihMYyh0aGlzLmEpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksODcpLHM9KG89ZS5jLF90KG8sODgpP3UobywyNik6KGRuKCksS2gpKSxyPTMxKnIrKHM/UHcocyk6MCk7cmV0dXJuIHJ9LGwuUWk9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87Zm9yKHM9MCxyPW5ldyBucihMYyh0aGlzLmEpKTtyLmUhPXIuaS5nYygpOyl7aWYobj11KGRyKHIpLDg3KSxWdChlKT09PVZ0KChvPW4uYyxfdChvLDg4KT91KG8sMjYpOihkbigpLEtoKSkpKXJldHVybiBzOysrc31yZXR1cm4tMX0sbC5SaT1mdW5jdGlvbigpe3JldHVybiBMYyh0aGlzLmEpLmk9PTB9LGwuU2k9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5WaT1mdW5jdGlvbigpe3JldHVybiBMYyh0aGlzLmEpLml9LGwuV2k9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGg7Zm9yKGg9TGModGhpcy5hKS5pLG89TnQoUW4sRGUsMSxoLDUsMSkscj0wLG49bmV3IG5yKExjKHRoaXMuYSkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSw4Nyksb1tyKytdPShzPWUuYyxfdChzLDg4KT91KHMsMjYpOihkbigpLEtoKSk7cmV0dXJuIG99LGwuWGk9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHY7Zm9yKHY9TGModGhpcy5hKS5pLGUubGVuZ3RoPHYmJihvPU1EKG9sKGUpLmMsdiksZT1vKSxlLmxlbmd0aD52JiZ0cyhlLHYsbnVsbCkscz0wLHI9bmV3IG5yKExjKHRoaXMuYSkpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSw4NyksaD0oZD1uLmMsX3QoZCw4OCk/dShkLDI2KTooZG4oKSxLaCkpLHRzKGUscysrLGgpO3JldHVybiBlfSxsLllpPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbztmb3Iobz1uZXcgQWcsby5hKz0iWyIsZT1MYyh0aGlzLmEpLG49MCxzPUxjKHRoaXMuYSkuaTtuPHM7KWdvKG8sYjkoKHI9dShBdChlLG4pLDg3KS5jLF90KHIsODgpP3UociwyNik6KGRuKCksS2gpKSkpLCsrbjxzJiYoby5hKz1ZYSk7cmV0dXJuIG8uYSs9Il0iLG8uYX0sbC4kaT1mdW5jdGlvbihlKXt9LGwuYWo9ZnVuY3Rpb24oKXtyZXR1cm4gMTB9LGwuQms9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5iaj1mdW5jdGlvbigpe3JldHVybiExfSxsLkNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuRGs9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Faz1mdW5jdGlvbigpe3JldHVybiEwfSxsLnJrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuRms9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw4OCl9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gcHNuKHRoaXMuYSl9LGwuaGk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5uaT1mdW5jdGlvbigpe3JldHVybiEwfSxGKE1uLCJFQ2xhc3NJbXBsLzgiLDExNTApLEQoMTE1MSwxOTY0LGpFLFl6dCksbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gREQodGhpcy5hLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIExjKHRoaXMuYS5hKS5pfSxGKE1uLCJFQ2xhc3NJbXBsLzgvMSIsMTE1MSksRCgxMTUyLDQ5NyxMZCx0QyksbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gTnQoczEsRGUsMTM4LGUsMCwxKX0sbC5uaT1mdW5jdGlvbigpe3JldHVybiExfSxGKE1uLCJFQ2xhc3NJbXBsLzkiLDExNTIpLEQoMTEzOSw1MyxWeHQsanF0KSxGKE1uLCJFQ2xhc3NJbXBsL015SGFzaFNldCIsMTEzOSksRCg1NjYsMzUxLHsxMDU6MSw5MjoxLDkwOjEsMTM4OjEsMTQ4OjEsODM0OjEsMTQ3OjEsMTkxOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMzUxOjEsMTUwOjEsMTE0OjEsMTE1OjEsNjc2OjF9LHhSKSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbD90aGlzLkQ6dGhpcy5CO2Nhc2UgMzpyZXR1cm4gaHYodGhpcyk7Y2FzZSA0OnJldHVybiB0aGlzLnpqKCk7Y2FzZSA1OnJldHVybiB0aGlzLkY7Y2FzZSA2OnJldHVybiBuP1JsKHRoaXMpOk84KHRoaXMpO2Nhc2UgNzpyZXR1cm4hdGhpcy5BJiYodGhpcy5BPW5ldyBGdShodSx0aGlzLDcpKSx0aGlzLkE7Y2FzZSA4OnJldHVybiBObigpLCEhKHRoaXMuQmImMjU2KX1yZXR1cm4gdWgodGhpcyxlLUpuKHRoaXMuemgoKSkseW4oKHM9dShEbih0aGlzLDE2KSwyNiksc3x8dGhpcy56aCgpKSxlKSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4gdGhpcy5EIT1udWxsJiZ0aGlzLkQ9PXRoaXMuRjtjYXNlIDM6cmV0dXJuISFodih0aGlzKTtjYXNlIDQ6cmV0dXJuIHRoaXMuemooKSE9bnVsbDtjYXNlIDU6cmV0dXJuIHRoaXMuRiE9bnVsbCYmdGhpcy5GIT10aGlzLkQmJnRoaXMuRiE9dGhpcy5CO2Nhc2UgNjpyZXR1cm4hIU84KHRoaXMpO2Nhc2UgNzpyZXR1cm4hIXRoaXMuQSYmdGhpcy5BLmkhPTA7Y2FzZSA4OnJldHVybih0aGlzLkJiJjI1Nik9PTB9cmV0dXJuIG9oKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fHRoaXMuemgoKSksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLGlzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTpfJCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAyOnNudCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSA1Ok9FKHRoaXMsQnIobikpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgRnUoaHUsdGhpcyw3KSkseHIodGhpcy5BKSwhdGhpcy5BJiYodGhpcy5BPW5ldyBGdShodSx0aGlzLDcpKSxpcyh0aGlzLkEsdShuLDE0KSk7cmV0dXJuO2Nhc2UgODpJeih0aGlzLGplKFJlKG4pKSk7cmV0dXJufWdoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHluKChyPXUoRG4odGhpcywxNiksMjYpLHJ8fHRoaXMuemgoKSksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxnNWV9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpfdCh0aGlzLkNiLDE3OSkmJih1KHRoaXMuQ2IsMTc5KS50Yj1udWxsKSxRYyh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6YUUodGhpcyxudWxsKSxZOCh0aGlzLHRoaXMuRCk7cmV0dXJuO2Nhc2UgNTpPRSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgRnUoaHUsdGhpcyw3KSkseHIodGhpcy5BKTtyZXR1cm47Y2FzZSA4Okl6KHRoaXMsITApO3JldHVybn1maCh0aGlzLGUtSm4odGhpcy56aCgpKSx5bigobj11KERuKHRoaXMsMTYpLDI2KSxufHx0aGlzLnpoKCkpLGUpKX0sbC5HaD1mdW5jdGlvbigpeyRnKCgkdSgpLHlhKSx0aGlzKS5uZSgpLHRoaXMuQmJ8PTF9LGwuRmo9ZnVuY3Rpb24oKXt2YXIgZSxuLHI7aWYoIXRoaXMuYyYmKGU9UGNlKFJsKHRoaXMpKSwhZS5kYygpKSlmb3Iocj1lLktjKCk7ci5PYigpOyluPUJyKHIuUGIoKSksa18odGhpcyxuKSYmUWxuKHRoaXMpO3JldHVybiB0aGlzLmJ9LGwuemo9ZnVuY3Rpb24oKXt2YXIgZTtpZighdGhpcy5lKXtlPW51bGw7dHJ5e2U9aHYodGhpcyl9Y2F0Y2gobil7aWYobj1XaShuKSwhX3QobiwxMDIpKXRocm93IGl0KG4pfXRoaXMuZD1udWxsLGUmJmUuaSYxJiYoZT09cGw/dGhpcy5kPShObigpLEYyKTplPT1Dcj90aGlzLmQ9cGUoMCk6ZT09YTM/dGhpcy5kPW5ldyBQMygwKTplPT1hYT90aGlzLmQ9MDplPT1PYj90aGlzLmQ9djIoMCk6ZT09ZzU/dGhpcy5kPXVFKDApOmU9PUd1P3RoaXMuZD1BRCgwKTp0aGlzLmQ9QkQoMCkpLHRoaXMuZT0hMH1yZXR1cm4gdGhpcy5kfSxsLkVqPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuQmImMjU2KSE9MH0sbC5Jaz1mdW5jdGlvbihlKXtlJiYodGhpcy5EPSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQWJzdHJhY3RFbnVtZXJhdG9yIil9LGwueGs9ZnVuY3Rpb24oZSl7Q25lKHRoaXMsZSksdGhpcy5JayhlKX0sbC55az1mdW5jdGlvbihlKXt0aGlzLkM9ZSx0aGlzLmU9ITF9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5EYiY2ND9Seih0aGlzKTooZT1uZXcgX2goUnoodGhpcykpLGUuYSs9IiAoc2VyaWFsaXphYmxlOiAiLExnKGUsKHRoaXMuQmImMjU2KSE9MCksZS5hKz0iKSIsZS5hKX0sbC5jPSExLGwuZD1udWxsLGwuZT0hMSxGKE1uLCJFRGF0YVR5cGVJbXBsIiw1NjYpLEQoNDU3LDU2Nix7MTA1OjEsOTI6MSw5MDoxLDEzODoxLDE0ODoxLDgzNDoxLDY3MToxLDE0NzoxLDE5MToxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDM1MToxLDQ1NzoxLDE1MDoxLDExNDoxLDExNToxLDY3NjoxfSwkcXQpLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gdGhpcy5EIT1udWxsP3RoaXMuRDp0aGlzLkI7Y2FzZSAzOnJldHVybiBodih0aGlzKTtjYXNlIDQ6cmV0dXJuIEh5dCh0aGlzKTtjYXNlIDU6cmV0dXJuIHRoaXMuRjtjYXNlIDY6cmV0dXJuIG4/UmwodGhpcyk6TzgodGhpcyk7Y2FzZSA3OnJldHVybiF0aGlzLkEmJih0aGlzLkE9bmV3IEZ1KGh1LHRoaXMsNykpLHRoaXMuQTtjYXNlIDg6cmV0dXJuIE5uKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgOTpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBmZShhZyx0aGlzLDksNSkpLHRoaXMuYX1yZXR1cm4gdWgodGhpcyxlLUpuKChkbigpLE1iKSkseW4oKHM9dShEbih0aGlzLDE2KSwyNiksc3x8TWIpLGUpLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxaYyh0aGlzLkFiLGUscik7Y2FzZSA2OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP0xzdCh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1vLG51bGwscikpKSxIbCh0aGlzLGUsNixyKTtjYXNlIDk6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgZmUoYWcsdGhpcyw5LDUpKSxaYyh0aGlzLmEsZSxyKX1yZXR1cm4gaD11KHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fChkbigpLE1iKSksbiksNjYpLGguTmooKS5Raih0aGlzLHN1KHRoaXMpLG4tSm4oKGRuKCksTWIpKSxlLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLEJhKHRoaXMuQWIsZSxyKTtjYXNlIDY6cmV0dXJuIEhsKHRoaXMsbnVsbCw2LHIpO2Nhc2UgNzpyZXR1cm4hdGhpcy5BJiYodGhpcy5BPW5ldyBGdShodSx0aGlzLDcpKSxCYSh0aGlzLkEsZSxyKTtjYXNlIDk6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgZmUoYWcsdGhpcyw5LDUpKSxCYSh0aGlzLmEsZSxyKX1yZXR1cm4gbz11KHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fChkbigpLE1iKSksbiksNjYpLG8uTmooKS5Saih0aGlzLHN1KHRoaXMpLG4tSm4oKGRuKCksTWIpKSxlLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4gdGhpcy5EIT1udWxsJiZ0aGlzLkQ9PXRoaXMuRjtjYXNlIDM6cmV0dXJuISFodih0aGlzKTtjYXNlIDQ6cmV0dXJuISFIeXQodGhpcyk7Y2FzZSA1OnJldHVybiB0aGlzLkYhPW51bGwmJnRoaXMuRiE9dGhpcy5EJiZ0aGlzLkYhPXRoaXMuQjtjYXNlIDY6cmV0dXJuISFPOCh0aGlzKTtjYXNlIDc6cmV0dXJuISF0aGlzLkEmJnRoaXMuQS5pIT0wO2Nhc2UgODpyZXR1cm4odGhpcy5CYiYyNTYpPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMuYSYmdGhpcy5hLmkhPTB9cmV0dXJuIG9oKHRoaXMsZS1KbigoZG4oKSxNYikpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fE1iKSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksaXModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOl8kKHRoaXMsQnIobikpO3JldHVybjtjYXNlIDI6c250KHRoaXMsQnIobikpO3JldHVybjtjYXNlIDU6T0UodGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgNzohdGhpcy5BJiYodGhpcy5BPW5ldyBGdShodSx0aGlzLDcpKSx4cih0aGlzLkEpLCF0aGlzLkEmJih0aGlzLkE9bmV3IEZ1KGh1LHRoaXMsNykpLGlzKHRoaXMuQSx1KG4sMTQpKTtyZXR1cm47Y2FzZSA4Okl6KHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSA5OiF0aGlzLmEmJih0aGlzLmE9bmV3IGZlKGFnLHRoaXMsOSw1KSkseHIodGhpcy5hKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBmZShhZyx0aGlzLDksNSkpLGlzKHRoaXMuYSx1KG4sMTQpKTtyZXR1cm59Z2godGhpcyxlLUpuKChkbigpLE1iKSkseW4oKHI9dShEbih0aGlzLDE2KSwyNikscnx8TWIpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKCksTWJ9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpfdCh0aGlzLkNiLDE3OSkmJih1KHRoaXMuQ2IsMTc5KS50Yj1udWxsKSxRYyh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6YUUodGhpcyxudWxsKSxZOCh0aGlzLHRoaXMuRCk7cmV0dXJuO2Nhc2UgNTpPRSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgRnUoaHUsdGhpcyw3KSkseHIodGhpcy5BKTtyZXR1cm47Y2FzZSA4Okl6KHRoaXMsITApO3JldHVybjtjYXNlIDk6IXRoaXMuYSYmKHRoaXMuYT1uZXcgZmUoYWcsdGhpcyw5LDUpKSx4cih0aGlzLmEpO3JldHVybn1maCh0aGlzLGUtSm4oKGRuKCksTWIpKSx5bigobj11KERuKHRoaXMsMTYpLDI2KSxufHxNYiksZSkpfSxsLkdoPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZih0aGlzLmEpZm9yKGU9MCxuPXRoaXMuYS5pO2U8bjsrK2Upek0oQXQodGhpcy5hLGUpKTskZygoJHUoKSx5YSksdGhpcykubmUoKSx0aGlzLkJifD0xfSxsLnpqPWZ1bmN0aW9uKCl7cmV0dXJuIEh5dCh0aGlzKX0sbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbH0sbC5Jaz1mdW5jdGlvbihlKXt9LEYoTW4sIkVFbnVtSW1wbCIsNDU3KSxEKDU3Myw0MzgsezEwNToxLDkyOjEsOTA6MSwxOTQwOjEsNjc4OjEsMTQ3OjEsMTkxOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsNTczOjEsMTUwOjEsMTE0OjEsMTE1OjF9LGxxdCksbC5uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnpifSxsLlFnPWZ1bmN0aW9uKGUpe3JldHVybiB0YWUodGhpcyxlKX0sbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIHBlKHRoaXMuZCk7Y2FzZSAzOnJldHVybiB0aGlzLmI/dGhpcy5iOnRoaXMuYTtjYXNlIDQ6cmV0dXJuIG89dGhpcy5jLG8/P3RoaXMuemI7Y2FzZSA1OnJldHVybiB0aGlzLkRiPj4xNj09NT91KHRoaXMuQ2IsNjcxKTpudWxsfXJldHVybiB1aCh0aGlzLGUtSm4oKGRuKCksb3ApKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHxvcCksZSksbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLFpjKHRoaXMuQWIsZSxyKTtjYXNlIDU6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/dGFlKHRoaXMscik6dGhpcy5DYi5paCh0aGlzLC0xLW8sbnVsbCxyKSkpLEhsKHRoaXMsZSw1LHIpfXJldHVybiBoPXUoeW4oKHM9dShEbih0aGlzLDE2KSwyNiksc3x8KGRuKCksb3ApKSxuKSw2NiksaC5OaigpLlFqKHRoaXMsc3UodGhpcyksbi1KbigoZG4oKSxvcCkpLGUscil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksQmEodGhpcy5BYixlLHIpO2Nhc2UgNTpyZXR1cm4gSGwodGhpcyxudWxsLDUscil9cmV0dXJuIG89dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxvcCkpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxzdSh0aGlzKSxuLUpuKChkbigpLG9wKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuZCE9MDtjYXNlIDM6cmV0dXJuISF0aGlzLmI7Y2FzZSA0OnJldHVybiB0aGlzLmMhPW51bGw7Y2FzZSA1OnJldHVybiEhKHRoaXMuRGI+PjE2PT01JiZ1KHRoaXMuQ2IsNjcxKSl9cmV0dXJuIG9oKHRoaXMsZS1KbigoZG4oKSxvcCkpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fG9wKSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksaXModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOlFjKHRoaXMsQnIobikpO3JldHVybjtjYXNlIDI6aGl0KHRoaXMsdShuLDE5KS5hKTtyZXR1cm47Y2FzZSAzOktvZSh0aGlzLHUobiwxOTQwKSk7cmV0dXJuO2Nhc2UgNDpkaXQodGhpcyxCcihuKSk7cmV0dXJufWdoKHRoaXMsZS1KbigoZG4oKSxvcCkpLHluKChyPXUoRG4odGhpcywxNiksMjYpLHJ8fG9wKSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBkbigpLG9wfSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6UWModGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOmhpdCh0aGlzLDApO3JldHVybjtjYXNlIDM6S29lKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNDpkaXQodGhpcyxudWxsKTtyZXR1cm59ZmgodGhpcyxlLUpuKChkbigpLG9wKSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8b3ApLGUpKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuYyxlPz90aGlzLnpifSxsLmI9bnVsbCxsLmM9bnVsbCxsLmQ9MCxGKE1uLCJFRW51bUxpdGVyYWxJbXBsIiw1NzMpO3ZhciB4Nm49S2koTW4sIkVGYWN0b3J5SW1wbC9JbnRlcm5hbEVEYXRlVGltZUZvcm1hdCIpO0QoNDg5LDEsezIwMTU6MX0sZk0pLEYoTW4sIkVGYWN0b3J5SW1wbC8xQ2xpZW50SW50ZXJuYWxFRGF0ZVRpbWVGb3JtYXQiLDQ4OSksRCgyNDEsMTE1LHsxMDU6MSw5MjoxLDkwOjEsODc6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwyNDE6MSwxMTQ6MSwxMTU6MX0seHcpLGwuU2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3JldHVybiByPUhsKHRoaXMsZSxuLHIpLHRoaXMuZSYmX3QoZSwxNzApJiYocz12cSh0aGlzLHRoaXMuZSkscyE9dGhpcy5jJiYocj1QRSh0aGlzLHMscikpKSxyfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiB0aGlzLmY7Y2FzZSAxOnJldHVybiF0aGlzLmQmJih0aGlzLmQ9bmV3IEFzKGhvLHRoaXMsMSkpLHRoaXMuZDtjYXNlIDI6cmV0dXJuIG4/THEodGhpcyk6dGhpcy5jO2Nhc2UgMzpyZXR1cm4gdGhpcy5iO2Nhc2UgNDpyZXR1cm4gdGhpcy5lO2Nhc2UgNTpyZXR1cm4gbj94c3QodGhpcyk6dGhpcy5hfXJldHVybiB1aCh0aGlzLGUtSm4oKGRuKCksR3YpKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHxHdiksZSksbixyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiBacmUodGhpcyxudWxsLHIpO2Nhc2UgMTpyZXR1cm4hdGhpcy5kJiYodGhpcy5kPW5ldyBBcyhobyx0aGlzLDEpKSxCYSh0aGlzLmQsZSxyKTtjYXNlIDM6cmV0dXJuIFFyZSh0aGlzLG51bGwscil9cmV0dXJuIG89dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxHdikpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxzdSh0aGlzKSxuLUpuKChkbigpLEd2KSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5mO2Nhc2UgMTpyZXR1cm4hIXRoaXMuZCYmdGhpcy5kLmkhPTA7Y2FzZSAyOnJldHVybiEhdGhpcy5jO2Nhc2UgMzpyZXR1cm4hIXRoaXMuYjtjYXNlIDQ6cmV0dXJuISF0aGlzLmU7Y2FzZSA1OnJldHVybiEhdGhpcy5hfXJldHVybiBvaCh0aGlzLGUtSm4oKGRuKCksR3YpKSx5bigobj11KERuKHRoaXMsMTYpLDI2KSxufHxHdiksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHI7c3dpdGNoKGUpe2Nhc2UgMDp2YWUodGhpcyx1KG4sODcpKTtyZXR1cm47Y2FzZSAxOiF0aGlzLmQmJih0aGlzLmQ9bmV3IEFzKGhvLHRoaXMsMSkpLHhyKHRoaXMuZCksIXRoaXMuZCYmKHRoaXMuZD1uZXcgQXMoaG8sdGhpcywxKSksaXModGhpcy5kLHUobiwxNCkpO3JldHVybjtjYXNlIDM6azR0KHRoaXMsdShuLDg3KSk7cmV0dXJuO2Nhc2UgNDpqNHQodGhpcyx1KG4sODM2KSk7cmV0dXJuO2Nhc2UgNTpIOCh0aGlzLHUobiwxMzgpKTtyZXR1cm59Z2godGhpcyxlLUpuKChkbigpLEd2KSkseW4oKHI9dShEbih0aGlzLDE2KSwyNikscnx8R3YpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKCksR3Z9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDp2YWUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAxOiF0aGlzLmQmJih0aGlzLmQ9bmV3IEFzKGhvLHRoaXMsMSkpLHhyKHRoaXMuZCk7cmV0dXJuO2Nhc2UgMzprNHQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA0Omo0dCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDU6SDgodGhpcyxudWxsKTtyZXR1cm59ZmgodGhpcyxlLUpuKChkbigpLEd2KSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8R3YpLGUpKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBPbChtZih0aGlzKSksZS5hKz0iIChleHByZXNzaW9uOiAiLE1hdCh0aGlzLGUpLGUuYSs9IikiLGUuYX07dmFyIG9MdDtGKE1uLCJFR2VuZXJpY1R5cGVJbXBsIiwyNDEpLEQoMTk2OSwxOTY0LE5IKSxsLlhoPWZ1bmN0aW9uKGUsbil7VVd0KHRoaXMsZSxuKX0sbC5saz1mdW5jdGlvbihlLG4pe3JldHVybiBVV3QodGhpcyx0aGlzLmdjKCksZSksbn0sbC5waT1mdW5jdGlvbihlKXtyZXR1cm4gWmYodGhpcy5HaSgpLGUpfSxsLlpoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGgoKX0sbC5HaT1mdW5jdGlvbigpe3JldHVybiBuZXcgWnp0KHRoaXMpfSxsLiRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2goMCl9LGwuX2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuR2koKS5aYyhlKX0sbC5taz1mdW5jdGlvbihlLG4pe3JldHVybiBheSh0aGlzLGUsITApLG59LGwuaWk9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO3JldHVybiBzPURzdCh0aGlzLG4pLHI9dGhpcy5aYyhlKSxyLlJiKHMpLHN9LGwuamk9ZnVuY3Rpb24oZSxuKXt2YXIgcjtheSh0aGlzLG4sITApLHI9dGhpcy5aYyhlKSxyLlJiKG4pfSxGKCRpLCJBYnN0cmFjdFNlcXVlbnRpYWxJbnRlcm5hbEVMaXN0IiwxOTY5KSxEKDQ4NiwxOTY5LE5ILGpNKSxsLnBpPWZ1bmN0aW9uKGUpe3JldHVybiBaZih0aGlzLkdpKCksZSl9LGwuWmg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iPT1udWxsPyhNZygpLE1nKCksYlApOnRoaXMuSmsoKX0sbC5HaT1mdW5jdGlvbigpe3JldHVybiBuZXcgd1V0KHRoaXMuYSx0aGlzLmIpfSxsLiRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYj09bnVsbD8oTWcoKSxNZygpLGJQKTp0aGlzLkprKCl9LGwuX2g9ZnVuY3Rpb24oZSl7dmFyIG4scjtpZih0aGlzLmI9PW51bGwpe2lmKGU8MHx8ZT4xKXRocm93IGl0KG5ldyB5byhKXytlKyIsIHNpemU9MCIpKTtyZXR1cm4gTWcoKSxNZygpLGJQfWZvcihyPXRoaXMuSmsoKSxuPTA7bjxlOysrbilreihyKTtyZXR1cm4gcn0sbC5kYz1mdW5jdGlvbigpe3ZhciBlLG4scixzLG8saDtpZih0aGlzLmIhPW51bGwpe2ZvcihyPTA7cjx0aGlzLmIubGVuZ3RoOysrcilpZihlPXRoaXMuYltyXSwhdGhpcy5NaygpfHx0aGlzLmEubWgoZSkpe2lmKGg9dGhpcy5hLmJoKGUsITEpLHRvKCksdShlLDY2KS5PaigpKXtmb3Iobj11KGgsMTUzKSxzPTAsbz1uLmdjKCk7czxvOysrcylpZihjWHQobi5pbChzKSkmJm4uamwocykhPW51bGwpcmV0dXJuITF9ZWxzZSBpZihlLiRqKCkpe2lmKCF1KGgsMTQpLmRjKCkpcmV0dXJuITF9ZWxzZSBpZihoIT1udWxsKXJldHVybiExfX1yZXR1cm4hMH0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBseXQodGhpcyl9LGwuWmM9ZnVuY3Rpb24oZSl7dmFyIG4scjtpZih0aGlzLmI9PW51bGwpe2lmKGUhPTApdGhyb3cgaXQobmV3IHlvKEpfK2UrIiwgc2l6ZT0wIikpO3JldHVybiBNZygpLE1nKCksYlB9Zm9yKHI9dGhpcy5MaygpP3RoaXMuS2soKTp0aGlzLkprKCksbj0wO248ZTsrK24pa3oocik7cmV0dXJuIHJ9LGwuaWk9ZnVuY3Rpb24oZSxuKXt0aHJvdyBpdChuZXcgT3IpfSxsLmppPWZ1bmN0aW9uKGUsbil7dGhyb3cgaXQobmV3IE9yKX0sbC5Kaz1mdW5jdGlvbigpe3JldHVybiBuZXcgU2oodGhpcy5hLHRoaXMuYil9LGwuS2s9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFYydCh0aGlzLmEsdGhpcy5iKX0sbC5Maz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmdjPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYobz0wLHRoaXMuYiE9bnVsbCl7Zm9yKHI9MDtyPHRoaXMuYi5sZW5ndGg7KytyKWlmKGU9dGhpcy5iW3JdLCF0aGlzLk1rKCl8fHRoaXMuYS5taChlKSlpZihkPXRoaXMuYS5iaChlLCExKSx0bygpLHUoZSw2NikuT2ooKSlmb3Iobj11KGQsMTUzKSxzPTAsaD1uLmdjKCk7czxoOysrcyljWHQobi5pbChzKSkmJm4uamwocykhPW51bGwmJisrbztlbHNlIGUuJGooKT9vKz11KGQsMTQpLmdjKCk6ZCE9bnVsbCYmKytvfXJldHVybiBvfSxsLk1rPWZ1bmN0aW9uKCl7cmV0dXJuITB9O3ZhciBSZnQ7RigkaSwiRUNvbnRlbnRzRUxpc3QiLDQ4NiksRCgxMTU2LDQ4NixOSCxJV3QpLGwuSms9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE9XdCh0aGlzLmEsdGhpcy5iKX0sbC5Laz1mdW5jdGlvbigpe3JldHVybiBuZXcgUFd0KHRoaXMuYSx0aGlzLmIpfSxsLk1rPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoTW4sIkVOYW1lZEVsZW1lbnRJbXBsLzEiLDExNTYpLEQoMjc5LDEsQkgsU2opLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5SYj1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgT3IpfSxsLk5rPWZ1bmN0aW9uKGUpe2lmKHRoaXMuZyE9MHx8dGhpcy5lKXRocm93IGl0KG5ldyBObygiSXRlcmF0b3IgYWxyZWFkeSBpbiB1c2Ugb3IgYWxyZWFkeSBmaWx0ZXJlZCIpKTt0aGlzLmU9ZX0sbC5PYj1mdW5jdGlvbigpe3ZhciBlLG4scixzLG8saDtzd2l0Y2godGhpcy5nKXtjYXNlIDM6Y2FzZSAyOnJldHVybiEwO2Nhc2UgMTpyZXR1cm4hMTtjYXNlLTM6dGhpcy5wP3RoaXMucC5QYigpOisrdGhpcy5uO2RlZmF1bHQ6aWYoIXRoaXMua3x8KHRoaXMucD8hdW9lKHRoaXMsdGhpcy5wKTohWG9lKHRoaXMpKSl7Zm9yKDt0aGlzLmQ8dGhpcy5jLmxlbmd0aDspaWYobj10aGlzLmNbdGhpcy5kKytdLCghdGhpcy5lfHxuLkdqKCkhPWo3fHxuLmFqKCkhPTApJiYoIXRoaXMuTWsoKXx8dGhpcy5iLm1oKG4pKSl7aWYoaD10aGlzLmIuYmgobix0aGlzLkxrKCkpLHRoaXMuZj0odG8oKSx1KG4sNjYpLk9qKCkpLHRoaXMuZnx8bi4kaigpKXtpZih0aGlzLkxrKCk/KHM9dShoLDE1KSx0aGlzLms9cyk6KHM9dShoLDY5KSx0aGlzLms9dGhpcy5qPXMpLF90KHRoaXMuayw1NCk/KHRoaXMucD1udWxsLHRoaXMubz10aGlzLmsuZ2MoKSx0aGlzLm49MCk6dGhpcy5wPXRoaXMuaj90aGlzLmouJGgoKTp0aGlzLmsuWWMoKSx0aGlzLnA/dW9lKHRoaXMsdGhpcy5wKTpYb2UodGhpcykpcmV0dXJuIG89dGhpcy5wP3RoaXMucC5QYigpOnRoaXMuaj90aGlzLmoucGkodGhpcy5uKyspOnRoaXMuay5YYih0aGlzLm4rKyksdGhpcy5mPyhlPXUobyw3MiksZS5haygpLHI9ZS5kZCgpLHRoaXMuaT1yKToocj1vLHRoaXMuaT1yKSx0aGlzLmc9MywhMH1lbHNlIGlmKGghPW51bGwpcmV0dXJuIHRoaXMuaz1udWxsLHRoaXMucD1udWxsLHI9aCx0aGlzLmk9cix0aGlzLmc9MiwhMH1yZXR1cm4gdGhpcy5rPW51bGwsdGhpcy5wPW51bGwsdGhpcy5mPSExLHRoaXMuZz0xLCExfWVsc2UgcmV0dXJuIG89dGhpcy5wP3RoaXMucC5QYigpOnRoaXMuaj90aGlzLmoucGkodGhpcy5uKyspOnRoaXMuay5YYih0aGlzLm4rKyksdGhpcy5mPyhlPXUobyw3MiksZS5haygpLHI9ZS5kZCgpLHRoaXMuaT1yKToocj1vLHRoaXMuaT1yKSx0aGlzLmc9MywhMH19LGwuU2I9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGg7c3dpdGNoKHRoaXMuZyl7Y2FzZS0zOmNhc2UtMjpyZXR1cm4hMDtjYXNlLTE6cmV0dXJuITE7Y2FzZSAzOnRoaXMucD90aGlzLnAuVWIoKTotLXRoaXMubjtkZWZhdWx0OmlmKCF0aGlzLmt8fCh0aGlzLnA/IWxvZSh0aGlzLHRoaXMucCk6IWtvZSh0aGlzKSkpe2Zvcig7dGhpcy5kPjA7KWlmKG49dGhpcy5jWy0tdGhpcy5kXSwoIXRoaXMuZXx8bi5HaigpIT1qN3x8bi5haigpIT0wKSYmKCF0aGlzLk1rKCl8fHRoaXMuYi5taChuKSkpe2lmKGg9dGhpcy5iLmJoKG4sdGhpcy5MaygpKSx0aGlzLmY9KHRvKCksdShuLDY2KS5PaigpKSx0aGlzLmZ8fG4uJGooKSl7aWYodGhpcy5MaygpPyhzPXUoaCwxNSksdGhpcy5rPXMpOihzPXUoaCw2OSksdGhpcy5rPXRoaXMuaj1zKSxfdCh0aGlzLmssNTQpPyh0aGlzLm89dGhpcy5rLmdjKCksdGhpcy5uPXRoaXMubyk6dGhpcy5wPXRoaXMuaj90aGlzLmouX2godGhpcy5rLmdjKCkpOnRoaXMuay5aYyh0aGlzLmsuZ2MoKSksdGhpcy5wP2xvZSh0aGlzLHRoaXMucCk6a29lKHRoaXMpKXJldHVybiBvPXRoaXMucD90aGlzLnAuVWIoKTp0aGlzLmo/dGhpcy5qLnBpKC0tdGhpcy5uKTp0aGlzLmsuWGIoLS10aGlzLm4pLHRoaXMuZj8oZT11KG8sNzIpLGUuYWsoKSxyPWUuZGQoKSx0aGlzLmk9cik6KHI9byx0aGlzLmk9ciksdGhpcy5nPS0zLCEwfWVsc2UgaWYoaCE9bnVsbClyZXR1cm4gdGhpcy5rPW51bGwsdGhpcy5wPW51bGwscj1oLHRoaXMuaT1yLHRoaXMuZz0tMiwhMH1yZXR1cm4gdGhpcy5rPW51bGwsdGhpcy5wPW51bGwsdGhpcy5nPS0xLCExfWVsc2UgcmV0dXJuIG89dGhpcy5wP3RoaXMucC5VYigpOnRoaXMuaj90aGlzLmoucGkoLS10aGlzLm4pOnRoaXMuay5YYigtLXRoaXMubiksdGhpcy5mPyhlPXUobyw3MiksZS5haygpLHI9ZS5kZCgpLHRoaXMuaT1yKToocj1vLHRoaXMuaT1yKSx0aGlzLmc9LTMsITB9fSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIGt6KHRoaXMpfSxsLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5VYj1mdW5jdGlvbigpe3ZhciBlO2lmKHRoaXMuZzwtMXx8dGhpcy5TYigpKXJldHVybi0tdGhpcy5hLHRoaXMuZz0wLGU9dGhpcy5pLHRoaXMuU2IoKSxlO3Rocm93IGl0KG5ldyBsYyl9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLTF9LGwuUWI9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgT3IpfSxsLkxrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuV2I9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sbC5Naz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmE9MCxsLmQ9MCxsLmY9ITEsbC5nPTAsbC5uPTAsbC5vPTA7dmFyIGJQO0YoJGksIkVDb250ZW50c0VMaXN0L0ZlYXR1cmVJdGVyYXRvckltcGwiLDI3OSksRCg2OTcsMjc5LEJILFYydCksbC5Maz1mdW5jdGlvbigpe3JldHVybiEwfSxGKCRpLCJFQ29udGVudHNFTGlzdC9SZXNvbHZpbmdGZWF0dXJlSXRlcmF0b3JJbXBsIiw2OTcpLEQoMTE1Nyw2OTcsQkgsUFd0KSxsLk1rPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoTW4sIkVOYW1lZEVsZW1lbnRJbXBsLzEvMSIsMTE1NyksRCgxMTU4LDI3OSxCSCxPV3QpLGwuTWs9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sRihNbiwiRU5hbWVkRWxlbWVudEltcGwvMS8yIiwxMTU4KSxEKDM2LDE0MyxuTyxRbSxScnQsSnMsSnJ0LHowLGJmLFltdCxjWnQsS210LHVadCxtbXQsbFp0LFptdCxoWnQseW10LGZadCxYbXQsZFp0LEE5LG1ELGJydCxRbXQsZ1p0LHhtdCxwWnQpLGwuX2k9ZnVuY3Rpb24oKXtyZXR1cm4gSW10KHRoaXMpfSxsLmdqPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9SW10KHRoaXMpLGU/ZS56aigpOm51bGx9LGwueWk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYj09LTEmJnRoaXMuYSYmKHRoaXMuYj10aGlzLmMuWGcodGhpcy5hLmFqKCksdGhpcy5hLkdqKCkpKSx0aGlzLmMuT2codGhpcy5iLGUpfSxsLkFpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sbC5oaj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPUltdCh0aGlzKSxlP2UuS2ooKTohMX0sbC5iPS0xLEYoTW4sIkVOb3RpZmljYXRpb25JbXBsIiwzNiksRCgzOTksMjg0LHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSw1OToxLDEwODoxLDQ3MjoxLDQ5OjEsOTc6MSwxNTA6MSwzOTk6MSwyODQ6MSwxMTQ6MSwxMTU6MX0saWV0KSxsLlFnPWZ1bmN0aW9uKGUpe3JldHVybiByYWUodGhpcyxlKX0sbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJjI1Nik7Y2FzZSAzOnJldHVybiBObigpLCEhKHRoaXMuQmImNTEyKTtjYXNlIDQ6cmV0dXJuIHBlKHRoaXMucyk7Y2FzZSA1OnJldHVybiBwZSh0aGlzLnQpO2Nhc2UgNjpyZXR1cm4gTm4oKSxoPXRoaXMudCxoPjF8fGg9PS0xO2Nhc2UgNzpyZXR1cm4gTm4oKSxvPXRoaXMucyxvPj0xO2Nhc2UgODpyZXR1cm4gbj9EaCh0aGlzKTp0aGlzLnI7Y2FzZSA5OnJldHVybiB0aGlzLnE7Y2FzZSAxMDpyZXR1cm4gdGhpcy5EYj4+MTY9PTEwP3UodGhpcy5DYiwyNik6bnVsbDtjYXNlIDExOnJldHVybiF0aGlzLmQmJih0aGlzLmQ9bmV3IEZ1KGh1LHRoaXMsMTEpKSx0aGlzLmQ7Y2FzZSAxMjpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBmZShWdix0aGlzLDEyLDEwKSksdGhpcy5jO2Nhc2UgMTM6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgR00odGhpcyx0aGlzKSksdGhpcy5hO2Nhc2UgMTQ6cmV0dXJuIGFsKHRoaXMpfXJldHVybiB1aCh0aGlzLGUtSm4oKGRuKCksY3ApKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHxjcCksZSksbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLFpjKHRoaXMuQWIsZSxyKTtjYXNlIDEwOnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP3JhZSh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1vLG51bGwscikpKSxIbCh0aGlzLGUsMTAscik7Y2FzZSAxMjpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBmZShWdix0aGlzLDEyLDEwKSksWmModGhpcy5jLGUscil9cmV0dXJuIGg9dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxjcCkpLG4pLDY2KSxoLk5qKCkuUWoodGhpcyxzdSh0aGlzKSxuLUpuKChkbigpLGNwKSksZSxyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxCYSh0aGlzLkFiLGUscik7Y2FzZSA5OnJldHVybiBucnQodGhpcyxyKTtjYXNlIDEwOnJldHVybiBIbCh0aGlzLG51bGwsMTAscik7Y2FzZSAxMTpyZXR1cm4hdGhpcy5kJiYodGhpcy5kPW5ldyBGdShodSx0aGlzLDExKSksQmEodGhpcy5kLGUscik7Y2FzZSAxMjpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBmZShWdix0aGlzLDEyLDEwKSksQmEodGhpcy5jLGUscik7Y2FzZSAxNDpyZXR1cm4gQmEoYWwodGhpcyksZSxyKX1yZXR1cm4gbz11KHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fChkbigpLGNwKSksbiksNjYpLG8uTmooKS5Saih0aGlzLHN1KHRoaXMpLG4tSm4oKGRuKCksY3ApKSxlLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuKHRoaXMuQmImMjU2KT09MDtjYXNlIDM6cmV0dXJuKHRoaXMuQmImNTEyKT09MDtjYXNlIDQ6cmV0dXJuIHRoaXMucyE9MDtjYXNlIDU6cmV0dXJuIHRoaXMudCE9MTtjYXNlIDY6cmV0dXJuIHM9dGhpcy50LHM+MXx8cz09LTE7Y2FzZSA3OnJldHVybiByPXRoaXMucyxyPj0xO2Nhc2UgODpyZXR1cm4hIXRoaXMuciYmIXRoaXMucS5lJiZxdyh0aGlzLnEpLmk9PTA7Y2FzZSA5OnJldHVybiEhdGhpcy5xJiYhKHRoaXMuciYmIXRoaXMucS5lJiZxdyh0aGlzLnEpLmk9PTApO2Nhc2UgMTA6cmV0dXJuISEodGhpcy5EYj4+MTY9PTEwJiZ1KHRoaXMuQ2IsMjYpKTtjYXNlIDExOnJldHVybiEhdGhpcy5kJiZ0aGlzLmQuaSE9MDtjYXNlIDEyOnJldHVybiEhdGhpcy5jJiZ0aGlzLmMuaSE9MDtjYXNlIDEzOnJldHVybiEhdGhpcy5hJiZhbCh0aGlzLmEuYSkuaSE9MCYmISh0aGlzLmImJm1zdCh0aGlzLmIpKTtjYXNlIDE0OnJldHVybiEhdGhpcy5iJiZtc3QodGhpcy5iKX1yZXR1cm4gb2godGhpcyxlLUpuKChkbigpLGNwKSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8Y3ApLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByLHM7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLGlzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTpRYyh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAyOnpnKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAzOnFnKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSA0OlJnKHRoaXMsdShuLDE5KS5hKTtyZXR1cm47Y2FzZSA1OnJ5KHRoaXMsdShuLDE5KS5hKTtyZXR1cm47Y2FzZSA4OmIyKHRoaXMsdShuLDEzOCkpO3JldHVybjtjYXNlIDk6cz1GMSh0aGlzLHUobiw4NyksbnVsbCkscyYmcy5GaSgpO3JldHVybjtjYXNlIDExOiF0aGlzLmQmJih0aGlzLmQ9bmV3IEZ1KGh1LHRoaXMsMTEpKSx4cih0aGlzLmQpLCF0aGlzLmQmJih0aGlzLmQ9bmV3IEZ1KGh1LHRoaXMsMTEpKSxpcyh0aGlzLmQsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTI6IXRoaXMuYyYmKHRoaXMuYz1uZXcgZmUoVnYsdGhpcywxMiwxMCkpLHhyKHRoaXMuYyksIXRoaXMuYyYmKHRoaXMuYz1uZXcgZmUoVnYsdGhpcywxMiwxMCkpLGlzKHRoaXMuYyx1KG4sMTQpKTtyZXR1cm47Y2FzZSAxMzohdGhpcy5hJiYodGhpcy5hPW5ldyBHTSh0aGlzLHRoaXMpKSxBXyh0aGlzLmEpLCF0aGlzLmEmJih0aGlzLmE9bmV3IEdNKHRoaXMsdGhpcykpLGlzKHRoaXMuYSx1KG4sMTQpKTtyZXR1cm47Y2FzZSAxNDp4cihhbCh0aGlzKSksaXMoYWwodGhpcyksdShuLDE0KSk7cmV0dXJufWdoKHRoaXMsZS1KbigoZG4oKSxjcCkpLHluKChyPXUoRG4odGhpcywxNiksMjYpLHJ8fGNwKSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBkbigpLGNwfSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuLHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpRYyh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6emcodGhpcywhMCk7cmV0dXJuO2Nhc2UgMzpxZyh0aGlzLCEwKTtyZXR1cm47Y2FzZSA0OlJnKHRoaXMsMCk7cmV0dXJuO2Nhc2UgNTpyeSh0aGlzLDEpO3JldHVybjtjYXNlIDg6YjIodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA5OnI9RjEodGhpcyxudWxsLG51bGwpLHImJnIuRmkoKTtyZXR1cm47Y2FzZSAxMTohdGhpcy5kJiYodGhpcy5kPW5ldyBGdShodSx0aGlzLDExKSkseHIodGhpcy5kKTtyZXR1cm47Y2FzZSAxMjohdGhpcy5jJiYodGhpcy5jPW5ldyBmZShWdix0aGlzLDEyLDEwKSkseHIodGhpcy5jKTtyZXR1cm47Y2FzZSAxMzp0aGlzLmEmJkFfKHRoaXMuYSk7cmV0dXJuO2Nhc2UgMTQ6dGhpcy5iJiZ4cih0aGlzLmIpO3JldHVybn1maCh0aGlzLGUtSm4oKGRuKCksY3ApKSx5bigobj11KERuKHRoaXMsMTYpLDI2KSxufHxjcCksZSkpfSxsLkdoPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZih0aGlzLmMpZm9yKGU9MCxuPXRoaXMuYy5pO2U8bjsrK2Upek0oQXQodGhpcy5jLGUpKTtEaCh0aGlzKSx0aGlzLkJifD0xfSxGKE1uLCJFT3BlcmF0aW9uSW1wbCIsMzk5KSxEKDUwNSw3NDIsejh0LEdNKSxsLkhpPWZ1bmN0aW9uKGUsbil7Z1plKHRoaXMsZSx1KG4sMTM4KSl9LGwuSWk9ZnVuY3Rpb24oZSl7bFFlKHRoaXMsdShlLDEzOCkpfSxsLk9pPWZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIG49dShBdChhbCh0aGlzLmEpLGUpLDg3KSxyPW4uYyxyfHwoZG4oKSxXMSl9LGwuVGk9ZnVuY3Rpb24oZSl7dmFyIG4scjtyZXR1cm4gbj11KGJ5KGFsKHRoaXMuYSksZSksODcpLHI9bi5jLHJ8fChkbigpLFcxKX0sbC5VaT1mdW5jdGlvbihlLG4pe3JldHVybiBoZm4odGhpcyxlLHUobiwxMzgpKX0sbC5haT1mdW5jdGlvbigpe3JldHVybiExfSxsLlppPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG51bGx9LGwuSmk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEt6dCh0aGlzKX0sbC5LaT1mdW5jdGlvbigpe3hyKGFsKHRoaXMuYSkpfSxsLkxpPWZ1bmN0aW9uKGUpe3JldHVybiBoaWUodGhpcyxlKX0sbC5NaT1mdW5jdGlvbihlKXt2YXIgbixyO2ZvcihyPWUuS2MoKTtyLk9iKCk7KWlmKG49ci5QYigpLCFoaWUodGhpcyxuKSlyZXR1cm4hMTtyZXR1cm4hMH0sbC5OaT1mdW5jdGlvbihlKXt2YXIgbixyLHM7aWYoX3QoZSwxNSkmJihzPXUoZSwxNSkscy5nYygpPT1hbCh0aGlzLmEpLmkpKXtmb3Iobj1zLktjKCkscj1uZXcgbnIodGhpcyk7bi5PYigpOylpZihWdChuLlBiKCkpIT09VnQoZHIocikpKXJldHVybiExO3JldHVybiEwfXJldHVybiExfSxsLlBpPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbztmb3Iocj0xLG49bmV3IG5yKGFsKHRoaXMuYSkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSw4Nykscz0obz1lLmMsb3x8KGRuKCksVzEpKSxyPTMxKnIrKHM/SGkocyk6MCk7cmV0dXJuIHJ9LGwuUWk9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87Zm9yKHM9MCxyPW5ldyBucihhbCh0aGlzLmEpKTtyLmUhPXIuaS5nYygpOyl7aWYobj11KGRyKHIpLDg3KSxWdChlKT09PVZ0KChvPW4uYyxvfHwoZG4oKSxXMSkpKSlyZXR1cm4gczsrK3N9cmV0dXJuLTF9LGwuUmk9ZnVuY3Rpb24oKXtyZXR1cm4gYWwodGhpcy5hKS5pPT0wfSxsLlNpPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuVmk9ZnVuY3Rpb24oKXtyZXR1cm4gYWwodGhpcy5hKS5pfSxsLldpPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbyxoO2ZvcihoPWFsKHRoaXMuYSkuaSxvPU50KFFuLERlLDEsaCw1LDEpLHI9MCxuPW5ldyBucihhbCh0aGlzLmEpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksODcpLG9bcisrXT0ocz1lLmMsc3x8KGRuKCksVzEpKTtyZXR1cm4gb30sbC5YaT1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3Iodj1hbCh0aGlzLmEpLmksZS5sZW5ndGg8diYmKG89TUQob2woZSkuYyx2KSxlPW8pLGUubGVuZ3RoPnYmJnRzKGUsdixudWxsKSxzPTAscj1uZXcgbnIoYWwodGhpcy5hKSk7ci5lIT1yLmkuZ2MoKTspbj11KGRyKHIpLDg3KSxoPShkPW4uYyxkfHwoZG4oKSxXMSkpLHRzKGUscysrLGgpO3JldHVybiBlfSxsLllpPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbztmb3Iobz1uZXcgQWcsby5hKz0iWyIsZT1hbCh0aGlzLmEpLG49MCxzPWFsKHRoaXMuYSkuaTtuPHM7KWdvKG8sYjkoKHI9dShBdChlLG4pLDg3KS5jLHJ8fChkbigpLFcxKSkpKSwrK248cyYmKG8uYSs9WWEpO3JldHVybiBvLmErPSJdIixvLmF9LGwuJGk9ZnVuY3Rpb24oZSl7fSxsLmFqPWZ1bmN0aW9uKCl7cmV0dXJuIDEzfSxsLkJrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuYmo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Daz1mdW5jdGlvbigpe3JldHVybiExfSxsLkRrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuRWs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5yaz1mdW5jdGlvbigpe3JldHVybiExfSxsLkZrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTM4KX0sbC5maj1mdW5jdGlvbigpe3JldHVybiBnc24odGhpcy5hKX0sbC5oaT1mdW5jdGlvbigpe3JldHVybiEwfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEYoTW4sIkVPcGVyYXRpb25JbXBsLzEiLDUwNSksRCgxMzQwLDE5NjQsakUsS3p0KSxsLlpjPWZ1bmN0aW9uKGUpe3JldHVybiBERCh0aGlzLmEsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gYWwodGhpcy5hLmEpLml9LEYoTW4sIkVPcGVyYXRpb25JbXBsLzEvMSIsMTM0MCksRCgxMzQxLDU0NSx6byxGS3QpLGwuaWk9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO3JldHVybiByPXUocl8odGhpcyxlLG4pLDg3KSx4bCh0aGlzLmUpJiZuOCh0aGlzLG5ldyBtRCh0aGlzLmEsNywoZG4oKSx3NWUpLHBlKG4pLChzPXIuYyxzfHxXMSksZSkpLHJ9LGwuamo9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gU2xuKHRoaXMsdShlLDg3KSxuKX0sbC5raj1mdW5jdGlvbihlLG4pe3JldHVybiBBbG4odGhpcyx1KGUsODcpLG4pfSxsLmxqPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gU2ZuKHRoaXMsdShlLDg3KSx1KG4sODcpLHIpfSxsLlppPWZ1bmN0aW9uKGUsbixyLHMsbyl7c3dpdGNoKGUpe2Nhc2UgMzpyZXR1cm4gRjkodGhpcyxlLG4scixzLHRoaXMuaT4xKTtjYXNlIDU6cmV0dXJuIEY5KHRoaXMsZSxuLHIscyx0aGlzLmktdShyLDE1KS5nYygpPjApO2RlZmF1bHQ6cmV0dXJuIG5ldyB6MCh0aGlzLmUsZSx0aGlzLmMsbixyLHMsITApfX0sbC5paj1mdW5jdGlvbigpe3JldHVybiEwfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIG1zdCh0aGlzKX0sbC5Yaj1mdW5jdGlvbigpe3hyKHRoaXMpfSxGKE1uLCJFT3BlcmF0aW9uSW1wbC8yIiwxMzQxKSxEKDQ5OCwxLHsxOTM4OjEsNDk4OjF9LFFHdCksRihNbiwiRVBhY2thZ2VJbXBsLzEiLDQ5OCksRCgxNiw4NSx6byxmZSksbC56az1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwuQWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLkRrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuYj0wLEYoJGksIkVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlRUxpc3QiLDE2KSxEKDM1MywxNix6byxSeCksbC5Faz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmxpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGc2KHRoaXMsZSx1KG4sNTYpKX0sRigkaSwiRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VFTGlzdC9SZXNvbHZpbmciLDM1MyksRCgyOTgsMzUzLHpvLEdtKSxsLmNpPWZ1bmN0aW9uKCl7dGhpcy5hLnRiPW51bGx9LEYoTW4sIkVQYWNrYWdlSW1wbC8yIiwyOTgpLEQoMTIyOCwxLHt9LGhCKSxGKE1uLCJFUGFja2FnZUltcGwvMyIsMTIyOCksRCg3MTgsNDMsQTQsVXB0KSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiByYShlKT93cnQodGhpcyxlKTohIUxvKHRoaXMuZixlKX0sRihNbiwiRVBhY2thZ2VSZWdpc3RyeUltcGwiLDcxOCksRCg1MDksMjg0LHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSwyMDE3OjEsMTA4OjEsNDcyOjEsNDk6MSw5NzoxLDE1MDoxLDUwOToxLDI4NDoxLDExNDoxLDExNToxfSxzZXQpLGwuUWc9ZnVuY3Rpb24oZSl7cmV0dXJuIGlhZSh0aGlzLGUpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGg7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiBObigpLCEhKHRoaXMuQmImMjU2KTtjYXNlIDM6cmV0dXJuIE5uKCksISEodGhpcy5CYiY1MTIpO2Nhc2UgNDpyZXR1cm4gcGUodGhpcy5zKTtjYXNlIDU6cmV0dXJuIHBlKHRoaXMudCk7Y2FzZSA2OnJldHVybiBObigpLGg9dGhpcy50LGg+MXx8aD09LTE7Y2FzZSA3OnJldHVybiBObigpLG89dGhpcy5zLG8+PTE7Y2FzZSA4OnJldHVybiBuP0RoKHRoaXMpOnRoaXMucjtjYXNlIDk6cmV0dXJuIHRoaXMucTtjYXNlIDEwOnJldHVybiB0aGlzLkRiPj4xNj09MTA/dSh0aGlzLkNiLDU5KTpudWxsfXJldHVybiB1aCh0aGlzLGUtSm4oKGRuKCksaTMpKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHxpMyksZSksbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLFpjKHRoaXMuQWIsZSxyKTtjYXNlIDEwOnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP2lhZSh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1vLG51bGwscikpKSxIbCh0aGlzLGUsMTAscil9cmV0dXJuIGg9dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxpMykpLG4pLDY2KSxoLk5qKCkuUWoodGhpcyxzdSh0aGlzKSxuLUpuKChkbigpLGkzKSksZSxyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxCYSh0aGlzLkFiLGUscik7Y2FzZSA5OnJldHVybiBucnQodGhpcyxyKTtjYXNlIDEwOnJldHVybiBIbCh0aGlzLG51bGwsMTAscil9cmV0dXJuIG89dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxpMykpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxzdSh0aGlzKSxuLUpuKChkbigpLGkzKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbixyLHM7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybih0aGlzLkJiJjI1Nik9PTA7Y2FzZSAzOnJldHVybih0aGlzLkJiJjUxMik9PTA7Y2FzZSA0OnJldHVybiB0aGlzLnMhPTA7Y2FzZSA1OnJldHVybiB0aGlzLnQhPTE7Y2FzZSA2OnJldHVybiBzPXRoaXMudCxzPjF8fHM9PS0xO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmcXcodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmcXcodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybiEhKHRoaXMuRGI+PjE2PT0xMCYmdSh0aGlzLkNiLDU5KSl9cmV0dXJuIG9oKHRoaXMsZS1KbigoZG4oKSxpMykpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fGkzKSxlKSl9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxpM30sRihNbiwiRVBhcmFtZXRlckltcGwiLDUwOSksRCg5OSw0NDksezEwNToxLDkyOjEsOTA6MSwxNDc6MSwxOTE6MSw1NjoxLDE4OjEsMTcwOjEsNjY6MSwxMDg6MSw0NzI6MSw0OToxLDk3OjEsMTUwOjEsOTk6MSw0NDk6MSwyODQ6MSwxMTQ6MSwxMTU6MSw2Nzc6MX0sSzJ0KSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGgsZDtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIE5uKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgMzpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJjUxMik7Y2FzZSA0OnJldHVybiBwZSh0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gcGUodGhpcy50KTtjYXNlIDY6cmV0dXJuIE5uKCksZD10aGlzLnQsZD4xfHxkPT0tMTtjYXNlIDc6cmV0dXJuIE5uKCksbz10aGlzLnMsbz49MTtjYXNlIDg6cmV0dXJuIG4/RGgodGhpcyk6dGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xO2Nhc2UgMTA6cmV0dXJuIE5uKCksISEodGhpcy5CYiZ4Zik7Y2FzZSAxMTpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJkR5KTtjYXNlIDEyOnJldHVybiBObigpLCEhKHRoaXMuQmImRXkpO2Nhc2UgMTM6cmV0dXJuIHRoaXMuajtjYXNlIDE0OnJldHVybiBTRSh0aGlzKTtjYXNlIDE1OnJldHVybiBObigpLCEhKHRoaXMuQmImSHUpO2Nhc2UgMTY6cmV0dXJuIE5uKCksISEodGhpcy5CYiZtZCk7Y2FzZSAxNzpyZXR1cm4gWW0odGhpcyk7Y2FzZSAxODpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJmRjKTtjYXNlIDE5OnJldHVybiBObigpLGg9bm8odGhpcyksISEoaCYmaC5CYiZkYyk7Y2FzZSAyMDpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJkthKTtjYXNlIDIxOnJldHVybiBuP25vKHRoaXMpOnRoaXMuYjtjYXNlIDIyOnJldHVybiBuP0l5dCh0aGlzKTpCSnQodGhpcyk7Y2FzZSAyMzpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBZMyhlMyx0aGlzLDIzKSksdGhpcy5hfXJldHVybiB1aCh0aGlzLGUtSm4oKGRuKCksbDUpKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHxsNSksZSksbixyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbixyLHMsbztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuKHRoaXMuQmImMjU2KT09MDtjYXNlIDM6cmV0dXJuKHRoaXMuQmImNTEyKT09MDtjYXNlIDQ6cmV0dXJuIHRoaXMucyE9MDtjYXNlIDU6cmV0dXJuIHRoaXMudCE9MTtjYXNlIDY6cmV0dXJuIG89dGhpcy50LG8+MXx8bz09LTE7Y2FzZSA3OnJldHVybiByPXRoaXMucyxyPj0xO2Nhc2UgODpyZXR1cm4hIXRoaXMuciYmIXRoaXMucS5lJiZxdyh0aGlzLnEpLmk9PTA7Y2FzZSA5OnJldHVybiEhdGhpcy5xJiYhKHRoaXMuciYmIXRoaXMucS5lJiZxdyh0aGlzLnEpLmk9PTApO2Nhc2UgMTA6cmV0dXJuKHRoaXMuQmImeGYpPT0wO2Nhc2UgMTE6cmV0dXJuKHRoaXMuQmImRHkpIT0wO2Nhc2UgMTI6cmV0dXJuKHRoaXMuQmImRXkpIT0wO2Nhc2UgMTM6cmV0dXJuIHRoaXMuaiE9bnVsbDtjYXNlIDE0OnJldHVybiBTRSh0aGlzKSE9bnVsbDtjYXNlIDE1OnJldHVybih0aGlzLkJiJkh1KSE9MDtjYXNlIDE2OnJldHVybih0aGlzLkJiJm1kKSE9MDtjYXNlIDE3OnJldHVybiEhWW0odGhpcyk7Y2FzZSAxODpyZXR1cm4odGhpcy5CYiZkYykhPTA7Y2FzZSAxOTpyZXR1cm4gcz1ubyh0aGlzKSwhIXMmJihzLkJiJmRjKSE9MDtjYXNlIDIwOnJldHVybih0aGlzLkJiJkthKT09MDtjYXNlIDIxOnJldHVybiEhdGhpcy5iO2Nhc2UgMjI6cmV0dXJuISFCSnQodGhpcyk7Y2FzZSAyMzpyZXR1cm4hIXRoaXMuYSYmdGhpcy5hLmkhPTB9cmV0dXJuIG9oKHRoaXMsZS1KbigoZG4oKSxsNSkpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fGw1KSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxpcyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6TXJ0KHRoaXMsQnIobikpO3JldHVybjtjYXNlIDI6emcodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDM6cWcodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDQ6UmcodGhpcyx1KG4sMTkpLmEpO3JldHVybjtjYXNlIDU6cnkodGhpcyx1KG4sMTkpLmEpO3JldHVybjtjYXNlIDg6YjIodGhpcyx1KG4sMTM4KSk7cmV0dXJuO2Nhc2UgOTpzPUYxKHRoaXMsdShuLDg3KSxudWxsKSxzJiZzLkZpKCk7cmV0dXJuO2Nhc2UgMTA6bEUodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDExOmRFKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAxMjpoRSh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMTM6cjJ0KHRoaXMsQnIobikpO3JldHVybjtjYXNlIDE1OmZFKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAxNjpnRSh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMTg6eGluKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAyMDp1M3QodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDIxOmN5dCh0aGlzLHUobiwxOCkpO3JldHVybjtjYXNlIDIzOiF0aGlzLmEmJih0aGlzLmE9bmV3IFkzKGUzLHRoaXMsMjMpKSx4cih0aGlzLmEpLCF0aGlzLmEmJih0aGlzLmE9bmV3IFkzKGUzLHRoaXMsMjMpKSxpcyh0aGlzLmEsdShuLDE0KSk7cmV0dXJufWdoKHRoaXMsZS1KbigoZG4oKSxsNSkpLHluKChyPXUoRG4odGhpcywxNiksMjYpLHJ8fGw1KSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBkbigpLGw1fSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuLHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpfdCh0aGlzLkNiLDg4KSYmZ3koc2wodSh0aGlzLkNiLDg4KSksNCksUWModGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOnpnKHRoaXMsITApO3JldHVybjtjYXNlIDM6cWcodGhpcywhMCk7cmV0dXJuO2Nhc2UgNDpSZyh0aGlzLDApO3JldHVybjtjYXNlIDU6cnkodGhpcywxKTtyZXR1cm47Y2FzZSA4OmIyKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgOTpyPUYxKHRoaXMsbnVsbCxudWxsKSxyJiZyLkZpKCk7cmV0dXJuO2Nhc2UgMTA6bEUodGhpcywhMCk7cmV0dXJuO2Nhc2UgMTE6ZEUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTI6aEUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTM6dGhpcy5pPW51bGwsZnoodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAxNTpmRSh0aGlzLCExKTtyZXR1cm47Y2FzZSAxNjpnRSh0aGlzLCExKTtyZXR1cm47Y2FzZSAxODpjM3QodGhpcywhMSksX3QodGhpcy5DYiw4OCkmJmd5KHNsKHUodGhpcy5DYiw4OCkpLDIpO3JldHVybjtjYXNlIDIwOnUzdCh0aGlzLCEwKTtyZXR1cm47Y2FzZSAyMTpjeXQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyMzohdGhpcy5hJiYodGhpcy5hPW5ldyBZMyhlMyx0aGlzLDIzKSkseHIodGhpcy5hKTtyZXR1cm59ZmgodGhpcyxlLUpuKChkbigpLGw1KSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8bDUpLGUpKX0sbC5HaD1mdW5jdGlvbigpe0l5dCh0aGlzKSxNOChUbygoJHUoKSx5YSksdGhpcykpLERoKHRoaXMpLHRoaXMuQmJ8PTF9LGwuTGo9ZnVuY3Rpb24oKXtyZXR1cm4gbm8odGhpcyl9LGwucWs9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1ubyh0aGlzKSwhIWUmJihlLkJiJmRjKSE9MH0sbC5yaz1mdW5jdGlvbigpe3JldHVybih0aGlzLkJiJmRjKSE9MH0sbC5zaz1mdW5jdGlvbigpe3JldHVybih0aGlzLkJiJkthKSE9MH0sbC5uaz1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLmM9bnVsbCxlM3QodGhpcyxlLG4pfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuRGImNjQ/X3EodGhpcyk6KGU9bmV3IF9oKF9xKHRoaXMpKSxlLmErPSIgKGNvbnRhaW5tZW50OiAiLExnKGUsKHRoaXMuQmImZGMpIT0wKSxlLmErPSIsIHJlc29sdmVQcm94aWVzOiAiLExnKGUsKHRoaXMuQmImS2EpIT0wKSxlLmErPSIpIixlLmEpfSxGKE1uLCJFUmVmZXJlbmNlSW1wbCIsOTkpLEQoNTQ4LDExNSx7MTA1OjEsNDI6MSw5MjoxLDkwOjEsMTMzOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsNTQ4OjEsMTE0OjEsMTE1OjF9LGlKKSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5jZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFB3KHRoaXMpfSxsLlVoPWZ1bmN0aW9uKGUpe19lbih0aGlzLEJyKGUpKX0sbC5lZD1mdW5jdGlvbihlKXtyZXR1cm4gZ2VuKHRoaXMsQnIoZSkpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiB0aGlzLmI7Y2FzZSAxOnJldHVybiB0aGlzLmN9cmV0dXJuIHVoKHRoaXMsZS1KbigoZG4oKSxRYSkpLHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fFFhKSxlKSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIHRoaXMuYiE9bnVsbDtjYXNlIDE6cmV0dXJuIHRoaXMuYyE9bnVsbH1yZXR1cm4gb2godGhpcyxlLUpuKChkbigpLFFhKSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8UWEpLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByO3N3aXRjaChlKXtjYXNlIDA6U2VuKHRoaXMsQnIobikpO3JldHVybjtjYXNlIDE6c3l0KHRoaXMsQnIobikpO3JldHVybn1naCh0aGlzLGUtSm4oKGRuKCksUWEpKSx5bigocj11KERuKHRoaXMsMTYpLDI2KSxyfHxRYSksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxRYX0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOml5dCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDE6c3l0KHRoaXMsbnVsbCk7cmV0dXJufWZoKHRoaXMsZS1KbigoZG4oKSxRYSkpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fFFhKSxlKSl9LGwuU2g9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5hPT0tMSYmKGU9dGhpcy5iLHRoaXMuYT1lPT1udWxsPzA6VmcoZSkpLHRoaXMuYX0sbC5UaD1mdW5jdGlvbihlKXt0aGlzLmE9ZX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLkRiJjY0P21mKHRoaXMpOihlPW5ldyBfaChtZih0aGlzKSksZS5hKz0iIChrZXk6ICIsZ28oZSx0aGlzLmIpLGUuYSs9IiwgdmFsdWU6ICIsZ28oZSx0aGlzLmMpLGUuYSs9IikiLGUuYSl9LGwuYT0tMSxsLmI9bnVsbCxsLmM9bnVsbDt2YXIgY2M9RihNbiwiRVN0cmluZ1RvU3RyaW5nTWFwRW50cnlJbXBsIiw1NDgpLEU1ZT1LaSgkaSwiRmVhdHVyZU1hcC9FbnRyeS9JbnRlcm5hbCIpO0QoNTY1LDEsUkgpLGwuT2s9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuUGsodShlLDQ5KSl9LGwuUGs9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuT2soZSl9LGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG4scjtyZXR1cm4gdGhpcz09PWU/ITA6X3QoZSw3Mik/KG49dShlLDcyKSxuLmFrKCk9PXRoaXMuYz8ocj10aGlzLmRkKCkscj09bnVsbD9uLmRkKCk9PW51bGw6eWkocixuLmRkKCkpKTohMSk6ITF9LGwuYWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLkhiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5kZCgpLEhpKHRoaXMuYyleKGU9PW51bGw/MDpIaShlKSl9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZSxuO3JldHVybiBlPXRoaXMuYyxuPVJsKGUuSGooKSkuUGgoKSxlLm5lKCksKG4hPW51bGwmJm4ubGVuZ3RoIT0wP24rIjoiK2UubmUoKTplLm5lKCkpKyI9Iit0aGlzLmRkKCl9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvQmFzaWNGZWF0dXJlTWFwRW50cnkiLDU2NSksRCg3NzYsNTY1LFJILGl3dCksbC5Qaz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGl3dCh0aGlzLmMsZSl9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlFrPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gSGNuKHRoaXMsZSx0aGlzLmEsbixyKX0sbC5Saz1mdW5jdGlvbihlLG4scil7cmV0dXJuIFZjbih0aGlzLGUsdGhpcy5hLG4scil9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvQ29udGFpbm1lbnRVcGRhdGluZ0ZlYXR1cmVNYXBFbnRyeSIsNzc2KSxEKDEzMTQsMSx7fSxaR3QpLGwuUGo9ZnVuY3Rpb24oZSxuLHIscyxvKXt2YXIgaDtyZXR1cm4gaD11KGo4KGUsdGhpcy5iKSwyMTUpLGgubmwodGhpcy5hKS5XaihzKX0sbC5Raj1mdW5jdGlvbihlLG4scixzLG8pe3ZhciBoO3JldHVybiBoPXUoajgoZSx0aGlzLmIpLDIxNSksaC5lbCh0aGlzLmEscyxvKX0sbC5Saj1mdW5jdGlvbihlLG4scixzLG8pe3ZhciBoO3JldHVybiBoPXUoajgoZSx0aGlzLmIpLDIxNSksaC5mbCh0aGlzLmEscyxvKX0sbC5Taj1mdW5jdGlvbihlLG4scil7dmFyIHM7cmV0dXJuIHM9dShqOChlLHRoaXMuYiksMjE1KSxzLm5sKHRoaXMuYSkuZmooKX0sbC5Uaj1mdW5jdGlvbihlLG4scixzKXt2YXIgbztvPXUoajgoZSx0aGlzLmIpLDIxNSksby5ubCh0aGlzLmEpLldiKHMpfSxsLlVqPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdShqOChlLHRoaXMuYiksMjE1KS5ubCh0aGlzLmEpfSxsLlZqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzPXUoajgoZSx0aGlzLmIpLDIxNSkscy5ubCh0aGlzLmEpLlhqKCl9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVGZWF0dXJlTWFwRGVsZWdhdG9yIiwxMzE0KSxEKDg5LDEse30sSWcsbjIsUGcsczIpLGwuUGo9ZnVuY3Rpb24oZSxuLHIscyxvKXt2YXIgaDtpZihoPW4uQ2gociksaD09bnVsbCYmbi5EaChyLGg9anEodGhpcyxlKSksIW8pc3dpdGNoKHRoaXMuZSl7Y2FzZSA1MDpjYXNlIDQxOnJldHVybiB1KGgsNTg5KS5zaigpO2Nhc2UgNDA6cmV0dXJuIHUoaCwyMTUpLmtsKCl9cmV0dXJuIGh9LGwuUWo9ZnVuY3Rpb24oZSxuLHIscyxvKXt2YXIgaCxkO3JldHVybiBkPW4uQ2gociksZD09bnVsbCYmbi5EaChyLGQ9anEodGhpcyxlKSksaD11KGQsNjkpLmxrKHMsbyksaH0sbC5Saj1mdW5jdGlvbihlLG4scixzLG8pe3ZhciBoO3JldHVybiBoPW4uQ2gociksaCE9bnVsbCYmKG89dShoLDY5KS5tayhzLG8pKSxvfSxsLlNqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztyZXR1cm4gcz1uLkNoKHIpLHMhPW51bGwmJnUocyw3NikuZmooKX0sbC5Uaj1mdW5jdGlvbihlLG4scixzKXt2YXIgbztvPXUobi5DaChyKSw3NiksIW8mJm4uRGgocixvPWpxKHRoaXMsZSkpLG8uV2Iocyl9LGwuVWo9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87cmV0dXJuIG89bi5DaChyKSxvPT1udWxsJiZuLkRoKHIsbz1qcSh0aGlzLGUpKSxfdChvLDc2KT91KG8sNzYpOihzPXUobi5DaChyKSwxNSksbmV3IFF6dChzKSl9LGwuVmo9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3M9dShuLkNoKHIpLDc2KSwhcyYmbi5EaChyLHM9anEodGhpcyxlKSkscy5YaigpfSxsLmI9MCxsLmU9MCxGKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlTWFueSIsODkpLEQoNTA0LDEse30pLGwuUWo9ZnVuY3Rpb24oZSxuLHIscyxvKXt0aHJvdyBpdChuZXcgT3IpfSxsLlJqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dGhyb3cgaXQobmV3IE9yKX0sbC5Vaj1mdW5jdGlvbihlLG4scil7cmV0dXJuIG5ldyBXWHQodGhpcyxlLG4scil9O3ZhciBwMDtGKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlIiw1MDQpLEQoMTMzMSwxLGh1dCxXWHQpLGwuV2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5Qaih0aGlzLmMsdGhpcy5kLHRoaXMuYixlLCEwKX0sbC5maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuU2oodGhpcy5jLHRoaXMuZCx0aGlzLmIpfSxsLldiPWZ1bmN0aW9uKGUpe3RoaXMuYS5Uaih0aGlzLmMsdGhpcy5kLHRoaXMuYixlKX0sbC5Yaj1mdW5jdGlvbigpe3RoaXMuYS5Waih0aGlzLmMsdGhpcy5kLHRoaXMuYil9LGwuYj0wLEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGUvMSIsMTMzMSksRCg3NjksNTA0LHt9LCR2dCksbC5Qaj1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiB3YXQoZSxlLmVoKCksZS5WZygpKT09dGhpcy5iP3RoaXMuc2soKSYmcz9lYXQoZSk6ZS5laCgpOm51bGx9LGwuUWo9ZnVuY3Rpb24oZSxuLHIscyxvKXt2YXIgaCxkO3JldHVybiBlLmVoKCkmJihvPShoPWUuVmcoKSxoPj0wP2UuUWcobyk6ZS5laCgpLmloKGUsLTEtaCxudWxsLG8pKSksZD1HaShlLlRnKCksdGhpcy5lKSxlLlNnKHMsZCxvKX0sbC5Saj1mdW5jdGlvbihlLG4scixzLG8pe3ZhciBoO3JldHVybiBoPUdpKGUuVGcoKSx0aGlzLmUpLGUuU2cobnVsbCxoLG8pfSxsLlNqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztyZXR1cm4gcz1HaShlLlRnKCksdGhpcy5lKSwhIWUuZWgoKSYmZS5WZygpPT1zfSxsLlRqPWZ1bmN0aW9uKGUsbixyLHMpe3ZhciBvLGgsZCx2LGs7aWYocyE9bnVsbCYmIXhhdCh0aGlzLmEscykpdGhyb3cgaXQobmV3IGk4KGpIKyhfdChzLDU2KT95NHQodShzLDU2KS5UZygpKTpWbXQob2wocykpKSskSCt0aGlzLmErIiciKSk7aWYobz1lLmVoKCksZD1HaShlLlRnKCksdGhpcy5lKSxWdChzKSE9PVZ0KG8pfHxlLlZnKCkhPWQmJnMhPW51bGwpe2lmKHZFKGUsdShzLDU2KSkpdGhyb3cgaXQobmV3IEZuKFFfK2UuSWIoKSkpO2s9bnVsbCxvJiYoaz0oaD1lLlZnKCksaD49MD9lLlFnKGspOmUuZWgoKS5paChlLC0xLWgsbnVsbCxrKSkpLHY9dShzLDQ5KSx2JiYoaz12LmdoKGUsR2kodi5UZygpLHRoaXMuYiksbnVsbCxrKSksaz1lLlNnKHYsZCxrKSxrJiZrLkZpKCl9ZWxzZSBlLkxnKCkmJmUuTWcoKSYmbWkoZSxuZXcgSnMoZSwxLGQscyxzKSl9LGwuVmo9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saCxkO3M9ZS5laCgpLHM/KGQ9KG89ZS5WZygpLG8+PTA/ZS5RZyhudWxsKTplLmVoKCkuaWgoZSwtMS1vLG51bGwsbnVsbCkpLGg9R2koZS5UZygpLHRoaXMuZSksZD1lLlNnKG51bGwsaCxkKSxkJiZkLkZpKCkpOmUuTGcoKSYmZS5NZygpJiZtaShlLG5ldyBBOShlLDEsdGhpcy5lLG51bGwsbnVsbCkpfSxsLnNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVDb250YWluZXIiLDc2OSksRCgxMzE1LDc2OSx7fSxqWXQpLGwuc2s9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUNvbnRhaW5lclJlc29sdmluZyIsMTMxNSksRCg1NjMsNTA0LHt9KSxsLlBqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dmFyIGg7cmV0dXJuIGg9bi5DaChyKSxoPT1udWxsP3RoaXMuYjpWdChoKT09PVZ0KHAwKT9udWxsOmh9LGwuU2o9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3JldHVybiBzPW4uQ2gocikscyE9bnVsbCYmKFZ0KHMpPT09VnQocDApfHwheWkocyx0aGlzLmIpKX0sbC5Uaj1mdW5jdGlvbihlLG4scixzKXt2YXIgbyxoO2UuTGcoKSYmZS5NZygpPyhvPShoPW4uQ2gociksaD09bnVsbD90aGlzLmI6VnQoaCk9PT1WdChwMCk/bnVsbDpoKSxzPT1udWxsP3RoaXMuYyE9bnVsbD8obi5EaChyLG51bGwpLHM9dGhpcy5iKTp0aGlzLmIhPW51bGw/bi5EaChyLHAwKTpuLkRoKHIsbnVsbCk6KHRoaXMuU2socyksbi5EaChyLHMpKSxtaShlLHRoaXMuZC5UayhlLDEsdGhpcy5lLG8scykpKTpzPT1udWxsP3RoaXMuYyE9bnVsbD9uLkRoKHIsbnVsbCk6dGhpcy5iIT1udWxsP24uRGgocixwMCk6bi5EaChyLG51bGwpOih0aGlzLlNrKHMpLG4uRGgocixzKSl9LGwuVmo9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87ZS5MZygpJiZlLk1nKCk/KHM9KG89bi5DaChyKSxvPT1udWxsP3RoaXMuYjpWdChvKT09PVZ0KHAwKT9udWxsOm8pLG4uRWgociksbWkoZSx0aGlzLmQuVGsoZSwxLHRoaXMuZSxzLHRoaXMuYikpKTpuLkVoKHIpfSxsLlNrPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBvcXQpfSxGKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YSIsNTYzKSxEKFI0LDEse30sZkIpLGwuVGs9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbmV3IEE5KGUsbixyLHMsbyl9LGwuVWs9ZnVuY3Rpb24oZSxuLHIscyxvLGgpe3JldHVybiBuZXcgYnJ0KGUsbixyLHMsbyxoKX07dmFyIGNMdCx1THQsbEx0LGhMdCxmTHQsZEx0LGdMdCxqZnQscEx0O0YoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IiLFI0KSxEKDEzMzIsUjQse30sZEIpLGwuVGs9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbmV3IHhtdChlLG4scixqZShSZShzKSksamUoUmUobykpKX0sbC5Vaz1mdW5jdGlvbihlLG4scixzLG8saCl7cmV0dXJuIG5ldyBwWnQoZSxuLHIsamUoUmUocykpLGplKFJlKG8pKSxoKX0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci8xIiwxMzMyKSxEKDEzMzMsUjQse30sZ0IpLGwuVGs9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbmV3IFltdChlLG4scix1KHMsMjE3KS5hLHUobywyMTcpLmEpfSxsLlVrPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXtyZXR1cm4gbmV3IGNadChlLG4scix1KHMsMjE3KS5hLHUobywyMTcpLmEsaCl9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvMiIsMTMzMyksRCgxMzM0LFI0LHt9LE5rKSxsLlRrPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG5ldyBLbXQoZSxuLHIsdShzLDE3MikuYSx1KG8sMTcyKS5hKX0sbC5Vaz1mdW5jdGlvbihlLG4scixzLG8saCl7cmV0dXJuIG5ldyB1WnQoZSxuLHIsdShzLDE3MikuYSx1KG8sMTcyKS5hLGgpfSxGKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzMiLDEzMzQpLEQoMTMzNSxSNCx7fSxwQiksbC5Uaz1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiBuZXcgbW10KGUsbixyLFh0KHllKHMpKSxYdCh5ZShvKSkpfSxsLlVrPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXtyZXR1cm4gbmV3IGxadChlLG4scixYdCh5ZShzKSksWHQoeWUobykpLGgpfSxGKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzQiLDEzMzUpLEQoMTMzNixSNCx7fSxiQiksbC5Uaz1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiBuZXcgWm10KGUsbixyLHUocywxNTUpLmEsdShvLDE1NSkuYSl9LGwuVWs9ZnVuY3Rpb24oZSxuLHIscyxvLGgpe3JldHVybiBuZXcgaFp0KGUsbixyLHUocywxNTUpLmEsdShvLDE1NSkuYSxoKX0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci81IiwxMzM2KSxEKDEzMzcsUjQse30sc0opLGwuVGs9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbmV3IHltdChlLG4scix1KHMsMTkpLmEsdShvLDE5KS5hKX0sbC5Vaz1mdW5jdGlvbihlLG4scixzLG8saCl7cmV0dXJuIG5ldyBmWnQoZSxuLHIsdShzLDE5KS5hLHUobywxOSkuYSxoKX0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci82IiwxMzM3KSxEKDEzMzgsUjQse30sQmspLGwuVGs9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbmV3IFhtdChlLG4scix1KHMsMTYyKS5hLHUobywxNjIpLmEpfSxsLlVrPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXtyZXR1cm4gbmV3IGRadChlLG4scix1KHMsMTYyKS5hLHUobywxNjIpLmEsaCl9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvNyIsMTMzOCksRCgxMzM5LFI0LHt9LFJrKSxsLlRrPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG5ldyBRbXQoZSxuLHIsdShzLDE4NCkuYSx1KG8sMTg0KS5hKX0sbC5Vaz1mdW5jdGlvbihlLG4scixzLG8saCl7cmV0dXJuIG5ldyBnWnQoZSxuLHIsdShzLDE4NCkuYSx1KG8sMTg0KS5hLGgpfSxGKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzgiLDEzMzkpLEQoMTMxNyw1NjMse30sWVh0KSxsLlNrPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmEud2ooZSkpdGhyb3cgaXQobmV3IGk4KGpIK29sKGUpKyRIK3RoaXMuYSsiJyIpKX0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGFEeW5hbWljIiwxMzE3KSxEKDEzMTgsNTYzLHt9LE5LdCksbC5Taz1mdW5jdGlvbihlKXt9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhU3RhdGljIiwxMzE4KSxEKDc3MCw1NjMse30pLGwuU2o9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3JldHVybiBzPW4uQ2gocikscyE9bnVsbH0sbC5Uaj1mdW5jdGlvbihlLG4scixzKXt2YXIgbyxoO2UuTGcoKSYmZS5NZygpPyhvPSEwLGg9bi5DaChyKSxoPT1udWxsPyhvPSExLGg9dGhpcy5iKTpWdChoKT09PVZ0KHAwKSYmKGg9bnVsbCkscz09bnVsbD90aGlzLmMhPW51bGw/KG4uRGgocixudWxsKSxzPXRoaXMuYik6bi5EaChyLHAwKToodGhpcy5TayhzKSxuLkRoKHIscykpLG1pKGUsdGhpcy5kLlVrKGUsMSx0aGlzLmUsaCxzLCFvKSkpOnM9PW51bGw/dGhpcy5jIT1udWxsP24uRGgocixudWxsKTpuLkRoKHIscDApOih0aGlzLlNrKHMpLG4uRGgocixzKSl9LGwuVmo9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87ZS5MZygpJiZlLk1nKCk/KHM9ITAsbz1uLkNoKHIpLG89PW51bGw/KHM9ITEsbz10aGlzLmIpOlZ0KG8pPT09VnQocDApJiYobz1udWxsKSxuLkVoKHIpLG1pKGUsdGhpcy5kLlVrKGUsMix0aGlzLmUsbyx0aGlzLmIscykpKTpuLkVoKHIpfSxGKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YVVuc2V0dGFibGUiLDc3MCksRCgxMzE5LDc3MCx7fSxLWHQpLGwuU2s9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuYS53aihlKSl0aHJvdyBpdChuZXcgaTgoakgrb2woZSkrJEgrdGhpcy5hKyInIikpfSxGKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YVVuc2V0dGFibGVEeW5hbWljIiwxMzE5KSxEKDEzMjAsNzcwLHt9LEJLdCksbC5Taz1mdW5jdGlvbihlKXt9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhVW5zZXR0YWJsZVN0YXRpYyIsMTMyMCksRCgzOTgsNTA0LHt9LFVqKSxsLlBqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dmFyIGgsZCx2LGssQztpZihDPW4uQ2gociksdGhpcy5LaigpJiZWdChDKT09PVZ0KHAwKSlyZXR1cm4gbnVsbDtpZih0aGlzLnNrKCkmJnMmJkMhPW51bGwpe2lmKHY9dShDLDQ5KSx2LmtoKCkmJihrPVpwKGUsdiksdiE9aykpe2lmKCF4YXQodGhpcy5hLGspKXRocm93IGl0KG5ldyBpOChqSCtvbChrKSskSCt0aGlzLmErIiciKSk7bi5EaChyLEM9ayksdGhpcy5yaygpJiYoaD11KGssNDkpLGQ9di5paChlLHRoaXMuYj9HaSh2LlRnKCksdGhpcy5iKTotMS1HaShlLlRnKCksdGhpcy5lKSxudWxsLG51bGwpLCFoLmVoKCkmJihkPWguZ2goZSx0aGlzLmI/R2koaC5UZygpLHRoaXMuYik6LTEtR2koZS5UZygpLHRoaXMuZSksbnVsbCxkKSksZCYmZC5GaSgpKSxlLkxnKCkmJmUuTWcoKSYmbWkoZSxuZXcgQTkoZSw5LHRoaXMuZSx2LGspKX1yZXR1cm4gQ31lbHNlIHJldHVybiBDfSxsLlFqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dmFyIGgsZDtyZXR1cm4gZD1uLkNoKHIpLFZ0KGQpPT09VnQocDApJiYoZD1udWxsKSxuLkRoKHIscyksdGhpcy5iaigpP1Z0KGQpIT09VnQocykmJmQhPW51bGwmJihoPXUoZCw0OSksbz1oLmloKGUsR2koaC5UZygpLHRoaXMuYiksbnVsbCxvKSk6dGhpcy5yaygpJiZkIT1udWxsJiYobz11KGQsNDkpLmloKGUsLTEtR2koZS5UZygpLHRoaXMuZSksbnVsbCxvKSksZS5MZygpJiZlLk1nKCkmJighbyYmKG89bmV3IERwKDQpKSxvLkVpKG5ldyBBOShlLDEsdGhpcy5lLGQscykpKSxvfSxsLlJqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dmFyIGg7cmV0dXJuIGg9bi5DaChyKSxWdChoKT09PVZ0KHAwKSYmKGg9bnVsbCksbi5FaChyKSxlLkxnKCkmJmUuTWcoKSYmKCFvJiYobz1uZXcgRHAoNCkpLHRoaXMuS2ooKT9vLkVpKG5ldyBBOShlLDIsdGhpcy5lLGgsbnVsbCkpOm8uRWkobmV3IEE5KGUsMSx0aGlzLmUsaCxudWxsKSkpLG99LGwuU2o9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3JldHVybiBzPW4uQ2gocikscyE9bnVsbH0sbC5Uaj1mdW5jdGlvbihlLG4scixzKXt2YXIgbyxoLGQsdixrO2lmKHMhPW51bGwmJiF4YXQodGhpcy5hLHMpKXRocm93IGl0KG5ldyBpOChqSCsoX3Qocyw1Nik/eTR0KHUocyw1NikuVGcoKSk6Vm10KG9sKHMpKSkrJEgrdGhpcy5hKyInIikpO2s9bi5DaChyKSx2PWshPW51bGwsdGhpcy5LaigpJiZWdChrKT09PVZ0KHAwKSYmKGs9bnVsbCksZD1udWxsLHRoaXMuYmooKT9WdChrKSE9PVZ0KHMpJiYoayE9bnVsbCYmKG89dShrLDQ5KSxkPW8uaWgoZSxHaShvLlRnKCksdGhpcy5iKSxudWxsLGQpKSxzIT1udWxsJiYobz11KHMsNDkpLGQ9by5naChlLEdpKG8uVGcoKSx0aGlzLmIpLG51bGwsZCkpKTp0aGlzLnJrKCkmJlZ0KGspIT09VnQocykmJihrIT1udWxsJiYoZD11KGssNDkpLmloKGUsLTEtR2koZS5UZygpLHRoaXMuZSksbnVsbCxkKSkscyE9bnVsbCYmKGQ9dShzLDQ5KS5naChlLC0xLUdpKGUuVGcoKSx0aGlzLmUpLG51bGwsZCkpKSxzPT1udWxsJiZ0aGlzLktqKCk/bi5EaChyLHAwKTpuLkRoKHIscyksZS5MZygpJiZlLk1nKCk/KGg9bmV3IGJydChlLDEsdGhpcy5lLGsscyx0aGlzLktqKCkmJiF2KSxkPyhkLkVpKGgpLGQuRmkoKSk6bWkoZSxoKSk6ZCYmZC5GaSgpfSxsLlZqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGgsZCx2O3Y9bi5DaChyKSxkPXYhPW51bGwsdGhpcy5LaigpJiZWdCh2KT09PVZ0KHAwKSYmKHY9bnVsbCksaD1udWxsLHYhPW51bGwmJih0aGlzLmJqKCk/KHM9dSh2LDQ5KSxoPXMuaWgoZSxHaShzLlRnKCksdGhpcy5iKSxudWxsLGgpKTp0aGlzLnJrKCkmJihoPXUodiw0OSkuaWgoZSwtMS1HaShlLlRnKCksdGhpcy5lKSxudWxsLGgpKSksbi5FaChyKSxlLkxnKCkmJmUuTWcoKT8obz1uZXcgYnJ0KGUsdGhpcy5LaigpPzI6MSx0aGlzLmUsdixudWxsLGQpLGg/KGguRWkobyksaC5GaSgpKTptaShlLG8pKTpoJiZoLkZpKCl9LGwuYmo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5yaz1mdW5jdGlvbigpe3JldHVybiExfSxsLnNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuS2o9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3QiLDM5OCksRCg1NjQsMzk4LHt9LHZudCksbC5yaz1mdW5jdGlvbigpe3JldHVybiEwfSxGKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50Iiw1NjQpLEQoMTMyMyw1NjQse30sRld0KSxsLnNrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRSZXNvbHZpbmciLDEzMjMpLEQoNzcyLDU2NCx7fSxHMnQpLGwuS2o9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudFVuc2V0dGFibGUiLDc3MiksRCgxMzI1LDc3Mix7fSxOV3QpLGwuc2s9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudFVuc2V0dGFibGVSZXNvbHZpbmciLDEzMjUpLEQoNjQwLDU2NCx7fSxJbnQpLGwuYmo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlIiw2NDApLEQoMTMyNCw2NDAse30sJFl0KSxsLnNrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZVJlc29sdmluZyIsMTMyNCksRCg3NzMsNjQwLHt9LER3dCksbC5Laj1mdW5jdGlvbigpe3JldHVybiEwfSxGKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VVbnNldHRhYmxlIiw3NzMpLEQoMTMyNiw3NzMse30sell0KSxsLnNrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZVVuc2V0dGFibGVSZXNvbHZpbmciLDEzMjYpLEQoNjQxLDM5OCx7fSxVMnQpLGwuc2s9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RSZXNvbHZpbmciLDY0MSksRCgxMzI3LDY0MSx7fSxCV3QpLGwuS2o9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RSZXNvbHZpbmdVbnNldHRhYmxlIiwxMzI3KSxEKDc3NCw2NDEse30sTHd0KSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0UmVzb2x2aW5nV2l0aEludmVyc2UiLDc3NCksRCgxMzI4LDc3NCx7fSxxWXQpLGwuS2o9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RSZXNvbHZpbmdXaXRoSW52ZXJzZVVuc2V0dGFibGUiLDEzMjgpLEQoMTMyMSwzOTgse30sUld0KSxsLktqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0VW5zZXR0YWJsZSIsMTMyMSksRCg3NzEsMzk4LHt9LE13dCksbC5iaj1mdW5jdGlvbigpe3JldHVybiEwfSxGKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdFdpdGhJbnZlcnNlIiw3NzEpLEQoMTMyMiw3NzEse30sSFl0KSxsLktqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0V2l0aEludmVyc2VVbnNldHRhYmxlIiwxMzIyKSxEKDc3NSw1NjUsUkgsX3Z0KSxsLlBrPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgX3Z0KHRoaXMuYSx0aGlzLmMsZSl9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLlFrPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gVmFuKHRoaXMsZSx0aGlzLmIscil9LGwuUms9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBHYW4odGhpcyxlLHRoaXMuYixyKX0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnZlcnNlVXBkYXRpbmdGZWF0dXJlTWFwRW50cnkiLDc3NSksRCgxMzI5LDEsaHV0LFF6dCksbC5Xaj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIF90KHRoaXMuYSw5NSk/dSh0aGlzLmEsOTUpLmZqKCk6IXRoaXMuYS5kYygpfSxsLldiPWZ1bmN0aW9uKGUpe3RoaXMuYS4kYigpLHRoaXMuYS5HYyh1KGUsMTUpKX0sbC5Yaj1mdW5jdGlvbigpe190KHRoaXMuYSw5NSk/dSh0aGlzLmEsOTUpLlhqKCk6dGhpcy5hLiRiKCl9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvU2V0dGluZ01hbnkiLDEzMjkpLEQoMTMzMCw1NjUsUkgsckp0KSxsLk9rPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeG50KChJaSgpLGZBKSx0aGlzLmIuSWgodGhpcy5hLGUpKX0sbC5kZD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLlFrPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gcn0sbC5Saz1mdW5jdGlvbihlLG4scil7cmV0dXJuIHJ9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvU2ltcGxlQ29udGVudEZlYXR1cmVNYXBFbnRyeSIsMTMzMCksRCg2NDIsNTY1LFJILHhudCksbC5Paz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHhudCh0aGlzLmMsZSl9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlFrPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gcn0sbC5Saz1mdW5jdGlvbihlLG4scil7cmV0dXJuIHJ9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvU2ltcGxlRmVhdHVyZU1hcEVudHJ5Iiw2NDIpLEQoMzkxLDQ5NyxMZCxUbSksbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gTnQoVWgsRGUsMjYsZSwwLDEpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoTW4sIkVTdXBlckFkYXB0ZXIvMSIsMzkxKSxEKDQ0NCw0MzgsezEwNToxLDkyOjEsOTA6MSwxNDc6MSwxOTE6MSw1NjoxLDEwODoxLDgzNjoxLDQ5OjEsOTc6MSwxNTA6MSw0NDQ6MSwxMTQ6MSwxMTU6MX0sSEwpLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBUOSh0aGlzLGhvLHRoaXMpKSx0aGlzLmF9cmV0dXJuIHVoKHRoaXMsZS1KbigoZG4oKSxVdikpLHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fFV2KSxlKSxuLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLEJhKHRoaXMuQWIsZSxyKTtjYXNlIDI6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgVDkodGhpcyxobyx0aGlzKSksQmEodGhpcy5hLGUscil9cmV0dXJuIG89dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxVdikpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxzdSh0aGlzKSxuLUpuKChkbigpLFV2KSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wfXJldHVybiBvaCh0aGlzLGUtSm4oKGRuKCksVXYpKSx5bigobj11KERuKHRoaXMsMTYpLDI2KSxufHxVdiksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLGlzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTpRYyh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmEmJih0aGlzLmE9bmV3IFQ5KHRoaXMsaG8sdGhpcykpLHhyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgVDkodGhpcyxobyx0aGlzKSksaXModGhpcy5hLHUobiwxNCkpO3JldHVybn1naCh0aGlzLGUtSm4oKGRuKCksVXYpKSx5bigocj11KERuKHRoaXMsMTYpLDI2KSxyfHxVdiksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxVdn0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOlFjKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjohdGhpcy5hJiYodGhpcy5hPW5ldyBUOSh0aGlzLGhvLHRoaXMpKSx4cih0aGlzLmEpO3JldHVybn1maCh0aGlzLGUtSm4oKGRuKCksVXYpKSx5bigobj11KERuKHRoaXMsMTYpLDI2KSxufHxVdiksZSkpfSxGKE1uLCJFVHlwZVBhcmFtZXRlckltcGwiLDQ0NCksRCg0NDUsODUsem8sVDkpLGwuY2o9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRzBuKHRoaXMsdShlLDg3KSxuKX0sbC5kaj1mdW5jdGlvbihlLG4pe3JldHVybiBVMG4odGhpcyx1KGUsODcpLG4pfSxGKE1uLCJFVHlwZVBhcmFtZXRlckltcGwvMSIsNDQ1KSxEKDYzNCw0MyxBNCxhZXQpLGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG1SKHRoaXMpfSxGKE1uLCJFVHlwZVBhcmFtZXRlckltcGwvMiIsNjM0KSxEKDU1NixOMSx6dSxtUiksbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gbFl0KHRoaXMsdShlLDg3KSl9LGwuR2M9ZnVuY3Rpb24oZSl7dmFyIG4scixzO2ZvcihzPSExLHI9ZS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSw4Nyksa2kodGhpcy5hLG4sIiIpPT1udWxsJiYocz0hMCk7cmV0dXJuIHN9LGwuJGI9ZnVuY3Rpb24oKXtYdSh0aGlzLmEpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBUbCh0aGlzLmEsZSl9LGwuS2M9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgcDIobmV3IENnKHRoaXMuYSkuYSksbmV3IHlSKGUpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiBYSnQodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiBIQyh0aGlzLmEpfSxGKE1uLCJFVHlwZVBhcmFtZXRlckltcGwvMi8xIiw1NTYpLEQoNTU3LDEsc2EseVIpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB1KFp3KHRoaXMuYSkuY2QoKSw4Nyl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmJ9LGwuUWI9ZnVuY3Rpb24oKXtTdGUodGhpcy5hKX0sRihNbiwiRVR5cGVQYXJhbWV0ZXJJbXBsLzIvMS8xIiw1NTcpLEQoMTI3Niw0MyxBNCx6cXQpLGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpP3dydCh0aGlzLGUpOiEhTG8odGhpcy5mLGUpfSxsLnhjPWZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIG49cmEoZSk/TmModGhpcyxlKTplYyhMbyh0aGlzLmYsZSkpLF90KG4sODM3KT8ocj11KG4sODM3KSxuPXIuX2ooKSxraSh0aGlzLHUoZSwyMzUpLG4pLG4pOm4/PyhlPT1udWxsPyhUZXQoKSxDNWUpOm51bGwpfSxGKE1uLCJFVmFsaWRhdG9yUmVnaXN0cnlJbXBsIiwxMjc2KSxEKDEzMTMsNzA0LHsxMDU6MSw5MjoxLDkwOjEsNDcxOjEsMTQ3OjEsNTY6MSwxMDg6MSwxOTQxOjEsNDk6MSw5NzoxLDE1MDoxLDExNDoxLDExNToxfSxhSiksbC5JaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlLnlqKCkpe2Nhc2UgMjE6Y2FzZSAyMjpjYXNlIDIzOmNhc2UgMjQ6Y2FzZSAyNjpjYXNlIDMxOmNhc2UgMzI6Y2FzZSAzNzpjYXNlIDM4OmNhc2UgMzk6Y2FzZSA0MDpjYXNlIDQzOmNhc2UgNDQ6Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgMjA6cmV0dXJuIG49PW51bGw/bnVsbDokbyhuKTtjYXNlIDI1OnJldHVybiBKb24obik7Y2FzZSAyNzpyZXR1cm4gYm9uKG4pO2Nhc2UgMjg6cmV0dXJuIHdvbihuKTtjYXNlIDI5OnJldHVybiBuPT1udWxsP251bGw6VlV0KGFBWzBdLHUobiwxOTkpKTtjYXNlIDQxOnJldHVybiBuPT1udWxsPyIiOklwKHUobiwyOTApKTtjYXNlIDQyOnJldHVybiAkbyhuKTtjYXNlIDUwOnJldHVybiBCcihuKTtkZWZhdWx0OnRocm93IGl0KG5ldyBGbihRRStlLm5lKCkrQ3YpKX19LGwuSmg9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndDtzd2l0Y2goZS5HPT0tMSYmKGUuRz0oSD1SbChlKSxIP0hnKEguTWgoKSxlKTotMSkpLGUuRyl7Y2FzZSAwOnJldHVybiByPW5ldyByZXQscjtjYXNlIDE6cmV0dXJuIG49bmV3IGxCLG47Y2FzZSAyOnJldHVybiBzPW5ldyBlTSxzO2Nhc2UgNDpyZXR1cm4gbz1uZXcgeFIsbztjYXNlIDU6cmV0dXJuIGg9bmV3ICRxdCxoO2Nhc2UgNjpyZXR1cm4gZD1uZXcgbHF0LGQ7Y2FzZSA3OnJldHVybiB2PW5ldyBKQix2O2Nhc2UgMTA6cmV0dXJuIEM9bmV3IFBrLEM7Y2FzZSAxMTpyZXR1cm4gTT1uZXcgaWV0LE07Y2FzZSAxMjpyZXR1cm4gaj1uZXcgZlF0LGo7Y2FzZSAxMzpyZXR1cm4gRz1uZXcgc2V0LEc7Y2FzZSAxNDpyZXR1cm4gSz1uZXcgSzJ0LEs7Y2FzZSAxNzpyZXR1cm4gdHQ9bmV3IGlKLHR0O2Nhc2UgMTg6cmV0dXJuIGs9bmV3IHh3LGs7Y2FzZSAxOTpyZXR1cm4gZ3Q9bmV3IEhMLGd0O2RlZmF1bHQ6dGhyb3cgaXQobmV3IEZuKEtjdCtlLnpiK0N2KSl9fSxsLktoPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUueWooKSl7Y2FzZSAyMDpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBnYnQobik7Y2FzZSAyMTpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBScChuKTtjYXNlIDIzOmNhc2UgMjI6cmV0dXJuIG49PW51bGw/bnVsbDppZm4obik7Y2FzZSAyNjpjYXNlIDI0OnJldHVybiBuPT1udWxsP251bGw6QUQocWwobiwtMTI4LDEyNyk8PDI0Pj4yNCk7Y2FzZSAyNTpyZXR1cm4gcDJuKG4pO2Nhc2UgMjc6cmV0dXJuIHoxbihuKTtjYXNlIDI4OnJldHVybiBxMW4obik7Y2FzZSAyOTpyZXR1cm4gbGduKG4pO2Nhc2UgMzI6Y2FzZSAzMTpyZXR1cm4gbj09bnVsbD9udWxsOmR5KG4pO2Nhc2UgMzg6Y2FzZSAzNzpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBQcHQobik7Y2FzZSA0MDpjYXNlIDM5OnJldHVybiBuPT1udWxsP251bGw6cGUocWwobixTYSx3aSkpO2Nhc2UgNDE6cmV0dXJuIG51bGw7Y2FzZSA0MjpyZXR1cm4gbj09bnVsbCxudWxsO2Nhc2UgNDQ6Y2FzZSA0MzpyZXR1cm4gbj09bnVsbD9udWxsOnYyKFJxKG4pKTtjYXNlIDQ5OmNhc2UgNDg6cmV0dXJuIG49PW51bGw/bnVsbDp1RShxbChuLHpILDMyNzY3KTw8MTY+PjE2KTtjYXNlIDUwOnJldHVybiBuO2RlZmF1bHQ6dGhyb3cgaXQobmV3IEZuKFFFK2UubmUoKStDdikpfX0sRihNbiwiRWNvcmVGYWN0b3J5SW1wbCIsMTMxMyksRCg1NDcsMTc5LHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSwyMzU6MSwxMDg6MSwxOTM5OjEsNDk6MSw5NzoxLDE1MDoxLDE3OToxLDU0NzoxLDExNDoxLDExNToxLDY3NToxfSxMWHQpLGwuZ2I9ITEsbC5oYj0hMTt2YXIgYkx0LFQ1ZT0hMTtGKE1uLCJFY29yZVBhY2thZ2VJbXBsIiw1NDcpLEQoMTE4NCwxLHs4Mzc6MX0sb0opLGwuX2o9ZnVuY3Rpb24oKXtyZXR1cm4gZ1d0KCksXzVlfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzEiLDExODQpLEQoMTE5MywxLHNpLGNKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE0Nyl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGZQLERlLDE0NyxlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvMTAiLDExOTMpLEQoMTE5NCwxLHNpLHVKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE5MSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KE1mdCxEZSwxOTEsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzExIiwxMTk0KSxEKDExOTUsMSxzaSxsSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw1Nil9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KF9iLERlLDU2LGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8xMiIsMTE5NSksRCgxMTk2LDEsc2ksaEopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMzk5KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoV2gsJDh0LDU5LGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8xMyIsMTE5NiksRCgxMTk3LDEsc2ksZkopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMjM1KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoaTEsRGUsMjM1LGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8xNCIsMTE5NyksRCgxMTk4LDEsc2ksZEopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsNTA5KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoVnYsRGUsMjAxNyxlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvMTUiLDExOTgpLEQoMTE5OSwxLHNpLHdCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDk5KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQobjMsQjQsMTgsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzE2IiwxMTk5KSxEKDEyMDAsMSxzaSxnSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxNzApfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChNdSxCNCwxNzAsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzE3IiwxMjAwKSxEKDEyMDEsMSxzaSxwSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw0NzIpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdCh0MyxEZSw0NzIsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzE4IiwxMjAxKSxEKDEyMDIsMSxzaSxiSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw1NDgpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChjYyxDMGUsNTQ4LGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8xOSIsMTIwMiksRCgxMTg1LDEsc2ksdkIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMzIyKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoZTMsQjQsMzQsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzIiLDExODUpLEQoMTIwMywxLHNpLGprKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDI0MSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGhvLHEwZSw4NyxlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvMjAiLDEyMDMpLEQoMTIwNCwxLHNpLGVDKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDQ0NCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGh1LERlLDgzNixlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvMjEiLDEyMDQpLEQoMTIwNSwxLHNpLG1CKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBObShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoUnMsZWUsNDc2LGUsOCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8yMiIsMTIwNSksRCgxMjA2LDEsc2ksd0opLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTkwKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoR3UsZWUsMTkwLGUsMCwyKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8yMyIsMTIwNiksRCgxMjA3LDEsc2kseUIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMjE3KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoTTYsZWUsMjE3LGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8yNCIsMTIwNyksRCgxMjA4LDEsc2kseEIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTcyKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQodVMsZWUsMTcyLGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8yNSIsMTIwOCksRCgxMjA5LDEsc2ksdkopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTk5KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQodFYsZWUsMTk5LGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8yNiIsMTIwOSksRCgxMjEwLDEsc2ksbkMpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KFBMdCxEZSwyMTEwLGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8yNyIsMTIxMCksRCgxMjExLDEsc2ksQ20pLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEJtKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChsYSxlZSwzMzMsZSw3LDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzI4IiwxMjExKSxEKDEyMTIsMSxzaSxrQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw1OCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEtBdCxUeSw1OCxlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvMjkiLDEyMTIpLEQoMTE4NiwxLHNpLEVCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDUxMCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KFpyLHszOjEsNDoxLDU6MSwxOTM0OjF9LDU5MCxlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvMyIsMTE4NiksRCgxMjEzLDEsc2ksbUopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsNTczKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoWkF0LERlLDE5NDAsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzMwIiwxMjEzKSxEKDEyMTQsMSxzaSx5SiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxNTMpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdCh4THQsVHksMTUzLGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8zMSIsMTIxNCksRCgxMjE1LDEsc2ksckMpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsNzIpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChiVSxRMGUsNzIsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzMyIiwxMjE1KSxEKDEyMTYsMSxzaSxUQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxNTUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChpNyxlZSwxNTUsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzMzIiwxMjE2KSxEKDEyMTcsMSxzaSxDQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxOSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGphLGVlLDE5LGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8zNCIsMTIxNyksRCgxMjE4LDEsc2ksdWMpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMjkwKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoSjh0LERlLDI5MCxlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvMzUiLDEyMTgpLEQoMTIxOSwxLHNpLHhKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE2Mil9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KFN2LGVlLDE2MixlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvMzYiLDEyMTkpLEQoMTIyMCwxLHNpLF9CKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDgzKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQodEV0LERlLDgzLGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8zNyIsMTIyMCksRCgxMjIxLDEsc2ksaUMpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsNTkxKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQod0x0LERlLDU5MSxlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvMzgiLDEyMjEpLEQoMTIyMiwxLHNpLGtKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChGTHQsRGUsMjExMSxlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvMzkiLDEyMjIpLEQoMTE4NywxLHNpLEVKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDg4KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoVWgsRGUsMjYsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzQiLDExODcpLEQoMTIyMywxLHNpLHNDKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE4NCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEF2LGVlLDE4NCxlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvNDAiLDEyMjMpLEQoMTIyNCwxLHNpLFNCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiByYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoQWUsZWUsMixlLDYsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvNDEiLDEyMjQpLEQoMTIyNSwxLHNpLGFDKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDU4OCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KFFBdCxEZSw1ODgsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzQyIiwxMjI1KSxEKDEyMjYsMSxzaSxvQyksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoTkx0LGVlLDIxMTIsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzQzIiwxMjI2KSxEKDEyMjcsMSxzaSxqZiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw0Mil9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KFAyLEhxLDQyLGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC80NCIsMTIyNyksRCgxMTg4LDEsc2ksVkwpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTM4KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoczEsRGUsMTM4LGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC81IiwxMTg4KSxEKDExODksMSxzaSxHTCksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxNDgpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChOZnQsRGUsMTQ4LGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC82IiwxMTg5KSxEKDExOTAsMSxzaSxseCksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw0NTcpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChwVSxEZSw2NzEsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzciLDExOTApLEQoMTE5MSwxLHNpLFRKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDU3Myl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGFnLERlLDY3OCxlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvOCIsMTE5MSksRCgxMTkyLDEsc2ksQ0opLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsNDcxKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoc0EsRGUsNDcxLGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC85IiwxMTkyKSxEKDEwMjUsMTk4MixUMGUsc0h0KSxsLmJpPWZ1bmN0aW9uKGUsbil7TWxuKHRoaXMsdShuLDQxNSkpfSxsLmZpPWZ1bmN0aW9uKGUsbil7bW9lKHRoaXMsZSx1KG4sNDE1KSl9LEYoTW4sIk1pbmltYWxFT2JqZWN0SW1wbC8xQXJyYXlEZWxlZ2F0aW5nQWRhcHRlckxpc3QiLDEwMjUpLEQoMTAyNiwxNDMsbk8seVh0KSxsLkFpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5hfSxGKE1uLCJNaW5pbWFsRU9iamVjdEltcGwvMUFycmF5RGVsZWdhdGluZ0FkYXB0ZXJMaXN0LzEiLDEwMjYpLEQoMTA1MywxMDUyLHt9LE5VdCksRigib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbiIsIkVjb3JlUGx1Z2luIiwxMDUzKTt2YXIgd0x0PUtpKFowZSwiUmVzb3VyY2UiKTtEKDc4MSwxMzc4LEowZSksbC5Zaz1mdW5jdGlvbihlKXt9LGwuWms9ZnVuY3Rpb24oZSl7fSxsLlZrPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgWnR0KHRoaXMpKSx0aGlzLmF9LGwuV2s9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saDtpZihzPWUubGVuZ3RoLHM+MClpZihScigwLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoMCk9PTQ3KXtmb3IoaD1uZXcgWGMoNCksbz0xLG49MTtuPHM7KytuKVJyKG4sZS5sZW5ndGgpLGUuY2hhckNvZGVBdChuKT09NDcmJihsZShoLG89PW4/IiI6ZS5zdWJzdHIobyxuLW8pKSxvPW4rMSk7cmV0dXJuIGxlKGgsZS5zdWJzdHIobykpLElkbih0aGlzLGgpfWVsc2UgUnIocy0xLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQocy0xKT09NjMmJihyPWJ3dChlLEN1KDYzKSxzLTIpLHI+MCYmKGU9ZS5zdWJzdHIoMCxyKSkpO3JldHVybiBacG4odGhpcyxlKX0sbC5Yaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gSXAodGhpcy5nbSkrIkAiKyhlPUhpKHRoaXMpPj4+MCxlLnRvU3RyaW5nKDE2KSkrIiB1cmk9JyIrdGhpcy5kKyInIn0sbC5iPSExLEYoZnV0LCJSZXNvdXJjZUltcGwiLDc4MSksRCgxMzc5LDc4MSxKMGUsSnp0KSxGKGZ1dCwiQmluYXJ5UmVzb3VyY2VJbXBsIiwxMzc5KSxEKDExNjksNjk0LGF1dCksbC5zaT1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw1Nik/T3JuKHRoaXMsdShlLDU2KSk6X3QoZSw1OTEpP25ldyBucih1KGUsNTkxKS5WaygpKTpWdChlKT09PVZ0KHRoaXMuZik/dShlLDE0KS5LYygpOih5OCgpLHBQLmEpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIGg1dCh0aGlzKX0sbC5hPSExLEYoJGksIkVjb3JlVXRpbC9Db250ZW50VHJlZUl0ZXJhdG9yIiwxMTY5KSxEKDEzODAsMTE2OSxhdXQsUUt0KSxsLnNpPWZ1bmN0aW9uKGUpe3JldHVybiBWdChlKT09PVZ0KHRoaXMuZik/dShlLDE1KS5LYygpOm5ldyBQWnQodShlLDU2KSl9LEYoZnV0LCJSZXNvdXJjZUltcGwvNSIsMTM4MCksRCg2NDgsMTk5NCx6MGUsWnR0KSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmk8PTQ/eUUodGhpcyxlKTpfdChlLDQ5KSYmdShlLDQ5KS5aZygpPT10aGlzLmF9LGwuYmk9ZnVuY3Rpb24oZSxuKXtlPT10aGlzLmktMSYmKHRoaXMuYS5ifHwodGhpcy5hLmI9ITApKX0sbC5kaT1mdW5jdGlvbihlLG4pe2U9PTA/dGhpcy5hLmJ8fCh0aGlzLmEuYj0hMCk6WXJ0KHRoaXMsZSxuKX0sbC5maT1mdW5jdGlvbihlLG4pe30sbC5naT1mdW5jdGlvbihlLG4scil7fSxsLmFqPWZ1bmN0aW9uKCl7cmV0dXJuIDJ9LGwuQWk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuY2o9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gcj11KGUsNDkpLG49ci53aCh0aGlzLmEsbiksbn0sbC5kaj1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiByPXUoZSw0OSksci53aChudWxsLG4pfSxsLmVqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuaGk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gTnQoX2IsRGUsNTYsZSwwLDEpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoZnV0LCJSZXNvdXJjZUltcGwvQ29udGVudHNFTGlzdCIsNjQ4KSxEKDk1NywxOTY0LGpFLFp6dCksbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLl9oKGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxGKCRpLCJBYnN0cmFjdFNlcXVlbnRpYWxJbnRlcm5hbEVMaXN0LzEiLDk1Nyk7dmFyIHZMdCxtTHQseWEseUx0O0QoNjI0LDEse30sSll0KTt2YXIgd1UsdlU7RigkaSwiQmFzaWNFeHRlbmRlZE1ldGFEYXRhIiw2MjQpLEQoMTE2MCwxLHt9LEpHdCksbC4kaz1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLl9rPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT09LTImJlRnKHRoaXMsc2duKHRoaXMuZCx0aGlzLmIpKSx0aGlzLmF9LGwuYWw9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5ibD1mdW5jdGlvbigpe3JldHVybiB3bigpLHduKCksaW99LGwubmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jPT10NyYmTzModGhpcyxYaWUodGhpcy5kLHRoaXMuYikpLHRoaXMuY30sbC5jbD1mdW5jdGlvbigpe3JldHVybiAwfSxsLmE9LTIsbC5jPXQ3LEYoJGksIkJhc2ljRXh0ZW5kZWRNZXRhRGF0YS9FQ2xhc3NFeHRlbmRlZE1ldGFEYXRhSW1wbCIsMTE2MCksRCgxMTYxLDEse30seVp0KSxsLiRrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT09KEI4KCksd1UpJiZ5cHQodGhpcyx4d24odGhpcy5mLHRoaXMuYikpLHRoaXMuYX0sbC5faz1mdW5jdGlvbigpe3JldHVybiAwfSxsLmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYz09KEI4KCksd1UpJiZGdHQodGhpcyxrd24odGhpcy5mLHRoaXMuYikpLHRoaXMuY30sbC5ibD1mdW5jdGlvbigpe3JldHVybiF0aGlzLmQmJk50dCh0aGlzLHhtbih0aGlzLmYsdGhpcy5iKSksdGhpcy5kfSxsLm5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZT09dDcmJmNSKHRoaXMsWGllKHRoaXMuZix0aGlzLmIpKSx0aGlzLmV9LGwuY2w9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nPT0tMiYmdVIodGhpcyxUMG4odGhpcy5mLHRoaXMuYikpLHRoaXMuZ30sbC5lPXQ3LGwuZz0tMixGKCRpLCJCYXNpY0V4dGVuZGVkTWV0YURhdGEvRURhdGFUeXBlRXh0ZW5kZWRNZXRhRGF0YUltcGwiLDExNjEpLEQoMTE1OSwxLHt9LGVVdCksbC5iPSExLGwuYz0hMSxGKCRpLCJCYXNpY0V4dGVuZGVkTWV0YURhdGEvRVBhY2thZ2VFeHRlbmRlZE1ldGFEYXRhSW1wbCIsMTE1OSksRCgxMTYyLDEse30sbVp0KSxsLmM9LTIsbC5lPXQ3LGwuZj10NyxGKCRpLCJCYXNpY0V4dGVuZGVkTWV0YURhdGEvRVN0cnVjdHVyYWxGZWF0dXJlRXh0ZW5kZWRNZXRhRGF0YUltcGwiLDExNjIpLEQoNTg1LDYyMix6byxSaiksbC5haj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwuRms9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiBufSxsLmM9MCxGKCRpLCJFRGF0YVR5cGVFTGlzdCIsNTg1KTt2YXIgeEx0PUtpKCRpLCJGZWF0dXJlTWFwIik7RCg3NSw1ODUsezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDU0OjEsNjc6MSw2MzoxLDU4OjEsNzY6MSwxNTM6MSwyMTU6MSwxOTM3OjEsNjk6MSw5NToxfSxzcyksbC5WYz1mdW5jdGlvbihlLG4pe3d3bih0aGlzLGUsdShuLDcyKSl9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIE4ybih0aGlzLHUoZSw3MikpfSxsLlloPWZ1bmN0aW9uKGUpe2tubih0aGlzLHUoZSw3MikpfSxsLmNqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5KZSh0aGlzLHUoZSw3Miksbil9LGwuZGo9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdnd0KHRoaXMsdShlLDcyKSxuKX0sbC5paT1mdW5jdGlvbihlLG4pe3JldHVybiBqbW4odGhpcyxlLG4pfSxsLmxpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHY0bih0aGlzLGUsdShuLDcyKSl9LGwuX2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gb3ZuKHRoaXMsZSx1KG4sNzIpKX0sbC5qaj1mdW5jdGlvbihlLG4pe3JldHVybiBySmUodGhpcyx1KGUsNzIpLG4pfSxsLmtqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFRZdCh0aGlzLHUoZSw3Miksbil9LGwubGo9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBvMG4odGhpcyx1KGUsNzIpLHUobiw3Mikscil9LGwub2k9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gUnN0KHRoaXMsZSx1KG4sNzIpKX0sbC5kbD1mdW5jdGlvbihlLG4pe3JldHVybiBKNXQodGhpcyxlLG4pfSxsLldjPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNO2ZvcihDPW5ldyBRdyhuLmdjKCkpLG89bi5LYygpO28uT2IoKTspaWYocz11KG8uUGIoKSw3MiksaD1zLmFrKCksWDAodGhpcy5lLGgpKSghaC5oaSgpfHwhTyQodGhpcyxoLHMuZGQoKSkmJiF5RShDLHMpKSYmRHIoQyxzKTtlbHNle2ZvcihNPW91KHRoaXMuZS5UZygpLGgpLHI9dSh0aGlzLmcsMTE5KSxkPSEwLHY9MDt2PHRoaXMuaTsrK3YpaWYoaz1yW3ZdLE0ucmwoay5haygpKSl7dShoNCh0aGlzLHYscyksNzIpLGQ9ITE7YnJlYWt9ZCYmRHIoQyxzKX1yZXR1cm4gU3l0KHRoaXMsZSxDKX0sbC5HYz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdixrLEM7Zm9yKGs9bmV3IFF3KGUuZ2MoKSkscz1lLktjKCk7cy5PYigpOylpZihyPXUocy5QYigpLDcyKSxvPXIuYWsoKSxYMCh0aGlzLmUsbykpKCFvLmhpKCl8fCFPJCh0aGlzLG8sci5kZCgpKSYmIXlFKGsscikpJiZEcihrLHIpO2Vsc2V7Zm9yKEM9b3UodGhpcy5lLlRnKCksbyksbj11KHRoaXMuZywxMTkpLGg9ITAsZD0wO2Q8dGhpcy5pOysrZClpZih2PW5bZF0sQy5ybCh2LmFrKCkpKXt1KGg0KHRoaXMsZCxyKSw3MiksaD0hMTticmVha31oJiZEcihrLHIpfXJldHVybiBpcyh0aGlzLGspfSxsLldoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmo9LTEsa2F0KHRoaXMsdGhpcy5pLGUpfSxsLmVsPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gVzV0KHRoaXMsZSxuLHIpfSxsLm1rPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEVJKHRoaXMsZSxuKX0sbC5mbD1mdW5jdGlvbihlLG4scil7cmV0dXJuIGJ4dCh0aGlzLGUsbixyKX0sbC5nbD1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxsLmhsPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFNJKHRoaXMsZSxuKX0sbC5pbD1mdW5jdGlvbihlKXtyZXR1cm4gdShBdCh0aGlzLGUpLDcyKS5haygpfSxsLmpsPWZ1bmN0aW9uKGUpe3JldHVybiB1KEF0KHRoaXMsZSksNzIpLmRkKCl9LGwua2w9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuaWo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5sbD1mdW5jdGlvbihlKXtyZXR1cm4hWEQodGhpcyxlKX0sbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gTnQoRTVlLFEwZSwzMzIsZSwwLDEpfSxsLkdrPWZ1bmN0aW9uKGUpe3JldHVybiBtbnQodGhpcyxlKX0sbC5XYj1mdW5jdGlvbihlKXtuRCh0aGlzLGUpfSxsLm1sPWZ1bmN0aW9uKGUsbil7T3EodGhpcyxlLG4pfSxsLm5sPWZ1bmN0aW9uKGUpe3JldHVybiBsbmUodGhpcyxlKX0sbC5vbD1mdW5jdGlvbihlKXtQc2UodGhpcyxlKX0sRigkaSwiQmFzaWNGZWF0dXJlTWFwIiw3NSksRCgxODUxLDEsbjApLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5SYj1mdW5jdGlvbihlKXtpZih0aGlzLmc9PS0xKXRocm93IGl0KG5ldyBPdSk7WmoodGhpcyk7dHJ5e3N1ZSh0aGlzLmUsdGhpcy5iLHRoaXMuYSxlKSx0aGlzLmQ9dGhpcy5lLmosUXoodGhpcyl9Y2F0Y2gobil7dGhyb3cgbj1XaShuKSxfdChuLDczKT9pdChuZXcgcmgpOml0KG4pfX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBCaXQodGhpcyl9LGwuU2I9ZnVuY3Rpb24oKXtyZXR1cm4gUHJlKHRoaXMpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIFF6KHRoaXMpfSxsLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5VYj1mdW5jdGlvbigpe3ZhciBlO2lmKFByZSh0aGlzKSlyZXR1cm4gWmoodGhpcyksdGhpcy5nPS0tdGhpcy5hLHRoaXMuTGsoKSYmKGU9Yl8odGhpcy5lLHRoaXMuYix0aGlzLmMsdGhpcy5hLHRoaXMuaiksdGhpcy5qPWUpLHRoaXMuaT0wLHRoaXMuajt0aHJvdyBpdChuZXcgbGMpfSxsLlZiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS0xfSxsLlFiPWZ1bmN0aW9uKCl7aWYodGhpcy5nPT0tMSl0aHJvdyBpdChuZXcgT3UpO1pqKHRoaXMpO3RyeXtub2UodGhpcy5lLHRoaXMuYix0aGlzLmcpLHRoaXMuZD10aGlzLmUuaix0aGlzLmc8dGhpcy5hJiYoLS10aGlzLmEsLS10aGlzLmMpLC0tdGhpcy5nfWNhdGNoKGUpe3Rocm93IGU9V2koZSksX3QoZSw3Myk/aXQobmV3IHJoKTppdChlKX19LGwuTGs9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5XYj1mdW5jdGlvbihlKXtpZih0aGlzLmc9PS0xKXRocm93IGl0KG5ldyBPdSk7WmoodGhpcyk7dHJ5e0xsZSh0aGlzLmUsdGhpcy5iLHRoaXMuZyxlKSx0aGlzLmQ9dGhpcy5lLmp9Y2F0Y2gobil7dGhyb3cgbj1XaShuKSxfdChuLDczKT9pdChuZXcgcmgpOml0KG4pfX0sbC5hPTAsbC5jPTAsbC5kPTAsbC5mPSExLGwuZz0wLGwuaT0wLEYoJGksIkZlYXR1cmVNYXBVdGlsL0Jhc2ljRmVhdHVyZUVJdGVyYXRvciIsMTg1MSksRCg0MTAsMTg1MSxuMCx0RSksbC5wbD1mdW5jdGlvbigpe3ZhciBlLG4scjtmb3Iocj10aGlzLmUuaSxlPXUodGhpcy5lLmcsMTE5KTt0aGlzLmM8cjspe2lmKG49ZVt0aGlzLmNdLHRoaXMuay5ybChuLmFrKCkpKXJldHVybiB0aGlzLmo9dGhpcy5mP246bi5kZCgpLHRoaXMuaT0yLCEwOysrdGhpcy5jfXJldHVybiB0aGlzLmk9MSx0aGlzLmc9LTEsITF9LGwucWw9ZnVuY3Rpb24oKXt2YXIgZSxuO2ZvcihlPXUodGhpcy5lLmcsMTE5KTstLXRoaXMuYz49MDspaWYobj1lW3RoaXMuY10sdGhpcy5rLnJsKG4uYWsoKSkpcmV0dXJuIHRoaXMuaj10aGlzLmY/bjpuLmRkKCksdGhpcy5pPS0yLCEwO3JldHVybiB0aGlzLmk9LTEsdGhpcy5nPS0xLCExfSxGKCRpLCJCYXNpY0ZlYXR1cmVNYXAvRmVhdHVyZUVJdGVyYXRvciIsNDEwKSxEKDY2Miw0MTAsbjAscm50KSxsLkxrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEYoJGksIkJhc2ljRmVhdHVyZU1hcC9SZXNvbHZpbmdGZWF0dXJlRUl0ZXJhdG9yIiw2NjIpLEQoOTU1LDQ4NixOSCxVVXQpLGwuR2k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sRigkaSwiRUNvbnRlbnRzRUxpc3QvMSIsOTU1KSxEKDk1Niw0ODYsTkgsd1V0KSxsLkxrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoJGksIkVDb250ZW50c0VMaXN0LzIiLDk1NiksRCg5NTQsMjc5LEJILFdVdCksbC5Oaz1mdW5jdGlvbihlKXt9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5TYj1mdW5jdGlvbigpe3JldHVybiExfSxGKCRpLCJFQ29udGVudHNFTGlzdC9GZWF0dXJlSXRlcmF0b3JJbXBsLzEiLDk1NCksRCg4MjUsNTg1LHpvLEUydCksbC5jaT1mdW5jdGlvbigpe3RoaXMuYT0hMH0sbC5maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuWGo9ZnVuY3Rpb24oKXt2YXIgZTt4cih0aGlzKSx4bCh0aGlzLmUpPyhlPXRoaXMuYSx0aGlzLmE9ITEsbWkodGhpcy5lLG5ldyBiZih0aGlzLmUsMix0aGlzLmMsZSwhMSkpKTp0aGlzLmE9ITF9LGwuYT0hMSxGKCRpLCJFRGF0YVR5cGVFTGlzdC9VbnNldHRhYmxlIiw4MjUpLEQoMTg0OSw1ODUsem8sZVd0KSxsLmhpPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEYoJGksIkVEYXRhVHlwZVVuaXF1ZUVMaXN0IiwxODQ5KSxEKDE4NTAsODI1LHpvLG5XdCksbC5oaT1mdW5jdGlvbigpe3JldHVybiEwfSxGKCRpLCJFRGF0YVR5cGVVbmlxdWVFTGlzdC9VbnNldHRhYmxlIiwxODUwKSxEKDEzOSw4NSx6byxGdSksbC5Faz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmxpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGc2KHRoaXMsZSx1KG4sNTYpKX0sRigkaSwiRU9iamVjdENvbnRhaW5tZW50RUxpc3QvUmVzb2x2aW5nIiwxMzkpLEQoMTE2Myw1NDUsem8sdFd0KSxsLkVrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwubGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZzYodGhpcyxlLHUobiw1NikpfSxGKCRpLCJFT2JqZWN0Q29udGFpbm1lbnRFTGlzdC9VbnNldHRhYmxlL1Jlc29sdmluZyIsMTE2MyksRCg3NDgsMTYsem8saHd0KSxsLmNpPWZ1bmN0aW9uKCl7dGhpcy5hPSEwfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5Yaj1mdW5jdGlvbigpe3ZhciBlO3hyKHRoaXMpLHhsKHRoaXMuZSk/KGU9dGhpcy5hLHRoaXMuYT0hMSxtaSh0aGlzLmUsbmV3IGJmKHRoaXMuZSwyLHRoaXMuYyxlLCExKSkpOnRoaXMuYT0hMX0sbC5hPSExLEYoJGksIkVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlRUxpc3QvVW5zZXR0YWJsZSIsNzQ4KSxEKDExNzMsNzQ4LHpvLGhZdCksbC5Faz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmxpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGc2KHRoaXMsZSx1KG4sNTYpKX0sRigkaSwiRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VFTGlzdC9VbnNldHRhYmxlL1Jlc29sdmluZyIsMTE3MyksRCg3NDMsNDk2LHpvLGsydCksbC5jaT1mdW5jdGlvbigpe3RoaXMuYT0hMH0sbC5maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuWGo9ZnVuY3Rpb24oKXt2YXIgZTt4cih0aGlzKSx4bCh0aGlzLmUpPyhlPXRoaXMuYSx0aGlzLmE9ITEsbWkodGhpcy5lLG5ldyBiZih0aGlzLmUsMix0aGlzLmMsZSwhMSkpKTp0aGlzLmE9ITF9LGwuYT0hMSxGKCRpLCJFT2JqZWN0RUxpc3QvVW5zZXR0YWJsZSIsNzQzKSxEKDMyOCw0OTYsem8sWTMpLGwuRWs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiBnNih0aGlzLGUsdShuLDU2KSl9LEYoJGksIkVPYmplY3RSZXNvbHZpbmdFTGlzdCIsMzI4KSxEKDE2NDEsNzQzLHpvLHJXdCksbC5Faz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmxpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGc2KHRoaXMsZSx1KG4sNTYpKX0sRigkaSwiRU9iamVjdFJlc29sdmluZ0VMaXN0L1Vuc2V0dGFibGUiLDE2NDEpLEQoMTM4MSwxLHt9LF9KKTt2YXIgQzVlO0YoJGksIkVPYmplY3RWYWxpZGF0b3IiLDEzODEpLEQoNTQ2LDQ5Nix6byxyJCksbC56az1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwuQWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuRGs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5iPTAsRigkaSwiRU9iamVjdFdpdGhJbnZlcnNlRUxpc3QiLDU0NiksRCgxMTc2LDU0Nix6byxmWXQpLGwuQ2s9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRigkaSwiRU9iamVjdFdpdGhJbnZlcnNlRUxpc3QvTWFueUludmVyc2UiLDExNzYpLEQoNjI1LDU0Nix6byxFbnQpLGwuY2k9ZnVuY3Rpb24oKXt0aGlzLmE9ITB9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlhqPWZ1bmN0aW9uKCl7dmFyIGU7eHIodGhpcykseGwodGhpcy5lKT8oZT10aGlzLmEsdGhpcy5hPSExLG1pKHRoaXMuZSxuZXcgYmYodGhpcy5lLDIsdGhpcy5jLGUsITEpKSk6dGhpcy5hPSExfSxsLmE9ITEsRigkaSwiRU9iamVjdFdpdGhJbnZlcnNlRUxpc3QvVW5zZXR0YWJsZSIsNjI1KSxEKDExNzUsNjI1LHpvLGRZdCksbC5Daz1mdW5jdGlvbigpe3JldHVybiEwfSxGKCRpLCJFT2JqZWN0V2l0aEludmVyc2VFTGlzdC9VbnNldHRhYmxlL01hbnlJbnZlcnNlIiwxMTc1KSxEKDc0OSw1NDYsem8sZnd0KSxsLkVrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwubGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZzYodGhpcyxlLHUobiw1NikpfSxGKCRpLCJFT2JqZWN0V2l0aEludmVyc2VSZXNvbHZpbmdFTGlzdCIsNzQ5KSxEKDMxLDc0OSx6byxDbiksbC5Daz1mdW5jdGlvbigpe3JldHVybiEwfSxGKCRpLCJFT2JqZWN0V2l0aEludmVyc2VSZXNvbHZpbmdFTGlzdC9NYW55SW52ZXJzZSIsMzEpLEQoNzUwLDYyNSx6byxkd3QpLGwuRWs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiBnNih0aGlzLGUsdShuLDU2KSl9LEYoJGksIkVPYmplY3RXaXRoSW52ZXJzZVJlc29sdmluZ0VMaXN0L1Vuc2V0dGFibGUiLDc1MCksRCgxMTc0LDc1MCx6byxnWXQpLGwuQ2s9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRigkaSwiRU9iamVjdFdpdGhJbnZlcnNlUmVzb2x2aW5nRUxpc3QvVW5zZXR0YWJsZS9NYW55SW52ZXJzZSIsMTE3NCksRCgxMTY0LDYyMix6byksbC5haT1mdW5jdGlvbigpe3JldHVybih0aGlzLmImMTc5Mik9PTB9LGwuY2k9ZnVuY3Rpb24oKXt0aGlzLmJ8PTF9LGwuQms9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJjQpIT0wfSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiY0MCkhPTB9LGwuQ2s9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJjE2KSE9MH0sbC5Eaz1mdW5jdGlvbigpe3JldHVybih0aGlzLmImOCkhPTB9LGwuRWs9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJkR5KSE9MH0sbC5yaz1mdW5jdGlvbigpe3JldHVybih0aGlzLmImMzIpIT0wfSxsLkZrPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiZ4ZikhPTB9LGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZD9LWnQodGhpcy5kLGUpOnRoaXMuYWsoKS5ZaigpLndqKGUpfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYiYyPyh0aGlzLmImMSkhPTA6dGhpcy5pIT0wfSxsLmhpPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiYxMjgpIT0wfSxsLlhqPWZ1bmN0aW9uKCl7dmFyIGU7eHIodGhpcyksdGhpcy5iJjImJih4bCh0aGlzLmUpPyhlPSh0aGlzLmImMSkhPTAsdGhpcy5iJj0tMixuOCh0aGlzLG5ldyBiZih0aGlzLmUsMixHaSh0aGlzLmUuVGcoKSx0aGlzLmFrKCkpLGUsITEpKSk6dGhpcy5iJj0tMil9LGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJjE1MzYpPT0wfSxsLmI9MCxGKCRpLCJFY29yZUVMaXN0L0dlbmVyaWMiLDExNjQpLEQoMTE2NSwxMTY0LHpvLGlRdCksbC5haz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LEYoJGksIkVjb3JlRUxpc3QvRHluYW1pYyIsMTE2NSksRCg3NDcsNjMsTGQsX3B0KSxsLnJpPWZ1bmN0aW9uKGUpe3JldHVybiBNRCh0aGlzLmEuYSxlKX0sRigkaSwiRWNvcmVFTWFwLzEiLDc0NyksRCg3NDYsODUsem8saHZ0KSxsLmJpPWZ1bmN0aW9uKGUsbil7SnoodGhpcy5iLHUobiwxMzMpKX0sbC5kaT1mdW5jdGlvbihlLG4pe1ZuZSh0aGlzLmIpfSxsLmVpPWZ1bmN0aW9uKGUsbixyKXt2YXIgczsrKyhzPXRoaXMuYix1KG4sMTMzKSxzKS5lfSxsLmZpPWZ1bmN0aW9uKGUsbil7V2l0KHRoaXMuYix1KG4sMTMzKSl9LGwuZ2k9ZnVuY3Rpb24oZSxuLHIpe1dpdCh0aGlzLmIsdShyLDEzMykpLFZ0KHIpPT09VnQobikmJnUociwxMzMpLlRoKGhRZSh1KG4sMTMzKS5jZCgpKSksSnoodGhpcy5iLHUobiwxMzMpKX0sRigkaSwiRWNvcmVFTWFwL0RlbGVnYXRlRU9iamVjdENvbnRhaW5tZW50RUxpc3QiLDc0NiksRCgxMTcxLDE1MSxqOHQscm5lKSxGKCRpLCJFY29yZUVNYXAvVW5zZXR0YWJsZSIsMTE3MSksRCgxMTcyLDc0Nix6byxwWXQpLGwuY2k9ZnVuY3Rpb24oKXt0aGlzLmE9ITB9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlhqPWZ1bmN0aW9uKCl7dmFyIGU7eHIodGhpcykseGwodGhpcy5lKT8oZT10aGlzLmEsdGhpcy5hPSExLG1pKHRoaXMuZSxuZXcgYmYodGhpcy5lLDIsdGhpcy5jLGUsITEpKSk6dGhpcy5hPSExfSxsLmE9ITEsRigkaSwiRWNvcmVFTWFwL1Vuc2V0dGFibGUvVW5zZXR0YWJsZURlbGVnYXRlRU9iamVjdENvbnRhaW5tZW50RUxpc3QiLDExNzIpLEQoMTE2OCwyMjgsQTQsb1h0KSxsLmE9ITEsbC5iPSExLEYoJGksIkVjb3JlVXRpbC9Db3BpZXIiLDExNjgpLEQoNzQ1LDEsc2EsUFp0KSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gTWllKHRoaXMpfSxsLlBiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIE1pZSh0aGlzKSxlPXRoaXMuYix0aGlzLmI9bnVsbCxlfSxsLlFiPWZ1bmN0aW9uKCl7dGhpcy5hLlFiKCl9LEYoJGksIkVjb3JlVXRpbC9Qcm9wZXJDb250ZW50SXRlcmF0b3IiLDc0NSksRCgxMzgyLDEzODEse30sdFIpO3ZhciBfNWU7RigkaSwiRWNvcmVWYWxpZGF0b3IiLDEzODIpO3ZhciBTNWU7S2koJGksIkZlYXR1cmVNYXBVdGlsL1ZhbGlkYXRvciIpLEQoMTI2MCwxLHsxOTQyOjF9LFNKKSxsLnJsPWZ1bmN0aW9uKGUpe3JldHVybiEwfSxGKCRpLCJGZWF0dXJlTWFwVXRpbC8xIiwxMjYwKSxEKDc1NywxLHsxOTQyOjF9LEF4dCksbC5ybD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdGhpcy5jPT1lPyEwOihuPVJlKHRyKHRoaXMuYSxlKSksbj09bnVsbD9ubW4odGhpcyxlKT8ocUp0KHRoaXMuYSxlLChObigpLHI3KSksITApOihxSnQodGhpcy5hLGUsKE5uKCksRjIpKSwhMSk6bj09KE5uKCkscjcpKX0sbC5lPSExO3ZhciAkZnQ7RigkaSwiRmVhdHVyZU1hcFV0aWwvQmFzaWNWYWxpZGF0b3IiLDc1NyksRCg3NTgsNDMsQTQsdjJ0KSxGKCRpLCJGZWF0dXJlTWFwVXRpbC9CYXNpY1ZhbGlkYXRvci9DYWNoZSIsNzU4KSxEKDUwMSw1Mix7MjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDU4OjEsNzY6MSw2OToxLDk1OjF9LEJNKSxsLlZjPWZ1bmN0aW9uKGUsbil7c3VlKHRoaXMuYyx0aGlzLmIsZSxuKX0sbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gSjV0KHRoaXMuYyx0aGlzLmIsZSl9LGwuV2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdzNuKHRoaXMuYyx0aGlzLmIsZSxuKX0sbC5HYz1mdW5jdGlvbihlKXtyZXR1cm4gZzkodGhpcyxlKX0sbC5YaD1mdW5jdGlvbihlLG4pe1Jvbih0aGlzLmMsdGhpcy5iLGUsbil9LGwubGs9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gVzV0KHRoaXMuYyx0aGlzLmIsZSxuKX0sbC5waT1mdW5jdGlvbihlKXtyZXR1cm4gSXEodGhpcy5jLHRoaXMuYixlLCExKX0sbC5aaD1mdW5jdGlvbigpe3JldHVybiBBVXQodGhpcy5jLHRoaXMuYil9LGwuJGg9ZnVuY3Rpb24oKXtyZXR1cm4gWlhlKHRoaXMuYyx0aGlzLmIpfSxsLl9oPWZ1bmN0aW9uKGUpe3JldHVybiBIYW4odGhpcy5jLHRoaXMuYixlKX0sbC5taz1mdW5jdGlvbihlLG4pe3JldHVybiBXV3QodGhpcyxlLG4pfSxsLiRiPWZ1bmN0aW9uKCl7VHgodGhpcyl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIE8kKHRoaXMuYyx0aGlzLmIsZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHFjbih0aGlzLmMsdGhpcy5iLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBJcSh0aGlzLmMsdGhpcy5iLGUsITApfSxsLldqPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiB0YW4odGhpcy5jLHRoaXMuYixlKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiBoaih0aGlzKX0sbC5maj1mdW5jdGlvbigpe3JldHVybiFYRCh0aGlzLmMsdGhpcy5iKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBfb24odGhpcy5jLHRoaXMuYil9LGwuWWM9ZnVuY3Rpb24oKXtyZXR1cm4gU29uKHRoaXMuYyx0aGlzLmIpfSxsLlpjPWZ1bmN0aW9uKGUpe3JldHVybiBqbG4odGhpcy5jLHRoaXMuYixlKX0sbC5paT1mdW5jdGlvbihlLG4pe3JldHVybiBFbGUodGhpcy5jLHRoaXMuYixlLG4pfSxsLmppPWZ1bmN0aW9uKGUsbil7QmFuKHRoaXMuYyx0aGlzLmIsZSxuKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gbm9lKHRoaXMuYyx0aGlzLmIsZSl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIEVtbih0aGlzLmMsdGhpcy5iLGUpfSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIExsZSh0aGlzLmMsdGhpcy5iLGUsbil9LGwuV2I9ZnVuY3Rpb24oZSl7cHEodGhpcy5jLHRoaXMuYiksZzkodGhpcyx1KGUsMTUpKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiBabG4odGhpcy5jLHRoaXMuYil9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gUWluKHRoaXMuYyx0aGlzLmIpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiBlYW4odGhpcy5jLHRoaXMuYixlKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlLG47Zm9yKG49bmV3IEFnLG4uYSs9IlsiLGU9QVV0KHRoaXMuYyx0aGlzLmIpO0JpdChlKTspZ28obixiOShReihlKSkpLEJpdChlKSYmKG4uYSs9WWEpO3JldHVybiBuLmErPSJdIixuLmF9LGwuWGo9ZnVuY3Rpb24oKXtwcSh0aGlzLmMsdGhpcy5iKX0sRigkaSwiRmVhdHVyZU1hcFV0aWwvRmVhdHVyZUVMaXN0Iiw1MDEpLEQoNjI3LDM2LG5PLGpydCksbC55aT1mdW5jdGlvbihlKXtyZXR1cm4gZV8odGhpcyxlKX0sbC5EaT1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdjtzd2l0Y2godGhpcy5kKXtjYXNlIDE6Y2FzZSAyOntpZihoPWUuQWkoKSxWdChoKT09PVZ0KHRoaXMuYykmJmVfKHRoaXMsbnVsbCk9PWUueWkobnVsbCkpcmV0dXJuIHRoaXMuZz1lLnppKCksZS54aSgpPT0xJiYodGhpcy5kPTEpLCEwO2JyZWFrfWNhc2UgMzp7c3dpdGNoKG89ZS54aSgpLG8pe2Nhc2UgMzp7aWYoaD1lLkFpKCksVnQoaCk9PT1WdCh0aGlzLmMpJiZlXyh0aGlzLG51bGwpPT1lLnlpKG51bGwpKXJldHVybiB0aGlzLmQ9NSxuPW5ldyBRdygyKSxEcihuLHRoaXMuZyksRHIobixlLnppKCkpLHRoaXMuZz1uLCEwO2JyZWFrfX1icmVha31jYXNlIDU6e3N3aXRjaChvPWUueGkoKSxvKXtjYXNlIDM6e2lmKGg9ZS5BaSgpLFZ0KGgpPT09VnQodGhpcy5jKSYmZV8odGhpcyxudWxsKT09ZS55aShudWxsKSlyZXR1cm4gcj11KHRoaXMuZywxNCksci5GYyhlLnppKCkpLCEwO2JyZWFrfX1icmVha31jYXNlIDQ6e3N3aXRjaChvPWUueGkoKSxvKXtjYXNlIDM6e2lmKGg9ZS5BaSgpLFZ0KGgpPT09VnQodGhpcy5jKSYmZV8odGhpcyxudWxsKT09ZS55aShudWxsKSlyZXR1cm4gdGhpcy5kPTEsdGhpcy5nPWUuemkoKSwhMDticmVha31jYXNlIDQ6e2lmKGg9ZS5BaSgpLFZ0KGgpPT09VnQodGhpcy5jKSYmZV8odGhpcyxudWxsKT09ZS55aShudWxsKSlyZXR1cm4gdGhpcy5kPTYsdj1uZXcgUXcoMiksRHIodix0aGlzLm4pLERyKHYsZS5CaSgpKSx0aGlzLm49dixkPWx0KGN0KENyLDEpLFhyLDI1LDE1LFt0aGlzLm8sZS5DaSgpXSksdGhpcy5nPWQsITA7YnJlYWt9fWJyZWFrfWNhc2UgNjp7c3dpdGNoKG89ZS54aSgpLG8pe2Nhc2UgNDp7aWYoaD1lLkFpKCksVnQoaCk9PT1WdCh0aGlzLmMpJiZlXyh0aGlzLG51bGwpPT1lLnlpKG51bGwpKXJldHVybiByPXUodGhpcy5uLDE0KSxyLkZjKGUuQmkoKSksZD11KHRoaXMuZyw0OCkscz1OdChDcixYciwyNSxkLmxlbmd0aCsxLDE1LDEpLERjKGQsMCxzLDAsZC5sZW5ndGgpLHNbZC5sZW5ndGhdPWUuQ2koKSx0aGlzLmc9cywhMDticmVha319YnJlYWt9fXJldHVybiExfSxGKCRpLCJGZWF0dXJlTWFwVXRpbC9GZWF0dXJlRU5vdGlmaWNhdGlvbkltcGwiLDYyNyksRCg1NTIsNTAxLHsyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjEsNTg6MSw3NjoxLDE1MzoxLDIxNToxLDE5Mzc6MSw2OToxLDk1OjF9LHFqKSxsLmRsPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEo1dCh0aGlzLmMsZSxuKX0sbC5lbD1mdW5jdGlvbihlLG4scil7cmV0dXJuIFc1dCh0aGlzLmMsZSxuLHIpfSxsLmZsPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gYnh0KHRoaXMuYyxlLG4scil9LGwuZ2w9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbC5obD1mdW5jdGlvbihlLG4pe3JldHVybiBTSSh0aGlzLmMsZSxuKX0sbC5pbD1mdW5jdGlvbihlKXtyZXR1cm4gdShJcSh0aGlzLmMsdGhpcy5iLGUsITEpLDcyKS5haygpfSxsLmpsPWZ1bmN0aW9uKGUpe3JldHVybiB1KElxKHRoaXMuYyx0aGlzLmIsZSwhMSksNzIpLmRkKCl9LGwua2w9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLmxsPWZ1bmN0aW9uKGUpe3JldHVybiFYRCh0aGlzLmMsZSl9LGwubWw9ZnVuY3Rpb24oZSxuKXtPcSh0aGlzLmMsZSxuKX0sbC5ubD1mdW5jdGlvbihlKXtyZXR1cm4gbG5lKHRoaXMuYyxlKX0sbC5vbD1mdW5jdGlvbihlKXtQc2UodGhpcy5jLGUpfSxGKCRpLCJGZWF0dXJlTWFwVXRpbC9GZWF0dXJlRmVhdHVyZU1hcCIsNTUyKSxEKDEyNTksMSxodXQsblV0KSxsLldqPWZ1bmN0aW9uKGUpe3JldHVybiBJcSh0aGlzLmIsdGhpcy5hLC0xLGUpfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIVhEKHRoaXMuYix0aGlzLmEpfSxsLldiPWZ1bmN0aW9uKGUpe09xKHRoaXMuYix0aGlzLmEsZSl9LGwuWGo9ZnVuY3Rpb24oKXtwcSh0aGlzLmIsdGhpcy5hKX0sRigkaSwiRmVhdHVyZU1hcFV0aWwvRmVhdHVyZVZhbHVlIiwxMjU5KTt2YXIgSjYsemZ0LHFmdCx0ayxBNWUsd1A9S2koR0gsIkFueVR5cGUiKTtEKDY2Niw2MCxRMCxwZXQpLEYoR0gsIkludmFsaWREYXRhdHlwZVZhbHVlRXhjZXB0aW9uIiw2NjYpO3ZhciBtVT1LaShHSCxlZ2UpLHZQPUtpKEdILG5nZSksa0x0PUtpKEdILHJnZSksTDVlLHBjLEVMdCxYMixNNWUsRDVlLEk1ZSxPNWUsUDVlLEY1ZSxONWUsQjVlLFI1ZSxqNWUsJDVlLGg1LHo1ZSxmNSxsQSxxNWUsV3YsbVAseVAsSDVlLGhBLGZBO0QoODMwLDUwNix7MTA1OjEsOTI6MSw5MDoxLDU2OjEsNDk6MSw5NzoxLDg0MzoxfSxXcHQpLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIHI/KCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHRoaXMuYyk6KCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHRoaXMuYy5iKTtjYXNlIDE6cmV0dXJuIHI/KCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHUoQmModGhpcy5jLChJaSgpLFgyKSksMTUzKSk6KCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHUodShCYyh0aGlzLmMsKElpKCksWDIpKSwxNTMpLDIxNSkpLmtsKCk7Y2FzZSAyOnJldHVybiByPyghdGhpcy5iJiYodGhpcy5iPW5ldyBzcyh0aGlzLDIpKSx0aGlzLmIpOighdGhpcy5iJiYodGhpcy5iPW5ldyBzcyh0aGlzLDIpKSx0aGlzLmIuYil9cmV0dXJuIHVoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBuaCksdGhpcy5rKS5jaygpOnRoaXMuemgoKSxlKSxuLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLEVJKHRoaXMuYyxlLHIpO2Nhc2UgMTpyZXR1cm4oIXRoaXMuYyYmKHRoaXMuYz1uZXcgc3ModGhpcywwKSksdSh1KEJjKHRoaXMuYywoSWkoKSxYMikpLDE1MyksNjkpKS5tayhlLHIpO2Nhc2UgMjpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBzcyh0aGlzLDIpKSxFSSh0aGlzLmIsZSxyKX1yZXR1cm4gcz11KHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBuaCksdGhpcy5rKS5jaygpOnRoaXMuemgoKSxuKSw2Nikscy5OaigpLlJqKHRoaXMsJG10KHRoaXMpLG4tSm4odGhpcy56aCgpKSxlLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLmMmJnRoaXMuYy5pIT0wO2Nhc2UgMTpyZXR1cm4hKCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHUoQmModGhpcy5jLChJaSgpLFgyKSksMTUzKSkuZGMoKTtjYXNlIDI6cmV0dXJuISF0aGlzLmImJnRoaXMuYi5pIT0wfXJldHVybiBvaCh0aGlzLGUtSm4odGhpcy56aCgpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgbmgpLHRoaXMuaykuY2soKTp0aGlzLnpoKCksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5jJiYodGhpcy5jPW5ldyBzcyh0aGlzLDApKSxuRCh0aGlzLmMsbik7cmV0dXJuO2Nhc2UgMTooIXRoaXMuYyYmKHRoaXMuYz1uZXcgc3ModGhpcywwKSksdSh1KEJjKHRoaXMuYywoSWkoKSxYMikpLDE1MyksMjE1KSkuV2Iobik7cmV0dXJuO2Nhc2UgMjohdGhpcy5iJiYodGhpcy5iPW5ldyBzcyh0aGlzLDIpKSxuRCh0aGlzLmIsbik7cmV0dXJufWdoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBuaCksdGhpcy5rKS5jaygpOnRoaXMuemgoKSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBJaSgpLEVMdH0sbC5CaD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHhyKHRoaXMuYyk7cmV0dXJuO2Nhc2UgMTooIXRoaXMuYyYmKHRoaXMuYz1uZXcgc3ModGhpcywwKSksdShCYyh0aGlzLmMsKElpKCksWDIpKSwxNTMpKS4kYigpO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgc3ModGhpcywyKSkseHIodGhpcy5iKTtyZXR1cm59ZmgodGhpcyxlLUpuKHRoaXMuemgoKSkseW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IG5oKSx0aGlzLmspLmNrKCk6dGhpcy56aCgpLGUpKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLmomND9tZih0aGlzKTooZT1uZXcgX2gobWYodGhpcykpLGUuYSs9IiAobWl4ZWQ6ICIsbDkoZSx0aGlzLmMpLGUuYSs9IiwgYW55QXR0cmlidXRlOiAiLGw5KGUsdGhpcy5iKSxlLmErPSIpIixlLmEpfSxGKHhzLCJBbnlUeXBlSW1wbCIsODMwKSxEKDY2Nyw1MDYsezEwNToxLDkyOjEsOTA6MSw1NjoxLDQ5OjEsOTc6MSwyMDIxOjEsNjY3OjF9LEFCKSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiB0aGlzLmE7Y2FzZSAxOnJldHVybiB0aGlzLmJ9cmV0dXJuIHVoKHRoaXMsZS1KbigoSWkoKSxoNSkpLHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBuaCksdGhpcy5rKS5jaygpOmg1LGUpLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gdGhpcy5hIT1udWxsO2Nhc2UgMTpyZXR1cm4gdGhpcy5iIT1udWxsfXJldHVybiBvaCh0aGlzLGUtSm4oKElpKCksaDUpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgbmgpLHRoaXMuaykuY2soKTpoNSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSAwOiR0dCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAxOmtwdCh0aGlzLEJyKG4pKTtyZXR1cm59Z2godGhpcyxlLUpuKChJaSgpLGg1KSkseW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IG5oKSx0aGlzLmspLmNrKCk6aDUsZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gSWkoKSxoNX0sbC5CaD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAwOnRoaXMuYT1udWxsO3JldHVybjtjYXNlIDE6dGhpcy5iPW51bGw7cmV0dXJufWZoKHRoaXMsZS1KbigoSWkoKSxoNSkpLHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBuaCksdGhpcy5rKS5jaygpOmg1LGUpKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLmomND9tZih0aGlzKTooZT1uZXcgX2gobWYodGhpcykpLGUuYSs9IiAoZGF0YTogIixnbyhlLHRoaXMuYSksZS5hKz0iLCB0YXJnZXQ6ICIsZ28oZSx0aGlzLmIpLGUuYSs9IikiLGUuYSl9LGwuYT1udWxsLGwuYj1udWxsLEYoeHMsIlByb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwiLDY2NyksRCg2NjgsODMwLHsxMDU6MSw5MjoxLDkwOjEsNTY6MSw0OToxLDk3OjEsODQzOjEsMjAyMjoxLDY2ODoxfSxIcXQpLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIHI/KCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHRoaXMuYyk6KCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHRoaXMuYy5iKTtjYXNlIDE6cmV0dXJuIHI/KCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHUoQmModGhpcy5jLChJaSgpLFgyKSksMTUzKSk6KCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHUodShCYyh0aGlzLmMsKElpKCksWDIpKSwxNTMpLDIxNSkpLmtsKCk7Y2FzZSAyOnJldHVybiByPyghdGhpcy5iJiYodGhpcy5iPW5ldyBzcyh0aGlzLDIpKSx0aGlzLmIpOighdGhpcy5iJiYodGhpcy5iPW5ldyBzcyh0aGlzLDIpKSx0aGlzLmIuYik7Y2FzZSAzOnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLEJyKFNJKHRoaXMuYywoSWkoKSxsQSksITApKTtjYXNlIDQ6cmV0dXJuIGd3dCh0aGlzLmEsKCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLEJyKFNJKHRoaXMuYywoSWkoKSxsQSksITApKSkpO2Nhc2UgNTpyZXR1cm4gdGhpcy5hfXJldHVybiB1aCh0aGlzLGUtSm4oKElpKCksZjUpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgbmgpLHRoaXMuaykuY2soKTpmNSxlKSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLmMmJnRoaXMuYy5pIT0wO2Nhc2UgMTpyZXR1cm4hKCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHUoQmModGhpcy5jLChJaSgpLFgyKSksMTUzKSkuZGMoKTtjYXNlIDI6cmV0dXJuISF0aGlzLmImJnRoaXMuYi5pIT0wO2Nhc2UgMzpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBzcyh0aGlzLDApKSxCcihTSSh0aGlzLmMsKElpKCksbEEpLCEwKSkhPW51bGw7Y2FzZSA0OnJldHVybiBnd3QodGhpcy5hLCghdGhpcy5jJiYodGhpcy5jPW5ldyBzcyh0aGlzLDApKSxCcihTSSh0aGlzLmMsKElpKCksbEEpLCEwKSkpKSE9bnVsbDtjYXNlIDU6cmV0dXJuISF0aGlzLmF9cmV0dXJuIG9oKHRoaXMsZS1KbigoSWkoKSxmNSkpLHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBuaCksdGhpcy5rKS5jaygpOmY1LGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuYyYmKHRoaXMuYz1uZXcgc3ModGhpcywwKSksbkQodGhpcy5jLG4pO3JldHVybjtjYXNlIDE6KCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHUodShCYyh0aGlzLmMsKElpKCksWDIpKSwxNTMpLDIxNSkpLldiKG4pO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgc3ModGhpcywyKSksbkQodGhpcy5iLG4pO3JldHVybjtjYXNlIDM6SnZ0KHRoaXMsQnIobikpO3JldHVybjtjYXNlIDQ6SnZ0KHRoaXMscHd0KHRoaXMuYSxuKSk7cmV0dXJuO2Nhc2UgNTp2Yyh0aGlzLHUobiwxNDgpKTtyZXR1cm59Z2godGhpcyxlLUpuKChJaSgpLGY1KSkseW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IG5oKSx0aGlzLmspLmNrKCk6ZjUsZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gSWkoKSxmNX0sbC5CaD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHhyKHRoaXMuYyk7cmV0dXJuO2Nhc2UgMTooIXRoaXMuYyYmKHRoaXMuYz1uZXcgc3ModGhpcywwKSksdShCYyh0aGlzLmMsKElpKCksWDIpKSwxNTMpKS4kYigpO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgc3ModGhpcywyKSkseHIodGhpcy5iKTtyZXR1cm47Y2FzZSAzOiF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLE9xKHRoaXMuYywoSWkoKSxsQSksbnVsbCk7cmV0dXJuO2Nhc2UgNDpKdnQodGhpcyxwd3QodGhpcy5hLG51bGwpKTtyZXR1cm47Y2FzZSA1OnRoaXMuYT1udWxsO3JldHVybn1maCh0aGlzLGUtSm4oKElpKCksZjUpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgbmgpLHRoaXMuaykuY2soKTpmNSxlKSl9LEYoeHMsIlNpbXBsZUFueVR5cGVJbXBsIiw2NjgpLEQoNjY5LDUwNix7MTA1OjEsOTI6MSw5MDoxLDU2OjEsNDk6MSw5NzoxLDIwMjM6MSw2Njk6MX0scXF0KSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiByPyghdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSx0aGlzLmEpOighdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSx0aGlzLmEuYik7Y2FzZSAxOnJldHVybiByPyghdGhpcy5iJiYodGhpcy5iPW5ldyBfbCgoZG4oKSxRYSksY2MsdGhpcywxKSksdGhpcy5iKTooIXRoaXMuYiYmKHRoaXMuYj1uZXcgX2woKGRuKCksUWEpLGNjLHRoaXMsMSkpLHdEKHRoaXMuYikpO2Nhc2UgMjpyZXR1cm4gcj8oIXRoaXMuYyYmKHRoaXMuYz1uZXcgX2woKGRuKCksUWEpLGNjLHRoaXMsMikpLHRoaXMuYyk6KCF0aGlzLmMmJih0aGlzLmM9bmV3IF9sKChkbigpLFFhKSxjYyx0aGlzLDIpKSx3RCh0aGlzLmMpKTtjYXNlIDM6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgc3ModGhpcywwKSksQmModGhpcy5hLChJaSgpLG1QKSk7Y2FzZSA0OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IHNzKHRoaXMsMCkpLEJjKHRoaXMuYSwoSWkoKSx5UCkpO2Nhc2UgNTpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSxCYyh0aGlzLmEsKElpKCksaEEpKTtjYXNlIDY6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgc3ModGhpcywwKSksQmModGhpcy5hLChJaSgpLGZBKSl9cmV0dXJuIHVoKHRoaXMsZS1KbigoSWkoKSxXdikpLHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBuaCksdGhpcy5rKS5jaygpOld2LGUpLG4scil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgc3ModGhpcywwKSksRUkodGhpcy5hLGUscik7Y2FzZSAxOnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IF9sKChkbigpLFFhKSxjYyx0aGlzLDEpKSxPaih0aGlzLmIsZSxyKTtjYXNlIDI6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgX2woKGRuKCksUWEpLGNjLHRoaXMsMikpLE9qKHRoaXMuYyxlLHIpO2Nhc2UgNTpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSxXV3QoQmModGhpcy5hLChJaSgpLGhBKSksZSxyKX1yZXR1cm4gcz11KHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBuaCksdGhpcy5rKS5jaygpOihJaSgpLFd2KSxuKSw2Nikscy5OaigpLlJqKHRoaXMsJG10KHRoaXMpLG4tSm4oKElpKCksV3YpKSxlLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wO2Nhc2UgMTpyZXR1cm4hIXRoaXMuYiYmdGhpcy5iLmYhPTA7Y2FzZSAyOnJldHVybiEhdGhpcy5jJiZ0aGlzLmMuZiE9MDtjYXNlIDM6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgc3ModGhpcywwKSksIWhqKEJjKHRoaXMuYSwoSWkoKSxtUCkpKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgc3ModGhpcywwKSksIWhqKEJjKHRoaXMuYSwoSWkoKSx5UCkpKTtjYXNlIDU6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgc3ModGhpcywwKSksIWhqKEJjKHRoaXMuYSwoSWkoKSxoQSkpKTtjYXNlIDY6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgc3ModGhpcywwKSksIWhqKEJjKHRoaXMuYSwoSWkoKSxmQSkpKX1yZXR1cm4gb2godGhpcyxlLUpuKChJaSgpLFd2KSkseW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IG5oKSx0aGlzLmspLmNrKCk6V3YsZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSxuRCh0aGlzLmEsbik7cmV0dXJuO2Nhc2UgMTohdGhpcy5iJiYodGhpcy5iPW5ldyBfbCgoZG4oKSxRYSksY2MsdGhpcywxKSkseHoodGhpcy5iLG4pO3JldHVybjtjYXNlIDI6IXRoaXMuYyYmKHRoaXMuYz1uZXcgX2woKGRuKCksUWEpLGNjLHRoaXMsMikpLHh6KHRoaXMuYyxuKTtyZXR1cm47Y2FzZSAzOiF0aGlzLmEmJih0aGlzLmE9bmV3IHNzKHRoaXMsMCkpLFR4KEJjKHRoaXMuYSwoSWkoKSxtUCkpKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSxnOShCYyh0aGlzLmEsbVApLHUobiwxNCkpO3JldHVybjtjYXNlIDQ6IXRoaXMuYSYmKHRoaXMuYT1uZXcgc3ModGhpcywwKSksVHgoQmModGhpcy5hLChJaSgpLHlQKSkpLCF0aGlzLmEmJih0aGlzLmE9bmV3IHNzKHRoaXMsMCkpLGc5KEJjKHRoaXMuYSx5UCksdShuLDE0KSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSxUeChCYyh0aGlzLmEsKElpKCksaEEpKSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgc3ModGhpcywwKSksZzkoQmModGhpcy5hLGhBKSx1KG4sMTQpKTtyZXR1cm47Y2FzZSA2OiF0aGlzLmEmJih0aGlzLmE9bmV3IHNzKHRoaXMsMCkpLFR4KEJjKHRoaXMuYSwoSWkoKSxmQSkpKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSxnOShCYyh0aGlzLmEsZkEpLHUobiwxNCkpO3JldHVybn1naCh0aGlzLGUtSm4oKElpKCksV3YpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgbmgpLHRoaXMuaykuY2soKTpXdixlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBJaSgpLFd2fSxsLkJoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuYSYmKHRoaXMuYT1uZXcgc3ModGhpcywwKSkseHIodGhpcy5hKTtyZXR1cm47Y2FzZSAxOiF0aGlzLmImJih0aGlzLmI9bmV3IF9sKChkbigpLFFhKSxjYyx0aGlzLDEpKSx0aGlzLmIuYy4kYigpO3JldHVybjtjYXNlIDI6IXRoaXMuYyYmKHRoaXMuYz1uZXcgX2woKGRuKCksUWEpLGNjLHRoaXMsMikpLHRoaXMuYy5jLiRiKCk7cmV0dXJuO2Nhc2UgMzohdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSxUeChCYyh0aGlzLmEsKElpKCksbVApKSk7cmV0dXJuO2Nhc2UgNDohdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSxUeChCYyh0aGlzLmEsKElpKCkseVApKSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSxUeChCYyh0aGlzLmEsKElpKCksaEEpKSk7cmV0dXJuO2Nhc2UgNjohdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSxUeChCYyh0aGlzLmEsKElpKCksZkEpKSk7cmV0dXJufWZoKHRoaXMsZS1KbigoSWkoKSxXdikpLHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBuaCksdGhpcy5rKS5jaygpOld2LGUpKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLmomND9tZih0aGlzKTooZT1uZXcgX2gobWYodGhpcykpLGUuYSs9IiAobWl4ZWQ6ICIsbDkoZSx0aGlzLmEpLGUuYSs9IikiLGUuYSl9LEYoeHMsIlhNTFR5cGVEb2N1bWVudFJvb3RJbXBsIiw2NjkpLEQoMTkxOSw3MDQsezEwNToxLDkyOjEsOTA6MSw0NzE6MSwxNDc6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxNTA6MSwxMTQ6MSwxMTU6MSwyMDI0OjF9LF9tKSxsLkloPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUueWooKSl7Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDE2OmNhc2UgMjI6Y2FzZSAyMzpjYXNlIDI0OmNhc2UgMjU6Y2FzZSAyNjpjYXNlIDMyOmNhc2UgMzM6Y2FzZSAzNDpjYXNlIDM2OmNhc2UgMzc6Y2FzZSA0NDpjYXNlIDQ1OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUzOmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OmNhc2UgNTg6Y2FzZSA2MDpjYXNlIDYxOmNhc2UgNDpyZXR1cm4gbj09bnVsbD9udWxsOiRvKG4pO2Nhc2UgMTk6Y2FzZSAyODpjYXNlIDI5OmNhc2UgMzU6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDE6Y2FzZSA0NjpjYXNlIDUyOmNhc2UgNTQ6Y2FzZSA1OnJldHVybiBCcihuKTtjYXNlIDY6cmV0dXJuIGJaZSh1KG4sMTkwKSk7Y2FzZSAxMjpjYXNlIDQ3OmNhc2UgNDk6Y2FzZSAxMTpyZXR1cm4gYmhlKHRoaXMsZSxuKTtjYXNlIDEzOnJldHVybiBuPT1udWxsP251bGw6cjNuKHUobiwyNDApKTtjYXNlIDE1OmNhc2UgMTQ6cmV0dXJuIG49PW51bGw/bnVsbDpkbm4oWHQoeWUobikpKTtjYXNlIDE3OnJldHVybiBtYWUoKElpKCksbikpO2Nhc2UgMTg6cmV0dXJuIG1hZShuKTtjYXNlIDIxOmNhc2UgMjA6cmV0dXJuIG49PW51bGw/bnVsbDpnbm4odShuLDE1NSkuYSk7Y2FzZSAyNzpyZXR1cm4gd1plKHUobiwxOTApKTtjYXNlIDMwOnJldHVybiBGc2UoKElpKCksdShuLDE1KSkpO2Nhc2UgMzE6cmV0dXJuIEZzZSh1KG4sMTUpKTtjYXNlIDQwOnJldHVybiBtWmUoKElpKCksbikpO2Nhc2UgNDI6cmV0dXJuIHlhZSgoSWkoKSxuKSk7Y2FzZSA0MzpyZXR1cm4geWFlKG4pO2Nhc2UgNTk6Y2FzZSA0ODpyZXR1cm4gdlplKChJaSgpLG4pKTtkZWZhdWx0OnRocm93IGl0KG5ldyBGbihRRStlLm5lKCkrQ3YpKX19LGwuSmg9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saDtzd2l0Y2goZS5HPT0tMSYmKGUuRz0ocj1SbChlKSxyP0hnKHIuTWgoKSxlKTotMSkpLGUuRyl7Y2FzZSAwOnJldHVybiBuPW5ldyBXcHQsbjtjYXNlIDE6cmV0dXJuIHM9bmV3IEFCLHM7Y2FzZSAyOnJldHVybiBvPW5ldyBIcXQsbztjYXNlIDM6cmV0dXJuIGg9bmV3IHFxdCxoO2RlZmF1bHQ6dGhyb3cgaXQobmV3IEZuKEtjdCtlLnpiK0N2KSl9fSxsLktoPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQ7c3dpdGNoKGUueWooKSl7Y2FzZSA1OmNhc2UgNTI6Y2FzZSA0OnJldHVybiBuO2Nhc2UgNjpyZXR1cm4gT2ZuKG4pO2Nhc2UgODpjYXNlIDc6cmV0dXJuIG49PW51bGw/bnVsbDp5MG4obik7Y2FzZSA5OnJldHVybiBuPT1udWxsP251bGw6QUQocWwoKHM9JGMobiwhMCkscy5sZW5ndGg+MCYmKFJyKDAscy5sZW5ndGgpLHMuY2hhckNvZGVBdCgwKT09NDMpP3Muc3Vic3RyKDEpOnMpLC0xMjgsMTI3KTw8MjQ+PjI0KTtjYXNlIDEwOnJldHVybiBuPT1udWxsP251bGw6QUQocWwoKG89JGMobiwhMCksby5sZW5ndGg+MCYmKFJyKDAsby5sZW5ndGgpLG8uY2hhckNvZGVBdCgwKT09NDMpP28uc3Vic3RyKDEpOm8pLC0xMjgsMTI3KTw8MjQ+PjI0KTtjYXNlIDExOnJldHVybiBCcih2dih0aGlzLChJaSgpLEk1ZSksbikpO2Nhc2UgMTI6cmV0dXJuIEJyKHZ2KHRoaXMsKElpKCksTzVlKSxuKSk7Y2FzZSAxMzpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBnYnQoJGMobiwhMCkpO2Nhc2UgMTU6Y2FzZSAxNDpyZXR1cm4gejJuKG4pO2Nhc2UgMTY6cmV0dXJuIEJyKHZ2KHRoaXMsKElpKCksUDVlKSxuKSk7Y2FzZSAxNzpyZXR1cm4gemllKChJaSgpLG4pKTtjYXNlIDE4OnJldHVybiB6aWUobik7Y2FzZSAyODpjYXNlIDI5OmNhc2UgMzU6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDE6Y2FzZSA1NDpjYXNlIDE5OnJldHVybiAkYyhuLCEwKTtjYXNlIDIxOmNhc2UgMjA6cmV0dXJuIFgybihuKTtjYXNlIDIyOnJldHVybiBCcih2dih0aGlzLChJaSgpLEY1ZSksbikpO2Nhc2UgMjM6cmV0dXJuIEJyKHZ2KHRoaXMsKElpKCksTjVlKSxuKSk7Y2FzZSAyNDpyZXR1cm4gQnIodnYodGhpcywoSWkoKSxCNWUpLG4pKTtjYXNlIDI1OnJldHVybiBCcih2dih0aGlzLChJaSgpLFI1ZSksbikpO2Nhc2UgMjY6cmV0dXJuIEJyKHZ2KHRoaXMsKElpKCksajVlKSxuKSk7Y2FzZSAyNzpyZXR1cm4gQWZuKG4pO2Nhc2UgMzA6cmV0dXJuIHFpZSgoSWkoKSxuKSk7Y2FzZSAzMTpyZXR1cm4gcWllKG4pO2Nhc2UgMzI6cmV0dXJuIG49PW51bGw/bnVsbDpwZShxbCgoTT0kYyhuLCEwKSxNLmxlbmd0aD4wJiYoUnIoMCxNLmxlbmd0aCksTS5jaGFyQ29kZUF0KDApPT00Myk/TS5zdWJzdHIoMSk6TSksU2Esd2kpKTtjYXNlIDMzOnJldHVybiBuPT1udWxsP251bGw6bmV3IFJwKChqPSRjKG4sITApLGoubGVuZ3RoPjAmJihScigwLGoubGVuZ3RoKSxqLmNoYXJDb2RlQXQoMCk9PTQzKT9qLnN1YnN0cigxKTpqKSk7Y2FzZSAzNDpyZXR1cm4gbj09bnVsbD9udWxsOnBlKHFsKChIPSRjKG4sITApLEgubGVuZ3RoPjAmJihScigwLEgubGVuZ3RoKSxILmNoYXJDb2RlQXQoMCk9PTQzKT9ILnN1YnN0cigxKTpIKSxTYSx3aSkpO2Nhc2UgMzY6cmV0dXJuIG49PW51bGw/bnVsbDp2MihScSgoRz0kYyhuLCEwKSxHLmxlbmd0aD4wJiYoUnIoMCxHLmxlbmd0aCksRy5jaGFyQ29kZUF0KDApPT00Myk/Ry5zdWJzdHIoMSk6RykpKTtjYXNlIDM3OnJldHVybiBuPT1udWxsP251bGw6djIoUnEoKEs9JGMobiwhMCksSy5sZW5ndGg+MCYmKFJyKDAsSy5sZW5ndGgpLEsuY2hhckNvZGVBdCgwKT09NDMpP0suc3Vic3RyKDEpOkspKSk7Y2FzZSA0MDpyZXR1cm4gVmhuKChJaSgpLG4pKTtjYXNlIDQyOnJldHVybiBIaWUoKElpKCksbikpO2Nhc2UgNDM6cmV0dXJuIEhpZShuKTtjYXNlIDQ0OnJldHVybiBuPT1udWxsP251bGw6bmV3IFJwKCh0dD0kYyhuLCEwKSx0dC5sZW5ndGg+MCYmKFJyKDAsdHQubGVuZ3RoKSx0dC5jaGFyQ29kZUF0KDApPT00Myk/dHQuc3Vic3RyKDEpOnR0KSk7Y2FzZSA0NTpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBScCgoZ3Q9JGMobiwhMCksZ3QubGVuZ3RoPjAmJihScigwLGd0Lmxlbmd0aCksZ3QuY2hhckNvZGVBdCgwKT09NDMpP2d0LnN1YnN0cigxKTpndCkpO2Nhc2UgNDY6cmV0dXJuICRjKG4sITEpO2Nhc2UgNDc6cmV0dXJuIEJyKHZ2KHRoaXMsKElpKCksJDVlKSxuKSk7Y2FzZSA1OTpjYXNlIDQ4OnJldHVybiBIaG4oKElpKCksbikpO2Nhc2UgNDk6cmV0dXJuIEJyKHZ2KHRoaXMsKElpKCksejVlKSxuKSk7Y2FzZSA1MDpyZXR1cm4gbj09bnVsbD9udWxsOnVFKHFsKChNdD0kYyhuLCEwKSxNdC5sZW5ndGg+MCYmKFJyKDAsTXQubGVuZ3RoKSxNdC5jaGFyQ29kZUF0KDApPT00Myk/TXQuc3Vic3RyKDEpOk10KSx6SCwzMjc2Nyk8PDE2Pj4xNik7Y2FzZSA1MTpyZXR1cm4gbj09bnVsbD9udWxsOnVFKHFsKChoPSRjKG4sITApLGgubGVuZ3RoPjAmJihScigwLGgubGVuZ3RoKSxoLmNoYXJDb2RlQXQoMCk9PTQzKT9oLnN1YnN0cigxKTpoKSx6SCwzMjc2Nyk8PDE2Pj4xNik7Y2FzZSA1MzpyZXR1cm4gQnIodnYodGhpcywoSWkoKSxxNWUpLG4pKTtjYXNlIDU1OnJldHVybiBuPT1udWxsP251bGw6dUUocWwoKGQ9JGMobiwhMCksZC5sZW5ndGg+MCYmKFJyKDAsZC5sZW5ndGgpLGQuY2hhckNvZGVBdCgwKT09NDMpP2Quc3Vic3RyKDEpOmQpLHpILDMyNzY3KTw8MTY+PjE2KTtjYXNlIDU2OnJldHVybiBuPT1udWxsP251bGw6dUUocWwoKHY9JGMobiwhMCksdi5sZW5ndGg+MCYmKFJyKDAsdi5sZW5ndGgpLHYuY2hhckNvZGVBdCgwKT09NDMpP3Yuc3Vic3RyKDEpOnYpLHpILDMyNzY3KTw8MTY+PjE2KTtjYXNlIDU3OnJldHVybiBuPT1udWxsP251bGw6djIoUnEoKGs9JGMobiwhMCksay5sZW5ndGg+MCYmKFJyKDAsay5sZW5ndGgpLGsuY2hhckNvZGVBdCgwKT09NDMpP2suc3Vic3RyKDEpOmspKSk7Y2FzZSA1ODpyZXR1cm4gbj09bnVsbD9udWxsOnYyKFJxKChDPSRjKG4sITApLEMubGVuZ3RoPjAmJihScigwLEMubGVuZ3RoKSxDLmNoYXJDb2RlQXQoMCk9PTQzKT9DLnN1YnN0cigxKTpDKSkpO2Nhc2UgNjA6cmV0dXJuIG49PW51bGw/bnVsbDpwZShxbCgocj0kYyhuLCEwKSxyLmxlbmd0aD4wJiYoUnIoMCxyLmxlbmd0aCksci5jaGFyQ29kZUF0KDApPT00Myk/ci5zdWJzdHIoMSk6ciksU2Esd2kpKTtjYXNlIDYxOnJldHVybiBuPT1udWxsP251bGw6cGUocWwoJGMobiwhMCksU2Esd2kpKTtkZWZhdWx0OnRocm93IGl0KG5ldyBGbihRRStlLm5lKCkrQ3YpKX19O3ZhciBWNWUsVEx0LEc1ZSxDTHQ7Rih4cywiWE1MVHlwZUZhY3RvcnlJbXBsIiwxOTE5KSxEKDU4NiwxNzksezEwNToxLDkyOjEsOTA6MSwxNDc6MSwxOTE6MSw1NjoxLDIzNToxLDEwODoxLDQ5OjEsOTc6MSwxNTA6MSwxNzk6MSwxMTQ6MSwxMTU6MSw2NzU6MSwxOTQ1OjEsNTg2OjF9LEFYdCksbC5OPSExLGwuTz0hMTt2YXIgVTVlPSExO0YoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbCIsNTg2KSxEKDE4NTIsMSx7ODM3OjF9LGh4KSxsLl9qPWZ1bmN0aW9uKCl7cmV0dXJuIG94dCgpLGV4ZX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzEiLDE4NTIpLEQoMTg2MSwxLHNpLGQxKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiByYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoQWUsZWUsMixlLDYsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8xMCIsMTg2MSksRCgxODYyLDEsc2ksTEIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChBZSxlZSwyLGUsNiwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzExIiwxODYyKSxEKDE4NjMsMSxzaSxNQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMTIiLDE4NjMpLEQoMTg2NCwxLHNpLERCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBCbShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQobGEsZWUsMzMzLGUsNywxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzEzIiwxODY0KSxEKDE4NjUsMSxzaSxJQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMTQiLDE4NjUpLEQoMTg2NiwxLHNpLE9CKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE1KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQod2gsVHksMTUsZSwwLDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMTUiLDE4NjYpLEQoMTg2NywxLHNpLFBCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE1KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQod2gsVHksMTUsZSwwLDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMTYiLDE4NjcpLEQoMTg2OCwxLHNpLCRmKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiByYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoQWUsZWUsMixlLDYsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8xNyIsMTg2OCksRCgxODY5LDEsc2ksZHUpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTU1KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoaTcsZWUsMTU1LGUsMCwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzE4IiwxODY5KSxEKDE4NzAsMSxzaSxBSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMTkiLDE4NzApLEQoMTg1MywxLHNpLExKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDg0Myl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KHdQLERlLDg0MyxlLDAsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8yIiwxODUzKSxEKDE4NzEsMSxzaSxNSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMjAiLDE4NzEpLEQoMTg3MiwxLHNpLGd1KSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiByYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoQWUsZWUsMixlLDYsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8yMSIsMTg3MiksRCgxODczLDEsc2ksY0MpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChBZSxlZSwyLGUsNiwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzIyIiwxODczKSxEKDE4NzQsMSxzaSxGQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMjMiLDE4NzQpLEQoMTg3NSwxLHNpLE5CKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE5MCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEd1LGVlLDE5MCxlLDAsMil9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8yNCIsMTg3NSksRCgxODc2LDEsc2ksZngpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChBZSxlZSwyLGUsNiwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzI1IiwxODc2KSxEKDE4NzcsMSxzaSxESiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMjYiLDE4NzcpLEQoMTg3OCwxLHNpLCRrKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE1KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQod2gsVHksMTUsZSwwLDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMjciLDE4NzgpLEQoMTg3OSwxLHNpLElKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE1KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQod2gsVHksMTUsZSwwLDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMjgiLDE4NzkpLEQoMTg4MCwxLHNpLEJCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiByYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoQWUsZWUsMixlLDYsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8yOSIsMTg4MCksRCgxODU0LDEsc2ksT0opLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsNjY3KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQobVUsRGUsMjAyMSxlLDAsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8zIiwxODU0KSxEKDE4ODEsMSxzaSxQSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxOSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGphLGVlLDE5LGUsMCwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzMwIiwxODgxKSxEKDE4ODIsMSxzaSx1QyksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMzEiLDE4ODIpLEQoMTg4MywxLHNpLFJCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE2Mil9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KFN2LGVlLDE2MixlLDAsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8zMiIsMTg4MyksRCgxODg0LDEsc2ksVUwpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChBZSxlZSwyLGUsNiwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzMzIiwxODg0KSxEKDE4ODUsMSxzaSxsQyksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMzQiLDE4ODUpLEQoMTg4NiwxLHNpLEZKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiByYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoQWUsZWUsMixlLDYsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8zNSIsMTg4NiksRCgxODg3LDEsc2ksTkopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChBZSxlZSwyLGUsNiwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzM2IiwxODg3KSxEKDE4ODgsMSxzaSxXTCksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxNSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KHdoLFR5LDE1LGUsMCwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzM3IiwxODg4KSxEKDE4ODksMSxzaSxoQyksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxNSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KHdoLFR5LDE1LGUsMCwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzM4IiwxODg5KSxEKDE4OTAsMSxzaSxnMSksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMzkiLDE4OTApLEQoMTg1NSwxLHNpLHprKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDY2OCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KHZQLERlLDIwMjIsZSwwLDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvNCIsMTg1NSksRCgxODkxLDEsc2ksQkopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChBZSxlZSwyLGUsNiwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzQwIiwxODkxKSxEKDE4OTIsMSxzaSxxayksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvNDEiLDE4OTIpLEQoMTg5MywxLHNpLFlMKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiByYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoQWUsZWUsMixlLDYsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC80MiIsMTg5MyksRCgxODk0LDEsc2ksV2IpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChBZSxlZSwyLGUsNiwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzQzIiwxODk0KSxEKDE4OTUsMSxzaSxmQyksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvNDQiLDE4OTUpLEQoMTg5NiwxLHNpLEtMKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE4NCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEF2LGVlLDE4NCxlLDAsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC80NSIsMTg5NiksRCgxODk3LDEsc2ksemYpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChBZSxlZSwyLGUsNiwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzQ2IiwxODk3KSxEKDE4OTgsMSxzaSxkQyksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvNDciLDE4OTgpLEQoMTg5OSwxLHNpLHAxKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiByYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoQWUsZWUsMixlLDYsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC80OCIsMTg5OSksRChhYiwxLHNpLGIxKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE4NCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEF2LGVlLDE4NCxlLDAsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC80OSIsYWIpLEQoMTg1NiwxLHNpLFJKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDY2OSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGtMdCxEZSwyMDIzLGUsMCwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzUiLDE4NTYpLEQoMTkwMSwxLHNpLGpKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE2Mil9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KFN2LGVlLDE2MixlLDAsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC81MCIsMTkwMSksRCgxOTAyLDEsc2ksTTMpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChBZSxlZSwyLGUsNiwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzUxIiwxOTAyKSxEKDE5MDMsMSxzaSxIayksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxOSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGphLGVlLDE5LGUsMCwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzUyIiwxOTAzKSxEKDE4NTcsMSxzaSxWayksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvNiIsMTg1NyksRCgxODU4LDEsc2ksZ0MpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTkwKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoR3UsZWUsMTkwLGUsMCwyKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzciLDE4NTgpLEQoMTg1OSwxLHNpLCRKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBObShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoUnMsZWUsNDc2LGUsOCwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzgiLDE4NTkpLEQoMTg2MCwxLHNpLGR4KSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDIxNyl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KE02LGVlLDIxNyxlLDAsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC85IiwxODYwKTt2YXIgWTEsbHAsZEEseVUsd3Q7RCg1MCw2MCxRMCxOciksRihaZywiUmVnRXgvUGFyc2VFeGNlcHRpb24iLDUwKSxEKDgyMCwxLHt9LFhMKSxsLnNsPWZ1bmN0aW9uKGUpe3JldHVybiBlPHRoaXMuaiYmd2EodGhpcy5pLGUpPT02M30sbC50bD1mdW5jdGlvbigpe3ZhciBlLG4scixzLG87aWYodGhpcy5jIT0xMCl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksT0gpKSkpO3N3aXRjaChlPXRoaXMuYSxlKXtjYXNlIDEwMTplPTI3O2JyZWFrO2Nhc2UgMTAyOmU9MTI7YnJlYWs7Y2FzZSAxMTA6ZT0xMDticmVhaztjYXNlIDExNDplPTEzO2JyZWFrO2Nhc2UgMTE2OmU9OTticmVhaztjYXNlIDEyMDppZihmaSh0aGlzKSx0aGlzLmMhPTApdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLFFnKSkpKTtpZih0aGlzLmE9PTEyMyl7bz0wLHI9MDtkb3tpZihmaSh0aGlzKSx0aGlzLmMhPTApdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLFFnKSkpKTtpZigobz15Mih0aGlzLmEpKTwwKWJyZWFrO2lmKHI+cioxNil0aHJvdyBpdChuZXcgTnIocXIoKFByKCksZzBlKSkpKTtyPXIqMTYrb313aGlsZSghMCk7aWYodGhpcy5hIT0xMjUpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLHAwZSkpKSk7aWYocj5lNyl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksYjBlKSkpKTtlPXJ9ZWxzZXtpZihvPTAsdGhpcy5jIT0wfHwobz15Mih0aGlzLmEpKTwwKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxRZykpKSk7aWYocj1vLGZpKHRoaXMpLHRoaXMuYyE9MHx8KG89eTIodGhpcy5hKSk8MCl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksUWcpKSkpO3I9cioxNitvLGU9cn1icmVhaztjYXNlIDExNzppZihzPTAsZmkodGhpcyksdGhpcy5jIT0wfHwocz15Mih0aGlzLmEpKTwwKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxRZykpKSk7aWYobj1zLGZpKHRoaXMpLHRoaXMuYyE9MHx8KHM9eTIodGhpcy5hKSk8MCl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksUWcpKSkpO2lmKG49bioxNitzLGZpKHRoaXMpLHRoaXMuYyE9MHx8KHM9eTIodGhpcy5hKSk8MCl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksUWcpKSkpO2lmKG49bioxNitzLGZpKHRoaXMpLHRoaXMuYyE9MHx8KHM9eTIodGhpcy5hKSk8MCl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksUWcpKSkpO249bioxNitzLGU9bjticmVhaztjYXNlIDExODppZihmaSh0aGlzKSx0aGlzLmMhPTB8fChzPXkyKHRoaXMuYSkpPDApdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLFFnKSkpKTtpZihuPXMsZmkodGhpcyksdGhpcy5jIT0wfHwocz15Mih0aGlzLmEpKTwwKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxRZykpKSk7aWYobj1uKjE2K3MsZmkodGhpcyksdGhpcy5jIT0wfHwocz15Mih0aGlzLmEpKTwwKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxRZykpKSk7aWYobj1uKjE2K3MsZmkodGhpcyksdGhpcy5jIT0wfHwocz15Mih0aGlzLmEpKTwwKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxRZykpKSk7aWYobj1uKjE2K3MsZmkodGhpcyksdGhpcy5jIT0wfHwocz15Mih0aGlzLmEpKTwwKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxRZykpKSk7aWYobj1uKjE2K3MsZmkodGhpcyksdGhpcy5jIT0wfHwocz15Mih0aGlzLmEpKTwwKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxRZykpKSk7aWYobj1uKjE2K3Msbj5lNyl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksInBhcnNlci5kZXNjYXBwZS40IikpKSk7ZT1uO2JyZWFrO2Nhc2UgNjU6Y2FzZSA5MDpjYXNlIDEyMjp0aHJvdyBpdChuZXcgTnIocXIoKFByKCksdzBlKSkpKX1yZXR1cm4gZX0sbC51bD1mdW5jdGlvbihlKXt2YXIgbixyO3N3aXRjaChlKXtjYXNlIDEwMDpyPSh0aGlzLmUmMzIpPT0zMj9pYigiTmQiLCEwKTooZ2koKSx4VSk7YnJlYWs7Y2FzZSA2ODpyPSh0aGlzLmUmMzIpPT0zMj9pYigiTmQiLCExKTooZ2koKSxETHQpO2JyZWFrO2Nhc2UgMTE5OnI9KHRoaXMuZSYzMik9PTMyP2liKCJJc1dvcmQiLCEwKTooZ2koKSxxNyk7YnJlYWs7Y2FzZSA4NzpyPSh0aGlzLmUmMzIpPT0zMj9pYigiSXNXb3JkIiwhMSk6KGdpKCksT0x0KTticmVhaztjYXNlIDExNTpyPSh0aGlzLmUmMzIpPT0zMj9pYigiSXNTcGFjZSIsITApOihnaSgpLGVrKTticmVhaztjYXNlIDgzOnI9KHRoaXMuZSYzMik9PTMyP2liKCJJc1NwYWNlIiwhMSk6KGdpKCksSUx0KTticmVhaztkZWZhdWx0OnRocm93IGl0KG5ldyBWbygobj1lLHdnZStuLnRvU3RyaW5nKDE2KSkpKX1yZXR1cm4gcn0sbC52bD1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEg7Zm9yKHRoaXMuYj0xLGZpKHRoaXMpLG49bnVsbCx0aGlzLmM9PTAmJnRoaXMuYT09OTQ/KGZpKHRoaXMpLGU/TT0oZ2koKSxnaSgpLG5ldyBObCg1KSk6KG49KGdpKCksZ2koKSxuZXcgTmwoNCkpLGpjKG4sMCxlNyksTT1uZXcgTmwoNCkpKTpNPShnaSgpLGdpKCksbmV3IE5sKDQpKSxvPSEwOyhIPXRoaXMuYykhPTEmJiEoSD09MCYmdGhpcy5hPT05MyYmIW8pOyl7aWYobz0hMSxyPXRoaXMuYSxzPSExLEg9PTEwKXN3aXRjaChyKXtjYXNlIDEwMDpjYXNlIDY4OmNhc2UgMTE5OmNhc2UgODc6Y2FzZSAxMTU6Y2FzZSA4Mzp5eShNLHRoaXMudWwocikpLHM9ITA7YnJlYWs7Y2FzZSAxMDU6Y2FzZSA3MzpjYXNlIDk5OmNhc2UgNjc6cj10aGlzLkxsKE0scikscjwwJiYocz0hMCk7YnJlYWs7Y2FzZSAxMTI6Y2FzZSA4MDppZihqPXU1dCh0aGlzLHIpLCFqKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxjdXQpKSkpO3l5KE0saikscz0hMDticmVhaztkZWZhdWx0OnI9dGhpcy50bCgpfWVsc2UgaWYoSD09MjApe2lmKGQ9djgodGhpcy5pLDU4LHRoaXMuZCksZDwwKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxPOHQpKSkpO2lmKHY9ITAsd2EodGhpcy5pLHRoaXMuZCk9PTk0JiYoKyt0aGlzLmQsdj0hMSksaD1QbCh0aGlzLmksdGhpcy5kLGQpLGs9THRlKGgsdiwodGhpcy5lJjUxMik9PTUxMiksIWspdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLHUwZSkpKSk7aWYoeXkoTSxrKSxzPSEwLGQrMT49dGhpcy5qfHx3YSh0aGlzLmksZCsxKSE9OTMpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLE84dCkpKSk7dGhpcy5kPWQrMn1pZihmaSh0aGlzKSwhcylpZih0aGlzLmMhPTB8fHRoaXMuYSE9NDUpamMoTSxyLHIpO2Vsc2V7aWYoZmkodGhpcyksKEg9dGhpcy5jKT09MSl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksUEgpKSkpO0g9PTAmJnRoaXMuYT09OTM/KGpjKE0scixyKSxqYyhNLDQ1LDQ1KSk6KEM9dGhpcy5hLEg9PTEwJiYoQz10aGlzLnRsKCkpLGZpKHRoaXMpLGpjKE0scixDKSl9KHRoaXMuZSZ4Zik9PXhmJiZ0aGlzLmM9PTAmJnRoaXMuYT09NDQmJmZpKHRoaXMpfWlmKHRoaXMuYz09MSl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksUEgpKSkpO3JldHVybiBuJiYoTF8obixNKSxNPW4pLHY0KE0pLFNfKE0pLHRoaXMuYj0wLGZpKHRoaXMpLE19LGwud2w9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscztmb3Iocj10aGlzLnZsKCExKTsocz10aGlzLmMpIT03OylpZihlPXRoaXMuYSxzPT0wJiYoZT09NDV8fGU9PTM4KXx8cz09NCl7aWYoZmkodGhpcyksdGhpcy5jIT05KXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxoMGUpKSkpO2lmKG49dGhpcy52bCghMSkscz09NCl5eShyLG4pO2Vsc2UgaWYoZT09NDUpTF8ocixuKTtlbHNlIGlmKGU9PTM4KWxoZShyLG4pO2Vsc2UgdGhyb3cgaXQobmV3IFZvKCJBU1NFUlQiKSl9ZWxzZSB0aHJvdyBpdChuZXcgTnIocXIoKFByKCksZjBlKSkpKTtyZXR1cm4gZmkodGhpcykscn0sbC54bD1mdW5jdGlvbigpe3ZhciBlLG47cmV0dXJuIGU9dGhpcy5hLTQ4LG49KGdpKCksZ2koKSxuZXcga3J0KDEyLG51bGwsZSkpLCF0aGlzLmcmJih0aGlzLmc9bmV3IEVSKSxrUih0aGlzLmcsbmV3IFNwdChlKSksZmkodGhpcyksbn0sbC55bD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzKSxnaSgpLEs1ZX0sbC56bD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzKSxnaSgpLFk1ZX0sbC5BbD1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBOcihxcigoUHIoKSxiaCkpKSl9LGwuQmw9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgTnIocXIoKFByKCksYmgpKSkpfSxsLkNsPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLEd1bigpfSxsLkRsPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLGdpKCksUTVlfSxsLkVsPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLGdpKCksSjVlfSxsLkZsPWZ1bmN0aW9uKCl7dmFyIGU7aWYodGhpcy5kPj10aGlzLmp8fCgoZT13YSh0aGlzLmksdGhpcy5kKyspKSY2NTUwNCkhPTY0KXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxhMGUpKSkpO3JldHVybiBmaSh0aGlzKSxnaSgpLGdpKCksbmV3IFlkKDAsZS02NCl9LGwuR2w9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyksQXluKCl9LGwuSGw9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyksZ2koKSx0eGV9LGwuSWw9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT0oZ2koKSxnaSgpLG5ldyBZZCgwLDEwNSkpLGZpKHRoaXMpLGV9LGwuSmw9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyksZ2koKSxaNWV9LGwuS2w9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyksZ2koKSxYNWV9LGwuTGw9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy50bCgpfSxsLk1sPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLGdpKCksTEx0fSxsLk5sPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbztpZih0aGlzLmQrMT49dGhpcy5qKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxyMGUpKSkpO2lmKHM9LTEsbj1udWxsLGU9d2EodGhpcy5pLHRoaXMuZCksNDk8PWUmJmU8PTU3KXtpZihzPWUtNDgsIXRoaXMuZyYmKHRoaXMuZz1uZXcgRVIpLGtSKHRoaXMuZyxuZXcgU3B0KHMpKSwrK3RoaXMuZCx3YSh0aGlzLmksdGhpcy5kKSE9NDEpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLEkyKSkpKTsrK3RoaXMuZH1lbHNlIHN3aXRjaChlPT02MyYmLS10aGlzLmQsZmkodGhpcyksbj1JeHQodGhpcyksbi5lKXtjYXNlIDIwOmNhc2UgMjE6Y2FzZSAyMjpjYXNlIDIzOmJyZWFrO2Nhc2UgODppZih0aGlzLmMhPTcpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLEkyKSkpKTticmVhaztkZWZhdWx0OnRocm93IGl0KG5ldyBOcihxcigoUHIoKSxpMGUpKSkpfWlmKGZpKHRoaXMpLG89Y3YodGhpcykscj1udWxsLG8uZT09Mil7aWYoby5lbSgpIT0yKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxzMGUpKSkpO3I9by5hbSgxKSxvPW8uYW0oMCl9aWYodGhpcy5jIT03KXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxJMikpKSk7cmV0dXJuIGZpKHRoaXMpLGdpKCksZ2koKSxuZXcgb2VlKHMsbixvLHIpfSxsLk9sPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLGdpKCksTUx0fSxsLlBsPWZ1bmN0aW9uKCl7dmFyIGU7aWYoZmkodGhpcyksZT1pJCgyNCxjdih0aGlzKSksdGhpcy5jIT03KXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxJMikpKSk7cmV0dXJuIGZpKHRoaXMpLGV9LGwuUWw9ZnVuY3Rpb24oKXt2YXIgZTtpZihmaSh0aGlzKSxlPWkkKDIwLGN2KHRoaXMpKSx0aGlzLmMhPTcpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLEkyKSkpKTtyZXR1cm4gZmkodGhpcyksZX0sbC5SbD1mdW5jdGlvbigpe3ZhciBlO2lmKGZpKHRoaXMpLGU9aSQoMjIsY3YodGhpcykpLHRoaXMuYyE9Nyl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksSTIpKSkpO3JldHVybiBmaSh0aGlzKSxlfSxsLlNsPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbztmb3IoZT0wLHI9MCxuPS0xO3RoaXMuZDx0aGlzLmomJihuPXdhKHRoaXMuaSx0aGlzLmQpLG89ZzV0KG4pLG8hPTApOyllfD1vLCsrdGhpcy5kO2lmKHRoaXMuZD49dGhpcy5qKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxEOHQpKSkpO2lmKG49PTQ1KXtmb3IoKyt0aGlzLmQ7dGhpcy5kPHRoaXMuaiYmKG49d2EodGhpcy5pLHRoaXMuZCksbz1nNXQobiksbyE9MCk7KXJ8PW8sKyt0aGlzLmQ7aWYodGhpcy5kPj10aGlzLmopdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLEQ4dCkpKSl9aWYobj09NTgpe2lmKCsrdGhpcy5kLGZpKHRoaXMpLHM9Zlh0KGN2KHRoaXMpLGUsciksdGhpcy5jIT03KXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxJMikpKSk7ZmkodGhpcyl9ZWxzZSBpZihuPT00MSkrK3RoaXMuZCxmaSh0aGlzKSxzPWZYdChjdih0aGlzKSxlLHIpO2Vsc2UgdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLG4wZSkpKSk7cmV0dXJuIHN9LGwuVGw9ZnVuY3Rpb24oKXt2YXIgZTtpZihmaSh0aGlzKSxlPWkkKDIxLGN2KHRoaXMpKSx0aGlzLmMhPTcpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLEkyKSkpKTtyZXR1cm4gZmkodGhpcyksZX0sbC5VbD1mdW5jdGlvbigpe3ZhciBlO2lmKGZpKHRoaXMpLGU9aSQoMjMsY3YodGhpcykpLHRoaXMuYyE9Nyl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksSTIpKSkpO3JldHVybiBmaSh0aGlzKSxlfSxsLlZsPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZihmaSh0aGlzKSxlPXRoaXMuZisrLG49S250KGN2KHRoaXMpLGUpLHRoaXMuYyE9Nyl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksSTIpKSkpO3JldHVybiBmaSh0aGlzKSxufSxsLldsPWZ1bmN0aW9uKCl7dmFyIGU7aWYoZmkodGhpcyksZT1LbnQoY3YodGhpcyksMCksdGhpcy5jIT03KXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxJMikpKSk7cmV0dXJuIGZpKHRoaXMpLGV9LGwuWGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGZpKHRoaXMpLHRoaXMuYz09NT8oZmkodGhpcyksWWooZSwoZ2koKSxnaSgpLG5ldyBYbSg5LGUpKSkpOllqKGUsKGdpKCksZ2koKSxuZXcgWG0oMyxlKSkpfSxsLllsPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBmaSh0aGlzKSxuPShnaSgpLGdpKCksbmV3IGQ5KDIpKSx0aGlzLmM9PTU/KGZpKHRoaXMpLEUyKG4scEEpLEUyKG4sZSkpOihFMihuLGUpLEUyKG4scEEpKSxufSxsLlpsPWZ1bmN0aW9uKGUpe3JldHVybiBmaSh0aGlzKSx0aGlzLmM9PTU/KGZpKHRoaXMpLGdpKCksZ2koKSxuZXcgWG0oOSxlKSk6KGdpKCksZ2koKSxuZXcgWG0oMyxlKSl9LGwuYT0wLGwuYj0wLGwuYz0wLGwuZD0wLGwuZT0wLGwuZj0xLGwuZz1udWxsLGwuaj0wLEYoWmcsIlJlZ0V4L1JlZ2V4UGFyc2VyIiw4MjApLEQoMTgyNCw4MjAse30sVnF0KSxsLnNsPWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLnRsPWZ1bmN0aW9uKCl7cmV0dXJuIEg1dCh0aGlzKX0sbC51bD1mdW5jdGlvbihlKXtyZXR1cm4gTUUoZSl9LGwudmw9ZnVuY3Rpb24oZSl7cmV0dXJuIG5mZSh0aGlzKX0sbC53bD1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBOcihxcigoUHIoKSxiaCkpKSl9LGwueGw9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgTnIocXIoKFByKCksYmgpKSkpfSxsLnlsPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE5yKHFyKChQcigpLGJoKSkpKX0sbC56bD1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBOcihxcigoUHIoKSxiaCkpKSl9LGwuQWw9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyksTUUoNjcpfSxsLkJsPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLE1FKDczKX0sbC5DbD1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBOcihxcigoUHIoKSxiaCkpKSl9LGwuRGw9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgTnIocXIoKFByKCksYmgpKSkpfSxsLkVsPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE5yKHFyKChQcigpLGJoKSkpKX0sbC5GbD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzKSxNRSg5OSl9LGwuR2w9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgTnIocXIoKFByKCksYmgpKSkpfSxsLkhsPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE5yKHFyKChQcigpLGJoKSkpKX0sbC5JbD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzKSxNRSgxMDUpfSxsLkpsPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE5yKHFyKChQcigpLGJoKSkpKX0sbC5LbD1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBOcihxcigoUHIoKSxiaCkpKSl9LGwuTGw9ZnVuY3Rpb24oZSxuKXtyZXR1cm4geXkoZSxNRShuKSksLTF9LGwuTWw9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyksZ2koKSxnaSgpLG5ldyBZZCgwLDk0KX0sbC5ObD1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBOcihxcigoUHIoKSxiaCkpKSl9LGwuT2w9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyksZ2koKSxnaSgpLG5ldyBZZCgwLDM2KX0sbC5QbD1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBOcihxcigoUHIoKSxiaCkpKSl9LGwuUWw9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgTnIocXIoKFByKCksYmgpKSkpfSxsLlJsPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE5yKHFyKChQcigpLGJoKSkpKX0sbC5TbD1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBOcihxcigoUHIoKSxiaCkpKSl9LGwuVGw9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgTnIocXIoKFByKCksYmgpKSkpfSxsLlVsPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE5yKHFyKChQcigpLGJoKSkpKX0sbC5WbD1mdW5jdGlvbigpe3ZhciBlO2lmKGZpKHRoaXMpLGU9S250KGN2KHRoaXMpLDApLHRoaXMuYyE9Nyl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksSTIpKSkpO3JldHVybiBmaSh0aGlzKSxlfSxsLldsPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE5yKHFyKChQcigpLGJoKSkpKX0sbC5YbD1mdW5jdGlvbihlKXtyZXR1cm4gZmkodGhpcyksWWooZSwoZ2koKSxnaSgpLG5ldyBYbSgzLGUpKSl9LGwuWWw9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIGZpKHRoaXMpLG49KGdpKCksZ2koKSxuZXcgZDkoMikpLEUyKG4sZSksRTIobixwQSksbn0sbC5abD1mdW5jdGlvbihlKXtyZXR1cm4gZmkodGhpcyksZ2koKSxnaSgpLG5ldyBYbSgzLGUpfTt2YXIgZDU9bnVsbCwkNz1udWxsO0YoWmcsIlJlZ0V4L1BhcnNlckZvclhNTFNjaGVtYSIsMTgyNCksRCgxMTcsMSxuNyx5dyksbC4kbD1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgVm8oIk5vdCBzdXBwb3J0ZWQuIikpfSxsLl9sPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGwuYW09ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGx9LGwuYm09ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5jbT1mdW5jdGlvbihlKXt9LGwuZG09ZnVuY3Rpb24oZSl7fSxsLmVtPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mbSgwKX0sbC5mbT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lPT0xMT8iLiI6IiJ9LGwuZT0wO3ZhciBfTHQsejcsZ0EsVzVlLFNMdCxzMz1udWxsLHhVLEhmdD1udWxsLEFMdCxwQSxWZnQ9bnVsbCxMTHQsTUx0LERMdCxJTHQsT0x0LFk1ZSxlayxLNWUsWDVlLFE1ZSxaNWUscTcsSjVlLHR4ZSxrNm49RihaZywiUmVnRXgvVG9rZW4iLDExNyk7RCgxMzYsMTE3LHszOjEsMTM2OjEsMTE3OjF9LE5sKSxsLmZtPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztpZih0aGlzLmU9PTQpaWYodGhpcz09QUx0KXI9Ii4iO2Vsc2UgaWYodGhpcz09eFUpcj0iXFxkIjtlbHNlIGlmKHRoaXM9PXE3KXI9IlxcdyI7ZWxzZSBpZih0aGlzPT1laylyPSJcXHMiO2Vsc2V7Zm9yKHM9bmV3IEFnLHMuYSs9IlsiLG49MDtuPHRoaXMuYi5sZW5ndGg7bis9MillJnhmJiZuPjAmJihzLmErPSIsIiksdGhpcy5iW25dPT09dGhpcy5iW24rMV0/Z28ocyxfSSh0aGlzLmJbbl0pKTooZ28ocyxfSSh0aGlzLmJbbl0pKSxzLmErPSItIixnbyhzLF9JKHRoaXMuYltuKzFdKSkpO3MuYSs9Il0iLHI9cy5hfWVsc2UgaWYodGhpcz09REx0KXI9IlxcRCI7ZWxzZSBpZih0aGlzPT1PTHQpcj0iXFxXIjtlbHNlIGlmKHRoaXM9PUlMdClyPSJcXFMiO2Vsc2V7Zm9yKHM9bmV3IEFnLHMuYSs9IlteIixuPTA7bjx0aGlzLmIubGVuZ3RoO24rPTIpZSZ4ZiYmbj4wJiYocy5hKz0iLCIpLHRoaXMuYltuXT09PXRoaXMuYltuKzFdP2dvKHMsX0kodGhpcy5iW25dKSk6KGdvKHMsX0kodGhpcy5iW25dKSkscy5hKz0iLSIsZ28ocyxfSSh0aGlzLmJbbisxXSkpKTtzLmErPSJdIixyPXMuYX1yZXR1cm4gcn0sbC5hPSExLGwuYz0hMSxGKFpnLCJSZWdFeC9SYW5nZVRva2VuIiwxMzYpLEQoNTg0LDEsezU4NDoxfSxTcHQpLGwuYT0wLEYoWmcsIlJlZ0V4L1JlZ2V4UGFyc2VyL1JlZmVyZW5jZVBvc2l0aW9uIiw1ODQpLEQoNTgzLDEsezM6MSw1ODM6MX0sZVZ0KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBlPT1udWxsfHwhX3QoZSw1ODMpPyExOihuPXUoZSw1ODMpLGhuKHRoaXMuYixuLmIpJiZ0aGlzLmE9PW4uYSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gVmcodGhpcy5iKyIvIitCNXQodGhpcy5hKSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmZtKHRoaXMuYSl9LGwuYT0wLEYoWmcsIlJlZ0V4L1JlZ3VsYXJFeHByZXNzaW9uIiw1ODMpLEQoMjIzLDExNyxuNyxZZCksbC5fbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuZm09ZnVuY3Rpb24oZSl7dmFyIG4scixzO3N3aXRjaCh0aGlzLmUpe2Nhc2UgMDpzd2l0Y2godGhpcy5hKXtjYXNlIDEyNDpjYXNlIDQyOmNhc2UgNDM6Y2FzZSA2MzpjYXNlIDQwOmNhc2UgNDE6Y2FzZSA0NjpjYXNlIDkxOmNhc2UgMTIzOmNhc2UgOTI6cz0iXFwiK2tudCh0aGlzLmEmeXMpO2JyZWFrO2Nhc2UgMTI6cz0iXFxmIjticmVhaztjYXNlIDEwOnM9IlxcbiI7YnJlYWs7Y2FzZSAxMzpzPSJcXHIiO2JyZWFrO2Nhc2UgOTpzPSJcXHQiO2JyZWFrO2Nhc2UgMjc6cz0iXFxlIjticmVhaztkZWZhdWx0OnRoaXMuYT49S2E/KHI9KG49dGhpcy5hPj4+MCwiMCIrbi50b1N0cmluZygxNikpLHM9IlxcdiIrUGwocixyLmxlbmd0aC02LHIubGVuZ3RoKSk6cz0iIitrbnQodGhpcy5hJnlzKX1icmVhaztjYXNlIDg6dGhpcz09TEx0fHx0aGlzPT1NTHQ/cz0iIitrbnQodGhpcy5hJnlzKTpzPSJcXCIra250KHRoaXMuYSZ5cyk7YnJlYWs7ZGVmYXVsdDpzPW51bGx9cmV0dXJuIHN9LGwuYT0wLEYoWmcsIlJlZ0V4L1Rva2VuL0NoYXJUb2tlbiIsMjIzKSxEKDMwOSwxMTcsbjcsWG0pLGwuYW09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYX0sbC5jbT1mdW5jdGlvbihlKXt0aGlzLmI9ZX0sbC5kbT1mdW5jdGlvbihlKXt0aGlzLmM9ZX0sbC5lbT1mdW5jdGlvbigpe3JldHVybiAxfSxsLmZtPWZ1bmN0aW9uKGUpe3ZhciBuO2lmKHRoaXMuZT09MylpZih0aGlzLmM8MCYmdGhpcy5iPDApbj10aGlzLmEuZm0oZSkrIioiO2Vsc2UgaWYodGhpcy5jPT10aGlzLmIpbj10aGlzLmEuZm0oZSkrInsiK3RoaXMuYysifSI7ZWxzZSBpZih0aGlzLmM+PTAmJnRoaXMuYj49MCluPXRoaXMuYS5mbShlKSsieyIrdGhpcy5jKyIsIit0aGlzLmIrIn0iO2Vsc2UgaWYodGhpcy5jPj0wJiZ0aGlzLmI8MCluPXRoaXMuYS5mbShlKSsieyIrdGhpcy5jKyIsfSI7ZWxzZSB0aHJvdyBpdChuZXcgVm8oIlRva2VuI3RvU3RyaW5nKCk6IENMT1NVUkUgIit0aGlzLmMrWWErdGhpcy5iKSk7ZWxzZSBpZih0aGlzLmM8MCYmdGhpcy5iPDApbj10aGlzLmEuZm0oZSkrIio/IjtlbHNlIGlmKHRoaXMuYz09dGhpcy5iKW49dGhpcy5hLmZtKGUpKyJ7Iit0aGlzLmMrIn0/IjtlbHNlIGlmKHRoaXMuYz49MCYmdGhpcy5iPj0wKW49dGhpcy5hLmZtKGUpKyJ7Iit0aGlzLmMrIiwiK3RoaXMuYisifT8iO2Vsc2UgaWYodGhpcy5jPj0wJiZ0aGlzLmI8MCluPXRoaXMuYS5mbShlKSsieyIrdGhpcy5jKyIsfT8iO2Vsc2UgdGhyb3cgaXQobmV3IFZvKCJUb2tlbiN0b1N0cmluZygpOiBOT05HUkVFRFlDTE9TVVJFICIrdGhpcy5jK1lhK3RoaXMuYikpO3JldHVybiBufSxsLmI9MCxsLmM9MCxGKFpnLCJSZWdFeC9Ub2tlbi9DbG9zdXJlVG9rZW4iLDMwOSksRCg4MjEsMTE3LG43LG12dCksbC5hbT1mdW5jdGlvbihlKXtyZXR1cm4gZT09MD90aGlzLmE6dGhpcy5ifSxsLmVtPWZ1bmN0aW9uKCl7cmV0dXJuIDJ9LGwuZm09ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIHRoaXMuYi5lPT0zJiZ0aGlzLmIuYW0oMCk9PXRoaXMuYT9uPXRoaXMuYS5mbShlKSsiKyI6dGhpcy5iLmU9PTkmJnRoaXMuYi5hbSgwKT09dGhpcy5hP249dGhpcy5hLmZtKGUpKyIrPyI6bj10aGlzLmEuZm0oZSkrKCIiK3RoaXMuYi5mbShlKSksbn0sRihaZywiUmVnRXgvVG9rZW4vQ29uY2F0VG9rZW4iLDgyMSksRCgxODIyLDExNyxuNyxvZWUpLGwuYW09ZnVuY3Rpb24oZSl7aWYoZT09MClyZXR1cm4gdGhpcy5kO2lmKGU9PTEpcmV0dXJuIHRoaXMuYjt0aHJvdyBpdChuZXcgVm8oIkludGVybmFsIEVycm9yOiAiK2UpKX0sbC5lbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmI/MjoxfSxsLmZtPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiB0aGlzLmM+MD9uPSIoPygiK3RoaXMuYysiKSI6dGhpcy5hLmU9PTg/bj0iKD8oIit0aGlzLmErIikiOm49Iig/Iit0aGlzLmEsdGhpcy5iP24rPXRoaXMuZCsifCIrdGhpcy5iKyIpIjpuKz10aGlzLmQrIikiLG59LGwuYz0wLEYoWmcsIlJlZ0V4L1Rva2VuL0NvbmRpdGlvblRva2VuIiwxODIyKSxEKDE4MjMsMTE3LG43LG9adCksbC5hbT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5ifSxsLmVtPWZ1bmN0aW9uKCl7cmV0dXJuIDF9LGwuZm09ZnVuY3Rpb24oZSl7cmV0dXJuIig/IisodGhpcy5hPT0wPyIiOkI1dCh0aGlzLmEpKSsodGhpcy5jPT0wPyIiOkI1dCh0aGlzLmMpKSsiOiIrdGhpcy5iLmZtKGUpKyIpIn0sbC5hPTAsbC5jPTAsRihaZywiUmVnRXgvVG9rZW4vTW9kaWZpZXJUb2tlbiIsMTgyMyksRCg4MjIsMTE3LG43LEN2dCksbC5hbT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hfSxsLmVtPWZ1bmN0aW9uKCl7cmV0dXJuIDF9LGwuZm09ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKG49bnVsbCx0aGlzLmUpe2Nhc2UgNjp0aGlzLmI9PTA/bj0iKD86Iit0aGlzLmEuZm0oZSkrIikiOm49IigiK3RoaXMuYS5mbShlKSsiKSI7YnJlYWs7Y2FzZSAyMDpuPSIoPz0iK3RoaXMuYS5mbShlKSsiKSI7YnJlYWs7Y2FzZSAyMTpuPSIoPyEiK3RoaXMuYS5mbShlKSsiKSI7YnJlYWs7Y2FzZSAyMjpuPSIoPzw9Iit0aGlzLmEuZm0oZSkrIikiO2JyZWFrO2Nhc2UgMjM6bj0iKD88ISIrdGhpcy5hLmZtKGUpKyIpIjticmVhaztjYXNlIDI0Om49Iig/PiIrdGhpcy5hLmZtKGUpKyIpIn1yZXR1cm4gbn0sbC5iPTAsRihaZywiUmVnRXgvVG9rZW4vUGFyZW5Ub2tlbiIsODIyKSxEKDUyMSwxMTcsezM6MSwxMTc6MSw1MjE6MX0sa3J0KSxsLmJtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5mbT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lPT0xMj8iXFwiK3RoaXMuYTpOYm4odGhpcy5iKX0sbC5hPTAsRihaZywiUmVnRXgvVG9rZW4vU3RyaW5nVG9rZW4iLDUyMSksRCg0NjUsMTE3LG43LGQ5KSxsLiRsPWZ1bmN0aW9uKGUpe0UyKHRoaXMsZSl9LGwuYW09ZnVuY3Rpb24oZSl7cmV0dXJuIHUoencodGhpcy5hLGUpLDExNyl9LGwuZW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hP3RoaXMuYS5hLmMubGVuZ3RoOjB9LGwuZm09ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saDtpZih0aGlzLmU9PTEpe2lmKHRoaXMuYS5hLmMubGVuZ3RoPT0yKW49dSh6dyh0aGlzLmEsMCksMTE3KSxyPXUoencodGhpcy5hLDEpLDExNyksci5lPT0zJiZyLmFtKDApPT1uP289bi5mbShlKSsiKyI6ci5lPT05JiZyLmFtKDApPT1uP289bi5mbShlKSsiKz8iOm89bi5mbShlKSsoIiIrci5mbShlKSk7ZWxzZXtmb3IoaD1uZXcgQWcscz0wO3M8dGhpcy5hLmEuYy5sZW5ndGg7cysrKWdvKGgsdSh6dyh0aGlzLmEscyksMTE3KS5mbShlKSk7bz1oLmF9cmV0dXJuIG99aWYodGhpcy5hLmEuYy5sZW5ndGg9PTImJnUoencodGhpcy5hLDEpLDExNykuZT09NylvPXUoencodGhpcy5hLDApLDExNykuZm0oZSkrIj8iO2Vsc2UgaWYodGhpcy5hLmEuYy5sZW5ndGg9PTImJnUoencodGhpcy5hLDApLDExNykuZT09NylvPXUoencodGhpcy5hLDEpLDExNykuZm0oZSkrIj8/IjtlbHNle2ZvcihoPW5ldyBBZyxnbyhoLHUoencodGhpcy5hLDApLDExNykuZm0oZSkpLHM9MTtzPHRoaXMuYS5hLmMubGVuZ3RoO3MrKyloLmErPSJ8IixnbyhoLHUoencodGhpcy5hLHMpLDExNykuZm0oZSkpO289aC5hfXJldHVybiBvfSxGKFpnLCJSZWdFeC9Ub2tlbi9VbmlvblRva2VuIiw0NjUpLEQoNTE4LDEsezU5MjoxfSxiTSksbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYn0sRih4Z2UsIlhNTFR5cGVVdGlsL1BhdHRlcm5NYXRjaGVySW1wbCIsNTE4KSxEKDE2MjIsMTM4MSx7fSxqQik7dmFyIGV4ZTtGKHhnZSwiWE1MVHlwZVZhbGlkYXRvciIsMTYyMiksRCgyNjQsMSxyMCxlMiksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYi10aGlzLmEpKnRoaXMuYzwwP0liOm5ldyBqcCh0aGlzKX0sbC5hPTAsbC5iPTAsbC5jPTA7dmFyIEliO0YoWjh0LCJFeGNsdXNpdmVSYW5nZSIsMjY0KSxEKDEwNjgsMSxuMCx6SiksbC5SYj1mdW5jdGlvbihlKXt1KGUsMTkpLGZRZSgpfSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gclhlKCl9LGwuVWI9ZnVuY3Rpb24oKXtyZXR1cm4gaVhlKCl9LGwuV2I9ZnVuY3Rpb24oZSl7dShlLDE5KSxnUWUoKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiExfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuVGI9ZnVuY3Rpb24oKXtyZXR1cm4tMX0sbC5WYj1mdW5jdGlvbigpe3JldHVybi0xfSxsLlFiPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IFNnKFRnZSkpfSxGKFo4dCwiRXhjbHVzaXZlUmFuZ2UvMSIsMTA2OCksRCgyNTQsMSxuMCxqcCksbC5SYj1mdW5jdGlvbihlKXt1KGUsMTkpLGRRZSgpfSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gZmxuKHRoaXMpfSxsLlViPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbih0aGlzKX0sbC5XYj1mdW5jdGlvbihlKXt1KGUsMTkpLHBRZSgpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5jPDA/dGhpcy5hPj10aGlzLmMuYjp0aGlzLmE8PXRoaXMuYy5ifSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYj4wfSxsLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmItMX0sbC5RYj1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBTZyhUZ2UpKX0sbC5hPTAsbC5iPTAsRihaOHQsIkV4Y2x1c2l2ZVJhbmdlL1JhbmdlSXRlcmF0b3IiLDI1NCk7dmFyIHhoPUE4KEZILCJDIiksQ3I9QTgoclMsIkkiKSxwbD1BOChiNiwiWiIpLE9iPUE4KGlTLCJKIiksR3U9QTgodFMsIkIiKSxhYT1BOChlUywiRCIpLGEzPUE4KG5TLCJGIiksZzU9QTgoc1MsIlMiKSxFNm49S2koIm9yZy5lY2xpcHNlLmVsay5jb3JlLmxhYmVscyIsIklMYWJlbE1hbmFnZXIiKSxQTHQ9S2koUmEsIkRpYWdub3N0aWNDaGFpbiIpLEZMdD1LaShaMGUsIlJlc291cmNlU2V0IiksTkx0PUYoUmEsIkludm9jYXRpb25UYXJnZXRFeGNlcHRpb24iLG51bGwpLG54ZT0oQVIoKSxnYW4pLHJ4ZT1yeGU9cjBuO3VjbihuS2UpLEZjbigicGVybVByb3BzIixbW1tZSCxLSF0sW1hILCJnZWNrbzFfOCJdXSxbW1lILEtIXSxbWEgsImllMTAiXV0sW1tZSCxLSF0sW1hILCJpZTgiXV0sW1tZSCxLSF0sW1hILCJpZTkiXV0sW1tZSCxLSF0sW1hILCJzYWZhcmkiXV1dKSxyeGUobnVsbCwiZWxrIixudWxsKX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdHlwZW9mIGIwPCJ1Ij9iMDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sMzpbZnVuY3Rpb24oZixwLHcpe2Z1bmN0aW9uIG0oSSxCKXtpZighKEkgaW5zdGFuY2VvZiBCKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBiKEksQil7aWYoIUkpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gQiYmKHR5cGVvZiBCPT0ib2JqZWN0Inx8dHlwZW9mIEI9PSJmdW5jdGlvbiIpP0I6SX1mdW5jdGlvbiBFKEksQil7aWYodHlwZW9mIEIhPSJmdW5jdGlvbiImJkIhPT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgQik7SS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShCJiZCLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOkksZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksQiYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoSSxCKTpJLl9fcHJvdG9fXz1CKX12YXIgXz1mKCIuL2Vsay1hcGkuanMiKS5kZWZhdWx0LEE9ZnVuY3Rpb24oSSl7RShCLEkpO2Z1bmN0aW9uIEIoKXt2YXIgTj1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06e307bSh0aGlzLEIpO3ZhciBSPU9iamVjdC5hc3NpZ24oe30sTiksej0hMTt0cnl7Zi5yZXNvbHZlKCJ3ZWItd29ya2VyIiksej0hMH1jYXRjaHt9aWYoTi53b3JrZXJVcmwpaWYoeil7dmFyIFc9Zigid2ViLXdvcmtlciIpO1Iud29ya2VyRmFjdG9yeT1mdW5jdGlvbihhdCl7cmV0dXJuIG5ldyBXKGF0KX19ZWxzZSBjb25zb2xlLndhcm4oYFdlYiB3b3JrZXIgcmVxdWVzdGVkIGJ1dCAnd2ViLXdvcmtlcicgcGFja2FnZSBub3QgaW5zdGFsbGVkLiAKQ29uc2lkZXIgaW5zdGFsbGluZyB0aGUgcGFja2FnZSBvciBwYXNzIHlvdXIgb3duICd3b3JrZXJGYWN0b3J5JyB0byBFTEsncyBjb25zdHJ1Y3Rvci4KLi4uIEZhbGxpbmcgYmFjayB0byBub24td2ViIHdvcmtlciB2ZXJzaW9uLmApO2lmKCFSLndvcmtlckZhY3Rvcnkpe3ZhciBldD1mKCIuL2Vsay13b3JrZXIubWluLmpzIiksc3Q9ZXQuV29ya2VyO1Iud29ya2VyRmFjdG9yeT1mdW5jdGlvbihhdCl7cmV0dXJuIG5ldyBzdChhdCl9fXJldHVybiBiKHRoaXMsKEIuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoQikpLmNhbGwodGhpcyxSKSl9cmV0dXJuIEJ9KF8pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShwLmV4cG9ydHMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHAuZXhwb3J0cz1BLEEuZGVmYXVsdD1BfSx7Ii4vZWxrLWFwaS5qcyI6MSwiLi9lbGstd29ya2VyLm1pbi5qcyI6Miwid2ViLXdvcmtlciI6NH1dLDQ6W2Z1bmN0aW9uKGYscCx3KXtwLmV4cG9ydHM9V29ya2VyfSx7fV19LHt9LFszXSkoMyl9KX0pKEJqdCk7dmFyIG9XZT1CanQuZXhwb3J0cztjb25zdCBjV2U9Rzcob1dlKSxSanQ9bmV3IGNXZTtsZXQgb3c9e307Y29uc3QgdVdlPXt9O2xldCBxNT17fTtjb25zdCBsV2U9YXN5bmMgZnVuY3Rpb24oaSxhLGYscCx3LG0sYil7Y29uc3QgXz1mLnNlbGVjdChgW2lkPSIke2F9Il1gKS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGVzIiksQT1PYmplY3Qua2V5cyhpKTtyZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoQS5tYXAoYXN5bmMgZnVuY3Rpb24oSSl7Y29uc3QgQj1pW0ldO2xldCBOPSJkZWZhdWx0IjtCLmNsYXNzZXMubGVuZ3RoPjAmJihOPUIuY2xhc3Nlcy5qb2luKCIgIikpLE49TisiIGZsb3djaGFydC1sYWJlbCI7Y29uc3QgUj1pbShCLnN0eWxlcyk7bGV0IHo9Qi50ZXh0IT09dm9pZCAwP0IudGV4dDpCLmlkO2NvbnN0IFc9e3dpZHRoOjAsaGVpZ2h0OjB9LGV0PVt7aWQ6Qi5pZCsiLXdlc3QiLGxheW91dE9wdGlvbnM6eyJwb3J0LnNpZGUiOiJXRVNUIn19LHtpZDpCLmlkKyItZWFzdCIsbGF5b3V0T3B0aW9uczp7InBvcnQuc2lkZSI6IkVBU1QifX0se2lkOkIuaWQrIi1zb3V0aCIsbGF5b3V0T3B0aW9uczp7InBvcnQuc2lkZSI6IlNPVVRIIn19LHtpZDpCLmlkKyItbm9ydGgiLGxheW91dE9wdGlvbnM6eyJwb3J0LnNpZGUiOiJOT1JUSCJ9fV07bGV0IHN0PTAsYXQ9IiIsYnQ9e307c3dpdGNoKEIudHlwZSl7Y2FzZSJyb3VuZCI6c3Q9NSxhdD0icmVjdCI7YnJlYWs7Y2FzZSJzcXVhcmUiOmF0PSJyZWN0IjticmVhaztjYXNlImRpYW1vbmQiOmF0PSJxdWVzdGlvbiIsYnQ9e3BvcnRDb25zdHJhaW50czoiRklYRURfU0lERSJ9O2JyZWFrO2Nhc2UiaGV4YWdvbiI6YXQ9ImhleGFnb24iO2JyZWFrO2Nhc2Uib2RkIjphdD0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJsZWFuX3JpZ2h0IjphdD0ibGVhbl9yaWdodCI7YnJlYWs7Y2FzZSJsZWFuX2xlZnQiOmF0PSJsZWFuX2xlZnQiO2JyZWFrO2Nhc2UidHJhcGV6b2lkIjphdD0idHJhcGV6b2lkIjticmVhaztjYXNlImludl90cmFwZXpvaWQiOmF0PSJpbnZfdHJhcGV6b2lkIjticmVhaztjYXNlIm9kZF9yaWdodCI6YXQ9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UiY2lyY2xlIjphdD0iY2lyY2xlIjticmVhaztjYXNlImVsbGlwc2UiOmF0PSJlbGxpcHNlIjticmVhaztjYXNlInN0YWRpdW0iOmF0PSJzdGFkaXVtIjticmVhaztjYXNlInN1YnJvdXRpbmUiOmF0PSJzdWJyb3V0aW5lIjticmVhaztjYXNlImN5bGluZGVyIjphdD0iY3lsaW5kZXIiO2JyZWFrO2Nhc2UiZ3JvdXAiOmF0PSJyZWN0IjticmVhaztjYXNlImRvdWJsZWNpcmNsZSI6YXQ9ImRvdWJsZWNpcmNsZSI7YnJlYWs7ZGVmYXVsdDphdD0icmVjdCJ9Y29uc3QgbXQ9e2xhYmVsU3R5bGU6Ui5sYWJlbFN0eWxlLHNoYXBlOmF0LGxhYmVsVGV4dDp6LGxhYmVsVHlwZTpCLmxhYmVsVHlwZSxyeDpzdCxyeTpzdCxjbGFzczpOLHN0eWxlOlIuc3R5bGUsaWQ6Qi5pZCxsaW5rOkIubGluayxsaW5rVGFyZ2V0OkIubGlua1RhcmdldCx0b29sdGlwOncuZGIuZ2V0VG9vbHRpcChCLmlkKXx8IiIsZG9tSWQ6dy5kYi5sb29rVXBEb21JZChCLmlkKSxoYXZlQ2FsbGJhY2s6Qi5oYXZlQ2FsbGJhY2ssd2lkdGg6Qi50eXBlPT09Imdyb3VwIj81MDA6dm9pZCAwLGRpcjpCLmRpcix0eXBlOkIudHlwZSxwcm9wczpCLnByb3BzLHBhZGRpbmc6RmQoKS5mbG93Y2hhcnQucGFkZGluZ307bGV0IHl0LGZ0O2lmKG10LnR5cGUhPT0iZ3JvdXAiKWZ0PWF3YWl0IGtCdChfLG10LEIuZGlyKSx5dD1mdC5ub2RlKCkuZ2V0QkJveCgpO2Vsc2V7cC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO2NvbnN0e3NoYXBlU3ZnOnZ0LGJib3g6WH09YXdhaXQgTmQoXyxtdCx2b2lkIDAsITApO1cud2lkdGg9WC53aWR0aCxXLndyYXBwaW5nV2lkdGg9RmQoKS5mbG93Y2hhcnQud3JhcHBpbmdXaWR0aCxXLmhlaWdodD1YLmhlaWdodCxXLmxhYmVsTm9kZT12dC5ub2RlKCksbXQubGFiZWxEYXRhPVd9Y29uc3QgdXQ9e2lkOkIuaWQscG9ydHM6Qi50eXBlPT09ImRpYW1vbmQiP2V0OltdLGxheW91dE9wdGlvbnM6YnQsbGFiZWxUZXh0OnosbGFiZWxEYXRhOlcsZG9tSWQ6dy5kYi5sb29rVXBEb21JZChCLmlkKSx3aWR0aDp5dD09bnVsbD92b2lkIDA6eXQud2lkdGgsaGVpZ2h0Onl0PT1udWxsP3ZvaWQgMDp5dC5oZWlnaHQsdHlwZTpCLnR5cGUsZWw6ZnQscGFyZW50Om0ucGFyZW50QnlJZFtCLmlkXX07cTVbbXQuaWRdPXV0fSkpLGJ9LGpqdD0oaSxhLGYpPT57Y29uc3QgcD17VEI6e2luOntub3J0aDoibm9ydGgifSxvdXQ6e3NvdXRoOiJ3ZXN0Iix3ZXN0OiJlYXN0IixlYXN0OiJzb3V0aCJ9fSxMUjp7aW46e3dlc3Q6Indlc3QifSxvdXQ6e2Vhc3Q6InNvdXRoIixzb3V0aDoibm9ydGgiLG5vcnRoOiJlYXN0In19LFJMOntpbjp7ZWFzdDoiZWFzdCJ9LG91dDp7d2VzdDoibm9ydGgiLG5vcnRoOiJzb3V0aCIsc291dGg6Indlc3QifX0sQlQ6e2luOntzb3V0aDoic291dGgifSxvdXQ6e25vcnRoOiJlYXN0IixlYXN0OiJ3ZXN0Iix3ZXN0OiJub3J0aCJ9fX07cmV0dXJuIHAuVEQ9cC5UQixVdC5pbmZvKCJhYmM4OCIsZixhLGkpLHBbZl1bYV1baV19LCRqdD0oaSxhLGYpPT57aWYoVXQuaW5mbygiZ2V0TmV4dFBvcnQgYWJjODgiLHtub2RlOmksZWRnZURpcmVjdGlvbjphLGdyYXBoRGlyZWN0aW9uOmZ9KSwhb3dbaV0pc3dpdGNoKGYpe2Nhc2UiVEIiOmNhc2UiVEQiOm93W2ldPXtpblBvc2l0aW9uOiJub3J0aCIsb3V0UG9zaXRpb246InNvdXRoIn07YnJlYWs7Y2FzZSJCVCI6b3dbaV09e2luUG9zaXRpb246InNvdXRoIixvdXRQb3NpdGlvbjoibm9ydGgifTticmVhaztjYXNlIlJMIjpvd1tpXT17aW5Qb3NpdGlvbjoiZWFzdCIsb3V0UG9zaXRpb246Indlc3QifTticmVhaztjYXNlIkxSIjpvd1tpXT17aW5Qb3NpdGlvbjoid2VzdCIsb3V0UG9zaXRpb246ImVhc3QifTticmVha31jb25zdCBwPWE9PT0iaW4iP293W2ldLmluUG9zaXRpb246b3dbaV0ub3V0UG9zaXRpb247cmV0dXJuIGE9PT0iaW4iP293W2ldLmluUG9zaXRpb249amp0KG93W2ldLmluUG9zaXRpb24sYSxmKTpvd1tpXS5vdXRQb3NpdGlvbj1qanQob3dbaV0ub3V0UG9zaXRpb24sYSxmKSxwfSxoV2U9KGksYSk9PntsZXQgZj1pLnN0YXJ0LHA9aS5lbmQ7Y29uc3Qgdz1mLG09cCxiPXE1W2ZdLEU9cTVbcF07cmV0dXJuIWJ8fCFFP3tzb3VyY2U6Zix0YXJnZXQ6cH06KGIudHlwZT09PSJkaWFtb25kIiYmKGY9YCR7Zn0tJHskanQoZiwib3V0IixhKX1gKSxFLnR5cGU9PT0iZGlhbW9uZCImJihwPWAke3B9LSR7JGp0KHAsImluIixhKX1gKSx7c291cmNlOmYsdGFyZ2V0OnAsc291cmNlSWQ6dyx0YXJnZXRJZDptfSl9LGZXZT1mdW5jdGlvbihpLGEsZixwKXtVdC5pbmZvKCJhYmM3OCBlZGdlcyA9ICIsaSk7Y29uc3Qgdz1wLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZUxhYmVscyIpO2xldCBtPXt9LGI9YS5kYi5nZXREaXJlY3Rpb24oKSxFLF87aWYoaS5kZWZhdWx0U3R5bGUhPT12b2lkIDApe2NvbnN0IEE9aW0oaS5kZWZhdWx0U3R5bGUpO0U9QS5zdHlsZSxfPUEubGFiZWxTdHlsZX1yZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKEEpe2NvbnN0IEk9IkwtIitBLnN0YXJ0KyItIitBLmVuZDttW0ldPT09dm9pZCAwPyhtW0ldPTAsVXQuaW5mbygiYWJjNzggbmV3IGVudHJ5IixJLG1bSV0pKToobVtJXSsrLFV0LmluZm8oImFiYzc4IG5ldyBlbnRyeSIsSSxtW0ldKSk7bGV0IEI9SSsiLSIrbVtJXTtVdC5pbmZvKCJhYmM3OCBuZXcgbGluayBpZCB0byBiZSB1c2VkIGlzIixJLEIsbVtJXSk7Y29uc3QgTj0iTFMtIitBLnN0YXJ0LFI9IkxFLSIrQS5lbmQsej17c3R5bGU6IiIsbGFiZWxTdHlsZToiIn07c3dpdGNoKHoubWlubGVuPUEubGVuZ3RofHwxLEEudHlwZT09PSJhcnJvd19vcGVuIj96LmFycm93aGVhZD0ibm9uZSI6ei5hcnJvd2hlYWQ9Im5vcm1hbCIsei5hcnJvd1R5cGVTdGFydD0iYXJyb3dfb3BlbiIsei5hcnJvd1R5cGVFbmQ9ImFycm93X29wZW4iLEEudHlwZSl7Y2FzZSJkb3VibGVfYXJyb3dfY3Jvc3MiOnouYXJyb3dUeXBlU3RhcnQ9ImFycm93X2Nyb3NzIjtjYXNlImFycm93X2Nyb3NzIjp6LmFycm93VHlwZUVuZD0iYXJyb3dfY3Jvc3MiO2JyZWFrO2Nhc2UiZG91YmxlX2Fycm93X3BvaW50Ijp6LmFycm93VHlwZVN0YXJ0PSJhcnJvd19wb2ludCI7Y2FzZSJhcnJvd19wb2ludCI6ei5hcnJvd1R5cGVFbmQ9ImFycm93X3BvaW50IjticmVhaztjYXNlImRvdWJsZV9hcnJvd19jaXJjbGUiOnouYXJyb3dUeXBlU3RhcnQ9ImFycm93X2NpcmNsZSI7Y2FzZSJhcnJvd19jaXJjbGUiOnouYXJyb3dUeXBlRW5kPSJhcnJvd19jaXJjbGUiO2JyZWFrfWxldCBXPSIiLGV0PSIiO3N3aXRjaChBLnN0cm9rZSl7Y2FzZSJub3JtYWwiOlc9ImZpbGw6bm9uZTsiLEUhPT12b2lkIDAmJihXPUUpLF8hPT12b2lkIDAmJihldD1fKSx6LnRoaWNrbmVzcz0ibm9ybWFsIix6LnBhdHRlcm49InNvbGlkIjticmVhaztjYXNlImRvdHRlZCI6ei50aGlja25lc3M9Im5vcm1hbCIsei5wYXR0ZXJuPSJkb3R0ZWQiLHouc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1kYXNoYXJyYXk6MzsiO2JyZWFrO2Nhc2UidGhpY2siOnoudGhpY2tuZXNzPSJ0aGljayIsei5wYXR0ZXJuPSJzb2xpZCIsei5zdHlsZT0ic3Ryb2tlLXdpZHRoOiAzLjVweDtmaWxsOm5vbmU7IjticmVha31pZihBLnN0eWxlIT09dm9pZCAwKXtjb25zdCBmdD1pbShBLnN0eWxlKTtXPWZ0LnN0eWxlLGV0PWZ0LmxhYmVsU3R5bGV9ei5zdHlsZT16LnN0eWxlKz1XLHoubGFiZWxTdHlsZT16LmxhYmVsU3R5bGUrPWV0LEEuaW50ZXJwb2xhdGUhPT12b2lkIDA/ei5jdXJ2ZT1ldyhBLmludGVycG9sYXRlLGNnKTppLmRlZmF1bHRJbnRlcnBvbGF0ZSE9PXZvaWQgMD96LmN1cnZlPWV3KGkuZGVmYXVsdEludGVycG9sYXRlLGNnKTp6LmN1cnZlPWV3KHVXZS5jdXJ2ZSxjZyksQS50ZXh0PT09dm9pZCAwP0Euc3R5bGUhPT12b2lkIDAmJih6LmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIik6KHouYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiLHoubGFiZWxwb3M9ImMiKSx6LmxhYmVsVHlwZT1BLmxhYmVsVHlwZSx6LmxhYmVsPUEudGV4dC5yZXBsYWNlKEtyLmxpbmVCcmVha1JlZ2V4LGAKYCksQS5zdHlsZT09PXZvaWQgMCYmKHouc3R5bGU9ei5zdHlsZXx8InN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmU7Iiksei5sYWJlbFN0eWxlPXoubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpLHouaWQ9Qix6LmNsYXNzZXM9ImZsb3djaGFydC1saW5rICIrTisiICIrUjtjb25zdCBzdD1fQnQodyx6KSx7c291cmNlOmF0LHRhcmdldDpidCxzb3VyY2VJZDptdCx0YXJnZXRJZDp5dH09aFdlKEEsYik7VXQuZGVidWcoImFiYzc4IHNvdXJjZSBhbmQgdGFyZ2V0IixhdCxidCksZi5lZGdlcy5wdXNoKHtpZDoiZSIrQS5zdGFydCtBLmVuZCxzb3VyY2VzOlthdF0sdGFyZ2V0czpbYnRdLHNvdXJjZUlkOm10LHRhcmdldElkOnl0LGxhYmVsRWw6c3QsbGFiZWxzOlt7d2lkdGg6ei53aWR0aCxoZWlnaHQ6ei5oZWlnaHQsb3JnV2lkdGg6ei53aWR0aCxvcmdIZWlnaHQ6ei5oZWlnaHQsdGV4dDp6LmxhYmVsLGxheW91dE9wdGlvbnM6eyJlZGdlTGFiZWxzLmlubGluZSI6InRydWUiLCJlZGdlTGFiZWxzLnBsYWNlbWVudCI6IkNFTlRFUiJ9fV0sZWRnZURhdGE6en0pfSksZn0sZFdlPWZ1bmN0aW9uKGksYSxmLHAsdyl7bGV0IG09IiI7c3dpdGNoKHAmJihtPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLG09bS5yZXBsYWNlKC9cKC9nLCJcXCgiKSxtPW0ucmVwbGFjZSgvXCkvZywiXFwpIikpLGEuYXJyb3dUeXBlU3RhcnQpe2Nhc2UiYXJyb3dfY3Jvc3MiOmkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIrdysiXyIrZisiLWNyb3NzU3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19wb2ludCI6aS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIittKyIjIit3KyJfIitmKyItcG9pbnRTdGFydCkiKTticmVhaztjYXNlImFycm93X2JhcmIiOmkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIrdysiXyIrZisiLWJhcmJTdGFydCkiKTticmVhaztjYXNlImFycm93X2NpcmNsZSI6aS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIittKyIjIit3KyJfIitmKyItY2lyY2xlU3RhcnQpIik7YnJlYWs7Y2FzZSJhZ2dyZWdhdGlvbiI6aS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIittKyIjIit3KyJfIitmKyItYWdncmVnYXRpb25TdGFydCkiKTticmVhaztjYXNlImV4dGVuc2lvbiI6aS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIittKyIjIit3KyJfIitmKyItZXh0ZW5zaW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJjb21wb3NpdGlvbiI6aS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIittKyIjIit3KyJfIitmKyItY29tcG9zaXRpb25TdGFydCkiKTticmVhaztjYXNlImRlcGVuZGVuY3kiOmkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIrdysiXyIrZisiLWRlcGVuZGVuY3lTdGFydCkiKTticmVhaztjYXNlImxvbGxpcG9wIjppLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK20rIiMiK3crIl8iK2YrIi1sb2xsaXBvcFN0YXJ0KSIpO2JyZWFrfXN3aXRjaChhLmFycm93VHlwZUVuZCl7Y2FzZSJhcnJvd19jcm9zcyI6aS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiIyIrdysiXyIrZisiLWNyb3NzRW5kKSIpO2JyZWFrO2Nhc2UiYXJyb3dfcG9pbnQiOmkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiMiK3crIl8iK2YrIi1wb2ludEVuZCkiKTticmVhaztjYXNlImFycm93X2JhcmIiOmkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiMiK3crIl8iK2YrIi1iYXJiRW5kKSIpO2JyZWFrO2Nhc2UiYXJyb3dfY2lyY2xlIjppLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIittKyIjIit3KyJfIitmKyItY2lyY2xlRW5kKSIpO2JyZWFrO2Nhc2UiYWdncmVnYXRpb24iOmkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiMiK3crIl8iK2YrIi1hZ2dyZWdhdGlvbkVuZCkiKTticmVhaztjYXNlImV4dGVuc2lvbiI6aS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiIyIrdysiXyIrZisiLWV4dGVuc2lvbkVuZCkiKTticmVhaztjYXNlImNvbXBvc2l0aW9uIjppLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIittKyIjIit3KyJfIitmKyItY29tcG9zaXRpb25FbmQpIik7YnJlYWs7Y2FzZSJkZXBlbmRlbmN5IjppLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIittKyIjIit3KyJfIitmKyItZGVwZW5kZW5jeUVuZCkiKTticmVhaztjYXNlImxvbGxpcG9wIjppLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIittKyIjIit3KyJfIitmKyItbG9sbGlwb3BFbmQpIik7YnJlYWt9fSxnV2U9ZnVuY3Rpb24oaSxhKXtyZXR1cm4gVXQuaW5mbygiRXh0cmFjdGluZyBjbGFzc2VzIiksYS5kYi5nZXRDbGFzc2VzKCl9LHBXZT1mdW5jdGlvbihpKXtjb25zdCBhPXtwYXJlbnRCeUlkOnt9LGNoaWxkcmVuQnlJZDp7fX0sZj1pLmdldFN1YkdyYXBocygpO3JldHVybiBVdC5pbmZvKCJTdWJncmFwaHMgLSAiLGYpLGYuZm9yRWFjaChmdW5jdGlvbihwKXtwLm5vZGVzLmZvckVhY2goZnVuY3Rpb24odyl7YS5wYXJlbnRCeUlkW3ddPXAuaWQsYS5jaGlsZHJlbkJ5SWRbcC5pZF09PT12b2lkIDAmJihhLmNoaWxkcmVuQnlJZFtwLmlkXT1bXSksYS5jaGlsZHJlbkJ5SWRbcC5pZF0ucHVzaCh3KX0pfSksZi5mb3JFYWNoKGZ1bmN0aW9uKHApe3AuaWQsYS5wYXJlbnRCeUlkW3AuaWRdIT09dm9pZCAwJiZhLnBhcmVudEJ5SWRbcC5pZF19KSxhfSxiV2U9ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IHA9YVdlKGksYSxmKTtpZihwPT09dm9pZCAwfHxwPT09InJvb3QiKXJldHVybnt4OjAseTowfTtjb25zdCB3PXE1W3BdLm9mZnNldDtyZXR1cm57eDp3LnBvc1gseTp3LnBvc1l9fSx3V2U9ZnVuY3Rpb24oaSxhLGYscCx3LG0pe2NvbnN0IGI9YldlKGEuc291cmNlSWQsYS50YXJnZXRJZCx3KSxFPWEuc2VjdGlvbnNbMF0uc3RhcnRQb2ludCxfPWEuc2VjdGlvbnNbMF0uZW5kUG9pbnQsST0oYS5zZWN0aW9uc1swXS5iZW5kUG9pbnRzP2Euc2VjdGlvbnNbMF0uYmVuZFBvaW50czpbXSkubWFwKGJ0PT5bYnQueCtiLngsYnQueStiLnldKSxCPVtbRS54K2IueCxFLnkrYi55XSwuLi5JLFtfLngrYi54LF8ueStiLnldXSx7eDpOLHk6Un09Q0J0KGEuZWRnZURhdGEpLHo9RTUoKS54KE4pLnkoUikuY3VydmUoY2cpLFc9aS5pbnNlcnQoInBhdGgiKS5hdHRyKCJkIix6KEIpKS5hdHRyKCJjbGFzcyIsInBhdGggIitmLmNsYXNzZXMpLmF0dHIoImZpbGwiLCJub25lIiksZXQ9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VMYWJlbCIpLHN0PXlyKGV0Lm5vZGUoKS5hcHBlbmRDaGlsZChhLmxhYmVsRWwpKSxhdD1zdC5ub2RlKCkuZmlyc3RDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtzdC5hdHRyKCJ3aWR0aCIsYXQud2lkdGgpLHN0LmF0dHIoImhlaWdodCIsYXQuaGVpZ2h0KSxldC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHthLmxhYmVsc1swXS54K2IueH0sICR7YS5sYWJlbHNbMF0ueStiLnl9KWApLGRXZShXLGYscC50eXBlLHAuYXJyb3dNYXJrZXJBYnNvbHV0ZSxtKX0semp0PShpLGEpPT57aS5mb3JFYWNoKGY9PntmLmNoaWxkcmVufHwoZi5jaGlsZHJlbj1bXSk7Y29uc3QgcD1hLmNoaWxkcmVuQnlJZFtmLmlkXTtwJiZwLmZvckVhY2godz0+e2YuY2hpbGRyZW4ucHVzaChxNVt3XSl9KSx6anQoZi5jaGlsZHJlbixhKX0pfSx2V2U9YXN5bmMgZnVuY3Rpb24oaSxhLGYscCl7dmFyIHV0O3AuZGIuY2xlYXIoKSxxNT17fSxvdz17fSxwLmRiLnNldEdlbigiZ2VuLTIiKSxwLnBhcnNlci5wYXJzZShpKTtjb25zdCB3PXlyKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJzdHlsZSIsImhlaWdodDo0MDBweCIpLmF0dHIoImlkIiwiY3kiKTtsZXQgbT17aWQ6InJvb3QiLGxheW91dE9wdGlvbnM6eyJlbGsuaGllcmFyY2h5SGFuZGxpbmciOiJJTkNMVURFX0NISUxEUkVOIiwib3JnLmVjbGlwc2UuZWxrLnBhZGRpbmciOiJbdG9wPTEwMCwgbGVmdD0xMDAsIGJvdHRvbT0xMTAsIHJpZ2h0PTExMF0iLCJlbGsubGF5ZXJlZC5zcGFjaW5nLmVkZ2VOb2RlQmV0d2VlbkxheWVycyI6IjMwIiwiZWxrLmRpcmVjdGlvbiI6IkRPV04ifSxjaGlsZHJlbjpbXSxlZGdlczpbXX07c3dpdGNoKFV0LmluZm8oIkRyYXdpbmcgZmxvd2NoYXJ0IHVzaW5nIHYzIHJlbmRlcmVyIixSanQpLHAuZGIuZ2V0RGlyZWN0aW9uKCkpe2Nhc2UiQlQiOm0ubGF5b3V0T3B0aW9uc1siZWxrLmRpcmVjdGlvbiJdPSJVUCI7YnJlYWs7Y2FzZSJUQiI6bS5sYXlvdXRPcHRpb25zWyJlbGsuZGlyZWN0aW9uIl09IkRPV04iO2JyZWFrO2Nhc2UiTFIiOm0ubGF5b3V0T3B0aW9uc1siZWxrLmRpcmVjdGlvbiJdPSJSSUdIVCI7YnJlYWs7Y2FzZSJSTCI6bS5sYXlvdXRPcHRpb25zWyJlbGsuZGlyZWN0aW9uIl09IkxFRlQiO2JyZWFrfWNvbnN0e3NlY3VyaXR5TGV2ZWw6RSxmbG93Y2hhcnQ6X309RmQoKTtsZXQgQTtFPT09InNhbmRib3giJiYoQT15cigiI2kiK2EpKTtjb25zdCBJPXlyKEU9PT0ic2FuZGJveCI/QS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksQj1FPT09InNhbmRib3giP0Eubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsTj1JLnNlbGVjdChgW2lkPSIke2F9Il1gKTtQTnQoTixbInBvaW50IiwiY2lyY2xlIiwiY3Jvc3MiXSxwLnR5cGUsYSk7Y29uc3Qgej1wLmRiLmdldFZlcnRpY2VzKCk7bGV0IFc7Y29uc3QgZXQ9cC5kYi5nZXRTdWJHcmFwaHMoKTtVdC5pbmZvKCJTdWJncmFwaHMgLSAiLGV0KTtmb3IobGV0IHZ0PWV0Lmxlbmd0aC0xO3Z0Pj0wO3Z0LS0pVz1ldFt2dF0scC5kYi5hZGRWZXJ0ZXgoVy5pZCx7dGV4dDpXLnRpdGxlLHR5cGU6Vy5sYWJlbFR5cGV9LCJncm91cCIsdm9pZCAwLFcuY2xhc3NlcyxXLmRpcik7Y29uc3Qgc3Q9Ti5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsInN1YmdyYXBocyIpLGF0PXBXZShwLmRiKTttPWF3YWl0IGxXZSh6LGEsSSxCLHAsYXQsbSk7Y29uc3QgYnQ9Ti5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VzIGVkZ2VQYXRoIiksbXQ9cC5kYi5nZXRFZGdlcygpO209ZldlKG10LHAsbSxOKSxPYmplY3Qua2V5cyhxNSkuZm9yRWFjaCh2dD0+e2NvbnN0IFg9cTVbdnRdO1gucGFyZW50fHxtLmNoaWxkcmVuLnB1c2goWCksYXQuY2hpbGRyZW5CeUlkW3Z0XSE9PXZvaWQgMCYmKFgubGFiZWxzPVt7dGV4dDpYLmxhYmVsVGV4dCxsYXlvdXRPcHRpb25zOnsibm9kZUxhYmVscy5wbGFjZW1lbnQiOiJbSF9DRU5URVIsIFZfVE9QLCBJTlNJREVdIn0sd2lkdGg6WC5sYWJlbERhdGEud2lkdGgsaGVpZ2h0OlgubGFiZWxEYXRhLmhlaWdodH1dLGRlbGV0ZSBYLngsZGVsZXRlIFgueSxkZWxldGUgWC53aWR0aCxkZWxldGUgWC5oZWlnaHQpfSksemp0KG0uY2hpbGRyZW4sYXQpLFV0LmluZm8oImFmdGVyIGxheW91dCIsSlNPTi5zdHJpbmdpZnkobSxudWxsLDIpKTtjb25zdCBmdD1hd2FpdCBSanQubGF5b3V0KG0pO3FqdCgwLDAsZnQuY2hpbGRyZW4sTixzdCxwLDApLFV0LmluZm8oImFmdGVyIGxheW91dCIsZnQpLCh1dD1mdC5lZGdlcyk9PW51bGx8fHV0Lm1hcCh2dD0+e3dXZShidCx2dCx2dC5lZGdlRGF0YSxwLGF0LGEpfSksZlQoe30sTixfLmRpYWdyYW1QYWRkaW5nLF8udXNlTWF4V2lkdGgpLHcucmVtb3ZlKCl9LHFqdD0oaSxhLGYscCx3LG0sYik9PntmLmZvckVhY2goZnVuY3Rpb24oRSl7aWYoRSlpZihxNVtFLmlkXS5vZmZzZXQ9e3Bvc1g6RS54K2kscG9zWTpFLnkrYSx4OmkseTphLGRlcHRoOmIsd2lkdGg6RS53aWR0aCxoZWlnaHQ6RS5oZWlnaHR9LEUudHlwZT09PSJncm91cCIpe2NvbnN0IF89dy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsInN1YmdyYXBoIik7Xy5pbnNlcnQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInN1YmdyYXBoIHN1YmdyYXBoLWx2bC0iK2IlNSsiIG5vZGUiKS5hdHRyKCJ4IixFLngraSkuYXR0cigieSIsRS55K2EpLmF0dHIoIndpZHRoIixFLndpZHRoKS5hdHRyKCJoZWlnaHQiLEUuaGVpZ2h0KTtjb25zdCBBPV8uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLEk9RmQoKS5mbG93Y2hhcnQuaHRtbExhYmVscz9FLmxhYmVsRGF0YS53aWR0aC8yOjA7QS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtFLmxhYmVsc1swXS54K2krRS54K0l9LCAke0UubGFiZWxzWzBdLnkrYStFLnkrM30pYCksQS5ub2RlKCkuYXBwZW5kQ2hpbGQoRS5sYWJlbERhdGEubGFiZWxOb2RlKSxVdC5pbmZvKCJJZCAoVUdIKT0gIixFLnR5cGUsRS5sYWJlbHMpfWVsc2UgVXQuaW5mbygiSWQgKFVHSCk9ICIsRS5pZCksRS5lbC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtFLngraStFLndpZHRoLzJ9LCAke0UueSthK0UuaGVpZ2h0LzJ9KWApfSksZi5mb3JFYWNoKGZ1bmN0aW9uKEUpe0UmJkUudHlwZT09PSJncm91cCImJnFqdChpK0UueCxhK0UueSxFLmNoaWxkcmVuLHAsdyxtLGIrMSl9KX0sbVdlPXtnZXRDbGFzc2VzOmdXZSxkcmF3OnZXZX0seVdlPWk9PntsZXQgYT0iIjtmb3IobGV0IGY9MDtmPDU7ZisrKWErPWAKICAgICAgLnN1YmdyYXBoLWx2bC0ke2Z9IHsKICAgICAgICBmaWxsOiAke2lbYHN1cmZhY2Uke2Z9YF19OwogICAgICAgIHN0cm9rZTogJHtpW2BzdXJmYWNlUGVlciR7Zn1gXX07CiAgICAgIH0KICAgIGA7cmV0dXJuIGF9LHhXZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7ZGI6bEllLHJlbmRlcmVyOm1XZSxwYXJzZXI6SGR0LHN0eWxlczppPT5gLmxhYmVsIHsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBjb2xvcjogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICB9CiAgLmNsdXN0ZXItbGFiZWwgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQogIC5jbHVzdGVyLWxhYmVsIHNwYW4gewogICAgY29sb3I6ICR7aS50aXRsZUNvbG9yfTsKICB9CgogIC5sYWJlbCB0ZXh0LHNwYW4gewogICAgZmlsbDogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICAgIGNvbG9yOiAke2kubm9kZVRleHRDb2xvcnx8aS50ZXh0Q29sb3J9OwogIH0KCiAgLm5vZGUgcmVjdCwKICAubm9kZSBjaXJjbGUsCiAgLm5vZGUgZWxsaXBzZSwKICAubm9kZSBwb2x5Z29uLAogIC5ub2RlIHBhdGggewogICAgZmlsbDogJHtpLm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CgogIC5ub2RlIC5sYWJlbCB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQogIC5ub2RlLmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgfQoKICAuYXJyb3doZWFkUGF0aCB7CiAgICBmaWxsOiAke2kuYXJyb3doZWFkQ29sb3J9OwogIH0KCiAgLmVkZ2VQYXRoIC5wYXRoIHsKICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDIuMHB4OwogIH0KCiAgLmZsb3djaGFydC1saW5rIHsKICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgICBmaWxsOiBub25lOwogIH0KCiAgLmVkZ2VMYWJlbCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2kuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICByZWN0IHsKICAgICAgb3BhY2l0eTogMC44NTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgICBmaWxsOiAke2kuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICB9CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQoKICAuY2x1c3RlciByZWN0IHsKICAgIGZpbGw6ICR7aS5jbHVzdGVyQmtnfTsKICAgIHN0cm9rZTogJHtpLmNsdXN0ZXJCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAuY2x1c3RlciB0ZXh0IHsKICAgIGZpbGw6ICR7aS50aXRsZUNvbG9yfTsKICB9CgogIC5jbHVzdGVyIHNwYW4gewogICAgY29sb3I6ICR7aS50aXRsZUNvbG9yfTsKICB9CiAgLyogLmNsdXN0ZXIgZGl2IHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfSAqLwoKICBkaXYubWVybWFpZFRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWF4LXdpZHRoOiAyMDBweDsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2kuYm9yZGVyMn07CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEwMDsKICB9CgogIC5mbG93Y2hhcnRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KICAuc3ViZ3JhcGggewogICAgc3Ryb2tlLXdpZHRoOjI7CiAgICByeDozOwogIH0KICAvLyAuc3ViZ3JhcGgtbHZsLTEgewogIC8vICAgZmlsbDojY2NjOwogIC8vICAgLy8gc3Ryb2tlOmJsYWNrOwogIC8vIH0KCiAgLmZsb3djaGFydC1sYWJlbCB0ZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgfQoKICAke3lXZShpKX0KYH19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIFlndD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKE4sUix6LFcpe2Zvcih6PXp8fHt9LFc9Ti5sZW5ndGg7Vy0tO3pbTltXXV09Uik7cmV0dXJuIHp9LGE9WzYsOCwxMCwxMSwxMiwxNCwxNiwxNywyMCwyMV0sZj1bMSw5XSxwPVsxLDEwXSx3PVsxLDExXSxtPVsxLDEyXSxiPVsxLDEzXSxFPVsxLDE2XSxfPVsxLDE3XSxBPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myx0aW1lbGluZTo0LGRvY3VtZW50OjUsRU9GOjYsbGluZTo3LFNQQUNFOjgsc3RhdGVtZW50OjksTkVXTElORToxMCx0aXRsZToxMSxhY2NfdGl0bGU6MTIsYWNjX3RpdGxlX3ZhbHVlOjEzLGFjY19kZXNjcjoxNCxhY2NfZGVzY3JfdmFsdWU6MTUsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToxNixzZWN0aW9uOjE3LHBlcmlvZF9zdGF0ZW1lbnQ6MTgsZXZlbnRfc3RhdGVtZW50OjE5LHBlcmlvZDoyMCxldmVudDoyMSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoidGltZWxpbmUiLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJORVdMSU5FIiwxMToidGl0bGUiLDEyOiJhY2NfdGl0bGUiLDEzOiJhY2NfdGl0bGVfdmFsdWUiLDE0OiJhY2NfZGVzY3IiLDE1OiJhY2NfZGVzY3JfdmFsdWUiLDE2OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwxNzoic2VjdGlvbiIsMjA6InBlcmlvZCIsMjE6ImV2ZW50In0scHJvZHVjdGlvbnNfOlswLFszLDNdLFs1LDBdLFs1LDJdLFs3LDJdLFs3LDFdLFs3LDFdLFs3LDFdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFsxOCwxXSxbMTksMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oUix6LFcsZXQsc3QsYXQsYnQpe3ZhciBtdD1hdC5sZW5ndGgtMTtzd2l0Y2goc3Qpe2Nhc2UgMTpyZXR1cm4gYXRbbXQtMV07Y2FzZSAyOnRoaXMuJD1bXTticmVhaztjYXNlIDM6YXRbbXQtMV0ucHVzaChhdFttdF0pLHRoaXMuJD1hdFttdC0xXTticmVhaztjYXNlIDQ6Y2FzZSA1OnRoaXMuJD1hdFttdF07YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA4OmV0LmdldENvbW1vbkRiKCkuc2V0RGlhZ3JhbVRpdGxlKGF0W210XS5zdWJzdHIoNikpLHRoaXMuJD1hdFttdF0uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9YXRbbXRdLnRyaW0oKSxldC5nZXRDb21tb25EYigpLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMDpjYXNlIDExOnRoaXMuJD1hdFttdF0udHJpbSgpLGV0LmdldENvbW1vbkRiKCkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDEyOmV0LmFkZFNlY3Rpb24oYXRbbXRdLnN1YnN0cig4KSksdGhpcy4kPWF0W210XS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxNTpldC5hZGRUYXNrKGF0W210XSwwLCIiKSx0aGlzLiQ9YXRbbXRdO2JyZWFrO2Nhc2UgMTY6ZXQuYWRkRXZlbnQoYXRbbXRdLnN1YnN0cigyKSksdGhpcy4kPWF0W210XTticmVha319LHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0saShhLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODpbMSw2XSw5OjcsMTA6WzEsOF0sMTE6ZiwxMjpwLDE0OncsMTY6bSwxNzpiLDE4OjE0LDE5OjE1LDIwOkUsMjE6X30saShhLFsyLDddLHsxOlsyLDFdfSksaShhLFsyLDNdKSx7OToxOCwxMTpmLDEyOnAsMTQ6dywxNjptLDE3OmIsMTg6MTQsMTk6MTUsMjA6RSwyMTpffSxpKGEsWzIsNV0pLGkoYSxbMiw2XSksaShhLFsyLDhdKSx7MTM6WzEsMTldfSx7MTU6WzEsMjBdfSxpKGEsWzIsMTFdKSxpKGEsWzIsMTJdKSxpKGEsWzIsMTNdKSxpKGEsWzIsMTRdKSxpKGEsWzIsMTVdKSxpKGEsWzIsMTZdKSxpKGEsWzIsNF0pLGkoYSxbMiw5XSksaShhLFsyLDEwXSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6ZnVuY3Rpb24oUix6KXtpZih6LnJlY292ZXJhYmxlKXRoaXMudHJhY2UoUik7ZWxzZXt2YXIgVz1uZXcgRXJyb3IoUik7dGhyb3cgVy5oYXNoPXosV319LHBhcnNlOmZ1bmN0aW9uKFIpe3ZhciB6PXRoaXMsVz1bMF0sZXQ9W10sc3Q9W251bGxdLGF0PVtdLGJ0PXRoaXMudGFibGUsbXQ9IiIseXQ9MCxmdD0wLHV0PTIsdnQ9MSxYPWF0LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHB0PU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksVT17eXk6e319O2Zvcih2YXIgVHQgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxUdCkmJihVLnl5W1R0XT10aGlzLnl5W1R0XSk7cHQuc2V0SW5wdXQoUixVLnl5KSxVLnl5LmxleGVyPXB0LFUueXkucGFyc2VyPXRoaXMsdHlwZW9mIHB0Lnl5bGxvYz4idSImJihwdC55eWxsb2M9e30pO3ZhciBudD1wdC55eWxsb2M7YXQucHVzaChudCk7dmFyIEl0PXB0Lm9wdGlvbnMmJnB0Lm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBVLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPVUueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gT3QoKXt2YXIgbWU7cmV0dXJuIG1lPWV0LnBvcCgpfHxwdC5sZXgoKXx8dnQsdHlwZW9mIG1lIT0ibnVtYmVyIiYmKG1lIGluc3RhbmNlb2YgQXJyYXkmJihldD1tZSxtZT1ldC5wb3AoKSksbWU9ei5zeW1ib2xzX1ttZV18fG1lKSxtZX1mb3IodmFyIEJ0LEV0LFosQ3QseHQ9e30sSHQsTGUsRnQsZ247Oyl7aWYoRXQ9V1tXLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW0V0XT9aPXRoaXMuZGVmYXVsdEFjdGlvbnNbRXRdOigoQnQ9PT1udWxsfHx0eXBlb2YgQnQ+InUiKSYmKEJ0PU90KCkpLFo9YnRbRXRdJiZidFtFdF1bQnRdKSx0eXBlb2YgWj4idSJ8fCFaLmxlbmd0aHx8IVpbMF0pe3ZhciBTZT0iIjtnbj1bXTtmb3IoSHQgaW4gYnRbRXRdKXRoaXMudGVybWluYWxzX1tIdF0mJkh0PnV0JiZnbi5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bSHRdKyInIik7cHQuc2hvd1Bvc2l0aW9uP1NlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHl0KzEpK2A6CmArcHQuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtnbi5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW0J0XXx8QnQpKyInIjpTZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh5dCsxKSsiOiBVbmV4cGVjdGVkICIrKEJ0PT12dD8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tCdF18fEJ0KSsiJyIpLHRoaXMucGFyc2VFcnJvcihTZSx7dGV4dDpwdC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bQnRdfHxCdCxsaW5lOnB0Lnl5bGluZW5vLGxvYzpudCxleHBlY3RlZDpnbn0pfWlmKFpbMF1pbnN0YW5jZW9mIEFycmF5JiZaLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrRXQrIiwgdG9rZW46ICIrQnQpO3N3aXRjaChaWzBdKXtjYXNlIDE6Vy5wdXNoKEJ0KSxzdC5wdXNoKHB0Lnl5dGV4dCksYXQucHVzaChwdC55eWxsb2MpLFcucHVzaChaWzFdKSxCdD1udWxsLGZ0PXB0Lnl5bGVuZyxtdD1wdC55eXRleHQseXQ9cHQueXlsaW5lbm8sbnQ9cHQueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihMZT10aGlzLnByb2R1Y3Rpb25zX1taWzFdXVsxXSx4dC4kPXN0W3N0Lmxlbmd0aC1MZV0seHQuXyQ9e2ZpcnN0X2xpbmU6YXRbYXQubGVuZ3RoLShMZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmF0W2F0Lmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmF0W2F0Lmxlbmd0aC0oTGV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YXRbYXQubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxJdCYmKHh0Ll8kLnJhbmdlPVthdFthdC5sZW5ndGgtKExlfHwxKV0ucmFuZ2VbMF0sYXRbYXQubGVuZ3RoLTFdLnJhbmdlWzFdXSksQ3Q9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHh0LFttdCxmdCx5dCxVLnl5LFpbMV0sc3QsYXRdLmNvbmNhdChYKSksdHlwZW9mIEN0PCJ1IilyZXR1cm4gQ3Q7TGUmJihXPVcuc2xpY2UoMCwtMSpMZSoyKSxzdD1zdC5zbGljZSgwLC0xKkxlKSxhdD1hdC5zbGljZSgwLC0xKkxlKSksVy5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW1pbMV1dWzBdKSxzdC5wdXNoKHh0LiQpLGF0LnB1c2goeHQuXyQpLEZ0PWJ0W1dbVy5sZW5ndGgtMl1dW1dbVy5sZW5ndGgtMV1dLFcucHVzaChGdCk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LEk9ZnVuY3Rpb24oKXt2YXIgTj17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih6LFcpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoeixXKTtlbHNlIHRocm93IG5ldyBFcnJvcih6KX0sc2V0SW5wdXQ6ZnVuY3Rpb24oUix6KXtyZXR1cm4gdGhpcy55eT16fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1SLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBSPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1SLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1SLHRoaXMubWF0Y2hlZCs9Ujt2YXIgej1SLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gej8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksUn0sdW5wdXQ6ZnVuY3Rpb24oUil7dmFyIHo9Ui5sZW5ndGgsVz1SLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Uit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgteiksdGhpcy5vZmZzZXQtPXo7dmFyIGV0PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLFcubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1XLmxlbmd0aC0xKTt2YXIgc3Q9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlc/KFcubGVuZ3RoPT09ZXQubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStldFtldC5sZW5ndGgtVy5sZW5ndGhdLmxlbmd0aC1XWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4ten0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtzdFswXSxzdFswXSt0aGlzLnl5bGVuZy16XSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oUil7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFIpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIFI9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihSLmxlbmd0aD4yMD8iLi4uIjoiIikrUi5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBSPXRoaXMubWF0Y2g7cmV0dXJuIFIubGVuZ3RoPDIwJiYoUis9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtUi5sZW5ndGgpKSwoUi5zdWJzdHIoMCwyMCkrKFIubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBSPXRoaXMucGFzdElucHV0KCksej1uZXcgQXJyYXkoUi5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBSK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCt6KyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihSLHope3ZhciBXLGV0LHN0O2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihzdD17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihzdC55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxldD1SWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxldCYmKHRoaXMueXlsaW5lbm8rPWV0Lmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOmV0P2V0W2V0Lmxlbmd0aC0xXS5sZW5ndGgtZXRbZXQubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rUlswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1SWzBdLHRoaXMubWF0Y2grPVJbMF0sdGhpcy5tYXRjaGVzPVIsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoUlswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9UlswXSxXPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLHosdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksVylyZXR1cm4gVztpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYXQgaW4gc3QpdGhpc1thdF09c3RbYXRdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIFIseixXLGV0O3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIHN0PXRoaXMuX2N1cnJlbnRSdWxlcygpLGF0PTA7YXQ8c3QubGVuZ3RoO2F0KyspaWYoVz10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3N0W2F0XV0pLFcmJighenx8V1swXS5sZW5ndGg+elswXS5sZW5ndGgpKXtpZih6PVcsZXQ9YXQsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoUj10aGlzLnRlc3RfbWF0Y2goVyxzdFthdF0pLFIhPT0hMSlyZXR1cm4gUjtpZih0aGlzLl9iYWNrdHJhY2spe3o9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gej8oUj10aGlzLnRlc3RfbWF0Y2goeixzdFtldF0pLFIhPT0hMT9SOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgej10aGlzLm5leHQoKTtyZXR1cm4genx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oeil7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHopfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciB6PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIHo+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih6KXtyZXR1cm4gej10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHp8fDApLHo+PTA/dGhpcy5jb25kaXRpb25TdGFja1t6XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih6KXt0aGlzLmJlZ2luKHopfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHosVyxldCxzdCl7c3dpdGNoKGV0KXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gMTA7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpicmVhaztjYXNlIDU6cmV0dXJuIDQ7Y2FzZSA2OnJldHVybiAxMTtjYXNlIDc6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDEyO2Nhc2UgODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgOTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMTQ7Y2FzZSAxMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgMTE6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTM6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTQ6cmV0dXJuIDE3O2Nhc2UgMTU6cmV0dXJuIDIxO2Nhc2UgMTY6cmV0dXJuIDIwO2Nhc2UgMTc6cmV0dXJuIDY7Y2FzZSAxODpyZXR1cm4iSU5WQUxJRCJ9fSxydWxlczpbL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OnRpbWVsaW5lXGIpL2ksL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OnNlY3Rpb25cc1teIzpcbjtdKykvaSwvXig/Ojpcc1teIzpcbjtdKykvaSwvXig/OlteIzpcbjtdKykvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTIsMTNdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMTBdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbOF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMThdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gTn0oKTtBLmxleGVyPUk7ZnVuY3Rpb24gQigpe3RoaXMueXk9e319cmV0dXJuIEIucHJvdG90eXBlPUEsQS5QYXJzZXI9QixuZXcgQn0oKTtZZ3QucGFyc2VyPVlndDtjb25zdCBrV2U9WWd0O2xldCB5TD0iIixIanQ9MDtjb25zdCBLZ3Q9W10sZUs9W10seEw9W10sVmp0PSgpPT5fT3QsR2p0PWZ1bmN0aW9uKCl7S2d0Lmxlbmd0aD0wLGVLLmxlbmd0aD0wLHlMPSIiLHhMLmxlbmd0aD0wLGhnKCl9LFVqdD1mdW5jdGlvbihpKXt5TD1pLEtndC5wdXNoKGkpfSxXanQ9ZnVuY3Rpb24oKXtyZXR1cm4gS2d0fSxZanQ9ZnVuY3Rpb24oKXtsZXQgaT1aanQoKTtjb25zdCBhPTEwMDtsZXQgZj0wO2Zvcig7IWkmJmY8YTspaT1aanQoKSxmKys7cmV0dXJuIGVLLnB1c2goLi4ueEwpLGVLfSxLanQ9ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IHA9e2lkOkhqdCsrLHNlY3Rpb246eUwsdHlwZTp5TCx0YXNrOmksc2NvcmU6YXx8MCxldmVudHM6Zj9bZl06W119O3hMLnB1c2gocCl9LFhqdD1mdW5jdGlvbihpKXt4TC5maW5kKGY9PmYuaWQ9PT1IanQtMSkuZXZlbnRzLnB1c2goaSl9LFFqdD1mdW5jdGlvbihpKXtjb25zdCBhPXtzZWN0aW9uOnlMLHR5cGU6eUwsZGVzY3JpcHRpb246aSx0YXNrOmksY2xhc3NlczpbXX07ZUsucHVzaChhKX0sWmp0PWZ1bmN0aW9uKCl7Y29uc3QgaT1mdW5jdGlvbihmKXtyZXR1cm4geExbZl0ucHJvY2Vzc2VkfTtsZXQgYT0hMDtmb3IoY29uc3RbZixwXW9mIHhMLmVudHJpZXMoKSlpKGYpLGE9YSYmcC5wcm9jZXNzZWQ7cmV0dXJuIGF9LEVXZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYWRkRXZlbnQ6WGp0LGFkZFNlY3Rpb246VWp0LGFkZFRhc2s6S2p0LGFkZFRhc2tPcmc6UWp0LGNsZWFyOkdqdCxkZWZhdWx0OntjbGVhcjpHanQsZ2V0Q29tbW9uRGI6Vmp0LGFkZFNlY3Rpb246VWp0LGdldFNlY3Rpb25zOldqdCxnZXRUYXNrczpZanQsYWRkVGFzazpLanQsYWRkVGFza09yZzpRanQsYWRkRXZlbnQ6WGp0fSxnZXRDb21tb25EYjpWanQsZ2V0U2VjdGlvbnM6V2p0LGdldFRhc2tzOllqdH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxUV2U9MTIsbks9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPWkuYXBwZW5kKCJyZWN0Iik7cmV0dXJuIGYuYXR0cigieCIsYS54KSxmLmF0dHIoInkiLGEueSksZi5hdHRyKCJmaWxsIixhLmZpbGwpLGYuYXR0cigic3Ryb2tlIixhLnN0cm9rZSksZi5hdHRyKCJ3aWR0aCIsYS53aWR0aCksZi5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KSxmLmF0dHIoInJ4IixhLnJ4KSxmLmF0dHIoInJ5IixhLnJ5KSxhLmNsYXNzIT09dm9pZCAwJiZmLmF0dHIoImNsYXNzIixhLmNsYXNzKSxmfSxDV2U9ZnVuY3Rpb24oaSxhKXtjb25zdCBwPWkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsYS5jeCkuYXR0cigiY3kiLGEuY3kpLmF0dHIoImNsYXNzIiwiZmFjZSIpLmF0dHIoInIiLDE1KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoIm92ZXJmbG93IiwidmlzaWJsZSIpLHc9aS5hcHBlbmQoImciKTt3LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGEuY3gtMTUvMykuYXR0cigiY3kiLGEuY3ktMTUvMykuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpLHcuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsYS5jeCsxNS8zKS5hdHRyKCJjeSIsYS5jeS0xNS8zKS5hdHRyKCJyIiwxLjUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigiZmlsbCIsIiM2NjYiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iik7ZnVuY3Rpb24gbShfKXtjb25zdCBBPU9BKCkuc3RhcnRBbmdsZShNYXRoLlBJLzIpLmVuZEFuZ2xlKDMqKE1hdGguUEkvMikpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoNi44MTgxODE4MTgxODE4MTc1KTtfLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixBKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLmN4KyIsIisoYS5jeSsyKSsiKSIpfWZ1bmN0aW9uIGIoXyl7Y29uc3QgQT1PQSgpLnN0YXJ0QW5nbGUoMypNYXRoLlBJLzIpLmVuZEFuZ2xlKDUqKE1hdGguUEkvMikpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoNi44MTgxODE4MTgxODE4MTc1KTtfLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixBKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLmN4KyIsIisoYS5jeSs3KSsiKSIpfWZ1bmN0aW9uIEUoXyl7Xy5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlIiwyKS5hdHRyKCJ4MSIsYS5jeC01KS5hdHRyKCJ5MSIsYS5jeSs3KS5hdHRyKCJ4MiIsYS5jeCs1KS5hdHRyKCJ5MiIsYS5jeSs3KS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpfXJldHVybiBhLnNjb3JlPjM/bSh3KTphLnNjb3JlPDM/Yih3KTpFKHcpLHB9LF9XZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9aS5hcHBlbmQoImNpcmNsZSIpO3JldHVybiBmLmF0dHIoImN4IixhLmN4KSxmLmF0dHIoImN5IixhLmN5KSxmLmF0dHIoImNsYXNzIiwiYWN0b3ItIithLnBvcyksZi5hdHRyKCJmaWxsIixhLmZpbGwpLGYuYXR0cigic3Ryb2tlIixhLnN0cm9rZSksZi5hdHRyKCJyIixhLnIpLGYuY2xhc3MhPT12b2lkIDAmJmYuYXR0cigiY2xhc3MiLGYuY2xhc3MpLGEudGl0bGUhPT12b2lkIDAmJmYuYXBwZW5kKCJ0aXRsZSIpLnRleHQoYS50aXRsZSksZn0sSmp0PWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1hLnRleHQucmVwbGFjZSgvPGJyXHMqXC8/Pi9naSwiICIpLHA9aS5hcHBlbmQoInRleHQiKTtwLmF0dHIoIngiLGEueCkscC5hdHRyKCJ5IixhLnkpLHAuYXR0cigiY2xhc3MiLCJsZWdlbmQiKSxwLnN0eWxlKCJ0ZXh0LWFuY2hvciIsYS5hbmNob3IpLGEuY2xhc3MhPT12b2lkIDAmJnAuYXR0cigiY2xhc3MiLGEuY2xhc3MpO2NvbnN0IHc9cC5hcHBlbmQoInRzcGFuIik7cmV0dXJuIHcuYXR0cigieCIsYS54K2EudGV4dE1hcmdpbioyKSx3LnRleHQoZikscH0sU1dlPWZ1bmN0aW9uKGksYSl7ZnVuY3Rpb24gZih3LG0sYixFLF8pe3JldHVybiB3KyIsIittKyIgIisodytiKSsiLCIrbSsiICIrKHcrYikrIiwiKyhtK0UtXykrIiAiKyh3K2ItXyoxLjIpKyIsIisobStFKSsiICIrdysiLCIrKG0rRSl9Y29uc3QgcD1pLmFwcGVuZCgicG9seWdvbiIpO3AuYXR0cigicG9pbnRzIixmKGEueCxhLnksNTAsMjAsNykpLHAuYXR0cigiY2xhc3MiLCJsYWJlbEJveCIpLGEueT1hLnkrYS5sYWJlbE1hcmdpbixhLng9YS54Ky41KmEubGFiZWxNYXJnaW4sSmp0KGksYSl9LEFXZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1pLmFwcGVuZCgiZyIpLHc9WGd0KCk7dy54PWEueCx3Lnk9YS55LHcuZmlsbD1hLmZpbGwsdy53aWR0aD1mLndpZHRoLHcuaGVpZ2h0PWYuaGVpZ2h0LHcuY2xhc3M9ImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtIithLm51bSx3LnJ4PTMsdy5yeT0zLG5LKHAsdyksZSR0KGYpKGEudGV4dCxwLHcueCx3Lnksdy53aWR0aCx3LmhlaWdodCx7Y2xhc3M6ImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtIithLm51bX0sZixhLmNvbG91cil9O2xldCB0JHQ9LTE7Y29uc3QgTFdlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPWEueCtmLndpZHRoLzIsdz1pLmFwcGVuZCgiZyIpO3QkdCsrO2NvbnN0IG09MzAwKzUqMzA7dy5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsInRhc2siK3QkdCkuYXR0cigieDEiLHApLmF0dHIoInkxIixhLnkpLmF0dHIoIngyIixwKS5hdHRyKCJ5MiIsbSkuYXR0cigiY2xhc3MiLCJ0YXNrLWxpbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiNCAyIikuYXR0cigic3Ryb2tlIiwiIzY2NiIpLENXZSh3LHtjeDpwLGN5OjMwMCsoNS1hLnNjb3JlKSozMCxzY29yZTphLnNjb3JlfSk7Y29uc3QgYj1YZ3QoKTtiLng9YS54LGIueT1hLnksYi5maWxsPWEuZmlsbCxiLndpZHRoPWYud2lkdGgsYi5oZWlnaHQ9Zi5oZWlnaHQsYi5jbGFzcz0idGFzayB0YXNrLXR5cGUtIithLm51bSxiLnJ4PTMsYi5yeT0zLG5LKHcsYiksYS54KzE0LGUkdChmKShhLnRhc2ssdyxiLngsYi55LGIud2lkdGgsYi5oZWlnaHQse2NsYXNzOiJ0YXNrIn0sZixhLmNvbG91cil9LE1XZT1mdW5jdGlvbihpLGEpe25LKGkse3g6YS5zdGFydHgseTphLnN0YXJ0eSx3aWR0aDphLnN0b3B4LWEuc3RhcnR4LGhlaWdodDphLnN0b3B5LWEuc3RhcnR5LGZpbGw6YS5maWxsLGNsYXNzOiJyZWN0In0pLmxvd2VyKCl9LERXZT1mdW5jdGlvbigpe3JldHVybnt4OjAseTowLGZpbGw6dm9pZCAwLCJ0ZXh0LWFuY2hvciI6InN0YXJ0Iix3aWR0aDoxMDAsaGVpZ2h0OjEwMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowfX0sWGd0PWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsd2lkdGg6MTAwLGFuY2hvcjoic3RhcnQiLGhlaWdodDoxMDAscng6MCxyeTowfX0sZSR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSh3LG0sYixFLF8sQSxJLEIpe2NvbnN0IE49bS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixiK18vMikuYXR0cigieSIsRStBLzIrNSkuc3R5bGUoImZvbnQtY29sb3IiLEIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQodyk7cChOLEkpfWZ1bmN0aW9uIGEodyxtLGIsRSxfLEEsSSxCLE4pe2NvbnN0e3Rhc2tGb250U2l6ZTpSLHRhc2tGb250RmFtaWx5Onp9PUIsVz13LnNwbGl0KC88YnJccypcLz8+L2dpKTtmb3IobGV0IGV0PTA7ZXQ8Vy5sZW5ndGg7ZXQrKyl7Y29uc3Qgc3Q9ZXQqUi1SKihXLmxlbmd0aC0xKS8yLGF0PW0uYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYitfLzIpLmF0dHIoInkiLEUpLmF0dHIoImZpbGwiLE4pLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLFIpLnN0eWxlKCJmb250LWZhbWlseSIseik7YXQuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLGIrXy8yKS5hdHRyKCJkeSIsc3QpLnRleHQoV1tldF0pLGF0LmF0dHIoInkiLEUrQS8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIikscChhdCxJKX19ZnVuY3Rpb24gZih3LG0sYixFLF8sQSxJLEIpe2NvbnN0IE49bS5hcHBlbmQoInN3aXRjaCIpLHo9Ti5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixiKS5hdHRyKCJ5IixFKS5hdHRyKCJ3aWR0aCIsXykuYXR0cigiaGVpZ2h0IixBKS5hdHRyKCJwb3NpdGlvbiIsImZpeGVkIikuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7ei5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlLWNlbGwiKS5zdHlsZSgidGV4dC1hbGlnbiIsImNlbnRlciIpLnN0eWxlKCJ2ZXJ0aWNhbC1hbGlnbiIsIm1pZGRsZSIpLnRleHQodyksYSh3LE4sYixFLF8sQSxJLEIpLHAoeixJKX1mdW5jdGlvbiBwKHcsbSl7Zm9yKGNvbnN0IGIgaW4gbSliIGluIG0mJncuYXR0cihiLG1bYl0pfXJldHVybiBmdW5jdGlvbih3KXtyZXR1cm4gdy50ZXh0UGxhY2VtZW50PT09ImZvIj9mOncudGV4dFBsYWNlbWVudD09PSJvbGQiP2k6YX19KCksSVdlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93aGVhZCIpLmF0dHIoInJlZlgiLDUpLmF0dHIoInJlZlkiLDIpLmF0dHIoIm1hcmtlcldpZHRoIiw2KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwLDAgViA0IEw2LDIgWiIpfTtmdW5jdGlvbiBuJHQoaSxhKXtpLmVhY2goZnVuY3Rpb24oKXt2YXIgZj15cih0aGlzKSxwPWYudGV4dCgpLnNwbGl0KC8oXHMrfDxicj4pLykucmV2ZXJzZSgpLHcsbT1bXSxiPTEuMSxFPWYuYXR0cigieSIpLF89cGFyc2VGbG9hdChmLmF0dHIoImR5IikpLEE9Zi50ZXh0KG51bGwpLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixFKS5hdHRyKCJkeSIsXysiZW0iKTtmb3IobGV0IEk9MDtJPHAubGVuZ3RoO0krKyl3PXBbcC5sZW5ndGgtMS1JXSxtLnB1c2godyksQS50ZXh0KG0uam9pbigiICIpLnRyaW0oKSksKEEubm9kZSgpLmdldENvbXB1dGVkVGV4dExlbmd0aCgpPmF8fHc9PT0iPGJyPiIpJiYobS5wb3AoKSxBLnRleHQobS5qb2luKCIgIikudHJpbSgpKSx3PT09Ijxicj4iP209WyIiXTptPVt3XSxBPWYuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLDApLmF0dHIoInkiLEUpLmF0dHIoImR5IixiKyJlbSIpLnRleHQodykpfSl9Y29uc3QgT1dlPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHc9ZiVUV2UtMSxtPWkuYXBwZW5kKCJnIik7YS5zZWN0aW9uPXcsbS5hdHRyKCJjbGFzcyIsKGEuY2xhc3M/YS5jbGFzcysiICI6IiIpKyJ0aW1lbGluZS1ub2RlICIrKCJzZWN0aW9uLSIrdykpO2NvbnN0IGI9bS5hcHBlbmQoImciKSxFPW0uYXBwZW5kKCJnIiksQT1FLmFwcGVuZCgidGV4dCIpLnRleHQoYS5kZXNjcikuYXR0cigiZHkiLCIxZW0iKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuY2FsbChuJHQsYS53aWR0aCkubm9kZSgpLmdldEJCb3goKSxJPXAuZm9udFNpemUmJnAuZm9udFNpemUucmVwbGFjZT9wLmZvbnRTaXplLnJlcGxhY2UoInB4IiwiIik6cC5mb250U2l6ZTtyZXR1cm4gYS5oZWlnaHQ9QS5oZWlnaHQrSSoxLjEqLjUrYS5wYWRkaW5nLGEuaGVpZ2h0PU1hdGgubWF4KGEuaGVpZ2h0LGEubWF4SGVpZ2h0KSxhLndpZHRoPWEud2lkdGgrMiphLnBhZGRpbmcsRS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLndpZHRoLzIrIiwgIithLnBhZGRpbmcvMisiKSIpLEZXZShiLGEsdyksYX0sUFdlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPWkuYXBwZW5kKCJnIiksbT1wLmFwcGVuZCgidGV4dCIpLnRleHQoYS5kZXNjcikuYXR0cigiZHkiLCIxZW0iKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuY2FsbChuJHQsYS53aWR0aCkubm9kZSgpLmdldEJCb3goKSxiPWYuZm9udFNpemUmJmYuZm9udFNpemUucmVwbGFjZT9mLmZvbnRTaXplLnJlcGxhY2UoInB4IiwiIik6Zi5mb250U2l6ZTtyZXR1cm4gcC5yZW1vdmUoKSxtLmhlaWdodCtiKjEuMSouNSthLnBhZGRpbmd9LEZXZT1mdW5jdGlvbihpLGEsZil7aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsIm5vZGUtIithLmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIithLnR5cGUpLmF0dHIoImQiLGBNMCAke2EuaGVpZ2h0LTV9IHYkey1hLmhlaWdodCsyKjV9IHEwLC01IDUsLTUgaCR7YS53aWR0aC0yKjV9IHE1LDAgNSw1IHYke2EuaGVpZ2h0LTV9IEgwIFpgKSxpLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwibm9kZS1saW5lLSIrZikuYXR0cigieDEiLDApLmF0dHIoInkxIixhLmhlaWdodCkuYXR0cigieDIiLGEud2lkdGgpLmF0dHIoInkyIixhLmhlaWdodCl9LERUPXtkcmF3UmVjdDpuSyxkcmF3Q2lyY2xlOl9XZSxkcmF3U2VjdGlvbjpBV2UsZHJhd1RleHQ6Smp0LGRyYXdMYWJlbDpTV2UsZHJhd1Rhc2s6TFdlLGRyYXdCYWNrZ3JvdW5kUmVjdDpNV2UsZ2V0VGV4dE9iajpEV2UsZ2V0Tm90ZVJlY3Q6WGd0LGluaXRHcmFwaGljczpJV2UsZHJhd05vZGU6T1dlLGdldFZpcnR1YWxOb2RlSGVpZ2h0OlBXZX0sTldlPWZ1bmN0aW9uKGksYSxmLHApe3ZhciBYLHB0O2NvbnN0IHc9T2UoKSxtPXcubGVmdE1hcmdpbj8/NTA7VXQuZGVidWcoInRpbWVsaW5lIixwLmRiKTtjb25zdCBiPXcuc2VjdXJpdHlMZXZlbDtsZXQgRTtiPT09InNhbmRib3giJiYoRT15cigiI2kiK2EpKTtjb25zdCBBPXlyKGI9PT0ic2FuZGJveCI/RS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5Iikuc2VsZWN0KCIjIithKTtBLmFwcGVuZCgiZyIpO2NvbnN0IEk9cC5kYi5nZXRUYXNrcygpLEI9cC5kYi5nZXRDb21tb25EYigpLmdldERpYWdyYW1UaXRsZSgpO1V0LmRlYnVnKCJ0YXNrIixJKSxEVC5pbml0R3JhcGhpY3MoQSk7Y29uc3QgTj1wLmRiLmdldFNlY3Rpb25zKCk7VXQuZGVidWcoInNlY3Rpb25zIixOKTtsZXQgUj0wLHo9MCxXPTAsZXQ9MCxzdD01MCttLGF0PTUwO2V0PTUwO2xldCBidD0wLG10PSEwO04uZm9yRWFjaChmdW5jdGlvbihVKXtjb25zdCBUdD17bnVtYmVyOmJ0LGRlc2NyOlUsc2VjdGlvbjpidCx3aWR0aDoxNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6Un0sbnQ9RFQuZ2V0VmlydHVhbE5vZGVIZWlnaHQoQSxUdCx3KTtVdC5kZWJ1Zygic2VjdGlvbkhlaWdodCBiZWZvcmUgZHJhdyIsbnQpLFI9TWF0aC5tYXgoUixudCsyMCl9KTtsZXQgeXQ9MCxmdD0wO1V0LmRlYnVnKCJ0YXNrcy5sZW5ndGgiLEkubGVuZ3RoKTtmb3IoY29uc3RbVSxUdF1vZiBJLmVudHJpZXMoKSl7Y29uc3QgbnQ9e251bWJlcjpVLGRlc2NyOlR0LHNlY3Rpb246VHQuc2VjdGlvbix3aWR0aDoxNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6en0sSXQ9RFQuZ2V0VmlydHVhbE5vZGVIZWlnaHQoQSxudCx3KTtVdC5kZWJ1ZygidGFza0hlaWdodCBiZWZvcmUgZHJhdyIsSXQpLHo9TWF0aC5tYXgoeixJdCsyMCkseXQ9TWF0aC5tYXgoeXQsVHQuZXZlbnRzLmxlbmd0aCk7bGV0IE90PTA7Zm9yKGxldCBCdD0wO0J0PFR0LmV2ZW50cy5sZW5ndGg7QnQrKyl7Y29uc3QgWj17ZGVzY3I6VHQuZXZlbnRzW0J0XSxzZWN0aW9uOlR0LnNlY3Rpb24sbnVtYmVyOlR0LnNlY3Rpb24sd2lkdGg6MTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0OjUwfTtPdCs9RFQuZ2V0VmlydHVhbE5vZGVIZWlnaHQoQSxaLHcpfWZ0PU1hdGgubWF4KGZ0LE90KX1VdC5kZWJ1ZygibWF4U2VjdGlvbkhlaWdodCBiZWZvcmUgZHJhdyIsUiksVXQuZGVidWcoIm1heFRhc2tIZWlnaHQgYmVmb3JlIGRyYXciLHopLE4mJk4ubGVuZ3RoPjA/Ti5mb3JFYWNoKFU9Pntjb25zdCBUdD1JLmZpbHRlcihCdD0+QnQuc2VjdGlvbj09PVUpLG50PXtudW1iZXI6YnQsZGVzY3I6VSxzZWN0aW9uOmJ0LHdpZHRoOjIwMCpNYXRoLm1heChUdC5sZW5ndGgsMSktNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6Un07VXQuZGVidWcoInNlY3Rpb25Ob2RlIixudCk7Y29uc3QgSXQ9QS5hcHBlbmQoImciKSxPdD1EVC5kcmF3Tm9kZShJdCxudCxidCx3KTtVdC5kZWJ1Zygic2VjdGlvbk5vZGUgb3V0cHV0IixPdCksSXQuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7c3R9LCAke2V0fSlgKSxhdCs9Uis1MCxUdC5sZW5ndGg+MCYmciR0KEEsVHQsYnQsc3QsYXQseix3LHl0LGZ0LFIsITEpLHN0Kz0yMDAqTWF0aC5tYXgoVHQubGVuZ3RoLDEpLGF0PWV0LGJ0Kyt9KToobXQ9ITEsciR0KEEsSSxidCxzdCxhdCx6LHcseXQsZnQsUiwhMCkpO2NvbnN0IHV0PUEubm9kZSgpLmdldEJCb3goKTtVdC5kZWJ1ZygiYm91bmRzIix1dCksQiYmQS5hcHBlbmQoInRleHQiKS50ZXh0KEIpLmF0dHIoIngiLHV0LndpZHRoLzItbSkuYXR0cigiZm9udC1zaXplIiwiNGV4IikuYXR0cigiZm9udC13ZWlnaHQiLCJib2xkIikuYXR0cigieSIsMjApLFc9bXQ/Uit6KzE1MDp6KzEwMCxBLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGluZVdyYXBwZXIiKS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsbSkuYXR0cigieTEiLFcpLmF0dHIoIngyIix1dC53aWR0aCszKm0pLmF0dHIoInkyIixXKS5hdHRyKCJzdHJva2Utd2lkdGgiLDQpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigibWFya2VyLWVuZCIsInVybCgjYXJyb3doZWFkKSIpLGZUKHZvaWQgMCxBLCgoWD13LnRpbWVsaW5lKT09bnVsbD92b2lkIDA6WC5wYWRkaW5nKT8/NTAsKChwdD13LnRpbWVsaW5lKT09bnVsbD92b2lkIDA6cHQudXNlTWF4V2lkdGgpPz8hMSl9LHIkdD1mdW5jdGlvbihpLGEsZixwLHcsbSxiLEUsXyxBLEkpe3ZhciBCO2Zvcihjb25zdCBOIG9mIGEpe2NvbnN0IFI9e2Rlc2NyOk4udGFzayxzZWN0aW9uOmYsbnVtYmVyOmYsd2lkdGg6MTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0Om19O1V0LmRlYnVnKCJ0YXNrTm9kZSIsUik7Y29uc3Qgej1pLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGFza1dyYXBwZXIiKSxldD1EVC5kcmF3Tm9kZSh6LFIsZixiKS5oZWlnaHQ7aWYoVXQuZGVidWcoInRhc2tIZWlnaHQgYWZ0ZXIgZHJhdyIsZXQpLHouYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7cH0sICR7d30pYCksbT1NYXRoLm1heChtLGV0KSxOLmV2ZW50cyl7Y29uc3Qgc3Q9aS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxpbmVXcmFwcGVyIik7bGV0IGF0PW07dys9MTAwLGF0PWF0K0JXZShpLE4uZXZlbnRzLGYscCx3LGIpLHctPTEwMCxzdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIscCsxOTAvMikuYXR0cigieTEiLHcrbSkuYXR0cigieDIiLHArMTkwLzIpLmF0dHIoInkyIix3K20rKEk/bTpBKStfKzEyMCkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKS5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiNSw1Iil9cD1wKzIwMCxJJiYhKChCPWIudGltZWxpbmUpIT1udWxsJiZCLmRpc2FibGVNdWx0aWNvbG9yKSYmZisrfXc9dy0xMH0sQldlPWZ1bmN0aW9uKGksYSxmLHAsdyxtKXtsZXQgYj0wO2NvbnN0IEU9dzt3PXcrMTAwO2Zvcihjb25zdCBfIG9mIGEpe2NvbnN0IEE9e2Rlc2NyOl8sc2VjdGlvbjpmLG51bWJlcjpmLHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDo1MH07VXQuZGVidWcoImV2ZW50Tm9kZSIsQSk7Y29uc3QgST1pLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZXZlbnRXcmFwcGVyIiksTj1EVC5kcmF3Tm9kZShJLEEsZixtKS5oZWlnaHQ7Yj1iK04sSS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtwfSwgJHt3fSlgKSx3PXcrMTArTn1yZXR1cm4gdz1FLGJ9LFJXZT17c2V0Q29uZjooKT0+e30sZHJhdzpOV2V9LGpXZT1pPT57bGV0IGE9IiI7Zm9yKGxldCBmPTA7ZjxpLlRIRU1FX0NPTE9SX0xJTUlUO2YrKylpWyJsaW5lQ29sb3IiK2ZdPWlbImxpbmVDb2xvciIrZl18fGlbImNTY2FsZUludiIrZl0saVQoaVsibGluZUNvbG9yIitmXSk/aVsibGluZUNvbG9yIitmXT1icyhpWyJsaW5lQ29sb3IiK2ZdLDIwKTppWyJsaW5lQ29sb3IiK2ZdPSRzKGlbImxpbmVDb2xvciIrZl0sMjApO2ZvcihsZXQgZj0wO2Y8aS5USEVNRV9DT0xPUl9MSU1JVDtmKyspe2NvbnN0IHA9IiIrKDE3LTMqZik7YSs9YAogICAgLnNlY3Rpb24tJHtmLTF9IHJlY3QsIC5zZWN0aW9uLSR7Zi0xfSBwYXRoLCAuc2VjdGlvbi0ke2YtMX0gY2lyY2xlLCAuc2VjdGlvbi0ke2YtMX0gcGF0aCAgewogICAgICBmaWxsOiAke2lbImNTY2FsZSIrZl19OwogICAgfQogICAgLnNlY3Rpb24tJHtmLTF9IHRleHQgewogICAgIGZpbGw6ICR7aVsiY1NjYWxlTGFiZWwiK2ZdfTsKICAgIH0KICAgIC5ub2RlLWljb24tJHtmLTF9IHsKICAgICAgZm9udC1zaXplOiA0MHB4OwogICAgICBjb2xvcjogJHtpWyJjU2NhbGVMYWJlbCIrZl19OwogICAgfQogICAgLnNlY3Rpb24tZWRnZS0ke2YtMX17CiAgICAgIHN0cm9rZTogJHtpWyJjU2NhbGUiK2ZdfTsKICAgIH0KICAgIC5lZGdlLWRlcHRoLSR7Zi0xfXsKICAgICAgc3Ryb2tlLXdpZHRoOiAke3B9OwogICAgfQogICAgLnNlY3Rpb24tJHtmLTF9IGxpbmUgewogICAgICBzdHJva2U6ICR7aVsiY1NjYWxlSW52IitmXX0gOwogICAgICBzdHJva2Utd2lkdGg6IDM7CiAgICB9CgogICAgLmxpbmVXcmFwcGVyIGxpbmV7CiAgICAgIHN0cm9rZTogJHtpWyJjU2NhbGVMYWJlbCIrZl19IDsKICAgIH0KCiAgICAuZGlzYWJsZWQsIC5kaXNhYmxlZCBjaXJjbGUsIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogbGlnaHRncmF5OwogICAgfQogICAgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiAjZWZlZmVmOwogICAgfQogICAgYH1yZXR1cm4gYX0sJFdlPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntkYjpFV2UscmVuZGVyZXI6UldlLHBhcnNlcjprV2Usc3R5bGVzOmk9PmAKICAuZWRnZSB7CiAgICBzdHJva2Utd2lkdGg6IDM7CiAgfQogICR7aldlKGkpfQogIC5zZWN0aW9uLXJvb3QgcmVjdCwgLnNlY3Rpb24tcm9vdCBwYXRoLCAuc2VjdGlvbi1yb290IGNpcmNsZSAgewogICAgZmlsbDogJHtpLmdpdDB9OwogIH0KICAuc2VjdGlvbi1yb290IHRleHQgewogICAgZmlsbDogJHtpLmdpdEJyYW5jaExhYmVsMH07CiAgfQogIC5pY29uLWNvbnRhaW5lciB7CiAgICBoZWlnaHQ6MTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgfQogIC5lZGdlIHsKICAgIGZpbGw6IG5vbmU7CiAgfQogIC5ldmVudFdyYXBwZXIgIHsKICAgZmlsdGVyOiBicmlnaHRuZXNzKDEyMCUpOwogIH0KYH19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIFFndD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKG10LHl0LGZ0LHV0KXtmb3IoZnQ9ZnR8fHt9LHV0PW10Lmxlbmd0aDt1dC0tO2Z0W210W3V0XV09eXQpO3JldHVybiBmdH0sYT1bMSw0XSxmPVsxLDEzXSxwPVsxLDEyXSx3PVsxLDE1XSxtPVsxLDE2XSxiPVsxLDIwXSxFPVsxLDE5XSxfPVs2LDcsOF0sQT1bMSwyNl0sST1bMSwyNF0sQj1bMSwyNV0sTj1bNiw3LDExXSxSPVsxLDYsMTMsMTUsMTYsMTksMjJdLHo9WzEsMzNdLFc9WzEsMzRdLGV0PVsxLDYsNywxMSwxMywxNSwxNiwxOSwyMl0sc3Q9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1pbmRNYXA6NCxzcGFjZUxpbmVzOjUsU1BBQ0VMSU5FOjYsTkw6NyxNSU5ETUFQOjgsZG9jdW1lbnQ6OSxzdG9wOjEwLEVPRjoxMSxzdGF0ZW1lbnQ6MTIsU1BBQ0VMSVNUOjEzLG5vZGU6MTQsSUNPTjoxNSxDTEFTUzoxNixub2RlV2l0aElkOjE3LG5vZGVXaXRob3V0SWQ6MTgsTk9ERV9EU1RBUlQ6MTksTk9ERV9ERVNDUjoyMCxOT0RFX0RFTkQ6MjEsTk9ERV9JRDoyMiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNjoiU1BBQ0VMSU5FIiw3OiJOTCIsODoiTUlORE1BUCIsMTE6IkVPRiIsMTM6IlNQQUNFTElTVCIsMTU6IklDT04iLDE2OiJDTEFTUyIsMTk6Ik5PREVfRFNUQVJUIiwyMDoiTk9ERV9ERVNDUiIsMjE6Ik5PREVfREVORCIsMjI6Ik5PREVfSUQifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMl0sWzUsMV0sWzUsMl0sWzUsMl0sWzQsMl0sWzQsM10sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDJdLFsxMCwyXSxbOSwzXSxbOSwyXSxbMTIsMl0sWzEyLDJdLFsxMiwyXSxbMTIsMV0sWzEyLDFdLFsxMiwxXSxbMTIsMV0sWzEyLDFdLFsxNCwxXSxbMTQsMV0sWzE4LDNdLFsxNywxXSxbMTcsNF1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oeXQsZnQsdXQsdnQsWCxwdCxVKXt2YXIgVHQ9cHQubGVuZ3RoLTE7c3dpdGNoKFgpe2Nhc2UgNjpjYXNlIDc6cmV0dXJuIHZ0O2Nhc2UgODp2dC5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBOTCAiKTticmVhaztjYXNlIDk6dnQuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgRU9GICIpO2JyZWFrO2Nhc2UgMTE6dnQuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgTkwyICIpO2JyZWFrO2Nhc2UgMTI6dnQuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgRU9GMiAiKTticmVhaztjYXNlIDE1OnZ0LmdldExvZ2dlcigpLmluZm8oIk5vZGU6ICIscHRbVHRdLmlkKSx2dC5hZGROb2RlKHB0W1R0LTFdLmxlbmd0aCxwdFtUdF0uaWQscHRbVHRdLmRlc2NyLHB0W1R0XS50eXBlKTticmVhaztjYXNlIDE2OnZ0LmdldExvZ2dlcigpLnRyYWNlKCJJY29uOiAiLHB0W1R0XSksdnQuZGVjb3JhdGVOb2RlKHtpY29uOnB0W1R0XX0pO2JyZWFrO2Nhc2UgMTc6Y2FzZSAyMTp2dC5kZWNvcmF0ZU5vZGUoe2NsYXNzOnB0W1R0XX0pO2JyZWFrO2Nhc2UgMTg6dnQuZ2V0TG9nZ2VyKCkudHJhY2UoIlNQQUNFTElTVCIpO2JyZWFrO2Nhc2UgMTk6dnQuZ2V0TG9nZ2VyKCkudHJhY2UoIk5vZGU6ICIscHRbVHRdLmlkKSx2dC5hZGROb2RlKDAscHRbVHRdLmlkLHB0W1R0XS5kZXNjcixwdFtUdF0udHlwZSk7YnJlYWs7Y2FzZSAyMDp2dC5kZWNvcmF0ZU5vZGUoe2ljb246cHRbVHRdfSk7YnJlYWs7Y2FzZSAyNTp2dC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBmb3VuZCAuLiIscHRbVHQtMl0pLHRoaXMuJD17aWQ6cHRbVHQtMV0sZGVzY3I6cHRbVHQtMV0sdHlwZTp2dC5nZXRUeXBlKHB0W1R0LTJdLHB0W1R0XSl9O2JyZWFrO2Nhc2UgMjY6dGhpcy4kPXtpZDpwdFtUdF0sZGVzY3I6cHRbVHRdLHR5cGU6dnQubm9kZVR5cGUuREVGQVVMVH07YnJlYWs7Y2FzZSAyNzp2dC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBmb3VuZCAuLiIscHRbVHQtM10pLHRoaXMuJD17aWQ6cHRbVHQtM10sZGVzY3I6cHRbVHQtMV0sdHlwZTp2dC5nZXRUeXBlKHB0W1R0LTJdLHB0W1R0XSl9O2JyZWFrfX0sdGFibGU6W3szOjEsNDoyLDU6Myw2OlsxLDVdLDg6YX0sezE6WzNdfSx7MTpbMiwxXX0sezQ6Niw2OlsxLDddLDc6WzEsOF0sODphfSx7NjpmLDc6WzEsMTBdLDk6OSwxMjoxMSwxMzpwLDE0OjE0LDE1OncsMTY6bSwxNzoxNywxODoxOCwxOTpiLDIyOkV9LGkoXyxbMiwzXSksezE6WzIsMl19LGkoXyxbMiw0XSksaShfLFsyLDVdKSx7MTpbMiw2XSw2OmYsMTI6MjEsMTM6cCwxNDoxNCwxNTp3LDE2Om0sMTc6MTcsMTg6MTgsMTk6YiwyMjpFfSx7NjpmLDk6MjIsMTI6MTEsMTM6cCwxNDoxNCwxNTp3LDE2Om0sMTc6MTcsMTg6MTgsMTk6YiwyMjpFfSx7NjpBLDc6SSwxMDoyMywxMTpCfSxpKE4sWzIsMjJdLHsxNzoxNywxODoxOCwxNDoyNywxNTpbMSwyOF0sMTY6WzEsMjldLDE5OmIsMjI6RX0pLGkoTixbMiwxOF0pLGkoTixbMiwxOV0pLGkoTixbMiwyMF0pLGkoTixbMiwyMV0pLGkoTixbMiwyM10pLGkoTixbMiwyNF0pLGkoTixbMiwyNl0sezE5OlsxLDMwXX0pLHsyMDpbMSwzMV19LHs2OkEsNzpJLDEwOjMyLDExOkJ9LHsxOlsyLDddLDY6ZiwxMjoyMSwxMzpwLDE0OjE0LDE1OncsMTY6bSwxNzoxNywxODoxOCwxOTpiLDIyOkV9LGkoUixbMiwxNF0sezc6eiwxMTpXfSksaShldCxbMiw4XSksaShldCxbMiw5XSksaShldCxbMiwxMF0pLGkoTixbMiwxNV0pLGkoTixbMiwxNl0pLGkoTixbMiwxN10pLHsyMDpbMSwzNV19LHsyMTpbMSwzNl19LGkoUixbMiwxM10sezc6eiwxMTpXfSksaShldCxbMiwxMV0pLGkoZXQsWzIsMTJdKSx7MjE6WzEsMzddfSxpKE4sWzIsMjVdKSxpKE4sWzIsMjddKV0sZGVmYXVsdEFjdGlvbnM6ezI6WzIsMV0sNjpbMiwyXX0scGFyc2VFcnJvcjpmdW5jdGlvbih5dCxmdCl7aWYoZnQucmVjb3ZlcmFibGUpdGhpcy50cmFjZSh5dCk7ZWxzZXt2YXIgdXQ9bmV3IEVycm9yKHl0KTt0aHJvdyB1dC5oYXNoPWZ0LHV0fX0scGFyc2U6ZnVuY3Rpb24oeXQpe3ZhciBmdD10aGlzLHV0PVswXSx2dD1bXSxYPVtudWxsXSxwdD1bXSxVPXRoaXMudGFibGUsVHQ9IiIsbnQ9MCxJdD0wLE90PTIsQnQ9MSxFdD1wdC5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxaPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksQ3Q9e3l5Ont9fTtmb3IodmFyIHh0IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseHQpJiYoQ3QueXlbeHRdPXRoaXMueXlbeHRdKTtaLnNldElucHV0KHl0LEN0Lnl5KSxDdC55eS5sZXhlcj1aLEN0Lnl5LnBhcnNlcj10aGlzLHR5cGVvZiBaLnl5bGxvYz4idSImJihaLnl5bGxvYz17fSk7dmFyIEh0PVoueXlsbG9jO3B0LnB1c2goSHQpO3ZhciBMZT1aLm9wdGlvbnMmJloub3B0aW9ucy5yYW5nZXM7dHlwZW9mIEN0Lnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPUN0Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIEZ0KCl7dmFyIFBlO3JldHVybiBQZT12dC5wb3AoKXx8Wi5sZXgoKXx8QnQsdHlwZW9mIFBlIT0ibnVtYmVyIiYmKFBlIGluc3RhbmNlb2YgQXJyYXkmJih2dD1QZSxQZT12dC5wb3AoKSksUGU9ZnQuc3ltYm9sc19bUGVdfHxQZSksUGV9Zm9yKHZhciBnbixTZSxtZSxWZSxZZT17fSxjZSxrZSx6dCxyZTs7KXtpZihTZT11dFt1dC5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tTZV0/bWU9dGhpcy5kZWZhdWx0QWN0aW9uc1tTZV06KChnbj09PW51bGx8fHR5cGVvZiBnbj4idSIpJiYoZ249RnQoKSksbWU9VVtTZV0mJlVbU2VdW2duXSksdHlwZW9mIG1lPiJ1Inx8IW1lLmxlbmd0aHx8IW1lWzBdKXt2YXIgc2U9IiI7cmU9W107Zm9yKGNlIGluIFVbU2VdKXRoaXMudGVybWluYWxzX1tjZV0mJmNlPk90JiZyZS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bY2VdKyInIik7Wi5zaG93UG9zaXRpb24/c2U9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisobnQrMSkrYDoKYCtaLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArcmUuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tnbl18fGduKSsiJyI6c2U9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisobnQrMSkrIjogVW5leHBlY3RlZCAiKyhnbj09QnQ/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bZ25dfHxnbikrIiciKSx0aGlzLnBhcnNlRXJyb3Ioc2Use3RleHQ6Wi5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bZ25dfHxnbixsaW5lOloueXlsaW5lbm8sbG9jOkh0LGV4cGVjdGVkOnJlfSl9aWYobWVbMF1pbnN0YW5jZW9mIEFycmF5JiZtZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK1NlKyIsIHRva2VuOiAiK2duKTtzd2l0Y2gobWVbMF0pe2Nhc2UgMTp1dC5wdXNoKGduKSxYLnB1c2goWi55eXRleHQpLHB0LnB1c2goWi55eWxsb2MpLHV0LnB1c2gobWVbMV0pLGduPW51bGwsSXQ9Wi55eWxlbmcsVHQ9Wi55eXRleHQsbnQ9Wi55eWxpbmVubyxIdD1aLnl5bGxvYzticmVhaztjYXNlIDI6aWYoa2U9dGhpcy5wcm9kdWN0aW9uc19bbWVbMV1dWzFdLFllLiQ9WFtYLmxlbmd0aC1rZV0sWWUuXyQ9e2ZpcnN0X2xpbmU6cHRbcHQubGVuZ3RoLShrZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOnB0W3B0Lmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnB0W3B0Lmxlbmd0aC0oa2V8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46cHRbcHQubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxMZSYmKFllLl8kLnJhbmdlPVtwdFtwdC5sZW5ndGgtKGtlfHwxKV0ucmFuZ2VbMF0scHRbcHQubGVuZ3RoLTFdLnJhbmdlWzFdXSksVmU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KFllLFtUdCxJdCxudCxDdC55eSxtZVsxXSxYLHB0XS5jb25jYXQoRXQpKSx0eXBlb2YgVmU8InUiKXJldHVybiBWZTtrZSYmKHV0PXV0LnNsaWNlKDAsLTEqa2UqMiksWD1YLnNsaWNlKDAsLTEqa2UpLHB0PXB0LnNsaWNlKDAsLTEqa2UpKSx1dC5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW21lWzFdXVswXSksWC5wdXNoKFllLiQpLHB0LnB1c2goWWUuXyQpLHp0PVVbdXRbdXQubGVuZ3RoLTJdXVt1dFt1dC5sZW5ndGgtMV1dLHV0LnB1c2goenQpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxhdD1mdW5jdGlvbigpe3ZhciBtdD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihmdCx1dCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihmdCx1dCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoZnQpfSxzZXRJbnB1dDpmdW5jdGlvbih5dCxmdCl7cmV0dXJuIHRoaXMueXk9ZnR8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXl0LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB5dD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9eXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXl0LHRoaXMubWF0Y2hlZCs9eXQ7dmFyIGZ0PXl0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gZnQ/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHl0fSx1bnB1dDpmdW5jdGlvbih5dCl7dmFyIGZ0PXl0Lmxlbmd0aCx1dD15dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXl0K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1mdCksdGhpcy5vZmZzZXQtPWZ0O3ZhciB2dD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSx1dC5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXV0Lmxlbmd0aC0xKTt2YXIgWD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dXQ/KHV0Lmxlbmd0aD09PXZ0Lmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrdnRbdnQubGVuZ3RoLXV0Lmxlbmd0aF0ubGVuZ3RoLXV0WzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZnR9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bWFswXSxYWzBdK3RoaXMueXlsZW5nLWZ0XSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oeXQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh5dCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgeXQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih5dC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3l0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHl0PXRoaXMubWF0Y2g7cmV0dXJuIHl0Lmxlbmd0aDwyMCYmKHl0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC15dC5sZW5ndGgpKSwoeXQuc3Vic3RyKDAsMjApKyh5dC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHl0PXRoaXMucGFzdElucHV0KCksZnQ9bmV3IEFycmF5KHl0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHl0K3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtmdCsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oeXQsZnQpe3ZhciB1dCx2dCxYO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihYPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFgueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksdnQ9eXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLHZ0JiYodGhpcy55eWxpbmVubys9dnQubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46dnQ/dnRbdnQubGVuZ3RoLTFdLmxlbmd0aC12dFt2dC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit5dFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz15dFswXSx0aGlzLm1hdGNoKz15dFswXSx0aGlzLm1hdGNoZXM9eXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoeXRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXl0WzBdLHV0PXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGZ0LHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLHV0KXJldHVybiB1dDtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgcHQgaW4gWCl0aGlzW3B0XT1YW3B0XTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciB5dCxmdCx1dCx2dDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBYPXRoaXMuX2N1cnJlbnRSdWxlcygpLHB0PTA7cHQ8WC5sZW5ndGg7cHQrKylpZih1dD10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW1hbcHRdXSksdXQmJighZnR8fHV0WzBdLmxlbmd0aD5mdFswXS5sZW5ndGgpKXtpZihmdD11dCx2dD1wdCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZih5dD10aGlzLnRlc3RfbWF0Y2godXQsWFtwdF0pLHl0IT09ITEpcmV0dXJuIHl0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZnQ9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZnQ/KHl0PXRoaXMudGVzdF9tYXRjaChmdCxYW3Z0XSkseXQhPT0hMT95dDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIGZ0PXRoaXMubmV4dCgpO3JldHVybiBmdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oZnQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChmdCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIGZ0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIGZ0PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oZnQpe3JldHVybiBmdD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKGZ0fHwwKSxmdD49MD90aGlzLmNvbmRpdGlvblN0YWNrW2Z0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihmdCl7dGhpcy5iZWdpbihmdCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oZnQsdXQsdnQsWCl7c3dpdGNoKHZ0KXtjYXNlIDA6cmV0dXJuIGZ0LmdldExvZ2dlcigpLnRyYWNlKCJGb3VuZCBjb21tZW50Iix1dC55eXRleHQpLDY7Y2FzZSAxOnJldHVybiA4O2Nhc2UgMjp0aGlzLmJlZ2luKCJDTEFTUyIpO2JyZWFrO2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE2O2Nhc2UgNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA1OmZ0LmdldExvZ2dlcigpLnRyYWNlKCJCZWdpbiBpY29uIiksdGhpcy5iZWdpbigiSUNPTiIpO2JyZWFrO2Nhc2UgNjpyZXR1cm4gZnQuZ2V0TG9nZ2VyKCkudHJhY2UoIlNQQUNFTElORSIpLDY7Y2FzZSA3OnJldHVybiA3O2Nhc2UgODpyZXR1cm4gMTU7Y2FzZSA5OmZ0LmdldExvZ2dlcigpLnRyYWNlKCJlbmQgaWNvbiIpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEwOnJldHVybiBmdC5nZXRMb2dnZXIoKS50cmFjZSgiRXhwbG9kaW5nIG5vZGUiKSx0aGlzLmJlZ2luKCJOT0RFIiksMTk7Y2FzZSAxMTpyZXR1cm4gZnQuZ2V0TG9nZ2VyKCkudHJhY2UoIkNsb3VkIiksdGhpcy5iZWdpbigiTk9ERSIpLDE5O2Nhc2UgMTI6cmV0dXJuIGZ0LmdldExvZ2dlcigpLnRyYWNlKCJFeHBsb3Npb24gQmFuZyIpLHRoaXMuYmVnaW4oIk5PREUiKSwxOTtjYXNlIDEzOnJldHVybiBmdC5nZXRMb2dnZXIoKS50cmFjZSgiQ2xvdWQgQmFuZyIpLHRoaXMuYmVnaW4oIk5PREUiKSwxOTtjYXNlIDE0OnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMTk7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDE5O2Nhc2UgMTY6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwxOTtjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMTk7Y2FzZSAxODpyZXR1cm4gMTM7Y2FzZSAxOTpyZXR1cm4gMjI7Y2FzZSAyMDpyZXR1cm4gMTE7Y2FzZSAyMTp0aGlzLmJlZ2luKCJOU1RSMiIpO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIk5PREVfREVTQ1IiO2Nhc2UgMjM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjQ6ZnQuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0YXJ0aW5nIE5TVFIiKSx0aGlzLmJlZ2luKCJOU1RSIik7YnJlYWs7Y2FzZSAyNTpyZXR1cm4gZnQuZ2V0TG9nZ2VyKCkudHJhY2UoImRlc2NyaXB0aW9uOiIsdXQueXl0ZXh0KSwiTk9ERV9ERVNDUiI7Y2FzZSAyNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGZ0LmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCApKSIpLCJOT0RFX0RFTkQiO2Nhc2UgMjg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxmdC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKSIpLCJOT0RFX0RFTkQiO2Nhc2UgMjk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxmdC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgLi4uIix1dC55eXRleHQpLCJOT0RFX0RFTkQiO2Nhc2UgMzA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxmdC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKCgiKSwiTk9ERV9ERU5EIjtjYXNlIDMxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksZnQuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgtIiksIk5PREVfREVORCI7Y2FzZSAzMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGZ0LmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAoLSIpLCJOT0RFX0RFTkQiO2Nhc2UgMzM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxmdC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKCgiKSwiTk9ERV9ERU5EIjtjYXNlIDM0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksZnQuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7Y2FzZSAzNTpyZXR1cm4gZnQuZ2V0TG9nZ2VyKCkudHJhY2UoIkxvbmcgZGVzY3JpcHRpb246Iix1dC55eXRleHQpLDIwO2Nhc2UgMzY6cmV0dXJuIGZ0LmdldExvZ2dlcigpLnRyYWNlKCJMb25nIGRlc2NyaXB0aW9uOiIsdXQueXl0ZXh0KSwyMH19LHJ1bGVzOlsvXig/OlxzKiUlLiopL2ksL14oPzptaW5kbWFwXGIpL2ksL14oPzo6OjopL2ksL14oPzouKykvaSwvXig/OlxuKS9pLC9eKD86OjppY29uXCgpL2ksL14oPzpbXHNdK1tcbl0pL2ksL14oPzpbXG5dKykvaSwvXig/OlteXCldKykvaSwvXig/OlwpKS9pLC9eKD86LVwpKS9pLC9eKD86XCgtKS9pLC9eKD86XClcKSkvaSwvXig/OlwpKS9pLC9eKD86XChcKCkvaSwvXig/Olx7XHspL2ksL14oPzpcKCkvaSwvXig/OlxbKS9pLC9eKD86W1xzXSspL2ksL14oPzpbXlwoXFtcblwpXHtcfV0rKS9pLC9eKD86JCkvaSwvXig/OlsiXVtgXSkvaSwvXig/OlteYCJdKykvaSwvXig/OltgXVsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0rKS9pLC9eKD86WyJdKS9pLC9eKD86W1wpXVwpKS9pLC9eKD86W1wpXSkvaSwvXig/OltcXV0pL2ksL14oPzpcfVx9KS9pLC9eKD86XCgtKS9pLC9eKD86LVwpKS9pLC9eKD86XChcKCkvaSwvXig/OlwoKS9pLC9eKD86W15cKVxdXChcfV0rKS9pLC9eKD86LisoPyFcKFwoKSkvaV0sY29uZGl0aW9uczp7Q0xBU1M6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sSUNPTjp7cnVsZXM6WzgsOV0saW5jbHVzaXZlOiExfSxOU1RSMjp7cnVsZXM6WzIyLDIzXSxpbmNsdXNpdmU6ITF9LE5TVFI6e3J1bGVzOlsyNSwyNl0saW5jbHVzaXZlOiExfSxOT0RFOntydWxlczpbMjEsMjQsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDUsNiw3LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIG10fSgpO3N0LmxleGVyPWF0O2Z1bmN0aW9uIGJ0KCl7dGhpcy55eT17fX1yZXR1cm4gYnQucHJvdG90eXBlPXN0LHN0LlBhcnNlcj1idCxuZXcgYnR9KCk7UWd0LnBhcnNlcj1RZ3Q7Y29uc3QgeldlPVFndCxyTj1pPT5RMShpLE9lKCkpO2xldCBjdz1bXSxpJHQ9MCxaZ3Q9e307Y29uc3QgcVdlPSgpPT57Y3c9W10saSR0PTAsWmd0PXt9fSxIV2U9ZnVuY3Rpb24oaSl7Zm9yKGxldCBhPWN3Lmxlbmd0aC0xO2E+PTA7YS0tKWlmKGN3W2FdLmxldmVsPGkpcmV0dXJuIGN3W2FdO3JldHVybiBudWxsfSxWV2U9KCk9PmN3Lmxlbmd0aD4wP2N3WzBdOm51bGwsR1dlPShpLGEsZixwKT0+e1V0LmluZm8oImFkZE5vZGUiLGksYSxmLHApO2NvbnN0IHc9T2UoKSxtPXtpZDppJHQrKyxub2RlSWQ6ck4oYSksbGV2ZWw6aSxkZXNjcjpyTihmKSx0eXBlOnAsY2hpbGRyZW46W10sd2lkdGg6T2UoKS5taW5kbWFwLm1heE5vZGVXaWR0aH07c3dpdGNoKG0udHlwZSl7Y2FzZSBVdS5ST1VOREVEX1JFQ1Q6bS5wYWRkaW5nPTIqdy5taW5kbWFwLnBhZGRpbmc7YnJlYWs7Y2FzZSBVdS5SRUNUOm0ucGFkZGluZz0yKncubWluZG1hcC5wYWRkaW5nO2JyZWFrO2Nhc2UgVXUuSEVYQUdPTjptLnBhZGRpbmc9Mip3Lm1pbmRtYXAucGFkZGluZzticmVhaztkZWZhdWx0Om0ucGFkZGluZz13Lm1pbmRtYXAucGFkZGluZ31jb25zdCBiPUhXZShpKTtpZihiKWIuY2hpbGRyZW4ucHVzaChtKSxjdy5wdXNoKG0pO2Vsc2UgaWYoY3cubGVuZ3RoPT09MCljdy5wdXNoKG0pO2Vsc2V7bGV0IEU9bmV3IEVycm9yKCdUaGVyZSBjYW4gYmUgb25seSBvbmUgcm9vdC4gTm8gcGFyZW50IGNvdWxkIGJlIGZvdW5kIGZvciAoIicrbS5kZXNjcisnIiknKTt0aHJvdyBFLmhhc2g9e3RleHQ6ImJyYW5jaCAiK25hbWUsdG9rZW46ImJyYW5jaCAiK25hbWUsbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyciY2hlY2tvdXQgJytuYW1lKyciJ119LEV9fSxVdT17REVGQVVMVDowLE5PX0JPUkRFUjowLFJPVU5ERURfUkVDVDoxLFJFQ1Q6MixDSVJDTEU6MyxDTE9VRDo0LEJBTkc6NSxIRVhBR09OOjZ9LFVXZT0oaSxhKT0+e3N3aXRjaChVdC5kZWJ1ZygiSW4gZ2V0IHR5cGUiLGksYSksaSl7Y2FzZSJbIjpyZXR1cm4gVXUuUkVDVDtjYXNlIigiOnJldHVybiBhPT09IikiP1V1LlJPVU5ERURfUkVDVDpVdS5DTE9VRDtjYXNlIigoIjpyZXR1cm4gVXUuQ0lSQ0xFO2Nhc2UiKSI6cmV0dXJuIFV1LkNMT1VEO2Nhc2UiKSkiOnJldHVybiBVdS5CQU5HO2Nhc2Uie3siOnJldHVybiBVdS5IRVhBR09OO2RlZmF1bHQ6cmV0dXJuIFV1LkRFRkFVTFR9fSxzJHQ9KGksYSk9PntaZ3RbaV09YX0sV1dlPWk9Pntjb25zdCBhPWN3W2N3Lmxlbmd0aC0xXTtpJiZpLmljb24mJihhLmljb249ck4oaS5pY29uKSksaSYmaS5jbGFzcyYmKGEuY2xhc3M9ck4oaS5jbGFzcykpfSxJVD1pPT57c3dpdGNoKGkpe2Nhc2UgVXUuREVGQVVMVDpyZXR1cm4ibm8tYm9yZGVyIjtjYXNlIFV1LlJFQ1Q6cmV0dXJuInJlY3QiO2Nhc2UgVXUuUk9VTkRFRF9SRUNUOnJldHVybiJyb3VuZGVkLXJlY3QiO2Nhc2UgVXUuQ0lSQ0xFOnJldHVybiJjaXJjbGUiO2Nhc2UgVXUuQ0xPVUQ6cmV0dXJuImNsb3VkIjtjYXNlIFV1LkJBTkc6cmV0dXJuImJhbmciO2Nhc2UgVXUuSEVYQUdPTjpyZXR1cm4iaGV4Z29uIjtkZWZhdWx0OnJldHVybiJuby1ib3JkZXIifX07bGV0IGEkdDtjb25zdCBZV2U9aT0+e2EkdD1pfSxLV2U9KCk9PlV0LFhXZT1pPT5jd1tpXSxKZ3Q9aT0+Wmd0W2ldLFFXZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYWRkTm9kZTpHV2UsY2xlYXI6cVdlLGRlY29yYXRlTm9kZTpXV2UsZ2V0RWxlbWVudEJ5SWQ6Smd0LGdldExvZ2dlcjpLV2UsZ2V0TWluZG1hcDpWV2UsZ2V0Tm9kZUJ5SWQ6WFdlLGdldFR5cGU6VVdlLG5vZGVUeXBlOlV1LGdldCBwYXJzZUVycm9yKCl7cmV0dXJuIGEkdH0sc2FuaXRpemVUZXh0OnJOLHNldEVsZW1lbnRGb3JJZDpzJHQsc2V0RXJyb3JIYW5kbGVyOllXZSx0eXBlMlN0cjpJVH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxvJHQ9MTIsWldlPWZ1bmN0aW9uKGksYSxmKXtpLmFwcGVuZCgicGF0aCIpLmF0dHIoImlkIiwibm9kZS0iK2EuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK0lUKGEudHlwZSkpLmF0dHIoImQiLGBNMCAke2EuaGVpZ2h0LTV9IHYkey1hLmhlaWdodCsyKjV9IHEwLC01IDUsLTUgaCR7YS53aWR0aC0yKjV9IHE1LDAgNSw1IHYke2EuaGVpZ2h0LTV9IEgwIFpgKSxpLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwibm9kZS1saW5lLSIrZikuYXR0cigieDEiLDApLmF0dHIoInkxIixhLmhlaWdodCkuYXR0cigieDIiLGEud2lkdGgpLmF0dHIoInkyIixhLmhlaWdodCl9LEpXZT1mdW5jdGlvbihpLGEpe2kuYXBwZW5kKCJyZWN0IikuYXR0cigiaWQiLCJub2RlLSIrYS5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrSVQoYS50eXBlKSkuYXR0cigiaGVpZ2h0IixhLmhlaWdodCkuYXR0cigid2lkdGgiLGEud2lkdGgpfSx0WWU9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPWEud2lkdGgscD1hLmhlaWdodCx3PS4xNSpmLG09LjI1KmYsYj0uMzUqZixFPS4yKmY7aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsIm5vZGUtIithLmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIitJVChhLnR5cGUpKS5hdHRyKCJkIixgTTAgMCBhJHt3fSwke3d9IDAgMCwxICR7ZiouMjV9LCR7LTEqZiouMX0KICAgICAgYSR7Yn0sJHtifSAxIDAsMSAke2YqLjR9LCR7LTEqZiouMX0KICAgICAgYSR7bX0sJHttfSAxIDAsMSAke2YqLjM1fSwkezEqZiouMn0KCiAgICAgIGEke3d9LCR7d30gMSAwLDEgJHtmKi4xNX0sJHsxKnAqLjM1fQogICAgICBhJHtFfSwke0V9IDEgMCwxICR7LTEqZiouMTV9LCR7MSpwKi42NX0KCiAgICAgIGEke219LCR7d30gMSAwLDEgJHstMSpmKi4yNX0sJHtmKi4xNX0KICAgICAgYSR7Yn0sJHtifSAxIDAsMSAkey0xKmYqLjV9LDAKICAgICAgYSR7d30sJHt3fSAxIDAsMSAkey0xKmYqLjI1fSwkey0xKmYqLjE1fQoKICAgICAgYSR7d30sJHt3fSAxIDAsMSAkey0xKmYqLjF9LCR7LTEqcCouMzV9CiAgICAgIGEke0V9LCR7RX0gMSAwLDEgJHtmKi4xfSwkey0xKnAqLjY1fQoKICAgIEgwIFYwIFpgKX0sZVllPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1hLndpZHRoLHA9YS5oZWlnaHQsdz0uMTUqZjtpLmFwcGVuZCgicGF0aCIpLmF0dHIoImlkIiwibm9kZS0iK2EuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK0lUKGEudHlwZSkpLmF0dHIoImQiLGBNMCAwIGEke3d9LCR7d30gMSAwLDAgJHtmKi4yNX0sJHstMSpwKi4xfQogICAgICBhJHt3fSwke3d9IDEgMCwwICR7ZiouMjV9LDAKICAgICAgYSR7d30sJHt3fSAxIDAsMCAke2YqLjI1fSwwCiAgICAgIGEke3d9LCR7d30gMSAwLDAgJHtmKi4yNX0sJHsxKnAqLjF9CgogICAgICBhJHt3fSwke3d9IDEgMCwwICR7ZiouMTV9LCR7MSpwKi4zM30KICAgICAgYSR7dyouOH0sJHt3Ki44fSAxIDAsMCAwLCR7MSpwKi4zNH0KICAgICAgYSR7d30sJHt3fSAxIDAsMCAkey0xKmYqLjE1fSwkezEqcCouMzN9CgogICAgICBhJHt3fSwke3d9IDEgMCwwICR7LTEqZiouMjV9LCR7cCouMTV9CiAgICAgIGEke3d9LCR7d30gMSAwLDAgJHstMSpmKi4yNX0sMAogICAgICBhJHt3fSwke3d9IDEgMCwwICR7LTEqZiouMjV9LDAKICAgICAgYSR7d30sJHt3fSAxIDAsMCAkey0xKmYqLjI1fSwkey0xKnAqLjE1fQoKICAgICAgYSR7d30sJHt3fSAxIDAsMCAkey0xKmYqLjF9LCR7LTEqcCouMzN9CiAgICAgIGEke3cqLjh9LCR7dyouOH0gMSAwLDAgMCwkey0xKnAqLjM0fQogICAgICBhJHt3fSwke3d9IDEgMCwwICR7ZiouMX0sJHstMSpwKi4zM30KCiAgICBIMCBWMCBaYCl9LG5ZZT1mdW5jdGlvbihpLGEpe2kuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJpZCIsIm5vZGUtIithLmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIitJVChhLnR5cGUpKS5hdHRyKCJyIixhLndpZHRoLzIpfTtmdW5jdGlvbiByWWUoaSxhLGYscCx3KXtyZXR1cm4gaS5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLHAubWFwKGZ1bmN0aW9uKG0pe3JldHVybiBtLngrIiwiK20ueX0pLmpvaW4oIiAiKSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHcud2lkdGgtYSkvMisiLCAiK2YrIikiKX1jb25zdCBpWWU9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPWEuaGVpZ2h0LHc9Zi80LG09YS53aWR0aC1hLnBhZGRpbmcrMip3LGI9W3t4OncseTowfSx7eDptLXcseTowfSx7eDptLHk6LWYvMn0se3g6bS13LHk6LWZ9LHt4OncseTotZn0se3g6MCx5Oi1mLzJ9XTtyWWUoaSxtLGYsYixhKX0sc1llPWZ1bmN0aW9uKGksYSl7aS5hcHBlbmQoInJlY3QiKS5hdHRyKCJpZCIsIm5vZGUtIithLmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIitJVChhLnR5cGUpKS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KS5hdHRyKCJyeCIsYS5wYWRkaW5nKS5hdHRyKCJyeSIsYS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsYS53aWR0aCl9LGMkdD17ZHJhd05vZGU6ZnVuY3Rpb24oaSxhLGYscCl7Y29uc3Qgdz1wLmh0bWxMYWJlbHMsbT1mJShvJHQtMSksYj1pLmFwcGVuZCgiZyIpO2Euc2VjdGlvbj1tO2xldCBFPSJzZWN0aW9uLSIrbTttPDAmJihFKz0iIHNlY3Rpb24tcm9vdCIpLGIuYXR0cigiY2xhc3MiLChhLmNsYXNzP2EuY2xhc3MrIiAiOiIiKSsibWluZG1hcC1ub2RlICIrRSk7Y29uc3QgXz1iLmFwcGVuZCgiZyIpLEE9Yi5hcHBlbmQoImciKSxJPWEuZGVzY3IucmVwbGFjZSgvKDxiclwvKj4pL2csYApgKTtFWShBLEkse3VzZUh0bWxMYWJlbHM6dyx3aWR0aDphLndpZHRoLGNsYXNzZXM6Im1pbmRtYXAtbm9kZS1sYWJlbCJ9KSx3fHxBLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpO2NvbnN0IEI9QS5ub2RlKCkuZ2V0QkJveCgpLE49cC5mb250U2l6ZS5yZXBsYWNlP3AuZm9udFNpemUucmVwbGFjZSgicHgiLCIiKTpwLmZvbnRTaXplO2lmKGEuaGVpZ2h0PUIuaGVpZ2h0K04qMS4xKi41K2EucGFkZGluZyxhLndpZHRoPUIud2lkdGgrMiphLnBhZGRpbmcsYS5pY29uKWlmKGEudHlwZT09PVV1LkNJUkNMRSlhLmhlaWdodCs9NTAsYS53aWR0aCs9NTAsYi5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJoZWlnaHQiLCI1MHB4IikuYXR0cigid2lkdGgiLGEud2lkdGgpLmF0dHIoInN0eWxlIiwidGV4dC1hbGlnbjogY2VudGVyOyIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJpY29uLWNvbnRhaW5lciIpLmFwcGVuZCgiaSIpLmF0dHIoImNsYXNzIiwibm9kZS1pY29uLSIrbSsiICIrYS5pY29uKSxBLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2Eud2lkdGgvMisiLCAiKyhhLmhlaWdodC8yLTEuNSphLnBhZGRpbmcpKyIpIik7ZWxzZXthLndpZHRoKz01MDtjb25zdCBSPWEuaGVpZ2h0O2EuaGVpZ2h0PU1hdGgubWF4KFIsNjApO2NvbnN0IHo9TWF0aC5hYnMoYS5oZWlnaHQtUik7Yi5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ3aWR0aCIsIjYwcHgiKS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KS5hdHRyKCJzdHlsZSIsInRleHQtYWxpZ246IGNlbnRlcjttYXJnaW4tdG9wOiIrei8yKyJweDsiKS5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwiaWNvbi1jb250YWluZXIiKS5hcHBlbmQoImkiKS5hdHRyKCJjbGFzcyIsIm5vZGUtaWNvbi0iK20rIiAiK2EuaWNvbiksQS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoMjUrYS53aWR0aC8yKSsiLCAiKyh6LzIrYS5wYWRkaW5nLzIpKyIpIil9ZWxzZSBpZih3KXtjb25zdCBSPShhLndpZHRoLUIud2lkdGgpLzIsej0oYS5oZWlnaHQtQi5oZWlnaHQpLzI7QS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitSKyIsICIreisiKSIpfWVsc2V7Y29uc3QgUj1hLndpZHRoLzIsej1hLnBhZGRpbmcvMjtBLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1IrIiwgIit6KyIpIil9c3dpdGNoKGEudHlwZSl7Y2FzZSBVdS5ERUZBVUxUOlpXZShfLGEsbSk7YnJlYWs7Y2FzZSBVdS5ST1VOREVEX1JFQ1Q6c1llKF8sYSk7YnJlYWs7Y2FzZSBVdS5SRUNUOkpXZShfLGEpO2JyZWFrO2Nhc2UgVXUuQ0lSQ0xFOl8uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS53aWR0aC8yKyIsICIrICthLmhlaWdodC8yKyIpIiksblllKF8sYSk7YnJlYWs7Y2FzZSBVdS5DTE9VRDp0WWUoXyxhKTticmVhaztjYXNlIFV1LkJBTkc6ZVllKF8sYSk7YnJlYWs7Y2FzZSBVdS5IRVhBR09OOmlZZShfLGEpO2JyZWFrfXJldHVybiBzJHQoYS5pZCxiKSxhLmhlaWdodH0scG9zaXRpb25Ob2RlOmZ1bmN0aW9uKGkpe2NvbnN0IGE9Smd0KGkuaWQpLGY9aS54fHwwLHA9aS55fHwwO2EuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZisiLCIrcCsiKSIpfSxkcmF3RWRnZTpmdW5jdGlvbihhLGYscCx3LG0pe2NvbnN0IGI9bSUobyR0LTEpLEU9cC54K3Aud2lkdGgvMixfPXAueStwLmhlaWdodC8yLEE9Zi54K2Yud2lkdGgvMixJPWYueStmLmhlaWdodC8yLEI9QT5FP0UrTWF0aC5hYnMoRS1BKS8yOkUtTWF0aC5hYnMoRS1BKS8yLE49ST5fP18rTWF0aC5hYnMoXy1JKS8yOl8tTWF0aC5hYnMoXy1JKS8yLFI9QT5FP01hdGguYWJzKEUtQikvMitFOi1NYXRoLmFicyhFLUIpLzIrRSx6PUk+Xz9NYXRoLmFicyhfLU4pLzIrXzotTWF0aC5hYnMoXy1OKS8yK187YS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixwLmRpcmVjdGlvbj09PSJUQiJ8fHAuZGlyZWN0aW9uPT09IkJUIj9gTSR7RX0sJHtffSBRJHtFfSwke3p9ICR7Qn0sJHtOfSBUJHtBfSwke0l9YDpgTSR7RX0sJHtffSBRJHtSfSwke199ICR7Qn0sJHtOfSBUJHtBfSwke0l9YCkuYXR0cigiY2xhc3MiLCJlZGdlIHNlY3Rpb24tZWRnZS0iK2IrIiBlZGdlLWRlcHRoLSIrdyl9fTt2YXIgdSR0PXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oaSxhKXsoZnVuY3Rpb24oZixwKXtpLmV4cG9ydHM9cCgpfSkoYjAsZnVuY3Rpb24oKXtmdW5jdGlvbiBmKHkpeyJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7cmV0dXJuIGY9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09InN5bWJvbCI/ZnVuY3Rpb24oZyl7cmV0dXJuIHR5cGVvZiBnfTpmdW5jdGlvbihnKXtyZXR1cm4gZyYmdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmZy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGd9LGYoeSl9ZnVuY3Rpb24gcCh5LGcpe2lmKCEoeSBpbnN0YW5jZW9mIGcpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHcoeSxnKXtmb3IodmFyIHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIFQ9Z1t4XTtULmVudW1lcmFibGU9VC5lbnVtZXJhYmxlfHwhMSxULmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gVCYmKFQud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LFQua2V5LFQpfX1mdW5jdGlvbiBtKHksZyx4KXtyZXR1cm4gZyYmdyh5LnByb3RvdHlwZSxnKSx4JiZ3KHkseCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHksInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSkseX1mdW5jdGlvbiBiKHksZyx4KXtyZXR1cm4gZyBpbiB5P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LGcse3ZhbHVlOngsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp5W2ddPXgseX1mdW5jdGlvbiBFKHksZyl7cmV0dXJuIF8oeSl8fEEoeSxnKXx8SSh5LGcpfHxOKCl9ZnVuY3Rpb24gXyh5KXtpZihBcnJheS5pc0FycmF5KHkpKXJldHVybiB5fWZ1bmN0aW9uIEEoeSxnKXt2YXIgeD15PT1udWxsP251bGw6dHlwZW9mIFN5bWJvbDwidSImJnlbU3ltYm9sLml0ZXJhdG9yXXx8eVsiQEBpdGVyYXRvciJdO2lmKHghPW51bGwpe3ZhciBUPVtdLEw9ITAsTz0hMSxQLCQ7dHJ5e2Zvcih4PXguY2FsbCh5KTshKEw9KFA9eC5uZXh0KCkpLmRvbmUpJiYoVC5wdXNoKFAudmFsdWUpLCEoZyYmVC5sZW5ndGg9PT1nKSk7TD0hMCk7fWNhdGNoKHEpe089ITAsJD1xfWZpbmFsbHl7dHJ5eyFMJiZ4LnJldHVybiE9bnVsbCYmeC5yZXR1cm4oKX1maW5hbGx5e2lmKE8pdGhyb3cgJH19cmV0dXJuIFR9fWZ1bmN0aW9uIEkoeSxnKXtpZih5KXtpZih0eXBlb2YgeT09InN0cmluZyIpcmV0dXJuIEIoeSxnKTt2YXIgeD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeSkuc2xpY2UoOCwtMSk7aWYoeD09PSJPYmplY3QiJiZ5LmNvbnN0cnVjdG9yJiYoeD15LmNvbnN0cnVjdG9yLm5hbWUpLHg9PT0iTWFwInx8eD09PSJTZXQiKXJldHVybiBBcnJheS5mcm9tKHkpO2lmKHg9PT0iQXJndW1lbnRzInx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoeCkpcmV0dXJuIEIoeSxnKX19ZnVuY3Rpb24gQih5LGcpeyhnPT1udWxsfHxnPnkubGVuZ3RoKSYmKGc9eS5sZW5ndGgpO2Zvcih2YXIgeD0wLFQ9bmV3IEFycmF5KGcpO3g8Zzt4KyspVFt4XT15W3hdO3JldHVybiBUfWZ1bmN0aW9uIE4oKXt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9dmFyIFI9dHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3csej1SP1IubmF2aWdhdG9yOm51bGw7UiYmUi5kb2N1bWVudDt2YXIgVz1mKCIiKSxldD1mKHt9KSxzdD1mKGZ1bmN0aW9uKCl7fSksYXQ9dHlwZW9mIEhUTUxFbGVtZW50PiJ1Ij8idW5kZWZpbmVkIjpmKEhUTUxFbGVtZW50KSxidD1mdW5jdGlvbihnKXtyZXR1cm4gZyYmZy5pbnN0YW5jZVN0cmluZyYmeXQoZy5pbnN0YW5jZVN0cmluZyk/Zy5pbnN0YW5jZVN0cmluZygpOm51bGx9LG10PWZ1bmN0aW9uKGcpe3JldHVybiBnIT1udWxsJiZmKGcpPT1XfSx5dD1mdW5jdGlvbihnKXtyZXR1cm4gZyE9bnVsbCYmZihnKT09PXN0fSxmdD1mdW5jdGlvbihnKXtyZXR1cm4hVHQoZykmJihBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkoZyk6ZyE9bnVsbCYmZyBpbnN0YW5jZW9mIEFycmF5KX0sdXQ9ZnVuY3Rpb24oZyl7cmV0dXJuIGchPW51bGwmJmYoZyk9PT1ldCYmIWZ0KGcpJiZnLmNvbnN0cnVjdG9yPT09T2JqZWN0fSx2dD1mdW5jdGlvbihnKXtyZXR1cm4gZyE9bnVsbCYmZihnKT09PWV0fSxYPWZ1bmN0aW9uKGcpe3JldHVybiBnIT1udWxsJiZmKGcpPT09ZigxKSYmIWlzTmFOKGcpfSxwdD1mdW5jdGlvbihnKXtyZXR1cm4gWChnKSYmTWF0aC5mbG9vcihnKT09PWd9LFU9ZnVuY3Rpb24oZyl7aWYoYXQhPT0idW5kZWZpbmVkIilyZXR1cm4gZyE9bnVsbCYmZyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fSxUdD1mdW5jdGlvbihnKXtyZXR1cm4gbnQoZyl8fEl0KGcpfSxudD1mdW5jdGlvbihnKXtyZXR1cm4gYnQoZyk9PT0iY29sbGVjdGlvbiImJmcuX3ByaXZhdGUuc2luZ2xlfSxJdD1mdW5jdGlvbihnKXtyZXR1cm4gYnQoZyk9PT0iY29sbGVjdGlvbiImJiFnLl9wcml2YXRlLnNpbmdsZX0sT3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIGJ0KGcpPT09ImNvcmUifSxCdD1mdW5jdGlvbihnKXtyZXR1cm4gYnQoZyk9PT0ic3R5bGVzaGVldCJ9LEV0PWZ1bmN0aW9uKGcpe3JldHVybiBidChnKT09PSJldmVudCJ9LFo9ZnVuY3Rpb24oZyl7cmV0dXJuIGc9PW51bGw/ITA6ISEoZz09PSIifHxnLm1hdGNoKC9eXHMrJC8pKX0sQ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHR5cGVvZiBIVE1MRWxlbWVudD4idSI/ITE6ZyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fSx4dD1mdW5jdGlvbihnKXtyZXR1cm4gdXQoZykmJlgoZy54MSkmJlgoZy54MikmJlgoZy55MSkmJlgoZy55Mil9LEh0PWZ1bmN0aW9uKGcpe3JldHVybiB2dChnKSYmeXQoZy50aGVuKX0sTGU9ZnVuY3Rpb24oKXtyZXR1cm4geiYmei51c2VyQWdlbnQubWF0Y2goL21zaWV8dHJpZGVudHxlZGdlL2kpfSxGdD1mdW5jdGlvbihnLHgpe3h8fCh4PWZ1bmN0aW9uKCl7aWYoYXJndW1lbnRzLmxlbmd0aD09PTEpcmV0dXJuIGFyZ3VtZW50c1swXTtpZihhcmd1bWVudHMubGVuZ3RoPT09MClyZXR1cm4idW5kZWZpbmVkIjtmb3IodmFyIE89W10sUD0wO1A8YXJndW1lbnRzLmxlbmd0aDtQKyspTy5wdXNoKGFyZ3VtZW50c1tQXSk7cmV0dXJuIE8uam9pbigiJCIpfSk7dmFyIFQ9ZnVuY3Rpb24gTCgpe3ZhciBPPXRoaXMsUD1hcmd1bWVudHMsJCxxPXguYXBwbHkoTyxQKSxTPUwuY2FjaGU7cmV0dXJuKCQ9U1txXSl8fCgkPVNbcV09Zy5hcHBseShPLFApKSwkfTtyZXR1cm4gVC5jYWNoZT17fSxUfSxnbj1GdChmdW5jdGlvbih5KXtyZXR1cm4geS5yZXBsYWNlKC8oW0EtWl0pL2csZnVuY3Rpb24oZyl7cmV0dXJuIi0iK2cudG9Mb3dlckNhc2UoKX0pfSksU2U9RnQoZnVuY3Rpb24oeSl7cmV0dXJuIHkucmVwbGFjZSgvKC1cdykvZyxmdW5jdGlvbihnKXtyZXR1cm4gZ1sxXS50b1VwcGVyQ2FzZSgpfSl9KSxtZT1GdChmdW5jdGlvbih5LGcpe3JldHVybiB5K2dbMF0udG9VcHBlckNhc2UoKStnLnN1YnN0cmluZygxKX0sZnVuY3Rpb24oeSxnKXtyZXR1cm4geSsiJCIrZ30pLFZlPWZ1bmN0aW9uKGcpe3JldHVybiBaKGcpP2c6Zy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStnLnN1YnN0cmluZygxKX0sWWU9Iig/OlstK10/KD86KD86XFxkK3xcXGQqXFwuXFxkKykoPzpbRWVdWystXT9cXGQrKT8pKSIsY2U9InJnYlthXT9cXCgoIitZZSsiWyVdPylcXHMqLFxccyooIitZZSsiWyVdPylcXHMqLFxccyooIitZZSsiWyVdPykoPzpcXHMqLFxccyooIitZZSsiKSk/XFwpIixrZT0icmdiW2FdP1xcKCg/OiIrWWUrIlslXT8pXFxzKixcXHMqKD86IitZZSsiWyVdPylcXHMqLFxccyooPzoiK1llKyJbJV0/KSg/OlxccyosXFxzKig/OiIrWWUrIikpP1xcKSIsenQ9ImhzbFthXT9cXCgoIitZZSsiKVxccyosXFxzKigiK1llKyJbJV0pXFxzKixcXHMqKCIrWWUrIlslXSkoPzpcXHMqLFxccyooIitZZSsiKSk/XFwpIixyZT0iaHNsW2FdP1xcKCg/OiIrWWUrIilcXHMqLFxccyooPzoiK1llKyJbJV0pXFxzKixcXHMqKD86IitZZSsiWyVdKSg/OlxccyosXFxzKig/OiIrWWUrIikpP1xcKSIsc2U9IlxcI1swLTlhLWZBLUZdezN9IixQZT0iXFwjWzAtOWEtZkEtRl17Nn0iLHRlPWZ1bmN0aW9uKGcseCl7cmV0dXJuIGc8eD8tMTpnPng/MTowfSxNZT1mdW5jdGlvbihnLHgpe3JldHVybi0xKnRlKGcseCl9LGRlPU9iamVjdC5hc3NpZ24hPW51bGw/T2JqZWN0LmFzc2lnbi5iaW5kKE9iamVjdCk6ZnVuY3Rpb24oeSl7Zm9yKHZhciBnPWFyZ3VtZW50cyx4PTE7eDxnLmxlbmd0aDt4Kyspe3ZhciBUPWdbeF07aWYoVCE9bnVsbClmb3IodmFyIEw9T2JqZWN0LmtleXMoVCksTz0wO088TC5sZW5ndGg7TysrKXt2YXIgUD1MW09dO3lbUF09VFtQXX19cmV0dXJuIHl9LG9uPWZ1bmN0aW9uKGcpe2lmKCEoIShnLmxlbmd0aD09PTR8fGcubGVuZ3RoPT09Nyl8fGdbMF0hPT0iIyIpKXt2YXIgeD1nLmxlbmd0aD09PTQsVCxMLE8sUD0xNjtyZXR1cm4geD8oVD1wYXJzZUludChnWzFdK2dbMV0sUCksTD1wYXJzZUludChnWzJdK2dbMl0sUCksTz1wYXJzZUludChnWzNdK2dbM10sUCkpOihUPXBhcnNlSW50KGdbMV0rZ1syXSxQKSxMPXBhcnNlSW50KGdbM10rZ1s0XSxQKSxPPXBhcnNlSW50KGdbNV0rZ1s2XSxQKSksW1QsTCxPXX19LG5pPWZ1bmN0aW9uKGcpe3ZhciB4LFQsTCxPLFAsJCxxLFM7ZnVuY3Rpb24gVihodCxkdCxMdCl7cmV0dXJuIEx0PDAmJihMdCs9MSksTHQ+MSYmKEx0LT0xKSxMdDwxLzY/aHQrKGR0LWh0KSo2Kkx0Okx0PDEvMj9kdDpMdDwyLzM/aHQrKGR0LWh0KSooMi8zLUx0KSo2Omh0fXZhciBZPW5ldyBSZWdFeHAoIl4iK3p0KyIkIikuZXhlYyhnKTtpZihZKXtpZihUPXBhcnNlSW50KFlbMV0pLFQ8MD9UPSgzNjAtIC0xKlQlMzYwKSUzNjA6VD4zNjAmJihUPVQlMzYwKSxULz0zNjAsTD1wYXJzZUZsb2F0KFlbMl0pLEw8MHx8TD4xMDB8fChMPUwvMTAwLE89cGFyc2VGbG9hdChZWzNdKSxPPDB8fE8+MTAwKXx8KE89Ty8xMDAsUD1ZWzRdLFAhPT12b2lkIDAmJihQPXBhcnNlRmxvYXQoUCksUDwwfHxQPjEpKSlyZXR1cm47aWYoTD09PTApJD1xPVM9TWF0aC5yb3VuZChPKjI1NSk7ZWxzZXt2YXIgcnQ9TzwuNT9PKigxK0wpOk8rTC1PKkwsb3Q9MipPLXJ0OyQ9TWF0aC5yb3VuZCgyNTUqVihvdCxydCxUKzEvMykpLHE9TWF0aC5yb3VuZCgyNTUqVihvdCxydCxUKSksUz1NYXRoLnJvdW5kKDI1NSpWKG90LHJ0LFQtMS8zKSl9eD1bJCxxLFMsUF19cmV0dXJuIHh9LEtzPWZ1bmN0aW9uKGcpe3ZhciB4LFQ9bmV3IFJlZ0V4cCgiXiIrY2UrIiQiKS5leGVjKGcpO2lmKFQpe3g9W107Zm9yKHZhciBMPVtdLE89MTtPPD0zO08rKyl7dmFyIFA9VFtPXTtpZihQW1AubGVuZ3RoLTFdPT09IiUiJiYoTFtPXT0hMCksUD1wYXJzZUZsb2F0KFApLExbT10mJihQPVAvMTAwKjI1NSksUDwwfHxQPjI1NSlyZXR1cm47eC5wdXNoKE1hdGguZmxvb3IoUCkpfXZhciAkPUxbMV18fExbMl18fExbM10scT1MWzFdJiZMWzJdJiZMWzNdO2lmKCQmJiFxKXJldHVybjt2YXIgUz1UWzRdO2lmKFMhPT12b2lkIDApe2lmKFM9cGFyc2VGbG9hdChTKSxTPDB8fFM+MSlyZXR1cm47eC5wdXNoKFMpfX1yZXR1cm4geH0sd3M9ZnVuY3Rpb24oZyl7cmV0dXJuIFhpW2cudG9Mb3dlckNhc2UoKV19LGZvPWZ1bmN0aW9uKGcpe3JldHVybihmdChnKT9nOm51bGwpfHx3cyhnKXx8b24oZyl8fEtzKGcpfHxuaShnKX0sWGk9e3RyYW5zcGFyZW50OlswLDAsMCwwXSxhbGljZWJsdWU6WzI0MCwyNDgsMjU1XSxhbnRpcXVld2hpdGU6WzI1MCwyMzUsMjE1XSxhcXVhOlswLDI1NSwyNTVdLGFxdWFtYXJpbmU6WzEyNywyNTUsMjEyXSxhenVyZTpbMjQwLDI1NSwyNTVdLGJlaWdlOlsyNDUsMjQ1LDIyMF0sYmlzcXVlOlsyNTUsMjI4LDE5Nl0sYmxhY2s6WzAsMCwwXSxibGFuY2hlZGFsbW9uZDpbMjU1LDIzNSwyMDVdLGJsdWU6WzAsMCwyNTVdLGJsdWV2aW9sZXQ6WzEzOCw0MywyMjZdLGJyb3duOlsxNjUsNDIsNDJdLGJ1cmx5d29vZDpbMjIyLDE4NCwxMzVdLGNhZGV0Ymx1ZTpbOTUsMTU4LDE2MF0sY2hhcnRyZXVzZTpbMTI3LDI1NSwwXSxjaG9jb2xhdGU6WzIxMCwxMDUsMzBdLGNvcmFsOlsyNTUsMTI3LDgwXSxjb3JuZmxvd2VyYmx1ZTpbMTAwLDE0OSwyMzddLGNvcm5zaWxrOlsyNTUsMjQ4LDIyMF0sY3JpbXNvbjpbMjIwLDIwLDYwXSxjeWFuOlswLDI1NSwyNTVdLGRhcmtibHVlOlswLDAsMTM5XSxkYXJrY3lhbjpbMCwxMzksMTM5XSxkYXJrZ29sZGVucm9kOlsxODQsMTM0LDExXSxkYXJrZ3JheTpbMTY5LDE2OSwxNjldLGRhcmtncmVlbjpbMCwxMDAsMF0sZGFya2dyZXk6WzE2OSwxNjksMTY5XSxkYXJra2hha2k6WzE4OSwxODMsMTA3XSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5XSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3XSxkYXJrb3JhbmdlOlsyNTUsMTQwLDBdLGRhcmtvcmNoaWQ6WzE1Myw1MCwyMDRdLGRhcmtyZWQ6WzEzOSwwLDBdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyXSxkYXJrc2VhZ3JlZW46WzE0MywxODgsMTQzXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzldLGRhcmtzbGF0ZWdyYXk6WzQ3LDc5LDc5XSxkYXJrc2xhdGVncmV5Ols0Nyw3OSw3OV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5XSxkYXJrdmlvbGV0OlsxNDgsMCwyMTFdLGRlZXBwaW5rOlsyNTUsMjAsMTQ3XSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1XSxkaW1ncmF5OlsxMDUsMTA1LDEwNV0sZGltZ3JleTpbMTA1LDEwNSwxMDVdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTVdLGZpcmVicmljazpbMTc4LDM0LDM0XSxmbG9yYWx3aGl0ZTpbMjU1LDI1MCwyNDBdLGZvcmVzdGdyZWVuOlszNCwxMzksMzRdLGZ1Y2hzaWE6WzI1NSwwLDI1NV0sZ2FpbnNib3JvOlsyMjAsMjIwLDIyMF0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTVdLGdvbGQ6WzI1NSwyMTUsMF0sZ29sZGVucm9kOlsyMTgsMTY1LDMyXSxncmF5OlsxMjgsMTI4LDEyOF0sZ3JleTpbMTI4LDEyOCwxMjhdLGdyZWVuOlswLDEyOCwwXSxncmVlbnllbGxvdzpbMTczLDI1NSw0N10saG9uZXlkZXc6WzI0MCwyNTUsMjQwXSxob3RwaW5rOlsyNTUsMTA1LDE4MF0saW5kaWFucmVkOlsyMDUsOTIsOTJdLGluZGlnbzpbNzUsMCwxMzBdLGl2b3J5OlsyNTUsMjU1LDI0MF0sa2hha2k6WzI0MCwyMzAsMTQwXSxsYXZlbmRlcjpbMjMwLDIzMCwyNTBdLGxhdmVuZGVyYmx1c2g6WzI1NSwyNDAsMjQ1XSxsYXduZ3JlZW46WzEyNCwyNTIsMF0sbGVtb25jaGlmZm9uOlsyNTUsMjUwLDIwNV0sbGlnaHRibHVlOlsxNzMsMjE2LDIzMF0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjhdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTVdLGxpZ2h0Z29sZGVucm9keWVsbG93OlsyNTAsMjUwLDIxMF0sbGlnaHRncmF5OlsyMTEsMjExLDIxMV0sbGlnaHRncmVlbjpbMTQ0LDIzOCwxNDRdLGxpZ2h0Z3JleTpbMjExLDIxMSwyMTFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTNdLGxpZ2h0c2FsbW9uOlsyNTUsMTYwLDEyMl0sbGlnaHRzZWFncmVlbjpbMzIsMTc4LDE3MF0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MF0sbGlnaHRzbGF0ZWdyYXk6WzExOSwxMzYsMTUzXSxsaWdodHNsYXRlZ3JleTpbMTE5LDEzNiwxNTNdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMl0sbGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0XSxsaW1lOlswLDI1NSwwXSxsaW1lZ3JlZW46WzUwLDIwNSw1MF0sbGluZW46WzI1MCwyNDAsMjMwXSxtYWdlbnRhOlsyNTUsMCwyNTVdLG1hcm9vbjpbMTI4LDAsMF0sbWVkaXVtYXF1YW1hcmluZTpbMTAyLDIwNSwxNzBdLG1lZGl1bWJsdWU6WzAsMCwyMDVdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMV0sbWVkaXVtcHVycGxlOlsxNDcsMTEyLDIxOV0sbWVkaXVtc2VhZ3JlZW46WzYwLDE3OSwxMTNdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzhdLG1lZGl1bXNwcmluZ2dyZWVuOlswLDI1MCwxNTRdLG1lZGl1bXR1cnF1b2lzZTpbNzIsMjA5LDIwNF0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzXSxtaWRuaWdodGJsdWU6WzI1LDI1LDExMl0sbWludGNyZWFtOlsyNDUsMjU1LDI1MF0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNV0sbW9jY2FzaW46WzI1NSwyMjgsMTgxXSxuYXZham93aGl0ZTpbMjU1LDIyMiwxNzNdLG5hdnk6WzAsMCwxMjhdLG9sZGxhY2U6WzI1MywyNDUsMjMwXSxvbGl2ZTpbMTI4LDEyOCwwXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzVdLG9yYW5nZTpbMjU1LDE2NSwwXSxvcmFuZ2VyZWQ6WzI1NSw2OSwwXSxvcmNoaWQ6WzIxOCwxMTIsMjE0XSxwYWxlZ29sZGVucm9kOlsyMzgsMjMyLDE3MF0scGFsZWdyZWVuOlsxNTIsMjUxLDE1Ml0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzhdLHBhbGV2aW9sZXRyZWQ6WzIxOSwxMTIsMTQ3XSxwYXBheWF3aGlwOlsyNTUsMjM5LDIxM10scGVhY2hwdWZmOlsyNTUsMjE4LDE4NV0scGVydTpbMjA1LDEzMyw2M10scGluazpbMjU1LDE5MiwyMDNdLHBsdW06WzIyMSwxNjAsMjIxXSxwb3dkZXJibHVlOlsxNzYsMjI0LDIzMF0scHVycGxlOlsxMjgsMCwxMjhdLHJlZDpbMjU1LDAsMF0scm9zeWJyb3duOlsxODgsMTQzLDE0M10scm95YWxibHVlOls2NSwxMDUsMjI1XSxzYWRkbGVicm93bjpbMTM5LDY5LDE5XSxzYWxtb246WzI1MCwxMjgsMTE0XSxzYW5keWJyb3duOlsyNDQsMTY0LDk2XSxzZWFncmVlbjpbNDYsMTM5LDg3XSxzZWFzaGVsbDpbMjU1LDI0NSwyMzhdLHNpZW5uYTpbMTYwLDgyLDQ1XSxzaWx2ZXI6WzE5MiwxOTIsMTkyXSxza3libHVlOlsxMzUsMjA2LDIzNV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1XSxzbGF0ZWdyYXk6WzExMiwxMjgsMTQ0XSxzbGF0ZWdyZXk6WzExMiwxMjgsMTQ0XSxzbm93OlsyNTUsMjUwLDI1MF0sc3ByaW5nZ3JlZW46WzAsMjU1LDEyN10sc3RlZWxibHVlOls3MCwxMzAsMTgwXSx0YW46WzIxMCwxODAsMTQwXSx0ZWFsOlswLDEyOCwxMjhdLHRoaXN0bGU6WzIxNiwxOTEsMjE2XSx0b21hdG86WzI1NSw5OSw3MV0sdHVycXVvaXNlOls2NCwyMjQsMjA4XSx2aW9sZXQ6WzIzOCwxMzAsMjM4XSx3aGVhdDpbMjQ1LDIyMiwxNzldLHdoaXRlOlsyNTUsMjU1LDI1NV0sd2hpdGVzbW9rZTpbMjQ1LDI0NSwyNDVdLHllbGxvdzpbMjU1LDI1NSwwXSx5ZWxsb3dncmVlbjpbMTU0LDIwNSw1MF19LEVyPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD1nLm1hcCxUPWcua2V5cyxMPVQubGVuZ3RoLE89MDtPPEw7TysrKXt2YXIgUD1UW09dO2lmKHV0KFApKXRocm93IEVycm9yKCJUcmllZCB0byBzZXQgbWFwIHdpdGggb2JqZWN0IGtleSIpO088VC5sZW5ndGgtMT8oeFtQXT09bnVsbCYmKHhbUF09e30pLHg9eFtQXSk6eFtQXT1nLnZhbHVlfX0sWG49ZnVuY3Rpb24oZyl7Zm9yKHZhciB4PWcubWFwLFQ9Zy5rZXlzLEw9VC5sZW5ndGgsTz0wO088TDtPKyspe3ZhciBQPVRbT107aWYodXQoUCkpdGhyb3cgRXJyb3IoIlRyaWVkIHRvIGdldCBtYXAgd2l0aCBvYmplY3Qga2V5Iik7aWYoeD14W1BdLHg9PW51bGwpcmV0dXJuIHh9cmV0dXJuIHh9O2Z1bmN0aW9uIGRpKHkpe3ZhciBnPXR5cGVvZiB5O3JldHVybiB5IT1udWxsJiYoZz09Im9iamVjdCJ8fGc9PSJmdW5jdGlvbiIpfXZhciBFZT1kaSxLbj10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGIwPCJ1Ij9iMDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fTtmdW5jdGlvbiBIZSh5LGcpe3JldHVybiBnPXtleHBvcnRzOnt9fSx5KGcsZy5leHBvcnRzKSxnLmV4cG9ydHN9dmFyIFRpPXR5cGVvZiBLbj09Im9iamVjdCImJktuJiZLbi5PYmplY3Q9PT1PYmplY3QmJktuLHBuPVRpLEVzPXR5cGVvZiBzZWxmPT0ib2JqZWN0IiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYscWE9cG58fEVzfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLE1hPXFhLEdzPWZ1bmN0aW9uKCl7cmV0dXJuIE1hLkRhdGUubm93KCl9LFBvPUdzLHZzPS9ccy87ZnVuY3Rpb24gcnUoeSl7Zm9yKHZhciBnPXkubGVuZ3RoO2ctLSYmdnMudGVzdCh5LmNoYXJBdChnKSk7KTtyZXR1cm4gZ312YXIgenM9cnUsRHU9L15ccysvO2Z1bmN0aW9uIHBtKHkpe3JldHVybiB5JiZ5LnNsaWNlKDAsenMoeSkrMSkucmVwbGFjZShEdSwiIil9dmFyIHV3PXBtLFd1PU1hLlN5bWJvbCx0aD1XdSxGYT1PYmplY3QucHJvdG90eXBlLE1sPUZhLmhhc093blByb3BlcnR5LGhhPUZhLnRvU3RyaW5nLGJjPXRoP3RoLnRvU3RyaW5nVGFnOnZvaWQgMDtmdW5jdGlvbiBDYyh5KXt2YXIgZz1NbC5jYWxsKHksYmMpLHg9eVtiY107dHJ5e3lbYmNdPXZvaWQgMDt2YXIgVD0hMH1jYXRjaHt9dmFyIEw9aGEuY2FsbCh5KTtyZXR1cm4gVCYmKGc/eVtiY109eDpkZWxldGUgeVtiY10pLEx9dmFyIHBhPUNjLERhPU9iamVjdC5wcm90b3R5cGUsSGE9RGEudG9TdHJpbmc7ZnVuY3Rpb24gRGwoeSl7cmV0dXJuIEhhLmNhbGwoeSl9dmFyIF9jPURsLGx3PSJbb2JqZWN0IE51bGxdIixlaD0iW29iamVjdCBVbmRlZmluZWRdIixlZD10aD90aC50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gamQoeSl7cmV0dXJuIHk9PW51bGw/eT09PXZvaWQgMD9laDpsdzplZCYmZWQgaW4gT2JqZWN0KHkpP3BhKHkpOl9jKHkpfXZhciBuZD1qZDtmdW5jdGlvbiAkZCh5KXtyZXR1cm4geSE9bnVsbCYmdHlwZW9mIHk9PSJvYmplY3QifXZhciBBMD0kZCxCaT0iW29iamVjdCBTeW1ib2xdIjtmdW5jdGlvbiBjbih5KXtyZXR1cm4gdHlwZW9mIHk9PSJzeW1ib2wifHxBMCh5KSYmbmQoeSk9PUJpfXZhciBrcj1jbixFaT0wLzAsSm89L15bLStdMHhbMC05YS1mXSskL2ksd2M9L14wYlswMV0rJC9pLHJmPS9eMG9bMC03XSskL2ksT2M9cGFyc2VJbnQ7ZnVuY3Rpb24gc2YoeSl7aWYodHlwZW9mIHk9PSJudW1iZXIiKXJldHVybiB5O2lmKGtyKHkpKXJldHVybiBFaTtpZihFZSh5KSl7dmFyIGc9dHlwZW9mIHkudmFsdWVPZj09ImZ1bmN0aW9uIj95LnZhbHVlT2YoKTp5O3k9RWUoZyk/ZysiIjpnfWlmKHR5cGVvZiB5IT0ic3RyaW5nIilyZXR1cm4geT09PTA/eToreTt5PXV3KHkpO3ZhciB4PXdjLnRlc3QoeSk7cmV0dXJuIHh8fHJmLnRlc3QoeSk/T2MoeS5zbGljZSgyKSx4PzI6OCk6Sm8udGVzdCh5KT9FaToreX12YXIgYWY9c2YsUWk9IkV4cGVjdGVkIGEgZnVuY3Rpb24iLFRzPU1hdGgubWF4LGthPU1hdGgubWluO2Z1bmN0aW9uIHhpKHksZyx4KXt2YXIgVCxMLE8sUCwkLHEsUz0wLFY9ITEsWT0hMSxydD0hMDtpZih0eXBlb2YgeSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKFFpKTtnPWFmKGcpfHwwLEVlKHgpJiYoVj0hIXgubGVhZGluZyxZPSJtYXhXYWl0ImluIHgsTz1ZP1RzKGFmKHgubWF4V2FpdCl8fDAsZyk6TyxydD0idHJhaWxpbmciaW4geD8hIXgudHJhaWxpbmc6cnQpO2Z1bmN0aW9uIG90KFl0KXt2YXIgcXQ9VCxuZT1MO3JldHVybiBUPUw9dm9pZCAwLFM9WXQsUD15LmFwcGx5KG5lLHF0KSxQfWZ1bmN0aW9uIGh0KFl0KXtyZXR1cm4gUz1ZdCwkPXNldFRpbWVvdXQoa3QsZyksVj9vdChZdCk6UH1mdW5jdGlvbiBkdChZdCl7dmFyIHF0PVl0LXEsbmU9WXQtUyxHdD1nLXF0O3JldHVybiBZP2thKEd0LE8tbmUpOkd0fWZ1bmN0aW9uIEx0KFl0KXt2YXIgcXQ9WXQtcSxuZT1ZdC1TO3JldHVybiBxPT09dm9pZCAwfHxxdD49Z3x8cXQ8MHx8WSYmbmU+PU99ZnVuY3Rpb24ga3QoKXt2YXIgWXQ9UG8oKTtpZihMdChZdCkpcmV0dXJuIER0KFl0KTskPXNldFRpbWVvdXQoa3QsZHQoWXQpKX1mdW5jdGlvbiBEdChZdCl7cmV0dXJuICQ9dm9pZCAwLHJ0JiZUP290KFl0KTooVD1MPXZvaWQgMCxQKX1mdW5jdGlvbiBQdCgpeyQhPT12b2lkIDAmJmNsZWFyVGltZW91dCgkKSxTPTAsVD1xPUw9JD12b2lkIDB9ZnVuY3Rpb24gJHQoKXtyZXR1cm4gJD09PXZvaWQgMD9QOkR0KFBvKCkpfWZ1bmN0aW9uIFp0KCl7dmFyIFl0PVBvKCkscXQ9THQoWXQpO2lmKFQ9YXJndW1lbnRzLEw9dGhpcyxxPVl0LHF0KXtpZigkPT09dm9pZCAwKXJldHVybiBodChxKTtpZihZKXJldHVybiBjbGVhclRpbWVvdXQoJCksJD1zZXRUaW1lb3V0KGt0LGcpLG90KHEpfXJldHVybiAkPT09dm9pZCAwJiYoJD1zZXRUaW1lb3V0KGt0LGcpKSxQfXJldHVybiBadC5jYW5jZWw9UHQsWnQuZmx1c2g9JHQsWnR9dmFyIFljPXhpLENlPVI/Ui5wZXJmb3JtYW5jZTpudWxsLHZwPUNlJiZDZS5ub3c/ZnVuY3Rpb24oKXtyZXR1cm4gQ2Uubm93KCl9OmZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9LEJlPWZ1bmN0aW9uKCl7aWYoUil7aWYoUi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpcmV0dXJuIGZ1bmN0aW9uKHkpe1IucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHkpfTtpZihSLm1velJlcXVlc3RBbmltYXRpb25GcmFtZSlyZXR1cm4gZnVuY3Rpb24oeSl7Ui5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoeSl9O2lmKFIud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKXJldHVybiBmdW5jdGlvbih5KXtSLndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSh5KX07aWYoUi5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSlyZXR1cm4gZnVuY3Rpb24oeSl7Ui5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSh5KX19cmV0dXJuIGZ1bmN0aW9uKHkpe3kmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXt5KHZwKCkpfSwxZTMvNjApfX0oKSxCZj1mdW5jdGlvbihnKXtyZXR1cm4gQmUoZyl9LHlnPXZwLGJtPTkyNjEsRWs9NjU1OTksRTM9NTM4MSxJbD1mdW5jdGlvbihnKXtmb3IodmFyIHg9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOmJtLFQ9eCxMO0w9Zy5uZXh0KCksIUwuZG9uZTspVD1UKkVrK0wudmFsdWV8MDtyZXR1cm4gVH0sTDA9ZnVuY3Rpb24oZyl7dmFyIHg9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOmJtO3JldHVybiB4KkVrK2d8MH0saHc9ZnVuY3Rpb24oZyl7dmFyIHg9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOkUzO3JldHVybih4PDw1KSt4K2d8MH0sSDU9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gZyoyMDk3MTUyK3h9LEhiPWZ1bmN0aW9uKGcpe3JldHVybiBnWzBdKjIwOTcxNTIrZ1sxXX0sVjU9ZnVuY3Rpb24oZyx4KXtyZXR1cm5bTDAoZ1swXSx4WzBdKSxodyhnWzFdLHhbMV0pXX0sZjE9ZnVuY3Rpb24oZyx4KXt2YXIgVD17dmFsdWU6MCxkb25lOiExfSxMPTAsTz1nLmxlbmd0aCxQPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIEw8Tz9ULnZhbHVlPWdbTCsrXTpULmRvbmU9ITAsVH19O3JldHVybiBJbChQLHgpfSxyZD1mdW5jdGlvbihnLHgpe3ZhciBUPXt2YWx1ZTowLGRvbmU6ITF9LEw9MCxPPWcubGVuZ3RoLFA9e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gTDxPP1QudmFsdWU9Zy5jaGFyQ29kZUF0KEwrKyk6VC5kb25lPSEwLFR9fTtyZXR1cm4gSWwoUCx4KX0saWQ9ZnVuY3Rpb24oKXtyZXR1cm4gRzUoYXJndW1lbnRzKX0sRzU9ZnVuY3Rpb24oZyl7Zm9yKHZhciB4LFQ9MDtUPGcubGVuZ3RoO1QrKyl7dmFyIEw9Z1tUXTtUPT09MD94PXJkKEwpOng9cmQoTCx4KX1yZXR1cm4geH0sZnc9ITAsVTU9Y29uc29sZS53YXJuIT1udWxsLG1wPWNvbnNvbGUudHJhY2UhPW51bGwsVzU9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ8fDkwMDcxOTkyNTQ3NDA5OTEsVDM9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sd209ZnVuY3Rpb24oKXtyZXR1cm4hMX0seGc9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sRUw9ZnVuY3Rpb24oKXt9LHZsPWZ1bmN0aW9uKGcpe3Rocm93IG5ldyBFcnJvcihnKX0saU49ZnVuY3Rpb24oZyl7aWYoZyE9PXZvaWQgMClmdz0hIWc7ZWxzZSByZXR1cm4gZnd9LFNjPWZ1bmN0aW9uKGcpe2lOKCkmJihVNT9jb25zb2xlLndhcm4oZyk6KGNvbnNvbGUubG9nKGcpLG1wJiZjb25zb2xlLnRyYWNlKCkpKX0sY0s9ZnVuY3Rpb24oZyl7cmV0dXJuIGRlKHt9LGcpfSxWYj1mdW5jdGlvbihnKXtyZXR1cm4gZz09bnVsbD9nOmZ0KGcpP2cuc2xpY2UoKTp1dChnKT9jSyhnKTpnfSx1Sz1mdW5jdGlvbihnKXtyZXR1cm4gZy5zbGljZSgpfSxQVD1mdW5jdGlvbihnLHgpe2Zvcih4PWc9IiI7ZysrPDM2O3grPWcqNTEmNTI/KGdeMTU/OF5NYXRoLnJhbmRvbSgpKihnXjIwPzE2OjQpOjQpLnRvU3RyaW5nKDE2KToiLSIpO3JldHVybiB4fSxsSz17fSxzTj1mdW5jdGlvbigpe3JldHVybiBsS30sUmY9ZnVuY3Rpb24oZyl7dmFyIHg9T2JqZWN0LmtleXMoZyk7cmV0dXJuIGZ1bmN0aW9uKFQpe2Zvcih2YXIgTD17fSxPPTA7Tzx4Lmxlbmd0aDtPKyspe3ZhciBQPXhbT10sJD1UPT1udWxsP3ZvaWQgMDpUW1BdO0xbUF09JD09PXZvaWQgMD9nW1BdOiR9cmV0dXJuIEx9fSx2bT1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBMPWcubGVuZ3RoLTE7TD49MCYmIShnW0xdPT09eCYmKGcuc3BsaWNlKEwsMSksVCkpO0wtLSk7fSxUTD1mdW5jdGlvbihnKXtnLnNwbGljZSgwLGcubGVuZ3RoKX0sYU49ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9MDtUPHgubGVuZ3RoO1QrKyl7dmFyIEw9eFtUXTtnLnB1c2goTCl9fSx5cD1mdW5jdGlvbihnLHgsVCl7cmV0dXJuIFQmJih4PW1lKFQseCkpLGdbeF19LG1tPWZ1bmN0aW9uKGcseCxULEwpe1QmJih4PW1lKFQseCkpLGdbeF09TH0saEs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KCl7cCh0aGlzLHkpLHRoaXMuX29iaj17fX1yZXR1cm4gbSh5LFt7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKHgsVCl7cmV0dXJuIHRoaXMuX29ialt4XT1ULHRoaXN9fSx7a2V5OiJkZWxldGUiLHZhbHVlOmZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLl9vYmpbeF09dm9pZCAwLHRoaXN9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9vYmo9e319fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLl9vYmpbeF0hPT12b2lkIDB9fSx7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLl9vYmpbeF19fV0pLHl9KCksR2I9dHlwZW9mIE1hcDwidSI/TWFwOmhLLGZLPSJ1bmRlZmluZWQiLGRLPWZ1bmN0aW9uKCl7ZnVuY3Rpb24geShnKXtpZihwKHRoaXMseSksdGhpcy5fb2JqPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5zaXplPTAsZyE9bnVsbCl7dmFyIHg7Zy5pbnN0YW5jZVN0cmluZyE9bnVsbCYmZy5pbnN0YW5jZVN0cmluZygpPT09dGhpcy5pbnN0YW5jZVN0cmluZygpP3g9Zy50b0FycmF5KCk6eD1nO2Zvcih2YXIgVD0wO1Q8eC5sZW5ndGg7VCsrKXRoaXMuYWRkKHhbVF0pfX1yZXR1cm4gbSh5LFt7a2V5OiJpbnN0YW5jZVN0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4ic2V0In19LHtrZXk6ImFkZCIsdmFsdWU6ZnVuY3Rpb24oeCl7dmFyIFQ9dGhpcy5fb2JqO1RbeF0hPT0xJiYoVFt4XT0xLHRoaXMuc2l6ZSsrKX19LHtrZXk6ImRlbGV0ZSIsdmFsdWU6ZnVuY3Rpb24oeCl7dmFyIFQ9dGhpcy5fb2JqO1RbeF09PT0xJiYoVFt4XT0wLHRoaXMuc2l6ZS0tKX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX29iaj1PYmplY3QuY3JlYXRlKG51bGwpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbih4KXtyZXR1cm4gdGhpcy5fb2JqW3hdPT09MX19LHtrZXk6InRvQXJyYXkiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHg9dGhpcztyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fb2JqKS5maWx0ZXIoZnVuY3Rpb24oVCl7cmV0dXJuIHguaGFzKFQpfSl9fSx7a2V5OiJmb3JFYWNoIix2YWx1ZTpmdW5jdGlvbih4LFQpe3JldHVybiB0aGlzLnRvQXJyYXkoKS5mb3JFYWNoKHgsVCl9fV0pLHl9KCksWTU9KHR5cGVvZiBTZXQ+InUiPyJ1bmRlZmluZWQiOmYoU2V0KSkhPT1mSz9TZXQ6ZEssRlQ9ZnVuY3Rpb24oZyx4KXt2YXIgVD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITA7aWYoZz09PXZvaWQgMHx8eD09PXZvaWQgMHx8IU90KGcpKXt2bCgiQW4gZWxlbWVudCBtdXN0IGhhdmUgYSBjb3JlIHJlZmVyZW5jZSBhbmQgcGFyYW1ldGVycyBzZXQiKTtyZXR1cm59dmFyIEw9eC5ncm91cDtpZihMPT1udWxsJiYoeC5kYXRhJiZ4LmRhdGEuc291cmNlIT1udWxsJiZ4LmRhdGEudGFyZ2V0IT1udWxsP0w9ImVkZ2VzIjpMPSJub2RlcyIpLEwhPT0ibm9kZXMiJiZMIT09ImVkZ2VzIil7dmwoIkFuIGVsZW1lbnQgbXVzdCBiZSBvZiB0eXBlIGBub2Rlc2Agb3IgYGVkZ2VzYDsgeW91IHNwZWNpZmllZCBgIitMKyJgIik7cmV0dXJufXRoaXMubGVuZ3RoPTEsdGhpc1swXT10aGlzO3ZhciBPPXRoaXMuX3ByaXZhdGU9e2N5Omcsc2luZ2xlOiEwLGRhdGE6eC5kYXRhfHx7fSxwb3NpdGlvbjp4LnBvc2l0aW9ufHx7eDowLHk6MH0sYXV0b1dpZHRoOnZvaWQgMCxhdXRvSGVpZ2h0OnZvaWQgMCxhdXRvUGFkZGluZzp2b2lkIDAsY29tcG91bmRCb3VuZHNDbGVhbjohMSxsaXN0ZW5lcnM6W10sZ3JvdXA6TCxzdHlsZTp7fSxyc3R5bGU6e30sc3R5bGVDeHRzOltdLHN0eWxlS2V5czp7fSxyZW1vdmVkOiEwLHNlbGVjdGVkOiEheC5zZWxlY3RlZCxzZWxlY3RhYmxlOnguc2VsZWN0YWJsZT09PXZvaWQgMD8hMDohIXguc2VsZWN0YWJsZSxsb2NrZWQ6ISF4LmxvY2tlZCxncmFiYmVkOiExLGdyYWJiYWJsZTp4LmdyYWJiYWJsZT09PXZvaWQgMD8hMDohIXguZ3JhYmJhYmxlLHBhbm5hYmxlOngucGFubmFibGU9PT12b2lkIDA/TD09PSJlZGdlcyI6ISF4LnBhbm5hYmxlLGFjdGl2ZTohMSxjbGFzc2VzOm5ldyBZNSxhbmltYXRpb246e2N1cnJlbnQ6W10scXVldWU6W119LHJzY3JhdGNoOnt9LHNjcmF0Y2g6eC5zY3JhdGNofHx7fSxlZGdlczpbXSxjaGlsZHJlbjpbXSxwYXJlbnQ6eC5wYXJlbnQmJngucGFyZW50LmlzTm9kZSgpP3gucGFyZW50Om51bGwsdHJhdmVyc2FsQ2FjaGU6e30sYmFja2dyb3VuZGluZzohMSxiYkNhY2hlOm51bGwsYmJDYWNoZVNoaWZ0Ont4OjAseTowfSxib2R5Qm91bmRzOm51bGwsb3ZlcmxheUJvdW5kczpudWxsLGxhYmVsQm91bmRzOnthbGw6bnVsbCxzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbCxtYWluOm51bGx9LGFycm93Qm91bmRzOntzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbCwibWlkLXNvdXJjZSI6bnVsbCwibWlkLXRhcmdldCI6bnVsbH19O2lmKE8ucG9zaXRpb24ueD09bnVsbCYmKE8ucG9zaXRpb24ueD0wKSxPLnBvc2l0aW9uLnk9PW51bGwmJihPLnBvc2l0aW9uLnk9MCkseC5yZW5kZXJlZFBvc2l0aW9uKXt2YXIgUD14LnJlbmRlcmVkUG9zaXRpb24sJD1nLnBhbigpLHE9Zy56b29tKCk7Ty5wb3NpdGlvbj17eDooUC54LSQueCkvcSx5OihQLnktJC55KS9xfX12YXIgUz1bXTtmdCh4LmNsYXNzZXMpP1M9eC5jbGFzc2VzOm10KHguY2xhc3NlcykmJihTPXguY2xhc3Nlcy5zcGxpdCgvXHMrLykpO2Zvcih2YXIgVj0wLFk9Uy5sZW5ndGg7VjxZO1YrKyl7dmFyIHJ0PVNbVl07IXJ0fHxydD09PSIifHxPLmNsYXNzZXMuYWRkKHJ0KX10aGlzLmNyZWF0ZUVtaXR0ZXIoKTt2YXIgb3Q9eC5zdHlsZXx8eC5jc3M7b3QmJihTYygiU2V0dGluZyBhIGBzdHlsZWAgYnlwYXNzIGF0IGVsZW1lbnQgY3JlYXRpb24gc2hvdWxkIGJlIGRvbmUgb25seSB3aGVuIGFic29sdXRlbHkgbmVjZXNzYXJ5LiAgVHJ5IHRvIHVzZSB0aGUgc3R5bGVzaGVldCBpbnN0ZWFkLiIpLHRoaXMuc3R5bGUob3QpKSwoVD09PXZvaWQgMHx8VCkmJnRoaXMucmVzdG9yZSgpfSxvTj1mdW5jdGlvbihnKXtyZXR1cm4gZz17YmZzOmcuYmZzfHwhZy5kZnMsZGZzOmcuZGZzfHwhZy5iZnN9LGZ1bmN0aW9uKFQsTCxPKXt2YXIgUDt1dChUKSYmIVR0KFQpJiYoUD1ULFQ9UC5yb290c3x8UC5yb290LEw9UC52aXNpdCxPPVAuZGlyZWN0ZWQpLE89YXJndW1lbnRzLmxlbmd0aD09PTImJiF5dChMKT9MOk8sTD15dChMKT9MOmZ1bmN0aW9uKCl7fTtmb3IodmFyICQ9dGhpcy5fcHJpdmF0ZS5jeSxxPVQ9bXQoVCk/dGhpcy5maWx0ZXIoVCk6VCxTPVtdLFY9W10sWT17fSxydD17fSxvdD17fSxodD0wLGR0LEx0PXRoaXMuYnlHcm91cCgpLGt0PUx0Lm5vZGVzLER0PUx0LmVkZ2VzLFB0PTA7UHQ8cS5sZW5ndGg7UHQrKyl7dmFyICR0PXFbUHRdLFp0PSR0LmlkKCk7JHQuaXNOb2RlKCkmJihTLnVuc2hpZnQoJHQpLGcuYmZzJiYob3RbWnRdPSEwLFYucHVzaCgkdCkpLHJ0W1p0XT0wKX1mb3IodmFyIFl0PWZ1bmN0aW9uKCl7dmFyIEZlPWcuYmZzP1Muc2hpZnQoKTpTLnBvcCgpLHdlPUZlLmlkKCk7aWYoZy5kZnMpe2lmKG90W3dlXSlyZXR1cm4iY29udGludWUiO290W3dlXT0hMCxWLnB1c2goRmUpfXZhciBibj1ydFt3ZV0semU9WVt3ZV0sR2U9emUhPW51bGw/emUuc291cmNlKCk6bnVsbCxFbj16ZSE9bnVsbD96ZS50YXJnZXQoKTpudWxsLEluPXplPT1udWxsP3ZvaWQgMDpGZS5zYW1lKEdlKT9FblswXTpHZVswXSxZbj12b2lkIDA7aWYoWW49TChGZSx6ZSxJbixodCsrLGJuKSxZbj09PSEwKXJldHVybiBkdD1GZSwiYnJlYWsiO2lmKFluPT09ITEpcmV0dXJuImJyZWFrIjtmb3IodmFyIFNuPUZlLmNvbm5lY3RlZEVkZ2VzKCkuZmlsdGVyKGZ1bmN0aW9uKGVyKXtyZXR1cm4oIU98fGVyLnNvdXJjZSgpLnNhbWUoRmUpKSYmRHQuaGFzKGVyKX0pLFduPTA7V248U24ubGVuZ3RoO1duKyspe3ZhciBycj1TbltXbl0sd3I9cnIuY29ubmVjdGVkTm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oZXIpe3JldHVybiFlci5zYW1lKEZlKSYma3QuaGFzKGVyKX0pLHVyPXdyLmlkKCk7d3IubGVuZ3RoIT09MCYmIW90W3VyXSYmKHdyPXdyWzBdLFMucHVzaCh3ciksZy5iZnMmJihvdFt1cl09ITAsVi5wdXNoKHdyKSksWVt1cl09cnIscnRbdXJdPXJ0W3dlXSsxKX19O1MubGVuZ3RoIT09MDspe3ZhciBxdD1ZdCgpO2lmKHF0IT09ImNvbnRpbnVlIiYmcXQ9PT0iYnJlYWsiKWJyZWFrfWZvcih2YXIgbmU9JC5jb2xsZWN0aW9uKCksR3Q9MDtHdDxWLmxlbmd0aDtHdCsrKXt2YXIgZ2U9VltHdF0sYmU9WVtnZS5pZCgpXTtiZSE9bnVsbCYmbmUucHVzaChiZSksbmUucHVzaChnZSl9cmV0dXJue3BhdGg6JC5jb2xsZWN0aW9uKG5lKSxmb3VuZDokLmNvbGxlY3Rpb24oZHQpfX19LFRrPXticmVhZHRoRmlyc3RTZWFyY2g6b04oe2JmczohMH0pLGRlcHRoRmlyc3RTZWFyY2g6b04oe2RmczohMH0pfTtUay5iZnM9VGsuYnJlYWR0aEZpcnN0U2VhcmNoLFRrLmRmcz1Uay5kZXB0aEZpcnN0U2VhcmNoO3ZhciBnSz1IZShmdW5jdGlvbih5LGcpeyhmdW5jdGlvbigpe3ZhciB4LFQsTCxPLFAsJCxxLFMsVixZLHJ0LG90LGh0LGR0LEx0O0w9TWF0aC5mbG9vcixZPU1hdGgubWluLFQ9ZnVuY3Rpb24oa3QsRHQpe3JldHVybiBrdDxEdD8tMTprdD5EdD8xOjB9LFY9ZnVuY3Rpb24oa3QsRHQsUHQsJHQsWnQpe3ZhciBZdDtpZihQdD09bnVsbCYmKFB0PTApLFp0PT1udWxsJiYoWnQ9VCksUHQ8MCl0aHJvdyBuZXcgRXJyb3IoImxvIG11c3QgYmUgbm9uLW5lZ2F0aXZlIik7Zm9yKCR0PT1udWxsJiYoJHQ9a3QubGVuZ3RoKTtQdDwkdDspWXQ9TCgoUHQrJHQpLzIpLFp0KER0LGt0W1l0XSk8MD8kdD1ZdDpQdD1ZdCsxO3JldHVybltdLnNwbGljZS5hcHBseShrdCxbUHQsUHQtUHRdLmNvbmNhdChEdCkpLER0fSwkPWZ1bmN0aW9uKGt0LER0LFB0KXtyZXR1cm4gUHQ9PW51bGwmJihQdD1UKSxrdC5wdXNoKER0KSxkdChrdCwwLGt0Lmxlbmd0aC0xLFB0KX0sUD1mdW5jdGlvbihrdCxEdCl7dmFyIFB0LCR0O3JldHVybiBEdD09bnVsbCYmKER0PVQpLFB0PWt0LnBvcCgpLGt0Lmxlbmd0aD8oJHQ9a3RbMF0sa3RbMF09UHQsTHQoa3QsMCxEdCkpOiR0PVB0LCR0fSxTPWZ1bmN0aW9uKGt0LER0LFB0KXt2YXIgJHQ7cmV0dXJuIFB0PT1udWxsJiYoUHQ9VCksJHQ9a3RbMF0sa3RbMF09RHQsTHQoa3QsMCxQdCksJHR9LHE9ZnVuY3Rpb24oa3QsRHQsUHQpe3ZhciAkdDtyZXR1cm4gUHQ9PW51bGwmJihQdD1UKSxrdC5sZW5ndGgmJlB0KGt0WzBdLER0KTwwJiYoJHQ9W2t0WzBdLER0XSxEdD0kdFswXSxrdFswXT0kdFsxXSxMdChrdCwwLFB0KSksRHR9LE89ZnVuY3Rpb24oa3QsRHQpe3ZhciBQdCwkdCxadCxZdCxxdCxuZTtmb3IoRHQ9PW51bGwmJihEdD1UKSxZdD0oZnVuY3Rpb24oKXtuZT1bXTtmb3IodmFyIEd0PTAsZ2U9TChrdC5sZW5ndGgvMik7MDw9Z2U/R3Q8Z2U6R3Q+Z2U7MDw9Z2U/R3QrKzpHdC0tKW5lLnB1c2goR3QpO3JldHVybiBuZX0pLmFwcGx5KHRoaXMpLnJldmVyc2UoKSxxdD1bXSwkdD0wLFp0PVl0Lmxlbmd0aDskdDxadDskdCsrKVB0PVl0WyR0XSxxdC5wdXNoKEx0KGt0LFB0LER0KSk7cmV0dXJuIHF0fSxodD1mdW5jdGlvbihrdCxEdCxQdCl7dmFyICR0O2lmKFB0PT1udWxsJiYoUHQ9VCksJHQ9a3QuaW5kZXhPZihEdCksJHQhPT0tMSlyZXR1cm4gZHQoa3QsMCwkdCxQdCksTHQoa3QsJHQsUHQpfSxydD1mdW5jdGlvbihrdCxEdCxQdCl7dmFyICR0LFp0LFl0LHF0LG5lO2lmKFB0PT1udWxsJiYoUHQ9VCksWnQ9a3Quc2xpY2UoMCxEdCksIVp0Lmxlbmd0aClyZXR1cm4gWnQ7Zm9yKE8oWnQsUHQpLG5lPWt0LnNsaWNlKER0KSxZdD0wLHF0PW5lLmxlbmd0aDtZdDxxdDtZdCsrKSR0PW5lW1l0XSxxKFp0LCR0LFB0KTtyZXR1cm4gWnQuc29ydChQdCkucmV2ZXJzZSgpfSxvdD1mdW5jdGlvbihrdCxEdCxQdCl7dmFyICR0LFp0LFl0LHF0LG5lLEd0LGdlLGJlLGllO2lmKFB0PT1udWxsJiYoUHQ9VCksRHQqMTA8PWt0Lmxlbmd0aCl7aWYoWXQ9a3Quc2xpY2UoMCxEdCkuc29ydChQdCksIVl0Lmxlbmd0aClyZXR1cm4gWXQ7Zm9yKFp0PVl0W1l0Lmxlbmd0aC0xXSxnZT1rdC5zbGljZShEdCkscXQ9MCxHdD1nZS5sZW5ndGg7cXQ8R3Q7cXQrKykkdD1nZVtxdF0sUHQoJHQsWnQpPDAmJihWKFl0LCR0LDAsbnVsbCxQdCksWXQucG9wKCksWnQ9WXRbWXQubGVuZ3RoLTFdKTtyZXR1cm4gWXR9Zm9yKE8oa3QsUHQpLGllPVtdLG5lPTAsYmU9WShEdCxrdC5sZW5ndGgpOzA8PWJlP25lPGJlOm5lPmJlOzA8PWJlPysrbmU6LS1uZSlpZS5wdXNoKFAoa3QsUHQpKTtyZXR1cm4gaWV9LGR0PWZ1bmN0aW9uKGt0LER0LFB0LCR0KXt2YXIgWnQsWXQscXQ7Zm9yKCR0PT1udWxsJiYoJHQ9VCksWnQ9a3RbUHRdO1B0PkR0Oyl7aWYocXQ9UHQtMT4+MSxZdD1rdFtxdF0sJHQoWnQsWXQpPDApe2t0W1B0XT1ZdCxQdD1xdDtjb250aW51ZX1icmVha31yZXR1cm4ga3RbUHRdPVp0fSxMdD1mdW5jdGlvbihrdCxEdCxQdCl7dmFyICR0LFp0LFl0LHF0LG5lO2ZvcihQdD09bnVsbCYmKFB0PVQpLFp0PWt0Lmxlbmd0aCxuZT1EdCxZdD1rdFtEdF0sJHQ9MipEdCsxOyR0PFp0OylxdD0kdCsxLHF0PFp0JiYhKFB0KGt0WyR0XSxrdFtxdF0pPDApJiYoJHQ9cXQpLGt0W0R0XT1rdFskdF0sRHQ9JHQsJHQ9MipEdCsxO3JldHVybiBrdFtEdF09WXQsZHQoa3QsbmUsRHQsUHQpfSx4PWZ1bmN0aW9uKCl7a3QucHVzaD0kLGt0LnBvcD1QLGt0LnJlcGxhY2U9UyxrdC5wdXNocG9wPXEsa3QuaGVhcGlmeT1PLGt0LnVwZGF0ZUl0ZW09aHQsa3Qubmxhcmdlc3Q9cnQsa3QubnNtYWxsZXN0PW90O2Z1bmN0aW9uIGt0KER0KXt0aGlzLmNtcD1EdD8/VCx0aGlzLm5vZGVzPVtdfXJldHVybiBrdC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihEdCl7cmV0dXJuICQodGhpcy5ub2RlcyxEdCx0aGlzLmNtcCl9LGt0LnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXtyZXR1cm4gUCh0aGlzLm5vZGVzLHRoaXMuY21wKX0sa3QucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlc1swXX0sa3QucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKER0KXtyZXR1cm4gdGhpcy5ub2Rlcy5pbmRleE9mKER0KSE9PS0xfSxrdC5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbihEdCl7cmV0dXJuIFModGhpcy5ub2RlcyxEdCx0aGlzLmNtcCl9LGt0LnByb3RvdHlwZS5wdXNocG9wPWZ1bmN0aW9uKER0KXtyZXR1cm4gcSh0aGlzLm5vZGVzLER0LHRoaXMuY21wKX0sa3QucHJvdG90eXBlLmhlYXBpZnk9ZnVuY3Rpb24oKXtyZXR1cm4gTyh0aGlzLm5vZGVzLHRoaXMuY21wKX0sa3QucHJvdG90eXBlLnVwZGF0ZUl0ZW09ZnVuY3Rpb24oRHQpe3JldHVybiBodCh0aGlzLm5vZGVzLER0LHRoaXMuY21wKX0sa3QucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXM9W119LGt0LnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLmxlbmd0aD09PTB9LGt0LnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXMubGVuZ3RofSxrdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgRHQ7cmV0dXJuIER0PW5ldyBrdCxEdC5ub2Rlcz10aGlzLm5vZGVzLnNsaWNlKDApLER0fSxrdC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLnNsaWNlKDApfSxrdC5wcm90b3R5cGUuaW5zZXJ0PWt0LnByb3RvdHlwZS5wdXNoLGt0LnByb3RvdHlwZS50b3A9a3QucHJvdG90eXBlLnBlZWssa3QucHJvdG90eXBlLmZyb250PWt0LnByb3RvdHlwZS5wZWVrLGt0LnByb3RvdHlwZS5oYXM9a3QucHJvdG90eXBlLmNvbnRhaW5zLGt0LnByb3RvdHlwZS5jb3B5PWt0LnByb3RvdHlwZS5jbG9uZSxrdH0oKSxmdW5jdGlvbihrdCxEdCl7cmV0dXJuIHkuZXhwb3J0cz1EdCgpfSh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KX0pLmNhbGwoS24pfSksQ2s9Z0sscEs9UmYoe3Jvb3Q6bnVsbCx3ZWlnaHQ6ZnVuY3Rpb24oZyl7cmV0dXJuIDF9LGRpcmVjdGVkOiExfSksYks9e2RpamtzdHJhOmZ1bmN0aW9uKGcpe2lmKCF1dChnKSl7dmFyIHg9YXJndW1lbnRzO2c9e3Jvb3Q6eFswXSx3ZWlnaHQ6eFsxXSxkaXJlY3RlZDp4WzJdfX12YXIgVD1wSyhnKSxMPVQucm9vdCxPPVQud2VpZ2h0LFA9VC5kaXJlY3RlZCwkPXRoaXMscT1PLFM9bXQoTCk/dGhpcy5maWx0ZXIoTClbMF06TFswXSxWPXt9LFk9e30scnQ9e30sb3Q9dGhpcy5ieUdyb3VwKCksaHQ9b3Qubm9kZXMsZHQ9b3QuZWRnZXM7ZHQudW5tZXJnZUJ5KGZ1bmN0aW9uKGJuKXtyZXR1cm4gYm4uaXNMb29wKCl9KTtmb3IodmFyIEx0PWZ1bmN0aW9uKHplKXtyZXR1cm4gVlt6ZS5pZCgpXX0sa3Q9ZnVuY3Rpb24oemUsR2Upe1ZbemUuaWQoKV09R2UsRHQudXBkYXRlSXRlbSh6ZSl9LER0PW5ldyBDayhmdW5jdGlvbihibix6ZSl7cmV0dXJuIEx0KGJuKS1MdCh6ZSl9KSxQdD0wO1B0PGh0Lmxlbmd0aDtQdCsrKXt2YXIgJHQ9aHRbUHRdO1ZbJHQuaWQoKV09JHQuc2FtZShTKT8wOjEvMCxEdC5wdXNoKCR0KX1mb3IodmFyIFp0PWZ1bmN0aW9uKHplLEdlKXtmb3IodmFyIEVuPShQP3plLmVkZ2VzVG8oR2UpOnplLmVkZ2VzV2l0aChHZSkpLmludGVyc2VjdChkdCksSW49MS8wLFluLFNuPTA7U248RW4ubGVuZ3RoO1NuKyspe3ZhciBXbj1FbltTbl0scnI9cShXbik7KHJyPElufHwhWW4pJiYoSW49cnIsWW49V24pfXJldHVybntlZGdlOlluLGRpc3Q6SW59fTtEdC5zaXplKCk+MDspe3ZhciBZdD1EdC5wb3AoKSxxdD1MdChZdCksbmU9WXQuaWQoKTtpZihydFtuZV09cXQscXQhPT0xLzApZm9yKHZhciBHdD1ZdC5uZWlnaGJvcmhvb2QoKS5pbnRlcnNlY3QoaHQpLGdlPTA7Z2U8R3QubGVuZ3RoO2dlKyspe3ZhciBiZT1HdFtnZV0saWU9YmUuaWQoKSxGZT1adChZdCxiZSksd2U9cXQrRmUuZGlzdDt3ZTxMdChiZSkmJihrdChiZSx3ZSksWVtpZV09e25vZGU6WXQsZWRnZTpGZS5lZGdlfSl9fXJldHVybntkaXN0YW5jZVRvOmZ1bmN0aW9uKHplKXt2YXIgR2U9bXQoemUpP2h0LmZpbHRlcih6ZSlbMF06emVbMF07cmV0dXJuIHJ0W0dlLmlkKCldfSxwYXRoVG86ZnVuY3Rpb24oemUpe3ZhciBHZT1tdCh6ZSk/aHQuZmlsdGVyKHplKVswXTp6ZVswXSxFbj1bXSxJbj1HZSxZbj1Jbi5pZCgpO2lmKEdlLmxlbmd0aD4wKWZvcihFbi51bnNoaWZ0KEdlKTtZW1luXTspe3ZhciBTbj1ZW1luXTtFbi51bnNoaWZ0KFNuLmVkZ2UpLEVuLnVuc2hpZnQoU24ubm9kZSksSW49U24ubm9kZSxZbj1Jbi5pZCgpfXJldHVybiAkLnNwYXduKEVuKX19fX0sd0s9e2tydXNrYWw6ZnVuY3Rpb24oZyl7Zz1nfHxmdW5jdGlvbihQdCl7cmV0dXJuIDF9O2Zvcih2YXIgeD10aGlzLmJ5R3JvdXAoKSxUPXgubm9kZXMsTD14LmVkZ2VzLE89VC5sZW5ndGgsUD1uZXcgQXJyYXkoTyksJD1ULHE9ZnVuY3Rpb24oJHQpe2Zvcih2YXIgWnQ9MDtadDxQLmxlbmd0aDtadCsrKXt2YXIgWXQ9UFtadF07aWYoWXQuaGFzKCR0KSlyZXR1cm4gWnR9fSxTPTA7UzxPO1MrKylQW1NdPXRoaXMuc3Bhd24oVFtTXSk7Zm9yKHZhciBWPUwuc29ydChmdW5jdGlvbihQdCwkdCl7cmV0dXJuIGcoUHQpLWcoJHQpfSksWT0wO1k8Vi5sZW5ndGg7WSsrKXt2YXIgcnQ9VltZXSxvdD1ydC5zb3VyY2UoKVswXSxodD1ydC50YXJnZXQoKVswXSxkdD1xKG90KSxMdD1xKGh0KSxrdD1QW2R0XSxEdD1QW0x0XTtkdCE9PUx0JiYoJC5tZXJnZShydCksa3QubWVyZ2UoRHQpLFAuc3BsaWNlKEx0LDEpKX1yZXR1cm4gJH19LHZLPVJmKHtyb290Om51bGwsZ29hbDpudWxsLHdlaWdodDpmdW5jdGlvbihnKXtyZXR1cm4gMX0saGV1cmlzdGljOmZ1bmN0aW9uKGcpe3JldHVybiAwfSxkaXJlY3RlZDohMX0pLG1LPXthU3RhcjpmdW5jdGlvbihnKXt2YXIgeD10aGlzLmN5KCksVD12SyhnKSxMPVQucm9vdCxPPVQuZ29hbCxQPVQuaGV1cmlzdGljLCQ9VC5kaXJlY3RlZCxxPVQud2VpZ2h0O0w9eC5jb2xsZWN0aW9uKEwpWzBdLE89eC5jb2xsZWN0aW9uKE8pWzBdO3ZhciBTPUwuaWQoKSxWPU8uaWQoKSxZPXt9LHJ0PXt9LG90PXt9LGh0PW5ldyBDayhmdW5jdGlvbihZbixTbil7cmV0dXJuIHJ0W1luLmlkKCldLXJ0W1NuLmlkKCldfSksZHQ9bmV3IFk1LEx0PXt9LGt0PXt9LER0PWZ1bmN0aW9uKFNuLFduKXtodC5wdXNoKFNuKSxkdC5hZGQoV24pfSxQdCwkdCxadD1mdW5jdGlvbigpe1B0PWh0LnBvcCgpLCR0PVB0LmlkKCksZHQuZGVsZXRlKCR0KX0sWXQ9ZnVuY3Rpb24oU24pe3JldHVybiBkdC5oYXMoU24pfTtEdChMLFMpLFlbU109MCxydFtTXT1QKEwpO2Zvcih2YXIgcXQ9MDtodC5zaXplKCk+MDspe2lmKFp0KCkscXQrKywkdD09PVYpe2Zvcih2YXIgbmU9W10sR3Q9TyxnZT1WLGJlPWt0W2dlXTtuZS51bnNoaWZ0KEd0KSxiZSE9bnVsbCYmbmUudW5zaGlmdChiZSksR3Q9THRbZ2VdLEd0IT1udWxsOylnZT1HdC5pZCgpLGJlPWt0W2dlXTtyZXR1cm57Zm91bmQ6ITAsZGlzdGFuY2U6WVskdF0scGF0aDp0aGlzLnNwYXduKG5lKSxzdGVwczpxdH19b3RbJHRdPSEwO2Zvcih2YXIgaWU9UHQuX3ByaXZhdGUuZWRnZXMsRmU9MDtGZTxpZS5sZW5ndGg7RmUrKyl7dmFyIHdlPWllW0ZlXTtpZih0aGlzLmhhc0VsZW1lbnRXaXRoSWQod2UuaWQoKSkmJiEoJCYmd2UuZGF0YSgic291cmNlIikhPT0kdCkpe3ZhciBibj13ZS5zb3VyY2UoKSx6ZT13ZS50YXJnZXQoKSxHZT1ibi5pZCgpIT09JHQ/Ym46emUsRW49R2UuaWQoKTtpZih0aGlzLmhhc0VsZW1lbnRXaXRoSWQoRW4pJiYhb3RbRW5dKXt2YXIgSW49WVskdF0rcSh3ZSk7aWYoIVl0KEVuKSl7WVtFbl09SW4scnRbRW5dPUluK1AoR2UpLER0KEdlLEVuKSxMdFtFbl09UHQsa3RbRW5dPXdlO2NvbnRpbnVlfUluPFlbRW5dJiYoWVtFbl09SW4scnRbRW5dPUluK1AoR2UpLEx0W0VuXT1QdCxrdFtFbl09d2UpfX19fXJldHVybntmb3VuZDohMSxkaXN0YW5jZTp2b2lkIDAscGF0aDp2b2lkIDAsc3RlcHM6cXR9fX0seUs9UmYoe3dlaWdodDpmdW5jdGlvbihnKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITF9KSx4Sz17ZmxveWRXYXJzaGFsbDpmdW5jdGlvbihnKXtmb3IodmFyIHg9dGhpcy5jeSgpLFQ9eUsoZyksTD1ULndlaWdodCxPPVQuZGlyZWN0ZWQsUD1MLCQ9dGhpcy5ieUdyb3VwKCkscT0kLm5vZGVzLFM9JC5lZGdlcyxWPXEubGVuZ3RoLFk9VipWLHJ0PWZ1bmN0aW9uKHJyKXtyZXR1cm4gcS5pbmRleE9mKHJyKX0sb3Q9ZnVuY3Rpb24ocnIpe3JldHVybiBxW3JyXX0saHQ9bmV3IEFycmF5KFkpLGR0PTA7ZHQ8WTtkdCsrKXt2YXIgTHQ9ZHQlVixrdD0oZHQtTHQpL1Y7a3Q9PT1MdD9odFtkdF09MDpodFtkdF09MS8wfWZvcih2YXIgRHQ9bmV3IEFycmF5KFkpLFB0PW5ldyBBcnJheShZKSwkdD0wOyR0PFMubGVuZ3RoOyR0Kyspe3ZhciBadD1TWyR0XSxZdD1adC5zb3VyY2UoKVswXSxxdD1adC50YXJnZXQoKVswXTtpZihZdCE9PXF0KXt2YXIgbmU9cnQoWXQpLEd0PXJ0KHF0KSxnZT1uZSpWK0d0LGJlPVAoWnQpO2lmKGh0W2dlXT5iZSYmKGh0W2dlXT1iZSxEdFtnZV09R3QsUHRbZ2VdPVp0KSwhTyl7dmFyIGllPUd0KlYrbmU7IU8mJmh0W2llXT5iZSYmKGh0W2llXT1iZSxEdFtpZV09bmUsUHRbaWVdPVp0KX19fWZvcih2YXIgRmU9MDtGZTxWO0ZlKyspZm9yKHZhciB3ZT0wO3dlPFY7d2UrKylmb3IodmFyIGJuPXdlKlYrRmUsemU9MDt6ZTxWO3plKyspe3ZhciBHZT13ZSpWK3plLEVuPUZlKlYremU7aHRbYm5dK2h0W0VuXTxodFtHZV0mJihodFtHZV09aHRbYm5dK2h0W0VuXSxEdFtHZV09RHRbYm5dKX12YXIgSW49ZnVuY3Rpb24ocnIpe3JldHVybihtdChycik/eC5maWx0ZXIocnIpOnJyKVswXX0sWW49ZnVuY3Rpb24ocnIpe3JldHVybiBydChJbihycikpfSxTbj17ZGlzdGFuY2U6ZnVuY3Rpb24ocnIsd3Ipe3ZhciB1cj1ZbihyciksZXI9WW4od3IpO3JldHVybiBodFt1cipWK2VyXX0scGF0aDpmdW5jdGlvbihycix3cil7dmFyIHVyPVluKHJyKSxlcj1Zbih3ciksdm49b3QodXIpO2lmKHVyPT09ZXIpcmV0dXJuIHZuLmNvbGxlY3Rpb24oKTtpZihEdFt1cipWK2VyXT09bnVsbClyZXR1cm4geC5jb2xsZWN0aW9uKCk7dmFyIGdyPXguY29sbGVjdGlvbigpLGZyPXVyLEpyO2Zvcihnci5tZXJnZSh2bik7dXIhPT1lcjspZnI9dXIsdXI9RHRbdXIqVitlcl0sSnI9UHRbZnIqVit1cl0sZ3IubWVyZ2UoSnIpLGdyLm1lcmdlKG90KHVyKSk7cmV0dXJuIGdyfX07cmV0dXJuIFNufX0sa0s9UmYoe3dlaWdodDpmdW5jdGlvbihnKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITEscm9vdDpudWxsfSksRUs9e2JlbGxtYW5Gb3JkOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMsVD1rSyhnKSxMPVQud2VpZ2h0LE89VC5kaXJlY3RlZCxQPVQucm9vdCwkPUwscT10aGlzLFM9dGhpcy5jeSgpLFY9dGhpcy5ieUdyb3VwKCksWT1WLmVkZ2VzLHJ0PVYubm9kZXMsb3Q9cnQubGVuZ3RoLGh0PW5ldyBHYixkdD0hMSxMdD1bXTtQPVMuY29sbGVjdGlvbihQKVswXSxZLnVubWVyZ2VCeShmdW5jdGlvbihxaSl7cmV0dXJuIHFpLmlzTG9vcCgpfSk7Zm9yKHZhciBrdD1ZLmxlbmd0aCxEdD1mdW5jdGlvbihTaSl7dmFyIFVpPWh0LmdldChTaS5pZCgpKTtyZXR1cm4gVWl8fChVaT17fSxodC5zZXQoU2kuaWQoKSxVaSkpLFVpfSxQdD1mdW5jdGlvbihTaSl7cmV0dXJuKG10KFNpKT9TLiQoU2kpOlNpKVswXX0sJHQ9ZnVuY3Rpb24oU2kpe3JldHVybiBEdChQdChTaSkpLmRpc3R9LFp0PWZ1bmN0aW9uKFNpKXtmb3IodmFyIFVpPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpQLFZhPVB0KFNpKSxRcz1bXSxxcz1WYTs7KXtpZihxcz09bnVsbClyZXR1cm4geC5zcGF3bigpO3ZhciBUcj1EdChxcyksUXQ9VHIuZWRnZSxqbj1Uci5wcmVkO2lmKFFzLnVuc2hpZnQocXNbMF0pLHFzLnNhbWUoVWkpJiZRcy5sZW5ndGg+MClicmVhaztRdCE9bnVsbCYmUXMudW5zaGlmdChRdCkscXM9am59cmV0dXJuIHEuc3Bhd24oUXMpfSxZdD0wO1l0PG90O1l0Kyspe3ZhciBxdD1ydFtZdF0sbmU9RHQocXQpO3F0LnNhbWUoUCk/bmUuZGlzdD0wOm5lLmRpc3Q9MS8wLG5lLnByZWQ9bnVsbCxuZS5lZGdlPW51bGx9Zm9yKHZhciBHdD0hMSxnZT1mdW5jdGlvbihTaSxVaSxWYSxRcyxxcyxUcil7dmFyIFF0PVFzLmRpc3QrVHI7UXQ8cXMuZGlzdCYmIVZhLnNhbWUoUXMuZWRnZSkmJihxcy5kaXN0PVF0LHFzLnByZWQ9U2kscXMuZWRnZT1WYSxHdD0hMCl9LGJlPTE7YmU8b3Q7YmUrKyl7R3Q9ITE7Zm9yKHZhciBpZT0wO2llPGt0O2llKyspe3ZhciBGZT1ZW2llXSx3ZT1GZS5zb3VyY2UoKSxibj1GZS50YXJnZXQoKSx6ZT0kKEZlKSxHZT1EdCh3ZSksRW49RHQoYm4pO2dlKHdlLGJuLEZlLEdlLEVuLHplKSxPfHxnZShibix3ZSxGZSxFbixHZSx6ZSl9aWYoIUd0KWJyZWFrfWlmKEd0KWZvcih2YXIgSW49W10sWW49MDtZbjxrdDtZbisrKXt2YXIgU249WVtZbl0sV249U24uc291cmNlKCkscnI9U24udGFyZ2V0KCksd3I9JChTbiksdXI9RHQoV24pLmRpc3QsZXI9RHQocnIpLmRpc3Q7aWYodXIrd3I8ZXJ8fCFPJiZlcit3cjx1cilpZihkdHx8KFNjKCJHcmFwaCBjb250YWlucyBhIG5lZ2F0aXZlIHdlaWdodCBjeWNsZSBmb3IgQmVsbG1hbi1Gb3JkIiksZHQ9ITApLGcuZmluZE5lZ2F0aXZlV2VpZ2h0Q3ljbGVzIT09ITEpe3ZhciB2bj1bXTt1cit3cjxlciYmdm4ucHVzaChXbiksIU8mJmVyK3dyPHVyJiZ2bi5wdXNoKHJyKTtmb3IodmFyIGdyPXZuLmxlbmd0aCxmcj0wO2ZyPGdyO2ZyKyspe3ZhciBKcj12bltmcl0sdmk9W0pyXTt2aS5wdXNoKER0KEpyKS5lZGdlKTtmb3IodmFyIFhzPUR0KEpyKS5wcmVkO3ZpLmluZGV4T2YoWHMpPT09LTE7KXZpLnB1c2goWHMpLHZpLnB1c2goRHQoWHMpLmVkZ2UpLFhzPUR0KFhzKS5wcmVkO3ZpPXZpLnNsaWNlKHZpLmluZGV4T2YoWHMpKTtmb3IodmFyIEVhPXZpWzBdLmlkKCksQ2k9MCxoaT0yO2hpPHZpLmxlbmd0aDtoaSs9Mil2aVtoaV0uaWQoKTxFYSYmKEVhPXZpW2hpXS5pZCgpLENpPWhpKTt2aT12aS5zbGljZShDaSkuY29uY2F0KHZpLnNsaWNlKDAsQ2kpKSx2aS5wdXNoKHZpWzBdKTt2YXIgZ3M9dmkubWFwKGZ1bmN0aW9uKHFpKXtyZXR1cm4gcWkuaWQoKX0pLmpvaW4oIiwiKTtJbi5pbmRleE9mKGdzKT09PS0xJiYoTHQucHVzaChxLnNwYXduKHZpKSksSW4ucHVzaChncykpfX1lbHNlIGJyZWFrfXJldHVybntkaXN0YW5jZVRvOiR0LHBhdGhUbzpadCxoYXNOZWdhdGl2ZVdlaWdodEN5Y2xlOmR0LG5lZ2F0aXZlV2VpZ2h0Q3ljbGVzOkx0fX19LFRLPU1hdGguc3FydCgyKSxDSz1mdW5jdGlvbihnLHgsVCl7VC5sZW5ndGg9PT0wJiZ2bCgiS2FyZ2VyLVN0ZWluIG11c3QgYmUgcnVuIG9uIGEgY29ubmVjdGVkIChzdWIpZ3JhcGgiKTtmb3IodmFyIEw9VFtnXSxPPUxbMV0sUD1MWzJdLCQ9eFtPXSxxPXhbUF0sUz1ULFY9Uy5sZW5ndGgtMTtWPj0wO1YtLSl7dmFyIFk9U1tWXSxydD1ZWzFdLG90PVlbMl07KHhbcnRdPT09JCYmeFtvdF09PT1xfHx4W3J0XT09PXEmJnhbb3RdPT09JCkmJlMuc3BsaWNlKFYsMSl9Zm9yKHZhciBodD0wO2h0PFMubGVuZ3RoO2h0Kyspe3ZhciBkdD1TW2h0XTtkdFsxXT09PXE/KFNbaHRdPWR0LnNsaWNlKCksU1todF1bMV09JCk6ZHRbMl09PT1xJiYoU1todF09ZHQuc2xpY2UoKSxTW2h0XVsyXT0kKX1mb3IodmFyIEx0PTA7THQ8eC5sZW5ndGg7THQrKyl4W0x0XT09PXEmJih4W0x0XT0kKTtyZXR1cm4gU30sQ0w9ZnVuY3Rpb24oZyx4LFQsTCl7Zm9yKDtUPkw7KXt2YXIgTz1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqeC5sZW5ndGgpO3g9Q0soTyxnLHgpLFQtLX1yZXR1cm4geH0sX0s9e2thcmdlclN0ZWluOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcyx4PXRoaXMuYnlHcm91cCgpLFQ9eC5ub2RlcyxMPXguZWRnZXM7TC51bm1lcmdlQnkoZnVuY3Rpb24oRW4pe3JldHVybiBFbi5pc0xvb3AoKX0pO3ZhciBPPVQubGVuZ3RoLFA9TC5sZW5ndGgsJD1NYXRoLmNlaWwoTWF0aC5wb3coTWF0aC5sb2coTykvTWF0aC5MTjIsMikpLHE9TWF0aC5mbG9vcihPL1RLKTtpZihPPDIpe3ZsKCJBdCBsZWFzdCAyIG5vZGVzIGFyZSByZXF1aXJlZCBmb3IgS2FyZ2VyLVN0ZWluIGFsZ29yaXRobSIpO3JldHVybn1mb3IodmFyIFM9W10sVj0wO1Y8UDtWKyspe3ZhciBZPUxbVl07Uy5wdXNoKFtWLFQuaW5kZXhPZihZLnNvdXJjZSgpKSxULmluZGV4T2YoWS50YXJnZXQoKSldKX1mb3IodmFyIHJ0PTEvMCxvdD1bXSxodD1uZXcgQXJyYXkoTyksZHQ9bmV3IEFycmF5KE8pLEx0PW5ldyBBcnJheShPKSxrdD1mdW5jdGlvbihJbixZbil7Zm9yKHZhciBTbj0wO1NuPE87U24rKylZbltTbl09SW5bU25dfSxEdD0wO0R0PD0kO0R0Kyspe2Zvcih2YXIgUHQ9MDtQdDxPO1B0KyspZHRbUHRdPVB0O3ZhciAkdD1DTChkdCxTLnNsaWNlKCksTyxxKSxadD0kdC5zbGljZSgpO2t0KGR0LEx0KTt2YXIgWXQ9Q0woZHQsJHQscSwyKSxxdD1DTChMdCxadCxxLDIpO1l0Lmxlbmd0aDw9cXQubGVuZ3RoJiZZdC5sZW5ndGg8cnQ/KHJ0PVl0Lmxlbmd0aCxvdD1ZdCxrdChkdCxodCkpOnF0Lmxlbmd0aDw9WXQubGVuZ3RoJiZxdC5sZW5ndGg8cnQmJihydD1xdC5sZW5ndGgsb3Q9cXQsa3QoTHQsaHQpKX1mb3IodmFyIG5lPXRoaXMuc3Bhd24ob3QubWFwKGZ1bmN0aW9uKEVuKXtyZXR1cm4gTFtFblswXV19KSksR3Q9dGhpcy5zcGF3bigpLGdlPXRoaXMuc3Bhd24oKSxiZT1odFswXSxpZT0wO2llPGh0Lmxlbmd0aDtpZSsrKXt2YXIgRmU9aHRbaWVdLHdlPVRbaWVdO0ZlPT09YmU/R3QubWVyZ2Uod2UpOmdlLm1lcmdlKHdlKX12YXIgYm49ZnVuY3Rpb24oSW4pe3ZhciBZbj1nLnNwYXduKCk7cmV0dXJuIEluLmZvckVhY2goZnVuY3Rpb24oU24pe1luLm1lcmdlKFNuKSxTbi5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goZnVuY3Rpb24oV24pe2cuY29udGFpbnMoV24pJiYhbmUuY29udGFpbnMoV24pJiZZbi5tZXJnZShXbil9KX0pLFlufSx6ZT1bYm4oR3QpLGJuKGdlKV0sR2U9e2N1dDpuZSxjb21wb25lbnRzOnplLHBhcnRpdGlvbjE6R3QscGFydGl0aW9uMjpnZX07cmV0dXJuIEdlfX0sU0s9ZnVuY3Rpb24oZyl7cmV0dXJue3g6Zy54LHk6Zy55fX0sTlQ9ZnVuY3Rpb24oZyx4LFQpe3JldHVybnt4OmcueCp4K1QueCx5OmcueSp4K1QueX19LGNOPWZ1bmN0aW9uKGcseCxUKXtyZXR1cm57eDooZy54LVQueCkveCx5OihnLnktVC55KS94fX0sSzU9ZnVuY3Rpb24oZyl7cmV0dXJue3g6Z1swXSx5OmdbMV19fSxBSz1mdW5jdGlvbihnKXtmb3IodmFyIHg9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsVD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06Zy5sZW5ndGgsTD0xLzAsTz14O088VDtPKyspe3ZhciBQPWdbT107aXNGaW5pdGUoUCkmJihMPU1hdGgubWluKFAsTCkpfXJldHVybiBMfSxMSz1mdW5jdGlvbihnKXtmb3IodmFyIHg9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsVD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06Zy5sZW5ndGgsTD0tMS8wLE89eDtPPFQ7TysrKXt2YXIgUD1nW09dO2lzRmluaXRlKFApJiYoTD1NYXRoLm1heChQLEwpKX1yZXR1cm4gTH0sTUs9ZnVuY3Rpb24oZyl7Zm9yKHZhciB4PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLFQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOmcubGVuZ3RoLEw9MCxPPTAsUD14O1A8VDtQKyspe3ZhciAkPWdbUF07aXNGaW5pdGUoJCkmJihMKz0kLE8rKyl9cmV0dXJuIEwvT30sREs9ZnVuY3Rpb24oZyl7dmFyIHg9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsVD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06Zy5sZW5ndGgsTD1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITAsTz1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITAsUD1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06ITA7TD9nPWcuc2xpY2UoeCxUKTooVDxnLmxlbmd0aCYmZy5zcGxpY2UoVCxnLmxlbmd0aC1UKSx4PjAmJmcuc3BsaWNlKDAseCkpO2Zvcih2YXIgJD0wLHE9Zy5sZW5ndGgtMTtxPj0wO3EtLSl7dmFyIFM9Z1txXTtQP2lzRmluaXRlKFMpfHwoZ1txXT0tMS8wLCQrKyk6Zy5zcGxpY2UocSwxKX1PJiZnLnNvcnQoZnVuY3Rpb24ocnQsb3Qpe3JldHVybiBydC1vdH0pO3ZhciBWPWcubGVuZ3RoLFk9TWF0aC5mbG9vcihWLzIpO3JldHVybiBWJTIhPT0wP2dbWSsxKyRdOihnW1ktMSskXStnW1krJF0pLzJ9LElLPWZ1bmN0aW9uKGcpe3JldHVybiBNYXRoLlBJKmcvMTgwfSxCVD1mdW5jdGlvbihnLHgpe3JldHVybiBNYXRoLmF0YW4yKHgsZyktTWF0aC5QSS8yfSxfTD1NYXRoLmxvZzJ8fGZ1bmN0aW9uKHkpe3JldHVybiBNYXRoLmxvZyh5KS9NYXRoLmxvZygyKX0sdU49ZnVuY3Rpb24oZyl7cmV0dXJuIGc+MD8xOmc8MD8tMTowfSxDMz1mdW5jdGlvbihnLHgpe3JldHVybiBNYXRoLnNxcnQoXzMoZyx4KSl9LF8zPWZ1bmN0aW9uKGcseCl7dmFyIFQ9eC54LWcueCxMPXgueS1nLnk7cmV0dXJuIFQqVCtMKkx9LE9LPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD1nLmxlbmd0aCxUPTAsTD0wO0w8eDtMKyspVCs9Z1tMXTtmb3IodmFyIE89MDtPPHg7TysrKWdbT109Z1tPXS9UO3JldHVybiBnfSxvZj1mdW5jdGlvbihnLHgsVCxMKXtyZXR1cm4oMS1MKSooMS1MKSpnKzIqKDEtTCkqTCp4K0wqTCpUfSxYNT1mdW5jdGlvbihnLHgsVCxMKXtyZXR1cm57eDpvZihnLngseC54LFQueCxMKSx5Om9mKGcueSx4LnksVC55LEwpfX0sUEs9ZnVuY3Rpb24oZyx4LFQsTCl7dmFyIE89e3g6eC54LWcueCx5OngueS1nLnl9LFA9QzMoZyx4KSwkPXt4Ok8ueC9QLHk6Ty55L1B9O3JldHVybiBUPVQ/PzAsTD1MPz9UKlAse3g6Zy54KyQueCpMLHk6Zy55KyQueSpMfX0sX2s9ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBNYXRoLm1heChnLE1hdGgubWluKFQseCkpfSx6ZD1mdW5jdGlvbihnKXtpZihnPT1udWxsKXJldHVybnt4MToxLzAseTE6MS8wLHgyOi0xLzAseTI6LTEvMCx3OjAsaDowfTtpZihnLngxIT1udWxsJiZnLnkxIT1udWxsKXtpZihnLngyIT1udWxsJiZnLnkyIT1udWxsJiZnLngyPj1nLngxJiZnLnkyPj1nLnkxKXJldHVybnt4MTpnLngxLHkxOmcueTEseDI6Zy54Mix5MjpnLnkyLHc6Zy54Mi1nLngxLGg6Zy55Mi1nLnkxfTtpZihnLnchPW51bGwmJmcuaCE9bnVsbCYmZy53Pj0wJiZnLmg+PTApcmV0dXJue3gxOmcueDEseTE6Zy55MSx4MjpnLngxK2cudyx5MjpnLnkxK2cuaCx3OmcudyxoOmcuaH19fSxGSz1mdW5jdGlvbihnKXtyZXR1cm57eDE6Zy54MSx4MjpnLngyLHc6Zy53LHkxOmcueTEseTI6Zy55MixoOmcuaH19LE5LPWZ1bmN0aW9uKGcpe2cueDE9MS8wLGcueTE9MS8wLGcueDI9LTEvMCxnLnkyPS0xLzAsZy53PTAsZy5oPTB9LEJLPWZ1bmN0aW9uKGcseCl7Zy54MT1NYXRoLm1pbihnLngxLHgueDEpLGcueDI9TWF0aC5tYXgoZy54Mix4LngyKSxnLnc9Zy54Mi1nLngxLGcueTE9TWF0aC5taW4oZy55MSx4LnkxKSxnLnkyPU1hdGgubWF4KGcueTIseC55MiksZy5oPWcueTItZy55MX0sUks9ZnVuY3Rpb24oZyx4LFQpe2cueDE9TWF0aC5taW4oZy54MSx4KSxnLngyPU1hdGgubWF4KGcueDIseCksZy53PWcueDItZy54MSxnLnkxPU1hdGgubWluKGcueTEsVCksZy55Mj1NYXRoLm1heChnLnkyLFQpLGcuaD1nLnkyLWcueTF9LFJUPWZ1bmN0aW9uKGcpe3ZhciB4PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowO3JldHVybiBnLngxLT14LGcueDIrPXgsZy55MS09eCxnLnkyKz14LGcudz1nLngyLWcueDEsZy5oPWcueTItZy55MSxnfSxTTD1mdW5jdGlvbihnKXt2YXIgeD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06WzBdLFQsTCxPLFA7aWYoeC5sZW5ndGg9PT0xKVQ9TD1PPVA9eFswXTtlbHNlIGlmKHgubGVuZ3RoPT09MilUPU89eFswXSxQPUw9eFsxXTtlbHNlIGlmKHgubGVuZ3RoPT09NCl7dmFyICQ9RSh4LDQpO1Q9JFswXSxMPSRbMV0sTz0kWzJdLFA9JFszXX1yZXR1cm4gZy54MS09UCxnLngyKz1MLGcueTEtPVQsZy55Mis9TyxnLnc9Zy54Mi1nLngxLGcuaD1nLnkyLWcueTEsZ30sbE49ZnVuY3Rpb24oZyx4KXtnLngxPXgueDEsZy55MT14LnkxLGcueDI9eC54MixnLnkyPXgueTIsZy53PWcueDItZy54MSxnLmg9Zy55Mi1nLnkxfSxBTD1mdW5jdGlvbihnLHgpe3JldHVybiEoZy54MT54LngyfHx4LngxPmcueDJ8fGcueDI8eC54MXx8eC54MjxnLngxfHxnLnkyPHgueTF8fHgueTI8Zy55MXx8Zy55MT54LnkyfHx4LnkxPmcueTIpfSxRNT1mdW5jdGlvbihnLHgsVCl7cmV0dXJuIGcueDE8PXgmJng8PWcueDImJmcueTE8PVQmJlQ8PWcueTJ9LGpLPWZ1bmN0aW9uKGcseCl7cmV0dXJuIFE1KGcseC54LHgueSl9LGhOPWZ1bmN0aW9uKGcseCl7cmV0dXJuIFE1KGcseC54MSx4LnkxKSYmUTUoZyx4LngyLHgueTIpfSxmTj1mdW5jdGlvbihnLHgsVCxMLE8sUCwkKXt2YXIgcT1MayhPLFApLFM9Ty8yLFY9UC8yLFk7e3ZhciBydD1ULVMrcS0kLG90PUwtVi0kLGh0PVQrUy1xKyQsZHQ9b3Q7aWYoWT15bShnLHgsVCxMLHJ0LG90LGh0LGR0LCExKSxZLmxlbmd0aD4wKXJldHVybiBZfXt2YXIgTHQ9VCtTKyQsa3Q9TC1WK3EtJCxEdD1MdCxQdD1MK1YtcSskO2lmKFk9eW0oZyx4LFQsTCxMdCxrdCxEdCxQdCwhMSksWS5sZW5ndGg+MClyZXR1cm4gWX17dmFyICR0PVQtUytxLSQsWnQ9TCtWKyQsWXQ9VCtTLXErJCxxdD1adDtpZihZPXltKGcseCxULEwsJHQsWnQsWXQscXQsITEpLFkubGVuZ3RoPjApcmV0dXJuIFl9e3ZhciBuZT1ULVMtJCxHdD1MLVYrcS0kLGdlPW5lLGJlPUwrVi1xKyQ7aWYoWT15bShnLHgsVCxMLG5lLEd0LGdlLGJlLCExKSxZLmxlbmd0aD4wKXJldHVybiBZfXZhciBpZTt7dmFyIEZlPVQtUytxLHdlPUwtVitxO2lmKGllPVNrKGcseCxULEwsRmUsd2UscSskKSxpZS5sZW5ndGg+MCYmaWVbMF08PUZlJiZpZVsxXTw9d2UpcmV0dXJuW2llWzBdLGllWzFdXX17dmFyIGJuPVQrUy1xLHplPUwtVitxO2lmKGllPVNrKGcseCxULEwsYm4semUscSskKSxpZS5sZW5ndGg+MCYmaWVbMF0+PWJuJiZpZVsxXTw9emUpcmV0dXJuW2llWzBdLGllWzFdXX17dmFyIEdlPVQrUy1xLEVuPUwrVi1xO2lmKGllPVNrKGcseCxULEwsR2UsRW4scSskKSxpZS5sZW5ndGg+MCYmaWVbMF0+PUdlJiZpZVsxXT49RW4pcmV0dXJuW2llWzBdLGllWzFdXX17dmFyIEluPVQtUytxLFluPUwrVi1xO2lmKGllPVNrKGcseCxULEwsSW4sWW4scSskKSxpZS5sZW5ndGg+MCYmaWVbMF08PUluJiZpZVsxXT49WW4pcmV0dXJuW2llWzBdLGllWzFdXX1yZXR1cm5bXX0sJEs9ZnVuY3Rpb24oZyx4LFQsTCxPLFAsJCl7dmFyIHE9JCxTPU1hdGgubWluKFQsTyksVj1NYXRoLm1heChULE8pLFk9TWF0aC5taW4oTCxQKSxydD1NYXRoLm1heChMLFApO3JldHVybiBTLXE8PWcmJmc8PVYrcSYmWS1xPD14JiZ4PD1ydCtxfSx6Sz1mdW5jdGlvbihnLHgsVCxMLE8sUCwkLHEsUyl7dmFyIFY9e3gxOk1hdGgubWluKFQsJCxPKS1TLHgyOk1hdGgubWF4KFQsJCxPKStTLHkxOk1hdGgubWluKEwscSxQKS1TLHkyOk1hdGgubWF4KEwscSxQKStTfTtyZXR1cm4hKGc8Vi54MXx8Zz5WLngyfHx4PFYueTF8fHg+Vi55Mil9LHFLPWZ1bmN0aW9uKGcseCxULEwpe1QtPUw7dmFyIE89eCp4LTQqZypUO2lmKE88MClyZXR1cm5bXTt2YXIgUD1NYXRoLnNxcnQoTyksJD0yKmcscT0oLXgrUCkvJCxTPSgteC1QKS8kO3JldHVybltxLFNdfSxISz1mdW5jdGlvbihnLHgsVCxMLE8pe3ZhciBQPTFlLTU7Zz09PTAmJihnPVApLHgvPWcsVC89ZyxMLz1nO3ZhciAkLHEsUyxWLFkscnQsb3QsaHQ7aWYocT0oMypULXgqeCkvOSxTPS0oMjcqTCkreCooOSpULTIqKHgqeCkpLFMvPTU0LCQ9cSpxKnErUypTLE9bMV09MCxvdD14LzMsJD4wKXtZPVMrTWF0aC5zcXJ0KCQpLFk9WTwwPy1NYXRoLnBvdygtWSwxLzMpOk1hdGgucG93KFksMS8zKSxydD1TLU1hdGguc3FydCgkKSxydD1ydDwwPy1NYXRoLnBvdygtcnQsMS8zKTpNYXRoLnBvdyhydCwxLzMpLE9bMF09LW90K1krcnQsb3QrPShZK3J0KS8yLE9bNF09T1syXT0tb3Qsb3Q9TWF0aC5zcXJ0KDMpKigtcnQrWSkvMixPWzNdPW90LE9bNV09LW90O3JldHVybn1pZihPWzVdPU9bM109MCwkPT09MCl7aHQ9UzwwPy1NYXRoLnBvdygtUywxLzMpOk1hdGgucG93KFMsMS8zKSxPWzBdPS1vdCsyKmh0LE9bNF09T1syXT0tKGh0K290KTtyZXR1cm59cT0tcSxWPXEqcSpxLFY9TWF0aC5hY29zKFMvTWF0aC5zcXJ0KFYpKSxodD0yKk1hdGguc3FydChxKSxPWzBdPS1vdCtodCpNYXRoLmNvcyhWLzMpLE9bMl09LW90K2h0Kk1hdGguY29zKChWKzIqTWF0aC5QSSkvMyksT1s0XT0tb3QraHQqTWF0aC5jb3MoKFYrNCpNYXRoLlBJKS8zKX0sVks9ZnVuY3Rpb24oZyx4LFQsTCxPLFAsJCxxKXt2YXIgUz0xKlQqVC00KlQqTysyKlQqJCs0Kk8qTy00Kk8qJCskKiQrTCpMLTQqTCpQKzIqTCpxKzQqUCpQLTQqUCpxK3EqcSxWPTEqOSpUKk8tMypUKlQtMypUKiQtNipPKk8rMypPKiQrOSpMKlAtMypMKkwtMypMKnEtNipQKlArMypQKnEsWT0xKjMqVCpULTYqVCpPK1QqJC1UKmcrMipPKk8rMipPKmctJCpnKzMqTCpMLTYqTCpQK0wqcS1MKngrMipQKlArMipQKngtcSp4LHJ0PTEqVCpPLVQqVCtUKmctTypnK0wqUC1MKkwrTCp4LVAqeCxvdD1bXTtISyhTLFYsWSxydCxvdCk7Zm9yKHZhciBodD0xZS03LGR0PVtdLEx0PTA7THQ8NjtMdCs9MilNYXRoLmFicyhvdFtMdCsxXSk8aHQmJm90W0x0XT49MCYmb3RbTHRdPD0xJiZkdC5wdXNoKG90W0x0XSk7ZHQucHVzaCgxKSxkdC5wdXNoKDApO2Zvcih2YXIga3Q9LTEsRHQsUHQsJHQsWnQ9MDtadDxkdC5sZW5ndGg7WnQrKylEdD1NYXRoLnBvdygxLWR0W1p0XSwyKSpUKzIqKDEtZHRbWnRdKSpkdFtadF0qTytkdFtadF0qZHRbWnRdKiQsUHQ9TWF0aC5wb3coMS1kdFtadF0sMikqTCsyKigxLWR0W1p0XSkqZHRbWnRdKlArZHRbWnRdKmR0W1p0XSpxLCR0PU1hdGgucG93KER0LWcsMikrTWF0aC5wb3coUHQteCwyKSxrdD49MD8kdDxrdCYmKGt0PSR0KTprdD0kdDtyZXR1cm4ga3R9LEdLPWZ1bmN0aW9uKGcseCxULEwsTyxQKXt2YXIgJD1bZy1ULHgtTF0scT1bTy1ULFAtTF0sUz1xWzBdKnFbMF0rcVsxXSpxWzFdLFY9JFswXSokWzBdKyRbMV0qJFsxXSxZPSRbMF0qcVswXSskWzFdKnFbMV0scnQ9WSpZL1M7cmV0dXJuIFk8MD9WOnJ0PlM/KGctTykqKGctTykrKHgtUCkqKHgtUCk6Vi1ydH0scWQ9ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgTCxPLFAsJCxxLFM9MCxWPTA7VjxULmxlbmd0aC8yO1YrKylpZihMPVRbVioyXSxPPVRbVioyKzFdLFYrMTxULmxlbmd0aC8yPyhQPVRbKFYrMSkqMl0sJD1UWyhWKzEpKjIrMV0pOihQPVRbKFYrMS1ULmxlbmd0aC8yKSoyXSwkPVRbKFYrMS1ULmxlbmd0aC8yKSoyKzFdKSwhKEw9PWcmJlA9PWcpKWlmKEw+PWcmJmc+PVB8fEw8PWcmJmc8PVApcT0oZy1MKS8oUC1MKSooJC1PKStPLHE+eCYmUysrO2Vsc2UgY29udGludWU7cmV0dXJuIFMlMiE9PTB9LGR3PWZ1bmN0aW9uKGcseCxULEwsTyxQLCQscSxTKXt2YXIgVj1uZXcgQXJyYXkoVC5sZW5ndGgpLFk7cVswXSE9bnVsbD8oWT1NYXRoLmF0YW4ocVsxXS9xWzBdKSxxWzBdPDA/WT1ZK01hdGguUEkvMjpZPS1ZLU1hdGguUEkvMik6WT1xO2Zvcih2YXIgcnQ9TWF0aC5jb3MoLVkpLG90PU1hdGguc2luKC1ZKSxodD0wO2h0PFYubGVuZ3RoLzI7aHQrKylWW2h0KjJdPVAvMiooVFtodCoyXSpydC1UW2h0KjIrMV0qb3QpLFZbaHQqMisxXT0kLzIqKFRbaHQqMisxXSpydCtUW2h0KjJdKm90KSxWW2h0KjJdKz1MLFZbaHQqMisxXSs9Tzt2YXIgZHQ7aWYoUz4wKXt2YXIgTHQ9Z04oViwtUyk7ZHQ9ZE4oTHQpfWVsc2UgZHQ9VjtyZXR1cm4gcWQoZyx4LGR0KX0sVUs9ZnVuY3Rpb24oZyx4LFQsTCxPLFAsJCl7Zm9yKHZhciBxPW5ldyBBcnJheShULmxlbmd0aCksUz1QLzIsVj0kLzIsWT1ETChQLCQpLHJ0PVkqWSxvdD0wO290PFQubGVuZ3RoLzQ7b3QrKyl7dmFyIGh0PXZvaWQgMCxkdD12b2lkIDA7b3Q9PT0wP2h0PVQubGVuZ3RoLTI6aHQ9b3QqNC0yLGR0PW90KjQrMjt2YXIgTHQ9TCtTKlRbb3QqNF0sa3Q9TytWKlRbb3QqNCsxXSxEdD0tVFtodF0qVFtkdF0tVFtodCsxXSpUW2R0KzFdLFB0PVkvTWF0aC50YW4oTWF0aC5hY29zKER0KS8yKSwkdD1MdC1QdCpUW2h0XSxadD1rdC1QdCpUW2h0KzFdLFl0PUx0K1B0KlRbZHRdLHF0PWt0K1B0KlRbZHQrMV07cVtvdCo0XT0kdCxxW290KjQrMV09WnQscVtvdCo0KzJdPVl0LHFbb3QqNCszXT1xdDt2YXIgbmU9VFtodCsxXSxHdD0tVFtodF0sZ2U9bmUqVFtkdF0rR3QqVFtkdCsxXTtnZTwwJiYobmUqPS0xLEd0Kj0tMSk7dmFyIGJlPSR0K25lKlksaWU9WnQrR3QqWSxGZT1NYXRoLnBvdyhiZS1nLDIpK01hdGgucG93KGllLXgsMik7aWYoRmU8PXJ0KXJldHVybiEwfXJldHVybiBxZChnLHgscSl9LGROPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD1uZXcgQXJyYXkoZy5sZW5ndGgvMiksVCxMLE8sUCwkLHEsUyxWLFk9MDtZPGcubGVuZ3RoLzQ7WSsrKXtUPWdbWSo0XSxMPWdbWSo0KzFdLE89Z1tZKjQrMl0sUD1nW1kqNCszXSxZPGcubGVuZ3RoLzQtMT8oJD1nWyhZKzEpKjRdLHE9Z1soWSsxKSo0KzFdLFM9Z1soWSsxKSo0KzJdLFY9Z1soWSsxKSo0KzNdKTooJD1nWzBdLHE9Z1sxXSxTPWdbMl0sVj1nWzNdKTt2YXIgcnQ9eW0oVCxMLE8sUCwkLHEsUyxWLCEwKTt4W1kqMl09cnRbMF0seFtZKjIrMV09cnRbMV19cmV0dXJuIHh9LGdOPWZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPW5ldyBBcnJheShnLmxlbmd0aCoyKSxMLE8sUCwkLHE9MDtxPGcubGVuZ3RoLzI7cSsrKXtMPWdbcSoyXSxPPWdbcSoyKzFdLHE8Zy5sZW5ndGgvMi0xPyhQPWdbKHErMSkqMl0sJD1nWyhxKzEpKjIrMV0pOihQPWdbMF0sJD1nWzFdKTt2YXIgUz0kLU8sVj0tKFAtTCksWT1NYXRoLnNxcnQoUypTK1YqVikscnQ9Uy9ZLG90PVYvWTtUW3EqNF09TCtydCp4LFRbcSo0KzFdPU8rb3QqeCxUW3EqNCsyXT1QK3J0KngsVFtxKjQrM109JCtvdCp4fXJldHVybiBUfSxXSz1mdW5jdGlvbihnLHgsVCxMLE8sUCl7dmFyICQ9VC1nLHE9TC14OyQvPU8scS89UDt2YXIgUz1NYXRoLnNxcnQoJCokK3EqcSksVj1TLTE7aWYoVjwwKXJldHVybltdO3ZhciBZPVYvUztyZXR1cm5bKFQtZykqWStnLChMLXgpKlkreF19LFMzPWZ1bmN0aW9uKGcseCxULEwsTyxQLCQpe3JldHVybiBnLT1PLHgtPVAsZy89VC8yKyQseC89TC8yKyQsZypnK3gqeDw9MX0sU2s9ZnVuY3Rpb24oZyx4LFQsTCxPLFAsJCl7dmFyIHE9W1QtZyxMLXhdLFM9W2ctTyx4LVBdLFY9cVswXSpxWzBdK3FbMV0qcVsxXSxZPTIqKFNbMF0qcVswXStTWzFdKnFbMV0pLHJ0PVNbMF0qU1swXStTWzFdKlNbMV0tJCokLG90PVkqWS00KlYqcnQ7aWYob3Q8MClyZXR1cm5bXTt2YXIgaHQ9KC1ZK01hdGguc3FydChvdCkpLygyKlYpLGR0PSgtWS1NYXRoLnNxcnQob3QpKS8oMipWKSxMdD1NYXRoLm1pbihodCxkdCksa3Q9TWF0aC5tYXgoaHQsZHQpLER0PVtdO2lmKEx0Pj0wJiZMdDw9MSYmRHQucHVzaChMdCksa3Q+PTAmJmt0PD0xJiZEdC5wdXNoKGt0KSxEdC5sZW5ndGg9PT0wKXJldHVybltdO3ZhciBQdD1EdFswXSpxWzBdK2csJHQ9RHRbMF0qcVsxXSt4O2lmKER0Lmxlbmd0aD4xKXtpZihEdFswXT09RHRbMV0pcmV0dXJuW1B0LCR0XTt2YXIgWnQ9RHRbMV0qcVswXStnLFl0PUR0WzFdKnFbMV0reDtyZXR1cm5bUHQsJHQsWnQsWXRdfWVsc2UgcmV0dXJuW1B0LCR0XX0sTEw9ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB4PD1nJiZnPD1UfHxUPD1nJiZnPD14P2c6Zzw9eCYmeDw9VHx8VDw9eCYmeDw9Zz94OlR9LHltPWZ1bmN0aW9uKGcseCxULEwsTyxQLCQscSxTKXt2YXIgVj1nLU8sWT1ULWcscnQ9JC1PLG90PXgtUCxodD1MLXgsZHQ9cS1QLEx0PXJ0Km90LWR0KlYsa3Q9WSpvdC1odCpWLER0PWR0KlktcnQqaHQ7aWYoRHQhPT0wKXt2YXIgUHQ9THQvRHQsJHQ9a3QvRHQsWnQ9LjAwMSxZdD0wLVp0LHF0PTErWnQ7cmV0dXJuIFl0PD1QdCYmUHQ8PXF0JiZZdDw9JHQmJiR0PD1xdD9bZytQdCpZLHgrUHQqaHRdOlM/W2crUHQqWSx4K1B0Kmh0XTpbXX1lbHNlIHJldHVybiBMdD09PTB8fGt0PT09MD9MTChnLFQsJCk9PT0kP1skLHFdOkxMKGcsVCxPKT09PU8/W08sUF06TEwoTywkLFQpPT09VD9bVCxMXTpbXTpbXX0sQWs9ZnVuY3Rpb24oZyx4LFQsTCxPLFAsJCxxKXt2YXIgUz1bXSxWLFk9bmV3IEFycmF5KFQubGVuZ3RoKSxydD0hMDtQPT1udWxsJiYocnQ9ITEpO3ZhciBvdDtpZihydCl7Zm9yKHZhciBodD0wO2h0PFkubGVuZ3RoLzI7aHQrKylZW2h0KjJdPVRbaHQqMl0qUCtMLFlbaHQqMisxXT1UW2h0KjIrMV0qJCtPO2lmKHE+MCl7dmFyIGR0PWdOKFksLXEpO290PWROKGR0KX1lbHNlIG90PVl9ZWxzZSBvdD1UO2Zvcih2YXIgTHQsa3QsRHQsUHQsJHQ9MDskdDxvdC5sZW5ndGgvMjskdCsrKUx0PW90WyR0KjJdLGt0PW90WyR0KjIrMV0sJHQ8b3QubGVuZ3RoLzItMT8oRHQ9b3RbKCR0KzEpKjJdLFB0PW90WygkdCsxKSoyKzFdKTooRHQ9b3RbMF0sUHQ9b3RbMV0pLFY9eW0oZyx4LEwsTyxMdCxrdCxEdCxQdCksVi5sZW5ndGghPT0wJiZTLnB1c2goVlswXSxWWzFdKTtyZXR1cm4gU30sWUs9ZnVuY3Rpb24oZyx4LFQsTCxPLFAsJCxxKXtmb3IodmFyIFM9W10sVixZPW5ldyBBcnJheShULmxlbmd0aCkscnQ9UC8yLG90PSQvMixodD1ETChQLCQpLGR0PTA7ZHQ8VC5sZW5ndGgvNDtkdCsrKXt2YXIgTHQ9dm9pZCAwLGt0PXZvaWQgMDtkdD09PTA/THQ9VC5sZW5ndGgtMjpMdD1kdCo0LTIsa3Q9ZHQqNCsyO3ZhciBEdD1MK3J0KlRbZHQqNF0sUHQ9TytvdCpUW2R0KjQrMV0sJHQ9LVRbTHRdKlRba3RdLVRbTHQrMV0qVFtrdCsxXSxadD1odC9NYXRoLnRhbihNYXRoLmFjb3MoJHQpLzIpLFl0PUR0LVp0KlRbTHRdLHF0PVB0LVp0KlRbTHQrMV0sbmU9RHQrWnQqVFtrdF0sR3Q9UHQrWnQqVFtrdCsxXTtkdD09PTA/KFlbVC5sZW5ndGgtMl09WXQsWVtULmxlbmd0aC0xXT1xdCk6KFlbZHQqNC0yXT1ZdCxZW2R0KjQtMV09cXQpLFlbZHQqNF09bmUsWVtkdCo0KzFdPUd0O3ZhciBnZT1UW0x0KzFdLGJlPS1UW0x0XSxpZT1nZSpUW2t0XStiZSpUW2t0KzFdO2llPDAmJihnZSo9LTEsYmUqPS0xKTt2YXIgRmU9WXQrZ2UqaHQsd2U9cXQrYmUqaHQ7Vj1TayhnLHgsTCxPLEZlLHdlLGh0KSxWLmxlbmd0aCE9PTAmJlMucHVzaChWWzBdLFZbMV0pfWZvcih2YXIgYm49MDtibjxZLmxlbmd0aC80O2JuKyspVj15bShnLHgsTCxPLFlbYm4qNF0sWVtibio0KzFdLFlbYm4qNCsyXSxZW2JuKjQrM10sITEpLFYubGVuZ3RoIT09MCYmUy5wdXNoKFZbMF0sVlsxXSk7aWYoUy5sZW5ndGg+Mil7Zm9yKHZhciB6ZT1bU1swXSxTWzFdXSxHZT1NYXRoLnBvdyh6ZVswXS1nLDIpK01hdGgucG93KHplWzFdLXgsMiksRW49MTtFbjxTLmxlbmd0aC8yO0VuKyspe3ZhciBJbj1NYXRoLnBvdyhTW0VuKjJdLWcsMikrTWF0aC5wb3coU1tFbioyKzFdLXgsMik7SW48PUdlJiYoemVbMF09U1tFbioyXSx6ZVsxXT1TW0VuKjIrMV0sR2U9SW4pfXJldHVybiB6ZX1yZXR1cm4gU30salQ9ZnVuY3Rpb24oZyx4LFQpe3ZhciBMPVtnWzBdLXhbMF0sZ1sxXS14WzFdXSxPPU1hdGguc3FydChMWzBdKkxbMF0rTFsxXSpMWzFdKSxQPShPLVQpL087cmV0dXJuIFA8MCYmKFA9MWUtNSksW3hbMF0rUCpMWzBdLHhbMV0rUCpMWzFdXX0sc2Q9ZnVuY3Rpb24oZyx4KXt2YXIgVD1NTChnLHgpO3JldHVybiBUPXBOKFQpLFR9LHBOPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeCxULEw9Zy5sZW5ndGgvMixPPTEvMCxQPTEvMCwkPS0xLzAscT0tMS8wLFM9MDtTPEw7UysrKXg9Z1syKlNdLFQ9Z1syKlMrMV0sTz1NYXRoLm1pbihPLHgpLCQ9TWF0aC5tYXgoJCx4KSxQPU1hdGgubWluKFAsVCkscT1NYXRoLm1heChxLFQpO2Zvcih2YXIgVj0yLygkLU8pLFk9Mi8ocS1QKSxydD0wO3J0PEw7cnQrKyl4PWdbMipydF09Z1syKnJ0XSpWLFQ9Z1syKnJ0KzFdPWdbMipydCsxXSpZLE89TWF0aC5taW4oTyx4KSwkPU1hdGgubWF4KCQseCksUD1NYXRoLm1pbihQLFQpLHE9TWF0aC5tYXgocSxUKTtpZihQPC0xKWZvcih2YXIgb3Q9MDtvdDxMO290KyspVD1nWzIqb3QrMV09Z1syKm90KzFdKygtMS1QKTtyZXR1cm4gZ30sTUw9ZnVuY3Rpb24oZyx4KXt2YXIgVD0xL2cqMipNYXRoLlBJLEw9ZyUyPT09MD9NYXRoLlBJLzIrVC8yOk1hdGguUEkvMjtMKz14O2Zvcih2YXIgTz1uZXcgQXJyYXkoZyoyKSxQLCQ9MDskPGc7JCsrKVA9JCpUK0wsT1syKiRdPU1hdGguY29zKFApLE9bMiokKzFdPU1hdGguc2luKC1QKTtyZXR1cm4gT30sTGs9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gTWF0aC5taW4oZy80LHgvNCw4KX0sREw9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gTWF0aC5taW4oZy8xMCx4LzEwLDgpfSxiTj1mdW5jdGlvbigpe3JldHVybiA4fSxLSz1mdW5jdGlvbihnLHgsVCl7cmV0dXJuW2ctMip4K1QsMiooeC1nKSxnXX0sSUw9ZnVuY3Rpb24oZyx4KXtyZXR1cm57aGVpZ2h0T2Zmc2V0Ok1hdGgubWluKDE1LC4wNSp4KSx3aWR0aE9mZnNldDpNYXRoLm1pbigxMDAsLjI1KmcpLGN0cmxQdE9mZnNldFBjdDouMDV9fSxYSz1SZih7ZGFtcGluZ0ZhY3RvcjouOCxwcmVjaXNpb246MWUtNixpdGVyYXRpb25zOjIwMCx3ZWlnaHQ6ZnVuY3Rpb24oZyl7cmV0dXJuIDF9fSksUUs9e3BhZ2VSYW5rOmZ1bmN0aW9uKGcpe2Zvcih2YXIgeD1YSyhnKSxUPXguZGFtcGluZ0ZhY3RvcixMPXgucHJlY2lzaW9uLE89eC5pdGVyYXRpb25zLFA9eC53ZWlnaHQsJD10aGlzLl9wcml2YXRlLmN5LHE9dGhpcy5ieUdyb3VwKCksUz1xLm5vZGVzLFY9cS5lZGdlcyxZPVMubGVuZ3RoLHJ0PVkqWSxvdD1WLmxlbmd0aCxodD1uZXcgQXJyYXkocnQpLGR0PW5ldyBBcnJheShZKSxMdD0oMS1UKS9ZLGt0PTA7a3Q8WTtrdCsrKXtmb3IodmFyIER0PTA7RHQ8WTtEdCsrKXt2YXIgUHQ9a3QqWStEdDtodFtQdF09MH1kdFtrdF09MH1mb3IodmFyICR0PTA7JHQ8b3Q7JHQrKyl7dmFyIFp0PVZbJHRdLFl0PVp0LmRhdGEoInNvdXJjZSIpLHF0PVp0LmRhdGEoInRhcmdldCIpO2lmKFl0IT09cXQpe3ZhciBuZT1TLmluZGV4T2ZJZChZdCksR3Q9Uy5pbmRleE9mSWQocXQpLGdlPVAoWnQpLGJlPUd0KlkrbmU7aHRbYmVdKz1nZSxkdFtuZV0rPWdlfX1mb3IodmFyIGllPTEvWStMdCxGZT0wO0ZlPFk7RmUrKylpZihkdFtGZV09PT0wKWZvcih2YXIgd2U9MDt3ZTxZO3dlKyspe3ZhciBibj13ZSpZK0ZlO2h0W2JuXT1pZX1lbHNlIGZvcih2YXIgemU9MDt6ZTxZO3plKyspe3ZhciBHZT16ZSpZK0ZlO2h0W0dlXT1odFtHZV0vZHRbRmVdK0x0fWZvcih2YXIgRW49bmV3IEFycmF5KFkpLEluPW5ldyBBcnJheShZKSxZbixTbj0wO1NuPFk7U24rKylFbltTbl09MTtmb3IodmFyIFduPTA7V248TztXbisrKXtmb3IodmFyIHJyPTA7cnI8WTtycisrKUluW3JyXT0wO2Zvcih2YXIgd3I9MDt3cjxZO3dyKyspZm9yKHZhciB1cj0wO3VyPFk7dXIrKyl7dmFyIGVyPXdyKlkrdXI7SW5bd3JdKz1odFtlcl0qRW5bdXJdfU9LKEluKSxZbj1FbixFbj1JbixJbj1Zbjtmb3IodmFyIHZuPTAsZ3I9MDtncjxZO2dyKyspe3ZhciBmcj1Zbltncl0tRW5bZ3JdO3ZuKz1mcipmcn1pZih2bjxMKWJyZWFrfXZhciBKcj17cmFuazpmdW5jdGlvbihYcyl7cmV0dXJuIFhzPSQuY29sbGVjdGlvbihYcylbMF0sRW5bUy5pbmRleE9mKFhzKV19fTtyZXR1cm4gSnJ9fSx3Tj1SZih7cm9vdDpudWxsLHdlaWdodDpmdW5jdGlvbihnKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITEsYWxwaGE6MH0pLFo1PXtkZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXplZDpmdW5jdGlvbihnKXtnPXdOKGcpO3ZhciB4PXRoaXMuY3koKSxUPXRoaXMubm9kZXMoKSxMPVQubGVuZ3RoO2lmKGcuZGlyZWN0ZWQpe2Zvcih2YXIgVj17fSxZPXt9LHJ0PTAsb3Q9MCxodD0wO2h0PEw7aHQrKyl7dmFyIGR0PVRbaHRdLEx0PWR0LmlkKCk7Zy5yb290PWR0O3ZhciBrdD10aGlzLmRlZ3JlZUNlbnRyYWxpdHkoZyk7cnQ8a3QuaW5kZWdyZWUmJihydD1rdC5pbmRlZ3JlZSksb3Q8a3Qub3V0ZGVncmVlJiYob3Q9a3Qub3V0ZGVncmVlKSxWW0x0XT1rdC5pbmRlZ3JlZSxZW0x0XT1rdC5vdXRkZWdyZWV9cmV0dXJue2luZGVncmVlOmZ1bmN0aW9uKFB0KXtyZXR1cm4gcnQ9PTA/MDoobXQoUHQpJiYoUHQ9eC5maWx0ZXIoUHQpKSxWW1B0LmlkKCldL3J0KX0sb3V0ZGVncmVlOmZ1bmN0aW9uKFB0KXtyZXR1cm4gb3Q9PT0wPzA6KG10KFB0KSYmKFB0PXguZmlsdGVyKFB0KSksWVtQdC5pZCgpXS9vdCl9fX1lbHNle2Zvcih2YXIgTz17fSxQPTAsJD0wOyQ8TDskKyspe3ZhciBxPVRbJF07Zy5yb290PXE7dmFyIFM9dGhpcy5kZWdyZWVDZW50cmFsaXR5KGcpO1A8Uy5kZWdyZWUmJihQPVMuZGVncmVlKSxPW3EuaWQoKV09Uy5kZWdyZWV9cmV0dXJue2RlZ3JlZTpmdW5jdGlvbihQdCl7cmV0dXJuIFA9PT0wPzA6KG10KFB0KSYmKFB0PXguZmlsdGVyKFB0KSksT1tQdC5pZCgpXS9QKX19fX0sZGVncmVlQ2VudHJhbGl0eTpmdW5jdGlvbihnKXtnPXdOKGcpO3ZhciB4PXRoaXMuY3koKSxUPXRoaXMsTD1nLE89TC5yb290LFA9TC53ZWlnaHQsJD1MLmRpcmVjdGVkLHE9TC5hbHBoYTtpZihPPXguY29sbGVjdGlvbihPKVswXSwkKXtmb3IodmFyIG90PU8uY29ubmVjdGVkRWRnZXMoKSxodD1vdC5maWx0ZXIoZnVuY3Rpb24oWXQpe3JldHVybiBZdC50YXJnZXQoKS5zYW1lKE8pJiZULmhhcyhZdCl9KSxkdD1vdC5maWx0ZXIoZnVuY3Rpb24oWXQpe3JldHVybiBZdC5zb3VyY2UoKS5zYW1lKE8pJiZULmhhcyhZdCl9KSxMdD1odC5sZW5ndGgsa3Q9ZHQubGVuZ3RoLER0PTAsUHQ9MCwkdD0wOyR0PGh0Lmxlbmd0aDskdCsrKUR0Kz1QKGh0WyR0XSk7Zm9yKHZhciBadD0wO1p0PGR0Lmxlbmd0aDtadCsrKVB0Kz1QKGR0W1p0XSk7cmV0dXJue2luZGVncmVlOk1hdGgucG93KEx0LDEtcSkqTWF0aC5wb3coRHQscSksb3V0ZGVncmVlOk1hdGgucG93KGt0LDEtcSkqTWF0aC5wb3coUHQscSl9fWVsc2V7Zm9yKHZhciBTPU8uY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oVCksVj1TLmxlbmd0aCxZPTAscnQ9MDtydDxTLmxlbmd0aDtydCsrKVkrPVAoU1tydF0pO3JldHVybntkZWdyZWU6TWF0aC5wb3coViwxLXEpKk1hdGgucG93KFkscSl9fX19O1o1LmRjPVo1LmRlZ3JlZUNlbnRyYWxpdHksWjUuZGNuPVo1LmRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpc2VkPVo1LmRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpemVkO3ZhciB2Tj1SZih7aGFybW9uaWM6ITAsd2VpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIDF9LGRpcmVjdGVkOiExLHJvb3Q6bnVsbH0pLEo1PXtjbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDpmdW5jdGlvbihnKXtmb3IodmFyIHg9dk4oZyksVD14Lmhhcm1vbmljLEw9eC53ZWlnaHQsTz14LmRpcmVjdGVkLFA9dGhpcy5jeSgpLCQ9e30scT0wLFM9dGhpcy5ub2RlcygpLFY9dGhpcy5mbG95ZFdhcnNoYWxsKHt3ZWlnaHQ6TCxkaXJlY3RlZDpPfSksWT0wO1k8Uy5sZW5ndGg7WSsrKXtmb3IodmFyIHJ0PTAsb3Q9U1tZXSxodD0wO2h0PFMubGVuZ3RoO2h0KyspaWYoWSE9PWh0KXt2YXIgZHQ9Vi5kaXN0YW5jZShvdCxTW2h0XSk7VD9ydCs9MS9kdDpydCs9ZHR9VHx8KHJ0PTEvcnQpLHE8cnQmJihxPXJ0KSwkW290LmlkKCldPXJ0fXJldHVybntjbG9zZW5lc3M6ZnVuY3Rpb24oa3Qpe3JldHVybiBxPT0wPzA6KG10KGt0KT9rdD1QLmZpbHRlcihrdClbMF0uaWQoKTprdD1rdC5pZCgpLCRba3RdL3EpfX19LGNsb3NlbmVzc0NlbnRyYWxpdHk6ZnVuY3Rpb24oZyl7dmFyIHg9dk4oZyksVD14LnJvb3QsTD14LndlaWdodCxPPXguZGlyZWN0ZWQsUD14Lmhhcm1vbmljO1Q9dGhpcy5maWx0ZXIoVClbMF07Zm9yKHZhciAkPXRoaXMuZGlqa3N0cmEoe3Jvb3Q6VCx3ZWlnaHQ6TCxkaXJlY3RlZDpPfSkscT0wLFM9dGhpcy5ub2RlcygpLFY9MDtWPFMubGVuZ3RoO1YrKyl7dmFyIFk9U1tWXTtpZighWS5zYW1lKFQpKXt2YXIgcnQ9JC5kaXN0YW5jZVRvKFkpO1A/cSs9MS9ydDpxKz1ydH19cmV0dXJuIFA/cToxL3F9fTtKNS5jYz1KNS5jbG9zZW5lc3NDZW50cmFsaXR5LEo1LmNjbj1KNS5jbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXNlZD1KNS5jbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDt2YXIgWks9UmYoe3dlaWdodDpudWxsLGRpcmVjdGVkOiExfSksT0w9e2JldHdlZW5uZXNzQ2VudHJhbGl0eTpmdW5jdGlvbihnKXtmb3IodmFyIHg9WksoZyksVD14LmRpcmVjdGVkLEw9eC53ZWlnaHQsTz1MIT1udWxsLFA9dGhpcy5jeSgpLCQ9dGhpcy5ub2RlcygpLHE9e30sUz17fSxWPTAsWT17c2V0OmZ1bmN0aW9uKFB0LCR0KXtTW1B0XT0kdCwkdD5WJiYoVj0kdCl9LGdldDpmdW5jdGlvbihQdCl7cmV0dXJuIFNbUHRdfX0scnQ9MDtydDwkLmxlbmd0aDtydCsrKXt2YXIgb3Q9JFtydF0saHQ9b3QuaWQoKTtUP3FbaHRdPW90Lm91dGdvZXJzKCkubm9kZXMoKTpxW2h0XT1vdC5vcGVuTmVpZ2hib3Job29kKCkubm9kZXMoKSxZLnNldChodCwwKX1mb3IodmFyIGR0PWZ1bmN0aW9uKFB0KXtmb3IodmFyICR0PSRbUHRdLmlkKCksWnQ9W10sWXQ9e30scXQ9e30sbmU9e30sR3Q9bmV3IENrKGZ1bmN0aW9uKHVyLGVyKXtyZXR1cm4gbmVbdXJdLW5lW2VyXX0pLGdlPTA7Z2U8JC5sZW5ndGg7Z2UrKyl7dmFyIGJlPSRbZ2VdLmlkKCk7WXRbYmVdPVtdLHF0W2JlXT0wLG5lW2JlXT0xLzB9Zm9yKHF0WyR0XT0xLG5lWyR0XT0wLEd0LnB1c2goJHQpOyFHdC5lbXB0eSgpOyl7dmFyIGllPUd0LnBvcCgpO2lmKFp0LnB1c2goaWUpLE8pZm9yKHZhciBGZT0wO0ZlPHFbaWVdLmxlbmd0aDtGZSsrKXt2YXIgd2U9cVtpZV1bRmVdLGJuPVAuZ2V0RWxlbWVudEJ5SWQoaWUpLHplPXZvaWQgMDtibi5lZGdlc1RvKHdlKS5sZW5ndGg+MD96ZT1ibi5lZGdlc1RvKHdlKVswXTp6ZT13ZS5lZGdlc1RvKGJuKVswXTt2YXIgR2U9TCh6ZSk7d2U9d2UuaWQoKSxuZVt3ZV0+bmVbaWVdK0dlJiYobmVbd2VdPW5lW2llXStHZSxHdC5ub2Rlcy5pbmRleE9mKHdlKTwwP0d0LnB1c2god2UpOkd0LnVwZGF0ZUl0ZW0od2UpLHF0W3dlXT0wLFl0W3dlXT1bXSksbmVbd2VdPT1uZVtpZV0rR2UmJihxdFt3ZV09cXRbd2VdK3F0W2llXSxZdFt3ZV0ucHVzaChpZSkpfWVsc2UgZm9yKHZhciBFbj0wO0VuPHFbaWVdLmxlbmd0aDtFbisrKXt2YXIgSW49cVtpZV1bRW5dLmlkKCk7bmVbSW5dPT0xLzAmJihHdC5wdXNoKEluKSxuZVtJbl09bmVbaWVdKzEpLG5lW0luXT09bmVbaWVdKzEmJihxdFtJbl09cXRbSW5dK3F0W2llXSxZdFtJbl0ucHVzaChpZSkpfX1mb3IodmFyIFluPXt9LFNuPTA7U248JC5sZW5ndGg7U24rKylZblskW1NuXS5pZCgpXT0wO2Zvcig7WnQubGVuZ3RoPjA7KXtmb3IodmFyIFduPVp0LnBvcCgpLHJyPTA7cnI8WXRbV25dLmxlbmd0aDtycisrKXt2YXIgd3I9WXRbV25dW3JyXTtZblt3cl09WW5bd3JdK3F0W3dyXS9xdFtXbl0qKDErWW5bV25dKX1XbiE9JFtQdF0uaWQoKSYmWS5zZXQoV24sWS5nZXQoV24pK1luW1duXSl9fSxMdD0wO0x0PCQubGVuZ3RoO0x0KyspZHQoTHQpO3ZhciBrdD17YmV0d2Vlbm5lc3M6ZnVuY3Rpb24oUHQpe3ZhciAkdD1QLmNvbGxlY3Rpb24oUHQpLmlkKCk7cmV0dXJuIFkuZ2V0KCR0KX0sYmV0d2Vlbm5lc3NOb3JtYWxpemVkOmZ1bmN0aW9uKFB0KXtpZihWPT0wKXJldHVybiAwO3ZhciAkdD1QLmNvbGxlY3Rpb24oUHQpLmlkKCk7cmV0dXJuIFkuZ2V0KCR0KS9WfX07cmV0dXJuIGt0LmJldHdlZW5uZXNzTm9ybWFsaXNlZD1rdC5iZXR3ZWVubmVzc05vcm1hbGl6ZWQsa3R9fTtPTC5iYz1PTC5iZXR3ZWVubmVzc0NlbnRyYWxpdHk7dmFyIEpLPVJmKHtleHBhbmRGYWN0b3I6MixpbmZsYXRlRmFjdG9yOjIsbXVsdEZhY3RvcjoxLG1heEl0ZXJhdGlvbnM6MjAsYXR0cmlidXRlczpbZnVuY3Rpb24oeSl7cmV0dXJuIDF9XX0pLHRYPWZ1bmN0aW9uKGcpe3JldHVybiBKSyhnKX0sZVg9ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9MCxMPTA7TDx4Lmxlbmd0aDtMKyspVCs9eFtMXShnKTtyZXR1cm4gVH0sblg9ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgTD0wO0w8eDtMKyspZ1tMKngrTF09VH0sbU49ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQsTD0wO0w8eDtMKyspe1Q9MDtmb3IodmFyIE89MDtPPHg7TysrKVQrPWdbTyp4K0xdO2Zvcih2YXIgUD0wO1A8eDtQKyspZ1tQKngrTF09Z1tQKngrTF0vVH19LHJYPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEw9bmV3IEFycmF5KFQqVCksTz0wO088VDtPKyspe2Zvcih2YXIgUD0wO1A8VDtQKyspTFtPKlQrUF09MDtmb3IodmFyICQ9MDskPFQ7JCsrKWZvcih2YXIgcT0wO3E8VDtxKyspTFtPKlQrcV0rPWdbTypUKyRdKnhbJCpUK3FdfXJldHVybiBMfSxpWD1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBMPWcuc2xpY2UoMCksTz0xO088VDtPKyspZz1yWChnLEwseCk7cmV0dXJuIGd9LHNYPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEw9bmV3IEFycmF5KHgqeCksTz0wO088eCp4O08rKylMW09dPU1hdGgucG93KGdbT10sVCk7cmV0dXJuIG1OKEwseCksTH0seU49ZnVuY3Rpb24oZyx4LFQsTCl7Zm9yKHZhciBPPTA7TzxUO08rKyl7dmFyIFA9TWF0aC5yb3VuZChnW09dKk1hdGgucG93KDEwLEwpKS9NYXRoLnBvdygxMCxMKSwkPU1hdGgucm91bmQoeFtPXSpNYXRoLnBvdygxMCxMKSkvTWF0aC5wb3coMTAsTCk7aWYoUCE9PSQpcmV0dXJuITF9cmV0dXJuITB9LGFYPWZ1bmN0aW9uKGcseCxULEwpe2Zvcih2YXIgTz1bXSxQPTA7UDx4O1ArKyl7Zm9yKHZhciAkPVtdLHE9MDtxPHg7cSsrKU1hdGgucm91bmQoZ1tQKngrcV0qMWUzKS8xZTM+MCYmJC5wdXNoKFRbcV0pOyQubGVuZ3RoIT09MCYmTy5wdXNoKEwuY29sbGVjdGlvbigkKSl9cmV0dXJuIE99LG9YPWZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPTA7VDxnLmxlbmd0aDtUKyspaWYoIXhbVF18fGdbVF0uaWQoKSE9PXhbVF0uaWQoKSlyZXR1cm4hMTtyZXR1cm4hMH0sY1g9ZnVuY3Rpb24oZyl7Zm9yKHZhciB4PTA7eDxnLmxlbmd0aDt4KyspZm9yKHZhciBUPTA7VDxnLmxlbmd0aDtUKyspeCE9VCYmb1goZ1t4XSxnW1RdKSYmZy5zcGxpY2UoVCwxKTtyZXR1cm4gZ30seE49ZnVuY3Rpb24oZyl7Zm9yKHZhciB4PXRoaXMubm9kZXMoKSxUPXRoaXMuZWRnZXMoKSxMPXRoaXMuY3koKSxPPXRYKGcpLFA9e30sJD0wOyQ8eC5sZW5ndGg7JCsrKVBbeFskXS5pZCgpXT0kO2Zvcih2YXIgcT14Lmxlbmd0aCxTPXEqcSxWPW5ldyBBcnJheShTKSxZLHJ0PTA7cnQ8UztydCsrKVZbcnRdPTA7Zm9yKHZhciBvdD0wO290PFQubGVuZ3RoO290Kyspe3ZhciBodD1UW290XSxkdD1QW2h0LnNvdXJjZSgpLmlkKCldLEx0PVBbaHQudGFyZ2V0KCkuaWQoKV0sa3Q9ZVgoaHQsTy5hdHRyaWJ1dGVzKTtWW2R0KnErTHRdKz1rdCxWW0x0KnErZHRdKz1rdH1uWChWLHEsTy5tdWx0RmFjdG9yKSxtTihWLHEpO2Zvcih2YXIgRHQ9ITAsUHQ9MDtEdCYmUHQ8Ty5tYXhJdGVyYXRpb25zOylEdD0hMSxZPWlYKFYscSxPLmV4cGFuZEZhY3RvciksVj1zWChZLHEsTy5pbmZsYXRlRmFjdG9yKSx5TihWLFksUyw0KXx8KER0PSEwKSxQdCsrO3ZhciAkdD1hWChWLHEseCxMKTtyZXR1cm4gJHQ9Y1goJHQpLCR0fSx1WD17bWFya292Q2x1c3RlcmluZzp4TixtY2w6eE59LGxYPWZ1bmN0aW9uKGcpe3JldHVybiBnfSxrTj1mdW5jdGlvbihnLHgpe3JldHVybiBNYXRoLmFicyh4LWcpfSxFTj1mdW5jdGlvbihnLHgsVCl7cmV0dXJuIGcra04oeCxUKX0sVE49ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBnK01hdGgucG93KFQteCwyKX0saFg9ZnVuY3Rpb24oZyl7cmV0dXJuIE1hdGguc3FydChnKX0sZlg9ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBNYXRoLm1heChnLGtOKHgsVCkpfSxNaz1mdW5jdGlvbihnLHgsVCxMLE8pe2Zvcih2YXIgUD1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06bFgsJD1MLHEsUyxWPTA7VjxnO1YrKylxPXgoViksUz1UKFYpLCQ9TygkLHEsUyk7cmV0dXJuIFAoJCl9LHR4PXtldWNsaWRlYW46ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBnPj0yP01rKGcseCxULDAsVE4saFgpOk1rKGcseCxULDAsRU4pfSxzcXVhcmVkRXVjbGlkZWFuOmZ1bmN0aW9uKGcseCxUKXtyZXR1cm4gTWsoZyx4LFQsMCxUTil9LG1hbmhhdHRhbjpmdW5jdGlvbihnLHgsVCl7cmV0dXJuIE1rKGcseCxULDAsRU4pfSxtYXg6ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBNayhnLHgsVCwtMS8wLGZYKX19O3R4WyJzcXVhcmVkLWV1Y2xpZGVhbiJdPXR4LnNxdWFyZWRFdWNsaWRlYW4sdHguc3F1YXJlZGV1Y2xpZGVhbj10eC5zcXVhcmVkRXVjbGlkZWFuO2Z1bmN0aW9uICRUKHksZyx4LFQsTCxPKXt2YXIgUDtyZXR1cm4geXQoeSk/UD15OlA9dHhbeV18fHR4LmV1Y2xpZGVhbixnPT09MCYmeXQoeSk/UChMLE8pOlAoZyx4LFQsTCxPKX12YXIgZFg9UmYoe2s6MixtOjIsc2Vuc2l0aXZpdHlUaHJlc2hvbGQ6MWUtNCxkaXN0YW5jZToiZXVjbGlkZWFuIixtYXhJdGVyYXRpb25zOjEwLGF0dHJpYnV0ZXM6W10sdGVzdE1vZGU6ITEsdGVzdENlbnRyb2lkczpudWxsfSksUEw9ZnVuY3Rpb24oZyl7cmV0dXJuIGRYKGcpfSx6VD1mdW5jdGlvbihnLHgsVCxMLE8pe3ZhciBQPU8hPT0ia01lZG9pZHMiLCQ9UD9mdW5jdGlvbihZKXtyZXR1cm4gVFtZXX06ZnVuY3Rpb24oWSl7cmV0dXJuIExbWV0oVCl9LHE9ZnVuY3Rpb24ocnQpe3JldHVybiBMW3J0XSh4KX0sUz1ULFY9eDtyZXR1cm4gJFQoZyxMLmxlbmd0aCwkLHEsUyxWKX0sRkw9ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgTD1ULmxlbmd0aCxPPW5ldyBBcnJheShMKSxQPW5ldyBBcnJheShMKSwkPW5ldyBBcnJheSh4KSxxPW51bGwsUz0wO1M8TDtTKyspT1tTXT1nLm1pbihUW1NdKS52YWx1ZSxQW1NdPWcubWF4KFRbU10pLnZhbHVlO2Zvcih2YXIgVj0wO1Y8eDtWKyspe3E9W107Zm9yKHZhciBZPTA7WTxMO1krKylxW1ldPU1hdGgucmFuZG9tKCkqKFBbWV0tT1tZXSkrT1tZXTskW1ZdPXF9cmV0dXJuICR9LENOPWZ1bmN0aW9uKGcseCxULEwsTyl7Zm9yKHZhciBQPTEvMCwkPTAscT0wO3E8eC5sZW5ndGg7cSsrKXt2YXIgUz16VChULGcseFtxXSxMLE8pO1M8UCYmKFA9UywkPXEpfXJldHVybiAkfSxfTj1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBMPVtdLE89bnVsbCxQPTA7UDx4Lmxlbmd0aDtQKyspTz14W1BdLFRbTy5pZCgpXT09PWcmJkwucHVzaChPKTtyZXR1cm4gTH0sZ1g9ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBNYXRoLmFicyh4LWcpPD1UfSxwWD1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBMPTA7TDxnLmxlbmd0aDtMKyspZm9yKHZhciBPPTA7TzxnW0xdLmxlbmd0aDtPKyspe3ZhciBQPU1hdGguYWJzKGdbTF1bT10teFtMXVtPXSk7aWYoUD5UKXJldHVybiExfXJldHVybiEwfSxiWD1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBMPTA7TDxUO0wrKylpZihnPT09eFtMXSlyZXR1cm4hMDtyZXR1cm4hMX0sU049ZnVuY3Rpb24oZyx4KXt2YXIgVD1uZXcgQXJyYXkoeCk7aWYoZy5sZW5ndGg8NTApZm9yKHZhciBMPTA7TDx4O0wrKyl7Zm9yKHZhciBPPWdbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmcubGVuZ3RoKV07YlgoTyxULEwpOylPPWdbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmcubGVuZ3RoKV07VFtMXT1PfWVsc2UgZm9yKHZhciBQPTA7UDx4O1ArKylUW1BdPWdbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmcubGVuZ3RoKV07cmV0dXJuIFR9LEFOPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEw9MCxPPTA7Tzx4Lmxlbmd0aDtPKyspTCs9elQoIm1hbmhhdHRhbiIseFtPXSxnLFQsImtNZWRvaWRzIik7cmV0dXJuIEx9LHdYPWZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuY3koKSxUPXRoaXMubm9kZXMoKSxMPW51bGwsTz1QTChnKSxQPW5ldyBBcnJheShPLmspLCQ9e30scTtPLnRlc3RNb2RlP3R5cGVvZiBPLnRlc3RDZW50cm9pZHM9PSJudW1iZXIiPyhPLnRlc3RDZW50cm9pZHMscT1GTChULE8uayxPLmF0dHJpYnV0ZXMpKTpmKE8udGVzdENlbnRyb2lkcyk9PT0ib2JqZWN0Ij9xPU8udGVzdENlbnRyb2lkczpxPUZMKFQsTy5rLE8uYXR0cmlidXRlcyk6cT1GTChULE8uayxPLmF0dHJpYnV0ZXMpO2Zvcih2YXIgUz0hMCxWPTA7UyYmVjxPLm1heEl0ZXJhdGlvbnM7KXtmb3IodmFyIFk9MDtZPFQubGVuZ3RoO1krKylMPVRbWV0sJFtMLmlkKCldPUNOKEwscSxPLmRpc3RhbmNlLE8uYXR0cmlidXRlcywia01lYW5zIik7Uz0hMTtmb3IodmFyIHJ0PTA7cnQ8Ty5rO3J0Kyspe3ZhciBvdD1fTihydCxULCQpO2lmKG90Lmxlbmd0aCE9PTApe2Zvcih2YXIgaHQ9Ty5hdHRyaWJ1dGVzLmxlbmd0aCxkdD1xW3J0XSxMdD1uZXcgQXJyYXkoaHQpLGt0PW5ldyBBcnJheShodCksRHQ9MDtEdDxodDtEdCsrKXtrdFtEdF09MDtmb3IodmFyIFB0PTA7UHQ8b3QubGVuZ3RoO1B0KyspTD1vdFtQdF0sa3RbRHRdKz1PLmF0dHJpYnV0ZXNbRHRdKEwpO0x0W0R0XT1rdFtEdF0vb3QubGVuZ3RoLGdYKEx0W0R0XSxkdFtEdF0sTy5zZW5zaXRpdml0eVRocmVzaG9sZCl8fChTPSEwKX1xW3J0XT1MdCxQW3J0XT14LmNvbGxlY3Rpb24ob3QpfX1WKyt9cmV0dXJuIFB9LHZYPWZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuY3koKSxUPXRoaXMubm9kZXMoKSxMPW51bGwsTz1QTChnKSxQPW5ldyBBcnJheShPLmspLCQscT17fSxTLFY9bmV3IEFycmF5KE8uayk7Ty50ZXN0TW9kZT90eXBlb2YgTy50ZXN0Q2VudHJvaWRzPT0ibnVtYmVyInx8KGYoTy50ZXN0Q2VudHJvaWRzKT09PSJvYmplY3QiPyQ9Ty50ZXN0Q2VudHJvaWRzOiQ9U04oVCxPLmspKTokPVNOKFQsTy5rKTtmb3IodmFyIFk9ITAscnQ9MDtZJiZydDxPLm1heEl0ZXJhdGlvbnM7KXtmb3IodmFyIG90PTA7b3Q8VC5sZW5ndGg7b3QrKylMPVRbb3RdLHFbTC5pZCgpXT1DTihMLCQsTy5kaXN0YW5jZSxPLmF0dHJpYnV0ZXMsImtNZWRvaWRzIik7WT0hMTtmb3IodmFyIGh0PTA7aHQ8JC5sZW5ndGg7aHQrKyl7dmFyIGR0PV9OKGh0LFQscSk7aWYoZHQubGVuZ3RoIT09MCl7VltodF09QU4oJFtodF0sZHQsTy5hdHRyaWJ1dGVzKTtmb3IodmFyIEx0PTA7THQ8ZHQubGVuZ3RoO0x0KyspUz1BTihkdFtMdF0sZHQsTy5hdHRyaWJ1dGVzKSxTPFZbaHRdJiYoVltodF09UywkW2h0XT1kdFtMdF0sWT0hMCk7UFtodF09eC5jb2xsZWN0aW9uKGR0KX19cnQrK31yZXR1cm4gUH0sbVg9ZnVuY3Rpb24oZyx4LFQsTCxPKXtmb3IodmFyIFAsJCxxPTA7cTx4Lmxlbmd0aDtxKyspZm9yKHZhciBTPTA7UzxnLmxlbmd0aDtTKyspTFtxXVtTXT1NYXRoLnBvdyhUW3FdW1NdLE8ubSk7Zm9yKHZhciBWPTA7VjxnLmxlbmd0aDtWKyspZm9yKHZhciBZPTA7WTxPLmF0dHJpYnV0ZXMubGVuZ3RoO1krKyl7UD0wLCQ9MDtmb3IodmFyIHJ0PTA7cnQ8eC5sZW5ndGg7cnQrKylQKz1MW3J0XVtWXSpPLmF0dHJpYnV0ZXNbWV0oeFtydF0pLCQrPUxbcnRdW1ZdO2dbVl1bWV09UC8kfX0seVg9ZnVuY3Rpb24oZyx4LFQsTCxPKXtmb3IodmFyIFA9MDtQPGcubGVuZ3RoO1ArKyl4W1BdPWdbUF0uc2xpY2UoKTtmb3IodmFyICQscSxTLFY9Mi8oTy5tLTEpLFk9MDtZPFQubGVuZ3RoO1krKylmb3IodmFyIHJ0PTA7cnQ8TC5sZW5ndGg7cnQrKyl7JD0wO2Zvcih2YXIgb3Q9MDtvdDxULmxlbmd0aDtvdCsrKXE9elQoTy5kaXN0YW5jZSxMW3J0XSxUW1ldLE8uYXR0cmlidXRlcywiY21lYW5zIiksUz16VChPLmRpc3RhbmNlLExbcnRdLFRbb3RdLE8uYXR0cmlidXRlcywiY21lYW5zIiksJCs9TWF0aC5wb3cocS9TLFYpO2dbcnRdW1ldPTEvJH19LHhYPWZ1bmN0aW9uKGcseCxULEwpe2Zvcih2YXIgTz1uZXcgQXJyYXkoVC5rKSxQPTA7UDxPLmxlbmd0aDtQKyspT1tQXT1bXTtmb3IodmFyICQscSxTPTA7Uzx4Lmxlbmd0aDtTKyspeyQ9LTEvMCxxPS0xO2Zvcih2YXIgVj0wO1Y8eFswXS5sZW5ndGg7VisrKXhbU11bVl0+JCYmKCQ9eFtTXVtWXSxxPVYpO09bcV0ucHVzaChnW1NdKX1mb3IodmFyIFk9MDtZPE8ubGVuZ3RoO1krKylPW1ldPUwuY29sbGVjdGlvbihPW1ldKTtyZXR1cm4gT30sTE49ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5jeSgpLFQ9dGhpcy5ub2RlcygpLEw9UEwoZyksTyxQLCQscSxTO3E9bmV3IEFycmF5KFQubGVuZ3RoKTtmb3IodmFyIFY9MDtWPFQubGVuZ3RoO1YrKylxW1ZdPW5ldyBBcnJheShMLmspOyQ9bmV3IEFycmF5KFQubGVuZ3RoKTtmb3IodmFyIFk9MDtZPFQubGVuZ3RoO1krKykkW1ldPW5ldyBBcnJheShMLmspO2Zvcih2YXIgcnQ9MDtydDxULmxlbmd0aDtydCsrKXtmb3IodmFyIG90PTAsaHQ9MDtodDxMLms7aHQrKykkW3J0XVtodF09TWF0aC5yYW5kb20oKSxvdCs9JFtydF1baHRdO2Zvcih2YXIgZHQ9MDtkdDxMLms7ZHQrKykkW3J0XVtkdF09JFtydF1bZHRdL290fVA9bmV3IEFycmF5KEwuayk7Zm9yKHZhciBMdD0wO0x0PEwuaztMdCsrKVBbTHRdPW5ldyBBcnJheShMLmF0dHJpYnV0ZXMubGVuZ3RoKTtTPW5ldyBBcnJheShULmxlbmd0aCk7Zm9yKHZhciBrdD0wO2t0PFQubGVuZ3RoO2t0KyspU1trdF09bmV3IEFycmF5KEwuayk7Zm9yKHZhciBEdD0hMCxQdD0wO0R0JiZQdDxMLm1heEl0ZXJhdGlvbnM7KUR0PSExLG1YKFAsVCwkLFMsTCkseVgoJCxxLFAsVCxMKSxwWCgkLHEsTC5zZW5zaXRpdml0eVRocmVzaG9sZCl8fChEdD0hMCksUHQrKztyZXR1cm4gTz14WChULCQsTCx4KSx7Y2x1c3RlcnM6TyxkZWdyZWVPZk1lbWJlcnNoaXA6JH19LGtYPXtrTWVhbnM6d1gsa01lZG9pZHM6dlgsZnV6enlDTWVhbnM6TE4sZmNtOkxOfSxFWD1SZih7ZGlzdGFuY2U6ImV1Y2xpZGVhbiIsbGlua2FnZToibWluIixtb2RlOiJ0aHJlc2hvbGQiLHRocmVzaG9sZDoxLzAsYWRkRGVuZHJvZ3JhbTohMSxkZW5kcm9ncmFtRGVwdGg6MCxhdHRyaWJ1dGVzOltdfSksVFg9e3NpbmdsZToibWluIixjb21wbGV0ZToibWF4In0sQ1g9ZnVuY3Rpb24oZyl7dmFyIHg9RVgoZyksVD1UWFt4LmxpbmthZ2VdO3JldHVybiBUIT1udWxsJiYoeC5saW5rYWdlPVQpLHh9LE1OPWZ1bmN0aW9uKGcseCxULEwsTyl7Zm9yKHZhciBQPTAsJD0xLzAscSxTPU8uYXR0cmlidXRlcyxWPWZ1bmN0aW9uKEd0LGdlKXtyZXR1cm4gJFQoTy5kaXN0YW5jZSxTLmxlbmd0aCxmdW5jdGlvbihiZSl7cmV0dXJuIFNbYmVdKEd0KX0sZnVuY3Rpb24oYmUpe3JldHVybiBTW2JlXShnZSl9LEd0LGdlKX0sWT0wO1k8Zy5sZW5ndGg7WSsrKXt2YXIgcnQ9Z1tZXS5rZXksb3Q9VFtydF1bTFtydF1dO290PCQmJihQPXJ0LCQ9b3QpfWlmKE8ubW9kZT09PSJ0aHJlc2hvbGQiJiYkPj1PLnRocmVzaG9sZHx8Ty5tb2RlPT09ImRlbmRyb2dyYW0iJiZnLmxlbmd0aD09PTEpcmV0dXJuITE7dmFyIGh0PXhbUF0sZHQ9eFtMW1BdXSxMdDtPLm1vZGU9PT0iZGVuZHJvZ3JhbSI/THQ9e2xlZnQ6aHQscmlnaHQ6ZHQsa2V5Omh0LmtleX06THQ9e3ZhbHVlOmh0LnZhbHVlLmNvbmNhdChkdC52YWx1ZSksa2V5Omh0LmtleX0sZ1todC5pbmRleF09THQsZy5zcGxpY2UoZHQuaW5kZXgsMSkseFtodC5rZXldPUx0O2Zvcih2YXIga3Q9MDtrdDxnLmxlbmd0aDtrdCsrKXt2YXIgRHQ9Z1trdF07aHQua2V5PT09RHQua2V5P3E9MS8wOk8ubGlua2FnZT09PSJtaW4iPyhxPVRbaHQua2V5XVtEdC5rZXldLFRbaHQua2V5XVtEdC5rZXldPlRbZHQua2V5XVtEdC5rZXldJiYocT1UW2R0LmtleV1bRHQua2V5XSkpOk8ubGlua2FnZT09PSJtYXgiPyhxPVRbaHQua2V5XVtEdC5rZXldLFRbaHQua2V5XVtEdC5rZXldPFRbZHQua2V5XVtEdC5rZXldJiYocT1UW2R0LmtleV1bRHQua2V5XSkpOk8ubGlua2FnZT09PSJtZWFuIj9xPShUW2h0LmtleV1bRHQua2V5XSpodC5zaXplK1RbZHQua2V5XVtEdC5rZXldKmR0LnNpemUpLyhodC5zaXplK2R0LnNpemUpOk8ubW9kZT09PSJkZW5kcm9ncmFtIj9xPVYoRHQudmFsdWUsaHQudmFsdWUpOnE9VihEdC52YWx1ZVswXSxodC52YWx1ZVswXSksVFtodC5rZXldW0R0LmtleV09VFtEdC5rZXldW2h0LmtleV09cX1mb3IodmFyIFB0PTA7UHQ8Zy5sZW5ndGg7UHQrKyl7dmFyICR0PWdbUHRdLmtleTtpZihMWyR0XT09PWh0LmtleXx8TFskdF09PT1kdC5rZXkpe2Zvcih2YXIgWnQ9JHQsWXQ9MDtZdDxnLmxlbmd0aDtZdCsrKXt2YXIgcXQ9Z1tZdF0ua2V5O1RbJHRdW3F0XTxUWyR0XVtadF0mJihadD1xdCl9TFskdF09WnR9Z1tQdF0uaW5kZXg9UHR9cmV0dXJuIGh0LmtleT1kdC5rZXk9aHQuaW5kZXg9ZHQuaW5kZXg9bnVsbCwhMH0scVQ9ZnVuY3Rpb24geShnLHgsVCl7ZyYmKGcudmFsdWU/eC5wdXNoKGcudmFsdWUpOihnLmxlZnQmJnkoZy5sZWZ0LHgpLGcucmlnaHQmJnkoZy5yaWdodCx4KSkpfSxfWD1mdW5jdGlvbiB5KGcseCl7aWYoIWcpcmV0dXJuIiI7aWYoZy5sZWZ0JiZnLnJpZ2h0KXt2YXIgVD15KGcubGVmdCx4KSxMPXkoZy5yaWdodCx4KSxPPXguYWRkKHtncm91cDoibm9kZXMiLGRhdGE6e2lkOlQrIiwiK0x9fSk7cmV0dXJuIHguYWRkKHtncm91cDoiZWRnZXMiLGRhdGE6e3NvdXJjZTpULHRhcmdldDpPLmlkKCl9fSkseC5hZGQoe2dyb3VwOiJlZGdlcyIsZGF0YTp7c291cmNlOkwsdGFyZ2V0Ok8uaWQoKX19KSxPLmlkKCl9ZWxzZSBpZihnLnZhbHVlKXJldHVybiBnLnZhbHVlLmlkKCl9LFNYPWZ1bmN0aW9uIHkoZyx4LFQpe2lmKCFnKXJldHVybltdO3ZhciBMPVtdLE89W10sUD1bXTtyZXR1cm4geD09PTA/KGcubGVmdCYmcVQoZy5sZWZ0LEwpLGcucmlnaHQmJnFUKGcucmlnaHQsTyksUD1MLmNvbmNhdChPKSxbVC5jb2xsZWN0aW9uKFApXSk6eD09PTE/Zy52YWx1ZT9bVC5jb2xsZWN0aW9uKGcudmFsdWUpXTooZy5sZWZ0JiZxVChnLmxlZnQsTCksZy5yaWdodCYmcVQoZy5yaWdodCxPKSxbVC5jb2xsZWN0aW9uKEwpLFQuY29sbGVjdGlvbihPKV0pOmcudmFsdWU/W1QuY29sbGVjdGlvbihnLnZhbHVlKV06KGcubGVmdCYmKEw9eShnLmxlZnQseC0xLFQpKSxnLnJpZ2h0JiYoTz15KGcucmlnaHQseC0xLFQpKSxMLmNvbmNhdChPKSl9LEROPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD10aGlzLmN5KCksVD10aGlzLm5vZGVzKCksTD1DWChnKSxPPUwuYXR0cmlidXRlcyxQPWZ1bmN0aW9uKFB0LCR0KXtyZXR1cm4gJFQoTC5kaXN0YW5jZSxPLmxlbmd0aCxmdW5jdGlvbihadCl7cmV0dXJuIE9bWnRdKFB0KX0sZnVuY3Rpb24oWnQpe3JldHVybiBPW1p0XSgkdCl9LFB0LCR0KX0sJD1bXSxxPVtdLFM9W10sVj1bXSxZPTA7WTxULmxlbmd0aDtZKyspe3ZhciBydD17dmFsdWU6TC5tb2RlPT09ImRlbmRyb2dyYW0iP1RbWV06W1RbWV1dLGtleTpZLGluZGV4Oll9OyRbWV09cnQsVltZXT1ydCxxW1ldPVtdLFNbWV09MH1mb3IodmFyIG90PTA7b3Q8JC5sZW5ndGg7b3QrKylmb3IodmFyIGh0PTA7aHQ8PW90O2h0Kyspe3ZhciBkdD12b2lkIDA7TC5tb2RlPT09ImRlbmRyb2dyYW0iP2R0PW90PT09aHQ/MS8wOlAoJFtvdF0udmFsdWUsJFtodF0udmFsdWUpOmR0PW90PT09aHQ/MS8wOlAoJFtvdF0udmFsdWVbMF0sJFtodF0udmFsdWVbMF0pLHFbb3RdW2h0XT1kdCxxW2h0XVtvdF09ZHQsZHQ8cVtvdF1bU1tvdF1dJiYoU1tvdF09aHQpfWZvcih2YXIgTHQ9TU4oJCxWLHEsUyxMKTtMdDspTHQ9TU4oJCxWLHEsUyxMKTt2YXIga3Q7cmV0dXJuIEwubW9kZT09PSJkZW5kcm9ncmFtIj8oa3Q9U1goJFswXSxMLmRlbmRyb2dyYW1EZXB0aCx4KSxMLmFkZERlbmRyb2dyYW0mJl9YKCRbMF0seCkpOihrdD1uZXcgQXJyYXkoJC5sZW5ndGgpLCQuZm9yRWFjaChmdW5jdGlvbihEdCxQdCl7RHQua2V5PUR0LmluZGV4PW51bGwsa3RbUHRdPXguY29sbGVjdGlvbihEdC52YWx1ZSl9KSksa3R9LEFYPXtoaWVyYXJjaGljYWxDbHVzdGVyaW5nOkROLGhjYTpETn0sTFg9UmYoe2Rpc3RhbmNlOiJldWNsaWRlYW4iLHByZWZlcmVuY2U6Im1lZGlhbiIsZGFtcGluZzouOCxtYXhJdGVyYXRpb25zOjFlMyxtaW5JdGVyYXRpb25zOjEwMCxhdHRyaWJ1dGVzOltdfSksTVg9ZnVuY3Rpb24oZyl7dmFyIHg9Zy5kYW1waW5nLFQ9Zy5wcmVmZXJlbmNlOy41PD14JiZ4PDF8fHZsKCJEYW1waW5nIG11c3QgcmFuZ2Ugb24gWzAuNSwgMSkuICBHb3Q6ICIuY29uY2F0KHgpKTt2YXIgTD1bIm1lZGlhbiIsIm1lYW4iLCJtaW4iLCJtYXgiXTtyZXR1cm4gTC5zb21lKGZ1bmN0aW9uKE8pe3JldHVybiBPPT09VH0pfHxYKFQpfHx2bCgiUHJlZmVyZW5jZSBtdXN0IGJlIG9uZSBvZiBbIi5jb25jYXQoTC5tYXAoZnVuY3Rpb24oTyl7cmV0dXJuIiciLmNvbmNhdChPLCInIil9KS5qb2luKCIsICIpLCJdIG9yIGEgbnVtYmVyLiAgR290OiAiKS5jb25jYXQoVCkpLExYKGcpfSxEWD1mdW5jdGlvbihnLHgsVCxMKXt2YXIgTz1mdW5jdGlvbigkLHEpe3JldHVybiBMW3FdKCQpfTtyZXR1cm4tJFQoZyxMLmxlbmd0aCxmdW5jdGlvbihQKXtyZXR1cm4gTyh4LFApfSxmdW5jdGlvbihQKXtyZXR1cm4gTyhULFApfSx4LFQpfSxJWD1mdW5jdGlvbihnLHgpe3ZhciBUPW51bGw7cmV0dXJuIHg9PT0ibWVkaWFuIj9UPURLKGcpOng9PT0ibWVhbiI/VD1NSyhnKTp4PT09Im1pbiI/VD1BSyhnKTp4PT09Im1heCI/VD1MSyhnKTpUPXgsVH0sT1g9ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgTD1bXSxPPTA7TzxnO08rKyl4W08qZytPXStUW08qZytPXT4wJiZMLnB1c2goTyk7cmV0dXJuIEx9LElOPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEw9W10sTz0wO088ZztPKyspe2Zvcih2YXIgUD0tMSwkPS0xLzAscT0wO3E8VC5sZW5ndGg7cSsrKXt2YXIgUz1UW3FdO3hbTypnK1NdPiQmJihQPVMsJD14W08qZytTXSl9UD4wJiZMLnB1c2goUCl9Zm9yKHZhciBWPTA7VjxULmxlbmd0aDtWKyspTFtUW1ZdXT1UW1ZdO3JldHVybiBMfSxQWD1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBMPUlOKGcseCxUKSxPPTA7TzxULmxlbmd0aDtPKyspe2Zvcih2YXIgUD1bXSwkPTA7JDxMLmxlbmd0aDskKyspTFskXT09PVRbT10mJlAucHVzaCgkKTtmb3IodmFyIHE9LTEsUz0tMS8wLFY9MDtWPFAubGVuZ3RoO1YrKyl7Zm9yKHZhciBZPTAscnQ9MDtydDxQLmxlbmd0aDtydCsrKVkrPXhbUFtydF0qZytQW1ZdXTtZPlMmJihxPVYsUz1ZKX1UW09dPVBbcV19cmV0dXJuIEw9SU4oZyx4LFQpLEx9LE9OPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD10aGlzLmN5KCksVD10aGlzLm5vZGVzKCksTD1NWChnKSxPPXt9LFA9MDtQPFQubGVuZ3RoO1ArKylPW1RbUF0uaWQoKV09UDt2YXIgJCxxLFMsVixZLHJ0OyQ9VC5sZW5ndGgscT0kKiQsUz1uZXcgQXJyYXkocSk7Zm9yKHZhciBvdD0wO290PHE7b3QrKylTW290XT0tMS8wO2Zvcih2YXIgaHQ9MDtodDwkO2h0KyspZm9yKHZhciBkdD0wO2R0PCQ7ZHQrKylodCE9PWR0JiYoU1todCokK2R0XT1EWChMLmRpc3RhbmNlLFRbaHRdLFRbZHRdLEwuYXR0cmlidXRlcykpO1Y9SVgoUyxMLnByZWZlcmVuY2UpO2Zvcih2YXIgTHQ9MDtMdDwkO0x0KyspU1tMdCokK0x0XT1WO1k9bmV3IEFycmF5KHEpO2Zvcih2YXIga3Q9MDtrdDxxO2t0KyspWVtrdF09MDtydD1uZXcgQXJyYXkocSk7Zm9yKHZhciBEdD0wO0R0PHE7RHQrKylydFtEdF09MDtmb3IodmFyIFB0PW5ldyBBcnJheSgkKSwkdD1uZXcgQXJyYXkoJCksWnQ9bmV3IEFycmF5KCQpLFl0PTA7WXQ8JDtZdCsrKVB0W1l0XT0wLCR0W1l0XT0wLFp0W1l0XT0wO2Zvcih2YXIgcXQ9bmV3IEFycmF5KCQqTC5taW5JdGVyYXRpb25zKSxuZT0wO25lPHF0Lmxlbmd0aDtuZSsrKXF0W25lXT0wO3ZhciBHdDtmb3IoR3Q9MDtHdDxMLm1heEl0ZXJhdGlvbnM7R3QrKyl7Zm9yKHZhciBnZT0wO2dlPCQ7Z2UrKyl7Zm9yKHZhciBiZT0tMS8wLGllPS0xLzAsRmU9LTEsd2U9MCxibj0wO2JuPCQ7Ym4rKylQdFtibl09WVtnZSokK2JuXSx3ZT1ydFtnZSokK2JuXStTW2dlKiQrYm5dLHdlPj1iZT8oaWU9YmUsYmU9d2UsRmU9Ym4pOndlPmllJiYoaWU9d2UpO2Zvcih2YXIgemU9MDt6ZTwkO3plKyspWVtnZSokK3plXT0oMS1MLmRhbXBpbmcpKihTW2dlKiQremVdLWJlKStMLmRhbXBpbmcqUHRbemVdO1lbZ2UqJCtGZV09KDEtTC5kYW1waW5nKSooU1tnZSokK0ZlXS1pZSkrTC5kYW1waW5nKlB0W0ZlXX1mb3IodmFyIEdlPTA7R2U8JDtHZSsrKXtmb3IodmFyIEVuPTAsSW49MDtJbjwkO0luKyspUHRbSW5dPXJ0W0luKiQrR2VdLCR0W0luXT1NYXRoLm1heCgwLFlbSW4qJCtHZV0pLEVuKz0kdFtJbl07RW4tPSR0W0dlXSwkdFtHZV09WVtHZSokK0dlXSxFbis9JHRbR2VdO2Zvcih2YXIgWW49MDtZbjwkO1luKyspcnRbWW4qJCtHZV09KDEtTC5kYW1waW5nKSpNYXRoLm1pbigwLEVuLSR0W1luXSkrTC5kYW1waW5nKlB0W1luXTtydFtHZSokK0dlXT0oMS1MLmRhbXBpbmcpKihFbi0kdFtHZV0pK0wuZGFtcGluZypQdFtHZV19Zm9yKHZhciBTbj0wLFduPTA7V248JDtXbisrKXt2YXIgcnI9cnRbV24qJCtXbl0rWVtXbiokK1duXT4wPzE6MDtxdFtHdCVMLm1pbkl0ZXJhdGlvbnMqJCtXbl09cnIsU24rPXJyfWlmKFNuPjAmJihHdD49TC5taW5JdGVyYXRpb25zLTF8fEd0PT1MLm1heEl0ZXJhdGlvbnMtMSkpe2Zvcih2YXIgd3I9MCx1cj0wO3VyPCQ7dXIrKyl7WnRbdXJdPTA7Zm9yKHZhciBlcj0wO2VyPEwubWluSXRlcmF0aW9ucztlcisrKVp0W3VyXSs9cXRbZXIqJCt1cl07KFp0W3VyXT09PTB8fFp0W3VyXT09PUwubWluSXRlcmF0aW9ucykmJndyKyt9aWYod3I9PT0kKWJyZWFrfX1mb3IodmFyIHZuPU9YKCQsWSxydCksZ3I9UFgoJCxTLHZuKSxmcj17fSxKcj0wO0pyPHZuLmxlbmd0aDtKcisrKWZyW3ZuW0pyXV09W107Zm9yKHZhciB2aT0wO3ZpPFQubGVuZ3RoO3ZpKyspe3ZhciBYcz1PW1RbdmldLmlkKCldLEVhPWdyW1hzXTtFYSE9bnVsbCYmZnJbRWFdLnB1c2goVFt2aV0pfWZvcih2YXIgQ2k9bmV3IEFycmF5KHZuLmxlbmd0aCksaGk9MDtoaTx2bi5sZW5ndGg7aGkrKylDaVtoaV09eC5jb2xsZWN0aW9uKGZyW3ZuW2hpXV0pO3JldHVybiBDaX0sRlg9e2FmZmluaXR5UHJvcGFnYXRpb246T04sYXA6T059LE5YPVJmKHtyb290OnZvaWQgMCxkaXJlY3RlZDohMX0pLEJYPXtoaWVyaG9semVyOmZ1bmN0aW9uKGcpe2lmKCF1dChnKSl7dmFyIHg9YXJndW1lbnRzO2c9e3Jvb3Q6eFswXSxkaXJlY3RlZDp4WzFdfX12YXIgVD1OWChnKSxMPVQucm9vdCxPPVQuZGlyZWN0ZWQsUD10aGlzLCQ9ITEscSxTLFY7TCYmKFY9bXQoTCk/dGhpcy5maWx0ZXIoTClbMF0uaWQoKTpMWzBdLmlkKCkpO3ZhciBZPXt9LHJ0PXt9O08/UC5mb3JFYWNoKGZ1bmN0aW9uKER0KXt2YXIgUHQ9RHQuaWQoKTtpZihEdC5pc05vZGUoKSl7dmFyICR0PUR0LmluZGVncmVlKCEwKSxadD1EdC5vdXRkZWdyZWUoITApLFl0PSR0LVp0LHF0PVp0LSR0O1l0PT0xP3E/JD0hMDpxPVB0OnF0PT0xP1M/JD0hMDpTPVB0OihxdD4xfHxZdD4xKSYmKCQ9ITApLFlbUHRdPVtdLER0Lm91dGdvZXJzKCkuZm9yRWFjaChmdW5jdGlvbihuZSl7bmUuaXNFZGdlKCkmJllbUHRdLnB1c2gobmUuaWQoKSl9KX1lbHNlIHJ0W1B0XT1bdm9pZCAwLER0LnRhcmdldCgpLmlkKCldfSk6UC5mb3JFYWNoKGZ1bmN0aW9uKER0KXt2YXIgUHQ9RHQuaWQoKTtpZihEdC5pc05vZGUoKSl7dmFyICR0PUR0LmRlZ3JlZSghMCk7JHQlMiYmKHE/Uz8kPSEwOlM9UHQ6cT1QdCksWVtQdF09W10sRHQuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKFp0KXtyZXR1cm4gWVtQdF0ucHVzaChadC5pZCgpKX0pfWVsc2UgcnRbUHRdPVtEdC5zb3VyY2UoKS5pZCgpLER0LnRhcmdldCgpLmlkKCldfSk7dmFyIG90PXtmb3VuZDohMSx0cmFpbDp2b2lkIDB9O2lmKCQpcmV0dXJuIG90O2lmKFMmJnEpaWYoTyl7aWYoViYmUyE9VilyZXR1cm4gb3Q7Vj1TfWVsc2V7aWYoViYmUyE9ViYmcSE9VilyZXR1cm4gb3Q7Vnx8KFY9Uyl9ZWxzZSBWfHwoVj1QWzBdLmlkKCkpO3ZhciBodD1mdW5jdGlvbihQdCl7Zm9yKHZhciAkdD1QdCxadD1bUHRdLFl0LHF0LG5lO1lbJHRdLmxlbmd0aDspWXQ9WVskdF0uc2hpZnQoKSxxdD1ydFtZdF1bMF0sbmU9cnRbWXRdWzFdLCR0IT1uZT8oWVtuZV09WVtuZV0uZmlsdGVyKGZ1bmN0aW9uKEd0KXtyZXR1cm4gR3QhPVl0fSksJHQ9bmUpOiFPJiYkdCE9cXQmJihZW3F0XT1ZW3F0XS5maWx0ZXIoZnVuY3Rpb24oR3Qpe3JldHVybiBHdCE9WXR9KSwkdD1xdCksWnQudW5zaGlmdChZdCksWnQudW5zaGlmdCgkdCk7cmV0dXJuIFp0fSxkdD1bXSxMdD1bXTtmb3IoTHQ9aHQoVik7THQubGVuZ3RoIT0xOylZW0x0WzBdXS5sZW5ndGg9PTA/KGR0LnVuc2hpZnQoUC5nZXRFbGVtZW50QnlJZChMdC5zaGlmdCgpKSksZHQudW5zaGlmdChQLmdldEVsZW1lbnRCeUlkKEx0LnNoaWZ0KCkpKSk6THQ9aHQoTHQuc2hpZnQoKSkuY29uY2F0KEx0KTtkdC51bnNoaWZ0KFAuZ2V0RWxlbWVudEJ5SWQoTHQuc2hpZnQoKSkpO2Zvcih2YXIga3QgaW4gWSlpZihZW2t0XS5sZW5ndGgpcmV0dXJuIG90O3JldHVybiBvdC5mb3VuZD0hMCxvdC50cmFpbD10aGlzLnNwYXduKGR0LCEwKSxvdH19LEhUPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcyx4PXt9LFQ9MCxMPTAsTz1bXSxQPVtdLCQ9e30scT1mdW5jdGlvbihydCxvdCl7Zm9yKHZhciBodD1QLmxlbmd0aC0xLGR0PVtdLEx0PWcuc3Bhd24oKTtQW2h0XS54IT1ydHx8UFtodF0ueSE9b3Q7KWR0LnB1c2goUC5wb3AoKS5lZGdlKSxodC0tO2R0LnB1c2goUC5wb3AoKS5lZGdlKSxkdC5mb3JFYWNoKGZ1bmN0aW9uKGt0KXt2YXIgRHQ9a3QuY29ubmVjdGVkTm9kZXMoKS5pbnRlcnNlY3Rpb24oZyk7THQubWVyZ2Uoa3QpLER0LmZvckVhY2goZnVuY3Rpb24oUHQpe3ZhciAkdD1QdC5pZCgpLFp0PVB0LmNvbm5lY3RlZEVkZ2VzKCkuaW50ZXJzZWN0aW9uKGcpO0x0Lm1lcmdlKFB0KSx4WyR0XS5jdXRWZXJ0ZXg/THQubWVyZ2UoWnQuZmlsdGVyKGZ1bmN0aW9uKFl0KXtyZXR1cm4gWXQuaXNMb29wKCl9KSk6THQubWVyZ2UoWnQpfSl9KSxPLnB1c2goTHQpfSxTPWZ1bmN0aW9uIFkocnQsb3QsaHQpe3J0PT09aHQmJihMKz0xKSx4W290XT17aWQ6VCxsb3c6VCsrLGN1dFZlcnRleDohMX07dmFyIGR0PWcuZ2V0RWxlbWVudEJ5SWQob3QpLmNvbm5lY3RlZEVkZ2VzKCkuaW50ZXJzZWN0aW9uKGcpO2lmKGR0LnNpemUoKT09PTApTy5wdXNoKGcuc3Bhd24oZy5nZXRFbGVtZW50QnlJZChvdCkpKTtlbHNle3ZhciBMdCxrdCxEdCxQdDtkdC5mb3JFYWNoKGZ1bmN0aW9uKCR0KXtMdD0kdC5zb3VyY2UoKS5pZCgpLGt0PSR0LnRhcmdldCgpLmlkKCksRHQ9THQ9PT1vdD9rdDpMdCxEdCE9PWh0JiYoUHQ9JHQuaWQoKSwkW1B0XXx8KCRbUHRdPSEwLFAucHVzaCh7eDpvdCx5OkR0LGVkZ2U6JHR9KSksRHQgaW4geD94W290XS5sb3c9TWF0aC5taW4oeFtvdF0ubG93LHhbRHRdLmlkKTooWShydCxEdCxvdCkseFtvdF0ubG93PU1hdGgubWluKHhbb3RdLmxvdyx4W0R0XS5sb3cpLHhbb3RdLmlkPD14W0R0XS5sb3cmJih4W290XS5jdXRWZXJ0ZXg9ITAscShvdCxEdCkpKSl9KX19O2cuZm9yRWFjaChmdW5jdGlvbihZKXtpZihZLmlzTm9kZSgpKXt2YXIgcnQ9WS5pZCgpO3J0IGluIHh8fChMPTAsUyhydCxydCkseFtydF0uY3V0VmVydGV4PUw+MSl9fSk7dmFyIFY9T2JqZWN0LmtleXMoeCkuZmlsdGVyKGZ1bmN0aW9uKFkpe3JldHVybiB4W1ldLmN1dFZlcnRleH0pLm1hcChmdW5jdGlvbihZKXtyZXR1cm4gZy5nZXRFbGVtZW50QnlJZChZKX0pO3JldHVybntjdXQ6Zy5zcGF3bihWKSxjb21wb25lbnRzOk99fSxSWD17aG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZDpIVCxodGJjOkhULGh0YjpIVCxob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkQ29tcG9uZW50czpIVH0sVlQ9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLHg9e30sVD0wLEw9W10sTz1bXSxQPWcuc3Bhd24oZyksJD1mdW5jdGlvbiBxKFMpe08ucHVzaChTKSx4W1NdPXtpbmRleDpULGxvdzpUKyssZXhwbG9yZWQ6ITF9O3ZhciBWPWcuZ2V0RWxlbWVudEJ5SWQoUykuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oZyk7aWYoVi5mb3JFYWNoKGZ1bmN0aW9uKGR0KXt2YXIgTHQ9ZHQudGFyZ2V0KCkuaWQoKTtMdCE9PVMmJihMdCBpbiB4fHxxKEx0KSx4W0x0XS5leHBsb3JlZHx8KHhbU10ubG93PU1hdGgubWluKHhbU10ubG93LHhbTHRdLmxvdykpKX0pLHhbU10uaW5kZXg9PT14W1NdLmxvdyl7Zm9yKHZhciBZPWcuc3Bhd24oKTs7KXt2YXIgcnQ9Ty5wb3AoKTtpZihZLm1lcmdlKGcuZ2V0RWxlbWVudEJ5SWQocnQpKSx4W3J0XS5sb3c9eFtTXS5pbmRleCx4W3J0XS5leHBsb3JlZD0hMCxydD09PVMpYnJlYWt9dmFyIG90PVkuZWRnZXNXaXRoKFkpLGh0PVkubWVyZ2Uob3QpO0wucHVzaChodCksUD1QLmRpZmZlcmVuY2UoaHQpfX07cmV0dXJuIGcuZm9yRWFjaChmdW5jdGlvbihxKXtpZihxLmlzTm9kZSgpKXt2YXIgUz1xLmlkKCk7UyBpbiB4fHwkKFMpfX0pLHtjdXQ6UCxjb21wb25lbnRzOkx9fSxqWD17dGFyamFuU3Ryb25nbHlDb25uZWN0ZWQ6VlQsdHNjOlZULHRzY2M6VlQsdGFyamFuU3Ryb25nbHlDb25uZWN0ZWRDb21wb25lbnRzOlZUfSxQTj17fTtbVGssYkssd0ssbUsseEssRUssX0ssUUssWjUsSjUsT0wsdVgsa1gsQVgsRlgsQlgsUlgsalhdLmZvckVhY2goZnVuY3Rpb24oeSl7ZGUoUE4seSl9KTsvKiEKRW1iZWRkYWJsZSBNaW5pbXVtIFN0cmljdGx5LUNvbXBsaWFudCBQcm9taXNlcy9BKyAxLjEuMSBUaGVuYWJsZQpDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBSYWxmIFMuIEVuZ2Vsc2NoYWxsIChodHRwOi8vZW5nZWxzY2hhbGwuY29tKQpMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UgKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQpCiovdmFyIEZOPTAsTk49MSxCTj0yLGd3PWZ1bmN0aW9uIHkoZyl7aWYoISh0aGlzIGluc3RhbmNlb2YgeSkpcmV0dXJuIG5ldyB5KGcpO3RoaXMuaWQ9IlRoZW5hYmxlLzEuMC43Iix0aGlzLnN0YXRlPUZOLHRoaXMuZnVsZmlsbFZhbHVlPXZvaWQgMCx0aGlzLnJlamVjdFJlYXNvbj12b2lkIDAsdGhpcy5vbkZ1bGZpbGxlZD1bXSx0aGlzLm9uUmVqZWN0ZWQ9W10sdGhpcy5wcm94eT17dGhlbjp0aGlzLnRoZW4uYmluZCh0aGlzKX0sdHlwZW9mIGc9PSJmdW5jdGlvbiImJmcuY2FsbCh0aGlzLHRoaXMuZnVsZmlsbC5iaW5kKHRoaXMpLHRoaXMucmVqZWN0LmJpbmQodGhpcykpfTtndy5wcm90b3R5cGU9e2Z1bGZpbGw6ZnVuY3Rpb24oZyl7cmV0dXJuIFJOKHRoaXMsTk4sImZ1bGZpbGxWYWx1ZSIsZyl9LHJlamVjdDpmdW5jdGlvbihnKXtyZXR1cm4gUk4odGhpcyxCTiwicmVqZWN0UmVhc29uIixnKX0sdGhlbjpmdW5jdGlvbihnLHgpe3ZhciBUPXRoaXMsTD1uZXcgZ3c7cmV0dXJuIFQub25GdWxmaWxsZWQucHVzaCh6TihnLEwsImZ1bGZpbGwiKSksVC5vblJlamVjdGVkLnB1c2goek4oeCxMLCJyZWplY3QiKSksak4oVCksTC5wcm94eX19O3ZhciBSTj1mdW5jdGlvbihnLHgsVCxMKXtyZXR1cm4gZy5zdGF0ZT09PUZOJiYoZy5zdGF0ZT14LGdbVF09TCxqTihnKSksZ30sak49ZnVuY3Rpb24oZyl7Zy5zdGF0ZT09PU5OPyROKGcsIm9uRnVsZmlsbGVkIixnLmZ1bGZpbGxWYWx1ZSk6Zy5zdGF0ZT09PUJOJiYkTihnLCJvblJlamVjdGVkIixnLnJlamVjdFJlYXNvbil9LCROPWZ1bmN0aW9uKGcseCxUKXtpZihnW3hdLmxlbmd0aCE9PTApe3ZhciBMPWdbeF07Z1t4XT1bXTt2YXIgTz1mdW5jdGlvbigpe2Zvcih2YXIgJD0wOyQ8TC5sZW5ndGg7JCsrKUxbJF0oVCl9O3R5cGVvZiBzZXRJbW1lZGlhdGU9PSJmdW5jdGlvbiI/c2V0SW1tZWRpYXRlKE8pOnNldFRpbWVvdXQoTywwKX19LHpOPWZ1bmN0aW9uKGcseCxUKXtyZXR1cm4gZnVuY3Rpb24oTCl7aWYodHlwZW9mIGchPSJmdW5jdGlvbiIpeFtUXS5jYWxsKHgsTCk7ZWxzZXt2YXIgTzt0cnl7Tz1nKEwpfWNhdGNoKFApe3gucmVqZWN0KFApO3JldHVybn0kWCh4LE8pfX19LCRYPWZ1bmN0aW9uIHkoZyx4KXtpZihnPT09eHx8Zy5wcm94eT09PXgpe2cucmVqZWN0KG5ldyBUeXBlRXJyb3IoImNhbm5vdCByZXNvbHZlIHByb21pc2Ugd2l0aCBpdHNlbGYiKSk7cmV0dXJufXZhciBUO2lmKGYoeCk9PT0ib2JqZWN0IiYmeCE9PW51bGx8fHR5cGVvZiB4PT0iZnVuY3Rpb24iKXRyeXtUPXgudGhlbn1jYXRjaChPKXtnLnJlamVjdChPKTtyZXR1cm59aWYodHlwZW9mIFQ9PSJmdW5jdGlvbiIpe3ZhciBMPSExO3RyeXtULmNhbGwoeCxmdW5jdGlvbihPKXtMfHwoTD0hMCxPPT09eD9nLnJlamVjdChuZXcgVHlwZUVycm9yKCJjaXJjdWxhciB0aGVuYWJsZSBjaGFpbiIpKTp5KGcsTykpfSxmdW5jdGlvbihPKXtMfHwoTD0hMCxnLnJlamVjdChPKSl9KX1jYXRjaChPKXtMfHxnLnJlamVjdChPKX1yZXR1cm59Zy5mdWxmaWxsKHgpfTtndy5hbGw9ZnVuY3Rpb24oeSl7cmV0dXJuIG5ldyBndyhmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD1uZXcgQXJyYXkoeS5sZW5ndGgpLEw9MCxPPWZ1bmN0aW9uKHEsUyl7VFtxXT1TLEwrKyxMPT09eS5sZW5ndGgmJmcoVCl9LFA9MDtQPHkubGVuZ3RoO1ArKykoZnVuY3Rpb24oJCl7dmFyIHE9eVskXSxTPXEhPW51bGwmJnEudGhlbiE9bnVsbDtpZihTKXEudGhlbihmdW5jdGlvbihZKXtPKCQsWSl9LGZ1bmN0aW9uKFkpe3goWSl9KTtlbHNle3ZhciBWPXE7TygkLFYpfX0pKFApfSl9LGd3LnJlc29sdmU9ZnVuY3Rpb24oeSl7cmV0dXJuIG5ldyBndyhmdW5jdGlvbihnLHgpe2coeSl9KX0sZ3cucmVqZWN0PWZ1bmN0aW9uKHkpe3JldHVybiBuZXcgZ3coZnVuY3Rpb24oZyx4KXt4KHkpfSl9O3ZhciBleD10eXBlb2YgUHJvbWlzZTwidSI/UHJvbWlzZTpndyxHVD1mdW5jdGlvbihnLHgsVCl7dmFyIEw9T3QoZyksTz0hTCxQPXRoaXMuX3ByaXZhdGU9ZGUoe2R1cmF0aW9uOjFlM30seCxUKTtpZihQLnRhcmdldD1nLFAuc3R5bGU9UC5zdHlsZXx8UC5jc3MsUC5zdGFydGVkPSExLFAucGxheWluZz0hMSxQLmhvb2tlZD0hMSxQLmFwcGx5aW5nPSExLFAucHJvZ3Jlc3M9MCxQLmNvbXBsZXRlcz1bXSxQLmZyYW1lcz1bXSxQLmNvbXBsZXRlJiZ5dChQLmNvbXBsZXRlKSYmUC5jb21wbGV0ZXMucHVzaChQLmNvbXBsZXRlKSxPKXt2YXIgJD1nLnBvc2l0aW9uKCk7UC5zdGFydFBvc2l0aW9uPVAuc3RhcnRQb3NpdGlvbnx8e3g6JC54LHk6JC55fSxQLnN0YXJ0U3R5bGU9UC5zdGFydFN0eWxlfHxnLmN5KCkuc3R5bGUoKS5nZXRBbmltYXRpb25TdGFydFN0eWxlKGcsUC5zdHlsZSl9aWYoTCl7dmFyIHE9Zy5wYW4oKTtQLnN0YXJ0UGFuPXt4OnEueCx5OnEueX0sUC5zdGFydFpvb209Zy56b29tKCl9dGhpcy5sZW5ndGg9MSx0aGlzWzBdPXRoaXN9LEEzPUdULnByb3RvdHlwZTtkZShBMyx7aW5zdGFuY2VTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iYW5pbWF0aW9uIn0saG9vazpmdW5jdGlvbigpe3ZhciBnPXRoaXMuX3ByaXZhdGU7aWYoIWcuaG9va2VkKXt2YXIgeCxUPWcudGFyZ2V0Ll9wcml2YXRlLmFuaW1hdGlvbjtnLnF1ZXVlP3g9VC5xdWV1ZTp4PVQuY3VycmVudCx4LnB1c2godGhpcyksVHQoZy50YXJnZXQpJiZnLnRhcmdldC5jeSgpLmFkZFRvQW5pbWF0aW9uUG9vbChnLnRhcmdldCksZy5ob29rZWQ9ITB9cmV0dXJuIHRoaXN9LHBsYXk6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLl9wcml2YXRlO3JldHVybiBnLnByb2dyZXNzPT09MSYmKGcucHJvZ3Jlc3M9MCksZy5wbGF5aW5nPSEwLGcuc3RhcnRlZD0hMSxnLnN0b3BwZWQ9ITEsdGhpcy5ob29rKCksdGhpc30scGxheWluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnBsYXlpbmd9LGFwcGx5OmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZy5hcHBseWluZz0hMCxnLnN0YXJ0ZWQ9ITEsZy5zdG9wcGVkPSExLHRoaXMuaG9vaygpLHRoaXN9LGFwcGx5aW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuYXBwbHlpbmd9LHBhdXNlOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZy5wbGF5aW5nPSExLGcuc3RhcnRlZD0hMSx0aGlzfSxzdG9wOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZy5wbGF5aW5nPSExLGcuc3RhcnRlZD0hMSxnLnN0b3BwZWQ9ITAsdGhpc30scmV3aW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvZ3Jlc3MoMCl9LGZhc3Rmb3J3YXJkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvZ3Jlc3MoMSl9LHRpbWU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZz09PXZvaWQgMD94LnByb2dyZXNzKnguZHVyYXRpb246dGhpcy5wcm9ncmVzcyhnL3guZHVyYXRpb24pfSxwcm9ncmVzczpmdW5jdGlvbihnKXt2YXIgeD10aGlzLl9wcml2YXRlLFQ9eC5wbGF5aW5nO3JldHVybiBnPT09dm9pZCAwP3gucHJvZ3Jlc3M6KFQmJnRoaXMucGF1c2UoKSx4LnByb2dyZXNzPWcseC5zdGFydGVkPSExLFQmJnRoaXMucGxheSgpLHRoaXMpfSxjb21wbGV0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5wcm9ncmVzcz09PTF9LHJldmVyc2U6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLl9wcml2YXRlLHg9Zy5wbGF5aW5nO3gmJnRoaXMucGF1c2UoKSxnLnByb2dyZXNzPTEtZy5wcm9ncmVzcyxnLnN0YXJ0ZWQ9ITE7dmFyIFQ9ZnVuY3Rpb24oUyxWKXt2YXIgWT1nW1NdO1khPW51bGwmJihnW1NdPWdbVl0sZ1tWXT1ZKX07aWYoVCgiem9vbSIsInN0YXJ0Wm9vbSIpLFQoInBhbiIsInN0YXJ0UGFuIiksVCgicG9zaXRpb24iLCJzdGFydFBvc2l0aW9uIiksZy5zdHlsZSlmb3IodmFyIEw9MDtMPGcuc3R5bGUubGVuZ3RoO0wrKyl7dmFyIE89Zy5zdHlsZVtMXSxQPU8ubmFtZSwkPWcuc3RhcnRTdHlsZVtQXTtnLnN0YXJ0U3R5bGVbUF09TyxnLnN0eWxlW0xdPSR9cmV0dXJuIHgmJnRoaXMucGxheSgpLHRoaXN9LHByb21pc2U6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZSxUO3N3aXRjaChnKXtjYXNlImZyYW1lIjpUPXguZnJhbWVzO2JyZWFrO2RlZmF1bHQ6Y2FzZSJjb21wbGV0ZSI6Y2FzZSJjb21wbGV0ZWQiOlQ9eC5jb21wbGV0ZXN9cmV0dXJuIG5ldyBleChmdW5jdGlvbihMLE8pe1QucHVzaChmdW5jdGlvbigpe0woKX0pfSl9fSksQTMuY29tcGxldGU9QTMuY29tcGxldGVkLEEzLnJ1bj1BMy5wbGF5LEEzLnJ1bm5pbmc9QTMucGxheWluZzt2YXIgelg9e2FuaW1hdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHg9dGhpcyxUPXgubGVuZ3RoIT09dm9pZCAwLEw9VD94Olt4XSxPPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXM7aWYoIU8uc3R5bGVFbmFibGVkKCkpcmV0dXJuITE7dmFyIFA9TFswXTtpZihQKXJldHVybiBQLl9wcml2YXRlLmFuaW1hdGlvbi5jdXJyZW50Lmxlbmd0aD4wfX0sY2xlYXJRdWV1ZTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3ZhciB4PXRoaXMsVD14Lmxlbmd0aCE9PXZvaWQgMCxMPVQ/eDpbeF0sTz10aGlzLl9wcml2YXRlLmN5fHx0aGlzO2lmKCFPLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO2Zvcih2YXIgUD0wO1A8TC5sZW5ndGg7UCsrKXt2YXIgJD1MW1BdOyQuX3ByaXZhdGUuYW5pbWF0aW9uLnF1ZXVlPVtdfXJldHVybiB0aGlzfX0sZGVsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oeCxUKXt2YXIgTD10aGlzLl9wcml2YXRlLmN5fHx0aGlzO3JldHVybiBMLnN0eWxlRW5hYmxlZCgpP3RoaXMuYW5pbWF0ZSh7ZGVsYXk6eCxkdXJhdGlvbjp4LGNvbXBsZXRlOlR9KTp0aGlzfX0sZGVsYXlBbmltYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oeCxUKXt2YXIgTD10aGlzLl9wcml2YXRlLmN5fHx0aGlzO3JldHVybiBMLnN0eWxlRW5hYmxlZCgpP3RoaXMuYW5pbWF0aW9uKHtkZWxheTp4LGR1cmF0aW9uOngsY29tcGxldGU6VH0pOnRoaXN9fSxhbmltYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oeCxUKXt2YXIgTD10aGlzLE89TC5sZW5ndGghPT12b2lkIDAsUD1PP0w6W0xdLCQ9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcyxxPSFPLFM9IXE7aWYoISQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIFY9JC5zdHlsZSgpO3g9ZGUoe30seCxUKTt2YXIgWT1PYmplY3Qua2V5cyh4KS5sZW5ndGg9PT0wO2lmKFkpcmV0dXJuIG5ldyBHVChQWzBdLHgpO3N3aXRjaCh4LmR1cmF0aW9uPT09dm9pZCAwJiYoeC5kdXJhdGlvbj00MDApLHguZHVyYXRpb24pe2Nhc2Uic2xvdyI6eC5kdXJhdGlvbj02MDA7YnJlYWs7Y2FzZSJmYXN0Ijp4LmR1cmF0aW9uPTIwMDticmVha31pZihTJiYoeC5zdHlsZT1WLmdldFByb3BzTGlzdCh4LnN0eWxlfHx4LmNzcykseC5jc3M9dm9pZCAwKSxTJiZ4LnJlbmRlcmVkUG9zaXRpb24hPW51bGwpe3ZhciBydD14LnJlbmRlcmVkUG9zaXRpb24sb3Q9JC5wYW4oKSxodD0kLnpvb20oKTt4LnBvc2l0aW9uPWNOKHJ0LGh0LG90KX1pZihxJiZ4LnBhbkJ5IT1udWxsKXt2YXIgZHQ9eC5wYW5CeSxMdD0kLnBhbigpO3gucGFuPXt4Okx0LngrZHQueCx5Okx0LnkrZHQueX19dmFyIGt0PXguY2VudGVyfHx4LmNlbnRyZTtpZihxJiZrdCE9bnVsbCl7dmFyIER0PSQuZ2V0Q2VudGVyUGFuKGt0LmVsZXMseC56b29tKTtEdCE9bnVsbCYmKHgucGFuPUR0KX1pZihxJiZ4LmZpdCE9bnVsbCl7dmFyIFB0PXguZml0LCR0PSQuZ2V0Rml0Vmlld3BvcnQoUHQuZWxlc3x8UHQuYm91bmRpbmdCb3gsUHQucGFkZGluZyk7JHQhPW51bGwmJih4LnBhbj0kdC5wYW4seC56b29tPSR0Lnpvb20pfWlmKHEmJnV0KHguem9vbSkpe3ZhciBadD0kLmdldFpvb21lZFZpZXdwb3J0KHguem9vbSk7WnQhPW51bGw/KFp0Lnpvb21lZCYmKHguem9vbT1adC56b29tKSxadC5wYW5uZWQmJih4LnBhbj1adC5wYW4pKTp4Lnpvb209bnVsbH1yZXR1cm4gbmV3IEdUKFBbMF0seCl9fSxhbmltYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHgsVCl7dmFyIEw9dGhpcyxPPUwubGVuZ3RoIT09dm9pZCAwLFA9Tz9MOltMXSwkPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXM7aWYoISQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7VCYmKHg9ZGUoe30seCxUKSk7Zm9yKHZhciBxPTA7cTxQLmxlbmd0aDtxKyspe3ZhciBTPVBbcV0sVj1TLmFuaW1hdGVkKCkmJih4LnF1ZXVlPT09dm9pZCAwfHx4LnF1ZXVlKSxZPVMuYW5pbWF0aW9uKHgsVj97cXVldWU6ITB9OnZvaWQgMCk7WS5wbGF5KCl9cmV0dXJuIHRoaXN9fSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHgsVCl7dmFyIEw9dGhpcyxPPUwubGVuZ3RoIT09dm9pZCAwLFA9Tz9MOltMXSwkPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXM7aWYoISQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7Zm9yKHZhciBxPTA7cTxQLmxlbmd0aDtxKyspe2Zvcih2YXIgUz1QW3FdLFY9Uy5fcHJpdmF0ZSxZPVYuYW5pbWF0aW9uLmN1cnJlbnQscnQ9MDtydDxZLmxlbmd0aDtydCsrKXt2YXIgb3Q9WVtydF0saHQ9b3QuX3ByaXZhdGU7VCYmKGh0LmR1cmF0aW9uPTApfXgmJihWLmFuaW1hdGlvbi5xdWV1ZT1bXSksVHx8KFYuYW5pbWF0aW9uLmN1cnJlbnQ9W10pfXJldHVybiAkLm5vdGlmeSgiZHJhdyIpLHRoaXN9fX0scVg9QXJyYXkuaXNBcnJheSxVVD1xWCxIWD0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxWWD0vXlx3KiQvO2Z1bmN0aW9uIEdYKHksZyl7aWYoVVQoeSkpcmV0dXJuITE7dmFyIHg9dHlwZW9mIHk7cmV0dXJuIHg9PSJudW1iZXIifHx4PT0ic3ltYm9sInx8eD09ImJvb2xlYW4ifHx5PT1udWxsfHxrcih5KT8hMDpWWC50ZXN0KHkpfHwhSFgudGVzdCh5KXx8ZyE9bnVsbCYmeSBpbiBPYmplY3QoZyl9dmFyIFVYPUdYLFdYPSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIixZWD0iW29iamVjdCBGdW5jdGlvbl0iLEtYPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsWFg9IltvYmplY3QgUHJveHldIjtmdW5jdGlvbiBRWCh5KXtpZighRWUoeSkpcmV0dXJuITE7dmFyIGc9bmQoeSk7cmV0dXJuIGc9PVlYfHxnPT1LWHx8Zz09V1h8fGc9PVhYfXZhciBaWD1RWCxKWD1NYVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sTkw9SlgscU49ZnVuY3Rpb24oKXt2YXIgeT0vW14uXSskLy5leGVjKE5MJiZOTC5rZXlzJiZOTC5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIHk/IlN5bWJvbChzcmMpXzEuIit5OiIifSgpO2Z1bmN0aW9uIHRRKHkpe3JldHVybiEhcU4mJnFOIGluIHl9dmFyIGVRPXRRLG5RPUZ1bmN0aW9uLnByb3RvdHlwZSxITj1uUS50b1N0cmluZztmdW5jdGlvbiByUSh5KXtpZih5IT1udWxsKXt0cnl7cmV0dXJuIEhOLmNhbGwoeSl9Y2F0Y2h7fXRyeXtyZXR1cm4geSsiIn1jYXRjaHt9fXJldHVybiIifXZhciBpUT1yUSxzUT0vW1xcXiQuKis/KClbXF17fXxdL2csYVE9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sb1E9RnVuY3Rpb24ucHJvdG90eXBlLGNRPU9iamVjdC5wcm90b3R5cGUsVk49b1EudG9TdHJpbmcsR049Y1EuaGFzT3duUHJvcGVydHksdVE9UmVnRXhwKCJeIitWTi5jYWxsKEdOKS5yZXBsYWNlKHNRLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2Z1bmN0aW9uIFVOKHkpe2lmKCFFZSh5KXx8ZVEoeSkpcmV0dXJuITE7dmFyIGc9WlgoeSk/dVE6YVE7cmV0dXJuIGcudGVzdChpUSh5KSl9dmFyIFdOPVVOO2Z1bmN0aW9uIGxRKHksZyl7cmV0dXJuIHk9PW51bGw/dm9pZCAwOnlbZ119dmFyIGhRPWxRO2Z1bmN0aW9uIGZRKHksZyl7dmFyIHg9aFEoeSxnKTtyZXR1cm4gV04oeCk/eDp2b2lkIDB9dmFyIEJMPWZRLGRRPUJMKE9iamVjdCwiY3JlYXRlIiksRGs9ZFE7ZnVuY3Rpb24gZ1EoKXt0aGlzLl9fZGF0YV9fPURrP0RrKG51bGwpOnt9LHRoaXMuc2l6ZT0wfXZhciBwUT1nUTtmdW5jdGlvbiBiUSh5KXt2YXIgZz10aGlzLmhhcyh5KSYmZGVsZXRlIHRoaXMuX19kYXRhX19beV07cmV0dXJuIHRoaXMuc2l6ZS09Zz8xOjAsZ312YXIgWU49YlEsd1E9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLHZRPU9iamVjdC5wcm90b3R5cGUsbVE9dlEuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24geVEoeSl7dmFyIGc9dGhpcy5fX2RhdGFfXztpZihEayl7dmFyIHg9Z1t5XTtyZXR1cm4geD09PXdRP3ZvaWQgMDp4fXJldHVybiBtUS5jYWxsKGcseSk/Z1t5XTp2b2lkIDB9dmFyIHhRPXlRLGtRPU9iamVjdC5wcm90b3R5cGUsRVE9a1EuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gVFEoeSl7dmFyIGc9dGhpcy5fX2RhdGFfXztyZXR1cm4gRGs/Z1t5XSE9PXZvaWQgMDpFUS5jYWxsKGcseSl9dmFyIENRPVRRLF9RPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjtmdW5jdGlvbiBTUSh5LGcpe3ZhciB4PXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoeSk/MDoxLHhbeV09RGsmJmc9PT12b2lkIDA/X1E6Zyx0aGlzfXZhciBBUT1TUTtmdW5jdGlvbiBueCh5KXt2YXIgZz0tMSx4PXk9PW51bGw/MDp5Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZzx4Oyl7dmFyIFQ9eVtnXTt0aGlzLnNldChUWzBdLFRbMV0pfX1ueC5wcm90b3R5cGUuY2xlYXI9cFEsbngucHJvdG90eXBlLmRlbGV0ZT1ZTixueC5wcm90b3R5cGUuZ2V0PXhRLG54LnByb3RvdHlwZS5oYXM9Q1EsbngucHJvdG90eXBlLnNldD1BUTt2YXIgS049bng7ZnVuY3Rpb24gTFEoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfXZhciBNUT1MUTtmdW5jdGlvbiBEUSh5LGcpe3JldHVybiB5PT09Z3x8eSE9PXkmJmchPT1nfXZhciBYTj1EUTtmdW5jdGlvbiBJUSh5LGcpe2Zvcih2YXIgeD15Lmxlbmd0aDt4LS07KWlmKFhOKHlbeF1bMF0sZykpcmV0dXJuIHg7cmV0dXJuLTF9dmFyIFdUPUlRLE9RPUFycmF5LnByb3RvdHlwZSxQUT1PUS5zcGxpY2U7ZnVuY3Rpb24gRlEoeSl7dmFyIGc9dGhpcy5fX2RhdGFfXyx4PVdUKGcseSk7aWYoeDwwKXJldHVybiExO3ZhciBUPWcubGVuZ3RoLTE7cmV0dXJuIHg9PVQ/Zy5wb3AoKTpQUS5jYWxsKGcseCwxKSwtLXRoaXMuc2l6ZSwhMH12YXIgTlE9RlE7ZnVuY3Rpb24gQlEoeSl7dmFyIGc9dGhpcy5fX2RhdGFfXyx4PVdUKGcseSk7cmV0dXJuIHg8MD92b2lkIDA6Z1t4XVsxXX12YXIgUlE9QlE7ZnVuY3Rpb24galEoeSl7cmV0dXJuIFdUKHRoaXMuX19kYXRhX18seSk+LTF9dmFyICRRPWpRO2Z1bmN0aW9uIHpRKHksZyl7dmFyIHg9dGhpcy5fX2RhdGFfXyxUPVdUKHgseSk7cmV0dXJuIFQ8MD8oKyt0aGlzLnNpemUseC5wdXNoKFt5LGddKSk6eFtUXVsxXT1nLHRoaXN9dmFyIHFRPXpRO2Z1bmN0aW9uIHJ4KHkpe3ZhciBnPS0xLHg9eT09bnVsbD8wOnkubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytnPHg7KXt2YXIgVD15W2ddO3RoaXMuc2V0KFRbMF0sVFsxXSl9fXJ4LnByb3RvdHlwZS5jbGVhcj1NUSxyeC5wcm90b3R5cGUuZGVsZXRlPU5RLHJ4LnByb3RvdHlwZS5nZXQ9UlEscngucHJvdG90eXBlLmhhcz0kUSxyeC5wcm90b3R5cGUuc2V0PXFRO3ZhciBIUT1yeCxWUT1CTChNYSwiTWFwIiksR1E9VlE7ZnVuY3Rpb24gVVEoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBLTixtYXA6bmV3KEdRfHxIUSksc3RyaW5nOm5ldyBLTn19dmFyIFdRPVVRO2Z1bmN0aW9uIFlRKHkpe3ZhciBnPXR5cGVvZiB5O3JldHVybiBnPT0ic3RyaW5nInx8Zz09Im51bWJlciJ8fGc9PSJzeW1ib2wifHxnPT0iYm9vbGVhbiI/eSE9PSJfX3Byb3RvX18iOnk9PT1udWxsfXZhciBLUT1ZUTtmdW5jdGlvbiBYUSh5LGcpe3ZhciB4PXkuX19kYXRhX187cmV0dXJuIEtRKGcpP3hbdHlwZW9mIGc9PSJzdHJpbmciPyJzdHJpbmciOiJoYXNoIl06eC5tYXB9dmFyIFlUPVhRO2Z1bmN0aW9uIFFRKHkpe3ZhciBnPVlUKHRoaXMseSkuZGVsZXRlKHkpO3JldHVybiB0aGlzLnNpemUtPWc/MTowLGd9dmFyIFpRPVFRO2Z1bmN0aW9uIEpRKHkpe3JldHVybiBZVCh0aGlzLHkpLmdldCh5KX12YXIgdFo9SlE7ZnVuY3Rpb24gZVooeSl7cmV0dXJuIFlUKHRoaXMseSkuaGFzKHkpfXZhciBuWj1lWjtmdW5jdGlvbiByWih5LGcpe3ZhciB4PVlUKHRoaXMseSksVD14LnNpemU7cmV0dXJuIHguc2V0KHksZyksdGhpcy5zaXplKz14LnNpemU9PVQ/MDoxLHRoaXN9dmFyIGlaPXJaO2Z1bmN0aW9uIGl4KHkpe3ZhciBnPS0xLHg9eT09bnVsbD8wOnkubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytnPHg7KXt2YXIgVD15W2ddO3RoaXMuc2V0KFRbMF0sVFsxXSl9fWl4LnByb3RvdHlwZS5jbGVhcj1XUSxpeC5wcm90b3R5cGUuZGVsZXRlPVpRLGl4LnByb3RvdHlwZS5nZXQ9dFosaXgucHJvdG90eXBlLmhhcz1uWixpeC5wcm90b3R5cGUuc2V0PWlaO3ZhciBRTj1peCxzWj0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7ZnVuY3Rpb24gUkwoeSxnKXtpZih0eXBlb2YgeSE9ImZ1bmN0aW9uInx8ZyE9bnVsbCYmdHlwZW9mIGchPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihzWik7dmFyIHg9ZnVuY3Rpb24oKXt2YXIgVD1hcmd1bWVudHMsTD1nP2cuYXBwbHkodGhpcyxUKTpUWzBdLE89eC5jYWNoZTtpZihPLmhhcyhMKSlyZXR1cm4gTy5nZXQoTCk7dmFyIFA9eS5hcHBseSh0aGlzLFQpO3JldHVybiB4LmNhY2hlPU8uc2V0KEwsUCl8fE8sUH07cmV0dXJuIHguY2FjaGU9bmV3KFJMLkNhY2hlfHxRTikseH1STC5DYWNoZT1RTjt2YXIgYVo9Ukwsb1o9NTAwO2Z1bmN0aW9uIGNaKHkpe3ZhciBnPWFaKHksZnVuY3Rpb24oVCl7cmV0dXJuIHguc2l6ZT09PW9aJiZ4LmNsZWFyKCksVH0pLHg9Zy5jYWNoZTtyZXR1cm4gZ312YXIgdVo9Y1osbFo9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csaFo9L1xcKFxcKT8vZyxmWj11WihmdW5jdGlvbih5KXt2YXIgZz1bXTtyZXR1cm4geS5jaGFyQ29kZUF0KDApPT09NDYmJmcucHVzaCgiIikseS5yZXBsYWNlKGxaLGZ1bmN0aW9uKHgsVCxMLE8pe2cucHVzaChMP08ucmVwbGFjZShoWiwiJDEiKTpUfHx4KX0pLGd9KSxaTj1mWjtmdW5jdGlvbiBkWih5LGcpe2Zvcih2YXIgeD0tMSxUPXk9PW51bGw/MDp5Lmxlbmd0aCxMPUFycmF5KFQpOysreDxUOylMW3hdPWcoeVt4XSx4LHkpO3JldHVybiBMfXZhciBKTj1kWixnWj0xLzAsdEI9dGg/dGgucHJvdG90eXBlOnZvaWQgMCxlQj10Qj90Qi50b1N0cmluZzp2b2lkIDA7ZnVuY3Rpb24gbkIoeSl7aWYodHlwZW9mIHk9PSJzdHJpbmciKXJldHVybiB5O2lmKFVUKHkpKXJldHVybiBKTih5LG5CKSsiIjtpZihrcih5KSlyZXR1cm4gZUI/ZUIuY2FsbCh5KToiIjt2YXIgZz15KyIiO3JldHVybiBnPT0iMCImJjEveT09LWdaPyItMCI6Z312YXIgcFo9bkI7ZnVuY3Rpb24gYlooeSl7cmV0dXJuIHk9PW51bGw/IiI6cFooeSl9dmFyIEtUPWJaO2Z1bmN0aW9uIGpMKHksZyl7cmV0dXJuIFVUKHkpP3k6VVgoeSxnKT9beV06Wk4oS1QoeSkpfXZhciBYVD1qTCx3Wj0xLzA7ZnVuY3Rpb24gdlooeSl7aWYodHlwZW9mIHk9PSJzdHJpbmcifHxrcih5KSlyZXR1cm4geTt2YXIgZz15KyIiO3JldHVybiBnPT0iMCImJjEveT09LXdaPyItMCI6Z312YXIgJEw9dlo7ZnVuY3Rpb24gbVooeSxnKXtnPVhUKGcseSk7Zm9yKHZhciB4PTAsVD1nLmxlbmd0aDt5IT1udWxsJiZ4PFQ7KXk9eVskTChnW3grK10pXTtyZXR1cm4geCYmeD09VD95OnZvaWQgMH12YXIgeVo9bVo7ZnVuY3Rpb24gckIoeSxnLHgpe3ZhciBUPXk9PW51bGw/dm9pZCAwOnlaKHksZyk7cmV0dXJuIFQ9PT12b2lkIDA/eDpUfXZhciB4Wj1yQixrWj1mdW5jdGlvbigpe3RyeXt2YXIgeT1CTChPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIHkoe30sIiIse30pLHl9Y2F0Y2h7fX0oKSxFWj1rWjtmdW5jdGlvbiBUWih5LGcseCl7Zz09Il9fcHJvdG9fXyImJkVaP0VaKHksZyx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6eCx3cml0YWJsZTohMH0pOnlbZ109eH12YXIgQ1o9VFosX1o9T2JqZWN0LnByb3RvdHlwZSxTWj1fWi5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBBWih5LGcseCl7dmFyIFQ9eVtnXTsoIShTWi5jYWxsKHksZykmJlhOKFQseCkpfHx4PT09dm9pZCAwJiYhKGcgaW4geSkpJiZDWih5LGcseCl9dmFyIExaPUFaLE1aPTkwMDcxOTkyNTQ3NDA5OTEsa2c9L14oPzowfFsxLTldXGQqKSQvO2Z1bmN0aW9uIERaKHksZyl7dmFyIHg9dHlwZW9mIHk7cmV0dXJuIGc9Zz8/TVosISFnJiYoeD09Im51bWJlciJ8fHghPSJzeW1ib2wiJiZrZy50ZXN0KHkpKSYmeT4tMSYmeSUxPT0wJiZ5PGd9dmFyIHhtPURaO2Z1bmN0aW9uIGlCKHksZyx4LFQpe2lmKCFFZSh5KSlyZXR1cm4geTtnPVhUKGcseSk7Zm9yKHZhciBMPS0xLE89Zy5sZW5ndGgsUD1PLTEsJD15OyQhPW51bGwmJisrTDxPOyl7dmFyIHE9JEwoZ1tMXSksUz14O2lmKHE9PT0iX19wcm90b19fInx8cT09PSJjb25zdHJ1Y3RvciJ8fHE9PT0icHJvdG90eXBlIilyZXR1cm4geTtpZihMIT1QKXt2YXIgVj0kW3FdO1M9VD9UKFYscSwkKTp2b2lkIDAsUz09PXZvaWQgMCYmKFM9RWUoVik/Vjp4bShnW0wrMV0pP1tdOnt9KX1MWigkLHEsUyksJD0kW3FdfXJldHVybiB5fXZhciBJWj1pQjtmdW5jdGlvbiBPWih5LGcseCl7cmV0dXJuIHk9PW51bGw/eTpJWih5LGcseCl9dmFyIFBaPU9aO2Z1bmN0aW9uIEZaKHksZyl7dmFyIHg9LTEsVD15Lmxlbmd0aDtmb3IoZ3x8KGc9QXJyYXkoVCkpOysreDxUOylnW3hdPXlbeF07cmV0dXJuIGd9dmFyIE5aPUZaO2Z1bmN0aW9uIEJaKHkpe3JldHVybiBVVCh5KT9KTih5LCRMKTprcih5KT9beV06TlooWk4oS1QoeSkpKX12YXIgUlo9Qlosalo9e2RhdGE6ZnVuY3Rpb24oZyl7dmFyIHg9e2ZpZWxkOiJkYXRhIixiaW5kaW5nRXZlbnQ6ImRhdGEiLGFsbG93QmluZGluZzohMSxhbGxvd1NldHRpbmc6ITEsYWxsb3dHZXR0aW5nOiExLHNldHRpbmdFdmVudDoiZGF0YSIsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITEsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsaW1tdXRhYmxlS2V5czp7fSx1cGRhdGVTdHlsZTohMSxiZWZvcmVHZXQ6ZnVuY3Rpb24oTCl7fSxiZWZvcmVTZXQ6ZnVuY3Rpb24oTCxPKXt9LG9uU2V0OmZ1bmN0aW9uKEwpe30sY2FuU2V0OmZ1bmN0aW9uKEwpe3JldHVybiEwfX07cmV0dXJuIGc9ZGUoe30seCxnKSxmdW5jdGlvbihMLE8pe3ZhciBQPWcsJD10aGlzLHE9JC5sZW5ndGghPT12b2lkIDAsUz1xPyQ6WyRdLFY9cT8kWzBdOiQ7aWYobXQoTCkpe3ZhciBZPUwuaW5kZXhPZigiLiIpIT09LTEscnQ9WSYmUlooTCk7aWYoUC5hbGxvd0dldHRpbmcmJk89PT12b2lkIDApe3ZhciBvdDtyZXR1cm4gViYmKFAuYmVmb3JlR2V0KFYpLHJ0JiZWLl9wcml2YXRlW1AuZmllbGRdW0xdPT09dm9pZCAwP290PXhaKFYuX3ByaXZhdGVbUC5maWVsZF0scnQpOm90PVYuX3ByaXZhdGVbUC5maWVsZF1bTF0pLG90fWVsc2UgaWYoUC5hbGxvd1NldHRpbmcmJk8hPT12b2lkIDApe3ZhciBodD0hUC5pbW11dGFibGVLZXlzW0xdO2lmKGh0KXt2YXIgZHQ9Yih7fSxMLE8pO1AuYmVmb3JlU2V0KCQsZHQpO2Zvcih2YXIgTHQ9MCxrdD1TLmxlbmd0aDtMdDxrdDtMdCsrKXt2YXIgRHQ9U1tMdF07UC5jYW5TZXQoRHQpJiYocnQmJlYuX3ByaXZhdGVbUC5maWVsZF1bTF09PT12b2lkIDA/UFooRHQuX3ByaXZhdGVbUC5maWVsZF0scnQsTyk6RHQuX3ByaXZhdGVbUC5maWVsZF1bTF09Tyl9UC51cGRhdGVTdHlsZSYmJC51cGRhdGVTdHlsZSgpLFAub25TZXQoJCksUC5zZXR0aW5nVHJpZ2dlcnNFdmVudCYmJFtQLnRyaWdnZXJGbk5hbWVdKFAuc2V0dGluZ0V2ZW50KX19fWVsc2UgaWYoUC5hbGxvd1NldHRpbmcmJnV0KEwpKXt2YXIgUHQ9TCwkdCxadCxZdD1PYmplY3Qua2V5cyhQdCk7UC5iZWZvcmVTZXQoJCxQdCk7Zm9yKHZhciBxdD0wO3F0PFl0Lmxlbmd0aDtxdCsrKXskdD1ZdFtxdF0sWnQ9UHRbJHRdO3ZhciBuZT0hUC5pbW11dGFibGVLZXlzWyR0XTtpZihuZSlmb3IodmFyIEd0PTA7R3Q8Uy5sZW5ndGg7R3QrKyl7dmFyIGdlPVNbR3RdO1AuY2FuU2V0KGdlKSYmKGdlLl9wcml2YXRlW1AuZmllbGRdWyR0XT1adCl9fVAudXBkYXRlU3R5bGUmJiQudXBkYXRlU3R5bGUoKSxQLm9uU2V0KCQpLFAuc2V0dGluZ1RyaWdnZXJzRXZlbnQmJiRbUC50cmlnZ2VyRm5OYW1lXShQLnNldHRpbmdFdmVudCl9ZWxzZSBpZihQLmFsbG93QmluZGluZyYmeXQoTCkpe3ZhciBiZT1MOyQub24oUC5iaW5kaW5nRXZlbnQsYmUpfWVsc2UgaWYoUC5hbGxvd0dldHRpbmcmJkw9PT12b2lkIDApe3ZhciBpZTtyZXR1cm4gViYmKFAuYmVmb3JlR2V0KFYpLGllPVYuX3ByaXZhdGVbUC5maWVsZF0pLGllfXJldHVybiAkfX0scmVtb3ZlRGF0YTpmdW5jdGlvbihnKXt2YXIgeD17ZmllbGQ6ImRhdGEiLGV2ZW50OiJkYXRhIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITEsaW1tdXRhYmxlS2V5czp7fX07cmV0dXJuIGc9ZGUoe30seCxnKSxmdW5jdGlvbihMKXt2YXIgTz1nLFA9dGhpcywkPVAubGVuZ3RoIT09dm9pZCAwLHE9JD9QOltQXTtpZihtdChMKSl7Zm9yKHZhciBTPUwuc3BsaXQoL1xzKy8pLFY9Uy5sZW5ndGgsWT0wO1k8VjtZKyspe3ZhciBydD1TW1ldO2lmKCFaKHJ0KSl7dmFyIG90PSFPLmltbXV0YWJsZUtleXNbcnRdO2lmKG90KWZvcih2YXIgaHQ9MCxkdD1xLmxlbmd0aDtodDxkdDtodCsrKXFbaHRdLl9wcml2YXRlW08uZmllbGRdW3J0XT12b2lkIDB9fU8udHJpZ2dlckV2ZW50JiZQW08udHJpZ2dlckZuTmFtZV0oTy5ldmVudCl9ZWxzZSBpZihMPT09dm9pZCAwKXtmb3IodmFyIEx0PTAsa3Q9cS5sZW5ndGg7THQ8a3Q7THQrKylmb3IodmFyIER0PXFbTHRdLl9wcml2YXRlW08uZmllbGRdLFB0PU9iamVjdC5rZXlzKER0KSwkdD0wOyR0PFB0Lmxlbmd0aDskdCsrKXt2YXIgWnQ9UHRbJHRdLFl0PSFPLmltbXV0YWJsZUtleXNbWnRdO1l0JiYoRHRbWnRdPXZvaWQgMCl9Ty50cmlnZ2VyRXZlbnQmJlBbTy50cmlnZ2VyRm5OYW1lXShPLmV2ZW50KX1yZXR1cm4gUH19fSwkWj17ZXZlbnRBbGlhc2VzT246ZnVuY3Rpb24oZyl7dmFyIHg9Zzt4LmFkZExpc3RlbmVyPXgubGlzdGVuPXguYmluZD14Lm9uLHgudW5saXN0ZW49eC51bmJpbmQ9eC5vZmY9eC5yZW1vdmVMaXN0ZW5lcix4LnRyaWdnZXI9eC5lbWl0LHgucG9uPXgucHJvbWlzZU9uPWZ1bmN0aW9uKFQsTCl7dmFyIE89dGhpcyxQPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gbmV3IGV4KGZ1bmN0aW9uKCQscSl7dmFyIFM9ZnVuY3Rpb24ob3Qpe08ub2ZmLmFwcGx5KE8sWSksJChvdCl9LFY9UC5jb25jYXQoW1NdKSxZPVYuY29uY2F0KFtdKTtPLm9uLmFwcGx5KE8sVil9KX19fSxBYz17fTtbelgsalosJFpdLmZvckVhY2goZnVuY3Rpb24oeSl7ZGUoQWMseSl9KTt2YXIgelo9e2FuaW1hdGU6QWMuYW5pbWF0ZSgpLGFuaW1hdGlvbjpBYy5hbmltYXRpb24oKSxhbmltYXRlZDpBYy5hbmltYXRlZCgpLGNsZWFyUXVldWU6QWMuY2xlYXJRdWV1ZSgpLGRlbGF5OkFjLmRlbGF5KCksZGVsYXlBbmltYXRpb246QWMuZGVsYXlBbmltYXRpb24oKSxzdG9wOkFjLnN0b3AoKX0sUVQ9e2NsYXNzZXM6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcztpZihnPT09dm9pZCAwKXt2YXIgVD1bXTtyZXR1cm4geFswXS5fcHJpdmF0ZS5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24oaHQpe3JldHVybiBULnB1c2goaHQpfSksVH1lbHNlIGZ0KGcpfHwoZz0oZ3x8IiIpLm1hdGNoKC9cUysvZyl8fFtdKTtmb3IodmFyIEw9W10sTz1uZXcgWTUoZyksUD0wO1A8eC5sZW5ndGg7UCsrKXtmb3IodmFyICQ9eFtQXSxxPSQuX3ByaXZhdGUsUz1xLmNsYXNzZXMsVj0hMSxZPTA7WTxnLmxlbmd0aDtZKyspe3ZhciBydD1nW1ldLG90PVMuaGFzKHJ0KTtpZighb3Qpe1Y9ITA7YnJlYWt9fVZ8fChWPVMuc2l6ZSE9PWcubGVuZ3RoKSxWJiYocS5jbGFzc2VzPU8sTC5wdXNoKCQpKX1yZXR1cm4gTC5sZW5ndGg+MCYmdGhpcy5zcGF3bihMKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIikseH0sYWRkQ2xhc3M6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudG9nZ2xlQ2xhc3MoZywhMCl9LGhhc0NsYXNzOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXNbMF07cmV0dXJuIHghPW51bGwmJnguX3ByaXZhdGUuY2xhc3Nlcy5oYXMoZyl9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGcseCl7ZnQoZyl8fChnPWcubWF0Y2goL1xTKy9nKXx8W10pO2Zvcih2YXIgVD10aGlzLEw9eD09PXZvaWQgMCxPPVtdLFA9MCwkPVQubGVuZ3RoO1A8JDtQKyspZm9yKHZhciBxPVRbUF0sUz1xLl9wcml2YXRlLmNsYXNzZXMsVj0hMSxZPTA7WTxnLmxlbmd0aDtZKyspe3ZhciBydD1nW1ldLG90PVMuaGFzKHJ0KSxodD0hMTt4fHxMJiYhb3Q/KFMuYWRkKHJ0KSxodD0hMCk6KCF4fHxMJiZvdCkmJihTLmRlbGV0ZShydCksaHQ9ITApLCFWJiZodCYmKE8ucHVzaChxKSxWPSEwKX1yZXR1cm4gTy5sZW5ndGg+MCYmdGhpcy5zcGF3bihPKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIiksVH0scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudG9nZ2xlQ2xhc3MoZywhMSl9LGZsYXNoQ2xhc3M6ZnVuY3Rpb24oZyx4KXt2YXIgVD10aGlzO2lmKHg9PW51bGwpeD0yNTA7ZWxzZSBpZih4PT09MClyZXR1cm4gVDtyZXR1cm4gVC5hZGRDbGFzcyhnKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VC5yZW1vdmVDbGFzcyhnKX0seCksVH19O1FULmNsYXNzTmFtZT1RVC5jbGFzc05hbWVzPVFULmNsYXNzZXM7dmFyIHRjPXttZXRhQ2hhcjoiW1xcIVxcXCJcXCNcXCRcXCVcXCZcXCdcXChcXClcXCpcXCtcXCxcXC5cXC9cXDpcXDtcXDxcXD1cXD5cXD9cXEBcXFtcXF1cXF5cXGBcXHtcXHxcXH1cXH5dIixjb21wYXJhdG9yT3A6Ij18XFwhPXw+fD49fDx8PD18XFwkPXxcXF49fFxcKj0iLGJvb2xPcDoiXFw/fFxcIXxcXF4iLHN0cmluZzpgIig/OlxcXFwifFteIl0pKiJ8Jyg/OlxcXFwnfFteJ10pKidgLG51bWJlcjpZZSxtZXRhOiJkZWdyZWV8aW5kZWdyZWV8b3V0ZGVncmVlIixzZXBhcmF0b3I6IlxccyosXFxzKiIsZGVzY2VuZGFudDoiXFxzKyIsY2hpbGQ6Ilxccys+XFxzKyIsc3ViamVjdDoiXFwkIixncm91cDoibm9kZXxlZGdlfFxcKiIsZGlyZWN0ZWRFZGdlOiJcXHMrLT5cXHMrIix1bmRpcmVjdGVkRWRnZToiXFxzKzwtPlxccysifTt0Yy52YXJpYWJsZT0iKD86W1xcdy0uXXwoPzpcXFxcIit0Yy5tZXRhQ2hhcisiKSkrIix0Yy5jbGFzc05hbWU9Iig/OltcXHctXXwoPzpcXFxcIit0Yy5tZXRhQ2hhcisiKSkrIix0Yy52YWx1ZT10Yy5zdHJpbmcrInwiK3RjLm51bWJlcix0Yy5pZD10Yy52YXJpYWJsZSxmdW5jdGlvbigpe3ZhciB5LGcseDtmb3IoeT10Yy5jb21wYXJhdG9yT3Auc3BsaXQoInwiKSx4PTA7eDx5Lmxlbmd0aDt4KyspZz15W3hdLHRjLmNvbXBhcmF0b3JPcCs9InxAIitnO2Zvcih5PXRjLmNvbXBhcmF0b3JPcC5zcGxpdCgifCIpLHg9MDt4PHkubGVuZ3RoO3grKylnPXlbeF0sIShnLmluZGV4T2YoIiEiKT49MCkmJmchPT0iPSImJih0Yy5jb21wYXJhdG9yT3ArPSJ8XFwhIitnKX0oKTt2YXIgS2M9ZnVuY3Rpb24oKXtyZXR1cm57Y2hlY2tzOltdfX0semk9e0dST1VQOjAsQ09MTEVDVElPTjoxLEZJTFRFUjoyLERBVEFfQ09NUEFSRTozLERBVEFfRVhJU1Q6NCxEQVRBX0JPT0w6NSxNRVRBX0NPTVBBUkU6NixTVEFURTo3LElEOjgsQ0xBU1M6OSxVTkRJUkVDVEVEX0VER0U6MTAsRElSRUNURURfRURHRToxMSxOT0RFX1NPVVJDRToxMixOT0RFX1RBUkdFVDoxMyxOT0RFX05FSUdIQk9SOjE0LENISUxEOjE1LERFU0NFTkRBTlQ6MTYsUEFSRU5UOjE3LEFOQ0VTVE9SOjE4LENPTVBPVU5EX1NQTElUOjE5LFRSVUU6MjB9LHpMPVt7c2VsZWN0b3I6IjpzZWxlY3RlZCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5zZWxlY3RlZCgpfX0se3NlbGVjdG9yOiI6dW5zZWxlY3RlZCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4hZy5zZWxlY3RlZCgpfX0se3NlbGVjdG9yOiI6c2VsZWN0YWJsZSIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5zZWxlY3RhYmxlKCl9fSx7c2VsZWN0b3I6Ijp1bnNlbGVjdGFibGUiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIWcuc2VsZWN0YWJsZSgpfX0se3NlbGVjdG9yOiI6bG9ja2VkIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLmxvY2tlZCgpfX0se3NlbGVjdG9yOiI6dW5sb2NrZWQiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIWcubG9ja2VkKCl9fSx7c2VsZWN0b3I6Ijp2aXNpYmxlIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLnZpc2libGUoKX19LHtzZWxlY3RvcjoiOmhpZGRlbiIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4hZy52aXNpYmxlKCl9fSx7c2VsZWN0b3I6Ijp0cmFuc3BhcmVudCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy50cmFuc3BhcmVudCgpfX0se3NlbGVjdG9yOiI6Z3JhYmJlZCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5ncmFiYmVkKCl9fSx7c2VsZWN0b3I6IjpmcmVlIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiFnLmdyYWJiZWQoKX19LHtzZWxlY3RvcjoiOnJlbW92ZWQiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVtb3ZlZCgpfX0se3NlbGVjdG9yOiI6aW5zaWRlIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiFnLnJlbW92ZWQoKX19LHtzZWxlY3RvcjoiOmdyYWJiYWJsZSIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5ncmFiYmFibGUoKX19LHtzZWxlY3RvcjoiOnVuZ3JhYmJhYmxlIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiFnLmdyYWJiYWJsZSgpfX0se3NlbGVjdG9yOiI6YW5pbWF0ZWQiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuYW5pbWF0ZWQoKX19LHtzZWxlY3RvcjoiOnVuYW5pbWF0ZWQiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIWcuYW5pbWF0ZWQoKX19LHtzZWxlY3RvcjoiOnBhcmVudCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5pc1BhcmVudCgpfX0se3NlbGVjdG9yOiI6Y2hpbGRsZXNzIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLmlzQ2hpbGRsZXNzKCl9fSx7c2VsZWN0b3I6IjpjaGlsZCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5pc0NoaWxkKCl9fSx7c2VsZWN0b3I6IjpvcnBoYW4iLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNPcnBoYW4oKX19LHtzZWxlY3RvcjoiOm5vbm9ycGhhbiIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5pc0NoaWxkKCl9fSx7c2VsZWN0b3I6Ijpjb21wb3VuZCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5pc05vZGUoKT9nLmlzUGFyZW50KCk6Zy5zb3VyY2UoKS5pc1BhcmVudCgpfHxnLnRhcmdldCgpLmlzUGFyZW50KCl9fSx7c2VsZWN0b3I6Ijpsb29wIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLmlzTG9vcCgpfX0se3NlbGVjdG9yOiI6c2ltcGxlIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLmlzU2ltcGxlKCl9fSx7c2VsZWN0b3I6IjphY3RpdmUiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuYWN0aXZlKCl9fSx7c2VsZWN0b3I6IjppbmFjdGl2ZSIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4hZy5hY3RpdmUoKX19LHtzZWxlY3RvcjoiOmJhY2tncm91bmRpbmciLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuYmFja2dyb3VuZGluZygpfX0se3NlbGVjdG9yOiI6bm9uYmFja2dyb3VuZGluZyIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4hZy5iYWNrZ3JvdW5kaW5nKCl9fV0uc29ydChmdW5jdGlvbih5LGcpe3JldHVybiBNZSh5LnNlbGVjdG9yLGcuc2VsZWN0b3IpfSkscVo9ZnVuY3Rpb24oKXtmb3IodmFyIHk9e30sZyx4PTA7eDx6TC5sZW5ndGg7eCsrKWc9ekxbeF0seVtnLnNlbGVjdG9yXT1nLm1hdGNoZXM7cmV0dXJuIHl9KCksSFo9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gcVpbZ10oeCl9LFZaPSIoIit6TC5tYXAoZnVuY3Rpb24oeSl7cmV0dXJuIHkuc2VsZWN0b3J9KS5qb2luKCJ8IikrIikiLHN4PWZ1bmN0aW9uKGcpe3JldHVybiBnLnJlcGxhY2UobmV3IFJlZ0V4cCgiXFxcXCgiK3RjLm1ldGFDaGFyKyIpIiwiZyIpLGZ1bmN0aW9uKHgsVCl7cmV0dXJuIFR9KX0sa209ZnVuY3Rpb24oZyx4LFQpe2dbZy5sZW5ndGgtMV09VH0sVWU9W3tuYW1lOiJncm91cCIscXVlcnk6ITAscmVnZXg6IigiK3RjLmdyb3VwKyIpIixwb3B1bGF0ZTpmdW5jdGlvbihnLHgsVCl7dmFyIEw9RShULDEpLE89TFswXTt4LmNoZWNrcy5wdXNoKHt0eXBlOnppLkdST1VQLHZhbHVlOk89PT0iKiI/TzpPKyJzIn0pfX0se25hbWU6InN0YXRlIixxdWVyeTohMCxyZWdleDpWWixwb3B1bGF0ZTpmdW5jdGlvbihnLHgsVCl7dmFyIEw9RShULDEpLE89TFswXTt4LmNoZWNrcy5wdXNoKHt0eXBlOnppLlNUQVRFLHZhbHVlOk99KX19LHtuYW1lOiJpZCIscXVlcnk6ITAscmVnZXg6IlxcIygiK3RjLmlkKyIpIixwb3B1bGF0ZTpmdW5jdGlvbihnLHgsVCl7dmFyIEw9RShULDEpLE89TFswXTt4LmNoZWNrcy5wdXNoKHt0eXBlOnppLklELHZhbHVlOnN4KE8pfSl9fSx7bmFtZToiY2xhc3NOYW1lIixxdWVyeTohMCxyZWdleDoiXFwuKCIrdGMuY2xhc3NOYW1lKyIpIixwb3B1bGF0ZTpmdW5jdGlvbihnLHgsVCl7dmFyIEw9RShULDEpLE89TFswXTt4LmNoZWNrcy5wdXNoKHt0eXBlOnppLkNMQVNTLHZhbHVlOnN4KE8pfSl9fSx7bmFtZToiZGF0YUV4aXN0cyIscXVlcnk6ITAscmVnZXg6IlxcW1xccyooIit0Yy52YXJpYWJsZSsiKVxccypcXF0iLHBvcHVsYXRlOmZ1bmN0aW9uKGcseCxUKXt2YXIgTD1FKFQsMSksTz1MWzBdO3guY2hlY2tzLnB1c2goe3R5cGU6emkuREFUQV9FWElTVCxmaWVsZDpzeChPKX0pfX0se25hbWU6ImRhdGFDb21wYXJlIixxdWVyeTohMCxyZWdleDoiXFxbXFxzKigiK3RjLnZhcmlhYmxlKyIpXFxzKigiK3RjLmNvbXBhcmF0b3JPcCsiKVxccyooIit0Yy52YWx1ZSsiKVxccypcXF0iLHBvcHVsYXRlOmZ1bmN0aW9uKGcseCxUKXt2YXIgTD1FKFQsMyksTz1MWzBdLFA9TFsxXSwkPUxbMl0scT1uZXcgUmVnRXhwKCJeIit0Yy5zdHJpbmcrIiQiKS5leGVjKCQpIT1udWxsO3E/JD0kLnN1YnN0cmluZygxLCQubGVuZ3RoLTEpOiQ9cGFyc2VGbG9hdCgkKSx4LmNoZWNrcy5wdXNoKHt0eXBlOnppLkRBVEFfQ09NUEFSRSxmaWVsZDpzeChPKSxvcGVyYXRvcjpQLHZhbHVlOiR9KX19LHtuYW1lOiJkYXRhQm9vbCIscXVlcnk6ITAscmVnZXg6IlxcW1xccyooIit0Yy5ib29sT3ArIilcXHMqKCIrdGMudmFyaWFibGUrIilcXHMqXFxdIixwb3B1bGF0ZTpmdW5jdGlvbihnLHgsVCl7dmFyIEw9RShULDIpLE89TFswXSxQPUxbMV07eC5jaGVja3MucHVzaCh7dHlwZTp6aS5EQVRBX0JPT0wsZmllbGQ6c3goUCksb3BlcmF0b3I6T30pfX0se25hbWU6Im1ldGFDb21wYXJlIixxdWVyeTohMCxyZWdleDoiXFxbXFxbXFxzKigiK3RjLm1ldGErIilcXHMqKCIrdGMuY29tcGFyYXRvck9wKyIpXFxzKigiK3RjLm51bWJlcisiKVxccypcXF1cXF0iLHBvcHVsYXRlOmZ1bmN0aW9uKGcseCxUKXt2YXIgTD1FKFQsMyksTz1MWzBdLFA9TFsxXSwkPUxbMl07eC5jaGVja3MucHVzaCh7dHlwZTp6aS5NRVRBX0NPTVBBUkUsZmllbGQ6c3goTyksb3BlcmF0b3I6UCx2YWx1ZTpwYXJzZUZsb2F0KCQpfSl9fSx7bmFtZToibmV4dFF1ZXJ5IixzZXBhcmF0b3I6ITAscmVnZXg6dGMuc2VwYXJhdG9yLHBvcHVsYXRlOmZ1bmN0aW9uKGcseCl7dmFyIFQ9Zy5jdXJyZW50U3ViamVjdCxMPWcuZWRnZUNvdW50LE89Zy5jb21wb3VuZENvdW50LFA9Z1tnLmxlbmd0aC0xXTtUIT1udWxsJiYoUC5zdWJqZWN0PVQsZy5jdXJyZW50U3ViamVjdD1udWxsKSxQLmVkZ2VDb3VudD1MLFAuY29tcG91bmRDb3VudD1PLGcuZWRnZUNvdW50PTAsZy5jb21wb3VuZENvdW50PTA7dmFyICQ9Z1tnLmxlbmd0aCsrXT1LYygpO3JldHVybiAkfX0se25hbWU6ImRpcmVjdGVkRWRnZSIsc2VwYXJhdG9yOiEwLHJlZ2V4OnRjLmRpcmVjdGVkRWRnZSxwb3B1bGF0ZTpmdW5jdGlvbihnLHgpe2lmKGcuY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBUPUtjKCksTD14LE89S2MoKTtyZXR1cm4gVC5jaGVja3MucHVzaCh7dHlwZTp6aS5ESVJFQ1RFRF9FREdFLHNvdXJjZTpMLHRhcmdldDpPfSksa20oZyx4LFQpLGcuZWRnZUNvdW50KyssT31lbHNle3ZhciBQPUtjKCksJD14LHE9S2MoKTtyZXR1cm4gUC5jaGVja3MucHVzaCh7dHlwZTp6aS5OT0RFX1NPVVJDRSxzb3VyY2U6JCx0YXJnZXQ6cX0pLGttKGcseCxQKSxnLmVkZ2VDb3VudCsrLHF9fX0se25hbWU6InVuZGlyZWN0ZWRFZGdlIixzZXBhcmF0b3I6ITAscmVnZXg6dGMudW5kaXJlY3RlZEVkZ2UscG9wdWxhdGU6ZnVuY3Rpb24oZyx4KXtpZihnLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgVD1LYygpLEw9eCxPPUtjKCk7cmV0dXJuIFQuY2hlY2tzLnB1c2goe3R5cGU6emkuVU5ESVJFQ1RFRF9FREdFLG5vZGVzOltMLE9dfSksa20oZyx4LFQpLGcuZWRnZUNvdW50KyssT31lbHNle3ZhciBQPUtjKCksJD14LHE9S2MoKTtyZXR1cm4gUC5jaGVja3MucHVzaCh7dHlwZTp6aS5OT0RFX05FSUdIQk9SLG5vZGU6JCxuZWlnaGJvcjpxfSksa20oZyx4LFApLHF9fX0se25hbWU6ImNoaWxkIixzZXBhcmF0b3I6ITAscmVnZXg6dGMuY2hpbGQscG9wdWxhdGU6ZnVuY3Rpb24oZyx4KXtpZihnLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgVD1LYygpLEw9S2MoKSxPPWdbZy5sZW5ndGgtMV07cmV0dXJuIFQuY2hlY2tzLnB1c2goe3R5cGU6emkuQ0hJTEQscGFyZW50Ok8sY2hpbGQ6TH0pLGttKGcseCxUKSxnLmNvbXBvdW5kQ291bnQrKyxMfWVsc2UgaWYoZy5jdXJyZW50U3ViamVjdD09PXgpe3ZhciBQPUtjKCksJD1nW2cubGVuZ3RoLTFdLHE9S2MoKSxTPUtjKCksVj1LYygpLFk9S2MoKTtyZXR1cm4gUC5jaGVja3MucHVzaCh7dHlwZTp6aS5DT01QT1VORF9TUExJVCxsZWZ0OiQscmlnaHQ6cSxzdWJqZWN0OlN9KSxTLmNoZWNrcz14LmNoZWNrcyx4LmNoZWNrcz1be3R5cGU6emkuVFJVRX1dLFkuY2hlY2tzLnB1c2goe3R5cGU6emkuVFJVRX0pLHEuY2hlY2tzLnB1c2goe3R5cGU6emkuUEFSRU5ULHBhcmVudDpZLGNoaWxkOlZ9KSxrbShnLCQsUCksZy5jdXJyZW50U3ViamVjdD1TLGcuY29tcG91bmRDb3VudCsrLFZ9ZWxzZXt2YXIgcnQ9S2MoKSxvdD1LYygpLGh0PVt7dHlwZTp6aS5QQVJFTlQscGFyZW50OnJ0LGNoaWxkOm90fV07cmV0dXJuIHJ0LmNoZWNrcz14LmNoZWNrcyx4LmNoZWNrcz1odCxnLmNvbXBvdW5kQ291bnQrKyxvdH19fSx7bmFtZToiZGVzY2VuZGFudCIsc2VwYXJhdG9yOiEwLHJlZ2V4OnRjLmRlc2NlbmRhbnQscG9wdWxhdGU6ZnVuY3Rpb24oZyx4KXtpZihnLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgVD1LYygpLEw9S2MoKSxPPWdbZy5sZW5ndGgtMV07cmV0dXJuIFQuY2hlY2tzLnB1c2goe3R5cGU6emkuREVTQ0VOREFOVCxhbmNlc3RvcjpPLGRlc2NlbmRhbnQ6TH0pLGttKGcseCxUKSxnLmNvbXBvdW5kQ291bnQrKyxMfWVsc2UgaWYoZy5jdXJyZW50U3ViamVjdD09PXgpe3ZhciBQPUtjKCksJD1nW2cubGVuZ3RoLTFdLHE9S2MoKSxTPUtjKCksVj1LYygpLFk9S2MoKTtyZXR1cm4gUC5jaGVja3MucHVzaCh7dHlwZTp6aS5DT01QT1VORF9TUExJVCxsZWZ0OiQscmlnaHQ6cSxzdWJqZWN0OlN9KSxTLmNoZWNrcz14LmNoZWNrcyx4LmNoZWNrcz1be3R5cGU6emkuVFJVRX1dLFkuY2hlY2tzLnB1c2goe3R5cGU6emkuVFJVRX0pLHEuY2hlY2tzLnB1c2goe3R5cGU6emkuQU5DRVNUT1IsYW5jZXN0b3I6WSxkZXNjZW5kYW50OlZ9KSxrbShnLCQsUCksZy5jdXJyZW50U3ViamVjdD1TLGcuY29tcG91bmRDb3VudCsrLFZ9ZWxzZXt2YXIgcnQ9S2MoKSxvdD1LYygpLGh0PVt7dHlwZTp6aS5BTkNFU1RPUixhbmNlc3RvcjpydCxkZXNjZW5kYW50Om90fV07cmV0dXJuIHJ0LmNoZWNrcz14LmNoZWNrcyx4LmNoZWNrcz1odCxnLmNvbXBvdW5kQ291bnQrKyxvdH19fSx7bmFtZToic3ViamVjdCIsbW9kaWZpZXI6ITAscmVnZXg6dGMuc3ViamVjdCxwb3B1bGF0ZTpmdW5jdGlvbihnLHgpe2lmKGcuY3VycmVudFN1YmplY3QhPW51bGwmJmcuY3VycmVudFN1YmplY3QhPT14KXJldHVybiBTYygiUmVkZWZpbml0aW9uIG9mIHN1YmplY3QgaW4gc2VsZWN0b3IgYCIrZy50b1N0cmluZygpKyJgIiksITE7Zy5jdXJyZW50U3ViamVjdD14O3ZhciBUPWdbZy5sZW5ndGgtMV0sTD1ULmNoZWNrc1swXSxPPUw9PW51bGw/bnVsbDpMLnR5cGU7Tz09PXppLkRJUkVDVEVEX0VER0U/TC50eXBlPXppLk5PREVfVEFSR0VUOk89PT16aS5VTkRJUkVDVEVEX0VER0UmJihMLnR5cGU9emkuTk9ERV9ORUlHSEJPUixMLm5vZGU9TC5ub2Rlc1sxXSxMLm5laWdoYm9yPUwubm9kZXNbMF0sTC5ub2Rlcz1udWxsKX19XTtVZS5mb3JFYWNoKGZ1bmN0aW9uKHkpe3JldHVybiB5LnJlZ2V4T2JqPW5ldyBSZWdFeHAoIl4iK3kucmVnZXgpfSk7dmFyIEdaPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeCxULEwsTz0wO088VWUubGVuZ3RoO08rKyl7dmFyIFA9VWVbT10sJD1QLm5hbWUscT1nLm1hdGNoKFAucmVnZXhPYmopO2lmKHEhPW51bGwpe1Q9cSx4PVAsTD0kO3ZhciBTPXFbMF07Zz1nLnN1YnN0cmluZyhTLmxlbmd0aCk7YnJlYWt9fXJldHVybntleHByOngsbWF0Y2g6VCxuYW1lOkwscmVtYWluaW5nOmd9fSxVWj1mdW5jdGlvbihnKXt2YXIgeD1nLm1hdGNoKC9eXHMrLyk7aWYoeCl7dmFyIFQ9eFswXTtnPWcuc3Vic3RyaW5nKFQubGVuZ3RoKX1yZXR1cm4gZ30sV1o9ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcyxUPXguaW5wdXRUZXh0PWcsTD14WzBdPUtjKCk7Zm9yKHgubGVuZ3RoPTEsVD1VWihUKTs7KXt2YXIgTz1HWihUKTtpZihPLmV4cHI9PW51bGwpcmV0dXJuIFNjKCJUaGUgc2VsZWN0b3IgYCIrZysiYGlzIGludmFsaWQiKSwhMTt2YXIgUD1PLm1hdGNoLnNsaWNlKDEpLCQ9Ty5leHByLnBvcHVsYXRlKHgsTCxQKTtpZigkPT09ITEpcmV0dXJuITE7aWYoJCE9bnVsbCYmKEw9JCksVD1PLnJlbWFpbmluZyxULm1hdGNoKC9eXHMqJC8pKWJyZWFrfXZhciBxPXhbeC5sZW5ndGgtMV07eC5jdXJyZW50U3ViamVjdCE9bnVsbCYmKHEuc3ViamVjdD14LmN1cnJlbnRTdWJqZWN0KSxxLmVkZ2VDb3VudD14LmVkZ2VDb3VudCxxLmNvbXBvdW5kQ291bnQ9eC5jb21wb3VuZENvdW50O2Zvcih2YXIgUz0wO1M8eC5sZW5ndGg7UysrKXt2YXIgVj14W1NdO2lmKFYuY29tcG91bmRDb3VudD4wJiZWLmVkZ2VDb3VudD4wKXJldHVybiBTYygiVGhlIHNlbGVjdG9yIGAiK2crImAgaXMgaW52YWxpZCBiZWNhdXNlIGl0IHVzZXMgYm90aCBhIGNvbXBvdW5kIHNlbGVjdG9yIGFuZCBhbiBlZGdlIHNlbGVjdG9yIiksITE7aWYoVi5lZGdlQ291bnQ+MSlyZXR1cm4gU2MoIlRoZSBzZWxlY3RvciBgIitnKyJgIGlzIGludmFsaWQgYmVjYXVzZSBpdCB1c2VzIG11bHRpcGxlIGVkZ2Ugc2VsZWN0b3JzIiksITE7Vi5lZGdlQ291bnQ9PT0xJiZTYygiVGhlIHNlbGVjdG9yIGAiK2crImAgaXMgZGVwcmVjYXRlZC4gIEVkZ2Ugc2VsZWN0b3JzIGRvIG5vdCB0YWtlIGVmZmVjdCBvbiBjaGFuZ2VzIHRvIHNvdXJjZSBhbmQgdGFyZ2V0IG5vZGVzIGFmdGVyIGFuIGVkZ2UgaXMgYWRkZWQsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiAgVXNlIGEgY2xhc3Mgb3IgZGF0YSBzZWxlY3RvciBvbiBlZGdlcyBpbnN0ZWFkLCB1cGRhdGluZyB0aGUgY2xhc3Mgb3IgZGF0YSBvZiBhbiBlZGdlIHdoZW4geW91ciBhcHAgZGV0ZWN0cyBhIGNoYW5nZSBpbiBzb3VyY2Ugb3IgdGFyZ2V0IG5vZGVzLiIpfXJldHVybiEwfSxZWj1mdW5jdGlvbigpe2lmKHRoaXMudG9TdHJpbmdDYWNoZSE9bnVsbClyZXR1cm4gdGhpcy50b1N0cmluZ0NhY2hlO2Zvcih2YXIgZz1mdW5jdGlvbihWKXtyZXR1cm4gVj8/IiJ9LHg9ZnVuY3Rpb24oVil7cmV0dXJuIG10KFYpPyciJytWKyciJzpnKFYpfSxUPWZ1bmN0aW9uKFYpe3JldHVybiIgIitWKyIgIn0sTD1mdW5jdGlvbihWLFkpe3ZhciBydD1WLnR5cGUsb3Q9Vi52YWx1ZTtzd2l0Y2gocnQpe2Nhc2UgemkuR1JPVVA6e3ZhciBodD1nKG90KTtyZXR1cm4gaHQuc3Vic3RyaW5nKDAsaHQubGVuZ3RoLTEpfWNhc2UgemkuREFUQV9DT01QQVJFOnt2YXIgZHQ9Vi5maWVsZCxMdD1WLm9wZXJhdG9yO3JldHVybiJbIitkdCtUKGcoTHQpKSt4KG90KSsiXSJ9Y2FzZSB6aS5EQVRBX0JPT0w6e3ZhciBrdD1WLm9wZXJhdG9yLER0PVYuZmllbGQ7cmV0dXJuIlsiK2coa3QpK0R0KyJdIn1jYXNlIHppLkRBVEFfRVhJU1Q6e3ZhciBQdD1WLmZpZWxkO3JldHVybiJbIitQdCsiXSJ9Y2FzZSB6aS5NRVRBX0NPTVBBUkU6e3ZhciAkdD1WLm9wZXJhdG9yLFp0PVYuZmllbGQ7cmV0dXJuIltbIitadCtUKGcoJHQpKSt4KG90KSsiXV0ifWNhc2UgemkuU1RBVEU6cmV0dXJuIG90O2Nhc2UgemkuSUQ6cmV0dXJuIiMiK290O2Nhc2UgemkuQ0xBU1M6cmV0dXJuIi4iK290O2Nhc2UgemkuUEFSRU5UOmNhc2UgemkuQ0hJTEQ6cmV0dXJuIE8oVi5wYXJlbnQsWSkrVCgiPiIpK08oVi5jaGlsZCxZKTtjYXNlIHppLkFOQ0VTVE9SOmNhc2UgemkuREVTQ0VOREFOVDpyZXR1cm4gTyhWLmFuY2VzdG9yLFkpKyIgIitPKFYuZGVzY2VuZGFudCxZKTtjYXNlIHppLkNPTVBPVU5EX1NQTElUOnt2YXIgWXQ9TyhWLmxlZnQsWSkscXQ9TyhWLnN1YmplY3QsWSksbmU9TyhWLnJpZ2h0LFkpO3JldHVybiBZdCsoWXQubGVuZ3RoPjA/IiAiOiIiKStxdCtuZX1jYXNlIHppLlRSVUU6cmV0dXJuIiJ9fSxPPWZ1bmN0aW9uKFYsWSl7cmV0dXJuIFYuY2hlY2tzLnJlZHVjZShmdW5jdGlvbihydCxvdCxodCl7cmV0dXJuIHJ0KyhZPT09ViYmaHQ9PT0wPyIkIjoiIikrTChvdCxZKX0sIiIpfSxQPSIiLCQ9MDskPHRoaXMubGVuZ3RoOyQrKyl7dmFyIHE9dGhpc1skXTtQKz1PKHEscS5zdWJqZWN0KSx0aGlzLmxlbmd0aD4xJiYkPHRoaXMubGVuZ3RoLTEmJihQKz0iLCAiKX1yZXR1cm4gdGhpcy50b1N0cmluZ0NhY2hlPVAsUH0sS1o9e3BhcnNlOldaLHRvU3RyaW5nOllafSxzQj1mdW5jdGlvbihnLHgsVCl7dmFyIEwsTz1tdChnKSxQPVgoZyksJD1tdChUKSxxLFMsVj0hMSxZPSExLHJ0PSExO3N3aXRjaCh4LmluZGV4T2YoIiEiKT49MCYmKHg9eC5yZXBsYWNlKCIhIiwiIiksWT0hMCkseC5pbmRleE9mKCJAIik+PTAmJih4PXgucmVwbGFjZSgiQCIsIiIpLFY9ITApLChPfHwkfHxWKSYmKHE9IU8mJiFQPyIiOiIiK2csUz0iIitUKSxWJiYoZz1xPXEudG9Mb3dlckNhc2UoKSxUPVM9Uy50b0xvd2VyQ2FzZSgpKSx4KXtjYXNlIio9IjpMPXEuaW5kZXhPZihTKT49MDticmVhaztjYXNlIiQ9IjpMPXEuaW5kZXhPZihTLHEubGVuZ3RoLVMubGVuZ3RoKT49MDticmVhaztjYXNlIl49IjpMPXEuaW5kZXhPZihTKT09PTA7YnJlYWs7Y2FzZSI9IjpMPWc9PT1UO2JyZWFrO2Nhc2UiPiI6cnQ9ITAsTD1nPlQ7YnJlYWs7Y2FzZSI+PSI6cnQ9ITAsTD1nPj1UO2JyZWFrO2Nhc2UiPCI6cnQ9ITAsTD1nPFQ7YnJlYWs7Y2FzZSI8PSI6cnQ9ITAsTD1nPD1UO2JyZWFrO2RlZmF1bHQ6TD0hMTticmVha31yZXR1cm4gWSYmKGchPW51bGx8fCFydCkmJihMPSFMKSxMfSxYWj1mdW5jdGlvbihnLHgpe3N3aXRjaCh4KXtjYXNlIj8iOnJldHVybiEhZztjYXNlIiEiOnJldHVybiFnO2Nhc2UiXiI6cmV0dXJuIGc9PT12b2lkIDB9fSxRWj1mdW5jdGlvbihnKXtyZXR1cm4gZyE9PXZvaWQgMH0scUw9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gZy5kYXRhKHgpfSxaWj1mdW5jdGlvbihnLHgpe3JldHVybiBnW3hdKCl9LFl1PVtdLEl1PWZ1bmN0aW9uKGcseCl7cmV0dXJuIGcuY2hlY2tzLmV2ZXJ5KGZ1bmN0aW9uKFQpe3JldHVybiBZdVtULnR5cGVdKFQseCl9KX07WXVbemkuR1JPVVBdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS52YWx1ZTtyZXR1cm4geD09PSIqInx8eD09PWcuZ3JvdXAoKX0sWXVbemkuU1RBVEVdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS52YWx1ZTtyZXR1cm4gSFooeCxnKX0sWXVbemkuSURdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS52YWx1ZTtyZXR1cm4gZy5pZCgpPT09eH0sWXVbemkuQ0xBU1NdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS52YWx1ZTtyZXR1cm4gZy5oYXNDbGFzcyh4KX0sWXVbemkuTUVUQV9DT01QQVJFXT1mdW5jdGlvbih5LGcpe3ZhciB4PXkuZmllbGQsVD15Lm9wZXJhdG9yLEw9eS52YWx1ZTtyZXR1cm4gc0IoWlooZyx4KSxULEwpfSxZdVt6aS5EQVRBX0NPTVBBUkVdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS5maWVsZCxUPXkub3BlcmF0b3IsTD15LnZhbHVlO3JldHVybiBzQihxTChnLHgpLFQsTCl9LFl1W3ppLkRBVEFfQk9PTF09ZnVuY3Rpb24oeSxnKXt2YXIgeD15LmZpZWxkLFQ9eS5vcGVyYXRvcjtyZXR1cm4gWFoocUwoZyx4KSxUKX0sWXVbemkuREFUQV9FWElTVF09ZnVuY3Rpb24oeSxnKXt2YXIgeD15LmZpZWxkO3JldHVybiB5Lm9wZXJhdG9yLFFaKHFMKGcseCkpfSxZdVt6aS5VTkRJUkVDVEVEX0VER0VdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS5ub2Rlc1swXSxUPXkubm9kZXNbMV0sTD1nLnNvdXJjZSgpLE89Zy50YXJnZXQoKTtyZXR1cm4gSXUoeCxMKSYmSXUoVCxPKXx8SXUoVCxMKSYmSXUoeCxPKX0sWXVbemkuTk9ERV9ORUlHSEJPUl09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gSXUoeS5ub2RlLGcpJiZnLm5laWdoYm9yaG9vZCgpLnNvbWUoZnVuY3Rpb24oeCl7cmV0dXJuIHguaXNOb2RlKCkmJkl1KHkubmVpZ2hib3IseCl9KX0sWXVbemkuRElSRUNURURfRURHRV09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gSXUoeS5zb3VyY2UsZy5zb3VyY2UoKSkmJkl1KHkudGFyZ2V0LGcudGFyZ2V0KCkpfSxZdVt6aS5OT0RFX1NPVVJDRV09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gSXUoeS5zb3VyY2UsZykmJmcub3V0Z29lcnMoKS5zb21lKGZ1bmN0aW9uKHgpe3JldHVybiB4LmlzTm9kZSgpJiZJdSh5LnRhcmdldCx4KX0pfSxZdVt6aS5OT0RFX1RBUkdFVF09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gSXUoeS50YXJnZXQsZykmJmcuaW5jb21lcnMoKS5zb21lKGZ1bmN0aW9uKHgpe3JldHVybiB4LmlzTm9kZSgpJiZJdSh5LnNvdXJjZSx4KX0pfSxZdVt6aS5DSElMRF09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gSXUoeS5jaGlsZCxnKSYmSXUoeS5wYXJlbnQsZy5wYXJlbnQoKSl9LFl1W3ppLlBBUkVOVF09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gSXUoeS5wYXJlbnQsZykmJmcuY2hpbGRyZW4oKS5zb21lKGZ1bmN0aW9uKHgpe3JldHVybiBJdSh5LmNoaWxkLHgpfSl9LFl1W3ppLkRFU0NFTkRBTlRdPWZ1bmN0aW9uKHksZyl7cmV0dXJuIEl1KHkuZGVzY2VuZGFudCxnKSYmZy5hbmNlc3RvcnMoKS5zb21lKGZ1bmN0aW9uKHgpe3JldHVybiBJdSh5LmFuY2VzdG9yLHgpfSl9LFl1W3ppLkFOQ0VTVE9SXT1mdW5jdGlvbih5LGcpe3JldHVybiBJdSh5LmFuY2VzdG9yLGcpJiZnLmRlc2NlbmRhbnRzKCkuc29tZShmdW5jdGlvbih4KXtyZXR1cm4gSXUoeS5kZXNjZW5kYW50LHgpfSl9LFl1W3ppLkNPTVBPVU5EX1NQTElUXT1mdW5jdGlvbih5LGcpe3JldHVybiBJdSh5LnN1YmplY3QsZykmJkl1KHkubGVmdCxnKSYmSXUoeS5yaWdodCxnKX0sWXVbemkuVFJVRV09ZnVuY3Rpb24oKXtyZXR1cm4hMH0sWXVbemkuQ09MTEVDVElPTl09ZnVuY3Rpb24oeSxnKXt2YXIgeD15LnZhbHVlO3JldHVybiB4LmhhcyhnKX0sWXVbemkuRklMVEVSXT1mdW5jdGlvbih5LGcpe3ZhciB4PXkudmFsdWU7cmV0dXJuIHgoZyl9O3ZhciBKWj1mdW5jdGlvbihnKXt2YXIgeD10aGlzO2lmKHgubGVuZ3RoPT09MSYmeFswXS5jaGVja3MubGVuZ3RoPT09MSYmeFswXS5jaGVja3NbMF0udHlwZT09PXppLklEKXJldHVybiBnLmdldEVsZW1lbnRCeUlkKHhbMF0uY2hlY2tzWzBdLnZhbHVlKS5jb2xsZWN0aW9uKCk7dmFyIFQ9ZnVuY3Rpb24oTyl7Zm9yKHZhciBQPTA7UDx4Lmxlbmd0aDtQKyspe3ZhciAkPXhbUF07aWYoSXUoJCxPKSlyZXR1cm4hMH1yZXR1cm4hMX07cmV0dXJuIHgudGV4dCgpPT1udWxsJiYoVD1mdW5jdGlvbigpe3JldHVybiEwfSksZy5maWx0ZXIoVCl9LHRKPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD10aGlzLFQ9MDtUPHgubGVuZ3RoO1QrKyl7dmFyIEw9eFtUXTtpZihJdShMLGcpKXJldHVybiEwfXJldHVybiExfSxlSj17bWF0Y2hlczp0SixmaWx0ZXI6Slp9LEVtPWZ1bmN0aW9uKGcpe3RoaXMuaW5wdXRUZXh0PWcsdGhpcy5jdXJyZW50U3ViamVjdD1udWxsLHRoaXMuY29tcG91bmRDb3VudD0wLHRoaXMuZWRnZUNvdW50PTAsdGhpcy5sZW5ndGg9MCxnPT1udWxsfHxtdChnKSYmZy5tYXRjaCgvXlxzKiQvKXx8KFR0KGcpP3RoaXMuYWRkUXVlcnkoe2NoZWNrczpbe3R5cGU6emkuQ09MTEVDVElPTix2YWx1ZTpnLmNvbGxlY3Rpb24oKX1dfSk6eXQoZyk/dGhpcy5hZGRRdWVyeSh7Y2hlY2tzOlt7dHlwZTp6aS5GSUxURVIsdmFsdWU6Z31dfSk6bXQoZyk/dGhpcy5wYXJzZShnKXx8KHRoaXMuaW52YWxpZD0hMCk6dmwoIkEgc2VsZWN0b3IgbXVzdCBiZSBjcmVhdGVkIGZyb20gYSBzdHJpbmc7IGZvdW5kICIpKX0scHc9RW0ucHJvdG90eXBlO1tLWixlSl0uZm9yRWFjaChmdW5jdGlvbih5KXtyZXR1cm4gZGUocHcseSl9KSxwdy50ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXRUZXh0fSxwdy5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxwdy5lcT1mdW5jdGlvbih5KXtyZXR1cm4gdGhpc1t5XX0scHcuc2FtZVRleHQ9ZnVuY3Rpb24oeSl7cmV0dXJuIXRoaXMuaW52YWxpZCYmIXkuaW52YWxpZCYmdGhpcy50ZXh0KCk9PT15LnRleHQoKX0scHcuYWRkUXVlcnk9ZnVuY3Rpb24oeSl7dGhpc1t0aGlzLmxlbmd0aCsrXT15fSxwdy5zZWxlY3Rvcj1wdy50b1N0cmluZzt2YXIgeHA9e2FsbEFyZTpmdW5jdGlvbihnKXt2YXIgeD1uZXcgRW0oZyk7cmV0dXJuIHRoaXMuZXZlcnkoZnVuY3Rpb24oVCl7cmV0dXJuIHgubWF0Y2hlcyhUKX0pfSxpczpmdW5jdGlvbihnKXt2YXIgeD1uZXcgRW0oZyk7cmV0dXJuIHRoaXMuc29tZShmdW5jdGlvbihUKXtyZXR1cm4geC5tYXRjaGVzKFQpfSl9LHNvbWU6ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIEw9eD9nLmFwcGx5KHgsW3RoaXNbVF0sVCx0aGlzXSk6Zyh0aGlzW1RdLFQsdGhpcyk7aWYoTClyZXR1cm4hMH1yZXR1cm4hMX0sZXZlcnk6ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIEw9eD9nLmFwcGx5KHgsW3RoaXNbVF0sVCx0aGlzXSk6Zyh0aGlzW1RdLFQsdGhpcyk7aWYoIUwpcmV0dXJuITF9cmV0dXJuITB9LHNhbWU6ZnVuY3Rpb24oZyl7aWYodGhpcz09PWcpcmV0dXJuITA7Zz10aGlzLmN5KCkuY29sbGVjdGlvbihnKTt2YXIgeD10aGlzLmxlbmd0aCxUPWcubGVuZ3RoO3JldHVybiB4IT09VD8hMTp4PT09MT90aGlzWzBdPT09Z1swXTp0aGlzLmV2ZXJ5KGZ1bmN0aW9uKEwpe3JldHVybiBnLmhhc0VsZW1lbnRXaXRoSWQoTC5pZCgpKX0pfSxhbnlTYW1lOmZ1bmN0aW9uKGcpe3JldHVybiBnPXRoaXMuY3koKS5jb2xsZWN0aW9uKGcpLHRoaXMuc29tZShmdW5jdGlvbih4KXtyZXR1cm4gZy5oYXNFbGVtZW50V2l0aElkKHguaWQoKSl9KX0sYWxsQXJlTmVpZ2hib3JzOmZ1bmN0aW9uKGcpe2c9dGhpcy5jeSgpLmNvbGxlY3Rpb24oZyk7dmFyIHg9dGhpcy5uZWlnaGJvcmhvb2QoKTtyZXR1cm4gZy5ldmVyeShmdW5jdGlvbihUKXtyZXR1cm4geC5oYXNFbGVtZW50V2l0aElkKFQuaWQoKSl9KX0sY29udGFpbnM6ZnVuY3Rpb24oZyl7Zz10aGlzLmN5KCkuY29sbGVjdGlvbihnKTt2YXIgeD10aGlzO3JldHVybiBnLmV2ZXJ5KGZ1bmN0aW9uKFQpe3JldHVybiB4Lmhhc0VsZW1lbnRXaXRoSWQoVC5pZCgpKX0pfX07eHAuYWxsQXJlTmVpZ2hib3Vycz14cC5hbGxBcmVOZWlnaGJvcnMseHAuaGFzPXhwLmNvbnRhaW5zLHhwLmVxdWFsPXhwLmVxdWFscz14cC5zYW1lO3ZhciBhZD1mdW5jdGlvbihnLHgpe3JldHVybiBmdW5jdGlvbihMLE8sUCwkKXt2YXIgcT1MLFM9dGhpcyxWO2lmKHE9PW51bGw/Vj0iIjpUdChxKSYmcS5sZW5ndGg9PT0xJiYoVj1xLmlkKCkpLFMubGVuZ3RoPT09MSYmVil7dmFyIFk9U1swXS5fcHJpdmF0ZSxydD1ZLnRyYXZlcnNhbENhY2hlPVkudHJhdmVyc2FsQ2FjaGV8fHt9LG90PXJ0W3hdPXJ0W3hdfHxbXSxodD1yZChWKSxkdD1vdFtodF07cmV0dXJuIGR0fHwob3RbaHRdPWcuY2FsbChTLEwsTyxQLCQpKX1lbHNlIHJldHVybiBnLmNhbGwoUyxMLE8sUCwkKX19LGF4PXtwYXJlbnQ6ZnVuY3Rpb24oZyl7dmFyIHg9W107aWYodGhpcy5sZW5ndGg9PT0xKXt2YXIgVD10aGlzWzBdLl9wcml2YXRlLnBhcmVudDtpZihUKXJldHVybiBUfWZvcih2YXIgTD0wO0w8dGhpcy5sZW5ndGg7TCsrKXt2YXIgTz10aGlzW0xdLFA9Ty5fcHJpdmF0ZS5wYXJlbnQ7UCYmeC5wdXNoKFApfXJldHVybiB0aGlzLnNwYXduKHgsITApLmZpbHRlcihnKX0scGFyZW50czpmdW5jdGlvbihnKXtmb3IodmFyIHg9W10sVD10aGlzLnBhcmVudCgpO1Qubm9uZW1wdHkoKTspe2Zvcih2YXIgTD0wO0w8VC5sZW5ndGg7TCsrKXt2YXIgTz1UW0xdO3gucHVzaChPKX1UPVQucGFyZW50KCl9cmV0dXJuIHRoaXMuc3Bhd24oeCwhMCkuZmlsdGVyKGcpfSxjb21tb25BbmNlc3RvcnM6ZnVuY3Rpb24oZyl7Zm9yKHZhciB4LFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIEw9dGhpc1tUXSxPPUwucGFyZW50cygpO3g9eHx8Tyx4PXguaW50ZXJzZWN0KE8pfXJldHVybiB4LmZpbHRlcihnKX0sb3JwaGFuczpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIHguaXNPcnBoYW4oKX0pLmZpbHRlcihnKX0sbm9ub3JwaGFuczpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIHguaXNDaGlsZCgpfSkuZmlsdGVyKGcpfSxjaGlsZHJlbjphZChmdW5jdGlvbih5KXtmb3IodmFyIGc9W10seD0wO3g8dGhpcy5sZW5ndGg7eCsrKWZvcih2YXIgVD10aGlzW3hdLEw9VC5fcHJpdmF0ZS5jaGlsZHJlbixPPTA7TzxMLmxlbmd0aDtPKyspZy5wdXNoKExbT10pO3JldHVybiB0aGlzLnNwYXduKGcsITApLmZpbHRlcih5KX0sImNoaWxkcmVuIiksc2libGluZ3M6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucGFyZW50KCkuY2hpbGRyZW4oKS5ub3QodGhpcykuZmlsdGVyKGcpfSxpc1BhcmVudDpmdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZylyZXR1cm4gZy5pc05vZGUoKSYmZy5fcHJpdmF0ZS5jaGlsZHJlbi5sZW5ndGghPT0wfSxpc0NoaWxkbGVzczpmdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZylyZXR1cm4gZy5pc05vZGUoKSYmZy5fcHJpdmF0ZS5jaGlsZHJlbi5sZW5ndGg9PT0wfSxpc0NoaWxkOmZ1bmN0aW9uKCl7dmFyIGc9dGhpc1swXTtpZihnKXJldHVybiBnLmlzTm9kZSgpJiZnLl9wcml2YXRlLnBhcmVudCE9bnVsbH0saXNPcnBoYW46ZnVuY3Rpb24oKXt2YXIgZz10aGlzWzBdO2lmKGcpcmV0dXJuIGcuaXNOb2RlKCkmJmcuX3ByaXZhdGUucGFyZW50PT1udWxsfSxkZXNjZW5kYW50czpmdW5jdGlvbihnKXt2YXIgeD1bXTtmdW5jdGlvbiBUKEwpe2Zvcih2YXIgTz0wO088TC5sZW5ndGg7TysrKXt2YXIgUD1MW09dO3gucHVzaChQKSxQLmNoaWxkcmVuKCkubm9uZW1wdHkoKSYmVChQLmNoaWxkcmVuKCkpfX1yZXR1cm4gVCh0aGlzLmNoaWxkcmVuKCkpLHRoaXMuc3Bhd24oeCwhMCkuZmlsdGVyKGcpfX07ZnVuY3Rpb24gWlQoeSxnLHgsVCl7Zm9yKHZhciBMPVtdLE89bmV3IFk1LFA9eS5jeSgpLCQ9UC5oYXNDb21wb3VuZE5vZGVzKCkscT0wO3E8eS5sZW5ndGg7cSsrKXt2YXIgUz15W3FdO3g/TC5wdXNoKFMpOiQmJlQoTCxPLFMpfWZvcig7TC5sZW5ndGg+MDspe3ZhciBWPUwuc2hpZnQoKTtnKFYpLE8uYWRkKFYuaWQoKSksJCYmVChMLE8sVil9cmV0dXJuIHl9ZnVuY3Rpb24gSWsoeSxnLHgpe2lmKHguaXNQYXJlbnQoKSlmb3IodmFyIFQ9eC5fcHJpdmF0ZS5jaGlsZHJlbixMPTA7TDxULmxlbmd0aDtMKyspe3ZhciBPPVRbTF07Zy5oYXMoTy5pZCgpKXx8eS5wdXNoKE8pfX1heC5mb3JFYWNoRG93bj1mdW5jdGlvbih5KXt2YXIgZz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIFpUKHRoaXMseSxnLElrKX07ZnVuY3Rpb24gYUIoeSxnLHgpe2lmKHguaXNDaGlsZCgpKXt2YXIgVD14Ll9wcml2YXRlLnBhcmVudDtnLmhhcyhULmlkKCkpfHx5LnB1c2goVCl9fWF4LmZvckVhY2hVcD1mdW5jdGlvbih5KXt2YXIgZz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIFpUKHRoaXMseSxnLGFCKX07ZnVuY3Rpb24gbkooeSxnLHgpe2FCKHksZyx4KSxJayh5LGcseCl9YXguZm9yRWFjaFVwQW5kRG93bj1mdW5jdGlvbih5KXt2YXIgZz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIFpUKHRoaXMseSxnLG5KKX0sYXguYW5jZXN0b3JzPWF4LnBhcmVudHM7dmFyIE9rLG9CO09rPW9CPXtkYXRhOkFjLmRhdGEoe2ZpZWxkOiJkYXRhIixiaW5kaW5nRXZlbnQ6ImRhdGEiLGFsbG93QmluZGluZzohMCxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ0V2ZW50OiJkYXRhIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIixhbGxvd0dldHRpbmc6ITAsaW1tdXRhYmxlS2V5czp7aWQ6ITAsc291cmNlOiEwLHRhcmdldDohMCxwYXJlbnQ6ITB9LHVwZGF0ZVN0eWxlOiEwfSkscmVtb3ZlRGF0YTpBYy5yZW1vdmVEYXRhKHtmaWVsZDoiZGF0YSIsZXZlbnQ6ImRhdGEiLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLHRyaWdnZXJFdmVudDohMCxpbW11dGFibGVLZXlzOntpZDohMCxzb3VyY2U6ITAsdGFyZ2V0OiEwLHBhcmVudDohMH0sdXBkYXRlU3R5bGU6ITB9KSxzY3JhdGNoOkFjLmRhdGEoe2ZpZWxkOiJzY3JhdGNoIixiaW5kaW5nRXZlbnQ6InNjcmF0Y2giLGFsbG93QmluZGluZzohMCxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ0V2ZW50OiJzY3JhdGNoIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIixhbGxvd0dldHRpbmc6ITAsdXBkYXRlU3R5bGU6ITB9KSxyZW1vdmVTY3JhdGNoOkFjLnJlbW92ZURhdGEoe2ZpZWxkOiJzY3JhdGNoIixldmVudDoic2NyYXRjaCIsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsdHJpZ2dlckV2ZW50OiEwLHVwZGF0ZVN0eWxlOiEwfSkscnNjcmF0Y2g6QWMuZGF0YSh7ZmllbGQ6InJzY3JhdGNoIixhbGxvd0JpbmRpbmc6ITEsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiExLGFsbG93R2V0dGluZzohMH0pLHJlbW92ZVJzY3JhdGNoOkFjLnJlbW92ZURhdGEoe2ZpZWxkOiJyc2NyYXRjaCIsdHJpZ2dlckV2ZW50OiExfSksaWQ6ZnVuY3Rpb24oKXt2YXIgZz10aGlzWzBdO2lmKGcpcmV0dXJuIGcuX3ByaXZhdGUuZGF0YS5pZH19LE9rLmF0dHI9T2suZGF0YSxPay5yZW1vdmVBdHRyPU9rLnJlbW92ZURhdGE7dmFyIHJKPW9CLEpUPXt9O2Z1bmN0aW9uIG94KHkpe3JldHVybiBmdW5jdGlvbihnKXt2YXIgeD10aGlzO2lmKGc9PT12b2lkIDAmJihnPSEwKSx4Lmxlbmd0aCE9PTApaWYoeC5pc05vZGUoKSYmIXgucmVtb3ZlZCgpKXtmb3IodmFyIFQ9MCxMPXhbMF0sTz1MLl9wcml2YXRlLmVkZ2VzLFA9MDtQPE8ubGVuZ3RoO1ArKyl7dmFyICQ9T1tQXTshZyYmJC5pc0xvb3AoKXx8KFQrPXkoTCwkKSl9cmV0dXJuIFR9ZWxzZSByZXR1cm59fWRlKEpULHtkZWdyZWU6b3goZnVuY3Rpb24oeSxnKXtyZXR1cm4gZy5zb3VyY2UoKS5zYW1lKGcudGFyZ2V0KCkpPzI6MX0pLGluZGVncmVlOm94KGZ1bmN0aW9uKHksZyl7cmV0dXJuIGcudGFyZ2V0KCkuc2FtZSh5KT8xOjB9KSxvdXRkZWdyZWU6b3goZnVuY3Rpb24oeSxnKXtyZXR1cm4gZy5zb3VyY2UoKS5zYW1lKHkpPzE6MH0pfSk7ZnVuY3Rpb24gY3goeSxnKXtyZXR1cm4gZnVuY3Rpb24oeCl7Zm9yKHZhciBULEw9dGhpcy5ub2RlcygpLE89MDtPPEwubGVuZ3RoO08rKyl7dmFyIFA9TFtPXSwkPVBbeV0oeCk7JCE9PXZvaWQgMCYmKFQ9PT12b2lkIDB8fGcoJCxUKSkmJihUPSQpfXJldHVybiBUfX1kZShKVCx7bWluRGVncmVlOmN4KCJkZWdyZWUiLGZ1bmN0aW9uKHksZyl7cmV0dXJuIHk8Z30pLG1heERlZ3JlZTpjeCgiZGVncmVlIixmdW5jdGlvbih5LGcpe3JldHVybiB5Pmd9KSxtaW5JbmRlZ3JlZTpjeCgiaW5kZWdyZWUiLGZ1bmN0aW9uKHksZyl7cmV0dXJuIHk8Z30pLG1heEluZGVncmVlOmN4KCJpbmRlZ3JlZSIsZnVuY3Rpb24oeSxnKXtyZXR1cm4geT5nfSksbWluT3V0ZGVncmVlOmN4KCJvdXRkZWdyZWUiLGZ1bmN0aW9uKHksZyl7cmV0dXJuIHk8Z30pLG1heE91dGRlZ3JlZTpjeCgib3V0ZGVncmVlIixmdW5jdGlvbih5LGcpe3JldHVybiB5Pmd9KX0pLGRlKEpULHt0b3RhbERlZ3JlZTpmdW5jdGlvbihnKXtmb3IodmFyIHg9MCxUPXRoaXMubm9kZXMoKSxMPTA7TDxULmxlbmd0aDtMKyspeCs9VFtMXS5kZWdyZWUoZyk7cmV0dXJuIHh9fSk7dmFyIGtwLGNCLFBrPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEw9MDtMPGcubGVuZ3RoO0wrKyl7dmFyIE89Z1tMXTtpZighTy5sb2NrZWQoKSl7dmFyIFA9Ty5fcHJpdmF0ZS5wb3NpdGlvbiwkPXt4OngueCE9bnVsbD94LngtUC54OjAseTp4LnkhPW51bGw/eC55LVAueTowfTtPLmlzUGFyZW50KCkmJiEoJC54PT09MCYmJC55PT09MCkmJk8uY2hpbGRyZW4oKS5zaGlmdCgkLFQpLE8uZGlydHlCb3VuZGluZ0JveENhY2hlKCl9fX0sdUI9e2ZpZWxkOiJwb3NpdGlvbiIsYmluZGluZ0V2ZW50OiJwb3NpdGlvbiIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InBvc2l0aW9uIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJlbWl0QW5kTm90aWZ5IixhbGxvd0dldHRpbmc6ITAsdmFsaWRLZXlzOlsieCIsInkiXSxiZWZvcmVHZXQ6ZnVuY3Rpb24oZyl7Zy51cGRhdGVDb21wb3VuZEJvdW5kcygpfSxiZWZvcmVTZXQ6ZnVuY3Rpb24oZyx4KXtQayhnLHgsITEpfSxvblNldDpmdW5jdGlvbihnKXtnLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpfSxjYW5TZXQ6ZnVuY3Rpb24oZyl7cmV0dXJuIWcubG9ja2VkKCl9fTtrcD1jQj17cG9zaXRpb246QWMuZGF0YSh1Qiksc2lsZW50UG9zaXRpb246QWMuZGF0YShkZSh7fSx1Qix7YWxsb3dCaW5kaW5nOiExLGFsbG93U2V0dGluZzohMCxzZXR0aW5nVHJpZ2dlcnNFdmVudDohMSxhbGxvd0dldHRpbmc6ITEsYmVmb3JlU2V0OmZ1bmN0aW9uKGcseCl7UGsoZyx4LCEwKX0sb25TZXQ6ZnVuY3Rpb24oZyl7Zy5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKX19KSkscG9zaXRpb25zOmZ1bmN0aW9uKGcseCl7aWYodXQoZykpeD90aGlzLnNpbGVudFBvc2l0aW9uKGcpOnRoaXMucG9zaXRpb24oZyk7ZWxzZSBpZih5dChnKSl7dmFyIFQ9ZyxMPXRoaXMuY3koKTtMLnN0YXJ0QmF0Y2goKTtmb3IodmFyIE89MDtPPHRoaXMubGVuZ3RoO08rKyl7dmFyIFA9dGhpc1tPXSwkPXZvaWQgMDsoJD1UKFAsTykpJiYoeD9QLnNpbGVudFBvc2l0aW9uKCQpOlAucG9zaXRpb24oJCkpfUwuZW5kQmF0Y2goKX1yZXR1cm4gdGhpc30sc2lsZW50UG9zaXRpb25zOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnBvc2l0aW9ucyhnLCEwKX0sc2hpZnQ6ZnVuY3Rpb24oZyx4LFQpe3ZhciBMO2lmKHV0KGcpPyhMPXt4OlgoZy54KT9nLng6MCx5OlgoZy55KT9nLnk6MH0sVD14KTptdChnKSYmWCh4KSYmKEw9e3g6MCx5OjB9LExbZ109eCksTCE9bnVsbCl7dmFyIE89dGhpcy5jeSgpO08uc3RhcnRCYXRjaCgpO2Zvcih2YXIgUD0wO1A8dGhpcy5sZW5ndGg7UCsrKXt2YXIgJD10aGlzW1BdO2lmKCEoTy5oYXNDb21wb3VuZE5vZGVzKCkmJiQuaXNDaGlsZCgpJiYkLmFuY2VzdG9ycygpLmFueVNhbWUodGhpcykpKXt2YXIgcT0kLnBvc2l0aW9uKCksUz17eDpxLngrTC54LHk6cS55K0wueX07VD8kLnNpbGVudFBvc2l0aW9uKFMpOiQucG9zaXRpb24oUyl9fU8uZW5kQmF0Y2goKX1yZXR1cm4gdGhpc30sc2lsZW50U2hpZnQ6ZnVuY3Rpb24oZyx4KXtyZXR1cm4gdXQoZyk/dGhpcy5zaGlmdChnLCEwKTptdChnKSYmWCh4KSYmdGhpcy5zaGlmdChnLHgsITApLHRoaXN9LHJlbmRlcmVkUG9zaXRpb246ZnVuY3Rpb24oZyx4KXt2YXIgVD10aGlzWzBdLEw9dGhpcy5jeSgpLE89TC56b29tKCksUD1MLnBhbigpLCQ9dXQoZyk/Zzp2b2lkIDAscT0kIT09dm9pZCAwfHx4IT09dm9pZCAwJiZtdChnKTtpZihUJiZULmlzTm9kZSgpKWlmKHEpZm9yKHZhciBTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciBWPXRoaXNbU107eCE9PXZvaWQgMD9WLnBvc2l0aW9uKGcsKHgtUFtnXSkvTyk6JCE9PXZvaWQgMCYmVi5wb3NpdGlvbihjTigkLE8sUCkpfWVsc2V7dmFyIFk9VC5wb3NpdGlvbigpO3JldHVybiAkPU5UKFksTyxQKSxnPT09dm9pZCAwPyQ6JFtnXX1lbHNlIGlmKCFxKXJldHVybjtyZXR1cm4gdGhpc30scmVsYXRpdmVQb3NpdGlvbjpmdW5jdGlvbihnLHgpe3ZhciBUPXRoaXNbMF0sTD10aGlzLmN5KCksTz11dChnKT9nOnZvaWQgMCxQPU8hPT12b2lkIDB8fHghPT12b2lkIDAmJm10KGcpLCQ9TC5oYXNDb21wb3VuZE5vZGVzKCk7aWYoVCYmVC5pc05vZGUoKSlpZihQKWZvcih2YXIgcT0wO3E8dGhpcy5sZW5ndGg7cSsrKXt2YXIgUz10aGlzW3FdLFY9JD9TLnBhcmVudCgpOm51bGwsWT1WJiZWLmxlbmd0aD4wLHJ0PVk7WSYmKFY9VlswXSk7dmFyIG90PXJ0P1YucG9zaXRpb24oKTp7eDowLHk6MH07eCE9PXZvaWQgMD9TLnBvc2l0aW9uKGcseCtvdFtnXSk6TyE9PXZvaWQgMCYmUy5wb3NpdGlvbih7eDpPLngrb3QueCx5Ok8ueStvdC55fSl9ZWxzZXt2YXIgaHQ9VC5wb3NpdGlvbigpLGR0PSQ/VC5wYXJlbnQoKTpudWxsLEx0PWR0JiZkdC5sZW5ndGg+MCxrdD1MdDtMdCYmKGR0PWR0WzBdKTt2YXIgRHQ9a3Q/ZHQucG9zaXRpb24oKTp7eDowLHk6MH07cmV0dXJuIE89e3g6aHQueC1EdC54LHk6aHQueS1EdC55fSxnPT09dm9pZCAwP086T1tnXX1lbHNlIGlmKCFQKXJldHVybjtyZXR1cm4gdGhpc319LGtwLm1vZGVsUG9zaXRpb249a3AucG9pbnQ9a3AucG9zaXRpb24sa3AubW9kZWxQb3NpdGlvbnM9a3AucG9pbnRzPWtwLnBvc2l0aW9ucyxrcC5yZW5kZXJlZFBvaW50PWtwLnJlbmRlcmVkUG9zaXRpb24sa3AucmVsYXRpdmVQb2ludD1rcC5yZWxhdGl2ZVBvc2l0aW9uO3ZhciBsQj1jQix1eCxVYjt1eD1VYj17fSxVYi5yZW5kZXJlZEJvdW5kaW5nQm94PWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMuYm91bmRpbmdCb3goeSkseD10aGlzLmN5KCksVD14Lnpvb20oKSxMPXgucGFuKCksTz1nLngxKlQrTC54LFA9Zy54MipUK0wueCwkPWcueTEqVCtMLnkscT1nLnkyKlQrTC55O3JldHVybnt4MTpPLHgyOlAseTE6JCx5MjpxLHc6UC1PLGg6cS0kfX0sVWIuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlPWZ1bmN0aW9uKCl7dmFyIHk9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiExLGc9dGhpcy5jeSgpO3JldHVybiFnLnN0eWxlRW5hYmxlZCgpfHwhZy5oYXNDb21wb3VuZE5vZGVzKCk/dGhpczoodGhpcy5mb3JFYWNoVXAoZnVuY3Rpb24oeCl7aWYoeC5pc1BhcmVudCgpKXt2YXIgVD14Ll9wcml2YXRlO1QuY29tcG91bmRCb3VuZHNDbGVhbj0hMSxULmJiQ2FjaGU9bnVsbCx5fHx4LmVtaXRBbmROb3RpZnkoImJvdW5kcyIpfX0pLHRoaXMpfSxVYi51cGRhdGVDb21wb3VuZEJvdW5kcz1mdW5jdGlvbigpe3ZhciB5PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMSxnPXRoaXMuY3koKTtpZighZy5zdHlsZUVuYWJsZWQoKXx8IWcuaGFzQ29tcG91bmROb2RlcygpKXJldHVybiB0aGlzO2lmKCF5JiZnLmJhdGNoaW5nKCkpcmV0dXJuIHRoaXM7ZnVuY3Rpb24geChQKXtpZighUC5pc1BhcmVudCgpKXJldHVybjt2YXIgJD1QLl9wcml2YXRlLHE9UC5jaGlsZHJlbigpLFM9UC5wc3R5bGUoImNvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzIikudmFsdWU9PT0iaW5jbHVkZSIsVj17d2lkdGg6e3ZhbDpQLnBzdHlsZSgibWluLXdpZHRoIikucGZWYWx1ZSxsZWZ0OlAucHN0eWxlKCJtaW4td2lkdGgtYmlhcy1sZWZ0IikscmlnaHQ6UC5wc3R5bGUoIm1pbi13aWR0aC1iaWFzLXJpZ2h0Iil9LGhlaWdodDp7dmFsOlAucHN0eWxlKCJtaW4taGVpZ2h0IikucGZWYWx1ZSx0b3A6UC5wc3R5bGUoIm1pbi1oZWlnaHQtYmlhcy10b3AiKSxib3R0b206UC5wc3R5bGUoIm1pbi1oZWlnaHQtYmlhcy1ib3R0b20iKX19LFk9cS5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczpTLGluY2x1ZGVPdmVybGF5czohMSx1c2VDYWNoZTohMX0pLHJ0PSQucG9zaXRpb247KFkudz09PTB8fFkuaD09PTApJiYoWT17dzpQLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGg6UC5wc3R5bGUoImhlaWdodCIpLnBmVmFsdWV9LFkueDE9cnQueC1ZLncvMixZLngyPXJ0LngrWS53LzIsWS55MT1ydC55LVkuaC8yLFkueTI9cnQueStZLmgvMik7ZnVuY3Rpb24gb3QoR3QsZ2UsYmUpe3ZhciBpZT0wLEZlPTAsd2U9Z2UrYmU7cmV0dXJuIEd0PjAmJndlPjAmJihpZT1nZS93ZSpHdCxGZT1iZS93ZSpHdCkse2JpYXNEaWZmOmllLGJpYXNDb21wbGVtZW50RGlmZjpGZX19ZnVuY3Rpb24gaHQoR3QsZ2UsYmUsaWUpe2lmKGJlLnVuaXRzPT09IiUiKXN3aXRjaChpZSl7Y2FzZSJ3aWR0aCI6cmV0dXJuIEd0PjA/YmUucGZWYWx1ZSpHdDowO2Nhc2UiaGVpZ2h0IjpyZXR1cm4gZ2U+MD9iZS5wZlZhbHVlKmdlOjA7Y2FzZSJhdmVyYWdlIjpyZXR1cm4gR3Q+MCYmZ2U+MD9iZS5wZlZhbHVlKihHdCtnZSkvMjowO2Nhc2UibWluIjpyZXR1cm4gR3Q+MCYmZ2U+MD9HdD5nZT9iZS5wZlZhbHVlKmdlOmJlLnBmVmFsdWUqR3Q6MDtjYXNlIm1heCI6cmV0dXJuIEd0PjAmJmdlPjA/R3Q+Z2U/YmUucGZWYWx1ZSpHdDpiZS5wZlZhbHVlKmdlOjA7ZGVmYXVsdDpyZXR1cm4gMH1lbHNlIHJldHVybiBiZS51bml0cz09PSJweCI/YmUucGZWYWx1ZTowfXZhciBkdD1WLndpZHRoLmxlZnQudmFsdWU7Vi53aWR0aC5sZWZ0LnVuaXRzPT09InB4IiYmVi53aWR0aC52YWw+MCYmKGR0PWR0KjEwMC9WLndpZHRoLnZhbCk7dmFyIEx0PVYud2lkdGgucmlnaHQudmFsdWU7Vi53aWR0aC5yaWdodC51bml0cz09PSJweCImJlYud2lkdGgudmFsPjAmJihMdD1MdCoxMDAvVi53aWR0aC52YWwpO3ZhciBrdD1WLmhlaWdodC50b3AudmFsdWU7Vi5oZWlnaHQudG9wLnVuaXRzPT09InB4IiYmVi5oZWlnaHQudmFsPjAmJihrdD1rdCoxMDAvVi5oZWlnaHQudmFsKTt2YXIgRHQ9Vi5oZWlnaHQuYm90dG9tLnZhbHVlO1YuaGVpZ2h0LmJvdHRvbS51bml0cz09PSJweCImJlYuaGVpZ2h0LnZhbD4wJiYoRHQ9RHQqMTAwL1YuaGVpZ2h0LnZhbCk7dmFyIFB0PW90KFYud2lkdGgudmFsLVkudyxkdCxMdCksJHQ9UHQuYmlhc0RpZmYsWnQ9UHQuYmlhc0NvbXBsZW1lbnREaWZmLFl0PW90KFYuaGVpZ2h0LnZhbC1ZLmgsa3QsRHQpLHF0PVl0LmJpYXNEaWZmLG5lPVl0LmJpYXNDb21wbGVtZW50RGlmZjskLmF1dG9QYWRkaW5nPWh0KFkudyxZLmgsUC5wc3R5bGUoInBhZGRpbmciKSxQLnBzdHlsZSgicGFkZGluZy1yZWxhdGl2ZS10byIpLnZhbHVlKSwkLmF1dG9XaWR0aD1NYXRoLm1heChZLncsVi53aWR0aC52YWwpLHJ0Lng9KC0kdCtZLngxK1kueDIrWnQpLzIsJC5hdXRvSGVpZ2h0PU1hdGgubWF4KFkuaCxWLmhlaWdodC52YWwpLHJ0Lnk9KC1xdCtZLnkxK1kueTIrbmUpLzJ9Zm9yKHZhciBUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBMPXRoaXNbVF0sTz1MLl9wcml2YXRlOyghTy5jb21wb3VuZEJvdW5kc0NsZWFufHx5KSYmKHgoTCksZy5iYXRjaGluZygpfHwoTy5jb21wb3VuZEJvdW5kc0NsZWFuPSEwKSl9cmV0dXJuIHRoaXN9O3ZhciBNMD1mdW5jdGlvbihnKXtyZXR1cm4gZz09PTEvMHx8Zz09PS0xLzA/MDpnfSxFcD1mdW5jdGlvbihnLHgsVCxMLE8pe0wteD09PTB8fE8tVD09PTB8fHg9PW51bGx8fFQ9PW51bGx8fEw9PW51bGx8fE89PW51bGx8fChnLngxPXg8Zy54MT94OmcueDEsZy54Mj1MPmcueDI/TDpnLngyLGcueTE9VDxnLnkxP1Q6Zy55MSxnLnkyPU8+Zy55Mj9POmcueTIsZy53PWcueDItZy54MSxnLmg9Zy55Mi1nLnkxKX0sTDM9ZnVuY3Rpb24oZyx4KXtyZXR1cm4geD09bnVsbD9nOkVwKGcseC54MSx4LnkxLHgueDIseC55Mil9LEZrPWZ1bmN0aW9uKGcseCxUKXtyZXR1cm4geXAoZyx4LFQpfSx0Qz1mdW5jdGlvbihnLHgsVCl7aWYoIXguY3koKS5oZWFkbGVzcygpKXt2YXIgTD14Ll9wcml2YXRlLE89TC5yc3R5bGUsUD1PLmFycm93V2lkdGgvMiwkPXgucHN0eWxlKFQrIi1hcnJvdy1zaGFwZSIpLnZhbHVlLHEsUztpZigkIT09Im5vbmUiKXtUPT09InNvdXJjZSI/KHE9Ty5zcmNYLFM9Ty5zcmNZKTpUPT09InRhcmdldCI/KHE9Ty50Z3RYLFM9Ty50Z3RZKToocT1PLm1pZFgsUz1PLm1pZFkpO3ZhciBWPUwuYXJyb3dCb3VuZHM9TC5hcnJvd0JvdW5kc3x8e30sWT1WW1RdPVZbVF18fHt9O1kueDE9cS1QLFkueTE9Uy1QLFkueDI9cStQLFkueTI9UytQLFkudz1ZLngyLVkueDEsWS5oPVkueTItWS55MSxSVChZLDEpLEVwKGcsWS54MSxZLnkxLFkueDIsWS55Mil9fX0saEI9ZnVuY3Rpb24oZyx4LFQpe2lmKCF4LmN5KCkuaGVhZGxlc3MoKSl7dmFyIEw7VD9MPVQrIi0iOkw9IiI7dmFyIE89eC5fcHJpdmF0ZSxQPU8ucnN0eWxlLCQ9eC5wc3R5bGUoTCsibGFiZWwiKS5zdHJWYWx1ZTtpZigkKXt2YXIgcT14LnBzdHlsZSgidGV4dC1oYWxpZ24iKSxTPXgucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLFY9RmsoUCwibGFiZWxXaWR0aCIsVCksWT1GayhQLCJsYWJlbEhlaWdodCIsVCkscnQ9RmsoUCwibGFiZWxYIixUKSxvdD1GayhQLCJsYWJlbFkiLFQpLGh0PXgucHN0eWxlKEwrInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLGR0PXgucHN0eWxlKEwrInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlLEx0PXguaXNFZGdlKCksa3Q9eC5wc3R5bGUoTCsidGV4dC1yb3RhdGlvbiIpLER0PXgucHN0eWxlKCJ0ZXh0LW91dGxpbmUtd2lkdGgiKS5wZlZhbHVlLFB0PXgucHN0eWxlKCJ0ZXh0LWJvcmRlci13aWR0aCIpLnBmVmFsdWUsJHQ9UHQvMixadD14LnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmciKS5wZlZhbHVlLFl0PTIscXQ9WSxuZT1WLEd0PW5lLzIsZ2U9cXQvMixiZSxpZSxGZSx3ZTtpZihMdCliZT1ydC1HdCxpZT1ydCtHdCxGZT1vdC1nZSx3ZT1vdCtnZTtlbHNle3N3aXRjaChxLnZhbHVlKXtjYXNlImxlZnQiOmJlPXJ0LW5lLGllPXJ0O2JyZWFrO2Nhc2UiY2VudGVyIjpiZT1ydC1HdCxpZT1ydCtHdDticmVhaztjYXNlInJpZ2h0IjpiZT1ydCxpZT1ydCtuZTticmVha31zd2l0Y2goUy52YWx1ZSl7Y2FzZSJ0b3AiOkZlPW90LXF0LHdlPW90O2JyZWFrO2Nhc2UiY2VudGVyIjpGZT1vdC1nZSx3ZT1vdCtnZTticmVhaztjYXNlImJvdHRvbSI6RmU9b3Qsd2U9b3QrcXQ7YnJlYWt9fWJlKz1odC1NYXRoLm1heChEdCwkdCktWnQtWXQsaWUrPWh0K01hdGgubWF4KER0LCR0KStadCtZdCxGZSs9ZHQtTWF0aC5tYXgoRHQsJHQpLVp0LVl0LHdlKz1kdCtNYXRoLm1heChEdCwkdCkrWnQrWXQ7dmFyIGJuPVR8fCJtYWluIix6ZT1PLmxhYmVsQm91bmRzLEdlPXplW2JuXT16ZVtibl18fHt9O0dlLngxPWJlLEdlLnkxPUZlLEdlLngyPWllLEdlLnkyPXdlLEdlLnc9aWUtYmUsR2UuaD13ZS1GZTt2YXIgRW49THQmJmt0LnN0clZhbHVlPT09ImF1dG9yb3RhdGUiLEluPWt0LnBmVmFsdWUhPW51bGwmJmt0LnBmVmFsdWUhPT0wO2lmKEVufHxJbil7dmFyIFluPUVuP0ZrKE8ucnN0eWxlLCJsYWJlbEFuZ2xlIixUKTprdC5wZlZhbHVlLFNuPU1hdGguY29zKFluKSxXbj1NYXRoLnNpbihZbikscnI9KGJlK2llKS8yLHdyPShGZSt3ZSkvMjtpZighTHQpe3N3aXRjaChxLnZhbHVlKXtjYXNlImxlZnQiOnJyPWllO2JyZWFrO2Nhc2UicmlnaHQiOnJyPWJlO2JyZWFrfXN3aXRjaChTLnZhbHVlKXtjYXNlInRvcCI6d3I9d2U7YnJlYWs7Y2FzZSJib3R0b20iOndyPUZlO2JyZWFrfX12YXIgdXI9ZnVuY3Rpb24oRWEsQ2kpe3JldHVybiBFYT1FYS1ycixDaT1DaS13cix7eDpFYSpTbi1DaSpXbitycix5OkVhKlduK0NpKlNuK3dyfX0sZXI9dXIoYmUsRmUpLHZuPXVyKGJlLHdlKSxncj11cihpZSxGZSksZnI9dXIoaWUsd2UpO2JlPU1hdGgubWluKGVyLngsdm4ueCxnci54LGZyLngpLGllPU1hdGgubWF4KGVyLngsdm4ueCxnci54LGZyLngpLEZlPU1hdGgubWluKGVyLnksdm4ueSxnci55LGZyLnkpLHdlPU1hdGgubWF4KGVyLnksdm4ueSxnci55LGZyLnkpfXZhciBKcj1ibisiUm90Iix2aT16ZVtKcl09emVbSnJdfHx7fTt2aS54MT1iZSx2aS55MT1GZSx2aS54Mj1pZSx2aS55Mj13ZSx2aS53PWllLWJlLHZpLmg9d2UtRmUsRXAoZyxiZSxGZSxpZSx3ZSksRXAoTy5sYWJlbEJvdW5kcy5hbGwsYmUsRmUsaWUsd2UpfXJldHVybiBnfX0saUo9ZnVuY3Rpb24oZyx4KXt2YXIgVD1nLl9wcml2YXRlLmN5LEw9VC5zdHlsZUVuYWJsZWQoKSxPPVQuaGVhZGxlc3MoKSxQPXpkKCksJD1nLl9wcml2YXRlLHE9Zy5pc05vZGUoKSxTPWcuaXNFZGdlKCksVixZLHJ0LG90LGh0LGR0LEx0PSQucnN0eWxlLGt0PXEmJkw/Zy5wc3R5bGUoImJvdW5kcy1leHBhbnNpb24iKS5wZlZhbHVlOlswXSxEdD1mdW5jdGlvbihncyl7cmV0dXJuIGdzLnBzdHlsZSgiZGlzcGxheSIpLnZhbHVlIT09Im5vbmUifSxQdD0hTHx8RHQoZykmJighU3x8RHQoZy5zb3VyY2UoKSkmJkR0KGcudGFyZ2V0KCkpKTtpZihQdCl7dmFyICR0PTAsWnQ9MDtMJiZ4LmluY2x1ZGVPdmVybGF5cyYmKCR0PWcucHN0eWxlKCJvdmVybGF5LW9wYWNpdHkiKS52YWx1ZSwkdCE9PTAmJihadD1nLnBzdHlsZSgib3ZlcmxheS1wYWRkaW5nIikudmFsdWUpKTt2YXIgWXQ9MCxxdD0wO0wmJnguaW5jbHVkZVVuZGVybGF5cyYmKFl0PWcucHN0eWxlKCJ1bmRlcmxheS1vcGFjaXR5IikudmFsdWUsWXQhPT0wJiYocXQ9Zy5wc3R5bGUoInVuZGVybGF5LXBhZGRpbmciKS52YWx1ZSkpO3ZhciBuZT1NYXRoLm1heChadCxxdCksR3Q9MCxnZT0wO2lmKEwmJihHdD1nLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGdlPUd0LzIpLHEmJnguaW5jbHVkZU5vZGVzKXt2YXIgYmU9Zy5wb3NpdGlvbigpO2h0PWJlLngsZHQ9YmUueTt2YXIgaWU9Zy5vdXRlcldpZHRoKCksRmU9aWUvMix3ZT1nLm91dGVySGVpZ2h0KCksYm49d2UvMjtWPWh0LUZlLFk9aHQrRmUscnQ9ZHQtYm4sb3Q9ZHQrYm4sRXAoUCxWLHJ0LFksb3QpfWVsc2UgaWYoUyYmeC5pbmNsdWRlRWRnZXMpaWYoTCYmIU8pe3ZhciB6ZT1nLnBzdHlsZSgiY3VydmUtc3R5bGUiKS5zdHJWYWx1ZTtpZihWPU1hdGgubWluKEx0LnNyY1gsTHQubWlkWCxMdC50Z3RYKSxZPU1hdGgubWF4KEx0LnNyY1gsTHQubWlkWCxMdC50Z3RYKSxydD1NYXRoLm1pbihMdC5zcmNZLEx0Lm1pZFksTHQudGd0WSksb3Q9TWF0aC5tYXgoTHQuc3JjWSxMdC5taWRZLEx0LnRndFkpLFYtPWdlLFkrPWdlLHJ0LT1nZSxvdCs9Z2UsRXAoUCxWLHJ0LFksb3QpLHplPT09ImhheXN0YWNrIil7dmFyIEdlPUx0LmhheXN0YWNrUHRzO2lmKEdlJiZHZS5sZW5ndGg9PT0yKXtpZihWPUdlWzBdLngscnQ9R2VbMF0ueSxZPUdlWzFdLngsb3Q9R2VbMV0ueSxWPlkpe3ZhciBFbj1WO1Y9WSxZPUVufWlmKHJ0Pm90KXt2YXIgSW49cnQ7cnQ9b3Qsb3Q9SW59RXAoUCxWLWdlLHJ0LWdlLFkrZ2Usb3QrZ2UpfX1lbHNlIGlmKHplPT09ImJlemllciJ8fHplPT09InVuYnVuZGxlZC1iZXppZXIifHx6ZT09PSJzZWdtZW50cyJ8fHplPT09InRheGkiKXt2YXIgWW47c3dpdGNoKHplKXtjYXNlImJlemllciI6Y2FzZSJ1bmJ1bmRsZWQtYmV6aWVyIjpZbj1MdC5iZXppZXJQdHM7YnJlYWs7Y2FzZSJzZWdtZW50cyI6Y2FzZSJ0YXhpIjpZbj1MdC5saW5lUHRzO2JyZWFrfWlmKFluIT1udWxsKWZvcih2YXIgU249MDtTbjxZbi5sZW5ndGg7U24rKyl7dmFyIFduPVluW1NuXTtWPVduLngtZ2UsWT1Xbi54K2dlLHJ0PVduLnktZ2Usb3Q9V24ueStnZSxFcChQLFYscnQsWSxvdCl9fX1lbHNle3ZhciBycj1nLnNvdXJjZSgpLHdyPXJyLnBvc2l0aW9uKCksdXI9Zy50YXJnZXQoKSxlcj11ci5wb3NpdGlvbigpO2lmKFY9d3IueCxZPWVyLngscnQ9d3IueSxvdD1lci55LFY+WSl7dmFyIHZuPVY7Vj1ZLFk9dm59aWYocnQ+b3Qpe3ZhciBncj1ydDtydD1vdCxvdD1ncn1WLT1nZSxZKz1nZSxydC09Z2Usb3QrPWdlLEVwKFAsVixydCxZLG90KX1pZihMJiZ4LmluY2x1ZGVFZGdlcyYmUyYmKHRDKFAsZywibWlkLXNvdXJjZSIpLHRDKFAsZywibWlkLXRhcmdldCIpLHRDKFAsZywic291cmNlIiksdEMoUCxnLCJ0YXJnZXQiKSksTCl7dmFyIGZyPWcucHN0eWxlKCJnaG9zdCIpLnZhbHVlPT09InllcyI7aWYoZnIpe3ZhciBKcj1nLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXgiKS5wZlZhbHVlLHZpPWcucHN0eWxlKCJnaG9zdC1vZmZzZXQteSIpLnBmVmFsdWU7RXAoUCxQLngxK0pyLFAueTErdmksUC54MitKcixQLnkyK3ZpKX19dmFyIFhzPSQuYm9keUJvdW5kcz0kLmJvZHlCb3VuZHN8fHt9O2xOKFhzLFApLFNMKFhzLGt0KSxSVChYcywxKSxMJiYoVj1QLngxLFk9UC54MixydD1QLnkxLG90PVAueTIsRXAoUCxWLW5lLHJ0LW5lLFkrbmUsb3QrbmUpKTt2YXIgRWE9JC5vdmVybGF5Qm91bmRzPSQub3ZlcmxheUJvdW5kc3x8e307bE4oRWEsUCksU0woRWEsa3QpLFJUKEVhLDEpO3ZhciBDaT0kLmxhYmVsQm91bmRzPSQubGFiZWxCb3VuZHN8fHt9O0NpLmFsbCE9bnVsbD9OSyhDaS5hbGwpOkNpLmFsbD16ZCgpLEwmJnguaW5jbHVkZUxhYmVscyYmKHguaW5jbHVkZU1haW5MYWJlbHMmJmhCKFAsZyxudWxsKSxTJiYoeC5pbmNsdWRlU291cmNlTGFiZWxzJiZoQihQLGcsInNvdXJjZSIpLHguaW5jbHVkZVRhcmdldExhYmVscyYmaEIoUCxnLCJ0YXJnZXQiKSkpfXJldHVybiBQLngxPU0wKFAueDEpLFAueTE9TTAoUC55MSksUC54Mj1NMChQLngyKSxQLnkyPU0wKFAueTIpLFAudz1NMChQLngyLVAueDEpLFAuaD1NMChQLnkyLVAueTEpLFAudz4wJiZQLmg+MCYmUHQmJihTTChQLGt0KSxSVChQLDEpKSxQfSxmQj1mdW5jdGlvbihnKXt2YXIgeD0wLFQ9ZnVuY3Rpb24oUCl7cmV0dXJuKFA/MTowKTw8eCsrfSxMPTA7cmV0dXJuIEwrPVQoZy5pbmN1ZGVOb2RlcyksTCs9VChnLmluY2x1ZGVFZGdlcyksTCs9VChnLmluY2x1ZGVMYWJlbHMpLEwrPVQoZy5pbmNsdWRlTWFpbkxhYmVscyksTCs9VChnLmluY2x1ZGVTb3VyY2VMYWJlbHMpLEwrPVQoZy5pbmNsdWRlVGFyZ2V0TGFiZWxzKSxMKz1UKGcuaW5jbHVkZU92ZXJsYXlzKSxMfSxkQj1mdW5jdGlvbihnKXtpZihnLmlzRWRnZSgpKXt2YXIgeD1nLnNvdXJjZSgpLnBvc2l0aW9uKCksVD1nLnRhcmdldCgpLnBvc2l0aW9uKCksTD1mdW5jdGlvbihQKXtyZXR1cm4gTWF0aC5yb3VuZChQKX07cmV0dXJuIGYxKFtMKHgueCksTCh4LnkpLEwoVC54KSxMKFQueSldKX1lbHNlIHJldHVybiAwfSxnQj1mdW5jdGlvbihnLHgpe3ZhciBUPWcuX3ByaXZhdGUsTCxPPWcuaXNFZGdlKCksUD14PT1udWxsP3BCOmZCKHgpLCQ9UD09PXBCLHE9ZEIoZyksUz1ULmJiQ2FjaGVQb3NLZXk9PT1xLFY9eC51c2VDYWNoZSYmUyxZPWZ1bmN0aW9uKGR0KXtyZXR1cm4gZHQuX3ByaXZhdGUuYmJDYWNoZT09bnVsbHx8ZHQuX3ByaXZhdGUuc3R5bGVEaXJ0eX0scnQ9IVZ8fFkoZyl8fE8mJlkoZy5zb3VyY2UoKSl8fFkoZy50YXJnZXQoKSk7aWYocnQ/KFN8fGcucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKFYpLEw9aUooZyxOayksVC5iYkNhY2hlPUwsVC5iYkNhY2hlUG9zS2V5PXEpOkw9VC5iYkNhY2hlLCEkKXt2YXIgb3Q9Zy5pc05vZGUoKTtMPXpkKCksKHguaW5jbHVkZU5vZGVzJiZvdHx8eC5pbmNsdWRlRWRnZXMmJiFvdCkmJih4LmluY2x1ZGVPdmVybGF5cz9MMyhMLFQub3ZlcmxheUJvdW5kcyk6TDMoTCxULmJvZHlCb3VuZHMpKSx4LmluY2x1ZGVMYWJlbHMmJih4LmluY2x1ZGVNYWluTGFiZWxzJiYoIU98fHguaW5jbHVkZVNvdXJjZUxhYmVscyYmeC5pbmNsdWRlVGFyZ2V0TGFiZWxzKT9MMyhMLFQubGFiZWxCb3VuZHMuYWxsKTooeC5pbmNsdWRlTWFpbkxhYmVscyYmTDMoTCxULmxhYmVsQm91bmRzLm1haW5Sb3QpLHguaW5jbHVkZVNvdXJjZUxhYmVscyYmTDMoTCxULmxhYmVsQm91bmRzLnNvdXJjZVJvdCkseC5pbmNsdWRlVGFyZ2V0TGFiZWxzJiZMMyhMLFQubGFiZWxCb3VuZHMudGFyZ2V0Um90KSkpLEwudz1MLngyLUwueDEsTC5oPUwueTItTC55MX1yZXR1cm4gTH0sTms9e2luY2x1ZGVOb2RlczohMCxpbmNsdWRlRWRnZXM6ITAsaW5jbHVkZUxhYmVsczohMCxpbmNsdWRlTWFpbkxhYmVsczohMCxpbmNsdWRlU291cmNlTGFiZWxzOiEwLGluY2x1ZGVUYXJnZXRMYWJlbHM6ITAsaW5jbHVkZU92ZXJsYXlzOiEwLGluY2x1ZGVVbmRlcmxheXM6ITAsdXNlQ2FjaGU6ITB9LHBCPWZCKE5rKSxiQj1SZihOayk7VWIuYm91bmRpbmdCb3g9ZnVuY3Rpb24oeSl7dmFyIGc7aWYodGhpcy5sZW5ndGg9PT0xJiZ0aGlzWzBdLl9wcml2YXRlLmJiQ2FjaGUhPW51bGwmJiF0aGlzWzBdLl9wcml2YXRlLnN0eWxlRGlydHkmJih5PT09dm9pZCAwfHx5LnVzZUNhY2hlPT09dm9pZCAwfHx5LnVzZUNhY2hlPT09ITApKXk9PT12b2lkIDA/eT1Oazp5PWJCKHkpLGc9Z0IodGhpc1swXSx5KTtlbHNle2c9emQoKSx5PXl8fE5rO3ZhciB4PWJCKHkpLFQ9dGhpcyxMPVQuY3koKSxPPUwuc3R5bGVFbmFibGVkKCk7aWYoTylmb3IodmFyIFA9MDtQPFQubGVuZ3RoO1ArKyl7dmFyICQ9VFtQXSxxPSQuX3ByaXZhdGUsUz1kQigkKSxWPXEuYmJDYWNoZVBvc0tleT09PVMsWT14LnVzZUNhY2hlJiZWJiYhcS5zdHlsZURpcnR5OyQucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKFkpfXRoaXMudXBkYXRlQ29tcG91bmRCb3VuZHMoIXkudXNlQ2FjaGUpO2Zvcih2YXIgcnQ9MDtydDxULmxlbmd0aDtydCsrKXt2YXIgb3Q9VFtydF07TDMoZyxnQihvdCx4KSl9fXJldHVybiBnLngxPU0wKGcueDEpLGcueTE9TTAoZy55MSksZy54Mj1NMChnLngyKSxnLnkyPU0wKGcueTIpLGcudz1NMChnLngyLWcueDEpLGcuaD1NMChnLnkyLWcueTEpLGd9LFViLmRpcnR5Qm91bmRpbmdCb3hDYWNoZT1mdW5jdGlvbigpe2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKXt2YXIgZz10aGlzW3ldLl9wcml2YXRlO2cuYmJDYWNoZT1udWxsLGcuYmJDYWNoZVBvc0tleT1udWxsLGcuYm9keUJvdW5kcz1udWxsLGcub3ZlcmxheUJvdW5kcz1udWxsLGcubGFiZWxCb3VuZHMuYWxsPW51bGwsZy5sYWJlbEJvdW5kcy5zb3VyY2U9bnVsbCxnLmxhYmVsQm91bmRzLnRhcmdldD1udWxsLGcubGFiZWxCb3VuZHMubWFpbj1udWxsLGcubGFiZWxCb3VuZHMuc291cmNlUm90PW51bGwsZy5sYWJlbEJvdW5kcy50YXJnZXRSb3Q9bnVsbCxnLmxhYmVsQm91bmRzLm1haW5Sb3Q9bnVsbCxnLmFycm93Qm91bmRzLnNvdXJjZT1udWxsLGcuYXJyb3dCb3VuZHMudGFyZ2V0PW51bGwsZy5hcnJvd0JvdW5kc1sibWlkLXNvdXJjZSJdPW51bGwsZy5hcnJvd0JvdW5kc1sibWlkLXRhcmdldCJdPW51bGx9cmV0dXJuIHRoaXMuZW1pdEFuZE5vdGlmeSgiYm91bmRzIiksdGhpc30sVWIuYm91bmRpbmdCb3hBdD1mdW5jdGlvbih5KXt2YXIgZz10aGlzLm5vZGVzKCkseD10aGlzLmN5KCksVD14Lmhhc0NvbXBvdW5kTm9kZXMoKSxMPXguY29sbGVjdGlvbigpO2lmKFQmJihMPWcuZmlsdGVyKGZ1bmN0aW9uKFMpe3JldHVybiBTLmlzUGFyZW50KCl9KSxnPWcubm90KEwpKSx1dCh5KSl7dmFyIE89eTt5PWZ1bmN0aW9uKCl7cmV0dXJuIE99fXZhciBQPWZ1bmN0aW9uKFYsWSl7cmV0dXJuIFYuX3ByaXZhdGUuYmJBdE9sZFBvcz15KFYsWSl9LCQ9ZnVuY3Rpb24oVil7cmV0dXJuIFYuX3ByaXZhdGUuYmJBdE9sZFBvc307eC5zdGFydEJhdGNoKCksZy5mb3JFYWNoKFApLnNpbGVudFBvc2l0aW9ucyh5KSxUJiYoTC5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxMLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLEwudXBkYXRlQ29tcG91bmRCb3VuZHMoITApKTt2YXIgcT1GSyh0aGlzLmJvdW5kaW5nQm94KHt1c2VDYWNoZTohMX0pKTtyZXR1cm4gZy5zaWxlbnRQb3NpdGlvbnMoJCksVCYmKEwuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCksTC5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKSxMLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCEwKSkseC5lbmRCYXRjaCgpLHF9LHV4LmJvdW5kaW5nYm94PXV4LmJiPXV4LmJvdW5kaW5nQm94LHV4LnJlbmRlcmVkQm91bmRpbmdib3g9dXgucmVuZGVyZWRCb3VuZGluZ0JveDt2YXIgc0o9VWIsQmssUms7Qms9Ums9e307dmFyIFRtPWZ1bmN0aW9uKGcpe2cudXBwZXJjYXNlTmFtZT1WZShnLm5hbWUpLGcuYXV0b05hbWU9ImF1dG8iK2cudXBwZXJjYXNlTmFtZSxnLmxhYmVsTmFtZT0ibGFiZWwiK2cudXBwZXJjYXNlTmFtZSxnLm91dGVyTmFtZT0ib3V0ZXIiK2cudXBwZXJjYXNlTmFtZSxnLnVwcGVyY2FzZU91dGVyTmFtZT1WZShnLm91dGVyTmFtZSksQmtbZy5uYW1lXT1mdW5jdGlvbigpe3ZhciBUPXRoaXNbMF0sTD1ULl9wcml2YXRlLE89TC5jeSxQPU8uX3ByaXZhdGUuc3R5bGVFbmFibGVkO2lmKFQpaWYoUCl7aWYoVC5pc1BhcmVudCgpKXJldHVybiBULnVwZGF0ZUNvbXBvdW5kQm91bmRzKCksTFtnLmF1dG9OYW1lXXx8MDt2YXIgJD1ULnBzdHlsZShnLm5hbWUpO3N3aXRjaCgkLnN0clZhbHVlKXtjYXNlImxhYmVsIjpyZXR1cm4gVC5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoKSxMLnJzdHlsZVtnLmxhYmVsTmFtZV18fDA7ZGVmYXVsdDpyZXR1cm4gJC5wZlZhbHVlfX1lbHNlIHJldHVybiAxfSxCa1sib3V0ZXIiK2cudXBwZXJjYXNlTmFtZV09ZnVuY3Rpb24oKXt2YXIgVD10aGlzWzBdLEw9VC5fcHJpdmF0ZSxPPUwuY3ksUD1PLl9wcml2YXRlLnN0eWxlRW5hYmxlZDtpZihUKWlmKFApe3ZhciAkPVRbZy5uYW1lXSgpLHE9VC5wc3R5bGUoImJvcmRlci13aWR0aCIpLnBmVmFsdWUsUz0yKlQucGFkZGluZygpO3JldHVybiAkK3ErU31lbHNlIHJldHVybiAxfSxCa1sicmVuZGVyZWQiK2cudXBwZXJjYXNlTmFtZV09ZnVuY3Rpb24oKXt2YXIgVD10aGlzWzBdO2lmKFQpe3ZhciBMPVRbZy5uYW1lXSgpO3JldHVybiBMKnRoaXMuY3koKS56b29tKCl9fSxCa1sicmVuZGVyZWQiK2cudXBwZXJjYXNlT3V0ZXJOYW1lXT1mdW5jdGlvbigpe3ZhciBUPXRoaXNbMF07aWYoVCl7dmFyIEw9VFtnLm91dGVyTmFtZV0oKTtyZXR1cm4gTCp0aGlzLmN5KCkuem9vbSgpfX19O1RtKHtuYW1lOiJ3aWR0aCJ9KSxUbSh7bmFtZToiaGVpZ2h0In0pLFJrLnBhZGRpbmc9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdLGc9eS5fcHJpdmF0ZTtyZXR1cm4geS5pc1BhcmVudCgpPyh5LnVwZGF0ZUNvbXBvdW5kQm91bmRzKCksZy5hdXRvUGFkZGluZyE9PXZvaWQgMD9nLmF1dG9QYWRkaW5nOnkucHN0eWxlKCJwYWRkaW5nIikucGZWYWx1ZSk6eS5wc3R5bGUoInBhZGRpbmciKS5wZlZhbHVlfSxSay5wYWRkZWRIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO3JldHVybiB5LmhlaWdodCgpKzIqeS5wYWRkaW5nKCl9LFJrLnBhZGRlZFdpZHRoPWZ1bmN0aW9uKCl7dmFyIHk9dGhpc1swXTtyZXR1cm4geS53aWR0aCgpKzIqeS5wYWRkaW5nKCl9O3ZhciBITD1SayxhSj1mdW5jdGlvbihnLHgpe2lmKGcuaXNFZGdlKCkpcmV0dXJuIHgoZyl9LG9KPWZ1bmN0aW9uKGcseCl7aWYoZy5pc0VkZ2UoKSl7dmFyIFQ9Zy5jeSgpO3JldHVybiBOVCh4KGcpLFQuem9vbSgpLFQucGFuKCkpfX0sY0o9ZnVuY3Rpb24oZyx4KXtpZihnLmlzRWRnZSgpKXt2YXIgVD1nLmN5KCksTD1ULnBhbigpLE89VC56b29tKCk7cmV0dXJuIHgoZykubWFwKGZ1bmN0aW9uKFApe3JldHVybiBOVChQLE8sTCl9KX19LHVKPWZ1bmN0aW9uKGcpe3JldHVybiBnLnJlbmRlcmVyKCkuZ2V0Q29udHJvbFBvaW50cyhnKX0sbEo9ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVuZGVyZXIoKS5nZXRTZWdtZW50UG9pbnRzKGcpfSxoSj1mdW5jdGlvbihnKXtyZXR1cm4gZy5yZW5kZXJlcigpLmdldFNvdXJjZUVuZHBvaW50KGcpfSxmSj1mdW5jdGlvbihnKXtyZXR1cm4gZy5yZW5kZXJlcigpLmdldFRhcmdldEVuZHBvaW50KGcpfSxkSj1mdW5jdGlvbihnKXtyZXR1cm4gZy5yZW5kZXJlcigpLmdldEVkZ2VNaWRwb2ludChnKX0sd0I9e2NvbnRyb2xQb2ludHM6e2dldDp1SixtdWx0OiEwfSxzZWdtZW50UG9pbnRzOntnZXQ6bEosbXVsdDohMH0sc291cmNlRW5kcG9pbnQ6e2dldDpoSn0sdGFyZ2V0RW5kcG9pbnQ6e2dldDpmSn0sbWlkcG9pbnQ6e2dldDpkSn19LGdKPWZ1bmN0aW9uKGcpe3JldHVybiJyZW5kZXJlZCIrZ1swXS50b1VwcGVyQ2FzZSgpK2cuc3Vic3RyKDEpfSxwSj1PYmplY3Qua2V5cyh3QikucmVkdWNlKGZ1bmN0aW9uKHksZyl7dmFyIHg9d0JbZ10sVD1nSihnKTtyZXR1cm4geVtnXT1mdW5jdGlvbigpe3JldHVybiBhSih0aGlzLHguZ2V0KX0seC5tdWx0P3lbVF09ZnVuY3Rpb24oKXtyZXR1cm4gY0oodGhpcyx4LmdldCl9OnlbVF09ZnVuY3Rpb24oKXtyZXR1cm4gb0oodGhpcyx4LmdldCl9LHl9LHt9KSxiSj1kZSh7fSxsQixzSixITCxwSik7LyohCiAgICAJICBFdmVudCBvYmplY3QgYmFzZWQgb24galF1ZXJ5IGV2ZW50cywgTUlUIGxpY2Vuc2UKCiAgICAJICBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZS8KICAgIAkgIGh0dHBzOi8vdGxkcmxlZ2FsLmNvbS9saWNlbnNlL21pdC1saWNlbnNlCiAgICAJICBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9ibG9iL21hc3Rlci9zcmMvZXZlbnQuanMKICAgIAkgICovdmFyIHZCPWZ1bmN0aW9uKGcseCl7dGhpcy5yZWN5Y2xlKGcseCl9O2Z1bmN0aW9uIGprKCl7cmV0dXJuITF9ZnVuY3Rpb24gZUMoKXtyZXR1cm4hMH12Qi5wcm90b3R5cGU9e2luc3RhbmNlU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuImV2ZW50In0scmVjeWNsZTpmdW5jdGlvbihnLHgpe2lmKHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD10aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1qayxnIT1udWxsJiZnLnByZXZlbnREZWZhdWx0Pyh0aGlzLnR5cGU9Zy50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWcuZGVmYXVsdFByZXZlbnRlZD9lQzpqayk6ZyE9bnVsbCYmZy50eXBlP3g9Zzp0aGlzLnR5cGU9Zyx4IT1udWxsJiYodGhpcy5vcmlnaW5hbEV2ZW50PXgub3JpZ2luYWxFdmVudCx0aGlzLnR5cGU9eC50eXBlIT1udWxsP3gudHlwZTp0aGlzLnR5cGUsdGhpcy5jeT14LmN5LHRoaXMudGFyZ2V0PXgudGFyZ2V0LHRoaXMucG9zaXRpb249eC5wb3NpdGlvbix0aGlzLnJlbmRlcmVkUG9zaXRpb249eC5yZW5kZXJlZFBvc2l0aW9uLHRoaXMubmFtZXNwYWNlPXgubmFtZXNwYWNlLHRoaXMubGF5b3V0PXgubGF5b3V0KSx0aGlzLmN5IT1udWxsJiZ0aGlzLnBvc2l0aW9uIT1udWxsJiZ0aGlzLnJlbmRlcmVkUG9zaXRpb249PW51bGwpe3ZhciBUPXRoaXMucG9zaXRpb24sTD10aGlzLmN5Lnpvb20oKSxPPXRoaXMuY3kucGFuKCk7dGhpcy5yZW5kZXJlZFBvc2l0aW9uPXt4OlQueCpMK08ueCx5OlQueSpMK08ueX19dGhpcy50aW1lU3RhbXA9ZyYmZy50aW1lU3RhbXB8fERhdGUubm93KCl9LHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZUM7dmFyIGc9dGhpcy5vcmlnaW5hbEV2ZW50O2cmJmcucHJldmVudERlZmF1bHQmJmcucHJldmVudERlZmF1bHQoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1lQzt2YXIgZz10aGlzLm9yaWdpbmFsRXZlbnQ7ZyYmZy5zdG9wUHJvcGFnYXRpb24mJmcuc3RvcFByb3BhZ2F0aW9uKCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9ZUMsdGhpcy5zdG9wUHJvcGFnYXRpb24oKX0saXNEZWZhdWx0UHJldmVudGVkOmprLGlzUHJvcGFnYXRpb25TdG9wcGVkOmprLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOmprfTt2YXIgbUI9L14oW14uXSspKFwuKD86W14uXSspKT8kLyx3Sj0iLioiLHlCPXtxdWFsaWZpZXJDb21wYXJlOmZ1bmN0aW9uKGcseCl7cmV0dXJuIGc9PT14fSxldmVudE1hdGNoZXM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sYWRkRXZlbnRGaWVsZHM6ZnVuY3Rpb24oKXt9LGNhbGxiYWNrQ29udGV4dDpmdW5jdGlvbihnKXtyZXR1cm4gZ30sYmVmb3JlRW1pdDpmdW5jdGlvbigpe30sYWZ0ZXJFbWl0OmZ1bmN0aW9uKCl7fSxidWJibGU6ZnVuY3Rpb24oKXtyZXR1cm4hMX0scGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGNvbnRleHQ6bnVsbH0seEI9T2JqZWN0LmtleXMoeUIpLHZKPXt9O2Z1bmN0aW9uIG5DKCl7Zm9yKHZhciB5PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp2SixnPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHg9MDt4PHhCLmxlbmd0aDt4Kyspe3ZhciBUPXhCW3hdO3RoaXNbVF09eVtUXXx8eUJbVF19dGhpcy5jb250ZXh0PWd8fHRoaXMuY29udGV4dCx0aGlzLmxpc3RlbmVycz1bXSx0aGlzLmVtaXR0aW5nPTB9dmFyIENtPW5DLnByb3RvdHlwZSxrQj1mdW5jdGlvbihnLHgsVCxMLE8sUCwkKXt5dChMKSYmKE89TCxMPW51bGwpLCQmJihQPT1udWxsP1A9JDpQPWRlKHt9LFAsJCkpO2Zvcih2YXIgcT1mdChUKT9UOlQuc3BsaXQoL1xzKy8pLFM9MDtTPHEubGVuZ3RoO1MrKyl7dmFyIFY9cVtTXTtpZighWihWKSl7dmFyIFk9Vi5tYXRjaChtQik7aWYoWSl7dmFyIHJ0PVlbMV0sb3Q9WVsyXT9ZWzJdOm51bGwsaHQ9eChnLFYscnQsb3QsTCxPLFApO2lmKGh0PT09ITEpYnJlYWt9fX19LEVCPWZ1bmN0aW9uKGcseCl7cmV0dXJuIGcuYWRkRXZlbnRGaWVsZHMoZy5jb250ZXh0LHgpLG5ldyB2Qih4LnR5cGUseCl9LG1KPWZ1bmN0aW9uKGcseCxUKXtpZihFdChUKSl7eChnLFQpO3JldHVybn1lbHNlIGlmKHV0KFQpKXt4KGcsRUIoZyxUKSk7cmV0dXJufWZvcih2YXIgTD1mdChUKT9UOlQuc3BsaXQoL1xzKy8pLE89MDtPPEwubGVuZ3RoO08rKyl7dmFyIFA9TFtPXTtpZighWihQKSl7dmFyICQ9UC5tYXRjaChtQik7aWYoJCl7dmFyIHE9JFsxXSxTPSRbMl0/JFsyXTpudWxsLFY9RUIoZyx7dHlwZTpxLG5hbWVzcGFjZTpTLHRhcmdldDpnLmNvbnRleHR9KTt4KGcsVil9fX19O0NtLm9uPUNtLmFkZExpc3RlbmVyPWZ1bmN0aW9uKHksZyx4LFQsTCl7cmV0dXJuIGtCKHRoaXMsZnVuY3Rpb24oTyxQLCQscSxTLFYsWSl7eXQoVikmJk8ubGlzdGVuZXJzLnB1c2goe2V2ZW50OlAsY2FsbGJhY2s6Vix0eXBlOiQsbmFtZXNwYWNlOnEscXVhbGlmaWVyOlMsY29uZjpZfSl9LHksZyx4LFQsTCksdGhpc30sQ20ub25lPWZ1bmN0aW9uKHksZyx4LFQpe3JldHVybiB0aGlzLm9uKHksZyx4LFQse29uZTohMH0pfSxDbS5yZW1vdmVMaXN0ZW5lcj1DbS5vZmY9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9dGhpczt0aGlzLmVtaXR0aW5nIT09MCYmKHRoaXMubGlzdGVuZXJzPXVLKHRoaXMubGlzdGVuZXJzKSk7Zm9yKHZhciBPPXRoaXMubGlzdGVuZXJzLFA9ZnVuY3Rpb24oUyl7dmFyIFY9T1tTXTtrQihMLGZ1bmN0aW9uKFkscnQsb3QsaHQsZHQsTHQpe2lmKChWLnR5cGU9PT1vdHx8eT09PSIqIikmJighaHQmJlYubmFtZXNwYWNlIT09Ii4qInx8Vi5uYW1lc3BhY2U9PT1odCkmJighZHR8fFkucXVhbGlmaWVyQ29tcGFyZShWLnF1YWxpZmllcixkdCkpJiYoIUx0fHxWLmNhbGxiYWNrPT09THQpKXJldHVybiBPLnNwbGljZShTLDEpLCExfSx5LGcseCxUKX0sJD1PLmxlbmd0aC0xOyQ+PTA7JC0tKVAoJCk7cmV0dXJuIHRoaXN9LENtLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbW92ZUxpc3RlbmVyKCIqIil9LENtLmVtaXQ9Q20udHJpZ2dlcj1mdW5jdGlvbih5LGcseCl7dmFyIFQ9dGhpcy5saXN0ZW5lcnMsTD1ULmxlbmd0aDtyZXR1cm4gdGhpcy5lbWl0dGluZysrLGZ0KGcpfHwoZz1bZ10pLG1KKHRoaXMsZnVuY3Rpb24oTyxQKXt4IT1udWxsJiYoVD1be2V2ZW50OlAuZXZlbnQsdHlwZTpQLnR5cGUsbmFtZXNwYWNlOlAubmFtZXNwYWNlLGNhbGxiYWNrOnh9XSxMPVQubGVuZ3RoKTtmb3IodmFyICQ9ZnVuY3Rpb24oVil7dmFyIFk9VFtWXTtpZihZLnR5cGU9PT1QLnR5cGUmJighWS5uYW1lc3BhY2V8fFkubmFtZXNwYWNlPT09UC5uYW1lc3BhY2V8fFkubmFtZXNwYWNlPT09d0opJiZPLmV2ZW50TWF0Y2hlcyhPLmNvbnRleHQsWSxQKSl7dmFyIHJ0PVtQXTtnIT1udWxsJiZhTihydCxnKSxPLmJlZm9yZUVtaXQoTy5jb250ZXh0LFksUCksWS5jb25mJiZZLmNvbmYub25lJiYoTy5saXN0ZW5lcnM9Ty5saXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uKGR0KXtyZXR1cm4gZHQhPT1ZfSkpO3ZhciBvdD1PLmNhbGxiYWNrQ29udGV4dChPLmNvbnRleHQsWSxQKSxodD1ZLmNhbGxiYWNrLmFwcGx5KG90LHJ0KTtPLmFmdGVyRW1pdChPLmNvbnRleHQsWSxQKSxodD09PSExJiYoUC5zdG9wUHJvcGFnYXRpb24oKSxQLnByZXZlbnREZWZhdWx0KCkpfX0scT0wO3E8TDtxKyspJChxKTtPLmJ1YmJsZShPLmNvbnRleHQpJiYhUC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZPLnBhcmVudChPLmNvbnRleHQpLmVtaXQoUCxnKX0seSksdGhpcy5lbWl0dGluZy0tLHRoaXN9O3ZhciB5Sj17cXVhbGlmaWVyQ29tcGFyZTpmdW5jdGlvbihnLHgpe3JldHVybiBnPT1udWxsfHx4PT1udWxsP2c9PW51bGwmJng9PW51bGw6Zy5zYW1lVGV4dCh4KX0sZXZlbnRNYXRjaGVzOmZ1bmN0aW9uKGcseCxUKXt2YXIgTD14LnF1YWxpZmllcjtyZXR1cm4gTCE9bnVsbD9nIT09VC50YXJnZXQmJm50KFQudGFyZ2V0KSYmTC5tYXRjaGVzKFQudGFyZ2V0KTohMH0sYWRkRXZlbnRGaWVsZHM6ZnVuY3Rpb24oZyx4KXt4LmN5PWcuY3koKSx4LnRhcmdldD1nfSxjYWxsYmFja0NvbnRleHQ6ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB4LnF1YWxpZmllciE9bnVsbD9ULnRhcmdldDpnfSxiZWZvcmVFbWl0OmZ1bmN0aW9uKGcseCl7eC5jb25mJiZ4LmNvbmYub25jZSYmeC5jb25mLm9uY2VDb2xsZWN0aW9uLnJlbW92ZUxpc3RlbmVyKHguZXZlbnQseC5xdWFsaWZpZXIseC5jYWxsYmFjayl9LGJ1YmJsZTpmdW5jdGlvbigpe3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNDaGlsZCgpP2cucGFyZW50KCk6Zy5jeSgpfX0sckM9ZnVuY3Rpb24oZyl7cmV0dXJuIG10KGcpP25ldyBFbShnKTpnfSxUQj17Y3JlYXRlRW1pdHRlcjpmdW5jdGlvbigpe2Zvcih2YXIgZz0wO2c8dGhpcy5sZW5ndGg7ZysrKXt2YXIgeD10aGlzW2ddLFQ9eC5fcHJpdmF0ZTtULmVtaXR0ZXJ8fChULmVtaXR0ZXI9bmV3IG5DKHlKLHgpKX1yZXR1cm4gdGhpc30sZW1pdHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVtaXR0ZXJ9LG9uOmZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEw9ckMoeCksTz0wO088dGhpcy5sZW5ndGg7TysrKXt2YXIgUD10aGlzW09dO1AuZW1pdHRlcigpLm9uKGcsTCxUKX1yZXR1cm4gdGhpc30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgTD1yQyh4KSxPPTA7Tzx0aGlzLmxlbmd0aDtPKyspe3ZhciBQPXRoaXNbT107UC5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIoZyxMLFQpfXJldHVybiB0aGlzfSxyZW1vdmVBbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtmb3IodmFyIGc9MDtnPHRoaXMubGVuZ3RoO2crKyl7dmFyIHg9dGhpc1tnXTt4LmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKX1yZXR1cm4gdGhpc30sb25lOmZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEw9ckMoeCksTz0wO088dGhpcy5sZW5ndGg7TysrKXt2YXIgUD10aGlzW09dO1AuZW1pdHRlcigpLm9uZShnLEwsVCl9cmV0dXJuIHRoaXN9LG9uY2U6ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgTD1yQyh4KSxPPTA7Tzx0aGlzLmxlbmd0aDtPKyspe3ZhciBQPXRoaXNbT107UC5lbWl0dGVyKCkub24oZyxMLFQse29uY2U6ITAsb25jZUNvbGxlY3Rpb246dGhpc30pfX0sZW1pdDpmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgTD10aGlzW1RdO0wuZW1pdHRlcigpLmVtaXQoZyx4KX1yZXR1cm4gdGhpc30sZW1pdEFuZE5vdGlmeTpmdW5jdGlvbihnLHgpe2lmKHRoaXMubGVuZ3RoIT09MClyZXR1cm4gdGhpcy5jeSgpLm5vdGlmeShnLHRoaXMpLHRoaXMuZW1pdChnLHgpLHRoaXN9fTtBYy5ldmVudEFsaWFzZXNPbihUQik7dmFyIENCPXtub2RlczpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIHguaXNOb2RlKCl9KS5maWx0ZXIoZyl9LGVkZ2VzOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbih4KXtyZXR1cm4geC5pc0VkZ2UoKX0pLmZpbHRlcihnKX0sYnlHcm91cDpmdW5jdGlvbigpe2Zvcih2YXIgZz10aGlzLnNwYXduKCkseD10aGlzLnNwYXduKCksVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgTD10aGlzW1RdO0wuaXNOb2RlKCk/Zy5wdXNoKEwpOngucHVzaChMKX1yZXR1cm57bm9kZXM6ZyxlZGdlczp4fX0sZmlsdGVyOmZ1bmN0aW9uKGcseCl7aWYoZz09PXZvaWQgMClyZXR1cm4gdGhpcztpZihtdChnKXx8VHQoZykpcmV0dXJuIG5ldyBFbShnKS5maWx0ZXIodGhpcyk7aWYoeXQoZykpe2Zvcih2YXIgVD10aGlzLnNwYXduKCksTD10aGlzLE89MDtPPEwubGVuZ3RoO08rKyl7dmFyIFA9TFtPXSwkPXg/Zy5hcHBseSh4LFtQLE8sTF0pOmcoUCxPLEwpOyQmJlQucHVzaChQKX1yZXR1cm4gVH1yZXR1cm4gdGhpcy5zcGF3bigpfSxub3Q6ZnVuY3Rpb24oZyl7aWYoZyl7bXQoZykmJihnPXRoaXMuZmlsdGVyKGcpKTtmb3IodmFyIHg9dGhpcy5zcGF3bigpLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIEw9dGhpc1tUXSxPPWcuaGFzKEwpO098fHgucHVzaChMKX1yZXR1cm4geH1lbHNlIHJldHVybiB0aGlzfSxhYnNvbHV0ZUNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLmN5KCk7cmV0dXJuIGcubXV0YWJsZUVsZW1lbnRzKCkubm90KHRoaXMpfSxpbnRlcnNlY3Q6ZnVuY3Rpb24oZyl7aWYobXQoZykpe3ZhciB4PWc7cmV0dXJuIHRoaXMuZmlsdGVyKHgpfWZvcih2YXIgVD10aGlzLnNwYXduKCksTD10aGlzLE89ZyxQPXRoaXMubGVuZ3RoPGcubGVuZ3RoLCQ9UD9MOk8scT1QP086TCxTPTA7UzwkLmxlbmd0aDtTKyspe3ZhciBWPSRbU107cS5oYXMoVikmJlQucHVzaChWKX1yZXR1cm4gVH0seG9yOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUuY3k7bXQoZykmJihnPXguJChnKSk7dmFyIFQ9dGhpcy5zcGF3bigpLEw9dGhpcyxPPWcsUD1mdW5jdGlvbihxLFMpe2Zvcih2YXIgVj0wO1Y8cS5sZW5ndGg7VisrKXt2YXIgWT1xW1ZdLHJ0PVkuX3ByaXZhdGUuZGF0YS5pZCxvdD1TLmhhc0VsZW1lbnRXaXRoSWQocnQpO290fHxULnB1c2goWSl9fTtyZXR1cm4gUChMLE8pLFAoTyxMKSxUfSxkaWZmOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUuY3k7bXQoZykmJihnPXguJChnKSk7dmFyIFQ9dGhpcy5zcGF3bigpLEw9dGhpcy5zcGF3bigpLE89dGhpcy5zcGF3bigpLFA9dGhpcywkPWcscT1mdW5jdGlvbihWLFkscnQpe2Zvcih2YXIgb3Q9MDtvdDxWLmxlbmd0aDtvdCsrKXt2YXIgaHQ9VltvdF0sZHQ9aHQuX3ByaXZhdGUuZGF0YS5pZCxMdD1ZLmhhc0VsZW1lbnRXaXRoSWQoZHQpO0x0P08ubWVyZ2UoaHQpOnJ0LnB1c2goaHQpfX07cmV0dXJuIHEoUCwkLFQpLHEoJCxQLEwpLHtsZWZ0OlQscmlnaHQ6TCxib3RoOk99fSxhZGQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZS5jeTtpZighZylyZXR1cm4gdGhpcztpZihtdChnKSl7dmFyIFQ9ZztnPXgubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKFQpfWZvcih2YXIgTD10aGlzLnNwYXduU2VsZigpLE89MDtPPGcubGVuZ3RoO08rKyl7dmFyIFA9Z1tPXSwkPSF0aGlzLmhhcyhQKTskJiZMLnB1c2goUCl9cmV0dXJuIEx9LG1lcmdlOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUsVD14LmN5O2lmKCFnKXJldHVybiB0aGlzO2lmKGcmJm10KGcpKXt2YXIgTD1nO2c9VC5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIoTCl9Zm9yKHZhciBPPXgubWFwLFA9MDtQPGcubGVuZ3RoO1ArKyl7dmFyICQ9Z1tQXSxxPSQuX3ByaXZhdGUuZGF0YS5pZCxTPSFPLmhhcyhxKTtpZihTKXt2YXIgVj10aGlzLmxlbmd0aCsrO3RoaXNbVl09JCxPLnNldChxLHtlbGU6JCxpbmRleDpWfSl9fXJldHVybiB0aGlzfSx1bm1lcmdlQXQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpc1tnXSxUPXguaWQoKSxMPXRoaXMuX3ByaXZhdGUsTz1MLm1hcDt0aGlzW2ddPXZvaWQgMCxPLmRlbGV0ZShUKTt2YXIgUD1nPT09dGhpcy5sZW5ndGgtMTtpZih0aGlzLmxlbmd0aD4xJiYhUCl7dmFyICQ9dGhpcy5sZW5ndGgtMSxxPXRoaXNbJF0sUz1xLl9wcml2YXRlLmRhdGEuaWQ7dGhpc1skXT12b2lkIDAsdGhpc1tnXT1xLE8uc2V0KFMse2VsZTpxLGluZGV4Omd9KX1yZXR1cm4gdGhpcy5sZW5ndGgtLSx0aGlzfSx1bm1lcmdlT25lOmZ1bmN0aW9uKGcpe2c9Z1swXTt2YXIgeD10aGlzLl9wcml2YXRlLFQ9Zy5fcHJpdmF0ZS5kYXRhLmlkLEw9eC5tYXAsTz1MLmdldChUKTtpZighTylyZXR1cm4gdGhpczt2YXIgUD1PLmluZGV4O3JldHVybiB0aGlzLnVubWVyZ2VBdChQKSx0aGlzfSx1bm1lcmdlOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUuY3k7aWYoIWcpcmV0dXJuIHRoaXM7aWYoZyYmbXQoZykpe3ZhciBUPWc7Zz14Lm11dGFibGVFbGVtZW50cygpLmZpbHRlcihUKX1mb3IodmFyIEw9MDtMPGcubGVuZ3RoO0wrKyl0aGlzLnVubWVyZ2VPbmUoZ1tMXSk7cmV0dXJuIHRoaXN9LHVubWVyZ2VCeTpmdW5jdGlvbihnKXtmb3IodmFyIHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIFQ9dGhpc1t4XTtnKFQpJiZ0aGlzLnVubWVyZ2VBdCh4KX1yZXR1cm4gdGhpc30sbWFwOmZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPVtdLEw9dGhpcyxPPTA7TzxMLmxlbmd0aDtPKyspe3ZhciBQPUxbT10sJD14P2cuYXBwbHkoeCxbUCxPLExdKTpnKFAsTyxMKTtULnB1c2goJCl9cmV0dXJuIFR9LHJlZHVjZTpmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD14LEw9dGhpcyxPPTA7TzxMLmxlbmd0aDtPKyspVD1nKFQsTFtPXSxPLEwpO3JldHVybiBUfSxtYXg6ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9LTEvMCxMLE89dGhpcyxQPTA7UDxPLmxlbmd0aDtQKyspe3ZhciAkPU9bUF0scT14P2cuYXBwbHkoeCxbJCxQLE9dKTpnKCQsUCxPKTtxPlQmJihUPXEsTD0kKX1yZXR1cm57dmFsdWU6VCxlbGU6TH19LG1pbjpmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0xLzAsTCxPPXRoaXMsUD0wO1A8Ty5sZW5ndGg7UCsrKXt2YXIgJD1PW1BdLHE9eD9nLmFwcGx5KHgsWyQsUCxPXSk6ZygkLFAsTyk7cTxUJiYoVD1xLEw9JCl9cmV0dXJue3ZhbHVlOlQsZWxlOkx9fX0sdWM9Q0I7dWMudT11Y1sifCJdPXVjWyIrIl09dWMudW5pb249dWMub3I9dWMuYWRkLHVjWyJcXCJdPXVjWyIhIl09dWNbIi0iXT11Yy5kaWZmZXJlbmNlPXVjLnJlbGF0aXZlQ29tcGxlbWVudD11Yy5zdWJ0cmFjdD11Yy5ub3QsdWMubj11Y1siJiJdPXVjWyIuIl09dWMuYW5kPXVjLmludGVyc2VjdGlvbj11Yy5pbnRlcnNlY3QsdWNbIl4iXT11Y1siKCspIl09dWNbIigtKSJdPXVjLnN5bW1ldHJpY0RpZmZlcmVuY2U9dWMuc3ltZGlmZj11Yy54b3IsdWMuZm5GaWx0ZXI9dWMuZmlsdGVyRm49dWMuc3RkRmlsdGVyPXVjLmZpbHRlcix1Yy5jb21wbGVtZW50PXVjLmFic2NvbXA9dWMuYWJzb2x1dGVDb21wbGVtZW50O3ZhciB4Sj17aXNOb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JvdXAoKT09PSJub2RlcyJ9LGlzRWRnZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdyb3VwKCk9PT0iZWRnZXMifSxpc0xvb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0VkZ2UoKSYmdGhpcy5zb3VyY2UoKVswXT09PXRoaXMudGFyZ2V0KClbMF19LGlzU2ltcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNFZGdlKCkmJnRoaXMuc291cmNlKClbMF0hPT10aGlzLnRhcmdldCgpWzBdfSxncm91cDpmdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZylyZXR1cm4gZy5fcHJpdmF0ZS5ncm91cH19LF9CPWZ1bmN0aW9uKGcseCl7dmFyIFQ9Zy5jeSgpLEw9VC5oYXNDb21wb3VuZE5vZGVzKCk7ZnVuY3Rpb24gTyhWKXt2YXIgWT1WLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpO3JldHVybiBZLnZhbHVlPT09ImF1dG8iP0w/Vi56RGVwdGgoKTowOlkudmFsdWU9PT0iYm90dG9tIj8tMTpZLnZhbHVlPT09InRvcCI/VzU6MH12YXIgUD1PKGcpLU8oeCk7aWYoUCE9PTApcmV0dXJuIFA7ZnVuY3Rpb24gJChWKXt2YXIgWT1WLnBzdHlsZSgiei1pbmRleC1jb21wYXJlIik7cmV0dXJuIFkudmFsdWU9PT0iYXV0byImJlYuaXNOb2RlKCk/MTowfXZhciBxPSQoZyktJCh4KTtpZihxIT09MClyZXR1cm4gcTt2YXIgUz1nLnBzdHlsZSgiei1pbmRleCIpLnZhbHVlLXgucHN0eWxlKCJ6LWluZGV4IikudmFsdWU7cmV0dXJuIFMhPT0wP1M6Zy5wb29sSW5kZXgoKS14LnBvb2xJbmRleCgpfSxpQz17Zm9yRWFjaDpmdW5jdGlvbihnLHgpe2lmKHl0KGcpKWZvcih2YXIgVD10aGlzLmxlbmd0aCxMPTA7TDxUO0wrKyl7dmFyIE89dGhpc1tMXSxQPXg/Zy5hcHBseSh4LFtPLEwsdGhpc10pOmcoTyxMLHRoaXMpO2lmKFA9PT0hMSlicmVha31yZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbigpe2Zvcih2YXIgZz1bXSx4PTA7eDx0aGlzLmxlbmd0aDt4KyspZy5wdXNoKHRoaXNbeF0pO3JldHVybiBnfSxzbGljZTpmdW5jdGlvbihnLHgpe3ZhciBUPVtdLEw9dGhpcy5sZW5ndGg7eD09bnVsbCYmKHg9TCksZz09bnVsbCYmKGc9MCksZzwwJiYoZz1MK2cpLHg8MCYmKHg9TCt4KTtmb3IodmFyIE89ZztPPj0wJiZPPHgmJk88TDtPKyspVC5wdXNoKHRoaXNbT10pO3JldHVybiB0aGlzLnNwYXduKFQpfSxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxlcTpmdW5jdGlvbihnKXtyZXR1cm4gdGhpc1tnXXx8dGhpcy5zcGF3bigpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzWzBdfHx0aGlzLnNwYXduKCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0aGlzLmxlbmd0aC0xXXx8dGhpcy5zcGF3bigpfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aD09PTB9LG5vbmVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZW1wdHkoKX0sc29ydDpmdW5jdGlvbihnKXtpZigheXQoZykpcmV0dXJuIHRoaXM7dmFyIHg9dGhpcy50b0FycmF5KCkuc29ydChnKTtyZXR1cm4gdGhpcy5zcGF3bih4KX0sc29ydEJ5WkluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc29ydChfQil9LHpEZXB0aDpmdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZyl7dmFyIHg9Zy5fcHJpdmF0ZSxUPXguZ3JvdXA7aWYoVD09PSJub2RlcyIpe3ZhciBMPXguZGF0YS5wYXJlbnQ/Zy5wYXJlbnRzKCkuc2l6ZSgpOjA7cmV0dXJuIGcuaXNQYXJlbnQoKT9MOlc1LTF9ZWxzZXt2YXIgTz14LnNvdXJjZSxQPXgudGFyZ2V0LCQ9Ty56RGVwdGgoKSxxPVAuekRlcHRoKCk7cmV0dXJuIE1hdGgubWF4KCQscSwwKX19fX07aUMuZWFjaD1pQy5mb3JFYWNoO3ZhciBrSj1mdW5jdGlvbigpe3ZhciBnPSJ1bmRlZmluZWQiLHg9KHR5cGVvZiBTeW1ib2w+InUiPyJ1bmRlZmluZWQiOmYoU3ltYm9sKSkhPWcmJmYoU3ltYm9sLml0ZXJhdG9yKSE9Zzt4JiYoaUNbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3ZhciBUPXRoaXMsTD17dmFsdWU6dm9pZCAwLGRvbmU6ITF9LE89MCxQPXRoaXMubGVuZ3RoO3JldHVybiBiKHtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIE88UD9MLnZhbHVlPVRbTysrXTooTC52YWx1ZT12b2lkIDAsTC5kb25lPSEwKSxMfX0sU3ltYm9sLml0ZXJhdG9yLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KX0pfTtrSigpO3ZhciBFSj1SZih7bm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExfSksc0M9e2xheW91dERpbWVuc2lvbnM6ZnVuY3Rpb24oZyl7Zz1FSihnKTt2YXIgeDtpZighdGhpcy50YWtlc1VwU3BhY2UoKSl4PXt3OjAsaDowfTtlbHNlIGlmKGcubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzKXt2YXIgVD10aGlzLmJvdW5kaW5nQm94KCk7eD17dzpULncsaDpULmh9fWVsc2UgeD17dzp0aGlzLm91dGVyV2lkdGgoKSxoOnRoaXMub3V0ZXJIZWlnaHQoKX07cmV0dXJuKHgudz09PTB8fHguaD09PTApJiYoeC53PXguaD0xKSx4fSxsYXlvdXRQb3NpdGlvbnM6ZnVuY3Rpb24oZyx4LFQpe3ZhciBMPXRoaXMubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oWnQpe3JldHVybiFadC5pc1BhcmVudCgpfSksTz10aGlzLmN5KCksUD14LmVsZXMsJD1mdW5jdGlvbihZdCl7cmV0dXJuIFl0LmlkKCl9LHE9RnQoVCwkKTtnLmVtaXQoe3R5cGU6ImxheW91dHN0YXJ0IixsYXlvdXQ6Z30pLGcuYW5pbWF0aW9ucz1bXTt2YXIgUz1mdW5jdGlvbihZdCxxdCxuZSl7dmFyIEd0PXt4OnF0LngxK3F0LncvMix5OnF0LnkxK3F0LmgvMn0sZ2U9e3g6KG5lLngtR3QueCkqWXQseToobmUueS1HdC55KSpZdH07cmV0dXJue3g6R3QueCtnZS54LHk6R3QueStnZS55fX0sVj14LnNwYWNpbmdGYWN0b3ImJnguc3BhY2luZ0ZhY3RvciE9PTEsWT1mdW5jdGlvbigpe2lmKCFWKXJldHVybiBudWxsO2Zvcih2YXIgWXQ9emQoKSxxdD0wO3F0PEwubGVuZ3RoO3F0Kyspe3ZhciBuZT1MW3F0XSxHdD1xKG5lLHF0KTtSSyhZdCxHdC54LEd0LnkpfXJldHVybiBZdH0scnQ9WSgpLG90PUZ0KGZ1bmN0aW9uKFp0LFl0KXt2YXIgcXQ9cShadCxZdCk7aWYoVil7dmFyIG5lPU1hdGguYWJzKHguc3BhY2luZ0ZhY3Rvcik7cXQ9UyhuZSxydCxxdCl9cmV0dXJuIHgudHJhbnNmb3JtIT1udWxsJiYocXQ9eC50cmFuc2Zvcm0oWnQscXQpKSxxdH0sJCk7aWYoeC5hbmltYXRlKXtmb3IodmFyIGh0PTA7aHQ8TC5sZW5ndGg7aHQrKyl7dmFyIGR0PUxbaHRdLEx0PW90KGR0LGh0KSxrdD14LmFuaW1hdGVGaWx0ZXI9PW51bGx8fHguYW5pbWF0ZUZpbHRlcihkdCxodCk7aWYoa3Qpe3ZhciBEdD1kdC5hbmltYXRpb24oe3Bvc2l0aW9uOkx0LGR1cmF0aW9uOnguYW5pbWF0aW9uRHVyYXRpb24sZWFzaW5nOnguYW5pbWF0aW9uRWFzaW5nfSk7Zy5hbmltYXRpb25zLnB1c2goRHQpfWVsc2UgZHQucG9zaXRpb24oTHQpfWlmKHguZml0KXt2YXIgUHQ9Ty5hbmltYXRpb24oe2ZpdDp7Ym91bmRpbmdCb3g6UC5ib3VuZGluZ0JveEF0KG90KSxwYWRkaW5nOngucGFkZGluZ30sZHVyYXRpb246eC5hbmltYXRpb25EdXJhdGlvbixlYXNpbmc6eC5hbmltYXRpb25FYXNpbmd9KTtnLmFuaW1hdGlvbnMucHVzaChQdCl9ZWxzZSBpZih4Lnpvb20hPT12b2lkIDAmJngucGFuIT09dm9pZCAwKXt2YXIgJHQ9Ty5hbmltYXRpb24oe3pvb206eC56b29tLHBhbjp4LnBhbixkdXJhdGlvbjp4LmFuaW1hdGlvbkR1cmF0aW9uLGVhc2luZzp4LmFuaW1hdGlvbkVhc2luZ30pO2cuYW5pbWF0aW9ucy5wdXNoKCR0KX1nLmFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbihadCl7cmV0dXJuIFp0LnBsYXkoKX0pLGcub25lKCJsYXlvdXRyZWFkeSIseC5yZWFkeSksZy5lbWl0KHt0eXBlOiJsYXlvdXRyZWFkeSIsbGF5b3V0Omd9KSxleC5hbGwoZy5hbmltYXRpb25zLm1hcChmdW5jdGlvbihadCl7cmV0dXJuIFp0LnByb21pc2UoKX0pKS50aGVuKGZ1bmN0aW9uKCl7Zy5vbmUoImxheW91dHN0b3AiLHguc3RvcCksZy5lbWl0KHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6Z30pfSl9ZWxzZSBMLnBvc2l0aW9ucyhvdCkseC5maXQmJk8uZml0KHguZWxlcyx4LnBhZGRpbmcpLHguem9vbSE9bnVsbCYmTy56b29tKHguem9vbSkseC5wYW4mJk8ucGFuKHgucGFuKSxnLm9uZSgibGF5b3V0cmVhZHkiLHgucmVhZHkpLGcuZW1pdCh7dHlwZToibGF5b3V0cmVhZHkiLGxheW91dDpnfSksZy5vbmUoImxheW91dHN0b3AiLHguc3RvcCksZy5lbWl0KHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6Z30pO3JldHVybiB0aGlzfSxsYXlvdXQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5jeSgpO3JldHVybiB4Lm1ha2VMYXlvdXQoZGUoe30sZyx7ZWxlczp0aGlzfSkpfX07c0MuY3JlYXRlTGF5b3V0PXNDLm1ha2VMYXlvdXQ9c0MubGF5b3V0O2Z1bmN0aW9uIFNCKHksZyx4KXt2YXIgVD14Ll9wcml2YXRlLEw9VC5zdHlsZUNhY2hlPVQuc3R5bGVDYWNoZXx8W10sTztyZXR1cm4oTz1MW3ldKSE9bnVsbHx8KE89TFt5XT1nKHgpKSxPfWZ1bmN0aW9uIGFDKHksZyl7cmV0dXJuIHk9cmQoeSksZnVuY3Rpb24oVCl7cmV0dXJuIFNCKHksZyxUKX19ZnVuY3Rpb24gb0MoeSxnKXt5PXJkKHkpO3ZhciB4PWZ1bmN0aW9uKEwpe3JldHVybiBnLmNhbGwoTCl9O3JldHVybiBmdW5jdGlvbigpe3ZhciBMPXRoaXNbMF07aWYoTClyZXR1cm4gU0IoeSx4LEwpfX12YXIgamY9e3JlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZTpmdW5jdGlvbihnKXt2YXIgeD10aGlzLmN5KCksVD14LnJlbmRlcmVyKCksTD14LnN0eWxlRW5hYmxlZCgpO3JldHVybiBUJiZMJiZULnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0aGlzLGcpLHRoaXN9LGRpcnR5U3R5bGVDYWNoZTpmdW5jdGlvbigpe3ZhciBnPXRoaXMuY3koKSx4PWZ1bmN0aW9uKE8pe3JldHVybiBPLl9wcml2YXRlLnN0eWxlQ2FjaGU9bnVsbH07aWYoZy5oYXNDb21wb3VuZE5vZGVzKCkpe3ZhciBUO1Q9dGhpcy5zcGF3blNlbGYoKS5tZXJnZSh0aGlzLmRlc2NlbmRhbnRzKCkpLm1lcmdlKHRoaXMucGFyZW50cygpKSxULm1lcmdlKFQuY29ubmVjdGVkRWRnZXMoKSksVC5mb3JFYWNoKHgpfWVsc2UgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKEwpe3goTCksTC5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goeCl9KTtyZXR1cm4gdGhpc30sdXBkYXRlU3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZS5jeTtpZigheC5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpcztpZih4LmJhdGNoaW5nKCkpe3ZhciBUPXguX3ByaXZhdGUuYmF0Y2hTdHlsZUVsZXM7cmV0dXJuIFQubWVyZ2UodGhpcyksdGhpc312YXIgTD14Lmhhc0NvbXBvdW5kTm9kZXMoKSxPPXRoaXM7Zz0hIShnfHxnPT09dm9pZCAwKSxMJiYoTz10aGlzLnNwYXduU2VsZigpLm1lcmdlKHRoaXMuZGVzY2VuZGFudHMoKSkubWVyZ2UodGhpcy5wYXJlbnRzKCkpKTt2YXIgUD1PO3JldHVybiBnP1AuZW1pdEFuZE5vdGlmeSgic3R5bGUiKTpQLmVtaXQoInN0eWxlIiksTy5mb3JFYWNoKGZ1bmN0aW9uKCQpe3JldHVybiAkLl9wcml2YXRlLnN0eWxlRGlydHk9ITB9KSx0aGlzfSxjbGVhblN0eWxlOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5jeSgpO2lmKGcuc3R5bGVFbmFibGVkKCkpZm9yKHZhciB4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBUPXRoaXNbeF07VC5fcHJpdmF0ZS5zdHlsZURpcnR5JiYoVC5fcHJpdmF0ZS5zdHlsZURpcnR5PSExLGcuc3R5bGUoKS5hcHBseShUKSl9fSxwYXJzZWRTdHlsZTpmdW5jdGlvbihnKXt2YXIgeD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITAsVD10aGlzWzBdLEw9VC5jeSgpO2lmKEwuc3R5bGVFbmFibGVkKCkmJlQpe3RoaXMuY2xlYW5TdHlsZSgpO3ZhciBPPVQuX3ByaXZhdGUuc3R5bGVbZ107cmV0dXJuIE8/Pyh4P0wuc3R5bGUoKS5nZXREZWZhdWx0UHJvcGVydHkoZyk6bnVsbCl9fSxudW1lcmljU3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpc1swXTtpZih4LmN5KCkuc3R5bGVFbmFibGVkKCkmJngpe3ZhciBUPXgucHN0eWxlKGcpO3JldHVybiBULnBmVmFsdWUhPT12b2lkIDA/VC5wZlZhbHVlOlQudmFsdWV9fSxudW1lcmljU3R5bGVVbml0czpmdW5jdGlvbihnKXt2YXIgeD10aGlzWzBdO2lmKHguY3koKS5zdHlsZUVuYWJsZWQoKSYmeClyZXR1cm4geC5wc3R5bGUoZykudW5pdHN9LHJlbmRlcmVkU3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5jeSgpO2lmKCF4LnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO3ZhciBUPXRoaXNbMF07aWYoVClyZXR1cm4geC5zdHlsZSgpLmdldFJlbmRlcmVkU3R5bGUoVCxnKX0sc3R5bGU6ZnVuY3Rpb24oZyx4KXt2YXIgVD10aGlzLmN5KCk7aWYoIVQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIEw9ITEsTz1ULnN0eWxlKCk7aWYodXQoZykpe3ZhciBQPWc7Ty5hcHBseUJ5cGFzcyh0aGlzLFAsTCksdGhpcy5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpfWVsc2UgaWYobXQoZykpaWYoeD09PXZvaWQgMCl7dmFyICQ9dGhpc1swXTtyZXR1cm4gJD9PLmdldFN0eWxlUHJvcGVydHlWYWx1ZSgkLGcpOnZvaWQgMH1lbHNlIE8uYXBwbHlCeXBhc3ModGhpcyxnLHgsTCksdGhpcy5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpO2Vsc2UgaWYoZz09PXZvaWQgMCl7dmFyIHE9dGhpc1swXTtyZXR1cm4gcT9PLmdldFJhd1N0eWxlKHEpOnZvaWQgMH1yZXR1cm4gdGhpc30scmVtb3ZlU3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5jeSgpO2lmKCF4LnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO3ZhciBUPSExLEw9eC5zdHlsZSgpLE89dGhpcztpZihnPT09dm9pZCAwKWZvcih2YXIgUD0wO1A8Ty5sZW5ndGg7UCsrKXt2YXIgJD1PW1BdO0wucmVtb3ZlQWxsQnlwYXNzZXMoJCxUKX1lbHNle2c9Zy5zcGxpdCgvXHMrLyk7Zm9yKHZhciBxPTA7cTxPLmxlbmd0aDtxKyspe3ZhciBTPU9bcV07TC5yZW1vdmVCeXBhc3NlcyhTLGcsVCl9fXJldHVybiB0aGlzLmVtaXRBbmROb3RpZnkoInN0eWxlIiksdGhpc30sc2hvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNzcygiZGlzcGxheSIsImVsZW1lbnQiKSx0aGlzfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3NzKCJkaXNwbGF5Iiwibm9uZSIpLHRoaXN9LGVmZmVjdGl2ZU9wYWNpdHk6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLmN5KCk7aWYoIWcuc3R5bGVFbmFibGVkKCkpcmV0dXJuIDE7dmFyIHg9Zy5oYXNDb21wb3VuZE5vZGVzKCksVD10aGlzWzBdO2lmKFQpe3ZhciBMPVQuX3ByaXZhdGUsTz1ULnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlO2lmKCF4KXJldHVybiBPO3ZhciBQPUwuZGF0YS5wYXJlbnQ/VC5wYXJlbnRzKCk6bnVsbDtpZihQKWZvcih2YXIgJD0wOyQ8UC5sZW5ndGg7JCsrKXt2YXIgcT1QWyRdLFM9cS5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZTtPPVMqT31yZXR1cm4gT319LHRyYW5zcGFyZW50OmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5jeSgpO2lmKCFnLnN0eWxlRW5hYmxlZCgpKXJldHVybiExO3ZhciB4PXRoaXNbMF0sVD14LmN5KCkuaGFzQ29tcG91bmROb2RlcygpO2lmKHgpcmV0dXJuIFQ/eC5lZmZlY3RpdmVPcGFjaXR5KCk9PT0wOngucHN0eWxlKCJvcGFjaXR5IikudmFsdWU9PT0wfSxiYWNrZ3JvdW5kaW5nOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5jeSgpO2lmKCFnLnN0eWxlRW5hYmxlZCgpKXJldHVybiExO3ZhciB4PXRoaXNbMF07cmV0dXJuISF4Ll9wcml2YXRlLmJhY2tncm91bmRpbmd9fTtmdW5jdGlvbiBWTCh5LGcpe3ZhciB4PXkuX3ByaXZhdGUsVD14LmRhdGEucGFyZW50P3kucGFyZW50cygpOm51bGw7aWYoVClmb3IodmFyIEw9MDtMPFQubGVuZ3RoO0wrKyl7dmFyIE89VFtMXTtpZighZyhPKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBHTCh5KXt2YXIgZz15Lm9rLHg9eS5lZGdlT2tWaWFOb2RlfHx5Lm9rLFQ9eS5wYXJlbnRPa3x8eS5vaztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgTD10aGlzLmN5KCk7aWYoIUwuc3R5bGVFbmFibGVkKCkpcmV0dXJuITA7dmFyIE89dGhpc1swXSxQPUwuaGFzQ29tcG91bmROb2RlcygpO2lmKE8pe3ZhciAkPU8uX3ByaXZhdGU7aWYoIWcoTykpcmV0dXJuITE7aWYoTy5pc05vZGUoKSlyZXR1cm4hUHx8VkwoTyxUKTt2YXIgcT0kLnNvdXJjZSxTPSQudGFyZ2V0O3JldHVybiB4KHEpJiYoIVB8fFZMKHEseCkpJiYocT09PVN8fHgoUykmJighUHx8VkwoUyx4KSkpfX19dmFyIGx4PWFDKCJlbGVUYWtlc1VwU3BhY2UiLGZ1bmN0aW9uKHkpe3JldHVybiB5LnBzdHlsZSgiZGlzcGxheSIpLnZhbHVlPT09ImVsZW1lbnQiJiZ5LndpZHRoKCkhPT0wJiYoeS5pc05vZGUoKT95LmhlaWdodCgpIT09MDohMCl9KTtqZi50YWtlc1VwU3BhY2U9b0MoInRha2VzVXBTcGFjZSIsR0woe29rOmx4fSkpO3ZhciBUSj1hQygiZWxlSW50ZXJhY3RpdmUiLGZ1bmN0aW9uKHkpe3JldHVybiB5LnBzdHlsZSgiZXZlbnRzIikudmFsdWU9PT0ieWVzIiYmeS5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmbHgoeSl9KSxDSj1hQygicGFyZW50SW50ZXJhY3RpdmUiLGZ1bmN0aW9uKHkpe3JldHVybiB5LnBzdHlsZSgidmlzaWJpbGl0eSIpLnZhbHVlPT09InZpc2libGUiJiZseCh5KX0pO2pmLmludGVyYWN0aXZlPW9DKCJpbnRlcmFjdGl2ZSIsR0woe29rOlRKLHBhcmVudE9rOkNKLGVkZ2VPa1ZpYU5vZGU6bHh9KSksamYubm9uaW50ZXJhY3RpdmU9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO2lmKHkpcmV0dXJuIXkuaW50ZXJhY3RpdmUoKX07dmFyIF9KPWFDKCJlbGVWaXNpYmxlIixmdW5jdGlvbih5KXtyZXR1cm4geS5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmeS5wc3R5bGUoIm9wYWNpdHkiKS5wZlZhbHVlIT09MCYmbHgoeSl9KSxTSj1seDtqZi52aXNpYmxlPW9DKCJ2aXNpYmxlIixHTCh7b2s6X0osZWRnZU9rVmlhTm9kZTpTSn0pKSxqZi5oaWRkZW49ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO2lmKHkpcmV0dXJuIXkudmlzaWJsZSgpfSxqZi5pc0J1bmRsZWRCZXppZXI9b0MoImlzQnVuZGxlZEJlemllciIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jeSgpLnN0eWxlRW5hYmxlZCgpPyF0aGlzLnJlbW92ZWQoKSYmdGhpcy5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWU9PT0iYmV6aWVyIiYmdGhpcy50YWtlc1VwU3BhY2UoKTohMX0pLGpmLmJ5cGFzcz1qZi5jc3M9amYuc3R5bGUsamYucmVuZGVyZWRDc3M9amYucmVuZGVyZWRTdHlsZSxqZi5yZW1vdmVCeXBhc3M9amYucmVtb3ZlQ3NzPWpmLnJlbW92ZVN0eWxlLGpmLnBzdHlsZT1qZi5wYXJzZWRTdHlsZTt2YXIgX209e307ZnVuY3Rpb24gQUIoeSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGc9YXJndW1lbnRzLHg9W107aWYoZy5sZW5ndGg9PT0yKXt2YXIgVD1nWzBdLEw9Z1sxXTt0aGlzLm9uKHkuZXZlbnQsVCxMKX1lbHNlIGlmKGcubGVuZ3RoPT09MSYmeXQoZ1swXSkpe3ZhciBPPWdbMF07dGhpcy5vbih5LmV2ZW50LE8pfWVsc2UgaWYoZy5sZW5ndGg9PT0wfHxnLmxlbmd0aD09PTEmJmZ0KGdbMF0pKXtmb3IodmFyIFA9Zy5sZW5ndGg9PT0xP2dbMF06bnVsbCwkPTA7JDx0aGlzLmxlbmd0aDskKyspe3ZhciBxPXRoaXNbJF0sUz0heS5hYmxlRmllbGR8fHEuX3ByaXZhdGVbeS5hYmxlRmllbGRdLFY9cS5fcHJpdmF0ZVt5LmZpZWxkXSE9eS52YWx1ZTtpZih5Lm92ZXJyaWRlQWJsZSl7dmFyIFk9eS5vdmVycmlkZUFibGUocSk7aWYoWSE9PXZvaWQgMCYmKFM9WSwhWSkpcmV0dXJuIHRoaXN9UyYmKHEuX3ByaXZhdGVbeS5maWVsZF09eS52YWx1ZSxWJiZ4LnB1c2gocSkpfXZhciBydD10aGlzLnNwYXduKHgpO3J0LnVwZGF0ZVN0eWxlKCkscnQuZW1pdCh5LmV2ZW50KSxQJiZydC5lbWl0KFApfXJldHVybiB0aGlzfX1mdW5jdGlvbiBoeCh5KXtfbVt5LmZpZWxkXT1mdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZyl7aWYoeS5vdmVycmlkZUZpZWxkKXt2YXIgeD15Lm92ZXJyaWRlRmllbGQoZyk7aWYoeCE9PXZvaWQgMClyZXR1cm4geH1yZXR1cm4gZy5fcHJpdmF0ZVt5LmZpZWxkXX19LF9tW3kub25dPUFCKHtldmVudDp5Lm9uLGZpZWxkOnkuZmllbGQsYWJsZUZpZWxkOnkuYWJsZUZpZWxkLG92ZXJyaWRlQWJsZTp5Lm92ZXJyaWRlQWJsZSx2YWx1ZTohMH0pLF9tW3kub2ZmXT1BQih7ZXZlbnQ6eS5vZmYsZmllbGQ6eS5maWVsZCxhYmxlRmllbGQ6eS5hYmxlRmllbGQsb3ZlcnJpZGVBYmxlOnkub3ZlcnJpZGVBYmxlLHZhbHVlOiExfSl9aHgoe2ZpZWxkOiJsb2NrZWQiLG92ZXJyaWRlRmllbGQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuY3koKS5hdXRvbG9jaygpPyEwOnZvaWQgMH0sb246ImxvY2siLG9mZjoidW5sb2NrIn0pLGh4KHtmaWVsZDoiZ3JhYmJhYmxlIixvdmVycmlkZUZpZWxkOmZ1bmN0aW9uKGcpe3JldHVybiBnLmN5KCkuYXV0b3VuZ3JhYmlmeSgpfHxnLnBhbm5hYmxlKCk/ITE6dm9pZCAwfSxvbjoiZ3JhYmlmeSIsb2ZmOiJ1bmdyYWJpZnkifSksaHgoe2ZpZWxkOiJzZWxlY3RlZCIsYWJsZUZpZWxkOiJzZWxlY3RhYmxlIixvdmVycmlkZUFibGU6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuY3koKS5hdXRvdW5zZWxlY3RpZnkoKT8hMTp2b2lkIDB9LG9uOiJzZWxlY3QiLG9mZjoidW5zZWxlY3QifSksaHgoe2ZpZWxkOiJzZWxlY3RhYmxlIixvdmVycmlkZUZpZWxkOmZ1bmN0aW9uKGcpe3JldHVybiBnLmN5KCkuYXV0b3Vuc2VsZWN0aWZ5KCk/ITE6dm9pZCAwfSxvbjoic2VsZWN0aWZ5IixvZmY6InVuc2VsZWN0aWZ5In0pLF9tLmRlc2VsZWN0PV9tLnVuc2VsZWN0LF9tLmdyYWJiZWQ9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO2lmKHkpcmV0dXJuIHkuX3ByaXZhdGUuZ3JhYmJlZH0saHgoe2ZpZWxkOiJhY3RpdmUiLG9uOiJhY3RpdmF0ZSIsb2ZmOiJ1bmFjdGl2YXRlIn0pLGh4KHtmaWVsZDoicGFubmFibGUiLG9uOiJwYW5pZnkiLG9mZjoidW5wYW5pZnkifSksX20uaW5hY3RpdmU9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO2lmKHkpcmV0dXJuIXkuX3ByaXZhdGUuYWN0aXZlfTt2YXIgZDE9e30sTEI9ZnVuY3Rpb24oZyl7cmV0dXJuIGZ1bmN0aW9uKFQpe2Zvcih2YXIgTD10aGlzLE89W10sUD0wO1A8TC5sZW5ndGg7UCsrKXt2YXIgJD1MW1BdO2lmKCQuaXNOb2RlKCkpe2Zvcih2YXIgcT0hMSxTPSQuY29ubmVjdGVkRWRnZXMoKSxWPTA7VjxTLmxlbmd0aDtWKyspe3ZhciBZPVNbVl0scnQ9WS5zb3VyY2UoKSxvdD1ZLnRhcmdldCgpO2lmKGcubm9JbmNvbWluZ0VkZ2VzJiZvdD09PSQmJnJ0IT09JHx8Zy5ub091dGdvaW5nRWRnZXMmJnJ0PT09JCYmb3QhPT0kKXtxPSEwO2JyZWFrfX1xfHxPLnB1c2goJCl9fXJldHVybiB0aGlzLnNwYXduKE8sITApLmZpbHRlcihUKX19LE1CPWZ1bmN0aW9uKGcpe3JldHVybiBmdW5jdGlvbih4KXtmb3IodmFyIFQ9dGhpcyxMPVtdLE89MDtPPFQubGVuZ3RoO08rKyl7dmFyIFA9VFtPXTtpZihQLmlzTm9kZSgpKWZvcih2YXIgJD1QLmNvbm5lY3RlZEVkZ2VzKCkscT0wO3E8JC5sZW5ndGg7cSsrKXt2YXIgUz0kW3FdLFY9Uy5zb3VyY2UoKSxZPVMudGFyZ2V0KCk7Zy5vdXRnb2luZyYmVj09PVA/KEwucHVzaChTKSxMLnB1c2goWSkpOmcuaW5jb21pbmcmJlk9PT1QJiYoTC5wdXNoKFMpLEwucHVzaChWKSl9fXJldHVybiB0aGlzLnNwYXduKEwsITApLmZpbHRlcih4KX19LERCPWZ1bmN0aW9uKGcpe3JldHVybiBmdW5jdGlvbih4KXtmb3IodmFyIFQ9dGhpcyxMPVtdLE89e307Oyl7dmFyIFA9Zy5vdXRnb2luZz9ULm91dGdvZXJzKCk6VC5pbmNvbWVycygpO2lmKFAubGVuZ3RoPT09MClicmVhaztmb3IodmFyICQ9ITEscT0wO3E8UC5sZW5ndGg7cSsrKXt2YXIgUz1QW3FdLFY9Uy5pZCgpO09bVl18fChPW1ZdPSEwLEwucHVzaChTKSwkPSEwKX1pZighJClicmVhaztUPVB9cmV0dXJuIHRoaXMuc3Bhd24oTCwhMCkuZmlsdGVyKHgpfX07ZDEuY2xlYXJUcmF2ZXJzYWxDYWNoZT1mdW5jdGlvbigpe2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKXRoaXNbeV0uX3ByaXZhdGUudHJhdmVyc2FsQ2FjaGU9bnVsbH0sZGUoZDEse3Jvb3RzOkxCKHtub0luY29taW5nRWRnZXM6ITB9KSxsZWF2ZXM6TEIoe25vT3V0Z29pbmdFZGdlczohMH0pLG91dGdvZXJzOmFkKE1CKHtvdXRnb2luZzohMH0pLCJvdXRnb2VycyIpLHN1Y2Nlc3NvcnM6REIoe291dGdvaW5nOiEwfSksaW5jb21lcnM6YWQoTUIoe2luY29taW5nOiEwfSksImluY29tZXJzIikscHJlZGVjZXNzb3JzOkRCKHtpbmNvbWluZzohMH0pfSksZGUoZDEse25laWdoYm9yaG9vZDphZChmdW5jdGlvbih5KXtmb3IodmFyIGc9W10seD10aGlzLm5vZGVzKCksVD0wO1Q8eC5sZW5ndGg7VCsrKWZvcih2YXIgTD14W1RdLE89TC5jb25uZWN0ZWRFZGdlcygpLFA9MDtQPE8ubGVuZ3RoO1ArKyl7dmFyICQ9T1tQXSxxPSQuc291cmNlKCksUz0kLnRhcmdldCgpLFY9TD09PXE/UzpxO1YubGVuZ3RoPjAmJmcucHVzaChWWzBdKSxnLnB1c2goJFswXSl9cmV0dXJuIHRoaXMuc3Bhd24oZywhMCkuZmlsdGVyKHkpfSwibmVpZ2hib3Job29kIiksY2xvc2VkTmVpZ2hib3Job29kOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm5laWdoYm9yaG9vZCgpLmFkZCh0aGlzKS5maWx0ZXIoZyl9LG9wZW5OZWlnaGJvcmhvb2Q6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubmVpZ2hib3Job29kKGcpfX0pLGQxLm5laWdoYm91cmhvb2Q9ZDEubmVpZ2hib3Job29kLGQxLmNsb3NlZE5laWdoYm91cmhvb2Q9ZDEuY2xvc2VkTmVpZ2hib3Job29kLGQxLm9wZW5OZWlnaGJvdXJob29kPWQxLm9wZW5OZWlnaGJvcmhvb2QsZGUoZDEse3NvdXJjZTphZChmdW5jdGlvbihnKXt2YXIgeD10aGlzWzBdLFQ7cmV0dXJuIHgmJihUPXguX3ByaXZhdGUuc291cmNlfHx4LmN5KCkuY29sbGVjdGlvbigpKSxUJiZnP1QuZmlsdGVyKGcpOlR9LCJzb3VyY2UiKSx0YXJnZXQ6YWQoZnVuY3Rpb24oZyl7dmFyIHg9dGhpc1swXSxUO3JldHVybiB4JiYoVD14Ll9wcml2YXRlLnRhcmdldHx8eC5jeSgpLmNvbGxlY3Rpb24oKSksVCYmZz9ULmZpbHRlcihnKTpUfSwidGFyZ2V0Iiksc291cmNlczpJQih7YXR0cjoic291cmNlIn0pLHRhcmdldHM6SUIoe2F0dHI6InRhcmdldCJ9KX0pO2Z1bmN0aW9uIElCKHkpe3JldHVybiBmdW5jdGlvbih4KXtmb3IodmFyIFQ9W10sTD0wO0w8dGhpcy5sZW5ndGg7TCsrKXt2YXIgTz10aGlzW0xdLFA9Ty5fcHJpdmF0ZVt5LmF0dHJdO1AmJlQucHVzaChQKX1yZXR1cm4gdGhpcy5zcGF3bihULCEwKS5maWx0ZXIoeCl9fWRlKGQxLHtlZGdlc1dpdGg6YWQoT0IoKSwiZWRnZXNXaXRoIiksZWRnZXNUbzphZChPQih7dGhpc0lzU3JjOiEwfSksImVkZ2VzVG8iKX0pO2Z1bmN0aW9uIE9CKHkpe3JldHVybiBmdW5jdGlvbih4KXt2YXIgVD1bXSxMPXRoaXMuX3ByaXZhdGUuY3ksTz15fHx7fTttdCh4KSYmKHg9TC4kKHgpKTtmb3IodmFyIFA9MDtQPHgubGVuZ3RoO1ArKylmb3IodmFyICQ9eFtQXS5fcHJpdmF0ZS5lZGdlcyxxPTA7cTwkLmxlbmd0aDtxKyspe3ZhciBTPSRbcV0sVj1TLl9wcml2YXRlLmRhdGEsWT10aGlzLmhhc0VsZW1lbnRXaXRoSWQoVi5zb3VyY2UpJiZ4Lmhhc0VsZW1lbnRXaXRoSWQoVi50YXJnZXQpLHJ0PXguaGFzRWxlbWVudFdpdGhJZChWLnNvdXJjZSkmJnRoaXMuaGFzRWxlbWVudFdpdGhJZChWLnRhcmdldCksb3Q9WXx8cnQ7b3QmJigoTy50aGlzSXNTcmN8fE8udGhpc0lzVGd0KSYmKE8udGhpc0lzU3JjJiYhWXx8Ty50aGlzSXNUZ3QmJiFydCl8fFQucHVzaChTKSl9cmV0dXJuIHRoaXMuc3Bhd24oVCwhMCl9fWRlKGQxLHtjb25uZWN0ZWRFZGdlczphZChmdW5jdGlvbih5KXtmb3IodmFyIGc9W10seD10aGlzLFQ9MDtUPHgubGVuZ3RoO1QrKyl7dmFyIEw9eFtUXTtpZihMLmlzTm9kZSgpKWZvcih2YXIgTz1MLl9wcml2YXRlLmVkZ2VzLFA9MDtQPE8ubGVuZ3RoO1ArKyl7dmFyICQ9T1tQXTtnLnB1c2goJCl9fXJldHVybiB0aGlzLnNwYXduKGcsITApLmZpbHRlcih5KX0sImNvbm5lY3RlZEVkZ2VzIiksY29ubmVjdGVkTm9kZXM6YWQoZnVuY3Rpb24oeSl7Zm9yKHZhciBnPVtdLHg9dGhpcyxUPTA7VDx4Lmxlbmd0aDtUKyspe3ZhciBMPXhbVF07TC5pc0VkZ2UoKSYmKGcucHVzaChMLnNvdXJjZSgpWzBdKSxnLnB1c2goTC50YXJnZXQoKVswXSkpfXJldHVybiB0aGlzLnNwYXduKGcsITApLmZpbHRlcih5KX0sImNvbm5lY3RlZE5vZGVzIikscGFyYWxsZWxFZGdlczphZChQQigpLCJwYXJhbGxlbEVkZ2VzIiksY29kaXJlY3RlZEVkZ2VzOmFkKFBCKHtjb2RpcmVjdGVkOiEwfSksImNvZGlyZWN0ZWRFZGdlcyIpfSk7ZnVuY3Rpb24gUEIoeSl7dmFyIGc9e2NvZGlyZWN0ZWQ6ITF9O3JldHVybiB5PWRlKHt9LGcseSksZnVuY3Rpb24oVCl7Zm9yKHZhciBMPVtdLE89dGhpcy5lZGdlcygpLFA9eSwkPTA7JDxPLmxlbmd0aDskKyspZm9yKHZhciBxPU9bJF0sUz1xLl9wcml2YXRlLFY9Uy5zb3VyY2UsWT1WLl9wcml2YXRlLmRhdGEuaWQscnQ9Uy5kYXRhLnRhcmdldCxvdD1WLl9wcml2YXRlLmVkZ2VzLGh0PTA7aHQ8b3QubGVuZ3RoO2h0Kyspe3ZhciBkdD1vdFtodF0sTHQ9ZHQuX3ByaXZhdGUuZGF0YSxrdD1MdC50YXJnZXQsRHQ9THQuc291cmNlLFB0PWt0PT09cnQmJkR0PT09WSwkdD1ZPT09a3QmJnJ0PT09RHQ7KFAuY29kaXJlY3RlZCYmUHR8fCFQLmNvZGlyZWN0ZWQmJihQdHx8JHQpKSYmTC5wdXNoKGR0KX1yZXR1cm4gdGhpcy5zcGF3bihMLCEwKS5maWx0ZXIoVCl9fWRlKGQxLHtjb21wb25lbnRzOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMsVD14LmN5KCksTD1ULmNvbGxlY3Rpb24oKSxPPWc9PW51bGw/eC5ub2RlcygpOmcubm9kZXMoKSxQPVtdO2chPW51bGwmJk8uZW1wdHkoKSYmKE89Zy5zb3VyY2VzKCkpO3ZhciAkPWZ1bmN0aW9uKFYsWSl7TC5tZXJnZShWKSxPLnVubWVyZ2UoViksWS5tZXJnZShWKX07aWYoTy5lbXB0eSgpKXJldHVybiB4LnNwYXduKCk7dmFyIHE9ZnVuY3Rpb24oKXt2YXIgVj1ULmNvbGxlY3Rpb24oKTtQLnB1c2goVik7dmFyIFk9T1swXTskKFksVikseC5iZnMoe2RpcmVjdGVkOiExLHJvb3RzOlksdmlzaXQ6ZnVuY3Rpb24ob3Qpe3JldHVybiAkKG90LFYpfX0pLFYuZm9yRWFjaChmdW5jdGlvbihydCl7cnQuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKG90KXt4LmhhcyhvdCkmJlYuaGFzKG90LnNvdXJjZSgpKSYmVi5oYXMob3QudGFyZ2V0KCkpJiZWLm1lcmdlKG90KX0pfSl9O2RvIHEoKTt3aGlsZShPLmxlbmd0aD4wKTtyZXR1cm4gUH0sY29tcG9uZW50OmZ1bmN0aW9uKCl7dmFyIGc9dGhpc1swXTtyZXR1cm4gZy5jeSgpLm11dGFibGVFbGVtZW50cygpLmNvbXBvbmVudHMoZylbMF19fSksZDEuY29tcG9uZW50c09mPWQxLmNvbXBvbmVudHM7dmFyICRmPWZ1bmN0aW9uKGcseCl7dmFyIFQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLEw9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExO2lmKGc9PT12b2lkIDApe3ZsKCJBIGNvbGxlY3Rpb24gbXVzdCBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBjb3JlIik7cmV0dXJufXZhciBPPW5ldyBHYixQPSExO2lmKCF4KXg9W107ZWxzZSBpZih4Lmxlbmd0aD4wJiZ1dCh4WzBdKSYmIW50KHhbMF0pKXtQPSEwO2Zvcih2YXIgJD1bXSxxPW5ldyBZNSxTPTAsVj14Lmxlbmd0aDtTPFY7UysrKXt2YXIgWT14W1NdO1kuZGF0YT09bnVsbCYmKFkuZGF0YT17fSk7dmFyIHJ0PVkuZGF0YTtpZihydC5pZD09bnVsbClydC5pZD1QVCgpO2Vsc2UgaWYoZy5oYXNFbGVtZW50V2l0aElkKHJ0LmlkKXx8cS5oYXMocnQuaWQpKWNvbnRpbnVlO3ZhciBvdD1uZXcgRlQoZyxZLCExKTskLnB1c2gob3QpLHEuYWRkKHJ0LmlkKX14PSR9dGhpcy5sZW5ndGg9MDtmb3IodmFyIGh0PTAsZHQ9eC5sZW5ndGg7aHQ8ZHQ7aHQrKyl7dmFyIEx0PXhbaHRdWzBdO2lmKEx0IT1udWxsKXt2YXIga3Q9THQuX3ByaXZhdGUuZGF0YS5pZDsoIVR8fCFPLmhhcyhrdCkpJiYoVCYmTy5zZXQoa3Qse2luZGV4OnRoaXMubGVuZ3RoLGVsZTpMdH0pLHRoaXNbdGhpcy5sZW5ndGhdPUx0LHRoaXMubGVuZ3RoKyspfX10aGlzLl9wcml2YXRlPXtlbGVzOnRoaXMsY3k6ZyxnZXQgbWFwKCl7cmV0dXJuIHRoaXMubGF6eU1hcD09bnVsbCYmdGhpcy5yZWJ1aWxkTWFwKCksdGhpcy5sYXp5TWFwfSxzZXQgbWFwKER0KXt0aGlzLmxhenlNYXA9RHR9LHJlYnVpbGRNYXA6ZnVuY3Rpb24oKXtmb3IodmFyIFB0PXRoaXMubGF6eU1hcD1uZXcgR2IsJHQ9dGhpcy5lbGVzLFp0PTA7WnQ8JHQubGVuZ3RoO1p0Kyspe3ZhciBZdD0kdFtadF07UHQuc2V0KFl0LmlkKCkse2luZGV4Olp0LGVsZTpZdH0pfX19LFQmJih0aGlzLl9wcml2YXRlLm1hcD1PKSxQJiYhTCYmdGhpcy5yZXN0b3JlKCl9LGR1PUZULnByb3RvdHlwZT0kZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShBcnJheS5wcm90b3R5cGUpO2R1Lmluc3RhbmNlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuImNvbGxlY3Rpb24ifSxkdS5zcGF3bj1mdW5jdGlvbih5LGcpe3JldHVybiBuZXcgJGYodGhpcy5jeSgpLHksZyl9LGR1LnNwYXduU2VsZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNwYXduKHRoaXMpfSxkdS5jeT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmN5fSxkdS5yZW5kZXJlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmN5LnJlbmRlcmVyKCl9LGR1LmVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1swXX0sZHUuY29sbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiBJdCh0aGlzKT90aGlzOm5ldyAkZih0aGlzLl9wcml2YXRlLmN5LFt0aGlzXSl9LGR1LnVuaXF1ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgJGYodGhpcy5fcHJpdmF0ZS5jeSx0aGlzLCEwKX0sZHUuaGFzRWxlbWVudFdpdGhJZD1mdW5jdGlvbih5KXtyZXR1cm4geT0iIit5LHRoaXMuX3ByaXZhdGUubWFwLmhhcyh5KX0sZHUuZ2V0RWxlbWVudEJ5SWQ9ZnVuY3Rpb24oeSl7eT0iIit5O3ZhciBnPXRoaXMuX3ByaXZhdGUuY3kseD10aGlzLl9wcml2YXRlLm1hcC5nZXQoeSk7cmV0dXJuIHg/eC5lbGU6bmV3ICRmKGcpfSxkdS4kaWQ9ZHUuZ2V0RWxlbWVudEJ5SWQsZHUucG9vbEluZGV4PWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5fcHJpdmF0ZS5jeSxnPXkuX3ByaXZhdGUuZWxlbWVudHMseD10aGlzWzBdLl9wcml2YXRlLmRhdGEuaWQ7cmV0dXJuIGcuX3ByaXZhdGUubWFwLmdldCh4KS5pbmRleH0sZHUuaW5kZXhPZj1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLmRhdGEuaWQ7cmV0dXJuIHRoaXMuX3ByaXZhdGUubWFwLmdldChnKS5pbmRleH0sZHUuaW5kZXhPZklkPWZ1bmN0aW9uKHkpe3JldHVybiB5PSIiK3ksdGhpcy5fcHJpdmF0ZS5tYXAuZ2V0KHkpLmluZGV4fSxkdS5qc29uPWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMuZWxlbWVudCgpLHg9dGhpcy5jeSgpO2lmKGc9PW51bGwmJnkpcmV0dXJuIHRoaXM7aWYoZyE9bnVsbCl7dmFyIFQ9Zy5fcHJpdmF0ZTtpZih1dCh5KSl7aWYoeC5zdGFydEJhdGNoKCkseS5kYXRhKXtnLmRhdGEoeS5kYXRhKTt2YXIgTD1ULmRhdGE7aWYoZy5pc0VkZ2UoKSl7dmFyIE89ITEsUD17fSwkPXkuZGF0YS5zb3VyY2UscT15LmRhdGEudGFyZ2V0OyQhPW51bGwmJiQhPUwuc291cmNlJiYoUC5zb3VyY2U9IiIrJCxPPSEwKSxxIT1udWxsJiZxIT1MLnRhcmdldCYmKFAudGFyZ2V0PSIiK3EsTz0hMCksTyYmKGc9Zy5tb3ZlKFApKX1lbHNle3ZhciBTPSJwYXJlbnQiaW4geS5kYXRhLFY9eS5kYXRhLnBhcmVudDtTJiYoViE9bnVsbHx8TC5wYXJlbnQhPW51bGwpJiZWIT1MLnBhcmVudCYmKFY9PT12b2lkIDAmJihWPW51bGwpLFYhPW51bGwmJihWPSIiK1YpLGc9Zy5tb3ZlKHtwYXJlbnQ6Vn0pKX19eS5wb3NpdGlvbiYmZy5wb3NpdGlvbih5LnBvc2l0aW9uKTt2YXIgWT1mdW5jdGlvbihkdCxMdCxrdCl7dmFyIER0PXlbZHRdO0R0IT1udWxsJiZEdCE9PVRbZHRdJiYoRHQ/Z1tMdF0oKTpnW2t0XSgpKX07cmV0dXJuIFkoInJlbW92ZWQiLCJyZW1vdmUiLCJyZXN0b3JlIiksWSgic2VsZWN0ZWQiLCJzZWxlY3QiLCJ1bnNlbGVjdCIpLFkoInNlbGVjdGFibGUiLCJzZWxlY3RpZnkiLCJ1bnNlbGVjdGlmeSIpLFkoImxvY2tlZCIsImxvY2siLCJ1bmxvY2siKSxZKCJncmFiYmFibGUiLCJncmFiaWZ5IiwidW5ncmFiaWZ5IiksWSgicGFubmFibGUiLCJwYW5pZnkiLCJ1bnBhbmlmeSIpLHkuY2xhc3NlcyE9bnVsbCYmZy5jbGFzc2VzKHkuY2xhc3NlcykseC5lbmRCYXRjaCgpLHRoaXN9ZWxzZSBpZih5PT09dm9pZCAwKXt2YXIgcnQ9e2RhdGE6VmIoVC5kYXRhKSxwb3NpdGlvbjpWYihULnBvc2l0aW9uKSxncm91cDpULmdyb3VwLHJlbW92ZWQ6VC5yZW1vdmVkLHNlbGVjdGVkOlQuc2VsZWN0ZWQsc2VsZWN0YWJsZTpULnNlbGVjdGFibGUsbG9ja2VkOlQubG9ja2VkLGdyYWJiYWJsZTpULmdyYWJiYWJsZSxwYW5uYWJsZTpULnBhbm5hYmxlLGNsYXNzZXM6bnVsbH07cnQuY2xhc3Nlcz0iIjt2YXIgb3Q9MDtyZXR1cm4gVC5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24oaHQpe3JldHVybiBydC5jbGFzc2VzKz1vdCsrPT09MD9odDoiICIraHR9KSxydH19fSxkdS5qc29ucz1mdW5jdGlvbigpe2Zvcih2YXIgeT1bXSxnPTA7Zzx0aGlzLmxlbmd0aDtnKyspe3ZhciB4PXRoaXNbZ10sVD14Lmpzb24oKTt5LnB1c2goVCl9cmV0dXJuIHl9LGR1LmNsb25lPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PXRoaXMuY3koKSxnPVtdLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIFQ9dGhpc1t4XSxMPVQuanNvbigpLE89bmV3IEZUKHksTCwhMSk7Zy5wdXNoKE8pfXJldHVybiBuZXcgJGYoeSxnKX0sZHUuY29weT1kdS5jbG9uZSxkdS5yZXN0b3JlPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxnPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCx4PXRoaXMsVD14LmN5KCksTD1ULl9wcml2YXRlLE89W10sUD1bXSwkLHE9MCxTPXgubGVuZ3RoO3E8UztxKyspe3ZhciBWPXhbcV07ZyYmIVYucmVtb3ZlZCgpfHwoVi5pc05vZGUoKT9PLnB1c2goVik6UC5wdXNoKFYpKX0kPU8uY29uY2F0KFApO3ZhciBZLHJ0PWZ1bmN0aW9uKCl7JC5zcGxpY2UoWSwxKSxZLS19O2ZvcihZPTA7WTwkLmxlbmd0aDtZKyspe3ZhciBvdD0kW1ldLGh0PW90Ll9wcml2YXRlLGR0PWh0LmRhdGE7aWYob3QuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpLCEoIWcmJiFodC5yZW1vdmVkKSl7aWYoZHQuaWQ9PT12b2lkIDApZHQuaWQ9UFQoKTtlbHNlIGlmKFgoZHQuaWQpKWR0LmlkPSIiK2R0LmlkO2Vsc2UgaWYoWihkdC5pZCl8fCFtdChkdC5pZCkpe3ZsKCJDYW4gbm90IGNyZWF0ZSBlbGVtZW50IHdpdGggaW52YWxpZCBzdHJpbmcgSUQgYCIrZHQuaWQrImAiKSxydCgpO2NvbnRpbnVlfWVsc2UgaWYoVC5oYXNFbGVtZW50V2l0aElkKGR0LmlkKSl7dmwoIkNhbiBub3QgY3JlYXRlIHNlY29uZCBlbGVtZW50IHdpdGggSUQgYCIrZHQuaWQrImAiKSxydCgpO2NvbnRpbnVlfX12YXIgTHQ9ZHQuaWQ7aWYob3QuaXNOb2RlKCkpe3ZhciBrdD1odC5wb3NpdGlvbjtrdC54PT1udWxsJiYoa3QueD0wKSxrdC55PT1udWxsJiYoa3QueT0wKX1pZihvdC5pc0VkZ2UoKSl7Zm9yKHZhciBEdD1vdCxQdD1bInNvdXJjZSIsInRhcmdldCJdLCR0PVB0Lmxlbmd0aCxadD0hMSxZdD0wO1l0PCR0O1l0Kyspe3ZhciBxdD1QdFtZdF0sbmU9ZHRbcXRdO1gobmUpJiYobmU9ZHRbcXRdPSIiK2R0W3F0XSksbmU9PW51bGx8fG5lPT09IiI/KHZsKCJDYW4gbm90IGNyZWF0ZSBlZGdlIGAiK0x0KyJgIHdpdGggdW5zcGVjaWZpZWQgIitxdCksWnQ9ITApOlQuaGFzRWxlbWVudFdpdGhJZChuZSl8fCh2bCgiQ2FuIG5vdCBjcmVhdGUgZWRnZSBgIitMdCsiYCB3aXRoIG5vbmV4aXN0YW50ICIrcXQrIiBgIituZSsiYCIpLFp0PSEwKX1pZihadCl7cnQoKTtjb250aW51ZX12YXIgR3Q9VC5nZXRFbGVtZW50QnlJZChkdC5zb3VyY2UpLGdlPVQuZ2V0RWxlbWVudEJ5SWQoZHQudGFyZ2V0KTtHdC5zYW1lKGdlKT9HdC5fcHJpdmF0ZS5lZGdlcy5wdXNoKER0KTooR3QuX3ByaXZhdGUuZWRnZXMucHVzaChEdCksZ2UuX3ByaXZhdGUuZWRnZXMucHVzaChEdCkpLER0Ll9wcml2YXRlLnNvdXJjZT1HdCxEdC5fcHJpdmF0ZS50YXJnZXQ9Z2V9aHQubWFwPW5ldyBHYixodC5tYXAuc2V0KEx0LHtlbGU6b3QsaW5kZXg6MH0pLGh0LnJlbW92ZWQ9ITEsZyYmVC5hZGRUb1Bvb2wob3QpfWZvcih2YXIgYmU9MDtiZTxPLmxlbmd0aDtiZSsrKXt2YXIgaWU9T1tiZV0sRmU9aWUuX3ByaXZhdGUuZGF0YTtYKEZlLnBhcmVudCkmJihGZS5wYXJlbnQ9IiIrRmUucGFyZW50KTt2YXIgd2U9RmUucGFyZW50LGJuPXdlIT1udWxsO2lmKGJufHxpZS5fcHJpdmF0ZS5wYXJlbnQpe3ZhciB6ZT1pZS5fcHJpdmF0ZS5wYXJlbnQ/VC5jb2xsZWN0aW9uKCkubWVyZ2UoaWUuX3ByaXZhdGUucGFyZW50KTpULmdldEVsZW1lbnRCeUlkKHdlKTtpZih6ZS5lbXB0eSgpKUZlLnBhcmVudD12b2lkIDA7ZWxzZSBpZih6ZVswXS5yZW1vdmVkKCkpU2MoIk5vZGUgYWRkZWQgd2l0aCBtaXNzaW5nIHBhcmVudCwgcmVmZXJlbmNlIHRvIHBhcmVudCByZW1vdmVkIiksRmUucGFyZW50PXZvaWQgMCxpZS5fcHJpdmF0ZS5wYXJlbnQ9bnVsbDtlbHNle2Zvcih2YXIgR2U9ITEsRW49emU7IUVuLmVtcHR5KCk7KXtpZihpZS5zYW1lKEVuKSl7R2U9ITAsRmUucGFyZW50PXZvaWQgMDticmVha31Fbj1Fbi5wYXJlbnQoKX1HZXx8KHplWzBdLl9wcml2YXRlLmNoaWxkcmVuLnB1c2goaWUpLGllLl9wcml2YXRlLnBhcmVudD16ZVswXSxMLmhhc0NvbXBvdW5kTm9kZXM9ITApfX19aWYoJC5sZW5ndGg+MCl7Zm9yKHZhciBJbj0kLmxlbmd0aD09PXgubGVuZ3RoP3g6bmV3ICRmKFQsJCksWW49MDtZbjxJbi5sZW5ndGg7WW4rKyl7dmFyIFNuPUluW1luXTtTbi5pc05vZGUoKXx8KFNuLnBhcmFsbGVsRWRnZXMoKS5jbGVhclRyYXZlcnNhbENhY2hlKCksU24uc291cmNlKCkuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpLFNuLnRhcmdldCgpLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKSl9dmFyIFduO0wuaGFzQ29tcG91bmROb2Rlcz9Xbj1ULmNvbGxlY3Rpb24oKS5tZXJnZShJbikubWVyZ2UoSW4uY29ubmVjdGVkTm9kZXMoKSkubWVyZ2UoSW4ucGFyZW50KCkpOlduPUluLFduLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLnVwZGF0ZVN0eWxlKHkpLHk/SW4uZW1pdEFuZE5vdGlmeSgiYWRkIik6ZyYmSW4uZW1pdCgiYWRkIil9cmV0dXJuIHh9LGR1LnJlbW92ZWQ9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO3JldHVybiB5JiZ5Ll9wcml2YXRlLnJlbW92ZWR9LGR1Lmluc2lkZT1mdW5jdGlvbigpe3ZhciB5PXRoaXNbMF07cmV0dXJuIHkmJiF5Ll9wcml2YXRlLnJlbW92ZWR9LGR1LnJlbW92ZT1mdW5jdGlvbigpe3ZhciB5PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxnPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCx4PXRoaXMsVD1bXSxMPXt9LE89eC5fcHJpdmF0ZS5jeTtmdW5jdGlvbiBQKHdlKXtmb3IodmFyIGJuPXdlLl9wcml2YXRlLmVkZ2VzLHplPTA7emU8Ym4ubGVuZ3RoO3plKyspcShiblt6ZV0pfWZ1bmN0aW9uICQod2Upe2Zvcih2YXIgYm49d2UuX3ByaXZhdGUuY2hpbGRyZW4semU9MDt6ZTxibi5sZW5ndGg7emUrKylxKGJuW3plXSl9ZnVuY3Rpb24gcSh3ZSl7dmFyIGJuPUxbd2UuaWQoKV07ZyYmd2UucmVtb3ZlZCgpfHxibnx8KExbd2UuaWQoKV09ITAsd2UuaXNOb2RlKCk/KFQucHVzaCh3ZSksUCh3ZSksJCh3ZSkpOlQudW5zaGlmdCh3ZSkpfWZvcih2YXIgUz0wLFY9eC5sZW5ndGg7UzxWO1MrKyl7dmFyIFk9eFtTXTtxKFkpfWZ1bmN0aW9uIHJ0KHdlLGJuKXt2YXIgemU9d2UuX3ByaXZhdGUuZWRnZXM7dm0oemUsYm4pLHdlLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKX1mdW5jdGlvbiBvdCh3ZSl7d2UuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpfXZhciBodD1bXTtodC5pZHM9e307ZnVuY3Rpb24gZHQod2UsYm4pe2JuPWJuWzBdLHdlPXdlWzBdO3ZhciB6ZT13ZS5fcHJpdmF0ZS5jaGlsZHJlbixHZT13ZS5pZCgpO3ZtKHplLGJuKSxibi5fcHJpdmF0ZS5wYXJlbnQ9bnVsbCxodC5pZHNbR2VdfHwoaHQuaWRzW0dlXT0hMCxodC5wdXNoKHdlKSl9eC5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxnJiZPLnJlbW92ZUZyb21Qb29sKFQpO2Zvcih2YXIgTHQ9MDtMdDxULmxlbmd0aDtMdCsrKXt2YXIga3Q9VFtMdF07aWYoa3QuaXNFZGdlKCkpe3ZhciBEdD1rdC5zb3VyY2UoKVswXSxQdD1rdC50YXJnZXQoKVswXTtydChEdCxrdCkscnQoUHQsa3QpO2Zvcih2YXIgJHQ9a3QucGFyYWxsZWxFZGdlcygpLFp0PTA7WnQ8JHQubGVuZ3RoO1p0Kyspe3ZhciBZdD0kdFtadF07b3QoWXQpLFl0LmlzQnVuZGxlZEJlemllcigpJiZZdC5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX19ZWxzZXt2YXIgcXQ9a3QucGFyZW50KCk7cXQubGVuZ3RoIT09MCYmZHQocXQsa3QpfWcmJihrdC5fcHJpdmF0ZS5yZW1vdmVkPSEwKX12YXIgbmU9Ty5fcHJpdmF0ZS5lbGVtZW50cztPLl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXM9ITE7Zm9yKHZhciBHdD0wO0d0PG5lLmxlbmd0aDtHdCsrKXt2YXIgZ2U9bmVbR3RdO2lmKGdlLmlzUGFyZW50KCkpe08uX3ByaXZhdGUuaGFzQ29tcG91bmROb2Rlcz0hMDticmVha319dmFyIGJlPW5ldyAkZih0aGlzLmN5KCksVCk7YmUuc2l6ZSgpPjAmJih5P2JlLmVtaXRBbmROb3RpZnkoInJlbW92ZSIpOmcmJmJlLmVtaXQoInJlbW92ZSIpKTtmb3IodmFyIGllPTA7aWU8aHQubGVuZ3RoO2llKyspe3ZhciBGZT1odFtpZV07KCFnfHwhRmUucmVtb3ZlZCgpKSYmRmUudXBkYXRlU3R5bGUoKX1yZXR1cm4gYmV9LGR1Lm1vdmU9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcy5fcHJpdmF0ZS5jeSx4PXRoaXMsVD0hMSxMPSExLE89ZnVuY3Rpb24oaHQpe3JldHVybiBodD09bnVsbD9odDoiIitodH07aWYoeS5zb3VyY2UhPT12b2lkIDB8fHkudGFyZ2V0IT09dm9pZCAwKXt2YXIgUD1PKHkuc291cmNlKSwkPU8oeS50YXJnZXQpLHE9UCE9bnVsbCYmZy5oYXNFbGVtZW50V2l0aElkKFApLFM9JCE9bnVsbCYmZy5oYXNFbGVtZW50V2l0aElkKCQpOyhxfHxTKSYmKGcuYmF0Y2goZnVuY3Rpb24oKXt4LnJlbW92ZShULEwpLHguZW1pdEFuZE5vdGlmeSgibW92ZW91dCIpO2Zvcih2YXIgb3Q9MDtvdDx4Lmxlbmd0aDtvdCsrKXt2YXIgaHQ9eFtvdF0sZHQ9aHQuX3ByaXZhdGUuZGF0YTtodC5pc0VkZ2UoKSYmKHEmJihkdC5zb3VyY2U9UCksUyYmKGR0LnRhcmdldD0kKSl9eC5yZXN0b3JlKFQsTCl9KSx4LmVtaXRBbmROb3RpZnkoIm1vdmUiKSl9ZWxzZSBpZih5LnBhcmVudCE9PXZvaWQgMCl7dmFyIFY9Tyh5LnBhcmVudCksWT1WPT09bnVsbHx8Zy5oYXNFbGVtZW50V2l0aElkKFYpO2lmKFkpe3ZhciBydD1WPT09bnVsbD92b2lkIDA6VjtnLmJhdGNoKGZ1bmN0aW9uKCl7dmFyIG90PXgucmVtb3ZlKFQsTCk7b3QuZW1pdEFuZE5vdGlmeSgibW92ZW91dCIpO2Zvcih2YXIgaHQ9MDtodDx4Lmxlbmd0aDtodCsrKXt2YXIgZHQ9eFtodF0sTHQ9ZHQuX3ByaXZhdGUuZGF0YTtkdC5pc05vZGUoKSYmKEx0LnBhcmVudD1ydCl9b3QucmVzdG9yZShULEwpfSkseC5lbWl0QW5kTm90aWZ5KCJtb3ZlIil9fXJldHVybiB0aGlzfSxbUE4selosUVQseHAsYXgsckosSlQsYkosVEIsQ0IseEosaUMsc0MsamYsX20sZDFdLmZvckVhY2goZnVuY3Rpb24oeSl7ZGUoZHUseSl9KTt2YXIgQUo9e2FkZDpmdW5jdGlvbihnKXt2YXIgeCxUPXRoaXM7aWYoVHQoZykpe3ZhciBMPWc7aWYoTC5fcHJpdmF0ZS5jeT09PVQpeD1MLnJlc3RvcmUoKTtlbHNle2Zvcih2YXIgTz1bXSxQPTA7UDxMLmxlbmd0aDtQKyspe3ZhciAkPUxbUF07Ty5wdXNoKCQuanNvbigpKX14PW5ldyAkZihULE8pfX1lbHNlIGlmKGZ0KGcpKXt2YXIgcT1nO3g9bmV3ICRmKFQscSl9ZWxzZSBpZih1dChnKSYmKGZ0KGcubm9kZXMpfHxmdChnLmVkZ2VzKSkpe2Zvcih2YXIgUz1nLFY9W10sWT1bIm5vZGVzIiwiZWRnZXMiXSxydD0wLG90PVkubGVuZ3RoO3J0PG90O3J0Kyspe3ZhciBodD1ZW3J0XSxkdD1TW2h0XTtpZihmdChkdCkpZm9yKHZhciBMdD0wLGt0PWR0Lmxlbmd0aDtMdDxrdDtMdCsrKXt2YXIgRHQ9ZGUoe2dyb3VwOmh0fSxkdFtMdF0pO1YucHVzaChEdCl9fXg9bmV3ICRmKFQsVil9ZWxzZXt2YXIgUHQ9Zzt4PW5ldyBGVChULFB0KS5jb2xsZWN0aW9uKCl9cmV0dXJuIHh9LHJlbW92ZTpmdW5jdGlvbihnKXtpZighVHQoZykpe2lmKG10KGcpKXt2YXIgeD1nO2c9dGhpcy4kKHgpfX1yZXR1cm4gZy5yZW1vdmUoKX19Oy8qISBCZXppZXIgY3VydmUgZnVuY3Rpb24gZ2VuZXJhdG9yLiBDb3B5cmlnaHQgR2FldGFuIFJlbmF1ZGVhdS4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKi9mdW5jdGlvbiBMSih5LGcseCxUKXt2YXIgTD00LE89LjAwMSxQPTFlLTcsJD0xMCxxPTExLFM9MS8ocS0xKSxWPXR5cGVvZiBGbG9hdDMyQXJyYXk8InUiO2lmKGFyZ3VtZW50cy5sZW5ndGghPT00KXJldHVybiExO2Zvcih2YXIgWT0wO1k8NDsrK1kpaWYodHlwZW9mIGFyZ3VtZW50c1tZXSE9Im51bWJlciJ8fGlzTmFOKGFyZ3VtZW50c1tZXSl8fCFpc0Zpbml0ZShhcmd1bWVudHNbWV0pKXJldHVybiExO3k9TWF0aC5taW4oeSwxKSx4PU1hdGgubWluKHgsMSkseT1NYXRoLm1heCh5LDApLHg9TWF0aC5tYXgoeCwwKTt2YXIgcnQ9Vj9uZXcgRmxvYXQzMkFycmF5KHEpOm5ldyBBcnJheShxKTtmdW5jdGlvbiBvdChnZSxiZSl7cmV0dXJuIDEtMypiZSszKmdlfWZ1bmN0aW9uIGh0KGdlLGJlKXtyZXR1cm4gMypiZS02KmdlfWZ1bmN0aW9uIGR0KGdlKXtyZXR1cm4gMypnZX1mdW5jdGlvbiBMdChnZSxiZSxpZSl7cmV0dXJuKChvdChiZSxpZSkqZ2UraHQoYmUsaWUpKSpnZStkdChiZSkpKmdlfWZ1bmN0aW9uIGt0KGdlLGJlLGllKXtyZXR1cm4gMypvdChiZSxpZSkqZ2UqZ2UrMipodChiZSxpZSkqZ2UrZHQoYmUpfWZ1bmN0aW9uIER0KGdlLGJlKXtmb3IodmFyIGllPTA7aWU8TDsrK2llKXt2YXIgRmU9a3QoYmUseSx4KTtpZihGZT09PTApcmV0dXJuIGJlO3ZhciB3ZT1MdChiZSx5LHgpLWdlO2JlLT13ZS9GZX1yZXR1cm4gYmV9ZnVuY3Rpb24gUHQoKXtmb3IodmFyIGdlPTA7Z2U8cTsrK2dlKXJ0W2dlXT1MdChnZSpTLHkseCl9ZnVuY3Rpb24gJHQoZ2UsYmUsaWUpe3ZhciBGZSx3ZSxibj0wO2RvIHdlPWJlKyhpZS1iZSkvMixGZT1MdCh3ZSx5LHgpLWdlLEZlPjA/aWU9d2U6YmU9d2U7d2hpbGUoTWF0aC5hYnMoRmUpPlAmJisrYm48JCk7cmV0dXJuIHdlfWZ1bmN0aW9uIFp0KGdlKXtmb3IodmFyIGJlPTAsaWU9MSxGZT1xLTE7aWUhPT1GZSYmcnRbaWVdPD1nZTsrK2llKWJlKz1TOy0taWU7dmFyIHdlPShnZS1ydFtpZV0pLyhydFtpZSsxXS1ydFtpZV0pLGJuPWJlK3dlKlMsemU9a3QoYm4seSx4KTtyZXR1cm4gemU+PU8/RHQoZ2UsYm4pOnplPT09MD9ibjokdChnZSxiZSxiZStTKX12YXIgWXQ9ITE7ZnVuY3Rpb24gcXQoKXtZdD0hMCwoeSE9PWd8fHghPT1UKSYmUHQoKX12YXIgbmU9ZnVuY3Rpb24oYmUpe3JldHVybiBZdHx8cXQoKSx5PT09ZyYmeD09PVQ/YmU6YmU9PT0wPzA6YmU9PT0xPzE6THQoWnQoYmUpLGcsVCl9O25lLmdldENvbnRyb2xQb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm5be3g6eSx5Omd9LHt4LHk6VH1dfTt2YXIgR3Q9ImdlbmVyYXRlQmV6aWVyKCIrW3ksZyx4LFRdKyIpIjtyZXR1cm4gbmUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gR3R9LG5lfS8qISBSdW5nZS1LdXR0YSBzcHJpbmcgcGh5c2ljcyBmdW5jdGlvbiBnZW5lcmF0b3IuIEFkYXB0ZWQgZnJvbSBGcmFtZXIuanMsIGNvcHlyaWdodCBLb2VuIEJvay4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKi92YXIgTUo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KFQpe3JldHVybi1ULnRlbnNpb24qVC54LVQuZnJpY3Rpb24qVC52fWZ1bmN0aW9uIGcoVCxMLE8pe3ZhciBQPXt4OlQueCtPLmR4KkwsdjpULnYrTy5kdipMLHRlbnNpb246VC50ZW5zaW9uLGZyaWN0aW9uOlQuZnJpY3Rpb259O3JldHVybntkeDpQLnYsZHY6eShQKX19ZnVuY3Rpb24geChULEwpe3ZhciBPPXtkeDpULnYsZHY6eShUKX0sUD1nKFQsTCouNSxPKSwkPWcoVCxMKi41LFApLHE9ZyhULEwsJCksUz0xLzYqKE8uZHgrMiooUC5keCskLmR4KStxLmR4KSxWPTEvNiooTy5kdisyKihQLmR2KyQuZHYpK3EuZHYpO3JldHVybiBULng9VC54K1MqTCxULnY9VC52K1YqTCxUfXJldHVybiBmdW5jdGlvbiBUKEwsTyxQKXt2YXIgJD17eDotMSx2OjAsdGVuc2lvbjpudWxsLGZyaWN0aW9uOm51bGx9LHE9WzBdLFM9MCxWPTEvMWU0LFk9MTYvMWUzLHJ0LG90LGh0O2ZvcihMPXBhcnNlRmxvYXQoTCl8fDUwMCxPPXBhcnNlRmxvYXQoTyl8fDIwLFA9UHx8bnVsbCwkLnRlbnNpb249TCwkLmZyaWN0aW9uPU8scnQ9UCE9PW51bGwscnQ/KFM9VChMLE8pLG90PVMvUCpZKTpvdD1ZO2h0PXgoaHR8fCQsb3QpLHEucHVzaCgxK2h0LngpLFMrPTE2LE1hdGguYWJzKGh0LngpPlYmJk1hdGguYWJzKGh0LnYpPlY7KTtyZXR1cm4gcnQ/ZnVuY3Rpb24oZHQpe3JldHVybiBxW2R0KihxLmxlbmd0aC0xKXwwXX06U319KCksZ3U9ZnVuY3Rpb24oZyx4LFQsTCl7dmFyIE89TEooZyx4LFQsTCk7cmV0dXJuIGZ1bmN0aW9uKFAsJCxxKXtyZXR1cm4gUCsoJC1QKSpPKHEpfX0sY0M9e2xpbmVhcjpmdW5jdGlvbihnLHgsVCl7cmV0dXJuIGcrKHgtZykqVH0sZWFzZTpndSguMjUsLjEsLjI1LDEpLCJlYXNlLWluIjpndSguNDIsMCwxLDEpLCJlYXNlLW91dCI6Z3UoMCwwLC41OCwxKSwiZWFzZS1pbi1vdXQiOmd1KC40MiwwLC41OCwxKSwiZWFzZS1pbi1zaW5lIjpndSguNDcsMCwuNzQ1LC43MTUpLCJlYXNlLW91dC1zaW5lIjpndSguMzksLjU3NSwuNTY1LDEpLCJlYXNlLWluLW91dC1zaW5lIjpndSguNDQ1LC4wNSwuNTUsLjk1KSwiZWFzZS1pbi1xdWFkIjpndSguNTUsLjA4NSwuNjgsLjUzKSwiZWFzZS1vdXQtcXVhZCI6Z3UoLjI1LC40NiwuNDUsLjk0KSwiZWFzZS1pbi1vdXQtcXVhZCI6Z3UoLjQ1NSwuMDMsLjUxNSwuOTU1KSwiZWFzZS1pbi1jdWJpYyI6Z3UoLjU1LC4wNTUsLjY3NSwuMTkpLCJlYXNlLW91dC1jdWJpYyI6Z3UoLjIxNSwuNjEsLjM1NSwxKSwiZWFzZS1pbi1vdXQtY3ViaWMiOmd1KC42NDUsLjA0NSwuMzU1LDEpLCJlYXNlLWluLXF1YXJ0IjpndSguODk1LC4wMywuNjg1LC4yMiksImVhc2Utb3V0LXF1YXJ0IjpndSguMTY1LC44NCwuNDQsMSksImVhc2UtaW4tb3V0LXF1YXJ0IjpndSguNzcsMCwuMTc1LDEpLCJlYXNlLWluLXF1aW50IjpndSguNzU1LC4wNSwuODU1LC4wNiksImVhc2Utb3V0LXF1aW50IjpndSguMjMsMSwuMzIsMSksImVhc2UtaW4tb3V0LXF1aW50IjpndSguODYsMCwuMDcsMSksImVhc2UtaW4tZXhwbyI6Z3UoLjk1LC4wNSwuNzk1LC4wMzUpLCJlYXNlLW91dC1leHBvIjpndSguMTksMSwuMjIsMSksImVhc2UtaW4tb3V0LWV4cG8iOmd1KDEsMCwwLDEpLCJlYXNlLWluLWNpcmMiOmd1KC42LC4wNCwuOTgsLjMzNSksImVhc2Utb3V0LWNpcmMiOmd1KC4wNzUsLjgyLC4xNjUsMSksImVhc2UtaW4tb3V0LWNpcmMiOmd1KC43ODUsLjEzNSwuMTUsLjg2KSxzcHJpbmc6ZnVuY3Rpb24oZyx4LFQpe2lmKFQ9PT0wKXJldHVybiBjQy5saW5lYXI7dmFyIEw9TUooZyx4LFQpO3JldHVybiBmdW5jdGlvbihPLFAsJCl7cmV0dXJuIE8rKFAtTykqTCgkKX19LCJjdWJpYy1iZXppZXIiOmd1fTtmdW5jdGlvbiBGQih5LGcseCxULEwpe2lmKFQ9PT0xfHxnPT09eClyZXR1cm4geDt2YXIgTz1MKGcseCxUKTtyZXR1cm4geT09bnVsbHx8KCh5LnJvdW5kVmFsdWV8fHkuY29sb3IpJiYoTz1NYXRoLnJvdW5kKE8pKSx5Lm1pbiE9PXZvaWQgMCYmKE89TWF0aC5tYXgoTyx5Lm1pbikpLHkubWF4IT09dm9pZCAwJiYoTz1NYXRoLm1pbihPLHkubWF4KSkpLE99ZnVuY3Rpb24gTkIoeSxnKXtyZXR1cm4geS5wZlZhbHVlIT1udWxsfHx5LnZhbHVlIT1udWxsP3kucGZWYWx1ZSE9bnVsbCYmKGc9PW51bGx8fGcudHlwZS51bml0cyE9PSIlIik/eS5wZlZhbHVlOnkudmFsdWU6eX1mdW5jdGlvbiBmeCh5LGcseCxULEwpe3ZhciBPPUwhPW51bGw/TC50eXBlOm51bGw7eDwwP3g9MDp4PjEmJih4PTEpO3ZhciBQPU5CKHksTCksJD1OQihnLEwpO2lmKFgoUCkmJlgoJCkpcmV0dXJuIEZCKE8sUCwkLHgsVCk7aWYoZnQoUCkmJmZ0KCQpKXtmb3IodmFyIHE9W10sUz0wO1M8JC5sZW5ndGg7UysrKXt2YXIgVj1QW1NdLFk9JFtTXTtpZihWIT1udWxsJiZZIT1udWxsKXt2YXIgcnQ9RkIoTyxWLFkseCxUKTtxLnB1c2gocnQpfWVsc2UgcS5wdXNoKFkpfXJldHVybiBxfX1mdW5jdGlvbiBESih5LGcseCxUKXt2YXIgTD0hVCxPPXkuX3ByaXZhdGUsUD1nLl9wcml2YXRlLCQ9UC5lYXNpbmcscT1QLnN0YXJ0VGltZSxTPVQ/eTp5LmN5KCksVj1TLnN0eWxlKCk7aWYoIVAuZWFzaW5nSW1wbClpZigkPT1udWxsKVAuZWFzaW5nSW1wbD1jQy5saW5lYXI7ZWxzZXt2YXIgWTtpZihtdCgkKSl7dmFyIHJ0PVYucGFyc2UoInRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIiwkKTtZPXJ0LnZhbHVlfWVsc2UgWT0kO3ZhciBvdCxodDttdChZKT8ob3Q9WSxodD1bXSk6KG90PVlbMV0saHQ9WS5zbGljZSgyKS5tYXAoZnVuY3Rpb24oSW4pe3JldHVybitJbn0pKSxodC5sZW5ndGg+MD8ob3Q9PT0ic3ByaW5nIiYmaHQucHVzaChQLmR1cmF0aW9uKSxQLmVhc2luZ0ltcGw9Y0Nbb3RdLmFwcGx5KG51bGwsaHQpKTpQLmVhc2luZ0ltcGw9Y0Nbb3RdfXZhciBkdD1QLmVhc2luZ0ltcGwsTHQ7aWYoUC5kdXJhdGlvbj09PTA/THQ9MTpMdD0oeC1xKS9QLmR1cmF0aW9uLFAuYXBwbHlpbmcmJihMdD1QLnByb2dyZXNzKSxMdDwwP0x0PTA6THQ+MSYmKEx0PTEpLFAuZGVsYXk9PW51bGwpe3ZhciBrdD1QLnN0YXJ0UG9zaXRpb24sRHQ9UC5wb3NpdGlvbjtpZihEdCYmTCYmIXkubG9ja2VkKCkpe3ZhciBQdD17fTskayhrdC54LER0LngpJiYoUHQueD1meChrdC54LER0LngsTHQsZHQpKSwkayhrdC55LER0LnkpJiYoUHQueT1meChrdC55LER0LnksTHQsZHQpKSx5LnBvc2l0aW9uKFB0KX12YXIgJHQ9UC5zdGFydFBhbixadD1QLnBhbixZdD1PLnBhbixxdD1adCE9bnVsbCYmVDtxdCYmKCRrKCR0LngsWnQueCkmJihZdC54PWZ4KCR0LngsWnQueCxMdCxkdCkpLCRrKCR0LnksWnQueSkmJihZdC55PWZ4KCR0LnksWnQueSxMdCxkdCkpLHkuZW1pdCgicGFuIikpO3ZhciBuZT1QLnN0YXJ0Wm9vbSxHdD1QLnpvb20sZ2U9R3QhPW51bGwmJlQ7Z2UmJigkayhuZSxHdCkmJihPLnpvb209X2soTy5taW5ab29tLGZ4KG5lLEd0LEx0LGR0KSxPLm1heFpvb20pKSx5LmVtaXQoInpvb20iKSksKHF0fHxnZSkmJnkuZW1pdCgidmlld3BvcnQiKTt2YXIgYmU9UC5zdHlsZTtpZihiZSYmYmUubGVuZ3RoPjAmJkwpe2Zvcih2YXIgaWU9MDtpZTxiZS5sZW5ndGg7aWUrKyl7dmFyIEZlPWJlW2llXSx3ZT1GZS5uYW1lLGJuPUZlLHplPVAuc3RhcnRTdHlsZVt3ZV0sR2U9Vi5wcm9wZXJ0aWVzW3plLm5hbWVdLEVuPWZ4KHplLGJuLEx0LGR0LEdlKTtWLm92ZXJyaWRlQnlwYXNzKHksd2UsRW4pfXkuZW1pdCgic3R5bGUiKX19cmV0dXJuIFAucHJvZ3Jlc3M9THQsTHR9ZnVuY3Rpb24gJGsoeSxnKXtyZXR1cm4geT09bnVsbHx8Zz09bnVsbD8hMTpYKHkpJiZYKGcpPyEwOiEhKHkmJmcpfWZ1bmN0aW9uIElKKHksZyx4LFQpe3ZhciBMPWcuX3ByaXZhdGU7TC5zdGFydGVkPSEwLEwuc3RhcnRUaW1lPXgtTC5wcm9ncmVzcypMLmR1cmF0aW9ufWZ1bmN0aW9uIEJCKHksZyl7dmFyIHg9Zy5fcHJpdmF0ZS5hbmlFbGVzLFQ9W107ZnVuY3Rpb24gTChWLFkpe3ZhciBydD1WLl9wcml2YXRlLG90PXJ0LmFuaW1hdGlvbi5jdXJyZW50LGh0PXJ0LmFuaW1hdGlvbi5xdWV1ZSxkdD0hMTtpZihvdC5sZW5ndGg9PT0wKXt2YXIgTHQ9aHQuc2hpZnQoKTtMdCYmb3QucHVzaChMdCl9Zm9yKHZhciBrdD1mdW5jdGlvbihZdCl7Zm9yKHZhciBxdD1ZdC5sZW5ndGgtMTtxdD49MDtxdC0tKXt2YXIgbmU9WXRbcXRdO25lKCl9WXQuc3BsaWNlKDAsWXQubGVuZ3RoKX0sRHQ9b3QubGVuZ3RoLTE7RHQ+PTA7RHQtLSl7dmFyIFB0PW90W0R0XSwkdD1QdC5fcHJpdmF0ZTtpZigkdC5zdG9wcGVkKXtvdC5zcGxpY2UoRHQsMSksJHQuaG9va2VkPSExLCR0LnBsYXlpbmc9ITEsJHQuc3RhcnRlZD0hMSxrdCgkdC5mcmFtZXMpO2NvbnRpbnVlfSEkdC5wbGF5aW5nJiYhJHQuYXBwbHlpbmd8fCgkdC5wbGF5aW5nJiYkdC5hcHBseWluZyYmKCR0LmFwcGx5aW5nPSExKSwkdC5zdGFydGVkfHxJSihWLFB0LHkpLERKKFYsUHQseSxZKSwkdC5hcHBseWluZyYmKCR0LmFwcGx5aW5nPSExKSxrdCgkdC5mcmFtZXMpLCR0LnN0ZXAhPW51bGwmJiR0LnN0ZXAoeSksUHQuY29tcGxldGVkKCkmJihvdC5zcGxpY2UoRHQsMSksJHQuaG9va2VkPSExLCR0LnBsYXlpbmc9ITEsJHQuc3RhcnRlZD0hMSxrdCgkdC5jb21wbGV0ZXMpKSxkdD0hMCl9cmV0dXJuIVkmJm90Lmxlbmd0aD09PTAmJmh0Lmxlbmd0aD09PTAmJlQucHVzaChWKSxkdH1mb3IodmFyIE89ITEsUD0wO1A8eC5sZW5ndGg7UCsrKXt2YXIgJD14W1BdLHE9TCgkKTtPPU98fHF9dmFyIFM9TChnLCEwKTsoT3x8UykmJih4Lmxlbmd0aD4wP2cubm90aWZ5KCJkcmF3Iix4KTpnLm5vdGlmeSgiZHJhdyIpKSx4LnVubWVyZ2UoVCksZy5lbWl0KCJzdGVwIil9dmFyIE9KPXthbmltYXRlOkFjLmFuaW1hdGUoKSxhbmltYXRpb246QWMuYW5pbWF0aW9uKCksYW5pbWF0ZWQ6QWMuYW5pbWF0ZWQoKSxjbGVhclF1ZXVlOkFjLmNsZWFyUXVldWUoKSxkZWxheTpBYy5kZWxheSgpLGRlbGF5QW5pbWF0aW9uOkFjLmRlbGF5QW5pbWF0aW9uKCksc3RvcDpBYy5zdG9wKCksYWRkVG9BbmltYXRpb25Qb29sOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXM7eC5zdHlsZUVuYWJsZWQoKSYmeC5fcHJpdmF0ZS5hbmlFbGVzLm1lcmdlKGcpfSxzdG9wQW5pbWF0aW9uTG9vcDpmdW5jdGlvbigpe3RoaXMuX3ByaXZhdGUuYW5pbWF0aW9uc1J1bm5pbmc9ITF9LHN0YXJ0QW5pbWF0aW9uTG9vcDpmdW5jdGlvbigpe3ZhciBnPXRoaXM7aWYoZy5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZz0hMCwhZy5zdHlsZUVuYWJsZWQoKSlyZXR1cm47ZnVuY3Rpb24geCgpe2cuX3ByaXZhdGUuYW5pbWF0aW9uc1J1bm5pbmcmJkJmKGZ1bmN0aW9uKE8pe0JCKE8sZykseCgpfSl9dmFyIFQ9Zy5yZW5kZXJlcigpO1QmJlQuYmVmb3JlUmVuZGVyP1QuYmVmb3JlUmVuZGVyKGZ1bmN0aW9uKE8sUCl7QkIoUCxnKX0sVC5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmFuaW1hdGlvbnMpOngoKX19LFBKPXtxdWFsaWZpZXJDb21wYXJlOmZ1bmN0aW9uKGcseCl7cmV0dXJuIGc9PW51bGx8fHg9PW51bGw/Zz09bnVsbCYmeD09bnVsbDpnLnNhbWVUZXh0KHgpfSxldmVudE1hdGNoZXM6ZnVuY3Rpb24oZyx4LFQpe3ZhciBMPXgucXVhbGlmaWVyO3JldHVybiBMIT1udWxsP2chPT1ULnRhcmdldCYmbnQoVC50YXJnZXQpJiZMLm1hdGNoZXMoVC50YXJnZXQpOiEwfSxhZGRFdmVudEZpZWxkczpmdW5jdGlvbihnLHgpe3guY3k9Zyx4LnRhcmdldD1nfSxjYWxsYmFja0NvbnRleHQ6ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB4LnF1YWxpZmllciE9bnVsbD9ULnRhcmdldDpnfX0sdUM9ZnVuY3Rpb24oZyl7cmV0dXJuIG10KGcpP25ldyBFbShnKTpnfSxSQj17Y3JlYXRlRW1pdHRlcjpmdW5jdGlvbigpe3ZhciBnPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGcuZW1pdHRlcnx8KGcuZW1pdHRlcj1uZXcgbkMoUEosdGhpcykpLHRoaXN9LGVtaXR0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyfSxvbjpmdW5jdGlvbihnLHgsVCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uKGcsdUMoeCksVCksdGhpc30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVMaXN0ZW5lcihnLHVDKHgpLFQpLHRoaXN9LHJlbW92ZUFsbExpc3RlbmVyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKSx0aGlzfSxvbmU6ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbmUoZyx1Qyh4KSxUKSx0aGlzfSxvbmNlOmZ1bmN0aW9uKGcseCxUKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub25lKGcsdUMoeCksVCksdGhpc30sZW1pdDpmdW5jdGlvbihnLHgpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5lbWl0KGcseCksdGhpc30sZW1pdEFuZE5vdGlmeTpmdW5jdGlvbihnLHgpe3JldHVybiB0aGlzLmVtaXQoZyksdGhpcy5ub3RpZnkoZyx4KSx0aGlzfX07QWMuZXZlbnRBbGlhc2VzT24oUkIpO3ZhciBVTD17cG5nOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUucmVuZGVyZXI7cmV0dXJuIGc9Z3x8e30seC5wbmcoZyl9LGpwZzpmdW5jdGlvbihnKXt2YXIgeD10aGlzLl9wcml2YXRlLnJlbmRlcmVyO3JldHVybiBnPWd8fHt9LGcuYmc9Zy5iZ3x8IiNmZmYiLHguanBnKGcpfX07VUwuanBlZz1VTC5qcGc7dmFyIGxDPXtsYXlvdXQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcztpZihnPT1udWxsKXt2bCgiTGF5b3V0IG9wdGlvbnMgbXVzdCBiZSBzcGVjaWZpZWQgdG8gbWFrZSBhIGxheW91dCIpO3JldHVybn1pZihnLm5hbWU9PW51bGwpe3ZsKCJBIGBuYW1lYCBtdXN0IGJlIHNwZWNpZmllZCB0byBtYWtlIGEgbGF5b3V0Iik7cmV0dXJufXZhciBUPWcubmFtZSxMPXguZXh0ZW5zaW9uKCJsYXlvdXQiLFQpO2lmKEw9PW51bGwpe3ZsKCJObyBzdWNoIGxheW91dCBgIitUKyJgIGZvdW5kLiAgRGlkIHlvdSBmb3JnZXQgdG8gaW1wb3J0IGl0IGFuZCBgY3l0b3NjYXBlLnVzZSgpYCBpdD8iKTtyZXR1cm59dmFyIE87bXQoZy5lbGVzKT9PPXguJChnLmVsZXMpOk89Zy5lbGVzIT1udWxsP2cuZWxlczp4LiQoKTt2YXIgUD1uZXcgTChkZSh7fSxnLHtjeTp4LGVsZXM6T30pKTtyZXR1cm4gUH19O2xDLmNyZWF0ZUxheW91dD1sQy5tYWtlTGF5b3V0PWxDLmxheW91dDt2YXIgRko9e25vdGlmeTpmdW5jdGlvbihnLHgpe3ZhciBUPXRoaXMuX3ByaXZhdGU7aWYodGhpcy5iYXRjaGluZygpKXtULmJhdGNoTm90aWZpY2F0aW9ucz1ULmJhdGNoTm90aWZpY2F0aW9uc3x8e307dmFyIEw9VC5iYXRjaE5vdGlmaWNhdGlvbnNbZ109VC5iYXRjaE5vdGlmaWNhdGlvbnNbZ118fHRoaXMuY29sbGVjdGlvbigpO3ghPW51bGwmJkwubWVyZ2UoeCk7cmV0dXJufWlmKFQubm90aWZpY2F0aW9uc0VuYWJsZWQpe3ZhciBPPXRoaXMucmVuZGVyZXIoKTt0aGlzLmRlc3Ryb3llZCgpfHwhT3x8Ty5ub3RpZnkoZyx4KX19LG5vdGlmaWNhdGlvbnM6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZz09PXZvaWQgMD94Lm5vdGlmaWNhdGlvbnNFbmFibGVkOih4Lm5vdGlmaWNhdGlvbnNFbmFibGVkPSEhZyx0aGlzKX0sbm9Ob3RpZmljYXRpb25zOmZ1bmN0aW9uKGcpe3RoaXMubm90aWZpY2F0aW9ucyghMSksZygpLHRoaXMubm90aWZpY2F0aW9ucyghMCl9LGJhdGNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuYmF0Y2hDb3VudD4wfSxzdGFydEJhdGNoOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZy5iYXRjaENvdW50PT1udWxsJiYoZy5iYXRjaENvdW50PTApLGcuYmF0Y2hDb3VudD09PTAmJihnLmJhdGNoU3R5bGVFbGVzPXRoaXMuY29sbGVjdGlvbigpLGcuYmF0Y2hOb3RpZmljYXRpb25zPXt9KSxnLmJhdGNoQ291bnQrKyx0aGlzfSxlbmRCYXRjaDpmdW5jdGlvbigpe3ZhciBnPXRoaXMuX3ByaXZhdGU7aWYoZy5iYXRjaENvdW50PT09MClyZXR1cm4gdGhpcztpZihnLmJhdGNoQ291bnQtLSxnLmJhdGNoQ291bnQ9PT0wKXtnLmJhdGNoU3R5bGVFbGVzLnVwZGF0ZVN0eWxlKCk7dmFyIHg9dGhpcy5yZW5kZXJlcigpO09iamVjdC5rZXlzKGcuYmF0Y2hOb3RpZmljYXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKFQpe3ZhciBMPWcuYmF0Y2hOb3RpZmljYXRpb25zW1RdO0wuZW1wdHkoKT94Lm5vdGlmeShUKTp4Lm5vdGlmeShULEwpfSl9cmV0dXJuIHRoaXN9LGJhdGNoOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnN0YXJ0QmF0Y2goKSxnKCksdGhpcy5lbmRCYXRjaCgpLHRoaXN9LGJhdGNoRGF0YTpmdW5jdGlvbihnKXt2YXIgeD10aGlzO3JldHVybiB0aGlzLmJhdGNoKGZ1bmN0aW9uKCl7Zm9yKHZhciBUPU9iamVjdC5rZXlzKGcpLEw9MDtMPFQubGVuZ3RoO0wrKyl7dmFyIE89VFtMXSxQPWdbT10sJD14LmdldEVsZW1lbnRCeUlkKE8pOyQuZGF0YShQKX19KX19LE5KPVJmKHtoaWRlRWRnZXNPblZpZXdwb3J0OiExLHRleHR1cmVPblZpZXdwb3J0OiExLG1vdGlvbkJsdXI6ITEsbW90aW9uQmx1ck9wYWNpdHk6LjA1LHBpeGVsUmF0aW86dm9pZCAwLGRlc2t0b3BUYXBUaHJlc2hvbGQ6NCx0b3VjaFRhcFRocmVzaG9sZDo4LHdoZWVsU2Vuc2l0aXZpdHk6MSxkZWJ1ZzohMSxzaG93RnBzOiExfSksV0w9e3JlbmRlclRvOmZ1bmN0aW9uKGcseCxULEwpe3ZhciBPPXRoaXMuX3ByaXZhdGUucmVuZGVyZXI7cmV0dXJuIE8ucmVuZGVyVG8oZyx4LFQsTCksdGhpc30scmVuZGVyZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5yZW5kZXJlcn0sZm9yY2VSZW5kZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3RpZnkoImRyYXciKSx0aGlzfSxyZXNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnZhbGlkYXRlU2l6ZSgpLHRoaXMuZW1pdEFuZE5vdGlmeSgicmVzaXplIiksdGhpc30saW5pdFJlbmRlcmVyOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMsVD14LmV4dGVuc2lvbigicmVuZGVyZXIiLGcubmFtZSk7aWYoVD09bnVsbCl7dmwoIkNhbiBub3QgaW5pdGlhbGlzZTogTm8gc3VjaCByZW5kZXJlciBgIi5jb25jYXQoZy5uYW1lLCJgIGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBpbXBvcnQgaXQgYW5kIGBjeXRvc2NhcGUudXNlKClgIGl0PyIpKTtyZXR1cm59Zy53aGVlbFNlbnNpdGl2aXR5IT09dm9pZCAwJiZTYygiWW91IGhhdmUgc2V0IGEgY3VzdG9tIHdoZWVsIHNlbnNpdGl2aXR5LiAgVGhpcyB3aWxsIG1ha2UgeW91ciBhcHAgem9vbSB1bm5hdHVyYWxseSB3aGVuIHVzaW5nIG1haW5zdHJlYW0gbWljZS4gIFlvdSBzaG91bGQgY2hhbmdlIHRoaXMgdmFsdWUgZnJvbSB0aGUgZGVmYXVsdCBvbmx5IGlmIHlvdSBjYW4gZ3VhcmFudGVlIHRoYXQgYWxsIHlvdXIgdXNlcnMgd2lsbCB1c2UgdGhlIHNhbWUgaGFyZHdhcmUgYW5kIE9TIGNvbmZpZ3VyYXRpb24gYXMgeW91ciBjdXJyZW50IG1hY2hpbmUuIik7dmFyIEw9TkooZyk7TC5jeT14LHguX3ByaXZhdGUucmVuZGVyZXI9bmV3IFQoTCksdGhpcy5ub3RpZnkoImluaXQiKX0sZGVzdHJveVJlbmRlcmVyOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcztnLm5vdGlmeSgiZGVzdHJveSIpO3ZhciB4PWcuY29udGFpbmVyKCk7aWYoeClmb3IoeC5fY3lyZWc9bnVsbDt4LmNoaWxkTm9kZXMubGVuZ3RoPjA7KXgucmVtb3ZlQ2hpbGQoeC5jaGlsZE5vZGVzWzBdKTtnLl9wcml2YXRlLnJlbmRlcmVyPW51bGwsZy5tdXRhYmxlRWxlbWVudHMoKS5mb3JFYWNoKGZ1bmN0aW9uKFQpe3ZhciBMPVQuX3ByaXZhdGU7TC5yc2NyYXRjaD17fSxMLnJzdHlsZT17fSxMLmFuaW1hdGlvbi5jdXJyZW50PVtdLEwuYW5pbWF0aW9uLnF1ZXVlPVtdfSl9LG9uUmVuZGVyOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm9uKCJyZW5kZXIiLGcpfSxvZmZSZW5kZXI6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMub2ZmKCJyZW5kZXIiLGcpfX07V0wuaW52YWxpZGF0ZURpbWVuc2lvbnM9V0wucmVzaXplO3ZhciBoQz17Y29sbGVjdGlvbjpmdW5jdGlvbihnLHgpe3JldHVybiBtdChnKT90aGlzLiQoZyk6VHQoZyk/Zy5jb2xsZWN0aW9uKCk6ZnQoZyk/KHh8fCh4PXt9KSxuZXcgJGYodGhpcyxnLHgudW5pcXVlLHgucmVtb3ZlZCkpOm5ldyAkZih0aGlzKX0sbm9kZXM6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy4kKGZ1bmN0aW9uKFQpe3JldHVybiBULmlzTm9kZSgpfSk7cmV0dXJuIGc/eC5maWx0ZXIoZyk6eH0sZWRnZXM6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy4kKGZ1bmN0aW9uKFQpe3JldHVybiBULmlzRWRnZSgpfSk7cmV0dXJuIGc/eC5maWx0ZXIoZyk6eH0sJDpmdW5jdGlvbihnKXt2YXIgeD10aGlzLl9wcml2YXRlLmVsZW1lbnRzO3JldHVybiBnP3guZmlsdGVyKGcpOnguc3Bhd25TZWxmKCl9LG11dGFibGVFbGVtZW50czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzfX07aEMuZWxlbWVudHM9aEMuZmlsdGVyPWhDLiQ7dmFyIGcxPXt9LHprPSJ0IixCSj0iZiI7ZzEuYXBwbHk9ZnVuY3Rpb24oeSl7Zm9yKHZhciBnPXRoaXMseD1nLl9wcml2YXRlLFQ9eC5jeSxMPVQuY29sbGVjdGlvbigpLE89MDtPPHkubGVuZ3RoO08rKyl7dmFyIFA9eVtPXSwkPWcuZ2V0Q29udGV4dE1ldGEoUCk7aWYoISQuZW1wdHkpe3ZhciBxPWcuZ2V0Q29udGV4dFN0eWxlKCQpLFM9Zy5hcHBseUNvbnRleHRTdHlsZSgkLHEsUCk7UC5fcHJpdmF0ZS5hcHBsaWVkSW5pdFN0eWxlP2cudXBkYXRlVHJhbnNpdGlvbnMoUCxTLmRpZmZQcm9wcyk6UC5fcHJpdmF0ZS5hcHBsaWVkSW5pdFN0eWxlPSEwO3ZhciBWPWcudXBkYXRlU3R5bGVIaW50cyhQKTtWJiZMLnB1c2goUCl9fXJldHVybiBMfSxnMS5nZXRQcm9wZXJ0aWVzRGlmZj1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMsVD14Ll9wcml2YXRlLnByb3BEaWZmcz14Ll9wcml2YXRlLnByb3BEaWZmc3x8e30sTD15KyItIitnLE89VFtMXTtpZihPKXJldHVybiBPO2Zvcih2YXIgUD1bXSwkPXt9LHE9MDtxPHgubGVuZ3RoO3ErKyl7dmFyIFM9eFtxXSxWPXlbcV09PT16ayxZPWdbcV09PT16ayxydD1WIT09WSxvdD1TLm1hcHBlZFByb3BlcnRpZXMubGVuZ3RoPjA7aWYocnR8fFkmJm90KXt2YXIgaHQ9dm9pZCAwO3J0JiZvdHx8cnQ/aHQ9Uy5wcm9wZXJ0aWVzOm90JiYoaHQ9Uy5tYXBwZWRQcm9wZXJ0aWVzKTtmb3IodmFyIGR0PTA7ZHQ8aHQubGVuZ3RoO2R0Kyspe2Zvcih2YXIgTHQ9aHRbZHRdLGt0PUx0Lm5hbWUsRHQ9ITEsUHQ9cSsxO1B0PHgubGVuZ3RoO1B0Kyspe3ZhciAkdD14W1B0XSxadD1nW1B0XT09PXprO2lmKFp0JiYoRHQ9JHQucHJvcGVydGllc1tMdC5uYW1lXSE9bnVsbCxEdCkpYnJlYWt9ISRba3RdJiYhRHQmJigkW2t0XT0hMCxQLnB1c2goa3QpKX19fXJldHVybiBUW0xdPVAsUH0sZzEuZ2V0Q29udGV4dE1ldGE9ZnVuY3Rpb24oeSl7Zm9yKHZhciBnPXRoaXMseD0iIixULEw9eS5fcHJpdmF0ZS5zdHlsZUN4dEtleXx8IiIsTz0wO088Zy5sZW5ndGg7TysrKXt2YXIgUD1nW09dLCQ9UC5zZWxlY3RvciYmUC5zZWxlY3Rvci5tYXRjaGVzKHkpOyQ/eCs9ems6eCs9Qkp9cmV0dXJuIFQ9Zy5nZXRQcm9wZXJ0aWVzRGlmZihMLHgpLHkuX3ByaXZhdGUuc3R5bGVDeHRLZXk9eCx7a2V5OngsZGlmZlByb3BOYW1lczpULGVtcHR5OlQubGVuZ3RoPT09MH19LGcxLmdldENvbnRleHRTdHlsZT1mdW5jdGlvbih5KXt2YXIgZz15LmtleSx4PXRoaXMsVD10aGlzLl9wcml2YXRlLmNvbnRleHRTdHlsZXM9dGhpcy5fcHJpdmF0ZS5jb250ZXh0U3R5bGVzfHx7fTtpZihUW2ddKXJldHVybiBUW2ddO2Zvcih2YXIgTD17X3ByaXZhdGU6e2tleTpnfX0sTz0wO088eC5sZW5ndGg7TysrKXt2YXIgUD14W09dLCQ9Z1tPXT09PXprO2lmKCQpZm9yKHZhciBxPTA7cTxQLnByb3BlcnRpZXMubGVuZ3RoO3ErKyl7dmFyIFM9UC5wcm9wZXJ0aWVzW3FdO0xbUy5uYW1lXT1TfX1yZXR1cm4gVFtnXT1MLEx9LGcxLmFwcGx5Q29udGV4dFN0eWxlPWZ1bmN0aW9uKHksZyx4KXtmb3IodmFyIFQ9dGhpcyxMPXkuZGlmZlByb3BOYW1lcyxPPXt9LFA9VC50eXBlcywkPTA7JDxMLmxlbmd0aDskKyspe3ZhciBxPUxbJF0sUz1nW3FdLFY9eC5wc3R5bGUocSk7aWYoIVMpaWYoVilWLmJ5cGFzcz9TPXtuYW1lOnEsZGVsZXRlQnlwYXNzZWQ6ITB9OlM9e25hbWU6cSxkZWxldGU6ITB9O2Vsc2UgY29udGludWU7aWYoViE9PVMpe2lmKFMubWFwcGVkPT09UC5mbiYmViE9bnVsbCYmVi5tYXBwaW5nIT1udWxsJiZWLm1hcHBpbmcudmFsdWU9PT1TLnZhbHVlKXt2YXIgWT1WLm1hcHBpbmcscnQ9WS5mblZhbHVlPVMudmFsdWUoeCk7aWYocnQ9PT1ZLnByZXZGblZhbHVlKWNvbnRpbnVlfXZhciBvdD1PW3FdPXtwcmV2OlZ9O1QuYXBwbHlQYXJzZWRQcm9wZXJ0eSh4LFMpLG90Lm5leHQ9eC5wc3R5bGUocSksb3QubmV4dCYmb3QubmV4dC5ieXBhc3MmJihvdC5uZXh0PW90Lm5leHQuYnlwYXNzZWQpfX1yZXR1cm57ZGlmZlByb3BzOk99fSxnMS51cGRhdGVTdHlsZUhpbnRzPWZ1bmN0aW9uKHkpe3ZhciBnPXkuX3ByaXZhdGUseD10aGlzLFQ9eC5wcm9wZXJ0eUdyb3VwTmFtZXMsTD14LnByb3BlcnR5R3JvdXBLZXlzLE89ZnVuY3Rpb24oSnIsdmksWHMpe3JldHVybiB4LmdldFByb3BlcnRpZXNIYXNoKEpyLHZpLFhzKX0sUD1nLnN0eWxlS2V5O2lmKHkucmVtb3ZlZCgpKXJldHVybiExO3ZhciAkPWcuZ3JvdXA9PT0ibm9kZXMiLHE9eS5fcHJpdmF0ZS5zdHlsZTtUPU9iamVjdC5rZXlzKHEpO2Zvcih2YXIgUz0wO1M8TC5sZW5ndGg7UysrKXt2YXIgVj1MW1NdO2cuc3R5bGVLZXlzW1ZdPVtibSxFM119Zm9yKHZhciBZPWZ1bmN0aW9uKEpyLHZpKXtyZXR1cm4gZy5zdHlsZUtleXNbdmldWzBdPUwwKEpyLGcuc3R5bGVLZXlzW3ZpXVswXSl9LHJ0PWZ1bmN0aW9uKEpyLHZpKXtyZXR1cm4gZy5zdHlsZUtleXNbdmldWzFdPWh3KEpyLGcuc3R5bGVLZXlzW3ZpXVsxXSl9LG90PWZ1bmN0aW9uKEpyLHZpKXtZKEpyLHZpKSxydChKcix2aSl9LGh0PWZ1bmN0aW9uKEpyLHZpKXtmb3IodmFyIFhzPTA7WHM8SnIubGVuZ3RoO1hzKyspe3ZhciBFYT1Kci5jaGFyQ29kZUF0KFhzKTtZKEVhLHZpKSxydChFYSx2aSl9fSxkdD0yZTksTHQ9ZnVuY3Rpb24oSnIpe3JldHVybi0xMjg8SnImJkpyPDEyOCYmTWF0aC5mbG9vcihKcikhPT1Kcj9kdC0oSnIqMTAyNHwwKTpKcn0sa3Q9MDtrdDxULmxlbmd0aDtrdCsrKXt2YXIgRHQ9VFtrdF0sUHQ9cVtEdF07aWYoUHQhPW51bGwpe3ZhciAkdD10aGlzLnByb3BlcnRpZXNbRHRdLFp0PSR0LnR5cGUsWXQ9JHQuZ3JvdXBLZXkscXQ9dm9pZCAwOyR0Lmhhc2hPdmVycmlkZSE9bnVsbD9xdD0kdC5oYXNoT3ZlcnJpZGUoeSxQdCk6UHQucGZWYWx1ZSE9bnVsbCYmKHF0PVB0LnBmVmFsdWUpO3ZhciBuZT0kdC5lbnVtcz09bnVsbD9QdC52YWx1ZTpudWxsLEd0PXF0IT1udWxsLGdlPW5lIT1udWxsLGJlPUd0fHxnZSxpZT1QdC51bml0cztpZihadC5udW1iZXImJmJlJiYhWnQubXVsdGlwbGUpe3ZhciBGZT1HdD9xdDpuZTtvdChMdChGZSksWXQpLCFHdCYmaWUhPW51bGwmJmh0KGllLFl0KX1lbHNlIGh0KFB0LnN0clZhbHVlLFl0KX19Zm9yKHZhciB3ZT1bYm0sRTNdLGJuPTA7Ym48TC5sZW5ndGg7Ym4rKyl7dmFyIHplPUxbYm5dLEdlPWcuc3R5bGVLZXlzW3plXTt3ZVswXT1MMChHZVswXSx3ZVswXSksd2VbMV09aHcoR2VbMV0sd2VbMV0pfWcuc3R5bGVLZXk9SDUod2VbMF0sd2VbMV0pO3ZhciBFbj1nLnN0eWxlS2V5cztnLmxhYmVsRGltc0tleT1IYihFbi5sYWJlbERpbWVuc2lvbnMpO3ZhciBJbj1PKHksWyJsYWJlbCJdLEVuLmxhYmVsRGltZW5zaW9ucyk7aWYoZy5sYWJlbEtleT1IYihJbiksZy5sYWJlbFN0eWxlS2V5PUhiKFY1KEVuLmNvbW1vbkxhYmVsLEluKSksISQpe3ZhciBZbj1PKHksWyJzb3VyY2UtbGFiZWwiXSxFbi5sYWJlbERpbWVuc2lvbnMpO2cuc291cmNlTGFiZWxLZXk9SGIoWW4pLGcuc291cmNlTGFiZWxTdHlsZUtleT1IYihWNShFbi5jb21tb25MYWJlbCxZbikpO3ZhciBTbj1PKHksWyJ0YXJnZXQtbGFiZWwiXSxFbi5sYWJlbERpbWVuc2lvbnMpO2cudGFyZ2V0TGFiZWxLZXk9SGIoU24pLGcudGFyZ2V0TGFiZWxTdHlsZUtleT1IYihWNShFbi5jb21tb25MYWJlbCxTbikpfWlmKCQpe3ZhciBXbj1nLnN0eWxlS2V5cyxycj1Xbi5ub2RlQm9keSx3cj1Xbi5ub2RlQm9yZGVyLHVyPVduLmJhY2tncm91bmRJbWFnZSxlcj1Xbi5jb21wb3VuZCx2bj1Xbi5waWUsZ3I9W3JyLHdyLHVyLGVyLHZuXS5maWx0ZXIoZnVuY3Rpb24oZnIpe3JldHVybiBmciE9bnVsbH0pLnJlZHVjZShWNSxbYm0sRTNdKTtnLm5vZGVLZXk9SGIoZ3IpLGcuaGFzUGllPXZuIT1udWxsJiZ2blswXSE9PWJtJiZ2blsxXSE9PUUzfXJldHVybiBQIT09Zy5zdHlsZUtleX0sZzEuY2xlYXJTdHlsZUhpbnRzPWZ1bmN0aW9uKHkpe3ZhciBnPXkuX3ByaXZhdGU7Zy5zdHlsZUN4dEtleT0iIixnLnN0eWxlS2V5cz17fSxnLnN0eWxlS2V5PW51bGwsZy5sYWJlbEtleT1udWxsLGcubGFiZWxTdHlsZUtleT1udWxsLGcuc291cmNlTGFiZWxLZXk9bnVsbCxnLnNvdXJjZUxhYmVsU3R5bGVLZXk9bnVsbCxnLnRhcmdldExhYmVsS2V5PW51bGwsZy50YXJnZXRMYWJlbFN0eWxlS2V5PW51bGwsZy5ub2RlS2V5PW51bGwsZy5oYXNQaWU9bnVsbH0sZzEuYXBwbHlQYXJzZWRQcm9wZXJ0eT1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMsVD1nLEw9eS5fcHJpdmF0ZS5zdHlsZSxPLFA9eC50eXBlcywkPXgucHJvcGVydGllc1tULm5hbWVdLnR5cGUscT1ULmJ5cGFzcyxTPUxbVC5uYW1lXSxWPVMmJlMuYnlwYXNzLFk9eS5fcHJpdmF0ZSxydD0ibWFwcGluZyIsb3Q9ZnVuY3Rpb24ocnIpe3JldHVybiBycj09bnVsbD9udWxsOnJyLnBmVmFsdWUhPW51bGw/cnIucGZWYWx1ZTpyci52YWx1ZX0saHQ9ZnVuY3Rpb24oKXt2YXIgcnI9b3QoUyksd3I9b3QoVCk7eC5jaGVja1RyaWdnZXJzKHksVC5uYW1lLHJyLHdyKX07aWYoVCYmVC5uYW1lLnN1YnN0cigwLDMpPT09InBpZSImJlNjKCJUaGUgcGllIHN0eWxlIHByb3BlcnRpZXMgYXJlIGRlcHJlY2F0ZWQuICBDcmVhdGUgY2hhcnRzIHVzaW5nIGJhY2tncm91bmQgaW1hZ2VzIGluc3RlYWQuIiksZy5uYW1lPT09ImN1cnZlLXN0eWxlIiYmeS5pc0VkZ2UoKSYmKGcudmFsdWUhPT0iYmV6aWVyIiYmeS5pc0xvb3AoKXx8Zy52YWx1ZT09PSJoYXlzdGFjayImJih5LnNvdXJjZSgpLmlzUGFyZW50KCl8fHkudGFyZ2V0KCkuaXNQYXJlbnQoKSkpJiYoVD1nPXRoaXMucGFyc2UoZy5uYW1lLCJiZXppZXIiLHEpKSxULmRlbGV0ZSlyZXR1cm4gTFtULm5hbWVdPXZvaWQgMCxodCgpLCEwO2lmKFQuZGVsZXRlQnlwYXNzZWQpcmV0dXJuIFM/Uy5ieXBhc3M/KFMuYnlwYXNzZWQ9dm9pZCAwLGh0KCksITApOiExOihodCgpLCEwKTtpZihULmRlbGV0ZUJ5cGFzcylyZXR1cm4gUz9TLmJ5cGFzcz8oTFtULm5hbWVdPVMuYnlwYXNzZWQsaHQoKSwhMCk6ITE6KGh0KCksITApO3ZhciBkdD1mdW5jdGlvbigpe1NjKCJEbyBub3QgYXNzaWduIG1hcHBpbmdzIHRvIGVsZW1lbnRzIHdpdGhvdXQgY29ycmVzcG9uZGluZyBkYXRhIChpLmUuIGVsZSBgIit5LmlkKCkrImAgaGFzIG5vIG1hcHBpbmcgZm9yIHByb3BlcnR5IGAiK1QubmFtZSsiYCB3aXRoIGRhdGEgZmllbGQgYCIrVC5maWVsZCsiYCk7IHRyeSBhIGBbIitULmZpZWxkKyJdYCBzZWxlY3RvciB0byBsaW1pdCBzY29wZSB0byBlbGVtZW50cyB3aXRoIGAiK1QuZmllbGQrImAgZGVmaW5lZCIpfTtzd2l0Y2goVC5tYXBwZWQpe2Nhc2UgUC5tYXBEYXRhOntmb3IodmFyIEx0PVQuZmllbGQuc3BsaXQoIi4iKSxrdD1ZLmRhdGEsRHQ9MDtEdDxMdC5sZW5ndGgmJmt0O0R0Kyspe3ZhciBQdD1MdFtEdF07a3Q9a3RbUHRdfWlmKGt0PT1udWxsKXJldHVybiBkdCgpLCExO3ZhciAkdDtpZihYKGt0KSl7dmFyIFp0PVQuZmllbGRNYXgtVC5maWVsZE1pbjtadD09PTA/JHQ9MDokdD0oa3QtVC5maWVsZE1pbikvWnR9ZWxzZSByZXR1cm4gU2MoIkRvIG5vdCB1c2UgY29udGludW91cyBtYXBwZXJzIHdpdGhvdXQgc3BlY2lmeWluZyBudW1lcmljIGRhdGEgKGkuZS4gYCIrVC5maWVsZCsiOiAiK2t0KyJgIGZvciBgIit5LmlkKCkrImAgaXMgbm9uLW51bWVyaWMpIiksITE7aWYoJHQ8MD8kdD0wOiR0PjEmJigkdD0xKSwkLmNvbG9yKXt2YXIgWXQ9VC52YWx1ZU1pblswXSxxdD1ULnZhbHVlTWF4WzBdLG5lPVQudmFsdWVNaW5bMV0sR3Q9VC52YWx1ZU1heFsxXSxnZT1ULnZhbHVlTWluWzJdLGJlPVQudmFsdWVNYXhbMl0saWU9VC52YWx1ZU1pblszXT09bnVsbD8xOlQudmFsdWVNaW5bM10sRmU9VC52YWx1ZU1heFszXT09bnVsbD8xOlQudmFsdWVNYXhbM10sd2U9W01hdGgucm91bmQoWXQrKHF0LVl0KSokdCksTWF0aC5yb3VuZChuZSsoR3QtbmUpKiR0KSxNYXRoLnJvdW5kKGdlKyhiZS1nZSkqJHQpLE1hdGgucm91bmQoaWUrKEZlLWllKSokdCldO089e2J5cGFzczpULmJ5cGFzcyxuYW1lOlQubmFtZSx2YWx1ZTp3ZSxzdHJWYWx1ZToicmdiKCIrd2VbMF0rIiwgIit3ZVsxXSsiLCAiK3dlWzJdKyIpIn19ZWxzZSBpZigkLm51bWJlcil7dmFyIGJuPVQudmFsdWVNaW4rKFQudmFsdWVNYXgtVC52YWx1ZU1pbikqJHQ7Tz10aGlzLnBhcnNlKFQubmFtZSxibixULmJ5cGFzcyxydCl9ZWxzZSByZXR1cm4hMTtpZighTylyZXR1cm4gZHQoKSwhMTtPLm1hcHBpbmc9VCxUPU87YnJlYWt9Y2FzZSBQLmRhdGE6e2Zvcih2YXIgemU9VC5maWVsZC5zcGxpdCgiLiIpLEdlPVkuZGF0YSxFbj0wO0VuPHplLmxlbmd0aCYmR2U7RW4rKyl7dmFyIEluPXplW0VuXTtHZT1HZVtJbl19aWYoR2UhPW51bGwmJihPPXRoaXMucGFyc2UoVC5uYW1lLEdlLFQuYnlwYXNzLHJ0KSksIU8pcmV0dXJuIGR0KCksITE7Ty5tYXBwaW5nPVQsVD1PO2JyZWFrfWNhc2UgUC5mbjp7dmFyIFluPVQudmFsdWUsU249VC5mblZhbHVlIT1udWxsP1QuZm5WYWx1ZTpZbih5KTtpZihULnByZXZGblZhbHVlPVNuLFNuPT1udWxsKXJldHVybiBTYygiQ3VzdG9tIGZ1bmN0aW9uIG1hcHBlcnMgbWF5IG5vdCByZXR1cm4gbnVsbCAoaS5lLiBgIitULm5hbWUrImAgZm9yIGVsZSBgIit5LmlkKCkrImAgaXMgbnVsbCkiKSwhMTtpZihPPXRoaXMucGFyc2UoVC5uYW1lLFNuLFQuYnlwYXNzLHJ0KSwhTylyZXR1cm4gU2MoIkN1c3RvbSBmdW5jdGlvbiBtYXBwZXJzIG1heSBub3QgcmV0dXJuIGludmFsaWQgdmFsdWVzIGZvciB0aGUgcHJvcGVydHkgdHlwZSAoaS5lLiBgIitULm5hbWUrImAgZm9yIGVsZSBgIit5LmlkKCkrImAgaXMgaW52YWxpZCkiKSwhMTtPLm1hcHBpbmc9VmIoVCksVD1PO2JyZWFrfWNhc2Ugdm9pZCAwOmJyZWFrO2RlZmF1bHQ6cmV0dXJuITF9cmV0dXJuIHE/KFY/VC5ieXBhc3NlZD1TLmJ5cGFzc2VkOlQuYnlwYXNzZWQ9UyxMW1QubmFtZV09VCk6Vj9TLmJ5cGFzc2VkPVQ6TFtULm5hbWVdPVQsaHQoKSwhMH0sZzEuY2xlYW5FbGVtZW50cz1mdW5jdGlvbih5LGcpe2Zvcih2YXIgeD0wO3g8eS5sZW5ndGg7eCsrKXt2YXIgVD15W3hdO2lmKHRoaXMuY2xlYXJTdHlsZUhpbnRzKFQpLFQuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCksVC5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKSwhZylULl9wcml2YXRlLnN0eWxlPXt9O2Vsc2UgZm9yKHZhciBMPVQuX3ByaXZhdGUuc3R5bGUsTz1PYmplY3Qua2V5cyhMKSxQPTA7UDxPLmxlbmd0aDtQKyspe3ZhciAkPU9bUF0scT1MWyRdO3EhPW51bGwmJihxLmJ5cGFzcz9xLmJ5cGFzc2VkPW51bGw6TFskXT1udWxsKX19fSxnMS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLl9wcml2YXRlLmN5LGc9eS5tdXRhYmxlRWxlbWVudHMoKTtnLnVwZGF0ZVN0eWxlKCl9LGcxLnVwZGF0ZVRyYW5zaXRpb25zPWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcyxUPXkuX3ByaXZhdGUsTD15LnBzdHlsZSgidHJhbnNpdGlvbi1wcm9wZXJ0eSIpLnZhbHVlLE89eS5wc3R5bGUoInRyYW5zaXRpb24tZHVyYXRpb24iKS5wZlZhbHVlLFA9eS5wc3R5bGUoInRyYW5zaXRpb24tZGVsYXkiKS5wZlZhbHVlO2lmKEwubGVuZ3RoPjAmJk8+MCl7Zm9yKHZhciAkPXt9LHE9ITEsUz0wO1M8TC5sZW5ndGg7UysrKXt2YXIgVj1MW1NdLFk9eS5wc3R5bGUoVikscnQ9Z1tWXTtpZihydCl7dmFyIG90PXJ0LnByZXYsaHQ9b3QsZHQ9cnQubmV4dCE9bnVsbD9ydC5uZXh0OlksTHQ9ITEsa3Q9dm9pZCAwLER0PTFlLTY7aHQmJihYKGh0LnBmVmFsdWUpJiZYKGR0LnBmVmFsdWUpPyhMdD1kdC5wZlZhbHVlLWh0LnBmVmFsdWUsa3Q9aHQucGZWYWx1ZStEdCpMdCk6WChodC52YWx1ZSkmJlgoZHQudmFsdWUpPyhMdD1kdC52YWx1ZS1odC52YWx1ZSxrdD1odC52YWx1ZStEdCpMdCk6ZnQoaHQudmFsdWUpJiZmdChkdC52YWx1ZSkmJihMdD1odC52YWx1ZVswXSE9PWR0LnZhbHVlWzBdfHxodC52YWx1ZVsxXSE9PWR0LnZhbHVlWzFdfHxodC52YWx1ZVsyXSE9PWR0LnZhbHVlWzJdLGt0PWh0LnN0clZhbHVlKSxMdCYmKCRbVl09ZHQuc3RyVmFsdWUsdGhpcy5hcHBseUJ5cGFzcyh5LFYsa3QpLHE9ITApKX19aWYoIXEpcmV0dXJuO1QudHJhbnNpdGlvbmluZz0hMCxuZXcgZXgoZnVuY3Rpb24oUHQpe1A+MD95LmRlbGF5QW5pbWF0aW9uKFApLnBsYXkoKS5wcm9taXNlKCkudGhlbihQdCk6UHQoKX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4geS5hbmltYXRpb24oe3N0eWxlOiQsZHVyYXRpb246TyxlYXNpbmc6eS5wc3R5bGUoInRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIikudmFsdWUscXVldWU6ITF9KS5wbGF5KCkucHJvbWlzZSgpfSkudGhlbihmdW5jdGlvbigpe3gucmVtb3ZlQnlwYXNzZXMoeSxMKSx5LmVtaXRBbmROb3RpZnkoInN0eWxlIiksVC50cmFuc2l0aW9uaW5nPSExfSl9ZWxzZSBULnRyYW5zaXRpb25pbmcmJih0aGlzLnJlbW92ZUJ5cGFzc2VzKHksTCkseS5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpLFQudHJhbnNpdGlvbmluZz0hMSl9LGcxLmNoZWNrVHJpZ2dlcj1mdW5jdGlvbih5LGcseCxULEwsTyl7dmFyIFA9dGhpcy5wcm9wZXJ0aWVzW2ddLCQ9TChQKTskIT1udWxsJiYkKHgsVCkmJk8oUCl9LGcxLmNoZWNrWk9yZGVyVHJpZ2dlcj1mdW5jdGlvbih5LGcseCxUKXt2YXIgTD10aGlzO3RoaXMuY2hlY2tUcmlnZ2VyKHksZyx4LFQsZnVuY3Rpb24oTyl7cmV0dXJuIE8udHJpZ2dlcnNaT3JkZXJ9LGZ1bmN0aW9uKCl7TC5fcHJpdmF0ZS5jeS5ub3RpZnkoInpvcmRlciIseSl9KX0sZzEuY2hlY2tCb3VuZHNUcmlnZ2VyPWZ1bmN0aW9uKHksZyx4LFQpe3RoaXMuY2hlY2tUcmlnZ2VyKHksZyx4LFQsZnVuY3Rpb24oTCl7cmV0dXJuIEwudHJpZ2dlcnNCb3VuZHN9LGZ1bmN0aW9uKEwpe3kuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCkseS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKSxMLnRyaWdnZXJzQm91bmRzT2ZQYXJhbGxlbEJlemllcnMmJihnPT09ImN1cnZlLXN0eWxlIiYmKHg9PT0iYmV6aWVyInx8VD09PSJiZXppZXIiKXx8Zz09PSJkaXNwbGF5IiYmKHg9PT0ibm9uZSJ8fFQ9PT0ibm9uZSIpKSYmeS5wYXJhbGxlbEVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihPKXtPLmlzQnVuZGxlZEJlemllcigpJiZPLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpfSl9KX0sZzEuY2hlY2tUcmlnZ2Vycz1mdW5jdGlvbih5LGcseCxUKXt5LmRpcnR5U3R5bGVDYWNoZSgpLHRoaXMuY2hlY2taT3JkZXJUcmlnZ2VyKHksZyx4LFQpLHRoaXMuY2hlY2tCb3VuZHNUcmlnZ2VyKHksZyx4LFQpfTt2YXIgcWs9e307cWsuYXBwbHlCeXBhc3M9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9dGhpcyxPPVtdLFA9ITA7aWYoZz09PSIqInx8Zz09PSIqKiIpe2lmKHghPT12b2lkIDApZm9yKHZhciAkPTA7JDxMLnByb3BlcnRpZXMubGVuZ3RoOyQrKyl7dmFyIHE9TC5wcm9wZXJ0aWVzWyRdLFM9cS5uYW1lLFY9dGhpcy5wYXJzZShTLHgsITApO1YmJk8ucHVzaChWKX19ZWxzZSBpZihtdChnKSl7dmFyIFk9dGhpcy5wYXJzZShnLHgsITApO1kmJk8ucHVzaChZKX1lbHNlIGlmKHV0KGcpKXt2YXIgcnQ9ZztUPXg7Zm9yKHZhciBvdD1PYmplY3Qua2V5cyhydCksaHQ9MDtodDxvdC5sZW5ndGg7aHQrKyl7dmFyIGR0PW90W2h0XSxMdD1ydFtkdF07aWYoTHQ9PT12b2lkIDAmJihMdD1ydFtTZShkdCldKSxMdCE9PXZvaWQgMCl7dmFyIGt0PXRoaXMucGFyc2UoZHQsTHQsITApO2t0JiZPLnB1c2goa3QpfX19ZWxzZSByZXR1cm4hMTtpZihPLmxlbmd0aD09PTApcmV0dXJuITE7Zm9yKHZhciBEdD0hMSxQdD0wO1B0PHkubGVuZ3RoO1B0Kyspe2Zvcih2YXIgJHQ9eVtQdF0sWnQ9e30sWXQ9dm9pZCAwLHF0PTA7cXQ8Ty5sZW5ndGg7cXQrKyl7dmFyIG5lPU9bcXRdO2lmKFQpe3ZhciBHdD0kdC5wc3R5bGUobmUubmFtZSk7WXQ9WnRbbmUubmFtZV09e3ByZXY6R3R9fUR0PXRoaXMuYXBwbHlQYXJzZWRQcm9wZXJ0eSgkdCxWYihuZSkpfHxEdCxUJiYoWXQubmV4dD0kdC5wc3R5bGUobmUubmFtZSkpfUR0JiZ0aGlzLnVwZGF0ZVN0eWxlSGludHMoJHQpLFQmJnRoaXMudXBkYXRlVHJhbnNpdGlvbnMoJHQsWnQsUCl9cmV0dXJuIER0fSxxay5vdmVycmlkZUJ5cGFzcz1mdW5jdGlvbih5LGcseCl7Zz1nbihnKTtmb3IodmFyIFQ9MDtUPHkubGVuZ3RoO1QrKyl7dmFyIEw9eVtUXSxPPUwuX3ByaXZhdGUuc3R5bGVbZ10sUD10aGlzLnByb3BlcnRpZXNbZ10udHlwZSwkPVAuY29sb3IscT1QLm11dGlwbGUsUz1PP08ucGZWYWx1ZSE9bnVsbD9PLnBmVmFsdWU6Ty52YWx1ZTpudWxsOyFPfHwhTy5ieXBhc3M/dGhpcy5hcHBseUJ5cGFzcyhMLGcseCk6KE8udmFsdWU9eCxPLnBmVmFsdWUhPW51bGwmJihPLnBmVmFsdWU9eCksJD9PLnN0clZhbHVlPSJyZ2IoIit4LmpvaW4oIiwiKSsiKSI6cT9PLnN0clZhbHVlPXguam9pbigiICIpOk8uc3RyVmFsdWU9IiIreCx0aGlzLnVwZGF0ZVN0eWxlSGludHMoTCkpLHRoaXMuY2hlY2tUcmlnZ2VycyhMLGcsUyx4KX19LHFrLnJlbW92ZUFsbEJ5cGFzc2VzPWZ1bmN0aW9uKHksZyl7cmV0dXJuIHRoaXMucmVtb3ZlQnlwYXNzZXMoeSx0aGlzLnByb3BlcnR5TmFtZXMsZyl9LHFrLnJlbW92ZUJ5cGFzc2VzPWZ1bmN0aW9uKHksZyx4KXtmb3IodmFyIFQ9ITAsTD0wO0w8eS5sZW5ndGg7TCsrKXtmb3IodmFyIE89eVtMXSxQPXt9LCQ9MDskPGcubGVuZ3RoOyQrKyl7dmFyIHE9Z1skXSxTPXRoaXMucHJvcGVydGllc1txXSxWPU8ucHN0eWxlKFMubmFtZSk7aWYoISghVnx8IVYuYnlwYXNzKSl7dmFyIFk9IiIscnQ9dGhpcy5wYXJzZShxLFksITApLG90PVBbUy5uYW1lXT17cHJldjpWfTt0aGlzLmFwcGx5UGFyc2VkUHJvcGVydHkoTyxydCksb3QubmV4dD1PLnBzdHlsZShTLm5hbWUpfX10aGlzLnVwZGF0ZVN0eWxlSGludHMoTykseCYmdGhpcy51cGRhdGVUcmFuc2l0aW9ucyhPLFAsVCl9fTt2YXIgWUw9e307WUwuZ2V0RW1TaXplSW5QaXhlbHM9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLmNvbnRhaW5lckNzcygiZm9udC1zaXplIik7cmV0dXJuIHkhPW51bGw/cGFyc2VGbG9hdCh5KToxfSxZTC5jb250YWluZXJDc3M9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcy5fcHJpdmF0ZS5jeSx4PWcuY29udGFpbmVyKCk7aWYoUiYmeCYmUi5nZXRDb21wdXRlZFN0eWxlKXJldHVybiBSLmdldENvbXB1dGVkU3R5bGUoeCkuZ2V0UHJvcGVydHlWYWx1ZSh5KX07dmFyIFdiPXt9O1diLmdldFJlbmRlcmVkU3R5bGU9ZnVuY3Rpb24oeSxnKXtyZXR1cm4gZz90aGlzLmdldFN0eWxlUHJvcGVydHlWYWx1ZSh5LGcsITApOnRoaXMuZ2V0UmF3U3R5bGUoeSwhMCl9LFdiLmdldFJhd1N0eWxlPWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcztpZih5PXlbMF0seSl7Zm9yKHZhciBUPXt9LEw9MDtMPHgucHJvcGVydGllcy5sZW5ndGg7TCsrKXt2YXIgTz14LnByb3BlcnRpZXNbTF0sUD14LmdldFN0eWxlUHJvcGVydHlWYWx1ZSh5LE8ubmFtZSxnKTtQIT1udWxsJiYoVFtPLm5hbWVdPVAsVFtTZShPLm5hbWUpXT1QKX1yZXR1cm4gVH19LFdiLmdldEluZGV4ZWRTdHlsZT1mdW5jdGlvbih5LGcseCxUKXt2YXIgTD15LnBzdHlsZShnKVt4XVtUXTtyZXR1cm4gTD8/eS5jeSgpLnN0eWxlKCkuZ2V0RGVmYXVsdFByb3BlcnR5KGcpW3hdWzBdfSxXYi5nZXRTdHlsZVByb3BlcnR5VmFsdWU9ZnVuY3Rpb24oeSxnLHgpe3ZhciBUPXRoaXM7aWYoeT15WzBdLHkpe3ZhciBMPVQucHJvcGVydGllc1tnXTtMLmFsaWFzJiYoTD1MLnBvaW50c1RvKTt2YXIgTz1MLnR5cGUsUD15LnBzdHlsZShMLm5hbWUpO2lmKFApe3ZhciAkPVAudmFsdWUscT1QLnVuaXRzLFM9UC5zdHJWYWx1ZTtpZih4JiZPLm51bWJlciYmJCE9bnVsbCYmWCgkKSl7dmFyIFY9eS5jeSgpLnpvb20oKSxZPWZ1bmN0aW9uKEx0KXtyZXR1cm4gTHQqVn0scnQ9ZnVuY3Rpb24oTHQsa3Qpe3JldHVybiBZKEx0KStrdH0sb3Q9ZnQoJCksaHQ9b3Q/cS5ldmVyeShmdW5jdGlvbihkdCl7cmV0dXJuIGR0IT1udWxsfSk6cSE9bnVsbDtyZXR1cm4gaHQ/b3Q/JC5tYXAoZnVuY3Rpb24oZHQsTHQpe3JldHVybiBydChkdCxxW0x0XSl9KS5qb2luKCIgIik6cnQoJCxxKTpvdD8kLm1hcChmdW5jdGlvbihkdCl7cmV0dXJuIG10KGR0KT9kdDoiIitZKGR0KX0pLmpvaW4oIiAiKToiIitZKCQpfWVsc2UgaWYoUyE9bnVsbClyZXR1cm4gU31yZXR1cm4gbnVsbH19LFdiLmdldEFuaW1hdGlvblN0YXJ0U3R5bGU9ZnVuY3Rpb24oeSxnKXtmb3IodmFyIHg9e30sVD0wO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgTD1nW1RdLE89TC5uYW1lLFA9eS5wc3R5bGUoTyk7UCE9PXZvaWQgMCYmKHV0KFApP1A9dGhpcy5wYXJzZShPLFAuc3RyVmFsdWUpOlA9dGhpcy5wYXJzZShPLFApKSxQJiYoeFtPXT1QKX1yZXR1cm4geH0sV2IuZ2V0UHJvcHNMaXN0PWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMseD1bXSxUPXksTD1nLnByb3BlcnRpZXM7aWYoVClmb3IodmFyIE89T2JqZWN0LmtleXMoVCksUD0wO1A8Ty5sZW5ndGg7UCsrKXt2YXIgJD1PW1BdLHE9VFskXSxTPUxbJF18fExbZ24oJCldLFY9dGhpcy5wYXJzZShTLm5hbWUscSk7ViYmeC5wdXNoKFYpfXJldHVybiB4fSxXYi5nZXROb25EZWZhdWx0UHJvcGVydGllc0hhc2g9ZnVuY3Rpb24oeSxnLHgpe3ZhciBUPXguc2xpY2UoKSxMLE8sUCwkLHEsUztmb3IocT0wO3E8Zy5sZW5ndGg7cSsrKWlmKEw9Z1txXSxPPXkucHN0eWxlKEwsITEpLE8hPW51bGwpaWYoTy5wZlZhbHVlIT1udWxsKVRbMF09TDAoJCxUWzBdKSxUWzFdPWh3KCQsVFsxXSk7ZWxzZSBmb3IoUD1PLnN0clZhbHVlLFM9MDtTPFAubGVuZ3RoO1MrKykkPVAuY2hhckNvZGVBdChTKSxUWzBdPUwwKCQsVFswXSksVFsxXT1odygkLFRbMV0pO3JldHVybiBUfSxXYi5nZXRQcm9wZXJ0aWVzSGFzaD1XYi5nZXROb25EZWZhdWx0UHJvcGVydGllc0hhc2g7dmFyIGZDPXt9O2ZDLmFwcGVuZEZyb21Kc29uPWZ1bmN0aW9uKHkpe2Zvcih2YXIgZz10aGlzLHg9MDt4PHkubGVuZ3RoO3grKyl7dmFyIFQ9eVt4XSxMPVQuc2VsZWN0b3IsTz1ULnN0eWxlfHxULmNzcyxQPU9iamVjdC5rZXlzKE8pO2cuc2VsZWN0b3IoTCk7Zm9yKHZhciAkPTA7JDxQLmxlbmd0aDskKyspe3ZhciBxPVBbJF0sUz1PW3FdO2cuY3NzKHEsUyl9fXJldHVybiBnfSxmQy5mcm9tSnNvbj1mdW5jdGlvbih5KXt2YXIgZz10aGlzO3JldHVybiBnLnJlc2V0VG9EZWZhdWx0KCksZy5hcHBlbmRGcm9tSnNvbih5KSxnfSxmQy5qc29uPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PVtdLGc9dGhpcy5kZWZhdWx0TGVuZ3RoO2c8dGhpcy5sZW5ndGg7ZysrKXtmb3IodmFyIHg9dGhpc1tnXSxUPXguc2VsZWN0b3IsTD14LnByb3BlcnRpZXMsTz17fSxQPTA7UDxMLmxlbmd0aDtQKyspe3ZhciAkPUxbUF07T1skLm5hbWVdPSQuc3RyVmFsdWV9eS5wdXNoKHtzZWxlY3RvcjpUP1QudG9TdHJpbmcoKToiY29yZSIsc3R5bGU6T30pfXJldHVybiB5fTt2YXIgS0w9e307S0wuYXBwZW5kRnJvbVN0cmluZz1mdW5jdGlvbih5KXt2YXIgZz10aGlzLHg9dGhpcyxUPSIiK3ksTCxPLFA7VD1ULnJlcGxhY2UoL1svXVsqXShcc3wuKSs/WypdWy9dL2csIiIpO2Z1bmN0aW9uICQoKXtULmxlbmd0aD5MLmxlbmd0aD9UPVQuc3Vic3RyKEwubGVuZ3RoKTpUPSIifWZ1bmN0aW9uIHEoKXtPLmxlbmd0aD5QLmxlbmd0aD9PPU8uc3Vic3RyKFAubGVuZ3RoKTpPPSIifWZvcig7Oyl7dmFyIFM9VC5tYXRjaCgvXlxzKiQvKTtpZihTKWJyZWFrO3ZhciBWPVQubWF0Y2goL15ccyooKD86LnxccykrPylccypceygoPzoufFxzKSs/KVx9Lyk7aWYoIVYpe1NjKCJIYWx0aW5nIHN0eWxlc2hlZXQgcGFyc2luZzogU3RyaW5nIHN0eWxlc2hlZXQgY29udGFpbnMgbW9yZSB0byBwYXJzZSBidXQgbm8gc2VsZWN0b3IgYW5kIGJsb2NrIGZvdW5kIGluOiAiK1QpO2JyZWFrfUw9VlswXTt2YXIgWT1WWzFdO2lmKFkhPT0iY29yZSIpe3ZhciBydD1uZXcgRW0oWSk7aWYocnQuaW52YWxpZCl7U2MoIlNraXBwaW5nIHBhcnNpbmcgb2YgYmxvY2s6IEludmFsaWQgc2VsZWN0b3IgZm91bmQgaW4gc3RyaW5nIHN0eWxlc2hlZXQ6ICIrWSksJCgpO2NvbnRpbnVlfX12YXIgb3Q9VlsyXSxodD0hMTtPPW90O2Zvcih2YXIgZHQ9W107Oyl7dmFyIEx0PU8ubWF0Y2goL15ccyokLyk7aWYoTHQpYnJlYWs7dmFyIGt0PU8ubWF0Y2goL15ccyooLis/KVxzKjpccyooLis/KSg/OlxzKjt8XHMqJCkvKTtpZigha3Qpe1NjKCJTa2lwcGluZyBwYXJzaW5nIG9mIGJsb2NrOiBJbnZhbGlkIGZvcm1hdHRpbmcgb2Ygc3R5bGUgcHJvcGVydHkgYW5kIHZhbHVlIGRlZmluaXRpb25zIGZvdW5kIGluOiIrb3QpLGh0PSEwO2JyZWFrfVA9a3RbMF07dmFyIER0PWt0WzFdLFB0PWt0WzJdLCR0PWcucHJvcGVydGllc1tEdF07aWYoISR0KXtTYygiU2tpcHBpbmcgcHJvcGVydHk6IEludmFsaWQgcHJvcGVydHkgbmFtZSBpbjogIitQKSxxKCk7Y29udGludWV9dmFyIFp0PXgucGFyc2UoRHQsUHQpO2lmKCFadCl7U2MoIlNraXBwaW5nIHByb3BlcnR5OiBJbnZhbGlkIHByb3BlcnR5IGRlZmluaXRpb24gaW46ICIrUCkscSgpO2NvbnRpbnVlfWR0LnB1c2goe25hbWU6RHQsdmFsOlB0fSkscSgpfWlmKGh0KXskKCk7YnJlYWt9eC5zZWxlY3RvcihZKTtmb3IodmFyIFl0PTA7WXQ8ZHQubGVuZ3RoO1l0Kyspe3ZhciBxdD1kdFtZdF07eC5jc3MocXQubmFtZSxxdC52YWwpfSQoKX1yZXR1cm4geH0sS0wuZnJvbVN0cmluZz1mdW5jdGlvbih5KXt2YXIgZz10aGlzO3JldHVybiBnLnJlc2V0VG9EZWZhdWx0KCksZy5hcHBlbmRGcm9tU3RyaW5nKHkpLGd9O3ZhciB6Zj17fTsoZnVuY3Rpb24oKXt2YXIgeT1ZZSxnPWtlLHg9cmUsVD1zZSxMPVBlLE89ZnVuY3Rpb24oZ3Ipe3JldHVybiJeIitncisiXFxzKlxcKFxccyooW1xcd1xcLl0rKVxccypcXCkkIn0sUD1mdW5jdGlvbihncil7dmFyIGZyPXkrInxcXHcrfCIrZysifCIreCsifCIrVCsifCIrTDtyZXR1cm4iXiIrZ3IrIlxccypcXCgoW1xcd1xcLl0rKVxccypcXCxcXHMqKCIreSsiKVxccypcXCxcXHMqKCIreSsiKVxccyosXFxzKigiK2ZyKyIpXFxzKlxcLFxccyooIitmcisiKVxcKSQifSwkPVtgXnVybFxccypcXChcXHMqWyciXT8oLis/KVsnIl0/XFxzKlxcKSRgLCJeKG5vbmUpJCIsIl4oLispJCJdO3pmLnR5cGVzPXt0aW1lOntudW1iZXI6ITAsbWluOjAsdW5pdHM6InN8bXMiLGltcGxpY2l0VW5pdHM6Im1zIn0scGVyY2VudDp7bnVtYmVyOiEwLG1pbjowLG1heDoxMDAsdW5pdHM6IiUiLGltcGxpY2l0VW5pdHM6IiUifSxwZXJjZW50YWdlczp7bnVtYmVyOiEwLG1pbjowLG1heDoxMDAsdW5pdHM6IiUiLGltcGxpY2l0VW5pdHM6IiUiLG11bHRpcGxlOiEwfSx6ZXJvT25lTnVtYmVyOntudW1iZXI6ITAsbWluOjAsbWF4OjEsdW5pdGxlc3M6ITB9LHplcm9PbmVOdW1iZXJzOntudW1iZXI6ITAsbWluOjAsbWF4OjEsdW5pdGxlc3M6ITAsbXVsdGlwbGU6ITB9LG5PbmVPbmVOdW1iZXI6e251bWJlcjohMCxtaW46LTEsbWF4OjEsdW5pdGxlc3M6ITB9LG5vbk5lZ2F0aXZlSW50OntudW1iZXI6ITAsbWluOjAsaW50ZWdlcjohMCx1bml0bGVzczohMH0scG9zaXRpb246e2VudW1zOlsicGFyZW50Iiwib3JpZ2luIl19LG5vZGVTaXplOntudW1iZXI6ITAsbWluOjAsZW51bXM6WyJsYWJlbCJdfSxudW1iZXI6e251bWJlcjohMCx1bml0bGVzczohMH0sbnVtYmVyczp7bnVtYmVyOiEwLHVuaXRsZXNzOiEwLG11bHRpcGxlOiEwfSxwb3NpdGl2ZU51bWJlcjp7bnVtYmVyOiEwLHVuaXRsZXNzOiEwLG1pbjowLHN0cmljdE1pbjohMH0sc2l6ZTp7bnVtYmVyOiEwLG1pbjowfSxiaWRpcmVjdGlvbmFsU2l6ZTp7bnVtYmVyOiEwfSxiaWRpcmVjdGlvbmFsU2l6ZU1heWJlUGVyY2VudDp7bnVtYmVyOiEwLGFsbG93UGVyY2VudDohMH0sYmlkaXJlY3Rpb25hbFNpemVzOntudW1iZXI6ITAsbXVsdGlwbGU6ITB9LHNpemVNYXliZVBlcmNlbnQ6e251bWJlcjohMCxtaW46MCxhbGxvd1BlcmNlbnQ6ITB9LGF4aXNEaXJlY3Rpb246e2VudW1zOlsiaG9yaXpvbnRhbCIsImxlZnR3YXJkIiwicmlnaHR3YXJkIiwidmVydGljYWwiLCJ1cHdhcmQiLCJkb3dud2FyZCIsImF1dG8iXX0scGFkZGluZ1JlbGF0aXZlVG86e2VudW1zOlsid2lkdGgiLCJoZWlnaHQiLCJhdmVyYWdlIiwibWluIiwibWF4Il19LGJnV0g6e251bWJlcjohMCxtaW46MCxhbGxvd1BlcmNlbnQ6ITAsZW51bXM6WyJhdXRvIl0sbXVsdGlwbGU6ITB9LGJnUG9zOntudW1iZXI6ITAsYWxsb3dQZXJjZW50OiEwLG11bHRpcGxlOiEwfSxiZ1JlbGF0aXZlVG86e2VudW1zOlsiaW5uZXIiLCJpbmNsdWRlLXBhZGRpbmciXSxtdWx0aXBsZTohMH0sYmdSZXBlYXQ6e2VudW1zOlsicmVwZWF0IiwicmVwZWF0LXgiLCJyZXBlYXQteSIsIm5vLXJlcGVhdCJdLG11bHRpcGxlOiEwfSxiZ0ZpdDp7ZW51bXM6WyJub25lIiwiY29udGFpbiIsImNvdmVyIl0sbXVsdGlwbGU6ITB9LGJnQ3Jvc3NPcmlnaW46e2VudW1zOlsiYW5vbnltb3VzIiwidXNlLWNyZWRlbnRpYWxzIl0sbXVsdGlwbGU6ITB9LGJnQ2xpcDp7ZW51bXM6WyJub25lIiwibm9kZSJdLG11bHRpcGxlOiEwfSxiZ0NvbnRhaW5tZW50OntlbnVtczpbImluc2lkZSIsIm92ZXIiXSxtdWx0aXBsZTohMH0sY29sb3I6e2NvbG9yOiEwfSxjb2xvcnM6e2NvbG9yOiEwLG11bHRpcGxlOiEwfSxmaWxsOntlbnVtczpbInNvbGlkIiwibGluZWFyLWdyYWRpZW50IiwicmFkaWFsLWdyYWRpZW50Il19LGJvb2w6e2VudW1zOlsieWVzIiwibm8iXX0sYm9vbHM6e2VudW1zOlsieWVzIiwibm8iXSxtdWx0aXBsZTohMH0sbGluZVN0eWxlOntlbnVtczpbInNvbGlkIiwiZG90dGVkIiwiZGFzaGVkIl19LGxpbmVDYXA6e2VudW1zOlsiYnV0dCIsInJvdW5kIiwic3F1YXJlIl19LGJvcmRlclN0eWxlOntlbnVtczpbInNvbGlkIiwiZG90dGVkIiwiZGFzaGVkIiwiZG91YmxlIl19LGN1cnZlU3R5bGU6e2VudW1zOlsiYmV6aWVyIiwidW5idW5kbGVkLWJlemllciIsImhheXN0YWNrIiwic2VnbWVudHMiLCJzdHJhaWdodCIsInN0cmFpZ2h0LXRyaWFuZ2xlIiwidGF4aSJdfSxmb250RmFtaWx5OntyZWdleDonXihbXFx3LSBcXCJdKyg/OlxccyosXFxzKltcXHctIFxcIl0rKSopJCd9LGZvbnRTdHlsZTp7ZW51bXM6WyJpdGFsaWMiLCJub3JtYWwiLCJvYmxpcXVlIl19LGZvbnRXZWlnaHQ6e2VudW1zOlsibm9ybWFsIiwiYm9sZCIsImJvbGRlciIsImxpZ2h0ZXIiLCIxMDAiLCIyMDAiLCIzMDAiLCI0MDAiLCI1MDAiLCI2MDAiLCI4MDAiLCI5MDAiLDEwMCwyMDAsMzAwLDQwMCw1MDAsNjAwLDcwMCw4MDAsOTAwXX0sdGV4dERlY29yYXRpb246e2VudW1zOlsibm9uZSIsInVuZGVybGluZSIsIm92ZXJsaW5lIiwibGluZS10aHJvdWdoIl19LHRleHRUcmFuc2Zvcm06e2VudW1zOlsibm9uZSIsInVwcGVyY2FzZSIsImxvd2VyY2FzZSJdfSx0ZXh0V3JhcDp7ZW51bXM6WyJub25lIiwid3JhcCIsImVsbGlwc2lzIl19LHRleHRPdmVyZmxvd1dyYXA6e2VudW1zOlsid2hpdGVzcGFjZSIsImFueXdoZXJlIl19LHRleHRCYWNrZ3JvdW5kU2hhcGU6e2VudW1zOlsicmVjdGFuZ2xlIiwicm91bmRyZWN0YW5nbGUiLCJyb3VuZC1yZWN0YW5nbGUiXX0sbm9kZVNoYXBlOntlbnVtczpbInJlY3RhbmdsZSIsInJvdW5kcmVjdGFuZ2xlIiwicm91bmQtcmVjdGFuZ2xlIiwiY3V0cmVjdGFuZ2xlIiwiY3V0LXJlY3RhbmdsZSIsImJvdHRvbXJvdW5kcmVjdGFuZ2xlIiwiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSIsImJhcnJlbCIsImVsbGlwc2UiLCJ0cmlhbmdsZSIsInJvdW5kLXRyaWFuZ2xlIiwic3F1YXJlIiwicGVudGFnb24iLCJyb3VuZC1wZW50YWdvbiIsImhleGFnb24iLCJyb3VuZC1oZXhhZ29uIiwiY29uY2F2ZWhleGFnb24iLCJjb25jYXZlLWhleGFnb24iLCJoZXB0YWdvbiIsInJvdW5kLWhlcHRhZ29uIiwib2N0YWdvbiIsInJvdW5kLW9jdGFnb24iLCJ0YWciLCJyb3VuZC10YWciLCJzdGFyIiwiZGlhbW9uZCIsInJvdW5kLWRpYW1vbmQiLCJ2ZWUiLCJyaG9tYm9pZCIsInBvbHlnb24iXX0sb3ZlcmxheVNoYXBlOntlbnVtczpbInJvdW5kcmVjdGFuZ2xlIiwicm91bmQtcmVjdGFuZ2xlIiwiZWxsaXBzZSJdfSxjb21wb3VuZEluY2x1ZGVMYWJlbHM6e2VudW1zOlsiaW5jbHVkZSIsImV4Y2x1ZGUiXX0sYXJyb3dTaGFwZTp7ZW51bXM6WyJ0ZWUiLCJ0cmlhbmdsZSIsInRyaWFuZ2xlLXRlZSIsImNpcmNsZS10cmlhbmdsZSIsInRyaWFuZ2xlLWNyb3NzIiwidHJpYW5nbGUtYmFja2N1cnZlIiwidmVlIiwic3F1YXJlIiwiY2lyY2xlIiwiZGlhbW9uZCIsImNoZXZyb24iLCJub25lIl19LGFycm93RmlsbDp7ZW51bXM6WyJmaWxsZWQiLCJob2xsb3ciXX0sZGlzcGxheTp7ZW51bXM6WyJlbGVtZW50Iiwibm9uZSJdfSx2aXNpYmlsaXR5OntlbnVtczpbImhpZGRlbiIsInZpc2libGUiXX0sekNvbXBvdW5kRGVwdGg6e2VudW1zOlsiYm90dG9tIiwib3JwaGFuIiwiYXV0byIsInRvcCJdfSx6SW5kZXhDb21wYXJlOntlbnVtczpbImF1dG8iLCJtYW51YWwiXX0sdmFsaWduOntlbnVtczpbInRvcCIsImNlbnRlciIsImJvdHRvbSJdfSxoYWxpZ246e2VudW1zOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il19LGp1c3RpZmljYXRpb246e2VudW1zOlsibGVmdCIsImNlbnRlciIsInJpZ2h0IiwiYXV0byJdfSx0ZXh0OntzdHJpbmc6ITB9LGRhdGE6e21hcHBpbmc6ITAscmVnZXg6TygiZGF0YSIpfSxsYXlvdXREYXRhOnttYXBwaW5nOiEwLHJlZ2V4Ok8oImxheW91dERhdGEiKX0sc2NyYXRjaDp7bWFwcGluZzohMCxyZWdleDpPKCJzY3JhdGNoIil9LG1hcERhdGE6e21hcHBpbmc6ITAscmVnZXg6UCgibWFwRGF0YSIpfSxtYXBMYXlvdXREYXRhOnttYXBwaW5nOiEwLHJlZ2V4OlAoIm1hcExheW91dERhdGEiKX0sbWFwU2NyYXRjaDp7bWFwcGluZzohMCxyZWdleDpQKCJtYXBTY3JhdGNoIil9LGZuOnttYXBwaW5nOiEwLGZuOiEwfSx1cmw6e3JlZ2V4ZXM6JCxzaW5nbGVSZWdleE1hdGNoVmFsdWU6ITB9LHVybHM6e3JlZ2V4ZXM6JCxzaW5nbGVSZWdleE1hdGNoVmFsdWU6ITAsbXVsdGlwbGU6ITB9LHByb3BMaXN0Ontwcm9wTGlzdDohMH0sYW5nbGU6e251bWJlcjohMCx1bml0czoiZGVnfHJhZCIsaW1wbGljaXRVbml0czoicmFkIn0sdGV4dFJvdGF0aW9uOntudW1iZXI6ITAsdW5pdHM6ImRlZ3xyYWQiLGltcGxpY2l0VW5pdHM6InJhZCIsZW51bXM6WyJub25lIiwiYXV0b3JvdGF0ZSJdfSxwb2x5Z29uUG9pbnRMaXN0OntudW1iZXI6ITAsbXVsdGlwbGU6ITAsZXZlbk11bHRpcGxlOiEwLG1pbjotMSxtYXg6MSx1bml0bGVzczohMH0sZWRnZURpc3RhbmNlczp7ZW51bXM6WyJpbnRlcnNlY3Rpb24iLCJub2RlLXBvc2l0aW9uIl19LGVkZ2VFbmRwb2ludDp7bnVtYmVyOiEwLG11bHRpcGxlOiEwLHVuaXRzOiIlfHB4fGVtfGRlZ3xyYWQiLGltcGxpY2l0VW5pdHM6InB4IixlbnVtczpbImluc2lkZS10by1ub2RlIiwib3V0c2lkZS10by1ub2RlIiwib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsIiwib3V0c2lkZS10by1saW5lIiwib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIl0sc2luZ2xlRW51bTohMCx2YWxpZGF0ZTpmdW5jdGlvbihncixmcil7c3dpdGNoKGdyLmxlbmd0aCl7Y2FzZSAyOnJldHVybiBmclswXSE9PSJkZWciJiZmclswXSE9PSJyYWQiJiZmclsxXSE9PSJkZWciJiZmclsxXSE9PSJyYWQiO2Nhc2UgMTpyZXR1cm4gbXQoZ3JbMF0pfHxmclswXT09PSJkZWcifHxmclswXT09PSJyYWQiO2RlZmF1bHQ6cmV0dXJuITF9fX0sZWFzaW5nOntyZWdleGVzOlsiXihzcHJpbmcpXFxzKlxcKFxccyooIit5KyIpXFxzKixcXHMqKCIreSsiKVxccypcXCkkIiwiXihjdWJpYy1iZXppZXIpXFxzKlxcKFxccyooIit5KyIpXFxzKixcXHMqKCIreSsiKVxccyosXFxzKigiK3krIilcXHMqLFxccyooIit5KyIpXFxzKlxcKSQiXSxlbnVtczpbImxpbmVhciIsImVhc2UiLCJlYXNlLWluIiwiZWFzZS1vdXQiLCJlYXNlLWluLW91dCIsImVhc2UtaW4tc2luZSIsImVhc2Utb3V0LXNpbmUiLCJlYXNlLWluLW91dC1zaW5lIiwiZWFzZS1pbi1xdWFkIiwiZWFzZS1vdXQtcXVhZCIsImVhc2UtaW4tb3V0LXF1YWQiLCJlYXNlLWluLWN1YmljIiwiZWFzZS1vdXQtY3ViaWMiLCJlYXNlLWluLW91dC1jdWJpYyIsImVhc2UtaW4tcXVhcnQiLCJlYXNlLW91dC1xdWFydCIsImVhc2UtaW4tb3V0LXF1YXJ0IiwiZWFzZS1pbi1xdWludCIsImVhc2Utb3V0LXF1aW50IiwiZWFzZS1pbi1vdXQtcXVpbnQiLCJlYXNlLWluLWV4cG8iLCJlYXNlLW91dC1leHBvIiwiZWFzZS1pbi1vdXQtZXhwbyIsImVhc2UtaW4tY2lyYyIsImVhc2Utb3V0LWNpcmMiLCJlYXNlLWluLW91dC1jaXJjIl19LGdyYWRpZW50RGlyZWN0aW9uOntlbnVtczpbInRvLWJvdHRvbSIsInRvLXRvcCIsInRvLWxlZnQiLCJ0by1yaWdodCIsInRvLWJvdHRvbS1yaWdodCIsInRvLWJvdHRvbS1sZWZ0IiwidG8tdG9wLXJpZ2h0IiwidG8tdG9wLWxlZnQiLCJ0by1yaWdodC1ib3R0b20iLCJ0by1sZWZ0LWJvdHRvbSIsInRvLXJpZ2h0LXRvcCIsInRvLWxlZnQtdG9wIl19LGJvdW5kc0V4cGFuc2lvbjp7bnVtYmVyOiEwLG11bHRpcGxlOiEwLG1pbjowLHZhbGlkYXRlOmZ1bmN0aW9uKGdyKXt2YXIgZnI9Z3IubGVuZ3RoO3JldHVybiBmcj09PTF8fGZyPT09Mnx8ZnI9PT00fX19O3ZhciBxPXt6ZXJvTm9uWmVybzpmdW5jdGlvbihncixmcil7cmV0dXJuKGdyPT1udWxsfHxmcj09bnVsbCkmJmdyIT09ZnJ8fGdyPT0wJiZmciE9MD8hMDpnciE9MCYmZnI9PTB9LGFueTpmdW5jdGlvbihncixmcil7cmV0dXJuIGdyIT1mcn0sZW1wdHlOb25FbXB0eTpmdW5jdGlvbihncixmcil7dmFyIEpyPVooZ3IpLHZpPVooZnIpO3JldHVybiBKciYmIXZpfHwhSnImJnZpfX0sUz16Zi50eXBlcyxWPVt7bmFtZToibGFiZWwiLHR5cGU6Uy50ZXh0LHRyaWdnZXJzQm91bmRzOnEuYW55LHRyaWdnZXJzWk9yZGVyOnEuZW1wdHlOb25FbXB0eX0se25hbWU6InRleHQtcm90YXRpb24iLHR5cGU6Uy50ZXh0Um90YXRpb24sdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0ZXh0LW1hcmdpbi14Iix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0ZXh0LW1hcmdpbi15Iix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9XSxZPVt7bmFtZToic291cmNlLWxhYmVsIix0eXBlOlMudGV4dCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InNvdXJjZS10ZXh0LXJvdGF0aW9uIix0eXBlOlMudGV4dFJvdGF0aW9uLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToic291cmNlLXRleHQtbWFyZ2luLXgiLHR5cGU6Uy5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InNvdXJjZS10ZXh0LW1hcmdpbi15Iix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJzb3VyY2UtdGV4dC1vZmZzZXQiLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fV0scnQ9W3tuYW1lOiJ0YXJnZXQtbGFiZWwiLHR5cGU6Uy50ZXh0LHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGFyZ2V0LXRleHQtcm90YXRpb24iLHR5cGU6Uy50ZXh0Um90YXRpb24sdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0YXJnZXQtdGV4dC1tYXJnaW4teCIsdHlwZTpTLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGFyZ2V0LXRleHQtbWFyZ2luLXkiLHR5cGU6Uy5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InRhcmdldC10ZXh0LW9mZnNldCIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9XSxvdD1be25hbWU6ImZvbnQtZmFtaWx5Iix0eXBlOlMuZm9udEZhbWlseSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImZvbnQtc3R5bGUiLHR5cGU6Uy5mb250U3R5bGUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJmb250LXdlaWdodCIsdHlwZTpTLmZvbnRXZWlnaHQsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJmb250LXNpemUiLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC10cmFuc2Zvcm0iLHR5cGU6Uy50ZXh0VHJhbnNmb3JtLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC13cmFwIix0eXBlOlMudGV4dFdyYXAsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0ZXh0LW92ZXJmbG93LXdyYXAiLHR5cGU6Uy50ZXh0T3ZlcmZsb3dXcmFwLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC1tYXgtd2lkdGgiLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC1vdXRsaW5lLXdpZHRoIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImxpbmUtaGVpZ2h0Iix0eXBlOlMucG9zaXRpdmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9XSxodD1be25hbWU6InRleHQtdmFsaWduIix0eXBlOlMudmFsaWduLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC1oYWxpZ24iLHR5cGU6Uy5oYWxpZ24sdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJjb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToidGV4dC1vdXRsaW5lLWNvbG9yIix0eXBlOlMuY29sb3J9LHtuYW1lOiJ0ZXh0LW91dGxpbmUtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJ0ZXh0LWJhY2tncm91bmQtY29sb3IiLHR5cGU6Uy5jb2xvcn0se25hbWU6InRleHQtYmFja2dyb3VuZC1vcGFjaXR5Iix0eXBlOlMuemVyb09uZU51bWJlcn0se25hbWU6InRleHQtYmFja2dyb3VuZC1wYWRkaW5nIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InRleHQtYm9yZGVyLW9wYWNpdHkiLHR5cGU6Uy56ZXJvT25lTnVtYmVyfSx7bmFtZToidGV4dC1ib3JkZXItY29sb3IiLHR5cGU6Uy5jb2xvcn0se25hbWU6InRleHQtYm9yZGVyLXdpZHRoIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InRleHQtYm9yZGVyLXN0eWxlIix0eXBlOlMuYm9yZGVyU3R5bGUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0ZXh0LWJhY2tncm91bmQtc2hhcGUiLHR5cGU6Uy50ZXh0QmFja2dyb3VuZFNoYXBlLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC1qdXN0aWZpY2F0aW9uIix0eXBlOlMuanVzdGlmaWNhdGlvbn1dLGR0PVt7bmFtZToiZXZlbnRzIix0eXBlOlMuYm9vbH0se25hbWU6InRleHQtZXZlbnRzIix0eXBlOlMuYm9vbH1dLEx0PVt7bmFtZToiZGlzcGxheSIsdHlwZTpTLmRpc3BsYXksdHJpZ2dlcnNaT3JkZXI6cS5hbnksdHJpZ2dlcnNCb3VuZHM6cS5hbnksdHJpZ2dlcnNCb3VuZHNPZlBhcmFsbGVsQmV6aWVyczohMH0se25hbWU6InZpc2liaWxpdHkiLHR5cGU6Uy52aXNpYmlsaXR5LHRyaWdnZXJzWk9yZGVyOnEuYW55fSx7bmFtZToib3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXIsdHJpZ2dlcnNaT3JkZXI6cS56ZXJvTm9uWmVyb30se25hbWU6InRleHQtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJtaW4tem9vbWVkLWZvbnQtc2l6ZSIsdHlwZTpTLnNpemV9LHtuYW1lOiJ6LWNvbXBvdW5kLWRlcHRoIix0eXBlOlMuekNvbXBvdW5kRGVwdGgsdHJpZ2dlcnNaT3JkZXI6cS5hbnl9LHtuYW1lOiJ6LWluZGV4LWNvbXBhcmUiLHR5cGU6Uy56SW5kZXhDb21wYXJlLHRyaWdnZXJzWk9yZGVyOnEuYW55fSx7bmFtZToiei1pbmRleCIsdHlwZTpTLm5vbk5lZ2F0aXZlSW50LHRyaWdnZXJzWk9yZGVyOnEuYW55fV0sa3Q9W3tuYW1lOiJvdmVybGF5LXBhZGRpbmciLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToib3ZlcmxheS1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToib3ZlcmxheS1vcGFjaXR5Iix0eXBlOlMuemVyb09uZU51bWJlcix0cmlnZ2Vyc0JvdW5kczpxLnplcm9Ob25aZXJvfSx7bmFtZToib3ZlcmxheS1zaGFwZSIsdHlwZTpTLm92ZXJsYXlTaGFwZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX1dLER0PVt7bmFtZToidW5kZXJsYXktcGFkZGluZyIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ1bmRlcmxheS1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToidW5kZXJsYXktb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6cS56ZXJvTm9uWmVyb30se25hbWU6InVuZGVybGF5LXNoYXBlIix0eXBlOlMub3ZlcmxheVNoYXBlLHRyaWdnZXJzQm91bmRzOnEuYW55fV0sUHQ9W3tuYW1lOiJ0cmFuc2l0aW9uLXByb3BlcnR5Iix0eXBlOlMucHJvcExpc3R9LHtuYW1lOiJ0cmFuc2l0aW9uLWR1cmF0aW9uIix0eXBlOlMudGltZX0se25hbWU6InRyYW5zaXRpb24tZGVsYXkiLHR5cGU6Uy50aW1lfSx7bmFtZToidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iLHR5cGU6Uy5lYXNpbmd9XSwkdD1mdW5jdGlvbihncixmcil7cmV0dXJuIGZyLnZhbHVlPT09ImxhYmVsIj8tZ3IucG9vbEluZGV4KCk6ZnIucGZWYWx1ZX0sWnQ9W3tuYW1lOiJoZWlnaHQiLHR5cGU6Uy5ub2RlU2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueSxoYXNoT3ZlcnJpZGU6JHR9LHtuYW1lOiJ3aWR0aCIsdHlwZTpTLm5vZGVTaXplLHRyaWdnZXJzQm91bmRzOnEuYW55LGhhc2hPdmVycmlkZTokdH0se25hbWU6InNoYXBlIix0eXBlOlMubm9kZVNoYXBlLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToic2hhcGUtcG9seWdvbi1wb2ludHMiLHR5cGU6Uy5wb2x5Z29uUG9pbnRMaXN0LHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToiYmFja2dyb3VuZC1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToiYmFja2dyb3VuZC1maWxsIix0eXBlOlMuZmlsbH0se25hbWU6ImJhY2tncm91bmQtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJiYWNrZ3JvdW5kLWJsYWNrZW4iLHR5cGU6Uy5uT25lT25lTnVtYmVyfSx7bmFtZToiYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLWNvbG9ycyIsdHlwZTpTLmNvbG9yc30se25hbWU6ImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiLHR5cGU6Uy5wZXJjZW50YWdlc30se25hbWU6ImJhY2tncm91bmQtZ3JhZGllbnQtZGlyZWN0aW9uIix0eXBlOlMuZ3JhZGllbnREaXJlY3Rpb259LHtuYW1lOiJwYWRkaW5nIix0eXBlOlMuc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InBhZGRpbmctcmVsYXRpdmUtdG8iLHR5cGU6Uy5wYWRkaW5nUmVsYXRpdmVUbyx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImJvdW5kcy1leHBhbnNpb24iLHR5cGU6Uy5ib3VuZHNFeHBhbnNpb24sdHJpZ2dlcnNCb3VuZHM6cS5hbnl9XSxZdD1be25hbWU6ImJvcmRlci1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToiYm9yZGVyLW9wYWNpdHkiLHR5cGU6Uy56ZXJvT25lTnVtYmVyfSx7bmFtZToiYm9yZGVyLXdpZHRoIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImJvcmRlci1zdHlsZSIsdHlwZTpTLmJvcmRlclN0eWxlfV0scXQ9W3tuYW1lOiJiYWNrZ3JvdW5kLWltYWdlIix0eXBlOlMudXJsc30se25hbWU6ImJhY2tncm91bmQtaW1hZ2UtY3Jvc3NvcmlnaW4iLHR5cGU6Uy5iZ0Nyb3NzT3JpZ2lufSx7bmFtZToiYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5Iix0eXBlOlMuemVyb09uZU51bWJlcnN9LHtuYW1lOiJiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50Iix0eXBlOlMuYmdDb250YWlubWVudH0se25hbWU6ImJhY2tncm91bmQtaW1hZ2Utc21vb3RoaW5nIix0eXBlOlMuYm9vbHN9LHtuYW1lOiJiYWNrZ3JvdW5kLXBvc2l0aW9uLXgiLHR5cGU6Uy5iZ1Bvc30se25hbWU6ImJhY2tncm91bmQtcG9zaXRpb24teSIsdHlwZTpTLmJnUG9zfSx7bmFtZToiYmFja2dyb3VuZC13aWR0aC1yZWxhdGl2ZS10byIsdHlwZTpTLmJnUmVsYXRpdmVUb30se25hbWU6ImJhY2tncm91bmQtaGVpZ2h0LXJlbGF0aXZlLXRvIix0eXBlOlMuYmdSZWxhdGl2ZVRvfSx7bmFtZToiYmFja2dyb3VuZC1yZXBlYXQiLHR5cGU6Uy5iZ1JlcGVhdH0se25hbWU6ImJhY2tncm91bmQtZml0Iix0eXBlOlMuYmdGaXR9LHtuYW1lOiJiYWNrZ3JvdW5kLWNsaXAiLHR5cGU6Uy5iZ0NsaXB9LHtuYW1lOiJiYWNrZ3JvdW5kLXdpZHRoIix0eXBlOlMuYmdXSH0se25hbWU6ImJhY2tncm91bmQtaGVpZ2h0Iix0eXBlOlMuYmdXSH0se25hbWU6ImJhY2tncm91bmQtb2Zmc2V0LXgiLHR5cGU6Uy5iZ1Bvc30se25hbWU6ImJhY2tncm91bmQtb2Zmc2V0LXkiLHR5cGU6Uy5iZ1Bvc31dLG5lPVt7bmFtZToicG9zaXRpb24iLHR5cGU6Uy5wb3NpdGlvbix0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImNvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzIix0eXBlOlMuY29tcG91bmRJbmNsdWRlTGFiZWxzLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToibWluLXdpZHRoIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6Im1pbi13aWR0aC1iaWFzLWxlZnQiLHR5cGU6Uy5zaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToibWluLXdpZHRoLWJpYXMtcmlnaHQiLHR5cGU6Uy5zaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToibWluLWhlaWdodCIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJtaW4taGVpZ2h0LWJpYXMtdG9wIix0eXBlOlMuc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6Im1pbi1oZWlnaHQtYmlhcy1ib3R0b20iLHR5cGU6Uy5zaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOnEuYW55fV0sR3Q9W3tuYW1lOiJsaW5lLXN0eWxlIix0eXBlOlMubGluZVN0eWxlfSx7bmFtZToibGluZS1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToibGluZS1maWxsIix0eXBlOlMuZmlsbH0se25hbWU6ImxpbmUtY2FwIix0eXBlOlMubGluZUNhcH0se25hbWU6ImxpbmUtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJsaW5lLWRhc2gtcGF0dGVybiIsdHlwZTpTLm51bWJlcnN9LHtuYW1lOiJsaW5lLWRhc2gtb2Zmc2V0Iix0eXBlOlMubnVtYmVyfSx7bmFtZToibGluZS1ncmFkaWVudC1zdG9wLWNvbG9ycyIsdHlwZTpTLmNvbG9yc30se25hbWU6ImxpbmUtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiLHR5cGU6Uy5wZXJjZW50YWdlc30se25hbWU6ImN1cnZlLXN0eWxlIix0eXBlOlMuY3VydmVTdHlsZSx0cmlnZ2Vyc0JvdW5kczpxLmFueSx0cmlnZ2Vyc0JvdW5kc09mUGFyYWxsZWxCZXppZXJzOiEwfSx7bmFtZToiaGF5c3RhY2stcmFkaXVzIix0eXBlOlMuemVyb09uZU51bWJlcix0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InNvdXJjZS1lbmRwb2ludCIsdHlwZTpTLmVkZ2VFbmRwb2ludCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InRhcmdldC1lbmRwb2ludCIsdHlwZTpTLmVkZ2VFbmRwb2ludCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemVzLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToiY29udHJvbC1wb2ludC13ZWlnaHRzIix0eXBlOlMubnVtYmVycyx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InNlZ21lbnQtZGlzdGFuY2VzIix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemVzLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToic2VnbWVudC13ZWlnaHRzIix0eXBlOlMubnVtYmVycyx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InRheGktdHVybiIsdHlwZTpTLmJpZGlyZWN0aW9uYWxTaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGF4aS10dXJuLW1pbi1kaXN0YW5jZSIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0YXhpLWRpcmVjdGlvbiIsdHlwZTpTLmF4aXNEaXJlY3Rpb24sdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJlZGdlLWRpc3RhbmNlcyIsdHlwZTpTLmVkZ2VEaXN0YW5jZXMsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJhcnJvdy1zY2FsZSIsdHlwZTpTLnBvc2l0aXZlTnVtYmVyLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToibG9vcC1kaXJlY3Rpb24iLHR5cGU6Uy5hbmdsZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6Imxvb3Atc3dlZXAiLHR5cGU6Uy5hbmdsZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InNvdXJjZS1kaXN0YW5jZS1mcm9tLW5vZGUiLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGFyZ2V0LWRpc3RhbmNlLWZyb20tbm9kZSIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9XSxnZT1be25hbWU6Imdob3N0Iix0eXBlOlMuYm9vbCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6Imdob3N0LW9mZnNldC14Iix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJnaG9zdC1vZmZzZXQteSIsdHlwZTpTLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToiZ2hvc3Qtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9XSxiZT1be25hbWU6InNlbGVjdGlvbi1ib3gtY29sb3IiLHR5cGU6Uy5jb2xvcn0se25hbWU6InNlbGVjdGlvbi1ib3gtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToic2VsZWN0aW9uLWJveC1ib3JkZXItd2lkdGgiLHR5cGU6Uy5zaXplfSx7bmFtZToiYWN0aXZlLWJnLWNvbG9yIix0eXBlOlMuY29sb3J9LHtuYW1lOiJhY3RpdmUtYmctb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJhY3RpdmUtYmctc2l6ZSIsdHlwZTpTLnNpemV9LHtuYW1lOiJvdXRzaWRlLXRleHR1cmUtYmctY29sb3IiLHR5cGU6Uy5jb2xvcn0se25hbWU6Im91dHNpZGUtdGV4dHVyZS1iZy1vcGFjaXR5Iix0eXBlOlMuemVyb09uZU51bWJlcn1dLGllPVtdO3pmLnBpZUJhY2tncm91bmROPTE2LGllLnB1c2goe25hbWU6InBpZS1zaXplIix0eXBlOlMuc2l6ZU1heWJlUGVyY2VudH0pO2Zvcih2YXIgRmU9MTtGZTw9emYucGllQmFja2dyb3VuZE47RmUrKylpZS5wdXNoKHtuYW1lOiJwaWUtIitGZSsiLWJhY2tncm91bmQtY29sb3IiLHR5cGU6Uy5jb2xvcn0pLGllLnB1c2goe25hbWU6InBpZS0iK0ZlKyItYmFja2dyb3VuZC1zaXplIix0eXBlOlMucGVyY2VudH0pLGllLnB1c2goe25hbWU6InBpZS0iK0ZlKyItYmFja2dyb3VuZC1vcGFjaXR5Iix0eXBlOlMuemVyb09uZU51bWJlcn0pO3ZhciB3ZT1bXSxibj16Zi5hcnJvd1ByZWZpeGVzPVsic291cmNlIiwibWlkLXNvdXJjZSIsInRhcmdldCIsIm1pZC10YXJnZXQiXTtbe25hbWU6ImFycm93LXNoYXBlIix0eXBlOlMuYXJyb3dTaGFwZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImFycm93LWNvbG9yIix0eXBlOlMuY29sb3J9LHtuYW1lOiJhcnJvdy1maWxsIix0eXBlOlMuYXJyb3dGaWxsfV0uZm9yRWFjaChmdW5jdGlvbih2bil7Ym4uZm9yRWFjaChmdW5jdGlvbihncil7dmFyIGZyPWdyKyItIit2bi5uYW1lLEpyPXZuLnR5cGUsdmk9dm4udHJpZ2dlcnNCb3VuZHM7d2UucHVzaCh7bmFtZTpmcix0eXBlOkpyLHRyaWdnZXJzQm91bmRzOnZpfSl9KX0se30pO3ZhciB6ZT16Zi5wcm9wZXJ0aWVzPVtdLmNvbmNhdChkdCxQdCxMdCxrdCxEdCxnZSxodCxvdCxWLFkscnQsWnQsWXQscXQsaWUsbmUsR3Qsd2UsYmUpLEdlPXpmLnByb3BlcnR5R3JvdXBzPXtiZWhhdmlvcjpkdCx0cmFuc2l0aW9uOlB0LHZpc2liaWxpdHk6THQsb3ZlcmxheTprdCx1bmRlcmxheTpEdCxnaG9zdDpnZSxjb21tb25MYWJlbDpodCxsYWJlbERpbWVuc2lvbnM6b3QsbWFpbkxhYmVsOlYsc291cmNlTGFiZWw6WSx0YXJnZXRMYWJlbDpydCxub2RlQm9keTpadCxub2RlQm9yZGVyOll0LGJhY2tncm91bmRJbWFnZTpxdCxwaWU6aWUsY29tcG91bmQ6bmUsZWRnZUxpbmU6R3QsZWRnZUFycm93OndlLGNvcmU6YmV9LEVuPXpmLnByb3BlcnR5R3JvdXBOYW1lcz17fSxJbj16Zi5wcm9wZXJ0eUdyb3VwS2V5cz1PYmplY3Qua2V5cyhHZSk7SW4uZm9yRWFjaChmdW5jdGlvbih2bil7RW5bdm5dPUdlW3ZuXS5tYXAoZnVuY3Rpb24oZ3Ipe3JldHVybiBnci5uYW1lfSksR2Vbdm5dLmZvckVhY2goZnVuY3Rpb24oZ3Ipe3JldHVybiBnci5ncm91cEtleT12bn0pfSk7dmFyIFluPXpmLmFsaWFzZXM9W3tuYW1lOiJjb250ZW50Iixwb2ludHNUbzoibGFiZWwifSx7bmFtZToiY29udHJvbC1wb2ludC1kaXN0YW5jZSIscG9pbnRzVG86ImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIn0se25hbWU6ImNvbnRyb2wtcG9pbnQtd2VpZ2h0Iixwb2ludHNUbzoiY29udHJvbC1wb2ludC13ZWlnaHRzIn0se25hbWU6ImVkZ2UtdGV4dC1yb3RhdGlvbiIscG9pbnRzVG86InRleHQtcm90YXRpb24ifSx7bmFtZToicGFkZGluZy1sZWZ0Iixwb2ludHNUbzoicGFkZGluZyJ9LHtuYW1lOiJwYWRkaW5nLXJpZ2h0Iixwb2ludHNUbzoicGFkZGluZyJ9LHtuYW1lOiJwYWRkaW5nLXRvcCIscG9pbnRzVG86InBhZGRpbmcifSx7bmFtZToicGFkZGluZy1ib3R0b20iLHBvaW50c1RvOiJwYWRkaW5nIn1dO3pmLnByb3BlcnR5TmFtZXM9emUubWFwKGZ1bmN0aW9uKHZuKXtyZXR1cm4gdm4ubmFtZX0pO2Zvcih2YXIgU249MDtTbjx6ZS5sZW5ndGg7U24rKyl7dmFyIFduPXplW1NuXTt6ZVtXbi5uYW1lXT1Xbn1mb3IodmFyIHJyPTA7cnI8WW4ubGVuZ3RoO3JyKyspe3ZhciB3cj1Zbltycl0sdXI9emVbd3IucG9pbnRzVG9dLGVyPXtuYW1lOndyLm5hbWUsYWxpYXM6ITAscG9pbnRzVG86dXJ9O3plLnB1c2goZXIpLHplW3dyLm5hbWVdPWVyfX0pKCksemYuZ2V0RGVmYXVsdFByb3BlcnR5PWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmdldERlZmF1bHRQcm9wZXJ0aWVzKClbeV19LHpmLmdldERlZmF1bHRQcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5fcHJpdmF0ZTtpZih5LmRlZmF1bHRQcm9wZXJ0aWVzIT1udWxsKXJldHVybiB5LmRlZmF1bHRQcm9wZXJ0aWVzO2Zvcih2YXIgZz1kZSh7InNlbGVjdGlvbi1ib3gtY29sb3IiOiIjZGRkIiwic2VsZWN0aW9uLWJveC1vcGFjaXR5IjouNjUsInNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIjoiI2FhYSIsInNlbGVjdGlvbi1ib3gtYm9yZGVyLXdpZHRoIjoxLCJhY3RpdmUtYmctY29sb3IiOiJibGFjayIsImFjdGl2ZS1iZy1vcGFjaXR5IjouMTUsImFjdGl2ZS1iZy1zaXplIjozMCwib3V0c2lkZS10ZXh0dXJlLWJnLWNvbG9yIjoiIzAwMCIsIm91dHNpZGUtdGV4dHVyZS1iZy1vcGFjaXR5IjouMTI1LGV2ZW50czoieWVzIiwidGV4dC1ldmVudHMiOiJubyIsInRleHQtdmFsaWduIjoidG9wIiwidGV4dC1oYWxpZ24iOiJjZW50ZXIiLCJ0ZXh0LWp1c3RpZmljYXRpb24iOiJhdXRvIiwibGluZS1oZWlnaHQiOjEsY29sb3I6IiMwMDAiLCJ0ZXh0LW91dGxpbmUtY29sb3IiOiIjMDAwIiwidGV4dC1vdXRsaW5lLXdpZHRoIjowLCJ0ZXh0LW91dGxpbmUtb3BhY2l0eSI6MSwidGV4dC1vcGFjaXR5IjoxLCJ0ZXh0LWRlY29yYXRpb24iOiJub25lIiwidGV4dC10cmFuc2Zvcm0iOiJub25lIiwidGV4dC13cmFwIjoibm9uZSIsInRleHQtb3ZlcmZsb3ctd3JhcCI6IndoaXRlc3BhY2UiLCJ0ZXh0LW1heC13aWR0aCI6OTk5OSwidGV4dC1iYWNrZ3JvdW5kLWNvbG9yIjoiIzAwMCIsInRleHQtYmFja2dyb3VuZC1vcGFjaXR5IjowLCJ0ZXh0LWJhY2tncm91bmQtc2hhcGUiOiJyZWN0YW5nbGUiLCJ0ZXh0LWJhY2tncm91bmQtcGFkZGluZyI6MCwidGV4dC1ib3JkZXItb3BhY2l0eSI6MCwidGV4dC1ib3JkZXItd2lkdGgiOjAsInRleHQtYm9yZGVyLXN0eWxlIjoic29saWQiLCJ0ZXh0LWJvcmRlci1jb2xvciI6IiMwMDAiLCJmb250LWZhbWlseSI6IkhlbHZldGljYSBOZXVlLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiLCJmb250LXN0eWxlIjoibm9ybWFsIiwiZm9udC13ZWlnaHQiOiJub3JtYWwiLCJmb250LXNpemUiOjE2LCJtaW4tem9vbWVkLWZvbnQtc2l6ZSI6MCwidGV4dC1yb3RhdGlvbiI6Im5vbmUiLCJzb3VyY2UtdGV4dC1yb3RhdGlvbiI6Im5vbmUiLCJ0YXJnZXQtdGV4dC1yb3RhdGlvbiI6Im5vbmUiLHZpc2liaWxpdHk6InZpc2libGUiLGRpc3BsYXk6ImVsZW1lbnQiLG9wYWNpdHk6MSwiei1jb21wb3VuZC1kZXB0aCI6ImF1dG8iLCJ6LWluZGV4LWNvbXBhcmUiOiJhdXRvIiwiei1pbmRleCI6MCxsYWJlbDoiIiwidGV4dC1tYXJnaW4teCI6MCwidGV4dC1tYXJnaW4teSI6MCwic291cmNlLWxhYmVsIjoiIiwic291cmNlLXRleHQtb2Zmc2V0IjowLCJzb3VyY2UtdGV4dC1tYXJnaW4teCI6MCwic291cmNlLXRleHQtbWFyZ2luLXkiOjAsInRhcmdldC1sYWJlbCI6IiIsInRhcmdldC10ZXh0LW9mZnNldCI6MCwidGFyZ2V0LXRleHQtbWFyZ2luLXgiOjAsInRhcmdldC10ZXh0LW1hcmdpbi15IjowLCJvdmVybGF5LW9wYWNpdHkiOjAsIm92ZXJsYXktY29sb3IiOiIjMDAwIiwib3ZlcmxheS1wYWRkaW5nIjoxMCwib3ZlcmxheS1zaGFwZSI6InJvdW5kLXJlY3RhbmdsZSIsInVuZGVybGF5LW9wYWNpdHkiOjAsInVuZGVybGF5LWNvbG9yIjoiIzAwMCIsInVuZGVybGF5LXBhZGRpbmciOjEwLCJ1bmRlcmxheS1zaGFwZSI6InJvdW5kLXJlY3RhbmdsZSIsInRyYW5zaXRpb24tcHJvcGVydHkiOiJub25lIiwidHJhbnNpdGlvbi1kdXJhdGlvbiI6MCwidHJhbnNpdGlvbi1kZWxheSI6MCwidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iOiJsaW5lYXIiLCJiYWNrZ3JvdW5kLWJsYWNrZW4iOjAsImJhY2tncm91bmQtY29sb3IiOiIjOTk5IiwiYmFja2dyb3VuZC1maWxsIjoic29saWQiLCJiYWNrZ3JvdW5kLW9wYWNpdHkiOjEsImJhY2tncm91bmQtaW1hZ2UiOiJub25lIiwiYmFja2dyb3VuZC1pbWFnZS1jcm9zc29yaWdpbiI6ImFub255bW91cyIsImJhY2tncm91bmQtaW1hZ2Utb3BhY2l0eSI6MSwiYmFja2dyb3VuZC1pbWFnZS1jb250YWlubWVudCI6Imluc2lkZSIsImJhY2tncm91bmQtaW1hZ2Utc21vb3RoaW5nIjoieWVzIiwiYmFja2dyb3VuZC1wb3NpdGlvbi14IjoiNTAlIiwiYmFja2dyb3VuZC1wb3NpdGlvbi15IjoiNTAlIiwiYmFja2dyb3VuZC1vZmZzZXQteCI6MCwiYmFja2dyb3VuZC1vZmZzZXQteSI6MCwiYmFja2dyb3VuZC13aWR0aC1yZWxhdGl2ZS10byI6ImluY2x1ZGUtcGFkZGluZyIsImJhY2tncm91bmQtaGVpZ2h0LXJlbGF0aXZlLXRvIjoiaW5jbHVkZS1wYWRkaW5nIiwiYmFja2dyb3VuZC1yZXBlYXQiOiJuby1yZXBlYXQiLCJiYWNrZ3JvdW5kLWZpdCI6Im5vbmUiLCJiYWNrZ3JvdW5kLWNsaXAiOiJub2RlIiwiYmFja2dyb3VuZC13aWR0aCI6ImF1dG8iLCJiYWNrZ3JvdW5kLWhlaWdodCI6ImF1dG8iLCJib3JkZXItY29sb3IiOiIjMDAwIiwiYm9yZGVyLW9wYWNpdHkiOjEsImJvcmRlci13aWR0aCI6MCwiYm9yZGVyLXN0eWxlIjoic29saWQiLGhlaWdodDozMCx3aWR0aDozMCxzaGFwZToiZWxsaXBzZSIsInNoYXBlLXBvbHlnb24tcG9pbnRzIjoiLTEsIC0xLCAgIDEsIC0xLCAgIDEsIDEsICAgLTEsIDEiLCJib3VuZHMtZXhwYW5zaW9uIjowLCJiYWNrZ3JvdW5kLWdyYWRpZW50LWRpcmVjdGlvbiI6InRvLWJvdHRvbSIsImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1jb2xvcnMiOiIjOTk5IiwiYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyI6IjAlIixnaG9zdDoibm8iLCJnaG9zdC1vZmZzZXQteSI6MCwiZ2hvc3Qtb2Zmc2V0LXgiOjAsImdob3N0LW9wYWNpdHkiOjAscGFkZGluZzowLCJwYWRkaW5nLXJlbGF0aXZlLXRvIjoid2lkdGgiLHBvc2l0aW9uOiJvcmlnaW4iLCJjb21wb3VuZC1zaXppbmctd3J0LWxhYmVscyI6ImluY2x1ZGUiLCJtaW4td2lkdGgiOjAsIm1pbi13aWR0aC1iaWFzLWxlZnQiOjAsIm1pbi13aWR0aC1iaWFzLXJpZ2h0IjowLCJtaW4taGVpZ2h0IjowLCJtaW4taGVpZ2h0LWJpYXMtdG9wIjowLCJtaW4taGVpZ2h0LWJpYXMtYm90dG9tIjowfSx7InBpZS1zaXplIjoiMTAwJSJ9LFt7bmFtZToicGllLXt7aX19LWJhY2tncm91bmQtY29sb3IiLHZhbHVlOiJibGFjayJ9LHtuYW1lOiJwaWUte3tpfX0tYmFja2dyb3VuZC1zaXplIix2YWx1ZToiMCUifSx7bmFtZToicGllLXt7aX19LWJhY2tncm91bmQtb3BhY2l0eSIsdmFsdWU6MX1dLnJlZHVjZShmdW5jdGlvbihxLFMpe2Zvcih2YXIgVj0xO1Y8PXpmLnBpZUJhY2tncm91bmROO1YrKyl7dmFyIFk9Uy5uYW1lLnJlcGxhY2UoInt7aX19IixWKSxydD1TLnZhbHVlO3FbWV09cnR9cmV0dXJuIHF9LHt9KSx7ImxpbmUtc3R5bGUiOiJzb2xpZCIsImxpbmUtY29sb3IiOiIjOTk5IiwibGluZS1maWxsIjoic29saWQiLCJsaW5lLWNhcCI6ImJ1dHQiLCJsaW5lLW9wYWNpdHkiOjEsImxpbmUtZ3JhZGllbnQtc3RvcC1jb2xvcnMiOiIjOTk5IiwibGluZS1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyI6IjAlIiwiY29udHJvbC1wb2ludC1zdGVwLXNpemUiOjQwLCJjb250cm9sLXBvaW50LXdlaWdodHMiOi41LCJzZWdtZW50LXdlaWdodHMiOi41LCJzZWdtZW50LWRpc3RhbmNlcyI6MjAsInRheGktdHVybiI6IjUwJSIsInRheGktdHVybi1taW4tZGlzdGFuY2UiOjEwLCJ0YXhpLWRpcmVjdGlvbiI6ImF1dG8iLCJlZGdlLWRpc3RhbmNlcyI6ImludGVyc2VjdGlvbiIsImN1cnZlLXN0eWxlIjoiaGF5c3RhY2siLCJoYXlzdGFjay1yYWRpdXMiOjAsImFycm93LXNjYWxlIjoxLCJsb29wLWRpcmVjdGlvbiI6Ii00NWRlZyIsImxvb3Atc3dlZXAiOiItOTBkZWciLCJzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlIjowLCJ0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlIjowLCJzb3VyY2UtZW5kcG9pbnQiOiJvdXRzaWRlLXRvLW5vZGUiLCJ0YXJnZXQtZW5kcG9pbnQiOiJvdXRzaWRlLXRvLW5vZGUiLCJsaW5lLWRhc2gtcGF0dGVybiI6WzYsM10sImxpbmUtZGFzaC1vZmZzZXQiOjB9LFt7bmFtZToiYXJyb3ctc2hhcGUiLHZhbHVlOiJub25lIn0se25hbWU6ImFycm93LWNvbG9yIix2YWx1ZToiIzk5OSJ9LHtuYW1lOiJhcnJvdy1maWxsIix2YWx1ZToiZmlsbGVkIn1dLnJlZHVjZShmdW5jdGlvbihxLFMpe3JldHVybiB6Zi5hcnJvd1ByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24oVil7dmFyIFk9VisiLSIrUy5uYW1lLHJ0PVMudmFsdWU7cVtZXT1ydH0pLHF9LHt9KSkseD17fSxUPTA7VDx0aGlzLnByb3BlcnRpZXMubGVuZ3RoO1QrKyl7dmFyIEw9dGhpcy5wcm9wZXJ0aWVzW1RdO2lmKCFMLnBvaW50c1RvKXt2YXIgTz1MLm5hbWUsUD1nW09dLCQ9dGhpcy5wYXJzZShPLFApO3hbT109JH19cmV0dXJuIHkuZGVmYXVsdFByb3BlcnRpZXM9eCx5LmRlZmF1bHRQcm9wZXJ0aWVzfSx6Zi5hZGREZWZhdWx0U3R5bGVzaGVldD1mdW5jdGlvbigpe3RoaXMuc2VsZWN0b3IoIjpwYXJlbnQiKS5jc3Moe3NoYXBlOiJyZWN0YW5nbGUiLHBhZGRpbmc6MTAsImJhY2tncm91bmQtY29sb3IiOiIjZWVlIiwiYm9yZGVyLWNvbG9yIjoiI2NjYyIsImJvcmRlci13aWR0aCI6MX0pLnNlbGVjdG9yKCJlZGdlIikuY3NzKHt3aWR0aDozfSkuc2VsZWN0b3IoIjpsb29wIikuY3NzKHsiY3VydmUtc3R5bGUiOiJiZXppZXIifSkuc2VsZWN0b3IoImVkZ2U6Y29tcG91bmQiKS5jc3MoeyJjdXJ2ZS1zdHlsZSI6ImJlemllciIsInNvdXJjZS1lbmRwb2ludCI6Im91dHNpZGUtdG8tbGluZSIsInRhcmdldC1lbmRwb2ludCI6Im91dHNpZGUtdG8tbGluZSJ9KS5zZWxlY3RvcigiOnNlbGVjdGVkIikuY3NzKHsiYmFja2dyb3VuZC1jb2xvciI6IiMwMTY5RDkiLCJsaW5lLWNvbG9yIjoiIzAxNjlEOSIsInNvdXJjZS1hcnJvdy1jb2xvciI6IiMwMTY5RDkiLCJ0YXJnZXQtYXJyb3ctY29sb3IiOiIjMDE2OUQ5IiwibWlkLXNvdXJjZS1hcnJvdy1jb2xvciI6IiMwMTY5RDkiLCJtaWQtdGFyZ2V0LWFycm93LWNvbG9yIjoiIzAxNjlEOSJ9KS5zZWxlY3RvcigiOnBhcmVudDpzZWxlY3RlZCIpLmNzcyh7ImJhY2tncm91bmQtY29sb3IiOiIjQ0NFMUY5IiwiYm9yZGVyLWNvbG9yIjoiI2FlYzhlNSJ9KS5zZWxlY3RvcigiOmFjdGl2ZSIpLmNzcyh7Im92ZXJsYXktY29sb3IiOiJibGFjayIsIm92ZXJsYXktcGFkZGluZyI6MTAsIm92ZXJsYXktb3BhY2l0eSI6LjI1fSksdGhpcy5kZWZhdWx0TGVuZ3RoPXRoaXMubGVuZ3RofTt2YXIgZEM9e307ZEMucGFyc2U9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9dGhpcztpZih5dChnKSlyZXR1cm4gTC5wYXJzZUltcGxXYXJuKHksZyx4LFQpO3ZhciBPPVQ9PT0ibWFwcGluZyJ8fFQ9PT0hMHx8VD09PSExfHxUPT1udWxsPyJkb250Y2FyZSI6VCxQPXg/InQiOiJmIiwkPSIiK2cscT1pZCh5LCQsUCxPKSxTPUwucHJvcENhY2hlPUwucHJvcENhY2hlfHxbXSxWO3JldHVybihWPVNbcV0pfHwoVj1TW3FdPUwucGFyc2VJbXBsV2Fybih5LGcseCxUKSksKHh8fFQ9PT0ibWFwcGluZyIpJiYoVj1WYihWKSxWJiYoVi52YWx1ZT1WYihWLnZhbHVlKSkpLFZ9LGRDLnBhcnNlSW1wbFdhcm49ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9dGhpcy5wYXJzZUltcGwoeSxnLHgsVCk7cmV0dXJuIUwmJmchPW51bGwmJlNjKCJUaGUgc3R5bGUgcHJvcGVydHkgYCIuY29uY2F0KHksIjogIikuY29uY2F0KGcsImAgaXMgaW52YWxpZCIpKSxMJiYoTC5uYW1lPT09IndpZHRoInx8TC5uYW1lPT09ImhlaWdodCIpJiZnPT09ImxhYmVsIiYmU2MoIlRoZSBzdHlsZSB2YWx1ZSBvZiBgbGFiZWxgIGlzIGRlcHJlY2F0ZWQgZm9yIGAiK0wubmFtZSsiYCIpLEx9LGRDLnBhcnNlSW1wbD1mdW5jdGlvbih5LGcseCxUKXt2YXIgTD10aGlzO3k9Z24oeSk7dmFyIE89TC5wcm9wZXJ0aWVzW3ldLFA9ZywkPUwudHlwZXM7aWYoIU98fGc9PT12b2lkIDApcmV0dXJuIG51bGw7Ty5hbGlhcyYmKE89Ty5wb2ludHNUbyx5PU8ubmFtZSk7dmFyIHE9bXQoZyk7cSYmKGc9Zy50cmltKCkpO3ZhciBTPU8udHlwZTtpZighUylyZXR1cm4gbnVsbDtpZih4JiYoZz09PSIifHxnPT09bnVsbCkpcmV0dXJue25hbWU6eSx2YWx1ZTpnLGJ5cGFzczohMCxkZWxldGVCeXBhc3M6ITB9O2lmKHl0KGcpKXJldHVybntuYW1lOnksdmFsdWU6ZyxzdHJWYWx1ZToiZm4iLG1hcHBlZDokLmZuLGJ5cGFzczp4fTt2YXIgVixZO2lmKCEoIXF8fFR8fGcubGVuZ3RoPDd8fGdbMV0hPT0iYSIpKXtpZihnLmxlbmd0aD49NyYmZ1swXT09PSJkIiYmKFY9bmV3IFJlZ0V4cCgkLmRhdGEucmVnZXgpLmV4ZWMoZykpKXtpZih4KXJldHVybiExO3ZhciBydD0kLmRhdGE7cmV0dXJue25hbWU6eSx2YWx1ZTpWLHN0clZhbHVlOiIiK2csbWFwcGVkOnJ0LGZpZWxkOlZbMV0sYnlwYXNzOnh9fWVsc2UgaWYoZy5sZW5ndGg+PTEwJiZnWzBdPT09Im0iJiYoWT1uZXcgUmVnRXhwKCQubWFwRGF0YS5yZWdleCkuZXhlYyhnKSkpe2lmKHh8fFMubXVsdGlwbGUpcmV0dXJuITE7dmFyIG90PSQubWFwRGF0YTtpZighKFMuY29sb3J8fFMubnVtYmVyKSlyZXR1cm4hMTt2YXIgaHQ9dGhpcy5wYXJzZSh5LFlbNF0pO2lmKCFodHx8aHQubWFwcGVkKXJldHVybiExO3ZhciBkdD10aGlzLnBhcnNlKHksWVs1XSk7aWYoIWR0fHxkdC5tYXBwZWQpcmV0dXJuITE7aWYoaHQucGZWYWx1ZT09PWR0LnBmVmFsdWV8fGh0LnN0clZhbHVlPT09ZHQuc3RyVmFsdWUpcmV0dXJuIFNjKCJgIit5KyI6ICIrZysiYCBpcyBub3QgYSB2YWxpZCBtYXBwZXIgYmVjYXVzZSB0aGUgb3V0cHV0IHJhbmdlIGlzIHplcm87IGNvbnZlcnRpbmcgdG8gYCIreSsiOiAiK2h0LnN0clZhbHVlKyJgIiksdGhpcy5wYXJzZSh5LGh0LnN0clZhbHVlKTtpZihTLmNvbG9yKXt2YXIgTHQ9aHQudmFsdWUsa3Q9ZHQudmFsdWUsRHQ9THRbMF09PT1rdFswXSYmTHRbMV09PT1rdFsxXSYmTHRbMl09PT1rdFsyXSYmKEx0WzNdPT09a3RbM118fChMdFszXT09bnVsbHx8THRbM109PT0xKSYmKGt0WzNdPT1udWxsfHxrdFszXT09PTEpKTtpZihEdClyZXR1cm4hMX1yZXR1cm57bmFtZTp5LHZhbHVlOlksc3RyVmFsdWU6IiIrZyxtYXBwZWQ6b3QsZmllbGQ6WVsxXSxmaWVsZE1pbjpwYXJzZUZsb2F0KFlbMl0pLGZpZWxkTWF4OnBhcnNlRmxvYXQoWVszXSksdmFsdWVNaW46aHQudmFsdWUsdmFsdWVNYXg6ZHQudmFsdWUsYnlwYXNzOnh9fX1pZihTLm11bHRpcGxlJiZUIT09Im11bHRpcGxlIil7dmFyIFB0O2lmKHE/UHQ9Zy5zcGxpdCgvXHMrLyk6ZnQoZyk/UHQ9ZzpQdD1bZ10sUy5ldmVuTXVsdGlwbGUmJlB0Lmxlbmd0aCUyIT09MClyZXR1cm4gbnVsbDtmb3IodmFyICR0PVtdLFp0PVtdLFl0PVtdLHF0PSIiLG5lPSExLEd0PTA7R3Q8UHQubGVuZ3RoO0d0Kyspe3ZhciBnZT1MLnBhcnNlKHksUHRbR3RdLHgsIm11bHRpcGxlIik7bmU9bmV8fG10KGdlLnZhbHVlKSwkdC5wdXNoKGdlLnZhbHVlKSxZdC5wdXNoKGdlLnBmVmFsdWUhPW51bGw/Z2UucGZWYWx1ZTpnZS52YWx1ZSksWnQucHVzaChnZS51bml0cykscXQrPShHdD4wPyIgIjoiIikrZ2Uuc3RyVmFsdWV9cmV0dXJuIFMudmFsaWRhdGUmJiFTLnZhbGlkYXRlKCR0LFp0KT9udWxsOlMuc2luZ2xlRW51bSYmbmU/JHQubGVuZ3RoPT09MSYmbXQoJHRbMF0pP3tuYW1lOnksdmFsdWU6JHRbMF0sc3RyVmFsdWU6JHRbMF0sYnlwYXNzOnh9Om51bGw6e25hbWU6eSx2YWx1ZTokdCxwZlZhbHVlOll0LHN0clZhbHVlOnF0LGJ5cGFzczp4LHVuaXRzOlp0fX12YXIgYmU9ZnVuY3Rpb24oKXtmb3IodmFyIGZyPTA7ZnI8Uy5lbnVtcy5sZW5ndGg7ZnIrKyl7dmFyIEpyPVMuZW51bXNbZnJdO2lmKEpyPT09ZylyZXR1cm57bmFtZTp5LHZhbHVlOmcsc3RyVmFsdWU6IiIrZyxieXBhc3M6eH19cmV0dXJuIG51bGx9O2lmKFMubnVtYmVyKXt2YXIgaWUsRmU9InB4IjtpZihTLnVuaXRzJiYoaWU9Uy51bml0cyksUy5pbXBsaWNpdFVuaXRzJiYoRmU9Uy5pbXBsaWNpdFVuaXRzKSwhUy51bml0bGVzcylpZihxKXt2YXIgd2U9InB4fGVtIisoUy5hbGxvd1BlcmNlbnQ/InxcXCUiOiIiKTtpZSYmKHdlPWllKTt2YXIgYm49Zy5tYXRjaCgiXigiK1llKyIpKCIrd2UrIik/JCIpO2JuJiYoZz1iblsxXSxpZT1iblsyXXx8RmUpfWVsc2UoIWllfHxTLmltcGxpY2l0VW5pdHMpJiYoaWU9RmUpO2lmKGc9cGFyc2VGbG9hdChnKSxpc05hTihnKSYmUy5lbnVtcz09PXZvaWQgMClyZXR1cm4gbnVsbDtpZihpc05hTihnKSYmUy5lbnVtcyE9PXZvaWQgMClyZXR1cm4gZz1QLGJlKCk7aWYoUy5pbnRlZ2VyJiYhcHQoZyl8fFMubWluIT09dm9pZCAwJiYoZzxTLm1pbnx8Uy5zdHJpY3RNaW4mJmc9PT1TLm1pbil8fFMubWF4IT09dm9pZCAwJiYoZz5TLm1heHx8Uy5zdHJpY3RNYXgmJmc9PT1TLm1heCkpcmV0dXJuIG51bGw7dmFyIHplPXtuYW1lOnksdmFsdWU6ZyxzdHJWYWx1ZToiIitnKyhpZXx8IiIpLHVuaXRzOmllLGJ5cGFzczp4fTtyZXR1cm4gUy51bml0bGVzc3x8aWUhPT0icHgiJiZpZSE9PSJlbSI/emUucGZWYWx1ZT1nOnplLnBmVmFsdWU9aWU9PT0icHgifHwhaWU/Zzp0aGlzLmdldEVtU2l6ZUluUGl4ZWxzKCkqZywoaWU9PT0ibXMifHxpZT09PSJzIikmJih6ZS5wZlZhbHVlPWllPT09Im1zIj9nOjFlMypnKSwoaWU9PT0iZGVnInx8aWU9PT0icmFkIikmJih6ZS5wZlZhbHVlPWllPT09InJhZCI/ZzpJSyhnKSksaWU9PT0iJSImJih6ZS5wZlZhbHVlPWcvMTAwKSx6ZX1lbHNlIGlmKFMucHJvcExpc3Qpe3ZhciBHZT1bXSxFbj0iIitnO2lmKEVuIT09Im5vbmUiKXtmb3IodmFyIEluPUVuLnNwbGl0KC9ccyosXHMqfFxzKy8pLFluPTA7WW48SW4ubGVuZ3RoO1luKyspe3ZhciBTbj1JbltZbl0udHJpbSgpO0wucHJvcGVydGllc1tTbl0/R2UucHVzaChTbik6U2MoImAiK1NuKyJgIGlzIG5vdCBhIHZhbGlkIHByb3BlcnR5IG5hbWUiKX1pZihHZS5sZW5ndGg9PT0wKXJldHVybiBudWxsfXJldHVybntuYW1lOnksdmFsdWU6R2Usc3RyVmFsdWU6R2UubGVuZ3RoPT09MD8ibm9uZSI6R2Uuam9pbigiICIpLGJ5cGFzczp4fX1lbHNlIGlmKFMuY29sb3Ipe3ZhciBXbj1mbyhnKTtyZXR1cm4gV24/e25hbWU6eSx2YWx1ZTpXbixwZlZhbHVlOlduLHN0clZhbHVlOiJyZ2IoIitXblswXSsiLCIrV25bMV0rIiwiK1duWzJdKyIpIixieXBhc3M6eH06bnVsbH1lbHNlIGlmKFMucmVnZXh8fFMucmVnZXhlcyl7aWYoUy5lbnVtcyl7dmFyIHJyPWJlKCk7aWYocnIpcmV0dXJuIHJyfWZvcih2YXIgd3I9Uy5yZWdleGVzP1MucmVnZXhlczpbUy5yZWdleF0sdXI9MDt1cjx3ci5sZW5ndGg7dXIrKyl7dmFyIGVyPW5ldyBSZWdFeHAod3JbdXJdKSx2bj1lci5leGVjKGcpO2lmKHZuKXJldHVybntuYW1lOnksdmFsdWU6Uy5zaW5nbGVSZWdleE1hdGNoVmFsdWU/dm5bMV06dm4sc3RyVmFsdWU6IiIrZyxieXBhc3M6eH19cmV0dXJuIG51bGx9ZWxzZSByZXR1cm4gUy5zdHJpbmc/e25hbWU6eSx2YWx1ZToiIitnLHN0clZhbHVlOiIiK2csYnlwYXNzOnh9OlMuZW51bXM/YmUoKTpudWxsfTt2YXIgcDE9ZnVuY3Rpb24geShnKXtpZighKHRoaXMgaW5zdGFuY2VvZiB5KSlyZXR1cm4gbmV3IHkoZyk7aWYoIU90KGcpKXt2bCgiQSBzdHlsZSBtdXN0IGhhdmUgYSBjb3JlIHJlZmVyZW5jZSIpO3JldHVybn10aGlzLl9wcml2YXRlPXtjeTpnLGNvcmVTdHlsZTp7fX0sdGhpcy5sZW5ndGg9MCx0aGlzLnJlc2V0VG9EZWZhdWx0KCl9LGIxPXAxLnByb3RvdHlwZTtiMS5pbnN0YW5jZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiJzdHlsZSJ9LGIxLmNsZWFyPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PXRoaXMuX3ByaXZhdGUsZz15LmN5LHg9Zy5lbGVtZW50cygpLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl0aGlzW1RdPXZvaWQgMDtyZXR1cm4gdGhpcy5sZW5ndGg9MCx5LmNvbnRleHRTdHlsZXM9e30seS5wcm9wRGlmZnM9e30sdGhpcy5jbGVhbkVsZW1lbnRzKHgsITApLHguZm9yRWFjaChmdW5jdGlvbihMKXt2YXIgTz1MWzBdLl9wcml2YXRlO08uc3R5bGVEaXJ0eT0hMCxPLmFwcGxpZWRJbml0U3R5bGU9ITF9KSx0aGlzfSxiMS5yZXNldFRvRGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsZWFyKCksdGhpcy5hZGREZWZhdWx0U3R5bGVzaGVldCgpLHRoaXN9LGIxLmNvcmU9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY29yZVN0eWxlW3ldfHx0aGlzLmdldERlZmF1bHRQcm9wZXJ0eSh5KX0sYjEuc2VsZWN0b3I9ZnVuY3Rpb24oeSl7dmFyIGc9eT09PSJjb3JlIj9udWxsOm5ldyBFbSh5KSx4PXRoaXMubGVuZ3RoKys7cmV0dXJuIHRoaXNbeF09e3NlbGVjdG9yOmcscHJvcGVydGllczpbXSxtYXBwZWRQcm9wZXJ0aWVzOltdLGluZGV4Onh9LHRoaXN9LGIxLmNzcz1mdW5jdGlvbigpe3ZhciB5PXRoaXMsZz1hcmd1bWVudHM7aWYoZy5sZW5ndGg9PT0xKWZvcih2YXIgeD1nWzBdLFQ9MDtUPHkucHJvcGVydGllcy5sZW5ndGg7VCsrKXt2YXIgTD15LnByb3BlcnRpZXNbVF0sTz14W0wubmFtZV07Tz09PXZvaWQgMCYmKE89eFtTZShMLm5hbWUpXSksTyE9PXZvaWQgMCYmdGhpcy5jc3NSdWxlKEwubmFtZSxPKX1lbHNlIGcubGVuZ3RoPT09MiYmdGhpcy5jc3NSdWxlKGdbMF0sZ1sxXSk7cmV0dXJuIHRoaXN9LGIxLnN0eWxlPWIxLmNzcyxiMS5jc3NSdWxlPWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcy5wYXJzZSh5LGcpO2lmKHgpe3ZhciBUPXRoaXMubGVuZ3RoLTE7dGhpc1tUXS5wcm9wZXJ0aWVzLnB1c2goeCksdGhpc1tUXS5wcm9wZXJ0aWVzW3gubmFtZV09eCx4Lm5hbWUubWF0Y2goL3BpZS0oXGQrKS1iYWNrZ3JvdW5kLXNpemUvKSYmeC52YWx1ZSYmKHRoaXMuX3ByaXZhdGUuaGFzUGllPSEwKSx4Lm1hcHBlZCYmdGhpc1tUXS5tYXBwZWRQcm9wZXJ0aWVzLnB1c2goeCk7dmFyIEw9IXRoaXNbVF0uc2VsZWN0b3I7TCYmKHRoaXMuX3ByaXZhdGUuY29yZVN0eWxlW3gubmFtZV09eCl9cmV0dXJuIHRoaXN9LGIxLmFwcGVuZD1mdW5jdGlvbih5KXtyZXR1cm4gQnQoeSk/eS5hcHBlbmRUb1N0eWxlKHRoaXMpOmZ0KHkpP3RoaXMuYXBwZW5kRnJvbUpzb24oeSk6bXQoeSkmJnRoaXMuYXBwZW5kRnJvbVN0cmluZyh5KSx0aGlzfSxwMS5mcm9tSnNvbj1mdW5jdGlvbih5LGcpe3ZhciB4PW5ldyBwMSh5KTtyZXR1cm4geC5mcm9tSnNvbihnKSx4fSxwMS5mcm9tU3RyaW5nPWZ1bmN0aW9uKHksZyl7cmV0dXJuIG5ldyBwMSh5KS5mcm9tU3RyaW5nKGcpfSxbZzEscWssWUwsV2IsZkMsS0wsemYsZENdLmZvckVhY2goZnVuY3Rpb24oeSl7ZGUoYjEseSl9KSxwMS50eXBlcz1iMS50eXBlcyxwMS5wcm9wZXJ0aWVzPWIxLnByb3BlcnRpZXMscDEucHJvcGVydHlHcm91cHM9YjEucHJvcGVydHlHcm91cHMscDEucHJvcGVydHlHcm91cE5hbWVzPWIxLnByb3BlcnR5R3JvdXBOYW1lcyxwMS5wcm9wZXJ0eUdyb3VwS2V5cz1iMS5wcm9wZXJ0eUdyb3VwS2V5czt2YXIgUko9e3N0eWxlOmZ1bmN0aW9uKGcpe2lmKGcpe3ZhciB4PXRoaXMuc2V0U3R5bGUoZyk7eC51cGRhdGUoKX1yZXR1cm4gdGhpcy5fcHJpdmF0ZS5zdHlsZX0sc2V0U3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gQnQoZyk/eC5zdHlsZT1nLmdlbmVyYXRlU3R5bGUodGhpcyk6ZnQoZyk/eC5zdHlsZT1wMS5mcm9tSnNvbih0aGlzLGcpOm10KGcpP3guc3R5bGU9cDEuZnJvbVN0cmluZyh0aGlzLGcpOnguc3R5bGU9cDEodGhpcykseC5zdHlsZX0sdXBkYXRlU3R5bGU6ZnVuY3Rpb24oKXt0aGlzLm11dGFibGVFbGVtZW50cygpLnVwZGF0ZVN0eWxlKCl9fSxqSj0ic2luZ2xlIixNMz17YXV0b2xvY2s6ZnVuY3Rpb24oZyl7aWYoZyE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmF1dG9sb2NrPSEhZztlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG9sb2NrO3JldHVybiB0aGlzfSxhdXRvdW5ncmFiaWZ5OmZ1bmN0aW9uKGcpe2lmKGchPT12b2lkIDApdGhpcy5fcHJpdmF0ZS5hdXRvdW5ncmFiaWZ5PSEhZztlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG91bmdyYWJpZnk7cmV0dXJuIHRoaXN9LGF1dG91bnNlbGVjdGlmeTpmdW5jdGlvbihnKXtpZihnIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUuYXV0b3Vuc2VsZWN0aWZ5PSEhZztlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG91bnNlbGVjdGlmeTtyZXR1cm4gdGhpc30sc2VsZWN0aW9uVHlwZTpmdW5jdGlvbihnKXt2YXIgeD10aGlzLl9wcml2YXRlO2lmKHguc2VsZWN0aW9uVHlwZT09bnVsbCYmKHguc2VsZWN0aW9uVHlwZT1qSiksZyE9PXZvaWQgMCkoZz09PSJhZGRpdGl2ZSJ8fGc9PT0ic2luZ2xlIikmJih4LnNlbGVjdGlvblR5cGU9Zyk7ZWxzZSByZXR1cm4geC5zZWxlY3Rpb25UeXBlO3JldHVybiB0aGlzfSxwYW5uaW5nRW5hYmxlZDpmdW5jdGlvbihnKXtpZihnIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQ9ISFnO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LHVzZXJQYW5uaW5nRW5hYmxlZDpmdW5jdGlvbihnKXtpZihnIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUudXNlclBhbm5pbmdFbmFibGVkPSEhZztlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLnVzZXJQYW5uaW5nRW5hYmxlZDtyZXR1cm4gdGhpc30sem9vbWluZ0VuYWJsZWQ6ZnVuY3Rpb24oZyl7aWYoZyE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkPSEhZztlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkO3JldHVybiB0aGlzfSx1c2VyWm9vbWluZ0VuYWJsZWQ6ZnVuY3Rpb24oZyl7aWYoZyE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnVzZXJab29taW5nRW5hYmxlZD0hIWc7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS51c2VyWm9vbWluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LGJveFNlbGVjdGlvbkVuYWJsZWQ6ZnVuY3Rpb24oZyl7aWYoZyE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmJveFNlbGVjdGlvbkVuYWJsZWQ9ISFnO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYm94U2VsZWN0aW9uRW5hYmxlZDtyZXR1cm4gdGhpc30scGFuOmZ1bmN0aW9uKCl7dmFyIGc9YXJndW1lbnRzLHg9dGhpcy5fcHJpdmF0ZS5wYW4sVCxMLE8sUCwkO3N3aXRjaChnLmxlbmd0aCl7Y2FzZSAwOnJldHVybiB4O2Nhc2UgMTppZihtdChnWzBdKSlyZXR1cm4gVD1nWzBdLHhbVF07aWYodXQoZ1swXSkpe2lmKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXJldHVybiB0aGlzO089Z1swXSxQPU8ueCwkPU8ueSxYKFApJiYoeC54PVApLFgoJCkmJih4Lnk9JCksdGhpcy5lbWl0KCJwYW4gdmlld3BvcnQiKX1icmVhaztjYXNlIDI6aWYoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQpcmV0dXJuIHRoaXM7VD1nWzBdLEw9Z1sxXSwoVD09PSJ4Inx8VD09PSJ5IikmJlgoTCkmJih4W1RdPUwpLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0Iik7YnJlYWt9cmV0dXJuIHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpLHRoaXN9LHBhbkJ5OmZ1bmN0aW9uKGcseCl7dmFyIFQ9YXJndW1lbnRzLEw9dGhpcy5fcHJpdmF0ZS5wYW4sTyxQLCQscSxTO2lmKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXJldHVybiB0aGlzO3N3aXRjaChULmxlbmd0aCl7Y2FzZSAxOnV0KGcpJiYoJD1UWzBdLHE9JC54LFM9JC55LFgocSkmJihMLngrPXEpLFgoUykmJihMLnkrPVMpLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0IikpO2JyZWFrO2Nhc2UgMjpPPWcsUD14LChPPT09IngifHxPPT09InkiKSYmWChQKSYmKExbT10rPVApLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0Iik7YnJlYWt9cmV0dXJuIHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpLHRoaXN9LGZpdDpmdW5jdGlvbihnLHgpe3ZhciBUPXRoaXMuZ2V0Rml0Vmlld3BvcnQoZyx4KTtpZihUKXt2YXIgTD10aGlzLl9wcml2YXRlO0wuem9vbT1ULnpvb20sTC5wYW49VC5wYW4sdGhpcy5lbWl0KCJwYW4gem9vbSB2aWV3cG9ydCIpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpfXJldHVybiB0aGlzfSxnZXRGaXRWaWV3cG9ydDpmdW5jdGlvbihnLHgpe2lmKFgoZykmJng9PT12b2lkIDAmJih4PWcsZz12b2lkIDApLCEoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWR8fCF0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkKSl7dmFyIFQ7aWYobXQoZykpe3ZhciBMPWc7Zz10aGlzLiQoTCl9ZWxzZSBpZih4dChnKSl7dmFyIE89ZztUPXt4MTpPLngxLHkxOk8ueTEseDI6Ty54Mix5MjpPLnkyfSxULnc9VC54Mi1ULngxLFQuaD1ULnkyLVQueTF9ZWxzZSBUdChnKXx8KGc9dGhpcy5tdXRhYmxlRWxlbWVudHMoKSk7aWYoIShUdChnKSYmZy5lbXB0eSgpKSl7VD1UfHxnLmJvdW5kaW5nQm94KCk7dmFyIFA9dGhpcy53aWR0aCgpLCQ9dGhpcy5oZWlnaHQoKSxxO2lmKHg9WCh4KT94OjAsIWlzTmFOKFApJiYhaXNOYU4oJCkmJlA+MCYmJD4wJiYhaXNOYU4oVC53KSYmIWlzTmFOKFQuaCkmJlQudz4wJiZULmg+MCl7cT1NYXRoLm1pbigoUC0yKngpL1QudywoJC0yKngpL1QuaCkscT1xPnRoaXMuX3ByaXZhdGUubWF4Wm9vbT90aGlzLl9wcml2YXRlLm1heFpvb206cSxxPXE8dGhpcy5fcHJpdmF0ZS5taW5ab29tP3RoaXMuX3ByaXZhdGUubWluWm9vbTpxO3ZhciBTPXt4OihQLXEqKFQueDErVC54MikpLzIseTooJC1xKihULnkxK1QueTIpKS8yfTtyZXR1cm57em9vbTpxLHBhbjpTfX19fX0sem9vbVJhbmdlOmZ1bmN0aW9uKGcseCl7dmFyIFQ9dGhpcy5fcHJpdmF0ZTtpZih4PT1udWxsKXt2YXIgTD1nO2c9TC5taW4seD1MLm1heH1yZXR1cm4gWChnKSYmWCh4KSYmZzw9eD8oVC5taW5ab29tPWcsVC5tYXhab29tPXgpOlgoZykmJng9PT12b2lkIDAmJmc8PVQubWF4Wm9vbT9ULm1pblpvb209ZzpYKHgpJiZnPT09dm9pZCAwJiZ4Pj1ULm1pblpvb20mJihULm1heFpvb209eCksdGhpc30sbWluWm9vbTpmdW5jdGlvbihnKXtyZXR1cm4gZz09PXZvaWQgMD90aGlzLl9wcml2YXRlLm1pblpvb206dGhpcy56b29tUmFuZ2Uoe21pbjpnfSl9LG1heFpvb206ZnVuY3Rpb24oZyl7cmV0dXJuIGc9PT12b2lkIDA/dGhpcy5fcHJpdmF0ZS5tYXhab29tOnRoaXMuem9vbVJhbmdlKHttYXg6Z30pfSxnZXRab29tZWRWaWV3cG9ydDpmdW5jdGlvbihnKXt2YXIgeD10aGlzLl9wcml2YXRlLFQ9eC5wYW4sTD14Lnpvb20sTyxQLCQ9ITE7aWYoeC56b29taW5nRW5hYmxlZHx8KCQ9ITApLFgoZyk/UD1nOnV0KGcpJiYoUD1nLmxldmVsLGcucG9zaXRpb24hPW51bGw/Tz1OVChnLnBvc2l0aW9uLEwsVCk6Zy5yZW5kZXJlZFBvc2l0aW9uIT1udWxsJiYoTz1nLnJlbmRlcmVkUG9zaXRpb24pLE8hPW51bGwmJiF4LnBhbm5pbmdFbmFibGVkJiYoJD0hMCkpLFA9UD54Lm1heFpvb20/eC5tYXhab29tOlAsUD1QPHgubWluWm9vbT94Lm1pblpvb206UCwkfHwhWChQKXx8UD09PUx8fE8hPW51bGwmJighWChPLngpfHwhWChPLnkpKSlyZXR1cm4gbnVsbDtpZihPIT1udWxsKXt2YXIgcT1ULFM9TCxWPVAsWT17eDotVi9TKihPLngtcS54KStPLngseTotVi9TKihPLnktcS55KStPLnl9O3JldHVybnt6b29tZWQ6ITAscGFubmVkOiEwLHpvb206VixwYW46WX19ZWxzZSByZXR1cm57em9vbWVkOiEwLHBhbm5lZDohMSx6b29tOlAscGFuOlR9fSx6b29tOmZ1bmN0aW9uKGcpe2lmKGc9PT12b2lkIDApcmV0dXJuIHRoaXMuX3ByaXZhdGUuem9vbTt2YXIgeD10aGlzLmdldFpvb21lZFZpZXdwb3J0KGcpLFQ9dGhpcy5fcHJpdmF0ZTtyZXR1cm4geD09bnVsbHx8IXguem9vbWVkP3RoaXM6KFQuem9vbT14Lnpvb20seC5wYW5uZWQmJihULnBhbi54PXgucGFuLngsVC5wYW4ueT14LnBhbi55KSx0aGlzLmVtaXQoInpvb20iKyh4LnBhbm5lZD8iIHBhbiI6IiIpKyIgdmlld3BvcnQiKSx0aGlzLm5vdGlmeSgidmlld3BvcnQiKSx0aGlzKX0sdmlld3BvcnQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZSxUPSEwLEw9ITAsTz1bXSxQPSExLCQ9ITE7aWYoIWcpcmV0dXJuIHRoaXM7aWYoWChnLnpvb20pfHwoVD0hMSksdXQoZy5wYW4pfHwoTD0hMSksIVQmJiFMKXJldHVybiB0aGlzO2lmKFQpe3ZhciBxPWcuem9vbTtxPHgubWluWm9vbXx8cT54Lm1heFpvb218fCF4Lnpvb21pbmdFbmFibGVkP1A9ITA6KHguem9vbT1xLE8ucHVzaCgiem9vbSIpKX1pZihMJiYoIVB8fCFnLmNhbmNlbE9uRmFpbGVkWm9vbSkmJngucGFubmluZ0VuYWJsZWQpe3ZhciBTPWcucGFuO1goUy54KSYmKHgucGFuLng9Uy54LCQ9ITEpLFgoUy55KSYmKHgucGFuLnk9Uy55LCQ9ITEpLCR8fE8ucHVzaCgicGFuIil9cmV0dXJuIE8ubGVuZ3RoPjAmJihPLnB1c2goInZpZXdwb3J0IiksdGhpcy5lbWl0KE8uam9pbigiICIpKSx0aGlzLm5vdGlmeSgidmlld3BvcnQiKSksdGhpc30sY2VudGVyOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuZ2V0Q2VudGVyUGFuKGcpO3JldHVybiB4JiYodGhpcy5fcHJpdmF0ZS5wYW49eCx0aGlzLmVtaXQoInBhbiB2aWV3cG9ydCIpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpKSx0aGlzfSxnZXRDZW50ZXJQYW46ZnVuY3Rpb24oZyx4KXtpZih0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXtpZihtdChnKSl7dmFyIFQ9ZztnPXRoaXMubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKFQpfWVsc2UgVHQoZyl8fChnPXRoaXMubXV0YWJsZUVsZW1lbnRzKCkpO2lmKGcubGVuZ3RoIT09MCl7dmFyIEw9Zy5ib3VuZGluZ0JveCgpLE89dGhpcy53aWR0aCgpLFA9dGhpcy5oZWlnaHQoKTt4PXg9PT12b2lkIDA/dGhpcy5fcHJpdmF0ZS56b29tOng7dmFyICQ9e3g6KE8teCooTC54MStMLngyKSkvMix5OihQLXgqKEwueTErTC55MikpLzJ9O3JldHVybiAkfX19LHJlc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWR8fCF0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkP3RoaXM6KHRoaXMudmlld3BvcnQoe3Bhbjp7eDowLHk6MH0sem9vbToxfSksdGhpcyl9LGludmFsaWRhdGVTaXplOmZ1bmN0aW9uKCl7dGhpcy5fcHJpdmF0ZS5zaXplQ2FjaGU9bnVsbH0sc2l6ZTpmdW5jdGlvbigpe3ZhciBnPXRoaXMuX3ByaXZhdGUseD1nLmNvbnRhaW5lcjtyZXR1cm4gZy5zaXplQ2FjaGU9Zy5zaXplQ2FjaGV8fCh4P2Z1bmN0aW9uKCl7dmFyIFQ9Ui5nZXRDb21wdXRlZFN0eWxlKHgpLEw9ZnVuY3Rpb24oUCl7cmV0dXJuIHBhcnNlRmxvYXQoVC5nZXRQcm9wZXJ0eVZhbHVlKFApKX07cmV0dXJue3dpZHRoOnguY2xpZW50V2lkdGgtTCgicGFkZGluZy1sZWZ0IiktTCgicGFkZGluZy1yaWdodCIpLGhlaWdodDp4LmNsaWVudEhlaWdodC1MKCJwYWRkaW5nLXRvcCIpLUwoInBhZGRpbmctYm90dG9tIil9fSgpOnt3aWR0aDoxLGhlaWdodDoxfSl9LHdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZSgpLndpZHRofSxoZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplKCkuaGVpZ2h0fSxleHRlbnQ6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLl9wcml2YXRlLnBhbix4PXRoaXMuX3ByaXZhdGUuem9vbSxUPXRoaXMucmVuZGVyZWRFeHRlbnQoKSxMPXt4MTooVC54MS1nLngpL3gseDI6KFQueDItZy54KS94LHkxOihULnkxLWcueSkveCx5MjooVC55Mi1nLnkpL3h9O3JldHVybiBMLnc9TC54Mi1MLngxLEwuaD1MLnkyLUwueTEsTH0scmVuZGVyZWRFeHRlbnQ6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndpZHRoKCkseD10aGlzLmhlaWdodCgpO3JldHVybnt4MTowLHkxOjAseDI6Zyx5Mjp4LHc6ZyxoOnh9fSxtdWx0aUNsaWNrRGVib3VuY2VUaW1lOmZ1bmN0aW9uKGcpe2lmKGcpdGhpcy5fcHJpdmF0ZS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lPWc7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lO3JldHVybiB0aGlzfX07TTMuY2VudHJlPU0zLmNlbnRlcixNMy5hdXRvbG9ja05vZGVzPU0zLmF1dG9sb2NrLE0zLmF1dG91bmdyYWJpZnlOb2Rlcz1NMy5hdXRvdW5ncmFiaWZ5O3ZhciBIaz17ZGF0YTpBYy5kYXRhKHtmaWVsZDoiZGF0YSIsYmluZGluZ0V2ZW50OiJkYXRhIixhbGxvd0JpbmRpbmc6ITAsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdFdmVudDoiZGF0YSIsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITAsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsYWxsb3dHZXR0aW5nOiEwLHVwZGF0ZVN0eWxlOiEwfSkscmVtb3ZlRGF0YTpBYy5yZW1vdmVEYXRhKHtmaWVsZDoiZGF0YSIsZXZlbnQ6ImRhdGEiLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLHRyaWdnZXJFdmVudDohMCx1cGRhdGVTdHlsZTohMH0pLHNjcmF0Y2g6QWMuZGF0YSh7ZmllbGQ6InNjcmF0Y2giLGJpbmRpbmdFdmVudDoic2NyYXRjaCIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InNjcmF0Y2giLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZVNjcmF0Y2g6QWMucmVtb3ZlRGF0YSh7ZmllbGQ6InNjcmF0Y2giLGV2ZW50OiJzY3JhdGNoIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITAsdXBkYXRlU3R5bGU6ITB9KX07SGsuYXR0cj1Iay5kYXRhLEhrLnJlbW92ZUF0dHI9SGsucmVtb3ZlRGF0YTt2YXIgVms9ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcztnPWRlKHt9LGcpO3ZhciBUPWcuY29udGFpbmVyO1QmJiFVKFQpJiZVKFRbMF0pJiYoVD1UWzBdKTt2YXIgTD1UP1QuX2N5cmVnOm51bGw7TD1MfHx7fSxMJiZMLmN5JiYoTC5jeS5kZXN0cm95KCksTD17fSk7dmFyIE89TC5yZWFkaWVzPUwucmVhZGllc3x8W107VCYmKFQuX2N5cmVnPUwpLEwuY3k9eDt2YXIgUD1SIT09dm9pZCAwJiZUIT09dm9pZCAwJiYhZy5oZWFkbGVzcywkPWc7JC5sYXlvdXQ9ZGUoe25hbWU6UD8iZ3JpZCI6Im51bGwifSwkLmxheW91dCksJC5yZW5kZXJlcj1kZSh7bmFtZTpQPyJjYW52YXMiOiJudWxsIn0sJC5yZW5kZXJlcik7dmFyIHE9ZnVuY3Rpb24oaHQsZHQsTHQpe3JldHVybiBkdCE9PXZvaWQgMD9kdDpMdCE9PXZvaWQgMD9MdDpodH0sUz10aGlzLl9wcml2YXRlPXtjb250YWluZXI6VCxyZWFkeTohMSxvcHRpb25zOiQsZWxlbWVudHM6bmV3ICRmKHRoaXMpLGxpc3RlbmVyczpbXSxhbmlFbGVzOm5ldyAkZih0aGlzKSxkYXRhOiQuZGF0YXx8e30sc2NyYXRjaDp7fSxsYXlvdXQ6bnVsbCxyZW5kZXJlcjpudWxsLGRlc3Ryb3llZDohMSxub3RpZmljYXRpb25zRW5hYmxlZDohMCxtaW5ab29tOjFlLTUwLG1heFpvb206MWU1MCx6b29taW5nRW5hYmxlZDpxKCEwLCQuem9vbWluZ0VuYWJsZWQpLHVzZXJab29taW5nRW5hYmxlZDpxKCEwLCQudXNlclpvb21pbmdFbmFibGVkKSxwYW5uaW5nRW5hYmxlZDpxKCEwLCQucGFubmluZ0VuYWJsZWQpLHVzZXJQYW5uaW5nRW5hYmxlZDpxKCEwLCQudXNlclBhbm5pbmdFbmFibGVkKSxib3hTZWxlY3Rpb25FbmFibGVkOnEoITAsJC5ib3hTZWxlY3Rpb25FbmFibGVkKSxhdXRvbG9jazpxKCExLCQuYXV0b2xvY2ssJC5hdXRvbG9ja05vZGVzKSxhdXRvdW5ncmFiaWZ5OnEoITEsJC5hdXRvdW5ncmFiaWZ5LCQuYXV0b3VuZ3JhYmlmeU5vZGVzKSxhdXRvdW5zZWxlY3RpZnk6cSghMSwkLmF1dG91bnNlbGVjdGlmeSksc3R5bGVFbmFibGVkOiQuc3R5bGVFbmFibGVkPT09dm9pZCAwP1A6JC5zdHlsZUVuYWJsZWQsem9vbTpYKCQuem9vbSk/JC56b29tOjEscGFuOnt4OnV0KCQucGFuKSYmWCgkLnBhbi54KT8kLnBhbi54OjAseTp1dCgkLnBhbikmJlgoJC5wYW4ueSk/JC5wYW4ueTowfSxhbmltYXRpb246e2N1cnJlbnQ6W10scXVldWU6W119LGhhc0NvbXBvdW5kTm9kZXM6ITEsbXVsdGlDbGlja0RlYm91bmNlVGltZTpxKDI1MCwkLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUpfTt0aGlzLmNyZWF0ZUVtaXR0ZXIoKSx0aGlzLnNlbGVjdGlvblR5cGUoJC5zZWxlY3Rpb25UeXBlKSx0aGlzLnpvb21SYW5nZSh7bWluOiQubWluWm9vbSxtYXg6JC5tYXhab29tfSk7dmFyIFY9ZnVuY3Rpb24oaHQsZHQpe3ZhciBMdD1odC5zb21lKEh0KTtpZihMdClyZXR1cm4gZXguYWxsKGh0KS50aGVuKGR0KTtkdChodCl9O1Muc3R5bGVFbmFibGVkJiZ4LnNldFN0eWxlKFtdKTt2YXIgWT1kZSh7fSwkLCQucmVuZGVyZXIpO3guaW5pdFJlbmRlcmVyKFkpO3ZhciBydD1mdW5jdGlvbihodCxkdCxMdCl7eC5ub3RpZmljYXRpb25zKCExKTt2YXIga3Q9eC5tdXRhYmxlRWxlbWVudHMoKTtrdC5sZW5ndGg+MCYma3QucmVtb3ZlKCksaHQhPW51bGwmJih1dChodCl8fGZ0KGh0KSkmJnguYWRkKGh0KSx4Lm9uZSgibGF5b3V0cmVhZHkiLGZ1bmN0aW9uKFB0KXt4Lm5vdGlmaWNhdGlvbnMoITApLHguZW1pdChQdCkseC5vbmUoImxvYWQiLGR0KSx4LmVtaXRBbmROb3RpZnkoImxvYWQiKX0pLm9uZSgibGF5b3V0c3RvcCIsZnVuY3Rpb24oKXt4Lm9uZSgiZG9uZSIsTHQpLHguZW1pdCgiZG9uZSIpfSk7dmFyIER0PWRlKHt9LHguX3ByaXZhdGUub3B0aW9ucy5sYXlvdXQpO0R0LmVsZXM9eC5lbGVtZW50cygpLHgubGF5b3V0KER0KS5ydW4oKX07VihbJC5zdHlsZSwkLmVsZW1lbnRzXSxmdW5jdGlvbihvdCl7dmFyIGh0PW90WzBdLGR0PW90WzFdO1Muc3R5bGVFbmFibGVkJiZ4LnN0eWxlKCkuYXBwZW5kKGh0KSxydChkdCxmdW5jdGlvbigpe3guc3RhcnRBbmltYXRpb25Mb29wKCksUy5yZWFkeT0hMCx5dCgkLnJlYWR5KSYmeC5vbigicmVhZHkiLCQucmVhZHkpO2Zvcih2YXIgTHQ9MDtMdDxPLmxlbmd0aDtMdCsrKXt2YXIga3Q9T1tMdF07eC5vbigicmVhZHkiLGt0KX1MJiYoTC5yZWFkaWVzPVtdKSx4LmVtaXQoInJlYWR5Iil9LCQuZG9uZSl9KX0sZ0M9VmsucHJvdG90eXBlO2RlKGdDLHtpbnN0YW5jZVN0cmluZzpmdW5jdGlvbigpe3JldHVybiJjb3JlIn0saXNSZWFkeTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnJlYWR5fSxkZXN0cm95ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5kZXN0cm95ZWR9LHJlYWR5OmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmlzUmVhZHkoKT90aGlzLmVtaXR0ZXIoKS5lbWl0KCJyZWFkeSIsW10sZyk6dGhpcy5vbigicmVhZHkiLGcpLHRoaXN9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgZz10aGlzO2lmKCFnLmRlc3Ryb3llZCgpKXJldHVybiBnLnN0b3BBbmltYXRpb25Mb29wKCksZy5kZXN0cm95UmVuZGVyZXIoKSx0aGlzLmVtaXQoImRlc3Ryb3kiKSxnLl9wcml2YXRlLmRlc3Ryb3llZD0hMCxnfSxoYXNFbGVtZW50V2l0aElkOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLmhhc0VsZW1lbnRXaXRoSWQoZyl9LGdldEVsZW1lbnRCeUlkOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLmdldEVsZW1lbnRCeUlkKGcpfSxoYXNDb21wb3VuZE5vZGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuaGFzQ29tcG91bmROb2Rlc30saGVhZGxlc3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5yZW5kZXJlci5pc0hlYWRsZXNzKCl9LHN0eWxlRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnN0eWxlRW5hYmxlZH0sYWRkVG9Qb29sOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLm1lcmdlKGcpLHRoaXN9LHJlbW92ZUZyb21Qb29sOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLnVubWVyZ2UoZyksdGhpc30sY29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY29udGFpbmVyfHxudWxsfSxtb3VudDpmdW5jdGlvbihnKXtpZihnIT1udWxsKXt2YXIgeD10aGlzLFQ9eC5fcHJpdmF0ZSxMPVQub3B0aW9ucztyZXR1cm4hVShnKSYmVShnWzBdKSYmKGc9Z1swXSkseC5zdG9wQW5pbWF0aW9uTG9vcCgpLHguZGVzdHJveVJlbmRlcmVyKCksVC5jb250YWluZXI9ZyxULnN0eWxlRW5hYmxlZD0hMCx4LmludmFsaWRhdGVTaXplKCkseC5pbml0UmVuZGVyZXIoZGUoe30sTCxMLnJlbmRlcmVyLHtuYW1lOkwucmVuZGVyZXIubmFtZT09PSJudWxsIj8iY2FudmFzIjpMLnJlbmRlcmVyLm5hbWV9KSkseC5zdGFydEFuaW1hdGlvbkxvb3AoKSx4LnN0eWxlKEwuc3R5bGUpLHguZW1pdCgibW91bnQiKSx4fX0sdW5tb3VudDpmdW5jdGlvbigpe3ZhciBnPXRoaXM7cmV0dXJuIGcuc3RvcEFuaW1hdGlvbkxvb3AoKSxnLmRlc3Ryb3lSZW5kZXJlcigpLGcuaW5pdFJlbmRlcmVyKHtuYW1lOiJudWxsIn0pLGcuZW1pdCgidW5tb3VudCIpLGd9LG9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gVmIodGhpcy5fcHJpdmF0ZS5vcHRpb25zKX0sanNvbjpmdW5jdGlvbihnKXt2YXIgeD10aGlzLFQ9eC5fcHJpdmF0ZSxMPXgubXV0YWJsZUVsZW1lbnRzKCksTz1mdW5jdGlvbigkdCl7cmV0dXJuIHguZ2V0RWxlbWVudEJ5SWQoJHQuaWQoKSl9O2lmKHV0KGcpKXtpZih4LnN0YXJ0QmF0Y2goKSxnLmVsZW1lbnRzKXt2YXIgUD17fSwkPWZ1bmN0aW9uKCR0LFp0KXtmb3IodmFyIFl0PVtdLHF0PVtdLG5lPTA7bmU8JHQubGVuZ3RoO25lKyspe3ZhciBHdD0kdFtuZV07aWYoIUd0LmRhdGEuaWQpe1NjKCJjeS5qc29uKCkgY2Fubm90IGhhbmRsZSBlbGVtZW50cyB3aXRob3V0IGFuIElEIGF0dHJpYnV0ZSIpO2NvbnRpbnVlfXZhciBnZT0iIitHdC5kYXRhLmlkLGJlPXguZ2V0RWxlbWVudEJ5SWQoZ2UpO1BbZ2VdPSEwLGJlLmxlbmd0aCE9PTA/cXQucHVzaCh7ZWxlOmJlLGpzb246R3R9KTooWnQmJihHdC5ncm91cD1adCksWXQucHVzaChHdCkpfXguYWRkKFl0KTtmb3IodmFyIGllPTA7aWU8cXQubGVuZ3RoO2llKyspe3ZhciBGZT1xdFtpZV0sd2U9RmUuZWxlLGJuPUZlLmpzb247d2UuanNvbihibil9fTtpZihmdChnLmVsZW1lbnRzKSkkKGcuZWxlbWVudHMpO2Vsc2UgZm9yKHZhciBxPVsibm9kZXMiLCJlZGdlcyJdLFM9MDtTPHEubGVuZ3RoO1MrKyl7dmFyIFY9cVtTXSxZPWcuZWxlbWVudHNbVl07ZnQoWSkmJiQoWSxWKX12YXIgcnQ9eC5jb2xsZWN0aW9uKCk7TC5maWx0ZXIoZnVuY3Rpb24oUHQpe3JldHVybiFQW1B0LmlkKCldfSkuZm9yRWFjaChmdW5jdGlvbihQdCl7UHQuaXNQYXJlbnQoKT9ydC5tZXJnZShQdCk6UHQucmVtb3ZlKCl9KSxydC5mb3JFYWNoKGZ1bmN0aW9uKFB0KXtyZXR1cm4gUHQuY2hpbGRyZW4oKS5tb3ZlKHtwYXJlbnQ6bnVsbH0pfSkscnQuZm9yRWFjaChmdW5jdGlvbihQdCl7cmV0dXJuIE8oUHQpLnJlbW92ZSgpfSl9Zy5zdHlsZSYmeC5zdHlsZShnLnN0eWxlKSxnLnpvb20hPW51bGwmJmcuem9vbSE9PVQuem9vbSYmeC56b29tKGcuem9vbSksZy5wYW4mJihnLnBhbi54IT09VC5wYW4ueHx8Zy5wYW4ueSE9PVQucGFuLnkpJiZ4LnBhbihnLnBhbiksZy5kYXRhJiZ4LmRhdGEoZy5kYXRhKTtmb3IodmFyIG90PVsibWluWm9vbSIsIm1heFpvb20iLCJ6b29taW5nRW5hYmxlZCIsInVzZXJab29taW5nRW5hYmxlZCIsInBhbm5pbmdFbmFibGVkIiwidXNlclBhbm5pbmdFbmFibGVkIiwiYm94U2VsZWN0aW9uRW5hYmxlZCIsImF1dG9sb2NrIiwiYXV0b3VuZ3JhYmlmeSIsImF1dG91bnNlbGVjdGlmeSIsIm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUiXSxodD0wO2h0PG90Lmxlbmd0aDtodCsrKXt2YXIgZHQ9b3RbaHRdO2dbZHRdIT1udWxsJiZ4W2R0XShnW2R0XSl9cmV0dXJuIHguZW5kQmF0Y2goKSx0aGlzfWVsc2V7dmFyIEx0PSEhZyxrdD17fTtMdD9rdC5lbGVtZW50cz10aGlzLmVsZW1lbnRzKCkubWFwKGZ1bmN0aW9uKFB0KXtyZXR1cm4gUHQuanNvbigpfSk6KGt0LmVsZW1lbnRzPXt9LEwuZm9yRWFjaChmdW5jdGlvbihQdCl7dmFyICR0PVB0Lmdyb3VwKCk7a3QuZWxlbWVudHNbJHRdfHwoa3QuZWxlbWVudHNbJHRdPVtdKSxrdC5lbGVtZW50c1skdF0ucHVzaChQdC5qc29uKCkpfSkpLHRoaXMuX3ByaXZhdGUuc3R5bGVFbmFibGVkJiYoa3Quc3R5bGU9eC5zdHlsZSgpLmpzb24oKSksa3QuZGF0YT1WYih4LmRhdGEoKSk7dmFyIER0PVQub3B0aW9ucztyZXR1cm4ga3Quem9vbWluZ0VuYWJsZWQ9VC56b29taW5nRW5hYmxlZCxrdC51c2VyWm9vbWluZ0VuYWJsZWQ9VC51c2VyWm9vbWluZ0VuYWJsZWQsa3Quem9vbT1ULnpvb20sa3QubWluWm9vbT1ULm1pblpvb20sa3QubWF4Wm9vbT1ULm1heFpvb20sa3QucGFubmluZ0VuYWJsZWQ9VC5wYW5uaW5nRW5hYmxlZCxrdC51c2VyUGFubmluZ0VuYWJsZWQ9VC51c2VyUGFubmluZ0VuYWJsZWQsa3QucGFuPVZiKFQucGFuKSxrdC5ib3hTZWxlY3Rpb25FbmFibGVkPVQuYm94U2VsZWN0aW9uRW5hYmxlZCxrdC5yZW5kZXJlcj1WYihEdC5yZW5kZXJlciksa3QuaGlkZUVkZ2VzT25WaWV3cG9ydD1EdC5oaWRlRWRnZXNPblZpZXdwb3J0LGt0LnRleHR1cmVPblZpZXdwb3J0PUR0LnRleHR1cmVPblZpZXdwb3J0LGt0LndoZWVsU2Vuc2l0aXZpdHk9RHQud2hlZWxTZW5zaXRpdml0eSxrdC5tb3Rpb25CbHVyPUR0Lm1vdGlvbkJsdXIsa3QubXVsdGlDbGlja0RlYm91bmNlVGltZT1EdC5tdWx0aUNsaWNrRGVib3VuY2VUaW1lLGt0fX19KSxnQy4kaWQ9Z0MuZ2V0RWxlbWVudEJ5SWQsW0FKLE9KLFJCLFVMLGxDLEZKLFdMLGhDLFJKLE0zLEhrXS5mb3JFYWNoKGZ1bmN0aW9uKHkpe2RlKGdDLHkpfSk7dmFyICRKPXtmaXQ6ITAsZGlyZWN0ZWQ6ITEscGFkZGluZzozMCxjaXJjbGU6ITEsZ3JpZDohMSxzcGFjaW5nRmFjdG9yOjEuNzUsYm91bmRpbmdCb3g6dm9pZCAwLGF2b2lkT3ZlcmxhcDohMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEscm9vdHM6dm9pZCAwLG1heGltYWw6ITEsZGVwdGhTb3J0OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24oZyx4KXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihnLHgpe3JldHVybiB4fX0sZHg9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuc2NyYXRjaCgiYnJlYWR0aGZpcnN0Iil9LFhMPWZ1bmN0aW9uKGcseCl7cmV0dXJuIGcuc2NyYXRjaCgiYnJlYWR0aGZpcnN0Iix4KX07ZnVuY3Rpb24gakIoeSl7dGhpcy5vcHRpb25zPWRlKHt9LCRKLHkpfWpCLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgeT10aGlzLm9wdGlvbnMsZz15LHg9eS5jeSxUPWcuZWxlcyxMPVQubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oQ2kpe3JldHVybiFDaS5pc1BhcmVudCgpfSksTz1ULFA9Zy5kaXJlY3RlZCwkPWcubWF4aW1hbHx8Zy5tYXhpbWFsQWRqdXN0bWVudHM+MCxxPXpkKGcuYm91bmRpbmdCb3g/Zy5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6eC53aWR0aCgpLGg6eC5oZWlnaHQoKX0pLFM7aWYoVHQoZy5yb290cykpUz1nLnJvb3RzO2Vsc2UgaWYoZnQoZy5yb290cykpe2Zvcih2YXIgVj1bXSxZPTA7WTxnLnJvb3RzLmxlbmd0aDtZKyspe3ZhciBydD1nLnJvb3RzW1ldLG90PXguZ2V0RWxlbWVudEJ5SWQocnQpO1YucHVzaChvdCl9Uz14LmNvbGxlY3Rpb24oVil9ZWxzZSBpZihtdChnLnJvb3RzKSlTPXguJChnLnJvb3RzKTtlbHNlIGlmKFApUz1MLnJvb3RzKCk7ZWxzZXt2YXIgaHQ9VC5jb21wb25lbnRzKCk7Uz14LmNvbGxlY3Rpb24oKTtmb3IodmFyIGR0PWZ1bmN0aW9uKGhpKXt2YXIgZ3M9aHRbaGldLHFpPWdzLm1heERlZ3JlZSghMSksU2k9Z3MuZmlsdGVyKGZ1bmN0aW9uKFVpKXtyZXR1cm4gVWkuZGVncmVlKCExKT09PXFpfSk7Uz1TLmFkZChTaSl9LEx0PTA7THQ8aHQubGVuZ3RoO0x0KyspZHQoTHQpfXZhciBrdD1bXSxEdD17fSxQdD1mdW5jdGlvbihoaSxncyl7a3RbZ3NdPT1udWxsJiYoa3RbZ3NdPVtdKTt2YXIgcWk9a3RbZ3NdLmxlbmd0aDtrdFtnc10ucHVzaChoaSksWEwoaGkse2luZGV4OnFpLGRlcHRoOmdzfSl9LCR0PWZ1bmN0aW9uKGhpLGdzKXt2YXIgcWk9ZHgoaGkpLFNpPXFpLmRlcHRoLFVpPXFpLmluZGV4O2t0W1NpXVtVaV09bnVsbCxQdChoaSxncyl9O08uYmZzKHtyb290czpTLGRpcmVjdGVkOmcuZGlyZWN0ZWQsdmlzaXQ6ZnVuY3Rpb24oaGksZ3MscWksU2ksVWkpe3ZhciBWYT1oaVswXSxRcz1WYS5pZCgpO1B0KFZhLFVpKSxEdFtRc109ITB9fSk7Zm9yKHZhciBadD1bXSxZdD0wO1l0PEwubGVuZ3RoO1l0Kyspe3ZhciBxdD1MW1l0XTtEdFtxdC5pZCgpXXx8WnQucHVzaChxdCl9dmFyIG5lPWZ1bmN0aW9uKGhpKXtmb3IodmFyIGdzPWt0W2hpXSxxaT0wO3FpPGdzLmxlbmd0aDtxaSsrKXt2YXIgU2k9Z3NbcWldO2lmKFNpPT1udWxsKXtncy5zcGxpY2UocWksMSkscWktLTtjb250aW51ZX1YTChTaSx7ZGVwdGg6aGksaW5kZXg6cWl9KX19LEd0PWZ1bmN0aW9uKCl7Zm9yKHZhciBoaT0wO2hpPGt0Lmxlbmd0aDtoaSsrKW5lKGhpKX0sZ2U9ZnVuY3Rpb24oaGksZ3Mpe2Zvcih2YXIgcWk9ZHgoaGkpLFNpPWhpLmluY29tZXJzKCkuZmlsdGVyKGZ1bmN0aW9uKFF0KXtyZXR1cm4gUXQuaXNOb2RlKCkmJlQuaGFzKFF0KX0pLFVpPS0xLFZhPWhpLmlkKCksUXM9MDtRczxTaS5sZW5ndGg7UXMrKyl7dmFyIHFzPVNpW1FzXSxUcj1keChxcyk7VWk9TWF0aC5tYXgoVWksVHIuZGVwdGgpfXJldHVybiBxaS5kZXB0aDw9VWk/Z3NbVmFdP251bGw6KCR0KGhpLFVpKzEpLGdzW1ZhXT0hMCwhMCk6ITF9O2lmKFAmJiQpe3ZhciBiZT1bXSxpZT17fSxGZT1mdW5jdGlvbihoaSl7cmV0dXJuIGJlLnB1c2goaGkpfSx3ZT1mdW5jdGlvbigpe3JldHVybiBiZS5zaGlmdCgpfTtmb3IoTC5mb3JFYWNoKGZ1bmN0aW9uKENpKXtyZXR1cm4gYmUucHVzaChDaSl9KTtiZS5sZW5ndGg+MDspe3ZhciBibj13ZSgpLHplPWdlKGJuLGllKTtpZih6ZSlibi5vdXRnb2VycygpLmZpbHRlcihmdW5jdGlvbihDaSl7cmV0dXJuIENpLmlzTm9kZSgpJiZULmhhcyhDaSl9KS5mb3JFYWNoKEZlKTtlbHNlIGlmKHplPT09bnVsbCl7U2MoIkRldGVjdGVkIGRvdWJsZSBtYXhpbWFsIHNoaWZ0IGZvciBub2RlIGAiK2JuLmlkKCkrImAuICBCYWlsaW5nIG1heGltYWwgYWRqdXN0bWVudCBkdWUgdG8gY3ljbGUuICBVc2UgYG9wdGlvbnMubWF4aW1hbDogdHJ1ZWAgb25seSBvbiBEQUdzLiIpO2JyZWFrfX19R3QoKTt2YXIgR2U9MDtpZihnLmF2b2lkT3ZlcmxhcClmb3IodmFyIEVuPTA7RW48TC5sZW5ndGg7RW4rKyl7dmFyIEluPUxbRW5dLFluPUluLmxheW91dERpbWVuc2lvbnMoZyksU249WW4udyxXbj1Zbi5oO0dlPU1hdGgubWF4KEdlLFNuLFduKX12YXIgcnI9e30sd3I9ZnVuY3Rpb24oaGkpe2lmKHJyW2hpLmlkKCldKXJldHVybiBycltoaS5pZCgpXTtmb3IodmFyIGdzPWR4KGhpKS5kZXB0aCxxaT1oaS5uZWlnaGJvcmhvb2QoKSxTaT0wLFVpPTAsVmE9MDtWYTxxaS5sZW5ndGg7VmErKyl7dmFyIFFzPXFpW1ZhXTtpZighKFFzLmlzRWRnZSgpfHxRcy5pc1BhcmVudCgpfHwhTC5oYXMoUXMpKSl7dmFyIHFzPWR4KFFzKTtpZihxcyE9bnVsbCl7dmFyIFRyPXFzLmluZGV4LFF0PXFzLmRlcHRoO2lmKCEoVHI9PW51bGx8fFF0PT1udWxsKSl7dmFyIGpuPWt0W1F0XS5sZW5ndGg7UXQ8Z3MmJihTaSs9VHIvam4sVWkrKyl9fX19cmV0dXJuIFVpPU1hdGgubWF4KDEsVWkpLFNpPVNpL1VpLFVpPT09MCYmKFNpPTApLHJyW2hpLmlkKCldPVNpLFNpfSx1cj1mdW5jdGlvbihoaSxncyl7dmFyIHFpPXdyKGhpKSxTaT13cihncyksVWk9cWktU2k7cmV0dXJuIFVpPT09MD90ZShoaS5pZCgpLGdzLmlkKCkpOlVpfTtnLmRlcHRoU29ydCE9PXZvaWQgMCYmKHVyPWcuZGVwdGhTb3J0KTtmb3IodmFyIGVyPTA7ZXI8a3QubGVuZ3RoO2VyKyspa3RbZXJdLnNvcnQodXIpLG5lKGVyKTtmb3IodmFyIHZuPVtdLGdyPTA7Z3I8WnQubGVuZ3RoO2dyKyspdm4ucHVzaChadFtncl0pO2t0LnVuc2hpZnQodm4pLEd0KCk7Zm9yKHZhciBmcj0wLEpyPTA7SnI8a3QubGVuZ3RoO0pyKyspZnI9TWF0aC5tYXgoa3RbSnJdLmxlbmd0aCxmcik7dmFyIHZpPXt4OnEueDErcS53LzIseTpxLngxK3EuaC8yfSxYcz1rdC5yZWR1Y2UoZnVuY3Rpb24oQ2ksaGkpe3JldHVybiBNYXRoLm1heChDaSxoaS5sZW5ndGgpfSwwKSxFYT1mdW5jdGlvbihoaSl7dmFyIGdzPWR4KGhpKSxxaT1ncy5kZXB0aCxTaT1ncy5pbmRleCxVaT1rdFtxaV0ubGVuZ3RoLFZhPU1hdGgubWF4KHEudy8oKGcuZ3JpZD9YczpVaSkrMSksR2UpLFFzPU1hdGgubWF4KHEuaC8oa3QubGVuZ3RoKzEpLEdlKSxxcz1NYXRoLm1pbihxLncvMi9rdC5sZW5ndGgscS5oLzIva3QubGVuZ3RoKTtpZihxcz1NYXRoLm1heChxcyxHZSksZy5jaXJjbGUpe3ZhciBRdD1xcypxaStxcy0oa3QubGVuZ3RoPjAmJmt0WzBdLmxlbmd0aDw9Mz9xcy8yOjApLGpuPTIqTWF0aC5QSS9rdFtxaV0ubGVuZ3RoKlNpO3JldHVybiBxaT09PTAmJmt0WzBdLmxlbmd0aD09PTEmJihRdD0xKSx7eDp2aS54K1F0Kk1hdGguY29zKGpuKSx5OnZpLnkrUXQqTWF0aC5zaW4oam4pfX1lbHNle3ZhciBUcj17eDp2aS54KyhTaSsxLShVaSsxKS8yKSpWYSx5OihxaSsxKSpRc307cmV0dXJuIFRyfX07cmV0dXJuIFQubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcyxnLEVhKSx0aGlzfTt2YXIgeko9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLHNwYWNpbmdGYWN0b3I6dm9pZCAwLHJhZGl1czp2b2lkIDAsc3RhcnRBbmdsZTozLzIqTWF0aC5QSSxzd2VlcDp2b2lkIDAsY2xvY2t3aXNlOiEwLHNvcnQ6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpmdW5jdGlvbihnLHgpe3JldHVybiEwfSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOmZ1bmN0aW9uKGcseCl7cmV0dXJuIHh9fTtmdW5jdGlvbiBwQyh5KXt0aGlzLm9wdGlvbnM9ZGUoe30sekoseSl9cEMucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB5PXRoaXMub3B0aW9ucyxnPXkseD15LmN5LFQ9Zy5lbGVzLEw9Zy5jb3VudGVyY2xvY2t3aXNlIT09dm9pZCAwPyFnLmNvdW50ZXJjbG9ja3dpc2U6Zy5jbG9ja3dpc2UsTz1ULm5vZGVzKCkubm90KCI6cGFyZW50Iik7Zy5zb3J0JiYoTz1PLnNvcnQoZy5zb3J0KSk7Zm9yKHZhciBQPXpkKGcuYm91bmRpbmdCb3g/Zy5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6eC53aWR0aCgpLGg6eC5oZWlnaHQoKX0pLCQ9e3g6UC54MStQLncvMix5OlAueTErUC5oLzJ9LHE9Zy5zd2VlcD09PXZvaWQgMD8yKk1hdGguUEktMipNYXRoLlBJL08ubGVuZ3RoOmcuc3dlZXAsUz1xL01hdGgubWF4KDEsTy5sZW5ndGgtMSksVixZPTAscnQ9MDtydDxPLmxlbmd0aDtydCsrKXt2YXIgb3Q9T1tydF0saHQ9b3QubGF5b3V0RGltZW5zaW9ucyhnKSxkdD1odC53LEx0PWh0Lmg7WT1NYXRoLm1heChZLGR0LEx0KX1pZihYKGcucmFkaXVzKT9WPWcucmFkaXVzOk8ubGVuZ3RoPD0xP1Y9MDpWPU1hdGgubWluKFAuaCxQLncpLzItWSxPLmxlbmd0aD4xJiZnLmF2b2lkT3ZlcmxhcCl7WSo9MS43NTt2YXIga3Q9TWF0aC5jb3MoUyktTWF0aC5jb3MoMCksRHQ9TWF0aC5zaW4oUyktTWF0aC5zaW4oMCksUHQ9TWF0aC5zcXJ0KFkqWS8oa3Qqa3QrRHQqRHQpKTtWPU1hdGgubWF4KFB0LFYpfXZhciAkdD1mdW5jdGlvbihZdCxxdCl7dmFyIG5lPWcuc3RhcnRBbmdsZStxdCpTKihMPzE6LTEpLEd0PVYqTWF0aC5jb3MobmUpLGdlPVYqTWF0aC5zaW4obmUpLGJlPXt4OiQueCtHdCx5OiQueStnZX07cmV0dXJuIGJlfTtyZXR1cm4gVC5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLGcsJHQpLHRoaXN9O3ZhciBxSj17Zml0OiEwLHBhZGRpbmc6MzAsc3RhcnRBbmdsZTozLzIqTWF0aC5QSSxzd2VlcDp2b2lkIDAsY2xvY2t3aXNlOiEwLGVxdWlkaXN0YW50OiExLG1pbk5vZGVTcGFjaW5nOjEwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLGhlaWdodDp2b2lkIDAsd2lkdGg6dm9pZCAwLHNwYWNpbmdGYWN0b3I6dm9pZCAwLGNvbmNlbnRyaWM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuZGVncmVlKCl9LGxldmVsV2lkdGg6ZnVuY3Rpb24oZyl7cmV0dXJuIGcubWF4RGVncmVlKCkvNH0sYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOmZ1bmN0aW9uKGcseCl7cmV0dXJuITB9LHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06ZnVuY3Rpb24oZyx4KXtyZXR1cm4geH19O2Z1bmN0aW9uICRCKHkpe3RoaXMub3B0aW9ucz1kZSh7fSxxSix5KX0kQi5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PXRoaXMub3B0aW9ucyxnPXkseD1nLmNvdW50ZXJjbG9ja3dpc2UhPT12b2lkIDA/IWcuY291bnRlcmNsb2Nrd2lzZTpnLmNsb2Nrd2lzZSxUPXkuY3ksTD1nLmVsZXMsTz1MLm5vZGVzKCkubm90KCI6cGFyZW50IiksUD16ZChnLmJvdW5kaW5nQm94P2cuYm91bmRpbmdCb3g6e3gxOjAseTE6MCx3OlQud2lkdGgoKSxoOlQuaGVpZ2h0KCl9KSwkPXt4OlAueDErUC53LzIseTpQLnkxK1AuaC8yfSxxPVtdLFM9MCxWPTA7VjxPLmxlbmd0aDtWKyspe3ZhciBZPU9bVl0scnQ9dm9pZCAwO3J0PWcuY29uY2VudHJpYyhZKSxxLnB1c2goe3ZhbHVlOnJ0LG5vZGU6WX0pLFkuX3ByaXZhdGUuc2NyYXRjaC5jb25jZW50cmljPXJ0fU8udXBkYXRlU3R5bGUoKTtmb3IodmFyIG90PTA7b3Q8Ty5sZW5ndGg7b3QrKyl7dmFyIGh0PU9bb3RdLGR0PWh0LmxheW91dERpbWVuc2lvbnMoZyk7Uz1NYXRoLm1heChTLGR0LncsZHQuaCl9cS5zb3J0KGZ1bmN0aW9uKENpLGhpKXtyZXR1cm4gaGkudmFsdWUtQ2kudmFsdWV9KTtmb3IodmFyIEx0PWcubGV2ZWxXaWR0aChPKSxrdD1bW11dLER0PWt0WzBdLFB0PTA7UHQ8cS5sZW5ndGg7UHQrKyl7dmFyICR0PXFbUHRdO2lmKER0Lmxlbmd0aD4wKXt2YXIgWnQ9TWF0aC5hYnMoRHRbMF0udmFsdWUtJHQudmFsdWUpO1p0Pj1MdCYmKER0PVtdLGt0LnB1c2goRHQpKX1EdC5wdXNoKCR0KX12YXIgWXQ9UytnLm1pbk5vZGVTcGFjaW5nO2lmKCFnLmF2b2lkT3ZlcmxhcCl7dmFyIHF0PWt0Lmxlbmd0aD4wJiZrdFswXS5sZW5ndGg+MSxuZT1NYXRoLm1pbihQLncsUC5oKS8yLVl0LEd0PW5lLyhrdC5sZW5ndGgrcXQ/MTowKTtZdD1NYXRoLm1pbihZdCxHdCl9Zm9yKHZhciBnZT0wLGJlPTA7YmU8a3QubGVuZ3RoO2JlKyspe3ZhciBpZT1rdFtiZV0sRmU9Zy5zd2VlcD09PXZvaWQgMD8yKk1hdGguUEktMipNYXRoLlBJL2llLmxlbmd0aDpnLnN3ZWVwLHdlPWllLmRUaGV0YT1GZS9NYXRoLm1heCgxLGllLmxlbmd0aC0xKTtpZihpZS5sZW5ndGg+MSYmZy5hdm9pZE92ZXJsYXApe3ZhciBibj1NYXRoLmNvcyh3ZSktTWF0aC5jb3MoMCksemU9TWF0aC5zaW4od2UpLU1hdGguc2luKDApLEdlPU1hdGguc3FydChZdCpZdC8oYm4qYm4remUqemUpKTtnZT1NYXRoLm1heChHZSxnZSl9aWUucj1nZSxnZSs9WXR9aWYoZy5lcXVpZGlzdGFudCl7Zm9yKHZhciBFbj0wLEluPTAsWW49MDtZbjxrdC5sZW5ndGg7WW4rKyl7dmFyIFNuPWt0W1luXSxXbj1Tbi5yLUluO0VuPU1hdGgubWF4KEVuLFduKX1Jbj0wO2Zvcih2YXIgcnI9MDtycjxrdC5sZW5ndGg7cnIrKyl7dmFyIHdyPWt0W3JyXTtycj09PTAmJihJbj13ci5yKSx3ci5yPUluLEluKz1Fbn19Zm9yKHZhciB1cj17fSxlcj0wO2VyPGt0Lmxlbmd0aDtlcisrKWZvcih2YXIgdm49a3RbZXJdLGdyPXZuLmRUaGV0YSxmcj12bi5yLEpyPTA7SnI8dm4ubGVuZ3RoO0pyKyspe3ZhciB2aT12bltKcl0sWHM9Zy5zdGFydEFuZ2xlKyh4PzE6LTEpKmdyKkpyLEVhPXt4OiQueCtmcipNYXRoLmNvcyhYcykseTokLnkrZnIqTWF0aC5zaW4oWHMpfTt1clt2aS5ub2RlLmlkKCldPUVhfXJldHVybiBMLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsZyxmdW5jdGlvbihDaSl7dmFyIGhpPUNpLmlkKCk7cmV0dXJuIHVyW2hpXX0pLHRoaXN9O3ZhciBRTCxISj17cmVhZHk6ZnVuY3Rpb24oKXt9LHN0b3A6ZnVuY3Rpb24oKXt9LGFuaW1hdGU6ITAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRpb25EdXJhdGlvbjp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpmdW5jdGlvbihnLHgpe3JldHVybiEwfSxhbmltYXRpb25UaHJlc2hvbGQ6MjUwLHJlZnJlc2g6MjAsZml0OiEwLHBhZGRpbmc6MzAsYm91bmRpbmdCb3g6dm9pZCAwLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxyYW5kb21pemU6ITEsY29tcG9uZW50U3BhY2luZzo0MCxub2RlUmVwdWxzaW9uOmZ1bmN0aW9uKGcpe3JldHVybiAyMDQ4fSxub2RlT3ZlcmxhcDo0LGlkZWFsRWRnZUxlbmd0aDpmdW5jdGlvbihnKXtyZXR1cm4gMzJ9LGVkZ2VFbGFzdGljaXR5OmZ1bmN0aW9uKGcpe3JldHVybiAzMn0sbmVzdGluZ0ZhY3RvcjoxLjIsZ3Jhdml0eToxLG51bUl0ZXI6MWUzLGluaXRpYWxUZW1wOjFlMyxjb29saW5nRmFjdG9yOi45OSxtaW5UZW1wOjF9O2Z1bmN0aW9uIGJDKHkpe3RoaXMub3B0aW9ucz1kZSh7fSxISix5KSx0aGlzLm9wdGlvbnMubGF5b3V0PXRoaXN9YkMucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB5PXRoaXMub3B0aW9ucyxnPXkuY3kseD10aGlzO3guc3RvcHBlZD0hMSwoeS5hbmltYXRlPT09ITB8fHkuYW5pbWF0ZT09PSExKSYmeC5lbWl0KHt0eXBlOiJsYXlvdXRzdGFydCIsbGF5b3V0Onh9KSx5LmRlYnVnPT09ITA/UUw9ITA6UUw9ITE7dmFyIFQ9VkooZyx4LHkpO1FMJiZXSihUKSx5LnJhbmRvbWl6ZSYmWUooVCk7dmFyIEw9eWcoKSxPPWZ1bmN0aW9uKCl7S0ooVCxnLHkpLHkuZml0PT09ITAmJmcuZml0KHkucGFkZGluZyl9LFA9ZnVuY3Rpb24ocnQpe3JldHVybiEoeC5zdG9wcGVkfHxydD49eS5udW1JdGVyfHwoWEooVCx5KSxULnRlbXBlcmF0dXJlPVQudGVtcGVyYXR1cmUqeS5jb29saW5nRmFjdG9yLFQudGVtcGVyYXR1cmU8eS5taW5UZW1wKSl9LCQ9ZnVuY3Rpb24oKXtpZih5LmFuaW1hdGU9PT0hMHx8eS5hbmltYXRlPT09ITEpTygpLHgub25lKCJsYXlvdXRzdG9wIix5LnN0b3ApLHguZW1pdCh7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0Onh9KTtlbHNle3ZhciBydD15LmVsZXMubm9kZXMoKSxvdD16QihULHkscnQpO3J0LmxheW91dFBvc2l0aW9ucyh4LHksb3QpfX0scT0wLFM9ITA7aWYoeS5hbmltYXRlPT09ITApe3ZhciBWPWZ1bmN0aW9uIFkoKXtmb3IodmFyIHJ0PTA7UyYmcnQ8eS5yZWZyZXNoOylTPVAocSkscSsrLHJ0Kys7aWYoIVMpSEIoVCx5KSwkKCk7ZWxzZXt2YXIgb3Q9eWcoKTtvdC1MPj15LmFuaW1hdGlvblRocmVzaG9sZCYmTygpLEJmKFkpfX07VigpfWVsc2V7Zm9yKDtTOylTPVAocSkscSsrO0hCKFQseSksJCgpfXJldHVybiB0aGlzfSxiQy5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0b3BwZWQ9ITAsdGhpcy50aHJlYWQmJnRoaXMudGhyZWFkLnN0b3AoKSx0aGlzLmVtaXQoImxheW91dHN0b3AiKSx0aGlzfSxiQy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRocmVhZCYmdGhpcy50aHJlYWQuc3RvcCgpLHRoaXN9O3ZhciBWSj1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBMPVQuZWxlcy5lZGdlcygpLE89VC5lbGVzLm5vZGVzKCksUD17aXNDb21wb3VuZDpnLmhhc0NvbXBvdW5kTm9kZXMoKSxsYXlvdXROb2RlczpbXSxpZFRvSW5kZXg6e30sbm9kZVNpemU6Ty5zaXplKCksZ3JhcGhTZXQ6W10saW5kZXhUb0dyYXBoOltdLGxheW91dEVkZ2VzOltdLGVkZ2VTaXplOkwuc2l6ZSgpLHRlbXBlcmF0dXJlOlQuaW5pdGlhbFRlbXAsY2xpZW50V2lkdGg6Zy53aWR0aCgpLGNsaWVudEhlaWdodDpnLndpZHRoKCksYm91bmRpbmdCb3g6emQoVC5ib3VuZGluZ0JveD9ULmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzpnLndpZHRoKCksaDpnLmhlaWdodCgpfSl9LCQ9VC5lbGVzLmNvbXBvbmVudHMoKSxxPXt9LFM9MDtTPCQubGVuZ3RoO1MrKylmb3IodmFyIFY9JFtTXSxZPTA7WTxWLmxlbmd0aDtZKyspe3ZhciBydD1WW1ldO3FbcnQuaWQoKV09U31mb3IodmFyIFM9MDtTPFAubm9kZVNpemU7UysrKXt2YXIgb3Q9T1tTXSxodD1vdC5sYXlvdXREaW1lbnNpb25zKFQpLGR0PXt9O2R0LmlzTG9ja2VkPW90LmxvY2tlZCgpLGR0LmlkPW90LmRhdGEoImlkIiksZHQucGFyZW50SWQ9b3QuZGF0YSgicGFyZW50IiksZHQuY21wdElkPXFbb3QuaWQoKV0sZHQuY2hpbGRyZW49W10sZHQucG9zaXRpb25YPW90LnBvc2l0aW9uKCJ4IiksZHQucG9zaXRpb25ZPW90LnBvc2l0aW9uKCJ5IiksZHQub2Zmc2V0WD0wLGR0Lm9mZnNldFk9MCxkdC5oZWlnaHQ9aHQudyxkdC53aWR0aD1odC5oLGR0Lm1heFg9ZHQucG9zaXRpb25YK2R0LndpZHRoLzIsZHQubWluWD1kdC5wb3NpdGlvblgtZHQud2lkdGgvMixkdC5tYXhZPWR0LnBvc2l0aW9uWStkdC5oZWlnaHQvMixkdC5taW5ZPWR0LnBvc2l0aW9uWS1kdC5oZWlnaHQvMixkdC5wYWRMZWZ0PXBhcnNlRmxvYXQob3Quc3R5bGUoInBhZGRpbmciKSksZHQucGFkUmlnaHQ9cGFyc2VGbG9hdChvdC5zdHlsZSgicGFkZGluZyIpKSxkdC5wYWRUb3A9cGFyc2VGbG9hdChvdC5zdHlsZSgicGFkZGluZyIpKSxkdC5wYWRCb3R0b209cGFyc2VGbG9hdChvdC5zdHlsZSgicGFkZGluZyIpKSxkdC5ub2RlUmVwdWxzaW9uPXl0KFQubm9kZVJlcHVsc2lvbik/VC5ub2RlUmVwdWxzaW9uKG90KTpULm5vZGVSZXB1bHNpb24sUC5sYXlvdXROb2Rlcy5wdXNoKGR0KSxQLmlkVG9JbmRleFtkdC5pZF09U31mb3IodmFyIEx0PVtdLGt0PTAsRHQ9LTEsUHQ9W10sUz0wO1M8UC5ub2RlU2l6ZTtTKyspe3ZhciBvdD1QLmxheW91dE5vZGVzW1NdLCR0PW90LnBhcmVudElkOyR0IT1udWxsP1AubGF5b3V0Tm9kZXNbUC5pZFRvSW5kZXhbJHRdXS5jaGlsZHJlbi5wdXNoKG90LmlkKTooTHRbKytEdF09b3QuaWQsUHQucHVzaChvdC5pZCkpfWZvcihQLmdyYXBoU2V0LnB1c2goUHQpO2t0PD1EdDspe3ZhciBadD1MdFtrdCsrXSxZdD1QLmlkVG9JbmRleFtadF0scnQ9UC5sYXlvdXROb2Rlc1tZdF0scXQ9cnQuY2hpbGRyZW47aWYocXQubGVuZ3RoPjApe1AuZ3JhcGhTZXQucHVzaChxdCk7Zm9yKHZhciBTPTA7UzxxdC5sZW5ndGg7UysrKUx0WysrRHRdPXF0W1NdfX1mb3IodmFyIFM9MDtTPFAuZ3JhcGhTZXQubGVuZ3RoO1MrKylmb3IodmFyIG5lPVAuZ3JhcGhTZXRbU10sWT0wO1k8bmUubGVuZ3RoO1krKyl7dmFyIEd0PVAuaWRUb0luZGV4W25lW1ldXTtQLmluZGV4VG9HcmFwaFtHdF09U31mb3IodmFyIFM9MDtTPFAuZWRnZVNpemU7UysrKXt2YXIgZ2U9TFtTXSxiZT17fTtiZS5pZD1nZS5kYXRhKCJpZCIpLGJlLnNvdXJjZUlkPWdlLmRhdGEoInNvdXJjZSIpLGJlLnRhcmdldElkPWdlLmRhdGEoInRhcmdldCIpO3ZhciBpZT15dChULmlkZWFsRWRnZUxlbmd0aCk/VC5pZGVhbEVkZ2VMZW5ndGgoZ2UpOlQuaWRlYWxFZGdlTGVuZ3RoLEZlPXl0KFQuZWRnZUVsYXN0aWNpdHkpP1QuZWRnZUVsYXN0aWNpdHkoZ2UpOlQuZWRnZUVsYXN0aWNpdHksd2U9UC5pZFRvSW5kZXhbYmUuc291cmNlSWRdLGJuPVAuaWRUb0luZGV4W2JlLnRhcmdldElkXSx6ZT1QLmluZGV4VG9HcmFwaFt3ZV0sR2U9UC5pbmRleFRvR3JhcGhbYm5dO2lmKHplIT1HZSl7Zm9yKHZhciBFbj1HSihiZS5zb3VyY2VJZCxiZS50YXJnZXRJZCxQKSxJbj1QLmdyYXBoU2V0W0VuXSxZbj0wLGR0PVAubGF5b3V0Tm9kZXNbd2VdO0luLmluZGV4T2YoZHQuaWQpPT09LTE7KWR0PVAubGF5b3V0Tm9kZXNbUC5pZFRvSW5kZXhbZHQucGFyZW50SWRdXSxZbisrO2ZvcihkdD1QLmxheW91dE5vZGVzW2JuXTtJbi5pbmRleE9mKGR0LmlkKT09PS0xOylkdD1QLmxheW91dE5vZGVzW1AuaWRUb0luZGV4W2R0LnBhcmVudElkXV0sWW4rKztpZSo9WW4qVC5uZXN0aW5nRmFjdG9yfWJlLmlkZWFsTGVuZ3RoPWllLGJlLmVsYXN0aWNpdHk9RmUsUC5sYXlvdXRFZGdlcy5wdXNoKGJlKX1yZXR1cm4gUH0sR0o9ZnVuY3Rpb24oZyx4LFQpe3ZhciBMPVVKKGcseCwwLFQpO3JldHVybiAyPkwuY291bnQ/MDpMLmdyYXBofSxVSj1mdW5jdGlvbiB5KGcseCxULEwpe3ZhciBPPUwuZ3JhcGhTZXRbVF07aWYoLTE8Ty5pbmRleE9mKGcpJiYtMTxPLmluZGV4T2YoeCkpcmV0dXJue2NvdW50OjIsZ3JhcGg6VH07Zm9yKHZhciBQPTAsJD0wOyQ8Ty5sZW5ndGg7JCsrKXt2YXIgcT1PWyRdLFM9TC5pZFRvSW5kZXhbcV0sVj1MLmxheW91dE5vZGVzW1NdLmNoaWxkcmVuO2lmKFYubGVuZ3RoIT09MCl7dmFyIFk9TC5pbmRleFRvR3JhcGhbTC5pZFRvSW5kZXhbVlswXV1dLHJ0PXkoZyx4LFksTCk7aWYocnQuY291bnQhPT0wKWlmKHJ0LmNvdW50PT09MSl7aWYoUCsrLFA9PT0yKWJyZWFrfWVsc2UgcmV0dXJuIHJ0fX1yZXR1cm57Y291bnQ6UCxncmFwaDpUfX0sV0osWUo9ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9Zy5jbGllbnRXaWR0aCxMPWcuY2xpZW50SGVpZ2h0LE89MDtPPGcubm9kZVNpemU7TysrKXt2YXIgUD1nLmxheW91dE5vZGVzW09dO1AuY2hpbGRyZW4ubGVuZ3RoPT09MCYmIVAuaXNMb2NrZWQmJihQLnBvc2l0aW9uWD1NYXRoLnJhbmRvbSgpKlQsUC5wb3NpdGlvblk9TWF0aC5yYW5kb20oKSpMKX19LHpCPWZ1bmN0aW9uKGcseCxUKXt2YXIgTD1nLmJvdW5kaW5nQm94LE89e3gxOjEvMCx4MjotMS8wLHkxOjEvMCx5MjotMS8wfTtyZXR1cm4geC5ib3VuZGluZ0JveCYmKFQuZm9yRWFjaChmdW5jdGlvbihQKXt2YXIgJD1nLmxheW91dE5vZGVzW2cuaWRUb0luZGV4W1AuZGF0YSgiaWQiKV1dO08ueDE9TWF0aC5taW4oTy54MSwkLnBvc2l0aW9uWCksTy54Mj1NYXRoLm1heChPLngyLCQucG9zaXRpb25YKSxPLnkxPU1hdGgubWluKE8ueTEsJC5wb3NpdGlvblkpLE8ueTI9TWF0aC5tYXgoTy55MiwkLnBvc2l0aW9uWSl9KSxPLnc9Ty54Mi1PLngxLE8uaD1PLnkyLU8ueTEpLGZ1bmN0aW9uKFAsJCl7dmFyIHE9Zy5sYXlvdXROb2Rlc1tnLmlkVG9JbmRleFtQLmRhdGEoImlkIildXTtpZih4LmJvdW5kaW5nQm94KXt2YXIgUz0ocS5wb3NpdGlvblgtTy54MSkvTy53LFY9KHEucG9zaXRpb25ZLU8ueTEpL08uaDtyZXR1cm57eDpMLngxK1MqTC53LHk6TC55MStWKkwuaH19ZWxzZSByZXR1cm57eDpxLnBvc2l0aW9uWCx5OnEucG9zaXRpb25ZfX19LEtKPWZ1bmN0aW9uKGcseCxUKXt2YXIgTD1ULmxheW91dCxPPVQuZWxlcy5ub2RlcygpLFA9ekIoZyxULE8pO08ucG9zaXRpb25zKFApLGcucmVhZHkhPT0hMCYmKGcucmVhZHk9ITAsTC5vbmUoImxheW91dHJlYWR5IixULnJlYWR5KSxMLmVtaXQoe3R5cGU6ImxheW91dHJlYWR5IixsYXlvdXQ6dGhpc30pKX0sWEo9ZnVuY3Rpb24oZyx4LFQpe1FKKGcseCksdHR0KGcpLGV0dChnLHgpLG50dChnKSxydHQoZyl9LFFKPWZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPTA7VDxnLmdyYXBoU2V0Lmxlbmd0aDtUKyspZm9yKHZhciBMPWcuZ3JhcGhTZXRbVF0sTz1MLmxlbmd0aCxQPTA7UDxPO1ArKylmb3IodmFyICQ9Zy5sYXlvdXROb2Rlc1tnLmlkVG9JbmRleFtMW1BdXV0scT1QKzE7cTxPO3ErKyl7dmFyIFM9Zy5sYXlvdXROb2Rlc1tnLmlkVG9JbmRleFtMW3FdXV07WkooJCxTLGcseCl9fSxxQj1mdW5jdGlvbihnKXtyZXR1cm4tZysyKmcqTWF0aC5yYW5kb20oKX0sWko9ZnVuY3Rpb24oZyx4LFQsTCl7dmFyIE89Zy5jbXB0SWQsUD14LmNtcHRJZDtpZighKE8hPT1QJiYhVC5pc0NvbXBvdW5kKSl7dmFyICQ9eC5wb3NpdGlvblgtZy5wb3NpdGlvblgscT14LnBvc2l0aW9uWS1nLnBvc2l0aW9uWSxTPTE7JD09PTAmJnE9PT0wJiYoJD1xQihTKSxxPXFCKFMpKTt2YXIgVj1KSihnLHgsJCxxKTtpZihWPjApdmFyIFk9TC5ub2RlT3ZlcmxhcCpWLHJ0PU1hdGguc3FydCgkKiQrcSpxKSxvdD1ZKiQvcnQsaHQ9WSpxL3J0O2Vsc2UgdmFyIGR0PXdDKGcsJCxxKSxMdD13Qyh4LC0xKiQsLTEqcSksa3Q9THQueC1kdC54LER0PUx0LnktZHQueSxQdD1rdCprdCtEdCpEdCxydD1NYXRoLnNxcnQoUHQpLFk9KGcubm9kZVJlcHVsc2lvbit4Lm5vZGVSZXB1bHNpb24pL1B0LG90PVkqa3QvcnQsaHQ9WSpEdC9ydDtnLmlzTG9ja2VkfHwoZy5vZmZzZXRYLT1vdCxnLm9mZnNldFktPWh0KSx4LmlzTG9ja2VkfHwoeC5vZmZzZXRYKz1vdCx4Lm9mZnNldFkrPWh0KX19LEpKPWZ1bmN0aW9uKGcseCxULEwpe2lmKFQ+MCl2YXIgTz1nLm1heFgteC5taW5YO2Vsc2UgdmFyIE89eC5tYXhYLWcubWluWDtpZihMPjApdmFyIFA9Zy5tYXhZLXgubWluWTtlbHNlIHZhciBQPXgubWF4WS1nLm1pblk7cmV0dXJuIE8+PTAmJlA+PTA/TWF0aC5zcXJ0KE8qTytQKlApOjB9LHdDPWZ1bmN0aW9uKGcseCxUKXt2YXIgTD1nLnBvc2l0aW9uWCxPPWcucG9zaXRpb25ZLFA9Zy5oZWlnaHR8fDEsJD1nLndpZHRofHwxLHE9VC94LFM9UC8kLFY9e307cmV0dXJuIHg9PT0wJiYwPFR8fHg9PT0wJiYwPlQ/KFYueD1MLFYueT1PK1AvMixWKTowPHgmJi0xKlM8PXEmJnE8PVM/KFYueD1MKyQvMixWLnk9TyskKlQvMi94LFYpOjA+eCYmLTEqUzw9cSYmcTw9Uz8oVi54PUwtJC8yLFYueT1PLSQqVC8yL3gsVik6MDxUJiYocTw9LTEqU3x8cT49Uyk/KFYueD1MK1AqeC8yL1QsVi55PU8rUC8yLFYpOigwPlQmJihxPD0tMSpTfHxxPj1TKSYmKFYueD1MLVAqeC8yL1QsVi55PU8tUC8yKSxWKX0sdHR0PWZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPTA7VDxnLmVkZ2VTaXplO1QrKyl7dmFyIEw9Zy5sYXlvdXRFZGdlc1tUXSxPPWcuaWRUb0luZGV4W0wuc291cmNlSWRdLFA9Zy5sYXlvdXROb2Rlc1tPXSwkPWcuaWRUb0luZGV4W0wudGFyZ2V0SWRdLHE9Zy5sYXlvdXROb2Rlc1skXSxTPXEucG9zaXRpb25YLVAucG9zaXRpb25YLFY9cS5wb3NpdGlvblktUC5wb3NpdGlvblk7aWYoIShTPT09MCYmVj09PTApKXt2YXIgWT13QyhQLFMsVikscnQ9d0MocSwtMSpTLC0xKlYpLG90PXJ0LngtWS54LGh0PXJ0LnktWS55LGR0PU1hdGguc3FydChvdCpvdCtodCpodCksTHQ9TWF0aC5wb3coTC5pZGVhbExlbmd0aC1kdCwyKS9MLmVsYXN0aWNpdHk7aWYoZHQhPT0wKXZhciBrdD1MdCpvdC9kdCxEdD1MdCpodC9kdDtlbHNlIHZhciBrdD0wLER0PTA7UC5pc0xvY2tlZHx8KFAub2Zmc2V0WCs9a3QsUC5vZmZzZXRZKz1EdCkscS5pc0xvY2tlZHx8KHEub2Zmc2V0WC09a3QscS5vZmZzZXRZLT1EdCl9fX0sZXR0PWZ1bmN0aW9uKGcseCl7aWYoeC5ncmF2aXR5IT09MClmb3IodmFyIFQ9MSxMPTA7TDxnLmdyYXBoU2V0Lmxlbmd0aDtMKyspe3ZhciBPPWcuZ3JhcGhTZXRbTF0sUD1PLmxlbmd0aDtpZihMPT09MCl2YXIgJD1nLmNsaWVudEhlaWdodC8yLHE9Zy5jbGllbnRXaWR0aC8yO2Vsc2UgdmFyIFM9Zy5sYXlvdXROb2Rlc1tnLmlkVG9JbmRleFtPWzBdXV0sVj1nLmxheW91dE5vZGVzW2cuaWRUb0luZGV4W1MucGFyZW50SWRdXSwkPVYucG9zaXRpb25YLHE9Vi5wb3NpdGlvblk7Zm9yKHZhciBZPTA7WTxQO1krKyl7dmFyIHJ0PWcubGF5b3V0Tm9kZXNbZy5pZFRvSW5kZXhbT1tZXV1dO2lmKCFydC5pc0xvY2tlZCl7dmFyIG90PSQtcnQucG9zaXRpb25YLGh0PXEtcnQucG9zaXRpb25ZLGR0PU1hdGguc3FydChvdCpvdCtodCpodCk7aWYoZHQ+VCl7dmFyIEx0PXguZ3Jhdml0eSpvdC9kdCxrdD14LmdyYXZpdHkqaHQvZHQ7cnQub2Zmc2V0WCs9THQscnQub2Zmc2V0WSs9a3R9fX19fSxudHQ9ZnVuY3Rpb24oZyx4KXt2YXIgVD1bXSxMPTAsTz0tMTtmb3IoVC5wdXNoLmFwcGx5KFQsZy5ncmFwaFNldFswXSksTys9Zy5ncmFwaFNldFswXS5sZW5ndGg7TDw9Tzspe3ZhciBQPVRbTCsrXSwkPWcuaWRUb0luZGV4W1BdLHE9Zy5sYXlvdXROb2Rlc1skXSxTPXEuY2hpbGRyZW47aWYoMDxTLmxlbmd0aCYmIXEuaXNMb2NrZWQpe2Zvcih2YXIgVj1xLm9mZnNldFgsWT1xLm9mZnNldFkscnQ9MDtydDxTLmxlbmd0aDtydCsrKXt2YXIgb3Q9Zy5sYXlvdXROb2Rlc1tnLmlkVG9JbmRleFtTW3J0XV1dO290Lm9mZnNldFgrPVYsb3Qub2Zmc2V0WSs9WSxUWysrT109U1tydF19cS5vZmZzZXRYPTAscS5vZmZzZXRZPTB9fX0scnR0PWZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPTA7VDxnLm5vZGVTaXplO1QrKyl7dmFyIEw9Zy5sYXlvdXROb2Rlc1tUXTswPEwuY2hpbGRyZW4ubGVuZ3RoJiYoTC5tYXhYPXZvaWQgMCxMLm1pblg9dm9pZCAwLEwubWF4WT12b2lkIDAsTC5taW5ZPXZvaWQgMCl9Zm9yKHZhciBUPTA7VDxnLm5vZGVTaXplO1QrKyl7dmFyIEw9Zy5sYXlvdXROb2Rlc1tUXTtpZighKDA8TC5jaGlsZHJlbi5sZW5ndGh8fEwuaXNMb2NrZWQpKXt2YXIgTz1pdHQoTC5vZmZzZXRYLEwub2Zmc2V0WSxnLnRlbXBlcmF0dXJlKTtMLnBvc2l0aW9uWCs9Ty54LEwucG9zaXRpb25ZKz1PLnksTC5vZmZzZXRYPTAsTC5vZmZzZXRZPTAsTC5taW5YPUwucG9zaXRpb25YLUwud2lkdGgsTC5tYXhYPUwucG9zaXRpb25YK0wud2lkdGgsTC5taW5ZPUwucG9zaXRpb25ZLUwuaGVpZ2h0LEwubWF4WT1MLnBvc2l0aW9uWStMLmhlaWdodCxzdHQoTCxnKX19Zm9yKHZhciBUPTA7VDxnLm5vZGVTaXplO1QrKyl7dmFyIEw9Zy5sYXlvdXROb2Rlc1tUXTswPEwuY2hpbGRyZW4ubGVuZ3RoJiYhTC5pc0xvY2tlZCYmKEwucG9zaXRpb25YPShMLm1heFgrTC5taW5YKS8yLEwucG9zaXRpb25ZPShMLm1heFkrTC5taW5ZKS8yLEwud2lkdGg9TC5tYXhYLUwubWluWCxMLmhlaWdodD1MLm1heFktTC5taW5ZKX19LGl0dD1mdW5jdGlvbihnLHgsVCl7dmFyIEw9TWF0aC5zcXJ0KGcqZyt4KngpO2lmKEw+VCl2YXIgTz17eDpUKmcvTCx5OlQqeC9MfTtlbHNlIHZhciBPPXt4OmcseTp4fTtyZXR1cm4gT30sc3R0PWZ1bmN0aW9uIHkoZyx4KXt2YXIgVD1nLnBhcmVudElkO2lmKFQhPW51bGwpe3ZhciBMPXgubGF5b3V0Tm9kZXNbeC5pZFRvSW5kZXhbVF1dLE89ITE7aWYoKEwubWF4WD09bnVsbHx8Zy5tYXhYK0wucGFkUmlnaHQ+TC5tYXhYKSYmKEwubWF4WD1nLm1heFgrTC5wYWRSaWdodCxPPSEwKSwoTC5taW5YPT1udWxsfHxnLm1pblgtTC5wYWRMZWZ0PEwubWluWCkmJihMLm1pblg9Zy5taW5YLUwucGFkTGVmdCxPPSEwKSwoTC5tYXhZPT1udWxsfHxnLm1heFkrTC5wYWRCb3R0b20+TC5tYXhZKSYmKEwubWF4WT1nLm1heFkrTC5wYWRCb3R0b20sTz0hMCksKEwubWluWT09bnVsbHx8Zy5taW5ZLUwucGFkVG9wPEwubWluWSkmJihMLm1pblk9Zy5taW5ZLUwucGFkVG9wLE89ITApLE8pcmV0dXJuIHkoTCx4KX19LEhCPWZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPWcubGF5b3V0Tm9kZXMsTD1bXSxPPTA7TzxULmxlbmd0aDtPKyspe3ZhciBQPVRbT10sJD1QLmNtcHRJZCxxPUxbJF09TFskXXx8W107cS5wdXNoKFApfWZvcih2YXIgUz0wLE89MDtPPEwubGVuZ3RoO08rKyl7dmFyIFY9TFtPXTtpZihWKXtWLngxPTEvMCxWLngyPS0xLzAsVi55MT0xLzAsVi55Mj0tMS8wO2Zvcih2YXIgWT0wO1k8Vi5sZW5ndGg7WSsrKXt2YXIgcnQ9VltZXTtWLngxPU1hdGgubWluKFYueDEscnQucG9zaXRpb25YLXJ0LndpZHRoLzIpLFYueDI9TWF0aC5tYXgoVi54MixydC5wb3NpdGlvblgrcnQud2lkdGgvMiksVi55MT1NYXRoLm1pbihWLnkxLHJ0LnBvc2l0aW9uWS1ydC5oZWlnaHQvMiksVi55Mj1NYXRoLm1heChWLnkyLHJ0LnBvc2l0aW9uWStydC5oZWlnaHQvMil9Vi53PVYueDItVi54MSxWLmg9Vi55Mi1WLnkxLFMrPVYudypWLmh9fUwuc29ydChmdW5jdGlvbihEdCxQdCl7cmV0dXJuIFB0LncqUHQuaC1EdC53KkR0Lmh9KTtmb3IodmFyIG90PTAsaHQ9MCxkdD0wLEx0PTAsa3Q9TWF0aC5zcXJ0KFMpKmcuY2xpZW50V2lkdGgvZy5jbGllbnRIZWlnaHQsTz0wO088TC5sZW5ndGg7TysrKXt2YXIgVj1MW09dO2lmKFYpe2Zvcih2YXIgWT0wO1k8Vi5sZW5ndGg7WSsrKXt2YXIgcnQ9VltZXTtydC5pc0xvY2tlZHx8KHJ0LnBvc2l0aW9uWCs9b3QtVi54MSxydC5wb3NpdGlvblkrPWh0LVYueTEpfW90Kz1WLncreC5jb21wb25lbnRTcGFjaW5nLGR0Kz1WLncreC5jb21wb25lbnRTcGFjaW5nLEx0PU1hdGgubWF4KEx0LFYuaCksZHQ+a3QmJihodCs9THQreC5jb21wb25lbnRTcGFjaW5nLG90PTAsZHQ9MCxMdD0wKX19fSxhdHQ9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsYXZvaWRPdmVybGFwUGFkZGluZzoxMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsY29uZGVuc2U6ITEscm93czp2b2lkIDAsY29sczp2b2lkIDAscG9zaXRpb246ZnVuY3Rpb24oZyl7fSxzb3J0OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24oZyx4KXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihnLHgpe3JldHVybiB4fX07ZnVuY3Rpb24gVkIoeSl7dGhpcy5vcHRpb25zPWRlKHt9LGF0dCx5KX1WQi5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5vcHRpb25zLGc9eSx4PXkuY3ksVD1nLmVsZXMsTD1ULm5vZGVzKCkubm90KCI6cGFyZW50Iik7Zy5zb3J0JiYoTD1MLnNvcnQoZy5zb3J0KSk7dmFyIE89emQoZy5ib3VuZGluZ0JveD9nLmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzp4LndpZHRoKCksaDp4LmhlaWdodCgpfSk7aWYoTy5oPT09MHx8Ty53PT09MClULm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsZyxmdW5jdGlvbihycil7cmV0dXJue3g6Ty54MSx5Ok8ueTF9fSk7ZWxzZXt2YXIgUD1MLnNpemUoKSwkPU1hdGguc3FydChQKk8uaC9PLncpLHE9TWF0aC5yb3VuZCgkKSxTPU1hdGgucm91bmQoTy53L08uaCokKSxWPWZ1bmN0aW9uKHdyKXtpZih3cj09bnVsbClyZXR1cm4gTWF0aC5taW4ocSxTKTt2YXIgdXI9TWF0aC5taW4ocSxTKTt1cj09cT9xPXdyOlM9d3J9LFk9ZnVuY3Rpb24od3Ipe2lmKHdyPT1udWxsKXJldHVybiBNYXRoLm1heChxLFMpO3ZhciB1cj1NYXRoLm1heChxLFMpO3VyPT1xP3E9d3I6Uz13cn0scnQ9Zy5yb3dzLG90PWcuY29scyE9bnVsbD9nLmNvbHM6Zy5jb2x1bW5zO2lmKHJ0IT1udWxsJiZvdCE9bnVsbClxPXJ0LFM9b3Q7ZWxzZSBpZihydCE9bnVsbCYmb3Q9PW51bGwpcT1ydCxTPU1hdGguY2VpbChQL3EpO2Vsc2UgaWYocnQ9PW51bGwmJm90IT1udWxsKVM9b3QscT1NYXRoLmNlaWwoUC9TKTtlbHNlIGlmKFMqcT5QKXt2YXIgaHQ9VigpLGR0PVkoKTsoaHQtMSkqZHQ+PVA/VihodC0xKTooZHQtMSkqaHQ+PVAmJlkoZHQtMSl9ZWxzZSBmb3IoO1MqcTxQOyl7dmFyIEx0PVYoKSxrdD1ZKCk7KGt0KzEpKkx0Pj1QP1koa3QrMSk6VihMdCsxKX12YXIgRHQ9Ty53L1MsUHQ9Ty5oL3E7aWYoZy5jb25kZW5zZSYmKER0PTAsUHQ9MCksZy5hdm9pZE92ZXJsYXApZm9yKHZhciAkdD0wOyR0PEwubGVuZ3RoOyR0Kyspe3ZhciBadD1MWyR0XSxZdD1adC5fcHJpdmF0ZS5wb3NpdGlvbjsoWXQueD09bnVsbHx8WXQueT09bnVsbCkmJihZdC54PTAsWXQueT0wKTt2YXIgcXQ9WnQubGF5b3V0RGltZW5zaW9ucyhnKSxuZT1nLmF2b2lkT3ZlcmxhcFBhZGRpbmcsR3Q9cXQudytuZSxnZT1xdC5oK25lO0R0PU1hdGgubWF4KER0LEd0KSxQdD1NYXRoLm1heChQdCxnZSl9Zm9yKHZhciBiZT17fSxpZT1mdW5jdGlvbih3cix1cil7cmV0dXJuISFiZVsiYy0iK3dyKyItIit1cl19LEZlPWZ1bmN0aW9uKHdyLHVyKXtiZVsiYy0iK3dyKyItIit1cl09ITB9LHdlPTAsYm49MCx6ZT1mdW5jdGlvbigpe2JuKyssYm4+PVMmJihibj0wLHdlKyspfSxHZT17fSxFbj0wO0VuPEwubGVuZ3RoO0VuKyspe3ZhciBJbj1MW0VuXSxZbj1nLnBvc2l0aW9uKEluKTtpZihZbiYmKFluLnJvdyE9PXZvaWQgMHx8WW4uY29sIT09dm9pZCAwKSl7dmFyIFNuPXtyb3c6WW4ucm93LGNvbDpZbi5jb2x9O2lmKFNuLmNvbD09PXZvaWQgMClmb3IoU24uY29sPTA7aWUoU24ucm93LFNuLmNvbCk7KVNuLmNvbCsrO2Vsc2UgaWYoU24ucm93PT09dm9pZCAwKWZvcihTbi5yb3c9MDtpZShTbi5yb3csU24uY29sKTspU24ucm93Kys7R2VbSW4uaWQoKV09U24sRmUoU24ucm93LFNuLmNvbCl9fXZhciBXbj1mdW5jdGlvbih3cix1cil7dmFyIGVyLHZuO2lmKHdyLmxvY2tlZCgpfHx3ci5pc1BhcmVudCgpKXJldHVybiExO3ZhciBncj1HZVt3ci5pZCgpXTtpZihncillcj1nci5jb2wqRHQrRHQvMitPLngxLHZuPWdyLnJvdypQdCtQdC8yK08ueTE7ZWxzZXtmb3IoO2llKHdlLGJuKTspemUoKTtlcj1ibipEdCtEdC8yK08ueDEsdm49d2UqUHQrUHQvMitPLnkxLEZlKHdlLGJuKSx6ZSgpfXJldHVybnt4OmVyLHk6dm59fTtMLmxheW91dFBvc2l0aW9ucyh0aGlzLGcsV24pfXJldHVybiB0aGlzfTt2YXIgb3R0PXtyZWFkeTpmdW5jdGlvbigpe30sc3RvcDpmdW5jdGlvbigpe319O2Z1bmN0aW9uIFpMKHkpe3RoaXMub3B0aW9ucz1kZSh7fSxvdHQseSl9WkwucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB5PXRoaXMub3B0aW9ucyxnPXkuZWxlcyx4PXRoaXM7cmV0dXJuIHkuY3kseC5lbWl0KCJsYXlvdXRzdGFydCIpLGcubm9kZXMoKS5wb3NpdGlvbnMoZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MH19KSx4Lm9uZSgibGF5b3V0cmVhZHkiLHkucmVhZHkpLHguZW1pdCgibGF5b3V0cmVhZHkiKSx4Lm9uZSgibGF5b3V0c3RvcCIseS5zdG9wKSx4LmVtaXQoImxheW91dHN0b3AiKSx0aGlzfSxaTC5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt2YXIgY3R0PXtwb3NpdGlvbnM6dm9pZCAwLHpvb206dm9pZCAwLHBhbjp2b2lkIDAsZml0OiEwLHBhZGRpbmc6MzAsYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOmZ1bmN0aW9uKGcseCl7cmV0dXJuITB9LHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06ZnVuY3Rpb24oZyx4KXtyZXR1cm4geH19O2Z1bmN0aW9uIEdCKHkpe3RoaXMub3B0aW9ucz1kZSh7fSxjdHQseSl9R0IucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB5PXRoaXMub3B0aW9ucyxnPXkuZWxlcyx4PWcubm9kZXMoKSxUPXl0KHkucG9zaXRpb25zKTtmdW5jdGlvbiBMKE8pe2lmKHkucG9zaXRpb25zPT1udWxsKXJldHVybiBTSyhPLnBvc2l0aW9uKCkpO2lmKFQpcmV0dXJuIHkucG9zaXRpb25zKE8pO3ZhciBQPXkucG9zaXRpb25zW08uX3ByaXZhdGUuZGF0YS5pZF07cmV0dXJuIFA/P251bGx9cmV0dXJuIHgubGF5b3V0UG9zaXRpb25zKHRoaXMseSxmdW5jdGlvbihPLFApe3ZhciAkPUwoTyk7cmV0dXJuIE8ubG9ja2VkKCl8fCQ9PW51bGw/ITE6JH0pLHRoaXN9O3ZhciB1dHQ9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24oZyx4KXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihnLHgpe3JldHVybiB4fX07ZnVuY3Rpb24gVUIoeSl7dGhpcy5vcHRpb25zPWRlKHt9LHV0dCx5KX1VQi5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5vcHRpb25zLGc9eS5jeSx4PXkuZWxlcyxUPXpkKHkuYm91bmRpbmdCb3g/eS5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6Zy53aWR0aCgpLGg6Zy5oZWlnaHQoKX0pLEw9ZnVuY3Rpb24oUCwkKXtyZXR1cm57eDpULngxK01hdGgucm91bmQoTWF0aC5yYW5kb20oKSpULncpLHk6VC55MStNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqVC5oKX19O3JldHVybiB4Lm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMseSxMKSx0aGlzfTt2YXIgbHR0PVt7bmFtZToiYnJlYWR0aGZpcnN0IixpbXBsOmpCfSx7bmFtZToiY2lyY2xlIixpbXBsOnBDfSx7bmFtZToiY29uY2VudHJpYyIsaW1wbDokQn0se25hbWU6ImNvc2UiLGltcGw6YkN9LHtuYW1lOiJncmlkIixpbXBsOlZCfSx7bmFtZToibnVsbCIsaW1wbDpaTH0se25hbWU6InByZXNldCIsaW1wbDpHQn0se25hbWU6InJhbmRvbSIsaW1wbDpVQn1dO2Z1bmN0aW9uIFdCKHkpe3RoaXMub3B0aW9ucz15LHRoaXMubm90aWZpY2F0aW9ucz0wfXZhciBZQj1mdW5jdGlvbigpe30sS0I9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkEgaGVhZGxlc3MgaW5zdGFuY2UgY2FuIG5vdCByZW5kZXIgaW1hZ2VzIil9O1dCLnByb3RvdHlwZT17cmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlOllCLG5vdGlmeTpmdW5jdGlvbigpe3RoaXMubm90aWZpY2F0aW9ucysrfSxpbml0OllCLGlzSGVhZGxlc3M6ZnVuY3Rpb24oKXtyZXR1cm4hMH0scG5nOktCLGpwZzpLQn07dmFyIEpMPXt9O0pMLmFycm93U2hhcGVXaWR0aD0uMyxKTC5yZWdpc3RlckFycm93U2hhcGVzPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5hcnJvd1NoYXBlcz17fSxnPXRoaXMseD1mdW5jdGlvbihTLFYsWSxydCxvdCxodCxkdCl7dmFyIEx0PW90LngtWS8yLWR0LGt0PW90LngrWS8yK2R0LER0PW90LnktWS8yLWR0LFB0PW90LnkrWS8yK2R0LCR0PUx0PD1TJiZTPD1rdCYmRHQ8PVYmJlY8PVB0O3JldHVybiAkdH0sVD1mdW5jdGlvbihTLFYsWSxydCxvdCl7dmFyIGh0PVMqTWF0aC5jb3MocnQpLVYqTWF0aC5zaW4ocnQpLGR0PVMqTWF0aC5zaW4ocnQpK1YqTWF0aC5jb3MocnQpLEx0PWh0Klksa3Q9ZHQqWSxEdD1MdCtvdC54LFB0PWt0K290Lnk7cmV0dXJue3g6RHQseTpQdH19LEw9ZnVuY3Rpb24oUyxWLFkscnQpe2Zvcih2YXIgb3Q9W10saHQ9MDtodDxTLmxlbmd0aDtodCs9Mil7dmFyIGR0PVNbaHRdLEx0PVNbaHQrMV07b3QucHVzaChUKGR0LEx0LFYsWSxydCkpfXJldHVybiBvdH0sTz1mdW5jdGlvbihTKXtmb3IodmFyIFY9W10sWT0wO1k8Uy5sZW5ndGg7WSsrKXt2YXIgcnQ9U1tZXTtWLnB1c2gocnQueCxydC55KX1yZXR1cm4gVn0sUD1mdW5jdGlvbihTKXtyZXR1cm4gUy5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSpTLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS5wZlZhbHVlKjJ9LCQ9ZnVuY3Rpb24oUyxWKXttdChWKSYmKFY9eVtWXSkseVtTXT1kZSh7bmFtZTpTLHBvaW50czpbLS4xNSwtLjMsLjE1LC0uMywuMTUsLjMsLS4xNSwuM10sY29sbGlkZTpmdW5jdGlvbihydCxvdCxodCxkdCxMdCxrdCl7dmFyIER0PU8oTCh0aGlzLnBvaW50cyxodCsyKmt0LGR0LEx0KSksUHQ9cWQocnQsb3QsRHQpO3JldHVybiBQdH0scm91Z2hDb2xsaWRlOngsZHJhdzpmdW5jdGlvbihydCxvdCxodCxkdCl7dmFyIEx0PUwodGhpcy5wb2ludHMsb3QsaHQsZHQpO2cuYXJyb3dTaGFwZUltcGwoInBvbHlnb24iKShydCxMdCl9LHNwYWNpbmc6ZnVuY3Rpb24ocnQpe3JldHVybiAwfSxnYXA6UH0sVil9OyQoIm5vbmUiLHtjb2xsaWRlOndtLHJvdWdoQ29sbGlkZTp3bSxkcmF3OkVMLHNwYWNpbmc6eGcsZ2FwOnhnfSksJCgidHJpYW5nbGUiLHtwb2ludHM6Wy0uMTUsLS4zLDAsMCwuMTUsLS4zXX0pLCQoImFycm93IiwidHJpYW5nbGUiKSwkKCJ0cmlhbmdsZS1iYWNrY3VydmUiLHtwb2ludHM6eS50cmlhbmdsZS5wb2ludHMsY29udHJvbFBvaW50OlswLC0uMTVdLHJvdWdoQ29sbGlkZTp4LGRyYXc6ZnVuY3Rpb24oUyxWLFkscnQsb3Qpe3ZhciBodD1MKHRoaXMucG9pbnRzLFYsWSxydCksZHQ9dGhpcy5jb250cm9sUG9pbnQsTHQ9VChkdFswXSxkdFsxXSxWLFkscnQpO2cuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShTLGh0LEx0KX0sZ2FwOmZ1bmN0aW9uKFMpe3JldHVybiBQKFMpKi44fX0pLCQoInRyaWFuZ2xlLXRlZSIse3BvaW50czpbMCwwLC4xNSwtLjMsLS4xNSwtLjMsMCwwXSxwb2ludHNUZWU6Wy0uMTUsLS40LC0uMTUsLS41LC4xNSwtLjUsLjE1LC0uNF0sY29sbGlkZTpmdW5jdGlvbihTLFYsWSxydCxvdCxodCxkdCl7dmFyIEx0PU8oTCh0aGlzLnBvaW50cyxZKzIqZHQscnQsb3QpKSxrdD1PKEwodGhpcy5wb2ludHNUZWUsWSsyKmR0LHJ0LG90KSksRHQ9cWQoUyxWLEx0KXx8cWQoUyxWLGt0KTtyZXR1cm4gRHR9LGRyYXc6ZnVuY3Rpb24oUyxWLFkscnQsb3Qpe3ZhciBodD1MKHRoaXMucG9pbnRzLFYsWSxydCksZHQ9TCh0aGlzLnBvaW50c1RlZSxWLFkscnQpO2cuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShTLGh0LGR0KX19KSwkKCJjaXJjbGUtdHJpYW5nbGUiLHtyYWRpdXM6LjE1LHBvaW50c1RyOlswLC0uMTUsLjE1LC0uNDUsLS4xNSwtLjQ1LDAsLS4xNV0sY29sbGlkZTpmdW5jdGlvbihTLFYsWSxydCxvdCxodCxkdCl7dmFyIEx0PW90LGt0PU1hdGgucG93KEx0LngtUywyKStNYXRoLnBvdyhMdC55LVYsMik8PU1hdGgucG93KChZKzIqZHQpKnRoaXMucmFkaXVzLDIpLER0PU8oTCh0aGlzLnBvaW50cyxZKzIqZHQscnQsb3QpKTtyZXR1cm4gcWQoUyxWLER0KXx8a3R9LGRyYXc6ZnVuY3Rpb24oUyxWLFkscnQsb3Qpe3ZhciBodD1MKHRoaXMucG9pbnRzVHIsVixZLHJ0KTtnLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoUyxodCxydC54LHJ0LnksdGhpcy5yYWRpdXMqVil9LHNwYWNpbmc6ZnVuY3Rpb24oUyl7cmV0dXJuIGcuZ2V0QXJyb3dXaWR0aChTLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLFMucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlKSp0aGlzLnJhZGl1c319KSwkKCJ0cmlhbmdsZS1jcm9zcyIse3BvaW50czpbMCwwLC4xNSwtLjMsLS4xNSwtLjMsMCwwXSxiYXNlQ3Jvc3NMaW5lUHRzOlstLjE1LC0uNCwtLjE1LC0uNCwuMTUsLS40LC4xNSwtLjRdLGNyb3NzTGluZVB0czpmdW5jdGlvbihTLFYpe3ZhciBZPXRoaXMuYmFzZUNyb3NzTGluZVB0cy5zbGljZSgpLHJ0PVYvUyxvdD0zLGh0PTU7cmV0dXJuIFlbb3RdPVlbb3RdLXJ0LFlbaHRdPVlbaHRdLXJ0LFl9LGNvbGxpZGU6ZnVuY3Rpb24oUyxWLFkscnQsb3QsaHQsZHQpe3ZhciBMdD1PKEwodGhpcy5wb2ludHMsWSsyKmR0LHJ0LG90KSksa3Q9TyhMKHRoaXMuY3Jvc3NMaW5lUHRzKFksaHQpLFkrMipkdCxydCxvdCkpLER0PXFkKFMsVixMdCl8fHFkKFMsVixrdCk7cmV0dXJuIER0fSxkcmF3OmZ1bmN0aW9uKFMsVixZLHJ0LG90KXt2YXIgaHQ9TCh0aGlzLnBvaW50cyxWLFkscnQpLGR0PUwodGhpcy5jcm9zc0xpbmVQdHMoVixvdCksVixZLHJ0KTtnLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoUyxodCxkdCl9fSksJCgidmVlIix7cG9pbnRzOlstLjE1LC0uMywwLDAsLjE1LC0uMywwLC0uMTVdLGdhcDpmdW5jdGlvbihTKXtyZXR1cm4gUChTKSouNTI1fX0pLCQoImNpcmNsZSIse3JhZGl1czouMTUsY29sbGlkZTpmdW5jdGlvbihTLFYsWSxydCxvdCxodCxkdCl7dmFyIEx0PW90LGt0PU1hdGgucG93KEx0LngtUywyKStNYXRoLnBvdyhMdC55LVYsMik8PU1hdGgucG93KChZKzIqZHQpKnRoaXMucmFkaXVzLDIpO3JldHVybiBrdH0sZHJhdzpmdW5jdGlvbihTLFYsWSxydCxvdCl7Zy5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKFMscnQueCxydC55LHRoaXMucmFkaXVzKlYpfSxzcGFjaW5nOmZ1bmN0aW9uKFMpe3JldHVybiBnLmdldEFycm93V2lkdGgoUy5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxTLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSkqdGhpcy5yYWRpdXN9fSksJCgidGVlIix7cG9pbnRzOlstLjE1LDAsLS4xNSwtLjEsLjE1LC0uMSwuMTUsMF0sc3BhY2luZzpmdW5jdGlvbihTKXtyZXR1cm4gMX0sZ2FwOmZ1bmN0aW9uKFMpe3JldHVybiAxfX0pLCQoInNxdWFyZSIse3BvaW50czpbLS4xNSwwLC4xNSwwLC4xNSwtLjMsLS4xNSwtLjNdfSksJCgiZGlhbW9uZCIse3BvaW50czpbLS4xNSwtLjE1LDAsLS4zLC4xNSwtLjE1LDAsMF0sZ2FwOmZ1bmN0aW9uKFMpe3JldHVybiBTLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlKlMucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlfX0pLCQoImNoZXZyb24iLHtwb2ludHM6WzAsMCwtLjE1LC0uMTUsLS4xLC0uMiwwLC0uMSwuMSwtLjIsLjE1LC0uMTVdLGdhcDpmdW5jdGlvbihTKXtyZXR1cm4gLjk1KlMucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUqUy5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWV9fSl9O3ZhciBEMz17fTtEMy5wcm9qZWN0SW50b1ZpZXdwb3J0PWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcy5jeSxUPXRoaXMuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLEw9VFswXSxPPVRbMV0sUD1UWzRdLCQ9eC5wYW4oKSxxPXguem9vbSgpLFM9KCh5LUwpL1AtJC54KS9xLFY9KChnLU8pL1AtJC55KS9xO3JldHVybltTLFZdfSxEMy5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzPWZ1bmN0aW9uKCl7aWYodGhpcy5jb250YWluZXJCQilyZXR1cm4gdGhpcy5jb250YWluZXJCQjt2YXIgeT10aGlzLmNvbnRhaW5lcixnPXkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkseD1SLmdldENvbXB1dGVkU3R5bGUoeSksVD1mdW5jdGlvbihrdCl7cmV0dXJuIHBhcnNlRmxvYXQoeC5nZXRQcm9wZXJ0eVZhbHVlKGt0KSl9LEw9e2xlZnQ6VCgicGFkZGluZy1sZWZ0IikscmlnaHQ6VCgicGFkZGluZy1yaWdodCIpLHRvcDpUKCJwYWRkaW5nLXRvcCIpLGJvdHRvbTpUKCJwYWRkaW5nLWJvdHRvbSIpfSxPPXtsZWZ0OlQoImJvcmRlci1sZWZ0LXdpZHRoIikscmlnaHQ6VCgiYm9yZGVyLXJpZ2h0LXdpZHRoIiksdG9wOlQoImJvcmRlci10b3Atd2lkdGgiKSxib3R0b206VCgiYm9yZGVyLWJvdHRvbS13aWR0aCIpfSxQPXkuY2xpZW50V2lkdGgsJD15LmNsaWVudEhlaWdodCxxPUwubGVmdCtMLnJpZ2h0LFM9TC50b3ArTC5ib3R0b20sVj1PLmxlZnQrTy5yaWdodCxZPWcud2lkdGgvKFArVikscnQ9UC1xLG90PSQtUyxodD1nLmxlZnQrTC5sZWZ0K08ubGVmdCxkdD1nLnRvcCtMLnRvcCtPLnRvcDtyZXR1cm4gdGhpcy5jb250YWluZXJCQj1baHQsZHQscnQsb3QsWV19LEQzLmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZT1mdW5jdGlvbigpe3RoaXMuY29udGFpbmVyQkI9bnVsbH0sRDMuZmluZE5lYXJlc3RFbGVtZW50PWZ1bmN0aW9uKHksZyx4LFQpe3JldHVybiB0aGlzLmZpbmROZWFyZXN0RWxlbWVudHMoeSxnLHgsVClbMF19LEQzLmZpbmROZWFyZXN0RWxlbWVudHM9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9dGhpcyxPPXRoaXMsUD1PLmdldENhY2hlZFpTb3J0ZWRFbGVzKCksJD1bXSxxPU8uY3kuem9vbSgpLFM9Ty5jeS5oYXNDb21wb3VuZE5vZGVzKCksVj0oVD8yNDo4KS9xLFk9KFQ/ODoyKS9xLHJ0PShUPzg6MikvcSxvdD0xLzAsaHQsZHQ7eCYmKFA9UC5pbnRlcmFjdGl2ZSk7ZnVuY3Rpb24gTHQocXQsbmUpe2lmKHF0LmlzTm9kZSgpKXtpZihkdClyZXR1cm47ZHQ9cXQsJC5wdXNoKHF0KX1pZihxdC5pc0VkZ2UoKSYmKG5lPT1udWxsfHxuZTxvdCkpaWYoaHQpe2lmKGh0LnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpLnZhbHVlPT09cXQucHN0eWxlKCJ6LWNvbXBvdW5kLWRlcHRoIikudmFsdWUmJmh0LnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpLnZhbHVlPT09cXQucHN0eWxlKCJ6LWNvbXBvdW5kLWRlcHRoIikudmFsdWUpe2Zvcih2YXIgR3Q9MDtHdDwkLmxlbmd0aDtHdCsrKWlmKCRbR3RdLmlzRWRnZSgpKXskW0d0XT1xdCxodD1xdCxvdD1uZT8/b3Q7YnJlYWt9fX1lbHNlICQucHVzaChxdCksaHQ9cXQsb3Q9bmU/P290fWZ1bmN0aW9uIGt0KHF0KXt2YXIgbmU9cXQub3V0ZXJXaWR0aCgpKzIqWSxHdD1xdC5vdXRlckhlaWdodCgpKzIqWSxnZT1uZS8yLGJlPUd0LzIsaWU9cXQucG9zaXRpb24oKTtpZihpZS54LWdlPD15JiZ5PD1pZS54K2dlJiZpZS55LWJlPD1nJiZnPD1pZS55K2JlKXt2YXIgRmU9Ty5ub2RlU2hhcGVzW0wuZ2V0Tm9kZVNoYXBlKHF0KV07aWYoRmUuY2hlY2tQb2ludCh5LGcsMCxuZSxHdCxpZS54LGllLnkpKXJldHVybiBMdChxdCwwKSwhMH19ZnVuY3Rpb24gRHQocXQpe3ZhciBuZT1xdC5fcHJpdmF0ZSxHdD1uZS5yc2NyYXRjaCxnZT1xdC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxiZT1xdC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUsaWU9Z2UvMitWLEZlPWllKmllLHdlPWllKjIsRW49bmUuc291cmNlLEluPW5lLnRhcmdldCxibjtpZihHdC5lZGdlVHlwZT09PSJzZWdtZW50cyJ8fEd0LmVkZ2VUeXBlPT09InN0cmFpZ2h0Inx8R3QuZWRnZVR5cGU9PT0iaGF5c3RhY2siKXtmb3IodmFyIHplPUd0LmFsbHB0cyxHZT0wO0dlKzM8emUubGVuZ3RoO0dlKz0yKWlmKCRLKHksZyx6ZVtHZV0semVbR2UrMV0semVbR2UrMl0semVbR2UrM10sd2UpJiZGZT4oYm49R0soeSxnLHplW0dlXSx6ZVtHZSsxXSx6ZVtHZSsyXSx6ZVtHZSszXSkpKXJldHVybiBMdChxdCxibiksITB9ZWxzZSBpZihHdC5lZGdlVHlwZT09PSJiZXppZXIifHxHdC5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fEd0LmVkZ2VUeXBlPT09InNlbGYifHxHdC5lZGdlVHlwZT09PSJjb21wb3VuZCIpe2Zvcih2YXIgemU9R3QuYWxscHRzLEdlPTA7R2UrNTxHdC5hbGxwdHMubGVuZ3RoO0dlKz00KWlmKHpLKHksZyx6ZVtHZV0semVbR2UrMV0semVbR2UrMl0semVbR2UrM10semVbR2UrNF0semVbR2UrNV0sd2UpJiZGZT4oYm49VksoeSxnLHplW0dlXSx6ZVtHZSsxXSx6ZVtHZSsyXSx6ZVtHZSszXSx6ZVtHZSs0XSx6ZVtHZSs1XSkpKXJldHVybiBMdChxdCxibiksITB9Zm9yKHZhciBFbj1Fbnx8bmUuc291cmNlLEluPUlufHxuZS50YXJnZXQsWW49TC5nZXRBcnJvd1dpZHRoKGdlLGJlKSxTbj1be25hbWU6InNvdXJjZSIseDpHdC5hcnJvd1N0YXJ0WCx5Okd0LmFycm93U3RhcnRZLGFuZ2xlOkd0LnNyY0Fycm93QW5nbGV9LHtuYW1lOiJ0YXJnZXQiLHg6R3QuYXJyb3dFbmRYLHk6R3QuYXJyb3dFbmRZLGFuZ2xlOkd0LnRndEFycm93QW5nbGV9LHtuYW1lOiJtaWQtc291cmNlIix4Okd0Lm1pZFgseTpHdC5taWRZLGFuZ2xlOkd0Lm1pZHNyY0Fycm93QW5nbGV9LHtuYW1lOiJtaWQtdGFyZ2V0Iix4Okd0Lm1pZFgseTpHdC5taWRZLGFuZ2xlOkd0Lm1pZHRndEFycm93QW5nbGV9XSxHZT0wO0dlPFNuLmxlbmd0aDtHZSsrKXt2YXIgV249U25bR2VdLHJyPU8uYXJyb3dTaGFwZXNbcXQucHN0eWxlKFduLm5hbWUrIi1hcnJvdy1zaGFwZSIpLnZhbHVlXSx3cj1xdC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZTtpZihyci5yb3VnaENvbGxpZGUoeSxnLFluLFduLmFuZ2xlLHt4OlduLngseTpXbi55fSx3cixWKSYmcnIuY29sbGlkZSh5LGcsWW4sV24uYW5nbGUse3g6V24ueCx5OlduLnl9LHdyLFYpKXJldHVybiBMdChxdCksITB9UyYmJC5sZW5ndGg+MCYmKGt0KEVuKSxrdChJbikpfWZ1bmN0aW9uIFB0KHF0LG5lLEd0KXtyZXR1cm4geXAocXQsbmUsR3QpfWZ1bmN0aW9uICR0KHF0LG5lKXt2YXIgR3Q9cXQuX3ByaXZhdGUsZ2U9cnQsYmU7bmU/YmU9bmUrIi0iOmJlPSIiLHF0LmJvdW5kaW5nQm94KCk7dmFyIGllPUd0LmxhYmVsQm91bmRzW25lfHwibWFpbiJdLEZlPXF0LnBzdHlsZShiZSsibGFiZWwiKS52YWx1ZSx3ZT1xdC5wc3R5bGUoInRleHQtZXZlbnRzIikuc3RyVmFsdWU9PT0ieWVzIjtpZighKCF3ZXx8IUZlKSl7dmFyIGJuPVB0KEd0LnJzY3JhdGNoLCJsYWJlbFgiLG5lKSx6ZT1QdChHdC5yc2NyYXRjaCwibGFiZWxZIixuZSksR2U9UHQoR3QucnNjcmF0Y2gsImxhYmVsQW5nbGUiLG5lKSxFbj1xdC5wc3R5bGUoYmUrInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLEluPXF0LnBzdHlsZShiZSsidGV4dC1tYXJnaW4teSIpLnBmVmFsdWUsWW49aWUueDEtZ2UtRW4sU249aWUueDIrZ2UtRW4sV249aWUueTEtZ2UtSW4scnI9aWUueTIrZ2UtSW47aWYoR2Upe3ZhciB3cj1NYXRoLmNvcyhHZSksdXI9TWF0aC5zaW4oR2UpLGVyPWZ1bmN0aW9uKEVhLENpKXtyZXR1cm4gRWE9RWEtYm4sQ2k9Q2ktemUse3g6RWEqd3ItQ2kqdXIrYm4seTpFYSp1citDaSp3cit6ZX19LHZuPWVyKFluLFduKSxncj1lcihZbixyciksZnI9ZXIoU24sV24pLEpyPWVyKFNuLHJyKSx2aT1bdm4ueCtFbix2bi55K0luLGZyLngrRW4sZnIueStJbixKci54K0VuLEpyLnkrSW4sZ3IueCtFbixnci55K0luXTtpZihxZCh5LGcsdmkpKXJldHVybiBMdChxdCksITB9ZWxzZSBpZihRNShpZSx5LGcpKXJldHVybiBMdChxdCksITB9fWZvcih2YXIgWnQ9UC5sZW5ndGgtMTtadD49MDtadC0tKXt2YXIgWXQ9UFtadF07WXQuaXNOb2RlKCk/a3QoWXQpfHwkdChZdCk6RHQoWXQpfHwkdChZdCl8fCR0KFl0LCJzb3VyY2UiKXx8JHQoWXQsInRhcmdldCIpfXJldHVybiAkfSxEMy5nZXRBbGxJbkJveD1mdW5jdGlvbih5LGcseCxUKXt2YXIgTD10aGlzLmdldENhY2hlZFpTb3J0ZWRFbGVzKCkuaW50ZXJhY3RpdmUsTz1bXSxQPU1hdGgubWluKHkseCksJD1NYXRoLm1heCh5LHgpLHE9TWF0aC5taW4oZyxUKSxTPU1hdGgubWF4KGcsVCk7eT1QLHg9JCxnPXEsVD1TO2Zvcih2YXIgVj16ZCh7eDE6eSx5MTpnLHgyOngseTI6VH0pLFk9MDtZPEwubGVuZ3RoO1krKyl7dmFyIHJ0PUxbWV07aWYocnQuaXNOb2RlKCkpe3ZhciBvdD1ydCxodD1vdC5ib3VuZGluZ0JveCh7aW5jbHVkZU5vZGVzOiEwLGluY2x1ZGVFZGdlczohMSxpbmNsdWRlTGFiZWxzOiExfSk7QUwoVixodCkmJiFoTihodCxWKSYmTy5wdXNoKG90KX1lbHNle3ZhciBkdD1ydCxMdD1kdC5fcHJpdmF0ZSxrdD1MdC5yc2NyYXRjaDtpZihrdC5zdGFydFghPW51bGwmJmt0LnN0YXJ0WSE9bnVsbCYmIVE1KFYsa3Quc3RhcnRYLGt0LnN0YXJ0WSl8fGt0LmVuZFghPW51bGwmJmt0LmVuZFkhPW51bGwmJiFRNShWLGt0LmVuZFgsa3QuZW5kWSkpY29udGludWU7aWYoa3QuZWRnZVR5cGU9PT0iYmV6aWVyInx8a3QuZWRnZVR5cGU9PT0ibXVsdGliZXppZXIifHxrdC5lZGdlVHlwZT09PSJzZWxmInx8a3QuZWRnZVR5cGU9PT0iY29tcG91bmQifHxrdC5lZGdlVHlwZT09PSJzZWdtZW50cyJ8fGt0LmVkZ2VUeXBlPT09ImhheXN0YWNrIil7Zm9yKHZhciBEdD1MdC5yc3R5bGUuYmV6aWVyUHRzfHxMdC5yc3R5bGUubGluZVB0c3x8THQucnN0eWxlLmhheXN0YWNrUHRzLFB0PSEwLCR0PTA7JHQ8RHQubGVuZ3RoOyR0KyspaWYoIWpLKFYsRHRbJHRdKSl7UHQ9ITE7YnJlYWt9UHQmJk8ucHVzaChkdCl9ZWxzZShrdC5lZGdlVHlwZT09PSJoYXlzdGFjayJ8fGt0LmVkZ2VUeXBlPT09InN0cmFpZ2h0IikmJk8ucHVzaChkdCl9fXJldHVybiBPfTt2YXIgdkM9e307dkMuY2FsY3VsYXRlQXJyb3dBbmdsZXM9ZnVuY3Rpb24oeSl7dmFyIGc9eS5fcHJpdmF0ZS5yc2NyYXRjaCx4PWcuZWRnZVR5cGU9PT0iaGF5c3RhY2siLFQ9Zy5lZGdlVHlwZT09PSJiZXppZXIiLEw9Zy5lZGdlVHlwZT09PSJtdWx0aWJlemllciIsTz1nLmVkZ2VUeXBlPT09InNlZ21lbnRzIixQPWcuZWRnZVR5cGU9PT0iY29tcG91bmQiLCQ9Zy5lZGdlVHlwZT09PSJzZWxmIixxLFMsVixZLHJ0LG90LGt0LER0O2lmKHg/KFY9Zy5oYXlzdGFja1B0c1swXSxZPWcuaGF5c3RhY2tQdHNbMV0scnQ9Zy5oYXlzdGFja1B0c1syXSxvdD1nLmhheXN0YWNrUHRzWzNdKTooVj1nLmFycm93U3RhcnRYLFk9Zy5hcnJvd1N0YXJ0WSxydD1nLmFycm93RW5kWCxvdD1nLmFycm93RW5kWSksa3Q9Zy5taWRYLER0PWcubWlkWSxPKXE9Vi1nLnNlZ3B0c1swXSxTPVktZy5zZWdwdHNbMV07ZWxzZSBpZihMfHxQfHwkfHxUKXt2YXIgaHQ9Zy5hbGxwdHMsZHQ9b2YoaHRbMF0saHRbMl0saHRbNF0sLjEpLEx0PW9mKGh0WzFdLGh0WzNdLGh0WzVdLC4xKTtxPVYtZHQsUz1ZLUx0fWVsc2UgcT1WLWt0LFM9WS1EdDtnLnNyY0Fycm93QW5nbGU9QlQocSxTKTt2YXIga3Q9Zy5taWRYLER0PWcubWlkWTtpZih4JiYoa3Q9KFYrcnQpLzIsRHQ9KFkrb3QpLzIpLHE9cnQtVixTPW90LVksTyl7dmFyIGh0PWcuYWxscHRzO2lmKGh0Lmxlbmd0aC8yJTI9PT0wKXt2YXIgUHQ9aHQubGVuZ3RoLzIsJHQ9UHQtMjtxPWh0W1B0XS1odFskdF0sUz1odFtQdCsxXS1odFskdCsxXX1lbHNle3ZhciBQdD1odC5sZW5ndGgvMi0xLCR0PVB0LTIsWnQ9UHQrMjtxPWh0W1B0XS1odFskdF0sUz1odFtQdCsxXS1odFskdCsxXX19ZWxzZSBpZihMfHxQfHwkKXt2YXIgaHQ9Zy5hbGxwdHMsWXQ9Zy5jdHJscHRzLHF0LG5lLEd0LGdlO2lmKFl0Lmxlbmd0aC8yJTI9PT0wKXt2YXIgYmU9aHQubGVuZ3RoLzItMSxpZT1iZSsyLEZlPWllKzI7cXQ9b2YoaHRbYmVdLGh0W2llXSxodFtGZV0sMCksbmU9b2YoaHRbYmUrMV0saHRbaWUrMV0saHRbRmUrMV0sMCksR3Q9b2YoaHRbYmVdLGh0W2llXSxodFtGZV0sMWUtNCksZ2U9b2YoaHRbYmUrMV0saHRbaWUrMV0saHRbRmUrMV0sMWUtNCl9ZWxzZXt2YXIgaWU9aHQubGVuZ3RoLzItMSxiZT1pZS0yLEZlPWllKzI7cXQ9b2YoaHRbYmVdLGh0W2llXSxodFtGZV0sLjQ5OTkpLG5lPW9mKGh0W2JlKzFdLGh0W2llKzFdLGh0W0ZlKzFdLC40OTk5KSxHdD1vZihodFtiZV0saHRbaWVdLGh0W0ZlXSwuNSksZ2U9b2YoaHRbYmUrMV0saHRbaWUrMV0saHRbRmUrMV0sLjUpfXE9R3QtcXQsUz1nZS1uZX1pZihnLm1pZHRndEFycm93QW5nbGU9QlQocSxTKSxnLm1pZERpc3BYPXEsZy5taWREaXNwWT1TLHEqPS0xLFMqPS0xLE8pe3ZhciBodD1nLmFsbHB0cztpZihodC5sZW5ndGgvMiUyIT09MCl7dmFyIFB0PWh0Lmxlbmd0aC8yLTEsWnQ9UHQrMjtxPS0oaHRbWnRdLWh0W1B0XSksUz0tKGh0W1p0KzFdLWh0W1B0KzFdKX19aWYoZy5taWRzcmNBcnJvd0FuZ2xlPUJUKHEsUyksTylxPXJ0LWcuc2VncHRzW2cuc2VncHRzLmxlbmd0aC0yXSxTPW90LWcuc2VncHRzW2cuc2VncHRzLmxlbmd0aC0xXTtlbHNlIGlmKEx8fFB8fCR8fFQpe3ZhciBodD1nLmFsbHB0cyx3ZT1odC5sZW5ndGgsZHQ9b2YoaHRbd2UtNl0saHRbd2UtNF0saHRbd2UtMl0sLjkpLEx0PW9mKGh0W3dlLTVdLGh0W3dlLTNdLGh0W3dlLTFdLC45KTtxPXJ0LWR0LFM9b3QtTHR9ZWxzZSBxPXJ0LWt0LFM9b3QtRHQ7Zy50Z3RBcnJvd0FuZ2xlPUJUKHEsUyl9LHZDLmdldEFycm93V2lkdGg9dkMuZ2V0QXJyb3dIZWlnaHQ9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLmFycm93V2lkdGhDYWNoZT10aGlzLmFycm93V2lkdGhDYWNoZXx8e30sVD14W3krIiwgIitnXTtyZXR1cm4gVHx8KFQ9TWF0aC5tYXgoTWF0aC5wb3coeSoxMy4zNywuOSksMjkpKmcseFt5KyIsICIrZ109VCxUKX07dmFyIG9kPXt9O29kLmZpbmRIYXlzdGFja1BvaW50cz1mdW5jdGlvbih5KXtmb3IodmFyIGc9MDtnPHkubGVuZ3RoO2crKyl7dmFyIHg9eVtnXSxUPXguX3ByaXZhdGUsTD1ULnJzY3JhdGNoO2lmKCFMLmhheXN0YWNrKXt2YXIgTz1NYXRoLnJhbmRvbSgpKjIqTWF0aC5QSTtMLnNvdXJjZT17eDpNYXRoLmNvcyhPKSx5Ok1hdGguc2luKE8pfSxPPU1hdGgucmFuZG9tKCkqMipNYXRoLlBJLEwudGFyZ2V0PXt4Ok1hdGguY29zKE8pLHk6TWF0aC5zaW4oTyl9fXZhciBQPVQuc291cmNlLCQ9VC50YXJnZXQscT1QLnBvc2l0aW9uKCksUz0kLnBvc2l0aW9uKCksVj1QLndpZHRoKCksWT0kLndpZHRoKCkscnQ9UC5oZWlnaHQoKSxvdD0kLmhlaWdodCgpLGh0PXgucHN0eWxlKCJoYXlzdGFjay1yYWRpdXMiKS52YWx1ZSxkdD1odC8yO0wuaGF5c3RhY2tQdHM9TC5hbGxwdHM9W0wuc291cmNlLngqVipkdCtxLngsTC5zb3VyY2UueSpydCpkdCtxLnksTC50YXJnZXQueCpZKmR0K1MueCxMLnRhcmdldC55Km90KmR0K1MueV0sTC5taWRYPShMLmFsbHB0c1swXStMLmFsbHB0c1syXSkvMixMLm1pZFk9KEwuYWxscHRzWzFdK0wuYWxscHRzWzNdKS8yLEwuZWRnZVR5cGU9ImhheXN0YWNrIixMLmhheXN0YWNrPSEwLHRoaXMuc3RvcmVFZGdlUHJvamVjdGlvbnMoeCksdGhpcy5jYWxjdWxhdGVBcnJvd0FuZ2xlcyh4KSx0aGlzLnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnMoeCksdGhpcy5jYWxjdWxhdGVMYWJlbEFuZ2xlcyh4KX19LG9kLmZpbmRTZWdtZW50c1BvaW50cz1mdW5jdGlvbih5LGcpe3ZhciB4PXkuX3ByaXZhdGUucnNjcmF0Y2gsVD1nLnBvc1B0cyxMPWcuaW50ZXJzZWN0aW9uUHRzLE89Zy52ZWN0b3JOb3JtSW52ZXJzZSxQPXkucHN0eWxlKCJlZGdlLWRpc3RhbmNlcyIpLnZhbHVlLCQ9eS5wc3R5bGUoInNlZ21lbnQtd2VpZ2h0cyIpLHE9eS5wc3R5bGUoInNlZ21lbnQtZGlzdGFuY2VzIiksUz1NYXRoLm1pbigkLnBmVmFsdWUubGVuZ3RoLHEucGZWYWx1ZS5sZW5ndGgpO3guZWRnZVR5cGU9InNlZ21lbnRzIix4LnNlZ3B0cz1bXTtmb3IodmFyIFY9MDtWPFM7VisrKXt2YXIgWT0kLnBmVmFsdWVbVl0scnQ9cS5wZlZhbHVlW1ZdLG90PTEtWSxodD1ZLGR0PVA9PT0ibm9kZS1wb3NpdGlvbiI/VDpMLEx0PXt4OmR0LngxKm90K2R0LngyKmh0LHk6ZHQueTEqb3QrZHQueTIqaHR9O3guc2VncHRzLnB1c2goTHQueCtPLngqcnQsTHQueStPLnkqcnQpfX0sb2QuZmluZExvb3BQb2ludHM9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9eS5fcHJpdmF0ZS5yc2NyYXRjaCxPPWcuZGlyQ291bnRzLFA9Zy5zcmNQb3MsJD15LnBzdHlsZSgiY29udHJvbC1wb2ludC1kaXN0YW5jZXMiKSxxPSQ/JC5wZlZhbHVlWzBdOnZvaWQgMCxTPXkucHN0eWxlKCJsb29wLWRpcmVjdGlvbiIpLnBmVmFsdWUsVj15LnBzdHlsZSgibG9vcC1zd2VlcCIpLnBmVmFsdWUsWT15LnBzdHlsZSgiY29udHJvbC1wb2ludC1zdGVwLXNpemUiKS5wZlZhbHVlO0wuZWRnZVR5cGU9InNlbGYiO3ZhciBydD14LG90PVk7VCYmKHJ0PTAsb3Q9cSk7dmFyIGh0PVMtTWF0aC5QSS8yLGR0PWh0LVYvMixMdD1odCtWLzIsa3Q9UysiXyIrVjtydD1PW2t0XT09PXZvaWQgMD9PW2t0XT0wOisrT1trdF0sTC5jdHJscHRzPVtQLngrTWF0aC5jb3MoZHQpKjEuNCpvdCoocnQvMysxKSxQLnkrTWF0aC5zaW4oZHQpKjEuNCpvdCoocnQvMysxKSxQLngrTWF0aC5jb3MoTHQpKjEuNCpvdCoocnQvMysxKSxQLnkrTWF0aC5zaW4oTHQpKjEuNCpvdCoocnQvMysxKV19LG9kLmZpbmRDb21wb3VuZExvb3BQb2ludHM9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9eS5fcHJpdmF0ZS5yc2NyYXRjaDtMLmVkZ2VUeXBlPSJjb21wb3VuZCI7dmFyIE89Zy5zcmNQb3MsUD1nLnRndFBvcywkPWcuc3JjVyxxPWcuc3JjSCxTPWcudGd0VyxWPWcudGd0SCxZPXkucHN0eWxlKCJjb250cm9sLXBvaW50LXN0ZXAtc2l6ZSIpLnBmVmFsdWUscnQ9eS5wc3R5bGUoImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIiksb3Q9cnQ/cnQucGZWYWx1ZVswXTp2b2lkIDAsaHQ9eCxkdD1ZO1QmJihodD0wLGR0PW90KTt2YXIgTHQ9NTAsa3Q9e3g6Ty54LSQvMix5Ok8ueS1xLzJ9LER0PXt4OlAueC1TLzIseTpQLnktVi8yfSxQdD17eDpNYXRoLm1pbihrdC54LER0LngpLHk6TWF0aC5taW4oa3QueSxEdC55KX0sJHQ9LjUsWnQ9TWF0aC5tYXgoJHQsTWF0aC5sb2coJCouMDEpKSxZdD1NYXRoLm1heCgkdCxNYXRoLmxvZyhTKi4wMSkpO0wuY3RybHB0cz1bUHQueCxQdC55LSgxK01hdGgucG93KEx0LDEuMTIpLzEwMCkqZHQqKGh0LzMrMSkqWnQsUHQueC0oMStNYXRoLnBvdyhMdCwxLjEyKS8xMDApKmR0KihodC8zKzEpKll0LFB0LnldfSxvZC5maW5kU3RyYWlnaHRFZGdlUG9pbnRzPWZ1bmN0aW9uKHkpe3kuX3ByaXZhdGUucnNjcmF0Y2guZWRnZVR5cGU9InN0cmFpZ2h0In0sb2QuZmluZEJlemllclBvaW50cz1mdW5jdGlvbih5LGcseCxULEwpe3ZhciBPPXkuX3ByaXZhdGUucnNjcmF0Y2gsUD1nLnZlY3Rvck5vcm1JbnZlcnNlLCQ9Zy5wb3NQdHMscT1nLmludGVyc2VjdGlvblB0cyxTPXkucHN0eWxlKCJlZGdlLWRpc3RhbmNlcyIpLnZhbHVlLFY9eS5wc3R5bGUoImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIikucGZWYWx1ZSxZPXkucHN0eWxlKCJjb250cm9sLXBvaW50LWRpc3RhbmNlcyIpLHJ0PXkucHN0eWxlKCJjb250cm9sLXBvaW50LXdlaWdodHMiKSxvdD1ZJiZydD9NYXRoLm1pbihZLnZhbHVlLmxlbmd0aCxydC52YWx1ZS5sZW5ndGgpOjEsaHQ9WT9ZLnBmVmFsdWVbMF06dm9pZCAwLGR0PXJ0LnZhbHVlWzBdLEx0PVQ7Ty5lZGdlVHlwZT1MdD8ibXVsdGliZXppZXIiOiJiZXppZXIiLE8uY3RybHB0cz1bXTtmb3IodmFyIGt0PTA7a3Q8b3Q7a3QrKyl7dmFyIER0PSguNS1nLmVsZXMubGVuZ3RoLzIreCkqViooTD8tMToxKSxQdD12b2lkIDAsJHQ9dU4oRHQpO0x0JiYoaHQ9WT9ZLnBmVmFsdWVba3RdOlYsZHQ9cnQudmFsdWVba3RdKSxUP1B0PWh0OlB0PWh0IT09dm9pZCAwPyR0Kmh0OnZvaWQgMDt2YXIgWnQ9UHQhPT12b2lkIDA/UHQ6RHQsWXQ9MS1kdCxxdD1kdCxuZT1TPT09Im5vZGUtcG9zaXRpb24iPyQ6cSxHdD17eDpuZS54MSpZdCtuZS54MipxdCx5Om5lLnkxKll0K25lLnkyKnF0fTtPLmN0cmxwdHMucHVzaChHdC54K1AueCpadCxHdC55K1AueSpadCl9fSxvZC5maW5kVGF4aVBvaW50cz1mdW5jdGlvbih5LGcpe3ZhciB4PXkuX3ByaXZhdGUucnNjcmF0Y2g7eC5lZGdlVHlwZT0ic2VnbWVudHMiO3ZhciBUPSJ2ZXJ0aWNhbCIsTD0iaG9yaXpvbnRhbCIsTz0ibGVmdHdhcmQiLFA9InJpZ2h0d2FyZCIsJD0iZG93bndhcmQiLHE9InVwd2FyZCIsUz0iYXV0byIsVj1nLnBvc1B0cyxZPWcuc3JjVyxydD1nLnNyY0gsb3Q9Zy50Z3RXLGh0PWcudGd0SCxkdD15LnBzdHlsZSgiZWRnZS1kaXN0YW5jZXMiKS52YWx1ZSxMdD1kdCE9PSJub2RlLXBvc2l0aW9uIixrdD15LnBzdHlsZSgidGF4aS1kaXJlY3Rpb24iKS52YWx1ZSxEdD1rdCxQdD15LnBzdHlsZSgidGF4aS10dXJuIiksJHQ9UHQudW5pdHM9PT0iJSIsWnQ9UHQucGZWYWx1ZSxZdD1adDwwLHF0PXkucHN0eWxlKCJ0YXhpLXR1cm4tbWluLWRpc3RhbmNlIikucGZWYWx1ZSxuZT1MdD8oWStvdCkvMjowLEd0PUx0PyhydCtodCkvMjowLGdlPVYueDItVi54MSxiZT1WLnkyLVYueTEsaWU9ZnVuY3Rpb24oWWksRm8pe3JldHVybiBZaT4wP01hdGgubWF4KFlpLUZvLDApOk1hdGgubWluKFlpK0ZvLDApfSxGZT1pZShnZSxuZSksd2U9aWUoYmUsR3QpLGJuPSExO0R0PT09Uz9rdD1NYXRoLmFicyhGZSk+TWF0aC5hYnMod2UpP0w6VDpEdD09PXF8fER0PT09JD8oa3Q9VCxibj0hMCk6KER0PT09T3x8RHQ9PT1QKSYmKGt0PUwsYm49ITApO3ZhciB6ZT1rdD09PVQsR2U9emU/d2U6RmUsRW49emU/YmU6Z2UsSW49dU4oRW4pLFluPSExOyEoYm4mJigkdHx8WXQpKSYmKER0PT09JCYmRW48MHx8RHQ9PT1xJiZFbj4wfHxEdD09PU8mJkVuPjB8fER0PT09UCYmRW48MCkmJihJbio9LTEsR2U9SW4qTWF0aC5hYnMoR2UpLFluPSEwKTt2YXIgU247aWYoJHQpe3ZhciBXbj1adDwwPzErWnQ6WnQ7U249V24qR2V9ZWxzZXt2YXIgcnI9WnQ8MD9HZTowO1NuPXJyK1p0KklufXZhciB3cj1mdW5jdGlvbihZaSl7cmV0dXJuIE1hdGguYWJzKFlpKTxxdHx8TWF0aC5hYnMoWWkpPj1NYXRoLmFicyhHZSl9LHVyPXdyKFNuKSxlcj13cihNYXRoLmFicyhHZSktTWF0aC5hYnMoU24pKSx2bj11cnx8ZXI7aWYodm4mJiFZbilpZih6ZSl7dmFyIGdyPU1hdGguYWJzKEVuKTw9cnQvMixmcj1NYXRoLmFicyhnZSk8PW90LzI7aWYoZ3Ipe3ZhciBKcj0oVi54MStWLngyKS8yLHZpPVYueTEsWHM9Vi55Mjt4LnNlZ3B0cz1bSnIsdmksSnIsWHNdfWVsc2UgaWYoZnIpe3ZhciBFYT0oVi55MStWLnkyKS8yLENpPVYueDEsaGk9Vi54Mjt4LnNlZ3B0cz1bQ2ksRWEsaGksRWFdfWVsc2UgeC5zZWdwdHM9W1YueDEsVi55Ml19ZWxzZXt2YXIgZ3M9TWF0aC5hYnMoRW4pPD1ZLzIscWk9TWF0aC5hYnMoYmUpPD1odC8yO2lmKGdzKXt2YXIgU2k9KFYueTErVi55MikvMixVaT1WLngxLFZhPVYueDI7eC5zZWdwdHM9W1VpLFNpLFZhLFNpXX1lbHNlIGlmKHFpKXt2YXIgUXM9KFYueDErVi54MikvMixxcz1WLnkxLFRyPVYueTI7eC5zZWdwdHM9W1FzLHFzLFFzLFRyXX1lbHNlIHguc2VncHRzPVtWLngyLFYueTFdfWVsc2UgaWYoemUpe3ZhciBRdD1WLnkxK1NuKyhMdD9ydC8yKkluOjApLGpuPVYueDEsU3I9Vi54Mjt4LnNlZ3B0cz1bam4sUXQsU3IsUXRdfWVsc2V7dmFyIGlyPVYueDErU24rKEx0P1kvMipJbjowKSxzcj1WLnkxLElhPVYueTI7eC5zZWdwdHM9W2lyLHNyLGlyLElhXX19LG9kLnRyeVRvQ29ycmVjdEludmFsaWRQb2ludHM9ZnVuY3Rpb24oeSxnKXt2YXIgeD15Ll9wcml2YXRlLnJzY3JhdGNoO2lmKHguZWRnZVR5cGU9PT0iYmV6aWVyIil7dmFyIFQ9Zy5zcmNQb3MsTD1nLnRndFBvcyxPPWcuc3JjVyxQPWcuc3JjSCwkPWcudGd0VyxxPWcudGd0SCxTPWcuc3JjU2hhcGUsVj1nLnRndFNoYXBlLFk9IVgoeC5zdGFydFgpfHwhWCh4LnN0YXJ0WSkscnQ9IVgoeC5hcnJvd1N0YXJ0WCl8fCFYKHguYXJyb3dTdGFydFkpLG90PSFYKHguZW5kWCl8fCFYKHguZW5kWSksaHQ9IVgoeC5hcnJvd0VuZFgpfHwhWCh4LmFycm93RW5kWSksZHQ9MyxMdD10aGlzLmdldEFycm93V2lkdGgoeS5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSx5LnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSkqdGhpcy5hcnJvd1NoYXBlV2lkdGgsa3Q9ZHQqTHQsRHQ9QzMoe3g6eC5jdHJscHRzWzBdLHk6eC5jdHJscHRzWzFdfSx7eDp4LnN0YXJ0WCx5Onguc3RhcnRZfSksUHQ9RHQ8a3QsJHQ9QzMoe3g6eC5jdHJscHRzWzBdLHk6eC5jdHJscHRzWzFdfSx7eDp4LmVuZFgseTp4LmVuZFl9KSxadD0kdDxrdCxZdD0hMTtpZihZfHxydHx8UHQpe1l0PSEwO3ZhciBxdD17eDp4LmN0cmxwdHNbMF0tVC54LHk6eC5jdHJscHRzWzFdLVQueX0sbmU9TWF0aC5zcXJ0KHF0LngqcXQueCtxdC55KnF0LnkpLEd0PXt4OnF0LngvbmUseTpxdC55L25lfSxnZT1NYXRoLm1heChPLFApLGJlPXt4OnguY3RybHB0c1swXStHdC54KjIqZ2UseTp4LmN0cmxwdHNbMV0rR3QueSoyKmdlfSxpZT1TLmludGVyc2VjdExpbmUoVC54LFQueSxPLFAsYmUueCxiZS55LDApO1B0Pyh4LmN0cmxwdHNbMF09eC5jdHJscHRzWzBdK0d0LngqKGt0LUR0KSx4LmN0cmxwdHNbMV09eC5jdHJscHRzWzFdK0d0LnkqKGt0LUR0KSk6KHguY3RybHB0c1swXT1pZVswXStHdC54Kmt0LHguY3RybHB0c1sxXT1pZVsxXStHdC55Kmt0KX1pZihvdHx8aHR8fFp0KXtZdD0hMDt2YXIgRmU9e3g6eC5jdHJscHRzWzBdLUwueCx5OnguY3RybHB0c1sxXS1MLnl9LHdlPU1hdGguc3FydChGZS54KkZlLngrRmUueSpGZS55KSxibj17eDpGZS54L3dlLHk6RmUueS93ZX0semU9TWF0aC5tYXgoTyxQKSxHZT17eDp4LmN0cmxwdHNbMF0rYm4ueCoyKnplLHk6eC5jdHJscHRzWzFdK2JuLnkqMip6ZX0sRW49Vi5pbnRlcnNlY3RMaW5lKEwueCxMLnksJCxxLEdlLngsR2UueSwwKTtadD8oeC5jdHJscHRzWzBdPXguY3RybHB0c1swXStibi54KihrdC0kdCkseC5jdHJscHRzWzFdPXguY3RybHB0c1sxXStibi55KihrdC0kdCkpOih4LmN0cmxwdHNbMF09RW5bMF0rYm4ueCprdCx4LmN0cmxwdHNbMV09RW5bMV0rYm4ueSprdCl9WXQmJnRoaXMuZmluZEVuZHBvaW50cyh5KX19LG9kLnN0b3JlQWxscHRzPWZ1bmN0aW9uKHkpe3ZhciBnPXkuX3ByaXZhdGUucnNjcmF0Y2g7aWYoZy5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fGcuZWRnZVR5cGU9PT0iYmV6aWVyInx8Zy5lZGdlVHlwZT09PSJzZWxmInx8Zy5lZGdlVHlwZT09PSJjb21wb3VuZCIpe2cuYWxscHRzPVtdLGcuYWxscHRzLnB1c2goZy5zdGFydFgsZy5zdGFydFkpO2Zvcih2YXIgeD0wO3grMTxnLmN0cmxwdHMubGVuZ3RoO3grPTIpZy5hbGxwdHMucHVzaChnLmN0cmxwdHNbeF0sZy5jdHJscHRzW3grMV0pLHgrMzxnLmN0cmxwdHMubGVuZ3RoJiZnLmFsbHB0cy5wdXNoKChnLmN0cmxwdHNbeF0rZy5jdHJscHRzW3grMl0pLzIsKGcuY3RybHB0c1t4KzFdK2cuY3RybHB0c1t4KzNdKS8yKTtnLmFsbHB0cy5wdXNoKGcuZW5kWCxnLmVuZFkpO3ZhciBULEw7Zy5jdHJscHRzLmxlbmd0aC8yJTI9PT0wPyhUPWcuYWxscHRzLmxlbmd0aC8yLTEsZy5taWRYPWcuYWxscHRzW1RdLGcubWlkWT1nLmFsbHB0c1tUKzFdKTooVD1nLmFsbHB0cy5sZW5ndGgvMi0zLEw9LjUsZy5taWRYPW9mKGcuYWxscHRzW1RdLGcuYWxscHRzW1QrMl0sZy5hbGxwdHNbVCs0XSxMKSxnLm1pZFk9b2YoZy5hbGxwdHNbVCsxXSxnLmFsbHB0c1tUKzNdLGcuYWxscHRzW1QrNV0sTCkpfWVsc2UgaWYoZy5lZGdlVHlwZT09PSJzdHJhaWdodCIpZy5hbGxwdHM9W2cuc3RhcnRYLGcuc3RhcnRZLGcuZW5kWCxnLmVuZFldLGcubWlkWD0oZy5zdGFydFgrZy5lbmRYK2cuYXJyb3dTdGFydFgrZy5hcnJvd0VuZFgpLzQsZy5taWRZPShnLnN0YXJ0WStnLmVuZFkrZy5hcnJvd1N0YXJ0WStnLmFycm93RW5kWSkvNDtlbHNlIGlmKGcuZWRnZVR5cGU9PT0ic2VnbWVudHMiKWlmKGcuYWxscHRzPVtdLGcuYWxscHRzLnB1c2goZy5zdGFydFgsZy5zdGFydFkpLGcuYWxscHRzLnB1c2guYXBwbHkoZy5hbGxwdHMsZy5zZWdwdHMpLGcuYWxscHRzLnB1c2goZy5lbmRYLGcuZW5kWSksZy5zZWdwdHMubGVuZ3RoJTQ9PT0wKXt2YXIgTz1nLnNlZ3B0cy5sZW5ndGgvMixQPU8tMjtnLm1pZFg9KGcuc2VncHRzW1BdK2cuc2VncHRzW09dKS8yLGcubWlkWT0oZy5zZWdwdHNbUCsxXStnLnNlZ3B0c1tPKzFdKS8yfWVsc2V7dmFyICQ9Zy5zZWdwdHMubGVuZ3RoLzItMTtnLm1pZFg9Zy5zZWdwdHNbJF0sZy5taWRZPWcuc2VncHRzWyQrMV19fSxvZC5jaGVja0ZvckludmFsaWRFZGdlV2FybmluZz1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLnJzY3JhdGNoO2cubm9kZXNPdmVybGFwfHxYKGcuc3RhcnRYKSYmWChnLnN0YXJ0WSkmJlgoZy5lbmRYKSYmWChnLmVuZFkpP2cubG9nZ2VkRXJyPSExOmcubG9nZ2VkRXJyfHwoZy5sb2dnZWRFcnI9ITAsU2MoIkVkZ2UgYCIreS5pZCgpKyJgIGhhcyBpbnZhbGlkIGVuZHBvaW50cyBhbmQgc28gaXQgaXMgaW1wb3NzaWJsZSB0byBkcmF3LiAgQWRqdXN0IHlvdXIgZWRnZSBzdHlsZSAoZS5nLiBjb250cm9sIHBvaW50cykgYWNjb3JkaW5nbHkgb3IgdXNlIGFuIGFsdGVybmF0aXZlIGVkZ2UgdHlwZS4gIFRoaXMgaXMgZXhwZWN0ZWQgYmVoYXZpb3VyIHdoZW4gdGhlIHNvdXJjZSBub2RlIGFuZCB0aGUgdGFyZ2V0IG5vZGUgb3ZlcmxhcC4iKSl9LG9kLmZpbmRFZGdlQ29udHJvbFBvaW50cz1mdW5jdGlvbih5KXt2YXIgZz10aGlzO2lmKCEoIXl8fHkubGVuZ3RoPT09MCkpe2Zvcih2YXIgeD10aGlzLFQ9eC5jeSxMPVQuaGFzQ29tcG91bmROb2RlcygpLE89e21hcDpuZXcgR2IsZ2V0OmZ1bmN0aW9uKHF0KXt2YXIgbmU9dGhpcy5tYXAuZ2V0KHF0WzBdKTtyZXR1cm4gbmUhPW51bGw/bmUuZ2V0KHF0WzFdKTpudWxsfSxzZXQ6ZnVuY3Rpb24ocXQsbmUpe3ZhciBHdD10aGlzLm1hcC5nZXQocXRbMF0pO0d0PT1udWxsJiYoR3Q9bmV3IEdiLHRoaXMubWFwLnNldChxdFswXSxHdCkpLEd0LnNldChxdFsxXSxuZSl9fSxQPVtdLCQ9W10scT0wO3E8eS5sZW5ndGg7cSsrKXt2YXIgUz15W3FdLFY9Uy5fcHJpdmF0ZSxZPVMucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnZhbHVlO2lmKCEoUy5yZW1vdmVkKCl8fCFTLnRha2VzVXBTcGFjZSgpKSl7aWYoWT09PSJoYXlzdGFjayIpeyQucHVzaChTKTtjb250aW51ZX12YXIgcnQ9WT09PSJ1bmJ1bmRsZWQtYmV6aWVyInx8WT09PSJzZWdtZW50cyJ8fFk9PT0ic3RyYWlnaHQifHxZPT09InN0cmFpZ2h0LXRyaWFuZ2xlInx8WT09PSJ0YXhpIixvdD1ZPT09InVuYnVuZGxlZC1iZXppZXIifHxZPT09ImJlemllciIsaHQ9Vi5zb3VyY2UsZHQ9Vi50YXJnZXQsTHQ9aHQucG9vbEluZGV4KCksa3Q9ZHQucG9vbEluZGV4KCksRHQ9W0x0LGt0XS5zb3J0KCksUHQ9Ty5nZXQoRHQpO1B0PT1udWxsJiYoUHQ9e2VsZXM6W119LE8uc2V0KER0LFB0KSxQLnB1c2goRHQpKSxQdC5lbGVzLnB1c2goUykscnQmJihQdC5oYXNVbmJ1bmRsZWQ9ITApLG90JiYoUHQuaGFzQmV6aWVyPSEwKX19Zm9yKHZhciAkdD1mdW5jdGlvbihxdCl7dmFyIG5lPVBbcXRdLEd0PU8uZ2V0KG5lKSxnZT12b2lkIDA7aWYoIUd0Lmhhc1VuYnVuZGxlZCl7dmFyIGJlPUd0LmVsZXNbMF0ucGFyYWxsZWxFZGdlcygpLmZpbHRlcihmdW5jdGlvbihUcil7cmV0dXJuIFRyLmlzQnVuZGxlZEJlemllcigpfSk7VEwoR3QuZWxlcyksYmUuZm9yRWFjaChmdW5jdGlvbihUcil7cmV0dXJuIEd0LmVsZXMucHVzaChUcil9KSxHdC5lbGVzLnNvcnQoZnVuY3Rpb24oVHIsUXQpe3JldHVybiBUci5wb29sSW5kZXgoKS1RdC5wb29sSW5kZXgoKX0pfXZhciBpZT1HdC5lbGVzWzBdLEZlPWllLnNvdXJjZSgpLHdlPWllLnRhcmdldCgpO2lmKEZlLnBvb2xJbmRleCgpPndlLnBvb2xJbmRleCgpKXt2YXIgYm49RmU7RmU9d2Usd2U9Ym59dmFyIHplPUd0LnNyY1Bvcz1GZS5wb3NpdGlvbigpLEdlPUd0LnRndFBvcz13ZS5wb3NpdGlvbigpLEVuPUd0LnNyY1c9RmUub3V0ZXJXaWR0aCgpLEluPUd0LnNyY0g9RmUub3V0ZXJIZWlnaHQoKSxZbj1HdC50Z3RXPXdlLm91dGVyV2lkdGgoKSxTbj1HdC50Z3RIPXdlLm91dGVySGVpZ2h0KCksV249R3Quc3JjU2hhcGU9eC5ub2RlU2hhcGVzW2cuZ2V0Tm9kZVNoYXBlKEZlKV0scnI9R3QudGd0U2hhcGU9eC5ub2RlU2hhcGVzW2cuZ2V0Tm9kZVNoYXBlKHdlKV07R3QuZGlyQ291bnRzPXtub3J0aDowLHdlc3Q6MCxzb3V0aDowLGVhc3Q6MCxub3J0aHdlc3Q6MCxzb3V0aHdlc3Q6MCxub3J0aGVhc3Q6MCxzb3V0aGVhc3Q6MH07Zm9yKHZhciB3cj0wO3dyPEd0LmVsZXMubGVuZ3RoO3dyKyspe3ZhciB1cj1HdC5lbGVzW3dyXSxlcj11clswXS5fcHJpdmF0ZS5yc2NyYXRjaCx2bj11ci5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWUsZ3I9dm49PT0idW5idW5kbGVkLWJlemllciJ8fHZuPT09InNlZ21lbnRzInx8dm49PT0idGF4aSIsZnI9IUZlLnNhbWUodXIuc291cmNlKCkpO2lmKCFHdC5jYWxjdWxhdGVkSW50ZXJzZWN0aW9uJiZGZSE9PXdlJiYoR3QuaGFzQmV6aWVyfHxHdC5oYXNVbmJ1bmRsZWQpKXtHdC5jYWxjdWxhdGVkSW50ZXJzZWN0aW9uPSEwO3ZhciBKcj1Xbi5pbnRlcnNlY3RMaW5lKHplLngsemUueSxFbixJbixHZS54LEdlLnksMCksdmk9R3Quc3JjSW50bj1KcixYcz1yci5pbnRlcnNlY3RMaW5lKEdlLngsR2UueSxZbixTbix6ZS54LHplLnksMCksRWE9R3QudGd0SW50bj1YcyxDaT1HdC5pbnRlcnNlY3Rpb25QdHM9e3gxOkpyWzBdLHgyOlhzWzBdLHkxOkpyWzFdLHkyOlhzWzFdfSxoaT1HdC5wb3NQdHM9e3gxOnplLngseDI6R2UueCx5MTp6ZS55LHkyOkdlLnl9LGdzPVhzWzFdLUpyWzFdLHFpPVhzWzBdLUpyWzBdLFNpPU1hdGguc3FydChxaSpxaStncypncyksVWk9R3QudmVjdG9yPXt4OnFpLHk6Z3N9LFZhPUd0LnZlY3Rvck5vcm09e3g6VWkueC9TaSx5OlVpLnkvU2l9LFFzPXt4Oi1WYS55LHk6VmEueH07R3Qubm9kZXNPdmVybGFwPSFYKFNpKXx8cnIuY2hlY2tQb2ludChKclswXSxKclsxXSwwLFluLFNuLEdlLngsR2UueSl8fFduLmNoZWNrUG9pbnQoWHNbMF0sWHNbMV0sMCxFbixJbix6ZS54LHplLnkpLEd0LnZlY3Rvck5vcm1JbnZlcnNlPVFzLGdlPXtub2Rlc092ZXJsYXA6R3Qubm9kZXNPdmVybGFwLGRpckNvdW50czpHdC5kaXJDb3VudHMsY2FsY3VsYXRlZEludGVyc2VjdGlvbjohMCxoYXNCZXppZXI6R3QuaGFzQmV6aWVyLGhhc1VuYnVuZGxlZDpHdC5oYXNVbmJ1bmRsZWQsZWxlczpHdC5lbGVzLHNyY1BvczpHZSx0Z3RQb3M6emUsc3JjVzpZbixzcmNIOlNuLHRndFc6RW4sdGd0SDpJbixzcmNJbnRuOkVhLHRndEludG46dmksc3JjU2hhcGU6cnIsdGd0U2hhcGU6V24scG9zUHRzOnt4MTpoaS54Mix5MTpoaS55Mix4MjpoaS54MSx5MjpoaS55MX0saW50ZXJzZWN0aW9uUHRzOnt4MTpDaS54Mix5MTpDaS55Mix4MjpDaS54MSx5MjpDaS55MX0sdmVjdG9yOnt4Oi1VaS54LHk6LVVpLnl9LHZlY3Rvck5vcm06e3g6LVZhLngseTotVmEueX0sdmVjdG9yTm9ybUludmVyc2U6e3g6LVFzLngseTotUXMueX19fXZhciBxcz1mcj9nZTpHdDtlci5ub2Rlc092ZXJsYXA9cXMubm9kZXNPdmVybGFwLGVyLnNyY0ludG49cXMuc3JjSW50bixlci50Z3RJbnRuPXFzLnRndEludG4sTCYmKEZlLmlzUGFyZW50KCl8fEZlLmlzQ2hpbGQoKXx8d2UuaXNQYXJlbnQoKXx8d2UuaXNDaGlsZCgpKSYmKEZlLnBhcmVudHMoKS5hbnlTYW1lKHdlKXx8d2UucGFyZW50cygpLmFueVNhbWUoRmUpfHxGZS5zYW1lKHdlKSYmRmUuaXNQYXJlbnQoKSk/Zy5maW5kQ29tcG91bmRMb29wUG9pbnRzKHVyLHFzLHdyLGdyKTpGZT09PXdlP2cuZmluZExvb3BQb2ludHModXIscXMsd3IsZ3IpOnZuPT09InNlZ21lbnRzIj9nLmZpbmRTZWdtZW50c1BvaW50cyh1cixxcyk6dm49PT0idGF4aSI/Zy5maW5kVGF4aVBvaW50cyh1cixxcyk6dm49PT0ic3RyYWlnaHQifHwhZ3ImJkd0LmVsZXMubGVuZ3RoJTI9PT0xJiZ3cj09PU1hdGguZmxvb3IoR3QuZWxlcy5sZW5ndGgvMik/Zy5maW5kU3RyYWlnaHRFZGdlUG9pbnRzKHVyKTpnLmZpbmRCZXppZXJQb2ludHModXIscXMsd3IsZ3IsZnIpLGcuZmluZEVuZHBvaW50cyh1ciksZy50cnlUb0NvcnJlY3RJbnZhbGlkUG9pbnRzKHVyLHFzKSxnLmNoZWNrRm9ySW52YWxpZEVkZ2VXYXJuaW5nKHVyKSxnLnN0b3JlQWxscHRzKHVyKSxnLnN0b3JlRWRnZVByb2plY3Rpb25zKHVyKSxnLmNhbGN1bGF0ZUFycm93QW5nbGVzKHVyKSxnLnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnModXIpLGcuY2FsY3VsYXRlTGFiZWxBbmdsZXModXIpfX0sWnQ9MDtadDxQLmxlbmd0aDtadCsrKSR0KFp0KTt0aGlzLmZpbmRIYXlzdGFja1BvaW50cygkKX19O2Z1bmN0aW9uIFhCKHkpe3ZhciBnPVtdO2lmKHkhPW51bGwpe2Zvcih2YXIgeD0wO3g8eS5sZW5ndGg7eCs9Mil7dmFyIFQ9eVt4XSxMPXlbeCsxXTtnLnB1c2goe3g6VCx5Okx9KX1yZXR1cm4gZ319b2QuZ2V0U2VnbWVudFBvaW50cz1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLnJzY3JhdGNoLHg9Zy5lZGdlVHlwZTtpZih4PT09InNlZ21lbnRzIilyZXR1cm4gdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoeSksWEIoZy5zZWdwdHMpfSxvZC5nZXRDb250cm9sUG9pbnRzPWZ1bmN0aW9uKHkpe3ZhciBnPXlbMF0uX3ByaXZhdGUucnNjcmF0Y2gseD1nLmVkZ2VUeXBlO2lmKHg9PT0iYmV6aWVyInx8eD09PSJtdWx0aWJlemllciJ8fHg9PT0ic2VsZiJ8fHg9PT0iY29tcG91bmQiKXJldHVybiB0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh5KSxYQihnLmN0cmxwdHMpfSxvZC5nZXRFZGdlTWlkcG9pbnQ9ZnVuY3Rpb24oeSl7dmFyIGc9eVswXS5fcHJpdmF0ZS5yc2NyYXRjaDtyZXR1cm4gdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoeSkse3g6Zy5taWRYLHk6Zy5taWRZfX07dmFyIEdrPXt9O0drLm1hbnVhbEVuZHB0VG9QeD1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMsVD15LnBvc2l0aW9uKCksTD15Lm91dGVyV2lkdGgoKSxPPXkub3V0ZXJIZWlnaHQoKTtpZihnLnZhbHVlLmxlbmd0aD09PTIpe3ZhciBQPVtnLnBmVmFsdWVbMF0sZy5wZlZhbHVlWzFdXTtyZXR1cm4gZy51bml0c1swXT09PSIlIiYmKFBbMF09UFswXSpMKSxnLnVuaXRzWzFdPT09IiUiJiYoUFsxXT1QWzFdKk8pLFBbMF0rPVQueCxQWzFdKz1ULnksUH1lbHNle3ZhciAkPWcucGZWYWx1ZVswXTskPS1NYXRoLlBJLzIrJDt2YXIgcT0yKk1hdGgubWF4KEwsTyksUz1bVC54K01hdGguY29zKCQpKnEsVC55K01hdGguc2luKCQpKnFdO3JldHVybiB4Lm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUoeSldLmludGVyc2VjdExpbmUoVC54LFQueSxMLE8sU1swXSxTWzFdLDApfX0sR2suZmluZEVuZHBvaW50cz1mdW5jdGlvbih5KXt2YXIgZz10aGlzLHgsVD15LnNvdXJjZSgpWzBdLEw9eS50YXJnZXQoKVswXSxPPVQucG9zaXRpb24oKSxQPUwucG9zaXRpb24oKSwkPXkucHN0eWxlKCJ0YXJnZXQtYXJyb3ctc2hhcGUiKS52YWx1ZSxxPXkucHN0eWxlKCJzb3VyY2UtYXJyb3ctc2hhcGUiKS52YWx1ZSxTPXkucHN0eWxlKCJ0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlIikucGZWYWx1ZSxWPXkucHN0eWxlKCJzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlIikucGZWYWx1ZSxZPXkucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnZhbHVlLHJ0PXkuX3ByaXZhdGUucnNjcmF0Y2gsb3Q9cnQuZWRnZVR5cGUsaHQ9WT09PSJ0YXhpIixkdD1vdD09PSJzZWxmInx8b3Q9PT0iY29tcG91bmQiLEx0PW90PT09ImJlemllciJ8fG90PT09Im11bHRpYmV6aWVyInx8ZHQsa3Q9b3QhPT0iYmV6aWVyIixEdD1vdD09PSJzdHJhaWdodCJ8fG90PT09InNlZ21lbnRzIixQdD1vdD09PSJzZWdtZW50cyIsJHQ9THR8fGt0fHxEdCxadD1kdHx8aHQsWXQ9eS5wc3R5bGUoInNvdXJjZS1lbmRwb2ludCIpLHF0PVp0PyJvdXRzaWRlLXRvLW5vZGUiOll0LnZhbHVlLG5lPXkucHN0eWxlKCJ0YXJnZXQtZW5kcG9pbnQiKSxHdD1adD8ib3V0c2lkZS10by1ub2RlIjpuZS52YWx1ZTtydC5zcmNNYW5FbmRwdD1ZdCxydC50Z3RNYW5FbmRwdD1uZTt2YXIgZ2UsYmUsaWUsRmU7aWYoTHQpe3ZhciB3ZT1bcnQuY3RybHB0c1swXSxydC5jdHJscHRzWzFdXSxibj1rdD9bcnQuY3RybHB0c1tydC5jdHJscHRzLmxlbmd0aC0yXSxydC5jdHJscHRzW3J0LmN0cmxwdHMubGVuZ3RoLTFdXTp3ZTtnZT1ibixiZT13ZX1lbHNlIGlmKER0KXt2YXIgemU9UHQ/cnQuc2VncHRzLnNsaWNlKDAsMik6W1AueCxQLnldLEdlPVB0P3J0LnNlZ3B0cy5zbGljZShydC5zZWdwdHMubGVuZ3RoLTIpOltPLngsTy55XTtnZT1HZSxiZT16ZX1pZihHdD09PSJpbnNpZGUtdG8tbm9kZSIpeD1bUC54LFAueV07ZWxzZSBpZihuZS51bml0cyl4PXRoaXMubWFudWFsRW5kcHRUb1B4KEwsbmUpO2Vsc2UgaWYoR3Q9PT0ib3V0c2lkZS10by1saW5lIil4PXJ0LnRndEludG47ZWxzZSBpZihHdD09PSJvdXRzaWRlLXRvLW5vZGUifHxHdD09PSJvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwiP2llPWdlOihHdD09PSJvdXRzaWRlLXRvLWxpbmUifHxHdD09PSJvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwiKSYmKGllPVtPLngsTy55XSkseD1nLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUoTCldLmludGVyc2VjdExpbmUoUC54LFAueSxMLm91dGVyV2lkdGgoKSxMLm91dGVySGVpZ2h0KCksaWVbMF0saWVbMV0sMCksR3Q9PT0ib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsInx8R3Q9PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIil7dmFyIEVuPUwuX3ByaXZhdGUucnNjcmF0Y2gsSW49RW4ubGFiZWxXaWR0aCxZbj1Fbi5sYWJlbEhlaWdodCxTbj1Fbi5sYWJlbFgsV249RW4ubGFiZWxZLHJyPUluLzIsd3I9WW4vMix1cj1MLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZTt1cj09PSJ0b3AiP1duLT13cjp1cj09PSJib3R0b20iJiYoV24rPXdyKTt2YXIgZXI9TC5wc3R5bGUoInRleHQtaGFsaWduIikudmFsdWU7ZXI9PT0ibGVmdCI/U24tPXJyOmVyPT09InJpZ2h0IiYmKFNuKz1ycik7dmFyIHZuPUFrKGllWzBdLGllWzFdLFtTbi1ycixXbi13cixTbitycixXbi13cixTbitycixXbit3cixTbi1ycixXbit3cl0sUC54LFAueSk7aWYodm4ubGVuZ3RoPjApe3ZhciBncj1PLGZyPV8zKGdyLEs1KHgpKSxKcj1fMyhncixLNSh2bikpLHZpPWZyO2lmKEpyPGZyJiYoeD12bix2aT1Kciksdm4ubGVuZ3RoPjIpe3ZhciBYcz1fMyhncix7eDp2blsyXSx5OnZuWzNdfSk7WHM8dmkmJih4PVt2blsyXSx2blszXV0pfX19dmFyIEVhPWpUKHgsZ2UsZy5hcnJvd1NoYXBlc1skXS5zcGFjaW5nKHkpK1MpLENpPWpUKHgsZ2UsZy5hcnJvd1NoYXBlc1skXS5nYXAoeSkrUyk7aWYocnQuZW5kWD1DaVswXSxydC5lbmRZPUNpWzFdLHJ0LmFycm93RW5kWD1FYVswXSxydC5hcnJvd0VuZFk9RWFbMV0scXQ9PT0iaW5zaWRlLXRvLW5vZGUiKXg9W08ueCxPLnldO2Vsc2UgaWYoWXQudW5pdHMpeD10aGlzLm1hbnVhbEVuZHB0VG9QeChULFl0KTtlbHNlIGlmKHF0PT09Im91dHNpZGUtdG8tbGluZSIpeD1ydC5zcmNJbnRuO2Vsc2UgaWYocXQ9PT0ib3V0c2lkZS10by1ub2RlInx8cXQ9PT0ib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsIj9GZT1iZToocXQ9PT0ib3V0c2lkZS10by1saW5lInx8cXQ9PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIikmJihGZT1bUC54LFAueV0pLHg9Zy5ub2RlU2hhcGVzW3RoaXMuZ2V0Tm9kZVNoYXBlKFQpXS5pbnRlcnNlY3RMaW5lKE8ueCxPLnksVC5vdXRlcldpZHRoKCksVC5vdXRlckhlaWdodCgpLEZlWzBdLEZlWzFdLDApLHF0PT09Im91dHNpZGUtdG8tbm9kZS1vci1sYWJlbCJ8fHF0PT09Im91dHNpZGUtdG8tbGluZS1vci1sYWJlbCIpe3ZhciBoaT1ULl9wcml2YXRlLnJzY3JhdGNoLGdzPWhpLmxhYmVsV2lkdGgscWk9aGkubGFiZWxIZWlnaHQsU2k9aGkubGFiZWxYLFVpPWhpLmxhYmVsWSxWYT1ncy8yLFFzPXFpLzIscXM9VC5wc3R5bGUoInRleHQtdmFsaWduIikudmFsdWU7cXM9PT0idG9wIj9VaS09UXM6cXM9PT0iYm90dG9tIiYmKFVpKz1Rcyk7dmFyIFRyPVQucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnZhbHVlO1RyPT09ImxlZnQiP1NpLT1WYTpUcj09PSJyaWdodCImJihTaSs9VmEpO3ZhciBRdD1BayhGZVswXSxGZVsxXSxbU2ktVmEsVWktUXMsU2krVmEsVWktUXMsU2krVmEsVWkrUXMsU2ktVmEsVWkrUXNdLE8ueCxPLnkpO2lmKFF0Lmxlbmd0aD4wKXt2YXIgam49UCxTcj1fMyhqbixLNSh4KSksaXI9XzMoam4sSzUoUXQpKSxzcj1TcjtpZihpcjxTciYmKHg9W1F0WzBdLFF0WzFdXSxzcj1pciksUXQubGVuZ3RoPjIpe3ZhciBJYT1fMyhqbix7eDpRdFsyXSx5OlF0WzNdfSk7SWE8c3ImJih4PVtRdFsyXSxRdFszXV0pfX19dmFyICRyPWpUKHgsYmUsZy5hcnJvd1NoYXBlc1txXS5zcGFjaW5nKHkpK1YpLFlpPWpUKHgsYmUsZy5hcnJvd1NoYXBlc1txXS5nYXAoeSkrVik7cnQuc3RhcnRYPVlpWzBdLHJ0LnN0YXJ0WT1ZaVsxXSxydC5hcnJvd1N0YXJ0WD0kclswXSxydC5hcnJvd1N0YXJ0WT0kclsxXSwkdCYmKCFYKHJ0LnN0YXJ0WCl8fCFYKHJ0LnN0YXJ0WSl8fCFYKHJ0LmVuZFgpfHwhWChydC5lbmRZKT9ydC5iYWRMaW5lPSEwOnJ0LmJhZExpbmU9ITEpfSxHay5nZXRTb3VyY2VFbmRwb2ludD1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLnJzY3JhdGNoO3N3aXRjaCh0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh5KSxnLmVkZ2VUeXBlKXtjYXNlImhheXN0YWNrIjpyZXR1cm57eDpnLmhheXN0YWNrUHRzWzBdLHk6Zy5oYXlzdGFja1B0c1sxXX07ZGVmYXVsdDpyZXR1cm57eDpnLmFycm93U3RhcnRYLHk6Zy5hcnJvd1N0YXJ0WX19fSxHay5nZXRUYXJnZXRFbmRwb2ludD1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLnJzY3JhdGNoO3N3aXRjaCh0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh5KSxnLmVkZ2VUeXBlKXtjYXNlImhheXN0YWNrIjpyZXR1cm57eDpnLmhheXN0YWNrUHRzWzJdLHk6Zy5oYXlzdGFja1B0c1szXX07ZGVmYXVsdDpyZXR1cm57eDpnLmFycm93RW5kWCx5OmcuYXJyb3dFbmRZfX19O3ZhciB0TT17fTtmdW5jdGlvbiBodHQoeSxnLHgpe2Zvcih2YXIgVD1mdW5jdGlvbihTLFYsWSxydCl7cmV0dXJuIG9mKFMsVixZLHJ0KX0sTD1nLl9wcml2YXRlLE89TC5yc3R5bGUuYmV6aWVyUHRzLFA9MDtQPHkuYmV6aWVyUHJvalBjdHMubGVuZ3RoO1ArKyl7dmFyICQ9eS5iZXppZXJQcm9qUGN0c1tQXTtPLnB1c2goe3g6VCh4WzBdLHhbMl0seFs0XSwkKSx5OlQoeFsxXSx4WzNdLHhbNV0sJCl9KX19dE0uc3RvcmVFZGdlUHJvamVjdGlvbnM9ZnVuY3Rpb24oeSl7dmFyIGc9eS5fcHJpdmF0ZSx4PWcucnNjcmF0Y2gsVD14LmVkZ2VUeXBlO2lmKGcucnN0eWxlLmJlemllclB0cz1udWxsLGcucnN0eWxlLmxpbmVQdHM9bnVsbCxnLnJzdHlsZS5oYXlzdGFja1B0cz1udWxsLFQ9PT0ibXVsdGliZXppZXIifHxUPT09ImJlemllciJ8fFQ9PT0ic2VsZiJ8fFQ9PT0iY29tcG91bmQiKXtnLnJzdHlsZS5iZXppZXJQdHM9W107Zm9yKHZhciBMPTA7TCs1PHguYWxscHRzLmxlbmd0aDtMKz00KWh0dCh0aGlzLHkseC5hbGxwdHMuc2xpY2UoTCxMKzYpKX1lbHNlIGlmKFQ9PT0ic2VnbWVudHMiKWZvcih2YXIgTz1nLnJzdHlsZS5saW5lUHRzPVtdLEw9MDtMKzE8eC5hbGxwdHMubGVuZ3RoO0wrPTIpTy5wdXNoKHt4OnguYWxscHRzW0xdLHk6eC5hbGxwdHNbTCsxXX0pO2Vsc2UgaWYoVD09PSJoYXlzdGFjayIpe3ZhciBQPXguaGF5c3RhY2tQdHM7Zy5yc3R5bGUuaGF5c3RhY2tQdHM9W3t4OlBbMF0seTpQWzFdfSx7eDpQWzJdLHk6UFszXX1dfWcucnN0eWxlLmFycm93V2lkdGg9dGhpcy5nZXRBcnJvd1dpZHRoKHkucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUseS5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUpKnRoaXMuYXJyb3dTaGFwZVdpZHRofSx0TS5yZWNhbGN1bGF0ZUVkZ2VQcm9qZWN0aW9ucz1mdW5jdGlvbih5KXt0aGlzLmZpbmRFZGdlQ29udHJvbFBvaW50cyh5KX07dmFyIFRwPXt9O1RwLnJlY2FsY3VsYXRlTm9kZUxhYmVsUHJvamVjdGlvbj1mdW5jdGlvbih5KXt2YXIgZz15LnBzdHlsZSgibGFiZWwiKS5zdHJWYWx1ZTtpZighWihnKSl7dmFyIHgsVCxMPXkuX3ByaXZhdGUsTz15LndpZHRoKCksUD15LmhlaWdodCgpLCQ9eS5wYWRkaW5nKCkscT15LnBvc2l0aW9uKCksUz15LnBzdHlsZSgidGV4dC1oYWxpZ24iKS5zdHJWYWx1ZSxWPXkucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnN0clZhbHVlLFk9TC5yc2NyYXRjaCxydD1MLnJzdHlsZTtzd2l0Y2goUyl7Y2FzZSJsZWZ0Ijp4PXEueC1PLzItJDticmVhaztjYXNlInJpZ2h0Ijp4PXEueCtPLzIrJDticmVhaztkZWZhdWx0Ong9cS54fXN3aXRjaChWKXtjYXNlInRvcCI6VD1xLnktUC8yLSQ7YnJlYWs7Y2FzZSJib3R0b20iOlQ9cS55K1AvMiskO2JyZWFrO2RlZmF1bHQ6VD1xLnl9WS5sYWJlbFg9eCxZLmxhYmVsWT1ULHJ0LmxhYmVsWD14LHJ0LmxhYmVsWT1ULHRoaXMuY2FsY3VsYXRlTGFiZWxBbmdsZXMoeSksdGhpcy5hcHBseUxhYmVsRGltZW5zaW9ucyh5KX19O3ZhciBRQj1mdW5jdGlvbihnLHgpe3ZhciBUPU1hdGguYXRhbih4L2cpO3JldHVybiBnPT09MCYmVDwwJiYoVD1UKi0xKSxUfSxaQj1mdW5jdGlvbihnLHgpe3ZhciBUPXgueC1nLngsTD14LnktZy55O3JldHVybiBRQihULEwpfSxKQj1mdW5jdGlvbihnLHgsVCxMKXt2YXIgTz1faygwLEwtLjAwMSwxKSxQPV9rKDAsTCsuMDAxLDEpLCQ9WDUoZyx4LFQsTykscT1YNShnLHgsVCxQKTtyZXR1cm4gWkIoJCxxKX07VHAucmVjYWxjdWxhdGVFZGdlTGFiZWxQcm9qZWN0aW9ucz1mdW5jdGlvbih5KXt2YXIgZyx4PXkuX3ByaXZhdGUsVD14LnJzY3JhdGNoLEw9dGhpcyxPPXttaWQ6eS5wc3R5bGUoImxhYmVsIikuc3RyVmFsdWUsc291cmNlOnkucHN0eWxlKCJzb3VyY2UtbGFiZWwiKS5zdHJWYWx1ZSx0YXJnZXQ6eS5wc3R5bGUoInRhcmdldC1sYWJlbCIpLnN0clZhbHVlfTtpZihPLm1pZHx8Ty5zb3VyY2V8fE8udGFyZ2V0KXtnPXt4OlQubWlkWCx5OlQubWlkWX07dmFyIFA9ZnVuY3Rpb24oWSxydCxvdCl7bW0oeC5yc2NyYXRjaCxZLHJ0LG90KSxtbSh4LnJzdHlsZSxZLHJ0LG90KX07UCgibGFiZWxYIixudWxsLGcueCksUCgibGFiZWxZIixudWxsLGcueSk7dmFyICQ9UUIoVC5taWREaXNwWCxULm1pZERpc3BZKTtQKCJsYWJlbEF1dG9BbmdsZSIsbnVsbCwkKTt2YXIgcT1mdW5jdGlvbiBWKCl7aWYoVi5jYWNoZSlyZXR1cm4gVi5jYWNoZTtmb3IodmFyIFk9W10scnQ9MDtydCs1PFQuYWxscHRzLmxlbmd0aDtydCs9NCl7dmFyIG90PXt4OlQuYWxscHRzW3J0XSx5OlQuYWxscHRzW3J0KzFdfSxodD17eDpULmFsbHB0c1tydCsyXSx5OlQuYWxscHRzW3J0KzNdfSxkdD17eDpULmFsbHB0c1tydCs0XSx5OlQuYWxscHRzW3J0KzVdfTtZLnB1c2goe3AwOm90LHAxOmh0LHAyOmR0LHN0YXJ0RGlzdDowLGxlbmd0aDowLHNlZ21lbnRzOltdfSl9dmFyIEx0PXgucnN0eWxlLmJlemllclB0cyxrdD1MLmJlemllclByb2pQY3RzLmxlbmd0aDtmdW5jdGlvbiBEdChxdCxuZSxHdCxnZSxiZSl7dmFyIGllPUMzKG5lLEd0KSxGZT1xdC5zZWdtZW50c1txdC5zZWdtZW50cy5sZW5ndGgtMV0sd2U9e3AwOm5lLHAxOkd0LHQwOmdlLHQxOmJlLHN0YXJ0RGlzdDpGZT9GZS5zdGFydERpc3QrRmUubGVuZ3RoOjAsbGVuZ3RoOmllfTtxdC5zZWdtZW50cy5wdXNoKHdlKSxxdC5sZW5ndGgrPWllfWZvcih2YXIgUHQ9MDtQdDxZLmxlbmd0aDtQdCsrKXt2YXIgJHQ9WVtQdF0sWnQ9WVtQdC0xXTtadCYmKCR0LnN0YXJ0RGlzdD1adC5zdGFydERpc3QrWnQubGVuZ3RoKSxEdCgkdCwkdC5wMCxMdFtQdCprdF0sMCxMLmJlemllclByb2pQY3RzWzBdKTtmb3IodmFyIFl0PTA7WXQ8a3QtMTtZdCsrKUR0KCR0LEx0W1B0Kmt0K1l0XSxMdFtQdCprdCtZdCsxXSxMLmJlemllclByb2pQY3RzW1l0XSxMLmJlemllclByb2pQY3RzW1l0KzFdKTtEdCgkdCxMdFtQdCprdCtrdC0xXSwkdC5wMixMLmJlemllclByb2pQY3RzW2t0LTFdLDEpfXJldHVybiBWLmNhY2hlPVl9LFM9ZnVuY3Rpb24oWSl7dmFyIHJ0LG90PVk9PT0ic291cmNlIjtpZihPW1ldKXt2YXIgaHQ9eS5wc3R5bGUoWSsiLXRleHQtb2Zmc2V0IikucGZWYWx1ZTtzd2l0Y2goVC5lZGdlVHlwZSl7Y2FzZSJzZWxmIjpjYXNlImNvbXBvdW5kIjpjYXNlImJlemllciI6Y2FzZSJtdWx0aWJlemllciI6e2Zvcih2YXIgZHQ9cSgpLEx0LGt0PTAsRHQ9MCxQdD0wO1B0PGR0Lmxlbmd0aDtQdCsrKXtmb3IodmFyICR0PWR0W290P1B0OmR0Lmxlbmd0aC0xLVB0XSxadD0wO1p0PCR0LnNlZ21lbnRzLmxlbmd0aDtadCsrKXt2YXIgWXQ9JHQuc2VnbWVudHNbb3Q/WnQ6JHQuc2VnbWVudHMubGVuZ3RoLTEtWnRdLHF0PVB0PT09ZHQubGVuZ3RoLTEmJlp0PT09JHQuc2VnbWVudHMubGVuZ3RoLTE7aWYoa3Q9RHQsRHQrPVl0Lmxlbmd0aCxEdD49aHR8fHF0KXtMdD17Y3A6JHQsc2VnbWVudDpZdH07YnJlYWt9fWlmKEx0KWJyZWFrfXZhciBuZT1MdC5jcCxHdD1MdC5zZWdtZW50LGdlPShodC1rdCkvR3QubGVuZ3RoLGJlPUd0LnQxLUd0LnQwLGllPW90P0d0LnQwK2JlKmdlOkd0LnQxLWJlKmdlO2llPV9rKDAsaWUsMSksZz1YNShuZS5wMCxuZS5wMSxuZS5wMixpZSkscnQ9SkIobmUucDAsbmUucDEsbmUucDIsaWUpO2JyZWFrfWNhc2Uic3RyYWlnaHQiOmNhc2Uic2VnbWVudHMiOmNhc2UiaGF5c3RhY2siOntmb3IodmFyIEZlPTAsd2UsYm4semUsR2UsRW49VC5hbGxwdHMubGVuZ3RoLEluPTA7SW4rMzxFbiYmKG90Pyh6ZT17eDpULmFsbHB0c1tJbl0seTpULmFsbHB0c1tJbisxXX0sR2U9e3g6VC5hbGxwdHNbSW4rMl0seTpULmFsbHB0c1tJbiszXX0pOih6ZT17eDpULmFsbHB0c1tFbi0yLUluXSx5OlQuYWxscHRzW0VuLTEtSW5dfSxHZT17eDpULmFsbHB0c1tFbi00LUluXSx5OlQuYWxscHRzW0VuLTMtSW5dfSksd2U9QzMoemUsR2UpLGJuPUZlLEZlKz13ZSwhKEZlPj1odCkpO0luKz0yKTt2YXIgWW49aHQtYm4sU249WW4vd2U7U249X2soMCxTbiwxKSxnPVBLKHplLEdlLFNuKSxydD1aQih6ZSxHZSk7YnJlYWt9fVAoImxhYmVsWCIsWSxnLngpLFAoImxhYmVsWSIsWSxnLnkpLFAoImxhYmVsQXV0b0FuZ2xlIixZLHJ0KX19O1MoInNvdXJjZSIpLFMoInRhcmdldCIpLHRoaXMuYXBwbHlMYWJlbERpbWVuc2lvbnMoeSl9fSxUcC5hcHBseUxhYmVsRGltZW5zaW9ucz1mdW5jdGlvbih5KXt0aGlzLmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnMoeSkseS5pc0VkZ2UoKSYmKHRoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyh5LCJzb3VyY2UiKSx0aGlzLmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnMoeSwidGFyZ2V0IikpfSxUcC5hcHBseVByZWZpeGVkTGFiZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS5fcHJpdmF0ZSxUPXRoaXMuZ2V0TGFiZWxUZXh0KHksZyksTD10aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh5LFQpLE89eS5wc3R5bGUoImxpbmUtaGVpZ2h0IikucGZWYWx1ZSxQPXkucHN0eWxlKCJ0ZXh0LXdyYXAiKS5zdHJWYWx1ZSwkPXlwKHgucnNjcmF0Y2gsImxhYmVsV3JhcENhY2hlZExpbmVzIixnKXx8W10scT1QIT09IndyYXAiPzE6TWF0aC5tYXgoJC5sZW5ndGgsMSksUz1MLmhlaWdodC9xLFY9UypPLFk9TC53aWR0aCxydD1MLmhlaWdodCsocS0xKSooTy0xKSpTO21tKHgucnN0eWxlLCJsYWJlbFdpZHRoIixnLFkpLG1tKHgucnNjcmF0Y2gsImxhYmVsV2lkdGgiLGcsWSksbW0oeC5yc3R5bGUsImxhYmVsSGVpZ2h0IixnLHJ0KSxtbSh4LnJzY3JhdGNoLCJsYWJlbEhlaWdodCIsZyxydCksbW0oeC5yc2NyYXRjaCwibGFiZWxMaW5lSGVpZ2h0IixnLFYpfSxUcC5nZXRMYWJlbFRleHQ9ZnVuY3Rpb24oeSxnKXt2YXIgeD15Ll9wcml2YXRlLFQ9Zz9nKyItIjoiIixMPXkucHN0eWxlKFQrImxhYmVsIikuc3RyVmFsdWUsTz15LnBzdHlsZSgidGV4dC10cmFuc2Zvcm0iKS52YWx1ZSxQPWZ1bmN0aW9uKFluLFNuKXtyZXR1cm4gU24/KG1tKHgucnNjcmF0Y2gsWW4sZyxTbiksU24pOnlwKHgucnNjcmF0Y2gsWW4sZyl9O2lmKCFMKXJldHVybiIiO089PSJub25lInx8KE89PSJ1cHBlcmNhc2UiP0w9TC50b1VwcGVyQ2FzZSgpOk89PSJsb3dlcmNhc2UiJiYoTD1MLnRvTG93ZXJDYXNlKCkpKTt2YXIgJD15LnBzdHlsZSgidGV4dC13cmFwIikudmFsdWU7aWYoJD09PSJ3cmFwIil7dmFyIHE9UCgibGFiZWxLZXkiKTtpZihxIT1udWxsJiZQKCJsYWJlbFdyYXBLZXkiKT09PXEpcmV0dXJuIFAoImxhYmVsV3JhcENhY2hlZFRleHQiKTtmb3IodmFyIFM9IuKAiyIsVj1MLnNwbGl0KGAKYCksWT15LnBzdHlsZSgidGV4dC1tYXgtd2lkdGgiKS5wZlZhbHVlLHJ0PXkucHN0eWxlKCJ0ZXh0LW92ZXJmbG93LXdyYXAiKS52YWx1ZSxvdD1ydD09PSJhbnl3aGVyZSIsaHQ9W10sZHQ9L1tcc1x1MjAwYl0rLyxMdD1vdD8iIjoiICIsa3Q9MDtrdDxWLmxlbmd0aDtrdCsrKXt2YXIgRHQ9VltrdF0sUHQ9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeSxEdCksJHQ9UHQud2lkdGg7aWYob3Qpe3ZhciBadD1EdC5zcGxpdCgiIikuam9pbihTKTtEdD1adH1pZigkdD5ZKXtmb3IodmFyIFl0PUR0LnNwbGl0KGR0KSxxdD0iIixuZT0wO25lPFl0Lmxlbmd0aDtuZSsrKXt2YXIgR3Q9WXRbbmVdLGdlPXF0Lmxlbmd0aD09PTA/R3Q6cXQrTHQrR3QsYmU9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeSxnZSksaWU9YmUud2lkdGg7aWU8PVk/cXQrPUd0K0x0OihxdCYmaHQucHVzaChxdCkscXQ9R3QrTHQpfXF0Lm1hdGNoKC9eW1xzXHUyMDBiXSskLyl8fGh0LnB1c2gocXQpfWVsc2UgaHQucHVzaChEdCl9UCgibGFiZWxXcmFwQ2FjaGVkTGluZXMiLGh0KSxMPVAoImxhYmVsV3JhcENhY2hlZFRleHQiLGh0LmpvaW4oYApgKSksUCgibGFiZWxXcmFwS2V5IixxKX1lbHNlIGlmKCQ9PT0iZWxsaXBzaXMiKXt2YXIgRmU9eS5wc3R5bGUoInRleHQtbWF4LXdpZHRoIikucGZWYWx1ZSx3ZT0iIixibj0i4oCmIix6ZT0hMTtpZih0aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh5LEwpLndpZHRoPEZlKXJldHVybiBMO2Zvcih2YXIgR2U9MDtHZTxMLmxlbmd0aDtHZSsrKXt2YXIgRW49dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeSx3ZStMW0dlXStibikud2lkdGg7aWYoRW4+RmUpYnJlYWs7d2UrPUxbR2VdLEdlPT09TC5sZW5ndGgtMSYmKHplPSEwKX1yZXR1cm4gemV8fCh3ZSs9Ym4pLHdlfXJldHVybiBMfSxUcC5nZXRMYWJlbEp1c3RpZmljYXRpb249ZnVuY3Rpb24oeSl7dmFyIGc9eS5wc3R5bGUoInRleHQtanVzdGlmaWNhdGlvbiIpLnN0clZhbHVlLHg9eS5wc3R5bGUoInRleHQtaGFsaWduIikuc3RyVmFsdWU7aWYoZz09PSJhdXRvIilpZih5LmlzTm9kZSgpKXN3aXRjaCh4KXtjYXNlImxlZnQiOnJldHVybiJyaWdodCI7Y2FzZSJyaWdodCI6cmV0dXJuImxlZnQiO2RlZmF1bHQ6cmV0dXJuImNlbnRlciJ9ZWxzZSByZXR1cm4iY2VudGVyIjtlbHNlIHJldHVybiBnfSxUcC5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnM9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLFQ9cmQoZyx5Ll9wcml2YXRlLmxhYmVsRGltc0tleSksTD14LmxhYmVsRGltQ2FjaGV8fCh4LmxhYmVsRGltQ2FjaGU9W10pLE89TFtUXTtpZihPIT1udWxsKXJldHVybiBPO3ZhciBQPTAsJD15LnBzdHlsZSgiZm9udC1zdHlsZSIpLnN0clZhbHVlLHE9eS5wc3R5bGUoImZvbnQtc2l6ZSIpLnBmVmFsdWUsUz15LnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxWPXkucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLFk9dGhpcy5sYWJlbENhbGNDYW52YXMscnQ9dGhpcy5sYWJlbENhbGNDYW52YXNDb250ZXh0O2lmKCFZKXtZPXRoaXMubGFiZWxDYWxjQ2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHJ0PXRoaXMubGFiZWxDYWxjQ2FudmFzQ29udGV4dD1ZLmdldENvbnRleHQoIjJkIik7dmFyIG90PVkuc3R5bGU7b3QucG9zaXRpb249ImFic29sdXRlIixvdC5sZWZ0PSItOTk5OXB4IixvdC50b3A9Ii05OTk5cHgiLG90LnpJbmRleD0iLTEiLG90LnZpc2liaWxpdHk9ImhpZGRlbiIsb3QucG9pbnRlckV2ZW50cz0ibm9uZSJ9cnQuZm9udD0iIi5jb25jYXQoJCwiICIpLmNvbmNhdChWLCIgIikuY29uY2F0KHEsInB4ICIpLmNvbmNhdChTKTtmb3IodmFyIGh0PTAsZHQ9MCxMdD1nLnNwbGl0KGAKYCksa3Q9MDtrdDxMdC5sZW5ndGg7a3QrKyl7dmFyIER0PUx0W2t0XSxQdD1ydC5tZWFzdXJlVGV4dChEdCksJHQ9TWF0aC5jZWlsKFB0LndpZHRoKSxadD1xO2h0PU1hdGgubWF4KCR0LGh0KSxkdCs9WnR9cmV0dXJuIGh0Kz1QLGR0Kz1QLExbVF09e3dpZHRoOmh0LGhlaWdodDpkdH19LFRwLmNhbGN1bGF0ZUxhYmVsQW5nbGU9ZnVuY3Rpb24oeSxnKXt2YXIgeD15Ll9wcml2YXRlLFQ9eC5yc2NyYXRjaCxMPXkuaXNFZGdlKCksTz1nP2crIi0iOiIiLFA9eS5wc3R5bGUoTysidGV4dC1yb3RhdGlvbiIpLCQ9UC5zdHJWYWx1ZTtyZXR1cm4gJD09PSJub25lIj8wOkwmJiQ9PT0iYXV0b3JvdGF0ZSI/VC5sYWJlbEF1dG9BbmdsZTokPT09ImF1dG9yb3RhdGUiPzA6UC5wZlZhbHVlfSxUcC5jYWxjdWxhdGVMYWJlbEFuZ2xlcz1mdW5jdGlvbih5KXt2YXIgZz10aGlzLHg9eS5pc0VkZ2UoKSxUPXkuX3ByaXZhdGUsTD1ULnJzY3JhdGNoO0wubGFiZWxBbmdsZT1nLmNhbGN1bGF0ZUxhYmVsQW5nbGUoeSkseCYmKEwuc291cmNlTGFiZWxBbmdsZT1nLmNhbGN1bGF0ZUxhYmVsQW5nbGUoeSwic291cmNlIiksTC50YXJnZXRMYWJlbEFuZ2xlPWcuY2FsY3VsYXRlTGFiZWxBbmdsZSh5LCJ0YXJnZXQiKSl9O3ZhciBuaD17fSxlTT0yOCx0Uj0hMTtuaC5nZXROb2RlU2hhcGU9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PXkucHN0eWxlKCJzaGFwZSIpLnZhbHVlO2lmKHg9PT0iY3V0cmVjdGFuZ2xlIiYmKHkud2lkdGgoKTxlTXx8eS5oZWlnaHQoKTxlTSkpcmV0dXJuIHRSfHwoU2MoIlRoZSBgY3V0cmVjdGFuZ2xlYCBub2RlIHNoYXBlIGNhbiBub3QgYmUgdXNlZCBhdCBzbWFsbCBzaXplcyBzbyBgcmVjdGFuZ2xlYCBpcyB1c2VkIGluc3RlYWQiKSx0Uj0hMCksInJlY3RhbmdsZSI7aWYoeS5pc1BhcmVudCgpKXJldHVybiB4PT09InJlY3RhbmdsZSJ8fHg9PT0icm91bmRyZWN0YW5nbGUifHx4PT09InJvdW5kLXJlY3RhbmdsZSJ8fHg9PT0iY3V0cmVjdGFuZ2xlInx8eD09PSJjdXQtcmVjdGFuZ2xlInx8eD09PSJiYXJyZWwiP3g6InJlY3RhbmdsZSI7aWYoeD09PSJwb2x5Z29uIil7dmFyIFQ9eS5wc3R5bGUoInNoYXBlLXBvbHlnb24tcG9pbnRzIikudmFsdWU7cmV0dXJuIGcubm9kZVNoYXBlcy5tYWtlUG9seWdvbihUKS5uYW1lfXJldHVybiB4fTt2YXIgVWs9e307VWsucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycz1mdW5jdGlvbigpe3ZhciB5PXRoaXMuY3ksZz15LmNvbGxlY3Rpb24oKSx4PXRoaXMsVD1mdW5jdGlvbihQKXt2YXIgJD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7aWYoZy5tZXJnZShQKSwkKWZvcih2YXIgcT0wO3E8UC5sZW5ndGg7cSsrKXt2YXIgUz1QW3FdLFY9Uy5fcHJpdmF0ZSxZPVYucnN0eWxlO1kuY2xlYW49ITEsWS5jbGVhbkNvbm5lY3RlZD0hMX19O3guYmluZGVyKHkpLm9uKCJib3VuZHMuKiBkaXJ0eS4qIixmdW5jdGlvbihQKXt2YXIgJD1QLnRhcmdldDtUKCQpfSkub24oInN0eWxlLiogYmFja2dyb3VuZC4qIixmdW5jdGlvbihQKXt2YXIgJD1QLnRhcmdldDtUKCQsITEpfSk7dmFyIEw9ZnVuY3Rpb24oUCl7aWYoUCl7dmFyICQ9eC5vblVwZGF0ZUVsZUNhbGNzRm5zO2cuY2xlYW5TdHlsZSgpO2Zvcih2YXIgcT0wO3E8Zy5sZW5ndGg7cSsrKXt2YXIgUz1nW3FdLFY9Uy5fcHJpdmF0ZS5yc3R5bGU7Uy5pc05vZGUoKSYmIVYuY2xlYW5Db25uZWN0ZWQmJihUKFMuY29ubmVjdGVkRWRnZXMoKSksVi5jbGVhbkNvbm5lY3RlZD0hMCl9aWYoJClmb3IodmFyIFk9MDtZPCQubGVuZ3RoO1krKyl7dmFyIHJ0PSRbWV07cnQoUCxnKX14LnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZShnKSxnPXkuY29sbGVjdGlvbigpfX07eC5mbHVzaFJlbmRlcmVkU3R5bGVRdWV1ZT1mdW5jdGlvbigpe0woITApfSx4LmJlZm9yZVJlbmRlcihMLHguYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5lbGVDYWxjcyl9LFVrLm9uVXBkYXRlRWxlQ2FsY3M9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcy5vblVwZGF0ZUVsZUNhbGNzRm5zPXRoaXMub25VcGRhdGVFbGVDYWxjc0Zuc3x8W107Zy5wdXNoKHkpfSxVay5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGU9ZnVuY3Rpb24oeSxnKXt2YXIgeD1mdW5jdGlvbigkdCl7cmV0dXJuICR0Ll9wcml2YXRlLnJzdHlsZS5jbGVhbkNvbm5lY3RlZH0sVD1bXSxMPVtdO2lmKCF0aGlzLmRlc3Ryb3llZCl7Zz09PXZvaWQgMCYmKGc9ITApO2Zvcih2YXIgTz0wO088eS5sZW5ndGg7TysrKXt2YXIgUD15W09dLCQ9UC5fcHJpdmF0ZSxxPSQucnN0eWxlO1AuaXNFZGdlKCkmJigheChQLnNvdXJjZSgpKXx8IXgoUC50YXJnZXQoKSkpJiYocS5jbGVhbj0hMSksIShnJiZxLmNsZWFufHxQLnJlbW92ZWQoKSkmJlAucHN0eWxlKCJkaXNwbGF5IikudmFsdWUhPT0ibm9uZSImJigkLmdyb3VwPT09Im5vZGVzIj9MLnB1c2goUCk6VC5wdXNoKFApLHEuY2xlYW49ITApfWZvcih2YXIgUz0wO1M8TC5sZW5ndGg7UysrKXt2YXIgVj1MW1NdLFk9Vi5fcHJpdmF0ZSxydD1ZLnJzdHlsZSxvdD1WLnBvc2l0aW9uKCk7dGhpcy5yZWNhbGN1bGF0ZU5vZGVMYWJlbFByb2plY3Rpb24oVikscnQubm9kZVg9b3QueCxydC5ub2RlWT1vdC55LHJ0Lm5vZGVXPVYucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUscnQubm9kZUg9Vi5wc3R5bGUoImhlaWdodCIpLnBmVmFsdWV9dGhpcy5yZWNhbGN1bGF0ZUVkZ2VQcm9qZWN0aW9ucyhUKTtmb3IodmFyIGh0PTA7aHQ8VC5sZW5ndGg7aHQrKyl7dmFyIGR0PVRbaHRdLEx0PWR0Ll9wcml2YXRlLGt0PUx0LnJzdHlsZSxEdD1MdC5yc2NyYXRjaDtrdC5zcmNYPUR0LmFycm93U3RhcnRYLGt0LnNyY1k9RHQuYXJyb3dTdGFydFksa3QudGd0WD1EdC5hcnJvd0VuZFgsa3QudGd0WT1EdC5hcnJvd0VuZFksa3QubWlkWD1EdC5taWRYLGt0Lm1pZFk9RHQubWlkWSxrdC5sYWJlbEFuZ2xlPUR0LmxhYmVsQW5nbGUsa3Quc291cmNlTGFiZWxBbmdsZT1EdC5zb3VyY2VMYWJlbEFuZ2xlLGt0LnRhcmdldExhYmVsQW5nbGU9RHQudGFyZ2V0TGFiZWxBbmdsZX19fTt2YXIgbUM9e307bUMudXBkYXRlQ2FjaGVkR3JhYmJlZEVsZXM9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO2lmKHkpe3kuZHJhZz1bXSx5Lm5vbmRyYWc9W107Zm9yKHZhciBnPVtdLHg9MDt4PHkubGVuZ3RoO3grKyl7dmFyIFQ9eVt4XSxMPVQuX3ByaXZhdGUucnNjcmF0Y2g7VC5ncmFiYmVkKCkmJiFULmlzUGFyZW50KCk/Zy5wdXNoKFQpOkwuaW5EcmFnTGF5ZXI/eS5kcmFnLnB1c2goVCk6eS5ub25kcmFnLnB1c2goVCl9Zm9yKHZhciB4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBUPWdbeF07eS5kcmFnLnB1c2goVCl9fX0sbUMuaW52YWxpZGF0ZUNhY2hlZFpTb3J0ZWRFbGVzPWZ1bmN0aW9uKCl7dGhpcy5jYWNoZWRaU29ydGVkRWxlcz1udWxsfSxtQy5nZXRDYWNoZWRaU29ydGVkRWxlcz1mdW5jdGlvbih5KXtpZih5fHwhdGhpcy5jYWNoZWRaU29ydGVkRWxlcyl7dmFyIGc9dGhpcy5jeS5tdXRhYmxlRWxlbWVudHMoKS50b0FycmF5KCk7Zy5zb3J0KF9CKSxnLmludGVyYWN0aXZlPWcuZmlsdGVyKGZ1bmN0aW9uKHgpe3JldHVybiB4LmludGVyYWN0aXZlKCl9KSx0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzPWcsdGhpcy51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpfWVsc2UgZz10aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO3JldHVybiBnfTt2YXIgV2s9e307W0QzLHZDLG9kLEdrLHRNLFRwLG5oLFVrLG1DXS5mb3JFYWNoKGZ1bmN0aW9uKHkpe2RlKFdrLHkpfSk7dmFyIGVSPXt9O2VSLmdldENhY2hlZEltYWdlPWZ1bmN0aW9uKHksZyx4KXt2YXIgVD10aGlzLEw9VC5pbWFnZUNhY2hlPVQuaW1hZ2VDYWNoZXx8e30sTz1MW3ldO2lmKE8pcmV0dXJuIE8uaW1hZ2UuY29tcGxldGV8fE8uaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIseCksTy5pbWFnZTtPPUxbeV09TFt5XXx8e307dmFyIFA9Ty5pbWFnZT1uZXcgSW1hZ2U7UC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIix4KSxQLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbigpe1AuZXJyb3I9ITB9KTt2YXIgJD0iZGF0YToiLHE9eS5zdWJzdHJpbmcoMCwkLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PSQ7cmV0dXJuIHF8fChQLmNyb3NzT3JpZ2luPWcpLFAuc3JjPXksUH07dmFyIGd4PXt9O2d4LnJlZ2lzdGVyQmluZGluZz1mdW5jdGlvbih5LGcseCxUKXt2YXIgTD1BcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzLFsxXSksTz10aGlzLmJpbmRlcih5KTtyZXR1cm4gTy5vbi5hcHBseShPLEwpfSxneC5iaW5kZXI9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PXk9PT13aW5kb3d8fHk9PT1kb2N1bWVudHx8eT09PWRvY3VtZW50LmJvZHl8fEN0KHkpO2lmKGcuc3VwcG9ydHNQYXNzaXZlRXZlbnRzPT1udWxsKXt2YXIgVD0hMTt0cnl7dmFyIEw9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFQ9ITAsITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsTCl9Y2F0Y2h7fWcuc3VwcG9ydHNQYXNzaXZlRXZlbnRzPVR9dmFyIE89ZnVuY3Rpb24oJCxxLFMpe3ZhciBWPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIHgmJmcuc3VwcG9ydHNQYXNzaXZlRXZlbnRzJiYoVlsyXT17Y2FwdHVyZTpTPz8hMSxwYXNzaXZlOiExLG9uY2U6ITF9KSxnLmJpbmRpbmdzLnB1c2goe3RhcmdldDp5LGFyZ3M6Vn0pLCh5LmFkZEV2ZW50TGlzdGVuZXJ8fHkub24pLmFwcGx5KHksViksdGhpc307cmV0dXJue29uOk8sYWRkRXZlbnRMaXN0ZW5lcjpPLGFkZExpc3RlbmVyOk8sYmluZDpPfX0sZ3gubm9kZUlzRHJhZ2dhYmxlPWZ1bmN0aW9uKHkpe3JldHVybiB5JiZ5LmlzTm9kZSgpJiYheS5sb2NrZWQoKSYmeS5ncmFiYmFibGUoKX0sZ3gubm9kZUlzR3JhYmJhYmxlPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLm5vZGVJc0RyYWdnYWJsZSh5KSYmeS5pbnRlcmFjdGl2ZSgpfSxneC5sb2FkPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcyxnPWZ1bmN0aW9uKFF0KXtyZXR1cm4gUXQuc2VsZWN0ZWQoKX0seD1mdW5jdGlvbihRdCxqbixTcixpcil7UXQ9PW51bGwmJihRdD15LmN5KTtmb3IodmFyIHNyPTA7c3I8am4ubGVuZ3RoO3NyKyspe3ZhciBJYT1qbltzcl07UXQuZW1pdCh7b3JpZ2luYWxFdmVudDpTcix0eXBlOklhLHBvc2l0aW9uOmlyfSl9fSxUPWZ1bmN0aW9uKFF0KXtyZXR1cm4gUXQuc2hpZnRLZXl8fFF0Lm1ldGFLZXl8fFF0LmN0cmxLZXl9LEw9ZnVuY3Rpb24oUXQsam4pe3ZhciBTcj0hMDtpZih5LmN5Lmhhc0NvbXBvdW5kTm9kZXMoKSYmUXQmJlF0LnBhbm5hYmxlKCkpZm9yKHZhciBpcj0wO2puJiZpcjxqbi5sZW5ndGg7aXIrKyl7dmFyIFF0PWpuW2lyXTtpZihRdC5pc05vZGUoKSYmUXQuaXNQYXJlbnQoKSYmIVF0LnBhbm5hYmxlKCkpe1NyPSExO2JyZWFrfX1lbHNlIFNyPSEwO3JldHVybiBTcn0sTz1mdW5jdGlvbihRdCl7UXRbMF0uX3ByaXZhdGUuZ3JhYmJlZD0hMH0sUD1mdW5jdGlvbihRdCl7UXRbMF0uX3ByaXZhdGUuZ3JhYmJlZD0hMX0sJD1mdW5jdGlvbihRdCl7UXRbMF0uX3ByaXZhdGUucnNjcmF0Y2guaW5EcmFnTGF5ZXI9ITB9LHE9ZnVuY3Rpb24oUXQpe1F0WzBdLl9wcml2YXRlLnJzY3JhdGNoLmluRHJhZ0xheWVyPSExfSxTPWZ1bmN0aW9uKFF0KXtRdFswXS5fcHJpdmF0ZS5yc2NyYXRjaC5pc0dyYWJUYXJnZXQ9ITB9LFY9ZnVuY3Rpb24oUXQpe1F0WzBdLl9wcml2YXRlLnJzY3JhdGNoLmlzR3JhYlRhcmdldD0hMX0sWT1mdW5jdGlvbihRdCxqbil7dmFyIFNyPWpuLmFkZFRvTGlzdCxpcj1Tci5oYXMoUXQpOyFpciYmUXQuZ3JhYmJhYmxlKCkmJiFRdC5sb2NrZWQoKSYmKFNyLm1lcmdlKFF0KSxPKFF0KSl9LHJ0PWZ1bmN0aW9uKFF0LGpuKXtpZihRdC5jeSgpLmhhc0NvbXBvdW5kTm9kZXMoKSYmIShqbi5pbkRyYWdMYXllcj09bnVsbCYmam4uYWRkVG9MaXN0PT1udWxsKSl7dmFyIFNyPVF0LmRlc2NlbmRhbnRzKCk7am4uaW5EcmFnTGF5ZXImJihTci5mb3JFYWNoKCQpLFNyLmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaCgkKSksam4uYWRkVG9MaXN0JiZZKFNyLGpuKX19LG90PWZ1bmN0aW9uKFF0LGpuKXtqbj1qbnx8e307dmFyIFNyPVF0LmN5KCkuaGFzQ29tcG91bmROb2RlcygpO2puLmluRHJhZ0xheWVyJiYoUXQuZm9yRWFjaCgkKSxRdC5uZWlnaGJvcmhvb2QoKS5zdGRGaWx0ZXIoZnVuY3Rpb24oaXIpe3JldHVybiFTcnx8aXIuaXNFZGdlKCl9KS5mb3JFYWNoKCQpKSxqbi5hZGRUb0xpc3QmJlF0LmZvckVhY2goZnVuY3Rpb24oaXIpe1koaXIsam4pfSkscnQoUXQsam4pLEx0KFF0LHtpbkRyYWdMYXllcjpqbi5pbkRyYWdMYXllcn0pLHkudXBkYXRlQ2FjaGVkR3JhYmJlZEVsZXMoKX0saHQ9b3QsZHQ9ZnVuY3Rpb24oUXQpe1F0JiYoeS5nZXRDYWNoZWRaU29ydGVkRWxlcygpLmZvckVhY2goZnVuY3Rpb24oam4pe1Aoam4pLHEoam4pLFYoam4pfSkseS51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpKX0sTHQ9ZnVuY3Rpb24oUXQsam4pe2lmKCEoam4uaW5EcmFnTGF5ZXI9PW51bGwmJmpuLmFkZFRvTGlzdD09bnVsbCkmJlF0LmN5KCkuaGFzQ29tcG91bmROb2RlcygpKXt2YXIgU3I9UXQuYW5jZXN0b3JzKCkub3JwaGFucygpO2lmKCFTci5zYW1lKFF0KSl7dmFyIGlyPVNyLmRlc2NlbmRhbnRzKCkuc3Bhd25TZWxmKCkubWVyZ2UoU3IpLnVubWVyZ2UoUXQpLnVubWVyZ2UoUXQuZGVzY2VuZGFudHMoKSksc3I9aXIuY29ubmVjdGVkRWRnZXMoKTtqbi5pbkRyYWdMYXllciYmKHNyLmZvckVhY2goJCksaXIuZm9yRWFjaCgkKSksam4uYWRkVG9MaXN0JiZpci5mb3JFYWNoKGZ1bmN0aW9uKElhKXtZKElhLGpuKX0pfX19LGt0PWZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9bnVsbCYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyIT1udWxsJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKX0sRHQ9dHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI8InUiLFB0PXR5cGVvZiBSZXNpemVPYnNlcnZlcjwidSI7RHQ/KHkucmVtb3ZlT2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oVHIpe2Zvcih2YXIgUXQ9MDtRdDxUci5sZW5ndGg7UXQrKyl7dmFyIGpuPVRyW1F0XSxTcj1qbi5yZW1vdmVkTm9kZXM7aWYoU3IpZm9yKHZhciBpcj0wO2lyPFNyLmxlbmd0aDtpcisrKXt2YXIgc3I9U3JbaXJdO2lmKHNyPT09eS5jb250YWluZXIpe3kuZGVzdHJveSgpO2JyZWFrfX19fSkseS5jb250YWluZXIucGFyZW50Tm9kZSYmeS5yZW1vdmVPYnNlcnZlci5vYnNlcnZlKHkuY29udGFpbmVyLnBhcmVudE5vZGUse2NoaWxkTGlzdDohMH0pKTp5LnJlZ2lzdGVyQmluZGluZyh5LmNvbnRhaW5lciwiRE9NTm9kZVJlbW92ZWQiLGZ1bmN0aW9uKFRyKXt5LmRlc3Ryb3koKX0pO3ZhciAkdD1ZYyhmdW5jdGlvbigpe3kuY3kucmVzaXplKCl9LDEwMCk7RHQmJih5LnN0eWxlT2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoJHQpLHkuc3R5bGVPYnNlcnZlci5vYnNlcnZlKHkuY29udGFpbmVyLHthdHRyaWJ1dGVzOiEwfSkpLHkucmVnaXN0ZXJCaW5kaW5nKHdpbmRvdywicmVzaXplIiwkdCksUHQmJih5LnJlc2l6ZU9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcigkdCkseS5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHkuY29udGFpbmVyKSk7dmFyIFp0PWZ1bmN0aW9uKFF0LGpuKXtmb3IoO1F0IT1udWxsOylqbihRdCksUXQ9UXQucGFyZW50Tm9kZX0sWXQ9ZnVuY3Rpb24oKXt5LmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSgpfTtadCh5LmNvbnRhaW5lcixmdW5jdGlvbihUcil7eS5yZWdpc3RlckJpbmRpbmcoVHIsInRyYW5zaXRpb25lbmQiLFl0KSx5LnJlZ2lzdGVyQmluZGluZyhUciwiYW5pbWF0aW9uZW5kIixZdCkseS5yZWdpc3RlckJpbmRpbmcoVHIsInNjcm9sbCIsWXQpfSkseS5yZWdpc3RlckJpbmRpbmcoeS5jb250YWluZXIsImNvbnRleHRtZW51IixmdW5jdGlvbihUcil7VHIucHJldmVudERlZmF1bHQoKX0pO3ZhciBxdD1mdW5jdGlvbigpe3JldHVybiB5LnNlbGVjdGlvbls0XSE9PTB9LG5lPWZ1bmN0aW9uKFF0KXtmb3IodmFyIGpuPXkuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLFNyPWpuWzBdLGlyPWpuWzFdLHNyPWpuWzJdLElhPWpuWzNdLCRyPVF0LnRvdWNoZXM/UXQudG91Y2hlczpbUXRdLFlpPSExLEZvPTA7Rm88JHIubGVuZ3RoO0ZvKyspe3ZhciBQYz0kcltGb107aWYoU3I8PVBjLmNsaWVudFgmJlBjLmNsaWVudFg8PVNyK3NyJiZpcjw9UGMuY2xpZW50WSYmUGMuY2xpZW50WTw9aXIrSWEpe1lpPSEwO2JyZWFrfX1pZighWWkpcmV0dXJuITE7Zm9yKHZhciBaYT15LmNvbnRhaW5lcixtYz1RdC50YXJnZXQsVGE9bWMucGFyZW50Tm9kZSxKYT0hMTtUYTspe2lmKFRhPT09WmEpe0phPSEwO2JyZWFrfVRhPVRhLnBhcmVudE5vZGV9cmV0dXJuISFKYX07eS5yZWdpc3RlckJpbmRpbmcoeS5jb250YWluZXIsIm1vdXNlZG93biIsZnVuY3Rpb24oUXQpe2lmKG5lKFF0KSl7UXQucHJldmVudERlZmF1bHQoKSxrdCgpLHkuaG92ZXJEYXRhLmNhcHR1cmU9ITAseS5ob3ZlckRhdGEud2hpY2g9UXQud2hpY2g7dmFyIGpuPXkuY3ksU3I9W1F0LmNsaWVudFgsUXQuY2xpZW50WV0saXI9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFNyWzBdLFNyWzFdKSxzcj15LnNlbGVjdGlvbixJYT15LmZpbmROZWFyZXN0RWxlbWVudHMoaXJbMF0saXJbMV0sITAsITEpLCRyPUlhWzBdLFlpPXkuZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHM7eS5ob3ZlckRhdGEubWRvd25Qb3M9aXIseS5ob3ZlckRhdGEubWRvd25HUG9zPVNyO3ZhciBGbz1mdW5jdGlvbigpe3kuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQ9ITEsY2xlYXJUaW1lb3V0KHkuaG92ZXJEYXRhLnRhcGhvbGRUaW1lb3V0KSx5LmhvdmVyRGF0YS50YXBob2xkVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoIXkuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQpe3ZhciBtbD15LmhvdmVyRGF0YS5kb3duO21sP21sLmVtaXQoe29yaWdpbmFsRXZlbnQ6UXQsdHlwZToidGFwaG9sZCIscG9zaXRpb246e3g6aXJbMF0seTppclsxXX19KTpqbi5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6InRhcGhvbGQiLHBvc2l0aW9uOnt4OmlyWzBdLHk6aXJbMV19fSl9fSx5LnRhcGhvbGREdXJhdGlvbil9O2lmKFF0LndoaWNoPT0zKXt5LmhvdmVyRGF0YS5jeHRTdGFydGVkPSEwO3ZhciBQYz17b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6aXJbMF0seTppclsxXX19OyRyPygkci5hY3RpdmF0ZSgpLCRyLmVtaXQoUGMpLHkuaG92ZXJEYXRhLmRvd249JHIpOmpuLmVtaXQoUGMpLHkuaG92ZXJEYXRhLmRvd25UaW1lPW5ldyBEYXRlKCkuZ2V0VGltZSgpLHkuaG92ZXJEYXRhLmN4dERyYWdnZWQ9ITF9ZWxzZSBpZihRdC53aGljaD09MSl7JHImJiRyLmFjdGl2YXRlKCk7e2lmKCRyIT1udWxsJiZ5Lm5vZGVJc0dyYWJiYWJsZSgkcikpe3ZhciBaYT1mdW5jdGlvbihtbCl7cmV0dXJue29yaWdpbmFsRXZlbnQ6UXQsdHlwZTptbCxwb3NpdGlvbjp7eDppclswXSx5OmlyWzFdfX19LG1jPWZ1bmN0aW9uKG1sKXttbC5lbWl0KFphKCJncmFiIikpfTtpZihTKCRyKSwhJHIuc2VsZWN0ZWQoKSlZaT15LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPWpuLmNvbGxlY3Rpb24oKSxodCgkcix7YWRkVG9MaXN0OllpfSksJHIuZW1pdChaYSgiZ3JhYm9uIikpLmVtaXQoWmEoImdyYWIiKSk7ZWxzZXtZaT15LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPWpuLmNvbGxlY3Rpb24oKTt2YXIgVGE9am4uJChmdW5jdGlvbihKYSl7cmV0dXJuIEphLmlzTm9kZSgpJiZKYS5zZWxlY3RlZCgpJiZ5Lm5vZGVJc0dyYWJiYWJsZShKYSl9KTtvdChUYSx7YWRkVG9MaXN0OllpfSksJHIuZW1pdChaYSgiZ3JhYm9uIikpLFRhLmZvckVhY2gobWMpfXkucmVkcmF3SGludCgiZWxlcyIsITApLHkucmVkcmF3SGludCgiZHJhZyIsITApfXkuaG92ZXJEYXRhLmRvd249JHIseS5ob3ZlckRhdGEuZG93bnM9SWEseS5ob3ZlckRhdGEuZG93blRpbWU9bmV3IERhdGUoKS5nZXRUaW1lKCl9eCgkcixbIm1vdXNlZG93biIsInRhcHN0YXJ0Iiwidm1vdXNlZG93biJdLFF0LHt4OmlyWzBdLHk6aXJbMV19KSwkcj09bnVsbD8oc3JbNF09MSx5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249e3g6aXJbMF0seTppclsxXX0seS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx5LnJlZHJhdygpKTokci5wYW5uYWJsZSgpJiYoc3JbNF09MSksRm8oKX1zclswXT1zclsyXT1pclswXSxzclsxXT1zclszXT1pclsxXX19LCExKSx5LnJlZ2lzdGVyQmluZGluZyh3aW5kb3csIm1vdXNlbW92ZSIsZnVuY3Rpb24oUXQpe3ZhciBqbj15LmhvdmVyRGF0YS5jYXB0dXJlO2lmKCEoIWpuJiYhbmUoUXQpKSl7dmFyIFNyPSExLGlyPXkuY3ksc3I9aXIuem9vbSgpLElhPVtRdC5jbGllbnRYLFF0LmNsaWVudFldLCRyPXkucHJvamVjdEludG9WaWV3cG9ydChJYVswXSxJYVsxXSksWWk9eS5ob3ZlckRhdGEubWRvd25Qb3MsRm89eS5ob3ZlckRhdGEubWRvd25HUG9zLFBjPXkuc2VsZWN0aW9uLFphPW51bGw7IXkuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyYmIXkuaG92ZXJEYXRhLmRyYWdnaW5nJiYheS5ob3ZlckRhdGEuc2VsZWN0aW5nJiYoWmE9eS5maW5kTmVhcmVzdEVsZW1lbnQoJHJbMF0sJHJbMV0sITAsITEpKTt2YXIgbWM9eS5ob3ZlckRhdGEubGFzdCxUYT15LmhvdmVyRGF0YS5kb3duLEphPVskclswXS1QY1syXSwkclsxXS1QY1szXV0sbWw9eS5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cyxxZjtpZihGbyl7dmFyIENwPUlhWzBdLUZvWzBdLF9wPUNwKkNwLEhmPUlhWzFdLUZvWzFdLF9nPUhmKkhmLGNkPV9wK19nO3kuaG92ZXJEYXRhLmlzT3ZlclRocmVzaG9sZERyYWc9cWY9Y2Q+PXkuZGVza3RvcFRhcFRocmVzaG9sZDJ9dmFyIG13PVQoUXQpO3FmJiYoeS5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZD0hMCk7dmFyIExtPWZ1bmN0aW9uKCl7dmFyIFliPXkuaG92ZXJEYXRhLmRyYWdEZWx0YT15LmhvdmVyRGF0YS5kcmFnRGVsdGF8fFtdO1liLmxlbmd0aD09PTA/KFliLnB1c2goSmFbMF0pLFliLnB1c2goSmFbMV0pKTooWWJbMF0rPUphWzBdLFliWzFdKz1KYVsxXSl9O1NyPSEwLHgoWmEsWyJtb3VzZW1vdmUiLCJ2bW91c2Vtb3ZlIiwidGFwZHJhZyJdLFF0LHt4OiRyWzBdLHk6JHJbMV19KTt2YXIgeHg9ZnVuY3Rpb24oKXt5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHkuaG92ZXJEYXRhLnNlbGVjdGluZ3x8aXIuZW1pdCh7b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJib3hzdGFydCIscG9zaXRpb246e3g6JHJbMF0seTokclsxXX19KSxQY1s0XT0xLHkuaG92ZXJEYXRhLnNlbGVjdGluZz0hMCx5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHkucmVkcmF3KCl9O2lmKHkuaG92ZXJEYXRhLndoaWNoPT09Myl7aWYocWYpe3ZhciBGMz17b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJjeHRkcmFnIixwb3NpdGlvbjp7eDokclswXSx5OiRyWzFdfX07VGE/VGEuZW1pdChGMyk6aXIuZW1pdChGMykseS5ob3ZlckRhdGEuY3h0RHJhZ2dlZD0hMCwoIXkuaG92ZXJEYXRhLmN4dE92ZXJ8fFphIT09eS5ob3ZlckRhdGEuY3h0T3ZlcikmJih5LmhvdmVyRGF0YS5jeHRPdmVyJiZ5LmhvdmVyRGF0YS5jeHRPdmVyLmVtaXQoe29yaWdpbmFsRXZlbnQ6UXQsdHlwZToiY3h0ZHJhZ291dCIscG9zaXRpb246e3g6JHJbMF0seTokclsxXX19KSx5LmhvdmVyRGF0YS5jeHRPdmVyPVphLFphJiZaYS5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dGRyYWdvdmVyIixwb3NpdGlvbjp7eDokclswXSx5OiRyWzFdfX0pKX19ZWxzZSBpZih5LmhvdmVyRGF0YS5kcmFnZ2luZyl7aWYoU3I9ITAsaXIucGFubmluZ0VuYWJsZWQoKSYmaXIudXNlclBhbm5pbmdFbmFibGVkKCkpe3ZhciBreDtpZih5LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbil7dmFyIFNDPXkuaG92ZXJEYXRhLm1kb3duUG9zO2t4PXt4OigkclswXS1TQ1swXSkqc3IseTooJHJbMV0tU0NbMV0pKnNyfSx5LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbj0hMX1lbHNlIGt4PXt4OkphWzBdKnNyLHk6SmFbMV0qc3J9O2lyLnBhbkJ5KGt4KSxpci5lbWl0KCJkcmFncGFuIikseS5ob3ZlckRhdGEuZHJhZ2dlZD0hMH0kcj15LnByb2plY3RJbnRvVmlld3BvcnQoUXQuY2xpZW50WCxRdC5jbGllbnRZKX1lbHNlIGlmKFBjWzRdPT0xJiYoVGE9PW51bGx8fFRhLnBhbm5hYmxlKCkpKXtpZihxZil7aWYoIXkuaG92ZXJEYXRhLmRyYWdnaW5nJiZpci5ib3hTZWxlY3Rpb25FbmFibGVkKCkmJihtd3x8IWlyLnBhbm5pbmdFbmFibGVkKCl8fCFpci51c2VyUGFubmluZ0VuYWJsZWQoKSkpeHgoKTtlbHNlIGlmKCF5LmhvdmVyRGF0YS5zZWxlY3RpbmcmJmlyLnBhbm5pbmdFbmFibGVkKCkmJmlyLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXt2YXIgTjM9TChUYSx5LmhvdmVyRGF0YS5kb3ducyk7TjMmJih5LmhvdmVyRGF0YS5kcmFnZ2luZz0hMCx5LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbj0hMCxQY1s0XT0wLHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj1LNShZaSkseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx5LnJlZHJhdygpKX1UYSYmVGEucGFubmFibGUoKSYmVGEuYWN0aXZlKCkmJlRhLnVuYWN0aXZhdGUoKX19ZWxzZXtpZihUYSYmVGEucGFubmFibGUoKSYmVGEuYWN0aXZlKCkmJlRhLnVuYWN0aXZhdGUoKSwoIVRhfHwhVGEuZ3JhYmJlZCgpKSYmWmEhPW1jJiYobWMmJngobWMsWyJtb3VzZW91dCIsInRhcGRyYWdvdXQiXSxRdCx7eDokclswXSx5OiRyWzFdfSksWmEmJngoWmEsWyJtb3VzZW92ZXIiLCJ0YXBkcmFnb3ZlciJdLFF0LHt4OiRyWzBdLHk6JHJbMV19KSx5LmhvdmVyRGF0YS5sYXN0PVphKSxUYSlpZihxZil7aWYoaXIuYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZtdylUYSYmVGEuZ3JhYmJlZCgpJiYoZHQobWwpLFRhLmVtaXQoImZyZWVvbiIpLG1sLmVtaXQoImZyZWUiKSx5LmRyYWdEYXRhLmRpZERyYWcmJihUYS5lbWl0KCJkcmFnZnJlZW9uIiksbWwuZW1pdCgiZHJhZ2ZyZWUiKSkpLHh4KCk7ZWxzZSBpZihUYSYmVGEuZ3JhYmJlZCgpJiZ5Lm5vZGVJc0RyYWdnYWJsZShUYSkpe3ZhciBIZD0heS5kcmFnRGF0YS5kaWREcmFnO0hkJiZ5LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx5LmRyYWdEYXRhLmRpZERyYWc9ITAseS5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHxvdChtbCx7aW5EcmFnTGF5ZXI6ITB9KTt2YXIgeTE9e3g6MCx5OjB9O2lmKFgoSmFbMF0pJiZYKEphWzFdKSYmKHkxLngrPUphWzBdLHkxLnkrPUphWzFdLEhkKSl7dmFyIFZkPXkuaG92ZXJEYXRhLmRyYWdEZWx0YTtWZCYmWChWZFswXSkmJlgoVmRbMV0pJiYoeTEueCs9VmRbMF0seTEueSs9VmRbMV0pfXkuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMCxtbC5zaWxlbnRTaGlmdCh5MSkuZW1pdCgicG9zaXRpb24gZHJhZyIpLHkucmVkcmF3SGludCgiZHJhZyIsITApLHkucmVkcmF3KCl9fWVsc2UgTG0oKTtTcj0hMH1pZihQY1syXT0kclswXSxQY1szXT0kclsxXSxTcilyZXR1cm4gUXQuc3RvcFByb3BhZ2F0aW9uJiZRdC5zdG9wUHJvcGFnYXRpb24oKSxRdC5wcmV2ZW50RGVmYXVsdCYmUXQucHJldmVudERlZmF1bHQoKSwhMX19LCExKTt2YXIgR3QsZ2UsYmU7eS5yZWdpc3RlckJpbmRpbmcod2luZG93LCJtb3VzZXVwIixmdW5jdGlvbihRdCl7dmFyIGpuPXkuaG92ZXJEYXRhLmNhcHR1cmU7aWYoam4pe3kuaG92ZXJEYXRhLmNhcHR1cmU9ITE7dmFyIFNyPXkuY3ksaXI9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LmNsaWVudFgsUXQuY2xpZW50WSksc3I9eS5zZWxlY3Rpb24sSWE9eS5maW5kTmVhcmVzdEVsZW1lbnQoaXJbMF0saXJbMV0sITAsITEpLCRyPXkuZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHMsWWk9eS5ob3ZlckRhdGEuZG93bixGbz1UKFF0KTtpZih5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24mJih5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHkucmVkcmF3KCkpLHkuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQ9ITAseS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCxZaSYmWWkudW5hY3RpdmF0ZSgpLHkuaG92ZXJEYXRhLndoaWNoPT09Myl7dmFyIFBjPXtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dHRhcGVuZCIscG9zaXRpb246e3g6aXJbMF0seTppclsxXX19O2lmKFlpP1lpLmVtaXQoUGMpOlNyLmVtaXQoUGMpLCF5LmhvdmVyRGF0YS5jeHREcmFnZ2VkKXt2YXIgWmE9e29yaWdpbmFsRXZlbnQ6UXQsdHlwZToiY3h0dGFwIixwb3NpdGlvbjp7eDppclswXSx5OmlyWzFdfX07WWk/WWkuZW1pdChaYSk6U3IuZW1pdChaYSl9eS5ob3ZlckRhdGEuY3h0RHJhZ2dlZD0hMSx5LmhvdmVyRGF0YS53aGljaD1udWxsfWVsc2UgaWYoeS5ob3ZlckRhdGEud2hpY2g9PT0xKXtpZih4KElhLFsibW91c2V1cCIsInRhcGVuZCIsInZtb3VzZXVwIl0sUXQse3g6aXJbMF0seTppclsxXX0pLCF5LmRyYWdEYXRhLmRpZERyYWcmJiF5LmhvdmVyRGF0YS5kcmFnZ2VkJiYheS5ob3ZlckRhdGEuc2VsZWN0aW5nJiYheS5ob3ZlckRhdGEuaXNPdmVyVGhyZXNob2xkRHJhZyYmKHgoWWksWyJjbGljayIsInRhcCIsInZjbGljayJdLFF0LHt4OmlyWzBdLHk6aXJbMV19KSxnZT0hMSxRdC50aW1lU3RhbXAtYmU8PVNyLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKT8oR3QmJmNsZWFyVGltZW91dChHdCksZ2U9ITAsYmU9bnVsbCx4KFlpLFsiZGJsY2xpY2siLCJkYmx0YXAiLCJ2ZGJsY2xpY2siXSxRdCx7eDppclswXSx5OmlyWzFdfSkpOihHdD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Z2V8fHgoWWksWyJvbmVjbGljayIsIm9uZXRhcCIsInZvbmVjbGljayJdLFF0LHt4OmlyWzBdLHk6aXJbMV19KX0sU3IubXVsdGlDbGlja0RlYm91bmNlVGltZSgpKSxiZT1RdC50aW1lU3RhbXApKSxZaT09bnVsbCYmIXkuZHJhZ0RhdGEuZGlkRHJhZyYmIXkuaG92ZXJEYXRhLnNlbGVjdGluZyYmIXkuaG92ZXJEYXRhLmRyYWdnZWQmJiFUKFF0KSYmKFNyLiQoZykudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKSwkci5sZW5ndGg+MCYmeS5yZWRyYXdIaW50KCJlbGVzIiwhMCkseS5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cz0kcj1Tci5jb2xsZWN0aW9uKCkpLElhPT1ZaSYmIXkuZHJhZ0RhdGEuZGlkRHJhZyYmIXkuaG92ZXJEYXRhLnNlbGVjdGluZyYmSWEhPW51bGwmJklhLl9wcml2YXRlLnNlbGVjdGFibGUmJih5LmhvdmVyRGF0YS5kcmFnZ2luZ3x8KFNyLnNlbGVjdGlvblR5cGUoKT09PSJhZGRpdGl2ZSJ8fEZvP0lhLnNlbGVjdGVkKCk/SWEudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKTpJYS5zZWxlY3QoWyJ0YXBzZWxlY3QiXSk6Rm98fChTci4kKGcpLnVubWVyZ2UoSWEpLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSksSWEuc2VsZWN0KFsidGFwc2VsZWN0Il0pKSkseS5yZWRyYXdIaW50KCJlbGVzIiwhMCkpLHkuaG92ZXJEYXRhLnNlbGVjdGluZyl7dmFyIG1jPVNyLmNvbGxlY3Rpb24oeS5nZXRBbGxJbkJveChzclswXSxzclsxXSxzclsyXSxzclszXSkpO3kucmVkcmF3SGludCgic2VsZWN0IiwhMCksbWMubGVuZ3RoPjAmJnkucmVkcmF3SGludCgiZWxlcyIsITApLFNyLmVtaXQoe3R5cGU6ImJveGVuZCIsb3JpZ2luYWxFdmVudDpRdCxwb3NpdGlvbjp7eDppclswXSx5OmlyWzFdfX0pO3ZhciBUYT1mdW5jdGlvbihxZil7cmV0dXJuIHFmLnNlbGVjdGFibGUoKSYmIXFmLnNlbGVjdGVkKCl9O1NyLnNlbGVjdGlvblR5cGUoKT09PSJhZGRpdGl2ZSJ8fEZvfHxTci4kKGcpLnVubWVyZ2UobWMpLnVuc2VsZWN0KCksbWMuZW1pdCgiYm94Iikuc3RkRmlsdGVyKFRhKS5zZWxlY3QoKS5lbWl0KCJib3hzZWxlY3QiKSx5LnJlZHJhdygpfWlmKHkuaG92ZXJEYXRhLmRyYWdnaW5nJiYoeS5ob3ZlckRhdGEuZHJhZ2dpbmc9ITEseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx5LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx5LnJlZHJhdygpKSwhc3JbNF0pe3kucmVkcmF3SGludCgiZHJhZyIsITApLHkucmVkcmF3SGludCgiZWxlcyIsITApO3ZhciBKYT1ZaSYmWWkuZ3JhYmJlZCgpO2R0KCRyKSxKYSYmKFlpLmVtaXQoImZyZWVvbiIpLCRyLmVtaXQoImZyZWUiKSx5LmRyYWdEYXRhLmRpZERyYWcmJihZaS5lbWl0KCJkcmFnZnJlZW9uIiksJHIuZW1pdCgiZHJhZ2ZyZWUiKSkpfX1zcls0XT0wLHkuaG92ZXJEYXRhLmRvd249bnVsbCx5LmhvdmVyRGF0YS5jeHRTdGFydGVkPSExLHkuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMSx5LmhvdmVyRGF0YS5zZWxlY3Rpbmc9ITEseS5ob3ZlckRhdGEuaXNPdmVyVGhyZXNob2xkRHJhZz0hMSx5LmRyYWdEYXRhLmRpZERyYWc9ITEseS5ob3ZlckRhdGEuZHJhZ2dlZD0hMSx5LmhvdmVyRGF0YS5kcmFnRGVsdGE9W10seS5ob3ZlckRhdGEubWRvd25Qb3M9bnVsbCx5LmhvdmVyRGF0YS5tZG93bkdQb3M9bnVsbH19LCExKTt2YXIgaWU9ZnVuY3Rpb24oUXQpe2lmKCF5LnNjcm9sbGluZ1BhZ2Upe3ZhciBqbj15LmN5LFNyPWpuLnpvb20oKSxpcj1qbi5wYW4oKSxzcj15LnByb2plY3RJbnRvVmlld3BvcnQoUXQuY2xpZW50WCxRdC5jbGllbnRZKSxJYT1bc3JbMF0qU3IraXIueCxzclsxXSpTcitpci55XTtpZih5LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXN8fHkuaG92ZXJEYXRhLmRyYWdnaW5nfHx5LmhvdmVyRGF0YS5jeHRTdGFydGVkfHxxdCgpKXtRdC5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1pZihqbi5wYW5uaW5nRW5hYmxlZCgpJiZqbi51c2VyUGFubmluZ0VuYWJsZWQoKSYmam4uem9vbWluZ0VuYWJsZWQoKSYmam4udXNlclpvb21pbmdFbmFibGVkKCkpe1F0LnByZXZlbnREZWZhdWx0KCkseS5kYXRhLndoZWVsWm9vbWluZz0hMCxjbGVhclRpbWVvdXQoeS5kYXRhLndoZWVsVGltZW91dCkseS5kYXRhLndoZWVsVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eS5kYXRhLndoZWVsWm9vbWluZz0hMSx5LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx5LnJlZHJhdygpfSwxNTApO3ZhciAkcjtRdC5kZWx0YVkhPW51bGw/JHI9UXQuZGVsdGFZLy0yNTA6UXQud2hlZWxEZWx0YVkhPW51bGw/JHI9UXQud2hlZWxEZWx0YVkvMWUzOiRyPVF0LndoZWVsRGVsdGEvMWUzLCRyPSRyKnkud2hlZWxTZW5zaXRpdml0eTt2YXIgWWk9UXQuZGVsdGFNb2RlPT09MTtZaSYmKCRyKj0zMyk7dmFyIEZvPWpuLnpvb20oKSpNYXRoLnBvdygxMCwkcik7UXQudHlwZT09PSJnZXN0dXJlY2hhbmdlIiYmKEZvPXkuZ2VzdHVyZVN0YXJ0Wm9vbSpRdC5zY2FsZSksam4uem9vbSh7bGV2ZWw6Rm8scmVuZGVyZWRQb3NpdGlvbjp7eDpJYVswXSx5OklhWzFdfX0pLGpuLmVtaXQoUXQudHlwZT09PSJnZXN0dXJlY2hhbmdlIj8icGluY2h6b29tIjoic2Nyb2xsem9vbSIpfX19O3kucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJ3aGVlbCIsaWUsITApLHkucmVnaXN0ZXJCaW5kaW5nKHdpbmRvdywic2Nyb2xsIixmdW5jdGlvbihRdCl7eS5zY3JvbGxpbmdQYWdlPSEwLGNsZWFyVGltZW91dCh5LnNjcm9sbGluZ1BhZ2VUaW1lb3V0KSx5LnNjcm9sbGluZ1BhZ2VUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt5LnNjcm9sbGluZ1BhZ2U9ITF9LDI1MCl9LCEwKSx5LnJlZ2lzdGVyQmluZGluZyh5LmNvbnRhaW5lciwiZ2VzdHVyZXN0YXJ0IixmdW5jdGlvbihRdCl7eS5nZXN0dXJlU3RhcnRab29tPXkuY3kuem9vbSgpLHkuaGFzVG91Y2hTdGFydGVkfHxRdC5wcmV2ZW50RGVmYXVsdCgpfSwhMCkseS5yZWdpc3RlckJpbmRpbmcoeS5jb250YWluZXIsImdlc3R1cmVjaGFuZ2UiLGZ1bmN0aW9uKFRyKXt5Lmhhc1RvdWNoU3RhcnRlZHx8aWUoVHIpfSwhMCkseS5yZWdpc3RlckJpbmRpbmcoeS5jb250YWluZXIsIm1vdXNlb3V0IixmdW5jdGlvbihRdCl7dmFyIGpuPXkucHJvamVjdEludG9WaWV3cG9ydChRdC5jbGllbnRYLFF0LmNsaWVudFkpO3kuY3kuZW1pdCh7b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJtb3VzZW91dCIscG9zaXRpb246e3g6am5bMF0seTpqblsxXX19KX0sITEpLHkucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJtb3VzZW92ZXIiLGZ1bmN0aW9uKFF0KXt2YXIgam49eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LmNsaWVudFgsUXQuY2xpZW50WSk7eS5jeS5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6Im1vdXNlb3ZlciIscG9zaXRpb246e3g6am5bMF0seTpqblsxXX19KX0sITEpO3ZhciBGZSx3ZSxibix6ZSxHZSxFbixJbixZbixTbixXbixycix3cix1cixlcj1mdW5jdGlvbihRdCxqbixTcixpcil7cmV0dXJuIE1hdGguc3FydCgoU3ItUXQpKihTci1RdCkrKGlyLWpuKSooaXItam4pKX0sdm49ZnVuY3Rpb24oUXQsam4sU3IsaXIpe3JldHVybihTci1RdCkqKFNyLVF0KSsoaXItam4pKihpci1qbil9LGdyO3kucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJ0b3VjaHN0YXJ0Iixncj1mdW5jdGlvbihRdCl7aWYoeS5oYXNUb3VjaFN0YXJ0ZWQ9ITAsISFuZShRdCkpe2t0KCkseS50b3VjaERhdGEuY2FwdHVyZT0hMCx5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwO3ZhciBqbj15LmN5LFNyPXkudG91Y2hEYXRhLm5vdyxpcj15LnRvdWNoRGF0YS5lYXJsaWVyO2lmKFF0LnRvdWNoZXNbMF0pe3ZhciBzcj15LnByb2plY3RJbnRvVmlld3BvcnQoUXQudG91Y2hlc1swXS5jbGllbnRYLFF0LnRvdWNoZXNbMF0uY2xpZW50WSk7U3JbMF09c3JbMF0sU3JbMV09c3JbMV19aWYoUXQudG91Y2hlc1sxXSl7dmFyIHNyPXkucHJvamVjdEludG9WaWV3cG9ydChRdC50b3VjaGVzWzFdLmNsaWVudFgsUXQudG91Y2hlc1sxXS5jbGllbnRZKTtTclsyXT1zclswXSxTclszXT1zclsxXX1pZihRdC50b3VjaGVzWzJdKXt2YXIgc3I9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LnRvdWNoZXNbMl0uY2xpZW50WCxRdC50b3VjaGVzWzJdLmNsaWVudFkpO1NyWzRdPXNyWzBdLFNyWzVdPXNyWzFdfWlmKFF0LnRvdWNoZXNbMV0pe3kudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQ9ITAsZHQoeS5kcmFnRGF0YS50b3VjaERyYWdFbGVzKTt2YXIgSWE9eS5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCk7U249SWFbMF0sV249SWFbMV0scnI9SWFbMl0sd3I9SWFbM10sRmU9UXQudG91Y2hlc1swXS5jbGllbnRYLVNuLHdlPVF0LnRvdWNoZXNbMF0uY2xpZW50WS1Xbixibj1RdC50b3VjaGVzWzFdLmNsaWVudFgtU24semU9UXQudG91Y2hlc1sxXS5jbGllbnRZLVduLHVyPTA8PUZlJiZGZTw9cnImJjA8PWJuJiZibjw9cnImJjA8PXdlJiZ3ZTw9d3ImJjA8PXplJiZ6ZTw9d3I7dmFyICRyPWpuLnBhbigpLFlpPWpuLnpvb20oKTtHZT1lcihGZSx3ZSxibix6ZSksRW49dm4oRmUsd2UsYm4semUpLEluPVsoRmUrYm4pLzIsKHdlK3plKS8yXSxZbj1bKEluWzBdLSRyLngpL1lpLChJblsxXS0kci55KS9ZaV07dmFyIEZvPTIwMCxQYz1GbypGbztpZihFbjxQYyYmIVF0LnRvdWNoZXNbMl0pe3ZhciBaYT15LmZpbmROZWFyZXN0RWxlbWVudChTclswXSxTclsxXSwhMCwhMCksbWM9eS5maW5kTmVhcmVzdEVsZW1lbnQoU3JbMl0sU3JbM10sITAsITApO1phJiZaYS5pc05vZGUoKT8oWmEuYWN0aXZhdGUoKS5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dHRhcHN0YXJ0Iixwb3NpdGlvbjp7eDpTclswXSx5OlNyWzFdfX0pLHkudG91Y2hEYXRhLnN0YXJ0PVphKTptYyYmbWMuaXNOb2RlKCk/KG1jLmFjdGl2YXRlKCkuZW1pdCh7b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6U3JbMF0seTpTclsxXX19KSx5LnRvdWNoRGF0YS5zdGFydD1tYyk6am4uZW1pdCh7b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6U3JbMF0seTpTclsxXX19KSx5LnRvdWNoRGF0YS5zdGFydCYmKHkudG91Y2hEYXRhLnN0YXJ0Ll9wcml2YXRlLmdyYWJiZWQ9ITEpLHkudG91Y2hEYXRhLmN4dD0hMCx5LnRvdWNoRGF0YS5jeHREcmFnZ2VkPSExLHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseS5yZWRyYXcoKTtyZXR1cm59fWlmKFF0LnRvdWNoZXNbMl0pam4uYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZRdC5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgaWYoIVF0LnRvdWNoZXNbMV0pe2lmKFF0LnRvdWNoZXNbMF0pe3ZhciBUYT15LmZpbmROZWFyZXN0RWxlbWVudHMoU3JbMF0sU3JbMV0sITAsITApLEphPVRhWzBdO2lmKEphIT1udWxsJiYoSmEuYWN0aXZhdGUoKSx5LnRvdWNoRGF0YS5zdGFydD1KYSx5LnRvdWNoRGF0YS5zdGFydHM9VGEseS5ub2RlSXNHcmFiYmFibGUoSmEpKSl7dmFyIG1sPXkuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcz1qbi5jb2xsZWN0aW9uKCkscWY9bnVsbDt5LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx5LnJlZHJhd0hpbnQoImRyYWciLCEwKSxKYS5zZWxlY3RlZCgpPyhxZj1qbi4kKGZ1bmN0aW9uKGNkKXtyZXR1cm4gY2Quc2VsZWN0ZWQoKSYmeS5ub2RlSXNHcmFiYmFibGUoY2QpfSksb3QocWYse2FkZFRvTGlzdDptbH0pKTpodChKYSx7YWRkVG9MaXN0Om1sfSksUyhKYSk7dmFyIENwPWZ1bmN0aW9uKG13KXtyZXR1cm57b3JpZ2luYWxFdmVudDpRdCx0eXBlOm13LHBvc2l0aW9uOnt4OlNyWzBdLHk6U3JbMV19fX07SmEuZW1pdChDcCgiZ3JhYm9uIikpLHFmP3FmLmZvckVhY2goZnVuY3Rpb24oY2Qpe2NkLmVtaXQoQ3AoImdyYWIiKSl9KTpKYS5lbWl0KENwKCJncmFiIikpfXgoSmEsWyJ0b3VjaHN0YXJ0IiwidGFwc3RhcnQiLCJ2bW91c2Vkb3duIl0sUXQse3g6U3JbMF0seTpTclsxXX0pLEphPT1udWxsJiYoeS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXt4OnNyWzBdLHk6c3JbMV19LHkucmVkcmF3SGludCgic2VsZWN0IiwhMCkseS5yZWRyYXcoKSkseS50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMSx5LnRvdWNoRGF0YS5zaW5nbGVUb3VjaFN0YXJ0VGltZT0rbmV3IERhdGUsY2xlYXJUaW1lb3V0KHkudG91Y2hEYXRhLnRhcGhvbGRUaW1lb3V0KSx5LnRvdWNoRGF0YS50YXBob2xkVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eS50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD09PSExJiYheS5waW5jaGluZyYmIXkudG91Y2hEYXRhLnNlbGVjdGluZyYmeCh5LnRvdWNoRGF0YS5zdGFydCxbInRhcGhvbGQiXSxRdCx7eDpTclswXSx5OlNyWzFdfSl9LHkudGFwaG9sZER1cmF0aW9uKX19aWYoUXQudG91Y2hlcy5sZW5ndGg+PTEpe2Zvcih2YXIgX3A9eS50b3VjaERhdGEuc3RhcnRQb3NpdGlvbj1bXSxIZj0wO0hmPFNyLmxlbmd0aDtIZisrKV9wW0hmXT1pcltIZl09U3JbSGZdO3ZhciBfZz1RdC50b3VjaGVzWzBdO3kudG91Y2hEYXRhLnN0YXJ0R1Bvc2l0aW9uPVtfZy5jbGllbnRYLF9nLmNsaWVudFldfX19LCExKTt2YXIgZnI7eS5yZWdpc3RlckJpbmRpbmcod2luZG93LCJ0b3VjaG1vdmUiLGZyPWZ1bmN0aW9uKFF0KXt2YXIgam49eS50b3VjaERhdGEuY2FwdHVyZTtpZighKCFqbiYmIW5lKFF0KSkpe3ZhciBTcj15LnNlbGVjdGlvbixpcj15LmN5LHNyPXkudG91Y2hEYXRhLm5vdyxJYT15LnRvdWNoRGF0YS5lYXJsaWVyLCRyPWlyLnpvb20oKTtpZihRdC50b3VjaGVzWzBdKXt2YXIgWWk9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LnRvdWNoZXNbMF0uY2xpZW50WCxRdC50b3VjaGVzWzBdLmNsaWVudFkpO3NyWzBdPVlpWzBdLHNyWzFdPVlpWzFdfWlmKFF0LnRvdWNoZXNbMV0pe3ZhciBZaT15LnByb2plY3RJbnRvVmlld3BvcnQoUXQudG91Y2hlc1sxXS5jbGllbnRYLFF0LnRvdWNoZXNbMV0uY2xpZW50WSk7c3JbMl09WWlbMF0sc3JbM109WWlbMV19aWYoUXQudG91Y2hlc1syXSl7dmFyIFlpPXkucHJvamVjdEludG9WaWV3cG9ydChRdC50b3VjaGVzWzJdLmNsaWVudFgsUXQudG91Y2hlc1syXS5jbGllbnRZKTtzcls0XT1ZaVswXSxzcls1XT1ZaVsxXX12YXIgRm89eS50b3VjaERhdGEuc3RhcnRHUG9zaXRpb24sUGM7aWYoam4mJlF0LnRvdWNoZXNbMF0mJkZvKXtmb3IodmFyIFphPVtdLG1jPTA7bWM8c3IubGVuZ3RoO21jKyspWmFbbWNdPXNyW21jXS1JYVttY107dmFyIFRhPVF0LnRvdWNoZXNbMF0uY2xpZW50WC1Gb1swXSxKYT1UYSpUYSxtbD1RdC50b3VjaGVzWzBdLmNsaWVudFktRm9bMV0scWY9bWwqbWwsQ3A9SmErcWY7UGM9Q3A+PXkudG91Y2hUYXBUaHJlc2hvbGQyfWlmKGpuJiZ5LnRvdWNoRGF0YS5jeHQpe1F0LnByZXZlbnREZWZhdWx0KCk7dmFyIF9wPVF0LnRvdWNoZXNbMF0uY2xpZW50WC1TbixIZj1RdC50b3VjaGVzWzBdLmNsaWVudFktV24sX2c9UXQudG91Y2hlc1sxXS5jbGllbnRYLVNuLGNkPVF0LnRvdWNoZXNbMV0uY2xpZW50WS1Xbixtdz12bihfcCxIZixfZyxjZCksTG09bXcvRW4seHg9MTUwLEYzPXh4Knh4LGt4PTEuNSxTQz1reCpreDtpZihMbT49U0N8fG13Pj1GMyl7eS50b3VjaERhdGEuY3h0PSExLHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgTjM9e29yaWdpbmFsRXZlbnQ6UXQsdHlwZToiY3h0dGFwZW5kIixwb3NpdGlvbjp7eDpzclswXSx5OnNyWzFdfX07eS50b3VjaERhdGEuc3RhcnQ/KHkudG91Y2hEYXRhLnN0YXJ0LnVuYWN0aXZhdGUoKS5lbWl0KE4zKSx5LnRvdWNoRGF0YS5zdGFydD1udWxsKTppci5lbWl0KE4zKX19aWYoam4mJnkudG91Y2hEYXRhLmN4dCl7dmFyIE4zPXtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dGRyYWciLHBvc2l0aW9uOnt4OnNyWzBdLHk6c3JbMV19fTt5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHkucmVkcmF3SGludCgic2VsZWN0IiwhMCkseS50b3VjaERhdGEuc3RhcnQ/eS50b3VjaERhdGEuc3RhcnQuZW1pdChOMyk6aXIuZW1pdChOMykseS50b3VjaERhdGEuc3RhcnQmJih5LnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkPSExKSx5LnRvdWNoRGF0YS5jeHREcmFnZ2VkPSEwO3ZhciBIZD15LmZpbmROZWFyZXN0RWxlbWVudChzclswXSxzclsxXSwhMCwhMCk7KCF5LnRvdWNoRGF0YS5jeHRPdmVyfHxIZCE9PXkudG91Y2hEYXRhLmN4dE92ZXIpJiYoeS50b3VjaERhdGEuY3h0T3ZlciYmeS50b3VjaERhdGEuY3h0T3Zlci5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dGRyYWdvdXQiLHBvc2l0aW9uOnt4OnNyWzBdLHk6c3JbMV19fSkseS50b3VjaERhdGEuY3h0T3Zlcj1IZCxIZCYmSGQuZW1pdCh7b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJjeHRkcmFnb3ZlciIscG9zaXRpb246e3g6c3JbMF0seTpzclsxXX19KSl9ZWxzZSBpZihqbiYmUXQudG91Y2hlc1syXSYmaXIuYm94U2VsZWN0aW9uRW5hYmxlZCgpKVF0LnByZXZlbnREZWZhdWx0KCkseS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0aGlzLmxhc3RUaHJlZVRvdWNoPStuZXcgRGF0ZSx5LnRvdWNoRGF0YS5zZWxlY3Rpbmd8fGlyLmVtaXQoe29yaWdpbmFsRXZlbnQ6UXQsdHlwZToiYm94c3RhcnQiLHBvc2l0aW9uOnt4OnNyWzBdLHk6c3JbMV19fSkseS50b3VjaERhdGEuc2VsZWN0aW5nPSEwLHkudG91Y2hEYXRhLmRpZFNlbGVjdD0hMCxTcls0XT0xLCFTcnx8U3IubGVuZ3RoPT09MHx8U3JbMF09PT12b2lkIDA/KFNyWzBdPShzclswXStzclsyXStzcls0XSkvMyxTclsxXT0oc3JbMV0rc3JbM10rc3JbNV0pLzMsU3JbMl09KHNyWzBdK3NyWzJdK3NyWzRdKS8zKzEsU3JbM109KHNyWzFdK3NyWzNdK3NyWzVdKS8zKzEpOihTclsyXT0oc3JbMF0rc3JbMl0rc3JbNF0pLzMsU3JbM109KHNyWzFdK3NyWzNdK3NyWzVdKS8zKSx5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHkucmVkcmF3KCk7ZWxzZSBpZihqbiYmUXQudG91Y2hlc1sxXSYmIXkudG91Y2hEYXRhLmRpZFNlbGVjdCYmaXIuem9vbWluZ0VuYWJsZWQoKSYmaXIucGFubmluZ0VuYWJsZWQoKSYmaXIudXNlclpvb21pbmdFbmFibGVkKCkmJmlyLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXtRdC5wcmV2ZW50RGVmYXVsdCgpLHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgeTE9eS5kcmFnRGF0YS50b3VjaERyYWdFbGVzO2lmKHkxKXt5LnJlZHJhd0hpbnQoImRyYWciLCEwKTtmb3IodmFyIFZkPTA7VmQ8eTEubGVuZ3RoO1ZkKyspe3ZhciBBQz15MVtWZF0uX3ByaXZhdGU7QUMuZ3JhYmJlZD0hMSxBQy5yc2NyYXRjaC5pbkRyYWdMYXllcj0hMX19dmFyIFliPXkudG91Y2hEYXRhLnN0YXJ0LF9wPVF0LnRvdWNoZXNbMF0uY2xpZW50WC1TbixIZj1RdC50b3VjaGVzWzBdLmNsaWVudFktV24sX2c9UXQudG91Y2hlc1sxXS5jbGllbnRYLVNuLGNkPVF0LnRvdWNoZXNbMV0uY2xpZW50WS1XbixkUj1lcihfcCxIZixfZyxjZCksSHR0PWRSL0dlO2lmKHVyKXt2YXIgVnR0PV9wLUZlLEd0dD1IZi13ZSxVdHQ9X2ctYm4sV3R0PWNkLXplLFl0dD0oVnR0K1V0dCkvMixLdHQ9KEd0dCtXdHQpLzIsdDg9aXIuem9vbSgpLGxNPXQ4Kkh0dCxMQz1pci5wYW4oKSxnUj1ZblswXSp0OCtMQy54LHBSPVluWzFdKnQ4K0xDLnksWHR0PXt4Oi1sTS90OCooZ1ItTEMueC1ZdHQpK2dSLHk6LWxNL3Q4KihwUi1MQy55LUt0dCkrcFJ9O2lmKFliJiZZYi5hY3RpdmUoKSl7dmFyIHkxPXkuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcztkdCh5MSkseS5yZWRyYXdIaW50KCJkcmFnIiwhMCkseS5yZWRyYXdIaW50KCJlbGVzIiwhMCksWWIudW5hY3RpdmF0ZSgpLmVtaXQoImZyZWVvbiIpLHkxLmVtaXQoImZyZWUiKSx5LmRyYWdEYXRhLmRpZERyYWcmJihZYi5lbWl0KCJkcmFnZnJlZW9uIikseTEuZW1pdCgiZHJhZ2ZyZWUiKSl9aXIudmlld3BvcnQoe3pvb206bE0scGFuOlh0dCxjYW5jZWxPbkZhaWxlZFpvb206ITB9KSxpci5lbWl0KCJwaW5jaHpvb20iKSxHZT1kUixGZT1fcCx3ZT1IZixibj1fZyx6ZT1jZCx5LnBpbmNoaW5nPSEwfWlmKFF0LnRvdWNoZXNbMF0pe3ZhciBZaT15LnByb2plY3RJbnRvVmlld3BvcnQoUXQudG91Y2hlc1swXS5jbGllbnRYLFF0LnRvdWNoZXNbMF0uY2xpZW50WSk7c3JbMF09WWlbMF0sc3JbMV09WWlbMV19aWYoUXQudG91Y2hlc1sxXSl7dmFyIFlpPXkucHJvamVjdEludG9WaWV3cG9ydChRdC50b3VjaGVzWzFdLmNsaWVudFgsUXQudG91Y2hlc1sxXS5jbGllbnRZKTtzclsyXT1ZaVswXSxzclszXT1ZaVsxXX1pZihRdC50b3VjaGVzWzJdKXt2YXIgWWk9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LnRvdWNoZXNbMl0uY2xpZW50WCxRdC50b3VjaGVzWzJdLmNsaWVudFkpO3NyWzRdPVlpWzBdLHNyWzVdPVlpWzFdfX1lbHNlIGlmKFF0LnRvdWNoZXNbMF0mJiF5LnRvdWNoRGF0YS5kaWRTZWxlY3Qpe3ZhciBTcD15LnRvdWNoRGF0YS5zdGFydCxoTT15LnRvdWNoRGF0YS5sYXN0LEhkO2lmKCF5LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMmJiF5LnN3aXBlUGFubmluZyYmKEhkPXkuZmluZE5lYXJlc3RFbGVtZW50KHNyWzBdLHNyWzFdLCEwLCEwKSksam4mJlNwIT1udWxsJiZRdC5wcmV2ZW50RGVmYXVsdCgpLGpuJiZTcCE9bnVsbCYmeS5ub2RlSXNEcmFnZ2FibGUoU3ApKWlmKFBjKXt2YXIgeTE9eS5kcmFnRGF0YS50b3VjaERyYWdFbGVzLGJSPSF5LmRyYWdEYXRhLmRpZERyYWc7YlImJm90KHkxLHtpbkRyYWdMYXllcjohMH0pLHkuZHJhZ0RhdGEuZGlkRHJhZz0hMDt2YXIgZTg9e3g6MCx5OjB9O2lmKFgoWmFbMF0pJiZYKFphWzFdKSYmKGU4LngrPVphWzBdLGU4LnkrPVphWzFdLGJSKSl7eS5yZWRyYXdIaW50KCJlbGVzIiwhMCk7dmFyIEFwPXkudG91Y2hEYXRhLmRyYWdEZWx0YTtBcCYmWChBcFswXSkmJlgoQXBbMV0pJiYoZTgueCs9QXBbMF0sZTgueSs9QXBbMV0pfXkuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMCx5MS5zaWxlbnRTaGlmdChlOCkuZW1pdCgicG9zaXRpb24gZHJhZyIpLHkucmVkcmF3SGludCgiZHJhZyIsITApLHkudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMF09PUlhWzBdJiZ5LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzFdPT1JYVsxXSYmeS5yZWRyYXdIaW50KCJlbGVzIiwhMCkseS5yZWRyYXcoKX1lbHNle3ZhciBBcD15LnRvdWNoRGF0YS5kcmFnRGVsdGE9eS50b3VjaERhdGEuZHJhZ0RlbHRhfHxbXTtBcC5sZW5ndGg9PT0wPyhBcC5wdXNoKFphWzBdKSxBcC5wdXNoKFphWzFdKSk6KEFwWzBdKz1aYVswXSxBcFsxXSs9WmFbMV0pfWlmKHgoU3B8fEhkLFsidG91Y2htb3ZlIiwidGFwZHJhZyIsInZtb3VzZW1vdmUiXSxRdCx7eDpzclswXSx5OnNyWzFdfSksKCFTcHx8IVNwLmdyYWJiZWQoKSkmJkhkIT1oTSYmKGhNJiZoTS5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6InRhcGRyYWdvdXQiLHBvc2l0aW9uOnt4OnNyWzBdLHk6c3JbMV19fSksSGQmJkhkLmVtaXQoe29yaWdpbmFsRXZlbnQ6UXQsdHlwZToidGFwZHJhZ292ZXIiLHBvc2l0aW9uOnt4OnNyWzBdLHk6c3JbMV19fSkpLHkudG91Y2hEYXRhLmxhc3Q9SGQsam4pZm9yKHZhciBWZD0wO1ZkPHNyLmxlbmd0aDtWZCsrKXNyW1ZkXSYmeS50b3VjaERhdGEuc3RhcnRQb3NpdGlvbltWZF0mJlBjJiYoeS50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMCk7aWYoam4mJihTcD09bnVsbHx8U3AucGFubmFibGUoKSkmJmlyLnBhbm5pbmdFbmFibGVkKCkmJmlyLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXt2YXIgUXR0PUwoU3AseS50b3VjaERhdGEuc3RhcnRzKTtRdHQmJihRdC5wcmV2ZW50RGVmYXVsdCgpLHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbnx8KHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj1LNSh5LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uKSkseS5zd2lwZVBhbm5pbmc/KGlyLnBhbkJ5KHt4OlphWzBdKiRyLHk6WmFbMV0qJHJ9KSxpci5lbWl0KCJkcmFncGFuIikpOlBjJiYoeS5zd2lwZVBhbm5pbmc9ITAsaXIucGFuQnkoe3g6VGEqJHIseTptbCokcn0pLGlyLmVtaXQoImRyYWdwYW4iKSxTcCYmKFNwLnVuYWN0aXZhdGUoKSx5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHkudG91Y2hEYXRhLnN0YXJ0PW51bGwpKSk7dmFyIFlpPXkucHJvamVjdEludG9WaWV3cG9ydChRdC50b3VjaGVzWzBdLmNsaWVudFgsUXQudG91Y2hlc1swXS5jbGllbnRZKTtzclswXT1ZaVswXSxzclsxXT1ZaVsxXX19Zm9yKHZhciBtYz0wO21jPHNyLmxlbmd0aDttYysrKUlhW21jXT1zclttY107am4mJlF0LnRvdWNoZXMubGVuZ3RoPjAmJiF5LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMmJiF5LnN3aXBlUGFubmluZyYmeS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uIT1udWxsJiYoeS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHkucmVkcmF3KCkpfX0sITEpO3ZhciBKcjt5LnJlZ2lzdGVyQmluZGluZyh3aW5kb3csInRvdWNoY2FuY2VsIixKcj1mdW5jdGlvbihRdCl7dmFyIGpuPXkudG91Y2hEYXRhLnN0YXJ0O3kudG91Y2hEYXRhLmNhcHR1cmU9ITEsam4mJmpuLnVuYWN0aXZhdGUoKX0pO3ZhciB2aSxYcyxFYSxDaTtpZih5LnJlZ2lzdGVyQmluZGluZyh3aW5kb3csInRvdWNoZW5kIix2aT1mdW5jdGlvbihRdCl7dmFyIGpuPXkudG91Y2hEYXRhLnN0YXJ0LFNyPXkudG91Y2hEYXRhLmNhcHR1cmU7aWYoU3IpUXQudG91Y2hlcy5sZW5ndGg9PT0wJiYoeS50b3VjaERhdGEuY2FwdHVyZT0hMSksUXQucHJldmVudERlZmF1bHQoKTtlbHNlIHJldHVybjt2YXIgaXI9eS5zZWxlY3Rpb247eS5zd2lwZVBhbm5pbmc9ITEseS5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzPSExO3ZhciBzcj15LmN5LElhPXNyLnpvb20oKSwkcj15LnRvdWNoRGF0YS5ub3csWWk9eS50b3VjaERhdGEuZWFybGllcjtpZihRdC50b3VjaGVzWzBdKXt2YXIgRm89eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LnRvdWNoZXNbMF0uY2xpZW50WCxRdC50b3VjaGVzWzBdLmNsaWVudFkpOyRyWzBdPUZvWzBdLCRyWzFdPUZvWzFdfWlmKFF0LnRvdWNoZXNbMV0pe3ZhciBGbz15LnByb2plY3RJbnRvVmlld3BvcnQoUXQudG91Y2hlc1sxXS5jbGllbnRYLFF0LnRvdWNoZXNbMV0uY2xpZW50WSk7JHJbMl09Rm9bMF0sJHJbM109Rm9bMV19aWYoUXQudG91Y2hlc1syXSl7dmFyIEZvPXkucHJvamVjdEludG9WaWV3cG9ydChRdC50b3VjaGVzWzJdLmNsaWVudFgsUXQudG91Y2hlc1syXS5jbGllbnRZKTskcls0XT1Gb1swXSwkcls1XT1Gb1sxXX1qbiYmam4udW5hY3RpdmF0ZSgpO3ZhciBQYztpZih5LnRvdWNoRGF0YS5jeHQpe2lmKFBjPXtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dHRhcGVuZCIscG9zaXRpb246e3g6JHJbMF0seTokclsxXX19LGpuP2puLmVtaXQoUGMpOnNyLmVtaXQoUGMpLCF5LnRvdWNoRGF0YS5jeHREcmFnZ2VkKXt2YXIgWmE9e29yaWdpbmFsRXZlbnQ6UXQsdHlwZToiY3h0dGFwIixwb3NpdGlvbjp7eDokclswXSx5OiRyWzFdfX07am4/am4uZW1pdChaYSk6c3IuZW1pdChaYSl9eS50b3VjaERhdGEuc3RhcnQmJih5LnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkPSExKSx5LnRvdWNoRGF0YS5jeHQ9ITEseS50b3VjaERhdGEuc3RhcnQ9bnVsbCx5LnJlZHJhdygpO3JldHVybn1pZighUXQudG91Y2hlc1syXSYmc3IuYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZ5LnRvdWNoRGF0YS5zZWxlY3Rpbmcpe3kudG91Y2hEYXRhLnNlbGVjdGluZz0hMTt2YXIgbWM9c3IuY29sbGVjdGlvbih5LmdldEFsbEluQm94KGlyWzBdLGlyWzFdLGlyWzJdLGlyWzNdKSk7aXJbMF09dm9pZCAwLGlyWzFdPXZvaWQgMCxpclsyXT12b2lkIDAsaXJbM109dm9pZCAwLGlyWzRdPTAseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSxzci5lbWl0KHt0eXBlOiJib3hlbmQiLG9yaWdpbmFsRXZlbnQ6UXQscG9zaXRpb246e3g6JHJbMF0seTokclsxXX19KTt2YXIgVGE9ZnVuY3Rpb24oRjMpe3JldHVybiBGMy5zZWxlY3RhYmxlKCkmJiFGMy5zZWxlY3RlZCgpfTttYy5lbWl0KCJib3giKS5zdGRGaWx0ZXIoVGEpLnNlbGVjdCgpLmVtaXQoImJveHNlbGVjdCIpLG1jLm5vbmVtcHR5KCkmJnkucmVkcmF3SGludCgiZWxlcyIsITApLHkucmVkcmF3KCl9aWYoam4hPW51bGwmJmpuLnVuYWN0aXZhdGUoKSxRdC50b3VjaGVzWzJdKXkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTtlbHNlIGlmKCFRdC50b3VjaGVzWzFdKXtpZighUXQudG91Y2hlc1swXSl7aWYoIVF0LnRvdWNoZXNbMF0pe3kuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgSmE9eS5kcmFnRGF0YS50b3VjaERyYWdFbGVzO2lmKGpuIT1udWxsKXt2YXIgbWw9am4uX3ByaXZhdGUuZ3JhYmJlZDtkdChKYSkseS5yZWRyYXdIaW50KCJkcmFnIiwhMCkseS5yZWRyYXdIaW50KCJlbGVzIiwhMCksbWwmJihqbi5lbWl0KCJmcmVlb24iKSxKYS5lbWl0KCJmcmVlIikseS5kcmFnRGF0YS5kaWREcmFnJiYoam4uZW1pdCgiZHJhZ2ZyZWVvbiIpLEphLmVtaXQoImRyYWdmcmVlIikpKSx4KGpuLFsidG91Y2hlbmQiLCJ0YXBlbmQiLCJ2bW91c2V1cCIsInRhcGRyYWdvdXQiXSxRdCx7eDokclswXSx5OiRyWzFdfSksam4udW5hY3RpdmF0ZSgpLHkudG91Y2hEYXRhLnN0YXJ0PW51bGx9ZWxzZXt2YXIgcWY9eS5maW5kTmVhcmVzdEVsZW1lbnQoJHJbMF0sJHJbMV0sITAsITApO3gocWYsWyJ0b3VjaGVuZCIsInRhcGVuZCIsInZtb3VzZXVwIiwidGFwZHJhZ291dCJdLFF0LHt4OiRyWzBdLHk6JHJbMV19KX12YXIgQ3A9eS50b3VjaERhdGEuc3RhcnRQb3NpdGlvblswXS0kclswXSxfcD1DcCpDcCxIZj15LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzFdLSRyWzFdLF9nPUhmKkhmLGNkPV9wK19nLG13PWNkKklhKklhO3kudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWR8fChqbnx8c3IuJCgiOnNlbGVjdGVkIikudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKSx4KGpuLFsidGFwIiwidmNsaWNrIl0sUXQse3g6JHJbMF0seTokclsxXX0pLFhzPSExLFF0LnRpbWVTdGFtcC1DaTw9c3IubXVsdGlDbGlja0RlYm91bmNlVGltZSgpPyhFYSYmY2xlYXJUaW1lb3V0KEVhKSxYcz0hMCxDaT1udWxsLHgoam4sWyJkYmx0YXAiLCJ2ZGJsY2xpY2siXSxRdCx7eDokclswXSx5OiRyWzFdfSkpOihFYT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7WHN8fHgoam4sWyJvbmV0YXAiLCJ2b25lY2xpY2siXSxRdCx7eDokclswXSx5OiRyWzFdfSl9LHNyLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKSksQ2k9UXQudGltZVN0YW1wKSksam4hPW51bGwmJiF5LmRyYWdEYXRhLmRpZERyYWcmJmpuLl9wcml2YXRlLnNlbGVjdGFibGUmJm13PHkudG91Y2hUYXBUaHJlc2hvbGQyJiYheS5waW5jaGluZyYmKHNyLnNlbGVjdGlvblR5cGUoKT09PSJzaW5nbGUiPyhzci4kKGcpLnVubWVyZ2Uoam4pLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSksam4uc2VsZWN0KFsidGFwc2VsZWN0Il0pKTpqbi5zZWxlY3RlZCgpP2puLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSk6am4uc2VsZWN0KFsidGFwc2VsZWN0Il0pLHkucmVkcmF3SGludCgiZWxlcyIsITApKSx5LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSEwfX19Zm9yKHZhciBMbT0wO0xtPCRyLmxlbmd0aDtMbSsrKVlpW0xtXT0kcltMbV07eS5kcmFnRGF0YS5kaWREcmFnPSExLFF0LnRvdWNoZXMubGVuZ3RoPT09MCYmKHkudG91Y2hEYXRhLmRyYWdEZWx0YT1bXSx5LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uPW51bGwseS50b3VjaERhdGEuc3RhcnRHUG9zaXRpb249bnVsbCx5LnRvdWNoRGF0YS5kaWRTZWxlY3Q9ITEpLFF0LnRvdWNoZXMubGVuZ3RoPDImJihRdC50b3VjaGVzLmxlbmd0aD09PTEmJih5LnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbj1bUXQudG91Y2hlc1swXS5jbGllbnRYLFF0LnRvdWNoZXNbMF0uY2xpZW50WV0pLHkucGluY2hpbmc9ITEseS5yZWRyYXdIaW50KCJlbGVzIiwhMCkseS5yZWRyYXcoKSl9LCExKSx0eXBlb2YgVG91Y2hFdmVudD4idSIpe3ZhciBoaT1bXSxncz1mdW5jdGlvbihRdCl7cmV0dXJue2NsaWVudFg6UXQuY2xpZW50WCxjbGllbnRZOlF0LmNsaWVudFksZm9yY2U6MSxpZGVudGlmaWVyOlF0LnBvaW50ZXJJZCxwYWdlWDpRdC5wYWdlWCxwYWdlWTpRdC5wYWdlWSxyYWRpdXNYOlF0LndpZHRoLzIscmFkaXVzWTpRdC5oZWlnaHQvMixzY3JlZW5YOlF0LnNjcmVlblgsc2NyZWVuWTpRdC5zY3JlZW5ZLHRhcmdldDpRdC50YXJnZXR9fSxxaT1mdW5jdGlvbihRdCl7cmV0dXJue2V2ZW50OlF0LHRvdWNoOmdzKFF0KX19LFNpPWZ1bmN0aW9uKFF0KXtoaS5wdXNoKHFpKFF0KSl9LFVpPWZ1bmN0aW9uKFF0KXtmb3IodmFyIGpuPTA7am48aGkubGVuZ3RoO2puKyspe3ZhciBTcj1oaVtqbl07aWYoU3IuZXZlbnQucG9pbnRlcklkPT09UXQucG9pbnRlcklkKXtoaS5zcGxpY2Uoam4sMSk7cmV0dXJufX19LFZhPWZ1bmN0aW9uKFF0KXt2YXIgam49aGkuZmlsdGVyKGZ1bmN0aW9uKFNyKXtyZXR1cm4gU3IuZXZlbnQucG9pbnRlcklkPT09UXQucG9pbnRlcklkfSlbMF07am4uZXZlbnQ9UXQsam4udG91Y2g9Z3MoUXQpfSxRcz1mdW5jdGlvbihRdCl7UXQudG91Y2hlcz1oaS5tYXAoZnVuY3Rpb24oam4pe3JldHVybiBqbi50b3VjaH0pfSxxcz1mdW5jdGlvbihRdCl7cmV0dXJuIFF0LnBvaW50ZXJUeXBlPT09Im1vdXNlInx8UXQucG9pbnRlclR5cGU9PT00fTt5LnJlZ2lzdGVyQmluZGluZyh5LmNvbnRhaW5lciwicG9pbnRlcmRvd24iLGZ1bmN0aW9uKFRyKXtxcyhUcil8fChUci5wcmV2ZW50RGVmYXVsdCgpLFNpKFRyKSxRcyhUciksZ3IoVHIpKX0pLHkucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJwb2ludGVydXAiLGZ1bmN0aW9uKFRyKXtxcyhUcil8fChVaShUciksUXMoVHIpLHZpKFRyKSl9KSx5LnJlZ2lzdGVyQmluZGluZyh5LmNvbnRhaW5lciwicG9pbnRlcmNhbmNlbCIsZnVuY3Rpb24oVHIpe3FzKFRyKXx8KFVpKFRyKSxRcyhUciksSnIoVHIpKX0pLHkucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJwb2ludGVybW92ZSIsZnVuY3Rpb24oVHIpe3FzKFRyKXx8KFRyLnByZXZlbnREZWZhdWx0KCksVmEoVHIpLFFzKFRyKSxmcihUcikpfSl9fTt2YXIgYnc9e307YncuZ2VuZXJhdGVQb2x5Z29uPWZ1bmN0aW9uKHksZyl7cmV0dXJuIHRoaXMubm9kZVNoYXBlc1t5XT17cmVuZGVyZXI6dGhpcyxuYW1lOnkscG9pbnRzOmcsZHJhdzpmdW5jdGlvbihULEwsTyxQLCQpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCgicG9seWdvbiIsVCxMLE8sUCwkLHRoaXMucG9pbnRzKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihULEwsTyxQLCQscSxTKXtyZXR1cm4gQWsoJCxxLHRoaXMucG9pbnRzLFQsTCxPLzIsUC8yLFMpfSxjaGVja1BvaW50OmZ1bmN0aW9uKFQsTCxPLFAsJCxxLFMpe3JldHVybiBkdyhULEwsdGhpcy5wb2ludHMscSxTLFAsJCxbMCwtMV0sTyl9fX0sYncuZ2VuZXJhdGVFbGxpcHNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlcy5lbGxpcHNlPXtyZW5kZXJlcjp0aGlzLG5hbWU6ImVsbGlwc2UiLGRyYXc6ZnVuY3Rpb24oZyx4LFQsTCxPKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGcseCxULEwsTyl9LGludGVyc2VjdExpbmU6ZnVuY3Rpb24oZyx4LFQsTCxPLFAsJCl7cmV0dXJuIFdLKE8sUCxnLHgsVC8yKyQsTC8yKyQpfSxjaGVja1BvaW50OmZ1bmN0aW9uKGcseCxULEwsTyxQLCQpe3JldHVybiBTMyhnLHgsTCxPLFAsJCxUKX19fSxidy5nZW5lcmF0ZVJvdW5kUG9seWdvbj1mdW5jdGlvbih5LGcpe2Zvcih2YXIgeD1uZXcgQXJyYXkoZy5sZW5ndGgqMiksVD0wO1Q8Zy5sZW5ndGgvMjtUKyspe3ZhciBMPVQqMixPPXZvaWQgMDtUPGcubGVuZ3RoLzItMT9PPShUKzEpKjI6Tz0wLHhbVCo0XT1nW0xdLHhbVCo0KzFdPWdbTCsxXTt2YXIgUD1nW09dLWdbTF0sJD1nW08rMV0tZ1tMKzFdLHE9TWF0aC5zcXJ0KFAqUCskKiQpO3hbVCo0KzJdPVAvcSx4W1QqNCszXT0kL3F9cmV0dXJuIHRoaXMubm9kZVNoYXBlc1t5XT17cmVuZGVyZXI6dGhpcyxuYW1lOnkscG9pbnRzOngsZHJhdzpmdW5jdGlvbihWLFkscnQsb3QsaHQpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCgicm91bmQtcG9seWdvbiIsVixZLHJ0LG90LGh0LHRoaXMucG9pbnRzKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihWLFkscnQsb3QsaHQsZHQsTHQpe3JldHVybiBZSyhodCxkdCx0aGlzLnBvaW50cyxWLFkscnQsb3QpfSxjaGVja1BvaW50OmZ1bmN0aW9uKFYsWSxydCxvdCxodCxkdCxMdCl7cmV0dXJuIFVLKFYsWSx0aGlzLnBvaW50cyxkdCxMdCxvdCxodCl9fX0sYncuZ2VuZXJhdGVSb3VuZFJlY3RhbmdsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbInJvdW5kLXJlY3RhbmdsZSJdPXRoaXMubm9kZVNoYXBlcy5yb3VuZHJlY3RhbmdsZT17cmVuZGVyZXI6dGhpcyxuYW1lOiJyb3VuZC1yZWN0YW5nbGUiLHBvaW50czpzZCg0LDApLGRyYXc6ZnVuY3Rpb24oZyx4LFQsTCxPKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGcseCxULEwsTyl9LGludGVyc2VjdExpbmU6ZnVuY3Rpb24oZyx4LFQsTCxPLFAsJCl7cmV0dXJuIGZOKE8sUCxnLHgsVCxMLCQpfSxjaGVja1BvaW50OmZ1bmN0aW9uKGcseCxULEwsTyxQLCQpe3ZhciBxPUxrKEwsTyksUz1xKjI7cmV0dXJuISEoZHcoZyx4LHRoaXMucG9pbnRzLFAsJCxMLE8tUyxbMCwtMV0sVCl8fGR3KGcseCx0aGlzLnBvaW50cyxQLCQsTC1TLE8sWzAsLTFdLFQpfHxTMyhnLHgsUyxTLFAtTC8yK3EsJC1PLzIrcSxUKXx8UzMoZyx4LFMsUyxQK0wvMi1xLCQtTy8yK3EsVCl8fFMzKGcseCxTLFMsUCtMLzItcSwkK08vMi1xLFQpfHxTMyhnLHgsUyxTLFAtTC8yK3EsJCtPLzItcSxUKSl9fX0sYncuZ2VuZXJhdGVDdXRSZWN0YW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzWyJjdXQtcmVjdGFuZ2xlIl09dGhpcy5ub2RlU2hhcGVzLmN1dHJlY3RhbmdsZT17cmVuZGVyZXI6dGhpcyxuYW1lOiJjdXQtcmVjdGFuZ2xlIixjb3JuZXJMZW5ndGg6Yk4oKSxwb2ludHM6c2QoNCwwKSxkcmF3OmZ1bmN0aW9uKGcseCxULEwsTyl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSxnLHgsVCxMLE8pfSxnZW5lcmF0ZUN1dFRyaWFuZ2xlUHRzOmZ1bmN0aW9uKGcseCxULEwpe3ZhciBPPXRoaXMuY29ybmVyTGVuZ3RoLFA9eC8yLCQ9Zy8yLHE9VC0kLFM9VCskLFY9TC1QLFk9TCtQO3JldHVybnt0b3BMZWZ0OltxLFYrTyxxK08sVixxK08sVitPXSx0b3BSaWdodDpbUy1PLFYsUyxWK08sUy1PLFYrT10sYm90dG9tUmlnaHQ6W1MsWS1PLFMtTyxZLFMtTyxZLU9dLGJvdHRvbUxlZnQ6W3ErTyxZLHEsWS1PLHErTyxZLU9dfX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihnLHgsVCxMLE8sUCwkKXt2YXIgcT10aGlzLmdlbmVyYXRlQ3V0VHJpYW5nbGVQdHMoVCsyKiQsTCsyKiQsZyx4KSxTPVtdLmNvbmNhdC5hcHBseShbXSxbcS50b3BMZWZ0LnNwbGljZSgwLDQpLHEudG9wUmlnaHQuc3BsaWNlKDAsNCkscS5ib3R0b21SaWdodC5zcGxpY2UoMCw0KSxxLmJvdHRvbUxlZnQuc3BsaWNlKDAsNCldKTtyZXR1cm4gQWsoTyxQLFMsZyx4KX0sY2hlY2tQb2ludDpmdW5jdGlvbihnLHgsVCxMLE8sUCwkKXtpZihkdyhnLHgsdGhpcy5wb2ludHMsUCwkLEwsTy0yKnRoaXMuY29ybmVyTGVuZ3RoLFswLC0xXSxUKXx8ZHcoZyx4LHRoaXMucG9pbnRzLFAsJCxMLTIqdGhpcy5jb3JuZXJMZW5ndGgsTyxbMCwtMV0sVCkpcmV0dXJuITA7dmFyIHE9dGhpcy5nZW5lcmF0ZUN1dFRyaWFuZ2xlUHRzKEwsTyxQLCQpO3JldHVybiBxZChnLHgscS50b3BMZWZ0KXx8cWQoZyx4LHEudG9wUmlnaHQpfHxxZChnLHgscS5ib3R0b21SaWdodCl8fHFkKGcseCxxLmJvdHRvbUxlZnQpfX19LGJ3LmdlbmVyYXRlQmFycmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlcy5iYXJyZWw9e3JlbmRlcmVyOnRoaXMsbmFtZToiYmFycmVsIixwb2ludHM6c2QoNCwwKSxkcmF3OmZ1bmN0aW9uKGcseCxULEwsTyl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSxnLHgsVCxMLE8pfSxpbnRlcnNlY3RMaW5lOmZ1bmN0aW9uKGcseCxULEwsTyxQLCQpe3ZhciBxPS4xNSxTPS41LFY9Ljg1LFk9dGhpcy5nZW5lcmF0ZUJhcnJlbEJlemllclB0cyhUKzIqJCxMKzIqJCxnLHgpLHJ0PWZ1bmN0aW9uKGR0KXt2YXIgTHQ9WDUoe3g6ZHRbMF0seTpkdFsxXX0se3g6ZHRbMl0seTpkdFszXX0se3g6ZHRbNF0seTpkdFs1XX0scSksa3Q9WDUoe3g6ZHRbMF0seTpkdFsxXX0se3g6ZHRbMl0seTpkdFszXX0se3g6ZHRbNF0seTpkdFs1XX0sUyksRHQ9WDUoe3g6ZHRbMF0seTpkdFsxXX0se3g6ZHRbMl0seTpkdFszXX0se3g6ZHRbNF0seTpkdFs1XX0sVik7cmV0dXJuW2R0WzBdLGR0WzFdLEx0LngsTHQueSxrdC54LGt0LnksRHQueCxEdC55LGR0WzRdLGR0WzVdXX0sb3Q9W10uY29uY2F0KHJ0KFkudG9wTGVmdCkscnQoWS50b3BSaWdodCkscnQoWS5ib3R0b21SaWdodCkscnQoWS5ib3R0b21MZWZ0KSk7cmV0dXJuIEFrKE8sUCxvdCxnLHgpfSxnZW5lcmF0ZUJhcnJlbEJlemllclB0czpmdW5jdGlvbihnLHgsVCxMKXt2YXIgTz14LzIsUD1nLzIsJD1ULVAscT1UK1AsUz1MLU8sVj1MK08sWT1JTChnLHgpLHJ0PVkuaGVpZ2h0T2Zmc2V0LG90PVkud2lkdGhPZmZzZXQsaHQ9WS5jdHJsUHRPZmZzZXRQY3QqZyxkdD17dG9wTGVmdDpbJCxTK3J0LCQraHQsUywkK290LFNdLHRvcFJpZ2h0OltxLW90LFMscS1odCxTLHEsUytydF0sYm90dG9tUmlnaHQ6W3EsVi1ydCxxLWh0LFYscS1vdCxWXSxib3R0b21MZWZ0OlskK290LFYsJCtodCxWLCQsVi1ydF19O3JldHVybiBkdC50b3BMZWZ0LmlzVG9wPSEwLGR0LnRvcFJpZ2h0LmlzVG9wPSEwLGR0LmJvdHRvbUxlZnQuaXNCb3R0b209ITAsZHQuYm90dG9tUmlnaHQuaXNCb3R0b209ITAsZHR9LGNoZWNrUG9pbnQ6ZnVuY3Rpb24oZyx4LFQsTCxPLFAsJCl7dmFyIHE9SUwoTCxPKSxTPXEuaGVpZ2h0T2Zmc2V0LFY9cS53aWR0aE9mZnNldDtpZihkdyhnLHgsdGhpcy5wb2ludHMsUCwkLEwsTy0yKlMsWzAsLTFdLFQpfHxkdyhnLHgsdGhpcy5wb2ludHMsUCwkLEwtMipWLE8sWzAsLTFdLFQpKXJldHVybiEwO2Zvcih2YXIgWT10aGlzLmdlbmVyYXRlQmFycmVsQmV6aWVyUHRzKEwsTyxQLCQpLHJ0PWZ1bmN0aW9uKHF0LG5lLEd0KXt2YXIgZ2U9R3RbNF0sYmU9R3RbMl0saWU9R3RbMF0sRmU9R3RbNV0sd2U9R3RbMV0sYm49TWF0aC5taW4oZ2UsaWUpLHplPU1hdGgubWF4KGdlLGllKSxHZT1NYXRoLm1pbihGZSx3ZSksRW49TWF0aC5tYXgoRmUsd2UpO2lmKGJuPD1xdCYmcXQ8PXplJiZHZTw9bmUmJm5lPD1Fbil7dmFyIEluPUtLKGdlLGJlLGllKSxZbj1xSyhJblswXSxJblsxXSxJblsyXSxxdCksU249WW4uZmlsdGVyKGZ1bmN0aW9uKFduKXtyZXR1cm4gMDw9V24mJlduPD0xfSk7aWYoU24ubGVuZ3RoPjApcmV0dXJuIFNuWzBdfXJldHVybiBudWxsfSxvdD1PYmplY3Qua2V5cyhZKSxodD0wO2h0PG90Lmxlbmd0aDtodCsrKXt2YXIgZHQ9b3RbaHRdLEx0PVlbZHRdLGt0PXJ0KGcseCxMdCk7aWYoa3QhPW51bGwpe3ZhciBEdD1MdFs1XSxQdD1MdFszXSwkdD1MdFsxXSxadD1vZihEdCxQdCwkdCxrdCk7aWYoTHQuaXNUb3AmJlp0PD14fHxMdC5pc0JvdHRvbSYmeDw9WnQpcmV0dXJuITB9fXJldHVybiExfX19LGJ3LmdlbmVyYXRlQm90dG9tUm91bmRyZWN0YW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzWyJib3R0b20tcm91bmQtcmVjdGFuZ2xlIl09dGhpcy5ub2RlU2hhcGVzLmJvdHRvbXJvdW5kcmVjdGFuZ2xlPXtyZW5kZXJlcjp0aGlzLG5hbWU6ImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiLHBvaW50czpzZCg0LDApLGRyYXc6ZnVuY3Rpb24oZyx4LFQsTCxPKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGcseCxULEwsTyl9LGludGVyc2VjdExpbmU6ZnVuY3Rpb24oZyx4LFQsTCxPLFAsJCl7dmFyIHE9Zy0oVC8yKyQpLFM9eC0oTC8yKyQpLFY9UyxZPWcrKFQvMiskKSxydD15bShPLFAsZyx4LHEsUyxZLFYsITEpO3JldHVybiBydC5sZW5ndGg+MD9ydDpmTihPLFAsZyx4LFQsTCwkKX0sY2hlY2tQb2ludDpmdW5jdGlvbihnLHgsVCxMLE8sUCwkKXt2YXIgcT1MayhMLE8pLFM9MipxO2lmKGR3KGcseCx0aGlzLnBvaW50cyxQLCQsTCxPLVMsWzAsLTFdLFQpfHxkdyhnLHgsdGhpcy5wb2ludHMsUCwkLEwtUyxPLFswLC0xXSxUKSlyZXR1cm4hMDt2YXIgVj1MLzIrMipULFk9Ty8yKzIqVCxydD1bUC1WLCQtWSxQLVYsJCxQK1YsJCxQK1YsJC1ZXTtyZXR1cm4hIShxZChnLHgscnQpfHxTMyhnLHgsUyxTLFArTC8yLXEsJCtPLzItcSxUKXx8UzMoZyx4LFMsUyxQLUwvMitxLCQrTy8yLXEsVCkpfX19LGJ3LnJlZ2lzdGVyTm9kZVNoYXBlcz1mdW5jdGlvbigpe3ZhciB5PXRoaXMubm9kZVNoYXBlcz17fSxnPXRoaXM7dGhpcy5nZW5lcmF0ZUVsbGlwc2UoKSx0aGlzLmdlbmVyYXRlUG9seWdvbigidHJpYW5nbGUiLHNkKDMsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLXRyaWFuZ2xlIixzZCgzLDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigicmVjdGFuZ2xlIixzZCg0LDApKSx5LnNxdWFyZT15LnJlY3RhbmdsZSx0aGlzLmdlbmVyYXRlUm91bmRSZWN0YW5nbGUoKSx0aGlzLmdlbmVyYXRlQ3V0UmVjdGFuZ2xlKCksdGhpcy5nZW5lcmF0ZUJhcnJlbCgpLHRoaXMuZ2VuZXJhdGVCb3R0b21Sb3VuZHJlY3RhbmdsZSgpO3t2YXIgeD1bMCwxLDEsMCwwLC0xLC0xLDBdO3RoaXMuZ2VuZXJhdGVQb2x5Z29uKCJkaWFtb25kIix4KSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC1kaWFtb25kIix4KX10aGlzLmdlbmVyYXRlUG9seWdvbigicGVudGFnb24iLHNkKDUsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLXBlbnRhZ29uIixzZCg1LDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigiaGV4YWdvbiIsc2QoNiwwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtaGV4YWdvbiIsc2QoNiwwKSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oImhlcHRhZ29uIixzZCg3LDApKSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC1oZXB0YWdvbiIsc2QoNywwKSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oIm9jdGFnb24iLHNkKDgsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLW9jdGFnb24iLHNkKDgsMCkpO3ZhciBUPW5ldyBBcnJheSgyMCk7e3ZhciBMPU1MKDUsMCksTz1NTCg1LE1hdGguUEkvNSksUD0uNSooMy1NYXRoLnNxcnQoNSkpO1AqPTEuNTc7Zm9yKHZhciAkPTA7JDxPLmxlbmd0aC8yOyQrKylPWyQqMl0qPVAsT1skKjIrMV0qPVA7Zm9yKHZhciAkPTA7JDwyMC80OyQrKylUWyQqNF09TFskKjJdLFRbJCo0KzFdPUxbJCoyKzFdLFRbJCo0KzJdPU9bJCoyXSxUWyQqNCszXT1PWyQqMisxXX1UPXBOKFQpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJzdGFyIixUKSx0aGlzLmdlbmVyYXRlUG9seWdvbigidmVlIixbLTEsLTEsMCwtLjMzMywxLC0xLDAsMV0pLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJyaG9tYm9pZCIsWy0xLC0xLC4zMzMsLTEsMSwxLC0uMzMzLDFdKSx0aGlzLm5vZGVTaGFwZXMuY29uY2F2ZWhleGFnb249dGhpcy5nZW5lcmF0ZVBvbHlnb24oImNvbmNhdmUtaGV4YWdvbiIsWy0xLC0uOTUsLS43NSwwLC0xLC45NSwxLC45NSwuNzUsMCwxLC0uOTVdKTt7dmFyIHE9Wy0xLC0xLC4yNSwtMSwxLDAsLjI1LDEsLTEsMV07dGhpcy5nZW5lcmF0ZVBvbHlnb24oInRhZyIscSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtdGFnIixxKX15Lm1ha2VQb2x5Z29uPWZ1bmN0aW9uKFMpe3ZhciBWPVMuam9pbigiJCIpLFk9InBvbHlnb24tIitWLHJ0O3JldHVybihydD10aGlzW1ldKT9ydDpnLmdlbmVyYXRlUG9seWdvbihZLFMpfX07dmFyIFlrPXt9O1lrLnRpbWVUb1JlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZHJhd1RvdGFsVGltZS90aGlzLnJlZHJhd0NvdW50fSxZay5yZWRyYXc9ZnVuY3Rpb24oeSl7eT15fHxzTigpO3ZhciBnPXRoaXM7Zy5hdmVyYWdlUmVkcmF3VGltZT09PXZvaWQgMCYmKGcuYXZlcmFnZVJlZHJhd1RpbWU9MCksZy5sYXN0UmVkcmF3VGltZT09PXZvaWQgMCYmKGcubGFzdFJlZHJhd1RpbWU9MCksZy5sYXN0RHJhd1RpbWU9PT12b2lkIDAmJihnLmxhc3REcmF3VGltZT0wKSxnLnJlcXVlc3RlZEZyYW1lPSEwLGcucmVuZGVyT3B0aW9ucz15fSxZay5iZWZvcmVSZW5kZXI9ZnVuY3Rpb24oeSxnKXtpZighdGhpcy5kZXN0cm95ZWQpe2c9PW51bGwmJnZsKCJQcmlvcml0eSBpcyBub3Qgb3B0aW9uYWwgZm9yIGJlZm9yZVJlbmRlciIpO3ZhciB4PXRoaXMuYmVmb3JlUmVuZGVyQ2FsbGJhY2tzO3gucHVzaCh7Zm46eSxwcmlvcml0eTpnfSkseC5zb3J0KGZ1bmN0aW9uKFQsTCl7cmV0dXJuIEwucHJpb3JpdHktVC5wcmlvcml0eX0pfX07dmFyIG5SPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEw9Zy5iZWZvcmVSZW5kZXJDYWxsYmFja3MsTz0wO088TC5sZW5ndGg7TysrKUxbT10uZm4oeCxUKX07WWsuc3RhcnRSZW5kZXJMb29wPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcyxnPXkuY3k7aWYoIXkucmVuZGVyTG9vcFN0YXJ0ZWQpe3kucmVuZGVyTG9vcFN0YXJ0ZWQ9ITA7dmFyIHg9ZnVuY3Rpb24gVChMKXtpZigheS5kZXN0cm95ZWQpe2lmKCFnLmJhdGNoaW5nKCkpaWYoeS5yZXF1ZXN0ZWRGcmFtZSYmIXkuc2tpcEZyYW1lKXtuUih5LCEwLEwpO3ZhciBPPXlnKCk7eS5yZW5kZXIoeS5yZW5kZXJPcHRpb25zKTt2YXIgUD15Lmxhc3REcmF3VGltZT15ZygpO3kuYXZlcmFnZVJlZHJhd1RpbWU9PT12b2lkIDAmJih5LmF2ZXJhZ2VSZWRyYXdUaW1lPVAtTykseS5yZWRyYXdDb3VudD09PXZvaWQgMCYmKHkucmVkcmF3Q291bnQ9MCkseS5yZWRyYXdDb3VudCsrLHkucmVkcmF3VG90YWxUaW1lPT09dm9pZCAwJiYoeS5yZWRyYXdUb3RhbFRpbWU9MCk7dmFyICQ9UC1PO3kucmVkcmF3VG90YWxUaW1lKz0kLHkubGFzdFJlZHJhd1RpbWU9JCx5LmF2ZXJhZ2VSZWRyYXdUaW1lPXkuYXZlcmFnZVJlZHJhd1RpbWUvMiskLzIseS5yZXF1ZXN0ZWRGcmFtZT0hMX1lbHNlIG5SKHksITEsTCk7eS5za2lwRnJhbWU9ITEsQmYoVCl9fTtCZih4KX19O3ZhciBmdHQ9ZnVuY3Rpb24oZyl7dGhpcy5pbml0KGcpfSxuTT1mdHQsSTM9bk0ucHJvdG90eXBlO0kzLmNsaWVudEZ1bmN0aW9ucz1bInJlZHJhd0hpbnQiLCJyZW5kZXIiLCJyZW5kZXJUbyIsIm1hdGNoQ2FudmFzU2l6ZSIsIm5vZGVTaGFwZUltcGwiLCJhcnJvd1NoYXBlSW1wbCJdLEkzLmluaXQ9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcztnLm9wdGlvbnM9eSxnLmN5PXkuY3k7dmFyIHg9Zy5jb250YWluZXI9eS5jeS5jb250YWluZXIoKTtpZihSKXt2YXIgVD1SLmRvY3VtZW50LEw9VC5oZWFkLE89Il9fX19fX19fX19jeXRvc2NhcGVfc3R5bGVzaGVldCIsUD0iX19fX19fX19fX2N5dG9zY2FwZV9jb250YWluZXIiLCQ9VC5nZXRFbGVtZW50QnlJZChPKSE9bnVsbDtpZih4LmNsYXNzTmFtZS5pbmRleE9mKFApPDAmJih4LmNsYXNzTmFtZT0oeC5jbGFzc05hbWV8fCIiKSsiICIrUCksISQpe3ZhciBxPVQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtxLmlkPU8scS5pbm5lckhUTUw9Ii4iK1ArIiB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgfSIsTC5pbnNlcnRCZWZvcmUocSxMLmNoaWxkcmVuWzBdKX12YXIgUz1SLmdldENvbXB1dGVkU3R5bGUoeCksVj1TLmdldFByb3BlcnR5VmFsdWUoInBvc2l0aW9uIik7Vj09PSJzdGF0aWMiJiZTYygiQSBDeXRvc2NhcGUgY29udGFpbmVyIGhhcyBzdHlsZSBwb3NpdGlvbjpzdGF0aWMgYW5kIHNvIGNhbiBub3QgdXNlIFVJIGV4dGVuc2lvbnMgcHJvcGVybHkiKX1nLnNlbGVjdGlvbj1bdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLDBdLGcuYmV6aWVyUHJvalBjdHM9Wy4wNSwuMjI1LC40LC41LC42LC43NzUsLjk1XSxnLmhvdmVyRGF0YT17ZG93bjpudWxsLGxhc3Q6bnVsbCxkb3duVGltZTpudWxsLHRyaWdnZXJNb2RlOm51bGwsZHJhZ2dpbmc6ITEsaW5pdGlhbFBhbjpbbnVsbCxudWxsXSxjYXB0dXJlOiExfSxnLmRyYWdEYXRhPXtwb3NzaWJsZURyYWdFbGVtZW50czpbXX0sZy50b3VjaERhdGE9e3N0YXJ0Om51bGwsY2FwdHVyZTohMSxzdGFydFBvc2l0aW9uOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sc2luZ2xlVG91Y2hTdGFydFRpbWU6bnVsbCxzaW5nbGVUb3VjaE1vdmVkOiEwLG5vdzpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLGVhcmxpZXI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXX0sZy5yZWRyYXdzPTAsZy5zaG93RnBzPXkuc2hvd0ZwcyxnLmRlYnVnPXkuZGVidWcsZy5oaWRlRWRnZXNPblZpZXdwb3J0PXkuaGlkZUVkZ2VzT25WaWV3cG9ydCxnLnRleHR1cmVPblZpZXdwb3J0PXkudGV4dHVyZU9uVmlld3BvcnQsZy53aGVlbFNlbnNpdGl2aXR5PXkud2hlZWxTZW5zaXRpdml0eSxnLm1vdGlvbkJsdXJFbmFibGVkPXkubW90aW9uQmx1cixnLmZvcmNlZFBpeGVsUmF0aW89WCh5LnBpeGVsUmF0aW8pP3kucGl4ZWxSYXRpbzpudWxsLGcubW90aW9uQmx1cj15Lm1vdGlvbkJsdXIsZy5tb3Rpb25CbHVyT3BhY2l0eT15Lm1vdGlvbkJsdXJPcGFjaXR5LGcubW90aW9uQmx1clRyYW5zcGFyZW5jeT0xLWcubW90aW9uQmx1ck9wYWNpdHksZy5tb3Rpb25CbHVyUHhSYXRpbz0xLGcubWJQeFJCbHVycnk9MSxnLm1pbk1iTG93UXVhbEZyYW1lcz00LGcuZnVsbFF1YWxpdHlNYj0hMSxnLmNsZWFyZWRGb3JNb3Rpb25CbHVyPVtdLGcuZGVza3RvcFRhcFRocmVzaG9sZD15LmRlc2t0b3BUYXBUaHJlc2hvbGQsZy5kZXNrdG9wVGFwVGhyZXNob2xkMj15LmRlc2t0b3BUYXBUaHJlc2hvbGQqeS5kZXNrdG9wVGFwVGhyZXNob2xkLGcudG91Y2hUYXBUaHJlc2hvbGQ9eS50b3VjaFRhcFRocmVzaG9sZCxnLnRvdWNoVGFwVGhyZXNob2xkMj15LnRvdWNoVGFwVGhyZXNob2xkKnkudG91Y2hUYXBUaHJlc2hvbGQsZy50YXBob2xkRHVyYXRpb249NTAwLGcuYmluZGluZ3M9W10sZy5iZWZvcmVSZW5kZXJDYWxsYmFja3M9W10sZy5iZWZvcmVSZW5kZXJQcmlvcml0aWVzPXthbmltYXRpb25zOjQwMCxlbGVDYWxjczozMDAsZWxlVHhyRGVxOjIwMCxseXJUeHJEZXE6MTUwLGx5clR4clNraXA6MTAwfSxnLnJlZ2lzdGVyTm9kZVNoYXBlcygpLGcucmVnaXN0ZXJBcnJvd1NoYXBlcygpLGcucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycygpfSxJMy5ub3RpZnk9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLFQ9eC5jeTtpZighdGhpcy5kZXN0cm95ZWQpe2lmKHk9PT0iaW5pdCIpe3gubG9hZCgpO3JldHVybn1pZih5PT09ImRlc3Ryb3kiKXt4LmRlc3Ryb3koKTtyZXR1cm59KHk9PT0iYWRkInx8eT09PSJyZW1vdmUifHx5PT09Im1vdmUiJiZULmhhc0NvbXBvdW5kTm9kZXMoKXx8eT09PSJsb2FkInx8eT09PSJ6b3JkZXIifHx5PT09Im1vdW50IikmJnguaW52YWxpZGF0ZUNhY2hlZFpTb3J0ZWRFbGVzKCkseT09PSJ2aWV3cG9ydCImJngucmVkcmF3SGludCgic2VsZWN0IiwhMCksKHk9PT0ibG9hZCJ8fHk9PT0icmVzaXplInx8eT09PSJtb3VudCIpJiYoeC5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGUoKSx4Lm1hdGNoQ2FudmFzU2l6ZSh4LmNvbnRhaW5lcikpLHgucmVkcmF3SGludCgiZWxlcyIsITApLHgucmVkcmF3SGludCgiZHJhZyIsITApLHRoaXMuc3RhcnRSZW5kZXJMb29wKCksdGhpcy5yZWRyYXcoKX19LEkzLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgeT10aGlzO3kuZGVzdHJveWVkPSEwLHkuY3kuc3RvcEFuaW1hdGlvbkxvb3AoKTtmb3IodmFyIGc9MDtnPHkuYmluZGluZ3MubGVuZ3RoO2crKyl7dmFyIHg9eS5iaW5kaW5nc1tnXSxUPXgsTD1ULnRhcmdldDsoTC5vZmZ8fEwucmVtb3ZlRXZlbnRMaXN0ZW5lcikuYXBwbHkoTCxULmFyZ3MpfWlmKHkuYmluZGluZ3M9W10seS5iZWZvcmVSZW5kZXJDYWxsYmFja3M9W10seS5vblVwZGF0ZUVsZUNhbGNzRm5zPVtdLHkucmVtb3ZlT2JzZXJ2ZXImJnkucmVtb3ZlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHkuc3R5bGVPYnNlcnZlciYmeS5zdHlsZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx5LnJlc2l6ZU9ic2VydmVyJiZ5LnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx5LmxhYmVsQ2FsY0Rpdil0cnl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh5LmxhYmVsQ2FsY0Rpdil9Y2F0Y2h7fX0sSTMuaXNIZWFkbGVzcz1mdW5jdGlvbigpe3JldHVybiExfSxbSkwsV2ssZVIsZ3gsYncsWWtdLmZvckVhY2goZnVuY3Rpb24oeSl7ZGUoSTMseSl9KTt2YXIgck09MWUzLzYwLHlDPXtzZXR1cERlcXVldWVpbmc6ZnVuY3Rpb24oZyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFQ9dGhpcyxMPXRoaXMucmVuZGVyZXI7aWYoIVQuZGVxdWV1ZWluZ1NldHVwKXtULmRlcXVldWVpbmdTZXR1cD0hMDt2YXIgTz1ZYyhmdW5jdGlvbigpe0wucmVkcmF3SGludCgiZWxlcyIsITApLEwucmVkcmF3SGludCgiZHJhZyIsITApLEwucmVkcmF3KCl9LGcuZGVxUmVkcmF3VGhyZXNob2xkKSxQPWZ1bmN0aW9uKFMsVil7dmFyIFk9eWcoKSxydD1MLmF2ZXJhZ2VSZWRyYXdUaW1lLG90PUwubGFzdFJlZHJhd1RpbWUsaHQ9W10sZHQ9TC5jeS5leHRlbnQoKSxMdD1MLmdldFBpeGVsUmF0aW8oKTtmb3IoU3x8TC5mbHVzaFJlbmRlcmVkU3R5bGVRdWV1ZSgpOzspe3ZhciBrdD15ZygpLER0PWt0LVksUHQ9a3QtVjtpZihvdDxyTSl7dmFyICR0PXJNLShTP3J0OjApO2lmKFB0Pj1nLmRlcUZhc3RDb3N0KiR0KWJyZWFrfWVsc2UgaWYoUyl7aWYoRHQ+PWcuZGVxQ29zdCpvdHx8RHQ+PWcuZGVxQXZnQ29zdCpydClicmVha31lbHNlIGlmKFB0Pj1nLmRlcU5vRHJhd0Nvc3Qqck0pYnJlYWs7dmFyIFp0PWcuZGVxKFQsTHQsZHQpO2lmKFp0Lmxlbmd0aD4wKWZvcih2YXIgWXQ9MDtZdDxadC5sZW5ndGg7WXQrKylodC5wdXNoKFp0W1l0XSk7ZWxzZSBicmVha31odC5sZW5ndGg+MCYmKGcub25EZXFkKFQsaHQpLCFTJiZnLnNob3VsZFJlZHJhdyhULGh0LEx0LGR0KSYmTygpKX0sJD1nLnByaW9yaXR5fHxFTDtMLmJlZm9yZVJlbmRlcihQLCQoVCkpfX19fSxkdHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KGcpe3ZhciB4PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp3bTtwKHRoaXMseSksdGhpcy5pZHNCeUtleT1uZXcgR2IsdGhpcy5rZXlGb3JJZD1uZXcgR2IsdGhpcy5jYWNoZXNCeUx2bD1uZXcgR2IsdGhpcy5sdmxzPVtdLHRoaXMuZ2V0S2V5PWcsdGhpcy5kb2VzRWxlSW52YWxpZGF0ZUtleT14fXJldHVybiBtKHksW3trZXk6ImdldElkc0ZvciIsdmFsdWU6ZnVuY3Rpb24oeCl7eD09bnVsbCYmdmwoIkNhbiBub3QgZ2V0IGlkIGxpc3QgZm9yIG51bGwga2V5Iik7dmFyIFQ9dGhpcy5pZHNCeUtleSxMPXRoaXMuaWRzQnlLZXkuZ2V0KHgpO3JldHVybiBMfHwoTD1uZXcgWTUsVC5zZXQoeCxMKSksTH19LHtrZXk6ImFkZElkRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbih4LFQpe3ghPW51bGwmJnRoaXMuZ2V0SWRzRm9yKHgpLmFkZChUKX19LHtrZXk6ImRlbGV0ZUlkRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbih4LFQpe3ghPW51bGwmJnRoaXMuZ2V0SWRzRm9yKHgpLmRlbGV0ZShUKX19LHtrZXk6ImdldE51bWJlck9mSWRzRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbih4KXtyZXR1cm4geD09bnVsbD8wOnRoaXMuZ2V0SWRzRm9yKHgpLnNpemV9fSx7a2V5OiJ1cGRhdGVLZXlNYXBwaW5nRm9yIix2YWx1ZTpmdW5jdGlvbih4KXt2YXIgVD14LmlkKCksTD10aGlzLmtleUZvcklkLmdldChUKSxPPXRoaXMuZ2V0S2V5KHgpO3RoaXMuZGVsZXRlSWRGb3JLZXkoTCxUKSx0aGlzLmFkZElkRm9yS2V5KE8sVCksdGhpcy5rZXlGb3JJZC5zZXQoVCxPKX19LHtrZXk6ImRlbGV0ZUtleU1hcHBpbmdGb3IiLHZhbHVlOmZ1bmN0aW9uKHgpe3ZhciBUPXguaWQoKSxMPXRoaXMua2V5Rm9ySWQuZ2V0KFQpO3RoaXMuZGVsZXRlSWRGb3JLZXkoTCxUKSx0aGlzLmtleUZvcklkLmRlbGV0ZShUKX19LHtrZXk6ImtleUhhc0NoYW5nZWRGb3IiLHZhbHVlOmZ1bmN0aW9uKHgpe3ZhciBUPXguaWQoKSxMPXRoaXMua2V5Rm9ySWQuZ2V0KFQpLE89dGhpcy5nZXRLZXkoeCk7cmV0dXJuIEwhPT1PfX0se2tleToiaXNJbnZhbGlkIix2YWx1ZTpmdW5jdGlvbih4KXtyZXR1cm4gdGhpcy5rZXlIYXNDaGFuZ2VkRm9yKHgpfHx0aGlzLmRvZXNFbGVJbnZhbGlkYXRlS2V5KHgpfX0se2tleToiZ2V0Q2FjaGVzQXQiLHZhbHVlOmZ1bmN0aW9uKHgpe3ZhciBUPXRoaXMuY2FjaGVzQnlMdmwsTD10aGlzLmx2bHMsTz1ULmdldCh4KTtyZXR1cm4gT3x8KE89bmV3IEdiLFQuc2V0KHgsTyksTC5wdXNoKHgpKSxPfX0se2tleToiZ2V0Q2FjaGUiLHZhbHVlOmZ1bmN0aW9uKHgsVCl7cmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQoVCkuZ2V0KHgpfX0se2tleToiZ2V0Iix2YWx1ZTpmdW5jdGlvbih4LFQpe3ZhciBMPXRoaXMuZ2V0S2V5KHgpLE89dGhpcy5nZXRDYWNoZShMLFQpO3JldHVybiBPIT1udWxsJiZ0aGlzLnVwZGF0ZUtleU1hcHBpbmdGb3IoeCksT319LHtrZXk6ImdldEZvckNhY2hlZEtleSIsdmFsdWU6ZnVuY3Rpb24oeCxUKXt2YXIgTD10aGlzLmtleUZvcklkLmdldCh4LmlkKCkpLE89dGhpcy5nZXRDYWNoZShMLFQpO3JldHVybiBPfX0se2tleToiaGFzQ2FjaGUiLHZhbHVlOmZ1bmN0aW9uKHgsVCl7cmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQoVCkuaGFzKHgpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbih4LFQpe3ZhciBMPXRoaXMuZ2V0S2V5KHgpO3JldHVybiB0aGlzLmhhc0NhY2hlKEwsVCl9fSx7a2V5OiJzZXRDYWNoZSIsdmFsdWU6ZnVuY3Rpb24oeCxULEwpe0wua2V5PXgsdGhpcy5nZXRDYWNoZXNBdChUKS5zZXQoeCxMKX19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oeCxULEwpe3ZhciBPPXRoaXMuZ2V0S2V5KHgpO3RoaXMuc2V0Q2FjaGUoTyxULEwpLHRoaXMudXBkYXRlS2V5TWFwcGluZ0Zvcih4KX19LHtrZXk6ImRlbGV0ZUNhY2hlIix2YWx1ZTpmdW5jdGlvbih4LFQpe3RoaXMuZ2V0Q2FjaGVzQXQoVCkuZGVsZXRlKHgpfX0se2tleToiZGVsZXRlIix2YWx1ZTpmdW5jdGlvbih4LFQpe3ZhciBMPXRoaXMuZ2V0S2V5KHgpO3RoaXMuZGVsZXRlQ2FjaGUoTCxUKX19LHtrZXk6ImludmFsaWRhdGVLZXkiLHZhbHVlOmZ1bmN0aW9uKHgpe3ZhciBUPXRoaXM7dGhpcy5sdmxzLmZvckVhY2goZnVuY3Rpb24oTCl7cmV0dXJuIFQuZGVsZXRlQ2FjaGUoeCxMKX0pfX0se2tleToiaW52YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oeCl7dmFyIFQ9eC5pZCgpLEw9dGhpcy5rZXlGb3JJZC5nZXQoVCk7dGhpcy5kZWxldGVLZXlNYXBwaW5nRm9yKHgpO3ZhciBPPXRoaXMuZG9lc0VsZUludmFsaWRhdGVLZXkoeCk7cmV0dXJuIE8mJnRoaXMuaW52YWxpZGF0ZUtleShMKSxPfHx0aGlzLmdldE51bWJlck9mSWRzRm9yS2V5KEwpPT09MH19XSkseX0oKSx4Qz0yNSxrQz01MCxweD0tNCxpTT0zLHNNPTcuOTksZ3R0PTgscHR0PTEwMjQsYnR0PTEwMjQsclI9MTAyNCx3dHQ9LjIsdnR0PS44LG10dD0xMCx5dHQ9LjE1LHh0dD0uMSxrdHQ9LjksRXR0PS45LFR0dD0xMDAsQ3R0PTEsYng9e2RlcXVldWU6ImRlcXVldWUiLGRvd25zY2FsZToiZG93bnNjYWxlIixoaWdoUXVhbGl0eToiaGlnaFF1YWxpdHkifSxfdHQ9UmYoe2dldEtleTpudWxsLGRvZXNFbGVJbnZhbGlkYXRlS2V5OndtLGRyYXdFbGVtZW50Om51bGwsZ2V0Qm91bmRpbmdCb3g6bnVsbCxnZXRSb3RhdGlvblBvaW50Om51bGwsZ2V0Um90YXRpb25PZmZzZXQ6bnVsbCxpc1Zpc2libGU6VDMsYWxsb3dFZGdlVHhyQ2FjaGluZzohMCxhbGxvd1BhcmVudFR4ckNhY2hpbmc6ITB9KSxLaz1mdW5jdGlvbihnLHgpe3ZhciBUPXRoaXM7VC5yZW5kZXJlcj1nLFQub25EZXF1ZXVlcz1bXTt2YXIgTD1fdHQoeCk7ZGUoVCxMKSxULmxvb2t1cD1uZXcgZHR0KEwuZ2V0S2V5LEwuZG9lc0VsZUludmFsaWRhdGVLZXkpLFQuc2V0dXBEZXF1ZXVlaW5nKCl9LFRoPUtrLnByb3RvdHlwZTtUaC5yZWFzb25zPWJ4LFRoLmdldFRleHR1cmVRdWV1ZT1mdW5jdGlvbih5KXt2YXIgZz10aGlzO3JldHVybiBnLmVsZUltZ0NhY2hlcz1nLmVsZUltZ0NhY2hlc3x8e30sZy5lbGVJbWdDYWNoZXNbeV09Zy5lbGVJbWdDYWNoZXNbeV18fFtdfSxUaC5nZXRSZXRpcmVkVGV4dHVyZVF1ZXVlPWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMseD1nLmVsZUltZ0NhY2hlcy5yZXRpcmVkPWcuZWxlSW1nQ2FjaGVzLnJldGlyZWR8fHt9LFQ9eFt5XT14W3ldfHxbXTtyZXR1cm4gVH0sVGguZ2V0RWxlbWVudFF1ZXVlPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcyxnPXkuZWxlQ2FjaGVRdWV1ZT15LmVsZUNhY2hlUXVldWV8fG5ldyBDayhmdW5jdGlvbih4LFQpe3JldHVybiBULnJlcXMteC5yZXFzfSk7cmV0dXJuIGd9LFRoLmdldEVsZW1lbnRLZXlUb1F1ZXVlPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcyxnPXkuZWxlS2V5VG9DYWNoZVF1ZXVlPXkuZWxlS2V5VG9DYWNoZVF1ZXVlfHx7fTtyZXR1cm4gZ30sVGguZ2V0RWxlbWVudD1mdW5jdGlvbih5LGcseCxULEwpe3ZhciBPPXRoaXMsUD10aGlzLnJlbmRlcmVyLCQ9UC5jeS56b29tKCkscT10aGlzLmxvb2t1cDtpZighZ3x8Zy53PT09MHx8Zy5oPT09MHx8aXNOYU4oZy53KXx8aXNOYU4oZy5oKXx8IXkudmlzaWJsZSgpfHx5LnJlbW92ZWQoKXx8IU8uYWxsb3dFZGdlVHhyQ2FjaGluZyYmeS5pc0VkZ2UoKXx8IU8uYWxsb3dQYXJlbnRUeHJDYWNoaW5nJiZ5LmlzUGFyZW50KCkpcmV0dXJuIG51bGw7aWYoVD09bnVsbCYmKFQ9TWF0aC5jZWlsKF9MKCQqeCkpKSxUPHB4KVQ9cHg7ZWxzZSBpZigkPj1zTXx8VD5pTSlyZXR1cm4gbnVsbDt2YXIgUz1NYXRoLnBvdygyLFQpLFY9Zy5oKlMsWT1nLncqUyxydD1QLmVsZVRleHRCaWdnZXJUaGFuTWluKHksUyk7aWYoIXRoaXMuaXNWaXNpYmxlKHkscnQpKXJldHVybiBudWxsO3ZhciBvdD1xLmdldCh5LFQpO2lmKG90JiZvdC5pbnZhbGlkYXRlZCYmKG90LmludmFsaWRhdGVkPSExLG90LnRleHR1cmUuaW52YWxpZGF0ZWRXaWR0aC09b3Qud2lkdGgpLG90KXJldHVybiBvdDt2YXIgaHQ7aWYoVjw9eEM/aHQ9eEM6Vjw9a0M/aHQ9a0M6aHQ9TWF0aC5jZWlsKFYva0MpKmtDLFY+clJ8fFk+YnR0KXJldHVybiBudWxsO3ZhciBkdD1PLmdldFRleHR1cmVRdWV1ZShodCksTHQ9ZHRbZHQubGVuZ3RoLTJdLGt0PWZ1bmN0aW9uKCl7cmV0dXJuIE8ucmVjeWNsZVRleHR1cmUoaHQsWSl8fE8uYWRkVGV4dHVyZShodCxZKX07THR8fChMdD1kdFtkdC5sZW5ndGgtMV0pLEx0fHwoTHQ9a3QoKSksTHQud2lkdGgtTHQudXNlZFdpZHRoPFkmJihMdD1rdCgpKTtmb3IodmFyIER0PWZ1bmN0aW9uKHplKXtyZXR1cm4gemUmJnplLnNjYWxlZExhYmVsU2hvd249PT1ydH0sUHQ9TCYmTD09PWJ4LmRlcXVldWUsJHQ9TCYmTD09PWJ4LmhpZ2hRdWFsaXR5LFp0PUwmJkw9PT1ieC5kb3duc2NhbGUsWXQscXQ9VCsxO3F0PD1pTTtxdCsrKXt2YXIgbmU9cS5nZXQoeSxxdCk7aWYobmUpe1l0PW5lO2JyZWFrfX12YXIgR3Q9WXQmJll0LmxldmVsPT09VCsxP1l0Om51bGwsZ2U9ZnVuY3Rpb24oKXtMdC5jb250ZXh0LmRyYXdJbWFnZShHdC50ZXh0dXJlLmNhbnZhcyxHdC54LDAsR3Qud2lkdGgsR3QuaGVpZ2h0LEx0LnVzZWRXaWR0aCwwLFksVil9O2lmKEx0LmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxMdC5jb250ZXh0LmNsZWFyUmVjdChMdC51c2VkV2lkdGgsMCxZLGh0KSxEdChHdCkpZ2UoKTtlbHNlIGlmKER0KFl0KSlpZigkdCl7Zm9yKHZhciBiZT1ZdC5sZXZlbDtiZT5UO2JlLS0pR3Q9Ty5nZXRFbGVtZW50KHksZyx4LGJlLGJ4LmRvd25zY2FsZSk7Z2UoKX1lbHNlIHJldHVybiBPLnF1ZXVlRWxlbWVudCh5LFl0LmxldmVsLTEpLFl0O2Vsc2V7dmFyIGllO2lmKCFQdCYmISR0JiYhWnQpZm9yKHZhciBGZT1ULTE7RmU+PXB4O0ZlLS0pe3ZhciB3ZT1xLmdldCh5LEZlKTtpZih3ZSl7aWU9d2U7YnJlYWt9fWlmKER0KGllKSlyZXR1cm4gTy5xdWV1ZUVsZW1lbnQoeSxUKSxpZTtMdC5jb250ZXh0LnRyYW5zbGF0ZShMdC51c2VkV2lkdGgsMCksTHQuY29udGV4dC5zY2FsZShTLFMpLHRoaXMuZHJhd0VsZW1lbnQoTHQuY29udGV4dCx5LGcscnQsITEpLEx0LmNvbnRleHQuc2NhbGUoMS9TLDEvUyksTHQuY29udGV4dC50cmFuc2xhdGUoLUx0LnVzZWRXaWR0aCwwKX1yZXR1cm4gb3Q9e3g6THQudXNlZFdpZHRoLHRleHR1cmU6THQsbGV2ZWw6VCxzY2FsZTpTLHdpZHRoOlksaGVpZ2h0OlYsc2NhbGVkTGFiZWxTaG93bjpydH0sTHQudXNlZFdpZHRoKz1NYXRoLmNlaWwoWStndHQpLEx0LmVsZUNhY2hlcy5wdXNoKG90KSxxLnNldCh5LFQsb3QpLE8uY2hlY2tUZXh0dXJlRnVsbG5lc3MoTHQpLG90fSxUaC5pbnZhbGlkYXRlRWxlbWVudHM9ZnVuY3Rpb24oeSl7Zm9yKHZhciBnPTA7Zzx5Lmxlbmd0aDtnKyspdGhpcy5pbnZhbGlkYXRlRWxlbWVudCh5W2ddKX0sVGguaW52YWxpZGF0ZUVsZW1lbnQ9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PWcubG9va3VwLFQ9W10sTD14LmlzSW52YWxpZCh5KTtpZihMKXtmb3IodmFyIE89cHg7Tzw9aU07TysrKXt2YXIgUD14LmdldEZvckNhY2hlZEtleSh5LE8pO1AmJlQucHVzaChQKX12YXIgJD14LmludmFsaWRhdGUoeSk7aWYoJClmb3IodmFyIHE9MDtxPFQubGVuZ3RoO3ErKyl7dmFyIFM9VFtxXSxWPVMudGV4dHVyZTtWLmludmFsaWRhdGVkV2lkdGgrPVMud2lkdGgsUy5pbnZhbGlkYXRlZD0hMCxnLmNoZWNrVGV4dHVyZVV0aWxpdHkoVil9Zy5yZW1vdmVGcm9tUXVldWUoeSl9fSxUaC5jaGVja1RleHR1cmVVdGlsaXR5PWZ1bmN0aW9uKHkpe3kuaW52YWxpZGF0ZWRXaWR0aD49d3R0Knkud2lkdGgmJnRoaXMucmV0aXJlVGV4dHVyZSh5KX0sVGguY2hlY2tUZXh0dXJlRnVsbG5lc3M9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PWcuZ2V0VGV4dHVyZVF1ZXVlKHkuaGVpZ2h0KTt5LnVzZWRXaWR0aC95LndpZHRoPnZ0dCYmeS5mdWxsbmVzc0NoZWNrcz49bXR0P3ZtKHgseSk6eS5mdWxsbmVzc0NoZWNrcysrfSxUaC5yZXRpcmVUZXh0dXJlPWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMseD15LmhlaWdodCxUPWcuZ2V0VGV4dHVyZVF1ZXVlKHgpLEw9dGhpcy5sb29rdXA7dm0oVCx5KSx5LnJldGlyZWQ9ITA7Zm9yKHZhciBPPXkuZWxlQ2FjaGVzLFA9MDtQPE8ubGVuZ3RoO1ArKyl7dmFyICQ9T1tQXTtMLmRlbGV0ZUNhY2hlKCQua2V5LCQubGV2ZWwpfVRMKE8pO3ZhciBxPWcuZ2V0UmV0aXJlZFRleHR1cmVRdWV1ZSh4KTtxLnB1c2goeSl9LFRoLmFkZFRleHR1cmU9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLFQ9eC5nZXRUZXh0dXJlUXVldWUoeSksTD17fTtyZXR1cm4gVC5wdXNoKEwpLEwuZWxlQ2FjaGVzPVtdLEwuaGVpZ2h0PXksTC53aWR0aD1NYXRoLm1heChwdHQsZyksTC51c2VkV2lkdGg9MCxMLmludmFsaWRhdGVkV2lkdGg9MCxMLmZ1bGxuZXNzQ2hlY2tzPTAsTC5jYW52YXM9eC5yZW5kZXJlci5tYWtlT2Zmc2NyZWVuQ2FudmFzKEwud2lkdGgsTC5oZWlnaHQpLEwuY29udGV4dD1MLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIpLEx9LFRoLnJlY3ljbGVUZXh0dXJlPWZ1bmN0aW9uKHksZyl7Zm9yKHZhciB4PXRoaXMsVD14LmdldFRleHR1cmVRdWV1ZSh5KSxMPXguZ2V0UmV0aXJlZFRleHR1cmVRdWV1ZSh5KSxPPTA7TzxMLmxlbmd0aDtPKyspe3ZhciBQPUxbT107aWYoUC53aWR0aD49ZylyZXR1cm4gUC5yZXRpcmVkPSExLFAudXNlZFdpZHRoPTAsUC5pbnZhbGlkYXRlZFdpZHRoPTAsUC5mdWxsbmVzc0NoZWNrcz0wLFRMKFAuZWxlQ2FjaGVzKSxQLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxQLmNvbnRleHQuY2xlYXJSZWN0KDAsMCxQLndpZHRoLFAuaGVpZ2h0KSx2bShMLFApLFQucHVzaChQKSxQfX0sVGgucXVldWVFbGVtZW50PWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcyxUPXguZ2V0RWxlbWVudFF1ZXVlKCksTD14LmdldEVsZW1lbnRLZXlUb1F1ZXVlKCksTz10aGlzLmdldEtleSh5KSxQPUxbT107aWYoUClQLmxldmVsPU1hdGgubWF4KFAubGV2ZWwsZyksUC5lbGVzLm1lcmdlKHkpLFAucmVxcysrLFQudXBkYXRlSXRlbShQKTtlbHNle3ZhciAkPXtlbGVzOnkuc3Bhd24oKS5tZXJnZSh5KSxsZXZlbDpnLHJlcXM6MSxrZXk6T307VC5wdXNoKCQpLExbT109JH19LFRoLmRlcXVldWU9ZnVuY3Rpb24oeSl7Zm9yKHZhciBnPXRoaXMseD1nLmdldEVsZW1lbnRRdWV1ZSgpLFQ9Zy5nZXRFbGVtZW50S2V5VG9RdWV1ZSgpLEw9W10sTz1nLmxvb2t1cCxQPTA7UDxDdHQmJnguc2l6ZSgpPjA7UCsrKXt2YXIgJD14LnBvcCgpLHE9JC5rZXksUz0kLmVsZXNbMF0sVj1PLmhhc0NhY2hlKFMsJC5sZXZlbCk7aWYoVFtxXT1udWxsLFYpY29udGludWU7TC5wdXNoKCQpO3ZhciBZPWcuZ2V0Qm91bmRpbmdCb3goUyk7Zy5nZXRFbGVtZW50KFMsWSx5LCQubGV2ZWwsYnguZGVxdWV1ZSl9cmV0dXJuIEx9LFRoLnJlbW92ZUZyb21RdWV1ZT1mdW5jdGlvbih5KXt2YXIgZz10aGlzLHg9Zy5nZXRFbGVtZW50UXVldWUoKSxUPWcuZ2V0RWxlbWVudEtleVRvUXVldWUoKSxMPXRoaXMuZ2V0S2V5KHkpLE89VFtMXTtPIT1udWxsJiYoTy5lbGVzLmxlbmd0aD09PTE/KE8ucmVxcz1XNSx4LnVwZGF0ZUl0ZW0oTykseC5wb3AoKSxUW0xdPW51bGwpOk8uZWxlcy51bm1lcmdlKHkpKX0sVGgub25EZXF1ZXVlPWZ1bmN0aW9uKHkpe3RoaXMub25EZXF1ZXVlcy5wdXNoKHkpfSxUaC5vZmZEZXF1ZXVlPWZ1bmN0aW9uKHkpe3ZtKHRoaXMub25EZXF1ZXVlcyx5KX0sVGguc2V0dXBEZXF1ZXVlaW5nPXlDLnNldHVwRGVxdWV1ZWluZyh7ZGVxUmVkcmF3VGhyZXNob2xkOlR0dCxkZXFDb3N0Onl0dCxkZXFBdmdDb3N0Onh0dCxkZXFOb0RyYXdDb3N0Omt0dCxkZXFGYXN0Q29zdDpFdHQsZGVxOmZ1bmN0aW9uKGcseCxUKXtyZXR1cm4gZy5kZXF1ZXVlKHgsVCl9LG9uRGVxZDpmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0wO1Q8Zy5vbkRlcXVldWVzLmxlbmd0aDtUKyspe3ZhciBMPWcub25EZXF1ZXVlc1tUXTtMKHgpfX0sc2hvdWxkUmVkcmF3OmZ1bmN0aW9uKGcseCxULEwpe2Zvcih2YXIgTz0wO088eC5sZW5ndGg7TysrKWZvcih2YXIgUD14W09dLmVsZXMsJD0wOyQ8UC5sZW5ndGg7JCsrKXt2YXIgcT1QWyRdLmJvdW5kaW5nQm94KCk7aWYoQUwocSxMKSlyZXR1cm4hMH1yZXR1cm4hMX0scHJpb3JpdHk6ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5lbGVUeHJEZXF9fSk7dmFyIFN0dD0xLHd4PS00LFhrPTIsRUM9My45OSxRaz01MCxFZz01MCxBdHQ9LjE1LGNwdD0uMSx1cHQ9LjksbHB0PS45LGhwdD0xLGFNPTI1MCxmcHQ9NGUzKjRlMyxkcHQ9ITAsTHR0PWZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMsVD14LnJlbmRlcmVyPWcsTD1ULmN5O3gubGF5ZXJzQnlMZXZlbD17fSx4LmZpcnN0R2V0PSEwLHgubGFzdEludmFsaWRhdGlvblRpbWU9eWcoKS0yKmFNLHguc2tpcHBpbmc9ITEseC5lbGVUeHJEZXFzPUwuY29sbGVjdGlvbigpLHguc2NoZWR1bGVFbGVtZW50UmVmaW5lbWVudD1ZYyhmdW5jdGlvbigpe3gucmVmaW5lRWxlbWVudFRleHR1cmVzKHguZWxlVHhyRGVxcykseC5lbGVUeHJEZXFzLnVubWVyZ2UoeC5lbGVUeHJEZXFzKX0sRWcpLFQuYmVmb3JlUmVuZGVyKGZ1bmN0aW9uKFAsJCl7JC14Lmxhc3RJbnZhbGlkYXRpb25UaW1lPD1hTT94LnNraXBwaW5nPSEwOnguc2tpcHBpbmc9ITF9LFQuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJTa2lwKTt2YXIgTz1mdW5jdGlvbigkLHEpe3JldHVybiBxLnJlcXMtJC5yZXFzfTt4LmxheWVyc1F1ZXVlPW5ldyBDayhPKSx4LnNldHVwRGVxdWV1ZWluZygpfSx3MT1MdHQucHJvdG90eXBlLE10dD0wLGdwdD1NYXRoLnBvdygyLDUzKS0xO3cxLm1ha2VMYXllcj1mdW5jdGlvbih5LGcpe3ZhciB4PU1hdGgucG93KDIsZyksVD1NYXRoLmNlaWwoeS53KngpLEw9TWF0aC5jZWlsKHkuaCp4KSxPPXRoaXMucmVuZGVyZXIubWFrZU9mZnNjcmVlbkNhbnZhcyhULEwpLFA9e2lkOk10dD0rK010dCVncHQsYmI6eSxsZXZlbDpnLHdpZHRoOlQsaGVpZ2h0OkwsY2FudmFzOk8sY29udGV4dDpPLmdldENvbnRleHQoIjJkIiksZWxlczpbXSxlbGVzUXVldWU6W10scmVxczowfSwkPVAuY29udGV4dCxxPS1QLmJiLngxLFM9LVAuYmIueTE7cmV0dXJuICQuc2NhbGUoeCx4KSwkLnRyYW5zbGF0ZShxLFMpLFB9LHcxLmdldExheWVycz1mdW5jdGlvbih5LGcseCl7dmFyIFQ9dGhpcyxMPVQucmVuZGVyZXIsTz1MLmN5LFA9Ty56b29tKCksJD1ULmZpcnN0R2V0O2lmKFQuZmlyc3RHZXQ9ITEseD09bnVsbCl7aWYoeD1NYXRoLmNlaWwoX0woUCpnKSkseDx3eCl4PXd4O2Vsc2UgaWYoUD49RUN8fHg+WGspcmV0dXJuIG51bGx9VC52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZyh4LHkpO3ZhciBxPVQubGF5ZXJzQnlMZXZlbCxTPU1hdGgucG93KDIseCksVj1xW3hdPXFbeF18fFtdLFkscnQ9VC5sZXZlbElzQ29tcGxldGUoeCx5KSxvdCxodD1mdW5jdGlvbigpe3ZhciBnZT1mdW5jdGlvbihibil7aWYoVC52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZyhibix5KSxULmxldmVsSXNDb21wbGV0ZShibix5KSlyZXR1cm4gb3Q9cVtibl0sITB9LGJlPWZ1bmN0aW9uKGJuKXtpZighb3QpZm9yKHZhciB6ZT14K2JuO3d4PD16ZSYmemU8PVhrJiYhZ2UoemUpO3plKz1ibik7fTtiZSgxKSxiZSgtMSk7Zm9yKHZhciBpZT1WLmxlbmd0aC0xO2llPj0wO2llLS0pe3ZhciBGZT1WW2llXTtGZS5pbnZhbGlkJiZ2bShWLEZlKX19O2lmKCFydClodCgpO2Vsc2UgcmV0dXJuIFY7dmFyIGR0PWZ1bmN0aW9uKCl7aWYoIVkpe1k9emQoKTtmb3IodmFyIGdlPTA7Z2U8eS5sZW5ndGg7Z2UrKylCSyhZLHlbZ2VdLmJvdW5kaW5nQm94KCkpfXJldHVybiBZfSxMdD1mdW5jdGlvbihnZSl7Z2U9Z2V8fHt9O3ZhciBiZT1nZS5hZnRlcjtkdCgpO3ZhciBpZT1ZLncqUyooWS5oKlMpO2lmKGllPmZwdClyZXR1cm4gbnVsbDt2YXIgRmU9VC5tYWtlTGF5ZXIoWSx4KTtpZihiZSE9bnVsbCl7dmFyIHdlPVYuaW5kZXhPZihiZSkrMTtWLnNwbGljZSh3ZSwwLEZlKX1lbHNlKGdlLmluc2VydD09PXZvaWQgMHx8Z2UuaW5zZXJ0KSYmVi51bnNoaWZ0KEZlKTtyZXR1cm4gRmV9O2lmKFQuc2tpcHBpbmcmJiEkKXJldHVybiBudWxsO2Zvcih2YXIga3Q9bnVsbCxEdD15Lmxlbmd0aC9TdHQsUHQ9ISQsJHQ9MDskdDx5Lmxlbmd0aDskdCsrKXt2YXIgWnQ9eVskdF0sWXQ9WnQuX3ByaXZhdGUucnNjcmF0Y2gscXQ9WXQuaW1nTGF5ZXJDYWNoZXM9WXQuaW1nTGF5ZXJDYWNoZXN8fHt9LG5lPXF0W3hdO2lmKG5lKXtrdD1uZTtjb250aW51ZX1pZigoIWt0fHxrdC5lbGVzLmxlbmd0aD49RHR8fCFoTihrdC5iYixadC5ib3VuZGluZ0JveCgpKSkmJihrdD1MdCh7aW5zZXJ0OiEwLGFmdGVyOmt0fSksIWt0KSlyZXR1cm4gbnVsbDtvdHx8UHQ/VC5xdWV1ZUxheWVyKGt0LFp0KTpULmRyYXdFbGVJbkxheWVyKGt0LFp0LHgsZyksa3QuZWxlcy5wdXNoKFp0KSxxdFt4XT1rdH1yZXR1cm4gb3R8fChQdD9udWxsOlYpfSx3MS5nZXRFbGVMZXZlbEZvckxheWVyTGV2ZWw9ZnVuY3Rpb24oeSxnKXtyZXR1cm4geX0sdzEuZHJhd0VsZUluTGF5ZXI9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9dGhpcyxPPXRoaXMucmVuZGVyZXIsUD15LmNvbnRleHQsJD1nLmJvdW5kaW5nQm94KCk7JC53PT09MHx8JC5oPT09MHx8IWcudmlzaWJsZSgpfHwoeD1MLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbCh4LFQpLE8uc2V0SW1nU21vb3RoaW5nKFAsITEpLE8uZHJhd0NhY2hlZEVsZW1lbnQoUCxnLG51bGwsbnVsbCx4LGRwdCksTy5zZXRJbWdTbW9vdGhpbmcoUCwhMCkpfSx3MS5sZXZlbElzQ29tcGxldGU9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLFQ9eC5sYXllcnNCeUxldmVsW3ldO2lmKCFUfHxULmxlbmd0aD09PTApcmV0dXJuITE7Zm9yKHZhciBMPTAsTz0wO088VC5sZW5ndGg7TysrKXt2YXIgUD1UW09dO2lmKFAucmVxcz4wfHxQLmludmFsaWQpcmV0dXJuITE7TCs9UC5lbGVzLmxlbmd0aH1yZXR1cm4gTD09PWcubGVuZ3RofSx3MS52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZz1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMubGF5ZXJzQnlMZXZlbFt5XTtpZih4KWZvcih2YXIgVD0wO1Q8eC5sZW5ndGg7VCsrKXtmb3IodmFyIEw9eFtUXSxPPS0xLFA9MDtQPGcubGVuZ3RoO1ArKylpZihMLmVsZXNbMF09PT1nW1BdKXtPPVA7YnJlYWt9aWYoTzwwKXt0aGlzLmludmFsaWRhdGVMYXllcihMKTtjb250aW51ZX1mb3IodmFyICQ9TyxQPTA7UDxMLmVsZXMubGVuZ3RoO1ArKylpZihMLmVsZXNbUF0hPT1nWyQrUF0pe3RoaXMuaW52YWxpZGF0ZUxheWVyKEwpO2JyZWFrfX19LHcxLnVwZGF0ZUVsZW1lbnRzSW5MYXllcnM9ZnVuY3Rpb24oeSxnKXtmb3IodmFyIHg9dGhpcyxUPW50KHlbMF0pLEw9MDtMPHkubGVuZ3RoO0wrKylmb3IodmFyIE89VD9udWxsOnlbTF0sUD1UP3lbTF06eVtMXS5lbGUsJD1QLl9wcml2YXRlLnJzY3JhdGNoLHE9JC5pbWdMYXllckNhY2hlcz0kLmltZ0xheWVyQ2FjaGVzfHx7fSxTPXd4O1M8PVhrO1MrKyl7dmFyIFY9cVtTXTtWJiYoTyYmeC5nZXRFbGVMZXZlbEZvckxheWVyTGV2ZWwoVi5sZXZlbCkhPT1PLmxldmVsfHxnKFYsUCxPKSl9fSx3MS5oYXZlTGF5ZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PXRoaXMsZz0hMSx4PXd4O3g8PVhrO3grKyl7dmFyIFQ9eS5sYXllcnNCeUxldmVsW3hdO2lmKFQmJlQubGVuZ3RoPjApe2c9ITA7YnJlYWt9fXJldHVybiBnfSx3MS5pbnZhbGlkYXRlRWxlbWVudHM9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpczt5Lmxlbmd0aCE9PTAmJihnLmxhc3RJbnZhbGlkYXRpb25UaW1lPXlnKCksISh5Lmxlbmd0aD09PTB8fCFnLmhhdmVMYXllcnMoKSkmJmcudXBkYXRlRWxlbWVudHNJbkxheWVycyh5LGZ1bmN0aW9uKFQsTCxPKXtnLmludmFsaWRhdGVMYXllcihUKX0pKX0sdzEuaW52YWxpZGF0ZUxheWVyPWZ1bmN0aW9uKHkpe2lmKHRoaXMubGFzdEludmFsaWRhdGlvblRpbWU9eWcoKSwheS5pbnZhbGlkKXt2YXIgZz15LmxldmVsLHg9eS5lbGVzLFQ9dGhpcy5sYXllcnNCeUxldmVsW2ddO3ZtKFQseSkseS5lbGVzUXVldWU9W10seS5pbnZhbGlkPSEwLHkucmVwbGFjZW1lbnQmJih5LnJlcGxhY2VtZW50LmludmFsaWQ9ITApO2Zvcih2YXIgTD0wO0w8eC5sZW5ndGg7TCsrKXt2YXIgTz14W0xdLl9wcml2YXRlLnJzY3JhdGNoLmltZ0xheWVyQ2FjaGVzO08mJihPW2ddPW51bGwpfX19LHcxLnJlZmluZUVsZW1lbnRUZXh0dXJlcz1mdW5jdGlvbih5KXt2YXIgZz10aGlzO2cudXBkYXRlRWxlbWVudHNJbkxheWVycyh5LGZ1bmN0aW9uKFQsTCxPKXt2YXIgUD1ULnJlcGxhY2VtZW50O2lmKFB8fChQPVQucmVwbGFjZW1lbnQ9Zy5tYWtlTGF5ZXIoVC5iYixULmxldmVsKSxQLnJlcGxhY2VzPVQsUC5lbGVzPVQuZWxlcyksIVAucmVxcylmb3IodmFyICQ9MDskPFAuZWxlcy5sZW5ndGg7JCsrKWcucXVldWVMYXllcihQLFAuZWxlc1skXSl9KX0sdzEuZW5xdWV1ZUVsZW1lbnRSZWZpbmVtZW50PWZ1bmN0aW9uKHkpe3RoaXMuZWxlVHhyRGVxcy5tZXJnZSh5KSx0aGlzLnNjaGVkdWxlRWxlbWVudFJlZmluZW1lbnQoKX0sdzEucXVldWVMYXllcj1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMsVD14LmxheWVyc1F1ZXVlLEw9eS5lbGVzUXVldWUsTz1MLmhhc0lkPUwuaGFzSWR8fHt9O2lmKCF5LnJlcGxhY2VtZW50KXtpZihnKXtpZihPW2cuaWQoKV0pcmV0dXJuO0wucHVzaChnKSxPW2cuaWQoKV09ITB9eS5yZXFzPyh5LnJlcXMrKyxULnVwZGF0ZUl0ZW0oeSkpOih5LnJlcXM9MSxULnB1c2goeSkpfX0sdzEuZGVxdWV1ZT1mdW5jdGlvbih5KXtmb3IodmFyIGc9dGhpcyx4PWcubGF5ZXJzUXVldWUsVD1bXSxMPTA7TDxocHQmJnguc2l6ZSgpIT09MDspe3ZhciBPPXgucGVlaygpO2lmKE8ucmVwbGFjZW1lbnQpe3gucG9wKCk7Y29udGludWV9aWYoTy5yZXBsYWNlcyYmTyE9PU8ucmVwbGFjZXMucmVwbGFjZW1lbnQpe3gucG9wKCk7Y29udGludWV9aWYoTy5pbnZhbGlkKXt4LnBvcCgpO2NvbnRpbnVlfXZhciBQPU8uZWxlc1F1ZXVlLnNoaWZ0KCk7UCYmKGcuZHJhd0VsZUluTGF5ZXIoTyxQLE8ubGV2ZWwseSksTCsrKSxULmxlbmd0aD09PTAmJlQucHVzaCghMCksTy5lbGVzUXVldWUubGVuZ3RoPT09MCYmKHgucG9wKCksTy5yZXFzPTAsTy5yZXBsYWNlcyYmZy5hcHBseUxheWVyUmVwbGFjZW1lbnQoTyksZy5yZXF1ZXN0UmVkcmF3KCkpfXJldHVybiBUfSx3MS5hcHBseUxheWVyUmVwbGFjZW1lbnQ9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PWcubGF5ZXJzQnlMZXZlbFt5LmxldmVsXSxUPXkucmVwbGFjZXMsTD14LmluZGV4T2YoVCk7aWYoIShMPDB8fFQuaW52YWxpZCkpe3hbTF09eTtmb3IodmFyIE89MDtPPHkuZWxlcy5sZW5ndGg7TysrKXt2YXIgUD15LmVsZXNbT10uX3ByaXZhdGUsJD1QLmltZ0xheWVyQ2FjaGVzPVAuaW1nTGF5ZXJDYWNoZXN8fHt9OyQmJigkW3kubGV2ZWxdPXkpfWcucmVxdWVzdFJlZHJhdygpfX0sdzEucmVxdWVzdFJlZHJhdz1ZYyhmdW5jdGlvbigpe3ZhciB5PXRoaXMucmVuZGVyZXI7eS5yZWRyYXdIaW50KCJlbGVzIiwhMCkseS5yZWRyYXdIaW50KCJkcmFnIiwhMCkseS5yZWRyYXcoKX0sMTAwKSx3MS5zZXR1cERlcXVldWVpbmc9eUMuc2V0dXBEZXF1ZXVlaW5nKHtkZXFSZWRyYXdUaHJlc2hvbGQ6UWssZGVxQ29zdDpBdHQsZGVxQXZnQ29zdDpjcHQsZGVxTm9EcmF3Q29zdDp1cHQsZGVxRmFzdENvc3Q6bHB0LGRlcTpmdW5jdGlvbihnLHgpe3JldHVybiBnLmRlcXVldWUoeCl9LG9uRGVxZDpFTCxzaG91bGRSZWRyYXc6VDMscHJpb3JpdHk6ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJEZXF9fSk7dmFyIEQwPXt9LER0dDtmdW5jdGlvbiBpUih5LGcpe2Zvcih2YXIgeD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgVD1nW3hdO3kubGluZVRvKFQueCxULnkpfX1mdW5jdGlvbiBzUih5LGcseCl7Zm9yKHZhciBULEw9MDtMPGcubGVuZ3RoO0wrKyl7dmFyIE89Z1tMXTtMPT09MCYmKFQ9TykseS5saW5lVG8oTy54LE8ueSl9eS5xdWFkcmF0aWNDdXJ2ZVRvKHgueCx4LnksVC54LFQueSl9ZnVuY3Rpb24gSXR0KHksZyx4KXt5LmJlZ2luUGF0aCYmeS5iZWdpblBhdGgoKTtmb3IodmFyIFQ9ZyxMPTA7TDxULmxlbmd0aDtMKyspe3ZhciBPPVRbTF07eS5saW5lVG8oTy54LE8ueSl9dmFyIFA9eCwkPXhbMF07eS5tb3ZlVG8oJC54LCQueSk7Zm9yKHZhciBMPTE7TDxQLmxlbmd0aDtMKyspe3ZhciBPPVBbTF07eS5saW5lVG8oTy54LE8ueSl9eS5jbG9zZVBhdGgmJnkuY2xvc2VQYXRoKCl9ZnVuY3Rpb24gcHB0KHksZyx4LFQsTCl7eS5iZWdpblBhdGgmJnkuYmVnaW5QYXRoKCkseS5hcmMoeCxULEwsMCxNYXRoLlBJKjIsITEpO3ZhciBPPWcsUD1PWzBdO3kubW92ZVRvKFAueCxQLnkpO2Zvcih2YXIgJD0wOyQ8Ty5sZW5ndGg7JCsrKXt2YXIgcT1PWyRdO3kubGluZVRvKHEueCxxLnkpfXkuY2xvc2VQYXRoJiZ5LmNsb3NlUGF0aCgpfWZ1bmN0aW9uIGJwdCh5LGcseCxUKXt5LmFyYyhnLHgsVCwwLE1hdGguUEkqMiwhMSl9RDAuYXJyb3dTaGFwZUltcGw9ZnVuY3Rpb24oeSl7cmV0dXJuKER0dHx8KER0dD17cG9seWdvbjppUiwidHJpYW5nbGUtYmFja2N1cnZlIjpzUiwidHJpYW5nbGUtdGVlIjpJdHQsImNpcmNsZS10cmlhbmdsZSI6cHB0LCJ0cmlhbmdsZS1jcm9zcyI6SXR0LGNpcmNsZTpicHR9KSlbeV19O3ZhciB3dz17fTt3dy5kcmF3RWxlbWVudD1mdW5jdGlvbih5LGcseCxULEwsTyl7dmFyIFA9dGhpcztnLmlzTm9kZSgpP1AuZHJhd05vZGUoeSxnLHgsVCxMLE8pOlAuZHJhd0VkZ2UoeSxnLHgsVCxMLE8pfSx3dy5kcmF3RWxlbWVudE92ZXJsYXk9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzO2cuaXNOb2RlKCk/eC5kcmF3Tm9kZU92ZXJsYXkoeSxnKTp4LmRyYXdFZGdlT3ZlcmxheSh5LGcpfSx3dy5kcmF3RWxlbWVudFVuZGVybGF5PWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcztnLmlzTm9kZSgpP3guZHJhd05vZGVVbmRlcmxheSh5LGcpOnguZHJhd0VkZ2VVbmRlcmxheSh5LGcpfSx3dy5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb249ZnVuY3Rpb24oeSxnLHgsVCxMLE8sUCwkKXt2YXIgcT10aGlzLFM9eC5nZXRCb3VuZGluZ0JveChnKTtpZighKFMudz09PTB8fFMuaD09PTApKXt2YXIgVj14LmdldEVsZW1lbnQoZyxTLFQsTCxPKTtpZihWIT1udWxsKXt2YXIgWT0kKHEsZyk7aWYoWT09PTApcmV0dXJuO3ZhciBydD1QKHEsZyksb3Q9Uy54MSxodD1TLnkxLGR0PVMudyxMdD1TLmgsa3QsRHQsUHQsJHQsWnQ7aWYocnQhPT0wKXt2YXIgWXQ9eC5nZXRSb3RhdGlvblBvaW50KGcpO1B0PVl0LngsJHQ9WXQueSx5LnRyYW5zbGF0ZShQdCwkdCkseS5yb3RhdGUocnQpLFp0PXEuZ2V0SW1nU21vb3RoaW5nKHkpLFp0fHxxLnNldEltZ1Ntb290aGluZyh5LCEwKTt2YXIgcXQ9eC5nZXRSb3RhdGlvbk9mZnNldChnKTtrdD1xdC54LER0PXF0Lnl9ZWxzZSBrdD1vdCxEdD1odDt2YXIgbmU7WSE9PTEmJihuZT15Lmdsb2JhbEFscGhhLHkuZ2xvYmFsQWxwaGE9bmUqWSkseS5kcmF3SW1hZ2UoVi50ZXh0dXJlLmNhbnZhcyxWLngsMCxWLndpZHRoLFYuaGVpZ2h0LGt0LER0LGR0LEx0KSxZIT09MSYmKHkuZ2xvYmFsQWxwaGE9bmUpLHJ0IT09MCYmKHkucm90YXRlKC1ydCkseS50cmFuc2xhdGUoLVB0LC0kdCksWnR8fHEuc2V0SW1nU21vb3RoaW5nKHksITEpKX1lbHNlIHguZHJhd0VsZW1lbnQoeSxnKX19O3ZhciBvTT1mdW5jdGlvbigpe3JldHVybiAwfSxUQz1mdW5jdGlvbihnLHgpe3JldHVybiBnLmdldFRleHRBbmdsZSh4LG51bGwpfSxhUj1mdW5jdGlvbihnLHgpe3JldHVybiBnLmdldFRleHRBbmdsZSh4LCJzb3VyY2UiKX0sd3B0PWZ1bmN0aW9uKGcseCl7cmV0dXJuIGcuZ2V0VGV4dEFuZ2xlKHgsInRhcmdldCIpfSx2cHQ9ZnVuY3Rpb24oZyx4KXtyZXR1cm4geC5lZmZlY3RpdmVPcGFjaXR5KCl9LG9SPWZ1bmN0aW9uKGcseCl7cmV0dXJuIHgucHN0eWxlKCJ0ZXh0LW9wYWNpdHkiKS5wZlZhbHVlKnguZWZmZWN0aXZlT3BhY2l0eSgpfTt3dy5kcmF3Q2FjaGVkRWxlbWVudD1mdW5jdGlvbih5LGcseCxULEwsTyl7dmFyIFA9dGhpcywkPVAuZGF0YSxxPSQuZWxlVHhyQ2FjaGUsUz0kLmxibFR4ckNhY2hlLFY9JC5zbGJUeHJDYWNoZSxZPSQudGxiVHhyQ2FjaGUscnQ9Zy5ib3VuZGluZ0JveCgpLG90PU89PT0hMD9xLnJlYXNvbnMuaGlnaFF1YWxpdHk6bnVsbDtpZighKHJ0Lnc9PT0wfHxydC5oPT09MHx8IWcudmlzaWJsZSgpKSYmKCFUfHxBTChydCxUKSkpe3ZhciBodD1nLmlzRWRnZSgpLGR0PWcuZWxlbWVudCgpLl9wcml2YXRlLnJzY3JhdGNoLmJhZExpbmU7UC5kcmF3RWxlbWVudFVuZGVybGF5KHksZyksUC5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oeSxnLHEseCxMLG90LG9NLHZwdCksKCFodHx8IWR0KSYmUC5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oeSxnLFMseCxMLG90LFRDLG9SKSxodCYmIWR0JiYoUC5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oeSxnLFYseCxMLG90LGFSLG9SKSxQLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbih5LGcsWSx4LEwsb3Qsd3B0LG9SKSksUC5kcmF3RWxlbWVudE92ZXJsYXkoeSxnKX19LHd3LmRyYXdFbGVtZW50cz1mdW5jdGlvbih5LGcpe2Zvcih2YXIgeD10aGlzLFQ9MDtUPGcubGVuZ3RoO1QrKyl7dmFyIEw9Z1tUXTt4LmRyYXdFbGVtZW50KHksTCl9fSx3dy5kcmF3Q2FjaGVkRWxlbWVudHM9ZnVuY3Rpb24oeSxnLHgsVCl7Zm9yKHZhciBMPXRoaXMsTz0wO088Zy5sZW5ndGg7TysrKXt2YXIgUD1nW09dO0wuZHJhd0NhY2hlZEVsZW1lbnQoeSxQLHgsVCl9fSx3dy5kcmF3Q2FjaGVkTm9kZXM9ZnVuY3Rpb24oeSxnLHgsVCl7Zm9yKHZhciBMPXRoaXMsTz0wO088Zy5sZW5ndGg7TysrKXt2YXIgUD1nW09dO1AuaXNOb2RlKCkmJkwuZHJhd0NhY2hlZEVsZW1lbnQoeSxQLHgsVCl9fSx3dy5kcmF3TGF5ZXJlZEVsZW1lbnRzPWZ1bmN0aW9uKHksZyx4LFQpe3ZhciBMPXRoaXMsTz1MLmRhdGEubHlyVHhyQ2FjaGUuZ2V0TGF5ZXJzKGcseCk7aWYoTylmb3IodmFyIFA9MDtQPE8ubGVuZ3RoO1ArKyl7dmFyICQ9T1tQXSxxPSQuYmI7cS53PT09MHx8cS5oPT09MHx8eS5kcmF3SW1hZ2UoJC5jYW52YXMscS54MSxxLnkxLHEudyxxLmgpfWVsc2UgTC5kcmF3Q2FjaGVkRWxlbWVudHMoeSxnLHgsVCl9O3ZhciB2dz17fTt2dy5kcmF3RWRnZT1mdW5jdGlvbih5LGcseCl7dmFyIFQ9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLEw9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLE89YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwLFA9dGhpcywkPWcuX3ByaXZhdGUucnNjcmF0Y2g7aWYoIShPJiYhZy52aXNpYmxlKCkpJiYhKCQuYmFkTGluZXx8JC5hbGxwdHM9PW51bGx8fGlzTmFOKCQuYWxscHRzWzBdKSkpe3ZhciBxO3gmJihxPXgseS50cmFuc2xhdGUoLXEueDEsLXEueTEpKTt2YXIgUz1PP2cucHN0eWxlKCJvcGFjaXR5IikudmFsdWU6MSxWPU8/Zy5wc3R5bGUoImxpbmUtb3BhY2l0eSIpLnZhbHVlOjEsWT1nLnBzdHlsZSgiY3VydmUtc3R5bGUiKS52YWx1ZSxydD1nLnBzdHlsZSgibGluZS1zdHlsZSIpLnZhbHVlLG90PWcucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsaHQ9Zy5wc3R5bGUoImxpbmUtY2FwIikudmFsdWUsZHQ9UypWLEx0PVMqVixrdD1mdW5jdGlvbigpe3ZhciBpZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ZHQ7WT09PSJzdHJhaWdodC10cmlhbmdsZSI/KFAuZWxlU3Ryb2tlU3R5bGUoeSxnLGllKSxQLmRyYXdFZGdlVHJpYW5nbGVQYXRoKGcseSwkLmFsbHB0cykpOih5LmxpbmVXaWR0aD1vdCx5LmxpbmVDYXA9aHQsUC5lbGVTdHJva2VTdHlsZSh5LGcsaWUpLFAuZHJhd0VkZ2VQYXRoKGcseSwkLmFsbHB0cyxydCkseS5saW5lQ2FwPSJidXR0Iil9LER0PWZ1bmN0aW9uKCl7TCYmUC5kcmF3RWRnZU92ZXJsYXkoeSxnKX0sUHQ9ZnVuY3Rpb24oKXtMJiZQLmRyYXdFZGdlVW5kZXJsYXkoeSxnKX0sJHQ9ZnVuY3Rpb24oKXt2YXIgaWU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOkx0O1AuZHJhd0Fycm93aGVhZHMoeSxnLGllKX0sWnQ9ZnVuY3Rpb24oKXtQLmRyYXdFbGVtZW50VGV4dCh5LGcsbnVsbCxUKX07eS5saW5lSm9pbj0icm91bmQiO3ZhciBZdD1nLnBzdHlsZSgiZ2hvc3QiKS52YWx1ZT09PSJ5ZXMiO2lmKFl0KXt2YXIgcXQ9Zy5wc3R5bGUoImdob3N0LW9mZnNldC14IikucGZWYWx1ZSxuZT1nLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXkiKS5wZlZhbHVlLEd0PWcucHN0eWxlKCJnaG9zdC1vcGFjaXR5IikudmFsdWUsZ2U9ZHQqR3Q7eS50cmFuc2xhdGUocXQsbmUpLGt0KGdlKSwkdChnZSkseS50cmFuc2xhdGUoLXF0LC1uZSl9UHQoKSxrdCgpLCR0KCksRHQoKSxadCgpLHgmJnkudHJhbnNsYXRlKHEueDEscS55MSl9fTt2YXIgT3R0PWZ1bmN0aW9uKGcpe2lmKCFbIm92ZXJsYXkiLCJ1bmRlcmxheSJdLmluY2x1ZGVzKGcpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdGF0ZSIpO3JldHVybiBmdW5jdGlvbih4LFQpe2lmKFQudmlzaWJsZSgpKXt2YXIgTD1ULnBzdHlsZSgiIi5jb25jYXQoZywiLW9wYWNpdHkiKSkudmFsdWU7aWYoTCE9PTApe3ZhciBPPXRoaXMsUD1PLnVzZVBhdGhzKCksJD1ULl9wcml2YXRlLnJzY3JhdGNoLHE9VC5wc3R5bGUoIiIuY29uY2F0KGcsIi1wYWRkaW5nIikpLnBmVmFsdWUsUz0yKnEsVj1ULnBzdHlsZSgiIi5jb25jYXQoZywiLWNvbG9yIikpLnZhbHVlO3gubGluZVdpZHRoPVMsJC5lZGdlVHlwZT09PSJzZWxmIiYmIVA/eC5saW5lQ2FwPSJidXR0Ijp4LmxpbmVDYXA9InJvdW5kIixPLmNvbG9yU3Ryb2tlU3R5bGUoeCxWWzBdLFZbMV0sVlsyXSxMKSxPLmRyYXdFZGdlUGF0aChULHgsJC5hbGxwdHMsInNvbGlkIil9fX19O3Z3LmRyYXdFZGdlT3ZlcmxheT1PdHQoIm92ZXJsYXkiKSx2dy5kcmF3RWRnZVVuZGVybGF5PU90dCgidW5kZXJsYXkiKSx2dy5kcmF3RWRnZVBhdGg9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9eS5fcHJpdmF0ZS5yc2NyYXRjaCxPPWcsUCwkPSExLHE9dGhpcy51c2VQYXRocygpLFM9eS5wc3R5bGUoImxpbmUtZGFzaC1wYXR0ZXJuIikucGZWYWx1ZSxWPXkucHN0eWxlKCJsaW5lLWRhc2gtb2Zmc2V0IikucGZWYWx1ZTtpZihxKXt2YXIgWT14LmpvaW4oIiQiKSxydD1MLnBhdGhDYWNoZUtleSYmTC5wYXRoQ2FjaGVLZXk9PT1ZO3J0PyhQPWc9TC5wYXRoQ2FjaGUsJD0hMCk6KFA9Zz1uZXcgUGF0aDJELEwucGF0aENhY2hlS2V5PVksTC5wYXRoQ2FjaGU9UCl9aWYoTy5zZXRMaW5lRGFzaClzd2l0Y2goVCl7Y2FzZSJkb3R0ZWQiOk8uc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjpPLnNldExpbmVEYXNoKFMpLE8ubGluZURhc2hPZmZzZXQ9VjticmVhaztjYXNlInNvbGlkIjpPLnNldExpbmVEYXNoKFtdKTticmVha31pZighJCYmIUwuYmFkTGluZSlzd2l0Y2goZy5iZWdpblBhdGgmJmcuYmVnaW5QYXRoKCksZy5tb3ZlVG8oeFswXSx4WzFdKSxMLmVkZ2VUeXBlKXtjYXNlImJlemllciI6Y2FzZSJzZWxmIjpjYXNlImNvbXBvdW5kIjpjYXNlIm11bHRpYmV6aWVyIjpmb3IodmFyIG90PTI7b3QrMzx4Lmxlbmd0aDtvdCs9NClnLnF1YWRyYXRpY0N1cnZlVG8oeFtvdF0seFtvdCsxXSx4W290KzJdLHhbb3QrM10pO2JyZWFrO2Nhc2Uic3RyYWlnaHQiOmNhc2Uic2VnbWVudHMiOmNhc2UiaGF5c3RhY2siOmZvcih2YXIgaHQ9MjtodCsxPHgubGVuZ3RoO2h0Kz0yKWcubGluZVRvKHhbaHRdLHhbaHQrMV0pO2JyZWFrfWc9TyxxP2cuc3Ryb2tlKFApOmcuc3Ryb2tlKCksZy5zZXRMaW5lRGFzaCYmZy5zZXRMaW5lRGFzaChbXSl9LHZ3LmRyYXdFZGdlVHJpYW5nbGVQYXRoPWZ1bmN0aW9uKHksZyx4KXtnLmZpbGxTdHlsZT1nLnN0cm9rZVN0eWxlO2Zvcih2YXIgVD15LnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLEw9MDtMKzE8eC5sZW5ndGg7TCs9Mil7dmFyIE89W3hbTCsyXS14W0xdLHhbTCszXS14W0wrMV1dLFA9TWF0aC5zcXJ0KE9bMF0qT1swXStPWzFdKk9bMV0pLCQ9W09bMV0vUCwtT1swXS9QXSxxPVskWzBdKlQvMiwkWzFdKlQvMl07Zy5iZWdpblBhdGgoKSxnLm1vdmVUbyh4W0xdLXFbMF0seFtMKzFdLXFbMV0pLGcubGluZVRvKHhbTF0rcVswXSx4W0wrMV0rcVsxXSksZy5saW5lVG8oeFtMKzJdLHhbTCszXSksZy5jbG9zZVBhdGgoKSxnLmZpbGwoKX19LHZ3LmRyYXdBcnJvd2hlYWRzPWZ1bmN0aW9uKHksZyx4KXt2YXIgVD1nLl9wcml2YXRlLnJzY3JhdGNoLEw9VC5lZGdlVHlwZT09PSJoYXlzdGFjayI7THx8dGhpcy5kcmF3QXJyb3doZWFkKHksZywic291cmNlIixULmFycm93U3RhcnRYLFQuYXJyb3dTdGFydFksVC5zcmNBcnJvd0FuZ2xlLHgpLHRoaXMuZHJhd0Fycm93aGVhZCh5LGcsIm1pZC10YXJnZXQiLFQubWlkWCxULm1pZFksVC5taWR0Z3RBcnJvd0FuZ2xlLHgpLHRoaXMuZHJhd0Fycm93aGVhZCh5LGcsIm1pZC1zb3VyY2UiLFQubWlkWCxULm1pZFksVC5taWRzcmNBcnJvd0FuZ2xlLHgpLEx8fHRoaXMuZHJhd0Fycm93aGVhZCh5LGcsInRhcmdldCIsVC5hcnJvd0VuZFgsVC5hcnJvd0VuZFksVC50Z3RBcnJvd0FuZ2xlLHgpfSx2dy5kcmF3QXJyb3doZWFkPWZ1bmN0aW9uKHksZyx4LFQsTCxPLFApe2lmKCEoaXNOYU4oVCl8fFQ9PW51bGx8fGlzTmFOKEwpfHxMPT1udWxsfHxpc05hTihPKXx8Tz09bnVsbCkpe3ZhciAkPXRoaXMscT1nLnBzdHlsZSh4KyItYXJyb3ctc2hhcGUiKS52YWx1ZTtpZihxIT09Im5vbmUiKXt2YXIgUz1nLnBzdHlsZSh4KyItYXJyb3ctZmlsbCIpLnZhbHVlPT09ImhvbGxvdyI/ImJvdGgiOiJmaWxsZWQiLFY9Zy5wc3R5bGUoeCsiLWFycm93LWZpbGwiKS52YWx1ZSxZPWcucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUscnQ9Zy5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZTtQPT09dm9pZCAwJiYoUD1ydCk7dmFyIG90PXkuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uOyhQIT09MXx8Vj09PSJob2xsb3ciKSYmKHkuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdXQiLCQuY29sb3JGaWxsU3R5bGUoeSwyNTUsMjU1LDI1NSwxKSwkLmNvbG9yU3Ryb2tlU3R5bGUoeSwyNTUsMjU1LDI1NSwxKSwkLmRyYXdBcnJvd1NoYXBlKGcseSxTLFkscSxULEwsTykseS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249b3QpO3ZhciBodD1nLnBzdHlsZSh4KyItYXJyb3ctY29sb3IiKS52YWx1ZTskLmNvbG9yRmlsbFN0eWxlKHksaHRbMF0saHRbMV0saHRbMl0sUCksJC5jb2xvclN0cm9rZVN0eWxlKHksaHRbMF0saHRbMV0saHRbMl0sUCksJC5kcmF3QXJyb3dTaGFwZShnLHksVixZLHEsVCxMLE8pfX19LHZ3LmRyYXdBcnJvd1NoYXBlPWZ1bmN0aW9uKHksZyx4LFQsTCxPLFAsJCl7dmFyIHE9dGhpcyxTPXRoaXMudXNlUGF0aHMoKSYmTCE9PSJ0cmlhbmdsZS1jcm9zcyIsVj0hMSxZLHJ0PWcsb3Q9e3g6Tyx5OlB9LGh0PXkucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlLGR0PXRoaXMuZ2V0QXJyb3dXaWR0aChULGh0KSxMdD1xLmFycm93U2hhcGVzW0xdO2lmKFMpe3ZhciBrdD1xLmFycm93UGF0aENhY2hlPXEuYXJyb3dQYXRoQ2FjaGV8fFtdLER0PXJkKEwpLFB0PWt0W0R0XTtQdCE9bnVsbD8oWT1nPVB0LFY9ITApOihZPWc9bmV3IFBhdGgyRCxrdFtEdF09WSl9Vnx8KGcuYmVnaW5QYXRoJiZnLmJlZ2luUGF0aCgpLFM/THQuZHJhdyhnLDEsMCx7eDowLHk6MH0sMSk6THQuZHJhdyhnLGR0LCQsb3QsVCksZy5jbG9zZVBhdGgmJmcuY2xvc2VQYXRoKCkpLGc9cnQsUyYmKGcudHJhbnNsYXRlKE8sUCksZy5yb3RhdGUoJCksZy5zY2FsZShkdCxkdCkpLCh4PT09ImZpbGxlZCJ8fHg9PT0iYm90aCIpJiYoUz9nLmZpbGwoWSk6Zy5maWxsKCkpLCh4PT09ImhvbGxvdyJ8fHg9PT0iYm90aCIpJiYoZy5saW5lV2lkdGg9KEx0Lm1hdGNoRWRnZVdpZHRoP1Q6MSkvKFM/ZHQ6MSksZy5saW5lSm9pbj0ibWl0ZXIiLFM/Zy5zdHJva2UoWSk6Zy5zdHJva2UoKSksUyYmKGcuc2NhbGUoMS9kdCwxL2R0KSxnLnJvdGF0ZSgtJCksZy50cmFuc2xhdGUoLU8sLVApKX07dmFyIENDPXt9O0NDLnNhZmVEcmF3SW1hZ2U9ZnVuY3Rpb24oeSxnLHgsVCxMLE8sUCwkLHEsUyl7aWYoIShMPD0wfHxPPD0wfHxxPD0wfHxTPD0wKSl0cnl7eS5kcmF3SW1hZ2UoZyx4LFQsTCxPLFAsJCxxLFMpfWNhdGNoKFYpe1NjKFYpfX0sQ0MuZHJhd0luc2NyaWJlZEltYWdlPWZ1bmN0aW9uKHksZyx4LFQsTCl7dmFyIE89dGhpcyxQPXgucG9zaXRpb24oKSwkPVAueCxxPVAueSxTPXguY3koKS5zdHlsZSgpLFY9Uy5nZXRJbmRleGVkU3R5bGUuYmluZChTKSxZPVYoeCwiYmFja2dyb3VuZC1maXQiLCJ2YWx1ZSIsVCkscnQ9Vih4LCJiYWNrZ3JvdW5kLXJlcGVhdCIsInZhbHVlIixUKSxvdD14LndpZHRoKCksaHQ9eC5oZWlnaHQoKSxkdD14LnBhZGRpbmcoKSoyLEx0PW90KyhWKHgsImJhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG8iLCJ2YWx1ZSIsVCk9PT0iaW5uZXIiPzA6ZHQpLGt0PWh0KyhWKHgsImJhY2tncm91bmQtaGVpZ2h0LXJlbGF0aXZlLXRvIiwidmFsdWUiLFQpPT09ImlubmVyIj8wOmR0KSxEdD14Ll9wcml2YXRlLnJzY3JhdGNoLFB0PVYoeCwiYmFja2dyb3VuZC1jbGlwIiwidmFsdWUiLFQpLCR0PVB0PT09Im5vZGUiLFp0PVYoeCwiYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5IiwidmFsdWUiLFQpKkwsWXQ9Vih4LCJiYWNrZ3JvdW5kLWltYWdlLXNtb290aGluZyIsInZhbHVlIixUKSxxdD1nLndpZHRofHxnLmNhY2hlZFcsbmU9Zy5oZWlnaHR8fGcuY2FjaGVkSDsocXQ9PW51bGx8fG5lPT1udWxsKSYmKGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZykscXQ9Zy5jYWNoZWRXPWcud2lkdGh8fGcub2Zmc2V0V2lkdGgsbmU9Zy5jYWNoZWRIPWcuaGVpZ2h0fHxnLm9mZnNldEhlaWdodCxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGcpKTt2YXIgR3Q9cXQsZ2U9bmU7aWYoVih4LCJiYWNrZ3JvdW5kLXdpZHRoIiwidmFsdWUiLFQpIT09ImF1dG8iJiYoVih4LCJiYWNrZ3JvdW5kLXdpZHRoIiwidW5pdHMiLFQpPT09IiUiP0d0PVYoeCwiYmFja2dyb3VuZC13aWR0aCIsInBmVmFsdWUiLFQpKkx0Okd0PVYoeCwiYmFja2dyb3VuZC13aWR0aCIsInBmVmFsdWUiLFQpKSxWKHgsImJhY2tncm91bmQtaGVpZ2h0IiwidmFsdWUiLFQpIT09ImF1dG8iJiYoVih4LCJiYWNrZ3JvdW5kLWhlaWdodCIsInVuaXRzIixUKT09PSIlIj9nZT1WKHgsImJhY2tncm91bmQtaGVpZ2h0IiwicGZWYWx1ZSIsVCkqa3Q6Z2U9Vih4LCJiYWNrZ3JvdW5kLWhlaWdodCIsInBmVmFsdWUiLFQpKSwhKEd0PT09MHx8Z2U9PT0wKSl7aWYoWT09PSJjb250YWluIil7dmFyIGJlPU1hdGgubWluKEx0L0d0LGt0L2dlKTtHdCo9YmUsZ2UqPWJlfWVsc2UgaWYoWT09PSJjb3ZlciIpe3ZhciBiZT1NYXRoLm1heChMdC9HdCxrdC9nZSk7R3QqPWJlLGdlKj1iZX12YXIgaWU9JC1MdC8yLEZlPVYoeCwiYmFja2dyb3VuZC1wb3NpdGlvbi14IiwidW5pdHMiLFQpLHdlPVYoeCwiYmFja2dyb3VuZC1wb3NpdGlvbi14IiwicGZWYWx1ZSIsVCk7RmU9PT0iJSI/aWUrPShMdC1HdCkqd2U6aWUrPXdlO3ZhciBibj1WKHgsImJhY2tncm91bmQtb2Zmc2V0LXgiLCJ1bml0cyIsVCksemU9Vih4LCJiYWNrZ3JvdW5kLW9mZnNldC14IiwicGZWYWx1ZSIsVCk7Ym49PT0iJSI/aWUrPShMdC1HdCkqemU6aWUrPXplO3ZhciBHZT1xLWt0LzIsRW49Vih4LCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiLCJ1bml0cyIsVCksSW49Vih4LCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiLCJwZlZhbHVlIixUKTtFbj09PSIlIj9HZSs9KGt0LWdlKSpJbjpHZSs9SW47dmFyIFluPVYoeCwiYmFja2dyb3VuZC1vZmZzZXQteSIsInVuaXRzIixUKSxTbj1WKHgsImJhY2tncm91bmQtb2Zmc2V0LXkiLCJwZlZhbHVlIixUKTtZbj09PSIlIj9HZSs9KGt0LWdlKSpTbjpHZSs9U24sRHQucGF0aENhY2hlJiYoaWUtPSQsR2UtPXEsJD0wLHE9MCk7dmFyIFduPXkuZ2xvYmFsQWxwaGE7eS5nbG9iYWxBbHBoYT1adDt2YXIgcnI9Ty5nZXRJbWdTbW9vdGhpbmcoeSksd3I9ITE7aWYoWXQ9PT0ibm8iJiZycj8oTy5zZXRJbWdTbW9vdGhpbmcoeSwhMSksd3I9ITApOll0PT09InllcyImJiFyciYmKE8uc2V0SW1nU21vb3RoaW5nKHksITApLHdyPSEwKSxydD09PSJuby1yZXBlYXQiKSR0JiYoeS5zYXZlKCksRHQucGF0aENhY2hlP3kuY2xpcChEdC5wYXRoQ2FjaGUpOihPLm5vZGVTaGFwZXNbTy5nZXROb2RlU2hhcGUoeCldLmRyYXcoeSwkLHEsTHQsa3QpLHkuY2xpcCgpKSksTy5zYWZlRHJhd0ltYWdlKHksZywwLDAscXQsbmUsaWUsR2UsR3QsZ2UpLCR0JiZ5LnJlc3RvcmUoKTtlbHNle3ZhciB1cj15LmNyZWF0ZVBhdHRlcm4oZyxydCk7eS5maWxsU3R5bGU9dXIsTy5ub2RlU2hhcGVzW08uZ2V0Tm9kZVNoYXBlKHgpXS5kcmF3KHksJCxxLEx0LGt0KSx5LnRyYW5zbGF0ZShpZSxHZSkseS5maWxsKCkseS50cmFuc2xhdGUoLWllLC1HZSl9eS5nbG9iYWxBbHBoYT1Xbix3ciYmTy5zZXRJbWdTbW9vdGhpbmcoeSxycil9fTt2YXIgdng9e307dnguZWxlVGV4dEJpZ2dlclRoYW5NaW49ZnVuY3Rpb24oeSxnKXtpZighZyl7dmFyIHg9eS5jeSgpLnpvb20oKSxUPXRoaXMuZ2V0UGl4ZWxSYXRpbygpLEw9TWF0aC5jZWlsKF9MKHgqVCkpO2c9TWF0aC5wb3coMixMKX12YXIgTz15LnBzdHlsZSgiZm9udC1zaXplIikucGZWYWx1ZSpnLFA9eS5wc3R5bGUoIm1pbi16b29tZWQtZm9udC1zaXplIikucGZWYWx1ZTtyZXR1cm4hKE88UCl9LHZ4LmRyYXdFbGVtZW50VGV4dD1mdW5jdGlvbih5LGcseCxULEwpe3ZhciBPPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMCxQPXRoaXM7aWYoVD09bnVsbCl7aWYoTyYmIVAuZWxlVGV4dEJpZ2dlclRoYW5NaW4oZykpcmV0dXJufWVsc2UgaWYoVD09PSExKXJldHVybjtpZihnLmlzTm9kZSgpKXt2YXIgJD1nLnBzdHlsZSgibGFiZWwiKTtpZighJHx8ISQudmFsdWUpcmV0dXJuO3ZhciBxPVAuZ2V0TGFiZWxKdXN0aWZpY2F0aW9uKGcpO3kudGV4dEFsaWduPXEseS50ZXh0QmFzZWxpbmU9ImJvdHRvbSJ9ZWxzZXt2YXIgUz1nLmVsZW1lbnQoKS5fcHJpdmF0ZS5yc2NyYXRjaC5iYWRMaW5lLFY9Zy5wc3R5bGUoImxhYmVsIiksWT1nLnBzdHlsZSgic291cmNlLWxhYmVsIikscnQ9Zy5wc3R5bGUoInRhcmdldC1sYWJlbCIpO2lmKFN8fCghVnx8IVYudmFsdWUpJiYoIVl8fCFZLnZhbHVlKSYmKCFydHx8IXJ0LnZhbHVlKSlyZXR1cm47eS50ZXh0QWxpZ249ImNlbnRlciIseS50ZXh0QmFzZWxpbmU9ImJvdHRvbSJ9dmFyIG90PSF4LGh0O3gmJihodD14LHkudHJhbnNsYXRlKC1odC54MSwtaHQueTEpKSxMPT1udWxsPyhQLmRyYXdUZXh0KHksZyxudWxsLG90LE8pLGcuaXNFZGdlKCkmJihQLmRyYXdUZXh0KHksZywic291cmNlIixvdCxPKSxQLmRyYXdUZXh0KHksZywidGFyZ2V0IixvdCxPKSkpOlAuZHJhd1RleHQoeSxnLEwsb3QsTykseCYmeS50cmFuc2xhdGUoaHQueDEsaHQueTEpfSx2eC5nZXRGb250Q2FjaGU9ZnVuY3Rpb24oeSl7dmFyIGc7dGhpcy5mb250Q2FjaGVzPXRoaXMuZm9udENhY2hlc3x8W107Zm9yKHZhciB4PTA7eDx0aGlzLmZvbnRDYWNoZXMubGVuZ3RoO3grKylpZihnPXRoaXMuZm9udENhY2hlc1t4XSxnLmNvbnRleHQ9PT15KXJldHVybiBnO3JldHVybiBnPXtjb250ZXh0Onl9LHRoaXMuZm9udENhY2hlcy5wdXNoKGcpLGd9LHZ4LnNldHVwVGV4dFN0eWxlPWZ1bmN0aW9uKHksZyl7dmFyIHg9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiEwLFQ9Zy5wc3R5bGUoImZvbnQtc3R5bGUiKS5zdHJWYWx1ZSxMPWcucHN0eWxlKCJmb250LXNpemUiKS5wZlZhbHVlKyJweCIsTz1nLnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxQPWcucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLCQ9eD9nLmVmZmVjdGl2ZU9wYWNpdHkoKSpnLnBzdHlsZSgidGV4dC1vcGFjaXR5IikudmFsdWU6MSxxPWcucHN0eWxlKCJ0ZXh0LW91dGxpbmUtb3BhY2l0eSIpLnZhbHVlKiQsUz1nLnBzdHlsZSgiY29sb3IiKS52YWx1ZSxWPWcucHN0eWxlKCJ0ZXh0LW91dGxpbmUtY29sb3IiKS52YWx1ZTt5LmZvbnQ9VCsiICIrUCsiICIrTCsiICIrTyx5LmxpbmVKb2luPSJyb3VuZCIsdGhpcy5jb2xvckZpbGxTdHlsZSh5LFNbMF0sU1sxXSxTWzJdLCQpLHRoaXMuY29sb3JTdHJva2VTdHlsZSh5LFZbMF0sVlsxXSxWWzJdLHEpfTtmdW5jdGlvbiBtcHQoeSxnLHgsVCxMKXt2YXIgTz1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06NTt5LmJlZ2luUGF0aCgpLHkubW92ZVRvKGcrTyx4KSx5LmxpbmVUbyhnK1QtTyx4KSx5LnF1YWRyYXRpY0N1cnZlVG8oZytULHgsZytULHgrTykseS5saW5lVG8oZytULHgrTC1PKSx5LnF1YWRyYXRpY0N1cnZlVG8oZytULHgrTCxnK1QtTyx4K0wpLHkubGluZVRvKGcrTyx4K0wpLHkucXVhZHJhdGljQ3VydmVUbyhnLHgrTCxnLHgrTC1PKSx5LmxpbmVUbyhnLHgrTykseS5xdWFkcmF0aWNDdXJ2ZVRvKGcseCxnK08seCkseS5jbG9zZVBhdGgoKSx5LmZpbGwoKX12eC5nZXRUZXh0QW5nbGU9ZnVuY3Rpb24oeSxnKXt2YXIgeCxUPXkuX3ByaXZhdGUsTD1ULnJzY3JhdGNoLE89Zz9nKyItIjoiIixQPXkucHN0eWxlKE8rInRleHQtcm90YXRpb24iKSwkPXlwKEwsImxhYmVsQW5nbGUiLGcpO3JldHVybiBQLnN0clZhbHVlPT09ImF1dG9yb3RhdGUiP3g9eS5pc0VkZ2UoKT8kOjA6UC5zdHJWYWx1ZT09PSJub25lIj94PTA6eD1QLnBmVmFsdWUseH0sdnguZHJhd1RleHQ9ZnVuY3Rpb24oeSxnLHgpe3ZhciBUPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMCxMPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMCxPPWcuX3ByaXZhdGUsUD1PLnJzY3JhdGNoLCQ9TD9nLmVmZmVjdGl2ZU9wYWNpdHkoKToxO2lmKCEoTCYmKCQ9PT0wfHxnLnBzdHlsZSgidGV4dC1vcGFjaXR5IikudmFsdWU9PT0wKSkpe3g9PT0ibWFpbiImJih4PW51bGwpO3ZhciBxPXlwKFAsImxhYmVsWCIseCksUz15cChQLCJsYWJlbFkiLHgpLFYsWSxydD10aGlzLmdldExhYmVsVGV4dChnLHgpO2lmKHJ0IT1udWxsJiZydCE9PSIiJiYhaXNOYU4ocSkmJiFpc05hTihTKSl7dGhpcy5zZXR1cFRleHRTdHlsZSh5LGcsTCk7dmFyIG90PXg/eCsiLSI6IiIsaHQ9eXAoUCwibGFiZWxXaWR0aCIseCksZHQ9eXAoUCwibGFiZWxIZWlnaHQiLHgpLEx0PWcucHN0eWxlKG90KyJ0ZXh0LW1hcmdpbi14IikucGZWYWx1ZSxrdD1nLnBzdHlsZShvdCsidGV4dC1tYXJnaW4teSIpLnBmVmFsdWUsRHQ9Zy5pc0VkZ2UoKSxQdD1nLnBzdHlsZSgidGV4dC1oYWxpZ24iKS52YWx1ZSwkdD1nLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZTtEdCYmKFB0PSJjZW50ZXIiLCR0PSJjZW50ZXIiKSxxKz1MdCxTKz1rdDt2YXIgWnQ7c3dpdGNoKFQ/WnQ9dGhpcy5nZXRUZXh0QW5nbGUoZyx4KTpadD0wLFp0IT09MCYmKFY9cSxZPVMseS50cmFuc2xhdGUoVixZKSx5LnJvdGF0ZShadCkscT0wLFM9MCksJHQpe2Nhc2UidG9wIjpicmVhaztjYXNlImNlbnRlciI6Uys9ZHQvMjticmVhaztjYXNlImJvdHRvbSI6Uys9ZHQ7YnJlYWt9dmFyIFl0PWcucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtb3BhY2l0eSIpLnZhbHVlLHF0PWcucHN0eWxlKCJ0ZXh0LWJvcmRlci1vcGFjaXR5IikudmFsdWUsbmU9Zy5wc3R5bGUoInRleHQtYm9yZGVyLXdpZHRoIikucGZWYWx1ZSxHdD1nLnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmciKS5wZlZhbHVlO2lmKFl0PjB8fG5lPjAmJnF0PjApe3ZhciBnZT1xLUd0O3N3aXRjaChQdCl7Y2FzZSJsZWZ0IjpnZS09aHQ7YnJlYWs7Y2FzZSJjZW50ZXIiOmdlLT1odC8yO2JyZWFrfXZhciBiZT1TLWR0LUd0LGllPWh0KzIqR3QsRmU9ZHQrMipHdDtpZihZdD4wKXt2YXIgd2U9eS5maWxsU3R5bGUsYm49Zy5wc3R5bGUoInRleHQtYmFja2dyb3VuZC1jb2xvciIpLnZhbHVlO3kuZmlsbFN0eWxlPSJyZ2JhKCIrYm5bMF0rIiwiK2JuWzFdKyIsIitiblsyXSsiLCIrWXQqJCsiKSI7dmFyIHplPWcucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtc2hhcGUiKS5zdHJWYWx1ZTt6ZS5pbmRleE9mKCJyb3VuZCIpPT09MD9tcHQoeSxnZSxiZSxpZSxGZSwyKTp5LmZpbGxSZWN0KGdlLGJlLGllLEZlKSx5LmZpbGxTdHlsZT13ZX1pZihuZT4wJiZxdD4wKXt2YXIgR2U9eS5zdHJva2VTdHlsZSxFbj15LmxpbmVXaWR0aCxJbj1nLnBzdHlsZSgidGV4dC1ib3JkZXItY29sb3IiKS52YWx1ZSxZbj1nLnBzdHlsZSgidGV4dC1ib3JkZXItc3R5bGUiKS52YWx1ZTtpZih5LnN0cm9rZVN0eWxlPSJyZ2JhKCIrSW5bMF0rIiwiK0luWzFdKyIsIitJblsyXSsiLCIrcXQqJCsiKSIseS5saW5lV2lkdGg9bmUseS5zZXRMaW5lRGFzaClzd2l0Y2goWW4pe2Nhc2UiZG90dGVkIjp5LnNldExpbmVEYXNoKFsxLDFdKTticmVhaztjYXNlImRhc2hlZCI6eS5zZXRMaW5lRGFzaChbNCwyXSk7YnJlYWs7Y2FzZSJkb3VibGUiOnkubGluZVdpZHRoPW5lLzQseS5zZXRMaW5lRGFzaChbXSk7YnJlYWs7Y2FzZSJzb2xpZCI6eS5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYoeS5zdHJva2VSZWN0KGdlLGJlLGllLEZlKSxZbj09PSJkb3VibGUiKXt2YXIgU249bmUvMjt5LnN0cm9rZVJlY3QoZ2UrU24sYmUrU24saWUtU24qMixGZS1TbioyKX15LnNldExpbmVEYXNoJiZ5LnNldExpbmVEYXNoKFtdKSx5LmxpbmVXaWR0aD1Fbix5LnN0cm9rZVN0eWxlPUdlfX12YXIgV249MipnLnBzdHlsZSgidGV4dC1vdXRsaW5lLXdpZHRoIikucGZWYWx1ZTtpZihXbj4wJiYoeS5saW5lV2lkdGg9V24pLGcucHN0eWxlKCJ0ZXh0LXdyYXAiKS52YWx1ZT09PSJ3cmFwIil7dmFyIHJyPXlwKFAsImxhYmVsV3JhcENhY2hlZExpbmVzIix4KSx3cj15cChQLCJsYWJlbExpbmVIZWlnaHQiLHgpLHVyPWh0LzIsZXI9dGhpcy5nZXRMYWJlbEp1c3RpZmljYXRpb24oZyk7c3dpdGNoKGVyPT09ImF1dG8ifHwoUHQ9PT0ibGVmdCI/ZXI9PT0ibGVmdCI/cSs9LWh0OmVyPT09ImNlbnRlciImJihxKz0tdXIpOlB0PT09ImNlbnRlciI/ZXI9PT0ibGVmdCI/cSs9LXVyOmVyPT09InJpZ2h0IiYmKHErPXVyKTpQdD09PSJyaWdodCImJihlcj09PSJjZW50ZXIiP3ErPXVyOmVyPT09InJpZ2h0IiYmKHErPWh0KSkpLCR0KXtjYXNlInRvcCI6Uy09KHJyLmxlbmd0aC0xKSp3cjticmVhaztjYXNlImNlbnRlciI6Y2FzZSJib3R0b20iOlMtPShyci5sZW5ndGgtMSkqd3I7YnJlYWt9Zm9yKHZhciB2bj0wO3ZuPHJyLmxlbmd0aDt2bisrKVduPjAmJnkuc3Ryb2tlVGV4dChyclt2bl0scSxTKSx5LmZpbGxUZXh0KHJyW3ZuXSxxLFMpLFMrPXdyfWVsc2UgV24+MCYmeS5zdHJva2VUZXh0KHJ0LHEsUykseS5maWxsVGV4dChydCxxLFMpO1p0IT09MCYmKHkucm90YXRlKC1adCkseS50cmFuc2xhdGUoLVYsLVkpKX19fTt2YXIgWms9e307WmsuZHJhd05vZGU9ZnVuY3Rpb24oeSxnLHgpe3ZhciBUPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMCxMPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMCxPPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMCxQPXRoaXMsJCxxLFM9Zy5fcHJpdmF0ZSxWPVMucnNjcmF0Y2gsWT1nLnBvc2l0aW9uKCk7aWYoISghWChZLngpfHwhWChZLnkpKSYmIShPJiYhZy52aXNpYmxlKCkpKXt2YXIgcnQ9Tz9nLmVmZmVjdGl2ZU9wYWNpdHkoKToxLG90PVAudXNlUGF0aHMoKSxodCxkdD0hMSxMdD1nLnBhZGRpbmcoKTskPWcud2lkdGgoKSsyKkx0LHE9Zy5oZWlnaHQoKSsyKkx0O3ZhciBrdDt4JiYoa3Q9eCx5LnRyYW5zbGF0ZSgta3QueDEsLWt0LnkxKSk7Zm9yKHZhciBEdD1nLnBzdHlsZSgiYmFja2dyb3VuZC1pbWFnZSIpLFB0PUR0LnZhbHVlLCR0PW5ldyBBcnJheShQdC5sZW5ndGgpLFp0PW5ldyBBcnJheShQdC5sZW5ndGgpLFl0PTAscXQ9MDtxdDxQdC5sZW5ndGg7cXQrKyl7dmFyIG5lPVB0W3F0XSxHdD0kdFtxdF09bmUhPW51bGwmJm5lIT09Im5vbmUiO2lmKEd0KXt2YXIgZ2U9Zy5jeSgpLnN0eWxlKCkuZ2V0SW5kZXhlZFN0eWxlKGcsImJhY2tncm91bmQtaW1hZ2UtY3Jvc3NvcmlnaW4iLCJ2YWx1ZSIscXQpO1l0KyssWnRbcXRdPVAuZ2V0Q2FjaGVkSW1hZ2UobmUsZ2UsZnVuY3Rpb24oKXtTLmJhY2tncm91bmRUaW1lc3RhbXA9RGF0ZS5ub3coKSxnLmVtaXRBbmROb3RpZnkoImJhY2tncm91bmQiKX0pfX12YXIgYmU9Zy5wc3R5bGUoImJhY2tncm91bmQtYmxhY2tlbiIpLnZhbHVlLGllPWcucHN0eWxlKCJib3JkZXItd2lkdGgiKS5wZlZhbHVlLEZlPWcucHN0eWxlKCJiYWNrZ3JvdW5kLW9wYWNpdHkiKS52YWx1ZSpydCx3ZT1nLnBzdHlsZSgiYm9yZGVyLWNvbG9yIikudmFsdWUsYm49Zy5wc3R5bGUoImJvcmRlci1zdHlsZSIpLnZhbHVlLHplPWcucHN0eWxlKCJib3JkZXItb3BhY2l0eSIpLnZhbHVlKnJ0O3kubGluZUpvaW49Im1pdGVyIjt2YXIgR2U9ZnVuY3Rpb24oKXt2YXIgU2k9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOkZlO1AuZWxlRmlsbFN0eWxlKHksZyxTaSl9LEVuPWZ1bmN0aW9uKCl7dmFyIFNpPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp6ZTtQLmNvbG9yU3Ryb2tlU3R5bGUoeSx3ZVswXSx3ZVsxXSx3ZVsyXSxTaSl9LEluPWcucHN0eWxlKCJzaGFwZSIpLnN0clZhbHVlLFluPWcucHN0eWxlKCJzaGFwZS1wb2x5Z29uLXBvaW50cyIpLnBmVmFsdWU7aWYob3Qpe3kudHJhbnNsYXRlKFkueCxZLnkpO3ZhciBTbj1QLm5vZGVQYXRoQ2FjaGU9UC5ub2RlUGF0aENhY2hlfHxbXSxXbj1pZChJbj09PSJwb2x5Z29uIj9JbisiLCIrWW4uam9pbigiLCIpOkluLCIiK3EsIiIrJCkscnI9U25bV25dO3JyIT1udWxsPyhodD1ycixkdD0hMCxWLnBhdGhDYWNoZT1odCk6KGh0PW5ldyBQYXRoMkQsU25bV25dPVYucGF0aENhY2hlPWh0KX12YXIgd3I9ZnVuY3Rpb24oKXtpZighZHQpe3ZhciBTaT1ZO290JiYoU2k9e3g6MCx5OjB9KSxQLm5vZGVTaGFwZXNbUC5nZXROb2RlU2hhcGUoZyldLmRyYXcoaHR8fHksU2kueCxTaS55LCQscSl9b3Q/eS5maWxsKGh0KTp5LmZpbGwoKX0sdXI9ZnVuY3Rpb24oKXtmb3IodmFyIFNpPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpydCxVaT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITAsVmE9Uy5iYWNrZ3JvdW5kaW5nLFFzPTAscXM9MDtxczxadC5sZW5ndGg7cXMrKyl7dmFyIFRyPWcuY3koKS5zdHlsZSgpLmdldEluZGV4ZWRTdHlsZShnLCJiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50IiwidmFsdWUiLHFzKTtpZihVaSYmVHI9PT0ib3ZlciJ8fCFVaSYmVHI9PT0iaW5zaWRlIil7UXMrKztjb250aW51ZX0kdFtxc10mJlp0W3FzXS5jb21wbGV0ZSYmIVp0W3FzXS5lcnJvciYmKFFzKyssUC5kcmF3SW5zY3JpYmVkSW1hZ2UoeSxadFtxc10sZyxxcyxTaSkpfVMuYmFja2dyb3VuZGluZz1RcyE9PVl0LFZhIT09Uy5iYWNrZ3JvdW5kaW5nJiZnLnVwZGF0ZVN0eWxlKCExKX0sZXI9ZnVuY3Rpb24oKXt2YXIgU2k9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiExLFVpPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpydDtQLmhhc1BpZShnKSYmKFAuZHJhd1BpZSh5LGcsVWkpLFNpJiYob3R8fFAubm9kZVNoYXBlc1tQLmdldE5vZGVTaGFwZShnKV0uZHJhdyh5LFkueCxZLnksJCxxKSkpfSx2bj1mdW5jdGlvbigpe3ZhciBTaT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06cnQsVWk9KGJlPjA/YmU6LWJlKSpTaSxWYT1iZT4wPzA6MjU1O2JlIT09MCYmKFAuY29sb3JGaWxsU3R5bGUoeSxWYSxWYSxWYSxVaSksb3Q/eS5maWxsKGh0KTp5LmZpbGwoKSl9LGdyPWZ1bmN0aW9uKCl7aWYoaWU+MCl7aWYoeS5saW5lV2lkdGg9aWUseS5saW5lQ2FwPSJidXR0Iix5LnNldExpbmVEYXNoKXN3aXRjaChibil7Y2FzZSJkb3R0ZWQiOnkuc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjp5LnNldExpbmVEYXNoKFs0LDJdKTticmVhaztjYXNlInNvbGlkIjpjYXNlImRvdWJsZSI6eS5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYob3Q/eS5zdHJva2UoaHQpOnkuc3Ryb2tlKCksYm49PT0iZG91YmxlIil7eS5saW5lV2lkdGg9aWUvMzt2YXIgU2k9eS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247eS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsb3Q/eS5zdHJva2UoaHQpOnkuc3Ryb2tlKCkseS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249U2l9eS5zZXRMaW5lRGFzaCYmeS5zZXRMaW5lRGFzaChbXSl9fSxmcj1mdW5jdGlvbigpe0wmJlAuZHJhd05vZGVPdmVybGF5KHksZyxZLCQscSl9LEpyPWZ1bmN0aW9uKCl7TCYmUC5kcmF3Tm9kZVVuZGVybGF5KHksZyxZLCQscSl9LHZpPWZ1bmN0aW9uKCl7UC5kcmF3RWxlbWVudFRleHQoeSxnLG51bGwsVCl9LFhzPWcucHN0eWxlKCJnaG9zdCIpLnZhbHVlPT09InllcyI7aWYoWHMpe3ZhciBFYT1nLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXgiKS5wZlZhbHVlLENpPWcucHN0eWxlKCJnaG9zdC1vZmZzZXQteSIpLnBmVmFsdWUsaGk9Zy5wc3R5bGUoImdob3N0LW9wYWNpdHkiKS52YWx1ZSxncz1oaSpydDt5LnRyYW5zbGF0ZShFYSxDaSksR2UoaGkqRmUpLHdyKCksdXIoZ3MsITApLEVuKGhpKnplKSxncigpLGVyKGJlIT09MHx8aWUhPT0wKSx1cihncywhMSksdm4oZ3MpLHkudHJhbnNsYXRlKC1FYSwtQ2kpfW90JiZ5LnRyYW5zbGF0ZSgtWS54LC1ZLnkpLEpyKCksb3QmJnkudHJhbnNsYXRlKFkueCxZLnkpLEdlKCksd3IoKSx1cihydCwhMCksRW4oKSxncigpLGVyKGJlIT09MHx8aWUhPT0wKSx1cihydCwhMSksdm4oKSxvdCYmeS50cmFuc2xhdGUoLVkueCwtWS55KSx2aSgpLGZyKCkseCYmeS50cmFuc2xhdGUoa3QueDEsa3QueTEpfX07dmFyIFB0dD1mdW5jdGlvbihnKXtpZighWyJvdmVybGF5IiwidW5kZXJsYXkiXS5pbmNsdWRlcyhnKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RhdGUiKTtyZXR1cm4gZnVuY3Rpb24oeCxULEwsTyxQKXt2YXIgJD10aGlzO2lmKFQudmlzaWJsZSgpKXt2YXIgcT1ULnBzdHlsZSgiIi5jb25jYXQoZywiLXBhZGRpbmciKSkucGZWYWx1ZSxTPVQucHN0eWxlKCIiLmNvbmNhdChnLCItb3BhY2l0eSIpKS52YWx1ZSxWPVQucHN0eWxlKCIiLmNvbmNhdChnLCItY29sb3IiKSkudmFsdWUsWT1ULnBzdHlsZSgiIi5jb25jYXQoZywiLXNoYXBlIikpLnZhbHVlO2lmKFM+MCl7aWYoTD1MfHxULnBvc2l0aW9uKCksTz09bnVsbHx8UD09bnVsbCl7dmFyIHJ0PVQucGFkZGluZygpO089VC53aWR0aCgpKzIqcnQsUD1ULmhlaWdodCgpKzIqcnR9JC5jb2xvckZpbGxTdHlsZSh4LFZbMF0sVlsxXSxWWzJdLFMpLCQubm9kZVNoYXBlc1tZXS5kcmF3KHgsTC54LEwueSxPK3EqMixQK3EqMikseC5maWxsKCl9fX19O1prLmRyYXdOb2RlT3ZlcmxheT1QdHQoIm92ZXJsYXkiKSxaay5kcmF3Tm9kZVVuZGVybGF5PVB0dCgidW5kZXJsYXkiKSxaay5oYXNQaWU9ZnVuY3Rpb24oeSl7cmV0dXJuIHk9eVswXSx5Ll9wcml2YXRlLmhhc1BpZX0sWmsuZHJhd1BpZT1mdW5jdGlvbih5LGcseCxUKXtnPWdbMF0sVD1UfHxnLnBvc2l0aW9uKCk7dmFyIEw9Zy5jeSgpLnN0eWxlKCksTz1nLnBzdHlsZSgicGllLXNpemUiKSxQPVQueCwkPVQueSxxPWcud2lkdGgoKSxTPWcuaGVpZ2h0KCksVj1NYXRoLm1pbihxLFMpLzIsWT0wLHJ0PXRoaXMudXNlUGF0aHMoKTtydCYmKFA9MCwkPTApLE8udW5pdHM9PT0iJSI/Vj1WKk8ucGZWYWx1ZTpPLnBmVmFsdWUhPT12b2lkIDAmJihWPU8ucGZWYWx1ZS8yKTtmb3IodmFyIG90PTE7b3Q8PUwucGllQmFja2dyb3VuZE47b3QrKyl7dmFyIGh0PWcucHN0eWxlKCJwaWUtIitvdCsiLWJhY2tncm91bmQtc2l6ZSIpLnZhbHVlLGR0PWcucHN0eWxlKCJwaWUtIitvdCsiLWJhY2tncm91bmQtY29sb3IiKS52YWx1ZSxMdD1nLnBzdHlsZSgicGllLSIrb3QrIi1iYWNrZ3JvdW5kLW9wYWNpdHkiKS52YWx1ZSp4LGt0PWh0LzEwMDtrdCtZPjEmJihrdD0xLVkpO3ZhciBEdD0xLjUqTWF0aC5QSSsyKk1hdGguUEkqWSxQdD0yKk1hdGguUEkqa3QsJHQ9RHQrUHQ7aHQ9PT0wfHxZPj0xfHxZK2t0PjF8fCh5LmJlZ2luUGF0aCgpLHkubW92ZVRvKFAsJCkseS5hcmMoUCwkLFYsRHQsJHQpLHkuY2xvc2VQYXRoKCksdGhpcy5jb2xvckZpbGxTdHlsZSh5LGR0WzBdLGR0WzFdLGR0WzJdLEx0KSx5LmZpbGwoKSxZKz1rdCl9fTt2YXIgVGc9e30seXB0PTEwMDtUZy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5kYXRhLmNvbnRleHRzWzBdO2lmKHRoaXMuZm9yY2VkUGl4ZWxSYXRpbyE9bnVsbClyZXR1cm4gdGhpcy5mb3JjZWRQaXhlbFJhdGlvO3ZhciBnPXkuYmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8eS53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx5Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHkubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx5Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx5LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fDE7cmV0dXJuKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxKS9nfSxUZy5wYWludENhY2hlPWZ1bmN0aW9uKHkpe2Zvcih2YXIgZz10aGlzLnBhaW50Q2FjaGVzPXRoaXMucGFpbnRDYWNoZXN8fFtdLHg9ITAsVCxMPTA7TDxnLmxlbmd0aDtMKyspaWYoVD1nW0xdLFQuY29udGV4dD09PXkpe3g9ITE7YnJlYWt9cmV0dXJuIHgmJihUPXtjb250ZXh0Onl9LGcucHVzaChUKSksVH0sVGcuY3JlYXRlR3JhZGllbnRTdHlsZUZvcj1mdW5jdGlvbih5LGcseCxULEwpe3ZhciBPLFA9dGhpcy51c2VQYXRocygpLCQ9eC5wc3R5bGUoZysiLWdyYWRpZW50LXN0b3AtY29sb3JzIikudmFsdWUscT14LnBzdHlsZShnKyItZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiKS5wZlZhbHVlO2lmKFQ9PT0icmFkaWFsLWdyYWRpZW50IilpZih4LmlzRWRnZSgpKXt2YXIgUz14LnNvdXJjZUVuZHBvaW50KCksVj14LnRhcmdldEVuZHBvaW50KCksWT14Lm1pZHBvaW50KCkscnQ9QzMoUyxZKSxvdD1DMyhWLFkpO089eS5jcmVhdGVSYWRpYWxHcmFkaWVudChZLngsWS55LDAsWS54LFkueSxNYXRoLm1heChydCxvdCkpfWVsc2V7dmFyIGh0PVA/e3g6MCx5OjB9OngucG9zaXRpb24oKSxkdD14LnBhZGRlZFdpZHRoKCksTHQ9eC5wYWRkZWRIZWlnaHQoKTtPPXkuY3JlYXRlUmFkaWFsR3JhZGllbnQoaHQueCxodC55LDAsaHQueCxodC55LE1hdGgubWF4KGR0LEx0KSl9ZWxzZSBpZih4LmlzRWRnZSgpKXt2YXIga3Q9eC5zb3VyY2VFbmRwb2ludCgpLER0PXgudGFyZ2V0RW5kcG9pbnQoKTtPPXkuY3JlYXRlTGluZWFyR3JhZGllbnQoa3QueCxrdC55LER0LngsRHQueSl9ZWxzZXt2YXIgUHQ9UD97eDowLHk6MH06eC5wb3NpdGlvbigpLCR0PXgucGFkZGVkV2lkdGgoKSxadD14LnBhZGRlZEhlaWdodCgpLFl0PSR0LzIscXQ9WnQvMixuZT14LnBzdHlsZSgiYmFja2dyb3VuZC1ncmFkaWVudC1kaXJlY3Rpb24iKS52YWx1ZTtzd2l0Y2gobmUpe2Nhc2UidG8tYm90dG9tIjpPPXkuY3JlYXRlTGluZWFyR3JhZGllbnQoUHQueCxQdC55LXF0LFB0LngsUHQueStxdCk7YnJlYWs7Y2FzZSJ0by10b3AiOk89eS5jcmVhdGVMaW5lYXJHcmFkaWVudChQdC54LFB0LnkrcXQsUHQueCxQdC55LXF0KTticmVhaztjYXNlInRvLWxlZnQiOk89eS5jcmVhdGVMaW5lYXJHcmFkaWVudChQdC54K1l0LFB0LnksUHQueC1ZdCxQdC55KTticmVhaztjYXNlInRvLXJpZ2h0IjpPPXkuY3JlYXRlTGluZWFyR3JhZGllbnQoUHQueC1ZdCxQdC55LFB0LngrWXQsUHQueSk7YnJlYWs7Y2FzZSJ0by1ib3R0b20tcmlnaHQiOmNhc2UidG8tcmlnaHQtYm90dG9tIjpPPXkuY3JlYXRlTGluZWFyR3JhZGllbnQoUHQueC1ZdCxQdC55LXF0LFB0LngrWXQsUHQueStxdCk7YnJlYWs7Y2FzZSJ0by10b3AtcmlnaHQiOmNhc2UidG8tcmlnaHQtdG9wIjpPPXkuY3JlYXRlTGluZWFyR3JhZGllbnQoUHQueC1ZdCxQdC55K3F0LFB0LngrWXQsUHQueS1xdCk7YnJlYWs7Y2FzZSJ0by1ib3R0b20tbGVmdCI6Y2FzZSJ0by1sZWZ0LWJvdHRvbSI6Tz15LmNyZWF0ZUxpbmVhckdyYWRpZW50KFB0LngrWXQsUHQueS1xdCxQdC54LVl0LFB0LnkrcXQpO2JyZWFrO2Nhc2UidG8tdG9wLWxlZnQiOmNhc2UidG8tbGVmdC10b3AiOk89eS5jcmVhdGVMaW5lYXJHcmFkaWVudChQdC54K1l0LFB0LnkrcXQsUHQueC1ZdCxQdC55LXF0KTticmVha319aWYoIU8pcmV0dXJuIG51bGw7Zm9yKHZhciBHdD1xLmxlbmd0aD09PSQubGVuZ3RoLGdlPSQubGVuZ3RoLGJlPTA7YmU8Z2U7YmUrKylPLmFkZENvbG9yU3RvcChHdD9xW2JlXTpiZS8oZ2UtMSksInJnYmEoIiskW2JlXVswXSsiLCIrJFtiZV1bMV0rIiwiKyRbYmVdWzJdKyIsIitMKyIpIik7cmV0dXJuIE99LFRnLmdyYWRpZW50RmlsbFN0eWxlPWZ1bmN0aW9uKHksZyx4LFQpe3ZhciBMPXRoaXMuY3JlYXRlR3JhZGllbnRTdHlsZUZvcih5LCJiYWNrZ3JvdW5kIixnLHgsVCk7aWYoIUwpcmV0dXJuIG51bGw7eS5maWxsU3R5bGU9TH0sVGcuY29sb3JGaWxsU3R5bGU9ZnVuY3Rpb24oeSxnLHgsVCxMKXt5LmZpbGxTdHlsZT0icmdiYSgiK2crIiwiK3grIiwiK1QrIiwiK0wrIikifSxUZy5lbGVGaWxsU3R5bGU9ZnVuY3Rpb24oeSxnLHgpe3ZhciBUPWcucHN0eWxlKCJiYWNrZ3JvdW5kLWZpbGwiKS52YWx1ZTtpZihUPT09ImxpbmVhci1ncmFkaWVudCJ8fFQ9PT0icmFkaWFsLWdyYWRpZW50Iil0aGlzLmdyYWRpZW50RmlsbFN0eWxlKHksZyxULHgpO2Vsc2V7dmFyIEw9Zy5wc3R5bGUoImJhY2tncm91bmQtY29sb3IiKS52YWx1ZTt0aGlzLmNvbG9yRmlsbFN0eWxlKHksTFswXSxMWzFdLExbMl0seCl9fSxUZy5ncmFkaWVudFN0cm9rZVN0eWxlPWZ1bmN0aW9uKHksZyx4LFQpe3ZhciBMPXRoaXMuY3JlYXRlR3JhZGllbnRTdHlsZUZvcih5LCJsaW5lIixnLHgsVCk7aWYoIUwpcmV0dXJuIG51bGw7eS5zdHJva2VTdHlsZT1MfSxUZy5jb2xvclN0cm9rZVN0eWxlPWZ1bmN0aW9uKHksZyx4LFQsTCl7eS5zdHJva2VTdHlsZT0icmdiYSgiK2crIiwiK3grIiwiK1QrIiwiK0wrIikifSxUZy5lbGVTdHJva2VTdHlsZT1mdW5jdGlvbih5LGcseCl7dmFyIFQ9Zy5wc3R5bGUoImxpbmUtZmlsbCIpLnZhbHVlO2lmKFQ9PT0ibGluZWFyLWdyYWRpZW50Inx8VD09PSJyYWRpYWwtZ3JhZGllbnQiKXRoaXMuZ3JhZGllbnRTdHJva2VTdHlsZSh5LGcsVCx4KTtlbHNle3ZhciBMPWcucHN0eWxlKCJsaW5lLWNvbG9yIikudmFsdWU7dGhpcy5jb2xvclN0cm9rZVN0eWxlKHksTFswXSxMWzFdLExbMl0seCl9fSxUZy5tYXRjaENhbnZhc1NpemU9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PWcuZGF0YSxUPWcuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLEw9VFsyXSxPPVRbM10sUD1nLmdldFBpeGVsUmF0aW8oKSwkPWcubW90aW9uQmx1clB4UmF0aW87KHk9PT1nLmRhdGEuYnVmZmVyQ2FudmFzZXNbZy5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXXx8eT09PWcuZGF0YS5idWZmZXJDYW52YXNlc1tnLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddKSYmKFA9JCk7dmFyIHE9TCpQLFM9TypQLFY7aWYoIShxPT09Zy5jYW52YXNXaWR0aCYmUz09PWcuY2FudmFzSGVpZ2h0KSl7Zy5mb250Q2FjaGVzPW51bGw7dmFyIFk9eC5jYW52YXNDb250YWluZXI7WS5zdHlsZS53aWR0aD1MKyJweCIsWS5zdHlsZS5oZWlnaHQ9TysicHgiO2Zvcih2YXIgcnQ9MDtydDxnLkNBTlZBU19MQVlFUlM7cnQrKylWPXguY2FudmFzZXNbcnRdLFYud2lkdGg9cSxWLmhlaWdodD1TLFYuc3R5bGUud2lkdGg9TCsicHgiLFYuc3R5bGUuaGVpZ2h0PU8rInB4Ijtmb3IodmFyIHJ0PTA7cnQ8Zy5CVUZGRVJfQ09VTlQ7cnQrKylWPXguYnVmZmVyQ2FudmFzZXNbcnRdLFYud2lkdGg9cSxWLmhlaWdodD1TLFYuc3R5bGUud2lkdGg9TCsicHgiLFYuc3R5bGUuaGVpZ2h0PU8rInB4IjtnLnRleHR1cmVNdWx0PTEsUDw9MSYmKFY9eC5idWZmZXJDYW52YXNlc1tnLlRFWFRVUkVfQlVGRkVSXSxnLnRleHR1cmVNdWx0PTIsVi53aWR0aD1xKmcudGV4dHVyZU11bHQsVi5oZWlnaHQ9UypnLnRleHR1cmVNdWx0KSxnLmNhbnZhc1dpZHRoPXEsZy5jYW52YXNIZWlnaHQ9U319LFRnLnJlbmRlclRvPWZ1bmN0aW9uKHksZyx4LFQpe3RoaXMucmVuZGVyKHtmb3JjZWRDb250ZXh0OnksZm9yY2VkWm9vbTpnLGZvcmNlZFBhbjp4LGRyYXdBbGxMYXllcnM6ITAsZm9yY2VkUHhSYXRpbzpUfSl9LFRnLnJlbmRlcj1mdW5jdGlvbih5KXt5PXl8fHNOKCk7dmFyIGc9eS5mb3JjZWRDb250ZXh0LHg9eS5kcmF3QWxsTGF5ZXJzLFQ9eS5kcmF3T25seU5vZGVMYXllcixMPXkuZm9yY2VkWm9vbSxPPXkuZm9yY2VkUGFuLFA9dGhpcywkPXkuZm9yY2VkUHhSYXRpbz09PXZvaWQgMD90aGlzLmdldFBpeGVsUmF0aW8oKTp5LmZvcmNlZFB4UmF0aW8scT1QLmN5LFM9UC5kYXRhLFY9Uy5jYW52YXNOZWVkc1JlZHJhdyxZPVAudGV4dHVyZU9uVmlld3BvcnQmJiFnJiYoUC5waW5jaGluZ3x8UC5ob3ZlckRhdGEuZHJhZ2dpbmd8fFAuc3dpcGVQYW5uaW5nfHxQLmRhdGEud2hlZWxab29taW5nKSxydD15Lm1vdGlvbkJsdXIhPT12b2lkIDA/eS5tb3Rpb25CbHVyOlAubW90aW9uQmx1cixvdD1QLm1vdGlvbkJsdXJQeFJhdGlvLGh0PXEuaGFzQ29tcG91bmROb2RlcygpLGR0PVAuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyxMdD0hIShQLmhvdmVyRGF0YS5zZWxlY3Rpbmd8fFAudG91Y2hEYXRhLnNlbGVjdGluZyk7cnQ9cnQmJiFnJiZQLm1vdGlvbkJsdXJFbmFibGVkJiYhTHQ7dmFyIGt0PXJ0O2d8fChQLnByZXZQeFJhdGlvIT09JCYmKFAuaW52YWxpZGF0ZUNvbnRhaW5lckNsaWVudENvb3Jkc0NhY2hlKCksUC5tYXRjaENhbnZhc1NpemUoUC5jb250YWluZXIpLFAucmVkcmF3SGludCgiZWxlcyIsITApLFAucmVkcmF3SGludCgiZHJhZyIsITApKSxQLnByZXZQeFJhdGlvPSQpLCFnJiZQLm1vdGlvbkJsdXJUaW1lb3V0JiZjbGVhclRpbWVvdXQoUC5tb3Rpb25CbHVyVGltZW91dCkscnQmJihQLm1iRnJhbWVzPT1udWxsJiYoUC5tYkZyYW1lcz0wKSxQLm1iRnJhbWVzKyssUC5tYkZyYW1lczwzJiYoa3Q9ITEpLFAubWJGcmFtZXM+UC5taW5NYkxvd1F1YWxGcmFtZXMmJihQLm1vdGlvbkJsdXJQeFJhdGlvPVAubWJQeFJCbHVycnkpKSxQLmNsZWFyaW5nTW90aW9uQmx1ciYmKFAubW90aW9uQmx1clB4UmF0aW89MSksUC50ZXh0dXJlRHJhd0xhc3RGcmFtZSYmIVkmJihWW1AuTk9ERV09ITAsVltQLlNFTEVDVF9CT1hdPSEwKTt2YXIgRHQ9cS5zdHlsZSgpLFB0PXEuem9vbSgpLCR0PUwhPT12b2lkIDA/TDpQdCxadD1xLnBhbigpLFl0PXt4Olp0LngseTpadC55fSxxdD17em9vbTpQdCxwYW46e3g6WnQueCx5Olp0Lnl9fSxuZT1QLnByZXZWaWV3cG9ydCxHdD1uZT09PXZvaWQgMHx8cXQuem9vbSE9PW5lLnpvb218fHF0LnBhbi54IT09bmUucGFuLnh8fHF0LnBhbi55IT09bmUucGFuLnk7IUd0JiYhKGR0JiYhaHQpJiYoUC5tb3Rpb25CbHVyUHhSYXRpbz0xKSxPJiYoWXQ9TyksJHQqPSQsWXQueCo9JCxZdC55Kj0kO3ZhciBnZT1QLmdldENhY2hlZFpTb3J0ZWRFbGVzKCk7ZnVuY3Rpb24gYmUoQ2ksaGksZ3MscWksU2kpe3ZhciBVaT1DaS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247Q2kuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdXQiLFAuY29sb3JGaWxsU3R5bGUoQ2ksMjU1LDI1NSwyNTUsUC5tb3Rpb25CbHVyVHJhbnNwYXJlbmN5KSxDaS5maWxsUmVjdChoaSxncyxxaSxTaSksQ2kuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPVVpfWZ1bmN0aW9uIGllKENpLGhpKXt2YXIgZ3MscWksU2ksVWk7IVAuY2xlYXJpbmdNb3Rpb25CbHVyJiYoQ2k9PT1TLmJ1ZmZlckNvbnRleHRzW1AuTU9USU9OQkxVUl9CVUZGRVJfTk9ERV18fENpPT09Uy5idWZmZXJDb250ZXh0c1tQLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddKT8oZ3M9e3g6WnQueCpvdCx5Olp0Lnkqb3R9LHFpPVB0Km90LFNpPVAuY2FudmFzV2lkdGgqb3QsVWk9UC5jYW52YXNIZWlnaHQqb3QpOihncz1ZdCxxaT0kdCxTaT1QLmNhbnZhc1dpZHRoLFVpPVAuY2FudmFzSGVpZ2h0KSxDaS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGhpPT09Im1vdGlvbkJsdXIiP2JlKENpLDAsMCxTaSxVaSk6IWcmJihoaT09PXZvaWQgMHx8aGkpJiZDaS5jbGVhclJlY3QoMCwwLFNpLFVpKSx4fHwoQ2kudHJhbnNsYXRlKGdzLngsZ3MueSksQ2kuc2NhbGUocWkscWkpKSxPJiZDaS50cmFuc2xhdGUoTy54LE8ueSksTCYmQ2kuc2NhbGUoTCxMKX1pZihZfHwoUC50ZXh0dXJlRHJhd0xhc3RGcmFtZT0hMSksWSl7aWYoUC50ZXh0dXJlRHJhd0xhc3RGcmFtZT0hMCwhUC50ZXh0dXJlQ2FjaGUpe1AudGV4dHVyZUNhY2hlPXt9LFAudGV4dHVyZUNhY2hlLmJiPXEubXV0YWJsZUVsZW1lbnRzKCkuYm91bmRpbmdCb3goKSxQLnRleHR1cmVDYWNoZS50ZXh0dXJlPVAuZGF0YS5idWZmZXJDYW52YXNlc1tQLlRFWFRVUkVfQlVGRkVSXTt2YXIgRmU9UC5kYXRhLmJ1ZmZlckNvbnRleHRzW1AuVEVYVFVSRV9CVUZGRVJdO0ZlLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksRmUuY2xlYXJSZWN0KDAsMCxQLmNhbnZhc1dpZHRoKlAudGV4dHVyZU11bHQsUC5jYW52YXNIZWlnaHQqUC50ZXh0dXJlTXVsdCksUC5yZW5kZXIoe2ZvcmNlZENvbnRleHQ6RmUsZHJhd09ubHlOb2RlTGF5ZXI6ITAsZm9yY2VkUHhSYXRpbzokKlAudGV4dHVyZU11bHR9KTt2YXIgcXQ9UC50ZXh0dXJlQ2FjaGUudmlld3BvcnQ9e3pvb206cS56b29tKCkscGFuOnEucGFuKCksd2lkdGg6UC5jYW52YXNXaWR0aCxoZWlnaHQ6UC5jYW52YXNIZWlnaHR9O3F0Lm1wYW49e3g6KDAtcXQucGFuLngpL3F0Lnpvb20seTooMC1xdC5wYW4ueSkvcXQuem9vbX19VltQLkRSQUddPSExLFZbUC5OT0RFXT0hMTt2YXIgd2U9Uy5jb250ZXh0c1tQLk5PREVdLGJuPVAudGV4dHVyZUNhY2hlLnRleHR1cmUscXQ9UC50ZXh0dXJlQ2FjaGUudmlld3BvcnQ7d2Uuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxydD9iZSh3ZSwwLDAscXQud2lkdGgscXQuaGVpZ2h0KTp3ZS5jbGVhclJlY3QoMCwwLHF0LndpZHRoLHF0LmhlaWdodCk7dmFyIHplPUR0LmNvcmUoIm91dHNpZGUtdGV4dHVyZS1iZy1jb2xvciIpLnZhbHVlLEdlPUR0LmNvcmUoIm91dHNpZGUtdGV4dHVyZS1iZy1vcGFjaXR5IikudmFsdWU7UC5jb2xvckZpbGxTdHlsZSh3ZSx6ZVswXSx6ZVsxXSx6ZVsyXSxHZSksd2UuZmlsbFJlY3QoMCwwLHF0LndpZHRoLHF0LmhlaWdodCk7dmFyIFB0PXEuem9vbSgpO2llKHdlLCExKSx3ZS5jbGVhclJlY3QocXQubXBhbi54LHF0Lm1wYW4ueSxxdC53aWR0aC9xdC56b29tLyQscXQuaGVpZ2h0L3F0Lnpvb20vJCksd2UuZHJhd0ltYWdlKGJuLHF0Lm1wYW4ueCxxdC5tcGFuLnkscXQud2lkdGgvcXQuem9vbS8kLHF0LmhlaWdodC9xdC56b29tLyQpfWVsc2UgUC50ZXh0dXJlT25WaWV3cG9ydCYmIWcmJihQLnRleHR1cmVDYWNoZT1udWxsKTt2YXIgRW49cS5leHRlbnQoKSxJbj1QLnBpbmNoaW5nfHxQLmhvdmVyRGF0YS5kcmFnZ2luZ3x8UC5zd2lwZVBhbm5pbmd8fFAuZGF0YS53aGVlbFpvb21pbmd8fFAuaG92ZXJEYXRhLmRyYWdnaW5nRWxlc3x8UC5jeS5hbmltYXRlZCgpLFluPVAuaGlkZUVkZ2VzT25WaWV3cG9ydCYmSW4sU249W107aWYoU25bUC5OT0RFXT0hVltQLk5PREVdJiZydCYmIVAuY2xlYXJlZEZvck1vdGlvbkJsdXJbUC5OT0RFXXx8UC5jbGVhcmluZ01vdGlvbkJsdXIsU25bUC5OT0RFXSYmKFAuY2xlYXJlZEZvck1vdGlvbkJsdXJbUC5OT0RFXT0hMCksU25bUC5EUkFHXT0hVltQLkRSQUddJiZydCYmIVAuY2xlYXJlZEZvck1vdGlvbkJsdXJbUC5EUkFHXXx8UC5jbGVhcmluZ01vdGlvbkJsdXIsU25bUC5EUkFHXSYmKFAuY2xlYXJlZEZvck1vdGlvbkJsdXJbUC5EUkFHXT0hMCksVltQLk5PREVdfHx4fHxUfHxTbltQLk5PREVdKXt2YXIgV249cnQmJiFTbltQLk5PREVdJiZvdCE9PTEsd2U9Z3x8KFduP1AuZGF0YS5idWZmZXJDb250ZXh0c1tQLk1PVElPTkJMVVJfQlVGRkVSX05PREVdOlMuY29udGV4dHNbUC5OT0RFXSkscnI9cnQmJiFXbj8ibW90aW9uQmx1ciI6dm9pZCAwO2llKHdlLHJyKSxZbj9QLmRyYXdDYWNoZWROb2Rlcyh3ZSxnZS5ub25kcmFnLCQsRW4pOlAuZHJhd0xheWVyZWRFbGVtZW50cyh3ZSxnZS5ub25kcmFnLCQsRW4pLFAuZGVidWcmJlAuZHJhd0RlYnVnUG9pbnRzKHdlLGdlLm5vbmRyYWcpLCF4JiYhcnQmJihWW1AuTk9ERV09ITEpfWlmKCFUJiYoVltQLkRSQUddfHx4fHxTbltQLkRSQUddKSl7dmFyIFduPXJ0JiYhU25bUC5EUkFHXSYmb3QhPT0xLHdlPWd8fChXbj9QLmRhdGEuYnVmZmVyQ29udGV4dHNbUC5NT1RJT05CTFVSX0JVRkZFUl9EUkFHXTpTLmNvbnRleHRzW1AuRFJBR10pO2llKHdlLHJ0JiYhV24/Im1vdGlvbkJsdXIiOnZvaWQgMCksWW4/UC5kcmF3Q2FjaGVkTm9kZXMod2UsZ2UuZHJhZywkLEVuKTpQLmRyYXdDYWNoZWRFbGVtZW50cyh3ZSxnZS5kcmFnLCQsRW4pLFAuZGVidWcmJlAuZHJhd0RlYnVnUG9pbnRzKHdlLGdlLmRyYWcpLCF4JiYhcnQmJihWW1AuRFJBR109ITEpfWlmKFAuc2hvd0Zwc3x8IVQmJlZbUC5TRUxFQ1RfQk9YXSYmIXgpe3ZhciB3ZT1nfHxTLmNvbnRleHRzW1AuU0VMRUNUX0JPWF07aWYoaWUod2UpLFAuc2VsZWN0aW9uWzRdPT0xJiYoUC5ob3ZlckRhdGEuc2VsZWN0aW5nfHxQLnRvdWNoRGF0YS5zZWxlY3RpbmcpKXt2YXIgUHQ9UC5jeS56b29tKCksd3I9RHQuY29yZSgic2VsZWN0aW9uLWJveC1ib3JkZXItd2lkdGgiKS52YWx1ZS9QdDt3ZS5saW5lV2lkdGg9d3Isd2UuZmlsbFN0eWxlPSJyZ2JhKCIrRHQuY29yZSgic2VsZWN0aW9uLWJveC1jb2xvciIpLnZhbHVlWzBdKyIsIitEdC5jb3JlKCJzZWxlY3Rpb24tYm94LWNvbG9yIikudmFsdWVbMV0rIiwiK0R0LmNvcmUoInNlbGVjdGlvbi1ib3gtY29sb3IiKS52YWx1ZVsyXSsiLCIrRHQuY29yZSgic2VsZWN0aW9uLWJveC1vcGFjaXR5IikudmFsdWUrIikiLHdlLmZpbGxSZWN0KFAuc2VsZWN0aW9uWzBdLFAuc2VsZWN0aW9uWzFdLFAuc2VsZWN0aW9uWzJdLVAuc2VsZWN0aW9uWzBdLFAuc2VsZWN0aW9uWzNdLVAuc2VsZWN0aW9uWzFdKSx3cj4wJiYod2Uuc3Ryb2tlU3R5bGU9InJnYmEoIitEdC5jb3JlKCJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciIpLnZhbHVlWzBdKyIsIitEdC5jb3JlKCJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciIpLnZhbHVlWzFdKyIsIitEdC5jb3JlKCJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciIpLnZhbHVlWzJdKyIsIitEdC5jb3JlKCJzZWxlY3Rpb24tYm94LW9wYWNpdHkiKS52YWx1ZSsiKSIsd2Uuc3Ryb2tlUmVjdChQLnNlbGVjdGlvblswXSxQLnNlbGVjdGlvblsxXSxQLnNlbGVjdGlvblsyXS1QLnNlbGVjdGlvblswXSxQLnNlbGVjdGlvblszXS1QLnNlbGVjdGlvblsxXSkpfWlmKFMuYmdBY3RpdmVQb3Npc3Rpb24mJiFQLmhvdmVyRGF0YS5zZWxlY3Rpbmcpe3ZhciBQdD1QLmN5Lnpvb20oKSx1cj1TLmJnQWN0aXZlUG9zaXN0aW9uO3dlLmZpbGxTdHlsZT0icmdiYSgiK0R0LmNvcmUoImFjdGl2ZS1iZy1jb2xvciIpLnZhbHVlWzBdKyIsIitEdC5jb3JlKCJhY3RpdmUtYmctY29sb3IiKS52YWx1ZVsxXSsiLCIrRHQuY29yZSgiYWN0aXZlLWJnLWNvbG9yIikudmFsdWVbMl0rIiwiK0R0LmNvcmUoImFjdGl2ZS1iZy1vcGFjaXR5IikudmFsdWUrIikiLHdlLmJlZ2luUGF0aCgpLHdlLmFyYyh1ci54LHVyLnksRHQuY29yZSgiYWN0aXZlLWJnLXNpemUiKS5wZlZhbHVlL1B0LDAsMipNYXRoLlBJKSx3ZS5maWxsKCl9dmFyIGVyPVAubGFzdFJlZHJhd1RpbWU7aWYoUC5zaG93RnBzJiZlcil7ZXI9TWF0aC5yb3VuZChlcik7dmFyIHZuPU1hdGgucm91bmQoMWUzL2VyKTt3ZS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHdlLmZpbGxTdHlsZT0icmdiYSgyNTUsIDAsIDAsIDAuNzUpIix3ZS5zdHJva2VTdHlsZT0icmdiYSgyNTUsIDAsIDAsIDAuNzUpIix3ZS5saW5lV2lkdGg9MSx3ZS5maWxsVGV4dCgiMSBmcmFtZSA9ICIrZXIrIiBtcyA9ICIrdm4rIiBmcHMiLDAsMjApO3ZhciBncj02MDt3ZS5zdHJva2VSZWN0KDAsMzAsMjUwLDIwKSx3ZS5maWxsUmVjdCgwLDMwLDI1MCpNYXRoLm1pbih2bi9nciwxKSwyMCl9eHx8KFZbUC5TRUxFQ1RfQk9YXT0hMSl9aWYocnQmJm90IT09MSl7dmFyIGZyPVMuY29udGV4dHNbUC5OT0RFXSxKcj1QLmRhdGEuYnVmZmVyQ2FudmFzZXNbUC5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXSx2aT1TLmNvbnRleHRzW1AuRFJBR10sWHM9UC5kYXRhLmJ1ZmZlckNhbnZhc2VzW1AuTU9USU9OQkxVUl9CVUZGRVJfRFJBR10sRWE9ZnVuY3Rpb24oaGksZ3MscWkpe2hpLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCkscWl8fCFrdD9oaS5jbGVhclJlY3QoMCwwLFAuY2FudmFzV2lkdGgsUC5jYW52YXNIZWlnaHQpOmJlKGhpLDAsMCxQLmNhbnZhc1dpZHRoLFAuY2FudmFzSGVpZ2h0KTt2YXIgU2k9b3Q7aGkuZHJhd0ltYWdlKGdzLDAsMCxQLmNhbnZhc1dpZHRoKlNpLFAuY2FudmFzSGVpZ2h0KlNpLDAsMCxQLmNhbnZhc1dpZHRoLFAuY2FudmFzSGVpZ2h0KX07KFZbUC5OT0RFXXx8U25bUC5OT0RFXSkmJihFYShmcixKcixTbltQLk5PREVdKSxWW1AuTk9ERV09ITEpLChWW1AuRFJBR118fFNuW1AuRFJBR10pJiYoRWEodmksWHMsU25bUC5EUkFHXSksVltQLkRSQUddPSExKX1QLnByZXZWaWV3cG9ydD1xdCxQLmNsZWFyaW5nTW90aW9uQmx1ciYmKFAuY2xlYXJpbmdNb3Rpb25CbHVyPSExLFAubW90aW9uQmx1ckNsZWFyZWQ9ITAsUC5tb3Rpb25CbHVyPSEwKSxydCYmKFAubW90aW9uQmx1clRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe1AubW90aW9uQmx1clRpbWVvdXQ9bnVsbCxQLmNsZWFyZWRGb3JNb3Rpb25CbHVyW1AuTk9ERV09ITEsUC5jbGVhcmVkRm9yTW90aW9uQmx1cltQLkRSQUddPSExLFAubW90aW9uQmx1cj0hMSxQLmNsZWFyaW5nTW90aW9uQmx1cj0hWSxQLm1iRnJhbWVzPTAsVltQLk5PREVdPSEwLFZbUC5EUkFHXT0hMCxQLnJlZHJhdygpfSx5cHQpKSxnfHxxLmVtaXQoInJlbmRlciIpfTt2YXIgTzM9e307TzMuZHJhd1BvbHlnb25QYXRoPWZ1bmN0aW9uKHksZyx4LFQsTCxPKXt2YXIgUD1ULzIsJD1MLzI7eS5iZWdpblBhdGgmJnkuYmVnaW5QYXRoKCkseS5tb3ZlVG8oZytQKk9bMF0seCskKk9bMV0pO2Zvcih2YXIgcT0xO3E8Ty5sZW5ndGgvMjtxKyspeS5saW5lVG8oZytQKk9bcSoyXSx4KyQqT1txKjIrMV0pO3kuY2xvc2VQYXRoKCl9LE8zLmRyYXdSb3VuZFBvbHlnb25QYXRoPWZ1bmN0aW9uKHksZyx4LFQsTCxPKXt2YXIgUD1ULzIsJD1MLzIscT1ETChULEwpO3kuYmVnaW5QYXRoJiZ5LmJlZ2luUGF0aCgpO2Zvcih2YXIgUz0wO1M8Ty5sZW5ndGgvNDtTKyspe3ZhciBWPXZvaWQgMCxZPXZvaWQgMDtTPT09MD9WPU8ubGVuZ3RoLTI6Vj1TKjQtMixZPVMqNCsyO3ZhciBydD1nK1AqT1tTKjRdLG90PXgrJCpPW1MqNCsxXSxodD0tT1tWXSpPW1ldLU9bVisxXSpPW1krMV0sZHQ9cS9NYXRoLnRhbihNYXRoLmFjb3MoaHQpLzIpLEx0PXJ0LWR0Kk9bVl0sa3Q9b3QtZHQqT1tWKzFdLER0PXJ0K2R0Kk9bWV0sUHQ9b3QrZHQqT1tZKzFdO1M9PT0wP3kubW92ZVRvKEx0LGt0KTp5LmxpbmVUbyhMdCxrdCkseS5hcmNUbyhydCxvdCxEdCxQdCxxKX15LmNsb3NlUGF0aCgpfSxPMy5kcmF3Um91bmRSZWN0YW5nbGVQYXRoPWZ1bmN0aW9uKHksZyx4LFQsTCl7dmFyIE89VC8yLFA9TC8yLCQ9TGsoVCxMKTt5LmJlZ2luUGF0aCYmeS5iZWdpblBhdGgoKSx5Lm1vdmVUbyhnLHgtUCkseS5hcmNUbyhnK08seC1QLGcrTyx4LCQpLHkuYXJjVG8oZytPLHgrUCxnLHgrUCwkKSx5LmFyY1RvKGctTyx4K1AsZy1PLHgsJCkseS5hcmNUbyhnLU8seC1QLGcseC1QLCQpLHkubGluZVRvKGcseC1QKSx5LmNsb3NlUGF0aCgpfSxPMy5kcmF3Qm90dG9tUm91bmRSZWN0YW5nbGVQYXRoPWZ1bmN0aW9uKHksZyx4LFQsTCl7dmFyIE89VC8yLFA9TC8yLCQ9TGsoVCxMKTt5LmJlZ2luUGF0aCYmeS5iZWdpblBhdGgoKSx5Lm1vdmVUbyhnLHgtUCkseS5saW5lVG8oZytPLHgtUCkseS5saW5lVG8oZytPLHgpLHkuYXJjVG8oZytPLHgrUCxnLHgrUCwkKSx5LmFyY1RvKGctTyx4K1AsZy1PLHgsJCkseS5saW5lVG8oZy1PLHgtUCkseS5saW5lVG8oZyx4LVApLHkuY2xvc2VQYXRoKCl9LE8zLmRyYXdDdXRSZWN0YW5nbGVQYXRoPWZ1bmN0aW9uKHksZyx4LFQsTCl7dmFyIE89VC8yLFA9TC8yLCQ9Yk4oKTt5LmJlZ2luUGF0aCYmeS5iZWdpblBhdGgoKSx5Lm1vdmVUbyhnLU8rJCx4LVApLHkubGluZVRvKGcrTy0kLHgtUCkseS5saW5lVG8oZytPLHgtUCskKSx5LmxpbmVUbyhnK08seCtQLSQpLHkubGluZVRvKGcrTy0kLHgrUCkseS5saW5lVG8oZy1PKyQseCtQKSx5LmxpbmVUbyhnLU8seCtQLSQpLHkubGluZVRvKGctTyx4LVArJCkseS5jbG9zZVBhdGgoKX0sTzMuZHJhd0JhcnJlbFBhdGg9ZnVuY3Rpb24oeSxnLHgsVCxMKXt2YXIgTz1ULzIsUD1MLzIsJD1nLU8scT1nK08sUz14LVAsVj14K1AsWT1JTChULEwpLHJ0PVkud2lkdGhPZmZzZXQsb3Q9WS5oZWlnaHRPZmZzZXQsaHQ9WS5jdHJsUHRPZmZzZXRQY3QqcnQ7eS5iZWdpblBhdGgmJnkuYmVnaW5QYXRoKCkseS5tb3ZlVG8oJCxTK290KSx5LmxpbmVUbygkLFYtb3QpLHkucXVhZHJhdGljQ3VydmVUbygkK2h0LFYsJCtydCxWKSx5LmxpbmVUbyhxLXJ0LFYpLHkucXVhZHJhdGljQ3VydmVUbyhxLWh0LFYscSxWLW90KSx5LmxpbmVUbyhxLFMrb3QpLHkucXVhZHJhdGljQ3VydmVUbyhxLWh0LFMscS1ydCxTKSx5LmxpbmVUbygkK3J0LFMpLHkucXVhZHJhdGljQ3VydmVUbygkK2h0LFMsJCxTK290KSx5LmNsb3NlUGF0aCgpfTtmb3IodmFyIEZ0dD1NYXRoLnNpbigwKSxOdHQ9TWF0aC5jb3MoMCksY1I9e30sdVI9e30sQnR0PU1hdGguUEkvNDAsSms9MCpNYXRoLlBJO0prPDIqTWF0aC5QSTtKays9QnR0KWNSW0prXT1NYXRoLnNpbihKayksdVJbSmtdPU1hdGguY29zKEprKTtPMy5kcmF3RWxsaXBzZVBhdGg9ZnVuY3Rpb24oeSxnLHgsVCxMKXtpZih5LmJlZ2luUGF0aCYmeS5iZWdpblBhdGgoKSx5LmVsbGlwc2UpeS5lbGxpcHNlKGcseCxULzIsTC8yLDAsMCwyKk1hdGguUEkpO2Vsc2UgZm9yKHZhciBPLFAsJD1ULzIscT1MLzIsUz0wKk1hdGguUEk7UzwyKk1hdGguUEk7Uys9QnR0KU89Zy0kKmNSW1NdKkZ0dCskKnVSW1NdKk50dCxQPXgrcSp1UltTXSpGdHQrcSpjUltTXSpOdHQsUz09PTA/eS5tb3ZlVG8oTyxQKTp5LmxpbmVUbyhPLFApO3kuY2xvc2VQYXRoKCl9O3ZhciBfQz17fTtfQy5jcmVhdGVCdWZmZXI9ZnVuY3Rpb24oeSxnKXt2YXIgeD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4geC53aWR0aD15LHguaGVpZ2h0PWcsW3gseC5nZXRDb250ZXh0KCIyZCIpXX0sX0MuYnVmZmVyQ2FudmFzSW1hZ2U9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcy5jeSx4PWcubXV0YWJsZUVsZW1lbnRzKCksVD14LmJvdW5kaW5nQm94KCksTD10aGlzLmZpbmRDb250YWluZXJDbGllbnRDb29yZHMoKSxPPXkuZnVsbD9NYXRoLmNlaWwoVC53KTpMWzJdLFA9eS5mdWxsP01hdGguY2VpbChULmgpOkxbM10sJD1YKHkubWF4V2lkdGgpfHxYKHkubWF4SGVpZ2h0KSxxPXRoaXMuZ2V0UGl4ZWxSYXRpbygpLFM9MTtpZih5LnNjYWxlIT09dm9pZCAwKU8qPXkuc2NhbGUsUCo9eS5zY2FsZSxTPXkuc2NhbGU7ZWxzZSBpZigkKXt2YXIgVj0xLzAsWT0xLzA7WCh5Lm1heFdpZHRoKSYmKFY9Uyp5Lm1heFdpZHRoL08pLFgoeS5tYXhIZWlnaHQpJiYoWT1TKnkubWF4SGVpZ2h0L1ApLFM9TWF0aC5taW4oVixZKSxPKj1TLFAqPVN9JHx8KE8qPXEsUCo9cSxTKj1xKTt2YXIgcnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7cnQud2lkdGg9TyxydC5oZWlnaHQ9UCxydC5zdHlsZS53aWR0aD1PKyJweCIscnQuc3R5bGUuaGVpZ2h0PVArInB4Ijt2YXIgb3Q9cnQuZ2V0Q29udGV4dCgiMmQiKTtpZihPPjAmJlA+MCl7b3QuY2xlYXJSZWN0KDAsMCxPLFApLG90Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLW92ZXIiO3ZhciBodD10aGlzLmdldENhY2hlZFpTb3J0ZWRFbGVzKCk7aWYoeS5mdWxsKW90LnRyYW5zbGF0ZSgtVC54MSpTLC1ULnkxKlMpLG90LnNjYWxlKFMsUyksdGhpcy5kcmF3RWxlbWVudHMob3QsaHQpLG90LnNjYWxlKDEvUywxL1MpLG90LnRyYW5zbGF0ZShULngxKlMsVC55MSpTKTtlbHNle3ZhciBkdD1nLnBhbigpLEx0PXt4OmR0LngqUyx5OmR0LnkqU307Uyo9Zy56b29tKCksb3QudHJhbnNsYXRlKEx0LngsTHQueSksb3Quc2NhbGUoUyxTKSx0aGlzLmRyYXdFbGVtZW50cyhvdCxodCksb3Quc2NhbGUoMS9TLDEvUyksb3QudHJhbnNsYXRlKC1MdC54LC1MdC55KX15LmJnJiYob3QuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdmVyIixvdC5maWxsU3R5bGU9eS5iZyxvdC5yZWN0KDAsMCxPLFApLG90LmZpbGwoKSl9cmV0dXJuIHJ0fTtmdW5jdGlvbiB4cHQoeSxnKXtmb3IodmFyIHg9YXRvYih5KSxUPW5ldyBBcnJheUJ1ZmZlcih4Lmxlbmd0aCksTD1uZXcgVWludDhBcnJheShUKSxPPTA7Tzx4Lmxlbmd0aDtPKyspTFtPXT14LmNoYXJDb2RlQXQoTyk7cmV0dXJuIG5ldyBCbG9iKFtUXSx7dHlwZTpnfSl9ZnVuY3Rpb24gUnR0KHkpe3ZhciBnPXkuaW5kZXhPZigiLCIpO3JldHVybiB5LnN1YnN0cihnKzEpfWZ1bmN0aW9uIGp0dCh5LGcseCl7dmFyIFQ9ZnVuY3Rpb24oKXtyZXR1cm4gZy50b0RhdGFVUkwoeCx5LnF1YWxpdHkpfTtzd2l0Y2goeS5vdXRwdXQpe2Nhc2UiYmxvYi1wcm9taXNlIjpyZXR1cm4gbmV3IGV4KGZ1bmN0aW9uKEwsTyl7dHJ5e2cudG9CbG9iKGZ1bmN0aW9uKFApe1AhPW51bGw/TChQKTpPKG5ldyBFcnJvcigiYGNhbnZhcy50b0Jsb2IoKWAgc2VudCBhIG51bGwgdmFsdWUgaW4gaXRzIGNhbGxiYWNrIikpfSx4LHkucXVhbGl0eSl9Y2F0Y2goUCl7TyhQKX19KTtjYXNlImJsb2IiOnJldHVybiB4cHQoUnR0KFQoKSkseCk7Y2FzZSJiYXNlNjQiOnJldHVybiBSdHQoVCgpKTtjYXNlImJhc2U2NHVyaSI6ZGVmYXVsdDpyZXR1cm4gVCgpfX1fQy5wbmc9ZnVuY3Rpb24oeSl7cmV0dXJuIGp0dCh5LHRoaXMuYnVmZmVyQ2FudmFzSW1hZ2UoeSksImltYWdlL3BuZyIpfSxfQy5qcGc9ZnVuY3Rpb24oeSl7cmV0dXJuIGp0dCh5LHRoaXMuYnVmZmVyQ2FudmFzSW1hZ2UoeSksImltYWdlL2pwZWciKX07dmFyICR0dD17fTskdHQubm9kZVNoYXBlSW1wbD1mdW5jdGlvbih5LGcseCxULEwsTyxQKXtzd2l0Y2goeSl7Y2FzZSJlbGxpcHNlIjpyZXR1cm4gdGhpcy5kcmF3RWxsaXBzZVBhdGgoZyx4LFQsTCxPKTtjYXNlInBvbHlnb24iOnJldHVybiB0aGlzLmRyYXdQb2x5Z29uUGF0aChnLHgsVCxMLE8sUCk7Y2FzZSJyb3VuZC1wb2x5Z29uIjpyZXR1cm4gdGhpcy5kcmF3Um91bmRQb2x5Z29uUGF0aChnLHgsVCxMLE8sUCk7Y2FzZSJyb3VuZHJlY3RhbmdsZSI6Y2FzZSJyb3VuZC1yZWN0YW5nbGUiOnJldHVybiB0aGlzLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGgoZyx4LFQsTCxPKTtjYXNlImN1dHJlY3RhbmdsZSI6Y2FzZSJjdXQtcmVjdGFuZ2xlIjpyZXR1cm4gdGhpcy5kcmF3Q3V0UmVjdGFuZ2xlUGF0aChnLHgsVCxMLE8pO2Nhc2UiYm90dG9tcm91bmRyZWN0YW5nbGUiOmNhc2UiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSI6cmV0dXJuIHRoaXMuZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlUGF0aChnLHgsVCxMLE8pO2Nhc2UiYmFycmVsIjpyZXR1cm4gdGhpcy5kcmF3QmFycmVsUGF0aChnLHgsVCxMLE8pfX07dmFyIGtwdD1sUix2Yz1sUi5wcm90b3R5cGU7dmMuQ0FOVkFTX0xBWUVSUz0zLHZjLlNFTEVDVF9CT1g9MCx2Yy5EUkFHPTEsdmMuTk9ERT0yLHZjLkJVRkZFUl9DT1VOVD0zLHZjLlRFWFRVUkVfQlVGRkVSPTAsdmMuTU9USU9OQkxVUl9CVUZGRVJfTk9ERT0xLHZjLk1PVElPTkJMVVJfQlVGRkVSX0RSQUc9MjtmdW5jdGlvbiBsUih5KXt2YXIgZz10aGlzO2cuZGF0YT17Y2FudmFzZXM6bmV3IEFycmF5KHZjLkNBTlZBU19MQVlFUlMpLGNvbnRleHRzOm5ldyBBcnJheSh2Yy5DQU5WQVNfTEFZRVJTKSxjYW52YXNOZWVkc1JlZHJhdzpuZXcgQXJyYXkodmMuQ0FOVkFTX0xBWUVSUyksYnVmZmVyQ2FudmFzZXM6bmV3IEFycmF5KHZjLkJVRkZFUl9DT1VOVCksYnVmZmVyQ29udGV4dHM6bmV3IEFycmF5KHZjLkNBTlZBU19MQVlFUlMpfTt2YXIgeD0iLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIixUPSJyZ2JhKDAsMCwwLDApIjtnLmRhdGEuY2FudmFzQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3ZhciBMPWcuZGF0YS5jYW52YXNDb250YWluZXIuc3R5bGU7Zy5kYXRhLmNhbnZhc0NvbnRhaW5lci5zdHlsZVt4XT1ULEwucG9zaXRpb249InJlbGF0aXZlIixMLnpJbmRleD0iMCIsTC5vdmVyZmxvdz0iaGlkZGVuIjt2YXIgTz15LmN5LmNvbnRhaW5lcigpO08uYXBwZW5kQ2hpbGQoZy5kYXRhLmNhbnZhc0NvbnRhaW5lciksTy5zdHlsZVt4XT1UO3ZhciBQPXsiLXdlYmtpdC11c2VyLXNlbGVjdCI6Im5vbmUiLCItbW96LXVzZXItc2VsZWN0IjoiLW1vei1ub25lIiwidXNlci1zZWxlY3QiOiJub25lIiwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIjoicmdiYSgwLDAsMCwwKSIsIm91dGxpbmUtc3R5bGUiOiJub25lIn07TGUoKSYmKFBbIi1tcy10b3VjaC1hY3Rpb24iXT0ibm9uZSIsUFsidG91Y2gtYWN0aW9uIl09Im5vbmUiKTtmb3IodmFyICQ9MDskPHZjLkNBTlZBU19MQVlFUlM7JCsrKXt2YXIgcT1nLmRhdGEuY2FudmFzZXNbJF09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Zy5kYXRhLmNvbnRleHRzWyRdPXEuZ2V0Q29udGV4dCgiMmQiKSxPYmplY3Qua2V5cyhQKS5mb3JFYWNoKGZ1bmN0aW9uKGVyKXtxLnN0eWxlW2VyXT1QW2VyXX0pLHEuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixxLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIiskKSxxLnN0eWxlLnpJbmRleD1TdHJpbmcodmMuQ0FOVkFTX0xBWUVSUy0kKSxnLmRhdGEuY2FudmFzQ29udGFpbmVyLmFwcGVuZENoaWxkKHEpLGcuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1skXT0hMX1nLmRhdGEudG9wQ2FudmFzPWcuZGF0YS5jYW52YXNlc1swXSxnLmRhdGEuY2FudmFzZXNbdmMuTk9ERV0uc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwibGF5ZXIiK3ZjLk5PREUrIi1ub2RlIiksZy5kYXRhLmNhbnZhc2VzW3ZjLlNFTEVDVF9CT1hdLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIit2Yy5TRUxFQ1RfQk9YKyItc2VsZWN0Ym94IiksZy5kYXRhLmNhbnZhc2VzW3ZjLkRSQUddLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIit2Yy5EUkFHKyItZHJhZyIpO2Zvcih2YXIgJD0wOyQ8dmMuQlVGRkVSX0NPVU5UOyQrKylnLmRhdGEuYnVmZmVyQ2FudmFzZXNbJF09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksZy5kYXRhLmJ1ZmZlckNvbnRleHRzWyRdPWcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5nZXRDb250ZXh0KCIyZCIpLGcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5zZXRBdHRyaWJ1dGUoImRhdGEtaWQiLCJidWZmZXIiKyQpLGcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5zdHlsZS56SW5kZXg9U3RyaW5nKC0kLTEpLGcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iO2cucGF0aHNFbmFibGVkPSEwO3ZhciBTPXpkKCksVj1mdW5jdGlvbih2bil7cmV0dXJue3g6KHZuLngxK3ZuLngyKS8yLHk6KHZuLnkxK3ZuLnkyKS8yfX0sWT1mdW5jdGlvbih2bil7cmV0dXJue3g6LXZuLncvMix5Oi12bi5oLzJ9fSxydD1mdW5jdGlvbih2bil7dmFyIGdyPXZuWzBdLl9wcml2YXRlLGZyPWdyLm9sZEJhY2tncm91bmRUaW1lc3RhbXA9PT1nci5iYWNrZ3JvdW5kVGltZXN0YW1wO3JldHVybiFmcn0sb3Q9ZnVuY3Rpb24odm4pe3JldHVybiB2blswXS5fcHJpdmF0ZS5ub2RlS2V5fSxodD1mdW5jdGlvbih2bil7cmV0dXJuIHZuWzBdLl9wcml2YXRlLmxhYmVsU3R5bGVLZXl9LGR0PWZ1bmN0aW9uKHZuKXtyZXR1cm4gdm5bMF0uX3ByaXZhdGUuc291cmNlTGFiZWxTdHlsZUtleX0sTHQ9ZnVuY3Rpb24odm4pe3JldHVybiB2blswXS5fcHJpdmF0ZS50YXJnZXRMYWJlbFN0eWxlS2V5fSxrdD1mdW5jdGlvbih2bixncixmcixKcix2aSl7cmV0dXJuIGcuZHJhd0VsZW1lbnQodm4sZ3IsZnIsITEsITEsdmkpfSxEdD1mdW5jdGlvbih2bixncixmcixKcix2aSl7cmV0dXJuIGcuZHJhd0VsZW1lbnRUZXh0KHZuLGdyLGZyLEpyLCJtYWluIix2aSl9LFB0PWZ1bmN0aW9uKHZuLGdyLGZyLEpyLHZpKXtyZXR1cm4gZy5kcmF3RWxlbWVudFRleHQodm4sZ3IsZnIsSnIsInNvdXJjZSIsdmkpfSwkdD1mdW5jdGlvbih2bixncixmcixKcix2aSl7cmV0dXJuIGcuZHJhd0VsZW1lbnRUZXh0KHZuLGdyLGZyLEpyLCJ0YXJnZXQiLHZpKX0sWnQ9ZnVuY3Rpb24odm4pe3JldHVybiB2bi5ib3VuZGluZ0JveCgpLHZuWzBdLl9wcml2YXRlLmJvZHlCb3VuZHN9LFl0PWZ1bmN0aW9uKHZuKXtyZXR1cm4gdm4uYm91bmRpbmdCb3goKSx2blswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy5tYWlufHxTfSxxdD1mdW5jdGlvbih2bil7cmV0dXJuIHZuLmJvdW5kaW5nQm94KCksdm5bMF0uX3ByaXZhdGUubGFiZWxCb3VuZHMuc291cmNlfHxTfSxuZT1mdW5jdGlvbih2bil7cmV0dXJuIHZuLmJvdW5kaW5nQm94KCksdm5bMF0uX3ByaXZhdGUubGFiZWxCb3VuZHMudGFyZ2V0fHxTfSxHdD1mdW5jdGlvbih2bixncil7cmV0dXJuIGdyfSxnZT1mdW5jdGlvbih2bil7cmV0dXJuIFYoWnQodm4pKX0sYmU9ZnVuY3Rpb24odm4sZ3IsZnIpe3ZhciBKcj12bj92bisiLSI6IiI7cmV0dXJue3g6Z3IueCtmci5wc3R5bGUoSnIrInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLHk6Z3IueStmci5wc3R5bGUoSnIrInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlfX0saWU9ZnVuY3Rpb24odm4sZ3IsZnIpe3ZhciBKcj12blswXS5fcHJpdmF0ZS5yc2NyYXRjaDtyZXR1cm57eDpKcltncl0seTpKcltmcl19fSxGZT1mdW5jdGlvbih2bil7cmV0dXJuIGJlKCIiLGllKHZuLCJsYWJlbFgiLCJsYWJlbFkiKSx2bil9LHdlPWZ1bmN0aW9uKHZuKXtyZXR1cm4gYmUoInNvdXJjZSIsaWUodm4sInNvdXJjZUxhYmVsWCIsInNvdXJjZUxhYmVsWSIpLHZuKX0sYm49ZnVuY3Rpb24odm4pe3JldHVybiBiZSgidGFyZ2V0IixpZSh2biwidGFyZ2V0TGFiZWxYIiwidGFyZ2V0TGFiZWxZIiksdm4pfSx6ZT1mdW5jdGlvbih2bil7cmV0dXJuIFkoWnQodm4pKX0sR2U9ZnVuY3Rpb24odm4pe3JldHVybiBZKHF0KHZuKSl9LEVuPWZ1bmN0aW9uKHZuKXtyZXR1cm4gWShuZSh2bikpfSxJbj1mdW5jdGlvbih2bil7dmFyIGdyPVl0KHZuKSxmcj1ZKFl0KHZuKSk7aWYodm4uaXNOb2RlKCkpe3N3aXRjaCh2bi5wc3R5bGUoInRleHQtaGFsaWduIikudmFsdWUpe2Nhc2UibGVmdCI6ZnIueD0tZ3IudzticmVhaztjYXNlInJpZ2h0Ijpmci54PTA7YnJlYWt9c3dpdGNoKHZuLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZSl7Y2FzZSJ0b3AiOmZyLnk9LWdyLmg7YnJlYWs7Y2FzZSJib3R0b20iOmZyLnk9MDticmVha319cmV0dXJuIGZyfSxZbj1nLmRhdGEuZWxlVHhyQ2FjaGU9bmV3IEtrKGcse2dldEtleTpvdCxkb2VzRWxlSW52YWxpZGF0ZUtleTpydCxkcmF3RWxlbWVudDprdCxnZXRCb3VuZGluZ0JveDpadCxnZXRSb3RhdGlvblBvaW50OmdlLGdldFJvdGF0aW9uT2Zmc2V0OnplLGFsbG93RWRnZVR4ckNhY2hpbmc6ITEsYWxsb3dQYXJlbnRUeHJDYWNoaW5nOiExfSksU249Zy5kYXRhLmxibFR4ckNhY2hlPW5ldyBLayhnLHtnZXRLZXk6aHQsZHJhd0VsZW1lbnQ6RHQsZ2V0Qm91bmRpbmdCb3g6WXQsZ2V0Um90YXRpb25Qb2ludDpGZSxnZXRSb3RhdGlvbk9mZnNldDpJbixpc1Zpc2libGU6R3R9KSxXbj1nLmRhdGEuc2xiVHhyQ2FjaGU9bmV3IEtrKGcse2dldEtleTpkdCxkcmF3RWxlbWVudDpQdCxnZXRCb3VuZGluZ0JveDpxdCxnZXRSb3RhdGlvblBvaW50OndlLGdldFJvdGF0aW9uT2Zmc2V0OkdlLGlzVmlzaWJsZTpHdH0pLHJyPWcuZGF0YS50bGJUeHJDYWNoZT1uZXcgS2soZyx7Z2V0S2V5Okx0LGRyYXdFbGVtZW50OiR0LGdldEJvdW5kaW5nQm94Om5lLGdldFJvdGF0aW9uUG9pbnQ6Ym4sZ2V0Um90YXRpb25PZmZzZXQ6RW4saXNWaXNpYmxlOkd0fSksd3I9Zy5kYXRhLmx5clR4ckNhY2hlPW5ldyBMdHQoZyk7Zy5vblVwZGF0ZUVsZUNhbGNzKGZ1bmN0aW9uKHZuLGdyKXtZbi5pbnZhbGlkYXRlRWxlbWVudHMoZ3IpLFNuLmludmFsaWRhdGVFbGVtZW50cyhnciksV24uaW52YWxpZGF0ZUVsZW1lbnRzKGdyKSxyci5pbnZhbGlkYXRlRWxlbWVudHMoZ3IpLHdyLmludmFsaWRhdGVFbGVtZW50cyhncik7Zm9yKHZhciBmcj0wO2ZyPGdyLmxlbmd0aDtmcisrKXt2YXIgSnI9Z3JbZnJdLl9wcml2YXRlO0pyLm9sZEJhY2tncm91bmRUaW1lc3RhbXA9SnIuYmFja2dyb3VuZFRpbWVzdGFtcH19KTt2YXIgdXI9ZnVuY3Rpb24odm4pe2Zvcih2YXIgZ3I9MDtncjx2bi5sZW5ndGg7Z3IrKyl3ci5lbnF1ZXVlRWxlbWVudFJlZmluZW1lbnQodm5bZ3JdLmVsZSl9O1luLm9uRGVxdWV1ZSh1ciksU24ub25EZXF1ZXVlKHVyKSxXbi5vbkRlcXVldWUodXIpLHJyLm9uRGVxdWV1ZSh1cil9dmMucmVkcmF3SGludD1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXM7c3dpdGNoKHkpe2Nhc2UiZWxlcyI6eC5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W3ZjLk5PREVdPWc7YnJlYWs7Y2FzZSJkcmFnIjp4LmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbdmMuRFJBR109ZzticmVhaztjYXNlInNlbGVjdCI6eC5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W3ZjLlNFTEVDVF9CT1hdPWc7YnJlYWt9fTt2YXIgenR0PXR5cGVvZiBQYXRoMkQ8InUiO3ZjLnBhdGgyZEVuYWJsZWQ9ZnVuY3Rpb24oeSl7aWYoeT09PXZvaWQgMClyZXR1cm4gdGhpcy5wYXRoc0VuYWJsZWQ7dGhpcy5wYXRoc0VuYWJsZWQ9ISF5fSx2Yy51c2VQYXRocz1mdW5jdGlvbigpe3JldHVybiB6dHQmJnRoaXMucGF0aHNFbmFibGVkfSx2Yy5zZXRJbWdTbW9vdGhpbmc9ZnVuY3Rpb24oeSxnKXt5LmltYWdlU21vb3RoaW5nRW5hYmxlZCE9bnVsbD95LmltYWdlU21vb3RoaW5nRW5hYmxlZD1nOih5LndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZD1nLHkubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkPWcseS5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZD1nKX0sdmMuZ2V0SW1nU21vb3RoaW5nPWZ1bmN0aW9uKHkpe3JldHVybiB5LmltYWdlU21vb3RoaW5nRW5hYmxlZCE9bnVsbD95LmltYWdlU21vb3RoaW5nRW5hYmxlZDp5LndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZHx8eS5tb3pJbWFnZVNtb290aGluZ0VuYWJsZWR8fHkubXNJbWFnZVNtb290aGluZ0VuYWJsZWR9LHZjLm1ha2VPZmZzY3JlZW5DYW52YXM9ZnVuY3Rpb24oeSxnKXt2YXIgeDtyZXR1cm4odHlwZW9mIE9mZnNjcmVlbkNhbnZhcz4idSI/InVuZGVmaW5lZCI6ZihPZmZzY3JlZW5DYW52YXMpKSE9PSJ1bmRlZmluZWQiP3g9bmV3IE9mZnNjcmVlbkNhbnZhcyh5LGcpOih4PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHgud2lkdGg9eSx4LmhlaWdodD1nKSx4fSxbRDAsd3csdncsQ0MsdngsWmssVGcsTzMsX0MsJHR0XS5mb3JFYWNoKGZ1bmN0aW9uKHkpe2RlKHZjLHkpfSk7dmFyIG14PVt7bmFtZToibnVsbCIsaW1wbDpXQn0se25hbWU6ImJhc2UiLGltcGw6bk19LHtuYW1lOiJjYW52YXMiLGltcGw6a3B0fV0sQ2c9W3t0eXBlOiJsYXlvdXQiLGV4dGVuc2lvbnM6bHR0fSx7dHlwZToicmVuZGVyZXIiLGV4dGVuc2lvbnM6bXh9XSxTbT17fSxjTT17fTtmdW5jdGlvbiB2MSh5LGcseCl7dmFyIFQ9eCxMPWZ1bmN0aW9uKG5lKXtTYygiQ2FuIG5vdCByZWdpc3RlciBgIitnKyJgIGZvciBgIit5KyJgIHNpbmNlIGAiK25lKyJgIGFscmVhZHkgZXhpc3RzIGluIHRoZSBwcm90b3R5cGUgYW5kIGNhbiBub3QgYmUgb3ZlcnJpZGRlbiIpfTtpZih5PT09ImNvcmUiKXtpZihWay5wcm90b3R5cGVbZ10pcmV0dXJuIEwoZyk7VmsucHJvdG90eXBlW2ddPXh9ZWxzZSBpZih5PT09ImNvbGxlY3Rpb24iKXtpZigkZi5wcm90b3R5cGVbZ10pcmV0dXJuIEwoZyk7JGYucHJvdG90eXBlW2ddPXh9ZWxzZSBpZih5PT09ImxheW91dCIpe2Zvcih2YXIgTz1mdW5jdGlvbihuZSl7dGhpcy5vcHRpb25zPW5lLHguY2FsbCh0aGlzLG5lKSx1dCh0aGlzLl9wcml2YXRlKXx8KHRoaXMuX3ByaXZhdGU9e30pLHRoaXMuX3ByaXZhdGUuY3k9bmUuY3ksdGhpcy5fcHJpdmF0ZS5saXN0ZW5lcnM9W10sdGhpcy5jcmVhdGVFbWl0dGVyKCl9LFA9Ty5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4LnByb3RvdHlwZSksJD1bXSxxPTA7cTwkLmxlbmd0aDtxKyspe3ZhciBTPSRbcV07UFtTXT1QW1NdfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfX1QLnN0YXJ0JiYhUC5ydW4/UC5ydW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydCgpLHRoaXN9OiFQLnN0YXJ0JiZQLnJ1biYmKFAuc3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ydW4oKSx0aGlzfSk7dmFyIFY9eC5wcm90b3R5cGUuc3RvcDtQLnN0b3A9ZnVuY3Rpb24oKXt2YXIgcXQ9dGhpcy5vcHRpb25zO2lmKHF0JiZxdC5hbmltYXRlKXt2YXIgbmU9dGhpcy5hbmltYXRpb25zO2lmKG5lKWZvcih2YXIgR3Q9MDtHdDxuZS5sZW5ndGg7R3QrKyluZVtHdF0uc3RvcCgpfXJldHVybiBWP1YuY2FsbCh0aGlzKTp0aGlzLmVtaXQoImxheW91dHN0b3AiKSx0aGlzfSxQLmRlc3Ryb3l8fChQLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFAuY3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5jeX07dmFyIFk9ZnVuY3Rpb24obmUpe3JldHVybiBuZS5fcHJpdmF0ZS5jeX0scnQ9e2FkZEV2ZW50RmllbGRzOmZ1bmN0aW9uKG5lLEd0KXtHdC5sYXlvdXQ9bmUsR3QuY3k9WShuZSksR3QudGFyZ2V0PW5lfSxidWJibGU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0scGFyZW50OmZ1bmN0aW9uKG5lKXtyZXR1cm4gWShuZSl9fTtkZShQLHtjcmVhdGVFbWl0dGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcj1uZXcgbkMocnQsdGhpcyksdGhpc30sZW1pdHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVtaXR0ZXJ9LG9uOmZ1bmN0aW9uKG5lLEd0KXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub24obmUsR3QpLHRoaXN9LG9uZTpmdW5jdGlvbihuZSxHdCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uZShuZSxHdCksdGhpc30sb25jZTpmdW5jdGlvbihuZSxHdCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uZShuZSxHdCksdGhpc30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24obmUsR3Qpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVMaXN0ZW5lcihuZSxHdCksdGhpc30scmVtb3ZlQWxsTGlzdGVuZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLnJlbW92ZUFsbExpc3RlbmVycygpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24obmUsR3Qpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5lbWl0KG5lLEd0KSx0aGlzfX0pLEFjLmV2ZW50QWxpYXNlc09uKFApLFQ9T31lbHNlIGlmKHk9PT0icmVuZGVyZXIiJiZnIT09Im51bGwiJiZnIT09ImJhc2UiKXt2YXIgb3Q9eXgoInJlbmRlcmVyIiwiYmFzZSIpLGh0PW90LnByb3RvdHlwZSxkdD14LEx0PXgucHJvdG90eXBlLGt0PWZ1bmN0aW9uKCl7b3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLGR0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sRHQ9a3QucHJvdG90eXBlO2Zvcih2YXIgUHQgaW4gaHQpe3ZhciAkdD1odFtQdF0sWnQ9THRbUHRdIT1udWxsO2lmKFp0KXJldHVybiBMKFB0KTtEdFtQdF09JHR9Zm9yKHZhciBZdCBpbiBMdClEdFtZdF09THRbWXRdO2h0LmNsaWVudEZ1bmN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHF0KXtEdFtxdF09RHRbcXRdfHxmdW5jdGlvbigpe3ZsKCJSZW5kZXJlciBkb2VzIG5vdCBpbXBsZW1lbnQgYHJlbmRlcmVyLiIrcXQrIigpYCBvbiBpdHMgcHJvdG90eXBlIil9fSksVD1rdH1lbHNlIGlmKHk9PT0iX19wcm90b19fInx8eT09PSJjb25zdHJ1Y3RvciJ8fHk9PT0icHJvdG90eXBlIilyZXR1cm4gdmwoeSsiIGlzIGFuIGlsbGVnYWwgdHlwZSB0byBiZSByZWdpc3RlcmVkLCBwb3NzaWJseSBsZWFkIHRvIHByb3RvdHlwZSBwb2xsdXRpb25zIik7cmV0dXJuIEVyKHttYXA6U20sa2V5czpbeSxnXSx2YWx1ZTpUfSl9ZnVuY3Rpb24geXgoeSxnKXtyZXR1cm4gWG4oe21hcDpTbSxrZXlzOlt5LGddfSl9ZnVuY3Rpb24gcXR0KHksZyx4LFQsTCl7cmV0dXJuIEVyKHttYXA6Y00sa2V5czpbeSxnLHgsVF0sdmFsdWU6TH0pfWZ1bmN0aW9uIGhSKHksZyx4LFQpe3JldHVybiBYbih7bWFwOmNNLGtleXM6W3ksZyx4LFRdfSl9dmFyIFAzPWZ1bmN0aW9uKCl7aWYoYXJndW1lbnRzLmxlbmd0aD09PTIpcmV0dXJuIHl4LmFwcGx5KG51bGwsYXJndW1lbnRzKTtpZihhcmd1bWVudHMubGVuZ3RoPT09MylyZXR1cm4gdjEuYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT00KXJldHVybiBoUi5hcHBseShudWxsLGFyZ3VtZW50cyk7aWYoYXJndW1lbnRzLmxlbmd0aD09PTUpcmV0dXJuIHF0dC5hcHBseShudWxsLGFyZ3VtZW50cyk7dmwoIkludmFsaWQgZXh0ZW5zaW9uIGFjY2VzcyBzeW50YXgiKX07VmsucHJvdG90eXBlLmV4dGVuc2lvbj1QMyxDZy5mb3JFYWNoKGZ1bmN0aW9uKHkpe3kuZXh0ZW5zaW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGcpe3YxKHkudHlwZSxnLm5hbWUsZy5pbXBsKX0pfSk7dmFyIHVNPWZ1bmN0aW9uIHkoKXtpZighKHRoaXMgaW5zdGFuY2VvZiB5KSlyZXR1cm4gbmV3IHk7dGhpcy5sZW5ndGg9MH0sQW09dU0ucHJvdG90eXBlO0FtLmluc3RhbmNlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuInN0eWxlc2hlZXQifSxBbS5zZWxlY3Rvcj1mdW5jdGlvbih5KXt2YXIgZz10aGlzLmxlbmd0aCsrO3JldHVybiB0aGlzW2ddPXtzZWxlY3Rvcjp5LHByb3BlcnRpZXM6W119LHRoaXN9LEFtLmNzcz1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMubGVuZ3RoLTE7aWYobXQoeSkpdGhpc1t4XS5wcm9wZXJ0aWVzLnB1c2goe25hbWU6eSx2YWx1ZTpnfSk7ZWxzZSBpZih1dCh5KSlmb3IodmFyIFQ9eSxMPU9iamVjdC5rZXlzKFQpLE89MDtPPEwubGVuZ3RoO08rKyl7dmFyIFA9TFtPXSwkPVRbUF07aWYoJCE9bnVsbCl7dmFyIHE9cDEucHJvcGVydGllc1tQXXx8cDEucHJvcGVydGllc1tTZShQKV07aWYocSE9bnVsbCl7dmFyIFM9cS5uYW1lLFY9JDt0aGlzW3hdLnByb3BlcnRpZXMucHVzaCh7bmFtZTpTLHZhbHVlOlZ9KX19fXJldHVybiB0aGlzfSxBbS5zdHlsZT1BbS5jc3MsQW0uZ2VuZXJhdGVTdHlsZT1mdW5jdGlvbih5KXt2YXIgZz1uZXcgcDEoeSk7cmV0dXJuIHRoaXMuYXBwZW5kVG9TdHlsZShnKX0sQW0uYXBwZW5kVG9TdHlsZT1mdW5jdGlvbih5KXtmb3IodmFyIGc9MDtnPHRoaXMubGVuZ3RoO2crKyl7dmFyIHg9dGhpc1tnXSxUPXguc2VsZWN0b3IsTD14LnByb3BlcnRpZXM7eS5zZWxlY3RvcihUKTtmb3IodmFyIE89MDtPPEwubGVuZ3RoO08rKyl7dmFyIFA9TFtPXTt5LmNzcyhQLm5hbWUsUC52YWx1ZSl9fXJldHVybiB5fTt2YXIgZlI9IjMuMjMuMCIsbTE9ZnVuY3Rpb24oZyl7aWYoZz09PXZvaWQgMCYmKGc9e30pLHV0KGcpKXJldHVybiBuZXcgVmsoZyk7aWYobXQoZykpcmV0dXJuIFAzLmFwcGx5KFAzLGFyZ3VtZW50cyl9O3JldHVybiBtMS51c2U9ZnVuY3Rpb24oeSl7dmFyIGc9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBnLnVuc2hpZnQobTEpLHkuYXBwbHkobnVsbCxnKSx0aGlzfSxtMS53YXJuaW5ncz1mdW5jdGlvbih5KXtyZXR1cm4gaU4oeSl9LG0xLnZlcnNpb249ZlIsbTEuc3R5bGVzaGVldD1tMS5TdHlsZXNoZWV0PXVNLG0xfSl9KSh1JHQpO3ZhciBhWWU9dSR0LmV4cG9ydHM7Y29uc3QgbCR0PUc3KGFZZSk7dmFyIGgkdD17ZXhwb3J0czp7fX0sdHB0PXtleHBvcnRzOnt9fSxlcHQ9e2V4cG9ydHM6e319LGYkdDtmdW5jdGlvbiBvWWUoKXtyZXR1cm4gZiR0fHwoZiR0PTEsZnVuY3Rpb24oaSxhKXsoZnVuY3Rpb24ocCx3KXtpLmV4cG9ydHM9dygpfSkoYjAsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZil7dmFyIHA9e307ZnVuY3Rpb24gdyhtKXtpZihwW21dKXJldHVybiBwW21dLmV4cG9ydHM7dmFyIGI9cFttXT17aTptLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGZbbV0uY2FsbChiLmV4cG9ydHMsYixiLmV4cG9ydHMsdyksYi5sPSEwLGIuZXhwb3J0c31yZXR1cm4gdy5tPWYsdy5jPXAsdy5pPWZ1bmN0aW9uKG0pe3JldHVybiBtfSx3LmQ9ZnVuY3Rpb24obSxiLEUpe3cubyhtLGIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobSxiLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6RX0pfSx3Lm49ZnVuY3Rpb24obSl7dmFyIGI9bSYmbS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIG0uZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gbX07cmV0dXJuIHcuZChiLCJhIixiKSxifSx3Lm89ZnVuY3Rpb24obSxiKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG0sYil9LHcucD0iIix3KHcucz0yNil9KFtmdW5jdGlvbihmLHAsdyl7ZnVuY3Rpb24gbSgpe31tLlFVQUxJVFk9MSxtLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRD0hMSxtLkRFRkFVTFRfSU5DUkVNRU5UQUw9ITEsbS5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQ9ITAsbS5ERUZBVUxUX0FOSU1BVElPTl9EVVJJTkdfTEFZT1VUPSExLG0uREVGQVVMVF9BTklNQVRJT05fUEVSSU9EPTUwLG0uREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUz0hMSxtLkRFRkFVTFRfR1JBUEhfTUFSR0lOPTE1LG0uTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTPSExLG0uU0lNUExFX05PREVfU0laRT00MCxtLlNJTVBMRV9OT0RFX0hBTEZfU0laRT1tLlNJTVBMRV9OT0RFX1NJWkUvMixtLkVNUFRZX0NPTVBPVU5EX05PREVfU0laRT00MCxtLk1JTl9FREdFX0xFTkdUSD0xLG0uV09STERfQk9VTkRBUlk9MWU2LG0uSU5JVElBTF9XT1JMRF9CT1VOREFSWT1tLldPUkxEX0JPVU5EQVJZLzFlMyxtLldPUkxEX0NFTlRFUl9YPTEyMDAsbS5XT1JMRF9DRU5URVJfWT05MDAsZi5leHBvcnRzPW19LGZ1bmN0aW9uKGYscCx3KXt2YXIgbT13KDIpLGI9dyg4KSxFPXcoOSk7ZnVuY3Rpb24gXyhJLEIsTil7bS5jYWxsKHRoaXMsTiksdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ9ITEsdGhpcy52R3JhcGhPYmplY3Q9Tix0aGlzLmJlbmRwb2ludHM9W10sdGhpcy5zb3VyY2U9SSx0aGlzLnRhcmdldD1CfV8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobS5wcm90b3R5cGUpO2Zvcih2YXIgQSBpbiBtKV9bQV09bVtBXTtfLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zb3VyY2V9LF8ucHJvdG90eXBlLmdldFRhcmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRhcmdldH0sXy5wcm90b3R5cGUuaXNJbnRlckdyYXBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbnRlckdyYXBofSxfLnByb3RvdHlwZS5nZXRMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LF8ucHJvdG90eXBlLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldH0sXy5wcm90b3R5cGUuZ2V0QmVuZHBvaW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJlbmRwb2ludHN9LF8ucHJvdG90eXBlLmdldExjYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxjYX0sXy5wcm90b3R5cGUuZ2V0U291cmNlSW5MY2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zb3VyY2VJbkxjYX0sXy5wcm90b3R5cGUuZ2V0VGFyZ2V0SW5MY2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YXJnZXRJbkxjYX0sXy5wcm90b3R5cGUuZ2V0T3RoZXJFbmQ9ZnVuY3Rpb24oSSl7aWYodGhpcy5zb3VyY2U9PT1JKXJldHVybiB0aGlzLnRhcmdldDtpZih0aGlzLnRhcmdldD09PUkpcmV0dXJuIHRoaXMuc291cmNlO3Rocm93Ik5vZGUgaXMgbm90IGluY2lkZW50IHdpdGggdGhpcyBlZGdlIn0sXy5wcm90b3R5cGUuZ2V0T3RoZXJFbmRJbkdyYXBoPWZ1bmN0aW9uKEksQil7Zm9yKHZhciBOPXRoaXMuZ2V0T3RoZXJFbmQoSSksUj1CLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKTs7KXtpZihOLmdldE93bmVyKCk9PUIpcmV0dXJuIE47aWYoTi5nZXRPd25lcigpPT1SKWJyZWFrO049Ti5nZXRPd25lcigpLmdldFBhcmVudCgpfXJldHVybiBudWxsfSxfLnByb3RvdHlwZS51cGRhdGVMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgST1uZXcgQXJyYXkoNCk7dGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ9Yi5nZXRJbnRlcnNlY3Rpb24odGhpcy50YXJnZXQuZ2V0UmVjdCgpLHRoaXMuc291cmNlLmdldFJlY3QoKSxJKSx0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldHx8KHRoaXMubGVuZ3RoWD1JWzBdLUlbMl0sdGhpcy5sZW5ndGhZPUlbMV0tSVszXSxNYXRoLmFicyh0aGlzLmxlbmd0aFgpPDEmJih0aGlzLmxlbmd0aFg9RS5zaWduKHRoaXMubGVuZ3RoWCkpLE1hdGguYWJzKHRoaXMubGVuZ3RoWSk8MSYmKHRoaXMubGVuZ3RoWT1FLnNpZ24odGhpcy5sZW5ndGhZKSksdGhpcy5sZW5ndGg9TWF0aC5zcXJ0KHRoaXMubGVuZ3RoWCp0aGlzLmxlbmd0aFgrdGhpcy5sZW5ndGhZKnRoaXMubGVuZ3RoWSkpfSxfLnByb3RvdHlwZS51cGRhdGVMZW5ndGhTaW1wbGU9ZnVuY3Rpb24oKXt0aGlzLmxlbmd0aFg9dGhpcy50YXJnZXQuZ2V0Q2VudGVyWCgpLXRoaXMuc291cmNlLmdldENlbnRlclgoKSx0aGlzLmxlbmd0aFk9dGhpcy50YXJnZXQuZ2V0Q2VudGVyWSgpLXRoaXMuc291cmNlLmdldENlbnRlclkoKSxNYXRoLmFicyh0aGlzLmxlbmd0aFgpPDEmJih0aGlzLmxlbmd0aFg9RS5zaWduKHRoaXMubGVuZ3RoWCkpLE1hdGguYWJzKHRoaXMubGVuZ3RoWSk8MSYmKHRoaXMubGVuZ3RoWT1FLnNpZ24odGhpcy5sZW5ndGhZKSksdGhpcy5sZW5ndGg9TWF0aC5zcXJ0KHRoaXMubGVuZ3RoWCp0aGlzLmxlbmd0aFgrdGhpcy5sZW5ndGhZKnRoaXMubGVuZ3RoWSl9LGYuZXhwb3J0cz1ffSxmdW5jdGlvbihmLHAsdyl7ZnVuY3Rpb24gbShiKXt0aGlzLnZHcmFwaE9iamVjdD1ifWYuZXhwb3J0cz1tfSxmdW5jdGlvbihmLHAsdyl7dmFyIG09dygyKSxiPXcoMTApLEU9dygxMyksXz13KDApLEE9dygxNiksST13KDQpO2Z1bmN0aW9uIEIoUix6LFcsZXQpe1c9PW51bGwmJmV0PT1udWxsJiYoZXQ9eiksbS5jYWxsKHRoaXMsZXQpLFIuZ3JhcGhNYW5hZ2VyIT1udWxsJiYoUj1SLmdyYXBoTWFuYWdlciksdGhpcy5lc3RpbWF0ZWRTaXplPWIuTUlOX1ZBTFVFLHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoPWIuTUFYX1ZBTFVFLHRoaXMudkdyYXBoT2JqZWN0PWV0LHRoaXMuZWRnZXM9W10sdGhpcy5ncmFwaE1hbmFnZXI9UixXIT1udWxsJiZ6IT1udWxsP3RoaXMucmVjdD1uZXcgRSh6Lngsei55LFcud2lkdGgsVy5oZWlnaHQpOnRoaXMucmVjdD1uZXcgRX1CLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0ucHJvdG90eXBlKTtmb3IodmFyIE4gaW4gbSlCW05dPW1bTl07Qi5wcm90b3R5cGUuZ2V0RWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlc30sQi5wcm90b3R5cGUuZ2V0Q2hpbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZH0sQi5wcm90b3R5cGUuZ2V0T3duZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lcn0sQi5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LndpZHRofSxCLnByb3RvdHlwZS5zZXRXaWR0aD1mdW5jdGlvbihSKXt0aGlzLnJlY3Qud2lkdGg9Un0sQi5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC5oZWlnaHR9LEIucHJvdG90eXBlLnNldEhlaWdodD1mdW5jdGlvbihSKXt0aGlzLnJlY3QuaGVpZ2h0PVJ9LEIucHJvdG90eXBlLmdldENlbnRlclg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LngrdGhpcy5yZWN0LndpZHRoLzJ9LEIucHJvdG90eXBlLmdldENlbnRlclk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LnkrdGhpcy5yZWN0LmhlaWdodC8yfSxCLnByb3RvdHlwZS5nZXRDZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEkodGhpcy5yZWN0LngrdGhpcy5yZWN0LndpZHRoLzIsdGhpcy5yZWN0LnkrdGhpcy5yZWN0LmhlaWdodC8yKX0sQi5wcm90b3R5cGUuZ2V0TG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEkodGhpcy5yZWN0LngsdGhpcy5yZWN0LnkpfSxCLnByb3RvdHlwZS5nZXRSZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdH0sQi5wcm90b3R5cGUuZ2V0RGlhZ29uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMucmVjdC53aWR0aCp0aGlzLnJlY3Qud2lkdGgrdGhpcy5yZWN0LmhlaWdodCp0aGlzLnJlY3QuaGVpZ2h0KX0sQi5wcm90b3R5cGUuZ2V0SGFsZlRoZURpYWdvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLnJlY3QuaGVpZ2h0KnRoaXMucmVjdC5oZWlnaHQrdGhpcy5yZWN0LndpZHRoKnRoaXMucmVjdC53aWR0aCkvMn0sQi5wcm90b3R5cGUuc2V0UmVjdD1mdW5jdGlvbihSLHope3RoaXMucmVjdC54PVIueCx0aGlzLnJlY3QueT1SLnksdGhpcy5yZWN0LndpZHRoPXoud2lkdGgsdGhpcy5yZWN0LmhlaWdodD16LmhlaWdodH0sQi5wcm90b3R5cGUuc2V0Q2VudGVyPWZ1bmN0aW9uKFIseil7dGhpcy5yZWN0Lng9Ui10aGlzLnJlY3Qud2lkdGgvMix0aGlzLnJlY3QueT16LXRoaXMucmVjdC5oZWlnaHQvMn0sQi5wcm90b3R5cGUuc2V0TG9jYXRpb249ZnVuY3Rpb24oUix6KXt0aGlzLnJlY3QueD1SLHRoaXMucmVjdC55PXp9LEIucHJvdG90eXBlLm1vdmVCeT1mdW5jdGlvbihSLHope3RoaXMucmVjdC54Kz1SLHRoaXMucmVjdC55Kz16fSxCLnByb3RvdHlwZS5nZXRFZGdlTGlzdFRvTm9kZT1mdW5jdGlvbihSKXt2YXIgej1bXSxXPXRoaXM7cmV0dXJuIFcuZWRnZXMuZm9yRWFjaChmdW5jdGlvbihldCl7aWYoZXQudGFyZ2V0PT1SKXtpZihldC5zb3VyY2UhPVcpdGhyb3ciSW5jb3JyZWN0IGVkZ2Ugc291cmNlISI7ei5wdXNoKGV0KX19KSx6fSxCLnByb3RvdHlwZS5nZXRFZGdlc0JldHdlZW49ZnVuY3Rpb24oUil7dmFyIHo9W10sVz10aGlzO3JldHVybiBXLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oZXQpe2lmKCEoZXQuc291cmNlPT1XfHxldC50YXJnZXQ9PVcpKXRocm93IkluY29ycmVjdCBlZGdlIHNvdXJjZSBhbmQvb3IgdGFyZ2V0IjsoZXQudGFyZ2V0PT1SfHxldC5zb3VyY2U9PVIpJiZ6LnB1c2goZXQpfSksen0sQi5wcm90b3R5cGUuZ2V0TmVpZ2hib3JzTGlzdD1mdW5jdGlvbigpe3ZhciBSPW5ldyBTZXQsej10aGlzO3JldHVybiB6LmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oVyl7aWYoVy5zb3VyY2U9PXopUi5hZGQoVy50YXJnZXQpO2Vsc2V7aWYoVy50YXJnZXQhPXopdGhyb3ciSW5jb3JyZWN0IGluY2lkZW5jeSEiO1IuYWRkKFcuc291cmNlKX19KSxSfSxCLnByb3RvdHlwZS53aXRoQ2hpbGRyZW49ZnVuY3Rpb24oKXt2YXIgUj1uZXcgU2V0LHosVztpZihSLmFkZCh0aGlzKSx0aGlzLmNoaWxkIT1udWxsKWZvcih2YXIgZXQ9dGhpcy5jaGlsZC5nZXROb2RlcygpLHN0PTA7c3Q8ZXQubGVuZ3RoO3N0Kyspej1ldFtzdF0sVz16LndpdGhDaGlsZHJlbigpLFcuZm9yRWFjaChmdW5jdGlvbihhdCl7Ui5hZGQoYXQpfSk7cmV0dXJuIFJ9LEIucHJvdG90eXBlLmdldE5vT2ZDaGlsZHJlbj1mdW5jdGlvbigpe3ZhciBSPTAsejtpZih0aGlzLmNoaWxkPT1udWxsKVI9MTtlbHNlIGZvcih2YXIgVz10aGlzLmNoaWxkLmdldE5vZGVzKCksZXQ9MDtldDxXLmxlbmd0aDtldCsrKXo9V1tldF0sUis9ei5nZXROb09mQ2hpbGRyZW4oKTtyZXR1cm4gUj09MCYmKFI9MSksUn0sQi5wcm90b3R5cGUuZ2V0RXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe2lmKHRoaXMuZXN0aW1hdGVkU2l6ZT09Yi5NSU5fVkFMVUUpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7cmV0dXJuIHRoaXMuZXN0aW1hdGVkU2l6ZX0sQi5wcm90b3R5cGUuY2FsY0VzdGltYXRlZFNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZD09bnVsbD90aGlzLmVzdGltYXRlZFNpemU9KHRoaXMucmVjdC53aWR0aCt0aGlzLnJlY3QuaGVpZ2h0KS8yOih0aGlzLmVzdGltYXRlZFNpemU9dGhpcy5jaGlsZC5jYWxjRXN0aW1hdGVkU2l6ZSgpLHRoaXMucmVjdC53aWR0aD10aGlzLmVzdGltYXRlZFNpemUsdGhpcy5yZWN0LmhlaWdodD10aGlzLmVzdGltYXRlZFNpemUsdGhpcy5lc3RpbWF0ZWRTaXplKX0sQi5wcm90b3R5cGUuc2NhdHRlcj1mdW5jdGlvbigpe3ZhciBSLHosVz0tXy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZLGV0PV8uSU5JVElBTF9XT1JMRF9CT1VOREFSWTtSPV8uV09STERfQ0VOVEVSX1grQS5uZXh0RG91YmxlKCkqKGV0LVcpK1c7dmFyIHN0PS1fLklOSVRJQUxfV09STERfQk9VTkRBUlksYXQ9Xy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZO3o9Xy5XT1JMRF9DRU5URVJfWStBLm5leHREb3VibGUoKSooYXQtc3QpK3N0LHRoaXMucmVjdC54PVIsdGhpcy5yZWN0Lnk9en0sQi5wcm90b3R5cGUudXBkYXRlQm91bmRzPWZ1bmN0aW9uKCl7aWYodGhpcy5nZXRDaGlsZCgpPT1udWxsKXRocm93ImFzc2VydCBmYWlsZWQiO2lmKHRoaXMuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLmxlbmd0aCE9MCl7dmFyIFI9dGhpcy5nZXRDaGlsZCgpO2lmKFIudXBkYXRlQm91bmRzKCEwKSx0aGlzLnJlY3QueD1SLmdldExlZnQoKSx0aGlzLnJlY3QueT1SLmdldFRvcCgpLHRoaXMuc2V0V2lkdGgoUi5nZXRSaWdodCgpLVIuZ2V0TGVmdCgpKSx0aGlzLnNldEhlaWdodChSLmdldEJvdHRvbSgpLVIuZ2V0VG9wKCkpLF8uTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTKXt2YXIgej1SLmdldFJpZ2h0KCktUi5nZXRMZWZ0KCksVz1SLmdldEJvdHRvbSgpLVIuZ2V0VG9wKCk7dGhpcy5sYWJlbFdpZHRoPnomJih0aGlzLnJlY3QueC09KHRoaXMubGFiZWxXaWR0aC16KS8yLHRoaXMuc2V0V2lkdGgodGhpcy5sYWJlbFdpZHRoKSksdGhpcy5sYWJlbEhlaWdodD5XJiYodGhpcy5sYWJlbFBvcz09ImNlbnRlciI/dGhpcy5yZWN0LnktPSh0aGlzLmxhYmVsSGVpZ2h0LVcpLzI6dGhpcy5sYWJlbFBvcz09InRvcCImJih0aGlzLnJlY3QueS09dGhpcy5sYWJlbEhlaWdodC1XKSx0aGlzLnNldEhlaWdodCh0aGlzLmxhYmVsSGVpZ2h0KSl9fX0sQi5wcm90b3R5cGUuZ2V0SW5jbHVzaW9uVHJlZURlcHRoPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmNsdXNpb25UcmVlRGVwdGg9PWIuTUFYX1ZBTFVFKXRocm93ImFzc2VydCBmYWlsZWQiO3JldHVybiB0aGlzLmluY2x1c2lvblRyZWVEZXB0aH0sQi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKFIpe3ZhciB6PXRoaXMucmVjdC54O3o+Xy5XT1JMRF9CT1VOREFSWT96PV8uV09STERfQk9VTkRBUlk6ejwtXy5XT1JMRF9CT1VOREFSWSYmKHo9LV8uV09STERfQk9VTkRBUlkpO3ZhciBXPXRoaXMucmVjdC55O1c+Xy5XT1JMRF9CT1VOREFSWT9XPV8uV09STERfQk9VTkRBUlk6VzwtXy5XT1JMRF9CT1VOREFSWSYmKFc9LV8uV09STERfQk9VTkRBUlkpO3ZhciBldD1uZXcgSSh6LFcpLHN0PVIuaW52ZXJzZVRyYW5zZm9ybVBvaW50KGV0KTt0aGlzLnNldExvY2F0aW9uKHN0Lngsc3QueSl9LEIucHJvdG90eXBlLmdldExlZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0Lnh9LEIucHJvdG90eXBlLmdldFJpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC54K3RoaXMucmVjdC53aWR0aH0sQi5wcm90b3R5cGUuZ2V0VG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC55fSxCLnByb3RvdHlwZS5nZXRCb3R0b209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LnkrdGhpcy5yZWN0LmhlaWdodH0sQi5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXI9PW51bGw/bnVsbDp0aGlzLm93bmVyLmdldFBhcmVudCgpfSxmLmV4cG9ydHM9Qn0sZnVuY3Rpb24oZixwLHcpe2Z1bmN0aW9uIG0oYixFKXtiPT1udWxsJiZFPT1udWxsPyh0aGlzLng9MCx0aGlzLnk9MCk6KHRoaXMueD1iLHRoaXMueT1FKX1tLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sbS5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnl9LG0ucHJvdG90eXBlLnNldFg9ZnVuY3Rpb24oYil7dGhpcy54PWJ9LG0ucHJvdG90eXBlLnNldFk9ZnVuY3Rpb24oYil7dGhpcy55PWJ9LG0ucHJvdG90eXBlLmdldERpZmZlcmVuY2U9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyBEaW1lbnNpb25EKHRoaXMueC1iLngsdGhpcy55LWIueSl9LG0ucHJvdG90eXBlLmdldENvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG0odGhpcy54LHRoaXMueSl9LG0ucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy54Kz1iLndpZHRoLHRoaXMueSs9Yi5oZWlnaHQsdGhpc30sZi5leHBvcnRzPW19LGZ1bmN0aW9uKGYscCx3KXt2YXIgbT13KDIpLGI9dygxMCksRT13KDApLF89dyg2KSxBPXcoMyksST13KDEpLEI9dygxMyksTj13KDEyKSxSPXcoMTEpO2Z1bmN0aW9uIHooZXQsc3QsYXQpe20uY2FsbCh0aGlzLGF0KSx0aGlzLmVzdGltYXRlZFNpemU9Yi5NSU5fVkFMVUUsdGhpcy5tYXJnaW49RS5ERUZBVUxUX0dSQVBIX01BUkdJTix0aGlzLmVkZ2VzPVtdLHRoaXMubm9kZXM9W10sdGhpcy5pc0Nvbm5lY3RlZD0hMSx0aGlzLnBhcmVudD1ldCxzdCE9bnVsbCYmc3QgaW5zdGFuY2VvZiBfP3RoaXMuZ3JhcGhNYW5hZ2VyPXN0OnN0IT1udWxsJiZzdCBpbnN0YW5jZW9mIExheW91dCYmKHRoaXMuZ3JhcGhNYW5hZ2VyPXN0LmdyYXBoTWFuYWdlcil9ei5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShtLnByb3RvdHlwZSk7Zm9yKHZhciBXIGluIG0peltXXT1tW1ddO3oucHJvdG90eXBlLmdldE5vZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXN9LHoucHJvdG90eXBlLmdldEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXN9LHoucHJvdG90eXBlLmdldEdyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcn0sei5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50fSx6LnByb3RvdHlwZS5nZXRMZWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVmdH0sei5wcm90b3R5cGUuZ2V0UmlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yaWdodH0sei5wcm90b3R5cGUuZ2V0VG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9wfSx6LnByb3RvdHlwZS5nZXRCb3R0b209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib3R0b219LHoucHJvdG90eXBlLmlzQ29ubmVjdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNDb25uZWN0ZWR9LHoucHJvdG90eXBlLmFkZD1mdW5jdGlvbihldCxzdCxhdCl7aWYoc3Q9PW51bGwmJmF0PT1udWxsKXt2YXIgYnQ9ZXQ7aWYodGhpcy5ncmFwaE1hbmFnZXI9PW51bGwpdGhyb3ciR3JhcGggaGFzIG5vIGdyYXBoIG1nciEiO2lmKHRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKGJ0KT4tMSl0aHJvdyJOb2RlIGFscmVhZHkgaW4gZ3JhcGghIjtyZXR1cm4gYnQub3duZXI9dGhpcyx0aGlzLmdldE5vZGVzKCkucHVzaChidCksYnR9ZWxzZXt2YXIgbXQ9ZXQ7aWYoISh0aGlzLmdldE5vZGVzKCkuaW5kZXhPZihzdCk+LTEmJnRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKGF0KT4tMSkpdGhyb3ciU291cmNlIG9yIHRhcmdldCBub3QgaW4gZ3JhcGghIjtpZighKHN0Lm93bmVyPT1hdC5vd25lciYmc3Qub3duZXI9PXRoaXMpKXRocm93IkJvdGggb3duZXJzIG11c3QgYmUgdGhpcyBncmFwaCEiO3JldHVybiBzdC5vd25lciE9YXQub3duZXI/bnVsbDoobXQuc291cmNlPXN0LG10LnRhcmdldD1hdCxtdC5pc0ludGVyR3JhcGg9ITEsdGhpcy5nZXRFZGdlcygpLnB1c2gobXQpLHN0LmVkZ2VzLnB1c2gobXQpLGF0IT1zdCYmYXQuZWRnZXMucHVzaChtdCksbXQpfX0sei5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGV0KXt2YXIgc3Q9ZXQ7aWYoZXQgaW5zdGFuY2VvZiBBKXtpZihzdD09bnVsbCl0aHJvdyJOb2RlIGlzIG51bGwhIjtpZighKHN0Lm93bmVyIT1udWxsJiZzdC5vd25lcj09dGhpcykpdGhyb3ciT3duZXIgZ3JhcGggaXMgaW52YWxpZCEiO2lmKHRoaXMuZ3JhcGhNYW5hZ2VyPT1udWxsKXRocm93Ik93bmVyIGdyYXBoIG1hbmFnZXIgaXMgaW52YWxpZCEiO2Zvcih2YXIgYXQ9c3QuZWRnZXMuc2xpY2UoKSxidCxtdD1hdC5sZW5ndGgseXQ9MDt5dDxtdDt5dCsrKWJ0PWF0W3l0XSxidC5pc0ludGVyR3JhcGg/dGhpcy5ncmFwaE1hbmFnZXIucmVtb3ZlKGJ0KTpidC5zb3VyY2Uub3duZXIucmVtb3ZlKGJ0KTt2YXIgZnQ9dGhpcy5ub2Rlcy5pbmRleE9mKHN0KTtpZihmdD09LTEpdGhyb3ciTm9kZSBub3QgaW4gb3duZXIgbm9kZSBsaXN0ISI7dGhpcy5ub2Rlcy5zcGxpY2UoZnQsMSl9ZWxzZSBpZihldCBpbnN0YW5jZW9mIEkpe3ZhciBidD1ldDtpZihidD09bnVsbCl0aHJvdyJFZGdlIGlzIG51bGwhIjtpZighKGJ0LnNvdXJjZSE9bnVsbCYmYnQudGFyZ2V0IT1udWxsKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsISI7aWYoIShidC5zb3VyY2Uub3duZXIhPW51bGwmJmJ0LnRhcmdldC5vd25lciE9bnVsbCYmYnQuc291cmNlLm93bmVyPT10aGlzJiZidC50YXJnZXQub3duZXI9PXRoaXMpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IG93bmVyIGlzIGludmFsaWQhIjt2YXIgdXQ9YnQuc291cmNlLmVkZ2VzLmluZGV4T2YoYnQpLHZ0PWJ0LnRhcmdldC5lZGdlcy5pbmRleE9mKGJ0KTtpZighKHV0Pi0xJiZ2dD4tMSkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgZG9lc24ndCBrbm93IHRoaXMgZWRnZSEiO2J0LnNvdXJjZS5lZGdlcy5zcGxpY2UodXQsMSksYnQudGFyZ2V0IT1idC5zb3VyY2UmJmJ0LnRhcmdldC5lZGdlcy5zcGxpY2UodnQsMSk7dmFyIGZ0PWJ0LnNvdXJjZS5vd25lci5nZXRFZGdlcygpLmluZGV4T2YoYnQpO2lmKGZ0PT0tMSl0aHJvdyJOb3QgaW4gb3duZXIncyBlZGdlIGxpc3QhIjtidC5zb3VyY2Uub3duZXIuZ2V0RWRnZXMoKS5zcGxpY2UoZnQsMSl9fSx6LnByb3RvdHlwZS51cGRhdGVMZWZ0VG9wPWZ1bmN0aW9uKCl7Zm9yKHZhciBldD1iLk1BWF9WQUxVRSxzdD1iLk1BWF9WQUxVRSxhdCxidCxtdCx5dD10aGlzLmdldE5vZGVzKCksZnQ9eXQubGVuZ3RoLHV0PTA7dXQ8ZnQ7dXQrKyl7dmFyIHZ0PXl0W3V0XTthdD12dC5nZXRUb3AoKSxidD12dC5nZXRMZWZ0KCksZXQ+YXQmJihldD1hdCksc3Q+YnQmJihzdD1idCl9cmV0dXJuIGV0PT1iLk1BWF9WQUxVRT9udWxsOih5dFswXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdCE9bnVsbD9tdD15dFswXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdDptdD10aGlzLm1hcmdpbix0aGlzLmxlZnQ9c3QtbXQsdGhpcy50b3A9ZXQtbXQsbmV3IE4odGhpcy5sZWZ0LHRoaXMudG9wKSl9LHoucHJvdG90eXBlLnVwZGF0ZUJvdW5kcz1mdW5jdGlvbihldCl7Zm9yKHZhciBzdD1iLk1BWF9WQUxVRSxhdD0tYi5NQVhfVkFMVUUsYnQ9Yi5NQVhfVkFMVUUsbXQ9LWIuTUFYX1ZBTFVFLHl0LGZ0LHV0LHZ0LFgscHQ9dGhpcy5ub2RlcyxVPXB0Lmxlbmd0aCxUdD0wO1R0PFU7VHQrKyl7dmFyIG50PXB0W1R0XTtldCYmbnQuY2hpbGQhPW51bGwmJm50LnVwZGF0ZUJvdW5kcygpLHl0PW50LmdldExlZnQoKSxmdD1udC5nZXRSaWdodCgpLHV0PW50LmdldFRvcCgpLHZ0PW50LmdldEJvdHRvbSgpLHN0Pnl0JiYoc3Q9eXQpLGF0PGZ0JiYoYXQ9ZnQpLGJ0PnV0JiYoYnQ9dXQpLG10PHZ0JiYobXQ9dnQpfXZhciBJdD1uZXcgQihzdCxidCxhdC1zdCxtdC1idCk7c3Q9PWIuTUFYX1ZBTFVFJiYodGhpcy5sZWZ0PXRoaXMucGFyZW50LmdldExlZnQoKSx0aGlzLnJpZ2h0PXRoaXMucGFyZW50LmdldFJpZ2h0KCksdGhpcy50b3A9dGhpcy5wYXJlbnQuZ2V0VG9wKCksdGhpcy5ib3R0b209dGhpcy5wYXJlbnQuZ2V0Qm90dG9tKCkpLHB0WzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0IT1udWxsP1g9cHRbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQ6WD10aGlzLm1hcmdpbix0aGlzLmxlZnQ9SXQueC1YLHRoaXMucmlnaHQ9SXQueCtJdC53aWR0aCtYLHRoaXMudG9wPUl0LnktWCx0aGlzLmJvdHRvbT1JdC55K0l0LmhlaWdodCtYfSx6LmNhbGN1bGF0ZUJvdW5kcz1mdW5jdGlvbihldCl7Zm9yKHZhciBzdD1iLk1BWF9WQUxVRSxhdD0tYi5NQVhfVkFMVUUsYnQ9Yi5NQVhfVkFMVUUsbXQ9LWIuTUFYX1ZBTFVFLHl0LGZ0LHV0LHZ0LFg9ZXQubGVuZ3RoLHB0PTA7cHQ8WDtwdCsrKXt2YXIgVT1ldFtwdF07eXQ9VS5nZXRMZWZ0KCksZnQ9VS5nZXRSaWdodCgpLHV0PVUuZ2V0VG9wKCksdnQ9VS5nZXRCb3R0b20oKSxzdD55dCYmKHN0PXl0KSxhdDxmdCYmKGF0PWZ0KSxidD51dCYmKGJ0PXV0KSxtdDx2dCYmKG10PXZ0KX12YXIgVHQ9bmV3IEIoc3QsYnQsYXQtc3QsbXQtYnQpO3JldHVybiBUdH0sei5wcm90b3R5cGUuZ2V0SW5jbHVzaW9uVHJlZURlcHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKT8xOnRoaXMucGFyZW50LmdldEluY2x1c2lvblRyZWVEZXB0aCgpfSx6LnByb3RvdHlwZS5nZXRFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7aWYodGhpcy5lc3RpbWF0ZWRTaXplPT1iLk1JTl9WQUxVRSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtyZXR1cm4gdGhpcy5lc3RpbWF0ZWRTaXplfSx6LnByb3RvdHlwZS5jYWxjRXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe2Zvcih2YXIgZXQ9MCxzdD10aGlzLm5vZGVzLGF0PXN0Lmxlbmd0aCxidD0wO2J0PGF0O2J0Kyspe3ZhciBtdD1zdFtidF07ZXQrPW10LmNhbGNFc3RpbWF0ZWRTaXplKCl9cmV0dXJuIGV0PT0wP3RoaXMuZXN0aW1hdGVkU2l6ZT1FLkVNUFRZX0NPTVBPVU5EX05PREVfU0laRTp0aGlzLmVzdGltYXRlZFNpemU9ZXQvTWF0aC5zcXJ0KHRoaXMubm9kZXMubGVuZ3RoKSx0aGlzLmVzdGltYXRlZFNpemV9LHoucHJvdG90eXBlLnVwZGF0ZUNvbm5lY3RlZD1mdW5jdGlvbigpe3ZhciBldD10aGlzO2lmKHRoaXMubm9kZXMubGVuZ3RoPT0wKXt0aGlzLmlzQ29ubmVjdGVkPSEwO3JldHVybn12YXIgc3Q9bmV3IFIsYXQ9bmV3IFNldCxidD10aGlzLm5vZGVzWzBdLG10LHl0LGZ0PWJ0LndpdGhDaGlsZHJlbigpO2ZvcihmdC5mb3JFYWNoKGZ1bmN0aW9uKFR0KXtzdC5wdXNoKFR0KSxhdC5hZGQoVHQpfSk7c3QubGVuZ3RoIT09MDspe2J0PXN0LnNoaWZ0KCksbXQ9YnQuZ2V0RWRnZXMoKTtmb3IodmFyIHV0PW10Lmxlbmd0aCx2dD0wO3Z0PHV0O3Z0Kyspe3ZhciBYPW10W3Z0XTtpZih5dD1YLmdldE90aGVyRW5kSW5HcmFwaChidCx0aGlzKSx5dCE9bnVsbCYmIWF0Lmhhcyh5dCkpe3ZhciBwdD15dC53aXRoQ2hpbGRyZW4oKTtwdC5mb3JFYWNoKGZ1bmN0aW9uKFR0KXtzdC5wdXNoKFR0KSxhdC5hZGQoVHQpfSl9fX1pZih0aGlzLmlzQ29ubmVjdGVkPSExLGF0LnNpemU+PXRoaXMubm9kZXMubGVuZ3RoKXt2YXIgVT0wO2F0LmZvckVhY2goZnVuY3Rpb24oVHQpe1R0Lm93bmVyPT1ldCYmVSsrfSksVT09dGhpcy5ub2Rlcy5sZW5ndGgmJih0aGlzLmlzQ29ubmVjdGVkPSEwKX19LGYuZXhwb3J0cz16fSxmdW5jdGlvbihmLHAsdyl7dmFyIG0sYj13KDEpO2Z1bmN0aW9uIEUoXyl7bT13KDUpLHRoaXMubGF5b3V0PV8sdGhpcy5ncmFwaHM9W10sdGhpcy5lZGdlcz1bXX1FLnByb3RvdHlwZS5hZGRSb290PWZ1bmN0aW9uKCl7dmFyIF89dGhpcy5sYXlvdXQubmV3R3JhcGgoKSxBPXRoaXMubGF5b3V0Lm5ld05vZGUobnVsbCksST10aGlzLmFkZChfLEEpO3JldHVybiB0aGlzLnNldFJvb3RHcmFwaChJKSx0aGlzLnJvb3RHcmFwaH0sRS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKF8sQSxJLEIsTil7aWYoST09bnVsbCYmQj09bnVsbCYmTj09bnVsbCl7aWYoXz09bnVsbCl0aHJvdyJHcmFwaCBpcyBudWxsISI7aWYoQT09bnVsbCl0aHJvdyJQYXJlbnQgbm9kZSBpcyBudWxsISI7aWYodGhpcy5ncmFwaHMuaW5kZXhPZihfKT4tMSl0aHJvdyJHcmFwaCBhbHJlYWR5IGluIHRoaXMgZ3JhcGggbWdyISI7aWYodGhpcy5ncmFwaHMucHVzaChfKSxfLnBhcmVudCE9bnVsbCl0aHJvdyJBbHJlYWR5IGhhcyBhIHBhcmVudCEiO2lmKEEuY2hpbGQhPW51bGwpdGhyb3ciQWxyZWFkeSBoYXMgYSBjaGlsZCEiO3JldHVybiBfLnBhcmVudD1BLEEuY2hpbGQ9XyxffWVsc2V7Tj1JLEI9QSxJPV87dmFyIFI9Qi5nZXRPd25lcigpLHo9Ti5nZXRPd25lcigpO2lmKCEoUiE9bnVsbCYmUi5nZXRHcmFwaE1hbmFnZXIoKT09dGhpcykpdGhyb3ciU291cmNlIG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKCEoeiE9bnVsbCYmei5nZXRHcmFwaE1hbmFnZXIoKT09dGhpcykpdGhyb3ciVGFyZ2V0IG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKFI9PXopcmV0dXJuIEkuaXNJbnRlckdyYXBoPSExLFIuYWRkKEksQixOKTtpZihJLmlzSW50ZXJHcmFwaD0hMCxJLnNvdXJjZT1CLEkudGFyZ2V0PU4sdGhpcy5lZGdlcy5pbmRleE9mKEkpPi0xKXRocm93IkVkZ2UgYWxyZWFkeSBpbiBpbnRlci1ncmFwaCBlZGdlIGxpc3QhIjtpZih0aGlzLmVkZ2VzLnB1c2goSSksIShJLnNvdXJjZSE9bnVsbCYmSS50YXJnZXQhPW51bGwpKXRocm93IkVkZ2Ugc291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEoSS5zb3VyY2UuZWRnZXMuaW5kZXhPZihJKT09LTEmJkkudGFyZ2V0LmVkZ2VzLmluZGV4T2YoSSk9PS0xKSl0aHJvdyJFZGdlIGFscmVhZHkgaW4gc291cmNlIGFuZC9vciB0YXJnZXQgaW5jaWRlbmN5IGxpc3QhIjtyZXR1cm4gSS5zb3VyY2UuZWRnZXMucHVzaChJKSxJLnRhcmdldC5lZGdlcy5wdXNoKEkpLEl9fSxFLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oXyl7aWYoXyBpbnN0YW5jZW9mIG0pe3ZhciBBPV87aWYoQS5nZXRHcmFwaE1hbmFnZXIoKSE9dGhpcyl0aHJvdyJHcmFwaCBub3QgaW4gdGhpcyBncmFwaCBtZ3IiO2lmKCEoQT09dGhpcy5yb290R3JhcGh8fEEucGFyZW50IT1udWxsJiZBLnBhcmVudC5ncmFwaE1hbmFnZXI9PXRoaXMpKXRocm93IkludmFsaWQgcGFyZW50IG5vZGUhIjt2YXIgST1bXTtJPUkuY29uY2F0KEEuZ2V0RWRnZXMoKSk7Zm9yKHZhciBCLE49SS5sZW5ndGgsUj0wO1I8TjtSKyspQj1JW1JdLEEucmVtb3ZlKEIpO3ZhciB6PVtdO3o9ei5jb25jYXQoQS5nZXROb2RlcygpKTt2YXIgVztOPXoubGVuZ3RoO2Zvcih2YXIgUj0wO1I8TjtSKyspVz16W1JdLEEucmVtb3ZlKFcpO0E9PXRoaXMucm9vdEdyYXBoJiZ0aGlzLnNldFJvb3RHcmFwaChudWxsKTt2YXIgZXQ9dGhpcy5ncmFwaHMuaW5kZXhPZihBKTt0aGlzLmdyYXBocy5zcGxpY2UoZXQsMSksQS5wYXJlbnQ9bnVsbH1lbHNlIGlmKF8gaW5zdGFuY2VvZiBiKXtpZihCPV8sQj09bnVsbCl0aHJvdyJFZGdlIGlzIG51bGwhIjtpZighQi5pc0ludGVyR3JhcGgpdGhyb3ciTm90IGFuIGludGVyLWdyYXBoIGVkZ2UhIjtpZighKEIuc291cmNlIT1udWxsJiZCLnRhcmdldCE9bnVsbCkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEoQi5zb3VyY2UuZWRnZXMuaW5kZXhPZihCKSE9LTEmJkIudGFyZ2V0LmVkZ2VzLmluZGV4T2YoQikhPS0xKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBkb2Vzbid0IGtub3cgdGhpcyBlZGdlISI7dmFyIGV0PUIuc291cmNlLmVkZ2VzLmluZGV4T2YoQik7aWYoQi5zb3VyY2UuZWRnZXMuc3BsaWNlKGV0LDEpLGV0PUIudGFyZ2V0LmVkZ2VzLmluZGV4T2YoQiksQi50YXJnZXQuZWRnZXMuc3BsaWNlKGV0LDEpLCEoQi5zb3VyY2Uub3duZXIhPW51bGwmJkIuc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpIT1udWxsKSl0aHJvdyJFZGdlIG93bmVyIGdyYXBoIG9yIG93bmVyIGdyYXBoIG1hbmFnZXIgaXMgbnVsbCEiO2lmKEIuc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLmluZGV4T2YoQik9PS0xKXRocm93Ik5vdCBpbiBvd25lciBncmFwaCBtYW5hZ2VyJ3MgZWRnZSBsaXN0ISI7dmFyIGV0PUIuc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLmluZGV4T2YoQik7Qi5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuc3BsaWNlKGV0LDEpfX0sRS5wcm90b3R5cGUudXBkYXRlQm91bmRzPWZ1bmN0aW9uKCl7dGhpcy5yb290R3JhcGgudXBkYXRlQm91bmRzKCEwKX0sRS5wcm90b3R5cGUuZ2V0R3JhcGhzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhzfSxFLnByb3RvdHlwZS5nZXRBbGxOb2Rlcz1mdW5jdGlvbigpe2lmKHRoaXMuYWxsTm9kZXM9PW51bGwpe2Zvcih2YXIgXz1bXSxBPXRoaXMuZ2V0R3JhcGhzKCksST1BLmxlbmd0aCxCPTA7QjxJO0IrKylfPV8uY29uY2F0KEFbQl0uZ2V0Tm9kZXMoKSk7dGhpcy5hbGxOb2Rlcz1ffXJldHVybiB0aGlzLmFsbE5vZGVzfSxFLnByb3RvdHlwZS5yZXNldEFsbE5vZGVzPWZ1bmN0aW9uKCl7dGhpcy5hbGxOb2Rlcz1udWxsfSxFLnByb3RvdHlwZS5yZXNldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7dGhpcy5hbGxFZGdlcz1udWxsfSxFLnByb3RvdHlwZS5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1udWxsfSxFLnByb3RvdHlwZS5nZXRBbGxFZGdlcz1mdW5jdGlvbigpe2lmKHRoaXMuYWxsRWRnZXM9PW51bGwpe3ZhciBfPVtdLEE9dGhpcy5nZXRHcmFwaHMoKTtBLmxlbmd0aDtmb3IodmFyIEk9MDtJPEEubGVuZ3RoO0krKylfPV8uY29uY2F0KEFbSV0uZ2V0RWRnZXMoKSk7Xz1fLmNvbmNhdCh0aGlzLmVkZ2VzKSx0aGlzLmFsbEVkZ2VzPV99cmV0dXJuIHRoaXMuYWxsRWRnZXN9LEUucHJvdG90eXBlLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb259LEUucHJvdG90eXBlLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKF8pe2lmKHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24hPW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7dGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1ffSxFLnByb3RvdHlwZS5nZXRSb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdEdyYXBofSxFLnByb3RvdHlwZS5zZXRSb290R3JhcGg9ZnVuY3Rpb24oXyl7aWYoXy5nZXRHcmFwaE1hbmFnZXIoKSE9dGhpcyl0aHJvdyJSb290IG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO3RoaXMucm9vdEdyYXBoPV8sXy5wYXJlbnQ9PW51bGwmJihfLnBhcmVudD10aGlzLmxheW91dC5uZXdOb2RlKCJSb290IG5vZGUiKSl9LEUucHJvdG90eXBlLmdldExheW91dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxheW91dH0sRS5wcm90b3R5cGUuaXNPbmVBbmNlc3Rvck9mT3RoZXI9ZnVuY3Rpb24oXyxBKXtpZighKF8hPW51bGwmJkEhPW51bGwpKXRocm93ImFzc2VydCBmYWlsZWQiO2lmKF89PUEpcmV0dXJuITA7dmFyIEk9Xy5nZXRPd25lcigpLEI7ZG97aWYoQj1JLmdldFBhcmVudCgpLEI9PW51bGwpYnJlYWs7aWYoQj09QSlyZXR1cm4hMDtpZihJPUIuZ2V0T3duZXIoKSxJPT1udWxsKWJyZWFrfXdoaWxlKCEwKTtJPUEuZ2V0T3duZXIoKTtkb3tpZihCPUkuZ2V0UGFyZW50KCksQj09bnVsbClicmVhaztpZihCPT1fKXJldHVybiEwO2lmKEk9Qi5nZXRPd25lcigpLEk9PW51bGwpYnJlYWt9d2hpbGUoITApO3JldHVybiExfSxFLnByb3RvdHlwZS5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciBfLEEsSSxCLE4sUj10aGlzLmdldEFsbEVkZ2VzKCksej1SLmxlbmd0aCxXPTA7Vzx6O1crKyl7aWYoXz1SW1ddLEE9Xy5zb3VyY2UsST1fLnRhcmdldCxfLmxjYT1udWxsLF8uc291cmNlSW5MY2E9QSxfLnRhcmdldEluTGNhPUksQT09SSl7Xy5sY2E9QS5nZXRPd25lcigpO2NvbnRpbnVlfWZvcihCPUEuZ2V0T3duZXIoKTtfLmxjYT09bnVsbDspe2ZvcihfLnRhcmdldEluTGNhPUksTj1JLmdldE93bmVyKCk7Xy5sY2E9PW51bGw7KXtpZihOPT1CKXtfLmxjYT1OO2JyZWFrfWlmKE49PXRoaXMucm9vdEdyYXBoKWJyZWFrO2lmKF8ubGNhIT1udWxsKXRocm93ImFzc2VydCBmYWlsZWQiO18udGFyZ2V0SW5MY2E9Ti5nZXRQYXJlbnQoKSxOPV8udGFyZ2V0SW5MY2EuZ2V0T3duZXIoKX1pZihCPT10aGlzLnJvb3RHcmFwaClicmVhaztfLmxjYT09bnVsbCYmKF8uc291cmNlSW5MY2E9Qi5nZXRQYXJlbnQoKSxCPV8uc291cmNlSW5MY2EuZ2V0T3duZXIoKSl9aWYoXy5sY2E9PW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCJ9fSxFLnByb3RvdHlwZS5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3I9ZnVuY3Rpb24oXyxBKXtpZihfPT1BKXJldHVybiBfLmdldE93bmVyKCk7dmFyIEk9Xy5nZXRPd25lcigpO2Rve2lmKEk9PW51bGwpYnJlYWs7dmFyIEI9QS5nZXRPd25lcigpO2Rve2lmKEI9PW51bGwpYnJlYWs7aWYoQj09SSlyZXR1cm4gQjtCPUIuZ2V0UGFyZW50KCkuZ2V0T3duZXIoKX13aGlsZSghMCk7ST1JLmdldFBhcmVudCgpLmdldE93bmVyKCl9d2hpbGUoITApO3JldHVybiBJfSxFLnByb3RvdHlwZS5jYWxjSW5jbHVzaW9uVHJlZURlcHRocz1mdW5jdGlvbihfLEEpe189PW51bGwmJkE9PW51bGwmJihfPXRoaXMucm9vdEdyYXBoLEE9MSk7Zm9yKHZhciBJLEI9Xy5nZXROb2RlcygpLE49Qi5sZW5ndGgsUj0wO1I8TjtSKyspST1CW1JdLEkuaW5jbHVzaW9uVHJlZURlcHRoPUEsSS5jaGlsZCE9bnVsbCYmdGhpcy5jYWxjSW5jbHVzaW9uVHJlZURlcHRocyhJLmNoaWxkLEErMSl9LEUucHJvdG90eXBlLmluY2x1ZGVzSW52YWxpZEVkZ2U9ZnVuY3Rpb24oKXtmb3IodmFyIF8sQT10aGlzLmVkZ2VzLmxlbmd0aCxJPTA7STxBO0krKylpZihfPXRoaXMuZWRnZXNbSV0sdGhpcy5pc09uZUFuY2VzdG9yT2ZPdGhlcihfLnNvdXJjZSxfLnRhcmdldCkpcmV0dXJuITA7cmV0dXJuITF9LGYuZXhwb3J0cz1FfSxmdW5jdGlvbihmLHAsdyl7dmFyIG09dygwKTtmdW5jdGlvbiBiKCl7fWZvcih2YXIgRSBpbiBtKWJbRV09bVtFXTtiLk1BWF9JVEVSQVRJT05TPTI1MDAsYi5ERUZBVUxUX0VER0VfTEVOR1RIPTUwLGIuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEg9LjQ1LGIuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEg9NDUwMCxiLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSD0uNCxiLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSD0xLGIuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj0zLjgsYi5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPTEuNSxiLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OPSEwLGIuREVGQVVMVF9VU0VfU01BUlRfUkVQVUxTSU9OX1JBTkdFX0NBTENVTEFUSU9OPSEwLGIuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTD0uMyxiLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1I9LjMzLGIuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUPTFlMyxiLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVD01ZTMsYi5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUw9MTAwLGIuTUFYX05PREVfRElTUExBQ0VNRU5UPWIuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMKjMsYi5NSU5fUkVQVUxTSU9OX0RJU1Q9Yi5ERUZBVUxUX0VER0VfTEVOR1RILzEwLGIuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EPTEwMCxiLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9LjEsYi5NSU5fRURHRV9MRU5HVEg9MSxiLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EPTEwLGYuZXhwb3J0cz1ifSxmdW5jdGlvbihmLHAsdyl7dmFyIG09dygxMik7ZnVuY3Rpb24gYigpe31iLmNhbGNTZXBhcmF0aW9uQW1vdW50PWZ1bmN0aW9uKEUsXyxBLEkpe2lmKCFFLmludGVyc2VjdHMoXykpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7dmFyIEI9bmV3IEFycmF5KDIpO3RoaXMuZGVjaWRlRGlyZWN0aW9uc0Zvck92ZXJsYXBwaW5nTm9kZXMoRSxfLEIpLEFbMF09TWF0aC5taW4oRS5nZXRSaWdodCgpLF8uZ2V0UmlnaHQoKSktTWF0aC5tYXgoRS54LF8ueCksQVsxXT1NYXRoLm1pbihFLmdldEJvdHRvbSgpLF8uZ2V0Qm90dG9tKCkpLU1hdGgubWF4KEUueSxfLnkpLEUuZ2V0WCgpPD1fLmdldFgoKSYmRS5nZXRSaWdodCgpPj1fLmdldFJpZ2h0KCk/QVswXSs9TWF0aC5taW4oXy5nZXRYKCktRS5nZXRYKCksRS5nZXRSaWdodCgpLV8uZ2V0UmlnaHQoKSk6Xy5nZXRYKCk8PUUuZ2V0WCgpJiZfLmdldFJpZ2h0KCk+PUUuZ2V0UmlnaHQoKSYmKEFbMF0rPU1hdGgubWluKEUuZ2V0WCgpLV8uZ2V0WCgpLF8uZ2V0UmlnaHQoKS1FLmdldFJpZ2h0KCkpKSxFLmdldFkoKTw9Xy5nZXRZKCkmJkUuZ2V0Qm90dG9tKCk+PV8uZ2V0Qm90dG9tKCk/QVsxXSs9TWF0aC5taW4oXy5nZXRZKCktRS5nZXRZKCksRS5nZXRCb3R0b20oKS1fLmdldEJvdHRvbSgpKTpfLmdldFkoKTw9RS5nZXRZKCkmJl8uZ2V0Qm90dG9tKCk+PUUuZ2V0Qm90dG9tKCkmJihBWzFdKz1NYXRoLm1pbihFLmdldFkoKS1fLmdldFkoKSxfLmdldEJvdHRvbSgpLUUuZ2V0Qm90dG9tKCkpKTt2YXIgTj1NYXRoLmFicygoXy5nZXRDZW50ZXJZKCktRS5nZXRDZW50ZXJZKCkpLyhfLmdldENlbnRlclgoKS1FLmdldENlbnRlclgoKSkpO18uZ2V0Q2VudGVyWSgpPT09RS5nZXRDZW50ZXJZKCkmJl8uZ2V0Q2VudGVyWCgpPT09RS5nZXRDZW50ZXJYKCkmJihOPTEpO3ZhciBSPU4qQVswXSx6PUFbMV0vTjtBWzBdPHo/ej1BWzBdOlI9QVsxXSxBWzBdPS0xKkJbMF0qKHovMitJKSxBWzFdPS0xKkJbMV0qKFIvMitJKX0sYi5kZWNpZGVEaXJlY3Rpb25zRm9yT3ZlcmxhcHBpbmdOb2Rlcz1mdW5jdGlvbihFLF8sQSl7RS5nZXRDZW50ZXJYKCk8Xy5nZXRDZW50ZXJYKCk/QVswXT0tMTpBWzBdPTEsRS5nZXRDZW50ZXJZKCk8Xy5nZXRDZW50ZXJZKCk/QVsxXT0tMTpBWzFdPTF9LGIuZ2V0SW50ZXJzZWN0aW9uMj1mdW5jdGlvbihFLF8sQSl7dmFyIEk9RS5nZXRDZW50ZXJYKCksQj1FLmdldENlbnRlclkoKSxOPV8uZ2V0Q2VudGVyWCgpLFI9Xy5nZXRDZW50ZXJZKCk7aWYoRS5pbnRlcnNlY3RzKF8pKXJldHVybiBBWzBdPUksQVsxXT1CLEFbMl09TixBWzNdPVIsITA7dmFyIHo9RS5nZXRYKCksVz1FLmdldFkoKSxldD1FLmdldFJpZ2h0KCksc3Q9RS5nZXRYKCksYXQ9RS5nZXRCb3R0b20oKSxidD1FLmdldFJpZ2h0KCksbXQ9RS5nZXRXaWR0aEhhbGYoKSx5dD1FLmdldEhlaWdodEhhbGYoKSxmdD1fLmdldFgoKSx1dD1fLmdldFkoKSx2dD1fLmdldFJpZ2h0KCksWD1fLmdldFgoKSxwdD1fLmdldEJvdHRvbSgpLFU9Xy5nZXRSaWdodCgpLFR0PV8uZ2V0V2lkdGhIYWxmKCksbnQ9Xy5nZXRIZWlnaHRIYWxmKCksSXQ9ITEsT3Q9ITE7aWYoST09PU4pe2lmKEI+UilyZXR1cm4gQVswXT1JLEFbMV09VyxBWzJdPU4sQVszXT1wdCwhMTtpZihCPFIpcmV0dXJuIEFbMF09SSxBWzFdPWF0LEFbMl09TixBWzNdPXV0LCExfWVsc2UgaWYoQj09PVIpe2lmKEk+TilyZXR1cm4gQVswXT16LEFbMV09QixBWzJdPXZ0LEFbM109UiwhMTtpZihJPE4pcmV0dXJuIEFbMF09ZXQsQVsxXT1CLEFbMl09ZnQsQVszXT1SLCExfWVsc2V7dmFyIEJ0PUUuaGVpZ2h0L0Uud2lkdGgsRXQ9Xy5oZWlnaHQvXy53aWR0aCxaPShSLUIpLyhOLUkpLEN0PXZvaWQgMCx4dD12b2lkIDAsSHQ9dm9pZCAwLExlPXZvaWQgMCxGdD12b2lkIDAsZ249dm9pZCAwO2lmKC1CdD09PVo/ST5OPyhBWzBdPXN0LEFbMV09YXQsSXQ9ITApOihBWzBdPWV0LEFbMV09VyxJdD0hMCk6QnQ9PT1aJiYoST5OPyhBWzBdPXosQVsxXT1XLEl0PSEwKTooQVswXT1idCxBWzFdPWF0LEl0PSEwKSksLUV0PT09Wj9OPkk/KEFbMl09WCxBWzNdPXB0LE90PSEwKTooQVsyXT12dCxBWzNdPXV0LE90PSEwKTpFdD09PVomJihOPkk/KEFbMl09ZnQsQVszXT11dCxPdD0hMCk6KEFbMl09VSxBWzNdPXB0LE90PSEwKSksSXQmJk90KXJldHVybiExO2lmKEk+Tj9CPlI/KEN0PXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oQnQsWiw0KSx4dD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKEV0LFosMikpOihDdD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1CdCxaLDMpLHh0PXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLUV0LFosMSkpOkI+Uj8oQ3Q9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtQnQsWiwxKSx4dD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1FdCxaLDMpKTooQ3Q9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihCdCxaLDIpLHh0PXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oRXQsWiw0KSksIUl0KXN3aXRjaChDdCl7Y2FzZSAxOkxlPVcsSHQ9SSsteXQvWixBWzBdPUh0LEFbMV09TGU7YnJlYWs7Y2FzZSAyOkh0PWJ0LExlPUIrbXQqWixBWzBdPUh0LEFbMV09TGU7YnJlYWs7Y2FzZSAzOkxlPWF0LEh0PUkreXQvWixBWzBdPUh0LEFbMV09TGU7YnJlYWs7Y2FzZSA0Okh0PXN0LExlPUIrLW10KlosQVswXT1IdCxBWzFdPUxlO2JyZWFrfWlmKCFPdClzd2l0Y2goeHQpe2Nhc2UgMTpnbj11dCxGdD1OKy1udC9aLEFbMl09RnQsQVszXT1nbjticmVhaztjYXNlIDI6RnQ9VSxnbj1SK1R0KlosQVsyXT1GdCxBWzNdPWduO2JyZWFrO2Nhc2UgMzpnbj1wdCxGdD1OK250L1osQVsyXT1GdCxBWzNdPWduO2JyZWFrO2Nhc2UgNDpGdD1YLGduPVIrLVR0KlosQVsyXT1GdCxBWzNdPWduO2JyZWFrfX1yZXR1cm4hMX0sYi5nZXRDYXJkaW5hbERpcmVjdGlvbj1mdW5jdGlvbihFLF8sQSl7cmV0dXJuIEU+Xz9BOjErQSU0fSxiLmdldEludGVyc2VjdGlvbj1mdW5jdGlvbihFLF8sQSxJKXtpZihJPT1udWxsKXJldHVybiB0aGlzLmdldEludGVyc2VjdGlvbjIoRSxfLEEpO3ZhciBCPUUueCxOPUUueSxSPV8ueCx6PV8ueSxXPUEueCxldD1BLnksc3Q9SS54LGF0PUkueSxidD12b2lkIDAsbXQ9dm9pZCAwLHl0PXZvaWQgMCxmdD12b2lkIDAsdXQ9dm9pZCAwLHZ0PXZvaWQgMCxYPXZvaWQgMCxwdD12b2lkIDAsVT12b2lkIDA7cmV0dXJuIHl0PXotTix1dD1CLVIsWD1SKk4tQip6LGZ0PWF0LWV0LHZ0PVctc3QscHQ9c3QqZXQtVyphdCxVPXl0KnZ0LWZ0KnV0LFU9PT0wP251bGw6KGJ0PSh1dCpwdC12dCpYKS9VLG10PShmdCpYLXl0KnB0KS9VLG5ldyBtKGJ0LG10KSl9LGIuYW5nbGVPZlZlY3Rvcj1mdW5jdGlvbihFLF8sQSxJKXt2YXIgQj12b2lkIDA7cmV0dXJuIEUhPT1BPyhCPU1hdGguYXRhbigoSS1fKS8oQS1FKSksQTxFP0IrPU1hdGguUEk6STxfJiYoQis9dGhpcy5UV09fUEkpKTpJPF8/Qj10aGlzLk9ORV9BTkRfSEFMRl9QSTpCPXRoaXMuSEFMRl9QSSxCfSxiLmRvSW50ZXJzZWN0PWZ1bmN0aW9uKEUsXyxBLEkpe3ZhciBCPUUueCxOPUUueSxSPV8ueCx6PV8ueSxXPUEueCxldD1BLnksc3Q9SS54LGF0PUkueSxidD0oUi1CKSooYXQtZXQpLShzdC1XKSooei1OKTtpZihidD09PTApcmV0dXJuITE7dmFyIG10PSgoYXQtZXQpKihzdC1CKSsoVy1zdCkqKGF0LU4pKS9idCx5dD0oKE4teikqKHN0LUIpKyhSLUIpKihhdC1OKSkvYnQ7cmV0dXJuIDA8bXQmJm10PDEmJjA8eXQmJnl0PDF9LGIuSEFMRl9QST0uNSpNYXRoLlBJLGIuT05FX0FORF9IQUxGX1BJPTEuNSpNYXRoLlBJLGIuVFdPX1BJPTIqTWF0aC5QSSxiLlRIUkVFX1BJPTMqTWF0aC5QSSxmLmV4cG9ydHM9Yn0sZnVuY3Rpb24oZixwLHcpe2Z1bmN0aW9uIG0oKXt9bS5zaWduPWZ1bmN0aW9uKGIpe3JldHVybiBiPjA/MTpiPDA/LTE6MH0sbS5mbG9vcj1mdW5jdGlvbihiKXtyZXR1cm4gYjwwP01hdGguY2VpbChiKTpNYXRoLmZsb29yKGIpfSxtLmNlaWw9ZnVuY3Rpb24oYil7cmV0dXJuIGI8MD9NYXRoLmZsb29yKGIpOk1hdGguY2VpbChiKX0sZi5leHBvcnRzPW19LGZ1bmN0aW9uKGYscCx3KXtmdW5jdGlvbiBtKCl7fW0uTUFYX1ZBTFVFPTIxNDc0ODM2NDcsbS5NSU5fVkFMVUU9LTIxNDc0ODM2NDgsZi5leHBvcnRzPW19LGZ1bmN0aW9uKGYscCx3KXt2YXIgbT1mdW5jdGlvbigpe2Z1bmN0aW9uIEIoTixSKXtmb3IodmFyIHo9MDt6PFIubGVuZ3RoO3orKyl7dmFyIFc9Ult6XTtXLmVudW1lcmFibGU9Vy5lbnVtZXJhYmxlfHwhMSxXLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gVyYmKFcud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOLFcua2V5LFcpfX1yZXR1cm4gZnVuY3Rpb24oTixSLHope3JldHVybiBSJiZCKE4ucHJvdG90eXBlLFIpLHomJkIoTix6KSxOfX0oKTtmdW5jdGlvbiBiKEIsTil7aWYoIShCIGluc3RhbmNlb2YgTikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9dmFyIEU9ZnVuY3Rpb24oTil7cmV0dXJue3ZhbHVlOk4sbmV4dDpudWxsLHByZXY6bnVsbH19LF89ZnVuY3Rpb24oTixSLHosVyl7cmV0dXJuIE4hPT1udWxsP04ubmV4dD1SOlcuaGVhZD1SLHohPT1udWxsP3oucHJldj1SOlcudGFpbD1SLFIucHJldj1OLFIubmV4dD16LFcubGVuZ3RoKyssUn0sQT1mdW5jdGlvbihOLFIpe3ZhciB6PU4ucHJldixXPU4ubmV4dDtyZXR1cm4geiE9PW51bGw/ei5uZXh0PVc6Ui5oZWFkPVcsVyE9PW51bGw/Vy5wcmV2PXo6Ui50YWlsPXosTi5wcmV2PU4ubmV4dD1udWxsLFIubGVuZ3RoLS0sTn0sST1mdW5jdGlvbigpe2Z1bmN0aW9uIEIoTil7dmFyIFI9dGhpcztiKHRoaXMsQiksdGhpcy5sZW5ndGg9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCxOIT1udWxsJiZOLmZvckVhY2goZnVuY3Rpb24oeil7cmV0dXJuIFIucHVzaCh6KX0pfXJldHVybiBtKEIsW3trZXk6InNpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofX0se2tleToiaW5zZXJ0QmVmb3JlIix2YWx1ZTpmdW5jdGlvbihSLHope3JldHVybiBfKHoucHJldixFKFIpLHosdGhpcyl9fSx7a2V5OiJpbnNlcnRBZnRlciIsdmFsdWU6ZnVuY3Rpb24oUix6KXtyZXR1cm4gXyh6LEUoUiksei5uZXh0LHRoaXMpfX0se2tleToiaW5zZXJ0Tm9kZUJlZm9yZSIsdmFsdWU6ZnVuY3Rpb24oUix6KXtyZXR1cm4gXyh6LnByZXYsUix6LHRoaXMpfX0se2tleToiaW5zZXJ0Tm9kZUFmdGVyIix2YWx1ZTpmdW5jdGlvbihSLHope3JldHVybiBfKHosUix6Lm5leHQsdGhpcyl9fSx7a2V5OiJwdXNoIix2YWx1ZTpmdW5jdGlvbihSKXtyZXR1cm4gXyh0aGlzLnRhaWwsRShSKSxudWxsLHRoaXMpfX0se2tleToidW5zaGlmdCIsdmFsdWU6ZnVuY3Rpb24oUil7cmV0dXJuIF8obnVsbCxFKFIpLHRoaXMuaGVhZCx0aGlzKX19LHtrZXk6InJlbW92ZSIsdmFsdWU6ZnVuY3Rpb24oUil7cmV0dXJuIEEoUix0aGlzKX19LHtrZXk6InBvcCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gQSh0aGlzLnRhaWwsdGhpcykudmFsdWV9fSx7a2V5OiJwb3BOb2RlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBBKHRoaXMudGFpbCx0aGlzKX19LHtrZXk6InNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBBKHRoaXMuaGVhZCx0aGlzKS52YWx1ZX19LHtrZXk6InNoaWZ0Tm9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gQSh0aGlzLmhlYWQsdGhpcyl9fSx7a2V5OiJnZXRfb2JqZWN0X2F0Iix2YWx1ZTpmdW5jdGlvbihSKXtpZihSPD10aGlzLmxlbmd0aCgpKXtmb3IodmFyIHo9MSxXPXRoaXMuaGVhZDt6PFI7KVc9Vy5uZXh0LHorKztyZXR1cm4gVy52YWx1ZX19fSx7a2V5OiJzZXRfb2JqZWN0X2F0Iix2YWx1ZTpmdW5jdGlvbihSLHope2lmKFI8PXRoaXMubGVuZ3RoKCkpe2Zvcih2YXIgVz0xLGV0PXRoaXMuaGVhZDtXPFI7KWV0PWV0Lm5leHQsVysrO2V0LnZhbHVlPXp9fX1dKSxCfSgpO2YuZXhwb3J0cz1JfSxmdW5jdGlvbihmLHAsdyl7ZnVuY3Rpb24gbShiLEUsXyl7dGhpcy54PW51bGwsdGhpcy55PW51bGwsYj09bnVsbCYmRT09bnVsbCYmXz09bnVsbD8odGhpcy54PTAsdGhpcy55PTApOnR5cGVvZiBiPT0ibnVtYmVyIiYmdHlwZW9mIEU9PSJudW1iZXIiJiZfPT1udWxsPyh0aGlzLng9Yix0aGlzLnk9RSk6Yi5jb25zdHJ1Y3Rvci5uYW1lPT0iUG9pbnQiJiZFPT1udWxsJiZfPT1udWxsJiYoXz1iLHRoaXMueD1fLngsdGhpcy55PV8ueSl9bS5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LG0ucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSxtLnByb3RvdHlwZS5nZXRMb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybiBuZXcgbSh0aGlzLngsdGhpcy55KX0sbS5wcm90b3R5cGUuc2V0TG9jYXRpb249ZnVuY3Rpb24oYixFLF8pe2IuY29uc3RydWN0b3IubmFtZT09IlBvaW50IiYmRT09bnVsbCYmXz09bnVsbD8oXz1iLHRoaXMuc2V0TG9jYXRpb24oXy54LF8ueSkpOnR5cGVvZiBiPT0ibnVtYmVyIiYmdHlwZW9mIEU9PSJudW1iZXIiJiZfPT1udWxsJiYocGFyc2VJbnQoYik9PWImJnBhcnNlSW50KEUpPT1FP3RoaXMubW92ZShiLEUpOih0aGlzLng9TWF0aC5mbG9vcihiKy41KSx0aGlzLnk9TWF0aC5mbG9vcihFKy41KSkpfSxtLnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKGIsRSl7dGhpcy54PWIsdGhpcy55PUV9LG0ucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihiLEUpe3RoaXMueCs9Yix0aGlzLnkrPUV9LG0ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihiKXtpZihiLmNvbnN0cnVjdG9yLm5hbWU9PSJQb2ludCIpe3ZhciBFPWI7cmV0dXJuIHRoaXMueD09RS54JiZ0aGlzLnk9PUUueX1yZXR1cm4gdGhpcz09Yn0sbS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG0oKS5jb25zdHJ1Y3Rvci5uYW1lKyJbeD0iK3RoaXMueCsiLHk9Iit0aGlzLnkrIl0ifSxmLmV4cG9ydHM9bX0sZnVuY3Rpb24oZixwLHcpe2Z1bmN0aW9uIG0oYixFLF8sQSl7dGhpcy54PTAsdGhpcy55PTAsdGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsYiE9bnVsbCYmRSE9bnVsbCYmXyE9bnVsbCYmQSE9bnVsbCYmKHRoaXMueD1iLHRoaXMueT1FLHRoaXMud2lkdGg9Xyx0aGlzLmhlaWdodD1BKX1tLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sbS5wcm90b3R5cGUuc2V0WD1mdW5jdGlvbihiKXt0aGlzLng9Yn0sbS5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnl9LG0ucHJvdG90eXBlLnNldFk9ZnVuY3Rpb24oYil7dGhpcy55PWJ9LG0ucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGh9LG0ucHJvdG90eXBlLnNldFdpZHRoPWZ1bmN0aW9uKGIpe3RoaXMud2lkdGg9Yn0sbS5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVpZ2h0fSxtLnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oYil7dGhpcy5oZWlnaHQ9Yn0sbS5wcm90b3R5cGUuZ2V0UmlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54K3RoaXMud2lkdGh9LG0ucHJvdG90eXBlLmdldEJvdHRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkrdGhpcy5oZWlnaHR9LG0ucHJvdG90eXBlLmludGVyc2VjdHM9ZnVuY3Rpb24oYil7cmV0dXJuISh0aGlzLmdldFJpZ2h0KCk8Yi54fHx0aGlzLmdldEJvdHRvbSgpPGIueXx8Yi5nZXRSaWdodCgpPHRoaXMueHx8Yi5nZXRCb3R0b20oKTx0aGlzLnkpfSxtLnByb3RvdHlwZS5nZXRDZW50ZXJYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueCt0aGlzLndpZHRoLzJ9LG0ucHJvdG90eXBlLmdldE1pblg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCl9LG0ucHJvdG90eXBlLmdldE1heFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCkrdGhpcy53aWR0aH0sbS5wcm90b3R5cGUuZ2V0Q2VudGVyWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkrdGhpcy5oZWlnaHQvMn0sbS5wcm90b3R5cGUuZ2V0TWluWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFkoKX0sbS5wcm90b3R5cGUuZ2V0TWF4WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFkoKSt0aGlzLmhlaWdodH0sbS5wcm90b3R5cGUuZ2V0V2lkdGhIYWxmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGgvMn0sbS5wcm90b3R5cGUuZ2V0SGVpZ2h0SGFsZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodC8yfSxmLmV4cG9ydHM9bX0sZnVuY3Rpb24oZixwLHcpe3ZhciBtPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnR5cGVvZiBTeW1ib2wuaXRlcmF0b3I9PSJzeW1ib2wiP2Z1bmN0aW9uKEUpe3JldHVybiB0eXBlb2YgRX06ZnVuY3Rpb24oRSl7cmV0dXJuIEUmJnR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJkUuY29uc3RydWN0b3I9PT1TeW1ib2wmJkUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBFfTtmdW5jdGlvbiBiKCl7fWIubGFzdElEPTAsYi5jcmVhdGVJRD1mdW5jdGlvbihFKXtyZXR1cm4gYi5pc1ByaW1pdGl2ZShFKT9FOihFLnVuaXF1ZUlEIT1udWxsfHwoRS51bmlxdWVJRD1iLmdldFN0cmluZygpLGIubGFzdElEKyspLEUudW5pcXVlSUQpfSxiLmdldFN0cmluZz1mdW5jdGlvbihFKXtyZXR1cm4gRT09bnVsbCYmKEU9Yi5sYXN0SUQpLCJPYmplY3QjIitFfSxiLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKEUpe3ZhciBfPXR5cGVvZiBFPiJ1Ij8idW5kZWZpbmVkIjptKEUpO3JldHVybiBFPT1udWxsfHxfIT0ib2JqZWN0IiYmXyE9ImZ1bmN0aW9uIn0sZi5leHBvcnRzPWJ9LGZ1bmN0aW9uKGYscCx3KXtmdW5jdGlvbiBtKFcpe2lmKEFycmF5LmlzQXJyYXkoVykpe2Zvcih2YXIgZXQ9MCxzdD1BcnJheShXLmxlbmd0aCk7ZXQ8Vy5sZW5ndGg7ZXQrKylzdFtldF09V1tldF07cmV0dXJuIHN0fWVsc2UgcmV0dXJuIEFycmF5LmZyb20oVyl9dmFyIGI9dygwKSxFPXcoNiksXz13KDMpLEE9dygxKSxJPXcoNSksQj13KDQpLE49dygxNyksUj13KDI3KTtmdW5jdGlvbiB6KFcpe1IuY2FsbCh0aGlzKSx0aGlzLmxheW91dFF1YWxpdHk9Yi5RVUFMSVRZLHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZD1iLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRCx0aGlzLmluY3JlbWVudGFsPWIuREVGQVVMVF9JTkNSRU1FTlRBTCx0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VULHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVCx0aGlzLmFuaW1hdGlvblBlcmlvZD1iLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRCx0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzPWIuREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUyx0aGlzLmVkZ2VUb0R1bW15Tm9kZXM9bmV3IE1hcCx0aGlzLmdyYXBoTWFuYWdlcj1uZXcgRSh0aGlzKSx0aGlzLmlzTGF5b3V0RmluaXNoZWQ9ITEsdGhpcy5pc1N1YkxheW91dD0hMSx0aGlzLmlzUmVtb3RlVXNlPSExLFchPW51bGwmJih0aGlzLmlzUmVtb3RlVXNlPVcpfXouUkFORE9NX1NFRUQ9MSx6LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFIucHJvdG90eXBlKSx6LnByb3RvdHlwZS5nZXRHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXJ9LHoucHJvdG90eXBlLmdldEFsbE5vZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCl9LHoucHJvdG90eXBlLmdldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCl9LHoucHJvdG90eXBlLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCl9LHoucHJvdG90eXBlLm5ld0dyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3ZhciBXPW5ldyBFKHRoaXMpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcj1XLFd9LHoucHJvdG90eXBlLm5ld0dyYXBoPWZ1bmN0aW9uKFcpe3JldHVybiBuZXcgSShudWxsLHRoaXMuZ3JhcGhNYW5hZ2VyLFcpfSx6LnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKFcpe3JldHVybiBuZXcgXyh0aGlzLmdyYXBoTWFuYWdlcixXKX0sei5wcm90b3R5cGUubmV3RWRnZT1mdW5jdGlvbihXKXtyZXR1cm4gbmV3IEEobnVsbCxudWxsLFcpfSx6LnByb3RvdHlwZS5jaGVja0xheW91dFN1Y2Nlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPT1udWxsfHx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKS5sZW5ndGg9PTB8fHRoaXMuZ3JhcGhNYW5hZ2VyLmluY2x1ZGVzSW52YWxpZEVkZ2UoKX0sei5wcm90b3R5cGUucnVuTGF5b3V0PWZ1bmN0aW9uKCl7dGhpcy5pc0xheW91dEZpbmlzaGVkPSExLHRoaXMudGlsaW5nUHJlTGF5b3V0JiZ0aGlzLnRpbGluZ1ByZUxheW91dCgpLHRoaXMuaW5pdFBhcmFtZXRlcnMoKTt2YXIgVztyZXR1cm4gdGhpcy5jaGVja0xheW91dFN1Y2Nlc3MoKT9XPSExOlc9dGhpcy5sYXlvdXQoKSxiLkFOSU1BVEU9PT0iZHVyaW5nIj8hMTooVyYmKHRoaXMuaXNTdWJMYXlvdXR8fHRoaXMuZG9Qb3N0TGF5b3V0KCkpLHRoaXMudGlsaW5nUG9zdExheW91dCYmdGhpcy50aWxpbmdQb3N0TGF5b3V0KCksdGhpcy5pc0xheW91dEZpbmlzaGVkPSEwLFcpfSx6LnByb3RvdHlwZS5kb1Bvc3RMYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLmluY3JlbWVudGFsfHx0aGlzLnRyYW5zZm9ybSgpLHRoaXMudXBkYXRlKCl9LHoucHJvdG90eXBlLnVwZGF0ZTI9ZnVuY3Rpb24oKXtpZih0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQmJih0aGlzLmNyZWF0ZUJlbmRwb2ludHNGcm9tRHVtbXlOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKSksIXRoaXMuaXNSZW1vdGVVc2Upe2Zvcih2YXIgVz10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpLGV0PTA7ZXQ8Vy5sZW5ndGg7ZXQrKylXW2V0XTtmb3IodmFyIHN0PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpLGV0PTA7ZXQ8c3QubGVuZ3RoO2V0Kyspc3RbZXRdO3RoaXMudXBkYXRlKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSl9fSx6LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oVyl7aWYoVz09bnVsbCl0aGlzLnVwZGF0ZTIoKTtlbHNlIGlmKFcgaW5zdGFuY2VvZiBfKXt2YXIgZXQ9VztpZihldC5nZXRDaGlsZCgpIT1udWxsKWZvcih2YXIgc3Q9ZXQuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLGF0PTA7YXQ8c3QubGVuZ3RoO2F0KyspdXBkYXRlKHN0W2F0XSk7aWYoZXQudkdyYXBoT2JqZWN0IT1udWxsKXt2YXIgYnQ9ZXQudkdyYXBoT2JqZWN0O2J0LnVwZGF0ZShldCl9fWVsc2UgaWYoVyBpbnN0YW5jZW9mIEEpe3ZhciBtdD1XO2lmKG10LnZHcmFwaE9iamVjdCE9bnVsbCl7dmFyIHl0PW10LnZHcmFwaE9iamVjdDt5dC51cGRhdGUobXQpfX1lbHNlIGlmKFcgaW5zdGFuY2VvZiBJKXt2YXIgZnQ9VztpZihmdC52R3JhcGhPYmplY3QhPW51bGwpe3ZhciB1dD1mdC52R3JhcGhPYmplY3Q7dXQudXBkYXRlKGZ0KX19fSx6LnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe3RoaXMuaXNTdWJMYXlvdXR8fCh0aGlzLmxheW91dFF1YWxpdHk9Yi5RVUFMSVRZLHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVCx0aGlzLmFuaW1hdGlvblBlcmlvZD1iLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRCx0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VULHRoaXMuaW5jcmVtZW50YWw9Yi5ERUZBVUxUX0lOQ1JFTUVOVEFMLHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZD1iLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRCx0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzPWIuREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUyksdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQmJih0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PSExKX0sei5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKFcpe2lmKFc9PW51bGwpdGhpcy50cmFuc2Zvcm0obmV3IEIoMCwwKSk7ZWxzZXt2YXIgZXQ9bmV3IE4sc3Q9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLnVwZGF0ZUxlZnRUb3AoKTtpZihzdCE9bnVsbCl7ZXQuc2V0V29ybGRPcmdYKFcueCksZXQuc2V0V29ybGRPcmdZKFcueSksZXQuc2V0RGV2aWNlT3JnWChzdC54KSxldC5zZXREZXZpY2VPcmdZKHN0LnkpO2Zvcih2YXIgYXQ9dGhpcy5nZXRBbGxOb2RlcygpLGJ0LG10PTA7bXQ8YXQubGVuZ3RoO210KyspYnQ9YXRbbXRdLGJ0LnRyYW5zZm9ybShldCl9fX0sei5wcm90b3R5cGUucG9zaXRpb25Ob2Rlc1JhbmRvbWx5PWZ1bmN0aW9uKFcpe2lmKFc9PW51bGwpdGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkodGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCkpLHRoaXMuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0Um9vdCgpLnVwZGF0ZUJvdW5kcyghMCk7ZWxzZSBmb3IodmFyIGV0LHN0LGF0PVcuZ2V0Tm9kZXMoKSxidD0wO2J0PGF0Lmxlbmd0aDtidCsrKWV0PWF0W2J0XSxzdD1ldC5nZXRDaGlsZCgpLHN0PT1udWxsfHxzdC5nZXROb2RlcygpLmxlbmd0aD09MD9ldC5zY2F0dGVyKCk6KHRoaXMucG9zaXRpb25Ob2Rlc1JhbmRvbWx5KHN0KSxldC51cGRhdGVCb3VuZHMoKSl9LHoucHJvdG90eXBlLmdldEZsYXRGb3Jlc3Q9ZnVuY3Rpb24oKXtmb3IodmFyIFc9W10sZXQ9ITAsc3Q9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCksYXQ9ITAsYnQ9MDtidDxzdC5sZW5ndGg7YnQrKylzdFtidF0uZ2V0Q2hpbGQoKSE9bnVsbCYmKGF0PSExKTtpZighYXQpcmV0dXJuIFc7dmFyIG10PW5ldyBTZXQseXQ9W10sZnQ9bmV3IE1hcCx1dD1bXTtmb3IodXQ9dXQuY29uY2F0KHN0KTt1dC5sZW5ndGg+MCYmZXQ7KXtmb3IoeXQucHVzaCh1dFswXSk7eXQubGVuZ3RoPjAmJmV0Oyl7dmFyIHZ0PXl0WzBdO3l0LnNwbGljZSgwLDEpLG10LmFkZCh2dCk7Zm9yKHZhciBYPXZ0LmdldEVkZ2VzKCksYnQ9MDtidDxYLmxlbmd0aDtidCsrKXt2YXIgcHQ9WFtidF0uZ2V0T3RoZXJFbmQodnQpO2lmKGZ0LmdldCh2dCkhPXB0KWlmKCFtdC5oYXMocHQpKXl0LnB1c2gocHQpLGZ0LnNldChwdCx2dCk7ZWxzZXtldD0hMTticmVha319fWlmKCFldClXPVtdO2Vsc2V7dmFyIFU9W10uY29uY2F0KG0obXQpKTtXLnB1c2goVSk7Zm9yKHZhciBidD0wO2J0PFUubGVuZ3RoO2J0Kyspe3ZhciBUdD1VW2J0XSxudD11dC5pbmRleE9mKFR0KTtudD4tMSYmdXQuc3BsaWNlKG50LDEpfW10PW5ldyBTZXQsZnQ9bmV3IE1hcH19cmV0dXJuIFd9LHoucHJvdG90eXBlLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzPWZ1bmN0aW9uKFcpe2Zvcih2YXIgZXQ9W10sc3Q9Vy5zb3VyY2UsYXQ9dGhpcy5ncmFwaE1hbmFnZXIuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9yKFcuc291cmNlLFcudGFyZ2V0KSxidD0wO2J0PFcuYmVuZHBvaW50cy5sZW5ndGg7YnQrKyl7dmFyIG10PXRoaXMubmV3Tm9kZShudWxsKTttdC5zZXRSZWN0KG5ldyBQb2ludCgwLDApLG5ldyBEaW1lbnNpb24oMSwxKSksYXQuYWRkKG10KTt2YXIgeXQ9dGhpcy5uZXdFZGdlKG51bGwpO3RoaXMuZ3JhcGhNYW5hZ2VyLmFkZCh5dCxzdCxtdCksZXQuYWRkKG10KSxzdD1tdH12YXIgeXQ9dGhpcy5uZXdFZGdlKG51bGwpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5hZGQoeXQsc3QsVy50YXJnZXQpLHRoaXMuZWRnZVRvRHVtbXlOb2Rlcy5zZXQoVyxldCksVy5pc0ludGVyR3JhcGgoKT90aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUoVyk6YXQucmVtb3ZlKFcpLGV0fSx6LnByb3RvdHlwZS5jcmVhdGVCZW5kcG9pbnRzRnJvbUR1bW15Tm9kZXM9ZnVuY3Rpb24oKXt2YXIgVz1bXTtXPVcuY29uY2F0KHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkpLFc9W10uY29uY2F0KG0odGhpcy5lZGdlVG9EdW1teU5vZGVzLmtleXMoKSkpLmNvbmNhdChXKTtmb3IodmFyIGV0PTA7ZXQ8Vy5sZW5ndGg7ZXQrKyl7dmFyIHN0PVdbZXRdO2lmKHN0LmJlbmRwb2ludHMubGVuZ3RoPjApe2Zvcih2YXIgYXQ9dGhpcy5lZGdlVG9EdW1teU5vZGVzLmdldChzdCksYnQ9MDtidDxhdC5sZW5ndGg7YnQrKyl7dmFyIG10PWF0W2J0XSx5dD1uZXcgQihtdC5nZXRDZW50ZXJYKCksbXQuZ2V0Q2VudGVyWSgpKSxmdD1zdC5iZW5kcG9pbnRzLmdldChidCk7ZnQueD15dC54LGZ0Lnk9eXQueSxtdC5nZXRPd25lcigpLnJlbW92ZShtdCl9dGhpcy5ncmFwaE1hbmFnZXIuYWRkKHN0LHN0LnNvdXJjZSxzdC50YXJnZXQpfX19LHoudHJhbnNmb3JtPWZ1bmN0aW9uKFcsZXQsc3QsYXQpe2lmKHN0IT1udWxsJiZhdCE9bnVsbCl7dmFyIGJ0PWV0O2lmKFc8PTUwKXt2YXIgbXQ9ZXQvc3Q7YnQtPShldC1tdCkvNTAqKDUwLVcpfWVsc2V7dmFyIHl0PWV0KmF0O2J0Kz0oeXQtZXQpLzUwKihXLTUwKX1yZXR1cm4gYnR9ZWxzZXt2YXIgZnQsdXQ7cmV0dXJuIFc8PTUwPyhmdD05KmV0LzUwMCx1dD1ldC8xMCk6KGZ0PTkqZXQvNTAsdXQ9LTgqZXQpLGZ0KlcrdXR9fSx6LmZpbmRDZW50ZXJPZlRyZWU9ZnVuY3Rpb24oVyl7dmFyIGV0PVtdO2V0PWV0LmNvbmNhdChXKTt2YXIgc3Q9W10sYXQ9bmV3IE1hcCxidD0hMSxtdD1udWxsOyhldC5sZW5ndGg9PTF8fGV0Lmxlbmd0aD09MikmJihidD0hMCxtdD1ldFswXSk7Zm9yKHZhciB5dD0wO3l0PGV0Lmxlbmd0aDt5dCsrKXt2YXIgZnQ9ZXRbeXRdLHV0PWZ0LmdldE5laWdoYm9yc0xpc3QoKS5zaXplO2F0LnNldChmdCxmdC5nZXROZWlnaGJvcnNMaXN0KCkuc2l6ZSksdXQ9PTEmJnN0LnB1c2goZnQpfXZhciB2dD1bXTtmb3IodnQ9dnQuY29uY2F0KHN0KTshYnQ7KXt2YXIgWD1bXTtYPVguY29uY2F0KHZ0KSx2dD1bXTtmb3IodmFyIHl0PTA7eXQ8ZXQubGVuZ3RoO3l0Kyspe3ZhciBmdD1ldFt5dF0scHQ9ZXQuaW5kZXhPZihmdCk7cHQ+PTAmJmV0LnNwbGljZShwdCwxKTt2YXIgVT1mdC5nZXROZWlnaGJvcnNMaXN0KCk7VS5mb3JFYWNoKGZ1bmN0aW9uKEl0KXtpZihzdC5pbmRleE9mKEl0KTwwKXt2YXIgT3Q9YXQuZ2V0KEl0KSxCdD1PdC0xO0J0PT0xJiZ2dC5wdXNoKEl0KSxhdC5zZXQoSXQsQnQpfX0pfXN0PXN0LmNvbmNhdCh2dCksKGV0Lmxlbmd0aD09MXx8ZXQubGVuZ3RoPT0yKSYmKGJ0PSEwLG10PWV0WzBdKX1yZXR1cm4gbXR9LHoucHJvdG90eXBlLnNldEdyYXBoTWFuYWdlcj1mdW5jdGlvbihXKXt0aGlzLmdyYXBoTWFuYWdlcj1XfSxmLmV4cG9ydHM9en0sZnVuY3Rpb24oZixwLHcpe2Z1bmN0aW9uIG0oKXt9bS5zZWVkPTEsbS54PTAsbS5uZXh0RG91YmxlPWZ1bmN0aW9uKCl7cmV0dXJuIG0ueD1NYXRoLnNpbihtLnNlZWQrKykqMWU0LG0ueC1NYXRoLmZsb29yKG0ueCl9LGYuZXhwb3J0cz1tfSxmdW5jdGlvbihmLHAsdyl7dmFyIG09dyg0KTtmdW5jdGlvbiBiKEUsXyl7dGhpcy5sd29ybGRPcmdYPTAsdGhpcy5sd29ybGRPcmdZPTAsdGhpcy5sZGV2aWNlT3JnWD0wLHRoaXMubGRldmljZU9yZ1k9MCx0aGlzLmx3b3JsZEV4dFg9MSx0aGlzLmx3b3JsZEV4dFk9MSx0aGlzLmxkZXZpY2VFeHRYPTEsdGhpcy5sZGV2aWNlRXh0WT0xfWIucHJvdG90eXBlLmdldFdvcmxkT3JnWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZE9yZ1h9LGIucHJvdG90eXBlLnNldFdvcmxkT3JnWD1mdW5jdGlvbihFKXt0aGlzLmx3b3JsZE9yZ1g9RX0sYi5wcm90b3R5cGUuZ2V0V29ybGRPcmdZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkT3JnWX0sYi5wcm90b3R5cGUuc2V0V29ybGRPcmdZPWZ1bmN0aW9uKEUpe3RoaXMubHdvcmxkT3JnWT1FfSxiLnByb3RvdHlwZS5nZXRXb3JsZEV4dFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRFeHRYfSxiLnByb3RvdHlwZS5zZXRXb3JsZEV4dFg9ZnVuY3Rpb24oRSl7dGhpcy5sd29ybGRFeHRYPUV9LGIucHJvdG90eXBlLmdldFdvcmxkRXh0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZEV4dFl9LGIucHJvdG90eXBlLnNldFdvcmxkRXh0WT1mdW5jdGlvbihFKXt0aGlzLmx3b3JsZEV4dFk9RX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VPcmdYfSxiLnByb3RvdHlwZS5zZXREZXZpY2VPcmdYPWZ1bmN0aW9uKEUpe3RoaXMubGRldmljZU9yZ1g9RX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VPcmdZfSxiLnByb3RvdHlwZS5zZXREZXZpY2VPcmdZPWZ1bmN0aW9uKEUpe3RoaXMubGRldmljZU9yZ1k9RX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VFeHRYfSxiLnByb3RvdHlwZS5zZXREZXZpY2VFeHRYPWZ1bmN0aW9uKEUpe3RoaXMubGRldmljZUV4dFg9RX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VFeHRZfSxiLnByb3RvdHlwZS5zZXREZXZpY2VFeHRZPWZ1bmN0aW9uKEUpe3RoaXMubGRldmljZUV4dFk9RX0sYi5wcm90b3R5cGUudHJhbnNmb3JtWD1mdW5jdGlvbihFKXt2YXIgXz0wLEE9dGhpcy5sd29ybGRFeHRYO3JldHVybiBBIT0wJiYoXz10aGlzLmxkZXZpY2VPcmdYKyhFLXRoaXMubHdvcmxkT3JnWCkqdGhpcy5sZGV2aWNlRXh0WC9BKSxffSxiLnByb3RvdHlwZS50cmFuc2Zvcm1ZPWZ1bmN0aW9uKEUpe3ZhciBfPTAsQT10aGlzLmx3b3JsZEV4dFk7cmV0dXJuIEEhPTAmJihfPXRoaXMubGRldmljZU9yZ1krKEUtdGhpcy5sd29ybGRPcmdZKSp0aGlzLmxkZXZpY2VFeHRZL0EpLF99LGIucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1YPWZ1bmN0aW9uKEUpe3ZhciBfPTAsQT10aGlzLmxkZXZpY2VFeHRYO3JldHVybiBBIT0wJiYoXz10aGlzLmx3b3JsZE9yZ1grKEUtdGhpcy5sZGV2aWNlT3JnWCkqdGhpcy5sd29ybGRFeHRYL0EpLF99LGIucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1ZPWZ1bmN0aW9uKEUpe3ZhciBfPTAsQT10aGlzLmxkZXZpY2VFeHRZO3JldHVybiBBIT0wJiYoXz10aGlzLmx3b3JsZE9yZ1krKEUtdGhpcy5sZGV2aWNlT3JnWSkqdGhpcy5sd29ybGRFeHRZL0EpLF99LGIucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1Qb2ludD1mdW5jdGlvbihFKXt2YXIgXz1uZXcgbSh0aGlzLmludmVyc2VUcmFuc2Zvcm1YKEUueCksdGhpcy5pbnZlcnNlVHJhbnNmb3JtWShFLnkpKTtyZXR1cm4gX30sZi5leHBvcnRzPWJ9LGZ1bmN0aW9uKGYscCx3KXtmdW5jdGlvbiBtKFIpe2lmKEFycmF5LmlzQXJyYXkoUikpe2Zvcih2YXIgej0wLFc9QXJyYXkoUi5sZW5ndGgpO3o8Ui5sZW5ndGg7eisrKVdbel09Ult6XTtyZXR1cm4gV31lbHNlIHJldHVybiBBcnJheS5mcm9tKFIpfXZhciBiPXcoMTUpLEU9dyg3KSxfPXcoMCksQT13KDgpLEk9dyg5KTtmdW5jdGlvbiBCKCl7Yi5jYWxsKHRoaXMpLHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbj1FLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OLHRoaXMuaWRlYWxFZGdlTGVuZ3RoPUUuREVGQVVMVF9FREdFX0xFTkdUSCx0aGlzLnNwcmluZ0NvbnN0YW50PUUuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEgsdGhpcy5yZXB1bHNpb25Db25zdGFudD1FLkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RILHRoaXMuZ3Jhdml0eUNvbnN0YW50PUUuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQ9RS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5ncmF2aXR5UmFuZ2VGYWN0b3I9RS5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3I9RS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuZGlzcGxhY2VtZW50VGhyZXNob2xkUGVyTm9kZT0zKkUuREVGQVVMVF9FREdFX0xFTkdUSC8xMDAsdGhpcy5jb29saW5nRmFjdG9yPUUuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCx0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yPUUuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCx0aGlzLnRvdGFsRGlzcGxhY2VtZW50PTAsdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudD0wLHRoaXMubWF4SXRlcmF0aW9ucz1FLk1BWF9JVEVSQVRJT05TfUIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUpO2Zvcih2YXIgTiBpbiBiKUJbTl09YltOXTtCLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe2IucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcyxhcmd1bWVudHMpLHRoaXMudG90YWxJdGVyYXRpb25zPTAsdGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnM9MCx0aGlzLnVzZUZSR3JpZFZhcmlhbnQ9RS5ERUZBVUxUX1VTRV9TTUFSVF9SRVBVTFNJT05fUkFOR0VfQ0FMQ1VMQVRJT04sdGhpcy5ncmlkPVtdfSxCLnByb3RvdHlwZS5jYWxjSWRlYWxFZGdlTGVuZ3Rocz1mdW5jdGlvbigpe2Zvcih2YXIgUix6LFcsZXQsc3QsYXQsYnQ9dGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRBbGxFZGdlcygpLG10PTA7bXQ8YnQubGVuZ3RoO210KyspUj1idFttdF0sUi5pZGVhbExlbmd0aD10aGlzLmlkZWFsRWRnZUxlbmd0aCxSLmlzSW50ZXJHcmFwaCYmKFc9Ui5nZXRTb3VyY2UoKSxldD1SLmdldFRhcmdldCgpLHN0PVIuZ2V0U291cmNlSW5MY2EoKS5nZXRFc3RpbWF0ZWRTaXplKCksYXQ9Ui5nZXRUYXJnZXRJbkxjYSgpLmdldEVzdGltYXRlZFNpemUoKSx0aGlzLnVzZVNtYXJ0SWRlYWxFZGdlTGVuZ3RoQ2FsY3VsYXRpb24mJihSLmlkZWFsTGVuZ3RoKz1zdCthdC0yKl8uU0lNUExFX05PREVfU0laRSksej1SLmdldExjYSgpLmdldEluY2x1c2lvblRyZWVEZXB0aCgpLFIuaWRlYWxMZW5ndGgrPUUuREVGQVVMVF9FREdFX0xFTkdUSCpFLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1IqKFcuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCkrZXQuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCktMip6KSl9LEIucHJvdG90eXBlLmluaXRTcHJpbmdFbWJlZGRlcj1mdW5jdGlvbigpe3ZhciBSPXRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGg7dGhpcy5pbmNyZW1lbnRhbD8oUj5FLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCYmKHRoaXMuY29vbGluZ0ZhY3Rvcj1NYXRoLm1heCh0aGlzLmNvb2xpbmdGYWN0b3IqRS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SLHRoaXMuY29vbGluZ0ZhY3Rvci0oUi1FLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkvKEUuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlULUUuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKSp0aGlzLmNvb2xpbmdGYWN0b3IqKDEtRS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SKSkpLHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudD1FLk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTCk6KFI+RS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQ/dGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KEUuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUiwxLShSLUUuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKS8oRS5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQtRS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpKigxLUUuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUikpOnRoaXMuY29vbGluZ0ZhY3Rvcj0xLHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3I9dGhpcy5jb29saW5nRmFjdG9yLHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudD1FLk1BWF9OT0RFX0RJU1BMQUNFTUVOVCksdGhpcy5tYXhJdGVyYXRpb25zPU1hdGgubWF4KHRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGgqNSx0aGlzLm1heEl0ZXJhdGlvbnMpLHRoaXMudG90YWxEaXNwbGFjZW1lbnRUaHJlc2hvbGQ9dGhpcy5kaXNwbGFjZW1lbnRUaHJlc2hvbGRQZXJOb2RlKnRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGgsdGhpcy5yZXB1bHNpb25SYW5nZT10aGlzLmNhbGNSZXB1bHNpb25SYW5nZSgpfSxCLnByb3RvdHlwZS5jYWxjU3ByaW5nRm9yY2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciBSPXRoaXMuZ2V0QWxsRWRnZXMoKSx6LFc9MDtXPFIubGVuZ3RoO1crKyl6PVJbV10sdGhpcy5jYWxjU3ByaW5nRm9yY2Uoeix6LmlkZWFsTGVuZ3RoKX0sQi5wcm90b3R5cGUuY2FsY1JlcHVsc2lvbkZvcmNlcz1mdW5jdGlvbigpe3ZhciBSPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCx6PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMSxXLGV0LHN0LGF0LGJ0PXRoaXMuZ2V0QWxsTm9kZXMoKSxtdDtpZih0aGlzLnVzZUZSR3JpZFZhcmlhbnQpZm9yKHRoaXMudG90YWxJdGVyYXRpb25zJUUuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0Q9PTEmJlImJnRoaXMudXBkYXRlR3JpZCgpLG10PW5ldyBTZXQsVz0wO1c8YnQubGVuZ3RoO1crKylzdD1idFtXXSx0aGlzLmNhbGN1bGF0ZVJlcHVsc2lvbkZvcmNlT2ZBTm9kZShzdCxtdCxSLHopLG10LmFkZChzdCk7ZWxzZSBmb3IoVz0wO1c8YnQubGVuZ3RoO1crKylmb3Ioc3Q9YnRbV10sZXQ9VysxO2V0PGJ0Lmxlbmd0aDtldCsrKWF0PWJ0W2V0XSxzdC5nZXRPd25lcigpPT1hdC5nZXRPd25lcigpJiZ0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZShzdCxhdCl9LEIucHJvdG90eXBlLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciBSLHo9dGhpcy5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpLFc9MDtXPHoubGVuZ3RoO1crKylSPXpbV10sdGhpcy5jYWxjR3Jhdml0YXRpb25hbEZvcmNlKFIpfSxCLnByb3RvdHlwZS5tb3ZlTm9kZXM9ZnVuY3Rpb24oKXtmb3IodmFyIFI9dGhpcy5nZXRBbGxOb2RlcygpLHosVz0wO1c8Ui5sZW5ndGg7VysrKXo9UltXXSx6Lm1vdmUoKX0sQi5wcm90b3R5cGUuY2FsY1NwcmluZ0ZvcmNlPWZ1bmN0aW9uKFIseil7dmFyIFc9Ui5nZXRTb3VyY2UoKSxldD1SLmdldFRhcmdldCgpLHN0LGF0LGJ0LG10O2lmKHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXMmJlcuZ2V0Q2hpbGQoKT09bnVsbCYmZXQuZ2V0Q2hpbGQoKT09bnVsbClSLnVwZGF0ZUxlbmd0aFNpbXBsZSgpO2Vsc2UgaWYoUi51cGRhdGVMZW5ndGgoKSxSLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldClyZXR1cm47c3Q9Ui5nZXRMZW5ndGgoKSxzdCE9MCYmKGF0PXRoaXMuc3ByaW5nQ29uc3RhbnQqKHN0LXopLGJ0PWF0KihSLmxlbmd0aFgvc3QpLG10PWF0KihSLmxlbmd0aFkvc3QpLFcuc3ByaW5nRm9yY2VYKz1idCxXLnNwcmluZ0ZvcmNlWSs9bXQsZXQuc3ByaW5nRm9yY2VYLT1idCxldC5zcHJpbmdGb3JjZVktPW10KX0sQi5wcm90b3R5cGUuY2FsY1JlcHVsc2lvbkZvcmNlPWZ1bmN0aW9uKFIseil7dmFyIFc9Ui5nZXRSZWN0KCksZXQ9ei5nZXRSZWN0KCksc3Q9bmV3IEFycmF5KDIpLGF0PW5ldyBBcnJheSg0KSxidCxtdCx5dCxmdCx1dCx2dCxYO2lmKFcuaW50ZXJzZWN0cyhldCkpe0EuY2FsY1NlcGFyYXRpb25BbW91bnQoVyxldCxzdCxFLkRFRkFVTFRfRURHRV9MRU5HVEgvMiksdnQ9MipzdFswXSxYPTIqc3RbMV07dmFyIHB0PVIubm9PZkNoaWxkcmVuKnoubm9PZkNoaWxkcmVuLyhSLm5vT2ZDaGlsZHJlbit6Lm5vT2ZDaGlsZHJlbik7Ui5yZXB1bHNpb25Gb3JjZVgtPXB0KnZ0LFIucmVwdWxzaW9uRm9yY2VZLT1wdCpYLHoucmVwdWxzaW9uRm9yY2VYKz1wdCp2dCx6LnJlcHVsc2lvbkZvcmNlWSs9cHQqWH1lbHNlIHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXMmJlIuZ2V0Q2hpbGQoKT09bnVsbCYmei5nZXRDaGlsZCgpPT1udWxsPyhidD1ldC5nZXRDZW50ZXJYKCktVy5nZXRDZW50ZXJYKCksbXQ9ZXQuZ2V0Q2VudGVyWSgpLVcuZ2V0Q2VudGVyWSgpKTooQS5nZXRJbnRlcnNlY3Rpb24oVyxldCxhdCksYnQ9YXRbMl0tYXRbMF0sbXQ9YXRbM10tYXRbMV0pLE1hdGguYWJzKGJ0KTxFLk1JTl9SRVBVTFNJT05fRElTVCYmKGJ0PUkuc2lnbihidCkqRS5NSU5fUkVQVUxTSU9OX0RJU1QpLE1hdGguYWJzKG10KTxFLk1JTl9SRVBVTFNJT05fRElTVCYmKG10PUkuc2lnbihtdCkqRS5NSU5fUkVQVUxTSU9OX0RJU1QpLHl0PWJ0KmJ0K210Km10LGZ0PU1hdGguc3FydCh5dCksdXQ9dGhpcy5yZXB1bHNpb25Db25zdGFudCpSLm5vT2ZDaGlsZHJlbip6Lm5vT2ZDaGlsZHJlbi95dCx2dD11dCpidC9mdCxYPXV0Km10L2Z0LFIucmVwdWxzaW9uRm9yY2VYLT12dCxSLnJlcHVsc2lvbkZvcmNlWS09WCx6LnJlcHVsc2lvbkZvcmNlWCs9dnQsei5yZXB1bHNpb25Gb3JjZVkrPVh9LEIucHJvdG90eXBlLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2U9ZnVuY3Rpb24oUil7dmFyIHosVyxldCxzdCxhdCxidCxtdCx5dDt6PVIuZ2V0T3duZXIoKSxXPSh6LmdldFJpZ2h0KCkrei5nZXRMZWZ0KCkpLzIsZXQ9KHouZ2V0VG9wKCkrei5nZXRCb3R0b20oKSkvMixzdD1SLmdldENlbnRlclgoKS1XLGF0PVIuZ2V0Q2VudGVyWSgpLWV0LGJ0PU1hdGguYWJzKHN0KStSLmdldFdpZHRoKCkvMixtdD1NYXRoLmFicyhhdCkrUi5nZXRIZWlnaHQoKS8yLFIuZ2V0T3duZXIoKT09dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPyh5dD16LmdldEVzdGltYXRlZFNpemUoKSp0aGlzLmdyYXZpdHlSYW5nZUZhY3RvciwoYnQ+eXR8fG10Pnl0KSYmKFIuZ3Jhdml0YXRpb25Gb3JjZVg9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KnN0LFIuZ3Jhdml0YXRpb25Gb3JjZVk9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KmF0KSk6KHl0PXouZ2V0RXN0aW1hdGVkU2l6ZSgpKnRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3IsKGJ0Pnl0fHxtdD55dCkmJihSLmdyYXZpdGF0aW9uRm9yY2VYPS10aGlzLmdyYXZpdHlDb25zdGFudCpzdCp0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50LFIuZ3Jhdml0YXRpb25Gb3JjZVk9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KmF0KnRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQpKX0sQi5wcm90b3R5cGUuaXNDb252ZXJnZWQ9ZnVuY3Rpb24oKXt2YXIgUix6PSExO3JldHVybiB0aGlzLnRvdGFsSXRlcmF0aW9ucz50aGlzLm1heEl0ZXJhdGlvbnMvMyYmKHo9TWF0aC5hYnModGhpcy50b3RhbERpc3BsYWNlbWVudC10aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50KTwyKSxSPXRoaXMudG90YWxEaXNwbGFjZW1lbnQ8dGhpcy50b3RhbERpc3BsYWNlbWVudFRocmVzaG9sZCx0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50PXRoaXMudG90YWxEaXNwbGFjZW1lbnQsUnx8en0sQi5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbigpe3RoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0JiYhdGhpcy5pc1N1YkxheW91dCYmKHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zPT10aGlzLmFuaW1hdGlvblBlcmlvZD8odGhpcy51cGRhdGUoKSx0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucz0wKTp0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucysrKX0sQi5wcm90b3R5cGUuY2FsY05vT2ZDaGlsZHJlbkZvckFsbE5vZGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBSLHo9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxXPTA7Vzx6Lmxlbmd0aDtXKyspUj16W1ddLFIubm9PZkNoaWxkcmVuPVIuZ2V0Tm9PZkNoaWxkcmVuKCl9LEIucHJvdG90eXBlLmNhbGNHcmlkPWZ1bmN0aW9uKFIpe3ZhciB6PTAsVz0wO3o9cGFyc2VJbnQoTWF0aC5jZWlsKChSLmdldFJpZ2h0KCktUi5nZXRMZWZ0KCkpL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxXPXBhcnNlSW50KE1hdGguY2VpbCgoUi5nZXRCb3R0b20oKS1SLmdldFRvcCgpKS90aGlzLnJlcHVsc2lvblJhbmdlKSk7Zm9yKHZhciBldD1uZXcgQXJyYXkoeiksc3Q9MDtzdDx6O3N0KyspZXRbc3RdPW5ldyBBcnJheShXKTtmb3IodmFyIHN0PTA7c3Q8ejtzdCsrKWZvcih2YXIgYXQ9MDthdDxXO2F0KyspZXRbc3RdW2F0XT1uZXcgQXJyYXk7cmV0dXJuIGV0fSxCLnByb3RvdHlwZS5hZGROb2RlVG9HcmlkPWZ1bmN0aW9uKFIseixXKXt2YXIgZXQ9MCxzdD0wLGF0PTAsYnQ9MDtldD1wYXJzZUludChNYXRoLmZsb29yKChSLmdldFJlY3QoKS54LXopL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxzdD1wYXJzZUludChNYXRoLmZsb29yKChSLmdldFJlY3QoKS53aWR0aCtSLmdldFJlY3QoKS54LXopL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxhdD1wYXJzZUludChNYXRoLmZsb29yKChSLmdldFJlY3QoKS55LVcpL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxidD1wYXJzZUludChNYXRoLmZsb29yKChSLmdldFJlY3QoKS5oZWlnaHQrUi5nZXRSZWN0KCkueS1XKS90aGlzLnJlcHVsc2lvblJhbmdlKSk7Zm9yKHZhciBtdD1ldDttdDw9c3Q7bXQrKylmb3IodmFyIHl0PWF0O3l0PD1idDt5dCsrKXRoaXMuZ3JpZFttdF1beXRdLnB1c2goUiksUi5zZXRHcmlkQ29vcmRpbmF0ZXMoZXQsc3QsYXQsYnQpfSxCLnByb3RvdHlwZS51cGRhdGVHcmlkPWZ1bmN0aW9uKCl7dmFyIFIseixXPXRoaXMuZ2V0QWxsTm9kZXMoKTtmb3IodGhpcy5ncmlkPXRoaXMuY2FsY0dyaWQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKSxSPTA7UjxXLmxlbmd0aDtSKyspej1XW1JdLHRoaXMuYWRkTm9kZVRvR3JpZCh6LHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXRMZWZ0KCksdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldFRvcCgpKX0sQi5wcm90b3R5cGUuY2FsY3VsYXRlUmVwdWxzaW9uRm9yY2VPZkFOb2RlPWZ1bmN0aW9uKFIseixXLGV0KXtpZih0aGlzLnRvdGFsSXRlcmF0aW9ucyVFLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EPT0xJiZXfHxldCl7dmFyIHN0PW5ldyBTZXQ7Ui5zdXJyb3VuZGluZz1uZXcgQXJyYXk7Zm9yKHZhciBhdCxidD10aGlzLmdyaWQsbXQ9Ui5zdGFydFgtMTttdDxSLmZpbmlzaFgrMjttdCsrKWZvcih2YXIgeXQ9Ui5zdGFydFktMTt5dDxSLmZpbmlzaFkrMjt5dCsrKWlmKCEobXQ8MHx8eXQ8MHx8bXQ+PWJ0Lmxlbmd0aHx8eXQ+PWJ0WzBdLmxlbmd0aCkpe2Zvcih2YXIgZnQ9MDtmdDxidFttdF1beXRdLmxlbmd0aDtmdCsrKWlmKGF0PWJ0W210XVt5dF1bZnRdLCEoUi5nZXRPd25lcigpIT1hdC5nZXRPd25lcigpfHxSPT1hdCkmJiF6LmhhcyhhdCkmJiFzdC5oYXMoYXQpKXt2YXIgdXQ9TWF0aC5hYnMoUi5nZXRDZW50ZXJYKCktYXQuZ2V0Q2VudGVyWCgpKS0oUi5nZXRXaWR0aCgpLzIrYXQuZ2V0V2lkdGgoKS8yKSx2dD1NYXRoLmFicyhSLmdldENlbnRlclkoKS1hdC5nZXRDZW50ZXJZKCkpLShSLmdldEhlaWdodCgpLzIrYXQuZ2V0SGVpZ2h0KCkvMik7dXQ8PXRoaXMucmVwdWxzaW9uUmFuZ2UmJnZ0PD10aGlzLnJlcHVsc2lvblJhbmdlJiZzdC5hZGQoYXQpfX1SLnN1cnJvdW5kaW5nPVtdLmNvbmNhdChtKHN0KSl9Zm9yKG10PTA7bXQ8Ui5zdXJyb3VuZGluZy5sZW5ndGg7bXQrKyl0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZShSLFIuc3Vycm91bmRpbmdbbXRdKX0sQi5wcm90b3R5cGUuY2FsY1JlcHVsc2lvblJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGYuZXhwb3J0cz1CfSxmdW5jdGlvbihmLHAsdyl7dmFyIG09dygxKSxiPXcoNyk7ZnVuY3Rpb24gRShBLEksQil7bS5jYWxsKHRoaXMsQSxJLEIpLHRoaXMuaWRlYWxMZW5ndGg9Yi5ERUZBVUxUX0VER0VfTEVOR1RIfUUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobS5wcm90b3R5cGUpO2Zvcih2YXIgXyBpbiBtKUVbX109bVtfXTtmLmV4cG9ydHM9RX0sZnVuY3Rpb24oZixwLHcpe3ZhciBtPXcoMyk7ZnVuY3Rpb24gYihfLEEsSSxCKXttLmNhbGwodGhpcyxfLEEsSSxCKSx0aGlzLnNwcmluZ0ZvcmNlWD0wLHRoaXMuc3ByaW5nRm9yY2VZPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVg9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWT0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVg9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VZPTAsdGhpcy5kaXNwbGFjZW1lbnRYPTAsdGhpcy5kaXNwbGFjZW1lbnRZPTAsdGhpcy5zdGFydFg9MCx0aGlzLmZpbmlzaFg9MCx0aGlzLnN0YXJ0WT0wLHRoaXMuZmluaXNoWT0wLHRoaXMuc3Vycm91bmRpbmc9W119Yi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShtLnByb3RvdHlwZSk7Zm9yKHZhciBFIGluIG0pYltFXT1tW0VdO2IucHJvdG90eXBlLnNldEdyaWRDb29yZGluYXRlcz1mdW5jdGlvbihfLEEsSSxCKXt0aGlzLnN0YXJ0WD1fLHRoaXMuZmluaXNoWD1BLHRoaXMuc3RhcnRZPUksdGhpcy5maW5pc2hZPUJ9LGYuZXhwb3J0cz1ifSxmdW5jdGlvbihmLHAsdyl7ZnVuY3Rpb24gbShiLEUpe3RoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLGIhPT1udWxsJiZFIT09bnVsbCYmKHRoaXMuaGVpZ2h0PUUsdGhpcy53aWR0aD1iKX1tLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRofSxtLnByb3RvdHlwZS5zZXRXaWR0aD1mdW5jdGlvbihiKXt0aGlzLndpZHRoPWJ9LG0ucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodH0sbS5wcm90b3R5cGUuc2V0SGVpZ2h0PWZ1bmN0aW9uKGIpe3RoaXMuaGVpZ2h0PWJ9LGYuZXhwb3J0cz1tfSxmdW5jdGlvbihmLHAsdyl7dmFyIG09dygxNCk7ZnVuY3Rpb24gYigpe3RoaXMubWFwPXt9LHRoaXMua2V5cz1bXX1iLnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24oRSxfKXt2YXIgQT1tLmNyZWF0ZUlEKEUpO3RoaXMuY29udGFpbnMoQSl8fCh0aGlzLm1hcFtBXT1fLHRoaXMua2V5cy5wdXNoKEUpKX0sYi5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oRSl7cmV0dXJuIG0uY3JlYXRlSUQoRSksdGhpcy5tYXBbRV0hPW51bGx9LGIucHJvdG90eXBlLmdldD1mdW5jdGlvbihFKXt2YXIgXz1tLmNyZWF0ZUlEKEUpO3JldHVybiB0aGlzLm1hcFtfXX0sYi5wcm90b3R5cGUua2V5U2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua2V5c30sZi5leHBvcnRzPWJ9LGZ1bmN0aW9uKGYscCx3KXt2YXIgbT13KDE0KTtmdW5jdGlvbiBiKCl7dGhpcy5zZXQ9e319Yi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKEUpe3ZhciBfPW0uY3JlYXRlSUQoRSk7dGhpcy5jb250YWlucyhfKXx8KHRoaXMuc2V0W19dPUUpfSxiLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oRSl7ZGVsZXRlIHRoaXMuc2V0W20uY3JlYXRlSUQoRSldfSxiLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2V0PXt9fSxiLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5zZXRbbS5jcmVhdGVJRChFKV09PUV9LGIucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplKCk9PT0wfSxiLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0KS5sZW5ndGh9LGIucHJvdG90eXBlLmFkZEFsbFRvPWZ1bmN0aW9uKEUpe2Zvcih2YXIgXz1PYmplY3Qua2V5cyh0aGlzLnNldCksQT1fLmxlbmd0aCxJPTA7STxBO0krKylFLnB1c2godGhpcy5zZXRbX1tJXV0pfSxiLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0KS5sZW5ndGh9LGIucHJvdG90eXBlLmFkZEFsbD1mdW5jdGlvbihFKXtmb3IodmFyIF89RS5sZW5ndGgsQT0wO0E8XztBKyspe3ZhciBJPUVbQV07dGhpcy5hZGQoSSl9fSxmLmV4cG9ydHM9Yn0sZnVuY3Rpb24oZixwLHcpe3ZhciBtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gQShJLEIpe2Zvcih2YXIgTj0wO048Qi5sZW5ndGg7TisrKXt2YXIgUj1CW05dO1IuZW51bWVyYWJsZT1SLmVudW1lcmFibGV8fCExLFIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBSJiYoUi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksUi5rZXksUil9fXJldHVybiBmdW5jdGlvbihJLEIsTil7cmV0dXJuIEImJkEoSS5wcm90b3R5cGUsQiksTiYmQShJLE4pLEl9fSgpO2Z1bmN0aW9uIGIoQSxJKXtpZighKEEgaW5zdGFuY2VvZiBJKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgRT13KDExKSxfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gQShJLEIpe2IodGhpcyxBKSwoQiE9PW51bGx8fEIhPT12b2lkIDApJiYodGhpcy5jb21wYXJlRnVuY3Rpb249dGhpcy5fZGVmYXVsdENvbXBhcmVGdW5jdGlvbik7dmFyIE49dm9pZCAwO0kgaW5zdGFuY2VvZiBFP049SS5zaXplKCk6Tj1JLmxlbmd0aCx0aGlzLl9xdWlja3NvcnQoSSwwLE4tMSl9cmV0dXJuIG0oQSxbe2tleToiX3F1aWNrc29ydCIsdmFsdWU6ZnVuY3Rpb24oQixOLFIpe2lmKE48Uil7dmFyIHo9dGhpcy5fcGFydGl0aW9uKEIsTixSKTt0aGlzLl9xdWlja3NvcnQoQixOLHopLHRoaXMuX3F1aWNrc29ydChCLHorMSxSKX19fSx7a2V5OiJfcGFydGl0aW9uIix2YWx1ZTpmdW5jdGlvbihCLE4sUil7Zm9yKHZhciB6PXRoaXMuX2dldChCLE4pLFc9TixldD1SOzspe2Zvcig7dGhpcy5jb21wYXJlRnVuY3Rpb24oeix0aGlzLl9nZXQoQixldCkpOylldC0tO2Zvcig7dGhpcy5jb21wYXJlRnVuY3Rpb24odGhpcy5fZ2V0KEIsVykseik7KVcrKztpZihXPGV0KXRoaXMuX3N3YXAoQixXLGV0KSxXKyssZXQtLTtlbHNlIHJldHVybiBldH19fSx7a2V5OiJfZ2V0Iix2YWx1ZTpmdW5jdGlvbihCLE4pe3JldHVybiBCIGluc3RhbmNlb2YgRT9CLmdldF9vYmplY3RfYXQoTik6QltOXX19LHtrZXk6Il9zZXQiLHZhbHVlOmZ1bmN0aW9uKEIsTixSKXtCIGluc3RhbmNlb2YgRT9CLnNldF9vYmplY3RfYXQoTixSKTpCW05dPVJ9fSx7a2V5OiJfc3dhcCIsdmFsdWU6ZnVuY3Rpb24oQixOLFIpe3ZhciB6PXRoaXMuX2dldChCLE4pO3RoaXMuX3NldChCLE4sdGhpcy5fZ2V0KEIsUikpLHRoaXMuX3NldChCLFIseil9fSx7a2V5OiJfZGVmYXVsdENvbXBhcmVGdW5jdGlvbiIsdmFsdWU6ZnVuY3Rpb24oQixOKXtyZXR1cm4gTj5CfX1dKSxBfSgpO2YuZXhwb3J0cz1ffSxmdW5jdGlvbihmLHAsdyl7dmFyIG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBfKEEsSSl7Zm9yKHZhciBCPTA7QjxJLmxlbmd0aDtCKyspe3ZhciBOPUlbQl07Ti5lbnVtZXJhYmxlPU4uZW51bWVyYWJsZXx8ITEsTi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIE4mJihOLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxOLmtleSxOKX19cmV0dXJuIGZ1bmN0aW9uKEEsSSxCKXtyZXR1cm4gSSYmXyhBLnByb3RvdHlwZSxJKSxCJiZfKEEsQiksQX19KCk7ZnVuY3Rpb24gYihfLEEpe2lmKCEoXyBpbnN0YW5jZW9mIEEpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfXZhciBFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gXyhBLEkpe3ZhciBCPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXToxLE49YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOi0xLFI9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOi0xO2IodGhpcyxfKSx0aGlzLnNlcXVlbmNlMT1BLHRoaXMuc2VxdWVuY2UyPUksdGhpcy5tYXRjaF9zY29yZT1CLHRoaXMubWlzbWF0Y2hfcGVuYWx0eT1OLHRoaXMuZ2FwX3BlbmFsdHk9Uix0aGlzLmlNYXg9QS5sZW5ndGgrMSx0aGlzLmpNYXg9SS5sZW5ndGgrMSx0aGlzLmdyaWQ9bmV3IEFycmF5KHRoaXMuaU1heCk7Zm9yKHZhciB6PTA7ejx0aGlzLmlNYXg7eisrKXt0aGlzLmdyaWRbel09bmV3IEFycmF5KHRoaXMuak1heCk7Zm9yKHZhciBXPTA7Vzx0aGlzLmpNYXg7VysrKXRoaXMuZ3JpZFt6XVtXXT0wfXRoaXMudHJhY2ViYWNrR3JpZD1uZXcgQXJyYXkodGhpcy5pTWF4KTtmb3IodmFyIGV0PTA7ZXQ8dGhpcy5pTWF4O2V0Kyspe3RoaXMudHJhY2ViYWNrR3JpZFtldF09bmV3IEFycmF5KHRoaXMuak1heCk7Zm9yKHZhciBzdD0wO3N0PHRoaXMuak1heDtzdCsrKXRoaXMudHJhY2ViYWNrR3JpZFtldF1bc3RdPVtudWxsLG51bGwsbnVsbF19dGhpcy5hbGlnbm1lbnRzPVtdLHRoaXMuc2NvcmU9LTEsdGhpcy5jb21wdXRlR3JpZHMoKX1yZXR1cm4gbShfLFt7a2V5OiJnZXRTY29yZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY29yZX19LHtrZXk6ImdldEFsaWdubWVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWxpZ25tZW50c319LHtrZXk6ImNvbXB1dGVHcmlkcyIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIEk9MTtJPHRoaXMuak1heDtJKyspdGhpcy5ncmlkWzBdW0ldPXRoaXMuZ3JpZFswXVtJLTFdK3RoaXMuZ2FwX3BlbmFsdHksdGhpcy50cmFjZWJhY2tHcmlkWzBdW0ldPVshMSwhMSwhMF07Zm9yKHZhciBCPTE7Qjx0aGlzLmlNYXg7QisrKXRoaXMuZ3JpZFtCXVswXT10aGlzLmdyaWRbQi0xXVswXSt0aGlzLmdhcF9wZW5hbHR5LHRoaXMudHJhY2ViYWNrR3JpZFtCXVswXT1bITEsITAsITFdO2Zvcih2YXIgTj0xO048dGhpcy5pTWF4O04rKylmb3IodmFyIFI9MTtSPHRoaXMuak1heDtSKyspe3ZhciB6PXZvaWQgMDt0aGlzLnNlcXVlbmNlMVtOLTFdPT09dGhpcy5zZXF1ZW5jZTJbUi0xXT96PXRoaXMuZ3JpZFtOLTFdW1ItMV0rdGhpcy5tYXRjaF9zY29yZTp6PXRoaXMuZ3JpZFtOLTFdW1ItMV0rdGhpcy5taXNtYXRjaF9wZW5hbHR5O3ZhciBXPXRoaXMuZ3JpZFtOLTFdW1JdK3RoaXMuZ2FwX3BlbmFsdHksZXQ9dGhpcy5ncmlkW05dW1ItMV0rdGhpcy5nYXBfcGVuYWx0eSxzdD1beixXLGV0XSxhdD10aGlzLmFycmF5QWxsTWF4SW5kZXhlcyhzdCk7dGhpcy5ncmlkW05dW1JdPXN0W2F0WzBdXSx0aGlzLnRyYWNlYmFja0dyaWRbTl1bUl09W2F0LmluY2x1ZGVzKDApLGF0LmluY2x1ZGVzKDEpLGF0LmluY2x1ZGVzKDIpXX10aGlzLnNjb3JlPXRoaXMuZ3JpZFt0aGlzLmlNYXgtMV1bdGhpcy5qTWF4LTFdfX0se2tleToiYWxpZ25tZW50VHJhY2ViYWNrIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBJPVtdO2ZvcihJLnB1c2goe3BvczpbdGhpcy5zZXF1ZW5jZTEubGVuZ3RoLHRoaXMuc2VxdWVuY2UyLmxlbmd0aF0sc2VxMToiIixzZXEyOiIifSk7SVswXTspe3ZhciBCPUlbMF0sTj10aGlzLnRyYWNlYmFja0dyaWRbQi5wb3NbMF1dW0IucG9zWzFdXTtOWzBdJiZJLnB1c2goe3BvczpbQi5wb3NbMF0tMSxCLnBvc1sxXS0xXSxzZXExOnRoaXMuc2VxdWVuY2UxW0IucG9zWzBdLTFdK0Iuc2VxMSxzZXEyOnRoaXMuc2VxdWVuY2UyW0IucG9zWzFdLTFdK0Iuc2VxMn0pLE5bMV0mJkkucHVzaCh7cG9zOltCLnBvc1swXS0xLEIucG9zWzFdXSxzZXExOnRoaXMuc2VxdWVuY2UxW0IucG9zWzBdLTFdK0Iuc2VxMSxzZXEyOiItIitCLnNlcTJ9KSxOWzJdJiZJLnB1c2goe3BvczpbQi5wb3NbMF0sQi5wb3NbMV0tMV0sc2VxMToiLSIrQi5zZXExLHNlcTI6dGhpcy5zZXF1ZW5jZTJbQi5wb3NbMV0tMV0rQi5zZXEyfSksQi5wb3NbMF09PT0wJiZCLnBvc1sxXT09PTAmJnRoaXMuYWxpZ25tZW50cy5wdXNoKHtzZXF1ZW5jZTE6Qi5zZXExLHNlcXVlbmNlMjpCLnNlcTJ9KSxJLnNoaWZ0KCl9cmV0dXJuIHRoaXMuYWxpZ25tZW50c319LHtrZXk6ImdldEFsbEluZGV4ZXMiLHZhbHVlOmZ1bmN0aW9uKEksQil7Zm9yKHZhciBOPVtdLFI9LTE7KFI9SS5pbmRleE9mKEIsUisxKSkhPT0tMTspTi5wdXNoKFIpO3JldHVybiBOfX0se2tleToiYXJyYXlBbGxNYXhJbmRleGVzIix2YWx1ZTpmdW5jdGlvbihJKXtyZXR1cm4gdGhpcy5nZXRBbGxJbmRleGVzKEksTWF0aC5tYXguYXBwbHkobnVsbCxJKSl9fV0pLF99KCk7Zi5leHBvcnRzPUV9LGZ1bmN0aW9uKGYscCx3KXt2YXIgbT1mdW5jdGlvbigpe307bS5GRExheW91dD13KDE4KSxtLkZETGF5b3V0Q29uc3RhbnRzPXcoNyksbS5GRExheW91dEVkZ2U9dygxOSksbS5GRExheW91dE5vZGU9dygyMCksbS5EaW1lbnNpb25EPXcoMjEpLG0uSGFzaE1hcD13KDIyKSxtLkhhc2hTZXQ9dygyMyksbS5JR2VvbWV0cnk9dyg4KSxtLklNYXRoPXcoOSksbS5JbnRlZ2VyPXcoMTApLG0uUG9pbnQ9dygxMiksbS5Qb2ludEQ9dyg0KSxtLlJhbmRvbVNlZWQ9dygxNiksbS5SZWN0YW5nbGVEPXcoMTMpLG0uVHJhbnNmb3JtPXcoMTcpLG0uVW5pcXVlSURHZW5lcmV0b3I9dygxNCksbS5RdWlja3NvcnQ9dygyNCksbS5MaW5rZWRMaXN0PXcoMTEpLG0uTEdyYXBoT2JqZWN0PXcoMiksbS5MR3JhcGg9dyg1KSxtLkxFZGdlPXcoMSksbS5MR3JhcGhNYW5hZ2VyPXcoNiksbS5MTm9kZT13KDMpLG0uTGF5b3V0PXcoMTUpLG0uTGF5b3V0Q29uc3RhbnRzPXcoMCksbS5OZWVkbGVtYW5XdW5zY2g9dygyNSksZi5leHBvcnRzPW19LGZ1bmN0aW9uKGYscCx3KXtmdW5jdGlvbiBtKCl7dGhpcy5saXN0ZW5lcnM9W119dmFyIGI9bS5wcm90b3R5cGU7Yi5hZGRMaXN0ZW5lcj1mdW5jdGlvbihFLF8pe3RoaXMubGlzdGVuZXJzLnB1c2goe2V2ZW50OkUsY2FsbGJhY2s6X30pfSxiLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKEUsXyl7Zm9yKHZhciBBPXRoaXMubGlzdGVuZXJzLmxlbmd0aDtBPj0wO0EtLSl7dmFyIEk9dGhpcy5saXN0ZW5lcnNbQV07SS5ldmVudD09PUUmJkkuY2FsbGJhY2s9PT1fJiZ0aGlzLmxpc3RlbmVycy5zcGxpY2UoQSwxKX19LGIuZW1pdD1mdW5jdGlvbihFLF8pe2Zvcih2YXIgQT0wO0E8dGhpcy5saXN0ZW5lcnMubGVuZ3RoO0ErKyl7dmFyIEk9dGhpcy5saXN0ZW5lcnNbQV07RT09PUkuZXZlbnQmJkkuY2FsbGJhY2soXyl9fSxmLmV4cG9ydHM9bX1dKX0pfShlcHQpKSxlcHQuZXhwb3J0c312YXIgZCR0O2Z1bmN0aW9uIGNZZSgpe3JldHVybiBkJHR8fChkJHQ9MSxmdW5jdGlvbihpLGEpeyhmdW5jdGlvbihwLHcpe2kuZXhwb3J0cz13KG9ZZSgpKX0pKGIwLGZ1bmN0aW9uKGYpe3JldHVybiBmdW5jdGlvbihwKXt2YXIgdz17fTtmdW5jdGlvbiBtKGIpe2lmKHdbYl0pcmV0dXJuIHdbYl0uZXhwb3J0czt2YXIgRT13W2JdPXtpOmIsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gcFtiXS5jYWxsKEUuZXhwb3J0cyxFLEUuZXhwb3J0cyxtKSxFLmw9ITAsRS5leHBvcnRzfXJldHVybiBtLm09cCxtLmM9dyxtLmk9ZnVuY3Rpb24oYil7cmV0dXJuIGJ9LG0uZD1mdW5jdGlvbihiLEUsXyl7bS5vKGIsRSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLEUse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpffSl9LG0ubj1mdW5jdGlvbihiKXt2YXIgRT1iJiZiLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gYi5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBifTtyZXR1cm4gbS5kKEUsImEiLEUpLEV9LG0ubz1mdW5jdGlvbihiLEUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYixFKX0sbS5wPSIiLG0obS5zPTcpfShbZnVuY3Rpb24ocCx3KXtwLmV4cG9ydHM9Zn0sZnVuY3Rpb24ocCx3LG0pe3ZhciBiPW0oMCkuRkRMYXlvdXRDb25zdGFudHM7ZnVuY3Rpb24gRSgpe31mb3IodmFyIF8gaW4gYilFW19dPWJbX107RS5ERUZBVUxUX1VTRV9NVUxUSV9MRVZFTF9TQ0FMSU5HPSExLEUuREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTj1iLkRFRkFVTFRfRURHRV9MRU5HVEgsRS5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OPTYwLEUuVElMRT0hMCxFLlRJTElOR19QQURESU5HX1ZFUlRJQ0FMPTEwLEUuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTD0xMCxFLlRSRUVfUkVEVUNUSU9OX09OX0lOQ1JFTUVOVEFMPSExLHAuZXhwb3J0cz1FfSxmdW5jdGlvbihwLHcsbSl7dmFyIGI9bSgwKS5GRExheW91dEVkZ2U7ZnVuY3Rpb24gRShBLEksQil7Yi5jYWxsKHRoaXMsQSxJLEIpfUUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUpO2Zvcih2YXIgXyBpbiBiKUVbX109YltfXTtwLmV4cG9ydHM9RX0sZnVuY3Rpb24ocCx3LG0pe3ZhciBiPW0oMCkuTEdyYXBoO2Z1bmN0aW9uIEUoQSxJLEIpe2IuY2FsbCh0aGlzLEEsSSxCKX1FLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIucHJvdG90eXBlKTtmb3IodmFyIF8gaW4gYilFW19dPWJbX107cC5leHBvcnRzPUV9LGZ1bmN0aW9uKHAsdyxtKXt2YXIgYj1tKDApLkxHcmFwaE1hbmFnZXI7ZnVuY3Rpb24gRShBKXtiLmNhbGwodGhpcyxBKX1FLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIucHJvdG90eXBlKTtmb3IodmFyIF8gaW4gYilFW19dPWJbX107cC5leHBvcnRzPUV9LGZ1bmN0aW9uKHAsdyxtKXt2YXIgYj1tKDApLkZETGF5b3V0Tm9kZSxFPW0oMCkuSU1hdGg7ZnVuY3Rpb24gXyhJLEIsTixSKXtiLmNhbGwodGhpcyxJLEIsTixSKX1fLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIucHJvdG90eXBlKTtmb3IodmFyIEEgaW4gYilfW0FdPWJbQV07Xy5wcm90b3R5cGUubW92ZT1mdW5jdGlvbigpe3ZhciBJPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldExheW91dCgpO3RoaXMuZGlzcGxhY2VtZW50WD1JLmNvb2xpbmdGYWN0b3IqKHRoaXMuc3ByaW5nRm9yY2VYK3RoaXMucmVwdWxzaW9uRm9yY2VYK3RoaXMuZ3Jhdml0YXRpb25Gb3JjZVgpL3RoaXMubm9PZkNoaWxkcmVuLHRoaXMuZGlzcGxhY2VtZW50WT1JLmNvb2xpbmdGYWN0b3IqKHRoaXMuc3ByaW5nRm9yY2VZK3RoaXMucmVwdWxzaW9uRm9yY2VZK3RoaXMuZ3Jhdml0YXRpb25Gb3JjZVkpL3RoaXMubm9PZkNoaWxkcmVuLE1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WCk+SS5jb29saW5nRmFjdG9yKkkubWF4Tm9kZURpc3BsYWNlbWVudCYmKHRoaXMuZGlzcGxhY2VtZW50WD1JLmNvb2xpbmdGYWN0b3IqSS5tYXhOb2RlRGlzcGxhY2VtZW50KkUuc2lnbih0aGlzLmRpc3BsYWNlbWVudFgpKSxNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFkpPkkuY29vbGluZ0ZhY3RvcipJLm1heE5vZGVEaXNwbGFjZW1lbnQmJih0aGlzLmRpc3BsYWNlbWVudFk9SS5jb29saW5nRmFjdG9yKkkubWF4Tm9kZURpc3BsYWNlbWVudCpFLnNpZ24odGhpcy5kaXNwbGFjZW1lbnRZKSksdGhpcy5jaGlsZD09bnVsbD90aGlzLm1vdmVCeSh0aGlzLmRpc3BsYWNlbWVudFgsdGhpcy5kaXNwbGFjZW1lbnRZKTp0aGlzLmNoaWxkLmdldE5vZGVzKCkubGVuZ3RoPT0wP3RoaXMubW92ZUJ5KHRoaXMuZGlzcGxhY2VtZW50WCx0aGlzLmRpc3BsYWNlbWVudFkpOnRoaXMucHJvcG9nYXRlRGlzcGxhY2VtZW50VG9DaGlsZHJlbih0aGlzLmRpc3BsYWNlbWVudFgsdGhpcy5kaXNwbGFjZW1lbnRZKSxJLnRvdGFsRGlzcGxhY2VtZW50Kz1NYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFgpK01hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WSksdGhpcy5zcHJpbmdGb3JjZVg9MCx0aGlzLnNwcmluZ0ZvcmNlWT0wLHRoaXMucmVwdWxzaW9uRm9yY2VYPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVk9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VYPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWT0wLHRoaXMuZGlzcGxhY2VtZW50WD0wLHRoaXMuZGlzcGxhY2VtZW50WT0wfSxfLnByb3RvdHlwZS5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuPWZ1bmN0aW9uKEksQil7Zm9yKHZhciBOPXRoaXMuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLFIsej0wO3o8Ti5sZW5ndGg7eisrKVI9Tlt6XSxSLmdldENoaWxkKCk9PW51bGw/KFIubW92ZUJ5KEksQiksUi5kaXNwbGFjZW1lbnRYKz1JLFIuZGlzcGxhY2VtZW50WSs9Qik6Ui5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuKEksQil9LF8ucHJvdG90eXBlLnNldFByZWQxPWZ1bmN0aW9uKEkpe3RoaXMucHJlZDE9SX0sXy5wcm90b3R5cGUuZ2V0UHJlZDE9ZnVuY3Rpb24oKXtyZXR1cm4gcHJlZDF9LF8ucHJvdG90eXBlLmdldFByZWQyPWZ1bmN0aW9uKCl7cmV0dXJuIHByZWQyfSxfLnByb3RvdHlwZS5zZXROZXh0PWZ1bmN0aW9uKEkpe3RoaXMubmV4dD1JfSxfLnByb3RvdHlwZS5nZXROZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIG5leHR9LF8ucHJvdG90eXBlLnNldFByb2Nlc3NlZD1mdW5jdGlvbihJKXt0aGlzLnByb2Nlc3NlZD1JfSxfLnByb3RvdHlwZS5pc1Byb2Nlc3NlZD1mdW5jdGlvbigpe3JldHVybiBwcm9jZXNzZWR9LHAuZXhwb3J0cz1ffSxmdW5jdGlvbihwLHcsbSl7dmFyIGI9bSgwKS5GRExheW91dCxFPW0oNCksXz1tKDMpLEE9bSg1KSxJPW0oMiksQj1tKDEpLE49bSgwKS5GRExheW91dENvbnN0YW50cyxSPW0oMCkuTGF5b3V0Q29uc3RhbnRzLHo9bSgwKS5Qb2ludCxXPW0oMCkuUG9pbnRELGV0PW0oMCkuTGF5b3V0LHN0PW0oMCkuSW50ZWdlcixhdD1tKDApLklHZW9tZXRyeSxidD1tKDApLkxHcmFwaCxtdD1tKDApLlRyYW5zZm9ybTtmdW5jdGlvbiB5dCgpe2IuY2FsbCh0aGlzKSx0aGlzLnRvQmVUaWxlZD17fX15dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiLnByb3RvdHlwZSk7Zm9yKHZhciBmdCBpbiBiKXl0W2Z0XT1iW2Z0XTt5dC5wcm90b3R5cGUubmV3R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKCl7dmFyIHV0PW5ldyBFKHRoaXMpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcj11dCx1dH0seXQucHJvdG90eXBlLm5ld0dyYXBoPWZ1bmN0aW9uKHV0KXtyZXR1cm4gbmV3IF8obnVsbCx0aGlzLmdyYXBoTWFuYWdlcix1dCl9LHl0LnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKHV0KXtyZXR1cm4gbmV3IEEodGhpcy5ncmFwaE1hbmFnZXIsdXQpfSx5dC5wcm90b3R5cGUubmV3RWRnZT1mdW5jdGlvbih1dCl7cmV0dXJuIG5ldyBJKG51bGwsbnVsbCx1dCl9LHl0LnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe2IucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcyxhcmd1bWVudHMpLHRoaXMuaXNTdWJMYXlvdXR8fChCLkRFRkFVTFRfRURHRV9MRU5HVEg8MTA/dGhpcy5pZGVhbEVkZ2VMZW5ndGg9MTA6dGhpcy5pZGVhbEVkZ2VMZW5ndGg9Qi5ERUZBVUxUX0VER0VfTEVOR1RILHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbj1CLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OLHRoaXMuc3ByaW5nQ29uc3RhbnQ9Ti5ERUZBVUxUX1NQUklOR19TVFJFTkdUSCx0aGlzLnJlcHVsc2lvbkNvbnN0YW50PU4uREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEgsdGhpcy5ncmF2aXR5Q29uc3RhbnQ9Ti5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudD1OLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSCx0aGlzLmdyYXZpdHlSYW5nZUZhY3Rvcj1OLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5jb21wb3VuZEdyYXZpdHlSYW5nZUZhY3Rvcj1OLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5wcnVuZWROb2Rlc0FsbD1bXSx0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucz0wLHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zPTAsdGhpcy5pc1RyZWVHcm93aW5nPSExLHRoaXMuaXNHcm93dGhGaW5pc2hlZD0hMSx0aGlzLmNvb2xpbmdDeWNsZT0wLHRoaXMubWF4Q29vbGluZ0N5Y2xlPXRoaXMubWF4SXRlcmF0aW9ucy9OLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRCx0aGlzLmZpbmFsVGVtcGVyYXR1cmU9Ti5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0QvdGhpcy5tYXhJdGVyYXRpb25zLHRoaXMuY29vbGluZ0FkanVzdGVyPTEpfSx5dC5wcm90b3R5cGUubGF5b3V0PWZ1bmN0aW9uKCl7dmFyIHV0PVIuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEO3JldHVybiB1dCYmKHRoaXMuY3JlYXRlQmVuZHBvaW50cygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKSksdGhpcy5sZXZlbD0wLHRoaXMuY2xhc3NpY0xheW91dCgpfSx5dC5wcm90b3R5cGUuY2xhc3NpY0xheW91dD1mdW5jdGlvbigpe2lmKHRoaXMubm9kZXNXaXRoR3Jhdml0eT10aGlzLmNhbGN1bGF0ZU5vZGVzVG9BcHBseUdyYXZpdGF0aW9uVG8oKSx0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbih0aGlzLm5vZGVzV2l0aEdyYXZpdHkpLHRoaXMuY2FsY05vT2ZDaGlsZHJlbkZvckFsbE5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9ycygpLHRoaXMuZ3JhcGhNYW5hZ2VyLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzKCksdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmNhbGNFc3RpbWF0ZWRTaXplKCksdGhpcy5jYWxjSWRlYWxFZGdlTGVuZ3RocygpLHRoaXMuaW5jcmVtZW50YWwpe2lmKEIuVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUwpe3RoaXMucmVkdWNlVHJlZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7dmFyIHZ0PW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxYPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oVHQpe3JldHVybiB2dC5oYXMoVHQpfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oWCl9fWVsc2V7dmFyIHV0PXRoaXMuZ2V0RmxhdEZvcmVzdCgpO2lmKHV0Lmxlbmd0aD4wKXRoaXMucG9zaXRpb25Ob2Rlc1JhZGlhbGx5KHV0KTtlbHNle3RoaXMucmVkdWNlVHJlZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7dmFyIHZ0PW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxYPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24ocHQpe3JldHVybiB2dC5oYXMocHQpfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oWCksdGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkoKX19cmV0dXJuIHRoaXMuaW5pdFNwcmluZ0VtYmVkZGVyKCksdGhpcy5ydW5TcHJpbmdFbWJlZGRlcigpLCEwfSx5dC5wcm90b3R5cGUudGljaz1mdW5jdGlvbigpe2lmKHRoaXMudG90YWxJdGVyYXRpb25zKyssdGhpcy50b3RhbEl0ZXJhdGlvbnM9PT10aGlzLm1heEl0ZXJhdGlvbnMmJiF0aGlzLmlzVHJlZUdyb3dpbmcmJiF0aGlzLmlzR3Jvd3RoRmluaXNoZWQpaWYodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGg+MCl0aGlzLmlzVHJlZUdyb3dpbmc9ITA7ZWxzZSByZXR1cm4hMDtpZih0aGlzLnRvdGFsSXRlcmF0aW9ucyVOLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRD09MCYmIXRoaXMuaXNUcmVlR3Jvd2luZyYmIXRoaXMuaXNHcm93dGhGaW5pc2hlZCl7aWYodGhpcy5pc0NvbnZlcmdlZCgpKWlmKHRoaXMucHJ1bmVkTm9kZXNBbGwubGVuZ3RoPjApdGhpcy5pc1RyZWVHcm93aW5nPSEwO2Vsc2UgcmV0dXJuITA7dGhpcy5jb29saW5nQ3ljbGUrKyx0aGlzLmxheW91dFF1YWxpdHk9PTA/dGhpcy5jb29saW5nQWRqdXN0ZXI9dGhpcy5jb29saW5nQ3ljbGU6dGhpcy5sYXlvdXRRdWFsaXR5PT0xJiYodGhpcy5jb29saW5nQWRqdXN0ZXI9dGhpcy5jb29saW5nQ3ljbGUvMyksdGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3ItTWF0aC5wb3codGhpcy5jb29saW5nQ3ljbGUsTWF0aC5sb2coMTAwKih0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yLXRoaXMuZmluYWxUZW1wZXJhdHVyZSkpL01hdGgubG9nKHRoaXMubWF4Q29vbGluZ0N5Y2xlKSkvMTAwKnRoaXMuY29vbGluZ0FkanVzdGVyLHRoaXMuZmluYWxUZW1wZXJhdHVyZSksdGhpcy5hbmltYXRpb25QZXJpb2Q9TWF0aC5jZWlsKHRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZCpNYXRoLnNxcnQodGhpcy5jb29saW5nRmFjdG9yKSl9aWYodGhpcy5pc1RyZWVHcm93aW5nKXtpZih0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucyUxMD09MClpZih0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aD4wKXt0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLnVwZGF0ZUdyaWQoKSx0aGlzLmdyb3dUcmVlKHRoaXMucHJ1bmVkTm9kZXNBbGwpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTt2YXIgdXQ9bmV3IFNldCh0aGlzLmdldEFsbE5vZGVzKCkpLHZ0PXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oVSl7cmV0dXJuIHV0LmhhcyhVKX0pO3RoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKHZ0KSx0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLnVwZGF0ZUdyaWQoKSx0aGlzLmNvb2xpbmdGYWN0b3I9Ti5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMfWVsc2UgdGhpcy5pc1RyZWVHcm93aW5nPSExLHRoaXMuaXNHcm93dGhGaW5pc2hlZD0hMDt0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucysrfWlmKHRoaXMuaXNHcm93dGhGaW5pc2hlZCl7aWYodGhpcy5pc0NvbnZlcmdlZCgpKXJldHVybiEwO3RoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zJTEwPT0wJiYodGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy51cGRhdGVHcmlkKCkpLHRoaXMuY29vbGluZ0ZhY3Rvcj1OLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwqKCgxMDAtdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMpLzEwMCksdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMrK312YXIgWD0hdGhpcy5pc1RyZWVHcm93aW5nJiYhdGhpcy5pc0dyb3d0aEZpbmlzaGVkLHB0PXRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zJTEwPT0xJiZ0aGlzLmlzVHJlZUdyb3dpbmd8fHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zJTEwPT0xJiZ0aGlzLmlzR3Jvd3RoRmluaXNoZWQ7cmV0dXJuIHRoaXMudG90YWxEaXNwbGFjZW1lbnQ9MCx0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLmNhbGNTcHJpbmdGb3JjZXMoKSx0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZXMoWCxwdCksdGhpcy5jYWxjR3Jhdml0YXRpb25hbEZvcmNlcygpLHRoaXMubW92ZU5vZGVzKCksdGhpcy5hbmltYXRlKCksITF9LHl0LnByb3RvdHlwZS5nZXRQb3NpdGlvbnNEYXRhPWZ1bmN0aW9uKCl7Zm9yKHZhciB1dD10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLHZ0PXt9LFg9MDtYPHV0Lmxlbmd0aDtYKyspe3ZhciBwdD11dFtYXS5yZWN0LFU9dXRbWF0uaWQ7dnRbVV09e2lkOlUseDpwdC5nZXRDZW50ZXJYKCkseTpwdC5nZXRDZW50ZXJZKCksdzpwdC53aWR0aCxoOnB0LmhlaWdodH19cmV0dXJuIHZ0fSx5dC5wcm90b3R5cGUucnVuU3ByaW5nRW1iZWRkZXI9ZnVuY3Rpb24oKXt0aGlzLmluaXRpYWxBbmltYXRpb25QZXJpb2Q9MjUsdGhpcy5hbmltYXRpb25QZXJpb2Q9dGhpcy5pbml0aWFsQW5pbWF0aW9uUGVyaW9kO3ZhciB1dD0hMTtpZihOLkFOSU1BVEU9PT0iZHVyaW5nIil0aGlzLmVtaXQoImxheW91dHN0YXJ0ZWQiKTtlbHNle2Zvcig7IXV0Oyl1dD10aGlzLnRpY2soKTt0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKX19LHl0LnByb3RvdHlwZS5jYWxjdWxhdGVOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvblRvPWZ1bmN0aW9uKCl7dmFyIHV0PVtdLHZ0LFg9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0R3JhcGhzKCkscHQ9WC5sZW5ndGgsVTtmb3IoVT0wO1U8cHQ7VSsrKXZ0PVhbVV0sdnQudXBkYXRlQ29ubmVjdGVkKCksdnQuaXNDb25uZWN0ZWR8fCh1dD11dC5jb25jYXQodnQuZ2V0Tm9kZXMoKSkpO3JldHVybiB1dH0seXQucHJvdG90eXBlLmNyZWF0ZUJlbmRwb2ludHM9ZnVuY3Rpb24oKXt2YXIgdXQ9W107dXQ9dXQuY29uY2F0KHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkpO3ZhciB2dD1uZXcgU2V0LFg7Zm9yKFg9MDtYPHV0Lmxlbmd0aDtYKyspe3ZhciBwdD11dFtYXTtpZighdnQuaGFzKHB0KSl7dmFyIFU9cHQuZ2V0U291cmNlKCksVHQ9cHQuZ2V0VGFyZ2V0KCk7aWYoVT09VHQpcHQuZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IFcpLHB0LmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBXKSx0aGlzLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzKHB0KSx2dC5hZGQocHQpO2Vsc2V7dmFyIG50PVtdO2lmKG50PW50LmNvbmNhdChVLmdldEVkZ2VMaXN0VG9Ob2RlKFR0KSksbnQ9bnQuY29uY2F0KFR0LmdldEVkZ2VMaXN0VG9Ob2RlKFUpKSwhdnQuaGFzKG50WzBdKSl7aWYobnQubGVuZ3RoPjEpe3ZhciBJdDtmb3IoSXQ9MDtJdDxudC5sZW5ndGg7SXQrKyl7dmFyIE90PW50W0l0XTtPdC5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgVyksdGhpcy5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cyhPdCl9fW50LmZvckVhY2goZnVuY3Rpb24oQnQpe3Z0LmFkZChCdCl9KX19fWlmKHZ0LnNpemU9PXV0Lmxlbmd0aClicmVha319LHl0LnByb3RvdHlwZS5wb3NpdGlvbk5vZGVzUmFkaWFsbHk9ZnVuY3Rpb24odXQpe2Zvcih2YXIgdnQ9bmV3IHooMCwwKSxYPU1hdGguY2VpbChNYXRoLnNxcnQodXQubGVuZ3RoKSkscHQ9MCxVPTAsVHQ9MCxudD1uZXcgVygwLDApLEl0PTA7SXQ8dXQubGVuZ3RoO0l0Kyspe0l0JVg9PTAmJihUdD0wLFU9cHQsSXQhPTAmJihVKz1CLkRFRkFVTFRfQ09NUE9ORU5UX1NFUEVSQVRJT04pLHB0PTApO3ZhciBPdD11dFtJdF0sQnQ9ZXQuZmluZENlbnRlck9mVHJlZShPdCk7dnQueD1UdCx2dC55PVUsbnQ9eXQucmFkaWFsTGF5b3V0KE90LEJ0LHZ0KSxudC55PnB0JiYocHQ9TWF0aC5mbG9vcihudC55KSksVHQ9TWF0aC5mbG9vcihudC54K0IuREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTil9dGhpcy50cmFuc2Zvcm0obmV3IFcoUi5XT1JMRF9DRU5URVJfWC1udC54LzIsUi5XT1JMRF9DRU5URVJfWS1udC55LzIpKX0seXQucmFkaWFsTGF5b3V0PWZ1bmN0aW9uKHV0LHZ0LFgpe3ZhciBwdD1NYXRoLm1heCh0aGlzLm1heERpYWdvbmFsSW5UcmVlKHV0KSxCLkRFRkFVTFRfUkFESUFMX1NFUEFSQVRJT04pO3l0LmJyYW5jaFJhZGlhbExheW91dCh2dCxudWxsLDAsMzU5LDAscHQpO3ZhciBVPWJ0LmNhbGN1bGF0ZUJvdW5kcyh1dCksVHQ9bmV3IG10O1R0LnNldERldmljZU9yZ1goVS5nZXRNaW5YKCkpLFR0LnNldERldmljZU9yZ1koVS5nZXRNaW5ZKCkpLFR0LnNldFdvcmxkT3JnWChYLngpLFR0LnNldFdvcmxkT3JnWShYLnkpO2Zvcih2YXIgbnQ9MDtudDx1dC5sZW5ndGg7bnQrKyl7dmFyIEl0PXV0W250XTtJdC50cmFuc2Zvcm0oVHQpfXZhciBPdD1uZXcgVyhVLmdldE1heFgoKSxVLmdldE1heFkoKSk7cmV0dXJuIFR0LmludmVyc2VUcmFuc2Zvcm1Qb2ludChPdCl9LHl0LmJyYW5jaFJhZGlhbExheW91dD1mdW5jdGlvbih1dCx2dCxYLHB0LFUsVHQpe3ZhciBudD0ocHQtWCsxKS8yO250PDAmJihudCs9MTgwKTt2YXIgSXQ9KG50K1gpJTM2MCxPdD1JdCphdC5UV09fUEkvMzYwLEJ0PVUqTWF0aC5jb3MoT3QpLEV0PVUqTWF0aC5zaW4oT3QpO3V0LnNldENlbnRlcihCdCxFdCk7dmFyIFo9W107Wj1aLmNvbmNhdCh1dC5nZXRFZGdlcygpKTt2YXIgQ3Q9Wi5sZW5ndGg7dnQhPW51bGwmJkN0LS07Zm9yKHZhciB4dD0wLEh0PVoubGVuZ3RoLExlLEZ0PXV0LmdldEVkZ2VzQmV0d2Vlbih2dCk7RnQubGVuZ3RoPjE7KXt2YXIgZ249RnRbMF07RnQuc3BsaWNlKDAsMSk7dmFyIFNlPVouaW5kZXhPZihnbik7U2U+PTAmJlouc3BsaWNlKFNlLDEpLEh0LS0sQ3QtLX12dCE9bnVsbD9MZT0oWi5pbmRleE9mKEZ0WzBdKSsxKSVIdDpMZT0wO2Zvcih2YXIgbWU9TWF0aC5hYnMocHQtWCkvQ3QsVmU9TGU7eHQhPUN0O1ZlPSsrVmUlSHQpe3ZhciBZZT1aW1ZlXS5nZXRPdGhlckVuZCh1dCk7aWYoWWUhPXZ0KXt2YXIgY2U9KFgreHQqbWUpJTM2MCxrZT0oY2UrbWUpJTM2MDt5dC5icmFuY2hSYWRpYWxMYXlvdXQoWWUsdXQsY2Usa2UsVStUdCxUdCkseHQrK319fSx5dC5tYXhEaWFnb25hbEluVHJlZT1mdW5jdGlvbih1dCl7Zm9yKHZhciB2dD1zdC5NSU5fVkFMVUUsWD0wO1g8dXQubGVuZ3RoO1grKyl7dmFyIHB0PXV0W1hdLFU9cHQuZ2V0RGlhZ29uYWwoKTtVPnZ0JiYodnQ9VSl9cmV0dXJuIHZ0fSx5dC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvblJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIDIqKHRoaXMubGV2ZWwrMSkqdGhpcy5pZGVhbEVkZ2VMZW5ndGh9LHl0LnByb3RvdHlwZS5ncm91cFplcm9EZWdyZWVNZW1iZXJzPWZ1bmN0aW9uKCl7dmFyIHV0PXRoaXMsdnQ9e307dGhpcy5tZW1iZXJHcm91cHM9e30sdGhpcy5pZFRvRHVtbXlOb2RlPXt9O2Zvcih2YXIgWD1bXSxwdD10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLFU9MDtVPHB0Lmxlbmd0aDtVKyspe3ZhciBUdD1wdFtVXSxudD1UdC5nZXRQYXJlbnQoKTt0aGlzLmdldE5vZGVEZWdyZWVXaXRoQ2hpbGRyZW4oVHQpPT09MCYmKG50LmlkPT1udWxsfHwhdGhpcy5nZXRUb0JlVGlsZWQobnQpKSYmWC5wdXNoKFR0KX1mb3IodmFyIFU9MDtVPFgubGVuZ3RoO1UrKyl7dmFyIFR0PVhbVV0sSXQ9VHQuZ2V0UGFyZW50KCkuaWQ7dHlwZW9mIHZ0W0l0XT4idSImJih2dFtJdF09W10pLHZ0W0l0XT12dFtJdF0uY29uY2F0KFR0KX1PYmplY3Qua2V5cyh2dCkuZm9yRWFjaChmdW5jdGlvbihPdCl7aWYodnRbT3RdLmxlbmd0aD4xKXt2YXIgQnQ9IkR1bW15Q29tcG91bmRfIitPdDt1dC5tZW1iZXJHcm91cHNbQnRdPXZ0W090XTt2YXIgRXQ9dnRbT3RdWzBdLmdldFBhcmVudCgpLFo9bmV3IEEodXQuZ3JhcGhNYW5hZ2VyKTtaLmlkPUJ0LFoucGFkZGluZ0xlZnQ9RXQucGFkZGluZ0xlZnR8fDAsWi5wYWRkaW5nUmlnaHQ9RXQucGFkZGluZ1JpZ2h0fHwwLFoucGFkZGluZ0JvdHRvbT1FdC5wYWRkaW5nQm90dG9tfHwwLFoucGFkZGluZ1RvcD1FdC5wYWRkaW5nVG9wfHwwLHV0LmlkVG9EdW1teU5vZGVbQnRdPVo7dmFyIEN0PXV0LmdldEdyYXBoTWFuYWdlcigpLmFkZCh1dC5uZXdHcmFwaCgpLFopLHh0PUV0LmdldENoaWxkKCk7eHQuYWRkKFopO2Zvcih2YXIgSHQ9MDtIdDx2dFtPdF0ubGVuZ3RoO0h0Kyspe3ZhciBMZT12dFtPdF1bSHRdO3h0LnJlbW92ZShMZSksQ3QuYWRkKExlKX19fSl9LHl0LnByb3RvdHlwZS5jbGVhckNvbXBvdW5kcz1mdW5jdGlvbigpe3ZhciB1dD17fSx2dD17fTt0aGlzLnBlcmZvcm1ERlNPbkNvbXBvdW5kcygpO2Zvcih2YXIgWD0wO1g8dGhpcy5jb21wb3VuZE9yZGVyLmxlbmd0aDtYKyspdnRbdGhpcy5jb21wb3VuZE9yZGVyW1hdLmlkXT10aGlzLmNvbXBvdW5kT3JkZXJbWF0sdXRbdGhpcy5jb21wb3VuZE9yZGVyW1hdLmlkXT1bXS5jb25jYXQodGhpcy5jb21wb3VuZE9yZGVyW1hdLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSksdGhpcy5ncmFwaE1hbmFnZXIucmVtb3ZlKHRoaXMuY29tcG91bmRPcmRlcltYXS5nZXRDaGlsZCgpKSx0aGlzLmNvbXBvdW5kT3JkZXJbWF0uY2hpbGQ9bnVsbDt0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCksdGhpcy50aWxlQ29tcG91bmRNZW1iZXJzKHV0LHZ0KX0seXQucHJvdG90eXBlLmNsZWFyWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgdXQ9dGhpcyx2dD10aGlzLnRpbGVkWmVyb0RlZ3JlZVBhY2s9W107T2JqZWN0LmtleXModGhpcy5tZW1iZXJHcm91cHMpLmZvckVhY2goZnVuY3Rpb24oWCl7dmFyIHB0PXV0LmlkVG9EdW1teU5vZGVbWF07dnRbWF09dXQudGlsZU5vZGVzKHV0Lm1lbWJlckdyb3Vwc1tYXSxwdC5wYWRkaW5nTGVmdCtwdC5wYWRkaW5nUmlnaHQpLHB0LnJlY3Qud2lkdGg9dnRbWF0ud2lkdGgscHQucmVjdC5oZWlnaHQ9dnRbWF0uaGVpZ2h0fSl9LHl0LnByb3RvdHlwZS5yZXBvcHVsYXRlQ29tcG91bmRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB1dD10aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoLTE7dXQ+PTA7dXQtLSl7dmFyIHZ0PXRoaXMuY29tcG91bmRPcmRlclt1dF0sWD12dC5pZCxwdD12dC5wYWRkaW5nTGVmdCxVPXZ0LnBhZGRpbmdUb3A7dGhpcy5hZGp1c3RMb2NhdGlvbnModGhpcy50aWxlZE1lbWJlclBhY2tbWF0sdnQucmVjdC54LHZ0LnJlY3QueSxwdCxVKX19LHl0LnByb3RvdHlwZS5yZXBvcHVsYXRlWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgdXQ9dGhpcyx2dD10aGlzLnRpbGVkWmVyb0RlZ3JlZVBhY2s7T2JqZWN0LmtleXModnQpLmZvckVhY2goZnVuY3Rpb24oWCl7dmFyIHB0PXV0LmlkVG9EdW1teU5vZGVbWF0sVT1wdC5wYWRkaW5nTGVmdCxUdD1wdC5wYWRkaW5nVG9wO3V0LmFkanVzdExvY2F0aW9ucyh2dFtYXSxwdC5yZWN0LngscHQucmVjdC55LFUsVHQpfSl9LHl0LnByb3RvdHlwZS5nZXRUb0JlVGlsZWQ9ZnVuY3Rpb24odXQpe3ZhciB2dD11dC5pZDtpZih0aGlzLnRvQmVUaWxlZFt2dF0hPW51bGwpcmV0dXJuIHRoaXMudG9CZVRpbGVkW3Z0XTt2YXIgWD11dC5nZXRDaGlsZCgpO2lmKFg9PW51bGwpcmV0dXJuIHRoaXMudG9CZVRpbGVkW3Z0XT0hMSwhMTtmb3IodmFyIHB0PVguZ2V0Tm9kZXMoKSxVPTA7VTxwdC5sZW5ndGg7VSsrKXt2YXIgVHQ9cHRbVV07aWYodGhpcy5nZXROb2RlRGVncmVlKFR0KT4wKXJldHVybiB0aGlzLnRvQmVUaWxlZFt2dF09ITEsITE7aWYoVHQuZ2V0Q2hpbGQoKT09bnVsbCl7dGhpcy50b0JlVGlsZWRbVHQuaWRdPSExO2NvbnRpbnVlfWlmKCF0aGlzLmdldFRvQmVUaWxlZChUdCkpcmV0dXJuIHRoaXMudG9CZVRpbGVkW3Z0XT0hMSwhMX1yZXR1cm4gdGhpcy50b0JlVGlsZWRbdnRdPSEwLCEwfSx5dC5wcm90b3R5cGUuZ2V0Tm9kZURlZ3JlZT1mdW5jdGlvbih1dCl7dXQuaWQ7Zm9yKHZhciB2dD11dC5nZXRFZGdlcygpLFg9MCxwdD0wO3B0PHZ0Lmxlbmd0aDtwdCsrKXt2YXIgVT12dFtwdF07VS5nZXRTb3VyY2UoKS5pZCE9PVUuZ2V0VGFyZ2V0KCkuaWQmJihYPVgrMSl9cmV0dXJuIFh9LHl0LnByb3RvdHlwZS5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuPWZ1bmN0aW9uKHV0KXt2YXIgdnQ9dGhpcy5nZXROb2RlRGVncmVlKHV0KTtpZih1dC5nZXRDaGlsZCgpPT1udWxsKXJldHVybiB2dDtmb3IodmFyIFg9dXQuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLHB0PTA7cHQ8WC5sZW5ndGg7cHQrKyl7dmFyIFU9WFtwdF07dnQrPXRoaXMuZ2V0Tm9kZURlZ3JlZVdpdGhDaGlsZHJlbihVKX1yZXR1cm4gdnR9LHl0LnByb3RvdHlwZS5wZXJmb3JtREZTT25Db21wb3VuZHM9ZnVuY3Rpb24oKXt0aGlzLmNvbXBvdW5kT3JkZXI9W10sdGhpcy5maWxsQ29tcGV4T3JkZXJCeURGUyh0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKSl9LHl0LnByb3RvdHlwZS5maWxsQ29tcGV4T3JkZXJCeURGUz1mdW5jdGlvbih1dCl7Zm9yKHZhciB2dD0wO3Z0PHV0Lmxlbmd0aDt2dCsrKXt2YXIgWD11dFt2dF07WC5nZXRDaGlsZCgpIT1udWxsJiZ0aGlzLmZpbGxDb21wZXhPcmRlckJ5REZTKFguZ2V0Q2hpbGQoKS5nZXROb2RlcygpKSx0aGlzLmdldFRvQmVUaWxlZChYKSYmdGhpcy5jb21wb3VuZE9yZGVyLnB1c2goWCl9fSx5dC5wcm90b3R5cGUuYWRqdXN0TG9jYXRpb25zPWZ1bmN0aW9uKHV0LHZ0LFgscHQsVSl7dnQrPXB0LFgrPVU7Zm9yKHZhciBUdD12dCxudD0wO250PHV0LnJvd3MubGVuZ3RoO250Kyspe3ZhciBJdD11dC5yb3dzW250XTt2dD1UdDtmb3IodmFyIE90PTAsQnQ9MDtCdDxJdC5sZW5ndGg7QnQrKyl7dmFyIEV0PUl0W0J0XTtFdC5yZWN0Lng9dnQsRXQucmVjdC55PVgsdnQrPUV0LnJlY3Qud2lkdGgrdXQuaG9yaXpvbnRhbFBhZGRpbmcsRXQucmVjdC5oZWlnaHQ+T3QmJihPdD1FdC5yZWN0LmhlaWdodCl9WCs9T3QrdXQudmVydGljYWxQYWRkaW5nfX0seXQucHJvdG90eXBlLnRpbGVDb21wb3VuZE1lbWJlcnM9ZnVuY3Rpb24odXQsdnQpe3ZhciBYPXRoaXM7dGhpcy50aWxlZE1lbWJlclBhY2s9W10sT2JqZWN0LmtleXModXQpLmZvckVhY2goZnVuY3Rpb24ocHQpe3ZhciBVPXZ0W3B0XTtYLnRpbGVkTWVtYmVyUGFja1twdF09WC50aWxlTm9kZXModXRbcHRdLFUucGFkZGluZ0xlZnQrVS5wYWRkaW5nUmlnaHQpLFUucmVjdC53aWR0aD1YLnRpbGVkTWVtYmVyUGFja1twdF0ud2lkdGgsVS5yZWN0LmhlaWdodD1YLnRpbGVkTWVtYmVyUGFja1twdF0uaGVpZ2h0fSl9LHl0LnByb3RvdHlwZS50aWxlTm9kZXM9ZnVuY3Rpb24odXQsdnQpe3ZhciBYPUIuVElMSU5HX1BBRERJTkdfVkVSVElDQUwscHQ9Qi5USUxJTkdfUEFERElOR19IT1JJWk9OVEFMLFU9e3Jvd3M6W10scm93V2lkdGg6W10scm93SGVpZ2h0OltdLHdpZHRoOjAsaGVpZ2h0OnZ0LHZlcnRpY2FsUGFkZGluZzpYLGhvcml6b250YWxQYWRkaW5nOnB0fTt1dC5zb3J0KGZ1bmN0aW9uKEl0LE90KXtyZXR1cm4gSXQucmVjdC53aWR0aCpJdC5yZWN0LmhlaWdodD5PdC5yZWN0LndpZHRoKk90LnJlY3QuaGVpZ2h0Py0xOkl0LnJlY3Qud2lkdGgqSXQucmVjdC5oZWlnaHQ8T3QucmVjdC53aWR0aCpPdC5yZWN0LmhlaWdodD8xOjB9KTtmb3IodmFyIFR0PTA7VHQ8dXQubGVuZ3RoO1R0Kyspe3ZhciBudD11dFtUdF07VS5yb3dzLmxlbmd0aD09MD90aGlzLmluc2VydE5vZGVUb1JvdyhVLG50LDAsdnQpOnRoaXMuY2FuQWRkSG9yaXpvbnRhbChVLG50LnJlY3Qud2lkdGgsbnQucmVjdC5oZWlnaHQpP3RoaXMuaW5zZXJ0Tm9kZVRvUm93KFUsbnQsdGhpcy5nZXRTaG9ydGVzdFJvd0luZGV4KFUpLHZ0KTp0aGlzLmluc2VydE5vZGVUb1JvdyhVLG50LFUucm93cy5sZW5ndGgsdnQpLHRoaXMuc2hpZnRUb0xhc3RSb3coVSl9cmV0dXJuIFV9LHl0LnByb3RvdHlwZS5pbnNlcnROb2RlVG9Sb3c9ZnVuY3Rpb24odXQsdnQsWCxwdCl7dmFyIFU9cHQ7aWYoWD09dXQucm93cy5sZW5ndGgpe3ZhciBUdD1bXTt1dC5yb3dzLnB1c2goVHQpLHV0LnJvd1dpZHRoLnB1c2goVSksdXQucm93SGVpZ2h0LnB1c2goMCl9dmFyIG50PXV0LnJvd1dpZHRoW1hdK3Z0LnJlY3Qud2lkdGg7dXQucm93c1tYXS5sZW5ndGg+MCYmKG50Kz11dC5ob3Jpem9udGFsUGFkZGluZyksdXQucm93V2lkdGhbWF09bnQsdXQud2lkdGg8bnQmJih1dC53aWR0aD1udCk7dmFyIEl0PXZ0LnJlY3QuaGVpZ2h0O1g+MCYmKEl0Kz11dC52ZXJ0aWNhbFBhZGRpbmcpO3ZhciBPdD0wO0l0PnV0LnJvd0hlaWdodFtYXSYmKE90PXV0LnJvd0hlaWdodFtYXSx1dC5yb3dIZWlnaHRbWF09SXQsT3Q9dXQucm93SGVpZ2h0W1hdLU90KSx1dC5oZWlnaHQrPU90LHV0LnJvd3NbWF0ucHVzaCh2dCl9LHl0LnByb3RvdHlwZS5nZXRTaG9ydGVzdFJvd0luZGV4PWZ1bmN0aW9uKHV0KXtmb3IodmFyIHZ0PS0xLFg9TnVtYmVyLk1BWF9WQUxVRSxwdD0wO3B0PHV0LnJvd3MubGVuZ3RoO3B0KyspdXQucm93V2lkdGhbcHRdPFgmJih2dD1wdCxYPXV0LnJvd1dpZHRoW3B0XSk7cmV0dXJuIHZ0fSx5dC5wcm90b3R5cGUuZ2V0TG9uZ2VzdFJvd0luZGV4PWZ1bmN0aW9uKHV0KXtmb3IodmFyIHZ0PS0xLFg9TnVtYmVyLk1JTl9WQUxVRSxwdD0wO3B0PHV0LnJvd3MubGVuZ3RoO3B0KyspdXQucm93V2lkdGhbcHRdPlgmJih2dD1wdCxYPXV0LnJvd1dpZHRoW3B0XSk7cmV0dXJuIHZ0fSx5dC5wcm90b3R5cGUuY2FuQWRkSG9yaXpvbnRhbD1mdW5jdGlvbih1dCx2dCxYKXt2YXIgcHQ9dGhpcy5nZXRTaG9ydGVzdFJvd0luZGV4KHV0KTtpZihwdDwwKXJldHVybiEwO3ZhciBVPXV0LnJvd1dpZHRoW3B0XTtpZihVK3V0Lmhvcml6b250YWxQYWRkaW5nK3Z0PD11dC53aWR0aClyZXR1cm4hMDt2YXIgVHQ9MDt1dC5yb3dIZWlnaHRbcHRdPFgmJnB0PjAmJihUdD1YK3V0LnZlcnRpY2FsUGFkZGluZy11dC5yb3dIZWlnaHRbcHRdKTt2YXIgbnQ7dXQud2lkdGgtVT49dnQrdXQuaG9yaXpvbnRhbFBhZGRpbmc/bnQ9KHV0LmhlaWdodCtUdCkvKFUrdnQrdXQuaG9yaXpvbnRhbFBhZGRpbmcpOm50PSh1dC5oZWlnaHQrVHQpL3V0LndpZHRoLFR0PVgrdXQudmVydGljYWxQYWRkaW5nO3ZhciBJdDtyZXR1cm4gdXQud2lkdGg8dnQ/SXQ9KHV0LmhlaWdodCtUdCkvdnQ6SXQ9KHV0LmhlaWdodCtUdCkvdXQud2lkdGgsSXQ8MSYmKEl0PTEvSXQpLG50PDEmJihudD0xL250KSxudDxJdH0seXQucHJvdG90eXBlLnNoaWZ0VG9MYXN0Um93PWZ1bmN0aW9uKHV0KXt2YXIgdnQ9dGhpcy5nZXRMb25nZXN0Um93SW5kZXgodXQpLFg9dXQucm93V2lkdGgubGVuZ3RoLTEscHQ9dXQucm93c1t2dF0sVT1wdFtwdC5sZW5ndGgtMV0sVHQ9VS53aWR0aCt1dC5ob3Jpem9udGFsUGFkZGluZztpZih1dC53aWR0aC11dC5yb3dXaWR0aFtYXT5UdCYmdnQhPVgpe3B0LnNwbGljZSgtMSwxKSx1dC5yb3dzW1hdLnB1c2goVSksdXQucm93V2lkdGhbdnRdPXV0LnJvd1dpZHRoW3Z0XS1UdCx1dC5yb3dXaWR0aFtYXT11dC5yb3dXaWR0aFtYXStUdCx1dC53aWR0aD11dC5yb3dXaWR0aFtpbnN0YW5jZS5nZXRMb25nZXN0Um93SW5kZXgodXQpXTtmb3IodmFyIG50PU51bWJlci5NSU5fVkFMVUUsSXQ9MDtJdDxwdC5sZW5ndGg7SXQrKylwdFtJdF0uaGVpZ2h0Pm50JiYobnQ9cHRbSXRdLmhlaWdodCk7dnQ+MCYmKG50Kz11dC52ZXJ0aWNhbFBhZGRpbmcpO3ZhciBPdD11dC5yb3dIZWlnaHRbdnRdK3V0LnJvd0hlaWdodFtYXTt1dC5yb3dIZWlnaHRbdnRdPW50LHV0LnJvd0hlaWdodFtYXTxVLmhlaWdodCt1dC52ZXJ0aWNhbFBhZGRpbmcmJih1dC5yb3dIZWlnaHRbWF09VS5oZWlnaHQrdXQudmVydGljYWxQYWRkaW5nKTt2YXIgQnQ9dXQucm93SGVpZ2h0W3Z0XSt1dC5yb3dIZWlnaHRbWF07dXQuaGVpZ2h0Kz1CdC1PdCx0aGlzLnNoaWZ0VG9MYXN0Um93KHV0KX19LHl0LnByb3RvdHlwZS50aWxpbmdQcmVMYXlvdXQ9ZnVuY3Rpb24oKXtCLlRJTEUmJih0aGlzLmdyb3VwWmVyb0RlZ3JlZU1lbWJlcnMoKSx0aGlzLmNsZWFyQ29tcG91bmRzKCksdGhpcy5jbGVhclplcm9EZWdyZWVNZW1iZXJzKCkpfSx5dC5wcm90b3R5cGUudGlsaW5nUG9zdExheW91dD1mdW5jdGlvbigpe0IuVElMRSYmKHRoaXMucmVwb3B1bGF0ZVplcm9EZWdyZWVNZW1iZXJzKCksdGhpcy5yZXBvcHVsYXRlQ29tcG91bmRzKCkpfSx5dC5wcm90b3R5cGUucmVkdWNlVHJlZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHV0PVtdLHZ0PSEwLFg7dnQ7KXt2YXIgcHQ9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxVPVtdO3Z0PSExO2Zvcih2YXIgVHQ9MDtUdDxwdC5sZW5ndGg7VHQrKylYPXB0W1R0XSxYLmdldEVkZ2VzKCkubGVuZ3RoPT0xJiYhWC5nZXRFZGdlcygpWzBdLmlzSW50ZXJHcmFwaCYmWC5nZXRDaGlsZCgpPT1udWxsJiYoVS5wdXNoKFtYLFguZ2V0RWRnZXMoKVswXSxYLmdldE93bmVyKCldKSx2dD0hMCk7aWYodnQ9PSEwKXtmb3IodmFyIG50PVtdLEl0PTA7SXQ8VS5sZW5ndGg7SXQrKylVW0l0XVswXS5nZXRFZGdlcygpLmxlbmd0aD09MSYmKG50LnB1c2goVVtJdF0pLFVbSXRdWzBdLmdldE93bmVyKCkucmVtb3ZlKFVbSXRdWzBdKSk7dXQucHVzaChudCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKX19dGhpcy5wcnVuZWROb2Rlc0FsbD11dH0seXQucHJvdG90eXBlLmdyb3dUcmVlPWZ1bmN0aW9uKHV0KXtmb3IodmFyIHZ0PXV0Lmxlbmd0aCxYPXV0W3Z0LTFdLHB0LFU9MDtVPFgubGVuZ3RoO1UrKylwdD1YW1VdLHRoaXMuZmluZFBsYWNlZm9yUHJ1bmVkTm9kZShwdCkscHRbMl0uYWRkKHB0WzBdKSxwdFsyXS5hZGQocHRbMV0scHRbMV0uc291cmNlLHB0WzFdLnRhcmdldCk7dXQuc3BsaWNlKHV0Lmxlbmd0aC0xLDEpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbEVkZ2VzKCl9LHl0LnByb3RvdHlwZS5maW5kUGxhY2Vmb3JQcnVuZWROb2RlPWZ1bmN0aW9uKHV0KXt2YXIgdnQsWCxwdD11dFswXTtwdD09dXRbMV0uc291cmNlP1g9dXRbMV0udGFyZ2V0Olg9dXRbMV0uc291cmNlO3ZhciBVPVguc3RhcnRYLFR0PVguZmluaXNoWCxudD1YLnN0YXJ0WSxJdD1YLmZpbmlzaFksT3Q9MCxCdD0wLEV0PTAsWj0wLEN0PVtPdCxFdCxCdCxaXTtpZihudD4wKWZvcih2YXIgeHQ9VTt4dDw9VHQ7eHQrKylDdFswXSs9dGhpcy5ncmlkW3h0XVtudC0xXS5sZW5ndGgrdGhpcy5ncmlkW3h0XVtudF0ubGVuZ3RoLTE7aWYoVHQ8dGhpcy5ncmlkLmxlbmd0aC0xKWZvcih2YXIgeHQ9bnQ7eHQ8PUl0O3h0KyspQ3RbMV0rPXRoaXMuZ3JpZFtUdCsxXVt4dF0ubGVuZ3RoK3RoaXMuZ3JpZFtUdF1beHRdLmxlbmd0aC0xO2lmKEl0PHRoaXMuZ3JpZFswXS5sZW5ndGgtMSlmb3IodmFyIHh0PVU7eHQ8PVR0O3h0KyspQ3RbMl0rPXRoaXMuZ3JpZFt4dF1bSXQrMV0ubGVuZ3RoK3RoaXMuZ3JpZFt4dF1bSXRdLmxlbmd0aC0xO2lmKFU+MClmb3IodmFyIHh0PW50O3h0PD1JdDt4dCsrKUN0WzNdKz10aGlzLmdyaWRbVS0xXVt4dF0ubGVuZ3RoK3RoaXMuZ3JpZFtVXVt4dF0ubGVuZ3RoLTE7Zm9yKHZhciBIdD1zdC5NQVhfVkFMVUUsTGUsRnQsZ249MDtnbjxDdC5sZW5ndGg7Z24rKylDdFtnbl08SHQ/KEh0PUN0W2duXSxMZT0xLEZ0PWduKTpDdFtnbl09PUh0JiZMZSsrO2lmKExlPT0zJiZIdD09MClDdFswXT09MCYmQ3RbMV09PTAmJkN0WzJdPT0wP3Z0PTE6Q3RbMF09PTAmJkN0WzFdPT0wJiZDdFszXT09MD92dD0wOkN0WzBdPT0wJiZDdFsyXT09MCYmQ3RbM109PTA/dnQ9MzpDdFsxXT09MCYmQ3RbMl09PTAmJkN0WzNdPT0wJiYodnQ9Mik7ZWxzZSBpZihMZT09MiYmSHQ9PTApe3ZhciBTZT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMik7Q3RbMF09PTAmJkN0WzFdPT0wP1NlPT0wP3Z0PTA6dnQ9MTpDdFswXT09MCYmQ3RbMl09PTA/U2U9PTA/dnQ9MDp2dD0yOkN0WzBdPT0wJiZDdFszXT09MD9TZT09MD92dD0wOnZ0PTM6Q3RbMV09PTAmJkN0WzJdPT0wP1NlPT0wP3Z0PTE6dnQ9MjpDdFsxXT09MCYmQ3RbM109PTA/U2U9PTA/dnQ9MTp2dD0zOlNlPT0wP3Z0PTI6dnQ9M31lbHNlIGlmKExlPT00JiZIdD09MCl7dmFyIFNlPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo0KTt2dD1TZX1lbHNlIHZ0PUZ0O3Z0PT0wP3B0LnNldENlbnRlcihYLmdldENlbnRlclgoKSxYLmdldENlbnRlclkoKS1YLmdldEhlaWdodCgpLzItTi5ERUZBVUxUX0VER0VfTEVOR1RILXB0LmdldEhlaWdodCgpLzIpOnZ0PT0xP3B0LnNldENlbnRlcihYLmdldENlbnRlclgoKStYLmdldFdpZHRoKCkvMitOLkRFRkFVTFRfRURHRV9MRU5HVEgrcHQuZ2V0V2lkdGgoKS8yLFguZ2V0Q2VudGVyWSgpKTp2dD09Mj9wdC5zZXRDZW50ZXIoWC5nZXRDZW50ZXJYKCksWC5nZXRDZW50ZXJZKCkrWC5nZXRIZWlnaHQoKS8yK04uREVGQVVMVF9FREdFX0xFTkdUSCtwdC5nZXRIZWlnaHQoKS8yKTpwdC5zZXRDZW50ZXIoWC5nZXRDZW50ZXJYKCktWC5nZXRXaWR0aCgpLzItTi5ERUZBVUxUX0VER0VfTEVOR1RILXB0LmdldFdpZHRoKCkvMixYLmdldENlbnRlclkoKSl9LHAuZXhwb3J0cz15dH0sZnVuY3Rpb24ocCx3LG0pe3ZhciBiPXt9O2IubGF5b3V0QmFzZT1tKDApLGIuQ29TRUNvbnN0YW50cz1tKDEpLGIuQ29TRUVkZ2U9bSgyKSxiLkNvU0VHcmFwaD1tKDMpLGIuQ29TRUdyYXBoTWFuYWdlcj1tKDQpLGIuQ29TRUxheW91dD1tKDYpLGIuQ29TRU5vZGU9bSg1KSxwLmV4cG9ydHM9Yn1dKX0pfSh0cHQpKSx0cHQuZXhwb3J0c30oZnVuY3Rpb24oaSxhKXsoZnVuY3Rpb24ocCx3KXtpLmV4cG9ydHM9dyhjWWUoKSl9KShiMCxmdW5jdGlvbihmKXtyZXR1cm4gZnVuY3Rpb24ocCl7dmFyIHc9e307ZnVuY3Rpb24gbShiKXtpZih3W2JdKXJldHVybiB3W2JdLmV4cG9ydHM7dmFyIEU9d1tiXT17aTpiLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIHBbYl0uY2FsbChFLmV4cG9ydHMsRSxFLmV4cG9ydHMsbSksRS5sPSEwLEUuZXhwb3J0c31yZXR1cm4gbS5tPXAsbS5jPXcsbS5pPWZ1bmN0aW9uKGIpe3JldHVybiBifSxtLmQ9ZnVuY3Rpb24oYixFLF8pe20ubyhiLEUpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoYixFLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6X30pfSxtLm49ZnVuY3Rpb24oYil7dmFyIEU9YiYmYi5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGIuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gYn07cmV0dXJuIG0uZChFLCJhIixFKSxFfSxtLm89ZnVuY3Rpb24oYixFKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsRSl9LG0ucD0iIixtKG0ucz0xKX0oW2Z1bmN0aW9uKHAsdyl7cC5leHBvcnRzPWZ9LGZ1bmN0aW9uKHAsdyxtKXt2YXIgYj1tKDApLmxheW91dEJhc2UuTGF5b3V0Q29uc3RhbnRzLEU9bSgwKS5sYXlvdXRCYXNlLkZETGF5b3V0Q29uc3RhbnRzLF89bSgwKS5Db1NFQ29uc3RhbnRzLEE9bSgwKS5Db1NFTGF5b3V0LEk9bSgwKS5Db1NFTm9kZSxCPW0oMCkubGF5b3V0QmFzZS5Qb2ludEQsTj1tKDApLmxheW91dEJhc2UuRGltZW5zaW9uRCxSPXtyZWFkeTpmdW5jdGlvbigpe30sc3RvcDpmdW5jdGlvbigpe30scXVhbGl0eToiZGVmYXVsdCIsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLHJlZnJlc2g6MzAsZml0OiEwLHBhZGRpbmc6MTAscmFuZG9taXplOiEwLG5vZGVSZXB1bHNpb246NDUwMCxpZGVhbEVkZ2VMZW5ndGg6NTAsZWRnZUVsYXN0aWNpdHk6LjQ1LG5lc3RpbmdGYWN0b3I6LjEsZ3Jhdml0eTouMjUsbnVtSXRlcjoyNTAwLHRpbGU6ITAsYW5pbWF0ZToiZW5kIixhbmltYXRpb25EdXJhdGlvbjo1MDAsdGlsaW5nUGFkZGluZ1ZlcnRpY2FsOjEwLHRpbGluZ1BhZGRpbmdIb3Jpem9udGFsOjEwLGdyYXZpdHlSYW5nZUNvbXBvdW5kOjEuNSxncmF2aXR5Q29tcG91bmQ6MSxncmF2aXR5UmFuZ2U6My44LGluaXRpYWxFbmVyZ3lPbkluY3JlbWVudGFsOi41fTtmdW5jdGlvbiB6KGF0LGJ0KXt2YXIgbXQ9e307Zm9yKHZhciB5dCBpbiBhdCltdFt5dF09YXRbeXRdO2Zvcih2YXIgeXQgaW4gYnQpbXRbeXRdPWJ0W3l0XTtyZXR1cm4gbXR9ZnVuY3Rpb24gVyhhdCl7dGhpcy5vcHRpb25zPXooUixhdCksZXQodGhpcy5vcHRpb25zKX12YXIgZXQ9ZnVuY3Rpb24oYnQpe2J0Lm5vZGVSZXB1bHNpb24hPW51bGwmJihfLkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RIPUUuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEg9YnQubm9kZVJlcHVsc2lvbiksYnQuaWRlYWxFZGdlTGVuZ3RoIT1udWxsJiYoXy5ERUZBVUxUX0VER0VfTEVOR1RIPUUuREVGQVVMVF9FREdFX0xFTkdUSD1idC5pZGVhbEVkZ2VMZW5ndGgpLGJ0LmVkZ2VFbGFzdGljaXR5IT1udWxsJiYoXy5ERUZBVUxUX1NQUklOR19TVFJFTkdUSD1FLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RIPWJ0LmVkZ2VFbGFzdGljaXR5KSxidC5uZXN0aW5nRmFjdG9yIT1udWxsJiYoXy5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SPUUuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUj1idC5uZXN0aW5nRmFjdG9yKSxidC5ncmF2aXR5IT1udWxsJiYoXy5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEg9RS5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEg9YnQuZ3Jhdml0eSksYnQubnVtSXRlciE9bnVsbCYmKF8uTUFYX0lURVJBVElPTlM9RS5NQVhfSVRFUkFUSU9OUz1idC5udW1JdGVyKSxidC5ncmF2aXR5UmFuZ2UhPW51bGwmJihfLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1I9RS5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SPWJ0LmdyYXZpdHlSYW5nZSksYnQuZ3Jhdml0eUNvbXBvdW5kIT1udWxsJiYoXy5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEg9RS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEg9YnQuZ3Jhdml0eUNvbXBvdW5kKSxidC5ncmF2aXR5UmFuZ2VDb21wb3VuZCE9bnVsbCYmKF8uREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj1FLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1I9YnQuZ3Jhdml0eVJhbmdlQ29tcG91bmQpLGJ0LmluaXRpYWxFbmVyZ3lPbkluY3JlbWVudGFsIT1udWxsJiYoXy5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMPUUuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTD1idC5pbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbCksYnQucXVhbGl0eT09ImRyYWZ0Ij9iLlFVQUxJVFk9MDpidC5xdWFsaXR5PT0icHJvb2YiP2IuUVVBTElUWT0yOmIuUVVBTElUWT0xLF8uTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTPUUuTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTPWIuTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTPWJ0Lm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyxfLkRFRkFVTFRfSU5DUkVNRU5UQUw9RS5ERUZBVUxUX0lOQ1JFTUVOVEFMPWIuREVGQVVMVF9JTkNSRU1FTlRBTD0hYnQucmFuZG9taXplLF8uQU5JTUFURT1FLkFOSU1BVEU9Yi5BTklNQVRFPWJ0LmFuaW1hdGUsXy5USUxFPWJ0LnRpbGUsXy5USUxJTkdfUEFERElOR19WRVJUSUNBTD10eXBlb2YgYnQudGlsaW5nUGFkZGluZ1ZlcnRpY2FsPT0iZnVuY3Rpb24iP2J0LnRpbGluZ1BhZGRpbmdWZXJ0aWNhbC5jYWxsKCk6YnQudGlsaW5nUGFkZGluZ1ZlcnRpY2FsLF8uVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTD10eXBlb2YgYnQudGlsaW5nUGFkZGluZ0hvcml6b250YWw9PSJmdW5jdGlvbiI/YnQudGlsaW5nUGFkZGluZ0hvcml6b250YWwuY2FsbCgpOmJ0LnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsfTtXLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgYXQsYnQsbXQ9dGhpcy5vcHRpb25zO3RoaXMuaWRUb0xOb2RlPXt9O3ZhciB5dD10aGlzLmxheW91dD1uZXcgQSxmdD10aGlzO2Z0LnN0b3BwZWQ9ITEsdGhpcy5jeT10aGlzLm9wdGlvbnMuY3ksdGhpcy5jeS50cmlnZ2VyKHt0eXBlOiJsYXlvdXRzdGFydCIsbGF5b3V0OnRoaXN9KTt2YXIgdXQ9eXQubmV3R3JhcGhNYW5hZ2VyKCk7dGhpcy5nbT11dDt2YXIgdnQ9dGhpcy5vcHRpb25zLmVsZXMubm9kZXMoKSxYPXRoaXMub3B0aW9ucy5lbGVzLmVkZ2VzKCk7dGhpcy5yb290PXV0LmFkZFJvb3QoKSx0aGlzLnByb2Nlc3NDaGlsZHJlbkxpc3QodGhpcy5yb290LHRoaXMuZ2V0VG9wTW9zdE5vZGVzKHZ0KSx5dCk7Zm9yKHZhciBwdD0wO3B0PFgubGVuZ3RoO3B0Kyspe3ZhciBVPVhbcHRdLFR0PXRoaXMuaWRUb0xOb2RlW1UuZGF0YSgic291cmNlIildLG50PXRoaXMuaWRUb0xOb2RlW1UuZGF0YSgidGFyZ2V0IildO2lmKFR0IT09bnQmJlR0LmdldEVkZ2VzQmV0d2VlbihudCkubGVuZ3RoPT0wKXt2YXIgSXQ9dXQuYWRkKHl0Lm5ld0VkZ2UoKSxUdCxudCk7SXQuaWQ9VS5pZCgpfX12YXIgT3Q9ZnVuY3Rpb24oWixDdCl7dHlwZW9mIFo9PSJudW1iZXIiJiYoWj1DdCk7dmFyIHh0PVouZGF0YSgiaWQiKSxIdD1mdC5pZFRvTE5vZGVbeHRdO3JldHVybnt4Okh0LmdldFJlY3QoKS5nZXRDZW50ZXJYKCkseTpIdC5nZXRSZWN0KCkuZ2V0Q2VudGVyWSgpfX0sQnQ9ZnVuY3Rpb24gRXQoKXtmb3IodmFyIFo9ZnVuY3Rpb24oKXttdC5maXQmJm10LmN5LmZpdChtdC5lbGVzLG10LnBhZGRpbmcpLGF0fHwoYXQ9ITAsZnQuY3kub25lKCJsYXlvdXRyZWFkeSIsbXQucmVhZHkpLGZ0LmN5LnRyaWdnZXIoe3R5cGU6ImxheW91dHJlYWR5IixsYXlvdXQ6ZnR9KSl9LEN0PWZ0Lm9wdGlvbnMucmVmcmVzaCx4dCxIdD0wO0h0PEN0JiYheHQ7SHQrKyl4dD1mdC5zdG9wcGVkfHxmdC5sYXlvdXQudGljaygpO2lmKHh0KXt5dC5jaGVja0xheW91dFN1Y2Nlc3MoKSYmIXl0LmlzU3ViTGF5b3V0JiZ5dC5kb1Bvc3RMYXlvdXQoKSx5dC50aWxpbmdQb3N0TGF5b3V0JiZ5dC50aWxpbmdQb3N0TGF5b3V0KCkseXQuaXNMYXlvdXRGaW5pc2hlZD0hMCxmdC5vcHRpb25zLmVsZXMubm9kZXMoKS5wb3NpdGlvbnMoT3QpLFooKSxmdC5jeS5vbmUoImxheW91dHN0b3AiLGZ0Lm9wdGlvbnMuc3RvcCksZnQuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0OmZ0fSksYnQmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKGJ0KSxhdD0hMTtyZXR1cm59dmFyIExlPWZ0LmxheW91dC5nZXRQb3NpdGlvbnNEYXRhKCk7bXQuZWxlcy5ub2RlcygpLnBvc2l0aW9ucyhmdW5jdGlvbihGdCxnbil7aWYodHlwZW9mIEZ0PT0ibnVtYmVyIiYmKEZ0PWduKSwhRnQuaXNQYXJlbnQoKSl7Zm9yKHZhciBTZT1GdC5pZCgpLG1lPUxlW1NlXSxWZT1GdDttZT09bnVsbCYmKG1lPUxlW1ZlLmRhdGEoInBhcmVudCIpXXx8TGVbIkR1bW15Q29tcG91bmRfIitWZS5kYXRhKCJwYXJlbnQiKV0sTGVbU2VdPW1lLFZlPVZlLnBhcmVudCgpWzBdLFZlIT1udWxsKTspO3JldHVybiBtZSE9bnVsbD97eDptZS54LHk6bWUueX06e3g6RnQucG9zaXRpb24oIngiKSx5OkZ0LnBvc2l0aW9uKCJ5Iil9fX0pLFooKSxidD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoRXQpfTtyZXR1cm4geXQuYWRkTGlzdGVuZXIoImxheW91dHN0YXJ0ZWQiLGZ1bmN0aW9uKCl7ZnQub3B0aW9ucy5hbmltYXRlPT09ImR1cmluZyImJihidD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoQnQpKX0pLHl0LnJ1bkxheW91dCgpLHRoaXMub3B0aW9ucy5hbmltYXRlIT09ImR1cmluZyImJihmdC5vcHRpb25zLmVsZXMubm9kZXMoKS5ub3QoIjpwYXJlbnQiKS5sYXlvdXRQb3NpdGlvbnMoZnQsZnQub3B0aW9ucyxPdCksYXQ9ITEpLHRoaXN9LFcucHJvdG90eXBlLmdldFRvcE1vc3ROb2Rlcz1mdW5jdGlvbihhdCl7Zm9yKHZhciBidD17fSxtdD0wO210PGF0Lmxlbmd0aDttdCsrKWJ0W2F0W210XS5pZCgpXT0hMDt2YXIgeXQ9YXQuZmlsdGVyKGZ1bmN0aW9uKGZ0LHV0KXt0eXBlb2YgZnQ9PSJudW1iZXIiJiYoZnQ9dXQpO2Zvcih2YXIgdnQ9ZnQucGFyZW50KClbMF07dnQhPW51bGw7KXtpZihidFt2dC5pZCgpXSlyZXR1cm4hMTt2dD12dC5wYXJlbnQoKVswXX1yZXR1cm4hMH0pO3JldHVybiB5dH0sVy5wcm90b3R5cGUucHJvY2Vzc0NoaWxkcmVuTGlzdD1mdW5jdGlvbihhdCxidCxtdCl7Zm9yKHZhciB5dD1idC5sZW5ndGgsZnQ9MDtmdDx5dDtmdCsrKXt2YXIgdXQ9YnRbZnRdLHZ0PXV0LmNoaWxkcmVuKCksWCxwdD11dC5sYXlvdXREaW1lbnNpb25zKHtub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6dGhpcy5vcHRpb25zLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsc30pO2lmKHV0Lm91dGVyV2lkdGgoKSE9bnVsbCYmdXQub3V0ZXJIZWlnaHQoKSE9bnVsbD9YPWF0LmFkZChuZXcgSShtdC5ncmFwaE1hbmFnZXIsbmV3IEIodXQucG9zaXRpb24oIngiKS1wdC53LzIsdXQucG9zaXRpb24oInkiKS1wdC5oLzIpLG5ldyBOKHBhcnNlRmxvYXQocHQudykscGFyc2VGbG9hdChwdC5oKSkpKTpYPWF0LmFkZChuZXcgSSh0aGlzLmdyYXBoTWFuYWdlcikpLFguaWQ9dXQuZGF0YSgiaWQiKSxYLnBhZGRpbmdMZWZ0PXBhcnNlSW50KHV0LmNzcygicGFkZGluZyIpKSxYLnBhZGRpbmdUb3A9cGFyc2VJbnQodXQuY3NzKCJwYWRkaW5nIikpLFgucGFkZGluZ1JpZ2h0PXBhcnNlSW50KHV0LmNzcygicGFkZGluZyIpKSxYLnBhZGRpbmdCb3R0b209cGFyc2VJbnQodXQuY3NzKCJwYWRkaW5nIikpLHRoaXMub3B0aW9ucy5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMmJnV0LmlzUGFyZW50KCkpe3ZhciBVPXV0LmJvdW5kaW5nQm94KHtpbmNsdWRlTGFiZWxzOiEwLGluY2x1ZGVOb2RlczohMX0pLncsVHQ9dXQuYm91bmRpbmdCb3goe2luY2x1ZGVMYWJlbHM6ITAsaW5jbHVkZU5vZGVzOiExfSkuaCxudD11dC5jc3MoInRleHQtaGFsaWduIik7WC5sYWJlbFdpZHRoPVUsWC5sYWJlbEhlaWdodD1UdCxYLmxhYmVsUG9zPW50fWlmKHRoaXMuaWRUb0xOb2RlW3V0LmRhdGEoImlkIildPVgsaXNOYU4oWC5yZWN0LngpJiYoWC5yZWN0Lng9MCksaXNOYU4oWC5yZWN0LnkpJiYoWC5yZWN0Lnk9MCksdnQhPW51bGwmJnZ0Lmxlbmd0aD4wKXt2YXIgSXQ7SXQ9bXQuZ2V0R3JhcGhNYW5hZ2VyKCkuYWRkKG10Lm5ld0dyYXBoKCksWCksdGhpcy5wcm9jZXNzQ2hpbGRyZW5MaXN0KEl0LHZ0LG10KX19fSxXLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RvcHBlZD0hMCx0aGlzfTt2YXIgc3Q9ZnVuY3Rpb24oYnQpe2J0KCJsYXlvdXQiLCJjb3NlLWJpbGtlbnQiLFcpfTt0eXBlb2YgY3l0b3NjYXBlPCJ1IiYmc3QoY3l0b3NjYXBlKSxwLmV4cG9ydHM9c3R9XSl9KX0pKGgkdCk7dmFyIHVZZT1oJHQuZXhwb3J0cztjb25zdCBsWWU9RzcodVllKTtsJHQudXNlKGxZZSk7ZnVuY3Rpb24gZyR0KGksYSxmLHApe2MkdC5kcmF3Tm9kZShpLGEsZixwKSxhLmNoaWxkcmVuJiZhLmNoaWxkcmVuLmZvckVhY2goKHcsbSk9PntnJHQoaSx3LGY8MD9tOmYscCl9KX1mdW5jdGlvbiBoWWUoaSxhKXthLmVkZ2VzKCkubWFwKChmLHApPT57Y29uc3Qgdz1mLmRhdGEoKTtpZihmWzBdLl9wcml2YXRlLmJvZHlCb3VuZHMpe2NvbnN0IG09ZlswXS5fcHJpdmF0ZS5yc2NyYXRjaDtVdC50cmFjZSgiRWRnZTogIixwLHcpLGkuaW5zZXJ0KCJwYXRoIikuYXR0cigiZCIsYE0gJHttLnN0YXJ0WH0sJHttLnN0YXJ0WX0gTCAke20ubWlkWH0sJHttLm1pZFl9IEwke20uZW5kWH0sJHttLmVuZFl9IGApLmF0dHIoImNsYXNzIiwiZWRnZSBzZWN0aW9uLWVkZ2UtIit3LnNlY3Rpb24rIiBlZGdlLWRlcHRoLSIrdy5kZXB0aCl9fSl9ZnVuY3Rpb24gcCR0KGksYSxmLHApe2EuYWRkKHtncm91cDoibm9kZXMiLGRhdGE6e2lkOmkuaWQsbGFiZWxUZXh0OmkuZGVzY3IsaGVpZ2h0OmkuaGVpZ2h0LHdpZHRoOmkud2lkdGgsbGV2ZWw6cCxub2RlSWQ6aS5pZCxwYWRkaW5nOmkucGFkZGluZyx0eXBlOmkudHlwZX0scG9zaXRpb246e3g6aS54LHk6aS55fX0pLGkuY2hpbGRyZW4mJmkuY2hpbGRyZW4uZm9yRWFjaCh3PT57cCR0KHcsYSxmLHArMSksYS5hZGQoe2dyb3VwOiJlZGdlcyIsZGF0YTp7aWQ6YCR7aS5pZH1fJHt3LmlkfWAsc291cmNlOmkuaWQsdGFyZ2V0OncuaWQsZGVwdGg6cCxzZWN0aW9uOncuc2VjdGlvbn19KX0pfWZ1bmN0aW9uIGZZZShpLGEpe3JldHVybiBuZXcgUHJvbWlzZShmPT57Y29uc3QgcD15cigiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiaWQiLCJjeSIpLmF0dHIoInN0eWxlIiwiZGlzcGxheTpub25lIiksdz1sJHQoe2NvbnRhaW5lcjpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY3kiKSxzdHlsZTpbe3NlbGVjdG9yOiJlZGdlIixzdHlsZTp7ImN1cnZlLXN0eWxlIjoiYmV6aWVyIn19XX0pO3AucmVtb3ZlKCkscCR0KGksdyxhLDApLHcubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKG0pe20ubGF5b3V0RGltZW5zaW9ucz0oKT0+e2NvbnN0IGI9bS5kYXRhKCk7cmV0dXJue3c6Yi53aWR0aCxoOmIuaGVpZ2h0fX19KSx3LmxheW91dCh7bmFtZToiY29zZS1iaWxrZW50IixxdWFsaXR5OiJwcm9vZiIsc3R5bGVFbmFibGVkOiExLGFuaW1hdGU6ITF9KS5ydW4oKSx3LnJlYWR5KG09PntVdC5pbmZvKCJSZWFkeSIsbSksZih3KX0pfSl9ZnVuY3Rpb24gZFllKGkpe2kubm9kZXMoKS5tYXAoKGEsZik9Pntjb25zdCBwPWEuZGF0YSgpO3AueD1hLnBvc2l0aW9uKCkueCxwLnk9YS5wb3NpdGlvbigpLnksYyR0LnBvc2l0aW9uTm9kZShwKTtjb25zdCB3PUpndChwLm5vZGVJZCk7VXQuaW5mbygiSWQ6IixmLCJQb3NpdGlvbjogKCIsYS5wb3NpdGlvbigpLngsIiwgIixhLnBvc2l0aW9uKCkueSwiKSIscCksdy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHthLnBvc2l0aW9uKCkueC1wLndpZHRoLzJ9LCAke2EucG9zaXRpb24oKS55LXAuaGVpZ2h0LzJ9KWApLHcuYXR0cigiYXR0ciIsYGFwYS0ke2Z9KWApfSl9Y29uc3QgZ1llPXtkcmF3OmFzeW5jKGksYSxmLHApPT57Y29uc3Qgdz1PZSgpO3cuaHRtbExhYmVscz0hMSxVdC5kZWJ1ZyhgUmVuZGVyaW5nIG1pbmRtYXAgZGlhZ3JhbQpgK2kscC5wYXJzZXIpO2NvbnN0IG09T2UoKS5zZWN1cml0eUxldmVsO2xldCBiO209PT0ic2FuZGJveCImJihiPXlyKCIjaSIrYSkpO2NvbnN0IF89eXIobT09PSJzYW5kYm94Ij9iLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHk6ImJvZHkiKS5zZWxlY3QoIiMiK2EpO18uYXBwZW5kKCJnIik7Y29uc3QgQT1wLmRiLmdldE1pbmRtYXAoKSxJPV8uYXBwZW5kKCJnIik7SS5hdHRyKCJjbGFzcyIsIm1pbmRtYXAtZWRnZXMiKTtjb25zdCBCPV8uYXBwZW5kKCJnIik7Qi5hdHRyKCJjbGFzcyIsIm1pbmRtYXAtbm9kZXMiKSxnJHQoQixBLC0xLHcpO2NvbnN0IE49YXdhaXQgZlllKEEsdyk7aFllKEksTiksZFllKE4pLGZUKHZvaWQgMCxfLHcubWluZG1hcC5wYWRkaW5nLHcubWluZG1hcC51c2VNYXhXaWR0aCl9fSxwWWU9aT0+e2xldCBhPSIiO2ZvcihsZXQgZj0wO2Y8aS5USEVNRV9DT0xPUl9MSU1JVDtmKyspaVsibGluZUNvbG9yIitmXT1pWyJsaW5lQ29sb3IiK2ZdfHxpWyJjU2NhbGVJbnYiK2ZdLGlUKGlbImxpbmVDb2xvciIrZl0pP2lbImxpbmVDb2xvciIrZl09YnMoaVsibGluZUNvbG9yIitmXSwyMCk6aVsibGluZUNvbG9yIitmXT0kcyhpWyJsaW5lQ29sb3IiK2ZdLDIwKTtmb3IobGV0IGY9MDtmPGkuVEhFTUVfQ09MT1JfTElNSVQ7ZisrKXtjb25zdCBwPSIiKygxNy0zKmYpO2ErPWAKICAgIC5zZWN0aW9uLSR7Zi0xfSByZWN0LCAuc2VjdGlvbi0ke2YtMX0gcGF0aCwgLnNlY3Rpb24tJHtmLTF9IGNpcmNsZSwgLnNlY3Rpb24tJHtmLTF9IHBvbHlnb24sIC5zZWN0aW9uLSR7Zi0xfSBwYXRoICB7CiAgICAgIGZpbGw6ICR7aVsiY1NjYWxlIitmXX07CiAgICB9CiAgICAuc2VjdGlvbi0ke2YtMX0gdGV4dCB7CiAgICAgZmlsbDogJHtpWyJjU2NhbGVMYWJlbCIrZl19OwogICAgfQogICAgLm5vZGUtaWNvbi0ke2YtMX0gewogICAgICBmb250LXNpemU6IDQwcHg7CiAgICAgIGNvbG9yOiAke2lbImNTY2FsZUxhYmVsIitmXX07CiAgICB9CiAgICAuc2VjdGlvbi1lZGdlLSR7Zi0xfXsKICAgICAgc3Ryb2tlOiAke2lbImNTY2FsZSIrZl19OwogICAgfQogICAgLmVkZ2UtZGVwdGgtJHtmLTF9ewogICAgICBzdHJva2Utd2lkdGg6ICR7cH07CiAgICB9CiAgICAuc2VjdGlvbi0ke2YtMX0gbGluZSB7CiAgICAgIHN0cm9rZTogJHtpWyJjU2NhbGVJbnYiK2ZdfSA7CiAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgIH0KCiAgICAuZGlzYWJsZWQsIC5kaXNhYmxlZCBjaXJjbGUsIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogbGlnaHRncmF5OwogICAgfQogICAgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiAjZWZlZmVmOwogICAgfQogICAgYH1yZXR1cm4gYX0sYlllPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntkYjpRV2UscmVuZGVyZXI6Z1llLHBhcnNlcjp6V2Usc3R5bGVzOmk9PmAKICAuZWRnZSB7CiAgICBzdHJva2Utd2lkdGg6IDM7CiAgfQogICR7cFllKGkpfQogIC5zZWN0aW9uLXJvb3QgcmVjdCwgLnNlY3Rpb24tcm9vdCBwYXRoLCAuc2VjdGlvbi1yb290IGNpcmNsZSwgLnNlY3Rpb24tcm9vdCBwb2x5Z29uICB7CiAgICBmaWxsOiAke2kuZ2l0MH07CiAgfQogIC5zZWN0aW9uLXJvb3QgdGV4dCB7CiAgICBmaWxsOiAke2kuZ2l0QnJhbmNoTGFiZWwwfTsKICB9CiAgLmljb24tY29udGFpbmVyIHsKICAgIGhlaWdodDoxMDAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICB9CiAgLmVkZ2UgewogICAgZmlsbDogbm9uZTsKICB9CiAgLm1pbmRtYXAtbm9kZS1sYWJlbCB7CiAgICBkeTogMWVtOwogICAgYWxpZ25tZW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZG9taW5hbnQtYmFzZWxpbmU6IG1pZGRsZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBucHQ9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihFLF8sQSxJKXtmb3IoQT1BfHx7fSxJPUUubGVuZ3RoO0ktLTtBW0VbSV1dPV8pO3JldHVybiBBfSxhPVsxLDldLGY9WzEsMTBdLHA9WzEsNSwxMCwxMl0sdz17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU0FOS0VZOjQsTkVXTElORTo1LGNzdjo2LG9wdF9lb2Y6NyxyZWNvcmQ6OCxjc3ZfdGFpbDo5LEVPRjoxMCwiZmllbGRbc291cmNlXSI6MTEsQ09NTUE6MTIsImZpZWxkW3RhcmdldF0iOjEzLCJmaWVsZFt2YWx1ZV0iOjE0LGZpZWxkOjE1LGVzY2FwZWQ6MTYsbm9uX2VzY2FwZWQ6MTcsRFFVT1RFOjE4LEVTQ0FQRURfVEVYVDoxOSxOT05fRVNDQVBFRF9URVhUOjIwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJTQU5LRVkiLDU6Ik5FV0xJTkUiLDEwOiJFT0YiLDExOiJmaWVsZFtzb3VyY2VdIiwxMjoiQ09NTUEiLDEzOiJmaWVsZFt0YXJnZXRdIiwxNDoiZmllbGRbdmFsdWVdIiwxODoiRFFVT1RFIiwxOToiRVNDQVBFRF9URVhUIiwyMDoiTk9OX0VTQ0FQRURfVEVYVCJ9LHByb2R1Y3Rpb25zXzpbMCxbMyw0XSxbNiwyXSxbOSwyXSxbOSwwXSxbNywxXSxbNywwXSxbOCw1XSxbMTUsMV0sWzE1LDFdLFsxNiwzXSxbMTcsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oXyxBLEksQixOLFIseil7dmFyIFc9Ui5sZW5ndGgtMTtzd2l0Y2goTil7Y2FzZSA3OmNvbnN0IGV0PUIuZmluZE9yQ3JlYXRlTm9kZShSW1ctNF0udHJpbSgpLnJlcGxhY2VBbGwoJyIiJywnIicpKSxzdD1CLmZpbmRPckNyZWF0ZU5vZGUoUltXLTJdLnRyaW0oKS5yZXBsYWNlQWxsKCciIicsJyInKSksYXQ9cGFyc2VGbG9hdChSW1ddLnRyaW0oKSk7Qi5hZGRMaW5rKGV0LHN0LGF0KTticmVhaztjYXNlIDg6Y2FzZSA5OmNhc2UgMTE6dGhpcy4kPVJbV107YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9UltXLTFdO2JyZWFrfX0sdGFibGU6W3szOjEsNDpbMSwyXX0sezE6WzNdfSx7NTpbMSwzXX0sezY6NCw4OjUsMTU6NiwxNjo3LDE3OjgsMTg6YSwyMDpmfSx7MTpbMiw2XSw3OjExLDEwOlsxLDEyXX0saShmLFsyLDRdLHs5OjEzLDU6WzEsMTRdfSksezEyOlsxLDE1XX0saShwLFsyLDhdKSxpKHAsWzIsOV0pLHsxOTpbMSwxNl19LGkocCxbMiwxMV0pLHsxOlsyLDFdfSx7MTpbMiw1XX0saShmLFsyLDJdKSx7NjoxNyw4OjUsMTU6NiwxNjo3LDE3OjgsMTg6YSwyMDpmfSx7MTU6MTgsMTY6NywxNzo4LDE4OmEsMjA6Zn0sezE4OlsxLDE5XX0saShmLFsyLDNdKSx7MTI6WzEsMjBdfSxpKHAsWzIsMTBdKSx7MTU6MjEsMTY6NywxNzo4LDE4OmEsMjA6Zn0saShbMSw1LDEwXSxbMiw3XSldLGRlZmF1bHRBY3Rpb25zOnsxMTpbMiwxXSwxMjpbMiw1XX0scGFyc2VFcnJvcjpmdW5jdGlvbihfLEEpe2lmKEEucmVjb3ZlcmFibGUpdGhpcy50cmFjZShfKTtlbHNle3ZhciBJPW5ldyBFcnJvcihfKTt0aHJvdyBJLmhhc2g9QSxJfX0scGFyc2U6ZnVuY3Rpb24oXyl7dmFyIEE9dGhpcyxJPVswXSxCPVtdLE49W251bGxdLFI9W10sej10aGlzLnRhYmxlLFc9IiIsZXQ9MCxzdD0wLGF0PTIsYnQ9MSxtdD1SLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHl0PU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksZnQ9e3l5Ont9fTtmb3IodmFyIHV0IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksdXQpJiYoZnQueXlbdXRdPXRoaXMueXlbdXRdKTt5dC5zZXRJbnB1dChfLGZ0Lnl5KSxmdC55eS5sZXhlcj15dCxmdC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgeXQueXlsbG9jPiJ1IiYmKHl0Lnl5bGxvYz17fSk7dmFyIHZ0PXl0Lnl5bGxvYztSLnB1c2godnQpO3ZhciBYPXl0Lm9wdGlvbnMmJnl0Lm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBmdC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1mdC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBwdCgpe3ZhciBIdDtyZXR1cm4gSHQ9Qi5wb3AoKXx8eXQubGV4KCl8fGJ0LHR5cGVvZiBIdCE9Im51bWJlciImJihIdCBpbnN0YW5jZW9mIEFycmF5JiYoQj1IdCxIdD1CLnBvcCgpKSxIdD1BLnN5bWJvbHNfW0h0XXx8SHQpLEh0fWZvcih2YXIgVSxUdCxudCxJdCxPdD17fSxCdCxFdCxaLEN0Ozspe2lmKFR0PUlbSS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tUdF0/bnQ9dGhpcy5kZWZhdWx0QWN0aW9uc1tUdF06KChVPT09bnVsbHx8dHlwZW9mIFU+InUiKSYmKFU9cHQoKSksbnQ9eltUdF0mJnpbVHRdW1VdKSx0eXBlb2YgbnQ+InUifHwhbnQubGVuZ3RofHwhbnRbMF0pe3ZhciB4dD0iIjtDdD1bXTtmb3IoQnQgaW4geltUdF0pdGhpcy50ZXJtaW5hbHNfW0J0XSYmQnQ+YXQmJkN0LnB1c2goIiciK3RoaXMudGVybWluYWxzX1tCdF0rIiciKTt5dC5zaG93UG9zaXRpb24/eHQ9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoZXQrMSkrYDoKYCt5dC5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK0N0LmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bVV18fFUpKyInIjp4dD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhldCsxKSsiOiBVbmV4cGVjdGVkICIrKFU9PWJ0PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW1VdfHxVKSsiJyIpLHRoaXMucGFyc2VFcnJvcih4dCx7dGV4dDp5dC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bVV18fFUsbGluZTp5dC55eWxpbmVubyxsb2M6dnQsZXhwZWN0ZWQ6Q3R9KX1pZihudFswXWluc3RhbmNlb2YgQXJyYXkmJm50Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrVHQrIiwgdG9rZW46ICIrVSk7c3dpdGNoKG50WzBdKXtjYXNlIDE6SS5wdXNoKFUpLE4ucHVzaCh5dC55eXRleHQpLFIucHVzaCh5dC55eWxsb2MpLEkucHVzaChudFsxXSksVT1udWxsLHN0PXl0Lnl5bGVuZyxXPXl0Lnl5dGV4dCxldD15dC55eWxpbmVubyx2dD15dC55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKEV0PXRoaXMucHJvZHVjdGlvbnNfW250WzFdXVsxXSxPdC4kPU5bTi5sZW5ndGgtRXRdLE90Ll8kPXtmaXJzdF9saW5lOlJbUi5sZW5ndGgtKEV0fHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6UltSLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOlJbUi5sZW5ndGgtKEV0fHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlJbUi5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LFgmJihPdC5fJC5yYW5nZT1bUltSLmxlbmd0aC0oRXR8fDEpXS5yYW5nZVswXSxSW1IubGVuZ3RoLTFdLnJhbmdlWzFdXSksSXQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE90LFtXLHN0LGV0LGZ0Lnl5LG50WzFdLE4sUl0uY29uY2F0KG10KSksdHlwZW9mIEl0PCJ1IilyZXR1cm4gSXQ7RXQmJihJPUkuc2xpY2UoMCwtMSpFdCoyKSxOPU4uc2xpY2UoMCwtMSpFdCksUj1SLnNsaWNlKDAsLTEqRXQpKSxJLnB1c2godGhpcy5wcm9kdWN0aW9uc19bbnRbMV1dWzBdKSxOLnB1c2goT3QuJCksUi5wdXNoKE90Ll8kKSxaPXpbSVtJLmxlbmd0aC0yXV1bSVtJLmxlbmd0aC0xXV0sSS5wdXNoKFopO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxtPWZ1bmN0aW9uKCl7dmFyIEU9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oQSxJKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKEEsSSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoQSl9LHNldElucHV0OmZ1bmN0aW9uKF8sQSl7cmV0dXJuIHRoaXMueXk9QXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9Xyx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgXz10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9Xyx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9Xyx0aGlzLm1hdGNoZWQrPV87dmFyIEE9Xy5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEE/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLF99LHVucHV0OmZ1bmN0aW9uKF8pe3ZhciBBPV8ubGVuZ3RoLEk9Xy5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PV8rdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLUEpLHRoaXMub2Zmc2V0LT1BO3ZhciBCPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLEkubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1JLmxlbmd0aC0xKTt2YXIgTj10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46ST8oSS5sZW5ndGg9PT1CLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrQltCLmxlbmd0aC1JLmxlbmd0aF0ubGVuZ3RoLUlbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1BfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W05bMF0sTlswXSt0aGlzLnl5bGVuZy1BXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oXyl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKF8pKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIF89dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihfLmxlbmd0aD4yMD8iLi4uIjoiIikrXy5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBfPXRoaXMubWF0Y2g7cmV0dXJuIF8ubGVuZ3RoPDIwJiYoXys9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtXy5sZW5ndGgpKSwoXy5zdWJzdHIoMCwyMCkrKF8ubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBfPXRoaXMucGFzdElucHV0KCksQT1uZXcgQXJyYXkoXy5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBfK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtBKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihfLEEpe3ZhciBJLEIsTjtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoTj17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihOLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLEI9X1swXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksQiYmKHRoaXMueXlsaW5lbm8rPUIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46Qj9CW0IubGVuZ3RoLTFdLmxlbmd0aC1CW0IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rX1swXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1fWzBdLHRoaXMubWF0Y2grPV9bMF0sdGhpcy5tYXRjaGVzPV8sdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoX1swXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9X1swXSxJPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLEEsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksSSlyZXR1cm4gSTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgUiBpbiBOKXRoaXNbUl09TltSXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBfLEEsSSxCO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIE49dGhpcy5fY3VycmVudFJ1bGVzKCksUj0wO1I8Ti5sZW5ndGg7UisrKWlmKEk9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tOW1JdXSksSSYmKCFBfHxJWzBdLmxlbmd0aD5BWzBdLmxlbmd0aCkpe2lmKEE9SSxCPVIsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoXz10aGlzLnRlc3RfbWF0Y2goSSxOW1JdKSxfIT09ITEpcmV0dXJuIF87aWYodGhpcy5fYmFja3RyYWNrKXtBPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEE/KF89dGhpcy50ZXN0X21hdGNoKEEsTltCXSksXyE9PSExP186ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBBPXRoaXMubmV4dCgpO3JldHVybiBBfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihBKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goQSl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIEE9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gQT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKEEpe3JldHVybiBBPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoQXx8MCksQT49MD90aGlzLmNvbmRpdGlvblN0YWNrW0FdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEEpe3RoaXMuYmVnaW4oQSl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOntlYXN5X2tld29yZF9ydWxlczohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihBLEksQixOKXtzd2l0Y2goQil7Y2FzZSAwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiY3N2IiksNDtjYXNlIDE6cmV0dXJuIDEwO2Nhc2UgMjpyZXR1cm4gNTtjYXNlIDM6cmV0dXJuIDEyO2Nhc2UgNDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImVzY2FwZWRfdGV4dCIpLDE4O2Nhc2UgNTpyZXR1cm4gMjA7Y2FzZSA2OnJldHVybiB0aGlzLnBvcFN0YXRlKCJlc2NhcGVkX3RleHQiKSwxODtjYXNlIDc6cmV0dXJuIDE5fX0scnVsZXM6Wy9eKD86c2Fua2V5LWJldGFcYikvLC9eKD86JCkvLC9eKD86KChcdTAwMERcdTAwMEEpfChcdTAwMEEpKSkvLC9eKD86KFx1MDAyQykpLywvXig/OihcdTAwMjIpKS8sL14oPzooW1x1MDAyMC1cdTAwMjFcdTAwMjMtXHUwMDJCXHUwMDJELVx1MDA3RV0pKikvLC9eKD86KFx1MDAyMikoPyEoXHUwMDIyKSkpLywvXig/OigoW1x1MDAyMC1cdTAwMjFcdTAwMjMtXHUwMDJCXHUwMDJELVx1MDA3RV0pfChcdTAwMkMpfChcdTAwMEQpfChcdTAwMEEpfChcdTAwMjIpKFx1MDAyMikpKikvXSxjb25kaXRpb25zOntjc3Y6e3J1bGVzOlsxLDIsMyw0LDUsNiw3XSxpbmNsdXNpdmU6ITF9LGVzY2FwZWRfdGV4dDp7cnVsZXM6WzYsN10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIEV9KCk7dy5sZXhlcj1tO2Z1bmN0aW9uIGIoKXt0aGlzLnl5PXt9fXJldHVybiBiLnByb3RvdHlwZT13LHcuUGFyc2VyPWIsbmV3IGJ9KCk7bnB0LnBhcnNlcj1ucHQ7Y29uc3Qgcks9bnB0O2xldCBpSz1bXSxzSz1bXSxrTD17fTtjb25zdCB3WWU9KCk9PntpSz1bXSxzSz1bXSxrTD17fSxoZygpfTtjbGFzcyB2WWV7Y29uc3RydWN0b3IoYSxmLHA9MCl7dGhpcy5zb3VyY2U9YSx0aGlzLnRhcmdldD1mLHRoaXMudmFsdWU9cH19Y29uc3QgbVllPShpLGEsZik9PntpSy5wdXNoKG5ldyB2WWUoaSxhLGYpKX07Y2xhc3MgeVlle2NvbnN0cnVjdG9yKGEpe3RoaXMuSUQ9YX19Y29uc3QgeFllPXtub2Rlc01hcDprTCxnZXRDb25maWc6KCk9Pk9lKCkuc2Fua2V5LGdldE5vZGVzOigpPT5zSyxnZXRMaW5rczooKT0+aUssZ2V0R3JhcGg6KCk9Pih7bm9kZXM6c0subWFwKGk9Pih7aWQ6aS5JRH0pKSxsaW5rczppSy5tYXAoaT0+KHtzb3VyY2U6aS5zb3VyY2UuSUQsdGFyZ2V0OmkudGFyZ2V0LklELHZhbHVlOmkudmFsdWV9KSl9KSxhZGRMaW5rOm1ZZSxmaW5kT3JDcmVhdGVOb2RlOmk9PihpPUtyLnNhbml0aXplVGV4dChpLE9lKCkpLGtMW2ldfHwoa0xbaV09bmV3IHlZZShpKSxzSy5wdXNoKGtMW2ldKSksa0xbaV0pLGdldEFjY1RpdGxlOmZnLHNldEFjY1RpdGxlOkUwLGdldEFjY0Rlc2NyaXB0aW9uOmdnLHNldEFjY0Rlc2NyaXB0aW9uOmRnLGdldERpYWdyYW1UaXRsZTpwZyxzZXREaWFncmFtVGl0bGU6TmIsY2xlYXI6d1llfTtmdW5jdGlvbiBiJHQoaSxhKXtsZXQgZjtpZihhPT09dm9pZCAwKWZvcihjb25zdCBwIG9mIGkpcCE9bnVsbCYmKGY8cHx8Zj09PXZvaWQgMCYmcD49cCkmJihmPXApO2Vsc2V7bGV0IHA9LTE7Zm9yKGxldCB3IG9mIGkpKHc9YSh3LCsrcCxpKSkhPW51bGwmJihmPHd8fGY9PT12b2lkIDAmJnc+PXcpJiYoZj13KX1yZXR1cm4gZn1mdW5jdGlvbiB3JHQoaSxhKXtsZXQgZjtpZihhPT09dm9pZCAwKWZvcihjb25zdCBwIG9mIGkpcCE9bnVsbCYmKGY+cHx8Zj09PXZvaWQgMCYmcD49cCkmJihmPXApO2Vsc2V7bGV0IHA9LTE7Zm9yKGxldCB3IG9mIGkpKHc9YSh3LCsrcCxpKSkhPW51bGwmJihmPnd8fGY9PT12b2lkIDAmJnc+PXcpJiYoZj13KX1yZXR1cm4gZn1mdW5jdGlvbiBycHQoaSxhKXtsZXQgZj0wO2lmKGE9PT12b2lkIDApZm9yKGxldCBwIG9mIGkpKHA9K3ApJiYoZis9cCk7ZWxzZXtsZXQgcD0tMTtmb3IobGV0IHcgb2YgaSkodz0rYSh3LCsrcCxpKSkmJihmKz13KX1yZXR1cm4gZn1mdW5jdGlvbiBrWWUoaSl7cmV0dXJuIGkudGFyZ2V0LmRlcHRofWZ1bmN0aW9uIEVZZShpKXtyZXR1cm4gaS5kZXB0aH1mdW5jdGlvbiBUWWUoaSxhKXtyZXR1cm4gYS0xLWkuaGVpZ2h0fWZ1bmN0aW9uIHYkdChpLGEpe3JldHVybiBpLnNvdXJjZUxpbmtzLmxlbmd0aD9pLmRlcHRoOmEtMX1mdW5jdGlvbiBDWWUoaSl7cmV0dXJuIGkudGFyZ2V0TGlua3MubGVuZ3RoP2kuZGVwdGg6aS5zb3VyY2VMaW5rcy5sZW5ndGg/dyR0KGkuc291cmNlTGlua3Msa1llKS0xOjB9ZnVuY3Rpb24gYUsoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGl9fWZ1bmN0aW9uIG0kdChpLGEpe3JldHVybiBvSyhpLnNvdXJjZSxhLnNvdXJjZSl8fGkuaW5kZXgtYS5pbmRleH1mdW5jdGlvbiB5JHQoaSxhKXtyZXR1cm4gb0soaS50YXJnZXQsYS50YXJnZXQpfHxpLmluZGV4LWEuaW5kZXh9ZnVuY3Rpb24gb0soaSxhKXtyZXR1cm4gaS55MC1hLnkwfWZ1bmN0aW9uIGlwdChpKXtyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiBfWWUoaSl7cmV0dXJuIGkuaW5kZXh9ZnVuY3Rpb24gU1llKGkpe3JldHVybiBpLm5vZGVzfWZ1bmN0aW9uIEFZZShpKXtyZXR1cm4gaS5saW5rc31mdW5jdGlvbiB4JHQoaSxhKXtjb25zdCBmPWkuZ2V0KGEpO2lmKCFmKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIithKTtyZXR1cm4gZn1mdW5jdGlvbiBrJHQoe25vZGVzOml9KXtmb3IoY29uc3QgYSBvZiBpKXtsZXQgZj1hLnkwLHA9Zjtmb3IoY29uc3QgdyBvZiBhLnNvdXJjZUxpbmtzKXcueTA9Zit3LndpZHRoLzIsZis9dy53aWR0aDtmb3IoY29uc3QgdyBvZiBhLnRhcmdldExpbmtzKXcueTE9cCt3LndpZHRoLzIscCs9dy53aWR0aH19ZnVuY3Rpb24gTFllKCl7bGV0IGk9MCxhPTAsZj0xLHA9MSx3PTI0LG09OCxiLEU9X1llLF89diR0LEEsSSxCPVNZZSxOPUFZZSxSPTY7ZnVuY3Rpb24geigpe2NvbnN0IE90PXtub2RlczpCLmFwcGx5KG51bGwsYXJndW1lbnRzKSxsaW5rczpOLmFwcGx5KG51bGwsYXJndW1lbnRzKX07cmV0dXJuIFcoT3QpLGV0KE90KSxzdChPdCksYXQoT3QpLHl0KE90KSxrJHQoT3QpLE90fXoudXBkYXRlPWZ1bmN0aW9uKE90KXtyZXR1cm4gayR0KE90KSxPdH0sei5ub2RlSWQ9ZnVuY3Rpb24oT3Qpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPXR5cGVvZiBPdD09ImZ1bmN0aW9uIj9PdDphSyhPdCkseik6RX0sei5ub2RlQWxpZ249ZnVuY3Rpb24oT3Qpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPXR5cGVvZiBPdD09ImZ1bmN0aW9uIj9PdDphSyhPdCkseik6X30sei5ub2RlU29ydD1mdW5jdGlvbihPdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9T3Qseik6QX0sei5ub2RlV2lkdGg9ZnVuY3Rpb24oT3Qpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PStPdCx6KTp3fSx6Lm5vZGVQYWRkaW5nPWZ1bmN0aW9uKE90KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1iPStPdCx6KTptfSx6Lm5vZGVzPWZ1bmN0aW9uKE90KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQj10eXBlb2YgT3Q9PSJmdW5jdGlvbiI/T3Q6YUsoT3QpLHopOkJ9LHoubGlua3M9ZnVuY3Rpb24oT3Qpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhOPXR5cGVvZiBPdD09ImZ1bmN0aW9uIj9PdDphSyhPdCkseik6Tn0sei5saW5rU29ydD1mdW5jdGlvbihPdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEk9T3Qseik6SX0sei5zaXplPWZ1bmN0aW9uKE90KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1hPTAsZj0rT3RbMF0scD0rT3RbMV0seik6W2YtaSxwLWFdfSx6LmV4dGVudD1mdW5jdGlvbihPdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K090WzBdWzBdLGY9K090WzFdWzBdLGE9K090WzBdWzFdLHA9K090WzFdWzFdLHopOltbaSxhXSxbZixwXV19LHouaXRlcmF0aW9ucz1mdW5jdGlvbihPdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFI9K090LHopOlJ9O2Z1bmN0aW9uIFcoe25vZGVzOk90LGxpbmtzOkJ0fSl7Zm9yKGNvbnN0W1osQ3Rdb2YgT3QuZW50cmllcygpKUN0LmluZGV4PVosQ3Quc291cmNlTGlua3M9W10sQ3QudGFyZ2V0TGlua3M9W107Y29uc3QgRXQ9bmV3IE1hcChPdC5tYXAoKFosQ3QpPT5bRShaLEN0LE90KSxaXSkpO2Zvcihjb25zdFtaLEN0XW9mIEJ0LmVudHJpZXMoKSl7Q3QuaW5kZXg9WjtsZXR7c291cmNlOnh0LHRhcmdldDpIdH09Q3Q7dHlwZW9mIHh0IT0ib2JqZWN0IiYmKHh0PUN0LnNvdXJjZT14JHQoRXQseHQpKSx0eXBlb2YgSHQhPSJvYmplY3QiJiYoSHQ9Q3QudGFyZ2V0PXgkdChFdCxIdCkpLHh0LnNvdXJjZUxpbmtzLnB1c2goQ3QpLEh0LnRhcmdldExpbmtzLnB1c2goQ3QpfWlmKEkhPW51bGwpZm9yKGNvbnN0e3NvdXJjZUxpbmtzOlosdGFyZ2V0TGlua3M6Q3R9b2YgT3QpWi5zb3J0KEkpLEN0LnNvcnQoSSl9ZnVuY3Rpb24gZXQoe25vZGVzOk90fSl7Zm9yKGNvbnN0IEJ0IG9mIE90KUJ0LnZhbHVlPUJ0LmZpeGVkVmFsdWU9PT12b2lkIDA/TWF0aC5tYXgocnB0KEJ0LnNvdXJjZUxpbmtzLGlwdCkscnB0KEJ0LnRhcmdldExpbmtzLGlwdCkpOkJ0LmZpeGVkVmFsdWV9ZnVuY3Rpb24gc3Qoe25vZGVzOk90fSl7Y29uc3QgQnQ9T3QubGVuZ3RoO2xldCBFdD1uZXcgU2V0KE90KSxaPW5ldyBTZXQsQ3Q9MDtmb3IoO0V0LnNpemU7KXtmb3IoY29uc3QgeHQgb2YgRXQpe3h0LmRlcHRoPUN0O2Zvcihjb25zdHt0YXJnZXQ6SHR9b2YgeHQuc291cmNlTGlua3MpWi5hZGQoSHQpfWlmKCsrQ3Q+QnQpdGhyb3cgbmV3IEVycm9yKCJjaXJjdWxhciBsaW5rIik7RXQ9WixaPW5ldyBTZXR9fWZ1bmN0aW9uIGF0KHtub2RlczpPdH0pe2NvbnN0IEJ0PU90Lmxlbmd0aDtsZXQgRXQ9bmV3IFNldChPdCksWj1uZXcgU2V0LEN0PTA7Zm9yKDtFdC5zaXplOyl7Zm9yKGNvbnN0IHh0IG9mIEV0KXt4dC5oZWlnaHQ9Q3Q7Zm9yKGNvbnN0e3NvdXJjZTpIdH1vZiB4dC50YXJnZXRMaW5rcylaLmFkZChIdCl9aWYoKytDdD5CdCl0aHJvdyBuZXcgRXJyb3IoImNpcmN1bGFyIGxpbmsiKTtFdD1aLFo9bmV3IFNldH19ZnVuY3Rpb24gYnQoe25vZGVzOk90fSl7Y29uc3QgQnQ9YiR0KE90LEN0PT5DdC5kZXB0aCkrMSxFdD0oZi1pLXcpLyhCdC0xKSxaPW5ldyBBcnJheShCdCk7Zm9yKGNvbnN0IEN0IG9mIE90KXtjb25zdCB4dD1NYXRoLm1heCgwLE1hdGgubWluKEJ0LTEsTWF0aC5mbG9vcihfLmNhbGwobnVsbCxDdCxCdCkpKSk7Q3QubGF5ZXI9eHQsQ3QueDA9aSt4dCpFdCxDdC54MT1DdC54MCt3LFpbeHRdP1pbeHRdLnB1c2goQ3QpOlpbeHRdPVtDdF19aWYoQSlmb3IoY29uc3QgQ3Qgb2YgWilDdC5zb3J0KEEpO3JldHVybiBafWZ1bmN0aW9uIG10KE90KXtjb25zdCBCdD13JHQoT3QsRXQ9PihwLWEtKEV0Lmxlbmd0aC0xKSpiKS9ycHQoRXQsaXB0KSk7Zm9yKGNvbnN0IEV0IG9mIE90KXtsZXQgWj1hO2Zvcihjb25zdCBDdCBvZiBFdCl7Q3QueTA9WixDdC55MT1aK0N0LnZhbHVlKkJ0LFo9Q3QueTErYjtmb3IoY29uc3QgeHQgb2YgQ3Quc291cmNlTGlua3MpeHQud2lkdGg9eHQudmFsdWUqQnR9Wj0ocC1aK2IpLyhFdC5sZW5ndGgrMSk7Zm9yKGxldCBDdD0wO0N0PEV0Lmxlbmd0aDsrK0N0KXtjb25zdCB4dD1FdFtDdF07eHQueTArPVoqKEN0KzEpLHh0LnkxKz1aKihDdCsxKX1UdChFdCl9fWZ1bmN0aW9uIHl0KE90KXtjb25zdCBCdD1idChPdCk7Yj1NYXRoLm1pbihtLChwLWEpLyhiJHQoQnQsRXQ9PkV0Lmxlbmd0aCktMSkpLG10KEJ0KTtmb3IobGV0IEV0PTA7RXQ8UjsrK0V0KXtjb25zdCBaPU1hdGgucG93KC45OSxFdCksQ3Q9TWF0aC5tYXgoMS1aLChFdCsxKS9SKTt1dChCdCxaLEN0KSxmdChCdCxaLEN0KX19ZnVuY3Rpb24gZnQoT3QsQnQsRXQpe2ZvcihsZXQgWj0xLEN0PU90Lmxlbmd0aDtaPEN0OysrWil7Y29uc3QgeHQ9T3RbWl07Zm9yKGNvbnN0IEh0IG9mIHh0KXtsZXQgTGU9MCxGdD0wO2Zvcihjb25zdHtzb3VyY2U6U2UsdmFsdWU6bWV9b2YgSHQudGFyZ2V0TGlua3Mpe2xldCBWZT1tZSooSHQubGF5ZXItU2UubGF5ZXIpO0xlKz1udChTZSxIdCkqVmUsRnQrPVZlfWlmKCEoRnQ+MCkpY29udGludWU7bGV0IGduPShMZS9GdC1IdC55MCkqQnQ7SHQueTArPWduLEh0LnkxKz1nbixVKEh0KX1BPT09dm9pZCAwJiZ4dC5zb3J0KG9LKSx2dCh4dCxFdCl9fWZ1bmN0aW9uIHV0KE90LEJ0LEV0KXtmb3IobGV0IFo9T3QubGVuZ3RoLEN0PVotMjtDdD49MDstLUN0KXtjb25zdCB4dD1PdFtDdF07Zm9yKGNvbnN0IEh0IG9mIHh0KXtsZXQgTGU9MCxGdD0wO2Zvcihjb25zdHt0YXJnZXQ6U2UsdmFsdWU6bWV9b2YgSHQuc291cmNlTGlua3Mpe2xldCBWZT1tZSooU2UubGF5ZXItSHQubGF5ZXIpO0xlKz1JdChIdCxTZSkqVmUsRnQrPVZlfWlmKCEoRnQ+MCkpY29udGludWU7bGV0IGduPShMZS9GdC1IdC55MCkqQnQ7SHQueTArPWduLEh0LnkxKz1nbixVKEh0KX1BPT09dm9pZCAwJiZ4dC5zb3J0KG9LKSx2dCh4dCxFdCl9fWZ1bmN0aW9uIHZ0KE90LEJ0KXtjb25zdCBFdD1PdC5sZW5ndGg+PjEsWj1PdFtFdF07cHQoT3QsWi55MC1iLEV0LTEsQnQpLFgoT3QsWi55MStiLEV0KzEsQnQpLHB0KE90LHAsT3QubGVuZ3RoLTEsQnQpLFgoT3QsYSwwLEJ0KX1mdW5jdGlvbiBYKE90LEJ0LEV0LFope2Zvcig7RXQ8T3QubGVuZ3RoOysrRXQpe2NvbnN0IEN0PU90W0V0XSx4dD0oQnQtQ3QueTApKlo7eHQ+MWUtNiYmKEN0LnkwKz14dCxDdC55MSs9eHQpLEJ0PUN0LnkxK2J9fWZ1bmN0aW9uIHB0KE90LEJ0LEV0LFope2Zvcig7RXQ+PTA7LS1FdCl7Y29uc3QgQ3Q9T3RbRXRdLHh0PShDdC55MS1CdCkqWjt4dD4xZS02JiYoQ3QueTAtPXh0LEN0LnkxLT14dCksQnQ9Q3QueTAtYn19ZnVuY3Rpb24gVSh7c291cmNlTGlua3M6T3QsdGFyZ2V0TGlua3M6QnR9KXtpZihJPT09dm9pZCAwKXtmb3IoY29uc3R7c291cmNlOntzb3VyY2VMaW5rczpFdH19b2YgQnQpRXQuc29ydCh5JHQpO2Zvcihjb25zdHt0YXJnZXQ6e3RhcmdldExpbmtzOkV0fX1vZiBPdClFdC5zb3J0KG0kdCl9fWZ1bmN0aW9uIFR0KE90KXtpZihJPT09dm9pZCAwKWZvcihjb25zdHtzb3VyY2VMaW5rczpCdCx0YXJnZXRMaW5rczpFdH1vZiBPdClCdC5zb3J0KHkkdCksRXQuc29ydChtJHQpfWZ1bmN0aW9uIG50KE90LEJ0KXtsZXQgRXQ9T3QueTAtKE90LnNvdXJjZUxpbmtzLmxlbmd0aC0xKSpiLzI7Zm9yKGNvbnN0e3RhcmdldDpaLHdpZHRoOkN0fW9mIE90LnNvdXJjZUxpbmtzKXtpZihaPT09QnQpYnJlYWs7RXQrPUN0K2J9Zm9yKGNvbnN0e3NvdXJjZTpaLHdpZHRoOkN0fW9mIEJ0LnRhcmdldExpbmtzKXtpZihaPT09T3QpYnJlYWs7RXQtPUN0fXJldHVybiBFdH1mdW5jdGlvbiBJdChPdCxCdCl7bGV0IEV0PUJ0LnkwLShCdC50YXJnZXRMaW5rcy5sZW5ndGgtMSkqYi8yO2Zvcihjb25zdHtzb3VyY2U6Wix3aWR0aDpDdH1vZiBCdC50YXJnZXRMaW5rcyl7aWYoWj09PU90KWJyZWFrO0V0Kz1DdCtifWZvcihjb25zdHt0YXJnZXQ6Wix3aWR0aDpDdH1vZiBPdC5zb3VyY2VMaW5rcyl7aWYoWj09PUJ0KWJyZWFrO0V0LT1DdH1yZXR1cm4gRXR9cmV0dXJuIHp9dmFyIHNwdD1NYXRoLlBJLGFwdD0yKnNwdCxPVD0xZS02LE1ZZT1hcHQtT1Q7ZnVuY3Rpb24gb3B0KCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gRSR0KCl7cmV0dXJuIG5ldyBvcHR9b3B0LnByb3RvdHlwZT1FJHQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpvcHQsbW92ZVRvOmZ1bmN0aW9uKGksYSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSthKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24oaSxhKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K2EpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGksYSxmLHApe3RoaXMuXys9IlEiKyAraSsiLCIrICthKyIsIisodGhpcy5feDE9K2YpKyIsIisodGhpcy5feTE9K3ApfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGksYSxmLHAsdyxtKXt0aGlzLl8rPSJDIisgK2krIiwiKyArYSsiLCIrICtmKyIsIisgK3ArIiwiKyh0aGlzLl94MT0rdykrIiwiKyh0aGlzLl95MT0rbSl9LGFyY1RvOmZ1bmN0aW9uKGksYSxmLHAsdyl7aT0raSxhPSthLGY9K2YscD0rcCx3PSt3O3ZhciBtPXRoaXMuX3gxLGI9dGhpcy5feTEsRT1mLWksXz1wLWEsQT1tLWksST1iLWEsQj1BKkErSSpJO2lmKHc8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIit3KTtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPWkpKyIsIisodGhpcy5feTE9YSk7ZWxzZSBpZihCPk9UKWlmKCEoTWF0aC5hYnMoSSpFLV8qQSk+T1QpfHwhdyl0aGlzLl8rPSJMIisodGhpcy5feDE9aSkrIiwiKyh0aGlzLl95MT1hKTtlbHNle3ZhciBOPWYtbSxSPXAtYix6PUUqRStfKl8sVz1OKk4rUipSLGV0PU1hdGguc3FydCh6KSxzdD1NYXRoLnNxcnQoQiksYXQ9dypNYXRoLnRhbigoc3B0LU1hdGguYWNvcygoeitCLVcpLygyKmV0KnN0KSkpLzIpLGJ0PWF0L3N0LG10PWF0L2V0O01hdGguYWJzKGJ0LTEpPk9UJiYodGhpcy5fKz0iTCIrKGkrYnQqQSkrIiwiKyhhK2J0KkkpKSx0aGlzLl8rPSJBIit3KyIsIit3KyIsMCwwLCIrICsoSSpOPkEqUikrIiwiKyh0aGlzLl94MT1pK210KkUpKyIsIisodGhpcy5feTE9YSttdCpfKX19LGFyYzpmdW5jdGlvbihpLGEsZixwLHcsbSl7aT0raSxhPSthLGY9K2YsbT0hIW07dmFyIGI9ZipNYXRoLmNvcyhwKSxFPWYqTWF0aC5zaW4ocCksXz1pK2IsQT1hK0UsST0xXm0sQj1tP3Atdzp3LXA7aWYoZjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2YpO3RoaXMuX3gxPT09bnVsbD90aGlzLl8rPSJNIitfKyIsIitBOihNYXRoLmFicyh0aGlzLl94MS1fKT5PVHx8TWF0aC5hYnModGhpcy5feTEtQSk+T1QpJiYodGhpcy5fKz0iTCIrXysiLCIrQSksZiYmKEI8MCYmKEI9QiVhcHQrYXB0KSxCPk1ZZT90aGlzLl8rPSJBIitmKyIsIitmKyIsMCwxLCIrSSsiLCIrKGktYikrIiwiKyhhLUUpKyJBIitmKyIsIitmKyIsMCwxLCIrSSsiLCIrKHRoaXMuX3gxPV8pKyIsIisodGhpcy5feTE9QSk6Qj5PVCYmKHRoaXMuXys9IkEiK2YrIiwiK2YrIiwwLCIrICsoQj49c3B0KSsiLCIrSSsiLCIrKHRoaXMuX3gxPWkrZipNYXRoLmNvcyh3KSkrIiwiKyh0aGlzLl95MT1hK2YqTWF0aC5zaW4odykpKSl9LHJlY3Q6ZnVuY3Rpb24oaSxhLGYscCl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSthKSsiaCIrICtmKyJ2IisgK3ArImgiKy1mKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07ZnVuY3Rpb24gVCR0KGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpfX1mdW5jdGlvbiBEWWUoaSl7cmV0dXJuIGlbMF19ZnVuY3Rpb24gSVllKGkpe3JldHVybiBpWzFdfXZhciBPWWU9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIFBZZShpKXtyZXR1cm4gaS5zb3VyY2V9ZnVuY3Rpb24gRlllKGkpe3JldHVybiBpLnRhcmdldH1mdW5jdGlvbiBOWWUoaSl7dmFyIGE9UFllLGY9RlllLHA9RFllLHc9SVllLG09bnVsbDtmdW5jdGlvbiBiKCl7dmFyIEUsXz1PWWUuY2FsbChhcmd1bWVudHMpLEE9YS5hcHBseSh0aGlzLF8pLEk9Zi5hcHBseSh0aGlzLF8pO2lmKG18fChtPUU9RSR0KCkpLGkobSwrcC5hcHBseSh0aGlzLChfWzBdPUEsXykpLCt3LmFwcGx5KHRoaXMsXyksK3AuYXBwbHkodGhpcywoX1swXT1JLF8pKSwrdy5hcHBseSh0aGlzLF8pKSxFKXJldHVybiBtPW51bGwsRSsiInx8bnVsbH1yZXR1cm4gYi5zb3VyY2U9ZnVuY3Rpb24oRSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9RSxiKTphfSxiLnRhcmdldD1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1FLGIpOmZ9LGIueD1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10eXBlb2YgRT09ImZ1bmN0aW9uIj9FOlQkdCgrRSksYik6cH0sYi55PWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PXR5cGVvZiBFPT0iZnVuY3Rpb24iP0U6VCR0KCtFKSxiKTp3fSxiLmNvbnRleHQ9ZnVuY3Rpb24oRSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09RT8/bnVsbCxiKTptfSxifWZ1bmN0aW9uIEJZZShpLGEsZixwLHcpe2kubW92ZVRvKGEsZiksaS5iZXppZXJDdXJ2ZVRvKGE9KGErcCkvMixmLGEsdyxwLHcpfWZ1bmN0aW9uIFJZZSgpe3JldHVybiBOWWUoQlllKX1mdW5jdGlvbiBqWWUoaSl7cmV0dXJuW2kuc291cmNlLngxLGkueTBdfWZ1bmN0aW9uICRZZShpKXtyZXR1cm5baS50YXJnZXQueDAsaS55MV19ZnVuY3Rpb24gelllKCl7cmV0dXJuIFJZZSgpLnNvdXJjZShqWWUpLnRhcmdldCgkWWUpfWNvbnN0IEMkdD1jbGFzcyBSTHR7c3RhdGljIG5leHQoYSl7cmV0dXJuIG5ldyBSTHQoYSsgKytSTHQuY291bnQpfWNvbnN0cnVjdG9yKGEpe3RoaXMuaWQ9YSx0aGlzLmhyZWY9YCMke2F9YH10b1N0cmluZygpe3JldHVybiJ1cmwoIit0aGlzLmhyZWYrIikifX07QyR0LmNvdW50PTA7bGV0IF8kdD1DJHQ7Y29uc3QgcVllPXtsZWZ0OkVZZSxyaWdodDpUWWUsY2VudGVyOkNZZSxqdXN0aWZ5OnYkdH0sSFllPXtkcmF3OmZ1bmN0aW9uKGksYSxmLHApe2NvbnN0e3NlY3VyaXR5TGV2ZWw6dyxzYW5rZXk6bX09T2UoKSxiPVNPdC5zYW5rZXk7bGV0IEU7dz09PSJzYW5kYm94IiYmKEU9eXIoIiNpIithKSk7Y29uc3QgXz15cih3PT09InNhbmRib3giP0Uubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLEE9dz09PSJzYW5kYm94Ij9fLnNlbGVjdChgW2lkPSIke2F9Il1gKTp5cihgW2lkPSIke2F9Il1gKSxJPShtPT1udWxsP3ZvaWQgMDptLndpZHRoKT8/Yi53aWR0aCxCPShtPT1udWxsP3ZvaWQgMDptLmhlaWdodCk/P2Iud2lkdGgsTj0obT09bnVsbD92b2lkIDA6bS51c2VNYXhXaWR0aCk/P2IudXNlTWF4V2lkdGgsUj0obT09bnVsbD92b2lkIDA6bS5ub2RlQWxpZ25tZW50KT8/Yi5ub2RlQWxpZ25tZW50LHo9KG09PW51bGw/dm9pZCAwOm0ucHJlZml4KT8/Yi5wcmVmaXgsVz0obT09bnVsbD92b2lkIDA6bS5zdWZmaXgpPz9iLnN1ZmZpeCxldD0obT09bnVsbD92b2lkIDA6bS5zaG93VmFsdWVzKT8/Yi5zaG93VmFsdWVzO2swKEEsQixJLE4pO2NvbnN0IHN0PXAuZGIuZ2V0R3JhcGgoKSxhdD1xWWVbUl0sYnQ9MTA7TFllKCkubm9kZUlkKHB0PT5wdC5pZCkubm9kZVdpZHRoKGJ0KS5ub2RlUGFkZGluZygxMCsoZXQ/MTU6MCkpLm5vZGVBbGlnbihhdCkuZXh0ZW50KFtbMCwwXSxbSSxCXV0pKHN0KTtjb25zdCB5dD1YVShYN2UpO0EuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJub2RlcyIpLnNlbGVjdEFsbCgiLm5vZGUiKS5kYXRhKHN0Lm5vZGVzKS5qb2luKCJnIikuYXR0cigiY2xhc3MiLCJub2RlIikuYXR0cigiaWQiLHB0PT4ocHQudWlkPV8kdC5uZXh0KCJub2RlLSIpKS5pZCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihwdCl7cmV0dXJuInRyYW5zbGF0ZSgiK3B0LngwKyIsIitwdC55MCsiKSJ9KS5hdHRyKCJ4IixwdD0+cHQueDApLmF0dHIoInkiLHB0PT5wdC55MCkuYXBwZW5kKCJyZWN0IikuYXR0cigiaGVpZ2h0IixwdD0+cHQueTEtcHQueTApLmF0dHIoIndpZHRoIixwdD0+cHQueDEtcHQueDApLmF0dHIoImZpbGwiLHB0PT55dChwdC5pZCkpO2NvbnN0IGZ0PSh7aWQ6cHQsdmFsdWU6VX0pPT5ldD9gJHtwdH0KJHt6fSR7TWF0aC5yb3VuZChVKjEwMCkvMTAwfSR7V31gOnB0O0EuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJub2RlLWxhYmVscyIpLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoImZvbnQtc2l6ZSIsMTQpLnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoc3Qubm9kZXMpLmpvaW4oInRleHQiKS5hdHRyKCJ4IixwdD0+cHQueDA8SS8yP3B0LngxKzY6cHQueDAtNikuYXR0cigieSIscHQ9PihwdC55MStwdC55MCkvMikuYXR0cigiZHkiLGAke2V0PyIwIjoiMC4zNSJ9ZW1gKS5hdHRyKCJ0ZXh0LWFuY2hvciIscHQ9PnB0LngwPEkvMj8ic3RhcnQiOiJlbmQiKS50ZXh0KGZ0KTtjb25zdCB1dD1BLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGlua3MiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwuNSkuc2VsZWN0QWxsKCIubGluayIpLmRhdGEoc3QubGlua3MpLmpvaW4oImciKS5hdHRyKCJjbGFzcyIsImxpbmsiKS5zdHlsZSgibWl4LWJsZW5kLW1vZGUiLCJtdWx0aXBseSIpLHZ0PShtPT1udWxsP3ZvaWQgMDptLmxpbmtDb2xvcil8fCJncmFkaWVudCI7aWYodnQ9PT0iZ3JhZGllbnQiKXtjb25zdCBwdD11dC5hcHBlbmQoImxpbmVhckdyYWRpZW50IikuYXR0cigiaWQiLFU9PihVLnVpZD1fJHQubmV4dCgibGluZWFyR3JhZGllbnQtIikpLmlkKS5hdHRyKCJncmFkaWVudFVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJ4MSIsVT0+VS5zb3VyY2UueDEpLmF0dHIoIngyIixVPT5VLnRhcmdldC54MCk7cHQuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IiwiMCUiKS5hdHRyKCJzdG9wLWNvbG9yIixVPT55dChVLnNvdXJjZS5pZCkpLHB0LmFwcGVuZCgic3RvcCIpLmF0dHIoIm9mZnNldCIsIjEwMCUiKS5hdHRyKCJzdG9wLWNvbG9yIixVPT55dChVLnRhcmdldC5pZCkpfWxldCBYO3N3aXRjaCh2dCl7Y2FzZSJncmFkaWVudCI6WD1wdD0+cHQudWlkO2JyZWFrO2Nhc2Uic291cmNlIjpYPXB0PT55dChwdC5zb3VyY2UuaWQpO2JyZWFrO2Nhc2UidGFyZ2V0IjpYPXB0PT55dChwdC50YXJnZXQuaWQpO2JyZWFrO2RlZmF1bHQ6WD12dH11dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIix6WWUoKSkuYXR0cigic3Ryb2tlIixYKS5hdHRyKCJzdHJva2Utd2lkdGgiLHB0PT5NYXRoLm1heCgxLHB0LndpZHRoKSl9fSxWWWU9aT0+aS5yZXBsYWNlQWxsKC9eW15cU1xuXHJdK3xbXlxTXG5ccl0rJC9nLCIiKS5yZXBsYWNlQWxsKC8oW1xuXHJdKSsvZyxgCmApLnRyaW0oKSxHWWU9cksucGFyc2UuYmluZChySyk7cksucGFyc2U9aT0+R1llKFZZZShpKSk7Y29uc3QgVVllPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6ckssZGI6eFllLHJlbmRlcmVyOkhZZX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7cmV0dXJuIEJifSk7Cg==`; \ No newline at end of file +module.exports = `KGZ1bmN0aW9uKEpNLEFnKXt0eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJnR5cGVvZiBtb2R1bGU8InUiP21vZHVsZS5leHBvcnRzPUFnKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoQWcpOihKTT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczpKTXx8c2VsZixKTS5tZXJtYWlkPUFnKCkpfSkodGhpcyxmdW5jdGlvbigpe3ZhciBGV2UsUldlOyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBKTShpKXtmb3IodmFyIHM9W10sdT0xO3U8YXJndW1lbnRzLmxlbmd0aDt1Kyspc1t1LTFdPWFyZ3VtZW50c1t1XTt2YXIgZD1BcnJheS5mcm9tKHR5cGVvZiBpPT0ic3RyaW5nIj9baV06aSk7ZFtkLmxlbmd0aC0xXT1kW2QubGVuZ3RoLTFdLnJlcGxhY2UoL1xyP1xuKFtcdCBdKikkLywiIik7dmFyIHA9ZC5yZWR1Y2UoZnVuY3Rpb24oeSxUKXt2YXIgXz1ULm1hdGNoKC9cbihbXHQgXSt8KD8hXHMpLikvZyk7cmV0dXJuIF8/eS5jb25jYXQoXy5tYXAoZnVuY3Rpb24oQSl7dmFyIFAsUjtyZXR1cm4oUj0oUD1BLm1hdGNoKC9bXHQgXS9nKSk9PT1udWxsfHxQPT09dm9pZCAwP3ZvaWQgMDpQLmxlbmd0aCkhPT1udWxsJiZSIT09dm9pZCAwP1I6MH0pKTp5fSxbXSk7aWYocC5sZW5ndGgpe3ZhciB2PW5ldyBSZWdFeHAoYApbCSBde2ArTWF0aC5taW4uYXBwbHkoTWF0aCxwKSsifSIsImciKTtkPWQubWFwKGZ1bmN0aW9uKHkpe3JldHVybiB5LnJlcGxhY2UodixgCmApfSl9ZFswXT1kWzBdLnJlcGxhY2UoL15ccj9cbi8sIiIpO3ZhciBiPWRbMF07cmV0dXJuIHMuZm9yRWFjaChmdW5jdGlvbih5LFQpe3ZhciBfPWIubWF0Y2goLyg/Ol58XG4pKCAqKSQvKSxBPV8/X1sxXToiIixQPXk7dHlwZW9mIHk9PSJzdHJpbmciJiZ5LmluY2x1ZGVzKGAKYCkmJihQPVN0cmluZyh5KS5zcGxpdChgCmApLm1hcChmdW5jdGlvbihSLEYpe3JldHVybiBGPT09MD9SOiIiK0ErUn0pLmpvaW4oYApgKSksYis9UCtkW1QrMV19KSxifXZhciBBZz10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9O2Z1bmN0aW9uIGhDKGkpe3JldHVybiBpJiZpLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLCJkZWZhdWx0Iik/aS5kZWZhdWx0Oml9dmFyIG9CZT17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGkscyl7KGZ1bmN0aW9uKHUsZCl7aS5leHBvcnRzPWQoKX0pKEFnLGZ1bmN0aW9uKCl7dmFyIHU9MWUzLGQ9NmU0LHA9MzZlNSx2PSJtaWxsaXNlY29uZCIsYj0ic2Vjb25kIix5PSJtaW51dGUiLFQ9ImhvdXIiLF89ImRheSIsQT0id2VlayIsUD0ibW9udGgiLFI9InF1YXJ0ZXIiLEY9InllYXIiLGo9ImRhdGUiLEs9IkludmFsaWQgRGF0ZSIsZWU9L14oXGR7NH0pWy0vXT8oXGR7MSwyfSk/Wy0vXT8oXGR7MCwyfSlbVHRcc10qKFxkezEsMn0pPzo/KFxkezEsMn0pPzo/KFxkezEsMn0pP1suOl0/KFxkKyk/JC8saWU9L1xbKFteXF1dKyldfFl7MSw0fXxNezEsNH18RHsxLDJ9fGR7MSw0fXxIezEsMn18aHsxLDJ9fGF8QXxtezEsMn18c3sxLDJ9fFp7MSwyfXxTU1MvZyxvZT17bmFtZToiZW4iLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSxtb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksb3JkaW5hbDpmdW5jdGlvbihGZSl7dmFyIFBlPVsidGgiLCJzdCIsIm5kIiwicmQiXSxqZT1GZSUxMDA7cmV0dXJuIlsiK0ZlKyhQZVsoamUtMjApJTEwXXx8UGVbamVdfHxQZVswXSkrIl0ifX0scGU9ZnVuY3Rpb24oRmUsUGUsamUpe3ZhciBJZT1TdHJpbmcoRmUpO3JldHVybiFJZXx8SWUubGVuZ3RoPj1QZT9GZToiIitBcnJheShQZSsxLUllLmxlbmd0aCkuam9pbihqZSkrRmV9LGJlPXtzOnBlLHo6ZnVuY3Rpb24oRmUpe3ZhciBQZT0tRmUudXRjT2Zmc2V0KCksamU9TWF0aC5hYnMoUGUpLEllPU1hdGguZmxvb3IoamUvNjApLFNlPWplJTYwO3JldHVybihQZTw9MD8iKyI6Ii0iKStwZShJZSwyLCIwIikrIjoiK3BlKFNlLDIsIjAiKX0sbTpmdW5jdGlvbiBGZShQZSxqZSl7aWYoUGUuZGF0ZSgpPGplLmRhdGUoKSlyZXR1cm4tRmUoamUsUGUpO3ZhciBJZT0xMiooamUueWVhcigpLVBlLnllYXIoKSkrKGplLm1vbnRoKCktUGUubW9udGgoKSksU2U9UGUuY2xvbmUoKS5hZGQoSWUsUCksQ2U9amUtU2U8MCxrZT1QZS5jbG9uZSgpLmFkZChJZSsoQ2U/LTE6MSksUCk7cmV0dXJuKygtKEllKyhqZS1TZSkvKENlP1NlLWtlOmtlLVNlKSl8fDApfSxhOmZ1bmN0aW9uKEZlKXtyZXR1cm4gRmU8MD9NYXRoLmNlaWwoRmUpfHwwOk1hdGguZmxvb3IoRmUpfSxwOmZ1bmN0aW9uKEZlKXtyZXR1cm57TTpQLHk6Rix3OkEsZDpfLEQ6aixoOlQsbTp5LHM6Yixtczp2LFE6Un1bRmVdfHxTdHJpbmcoRmV8fCIiKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL3MkLywiIil9LHU6ZnVuY3Rpb24oRmUpe3JldHVybiBGZT09PXZvaWQgMH19LGFlPSJlbiIsbmU9e307bmVbYWVdPW9lO3ZhciBzZT0iJGlzRGF5anNPYmplY3QiLGRlPWZ1bmN0aW9uKEZlKXtyZXR1cm4gRmUgaW5zdGFuY2VvZiB4ZXx8ISghRmV8fCFGZVtzZV0pfSxYPWZ1bmN0aW9uIEZlKFBlLGplLEllKXt2YXIgU2U7aWYoIVBlKXJldHVybiBhZTtpZih0eXBlb2YgUGU9PSJzdHJpbmciKXt2YXIgQ2U9UGUudG9Mb3dlckNhc2UoKTtuZVtDZV0mJihTZT1DZSksamUmJihuZVtDZV09amUsU2U9Q2UpO3ZhciBrZT1QZS5zcGxpdCgiLSIpO2lmKCFTZSYma2UubGVuZ3RoPjEpcmV0dXJuIEZlKGtlWzBdKX1lbHNle3ZhciBLZT1QZS5uYW1lO25lW0tlXT1QZSxTZT1LZX1yZXR1cm4hSWUmJlNlJiYoYWU9U2UpLFNlfHwhSWUmJmFlfSxnZT1mdW5jdGlvbihGZSxQZSl7aWYoZGUoRmUpKXJldHVybiBGZS5jbG9uZSgpO3ZhciBqZT10eXBlb2YgUGU9PSJvYmplY3QiP1BlOnt9O3JldHVybiBqZS5kYXRlPUZlLGplLmFyZ3M9YXJndW1lbnRzLG5ldyB4ZShqZSl9LFc9YmU7Vy5sPVgsVy5pPWRlLFcudz1mdW5jdGlvbihGZSxQZSl7cmV0dXJuIGdlKEZlLHtsb2NhbGU6UGUuJEwsdXRjOlBlLiR1LHg6UGUuJHgsJG9mZnNldDpQZS4kb2Zmc2V0fSl9O3ZhciB4ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIEZlKGplKXt0aGlzLiRMPVgoamUubG9jYWxlLG51bGwsITApLHRoaXMucGFyc2UoamUpLHRoaXMuJHg9dGhpcy4keHx8amUueHx8e30sdGhpc1tzZV09ITB9dmFyIFBlPUZlLnByb3RvdHlwZTtyZXR1cm4gUGUucGFyc2U9ZnVuY3Rpb24oamUpe3RoaXMuJGQ9ZnVuY3Rpb24oSWUpe3ZhciBTZT1JZS5kYXRlLENlPUllLnV0YztpZihTZT09PW51bGwpcmV0dXJuIG5ldyBEYXRlKE5hTik7aWYoVy51KFNlKSlyZXR1cm4gbmV3IERhdGU7aWYoU2UgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShTZSk7aWYodHlwZW9mIFNlPT0ic3RyaW5nIiYmIS9aJC9pLnRlc3QoU2UpKXt2YXIga2U9U2UubWF0Y2goZWUpO2lmKGtlKXt2YXIgS2U9a2VbMl0tMXx8MCxGdD0oa2VbN118fCIwIikuc3Vic3RyaW5nKDAsMyk7cmV0dXJuIENlP25ldyBEYXRlKERhdGUuVVRDKGtlWzFdLEtlLGtlWzNdfHwxLGtlWzRdfHwwLGtlWzVdfHwwLGtlWzZdfHwwLEZ0KSk6bmV3IERhdGUoa2VbMV0sS2Usa2VbM118fDEsa2VbNF18fDAsa2VbNV18fDAsa2VbNl18fDAsRnQpfX1yZXR1cm4gbmV3IERhdGUoU2UpfShqZSksdGhpcy5pbml0KCl9LFBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgamU9dGhpcy4kZDt0aGlzLiR5PWplLmdldEZ1bGxZZWFyKCksdGhpcy4kTT1qZS5nZXRNb250aCgpLHRoaXMuJEQ9amUuZ2V0RGF0ZSgpLHRoaXMuJFc9amUuZ2V0RGF5KCksdGhpcy4kSD1qZS5nZXRIb3VycygpLHRoaXMuJG09amUuZ2V0TWludXRlcygpLHRoaXMuJHM9amUuZ2V0U2Vjb25kcygpLHRoaXMuJG1zPWplLmdldE1pbGxpc2Vjb25kcygpfSxQZS4kdXRpbHM9ZnVuY3Rpb24oKXtyZXR1cm4gV30sUGUuaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvU3RyaW5nKCkhPT1LfSxQZS5pc1NhbWU9ZnVuY3Rpb24oamUsSWUpe3ZhciBTZT1nZShqZSk7cmV0dXJuIHRoaXMuc3RhcnRPZihJZSk8PVNlJiZTZTw9dGhpcy5lbmRPZihJZSl9LFBlLmlzQWZ0ZXI9ZnVuY3Rpb24oamUsSWUpe3JldHVybiBnZShqZSk8dGhpcy5zdGFydE9mKEllKX0sUGUuaXNCZWZvcmU9ZnVuY3Rpb24oamUsSWUpe3JldHVybiB0aGlzLmVuZE9mKEllKTxnZShqZSl9LFBlLiRnPWZ1bmN0aW9uKGplLEllLFNlKXtyZXR1cm4gVy51KGplKT90aGlzW0llXTp0aGlzLnNldChTZSxqZSl9LFBlLnVuaXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxQZS52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQuZ2V0VGltZSgpfSxQZS5zdGFydE9mPWZ1bmN0aW9uKGplLEllKXt2YXIgU2U9dGhpcyxDZT0hIVcudShJZSl8fEllLGtlPVcucChqZSksS2U9ZnVuY3Rpb24oeHQsUHQpe3ZhciBRZT1XLncoU2UuJHU/RGF0ZS5VVEMoU2UuJHksUHQseHQpOm5ldyBEYXRlKFNlLiR5LFB0LHh0KSxTZSk7cmV0dXJuIENlP1FlOlFlLmVuZE9mKF8pfSxGdD1mdW5jdGlvbih4dCxQdCl7cmV0dXJuIFcudyhTZS50b0RhdGUoKVt4dF0uYXBwbHkoU2UudG9EYXRlKCJzIiksKENlP1swLDAsMCwwXTpbMjMsNTksNTksOTk5XSkuc2xpY2UoUHQpKSxTZSl9LE5lPXRoaXMuJFcsZ249dGhpcy4kTSxfdD10aGlzLiRELEV0PSJzZXQiKyh0aGlzLiR1PyJVVEMiOiIiKTtzd2l0Y2goa2Upe2Nhc2UgRjpyZXR1cm4gQ2U/S2UoMSwwKTpLZSgzMSwxMSk7Y2FzZSBQOnJldHVybiBDZT9LZSgxLGduKTpLZSgwLGduKzEpO2Nhc2UgQTp2YXIgR3Q9dGhpcy4kbG9jYWxlKCkud2Vla1N0YXJ0fHwwLGxuPShOZTxHdD9OZSs3Ok5lKS1HdDtyZXR1cm4gS2UoQ2U/X3QtbG46X3QrKDYtbG4pLGduKTtjYXNlIF86Y2FzZSBqOnJldHVybiBGdChFdCsiSG91cnMiLDApO2Nhc2UgVDpyZXR1cm4gRnQoRXQrIk1pbnV0ZXMiLDEpO2Nhc2UgeTpyZXR1cm4gRnQoRXQrIlNlY29uZHMiLDIpO2Nhc2UgYjpyZXR1cm4gRnQoRXQrIk1pbGxpc2Vjb25kcyIsMyk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5jbG9uZSgpfX0sUGUuZW5kT2Y9ZnVuY3Rpb24oamUpe3JldHVybiB0aGlzLnN0YXJ0T2YoamUsITEpfSxQZS4kc2V0PWZ1bmN0aW9uKGplLEllKXt2YXIgU2UsQ2U9Vy5wKGplKSxrZT0ic2V0IisodGhpcy4kdT8iVVRDIjoiIiksS2U9KFNlPXt9LFNlW19dPWtlKyJEYXRlIixTZVtqXT1rZSsiRGF0ZSIsU2VbUF09a2UrIk1vbnRoIixTZVtGXT1rZSsiRnVsbFllYXIiLFNlW1RdPWtlKyJIb3VycyIsU2VbeV09a2UrIk1pbnV0ZXMiLFNlW2JdPWtlKyJTZWNvbmRzIixTZVt2XT1rZSsiTWlsbGlzZWNvbmRzIixTZSlbQ2VdLEZ0PUNlPT09Xz90aGlzLiREKyhJZS10aGlzLiRXKTpJZTtpZihDZT09PVB8fENlPT09Ril7dmFyIE5lPXRoaXMuY2xvbmUoKS5zZXQoaiwxKTtOZS4kZFtLZV0oRnQpLE5lLmluaXQoKSx0aGlzLiRkPU5lLnNldChqLE1hdGgubWluKHRoaXMuJEQsTmUuZGF5c0luTW9udGgoKSkpLiRkfWVsc2UgS2UmJnRoaXMuJGRbS2VdKEZ0KTtyZXR1cm4gdGhpcy5pbml0KCksdGhpc30sUGUuc2V0PWZ1bmN0aW9uKGplLEllKXtyZXR1cm4gdGhpcy5jbG9uZSgpLiRzZXQoamUsSWUpfSxQZS5nZXQ9ZnVuY3Rpb24oamUpe3JldHVybiB0aGlzW1cucChqZSldKCl9LFBlLmFkZD1mdW5jdGlvbihqZSxJZSl7dmFyIFNlLENlPXRoaXM7amU9TnVtYmVyKGplKTt2YXIga2U9Vy5wKEllKSxLZT1mdW5jdGlvbihnbil7dmFyIF90PWdlKENlKTtyZXR1cm4gVy53KF90LmRhdGUoX3QuZGF0ZSgpK01hdGgucm91bmQoZ24qamUpKSxDZSl9O2lmKGtlPT09UClyZXR1cm4gdGhpcy5zZXQoUCx0aGlzLiRNK2plKTtpZihrZT09PUYpcmV0dXJuIHRoaXMuc2V0KEYsdGhpcy4keStqZSk7aWYoa2U9PT1fKXJldHVybiBLZSgxKTtpZihrZT09PUEpcmV0dXJuIEtlKDcpO3ZhciBGdD0oU2U9e30sU2VbeV09ZCxTZVtUXT1wLFNlW2JdPXUsU2UpW2tlXXx8MSxOZT10aGlzLiRkLmdldFRpbWUoKStqZSpGdDtyZXR1cm4gVy53KE5lLHRoaXMpfSxQZS5zdWJ0cmFjdD1mdW5jdGlvbihqZSxJZSl7cmV0dXJuIHRoaXMuYWRkKC0xKmplLEllKX0sUGUuZm9ybWF0PWZ1bmN0aW9uKGplKXt2YXIgSWU9dGhpcyxTZT10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIFNlLmludmFsaWREYXRlfHxLO3ZhciBDZT1qZXx8IllZWVktTU0tRERUSEg6bW06c3NaIixrZT1XLnoodGhpcyksS2U9dGhpcy4kSCxGdD10aGlzLiRtLE5lPXRoaXMuJE0sZ249U2Uud2Vla2RheXMsX3Q9U2UubW9udGhzLEV0PVNlLm1lcmlkaWVtLEd0PWZ1bmN0aW9uKFB0LFFlLER0LGt0KXtyZXR1cm4gUHQmJihQdFtRZV18fFB0KEllLENlKSl8fER0W1FlXS5zbGljZSgwLGt0KX0sbG49ZnVuY3Rpb24oUHQpe3JldHVybiBXLnMoS2UlMTJ8fDEyLFB0LCIwIil9LHh0PUV0fHxmdW5jdGlvbihQdCxRZSxEdCl7dmFyIGt0PVB0PDEyPyJBTSI6IlBNIjtyZXR1cm4gRHQ/a3QudG9Mb3dlckNhc2UoKTprdH07cmV0dXJuIENlLnJlcGxhY2UoaWUsZnVuY3Rpb24oUHQsUWUpe3JldHVybiBRZXx8ZnVuY3Rpb24oRHQpe3N3aXRjaChEdCl7Y2FzZSJZWSI6cmV0dXJuIFN0cmluZyhJZS4keSkuc2xpY2UoLTIpO2Nhc2UiWVlZWSI6cmV0dXJuIFcucyhJZS4keSw0LCIwIik7Y2FzZSJNIjpyZXR1cm4gTmUrMTtjYXNlIk1NIjpyZXR1cm4gVy5zKE5lKzEsMiwiMCIpO2Nhc2UiTU1NIjpyZXR1cm4gR3QoU2UubW9udGhzU2hvcnQsTmUsX3QsMyk7Y2FzZSJNTU1NIjpyZXR1cm4gR3QoX3QsTmUpO2Nhc2UiRCI6cmV0dXJuIEllLiREO2Nhc2UiREQiOnJldHVybiBXLnMoSWUuJEQsMiwiMCIpO2Nhc2UiZCI6cmV0dXJuIFN0cmluZyhJZS4kVyk7Y2FzZSJkZCI6cmV0dXJuIEd0KFNlLndlZWtkYXlzTWluLEllLiRXLGduLDIpO2Nhc2UiZGRkIjpyZXR1cm4gR3QoU2Uud2Vla2RheXNTaG9ydCxJZS4kVyxnbiwzKTtjYXNlImRkZGQiOnJldHVybiBnbltJZS4kV107Y2FzZSJIIjpyZXR1cm4gU3RyaW5nKEtlKTtjYXNlIkhIIjpyZXR1cm4gVy5zKEtlLDIsIjAiKTtjYXNlImgiOnJldHVybiBsbigxKTtjYXNlImhoIjpyZXR1cm4gbG4oMik7Y2FzZSJhIjpyZXR1cm4geHQoS2UsRnQsITApO2Nhc2UiQSI6cmV0dXJuIHh0KEtlLEZ0LCExKTtjYXNlIm0iOnJldHVybiBTdHJpbmcoRnQpO2Nhc2UibW0iOnJldHVybiBXLnMoRnQsMiwiMCIpO2Nhc2UicyI6cmV0dXJuIFN0cmluZyhJZS4kcyk7Y2FzZSJzcyI6cmV0dXJuIFcucyhJZS4kcywyLCIwIik7Y2FzZSJTU1MiOnJldHVybiBXLnMoSWUuJG1zLDMsIjAiKTtjYXNlIloiOnJldHVybiBrZX1yZXR1cm4gbnVsbH0oUHQpfHxrZS5yZXBsYWNlKCI6IiwiIil9KX0sUGUudXRjT2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIDE1Ki1NYXRoLnJvdW5kKHRoaXMuJGQuZ2V0VGltZXpvbmVPZmZzZXQoKS8xNSl9LFBlLmRpZmY9ZnVuY3Rpb24oamUsSWUsU2Upe3ZhciBDZSxrZT10aGlzLEtlPVcucChJZSksRnQ9Z2UoamUpLE5lPShGdC51dGNPZmZzZXQoKS10aGlzLnV0Y09mZnNldCgpKSpkLGduPXRoaXMtRnQsX3Q9ZnVuY3Rpb24oKXtyZXR1cm4gVy5tKGtlLEZ0KX07c3dpdGNoKEtlKXtjYXNlIEY6Q2U9X3QoKS8xMjticmVhaztjYXNlIFA6Q2U9X3QoKTticmVhaztjYXNlIFI6Q2U9X3QoKS8zO2JyZWFrO2Nhc2UgQTpDZT0oZ24tTmUpLzYwNDhlNTticmVhaztjYXNlIF86Q2U9KGduLU5lKS84NjRlNTticmVhaztjYXNlIFQ6Q2U9Z24vcDticmVhaztjYXNlIHk6Q2U9Z24vZDticmVhaztjYXNlIGI6Q2U9Z24vdTticmVhaztkZWZhdWx0OkNlPWdufXJldHVybiBTZT9DZTpXLmEoQ2UpfSxQZS5kYXlzSW5Nb250aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZE9mKFApLiREfSxQZS4kbG9jYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIG5lW3RoaXMuJExdfSxQZS5sb2NhbGU9ZnVuY3Rpb24oamUsSWUpe2lmKCFqZSlyZXR1cm4gdGhpcy4kTDt2YXIgU2U9dGhpcy5jbG9uZSgpLENlPVgoamUsSWUsITApO3JldHVybiBDZSYmKFNlLiRMPUNlKSxTZX0sUGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gVy53KHRoaXMuJGQsdGhpcyl9LFBlLnRvRGF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9LFBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLnRvSVNPU3RyaW5nKCk6bnVsbH0sUGUudG9JU09TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b0lTT1N0cmluZygpfSxQZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvVVRDU3RyaW5nKCl9LEZlfSgpLFU9eGUucHJvdG90eXBlO3JldHVybiBnZS5wcm90b3R5cGU9VSxbWyIkbXMiLHZdLFsiJHMiLGJdLFsiJG0iLHldLFsiJEgiLFRdLFsiJFciLF9dLFsiJE0iLFBdLFsiJHkiLEZdLFsiJEQiLGpdXS5mb3JFYWNoKGZ1bmN0aW9uKEZlKXtVW0ZlWzFdXT1mdW5jdGlvbihQZSl7cmV0dXJuIHRoaXMuJGcoUGUsRmVbMF0sRmVbMV0pfX0pLGdlLmV4dGVuZD1mdW5jdGlvbihGZSxQZSl7cmV0dXJuIEZlLiRpfHwoRmUoUGUseGUsZ2UpLEZlLiRpPSEwKSxnZX0sZ2UubG9jYWxlPVgsZ2UuaXNEYXlqcz1kZSxnZS51bml4PWZ1bmN0aW9uKEZlKXtyZXR1cm4gZ2UoMWUzKkZlKX0sZ2UuZW49bmVbYWVdLGdlLkxzPW5lLGdlLnA9e30sZ2V9KX0pKG9CZSk7dmFyIE5BdD1vQmUuZXhwb3J0cztjb25zdCBMZz1oQyhOQXQpLGc3PXt0cmFjZTowLGRlYnVnOjEsaW5mbzoyLHdhcm46MyxlcnJvcjo0LGZhdGFsOjV9LFhlPXt0cmFjZTooLi4uaSk9Pnt9LGRlYnVnOiguLi5pKT0+e30saW5mbzooLi4uaSk9Pnt9LHdhcm46KC4uLmkpPT57fSxlcnJvcjooLi4uaSk9Pnt9LGZhdGFsOiguLi5pKT0+e319LGZwZT1mdW5jdGlvbihpPSJmYXRhbCIpe2xldCBzPWc3LmZhdGFsO3R5cGVvZiBpPT0ic3RyaW5nIj8oaT1pLnRvTG93ZXJDYXNlKCksaSBpbiBnNyYmKHM9ZzdbaV0pKTp0eXBlb2YgaT09Im51bWJlciImJihzPWkpLFhlLnRyYWNlPSgpPT57fSxYZS5kZWJ1Zz0oKT0+e30sWGUuaW5mbz0oKT0+e30sWGUud2Fybj0oKT0+e30sWGUuZXJyb3I9KCk9Pnt9LFhlLmZhdGFsPSgpPT57fSxzPD1nNy5mYXRhbCYmKFhlLmZhdGFsPWNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsTHYoIkZBVEFMIiksImNvbG9yOiBvcmFuZ2UiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzVtIixMdigiRkFUQUwiKSkpLHM8PWc3LmVycm9yJiYoWGUuZXJyb3I9Y29uc29sZS5lcnJvcj9jb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSxMdigiRVJST1IiKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszMW0iLEx2KCJFUlJPUiIpKSksczw9Zzcud2FybiYmKFhlLndhcm49Y29uc29sZS53YXJuP2NvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUsTHYoIldBUk4iKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszM20iLEx2KCJXQVJOIikpKSxzPD1nNy5pbmZvJiYoWGUuaW5mbz1jb25zb2xlLmluZm8/Y29uc29sZS5pbmZvLmJpbmQoY29uc29sZSxMdigiSU5GTyIpLCJjb2xvcjogbGlnaHRibHVlIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCJceDFCWzM0bSIsTHYoIklORk8iKSkpLHM8PWc3LmRlYnVnJiYoWGUuZGVidWc9Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmJpbmQoY29uc29sZSxMdigiREVCVUciKSwiY29sb3I6IGxpZ2h0Z3JlZW4iKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzJtIixMdigiREVCVUciKSkpLHM8PWc3LnRyYWNlJiYoWGUudHJhY2U9Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmJpbmQoY29uc29sZSxMdigiVFJBQ0UiKSwiY29sb3I6IGxpZ2h0Z3JlZW4iKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzJtIixMdigiVFJBQ0UiKSkpfSxMdj1pPT5gJWMke0xnKCkuZm9ybWF0KCJzcy5TU1MiKX0gOiAke2l9IDogYDt2YXIgcDk9e307KGZ1bmN0aW9uKGkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxpLnNhbml0aXplVXJsPWkuQkxBTktfVVJMPXZvaWQgMDt2YXIgcz0vXihbXlx3XSopKGphdmFzY3JpcHR8ZGF0YXx2YnNjcmlwdCkvaW0sdT0vJiMoXHcrKSheXHd8Oyk/L2csZD0vJihuZXdsaW5lfHRhYik7L2dpLHA9L1tcdTAwMDAtXHUwMDFGXHUwMDdGLVx1MDA5Rlx1MjAwMC1cdTIwMERcdUZFRkZdL2dpbSx2PS9eLisoOnwmY29sb247KS9naW0sYj1bIi4iLCIvIl07aS5CTEFOS19VUkw9ImFib3V0OmJsYW5rIjtmdW5jdGlvbiB5KEEpe3JldHVybiBiLmluZGV4T2YoQVswXSk+LTF9ZnVuY3Rpb24gVChBKXt2YXIgUD1BLnJlcGxhY2UocCwiIik7cmV0dXJuIFAucmVwbGFjZSh1LGZ1bmN0aW9uKFIsRil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoRil9KX1mdW5jdGlvbiBfKEEpe2lmKCFBKXJldHVybiBpLkJMQU5LX1VSTDt2YXIgUD1UKEEpLnJlcGxhY2UoZCwiIikucmVwbGFjZShwLCIiKS50cmltKCk7aWYoIVApcmV0dXJuIGkuQkxBTktfVVJMO2lmKHkoUCkpcmV0dXJuIFA7dmFyIFI9UC5tYXRjaCh2KTtpZighUilyZXR1cm4gUDt2YXIgRj1SWzBdO3JldHVybiBzLnRlc3QoRik/aS5CTEFOS19VUkw6UH1pLnNhbml0aXplVXJsPV99KShwOSk7ZnVuY3Rpb24gRFkoaSxzKXtyZXR1cm4gaT09bnVsbHx8cz09bnVsbD9OYU46aTxzPy0xOmk+cz8xOmk+PXM/MDpOYU59ZnVuY3Rpb24gUEF0KGkscyl7cmV0dXJuIGk9PW51bGx8fHM9PW51bGw/TmFOOnM8aT8tMTpzPmk/MTpzPj1pPzA6TmFOfWZ1bmN0aW9uIGRwZShpKXtsZXQgcyx1LGQ7aS5sZW5ndGghPT0yPyhzPURZLHU9KHksVCk9PkRZKGkoeSksVCksZD0oeSxUKT0+aSh5KS1UKToocz1pPT09RFl8fGk9PT1QQXQ/aTpCQXQsdT1pLGQ9aSk7ZnVuY3Rpb24gcCh5LFQsXz0wLEE9eS5sZW5ndGgpe2lmKF88QSl7aWYocyhULFQpIT09MClyZXR1cm4gQTtkb3tjb25zdCBQPV8rQT4+PjE7dSh5W1BdLFQpPDA/Xz1QKzE6QT1QfXdoaWxlKF88QSl9cmV0dXJuIF99ZnVuY3Rpb24gdih5LFQsXz0wLEE9eS5sZW5ndGgpe2lmKF88QSl7aWYocyhULFQpIT09MClyZXR1cm4gQTtkb3tjb25zdCBQPV8rQT4+PjE7dSh5W1BdLFQpPD0wP189UCsxOkE9UH13aGlsZShfPEEpfXJldHVybiBffWZ1bmN0aW9uIGIoeSxULF89MCxBPXkubGVuZ3RoKXtjb25zdCBQPXAoeSxULF8sQS0xKTtyZXR1cm4gUD5fJiZkKHlbUC0xXSxUKT4tZCh5W1BdLFQpP1AtMTpQfXJldHVybntsZWZ0OnAsY2VudGVyOmIscmlnaHQ6dn19ZnVuY3Rpb24gQkF0KCl7cmV0dXJuIDB9ZnVuY3Rpb24gRkF0KGkpe3JldHVybiBpPT09bnVsbD9OYU46K2l9Y29uc3QgUkF0PWRwZShEWSkucmlnaHQ7ZHBlKEZBdCkuY2VudGVyO2NvbnN0IGpBdD1SQXQ7Y2xhc3MgY0JlIGV4dGVuZHMgTWFwe2NvbnN0cnVjdG9yKHMsdT1xQXQpe2lmKHN1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7X2ludGVybjp7dmFsdWU6bmV3IE1hcH0sX2tleTp7dmFsdWU6dX19KSxzIT1udWxsKWZvcihjb25zdFtkLHBdb2Ygcyl0aGlzLnNldChkLHApfWdldChzKXtyZXR1cm4gc3VwZXIuZ2V0KHVCZSh0aGlzLHMpKX1oYXMocyl7cmV0dXJuIHN1cGVyLmhhcyh1QmUodGhpcyxzKSl9c2V0KHMsdSl7cmV0dXJuIHN1cGVyLnNldCgkQXQodGhpcyxzKSx1KX1kZWxldGUocyl7cmV0dXJuIHN1cGVyLmRlbGV0ZSh6QXQodGhpcyxzKSl9fWZ1bmN0aW9uIHVCZSh7X2ludGVybjppLF9rZXk6c30sdSl7Y29uc3QgZD1zKHUpO3JldHVybiBpLmhhcyhkKT9pLmdldChkKTp1fWZ1bmN0aW9uICRBdCh7X2ludGVybjppLF9rZXk6c30sdSl7Y29uc3QgZD1zKHUpO3JldHVybiBpLmhhcyhkKT9pLmdldChkKTooaS5zZXQoZCx1KSx1KX1mdW5jdGlvbiB6QXQoe19pbnRlcm46aSxfa2V5OnN9LHUpe2NvbnN0IGQ9cyh1KTtyZXR1cm4gaS5oYXMoZCkmJih1PWkuZ2V0KGQpLGkuZGVsZXRlKGQpKSx1fWZ1bmN0aW9uIHFBdChpKXtyZXR1cm4gaSE9PW51bGwmJnR5cGVvZiBpPT0ib2JqZWN0Ij9pLnZhbHVlT2YoKTppfWNvbnN0IEhBdD1NYXRoLnNxcnQoNTApLFZBdD1NYXRoLnNxcnQoMTApLFVBdD1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gSVkoaSxzLHUpe2NvbnN0IGQ9KHMtaSkvTWF0aC5tYXgoMCx1KSxwPU1hdGguZmxvb3IoTWF0aC5sb2cxMChkKSksdj1kL01hdGgucG93KDEwLHApLGI9dj49SEF0PzEwOnY+PVZBdD81OnY+PVVBdD8yOjE7bGV0IHksVCxfO3JldHVybiBwPDA/KF89TWF0aC5wb3coMTAsLXApL2IseT1NYXRoLnJvdW5kKGkqXyksVD1NYXRoLnJvdW5kKHMqXykseS9fPGkmJisreSxUL18+cyYmLS1ULF89LV8pOihfPU1hdGgucG93KDEwLHApKmIseT1NYXRoLnJvdW5kKGkvXyksVD1NYXRoLnJvdW5kKHMvXykseSpfPGkmJisreSxUKl8+cyYmLS1UKSxUPHkmJi41PD11JiZ1PDI/SVkoaSxzLHUqMik6W3ksVCxfXX1mdW5jdGlvbiBHQXQoaSxzLHUpe2lmKHM9K3MsaT0raSx1PSt1LCEodT4wKSlyZXR1cm5bXTtpZihpPT09cylyZXR1cm5baV07Y29uc3QgZD1zPGksW3AsdixiXT1kP0lZKHMsaSx1KTpJWShpLHMsdSk7aWYoISh2Pj1wKSlyZXR1cm5bXTtjb25zdCB5PXYtcCsxLFQ9bmV3IEFycmF5KHkpO2lmKGQpaWYoYjwwKWZvcihsZXQgXz0wO188eTsrK18pVFtfXT0odi1fKS8tYjtlbHNlIGZvcihsZXQgXz0wO188eTsrK18pVFtfXT0odi1fKSpiO2Vsc2UgaWYoYjwwKWZvcihsZXQgXz0wO188eTsrK18pVFtfXT0ocCtfKS8tYjtlbHNlIGZvcihsZXQgXz0wO188eTsrK18pVFtfXT0ocCtfKSpiO3JldHVybiBUfWZ1bmN0aW9uIGdwZShpLHMsdSl7cmV0dXJuIHM9K3MsaT0raSx1PSt1LElZKGkscyx1KVsyXX1mdW5jdGlvbiBwcGUoaSxzLHUpe3M9K3MsaT0raSx1PSt1O2NvbnN0IGQ9czxpLHA9ZD9ncGUocyxpLHUpOmdwZShpLHMsdSk7cmV0dXJuKGQ/LTE6MSkqKHA8MD8xLy1wOnApfWZ1bmN0aW9uIEtBdChpLHMpe2xldCB1O2lmKHM9PT12b2lkIDApZm9yKGNvbnN0IGQgb2YgaSlkIT1udWxsJiYodTxkfHx1PT09dm9pZCAwJiZkPj1kKSYmKHU9ZCk7ZWxzZXtsZXQgZD0tMTtmb3IobGV0IHAgb2YgaSkocD1zKHAsKytkLGkpKSE9bnVsbCYmKHU8cHx8dT09PXZvaWQgMCYmcD49cCkmJih1PXApfXJldHVybiB1fWZ1bmN0aW9uIFdBdChpLHMpe2xldCB1O2lmKHM9PT12b2lkIDApZm9yKGNvbnN0IGQgb2YgaSlkIT1udWxsJiYodT5kfHx1PT09dm9pZCAwJiZkPj1kKSYmKHU9ZCk7ZWxzZXtsZXQgZD0tMTtmb3IobGV0IHAgb2YgaSkocD1zKHAsKytkLGkpKSE9bnVsbCYmKHU+cHx8dT09PXZvaWQgMCYmcD49cCkmJih1PXApfXJldHVybiB1fWZ1bmN0aW9uIFlBdChpLHMsdSl7aT0raSxzPStzLHU9KHA9YXJndW1lbnRzLmxlbmd0aCk8Mj8ocz1pLGk9MCwxKTpwPDM/MTordTtmb3IodmFyIGQ9LTEscD1NYXRoLm1heCgwLE1hdGguY2VpbCgocy1pKS91KSl8MCx2PW5ldyBBcnJheShwKTsrK2Q8cDspdltkXT1pK2QqdTtyZXR1cm4gdn1mdW5jdGlvbiBYQXQoaSl7cmV0dXJuIGl9dmFyIE9ZPTEsYnBlPTIsbXBlPTMsTlk9NCxsQmU9MWUtNjtmdW5jdGlvbiBRQXQoaSl7cmV0dXJuInRyYW5zbGF0ZSgiK2krIiwwKSJ9ZnVuY3Rpb24gSkF0KGkpe3JldHVybiJ0cmFuc2xhdGUoMCwiK2krIikifWZ1bmN0aW9uIFpBdChpKXtyZXR1cm4gcz0+K2kocyl9ZnVuY3Rpb24gZUx0KGkscyl7cmV0dXJuIHM9TWF0aC5tYXgoMCxpLmJhbmR3aWR0aCgpLXMqMikvMixpLnJvdW5kKCkmJihzPU1hdGgucm91bmQocykpLHU9PitpKHUpK3N9ZnVuY3Rpb24gdEx0KCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIGhCZShpLHMpe3ZhciB1PVtdLGQ9bnVsbCxwPW51bGwsdj02LGI9Nix5PTMsVD10eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmRldmljZVBpeGVsUmF0aW8+MT8wOi41LF89aT09PU9ZfHxpPT09Tlk/LTE6MSxBPWk9PT1OWXx8aT09PWJwZT8ieCI6InkiLFA9aT09PU9ZfHxpPT09bXBlP1FBdDpKQXQ7ZnVuY3Rpb24gUihGKXt2YXIgaj1kPz8ocy50aWNrcz9zLnRpY2tzLmFwcGx5KHMsdSk6cy5kb21haW4oKSksSz1wPz8ocy50aWNrRm9ybWF0P3MudGlja0Zvcm1hdC5hcHBseShzLHUpOlhBdCksZWU9TWF0aC5tYXgodiwwKSt5LGllPXMucmFuZ2UoKSxvZT0raWVbMF0rVCxwZT0raWVbaWUubGVuZ3RoLTFdK1QsYmU9KHMuYmFuZHdpZHRoP2VMdDpaQXQpKHMuY29weSgpLFQpLGFlPUYuc2VsZWN0aW9uP0Yuc2VsZWN0aW9uKCk6RixuZT1hZS5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksc2U9YWUuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoaixzKS5vcmRlcigpLGRlPXNlLmV4aXQoKSxYPXNlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksZ2U9c2Uuc2VsZWN0KCJsaW5lIiksVz1zZS5zZWxlY3QoInRleHQiKTtuZT1uZS5tZXJnZShuZS5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKSksc2U9c2UubWVyZ2UoWCksZ2U9Z2UubWVyZ2UoWC5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKEErIjIiLF8qdikpLFc9Vy5tZXJnZShYLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKEEsXyplZSkuYXR0cigiZHkiLGk9PT1PWT8iMGVtIjppPT09bXBlPyIwLjcxZW0iOiIwLjMyZW0iKSksRiE9PWFlJiYobmU9bmUudHJhbnNpdGlvbihGKSxzZT1zZS50cmFuc2l0aW9uKEYpLGdlPWdlLnRyYW5zaXRpb24oRiksVz1XLnRyYW5zaXRpb24oRiksZGU9ZGUudHJhbnNpdGlvbihGKS5hdHRyKCJvcGFjaXR5IixsQmUpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oeGUpe3JldHVybiBpc0Zpbml0ZSh4ZT1iZSh4ZSkpP1AoeGUrVCk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSksWC5hdHRyKCJvcGFjaXR5IixsQmUpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oeGUpe3ZhciBVPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIFAoKFUmJmlzRmluaXRlKFU9VSh4ZSkpP1U6YmUoeGUpKStUKX0pKSxkZS5yZW1vdmUoKSxuZS5hdHRyKCJkIixpPT09Tll8fGk9PT1icGU/Yj8iTSIrXypiKyIsIitvZSsiSCIrVCsiViIrcGUrIkgiK18qYjoiTSIrVCsiLCIrb2UrIlYiK3BlOmI/Ik0iK29lKyIsIitfKmIrIlYiK1QrIkgiK3BlKyJWIitfKmI6Ik0iK29lKyIsIitUKyJIIitwZSksc2UuYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih4ZSl7cmV0dXJuIFAoYmUoeGUpK1QpfSksZ2UuYXR0cihBKyIyIixfKnYpLFcuYXR0cihBLF8qZWUpLnRleHQoSyksYWUuZmlsdGVyKHRMdCkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsaT09PWJwZT8ic3RhcnQiOmk9PT1OWT8iZW5kIjoibWlkZGxlIiksYWUuZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPWJlfSl9cmV0dXJuIFIuc2NhbGU9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9RixSKTpzfSxSLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHU9QXJyYXkuZnJvbShhcmd1bWVudHMpLFJ9LFIudGlja0FyZ3VtZW50cz1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1GPT1udWxsP1tdOkFycmF5LmZyb20oRiksUik6dS5zbGljZSgpfSxSLnRpY2tWYWx1ZXM9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9Rj09bnVsbD9udWxsOkFycmF5LmZyb20oRiksUik6ZCYmZC5zbGljZSgpfSxSLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9RixSKTpwfSxSLnRpY2tTaXplPWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PWI9K0YsUik6dn0sUi50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PStGLFIpOnZ9LFIudGlja1NpemVPdXRlcj1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0rRixSKTpifSxSLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PStGLFIpOnl9LFIub2Zmc2V0PWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPStGLFIpOlR9LFJ9ZnVuY3Rpb24gbkx0KGkpe3JldHVybiBoQmUoT1ksaSl9ZnVuY3Rpb24gckx0KGkpe3JldHVybiBoQmUobXBlLGkpfXZhciBpTHQ9e3ZhbHVlOigpPT57fX07ZnVuY3Rpb24gZkJlKCl7Zm9yKHZhciBpPTAscz1hcmd1bWVudHMubGVuZ3RoLHU9e30sZDtpPHM7KytpKXtpZighKGQ9YXJndW1lbnRzW2ldKyIiKXx8ZCBpbiB1fHwvW1xzLl0vLnRlc3QoZCkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrZCk7dVtkXT1bXX1yZXR1cm4gbmV3IFBZKHUpfWZ1bmN0aW9uIFBZKGkpe3RoaXMuXz1pfWZ1bmN0aW9uIHNMdChpLHMpe3JldHVybiBpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odSl7dmFyIGQ9IiIscD11LmluZGV4T2YoIi4iKTtpZihwPj0wJiYoZD11LnNsaWNlKHArMSksdT11LnNsaWNlKDAscCkpLHUmJiFzLmhhc093blByb3BlcnR5KHUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3UpO3JldHVybnt0eXBlOnUsbmFtZTpkfX0pfVBZLnByb3RvdHlwZT1mQmUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQWSxvbjpmdW5jdGlvbihpLHMpe3ZhciB1PXRoaXMuXyxkPXNMdChpKyIiLHUpLHAsdj0tMSxiPWQubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK3Y8YjspaWYoKHA9KGk9ZFt2XSkudHlwZSkmJihwPWFMdCh1W3BdLGkubmFtZSkpKXJldHVybiBwO3JldHVybn1pZihzIT1udWxsJiZ0eXBlb2YgcyE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrcyk7Zm9yKDsrK3Y8YjspaWYocD0oaT1kW3ZdKS50eXBlKXVbcF09ZEJlKHVbcF0saS5uYW1lLHMpO2Vsc2UgaWYocz09bnVsbClmb3IocCBpbiB1KXVbcF09ZEJlKHVbcF0saS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGk9e30scz10aGlzLl87Zm9yKHZhciB1IGluIHMpaVt1XT1zW3VdLnNsaWNlKCk7cmV0dXJuIG5ldyBQWShpKX0sY2FsbDpmdW5jdGlvbihpLHMpe2lmKChwPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHU9bmV3IEFycmF5KHApLGQ9MCxwLHY7ZDxwOysrZCl1W2RdPWFyZ3VtZW50c1tkKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoaSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIraSk7Zm9yKHY9dGhpcy5fW2ldLGQ9MCxwPXYubGVuZ3RoO2Q8cDsrK2QpdltkXS52YWx1ZS5hcHBseShzLHUpfSxhcHBseTpmdW5jdGlvbihpLHMsdSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShpKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitpKTtmb3IodmFyIGQ9dGhpcy5fW2ldLHA9MCx2PWQubGVuZ3RoO3A8djsrK3ApZFtwXS52YWx1ZS5hcHBseShzLHUpfX07ZnVuY3Rpb24gYUx0KGkscyl7Zm9yKHZhciB1PTAsZD1pLmxlbmd0aCxwO3U8ZDsrK3UpaWYoKHA9aVt1XSkubmFtZT09PXMpcmV0dXJuIHAudmFsdWV9ZnVuY3Rpb24gZEJlKGkscyx1KXtmb3IodmFyIGQ9MCxwPWkubGVuZ3RoO2Q8cDsrK2QpaWYoaVtkXS5uYW1lPT09cyl7aVtkXT1pTHQsaT1pLnNsaWNlKDAsZCkuY29uY2F0KGkuc2xpY2UoZCsxKSk7YnJlYWt9cmV0dXJuIHUhPW51bGwmJmkucHVzaCh7bmFtZTpzLHZhbHVlOnV9KSxpfXZhciB2cGU9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2NvbnN0IGdCZT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6dnBlLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gQlkoaSl7dmFyIHM9aSs9IiIsdT1zLmluZGV4T2YoIjoiKTtyZXR1cm4gdT49MCYmKHM9aS5zbGljZSgwLHUpKSE9PSJ4bWxucyImJihpPWkuc2xpY2UodSsxKSksZ0JlLmhhc093blByb3BlcnR5KHMpP3tzcGFjZTpnQmVbc10sbG9jYWw6aX06aX1mdW5jdGlvbiBvTHQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5vd25lckRvY3VtZW50LHU9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHU9PT12cGUmJnMuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PXZwZT9zLmNyZWF0ZUVsZW1lbnQoaSk6cy5jcmVhdGVFbGVtZW50TlModSxpKX19ZnVuY3Rpb24gY0x0KGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGkuc3BhY2UsaS5sb2NhbCl9fWZ1bmN0aW9uIHBCZShpKXt2YXIgcz1CWShpKTtyZXR1cm4ocy5sb2NhbD9jTHQ6b0x0KShzKX1mdW5jdGlvbiB1THQoKXt9ZnVuY3Rpb24gd3BlKGkpe3JldHVybiBpPT1udWxsP3VMdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoaSl9fWZ1bmN0aW9uIGxMdChpKXt0eXBlb2YgaSE9ImZ1bmN0aW9uIiYmKGk9d3BlKGkpKTtmb3IodmFyIHM9dGhpcy5fZ3JvdXBzLHU9cy5sZW5ndGgsZD1uZXcgQXJyYXkodSkscD0wO3A8dTsrK3ApZm9yKHZhciB2PXNbcF0sYj12Lmxlbmd0aCx5PWRbcF09bmV3IEFycmF5KGIpLFQsXyxBPTA7QTxiOysrQSkoVD12W0FdKSYmKF89aS5jYWxsKFQsVC5fX2RhdGFfXyxBLHYpKSYmKCJfX2RhdGFfXyJpbiBUJiYoXy5fX2RhdGFfXz1ULl9fZGF0YV9fKSx5W0FdPV8pO3JldHVybiBuZXcgeHAoZCx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBiQmUoaSl7cmV0dXJuIGk9PW51bGw/W106QXJyYXkuaXNBcnJheShpKT9pOkFycmF5LmZyb20oaSl9ZnVuY3Rpb24gaEx0KCl7cmV0dXJuW119ZnVuY3Rpb24gbUJlKGkpe3JldHVybiBpPT1udWxsP2hMdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoaSl9fWZ1bmN0aW9uIGZMdChpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYkJlKGkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19ZnVuY3Rpb24gZEx0KGkpe3R5cGVvZiBpPT0iZnVuY3Rpb24iP2k9Zkx0KGkpOmk9bUJlKGkpO2Zvcih2YXIgcz10aGlzLl9ncm91cHMsdT1zLmxlbmd0aCxkPVtdLHA9W10sdj0wO3Y8dTsrK3YpZm9yKHZhciBiPXNbdl0seT1iLmxlbmd0aCxULF89MDtfPHk7KytfKShUPWJbX10pJiYoZC5wdXNoKGkuY2FsbChULFQuX19kYXRhX18sXyxiKSkscC5wdXNoKFQpKTtyZXR1cm4gbmV3IHhwKGQscCl9ZnVuY3Rpb24gdkJlKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoaSl9fWZ1bmN0aW9uIHdCZShpKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHMubWF0Y2hlcyhpKX19dmFyIGdMdD1BcnJheS5wcm90b3R5cGUuZmluZDtmdW5jdGlvbiBwTHQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGdMdC5jYWxsKHRoaXMuY2hpbGRyZW4saSl9fWZ1bmN0aW9uIGJMdCgpe3JldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkfWZ1bmN0aW9uIG1MdChpKXtyZXR1cm4gdGhpcy5zZWxlY3QoaT09bnVsbD9iTHQ6cEx0KHR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6d0JlKGkpKSl9dmFyIHZMdD1BcnJheS5wcm90b3R5cGUuZmlsdGVyO2Z1bmN0aW9uIHdMdCgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pfWZ1bmN0aW9uIHlMdChpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdkx0LmNhbGwodGhpcy5jaGlsZHJlbixpKX19ZnVuY3Rpb24geEx0KGkpe3JldHVybiB0aGlzLnNlbGVjdEFsbChpPT1udWxsP3dMdDp5THQodHlwZW9mIGk9PSJmdW5jdGlvbiI/aTp3QmUoaSkpKX1mdW5jdGlvbiBrTHQoaSl7dHlwZW9mIGkhPSJmdW5jdGlvbiImJihpPXZCZShpKSk7Zm9yKHZhciBzPXRoaXMuX2dyb3Vwcyx1PXMubGVuZ3RoLGQ9bmV3IEFycmF5KHUpLHA9MDtwPHU7KytwKWZvcih2YXIgdj1zW3BdLGI9di5sZW5ndGgseT1kW3BdPVtdLFQsXz0wO188YjsrK18pKFQ9dltfXSkmJmkuY2FsbChULFQuX19kYXRhX18sXyx2KSYmeS5wdXNoKFQpO3JldHVybiBuZXcgeHAoZCx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiB5QmUoaSl7cmV0dXJuIG5ldyBBcnJheShpLmxlbmd0aCl9ZnVuY3Rpb24gRUx0KCl7cmV0dXJuIG5ldyB4cCh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcCh5QmUpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIEZZKGkscyl7dGhpcy5vd25lckRvY3VtZW50PWkub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1pLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWksdGhpcy5fX2RhdGFfXz1zfUZZLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RlksYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoaSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGkscyl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoaSxzKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoaSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGkpfX07ZnVuY3Rpb24gVEx0KGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpfX1mdW5jdGlvbiBDTHQoaSxzLHUsZCxwLHYpe2Zvcih2YXIgYj0wLHksVD1zLmxlbmd0aCxfPXYubGVuZ3RoO2I8XzsrK2IpKHk9c1tiXSk/KHkuX19kYXRhX189dltiXSxkW2JdPXkpOnVbYl09bmV3IEZZKGksdltiXSk7Zm9yKDtiPFQ7KytiKSh5PXNbYl0pJiYocFtiXT15KX1mdW5jdGlvbiBTTHQoaSxzLHUsZCxwLHYsYil7dmFyIHksVCxfPW5ldyBNYXAsQT1zLmxlbmd0aCxQPXYubGVuZ3RoLFI9bmV3IEFycmF5KEEpLEY7Zm9yKHk9MDt5PEE7Kyt5KShUPXNbeV0pJiYoUlt5XT1GPWIuY2FsbChULFQuX19kYXRhX18seSxzKSsiIixfLmhhcyhGKT9wW3ldPVQ6Xy5zZXQoRixUKSk7Zm9yKHk9MDt5PFA7Kyt5KUY9Yi5jYWxsKGksdlt5XSx5LHYpKyIiLChUPV8uZ2V0KEYpKT8oZFt5XT1ULFQuX19kYXRhX189dlt5XSxfLmRlbGV0ZShGKSk6dVt5XT1uZXcgRlkoaSx2W3ldKTtmb3IoeT0wO3k8QTsrK3kpKFQ9c1t5XSkmJl8uZ2V0KFJbeV0pPT09VCYmKHBbeV09VCl9ZnVuY3Rpb24gX0x0KGkpe3JldHVybiBpLl9fZGF0YV9ffWZ1bmN0aW9uIEFMdChpLHMpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBBcnJheS5mcm9tKHRoaXMsX0x0KTt2YXIgdT1zP1NMdDpDTHQsZD10aGlzLl9wYXJlbnRzLHA9dGhpcy5fZ3JvdXBzO3R5cGVvZiBpIT0iZnVuY3Rpb24iJiYoaT1UTHQoaSkpO2Zvcih2YXIgdj1wLmxlbmd0aCxiPW5ldyBBcnJheSh2KSx5PW5ldyBBcnJheSh2KSxUPW5ldyBBcnJheSh2KSxfPTA7Xzx2OysrXyl7dmFyIEE9ZFtfXSxQPXBbX10sUj1QLmxlbmd0aCxGPUxMdChpLmNhbGwoQSxBJiZBLl9fZGF0YV9fLF8sZCkpLGo9Ri5sZW5ndGgsSz15W19dPW5ldyBBcnJheShqKSxlZT1iW19dPW5ldyBBcnJheShqKSxpZT1UW19dPW5ldyBBcnJheShSKTt1KEEsUCxLLGVlLGllLEYscyk7Zm9yKHZhciBvZT0wLHBlPTAsYmUsYWU7b2U8ajsrK29lKWlmKGJlPUtbb2VdKXtmb3Iob2U+PXBlJiYocGU9b2UrMSk7IShhZT1lZVtwZV0pJiYrK3BlPGo7KTtiZS5fbmV4dD1hZXx8bnVsbH19cmV0dXJuIGI9bmV3IHhwKGIsZCksYi5fZW50ZXI9eSxiLl9leGl0PVQsYn1mdW5jdGlvbiBMTHQoaSl7cmV0dXJuIHR5cGVvZiBpPT0ib2JqZWN0IiYmImxlbmd0aCJpbiBpP2k6QXJyYXkuZnJvbShpKX1mdW5jdGlvbiBNTHQoKXtyZXR1cm4gbmV3IHhwKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoeUJlKSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBETHQoaSxzLHUpe3ZhciBkPXRoaXMuZW50ZXIoKSxwPXRoaXMsdj10aGlzLmV4aXQoKTtyZXR1cm4gdHlwZW9mIGk9PSJmdW5jdGlvbiI/KGQ9aShkKSxkJiYoZD1kLnNlbGVjdGlvbigpKSk6ZD1kLmFwcGVuZChpKyIiKSxzIT1udWxsJiYocD1zKHApLHAmJihwPXAuc2VsZWN0aW9uKCkpKSx1PT1udWxsP3YucmVtb3ZlKCk6dSh2KSxkJiZwP2QubWVyZ2UocCkub3JkZXIoKTpwfWZ1bmN0aW9uIElMdChpKXtmb3IodmFyIHM9aS5zZWxlY3Rpb24/aS5zZWxlY3Rpb24oKTppLHU9dGhpcy5fZ3JvdXBzLGQ9cy5fZ3JvdXBzLHA9dS5sZW5ndGgsdj1kLmxlbmd0aCxiPU1hdGgubWluKHAsdikseT1uZXcgQXJyYXkocCksVD0wO1Q8YjsrK1QpZm9yKHZhciBfPXVbVF0sQT1kW1RdLFA9Xy5sZW5ndGgsUj15W1RdPW5ldyBBcnJheShQKSxGLGo9MDtqPFA7KytqKShGPV9bal18fEFbal0pJiYoUltqXT1GKTtmb3IoO1Q8cDsrK1QpeVtUXT11W1RdO3JldHVybiBuZXcgeHAoeSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBPTHQoKXtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHM9LTEsdT1pLmxlbmd0aDsrK3M8dTspZm9yKHZhciBkPWlbc10scD1kLmxlbmd0aC0xLHY9ZFtwXSxiOy0tcD49MDspKGI9ZFtwXSkmJih2JiZiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHYpXjQmJnYucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYix2KSx2PWIpO3JldHVybiB0aGlzfWZ1bmN0aW9uIE5MdChpKXtpfHwoaT1QTHQpO2Z1bmN0aW9uIHMoUCxSKXtyZXR1cm4gUCYmUj9pKFAuX19kYXRhX18sUi5fX2RhdGFfXyk6IVAtIVJ9Zm9yKHZhciB1PXRoaXMuX2dyb3VwcyxkPXUubGVuZ3RoLHA9bmV3IEFycmF5KGQpLHY9MDt2PGQ7Kyt2KXtmb3IodmFyIGI9dVt2XSx5PWIubGVuZ3RoLFQ9cFt2XT1uZXcgQXJyYXkoeSksXyxBPTA7QTx5OysrQSkoXz1iW0FdKSYmKFRbQV09Xyk7VC5zb3J0KHMpfXJldHVybiBuZXcgeHAocCx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIFBMdChpLHMpe3JldHVybiBpPHM/LTE6aT5zPzE6aT49cz8wOk5hTn1mdW5jdGlvbiBCTHQoKXt2YXIgaT1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLGkuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9ZnVuY3Rpb24gRkx0KCl7cmV0dXJuIEFycmF5LmZyb20odGhpcyl9ZnVuY3Rpb24gUkx0KCl7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxzPTAsdT1pLmxlbmd0aDtzPHU7KytzKWZvcih2YXIgZD1pW3NdLHA9MCx2PWQubGVuZ3RoO3A8djsrK3Ape3ZhciBiPWRbcF07aWYoYilyZXR1cm4gYn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBqTHQoKXtsZXQgaT0wO2Zvcihjb25zdCBzIG9mIHRoaXMpKytpO3JldHVybiBpfWZ1bmN0aW9uICRMdCgpe3JldHVybiF0aGlzLm5vZGUoKX1mdW5jdGlvbiB6THQoaSl7Zm9yKHZhciBzPXRoaXMuX2dyb3Vwcyx1PTAsZD1zLmxlbmd0aDt1PGQ7Kyt1KWZvcih2YXIgcD1zW3VdLHY9MCxiPXAubGVuZ3RoLHk7djxiOysrdikoeT1wW3ZdKSYmaS5jYWxsKHkseS5fX2RhdGFfXyx2LHApO3JldHVybiB0aGlzfWZ1bmN0aW9uIHFMdChpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShpKX19ZnVuY3Rpb24gSEx0KGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKX19ZnVuY3Rpb24gVkx0KGkscyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoaSxzKX19ZnVuY3Rpb24gVUx0KGkscyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwscyl9fWZ1bmN0aW9uIEdMdChpLHMpe3JldHVybiBmdW5jdGlvbigpe3ZhciB1PXMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3U9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoaSk6dGhpcy5zZXRBdHRyaWJ1dGUoaSx1KX19ZnVuY3Rpb24gS0x0KGkscyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHU9cy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dT09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwsdSl9fWZ1bmN0aW9uIFdMdChpLHMpe3ZhciB1PUJZKGkpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGQ9dGhpcy5ub2RlKCk7cmV0dXJuIHUubG9jYWw/ZC5nZXRBdHRyaWJ1dGVOUyh1LnNwYWNlLHUubG9jYWwpOmQuZ2V0QXR0cmlidXRlKHUpfXJldHVybiB0aGlzLmVhY2goKHM9PW51bGw/dS5sb2NhbD9ITHQ6cUx0OnR5cGVvZiBzPT0iZnVuY3Rpb24iP3UubG9jYWw/S0x0OkdMdDp1LmxvY2FsP1VMdDpWTHQpKHUscykpfWZ1bmN0aW9uIHhCZShpKXtyZXR1cm4gaS5vd25lckRvY3VtZW50JiZpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fGkuZG9jdW1lbnQmJml8fGkuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gWUx0KGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoaSl9fWZ1bmN0aW9uIFhMdChpLHMsdSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShpLHMsdSl9fWZ1bmN0aW9uIFFMdChpLHMsdSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQ9cy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZD09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGkpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoaSxkLHUpfX1mdW5jdGlvbiBKTHQoaSxzLHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChzPT1udWxsP1lMdDp0eXBlb2Ygcz09ImZ1bmN0aW9uIj9RTHQ6WEx0KShpLHMsdT8/IiIpKTpaTSh0aGlzLm5vZGUoKSxpKX1mdW5jdGlvbiBaTShpLHMpe3JldHVybiBpLnN0eWxlLmdldFByb3BlcnR5VmFsdWUocyl8fHhCZShpKS5nZXRDb21wdXRlZFN0eWxlKGksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShzKX1mdW5jdGlvbiBaTHQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbaV19fWZ1bmN0aW9uIGVNdChpLHMpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbaV09c319ZnVuY3Rpb24gdE10KGkscyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHU9cy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dT09bnVsbD9kZWxldGUgdGhpc1tpXTp0aGlzW2ldPXV9fWZ1bmN0aW9uIG5NdChpLHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChzPT1udWxsP1pMdDp0eXBlb2Ygcz09ImZ1bmN0aW9uIj90TXQ6ZU10KShpLHMpKTp0aGlzLm5vZGUoKVtpXX1mdW5jdGlvbiBrQmUoaSl7cmV0dXJuIGkudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIHlwZShpKXtyZXR1cm4gaS5jbGFzc0xpc3R8fG5ldyBFQmUoaSl9ZnVuY3Rpb24gRUJlKGkpe3RoaXMuX25vZGU9aSx0aGlzLl9uYW1lcz1rQmUoaS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1FQmUucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oaSl7dmFyIHM9dGhpcy5fbmFtZXMuaW5kZXhPZihpKTtzPDAmJih0aGlzLl9uYW1lcy5wdXNoKGkpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihpKXt2YXIgcz10aGlzLl9uYW1lcy5pbmRleE9mKGkpO3M+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UocywxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihpKT49MH19O2Z1bmN0aW9uIFRCZShpLHMpe2Zvcih2YXIgdT15cGUoaSksZD0tMSxwPXMubGVuZ3RoOysrZDxwOyl1LmFkZChzW2RdKX1mdW5jdGlvbiBDQmUoaSxzKXtmb3IodmFyIHU9eXBlKGkpLGQ9LTEscD1zLmxlbmd0aDsrK2Q8cDspdS5yZW1vdmUoc1tkXSl9ZnVuY3Rpb24gck10KGkpe3JldHVybiBmdW5jdGlvbigpe1RCZSh0aGlzLGkpfX1mdW5jdGlvbiBpTXQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7Q0JlKHRoaXMsaSl9fWZ1bmN0aW9uIHNNdChpLHMpe3JldHVybiBmdW5jdGlvbigpeyhzLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9UQmU6Q0JlKSh0aGlzLGkpfX1mdW5jdGlvbiBhTXQoaSxzKXt2YXIgdT1rQmUoaSsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGQ9eXBlKHRoaXMubm9kZSgpKSxwPS0xLHY9dS5sZW5ndGg7KytwPHY7KWlmKCFkLmNvbnRhaW5zKHVbcF0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKHR5cGVvZiBzPT0iZnVuY3Rpb24iP3NNdDpzP3JNdDppTXQpKHUscykpfWZ1bmN0aW9uIG9NdCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gY010KGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9aX19ZnVuY3Rpb24gdU10KGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBzPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9cz8/IiJ9fWZ1bmN0aW9uIGxNdChpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goaT09bnVsbD9vTXQ6KHR5cGVvZiBpPT0iZnVuY3Rpb24iP3VNdDpjTXQpKGkpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH1mdW5jdGlvbiBoTXQoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBmTXQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9aX19ZnVuY3Rpb24gZE10KGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBzPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXM/PyIifX1mdW5jdGlvbiBnTXQoaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGk9PW51bGw/aE10Oih0eXBlb2YgaT09ImZ1bmN0aW9uIj9kTXQ6Zk10KShpKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfWZ1bmN0aW9uIHBNdCgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBiTXQoKXtyZXR1cm4gdGhpcy5lYWNoKHBNdCl9ZnVuY3Rpb24gbU10KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gdk10KCl7cmV0dXJuIHRoaXMuZWFjaChtTXQpfWZ1bmN0aW9uIHdNdChpKXt2YXIgcz10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnBCZShpKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX1mdW5jdGlvbiB5TXQoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiB4TXQoaSxzKXt2YXIgdT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnBCZShpKSxkPXM9PW51bGw/eU10OnR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6d3BlKHMpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZSh1LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX1mdW5jdGlvbiBrTXQoKXt2YXIgaT10aGlzLnBhcmVudE5vZGU7aSYmaS5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBFTXQoKXtyZXR1cm4gdGhpcy5lYWNoKGtNdCl9ZnVuY3Rpb24gVE10KCl7dmFyIGk9dGhpcy5jbG9uZU5vZGUoITEpLHM9dGhpcy5wYXJlbnROb2RlO3JldHVybiBzP3MuaW5zZXJ0QmVmb3JlKGksdGhpcy5uZXh0U2libGluZyk6aX1mdW5jdGlvbiBDTXQoKXt2YXIgaT10aGlzLmNsb25lTm9kZSghMCkscz10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHM/cy5pbnNlcnRCZWZvcmUoaSx0aGlzLm5leHRTaWJsaW5nKTppfWZ1bmN0aW9uIFNNdChpKXtyZXR1cm4gdGhpcy5zZWxlY3QoaT9DTXQ6VE10KX1mdW5jdGlvbiBfTXQoaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGkpOnRoaXMubm9kZSgpLl9fZGF0YV9ffWZ1bmN0aW9uIEFNdChpKXtyZXR1cm4gZnVuY3Rpb24ocyl7aS5jYWxsKHRoaXMscyx0aGlzLl9fZGF0YV9fKX19ZnVuY3Rpb24gTE10KGkpe3JldHVybiBpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocyl7dmFyIHU9IiIsZD1zLmluZGV4T2YoIi4iKTtyZXR1cm4gZD49MCYmKHU9cy5zbGljZShkKzEpLHM9cy5zbGljZSgwLGQpKSx7dHlwZTpzLG5hbWU6dX19KX1mdW5jdGlvbiBNTXQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5fX29uO2lmKHMpe2Zvcih2YXIgdT0wLGQ9LTEscD1zLmxlbmd0aCx2O3U8cDsrK3Updj1zW3VdLCghaS50eXBlfHx2LnR5cGU9PT1pLnR5cGUpJiZ2Lm5hbWU9PT1pLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHYudHlwZSx2Lmxpc3RlbmVyLHYub3B0aW9ucyk6c1srK2RdPXY7KytkP3MubGVuZ3RoPWQ6ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIERNdChpLHMsdSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5fX29uLHAsdj1BTXQocyk7aWYoZCl7Zm9yKHZhciBiPTAseT1kLmxlbmd0aDtiPHk7KytiKWlmKChwPWRbYl0pLnR5cGU9PT1pLnR5cGUmJnAubmFtZT09PWkubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHAudHlwZSxwLmxpc3RlbmVyLHAub3B0aW9ucyksdGhpcy5hZGRFdmVudExpc3RlbmVyKHAudHlwZSxwLmxpc3RlbmVyPXYscC5vcHRpb25zPXUpLHAudmFsdWU9cztyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihpLnR5cGUsdix1KSxwPXt0eXBlOmkudHlwZSxuYW1lOmkubmFtZSx2YWx1ZTpzLGxpc3RlbmVyOnYsb3B0aW9uczp1fSxkP2QucHVzaChwKTp0aGlzLl9fb249W3BdfX1mdW5jdGlvbiBJTXQoaSxzLHUpe3ZhciBkPUxNdChpKyIiKSxwLHY9ZC5sZW5ndGgsYjtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciB5PXRoaXMubm9kZSgpLl9fb247aWYoeSl7Zm9yKHZhciBUPTAsXz15Lmxlbmd0aCxBO1Q8XzsrK1QpZm9yKHA9MCxBPXlbVF07cDx2OysrcClpZigoYj1kW3BdKS50eXBlPT09QS50eXBlJiZiLm5hbWU9PT1BLm5hbWUpcmV0dXJuIEEudmFsdWV9cmV0dXJufWZvcih5PXM/RE10Ok1NdCxwPTA7cDx2OysrcCl0aGlzLmVhY2goeShkW3BdLHMsdSkpO3JldHVybiB0aGlzfWZ1bmN0aW9uIFNCZShpLHMsdSl7dmFyIGQ9eEJlKGkpLHA9ZC5DdXN0b21FdmVudDt0eXBlb2YgcD09ImZ1bmN0aW9uIj9wPW5ldyBwKHMsdSk6KHA9ZC5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSx1PyhwLmluaXRFdmVudChzLHUuYnViYmxlcyx1LmNhbmNlbGFibGUpLHAuZGV0YWlsPXUuZGV0YWlsKTpwLmluaXRFdmVudChzLCExLCExKSksaS5kaXNwYXRjaEV2ZW50KHApfWZ1bmN0aW9uIE9NdChpLHMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBTQmUodGhpcyxpLHMpfX1mdW5jdGlvbiBOTXQoaSxzKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gU0JlKHRoaXMsaSxzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIFBNdChpLHMpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiBzPT0iZnVuY3Rpb24iP05NdDpPTXQpKGkscykpfWZ1bmN0aW9uKkJNdCgpe2Zvcih2YXIgaT10aGlzLl9ncm91cHMscz0wLHU9aS5sZW5ndGg7czx1Oysrcylmb3IodmFyIGQ9aVtzXSxwPTAsdj1kLmxlbmd0aCxiO3A8djsrK3ApKGI9ZFtwXSkmJih5aWVsZCBiKX12YXIgeHBlPVtudWxsXTtmdW5jdGlvbiB4cChpLHMpe3RoaXMuX2dyb3Vwcz1pLHRoaXMuX3BhcmVudHM9c31mdW5jdGlvbiB2Rigpe3JldHVybiBuZXcgeHAoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSx4cGUpfWZ1bmN0aW9uIEZNdCgpe3JldHVybiB0aGlzfXhwLnByb3RvdHlwZT12Ri5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnhwLHNlbGVjdDpsTHQsc2VsZWN0QWxsOmRMdCxzZWxlY3RDaGlsZDptTHQsc2VsZWN0Q2hpbGRyZW46eEx0LGZpbHRlcjprTHQsZGF0YTpBTHQsZW50ZXI6RUx0LGV4aXQ6TUx0LGpvaW46REx0LG1lcmdlOklMdCxzZWxlY3Rpb246Rk10LG9yZGVyOk9MdCxzb3J0Ok5MdCxjYWxsOkJMdCxub2RlczpGTHQsbm9kZTpSTHQsc2l6ZTpqTHQsZW1wdHk6JEx0LGVhY2g6ekx0LGF0dHI6V0x0LHN0eWxlOkpMdCxwcm9wZXJ0eTpuTXQsY2xhc3NlZDphTXQsdGV4dDpsTXQsaHRtbDpnTXQscmFpc2U6Yk10LGxvd2VyOnZNdCxhcHBlbmQ6d010LGluc2VydDp4TXQscmVtb3ZlOkVNdCxjbG9uZTpTTXQsZGF0dW06X010LG9uOklNdCxkaXNwYXRjaDpQTXQsW1N5bWJvbC5pdGVyYXRvcl06Qk10fTtmdW5jdGlvbiBJcihpKXtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciP25ldyB4cChbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoaSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IHhwKFtbaV1dLHhwZSl9ZnVuY3Rpb24gX0JlKGkpe3JldHVybiB0eXBlb2YgaT09InN0cmluZyI/bmV3IHhwKFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGkpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IHhwKFtiQmUoaSldLHhwZSl9ZnVuY3Rpb24gd0YoaSxzLHUpe2kucHJvdG90eXBlPXMucHJvdG90eXBlPXUsdS5jb25zdHJ1Y3Rvcj1pfWZ1bmN0aW9uIFJZKGkscyl7dmFyIHU9T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSk7Zm9yKHZhciBkIGluIHMpdVtkXT1zW2RdO3JldHVybiB1fWZ1bmN0aW9uIGZDKCl7fXZhciB5Rj0uNyxqWT0xL3lGLGVEPSJcXHMqKFsrLV0/XFxkKylcXHMqIix4Rj0iXFxzKihbKy1dPyg/OlxcZCpcXC4pP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsUjQ9IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixSTXQ9L14jKFswLTlhLWZdezMsOH0pJC8sak10PW5ldyBSZWdFeHAoYF5yZ2JcXCgke2VEfSwke2VEfSwke2VEfVxcKSRgKSwkTXQ9bmV3IFJlZ0V4cChgXnJnYlxcKCR7UjR9LCR7UjR9LCR7UjR9XFwpJGApLHpNdD1uZXcgUmVnRXhwKGBecmdiYVxcKCR7ZUR9LCR7ZUR9LCR7ZUR9LCR7eEZ9XFwpJGApLHFNdD1uZXcgUmVnRXhwKGBecmdiYVxcKCR7UjR9LCR7UjR9LCR7UjR9LCR7eEZ9XFwpJGApLEhNdD1uZXcgUmVnRXhwKGBeaHNsXFwoJHt4Rn0sJHtSNH0sJHtSNH1cXCkkYCksVk10PW5ldyBSZWdFeHAoYF5oc2xhXFwoJHt4Rn0sJHtSNH0sJHtSNH0sJHt4Rn1cXCkkYCksQUJlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O3dGKGZDLGRDLHtjb3B5KGkpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsaSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OkxCZSxmb3JtYXRIZXg6TEJlLGZvcm1hdEhleDg6VU10LGZvcm1hdEhzbDpHTXQsZm9ybWF0UmdiOk1CZSx0b1N0cmluZzpNQmV9KTtmdW5jdGlvbiBMQmUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBVTXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXg4KCl9ZnVuY3Rpb24gR010KCl7cmV0dXJuIEJCZSh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBNQmUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBkQyhpKXt2YXIgcyx1O3JldHVybiBpPShpKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwocz1STXQuZXhlYyhpKSk/KHU9c1sxXS5sZW5ndGgscz1wYXJzZUludChzWzFdLDE2KSx1PT09Nj9EQmUocyk6dT09PTM/bmV3IE1nKHM+PjgmMTV8cz4+NCYyNDAscz4+NCYxNXxzJjI0MCwocyYxNSk8PDR8cyYxNSwxKTp1PT09OD8kWShzPj4yNCYyNTUscz4+MTYmMjU1LHM+PjgmMjU1LChzJjI1NSkvMjU1KTp1PT09ND8kWShzPj4xMiYxNXxzPj44JjI0MCxzPj44JjE1fHM+PjQmMjQwLHM+PjQmMTV8cyYyNDAsKChzJjE1KTw8NHxzJjE1KS8yNTUpOm51bGwpOihzPWpNdC5leGVjKGkpKT9uZXcgTWcoc1sxXSxzWzJdLHNbM10sMSk6KHM9JE10LmV4ZWMoaSkpP25ldyBNZyhzWzFdKjI1NS8xMDAsc1syXSoyNTUvMTAwLHNbM10qMjU1LzEwMCwxKToocz16TXQuZXhlYyhpKSk/JFkoc1sxXSxzWzJdLHNbM10sc1s0XSk6KHM9cU10LmV4ZWMoaSkpPyRZKHNbMV0qMjU1LzEwMCxzWzJdKjI1NS8xMDAsc1szXSoyNTUvMTAwLHNbNF0pOihzPUhNdC5leGVjKGkpKT9QQmUoc1sxXSxzWzJdLzEwMCxzWzNdLzEwMCwxKToocz1WTXQuZXhlYyhpKSk/UEJlKHNbMV0sc1syXS8xMDAsc1szXS8xMDAsc1s0XSk6QUJlLmhhc093blByb3BlcnR5KGkpP0RCZShBQmVbaV0pOmk9PT0idHJhbnNwYXJlbnQiP25ldyBNZyhOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIERCZShpKXtyZXR1cm4gbmV3IE1nKGk+PjE2JjI1NSxpPj44JjI1NSxpJjI1NSwxKX1mdW5jdGlvbiAkWShpLHMsdSxkKXtyZXR1cm4gZDw9MCYmKGk9cz11PU5hTiksbmV3IE1nKGkscyx1LGQpfWZ1bmN0aW9uIElCZShpKXtyZXR1cm4gaSBpbnN0YW5jZW9mIGZDfHwoaT1kQyhpKSksaT8oaT1pLnJnYigpLG5ldyBNZyhpLnIsaS5nLGkuYixpLm9wYWNpdHkpKTpuZXcgTWd9ZnVuY3Rpb24ga3BlKGkscyx1LGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9JQmUoaSk6bmV3IE1nKGkscyx1LGQ/PzEpfWZ1bmN0aW9uIE1nKGkscyx1LGQpe3RoaXMucj0raSx0aGlzLmc9K3MsdGhpcy5iPSt1LHRoaXMub3BhY2l0eT0rZH13RihNZyxrcGUsUlkoZkMse2JyaWdodGVyKGkpe3JldHVybiBpPWk9PW51bGw/alk6TWF0aC5wb3coalksaSksbmV3IE1nKHRoaXMucippLHRoaXMuZyppLHRoaXMuYippLHRoaXMub3BhY2l0eSl9LGRhcmtlcihpKXtyZXR1cm4gaT1pPT1udWxsP3lGOk1hdGgucG93KHlGLGkpLG5ldyBNZyh0aGlzLnIqaSx0aGlzLmcqaSx0aGlzLmIqaSx0aGlzLm9wYWNpdHkpfSxyZ2IoKXtyZXR1cm4gdGhpc30sY2xhbXAoKXtyZXR1cm4gbmV3IE1nKGdDKHRoaXMuciksZ0ModGhpcy5nKSxnQyh0aGlzLmIpLHpZKHRoaXMub3BhY2l0eSkpfSxkaXNwbGF5YWJsZSgpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6T0JlLGZvcm1hdEhleDpPQmUsZm9ybWF0SGV4ODpLTXQsZm9ybWF0UmdiOk5CZSx0b1N0cmluZzpOQmV9KSk7ZnVuY3Rpb24gT0JlKCl7cmV0dXJuYCMke3BDKHRoaXMucil9JHtwQyh0aGlzLmcpfSR7cEModGhpcy5iKX1gfWZ1bmN0aW9uIEtNdCgpe3JldHVybmAjJHtwQyh0aGlzLnIpfSR7cEModGhpcy5nKX0ke3BDKHRoaXMuYil9JHtwQygoaXNOYU4odGhpcy5vcGFjaXR5KT8xOnRoaXMub3BhY2l0eSkqMjU1KX1gfWZ1bmN0aW9uIE5CZSgpe2NvbnN0IGk9elkodGhpcy5vcGFjaXR5KTtyZXR1cm5gJHtpPT09MT8icmdiKCI6InJnYmEoIn0ke2dDKHRoaXMucil9LCAke2dDKHRoaXMuZyl9LCAke2dDKHRoaXMuYil9JHtpPT09MT8iKSI6YCwgJHtpfSlgfWB9ZnVuY3Rpb24gelkoaSl7cmV0dXJuIGlzTmFOKGkpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGkpKX1mdW5jdGlvbiBnQyhpKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChpKXx8MCkpfWZ1bmN0aW9uIHBDKGkpe3JldHVybiBpPWdDKGkpLChpPDE2PyIwIjoiIikraS50b1N0cmluZygxNil9ZnVuY3Rpb24gUEJlKGkscyx1LGQpe3JldHVybiBkPD0wP2k9cz11PU5hTjp1PD0wfHx1Pj0xP2k9cz1OYU46czw9MCYmKGk9TmFOKSxuZXcgQTMoaSxzLHUsZCl9ZnVuY3Rpb24gQkJlKGkpe2lmKGkgaW5zdGFuY2VvZiBBMylyZXR1cm4gbmV3IEEzKGkuaCxpLnMsaS5sLGkub3BhY2l0eSk7aWYoaSBpbnN0YW5jZW9mIGZDfHwoaT1kQyhpKSksIWkpcmV0dXJuIG5ldyBBMztpZihpIGluc3RhbmNlb2YgQTMpcmV0dXJuIGk7aT1pLnJnYigpO3ZhciBzPWkuci8yNTUsdT1pLmcvMjU1LGQ9aS5iLzI1NSxwPU1hdGgubWluKHMsdSxkKSx2PU1hdGgubWF4KHMsdSxkKSxiPU5hTix5PXYtcCxUPSh2K3ApLzI7cmV0dXJuIHk/KHM9PT12P2I9KHUtZCkveSsodTxkKSo2OnU9PT12P2I9KGQtcykveSsyOmI9KHMtdSkveSs0LHkvPVQ8LjU/ditwOjItdi1wLGIqPTYwKTp5PVQ+MCYmVDwxPzA6YixuZXcgQTMoYix5LFQsaS5vcGFjaXR5KX1mdW5jdGlvbiBXTXQoaSxzLHUsZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP0JCZShpKTpuZXcgQTMoaSxzLHUsZD8/MSl9ZnVuY3Rpb24gQTMoaSxzLHUsZCl7dGhpcy5oPStpLHRoaXMucz0rcyx0aGlzLmw9K3UsdGhpcy5vcGFjaXR5PStkfXdGKEEzLFdNdCxSWShmQyx7YnJpZ2h0ZXIoaSl7cmV0dXJuIGk9aT09bnVsbD9qWTpNYXRoLnBvdyhqWSxpKSxuZXcgQTModGhpcy5oLHRoaXMucyx0aGlzLmwqaSx0aGlzLm9wYWNpdHkpfSxkYXJrZXIoaSl7cmV0dXJuIGk9aT09bnVsbD95RjpNYXRoLnBvdyh5RixpKSxuZXcgQTModGhpcy5oLHRoaXMucyx0aGlzLmwqaSx0aGlzLm9wYWNpdHkpfSxyZ2IoKXt2YXIgaT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHM9aXNOYU4oaSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsdT10aGlzLmwsZD11Kyh1PC41P3U6MS11KSpzLHA9Mip1LWQ7cmV0dXJuIG5ldyBNZyhFcGUoaT49MjQwP2ktMjQwOmkrMTIwLHAsZCksRXBlKGkscCxkKSxFcGUoaTwxMjA/aSsyNDA6aS0xMjAscCxkKSx0aGlzLm9wYWNpdHkpfSxjbGFtcCgpe3JldHVybiBuZXcgQTMoRkJlKHRoaXMuaCkscVkodGhpcy5zKSxxWSh0aGlzLmwpLHpZKHRoaXMub3BhY2l0eSkpfSxkaXNwbGF5YWJsZSgpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsKCl7Y29uc3QgaT16WSh0aGlzLm9wYWNpdHkpO3JldHVybmAke2k9PT0xPyJoc2woIjoiaHNsYSgifSR7RkJlKHRoaXMuaCl9LCAke3FZKHRoaXMucykqMTAwfSUsICR7cVkodGhpcy5sKSoxMDB9JSR7aT09PTE/IikiOmAsICR7aX0pYH1gfX0pKTtmdW5jdGlvbiBGQmUoaSl7cmV0dXJuIGk9KGl8fDApJTM2MCxpPDA/aSszNjA6aX1mdW5jdGlvbiBxWShpKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLGl8fDApKX1mdW5jdGlvbiBFcGUoaSxzLHUpe3JldHVybihpPDYwP3MrKHUtcykqaS82MDppPDE4MD91Omk8MjQwP3MrKHUtcykqKDI0MC1pKS82MDpzKSoyNTV9Y29uc3QgWU10PU1hdGguUEkvMTgwLFhNdD0xODAvTWF0aC5QSSxIWT0xOCxSQmU9Ljk2NDIyLGpCZT0xLCRCZT0uODI1MjEsekJlPTQvMjksdEQ9Ni8yOSxxQmU9Myp0RCp0RCxRTXQ9dEQqdEQqdEQ7ZnVuY3Rpb24gSEJlKGkpe2lmKGkgaW5zdGFuY2VvZiBqNClyZXR1cm4gbmV3IGo0KGkubCxpLmEsaS5iLGkub3BhY2l0eSk7aWYoaSBpbnN0YW5jZW9mIHA3KXJldHVybiBWQmUoaSk7aSBpbnN0YW5jZW9mIE1nfHwoaT1JQmUoaSkpO3ZhciBzPV9wZShpLnIpLHU9X3BlKGkuZyksZD1fcGUoaS5iKSxwPVRwZSgoLjIyMjUwNDUqcysuNzE2ODc4Nip1Ky4wNjA2MTY5KmQpL2pCZSksdixiO3JldHVybiBzPT09dSYmdT09PWQ/dj1iPXA6KHY9VHBlKCguNDM2MDc0NypzKy4zODUwNjQ5KnUrLjE0MzA4MDQqZCkvUkJlKSxiPVRwZSgoLjAxMzkzMjIqcysuMDk3MTA0NSp1Ky43MTQxNzMzKmQpLyRCZSkpLG5ldyBqNCgxMTYqcC0xNiw1MDAqKHYtcCksMjAwKihwLWIpLGkub3BhY2l0eSl9ZnVuY3Rpb24gSk10KGkscyx1LGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9IQmUoaSk6bmV3IGo0KGkscyx1LGQ/PzEpfWZ1bmN0aW9uIGo0KGkscyx1LGQpe3RoaXMubD0raSx0aGlzLmE9K3MsdGhpcy5iPSt1LHRoaXMub3BhY2l0eT0rZH13RihqNCxKTXQsUlkoZkMse2JyaWdodGVyKGkpe3JldHVybiBuZXcgajQodGhpcy5sK0hZKihpPz8xKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcihpKXtyZXR1cm4gbmV3IGo0KHRoaXMubC1IWSooaT8/MSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2IoKXt2YXIgaT0odGhpcy5sKzE2KS8xMTYscz1pc05hTih0aGlzLmEpP2k6aSt0aGlzLmEvNTAwLHU9aXNOYU4odGhpcy5iKT9pOmktdGhpcy5iLzIwMDtyZXR1cm4gcz1SQmUqQ3BlKHMpLGk9akJlKkNwZShpKSx1PSRCZSpDcGUodSksbmV3IE1nKFNwZSgzLjEzMzg1NjEqcy0xLjYxNjg2NjcqaS0uNDkwNjE0Nip1KSxTcGUoLS45Nzg3Njg0KnMrMS45MTYxNDE1KmkrLjAzMzQ1NCp1KSxTcGUoLjA3MTk0NTMqcy0uMjI4OTkxNCppKzEuNDA1MjQyNyp1KSx0aGlzLm9wYWNpdHkpfX0pKTtmdW5jdGlvbiBUcGUoaSl7cmV0dXJuIGk+UU10P01hdGgucG93KGksMS8zKTppL3FCZSt6QmV9ZnVuY3Rpb24gQ3BlKGkpe3JldHVybiBpPnREP2kqaSppOnFCZSooaS16QmUpfWZ1bmN0aW9uIFNwZShpKXtyZXR1cm4gMjU1KihpPD0uMDAzMTMwOD8xMi45MippOjEuMDU1Kk1hdGgucG93KGksMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIF9wZShpKXtyZXR1cm4oaS89MjU1KTw9LjA0MDQ1P2kvMTIuOTI6TWF0aC5wb3coKGkrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBaTXQoaSl7aWYoaSBpbnN0YW5jZW9mIHA3KXJldHVybiBuZXcgcDcoaS5oLGkuYyxpLmwsaS5vcGFjaXR5KTtpZihpIGluc3RhbmNlb2YgajR8fChpPUhCZShpKSksaS5hPT09MCYmaS5iPT09MClyZXR1cm4gbmV3IHA3KE5hTiwwPGkubCYmaS5sPDEwMD8wOk5hTixpLmwsaS5vcGFjaXR5KTt2YXIgcz1NYXRoLmF0YW4yKGkuYixpLmEpKlhNdDtyZXR1cm4gbmV3IHA3KHM8MD9zKzM2MDpzLE1hdGguc3FydChpLmEqaS5hK2kuYippLmIpLGkubCxpLm9wYWNpdHkpfWZ1bmN0aW9uIEFwZShpLHMsdSxkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Wk10KGkpOm5ldyBwNyhpLHMsdSxkPz8xKX1mdW5jdGlvbiBwNyhpLHMsdSxkKXt0aGlzLmg9K2ksdGhpcy5jPStzLHRoaXMubD0rdSx0aGlzLm9wYWNpdHk9K2R9ZnVuY3Rpb24gVkJlKGkpe2lmKGlzTmFOKGkuaCkpcmV0dXJuIG5ldyBqNChpLmwsMCwwLGkub3BhY2l0eSk7dmFyIHM9aS5oKllNdDtyZXR1cm4gbmV3IGo0KGkubCxNYXRoLmNvcyhzKSppLmMsTWF0aC5zaW4ocykqaS5jLGkub3BhY2l0eSl9d0YocDcsQXBlLFJZKGZDLHticmlnaHRlcihpKXtyZXR1cm4gbmV3IHA3KHRoaXMuaCx0aGlzLmMsdGhpcy5sK0hZKihpPz8xKSx0aGlzLm9wYWNpdHkpfSxkYXJrZXIoaSl7cmV0dXJuIG5ldyBwNyh0aGlzLmgsdGhpcy5jLHRoaXMubC1IWSooaT8/MSksdGhpcy5vcGFjaXR5KX0scmdiKCl7cmV0dXJuIFZCZSh0aGlzKS5yZ2IoKX19KSk7Y29uc3QgVlk9aT0+KCk9Pmk7ZnVuY3Rpb24gVUJlKGkscyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBpK3Uqc319ZnVuY3Rpb24gZUR0KGkscyx1KXtyZXR1cm4gaT1NYXRoLnBvdyhpLHUpLHM9TWF0aC5wb3cocyx1KS1pLHU9MS91LGZ1bmN0aW9uKGQpe3JldHVybiBNYXRoLnBvdyhpK2Qqcyx1KX19ZnVuY3Rpb24gdER0KGkscyl7dmFyIHU9cy1pO3JldHVybiB1P1VCZShpLHU+MTgwfHx1PC0xODA/dS0zNjAqTWF0aC5yb3VuZCh1LzM2MCk6dSk6VlkoaXNOYU4oaSk/czppKX1mdW5jdGlvbiBuRHQoaSl7cmV0dXJuKGk9K2kpPT0xP2tGOmZ1bmN0aW9uKHMsdSl7cmV0dXJuIHUtcz9lRHQocyx1LGkpOlZZKGlzTmFOKHMpP3U6cyl9fWZ1bmN0aW9uIGtGKGkscyl7dmFyIHU9cy1pO3JldHVybiB1P1VCZShpLHUpOlZZKGlzTmFOKGkpP3M6aSl9Y29uc3QgVVk9ZnVuY3Rpb24gaShzKXt2YXIgdT1uRHQocyk7ZnVuY3Rpb24gZChwLHYpe3ZhciBiPXUoKHA9a3BlKHApKS5yLCh2PWtwZSh2KSkucikseT11KHAuZyx2LmcpLFQ9dShwLmIsdi5iKSxfPWtGKHAub3BhY2l0eSx2Lm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihBKXtyZXR1cm4gcC5yPWIoQSkscC5nPXkoQSkscC5iPVQoQSkscC5vcGFjaXR5PV8oQSkscCsiIn19cmV0dXJuIGQuZ2FtbWE9aSxkfSgxKTtmdW5jdGlvbiByRHQoaSxzKXtzfHwocz1bXSk7dmFyIHU9aT9NYXRoLm1pbihzLmxlbmd0aCxpLmxlbmd0aCk6MCxkPXMuc2xpY2UoKSxwO3JldHVybiBmdW5jdGlvbih2KXtmb3IocD0wO3A8dTsrK3ApZFtwXT1pW3BdKigxLXYpK3NbcF0qdjtyZXR1cm4gZH19ZnVuY3Rpb24gaUR0KGkpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoaSkmJiEoaSBpbnN0YW5jZW9mIERhdGFWaWV3KX1mdW5jdGlvbiBzRHQoaSxzKXt2YXIgdT1zP3MubGVuZ3RoOjAsZD1pP01hdGgubWluKHUsaS5sZW5ndGgpOjAscD1uZXcgQXJyYXkoZCksdj1uZXcgQXJyYXkodSksYjtmb3IoYj0wO2I8ZDsrK2IpcFtiXT1EcGUoaVtiXSxzW2JdKTtmb3IoO2I8dTsrK2IpdltiXT1zW2JdO3JldHVybiBmdW5jdGlvbih5KXtmb3IoYj0wO2I8ZDsrK2IpdltiXT1wW2JdKHkpO3JldHVybiB2fX1mdW5jdGlvbiBhRHQoaSxzKXt2YXIgdT1uZXcgRGF0ZTtyZXR1cm4gaT0raSxzPStzLGZ1bmN0aW9uKGQpe3JldHVybiB1LnNldFRpbWUoaSooMS1kKStzKmQpLHV9fWZ1bmN0aW9uIEwzKGkscyl7cmV0dXJuIGk9K2kscz0rcyxmdW5jdGlvbih1KXtyZXR1cm4gaSooMS11KStzKnV9fWZ1bmN0aW9uIG9EdChpLHMpe3ZhciB1PXt9LGQ9e30scDsoaT09PW51bGx8fHR5cGVvZiBpIT0ib2JqZWN0IikmJihpPXt9KSwocz09PW51bGx8fHR5cGVvZiBzIT0ib2JqZWN0IikmJihzPXt9KTtmb3IocCBpbiBzKXAgaW4gaT91W3BdPURwZShpW3BdLHNbcF0pOmRbcF09c1twXTtyZXR1cm4gZnVuY3Rpb24odil7Zm9yKHAgaW4gdSlkW3BdPXVbcF0odik7cmV0dXJuIGR9fXZhciBMcGU9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLE1wZT1uZXcgUmVnRXhwKExwZS5zb3VyY2UsImciKTtmdW5jdGlvbiBjRHQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGl9fWZ1bmN0aW9uIHVEdChpKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIGkocykrIiJ9fWZ1bmN0aW9uIEdCZShpLHMpe3ZhciB1PUxwZS5sYXN0SW5kZXg9TXBlLmxhc3RJbmRleD0wLGQscCx2LGI9LTEseT1bXSxUPVtdO2ZvcihpPWkrIiIscz1zKyIiOyhkPUxwZS5leGVjKGkpKSYmKHA9TXBlLmV4ZWMocykpOykodj1wLmluZGV4KT51JiYodj1zLnNsaWNlKHUsdikseVtiXT95W2JdKz12OnlbKytiXT12KSwoZD1kWzBdKT09PShwPXBbMF0pP3lbYl0/eVtiXSs9cDp5WysrYl09cDooeVsrK2JdPW51bGwsVC5wdXNoKHtpOmIseDpMMyhkLHApfSkpLHU9TXBlLmxhc3RJbmRleDtyZXR1cm4gdTxzLmxlbmd0aCYmKHY9cy5zbGljZSh1KSx5W2JdP3lbYl0rPXY6eVsrK2JdPXYpLHkubGVuZ3RoPDI/VFswXT91RHQoVFswXS54KTpjRHQocyk6KHM9VC5sZW5ndGgsZnVuY3Rpb24oXyl7Zm9yKHZhciBBPTAsUDtBPHM7KytBKXlbKFA9VFtBXSkuaV09UC54KF8pO3JldHVybiB5LmpvaW4oIiIpfSl9ZnVuY3Rpb24gRHBlKGkscyl7dmFyIHU9dHlwZW9mIHMsZDtyZXR1cm4gcz09bnVsbHx8dT09PSJib29sZWFuIj9WWShzKToodT09PSJudW1iZXIiP0wzOnU9PT0ic3RyaW5nIj8oZD1kQyhzKSk/KHM9ZCxVWSk6R0JlOnMgaW5zdGFuY2VvZiBkQz9VWTpzIGluc3RhbmNlb2YgRGF0ZT9hRHQ6aUR0KHMpP3JEdDpBcnJheS5pc0FycmF5KHMpP3NEdDp0eXBlb2Ygcy52YWx1ZU9mIT0iZnVuY3Rpb24iJiZ0eXBlb2Ygcy50b1N0cmluZyE9ImZ1bmN0aW9uInx8aXNOYU4ocyk/b0R0OkwzKShpLHMpfWZ1bmN0aW9uIGxEdChpLHMpe3JldHVybiBpPStpLHM9K3MsZnVuY3Rpb24odSl7cmV0dXJuIE1hdGgucm91bmQoaSooMS11KStzKnUpfX12YXIgS0JlPTE4MC9NYXRoLlBJLElwZT17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBXQmUoaSxzLHUsZCxwLHYpe3ZhciBiLHksVDtyZXR1cm4oYj1NYXRoLnNxcnQoaSppK3MqcykpJiYoaS89YixzLz1iKSwoVD1pKnUrcypkKSYmKHUtPWkqVCxkLT1zKlQpLCh5PU1hdGguc3FydCh1KnUrZCpkKSkmJih1Lz15LGQvPXksVC89eSksaSpkPHMqdSYmKGk9LWkscz0tcyxUPS1ULGI9LWIpLHt0cmFuc2xhdGVYOnAsdHJhbnNsYXRlWTp2LHJvdGF0ZTpNYXRoLmF0YW4yKHMsaSkqS0JlLHNrZXdYOk1hdGguYXRhbihUKSpLQmUsc2NhbGVYOmIsc2NhbGVZOnl9fXZhciBHWTtmdW5jdGlvbiBoRHQoaSl7Y29uc3Qgcz1uZXcodHlwZW9mIERPTU1hdHJpeD09ImZ1bmN0aW9uIj9ET01NYXRyaXg6V2ViS2l0Q1NTTWF0cml4KShpKyIiKTtyZXR1cm4gcy5pc0lkZW50aXR5P0lwZTpXQmUocy5hLHMuYixzLmMscy5kLHMuZSxzLmYpfWZ1bmN0aW9uIGZEdChpKXtyZXR1cm4gaT09bnVsbHx8KEdZfHwoR1k9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksR1kuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGkpLCEoaT1HWS50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKSk/SXBlOihpPWkubWF0cml4LFdCZShpLmEsaS5iLGkuYyxpLmQsaS5lLGkuZikpfWZ1bmN0aW9uIFlCZShpLHMsdSxkKXtmdW5jdGlvbiBwKF8pe3JldHVybiBfLmxlbmd0aD9fLnBvcCgpKyIgIjoiIn1mdW5jdGlvbiB2KF8sQSxQLFIsRixqKXtpZihfIT09UHx8QSE9PVIpe3ZhciBLPUYucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxzLG51bGwsdSk7ai5wdXNoKHtpOkstNCx4OkwzKF8sUCl9LHtpOkstMix4OkwzKEEsUil9KX1lbHNlKFB8fFIpJiZGLnB1c2goInRyYW5zbGF0ZSgiK1ArcytSK3UpfWZ1bmN0aW9uIGIoXyxBLFAsUil7XyE9PUE/KF8tQT4xODA/QSs9MzYwOkEtXz4xODAmJihfKz0zNjApLFIucHVzaCh7aTpQLnB1c2gocChQKSsicm90YXRlKCIsbnVsbCxkKS0yLHg6TDMoXyxBKX0pKTpBJiZQLnB1c2gocChQKSsicm90YXRlKCIrQStkKX1mdW5jdGlvbiB5KF8sQSxQLFIpe18hPT1BP1IucHVzaCh7aTpQLnB1c2gocChQKSsic2tld1goIixudWxsLGQpLTIseDpMMyhfLEEpfSk6QSYmUC5wdXNoKHAoUCkrInNrZXdYKCIrQStkKX1mdW5jdGlvbiBUKF8sQSxQLFIsRixqKXtpZihfIT09UHx8QSE9PVIpe3ZhciBLPUYucHVzaChwKEYpKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtqLnB1c2goe2k6Sy00LHg6TDMoXyxQKX0se2k6Sy0yLHg6TDMoQSxSKX0pfWVsc2UoUCE9PTF8fFIhPT0xKSYmRi5wdXNoKHAoRikrInNjYWxlKCIrUCsiLCIrUisiKSIpfXJldHVybiBmdW5jdGlvbihfLEEpe3ZhciBQPVtdLFI9W107cmV0dXJuIF89aShfKSxBPWkoQSksdihfLnRyYW5zbGF0ZVgsXy50cmFuc2xhdGVZLEEudHJhbnNsYXRlWCxBLnRyYW5zbGF0ZVksUCxSKSxiKF8ucm90YXRlLEEucm90YXRlLFAsUikseShfLnNrZXdYLEEuc2tld1gsUCxSKSxUKF8uc2NhbGVYLF8uc2NhbGVZLEEuc2NhbGVYLEEuc2NhbGVZLFAsUiksXz1BPW51bGwsZnVuY3Rpb24oRil7Zm9yKHZhciBqPS0xLEs9Ui5sZW5ndGgsZWU7KytqPEs7KVBbKGVlPVJbal0pLmldPWVlLngoRik7cmV0dXJuIFAuam9pbigiIil9fX12YXIgZER0PVlCZShoRHQsInB4LCAiLCJweCkiLCJkZWcpIiksZ0R0PVlCZShmRHQsIiwgIiwiKSIsIikiKTtmdW5jdGlvbiBwRHQoaSl7cmV0dXJuIGZ1bmN0aW9uKHMsdSl7dmFyIGQ9aSgocz1BcGUocykpLmgsKHU9QXBlKHUpKS5oKSxwPWtGKHMuYyx1LmMpLHY9a0Yocy5sLHUubCksYj1rRihzLm9wYWNpdHksdS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oeSl7cmV0dXJuIHMuaD1kKHkpLHMuYz1wKHkpLHMubD12KHkpLHMub3BhY2l0eT1iKHkpLHMrIiJ9fX1jb25zdCBiRHQ9cER0KHREdCk7dmFyIG5EPTAsRUY9MCxURj0wLFhCZT0xZTMsS1ksQ0YsV1k9MCxiQz0wLFlZPTAsU0Y9dHlwZW9mIHBlcmZvcm1hbmNlPT0ib2JqZWN0IiYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsUUJlPXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKGkpe3NldFRpbWVvdXQoaSwxNyl9O2Z1bmN0aW9uIE9wZSgpe3JldHVybiBiQ3x8KFFCZShtRHQpLGJDPVNGLm5vdygpK1lZKX1mdW5jdGlvbiBtRHQoKXtiQz0wfWZ1bmN0aW9uIFhZKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1YWS5wcm90b3R5cGU9SkJlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WFkscmVzdGFydDpmdW5jdGlvbihpLHMsdSl7aWYodHlwZW9mIGkhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTt1PSh1PT1udWxsP09wZSgpOit1KSsocz09bnVsbD8wOitzKSwhdGhpcy5fbmV4dCYmQ0YhPT10aGlzJiYoQ0Y/Q0YuX25leHQ9dGhpczpLWT10aGlzLENGPXRoaXMpLHRoaXMuX2NhbGw9aSx0aGlzLl90aW1lPXUsTnBlKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLE5wZSgpKX19O2Z1bmN0aW9uIEpCZShpLHMsdSl7dmFyIGQ9bmV3IFhZO3JldHVybiBkLnJlc3RhcnQoaSxzLHUpLGR9ZnVuY3Rpb24gdkR0KCl7T3BlKCksKytuRDtmb3IodmFyIGk9S1kscztpOykocz1iQy1pLl90aW1lKT49MCYmaS5fY2FsbC5jYWxsKHZvaWQgMCxzKSxpPWkuX25leHQ7LS1uRH1mdW5jdGlvbiBaQmUoKXtiQz0oV1k9U0Yubm93KCkpK1lZLG5EPUVGPTA7dHJ5e3ZEdCgpfWZpbmFsbHl7bkQ9MCx5RHQoKSxiQz0wfX1mdW5jdGlvbiB3RHQoKXt2YXIgaT1TRi5ub3coKSxzPWktV1k7cz5YQmUmJihZWS09cyxXWT1pKX1mdW5jdGlvbiB5RHQoKXtmb3IodmFyIGkscz1LWSx1LGQ9MS8wO3M7KXMuX2NhbGw/KGQ+cy5fdGltZSYmKGQ9cy5fdGltZSksaT1zLHM9cy5fbmV4dCk6KHU9cy5fbmV4dCxzLl9uZXh0PW51bGwscz1pP2kuX25leHQ9dTpLWT11KTtDRj1pLE5wZShkKX1mdW5jdGlvbiBOcGUoaSl7aWYoIW5EKXtFRiYmKEVGPWNsZWFyVGltZW91dChFRikpO3ZhciBzPWktYkM7cz4yND8oaTwxLzAmJihFRj1zZXRUaW1lb3V0KFpCZSxpLVNGLm5vdygpLVlZKSksVEYmJihURj1jbGVhckludGVydmFsKFRGKSkpOihURnx8KFdZPVNGLm5vdygpLFRGPXNldEludGVydmFsKHdEdCxYQmUpKSxuRD0xLFFCZShaQmUpKX19ZnVuY3Rpb24gZUZlKGkscyx1KXt2YXIgZD1uZXcgWFk7cmV0dXJuIHM9cz09bnVsbD8wOitzLGQucmVzdGFydChwPT57ZC5zdG9wKCksaShwK3MpfSxzLHUpLGR9dmFyIHhEdD1mQmUoInN0YXJ0IiwiZW5kIiwiY2FuY2VsIiwiaW50ZXJydXB0Iiksa0R0PVtdLHRGZT0wLG5GZT0xLFBwZT0yLFFZPTMsckZlPTQsQnBlPTUsSlk9NjtmdW5jdGlvbiBaWShpLHMsdSxkLHAsdil7dmFyIGI9aS5fX3RyYW5zaXRpb247aWYoIWIpaS5fX3RyYW5zaXRpb249e307ZWxzZSBpZih1IGluIGIpcmV0dXJuO0VEdChpLHUse25hbWU6cyxpbmRleDpkLGdyb3VwOnAsb246eER0LHR3ZWVuOmtEdCx0aW1lOnYudGltZSxkZWxheTp2LmRlbGF5LGR1cmF0aW9uOnYuZHVyYXRpb24sZWFzZTp2LmVhc2UsdGltZXI6bnVsbCxzdGF0ZTp0RmV9KX1mdW5jdGlvbiBGcGUoaSxzKXt2YXIgdT1NMyhpLHMpO2lmKHUuc3RhdGU+dEZlKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIHV9ZnVuY3Rpb24gJDQoaSxzKXt2YXIgdT1NMyhpLHMpO2lmKHUuc3RhdGU+UVkpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIHV9ZnVuY3Rpb24gTTMoaSxzKXt2YXIgdT1pLl9fdHJhbnNpdGlvbjtpZighdXx8ISh1PXVbc10pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gdX1mdW5jdGlvbiBFRHQoaSxzLHUpe3ZhciBkPWkuX190cmFuc2l0aW9uLHA7ZFtzXT11LHUudGltZXI9SkJlKHYsMCx1LnRpbWUpO2Z1bmN0aW9uIHYoXyl7dS5zdGF0ZT1uRmUsdS50aW1lci5yZXN0YXJ0KGIsdS5kZWxheSx1LnRpbWUpLHUuZGVsYXk8PV8mJmIoXy11LmRlbGF5KX1mdW5jdGlvbiBiKF8pe3ZhciBBLFAsUixGO2lmKHUuc3RhdGUhPT1uRmUpcmV0dXJuIFQoKTtmb3IoQSBpbiBkKWlmKEY9ZFtBXSxGLm5hbWU9PT11Lm5hbWUpe2lmKEYuc3RhdGU9PT1RWSlyZXR1cm4gZUZlKGIpO0Yuc3RhdGU9PT1yRmU/KEYuc3RhdGU9SlksRi50aW1lci5zdG9wKCksRi5vbi5jYWxsKCJpbnRlcnJ1cHQiLGksaS5fX2RhdGFfXyxGLmluZGV4LEYuZ3JvdXApLGRlbGV0ZSBkW0FdKTorQTxzJiYoRi5zdGF0ZT1KWSxGLnRpbWVyLnN0b3AoKSxGLm9uLmNhbGwoImNhbmNlbCIsaSxpLl9fZGF0YV9fLEYuaW5kZXgsRi5ncm91cCksZGVsZXRlIGRbQV0pfWlmKGVGZShmdW5jdGlvbigpe3Uuc3RhdGU9PT1RWSYmKHUuc3RhdGU9ckZlLHUudGltZXIucmVzdGFydCh5LHUuZGVsYXksdS50aW1lKSx5KF8pKX0pLHUuc3RhdGU9UHBlLHUub24uY2FsbCgic3RhcnQiLGksaS5fX2RhdGFfXyx1LmluZGV4LHUuZ3JvdXApLHUuc3RhdGU9PT1QcGUpe2Zvcih1LnN0YXRlPVFZLHA9bmV3IEFycmF5KFI9dS50d2Vlbi5sZW5ndGgpLEE9MCxQPS0xO0E8UjsrK0EpKEY9dS50d2VlbltBXS52YWx1ZS5jYWxsKGksaS5fX2RhdGFfXyx1LmluZGV4LHUuZ3JvdXApKSYmKHBbKytQXT1GKTtwLmxlbmd0aD1QKzF9fWZ1bmN0aW9uIHkoXyl7Zm9yKHZhciBBPV88dS5kdXJhdGlvbj91LmVhc2UuY2FsbChudWxsLF8vdS5kdXJhdGlvbik6KHUudGltZXIucmVzdGFydChUKSx1LnN0YXRlPUJwZSwxKSxQPS0xLFI9cC5sZW5ndGg7KytQPFI7KXBbUF0uY2FsbChpLEEpO3Uuc3RhdGU9PT1CcGUmJih1Lm9uLmNhbGwoImVuZCIsaSxpLl9fZGF0YV9fLHUuaW5kZXgsdS5ncm91cCksVCgpKX1mdW5jdGlvbiBUKCl7dS5zdGF0ZT1KWSx1LnRpbWVyLnN0b3AoKSxkZWxldGUgZFtzXTtmb3IodmFyIF8gaW4gZClyZXR1cm47ZGVsZXRlIGkuX190cmFuc2l0aW9ufX1mdW5jdGlvbiBURHQoaSxzKXt2YXIgdT1pLl9fdHJhbnNpdGlvbixkLHAsdj0hMCxiO2lmKHUpe3M9cz09bnVsbD9udWxsOnMrIiI7Zm9yKGIgaW4gdSl7aWYoKGQ9dVtiXSkubmFtZSE9PXMpe3Y9ITE7Y29udGludWV9cD1kLnN0YXRlPlBwZSYmZC5zdGF0ZTxCcGUsZC5zdGF0ZT1KWSxkLnRpbWVyLnN0b3AoKSxkLm9uLmNhbGwocD8iaW50ZXJydXB0IjoiY2FuY2VsIixpLGkuX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgdVtiXX12JiZkZWxldGUgaS5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIENEdChpKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7VER0KHRoaXMsaSl9KX1mdW5jdGlvbiBTRHQoaSxzKXt2YXIgdSxkO3JldHVybiBmdW5jdGlvbigpe3ZhciBwPSQ0KHRoaXMsaSksdj1wLnR3ZWVuO2lmKHYhPT11KXtkPXU9djtmb3IodmFyIGI9MCx5PWQubGVuZ3RoO2I8eTsrK2IpaWYoZFtiXS5uYW1lPT09cyl7ZD1kLnNsaWNlKCksZC5zcGxpY2UoYiwxKTticmVha319cC50d2Vlbj1kfX1mdW5jdGlvbiBfRHQoaSxzLHUpe3ZhciBkLHA7aWYodHlwZW9mIHUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciB2PSQ0KHRoaXMsaSksYj12LnR3ZWVuO2lmKGIhPT1kKXtwPShkPWIpLnNsaWNlKCk7Zm9yKHZhciB5PXtuYW1lOnMsdmFsdWU6dX0sVD0wLF89cC5sZW5ndGg7VDxfOysrVClpZihwW1RdLm5hbWU9PT1zKXtwW1RdPXk7YnJlYWt9VD09PV8mJnAucHVzaCh5KX12LnR3ZWVuPXB9fWZ1bmN0aW9uIEFEdChpLHMpe3ZhciB1PXRoaXMuX2lkO2lmKGkrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBkPU0zKHRoaXMubm9kZSgpLHUpLnR3ZWVuLHA9MCx2PWQubGVuZ3RoLGI7cDx2OysrcClpZigoYj1kW3BdKS5uYW1lPT09aSlyZXR1cm4gYi52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChzPT1udWxsP1NEdDpfRHQpKHUsaSxzKSl9ZnVuY3Rpb24gUnBlKGkscyx1KXt2YXIgZD1pLl9pZDtyZXR1cm4gaS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHA9JDQodGhpcyxkKTsocC52YWx1ZXx8KHAudmFsdWU9e30pKVtzXT11LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKHApe3JldHVybiBNMyhwLGQpLnZhbHVlW3NdfX1mdW5jdGlvbiBpRmUoaSxzKXt2YXIgdTtyZXR1cm4odHlwZW9mIHM9PSJudW1iZXIiP0wzOnMgaW5zdGFuY2VvZiBkQz9VWToodT1kQyhzKSk/KHM9dSxVWSk6R0JlKShpLHMpfWZ1bmN0aW9uIExEdChpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShpKX19ZnVuY3Rpb24gTUR0KGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKX19ZnVuY3Rpb24gRER0KGkscyx1KXt2YXIgZCxwPXUrIiIsdjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldEF0dHJpYnV0ZShpKTtyZXR1cm4gYj09PXA/bnVsbDpiPT09ZD92OnY9cyhkPWIsdSl9fWZ1bmN0aW9uIElEdChpLHMsdSl7dmFyIGQscD11KyIiLHY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpO3JldHVybiBiPT09cD9udWxsOmI9PT1kP3Y6dj1zKGQ9Yix1KX19ZnVuY3Rpb24gT0R0KGkscyx1KXt2YXIgZCxwLHY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGIseT11KHRoaXMpLFQ7cmV0dXJuIHk9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShpKTooYj10aGlzLmdldEF0dHJpYnV0ZShpKSxUPXkrIiIsYj09PVQ/bnVsbDpiPT09ZCYmVD09PXA/djoocD1ULHY9cyhkPWIseSkpKX19ZnVuY3Rpb24gTkR0KGkscyx1KXt2YXIgZCxwLHY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGIseT11KHRoaXMpLFQ7cmV0dXJuIHk9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCk6KGI9dGhpcy5nZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpLFQ9eSsiIixiPT09VD9udWxsOmI9PT1kJiZUPT09cD92OihwPVQsdj1zKGQ9Yix5KSkpfX1mdW5jdGlvbiBQRHQoaSxzKXt2YXIgdT1CWShpKSxkPXU9PT0idHJhbnNmb3JtIj9nRHQ6aUZlO3JldHVybiB0aGlzLmF0dHJUd2VlbihpLHR5cGVvZiBzPT0iZnVuY3Rpb24iPyh1LmxvY2FsP05EdDpPRHQpKHUsZCxScGUodGhpcywiYXR0ci4iK2kscykpOnM9PW51bGw/KHUubG9jYWw/TUR0OkxEdCkodSk6KHUubG9jYWw/SUR0OkREdCkodSxkLHMpKX1mdW5jdGlvbiBCRHQoaSxzKXtyZXR1cm4gZnVuY3Rpb24odSl7dGhpcy5zZXRBdHRyaWJ1dGUoaSxzLmNhbGwodGhpcyx1KSl9fWZ1bmN0aW9uIEZEdChpLHMpe3JldHVybiBmdW5jdGlvbih1KXt0aGlzLnNldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCxzLmNhbGwodGhpcyx1KSl9fWZ1bmN0aW9uIFJEdChpLHMpe3ZhciB1LGQ7ZnVuY3Rpb24gcCgpe3ZhciB2PXMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB2IT09ZCYmKHU9KGQ9dikmJkZEdChpLHYpKSx1fXJldHVybiBwLl92YWx1ZT1zLHB9ZnVuY3Rpb24gakR0KGkscyl7dmFyIHUsZDtmdW5jdGlvbiBwKCl7dmFyIHY9cy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHYhPT1kJiYodT0oZD12KSYmQkR0KGksdikpLHV9cmV0dXJuIHAuX3ZhbHVlPXMscH1mdW5jdGlvbiAkRHQoaSxzKXt2YXIgdT0iYXR0ci4iK2k7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybih1PXRoaXMudHdlZW4odSkpJiZ1Ll92YWx1ZTtpZihzPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHUsbnVsbCk7aWYodHlwZW9mIHMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBkPUJZKGkpO3JldHVybiB0aGlzLnR3ZWVuKHUsKGQubG9jYWw/UkR0OmpEdCkoZCxzKSl9ZnVuY3Rpb24gekR0KGkscyl7cmV0dXJuIGZ1bmN0aW9uKCl7RnBlKHRoaXMsaSkuZGVsYXk9K3MuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBxRHQoaSxzKXtyZXR1cm4gcz0rcyxmdW5jdGlvbigpe0ZwZSh0aGlzLGkpLmRlbGF5PXN9fWZ1bmN0aW9uIEhEdChpKXt2YXIgcz10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKHR5cGVvZiBpPT0iZnVuY3Rpb24iP3pEdDpxRHQpKHMsaSkpOk0zKHRoaXMubm9kZSgpLHMpLmRlbGF5fWZ1bmN0aW9uIFZEdChpLHMpe3JldHVybiBmdW5jdGlvbigpeyQ0KHRoaXMsaSkuZHVyYXRpb249K3MuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBVRHQoaSxzKXtyZXR1cm4gcz0rcyxmdW5jdGlvbigpeyQ0KHRoaXMsaSkuZHVyYXRpb249c319ZnVuY3Rpb24gR0R0KGkpe3ZhciBzPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGk9PSJmdW5jdGlvbiI/VkR0OlVEdCkocyxpKSk6TTModGhpcy5ub2RlKCkscykuZHVyYXRpb259ZnVuY3Rpb24gS0R0KGkscyl7aWYodHlwZW9mIHMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpeyQ0KHRoaXMsaSkuZWFzZT1zfX1mdW5jdGlvbiBXRHQoaSl7dmFyIHM9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKEtEdChzLGkpKTpNMyh0aGlzLm5vZGUoKSxzKS5lYXNlfWZ1bmN0aW9uIFlEdChpLHMpe3JldHVybiBmdW5jdGlvbigpe3ZhciB1PXMuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKHR5cGVvZiB1IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjskNCh0aGlzLGkpLmVhc2U9dX19ZnVuY3Rpb24gWER0KGkpe2lmKHR5cGVvZiBpIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy5lYWNoKFlEdCh0aGlzLl9pZCxpKSl9ZnVuY3Rpb24gUUR0KGkpe3R5cGVvZiBpIT0iZnVuY3Rpb24iJiYoaT12QmUoaSkpO2Zvcih2YXIgcz10aGlzLl9ncm91cHMsdT1zLmxlbmd0aCxkPW5ldyBBcnJheSh1KSxwPTA7cDx1OysrcClmb3IodmFyIHY9c1twXSxiPXYubGVuZ3RoLHk9ZFtwXT1bXSxULF89MDtfPGI7KytfKShUPXZbX10pJiZpLmNhbGwoVCxULl9fZGF0YV9fLF8sdikmJnkucHVzaChUKTtyZXR1cm4gbmV3IGI3KGQsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBKRHQoaSl7aWYoaS5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciBzPXRoaXMuX2dyb3Vwcyx1PWkuX2dyb3VwcyxkPXMubGVuZ3RoLHA9dS5sZW5ndGgsdj1NYXRoLm1pbihkLHApLGI9bmV3IEFycmF5KGQpLHk9MDt5PHY7Kyt5KWZvcih2YXIgVD1zW3ldLF89dVt5XSxBPVQubGVuZ3RoLFA9Ylt5XT1uZXcgQXJyYXkoQSksUixGPTA7RjxBOysrRikoUj1UW0ZdfHxfW0ZdKSYmKFBbRl09Uik7Zm9yKDt5PGQ7Kyt5KWJbeV09c1t5XTtyZXR1cm4gbmV3IGI3KGIsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBaRHQoaSl7cmV0dXJuKGkrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbihzKXt2YXIgdT1zLmluZGV4T2YoIi4iKTtyZXR1cm4gdT49MCYmKHM9cy5zbGljZSgwLHUpKSwhc3x8cz09PSJzdGFydCJ9KX1mdW5jdGlvbiBlSXQoaSxzLHUpe3ZhciBkLHAsdj1aRHQocyk/RnBlOiQ0O3JldHVybiBmdW5jdGlvbigpe3ZhciBiPXYodGhpcyxpKSx5PWIub247eSE9PWQmJihwPShkPXkpLmNvcHkoKSkub24ocyx1KSxiLm9uPXB9fWZ1bmN0aW9uIHRJdChpLHMpe3ZhciB1PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/TTModGhpcy5ub2RlKCksdSkub24ub24oaSk6dGhpcy5lYWNoKGVJdCh1LGkscykpfWZ1bmN0aW9uIG5JdChpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciB1IGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCt1IT09aSlyZXR1cm47cyYmcy5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24gckl0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLG5JdCh0aGlzLl9pZCkpfWZ1bmN0aW9uIGlJdChpKXt2YXIgcz10aGlzLl9uYW1lLHU9dGhpcy5faWQ7dHlwZW9mIGkhPSJmdW5jdGlvbiImJihpPXdwZShpKSk7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxwPWQubGVuZ3RoLHY9bmV3IEFycmF5KHApLGI9MDtiPHA7KytiKWZvcih2YXIgeT1kW2JdLFQ9eS5sZW5ndGgsXz12W2JdPW5ldyBBcnJheShUKSxBLFAsUj0wO1I8VDsrK1IpKEE9eVtSXSkmJihQPWkuY2FsbChBLEEuX19kYXRhX18sUix5KSkmJigiX19kYXRhX18iaW4gQSYmKFAuX19kYXRhX189QS5fX2RhdGFfXyksX1tSXT1QLFpZKF9bUl0scyx1LFIsXyxNMyhBLHUpKSk7cmV0dXJuIG5ldyBiNyh2LHRoaXMuX3BhcmVudHMscyx1KX1mdW5jdGlvbiBzSXQoaSl7dmFyIHM9dGhpcy5fbmFtZSx1PXRoaXMuX2lkO3R5cGVvZiBpIT0iZnVuY3Rpb24iJiYoaT1tQmUoaSkpO2Zvcih2YXIgZD10aGlzLl9ncm91cHMscD1kLmxlbmd0aCx2PVtdLGI9W10seT0wO3k8cDsrK3kpZm9yKHZhciBUPWRbeV0sXz1ULmxlbmd0aCxBLFA9MDtQPF87KytQKWlmKEE9VFtQXSl7Zm9yKHZhciBSPWkuY2FsbChBLEEuX19kYXRhX18sUCxUKSxGLGo9TTMoQSx1KSxLPTAsZWU9Ui5sZW5ndGg7SzxlZTsrK0spKEY9UltLXSkmJlpZKEYscyx1LEssUixqKTt2LnB1c2goUiksYi5wdXNoKEEpfXJldHVybiBuZXcgYjcodixiLHMsdSl9dmFyIGFJdD12Ri5wcm90b3R5cGUuY29uc3RydWN0b3I7ZnVuY3Rpb24gb0l0KCl7cmV0dXJuIG5ldyBhSXQodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIGNJdChpLHMpe3ZhciB1LGQscDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdj1aTSh0aGlzLGkpLGI9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoaSksWk0odGhpcyxpKSk7cmV0dXJuIHY9PT1iP251bGw6dj09PXUmJmI9PT1kP3A6cD1zKHU9dixkPWIpfX1mdW5jdGlvbiBzRmUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShpKX19ZnVuY3Rpb24gdUl0KGkscyx1KXt2YXIgZCxwPXUrIiIsdjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYj1aTSh0aGlzLGkpO3JldHVybiBiPT09cD9udWxsOmI9PT1kP3Y6dj1zKGQ9Yix1KX19ZnVuY3Rpb24gbEl0KGkscyx1KXt2YXIgZCxwLHY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9Wk0odGhpcyxpKSx5PXUodGhpcyksVD15KyIiO3JldHVybiB5PT1udWxsJiYoVD15PSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGkpLFpNKHRoaXMsaSkpKSxiPT09VD9udWxsOmI9PT1kJiZUPT09cD92OihwPVQsdj1zKGQ9Yix5KSl9fWZ1bmN0aW9uIGhJdChpLHMpe3ZhciB1LGQscCx2PSJzdHlsZS4iK3MsYj0iZW5kLiIrdix5O3JldHVybiBmdW5jdGlvbigpe3ZhciBUPSQ0KHRoaXMsaSksXz1ULm9uLEE9VC52YWx1ZVt2XT09bnVsbD95fHwoeT1zRmUocykpOnZvaWQgMDsoXyE9PXV8fHAhPT1BKSYmKGQ9KHU9XykuY29weSgpKS5vbihiLHA9QSksVC5vbj1kfX1mdW5jdGlvbiBmSXQoaSxzLHUpe3ZhciBkPShpKz0iIik9PSJ0cmFuc2Zvcm0iP2REdDppRmU7cmV0dXJuIHM9PW51bGw/dGhpcy5zdHlsZVR3ZWVuKGksY0l0KGksZCkpLm9uKCJlbmQuc3R5bGUuIitpLHNGZShpKSk6dHlwZW9mIHM9PSJmdW5jdGlvbiI/dGhpcy5zdHlsZVR3ZWVuKGksbEl0KGksZCxScGUodGhpcywic3R5bGUuIitpLHMpKSkuZWFjaChoSXQodGhpcy5faWQsaSkpOnRoaXMuc3R5bGVUd2VlbihpLHVJdChpLGQscyksdSkub24oImVuZC5zdHlsZS4iK2ksbnVsbCl9ZnVuY3Rpb24gZEl0KGkscyx1KXtyZXR1cm4gZnVuY3Rpb24oZCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShpLHMuY2FsbCh0aGlzLGQpLHUpfX1mdW5jdGlvbiBnSXQoaSxzLHUpe3ZhciBkLHA7ZnVuY3Rpb24gdigpe3ZhciBiPXMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBiIT09cCYmKGQ9KHA9YikmJmRJdChpLGIsdSkpLGR9cmV0dXJuIHYuX3ZhbHVlPXMsdn1mdW5jdGlvbiBwSXQoaSxzLHUpe3ZhciBkPSJzdHlsZS4iKyhpKz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihkPXRoaXMudHdlZW4oZCkpJiZkLl92YWx1ZTtpZihzPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKGQsbnVsbCk7aWYodHlwZW9mIHMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGQsZ0l0KGkscyx1Pz8iIikpfWZ1bmN0aW9uIGJJdChpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWl9fWZ1bmN0aW9uIG1JdChpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz1pKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9cz8/IiJ9fWZ1bmN0aW9uIHZJdChpKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsdHlwZW9mIGk9PSJmdW5jdGlvbiI/bUl0KFJwZSh0aGlzLCJ0ZXh0IixpKSk6Ykl0KGk9PW51bGw/IiI6aSsiIikpfWZ1bmN0aW9uIHdJdChpKXtyZXR1cm4gZnVuY3Rpb24ocyl7dGhpcy50ZXh0Q29udGVudD1pLmNhbGwodGhpcyxzKX19ZnVuY3Rpb24geUl0KGkpe3ZhciBzLHU7ZnVuY3Rpb24gZCgpe3ZhciBwPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBwIT09dSYmKHM9KHU9cCkmJndJdChwKSksc31yZXR1cm4gZC5fdmFsdWU9aSxkfWZ1bmN0aW9uIHhJdChpKXt2YXIgcz0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybihzPXRoaXMudHdlZW4ocykpJiZzLl92YWx1ZTtpZihpPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHMsbnVsbCk7aWYodHlwZW9mIGkhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHMseUl0KGkpKX1mdW5jdGlvbiBrSXQoKXtmb3IodmFyIGk9dGhpcy5fbmFtZSxzPXRoaXMuX2lkLHU9YUZlKCksZD10aGlzLl9ncm91cHMscD1kLmxlbmd0aCx2PTA7djxwOysrdilmb3IodmFyIGI9ZFt2XSx5PWIubGVuZ3RoLFQsXz0wO188eTsrK18paWYoVD1iW19dKXt2YXIgQT1NMyhULHMpO1pZKFQsaSx1LF8sYix7dGltZTpBLnRpbWUrQS5kZWxheStBLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246QS5kdXJhdGlvbixlYXNlOkEuZWFzZX0pfXJldHVybiBuZXcgYjcoZCx0aGlzLl9wYXJlbnRzLGksdSl9ZnVuY3Rpb24gRUl0KCl7dmFyIGkscyx1PXRoaXMsZD11Ll9pZCxwPXUuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih2LGIpe3ZhciB5PXt2YWx1ZTpifSxUPXt2YWx1ZTpmdW5jdGlvbigpey0tcD09PTAmJnYoKX19O3UuZWFjaChmdW5jdGlvbigpe3ZhciBfPSQ0KHRoaXMsZCksQT1fLm9uO0EhPT1pJiYocz0oaT1BKS5jb3B5KCkscy5fLmNhbmNlbC5wdXNoKHkpLHMuXy5pbnRlcnJ1cHQucHVzaCh5KSxzLl8uZW5kLnB1c2goVCkpLF8ub249c30pLHA9PT0wJiZ2KCl9KX12YXIgVEl0PTA7ZnVuY3Rpb24gYjcoaSxzLHUsZCl7dGhpcy5fZ3JvdXBzPWksdGhpcy5fcGFyZW50cz1zLHRoaXMuX25hbWU9dSx0aGlzLl9pZD1kfWZ1bmN0aW9uIGFGZSgpe3JldHVybisrVEl0fXZhciBtNz12Ri5wcm90b3R5cGU7YjcucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiNyxzZWxlY3Q6aUl0LHNlbGVjdEFsbDpzSXQsc2VsZWN0Q2hpbGQ6bTcuc2VsZWN0Q2hpbGQsc2VsZWN0Q2hpbGRyZW46bTcuc2VsZWN0Q2hpbGRyZW4sZmlsdGVyOlFEdCxtZXJnZTpKRHQsc2VsZWN0aW9uOm9JdCx0cmFuc2l0aW9uOmtJdCxjYWxsOm03LmNhbGwsbm9kZXM6bTcubm9kZXMsbm9kZTptNy5ub2RlLHNpemU6bTcuc2l6ZSxlbXB0eTptNy5lbXB0eSxlYWNoOm03LmVhY2gsb246dEl0LGF0dHI6UER0LGF0dHJUd2VlbjokRHQsc3R5bGU6Zkl0LHN0eWxlVHdlZW46cEl0LHRleHQ6dkl0LHRleHRUd2Vlbjp4SXQscmVtb3ZlOnJJdCx0d2VlbjpBRHQsZGVsYXk6SER0LGR1cmF0aW9uOkdEdCxlYXNlOldEdCxlYXNlVmFyeWluZzpYRHQsZW5kOkVJdCxbU3ltYm9sLml0ZXJhdG9yXTptN1tTeW1ib2wuaXRlcmF0b3JdfTtmdW5jdGlvbiBDSXQoaSl7cmV0dXJuKChpKj0yKTw9MT9pKmkqaTooaS09MikqaSppKzIpLzJ9dmFyIFNJdD17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6Q0l0fTtmdW5jdGlvbiBfSXQoaSxzKXtmb3IodmFyIHU7ISh1PWkuX190cmFuc2l0aW9uKXx8ISh1PXVbc10pOylpZighKGk9aS5wYXJlbnROb2RlKSl0aHJvdyBuZXcgRXJyb3IoYHRyYW5zaXRpb24gJHtzfSBub3QgZm91bmRgKTtyZXR1cm4gdX1mdW5jdGlvbiBBSXQoaSl7dmFyIHMsdTtpIGluc3RhbmNlb2YgYjc/KHM9aS5faWQsaT1pLl9uYW1lKToocz1hRmUoKSwodT1TSXQpLnRpbWU9T3BlKCksaT1pPT1udWxsP251bGw6aSsiIik7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxwPWQubGVuZ3RoLHY9MDt2PHA7Kyt2KWZvcih2YXIgYj1kW3ZdLHk9Yi5sZW5ndGgsVCxfPTA7Xzx5OysrXykoVD1iW19dKSYmWlkoVCxpLHMsXyxiLHV8fF9JdChULHMpKTtyZXR1cm4gbmV3IGI3KGQsdGhpcy5fcGFyZW50cyxpLHMpfXZGLnByb3RvdHlwZS5pbnRlcnJ1cHQ9Q0R0LHZGLnByb3RvdHlwZS50cmFuc2l0aW9uPUFJdDtjb25zdCBqcGU9TWF0aC5QSSwkcGU9MipqcGUsbUM9MWUtNixMSXQ9JHBlLW1DO2Z1bmN0aW9uIG9GZShpKXt0aGlzLl8rPWlbMF07Zm9yKGxldCBzPTEsdT1pLmxlbmd0aDtzPHU7KytzKXRoaXMuXys9YXJndW1lbnRzW3NdK2lbc119ZnVuY3Rpb24gTUl0KGkpe2xldCBzPU1hdGguZmxvb3IoaSk7aWYoIShzPj0wKSl0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZGlnaXRzOiAke2l9YCk7aWYocz4xNSlyZXR1cm4gb0ZlO2NvbnN0IHU9MTAqKnM7cmV0dXJuIGZ1bmN0aW9uKGQpe3RoaXMuXys9ZFswXTtmb3IobGV0IHA9MSx2PWQubGVuZ3RoO3A8djsrK3ApdGhpcy5fKz1NYXRoLnJvdW5kKGFyZ3VtZW50c1twXSp1KS91K2RbcF19fWxldCBESXQ9Y2xhc3N7Y29uc3RydWN0b3Iocyl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiIsdGhpcy5fYXBwZW5kPXM9PW51bGw/b0ZlOk1JdChzKX1tb3ZlVG8ocyx1KXt0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDA9dGhpcy5feDE9K3N9LCR7dGhpcy5feTA9dGhpcy5feTE9K3V9YH1jbG9zZVBhdGgoKXt0aGlzLl94MSE9PW51bGwmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl9hcHBlbmRgWmApfWxpbmVUbyhzLHUpe3RoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT0rc30sJHt0aGlzLl95MT0rdX1gfXF1YWRyYXRpY0N1cnZlVG8ocyx1LGQscCl7dGhpcy5fYXBwZW5kYFEkeytzfSwkeyt1fSwke3RoaXMuX3gxPStkfSwke3RoaXMuX3kxPStwfWB9YmV6aWVyQ3VydmVUbyhzLHUsZCxwLHYsYil7dGhpcy5fYXBwZW5kYEMkeytzfSwkeyt1fSwkeytkfSwkeytwfSwke3RoaXMuX3gxPSt2fSwke3RoaXMuX3kxPStifWB9YXJjVG8ocyx1LGQscCx2KXtpZihzPStzLHU9K3UsZD0rZCxwPStwLHY9K3YsdjwwKXRocm93IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke3Z9YCk7bGV0IGI9dGhpcy5feDEseT10aGlzLl95MSxUPWQtcyxfPXAtdSxBPWItcyxQPXktdSxSPUEqQStQKlA7aWYodGhpcy5feDE9PT1udWxsKXRoaXMuX2FwcGVuZGBNJHt0aGlzLl94MT1zfSwke3RoaXMuX3kxPXV9YDtlbHNlIGlmKFI+bUMpaWYoIShNYXRoLmFicyhQKlQtXypBKT5tQyl8fCF2KXRoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT1zfSwke3RoaXMuX3kxPXV9YDtlbHNle2xldCBGPWQtYixqPXAteSxLPVQqVCtfKl8sZWU9RipGK2oqaixpZT1NYXRoLnNxcnQoSyksb2U9TWF0aC5zcXJ0KFIpLHBlPXYqTWF0aC50YW4oKGpwZS1NYXRoLmFjb3MoKEsrUi1lZSkvKDIqaWUqb2UpKSkvMiksYmU9cGUvb2UsYWU9cGUvaWU7TWF0aC5hYnMoYmUtMSk+bUMmJnRoaXMuX2FwcGVuZGBMJHtzK2JlKkF9LCR7dStiZSpQfWAsdGhpcy5fYXBwZW5kYEEke3Z9LCR7dn0sMCwwLCR7KyhQKkY+QSpqKX0sJHt0aGlzLl94MT1zK2FlKlR9LCR7dGhpcy5feTE9dSthZSpffWB9fWFyYyhzLHUsZCxwLHYsYil7aWYocz0rcyx1PSt1LGQ9K2QsYj0hIWIsZDwwKXRocm93IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke2R9YCk7bGV0IHk9ZCpNYXRoLmNvcyhwKSxUPWQqTWF0aC5zaW4ocCksXz1zK3ksQT11K1QsUD0xXmIsUj1iP3Atdjp2LXA7dGhpcy5feDE9PT1udWxsP3RoaXMuX2FwcGVuZGBNJHtffSwke0F9YDooTWF0aC5hYnModGhpcy5feDEtXyk+bUN8fE1hdGguYWJzKHRoaXMuX3kxLUEpPm1DKSYmdGhpcy5fYXBwZW5kYEwke199LCR7QX1gLGQmJihSPDAmJihSPVIlJHBlKyRwZSksUj5MSXQ/dGhpcy5fYXBwZW5kYEEke2R9LCR7ZH0sMCwxLCR7UH0sJHtzLXl9LCR7dS1UfUEke2R9LCR7ZH0sMCwxLCR7UH0sJHt0aGlzLl94MT1ffSwke3RoaXMuX3kxPUF9YDpSPm1DJiZ0aGlzLl9hcHBlbmRgQSR7ZH0sJHtkfSwwLCR7KyhSPj1qcGUpfSwke1B9LCR7dGhpcy5feDE9cytkKk1hdGguY29zKHYpfSwke3RoaXMuX3kxPXUrZCpNYXRoLnNpbih2KX1gKX1yZWN0KHMsdSxkLHApe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rc30sJHt0aGlzLl95MD10aGlzLl95MT0rdX1oJHtkPStkfXYkeytwfWgkey1kfVpgfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX319O2Z1bmN0aW9uIElJdChpKXtpZighaS5vayl0aHJvdyBuZXcgRXJyb3IoaS5zdGF0dXMrIiAiK2kuc3RhdHVzVGV4dCk7cmV0dXJuIGkudGV4dCgpfWZ1bmN0aW9uIE9JdChpLHMpe3JldHVybiBmZXRjaChpLHMpLnRoZW4oSUl0KX1mdW5jdGlvbiBOSXQoaSl7cmV0dXJuKHMsdSk9Pk9JdChzLHUpLnRoZW4oZD0+bmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhkLGkpKX12YXIgUEl0PU5JdCgiaW1hZ2Uvc3ZnK3htbCIpO2Z1bmN0aW9uIEJJdChpKXtyZXR1cm4gTWF0aC5hYnMoaT1NYXRoLnJvdW5kKGkpKT49MWUyMT9pLnRvTG9jYWxlU3RyaW5nKCJlbiIpLnJlcGxhY2UoLywvZywiIik6aS50b1N0cmluZygxMCl9ZnVuY3Rpb24gZVgoaSxzKXtpZigodT0oaT1zP2kudG9FeHBvbmVudGlhbChzLTEpOmkudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIHUsZD1pLnNsaWNlKDAsdSk7cmV0dXJuW2QubGVuZ3RoPjE/ZFswXStkLnNsaWNlKDIpOmQsK2kuc2xpY2UodSsxKV19ZnVuY3Rpb24gckQoaSl7cmV0dXJuIGk9ZVgoTWF0aC5hYnMoaSkpLGk/aVsxXTpOYU59ZnVuY3Rpb24gRkl0KGkscyl7cmV0dXJuIGZ1bmN0aW9uKHUsZCl7Zm9yKHZhciBwPXUubGVuZ3RoLHY9W10sYj0wLHk9aVswXSxUPTA7cD4wJiZ5PjAmJihUK3krMT5kJiYoeT1NYXRoLm1heCgxLGQtVCkpLHYucHVzaCh1LnN1YnN0cmluZyhwLT15LHAreSkpLCEoKFQrPXkrMSk+ZCkpOyl5PWlbYj0oYisxKSVpLmxlbmd0aF07cmV0dXJuIHYucmV2ZXJzZSgpLmpvaW4ocyl9fWZ1bmN0aW9uIFJJdChpKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHMucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbih1KXtyZXR1cm4gaVsrdV19KX19dmFyIGpJdD0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiB0WChpKXtpZighKHM9akl0LmV4ZWMoaSkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIraSk7dmFyIHM7cmV0dXJuIG5ldyB6cGUoe2ZpbGw6c1sxXSxhbGlnbjpzWzJdLHNpZ246c1szXSxzeW1ib2w6c1s0XSx6ZXJvOnNbNV0sd2lkdGg6c1s2XSxjb21tYTpzWzddLHByZWNpc2lvbjpzWzhdJiZzWzhdLnNsaWNlKDEpLHRyaW06c1s5XSx0eXBlOnNbMTBdfSl9dFgucHJvdG90eXBlPXpwZS5wcm90b3R5cGU7ZnVuY3Rpb24genBlKGkpe3RoaXMuZmlsbD1pLmZpbGw9PT12b2lkIDA/IiAiOmkuZmlsbCsiIix0aGlzLmFsaWduPWkuYWxpZ249PT12b2lkIDA/Ij4iOmkuYWxpZ24rIiIsdGhpcy5zaWduPWkuc2lnbj09PXZvaWQgMD8iLSI6aS5zaWduKyIiLHRoaXMuc3ltYm9sPWkuc3ltYm9sPT09dm9pZCAwPyIiOmkuc3ltYm9sKyIiLHRoaXMuemVybz0hIWkuemVybyx0aGlzLndpZHRoPWkud2lkdGg9PT12b2lkIDA/dm9pZCAwOitpLndpZHRoLHRoaXMuY29tbWE9ISFpLmNvbW1hLHRoaXMucHJlY2lzaW9uPWkucHJlY2lzaW9uPT09dm9pZCAwP3ZvaWQgMDoraS5wcmVjaXNpb24sdGhpcy50cmltPSEhaS50cmltLHRoaXMudHlwZT1pLnR5cGU9PT12b2lkIDA/IiI6aS50eXBlKyIifXpwZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTtmdW5jdGlvbiAkSXQoaSl7ZTpmb3IodmFyIHM9aS5sZW5ndGgsdT0xLGQ9LTEscDt1PHM7Kyt1KXN3aXRjaChpW3VdKXtjYXNlIi4iOmQ9cD11O2JyZWFrO2Nhc2UiMCI6ZD09PTAmJihkPXUpLHA9dTticmVhaztkZWZhdWx0OmlmKCEraVt1XSlicmVhayBlO2Q+MCYmKGQ9MCk7YnJlYWt9cmV0dXJuIGQ+MD9pLnNsaWNlKDAsZCkraS5zbGljZShwKzEpOml9dmFyIGNGZTtmdW5jdGlvbiB6SXQoaSxzKXt2YXIgdT1lWChpLHMpO2lmKCF1KXJldHVybiBpKyIiO3ZhciBkPXVbMF0scD11WzFdLHY9cC0oY0ZlPU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihwLzMpKSkqMykrMSxiPWQubGVuZ3RoO3JldHVybiB2PT09Yj9kOnY+Yj9kK25ldyBBcnJheSh2LWIrMSkuam9pbigiMCIpOnY+MD9kLnNsaWNlKDAsdikrIi4iK2Quc2xpY2Uodik6IjAuIituZXcgQXJyYXkoMS12KS5qb2luKCIwIikrZVgoaSxNYXRoLm1heCgwLHMrdi0xKSlbMF19ZnVuY3Rpb24gdUZlKGkscyl7dmFyIHU9ZVgoaSxzKTtpZighdSlyZXR1cm4gaSsiIjt2YXIgZD11WzBdLHA9dVsxXTtyZXR1cm4gcDwwPyIwLiIrbmV3IEFycmF5KC1wKS5qb2luKCIwIikrZDpkLmxlbmd0aD5wKzE/ZC5zbGljZSgwLHArMSkrIi4iK2Quc2xpY2UocCsxKTpkK25ldyBBcnJheShwLWQubGVuZ3RoKzIpLmpvaW4oIjAiKX1jb25zdCBsRmU9eyIlIjooaSxzKT0+KGkqMTAwKS50b0ZpeGVkKHMpLGI6aT0+TWF0aC5yb3VuZChpKS50b1N0cmluZygyKSxjOmk9PmkrIiIsZDpCSXQsZTooaSxzKT0+aS50b0V4cG9uZW50aWFsKHMpLGY6KGkscyk9PmkudG9GaXhlZChzKSxnOihpLHMpPT5pLnRvUHJlY2lzaW9uKHMpLG86aT0+TWF0aC5yb3VuZChpKS50b1N0cmluZyg4KSxwOihpLHMpPT51RmUoaSoxMDAscykscjp1RmUsczp6SXQsWDppPT5NYXRoLnJvdW5kKGkpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLHg6aT0+TWF0aC5yb3VuZChpKS50b1N0cmluZygxNil9O2Z1bmN0aW9uIGhGZShpKXtyZXR1cm4gaX12YXIgZkZlPUFycmF5LnByb3RvdHlwZS5tYXAsZEZlPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiwrUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTtmdW5jdGlvbiBxSXQoaSl7dmFyIHM9aS5ncm91cGluZz09PXZvaWQgMHx8aS50aG91c2FuZHM9PT12b2lkIDA/aEZlOkZJdChmRmUuY2FsbChpLmdyb3VwaW5nLE51bWJlciksaS50aG91c2FuZHMrIiIpLHU9aS5jdXJyZW5jeT09PXZvaWQgMD8iIjppLmN1cnJlbmN5WzBdKyIiLGQ9aS5jdXJyZW5jeT09PXZvaWQgMD8iIjppLmN1cnJlbmN5WzFdKyIiLHA9aS5kZWNpbWFsPT09dm9pZCAwPyIuIjppLmRlY2ltYWwrIiIsdj1pLm51bWVyYWxzPT09dm9pZCAwP2hGZTpSSXQoZkZlLmNhbGwoaS5udW1lcmFscyxTdHJpbmcpKSxiPWkucGVyY2VudD09PXZvaWQgMD8iJSI6aS5wZXJjZW50KyIiLHk9aS5taW51cz09PXZvaWQgMD8i4oiSIjppLm1pbnVzKyIiLFQ9aS5uYW49PT12b2lkIDA/Ik5hTiI6aS5uYW4rIiI7ZnVuY3Rpb24gXyhQKXtQPXRYKFApO3ZhciBSPVAuZmlsbCxGPVAuYWxpZ24saj1QLnNpZ24sSz1QLnN5bWJvbCxlZT1QLnplcm8saWU9UC53aWR0aCxvZT1QLmNvbW1hLHBlPVAucHJlY2lzaW9uLGJlPVAudHJpbSxhZT1QLnR5cGU7YWU9PT0ibiI/KG9lPSEwLGFlPSJnIik6bEZlW2FlXXx8KHBlPT09dm9pZCAwJiYocGU9MTIpLGJlPSEwLGFlPSJnIiksKGVlfHxSPT09IjAiJiZGPT09Ij0iKSYmKGVlPSEwLFI9IjAiLEY9Ij0iKTt2YXIgbmU9Sz09PSIkIj91Oks9PT0iIyImJi9bYm94WF0vLnRlc3QoYWUpPyIwIithZS50b0xvd2VyQ2FzZSgpOiIiLHNlPUs9PT0iJCI/ZDovWyVwXS8udGVzdChhZSk/YjoiIixkZT1sRmVbYWVdLFg9L1tkZWZncHJzJV0vLnRlc3QoYWUpO3BlPXBlPT09dm9pZCAwPzY6L1tncHJzXS8udGVzdChhZSk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxwZSkpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAscGUpKTtmdW5jdGlvbiBnZShXKXt2YXIgeGU9bmUsVT1zZSxGZSxQZSxqZTtpZihhZT09PSJjIilVPWRlKFcpK1UsVz0iIjtlbHNle1c9K1c7dmFyIEllPVc8MHx8MS9XPDA7aWYoVz1pc05hTihXKT9UOmRlKE1hdGguYWJzKFcpLHBlKSxiZSYmKFc9JEl0KFcpKSxJZSYmK1c9PTAmJmohPT0iKyImJihJZT0hMSkseGU9KEllP2o9PT0iKCI/ajp5Omo9PT0iLSJ8fGo9PT0iKCI/IiI6aikreGUsVT0oYWU9PT0icyI/ZEZlWzgrY0ZlLzNdOiIiKStVKyhJZSYmaj09PSIoIj8iKSI6IiIpLFgpe2ZvcihGZT0tMSxQZT1XLmxlbmd0aDsrK0ZlPFBlOylpZihqZT1XLmNoYXJDb2RlQXQoRmUpLDQ4PmplfHxqZT41Nyl7VT0oamU9PT00Nj9wK1cuc2xpY2UoRmUrMSk6Vy5zbGljZShGZSkpK1UsVz1XLnNsaWNlKDAsRmUpO2JyZWFrfX19b2UmJiFlZSYmKFc9cyhXLDEvMCkpO3ZhciBTZT14ZS5sZW5ndGgrVy5sZW5ndGgrVS5sZW5ndGgsQ2U9U2U8aWU/bmV3IEFycmF5KGllLVNlKzEpLmpvaW4oUik6IiI7c3dpdGNoKG9lJiZlZSYmKFc9cyhDZStXLENlLmxlbmd0aD9pZS1VLmxlbmd0aDoxLzApLENlPSIiKSxGKXtjYXNlIjwiOlc9eGUrVytVK0NlO2JyZWFrO2Nhc2UiPSI6Vz14ZStDZStXK1U7YnJlYWs7Y2FzZSJeIjpXPUNlLnNsaWNlKDAsU2U9Q2UubGVuZ3RoPj4xKSt4ZStXK1UrQ2Uuc2xpY2UoU2UpO2JyZWFrO2RlZmF1bHQ6Vz1DZSt4ZStXK1U7YnJlYWt9cmV0dXJuIHYoVyl9cmV0dXJuIGdlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFArIiJ9LGdlfWZ1bmN0aW9uIEEoUCxSKXt2YXIgRj1fKChQPXRYKFApLFAudHlwZT0iZiIsUCkpLGo9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHJEKFIpLzMpKSkqMyxLPU1hdGgucG93KDEwLC1qKSxlZT1kRmVbOCtqLzNdO3JldHVybiBmdW5jdGlvbihpZSl7cmV0dXJuIEYoSyppZSkrZWV9fXJldHVybntmb3JtYXQ6Xyxmb3JtYXRQcmVmaXg6QX19dmFyIG5YLGdGZSxwRmU7SEl0KHt0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXX0pO2Z1bmN0aW9uIEhJdChpKXtyZXR1cm4gblg9cUl0KGkpLGdGZT1uWC5mb3JtYXQscEZlPW5YLmZvcm1hdFByZWZpeCxuWH1mdW5jdGlvbiBWSXQoaSl7cmV0dXJuIE1hdGgubWF4KDAsLXJEKE1hdGguYWJzKGkpKSl9ZnVuY3Rpb24gVUl0KGkscyl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHJEKHMpLzMpKSkqMy1yRChNYXRoLmFicyhpKSkpfWZ1bmN0aW9uIEdJdChpLHMpe3JldHVybiBpPU1hdGguYWJzKGkpLHM9TWF0aC5hYnMocyktaSxNYXRoLm1heCgwLHJEKHMpLXJEKGkpKSsxfWZ1bmN0aW9uIHJYKGkscyl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5yYW5nZShpKTticmVhaztkZWZhdWx0OnRoaXMucmFuZ2UocykuZG9tYWluKGkpO2JyZWFrfXJldHVybiB0aGlzfWNvbnN0IGJGZT1TeW1ib2woImltcGxpY2l0Iik7ZnVuY3Rpb24gX0YoKXt2YXIgaT1uZXcgY0JlLHM9W10sdT1bXSxkPWJGZTtmdW5jdGlvbiBwKHYpe2xldCBiPWkuZ2V0KHYpO2lmKGI9PT12b2lkIDApe2lmKGQhPT1iRmUpcmV0dXJuIGQ7aS5zZXQodixiPXMucHVzaCh2KS0xKX1yZXR1cm4gdVtiJXUubGVuZ3RoXX1yZXR1cm4gcC5kb21haW49ZnVuY3Rpb24odil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHMuc2xpY2UoKTtzPVtdLGk9bmV3IGNCZTtmb3IoY29uc3QgYiBvZiB2KWkuaGFzKGIpfHxpLnNldChiLHMucHVzaChiKS0xKTtyZXR1cm4gcH0scC5yYW5nZT1mdW5jdGlvbih2KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1BcnJheS5mcm9tKHYpLHApOnUuc2xpY2UoKX0scC51bmtub3duPWZ1bmN0aW9uKHYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXYscCk6ZH0scC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIF9GKHMsdSkudW5rbm93bihkKX0sclguYXBwbHkocCxhcmd1bWVudHMpLHB9ZnVuY3Rpb24gcXBlKCl7dmFyIGk9X0YoKS51bmtub3duKHZvaWQgMCkscz1pLmRvbWFpbix1PWkucmFuZ2UsZD0wLHA9MSx2LGIseT0hMSxUPTAsXz0wLEE9LjU7ZGVsZXRlIGkudW5rbm93bjtmdW5jdGlvbiBQKCl7dmFyIFI9cygpLmxlbmd0aCxGPXA8ZCxqPUY/cDpkLEs9Rj9kOnA7dj0oSy1qKS9NYXRoLm1heCgxLFItVCtfKjIpLHkmJih2PU1hdGguZmxvb3IodikpLGorPShLLWotdiooUi1UKSkqQSxiPXYqKDEtVCkseSYmKGo9TWF0aC5yb3VuZChqKSxiPU1hdGgucm91bmQoYikpO3ZhciBlZT1ZQXQoUikubWFwKGZ1bmN0aW9uKGllKXtyZXR1cm4gait2KmllfSk7cmV0dXJuIHUoRj9lZS5yZXZlcnNlKCk6ZWUpfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocyhSKSxQKCkpOnMoKX0saS5yYW5nZT1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oW2QscF09UixkPStkLHA9K3AsUCgpKTpbZCxwXX0saS5yYW5nZVJvdW5kPWZ1bmN0aW9uKFIpe3JldHVybltkLHBdPVIsZD0rZCxwPStwLHk9ITAsUCgpfSxpLmJhbmR3aWR0aD1mdW5jdGlvbigpe3JldHVybiBifSxpLnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gdn0saS5yb3VuZD1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0hIVIsUCgpKTp5fSxpLnBhZGRpbmc9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9TWF0aC5taW4oMSxfPStSKSxQKCkpOlR9LGkucGFkZGluZ0lubmVyPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPU1hdGgubWluKDEsUiksUCgpKTpUfSxpLnBhZGRpbmdPdXRlcj1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rUixQKCkpOl99LGkuYWxpZ249ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9TWF0aC5tYXgoMCxNYXRoLm1pbigxLFIpKSxQKCkpOkF9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBxcGUocygpLFtkLHBdKS5yb3VuZCh5KS5wYWRkaW5nSW5uZXIoVCkucGFkZGluZ091dGVyKF8pLmFsaWduKEEpfSxyWC5hcHBseShQKCksYXJndW1lbnRzKX1mdW5jdGlvbiBLSXQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGl9fWZ1bmN0aW9uIFdJdChpKXtyZXR1cm4raX12YXIgbUZlPVswLDFdO2Z1bmN0aW9uIGlEKGkpe3JldHVybiBpfWZ1bmN0aW9uIEhwZShpLHMpe3JldHVybihzLT1pPStpKT9mdW5jdGlvbih1KXtyZXR1cm4odS1pKS9zfTpLSXQoaXNOYU4ocyk/TmFOOi41KX1mdW5jdGlvbiBZSXQoaSxzKXt2YXIgdTtyZXR1cm4gaT5zJiYodT1pLGk9cyxzPXUpLGZ1bmN0aW9uKGQpe3JldHVybiBNYXRoLm1heChpLE1hdGgubWluKHMsZCkpfX1mdW5jdGlvbiBYSXQoaSxzLHUpe3ZhciBkPWlbMF0scD1pWzFdLHY9c1swXSxiPXNbMV07cmV0dXJuIHA8ZD8oZD1IcGUocCxkKSx2PXUoYix2KSk6KGQ9SHBlKGQscCksdj11KHYsYikpLGZ1bmN0aW9uKHkpe3JldHVybiB2KGQoeSkpfX1mdW5jdGlvbiBRSXQoaSxzLHUpe3ZhciBkPU1hdGgubWluKGkubGVuZ3RoLHMubGVuZ3RoKS0xLHA9bmV3IEFycmF5KGQpLHY9bmV3IEFycmF5KGQpLGI9LTE7Zm9yKGlbZF08aVswXSYmKGk9aS5zbGljZSgpLnJldmVyc2UoKSxzPXMuc2xpY2UoKS5yZXZlcnNlKCkpOysrYjxkOylwW2JdPUhwZShpW2JdLGlbYisxXSksdltiXT11KHNbYl0sc1tiKzFdKTtyZXR1cm4gZnVuY3Rpb24oeSl7dmFyIFQ9akF0KGkseSwxLGQpLTE7cmV0dXJuIHZbVF0ocFtUXSh5KSl9fWZ1bmN0aW9uIHZGZShpLHMpe3JldHVybiBzLmRvbWFpbihpLmRvbWFpbigpKS5yYW5nZShpLnJhbmdlKCkpLmludGVycG9sYXRlKGkuaW50ZXJwb2xhdGUoKSkuY2xhbXAoaS5jbGFtcCgpKS51bmtub3duKGkudW5rbm93bigpKX1mdW5jdGlvbiBKSXQoKXt2YXIgaT1tRmUscz1tRmUsdT1EcGUsZCxwLHYsYj1pRCx5LFQsXztmdW5jdGlvbiBBKCl7dmFyIFI9TWF0aC5taW4oaS5sZW5ndGgscy5sZW5ndGgpO3JldHVybiBiIT09aUQmJihiPVlJdChpWzBdLGlbUi0xXSkpLHk9Uj4yP1FJdDpYSXQsVD1fPW51bGwsUH1mdW5jdGlvbiBQKFIpe3JldHVybiBSPT1udWxsfHxpc05hTihSPStSKT92OihUfHwoVD15KGkubWFwKGQpLHMsdSkpKShkKGIoUikpKX1yZXR1cm4gUC5pbnZlcnQ9ZnVuY3Rpb24oUil7cmV0dXJuIGIocCgoX3x8KF89eShzLGkubWFwKGQpLEwzKSkpKFIpKSl9LFAuZG9tYWluPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPUFycmF5LmZyb20oUixXSXQpLEEoKSk6aS5zbGljZSgpfSxQLnJhbmdlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPUFycmF5LmZyb20oUiksQSgpKTpzLnNsaWNlKCl9LFAucmFuZ2VSb3VuZD1mdW5jdGlvbihSKXtyZXR1cm4gcz1BcnJheS5mcm9tKFIpLHU9bER0LEEoKX0sUC5jbGFtcD1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj1SPyEwOmlELEEoKSk6YiE9PWlEfSxQLmludGVycG9sYXRlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PVIsQSgpKTp1fSxQLnVua25vd249ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9UixQKTp2fSxmdW5jdGlvbihSLEYpe3JldHVybiBkPVIscD1GLEEoKX19ZnVuY3Rpb24gd0ZlKCl7cmV0dXJuIEpJdCgpKGlELGlEKX1mdW5jdGlvbiBaSXQoaSxzLHUsZCl7dmFyIHA9cHBlKGkscyx1KSx2O3N3aXRjaChkPXRYKGQ/PyIsZiIpLGQudHlwZSl7Y2FzZSJzIjp7dmFyIGI9TWF0aC5tYXgoTWF0aC5hYnMoaSksTWF0aC5hYnMocykpO3JldHVybiBkLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKHY9VUl0KHAsYikpJiYoZC5wcmVjaXNpb249dikscEZlKGQsYil9Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6e2QucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4odj1HSXQocCxNYXRoLm1heChNYXRoLmFicyhpKSxNYXRoLmFicyhzKSkpKSYmKGQucHJlY2lzaW9uPXYtKGQudHlwZT09PSJlIikpO2JyZWFrfWNhc2UiZiI6Y2FzZSIlIjp7ZC5wcmVjaXNpb249PW51bGwmJiFpc05hTih2PVZJdChwKSkmJihkLnByZWNpc2lvbj12LShkLnR5cGU9PT0iJSIpKjIpO2JyZWFrfX1yZXR1cm4gZ0ZlKGQpfWZ1bmN0aW9uIGVPdChpKXt2YXIgcz1pLmRvbWFpbjtyZXR1cm4gaS50aWNrcz1mdW5jdGlvbih1KXt2YXIgZD1zKCk7cmV0dXJuIEdBdChkWzBdLGRbZC5sZW5ndGgtMV0sdT8/MTApfSxpLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odSxkKXt2YXIgcD1zKCk7cmV0dXJuIFpJdChwWzBdLHBbcC5sZW5ndGgtMV0sdT8/MTAsZCl9LGkubmljZT1mdW5jdGlvbih1KXt1PT1udWxsJiYodT0xMCk7dmFyIGQ9cygpLHA9MCx2PWQubGVuZ3RoLTEsYj1kW3BdLHk9ZFt2XSxULF8sQT0xMDtmb3IoeTxiJiYoXz1iLGI9eSx5PV8sXz1wLHA9dix2PV8pO0EtLSA+MDspe2lmKF89Z3BlKGIseSx1KSxfPT09VClyZXR1cm4gZFtwXT1iLGRbdl09eSxzKGQpO2lmKF8+MCliPU1hdGguZmxvb3IoYi9fKSpfLHk9TWF0aC5jZWlsKHkvXykqXztlbHNlIGlmKF88MCliPU1hdGguY2VpbChiKl8pL18seT1NYXRoLmZsb29yKHkqXykvXztlbHNlIGJyZWFrO1Q9X31yZXR1cm4gaX0saX1mdW5jdGlvbiBzRCgpe3ZhciBpPXdGZSgpO3JldHVybiBpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdkZlKGksc0QoKSl9LHJYLmFwcGx5KGksYXJndW1lbnRzKSxlT3QoaSl9ZnVuY3Rpb24gdE90KGkscyl7aT1pLnNsaWNlKCk7dmFyIHU9MCxkPWkubGVuZ3RoLTEscD1pW3VdLHY9aVtkXSxiO3JldHVybiB2PHAmJihiPXUsdT1kLGQ9YixiPXAscD12LHY9YiksaVt1XT1zLmZsb29yKHApLGlbZF09cy5jZWlsKHYpLGl9Y29uc3QgVnBlPW5ldyBEYXRlLFVwZT1uZXcgRGF0ZTtmdW5jdGlvbiBoMShpLHMsdSxkKXtmdW5jdGlvbiBwKHYpe3JldHVybiBpKHY9YXJndW1lbnRzLmxlbmd0aD09PTA/bmV3IERhdGU6bmV3IERhdGUoK3YpKSx2fXJldHVybiBwLmZsb29yPXY9PihpKHY9bmV3IERhdGUoK3YpKSx2KSxwLmNlaWw9dj0+KGkodj1uZXcgRGF0ZSh2LTEpKSxzKHYsMSksaSh2KSx2KSxwLnJvdW5kPXY9Pntjb25zdCBiPXAodikseT1wLmNlaWwodik7cmV0dXJuIHYtYjx5LXY/Yjp5fSxwLm9mZnNldD0odixiKT0+KHModj1uZXcgRGF0ZSgrdiksYj09bnVsbD8xOk1hdGguZmxvb3IoYikpLHYpLHAucmFuZ2U9KHYsYix5KT0+e2NvbnN0IFQ9W107aWYodj1wLmNlaWwodikseT15PT1udWxsPzE6TWF0aC5mbG9vcih5KSwhKHY8Yil8fCEoeT4wKSlyZXR1cm4gVDtsZXQgXztkbyBULnB1c2goXz1uZXcgRGF0ZSgrdikpLHModix5KSxpKHYpO3doaWxlKF88diYmdjxiKTtyZXR1cm4gVH0scC5maWx0ZXI9dj0+aDEoYj0+e2lmKGI+PWIpZm9yKDtpKGIpLCF2KGIpOyliLnNldFRpbWUoYi0xKX0sKGIseSk9PntpZihiPj1iKWlmKHk8MClmb3IoOysreTw9MDspZm9yKDtzKGIsLTEpLCF2KGIpOyk7ZWxzZSBmb3IoOy0teT49MDspZm9yKDtzKGIsMSksIXYoYik7KTt9KSx1JiYocC5jb3VudD0odixiKT0+KFZwZS5zZXRUaW1lKCt2KSxVcGUuc2V0VGltZSgrYiksaShWcGUpLGkoVXBlKSxNYXRoLmZsb29yKHUoVnBlLFVwZSkpKSxwLmV2ZXJ5PXY9Pih2PU1hdGguZmxvb3IodiksIWlzRmluaXRlKHYpfHwhKHY+MCk/bnVsbDp2PjE/cC5maWx0ZXIoZD9iPT5kKGIpJXY9PT0wOmI9PnAuY291bnQoMCxiKSV2PT09MCk6cCkpLHB9Y29uc3QgYUQ9aDEoKCk9Pnt9LChpLHMpPT57aS5zZXRUaW1lKCtpK3MpfSwoaSxzKT0+cy1pKTthRC5ldmVyeT1pPT4oaT1NYXRoLmZsb29yKGkpLCFpc0Zpbml0ZShpKXx8IShpPjApP251bGw6aT4xP2gxKHM9PntzLnNldFRpbWUoTWF0aC5mbG9vcihzL2kpKmkpfSwocyx1KT0+e3Muc2V0VGltZSgrcyt1KmkpfSwocyx1KT0+KHUtcykvaSk6YUQpLGFELnJhbmdlO2NvbnN0IHY3PTFlMyxNdj12Nyo2MCx3Nz1Ndio2MCx5Nz13NyoyNCxHcGU9eTcqNyx5RmU9eTcqMzAsS3BlPXk3KjM2NSxiOT1oMShpPT57aS5zZXRUaW1lKGktaS5nZXRNaWxsaXNlY29uZHMoKSl9LChpLHMpPT57aS5zZXRUaW1lKCtpK3MqdjcpfSwoaSxzKT0+KHMtaSkvdjcsaT0+aS5nZXRVVENTZWNvbmRzKCkpO2I5LnJhbmdlO2NvbnN0IEFGPWgxKGk9PntpLnNldFRpbWUoaS1pLmdldE1pbGxpc2Vjb25kcygpLWkuZ2V0U2Vjb25kcygpKnY3KX0sKGkscyk9PntpLnNldFRpbWUoK2krcypNdil9LChpLHMpPT4ocy1pKS9NdixpPT5pLmdldE1pbnV0ZXMoKSk7QUYucmFuZ2UsaDEoaT0+e2kuc2V0VVRDU2Vjb25kcygwLDApfSwoaSxzKT0+e2kuc2V0VGltZSgraStzKk12KX0sKGkscyk9PihzLWkpL012LGk9PmkuZ2V0VVRDTWludXRlcygpKS5yYW5nZTtjb25zdCBMRj1oMShpPT57aS5zZXRUaW1lKGktaS5nZXRNaWxsaXNlY29uZHMoKS1pLmdldFNlY29uZHMoKSp2Ny1pLmdldE1pbnV0ZXMoKSpNdil9LChpLHMpPT57aS5zZXRUaW1lKCtpK3MqdzcpfSwoaSxzKT0+KHMtaSkvdzcsaT0+aS5nZXRIb3VycygpKTtMRi5yYW5nZSxoMShpPT57aS5zZXRVVENNaW51dGVzKDAsMCwwKX0sKGkscyk9PntpLnNldFRpbWUoK2krcyp3Nyl9LChpLHMpPT4ocy1pKS93NyxpPT5pLmdldFVUQ0hvdXJzKCkpLnJhbmdlO2NvbnN0IHZDPWgxKGk9Pmkuc2V0SG91cnMoMCwwLDAsMCksKGkscyk9Pmkuc2V0RGF0ZShpLmdldERhdGUoKStzKSwoaSxzKT0+KHMtaS0ocy5nZXRUaW1lem9uZU9mZnNldCgpLWkuZ2V0VGltZXpvbmVPZmZzZXQoKSkqTXYpL3k3LGk9PmkuZ2V0RGF0ZSgpLTEpO3ZDLnJhbmdlO2NvbnN0IFdwZT1oMShpPT57aS5zZXRVVENIb3VycygwLDAsMCwwKX0sKGkscyk9PntpLnNldFVUQ0RhdGUoaS5nZXRVVENEYXRlKCkrcyl9LChpLHMpPT4ocy1pKS95NyxpPT5pLmdldFVUQ0RhdGUoKS0xKTtXcGUucmFuZ2UsaDEoaT0+e2kuc2V0VVRDSG91cnMoMCwwLDAsMCl9LChpLHMpPT57aS5zZXRVVENEYXRlKGkuZ2V0VVRDRGF0ZSgpK3MpfSwoaSxzKT0+KHMtaSkveTcsaT0+TWF0aC5mbG9vcihpL3k3KSkucmFuZ2U7ZnVuY3Rpb24gd0MoaSl7cmV0dXJuIGgxKHM9PntzLnNldERhdGUocy5nZXREYXRlKCktKHMuZ2V0RGF5KCkrNy1pKSU3KSxzLnNldEhvdXJzKDAsMCwwLDApfSwocyx1KT0+e3Muc2V0RGF0ZShzLmdldERhdGUoKSt1KjcpfSwocyx1KT0+KHUtcy0odS5nZXRUaW1lem9uZU9mZnNldCgpLXMuZ2V0VGltZXpvbmVPZmZzZXQoKSkqTXYpL0dwZSl9Y29uc3QgTUY9d0MoMCksREY9d0MoMSkseEZlPXdDKDIpLGtGZT13QygzKSx5Qz13Qyg0KSxFRmU9d0MoNSksVEZlPXdDKDYpO01GLnJhbmdlLERGLnJhbmdlLHhGZS5yYW5nZSxrRmUucmFuZ2UseUMucmFuZ2UsRUZlLnJhbmdlLFRGZS5yYW5nZTtmdW5jdGlvbiB4QyhpKXtyZXR1cm4gaDEocz0+e3Muc2V0VVRDRGF0ZShzLmdldFVUQ0RhdGUoKS0ocy5nZXRVVENEYXkoKSs3LWkpJTcpLHMuc2V0VVRDSG91cnMoMCwwLDAsMCl9LChzLHUpPT57cy5zZXRVVENEYXRlKHMuZ2V0VVRDRGF0ZSgpK3UqNyl9LChzLHUpPT4odS1zKS9HcGUpfWNvbnN0IENGZT14QygwKSxpWD14QygxKSxuT3Q9eEMoMiksck90PXhDKDMpLG9EPXhDKDQpLGlPdD14Qyg1KSxzT3Q9eEMoNik7Q0ZlLnJhbmdlLGlYLnJhbmdlLG5PdC5yYW5nZSxyT3QucmFuZ2Usb0QucmFuZ2UsaU90LnJhbmdlLHNPdC5yYW5nZTtjb25zdCBJRj1oMShpPT57aS5zZXREYXRlKDEpLGkuc2V0SG91cnMoMCwwLDAsMCl9LChpLHMpPT57aS5zZXRNb250aChpLmdldE1vbnRoKCkrcyl9LChpLHMpPT5zLmdldE1vbnRoKCktaS5nZXRNb250aCgpKyhzLmdldEZ1bGxZZWFyKCktaS5nZXRGdWxsWWVhcigpKSoxMixpPT5pLmdldE1vbnRoKCkpO0lGLnJhbmdlLGgxKGk9PntpLnNldFVUQ0RhdGUoMSksaS5zZXRVVENIb3VycygwLDAsMCwwKX0sKGkscyk9PntpLnNldFVUQ01vbnRoKGkuZ2V0VVRDTW9udGgoKStzKX0sKGkscyk9PnMuZ2V0VVRDTW9udGgoKS1pLmdldFVUQ01vbnRoKCkrKHMuZ2V0VVRDRnVsbFllYXIoKS1pLmdldFVUQ0Z1bGxZZWFyKCkpKjEyLGk9PmkuZ2V0VVRDTW9udGgoKSkucmFuZ2U7Y29uc3QgeDc9aDEoaT0+e2kuc2V0TW9udGgoMCwxKSxpLnNldEhvdXJzKDAsMCwwLDApfSwoaSxzKT0+e2kuc2V0RnVsbFllYXIoaS5nZXRGdWxsWWVhcigpK3MpfSwoaSxzKT0+cy5nZXRGdWxsWWVhcigpLWkuZ2V0RnVsbFllYXIoKSxpPT5pLmdldEZ1bGxZZWFyKCkpO3g3LmV2ZXJ5PWk9PiFpc0Zpbml0ZShpPU1hdGguZmxvb3IoaSkpfHwhKGk+MCk/bnVsbDpoMShzPT57cy5zZXRGdWxsWWVhcihNYXRoLmZsb29yKHMuZ2V0RnVsbFllYXIoKS9pKSppKSxzLnNldE1vbnRoKDAsMSkscy5zZXRIb3VycygwLDAsMCwwKX0sKHMsdSk9PntzLnNldEZ1bGxZZWFyKHMuZ2V0RnVsbFllYXIoKSt1KmkpfSkseDcucmFuZ2U7Y29uc3Qga0M9aDEoaT0+e2kuc2V0VVRDTW9udGgoMCwxKSxpLnNldFVUQ0hvdXJzKDAsMCwwLDApfSwoaSxzKT0+e2kuc2V0VVRDRnVsbFllYXIoaS5nZXRVVENGdWxsWWVhcigpK3MpfSwoaSxzKT0+cy5nZXRVVENGdWxsWWVhcigpLWkuZ2V0VVRDRnVsbFllYXIoKSxpPT5pLmdldFVUQ0Z1bGxZZWFyKCkpO2tDLmV2ZXJ5PWk9PiFpc0Zpbml0ZShpPU1hdGguZmxvb3IoaSkpfHwhKGk+MCk/bnVsbDpoMShzPT57cy5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHMuZ2V0VVRDRnVsbFllYXIoKS9pKSppKSxzLnNldFVUQ01vbnRoKDAsMSkscy5zZXRVVENIb3VycygwLDAsMCwwKX0sKHMsdSk9PntzLnNldFVUQ0Z1bGxZZWFyKHMuZ2V0VVRDRnVsbFllYXIoKSt1KmkpfSksa0MucmFuZ2U7ZnVuY3Rpb24gYU90KGkscyx1LGQscCx2KXtjb25zdCBiPVtbYjksMSx2N10sW2I5LDUsNSp2N10sW2I5LDE1LDE1KnY3XSxbYjksMzAsMzAqdjddLFt2LDEsTXZdLFt2LDUsNSpNdl0sW3YsMTUsMTUqTXZdLFt2LDMwLDMwKk12XSxbcCwxLHc3XSxbcCwzLDMqdzddLFtwLDYsNip3N10sW3AsMTIsMTIqdzddLFtkLDEseTddLFtkLDIsMip5N10sW3UsMSxHcGVdLFtzLDEseUZlXSxbcywzLDMqeUZlXSxbaSwxLEtwZV1dO2Z1bmN0aW9uIHkoXyxBLFApe2NvbnN0IFI9QTxfO1ImJihbXyxBXT1bQSxfXSk7Y29uc3QgRj1QJiZ0eXBlb2YgUC5yYW5nZT09ImZ1bmN0aW9uIj9QOlQoXyxBLFApLGo9Rj9GLnJhbmdlKF8sK0ErMSk6W107cmV0dXJuIFI/ai5yZXZlcnNlKCk6an1mdW5jdGlvbiBUKF8sQSxQKXtjb25zdCBSPU1hdGguYWJzKEEtXykvUCxGPWRwZSgoWywsZWVdKT0+ZWUpLnJpZ2h0KGIsUik7aWYoRj09PWIubGVuZ3RoKXJldHVybiBpLmV2ZXJ5KHBwZShfL0twZSxBL0twZSxQKSk7aWYoRj09PTApcmV0dXJuIGFELmV2ZXJ5KE1hdGgubWF4KHBwZShfLEEsUCksMSkpO2NvbnN0W2osS109YltSL2JbRi0xXVsyXTxiW0ZdWzJdL1I/Ri0xOkZdO3JldHVybiBqLmV2ZXJ5KEspfXJldHVyblt5LFRdfWNvbnN0W29PdCxjT3RdPWFPdCh4NyxJRixNRix2QyxMRixBRik7ZnVuY3Rpb24gWXBlKGkpe2lmKDA8PWkueSYmaS55PDEwMCl7dmFyIHM9bmV3IERhdGUoLTEsaS5tLGkuZCxpLkgsaS5NLGkuUyxpLkwpO3JldHVybiBzLnNldEZ1bGxZZWFyKGkueSksc31yZXR1cm4gbmV3IERhdGUoaS55LGkubSxpLmQsaS5ILGkuTSxpLlMsaS5MKX1mdW5jdGlvbiBYcGUoaSl7aWYoMDw9aS55JiZpLnk8MTAwKXt2YXIgcz1uZXcgRGF0ZShEYXRlLlVUQygtMSxpLm0saS5kLGkuSCxpLk0saS5TLGkuTCkpO3JldHVybiBzLnNldFVUQ0Z1bGxZZWFyKGkueSksc31yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoaS55LGkubSxpLmQsaS5ILGkuTSxpLlMsaS5MKSl9ZnVuY3Rpb24gT0YoaSxzLHUpe3JldHVybnt5OmksbTpzLGQ6dSxIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIHVPdChpKXt2YXIgcz1pLmRhdGVUaW1lLHU9aS5kYXRlLGQ9aS50aW1lLHA9aS5wZXJpb2RzLHY9aS5kYXlzLGI9aS5zaG9ydERheXMseT1pLm1vbnRocyxUPWkuc2hvcnRNb250aHMsXz1ORihwKSxBPVBGKHApLFA9TkYodiksUj1QRih2KSxGPU5GKGIpLGo9UEYoYiksSz1ORih5KSxlZT1QRih5KSxpZT1ORihUKSxvZT1QRihUKSxwZT17YTpJZSxBOlNlLGI6Q2UsQjprZSxjOm51bGwsZDpERmUsZTpERmUsZjpJT3QsZzpxT3QsRzpWT3QsSDpMT3QsSTpNT3QsajpET3QsTDpJRmUsbTpPT3QsTTpOT3QscDpLZSxxOkZ0LFE6UkZlLHM6akZlLFM6UE90LHU6Qk90LFU6Rk90LFY6Uk90LHc6ak90LFc6JE90LHg6bnVsbCxYOm51bGwseTp6T3QsWTpIT3QsWjpVT3QsIiUiOkZGZX0sYmU9e2E6TmUsQTpnbixiOl90LEI6RXQsYzpudWxsLGQ6TkZlLGU6TkZlLGY6WU90LGc6c050LEc6b050LEg6R090LEk6S090LGo6V090LEw6UEZlLG06WE90LE06UU90LHA6R3QscTpsbixROlJGZSxzOmpGZSxTOkpPdCx1OlpPdCxVOmVOdCxWOnROdCx3Om5OdCxXOnJOdCx4Om51bGwsWDpudWxsLHk6aU50LFk6YU50LFo6Y050LCIlIjpGRmV9LGFlPXthOmdlLEE6VyxiOnhlLEI6VSxjOkZlLGQ6TEZlLGU6TEZlLGY6Q090LGc6QUZlLEc6X0ZlLEg6TUZlLEk6TUZlLGo6eE90LEw6VE90LG06eU90LE06a090LHA6WCxxOndPdCxROl9PdCxzOkFPdCxTOkVPdCx1OmdPdCxVOnBPdCxWOmJPdCx3OmRPdCxXOm1PdCx4OlBlLFg6amUseTpBRmUsWTpfRmUsWjp2T3QsIiUiOlNPdH07cGUueD1uZSh1LHBlKSxwZS5YPW5lKGQscGUpLHBlLmM9bmUocyxwZSksYmUueD1uZSh1LGJlKSxiZS5YPW5lKGQsYmUpLGJlLmM9bmUocyxiZSk7ZnVuY3Rpb24gbmUoeHQsUHQpe3JldHVybiBmdW5jdGlvbihRZSl7dmFyIER0PVtdLGt0PS0xLE9uPTAsaHQ9eHQubGVuZ3RoLHpyLHl0LGppO2ZvcihRZSBpbnN0YW5jZW9mIERhdGV8fChRZT1uZXcgRGF0ZSgrUWUpKTsrK2t0PGh0Oyl4dC5jaGFyQ29kZUF0KGt0KT09PTM3JiYoRHQucHVzaCh4dC5zbGljZShPbixrdCkpLCh5dD1TRmVbenI9eHQuY2hhckF0KCsra3QpXSkhPW51bGw/enI9eHQuY2hhckF0KCsra3QpOnl0PXpyPT09ImUiPyIgIjoiMCIsKGppPVB0W3pyXSkmJih6cj1qaShRZSx5dCkpLER0LnB1c2goenIpLE9uPWt0KzEpO3JldHVybiBEdC5wdXNoKHh0LnNsaWNlKE9uLGt0KSksRHQuam9pbigiIil9fWZ1bmN0aW9uIHNlKHh0LFB0KXtyZXR1cm4gZnVuY3Rpb24oUWUpe3ZhciBEdD1PRigxOTAwLHZvaWQgMCwxKSxrdD1kZShEdCx4dCxRZSs9IiIsMCksT24saHQ7aWYoa3QhPVFlLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBEdClyZXR1cm4gbmV3IERhdGUoRHQuUSk7aWYoInMiaW4gRHQpcmV0dXJuIG5ldyBEYXRlKER0LnMqMWUzKygiTCJpbiBEdD9EdC5MOjApKTtpZihQdCYmISgiWiJpbiBEdCkmJihEdC5aPTApLCJwImluIER0JiYoRHQuSD1EdC5IJTEyK0R0LnAqMTIpLER0Lm09PT12b2lkIDAmJihEdC5tPSJxImluIER0P0R0LnE6MCksIlYiaW4gRHQpe2lmKER0LlY8MXx8RHQuVj41MylyZXR1cm4gbnVsbDsidyJpbiBEdHx8KER0Lnc9MSksIloiaW4gRHQ/KE9uPVhwZShPRihEdC55LDAsMSkpLGh0PU9uLmdldFVUQ0RheSgpLE9uPWh0PjR8fGh0PT09MD9pWC5jZWlsKE9uKTppWChPbiksT249V3BlLm9mZnNldChPbiwoRHQuVi0xKSo3KSxEdC55PU9uLmdldFVUQ0Z1bGxZZWFyKCksRHQubT1Pbi5nZXRVVENNb250aCgpLER0LmQ9T24uZ2V0VVRDRGF0ZSgpKyhEdC53KzYpJTcpOihPbj1ZcGUoT0YoRHQueSwwLDEpKSxodD1Pbi5nZXREYXkoKSxPbj1odD40fHxodD09PTA/REYuY2VpbChPbik6REYoT24pLE9uPXZDLm9mZnNldChPbiwoRHQuVi0xKSo3KSxEdC55PU9uLmdldEZ1bGxZZWFyKCksRHQubT1Pbi5nZXRNb250aCgpLER0LmQ9T24uZ2V0RGF0ZSgpKyhEdC53KzYpJTcpfWVsc2UoIlciaW4gRHR8fCJVImluIER0KSYmKCJ3ImluIER0fHwoRHQudz0idSJpbiBEdD9EdC51JTc6IlciaW4gRHQ/MTowKSxodD0iWiJpbiBEdD9YcGUoT0YoRHQueSwwLDEpKS5nZXRVVENEYXkoKTpZcGUoT0YoRHQueSwwLDEpKS5nZXREYXkoKSxEdC5tPTAsRHQuZD0iVyJpbiBEdD8oRHQudys2KSU3K0R0LlcqNy0oaHQrNSklNzpEdC53K0R0LlUqNy0oaHQrNiklNyk7cmV0dXJuIloiaW4gRHQ/KER0LkgrPUR0LlovMTAwfDAsRHQuTSs9RHQuWiUxMDAsWHBlKER0KSk6WXBlKER0KX19ZnVuY3Rpb24gZGUoeHQsUHQsUWUsRHQpe2Zvcih2YXIga3Q9MCxPbj1QdC5sZW5ndGgsaHQ9UWUubGVuZ3RoLHpyLHl0O2t0PE9uOyl7aWYoRHQ+PWh0KXJldHVybi0xO2lmKHpyPVB0LmNoYXJDb2RlQXQoa3QrKyksenI9PT0zNyl7aWYoenI9UHQuY2hhckF0KGt0KyspLHl0PWFlW3pyIGluIFNGZT9QdC5jaGFyQXQoa3QrKyk6enJdLCF5dHx8KER0PXl0KHh0LFFlLER0KSk8MClyZXR1cm4tMX1lbHNlIGlmKHpyIT1RZS5jaGFyQ29kZUF0KER0KyspKXJldHVybi0xfXJldHVybiBEdH1mdW5jdGlvbiBYKHh0LFB0LFFlKXt2YXIgRHQ9Xy5leGVjKFB0LnNsaWNlKFFlKSk7cmV0dXJuIER0Pyh4dC5wPUEuZ2V0KER0WzBdLnRvTG93ZXJDYXNlKCkpLFFlK0R0WzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZ2UoeHQsUHQsUWUpe3ZhciBEdD1GLmV4ZWMoUHQuc2xpY2UoUWUpKTtyZXR1cm4gRHQ/KHh0Lnc9ai5nZXQoRHRbMF0udG9Mb3dlckNhc2UoKSksUWUrRHRbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXKHh0LFB0LFFlKXt2YXIgRHQ9UC5leGVjKFB0LnNsaWNlKFFlKSk7cmV0dXJuIER0Pyh4dC53PVIuZ2V0KER0WzBdLnRvTG93ZXJDYXNlKCkpLFFlK0R0WzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geGUoeHQsUHQsUWUpe3ZhciBEdD1pZS5leGVjKFB0LnNsaWNlKFFlKSk7cmV0dXJuIER0Pyh4dC5tPW9lLmdldChEdFswXS50b0xvd2VyQ2FzZSgpKSxRZStEdFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFUoeHQsUHQsUWUpe3ZhciBEdD1LLmV4ZWMoUHQuc2xpY2UoUWUpKTtyZXR1cm4gRHQ/KHh0Lm09ZWUuZ2V0KER0WzBdLnRvTG93ZXJDYXNlKCkpLFFlK0R0WzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRmUoeHQsUHQsUWUpe3JldHVybiBkZSh4dCxzLFB0LFFlKX1mdW5jdGlvbiBQZSh4dCxQdCxRZSl7cmV0dXJuIGRlKHh0LHUsUHQsUWUpfWZ1bmN0aW9uIGplKHh0LFB0LFFlKXtyZXR1cm4gZGUoeHQsZCxQdCxRZSl9ZnVuY3Rpb24gSWUoeHQpe3JldHVybiBiW3h0LmdldERheSgpXX1mdW5jdGlvbiBTZSh4dCl7cmV0dXJuIHZbeHQuZ2V0RGF5KCldfWZ1bmN0aW9uIENlKHh0KXtyZXR1cm4gVFt4dC5nZXRNb250aCgpXX1mdW5jdGlvbiBrZSh4dCl7cmV0dXJuIHlbeHQuZ2V0TW9udGgoKV19ZnVuY3Rpb24gS2UoeHQpe3JldHVybiBwWysoeHQuZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBGdCh4dCl7cmV0dXJuIDErfn4oeHQuZ2V0TW9udGgoKS8zKX1mdW5jdGlvbiBOZSh4dCl7cmV0dXJuIGJbeHQuZ2V0VVRDRGF5KCldfWZ1bmN0aW9uIGduKHh0KXtyZXR1cm4gdlt4dC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gX3QoeHQpe3JldHVybiBUW3h0LmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEV0KHh0KXtyZXR1cm4geVt4dC5nZXRVVENNb250aCgpXX1mdW5jdGlvbiBHdCh4dCl7cmV0dXJuIHBbKyh4dC5nZXRVVENIb3VycygpPj0xMildfWZ1bmN0aW9uIGxuKHh0KXtyZXR1cm4gMSt+fih4dC5nZXRVVENNb250aCgpLzMpfXJldHVybntmb3JtYXQ6ZnVuY3Rpb24oeHQpe3ZhciBQdD1uZSh4dCs9IiIscGUpO3JldHVybiBQdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB4dH0sUHR9LHBhcnNlOmZ1bmN0aW9uKHh0KXt2YXIgUHQ9c2UoeHQrPSIiLCExKTtyZXR1cm4gUHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4geHR9LFB0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oeHQpe3ZhciBQdD1uZSh4dCs9IiIsYmUpO3JldHVybiBQdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB4dH0sUHR9LHV0Y1BhcnNlOmZ1bmN0aW9uKHh0KXt2YXIgUHQ9c2UoeHQrPSIiLCEwKTtyZXR1cm4gUHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4geHR9LFB0fX19dmFyIFNGZT17Ii0iOiIiLF86IiAiLDA6IjAifSxyZD0vXlxzKlxkKy8sbE90PS9eJS8saE90PS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBtdShpLHMsdSl7dmFyIGQ9aTwwPyItIjoiIixwPShkPy1pOmkpKyIiLHY9cC5sZW5ndGg7cmV0dXJuIGQrKHY8dT9uZXcgQXJyYXkodS12KzEpLmpvaW4ocykrcDpwKX1mdW5jdGlvbiBmT3QoaSl7cmV0dXJuIGkucmVwbGFjZShoT3QsIlxcJCYiKX1mdW5jdGlvbiBORihpKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIraS5tYXAoZk90KS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gUEYoaSl7cmV0dXJuIG5ldyBNYXAoaS5tYXAoKHMsdSk9PltzLnRvTG93ZXJDYXNlKCksdV0pKX1mdW5jdGlvbiBkT3QoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1LHUrMSkpO3JldHVybiBkPyhpLnc9K2RbMF0sdStkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZ090KGkscyx1KXt2YXIgZD1yZC5leGVjKHMuc2xpY2UodSx1KzEpKTtyZXR1cm4gZD8oaS51PStkWzBdLHUrZFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHBPdChpLHMsdSl7dmFyIGQ9cmQuZXhlYyhzLnNsaWNlKHUsdSsyKSk7cmV0dXJuIGQ/KGkuVT0rZFswXSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBiT3QoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1LHUrMikpO3JldHVybiBkPyhpLlY9K2RbMF0sdStkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbU90KGkscyx1KXt2YXIgZD1yZC5leGVjKHMuc2xpY2UodSx1KzIpKTtyZXR1cm4gZD8oaS5XPStkWzBdLHUrZFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIF9GZShpLHMsdSl7dmFyIGQ9cmQuZXhlYyhzLnNsaWNlKHUsdSs0KSk7cmV0dXJuIGQ/KGkueT0rZFswXSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBBRmUoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1LHUrMikpO3JldHVybiBkPyhpLnk9K2RbMF0rKCtkWzBdPjY4PzE5MDA6MmUzKSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB2T3QoaSxzLHUpe3ZhciBkPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKHMuc2xpY2UodSx1KzYpKTtyZXR1cm4gZD8oaS5aPWRbMV0/MDotKGRbMl0rKGRbM118fCIwMCIpKSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB3T3QoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1LHUrMSkpO3JldHVybiBkPyhpLnE9ZFswXSozLTMsdStkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geU90KGkscyx1KXt2YXIgZD1yZC5leGVjKHMuc2xpY2UodSx1KzIpKTtyZXR1cm4gZD8oaS5tPWRbMF0tMSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMRmUoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1LHUrMikpO3JldHVybiBkPyhpLmQ9K2RbMF0sdStkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geE90KGkscyx1KXt2YXIgZD1yZC5leGVjKHMuc2xpY2UodSx1KzMpKTtyZXR1cm4gZD8oaS5tPTAsaS5kPStkWzBdLHUrZFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE1GZShpLHMsdSl7dmFyIGQ9cmQuZXhlYyhzLnNsaWNlKHUsdSsyKSk7cmV0dXJuIGQ/KGkuSD0rZFswXSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrT3QoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1LHUrMikpO3JldHVybiBkPyhpLk09K2RbMF0sdStkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRU90KGkscyx1KXt2YXIgZD1yZC5leGVjKHMuc2xpY2UodSx1KzIpKTtyZXR1cm4gZD8oaS5TPStkWzBdLHUrZFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFRPdChpLHMsdSl7dmFyIGQ9cmQuZXhlYyhzLnNsaWNlKHUsdSszKSk7cmV0dXJuIGQ/KGkuTD0rZFswXSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBDT3QoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1LHUrNikpO3JldHVybiBkPyhpLkw9TWF0aC5mbG9vcihkWzBdLzFlMyksdStkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gU090KGkscyx1KXt2YXIgZD1sT3QuZXhlYyhzLnNsaWNlKHUsdSsxKSk7cmV0dXJuIGQ/dStkWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBfT3QoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1KSk7cmV0dXJuIGQ/KGkuUT0rZFswXSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBBT3QoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1KSk7cmV0dXJuIGQ/KGkucz0rZFswXSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBERmUoaSxzKXtyZXR1cm4gbXUoaS5nZXREYXRlKCkscywyKX1mdW5jdGlvbiBMT3QoaSxzKXtyZXR1cm4gbXUoaS5nZXRIb3VycygpLHMsMil9ZnVuY3Rpb24gTU90KGkscyl7cmV0dXJuIG11KGkuZ2V0SG91cnMoKSUxMnx8MTIscywyKX1mdW5jdGlvbiBET3QoaSxzKXtyZXR1cm4gbXUoMSt2Qy5jb3VudCh4NyhpKSxpKSxzLDMpfWZ1bmN0aW9uIElGZShpLHMpe3JldHVybiBtdShpLmdldE1pbGxpc2Vjb25kcygpLHMsMyl9ZnVuY3Rpb24gSU90KGkscyl7cmV0dXJuIElGZShpLHMpKyIwMDAifWZ1bmN0aW9uIE9PdChpLHMpe3JldHVybiBtdShpLmdldE1vbnRoKCkrMSxzLDIpfWZ1bmN0aW9uIE5PdChpLHMpe3JldHVybiBtdShpLmdldE1pbnV0ZXMoKSxzLDIpfWZ1bmN0aW9uIFBPdChpLHMpe3JldHVybiBtdShpLmdldFNlY29uZHMoKSxzLDIpfWZ1bmN0aW9uIEJPdChpKXt2YXIgcz1pLmdldERheSgpO3JldHVybiBzPT09MD83OnN9ZnVuY3Rpb24gRk90KGkscyl7cmV0dXJuIG11KE1GLmNvdW50KHg3KGkpLTEsaSkscywyKX1mdW5jdGlvbiBPRmUoaSl7dmFyIHM9aS5nZXREYXkoKTtyZXR1cm4gcz49NHx8cz09PTA/eUMoaSk6eUMuY2VpbChpKX1mdW5jdGlvbiBST3QoaSxzKXtyZXR1cm4gaT1PRmUoaSksbXUoeUMuY291bnQoeDcoaSksaSkrKHg3KGkpLmdldERheSgpPT09NCkscywyKX1mdW5jdGlvbiBqT3QoaSl7cmV0dXJuIGkuZ2V0RGF5KCl9ZnVuY3Rpb24gJE90KGkscyl7cmV0dXJuIG11KERGLmNvdW50KHg3KGkpLTEsaSkscywyKX1mdW5jdGlvbiB6T3QoaSxzKXtyZXR1cm4gbXUoaS5nZXRGdWxsWWVhcigpJTEwMCxzLDIpfWZ1bmN0aW9uIHFPdChpLHMpe3JldHVybiBpPU9GZShpKSxtdShpLmdldEZ1bGxZZWFyKCklMTAwLHMsMil9ZnVuY3Rpb24gSE90KGkscyl7cmV0dXJuIG11KGkuZ2V0RnVsbFllYXIoKSUxZTQscyw0KX1mdW5jdGlvbiBWT3QoaSxzKXt2YXIgdT1pLmdldERheSgpO3JldHVybiBpPXU+PTR8fHU9PT0wP3lDKGkpOnlDLmNlaWwoaSksbXUoaS5nZXRGdWxsWWVhcigpJTFlNCxzLDQpfWZ1bmN0aW9uIFVPdChpKXt2YXIgcz1pLmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKHM+MD8iLSI6KHMqPS0xLCIrIikpK211KHMvNjB8MCwiMCIsMikrbXUocyU2MCwiMCIsMil9ZnVuY3Rpb24gTkZlKGkscyl7cmV0dXJuIG11KGkuZ2V0VVRDRGF0ZSgpLHMsMil9ZnVuY3Rpb24gR090KGkscyl7cmV0dXJuIG11KGkuZ2V0VVRDSG91cnMoKSxzLDIpfWZ1bmN0aW9uIEtPdChpLHMpe3JldHVybiBtdShpLmdldFVUQ0hvdXJzKCklMTJ8fDEyLHMsMil9ZnVuY3Rpb24gV090KGkscyl7cmV0dXJuIG11KDErV3BlLmNvdW50KGtDKGkpLGkpLHMsMyl9ZnVuY3Rpb24gUEZlKGkscyl7cmV0dXJuIG11KGkuZ2V0VVRDTWlsbGlzZWNvbmRzKCkscywzKX1mdW5jdGlvbiBZT3QoaSxzKXtyZXR1cm4gUEZlKGkscykrIjAwMCJ9ZnVuY3Rpb24gWE90KGkscyl7cmV0dXJuIG11KGkuZ2V0VVRDTW9udGgoKSsxLHMsMil9ZnVuY3Rpb24gUU90KGkscyl7cmV0dXJuIG11KGkuZ2V0VVRDTWludXRlcygpLHMsMil9ZnVuY3Rpb24gSk90KGkscyl7cmV0dXJuIG11KGkuZ2V0VVRDU2Vjb25kcygpLHMsMil9ZnVuY3Rpb24gWk90KGkpe3ZhciBzPWkuZ2V0VVRDRGF5KCk7cmV0dXJuIHM9PT0wPzc6c31mdW5jdGlvbiBlTnQoaSxzKXtyZXR1cm4gbXUoQ0ZlLmNvdW50KGtDKGkpLTEsaSkscywyKX1mdW5jdGlvbiBCRmUoaSl7dmFyIHM9aS5nZXRVVENEYXkoKTtyZXR1cm4gcz49NHx8cz09PTA/b0QoaSk6b0QuY2VpbChpKX1mdW5jdGlvbiB0TnQoaSxzKXtyZXR1cm4gaT1CRmUoaSksbXUob0QuY291bnQoa0MoaSksaSkrKGtDKGkpLmdldFVUQ0RheSgpPT09NCkscywyKX1mdW5jdGlvbiBuTnQoaSl7cmV0dXJuIGkuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gck50KGkscyl7cmV0dXJuIG11KGlYLmNvdW50KGtDKGkpLTEsaSkscywyKX1mdW5jdGlvbiBpTnQoaSxzKXtyZXR1cm4gbXUoaS5nZXRVVENGdWxsWWVhcigpJTEwMCxzLDIpfWZ1bmN0aW9uIHNOdChpLHMpe3JldHVybiBpPUJGZShpKSxtdShpLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHMsMil9ZnVuY3Rpb24gYU50KGkscyl7cmV0dXJuIG11KGkuZ2V0VVRDRnVsbFllYXIoKSUxZTQscyw0KX1mdW5jdGlvbiBvTnQoaSxzKXt2YXIgdT1pLmdldFVUQ0RheSgpO3JldHVybiBpPXU+PTR8fHU9PT0wP29EKGkpOm9ELmNlaWwoaSksbXUoaS5nZXRVVENGdWxsWWVhcigpJTFlNCxzLDQpfWZ1bmN0aW9uIGNOdCgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gRkZlKCl7cmV0dXJuIiUifWZ1bmN0aW9uIFJGZShpKXtyZXR1cm4raX1mdW5jdGlvbiBqRmUoaSl7cmV0dXJuIE1hdGguZmxvb3IoK2kvMWUzKX12YXIgY0Qsc1g7dU50KHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7ZnVuY3Rpb24gdU50KGkpe3JldHVybiBjRD11T3QoaSksc1g9Y0QuZm9ybWF0LGNELnBhcnNlLGNELnV0Y0Zvcm1hdCxjRC51dGNQYXJzZSxjRH1mdW5jdGlvbiBsTnQoaSl7cmV0dXJuIG5ldyBEYXRlKGkpfWZ1bmN0aW9uIGhOdChpKXtyZXR1cm4gaSBpbnN0YW5jZW9mIERhdGU/K2k6K25ldyBEYXRlKCtpKX1mdW5jdGlvbiAkRmUoaSxzLHUsZCxwLHYsYix5LFQsXyl7dmFyIEE9d0ZlKCksUD1BLmludmVydCxSPUEuZG9tYWluLEY9XygiLiVMIiksaj1fKCI6JVMiKSxLPV8oIiVJOiVNIiksZWU9XygiJUkgJXAiKSxpZT1fKCIlYSAlZCIpLG9lPV8oIiViICVkIikscGU9XygiJUIiKSxiZT1fKCIlWSIpO2Z1bmN0aW9uIGFlKG5lKXtyZXR1cm4oVChuZSk8bmU/Rjp5KG5lKTxuZT9qOmIobmUpPG5lP0s6dihuZSk8bmU/ZWU6ZChuZSk8bmU/cChuZSk8bmU/aWU6b2U6dShuZSk8bmU/cGU6YmUpKG5lKX1yZXR1cm4gQS5pbnZlcnQ9ZnVuY3Rpb24obmUpe3JldHVybiBuZXcgRGF0ZShQKG5lKSl9LEEuZG9tYWluPWZ1bmN0aW9uKG5lKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9SKEFycmF5LmZyb20obmUsaE50KSk6UigpLm1hcChsTnQpfSxBLnRpY2tzPWZ1bmN0aW9uKG5lKXt2YXIgc2U9UigpO3JldHVybiBpKHNlWzBdLHNlW3NlLmxlbmd0aC0xXSxuZT8/MTApfSxBLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obmUsc2Upe3JldHVybiBzZT09bnVsbD9hZTpfKHNlKX0sQS5uaWNlPWZ1bmN0aW9uKG5lKXt2YXIgc2U9UigpO3JldHVybighbmV8fHR5cGVvZiBuZS5yYW5nZSE9ImZ1bmN0aW9uIikmJihuZT1zKHNlWzBdLHNlW3NlLmxlbmd0aC0xXSxuZT8/MTApKSxuZT9SKHRPdChzZSxuZSkpOkF9LEEuY29weT1mdW5jdGlvbigpe3JldHVybiB2RmUoQSwkRmUoaSxzLHUsZCxwLHYsYix5LFQsXykpfSxBfWZ1bmN0aW9uIGZOdCgpe3JldHVybiByWC5hcHBseSgkRmUob090LGNPdCx4NyxJRixNRix2QyxMRixBRixiOSxzWCkuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZE50KGkpe2Zvcih2YXIgcz1pLmxlbmd0aC82fDAsdT1uZXcgQXJyYXkocyksZD0wO2Q8czspdVtkXT0iIyIraS5zbGljZShkKjYsKytkKjYpO3JldHVybiB1fWNvbnN0IHpGZT1kTnQoIjRlNzlhN2YyOGUyY2UxNTc1OTc2YjdiMjU5YTE0ZmVkYzk0OWFmN2FhMWZmOWRhNzljNzU1ZmJhYjBhYiIpO2Z1bmN0aW9uIFdmKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpfX1jb25zdCBxRmU9TWF0aC5hYnMsRGc9TWF0aC5hdGFuMixFQz1NYXRoLmNvcyxnTnQ9TWF0aC5tYXgsUXBlPU1hdGgubWluLHo0PU1hdGguc2luLHVEPU1hdGguc3FydCxJZz0xZS0xMixCRj1NYXRoLlBJLGFYPUJGLzIsb1g9MipCRjtmdW5jdGlvbiBwTnQoaSl7cmV0dXJuIGk+MT8wOmk8LTE/QkY6TWF0aC5hY29zKGkpfWZ1bmN0aW9uIEhGZShpKXtyZXR1cm4gaT49MT9hWDppPD0tMT8tYVg6TWF0aC5hc2luKGkpfWZ1bmN0aW9uIFZGZShpKXtsZXQgcz0zO3JldHVybiBpLmRpZ2l0cz1mdW5jdGlvbih1KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcztpZih1PT1udWxsKXM9bnVsbDtlbHNle2NvbnN0IGQ9TWF0aC5mbG9vcih1KTtpZighKGQ+PTApKXRocm93IG5ldyBSYW5nZUVycm9yKGBpbnZhbGlkIGRpZ2l0czogJHt1fWApO3M9ZH1yZXR1cm4gaX0sKCk9Pm5ldyBESXQocyl9ZnVuY3Rpb24gYk50KGkpe3JldHVybiBpLmlubmVyUmFkaXVzfWZ1bmN0aW9uIG1OdChpKXtyZXR1cm4gaS5vdXRlclJhZGl1c31mdW5jdGlvbiB2TnQoaSl7cmV0dXJuIGkuc3RhcnRBbmdsZX1mdW5jdGlvbiB3TnQoaSl7cmV0dXJuIGkuZW5kQW5nbGV9ZnVuY3Rpb24geU50KGkpe3JldHVybiBpJiZpLnBhZEFuZ2xlfWZ1bmN0aW9uIHhOdChpLHMsdSxkLHAsdixiLHkpe3ZhciBUPXUtaSxfPWQtcyxBPWItcCxQPXktdixSPVAqVC1BKl87aWYoIShSKlI8SWcpKXJldHVybiBSPShBKihzLXYpLVAqKGktcCkpL1IsW2krUipULHMrUipfXX1mdW5jdGlvbiBjWChpLHMsdSxkLHAsdixiKXt2YXIgeT1pLXUsVD1zLWQsXz0oYj92Oi12KS91RCh5KnkrVCpUKSxBPV8qVCxQPS1fKnksUj1pK0EsRj1zK1Asaj11K0EsSz1kK1AsZWU9KFIraikvMixpZT0oRitLKS8yLG9lPWotUixwZT1LLUYsYmU9b2Uqb2UrcGUqcGUsYWU9cC12LG5lPVIqSy1qKkYsc2U9KHBlPDA/LTE6MSkqdUQoZ050KDAsYWUqYWUqYmUtbmUqbmUpKSxkZT0obmUqcGUtb2Uqc2UpL2JlLFg9KC1uZSpvZS1wZSpzZSkvYmUsZ2U9KG5lKnBlK29lKnNlKS9iZSxXPSgtbmUqb2UrcGUqc2UpL2JlLHhlPWRlLWVlLFU9WC1pZSxGZT1nZS1lZSxQZT1XLWllO3JldHVybiB4ZSp4ZStVKlU+RmUqRmUrUGUqUGUmJihkZT1nZSxYPVcpLHtjeDpkZSxjeTpYLHgwMTotQSx5MDE6LVAseDExOmRlKihwL2FlLTEpLHkxMTpYKihwL2FlLTEpfX1mdW5jdGlvbiBsRCgpe3ZhciBpPWJOdCxzPW1OdCx1PVdmKDApLGQ9bnVsbCxwPXZOdCx2PXdOdCxiPXlOdCx5PW51bGwsVD1WRmUoXyk7ZnVuY3Rpb24gXygpe3ZhciBBLFAsUj0raS5hcHBseSh0aGlzLGFyZ3VtZW50cyksRj0rcy5hcHBseSh0aGlzLGFyZ3VtZW50cyksaj1wLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1hWCxLPXYuYXBwbHkodGhpcyxhcmd1bWVudHMpLWFYLGVlPXFGZShLLWopLGllPUs+ajtpZih5fHwoeT1BPVQoKSksRjxSJiYoUD1GLEY9UixSPVApLCEoRj5JZykpeS5tb3ZlVG8oMCwwKTtlbHNlIGlmKGVlPm9YLUlnKXkubW92ZVRvKEYqRUMoaiksRip6NChqKSkseS5hcmMoMCwwLEYsaixLLCFpZSksUj5JZyYmKHkubW92ZVRvKFIqRUMoSyksUip6NChLKSkseS5hcmMoMCwwLFIsSyxqLGllKSk7ZWxzZXt2YXIgb2U9aixwZT1LLGJlPWosYWU9SyxuZT1lZSxzZT1lZSxkZT1iLmFwcGx5KHRoaXMsYXJndW1lbnRzKS8yLFg9ZGU+SWcmJihkPytkLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp1RChSKlIrRipGKSksZ2U9UXBlKHFGZShGLVIpLzIsK3UuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxXPWdlLHhlPWdlLFUsRmU7aWYoWD5JZyl7dmFyIFBlPUhGZShYL1IqejQoZGUpKSxqZT1IRmUoWC9GKno0KGRlKSk7KG5lLT1QZSoyKT5JZz8oUGUqPWllPzE6LTEsYmUrPVBlLGFlLT1QZSk6KG5lPTAsYmU9YWU9KGorSykvMiksKHNlLT1qZSoyKT5JZz8oamUqPWllPzE6LTEsb2UrPWplLHBlLT1qZSk6KHNlPTAsb2U9cGU9KGorSykvMil9dmFyIEllPUYqRUMob2UpLFNlPUYqejQob2UpLENlPVIqRUMoYWUpLGtlPVIqejQoYWUpO2lmKGdlPklnKXt2YXIgS2U9RipFQyhwZSksRnQ9Rip6NChwZSksTmU9UipFQyhiZSksZ249Uip6NChiZSksX3Q7aWYoZWU8QkYpaWYoX3Q9eE50KEllLFNlLE5lLGduLEtlLEZ0LENlLGtlKSl7dmFyIEV0PUllLV90WzBdLEd0PVNlLV90WzFdLGxuPUtlLV90WzBdLHh0PUZ0LV90WzFdLFB0PTEvejQocE50KChFdCpsbitHdCp4dCkvKHVEKEV0KkV0K0d0Kkd0KSp1RChsbipsbit4dCp4dCkpKS8yKSxRZT11RChfdFswXSpfdFswXStfdFsxXSpfdFsxXSk7Vz1RcGUoZ2UsKFItUWUpLyhQdC0xKSkseGU9UXBlKGdlLChGLVFlKS8oUHQrMSkpfWVsc2UgVz14ZT0wfXNlPklnP3hlPklnPyhVPWNYKE5lLGduLEllLFNlLEYseGUsaWUpLEZlPWNYKEtlLEZ0LENlLGtlLEYseGUsaWUpLHkubW92ZVRvKFUuY3grVS54MDEsVS5jeStVLnkwMSkseGU8Z2U/eS5hcmMoVS5jeCxVLmN5LHhlLERnKFUueTAxLFUueDAxKSxEZyhGZS55MDEsRmUueDAxKSwhaWUpOih5LmFyYyhVLmN4LFUuY3kseGUsRGcoVS55MDEsVS54MDEpLERnKFUueTExLFUueDExKSwhaWUpLHkuYXJjKDAsMCxGLERnKFUuY3krVS55MTEsVS5jeCtVLngxMSksRGcoRmUuY3krRmUueTExLEZlLmN4K0ZlLngxMSksIWllKSx5LmFyYyhGZS5jeCxGZS5jeSx4ZSxEZyhGZS55MTEsRmUueDExKSxEZyhGZS55MDEsRmUueDAxKSwhaWUpKSk6KHkubW92ZVRvKEllLFNlKSx5LmFyYygwLDAsRixvZSxwZSwhaWUpKTp5Lm1vdmVUbyhJZSxTZSksIShSPklnKXx8IShuZT5JZyk/eS5saW5lVG8oQ2Usa2UpOlc+SWc/KFU9Y1goQ2Usa2UsS2UsRnQsUiwtVyxpZSksRmU9Y1goSWUsU2UsTmUsZ24sUiwtVyxpZSkseS5saW5lVG8oVS5jeCtVLngwMSxVLmN5K1UueTAxKSxXPGdlP3kuYXJjKFUuY3gsVS5jeSxXLERnKFUueTAxLFUueDAxKSxEZyhGZS55MDEsRmUueDAxKSwhaWUpOih5LmFyYyhVLmN4LFUuY3ksVyxEZyhVLnkwMSxVLngwMSksRGcoVS55MTEsVS54MTEpLCFpZSkseS5hcmMoMCwwLFIsRGcoVS5jeStVLnkxMSxVLmN4K1UueDExKSxEZyhGZS5jeStGZS55MTEsRmUuY3grRmUueDExKSxpZSkseS5hcmMoRmUuY3gsRmUuY3ksVyxEZyhGZS55MTEsRmUueDExKSxEZyhGZS55MDEsRmUueDAxKSwhaWUpKSk6eS5hcmMoMCwwLFIsYWUsYmUsaWUpfWlmKHkuY2xvc2VQYXRoKCksQSlyZXR1cm4geT1udWxsLEErIiJ8fG51bGx9cmV0dXJuIF8uY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgQT0oK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArcy5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsUD0oK3AuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArdi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItQkYvMjtyZXR1cm5bRUMoUCkqQSx6NChQKSpBXX0sXy5pbm5lclJhZGl1cz1mdW5jdGlvbihBKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgQT09ImZ1bmN0aW9uIj9BOldmKCtBKSxfKTppfSxfLm91dGVyUmFkaXVzPWZ1bmN0aW9uKEEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXR5cGVvZiBBPT0iZnVuY3Rpb24iP0E6V2YoK0EpLF8pOnN9LF8uY29ybmVyUmFkaXVzPWZ1bmN0aW9uKEEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXR5cGVvZiBBPT0iZnVuY3Rpb24iP0E6V2YoK0EpLF8pOnV9LF8ucGFkUmFkaXVzPWZ1bmN0aW9uKEEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPUE9PW51bGw/bnVsbDp0eXBlb2YgQT09ImZ1bmN0aW9uIj9BOldmKCtBKSxfKTpkfSxfLnN0YXJ0QW5nbGU9ZnVuY3Rpb24oQSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dHlwZW9mIEE9PSJmdW5jdGlvbiI/QTpXZigrQSksXyk6cH0sXy5lbmRBbmdsZT1mdW5jdGlvbihBKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj10eXBlb2YgQT09ImZ1bmN0aW9uIj9BOldmKCtBKSxfKTp2fSxfLnBhZEFuZ2xlPWZ1bmN0aW9uKEEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPXR5cGVvZiBBPT0iZnVuY3Rpb24iP0E6V2YoK0EpLF8pOmJ9LF8uY29udGV4dD1mdW5jdGlvbihBKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT1BPz9udWxsLF8pOnl9LF99ZnVuY3Rpb24gVUZlKGkpe3JldHVybiB0eXBlb2YgaT09Im9iamVjdCImJiJsZW5ndGgiaW4gaT9pOkFycmF5LmZyb20oaSl9ZnVuY3Rpb24gR0ZlKGkpe3RoaXMuX2NvbnRleHQ9aX1HRmUucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxzKXtzd2l0Y2goaT0raSxzPStzLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGkscyk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaSxzKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKGkscyk7YnJlYWt9fX07ZnVuY3Rpb24ga3AoaSl7cmV0dXJuIG5ldyBHRmUoaSl9ZnVuY3Rpb24ga050KGkpe3JldHVybiBpWzBdfWZ1bmN0aW9uIEVOdChpKXtyZXR1cm4gaVsxXX1mdW5jdGlvbiBrNyhpLHMpe3ZhciB1PVdmKCEwKSxkPW51bGwscD1rcCx2PW51bGwsYj1WRmUoeSk7aT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmk9PT12b2lkIDA/a050OldmKGkpLHM9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpzPT09dm9pZCAwP0VOdDpXZihzKTtmdW5jdGlvbiB5KFQpe3ZhciBfLEE9KFQ9VUZlKFQpKS5sZW5ndGgsUCxSPSExLEY7Zm9yKGQ9PW51bGwmJih2PXAoRj1iKCkpKSxfPTA7Xzw9QTsrK18pIShfPEEmJnUoUD1UW19dLF8sVCkpPT09UiYmKChSPSFSKT92LmxpbmVTdGFydCgpOnYubGluZUVuZCgpKSxSJiZ2LnBvaW50KCtpKFAsXyxUKSwrcyhQLF8sVCkpO2lmKEYpcmV0dXJuIHY9bnVsbCxGKyIifHxudWxsfXJldHVybiB5Lng9ZnVuY3Rpb24oVCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIFQ9PSJmdW5jdGlvbiI/VDpXZigrVCkseSk6aX0seS55PWZ1bmN0aW9uKFQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXR5cGVvZiBUPT0iZnVuY3Rpb24iP1Q6V2YoK1QpLHkpOnN9LHkuZGVmaW5lZD1mdW5jdGlvbihUKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10eXBlb2YgVD09ImZ1bmN0aW9uIj9UOldmKCEhVCkseSk6dX0seS5jdXJ2ZT1mdW5jdGlvbihUKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1ULGQhPW51bGwmJih2PXAoZCkpLHkpOnB9LHkuY29udGV4dD1mdW5jdGlvbihUKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD09bnVsbD9kPXY9bnVsbDp2PXAoZD1UKSx5KTpkfSx5fWZ1bmN0aW9uIFROdChpLHMpe3JldHVybiBzPGk/LTE6cz5pPzE6cz49aT8wOk5hTn1mdW5jdGlvbiBDTnQoaSl7cmV0dXJuIGl9ZnVuY3Rpb24gU050KCl7dmFyIGk9Q050LHM9VE50LHU9bnVsbCxkPVdmKDApLHA9V2Yob1gpLHY9V2YoMCk7ZnVuY3Rpb24gYih5KXt2YXIgVCxfPSh5PVVGZSh5KSkubGVuZ3RoLEEsUCxSPTAsRj1uZXcgQXJyYXkoXyksaj1uZXcgQXJyYXkoXyksSz0rZC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZWU9TWF0aC5taW4ob1gsTWF0aC5tYXgoLW9YLHAuYXBwbHkodGhpcyxhcmd1bWVudHMpLUspKSxpZSxvZT1NYXRoLm1pbihNYXRoLmFicyhlZSkvXyx2LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkscGU9b2UqKGVlPDA/LTE6MSksYmU7Zm9yKFQ9MDtUPF87KytUKShiZT1qW0ZbVF09VF09K2koeVtUXSxULHkpKT4wJiYoUis9YmUpO2ZvcihzIT1udWxsP0Yuc29ydChmdW5jdGlvbihhZSxuZSl7cmV0dXJuIHMoalthZV0saltuZV0pfSk6dSE9bnVsbCYmRi5zb3J0KGZ1bmN0aW9uKGFlLG5lKXtyZXR1cm4gdSh5W2FlXSx5W25lXSl9KSxUPTAsUD1SPyhlZS1fKnBlKS9SOjA7VDxfOysrVCxLPWllKUE9RltUXSxiZT1qW0FdLGllPUsrKGJlPjA/YmUqUDowKStwZSxqW0FdPXtkYXRhOnlbQV0saW5kZXg6VCx2YWx1ZTpiZSxzdGFydEFuZ2xlOkssZW5kQW5nbGU6aWUscGFkQW5nbGU6b2V9O3JldHVybiBqfXJldHVybiBiLnZhbHVlPWZ1bmN0aW9uKHkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiB5PT0iZnVuY3Rpb24iP3k6V2YoK3kpLGIpOml9LGIuc29ydFZhbHVlcz1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz15LHU9bnVsbCxiKTpzfSxiLnNvcnQ9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9eSxzPW51bGwsYik6dX0sYi5zdGFydEFuZ2xlPWZ1bmN0aW9uKHkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXR5cGVvZiB5PT0iZnVuY3Rpb24iP3k6V2YoK3kpLGIpOmR9LGIuZW5kQW5nbGU9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpXZigreSksYik6cH0sYi5wYWRBbmdsZT1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj10eXBlb2YgeT09ImZ1bmN0aW9uIj95OldmKCt5KSxiKTp2fSxifWNsYXNzIEtGZXtjb25zdHJ1Y3RvcihzLHUpe3RoaXMuX2NvbnRleHQ9cyx0aGlzLl94PXV9YXJlYVN0YXJ0KCl7dGhpcy5fbGluZT0wfWFyZWFFbmQoKXt0aGlzLl9saW5lPU5hTn1saW5lU3RhcnQoKXt0aGlzLl9wb2ludD0wfWxpbmVFbmQoKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9cG9pbnQocyx1KXtzd2l0Y2gocz0rcyx1PSt1LHRoaXMuX3BvaW50KXtjYXNlIDA6e3RoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhzLHUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHMsdSk7YnJlYWt9Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7dGhpcy5feD90aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8odGhpcy5feDA9KHRoaXMuX3gwK3MpLzIsdGhpcy5feTAsdGhpcy5feDAsdSxzLHUpOnRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0aGlzLl94MCx0aGlzLl95MD0odGhpcy5feTArdSkvMixzLHRoaXMuX3kwLHMsdSk7YnJlYWt9fXRoaXMuX3gwPXMsdGhpcy5feTA9dX19ZnVuY3Rpb24gX050KGkpe3JldHVybiBuZXcgS0ZlKGksITApfWZ1bmN0aW9uIEFOdChpKXtyZXR1cm4gbmV3IEtGZShpLCExKX1mdW5jdGlvbiBtOSgpe31mdW5jdGlvbiB1WChpLHMsdSl7aS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKmkuX3gwK2kuX3gxKS8zLCgyKmkuX3kwK2kuX3kxKS8zLChpLl94MCsyKmkuX3gxKS8zLChpLl95MCsyKmkuX3kxKS8zLChpLl94MCs0KmkuX3gxK3MpLzYsKGkuX3kwKzQqaS5feTErdSkvNil9ZnVuY3Rpb24gbFgoaSl7dGhpcy5fY29udGV4dD1pfWxYLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6dVgodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGkscyl7c3dpdGNoKGk9K2kscz0rcyx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhpLHMpOnRoaXMuX2NvbnRleHQubW92ZVRvKGkscyk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6dVgodGhpcyxpLHMpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9c319O2Z1bmN0aW9uIEZGKGkpe3JldHVybiBuZXcgbFgoaSl9ZnVuY3Rpb24gV0ZlKGkpe3RoaXMuX2NvbnRleHQ9aX1XRmUucHJvdG90eXBlPXthcmVhU3RhcnQ6bTksYXJlYUVuZDptOSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGkscyl7c3dpdGNoKGk9K2kscz0rcyx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9aSx0aGlzLl95Mj1zO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPWksdGhpcy5feTM9czticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND1pLHRoaXMuX3k0PXMsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDEraSkvNiwodGhpcy5feTArNCp0aGlzLl95MStzKS82KTticmVhaztkZWZhdWx0OnVYKHRoaXMsaSxzKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXN9fTtmdW5jdGlvbiBMTnQoaSl7cmV0dXJuIG5ldyBXRmUoaSl9ZnVuY3Rpb24gWUZlKGkpe3RoaXMuX2NvbnRleHQ9aX1ZRmUucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGkscyl7c3dpdGNoKGk9K2kscz0rcyx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIHU9KHRoaXMuX3gwKzQqdGhpcy5feDEraSkvNixkPSh0aGlzLl95MCs0KnRoaXMuX3kxK3MpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh1LGQpOnRoaXMuX2NvbnRleHQubW92ZVRvKHUsZCk7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDp1WCh0aGlzLGkscyk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1zfX07ZnVuY3Rpb24gTU50KGkpe3JldHVybiBuZXcgWUZlKGkpfWZ1bmN0aW9uIFhGZShpLHMpe3RoaXMuX2Jhc2lzPW5ldyBsWChpKSx0aGlzLl9iZXRhPXN9WEZlLnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5feCxzPXRoaXMuX3ksdT1pLmxlbmd0aC0xO2lmKHU+MClmb3IodmFyIGQ9aVswXSxwPXNbMF0sdj1pW3VdLWQsYj1zW3VdLXAseT0tMSxUOysreTw9dTspVD15L3UsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSppW3ldKygxLXRoaXMuX2JldGEpKihkK1QqdiksdGhpcy5fYmV0YSpzW3ldKygxLXRoaXMuX2JldGEpKihwK1QqYikpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oaSxzKXt0aGlzLl94LnB1c2goK2kpLHRoaXMuX3kucHVzaCgrcyl9fTtjb25zdCBETnQ9ZnVuY3Rpb24gaShzKXtmdW5jdGlvbiB1KGQpe3JldHVybiBzPT09MT9uZXcgbFgoZCk6bmV3IFhGZShkLHMpfXJldHVybiB1LmJldGE9ZnVuY3Rpb24oZCl7cmV0dXJuIGkoK2QpfSx1fSguODUpO2Z1bmN0aW9uIGhYKGkscyx1KXtpLl9jb250ZXh0LmJlemllckN1cnZlVG8oaS5feDEraS5fayooaS5feDItaS5feDApLGkuX3kxK2kuX2sqKGkuX3kyLWkuX3kwKSxpLl94MitpLl9rKihpLl94MS1zKSxpLl95MitpLl9rKihpLl95MS11KSxpLl94MixpLl95Mil9ZnVuY3Rpb24gSnBlKGkscyl7dGhpcy5fY29udGV4dD1pLHRoaXMuX2s9KDEtcykvNn1KcGUucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOmhYKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxzKXtzd2l0Y2goaT0raSxzPStzLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGkscyk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaSxzKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT1pLHRoaXMuX3kxPXM7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpoWCh0aGlzLGkscyk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1zfX07Y29uc3QgSU50PWZ1bmN0aW9uIGkocyl7ZnVuY3Rpb24gdShkKXtyZXR1cm4gbmV3IEpwZShkLHMpfXJldHVybiB1LnRlbnNpb249ZnVuY3Rpb24oZCl7cmV0dXJuIGkoK2QpfSx1fSgwKTtmdW5jdGlvbiBacGUoaSxzKXt0aGlzLl9jb250ZXh0PWksdGhpcy5faz0oMS1zKS82fVpwZS5wcm90b3R5cGU9e2FyZWFTdGFydDptOSxhcmVhRW5kOm05LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihpLHMpe3N3aXRjaChpPStpLHM9K3MsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWksdGhpcy5feTM9czticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1pLHRoaXMuX3k0PXMpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWksdGhpcy5feTU9czticmVhaztkZWZhdWx0OmhYKHRoaXMsaSxzKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXN9fTtjb25zdCBPTnQ9ZnVuY3Rpb24gaShzKXtmdW5jdGlvbiB1KGQpe3JldHVybiBuZXcgWnBlKGQscyl9cmV0dXJuIHUudGVuc2lvbj1mdW5jdGlvbihkKXtyZXR1cm4gaSgrZCl9LHV9KDApO2Z1bmN0aW9uIGUyZShpLHMpe3RoaXMuX2NvbnRleHQ9aSx0aGlzLl9rPSgxLXMpLzZ9ZTJlLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihpLHMpe3N3aXRjaChpPStpLHM9K3MsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmhYKHRoaXMsaSxzKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXN9fTtjb25zdCBOTnQ9ZnVuY3Rpb24gaShzKXtmdW5jdGlvbiB1KGQpe3JldHVybiBuZXcgZTJlKGQscyl9cmV0dXJuIHUudGVuc2lvbj1mdW5jdGlvbihkKXtyZXR1cm4gaSgrZCl9LHV9KDApO2Z1bmN0aW9uIHQyZShpLHMsdSl7dmFyIGQ9aS5feDEscD1pLl95MSx2PWkuX3gyLGI9aS5feTI7aWYoaS5fbDAxX2E+SWcpe3ZhciB5PTIqaS5fbDAxXzJhKzMqaS5fbDAxX2EqaS5fbDEyX2EraS5fbDEyXzJhLFQ9MyppLl9sMDFfYSooaS5fbDAxX2EraS5fbDEyX2EpO2Q9KGQqeS1pLl94MCppLl9sMTJfMmEraS5feDIqaS5fbDAxXzJhKS9ULHA9KHAqeS1pLl95MCppLl9sMTJfMmEraS5feTIqaS5fbDAxXzJhKS9UfWlmKGkuX2wyM19hPklnKXt2YXIgXz0yKmkuX2wyM18yYSszKmkuX2wyM19hKmkuX2wxMl9hK2kuX2wxMl8yYSxBPTMqaS5fbDIzX2EqKGkuX2wyM19hK2kuX2wxMl9hKTt2PSh2Kl8raS5feDEqaS5fbDIzXzJhLXMqaS5fbDEyXzJhKS9BLGI9KGIqXytpLl95MSppLl9sMjNfMmEtdSppLl9sMTJfMmEpL0F9aS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGQscCx2LGIsaS5feDIsaS5feTIpfWZ1bmN0aW9uIFFGZShpLHMpe3RoaXMuX2NvbnRleHQ9aSx0aGlzLl9hbHBoYT1zfVFGZS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihpLHMpe2lmKGk9K2kscz0rcyx0aGlzLl9wb2ludCl7dmFyIHU9dGhpcy5feDItaSxkPXRoaXMuX3kyLXM7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyh1KnUrZCpkLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGkscyk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaSxzKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OnQyZSh0aGlzLGkscyk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9c319O2NvbnN0IFBOdD1mdW5jdGlvbiBpKHMpe2Z1bmN0aW9uIHUoZCl7cmV0dXJuIHM/bmV3IFFGZShkLHMpOm5ldyBKcGUoZCwwKX1yZXR1cm4gdS5hbHBoYT1mdW5jdGlvbihkKXtyZXR1cm4gaSgrZCl9LHV9KC41KTtmdW5jdGlvbiBKRmUoaSxzKXt0aGlzLl9jb250ZXh0PWksdGhpcy5fYWxwaGE9c31KRmUucHJvdG90eXBlPXthcmVhU3RhcnQ6bTksYXJlYUVuZDptOSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMzp7dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSk7YnJlYWt9fX0scG9pbnQ6ZnVuY3Rpb24oaSxzKXtpZihpPStpLHM9K3MsdGhpcy5fcG9pbnQpe3ZhciB1PXRoaXMuX3gyLWksZD10aGlzLl95Mi1zO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3codSp1K2QqZCx0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9aSx0aGlzLl95Mz1zO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PWksdGhpcy5feTQ9cyk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9aSx0aGlzLl95NT1zO2JyZWFrO2RlZmF1bHQ6dDJlKHRoaXMsaSxzKTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1zfX07Y29uc3QgQk50PWZ1bmN0aW9uIGkocyl7ZnVuY3Rpb24gdShkKXtyZXR1cm4gcz9uZXcgSkZlKGQscyk6bmV3IFpwZShkLDApfXJldHVybiB1LmFscGhhPWZ1bmN0aW9uKGQpe3JldHVybiBpKCtkKX0sdX0oLjUpO2Z1bmN0aW9uIFpGZShpLHMpe3RoaXMuX2NvbnRleHQ9aSx0aGlzLl9hbHBoYT1zfVpGZS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxzKXtpZihpPStpLHM9K3MsdGhpcy5fcG9pbnQpe3ZhciB1PXRoaXMuX3gyLWksZD10aGlzLl95Mi1zO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3codSp1K2QqZCx0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6dDJlKHRoaXMsaSxzKTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1zfX07Y29uc3QgRk50PWZ1bmN0aW9uIGkocyl7ZnVuY3Rpb24gdShkKXtyZXR1cm4gcz9uZXcgWkZlKGQscyk6bmV3IGUyZShkLDApfXJldHVybiB1LmFscGhhPWZ1bmN0aW9uKGQpe3JldHVybiBpKCtkKX0sdX0oLjUpO2Z1bmN0aW9uIGVSZShpKXt0aGlzLl9jb250ZXh0PWl9ZVJlLnByb3RvdHlwZT17YXJlYVN0YXJ0Om05LGFyZWFFbmQ6bTksbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbihpLHMpe2k9K2kscz0rcyx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyhpLHMpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKGkscykpfX07ZnVuY3Rpb24gUk50KGkpe3JldHVybiBuZXcgZVJlKGkpfWZ1bmN0aW9uIHRSZShpKXtyZXR1cm4gaTwwPy0xOjF9ZnVuY3Rpb24gblJlKGkscyx1KXt2YXIgZD1pLl94MS1pLl94MCxwPXMtaS5feDEsdj0oaS5feTEtaS5feTApLyhkfHxwPDAmJi0wKSxiPSh1LWkuX3kxKS8ocHx8ZDwwJiYtMCkseT0odipwK2IqZCkvKGQrcCk7cmV0dXJuKHRSZSh2KSt0UmUoYikpKk1hdGgubWluKE1hdGguYWJzKHYpLE1hdGguYWJzKGIpLC41Kk1hdGguYWJzKHkpKXx8MH1mdW5jdGlvbiByUmUoaSxzKXt2YXIgdT1pLl94MS1pLl94MDtyZXR1cm4gdT8oMyooaS5feTEtaS5feTApL3UtcykvMjpzfWZ1bmN0aW9uIG4yZShpLHMsdSl7dmFyIGQ9aS5feDAscD1pLl95MCx2PWkuX3gxLGI9aS5feTEseT0odi1kKS8zO2kuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhkK3kscCt5KnMsdi15LGIteSp1LHYsYil9ZnVuY3Rpb24gZlgoaSl7dGhpcy5fY29udGV4dD1pfWZYLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzpuMmUodGhpcyx0aGlzLl90MCxyUmUodGhpcyx0aGlzLl90MCkpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxzKXt2YXIgdT1OYU47aWYoaT0raSxzPStzLCEoaT09PXRoaXMuX3gxJiZzPT09dGhpcy5feTEpKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oaSxzKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhpLHMpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLG4yZSh0aGlzLHJSZSh0aGlzLHU9blJlKHRoaXMsaSxzKSksdSk7YnJlYWs7ZGVmYXVsdDpuMmUodGhpcyx0aGlzLl90MCx1PW5SZSh0aGlzLGkscykpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9cyx0aGlzLl90MD11fX19O2Z1bmN0aW9uIGlSZShpKXt0aGlzLl9jb250ZXh0PW5ldyBzUmUoaSl9KGlSZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShmWC5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbihpLHMpe2ZYLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMscyxpKX07ZnVuY3Rpb24gc1JlKGkpe3RoaXMuX2NvbnRleHQ9aX1zUmUucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24oaSxzKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhzLGkpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24oaSxzKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhzLGkpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGkscyx1LGQscCx2KXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8ocyxpLGQsdSx2LHApfX07ZnVuY3Rpb24gak50KGkpe3JldHVybiBuZXcgZlgoaSl9ZnVuY3Rpb24gJE50KGkpe3JldHVybiBuZXcgaVJlKGkpfWZ1bmN0aW9uIGFSZShpKXt0aGlzLl9jb250ZXh0PWl9YVJlLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciBpPXRoaXMuX3gscz10aGlzLl95LHU9aS5sZW5ndGg7aWYodSlpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGlbMF0sc1swXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaVswXSxzWzBdKSx1PT09Mil0aGlzLl9jb250ZXh0LmxpbmVUbyhpWzFdLHNbMV0pO2Vsc2UgZm9yKHZhciBkPW9SZShpKSxwPW9SZShzKSx2PTAsYj0xO2I8dTsrK3YsKytiKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhkWzBdW3ZdLHBbMF1bdl0sZFsxXVt2XSxwWzFdW3ZdLGlbYl0sc1tiXSk7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ1PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKGkscyl7dGhpcy5feC5wdXNoKCtpKSx0aGlzLl95LnB1c2goK3MpfX07ZnVuY3Rpb24gb1JlKGkpe3ZhciBzLHU9aS5sZW5ndGgtMSxkLHA9bmV3IEFycmF5KHUpLHY9bmV3IEFycmF5KHUpLGI9bmV3IEFycmF5KHUpO2ZvcihwWzBdPTAsdlswXT0yLGJbMF09aVswXSsyKmlbMV0scz0xO3M8dS0xOysrcylwW3NdPTEsdltzXT00LGJbc109NCppW3NdKzIqaVtzKzFdO2ZvcihwW3UtMV09Mix2W3UtMV09NyxiW3UtMV09OCppW3UtMV0raVt1XSxzPTE7czx1OysrcylkPXBbc10vdltzLTFdLHZbc10tPWQsYltzXS09ZCpiW3MtMV07Zm9yKHBbdS0xXT1iW3UtMV0vdlt1LTFdLHM9dS0yO3M+PTA7LS1zKXBbc109KGJbc10tcFtzKzFdKS92W3NdO2Zvcih2W3UtMV09KGlbdV0rcFt1LTFdKS8yLHM9MDtzPHUtMTsrK3MpdltzXT0yKmlbcysxXS1wW3MrMV07cmV0dXJuW3Asdl19ZnVuY3Rpb24gek50KGkpe3JldHVybiBuZXcgYVJlKGkpfWZ1bmN0aW9uIGRYKGkscyl7dGhpcy5fY29udGV4dD1pLHRoaXMuX3Q9c31kWC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmdGhpcy5fcG9pbnQ9PT0yJiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbihpLHMpe3N3aXRjaChpPStpLHM9K3MsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oaSxzKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhpLHMpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6e2lmKHRoaXMuX3Q8PTApdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCxzKSx0aGlzLl9jb250ZXh0LmxpbmVUbyhpLHMpO2Vsc2V7dmFyIHU9dGhpcy5feCooMS10aGlzLl90KStpKnRoaXMuX3Q7dGhpcy5fY29udGV4dC5saW5lVG8odSx0aGlzLl95KSx0aGlzLl9jb250ZXh0LmxpbmVUbyh1LHMpfWJyZWFrfX10aGlzLl94PWksdGhpcy5feT1zfX07ZnVuY3Rpb24gcU50KGkpe3JldHVybiBuZXcgZFgoaSwuNSl9ZnVuY3Rpb24gSE50KGkpe3JldHVybiBuZXcgZFgoaSwwKX1mdW5jdGlvbiBWTnQoaSl7cmV0dXJuIG5ldyBkWChpLDEpfWZ1bmN0aW9uIFJGKGkscyx1KXt0aGlzLms9aSx0aGlzLng9cyx0aGlzLnk9dX1SRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlJGLHNjYWxlOmZ1bmN0aW9uKGkpe3JldHVybiBpPT09MT90aGlzOm5ldyBSRih0aGlzLmsqaSx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGkscyl7cmV0dXJuIGk9PT0wJnM9PT0wP3RoaXM6bmV3IFJGKHRoaXMuayx0aGlzLngrdGhpcy5rKmksdGhpcy55K3RoaXMuaypzKX0sYXBwbHk6ZnVuY3Rpb24oaSl7cmV0dXJuW2lbMF0qdGhpcy5rK3RoaXMueCxpWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oaSl7cmV0dXJuIGkqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGkpe3JldHVybiBpKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihpKXtyZXR1cm5bKGlbMF0tdGhpcy54KS90aGlzLmssKGlbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGkpe3JldHVybihpLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGkpe3JldHVybihpLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihpKXtyZXR1cm4gaS5jb3B5KCkuZG9tYWluKGkucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChpLmludmVydCxpKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGkpe3JldHVybiBpLmNvcHkoKS5kb21haW4oaS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGkuaW52ZXJ0LGkpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX0sUkYucHJvdG90eXBlOy8qISBAbGljZW5zZSBET01QdXJpZnkgMy4wLjkgfCAoYykgQ3VyZTUzIGFuZCBvdGhlciBjb250cmlidXRvcnMgfCBSZWxlYXNlZCB1bmRlciB0aGUgQXBhY2hlIGxpY2Vuc2UgMi4wIGFuZCBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIDIuMCB8IGdpdGh1Yi5jb20vY3VyZTUzL0RPTVB1cmlmeS9ibG9iLzMuMC45L0xJQ0VOU0UgKi9jb25zdHtlbnRyaWVzOmNSZSxzZXRQcm90b3R5cGVPZjp1UmUsaXNGcm96ZW46VU50LGdldFByb3RvdHlwZU9mOkdOdCxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6S050fT1PYmplY3Q7bGV0e2ZyZWV6ZTpFcCxzZWFsOkQzLGNyZWF0ZTpsUmV9PU9iamVjdCx7YXBwbHk6cjJlLGNvbnN0cnVjdDppMmV9PXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdDtFcHx8KEVwPWZ1bmN0aW9uKHMpe3JldHVybiBzfSksRDN8fChEMz1mdW5jdGlvbihzKXtyZXR1cm4gc30pLHIyZXx8KHIyZT1mdW5jdGlvbihzLHUsZCl7cmV0dXJuIHMuYXBwbHkodSxkKX0pLGkyZXx8KGkyZT1mdW5jdGlvbihzLHUpe3JldHVybiBuZXcgcyguLi51KX0pO2NvbnN0IGdYPXNtKEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSxoUmU9c20oQXJyYXkucHJvdG90eXBlLnBvcCksakY9c20oQXJyYXkucHJvdG90eXBlLnB1c2gpLHBYPXNtKFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2UpLHMyZT1zbShTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nKSxXTnQ9c20oU3RyaW5nLnByb3RvdHlwZS5tYXRjaCksJEY9c20oU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSxZTnQ9c20oU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mKSxYTnQ9c20oU3RyaW5nLnByb3RvdHlwZS50cmltKSxJMz1zbShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KSxpbT1zbShSZWdFeHAucHJvdG90eXBlLnRlc3QpLHpGPVFOdChUeXBlRXJyb3IpO2Z1bmN0aW9uIHNtKGkpe3JldHVybiBmdW5jdGlvbihzKXtmb3IodmFyIHU9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheSh1PjE/dS0xOjApLHA9MTtwPHU7cCsrKWRbcC0xXT1hcmd1bWVudHNbcF07cmV0dXJuIHIyZShpLHMsZCl9fWZ1bmN0aW9uIFFOdChpKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCx1PW5ldyBBcnJheShzKSxkPTA7ZDxzO2QrKyl1W2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gaTJlKGksdSl9fWZ1bmN0aW9uIENjKGkscyl7bGV0IHU9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOnBYO3VSZSYmdVJlKGksbnVsbCk7bGV0IGQ9cy5sZW5ndGg7Zm9yKDtkLS07KXtsZXQgcD1zW2RdO2lmKHR5cGVvZiBwPT0ic3RyaW5nIil7Y29uc3Qgdj11KHApO3YhPT1wJiYoVU50KHMpfHwoc1tkXT12KSxwPXYpfWlbcF09ITB9cmV0dXJuIGl9ZnVuY3Rpb24gSk50KGkpe2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKUkzKGkscyl8fChpW3NdPW51bGwpO3JldHVybiBpfWZ1bmN0aW9uIFRDKGkpe2NvbnN0IHM9bFJlKG51bGwpO2Zvcihjb25zdFt1LGRdb2YgY1JlKGkpKUkzKGksdSkmJihBcnJheS5pc0FycmF5KGQpP3NbdV09Sk50KGQpOmQmJnR5cGVvZiBkPT0ib2JqZWN0IiYmZC5jb25zdHJ1Y3Rvcj09PU9iamVjdD9zW3VdPVRDKGQpOnNbdV09ZCk7cmV0dXJuIHN9ZnVuY3Rpb24gYlgoaSxzKXtmb3IoO2khPT1udWxsOyl7Y29uc3QgZD1LTnQoaSxzKTtpZihkKXtpZihkLmdldClyZXR1cm4gc20oZC5nZXQpO2lmKHR5cGVvZiBkLnZhbHVlPT0iZnVuY3Rpb24iKXJldHVybiBzbShkLnZhbHVlKX1pPUdOdChpKX1mdW5jdGlvbiB1KCl7cmV0dXJuIG51bGx9cmV0dXJuIHV9Y29uc3QgZlJlPUVwKFsiYSIsImFiYnIiLCJhY3JvbnltIiwiYWRkcmVzcyIsImFyZWEiLCJhcnRpY2xlIiwiYXNpZGUiLCJhdWRpbyIsImIiLCJiZGkiLCJiZG8iLCJiaWciLCJibGluayIsImJsb2NrcXVvdGUiLCJib2R5IiwiYnIiLCJidXR0b24iLCJjYW52YXMiLCJjYXB0aW9uIiwiY2VudGVyIiwiY2l0ZSIsImNvZGUiLCJjb2wiLCJjb2xncm91cCIsImNvbnRlbnQiLCJkYXRhIiwiZGF0YWxpc3QiLCJkZCIsImRlY29yYXRvciIsImRlbCIsImRldGFpbHMiLCJkZm4iLCJkaWFsb2ciLCJkaXIiLCJkaXYiLCJkbCIsImR0IiwiZWxlbWVudCIsImVtIiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9udCIsImZvb3RlciIsImZvcm0iLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkIiwiaGVhZGVyIiwiaGdyb3VwIiwiaHIiLCJodG1sIiwiaSIsImltZyIsImlucHV0IiwiaW5zIiwia2JkIiwibGFiZWwiLCJsZWdlbmQiLCJsaSIsIm1haW4iLCJtYXAiLCJtYXJrIiwibWFycXVlZSIsIm1lbnUiLCJtZW51aXRlbSIsIm1ldGVyIiwibmF2Iiwibm9iciIsIm9sIiwib3B0Z3JvdXAiLCJvcHRpb24iLCJvdXRwdXQiLCJwIiwicGljdHVyZSIsInByZSIsInByb2dyZXNzIiwicSIsInJwIiwicnQiLCJydWJ5IiwicyIsInNhbXAiLCJzZWN0aW9uIiwic2VsZWN0Iiwic2hhZG93Iiwic21hbGwiLCJzb3VyY2UiLCJzcGFjZXIiLCJzcGFuIiwic3RyaWtlIiwic3Ryb25nIiwic3R5bGUiLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGVtcGxhdGUiLCJ0ZXh0YXJlYSIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpbWUiLCJ0ciIsInRyYWNrIiwidHQiLCJ1IiwidWwiLCJ2YXIiLCJ2aWRlbyIsIndiciJdKSxhMmU9RXAoWyJzdmciLCJhIiwiYWx0Z2x5cGgiLCJhbHRnbHlwaGRlZiIsImFsdGdseXBoaXRlbSIsImFuaW1hdGVjb2xvciIsImFuaW1hdGVtb3Rpb24iLCJhbmltYXRldHJhbnNmb3JtIiwiY2lyY2xlIiwiY2xpcHBhdGgiLCJkZWZzIiwiZGVzYyIsImVsbGlwc2UiLCJmaWx0ZXIiLCJmb250IiwiZyIsImdseXBoIiwiZ2x5cGhyZWYiLCJoa2VybiIsImltYWdlIiwibGluZSIsImxpbmVhcmdyYWRpZW50IiwibWFya2VyIiwibWFzayIsIm1ldGFkYXRhIiwibXBhdGgiLCJwYXRoIiwicGF0dGVybiIsInBvbHlnb24iLCJwb2x5bGluZSIsInJhZGlhbGdyYWRpZW50IiwicmVjdCIsInN0b3AiLCJzdHlsZSIsInN3aXRjaCIsInN5bWJvbCIsInRleHQiLCJ0ZXh0cGF0aCIsInRpdGxlIiwidHJlZiIsInRzcGFuIiwidmlldyIsInZrZXJuIl0pLG8yZT1FcChbImZlQmxlbmQiLCJmZUNvbG9yTWF0cml4IiwiZmVDb21wb25lbnRUcmFuc2ZlciIsImZlQ29tcG9zaXRlIiwiZmVDb252b2x2ZU1hdHJpeCIsImZlRGlmZnVzZUxpZ2h0aW5nIiwiZmVEaXNwbGFjZW1lbnRNYXAiLCJmZURpc3RhbnRMaWdodCIsImZlRHJvcFNoYWRvdyIsImZlRmxvb2QiLCJmZUZ1bmNBIiwiZmVGdW5jQiIsImZlRnVuY0ciLCJmZUZ1bmNSIiwiZmVHYXVzc2lhbkJsdXIiLCJmZUltYWdlIiwiZmVNZXJnZSIsImZlTWVyZ2VOb2RlIiwiZmVNb3JwaG9sb2d5IiwiZmVPZmZzZXQiLCJmZVBvaW50TGlnaHQiLCJmZVNwZWN1bGFyTGlnaHRpbmciLCJmZVNwb3RMaWdodCIsImZlVGlsZSIsImZlVHVyYnVsZW5jZSJdKSxaTnQ9RXAoWyJhbmltYXRlIiwiY29sb3ItcHJvZmlsZSIsImN1cnNvciIsImRpc2NhcmQiLCJmb250LWZhY2UiLCJmb250LWZhY2UtZm9ybWF0IiwiZm9udC1mYWNlLW5hbWUiLCJmb250LWZhY2Utc3JjIiwiZm9udC1mYWNlLXVyaSIsImZvcmVpZ25vYmplY3QiLCJoYXRjaCIsImhhdGNocGF0aCIsIm1lc2giLCJtZXNoZ3JhZGllbnQiLCJtZXNocGF0Y2giLCJtZXNocm93IiwibWlzc2luZy1nbHlwaCIsInNjcmlwdCIsInNldCIsInNvbGlkY29sb3IiLCJ1bmtub3duIiwidXNlIl0pLGMyZT1FcChbIm1hdGgiLCJtZW5jbG9zZSIsIm1lcnJvciIsIm1mZW5jZWQiLCJtZnJhYyIsIm1nbHlwaCIsIm1pIiwibWxhYmVsZWR0ciIsIm1tdWx0aXNjcmlwdHMiLCJtbiIsIm1vIiwibW92ZXIiLCJtcGFkZGVkIiwibXBoYW50b20iLCJtcm9vdCIsIm1yb3ciLCJtcyIsIm1zcGFjZSIsIm1zcXJ0IiwibXN0eWxlIiwibXN1YiIsIm1zdXAiLCJtc3Vic3VwIiwibXRhYmxlIiwibXRkIiwibXRleHQiLCJtdHIiLCJtdW5kZXIiLCJtdW5kZXJvdmVyIiwibXByZXNjcmlwdHMiXSksZVB0PUVwKFsibWFjdGlvbiIsIm1hbGlnbmdyb3VwIiwibWFsaWdubWFyayIsIm1sb25nZGl2IiwibXNjYXJyaWVzIiwibXNjYXJyeSIsIm1zZ3JvdXAiLCJtc3RhY2siLCJtc2xpbmUiLCJtc3JvdyIsInNlbWFudGljcyIsImFubm90YXRpb24iLCJhbm5vdGF0aW9uLXhtbCIsIm1wcmVzY3JpcHRzIiwibm9uZSJdKSxkUmU9RXAoWyIjdGV4dCJdKSxnUmU9RXAoWyJhY2NlcHQiLCJhY3Rpb24iLCJhbGlnbiIsImFsdCIsImF1dG9jYXBpdGFsaXplIiwiYXV0b2NvbXBsZXRlIiwiYXV0b3BpY3R1cmVpbnBpY3R1cmUiLCJhdXRvcGxheSIsImJhY2tncm91bmQiLCJiZ2NvbG9yIiwiYm9yZGVyIiwiY2FwdHVyZSIsImNlbGxwYWRkaW5nIiwiY2VsbHNwYWNpbmciLCJjaGVja2VkIiwiY2l0ZSIsImNsYXNzIiwiY2xlYXIiLCJjb2xvciIsImNvbHMiLCJjb2xzcGFuIiwiY29udHJvbHMiLCJjb250cm9sc2xpc3QiLCJjb29yZHMiLCJjcm9zc29yaWdpbiIsImRhdGV0aW1lIiwiZGVjb2RpbmciLCJkZWZhdWx0IiwiZGlyIiwiZGlzYWJsZWQiLCJkaXNhYmxlcGljdHVyZWlucGljdHVyZSIsImRpc2FibGVyZW1vdGVwbGF5YmFjayIsImRvd25sb2FkIiwiZHJhZ2dhYmxlIiwiZW5jdHlwZSIsImVudGVya2V5aGludCIsImZhY2UiLCJmb3IiLCJoZWFkZXJzIiwiaGVpZ2h0IiwiaGlkZGVuIiwiaGlnaCIsImhyZWYiLCJocmVmbGFuZyIsImlkIiwiaW5wdXRtb2RlIiwiaW50ZWdyaXR5IiwiaXNtYXAiLCJraW5kIiwibGFiZWwiLCJsYW5nIiwibGlzdCIsImxvYWRpbmciLCJsb29wIiwibG93IiwibWF4IiwibWF4bGVuZ3RoIiwibWVkaWEiLCJtZXRob2QiLCJtaW4iLCJtaW5sZW5ndGgiLCJtdWx0aXBsZSIsIm11dGVkIiwibmFtZSIsIm5vbmNlIiwibm9zaGFkZSIsIm5vdmFsaWRhdGUiLCJub3dyYXAiLCJvcGVuIiwib3B0aW11bSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInBsYXlzaW5saW5lIiwicG9zdGVyIiwicHJlbG9hZCIsInB1YmRhdGUiLCJyYWRpb2dyb3VwIiwicmVhZG9ubHkiLCJyZWwiLCJyZXF1aXJlZCIsInJldiIsInJldmVyc2VkIiwicm9sZSIsInJvd3MiLCJyb3dzcGFuIiwic3BlbGxjaGVjayIsInNjb3BlIiwic2VsZWN0ZWQiLCJzaGFwZSIsInNpemUiLCJzaXplcyIsInNwYW4iLCJzcmNsYW5nIiwic3RhcnQiLCJzcmMiLCJzcmNzZXQiLCJzdGVwIiwic3R5bGUiLCJzdW1tYXJ5IiwidGFiaW5kZXgiLCJ0aXRsZSIsInRyYW5zbGF0ZSIsInR5cGUiLCJ1c2VtYXAiLCJ2YWxpZ24iLCJ2YWx1ZSIsIndpZHRoIiwieG1sbnMiLCJzbG90Il0pLHUyZT1FcChbImFjY2VudC1oZWlnaHQiLCJhY2N1bXVsYXRlIiwiYWRkaXRpdmUiLCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJhc2NlbnQiLCJhdHRyaWJ1dGVuYW1lIiwiYXR0cmlidXRldHlwZSIsImF6aW11dGgiLCJiYXNlZnJlcXVlbmN5IiwiYmFzZWxpbmUtc2hpZnQiLCJiZWdpbiIsImJpYXMiLCJieSIsImNsYXNzIiwiY2xpcCIsImNsaXBwYXRodW5pdHMiLCJjbGlwLXBhdGgiLCJjbGlwLXJ1bGUiLCJjb2xvciIsImNvbG9yLWludGVycG9sYXRpb24iLCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiLCJjb2xvci1wcm9maWxlIiwiY29sb3ItcmVuZGVyaW5nIiwiY3giLCJjeSIsImQiLCJkeCIsImR5IiwiZGlmZnVzZWNvbnN0YW50IiwiZGlyZWN0aW9uIiwiZGlzcGxheSIsImRpdmlzb3IiLCJkdXIiLCJlZGdlbW9kZSIsImVsZXZhdGlvbiIsImVuZCIsImZpbGwiLCJmaWxsLW9wYWNpdHkiLCJmaWxsLXJ1bGUiLCJmaWx0ZXIiLCJmaWx0ZXJ1bml0cyIsImZsb29kLWNvbG9yIiwiZmxvb2Qtb3BhY2l0eSIsImZvbnQtZmFtaWx5IiwiZm9udC1zaXplIiwiZm9udC1zaXplLWFkanVzdCIsImZvbnQtc3RyZXRjaCIsImZvbnQtc3R5bGUiLCJmb250LXZhcmlhbnQiLCJmb250LXdlaWdodCIsImZ4IiwiZnkiLCJnMSIsImcyIiwiZ2x5cGgtbmFtZSIsImdseXBocmVmIiwiZ3JhZGllbnR1bml0cyIsImdyYWRpZW50dHJhbnNmb3JtIiwiaGVpZ2h0IiwiaHJlZiIsImlkIiwiaW1hZ2UtcmVuZGVyaW5nIiwiaW4iLCJpbjIiLCJrIiwiazEiLCJrMiIsImszIiwiazQiLCJrZXJuaW5nIiwia2V5cG9pbnRzIiwia2V5c3BsaW5lcyIsImtleXRpbWVzIiwibGFuZyIsImxlbmd0aGFkanVzdCIsImxldHRlci1zcGFjaW5nIiwia2VybmVsbWF0cml4Iiwia2VybmVsdW5pdGxlbmd0aCIsImxpZ2h0aW5nLWNvbG9yIiwibG9jYWwiLCJtYXJrZXItZW5kIiwibWFya2VyLW1pZCIsIm1hcmtlci1zdGFydCIsIm1hcmtlcmhlaWdodCIsIm1hcmtlcnVuaXRzIiwibWFya2Vyd2lkdGgiLCJtYXNrY29udGVudHVuaXRzIiwibWFza3VuaXRzIiwibWF4IiwibWFzayIsIm1lZGlhIiwibWV0aG9kIiwibW9kZSIsIm1pbiIsIm5hbWUiLCJudW1vY3RhdmVzIiwib2Zmc2V0Iiwib3BlcmF0b3IiLCJvcGFjaXR5Iiwib3JkZXIiLCJvcmllbnQiLCJvcmllbnRhdGlvbiIsIm9yaWdpbiIsIm92ZXJmbG93IiwicGFpbnQtb3JkZXIiLCJwYXRoIiwicGF0aGxlbmd0aCIsInBhdHRlcm5jb250ZW50dW5pdHMiLCJwYXR0ZXJudHJhbnNmb3JtIiwicGF0dGVybnVuaXRzIiwicG9pbnRzIiwicHJlc2VydmVhbHBoYSIsInByZXNlcnZlYXNwZWN0cmF0aW8iLCJwcmltaXRpdmV1bml0cyIsInIiLCJyeCIsInJ5IiwicmFkaXVzIiwicmVmeCIsInJlZnkiLCJyZXBlYXRjb3VudCIsInJlcGVhdGR1ciIsInJlc3RhcnQiLCJyZXN1bHQiLCJyb3RhdGUiLCJzY2FsZSIsInNlZWQiLCJzaGFwZS1yZW5kZXJpbmciLCJzcGVjdWxhcmNvbnN0YW50Iiwic3BlY3VsYXJleHBvbmVudCIsInNwcmVhZG1ldGhvZCIsInN0YXJ0b2Zmc2V0Iiwic3RkZGV2aWF0aW9uIiwic3RpdGNodGlsZXMiLCJzdG9wLWNvbG9yIiwic3RvcC1vcGFjaXR5Iiwic3Ryb2tlLWRhc2hhcnJheSIsInN0cm9rZS1kYXNob2Zmc2V0Iiwic3Ryb2tlLWxpbmVjYXAiLCJzdHJva2UtbGluZWpvaW4iLCJzdHJva2UtbWl0ZXJsaW1pdCIsInN0cm9rZS1vcGFjaXR5Iiwic3Ryb2tlIiwic3Ryb2tlLXdpZHRoIiwic3R5bGUiLCJzdXJmYWNlc2NhbGUiLCJzeXN0ZW1sYW5ndWFnZSIsInRhYmluZGV4IiwidGFyZ2V0eCIsInRhcmdldHkiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm0tb3JpZ2luIiwidGV4dC1hbmNob3IiLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LXJlbmRlcmluZyIsInRleHRsZW5ndGgiLCJ0eXBlIiwidTEiLCJ1MiIsInVuaWNvZGUiLCJ2YWx1ZXMiLCJ2aWV3Ym94IiwidmlzaWJpbGl0eSIsInZlcnNpb24iLCJ2ZXJ0LWFkdi15IiwidmVydC1vcmlnaW4teCIsInZlcnQtb3JpZ2luLXkiLCJ3aWR0aCIsIndvcmQtc3BhY2luZyIsIndyYXAiLCJ3cml0aW5nLW1vZGUiLCJ4Y2hhbm5lbHNlbGVjdG9yIiwieWNoYW5uZWxzZWxlY3RvciIsIngiLCJ4MSIsIngyIiwieG1sbnMiLCJ5IiwieTEiLCJ5MiIsInoiLCJ6b29tYW5kcGFuIl0pLHBSZT1FcChbImFjY2VudCIsImFjY2VudHVuZGVyIiwiYWxpZ24iLCJiZXZlbGxlZCIsImNsb3NlIiwiY29sdW1uc2FsaWduIiwiY29sdW1ubGluZXMiLCJjb2x1bW5zcGFuIiwiZGVub21hbGlnbiIsImRlcHRoIiwiZGlyIiwiZGlzcGxheSIsImRpc3BsYXlzdHlsZSIsImVuY29kaW5nIiwiZmVuY2UiLCJmcmFtZSIsImhlaWdodCIsImhyZWYiLCJpZCIsImxhcmdlb3AiLCJsZW5ndGgiLCJsaW5ldGhpY2tuZXNzIiwibHNwYWNlIiwibHF1b3RlIiwibWF0aGJhY2tncm91bmQiLCJtYXRoY29sb3IiLCJtYXRoc2l6ZSIsIm1hdGh2YXJpYW50IiwibWF4c2l6ZSIsIm1pbnNpemUiLCJtb3ZhYmxlbGltaXRzIiwibm90YXRpb24iLCJudW1hbGlnbiIsIm9wZW4iLCJyb3dhbGlnbiIsInJvd2xpbmVzIiwicm93c3BhY2luZyIsInJvd3NwYW4iLCJyc3BhY2UiLCJycXVvdGUiLCJzY3JpcHRsZXZlbCIsInNjcmlwdG1pbnNpemUiLCJzY3JpcHRzaXplbXVsdGlwbGllciIsInNlbGVjdGlvbiIsInNlcGFyYXRvciIsInNlcGFyYXRvcnMiLCJzdHJldGNoeSIsInN1YnNjcmlwdHNoaWZ0Iiwic3Vwc2NyaXB0c2hpZnQiLCJzeW1tZXRyaWMiLCJ2b2Zmc2V0Iiwid2lkdGgiLCJ4bWxucyJdKSxtWD1FcChbInhsaW5rOmhyZWYiLCJ4bWw6aWQiLCJ4bGluazp0aXRsZSIsInhtbDpzcGFjZSIsInhtbG5zOnhsaW5rIl0pLHRQdD1EMygvXHtce1tcd1xXXSp8W1x3XFddKlx9XH0vZ20pLG5QdD1EMygvPCVbXHdcV10qfFtcd1xXXSolPi9nbSksclB0PUQzKC9cJHtbXHdcV10qfS9nbSksaVB0PUQzKC9eZGF0YS1bXC1cdy5cdTAwQjctXHVGRkZGXS8pLHNQdD1EMygvXmFyaWEtW1wtXHddKyQvKSxiUmU9RDMoL14oPzooPzooPzpmfGh0KXRwcz98bWFpbHRvfHRlbHxjYWxsdG98c21zfGNpZHx4bXBwKTp8W15hLXpdfFthLXorLlwtXSsoPzpbXmEteisuXC06XXwkKSkvaSksYVB0PUQzKC9eKD86XHcrc2NyaXB0fGRhdGEpOi9pKSxvUHQ9RDMoL1tcdTAwMDAtXHUwMDIwXHUwMEEwXHUxNjgwXHUxODBFXHUyMDAwLVx1MjAyOVx1MjA1Rlx1MzAwMF0vZyksbVJlPUQzKC9eaHRtbCQvaSk7dmFyIHZSZT1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxNVVNUQUNIRV9FWFBSOnRQdCxFUkJfRVhQUjpuUHQsVE1QTElUX0VYUFI6clB0LERBVEFfQVRUUjppUHQsQVJJQV9BVFRSOnNQdCxJU19BTExPV0VEX1VSSTpiUmUsSVNfU0NSSVBUX09SX0RBVEE6YVB0LEFUVFJfV0hJVEVTUEFDRTpvUHQsRE9DVFlQRV9OQU1FOm1SZX0pO2NvbnN0IGNQdD1mdW5jdGlvbigpe3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9udWxsOndpbmRvd30sdVB0PWZ1bmN0aW9uKHMsdSl7aWYodHlwZW9mIHMhPSJvYmplY3QifHx0eXBlb2Ygcy5jcmVhdGVQb2xpY3khPSJmdW5jdGlvbiIpcmV0dXJuIG51bGw7bGV0IGQ9bnVsbDtjb25zdCBwPSJkYXRhLXR0LXBvbGljeS1zdWZmaXgiO3UmJnUuaGFzQXR0cmlidXRlKHApJiYoZD11LmdldEF0dHJpYnV0ZShwKSk7Y29uc3Qgdj0iZG9tcHVyaWZ5IisoZD8iIyIrZDoiIik7dHJ5e3JldHVybiBzLmNyZWF0ZVBvbGljeSh2LHtjcmVhdGVIVE1MKGIpe3JldHVybiBifSxjcmVhdGVTY3JpcHRVUkwoYil7cmV0dXJuIGJ9fSl9Y2F0Y2h7cmV0dXJuIGNvbnNvbGUud2FybigiVHJ1c3RlZFR5cGVzIHBvbGljeSAiK3YrIiBjb3VsZCBub3QgYmUgY3JlYXRlZC4iKSxudWxsfX07ZnVuY3Rpb24gd1JlKCl7bGV0IGk9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOmNQdCgpO2NvbnN0IHM9YXM9PndSZShhcyk7aWYocy52ZXJzaW9uPSIzLjAuOSIscy5yZW1vdmVkPVtdLCFpfHwhaS5kb2N1bWVudHx8aS5kb2N1bWVudC5ub2RlVHlwZSE9PTkpcmV0dXJuIHMuaXNTdXBwb3J0ZWQ9ITEscztsZXR7ZG9jdW1lbnQ6dX09aTtjb25zdCBkPXUscD1kLmN1cnJlbnRTY3JpcHQse0RvY3VtZW50RnJhZ21lbnQ6dixIVE1MVGVtcGxhdGVFbGVtZW50OmIsTm9kZTp5LEVsZW1lbnQ6VCxOb2RlRmlsdGVyOl8sTmFtZWROb2RlTWFwOkE9aS5OYW1lZE5vZGVNYXB8fGkuTW96TmFtZWRBdHRyTWFwLEhUTUxGb3JtRWxlbWVudDpQLERPTVBhcnNlcjpSLHRydXN0ZWRUeXBlczpGfT1pLGo9VC5wcm90b3R5cGUsSz1iWChqLCJjbG9uZU5vZGUiKSxlZT1iWChqLCJuZXh0U2libGluZyIpLGllPWJYKGosImNoaWxkTm9kZXMiKSxvZT1iWChqLCJwYXJlbnROb2RlIik7aWYodHlwZW9mIGI9PSJmdW5jdGlvbiIpe2NvbnN0IGFzPXUuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTthcy5jb250ZW50JiZhcy5jb250ZW50Lm93bmVyRG9jdW1lbnQmJih1PWFzLmNvbnRlbnQub3duZXJEb2N1bWVudCl9bGV0IHBlLGJlPSIiO2NvbnN0e2ltcGxlbWVudGF0aW9uOmFlLGNyZWF0ZU5vZGVJdGVyYXRvcjpuZSxjcmVhdGVEb2N1bWVudEZyYWdtZW50OnNlLGdldEVsZW1lbnRzQnlUYWdOYW1lOmRlfT11LHtpbXBvcnROb2RlOlh9PWQ7bGV0IGdlPXt9O3MuaXNTdXBwb3J0ZWQ9dHlwZW9mIGNSZT09ImZ1bmN0aW9uIiYmdHlwZW9mIG9lPT0iZnVuY3Rpb24iJiZhZSYmYWUuY3JlYXRlSFRNTERvY3VtZW50IT09dm9pZCAwO2NvbnN0e01VU1RBQ0hFX0VYUFI6VyxFUkJfRVhQUjp4ZSxUTVBMSVRfRVhQUjpVLERBVEFfQVRUUjpGZSxBUklBX0FUVFI6UGUsSVNfU0NSSVBUX09SX0RBVEE6amUsQVRUUl9XSElURVNQQUNFOkllfT12UmU7bGV0e0lTX0FMTE9XRURfVVJJOlNlfT12UmUsQ2U9bnVsbDtjb25zdCBrZT1DYyh7fSxbLi4uZlJlLC4uLmEyZSwuLi5vMmUsLi4uYzJlLC4uLmRSZV0pO2xldCBLZT1udWxsO2NvbnN0IEZ0PUNjKHt9LFsuLi5nUmUsLi4udTJlLC4uLnBSZSwuLi5tWF0pO2xldCBOZT1PYmplY3Quc2VhbChsUmUobnVsbCx7dGFnTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhdHRyaWJ1dGVOYW1lQ2hlY2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOm51bGx9LGFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50czp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6ITF9fSkpLGduPW51bGwsX3Q9bnVsbCxFdD0hMCxHdD0hMCxsbj0hMSx4dD0hMCxQdD0hMSxRZT0hMSxEdD0hMSxrdD0hMSxPbj0hMSxodD0hMSx6cj0hMSx5dD0hMCxqaT0hMTtjb25zdCB4aT0idXNlci1jb250ZW50LSI7bGV0IE1hPSEwLHpzPSExLGFvPXt9LFRyPW51bGw7Y29uc3QgRm49Q2Moe30sWyJhbm5vdGF0aW9uLXhtbCIsImF1ZGlvIiwiY29sZ3JvdXAiLCJkZXNjIiwiZm9yZWlnbm9iamVjdCIsImhlYWQiLCJpZnJhbWUiLCJtYXRoIiwibWkiLCJtbiIsIm1vIiwibXMiLCJtdGV4dCIsIm5vZW1iZWQiLCJub2ZyYW1lcyIsIm5vc2NyaXB0IiwicGxhaW50ZXh0Iiwic2NyaXB0Iiwic3R5bGUiLCJzdmciLCJ0ZW1wbGF0ZSIsInRoZWFkIiwidGl0bGUiLCJ2aWRlbyIsInhtcCJdKTtsZXQgcW49bnVsbDtjb25zdCBVbj1DYyh7fSxbImF1ZGlvIiwidmlkZW8iLCJpbWciLCJzb3VyY2UiLCJpbWFnZSIsInRyYWNrIl0pO2xldCBBdD1udWxsO2NvbnN0IHd0PUNjKHt9LFsiYWx0IiwiY2xhc3MiLCJmb3IiLCJpZCIsImxhYmVsIiwibmFtZSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInJvbGUiLCJzdW1tYXJ5IiwidGl0bGUiLCJ2YWx1ZSIsInN0eWxlIiwieG1sbnMiXSksb249Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLGZuPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsQW49Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2xldCBvbz1Bbixqbz0hMSwkbz1udWxsO2NvbnN0IFBhPUNjKHt9LFtvbixmbixBbl0sczJlKTtsZXQgd289bnVsbDtjb25zdCBfcz1bImFwcGxpY2F0aW9uL3hodG1sK3htbCIsInRleHQvaHRtbCJdLHRsPSJ0ZXh0L2h0bWwiO2xldCBkYT1udWxsLGowPW51bGw7Y29uc3QgcG09dS5jcmVhdGVFbGVtZW50KCJmb3JtIiksTWw9ZnVuY3Rpb24od24pe3JldHVybiB3biBpbnN0YW5jZW9mIFJlZ0V4cHx8d24gaW5zdGFuY2VvZiBGdW5jdGlvbn0sWGM9ZnVuY3Rpb24oKXtsZXQgd249YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9O2lmKCEoajAmJmowPT09d24pKXtpZigoIXdufHx0eXBlb2Ygd24hPSJvYmplY3QiKSYmKHduPXt9KSx3bj1UQyh3biksd289X3MuaW5kZXhPZih3bi5QQVJTRVJfTUVESUFfVFlQRSk9PT0tMT90bDp3bi5QQVJTRVJfTUVESUFfVFlQRSxkYT13bz09PSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiP3MyZTpwWCxDZT1JMyh3biwiQUxMT1dFRF9UQUdTIik/Q2Moe30sd24uQUxMT1dFRF9UQUdTLGRhKTprZSxLZT1JMyh3biwiQUxMT1dFRF9BVFRSIik/Q2Moe30sd24uQUxMT1dFRF9BVFRSLGRhKTpGdCwkbz1JMyh3biwiQUxMT1dFRF9OQU1FU1BBQ0VTIik/Q2Moe30sd24uQUxMT1dFRF9OQU1FU1BBQ0VTLHMyZSk6UGEsQXQ9STMod24sIkFERF9VUklfU0FGRV9BVFRSIik/Q2MoVEMod3QpLHduLkFERF9VUklfU0FGRV9BVFRSLGRhKTp3dCxxbj1JMyh3biwiQUREX0RBVEFfVVJJX1RBR1MiKT9DYyhUQyhVbiksd24uQUREX0RBVEFfVVJJX1RBR1MsZGEpOlVuLFRyPUkzKHduLCJGT1JCSURfQ09OVEVOVFMiKT9DYyh7fSx3bi5GT1JCSURfQ09OVEVOVFMsZGEpOkZuLGduPUkzKHduLCJGT1JCSURfVEFHUyIpP0NjKHt9LHduLkZPUkJJRF9UQUdTLGRhKTp7fSxfdD1JMyh3biwiRk9SQklEX0FUVFIiKT9DYyh7fSx3bi5GT1JCSURfQVRUUixkYSk6e30sYW89STMod24sIlVTRV9QUk9GSUxFUyIpP3duLlVTRV9QUk9GSUxFUzohMSxFdD13bi5BTExPV19BUklBX0FUVFIhPT0hMSxHdD13bi5BTExPV19EQVRBX0FUVFIhPT0hMSxsbj13bi5BTExPV19VTktOT1dOX1BST1RPQ09MU3x8ITEseHQ9d24uQUxMT1dfU0VMRl9DTE9TRV9JTl9BVFRSIT09ITEsUHQ9d24uU0FGRV9GT1JfVEVNUExBVEVTfHwhMSxRZT13bi5XSE9MRV9ET0NVTUVOVHx8ITEsT249d24uUkVUVVJOX0RPTXx8ITEsaHQ9d24uUkVUVVJOX0RPTV9GUkFHTUVOVHx8ITEsenI9d24uUkVUVVJOX1RSVVNURURfVFlQRXx8ITEsa3Q9d24uRk9SQ0VfQk9EWXx8ITEseXQ9d24uU0FOSVRJWkVfRE9NIT09ITEsamk9d24uU0FOSVRJWkVfTkFNRURfUFJPUFN8fCExLE1hPXduLktFRVBfQ09OVEVOVCE9PSExLHpzPXduLklOX1BMQUNFfHwhMSxTZT13bi5BTExPV0VEX1VSSV9SRUdFWFB8fGJSZSxvbz13bi5OQU1FU1BBQ0V8fEFuLE5lPXduLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HfHx7fSx3bi5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmTWwod24uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSYmKE5lLnRhZ05hbWVDaGVjaz13bi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spLHduLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZNbCh3bi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spJiYoTmUuYXR0cmlidXRlTmFtZUNoZWNrPXduLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayksd24uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJnR5cGVvZiB3bi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM9PSJib29sZWFuIiYmKE5lLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cz13bi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMpLFB0JiYoR3Q9ITEpLGh0JiYoT249ITApLGFvJiYoQ2U9Q2Moe30sZFJlKSxLZT1bXSxhby5odG1sPT09ITAmJihDYyhDZSxmUmUpLENjKEtlLGdSZSkpLGFvLnN2Zz09PSEwJiYoQ2MoQ2UsYTJlKSxDYyhLZSx1MmUpLENjKEtlLG1YKSksYW8uc3ZnRmlsdGVycz09PSEwJiYoQ2MoQ2UsbzJlKSxDYyhLZSx1MmUpLENjKEtlLG1YKSksYW8ubWF0aE1sPT09ITAmJihDYyhDZSxjMmUpLENjKEtlLHBSZSksQ2MoS2UsbVgpKSksd24uQUREX1RBR1MmJihDZT09PWtlJiYoQ2U9VEMoQ2UpKSxDYyhDZSx3bi5BRERfVEFHUyxkYSkpLHduLkFERF9BVFRSJiYoS2U9PT1GdCYmKEtlPVRDKEtlKSksQ2MoS2Usd24uQUREX0FUVFIsZGEpKSx3bi5BRERfVVJJX1NBRkVfQVRUUiYmQ2MoQXQsd24uQUREX1VSSV9TQUZFX0FUVFIsZGEpLHduLkZPUkJJRF9DT05URU5UUyYmKFRyPT09Rm4mJihUcj1UQyhUcikpLENjKFRyLHduLkZPUkJJRF9DT05URU5UUyxkYSkpLE1hJiYoQ2VbIiN0ZXh0Il09ITApLFFlJiZDYyhDZSxbImh0bWwiLCJoZWFkIiwiYm9keSJdKSxDZS50YWJsZSYmKENjKENlLFsidGJvZHkiXSksZGVsZXRlIGduLnRib2R5KSx3bi5UUlVTVEVEX1RZUEVTX1BPTElDWSl7aWYodHlwZW9mIHduLlRSVVNURURfVFlQRVNfUE9MSUNZLmNyZWF0ZUhUTUwhPSJmdW5jdGlvbiIpdGhyb3cgekYoJ1RSVVNURURfVFlQRVNfUE9MSUNZIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG11c3QgcHJvdmlkZSBhICJjcmVhdGVIVE1MIiBob29rLicpO2lmKHR5cGVvZiB3bi5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVTY3JpcHRVUkwhPSJmdW5jdGlvbiIpdGhyb3cgekYoJ1RSVVNURURfVFlQRVNfUE9MSUNZIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG11c3QgcHJvdmlkZSBhICJjcmVhdGVTY3JpcHRVUkwiIGhvb2suJyk7cGU9d24uVFJVU1RFRF9UWVBFU19QT0xJQ1ksYmU9cGUuY3JlYXRlSFRNTCgiIil9ZWxzZSBwZT09PXZvaWQgMCYmKHBlPXVQdChGLHApKSxwZSE9PW51bGwmJnR5cGVvZiBiZT09InN0cmluZyImJihiZT1wZS5jcmVhdGVIVE1MKCIiKSk7RXAmJkVwKHduKSxqMD13bn19LEJjPUNjKHt9LFsibWkiLCJtbyIsIm1uIiwibXMiLCJtdGV4dCJdKSxqYT1DYyh7fSxbImZvcmVpZ25vYmplY3QiLCJkZXNjIiwidGl0bGUiLCJhbm5vdGF0aW9uLXhtbCJdKSxPdT1DYyh7fSxbInRpdGxlIiwic3R5bGUiLCJmb250IiwiYSIsInNjcmlwdCJdKSxTYT1DYyh7fSxbLi4uYTJlLC4uLm8yZSwuLi5aTnRdKSxQbz1DYyh7fSxbLi4uYzJlLC4uLmVQdF0pLEZjPWZ1bmN0aW9uKHduKXtsZXQgWnI9b2Uod24pOyghWnJ8fCFaci50YWdOYW1lKSYmKFpyPXtuYW1lc3BhY2VVUkk6b28sdGFnTmFtZToidGVtcGxhdGUifSk7Y29uc3QgWmk9cFgod24udGFnTmFtZSksbnU9cFgoWnIudGFnTmFtZSk7cmV0dXJuICRvW3duLm5hbWVzcGFjZVVSSV0/d24ubmFtZXNwYWNlVVJJPT09Zm4/WnIubmFtZXNwYWNlVVJJPT09QW4/Wmk9PT0ic3ZnIjpaci5uYW1lc3BhY2VVUkk9PT1vbj9aaT09PSJzdmciJiYobnU9PT0iYW5ub3RhdGlvbi14bWwifHxCY1tudV0pOiEhU2FbWmldOnduLm5hbWVzcGFjZVVSST09PW9uP1pyLm5hbWVzcGFjZVVSST09PUFuP1ppPT09Im1hdGgiOlpyLm5hbWVzcGFjZVVSST09PWZuP1ppPT09Im1hdGgiJiZqYVtudV06ISFQb1taaV06d24ubmFtZXNwYWNlVVJJPT09QW4/WnIubmFtZXNwYWNlVVJJPT09Zm4mJiFqYVtudV18fFpyLm5hbWVzcGFjZVVSST09PW9uJiYhQmNbbnVdPyExOiFQb1taaV0mJihPdVtaaV18fCFTYVtaaV0pOiEhKHdvPT09ImFwcGxpY2F0aW9uL3hodG1sK3htbCImJiRvW3duLm5hbWVzcGFjZVVSSV0pOiExfSx4YT1mdW5jdGlvbih3bil7akYocy5yZW1vdmVkLHtlbGVtZW50OndufSk7dHJ5e3duLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQod24pfWNhdGNoe3duLnJlbW92ZSgpfX0sQmE9ZnVuY3Rpb24od24sWnIpe3RyeXtqRihzLnJlbW92ZWQse2F0dHJpYnV0ZTpaci5nZXRBdHRyaWJ1dGVOb2RlKHduKSxmcm9tOlpyfSl9Y2F0Y2h7akYocy5yZW1vdmVkLHthdHRyaWJ1dGU6bnVsbCxmcm9tOlpyfSl9aWYoWnIucmVtb3ZlQXR0cmlidXRlKHduKSx3bj09PSJpcyImJiFLZVt3bl0paWYoT258fGh0KXRyeXt4YShacil9Y2F0Y2h7fWVsc2UgdHJ5e1pyLnNldEF0dHJpYnV0ZSh3biwiIil9Y2F0Y2h7fX0sZ2E9ZnVuY3Rpb24od24pe2xldCBacj1udWxsLFppPW51bGw7aWYoa3Qpd249IjxyZW1vdmU+PC9yZW1vdmU+Iit3bjtlbHNle2NvbnN0IERsPVdOdCh3biwvXltcclxuXHQgXSsvKTtaaT1EbCYmRGxbMF19d289PT0iYXBwbGljYXRpb24veGh0bWwreG1sIiYmb289PT1BbiYmKHduPSc8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+PGhlYWQ+PC9oZWFkPjxib2R5Picrd24rIjwvYm9keT48L2h0bWw+Iik7Y29uc3QgbnU9cGU/cGUuY3JlYXRlSFRNTCh3bik6d247aWYob289PT1Bbil0cnl7WnI9bmV3IFIoKS5wYXJzZUZyb21TdHJpbmcobnUsd28pfWNhdGNoe31pZighWnJ8fCFaci5kb2N1bWVudEVsZW1lbnQpe1pyPWFlLmNyZWF0ZURvY3VtZW50KG9vLCJ0ZW1wbGF0ZSIsbnVsbCk7dHJ5e1pyLmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUw9am8/YmU6bnV9Y2F0Y2h7fX1jb25zdCB2dT1aci5ib2R5fHxaci5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIHduJiZaaSYmdnUuaW5zZXJ0QmVmb3JlKHUuY3JlYXRlVGV4dE5vZGUoWmkpLHZ1LmNoaWxkTm9kZXNbMF18fG51bGwpLG9vPT09QW4/ZGUuY2FsbChacixRZT8iaHRtbCI6ImJvZHkiKVswXTpRZT9aci5kb2N1bWVudEVsZW1lbnQ6dnV9LGtoPWZ1bmN0aW9uKHduKXtyZXR1cm4gbmUuY2FsbCh3bi5vd25lckRvY3VtZW50fHx3bix3bixfLlNIT1dfRUxFTUVOVHxfLlNIT1dfQ09NTUVOVHxfLlNIT1dfVEVYVCxudWxsKX0sbHU9ZnVuY3Rpb24od24pe3JldHVybiB3biBpbnN0YW5jZW9mIFAmJih0eXBlb2Ygd24ubm9kZU5hbWUhPSJzdHJpbmcifHx0eXBlb2Ygd24udGV4dENvbnRlbnQhPSJzdHJpbmcifHx0eXBlb2Ygd24ucmVtb3ZlQ2hpbGQhPSJmdW5jdGlvbiJ8fCEod24uYXR0cmlidXRlcyBpbnN0YW5jZW9mIEEpfHx0eXBlb2Ygd24ucmVtb3ZlQXR0cmlidXRlIT0iZnVuY3Rpb24ifHx0eXBlb2Ygd24uc2V0QXR0cmlidXRlIT0iZnVuY3Rpb24ifHx0eXBlb2Ygd24ubmFtZXNwYWNlVVJJIT0ic3RyaW5nInx8dHlwZW9mIHduLmluc2VydEJlZm9yZSE9ImZ1bmN0aW9uInx8dHlwZW9mIHduLmhhc0NoaWxkTm9kZXMhPSJmdW5jdGlvbiIpfSxvNT1mdW5jdGlvbih3bil7cmV0dXJuIHR5cGVvZiB5PT0iZnVuY3Rpb24iJiZ3biBpbnN0YW5jZW9mIHl9LFdoPWZ1bmN0aW9uKHduLFpyLFppKXtnZVt3bl0mJmdYKGdlW3duXSxudT0+e251LmNhbGwocyxacixaaSxqMCl9KX0sb2Q9ZnVuY3Rpb24od24pe2xldCBacj1udWxsO2lmKFdoKCJiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzIix3bixudWxsKSxsdSh3bikpcmV0dXJuIHhhKHduKSwhMDtjb25zdCBaaT1kYSh3bi5ub2RlTmFtZSk7aWYoV2goInVwb25TYW5pdGl6ZUVsZW1lbnQiLHduLHt0YWdOYW1lOlppLGFsbG93ZWRUYWdzOkNlfSksd24uaGFzQ2hpbGROb2RlcygpJiYhbzUod24uZmlyc3RFbGVtZW50Q2hpbGQpJiZpbSgvPFsvXHddL2csd24uaW5uZXJIVE1MKSYmaW0oLzxbL1x3XS9nLHduLnRleHRDb250ZW50KSlyZXR1cm4geGEod24pLCEwO2lmKCFDZVtaaV18fGduW1ppXSl7aWYoIWduW1ppXSYmY2QoWmkpJiYoTmUudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZpbShOZS50YWdOYW1lQ2hlY2ssWmkpfHxOZS50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmTmUudGFnTmFtZUNoZWNrKFppKSkpcmV0dXJuITE7aWYoTWEmJiFUcltaaV0pe2NvbnN0IG51PW9lKHduKXx8d24ucGFyZW50Tm9kZSx2dT1pZSh3bil8fHduLmNoaWxkTm9kZXM7aWYodnUmJm51KXtjb25zdCBEbD12dS5sZW5ndGg7Zm9yKGxldCBZaD1EbC0xO1loPj0wOy0tWWgpbnUuaW5zZXJ0QmVmb3JlKEsodnVbWWhdLCEwKSxlZSh3bikpfX1yZXR1cm4geGEod24pLCEwfXJldHVybiB3biBpbnN0YW5jZW9mIFQmJiFGYyh3bil8fChaaT09PSJub3NjcmlwdCJ8fFppPT09Im5vZW1iZWQifHxaaT09PSJub2ZyYW1lcyIpJiZpbSgvPFwvbm8oc2NyaXB0fGVtYmVkfGZyYW1lcykvaSx3bi5pbm5lckhUTUwpPyh4YSh3biksITApOihQdCYmd24ubm9kZVR5cGU9PT0zJiYoWnI9d24udGV4dENvbnRlbnQsZ1goW1cseGUsVV0sbnU9Pntacj0kRihacixudSwiICIpfSksd24udGV4dENvbnRlbnQhPT1aciYmKGpGKHMucmVtb3ZlZCx7ZWxlbWVudDp3bi5jbG9uZU5vZGUoKX0pLHduLnRleHRDb250ZW50PVpyKSksV2goImFmdGVyU2FuaXRpemVFbGVtZW50cyIsd24sbnVsbCksITEpfSxHZD1mdW5jdGlvbih3bixacixaaSl7aWYoeXQmJihacj09PSJpZCJ8fFpyPT09Im5hbWUiKSYmKFppIGluIHV8fFppIGluIHBtKSlyZXR1cm4hMTtpZighKEd0JiYhX3RbWnJdJiZpbShGZSxacikpKXtpZighKEV0JiZpbShQZSxacikpKXtpZighS2VbWnJdfHxfdFtacl0pe2lmKCEoY2Qod24pJiYoTmUudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZpbShOZS50YWdOYW1lQ2hlY2ssd24pfHxOZS50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmTmUudGFnTmFtZUNoZWNrKHduKSkmJihOZS5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJmltKE5lLmF0dHJpYnV0ZU5hbWVDaGVjayxacil8fE5lLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZOZS5hdHRyaWJ1dGVOYW1lQ2hlY2soWnIpKXx8WnI9PT0iaXMiJiZOZS5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMmJihOZS50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJmltKE5lLnRhZ05hbWVDaGVjayxaaSl8fE5lLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZOZS50YWdOYW1lQ2hlY2soWmkpKSkpcmV0dXJuITF9ZWxzZSBpZighQXRbWnJdKXtpZighaW0oU2UsJEYoWmksSWUsIiIpKSl7aWYoISgoWnI9PT0ic3JjInx8WnI9PT0ieGxpbms6aHJlZiJ8fFpyPT09ImhyZWYiKSYmd24hPT0ic2NyaXB0IiYmWU50KFppLCJkYXRhOiIpPT09MCYmcW5bd25dKSl7aWYoIShsbiYmIWltKGplLCRGKFppLEllLCIiKSkpKXtpZihaaSlyZXR1cm4hMX19fX19fXJldHVybiEwfSxjZD1mdW5jdGlvbih3bil7cmV0dXJuIHduIT09ImFubm90YXRpb24teG1sIiYmd24uaW5kZXhPZigiLSIpPjB9LEtkPWZ1bmN0aW9uKHduKXtXaCgiYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzIix3bixudWxsKTtjb25zdHthdHRyaWJ1dGVzOlpyfT13bjtpZighWnIpcmV0dXJuO2NvbnN0IFppPXthdHRyTmFtZToiIixhdHRyVmFsdWU6IiIsa2VlcEF0dHI6ITAsYWxsb3dlZEF0dHJpYnV0ZXM6S2V9O2xldCBudT1aci5sZW5ndGg7Zm9yKDtudS0tOyl7Y29uc3QgdnU9WnJbbnVdLHtuYW1lOkRsLG5hbWVzcGFjZVVSSTpZaCx2YWx1ZTp3MX09dnUsJDA9ZGEoRGwpO2xldCBXaT1EbD09PSJ2YWx1ZSI/dzE6WE50KHcxKTtpZihaaS5hdHRyTmFtZT0kMCxaaS5hdHRyVmFsdWU9V2ksWmkua2VlcEF0dHI9ITAsWmkuZm9yY2VLZWVwQXR0cj12b2lkIDAsV2goInVwb25TYW5pdGl6ZUF0dHJpYnV0ZSIsd24sWmkpLFdpPVppLmF0dHJWYWx1ZSxaaS5mb3JjZUtlZXBBdHRyfHwoQmEoRGwsd24pLCFaaS5rZWVwQXR0cikpY29udGludWU7aWYoIXh0JiZpbSgvXC8+L2ksV2kpKXtCYShEbCx3bik7Y29udGludWV9UHQmJmdYKFtXLHhlLFVdLFFhPT57V2k9JEYoV2ksUWEsIiAiKX0pO2NvbnN0IEJzPWRhKHduLm5vZGVOYW1lKTtpZihHZChCcywkMCxXaSkpe2lmKGppJiYoJDA9PT0iaWQifHwkMD09PSJuYW1lIikmJihCYShEbCx3biksV2k9eGkrV2kpLHBlJiZ0eXBlb2YgRj09Im9iamVjdCImJnR5cGVvZiBGLmdldEF0dHJpYnV0ZVR5cGU9PSJmdW5jdGlvbiImJiFZaClzd2l0Y2goRi5nZXRBdHRyaWJ1dGVUeXBlKEJzLCQwKSl7Y2FzZSJUcnVzdGVkSFRNTCI6e1dpPXBlLmNyZWF0ZUhUTUwoV2kpO2JyZWFrfWNhc2UiVHJ1c3RlZFNjcmlwdFVSTCI6e1dpPXBlLmNyZWF0ZVNjcmlwdFVSTChXaSk7YnJlYWt9fXRyeXtZaD93bi5zZXRBdHRyaWJ1dGVOUyhZaCxEbCxXaSk6d24uc2V0QXR0cmlidXRlKERsLFdpKSxoUmUocy5yZW1vdmVkKX1jYXRjaHt9fX1XaCgiYWZ0ZXJTYW5pdGl6ZUF0dHJpYnV0ZXMiLHduLG51bGwpfSwkZz1mdW5jdGlvbiBhcyh3bil7bGV0IFpyPW51bGw7Y29uc3QgWmk9a2god24pO2ZvcihXaCgiYmVmb3JlU2FuaXRpemVTaGFkb3dET00iLHduLG51bGwpO1pyPVppLm5leHROb2RlKCk7KVdoKCJ1cG9uU2FuaXRpemVTaGFkb3dOb2RlIixacixudWxsKSwhb2QoWnIpJiYoWnIuY29udGVudCBpbnN0YW5jZW9mIHYmJmFzKFpyLmNvbnRlbnQpLEtkKFpyKSk7V2goImFmdGVyU2FuaXRpemVTaGFkb3dET00iLHduLG51bGwpfTtyZXR1cm4gcy5zYW5pdGl6ZT1mdW5jdGlvbihhcyl7bGV0IHduPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxacj1udWxsLFppPW51bGwsbnU9bnVsbCx2dT1udWxsO2lmKGpvPSFhcyxqbyYmKGFzPSI8IS0tPiIpLHR5cGVvZiBhcyE9InN0cmluZyImJiFvNShhcykpaWYodHlwZW9mIGFzLnRvU3RyaW5nPT0iZnVuY3Rpb24iKXtpZihhcz1hcy50b1N0cmluZygpLHR5cGVvZiBhcyE9InN0cmluZyIpdGhyb3cgekYoImRpcnR5IGlzIG5vdCBhIHN0cmluZywgYWJvcnRpbmciKX1lbHNlIHRocm93IHpGKCJ0b1N0cmluZyBpcyBub3QgYSBmdW5jdGlvbiIpO2lmKCFzLmlzU3VwcG9ydGVkKXJldHVybiBhcztpZihEdHx8WGMod24pLHMucmVtb3ZlZD1bXSx0eXBlb2YgYXM9PSJzdHJpbmciJiYoenM9ITEpLHpzKXtpZihhcy5ub2RlTmFtZSl7Y29uc3QgdzE9ZGEoYXMubm9kZU5hbWUpO2lmKCFDZVt3MV18fGduW3cxXSl0aHJvdyB6Rigicm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZSIpfX1lbHNlIGlmKGFzIGluc3RhbmNlb2YgeSlacj1nYSgiPCEtLS0tPiIpLFppPVpyLm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZShhcywhMCksWmkubm9kZVR5cGU9PT0xJiZaaS5ub2RlTmFtZT09PSJCT0RZInx8Wmkubm9kZU5hbWU9PT0iSFRNTCI/WnI9Wmk6WnIuYXBwZW5kQ2hpbGQoWmkpO2Vsc2V7aWYoIU9uJiYhUHQmJiFRZSYmYXMuaW5kZXhPZigiPCIpPT09LTEpcmV0dXJuIHBlJiZ6cj9wZS5jcmVhdGVIVE1MKGFzKTphcztpZihacj1nYShhcyksIVpyKXJldHVybiBPbj9udWxsOnpyP2JlOiIifVpyJiZrdCYmeGEoWnIuZmlyc3RDaGlsZCk7Y29uc3QgRGw9a2goenM/YXM6WnIpO2Zvcig7bnU9RGwubmV4dE5vZGUoKTspb2QobnUpfHwobnUuY29udGVudCBpbnN0YW5jZW9mIHYmJiRnKG51LmNvbnRlbnQpLEtkKG51KSk7aWYoenMpcmV0dXJuIGFzO2lmKE9uKXtpZihodClmb3IodnU9c2UuY2FsbChaci5vd25lckRvY3VtZW50KTtaci5maXJzdENoaWxkOyl2dS5hcHBlbmRDaGlsZChaci5maXJzdENoaWxkKTtlbHNlIHZ1PVpyO3JldHVybihLZS5zaGFkb3dyb290fHxLZS5zaGFkb3dyb290bW9kZSkmJih2dT1YLmNhbGwoZCx2dSwhMCkpLHZ1fWxldCBZaD1RZT9aci5vdXRlckhUTUw6WnIuaW5uZXJIVE1MO3JldHVybiBRZSYmQ2VbIiFkb2N0eXBlIl0mJlpyLm93bmVyRG9jdW1lbnQmJlpyLm93bmVyRG9jdW1lbnQuZG9jdHlwZSYmWnIub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUmJmltKG1SZSxaci5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSkmJihZaD0iPCFET0NUWVBFICIrWnIub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUrYD4KYCtZaCksUHQmJmdYKFtXLHhlLFVdLHcxPT57WWg9JEYoWWgsdzEsIiAiKX0pLHBlJiZ6cj9wZS5jcmVhdGVIVE1MKFloKTpZaH0scy5zZXRDb25maWc9ZnVuY3Rpb24oKXtsZXQgYXM9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9O1hjKGFzKSxEdD0hMH0scy5jbGVhckNvbmZpZz1mdW5jdGlvbigpe2owPW51bGwsRHQ9ITF9LHMuaXNWYWxpZEF0dHJpYnV0ZT1mdW5jdGlvbihhcyx3bixacil7ajB8fFhjKHt9KTtjb25zdCBaaT1kYShhcyksbnU9ZGEod24pO3JldHVybiBHZChaaSxudSxacil9LHMuYWRkSG9vaz1mdW5jdGlvbihhcyx3bil7dHlwZW9mIHduPT0iZnVuY3Rpb24iJiYoZ2VbYXNdPWdlW2FzXXx8W10sakYoZ2VbYXNdLHduKSl9LHMucmVtb3ZlSG9vaz1mdW5jdGlvbihhcyl7aWYoZ2VbYXNdKXJldHVybiBoUmUoZ2VbYXNdKX0scy5yZW1vdmVIb29rcz1mdW5jdGlvbihhcyl7Z2VbYXNdJiYoZ2VbYXNdPVtdKX0scy5yZW1vdmVBbGxIb29rcz1mdW5jdGlvbigpe2dlPXt9fSxzfXZhciBoRD13UmUoKTtjb25zdCBmRD0vPGJyXHMqXC8/Pi9naSxsUHQ9aT0+aT9rUmUoaSkucmVwbGFjZSgvXFxuL2csIiNiciMiKS5zcGxpdCgiI2JyIyIpOlsiIl0saFB0PSgoKT0+e2xldCBpPSExO3JldHVybigpPT57aXx8KGZQdCgpLGk9ITApfX0pKCk7ZnVuY3Rpb24gZlB0KCl7Y29uc3QgaT0iZGF0YS10ZW1wLWhyZWYtdGFyZ2V0IjtoRC5hZGRIb29rKCJiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXMiLHM9PntzLnRhZ05hbWU9PT0iQSImJnMuaGFzQXR0cmlidXRlKCJ0YXJnZXQiKSYmcy5zZXRBdHRyaWJ1dGUoaSxzLmdldEF0dHJpYnV0ZSgidGFyZ2V0Iil8fCIiKX0pLGhELmFkZEhvb2soImFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzIixzPT57cy50YWdOYW1lPT09IkEiJiZzLmhhc0F0dHJpYnV0ZShpKSYmKHMuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLHMuZ2V0QXR0cmlidXRlKGkpfHwiIikscy5yZW1vdmVBdHRyaWJ1dGUoaSkscy5nZXRBdHRyaWJ1dGUoInRhcmdldCIpPT09Il9ibGFuayImJnMuc2V0QXR0cmlidXRlKCJyZWwiLCJub29wZW5lciIpKX0pfWNvbnN0IHlSZT1pPT4oaFB0KCksaEQuc2FuaXRpemUoaSkpLHhSZT0oaSxzKT0+e3ZhciB1O2lmKCgodT1zLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOnUuaHRtbExhYmVscykhPT0hMSl7Y29uc3QgZD1zLnNlY3VyaXR5TGV2ZWw7ZD09PSJhbnRpc2NyaXB0Inx8ZD09PSJzdHJpY3QiP2k9eVJlKGkpOmQhPT0ibG9vc2UiJiYoaT1rUmUoaSksaT1pLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLGk9aS5yZXBsYWNlKC89L2csIiZlcXVhbHM7IiksaT1iUHQoaSkpfXJldHVybiBpfSxZZj0oaSxzKT0+aSYmKHMuZG9tcHVyaWZ5Q29uZmlnP2k9aEQuc2FuaXRpemUoeFJlKGkscykscy5kb21wdXJpZnlDb25maWcpLnRvU3RyaW5nKCk6aT1oRC5zYW5pdGl6ZSh4UmUoaSxzKSx7Rk9SQklEX1RBR1M6WyJzdHlsZSJdfSkudG9TdHJpbmcoKSxpKSxkUHQ9KGkscyk9PnR5cGVvZiBpPT0ic3RyaW5nIj9ZZihpLHMpOmkuZmxhdCgpLm1hcCh1PT5ZZih1LHMpKSxnUHQ9aT0+ZkQudGVzdChpKSxwUHQ9aT0+aS5zcGxpdChmRCksYlB0PWk9PmkucmVwbGFjZSgvI2JyIy9nLCI8YnIvPiIpLGtSZT1pPT5pLnJlcGxhY2UoZkQsIiNiciMiKSxtUHQ9aT0+e2xldCBzPSIiO3JldHVybiBpJiYocz13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxzPXMucmVwbGFjZUFsbCgvXCgvZywiXFwoIikscz1zLnJlcGxhY2VBbGwoL1wpL2csIlxcKSIpKSxzfSxmMT1pPT4hKGk9PT0hMXx8WyJmYWxzZSIsIm51bGwiLCIwIl0uaW5jbHVkZXMoU3RyaW5nKGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSksdlB0PWZ1bmN0aW9uKC4uLmkpe2NvbnN0IHM9aS5maWx0ZXIodT0+IWlzTmFOKHUpKTtyZXR1cm4gTWF0aC5tYXgoLi4ucyl9LHdQdD1mdW5jdGlvbiguLi5pKXtjb25zdCBzPWkuZmlsdGVyKHU9PiFpc05hTih1KSk7cmV0dXJuIE1hdGgubWluKC4uLnMpfSxxRj1mdW5jdGlvbihpKXtjb25zdCBzPWkuc3BsaXQoLygsKS8pLHU9W107Zm9yKGxldCBkPTA7ZDxzLmxlbmd0aDtkKyspe2xldCBwPXNbZF07aWYocD09PSIsIiYmZD4wJiZkKzE8cy5sZW5ndGgpe2NvbnN0IHY9c1tkLTFdLGI9c1tkKzFdO3lQdCh2LGIpJiYocD12KyIsIitiLGQrKyx1LnBvcCgpKX11LnB1c2goeFB0KHApKX1yZXR1cm4gdS5qb2luKCIiKX0sbDJlPShpLHMpPT5NYXRoLm1heCgwLGkuc3BsaXQocykubGVuZ3RoLTEpLHlQdD0oaSxzKT0+e2NvbnN0IHU9bDJlKGksIn4iKSxkPWwyZShzLCJ+Iik7cmV0dXJuIHU9PT0xJiZkPT09MX0seFB0PWk9Pntjb25zdCBzPWwyZShpLCJ+Iik7bGV0IHU9ITE7aWYoczw9MSlyZXR1cm4gaTtzJTIhPT0wJiZpLnN0YXJ0c1dpdGgoIn4iKSYmKGk9aS5zdWJzdHJpbmcoMSksdT0hMCk7Y29uc3QgZD1bLi4uaV07bGV0IHA9ZC5pbmRleE9mKCJ+Iiksdj1kLmxhc3RJbmRleE9mKCJ+Iik7Zm9yKDtwIT09LTEmJnYhPT0tMSYmcCE9PXY7KWRbcF09IjwiLGRbdl09Ij4iLHA9ZC5pbmRleE9mKCJ+Iiksdj1kLmxhc3RJbmRleE9mKCJ+Iik7cmV0dXJuIHUmJmQudW5zaGlmdCgifiIpLGQuam9pbigiIil9LEVSZT0oKT0+d2luZG93Lk1hdGhNTEVsZW1lbnQhPT12b2lkIDAsaDJlPS9cJFwkKC4qKVwkXCQvZyxEdj1pPT57dmFyIHM7cmV0dXJuKCgocz1pLm1hdGNoKGgyZSkpPT1udWxsP3ZvaWQgMDpzLmxlbmd0aCk/PzApPjB9LEhGPWFzeW5jKGkscyk9PntpPWF3YWl0IENDKGkscyk7Y29uc3QgdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt1LmlubmVySFRNTD1pLHUuaWQ9ImthdGV4LXRlbXAiLHUuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIix1LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdS5zdHlsZS50b3A9IjAiO2NvbnN0IGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpO2Q9PW51bGx8fGQuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCJiZWZvcmVlbmQiLHUpO2NvbnN0IHA9e3dpZHRoOnUuY2xpZW50V2lkdGgsaGVpZ2h0OnUuY2xpZW50SGVpZ2h0fTtyZXR1cm4gdS5yZW1vdmUoKSxwfSxDQz1hc3luYyhpLHMpPT57aWYoIUR2KGkpKXJldHVybiBpO2lmKCFFUmUoKSYmIXMubGVnYWN5TWF0aE1MKXJldHVybiBpLnJlcGxhY2UoaDJlLCJNYXRoTUwgaXMgdW5zdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudC4iKTtjb25zdHtkZWZhdWx0OnV9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pk1WdCk7cmV0dXJuIGkuc3BsaXQoZkQpLm1hcChkPT5EdihkKT9gCiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB3aGl0ZS1zcGFjZTogbm93cmFwOyI+CiAgICAgICAgICAgICAgJHtkfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGA6YDxkaXY+JHtkfTwvZGl2PmApLmpvaW4oIiIpLnJlcGxhY2UoaDJlLChkLHApPT51LnJlbmRlclRvU3RyaW5nKHAse3Rocm93T25FcnJvcjohMCxkaXNwbGF5TW9kZTohMCxvdXRwdXQ6RVJlKCk/Im1hdGhtbCI6Imh0bWxBbmRNYXRobWwifSkucmVwbGFjZSgvXG4vZywiICIpLnJlcGxhY2UoLzxhbm5vdGF0aW9uLio8XC9hbm5vdGF0aW9uPi9nLCIiKSl9LGNpPXtnZXRSb3dzOmxQdCxzYW5pdGl6ZVRleHQ6WWYsc2FuaXRpemVUZXh0T3JBcnJheTpkUHQsaGFzQnJlYWtzOmdQdCxzcGxpdEJyZWFrczpwUHQsbGluZUJyZWFrUmVnZXg6ZkQscmVtb3ZlU2NyaXB0OnlSZSxnZXRVcmw6bVB0LGV2YWx1YXRlOmYxLGdldE1heDp2UHQsZ2V0TWluOndQdH0sdlg9e21pbjp7cjowLGc6MCxiOjAsczowLGw6MCxhOjB9LG1heDp7cjoyNTUsZzoyNTUsYjoyNTUsaDozNjAsczoxMDAsbDoxMDAsYToxfSxjbGFtcDp7cjppPT5pPj0yNTU/MjU1Omk8MD8wOmksZzppPT5pPj0yNTU/MjU1Omk8MD8wOmksYjppPT5pPj0yNTU/MjU1Omk8MD8wOmksaDppPT5pJTM2MCxzOmk9Pmk+PTEwMD8xMDA6aTwwPzA6aSxsOmk9Pmk+PTEwMD8xMDA6aTwwPzA6aSxhOmk9Pmk+PTE/MTppPDA/MDppfSx0b0xpbmVhcjppPT57Y29uc3Qgcz1pLzI1NTtyZXR1cm4gaT4uMDM5Mjg/TWF0aC5wb3coKHMrLjA1NSkvMS4wNTUsMi40KTpzLzEyLjkyfSxodWUycmdiOihpLHMsdSk9Pih1PDAmJih1Kz0xKSx1PjEmJih1LT0xKSx1PDEvNj9pKyhzLWkpKjYqdTp1PDEvMj9zOnU8Mi8zP2krKHMtaSkqKDIvMy11KSo2OmkpLGhzbDJyZ2I6KHtoOmkscyxsOnV9LGQpPT57aWYoIXMpcmV0dXJuIHUqMi41NTtpLz0zNjAscy89MTAwLHUvPTEwMDtjb25zdCBwPXU8LjU/dSooMStzKTp1K3MtdSpzLHY9Mip1LXA7c3dpdGNoKGQpe2Nhc2UiciI6cmV0dXJuIHZYLmh1ZTJyZ2IodixwLGkrMS8zKSoyNTU7Y2FzZSJnIjpyZXR1cm4gdlguaHVlMnJnYih2LHAsaSkqMjU1O2Nhc2UiYiI6cmV0dXJuIHZYLmh1ZTJyZ2IodixwLGktMS8zKSoyNTV9fSxyZ2IyaHNsOih7cjppLGc6cyxiOnV9LGQpPT57aS89MjU1LHMvPTI1NSx1Lz0yNTU7Y29uc3QgcD1NYXRoLm1heChpLHMsdSksdj1NYXRoLm1pbihpLHMsdSksYj0ocCt2KS8yO2lmKGQ9PT0ibCIpcmV0dXJuIGIqMTAwO2lmKHA9PT12KXJldHVybiAwO2NvbnN0IHk9cC12LFQ9Yj4uNT95LygyLXAtdik6eS8ocCt2KTtpZihkPT09InMiKXJldHVybiBUKjEwMDtzd2l0Y2gocCl7Y2FzZSBpOnJldHVybigocy11KS95KyhzPHU/NjowKSkqNjA7Y2FzZSBzOnJldHVybigodS1pKS95KzIpKjYwO2Nhc2UgdTpyZXR1cm4oKGktcykveSs0KSo2MDtkZWZhdWx0OnJldHVybi0xfX19LFdhPXtjaGFubmVsOnZYLGxhbmc6e2NsYW1wOihpLHMsdSk9PnM+dT9NYXRoLm1pbihzLE1hdGgubWF4KHUsaSkpOk1hdGgubWluKHUsTWF0aC5tYXgocyxpKSkscm91bmQ6aT0+TWF0aC5yb3VuZChpKjFlMTApLzFlMTB9LHVuaXQ6e2RlYzJoZXg6aT0+e2NvbnN0IHM9TWF0aC5yb3VuZChpKS50b1N0cmluZygxNik7cmV0dXJuIHMubGVuZ3RoPjE/czpgMCR7c31gfX19LHY5PXt9O2ZvcihsZXQgaT0wO2k8PTI1NTtpKyspdjlbaV09V2EudW5pdC5kZWMyaGV4KGkpO2NvbnN0IE9nPXtBTEw6MCxSR0I6MSxIU0w6Mn07Y2xhc3Mga1B0e2NvbnN0cnVjdG9yKCl7dGhpcy50eXBlPU9nLkFMTH1nZXQoKXtyZXR1cm4gdGhpcy50eXBlfXNldChzKXtpZih0aGlzLnR5cGUmJnRoaXMudHlwZSE9PXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2hhbmdlIGJvdGggUkdCIGFuZCBIU0wgY2hhbm5lbHMgYXQgdGhlIHNhbWUgdGltZSIpO3RoaXMudHlwZT1zfXJlc2V0KCl7dGhpcy50eXBlPU9nLkFMTH1pcyhzKXtyZXR1cm4gdGhpcy50eXBlPT09c319Y29uc3QgRVB0PWtQdDtjbGFzcyBUUHR7Y29uc3RydWN0b3Iocyx1KXt0aGlzLmNvbG9yPXUsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT1zLHRoaXMudHlwZT1uZXcgRVB0fXNldChzLHUpe3JldHVybiB0aGlzLmNvbG9yPXUsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT1zLHRoaXMudHlwZS50eXBlPU9nLkFMTCx0aGlzfV9lbnN1cmVIU0woKXtjb25zdCBzPXRoaXMuZGF0YSx7aDp1LHM6ZCxsOnB9PXM7dT09PXZvaWQgMCYmKHMuaD1XYS5jaGFubmVsLnJnYjJoc2wocywiaCIpKSxkPT09dm9pZCAwJiYocy5zPVdhLmNoYW5uZWwucmdiMmhzbChzLCJzIikpLHA9PT12b2lkIDAmJihzLmw9V2EuY2hhbm5lbC5yZ2IyaHNsKHMsImwiKSl9X2Vuc3VyZVJHQigpe2NvbnN0IHM9dGhpcy5kYXRhLHtyOnUsZzpkLGI6cH09czt1PT09dm9pZCAwJiYocy5yPVdhLmNoYW5uZWwuaHNsMnJnYihzLCJyIikpLGQ9PT12b2lkIDAmJihzLmc9V2EuY2hhbm5lbC5oc2wycmdiKHMsImciKSkscD09PXZvaWQgMCYmKHMuYj1XYS5jaGFubmVsLmhzbDJyZ2IocywiYiIpKX1nZXQgcigpe2NvbnN0IHM9dGhpcy5kYXRhLHU9cy5yO3JldHVybiF0aGlzLnR5cGUuaXMoT2cuSFNMKSYmdSE9PXZvaWQgMD91Oih0aGlzLl9lbnN1cmVIU0woKSxXYS5jaGFubmVsLmhzbDJyZ2IocywiciIpKX1nZXQgZygpe2NvbnN0IHM9dGhpcy5kYXRhLHU9cy5nO3JldHVybiF0aGlzLnR5cGUuaXMoT2cuSFNMKSYmdSE9PXZvaWQgMD91Oih0aGlzLl9lbnN1cmVIU0woKSxXYS5jaGFubmVsLmhzbDJyZ2IocywiZyIpKX1nZXQgYigpe2NvbnN0IHM9dGhpcy5kYXRhLHU9cy5iO3JldHVybiF0aGlzLnR5cGUuaXMoT2cuSFNMKSYmdSE9PXZvaWQgMD91Oih0aGlzLl9lbnN1cmVIU0woKSxXYS5jaGFubmVsLmhzbDJyZ2IocywiYiIpKX1nZXQgaCgpe2NvbnN0IHM9dGhpcy5kYXRhLHU9cy5oO3JldHVybiF0aGlzLnR5cGUuaXMoT2cuUkdCKSYmdSE9PXZvaWQgMD91Oih0aGlzLl9lbnN1cmVSR0IoKSxXYS5jaGFubmVsLnJnYjJoc2wocywiaCIpKX1nZXQgcygpe2NvbnN0IHM9dGhpcy5kYXRhLHU9cy5zO3JldHVybiF0aGlzLnR5cGUuaXMoT2cuUkdCKSYmdSE9PXZvaWQgMD91Oih0aGlzLl9lbnN1cmVSR0IoKSxXYS5jaGFubmVsLnJnYjJoc2wocywicyIpKX1nZXQgbCgpe2NvbnN0IHM9dGhpcy5kYXRhLHU9cy5sO3JldHVybiF0aGlzLnR5cGUuaXMoT2cuUkdCKSYmdSE9PXZvaWQgMD91Oih0aGlzLl9lbnN1cmVSR0IoKSxXYS5jaGFubmVsLnJnYjJoc2wocywibCIpKX1nZXQgYSgpe3JldHVybiB0aGlzLmRhdGEuYX1zZXQgcihzKXt0aGlzLnR5cGUuc2V0KE9nLlJHQiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5yPXN9c2V0IGcocyl7dGhpcy50eXBlLnNldChPZy5SR0IpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuZz1zfXNldCBiKHMpe3RoaXMudHlwZS5zZXQoT2cuUkdCKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmI9c31zZXQgaChzKXt0aGlzLnR5cGUuc2V0KE9nLkhTTCksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5oPXN9c2V0IHMocyl7dGhpcy50eXBlLnNldChPZy5IU0wpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEucz1zfXNldCBsKHMpe3RoaXMudHlwZS5zZXQoT2cuSFNMKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmw9c31zZXQgYShzKXt0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmE9c319Y29uc3QgQ1B0PVRQdCx3WD1uZXcgQ1B0KHtyOjAsZzowLGI6MCxhOjB9LCJ0cmFuc3BhcmVudCIpLFRSZT17cmU6L14jKCg/OlthLWYwLTldezJ9KXsyLDR9fFthLWYwLTldezN9KSQvaSxwYXJzZTppPT57aWYoaS5jaGFyQ29kZUF0KDApIT09MzUpcmV0dXJuO2NvbnN0IHM9aS5tYXRjaChUUmUucmUpO2lmKCFzKXJldHVybjtjb25zdCB1PXNbMV0sZD1wYXJzZUludCh1LDE2KSxwPXUubGVuZ3RoLHY9cCU0PT09MCxiPXA+NCx5PWI/MToxNyxUPWI/ODo0LF89dj8wOi0xLEE9Yj8yNTU6MTU7cmV0dXJuIHdYLnNldCh7cjooZD4+VCooXyszKSZBKSp5LGc6KGQ+PlQqKF8rMikmQSkqeSxiOihkPj5UKihfKzEpJkEpKnksYTp2PyhkJkEpKnkvMjU1OjF9LGkpfSxzdHJpbmdpZnk6aT0+e2NvbnN0e3I6cyxnOnUsYjpkLGE6cH09aTtyZXR1cm4gcDwxP2AjJHt2OVtNYXRoLnJvdW5kKHMpXX0ke3Y5W01hdGgucm91bmQodSldfSR7djlbTWF0aC5yb3VuZChkKV19JHt2OVtNYXRoLnJvdW5kKHAqMjU1KV19YDpgIyR7djlbTWF0aC5yb3VuZChzKV19JHt2OVtNYXRoLnJvdW5kKHUpXX0ke3Y5W01hdGgucm91bmQoZCldfWB9fSxWRj1UUmUseVg9e3JlOi9eaHNsYT9cKFxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/JSlccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8lKSg/OlxzKj8oPzosfFwvKVxzKj9cKz8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyglKT8pKT9ccyo/XCkkL2ksaHVlUmU6L14oLis/KShkZWd8Z3JhZHxyYWR8dHVybikkL2ksX2h1ZTJkZWc6aT0+e2NvbnN0IHM9aS5tYXRjaCh5WC5odWVSZSk7aWYocyl7Y29uc3RbLHUsZF09cztzd2l0Y2goZCl7Y2FzZSJncmFkIjpyZXR1cm4gV2EuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQodSkqLjkpO2Nhc2UicmFkIjpyZXR1cm4gV2EuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQodSkqMTgwL01hdGguUEkpO2Nhc2UidHVybiI6cmV0dXJuIFdhLmNoYW5uZWwuY2xhbXAuaChwYXJzZUZsb2F0KHUpKjM2MCl9fXJldHVybiBXYS5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdChpKSl9LHBhcnNlOmk9Pntjb25zdCBzPWkuY2hhckNvZGVBdCgwKTtpZihzIT09MTA0JiZzIT09NzIpcmV0dXJuO2NvbnN0IHU9aS5tYXRjaCh5WC5yZSk7aWYoIXUpcmV0dXJuO2NvbnN0WyxkLHAsdixiLHldPXU7cmV0dXJuIHdYLnNldCh7aDp5WC5faHVlMmRlZyhkKSxzOldhLmNoYW5uZWwuY2xhbXAucyhwYXJzZUZsb2F0KHApKSxsOldhLmNoYW5uZWwuY2xhbXAubChwYXJzZUZsb2F0KHYpKSxhOmI/V2EuY2hhbm5lbC5jbGFtcC5hKHk/cGFyc2VGbG9hdChiKS8xMDA6cGFyc2VGbG9hdChiKSk6MX0saSl9LHN0cmluZ2lmeTppPT57Y29uc3R7aDpzLHM6dSxsOmQsYTpwfT1pO3JldHVybiBwPDE/YGhzbGEoJHtXYS5sYW5nLnJvdW5kKHMpfSwgJHtXYS5sYW5nLnJvdW5kKHUpfSUsICR7V2EubGFuZy5yb3VuZChkKX0lLCAke3B9KWA6YGhzbCgke1dhLmxhbmcucm91bmQocyl9LCAke1dhLmxhbmcucm91bmQodSl9JSwgJHtXYS5sYW5nLnJvdW5kKGQpfSUpYH19LHhYPXlYLGtYPXtjb2xvcnM6e2FsaWNlYmx1ZToiI2YwZjhmZiIsYW50aXF1ZXdoaXRlOiIjZmFlYmQ3IixhcXVhOiIjMDBmZmZmIixhcXVhbWFyaW5lOiIjN2ZmZmQ0IixhenVyZToiI2YwZmZmZiIsYmVpZ2U6IiNmNWY1ZGMiLGJpc3F1ZToiI2ZmZTRjNCIsYmxhY2s6IiMwMDAwMDAiLGJsYW5jaGVkYWxtb25kOiIjZmZlYmNkIixibHVlOiIjMDAwMGZmIixibHVldmlvbGV0OiIjOGEyYmUyIixicm93bjoiI2E1MmEyYSIsYnVybHl3b29kOiIjZGViODg3IixjYWRldGJsdWU6IiM1ZjllYTAiLGNoYXJ0cmV1c2U6IiM3ZmZmMDAiLGNob2NvbGF0ZToiI2QyNjkxZSIsY29yYWw6IiNmZjdmNTAiLGNvcm5mbG93ZXJibHVlOiIjNjQ5NWVkIixjb3Juc2lsazoiI2ZmZjhkYyIsY3JpbXNvbjoiI2RjMTQzYyIsY3lhbmFxdWE6IiMwMGZmZmYiLGRhcmtibHVlOiIjMDAwMDhiIixkYXJrY3lhbjoiIzAwOGI4YiIsZGFya2dvbGRlbnJvZDoiI2I4ODYwYiIsZGFya2dyYXk6IiNhOWE5YTkiLGRhcmtncmVlbjoiIzAwNjQwMCIsZGFya2dyZXk6IiNhOWE5YTkiLGRhcmtraGFraToiI2JkYjc2YiIsZGFya21hZ2VudGE6IiM4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiIjNTU2YjJmIixkYXJrb3JhbmdlOiIjZmY4YzAwIixkYXJrb3JjaGlkOiIjOTkzMmNjIixkYXJrcmVkOiIjOGIwMDAwIixkYXJrc2FsbW9uOiIjZTk5NjdhIixkYXJrc2VhZ3JlZW46IiM4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IiM0ODNkOGIiLGRhcmtzbGF0ZWdyYXk6IiMyZjRmNGYiLGRhcmtzbGF0ZWdyZXk6IiMyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IiMwMGNlZDEiLGRhcmt2aW9sZXQ6IiM5NDAwZDMiLGRlZXBwaW5rOiIjZmYxNDkzIixkZWVwc2t5Ymx1ZToiIzAwYmZmZiIsZGltZ3JheToiIzY5Njk2OSIsZGltZ3JleToiIzY5Njk2OSIsZG9kZ2VyYmx1ZToiIzFlOTBmZiIsZmlyZWJyaWNrOiIjYjIyMjIyIixmbG9yYWx3aGl0ZToiI2ZmZmFmMCIsZm9yZXN0Z3JlZW46IiMyMjhiMjIiLGZ1Y2hzaWE6IiNmZjAwZmYiLGdhaW5zYm9ybzoiI2RjZGNkYyIsZ2hvc3R3aGl0ZToiI2Y4ZjhmZiIsZ29sZDoiI2ZmZDcwMCIsZ29sZGVucm9kOiIjZGFhNTIwIixncmF5OiIjODA4MDgwIixncmVlbjoiIzAwODAwMCIsZ3JlZW55ZWxsb3c6IiNhZGZmMmYiLGdyZXk6IiM4MDgwODAiLGhvbmV5ZGV3OiIjZjBmZmYwIixob3RwaW5rOiIjZmY2OWI0IixpbmRpYW5yZWQ6IiNjZDVjNWMiLGluZGlnbzoiIzRiMDA4MiIsaXZvcnk6IiNmZmZmZjAiLGtoYWtpOiIjZjBlNjhjIixsYXZlbmRlcjoiI2U2ZTZmYSIsbGF2ZW5kZXJibHVzaDoiI2ZmZjBmNSIsbGF3bmdyZWVuOiIjN2NmYzAwIixsZW1vbmNoaWZmb246IiNmZmZhY2QiLGxpZ2h0Ymx1ZToiI2FkZDhlNiIsbGlnaHRjb3JhbDoiI2YwODA4MCIsbGlnaHRjeWFuOiIjZTBmZmZmIixsaWdodGdvbGRlbnJvZHllbGxvdzoiI2ZhZmFkMiIsbGlnaHRncmF5OiIjZDNkM2QzIixsaWdodGdyZWVuOiIjOTBlZTkwIixsaWdodGdyZXk6IiNkM2QzZDMiLGxpZ2h0cGluazoiI2ZmYjZjMSIsbGlnaHRzYWxtb246IiNmZmEwN2EiLGxpZ2h0c2VhZ3JlZW46IiMyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiIzg3Y2VmYSIsbGlnaHRzbGF0ZWdyYXk6IiM3Nzg4OTkiLGxpZ2h0c2xhdGVncmV5OiIjNzc4ODk5IixsaWdodHN0ZWVsYmx1ZToiI2IwYzRkZSIsbGlnaHR5ZWxsb3c6IiNmZmZmZTAiLGxpbWU6IiMwMGZmMDAiLGxpbWVncmVlbjoiIzMyY2QzMiIsbGluZW46IiNmYWYwZTYiLG1hZ2VudGE6IiNmZjAwZmYiLG1hcm9vbjoiIzgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiIzY2Y2RhYSIsbWVkaXVtYmx1ZToiIzAwMDBjZCIsbWVkaXVtb3JjaGlkOiIjYmE1NWQzIixtZWRpdW1wdXJwbGU6IiM5MzcwZGIiLG1lZGl1bXNlYWdyZWVuOiIjM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IiM3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIjMDBmYTlhIixtZWRpdW10dXJxdW9pc2U6IiM0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiI2M3MTU4NSIsbWlkbmlnaHRibHVlOiIjMTkxOTcwIixtaW50Y3JlYW06IiNmNWZmZmEiLG1pc3R5cm9zZToiI2ZmZTRlMSIsbW9jY2FzaW46IiNmZmU0YjUiLG5hdmFqb3doaXRlOiIjZmZkZWFkIixuYXZ5OiIjMDAwMDgwIixvbGRsYWNlOiIjZmRmNWU2IixvbGl2ZToiIzgwODAwMCIsb2xpdmVkcmFiOiIjNmI4ZTIzIixvcmFuZ2U6IiNmZmE1MDAiLG9yYW5nZXJlZDoiI2ZmNDUwMCIsb3JjaGlkOiIjZGE3MGQ2IixwYWxlZ29sZGVucm9kOiIjZWVlOGFhIixwYWxlZ3JlZW46IiM5OGZiOTgiLHBhbGV0dXJxdW9pc2U6IiNhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6IiNkYjcwOTMiLHBhcGF5YXdoaXA6IiNmZmVmZDUiLHBlYWNocHVmZjoiI2ZmZGFiOSIscGVydToiI2NkODUzZiIscGluazoiI2ZmYzBjYiIscGx1bToiI2RkYTBkZCIscG93ZGVyYmx1ZToiI2IwZTBlNiIscHVycGxlOiIjODAwMDgwIixyZWJlY2NhcHVycGxlOiIjNjYzMzk5IixyZWQ6IiNmZjAwMDAiLHJvc3licm93bjoiI2JjOGY4ZiIscm95YWxibHVlOiIjNDE2OWUxIixzYWRkbGVicm93bjoiIzhiNDUxMyIsc2FsbW9uOiIjZmE4MDcyIixzYW5keWJyb3duOiIjZjRhNDYwIixzZWFncmVlbjoiIzJlOGI1NyIsc2Vhc2hlbGw6IiNmZmY1ZWUiLHNpZW5uYToiI2EwNTIyZCIsc2lsdmVyOiIjYzBjMGMwIixza3libHVlOiIjODdjZWViIixzbGF0ZWJsdWU6IiM2YTVhY2QiLHNsYXRlZ3JheToiIzcwODA5MCIsc2xhdGVncmV5OiIjNzA4MDkwIixzbm93OiIjZmZmYWZhIixzcHJpbmdncmVlbjoiIzAwZmY3ZiIsdGFuOiIjZDJiNDhjIix0ZWFsOiIjMDA4MDgwIix0aGlzdGxlOiIjZDhiZmQ4Iix0cmFuc3BhcmVudDoiIzAwMDAwMDAwIix0dXJxdW9pc2U6IiM0MGUwZDAiLHZpb2xldDoiI2VlODJlZSIsd2hlYXQ6IiNmNWRlYjMiLHdoaXRlOiIjZmZmZmZmIix3aGl0ZXNtb2tlOiIjZjVmNWY1Iix5ZWxsb3c6IiNmZmZmMDAiLHllbGxvd2dyZWVuOiIjOWFjZDMyIn0scGFyc2U6aT0+e2k9aS50b0xvd2VyQ2FzZSgpO2NvbnN0IHM9a1guY29sb3JzW2ldO2lmKHMpcmV0dXJuIFZGLnBhcnNlKHMpfSxzdHJpbmdpZnk6aT0+e2NvbnN0IHM9VkYuc3RyaW5naWZ5KGkpO2Zvcihjb25zdCB1IGluIGtYLmNvbG9ycylpZihrWC5jb2xvcnNbdV09PT1zKXJldHVybiB1fX0sQ1JlPWtYLFNSZT17cmU6L15yZ2JhP1woXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKD86XHMqPyg/Oix8XC8pXHMqP1wrPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKT9ccyo/XCkkL2kscGFyc2U6aT0+e2NvbnN0IHM9aS5jaGFyQ29kZUF0KDApO2lmKHMhPT0xMTQmJnMhPT04MilyZXR1cm47Y29uc3QgdT1pLm1hdGNoKFNSZS5yZSk7aWYoIXUpcmV0dXJuO2NvbnN0WyxkLHAsdixiLHksVCxfLEFdPXU7cmV0dXJuIHdYLnNldCh7cjpXYS5jaGFubmVsLmNsYW1wLnIocD9wYXJzZUZsb2F0KGQpKjIuNTU6cGFyc2VGbG9hdChkKSksZzpXYS5jaGFubmVsLmNsYW1wLmcoYj9wYXJzZUZsb2F0KHYpKjIuNTU6cGFyc2VGbG9hdCh2KSksYjpXYS5jaGFubmVsLmNsYW1wLmIoVD9wYXJzZUZsb2F0KHkpKjIuNTU6cGFyc2VGbG9hdCh5KSksYTpfP1dhLmNoYW5uZWwuY2xhbXAuYShBP3BhcnNlRmxvYXQoXykvMTAwOnBhcnNlRmxvYXQoXykpOjF9LGkpfSxzdHJpbmdpZnk6aT0+e2NvbnN0e3I6cyxnOnUsYjpkLGE6cH09aTtyZXR1cm4gcDwxP2ByZ2JhKCR7V2EubGFuZy5yb3VuZChzKX0sICR7V2EubGFuZy5yb3VuZCh1KX0sICR7V2EubGFuZy5yb3VuZChkKX0sICR7V2EubGFuZy5yb3VuZChwKX0pYDpgcmdiKCR7V2EubGFuZy5yb3VuZChzKX0sICR7V2EubGFuZy5yb3VuZCh1KX0sICR7V2EubGFuZy5yb3VuZChkKX0pYH19LEVYPVNSZSxPMz17Zm9ybWF0OntrZXl3b3JkOkNSZSxoZXg6VkYscmdiOkVYLHJnYmE6RVgsaHNsOnhYLGhzbGE6eFh9LHBhcnNlOmk9PntpZih0eXBlb2YgaSE9InN0cmluZyIpcmV0dXJuIGk7Y29uc3Qgcz1WRi5wYXJzZShpKXx8RVgucGFyc2UoaSl8fHhYLnBhcnNlKGkpfHxDUmUucGFyc2UoaSk7aWYocylyZXR1cm4gczt0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGNvbG9yIGZvcm1hdDogIiR7aX0iYCl9LHN0cmluZ2lmeTppPT4haS5jaGFuZ2VkJiZpLmNvbG9yP2kuY29sb3I6aS50eXBlLmlzKE9nLkhTTCl8fGkuZGF0YS5yPT09dm9pZCAwP3hYLnN0cmluZ2lmeShpKTppLmE8MXx8IU51bWJlci5pc0ludGVnZXIoaS5yKXx8IU51bWJlci5pc0ludGVnZXIoaS5nKXx8IU51bWJlci5pc0ludGVnZXIoaS5iKT9FWC5zdHJpbmdpZnkoaSk6VkYuc3RyaW5naWZ5KGkpfSxfUmU9KGkscyk9Pntjb25zdCB1PU8zLnBhcnNlKGkpO2Zvcihjb25zdCBkIGluIHMpdVtkXT1XYS5jaGFubmVsLmNsYW1wW2RdKHNbZF0pO3JldHVybiBPMy5zdHJpbmdpZnkodSl9LFNDPShpLHMsdT0wLGQ9MSk9PntpZih0eXBlb2YgaSE9Im51bWJlciIpcmV0dXJuIF9SZShpLHthOnN9KTtjb25zdCBwPXdYLnNldCh7cjpXYS5jaGFubmVsLmNsYW1wLnIoaSksZzpXYS5jaGFubmVsLmNsYW1wLmcocyksYjpXYS5jaGFubmVsLmNsYW1wLmIodSksYTpXYS5jaGFubmVsLmNsYW1wLmEoZCl9KTtyZXR1cm4gTzMuc3RyaW5naWZ5KHApfSxBUmU9KGkscyk9PldhLmxhbmcucm91bmQoTzMucGFyc2UoaSlbc10pLFNQdD1pPT57Y29uc3R7cjpzLGc6dSxiOmR9PU8zLnBhcnNlKGkpLHA9LjIxMjYqV2EuY2hhbm5lbC50b0xpbmVhcihzKSsuNzE1MipXYS5jaGFubmVsLnRvTGluZWFyKHUpKy4wNzIyKldhLmNoYW5uZWwudG9MaW5lYXIoZCk7cmV0dXJuIFdhLmxhbmcucm91bmQocCl9LF9QdD1pPT5TUHQoaSk+PS41LF9DPWk9PiFfUHQoaSksTFJlPShpLHMsdSk9Pntjb25zdCBkPU8zLnBhcnNlKGkpLHA9ZFtzXSx2PVdhLmNoYW5uZWwuY2xhbXBbc10ocCt1KTtyZXR1cm4gcCE9PXYmJihkW3NdPXYpLE8zLnN0cmluZ2lmeShkKX0sR3M9KGkscyk9PkxSZShpLCJsIixzKSxmYT0oaSxzKT0+TFJlKGksImwiLC1zKSxJbj0oaSxzKT0+e2NvbnN0IHU9TzMucGFyc2UoaSksZD17fTtmb3IoY29uc3QgcCBpbiBzKXNbcF0mJihkW3BdPXVbcF0rc1twXSk7cmV0dXJuIF9SZShpLGQpfSxBUHQ9KGkscyx1PTUwKT0+e2NvbnN0e3I6ZCxnOnAsYjp2LGE6Yn09TzMucGFyc2UoaSkse3I6eSxnOlQsYjpfLGE6QX09TzMucGFyc2UocyksUD11LzEwMCxSPVAqMi0xLEY9Yi1BLEs9KChSKkY9PT0tMT9SOihSK0YpLygxK1IqRikpKzEpLzIsZWU9MS1LLGllPWQqSyt5KmVlLG9lPXAqSytUKmVlLHBlPXYqSytfKmVlLGJlPWIqUCtBKigxLVApO3JldHVybiBTQyhpZSxvZSxwZSxiZSl9LFZpPShpLHM9MTAwKT0+e2NvbnN0IHU9TzMucGFyc2UoaSk7cmV0dXJuIHUucj0yNTUtdS5yLHUuZz0yNTUtdS5nLHUuYj0yNTUtdS5iLEFQdCh1LGkscyl9LFRwPShpLHMpPT5zP0luKGkse3M6LTQwLGw6MTB9KTpJbihpLHtzOi00MCxsOi0xMH0pLFRYPSIjZmZmZmZmIixDWD0iI2YyZjJmMiI7bGV0IExQdD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuYmFja2dyb3VuZD0iI2Y0ZjRmNCIsdGhpcy5wcmltYXJ5Q29sb3I9IiNmZmY0ZGQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9IiMzMzMiLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgifXVwZGF0ZUNvbG9ycygpe3ZhciB1LGQscCx2LGIseSxULF8sQSxQLFI7aWYodGhpcy5wcmltYXJ5VGV4dENvbG9yPXRoaXMucHJpbWFyeVRleHRDb2xvcnx8KHRoaXMuZGFya01vZGU/IiNlZWUiOiIjMzMzIiksdGhpcy5zZWNvbmRhcnlDb2xvcj10aGlzLnNlY29uZGFyeUNvbG9yfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotMTIwfSksdGhpcy50ZXJ0aWFyeUNvbG9yPXRoaXMudGVydGlhcnlDb2xvcnx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTgwLGw6NX0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yfHxUcCh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPXRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3J8fFRwKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPXRoaXMudGVydGlhcnlCb3JkZXJDb2xvcnx8VHAodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMubm90ZUJvcmRlckNvbG9yfHxUcCh0aGlzLm5vdGVCa2dDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLm5vdGVCa2dDb2xvcj10aGlzLm5vdGVCa2dDb2xvcnx8IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLm5vdGVUZXh0Q29sb3J8fCIjMzMzIix0aGlzLnNlY29uZGFyeVRleHRDb2xvcj10aGlzLnNlY29uZGFyeVRleHRDb2xvcnx8VmkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj10aGlzLnRlcnRpYXJ5VGV4dENvbG9yfHxWaSh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPXRoaXMubGluZUNvbG9yfHxWaSh0aGlzLmJhY2tncm91bmQpLHRoaXMuYXJyb3doZWFkQ29sb3I9dGhpcy5hcnJvd2hlYWRDb2xvcnx8VmkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj10aGlzLnRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYm9yZGVyMj10aGlzLmJvcmRlcjJ8fHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcix0aGlzLm5vZGVCa2c9dGhpcy5ub2RlQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm1haW5Ca2c9dGhpcy5tYWluQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm5vZGVCb3JkZXI9dGhpcy5ub2RlQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLmNsdXN0ZXJCa2c9dGhpcy5jbHVzdGVyQmtnfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuY2x1c3RlckJvcmRlcnx8dGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmRlZmF1bHRMaW5rQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRpdGxlQ29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPXRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/ZmEodGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5ub2RlVGV4dENvbG9yPXRoaXMubm9kZVRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYWN0b3JCb3JkZXI9dGhpcy5hY3RvckJvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5hY3RvckJrZz10aGlzLmFjdG9yQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmFjdG9yTGluZUNvbG9yfHwiZ3JleSIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMubGFiZWxCb3hCa2dDb2xvcnx8dGhpcy5hY3RvckJrZyx0aGlzLnNpZ25hbENvbG9yPXRoaXMuc2lnbmFsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMuc2lnbmFsVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5sYWJlbEJveEJvcmRlckNvbG9yfHx0aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5sYWJlbFRleHRDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5sb29wVGV4dENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPXRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yfHxmYSh0aGlzLnNlY29uZGFyeUNvbG9yLDEwKSx0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj10aGlzLmFjdGl2YXRpb25Ca2dDb2xvcnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9dGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yfHxWaSh0aGlzLmxpbmVDb2xvciksdGhpcy5zZWN0aW9uQmtnQ29sb3I9dGhpcy5zZWN0aW9uQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj10aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcnx8IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj10aGlzLnNlY3Rpb25Ca2dDb2xvcnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9dGhpcy5zZWN0aW9uQmtnQ29sb3IyfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj10aGlzLmV4Y2x1ZGVCa2dDb2xvcnx8IiNlZWVlZWUiLHRoaXMudGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhc2tCa2dDb2xvcj10aGlzLnRhc2tCa2dDb2xvcnx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9dGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yfHxHcyh0aGlzLnByaW1hcnlDb2xvciwyMyksdGhpcy5ncmlkQ29sb3I9dGhpcy5ncmlkQ29sb3J8fCJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj10aGlzLmRvbmVUYXNrQmtnQ29sb3J8fCJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj10aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3J8fCJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj10aGlzLmNyaXRCb3JkZXJDb2xvcnx8IiNmZjg4ODgiLHRoaXMuY3JpdEJrZ0NvbG9yPXRoaXMuY3JpdEJrZ0NvbG9yfHwicmVkIix0aGlzLnRvZGF5TGluZUNvbG9yPXRoaXMudG9kYXlMaW5lQ29sb3J8fCJyZWQiLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj10aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J8fCIjMDAzMTYzIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnBlcnNvbkJvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5wZXJzb25Ca2c9dGhpcy5wZXJzb25Ca2d8fHRoaXMubWFpbkJrZyx0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMubm9kZUJvcmRlcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMCxsOjE1MH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KSx0aGlzLmRhcmtNb2RlKWZvcihsZXQgRj0wO0Y8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtGKyspdGhpc1siY1NjYWxlIitGXT1mYSh0aGlzWyJjU2NhbGUiK0ZdLDc1KTtlbHNlIGZvcihsZXQgRj0wO0Y8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtGKyspdGhpc1siY1NjYWxlIitGXT1mYSh0aGlzWyJjU2NhbGUiK0ZdLDI1KTtmb3IobGV0IEY9MDtGPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7RisrKXRoaXNbImNTY2FsZUludiIrRl09dGhpc1siY1NjYWxlSW52IitGXXx8VmkodGhpc1siY1NjYWxlIitGXSk7Zm9yKGxldCBGPTA7Rjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO0YrKyl0aGlzLmRhcmtNb2RlP3RoaXNbImNTY2FsZVBlZXIiK0ZdPXRoaXNbImNTY2FsZVBlZXIiK0ZdfHxHcyh0aGlzWyJjU2NhbGUiK0ZdLDEwKTp0aGlzWyJjU2NhbGVQZWVyIitGXT10aGlzWyJjU2NhbGVQZWVyIitGXXx8ZmEodGhpc1siY1NjYWxlIitGXSwxMCk7dGhpcy5zY2FsZUxhYmVsQ29sb3I9dGhpcy5zY2FsZUxhYmVsQ29sb3J8fHRoaXMubGFiZWxUZXh0Q29sb3I7Zm9yKGxldCBGPTA7Rjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO0YrKyl0aGlzWyJjU2NhbGVMYWJlbCIrRl09dGhpc1siY1NjYWxlTGFiZWwiK0ZdfHx0aGlzLnNjYWxlTGFiZWxDb2xvcjtjb25zdCBzPXRoaXMuZGFya01vZGU/LTQ6LTE7Zm9yKGxldCBGPTA7Rjw1O0YrKyl0aGlzWyJzdXJmYWNlIitGXT10aGlzWyJzdXJmYWNlIitGXXx8SW4odGhpcy5tYWluQmtnLHtoOjE4MCxzOi0xNSxsOnMqKDUrRiozKX0pLHRoaXNbInN1cmZhY2VQZWVyIitGXT10aGlzWyJzdXJmYWNlUGVlciIrRl18fEluKHRoaXMubWFpbkJrZyx7aDoxODAsczotMTUsbDpzKig4K0YqMyl9KTt0aGlzLmNsYXNzVGV4dD10aGlzLmNsYXNzVGV4dHx8dGhpcy50ZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5maWxsVHlwZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuZmlsbFR5cGUxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPXRoaXMuZmlsbFR5cGUyfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPXRoaXMuZmlsbFR5cGUzfHxJbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9dGhpcy5maWxsVHlwZTR8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PXRoaXMuZmlsbFR5cGU1fHxJbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PXRoaXMuZmlsbFR5cGU2fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz10aGlzLmZpbGxUeXBlN3x8SW4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnBpZTI9dGhpcy5waWUyfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMucGllMz10aGlzLnBpZTN8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLnBpZTQ9dGhpcy5waWU0fHxJbih0aGlzLnByaW1hcnlDb2xvcix7bDotMTB9KSx0aGlzLnBpZTU9dGhpcy5waWU1fHxJbih0aGlzLnNlY29uZGFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNj10aGlzLnBpZTZ8fEluKHRoaXMudGVydGlhcnlDb2xvcix7bDotMTB9KSx0aGlzLnBpZTc9dGhpcy5waWU3fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0xMH0pLHRoaXMucGllOD10aGlzLnBpZTh8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi0xMH0pLHRoaXMucGllOT10aGlzLnBpZTl8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOjB9KSx0aGlzLnBpZTEwPXRoaXMucGllMTB8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTIwfSksdGhpcy5waWUxMT10aGlzLnBpZTExfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMjB9KSx0aGlzLnBpZTEyPXRoaXMucGllMTJ8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOi0xMH0pLHRoaXMucGllVGl0bGVUZXh0U2l6ZT10aGlzLnBpZVRpdGxlVGV4dFNpemV8fCIyNXB4Iix0aGlzLnBpZVRpdGxlVGV4dENvbG9yPXRoaXMucGllVGl0bGVUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTZWN0aW9uVGV4dFNpemU9dGhpcy5waWVTZWN0aW9uVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3I9dGhpcy5waWVTZWN0aW9uVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnBpZUxlZ2VuZFRleHRTaXplPXRoaXMucGllTGVnZW5kVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZUxlZ2VuZFRleHRDb2xvcj10aGlzLnBpZUxlZ2VuZFRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVN0cm9rZUNvbG9yPXRoaXMucGllU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVTdHJva2VXaWR0aD10aGlzLnBpZVN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGg9dGhpcy5waWVPdXRlclN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3I9dGhpcy5waWVPdXRlclN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucXVhZHJhbnQxRmlsbD10aGlzLnF1YWRyYW50MUZpbGx8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucXVhZHJhbnQyRmlsbD10aGlzLnF1YWRyYW50MkZpbGx8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtyOjUsZzo1LGI6NX0pLHRoaXMucXVhZHJhbnQzRmlsbD10aGlzLnF1YWRyYW50M0ZpbGx8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtyOjEwLGc6MTAsYjoxMH0pLHRoaXMucXVhZHJhbnQ0RmlsbD10aGlzLnF1YWRyYW50NEZpbGx8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtyOjE1LGc6MTUsYjoxNX0pLHRoaXMucXVhZHJhbnQxVGV4dEZpbGw9dGhpcy5xdWFkcmFudDFUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnQyVGV4dEZpbGw9dGhpcy5xdWFkcmFudDJUZXh0RmlsbHx8SW4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi01LGc6LTUsYjotNX0pLHRoaXMucXVhZHJhbnQzVGV4dEZpbGw9dGhpcy5xdWFkcmFudDNUZXh0RmlsbHx8SW4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xMCxnOi0xMCxiOi0xMH0pLHRoaXMucXVhZHJhbnQ0VGV4dEZpbGw9dGhpcy5xdWFkcmFudDRUZXh0RmlsbHx8SW4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xNSxnOi0xNSxiOi0xNX0pLHRoaXMucXVhZHJhbnRQb2ludEZpbGw9dGhpcy5xdWFkcmFudFBvaW50RmlsbHx8X0ModGhpcy5xdWFkcmFudDFGaWxsKT9Hcyh0aGlzLnF1YWRyYW50MUZpbGwpOmZhKHRoaXMucXVhZHJhbnQxRmlsbCksdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGw9dGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRUaXRsZUZpbGw9dGhpcy5xdWFkcmFudFRpdGxlRmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMueHlDaGFydD17YmFja2dyb3VuZENvbG9yOigodT10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDp1LmJhY2tncm91bmRDb2xvcil8fHRoaXMuYmFja2dyb3VuZCx0aXRsZUNvbG9yOigoZD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpkLnRpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaXRsZUNvbG9yOigocD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpwLnhBeGlzVGl0bGVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xhYmVsQ29sb3I6KCh2PXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOnYueEF4aXNMYWJlbENvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGlja0NvbG9yOigoYj10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpiLnhBeGlzVGlja0NvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGluZUNvbG9yOigoeT10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDp5LnhBeGlzTGluZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGl0bGVDb2xvcjooKFQ9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6VC55QXhpc1RpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMYWJlbENvbG9yOigoXz10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpfLnlBeGlzTGFiZWxDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpY2tDb2xvcjooKEE9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6QS55QXhpc1RpY2tDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xpbmVDb2xvcjooKFA9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6UC55QXhpc0xpbmVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcixwbG90Q29sb3JQYWxldHRlOigoUj10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpSLnBsb3RDb2xvclBhbGV0dGUpfHwiI0ZGRjRERCwjRkZEOEIxLCNGRkEwN0EsI0VDRUZGMSwjRDZEQkRGLCNDM0UwQTgsI0ZGQjZBNCwjRkZENzRELCM3MzhGQTcsI0ZGRkZGMCJ9LHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/ZmEodGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5naXQwPXRoaXMuZ2l0MHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5naXQxPXRoaXMuZ2l0MXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmdpdDI9dGhpcy5naXQyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5naXQzPXRoaXMuZ2l0M3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksdGhpcy5naXQ0PXRoaXMuZ2l0NHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksdGhpcy5naXQ1PXRoaXMuZ2l0NXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwfSksdGhpcy5naXQ2PXRoaXMuZ2l0Nnx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmdpdDc9dGhpcy5naXQ3fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmRhcmtNb2RlPyh0aGlzLmdpdDA9R3ModGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9R3ModGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9R3ModGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9R3ModGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9R3ModGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9R3ModGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9R3ModGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9R3ModGhpcy5naXQ3LDI1KSk6KHRoaXMuZ2l0MD1mYSh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1mYSh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1mYSh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1mYSh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1mYSh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1mYSh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1mYSh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1mYSh0aGlzLmdpdDcsMjUpKSx0aGlzLmdpdEludjA9dGhpcy5naXRJbnYwfHxWaSh0aGlzLmdpdDApLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fFZpKHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8VmkodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHxWaSh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fFZpKHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8VmkodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHxWaSh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fFZpKHRoaXMuZ2l0NyksdGhpcy5icmFuY2hMYWJlbENvbG9yPXRoaXMuYnJhbmNoTGFiZWxDb2xvcnx8KHRoaXMuZGFya01vZGU/ImJsYWNrIjp0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmdpdEJyYW5jaExhYmVsMHx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwxPXRoaXMuZ2l0QnJhbmNoTGFiZWwxfHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5naXRCcmFuY2hMYWJlbDJ8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz10aGlzLmdpdEJyYW5jaExhYmVsM3x8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuZ2l0QnJhbmNoTGFiZWw0fHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5naXRCcmFuY2hMYWJlbDV8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNj10aGlzLmdpdEJyYW5jaExhYmVsNnx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuZ2l0QnJhbmNoTGFiZWw3fHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxUWCx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxDWH1jYWxjdWxhdGUocyl7aWYodHlwZW9mIHMhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1jb25zdCB1PU9iamVjdC5rZXlzKHMpO3UuZm9yRWFjaChkPT57dGhpc1tkXT1zW2RdfSksdGhpcy51cGRhdGVDb2xvcnMoKSx1LmZvckVhY2goZD0+e3RoaXNbZF09c1tkXX0pfX07Y29uc3QgTVB0PWk9Pntjb25zdCBzPW5ldyBMUHQ7cmV0dXJuIHMuY2FsY3VsYXRlKGkpLHN9O2xldCBEUHQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiMzMzMiLHRoaXMucHJpbWFyeUNvbG9yPSIjMWYyMDIwIix0aGlzLnNlY29uZGFyeUNvbG9yPUdzKHRoaXMucHJpbWFyeUNvbG9yLDE2KSx0aGlzLnRlcnRpYXJ5Q29sb3I9SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPVZpKHRoaXMuYmFja2dyb3VuZCksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1UcCh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1UcCh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPVZpKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1WaSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPVZpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9VmkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1WaSh0aGlzLmJhY2tncm91bmQpLHRoaXMubWFpbkJrZz0iIzFmMjAyMCIsdGhpcy5zZWNvbmRCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubWFpbkNvbnRyYXN0Q29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kYXJrVGV4dENvbG9yPUdzKFZpKCIjMzIzRDQ3IiksMTApLHRoaXMubGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmJvcmRlcjE9IiM4MUIxREIiLHRoaXMuYm9yZGVyMj1TQygyNTUsMjU1LDI1NSwuMjUpLHRoaXMuYXJyb3doZWFkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLmxhYmVsQmFja2dyb3VuZD0iIzE4MTgxOCIsdGhpcy50ZXh0Q29sb3I9IiNjY2MiLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iI0Y5RkZGRSIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJibGFjayIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ZmEoIiNFQUU4RDkiLDMwKSx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSIjRUFFOEQ5Iix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj1mYSh0aGlzLnNlY3Rpb25Ca2dDb2xvciwxMCksdGhpcy50YXNrQm9yZGVyQ29sb3I9U0MoMjU1LDI1NSwyNTUsNzApLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPVNDKDI1NSwyNTUsMjU1LDUwKSx0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iIzgxQjFEQiIsdGhpcy5ncmlkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI0U4MzczNyIsdGhpcy5jcml0QmtnQ29sb3I9IiNFODM3MzciLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9IiNEQjU3NTciLHRoaXMucGVyc29uQm9yZGVyPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucGVyc29uQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZXJyb3JCa2dDb2xvcj0iI2E0NDE0MSIsdGhpcy5lcnJvclRleHRDb2xvcj0iI2RkZCJ9dXBkYXRlQ29sb3JzKCl7dmFyIHMsdSxkLHAsdixiLHksVCxfLEEsUDt0aGlzLnNlY29uZEJrZz1Hcyh0aGlzLm1haW5Ca2csMTYpLHRoaXMubGluZUNvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5hcnJvd2hlYWRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPUdzKHRoaXMubGFiZWxCYWNrZ3JvdW5kLDI1KSx0aGlzLmFjdG9yQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yLHRoaXMubm90ZUJrZ0NvbG9yPXRoaXMuc2Vjb25kQmtnLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj10aGlzLmJvcmRlcjEsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9dGhpcy5zZWNvbmRCa2csdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9dGhpcy5iYWNrZ3JvdW5kLHRoaXMudGFza0JrZ0NvbG9yPUdzKHRoaXMubWFpbkJrZywyMyksdGhpcy50YXNrVGV4dENvbG9yPXRoaXMuZGFya1RleHRDb2xvcix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy5ncmlkQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMuZGFya1RleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiIzU1NSIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9IiNmNGY0ZjQiLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1Jbih0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPUluKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND1Jbih0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1Jbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PUluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PUluKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8IiMwYjAwMDAiLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fCIjNGQxMDM3Iix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHwiIzNmNTI1OCIsdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8IiM0ZjJmMWIiLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fCIjNmUwYTBhIix0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHwiIzNiMDA0OCIsdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8IiM5OTVhMDEiLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fCIjMTU0NzA2Iix0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHwiIzE2MTcyMiIsdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHwiIzAwMjk2ZiIsdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHwiIzAxNjI5YyIsdGhpcy5jU2NhbGUxMj10aGlzLmNTY2FsZTEyfHwiIzAxMDAyOSIsdGhpcy5jU2NhbGUwPXRoaXMuY1NjYWxlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzB9KSx0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjkwfSksdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTUwfSksdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjEwfSksdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjcwfSksdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDozMDB9KSx0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMzMH0pO2ZvcihsZXQgUj0wO1I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtSKyspdGhpc1siY1NjYWxlSW52IitSXT10aGlzWyJjU2NhbGVJbnYiK1JdfHxWaSh0aGlzWyJjU2NhbGUiK1JdKTtmb3IobGV0IFI9MDtSPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7UisrKXRoaXNbImNTY2FsZVBlZXIiK1JdPXRoaXNbImNTY2FsZVBlZXIiK1JdfHxHcyh0aGlzWyJjU2NhbGUiK1JdLDEwKTtmb3IobGV0IFI9MDtSPDU7UisrKXRoaXNbInN1cmZhY2UiK1JdPXRoaXNbInN1cmZhY2UiK1JdfHxJbih0aGlzLm1haW5Ca2cse2g6MzAsczotMzAsbDotKC0xMCtSKjQpfSksdGhpc1sic3VyZmFjZVBlZXIiK1JdPXRoaXNbInN1cmZhY2VQZWVyIitSXXx8SW4odGhpcy5tYWluQmtnLHtoOjMwLHM6LTMwLGw6LSgtNytSKjQpfSk7dGhpcy5zY2FsZUxhYmVsQ29sb3I9dGhpcy5zY2FsZUxhYmVsQ29sb3J8fCh0aGlzLmRhcmtNb2RlPyJibGFjayI6dGhpcy5sYWJlbFRleHRDb2xvcik7Zm9yKGxldCBSPTA7Ujx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO1IrKyl0aGlzWyJjU2NhbGVMYWJlbCIrUl09dGhpc1siY1NjYWxlTGFiZWwiK1JdfHx0aGlzLnNjYWxlTGFiZWxDb2xvcjtmb3IobGV0IFI9MDtSPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7UisrKXRoaXNbInBpZSIrUl09dGhpc1siY1NjYWxlIitSXTt0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fF9DKHRoaXMucXVhZHJhbnQxRmlsbCk/R3ModGhpcy5xdWFkcmFudDFGaWxsKTpmYSh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjooKHM9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6cy5iYWNrZ3JvdW5kQ29sb3IpfHx0aGlzLmJhY2tncm91bmQsdGl0bGVDb2xvcjooKHU9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6dS50aXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGl0bGVDb2xvcjooKGQ9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6ZC54QXhpc1RpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOigocD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpwLnhBeGlzTGFiZWxDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpY2tDb2xvcjooKHY9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6di54QXhpc1RpY2tDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xpbmVDb2xvcjooKGI9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Yi54QXhpc0xpbmVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6KCh5PXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOnkueUF4aXNUaXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGFiZWxDb2xvcjooKFQ9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6VC55QXhpc0xhYmVsQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaWNrQ29sb3I6KChfPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOl8ueUF4aXNUaWNrQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6KChBPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkEueUF4aXNMaW5lQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IscGxvdENvbG9yUGFsZXR0ZTooKFA9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6UC5wbG90Q29sb3JQYWxldHRlKXx8IiMzNDk4ZGIsIzJlY2M3MSwjZTc0YzNjLCNmMWM0MGYsI2JkYzNjNywjZmZmZmZmLCMzNDQ5NWUsIzliNTliNiwjMWFiYzljLCNlNjdlMjIifSx0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHwiMSIsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHwodGhpcy5kYXJrTW9kZT9mYSh0aGlzLnNlY29uZGFyeUNvbG9yLDMwKTp0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9R3ModGhpcy5zZWNvbmRhcnlDb2xvciwyMCksdGhpcy5naXQxPUdzKHRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvciwyMCksdGhpcy5naXQyPUdzKHRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLDIwKSx0aGlzLmdpdDM9R3ModGhpcy5waWU0fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSwyMCksdGhpcy5naXQ0PUdzKHRoaXMucGllNXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksMjApLHRoaXMuZ2l0NT1Hcyh0aGlzLnBpZTZ8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLDEwKSx0aGlzLmdpdDY9R3ModGhpcy5waWU3fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLDEwKSx0aGlzLmdpdDc9R3ModGhpcy5waWU4fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSwyMCksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8VmkodGhpcy5naXQwKSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHxWaSh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fFZpKHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8VmkodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHxWaSh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fFZpKHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8VmkodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHxWaSh0aGlzLmdpdDcpLHRoaXMuZ2l0QnJhbmNoTGFiZWwwPXRoaXMuZ2l0QnJhbmNoTGFiZWwwfHxWaSh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsMT10aGlzLmdpdEJyYW5jaExhYmVsMXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmdpdEJyYW5jaExhYmVsMnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz10aGlzLmdpdEJyYW5jaExhYmVsM3x8VmkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDQ9dGhpcy5naXRCcmFuY2hMYWJlbDR8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5naXRCcmFuY2hMYWJlbDV8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5naXRCcmFuY2hMYWJlbDZ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDc9dGhpcy5naXRCcmFuY2hMYWJlbDd8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxHcyh0aGlzLmJhY2tncm91bmQsMTIpLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbj10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW58fEdzKHRoaXMuYmFja2dyb3VuZCwyKX1jYWxjdWxhdGUocyl7aWYodHlwZW9mIHMhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1jb25zdCB1PU9iamVjdC5rZXlzKHMpO3UuZm9yRWFjaChkPT57dGhpc1tkXT1zW2RdfSksdGhpcy51cGRhdGVDb2xvcnMoKSx1LmZvckVhY2goZD0+e3RoaXNbZF09c1tkXX0pfX07Y29uc3QgSVB0PWk9Pntjb25zdCBzPW5ldyBEUHQ7cmV0dXJuIHMuY2FsY3VsYXRlKGkpLHN9O2xldCBPUHQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjRUNFQ0ZGIix0aGlzLnNlY29uZGFyeUNvbG9yPUluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuc2Vjb25kYXJ5Q29sb3I9IiNmZmZmZGUiLHRoaXMudGVydGlhcnlDb2xvcj1Jbih0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9VHAodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1UcCh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1UcCh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPVZpKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1WaSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPVZpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9VmkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1WaSh0aGlzLmJhY2tncm91bmQpLHRoaXMuYmFja2dyb3VuZD0id2hpdGUiLHRoaXMubWFpbkJrZz0iI0VDRUNGRiIsdGhpcy5zZWNvbmRCa2c9IiNmZmZmZGUiLHRoaXMubGluZUNvbG9yPSIjMzMzMzMzIix0aGlzLmJvcmRlcjE9IiM5MzcwREIiLHRoaXMuYm9yZGVyMj0iI2FhYWEzMyIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iIzMzMzMzMyIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMubGFiZWxCYWNrZ3JvdW5kPSIjZThlOGU4Iix0aGlzLnRleHRDb2xvcj0iIzMzMyIsdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImJsYWNrIix0aGlzLmFjdG9yTGluZUNvbG9yPSJncmV5Iix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9ImNhbGN1bGF0ZWQiLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPSIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9U0MoMTAyLDEwMiwyNTUsLjQ5KSx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iI2ZmZjQwMCIsdGhpcy50YXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMudGFza0JrZ0NvbG9yPSIjOGE5MGRkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iYmxhY2siLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSIjYmZjN2ZmIix0aGlzLmdyaWRDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0icmVkIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIix0aGlzLnVwZGF0ZUNvbG9ycygpfXVwZGF0ZUNvbG9ycygpe3ZhciBzLHUsZCxwLHYsYix5LFQsXyxBLFA7dGhpcy5jU2NhbGUwPXRoaXMuY1NjYWxlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzB9KSx0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjkwfSksdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTUwfSksdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjEwfSksdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjcwfSksdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDozMDB9KSx0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMzMH0pLHRoaXNbImNTY2FsZVBlZXIxIl09dGhpc1siY1NjYWxlUGVlcjEiXXx8ZmEodGhpcy5zZWNvbmRhcnlDb2xvciw0NSksdGhpc1siY1NjYWxlUGVlcjIiXT10aGlzWyJjU2NhbGVQZWVyMiJdfHxmYSh0aGlzLnRlcnRpYXJ5Q29sb3IsNDApO2ZvcihsZXQgUj0wO1I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtSKyspdGhpc1siY1NjYWxlIitSXT1mYSh0aGlzWyJjU2NhbGUiK1JdLDEwKSx0aGlzWyJjU2NhbGVQZWVyIitSXT10aGlzWyJjU2NhbGVQZWVyIitSXXx8ZmEodGhpc1siY1NjYWxlIitSXSwyNSk7Zm9yKGxldCBSPTA7Ujx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO1IrKyl0aGlzWyJjU2NhbGVJbnYiK1JdPXRoaXNbImNTY2FsZUludiIrUl18fEluKHRoaXNbImNTY2FsZSIrUl0se2g6MTgwfSk7Zm9yKGxldCBSPTA7Ujw1O1IrKyl0aGlzWyJzdXJmYWNlIitSXT10aGlzWyJzdXJmYWNlIitSXXx8SW4odGhpcy5tYWluQmtnLHtoOjMwLGw6LSg1K1IqNSl9KSx0aGlzWyJzdXJmYWNlUGVlciIrUl09dGhpc1sic3VyZmFjZVBlZXIiK1JdfHxJbih0aGlzLm1haW5Ca2cse2g6MzAsbDotKDcrUio1KX0pO2lmKHRoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yIT09ImNhbGN1bGF0ZWQiJiZ0aGlzLnNjYWxlTGFiZWxDb2xvcj90aGlzLnNjYWxlTGFiZWxDb2xvcjp0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMubGFiZWxUZXh0Q29sb3IhPT0iY2FsY3VsYXRlZCIpe3RoaXMuY1NjYWxlTGFiZWwwPXRoaXMuY1NjYWxlTGFiZWwwfHxWaSh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmNTY2FsZUxhYmVsMz10aGlzLmNTY2FsZUxhYmVsM3x8VmkodGhpcy5sYWJlbFRleHRDb2xvcik7Zm9yKGxldCBSPTA7Ujx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO1IrKyl0aGlzWyJjU2NhbGVMYWJlbCIrUl09dGhpc1siY1NjYWxlTGFiZWwiK1JdfHx0aGlzLmxhYmVsVGV4dENvbG9yfXRoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD10aGlzLmxhYmVsQmFja2dyb3VuZCx0aGlzLmFjdG9yQm9yZGVyPUdzKHRoaXMuYm9yZGVyMSwyMyksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5zaWduYWxDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIyLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiNmMGYwZjAiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLm5vZGVCb3JkZXIsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1Jbih0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPUluKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND1Jbih0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1Jbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PUluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PUluKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHxJbih0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTQwfSksdGhpcy5waWU0PXRoaXMucGllNHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU1PXRoaXMucGllNXx8SW4odGhpcy5zZWNvbmRhcnlDb2xvcix7bDotMzB9KSx0aGlzLnBpZTY9dGhpcy5waWU2fHxJbih0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTIwfSksdGhpcy5waWU3PXRoaXMucGllN3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMjB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotNDB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotNDB9KSx0aGlzLnBpZTEwPXRoaXMucGllMTB8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTQwfSksdGhpcy5waWUxMT10aGlzLnBpZTExfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotOTAsbDotNDB9KSx0aGlzLnBpZTEyPXRoaXMucGllMTJ8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOi0zMH0pLHRoaXMucGllVGl0bGVUZXh0U2l6ZT10aGlzLnBpZVRpdGxlVGV4dFNpemV8fCIyNXB4Iix0aGlzLnBpZVRpdGxlVGV4dENvbG9yPXRoaXMucGllVGl0bGVUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTZWN0aW9uVGV4dFNpemU9dGhpcy5waWVTZWN0aW9uVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3I9dGhpcy5waWVTZWN0aW9uVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnBpZUxlZ2VuZFRleHRTaXplPXRoaXMucGllTGVnZW5kVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZUxlZ2VuZFRleHRDb2xvcj10aGlzLnBpZUxlZ2VuZFRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVN0cm9rZUNvbG9yPXRoaXMucGllU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVTdHJva2VXaWR0aD10aGlzLnBpZVN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGg9dGhpcy5waWVPdXRlclN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3I9dGhpcy5waWVPdXRlclN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucXVhZHJhbnQxRmlsbD10aGlzLnF1YWRyYW50MUZpbGx8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucXVhZHJhbnQyRmlsbD10aGlzLnF1YWRyYW50MkZpbGx8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtyOjUsZzo1LGI6NX0pLHRoaXMucXVhZHJhbnQzRmlsbD10aGlzLnF1YWRyYW50M0ZpbGx8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtyOjEwLGc6MTAsYjoxMH0pLHRoaXMucXVhZHJhbnQ0RmlsbD10aGlzLnF1YWRyYW50NEZpbGx8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtyOjE1LGc6MTUsYjoxNX0pLHRoaXMucXVhZHJhbnQxVGV4dEZpbGw9dGhpcy5xdWFkcmFudDFUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnQyVGV4dEZpbGw9dGhpcy5xdWFkcmFudDJUZXh0RmlsbHx8SW4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi01LGc6LTUsYjotNX0pLHRoaXMucXVhZHJhbnQzVGV4dEZpbGw9dGhpcy5xdWFkcmFudDNUZXh0RmlsbHx8SW4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xMCxnOi0xMCxiOi0xMH0pLHRoaXMucXVhZHJhbnQ0VGV4dEZpbGw9dGhpcy5xdWFkcmFudDRUZXh0RmlsbHx8SW4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xNSxnOi0xNSxiOi0xNX0pLHRoaXMucXVhZHJhbnRQb2ludEZpbGw9dGhpcy5xdWFkcmFudFBvaW50RmlsbHx8X0ModGhpcy5xdWFkcmFudDFGaWxsKT9Hcyh0aGlzLnF1YWRyYW50MUZpbGwpOmZhKHRoaXMucXVhZHJhbnQxRmlsbCksdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGw9dGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRUaXRsZUZpbGw9dGhpcy5xdWFkcmFudFRpdGxlRmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMueHlDaGFydD17YmFja2dyb3VuZENvbG9yOigocz10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpzLmJhY2tncm91bmRDb2xvcil8fHRoaXMuYmFja2dyb3VuZCx0aXRsZUNvbG9yOigodT10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDp1LnRpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaXRsZUNvbG9yOigoZD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpkLnhBeGlzVGl0bGVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xhYmVsQ29sb3I6KChwPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOnAueEF4aXNMYWJlbENvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGlja0NvbG9yOigodj10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDp2LnhBeGlzVGlja0NvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGluZUNvbG9yOigoYj10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpiLnhBeGlzTGluZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGl0bGVDb2xvcjooKHk9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6eS55QXhpc1RpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMYWJlbENvbG9yOigoVD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpULnlBeGlzTGFiZWxDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpY2tDb2xvcjooKF89dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Xy55QXhpc1RpY2tDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xpbmVDb2xvcjooKEE9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6QS55QXhpc0xpbmVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcixwbG90Q29sb3JQYWxldHRlOigoUD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpQLnBsb3RDb2xvclBhbGV0dGUpfHwiI0VDRUNGRiwjODQ5M0E2LCNGRkMzQTAsI0RDRERFMSwjQjhFOTk0LCNEMUEzNkYsI0MzQ0RFNiwjRkZCNkMxLCM0OTYwNzgsI0Y4RjNFMyJ9LHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8dGhpcy5sYWJlbEJhY2tncm91bmQsdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5naXQwPXRoaXMuZ2l0MHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5naXQxPXRoaXMuZ2l0MXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmdpdDI9dGhpcy5naXQyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5naXQzPXRoaXMuZ2l0M3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksdGhpcy5naXQ0PXRoaXMuZ2l0NHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksdGhpcy5naXQ1PXRoaXMuZ2l0NXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwfSksdGhpcy5naXQ2PXRoaXMuZ2l0Nnx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmdpdDc9dGhpcy5naXQ3fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmRhcmtNb2RlPyh0aGlzLmdpdDA9R3ModGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9R3ModGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9R3ModGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9R3ModGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9R3ModGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9R3ModGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9R3ModGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9R3ModGhpcy5naXQ3LDI1KSk6KHRoaXMuZ2l0MD1mYSh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1mYSh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1mYSh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1mYSh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1mYSh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1mYSh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1mYSh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1mYSh0aGlzLmdpdDcsMjUpKSx0aGlzLmdpdEludjA9dGhpcy5naXRJbnYwfHxmYShWaSh0aGlzLmdpdDApLDI1KSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHxWaSh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fFZpKHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8VmkodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHxWaSh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fFZpKHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8VmkodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHxWaSh0aGlzLmdpdDcpLHRoaXMuZ2l0QnJhbmNoTGFiZWwwPXRoaXMuZ2l0QnJhbmNoTGFiZWwwfHxWaSh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsMT10aGlzLmdpdEJyYW5jaExhYmVsMXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmdpdEJyYW5jaExhYmVsMnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz10aGlzLmdpdEJyYW5jaExhYmVsM3x8VmkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDQ9dGhpcy5naXRCcmFuY2hMYWJlbDR8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5naXRCcmFuY2hMYWJlbDV8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5naXRCcmFuY2hMYWJlbDZ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDc9dGhpcy5naXRCcmFuY2hMYWJlbDd8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxUWCx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxDWH1jYWxjdWxhdGUocyl7aWYodHlwZW9mIHMhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1jb25zdCB1PU9iamVjdC5rZXlzKHMpO3UuZm9yRWFjaChkPT57dGhpc1tkXT1zW2RdfSksdGhpcy51cGRhdGVDb2xvcnMoKSx1LmZvckVhY2goZD0+e3RoaXNbZF09c1tkXX0pfX07Y29uc3QgZjJlPWk9Pntjb25zdCBzPW5ldyBPUHQ7cmV0dXJuIHMuY2FsY3VsYXRlKGkpLHN9O2xldCBOUHQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjY2RlNDk4Iix0aGlzLnNlY29uZGFyeUNvbG9yPSIjY2RmZmIyIix0aGlzLmJhY2tncm91bmQ9IndoaXRlIix0aGlzLm1haW5Ca2c9IiNjZGU0OTgiLHRoaXMuc2Vjb25kQmtnPSIjY2RmZmIyIix0aGlzLmxpbmVDb2xvcj0iZ3JlZW4iLHRoaXMuYm9yZGVyMT0iIzEzNTQwYyIsdGhpcy5ib3JkZXIyPSIjNmVhYTQ5Iix0aGlzLmFycm93aGVhZENvbG9yPSJncmVlbiIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMudGVydGlhcnlDb2xvcj1HcygiI2NkZTQ5OCIsMTApLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPVRwKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9VHAodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9VHAodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1WaSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9VmkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1WaSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5saW5lQ29sb3I9VmkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1WaSh0aGlzLmJhY2tncm91bmQpLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iIzMzMyIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSIjZThlOGU4Iix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJibGFjayIsdGhpcy5hY3RvckxpbmVDb2xvcj0iZ3JleSIsdGhpcy5zaWduYWxDb2xvcj0iIzMzMyIsdGhpcy5zaWduYWxUZXh0Q29sb3I9IiMzMzMiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSIjMzI2OTMyIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSIjNmVhYTQ5Iix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iIzZlYWE0OSIsdGhpcy5leGNsdWRlQmtnQ29sb3I9IiNlZWVlZWUiLHRoaXMudGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tCa2dDb2xvcj0iIzQ4N2UzYSIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9IndoaXRlIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImJsYWNrIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ncmlkQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9IiNmZjg4ODgiLHRoaXMuY3JpdEJrZ0NvbG9yPSJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9InJlZCIsdGhpcy5wZXJzb25Cb3JkZXI9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5wZXJzb25Ca2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiJ9dXBkYXRlQ29sb3JzKCl7dmFyIHMsdSxkLHAsdixiLHksVCxfLEEsUDt0aGlzLmFjdG9yQm9yZGVyPWZhKHRoaXMubWFpbkJrZywyMCksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMuYm9yZGVyMix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmNTY2FsZTA9dGhpcy5jU2NhbGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmNTY2FsZTE9dGhpcy5jU2NhbGUxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDozMH0pLHRoaXMuY1NjYWxlND10aGlzLmNTY2FsZTR8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5jU2NhbGU1PXRoaXMuY1NjYWxlNXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6OTB9KSx0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmNTY2FsZTc9dGhpcy5jU2NhbGU3fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxNTB9KSx0aGlzLmNTY2FsZTg9dGhpcy5jU2NhbGU4fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoyMTB9KSx0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoyNzB9KSx0aGlzLmNTY2FsZTEwPXRoaXMuY1NjYWxlMTB8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwMH0pLHRoaXMuY1NjYWxlMTE9dGhpcy5jU2NhbGUxMXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzMwfSksdGhpc1siY1NjYWxlUGVlcjEiXT10aGlzWyJjU2NhbGVQZWVyMSJdfHxmYSh0aGlzLnNlY29uZGFyeUNvbG9yLDQ1KSx0aGlzWyJjU2NhbGVQZWVyMiJdPXRoaXNbImNTY2FsZVBlZXIyIl18fGZhKHRoaXMudGVydGlhcnlDb2xvciw0MCk7Zm9yKGxldCBSPTA7Ujx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO1IrKyl0aGlzWyJjU2NhbGUiK1JdPWZhKHRoaXNbImNTY2FsZSIrUl0sMTApLHRoaXNbImNTY2FsZVBlZXIiK1JdPXRoaXNbImNTY2FsZVBlZXIiK1JdfHxmYSh0aGlzWyJjU2NhbGUiK1JdLDI1KTtmb3IobGV0IFI9MDtSPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7UisrKXRoaXNbImNTY2FsZUludiIrUl09dGhpc1siY1NjYWxlSW52IitSXXx8SW4odGhpc1siY1NjYWxlIitSXSx7aDoxODB9KTt0aGlzLnNjYWxlTGFiZWxDb2xvcj10aGlzLnNjYWxlTGFiZWxDb2xvciE9PSJjYWxjdWxhdGVkIiYmdGhpcy5zY2FsZUxhYmVsQ29sb3I/dGhpcy5zY2FsZUxhYmVsQ29sb3I6dGhpcy5sYWJlbFRleHRDb2xvcjtmb3IobGV0IFI9MDtSPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7UisrKXRoaXNbImNTY2FsZUxhYmVsIitSXT10aGlzWyJjU2NhbGVMYWJlbCIrUl18fHRoaXMuc2NhbGVMYWJlbENvbG9yO2ZvcihsZXQgUj0wO1I8NTtSKyspdGhpc1sic3VyZmFjZSIrUl09dGhpc1sic3VyZmFjZSIrUl18fEluKHRoaXMubWFpbkJrZyx7aDozMCxzOi0zMCxsOi0oNStSKjUpfSksdGhpc1sic3VyZmFjZVBlZXIiK1JdPXRoaXNbInN1cmZhY2VQZWVyIitSXXx8SW4odGhpcy5tYWluQmtnLHtoOjMwLHM6LTMwLGw6LSg4K1IqNSl9KTt0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudGFza0JvcmRlckNvbG9yPXRoaXMuYm9yZGVyMSx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMubWFpbkJrZyx0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2YwZjBmMCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz1Jbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9SW4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj1Jbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1Jbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMucGllND10aGlzLnBpZTR8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fEluKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTMwfSksdGhpcy5waWU2PXRoaXMucGllNnx8SW4odGhpcy50ZXJ0aWFyeUNvbG9yLHtoOjQwLGw6LTQwfSksdGhpcy5waWU3PXRoaXMucGllN3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMTB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMTB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDowfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi01MH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTUwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotNTB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fF9DKHRoaXMucXVhZHJhbnQxRmlsbCk/R3ModGhpcy5xdWFkcmFudDFGaWxsKTpmYSh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjooKHM9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6cy5iYWNrZ3JvdW5kQ29sb3IpfHx0aGlzLmJhY2tncm91bmQsdGl0bGVDb2xvcjooKHU9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6dS50aXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGl0bGVDb2xvcjooKGQ9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6ZC54QXhpc1RpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOigocD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpwLnhBeGlzTGFiZWxDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpY2tDb2xvcjooKHY9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6di54QXhpc1RpY2tDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xpbmVDb2xvcjooKGI9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Yi54QXhpc0xpbmVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6KCh5PXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOnkueUF4aXNUaXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGFiZWxDb2xvcjooKFQ9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6VC55QXhpc0xhYmVsQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaWNrQ29sb3I6KChfPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOl8ueUF4aXNUaWNrQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6KChBPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkEueUF4aXNMaW5lQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IscGxvdENvbG9yUGFsZXR0ZTooKFA9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6UC5wbG90Q29sb3JQYWxldHRlKXx8IiNDREU0OTgsI0ZGNkI2QiwjQTBEMkRCLCNEN0JERTIsI0YwRjBGMCwjRkZDM0EwLCM3RkQ4QkUsI0ZGOUE4QiwjRkFGM0UwLCNGRkYxNzYifSx0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9dGhpcy5naXQwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmdpdDE9dGhpcy5naXQxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZ2l0Mj10aGlzLmdpdDJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmdpdDM9dGhpcy5naXQzfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSx0aGlzLmdpdDQ9dGhpcy5naXQ0fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotNjB9KSx0aGlzLmdpdDU9dGhpcy5naXQ1fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSx0aGlzLmdpdDY9dGhpcy5naXQ2fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuZ2l0Nz10aGlzLmdpdDd8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuZGFya01vZGU/KHRoaXMuZ2l0MD1Hcyh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1Hcyh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1Hcyh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1Hcyh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1Hcyh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1Hcyh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1Hcyh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1Hcyh0aGlzLmdpdDcsMjUpKToodGhpcy5naXQwPWZhKHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPWZhKHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPWZhKHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPWZhKHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PWZhKHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PWZhKHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PWZhKHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PWZhKHRoaXMuZ2l0NywyNSkpLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fFZpKHRoaXMuZ2l0MCksdGhpcy5naXRJbnYxPXRoaXMuZ2l0SW52MXx8VmkodGhpcy5naXQxKSx0aGlzLmdpdEludjI9dGhpcy5naXRJbnYyfHxWaSh0aGlzLmdpdDIpLHRoaXMuZ2l0SW52Mz10aGlzLmdpdEludjN8fFZpKHRoaXMuZ2l0MyksdGhpcy5naXRJbnY0PXRoaXMuZ2l0SW52NHx8VmkodGhpcy5naXQ0KSx0aGlzLmdpdEludjU9dGhpcy5naXRJbnY1fHxWaSh0aGlzLmdpdDUpLHRoaXMuZ2l0SW52Nj10aGlzLmdpdEludjZ8fFZpKHRoaXMuZ2l0NiksdGhpcy5naXRJbnY3PXRoaXMuZ2l0SW52N3x8VmkodGhpcy5naXQ3KSx0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmdpdEJyYW5jaExhYmVsMHx8VmkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDE9dGhpcy5naXRCcmFuY2hMYWJlbDF8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5naXRCcmFuY2hMYWJlbDJ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fFZpKHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuZ2l0QnJhbmNoTGFiZWw0fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuZ2l0QnJhbmNoTGFiZWw2fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuZ2l0QnJhbmNoTGFiZWw3fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8VFgsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbnx8Q1h9Y2FsY3VsYXRlKHMpe2lmKHR5cGVvZiBzIT0ib2JqZWN0Iil7dGhpcy51cGRhdGVDb2xvcnMoKTtyZXR1cm59Y29uc3QgdT1PYmplY3Qua2V5cyhzKTt1LmZvckVhY2goZD0+e3RoaXNbZF09c1tkXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksdS5mb3JFYWNoKGQ9Pnt0aGlzW2RdPXNbZF19KX19O2NvbnN0IFBQdD1pPT57Y29uc3Qgcz1uZXcgTlB0O3JldHVybiBzLmNhbGN1bGF0ZShpKSxzfTtjbGFzcyBCUHR7Y29uc3RydWN0b3IoKXt0aGlzLnByaW1hcnlDb2xvcj0iI2VlZSIsdGhpcy5jb250cmFzdD0iIzcwNzA3MCIsdGhpcy5zZWNvbmRhcnlDb2xvcj1Hcyh0aGlzLmNvbnRyYXN0LDU1KSx0aGlzLmJhY2tncm91bmQ9IiNmZmZmZmYiLHRoaXMudGVydGlhcnlDb2xvcj1Jbih0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9VHAodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1UcCh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1UcCh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPVZpKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1WaSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPVZpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9VmkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1WaSh0aGlzLmJhY2tncm91bmQpLHRoaXMubWFpbkJrZz0iI2VlZSIsdGhpcy5zZWNvbmRCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubGluZUNvbG9yPSIjNjY2Iix0aGlzLmJvcmRlcjE9IiM5OTkiLHRoaXMuYm9yZGVyMj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlPSIjZmZhIix0aGlzLnRleHQ9IiMzMzMiLHRoaXMuY3JpdGljYWw9IiNkNDIiLHRoaXMuZG9uZT0iI2JiYiIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iIzMzMzMzMyIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJ3aGl0ZSIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iY2FsY3VsYXRlZCIsdGhpcy5leGNsdWRlQmtnQ29sb3I9IiNlZWVlZWUiLHRoaXMudGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9IndoaXRlIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5wZXJzb25Cb3JkZXI9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5wZXJzb25Ca2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiJ9dXBkYXRlQ29sb3JzKCl7dmFyIHMsdSxkLHAsdixiLHksVCxfLEEsUDt0aGlzLnNlY29uZEJrZz1Hcyh0aGlzLmNvbnRyYXN0LDU1KSx0aGlzLmJvcmRlcjI9dGhpcy5jb250cmFzdCx0aGlzLmFjdG9yQm9yZGVyPUdzKHRoaXMuYm9yZGVyMSwyMyksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnNpZ25hbENvbG9yPXRoaXMudGV4dCx0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLm5vdGVCb3JkZXJDb2xvcj0iIzk5OSIsdGhpcy5ub3RlQmtnQ29sb3I9IiM2NjYiLHRoaXMubm90ZVRleHRDb2xvcj0iI2ZmZiIsdGhpcy5jU2NhbGUwPXRoaXMuY1NjYWxlMHx8IiM1NTUiLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fCIjRjRGNEY0Iix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHwiIzU1NSIsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8IiNCQkIiLHRoaXMuY1NjYWxlND10aGlzLmNTY2FsZTR8fCIjNzc3Iix0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHwiIzk5OSIsdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8IiNEREQiLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fCIjRkZGIix0aGlzLmNTY2FsZTg9dGhpcy5jU2NhbGU4fHwiI0RERCIsdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8IiNCQkIiLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8IiM5OTkiLHRoaXMuY1NjYWxlMTE9dGhpcy5jU2NhbGUxMXx8IiM3NzciO2ZvcihsZXQgUj0wO1I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtSKyspdGhpc1siY1NjYWxlSW52IitSXT10aGlzWyJjU2NhbGVJbnYiK1JdfHxWaSh0aGlzWyJjU2NhbGUiK1JdKTtmb3IobGV0IFI9MDtSPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7UisrKXRoaXMuZGFya01vZGU/dGhpc1siY1NjYWxlUGVlciIrUl09dGhpc1siY1NjYWxlUGVlciIrUl18fEdzKHRoaXNbImNTY2FsZSIrUl0sMTApOnRoaXNbImNTY2FsZVBlZXIiK1JdPXRoaXNbImNTY2FsZVBlZXIiK1JdfHxmYSh0aGlzWyJjU2NhbGUiK1JdLDEwKTt0aGlzLnNjYWxlTGFiZWxDb2xvcj10aGlzLnNjYWxlTGFiZWxDb2xvcnx8KHRoaXMuZGFya01vZGU/ImJsYWNrIjp0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmNTY2FsZUxhYmVsMD10aGlzLmNTY2FsZUxhYmVsMHx8dGhpcy5jU2NhbGUxLHRoaXMuY1NjYWxlTGFiZWwyPXRoaXMuY1NjYWxlTGFiZWwyfHx0aGlzLmNTY2FsZTE7Zm9yKGxldCBSPTA7Ujx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO1IrKyl0aGlzWyJjU2NhbGVMYWJlbCIrUl09dGhpc1siY1NjYWxlTGFiZWwiK1JdfHx0aGlzLnNjYWxlTGFiZWxDb2xvcjtmb3IobGV0IFI9MDtSPDU7UisrKXRoaXNbInN1cmZhY2UiK1JdPXRoaXNbInN1cmZhY2UiK1JdfHxJbih0aGlzLm1haW5Ca2cse2w6LSg1K1IqNSl9KSx0aGlzWyJzdXJmYWNlUGVlciIrUl09dGhpc1sic3VyZmFjZVBlZXIiK1JdfHxJbih0aGlzLm1haW5Ca2cse2w6LSg4K1IqNSl9KTt0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRleHQsdGhpcy5zZWN0aW9uQmtnQ29sb3I9R3ModGhpcy5jb250cmFzdCwzMCksdGhpcy5zZWN0aW9uQmtnQ29sb3IyPUdzKHRoaXMuY29udHJhc3QsMzApLHRoaXMudGFza0JvcmRlckNvbG9yPWZhKHRoaXMuY29udHJhc3QsMTApLHRoaXMudGFza0JrZ0NvbG9yPXRoaXMuY29udHJhc3QsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9dGhpcy50ZXh0LHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj10aGlzLnRhc2tCb3JkZXJDb2xvcix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj10aGlzLm1haW5Ca2csdGhpcy5ncmlkQ29sb3I9R3ModGhpcy5ib3JkZXIxLDMwKSx0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5kb25lLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmNyaXRCa2dDb2xvcj10aGlzLmNyaXRpY2FsLHRoaXMuY3JpdEJvcmRlckNvbG9yPWZhKHRoaXMuY3JpdEJrZ0NvbG9yLDEwKSx0aGlzLnRvZGF5TGluZUNvbG9yPXRoaXMuY3JpdEJrZ0NvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHwiIzAwMCIsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2Y0ZjRmNCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLnN0YXRlQm9yZGVyPXRoaXMuc3RhdGVCb3JkZXJ8fCIjMDAwIix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPSIjMjIyIix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPUluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9SW4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PUluKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PUluKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9SW4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KTtmb3IobGV0IFI9MDtSPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7UisrKXRoaXNbInBpZSIrUl09dGhpc1siY1NjYWxlIitSXTt0aGlzLnBpZTEyPXRoaXMucGllMCx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fF9DKHRoaXMucXVhZHJhbnQxRmlsbCk/R3ModGhpcy5xdWFkcmFudDFGaWxsKTpmYSh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjooKHM9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6cy5iYWNrZ3JvdW5kQ29sb3IpfHx0aGlzLmJhY2tncm91bmQsdGl0bGVDb2xvcjooKHU9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6dS50aXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGl0bGVDb2xvcjooKGQ9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6ZC54QXhpc1RpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOigocD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpwLnhBeGlzTGFiZWxDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpY2tDb2xvcjooKHY9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6di54QXhpc1RpY2tDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xpbmVDb2xvcjooKGI9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Yi54QXhpc0xpbmVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6KCh5PXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOnkueUF4aXNUaXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGFiZWxDb2xvcjooKFQ9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6VC55QXhpc0xhYmVsQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaWNrQ29sb3I6KChfPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOl8ueUF4aXNUaWNrQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6KChBPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkEueUF4aXNMaW5lQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IscGxvdENvbG9yUGFsZXR0ZTooKFA9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6UC5wbG90Q29sb3JQYWxldHRlKXx8IiNFRUUsIzZCQjhFNCwjOEFDQjg4LCNDN0FDRDYsI0U4RENDMiwjRkZCMkE4LCNGRkYzODAsIzdFOEQ5MSwjRkZEOEIxLCNGQUYzRTAifSx0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9ZmEodGhpcy5waWUxLDI1KXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5naXQxPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmdpdDI9dGhpcy5waWUzfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5naXQzPXRoaXMucGllNHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksdGhpcy5naXQ0PXRoaXMucGllNXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksdGhpcy5naXQ1PXRoaXMucGllNnx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwfSksdGhpcy5naXQ2PXRoaXMucGllN3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmdpdDc9dGhpcy5waWU4fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmdpdEludjA9dGhpcy5naXRJbnYwfHxWaSh0aGlzLmdpdDApLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fFZpKHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8VmkodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHxWaSh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fFZpKHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8VmkodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHxWaSh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fFZpKHRoaXMuZ2l0NyksdGhpcy5icmFuY2hMYWJlbENvbG9yPXRoaXMuYnJhbmNoTGFiZWxDb2xvcnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDE9IndoaXRlIix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9IndoaXRlIix0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxUWCx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxDWH1jYWxjdWxhdGUocyl7aWYodHlwZW9mIHMhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1jb25zdCB1PU9iamVjdC5rZXlzKHMpO3UuZm9yRWFjaChkPT57dGhpc1tkXT1zW2RdfSksdGhpcy51cGRhdGVDb2xvcnMoKSx1LmZvckVhY2goZD0+e3RoaXNbZF09c1tkXX0pfX1jb25zdCBFNz17YmFzZTp7Z2V0VGhlbWVWYXJpYWJsZXM6TVB0fSxkYXJrOntnZXRUaGVtZVZhcmlhYmxlczpJUHR9LGRlZmF1bHQ6e2dldFRoZW1lVmFyaWFibGVzOmYyZX0sZm9yZXN0OntnZXRUaGVtZVZhcmlhYmxlczpQUHR9LG5ldXRyYWw6e2dldFRoZW1lVmFyaWFibGVzOmk9Pntjb25zdCBzPW5ldyBCUHQ7cmV0dXJuIHMuY2FsY3VsYXRlKGkpLHN9fX0sVDc9e2Zsb3djaGFydDp7dXNlTWF4V2lkdGg6ITAsdGl0bGVUb3BNYXJnaW46MjUsc3ViR3JhcGhUaXRsZU1hcmdpbjp7dG9wOjAsYm90dG9tOjB9LGRpYWdyYW1QYWRkaW5nOjgsaHRtbExhYmVsczohMCxub2RlU3BhY2luZzo1MCxyYW5rU3BhY2luZzo1MCxjdXJ2ZToiYmFzaXMiLHBhZGRpbmc6MTUsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS13cmFwcGVyIix3cmFwcGluZ1dpZHRoOjIwMH0sc2VxdWVuY2U6e3VzZU1heFdpZHRoOiEwLGhpZGVVbnVzZWRQYXJ0aWNpcGFudHM6ITEsYWN0aXZhdGlvbldpZHRoOjEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGFjdG9yTWFyZ2luOjUwLHdpZHRoOjE1MCxoZWlnaHQ6NjUsYm94TWFyZ2luOjEwLGJveFRleHRNYXJnaW46NSxub3RlTWFyZ2luOjEwLG1lc3NhZ2VNYXJnaW46MzUsbWVzc2FnZUFsaWduOiJjZW50ZXIiLG1pcnJvckFjdG9yczohMCxmb3JjZU1lbnVzOiExLGJvdHRvbU1hcmdpbkFkajoxLHJpZ2h0QW5nbGVzOiExLHNob3dTZXF1ZW5jZU51bWJlcnM6ITEsYWN0b3JGb250U2l6ZToxNCxhY3RvckZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxhY3RvckZvbnRXZWlnaHQ6NDAwLG5vdGVGb250U2l6ZToxNCxub3RlRm9udEZhbWlseTonInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxub3RlRm9udFdlaWdodDo0MDAsbm90ZUFsaWduOiJjZW50ZXIiLG1lc3NhZ2VGb250U2l6ZToxNixtZXNzYWdlRm9udEZhbWlseTonInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxtZXNzYWdlRm9udFdlaWdodDo0MDAsd3JhcDohMSx3cmFwUGFkZGluZzoxMCxsYWJlbEJveFdpZHRoOjUwLGxhYmVsQm94SGVpZ2h0OjIwfSxnYW50dDp7dXNlTWF4V2lkdGg6ITAsdGl0bGVUb3BNYXJnaW46MjUsYmFySGVpZ2h0OjIwLGJhckdhcDo0LHRvcFBhZGRpbmc6NTAscmlnaHRQYWRkaW5nOjc1LGxlZnRQYWRkaW5nOjc1LGdyaWRMaW5lU3RhcnRQYWRkaW5nOjM1LGZvbnRTaXplOjExLHNlY3Rpb25Gb250U2l6ZToxMSxudW1iZXJTZWN0aW9uU3R5bGVzOjQsYXhpc0Zvcm1hdDoiJVktJW0tJWQiLHRvcEF4aXM6ITEsZGlzcGxheU1vZGU6IiIsd2Vla2RheToic3VuZGF5In0sam91cm5leTp7dXNlTWF4V2lkdGg6ITAsZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsbGVmdE1hcmdpbjoxNTAsd2lkdGg6MTUwLGhlaWdodDo1MCxib3hNYXJnaW46MTAsYm94VGV4dE1hcmdpbjo1LG5vdGVNYXJnaW46MTAsbWVzc2FnZU1hcmdpbjozNSxtZXNzYWdlQWxpZ246ImNlbnRlciIsYm90dG9tTWFyZ2luQWRqOjEscmlnaHRBbmdsZXM6ITEsdGFza0ZvbnRTaXplOjE0LHRhc2tGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsdGFza01hcmdpbjo1MCxhY3RpdmF0aW9uV2lkdGg6MTAsdGV4dFBsYWNlbWVudDoiZm8iLGFjdG9yQ29sb3VyczpbIiM4RkJDOEYiLCIjN0NGQzAwIiwiIzAwRkZGRiIsIiMyMEIyQUEiLCIjQjBFMEU2IiwiI0ZGRkZFMCJdLHNlY3Rpb25GaWxsczpbIiMxOTE5NzAiLCIjOEIwMDhCIiwiIzRCMDA4MiIsIiMyRjRGNEYiLCIjODAwMDAwIiwiIzhCNDUxMyIsIiMwMDAwOEIiXSxzZWN0aW9uQ29sb3VyczpbIiNmZmYiXX0sY2xhc3M6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGFycm93TWFya2VyQWJzb2x1dGU6ITEsZGl2aWRlck1hcmdpbjoxMCxwYWRkaW5nOjUsdGV4dEhlaWdodDoxMCxkZWZhdWx0UmVuZGVyZXI6ImRhZ3JlLXdyYXBwZXIiLGh0bWxMYWJlbHM6ITF9LHN0YXRlOnt1c2VNYXhXaWR0aDohMCx0aXRsZVRvcE1hcmdpbjoyNSxkaXZpZGVyTWFyZ2luOjEwLHNpemVVbml0OjUscGFkZGluZzo4LHRleHRIZWlnaHQ6MTAsdGl0bGVTaGlmdDotMTUsbm90ZU1hcmdpbjoxMCxmb3JrV2lkdGg6NzAsZm9ya0hlaWdodDo3LG1pbmlQYWRkaW5nOjIsZm9udFNpemVGYWN0b3I6NS4wMixmb250U2l6ZToyNCxsYWJlbEhlaWdodDoxNixlZGdlTGVuZ3RoRmFjdG9yOiIyMCIsY29tcG9zaXRUaXRsZVNpemU6MzUscmFkaXVzOjUsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS13cmFwcGVyIn0sZXI6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpYWdyYW1QYWRkaW5nOjIwLGxheW91dERpcmVjdGlvbjoiVEIiLG1pbkVudGl0eVdpZHRoOjEwMCxtaW5FbnRpdHlIZWlnaHQ6NzUsZW50aXR5UGFkZGluZzoxNSxzdHJva2U6ImdyYXkiLGZpbGw6ImhvbmV5ZGV3Iixmb250U2l6ZToxMn0scGllOnt1c2VNYXhXaWR0aDohMCx0ZXh0UG9zaXRpb246Ljc1fSxxdWFkcmFudENoYXJ0Ont1c2VNYXhXaWR0aDohMCxjaGFydFdpZHRoOjUwMCxjaGFydEhlaWdodDo1MDAsdGl0bGVGb250U2l6ZToyMCx0aXRsZVBhZGRpbmc6MTAscXVhZHJhbnRQYWRkaW5nOjUseEF4aXNMYWJlbFBhZGRpbmc6NSx5QXhpc0xhYmVsUGFkZGluZzo1LHhBeGlzTGFiZWxGb250U2l6ZToxNix5QXhpc0xhYmVsRm9udFNpemU6MTYscXVhZHJhbnRMYWJlbEZvbnRTaXplOjE2LHF1YWRyYW50VGV4dFRvcFBhZGRpbmc6NSxwb2ludFRleHRQYWRkaW5nOjUscG9pbnRMYWJlbEZvbnRTaXplOjEyLHBvaW50UmFkaXVzOjUseEF4aXNQb3NpdGlvbjoidG9wIix5QXhpc1Bvc2l0aW9uOiJsZWZ0IixxdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6MSxxdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6Mn0seHlDaGFydDp7dXNlTWF4V2lkdGg6ITAsd2lkdGg6NzAwLGhlaWdodDo1MDAsdGl0bGVGb250U2l6ZToyMCx0aXRsZVBhZGRpbmc6MTAsc2hvd1RpdGxlOiEwLHhBeGlzOnskcmVmOiIjLyRkZWZzL1hZQ2hhcnRBeGlzQ29uZmlnIixzaG93TGFiZWw6ITAsbGFiZWxGb250U2l6ZToxNCxsYWJlbFBhZGRpbmc6NSxzaG93VGl0bGU6ITAsdGl0bGVGb250U2l6ZToxNix0aXRsZVBhZGRpbmc6NSxzaG93VGljazohMCx0aWNrTGVuZ3RoOjUsdGlja1dpZHRoOjIsc2hvd0F4aXNMaW5lOiEwLGF4aXNMaW5lV2lkdGg6Mn0seUF4aXM6eyRyZWY6IiMvJGRlZnMvWFlDaGFydEF4aXNDb25maWciLHNob3dMYWJlbDohMCxsYWJlbEZvbnRTaXplOjE0LGxhYmVsUGFkZGluZzo1LHNob3dUaXRsZTohMCx0aXRsZUZvbnRTaXplOjE2LHRpdGxlUGFkZGluZzo1LHNob3dUaWNrOiEwLHRpY2tMZW5ndGg6NSx0aWNrV2lkdGg6MixzaG93QXhpc0xpbmU6ITAsYXhpc0xpbmVXaWR0aDoyfSxjaGFydE9yaWVudGF0aW9uOiJ2ZXJ0aWNhbCIscGxvdFJlc2VydmVkU3BhY2VQZXJjZW50OjUwfSxyZXF1aXJlbWVudDp7dXNlTWF4V2lkdGg6ITAscmVjdF9maWxsOiIjZjlmOWY5Iix0ZXh0X2NvbG9yOiIjMzMzIixyZWN0X2JvcmRlcl9zaXplOiIwLjVweCIscmVjdF9ib3JkZXJfY29sb3I6IiNiYmIiLHJlY3RfbWluX3dpZHRoOjIwMCxyZWN0X21pbl9oZWlnaHQ6MjAwLGZvbnRTaXplOjE0LHJlY3RfcGFkZGluZzoxMCxsaW5lX2hlaWdodDoyMH0sbWluZG1hcDp7dXNlTWF4V2lkdGg6ITAscGFkZGluZzoxMCxtYXhOb2RlV2lkdGg6MjAwfSx0aW1lbGluZTp7dXNlTWF4V2lkdGg6ITAsZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsbGVmdE1hcmdpbjoxNTAsd2lkdGg6MTUwLGhlaWdodDo1MCxib3hNYXJnaW46MTAsYm94VGV4dE1hcmdpbjo1LG5vdGVNYXJnaW46MTAsbWVzc2FnZU1hcmdpbjozNSxtZXNzYWdlQWxpZ246ImNlbnRlciIsYm90dG9tTWFyZ2luQWRqOjEscmlnaHRBbmdsZXM6ITEsdGFza0ZvbnRTaXplOjE0LHRhc2tGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsdGFza01hcmdpbjo1MCxhY3RpdmF0aW9uV2lkdGg6MTAsdGV4dFBsYWNlbWVudDoiZm8iLGFjdG9yQ29sb3VyczpbIiM4RkJDOEYiLCIjN0NGQzAwIiwiIzAwRkZGRiIsIiMyMEIyQUEiLCIjQjBFMEU2IiwiI0ZGRkZFMCJdLHNlY3Rpb25GaWxsczpbIiMxOTE5NzAiLCIjOEIwMDhCIiwiIzRCMDA4MiIsIiMyRjRGNEYiLCIjODAwMDAwIiwiIzhCNDUxMyIsIiMwMDAwOEIiXSxzZWN0aW9uQ29sb3VyczpbIiNmZmYiXSxkaXNhYmxlTXVsdGljb2xvcjohMX0sZ2l0R3JhcGg6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpYWdyYW1QYWRkaW5nOjgsbm9kZUxhYmVsOnt3aWR0aDo3NSxoZWlnaHQ6MTAwLHg6LTI1LHk6MH0sbWFpbkJyYW5jaE5hbWU6Im1haW4iLG1haW5CcmFuY2hPcmRlcjowLHNob3dDb21taXRMYWJlbDohMCxzaG93QnJhbmNoZXM6ITAscm90YXRlQ29tbWl0TGFiZWw6ITAscGFyYWxsZWxDb21taXRzOiExLGFycm93TWFya2VyQWJzb2x1dGU6ITF9LGM0Ont1c2VNYXhXaWR0aDohMCxkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxjNFNoYXBlTWFyZ2luOjUwLGM0U2hhcGVQYWRkaW5nOjIwLHdpZHRoOjIxNixoZWlnaHQ6NjAsYm94TWFyZ2luOjEwLGM0U2hhcGVJblJvdzo0LG5leHRMaW5lUGFkZGluZ1g6MCxjNEJvdW5kYXJ5SW5Sb3c6MixwZXJzb25Gb250U2l6ZToxNCxwZXJzb25Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicscGVyc29uRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9wZXJzb25Gb250U2l6ZToxNCxleHRlcm5hbF9wZXJzb25Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfcGVyc29uRm9udFdlaWdodDoibm9ybWFsIixzeXN0ZW1Gb250U2l6ZToxNCxzeXN0ZW1Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsc3lzdGVtRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9zeXN0ZW1Gb250U2l6ZToxNCxleHRlcm5hbF9zeXN0ZW1Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfc3lzdGVtRm9udFdlaWdodDoibm9ybWFsIixzeXN0ZW1fZGJGb250U2l6ZToxNCxzeXN0ZW1fZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsc3lzdGVtX2RiRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9zeXN0ZW1fZGJGb250U2l6ZToxNCxleHRlcm5hbF9zeXN0ZW1fZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFdlaWdodDoibm9ybWFsIixzeXN0ZW1fcXVldWVGb250U2l6ZToxNCxzeXN0ZW1fcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsc3lzdGVtX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250U2l6ZToxNCxleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixib3VuZGFyeUZvbnRTaXplOjE0LGJvdW5kYXJ5Rm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGJvdW5kYXJ5Rm9udFdlaWdodDoibm9ybWFsIixtZXNzYWdlRm9udFNpemU6MTIsbWVzc2FnZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxtZXNzYWdlRm9udFdlaWdodDoibm9ybWFsIixjb250YWluZXJGb250U2l6ZToxNCxjb250YWluZXJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29udGFpbmVyRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb250YWluZXJGb250U2l6ZToxNCxleHRlcm5hbF9jb250YWluZXJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29udGFpbmVyRm9udFdlaWdodDoibm9ybWFsIixjb250YWluZXJfZGJGb250U2l6ZToxNCxjb250YWluZXJfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29udGFpbmVyX2RiRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb250YWluZXJfZGJGb250U2l6ZToxNCxleHRlcm5hbF9jb250YWluZXJfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFdlaWdodDoibm9ybWFsIixjb250YWluZXJfcXVldWVGb250U2l6ZToxNCxjb250YWluZXJfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29udGFpbmVyX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250U2l6ZToxNCxleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixjb21wb25lbnRGb250U2l6ZToxNCxjb21wb25lbnRGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29tcG9uZW50Rm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb21wb25lbnRGb250U2l6ZToxNCxleHRlcm5hbF9jb21wb25lbnRGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29tcG9uZW50Rm9udFdlaWdodDoibm9ybWFsIixjb21wb25lbnRfZGJGb250U2l6ZToxNCxjb21wb25lbnRfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29tcG9uZW50X2RiRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb21wb25lbnRfZGJGb250U2l6ZToxNCxleHRlcm5hbF9jb21wb25lbnRfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFdlaWdodDoibm9ybWFsIixjb21wb25lbnRfcXVldWVGb250U2l6ZToxNCxjb21wb25lbnRfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29tcG9uZW50X3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250U2l6ZToxNCxleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIix3cmFwOiEwLHdyYXBQYWRkaW5nOjEwLHBlcnNvbl9iZ19jb2xvcjoiIzA4NDI3QiIscGVyc29uX2JvcmRlcl9jb2xvcjoiIzA3M0I2RiIsZXh0ZXJuYWxfcGVyc29uX2JnX2NvbG9yOiIjNjg2ODY4IixleHRlcm5hbF9wZXJzb25fYm9yZGVyX2NvbG9yOiIjOEE4QThBIixzeXN0ZW1fYmdfY29sb3I6IiMxMTY4QkQiLHN5c3RlbV9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLHN5c3RlbV9kYl9iZ19jb2xvcjoiIzExNjhCRCIsc3lzdGVtX2RiX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsc3lzdGVtX3F1ZXVlX2JnX2NvbG9yOiIjMTE2OEJEIixzeXN0ZW1fcXVldWVfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixleHRlcm5hbF9zeXN0ZW1fYmdfY29sb3I6IiM5OTk5OTkiLGV4dGVybmFsX3N5c3RlbV9ib3JkZXJfY29sb3I6IiM4QThBOEEiLGV4dGVybmFsX3N5c3RlbV9kYl9iZ19jb2xvcjoiIzk5OTk5OSIsZXh0ZXJuYWxfc3lzdGVtX2RiX2JvcmRlcl9jb2xvcjoiIzhBOEE4QSIsZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlX2JnX2NvbG9yOiIjOTk5OTk5IixleHRlcm5hbF9zeXN0ZW1fcXVldWVfYm9yZGVyX2NvbG9yOiIjOEE4QThBIixjb250YWluZXJfYmdfY29sb3I6IiM0MzhERDUiLGNvbnRhaW5lcl9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLGNvbnRhaW5lcl9kYl9iZ19jb2xvcjoiIzQzOERENSIsY29udGFpbmVyX2RiX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsY29udGFpbmVyX3F1ZXVlX2JnX2NvbG9yOiIjNDM4REQ1Iixjb250YWluZXJfcXVldWVfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixleHRlcm5hbF9jb250YWluZXJfYmdfY29sb3I6IiNCM0IzQjMiLGV4dGVybmFsX2NvbnRhaW5lcl9ib3JkZXJfY29sb3I6IiNBNkE2QTYiLGV4dGVybmFsX2NvbnRhaW5lcl9kYl9iZ19jb2xvcjoiI0IzQjNCMyIsZXh0ZXJuYWxfY29udGFpbmVyX2RiX2JvcmRlcl9jb2xvcjoiI0E2QTZBNiIsZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlX2JnX2NvbG9yOiIjQjNCM0IzIixleHRlcm5hbF9jb250YWluZXJfcXVldWVfYm9yZGVyX2NvbG9yOiIjQTZBNkE2Iixjb21wb25lbnRfYmdfY29sb3I6IiM4NUJCRjAiLGNvbXBvbmVudF9ib3JkZXJfY29sb3I6IiM3OEE4RDgiLGNvbXBvbmVudF9kYl9iZ19jb2xvcjoiIzg1QkJGMCIsY29tcG9uZW50X2RiX2JvcmRlcl9jb2xvcjoiIzc4QThEOCIsY29tcG9uZW50X3F1ZXVlX2JnX2NvbG9yOiIjODVCQkYwIixjb21wb25lbnRfcXVldWVfYm9yZGVyX2NvbG9yOiIjNzhBOEQ4IixleHRlcm5hbF9jb21wb25lbnRfYmdfY29sb3I6IiNDQ0NDQ0MiLGV4dGVybmFsX2NvbXBvbmVudF9ib3JkZXJfY29sb3I6IiNCRkJGQkYiLGV4dGVybmFsX2NvbXBvbmVudF9kYl9iZ19jb2xvcjoiI0NDQ0NDQyIsZXh0ZXJuYWxfY29tcG9uZW50X2RiX2JvcmRlcl9jb2xvcjoiI0JGQkZCRiIsZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlX2JnX2NvbG9yOiIjQ0NDQ0NDIixleHRlcm5hbF9jb21wb25lbnRfcXVldWVfYm9yZGVyX2NvbG9yOiIjQkZCRkJGIn0sc2Fua2V5Ont1c2VNYXhXaWR0aDohMCx3aWR0aDo2MDAsaGVpZ2h0OjQwMCxsaW5rQ29sb3I6ImdyYWRpZW50Iixub2RlQWxpZ25tZW50OiJqdXN0aWZ5IixzaG93VmFsdWVzOiEwLHByZWZpeDoiIixzdWZmaXg6IiJ9LGJsb2NrOnt1c2VNYXhXaWR0aDohMCxwYWRkaW5nOjh9LHRoZW1lOiJkZWZhdWx0IixtYXhUZXh0U2l6ZTo1ZTQsbWF4RWRnZXM6NTAwLGRhcmtNb2RlOiExLGZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsnLGxvZ0xldmVsOjUsc2VjdXJpdHlMZXZlbDoic3RyaWN0IixzdGFydE9uTG9hZDohMCxhcnJvd01hcmtlckFic29sdXRlOiExLHNlY3VyZTpbInNlY3VyZSIsInNlY3VyaXR5TGV2ZWwiLCJzdGFydE9uTG9hZCIsIm1heFRleHRTaXplIiwibWF4RWRnZXMiXSxsZWdhY3lNYXRoTUw6ITEsZGV0ZXJtaW5pc3RpY0lkczohMSxmb250U2l6ZToxNn0sTVJlPXsuLi5UNyxkZXRlcm1pbmlzdGljSURTZWVkOnZvaWQgMCx0aGVtZUNTUzp2b2lkIDAsdGhlbWVWYXJpYWJsZXM6RTcuZGVmYXVsdC5nZXRUaGVtZVZhcmlhYmxlcygpLHNlcXVlbmNlOnsuLi5UNy5zZXF1ZW5jZSxtZXNzYWdlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMubWVzc2FnZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5tZXNzYWdlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLm1lc3NhZ2VGb250V2VpZ2h0fX0sbm90ZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm5vdGVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubm90ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5ub3RlRm9udFdlaWdodH19LGFjdG9yRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuYWN0b3JGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuYWN0b3JGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuYWN0b3JGb250V2VpZ2h0fX19LGdhbnR0OnsuLi5UNy5nYW50dCx0aWNrSW50ZXJ2YWw6dm9pZCAwLHVzZVdpZHRoOnZvaWQgMH0sYzQ6ey4uLlQ3LmM0LHVzZVdpZHRoOnZvaWQgMCxwZXJzb25Gb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5wZXJzb25Gb250RmFtaWx5LGZvbnRTaXplOnRoaXMucGVyc29uRm9udFNpemUsZm9udFdlaWdodDp0aGlzLnBlcnNvbkZvbnRXZWlnaHR9fSxleHRlcm5hbF9wZXJzb25Gb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9wZXJzb25Gb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfcGVyc29uRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX3BlcnNvbkZvbnRXZWlnaHR9fSxzeXN0ZW1Gb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5zeXN0ZW1Gb250RmFtaWx5LGZvbnRTaXplOnRoaXMuc3lzdGVtRm9udFNpemUsZm9udFdlaWdodDp0aGlzLnN5c3RlbUZvbnRXZWlnaHR9fSxleHRlcm5hbF9zeXN0ZW1Gb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfc3lzdGVtRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX3N5c3RlbUZvbnRXZWlnaHR9fSxzeXN0ZW1fZGJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5zeXN0ZW1fZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuc3lzdGVtX2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLnN5c3RlbV9kYkZvbnRXZWlnaHR9fSxleHRlcm5hbF9zeXN0ZW1fZGJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9zeXN0ZW1fZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX3N5c3RlbV9kYkZvbnRXZWlnaHR9fSxzeXN0ZW1fcXVldWVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5zeXN0ZW1fcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuc3lzdGVtX3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLnN5c3RlbV9xdWV1ZUZvbnRXZWlnaHR9fSxleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9zeXN0ZW1fcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRXZWlnaHR9fSxjb250YWluZXJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb250YWluZXJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29udGFpbmVyRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbnRhaW5lckZvbnRXZWlnaHR9fSxleHRlcm5hbF9jb250YWluZXJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb250YWluZXJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbnRhaW5lckZvbnRXZWlnaHR9fSxjb250YWluZXJfZGJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb250YWluZXJfZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29udGFpbmVyX2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbnRhaW5lcl9kYkZvbnRXZWlnaHR9fSxleHRlcm5hbF9jb250YWluZXJfZGJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb250YWluZXJfZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRXZWlnaHR9fSxjb250YWluZXJfcXVldWVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb250YWluZXJfcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29udGFpbmVyX3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbnRhaW5lcl9xdWV1ZUZvbnRXZWlnaHR9fSxleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb250YWluZXJfcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRXZWlnaHR9fSxjb21wb25lbnRGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb21wb25lbnRGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29tcG9uZW50Rm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbXBvbmVudEZvbnRXZWlnaHR9fSxleHRlcm5hbF9jb21wb25lbnRGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50Rm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbXBvbmVudEZvbnRXZWlnaHR9fSxjb21wb25lbnRfZGJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb21wb25lbnRfZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29tcG9uZW50X2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbXBvbmVudF9kYkZvbnRXZWlnaHR9fSxleHRlcm5hbF9jb21wb25lbnRfZGJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRXZWlnaHR9fSxjb21wb25lbnRfcXVldWVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb21wb25lbnRfcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29tcG9uZW50X3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbXBvbmVudF9xdWV1ZUZvbnRXZWlnaHR9fSxleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRXZWlnaHR9fSxib3VuZGFyeUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmJvdW5kYXJ5Rm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmJvdW5kYXJ5Rm9udFNpemUsZm9udFdlaWdodDp0aGlzLmJvdW5kYXJ5Rm9udFdlaWdodH19LG1lc3NhZ2VGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMubWVzc2FnZUZvbnRXZWlnaHR9fX0scGllOnsuLi5UNy5waWUsdXNlV2lkdGg6OTg0fSx4eUNoYXJ0OnsuLi5UNy54eUNoYXJ0LHVzZVdpZHRoOnZvaWQgMH0scmVxdWlyZW1lbnQ6ey4uLlQ3LnJlcXVpcmVtZW50LHVzZVdpZHRoOnZvaWQgMH0sZ2l0R3JhcGg6ey4uLlQ3LmdpdEdyYXBoLHVzZU1heFdpZHRoOiExfSxzYW5rZXk6ey4uLlQ3LnNhbmtleSx1c2VNYXhXaWR0aDohMX19LERSZT0oaSxzPSIiKT0+T2JqZWN0LmtleXMoaSkucmVkdWNlKCh1LGQpPT5BcnJheS5pc0FycmF5KGlbZF0pP3U6dHlwZW9mIGlbZF09PSJvYmplY3QiJiZpW2RdIT09bnVsbD9bLi4udSxzK2QsLi4uRFJlKGlbZF0sIiIpXTpbLi4udSxzK2RdLFtdKSxGUHQ9bmV3IFNldChEUmUoTVJlLCIiKSksc2g9TVJlLFNYPWk9PntpZihYZS5kZWJ1Zygic2FuaXRpemVEaXJlY3RpdmUgY2FsbGVkIHdpdGgiLGkpLCEodHlwZW9mIGkhPSJvYmplY3QifHxpPT1udWxsKSl7aWYoQXJyYXkuaXNBcnJheShpKSl7aS5mb3JFYWNoKHM9PlNYKHMpKTtyZXR1cm59Zm9yKGNvbnN0IHMgb2YgT2JqZWN0LmtleXMoaSkpe2lmKFhlLmRlYnVnKCJDaGVja2luZyBrZXkiLHMpLHMuc3RhcnRzV2l0aCgiX18iKXx8cy5pbmNsdWRlcygicHJvdG8iKXx8cy5pbmNsdWRlcygiY29uc3RyIil8fCFGUHQuaGFzKHMpfHxpW3NdPT1udWxsKXtYZS5kZWJ1Zygic2FuaXRpemUgZGVsZXRpbmcga2V5OiAiLHMpLGRlbGV0ZSBpW3NdO2NvbnRpbnVlfWlmKHR5cGVvZiBpW3NdPT0ib2JqZWN0Iil7WGUuZGVidWcoInNhbml0aXppbmcgb2JqZWN0IixzKSxTWChpW3NdKTtjb250aW51ZX1jb25zdCB1PVsidGhlbWVDU1MiLCJmb250RmFtaWx5IiwiYWx0Rm9udEZhbWlseSJdO2Zvcihjb25zdCBkIG9mIHUpcy5pbmNsdWRlcyhkKSYmKFhlLmRlYnVnKCJzYW5pdGl6aW5nIGNzcyBvcHRpb24iLHMpLGlbc109UlB0KGlbc10pKX1pZihpLnRoZW1lVmFyaWFibGVzKWZvcihjb25zdCBzIG9mIE9iamVjdC5rZXlzKGkudGhlbWVWYXJpYWJsZXMpKXtjb25zdCB1PWkudGhlbWVWYXJpYWJsZXNbc107dSE9bnVsbCYmdS5tYXRjaCYmIXUubWF0Y2goL15bXGQgIiMlKCksLjtBLVphLXpdKyQvKSYmKGkudGhlbWVWYXJpYWJsZXNbc109IiIpfVhlLmRlYnVnKCJBZnRlciBzYW5pdGl6YXRpb24iLGkpfX0sUlB0PWk9PntsZXQgcz0wLHU9MDtmb3IoY29uc3QgZCBvZiBpKXtpZihzPHUpcmV0dXJuInsgLyogRVJST1I6IFVuYmFsYW5jZWQgQ1NTICovIH0iO2Q9PT0ieyI/cysrOmQ9PT0ifSImJnUrK31yZXR1cm4gcyE9PXU/InsgLyogRVJST1I6IFVuYmFsYW5jZWQgQ1NTICovIH0iOml9LElSZT0vXi17M31ccypbXG5ccl0oLio/KVtcblxyXS17M31ccypbXG5ccl0rL3MsVUY9LyV7Mn17XHMqKD86KFx3Kylccyo6fChcdyspKVxzKig/OihcdyspfCgoPzooPyF9JXsyfSkufFxyP1xuKSopKT9ccyooPzp9JXsyfSk/L2dpLGpQdD0vXHMqJSUuKlxuL2dtO2NsYXNzIE9SZSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHMpe3N1cGVyKHMpLHRoaXMubmFtZT0iVW5rbm93bkRpYWdyYW1FcnJvciJ9fWNvbnN0IGREPXt9LF9YPWZ1bmN0aW9uKGkscyl7aT1pLnJlcGxhY2UoSVJlLCIiKS5yZXBsYWNlKFVGLCIiKS5yZXBsYWNlKGpQdCxgCmApO2Zvcihjb25zdFt1LHtkZXRlY3RvcjpkfV1vZiBPYmplY3QuZW50cmllcyhkRCkpaWYoZChpLHMpKXJldHVybiB1O3Rocm93IG5ldyBPUmUoYE5vIGRpYWdyYW0gdHlwZSBkZXRlY3RlZCBtYXRjaGluZyBnaXZlbiBjb25maWd1cmF0aW9uIGZvciB0ZXh0OiAke2l9YCl9LE5SZT0oLi4uaSk9Pntmb3IoY29uc3R7aWQ6cyxkZXRlY3Rvcjp1LGxvYWRlcjpkfW9mIGkpUFJlKHMsdSxkKX0sUFJlPShpLHMsdSk9PntkRFtpXT9YZS5lcnJvcihgRGV0ZWN0b3Igd2l0aCBrZXkgJHtpfSBhbHJlYWR5IGV4aXN0c2ApOmREW2ldPXtkZXRlY3RvcjpzLGxvYWRlcjp1fSxYZS5kZWJ1ZyhgRGV0ZWN0b3Igd2l0aCBrZXkgJHtpfSBhZGRlZCR7dT8iIHdpdGggbG9hZGVyIjoiIn1gKX0sJFB0PWk9PmREW2ldLmxvYWRlcixkMmU9KGkscyx7ZGVwdGg6dT0yLGNsb2JiZXI6ZD0hMX09e30pPT57Y29uc3QgcD17ZGVwdGg6dSxjbG9iYmVyOmR9O3JldHVybiBBcnJheS5pc0FycmF5KHMpJiYhQXJyYXkuaXNBcnJheShpKT8ocy5mb3JFYWNoKHY9PmQyZShpLHYscCkpLGkpOkFycmF5LmlzQXJyYXkocykmJkFycmF5LmlzQXJyYXkoaSk/KHMuZm9yRWFjaCh2PT57aS5pbmNsdWRlcyh2KXx8aS5wdXNoKHYpfSksaSk6aT09PXZvaWQgMHx8dTw9MD9pIT1udWxsJiZ0eXBlb2YgaT09Im9iamVjdCImJnR5cGVvZiBzPT0ib2JqZWN0Ij9PYmplY3QuYXNzaWduKGkscyk6czoocyE9PXZvaWQgMCYmdHlwZW9mIGk9PSJvYmplY3QiJiZ0eXBlb2Ygcz09Im9iamVjdCImJk9iamVjdC5rZXlzKHMpLmZvckVhY2godj0+e3R5cGVvZiBzW3ZdPT0ib2JqZWN0IiYmKGlbdl09PT12b2lkIDB8fHR5cGVvZiBpW3ZdPT0ib2JqZWN0Iik/KGlbdl09PT12b2lkIDAmJihpW3ZdPUFycmF5LmlzQXJyYXkoc1t2XSk/W106e30pLGlbdl09ZDJlKGlbdl0sc1t2XSx7ZGVwdGg6dS0xLGNsb2JiZXI6ZH0pKTooZHx8dHlwZW9mIGlbdl0hPSJvYmplY3QiJiZ0eXBlb2Ygc1t2XSE9Im9iamVjdCIpJiYoaVt2XT1zW3ZdKX0pLGkpfSxpZD1kMmU7dmFyIHpQdD10eXBlb2YgZ2xvYmFsPT0ib2JqZWN0IiYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7Y29uc3QgQlJlPXpQdDt2YXIgcVB0PXR5cGVvZiBzZWxmPT0ib2JqZWN0IiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsSFB0PUJSZXx8cVB0fHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpO2NvbnN0IE4zPUhQdDt2YXIgVlB0PU4zLlN5bWJvbDtjb25zdCBJdj1WUHQ7dmFyIEZSZT1PYmplY3QucHJvdG90eXBlLFVQdD1GUmUuaGFzT3duUHJvcGVydHksR1B0PUZSZS50b1N0cmluZyxHRj1Jdj9Jdi50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gS1B0KGkpe3ZhciBzPVVQdC5jYWxsKGksR0YpLHU9aVtHRl07dHJ5e2lbR0ZdPXZvaWQgMDt2YXIgZD0hMH1jYXRjaHt9dmFyIHA9R1B0LmNhbGwoaSk7cmV0dXJuIGQmJihzP2lbR0ZdPXU6ZGVsZXRlIGlbR0ZdKSxwfXZhciBXUHQ9T2JqZWN0LnByb3RvdHlwZSxZUHQ9V1B0LnRvU3RyaW5nO2Z1bmN0aW9uIFhQdChpKXtyZXR1cm4gWVB0LmNhbGwoaSl9dmFyIFFQdD0iW29iamVjdCBOdWxsXSIsSlB0PSJbb2JqZWN0IFVuZGVmaW5lZF0iLFJSZT1Jdj9Jdi50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gQUMoaSl7cmV0dXJuIGk9PW51bGw/aT09PXZvaWQgMD9KUHQ6UVB0OlJSZSYmUlJlIGluIE9iamVjdChpKT9LUHQoaSk6WFB0KGkpfWZ1bmN0aW9uIGFtKGkpe3ZhciBzPXR5cGVvZiBpO3JldHVybiBpIT1udWxsJiYocz09Im9iamVjdCJ8fHM9PSJmdW5jdGlvbiIpfXZhciBaUHQ9IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLGVCdD0iW29iamVjdCBGdW5jdGlvbl0iLHRCdD0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLG5CdD0iW29iamVjdCBQcm94eV0iO2Z1bmN0aW9uIGdEKGkpe2lmKCFhbShpKSlyZXR1cm4hMTt2YXIgcz1BQyhpKTtyZXR1cm4gcz09ZUJ0fHxzPT10QnR8fHM9PVpQdHx8cz09bkJ0fXZhciByQnQ9TjNbIl9fY29yZS1qc19zaGFyZWRfXyJdO2NvbnN0IGcyZT1yQnQ7dmFyIGpSZT1mdW5jdGlvbigpe3ZhciBpPS9bXi5dKyQvLmV4ZWMoZzJlJiZnMmUua2V5cyYmZzJlLmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4gaT8iU3ltYm9sKHNyYylfMS4iK2k6IiJ9KCk7ZnVuY3Rpb24gaUJ0KGkpe3JldHVybiEhalJlJiZqUmUgaW4gaX12YXIgc0J0PUZ1bmN0aW9uLnByb3RvdHlwZSxhQnQ9c0J0LnRvU3RyaW5nO2Z1bmN0aW9uIExDKGkpe2lmKGkhPW51bGwpe3RyeXtyZXR1cm4gYUJ0LmNhbGwoaSl9Y2F0Y2h7fXRyeXtyZXR1cm4gaSsiIn1jYXRjaHt9fXJldHVybiIifXZhciBvQnQ9L1tcXF4kLiorPygpW1xde318XS9nLGNCdD0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyx1QnQ9RnVuY3Rpb24ucHJvdG90eXBlLGxCdD1PYmplY3QucHJvdG90eXBlLGhCdD11QnQudG9TdHJpbmcsZkJ0PWxCdC5oYXNPd25Qcm9wZXJ0eSxkQnQ9UmVnRXhwKCJeIitoQnQuY2FsbChmQnQpLnJlcGxhY2Uob0J0LCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2Z1bmN0aW9uIGdCdChpKXtpZighYW0oaSl8fGlCdChpKSlyZXR1cm4hMTt2YXIgcz1nRChpKT9kQnQ6Y0J0O3JldHVybiBzLnRlc3QoTEMoaSkpfWZ1bmN0aW9uIHBCdChpLHMpe3JldHVybiBpPT1udWxsP3ZvaWQgMDppW3NdfWZ1bmN0aW9uIE1DKGkscyl7dmFyIHU9cEJ0KGkscyk7cmV0dXJuIGdCdCh1KT91OnZvaWQgMH12YXIgYkJ0PU1DKE9iamVjdCwiY3JlYXRlIik7Y29uc3QgS0Y9YkJ0O2Z1bmN0aW9uIG1CdCgpe3RoaXMuX19kYXRhX189S0Y/S0YobnVsbCk6e30sdGhpcy5zaXplPTB9ZnVuY3Rpb24gdkJ0KGkpe3ZhciBzPXRoaXMuaGFzKGkpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tpXTtyZXR1cm4gdGhpcy5zaXplLT1zPzE6MCxzfXZhciB3QnQ9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLHlCdD1PYmplY3QucHJvdG90eXBlLHhCdD15QnQuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24ga0J0KGkpe3ZhciBzPXRoaXMuX19kYXRhX187aWYoS0Ype3ZhciB1PXNbaV07cmV0dXJuIHU9PT13QnQ/dm9pZCAwOnV9cmV0dXJuIHhCdC5jYWxsKHMsaSk/c1tpXTp2b2lkIDB9dmFyIEVCdD1PYmplY3QucHJvdG90eXBlLFRCdD1FQnQuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gQ0J0KGkpe3ZhciBzPXRoaXMuX19kYXRhX187cmV0dXJuIEtGP3NbaV0hPT12b2lkIDA6VEJ0LmNhbGwocyxpKX12YXIgU0J0PSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjtmdW5jdGlvbiBfQnQoaSxzKXt2YXIgdT10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKGkpPzA6MSx1W2ldPUtGJiZzPT09dm9pZCAwP1NCdDpzLHRoaXN9ZnVuY3Rpb24gREMoaSl7dmFyIHM9LTEsdT1pPT1udWxsPzA6aS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3M8dTspe3ZhciBkPWlbc107dGhpcy5zZXQoZFswXSxkWzFdKX19REMucHJvdG90eXBlLmNsZWFyPW1CdCxEQy5wcm90b3R5cGUuZGVsZXRlPXZCdCxEQy5wcm90b3R5cGUuZ2V0PWtCdCxEQy5wcm90b3R5cGUuaGFzPUNCdCxEQy5wcm90b3R5cGUuc2V0PV9CdDtmdW5jdGlvbiBBQnQoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIHBEKGkscyl7cmV0dXJuIGk9PT1zfHxpIT09aSYmcyE9PXN9ZnVuY3Rpb24gQVgoaSxzKXtmb3IodmFyIHU9aS5sZW5ndGg7dS0tOylpZihwRChpW3VdWzBdLHMpKXJldHVybiB1O3JldHVybi0xfXZhciBMQnQ9QXJyYXkucHJvdG90eXBlLE1CdD1MQnQuc3BsaWNlO2Z1bmN0aW9uIERCdChpKXt2YXIgcz10aGlzLl9fZGF0YV9fLHU9QVgocyxpKTtpZih1PDApcmV0dXJuITE7dmFyIGQ9cy5sZW5ndGgtMTtyZXR1cm4gdT09ZD9zLnBvcCgpOk1CdC5jYWxsKHMsdSwxKSwtLXRoaXMuc2l6ZSwhMH1mdW5jdGlvbiBJQnQoaSl7dmFyIHM9dGhpcy5fX2RhdGFfXyx1PUFYKHMsaSk7cmV0dXJuIHU8MD92b2lkIDA6c1t1XVsxXX1mdW5jdGlvbiBPQnQoaSl7cmV0dXJuIEFYKHRoaXMuX19kYXRhX18saSk+LTF9ZnVuY3Rpb24gTkJ0KGkscyl7dmFyIHU9dGhpcy5fX2RhdGFfXyxkPUFYKHUsaSk7cmV0dXJuIGQ8MD8oKyt0aGlzLnNpemUsdS5wdXNoKFtpLHNdKSk6dVtkXVsxXT1zLHRoaXN9ZnVuY3Rpb24gQzcoaSl7dmFyIHM9LTEsdT1pPT1udWxsPzA6aS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3M8dTspe3ZhciBkPWlbc107dGhpcy5zZXQoZFswXSxkWzFdKX19QzcucHJvdG90eXBlLmNsZWFyPUFCdCxDNy5wcm90b3R5cGUuZGVsZXRlPURCdCxDNy5wcm90b3R5cGUuZ2V0PUlCdCxDNy5wcm90b3R5cGUuaGFzPU9CdCxDNy5wcm90b3R5cGUuc2V0PU5CdDt2YXIgUEJ0PU1DKE4zLCJNYXAiKTtjb25zdCBXRj1QQnQ7ZnVuY3Rpb24gQkJ0KCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgREMsbWFwOm5ldyhXRnx8QzcpLHN0cmluZzpuZXcgREN9fWZ1bmN0aW9uIEZCdChpKXt2YXIgcz10eXBlb2YgaTtyZXR1cm4gcz09InN0cmluZyJ8fHM9PSJudW1iZXIifHxzPT0ic3ltYm9sInx8cz09ImJvb2xlYW4iP2khPT0iX19wcm90b19fIjppPT09bnVsbH1mdW5jdGlvbiBMWChpLHMpe3ZhciB1PWkuX19kYXRhX187cmV0dXJuIEZCdChzKT91W3R5cGVvZiBzPT0ic3RyaW5nIj8ic3RyaW5nIjoiaGFzaCJdOnUubWFwfWZ1bmN0aW9uIFJCdChpKXt2YXIgcz1MWCh0aGlzLGkpLmRlbGV0ZShpKTtyZXR1cm4gdGhpcy5zaXplLT1zPzE6MCxzfWZ1bmN0aW9uIGpCdChpKXtyZXR1cm4gTFgodGhpcyxpKS5nZXQoaSl9ZnVuY3Rpb24gJEJ0KGkpe3JldHVybiBMWCh0aGlzLGkpLmhhcyhpKX1mdW5jdGlvbiB6QnQoaSxzKXt2YXIgdT1MWCh0aGlzLGkpLGQ9dS5zaXplO3JldHVybiB1LnNldChpLHMpLHRoaXMuc2l6ZSs9dS5zaXplPT1kPzA6MSx0aGlzfWZ1bmN0aW9uIFM3KGkpe3ZhciBzPS0xLHU9aT09bnVsbD8wOmkubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytzPHU7KXt2YXIgZD1pW3NdO3RoaXMuc2V0KGRbMF0sZFsxXSl9fVM3LnByb3RvdHlwZS5jbGVhcj1CQnQsUzcucHJvdG90eXBlLmRlbGV0ZT1SQnQsUzcucHJvdG90eXBlLmdldD1qQnQsUzcucHJvdG90eXBlLmhhcz0kQnQsUzcucHJvdG90eXBlLnNldD16QnQ7dmFyIHFCdD0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7ZnVuY3Rpb24gYkQoaSxzKXtpZih0eXBlb2YgaSE9ImZ1bmN0aW9uInx8cyE9bnVsbCYmdHlwZW9mIHMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihxQnQpO3ZhciB1PWZ1bmN0aW9uKCl7dmFyIGQ9YXJndW1lbnRzLHA9cz9zLmFwcGx5KHRoaXMsZCk6ZFswXSx2PXUuY2FjaGU7aWYodi5oYXMocCkpcmV0dXJuIHYuZ2V0KHApO3ZhciBiPWkuYXBwbHkodGhpcyxkKTtyZXR1cm4gdS5jYWNoZT12LnNldChwLGIpfHx2LGJ9O3JldHVybiB1LmNhY2hlPW5ldyhiRC5DYWNoZXx8UzcpLHV9YkQuQ2FjaGU9Uzc7ZnVuY3Rpb24gSEJ0KCl7dGhpcy5fX2RhdGFfXz1uZXcgQzcsdGhpcy5zaXplPTB9ZnVuY3Rpb24gVkJ0KGkpe3ZhciBzPXRoaXMuX19kYXRhX18sdT1zLmRlbGV0ZShpKTtyZXR1cm4gdGhpcy5zaXplPXMuc2l6ZSx1fWZ1bmN0aW9uIFVCdChpKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoaSl9ZnVuY3Rpb24gR0J0KGkpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhpKX12YXIgS0J0PTIwMDtmdW5jdGlvbiBXQnQoaSxzKXt2YXIgdT10aGlzLl9fZGF0YV9fO2lmKHUgaW5zdGFuY2VvZiBDNyl7dmFyIGQ9dS5fX2RhdGFfXztpZighV0Z8fGQubGVuZ3RoPEtCdC0xKXJldHVybiBkLnB1c2goW2ksc10pLHRoaXMuc2l6ZT0rK3Uuc2l6ZSx0aGlzO3U9dGhpcy5fX2RhdGFfXz1uZXcgUzcoZCl9cmV0dXJuIHUuc2V0KGkscyksdGhpcy5zaXplPXUuc2l6ZSx0aGlzfWZ1bmN0aW9uIFAzKGkpe3ZhciBzPXRoaXMuX19kYXRhX189bmV3IEM3KGkpO3RoaXMuc2l6ZT1zLnNpemV9UDMucHJvdG90eXBlLmNsZWFyPUhCdCxQMy5wcm90b3R5cGUuZGVsZXRlPVZCdCxQMy5wcm90b3R5cGUuZ2V0PVVCdCxQMy5wcm90b3R5cGUuaGFzPUdCdCxQMy5wcm90b3R5cGUuc2V0PVdCdDt2YXIgWUJ0PWZ1bmN0aW9uKCl7dHJ5e3ZhciBpPU1DKE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gaSh7fSwiIix7fSksaX1jYXRjaHt9fSgpO2NvbnN0IE1YPVlCdDtmdW5jdGlvbiBEWChpLHMsdSl7cz09Il9fcHJvdG9fXyImJk1YP01YKGkscyx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6dSx3cml0YWJsZTohMH0pOmlbc109dX1mdW5jdGlvbiBwMmUoaSxzLHUpeyh1IT09dm9pZCAwJiYhcEQoaVtzXSx1KXx8dT09PXZvaWQgMCYmIShzIGluIGkpKSYmRFgoaSxzLHUpfWZ1bmN0aW9uIFhCdChpKXtyZXR1cm4gZnVuY3Rpb24ocyx1LGQpe2Zvcih2YXIgcD0tMSx2PU9iamVjdChzKSxiPWQocykseT1iLmxlbmd0aDt5LS07KXt2YXIgVD1iW2k/eTorK3BdO2lmKHUodltUXSxULHYpPT09ITEpYnJlYWt9cmV0dXJuIHN9fXZhciBRQnQ9WEJ0KCk7Y29uc3QgYjJlPVFCdDt2YXIgJFJlPXR5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMselJlPSRSZSYmdHlwZW9mIG1vZHVsZT09Im9iamVjdCImJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLEpCdD16UmUmJnpSZS5leHBvcnRzPT09JFJlLHFSZT1KQnQ/TjMuQnVmZmVyOnZvaWQgMCxIUmU9cVJlP3FSZS5hbGxvY1Vuc2FmZTp2b2lkIDA7ZnVuY3Rpb24gVlJlKGkscyl7aWYocylyZXR1cm4gaS5zbGljZSgpO3ZhciB1PWkubGVuZ3RoLGQ9SFJlP0hSZSh1KTpuZXcgaS5jb25zdHJ1Y3Rvcih1KTtyZXR1cm4gaS5jb3B5KGQpLGR9dmFyIFpCdD1OMy5VaW50OEFycmF5O2NvbnN0IElYPVpCdDtmdW5jdGlvbiBtMmUoaSl7dmFyIHM9bmV3IGkuY29uc3RydWN0b3IoaS5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IElYKHMpLnNldChuZXcgSVgoaSkpLHN9ZnVuY3Rpb24gVVJlKGkscyl7dmFyIHU9cz9tMmUoaS5idWZmZXIpOmkuYnVmZmVyO3JldHVybiBuZXcgaS5jb25zdHJ1Y3Rvcih1LGkuYnl0ZU9mZnNldCxpLmxlbmd0aCl9ZnVuY3Rpb24gR1JlKGkscyl7dmFyIHU9LTEsZD1pLmxlbmd0aDtmb3Ioc3x8KHM9QXJyYXkoZCkpOysrdTxkOylzW3VdPWlbdV07cmV0dXJuIHN9dmFyIEtSZT1PYmplY3QuY3JlYXRlLGVGdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGkoKXt9cmV0dXJuIGZ1bmN0aW9uKHMpe2lmKCFhbShzKSlyZXR1cm57fTtpZihLUmUpcmV0dXJuIEtSZShzKTtpLnByb3RvdHlwZT1zO3ZhciB1PW5ldyBpO3JldHVybiBpLnByb3RvdHlwZT12b2lkIDAsdX19KCk7Y29uc3QgdEZ0PWVGdDtmdW5jdGlvbiBXUmUoaSxzKXtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkocyh1KSl9fXZhciBuRnQ9V1JlKE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpO2NvbnN0IHYyZT1uRnQ7dmFyIHJGdD1PYmplY3QucHJvdG90eXBlO2Z1bmN0aW9uIE9YKGkpe3ZhciBzPWkmJmkuY29uc3RydWN0b3IsdT10eXBlb2Ygcz09ImZ1bmN0aW9uIiYmcy5wcm90b3R5cGV8fHJGdDtyZXR1cm4gaT09PXV9ZnVuY3Rpb24gWVJlKGkpe3JldHVybiB0eXBlb2YgaS5jb25zdHJ1Y3Rvcj09ImZ1bmN0aW9uIiYmIU9YKGkpP3RGdCh2MmUoaSkpOnt9fWZ1bmN0aW9uIHE0KGkpe3JldHVybiBpIT1udWxsJiZ0eXBlb2YgaT09Im9iamVjdCJ9dmFyIGlGdD0iW29iamVjdCBBcmd1bWVudHNdIjtmdW5jdGlvbiBYUmUoaSl7cmV0dXJuIHE0KGkpJiZBQyhpKT09aUZ0fXZhciBRUmU9T2JqZWN0LnByb3RvdHlwZSxzRnQ9UVJlLmhhc093blByb3BlcnR5LGFGdD1RUmUucHJvcGVydHlJc0VudW1lcmFibGUsb0Z0PVhSZShmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP1hSZTpmdW5jdGlvbihpKXtyZXR1cm4gcTQoaSkmJnNGdC5jYWxsKGksImNhbGxlZSIpJiYhYUZ0LmNhbGwoaSwiY2FsbGVlIil9O2NvbnN0IG1EPW9GdDt2YXIgY0Z0PUFycmF5LmlzQXJyYXk7Y29uc3QgRDA9Y0Z0O3ZhciB1RnQ9OTAwNzE5OTI1NDc0MDk5MTtmdW5jdGlvbiB3MmUoaSl7cmV0dXJuIHR5cGVvZiBpPT0ibnVtYmVyIiYmaT4tMSYmaSUxPT0wJiZpPD11RnR9ZnVuY3Rpb24gdzkoaSl7cmV0dXJuIGkhPW51bGwmJncyZShpLmxlbmd0aCkmJiFnRChpKX1mdW5jdGlvbiBKUmUoaSl7cmV0dXJuIHE0KGkpJiZ3OShpKX1mdW5jdGlvbiBsRnQoKXtyZXR1cm4hMX12YXIgWlJlPXR5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsZWplPVpSZSYmdHlwZW9mIG1vZHVsZT09Im9iamVjdCImJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLGhGdD1lamUmJmVqZS5leHBvcnRzPT09WlJlLHRqZT1oRnQ/TjMuQnVmZmVyOnZvaWQgMCxmRnQ9dGplP3RqZS5pc0J1ZmZlcjp2b2lkIDAsZEZ0PWZGdHx8bEZ0O2NvbnN0IHZEPWRGdDt2YXIgZ0Z0PSJbb2JqZWN0IE9iamVjdF0iLHBGdD1GdW5jdGlvbi5wcm90b3R5cGUsYkZ0PU9iamVjdC5wcm90b3R5cGUsbmplPXBGdC50b1N0cmluZyxtRnQ9YkZ0Lmhhc093blByb3BlcnR5LHZGdD1uamUuY2FsbChPYmplY3QpO2Z1bmN0aW9uIHJqZShpKXtpZighcTQoaSl8fEFDKGkpIT1nRnQpcmV0dXJuITE7dmFyIHM9djJlKGkpO2lmKHM9PT1udWxsKXJldHVybiEwO3ZhciB1PW1GdC5jYWxsKHMsImNvbnN0cnVjdG9yIikmJnMuY29uc3RydWN0b3I7cmV0dXJuIHR5cGVvZiB1PT0iZnVuY3Rpb24iJiZ1IGluc3RhbmNlb2YgdSYmbmplLmNhbGwodSk9PXZGdH12YXIgd0Z0PSJbb2JqZWN0IEFyZ3VtZW50c10iLHlGdD0iW29iamVjdCBBcnJheV0iLHhGdD0iW29iamVjdCBCb29sZWFuXSIsa0Z0PSJbb2JqZWN0IERhdGVdIixFRnQ9IltvYmplY3QgRXJyb3JdIixURnQ9IltvYmplY3QgRnVuY3Rpb25dIixDRnQ9IltvYmplY3QgTWFwXSIsU0Z0PSJbb2JqZWN0IE51bWJlcl0iLF9GdD0iW29iamVjdCBPYmplY3RdIixBRnQ9IltvYmplY3QgUmVnRXhwXSIsTEZ0PSJbb2JqZWN0IFNldF0iLE1GdD0iW29iamVjdCBTdHJpbmddIixERnQ9IltvYmplY3QgV2Vha01hcF0iLElGdD0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLE9GdD0iW29iamVjdCBEYXRhVmlld10iLE5GdD0iW29iamVjdCBGbG9hdDMyQXJyYXldIixQRnQ9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsQkZ0PSJbb2JqZWN0IEludDhBcnJheV0iLEZGdD0iW29iamVjdCBJbnQxNkFycmF5XSIsUkZ0PSJbb2JqZWN0IEludDMyQXJyYXldIixqRnQ9IltvYmplY3QgVWludDhBcnJheV0iLCRGdD0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLHpGdD0iW29iamVjdCBVaW50MTZBcnJheV0iLHFGdD0iW29iamVjdCBVaW50MzJBcnJheV0iLGFoPXt9O2FoW05GdF09YWhbUEZ0XT1haFtCRnRdPWFoW0ZGdF09YWhbUkZ0XT1haFtqRnRdPWFoWyRGdF09YWhbekZ0XT1haFtxRnRdPSEwLGFoW3dGdF09YWhbeUZ0XT1haFtJRnRdPWFoW3hGdF09YWhbT0Z0XT1haFtrRnRdPWFoW0VGdF09YWhbVEZ0XT1haFtDRnRdPWFoW1NGdF09YWhbX0Z0XT1haFtBRnRdPWFoW0xGdF09YWhbTUZ0XT1haFtERnRdPSExO2Z1bmN0aW9uIEhGdChpKXtyZXR1cm4gcTQoaSkmJncyZShpLmxlbmd0aCkmJiEhYWhbQUMoaSldfWZ1bmN0aW9uIE5YKGkpe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gaShzKX19dmFyIGlqZT10eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLFlGPWlqZSYmdHlwZW9mIG1vZHVsZT09Im9iamVjdCImJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLFZGdD1ZRiYmWUYuZXhwb3J0cz09PWlqZSx5MmU9VkZ0JiZCUmUucHJvY2VzcyxVRnQ9ZnVuY3Rpb24oKXt0cnl7dmFyIGk9WUYmJllGLnJlcXVpcmUmJllGLnJlcXVpcmUoInV0aWwiKS50eXBlcztyZXR1cm4gaXx8eTJlJiZ5MmUuYmluZGluZyYmeTJlLmJpbmRpbmcoInV0aWwiKX1jYXRjaHt9fSgpO2NvbnN0IHdEPVVGdDt2YXIgc2plPXdEJiZ3RC5pc1R5cGVkQXJyYXksR0Z0PXNqZT9OWChzamUpOkhGdDtjb25zdCBQWD1HRnQ7ZnVuY3Rpb24geDJlKGkscyl7aWYoIShzPT09ImNvbnN0cnVjdG9yIiYmdHlwZW9mIGlbc109PSJmdW5jdGlvbiIpJiZzIT0iX19wcm90b19fIilyZXR1cm4gaVtzXX12YXIgS0Z0PU9iamVjdC5wcm90b3R5cGUsV0Z0PUtGdC5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBCWChpLHMsdSl7dmFyIGQ9aVtzXTsoIShXRnQuY2FsbChpLHMpJiZwRChkLHUpKXx8dT09PXZvaWQgMCYmIShzIGluIGkpKSYmRFgoaSxzLHUpfWZ1bmN0aW9uIFhGKGkscyx1LGQpe3ZhciBwPSF1O3V8fCh1PXt9KTtmb3IodmFyIHY9LTEsYj1zLmxlbmd0aDsrK3Y8Yjspe3ZhciB5PXNbdl0sVD1kP2QodVt5XSxpW3ldLHksdSxpKTp2b2lkIDA7VD09PXZvaWQgMCYmKFQ9aVt5XSkscD9EWCh1LHksVCk6QlgodSx5LFQpfXJldHVybiB1fWZ1bmN0aW9uIFlGdChpLHMpe2Zvcih2YXIgdT0tMSxkPUFycmF5KGkpOysrdTxpOylkW3VdPXModSk7cmV0dXJuIGR9dmFyIFhGdD05MDA3MTk5MjU0NzQwOTkxLFFGdD0vXig/OjB8WzEtOV1cZCopJC87ZnVuY3Rpb24gRlgoaSxzKXt2YXIgdT10eXBlb2YgaTtyZXR1cm4gcz1zPz9YRnQsISFzJiYodT09Im51bWJlciJ8fHUhPSJzeW1ib2wiJiZRRnQudGVzdChpKSkmJmk+LTEmJmklMT09MCYmaTxzfXZhciBKRnQ9T2JqZWN0LnByb3RvdHlwZSxaRnQ9SkZ0Lmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGFqZShpLHMpe3ZhciB1PUQwKGkpLGQ9IXUmJm1EKGkpLHA9IXUmJiFkJiZ2RChpKSx2PSF1JiYhZCYmIXAmJlBYKGkpLGI9dXx8ZHx8cHx8dix5PWI/WUZ0KGkubGVuZ3RoLFN0cmluZyk6W10sVD15Lmxlbmd0aDtmb3IodmFyIF8gaW4gaSkoc3x8WkZ0LmNhbGwoaSxfKSkmJiEoYiYmKF89PSJsZW5ndGgifHxwJiYoXz09Im9mZnNldCJ8fF89PSJwYXJlbnQiKXx8diYmKF89PSJidWZmZXIifHxfPT0iYnl0ZUxlbmd0aCJ8fF89PSJieXRlT2Zmc2V0Iil8fEZYKF8sVCkpKSYmeS5wdXNoKF8pO3JldHVybiB5fWZ1bmN0aW9uIGVSdChpKXt2YXIgcz1bXTtpZihpIT1udWxsKWZvcih2YXIgdSBpbiBPYmplY3QoaSkpcy5wdXNoKHUpO3JldHVybiBzfXZhciB0UnQ9T2JqZWN0LnByb3RvdHlwZSxuUnQ9dFJ0Lmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHJSdChpKXtpZighYW0oaSkpcmV0dXJuIGVSdChpKTt2YXIgcz1PWChpKSx1PVtdO2Zvcih2YXIgZCBpbiBpKWQ9PSJjb25zdHJ1Y3RvciImJihzfHwhblJ0LmNhbGwoaSxkKSl8fHUucHVzaChkKTtyZXR1cm4gdX1mdW5jdGlvbiBJQyhpKXtyZXR1cm4gdzkoaSk/YWplKGksITApOnJSdChpKX1mdW5jdGlvbiBpUnQoaSl7cmV0dXJuIFhGKGksSUMoaSkpfWZ1bmN0aW9uIHNSdChpLHMsdSxkLHAsdixiKXt2YXIgeT14MmUoaSx1KSxUPXgyZShzLHUpLF89Yi5nZXQoVCk7aWYoXyl7cDJlKGksdSxfKTtyZXR1cm59dmFyIEE9dj92KHksVCx1KyIiLGkscyxiKTp2b2lkIDAsUD1BPT09dm9pZCAwO2lmKFApe3ZhciBSPUQwKFQpLEY9IVImJnZEKFQpLGo9IVImJiFGJiZQWChUKTtBPVQsUnx8Rnx8aj9EMCh5KT9BPXk6SlJlKHkpP0E9R1JlKHkpOkY/KFA9ITEsQT1WUmUoVCwhMCkpOmo/KFA9ITEsQT1VUmUoVCwhMCkpOkE9W106cmplKFQpfHxtRChUKT8oQT15LG1EKHkpP0E9aVJ0KHkpOighYW0oeSl8fGdEKHkpKSYmKEE9WVJlKFQpKSk6UD0hMX1QJiYoYi5zZXQoVCxBKSxwKEEsVCxkLHYsYiksYi5kZWxldGUoVCkpLHAyZShpLHUsQSl9ZnVuY3Rpb24gb2plKGkscyx1LGQscCl7aSE9PXMmJmIyZShzLGZ1bmN0aW9uKHYsYil7aWYocHx8KHA9bmV3IFAzKSxhbSh2KSlzUnQoaSxzLGIsdSxvamUsZCxwKTtlbHNle3ZhciB5PWQ/ZCh4MmUoaSxiKSx2LGIrIiIsaSxzLHApOnZvaWQgMDt5PT09dm9pZCAwJiYoeT12KSxwMmUoaSxiLHkpfX0sSUMpfWZ1bmN0aW9uIE9DKGkpe3JldHVybiBpfWZ1bmN0aW9uIGFSdChpLHMsdSl7c3dpdGNoKHUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIGkuY2FsbChzKTtjYXNlIDE6cmV0dXJuIGkuY2FsbChzLHVbMF0pO2Nhc2UgMjpyZXR1cm4gaS5jYWxsKHMsdVswXSx1WzFdKTtjYXNlIDM6cmV0dXJuIGkuY2FsbChzLHVbMF0sdVsxXSx1WzJdKX1yZXR1cm4gaS5hcHBseShzLHUpfXZhciBjamU9TWF0aC5tYXg7ZnVuY3Rpb24gdWplKGkscyx1KXtyZXR1cm4gcz1jamUocz09PXZvaWQgMD9pLmxlbmd0aC0xOnMsMCksZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLHA9LTEsdj1jamUoZC5sZW5ndGgtcywwKSxiPUFycmF5KHYpOysrcDx2OyliW3BdPWRbcytwXTtwPS0xO2Zvcih2YXIgeT1BcnJheShzKzEpOysrcDxzOyl5W3BdPWRbcF07cmV0dXJuIHlbc109dShiKSxhUnQoaSx0aGlzLHkpfX1mdW5jdGlvbiB5RChpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaX19dmFyIG9SdD1NWD9mdW5jdGlvbihpLHMpe3JldHVybiBNWChpLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOnlEKHMpLHdyaXRhYmxlOiEwfSl9Ok9DO2NvbnN0IGNSdD1vUnQ7dmFyIHVSdD04MDAsbFJ0PTE2LGhSdD1EYXRlLm5vdztmdW5jdGlvbiBmUnQoaSl7dmFyIHM9MCx1PTA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQ9aFJ0KCkscD1sUnQtKGQtdSk7aWYodT1kLHA+MCl7aWYoKytzPj11UnQpcmV0dXJuIGFyZ3VtZW50c1swXX1lbHNlIHM9MDtyZXR1cm4gaS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX19dmFyIGRSdD1mUnQoY1J0KTtjb25zdCBsamU9ZFJ0O2Z1bmN0aW9uIFJYKGkscyl7cmV0dXJuIGxqZSh1amUoaSxzLE9DKSxpKyIiKX1mdW5jdGlvbiBRRihpLHMsdSl7aWYoIWFtKHUpKXJldHVybiExO3ZhciBkPXR5cGVvZiBzO3JldHVybihkPT0ibnVtYmVyIj93OSh1KSYmRlgocyx1Lmxlbmd0aCk6ZD09InN0cmluZyImJnMgaW4gdSk/cEQodVtzXSxpKTohMX1mdW5jdGlvbiBnUnQoaSl7cmV0dXJuIFJYKGZ1bmN0aW9uKHMsdSl7dmFyIGQ9LTEscD11Lmxlbmd0aCx2PXA+MT91W3AtMV06dm9pZCAwLGI9cD4yP3VbMl06dm9pZCAwO2Zvcih2PWkubGVuZ3RoPjMmJnR5cGVvZiB2PT0iZnVuY3Rpb24iPyhwLS0sdik6dm9pZCAwLGImJlFGKHVbMF0sdVsxXSxiKSYmKHY9cDwzP3ZvaWQgMDp2LHA9MSkscz1PYmplY3Qocyk7KytkPHA7KXt2YXIgeT11W2RdO3kmJmkocyx5LGQsdil9cmV0dXJuIHN9KX12YXIgcFJ0PWdSdChmdW5jdGlvbihpLHMsdSl7b2plKGkscyx1KX0pO2NvbnN0IGpYPXBSdCxoamU9IuKAiyIsYlJ0PXtjdXJ2ZUJhc2lzOkZGLGN1cnZlQmFzaXNDbG9zZWQ6TE50LGN1cnZlQmFzaXNPcGVuOk1OdCxjdXJ2ZUJ1bXBYOl9OdCxjdXJ2ZUJ1bXBZOkFOdCxjdXJ2ZUJ1bmRsZTpETnQsY3VydmVDYXJkaW5hbENsb3NlZDpPTnQsY3VydmVDYXJkaW5hbE9wZW46Tk50LGN1cnZlQ2FyZGluYWw6SU50LGN1cnZlQ2F0bXVsbFJvbUNsb3NlZDpCTnQsY3VydmVDYXRtdWxsUm9tT3BlbjpGTnQsY3VydmVDYXRtdWxsUm9tOlBOdCxjdXJ2ZUxpbmVhcjprcCxjdXJ2ZUxpbmVhckNsb3NlZDpSTnQsY3VydmVNb25vdG9uZVg6ak50LGN1cnZlTW9ub3RvbmVZOiROdCxjdXJ2ZU5hdHVyYWw6ek50LGN1cnZlU3RlcDpxTnQsY3VydmVTdGVwQWZ0ZXI6Vk50LGN1cnZlU3RlcEJlZm9yZTpITnR9LG1SdD0vXHMqKD86KFx3KykoPz06KTp8KFx3KykpXHMqKD86KFx3Kyl8KCg/Oig/IX0lezJ9KS58XHI/XG4pKikpP1xzKig/On0lezJ9KT8vZ2ksdlJ0PWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1mamUoaSwvKD86aW5pdFxiKXwoPzppbml0aWFsaXplXGIpLyk7bGV0IGQ9e307aWYoQXJyYXkuaXNBcnJheSh1KSl7Y29uc3QgYj11Lm1hcCh5PT55LmFyZ3MpO1NYKGIpLGQ9aWQoZCxbLi4uYl0pfWVsc2UgZD11LmFyZ3M7aWYoIWQpcmV0dXJuO2xldCBwPV9YKGkscyk7Y29uc3Qgdj0iY29uZmlnIjtyZXR1cm4gZFt2XSE9PXZvaWQgMCYmKHA9PT0iZmxvd2NoYXJ0LXYyIiYmKHA9ImZsb3djaGFydCIpLGRbcF09ZFt2XSxkZWxldGUgZFt2XSksZH0sZmplPWZ1bmN0aW9uKGkscz1udWxsKXt0cnl7Y29uc3QgdT1uZXcgUmVnRXhwKGBbJV17Mn0oPyFbe10ke21SdC5zb3VyY2V9KSg/PVt9XVslXXsyfSkuKgpgLCJpZyIpO2k9aS50cmltKCkucmVwbGFjZSh1LCIiKS5yZXBsYWNlKC8nL2dtLCciJyksWGUuZGVidWcoYERldGVjdGluZyBkaWFncmFtIGRpcmVjdGl2ZSR7cyE9PW51bGw/IiB0eXBlOiIrczoiIn0gYmFzZWQgb24gdGhlIHRleHQ6JHtpfWApO2xldCBkO2NvbnN0IHA9W107Zm9yKDsoZD1VRi5leGVjKGkpKSE9PW51bGw7KWlmKGQuaW5kZXg9PT1VRi5sYXN0SW5kZXgmJlVGLmxhc3RJbmRleCsrLGQmJiFzfHxzJiZkWzFdJiZkWzFdLm1hdGNoKHMpfHxzJiZkWzJdJiZkWzJdLm1hdGNoKHMpKXtjb25zdCB2PWRbMV0/ZFsxXTpkWzJdLGI9ZFszXT9kWzNdLnRyaW0oKTpkWzRdP0pTT04ucGFyc2UoZFs0XS50cmltKCkpOm51bGw7cC5wdXNoKHt0eXBlOnYsYXJnczpifSl9cmV0dXJuIHAubGVuZ3RoPT09MD97dHlwZTppLGFyZ3M6bnVsbH06cC5sZW5ndGg9PT0xP3BbMF06cH1jYXRjaCh1KXtyZXR1cm4gWGUuZXJyb3IoYEVSUk9SOiAke3UubWVzc2FnZX0gLSBVbmFibGUgdG8gcGFyc2UgZGlyZWN0aXZlIHR5cGU6ICcke3N9JyBiYXNlZCBvbiB0aGUgdGV4dDogJyR7aX0nYCkse3R5cGU6dm9pZCAwLGFyZ3M6bnVsbH19fSx3UnQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGkucmVwbGFjZShVRiwiIil9LHlSdD1mdW5jdGlvbihpLHMpe2Zvcihjb25zdFt1LGRdb2Ygcy5lbnRyaWVzKCkpaWYoZC5tYXRjaChpKSlyZXR1cm4gdTtyZXR1cm4tMX07ZnVuY3Rpb24gT3YoaSxzKXtpZighaSlyZXR1cm4gcztjb25zdCB1PWBjdXJ2ZSR7aS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStpLnNsaWNlKDEpfWA7cmV0dXJuIGJSdFt1XT8/c31mdW5jdGlvbiB4UnQoaSxzKXtjb25zdCB1PWkudHJpbSgpO2lmKHUpcmV0dXJuIHMuc2VjdXJpdHlMZXZlbCE9PSJsb29zZSI/cDkuc2FuaXRpemVVcmwodSk6dX1jb25zdCBrUnQ9KGksLi4ucyk9Pntjb25zdCB1PWkuc3BsaXQoIi4iKSxkPXUubGVuZ3RoLTEscD11W2RdO2xldCB2PXdpbmRvdztmb3IobGV0IGI9MDtiPGQ7YisrKWlmKHY9dlt1W2JdXSwhdil7WGUuZXJyb3IoYEZ1bmN0aW9uIG5hbWU6ICR7aX0gbm90IGZvdW5kIGluIHdpbmRvd2ApO3JldHVybn12W3BdKC4uLnMpfTtmdW5jdGlvbiBkamUoaSxzKXtyZXR1cm4haXx8IXM/MDpNYXRoLnNxcnQoTWF0aC5wb3cocy54LWkueCwyKStNYXRoLnBvdyhzLnktaS55LDIpKX1mdW5jdGlvbiBFUnQoaSl7bGV0IHMsdT0wO2kuZm9yRWFjaChwPT57dSs9ZGplKHAscykscz1wfSk7Y29uc3QgZD11LzI7cmV0dXJuIGsyZShpLGQpfWZ1bmN0aW9uIFRSdChpKXtyZXR1cm4gaS5sZW5ndGg9PT0xP2lbMF06RVJ0KGkpfWNvbnN0IGdqZT0oaSxzPTIpPT57Y29uc3QgdT1NYXRoLnBvdygxMCxzKTtyZXR1cm4gTWF0aC5yb3VuZChpKnUpL3V9LGsyZT0oaSxzKT0+e2xldCB1LGQ9cztmb3IoY29uc3QgcCBvZiBpKXtpZih1KXtjb25zdCB2PWRqZShwLHUpO2lmKHY8ZClkLT12O2Vsc2V7Y29uc3QgYj1kL3Y7aWYoYjw9MClyZXR1cm4gdTtpZihiPj0xKXJldHVybnt4OnAueCx5OnAueX07aWYoYj4wJiZiPDEpcmV0dXJue3g6Z2plKCgxLWIpKnUueCtiKnAueCw1KSx5OmdqZSgoMS1iKSp1LnkrYipwLnksNSl9fX11PXB9dGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBhIHN1aXRhYmxlIHBvaW50IGZvciB0aGUgZ2l2ZW4gZGlzdGFuY2UiKX0sQ1J0PShpLHMsdSk9PntYZS5pbmZvKGBvdXIgcG9pbnRzICR7SlNPTi5zdHJpbmdpZnkocyl9YCksc1swXSE9PXUmJihzPXMucmV2ZXJzZSgpKTtjb25zdCBwPWsyZShzLDI1KSx2PWk/MTA6NSxiPU1hdGguYXRhbjIoc1swXS55LXAueSxzWzBdLngtcC54KSx5PXt4OjAseTowfTtyZXR1cm4geS54PU1hdGguc2luKGIpKnYrKHNbMF0ueCtwLngpLzIseS55PS1NYXRoLmNvcyhiKSp2KyhzWzBdLnkrcC55KS8yLHl9O2Z1bmN0aW9uIFNSdChpLHMsdSl7Y29uc3QgZD1zdHJ1Y3R1cmVkQ2xvbmUodSk7WGUuaW5mbygib3VyIHBvaW50cyIsZCkscyE9PSJzdGFydF9sZWZ0IiYmcyE9PSJzdGFydF9yaWdodCImJmQucmV2ZXJzZSgpO2NvbnN0IHA9MjUraSx2PWsyZShkLHApLGI9MTAraSouNSx5PU1hdGguYXRhbjIoZFswXS55LXYueSxkWzBdLngtdi54KSxUPXt4OjAseTowfTtyZXR1cm4gcz09PSJzdGFydF9sZWZ0Ij8oVC54PU1hdGguc2luKHkrTWF0aC5QSSkqYisoZFswXS54K3YueCkvMixULnk9LU1hdGguY29zKHkrTWF0aC5QSSkqYisoZFswXS55K3YueSkvMik6cz09PSJlbmRfcmlnaHQiPyhULng9TWF0aC5zaW4oeS1NYXRoLlBJKSpiKyhkWzBdLngrdi54KS8yLTUsVC55PS1NYXRoLmNvcyh5LU1hdGguUEkpKmIrKGRbMF0ueSt2LnkpLzItNSk6cz09PSJlbmRfbGVmdCI/KFQueD1NYXRoLnNpbih5KSpiKyhkWzBdLngrdi54KS8yLTUsVC55PS1NYXRoLmNvcyh5KSpiKyhkWzBdLnkrdi55KS8yLTUpOihULng9TWF0aC5zaW4oeSkqYisoZFswXS54K3YueCkvMixULnk9LU1hdGguY29zKHkpKmIrKGRbMF0ueSt2LnkpLzIpLFR9ZnVuY3Rpb24gb20oaSl7bGV0IHM9IiIsdT0iIjtmb3IoY29uc3QgZCBvZiBpKWQhPT12b2lkIDAmJihkLnN0YXJ0c1dpdGgoImNvbG9yOiIpfHxkLnN0YXJ0c1dpdGgoInRleHQtYWxpZ246Iik/dT11K2QrIjsiOnM9cytkKyI7Iik7cmV0dXJue3N0eWxlOnMsbGFiZWxTdHlsZTp1fX1sZXQgcGplPTA7Y29uc3QgYmplPSgpPT4ocGplKyssImlkLSIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsMTIpKyItIitwamUpO2Z1bmN0aW9uIF9SdChpKXtsZXQgcz0iIjtjb25zdCB1PSIwMTIzNDU2Nzg5YWJjZGVmIixkPXUubGVuZ3RoO2ZvcihsZXQgcD0wO3A8aTtwKyspcys9dS5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmQpKTtyZXR1cm4gc31jb25zdCBtamU9aT0+X1J0KGkubGVuZ3RoKSxBUnQ9ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCxhbmNob3I6InN0YXJ0IixzdHlsZToiIzY2NiIsd2lkdGg6MTAwLGhlaWdodDoxMDAsdGV4dE1hcmdpbjowLHJ4OjAscnk6MCx2YWxpZ246dm9pZCAwLHRleHQ6IiJ9fSxMUnQ9ZnVuY3Rpb24oaSxzKXtjb25zdCB1PXMudGV4dC5yZXBsYWNlKGNpLmxpbmVCcmVha1JlZ2V4LCIgIiksWyxkXT1OQyhzLmZvbnRTaXplKSxwPWkuYXBwZW5kKCJ0ZXh0Iik7cC5hdHRyKCJ4IixzLngpLHAuYXR0cigieSIscy55KSxwLnN0eWxlKCJ0ZXh0LWFuY2hvciIscy5hbmNob3IpLHAuc3R5bGUoImZvbnQtZmFtaWx5IixzLmZvbnRGYW1pbHkpLHAuc3R5bGUoImZvbnQtc2l6ZSIsZCkscC5zdHlsZSgiZm9udC13ZWlnaHQiLHMuZm9udFdlaWdodCkscC5hdHRyKCJmaWxsIixzLmZpbGwpLHMuY2xhc3MhPT12b2lkIDAmJnAuYXR0cigiY2xhc3MiLHMuY2xhc3MpO2NvbnN0IHY9cC5hcHBlbmQoInRzcGFuIik7cmV0dXJuIHYuYXR0cigieCIscy54K3MudGV4dE1hcmdpbioyKSx2LmF0dHIoImZpbGwiLHMuZmlsbCksdi50ZXh0KHUpLHB9LHZqZT1iRCgoaSxzLHUpPT57aWYoIWl8fCh1PU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixqb2luV2l0aDoiPGJyLz4ifSx1KSxjaS5saW5lQnJlYWtSZWdleC50ZXN0KGkpKSlyZXR1cm4gaTtjb25zdCBkPWkuc3BsaXQoIiAiKSxwPVtdO2xldCB2PSIiO3JldHVybiBkLmZvckVhY2goKGIseSk9Pntjb25zdCBUPUg0KGAke2J9IGAsdSksXz1INCh2LHUpO2lmKFQ+cyl7Y29uc3R7aHlwaGVuYXRlZFN0cmluZ3M6UixyZW1haW5pbmdXb3JkOkZ9PU1SdChiLHMsIi0iLHUpO3AucHVzaCh2LC4uLlIpLHY9Rn1lbHNlIF8rVD49cz8ocC5wdXNoKHYpLHY9Yik6dj1bdixiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpO3krMT09PWQubGVuZ3RoJiZwLnB1c2godil9KSxwLmZpbHRlcihiPT5iIT09IiIpLmpvaW4odS5qb2luV2l0aCl9LChpLHMsdSk9PmAke2l9JHtzfSR7dS5mb250U2l6ZX0ke3UuZm9udFdlaWdodH0ke3UuZm9udEZhbWlseX0ke3Uuam9pbldpdGh9YCksTVJ0PWJEKChpLHMsdT0iLSIsZCk9PntkPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixtYXJnaW46MH0sZCk7Y29uc3QgcD1bLi4uaV0sdj1bXTtsZXQgYj0iIjtyZXR1cm4gcC5mb3JFYWNoKCh5LFQpPT57Y29uc3QgXz1gJHtifSR7eX1gO2lmKEg0KF8sZCk+PXMpe2NvbnN0IFA9VCsxLFI9cC5sZW5ndGg9PT1QLEY9YCR7X30ke3V9YDt2LnB1c2goUj9fOkYpLGI9IiJ9ZWxzZSBiPV99KSx7aHlwaGVuYXRlZFN0cmluZ3M6dixyZW1haW5pbmdXb3JkOmJ9fSwoaSxzLHU9Ii0iLGQpPT5gJHtpfSR7c30ke3V9JHtkLmZvbnRTaXplfSR7ZC5mb250V2VpZ2h0fSR7ZC5mb250RmFtaWx5fWApO2Z1bmN0aW9uIEUyZShpLHMpe3JldHVybiBUMmUoaSxzKS5oZWlnaHR9ZnVuY3Rpb24gSDQoaSxzKXtyZXR1cm4gVDJlKGkscykud2lkdGh9Y29uc3QgVDJlPWJEKChpLHMpPT57Y29uc3R7Zm9udFNpemU6dT0xMixmb250RmFtaWx5OmQ9IkFyaWFsIixmb250V2VpZ2h0OnA9NDAwfT1zO2lmKCFpKXJldHVybnt3aWR0aDowLGhlaWdodDowfTtjb25zdFssdl09TkModSksYj1bInNhbnMtc2VyaWYiLGRdLHk9aS5zcGxpdChjaS5saW5lQnJlYWtSZWdleCksVD1bXSxfPUlyKCJib2R5Iik7aWYoIV8ucmVtb3ZlKXJldHVybnt3aWR0aDowLGhlaWdodDowLGxpbmVIZWlnaHQ6MH07Y29uc3QgQT1fLmFwcGVuZCgic3ZnIik7Zm9yKGNvbnN0IFIgb2YgYil7bGV0IEY9MDtjb25zdCBqPXt3aWR0aDowLGhlaWdodDowLGxpbmVIZWlnaHQ6MH07Zm9yKGNvbnN0IEsgb2YgeSl7Y29uc3QgZWU9QVJ0KCk7ZWUudGV4dD1LfHxoamU7Y29uc3QgaWU9TFJ0KEEsZWUpLnN0eWxlKCJmb250LXNpemUiLHYpLnN0eWxlKCJmb250LXdlaWdodCIscCkuc3R5bGUoImZvbnQtZmFtaWx5IixSKSxvZT0oaWUuX2dyb3Vwc3x8aWUpWzBdWzBdLmdldEJCb3goKTtpZihvZS53aWR0aD09PTAmJm9lLmhlaWdodD09PTApdGhyb3cgbmV3IEVycm9yKCJzdmcgZWxlbWVudCBub3QgaW4gcmVuZGVyIHRyZWUiKTtqLndpZHRoPU1hdGgucm91bmQoTWF0aC5tYXgoai53aWR0aCxvZS53aWR0aCkpLEY9TWF0aC5yb3VuZChvZS5oZWlnaHQpLGouaGVpZ2h0Kz1GLGoubGluZUhlaWdodD1NYXRoLnJvdW5kKE1hdGgubWF4KGoubGluZUhlaWdodCxGKSl9VC5wdXNoKGopfUEucmVtb3ZlKCk7Y29uc3QgUD1pc05hTihUWzFdLmhlaWdodCl8fGlzTmFOKFRbMV0ud2lkdGgpfHxpc05hTihUWzFdLmxpbmVIZWlnaHQpfHxUWzBdLmhlaWdodD5UWzFdLmhlaWdodCYmVFswXS53aWR0aD5UWzFdLndpZHRoJiZUWzBdLmxpbmVIZWlnaHQ+VFsxXS5saW5lSGVpZ2h0PzA6MTtyZXR1cm4gVFtQXX0sKGkscyk9PmAke2l9JHtzLmZvbnRTaXplfSR7cy5mb250V2VpZ2h0fSR7cy5mb250RmFtaWx5fWApO2NsYXNzIERSdHtjb25zdHJ1Y3RvcihzPSExLHUpe3RoaXMuY291bnQ9MCx0aGlzLmNvdW50PXU/dS5sZW5ndGg6MCx0aGlzLm5leHQ9cz8oKT0+dGhpcy5jb3VudCsrOigpPT5EYXRlLm5vdygpfX1sZXQgJFg7Y29uc3QgSVJ0PWZ1bmN0aW9uKGkpe3JldHVybiAkWD0kWHx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksaT1lc2NhcGUoaSkucmVwbGFjZSgvJTI2L2csIiYiKS5yZXBsYWNlKC8lMjMvZywiIyIpLnJlcGxhY2UoLyUzQi9nLCI7IiksJFguaW5uZXJIVE1MPWksdW5lc2NhcGUoJFgudGV4dENvbnRlbnQpfTtmdW5jdGlvbiB3amUoaSl7cmV0dXJuInN0ciJpbiBpfWNvbnN0IE9SdD0oaSxzLHUsZCk9Pnt2YXIgdjtpZighZClyZXR1cm47Y29uc3QgcD0odj1pLm5vZGUoKSk9PW51bGw/dm9pZCAwOnYuZ2V0QkJveCgpO3AmJmkuYXBwZW5kKCJ0ZXh0IikudGV4dChkKS5hdHRyKCJ4IixwLngrcC53aWR0aC8yKS5hdHRyKCJ5IiwtdSkuYXR0cigiY2xhc3MiLHMpfSxOQz1pPT57aWYodHlwZW9mIGk9PSJudW1iZXIiKXJldHVybltpLGkrInB4Il07Y29uc3Qgcz1wYXJzZUludChpPz8iIiwxMCk7cmV0dXJuIE51bWJlci5pc05hTihzKT9bdm9pZCAwLHZvaWQgMF06aT09PVN0cmluZyhzKT9bcyxpKyJweCJdOltzLGldfTtmdW5jdGlvbiBKRihpLHMpe3JldHVybiBqWCh7fSxpLHMpfWNvbnN0IEFvPXthc3NpZ25XaXRoRGVwdGg6aWQsd3JhcExhYmVsOnZqZSxjYWxjdWxhdGVUZXh0SGVpZ2h0OkUyZSxjYWxjdWxhdGVUZXh0V2lkdGg6SDQsY2FsY3VsYXRlVGV4dERpbWVuc2lvbnM6VDJlLGNsZWFuQW5kTWVyZ2U6SkYsZGV0ZWN0SW5pdDp2UnQsZGV0ZWN0RGlyZWN0aXZlOmZqZSxpc1N1YnN0cmluZ0luQXJyYXk6eVJ0LGludGVycG9sYXRlVG9DdXJ2ZTpPdixjYWxjTGFiZWxQb3NpdGlvbjpUUnQsY2FsY0NhcmRpbmFsaXR5UG9zaXRpb246Q1J0LGNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb246U1J0LGZvcm1hdFVybDp4UnQsZ2V0U3R5bGVzRnJvbUFycmF5Om9tLGdlbmVyYXRlSWQ6YmplLHJhbmRvbTptamUscnVuRnVuYzprUnQsZW50aXR5RGVjb2RlOklSdCxpbnNlcnRUaXRsZTpPUnQscGFyc2VGb250U2l6ZTpOQyxJbml0SURHZW5lcmF0b3I6RFJ0fSxOUnQ9ZnVuY3Rpb24oaSl7bGV0IHM9aTtyZXR1cm4gcz1zLnJlcGxhY2UoL3N0eWxlLio6XFMqIy4qOy9nLGZ1bmN0aW9uKHUpe3JldHVybiB1LnN1YnN0cmluZygwLHUubGVuZ3RoLTEpfSkscz1zLnJlcGxhY2UoL2NsYXNzRGVmLio6XFMqIy4qOy9nLGZ1bmN0aW9uKHUpe3JldHVybiB1LnN1YnN0cmluZygwLHUubGVuZ3RoLTEpfSkscz1zLnJlcGxhY2UoLyNcdys7L2csZnVuY3Rpb24odSl7Y29uc3QgZD11LnN1YnN0cmluZygxLHUubGVuZ3RoLTEpO3JldHVybi9eXCs/XGQrJC8udGVzdChkKT8i76yCwrDCsCIrZCsiwrbDnyI6Iu+sgsKwIitkKyLCtsOfIn0pLHN9LFpGPWZ1bmN0aW9uKGkpe3JldHVybiBpLnJlcGxhY2UoL++sgsKwwrAvZywiJiMiKS5yZXBsYWNlKC/vrILCsC9nLCImIikucmVwbGFjZSgvwrbDny9nLCI7Iil9O3ZhciB5amU9ImNvbW0iLHhqZT0icnVsZSIsa2plPSJkZWNsIixQUnQ9IkBpbXBvcnQiLEJSdD0iQGtleWZyYW1lcyIsRlJ0PSJAbGF5ZXIiLEVqZT1NYXRoLmFicyxDMmU9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBUamUoaSl7cmV0dXJuIGkudHJpbSgpfWZ1bmN0aW9uIHpYKGkscyx1KXtyZXR1cm4gaS5yZXBsYWNlKHMsdSl9ZnVuY3Rpb24gUlJ0KGkscyx1KXtyZXR1cm4gaS5pbmRleE9mKHMsdSl9ZnVuY3Rpb24gZVIoaSxzKXtyZXR1cm4gaS5jaGFyQ29kZUF0KHMpfDB9ZnVuY3Rpb24gdFIoaSxzLHUpe3JldHVybiBpLnNsaWNlKHMsdSl9ZnVuY3Rpb24gXzcoaSl7cmV0dXJuIGkubGVuZ3RofWZ1bmN0aW9uIGpSdChpKXtyZXR1cm4gaS5sZW5ndGh9ZnVuY3Rpb24gcVgoaSxzKXtyZXR1cm4gcy5wdXNoKGkpLGl9dmFyIEhYPTEseEQ9MSxDamU9MCxOdj0wLEkwPTAsa0Q9IiI7ZnVuY3Rpb24gUzJlKGkscyx1LGQscCx2LGIseSl7cmV0dXJue3ZhbHVlOmkscm9vdDpzLHBhcmVudDp1LHR5cGU6ZCxwcm9wczpwLGNoaWxkcmVuOnYsbGluZTpIWCxjb2x1bW46eEQsbGVuZ3RoOmIscmV0dXJuOiIiLHNpYmxpbmdzOnl9fWZ1bmN0aW9uICRSdCgpe3JldHVybiBJMH1mdW5jdGlvbiB6UnQoKXtyZXR1cm4gSTA9TnY+MD9lUihrRCwtLU52KTowLHhELS0sSTA9PT0xMCYmKHhEPTEsSFgtLSksSTB9ZnVuY3Rpb24gQjMoKXtyZXR1cm4gSTA9TnY8Q2plP2VSKGtELE52KyspOjAseEQrKyxJMD09PTEwJiYoeEQ9MSxIWCsrKSxJMH1mdW5jdGlvbiBQQygpe3JldHVybiBlUihrRCxOdil9ZnVuY3Rpb24gVlgoKXtyZXR1cm4gTnZ9ZnVuY3Rpb24gVVgoaSxzKXtyZXR1cm4gdFIoa0QsaSxzKX1mdW5jdGlvbiBfMmUoaSl7c3dpdGNoKGkpe2Nhc2UgMDpjYXNlIDk6Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6cmV0dXJuIDU7Y2FzZSAzMzpjYXNlIDQzOmNhc2UgNDQ6Y2FzZSA0NzpjYXNlIDYyOmNhc2UgNjQ6Y2FzZSAxMjY6Y2FzZSA1OTpjYXNlIDEyMzpjYXNlIDEyNTpyZXR1cm4gNDtjYXNlIDU4OnJldHVybiAzO2Nhc2UgMzQ6Y2FzZSAzOTpjYXNlIDQwOmNhc2UgOTE6cmV0dXJuIDI7Y2FzZSA0MTpjYXNlIDkzOnJldHVybiAxfXJldHVybiAwfWZ1bmN0aW9uIHFSdChpKXtyZXR1cm4gSFg9eEQ9MSxDamU9Xzcoa0Q9aSksTnY9MCxbXX1mdW5jdGlvbiBIUnQoaSl7cmV0dXJuIGtEPSIiLGl9ZnVuY3Rpb24gQTJlKGkpe3JldHVybiBUamUoVVgoTnYtMSxMMmUoaT09PTkxP2krMjppPT09NDA/aSsxOmkpKSl9ZnVuY3Rpb24gVlJ0KGkpe2Zvcig7KEkwPVBDKCkpJiZJMDwzMzspQjMoKTtyZXR1cm4gXzJlKGkpPjJ8fF8yZShJMCk+Mz8iIjoiICJ9ZnVuY3Rpb24gVVJ0KGkscyl7Zm9yKDstLXMmJkIzKCkmJiEoSTA8NDh8fEkwPjEwMnx8STA+NTcmJkkwPDY1fHxJMD43MCYmSTA8OTcpOyk7cmV0dXJuIFVYKGksVlgoKSsoczw2JiZQQygpPT0zMiYmQjMoKT09MzIpKX1mdW5jdGlvbiBMMmUoaSl7Zm9yKDtCMygpOylzd2l0Y2goSTApe2Nhc2UgaTpyZXR1cm4gTnY7Y2FzZSAzNDpjYXNlIDM5OmkhPT0zNCYmaSE9PTM5JiZMMmUoSTApO2JyZWFrO2Nhc2UgNDA6aT09PTQxJiZMMmUoaSk7YnJlYWs7Y2FzZSA5MjpCMygpO2JyZWFrfXJldHVybiBOdn1mdW5jdGlvbiBHUnQoaSxzKXtmb3IoO0IzKCkmJmkrSTAhPT00NysxMDspaWYoaStJMD09PTQyKzQyJiZQQygpPT09NDcpYnJlYWs7cmV0dXJuIi8qIitVWChzLE52LTEpKyIqIitDMmUoaT09PTQ3P2k6QjMoKSl9ZnVuY3Rpb24gS1J0KGkpe2Zvcig7IV8yZShQQygpKTspQjMoKTtyZXR1cm4gVVgoaSxOdil9ZnVuY3Rpb24gV1J0KGkpe3JldHVybiBIUnQoR1goIiIsbnVsbCxudWxsLG51bGwsWyIiXSxpPXFSdChpKSwwLFswXSxpKSl9ZnVuY3Rpb24gR1goaSxzLHUsZCxwLHYsYix5LFQpe2Zvcih2YXIgXz0wLEE9MCxQPWIsUj0wLEY9MCxqPTAsSz0xLGVlPTEsaWU9MSxvZT0wLHBlPSIiLGJlPXAsYWU9dixuZT1kLHNlPXBlO2VlOylzd2l0Y2goaj1vZSxvZT1CMygpKXtjYXNlIDQwOmlmKGohPTEwOCYmZVIoc2UsUC0xKT09NTgpe1JSdChzZSs9elgoQTJlKG9lKSwiJiIsIiZcZiIpLCImXGYiLEVqZShfP3lbXy0xXTowKSkhPS0xJiYoaWU9LTEpO2JyZWFrfWNhc2UgMzQ6Y2FzZSAzOTpjYXNlIDkxOnNlKz1BMmUob2UpO2JyZWFrO2Nhc2UgOTpjYXNlIDEwOmNhc2UgMTM6Y2FzZSAzMjpzZSs9VlJ0KGopO2JyZWFrO2Nhc2UgOTI6c2UrPVVSdChWWCgpLTEsNyk7Y29udGludWU7Y2FzZSA0Nzpzd2l0Y2goUEMoKSl7Y2FzZSA0MjpjYXNlIDQ3OnFYKFlSdChHUnQoQjMoKSxWWCgpKSxzLHUsVCksVCk7YnJlYWs7ZGVmYXVsdDpzZSs9Ii8ifWJyZWFrO2Nhc2UgMTIzKks6eVtfKytdPV83KHNlKSppZTtjYXNlIDEyNSpLOmNhc2UgNTk6Y2FzZSAwOnN3aXRjaChvZSl7Y2FzZSAwOmNhc2UgMTI1OmVlPTA7Y2FzZSA1OStBOmllPT0tMSYmKHNlPXpYKHNlLC9cZi9nLCIiKSksRj4wJiZfNyhzZSktUCYmcVgoRj4zMj9famUoc2UrIjsiLGQsdSxQLTEsVCk6X2plKHpYKHNlLCIgIiwiIikrIjsiLGQsdSxQLTIsVCksVCk7YnJlYWs7Y2FzZSA1OTpzZSs9IjsiO2RlZmF1bHQ6aWYocVgobmU9U2plKHNlLHMsdSxfLEEscCx5LHBlLGJlPVtdLGFlPVtdLFAsdiksdiksb2U9PT0xMjMpaWYoQT09PTApR1goc2UscyxuZSxuZSxiZSx2LFAseSxhZSk7ZWxzZSBzd2l0Y2goUj09PTk5JiZlUihzZSwzKT09PTExMD8xMDA6Uil7Y2FzZSAxMDA6Y2FzZSAxMDg6Y2FzZSAxMDk6Y2FzZSAxMTU6R1goaSxuZSxuZSxkJiZxWChTamUoaSxuZSxuZSwwLDAscCx5LHBlLHAsYmU9W10sUCxhZSksYWUpLHAsYWUsUCx5LGQ/YmU6YWUpO2JyZWFrO2RlZmF1bHQ6R1goc2UsbmUsbmUsbmUsWyIiXSxhZSwwLHksYWUpfX1fPUE9Rj0wLEs9aWU9MSxwZT1zZT0iIixQPWI7YnJlYWs7Y2FzZSA1ODpQPTErXzcoc2UpLEY9ajtkZWZhdWx0OmlmKEs8MSl7aWYob2U9PTEyMyktLUs7ZWxzZSBpZihvZT09MTI1JiZLKys9PTAmJnpSdCgpPT0xMjUpY29udGludWV9c3dpdGNoKHNlKz1DMmUob2UpLG9lKkspe2Nhc2UgMzg6aWU9QT4wPzE6KHNlKz0iXGYiLC0xKTticmVhaztjYXNlIDQ0OnlbXysrXT0oXzcoc2UpLTEpKmllLGllPTE7YnJlYWs7Y2FzZSA2NDpQQygpPT09NDUmJihzZSs9QTJlKEIzKCkpKSxSPVBDKCksQT1QPV83KHBlPXNlKz1LUnQoVlgoKSkpLG9lKys7YnJlYWs7Y2FzZSA0NTpqPT09NDUmJl83KHNlKT09MiYmKEs9MCl9fXJldHVybiB2fWZ1bmN0aW9uIFNqZShpLHMsdSxkLHAsdixiLHksVCxfLEEsUCl7Zm9yKHZhciBSPXAtMSxGPXA9PT0wP3Y6WyIiXSxqPWpSdChGKSxLPTAsZWU9MCxpZT0wO0s8ZDsrK0spZm9yKHZhciBvZT0wLHBlPXRSKGksUisxLFI9RWplKGVlPWJbS10pKSxiZT1pO29lPGo7KytvZSkoYmU9VGplKGVlPjA/RltvZV0rIiAiK3BlOnpYKHBlLC8mXGYvZyxGW29lXSkpKSYmKFRbaWUrK109YmUpO3JldHVybiBTMmUoaSxzLHUscD09PTA/eGplOnksVCxfLEEsUCl9ZnVuY3Rpb24gWVJ0KGkscyx1LGQpe3JldHVybiBTMmUoaSxzLHUseWplLEMyZSgkUnQoKSksdFIoaSwyLC0yKSwwLGQpfWZ1bmN0aW9uIF9qZShpLHMsdSxkLHApe3JldHVybiBTMmUoaSxzLHUsa2plLHRSKGksMCxkKSx0UihpLGQrMSwtMSksZCxwKX1mdW5jdGlvbiBNMmUoaSxzKXtmb3IodmFyIHU9IiIsZD0wO2Q8aS5sZW5ndGg7ZCsrKXUrPXMoaVtkXSxkLGkscyl8fCIiO3JldHVybiB1fWZ1bmN0aW9uIFhSdChpLHMsdSxkKXtzd2l0Y2goaS50eXBlKXtjYXNlIEZSdDppZihpLmNoaWxkcmVuLmxlbmd0aClicmVhaztjYXNlIFBSdDpjYXNlIGtqZTpyZXR1cm4gaS5yZXR1cm49aS5yZXR1cm58fGkudmFsdWU7Y2FzZSB5amU6cmV0dXJuIiI7Y2FzZSBCUnQ6cmV0dXJuIGkucmV0dXJuPWkudmFsdWUrInsiK00yZShpLmNoaWxkcmVuLGQpKyJ9IjtjYXNlIHhqZTppZighXzcoaS52YWx1ZT1pLnByb3BzLmpvaW4oIiwiKSkpcmV0dXJuIiJ9cmV0dXJuIF83KHU9TTJlKGkuY2hpbGRyZW4sZCkpP2kucmV0dXJuPWkudmFsdWUrInsiK3UrIn0iOiIifWNvbnN0IEFqZT0iMTAuOS4xIixFRD1PYmplY3QuZnJlZXplKHNoKTtsZXQgQjI9aWQoe30sRUQpLExqZSxURD1bXSxuUj1pZCh7fSxFRCk7Y29uc3QgS1g9KGkscyk9PntsZXQgdT1pZCh7fSxpKSxkPXt9O2Zvcihjb25zdCBwIG9mIHMpSWplKHApLGQ9aWQoZCxwKTtpZih1PWlkKHUsZCksZC50aGVtZSYmZC50aGVtZSBpbiBFNyl7Y29uc3QgcD1pZCh7fSxMamUpLHY9aWQocC50aGVtZVZhcmlhYmxlc3x8e30sZC50aGVtZVZhcmlhYmxlcyk7dS50aGVtZSYmdS50aGVtZSBpbiBFNyYmKHUudGhlbWVWYXJpYWJsZXM9RTdbdS50aGVtZV0uZ2V0VGhlbWVWYXJpYWJsZXModikpfXJldHVybiBuUj11LE5qZShuUiksblJ9LFFSdD1pPT4oQjI9aWQoe30sRUQpLEIyPWlkKEIyLGkpLGkudGhlbWUmJkU3W2kudGhlbWVdJiYoQjIudGhlbWVWYXJpYWJsZXM9RTdbaS50aGVtZV0uZ2V0VGhlbWVWYXJpYWJsZXMoaS50aGVtZVZhcmlhYmxlcykpLEtYKEIyLFREKSxCMiksSlJ0PWk9PntMamU9aWQoe30saSl9LFpSdD1pPT4oQjI9aWQoQjIsaSksS1goQjIsVEQpLEIyKSxNamU9KCk9PmlkKHt9LEIyKSxEamU9aT0+KE5qZShpKSxpZChuUixpKSxWaCgpKSxWaD0oKT0+aWQoe30sblIpLElqZT1pPT57aSYmKFsic2VjdXJlIiwuLi5CMi5zZWN1cmU/P1tdXS5mb3JFYWNoKHM9PntPYmplY3QuaGFzT3duKGkscykmJihYZS5kZWJ1ZyhgRGVuaWVkIGF0dGVtcHQgdG8gbW9kaWZ5IGEgc2VjdXJlIGtleSAke3N9YCxpW3NdKSxkZWxldGUgaVtzXSl9KSxPYmplY3Qua2V5cyhpKS5mb3JFYWNoKHM9PntzLnN0YXJ0c1dpdGgoIl9fIikmJmRlbGV0ZSBpW3NdfSksT2JqZWN0LmtleXMoaSkuZm9yRWFjaChzPT57dHlwZW9mIGlbc109PSJzdHJpbmciJiYoaVtzXS5pbmNsdWRlcygiPCIpfHxpW3NdLmluY2x1ZGVzKCI+Iil8fGlbc10uaW5jbHVkZXMoInVybChkYXRhOiIpKSYmZGVsZXRlIGlbc10sdHlwZW9mIGlbc109PSJvYmplY3QiJiZJamUoaVtzXSl9KSl9LGVqdD1pPT57U1goaSksaS5mb250RmFtaWx5JiYoIWkudGhlbWVWYXJpYWJsZXN8fCFpLnRoZW1lVmFyaWFibGVzLmZvbnRGYW1pbHkpJiYoaS50aGVtZVZhcmlhYmxlcz17Zm9udEZhbWlseTppLmZvbnRGYW1pbHl9KSxURC5wdXNoKGkpLEtYKEIyLFREKX0sV1g9KGk9QjIpPT57VEQ9W10sS1goaSxURCl9LHRqdD17TEFaWV9MT0FEX0RFUFJFQ0FURUQ6IlRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbGF6eUxvYWRlZERpYWdyYW1zIGFuZCBsb2FkRXh0ZXJuYWxEaWFncmFtc0F0U3RhcnR1cCBhcmUgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSByZWdpc3RlckV4dGVybmFsRGlhZ3JhbXMgaW5zdGVhZC4ifSxPamU9e30sbmp0PWk9PntPamVbaV18fChYZS53YXJuKHRqdFtpXSksT2plW2ldPSEwKX0sTmplPWk9PntpJiYoaS5sYXp5TG9hZGVkRGlhZ3JhbXN8fGkubG9hZEV4dGVybmFsRGlhZ3JhbXNBdFN0YXJ0dXApJiZuanQoIkxBWllfTE9BRF9ERVBSRUNBVEVEIil9LFBqZT0iYzQiLHJqdD17aWQ6UGplLGRldGVjdG9yOmk9Pi9eXHMqQzRDb250ZXh0fEM0Q29udGFpbmVyfEM0Q29tcG9uZW50fEM0RHluYW1pY3xDNERlcGxveW1lbnQvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PndVdCk7cmV0dXJue2lkOlBqZSxkaWFncmFtOml9fX0sQmplPSJmbG93Y2hhcnQiLGlqdD17aWQ6QmplLGRldGVjdG9yOihpLHMpPT57dmFyIHUsZDtyZXR1cm4oKHU9cz09bnVsbD92b2lkIDA6cy5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDp1LmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtd3JhcHBlciJ8fCgoZD1zPT1udWxsP3ZvaWQgMDpzLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOmQuZGVmYXVsdFJlbmRlcmVyKT09PSJlbGsiPyExOi9eXHMqZ3JhcGgvLnRlc3QoaSl9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5fZW4pO3JldHVybntpZDpCamUsZGlhZ3JhbTppfX19LEZqZT0iZmxvd2NoYXJ0LXYyIixzanQ9e2lkOkZqZSxkZXRlY3RvcjooaSxzKT0+e3ZhciB1LGQscDtyZXR1cm4oKHU9cz09bnVsbD92b2lkIDA6cy5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDp1LmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtZDMifHwoKGQ9cz09bnVsbD92b2lkIDA6cy5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpkLmRlZmF1bHRSZW5kZXJlcik9PT0iZWxrIj8hMTovXlxzKmdyYXBoLy50ZXN0KGkpJiYoKHA9cz09bnVsbD92b2lkIDA6cy5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpwLmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtd3JhcHBlciI/ITA6L15ccypmbG93Y2hhcnQvLnRlc3QoaSl9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5BZW4pO3JldHVybntpZDpGamUsZGlhZ3JhbTppfX19LFJqZT0iZXIiLGFqdD17aWQ6UmplLGRldGVjdG9yOmk9Pi9eXHMqZXJEaWFncmFtLy50ZXN0KGkpLGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5ldG4pO3JldHVybntpZDpSamUsZGlhZ3JhbTppfX19LGpqZT0iZ2l0R3JhcGgiLG9qdD17aWQ6amplLGRldGVjdG9yOmk9Pi9eXHMqZ2l0R3JhcGgvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PlN0bik7cmV0dXJue2lkOmpqZSxkaWFncmFtOml9fX0sJGplPSJnYW50dCIsY2p0PXtpZDokamUsZGV0ZWN0b3I6aT0+L15ccypnYW50dC8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+cG5uKTtyZXR1cm57aWQ6JGplLGRpYWdyYW06aX19fSx6amU9ImluZm8iLHVqdD17aWQ6emplLGRldGVjdG9yOmk9Pi9eXHMqaW5mby8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bW5uKTtyZXR1cm57aWQ6emplLGRpYWdyYW06aX19fSxxamU9InBpZSIsbGp0PXtpZDpxamUsZGV0ZWN0b3I6aT0+L15ccypwaWUvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PkVubik7cmV0dXJue2lkOnFqZSxkaWFncmFtOml9fX0sSGplPSJxdWFkcmFudENoYXJ0IixoanQ9e2lkOkhqZSxkZXRlY3RvcjppPT4vXlxzKnF1YWRyYW50Q2hhcnQvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pmpubik7cmV0dXJue2lkOkhqZSxkaWFncmFtOml9fX0sVmplPSJ4eWNoYXJ0IixmanQ9e2lkOlZqZSxkZXRlY3RvcjppPT4vXlxzKnh5Y2hhcnQtYmV0YS8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dXJuKTtyZXR1cm57aWQ6VmplLGRpYWdyYW06aX19fSxVamU9InJlcXVpcmVtZW50IixkanQ9e2lkOlVqZSxkZXRlY3RvcjppPT4vXlxzKnJlcXVpcmVtZW50KERpYWdyYW0pPy8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+d3JuKTtyZXR1cm57aWQ6VWplLGRpYWdyYW06aX19fSxHamU9InNlcXVlbmNlIixnanQ9e2lkOkdqZSxkZXRlY3RvcjppPT4vXlxzKnNlcXVlbmNlRGlhZ3JhbS8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+a2luKTtyZXR1cm57aWQ6R2plLGRpYWdyYW06aX19fSxLamU9ImNsYXNzIixwanQ9e2lkOktqZSxkZXRlY3RvcjooaSxzKT0+e3ZhciB1O3JldHVybigodT1zPT1udWxsP3ZvaWQgMDpzLmNsYXNzKT09bnVsbD92b2lkIDA6dS5kZWZhdWx0UmVuZGVyZXIpPT09ImRhZ3JlLXdyYXBwZXIiPyExOi9eXHMqY2xhc3NEaWFncmFtLy50ZXN0KGkpfSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+R2luKTtyZXR1cm57aWQ6S2plLGRpYWdyYW06aX19fSxXamU9ImNsYXNzRGlhZ3JhbSIsYmp0PXtpZDpXamUsZGV0ZWN0b3I6KGkscyk9Pnt2YXIgdTtyZXR1cm4vXlxzKmNsYXNzRGlhZ3JhbS8udGVzdChpKSYmKCh1PXM9PW51bGw/dm9pZCAwOnMuY2xhc3MpPT1udWxsP3ZvaWQgMDp1LmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtd3JhcHBlciI/ITA6L15ccypjbGFzc0RpYWdyYW0tdjIvLnRlc3QoaSl9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5KaW4pO3JldHVybntpZDpXamUsZGlhZ3JhbTppfX19LFlqZT0ic3RhdGUiLG1qdD17aWQ6WWplLGRldGVjdG9yOihpLHMpPT57dmFyIHU7cmV0dXJuKCh1PXM9PW51bGw/dm9pZCAwOnMuc3RhdGUpPT1udWxsP3ZvaWQgMDp1LmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtd3JhcHBlciI/ITE6L15ccypzdGF0ZURpYWdyYW0vLnRlc3QoaSl9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5qc24pO3JldHVybntpZDpZamUsZGlhZ3JhbTppfX19LFhqZT0ic3RhdGVEaWFncmFtIix2anQ9e2lkOlhqZSxkZXRlY3RvcjooaSxzKT0+e3ZhciB1O3JldHVybiEhKC9eXHMqc3RhdGVEaWFncmFtLXYyLy50ZXN0KGkpfHwvXlxzKnN0YXRlRGlhZ3JhbS8udGVzdChpKSYmKCh1PXM9PW51bGw/dm9pZCAwOnMuc3RhdGUpPT1udWxsP3ZvaWQgMDp1LmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtd3JhcHBlciIpfSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+aWFuKTtyZXR1cm57aWQ6WGplLGRpYWdyYW06aX19fSxRamU9ImpvdXJuZXkiLHdqdD17aWQ6UWplLGRldGVjdG9yOmk9Pi9eXHMqam91cm5leS8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+RWFuKTtyZXR1cm57aWQ6UWplLGRpYWdyYW06aX19fSx5anQ9ZnVuY3Rpb24oaSxzKXtmb3IobGV0IHUgb2YgcylpLmF0dHIodVswXSx1WzFdKX0seGp0PWZ1bmN0aW9uKGkscyx1KXtsZXQgZD1uZXcgTWFwO3JldHVybiB1PyhkLnNldCgid2lkdGgiLCIxMDAlIiksZC5zZXQoInN0eWxlIixgbWF4LXdpZHRoOiAke3N9cHg7YCkpOihkLnNldCgiaGVpZ2h0IixpKSxkLnNldCgid2lkdGgiLHMpKSxkfSxOZz1mdW5jdGlvbihpLHMsdSxkKXtjb25zdCBwPXhqdChzLHUsZCk7eWp0KGkscCl9LHk5PWZ1bmN0aW9uKGkscyx1LGQpe2NvbnN0IHA9cy5ub2RlKCkuZ2V0QkJveCgpLHY9cC53aWR0aCxiPXAuaGVpZ2h0O1hlLmluZm8oYFNWRyBib3VuZHM6ICR7dn14JHtifWAscCk7bGV0IHk9MCxUPTA7WGUuaW5mbyhgR3JhcGggYm91bmRzOiAke3l9eCR7VH1gLGkpLHk9dit1KjIsVD1iK3UqMixYZS5pbmZvKGBDYWxjdWxhdGVkIGJvdW5kczogJHt5fXgke1R9YCksTmcocyxULHksZCk7Y29uc3QgXz1gJHtwLngtdX0gJHtwLnktdX0gJHtwLndpZHRoKzIqdX0gJHtwLmhlaWdodCsyKnV9YDtzLmF0dHIoInZpZXdCb3giLF8pfSxZWD17fSxranQ9KGkscyx1KT0+e2xldCBkPSIiO3JldHVybiBpIGluIFlYJiZZWFtpXT9kPVlYW2ldKHUpOlhlLndhcm4oYE5vIHRoZW1lIGZvdW5kIGZvciAke2l9YCksYCAmIHsKICAgIGZvbnQtZmFtaWx5OiAke3UuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6ICR7dS5mb250U2l6ZX07CiAgICBmaWxsOiAke3UudGV4dENvbG9yfQogIH0KCiAgLyogQ2xhc3NlcyBjb21tb24gZm9yIG11bHRpcGxlIGRpYWdyYW1zICovCgogICYgLmVycm9yLWljb24gewogICAgZmlsbDogJHt1LmVycm9yQmtnQ29sb3J9OwogIH0KICAmIC5lcnJvci10ZXh0IHsKICAgIGZpbGw6ICR7dS5lcnJvclRleHRDb2xvcn07CiAgICBzdHJva2U6ICR7dS5lcnJvclRleHRDb2xvcn07CiAgfQoKICAmIC5lZGdlLXRoaWNrbmVzcy1ub3JtYWwgewogICAgc3Ryb2tlLXdpZHRoOiAycHg7CiAgfQogICYgLmVkZ2UtdGhpY2tuZXNzLXRoaWNrIHsKICAgIHN0cm9rZS13aWR0aDogMy41cHgKICB9CiAgJiAuZWRnZS1wYXR0ZXJuLXNvbGlkIHsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDA7CiAgfQoKICAmIC5lZGdlLXBhdHRlcm4tZGFzaGVkewogICAgc3Ryb2tlLWRhc2hhcnJheTogMzsKICB9CiAgLmVkZ2UtcGF0dGVybi1kb3R0ZWQgewogICAgc3Ryb2tlLWRhc2hhcnJheTogMjsKICB9CgogICYgLm1hcmtlciB7CiAgICBmaWxsOiAke3UubGluZUNvbG9yfTsKICAgIHN0cm9rZTogJHt1LmxpbmVDb2xvcn07CiAgfQogICYgLm1hcmtlci5jcm9zcyB7CiAgICBzdHJva2U6ICR7dS5saW5lQ29sb3J9OwogIH0KCiAgJiBzdmcgewogICAgZm9udC1mYW1pbHk6ICR7dS5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogJHt1LmZvbnRTaXplfTsKICB9CgogICR7ZH0KCiAgJHtzfQpgfSxFanQ9KGkscyk9PntzIT09dm9pZCAwJiYoWVhbaV09cyl9LFRqdD1ranQ7bGV0IEQyZT0iIixJMmU9IiIsTzJlPSIiO2NvbnN0IE4yZT1pPT5ZZihpLFZoKCkpLFBnPSgpPT57RDJlPSIiLE8yZT0iIixJMmU9IiJ9LEJnPWk9PntEMmU9TjJlKGkpLnJlcGxhY2UoL15ccysvZywiIil9LENwPSgpPT5EMmUsU3A9aT0+e08yZT1OMmUoaSkucmVwbGFjZSgvXG5ccysvZyxgCmApfSxfcD0oKT0+TzJlLGNtPWk9PntJMmU9TjJlKGkpfSxBcD0oKT0+STJlLEpqZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsY2xlYXI6UGcsZ2V0QWNjRGVzY3JpcHRpb246X3AsZ2V0QWNjVGl0bGU6Q3AsZ2V0RGlhZ3JhbVRpdGxlOkFwLHNldEFjY0Rlc2NyaXB0aW9uOlNwLHNldEFjY1RpdGxlOkJnLHNldERpYWdyYW1UaXRsZTpjbX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxDanQ9WGUsU2p0PWZwZSxxdD1WaCxfanQ9RGplLFpqZT1FRCxBanQ9aT0+WWYoaSxxdCgpKSxlJGU9eTksTGp0PSgpPT5KamUsWFg9e30sUVg9KGkscyx1KT0+e3ZhciBkO2lmKFhYW2ldKXRocm93IG5ldyBFcnJvcihgRGlhZ3JhbSAke2l9IGFscmVhZHkgcmVnaXN0ZXJlZC5gKTtYWFtpXT1zLHUmJlBSZShpLHUpLEVqdChpLHMuc3R5bGVzKSwoZD1zLmluamVjdFV0aWxzKT09bnVsbHx8ZC5jYWxsKHMsQ2p0LFNqdCxxdCxBanQsZSRlLExqdCgpLCgpPT57fSl9LFAyZT1pPT57aWYoaSBpbiBYWClyZXR1cm4gWFhbaV07dGhyb3cgbmV3IE1qdChpKX07Y2xhc3MgTWp0IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3Iocyl7c3VwZXIoYERpYWdyYW0gJHtzfSBub3QgZm91bmQuYCl9fWNvbnN0IHJSPWk9Pnt2YXIgcDtjb25zdHtzZWN1cml0eUxldmVsOnN9PXF0KCk7bGV0IHU9SXIoImJvZHkiKTtpZihzPT09InNhbmRib3giKXtjb25zdCBiPSgocD1JcihgI2kke2l9YCkubm9kZSgpKT09bnVsbD92b2lkIDA6cC5jb250ZW50RG9jdW1lbnQpPz9kb2N1bWVudDt1PUlyKGIuYm9keSl9cmV0dXJuIHUuc2VsZWN0KGAjJHtpfWApfSx0JGU9e2RyYXc6KGkscyx1KT0+e1hlLmRlYnVnKGByZW5kZXJpbmcgc3ZnIGZvciBzeW50YXggZXJyb3IKYCk7Y29uc3QgZD1yUihzKSxwPWQuYXBwZW5kKCJnIik7ZC5hdHRyKCJ2aWV3Qm94IiwiMCAwIDI0MTIgNTEyIiksTmcoZCwxMDAsNTEyLCEwKSxwLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDExLjMxMywxMjMuMzEzYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyLTkuMzc1LDkuMzc1LTIwLjY4OC0yMC42ODhjLTEyLjQ4NC0xMi41LTMyLjc2Ni0xMi41LTQ1LjI1LDBsLTE2LDE2Yy0xLjI2MSwxLjI2MS0yLjMwNCwyLjY0OC0zLjMxLDQuMDUxLTIxLjczOS04LjU2MS00NS4zMjQtMTMuNDI2LTcwLjA2NS0xMy40MjYtMTA1Ljg2NywwLTE5Miw4Ni4xMzMtMTkyLDE5MnM4Ni4xMzMsMTkyIDE5MiwxOTIgMTkyLTg2LjEzMyAxOTItMTkyYzAtMjQuNzQxLTQuODY0LTQ4LjMyNy0xMy40MjYtNzAuMDY1IDEuNDAyLTEuMDA3IDIuNzktMi4wNDkgNC4wNTEtMy4zMWwxNi0xNmMxMi41LTEyLjQ5MiAxMi41LTMyLjc1OCAwLTQ1LjI1bC0yMC42ODgtMjAuNjg4IDkuMzc1LTkuMzc1IDMyLjAwMS0zMS45OTl6bS0yMTkuMzEzLDEwMC42ODdjLTUyLjkzOCwwLTk2LDQzLjA2My05Niw5NiAwLDguODM2LTcuMTY0LDE2LTE2LDE2cy0xNi03LjE2NC0xNi0xNmMwLTcwLjU3OCA1Ny40MjItMTI4IDEyOC0xMjggOC44MzYsMCAxNiw3LjE2NCAxNiwxNnMtNy4xNjQsMTYtMTYsMTZ6IikscC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQ1OS4wMiwxNDguOThjLTYuMjUtNi4yNS0xNi4zNzUtNi4yNS0yMi42MjUsMHMtNi4yNSwxNi4zNzUgMCwyMi42MjVsMTYsMTZjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4IDYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNWwtMTYuMDAxLTE2eiIpLHAuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm0zNDAuMzk1LDc1LjYwNWMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODggNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1bC0xNi0xNmMtNi4yNS02LjI1LTE2LjM3NS02LjI1LTIyLjYyNSwwcy02LjI1LDE2LjM3NSAwLDIyLjYyNWwxNS45OTksMTZ6IikscC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQwMCw2NGM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2di0zMmMwLTguODM2LTcuMTU2LTE2LTE2LTE2LTguODQ0LDAtMTYsNy4xNjQtMTYsMTZ2MzJjMCw4LjgzNiA3LjE1NiwxNiAxNiwxNnoiKSxwLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDk2LDk2LjU4NmgtMzJjLTguODQ0LDAtMTYsNy4xNjQtMTYsMTYgMCw4LjgzNiA3LjE1NiwxNiAxNiwxNmgzMmM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2IDAtOC44MzYtNy4xNTYtMTYtMTYtMTZ6IikscC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQzNi45OCw3NS42MDVjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4bDMyLTMyYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyYy02LjI1MSw2LjI1LTYuMjUxLDE2LjM3NS0wLjAwMSwyMi42MjV6IikscC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVycm9yLXRleHQiKS5hdHRyKCJ4IiwxNDQwKS5hdHRyKCJ5IiwyNTApLmF0dHIoImZvbnQtc2l6ZSIsIjE1MHB4Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCgiU3ludGF4IGVycm9yIGluIHRleHQiKSxwLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItdGV4dCIpLmF0dHIoIngiLDEyNTApLmF0dHIoInkiLDQwMCkuYXR0cigiZm9udC1zaXplIiwiMTAwcHgiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGBtZXJtYWlkIHZlcnNpb24gJHt1fWApfX0sRGp0PXQkZSxJanQ9e2RiOnt9LHJlbmRlcmVyOnQkZSxwYXJzZXI6e3BhcnNlcjp7eXk6e319LHBhcnNlOigpPT57fX19LG4kZT0iZmxvd2NoYXJ0LWVsayIsT2p0PXtpZDpuJGUsZGV0ZWN0b3I6KGkscyk9Pnt2YXIgdTtyZXR1cm4hISgvXlxzKmZsb3djaGFydC1lbGsvLnRlc3QoaSl8fC9eXHMqZmxvd2NoYXJ0fGdyYXBoLy50ZXN0KGkpJiYoKHU9cz09bnVsbD92b2lkIDA6cy5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDp1LmRlZmF1bHRSZW5kZXJlcik9PT0iZWxrIil9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5qYW4pO3JldHVybntpZDpuJGUsZGlhZ3JhbTppfX19LHIkZT0idGltZWxpbmUiLE5qdD17aWQ6ciRlLGRldGVjdG9yOmk9Pi9eXHMqdGltZWxpbmUvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pmlvbik7cmV0dXJue2lkOnIkZSxkaWFncmFtOml9fX0saSRlPSJtaW5kbWFwIixQanQ9e2lkOmkkZSxkZXRlY3RvcjppPT4vXlxzKm1pbmRtYXAvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pklvbik7cmV0dXJue2lkOmkkZSxkaWFncmFtOml9fX0scyRlPSJzYW5rZXkiLEJqdD17aWQ6cyRlLGRldGVjdG9yOmk9Pi9eXHMqc2Fua2V5LWJldGEvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmNjbik7cmV0dXJue2lkOnMkZSxkaWFncmFtOml9fX0sYSRlPSJibG9jayIsRmp0PXtpZDphJGUsZGV0ZWN0b3I6aT0+L15ccypibG9jay1iZXRhLy50ZXN0KGkpLGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5NY24pO3JldHVybntpZDphJGUsZGlhZ3JhbTppfX19O2xldCBvJGU9ITE7Y29uc3QgQjJlPSgpPT57byRlfHwobyRlPSEwLFFYKCJlcnJvciIsSWp0LGk9PmkudG9Mb3dlckNhc2UoKS50cmltKCk9PT0iZXJyb3IiKSxRWCgiLS0tIix7ZGI6e2NsZWFyOigpPT57fX0sc3R5bGVzOnt9LHJlbmRlcmVyOntkcmF3OigpPT57fX0scGFyc2VyOntwYXJzZXI6e3l5Ont9fSxwYXJzZTooKT0+e3Rocm93IG5ldyBFcnJvcigiRGlhZ3JhbXMgYmVnaW5uaW5nIHdpdGggLS0tIGFyZSBub3QgdmFsaWQuIElmIHlvdSB3ZXJlIHRyeWluZyB0byB1c2UgYSBZQU1MIGZyb250LW1hdHRlciwgcGxlYXNlIGVuc3VyZSB0aGF0IHlvdSd2ZSBjb3JyZWN0bHkgb3BlbmVkIGFuZCBjbG9zZWQgdGhlIFlBTUwgZnJvbnQtbWF0dGVyIHdpdGggdW4taW5kZW50ZWQgYC0tLWAgYmxvY2tzIil9fSxpbml0OigpPT5udWxsfSxpPT5pLnRvTG93ZXJDYXNlKCkudHJpbVN0YXJ0KCkuc3RhcnRzV2l0aCgiLS0tIikpLE5SZShyanQsYmp0LHBqdCxhanQsY2p0LHVqdCxsanQsZGp0LGdqdCxPanQsc2p0LGlqdCxQanQsTmp0LG9qdCx2anQsbWp0LHdqdCxoanQsQmp0LGZqdCxGanQpKX07Y2xhc3MgYyRle2NvbnN0cnVjdG9yKHMsdT17fSl7dGhpcy50ZXh0PXMsdGhpcy5tZXRhZGF0YT11LHRoaXMudHlwZT0iZ3JhcGgiLHRoaXMudGV4dD1OUnQocyksdGhpcy50ZXh0Kz1gCmA7Y29uc3QgZD1WaCgpO3RyeXt0aGlzLnR5cGU9X1gocyxkKX1jYXRjaCh2KXt0aGlzLnR5cGU9ImVycm9yIix0aGlzLmRldGVjdEVycm9yPXZ9Y29uc3QgcD1QMmUodGhpcy50eXBlKTtYZS5kZWJ1ZygiVHlwZSAiK3RoaXMudHlwZSksdGhpcy5kYj1wLmRiLHRoaXMucmVuZGVyZXI9cC5yZW5kZXJlcix0aGlzLnBhcnNlcj1wLnBhcnNlcix0aGlzLnBhcnNlci5wYXJzZXIueXk9dGhpcy5kYix0aGlzLmluaXQ9cC5pbml0LHRoaXMucGFyc2UoKX1wYXJzZSgpe3ZhciB1LGQscCx2LGI7aWYodGhpcy5kZXRlY3RFcnJvcil0aHJvdyB0aGlzLmRldGVjdEVycm9yOyhkPSh1PXRoaXMuZGIpLmNsZWFyKT09bnVsbHx8ZC5jYWxsKHUpO2NvbnN0IHM9VmgoKTsocD10aGlzLmluaXQpPT1udWxsfHxwLmNhbGwodGhpcyxzKSx0aGlzLm1ldGFkYXRhLnRpdGxlJiYoKGI9KHY9dGhpcy5kYikuc2V0RGlhZ3JhbVRpdGxlKT09bnVsbHx8Yi5jYWxsKHYsdGhpcy5tZXRhZGF0YS50aXRsZSkpLHRoaXMucGFyc2VyLnBhcnNlKHRoaXMudGV4dCl9YXN5bmMgcmVuZGVyKHMsdSl7YXdhaXQgdGhpcy5yZW5kZXJlci5kcmF3KHRoaXMudGV4dCxzLHUsdGhpcyl9Z2V0UGFyc2VyKCl7cmV0dXJuIHRoaXMucGFyc2VyfWdldFR5cGUoKXtyZXR1cm4gdGhpcy50eXBlfX1jb25zdCBSanQ9YXN5bmMoaSxzPXt9KT0+e2NvbnN0IHU9X1goaSxWaCgpKTt0cnl7UDJlKHUpfWNhdGNoe2NvbnN0IHA9JFB0KHUpO2lmKCFwKXRocm93IG5ldyBPUmUoYERpYWdyYW0gJHt1fSBub3QgZm91bmQuYCk7Y29uc3R7aWQ6dixkaWFncmFtOmJ9PWF3YWl0IHAoKTtRWCh2LGIpfXJldHVybiBuZXcgYyRlKGkscyl9O2xldCB1JGU9W107Y29uc3Qgamp0PSgpPT57dSRlLmZvckVhY2goaT0+e2koKX0pLHUkZT1bXX07dmFyICRqdD1XUmUoT2JqZWN0LmtleXMsT2JqZWN0KTtjb25zdCB6anQ9JGp0O3ZhciBxanQ9T2JqZWN0LnByb3RvdHlwZSxIanQ9cWp0Lmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGwkZShpKXtpZighT1goaSkpcmV0dXJuIHpqdChpKTt2YXIgcz1bXTtmb3IodmFyIHUgaW4gT2JqZWN0KGkpKUhqdC5jYWxsKGksdSkmJnUhPSJjb25zdHJ1Y3RvciImJnMucHVzaCh1KTtyZXR1cm4gc312YXIgVmp0PU1DKE4zLCJEYXRhVmlldyIpO2NvbnN0IEYyZT1WanQ7dmFyIFVqdD1NQyhOMywiUHJvbWlzZSIpO2NvbnN0IFIyZT1VanQ7dmFyIEdqdD1NQyhOMywiU2V0Iik7Y29uc3QgQ0Q9R2p0O3ZhciBLanQ9TUMoTjMsIldlYWtNYXAiKTtjb25zdCBqMmU9S2p0O3ZhciBoJGU9IltvYmplY3QgTWFwXSIsV2p0PSJbb2JqZWN0IE9iamVjdF0iLGYkZT0iW29iamVjdCBQcm9taXNlXSIsZCRlPSJbb2JqZWN0IFNldF0iLGckZT0iW29iamVjdCBXZWFrTWFwXSIscCRlPSJbb2JqZWN0IERhdGFWaWV3XSIsWWp0PUxDKEYyZSksWGp0PUxDKFdGKSxRanQ9TEMoUjJlKSxKanQ9TEMoQ0QpLFpqdD1MQyhqMmUpLEJDPUFDOyhGMmUmJkJDKG5ldyBGMmUobmV3IEFycmF5QnVmZmVyKDEpKSkhPXAkZXx8V0YmJkJDKG5ldyBXRikhPWgkZXx8UjJlJiZCQyhSMmUucmVzb2x2ZSgpKSE9ZiRlfHxDRCYmQkMobmV3IENEKSE9ZCRlfHxqMmUmJkJDKG5ldyBqMmUpIT1nJGUpJiYoQkM9ZnVuY3Rpb24oaSl7dmFyIHM9QUMoaSksdT1zPT1XanQ/aS5jb25zdHJ1Y3Rvcjp2b2lkIDAsZD11P0xDKHUpOiIiO2lmKGQpc3dpdGNoKGQpe2Nhc2UgWWp0OnJldHVybiBwJGU7Y2FzZSBYanQ6cmV0dXJuIGgkZTtjYXNlIFFqdDpyZXR1cm4gZiRlO2Nhc2UgSmp0OnJldHVybiBkJGU7Y2FzZSBaanQ6cmV0dXJuIGckZX1yZXR1cm4gc30pO2NvbnN0IFNEPUJDO3ZhciBlJHQ9IltvYmplY3QgTWFwXSIsdCR0PSJbb2JqZWN0IFNldF0iLG4kdD1PYmplY3QucHJvdG90eXBlLHIkdD1uJHQuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gaVIoaSl7aWYoaT09bnVsbClyZXR1cm4hMDtpZih3OShpKSYmKEQwKGkpfHx0eXBlb2YgaT09InN0cmluZyJ8fHR5cGVvZiBpLnNwbGljZT09ImZ1bmN0aW9uInx8dkQoaSl8fFBYKGkpfHxtRChpKSkpcmV0dXJuIWkubGVuZ3RoO3ZhciBzPVNEKGkpO2lmKHM9PWUkdHx8cz09dCR0KXJldHVybiFpLnNpemU7aWYoT1goaSkpcmV0dXJuIWwkZShpKS5sZW5ndGg7Zm9yKHZhciB1IGluIGkpaWYociR0LmNhbGwoaSx1KSlyZXR1cm4hMTtyZXR1cm4hMH1jb25zdCBpJHQ9ImdyYXBoaWNzLWRvY3VtZW50IGRvY3VtZW50IjtmdW5jdGlvbiBzJHQoaSxzKXtpLmF0dHIoInJvbGUiLGkkdCkscyE9PSIiJiZpLmF0dHIoImFyaWEtcm9sZWRlc2NyaXB0aW9uIixzKX1mdW5jdGlvbiBhJHQoaSxzLHUsZCl7aWYoaS5pbnNlcnQhPT12b2lkIDApe2lmKHUpe2NvbnN0IHA9YGNoYXJ0LWRlc2MtJHtkfWA7aS5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5IixwKSxpLmluc2VydCgiZGVzYyIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImlkIixwKS50ZXh0KHUpfWlmKHMpe2NvbnN0IHA9YGNoYXJ0LXRpdGxlLSR7ZH1gO2kuYXR0cigiYXJpYS1sYWJlbGxlZGJ5IixwKSxpLmluc2VydCgidGl0bGUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJpZCIscCkudGV4dChzKX19fWNvbnN0IG8kdD1pPT5pLnJlcGxhY2UoL15ccyolJSg/IXspW15cbl0rXG4/L2dtLCIiKS50cmltU3RhcnQoKTsvKiEganMteWFtbCA0LjEuMCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL2pzLXlhbWwgQGxpY2Vuc2UgTUlUICovZnVuY3Rpb24gYiRlKGkpe3JldHVybiB0eXBlb2YgaT4idSJ8fGk9PT1udWxsfWZ1bmN0aW9uIGMkdChpKXtyZXR1cm4gdHlwZW9mIGk9PSJvYmplY3QiJiZpIT09bnVsbH1mdW5jdGlvbiB1JHQoaSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/aTpiJGUoaSk/W106W2ldfWZ1bmN0aW9uIGwkdChpLHMpe3ZhciB1LGQscCx2O2lmKHMpZm9yKHY9T2JqZWN0LmtleXMocyksdT0wLGQ9di5sZW5ndGg7dTxkO3UrPTEpcD12W3VdLGlbcF09c1twXTtyZXR1cm4gaX1mdW5jdGlvbiBoJHQoaSxzKXt2YXIgdT0iIixkO2ZvcihkPTA7ZDxzO2QrPTEpdSs9aTtyZXR1cm4gdX1mdW5jdGlvbiBmJHQoaSl7cmV0dXJuIGk9PT0wJiZOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk9PT0xL2l9dmFyIGQkdD1iJGUsZyR0PWMkdCxwJHQ9dSR0LGIkdD1oJHQsbSR0PWYkdCx2JHQ9bCR0LExwPXtpc05vdGhpbmc6ZCR0LGlzT2JqZWN0OmckdCx0b0FycmF5OnAkdCxyZXBlYXQ6YiR0LGlzTmVnYXRpdmVaZXJvOm0kdCxleHRlbmQ6diR0fTtmdW5jdGlvbiBtJGUoaSxzKXt2YXIgdT0iIixkPWkucmVhc29ufHwiKHVua25vd24gcmVhc29uKSI7cmV0dXJuIGkubWFyaz8oaS5tYXJrLm5hbWUmJih1Kz0naW4gIicraS5tYXJrLm5hbWUrJyIgJyksdSs9IigiKyhpLm1hcmsubGluZSsxKSsiOiIrKGkubWFyay5jb2x1bW4rMSkrIikiLCFzJiZpLm1hcmsuc25pcHBldCYmKHUrPWAKCmAraS5tYXJrLnNuaXBwZXQpLGQrIiAiK3UpOmR9ZnVuY3Rpb24gc1IoaSxzKXtFcnJvci5jYWxsKHRoaXMpLHRoaXMubmFtZT0iWUFNTEV4Y2VwdGlvbiIsdGhpcy5yZWFzb249aSx0aGlzLm1hcms9cyx0aGlzLm1lc3NhZ2U9bSRlKHRoaXMsITEpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFja3x8IiJ9c1IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxzUi5wcm90b3R5cGUuY29uc3RydWN0b3I9c1Isc1IucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLm5hbWUrIjogIittJGUodGhpcyxzKX07dmFyIEE3PXNSO2Z1bmN0aW9uICQyZShpLHMsdSxkLHApe3ZhciB2PSIiLGI9IiIseT1NYXRoLmZsb29yKHAvMiktMTtyZXR1cm4gZC1zPnkmJih2PSIgLi4uICIscz1kLXkrdi5sZW5ndGgpLHUtZD55JiYoYj0iIC4uLiIsdT1kK3ktYi5sZW5ndGgpLHtzdHI6ditpLnNsaWNlKHMsdSkucmVwbGFjZSgvXHQvZywi4oaSIikrYixwb3M6ZC1zK3YubGVuZ3RofX1mdW5jdGlvbiB6MmUoaSxzKXtyZXR1cm4gTHAucmVwZWF0KCIgIixzLWkubGVuZ3RoKStpfWZ1bmN0aW9uIHckdChpLHMpe2lmKHM9T2JqZWN0LmNyZWF0ZShzfHxudWxsKSwhaS5idWZmZXIpcmV0dXJuIG51bGw7cy5tYXhMZW5ndGh8fChzLm1heExlbmd0aD03OSksdHlwZW9mIHMuaW5kZW50IT0ibnVtYmVyIiYmKHMuaW5kZW50PTEpLHR5cGVvZiBzLmxpbmVzQmVmb3JlIT0ibnVtYmVyIiYmKHMubGluZXNCZWZvcmU9MyksdHlwZW9mIHMubGluZXNBZnRlciE9Im51bWJlciImJihzLmxpbmVzQWZ0ZXI9Mik7Zm9yKHZhciB1PS9ccj9cbnxccnxcMC9nLGQ9WzBdLHA9W10sdixiPS0xO3Y9dS5leGVjKGkuYnVmZmVyKTspcC5wdXNoKHYuaW5kZXgpLGQucHVzaCh2LmluZGV4K3ZbMF0ubGVuZ3RoKSxpLnBvc2l0aW9uPD12LmluZGV4JiZiPDAmJihiPWQubGVuZ3RoLTIpO2I8MCYmKGI9ZC5sZW5ndGgtMSk7dmFyIHk9IiIsVCxfLEE9TWF0aC5taW4oaS5saW5lK3MubGluZXNBZnRlcixwLmxlbmd0aCkudG9TdHJpbmcoKS5sZW5ndGgsUD1zLm1heExlbmd0aC0ocy5pbmRlbnQrQSszKTtmb3IoVD0xO1Q8PXMubGluZXNCZWZvcmUmJiEoYi1UPDApO1QrKylfPSQyZShpLmJ1ZmZlcixkW2ItVF0scFtiLVRdLGkucG9zaXRpb24tKGRbYl0tZFtiLVRdKSxQKSx5PUxwLnJlcGVhdCgiICIscy5pbmRlbnQpK3oyZSgoaS5saW5lLVQrMSkudG9TdHJpbmcoKSxBKSsiIHwgIitfLnN0citgCmAreTtmb3IoXz0kMmUoaS5idWZmZXIsZFtiXSxwW2JdLGkucG9zaXRpb24sUCkseSs9THAucmVwZWF0KCIgIixzLmluZGVudCkrejJlKChpLmxpbmUrMSkudG9TdHJpbmcoKSxBKSsiIHwgIitfLnN0citgCmAseSs9THAucmVwZWF0KCItIixzLmluZGVudCtBKzMrXy5wb3MpK2BeCmAsVD0xO1Q8PXMubGluZXNBZnRlciYmIShiK1Q+PXAubGVuZ3RoKTtUKyspXz0kMmUoaS5idWZmZXIsZFtiK1RdLHBbYitUXSxpLnBvc2l0aW9uLShkW2JdLWRbYitUXSksUCkseSs9THAucmVwZWF0KCIgIixzLmluZGVudCkrejJlKChpLmxpbmUrVCsxKS50b1N0cmluZygpLEEpKyIgfCAiK18uc3RyK2AKYDtyZXR1cm4geS5yZXBsYWNlKC9cbiQvLCIiKX12YXIgeSR0PXckdCx4JHQ9WyJraW5kIiwibXVsdGkiLCJyZXNvbHZlIiwiY29uc3RydWN0IiwiaW5zdGFuY2VPZiIsInByZWRpY2F0ZSIsInJlcHJlc2VudCIsInJlcHJlc2VudE5hbWUiLCJkZWZhdWx0U3R5bGUiLCJzdHlsZUFsaWFzZXMiXSxrJHQ9WyJzY2FsYXIiLCJzZXF1ZW5jZSIsIm1hcHBpbmciXTtmdW5jdGlvbiBFJHQoaSl7dmFyIHM9e307cmV0dXJuIGkhPT1udWxsJiZPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe2lbdV0uZm9yRWFjaChmdW5jdGlvbihkKXtzW1N0cmluZyhkKV09dX0pfSksc31mdW5jdGlvbiBUJHQoaSxzKXtpZihzPXN8fHt9LE9iamVjdC5rZXlzKHMpLmZvckVhY2goZnVuY3Rpb24odSl7aWYoeCR0LmluZGV4T2YodSk9PT0tMSl0aHJvdyBuZXcgQTcoJ1Vua25vd24gb3B0aW9uICInK3UrJyIgaXMgbWV0IGluIGRlZmluaXRpb24gb2YgIicraSsnIiBZQU1MIHR5cGUuJyl9KSx0aGlzLm9wdGlvbnM9cyx0aGlzLnRhZz1pLHRoaXMua2luZD1zLmtpbmR8fG51bGwsdGhpcy5yZXNvbHZlPXMucmVzb2x2ZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdGhpcy5jb25zdHJ1Y3Q9cy5jb25zdHJ1Y3R8fGZ1bmN0aW9uKHUpe3JldHVybiB1fSx0aGlzLmluc3RhbmNlT2Y9cy5pbnN0YW5jZU9mfHxudWxsLHRoaXMucHJlZGljYXRlPXMucHJlZGljYXRlfHxudWxsLHRoaXMucmVwcmVzZW50PXMucmVwcmVzZW50fHxudWxsLHRoaXMucmVwcmVzZW50TmFtZT1zLnJlcHJlc2VudE5hbWV8fG51bGwsdGhpcy5kZWZhdWx0U3R5bGU9cy5kZWZhdWx0U3R5bGV8fG51bGwsdGhpcy5tdWx0aT1zLm11bHRpfHwhMSx0aGlzLnN0eWxlQWxpYXNlcz1FJHQocy5zdHlsZUFsaWFzZXN8fG51bGwpLGskdC5pbmRleE9mKHRoaXMua2luZCk9PT0tMSl0aHJvdyBuZXcgQTcoJ1Vua25vd24ga2luZCAiJyt0aGlzLmtpbmQrJyIgaXMgc3BlY2lmaWVkIGZvciAiJytpKyciIFlBTUwgdHlwZS4nKX12YXIgRmc9VCR0O2Z1bmN0aW9uIHYkZShpLHMpe3ZhciB1PVtdO3JldHVybiBpW3NdLmZvckVhY2goZnVuY3Rpb24oZCl7dmFyIHA9dS5sZW5ndGg7dS5mb3JFYWNoKGZ1bmN0aW9uKHYsYil7di50YWc9PT1kLnRhZyYmdi5raW5kPT09ZC5raW5kJiZ2Lm11bHRpPT09ZC5tdWx0aSYmKHA9Yil9KSx1W3BdPWR9KSx1fWZ1bmN0aW9uIEMkdCgpe3ZhciBpPXtzY2FsYXI6e30sc2VxdWVuY2U6e30sbWFwcGluZzp7fSxmYWxsYmFjazp7fSxtdWx0aTp7c2NhbGFyOltdLHNlcXVlbmNlOltdLG1hcHBpbmc6W10sZmFsbGJhY2s6W119fSxzLHU7ZnVuY3Rpb24gZChwKXtwLm11bHRpPyhpLm11bHRpW3Aua2luZF0ucHVzaChwKSxpLm11bHRpLmZhbGxiYWNrLnB1c2gocCkpOmlbcC5raW5kXVtwLnRhZ109aS5mYWxsYmFja1twLnRhZ109cH1mb3Iocz0wLHU9YXJndW1lbnRzLmxlbmd0aDtzPHU7cys9MSlhcmd1bWVudHNbc10uZm9yRWFjaChkKTtyZXR1cm4gaX1mdW5jdGlvbiBxMmUoaSl7cmV0dXJuIHRoaXMuZXh0ZW5kKGkpfXEyZS5wcm90b3R5cGUuZXh0ZW5kPWZ1bmN0aW9uKHMpe3ZhciB1PVtdLGQ9W107aWYocyBpbnN0YW5jZW9mIEZnKWQucHVzaChzKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkocykpZD1kLmNvbmNhdChzKTtlbHNlIGlmKHMmJihBcnJheS5pc0FycmF5KHMuaW1wbGljaXQpfHxBcnJheS5pc0FycmF5KHMuZXhwbGljaXQpKSlzLmltcGxpY2l0JiYodT11LmNvbmNhdChzLmltcGxpY2l0KSkscy5leHBsaWNpdCYmKGQ9ZC5jb25jYXQocy5leHBsaWNpdCkpO2Vsc2UgdGhyb3cgbmV3IEE3KCJTY2hlbWEuZXh0ZW5kIGFyZ3VtZW50IHNob3VsZCBiZSBhIFR5cGUsIFsgVHlwZSBdLCBvciBhIHNjaGVtYSBkZWZpbml0aW9uICh7IGltcGxpY2l0OiBbLi4uXSwgZXhwbGljaXQ6IFsuLi5dIH0pIik7dS5mb3JFYWNoKGZ1bmN0aW9uKHYpe2lmKCEodiBpbnN0YW5jZW9mIEZnKSl0aHJvdyBuZXcgQTcoIlNwZWNpZmllZCBsaXN0IG9mIFlBTUwgdHlwZXMgKG9yIGEgc2luZ2xlIFR5cGUgb2JqZWN0KSBjb250YWlucyBhIG5vbi1UeXBlIG9iamVjdC4iKTtpZih2LmxvYWRLaW5kJiZ2LmxvYWRLaW5kIT09InNjYWxhciIpdGhyb3cgbmV3IEE3KCJUaGVyZSBpcyBhIG5vbi1zY2FsYXIgdHlwZSBpbiB0aGUgaW1wbGljaXQgbGlzdCBvZiBhIHNjaGVtYS4gSW1wbGljaXQgcmVzb2x2aW5nIG9mIHN1Y2ggdHlwZXMgaXMgbm90IHN1cHBvcnRlZC4iKTtpZih2Lm11bHRpKXRocm93IG5ldyBBNygiVGhlcmUgaXMgYSBtdWx0aSB0eXBlIGluIHRoZSBpbXBsaWNpdCBsaXN0IG9mIGEgc2NoZW1hLiBNdWx0aSB0YWdzIGNhbiBvbmx5IGJlIGxpc3RlZCBhcyBleHBsaWNpdC4iKX0pLGQuZm9yRWFjaChmdW5jdGlvbih2KXtpZighKHYgaW5zdGFuY2VvZiBGZykpdGhyb3cgbmV3IEE3KCJTcGVjaWZpZWQgbGlzdCBvZiBZQU1MIHR5cGVzIChvciBhIHNpbmdsZSBUeXBlIG9iamVjdCkgY29udGFpbnMgYSBub24tVHlwZSBvYmplY3QuIil9KTt2YXIgcD1PYmplY3QuY3JlYXRlKHEyZS5wcm90b3R5cGUpO3JldHVybiBwLmltcGxpY2l0PSh0aGlzLmltcGxpY2l0fHxbXSkuY29uY2F0KHUpLHAuZXhwbGljaXQ9KHRoaXMuZXhwbGljaXR8fFtdKS5jb25jYXQoZCkscC5jb21waWxlZEltcGxpY2l0PXYkZShwLCJpbXBsaWNpdCIpLHAuY29tcGlsZWRFeHBsaWNpdD12JGUocCwiZXhwbGljaXQiKSxwLmNvbXBpbGVkVHlwZU1hcD1DJHQocC5jb21waWxlZEltcGxpY2l0LHAuY29tcGlsZWRFeHBsaWNpdCkscH07dmFyIFMkdD1xMmUsXyR0PW5ldyBGZygidGFnOnlhbWwub3JnLDIwMDI6c3RyIix7a2luZDoic2NhbGFyIixjb25zdHJ1Y3Q6ZnVuY3Rpb24oaSl7cmV0dXJuIGkhPT1udWxsP2k6IiJ9fSksQSR0PW5ldyBGZygidGFnOnlhbWwub3JnLDIwMDI6c2VxIix7a2luZDoic2VxdWVuY2UiLGNvbnN0cnVjdDpmdW5jdGlvbihpKXtyZXR1cm4gaSE9PW51bGw/aTpbXX19KSxMJHQ9bmV3IEZnKCJ0YWc6eWFtbC5vcmcsMjAwMjptYXAiLHtraW5kOiJtYXBwaW5nIixjb25zdHJ1Y3Q6ZnVuY3Rpb24oaSl7cmV0dXJuIGkhPT1udWxsP2k6e319fSksTSR0PW5ldyBTJHQoe2V4cGxpY2l0OltfJHQsQSR0LEwkdF19KTtmdW5jdGlvbiBEJHQoaSl7aWYoaT09PW51bGwpcmV0dXJuITA7dmFyIHM9aS5sZW5ndGg7cmV0dXJuIHM9PT0xJiZpPT09In4ifHxzPT09NCYmKGk9PT0ibnVsbCJ8fGk9PT0iTnVsbCJ8fGk9PT0iTlVMTCIpfWZ1bmN0aW9uIEkkdCgpe3JldHVybiBudWxsfWZ1bmN0aW9uIE8kdChpKXtyZXR1cm4gaT09PW51bGx9dmFyIE4kdD1uZXcgRmcoInRhZzp5YW1sLm9yZywyMDAyOm51bGwiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6RCR0LGNvbnN0cnVjdDpJJHQscHJlZGljYXRlOk8kdCxyZXByZXNlbnQ6e2Nhbm9uaWNhbDpmdW5jdGlvbigpe3JldHVybiJ+In0sbG93ZXJjYXNlOmZ1bmN0aW9uKCl7cmV0dXJuIm51bGwifSx1cHBlcmNhc2U6ZnVuY3Rpb24oKXtyZXR1cm4iTlVMTCJ9LGNhbWVsY2FzZTpmdW5jdGlvbigpe3JldHVybiJOdWxsIn0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4iIn19LGRlZmF1bHRTdHlsZToibG93ZXJjYXNlIn0pO2Z1bmN0aW9uIFAkdChpKXtpZihpPT09bnVsbClyZXR1cm4hMTt2YXIgcz1pLmxlbmd0aDtyZXR1cm4gcz09PTQmJihpPT09InRydWUifHxpPT09IlRydWUifHxpPT09IlRSVUUiKXx8cz09PTUmJihpPT09ImZhbHNlInx8aT09PSJGYWxzZSJ8fGk9PT0iRkFMU0UiKX1mdW5jdGlvbiBCJHQoaSl7cmV0dXJuIGk9PT0idHJ1ZSJ8fGk9PT0iVHJ1ZSJ8fGk9PT0iVFJVRSJ9ZnVuY3Rpb24gRiR0KGkpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaSk9PT0iW29iamVjdCBCb29sZWFuXSJ9dmFyIFIkdD1uZXcgRmcoInRhZzp5YW1sLm9yZywyMDAyOmJvb2wiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6UCR0LGNvbnN0cnVjdDpCJHQscHJlZGljYXRlOkYkdCxyZXByZXNlbnQ6e2xvd2VyY2FzZTpmdW5jdGlvbihpKXtyZXR1cm4gaT8idHJ1ZSI6ImZhbHNlIn0sdXBwZXJjYXNlOmZ1bmN0aW9uKGkpe3JldHVybiBpPyJUUlVFIjoiRkFMU0UifSxjYW1lbGNhc2U6ZnVuY3Rpb24oaSl7cmV0dXJuIGk/IlRydWUiOiJGYWxzZSJ9fSxkZWZhdWx0U3R5bGU6Imxvd2VyY2FzZSJ9KTtmdW5jdGlvbiBqJHQoaSl7cmV0dXJuIDQ4PD1pJiZpPD01N3x8NjU8PWkmJmk8PTcwfHw5Nzw9aSYmaTw9MTAyfWZ1bmN0aW9uICQkdChpKXtyZXR1cm4gNDg8PWkmJmk8PTU1fWZ1bmN0aW9uIHokdChpKXtyZXR1cm4gNDg8PWkmJmk8PTU3fWZ1bmN0aW9uIHEkdChpKXtpZihpPT09bnVsbClyZXR1cm4hMTt2YXIgcz1pLmxlbmd0aCx1PTAsZD0hMSxwO2lmKCFzKXJldHVybiExO2lmKHA9aVt1XSwocD09PSItInx8cD09PSIrIikmJihwPWlbKyt1XSkscD09PSIwIil7aWYodSsxPT09cylyZXR1cm4hMDtpZihwPWlbKyt1XSxwPT09ImIiKXtmb3IodSsrO3U8czt1KyspaWYocD1pW3VdLHAhPT0iXyIpe2lmKHAhPT0iMCImJnAhPT0iMSIpcmV0dXJuITE7ZD0hMH1yZXR1cm4gZCYmcCE9PSJfIn1pZihwPT09IngiKXtmb3IodSsrO3U8czt1KyspaWYocD1pW3VdLHAhPT0iXyIpe2lmKCFqJHQoaS5jaGFyQ29kZUF0KHUpKSlyZXR1cm4hMTtkPSEwfXJldHVybiBkJiZwIT09Il8ifWlmKHA9PT0ibyIpe2Zvcih1Kys7dTxzO3UrKylpZihwPWlbdV0scCE9PSJfIil7aWYoISQkdChpLmNoYXJDb2RlQXQodSkpKXJldHVybiExO2Q9ITB9cmV0dXJuIGQmJnAhPT0iXyJ9fWlmKHA9PT0iXyIpcmV0dXJuITE7Zm9yKDt1PHM7dSsrKWlmKHA9aVt1XSxwIT09Il8iKXtpZigheiR0KGkuY2hhckNvZGVBdCh1KSkpcmV0dXJuITE7ZD0hMH1yZXR1cm4hKCFkfHxwPT09Il8iKX1mdW5jdGlvbiBIJHQoaSl7dmFyIHM9aSx1PTEsZDtpZihzLmluZGV4T2YoIl8iKSE9PS0xJiYocz1zLnJlcGxhY2UoL18vZywiIikpLGQ9c1swXSwoZD09PSItInx8ZD09PSIrIikmJihkPT09Ii0iJiYodT0tMSkscz1zLnNsaWNlKDEpLGQ9c1swXSkscz09PSIwIilyZXR1cm4gMDtpZihkPT09IjAiKXtpZihzWzFdPT09ImIiKXJldHVybiB1KnBhcnNlSW50KHMuc2xpY2UoMiksMik7aWYoc1sxXT09PSJ4IilyZXR1cm4gdSpwYXJzZUludChzLnNsaWNlKDIpLDE2KTtpZihzWzFdPT09Im8iKXJldHVybiB1KnBhcnNlSW50KHMuc2xpY2UoMiksOCl9cmV0dXJuIHUqcGFyc2VJbnQocywxMCl9ZnVuY3Rpb24gViR0KGkpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaSk9PT0iW29iamVjdCBOdW1iZXJdIiYmaSUxPT09MCYmIUxwLmlzTmVnYXRpdmVaZXJvKGkpfXZhciBVJHQ9bmV3IEZnKCJ0YWc6eWFtbC5vcmcsMjAwMjppbnQiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6cSR0LGNvbnN0cnVjdDpIJHQscHJlZGljYXRlOlYkdCxyZXByZXNlbnQ6e2JpbmFyeTpmdW5jdGlvbihpKXtyZXR1cm4gaT49MD8iMGIiK2kudG9TdHJpbmcoMik6Ii0wYiIraS50b1N0cmluZygyKS5zbGljZSgxKX0sb2N0YWw6ZnVuY3Rpb24oaSl7cmV0dXJuIGk+PTA/IjBvIitpLnRvU3RyaW5nKDgpOiItMG8iK2kudG9TdHJpbmcoOCkuc2xpY2UoMSl9LGRlY2ltYWw6ZnVuY3Rpb24oaSl7cmV0dXJuIGkudG9TdHJpbmcoMTApfSxoZXhhZGVjaW1hbDpmdW5jdGlvbihpKXtyZXR1cm4gaT49MD8iMHgiK2kudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk6Ii0weCIraS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKS5zbGljZSgxKX19LGRlZmF1bHRTdHlsZToiZGVjaW1hbCIsc3R5bGVBbGlhc2VzOntiaW5hcnk6WzIsImJpbiJdLG9jdGFsOls4LCJvY3QiXSxkZWNpbWFsOlsxMCwiZGVjIl0saGV4YWRlY2ltYWw6WzE2LCJoZXgiXX19KSxHJHQ9bmV3IFJlZ0V4cCgiXig/OlstK10/KD86WzAtOV1bMC05X10qKSg/OlxcLlswLTlfXSopPyg/OltlRV1bLStdP1swLTldKyk/fFxcLlswLTlfXSsoPzpbZUVdWy0rXT9bMC05XSspP3xbLStdP1xcLig/OmluZnxJbmZ8SU5GKXxcXC4oPzpuYW58TmFOfE5BTikpJCIpO2Z1bmN0aW9uIEskdChpKXtyZXR1cm4hKGk9PT1udWxsfHwhRyR0LnRlc3QoaSl8fGlbaS5sZW5ndGgtMV09PT0iXyIpfWZ1bmN0aW9uIFckdChpKXt2YXIgcyx1O3JldHVybiBzPWkucmVwbGFjZSgvXy9nLCIiKS50b0xvd2VyQ2FzZSgpLHU9c1swXT09PSItIj8tMToxLCIrLSIuaW5kZXhPZihzWzBdKT49MCYmKHM9cy5zbGljZSgxKSkscz09PSIuaW5mIj91PT09MT9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk6TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOnM9PT0iLm5hbiI/TmFOOnUqcGFyc2VGbG9hdChzLDEwKX12YXIgWSR0PS9eWy0rXT9bMC05XStlLztmdW5jdGlvbiBYJHQoaSxzKXt2YXIgdTtpZihpc05hTihpKSlzd2l0Y2gocyl7Y2FzZSJsb3dlcmNhc2UiOnJldHVybiIubmFuIjtjYXNlInVwcGVyY2FzZSI6cmV0dXJuIi5OQU4iO2Nhc2UiY2FtZWxjYXNlIjpyZXR1cm4iLk5hTiJ9ZWxzZSBpZihOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk9PT1pKXN3aXRjaChzKXtjYXNlImxvd2VyY2FzZSI6cmV0dXJuIi5pbmYiO2Nhc2UidXBwZXJjYXNlIjpyZXR1cm4iLklORiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiIuSW5mIn1lbHNlIGlmKE51bWJlci5ORUdBVElWRV9JTkZJTklUWT09PWkpc3dpdGNoKHMpe2Nhc2UibG93ZXJjYXNlIjpyZXR1cm4iLS5pbmYiO2Nhc2UidXBwZXJjYXNlIjpyZXR1cm4iLS5JTkYiO2Nhc2UiY2FtZWxjYXNlIjpyZXR1cm4iLS5JbmYifWVsc2UgaWYoTHAuaXNOZWdhdGl2ZVplcm8oaSkpcmV0dXJuIi0wLjAiO3JldHVybiB1PWkudG9TdHJpbmcoMTApLFkkdC50ZXN0KHUpP3UucmVwbGFjZSgiZSIsIi5lIik6dX1mdW5jdGlvbiBRJHQoaSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKT09PSJbb2JqZWN0IE51bWJlcl0iJiYoaSUxIT09MHx8THAuaXNOZWdhdGl2ZVplcm8oaSkpfXZhciBKJHQ9bmV3IEZnKCJ0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpLJHQsY29uc3RydWN0OlckdCxwcmVkaWNhdGU6USR0LHJlcHJlc2VudDpYJHQsZGVmYXVsdFN0eWxlOiJsb3dlcmNhc2UifSksdyRlPU0kdC5leHRlbmQoe2ltcGxpY2l0OltOJHQsUiR0LFUkdCxKJHRdfSksWiR0PXckZSx5JGU9bmV3IFJlZ0V4cCgiXihbMC05XVswLTldWzAtOV1bMC05XSktKFswLTldWzAtOV0pLShbMC05XVswLTldKSQiKSx4JGU9bmV3IFJlZ0V4cCgiXihbMC05XVswLTldWzAtOV1bMC05XSktKFswLTldWzAtOV0/KS0oWzAtOV1bMC05XT8pKD86W1R0XXxbIFxcdF0rKShbMC05XVswLTldPyk6KFswLTldWzAtOV0pOihbMC05XVswLTldKSg/OlxcLihbMC05XSopKT8oPzpbIFxcdF0qKFp8KFstK10pKFswLTldWzAtOV0/KSg/OjooWzAtOV1bMC05XSkpPykpPyQiKTtmdW5jdGlvbiBlenQoaSl7cmV0dXJuIGk9PT1udWxsPyExOnkkZS5leGVjKGkpIT09bnVsbHx8eCRlLmV4ZWMoaSkhPT1udWxsfWZ1bmN0aW9uIHR6dChpKXt2YXIgcyx1LGQscCx2LGIseSxUPTAsXz1udWxsLEEsUCxSO2lmKHM9eSRlLmV4ZWMoaSkscz09PW51bGwmJihzPXgkZS5leGVjKGkpKSxzPT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIkRhdGUgcmVzb2x2ZSBlcnJvciIpO2lmKHU9K3NbMV0sZD0rc1syXS0xLHA9K3NbM10sIXNbNF0pcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHUsZCxwKSk7aWYodj0rc1s0XSxiPStzWzVdLHk9K3NbNl0sc1s3XSl7Zm9yKFQ9c1s3XS5zbGljZSgwLDMpO1QubGVuZ3RoPDM7KVQrPSIwIjtUPStUfXJldHVybiBzWzldJiYoQT0rc1sxMF0sUD0rKHNbMTFdfHwwKSxfPShBKjYwK1ApKjZlNCxzWzldPT09Ii0iJiYoXz0tXykpLFI9bmV3IERhdGUoRGF0ZS5VVEModSxkLHAsdixiLHksVCkpLF8mJlIuc2V0VGltZShSLmdldFRpbWUoKS1fKSxSfWZ1bmN0aW9uIG56dChpKXtyZXR1cm4gaS50b0lTT1N0cmluZygpfXZhciByenQ9bmV3IEZnKCJ0YWc6eWFtbC5vcmcsMjAwMjp0aW1lc3RhbXAiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6ZXp0LGNvbnN0cnVjdDp0enQsaW5zdGFuY2VPZjpEYXRlLHJlcHJlc2VudDpuenR9KTtmdW5jdGlvbiBpenQoaSl7cmV0dXJuIGk9PT0iPDwifHxpPT09bnVsbH12YXIgc3p0PW5ldyBGZygidGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6aXp0fSksSDJlPWBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPQpccmA7ZnVuY3Rpb24gYXp0KGkpe2lmKGk9PT1udWxsKXJldHVybiExO3ZhciBzLHUsZD0wLHA9aS5sZW5ndGgsdj1IMmU7Zm9yKHU9MDt1PHA7dSsrKWlmKHM9di5pbmRleE9mKGkuY2hhckF0KHUpKSwhKHM+NjQpKXtpZihzPDApcmV0dXJuITE7ZCs9Nn1yZXR1cm4gZCU4PT09MH1mdW5jdGlvbiBvenQoaSl7dmFyIHMsdSxkPWkucmVwbGFjZSgvW1xyXG49XS9nLCIiKSxwPWQubGVuZ3RoLHY9SDJlLGI9MCx5PVtdO2ZvcihzPTA7czxwO3MrKylzJTQ9PT0wJiZzJiYoeS5wdXNoKGI+PjE2JjI1NSkseS5wdXNoKGI+PjgmMjU1KSx5LnB1c2goYiYyNTUpKSxiPWI8PDZ8di5pbmRleE9mKGQuY2hhckF0KHMpKTtyZXR1cm4gdT1wJTQqNix1PT09MD8oeS5wdXNoKGI+PjE2JjI1NSkseS5wdXNoKGI+PjgmMjU1KSx5LnB1c2goYiYyNTUpKTp1PT09MTg/KHkucHVzaChiPj4xMCYyNTUpLHkucHVzaChiPj4yJjI1NSkpOnU9PT0xMiYmeS5wdXNoKGI+PjQmMjU1KSxuZXcgVWludDhBcnJheSh5KX1mdW5jdGlvbiBjenQoaSl7dmFyIHM9IiIsdT0wLGQscCx2PWkubGVuZ3RoLGI9SDJlO2ZvcihkPTA7ZDx2O2QrKylkJTM9PT0wJiZkJiYocys9Ylt1Pj4xOCY2M10scys9Ylt1Pj4xMiY2M10scys9Ylt1Pj42JjYzXSxzKz1iW3UmNjNdKSx1PSh1PDw4KStpW2RdO3JldHVybiBwPXYlMyxwPT09MD8ocys9Ylt1Pj4xOCY2M10scys9Ylt1Pj4xMiY2M10scys9Ylt1Pj42JjYzXSxzKz1iW3UmNjNdKTpwPT09Mj8ocys9Ylt1Pj4xMCY2M10scys9Ylt1Pj40JjYzXSxzKz1iW3U8PDImNjNdLHMrPWJbNjRdKTpwPT09MSYmKHMrPWJbdT4+MiY2M10scys9Ylt1PDw0JjYzXSxzKz1iWzY0XSxzKz1iWzY0XSksc31mdW5jdGlvbiB1enQoaSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKT09PSJbb2JqZWN0IFVpbnQ4QXJyYXldIn12YXIgbHp0PW5ldyBGZygidGFnOnlhbWwub3JnLDIwMDI6YmluYXJ5Iix7a2luZDoic2NhbGFyIixyZXNvbHZlOmF6dCxjb25zdHJ1Y3Q6b3p0LHByZWRpY2F0ZTp1enQscmVwcmVzZW50OmN6dH0pLGh6dD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGZ6dD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIGR6dChpKXtpZihpPT09bnVsbClyZXR1cm4hMDt2YXIgcz1bXSx1LGQscCx2LGIseT1pO2Zvcih1PTAsZD15Lmxlbmd0aDt1PGQ7dSs9MSl7aWYocD15W3VdLGI9ITEsZnp0LmNhbGwocCkhPT0iW29iamVjdCBPYmplY3RdIilyZXR1cm4hMTtmb3IodiBpbiBwKWlmKGh6dC5jYWxsKHAsdikpaWYoIWIpYj0hMDtlbHNlIHJldHVybiExO2lmKCFiKXJldHVybiExO2lmKHMuaW5kZXhPZih2KT09PS0xKXMucHVzaCh2KTtlbHNlIHJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGd6dChpKXtyZXR1cm4gaSE9PW51bGw/aTpbXX12YXIgcHp0PW5ldyBGZygidGFnOnlhbWwub3JnLDIwMDI6b21hcCIse2tpbmQ6InNlcXVlbmNlIixyZXNvbHZlOmR6dCxjb25zdHJ1Y3Q6Z3p0fSksYnp0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gbXp0KGkpe2lmKGk9PT1udWxsKXJldHVybiEwO3ZhciBzLHUsZCxwLHYsYj1pO2Zvcih2PW5ldyBBcnJheShiLmxlbmd0aCkscz0wLHU9Yi5sZW5ndGg7czx1O3MrPTEpe2lmKGQ9YltzXSxienQuY2FsbChkKSE9PSJbb2JqZWN0IE9iamVjdF0ifHwocD1PYmplY3Qua2V5cyhkKSxwLmxlbmd0aCE9PTEpKXJldHVybiExO3Zbc109W3BbMF0sZFtwWzBdXV19cmV0dXJuITB9ZnVuY3Rpb24gdnp0KGkpe2lmKGk9PT1udWxsKXJldHVybltdO3ZhciBzLHUsZCxwLHYsYj1pO2Zvcih2PW5ldyBBcnJheShiLmxlbmd0aCkscz0wLHU9Yi5sZW5ndGg7czx1O3MrPTEpZD1iW3NdLHA9T2JqZWN0LmtleXMoZCksdltzXT1bcFswXSxkW3BbMF1dXTtyZXR1cm4gdn12YXIgd3p0PW5ldyBGZygidGFnOnlhbWwub3JnLDIwMDI6cGFpcnMiLHtraW5kOiJzZXF1ZW5jZSIscmVzb2x2ZTptenQsY29uc3RydWN0OnZ6dH0pLHl6dD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHh6dChpKXtpZihpPT09bnVsbClyZXR1cm4hMDt2YXIgcyx1PWk7Zm9yKHMgaW4gdSlpZih5enQuY2FsbCh1LHMpJiZ1W3NdIT09bnVsbClyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBrenQoaSl7cmV0dXJuIGkhPT1udWxsP2k6e319dmFyIEV6dD1uZXcgRmcoInRhZzp5YW1sLm9yZywyMDAyOnNldCIse2tpbmQ6Im1hcHBpbmciLHJlc29sdmU6eHp0LGNvbnN0cnVjdDprenR9KSxUenQ9WiR0LmV4dGVuZCh7aW1wbGljaXQ6W3J6dCxzenRdLGV4cGxpY2l0OltsenQscHp0LHd6dCxFenRdfSkseDk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxKWD0xLGskZT0yLEUkZT0zLFpYPTQsVjJlPTEsQ3p0PTIsVCRlPTMsU3p0PS9bXHgwMC1ceDA4XHgwQlx4MENceDBFLVx4MUZceDdGLVx4ODRceDg2LVx4OUZcdUZGRkVcdUZGRkZdfFtcdUQ4MDAtXHVEQkZGXSg/IVtcdURDMDAtXHVERkZGXSl8KD86W15cdUQ4MDAtXHVEQkZGXXxeKVtcdURDMDAtXHVERkZGXS8sX3p0PS9bXHg4NVx1MjAyOFx1MjAyOV0vLEF6dD0vWyxcW1xdXHtcfV0vLEMkZT0vXig/OiF8ISF8IVthLXpcLV0rISkkL2ksUyRlPS9eKD86IXxbXixcW1xdXHtcfV0pKD86JVswLTlhLWZdezJ9fFswLTlhLXpcLSM7XC9cPzpAJj1cK1wkLF9cLiF+XConXChcKVxbXF1dKSokL2k7ZnVuY3Rpb24gXyRlKGkpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaSl9ZnVuY3Rpb24gVjQoaSl7cmV0dXJuIGk9PT0xMHx8aT09PTEzfWZ1bmN0aW9uIEZDKGkpe3JldHVybiBpPT09OXx8aT09PTMyfWZ1bmN0aW9uIEYyKGkpe3JldHVybiBpPT09OXx8aT09PTMyfHxpPT09MTB8fGk9PT0xM31mdW5jdGlvbiBfRChpKXtyZXR1cm4gaT09PTQ0fHxpPT09OTF8fGk9PT05M3x8aT09PTEyM3x8aT09PTEyNX1mdW5jdGlvbiBMenQoaSl7dmFyIHM7cmV0dXJuIDQ4PD1pJiZpPD01Nz9pLTQ4OihzPWl8MzIsOTc8PXMmJnM8PTEwMj9zLTk3KzEwOi0xKX1mdW5jdGlvbiBNenQoaSl7cmV0dXJuIGk9PT0xMjA/MjppPT09MTE3PzQ6aT09PTg1Pzg6MH1mdW5jdGlvbiBEenQoaSl7cmV0dXJuIDQ4PD1pJiZpPD01Nz9pLTQ4Oi0xfWZ1bmN0aW9uIEEkZShpKXtyZXR1cm4gaT09PTQ4PyJcMCI6aT09PTk3PyJceDA3IjppPT09OTg/IlxiIjppPT09MTE2fHxpPT09OT8iCSI6aT09PTExMD9gCmA6aT09PTExOD8iXHYiOmk9PT0xMDI/IlxmIjppPT09MTE0PyJcciI6aT09PTEwMT8iXHgxQiI6aT09PTMyPyIgIjppPT09MzQ/JyInOmk9PT00Nz8iLyI6aT09PTkyPyJcXCI6aT09PTc4PyLChSI6aT09PTk1PyLCoCI6aT09PTc2PyJcdTIwMjgiOmk9PT04MD8iXHUyMDI5IjoiIn1mdW5jdGlvbiBJenQoaSl7cmV0dXJuIGk8PTY1NTM1P1N0cmluZy5mcm9tQ2hhckNvZGUoaSk6U3RyaW5nLmZyb21DaGFyQ29kZSgoaS02NTUzNj4+MTApKzU1Mjk2LChpLTY1NTM2JjEwMjMpKzU2MzIwKX1mb3IodmFyIEwkZT1uZXcgQXJyYXkoMjU2KSxNJGU9bmV3IEFycmF5KDI1NiksQUQ9MDtBRDwyNTY7QUQrKylMJGVbQURdPUEkZShBRCk/MTowLE0kZVtBRF09QSRlKEFEKTtmdW5jdGlvbiBPenQoaSxzKXt0aGlzLmlucHV0PWksdGhpcy5maWxlbmFtZT1zLmZpbGVuYW1lfHxudWxsLHRoaXMuc2NoZW1hPXMuc2NoZW1hfHxUenQsdGhpcy5vbldhcm5pbmc9cy5vbldhcm5pbmd8fG51bGwsdGhpcy5sZWdhY3k9cy5sZWdhY3l8fCExLHRoaXMuanNvbj1zLmpzb258fCExLHRoaXMubGlzdGVuZXI9cy5saXN0ZW5lcnx8bnVsbCx0aGlzLmltcGxpY2l0VHlwZXM9dGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdCx0aGlzLnR5cGVNYXA9dGhpcy5zY2hlbWEuY29tcGlsZWRUeXBlTWFwLHRoaXMubGVuZ3RoPWkubGVuZ3RoLHRoaXMucG9zaXRpb249MCx0aGlzLmxpbmU9MCx0aGlzLmxpbmVTdGFydD0wLHRoaXMubGluZUluZGVudD0wLHRoaXMuZmlyc3RUYWJJbkxpbmU9LTEsdGhpcy5kb2N1bWVudHM9W119ZnVuY3Rpb24gRCRlKGkscyl7dmFyIHU9e25hbWU6aS5maWxlbmFtZSxidWZmZXI6aS5pbnB1dC5zbGljZSgwLC0xKSxwb3NpdGlvbjppLnBvc2l0aW9uLGxpbmU6aS5saW5lLGNvbHVtbjppLnBvc2l0aW9uLWkubGluZVN0YXJ0fTtyZXR1cm4gdS5zbmlwcGV0PXkkdCh1KSxuZXcgQTcocyx1KX1mdW5jdGlvbiBvYShpLHMpe3Rocm93IEQkZShpLHMpfWZ1bmN0aW9uIGVRKGkscyl7aS5vbldhcm5pbmcmJmkub25XYXJuaW5nLmNhbGwobnVsbCxEJGUoaSxzKSl9dmFyIEkkZT17WUFNTDpmdW5jdGlvbihzLHUsZCl7dmFyIHAsdixiO3MudmVyc2lvbiE9PW51bGwmJm9hKHMsImR1cGxpY2F0aW9uIG9mICVZQU1MIGRpcmVjdGl2ZSIpLGQubGVuZ3RoIT09MSYmb2EocywiWUFNTCBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IG9uZSBhcmd1bWVudCIpLHA9L14oWzAtOV0rKVwuKFswLTldKykkLy5leGVjKGRbMF0pLHA9PT1udWxsJiZvYShzLCJpbGwtZm9ybWVkIGFyZ3VtZW50IG9mIHRoZSBZQU1MIGRpcmVjdGl2ZSIpLHY9cGFyc2VJbnQocFsxXSwxMCksYj1wYXJzZUludChwWzJdLDEwKSx2IT09MSYmb2EocywidW5hY2NlcHRhYmxlIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQiKSxzLnZlcnNpb249ZFswXSxzLmNoZWNrTGluZUJyZWFrcz1iPDIsYiE9PTEmJmIhPT0yJiZlUShzLCJ1bnN1cHBvcnRlZCBZQU1MIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50Iil9LFRBRzpmdW5jdGlvbihzLHUsZCl7dmFyIHAsdjtkLmxlbmd0aCE9PTImJm9hKHMsIlRBRyBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IHR3byBhcmd1bWVudHMiKSxwPWRbMF0sdj1kWzFdLEMkZS50ZXN0KHApfHxvYShzLCJpbGwtZm9ybWVkIHRhZyBoYW5kbGUgKGZpcnN0IGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZSIpLHg5LmNhbGwocy50YWdNYXAscCkmJm9hKHMsJ3RoZXJlIGlzIGEgcHJldmlvdXNseSBkZWNsYXJlZCBzdWZmaXggZm9yICInK3ArJyIgdGFnIGhhbmRsZScpLFMkZS50ZXN0KHYpfHxvYShzLCJpbGwtZm9ybWVkIHRhZyBwcmVmaXggKHNlY29uZCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmUiKTt0cnl7dj1kZWNvZGVVUklDb21wb25lbnQodil9Y2F0Y2h7b2EocywidGFnIHByZWZpeCBpcyBtYWxmb3JtZWQ6ICIrdil9cy50YWdNYXBbcF09dn19O2Z1bmN0aW9uIGs5KGkscyx1LGQpe3ZhciBwLHYsYix5O2lmKHM8dSl7aWYoeT1pLmlucHV0LnNsaWNlKHMsdSksZClmb3IocD0wLHY9eS5sZW5ndGg7cDx2O3ArPTEpYj15LmNoYXJDb2RlQXQocCksYj09PTl8fDMyPD1iJiZiPD0xMTE0MTExfHxvYShpLCJleHBlY3RlZCB2YWxpZCBKU09OIGNoYXJhY3RlciIpO2Vsc2UgU3p0LnRlc3QoeSkmJm9hKGksInRoZSBzdHJlYW0gY29udGFpbnMgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIik7aS5yZXN1bHQrPXl9fWZ1bmN0aW9uIE8kZShpLHMsdSxkKXt2YXIgcCx2LGIseTtmb3IoTHAuaXNPYmplY3QodSl8fG9hKGksImNhbm5vdCBtZXJnZSBtYXBwaW5nczsgdGhlIHByb3ZpZGVkIHNvdXJjZSBvYmplY3QgaXMgdW5hY2NlcHRhYmxlIikscD1PYmplY3Qua2V5cyh1KSxiPTAseT1wLmxlbmd0aDtiPHk7Yis9MSl2PXBbYl0seDkuY2FsbChzLHYpfHwoc1t2XT11W3ZdLGRbdl09ITApfWZ1bmN0aW9uIExEKGkscyx1LGQscCx2LGIseSxUKXt2YXIgXyxBO2lmKEFycmF5LmlzQXJyYXkocCkpZm9yKHA9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocCksXz0wLEE9cC5sZW5ndGg7XzxBO18rPTEpQXJyYXkuaXNBcnJheShwW19dKSYmb2EoaSwibmVzdGVkIGFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBpbnNpZGUga2V5cyIpLHR5cGVvZiBwPT0ib2JqZWN0IiYmXyRlKHBbX10pPT09IltvYmplY3QgT2JqZWN0XSImJihwW19dPSJbb2JqZWN0IE9iamVjdF0iKTtpZih0eXBlb2YgcD09Im9iamVjdCImJl8kZShwKT09PSJbb2JqZWN0IE9iamVjdF0iJiYocD0iW29iamVjdCBPYmplY3RdIikscD1TdHJpbmcocCkscz09PW51bGwmJihzPXt9KSxkPT09InRhZzp5YW1sLm9yZywyMDAyOm1lcmdlIilpZihBcnJheS5pc0FycmF5KHYpKWZvcihfPTAsQT12Lmxlbmd0aDtfPEE7Xys9MSlPJGUoaSxzLHZbX10sdSk7ZWxzZSBPJGUoaSxzLHYsdSk7ZWxzZSFpLmpzb24mJiF4OS5jYWxsKHUscCkmJng5LmNhbGwocyxwKSYmKGkubGluZT1ifHxpLmxpbmUsaS5saW5lU3RhcnQ9eXx8aS5saW5lU3RhcnQsaS5wb3NpdGlvbj1UfHxpLnBvc2l0aW9uLG9hKGksImR1cGxpY2F0ZWQgbWFwcGluZyBrZXkiKSkscD09PSJfX3Byb3RvX18iP09iamVjdC5kZWZpbmVQcm9wZXJ0eShzLHAse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZ9KTpzW3BdPXYsZGVsZXRlIHVbcF07cmV0dXJuIHN9ZnVuY3Rpb24gVTJlKGkpe3ZhciBzO3M9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLHM9PT0xMD9pLnBvc2l0aW9uKys6cz09PTEzPyhpLnBvc2l0aW9uKyssaS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pPT09MTAmJmkucG9zaXRpb24rKyk6b2EoaSwiYSBsaW5lIGJyZWFrIGlzIGV4cGVjdGVkIiksaS5saW5lKz0xLGkubGluZVN0YXJ0PWkucG9zaXRpb24saS5maXJzdFRhYkluTGluZT0tMX1mdW5jdGlvbiBPMChpLHMsdSl7Zm9yKHZhciBkPTAscD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbik7cCE9PTA7KXtmb3IoO0ZDKHApOylwPT09OSYmaS5maXJzdFRhYkluTGluZT09PS0xJiYoaS5maXJzdFRhYkluTGluZT1pLnBvc2l0aW9uKSxwPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO2lmKHMmJnA9PT0zNSlkbyBwPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO3doaWxlKHAhPT0xMCYmcCE9PTEzJiZwIT09MCk7aWYoVjQocCkpZm9yKFUyZShpKSxwPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSxkKyssaS5saW5lSW5kZW50PTA7cD09PTMyOylpLmxpbmVJbmRlbnQrKyxwPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO2Vsc2UgYnJlYWt9cmV0dXJuIHUhPT0tMSYmZCE9PTAmJmkubGluZUluZGVudDx1JiZlUShpLCJkZWZpY2llbnQgaW5kZW50YXRpb24iKSxkfWZ1bmN0aW9uIHRRKGkpe3ZhciBzPWkucG9zaXRpb24sdTtyZXR1cm4gdT1pLmlucHV0LmNoYXJDb2RlQXQocyksISEoKHU9PT00NXx8dT09PTQ2KSYmdT09PWkuaW5wdXQuY2hhckNvZGVBdChzKzEpJiZ1PT09aS5pbnB1dC5jaGFyQ29kZUF0KHMrMikmJihzKz0zLHU9aS5pbnB1dC5jaGFyQ29kZUF0KHMpLHU9PT0wfHxGMih1KSkpfWZ1bmN0aW9uIEcyZShpLHMpe3M9PT0xP2kucmVzdWx0Kz0iICI6cz4xJiYoaS5yZXN1bHQrPUxwLnJlcGVhdChgCmAscy0xKSl9ZnVuY3Rpb24gTnp0KGkscyx1KXt2YXIgZCxwLHYsYix5LFQsXyxBLFA9aS5raW5kLFI9aS5yZXN1bHQsRjtpZihGPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSxGMihGKXx8X0QoRil8fEY9PT0zNXx8Rj09PTM4fHxGPT09NDJ8fEY9PT0zM3x8Rj09PTEyNHx8Rj09PTYyfHxGPT09Mzl8fEY9PT0zNHx8Rj09PTM3fHxGPT09NjR8fEY9PT05Nnx8KEY9PT02M3x8Rj09PTQ1KSYmKHA9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24rMSksRjIocCl8fHUmJl9EKHApKSlyZXR1cm4hMTtmb3IoaS5raW5kPSJzY2FsYXIiLGkucmVzdWx0PSIiLHY9Yj1pLnBvc2l0aW9uLHk9ITE7RiE9PTA7KXtpZihGPT09NTgpe2lmKHA9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24rMSksRjIocCl8fHUmJl9EKHApKWJyZWFrfWVsc2UgaWYoRj09PTM1KXtpZihkPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uLTEpLEYyKGQpKWJyZWFrfWVsc2V7aWYoaS5wb3NpdGlvbj09PWkubGluZVN0YXJ0JiZ0UShpKXx8dSYmX0QoRikpYnJlYWs7aWYoVjQoRikpaWYoVD1pLmxpbmUsXz1pLmxpbmVTdGFydCxBPWkubGluZUluZGVudCxPMChpLCExLC0xKSxpLmxpbmVJbmRlbnQ+PXMpe3k9ITAsRj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbik7Y29udGludWV9ZWxzZXtpLnBvc2l0aW9uPWIsaS5saW5lPVQsaS5saW5lU3RhcnQ9XyxpLmxpbmVJbmRlbnQ9QTticmVha319eSYmKGs5KGksdixiLCExKSxHMmUoaSxpLmxpbmUtVCksdj1iPWkucG9zaXRpb24seT0hMSksRkMoRil8fChiPWkucG9zaXRpb24rMSksRj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKX1yZXR1cm4gazkoaSx2LGIsITEpLGkucmVzdWx0PyEwOihpLmtpbmQ9UCxpLnJlc3VsdD1SLCExKX1mdW5jdGlvbiBQenQoaSxzKXt2YXIgdSxkLHA7aWYodT1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksdSE9PTM5KXJldHVybiExO2ZvcihpLmtpbmQ9InNjYWxhciIsaS5yZXN1bHQ9IiIsaS5wb3NpdGlvbisrLGQ9cD1pLnBvc2l0aW9uOyh1PWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSkhPT0wOylpZih1PT09MzkpaWYoazkoaSxkLGkucG9zaXRpb24sITApLHU9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksdT09PTM5KWQ9aS5wb3NpdGlvbixpLnBvc2l0aW9uKysscD1pLnBvc2l0aW9uO2Vsc2UgcmV0dXJuITA7ZWxzZSBWNCh1KT8oazkoaSxkLHAsITApLEcyZShpLE8wKGksITEscykpLGQ9cD1pLnBvc2l0aW9uKTppLnBvc2l0aW9uPT09aS5saW5lU3RhcnQmJnRRKGkpP29hKGksInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhciIpOihpLnBvc2l0aW9uKysscD1pLnBvc2l0aW9uKTtvYShpLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyIil9ZnVuY3Rpb24gQnp0KGkscyl7dmFyIHUsZCxwLHYsYix5O2lmKHk9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLHkhPT0zNClyZXR1cm4hMTtmb3IoaS5raW5kPSJzY2FsYXIiLGkucmVzdWx0PSIiLGkucG9zaXRpb24rKyx1PWQ9aS5wb3NpdGlvbjsoeT1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbikpIT09MDspe2lmKHk9PT0zNClyZXR1cm4gazkoaSx1LGkucG9zaXRpb24sITApLGkucG9zaXRpb24rKywhMDtpZih5PT09OTIpe2lmKGs5KGksdSxpLnBvc2l0aW9uLCEwKSx5PWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLFY0KHkpKU8wKGksITEscyk7ZWxzZSBpZih5PDI1NiYmTCRlW3ldKWkucmVzdWx0Kz1NJGVbeV0saS5wb3NpdGlvbisrO2Vsc2UgaWYoKGI9TXp0KHkpKT4wKXtmb3IocD1iLHY9MDtwPjA7cC0tKXk9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksKGI9THp0KHkpKT49MD92PSh2PDw0KStiOm9hKGksImV4cGVjdGVkIGhleGFkZWNpbWFsIGNoYXJhY3RlciIpO2kucmVzdWx0Kz1JenQodiksaS5wb3NpdGlvbisrfWVsc2Ugb2EoaSwidW5rbm93biBlc2NhcGUgc2VxdWVuY2UiKTt1PWQ9aS5wb3NpdGlvbn1lbHNlIFY0KHkpPyhrOShpLHUsZCwhMCksRzJlKGksTzAoaSwhMSxzKSksdT1kPWkucG9zaXRpb24pOmkucG9zaXRpb249PT1pLmxpbmVTdGFydCYmdFEoaSk/b2EoaSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyIik6KGkucG9zaXRpb24rKyxkPWkucG9zaXRpb24pfW9hKGksInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXIiKX1mdW5jdGlvbiBGenQoaSxzKXt2YXIgdT0hMCxkLHAsdixiPWkudGFnLHksVD1pLmFuY2hvcixfLEEsUCxSLEYsaj1PYmplY3QuY3JlYXRlKG51bGwpLEssZWUsaWUsb2U7aWYob2U9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLG9lPT09OTEpQT05MyxGPSExLHk9W107ZWxzZSBpZihvZT09PTEyMylBPTEyNSxGPSEwLHk9e307ZWxzZSByZXR1cm4hMTtmb3IoaS5hbmNob3IhPT1udWxsJiYoaS5hbmNob3JNYXBbaS5hbmNob3JdPXkpLG9lPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO29lIT09MDspe2lmKE8wKGksITAscyksb2U9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLG9lPT09QSlyZXR1cm4gaS5wb3NpdGlvbisrLGkudGFnPWIsaS5hbmNob3I9VCxpLmtpbmQ9Rj8ibWFwcGluZyI6InNlcXVlbmNlIixpLnJlc3VsdD15LCEwO3U/b2U9PT00NCYmb2EoaSwiZXhwZWN0ZWQgdGhlIG5vZGUgY29udGVudCwgYnV0IGZvdW5kICcsJyIpOm9hKGksIm1pc3NlZCBjb21tYSBiZXR3ZWVuIGZsb3cgY29sbGVjdGlvbiBlbnRyaWVzIiksZWU9Sz1pZT1udWxsLFA9Uj0hMSxvZT09PTYzJiYoXz1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbisxKSxGMihfKSYmKFA9Uj0hMCxpLnBvc2l0aW9uKyssTzAoaSwhMCxzKSkpLGQ9aS5saW5lLHA9aS5saW5lU3RhcnQsdj1pLnBvc2l0aW9uLE1EKGkscyxKWCwhMSwhMCksZWU9aS50YWcsSz1pLnJlc3VsdCxPMChpLCEwLHMpLG9lPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSwoUnx8aS5saW5lPT09ZCkmJm9lPT09NTgmJihQPSEwLG9lPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLE8wKGksITAscyksTUQoaSxzLEpYLCExLCEwKSxpZT1pLnJlc3VsdCksRj9MRChpLHksaixlZSxLLGllLGQscCx2KTpQP3kucHVzaChMRChpLG51bGwsaixlZSxLLGllLGQscCx2KSk6eS5wdXNoKEspLE8wKGksITAscyksb2U9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLG9lPT09NDQ/KHU9ITAsb2U9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbikpOnU9ITF9b2EoaSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBmbG93IGNvbGxlY3Rpb24iKX1mdW5jdGlvbiBSenQoaSxzKXt2YXIgdSxkLHA9VjJlLHY9ITEsYj0hMSx5PXMsVD0wLF89ITEsQSxQO2lmKFA9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLFA9PT0xMjQpZD0hMTtlbHNlIGlmKFA9PT02MilkPSEwO2Vsc2UgcmV0dXJuITE7Zm9yKGkua2luZD0ic2NhbGFyIixpLnJlc3VsdD0iIjtQIT09MDspaWYoUD1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSxQPT09NDN8fFA9PT00NSlWMmU9PT1wP3A9UD09PTQzP1QkZTpDenQ6b2EoaSwicmVwZWF0IG9mIGEgY2hvbXBpbmcgbW9kZSBpZGVudGlmaWVyIik7ZWxzZSBpZigoQT1EenQoUCkpPj0wKUE9PT0wP29hKGksImJhZCBleHBsaWNpdCBpbmRlbnRhdGlvbiB3aWR0aCBvZiBhIGJsb2NrIHNjYWxhcjsgaXQgY2Fubm90IGJlIGxlc3MgdGhhbiBvbmUiKTpiP29hKGksInJlcGVhdCBvZiBhbiBpbmRlbnRhdGlvbiB3aWR0aCBpZGVudGlmaWVyIik6KHk9cytBLTEsYj0hMCk7ZWxzZSBicmVhaztpZihGQyhQKSl7ZG8gUD1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTt3aGlsZShGQyhQKSk7aWYoUD09PTM1KWRvIFA9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7d2hpbGUoIVY0KFApJiZQIT09MCl9Zm9yKDtQIT09MDspe2ZvcihVMmUoaSksaS5saW5lSW5kZW50PTAsUD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbik7KCFifHxpLmxpbmVJbmRlbnQ8eSkmJlA9PT0zMjspaS5saW5lSW5kZW50KyssUD1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTtpZighYiYmaS5saW5lSW5kZW50PnkmJih5PWkubGluZUluZGVudCksVjQoUCkpe1QrKztjb250aW51ZX1pZihpLmxpbmVJbmRlbnQ8eSl7cD09PVQkZT9pLnJlc3VsdCs9THAucmVwZWF0KGAKYCx2PzErVDpUKTpwPT09VjJlJiZ2JiYoaS5yZXN1bHQrPWAKYCk7YnJlYWt9Zm9yKGQ/RkMoUCk/KF89ITAsaS5yZXN1bHQrPUxwLnJlcGVhdChgCmAsdj8xK1Q6VCkpOl8/KF89ITEsaS5yZXN1bHQrPUxwLnJlcGVhdChgCmAsVCsxKSk6VD09PTA/diYmKGkucmVzdWx0Kz0iICIpOmkucmVzdWx0Kz1McC5yZXBlYXQoYApgLFQpOmkucmVzdWx0Kz1McC5yZXBlYXQoYApgLHY/MStUOlQpLHY9ITAsYj0hMCxUPTAsdT1pLnBvc2l0aW9uOyFWNChQKSYmUCE9PTA7KVA9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7azkoaSx1LGkucG9zaXRpb24sITEpfXJldHVybiEwfWZ1bmN0aW9uIE4kZShpLHMpe3ZhciB1LGQ9aS50YWcscD1pLmFuY2hvcix2PVtdLGIseT0hMSxUO2lmKGkuZmlyc3RUYWJJbkxpbmUhPT0tMSlyZXR1cm4hMTtmb3IoaS5hbmNob3IhPT1udWxsJiYoaS5hbmNob3JNYXBbaS5hbmNob3JdPXYpLFQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pO1QhPT0wJiYoaS5maXJzdFRhYkluTGluZSE9PS0xJiYoaS5wb3NpdGlvbj1pLmZpcnN0VGFiSW5MaW5lLG9hKGksInRhYiBjaGFyYWN0ZXJzIG11c3Qgbm90IGJlIHVzZWQgaW4gaW5kZW50YXRpb24iKSksIShUIT09NDV8fChiPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKzEpLCFGMihiKSkpKTspe2lmKHk9ITAsaS5wb3NpdGlvbisrLE8wKGksITAsLTEpJiZpLmxpbmVJbmRlbnQ8PXMpe3YucHVzaChudWxsKSxUPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTtjb250aW51ZX1pZih1PWkubGluZSxNRChpLHMsRSRlLCExLCEwKSx2LnB1c2goaS5yZXN1bHQpLE8wKGksITAsLTEpLFQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLChpLmxpbmU9PT11fHxpLmxpbmVJbmRlbnQ+cykmJlQhPT0wKW9hKGksImJhZCBpbmRlbnRhdGlvbiBvZiBhIHNlcXVlbmNlIGVudHJ5Iik7ZWxzZSBpZihpLmxpbmVJbmRlbnQ8cylicmVha31yZXR1cm4geT8oaS50YWc9ZCxpLmFuY2hvcj1wLGkua2luZD0ic2VxdWVuY2UiLGkucmVzdWx0PXYsITApOiExfWZ1bmN0aW9uIGp6dChpLHMsdSl7dmFyIGQscCx2LGIseSxULF89aS50YWcsQT1pLmFuY2hvcixQPXt9LFI9T2JqZWN0LmNyZWF0ZShudWxsKSxGPW51bGwsaj1udWxsLEs9bnVsbCxlZT0hMSxpZT0hMSxvZTtpZihpLmZpcnN0VGFiSW5MaW5lIT09LTEpcmV0dXJuITE7Zm9yKGkuYW5jaG9yIT09bnVsbCYmKGkuYW5jaG9yTWFwW2kuYW5jaG9yXT1QKSxvZT1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbik7b2UhPT0wOyl7aWYoIWVlJiZpLmZpcnN0VGFiSW5MaW5lIT09LTEmJihpLnBvc2l0aW9uPWkuZmlyc3RUYWJJbkxpbmUsb2EoaSwidGFiIGNoYXJhY3RlcnMgbXVzdCBub3QgYmUgdXNlZCBpbiBpbmRlbnRhdGlvbiIpKSxkPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKzEpLHY9aS5saW5lLChvZT09PTYzfHxvZT09PTU4KSYmRjIoZCkpb2U9PT02Mz8oZWUmJihMRChpLFAsUixGLGosbnVsbCxiLHksVCksRj1qPUs9bnVsbCksaWU9ITAsZWU9ITAscD0hMCk6ZWU/KGVlPSExLHA9ITApOm9hKGksImluY29tcGxldGUgZXhwbGljaXQgbWFwcGluZyBwYWlyOyBhIGtleSBub2RlIGlzIG1pc3NlZDsgb3IgZm9sbG93ZWQgYnkgYSBub24tdGFidWxhdGVkIGVtcHR5IGxpbmUiKSxpLnBvc2l0aW9uKz0xLG9lPWQ7ZWxzZXtpZihiPWkubGluZSx5PWkubGluZVN0YXJ0LFQ9aS5wb3NpdGlvbiwhTUQoaSx1LGskZSwhMSwhMCkpYnJlYWs7aWYoaS5saW5lPT09dil7Zm9yKG9lPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTtGQyhvZSk7KW9lPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO2lmKG9lPT09NTgpb2U9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksRjIob2UpfHxvYShpLCJhIHdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIGV4cGVjdGVkIGFmdGVyIHRoZSBrZXktdmFsdWUgc2VwYXJhdG9yIHdpdGhpbiBhIGJsb2NrIG1hcHBpbmciKSxlZSYmKExEKGksUCxSLEYsaixudWxsLGIseSxUKSxGPWo9Sz1udWxsKSxpZT0hMCxlZT0hMSxwPSExLEY9aS50YWcsaj1pLnJlc3VsdDtlbHNlIGlmKGllKW9hKGksImNhbiBub3QgcmVhZCBhbiBpbXBsaWNpdCBtYXBwaW5nIHBhaXI7IGEgY29sb24gaXMgbWlzc2VkIik7ZWxzZSByZXR1cm4gaS50YWc9XyxpLmFuY2hvcj1BLCEwfWVsc2UgaWYoaWUpb2EoaSwiY2FuIG5vdCByZWFkIGEgYmxvY2sgbWFwcGluZyBlbnRyeTsgYSBtdWx0aWxpbmUga2V5IG1heSBub3QgYmUgYW4gaW1wbGljaXQga2V5Iik7ZWxzZSByZXR1cm4gaS50YWc9XyxpLmFuY2hvcj1BLCEwfWlmKChpLmxpbmU9PT12fHxpLmxpbmVJbmRlbnQ+cykmJihlZSYmKGI9aS5saW5lLHk9aS5saW5lU3RhcnQsVD1pLnBvc2l0aW9uKSxNRChpLHMsWlgsITAscCkmJihlZT9qPWkucmVzdWx0Oks9aS5yZXN1bHQpLGVlfHwoTEQoaSxQLFIsRixqLEssYix5LFQpLEY9aj1LPW51bGwpLE8wKGksITAsLTEpLG9lPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSksKGkubGluZT09PXZ8fGkubGluZUluZGVudD5zKSYmb2UhPT0wKW9hKGksImJhZCBpbmRlbnRhdGlvbiBvZiBhIG1hcHBpbmcgZW50cnkiKTtlbHNlIGlmKGkubGluZUluZGVudDxzKWJyZWFrfXJldHVybiBlZSYmTEQoaSxQLFIsRixqLG51bGwsYix5LFQpLGllJiYoaS50YWc9XyxpLmFuY2hvcj1BLGkua2luZD0ibWFwcGluZyIsaS5yZXN1bHQ9UCksaWV9ZnVuY3Rpb24gJHp0KGkpe3ZhciBzLHU9ITEsZD0hMSxwLHYsYjtpZihiPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSxiIT09MzMpcmV0dXJuITE7aWYoaS50YWchPT1udWxsJiZvYShpLCJkdXBsaWNhdGlvbiBvZiBhIHRhZyBwcm9wZXJ0eSIpLGI9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksYj09PTYwPyh1PSEwLGI9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbikpOmI9PT0zMz8oZD0hMCxwPSIhISIsYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSk6cD0iISIscz1pLnBvc2l0aW9uLHUpe2RvIGI9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7d2hpbGUoYiE9PTAmJmIhPT02Mik7aS5wb3NpdGlvbjxpLmxlbmd0aD8odj1pLmlucHV0LnNsaWNlKHMsaS5wb3NpdGlvbiksYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSk6b2EoaSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSB2ZXJiYXRpbSB0YWciKX1lbHNle2Zvcig7YiE9PTAmJiFGMihiKTspYj09PTMzJiYoZD9vYShpLCJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGV4Y2xhbWF0aW9uIG1hcmtzIik6KHA9aS5pbnB1dC5zbGljZShzLTEsaS5wb3NpdGlvbisxKSxDJGUudGVzdChwKXx8b2EoaSwibmFtZWQgdGFnIGhhbmRsZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnMiKSxkPSEwLHM9aS5wb3NpdGlvbisxKSksYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTt2PWkuaW5wdXQuc2xpY2UocyxpLnBvc2l0aW9uKSxBenQudGVzdCh2KSYmb2EoaSwidGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBmbG93IGluZGljYXRvciBjaGFyYWN0ZXJzIil9diYmIVMkZS50ZXN0KHYpJiZvYShpLCJ0YWcgbmFtZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnM6ICIrdik7dHJ5e3Y9ZGVjb2RlVVJJQ29tcG9uZW50KHYpfWNhdGNoe29hKGksInRhZyBuYW1lIGlzIG1hbGZvcm1lZDogIit2KX1yZXR1cm4gdT9pLnRhZz12Ong5LmNhbGwoaS50YWdNYXAscCk/aS50YWc9aS50YWdNYXBbcF0rdjpwPT09IiEiP2kudGFnPSIhIit2OnA9PT0iISEiP2kudGFnPSJ0YWc6eWFtbC5vcmcsMjAwMjoiK3Y6b2EoaSwndW5kZWNsYXJlZCB0YWcgaGFuZGxlICInK3ArJyInKSwhMH1mdW5jdGlvbiB6enQoaSl7dmFyIHMsdTtpZih1PWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSx1IT09MzgpcmV0dXJuITE7Zm9yKGkuYW5jaG9yIT09bnVsbCYmb2EoaSwiZHVwbGljYXRpb24gb2YgYW4gYW5jaG9yIHByb3BlcnR5IiksdT1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSxzPWkucG9zaXRpb247dSE9PTAmJiFGMih1KSYmIV9EKHUpOyl1PWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO3JldHVybiBpLnBvc2l0aW9uPT09cyYmb2EoaSwibmFtZSBvZiBhbiBhbmNob3Igbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlciIpLGkuYW5jaG9yPWkuaW5wdXQuc2xpY2UocyxpLnBvc2l0aW9uKSwhMH1mdW5jdGlvbiBxenQoaSl7dmFyIHMsdSxkO2lmKGQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLGQhPT00MilyZXR1cm4hMTtmb3IoZD1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSxzPWkucG9zaXRpb247ZCE9PTAmJiFGMihkKSYmIV9EKGQpOylkPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO3JldHVybiBpLnBvc2l0aW9uPT09cyYmb2EoaSwibmFtZSBvZiBhbiBhbGlhcyBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIiksdT1pLmlucHV0LnNsaWNlKHMsaS5wb3NpdGlvbikseDkuY2FsbChpLmFuY2hvck1hcCx1KXx8b2EoaSwndW5pZGVudGlmaWVkIGFsaWFzICInK3UrJyInKSxpLnJlc3VsdD1pLmFuY2hvck1hcFt1XSxPMChpLCEwLC0xKSwhMH1mdW5jdGlvbiBNRChpLHMsdSxkLHApe3ZhciB2LGIseSxUPTEsXz0hMSxBPSExLFAsUixGLGosSyxlZTtpZihpLmxpc3RlbmVyIT09bnVsbCYmaS5saXN0ZW5lcigib3BlbiIsaSksaS50YWc9bnVsbCxpLmFuY2hvcj1udWxsLGkua2luZD1udWxsLGkucmVzdWx0PW51bGwsdj1iPXk9Wlg9PT11fHxFJGU9PT11LGQmJk8wKGksITAsLTEpJiYoXz0hMCxpLmxpbmVJbmRlbnQ+cz9UPTE6aS5saW5lSW5kZW50PT09cz9UPTA6aS5saW5lSW5kZW50PHMmJihUPS0xKSksVD09PTEpZm9yKDskenQoaSl8fHp6dChpKTspTzAoaSwhMCwtMSk/KF89ITAseT12LGkubGluZUluZGVudD5zP1Q9MTppLmxpbmVJbmRlbnQ9PT1zP1Q9MDppLmxpbmVJbmRlbnQ8cyYmKFQ9LTEpKTp5PSExO2lmKHkmJih5PV98fHApLChUPT09MXx8Wlg9PT11KSYmKEpYPT09dXx8ayRlPT09dT9LPXM6Sz1zKzEsZWU9aS5wb3NpdGlvbi1pLmxpbmVTdGFydCxUPT09MT95JiYoTiRlKGksZWUpfHxqenQoaSxlZSxLKSl8fEZ6dChpLEspP0E9ITA6KGImJlJ6dChpLEspfHxQenQoaSxLKXx8Qnp0KGksSyk/QT0hMDpxenQoaSk/KEE9ITAsKGkudGFnIT09bnVsbHx8aS5hbmNob3IhPT1udWxsKSYmb2EoaSwiYWxpYXMgbm9kZSBzaG91bGQgbm90IGhhdmUgYW55IHByb3BlcnRpZXMiKSk6Tnp0KGksSyxKWD09PXUpJiYoQT0hMCxpLnRhZz09PW51bGwmJihpLnRhZz0iPyIpKSxpLmFuY2hvciE9PW51bGwmJihpLmFuY2hvck1hcFtpLmFuY2hvcl09aS5yZXN1bHQpKTpUPT09MCYmKEE9eSYmTiRlKGksZWUpKSksaS50YWc9PT1udWxsKWkuYW5jaG9yIT09bnVsbCYmKGkuYW5jaG9yTWFwW2kuYW5jaG9yXT1pLnJlc3VsdCk7ZWxzZSBpZihpLnRhZz09PSI/Iil7Zm9yKGkucmVzdWx0IT09bnVsbCYmaS5raW5kIT09InNjYWxhciImJm9hKGksJ3VuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8Pz4gdGFnOyBpdCBzaG91bGQgYmUgInNjYWxhciIsIG5vdCAiJytpLmtpbmQrJyInKSxQPTAsUj1pLmltcGxpY2l0VHlwZXMubGVuZ3RoO1A8UjtQKz0xKWlmKGo9aS5pbXBsaWNpdFR5cGVzW1BdLGoucmVzb2x2ZShpLnJlc3VsdCkpe2kucmVzdWx0PWouY29uc3RydWN0KGkucmVzdWx0KSxpLnRhZz1qLnRhZyxpLmFuY2hvciE9PW51bGwmJihpLmFuY2hvck1hcFtpLmFuY2hvcl09aS5yZXN1bHQpO2JyZWFrfX1lbHNlIGlmKGkudGFnIT09IiEiKXtpZih4OS5jYWxsKGkudHlwZU1hcFtpLmtpbmR8fCJmYWxsYmFjayJdLGkudGFnKSlqPWkudHlwZU1hcFtpLmtpbmR8fCJmYWxsYmFjayJdW2kudGFnXTtlbHNlIGZvcihqPW51bGwsRj1pLnR5cGVNYXAubXVsdGlbaS5raW5kfHwiZmFsbGJhY2siXSxQPTAsUj1GLmxlbmd0aDtQPFI7UCs9MSlpZihpLnRhZy5zbGljZSgwLEZbUF0udGFnLmxlbmd0aCk9PT1GW1BdLnRhZyl7aj1GW1BdO2JyZWFrfWp8fG9hKGksInVua25vd24gdGFnICE8IitpLnRhZysiPiIpLGkucmVzdWx0IT09bnVsbCYmai5raW5kIT09aS5raW5kJiZvYShpLCJ1bmFjY2VwdGFibGUgbm9kZSBraW5kIGZvciAhPCIraS50YWcrJz4gdGFnOyBpdCBzaG91bGQgYmUgIicrai5raW5kKyciLCBub3QgIicraS5raW5kKyciJyksai5yZXNvbHZlKGkucmVzdWx0LGkudGFnKT8oaS5yZXN1bHQ9ai5jb25zdHJ1Y3QoaS5yZXN1bHQsaS50YWcpLGkuYW5jaG9yIT09bnVsbCYmKGkuYW5jaG9yTWFwW2kuYW5jaG9yXT1pLnJlc3VsdCkpOm9hKGksImNhbm5vdCByZXNvbHZlIGEgbm9kZSB3aXRoICE8IitpLnRhZysiPiBleHBsaWNpdCB0YWciKX1yZXR1cm4gaS5saXN0ZW5lciE9PW51bGwmJmkubGlzdGVuZXIoImNsb3NlIixpKSxpLnRhZyE9PW51bGx8fGkuYW5jaG9yIT09bnVsbHx8QX1mdW5jdGlvbiBIenQoaSl7dmFyIHM9aS5wb3NpdGlvbix1LGQscCx2PSExLGI7Zm9yKGkudmVyc2lvbj1udWxsLGkuY2hlY2tMaW5lQnJlYWtzPWkubGVnYWN5LGkudGFnTWFwPU9iamVjdC5jcmVhdGUobnVsbCksaS5hbmNob3JNYXA9T2JqZWN0LmNyZWF0ZShudWxsKTsoYj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbikpIT09MCYmKE8wKGksITAsLTEpLGI9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLCEoaS5saW5lSW5kZW50PjB8fGIhPT0zNykpOyl7Zm9yKHY9ITAsYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSx1PWkucG9zaXRpb247YiE9PTAmJiFGMihiKTspYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTtmb3IoZD1pLmlucHV0LnNsaWNlKHUsaS5wb3NpdGlvbikscD1bXSxkLmxlbmd0aDwxJiZvYShpLCJkaXJlY3RpdmUgbmFtZSBtdXN0IG5vdCBiZSBsZXNzIHRoYW4gb25lIGNoYXJhY3RlciBpbiBsZW5ndGgiKTtiIT09MDspe2Zvcig7RkMoYik7KWI9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7aWYoYj09PTM1KXtkbyBiPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO3doaWxlKGIhPT0wJiYhVjQoYikpO2JyZWFrfWlmKFY0KGIpKWJyZWFrO2Zvcih1PWkucG9zaXRpb247YiE9PTAmJiFGMihiKTspYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTtwLnB1c2goaS5pbnB1dC5zbGljZSh1LGkucG9zaXRpb24pKX1iIT09MCYmVTJlKGkpLHg5LmNhbGwoSSRlLGQpP0kkZVtkXShpLGQscCk6ZVEoaSwndW5rbm93biBkb2N1bWVudCBkaXJlY3RpdmUgIicrZCsnIicpfWlmKE8wKGksITAsLTEpLGkubGluZUluZGVudD09PTAmJmkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKT09PTQ1JiZpLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbisxKT09PTQ1JiZpLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbisyKT09PTQ1PyhpLnBvc2l0aW9uKz0zLE8wKGksITAsLTEpKTp2JiZvYShpLCJkaXJlY3RpdmVzIGVuZCBtYXJrIGlzIGV4cGVjdGVkIiksTUQoaSxpLmxpbmVJbmRlbnQtMSxaWCwhMSwhMCksTzAoaSwhMCwtMSksaS5jaGVja0xpbmVCcmVha3MmJl96dC50ZXN0KGkuaW5wdXQuc2xpY2UocyxpLnBvc2l0aW9uKSkmJmVRKGksIm5vbi1BU0NJSSBsaW5lIGJyZWFrcyBhcmUgaW50ZXJwcmV0ZWQgYXMgY29udGVudCIpLGkuZG9jdW1lbnRzLnB1c2goaS5yZXN1bHQpLGkucG9zaXRpb249PT1pLmxpbmVTdGFydCYmdFEoaSkpe2kuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKT09PTQ2JiYoaS5wb3NpdGlvbis9MyxPMChpLCEwLC0xKSk7cmV0dXJufWlmKGkucG9zaXRpb248aS5sZW5ndGgtMSlvYShpLCJlbmQgb2YgdGhlIHN0cmVhbSBvciBhIGRvY3VtZW50IHNlcGFyYXRvciBpcyBleHBlY3RlZCIpO2Vsc2UgcmV0dXJufWZ1bmN0aW9uIFAkZShpLHMpe2k9U3RyaW5nKGkpLHM9c3x8e30saS5sZW5ndGghPT0wJiYoaS5jaGFyQ29kZUF0KGkubGVuZ3RoLTEpIT09MTAmJmkuY2hhckNvZGVBdChpLmxlbmd0aC0xKSE9PTEzJiYoaSs9YApgKSxpLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKGk9aS5zbGljZSgxKSkpO3ZhciB1PW5ldyBPenQoaSxzKSxkPWkuaW5kZXhPZigiXDAiKTtmb3IoZCE9PS0xJiYodS5wb3NpdGlvbj1kLG9hKHUsIm51bGwgYnl0ZSBpcyBub3QgYWxsb3dlZCBpbiBpbnB1dCIpKSx1LmlucHV0Kz0iXDAiO3UuaW5wdXQuY2hhckNvZGVBdCh1LnBvc2l0aW9uKT09PTMyOyl1LmxpbmVJbmRlbnQrPTEsdS5wb3NpdGlvbis9MTtmb3IoO3UucG9zaXRpb248dS5sZW5ndGgtMTspSHp0KHUpO3JldHVybiB1LmRvY3VtZW50c31mdW5jdGlvbiBWenQoaSxzLHUpe3MhPT1udWxsJiZ0eXBlb2Ygcz09Im9iamVjdCImJnR5cGVvZiB1PiJ1IiYmKHU9cyxzPW51bGwpO3ZhciBkPVAkZShpLHUpO2lmKHR5cGVvZiBzIT0iZnVuY3Rpb24iKXJldHVybiBkO2Zvcih2YXIgcD0wLHY9ZC5sZW5ndGg7cDx2O3ArPTEpcyhkW3BdKX1mdW5jdGlvbiBVenQoaSxzKXt2YXIgdT1QJGUoaSxzKTtpZih1Lmxlbmd0aCE9PTApe2lmKHUubGVuZ3RoPT09MSlyZXR1cm4gdVswXTt0aHJvdyBuZXcgQTcoImV4cGVjdGVkIGEgc2luZ2xlIGRvY3VtZW50IGluIHRoZSBzdHJlYW0sIGJ1dCBmb3VuZCBtb3JlIil9fXZhciBHenQ9Vnp0LEt6dD1VenQsV3p0PXtsb2FkQWxsOkd6dCxsb2FkOkt6dH0sWXp0PXckZSxYenQ9V3p0LmxvYWQ7ZnVuY3Rpb24gUXp0KGkpe2NvbnN0IHM9aS5tYXRjaChJUmUpO2lmKCFzKXJldHVybnt0ZXh0OmksbWV0YWRhdGE6e319O2xldCB1PVh6dChzWzFdLHtzY2hlbWE6WXp0fSk/P3t9O3U9dHlwZW9mIHU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheSh1KT91Ont9O2NvbnN0IGQ9e307cmV0dXJuIHUuZGlzcGxheU1vZGUmJihkLmRpc3BsYXlNb2RlPXUuZGlzcGxheU1vZGUudG9TdHJpbmcoKSksdS50aXRsZSYmKGQudGl0bGU9dS50aXRsZS50b1N0cmluZygpKSx1LmNvbmZpZyYmKGQuY29uZmlnPXUuY29uZmlnKSx7dGV4dDppLnNsaWNlKHNbMF0ubGVuZ3RoKSxtZXRhZGF0YTpkfX1jb25zdCBKenQ9aT0+aS5yZXBsYWNlKC9cclxuPy9nLGAKYCkucmVwbGFjZSgvPChcdyspKFtePl0qKT4vZywocyx1LGQpPT4iPCIrdStkLnJlcGxhY2UoLz0iKFteIl0qKSIvZywiPSckMSciKSsiPiIpLFp6dD1pPT57Y29uc3R7dGV4dDpzLG1ldGFkYXRhOnV9PVF6dChpKSx7ZGlzcGxheU1vZGU6ZCx0aXRsZTpwLGNvbmZpZzp2PXt9fT11O3JldHVybiBkJiYodi5nYW50dHx8KHYuZ2FudHQ9e30pLHYuZ2FudHQuZGlzcGxheU1vZGU9ZCkse3RpdGxlOnAsY29uZmlnOnYsdGV4dDpzfX0sZXF0PWk9Pntjb25zdCBzPUFvLmRldGVjdEluaXQoaSk/P3t9LHU9QW8uZGV0ZWN0RGlyZWN0aXZlKGksIndyYXAiKTtyZXR1cm4gQXJyYXkuaXNBcnJheSh1KT9zLndyYXA9dS5zb21lKCh7dHlwZTpkfSk9Pnt9KToodT09bnVsbD92b2lkIDA6dS50eXBlKT09PSJ3cmFwIiYmKHMud3JhcD0hMCkse3RleHQ6d1J0KGkpLGRpcmVjdGl2ZTpzfX07ZnVuY3Rpb24gQiRlKGkpe2NvbnN0IHM9Snp0KGkpLHU9Wnp0KHMpLGQ9ZXF0KHUudGV4dCkscD1KRih1LmNvbmZpZyxkLmRpcmVjdGl2ZSk7cmV0dXJuIGk9byR0KGQudGV4dCkse2NvZGU6aSx0aXRsZTp1LnRpdGxlLGNvbmZpZzpwfX1jb25zdCB0cXQ9NWU0LG5xdD0iZ3JhcGggVEI7YVtNYXhpbXVtIHRleHQgc2l6ZSBpbiBkaWFncmFtIGV4Y2VlZGVkXTtzdHlsZSBhIGZpbGw6I2ZhYSIscnF0PSJzYW5kYm94IixpcXQ9Imxvb3NlIixzcXQ9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixhcXQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLG9xdD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsY3F0PSIxMDAlIix1cXQ9IjEwMCUiLGxxdD0iYm9yZGVyOjA7bWFyZ2luOjA7IixocXQ9Im1hcmdpbjowIixmcXQ9ImFsbG93LXRvcC1uYXZpZ2F0aW9uLWJ5LXVzZXItYWN0aXZhdGlvbiBhbGxvdy1wb3B1cHMiLGRxdD0nVGhlICJpZnJhbWUiIHRhZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3Nlci4nLGdxdD1bImZvcmVpZ25vYmplY3QiXSxwcXQ9WyJkb21pbmFudC1iYXNlbGluZSJdO2Z1bmN0aW9uIEYkZShpKXtjb25zdCBzPUIkZShpKTtyZXR1cm4gV1goKSxlanQocy5jb25maWc/P3t9KSxzfWFzeW5jIGZ1bmN0aW9uIGJxdChpLHMpe0IyZSgpLGk9RiRlKGkpLmNvZGU7dHJ5e2F3YWl0IEsyZShpKX1jYXRjaCh1KXtpZihzIT1udWxsJiZzLnN1cHByZXNzRXJyb3JzKXJldHVybiExO3Rocm93IHV9cmV0dXJuITB9Y29uc3QgUiRlPShpLHMsdT1bXSk9PmAKLiR7aX0gJHtzfSB7ICR7dS5qb2luKCIgIWltcG9ydGFudDsgIil9ICFpbXBvcnRhbnQ7IH1gLG1xdD0oaSxzPXt9KT0+e3ZhciBkO2xldCB1PSIiO2lmKGkudGhlbWVDU1MhPT12b2lkIDAmJih1Kz1gCiR7aS50aGVtZUNTU31gKSxpLmZvbnRGYW1pbHkhPT12b2lkIDAmJih1Kz1gCjpyb290IHsgLS1tZXJtYWlkLWZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX19YCksaS5hbHRGb250RmFtaWx5IT09dm9pZCAwJiYodSs9YAo6cm9vdCB7IC0tbWVybWFpZC1hbHQtZm9udC1mYW1pbHk6ICR7aS5hbHRGb250RmFtaWx5fX1gKSwhaVIocykpe2NvbnN0IHk9aS5odG1sTGFiZWxzfHwoKGQ9aS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpkLmh0bWxMYWJlbHMpP1siPiAqIiwic3BhbiJdOlsicmVjdCIsInBvbHlnb24iLCJlbGxpcHNlIiwiY2lyY2xlIiwicGF0aCJdO2Zvcihjb25zdCBUIGluIHMpe2NvbnN0IF89c1tUXTtpUihfLnN0eWxlcyl8fHkuZm9yRWFjaChBPT57dSs9UiRlKF8uaWQsQSxfLnN0eWxlcyl9KSxpUihfLnRleHRTdHlsZXMpfHwodSs9UiRlKF8uaWQsInRzcGFuIixfLnRleHRTdHlsZXMpKX19cmV0dXJuIHV9LHZxdD0oaSxzLHUsZCk9Pntjb25zdCBwPW1xdChpLHUpLHY9VGp0KHMscCxpLnRoZW1lVmFyaWFibGVzKTtyZXR1cm4gTTJlKFdSdChgJHtkfXske3Z9fWApLFhSdCl9LHdxdD0oaT0iIixzLHUpPT57bGV0IGQ9aTtyZXR1cm4hdSYmIXMmJihkPWQucmVwbGFjZSgvbWFya2VyLWVuZD0idXJsXChbXGQrLi86PT9BLVphLXotXSo/Iy9nLCdtYXJrZXItZW5kPSJ1cmwoIycpKSxkPVpGKGQpLGQ9ZC5yZXBsYWNlKC88YnI+L2csIjxici8+IiksZH0seXF0PShpPSIiLHMpPT57dmFyIHAsdjtjb25zdCB1PSh2PShwPXM9PW51bGw/dm9pZCAwOnMudmlld0JveCk9PW51bGw/dm9pZCAwOnAuYmFzZVZhbCkhPW51bGwmJnYuaGVpZ2h0P3Mudmlld0JveC5iYXNlVmFsLmhlaWdodCsicHgiOnVxdCxkPWJ0b2EoJzxib2R5IHN0eWxlPSInK2hxdCsnIj4nK2krIjwvYm9keT4iKTtyZXR1cm5gPGlmcmFtZSBzdHlsZT0id2lkdGg6JHtjcXR9O2hlaWdodDoke3V9OyR7bHF0fSIgc3JjPSJkYXRhOnRleHQvaHRtbDtiYXNlNjQsJHtkfSIgc2FuZGJveD0iJHtmcXR9Ij4KICAke2RxdH0KPC9pZnJhbWU+YH0saiRlPShpLHMsdSxkLHApPT57Y29uc3Qgdj1pLmFwcGVuZCgiZGl2Iik7di5hdHRyKCJpZCIsdSksZCYmdi5hdHRyKCJzdHlsZSIsZCk7Y29uc3QgYj12LmFwcGVuZCgic3ZnIikuYXR0cigiaWQiLHMpLmF0dHIoIndpZHRoIiwiMTAwJSIpLmF0dHIoInhtbG5zIixzcXQpO3JldHVybiBwJiZiLmF0dHIoInhtbG5zOnhsaW5rIixwKSxiLmFwcGVuZCgiZyIpLGl9O2Z1bmN0aW9uICQkZShpLHMpe3JldHVybiBpLmFwcGVuZCgiaWZyYW1lIikuYXR0cigiaWQiLHMpLmF0dHIoInN0eWxlIiwid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsiKS5hdHRyKCJzYW5kYm94IiwiIil9Y29uc3QgeHF0PShpLHMsdSxkKT0+e3ZhciBwLHYsYjsocD1pLmdldEVsZW1lbnRCeUlkKHMpKT09bnVsbHx8cC5yZW1vdmUoKSwodj1pLmdldEVsZW1lbnRCeUlkKHUpKT09bnVsbHx8di5yZW1vdmUoKSwoYj1pLmdldEVsZW1lbnRCeUlkKGQpKT09bnVsbHx8Yi5yZW1vdmUoKX0sa3F0PWFzeW5jIGZ1bmN0aW9uKGkscyx1KXt2YXIgVSxGZSxQZSxqZSxJZSxTZTtCMmUoKTtjb25zdCBkPUYkZShzKTtzPWQuY29kZTtjb25zdCBwPVZoKCk7WGUuZGVidWcocCkscy5sZW5ndGg+KChwPT1udWxsP3ZvaWQgMDpwLm1heFRleHRTaXplKT8/dHF0KSYmKHM9bnF0KTtjb25zdCB2PSIjIitpLGI9ImkiK2kseT0iIyIrYixUPSJkIitpLF89IiMiK1Q7bGV0IEE9SXIoImJvZHkiKTtjb25zdCBQPXAuc2VjdXJpdHlMZXZlbD09PXJxdCxSPXAuc2VjdXJpdHlMZXZlbD09PWlxdCxGPXAuZm9udEZhbWlseTtpZih1IT09dm9pZCAwKXtpZih1JiYodS5pbm5lckhUTUw9IiIpLFApe2NvbnN0IENlPSQkZShJcih1KSxiKTtBPUlyKENlLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpLEEubm9kZSgpLnN0eWxlLm1hcmdpbj0wfWVsc2UgQT1Jcih1KTtqJGUoQSxpLFQsYGZvbnQtZmFtaWx5OiAke0Z9YCxhcXQpfWVsc2V7aWYoeHF0KGRvY3VtZW50LGksVCxiKSxQKXtjb25zdCBDZT0kJGUoSXIoImJvZHkiKSxiKTtBPUlyKENlLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpLEEubm9kZSgpLnN0eWxlLm1hcmdpbj0wfWVsc2UgQT1JcigiYm9keSIpO2okZShBLGksVCl9bGV0IGosSzt0cnl7aj1hd2FpdCBLMmUocyx7dGl0bGU6ZC50aXRsZX0pfWNhdGNoKENlKXtqPW5ldyBjJGUoImVycm9yIiksSz1DZX1jb25zdCBlZT1BLnNlbGVjdChfKS5ub2RlKCksaWU9ai50eXBlLG9lPWVlLmZpcnN0Q2hpbGQscGU9b2UuZmlyc3RDaGlsZCxiZT0oRmU9KFU9ai5yZW5kZXJlcikuZ2V0Q2xhc3Nlcyk9PW51bGw/dm9pZCAwOkZlLmNhbGwoVSxzLGopLGFlPXZxdChwLGllLGJlLHYpLG5lPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7bmUuaW5uZXJIVE1MPWFlLG9lLmluc2VydEJlZm9yZShuZSxwZSk7dHJ5e2F3YWl0IGoucmVuZGVyZXIuZHJhdyhzLGksQWplLGopfWNhdGNoKENlKXt0aHJvdyBEanQuZHJhdyhzLGksQWplKSxDZX1jb25zdCBzZT1BLnNlbGVjdChgJHtffSBzdmdgKSxkZT0oamU9KFBlPWouZGIpLmdldEFjY1RpdGxlKT09bnVsbD92b2lkIDA6amUuY2FsbChQZSksWD0oU2U9KEllPWouZGIpLmdldEFjY0Rlc2NyaXB0aW9uKT09bnVsbD92b2lkIDA6U2UuY2FsbChJZSk7VHF0KGllLHNlLGRlLFgpLEEuc2VsZWN0KGBbaWQ9IiR7aX0iXWApLnNlbGVjdEFsbCgiZm9yZWlnbm9iamVjdCA+ICoiKS5hdHRyKCJ4bWxucyIsb3F0KTtsZXQgZ2U9QS5zZWxlY3QoXykubm9kZSgpLmlubmVySFRNTDtpZihYZS5kZWJ1ZygiY29uZmlnLmFycm93TWFya2VyQWJzb2x1dGUiLHAuYXJyb3dNYXJrZXJBYnNvbHV0ZSksZ2U9d3F0KGdlLFAsZjEocC5hcnJvd01hcmtlckFic29sdXRlKSksUCl7Y29uc3QgQ2U9QS5zZWxlY3QoXysiIHN2ZyIpLm5vZGUoKTtnZT15cXQoZ2UsQ2UpfWVsc2UgUnx8KGdlPWhELnNhbml0aXplKGdlLHtBRERfVEFHUzpncXQsQUREX0FUVFI6cHF0fSkpO2lmKGpqdCgpLEspdGhyb3cgSztjb25zdCB4ZT1JcihQP3k6Xykubm9kZSgpO3JldHVybiB4ZSYmInJlbW92ZSJpbiB4ZSYmeGUucmVtb3ZlKCkse3N2ZzpnZSxiaW5kRnVuY3Rpb25zOmouZGIuYmluZEZ1bmN0aW9uc319O2Z1bmN0aW9uIEVxdChpPXt9KXt2YXIgdTtpIT1udWxsJiZpLmZvbnRGYW1pbHkmJiEoKHU9aS50aGVtZVZhcmlhYmxlcykhPW51bGwmJnUuZm9udEZhbWlseSkmJihpLnRoZW1lVmFyaWFibGVzfHwoaS50aGVtZVZhcmlhYmxlcz17fSksaS50aGVtZVZhcmlhYmxlcy5mb250RmFtaWx5PWkuZm9udEZhbWlseSksSlJ0KGkpLGkhPW51bGwmJmkudGhlbWUmJmkudGhlbWUgaW4gRTc/aS50aGVtZVZhcmlhYmxlcz1FN1tpLnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyhpLnRoZW1lVmFyaWFibGVzKTppJiYoaS50aGVtZVZhcmlhYmxlcz1FNy5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKGkudGhlbWVWYXJpYWJsZXMpKTtjb25zdCBzPXR5cGVvZiBpPT0ib2JqZWN0Ij9RUnQoaSk6TWplKCk7ZnBlKHMubG9nTGV2ZWwpLEIyZSgpfWNvbnN0IEsyZT0oaSxzPXt9KT0+e2NvbnN0e2NvZGU6dX09QiRlKGkpO3JldHVybiBSanQodSxzKX07ZnVuY3Rpb24gVHF0KGkscyx1LGQpe3MkdChzLGkpLGEkdChzLHUsZCxzLmF0dHIoImlkIikpfWNvbnN0IFJDPU9iamVjdC5mcmVlemUoe3JlbmRlcjprcXQscGFyc2U6YnF0LGdldERpYWdyYW1Gcm9tVGV4dDpLMmUsaW5pdGlhbGl6ZTpFcXQsZ2V0Q29uZmlnOlZoLHNldENvbmZpZzpEamUsZ2V0U2l0ZUNvbmZpZzpNamUsdXBkYXRlU2l0ZUNvbmZpZzpaUnQscmVzZXQ6KCk9PntXWCgpfSxnbG9iYWxSZXNldDooKT0+e1dYKEVEKX0sZGVmYXVsdENvbmZpZzpFRH0pO2ZwZShWaCgpLmxvZ0xldmVsKSxXWChWaCgpKTtjb25zdCBDcXQ9YXN5bmMoKT0+e1hlLmRlYnVnKCJMb2FkaW5nIHJlZ2lzdGVyZWQgZGlhZ3JhbXMiKTtjb25zdCBzPShhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoT2JqZWN0LmVudHJpZXMoZEQpLm1hcChhc3luYyhbdSx7ZGV0ZWN0b3I6ZCxsb2FkZXI6cH1dKT0+e2lmKHApdHJ5e1AyZSh1KX1jYXRjaHt0cnl7Y29uc3R7ZGlhZ3JhbTpiLGlkOnl9PWF3YWl0IHAoKTtRWCh5LGIsZCl9Y2F0Y2goYil7dGhyb3cgWGUuZXJyb3IoYEZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGRpYWdyYW0gd2l0aCBrZXkgJHt1fS4gUmVtb3ZpbmcgZnJvbSBkZXRlY3RvcnMuYCksZGVsZXRlIGREW3VdLGJ9fX0pKSkuZmlsdGVyKHU9PnUuc3RhdHVzPT09InJlamVjdGVkIik7aWYocy5sZW5ndGg+MCl7WGUuZXJyb3IoYEZhaWxlZCB0byBsb2FkICR7cy5sZW5ndGh9IGV4dGVybmFsIGRpYWdyYW1zYCk7Zm9yKGNvbnN0IHUgb2YgcylYZS5lcnJvcih1KTt0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkICR7cy5sZW5ndGh9IGV4dGVybmFsIGRpYWdyYW1zYCl9fSxTcXQ9KGkscyx1KT0+e1hlLndhcm4oaSksd2plKGkpPyh1JiZ1KGkuc3RyLGkuaGFzaCkscy5wdXNoKHsuLi5pLG1lc3NhZ2U6aS5zdHIsZXJyb3I6aX0pKToodSYmdShpKSxpIGluc3RhbmNlb2YgRXJyb3ImJnMucHVzaCh7c3RyOmkubWVzc2FnZSxtZXNzYWdlOmkubWVzc2FnZSxoYXNoOmkubmFtZSxlcnJvcjppfSkpfSx6JGU9YXN5bmMgZnVuY3Rpb24oaT17cXVlcnlTZWxlY3RvcjoiLm1lcm1haWQifSl7dHJ5e2F3YWl0IF9xdChpKX1jYXRjaChzKXtpZih3amUocykmJlhlLmVycm9yKHMuc3RyKSx1bS5wYXJzZUVycm9yJiZ1bS5wYXJzZUVycm9yKHMpLCFpLnN1cHByZXNzRXJyb3JzKXRocm93IFhlLmVycm9yKCJVc2UgdGhlIHN1cHByZXNzRXJyb3JzIG9wdGlvbiB0byBzdXBwcmVzcyB0aGVzZSBlcnJvcnMiKSxzfX0sX3F0PWFzeW5jIGZ1bmN0aW9uKHtwb3N0UmVuZGVyQ2FsbGJhY2s6aSxxdWVyeVNlbGVjdG9yOnMsbm9kZXM6dX09e3F1ZXJ5U2VsZWN0b3I6Ii5tZXJtYWlkIn0pe2NvbnN0IGQ9UkMuZ2V0Q29uZmlnKCk7WGUuZGVidWcoYCR7aT8iIjoiTm8gIn1DYWxsYmFjayBmdW5jdGlvbiBmb3VuZGApO2xldCBwO2lmKHUpcD11O2Vsc2UgaWYocylwPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocyk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIk5vZGVzIGFuZCBxdWVyeVNlbGVjdG9yIGFyZSBib3RoIHVuZGVmaW5lZCIpO1hlLmRlYnVnKGBGb3VuZCAke3AubGVuZ3RofSBkaWFncmFtc2ApLChkPT1udWxsP3ZvaWQgMDpkLnN0YXJ0T25Mb2FkKSE9PXZvaWQgMCYmKFhlLmRlYnVnKCJTdGFydCBPbiBMb2FkOiAiKyhkPT1udWxsP3ZvaWQgMDpkLnN0YXJ0T25Mb2FkKSksUkMudXBkYXRlU2l0ZUNvbmZpZyh7c3RhcnRPbkxvYWQ6ZD09bnVsbD92b2lkIDA6ZC5zdGFydE9uTG9hZH0pKTtjb25zdCB2PW5ldyBBby5Jbml0SURHZW5lcmF0b3IoZC5kZXRlcm1pbmlzdGljSWRzLGQuZGV0ZXJtaW5pc3RpY0lEU2VlZCk7bGV0IGI7Y29uc3QgeT1bXTtmb3IoY29uc3QgVCBvZiBBcnJheS5mcm9tKHApKXtYZS5pbmZvKCJSZW5kZXJpbmcgZGlhZ3JhbTogIitULmlkKTsvKiEgQ2hlY2sgaWYgcHJldmlvdXNseSBwcm9jZXNzZWQgKi9pZihULmdldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiKSljb250aW51ZTtULnNldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiLCJ0cnVlIik7Y29uc3QgXz1gbWVybWFpZC0ke3YubmV4dCgpfWA7Yj1ULmlubmVySFRNTCxiPUpNKEFvLmVudGl0eURlY29kZShiKSkudHJpbSgpLnJlcGxhY2UoLzxiclxzKlwvPz4vZ2ksIjxici8+Iik7Y29uc3QgQT1Bby5kZXRlY3RJbml0KGIpO0EmJlhlLmRlYnVnKCJEZXRlY3RlZCBlYXJseSByZWluaXQ6ICIsQSk7dHJ5e2NvbnN0e3N2ZzpQLGJpbmRGdW5jdGlvbnM6Un09YXdhaXQgVSRlKF8sYixUKTtULmlubmVySFRNTD1QLGkmJmF3YWl0IGkoXyksUiYmUihUKX1jYXRjaChQKXtTcXQoUCx5LHVtLnBhcnNlRXJyb3IpfX1pZih5Lmxlbmd0aD4wKXRocm93IHlbMF19LHEkZT1mdW5jdGlvbihpKXtSQy5pbml0aWFsaXplKGkpfSxBcXQ9YXN5bmMgZnVuY3Rpb24oaSxzLHUpe1hlLndhcm4oIm1lcm1haWQuaW5pdCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHJ1biBpbnN0ZWFkLiIpLGkmJnEkZShpKTtjb25zdCBkPXtwb3N0UmVuZGVyQ2FsbGJhY2s6dSxxdWVyeVNlbGVjdG9yOiIubWVybWFpZCJ9O3R5cGVvZiBzPT0ic3RyaW5nIj9kLnF1ZXJ5U2VsZWN0b3I9czpzJiYocyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50P2Qubm9kZXM9W3NdOmQubm9kZXM9cyksYXdhaXQgeiRlKGQpfSxMcXQ9YXN5bmMoaSx7bGF6eUxvYWQ6cz0hMH09e30pPT57TlJlKC4uLmkpLHM9PT0hMSYmYXdhaXQgQ3F0KCl9LEgkZT1mdW5jdGlvbigpe2lmKHVtLnN0YXJ0T25Mb2FkKXtjb25zdHtzdGFydE9uTG9hZDppfT1SQy5nZXRDb25maWcoKTtpJiZ1bS5ydW4oKS5jYXRjaChzPT5YZS5lcnJvcigiTWVybWFpZCBmYWlsZWQgdG8gaW5pdGlhbGl6ZSIscykpfX07aWYodHlwZW9mIGRvY3VtZW50PCJ1Iil7LyohCiAqIFdhaXQgZm9yIGRvY3VtZW50IGxvYWRlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIGV4ZWN1dGlvbgogKi93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsSCRlLCExKX1jb25zdCBNcXQ9ZnVuY3Rpb24oaSl7dW0ucGFyc2VFcnJvcj1pfSxuUT1bXTtsZXQgVzJlPSExO2NvbnN0IFYkZT1hc3luYygpPT57aWYoIVcyZSl7Zm9yKFcyZT0hMDtuUS5sZW5ndGg+MDspe2NvbnN0IGk9blEuc2hpZnQoKTtpZihpKXRyeXthd2FpdCBpKCl9Y2F0Y2gocyl7WGUuZXJyb3IoIkVycm9yIGV4ZWN1dGluZyBxdWV1ZSIscyl9fVcyZT0hMX19LERxdD1hc3luYyhpLHMpPT5uZXcgUHJvbWlzZSgodSxkKT0+e2NvbnN0IHA9KCk9Pm5ldyBQcm9taXNlKCh2LGIpPT57UkMucGFyc2UoaSxzKS50aGVuKHk9Pnt2KHkpLHUoeSl9LHk9Pnt2YXIgVDtYZS5lcnJvcigiRXJyb3IgcGFyc2luZyIseSksKFQ9dW0ucGFyc2VFcnJvcik9PW51bGx8fFQuY2FsbCh1bSx5KSxiKHkpLGQoeSl9KX0pO25RLnB1c2gocCksViRlKCkuY2F0Y2goZCl9KSxVJGU9KGkscyx1KT0+bmV3IFByb21pc2UoKGQscCk9Pntjb25zdCB2PSgpPT5uZXcgUHJvbWlzZSgoYix5KT0+e1JDLnJlbmRlcihpLHMsdSkudGhlbihUPT57YihUKSxkKFQpfSxUPT57dmFyIF87WGUuZXJyb3IoIkVycm9yIHBhcnNpbmciLFQpLChfPXVtLnBhcnNlRXJyb3IpPT1udWxsfHxfLmNhbGwodW0sVCkseShUKSxwKFQpfSl9KTtuUS5wdXNoKHYpLFYkZSgpLmNhdGNoKHApfSksdW09e3N0YXJ0T25Mb2FkOiEwLG1lcm1haWRBUEk6UkMscGFyc2U6RHF0LHJlbmRlcjpVJGUsaW5pdDpBcXQscnVuOnokZSxyZWdpc3RlckV4dGVybmFsRGlhZ3JhbXM6THF0LGluaXRpYWxpemU6cSRlLHBhcnNlRXJyb3I6dm9pZCAwLGNvbnRlbnRMb2FkZWQ6SCRlLHNldFBhcnNlRXJyb3JIYW5kbGVyOk1xdCxkZXRlY3RUeXBlOl9YfTtjbGFzcyBsbXtjb25zdHJ1Y3RvcihzLHUsZCl7dGhpcy5sZXhlcj12b2lkIDAsdGhpcy5zdGFydD12b2lkIDAsdGhpcy5lbmQ9dm9pZCAwLHRoaXMubGV4ZXI9cyx0aGlzLnN0YXJ0PXUsdGhpcy5lbmQ9ZH1zdGF0aWMgcmFuZ2Uocyx1KXtyZXR1cm4gdT8hc3x8IXMubG9jfHwhdS5sb2N8fHMubG9jLmxleGVyIT09dS5sb2MubGV4ZXI/bnVsbDpuZXcgbG0ocy5sb2MubGV4ZXIscy5sb2Muc3RhcnQsdS5sb2MuZW5kKTpzJiZzLmxvY319Y2xhc3MgVTR7Y29uc3RydWN0b3Iocyx1KXt0aGlzLnRleHQ9dm9pZCAwLHRoaXMubG9jPXZvaWQgMCx0aGlzLm5vZXhwYW5kPXZvaWQgMCx0aGlzLnRyZWF0QXNSZWxheD12b2lkIDAsdGhpcy50ZXh0PXMsdGhpcy5sb2M9dX1yYW5nZShzLHUpe3JldHVybiBuZXcgVTQodSxsbS5yYW5nZSh0aGlzLHMpKX19Y2xhc3MgQ2l7Y29uc3RydWN0b3Iocyx1KXt0aGlzLm5hbWU9dm9pZCAwLHRoaXMucG9zaXRpb249dm9pZCAwLHRoaXMubGVuZ3RoPXZvaWQgMCx0aGlzLnJhd01lc3NhZ2U9dm9pZCAwO3ZhciBkPSJLYVRlWCBwYXJzZSBlcnJvcjogIitzLHAsdixiPXUmJnUubG9jO2lmKGImJmIuc3RhcnQ8PWIuZW5kKXt2YXIgeT1iLmxleGVyLmlucHV0O3A9Yi5zdGFydCx2PWIuZW5kLHA9PT15Lmxlbmd0aD9kKz0iIGF0IGVuZCBvZiBpbnB1dDogIjpkKz0iIGF0IHBvc2l0aW9uICIrKHArMSkrIjogIjt2YXIgVD15LnNsaWNlKHAsdikucmVwbGFjZSgvW15dL2csIiQmzLIiKSxfO3A+MTU/Xz0i4oCmIit5LnNsaWNlKHAtMTUscCk6Xz15LnNsaWNlKDAscCk7dmFyIEE7disxNTx5Lmxlbmd0aD9BPXkuc2xpY2Uodix2KzE1KSsi4oCmIjpBPXkuc2xpY2UodiksZCs9XytUK0F9dmFyIFA9bmV3IEVycm9yKGQpO3JldHVybiBQLm5hbWU9IlBhcnNlRXJyb3IiLFAuX19wcm90b19fPUNpLnByb3RvdHlwZSxQLnBvc2l0aW9uPXAscCE9bnVsbCYmdiE9bnVsbCYmKFAubGVuZ3RoPXYtcCksUC5yYXdNZXNzYWdlPXMsUH19Q2kucHJvdG90eXBlLl9fcHJvdG9fXz1FcnJvci5wcm90b3R5cGU7dmFyIElxdD1mdW5jdGlvbihzLHUpe3JldHVybiBzLmluZGV4T2YodSkhPT0tMX0sT3F0PWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHM9PT12b2lkIDA/dTpzfSxOcXQ9LyhbQS1aXSkvZyxQcXQ9ZnVuY3Rpb24ocyl7cmV0dXJuIHMucmVwbGFjZShOcXQsIi0kMSIpLnRvTG93ZXJDYXNlKCl9LEJxdD17IiYiOiImYW1wOyIsIj4iOiImZ3Q7IiwiPCI6IiZsdDsiLCciJzoiJnF1b3Q7IiwiJyI6IiYjeDI3OyJ9LEZxdD0vWyY+PCInXS9nO2Z1bmN0aW9uIFJxdChpKXtyZXR1cm4gU3RyaW5nKGkpLnJlcGxhY2UoRnF0LHM9PkJxdFtzXSl9dmFyIEckZT1mdW5jdGlvbiBpKHMpe3JldHVybiBzLnR5cGU9PT0ib3JkZ3JvdXAifHxzLnR5cGU9PT0iY29sb3IiP3MuYm9keS5sZW5ndGg9PT0xP2kocy5ib2R5WzBdKTpzOnMudHlwZT09PSJmb250Ij9pKHMuYm9keSk6c30sanF0PWZ1bmN0aW9uKHMpe3ZhciB1PUckZShzKTtyZXR1cm4gdS50eXBlPT09Im1hdGhvcmQifHx1LnR5cGU9PT0idGV4dG9yZCJ8fHUudHlwZT09PSJhdG9tIn0sJHF0PWZ1bmN0aW9uKHMpe2lmKCFzKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgbm9uLW51bGwsIGJ1dCBnb3QgIitTdHJpbmcocykpO3JldHVybiBzfSx6cXQ9ZnVuY3Rpb24ocyl7dmFyIHU9L15ccyooW15cXC8jXSo/KSg/Ojp8JiMwKjU4fCYjeDAqM2EpL2kuZXhlYyhzKTtyZXR1cm4gdSE9bnVsbD91WzFdOiJfcmVsYXRpdmUifSxZYT17Y29udGFpbnM6SXF0LGRlZmx0Ok9xdCxlc2NhcGU6UnF0LGh5cGhlbmF0ZTpQcXQsZ2V0QmFzZUVsZW06RyRlLGlzQ2hhcmFjdGVyQm94OmpxdCxwcm90b2NvbEZyb21Vcmw6enF0fSxyUT17ZGlzcGxheU1vZGU6e3R5cGU6ImJvb2xlYW4iLGRlc2NyaXB0aW9uOiJSZW5kZXIgbWF0aCBpbiBkaXNwbGF5IG1vZGUsIHdoaWNoIHB1dHMgdGhlIG1hdGggaW4gZGlzcGxheSBzdHlsZSAoc28gXFxpbnQgYW5kIFxcc3VtIGFyZSBsYXJnZSwgZm9yIGV4YW1wbGUpLCBhbmQgY2VudGVycyB0aGUgbWF0aCBvbiB0aGUgcGFnZSBvbiBpdHMgb3duIGxpbmUuIixjbGk6Ii1kLCAtLWRpc3BsYXktbW9kZSJ9LG91dHB1dDp7dHlwZTp7ZW51bTpbImh0bWxBbmRNYXRobWwiLCJodG1sIiwibWF0aG1sIl19LGRlc2NyaXB0aW9uOiJEZXRlcm1pbmVzIHRoZSBtYXJrdXAgbGFuZ3VhZ2Ugb2YgdGhlIG91dHB1dC4iLGNsaToiLUYsIC0tZm9ybWF0IDx0eXBlPiJ9LGxlcW5vOnt0eXBlOiJib29sZWFuIixkZXNjcmlwdGlvbjoiUmVuZGVyIGRpc3BsYXkgbWF0aCBpbiBsZXFubyBzdHlsZSAobGVmdC1qdXN0aWZpZWQgdGFncykuIn0sZmxlcW46e3R5cGU6ImJvb2xlYW4iLGRlc2NyaXB0aW9uOiJSZW5kZXIgZGlzcGxheSBtYXRoIGZsdXNoIGxlZnQuIn0sdGhyb3dPbkVycm9yOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiEwLGNsaToiLXQsIC0tbm8tdGhyb3ctb24tZXJyb3IiLGNsaURlc2NyaXB0aW9uOiJSZW5kZXIgZXJyb3JzIChpbiB0aGUgY29sb3IgZ2l2ZW4gYnkgLS1lcnJvci1jb2xvcikgaW5zdGVhZCBvZiB0aHJvd2luZyBhIFBhcnNlRXJyb3IgZXhjZXB0aW9uIHdoZW4gZW5jb3VudGVyaW5nIGFuIGVycm9yLiJ9LGVycm9yQ29sb3I6e3R5cGU6InN0cmluZyIsZGVmYXVsdDoiI2NjMDAwMCIsY2xpOiItYywgLS1lcnJvci1jb2xvciA8Y29sb3I+IixjbGlEZXNjcmlwdGlvbjoiQSBjb2xvciBzdHJpbmcgZ2l2ZW4gaW4gdGhlIGZvcm1hdCAncmdiJyBvciAncnJnZ2JiJyAobm8gIykuIFRoaXMgb3B0aW9uIGRldGVybWluZXMgdGhlIGNvbG9yIG9mIGVycm9ycyByZW5kZXJlZCBieSB0aGUgLXQgb3B0aW9uLiIsY2xpUHJvY2Vzc29yOmk9PiIjIitpfSxtYWNyb3M6e3R5cGU6Im9iamVjdCIsY2xpOiItbSwgLS1tYWNybyA8ZGVmPiIsY2xpRGVzY3JpcHRpb246IkRlZmluZSBjdXN0b20gbWFjcm8gb2YgdGhlIGZvcm0gJ1xcZm9vOmV4cGFuc2lvbicgKHVzZSBtdWx0aXBsZSAtbSBhcmd1bWVudHMgZm9yIG11bHRpcGxlIG1hY3JvcykuIixjbGlEZWZhdWx0OltdLGNsaVByb2Nlc3NvcjooaSxzKT0+KHMucHVzaChpKSxzKX0sbWluUnVsZVRoaWNrbmVzczp7dHlwZToibnVtYmVyIixkZXNjcmlwdGlvbjoiU3BlY2lmaWVzIGEgbWluaW11bSB0aGlja25lc3MsIGluIGVtcywgZm9yIGZyYWN0aW9uIGxpbmVzLCBgXFxzcXJ0YCB0b3AgbGluZXMsIGB7YXJyYXl9YCB2ZXJ0aWNhbCBsaW5lcywgYFxcaGxpbmVgLCBgXFxoZGFzaGxpbmVgLCBgXFx1bmRlcmxpbmVgLCBgXFxvdmVybGluZWAsIGFuZCB0aGUgYm9yZGVycyBvZiBgXFxmYm94YCwgYFxcYm94ZWRgLCBhbmQgYFxcZmNvbG9yYm94YC4iLHByb2Nlc3NvcjppPT5NYXRoLm1heCgwLGkpLGNsaToiLS1taW4tcnVsZS10aGlja25lc3MgPHNpemU+IixjbGlQcm9jZXNzb3I6cGFyc2VGbG9hdH0sY29sb3JJc1RleHRDb2xvcjp7dHlwZToiYm9vbGVhbiIsZGVzY3JpcHRpb246Ik1ha2VzIFxcY29sb3IgYmVoYXZlIGxpa2UgTGFUZVgncyAyLWFyZ3VtZW50IFxcdGV4dGNvbG9yLCBpbnN0ZWFkIG9mIExhVGVYJ3Mgb25lLWFyZ3VtZW50IFxcY29sb3IgbW9kZSBjaGFuZ2UuIixjbGk6Ii1iLCAtLWNvbG9yLWlzLXRleHQtY29sb3IifSxzdHJpY3Q6e3R5cGU6W3tlbnVtOlsid2FybiIsImlnbm9yZSIsImVycm9yIl19LCJib29sZWFuIiwiZnVuY3Rpb24iXSxkZXNjcmlwdGlvbjoiVHVybiBvbiBzdHJpY3QgLyBMYVRlWCBmYWl0aGZ1bG5lc3MgbW9kZSwgd2hpY2ggdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBpbnB1dCB1c2VzIGZlYXR1cmVzIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgTGFUZVguIixjbGk6Ii1TLCAtLXN0cmljdCIsY2xpRGVmYXVsdDohMX0sdHJ1c3Q6e3R5cGU6WyJib29sZWFuIiwiZnVuY3Rpb24iXSxkZXNjcmlwdGlvbjoiVHJ1c3QgdGhlIGlucHV0LCBlbmFibGluZyBhbGwgSFRNTCBmZWF0dXJlcyBzdWNoIGFzIFxcdXJsLiIsY2xpOiItVCwgLS10cnVzdCJ9LG1heFNpemU6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLzAsZGVzY3JpcHRpb246IklmIG5vbi16ZXJvLCBhbGwgdXNlci1zcGVjaWZpZWQgc2l6ZXMsIGUuZy4gaW4gXFxydWxlezUwMGVtfXs1MDBlbX0sIHdpbGwgYmUgY2FwcGVkIHRvIG1heFNpemUgZW1zLiBPdGhlcndpc2UsIGVsZW1lbnRzIGFuZCBzcGFjZXMgY2FuIGJlIGFyYml0cmFyaWx5IGxhcmdlIixwcm9jZXNzb3I6aT0+TWF0aC5tYXgoMCxpKSxjbGk6Ii1zLCAtLW1heC1zaXplIDxuPiIsY2xpUHJvY2Vzc29yOnBhcnNlSW50fSxtYXhFeHBhbmQ6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxZTMsZGVzY3JpcHRpb246IkxpbWl0IHRoZSBudW1iZXIgb2YgbWFjcm8gZXhwYW5zaW9ucyB0byB0aGUgc3BlY2lmaWVkIG51bWJlciwgdG8gcHJldmVudCBlLmcuIGluZmluaXRlIG1hY3JvIGxvb3BzLiBJZiBzZXQgdG8gSW5maW5pdHksIHRoZSBtYWNybyBleHBhbmRlciB3aWxsIHRyeSB0byBmdWxseSBleHBhbmQgYXMgaW4gTGFUZVguIixwcm9jZXNzb3I6aT0+TWF0aC5tYXgoMCxpKSxjbGk6Ii1lLCAtLW1heC1leHBhbmQgPG4+IixjbGlQcm9jZXNzb3I6aT0+aT09PSJJbmZpbml0eSI/MS8wOnBhcnNlSW50KGkpfSxnbG9iYWxHcm91cDp7dHlwZToiYm9vbGVhbiIsY2xpOiExfX07ZnVuY3Rpb24gcXF0KGkpe2lmKGkuZGVmYXVsdClyZXR1cm4gaS5kZWZhdWx0O3ZhciBzPWkudHlwZSx1PUFycmF5LmlzQXJyYXkocyk/c1swXTpzO2lmKHR5cGVvZiB1IT0ic3RyaW5nIilyZXR1cm4gdS5lbnVtWzBdO3N3aXRjaCh1KXtjYXNlImJvb2xlYW4iOnJldHVybiExO2Nhc2Uic3RyaW5nIjpyZXR1cm4iIjtjYXNlIm51bWJlciI6cmV0dXJuIDA7Y2FzZSJvYmplY3QiOnJldHVybnt9fX1jbGFzcyBZMmV7Y29uc3RydWN0b3Iocyl7dGhpcy5kaXNwbGF5TW9kZT12b2lkIDAsdGhpcy5vdXRwdXQ9dm9pZCAwLHRoaXMubGVxbm89dm9pZCAwLHRoaXMuZmxlcW49dm9pZCAwLHRoaXMudGhyb3dPbkVycm9yPXZvaWQgMCx0aGlzLmVycm9yQ29sb3I9dm9pZCAwLHRoaXMubWFjcm9zPXZvaWQgMCx0aGlzLm1pblJ1bGVUaGlja25lc3M9dm9pZCAwLHRoaXMuY29sb3JJc1RleHRDb2xvcj12b2lkIDAsdGhpcy5zdHJpY3Q9dm9pZCAwLHRoaXMudHJ1c3Q9dm9pZCAwLHRoaXMubWF4U2l6ZT12b2lkIDAsdGhpcy5tYXhFeHBhbmQ9dm9pZCAwLHRoaXMuZ2xvYmFsR3JvdXA9dm9pZCAwLHM9c3x8e307Zm9yKHZhciB1IGluIHJRKWlmKHJRLmhhc093blByb3BlcnR5KHUpKXt2YXIgZD1yUVt1XTt0aGlzW3VdPXNbdV0hPT12b2lkIDA/ZC5wcm9jZXNzb3I/ZC5wcm9jZXNzb3Ioc1t1XSk6c1t1XTpxcXQoZCl9fXJlcG9ydE5vbnN0cmljdChzLHUsZCl7dmFyIHA9dGhpcy5zdHJpY3Q7aWYodHlwZW9mIHA9PSJmdW5jdGlvbiImJihwPXAocyx1LGQpKSwhKCFwfHxwPT09Imlnbm9yZSIpKXtpZihwPT09ITB8fHA9PT0iZXJyb3IiKXRocm93IG5ldyBDaSgiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gJ2Vycm9yJzogIisodSsiIFsiK3MrIl0iKSxkKTtwPT09Indhcm4iP3R5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byAnd2Fybic6ICIrKHUrIiBbIitzKyJdIikpOnR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byAiKygidW5yZWNvZ25pemVkICciK3ArIic6ICIrdSsiIFsiK3MrIl0iKSl9fXVzZVN0cmljdEJlaGF2aW9yKHMsdSxkKXt2YXIgcD10aGlzLnN0cmljdDtpZih0eXBlb2YgcD09ImZ1bmN0aW9uIil0cnl7cD1wKHMsdSxkKX1jYXRjaHtwPSJlcnJvciJ9cmV0dXJuIXB8fHA9PT0iaWdub3JlIj8hMTpwPT09ITB8fHA9PT0iZXJyb3IiPyEwOnA9PT0id2FybiI/KHR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byAnd2Fybic6ICIrKHUrIiBbIitzKyJdIikpLCExKToodHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLndhcm4oIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICIrKCJ1bnJlY29nbml6ZWQgJyIrcCsiJzogIit1KyIgWyIrcysiXSIpKSwhMSl9aXNUcnVzdGVkKHMpe3MudXJsJiYhcy5wcm90b2NvbCYmKHMucHJvdG9jb2w9WWEucHJvdG9jb2xGcm9tVXJsKHMudXJsKSk7dmFyIHU9dHlwZW9mIHRoaXMudHJ1c3Q9PSJmdW5jdGlvbiI/dGhpcy50cnVzdChzKTp0aGlzLnRydXN0O3JldHVybiEhdX19Y2xhc3MgRTl7Y29uc3RydWN0b3Iocyx1LGQpe3RoaXMuaWQ9dm9pZCAwLHRoaXMuc2l6ZT12b2lkIDAsdGhpcy5jcmFtcGVkPXZvaWQgMCx0aGlzLmlkPXMsdGhpcy5zaXplPXUsdGhpcy5jcmFtcGVkPWR9c3VwKCl7cmV0dXJuIEc0W0hxdFt0aGlzLmlkXV19c3ViKCl7cmV0dXJuIEc0W1ZxdFt0aGlzLmlkXV19ZnJhY051bSgpe3JldHVybiBHNFtVcXRbdGhpcy5pZF1dfWZyYWNEZW4oKXtyZXR1cm4gRzRbR3F0W3RoaXMuaWRdXX1jcmFtcCgpe3JldHVybiBHNFtLcXRbdGhpcy5pZF1dfXRleHQoKXtyZXR1cm4gRzRbV3F0W3RoaXMuaWRdXX1pc1RpZ2h0KCl7cmV0dXJuIHRoaXMuc2l6ZT49Mn19dmFyIFgyZT0wLGlRPTEsREQ9MixMNz0zLGFSPTQsUHY9NSxJRD02LE1wPTcsRzQ9W25ldyBFOShYMmUsMCwhMSksbmV3IEU5KGlRLDAsITApLG5ldyBFOShERCwxLCExKSxuZXcgRTkoTDcsMSwhMCksbmV3IEU5KGFSLDIsITEpLG5ldyBFOShQdiwyLCEwKSxuZXcgRTkoSUQsMywhMSksbmV3IEU5KE1wLDMsITApXSxIcXQ9W2FSLFB2LGFSLFB2LElELE1wLElELE1wXSxWcXQ9W1B2LFB2LFB2LFB2LE1wLE1wLE1wLE1wXSxVcXQ9W0RELEw3LGFSLFB2LElELE1wLElELE1wXSxHcXQ9W0w3LEw3LFB2LFB2LE1wLE1wLE1wLE1wXSxLcXQ9W2lRLGlRLEw3LEw3LFB2LFB2LE1wLE1wXSxXcXQ9W1gyZSxpUSxERCxMNyxERCxMNyxERCxMN10sVGE9e0RJU1BMQVk6RzRbWDJlXSxURVhUOkc0W0REXSxTQ1JJUFQ6RzRbYVJdLFNDUklQVFNDUklQVDpHNFtJRF19LFEyZT1be25hbWU6ImxhdGluIixibG9ja3M6W1syNTYsNTkxXSxbNzY4LDg3OV1dfSx7bmFtZToiY3lyaWxsaWMiLGJsb2NrczpbWzEwMjQsMTI3OV1dfSx7bmFtZToiYXJtZW5pYW4iLGJsb2NrczpbWzEzMjgsMTQyM11dfSx7bmFtZToiYnJhaG1pYyIsYmxvY2tzOltbMjMwNCw0MjU1XV19LHtuYW1lOiJnZW9yZ2lhbiIsYmxvY2tzOltbNDI1Niw0MzUxXV19LHtuYW1lOiJjamsiLGJsb2NrczpbWzEyMjg4LDEyNTQzXSxbMTk5NjgsNDA4NzldLFs2NTI4MCw2NTM3Nl1dfSx7bmFtZToiaGFuZ3VsIixibG9ja3M6W1s0NDAzMiw1NTIxNV1dfV07ZnVuY3Rpb24gWXF0KGkpe2Zvcih2YXIgcz0wO3M8UTJlLmxlbmd0aDtzKyspZm9yKHZhciB1PVEyZVtzXSxkPTA7ZDx1LmJsb2Nrcy5sZW5ndGg7ZCsrKXt2YXIgcD11LmJsb2Nrc1tkXTtpZihpPj1wWzBdJiZpPD1wWzFdKXJldHVybiB1Lm5hbWV9cmV0dXJuIG51bGx9dmFyIHNRPVtdO1EyZS5mb3JFYWNoKGk9PmkuYmxvY2tzLmZvckVhY2gocz0+c1EucHVzaCguLi5zKSkpO2Z1bmN0aW9uIEskZShpKXtmb3IodmFyIHM9MDtzPHNRLmxlbmd0aDtzKz0yKWlmKGk+PXNRW3NdJiZpPD1zUVtzKzFdKXJldHVybiEwO3JldHVybiExfXZhciBPRD04MCxYcXQ9ZnVuY3Rpb24ocyx1KXtyZXR1cm4iTTk1LCIrKDYyMitzK3UpK2AKYy0yLjcsMCwtNy4xNywtMi43LC0xMy41LC04Yy01LjgsLTUuMywtOS41LC0xMCwtOS41LC0xNApjMCwtMiwwLjMsLTMuMywxLC00YzEuMywtMi43LDIzLjgzLC0yMC43LDY3LjUsLTU0CmM0NC4yLC0zMy4zLDY1LjgsLTUwLjMsNjYuNSwtNTFjMS4zLC0xLjMsMywtMiw1LC0yYzQuNywwLDguNywzLjMsMTIsMTAKczE3MywzNzgsMTczLDM3OGMwLjcsMCwzNS4zLC03MSwxMDQsLTIxM2M2OC43LC0xNDIsMTM3LjUsLTI4NSwyMDYuNSwtNDI5CmM2OSwtMTQ0LDEwNC41LC0yMTcuNywxMDYuNSwtMjIxCmxgK3MvMi4wNzUrIiAtIitzK2AKYzUuMywtOS4zLDEyLC0xNCwyMCwtMTQKSDQwMDAwMHZgKyg0MCtzKStgSDg0NS4yNzI0CnMtMjI1LjI3Miw0NjcsLTIyNS4yNzIsNDY3cy0yMzUsNDg2LC0yMzUsNDg2Yy0yLjcsNC43LC05LDcsLTE5LDcKYy02LDAsLTEwLC0xLC0xMiwtM3MtMTk0LC00MjIsLTE5NCwtNDIycy02NSw0NywtNjUsNDd6Ck1gKyg4MzQrcykrIiAiK3UrImg0MDAwMDB2IisoNDArcykrImgtNDAwMDAweiJ9LFFxdD1mdW5jdGlvbihzLHUpe3JldHVybiJNMjYzLCIrKDYwMStzK3UpK2BjMC43LDAsMTgsMzkuNyw1MiwxMTkKYzM0LDc5LjMsNjguMTY3LDE1OC43LDEwMi41LDIzOGMzNC4zLDc5LjMsNTEuOCwxMTkuMyw1Mi41LDEyMApjMzQwLC03MDQuNyw1MTAuNywtMTA2MC4zLDUxMiwtMTA2NwpsYCtzLzIuMDg0KyIgLSIrcytgCmM0LjcsLTcuMywxMSwtMTEsMTksLTExCkg0MDAwMHZgKyg0MCtzKStgSDEwMTIuMwpzLTI3MS4zLDU2NywtMjcxLjMsNTY3Yy0zOC43LDgwLjcsLTg0LDE3NSwtMTM2LDI4M2MtNTIsMTA4LC04OS4xNjcsMTg1LjMsLTExMS41LDIzMgpjLTIyLjMsNDYuNywtMzMuOCw3MC4zLC0zNC41LDcxYy00LjcsNC43LC0xMi4zLDcsLTIzLDdzLTEyLC0xLC0xMiwtMQpzLTEwOSwtMjUzLC0xMDksLTI1M2MtNzIuNywtMTY4LC0xMDkuMywtMjUyLC0xMTAsLTI1MmMtMTAuNyw4LC0yMiwxNi43LC0zNCwyNgpjLTIyLDE3LjMsLTMzLjMsMjYsLTM0LDI2cy0yNiwtMjYsLTI2LC0yNnM3NiwtNTksNzYsLTU5czc2LC02MCw3NiwtNjB6Ck1gKygxMDAxK3MpKyIgIit1KyJoNDAwMDAwdiIrKDQwK3MpKyJoLTQwMDAwMHoifSxKcXQ9ZnVuY3Rpb24ocyx1KXtyZXR1cm4iTTk4MyAiKygxMCtzK3UpK2AKbGArcy8zLjEzKyIgLSIrcytgCmM0LC02LjcsMTAsLTEwLDE4LC0xMCBINDAwMDAwdmArKDQwK3MpK2AKSDEwMTMuMXMtODMuNCwyNjgsLTI2NC4xLDg0MGMtMTgwLjcsNTcyLC0yNzcsODc2LjMsLTI4OSw5MTNjLTQuNyw0LjcsLTEyLjcsNywtMjQsNwpzLTEyLDAsLTEyLDBjLTEuMywtMy4zLC0zLjcsLTExLjcsLTcsLTI1Yy0zNS4zLC0xMjUuMywtMTA2LjcsLTM3My4zLC0yMTQsLTc0NApjLTEwLDEyLC0yMSwyNSwtMzMsMzlzLTMyLDM5LC0zMiwzOWMtNiwtNS4zLC0xNSwtMTQsLTI3LC0yNnMyNSwtMzAsMjUsLTMwCmMyNi43LC0zMi43LDUyLC02Myw3NiwtOTFzNTIsLTYwLDUyLC02MHMyMDgsNzIyLDIwOCw3MjIKYzU2LC0xNzUuMywxMjYuMywtMzk3LjMsMjExLC02NjZjODQuNywtMjY4LjcsMTUzLjgsLTQ4OC4yLDIwNy41LC02NTguNQpjNTMuNywtMTcwLjMsODQuNSwtMjY2LjgsOTIuNSwtMjg5LjV6Ck1gKygxMDAxK3MpKyIgIit1KyJoNDAwMDAwdiIrKDQwK3MpKyJoLTQwMDAwMHoifSxacXQ9ZnVuY3Rpb24ocyx1KXtyZXR1cm4iTTQyNCwiKygyMzk4K3MrdSkrYApjLTEuMywtMC43LC0zOC41LC0xNzIsLTExMS41LC01MTRjLTczLC0zNDIsLTEwOS44LC01MTMuMywtMTEwLjUsLTUxNApjMCwtMiwtMTAuNywxNC4zLC0zMiw0OWMtNC43LDcuMywtOS44LDE1LjcsLTE1LjUsMjVjLTUuNyw5LjMsLTkuOCwxNiwtMTIuNSwyMApzLTUsNywtNSw3Yy00LC0zLjMsLTguMywtNy43LC0xMywtMTNzLTEzLC0xMywtMTMsLTEzczc2LC0xMjIsNzYsLTEyMnM3NywtMTIxLDc3LC0xMjEKczIwOSw5NjgsMjA5LDk2OGMwLC0yLDg0LjcsLTM2MS43LDI1NCwtMTA3OWMxNjkuMywtNzE3LjMsMjU0LjcsLTEwNzcuNywyNTYsLTEwODEKbGArcy80LjIyMysiIC0iK3MrYGM0LC02LjcsMTAsLTEwLDE4LC0xMCBINDAwMDAwCnZgKyg0MCtzKStgSDEwMTQuNgpzLTg3LjMsMzc4LjcsLTI3Mi42LDExNjZjLTE4NS4zLDc4Ny4zLC0yNzkuMywxMTgyLjMsLTI4MiwxMTg1CmMtMiw2LC0xMCw5LC0yNCw5CmMtOCwwLC0xMiwtMC43LC0xMiwtMnogTWArKDEwMDErcykrIiAiK3UrYApoNDAwMDAwdmArKDQwK3MpKyJoLTQwMDAwMHoifSxlSHQ9ZnVuY3Rpb24ocyx1KXtyZXR1cm4iTTQ3MywiKygyNzEzK3MrdSkrYApjMzM5LjMsLTE3OTkuMyw1MDkuMywtMjcwMCw1MTAsLTI3MDIgbGArcy81LjI5OCsiIC0iK3MrYApjMy4zLC03LjMsOS4zLC0xMSwxOCwtMTEgSDQwMDAwMHZgKyg0MCtzKStgSDEwMTcuNwpzLTkwLjUsNDc4LC0yNzYuMiwxNDY2Yy0xODUuNyw5ODgsLTI3OS41LDE0ODMsLTI4MS41LDE0ODVjLTIsNiwtMTAsOSwtMjQsOQpjLTgsMCwtMTIsLTAuNywtMTIsLTJjMCwtMS4zLC01LjMsLTMyLC0xNiwtOTJjLTUwLjcsLTI5My4zLC0xMTkuNywtNjkzLjMsLTIwNywtMTIwMApjMCwtMS4zLC01LjMsOC43LC0xNiwzMGMtMTAuNywyMS4zLC0yMS4zLDQyLjcsLTMyLDY0cy0xNiwzMywtMTYsMzNzLTI2LC0yNiwtMjYsLTI2CnM3NiwtMTUzLDc2LC0xNTNzNzcsLTE1MSw3NywtMTUxYzAuNywwLjcsMzUuNywyMDIsMTA1LDYwNGM2Ny4zLDQwMC43LDEwMiw2MDIuNywxMDQsCjYwNnpNYCsoMTAwMStzKSsiICIrdSsiaDQwMDAwMHYiKyg0MCtzKSsiSDEwMTcuN3oifSx0SHQ9ZnVuY3Rpb24ocyl7dmFyIHU9cy8yO3JldHVybiJNNDAwMDAwICIrcysiIEgwIEwiK3UrIiAwIGw2NSA0NSBMMTQ1ICIrKHMtODApKyIgSDQwMDAwMHoifSxuSHQ9ZnVuY3Rpb24ocyx1LGQpe3ZhciBwPWQtNTQtdS1zO3JldHVybiJNNzAyICIrKHMrdSkrIkg0MDAwMDAiKyg0MCtzKStgCkg3NDJ2YCtwK2BsLTQgNC00IDRjLS42NjcuNyAtMiAxLjUtNCAyLjVzLTQuMTY3IDEuODMzLTYuNSAyLjUtNS41IDEtOS41IDEKaC0xMmwtMjgtODRjLTE2LjY2Ny01Mi05Ni42NjcgLTI5NC4zMzMtMjQwLTcyN2wtMjEyIC02NDMgLTg1IDE3MApjLTQtMy4zMzMtOC4zMzMtNy42NjctMTMgLTEzbC0xMy0xM2w3Ny0xNTUgNzctMTU2YzY2IDE5OS4zMzMgMTM5IDQxOS42NjcKMjE5IDY2MSBsMjE4IDY2MXpNNzAyIGArdSsiSDQwMDAwMHYiKyg0MCtzKSsiSDc0MnoifSxySHQ9ZnVuY3Rpb24ocyx1LGQpe3U9MWUzKnU7dmFyIHA9IiI7c3dpdGNoKHMpe2Nhc2Uic3FydE1haW4iOnA9WHF0KHUsT0QpO2JyZWFrO2Nhc2Uic3FydFNpemUxIjpwPVFxdCh1LE9EKTticmVhaztjYXNlInNxcnRTaXplMiI6cD1KcXQodSxPRCk7YnJlYWs7Y2FzZSJzcXJ0U2l6ZTMiOnA9WnF0KHUsT0QpO2JyZWFrO2Nhc2Uic3FydFNpemU0IjpwPWVIdCh1LE9EKTticmVhaztjYXNlInNxcnRUYWxsIjpwPW5IdCh1LE9ELGQpfXJldHVybiBwfSxpSHQ9ZnVuY3Rpb24ocyx1KXtzd2l0Y2gocyl7Y2FzZSLijpwiOnJldHVybiJNMjkxIDAgSDQxNyBWIit1KyIgSDI5MXogTTI5MSAwIEg0MTcgViIrdSsiIEgyOTF6IjtjYXNlIuKIoyI6cmV0dXJuIk0xNDUgMCBIMTg4IFYiK3UrIiBIMTQ1eiBNMTQ1IDAgSDE4OCBWIit1KyIgSDE0NXoiO2Nhc2Ui4oilIjpyZXR1cm4iTTE0NSAwIEgxODggViIrdSsiIEgxNDV6IE0xNDUgMCBIMTg4IFYiK3UrIiBIMTQ1eiIrKCJNMzY3IDAgSDQxMCBWIit1KyIgSDM2N3ogTTM2NyAwIEg0MTAgViIrdSsiIEgzNjd6Iik7Y2FzZSLijp8iOnJldHVybiJNNDU3IDAgSDU4MyBWIit1KyIgSDQ1N3ogTTQ1NyAwIEg1ODMgViIrdSsiIEg0NTd6IjtjYXNlIuKOoiI6cmV0dXJuIk0zMTkgMCBINDAzIFYiK3UrIiBIMzE5eiBNMzE5IDAgSDQwMyBWIit1KyIgSDMxOXoiO2Nhc2Ui4o6lIjpyZXR1cm4iTTI2MyAwIEgzNDcgViIrdSsiIEgyNjN6IE0yNjMgMCBIMzQ3IFYiK3UrIiBIMjYzeiI7Y2FzZSLijqoiOnJldHVybiJNMzg0IDAgSDUwNCBWIit1KyIgSDM4NHogTTM4NCAwIEg1MDQgViIrdSsiIEgzODR6IjtjYXNlIuKPkCI6cmV0dXJuIk0zMTIgMCBIMzU1IFYiK3UrIiBIMzEyeiBNMzEyIDAgSDM1NSBWIit1KyIgSDMxMnoiO2Nhc2Ui4oCWIjpyZXR1cm4iTTI1NyAwIEgzMDAgViIrdSsiIEgyNTd6IE0yNTcgMCBIMzAwIFYiK3UrIiBIMjU3eiIrKCJNNDc4IDAgSDUyMSBWIit1KyIgSDQ3OHogTTQ3OCAwIEg1MjEgViIrdSsiIEg0Nzh6Iik7ZGVmYXVsdDpyZXR1cm4iIn19LFckZT17ZG91YmxlbGVmdGFycm93OmBNMjYyIDE1NwpsMTAtMTBjMzQtMzYgNjIuNy03NyA4Ni0xMjMgMy4zLTggNS0xMy4zIDUtMTYgMC01LjMtNi43LTgtMjAtOC03LjMKIDAtMTIuMi41LTE0LjUgMS41LTIuMyAxLTQuOCA0LjUtNy41IDEwLjUtNDkuMyA5Ny4zLTEyMS43IDE2OS4zLTIxNyAyMTYtMjgKIDE0LTU3LjMgMjUtODggMzMtNi43IDItMTEgMy44LTEzIDUuNS0yIDEuNy0zIDQuMi0zIDcuNXMxIDUuOCAzIDcuNQpjMiAxLjcgNi4zIDMuNSAxMyA1LjUgNjggMTcuMyAxMjguMiA0Ny44IDE4MC41IDkxLjUgNTIuMyA0My43IDkzLjggOTYuMiAxMjQuNQogMTU3LjUgOS4zIDggMTUuMyAxMi4zIDE4IDEzaDZjMTItLjcgMTgtNCAxOC0xMCAwLTItMS43LTctNS0xNS0yMy4zLTQ2LTUyLTg3Ci04Ni0xMjNsLTEwLTEwaDM5OTczOHYtNDBIMjE4YzMyOCAwIDAgMCAwIDBsLTEwLThjLTI2LjctMjAtNjUuNy00My0xMTctNjkgMi43Ci0yIDYtMy43IDEwLTUgMzYuNy0xNiA3Mi4zLTM3LjMgMTA3LTY0bDEwLThoMzk5Nzgydi00MHoKbTggMHY0MGgzOTk3MzB2LTQwem0wIDE5NHY0MGgzOTk3MzB2LTQwemAsZG91YmxlcmlnaHRhcnJvdzpgTTM5OTczOCAzOTJsCi0xMCAxMGMtMzQgMzYtNjIuNyA3Ny04NiAxMjMtMy4zIDgtNSAxMy4zLTUgMTYgMCA1LjMgNi43IDggMjAgOCA3LjMgMCAxMi4yLS41CiAxNC41LTEuNSAyLjMtMSA0LjgtNC41IDcuNS0xMC41IDQ5LjMtOTcuMyAxMjEuNy0xNjkuMyAyMTctMjE2IDI4LTE0IDU3LjMtMjUgODgKLTMzIDYuNy0yIDExLTMuOCAxMy01LjUgMi0xLjcgMy00LjIgMy03LjVzLTEtNS44LTMtNy41Yy0yLTEuNy02LjMtMy41LTEzLTUuNS02OAotMTcuMy0xMjguMi00Ny44LTE4MC41LTkxLjUtNTIuMy00My43LTkzLjgtOTYuMi0xMjQuNS0xNTcuNS05LjMtOC0xNS4zLTEyLjMtMTgKLTEzaC02Yy0xMiAuNy0xOCA0LTE4IDEwIDAgMiAxLjcgNyA1IDE1IDIzLjMgNDYgNTIgODcgODYgMTIzbDEwIDEwSDB2NDBoMzk5NzgyCmMtMzI4IDAgMCAwIDAgMGwxMCA4YzI2LjcgMjAgNjUuNyA0MyAxMTcgNjktMi43IDItNiAzLjctMTAgNS0zNi43IDE2LTcyLjMgMzcuMwotMTA3IDY0bC0xMCA4SDB2NDB6TTAgMTU3djQwaDM5OTczMHYtNDB6bTAgMTk0djQwaDM5OTczMHYtNDB6YCxsZWZ0YXJyb3c6YE00MDAwMDAgMjQxSDExMGwzLTNjNjguNy01Mi43IDExMy43LTEyMAogMTM1LTIwMiA0LTE0LjcgNi0yMyA2LTI1IDAtNy4zLTctMTEtMjEtMTEtOCAwLTEzLjIuOC0xNS41IDIuNS0yLjMgMS43LTQuMiA1LjgKLTUuNSAxMi41LTEuMyA0LjctMi43IDEwLjMtNCAxNy0xMiA0OC43LTM0LjggOTItNjguNSAxMzBTNjUuMyAyMjguMyAxOCAyNDcKYy0xMCA0LTE2IDcuNy0xOCAxMSAwIDguNyA2IDE0LjMgMTggMTcgNDcuMyAxOC43IDg3LjggNDcgMTIxLjUgODVTMTk2IDQ0MS4zIDIwOAogNDkwYy43IDIgMS4zIDUgMiA5czEuMiA2LjcgMS41IDhjLjMgMS4zIDEgMy4zIDIgNnMyLjIgNC41IDMuNSA1LjVjMS4zIDEgMy4zCiAxLjggNiAyLjVzNiAxIDEwIDFjMTQgMCAyMS0zLjcgMjEtMTEgMC0yLTItMTAuMy02LTI1LTIwLTc5LjMtNjUtMTQ2LjctMTM1LTIwMgogbC0zLTNoMzk5ODkwek0xMDAgMjQxdjQwaDM5OTkwMHYtNDB6YCxsZWZ0YnJhY2U6YE02IDU0OGwtNi02di0zNWw2LTExYzU2LTEwNCAxMzUuMy0xODEuMyAyMzgtMjMyIDU3LjMtMjguNyAxMTcKLTQ1IDE3OS01MGgzOTk1Nzd2MTIwSDQwM2MtNDMuMyA3LTgxIDE1LTExMyAyNi0xMDAuNyAzMy0xNzkuNyA5MS0yMzcgMTc0LTIuNwogNS02IDktMTAgMTMtLjcgMS03LjMgMS0yMCAxSDZ6YCxsZWZ0YnJhY2V1bmRlcjpgTTAgNmw2LTZoMTdjMTIuNjg4IDAgMTkuMzEzLjMgMjAgMSA0IDQgNy4zMTMgOC4zIDEwIDEzCiAzNS4zMTMgNTEuMyA4MC44MTMgOTMuOCAxMzYuNSAxMjcuNSA1NS42ODggMzMuNyAxMTcuMTg4IDU1LjggMTg0LjUgNjYuNS42ODgKIDAgMiAuMyA0IDEgMTguNjg4IDIuNyA3NiA0LjMgMTcyIDVoMzk5NDUwdjEyMEg0MjlsLTYtMWMtMTI0LjY4OC04LTIzNS02MS43Ci0zMzEtMTYxQzYwLjY4NyAxMzguNyAzMi4zMTIgOTkuMyA3IDU0TDAgNDFWNnpgLGxlZnRncm91cDpgTTQwMDAwMCA4MApINDM1QzY0IDgwIDE2OC4zIDIyOS40IDIxIDI2MGMtNS45IDEuMi0xOCAwLTE4IDAtMiAwLTMtMS0zLTN2LTM4Qzc2IDYxIDI1NyAwCiA0MzUgMGgzOTk1NjV6YCxsZWZ0Z3JvdXB1bmRlcjpgTTQwMDAwMCAyNjIKSDQzNUM2NCAyNjIgMTY4LjMgMTEyLjYgMjEgODJjLTUuOS0xLjItMTggMC0xOCAwLTIgMC0zIDEtMyAzdjM4Yzc2IDE1OCAyNTcgMjE5CiA0MzUgMjE5aDM5OTU2NXpgLGxlZnRoYXJwb29uOmBNMCAyNjdjLjcgNS4zIDMgMTAgNyAxNGgzOTk5OTN2LTQwSDkzYzMuMwotMy4zIDEwLjItOS41IDIwLjUtMTguNXMxNy44LTE1LjggMjIuNS0yMC41YzUwLjctNTIgODgtMTEwLjMgMTEyLTE3NSA0LTExLjMgNQotMTguMyAzLTIxLTEuMy00LTcuMy02LTE4LTYtOCAwLTEzIC43LTE1IDJzLTQuNyA2LjctOCAxNmMtNDIgOTguNy0xMDcuMyAxNzQuNwotMTk2IDIyOC02LjcgNC43LTEwLjcgOC0xMiAxMC0xLjMgMi0yIDUuNy0yIDExem0xMDAtMjZ2NDBoMzk5OTAwdi00MHpgLGxlZnRoYXJwb29ucGx1czpgTTAgMjY3Yy43IDUuMyAzIDEwIDcgMTRoMzk5OTkzdi00MEg5M2MzLjMtMy4zIDEwLjItOS41CiAyMC41LTE4LjVzMTcuOC0xNS44IDIyLjUtMjAuNWM1MC43LTUyIDg4LTExMC4zIDExMi0xNzUgNC0xMS4zIDUtMTguMyAzLTIxLTEuMwotNC03LjMtNi0xOC02LTggMC0xMyAuNy0xNSAycy00LjcgNi43LTggMTZjLTQyIDk4LjctMTA3LjMgMTc0LjctMTk2IDIyOC02LjcgNC43Ci0xMC43IDgtMTIgMTAtMS4zIDItMiA1LjctMiAxMXptMTAwLTI2djQwaDM5OTkwMHYtNDB6TTAgNDM1djQwaDQwMDAwMHYtNDB6Cm0wIDB2NDBoNDAwMDAwdi00MHpgLGxlZnRoYXJwb29uZG93bjpgTTcgMjQxYy00IDQtNi4zMzMgOC42NjctNyAxNCAwIDUuMzMzLjY2NyA5IDIgMTFzNS4zMzMKIDUuMzMzIDEyIDEwYzkwLjY2NyA1NCAxNTYgMTMwIDE5NiAyMjggMy4zMzMgMTAuNjY3IDYuMzMzIDE2LjMzMyA5IDE3IDIgLjY2NyA1CiAxIDkgMWg1YzEwLjY2NyAwIDE2LjY2Ny0yIDE4LTYgMi0yLjY2NyAxLTkuNjY3LTMtMjEtMzItODcuMzMzLTgyLjY2Ny0xNTcuNjY3Ci0xNTItMjExbC0zLTNoMzk5OTA3di00MHpNOTMgMjgxIEg0MDAwMDAgdi00MEw3IDI0MXpgLGxlZnRoYXJwb29uZG93bnBsdXM6YE03IDQzNWMtNCA0LTYuMyA4LjctNyAxNCAwIDUuMy43IDkgMiAxMXM1LjMgNS4zIDEyCiAxMGM5MC43IDU0IDE1NiAxMzAgMTk2IDIyOCAzLjMgMTAuNyA2LjMgMTYuMyA5IDE3IDIgLjcgNSAxIDkgMWg1YzEwLjcgMCAxNi43Ci0yIDE4LTYgMi0yLjcgMS05LjctMy0yMS0zMi04Ny4zLTgyLjctMTU3LjctMTUyLTIxMWwtMy0zaDM5OTkwN3YtNDBIN3ptOTMgMAp2NDBoMzk5OTAwdi00MHpNMCAyNDF2NDBoMzk5OTAwdi00MHptMCAwdjQwaDM5OTkwMHYtNDB6YCxsZWZ0aG9vazpgTTQwMDAwMCAyODEgSDEwM3MtMzMtMTEuMi02MS0zMy41UzAgMTk3LjMgMCAxNjRzMTQuMi02MS4yIDQyLjUKLTgzLjVDNzAuOCA1OC4yIDEwNCA0NyAxNDIgNDcgYzE2LjcgMCAyNSA2LjcgMjUgMjAgMCAxMi04LjcgMTguNy0yNiAyMC00MCAzLjMKLTY4LjcgMTUuNy04NiAzNy0xMCAxMi0xNSAyNS4zLTE1IDQwIDAgMjIuNyA5LjggNDAuNyAyOS41IDU0IDE5LjcgMTMuMyA0My41IDIxCiA3MS41IDIzaDM5OTg1OXpNMTAzIDI4MXYtNDBoMzk5ODk3djQwemAsbGVmdGxpbmVzZWdtZW50OmBNNDAgMjgxIFY0MjggSDAgVjk0IEg0MCBWMjQxIEg0MDAwMDAgdjQwegpNNDAgMjgxIFY0MjggSDAgVjk0IEg0MCBWMjQxIEg0MDAwMDAgdjQwemAsbGVmdG1hcHN0bzpgTTQwIDI4MSBWNDQ4SDBWNzRINDBWMjQxSDQwMDAwMHY0MHoKTTQwIDI4MSBWNDQ4SDBWNzRINDBWMjQxSDQwMDAwMHY0MHpgLGxlZnRUb0Zyb206YE0wIDE0N2g0MDAwMDB2NDBIMHptMCAyMTRjNjggNDAgMTE1LjcgOTUuNyAxNDMgMTY3aDIyYzE1LjMgMCAyMwotLjMgMjMtMSAwLTEuMy01LjMtMTMuNy0xNi0zNy0xOC0zNS4zLTQxLjMtNjktNzAtMTAxbC03LThoMzk5OTA1di00MEg5NWw3LTgKYzI4LjctMzIgNTItNjUuNyA3MC0xMDEgMTAuNy0yMy4zIDE2LTM1LjcgMTYtMzcgMC0uNy03LjctMS0yMy0xaC0yMkMxMTUuNyAyNjUuMwogNjggMzIxIDAgMzYxem0wLTE3NHYtNDBoMzk5OTAwdjQwem0xMDAgMTU0djQwaDM5OTkwMHYtNDB6YCxsb25nZXF1YWw6YE0wIDUwIGg0MDAwMDAgdjQwSDB6IG0wIDE5NGg0MDAwMHY0MEgwegpNMCA1MCBoNDAwMDAwIHY0MEgweiBtMCAxOTRoNDAwMDB2NDBIMHpgLG1pZGJyYWNlOmBNMjAwNDI4IDMzNApjLTEwMC43LTguMy0xOTUuMy00NC0yODAtMTA4LTU1LjMtNDItMTAxLjctOTMtMTM5LTE1M2wtOS0xNGMtMi43IDQtNS43IDguNy05IDE0Ci01My4zIDg2LjctMTIzLjcgMTUzLTIxMSAxOTktNjYuNyAzNi0xMzcuMyA1Ni4zLTIxMiA2MkgwVjIxNGgxOTk1NjhjMTc4LjMtMTEuNwogMzExLjctNzguMyA0MDMtMjAxIDYtOCA5LjctMTIgMTEtMTIgLjctLjcgNi43LTEgMTgtMXMxNy4zLjMgMTggMWMxLjMgMCA1IDQgMTEKIDEyIDQ0LjcgNTkuMyAxMDEuMyAxMDYuMyAxNzAgMTQxczE0NS4zIDU0LjMgMjI5IDYwaDE5OTU3MnYxMjB6YCxtaWRicmFjZXVuZGVyOmBNMTk5NTcyIDIxNApjMTAwLjcgOC4zIDE5NS4zIDQ0IDI4MCAxMDggNTUuMyA0MiAxMDEuNyA5MyAxMzkgMTUzbDkgMTRjMi43LTQgNS43LTguNyA5LTE0CiA1My4zLTg2LjcgMTIzLjctMTUzIDIxMS0xOTkgNjYuNy0zNiAxMzcuMy01Ni4zIDIxMi02MmgxOTk1Njh2MTIwSDIwMDQzMmMtMTc4LjMKIDExLjctMzExLjcgNzguMy00MDMgMjAxLTYgOC05LjcgMTItMTEgMTItLjcuNy02LjcgMS0xOCAxcy0xNy4zLS4zLTE4LTFjLTEuMyAwCi01LTQtMTEtMTItNDQuNy01OS4zLTEwMS4zLTEwNi4zLTE3MC0xNDFzLTE0NS4zLTU0LjMtMjI5LTYwSDBWMjE0emAsb2lpbnRTaXplMTpgTTUxMi42IDcxLjZjMjcyLjYgMCAzMjAuMyAxMDYuOCAzMjAuMyAxNzguMiAwIDcwLjgtNDcuNyAxNzcuNgotMzIwLjMgMTc3LjZTMTkzLjEgMzIwLjYgMTkzLjEgMjQ5LjhjMC03MS40IDQ2LjktMTc4LjIgMzE5LjUtMTc4LjJ6Cm0zNjguMSAxNzguMmMwLTg2LjQtNjAuOS0yMTUuNC0zNjguMS0yMTUuNC0zMDYuNCAwLTM2Ny4zIDEyOS0zNjcuMyAyMTUuNCAwIDg1LjgKNjAuOSAyMTQuOCAzNjcuMyAyMTQuOCAzMDcuMiAwIDM2OC4xLTEyOSAzNjguMS0yMTQuOHpgLG9paW50U2l6ZTI6YE03NTcuOCAxMDAuMWMzODQuNyAwIDQ1MS4xIDEzNy42IDQ1MS4xIDIzMCAwIDkxLjMtNjYuNCAyMjguOAotNDUxLjEgMjI4LjgtMzg2LjMgMC00NTIuNy0xMzcuNS00NTIuNy0yMjguOCAwLTkyLjQgNjYuNC0yMzAgNDUyLjctMjMwegptNTAyLjQgMjMwYzAtMTExLjItODIuNC0yNzcuMi01MDIuNC0yNzcuMnMtNTA0IDE2Ni01MDQgMjc3LjIKYzAgMTEwIDg0IDI3NiA1MDQgMjc2czUwMi40LTE2NiA1MDIuNC0yNzZ6YCxvaWlpbnRTaXplMTpgTTY4MS40IDcxLjZjNDA4LjkgMCA0ODAuNSAxMDYuOCA0ODAuNSAxNzguMiAwIDcwLjgtNzEuNiAxNzcuNgotNDgwLjUgMTc3LjZTMjAyLjEgMzIwLjYgMjAyLjEgMjQ5LjhjMC03MS40IDcwLjUtMTc4LjIgNDc5LjMtMTc4LjJ6Cm01MjUuOCAxNzguMmMwLTg2LjQtODYuOC0yMTUuNC01MjUuNy0yMTUuNC00MzcuOSAwLTUyNC43IDEyOS01MjQuNyAyMTUuNCAwCjg1LjggODYuOCAyMTQuOCA1MjQuNyAyMTQuOCA0MzguOSAwIDUyNS43LTEyOSA1MjUuNy0yMTQuOHpgLG9paWludFNpemUyOmBNMTAyMS4yIDUzYzYwMy42IDAgNzA3LjggMTY1LjggNzA3LjggMjc3LjIgMCAxMTAtMTA0LjIgMjc1LjgKLTcwNy44IDI3NS44LTYwNiAwLTcxMC4yLTE2NS44LTcxMC4yLTI3NS44QzMxMSAyMTguOCA0MTUuMiA1MyAxMDIxLjIgNTN6Cm03NzAuNCAyNzcuMWMwLTEzMS4yLTEyNi40LTMyNy42LTc3MC41LTMyNy42UzI0OC40IDE5OC45IDI0OC40IDMzMC4xCmMwIDEzMCAxMjguOCAzMjYuNCA3NzIuNyAzMjYuNHM3NzAuNS0xOTYuNCA3NzAuNS0zMjYuNHpgLHJpZ2h0YXJyb3c6YE0wIDI0MXY0MGgzOTk4OTFjLTQ3LjMgMzUuMy04NCA3OC0xMTAgMTI4Ci0xNi43IDMyLTI3LjcgNjMuNy0zMyA5NSAwIDEuMy0uMiAyLjctLjUgNC0uMyAxLjMtLjUgMi4zLS41IDMgMCA3LjMgNi43IDExIDIwCiAxMSA4IDAgMTMuMi0uOCAxNS41LTIuNSAyLjMtMS43IDQuMi01LjUgNS41LTExLjUgMi0xMy4zIDUuNy0yNyAxMS00MSAxNC43LTQ0LjcKIDM5LTg0LjUgNzMtMTE5LjVzNzMuNy02MC4yIDExOS03NS41YzYtMiA5LTUuNyA5LTExcy0zLTktOS0xMWMtNDUuMy0xNS4zLTg1Ci00MC41LTExOS03NS41cy01OC4zLTc0LjgtNzMtMTE5LjVjLTQuNy0xNC04LjMtMjcuMy0xMS00MC0xLjMtNi43LTMuMi0xMC44LTUuNQotMTIuNS0yLjMtMS43LTcuNS0yLjUtMTUuNS0yLjUtMTQgMC0yMSAzLjctMjEgMTEgMCAyIDIgMTAuMyA2IDI1IDIwLjcgODMuMyA2NwogMTUxLjcgMTM5IDIwNXptMCAwdjQwaDM5OTkwMHYtNDB6YCxyaWdodGJyYWNlOmBNNDAwMDAwIDU0MmwKLTYgNmgtMTdjLTEyLjcgMC0xOS4zLS4zLTIwLTEtNC00LTcuMy04LjMtMTAtMTMtMzUuMy01MS4zLTgwLjgtOTMuOC0xMzYuNS0xMjcuNQpzLTExNy4yLTU1LjgtMTg0LjUtNjYuNWMtLjcgMC0yLS4zLTQtMS0xOC43LTIuNy03Ni00LjMtMTcyLTVIMFYyMTRoMzk5NTcxbDYgMQpjMTI0LjcgOCAyMzUgNjEuNyAzMzEgMTYxIDMxLjMgMzMuMyA1OS43IDcyLjcgODUgMTE4bDcgMTN2MzV6YCxyaWdodGJyYWNldW5kZXI6YE0zOTk5OTQgMGw2IDZ2MzVsLTYgMTFjLTU2IDEwNC0xMzUuMyAxODEuMy0yMzggMjMyLTU3LjMKIDI4LjctMTE3IDQ1LTE3OSA1MEgtMzAwVjIxNGgzOTk4OTdjNDMuMy03IDgxLTE1IDExMy0yNiAxMDAuNy0zMyAxNzkuNy05MSAyMzcKLTE3NCAyLjctNSA2LTkgMTAtMTMgLjctMSA3LjMtMSAyMC0xaDE3emAscmlnaHRncm91cDpgTTAgODBoMzk5NTY1YzM3MSAwIDI2Ni43IDE0OS40IDQxNCAxODAgNS45IDEuMiAxOCAwIDE4IDAgMiAwCiAzLTEgMy0zdi0zOGMtNzYtMTU4LTI1Ny0yMTktNDM1LTIxOUgwemAscmlnaHRncm91cHVuZGVyOmBNMCAyNjJoMzk5NTY1YzM3MSAwIDI2Ni43LTE0OS40IDQxNC0xODAgNS45LTEuMiAxOCAwIDE4CiAwIDIgMCAzIDEgMyAzdjM4Yy03NiAxNTgtMjU3IDIxOS00MzUgMjE5SDB6YCxyaWdodGhhcnBvb246YE0wIDI0MXY0MGgzOTk5OTNjNC43LTQuNyA3LTkuMyA3LTE0IDAtOS4zCi0zLjctMTUuMy0xMS0xOC05Mi43LTU2LjctMTU5LTEzMy43LTE5OS0yMzEtMy4zLTkuMy02LTE0LjctOC0xNi0yLTEuMy03LTItMTUtMgotMTAuNyAwLTE2LjcgMi0xOCA2LTIgMi43LTEgOS43IDMgMjEgMTUuMyA0MiAzNi43IDgxLjggNjQgMTE5LjUgMjcuMyAzNy43IDU4CiA2OS4yIDkyIDk0LjV6bTAgMHY0MGgzOTk5MDB2LTQwemAscmlnaHRoYXJwb29ucGx1czpgTTAgMjQxdjQwaDM5OTk5M2M0LjctNC43IDctOS4zIDctMTQgMC05LjMtMy43LTE1LjMtMTEKLTE4LTkyLjctNTYuNy0xNTktMTMzLjctMTk5LTIzMS0zLjMtOS4zLTYtMTQuNy04LTE2LTItMS4zLTctMi0xNS0yLTEwLjcgMC0xNi43CiAyLTE4IDYtMiAyLjctMSA5LjcgMyAyMSAxNS4zIDQyIDM2LjcgODEuOCA2NCAxMTkuNSAyNy4zIDM3LjcgNTggNjkuMiA5MiA5NC41egptMCAwdjQwaDM5OTkwMHYtNDB6IG0xMDAgMTk0djQwaDM5OTkwMHYtNDB6bTAgMHY0MGgzOTk5MDB2LTQwemAscmlnaHRoYXJwb29uZG93bjpgTTM5OTc0NyA1MTFjMCA3LjMgNi43IDExIDIwIDExIDggMCAxMy0uOCAxNS0yLjVzNC43LTYuOAogOC0xNS41YzQwLTk0IDk5LjMtMTY2LjMgMTc4LTIxNyAxMy4zLTggMjAuMy0xMi4zIDIxLTEzIDUuMy0zLjMgOC41LTUuOCA5LjUKLTcuNSAxLTEuNyAxLjUtNS4yIDEuNS0xMC41cy0yLjMtMTAuMy03LTE1SDB2NDBoMzk5OTA4Yy0zNCAyNS4zLTY0LjcgNTctOTIgOTUKLTI3LjMgMzgtNDguNyA3Ny43LTY0IDExOS0zLjMgOC43LTUgMTQtNSAxNnpNMCAyNDF2NDBoMzk5OTAwdi00MHpgLHJpZ2h0aGFycG9vbmRvd25wbHVzOmBNMzk5NzQ3IDcwNWMwIDcuMyA2LjcgMTEgMjAgMTEgOCAwIDEzLS44CiAxNS0yLjVzNC43LTYuOCA4LTE1LjVjNDAtOTQgOTkuMy0xNjYuMyAxNzgtMjE3IDEzLjMtOCAyMC4zLTEyLjMgMjEtMTMgNS4zLTMuMwogOC41LTUuOCA5LjUtNy41IDEtMS43IDEuNS01LjIgMS41LTEwLjVzLTIuMy0xMC4zLTctMTVIMHY0MGgzOTk5MDhjLTM0IDI1LjMKLTY0LjcgNTctOTIgOTUtMjcuMyAzOC00OC43IDc3LjctNjQgMTE5LTMuMyA4LjctNSAxNC01IDE2ek0wIDQzNXY0MGgzOTk5MDB2LTQwegptMC0xOTR2NDBoNDAwMDAwdi00MHptMCAwdjQwaDQwMDAwMHYtNDB6YCxyaWdodGhvb2s6YE0zOTk4NTkgMjQxYy03NjQgMCAwIDAgMCAwIDQwLTMuMyA2OC43LTE1LjcgODYtMzcgMTAtMTIgMTUtMjUuMwogMTUtNDAgMC0yMi43LTkuOC00MC43LTI5LjUtNTQtMTkuNy0xMy4zLTQzLjUtMjEtNzEuNS0yMy0xNy4zLTEuMy0yNi04LTI2LTIwIDAKLTEzLjMgOC43LTIwIDI2LTIwIDM4IDAgNzEgMTEuMiA5OSAzMy41IDAgMCA3IDUuNiAyMSAxNi43IDE0IDExLjIgMjEgMzMuNSAyMQogNjYuOHMtMTQgNjEuMi00MiA4My41Yy0yOCAyMi4zLTYxIDMzLjUtOTkgMzMuNUwwIDI0MXogTTAgMjgxdi00MGgzOTk4NTl2NDB6YCxyaWdodGxpbmVzZWdtZW50OmBNMzk5OTYwIDI0MSBWOTQgaDQwIFY0MjggaC00MCBWMjgxIEgwIHYtNDB6Ck0zOTk5NjAgMjQxIFY5NCBoNDAgVjQyOCBoLTQwIFYyODEgSDAgdi00MHpgLHJpZ2h0VG9Gcm9tOmBNNDAwMDAwIDE2N2MtNzAuNy00Mi0xMTgtOTcuNy0xNDItMTY3aC0yM2MtMTUuMyAwLTIzIC4zLTIzCiAxIDAgMS4zIDUuMyAxMy43IDE2IDM3IDE4IDM1LjMgNDEuMyA2OSA3MCAxMDFsNyA4SDB2NDBoMzk5OTA1bC03IDhjLTI4LjcgMzIKLTUyIDY1LjctNzAgMTAxLTEwLjcgMjMuMy0xNiAzNS43LTE2IDM3IDAgLjcgNy43IDEgMjMgMWgyM2MyNC02OS4zIDcxLjMtMTI1IDE0MgotMTY3eiBNMTAwIDE0N3Y0MGgzOTk5MDB2LTQwek0wIDM0MXY0MGgzOTk5MDB2LTQwemAsdHdvaGVhZGxlZnRhcnJvdzpgTTAgMTY3YzY4IDQwCiAxMTUuNyA5NS43IDE0MyAxNjdoMjJjMTUuMyAwIDIzLS4zIDIzLTEgMC0xLjMtNS4zLTEzLjctMTYtMzctMTgtMzUuMy00MS4zLTY5Ci03MC0xMDFsLTctOGgxMjVsOSA3YzUwLjcgMzkuMyA4NSA4NiAxMDMgMTQwaDQ2YzAtNC43LTYuMy0xOC43LTE5LTQyLTE4LTM1LjMKLTQwLTY3LjMtNjYtOTZsLTktOWgzOTk3MTZ2LTQwSDI4NGw5LTljMjYtMjguNyA0OC02MC43IDY2LTk2IDEyLjctMjMuMzMzIDE5Ci0zNy4zMzMgMTktNDJoLTQ2Yy0xOCA1NC01Mi4zIDEwMC43LTEwMyAxNDBsLTkgN0g5NWw3LThjMjguNy0zMiA1Mi02NS43IDcwLTEwMQogMTAuNy0yMy4zMzMgMTYtMzUuNyAxNi0zNyAwLS43LTcuNy0xLTIzLTFoLTIyQzExNS43IDcxLjMgNjggMTI3IDAgMTY3emAsdHdvaGVhZHJpZ2h0YXJyb3c6YE00MDAwMDAgMTY3CmMtNjgtNDAtMTE1LjctOTUuNy0xNDMtMTY3aC0yMmMtMTUuMyAwLTIzIC4zLTIzIDEgMCAxLjMgNS4zIDEzLjcgMTYgMzcgMTggMzUuMwogNDEuMyA2OSA3MCAxMDFsNyA4aC0xMjVsLTktN2MtNTAuNy0zOS4zLTg1LTg2LTEwMy0xNDBoLTQ2YzAgNC43IDYuMyAxOC43IDE5IDQyCiAxOCAzNS4zIDQwIDY3LjMgNjYgOTZsOSA5SDB2NDBoMzk5NzE2bC05IDljLTI2IDI4LjctNDggNjAuNy02NiA5Ni0xMi43IDIzLjMzMwotMTkgMzcuMzMzLTE5IDQyaDQ2YzE4LTU0IDUyLjMtMTAwLjcgMTAzLTE0MGw5LTdoMTI1bC03IDhjLTI4LjcgMzItNTIgNjUuNy03MAogMTAxLTEwLjcgMjMuMzMzLTE2IDM1LjctMTYgMzcgMCAuNyA3LjcgMSAyMyAxaDIyYzI3LjMtNzEuMyA3NS0xMjcgMTQzLTE2N3pgLHRpbGRlMTpgTTIwMCA1NS41MzhjLTc3IDAtMTY4IDczLjk1My0xNzcgNzMuOTUzLTMgMC03Ci0yLjE3NS05LTUuNDM3TDIgOTdjLTEtMi0yLTQtMi02IDAtNCAyLTcgNS05bDIwLTEyQzExNiAxMiAxNzEgMCAyMDcgMGM4NiAwCiAxMTQgNjggMTkxIDY4IDc4IDAgMTY4LTY4IDE3Ny02OCA0IDAgNyAyIDkgNWwxMiAxOWMxIDIuMTc1IDIgNC4zNSAyIDYuNTI1IDAKIDQuMzUtMiA3LjYxMy01IDkuNzg4bC0xOSAxMy4wNWMtOTIgNjMuMDc3LTExNi45MzcgNzUuMzA4LTE4MyA3Ni4xMjgKLTY4LjI2Ny44NDctMTEzLTczLjk1Mi0xOTEtNzMuOTUyemAsdGlsZGUyOmBNMzQ0IDU1LjI2NmMtMTQyIDAtMzAwLjYzOCA4MS4zMTYtMzExLjUgODYuNDE4Ci04LjAxIDMuNzYyLTIyLjUgMTAuOTEtMjMuNSA1LjU2MkwxIDEyMGMtMS0yLTEtMy0xLTQgMC01IDMtOSA4LTEwbDE4LjQtOUMxNjAuOQogMzEuOSAyODMgMCAzNTggMGMxNDggMCAxODggMTIyIDMzMSAxMjJzMzE0LTk3IDMyNi05N2M0IDAgOCAyIDEwIDdsNyAyMS4xMTQKYzEgMi4xNCAxIDMuMjEgMSA0LjI4IDAgNS4zNDctMyA5LjYyNi03IDEwLjY5NmwtMjIuMyAxMi42MjJDODUyLjYgMTU4LjM3MiA3NTEKIDE4MS40NzYgNjc2IDE4MS40NzZjLTE0OSAwLTE4OS0xMjYuMjEtMzMyLTEyNi4yMXpgLHRpbGRlMzpgTTc4NiA1OUM0NTcgNTkgMzIgMTc1LjI0MiAxMyAxNzUuMjQyYy02IDAtMTAtMy40NTcKLTExLTEwLjM3TC4xNSAxMzhjLTEtNyAzLTEyIDEwLTEzbDE5LjItNi40QzM3OC40IDQwLjcgNjM0LjMgMCA4MDQuMyAwYzMzNyAwCiA0MTEuOCAxNTcgNzQ2LjggMTU3IDMyOCAwIDc1NC0xMTIgNzczLTExMiA1IDAgMTAgMyAxMSA5bDEgMTQuMDc1YzEgOC4wNjYtLjY5NwogMTYuNTk1LTYuNjk3IDE3LjQ5MmwtMjEuMDUyIDcuMzFjLTM2Ny45IDk4LjE0Ni02MDkuMTUgMTIyLjY5Ni03NzguMTUgMTIyLjY5NgogLTMzOCAwLTQwOS0xNTYuNTczLTc0NC0xNTYuNTczemAsdGlsZGU0OmBNNzg2IDU4QzQ1NyA1OCAzMiAxNzcuNDg3IDEzIDE3Ny40ODdjLTYgMC0xMC0zLjM0NQotMTEtMTAuMDM1TC4xNSAxNDNjLTEtNyAzLTEyIDEwLTEzbDIyLTYuN0MzODEuMiAzNSA2MzcuMTUgMCA4MDcuMTUgMGMzMzcgMCA0MDkKIDE3NyA3NDQgMTc3IDMyOCAwIDc1NC0xMjcgNzczLTEyNyA1IDAgMTAgMyAxMSA5bDEgMTQuNzk0YzEgNy44MDUtMyAxMy4zOC05CiAxNC40OTVsLTIwLjcgNS41NzRjLTM2Ni44NSA5OS43OS02MDcuMyAxMzkuMzcyLTc3Ni4zIDEzOS4zNzItMzM4IDAtNDA5CiAtMTc1LjIzNi03NDQtMTc1LjIzNnpgLHZlYzpgTTM3NyAyMGMwLTUuMzMzIDEuODMzLTEwIDUuNS0xNFMzOTEgMCAzOTcgMGM0LjY2NyAwIDguNjY3IDEuNjY3IDEyIDUKMy4zMzMgMi42NjcgNi42NjcgOSAxMCAxOSA2LjY2NyAyNC42NjcgMjAuMzMzIDQzLjY2NyA0MSA1NyA3LjMzMyA0LjY2NyAxMQoxMC42NjcgMTEgMTggMCA2LTEgMTAtMyAxMnMtNi42NjcgNS0xNCA5Yy0yOC42NjcgMTQuNjY3LTUzLjY2NyAzNS42NjctNzUgNjMKLTEuMzMzIDEuMzMzLTMuMTY3IDMuNS01LjUgNi41cy00IDQuODMzLTUgNS41Yy0xIC42NjctMi41IDEuMzMzLTQuNSAycy00LjMzMyAxCi03IDFjLTQuNjY3IDAtOS4xNjctMS44MzMtMTMuNS01LjVTMzM3IDE4NCAzMzcgMTc4YzAtMTIuNjY3IDE1LjY2Ny0zMi4zMzMgNDctNTkKSDIxM2wtMTcxLTFjLTguNjY3LTYtMTMtMTIuMzMzLTEzLTE5IDAtNC42NjcgNC4zMzMtMTEuMzMzIDEzLTIwaDM1OQpjLTE2LTI1LjMzMy0yNC00NS0yNC01OXpgLHdpZGVoYXQxOmBNNTI5IDBoNWw1MTkgMTE1YzUgMSA5IDUgOSAxMCAwIDEtMSAyLTEgM2wtNCAyMgpjLTEgNS01IDktMTEgOWgtMkw1MzIgNjcgMTkgMTU5aC0yYy01IDAtOS00LTExLTlsLTUtMjJjLTEtNiAyLTEyIDgtMTN6YCx3aWRlaGF0MjpgTTExODEgMGgybDExNzEgMTc2YzYgMCAxMCA1IDEwIDExbC0yIDIzYy0xIDYtNSAxMAotMTEgMTBoLTFMMTE4MiA2NyAxNSAyMjBoLTFjLTYgMC0xMC00LTExLTEwbC0yLTIzYy0xLTYgNC0xMSAxMC0xMXpgLHdpZGVoYXQzOmBNMTE4MSAwaDJsMTE3MSAyMzZjNiAwIDEwIDUgMTAgMTFsLTIgMjNjLTEgNi01IDEwCi0xMSAxMGgtMUwxMTgyIDY3IDE1IDI4MGgtMWMtNiAwLTEwLTQtMTEtMTBsLTItMjNjLTEtNiA0LTExIDEwLTExemAsd2lkZWhhdDQ6YE0xMTgxIDBoMmwxMTcxIDI5NmM2IDAgMTAgNSAxMCAxMWwtMiAyM2MtMSA2LTUgMTAKLTExIDEwaC0xTDExODIgNjcgMTUgMzQwaC0xYy02IDAtMTAtNC0xMS0xMGwtMi0yM2MtMS02IDQtMTEgMTAtMTF6YCx3aWRlY2hlY2sxOmBNNTI5LDE1OWg1bDUxOSwtMTE1YzUsLTEsOSwtNSw5LC0xMGMwLC0xLC0xLC0yLC0xLC0zbC00LC0yMmMtMSwKLTUsLTUsLTksLTExLC05aC0ybC01MTIsOTJsLTUxMywtOTJoLTJjLTUsMCwtOSw0LC0xMSw5bC01LDIyYy0xLDYsMiwxMiw4LDEzemAsd2lkZWNoZWNrMjpgTTExODEsMjIwaDJsMTE3MSwtMTc2YzYsMCwxMCwtNSwxMCwtMTFsLTIsLTIzYy0xLC02LC01LC0xMCwKLTExLC0xMGgtMWwtMTE2OCwxNTNsLTExNjcsLTE1M2gtMWMtNiwwLC0xMCw0LC0xMSwxMGwtMiwyM2MtMSw2LDQsMTEsMTAsMTF6YCx3aWRlY2hlY2szOmBNMTE4MSwyODBoMmwxMTcxLC0yMzZjNiwwLDEwLC01LDEwLC0xMWwtMiwtMjNjLTEsLTYsLTUsLTEwLAotMTEsLTEwaC0xbC0xMTY4LDIxM2wtMTE2NywtMjEzaC0xYy02LDAsLTEwLDQsLTExLDEwbC0yLDIzYy0xLDYsNCwxMSwxMCwxMXpgLHdpZGVjaGVjazQ6YE0xMTgxLDM0MGgybDExNzEsLTI5NmM2LDAsMTAsLTUsMTAsLTExbC0yLC0yM2MtMSwtNiwtNSwtMTAsCi0xMSwtMTBoLTFsLTExNjgsMjczbC0xMTY3LC0yNzNoLTFjLTYsMCwtMTAsNCwtMTEsMTBsLTIsMjNjLTEsNiw0LDExLDEwLDExemAsYmFyYWJvdmVsZWZ0YXJyb3c6YE00MDAwMDAgNjIwaC0zOTk4OTBsMyAtM2M2OC43IC01Mi43IDExMy43IC0xMjAgMTM1IC0yMDIKYzQgLTE0LjcgNiAtMjMgNiAtMjVjMCAtNy4zIC03IC0xMSAtMjEgLTExYy04IDAgLTEzLjIgMC44IC0xNS41IDIuNQpjLTIuMyAxLjcgLTQuMiA1LjggLTUuNSAxMi41Yy0xLjMgNC43IC0yLjcgMTAuMyAtNCAxN2MtMTIgNDguNyAtMzQuOCA5MiAtNjguNSAxMzAKcy03NC4yIDY2LjMgLTEyMS41IDg1Yy0xMCA0IC0xNiA3LjcgLTE4IDExYzAgOC43IDYgMTQuMyAxOCAxN2M0Ny4zIDE4LjcgODcuOCA0NwoxMjEuNSA4NXM1Ni41IDgxLjMgNjguNSAxMzBjMC43IDIgMS4zIDUgMiA5czEuMiA2LjcgMS41IDhjMC4zIDEuMyAxIDMuMyAyIDYKczIuMiA0LjUgMy41IDUuNWMxLjMgMSAzLjMgMS44IDYgMi41czYgMSAxMCAxYzE0IDAgMjEgLTMuNyAyMSAtMTEKYzAgLTIgLTIgLTEwLjMgLTYgLTI1Yy0yMCAtNzkuMyAtNjUgLTE0Ni43IC0xMzUgLTIwMmwtMyAtM2gzOTk4OTB6Ck0xMDAgNjIwdjQwaDM5OTkwMHYtNDB6IE0wIDI0MXY0MGgzOTk5MDB2LTQwek0wIDI0MXY0MGgzOTk5MDB2LTQwemAscmlnaHRhcnJvd2Fib3ZlYmFyOmBNMCAyNDF2NDBoMzk5ODkxYy00Ny4zIDM1LjMtODQgNzgtMTEwIDEyOC0xNi43IDMyCi0yNy43IDYzLjctMzMgOTUgMCAxLjMtLjIgMi43LS41IDQtLjMgMS4zLS41IDIuMy0uNSAzIDAgNy4zIDYuNyAxMSAyMCAxMSA4IDAKMTMuMi0uOCAxNS41LTIuNSAyLjMtMS43IDQuMi01LjUgNS41LTExLjUgMi0xMy4zIDUuNy0yNyAxMS00MSAxNC43LTQ0LjcgMzkKLTg0LjUgNzMtMTE5LjVzNzMuNy02MC4yIDExOS03NS41YzYtMiA5LTUuNyA5LTExcy0zLTktOS0xMWMtNDUuMy0xNS4zLTg1LTQwLjUKLTExOS03NS41cy01OC4zLTc0LjgtNzMtMTE5LjVjLTQuNy0xNC04LjMtMjcuMy0xMS00MC0xLjMtNi43LTMuMi0xMC44LTUuNQotMTIuNS0yLjMtMS43LTcuNS0yLjUtMTUuNS0yLjUtMTQgMC0yMSAzLjctMjEgMTEgMCAyIDIgMTAuMyA2IDI1IDIwLjcgODMuMyA2NwoxNTEuNyAxMzkgMjA1em05NiAzNzloMzk5ODk0djQwSDB6bTAgMGgzOTk5MDR2NDBIMHpgLGJhcmFib3Zlc2hvcnRsZWZ0aGFycG9vbjpgTTUwNyw0MzVjLTQsNCwtNi4zLDguNywtNywxNGMwLDUuMywwLjcsOSwyLDExCmMxLjMsMiw1LjMsNS4zLDEyLDEwYzkwLjcsNTQsMTU2LDEzMCwxOTYsMjI4YzMuMywxMC43LDYuMywxNi4zLDksMTcKYzIsMC43LDUsMSw5LDFjMCwwLDUsMCw1LDBjMTAuNywwLDE2LjcsLTIsMTgsLTZjMiwtMi43LDEsLTkuNywtMywtMjEKYy0zMiwtODcuMywtODIuNywtMTU3LjcsLTE1MiwtMjExYzAsMCwtMywtMywtMywtM2wzOTkzNTEsMGwwLC00MApjLTM5ODU3MCwwLC0zOTk0MzcsMCwtMzk5NDM3LDB6IE01OTMgNDM1IHY0MCBIMzk5NTAwIHYtNDB6Ck0wIDI4MSB2LTQwIEgzOTk5MDggdjQweiBNMCAyODEgdi00MCBIMzk5OTA4IHY0MHpgLHJpZ2h0aGFycG9vbmFib3Zlc2hvcnRiYXI6YE0wLDI0MSBsMCw0MGMzOTkxMjYsMCwzOTk5OTMsMCwzOTk5OTMsMApjNC43LC00LjcsNywtOS4zLDcsLTE0YzAsLTkuMywtMy43LC0xNS4zLC0xMSwtMThjLTkyLjcsLTU2LjcsLTE1OSwtMTMzLjcsLTE5OSwKLTIzMWMtMy4zLC05LjMsLTYsLTE0LjcsLTgsLTE2Yy0yLC0xLjMsLTcsLTIsLTE1LC0yYy0xMC43LDAsLTE2LjcsMiwtMTgsNgpjLTIsMi43LC0xLDkuNywzLDIxYzE1LjMsNDIsMzYuNyw4MS44LDY0LDExOS41YzI3LjMsMzcuNyw1OCw2OS4yLDkyLDk0LjV6Ck0wIDI0MSB2NDAgSDM5OTkwOCB2LTQweiBNMCA0NzUgdi00MCBIMzk5NTAwIHY0MHogTTAgNDc1IHYtNDAgSDM5OTUwMCB2NDB6YCxzaG9ydGJhcmFib3ZlbGVmdGhhcnBvb246YE03LDQzNWMtNCw0LC02LjMsOC43LC03LDE0YzAsNS4zLDAuNyw5LDIsMTEKYzEuMywyLDUuMyw1LjMsMTIsMTBjOTAuNyw1NCwxNTYsMTMwLDE5NiwyMjhjMy4zLDEwLjcsNi4zLDE2LjMsOSwxN2MyLDAuNyw1LDEsOSwKMWMwLDAsNSwwLDUsMGMxMC43LDAsMTYuNywtMiwxOCwtNmMyLC0yLjcsMSwtOS43LC0zLC0yMWMtMzIsLTg3LjMsLTgyLjcsLTE1Ny43LAotMTUyLC0yMTFjMCwwLC0zLC0zLC0zLC0zbDM5OTkwNywwbDAsLTQwYy0zOTkxMjYsMCwtMzk5OTkzLDAsLTM5OTk5MywwegpNOTMgNDM1IHY0MCBINDAwMDAwIHYtNDB6IE01MDAgMjQxIHY0MCBINDAwMDAwIHYtNDB6IE01MDAgMjQxIHY0MCBINDAwMDAwIHYtNDB6YCxzaG9ydHJpZ2h0aGFycG9vbmFib3ZlYmFyOmBNNTMsMjQxbDAsNDBjMzk4NTcwLDAsMzk5NDM3LDAsMzk5NDM3LDAKYzQuNywtNC43LDcsLTkuMyw3LC0xNGMwLC05LjMsLTMuNywtMTUuMywtMTEsLTE4Yy05Mi43LC01Ni43LC0xNTksLTEzMy43LC0xOTksCi0yMzFjLTMuMywtOS4zLC02LC0xNC43LC04LC0xNmMtMiwtMS4zLC03LC0yLC0xNSwtMmMtMTAuNywwLC0xNi43LDIsLTE4LDYKYy0yLDIuNywtMSw5LjcsMywyMWMxNS4zLDQyLDM2LjcsODEuOCw2NCwxMTkuNWMyNy4zLDM3LjcsNTgsNjkuMiw5Miw5NC41egpNNTAwIDI0MSB2NDAgSDM5OTQwOCB2LTQweiBNNTAwIDQzNSB2NDAgSDQwMDAwMCB2LTQwemB9LHNIdD1mdW5jdGlvbihzLHUpe3N3aXRjaChzKXtjYXNlImxicmFjayI6cmV0dXJuIk00MDMgMTc1OSBWODQgSDY2NiBWMCBIMzE5IFYxNzU5IHYiK3UrYCB2MTc1OSBoMzQ3IHYtODQKSDQwM3ogTTQwMyAxNzU5IFYwIEgzMTkgVjE3NTkgdmArdSsiIHYxNzU5IGg4NHoiO2Nhc2UicmJyYWNrIjpyZXR1cm4iTTM0NyAxNzU5IFYwIEgwIFY4NCBIMjYzIFYxNzU5IHYiK3UrYCB2MTc1OSBIMCB2ODQgSDM0N3oKTTM0NyAxNzU5IFYwIEgyNjMgVjE3NTkgdmArdSsiIHYxNzU5IGg4NHoiO2Nhc2UidmVydCI6cmV0dXJuIk0xNDUgMTUgdjU4NSB2Iit1K2AgdjU4NSBjMi42NjcsMTAsOS42NjcsMTUsMjEsMTUKYzEwLDAsMTYuNjY3LC01LDIwLC0xNSB2LTU4NSB2YCstdStgIHYtNTg1IGMtMi42NjcsLTEwLC05LjY2NywtMTUsLTIxLC0xNQpjLTEwLDAsLTE2LjY2Nyw1LC0yMCwxNXogTTE4OCAxNSBIMTQ1IHY1ODUgdmArdSsiIHY1ODUgaDQzeiI7Y2FzZSJkb3VibGV2ZXJ0IjpyZXR1cm4iTTE0NSAxNSB2NTg1IHYiK3UrYCB2NTg1IGMyLjY2NywxMCw5LjY2NywxNSwyMSwxNQpjMTAsMCwxNi42NjcsLTUsMjAsLTE1IHYtNTg1IHZgKy11K2Agdi01ODUgYy0yLjY2NywtMTAsLTkuNjY3LC0xNSwtMjEsLTE1CmMtMTAsMCwtMTYuNjY3LDUsLTIwLDE1eiBNMTg4IDE1IEgxNDUgdjU4NSB2YCt1K2AgdjU4NSBoNDN6Ck0zNjcgMTUgdjU4NSB2YCt1K2AgdjU4NSBjMi42NjcsMTAsOS42NjcsMTUsMjEsMTUKYzEwLDAsMTYuNjY3LC01LDIwLC0xNSB2LTU4NSB2YCstdStgIHYtNTg1IGMtMi42NjcsLTEwLC05LjY2NywtMTUsLTIxLC0xNQpjLTEwLDAsLTE2LjY2Nyw1LC0yMCwxNXogTTQxMCAxNSBIMzY3IHY1ODUgdmArdSsiIHY1ODUgaDQzeiI7Y2FzZSJsZmxvb3IiOnJldHVybiJNMzE5IDYwMiBWMCBINDAzIFY2MDIgdiIrdStgIHYxNzE1IGgyNjMgdjg0IEgzMTl6Ck1NMzE5IDYwMiBWMCBINDAzIFY2MDIgdmArdSsiIHYxNzE1IEgzMTl6IjtjYXNlInJmbG9vciI6cmV0dXJuIk0zMTkgNjAyIFYwIEg0MDMgVjYwMiB2Iit1K2AgdjE3OTkgSDAgdi04NCBIMzE5egpNTTMxOSA2MDIgVjAgSDQwMyBWNjAyIHZgK3UrIiB2MTcxNSBIMzE5eiI7Y2FzZSJsY2VpbCI6cmV0dXJuIk00MDMgMTc1OSBWODQgSDY2NiBWMCBIMzE5IFYxNzU5IHYiK3UrYCB2NjAyIGg4NHoKTTQwMyAxNzU5IFYwIEgzMTkgVjE3NTkgdmArdSsiIHY2MDIgaDg0eiI7Y2FzZSJyY2VpbCI6cmV0dXJuIk0zNDcgMTc1OSBWMCBIMCBWODQgSDI2MyBWMTc1OSB2Iit1K2AgdjYwMiBoODR6Ck0zNDcgMTc1OSBWMCBoLTg0IFYxNzU5IHZgK3UrIiB2NjAyIGg4NHoiO2Nhc2UibHBhcmVuIjpyZXR1cm5gTTg2Myw5YzAsLTIsLTIsLTUsLTYsLTljMCwwLC0xNywwLC0xNywwYy0xMi43LDAsLTE5LjMsMC4zLC0yMCwxCmMtNS4zLDUuMywtMTAuMywxMSwtMTUsMTdjLTI0Mi43LDI5NC43LC0zOTUuMyw2ODIsLTQ1OCwxMTYyYy0yMS4zLDE2My4zLC0zMy4zLDM0OSwKLTM2LDU1NyBsMCxgKyh1Kzg0KStgYzAuMiw2LDAsMjYsMCw2MGMyLDE1OS4zLDEwLDMxMC43LDI0LDQ1NGM1My4zLDUyOCwyMTAsCjk0OS43LDQ3MCwxMjY1YzQuNyw2LDkuNywxMS43LDE1LDE3YzAuNywwLjcsNywxLDE5LDFjMCwwLDE4LDAsMTgsMGM0LC00LDYsLTcsNiwtOQpjMCwtMi43LC0zLjMsLTguNywtMTAsLTE4Yy0xMzUuMywtMTkyLjcsLTIzNS41LC00MTQuMywtMzAwLjUsLTY2NWMtNjUsLTI1MC43LC0xMDIuNSwKLTU0NC43LC0xMTIuNSwtODgyYy0yLC0xMDQsLTMsLTE2NywtMywtMTg5CmwwLC1gKyh1KzkyKStgYzAsLTE2Mi43LDUuNywtMzE0LDE3LC00NTRjMjAuNywtMjcyLDYzLjcsLTUxMywxMjksLTcyM2M2NS4zLAotMjEwLDE1NS4zLC0zOTYuMywyNzAsLTU1OWM2LjcsLTkuMywxMCwtMTUuMywxMCwtMTh6YDtjYXNlInJwYXJlbiI6cmV0dXJuYE03NiwwYy0xNi43LDAsLTI1LDMsLTI1LDljMCwyLDIsNi4zLDYsMTNjMjEuMywyOC43LDQyLjMsNjAuMywKNjMsOTVjOTYuNywxNTYuNywxNzIuOCwzMzIuNSwyMjguNSw1MjcuNWM1NS43LDE5NSw5Mi44LDQxNi41LDExMS41LDY2NC41CmMxMS4zLDEzOS4zLDE3LDI5MC43LDE3LDQ1NGMwLDI4LDEuNyw0MywzLjMsNDVsMCxgKyh1KzkpK2AKYy0zLDQsLTMuMywxNi43LC0zLjMsMzhjMCwxNjIsLTUuNywzMTMuNywtMTcsNDU1Yy0xOC43LDI0OCwtNTUuOCw0NjkuMywtMTExLjUsNjY0CmMtNTUuNywxOTQuNywtMTMxLjgsMzcwLjMsLTIyOC41LDUyN2MtMjAuNywzNC43LC00MS43LDY2LjMsLTYzLDk1Yy0yLDMuMywtNCw3LC02LDExCmMwLDcuMyw1LjcsMTEsMTcsMTFjMCwwLDExLDAsMTEsMGM5LjMsMCwxNC4zLC0wLjMsMTUsLTFjNS4zLC01LjMsMTAuMywtMTEsMTUsLTE3CmMyNDIuNywtMjk0LjcsMzk1LjMsLTY4MS43LDQ1OCwtMTE2MWMyMS4zLC0xNjQuNywzMy4zLC0zNTAuNywzNiwtNTU4CmwwLC1gKyh1KzE0NCkrYGMtMiwtMTU5LjMsLTEwLC0zMTAuNywtMjQsLTQ1NGMtNTMuMywtNTI4LC0yMTAsLTk0OS43LAotNDcwLC0xMjY1Yy00LjcsLTYsLTkuNywtMTEuNywtMTUsLTE3Yy0wLjcsLTAuNywtNi43LC0xLC0xOCwtMXpgO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHN0cmV0Y2h5IGRlbGltaXRlci4iKX19O2NsYXNzIG9Se2NvbnN0cnVjdG9yKHMpe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuY2xhc3Nlcz12b2lkIDAsdGhpcy5oZWlnaHQ9dm9pZCAwLHRoaXMuZGVwdGg9dm9pZCAwLHRoaXMubWF4Rm9udFNpemU9dm9pZCAwLHRoaXMuc3R5bGU9dm9pZCAwLHRoaXMuY2hpbGRyZW49cyx0aGlzLmNsYXNzZXM9W10sdGhpcy5oZWlnaHQ9MCx0aGlzLmRlcHRoPTAsdGhpcy5tYXhGb250U2l6ZT0wLHRoaXMuc3R5bGU9e319aGFzQ2xhc3Mocyl7cmV0dXJuIFlhLmNvbnRhaW5zKHRoaXMuY2xhc3NlcyxzKX10b05vZGUoKXtmb3IodmFyIHM9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHU9MDt1PHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3UrKylzLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5bdV0udG9Ob2RlKCkpO3JldHVybiBzfXRvTWFya3VwKCl7Zm9yKHZhciBzPSIiLHU9MDt1PHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3UrKylzKz10aGlzLmNoaWxkcmVuW3VdLnRvTWFya3VwKCk7cmV0dXJuIHN9dG9UZXh0KCl7dmFyIHM9dT0+dS50b1RleHQoKTtyZXR1cm4gdGhpcy5jaGlsZHJlbi5tYXAocykuam9pbigiIil9fXZhciBLND17IkFNUy1SZWd1bGFyIjp7MzI6WzAsMCwwLDAsLjI1XSw2NTpbMCwuNjg4ODksMCwwLC43MjIyMl0sNjY6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDY3OlswLC42ODg4OSwwLDAsLjcyMjIyXSw2ODpbMCwuNjg4ODksMCwwLC43MjIyMl0sNjk6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDcwOlswLC42ODg4OSwwLDAsLjYxMTExXSw3MTpbMCwuNjg4ODksMCwwLC43Nzc3OF0sNzI6WzAsLjY4ODg5LDAsMCwuNzc3NzhdLDczOlswLC42ODg4OSwwLDAsLjM4ODg5XSw3NDpbLjE2NjY3LC42ODg4OSwwLDAsLjVdLDc1OlswLC42ODg4OSwwLDAsLjc3Nzc4XSw3NjpbMCwuNjg4ODksMCwwLC42NjY2N10sNzc6WzAsLjY4ODg5LDAsMCwuOTQ0NDVdLDc4OlswLC42ODg4OSwwLDAsLjcyMjIyXSw3OTpbLjE2NjY3LC42ODg4OSwwLDAsLjc3Nzc4XSw4MDpbMCwuNjg4ODksMCwwLC42MTExMV0sODE6Wy4xNjY2NywuNjg4ODksMCwwLC43Nzc3OF0sODI6WzAsLjY4ODg5LDAsMCwuNzIyMjJdLDgzOlswLC42ODg4OSwwLDAsLjU1NTU2XSw4NDpbMCwuNjg4ODksMCwwLC42NjY2N10sODU6WzAsLjY4ODg5LDAsMCwuNzIyMjJdLDg2OlswLC42ODg4OSwwLDAsLjcyMjIyXSw4NzpbMCwuNjg4ODksMCwwLDFdLDg4OlswLC42ODg4OSwwLDAsLjcyMjIyXSw4OTpbMCwuNjg4ODksMCwwLC43MjIyMl0sOTA6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDEwNzpbMCwuNjg4ODksMCwwLC41NTU1Nl0sMTYwOlswLDAsMCwwLC4yNV0sMTY1OlswLC42NzUsLjAyNSwwLC43NV0sMTc0OlsuMTU1NTksLjY5MjI0LDAsMCwuOTQ2NjZdLDI0MDpbMCwuNjg4ODksMCwwLC41NTU1Nl0sMjk1OlswLC42ODg4OSwwLDAsLjU0MDI4XSw3MTA6WzAsLjgyNSwwLDAsMi4zMzMzNF0sNzMyOlswLC45LDAsMCwyLjMzMzM0XSw3NzA6WzAsLjgyNSwwLDAsMi4zMzMzNF0sNzcxOlswLC45LDAsMCwyLjMzMzM0XSw5ODk6Wy4wODE2NywuNTgxNjcsMCwwLC43Nzc3OF0sMTAwODpbMCwuNDMwNTYsLjA0MDI4LDAsLjY2NjY3XSw4MjQ1OlswLC41NDk4NiwwLDAsLjI3NV0sODQ2MzpbMCwuNjg4ODksMCwwLC41NDAyOF0sODQ4NzpbMCwuNjg4ODksMCwwLC43MjIyMl0sODQ5ODpbMCwuNjg4ODksMCwwLC41NTU1Nl0sODUwMjpbMCwuNjg4ODksMCwwLC42NjY2N10sODUwMzpbMCwuNjg4ODksMCwwLC40NDQ0NV0sODUwNDpbMCwuNjg4ODksMCwwLC42NjY2N10sODUxMzpbMCwuNjg4ODksMCwwLC42Mzg4OV0sODU5MjpbLS4wMzU5OCwuNDY0MDIsMCwwLC41XSw4NTk0OlstLjAzNTk4LC40NjQwMiwwLDAsLjVdLDg2MDI6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjAzOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODYwNjpbLjAxMzU0LC41MjIzOSwwLDAsMV0sODYwODpbLjAxMzU0LC41MjIzOSwwLDAsMV0sODYxMDpbLjAxMzU0LC41MjIzOSwwLDAsMS4xMTExMV0sODYxMTpbLjAxMzU0LC41MjIzOSwwLDAsMS4xMTExMV0sODYxOTpbMCwuNTQ5ODYsMCwwLDFdLDg2MjA6WzAsLjU0OTg2LDAsMCwxXSw4NjIxOlstLjEzMzEzLC4zNzc4OCwwLDAsMS4zODg4OV0sODYyMjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2MjQ6WzAsLjY5MjI0LDAsMCwuNV0sODYyNTpbMCwuNjkyMjQsMCwwLC41XSw4NjMwOlswLC40MzA1NiwwLDAsMV0sODYzMTpbMCwuNDMwNTYsMCwwLDFdLDg2MzQ6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODYzNTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4NjM4OlsuMTk0NDQsLjY5MjI0LDAsMCwuNDE2NjddLDg2Mzk6Wy4xOTQ0NCwuNjkyMjQsMCwwLC40MTY2N10sODY0MjpbLjE5NDQ0LC42OTIyNCwwLDAsLjQxNjY3XSw4NjQzOlsuMTk0NDQsLjY5MjI0LDAsMCwuNDE2NjddLDg2NDQ6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDY6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDc6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDg6Wy4xOTQ0NCwuNjkyMjQsMCwwLC44MzMzNF0sODY0OTpbLjE4MDgsLjY3NSwwLDAsMV0sODY1MDpbLjE5NDQ0LC42OTIyNCwwLDAsLjgzMzM0XSw4NjUxOlsuMDEzNTQsLjUyMjM5LDAsMCwxXSw4NjUyOlsuMDEzNTQsLjUyMjM5LDAsMCwxXSw4NjUzOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODY1NDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTU6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjY2OlsuMTM2NjcsLjYzNjY3LDAsMCwxXSw4NjY3OlsuMTM2NjcsLjYzNjY3LDAsMCwxXSw4NjY5OlstLjEzMzEzLC4zNzc4OCwwLDAsMV0sODY3MjpbLS4wNjQsLjQzNywwLDAsMS4zMzRdLDg2NzQ6Wy0uMDY0LC40MzcsMCwwLDEuMzM0XSw4NzA1OlswLC44MjUsMCwwLC41XSw4NzA4OlswLC42ODg4OSwwLDAsLjU1NTU2XSw4NzA5OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg3MTc6WzAsLjQzMDU2LDAsMCwuNDI5MTddLDg3MjI6Wy0uMDM1OTgsLjQ2NDAyLDAsMCwuNV0sODcyNDpbLjA4MTk4LC42OTIyNCwwLDAsLjc3Nzc4XSw4NzI2OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg3MzM6WzAsLjY5MjI0LDAsMCwuNzc3NzhdLDg3MzY6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzc6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzg6Wy4wMzUxNywuNTIyMzksMCwwLC43MjIyMl0sODczOTpbLjA4MTY3LC41ODE2NywwLDAsLjIyMjIyXSw4NzQwOlsuMjUxNDIsLjc0MTExLDAsMCwuMjc3NzhdLDg3NDE6Wy4wODE2NywuNTgxNjcsMCwwLC4zODg4OV0sODc0MjpbLjI1MTQyLC43NDExMSwwLDAsLjVdLDg3NTY6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg3NTc6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg3NjQ6Wy0uMTMzMTMsLjM2Njg3LDAsMCwuNzc3NzhdLDg3NjU6Wy0uMTMzMTMsLjM3Nzg4LDAsMCwuNzc3NzhdLDg3Njk6Wy0uMTMzMTMsLjM2Njg3LDAsMCwuNzc3NzhdLDg3NzA6Wy0uMDM2MjUsLjQ2Mzc1LDAsMCwuNzc3NzhdLDg3NzQ6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODc3NjpbLS4wMTY4OCwuNDgzMTIsMCwwLC43Nzc3OF0sODc3ODpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw4NzgyOlsuMDYwNjIsLjU0OTg2LDAsMCwuNzc3NzhdLDg3ODM6Wy4wNjA2MiwuNTQ5ODYsMCwwLC43Nzc3OF0sODc4NTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4Nzg2OlsuMDgxOTgsLjU4MTk4LDAsMCwuNzc3NzhdLDg3ODc6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODc5MDpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODc5MTpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4Nzk2OlsuMDgxOTgsLjkxNjY3LDAsMCwuNzc3NzhdLDg4MDY6Wy4yNTU4MywuNzU1ODMsMCwwLC43Nzc3OF0sODgwNzpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSw4ODA4OlsuMjUxNDIsLjc1NzI2LDAsMCwuNzc3NzhdLDg4MDk6Wy4yNTE0MiwuNzU3MjYsMCwwLC43Nzc3OF0sODgxMjpbLjI1NTgzLC43NTU4MywwLDAsLjVdLDg4MTQ6Wy4yMDU3NiwuNzA1NzYsMCwwLC43Nzc3OF0sODgxNTpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4ODE2OlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg4MTc6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODgxODpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4ODE5OlsuMjI5NTgsLjcyOTU4LDAsMCwuNzc3NzhdLDg4MjI6Wy4xODA4LC42NzUsMCwwLC43Nzc3OF0sODgyMzpbLjE4MDgsLjY3NSwwLDAsLjc3Nzc4XSw4ODI4OlsuMTM2NjcsLjYzNjY3LDAsMCwuNzc3NzhdLDg4Mjk6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODgzMDpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4ODMxOlsuMjI5NTgsLjcyOTU4LDAsMCwuNzc3NzhdLDg4MzI6Wy4yMDU3NiwuNzA1NzYsMCwwLC43Nzc3OF0sODgzMzpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4ODQwOlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg4NDE6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODg0MjpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw4ODQzOlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4NDc6Wy4wMzUxNywuNTQ5ODYsMCwwLC43Nzc3OF0sODg0ODpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4ODU4OlsuMDgxOTgsLjU4MTk4LDAsMCwuNzc3NzhdLDg4NTk6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODg2MTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4ODYyOlswLC42NzUsMCwwLC43Nzc3OF0sODg2MzpbMCwuNjc1LDAsMCwuNzc3NzhdLDg4NjQ6WzAsLjY3NSwwLDAsLjc3Nzc4XSw4ODY1OlswLC42NzUsMCwwLC43Nzc3OF0sODg3MjpbMCwuNjkyMjQsMCwwLC42MTExMV0sODg3MzpbMCwuNjkyMjQsMCwwLC43MjIyMl0sODg3NDpbMCwuNjkyMjQsMCwwLC44ODg4OV0sODg3NjpbMCwuNjg4ODksMCwwLC42MTExMV0sODg3NzpbMCwuNjg4ODksMCwwLC42MTExMV0sODg3ODpbMCwuNjg4ODksMCwwLC43MjIyMl0sODg3OTpbMCwuNjg4ODksMCwwLC43MjIyMl0sODg4MjpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4ODgzOlsuMDM1MTcsLjU0OTg2LDAsMCwuNzc3NzhdLDg4ODQ6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODg4NTpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSw4ODg4OlswLC41NDk4NiwwLDAsMS4xMTExMV0sODg5MDpbLjE5NDQ0LC40MzA1NiwwLDAsLjU1NTU2XSw4ODkxOlsuMTk0NDQsLjY5MjI0LDAsMCwuNjExMTFdLDg4OTI6Wy4xOTQ0NCwuNjkyMjQsMCwwLC42MTExMV0sODkwMTpbMCwuNTQ5ODYsMCwwLC4yNzc3OF0sODkwMzpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw4OTA1OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg5MDY6Wy4wODE2NywuNTgxNjcsMCwwLC43Nzc3OF0sODkwNzpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODkwODpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODkwOTpbLS4wMzU5OCwuNDY0MDIsMCwwLC43Nzc3OF0sODkxMDpbMCwuNTQ5ODYsMCwwLC43NjA0Ml0sODkxMTpbMCwuNTQ5ODYsMCwwLC43NjA0Ml0sODkxMjpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4OTEzOlsuMDM1MTcsLjU0OTg2LDAsMCwuNzc3NzhdLDg5MTQ6WzAsLjU0OTg2LDAsMCwuNjY2NjddLDg5MTU6WzAsLjU0OTg2LDAsMCwuNjY2NjddLDg5MTY6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg5MTg6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDg5MTk6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDg5MjA6Wy4wMzUxNywuNTQ5ODYsMCwwLDEuMzMzMzRdLDg5MjE6Wy4wMzUxNywuNTQ5ODYsMCwwLDEuMzMzMzRdLDg5MjI6Wy4zODU2OSwuODg1NjksMCwwLC43Nzc3OF0sODkyMzpbLjM4NTY5LC44ODU2OSwwLDAsLjc3Nzc4XSw4OTI2OlsuMTM2NjcsLjYzNjY3LDAsMCwuNzc3NzhdLDg5Mjc6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODkyODpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw4OTI5OlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg5MzQ6Wy4yMzIyMiwuNzQxMTEsMCwwLC43Nzc3OF0sODkzNTpbLjIzMjIyLC43NDExMSwwLDAsLjc3Nzc4XSw4OTM2OlsuMjMyMjIsLjc0MTExLDAsMCwuNzc3NzhdLDg5Mzc6Wy4yMzIyMiwuNzQxMTEsMCwwLC43Nzc3OF0sODkzODpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4OTM5OlsuMjA1NzYsLjcwNTc2LDAsMCwuNzc3NzhdLDg5NDA6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODk0MTpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw4OTk0OlsuMTk0NDQsLjY5MjI0LDAsMCwuNzc3NzhdLDg5OTU6Wy4xOTQ0NCwuNjkyMjQsMCwwLC43Nzc3OF0sOTQxNjpbLjE1NTU5LC42OTIyNCwwLDAsLjkwMjIyXSw5NDg0OlswLC42OTIyNCwwLDAsLjVdLDk0ODg6WzAsLjY5MjI0LDAsMCwuNV0sOTQ5MjpbMCwuMzc3ODgsMCwwLC41XSw5NDk2OlswLC4zNzc4OCwwLDAsLjVdLDk1ODU6Wy4xOTQ0NCwuNjg4ODksMCwwLC44ODg4OV0sOTU4NjpbLjE5NDQ0LC43NDExMSwwLDAsLjg4ODg5XSw5NjMyOlswLC42NzUsMCwwLC43Nzc3OF0sOTYzMzpbMCwuNjc1LDAsMCwuNzc3NzhdLDk2NTA6WzAsLjU0OTg2LDAsMCwuNzIyMjJdLDk2NTE6WzAsLjU0OTg2LDAsMCwuNzIyMjJdLDk2NTQ6Wy4wMzUxNywuNTQ5ODYsMCwwLC43Nzc3OF0sOTY2MDpbMCwuNTQ5ODYsMCwwLC43MjIyMl0sOTY2MTpbMCwuNTQ5ODYsMCwwLC43MjIyMl0sOTY2NDpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw5Njc0OlsuMTExMTEsLjY5MjI0LDAsMCwuNjY2NjddLDk3MzM6Wy4xOTQ0NCwuNjkyMjQsMCwwLC45NDQ0NV0sMTAwMDM6WzAsLjY5MjI0LDAsMCwuODMzMzRdLDEwMDE2OlswLC42OTIyNCwwLDAsLjgzMzM0XSwxMDczMTpbLjExMTExLC42OTIyNCwwLDAsLjY2NjY3XSwxMDg0NjpbLjE5NDQ0LC43NTU4MywwLDAsLjYxMTExXSwxMDg3NzpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDg3ODpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDg4NTpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDg4NjpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDg4NzpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSwxMDg4ODpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSwxMDg4OTpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDg5MDpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDg5MTpbLjQ4MjU2LC45ODI1NiwwLDAsLjc3Nzc4XSwxMDg5MjpbLjQ4MjU2LC45ODI1NiwwLDAsLjc3Nzc4XSwxMDkwMTpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDkwMjpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDkzMzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNDpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNTpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNjpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNzpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzODpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDk0OTpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDk1MDpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDk1NTpbLjI4NDgxLC43OTM4MywwLDAsLjc3Nzc4XSwxMDk1NjpbLjI4NDgxLC43OTM4MywwLDAsLjc3Nzc4XSw1NzM1MDpbLjA4MTY3LC41ODE2NywwLDAsLjIyMjIyXSw1NzM1MTpbLjA4MTY3LC41ODE2NywwLDAsLjM4ODg5XSw1NzM1MjpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw1NzM1MzpbMCwuNDMwNTYsLjA0MDI4LDAsLjY2NjY3XSw1NzM1NjpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM1NzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM1ODpbLjQxOTUxLC45MTk1MSwwLDAsLjc3Nzc4XSw1NzM1OTpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw1NzM2MDpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw1NzM2MTpbLjQxOTUxLC45MTk1MSwwLDAsLjc3Nzc4XSw1NzM2NjpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2NzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2ODpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2OTpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM3MDpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw1NzM3MTpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XX0sIkNhbGlncmFwaGljLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDY1OlswLC42ODMzMywwLC4xOTQ0NSwuNzk4NDddLDY2OlswLC42ODMzMywuMDMwNDEsLjEzODg5LC42NTY4MV0sNjc6WzAsLjY4MzMzLC4wNTgzNCwuMTM4ODksLjUyNjUzXSw2ODpbMCwuNjgzMzMsLjAyNzc4LC4wODMzNCwuNzcxMzldLDY5OlswLC42ODMzMywuMDg5NDQsLjExMTExLC41Mjc3OF0sNzA6WzAsLjY4MzMzLC4wOTkzMSwuMTExMTEsLjcxODc1XSw3MTpbLjA5NzIyLC42ODMzMywuMDU5MywuMTExMTEsLjU5NDg3XSw3MjpbMCwuNjgzMzMsLjAwOTY1LC4xMTExMSwuODQ0NTJdLDczOlswLC42ODMzMywuMDczODIsMCwuNTQ0NTJdLDc0OlsuMDk3MjIsLjY4MzMzLC4xODQ3MiwuMTY2NjcsLjY3Nzc4XSw3NTpbMCwuNjgzMzMsLjAxNDQ1LC4wNTU1NiwuNzYxOTVdLDc2OlswLC42ODMzMywwLC4xMzg4OSwuNjg5NzJdLDc3OlswLC42ODMzMywwLC4xMzg4OSwxLjIwMDldLDc4OlswLC42ODMzMywuMTQ3MzYsLjA4MzM0LC44MjA0OV0sNzk6WzAsLjY4MzMzLC4wMjc3OCwuMTExMTEsLjc5NjExXSw4MDpbMCwuNjgzMzMsLjA4MjIyLC4wODMzNCwuNjk1NTZdLDgxOlsuMDk3MjIsLjY4MzMzLDAsLjExMTExLC44MTY2N10sODI6WzAsLjY4MzMzLDAsLjA4MzM0LC44NDc1XSw4MzpbMCwuNjgzMzMsLjA3NSwuMTM4ODksLjYwNTU2XSw4NDpbMCwuNjgzMzMsLjI1NDE3LDAsLjU0NDY0XSw4NTpbMCwuNjgzMzMsLjA5OTMxLC4wODMzNCwuNjI1ODNdLDg2OlswLC42ODMzMywuMDgyMjIsMCwuNjEyNzhdLDg3OlswLC42ODMzMywuMDgyMjIsLjA4MzM0LC45ODc3OF0sODg6WzAsLjY4MzMzLC4xNDY0MywuMTM4ODksLjcxMzNdLDg5OlsuMDk3MjIsLjY4MzMzLC4wODIyMiwuMDgzMzQsLjY2ODM0XSw5MDpbMCwuNjgzMzMsLjA3OTQ0LC4xMzg4OSwuNzI0NzNdLDE2MDpbMCwwLDAsMCwuMjVdfSwiRnJha3R1ci1SZWd1bGFyIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjkxNDEsMCwwLC4yOTU3NF0sMzQ6WzAsLjY5MTQxLDAsMCwuMjE0NzFdLDM4OlswLC42OTE0MSwwLDAsLjczNzg2XSwzOTpbMCwuNjkxNDEsMCwwLC4yMTIwMV0sNDA6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4zODg2NV0sNDE6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4zODg2NV0sNDI6WzAsLjYyMTE5LDAsMCwuMjc3NjRdLDQzOlsuMDgzMTksLjU4MjgzLDAsMCwuNzU2MjNdLDQ0OlswLC4xMDgwMywwLDAsLjI3NzY0XSw0NTpbLjA4MzE5LC41ODI4MywwLDAsLjc1NjIzXSw0NjpbMCwuMTA4MDMsMCwwLC4yNzc2NF0sNDc6Wy4yNDk4MiwuNzQ5NDcsMCwwLC41MDE4MV0sNDg6WzAsLjQ3NTM0LDAsMCwuNTAxODFdLDQ5OlswLC40NzUzNCwwLDAsLjUwMTgxXSw1MDpbMCwuNDc1MzQsMCwwLC41MDE4MV0sNTE6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTI6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTM6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTQ6WzAsLjY5MTQxLDAsMCwuNTAxODFdLDU1OlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAxODFdLDU2OlswLC42OTE0MSwwLDAsLjUwMTgxXSw1NzpbLjE4OTA2LC40NzUzNCwwLDAsLjUwMTgxXSw1ODpbMCwuNDc1MzQsMCwwLC4yMTYwNl0sNTk6Wy4xMjYwNCwuNDc1MzQsMCwwLC4yMTYwNl0sNjE6Wy0uMTMwOTksLjM2ODY2LDAsMCwuNzU2MjNdLDYzOlswLC42OTE0MSwwLDAsLjM2MjQ1XSw2NTpbMCwuNjkxNDEsMCwwLC43MTc2XSw2NjpbMCwuNjkxNDEsMCwwLC44ODM5N10sNjc6WzAsLjY5MTQxLDAsMCwuNjEyNTRdLDY4OlswLC42OTE0MSwwLDAsLjgzMTU4XSw2OTpbMCwuNjkxNDEsMCwwLC42NjI3OF0sNzA6Wy4xMjYwNCwuNjkxNDEsMCwwLC42MTExOV0sNzE6WzAsLjY5MTQxLDAsMCwuNzg1MzldLDcyOlsuMDYzMDIsLjY5MTQxLDAsMCwuNzIwM10sNzM6WzAsLjY5MTQxLDAsMCwuNTU0NDhdLDc0OlsuMTI2MDQsLjY5MTQxLDAsMCwuNTUyMzFdLDc1OlswLC42OTE0MSwwLDAsLjY2ODQ1XSw3NjpbMCwuNjkxNDEsMCwwLC42NjYwMl0sNzc6WzAsLjY5MTQxLDAsMCwxLjA0OTUzXSw3ODpbMCwuNjkxNDEsMCwwLC44MzIxMl0sNzk6WzAsLjY5MTQxLDAsMCwuODI2OTldLDgwOlsuMTg5MDYsLjY5MTQxLDAsMCwuODI3NTNdLDgxOlsuMDM3ODEsLjY5MTQxLDAsMCwuODI2OTldLDgyOlswLC42OTE0MSwwLDAsLjgyODA3XSw4MzpbMCwuNjkxNDEsMCwwLC44Mjg2MV0sODQ6WzAsLjY5MTQxLDAsMCwuNjY4OTldLDg1OlswLC42OTE0MSwwLDAsLjY0NTc2XSw4NjpbMCwuNjkxNDEsMCwwLC44MzEzMV0sODc6WzAsLjY5MTQxLDAsMCwxLjA0NjAyXSw4ODpbMCwuNjkxNDEsMCwwLC43MTkyMl0sODk6Wy4xODkwNiwuNjkxNDEsMCwwLC44MzI5M10sOTA6Wy4xMjYwNCwuNjkxNDEsMCwwLC42MDIwMV0sOTE6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4yNzc2NF0sOTM6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4yNzc2NF0sOTQ6WzAsLjY5MTQxLDAsMCwuNDk5NjVdLDk3OlswLC40NzUzNCwwLDAsLjUwMDQ2XSw5ODpbMCwuNjkxNDEsMCwwLC41MTMxNV0sOTk6WzAsLjQ3NTM0LDAsMCwuMzg5NDZdLDEwMDpbMCwuNjIxMTksMCwwLC40OTg1N10sMTAxOlswLC40NzUzNCwwLDAsLjQwMDUzXSwxMDI6Wy4xODkwNiwuNjkxNDEsMCwwLC4zMjYyNl0sMTAzOlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAzN10sMTA0OlsuMTg5MDYsLjY5MTQxLDAsMCwuNTIxMjZdLDEwNTpbMCwuNjkxNDEsMCwwLC4yNzg5OV0sMTA2OlswLC42OTE0MSwwLDAsLjI4MDg4XSwxMDc6WzAsLjY5MTQxLDAsMCwuMzg5NDZdLDEwODpbMCwuNjkxNDEsMCwwLC4yNzk1M10sMTA5OlswLC40NzUzNCwwLDAsLjc2Njc2XSwxMTA6WzAsLjQ3NTM0LDAsMCwuNTI2NjZdLDExMTpbMCwuNDc1MzQsMCwwLC40ODg4NV0sMTEyOlsuMTg5MDYsLjUyMzk2LDAsMCwuNTAwNDZdLDExMzpbLjE4OTA2LC40NzUzNCwwLDAsLjQ4OTEyXSwxMTQ6WzAsLjQ3NTM0LDAsMCwuMzg5MTldLDExNTpbMCwuNDc1MzQsMCwwLC40NDI2Nl0sMTE2OlswLC42MjExOSwwLDAsLjMzMzAxXSwxMTc6WzAsLjQ3NTM0LDAsMCwuNTE3Ml0sMTE4OlswLC41MjM5NiwwLDAsLjUxMThdLDExOTpbMCwuNTIzOTYsMCwwLC43NzM1MV0sMTIwOlsuMTg5MDYsLjQ3NTM0LDAsMCwuMzg4NjVdLDEyMTpbLjE4OTA2LC40NzUzNCwwLDAsLjQ5ODg0XSwxMjI6Wy4xODkwNiwuNDc1MzQsMCwwLC4zOTA1NF0sMTYwOlswLDAsMCwwLC4yNV0sODIxNjpbMCwuNjkxNDEsMCwwLC4yMTQ3MV0sODIxNzpbMCwuNjkxNDEsMCwwLC4yMTQ3MV0sNTgxMTI6WzAsLjYyMTE5LDAsMCwuNDk3NDldLDU4MTEzOlswLC42MjExOSwwLDAsLjQ5ODNdLDU4MTE0OlsuMTg5MDYsLjY5MTQxLDAsMCwuMzMzMjhdLDU4MTE1OlsuMTg5MDYsLjY5MTQxLDAsMCwuMzI5MjNdLDU4MTE2OlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAzNDNdLDU4MTE3OlswLC42OTE0MSwwLDAsLjMzMzAxXSw1ODExODpbMCwuNjIxMTksMCwwLC4zMzQwOV0sNTgxMTk6WzAsLjQ3NTM0LDAsMCwuNTAwNzNdfSwiTWFpbi1Cb2xkIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsMCwwLC4zNV0sMzQ6WzAsLjY5NDQ0LDAsMCwuNjAyNzhdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuOTU4MzNdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNTc1XSwzNzpbLjA1NTU2LC43NSwwLDAsLjk1ODMzXSwzODpbMCwuNjk0NDQsMCwwLC44OTQ0NF0sMzk6WzAsLjY5NDQ0LDAsMCwuMzE5NDRdLDQwOlsuMjUsLjc1LDAsMCwuNDQ3MjJdLDQxOlsuMjUsLjc1LDAsMCwuNDQ3MjJdLDQyOlswLC43NSwwLDAsLjU3NV0sNDM6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sNDQ6Wy4xOTQ0NCwuMTU1NTYsMCwwLC4zMTk0NF0sNDU6WzAsLjQ0NDQ0LDAsMCwuMzgzMzNdLDQ2OlswLC4xNTU1NiwwLDAsLjMxOTQ0XSw0NzpbLjI1LC43NSwwLDAsLjU3NV0sNDg6WzAsLjY0NDQ0LDAsMCwuNTc1XSw0OTpbMCwuNjQ0NDQsMCwwLC41NzVdLDUwOlswLC42NDQ0NCwwLDAsLjU3NV0sNTE6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1MjpbMCwuNjQ0NDQsMCwwLC41NzVdLDUzOlswLC42NDQ0NCwwLDAsLjU3NV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NTpbMCwuNjQ0NDQsMCwwLC41NzVdLDU2OlswLC42NDQ0NCwwLDAsLjU3NV0sNTc6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1ODpbMCwuNDQ0NDQsMCwwLC4zMTk0NF0sNTk6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC4zMTk0NF0sNjA6Wy4wODU1NiwuNTg1NTYsMCwwLC44OTQ0NF0sNjE6Wy0uMTA4ODksLjM5MTExLDAsMCwuODk0NDRdLDYyOlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDYzOlswLC42OTQ0NCwwLDAsLjU0MzA1XSw2NDpbMCwuNjk0NDQsMCwwLC44OTQ0NF0sNjU6WzAsLjY4NjExLDAsMCwuODY5NDRdLDY2OlswLC42ODYxMSwwLDAsLjgxODA1XSw2NzpbMCwuNjg2MTEsMCwwLC44MzA1NV0sNjg6WzAsLjY4NjExLDAsMCwuODgxOTRdLDY5OlswLC42ODYxMSwwLDAsLjc1NTU1XSw3MDpbMCwuNjg2MTEsMCwwLC43MjM2MV0sNzE6WzAsLjY4NjExLDAsMCwuOTA0MTZdLDcyOlswLC42ODYxMSwwLDAsLjldLDczOlswLC42ODYxMSwwLDAsLjQzNjExXSw3NDpbMCwuNjg2MTEsMCwwLC41OTQ0NF0sNzU6WzAsLjY4NjExLDAsMCwuOTAxMzhdLDc2OlswLC42ODYxMSwwLDAsLjY5MTY2XSw3NzpbMCwuNjg2MTEsMCwwLDEuMDkxNjZdLDc4OlswLC42ODYxMSwwLDAsLjldLDc5OlswLC42ODYxMSwwLDAsLjg2Mzg4XSw4MDpbMCwuNjg2MTEsMCwwLC43ODYxMV0sODE6Wy4xOTQ0NCwuNjg2MTEsMCwwLC44NjM4OF0sODI6WzAsLjY4NjExLDAsMCwuODYyNV0sODM6WzAsLjY4NjExLDAsMCwuNjM4ODldLDg0OlswLC42ODYxMSwwLDAsLjhdLDg1OlswLC42ODYxMSwwLDAsLjg4NDcyXSw4NjpbMCwuNjg2MTEsLjAxNTk3LDAsLjg2OTQ0XSw4NzpbMCwuNjg2MTEsLjAxNTk3LDAsMS4xODg4OF0sODg6WzAsLjY4NjExLDAsMCwuODY5NDRdLDg5OlswLC42ODYxMSwuMDI4NzUsMCwuODY5NDRdLDkwOlswLC42ODYxMSwwLDAsLjcwMjc3XSw5MTpbLjI1LC43NSwwLDAsLjMxOTQ0XSw5MjpbLjI1LC43NSwwLDAsLjU3NV0sOTM6Wy4yNSwuNzUsMCwwLC4zMTk0NF0sOTQ6WzAsLjY5NDQ0LDAsMCwuNTc1XSw5NTpbLjMxLC4xMzQ0NCwuMDMxOTQsMCwuNTc1XSw5NzpbMCwuNDQ0NDQsMCwwLC41NTkwMl0sOTg6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDk5OlswLC40NDQ0NCwwLDAsLjUxMTExXSwxMDA6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDEwMTpbMCwuNDQ0NDQsMCwwLC41MjcwOF0sMTAyOlswLC42OTQ0NCwuMTA5MDMsMCwuMzUxMzldLDEwMzpbLjE5NDQ0LC40NDQ0NCwuMDE1OTcsMCwuNTc1XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDEwNTpbMCwuNjk0NDQsMCwwLC4zMTk0NF0sMTA2OlsuMTk0NDQsLjY5NDQ0LDAsMCwuMzUxMzldLDEwNzpbMCwuNjk0NDQsMCwwLC42MDY5NF0sMTA4OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSwxMDk6WzAsLjQ0NDQ0LDAsMCwuOTU4MzNdLDExMDpbMCwuNDQ0NDQsMCwwLC42Mzg4OV0sMTExOlswLC40NDQ0NCwwLDAsLjU3NV0sMTEyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjM4ODldLDExMzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjYwNjk0XSwxMTQ6WzAsLjQ0NDQ0LDAsMCwuNDczNjFdLDExNTpbMCwuNDQ0NDQsMCwwLC40NTM2MV0sMTE2OlswLC42MzQ5MiwwLDAsLjQ0NzIyXSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNjM4ODldLDExODpbMCwuNDQ0NDQsLjAxNTk3LDAsLjYwNjk0XSwxMTk6WzAsLjQ0NDQ0LC4wMTU5NywwLC44MzA1NV0sMTIwOlswLC40NDQ0NCwwLDAsLjYwNjk0XSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAxNTk3LDAsLjYwNjk0XSwxMjI6WzAsLjQ0NDQ0LDAsMCwuNTExMTFdLDEyMzpbLjI1LC43NSwwLDAsLjU3NV0sMTI0OlsuMjUsLjc1LDAsMCwuMzE5NDRdLDEyNTpbLjI1LC43NSwwLDAsLjU3NV0sMTI2OlsuMzUsLjM0NDQ0LDAsMCwuNTc1XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjM6WzAsLjY5NDQ0LDAsMCwuODY4NTNdLDE2ODpbMCwuNjk0NDQsMCwwLC41NzVdLDE3MjpbMCwuNDQ0NDQsMCwwLC43NjY2Nl0sMTc2OlswLC42OTQ0NCwwLDAsLjg2OTQ0XSwxNzc6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMTg0OlsuMTcwMTQsMCwwLDAsLjUxMTExXSwxOTg6WzAsLjY4NjExLDAsMCwxLjA0MTY2XSwyMTU6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMjE2OlsuMDQ4NjEsLjczNDcyLDAsMCwuODk0NDRdLDIyMzpbMCwuNjk0NDQsMCwwLC41OTcyMl0sMjMwOlswLC40NDQ0NCwwLDAsLjgzMDU1XSwyNDc6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMjQ4OlsuMDk3MjIsLjU0MTY3LDAsMCwuNTc1XSwzMDU6WzAsLjQ0NDQ0LDAsMCwuMzE5NDRdLDMzODpbMCwuNjg2MTEsMCwwLDEuMTY5NDRdLDMzOTpbMCwuNDQ0NDQsMCwwLC44OTQ0NF0sNTY3OlsuMTk0NDQsLjQ0NDQ0LDAsMCwuMzUxMzldLDcxMDpbMCwuNjk0NDQsMCwwLC41NzVdLDcxMTpbMCwuNjMxOTQsMCwwLC41NzVdLDcxMzpbMCwuNTk2MTEsMCwwLC41NzVdLDcxNDpbMCwuNjk0NDQsMCwwLC41NzVdLDcxNTpbMCwuNjk0NDQsMCwwLC41NzVdLDcyODpbMCwuNjk0NDQsMCwwLC41NzVdLDcyOTpbMCwuNjk0NDQsMCwwLC4zMTk0NF0sNzMwOlswLC42OTQ0NCwwLDAsLjg2OTQ0XSw3MzI6WzAsLjY5NDQ0LDAsMCwuNTc1XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNTc1XSw5MTU6WzAsLjY4NjExLDAsMCwuNjkxNjZdLDkxNjpbMCwuNjg2MTEsMCwwLC45NTgzM10sOTIwOlswLC42ODYxMSwwLDAsLjg5NDQ0XSw5MjM6WzAsLjY4NjExLDAsMCwuODA1NTVdLDkyNjpbMCwuNjg2MTEsMCwwLC43NjY2Nl0sOTI4OlswLC42ODYxMSwwLDAsLjldLDkzMTpbMCwuNjg2MTEsMCwwLC44MzA1NV0sOTMzOlswLC42ODYxMSwwLDAsLjg5NDQ0XSw5MzQ6WzAsLjY4NjExLDAsMCwuODMwNTVdLDkzNjpbMCwuNjg2MTEsMCwwLC44OTQ0NF0sOTM3OlswLC42ODYxMSwwLDAsLjgzMDU1XSw4MjExOlswLC40NDQ0NCwuMDMxOTQsMCwuNTc1XSw4MjEyOlswLC40NDQ0NCwuMDMxOTQsMCwxLjE0OTk5XSw4MjE2OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSw4MjE3OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSw4MjIwOlswLC42OTQ0NCwwLDAsLjYwMjc4XSw4MjIxOlswLC42OTQ0NCwwLDAsLjYwMjc4XSw4MjI0OlsuMTk0NDQsLjY5NDQ0LDAsMCwuNTExMTFdLDgyMjU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41MTExMV0sODI0MjpbMCwuNTU1NTYsMCwwLC4zNDQ0NF0sODQwNzpbMCwuNzI0NDQsLjE1NDg2LDAsLjU3NV0sODQ2MzpbMCwuNjk0NDQsMCwwLC42Njc1OV0sODQ2NTpbMCwuNjk0NDQsMCwwLC44MzA1NV0sODQ2NzpbMCwuNjk0NDQsMCwwLC40NzM2MV0sODQ3MjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjc0MDI3XSw4NDc2OlswLC42OTQ0NCwwLDAsLjgzMDU1XSw4NTAxOlswLC42OTQ0NCwwLDAsLjcwMjc3XSw4NTkyOlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODU5MzpbLjE5NDQ0LC42OTQ0NCwwLDAsLjU3NV0sODU5NDpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg1OTU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41NzVdLDg1OTY6Wy0uMTA4ODksLjM5MTExLDAsMCwxLjE0OTk5XSw4NTk3OlsuMjUsLjc1LDAsMCwuNTc1XSw4NTk4OlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NTk5OlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjAwOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjAxOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjM2OlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODYzNzpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NDA6Wy0uMTA4ODksLjM5MTExLDAsMCwxLjE0OTk5XSw4NjQxOlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODY1NjpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NTc6Wy4xOTQ0NCwuNjk0NDQsMCwwLC43MDI3N10sODY1ODpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC43MDI3N10sODY2MDpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NjE6Wy4yNSwuNzUsMCwwLC43MDI3N10sODcwNDpbMCwuNjk0NDQsMCwwLC42Mzg4OV0sODcwNjpbMCwuNjk0NDQsLjA2Mzg5LDAsLjYyODQ3XSw4NzA3OlswLC42OTQ0NCwwLDAsLjYzODg5XSw4NzA5OlsuMDU1NTYsLjc1LDAsMCwuNTc1XSw4NzExOlswLC42ODYxMSwwLDAsLjk1ODMzXSw4NzEyOlsuMDg1NTYsLjU4NTU2LDAsMCwuNzY2NjZdLDg3MTU6Wy4wODU1NiwuNTg1NTYsMCwwLC43NjY2Nl0sODcyMjpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4NzIzOlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg3MjU6Wy4yNSwuNzUsMCwwLC41NzVdLDg3MjY6Wy4yNSwuNzUsMCwwLC41NzVdLDg3Mjc6Wy0uMDI3NzgsLjQ3MjIyLDAsMCwuNTc1XSw4NzI4OlstLjAyNjM5LC40NzM2MSwwLDAsLjU3NV0sODcyOTpbLS4wMjYzOSwuNDczNjEsMCwwLC41NzVdLDg3MzA6Wy4xOCwuODIsMCwwLC45NTgzM10sODczMzpbMCwuNDQ0NDQsMCwwLC44OTQ0NF0sODczNDpbMCwuNDQ0NDQsMCwwLDEuMTQ5OTldLDg3MzY6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzk6Wy4yNSwuNzUsMCwwLC4zMTk0NF0sODc0MTpbLjI1LC43NSwwLDAsLjU3NV0sODc0MzpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NDpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NTpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NjpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NzpbLjE5NDQ0LC42OTQ0NCwuMTI3NzgsMCwuNTY4NzVdLDg3NjQ6Wy0uMTA4ODksLjM5MTExLDAsMCwuODk0NDRdLDg3Njg6Wy4xOTQ0NCwuNjk0NDQsMCwwLC4zMTk0NF0sODc3MTpbLjAwMjIyLC41MDIyMiwwLDAsLjg5NDQ0XSw4NzczOlsuMDI3LC42MzgsMCwwLC44OTRdLDg3NzY6Wy4wMjQ0NCwuNTI0NDQsMCwwLC44OTQ0NF0sODc4MTpbLjAwMjIyLC41MDIyMiwwLDAsLjg5NDQ0XSw4ODAxOlsuMDAyMjIsLjUwMjIyLDAsMCwuODk0NDRdLDg4MDQ6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODgwNTpbLjE5NjY3LC42OTY2NywwLDAsLjg5NDQ0XSw4ODEwOlsuMDg1NTYsLjU4NTU2LDAsMCwxLjE0OTk5XSw4ODExOlsuMDg1NTYsLjU4NTU2LDAsMCwxLjE0OTk5XSw4ODI2OlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDg4Mjc6Wy4wODU1NiwuNTg1NTYsMCwwLC44OTQ0NF0sODgzNDpbLjA4NTU2LC41ODU1NiwwLDAsLjg5NDQ0XSw4ODM1OlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDg4Mzg6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODgzOTpbLjE5NjY3LC42OTY2NywwLDAsLjg5NDQ0XSw4ODQ2OlswLC41NTU1NiwwLDAsLjc2NjY2XSw4ODQ5OlsuMTk2NjcsLjY5NjY3LDAsMCwuODk0NDRdLDg4NTA6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODg1MTpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODg1MjpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODg1MzpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4ODU0OlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg4NTU6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sODg1NjpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4ODU3OlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg4NjY6WzAsLjY5NDQ0LDAsMCwuNzAyNzddLDg4Njc6WzAsLjY5NDQ0LDAsMCwuNzAyNzddLDg4Njg6WzAsLjY5NDQ0LDAsMCwuODk0NDRdLDg4Njk6WzAsLjY5NDQ0LDAsMCwuODk0NDRdLDg5MDA6Wy0uMDI2MzksLjQ3MzYxLDAsMCwuNTc1XSw4OTAxOlstLjAyNjM5LC40NzM2MSwwLDAsLjMxOTQ0XSw4OTAyOlstLjAyNzc4LC40NzIyMiwwLDAsLjU3NV0sODk2ODpbLjI1LC43NSwwLDAsLjUxMTExXSw4OTY5OlsuMjUsLjc1LDAsMCwuNTExMTFdLDg5NzA6Wy4yNSwuNzUsMCwwLC41MTExMV0sODk3MTpbLjI1LC43NSwwLDAsLjUxMTExXSw4OTk0OlstLjEzODg5LC4zNjExMSwwLDAsMS4xNDk5OV0sODk5NTpbLS4xMzg4OSwuMzYxMTEsMCwwLDEuMTQ5OTldLDk2NTE6Wy4xOTQ0NCwuNjk0NDQsMCwwLDEuMDIyMjJdLDk2NTc6Wy0uMDI3NzgsLjQ3MjIyLDAsMCwuNTc1XSw5NjYxOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjAyMjIyXSw5NjY3OlstLjAyNzc4LC40NzIyMiwwLDAsLjU3NV0sOTcxMTpbLjE5NDQ0LC42OTQ0NCwwLDAsMS4xNDk5OV0sOTgyNDpbLjEyOTYzLC42OTQ0NCwwLDAsLjg5NDQ0XSw5ODI1OlsuMTI5NjMsLjY5NDQ0LDAsMCwuODk0NDRdLDk4MjY6Wy4xMjk2MywuNjk0NDQsMCwwLC44OTQ0NF0sOTgyNzpbLjEyOTYzLC42OTQ0NCwwLDAsLjg5NDQ0XSw5ODM3OlswLC43NSwwLDAsLjQ0NzIyXSw5ODM4OlsuMTk0NDQsLjY5NDQ0LDAsMCwuNDQ3MjJdLDk4Mzk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC40NDcyMl0sMTAyMTY6Wy4yNSwuNzUsMCwwLC40NDcyMl0sMTAyMTc6Wy4yNSwuNzUsMCwwLC40NDcyMl0sMTA4MTU6WzAsLjY4NjExLDAsMCwuOV0sMTA5Mjc6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sMTA5Mjg6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sNTczNzY6Wy4xOTQ0NCwuNjk0NDQsMCwwLDBdfSwiTWFpbi1Cb2xkSXRhbGljIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsLjExNDE3LDAsLjM4NjExXSwzNDpbMCwuNjk0NDQsLjA3OTM5LDAsLjYyMDU1XSwzNTpbLjE5NDQ0LC42OTQ0NCwuMDY4MzMsMCwuOTQ0NDRdLDM3OlsuMDU1NTYsLjc1LC4xMjg2MSwwLC45NDQ0NF0sMzg6WzAsLjY5NDQ0LC4wODUyOCwwLC44ODU1NV0sMzk6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sNDA6Wy4yNSwuNzUsLjE1ODA2LDAsLjQ3MzMzXSw0MTpbLjI1LC43NSwuMDMzMDYsMCwuNDczMzNdLDQyOlswLC43NSwuMTQzMzMsMCwuNTkxMTFdLDQzOlsuMTAzMzMsLjYwMzMzLC4wMzMwNiwwLC44ODU1NV0sNDQ6Wy4xOTQ0NCwuMTQ3MjIsMCwwLC4zNTU1NV0sNDU6WzAsLjQ0NDQ0LC4wMjYxMSwwLC40MTQ0NF0sNDY6WzAsLjE0NzIyLDAsMCwuMzU1NTVdLDQ3OlsuMjUsLjc1LC4xNTgwNiwwLC41OTExMV0sNDg6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNDk6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTA6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTE6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTI6Wy4xOTQ0NCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1MzpbMCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1NDpbMCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1NTpbLjE5NDQ0LC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU2OlswLC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU3OlswLC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU4OlswLC40NDQ0NCwuMDY2OTUsMCwuMzU1NTVdLDU5OlsuMTk0NDQsLjQ0NDQ0LC4wNjY5NSwwLC4zNTU1NV0sNjE6Wy0uMTA4ODksLjM5MTExLC4wNjgzMywwLC44ODU1NV0sNjM6WzAsLjY5NDQ0LC4xMTQ3MiwwLC41OTExMV0sNjQ6WzAsLjY5NDQ0LC4wOTIwOCwwLC44ODU1NV0sNjU6WzAsLjY4NjExLDAsMCwuODY1NTVdLDY2OlswLC42ODYxMSwuMDk5MiwwLC44MTY2Nl0sNjc6WzAsLjY4NjExLC4xNDIwOCwwLC44MjY2Nl0sNjg6WzAsLjY4NjExLC4wOTA2MiwwLC44NzU1NV0sNjk6WzAsLjY4NjExLC4xMTQzMSwwLC43NTY2Nl0sNzA6WzAsLjY4NjExLC4xMjkwMywwLC43MjcyMl0sNzE6WzAsLjY4NjExLC4wNzM0NywwLC44OTUyN10sNzI6WzAsLjY4NjExLC4xNzIwOCwwLC44OTYxXSw3MzpbMCwuNjg2MTEsLjE1NjgxLDAsLjQ3MTY2XSw3NDpbMCwuNjg2MTEsLjE0NSwwLC42MTA1NV0sNzU6WzAsLjY4NjExLC4xNDIwOCwwLC44OTQ5OV0sNzY6WzAsLjY4NjExLDAsMCwuNjk3NzddLDc3OlswLC42ODYxMSwuMTcyMDgsMCwxLjA3Mjc3XSw3ODpbMCwuNjg2MTEsLjE3MjA4LDAsLjg5NjFdLDc5OlswLC42ODYxMSwuMDkwNjIsMCwuODU0OTldLDgwOlswLC42ODYxMSwuMDk5MiwwLC43ODcyMV0sODE6Wy4xOTQ0NCwuNjg2MTEsLjA5MDYyLDAsLjg1NDk5XSw4MjpbMCwuNjg2MTEsLjAyNTU5LDAsLjg1OTQ0XSw4MzpbMCwuNjg2MTEsLjExMjY0LDAsLjY0OTk5XSw4NDpbMCwuNjg2MTEsLjEyOTAzLDAsLjc5NjFdLDg1OlswLC42ODYxMSwuMTcyMDgsMCwuODgwODNdLDg2OlswLC42ODYxMSwuMTg2MjUsMCwuODY1NTVdLDg3OlswLC42ODYxMSwuMTg2MjUsMCwxLjE1OTk5XSw4ODpbMCwuNjg2MTEsLjE1NjgxLDAsLjg2NTU1XSw4OTpbMCwuNjg2MTEsLjE5ODAzLDAsLjg2NTU1XSw5MDpbMCwuNjg2MTEsLjE0MjA4LDAsLjcwODg4XSw5MTpbLjI1LC43NSwuMTg3NSwwLC4zNTYxMV0sOTM6Wy4yNSwuNzUsLjA5OTcyLDAsLjM1NjExXSw5NDpbMCwuNjk0NDQsLjA2NzA5LDAsLjU5MTExXSw5NTpbLjMxLC4xMzQ0NCwuMDk4MTEsMCwuNTkxMTFdLDk3OlswLC40NDQ0NCwuMDk0MjYsMCwuNTkxMTFdLDk4OlswLC42OTQ0NCwuMDc4NjEsMCwuNTMyMjJdLDk5OlswLC40NDQ0NCwuMDUyMjIsMCwuNTMyMjJdLDEwMDpbMCwuNjk0NDQsLjEwODYxLDAsLjU5MTExXSwxMDE6WzAsLjQ0NDQ0LC4wODUsMCwuNTMyMjJdLDEwMjpbLjE5NDQ0LC42OTQ0NCwuMjE3NzgsMCwuNF0sMTAzOlsuMTk0NDQsLjQ0NDQ0LC4xMDUsMCwuNTMyMjJdLDEwNDpbMCwuNjk0NDQsLjA5NDI2LDAsLjU5MTExXSwxMDU6WzAsLjY5MzI2LC4xMTM4NywwLC4zNTU1NV0sMTA2OlsuMTk0NDQsLjY5MzI2LC4xNjcyLDAsLjM1NTU1XSwxMDc6WzAsLjY5NDQ0LC4xMTExMSwwLC41MzIyMl0sMTA4OlswLC42OTQ0NCwuMTA4NjEsMCwuMjk2NjZdLDEwOTpbMCwuNDQ0NDQsLjA5NDI2LDAsLjk0NDQ0XSwxMTA6WzAsLjQ0NDQ0LC4wOTQyNiwwLC42NDk5OV0sMTExOlswLC40NDQ0NCwuMDc4NjEsMCwuNTkxMTFdLDExMjpbLjE5NDQ0LC40NDQ0NCwuMDc4NjEsMCwuNTkxMTFdLDExMzpbLjE5NDQ0LC40NDQ0NCwuMTA1LDAsLjUzMjIyXSwxMTQ6WzAsLjQ0NDQ0LC4xMTExMSwwLC41MDE2N10sMTE1OlswLC40NDQ0NCwuMDgxNjcsMCwuNDg2OTRdLDExNjpbMCwuNjM0OTIsLjA5NjM5LDAsLjM4NV0sMTE3OlswLC40NDQ0NCwuMDk0MjYsMCwuNjIwNTVdLDExODpbMCwuNDQ0NDQsLjExMTExLDAsLjUzMjIyXSwxMTk6WzAsLjQ0NDQ0LC4xMTExMSwwLC43Njc3N10sMTIwOlswLC40NDQ0NCwuMTI1ODMsMCwuNTYwNTVdLDEyMTpbLjE5NDQ0LC40NDQ0NCwuMTA1LDAsLjU2MTY2XSwxMjI6WzAsLjQ0NDQ0LC4xMzg4OSwwLC40OTA1NV0sMTI2OlsuMzUsLjM0NDQ0LC4xMTQ3MiwwLC41OTExMV0sMTYwOlswLDAsMCwwLC4yNV0sMTY4OlswLC42OTQ0NCwuMTE0NzMsMCwuNTkxMTFdLDE3NjpbMCwuNjk0NDQsMCwwLC45NDg4OF0sMTg0OlsuMTcwMTQsMCwwLDAsLjUzMjIyXSwxOTg6WzAsLjY4NjExLC4xMTQzMSwwLDEuMDIyNzddLDIxNjpbLjA0ODYxLC43MzQ3MiwuMDkwNjIsMCwuODg1NTVdLDIyMzpbLjE5NDQ0LC42OTQ0NCwuMDk3MzYsMCwuNjY1XSwyMzA6WzAsLjQ0NDQ0LC4wODUsMCwuODI2NjZdLDI0ODpbLjA5NzIyLC41NDE2NywuMDk0NTgsMCwuNTkxMTFdLDMwNTpbMCwuNDQ0NDQsLjA5NDI2LDAsLjM1NTU1XSwzMzg6WzAsLjY4NjExLC4xMTQzMSwwLDEuMTQwNTRdLDMzOTpbMCwuNDQ0NDQsLjA4NSwwLC44MjY2Nl0sNTY3OlsuMTk0NDQsLjQ0NDQ0LC4wNDYxMSwwLC4zODVdLDcxMDpbMCwuNjk0NDQsLjA2NzA5LDAsLjU5MTExXSw3MTE6WzAsLjYzMTk0LC4wODI3MSwwLC41OTExMV0sNzEzOlswLC41OTQ0NCwuMTA0NDQsMCwuNTkxMTFdLDcxNDpbMCwuNjk0NDQsLjA4NTI4LDAsLjU5MTExXSw3MTU6WzAsLjY5NDQ0LDAsMCwuNTkxMTFdLDcyODpbMCwuNjk0NDQsLjEwMzMzLDAsLjU5MTExXSw3Mjk6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sNzMwOlswLC42OTQ0NCwwLDAsLjk0ODg4XSw3MzI6WzAsLjY5NDQ0LC4xMTQ3MiwwLC41OTExMV0sNzMzOlswLC42OTQ0NCwuMTE0NzIsMCwuNTkxMTFdLDkxNTpbMCwuNjg2MTEsLjEyOTAzLDAsLjY5Nzc3XSw5MTY6WzAsLjY4NjExLDAsMCwuOTQ0NDRdLDkyMDpbMCwuNjg2MTEsLjA5MDYyLDAsLjg4NTU1XSw5MjM6WzAsLjY4NjExLDAsMCwuODA2NjZdLDkyNjpbMCwuNjg2MTEsLjE1MDkyLDAsLjc2Nzc3XSw5Mjg6WzAsLjY4NjExLC4xNzIwOCwwLC44OTYxXSw5MzE6WzAsLjY4NjExLC4xMTQzMSwwLC44MjY2Nl0sOTMzOlswLC42ODYxMSwuMTA3NzgsMCwuODg1NTVdLDkzNDpbMCwuNjg2MTEsLjA1NjMyLDAsLjgyNjY2XSw5MzY6WzAsLjY4NjExLC4xMDc3OCwwLC44ODU1NV0sOTM3OlswLC42ODYxMSwuMDk5MiwwLC44MjY2Nl0sODIxMTpbMCwuNDQ0NDQsLjA5ODExLDAsLjU5MTExXSw4MjEyOlswLC40NDQ0NCwuMDk4MTEsMCwxLjE4MjIxXSw4MjE2OlswLC42OTQ0NCwuMTI5NDUsMCwuMzU1NTVdLDgyMTc6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sODIyMDpbMCwuNjk0NDQsLjE2NzcyLDAsLjYyMDU1XSw4MjIxOlswLC42OTQ0NCwuMDc5MzksMCwuNjIwNTVdfSwiTWFpbi1JdGFsaWMiOnszMjpbMCwwLDAsMCwuMjVdLDMzOlswLC42OTQ0NCwuMTI0MTcsMCwuMzA2NjddLDM0OlswLC42OTQ0NCwuMDY5NjEsMCwuNTE0NDRdLDM1OlsuMTk0NDQsLjY5NDQ0LC4wNjYxNiwwLC44MTc3N10sMzc6Wy4wNTU1NiwuNzUsLjEzNjM5LDAsLjgxNzc3XSwzODpbMCwuNjk0NDQsLjA5Njk0LDAsLjc2NjY2XSwzOTpbMCwuNjk0NDQsLjEyNDE3LDAsLjMwNjY3XSw0MDpbLjI1LC43NSwuMTYxOTQsMCwuNDA4ODldLDQxOlsuMjUsLjc1LC4wMzY5NCwwLC40MDg4OV0sNDI6WzAsLjc1LC4xNDkxNywwLC41MTExMV0sNDM6Wy4wNTY2NywuNTYxNjcsLjAzNjk0LDAsLjc2NjY2XSw0NDpbLjE5NDQ0LC4xMDU1NiwwLDAsLjMwNjY3XSw0NTpbMCwuNDMwNTYsLjAyODI2LDAsLjM1Nzc4XSw0NjpbMCwuMTA1NTYsMCwwLC4zMDY2N10sNDc6Wy4yNSwuNzUsLjE2MTk0LDAsLjUxMTExXSw0ODpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw0OTpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MDpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MTpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MjpbLjE5NDQ0LC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDUzOlswLC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDU0OlswLC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDU1OlsuMTk0NDQsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTY6WzAsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTc6WzAsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTg6WzAsLjQzMDU2LC4wNTgyLDAsLjMwNjY3XSw1OTpbLjE5NDQ0LC40MzA1NiwuMDU4MiwwLC4zMDY2N10sNjE6Wy0uMTMzMTMsLjM2Njg3LC4wNjYxNiwwLC43NjY2Nl0sNjM6WzAsLjY5NDQ0LC4xMjI1LDAsLjUxMTExXSw2NDpbMCwuNjk0NDQsLjA5NTk3LDAsLjc2NjY2XSw2NTpbMCwuNjgzMzMsMCwwLC43NDMzM10sNjY6WzAsLjY4MzMzLC4xMDI1NywwLC43MDM4OV0sNjc6WzAsLjY4MzMzLC4xNDUyOCwwLC43MTU1NV0sNjg6WzAsLjY4MzMzLC4wOTQwMywwLC43NTVdLDY5OlswLC42ODMzMywuMTIwMjgsMCwuNjc4MzNdLDcwOlswLC42ODMzMywuMTMzMDUsMCwuNjUyNzddLDcxOlswLC42ODMzMywuMDg3MjIsMCwuNzczNjFdLDcyOlswLC42ODMzMywuMTYzODksMCwuNzQzMzNdLDczOlswLC42ODMzMywuMTU4MDYsMCwuMzg1NTVdLDc0OlswLC42ODMzMywuMTQwMjgsMCwuNTI1XSw3NTpbMCwuNjgzMzMsLjE0NTI4LDAsLjc2ODg4XSw3NjpbMCwuNjgzMzMsMCwwLC42MjcyMl0sNzc6WzAsLjY4MzMzLC4xNjM4OSwwLC44OTY2Nl0sNzg6WzAsLjY4MzMzLC4xNjM4OSwwLC43NDMzM10sNzk6WzAsLjY4MzMzLC4wOTQwMywwLC43NjY2Nl0sODA6WzAsLjY4MzMzLC4xMDI1NywwLC42NzgzM10sODE6Wy4xOTQ0NCwuNjgzMzMsLjA5NDAzLDAsLjc2NjY2XSw4MjpbMCwuNjgzMzMsLjAzODY4LDAsLjcyOTQ0XSw4MzpbMCwuNjgzMzMsLjExOTcyLDAsLjU2MjIyXSw4NDpbMCwuNjgzMzMsLjEzMzA1LDAsLjcxNTU1XSw4NTpbMCwuNjgzMzMsLjE2Mzg5LDAsLjc0MzMzXSw4NjpbMCwuNjgzMzMsLjE4MzYxLDAsLjc0MzMzXSw4NzpbMCwuNjgzMzMsLjE4MzYxLDAsLjk5ODg4XSw4ODpbMCwuNjgzMzMsLjE1ODA2LDAsLjc0MzMzXSw4OTpbMCwuNjgzMzMsLjE5MzgzLDAsLjc0MzMzXSw5MDpbMCwuNjgzMzMsLjE0NTI4LDAsLjYxMzMzXSw5MTpbLjI1LC43NSwuMTg3NSwwLC4zMDY2N10sOTM6Wy4yNSwuNzUsLjEwNTI4LDAsLjMwNjY3XSw5NDpbMCwuNjk0NDQsLjA2NjQ2LDAsLjUxMTExXSw5NTpbLjMxLC4xMjA1NiwuMDkyMDgsMCwuNTExMTFdLDk3OlswLC40MzA1NiwuMDc2NzEsMCwuNTExMTFdLDk4OlswLC42OTQ0NCwuMDYzMTIsMCwuNDZdLDk5OlswLC40MzA1NiwuMDU2NTMsMCwuNDZdLDEwMDpbMCwuNjk0NDQsLjEwMzMzLDAsLjUxMTExXSwxMDE6WzAsLjQzMDU2LC4wNzUxNCwwLC40Nl0sMTAyOlsuMTk0NDQsLjY5NDQ0LC4yMTE5NCwwLC4zMDY2N10sMTAzOlsuMTk0NDQsLjQzMDU2LC4wODg0NywwLC40Nl0sMTA0OlswLC42OTQ0NCwuMDc2NzEsMCwuNTExMTFdLDEwNTpbMCwuNjU1MzYsLjEwMTksMCwuMzA2NjddLDEwNjpbLjE5NDQ0LC42NTUzNiwuMTQ0NjcsMCwuMzA2NjddLDEwNzpbMCwuNjk0NDQsLjEwNzY0LDAsLjQ2XSwxMDg6WzAsLjY5NDQ0LC4xMDMzMywwLC4yNTU1NV0sMTA5OlswLC40MzA1NiwuMDc2NzEsMCwuODE3NzddLDExMDpbMCwuNDMwNTYsLjA3NjcxLDAsLjU2MjIyXSwxMTE6WzAsLjQzMDU2LC4wNjMxMiwwLC41MTExMV0sMTEyOlsuMTk0NDQsLjQzMDU2LC4wNjMxMiwwLC41MTExMV0sMTEzOlsuMTk0NDQsLjQzMDU2LC4wODg0NywwLC40Nl0sMTE0OlswLC40MzA1NiwuMTA3NjQsMCwuNDIxNjZdLDExNTpbMCwuNDMwNTYsLjA4MjA4LDAsLjQwODg5XSwxMTY6WzAsLjYxNTA4LC4wOTQ4NiwwLC4zMzIyMl0sMTE3OlswLC40MzA1NiwuMDc2NzEsMCwuNTM2NjZdLDExODpbMCwuNDMwNTYsLjEwNzY0LDAsLjQ2XSwxMTk6WzAsLjQzMDU2LC4xMDc2NCwwLC42NjQ0NF0sMTIwOlswLC40MzA1NiwuMTIwNDIsMCwuNDYzODldLDEyMTpbLjE5NDQ0LC40MzA1NiwuMDg4NDcsMCwuNDg1NTVdLDEyMjpbMCwuNDMwNTYsLjEyMjkyLDAsLjQwODg5XSwxMjY6Wy4zNSwuMzE3ODYsLjExNTg1LDAsLjUxMTExXSwxNjA6WzAsMCwwLDAsLjI1XSwxNjg6WzAsLjY2Nzg2LC4xMDQ3NCwwLC41MTExMV0sMTc2OlswLC42OTQ0NCwwLDAsLjgzMTI5XSwxODQ6Wy4xNzAxNCwwLDAsMCwuNDZdLDE5ODpbMCwuNjgzMzMsLjEyMDI4LDAsLjg4Mjc3XSwyMTY6Wy4wNDg2MSwuNzMxOTQsLjA5NDAzLDAsLjc2NjY2XSwyMjM6Wy4xOTQ0NCwuNjk0NDQsLjEwNTE0LDAsLjUzNjY2XSwyMzA6WzAsLjQzMDU2LC4wNzUxNCwwLC43MTU1NV0sMjQ4OlsuMDk3MjIsLjUyNzc4LC4wOTE5NCwwLC41MTExMV0sMzM4OlswLC42ODMzMywuMTIwMjgsMCwuOTg0OTldLDMzOTpbMCwuNDMwNTYsLjA3NTE0LDAsLjcxNTU1XSw3MTA6WzAsLjY5NDQ0LC4wNjY0NiwwLC41MTExMV0sNzExOlswLC42Mjg0NywuMDgyOTUsMCwuNTExMTFdLDcxMzpbMCwuNTYxNjcsLjEwMzMzLDAsLjUxMTExXSw3MTQ6WzAsLjY5NDQ0LC4wOTY5NCwwLC41MTExMV0sNzE1OlswLC42OTQ0NCwwLDAsLjUxMTExXSw3Mjg6WzAsLjY5NDQ0LC4xMDgwNiwwLC41MTExMV0sNzI5OlswLC42Njc4NiwuMTE3NTIsMCwuMzA2NjddLDczMDpbMCwuNjk0NDQsMCwwLC44MzEyOV0sNzMyOlswLC42Njc4NiwuMTE1ODUsMCwuNTExMTFdLDczMzpbMCwuNjk0NDQsLjEyMjUsMCwuNTExMTFdLDkxNTpbMCwuNjgzMzMsLjEzMzA1LDAsLjYyNzIyXSw5MTY6WzAsLjY4MzMzLDAsMCwuODE3NzddLDkyMDpbMCwuNjgzMzMsLjA5NDAzLDAsLjc2NjY2XSw5MjM6WzAsLjY4MzMzLDAsMCwuNjkyMjJdLDkyNjpbMCwuNjgzMzMsLjE1Mjk0LDAsLjY2NDQ0XSw5Mjg6WzAsLjY4MzMzLC4xNjM4OSwwLC43NDMzM10sOTMxOlswLC42ODMzMywuMTIwMjgsMCwuNzE1NTVdLDkzMzpbMCwuNjgzMzMsLjExMTExLDAsLjc2NjY2XSw5MzQ6WzAsLjY4MzMzLC4wNTk4NiwwLC43MTU1NV0sOTM2OlswLC42ODMzMywuMTExMTEsMCwuNzY2NjZdLDkzNzpbMCwuNjgzMzMsLjEwMjU3LDAsLjcxNTU1XSw4MjExOlswLC40MzA1NiwuMDkyMDgsMCwuNTExMTFdLDgyMTI6WzAsLjQzMDU2LC4wOTIwOCwwLDEuMDIyMjJdLDgyMTY6WzAsLjY5NDQ0LC4xMjQxNywwLC4zMDY2N10sODIxNzpbMCwuNjk0NDQsLjEyNDE3LDAsLjMwNjY3XSw4MjIwOlswLC42OTQ0NCwuMTY4NSwwLC41MTQ0NF0sODIyMTpbMCwuNjk0NDQsLjA2OTYxLDAsLjUxNDQ0XSw4NDYzOlswLC42ODg4OSwwLDAsLjU0MDI4XX0sIk1haW4tUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMjc3NzhdLDM0OlswLC42OTQ0NCwwLDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuODMzMzRdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNV0sMzc6Wy4wNTU1NiwuNzUsMCwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LDAsMCwuNzc3NzhdLDM5OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw0MDpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MTpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MjpbMCwuNzUsMCwwLC41XSw0MzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw0NDpbLjE5NDQ0LC4xMDU1NiwwLDAsLjI3Nzc4XSw0NTpbMCwuNDMwNTYsMCwwLC4zMzMzM10sNDY6WzAsLjEwNTU2LDAsMCwuMjc3NzhdLDQ3OlsuMjUsLjc1LDAsMCwuNV0sNDg6WzAsLjY0NDQ0LDAsMCwuNV0sNDk6WzAsLjY0NDQ0LDAsMCwuNV0sNTA6WzAsLjY0NDQ0LDAsMCwuNV0sNTE6WzAsLjY0NDQ0LDAsMCwuNV0sNTI6WzAsLjY0NDQ0LDAsMCwuNV0sNTM6WzAsLjY0NDQ0LDAsMCwuNV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNV0sNTU6WzAsLjY0NDQ0LDAsMCwuNV0sNTY6WzAsLjY0NDQ0LDAsMCwuNV0sNTc6WzAsLjY0NDQ0LDAsMCwuNV0sNTg6WzAsLjQzMDU2LDAsMCwuMjc3NzhdLDU5OlsuMTk0NDQsLjQzMDU2LDAsMCwuMjc3NzhdLDYwOlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw2MTpbLS4xMzMxMywuMzY2ODcsMCwwLC43Nzc3OF0sNjI6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwwLDAsLjQ3MjIyXSw2NDpbMCwuNjk0NDQsMCwwLC43Nzc3OF0sNjU6WzAsLjY4MzMzLDAsMCwuNzVdLDY2OlswLC42ODMzMywwLDAsLjcwODM0XSw2NzpbMCwuNjgzMzMsMCwwLC43MjIyMl0sNjg6WzAsLjY4MzMzLDAsMCwuNzYzODldLDY5OlswLC42ODMzMywwLDAsLjY4MDU2XSw3MDpbMCwuNjgzMzMsMCwwLC42NTI3OF0sNzE6WzAsLjY4MzMzLDAsMCwuNzg0NzJdLDcyOlswLC42ODMzMywwLDAsLjc1XSw3MzpbMCwuNjgzMzMsMCwwLC4zNjExMV0sNzQ6WzAsLjY4MzMzLDAsMCwuNTEzODldLDc1OlswLC42ODMzMywwLDAsLjc3Nzc4XSw3NjpbMCwuNjgzMzMsMCwwLC42MjVdLDc3OlswLC42ODMzMywwLDAsLjkxNjY3XSw3ODpbMCwuNjgzMzMsMCwwLC43NV0sNzk6WzAsLjY4MzMzLDAsMCwuNzc3NzhdLDgwOlswLC42ODMzMywwLDAsLjY4MDU2XSw4MTpbLjE5NDQ0LC42ODMzMywwLDAsLjc3Nzc4XSw4MjpbMCwuNjgzMzMsMCwwLC43MzYxMV0sODM6WzAsLjY4MzMzLDAsMCwuNTU1NTZdLDg0OlswLC42ODMzMywwLDAsLjcyMjIyXSw4NTpbMCwuNjgzMzMsMCwwLC43NV0sODY6WzAsLjY4MzMzLC4wMTM4OSwwLC43NV0sODc6WzAsLjY4MzMzLC4wMTM4OSwwLDEuMDI3NzhdLDg4OlswLC42ODMzMywwLDAsLjc1XSw4OTpbMCwuNjgzMzMsLjAyNSwwLC43NV0sOTA6WzAsLjY4MzMzLDAsMCwuNjExMTFdLDkxOlsuMjUsLjc1LDAsMCwuMjc3NzhdLDkyOlsuMjUsLjc1LDAsMCwuNV0sOTM6Wy4yNSwuNzUsMCwwLC4yNzc3OF0sOTQ6WzAsLjY5NDQ0LDAsMCwuNV0sOTU6Wy4zMSwuMTIwNTYsLjAyNzc4LDAsLjVdLDk3OlswLC40MzA1NiwwLDAsLjVdLDk4OlswLC42OTQ0NCwwLDAsLjU1NTU2XSw5OTpbMCwuNDMwNTYsMCwwLC40NDQ0NV0sMTAwOlswLC42OTQ0NCwwLDAsLjU1NTU2XSwxMDE6WzAsLjQzMDU2LDAsMCwuNDQ0NDVdLDEwMjpbMCwuNjk0NDQsLjA3Nzc4LDAsLjMwNTU2XSwxMDM6Wy4xOTQ0NCwuNDMwNTYsLjAxMzg5LDAsLjVdLDEwNDpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sMTA1OlswLC42Njc4NiwwLDAsLjI3Nzc4XSwxMDY6Wy4xOTQ0NCwuNjY3ODYsMCwwLC4zMDU1Nl0sMTA3OlswLC42OTQ0NCwwLDAsLjUyNzc4XSwxMDg6WzAsLjY5NDQ0LDAsMCwuMjc3NzhdLDEwOTpbMCwuNDMwNTYsMCwwLC44MzMzNF0sMTEwOlswLC40MzA1NiwwLDAsLjU1NTU2XSwxMTE6WzAsLjQzMDU2LDAsMCwuNV0sMTEyOlsuMTk0NDQsLjQzMDU2LDAsMCwuNTU1NTZdLDExMzpbLjE5NDQ0LC40MzA1NiwwLDAsLjUyNzc4XSwxMTQ6WzAsLjQzMDU2LDAsMCwuMzkxNjddLDExNTpbMCwuNDMwNTYsMCwwLC4zOTQ0NV0sMTE2OlswLC42MTUwOCwwLDAsLjM4ODg5XSwxMTc6WzAsLjQzMDU2LDAsMCwuNTU1NTZdLDExODpbMCwuNDMwNTYsLjAxMzg5LDAsLjUyNzc4XSwxMTk6WzAsLjQzMDU2LC4wMTM4OSwwLC43MjIyMl0sMTIwOlswLC40MzA1NiwwLDAsLjUyNzc4XSwxMjE6Wy4xOTQ0NCwuNDMwNTYsLjAxMzg5LDAsLjUyNzc4XSwxMjI6WzAsLjQzMDU2LDAsMCwuNDQ0NDVdLDEyMzpbLjI1LC43NSwwLDAsLjVdLDEyNDpbLjI1LC43NSwwLDAsLjI3Nzc4XSwxMjU6Wy4yNSwuNzUsMCwwLC41XSwxMjY6Wy4zNSwuMzE3ODYsMCwwLC41XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjM6WzAsLjY5NDQ0LDAsMCwuNzY5MDldLDE2NzpbLjE5NDQ0LC42OTQ0NCwwLDAsLjQ0NDQ1XSwxNjg6WzAsLjY2Nzg2LDAsMCwuNV0sMTcyOlswLC40MzA1NiwwLDAsLjY2NjY3XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzVdLDE3NzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSwxODI6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sMTg0OlsuMTcwMTQsMCwwLDAsLjQ0NDQ1XSwxOTg6WzAsLjY4MzMzLDAsMCwuOTAyNzhdLDIxNTpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSwyMTY6Wy4wNDg2MSwuNzMxOTQsMCwwLC43Nzc3OF0sMjIzOlswLC42OTQ0NCwwLDAsLjVdLDIzMDpbMCwuNDMwNTYsMCwwLC43MjIyMl0sMjQ3OlsuMDgzMzMsLjU4MzMzLDAsMCwuNzc3NzhdLDI0ODpbLjA5NzIyLC41Mjc3OCwwLDAsLjVdLDMwNTpbMCwuNDMwNTYsMCwwLC4yNzc3OF0sMzM4OlswLC42ODMzMywwLDAsMS4wMTM4OV0sMzM5OlswLC40MzA1NiwwLDAsLjc3Nzc4XSw1Njc6Wy4xOTQ0NCwuNDMwNTYsMCwwLC4zMDU1Nl0sNzEwOlswLC42OTQ0NCwwLDAsLjVdLDcxMTpbMCwuNjI4NDcsMCwwLC41XSw3MTM6WzAsLjU2Nzc4LDAsMCwuNV0sNzE0OlswLC42OTQ0NCwwLDAsLjVdLDcxNTpbMCwuNjk0NDQsMCwwLC41XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNV0sNzI5OlswLC42Njc4NiwwLDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNzVdLDczMjpbMCwuNjY3ODYsMCwwLC41XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNV0sOTE1OlswLC42ODMzMywwLDAsLjYyNV0sOTE2OlswLC42ODMzMywwLDAsLjgzMzM0XSw5MjA6WzAsLjY4MzMzLDAsMCwuNzc3NzhdLDkyMzpbMCwuNjgzMzMsMCwwLC42OTQ0NV0sOTI2OlswLC42ODMzMywwLDAsLjY2NjY3XSw5Mjg6WzAsLjY4MzMzLDAsMCwuNzVdLDkzMTpbMCwuNjgzMzMsMCwwLC43MjIyMl0sOTMzOlswLC42ODMzMywwLDAsLjc3Nzc4XSw5MzQ6WzAsLjY4MzMzLDAsMCwuNzIyMjJdLDkzNjpbMCwuNjgzMzMsMCwwLC43Nzc3OF0sOTM3OlswLC42ODMzMywwLDAsLjcyMjIyXSw4MjExOlswLC40MzA1NiwuMDI3NzgsMCwuNV0sODIxMjpbMCwuNDMwNTYsLjAyNzc4LDAsMV0sODIxNjpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sODIxNzpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sODIyMDpbMCwuNjk0NDQsMCwwLC41XSw4MjIxOlswLC42OTQ0NCwwLDAsLjVdLDgyMjQ6Wy4xOTQ0NCwuNjk0NDQsMCwwLC40NDQ0NV0sODIyNTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjQ0NDQ1XSw4MjMwOlswLC4xMjMsMCwwLDEuMTcyXSw4MjQyOlswLC41NTU1NiwwLDAsLjI3NV0sODQwNzpbMCwuNzE0NDQsLjE1MzgyLDAsLjVdLDg0NjM6WzAsLjY4ODg5LDAsMCwuNTQwMjhdLDg0NjU6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDg0Njc6WzAsLjY5NDQ0LDAsLjExMTExLC40MTY2N10sODQ3MjpbLjE5NDQ0LC40MzA1NiwwLC4xMTExMSwuNjM2NDZdLDg0NzY6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDg1MDE6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDg1OTI6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NTkzOlsuMTk0NDQsLjY5NDQ0LDAsMCwuNV0sODU5NDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg1OTU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41XSw4NTk2OlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODU5NzpbLjI1LC43NSwwLDAsLjVdLDg1OTg6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg1OTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MDA6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MDE6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MTQ6Wy4wMTEsLjUxMSwwLDAsMV0sODYxNzpbLjAxMSwuNTExLDAsMCwxLjEyNl0sODYxODpbLjAxMSwuNTExLDAsMCwxLjEyNl0sODYzNjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2Mzc6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjQwOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODY0MTpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTI6Wy4wMTEsLjY3MSwwLDAsMV0sODY1NjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTc6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sODY1ODpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sODY2MDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NjE6Wy4yNSwuNzUsMCwwLC42MTExMV0sODcwNDpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sODcwNjpbMCwuNjk0NDQsLjA1NTU2LC4wODMzNCwuNTMwOV0sODcwNzpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sODcwOTpbLjA1NTU2LC43NSwwLDAsLjVdLDg3MTE6WzAsLjY4MzMzLDAsMCwuODMzMzRdLDg3MTI6Wy4wMzkxLC41MzkxLDAsMCwuNjY2NjddLDg3MTU6Wy4wMzkxLC41MzkxLDAsMCwuNjY2NjddLDg3MjI6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODcyMzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4NzI1OlsuMjUsLjc1LDAsMCwuNV0sODcyNjpbLjI1LC43NSwwLDAsLjVdLDg3Mjc6Wy0uMDM0NzIsLjQ2NTI4LDAsMCwuNV0sODcyODpbLS4wNTU1NSwuNDQ0NDUsMCwwLC41XSw4NzI5OlstLjA1NTU1LC40NDQ0NSwwLDAsLjVdLDg3MzA6Wy4yLC44LDAsMCwuODMzMzRdLDg3MzM6WzAsLjQzMDU2LDAsMCwuNzc3NzhdLDg3MzQ6WzAsLjQzMDU2LDAsMCwxXSw4NzM2OlswLC42OTIyNCwwLDAsLjcyMjIyXSw4NzM5OlsuMjUsLjc1LDAsMCwuMjc3NzhdLDg3NDE6Wy4yNSwuNzUsMCwwLC41XSw4NzQzOlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ0OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ1OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ2OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ3OlsuMTk0NDQsLjY5NDQ0LC4xMTExMSwwLC40MTY2N10sODc2NDpbLS4xMzMxMywuMzY2ODcsMCwwLC43Nzc3OF0sODc2ODpbLjE5NDQ0LC42OTQ0NCwwLDAsLjI3Nzc4XSw4NzcxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4NzczOlstLjAyMiwuNTg5LDAsMCwuNzc4XSw4Nzc2OlstLjAxNjg4LC40ODMxMiwwLDAsLjc3Nzc4XSw4NzgxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4Nzg0OlstLjEzMywuNjczLDAsMCwuNzc4XSw4ODAxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4ODA0OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4MDU6Wy4xMzU5NywuNjM1OTcsMCwwLC43Nzc3OF0sODgxMDpbLjAzOTEsLjUzOTEsMCwwLDFdLDg4MTE6Wy4wMzkxLC41MzkxLDAsMCwxXSw4ODI2OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODI3OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM0OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM1OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM4OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4Mzk6Wy4xMzU5NywuNjM1OTcsMCwwLC43Nzc3OF0sODg0NjpbMCwuNTU1NTYsMCwwLC42NjY2N10sODg0OTpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw4ODUwOlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4NTE6WzAsLjU1NTU2LDAsMCwuNjY2NjddLDg4NTI6WzAsLjU1NTU2LDAsMCwuNjY2NjddLDg4NTM6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODg1NDpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4ODU1OlsuMDgzMzMsLjU4MzMzLDAsMCwuNzc3NzhdLDg4NTY6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODg1NzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4ODY2OlswLC42OTQ0NCwwLDAsLjYxMTExXSw4ODY3OlswLC42OTQ0NCwwLDAsLjYxMTExXSw4ODY4OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw4ODY5OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw4ODcyOlsuMjQ5LC43NSwwLDAsLjg2N10sODkwMDpbLS4wNTU1NSwuNDQ0NDUsMCwwLC41XSw4OTAxOlstLjA1NTU1LC40NDQ0NSwwLDAsLjI3Nzc4XSw4OTAyOlstLjAzNDcyLC40NjUyOCwwLDAsLjVdLDg5MDQ6Wy4wMDUsLjUwNSwwLDAsLjldLDg5NDI6Wy4wMywuOTAzLDAsMCwuMjc4XSw4OTQzOlstLjE5LC4zMTMsMCwwLDEuMTcyXSw4OTQ1OlstLjEsLjgyMywwLDAsMS4yODJdLDg5Njg6Wy4yNSwuNzUsMCwwLC40NDQ0NV0sODk2OTpbLjI1LC43NSwwLDAsLjQ0NDQ1XSw4OTcwOlsuMjUsLjc1LDAsMCwuNDQ0NDVdLDg5NzE6Wy4yNSwuNzUsMCwwLC40NDQ0NV0sODk5NDpbLS4xNDIzNiwuMzU3NjQsMCwwLDFdLDg5OTU6Wy0uMTQyMzYsLjM1NzY0LDAsMCwxXSw5MTM2OlsuMjQ0LC43NDQsMCwwLC40MTJdLDkxMzc6Wy4yNDQsLjc0NSwwLDAsLjQxMl0sOTY1MTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjg4ODg5XSw5NjU3OlstLjAzNDcyLC40NjUyOCwwLDAsLjVdLDk2NjE6Wy4xOTQ0NCwuNjk0NDQsMCwwLC44ODg4OV0sOTY2NzpbLS4wMzQ3MiwuNDY1MjgsMCwwLC41XSw5NzExOlsuMTk0NDQsLjY5NDQ0LDAsMCwxXSw5ODI0OlsuMTI5NjMsLjY5NDQ0LDAsMCwuNzc3NzhdLDk4MjU6Wy4xMjk2MywuNjk0NDQsMCwwLC43Nzc3OF0sOTgyNjpbLjEyOTYzLC42OTQ0NCwwLDAsLjc3Nzc4XSw5ODI3OlsuMTI5NjMsLjY5NDQ0LDAsMCwuNzc3NzhdLDk4Mzc6WzAsLjc1LDAsMCwuMzg4ODldLDk4Mzg6Wy4xOTQ0NCwuNjk0NDQsMCwwLC4zODg4OV0sOTgzOTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjM4ODg5XSwxMDIxNjpbLjI1LC43NSwwLDAsLjM4ODg5XSwxMDIxNzpbLjI1LC43NSwwLDAsLjM4ODg5XSwxMDIyMjpbLjI0NCwuNzQ0LDAsMCwuNDEyXSwxMDIyMzpbLjI0NCwuNzQ1LDAsMCwuNDEyXSwxMDIyOTpbLjAxMSwuNTExLDAsMCwxLjYwOV0sMTAyMzA6Wy4wMTEsLjUxMSwwLDAsMS42MzhdLDEwMjMxOlsuMDExLC41MTEsMCwwLDEuODU5XSwxMDIzMjpbLjAyNCwuNTI1LDAsMCwxLjYwOV0sMTAyMzM6Wy4wMjQsLjUyNSwwLDAsMS42MzhdLDEwMjM0OlsuMDI0LC41MjUsMCwwLDEuODU4XSwxMDIzNjpbLjAxMSwuNTExLDAsMCwxLjYzOF0sMTA4MTU6WzAsLjY4MzMzLDAsMCwuNzVdLDEwOTI3OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDEwOTI4OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDU3Mzc2OlsuMTk0NDQsLjY5NDQ0LDAsMCwwXX0sIk1hdGgtQm9sZEl0YWxpYyI6ezMyOlswLDAsMCwwLC4yNV0sNDg6WzAsLjQ0NDQ0LDAsMCwuNTc1XSw0OTpbMCwuNDQ0NDQsMCwwLC41NzVdLDUwOlswLC40NDQ0NCwwLDAsLjU3NV0sNTE6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC41NzVdLDUyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNTc1XSw1MzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NTpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNTY6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNjU6WzAsLjY4NjExLDAsMCwuODY5NDRdLDY2OlswLC42ODYxMSwuMDQ4MzUsMCwuODY2NF0sNjc6WzAsLjY4NjExLC4wNjk3OSwwLC44MTY5NF0sNjg6WzAsLjY4NjExLC4wMzE5NCwwLC45MzgxMl0sNjk6WzAsLjY4NjExLC4wNTQ1MSwwLC44MTAwN10sNzA6WzAsLjY4NjExLC4xNTk3MiwwLC42ODg4OV0sNzE6WzAsLjY4NjExLDAsMCwuODg2NzNdLDcyOlswLC42ODYxMSwuMDgyMjksMCwuOTgyMjldLDczOlswLC42ODYxMSwuMDc3NzgsMCwuNTExMTFdLDc0OlswLC42ODYxMSwuMTAwNjksMCwuNjMxMjVdLDc1OlswLC42ODYxMSwuMDY5NzksMCwuOTcxMThdLDc2OlswLC42ODYxMSwwLDAsLjc1NTU1XSw3NzpbMCwuNjg2MTEsLjExNDI0LDAsMS4xNDIwMV0sNzg6WzAsLjY4NjExLC4xMTQyNCwwLC45NTAzNF0sNzk6WzAsLjY4NjExLC4wMzE5NCwwLC44MzY2Nl0sODA6WzAsLjY4NjExLC4xNTk3MiwwLC43MjMwOV0sODE6Wy4xOTQ0NCwuNjg2MTEsMCwwLC44Njg2MV0sODI6WzAsLjY4NjExLC4wMDQyMSwwLC44NzIzNV0sODM6WzAsLjY4NjExLC4wNTM4MiwwLC42OTI3MV0sODQ6WzAsLjY4NjExLC4xNTk3MiwwLC42MzY2M10sODU6WzAsLjY4NjExLC4xMTQyNCwwLC44MDAyN10sODY6WzAsLjY4NjExLC4yNTU1NSwwLC42Nzc3OF0sODc6WzAsLjY4NjExLC4xNTk3MiwwLDEuMDkzMDVdLDg4OlswLC42ODYxMSwuMDc3NzgsMCwuOTQ3MjJdLDg5OlswLC42ODYxMSwuMjU1NTUsMCwuNjc0NThdLDkwOlswLC42ODYxMSwuMDY5NzksMCwuNzcyNTddLDk3OlswLC40NDQ0NCwwLDAsLjYzMjg3XSw5ODpbMCwuNjk0NDQsMCwwLC41MjA4M10sOTk6WzAsLjQ0NDQ0LDAsMCwuNTEzNDJdLDEwMDpbMCwuNjk0NDQsMCwwLC42MDk3Ml0sMTAxOlswLC40NDQ0NCwwLDAsLjU1MzYxXSwxMDI6Wy4xOTQ0NCwuNjk0NDQsLjExMDQyLDAsLjU2ODA2XSwxMDM6Wy4xOTQ0NCwuNDQ0NDQsLjAzNzA0LDAsLjU0NDldLDEwNDpbMCwuNjk0NDQsMCwwLC42Njc1OV0sMTA1OlswLC42OTMyNiwwLDAsLjQwNDhdLDEwNjpbLjE5NDQ0LC42OTMyNiwuMDYyMiwwLC40NzA4M10sMTA3OlswLC42OTQ0NCwuMDE4NTIsMCwuNjAzN10sMTA4OlswLC42OTQ0NCwuMDA4OCwwLC4zNDgxNV0sMTA5OlswLC40NDQ0NCwwLDAsMS4wMzI0XSwxMTA6WzAsLjQ0NDQ0LDAsMCwuNzEyOTZdLDExMTpbMCwuNDQ0NDQsMCwwLC41ODQ3Ml0sMTEyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjAwOTJdLDExMzpbLjE5NDQ0LC40NDQ0NCwuMDM3MDQsMCwuNTQyMTNdLDExNDpbMCwuNDQ0NDQsLjAzMTk0LDAsLjUyODddLDExNTpbMCwuNDQ0NDQsMCwwLC41MzEyNV0sMTE2OlswLC42MzQ5MiwwLDAsLjQxNTI4XSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNjgxMDJdLDExODpbMCwuNDQ0NDQsLjAzNzA0LDAsLjU2NjY2XSwxMTk6WzAsLjQ0NDQ0LC4wMjc3OCwwLC44MzE0OF0sMTIwOlswLC40NDQ0NCwwLDAsLjY1OTAzXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAzNzA0LDAsLjU5MDI4XSwxMjI6WzAsLjQ0NDQ0LC4wNDIxMywwLC41NTUwOV0sMTYwOlswLDAsMCwwLC4yNV0sOTE1OlswLC42ODYxMSwuMTU5NzIsMCwuNjU2OTRdLDkxNjpbMCwuNjg2MTEsMCwwLC45NTgzM10sOTIwOlswLC42ODYxMSwuMDMxOTQsMCwuODY3MjJdLDkyMzpbMCwuNjg2MTEsMCwwLC44MDU1NV0sOTI2OlswLC42ODYxMSwuMDc0NTgsMCwuODQxMjVdLDkyODpbMCwuNjg2MTEsLjA4MjI5LDAsLjk4MjI5XSw5MzE6WzAsLjY4NjExLC4wNTQ1MSwwLC44ODUwN10sOTMzOlswLC42ODYxMSwuMTU5NzIsMCwuNjcwODNdLDkzNDpbMCwuNjg2MTEsMCwwLC43NjY2Nl0sOTM2OlswLC42ODYxMSwuMTE2NTMsMCwuNzE0MDJdLDkzNzpbMCwuNjg2MTEsLjA0ODM1LDAsLjg3ODldLDk0NTpbMCwuNDQ0NDQsMCwwLC43NjA2NF0sOTQ2OlsuMTk0NDQsLjY5NDQ0LC4wMzQwMywwLC42NTk3Ml0sOTQ3OlsuMTk0NDQsLjQ0NDQ0LC4wNjM4OSwwLC41OTAwM10sOTQ4OlswLC42OTQ0NCwuMDM4MTksMCwuNTIyMjJdLDk0OTpbMCwuNDQ0NDQsMCwwLC41Mjg4Ml0sOTUwOlsuMTk0NDQsLjY5NDQ0LC4wNjIxNSwwLC41MDgzM10sOTUxOlsuMTk0NDQsLjQ0NDQ0LC4wMzcwNCwwLC42XSw5NTI6WzAsLjY5NDQ0LC4wMzE5NCwwLC41NjE4XSw5NTM6WzAsLjQ0NDQ0LDAsMCwuNDEyMDRdLDk1NDpbMCwuNDQ0NDQsMCwwLC42Njc1OV0sOTU1OlswLC42OTQ0NCwwLDAsLjY3MDgzXSw5NTY6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC43MDc4N10sOTU3OlswLC40NDQ0NCwuMDY4OTgsMCwuNTc2ODVdLDk1ODpbLjE5NDQ0LC42OTQ0NCwuMDMwMjEsMCwuNTA4MzNdLDk1OTpbMCwuNDQ0NDQsMCwwLC41ODQ3Ml0sOTYwOlswLC40NDQ0NCwuMDM3MDQsMCwuNjgyNDFdLDk2MTpbLjE5NDQ0LC40NDQ0NCwwLDAsLjYxMThdLDk2MjpbLjA5NzIyLC40NDQ0NCwuMDc5MTcsMCwuNDIzNjFdLDk2MzpbMCwuNDQ0NDQsLjAzNzA0LDAsLjY4NTg4XSw5NjQ6WzAsLjQ0NDQ0LC4xMzQ3MiwwLC41MjA4M10sOTY1OlswLC40NDQ0NCwuMDM3MDQsMCwuNjMwNTVdLDk2NjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjc0NzIyXSw5Njc6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC43MTgwNV0sOTY4OlsuMTk0NDQsLjY5NDQ0LC4wMzcwNCwwLC43NTgzM10sOTY5OlswLC40NDQ0NCwuMDM3MDQsMCwuNzE3ODJdLDk3NzpbMCwuNjk0NDQsMCwwLC42OTE1NV0sOTgxOlsuMTk0NDQsLjY5NDQ0LDAsMCwuNzEyNV0sOTgyOlswLC40NDQ0NCwuMDMxOTQsMCwuOTc1XSwxMDA5OlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjExOF0sMTAxMzpbMCwuNDQ0NDQsMCwwLC40ODMzM10sNTc2NDk6WzAsLjQ0NDQ0LDAsMCwuMzkzNTJdLDU3OTExOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNDM4ODldfSwiTWF0aC1JdGFsaWMiOnszMjpbMCwwLDAsMCwuMjVdLDQ4OlswLC40MzA1NiwwLDAsLjVdLDQ5OlswLC40MzA1NiwwLDAsLjVdLDUwOlswLC40MzA1NiwwLDAsLjVdLDUxOlsuMTk0NDQsLjQzMDU2LDAsMCwuNV0sNTI6Wy4xOTQ0NCwuNDMwNTYsMCwwLC41XSw1MzpbLjE5NDQ0LC40MzA1NiwwLDAsLjVdLDU0OlswLC42NDQ0NCwwLDAsLjVdLDU1OlsuMTk0NDQsLjQzMDU2LDAsMCwuNV0sNTY6WzAsLjY0NDQ0LDAsMCwuNV0sNTc6Wy4xOTQ0NCwuNDMwNTYsMCwwLC41XSw2NTpbMCwuNjgzMzMsMCwuMTM4ODksLjc1XSw2NjpbMCwuNjgzMzMsLjA1MDE3LC4wODMzNCwuNzU4NTFdLDY3OlswLC42ODMzMywuMDcxNTMsLjA4MzM0LC43MTQ3Ml0sNjg6WzAsLjY4MzMzLC4wMjc3OCwuMDU1NTYsLjgyNzkyXSw2OTpbMCwuNjgzMzMsLjA1NzY0LC4wODMzNCwuNzM4Ml0sNzA6WzAsLjY4MzMzLC4xMzg4OSwuMDgzMzQsLjY0MzA2XSw3MTpbMCwuNjgzMzMsMCwuMDgzMzQsLjc4NjI1XSw3MjpbMCwuNjgzMzMsLjA4MTI1LC4wNTU1NiwuODMxMjVdLDczOlswLC42ODMzMywuMDc4NDcsLjExMTExLC40Mzk1OF0sNzQ6WzAsLjY4MzMzLC4wOTYxOCwuMTY2NjcsLjU1NDUxXSw3NTpbMCwuNjgzMzMsLjA3MTUzLC4wNTU1NiwuODQ5MzFdLDc2OlswLC42ODMzMywwLC4wMjc3OCwuNjgwNTZdLDc3OlswLC42ODMzMywuMTA5MDMsLjA4MzM0LC45NzAxNF0sNzg6WzAsLjY4MzMzLC4xMDkwMywuMDgzMzQsLjgwMzQ3XSw3OTpbMCwuNjgzMzMsLjAyNzc4LC4wODMzNCwuNzYyNzhdLDgwOlswLC42ODMzMywuMTM4ODksLjA4MzM0LC42NDIwMV0sODE6Wy4xOTQ0NCwuNjgzMzMsMCwuMDgzMzQsLjc5MDU2XSw4MjpbMCwuNjgzMzMsLjAwNzczLC4wODMzNCwuNzU5MjldLDgzOlswLC42ODMzMywuMDU3NjQsLjA4MzM0LC42MTMyXSw4NDpbMCwuNjgzMzMsLjEzODg5LC4wODMzNCwuNTg0MzhdLDg1OlswLC42ODMzMywuMTA5MDMsLjAyNzc4LC42ODI3OF0sODY6WzAsLjY4MzMzLC4yMjIyMiwwLC41ODMzM10sODc6WzAsLjY4MzMzLC4xMzg4OSwwLC45NDQ0NV0sODg6WzAsLjY4MzMzLC4wNzg0NywuMDgzMzQsLjgyODQ3XSw4OTpbMCwuNjgzMzMsLjIyMjIyLDAsLjU4MDU2XSw5MDpbMCwuNjgzMzMsLjA3MTUzLC4wODMzNCwuNjgyNjRdLDk3OlswLC40MzA1NiwwLDAsLjUyODU5XSw5ODpbMCwuNjk0NDQsMCwwLC40MjkxN10sOTk6WzAsLjQzMDU2LDAsLjA1NTU2LC40MzI3Nl0sMTAwOlswLC42OTQ0NCwwLC4xNjY2NywuNTIwNDldLDEwMTpbMCwuNDMwNTYsMCwuMDU1NTYsLjQ2NTYzXSwxMDI6Wy4xOTQ0NCwuNjk0NDQsLjEwNzY0LC4xNjY2NywuNDg5NTldLDEwMzpbLjE5NDQ0LC40MzA1NiwuMDM1ODgsLjAyNzc4LC40NzY5N10sMTA0OlswLC42OTQ0NCwwLDAsLjU3NjE2XSwxMDU6WzAsLjY1OTUyLDAsMCwuMzQ0NTFdLDEwNjpbLjE5NDQ0LC42NTk1MiwuMDU3MjQsMCwuNDExODFdLDEwNzpbMCwuNjk0NDQsLjAzMTQ4LDAsLjUyMDZdLDEwODpbMCwuNjk0NDQsLjAxOTY4LC4wODMzNCwuMjk4MzhdLDEwOTpbMCwuNDMwNTYsMCwwLC44NzgwMV0sMTEwOlswLC40MzA1NiwwLDAsLjYwMDIzXSwxMTE6WzAsLjQzMDU2LDAsLjA1NTU2LC40ODQ3Ml0sMTEyOlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC41MDMxM10sMTEzOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDgzMzQsLjQ0NjQxXSwxMTQ6WzAsLjQzMDU2LC4wMjc3OCwuMDU1NTYsLjQ1MTE2XSwxMTU6WzAsLjQzMDU2LDAsLjA1NTU2LC40Njg3NV0sMTE2OlswLC42MTUwOCwwLC4wODMzNCwuMzYxMTFdLDExNzpbMCwuNDMwNTYsMCwuMDI3NzgsLjU3MjQ2XSwxMTg6WzAsLjQzMDU2LC4wMzU4OCwuMDI3NzgsLjQ4NDcyXSwxMTk6WzAsLjQzMDU2LC4wMjY5MSwuMDgzMzQsLjcxNTkyXSwxMjA6WzAsLjQzMDU2LDAsLjAyNzc4LC41NzE1M10sMTIxOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDU1NTYsLjQ5MDI4XSwxMjI6WzAsLjQzMDU2LC4wNDM5OCwuMDU1NTYsLjQ2NTA1XSwxNjA6WzAsMCwwLDAsLjI1XSw5MTU6WzAsLjY4MzMzLC4xMzg4OSwuMDgzMzQsLjYxNTI4XSw5MTY6WzAsLjY4MzMzLDAsLjE2NjY3LC44MzMzNF0sOTIwOlswLC42ODMzMywuMDI3NzgsLjA4MzM0LC43NjI3OF0sOTIzOlswLC42ODMzMywwLC4xNjY2NywuNjk0NDVdLDkyNjpbMCwuNjgzMzMsLjA3NTY5LC4wODMzNCwuNzQyMzZdLDkyODpbMCwuNjgzMzMsLjA4MTI1LC4wNTU1NiwuODMxMjVdLDkzMTpbMCwuNjgzMzMsLjA1NzY0LC4wODMzNCwuNzc5ODZdLDkzMzpbMCwuNjgzMzMsLjEzODg5LC4wNTU1NiwuNTgzMzNdLDkzNDpbMCwuNjgzMzMsMCwuMDgzMzQsLjY2NjY3XSw5MzY6WzAsLjY4MzMzLC4xMSwuMDU1NTYsLjYxMjIyXSw5Mzc6WzAsLjY4MzMzLC4wNTAxNywuMDgzMzQsLjc3MjRdLDk0NTpbMCwuNDMwNTYsLjAwMzcsLjAyNzc4LC42Mzk3XSw5NDY6Wy4xOTQ0NCwuNjk0NDQsLjA1Mjc4LC4wODMzNCwuNTY1NjNdLDk0NzpbLjE5NDQ0LC40MzA1NiwuMDU1NTYsMCwuNTE3NzNdLDk0ODpbMCwuNjk0NDQsLjAzNzg1LC4wNTU1NiwuNDQ0NDRdLDk0OTpbMCwuNDMwNTYsMCwuMDgzMzQsLjQ2NjMyXSw5NTA6Wy4xOTQ0NCwuNjk0NDQsLjA3Mzc4LC4wODMzNCwuNDM3NV0sOTUxOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDU1NTYsLjQ5NjUzXSw5NTI6WzAsLjY5NDQ0LC4wMjc3OCwuMDgzMzQsLjQ2OTQ0XSw5NTM6WzAsLjQzMDU2LDAsLjA1NTU2LC4zNTM5NF0sOTU0OlswLC40MzA1NiwwLDAsLjU3NjE2XSw5NTU6WzAsLjY5NDQ0LDAsMCwuNTgzMzRdLDk1NjpbLjE5NDQ0LC40MzA1NiwwLC4wMjc3OCwuNjAyNTVdLDk1NzpbMCwuNDMwNTYsLjA2MzY2LC4wMjc3OCwuNDkzOThdLDk1ODpbLjE5NDQ0LC42OTQ0NCwuMDQ2MDEsLjExMTExLC40Mzc1XSw5NTk6WzAsLjQzMDU2LDAsLjA1NTU2LC40ODQ3Ml0sOTYwOlswLC40MzA1NiwuMDM1ODgsMCwuNTcwMDNdLDk2MTpbLjE5NDQ0LC40MzA1NiwwLC4wODMzNCwuNTE3MDJdLDk2MjpbLjA5NzIyLC40MzA1NiwuMDc5ODYsLjA4MzM0LC4zNjI4NV0sOTYzOlswLC40MzA1NiwuMDM1ODgsMCwuNTcxNDFdLDk2NDpbMCwuNDMwNTYsLjExMzIsLjAyNzc4LC40MzcxNV0sOTY1OlswLC40MzA1NiwuMDM1ODgsLjAyNzc4LC41NDAyOF0sOTY2OlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC42NTQxN10sOTY3OlsuMTk0NDQsLjQzMDU2LDAsLjA1NTU2LC42MjU2OV0sOTY4OlsuMTk0NDQsLjY5NDQ0LC4wMzU4OCwuMTExMTEsLjY1MTM5XSw5Njk6WzAsLjQzMDU2LC4wMzU4OCwwLC42MjI0NV0sOTc3OlswLC42OTQ0NCwwLC4wODMzNCwuNTkxNDRdLDk4MTpbLjE5NDQ0LC42OTQ0NCwwLC4wODMzNCwuNTk1ODNdLDk4MjpbMCwuNDMwNTYsLjAyNzc4LDAsLjgyODEzXSwxMDA5OlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC41MTcwMl0sMTAxMzpbMCwuNDMwNTYsMCwuMDU1NTYsLjQwNTldLDU3NjQ5OlswLC40MzA1NiwwLC4wMjc3OCwuMzIyNDZdLDU3OTExOlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC4zODQwM119LCJTYW5zU2VyaWYtQm9sZCI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMzY2NjddLDM0OlswLC42OTQ0NCwwLDAsLjU1ODM0XSwzNTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjkxNjY3XSwzNjpbLjA1NTU2LC43NSwwLDAsLjU1XSwzNzpbLjA1NTU2LC43NSwwLDAsMS4wMjkxMl0sMzg6WzAsLjY5NDQ0LDAsMCwuODMwNTZdLDM5OlswLC42OTQ0NCwwLDAsLjMwNTU2XSw0MDpbLjI1LC43NSwwLDAsLjQyNzc4XSw0MTpbLjI1LC43NSwwLDAsLjQyNzc4XSw0MjpbMCwuNzUsMCwwLC41NV0sNDM6Wy4xMTY2NywuNjE2NjcsMCwwLC44NTU1Nl0sNDQ6Wy4xMDU1NiwuMTMwNTYsMCwwLC4zMDU1Nl0sNDU6WzAsLjQ1ODMzLDAsMCwuMzY2NjddLDQ2OlswLC4xMzA1NiwwLDAsLjMwNTU2XSw0NzpbLjI1LC43NSwwLDAsLjU1XSw0ODpbMCwuNjk0NDQsMCwwLC41NV0sNDk6WzAsLjY5NDQ0LDAsMCwuNTVdLDUwOlswLC42OTQ0NCwwLDAsLjU1XSw1MTpbMCwuNjk0NDQsMCwwLC41NV0sNTI6WzAsLjY5NDQ0LDAsMCwuNTVdLDUzOlswLC42OTQ0NCwwLDAsLjU1XSw1NDpbMCwuNjk0NDQsMCwwLC41NV0sNTU6WzAsLjY5NDQ0LDAsMCwuNTVdLDU2OlswLC42OTQ0NCwwLDAsLjU1XSw1NzpbMCwuNjk0NDQsMCwwLC41NV0sNTg6WzAsLjQ1ODMzLDAsMCwuMzA1NTZdLDU5OlsuMTA1NTYsLjQ1ODMzLDAsMCwuMzA1NTZdLDYxOlstLjA5Mzc1LC40MDYyNSwwLDAsLjg1NTU2XSw2MzpbMCwuNjk0NDQsMCwwLC41MTk0NV0sNjQ6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDY1OlswLC42OTQ0NCwwLDAsLjczMzM0XSw2NjpbMCwuNjk0NDQsMCwwLC43MzMzNF0sNjc6WzAsLjY5NDQ0LDAsMCwuNzAyNzhdLDY4OlswLC42OTQ0NCwwLDAsLjc5NDQ1XSw2OTpbMCwuNjk0NDQsMCwwLC42NDE2N10sNzA6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDcxOlswLC42OTQ0NCwwLDAsLjczMzM0XSw3MjpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sNzM6WzAsLjY5NDQ0LDAsMCwuMzMwNTZdLDc0OlswLC42OTQ0NCwwLDAsLjUxOTQ1XSw3NTpbMCwuNjk0NDQsMCwwLC43NjM4OV0sNzY6WzAsLjY5NDQ0LDAsMCwuNTgwNTZdLDc3OlswLC42OTQ0NCwwLDAsLjk3Nzc4XSw3ODpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sNzk6WzAsLjY5NDQ0LDAsMCwuNzk0NDVdLDgwOlswLC42OTQ0NCwwLDAsLjcwMjc4XSw4MTpbLjEwNTU2LC42OTQ0NCwwLDAsLjc5NDQ1XSw4MjpbMCwuNjk0NDQsMCwwLC43MDI3OF0sODM6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDg0OlswLC42OTQ0NCwwLDAsLjczMzM0XSw4NTpbMCwuNjk0NDQsMCwwLC43NjM4OV0sODY6WzAsLjY5NDQ0LC4wMTUyOCwwLC43MzMzNF0sODc6WzAsLjY5NDQ0LC4wMTUyOCwwLDEuMDM4ODldLDg4OlswLC42OTQ0NCwwLDAsLjczMzM0XSw4OTpbMCwuNjk0NDQsLjAyNzUsMCwuNzMzMzRdLDkwOlswLC42OTQ0NCwwLDAsLjY3MjIzXSw5MTpbLjI1LC43NSwwLDAsLjM0MzA2XSw5MzpbLjI1LC43NSwwLDAsLjM0MzA2XSw5NDpbMCwuNjk0NDQsMCwwLC41NV0sOTU6Wy4zNSwuMTA4MzMsLjAzMDU2LDAsLjU1XSw5NzpbMCwuNDU4MzMsMCwwLC41MjVdLDk4OlswLC42OTQ0NCwwLDAsLjU2MTExXSw5OTpbMCwuNDU4MzMsMCwwLC40ODg4OV0sMTAwOlswLC42OTQ0NCwwLDAsLjU2MTExXSwxMDE6WzAsLjQ1ODMzLDAsMCwuNTExMTFdLDEwMjpbMCwuNjk0NDQsLjA3NjM5LDAsLjMzNjExXSwxMDM6Wy4xOTQ0NCwuNDU4MzMsLjAxNTI4LDAsLjU1XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNTYxMTFdLDEwNTpbMCwuNjk0NDQsMCwwLC4yNTU1Nl0sMTA2OlsuMTk0NDQsLjY5NDQ0LDAsMCwuMjg2MTFdLDEwNzpbMCwuNjk0NDQsMCwwLC41MzA1Nl0sMTA4OlswLC42OTQ0NCwwLDAsLjI1NTU2XSwxMDk6WzAsLjQ1ODMzLDAsMCwuODY2NjddLDExMDpbMCwuNDU4MzMsMCwwLC41NjExMV0sMTExOlswLC40NTgzMywwLDAsLjU1XSwxMTI6Wy4xOTQ0NCwuNDU4MzMsMCwwLC41NjExMV0sMTEzOlsuMTk0NDQsLjQ1ODMzLDAsMCwuNTYxMTFdLDExNDpbMCwuNDU4MzMsLjAxNTI4LDAsLjM3MjIyXSwxMTU6WzAsLjQ1ODMzLDAsMCwuNDIxNjddLDExNjpbMCwuNTg5MjksMCwwLC40MDQxN10sMTE3OlswLC40NTgzMywwLDAsLjU2MTExXSwxMTg6WzAsLjQ1ODMzLC4wMTUyOCwwLC41XSwxMTk6WzAsLjQ1ODMzLC4wMTUyOCwwLC43NDQ0NV0sMTIwOlswLC40NTgzMywwLDAsLjVdLDEyMTpbLjE5NDQ0LC40NTgzMywuMDE1MjgsMCwuNV0sMTIyOlswLC40NTgzMywwLDAsLjQ3NjM5XSwxMjY6Wy4zNSwuMzQ0NDQsMCwwLC41NV0sMTYwOlswLDAsMCwwLC4yNV0sMTY4OlswLC42OTQ0NCwwLDAsLjU1XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDE4MDpbMCwuNjk0NDQsMCwwLC41NV0sMTg0OlsuMTcwMTQsMCwwLDAsLjQ4ODg5XSwzMDU6WzAsLjQ1ODMzLDAsMCwuMjU1NTZdLDU2NzpbLjE5NDQ0LC40NTgzMywwLDAsLjI4NjExXSw3MTA6WzAsLjY5NDQ0LDAsMCwuNTVdLDcxMTpbMCwuNjM1NDIsMCwwLC41NV0sNzEzOlswLC42Mzc3OCwwLDAsLjU1XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNTVdLDcyOTpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sNzMwOlswLC42OTQ0NCwwLDAsLjczMzM0XSw3MzI6WzAsLjY5NDQ0LDAsMCwuNTVdLDczMzpbMCwuNjk0NDQsMCwwLC41NV0sOTE1OlswLC42OTQ0NCwwLDAsLjU4MDU2XSw5MTY6WzAsLjY5NDQ0LDAsMCwuOTE2NjddLDkyMDpbMCwuNjk0NDQsMCwwLC44NTU1Nl0sOTIzOlswLC42OTQ0NCwwLDAsLjY3MjIzXSw5MjY6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDkyODpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sOTMxOlswLC42OTQ0NCwwLDAsLjc5NDQ1XSw5MzM6WzAsLjY5NDQ0LDAsMCwuODU1NTZdLDkzNDpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sOTM2OlswLC42OTQ0NCwwLDAsLjg1NTU2XSw5Mzc6WzAsLjY5NDQ0LDAsMCwuNzk0NDVdLDgyMTE6WzAsLjQ1ODMzLC4wMzA1NiwwLC41NV0sODIxMjpbMCwuNDU4MzMsLjAzMDU2LDAsMS4xMDAwMV0sODIxNjpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sODIxNzpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sODIyMDpbMCwuNjk0NDQsMCwwLC41NTgzNF0sODIyMTpbMCwuNjk0NDQsMCwwLC41NTgzNF19LCJTYW5zU2VyaWYtSXRhbGljIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsLjA1NzMzLDAsLjMxOTQ1XSwzNDpbMCwuNjk0NDQsLjAwMzE2LDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LC4wNTA4NywwLC44MzMzNF0sMzY6Wy4wNTU1NiwuNzUsLjExMTU2LDAsLjVdLDM3OlsuMDU1NTYsLjc1LC4wMzEyNiwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LC4wMzA1OCwwLC43NTgzNF0sMzk6WzAsLjY5NDQ0LC4wNzgxNiwwLC4yNzc3OF0sNDA6Wy4yNSwuNzUsLjEzMTY0LDAsLjM4ODg5XSw0MTpbLjI1LC43NSwuMDI1MzYsMCwuMzg4ODldLDQyOlswLC43NSwuMTE3NzUsMCwuNV0sNDM6Wy4wODMzMywuNTgzMzMsLjAyNTM2LDAsLjc3Nzc4XSw0NDpbLjEyNSwuMDgzMzMsMCwwLC4yNzc3OF0sNDU6WzAsLjQ0NDQ0LC4wMTk0NiwwLC4zMzMzM10sNDY6WzAsLjA4MzMzLDAsMCwuMjc3NzhdLDQ3OlsuMjUsLjc1LC4xMzE2NCwwLC41XSw0ODpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDQ5OlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTA6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1MTpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDUyOlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTM6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1NDpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDU1OlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTY6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1NzpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDU4OlswLC40NDQ0NCwuMDI1MDIsMCwuMjc3NzhdLDU5OlsuMTI1LC40NDQ0NCwuMDI1MDIsMCwuMjc3NzhdLDYxOlstLjEzLC4zNywuMDUwODcsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwuMTE4MDksMCwuNDcyMjJdLDY0OlswLC42OTQ0NCwuMDc1NTUsMCwuNjY2NjddLDY1OlswLC42OTQ0NCwwLDAsLjY2NjY3XSw2NjpbMCwuNjk0NDQsLjA4MjkzLDAsLjY2NjY3XSw2NzpbMCwuNjk0NDQsLjExOTgzLDAsLjYzODg5XSw2ODpbMCwuNjk0NDQsLjA3NTU1LDAsLjcyMjIzXSw2OTpbMCwuNjk0NDQsLjExOTgzLDAsLjU5NzIyXSw3MDpbMCwuNjk0NDQsLjEzMzcyLDAsLjU2OTQ1XSw3MTpbMCwuNjk0NDQsLjExOTgzLDAsLjY2NjY3XSw3MjpbMCwuNjk0NDQsLjA4MDk0LDAsLjcwODM0XSw3MzpbMCwuNjk0NDQsLjEzMzcyLDAsLjI3Nzc4XSw3NDpbMCwuNjk0NDQsLjA4MDk0LDAsLjQ3MjIyXSw3NTpbMCwuNjk0NDQsLjExOTgzLDAsLjY5NDQ1XSw3NjpbMCwuNjk0NDQsMCwwLC41NDE2N10sNzc6WzAsLjY5NDQ0LC4wODA5NCwwLC44NzVdLDc4OlswLC42OTQ0NCwuMDgwOTQsMCwuNzA4MzRdLDc5OlswLC42OTQ0NCwuMDc1NTUsMCwuNzM2MTFdLDgwOlswLC42OTQ0NCwuMDgyOTMsMCwuNjM4ODldLDgxOlsuMTI1LC42OTQ0NCwuMDc1NTUsMCwuNzM2MTFdLDgyOlswLC42OTQ0NCwuMDgyOTMsMCwuNjQ1ODRdLDgzOlswLC42OTQ0NCwuMDkyMDUsMCwuNTU1NTZdLDg0OlswLC42OTQ0NCwuMTMzNzIsMCwuNjgwNTZdLDg1OlswLC42OTQ0NCwuMDgwOTQsMCwuNjg3NV0sODY6WzAsLjY5NDQ0LC4xNjE1LDAsLjY2NjY3XSw4NzpbMCwuNjk0NDQsLjE2MTUsMCwuOTQ0NDVdLDg4OlswLC42OTQ0NCwuMTMzNzIsMCwuNjY2NjddLDg5OlswLC42OTQ0NCwuMTcyNjEsMCwuNjY2NjddLDkwOlswLC42OTQ0NCwuMTE5ODMsMCwuNjExMTFdLDkxOlsuMjUsLjc1LC4xNTk0MiwwLC4yODg4OV0sOTM6Wy4yNSwuNzUsLjA4NzE5LDAsLjI4ODg5XSw5NDpbMCwuNjk0NDQsLjA3OTksMCwuNV0sOTU6Wy4zNSwuMDk0NDQsLjA4NjE2LDAsLjVdLDk3OlswLC40NDQ0NCwuMDA5ODEsMCwuNDgwNTZdLDk4OlswLC42OTQ0NCwuMDMwNTcsMCwuNTE2NjddLDk5OlswLC40NDQ0NCwuMDgzMzYsMCwuNDQ0NDVdLDEwMDpbMCwuNjk0NDQsLjA5NDgzLDAsLjUxNjY3XSwxMDE6WzAsLjQ0NDQ0LC4wNjc3OCwwLC40NDQ0NV0sMTAyOlswLC42OTQ0NCwuMjE3MDUsMCwuMzA1NTZdLDEwMzpbLjE5NDQ0LC40NDQ0NCwuMTA4MzYsMCwuNV0sMTA0OlswLC42OTQ0NCwuMDE3NzgsMCwuNTE2NjddLDEwNTpbMCwuNjc5MzcsLjA5NzE4LDAsLjIzODg5XSwxMDY6Wy4xOTQ0NCwuNjc5MzcsLjA5MTYyLDAsLjI2NjY3XSwxMDc6WzAsLjY5NDQ0LC4wODMzNiwwLC40ODg4OV0sMTA4OlswLC42OTQ0NCwuMDk0ODMsMCwuMjM4ODldLDEwOTpbMCwuNDQ0NDQsLjAxNzc4LDAsLjc5NDQ1XSwxMTA6WzAsLjQ0NDQ0LC4wMTc3OCwwLC41MTY2N10sMTExOlswLC40NDQ0NCwuMDY2MTMsMCwuNV0sMTEyOlsuMTk0NDQsLjQ0NDQ0LC4wMzg5LDAsLjUxNjY3XSwxMTM6Wy4xOTQ0NCwuNDQ0NDQsLjA0MTY5LDAsLjUxNjY3XSwxMTQ6WzAsLjQ0NDQ0LC4xMDgzNiwwLC4zNDE2N10sMTE1OlswLC40NDQ0NCwuMDc3OCwwLC4zODMzM10sMTE2OlswLC41NzE0MywuMDcyMjUsMCwuMzYxMTFdLDExNzpbMCwuNDQ0NDQsLjA0MTY5LDAsLjUxNjY3XSwxMTg6WzAsLjQ0NDQ0LC4xMDgzNiwwLC40NjExMV0sMTE5OlswLC40NDQ0NCwuMTA4MzYsMCwuNjgzMzRdLDEyMDpbMCwuNDQ0NDQsLjA5MTY5LDAsLjQ2MTExXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjEwODM2LDAsLjQ2MTExXSwxMjI6WzAsLjQ0NDQ0LC4wODc1MiwwLC40MzQ3Ml0sMTI2OlsuMzUsLjMyNjU5LC4wODgyNiwwLC41XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjg6WzAsLjY3OTM3LC4wNjM4NSwwLC41XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzM3NTJdLDE4NDpbLjE3MDE0LDAsMCwwLC40NDQ0NV0sMzA1OlswLC40NDQ0NCwuMDQxNjksMCwuMjM4ODldLDU2NzpbLjE5NDQ0LC40NDQ0NCwuMDQxNjksMCwuMjY2NjddLDcxMDpbMCwuNjk0NDQsLjA3OTksMCwuNV0sNzExOlswLC42MzE5NCwuMDg0MzIsMCwuNV0sNzEzOlswLC42MDg4OSwuMDg3NzYsMCwuNV0sNzE0OlswLC42OTQ0NCwuMDkyMDUsMCwuNV0sNzE1OlswLC42OTQ0NCwwLDAsLjVdLDcyODpbMCwuNjk0NDQsLjA5NDgzLDAsLjVdLDcyOTpbMCwuNjc5MzcsLjA3Nzc0LDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNzM3NTJdLDczMjpbMCwuNjc2NTksLjA4ODI2LDAsLjVdLDczMzpbMCwuNjk0NDQsLjA5MjA1LDAsLjVdLDkxNTpbMCwuNjk0NDQsLjEzMzcyLDAsLjU0MTY3XSw5MTY6WzAsLjY5NDQ0LDAsMCwuODMzMzRdLDkyMDpbMCwuNjk0NDQsLjA3NTU1LDAsLjc3Nzc4XSw5MjM6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDkyNjpbMCwuNjk0NDQsLjEyODE2LDAsLjY2NjY3XSw5Mjg6WzAsLjY5NDQ0LC4wODA5NCwwLC43MDgzNF0sOTMxOlswLC42OTQ0NCwuMTE5ODMsMCwuNzIyMjJdLDkzMzpbMCwuNjk0NDQsLjA5MDMxLDAsLjc3Nzc4XSw5MzQ6WzAsLjY5NDQ0LC4wNDYwMywwLC43MjIyMl0sOTM2OlswLC42OTQ0NCwuMDkwMzEsMCwuNzc3NzhdLDkzNzpbMCwuNjk0NDQsLjA4MjkzLDAsLjcyMjIyXSw4MjExOlswLC40NDQ0NCwuMDg2MTYsMCwuNV0sODIxMjpbMCwuNDQ0NDQsLjA4NjE2LDAsMV0sODIxNjpbMCwuNjk0NDQsLjA3ODE2LDAsLjI3Nzc4XSw4MjE3OlswLC42OTQ0NCwuMDc4MTYsMCwuMjc3NzhdLDgyMjA6WzAsLjY5NDQ0LC4xNDIwNSwwLC41XSw4MjIxOlswLC42OTQ0NCwuMDAzMTYsMCwuNV19LCJTYW5zU2VyaWYtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMzE5NDVdLDM0OlswLC42OTQ0NCwwLDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuODMzMzRdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNV0sMzc6Wy4wNTU1NiwuNzUsMCwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LDAsMCwuNzU4MzRdLDM5OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw0MDpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MTpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MjpbMCwuNzUsMCwwLC41XSw0MzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw0NDpbLjEyNSwuMDgzMzMsMCwwLC4yNzc3OF0sNDU6WzAsLjQ0NDQ0LDAsMCwuMzMzMzNdLDQ2OlswLC4wODMzMywwLDAsLjI3Nzc4XSw0NzpbLjI1LC43NSwwLDAsLjVdLDQ4OlswLC42NTU1NiwwLDAsLjVdLDQ5OlswLC42NTU1NiwwLDAsLjVdLDUwOlswLC42NTU1NiwwLDAsLjVdLDUxOlswLC42NTU1NiwwLDAsLjVdLDUyOlswLC42NTU1NiwwLDAsLjVdLDUzOlswLC42NTU1NiwwLDAsLjVdLDU0OlswLC42NTU1NiwwLDAsLjVdLDU1OlswLC42NTU1NiwwLDAsLjVdLDU2OlswLC42NTU1NiwwLDAsLjVdLDU3OlswLC42NTU1NiwwLDAsLjVdLDU4OlswLC40NDQ0NCwwLDAsLjI3Nzc4XSw1OTpbLjEyNSwuNDQ0NDQsMCwwLC4yNzc3OF0sNjE6Wy0uMTMsLjM3LDAsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwwLDAsLjQ3MjIyXSw2NDpbMCwuNjk0NDQsMCwwLC42NjY2N10sNjU6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDY2OlswLC42OTQ0NCwwLDAsLjY2NjY3XSw2NzpbMCwuNjk0NDQsMCwwLC42Mzg4OV0sNjg6WzAsLjY5NDQ0LDAsMCwuNzIyMjNdLDY5OlswLC42OTQ0NCwwLDAsLjU5NzIyXSw3MDpbMCwuNjk0NDQsMCwwLC41Njk0NV0sNzE6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDcyOlswLC42OTQ0NCwwLDAsLjcwODM0XSw3MzpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sNzQ6WzAsLjY5NDQ0LDAsMCwuNDcyMjJdLDc1OlswLC42OTQ0NCwwLDAsLjY5NDQ1XSw3NjpbMCwuNjk0NDQsMCwwLC41NDE2N10sNzc6WzAsLjY5NDQ0LDAsMCwuODc1XSw3ODpbMCwuNjk0NDQsMCwwLC43MDgzNF0sNzk6WzAsLjY5NDQ0LDAsMCwuNzM2MTFdLDgwOlswLC42OTQ0NCwwLDAsLjYzODg5XSw4MTpbLjEyNSwuNjk0NDQsMCwwLC43MzYxMV0sODI6WzAsLjY5NDQ0LDAsMCwuNjQ1ODRdLDgzOlswLC42OTQ0NCwwLDAsLjU1NTU2XSw4NDpbMCwuNjk0NDQsMCwwLC42ODA1Nl0sODU6WzAsLjY5NDQ0LDAsMCwuNjg3NV0sODY6WzAsLjY5NDQ0LC4wMTM4OSwwLC42NjY2N10sODc6WzAsLjY5NDQ0LC4wMTM4OSwwLC45NDQ0NV0sODg6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDg5OlswLC42OTQ0NCwuMDI1LDAsLjY2NjY3XSw5MDpbMCwuNjk0NDQsMCwwLC42MTExMV0sOTE6Wy4yNSwuNzUsMCwwLC4yODg4OV0sOTM6Wy4yNSwuNzUsMCwwLC4yODg4OV0sOTQ6WzAsLjY5NDQ0LDAsMCwuNV0sOTU6Wy4zNSwuMDk0NDQsLjAyNzc4LDAsLjVdLDk3OlswLC40NDQ0NCwwLDAsLjQ4MDU2XSw5ODpbMCwuNjk0NDQsMCwwLC41MTY2N10sOTk6WzAsLjQ0NDQ0LDAsMCwuNDQ0NDVdLDEwMDpbMCwuNjk0NDQsMCwwLC41MTY2N10sMTAxOlswLC40NDQ0NCwwLDAsLjQ0NDQ1XSwxMDI6WzAsLjY5NDQ0LC4wNjk0NCwwLC4zMDU1Nl0sMTAzOlsuMTk0NDQsLjQ0NDQ0LC4wMTM4OSwwLC41XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNTE2NjddLDEwNTpbMCwuNjc5MzcsMCwwLC4yMzg4OV0sMTA2OlsuMTk0NDQsLjY3OTM3LDAsMCwuMjY2NjddLDEwNzpbMCwuNjk0NDQsMCwwLC40ODg4OV0sMTA4OlswLC42OTQ0NCwwLDAsLjIzODg5XSwxMDk6WzAsLjQ0NDQ0LDAsMCwuNzk0NDVdLDExMDpbMCwuNDQ0NDQsMCwwLC41MTY2N10sMTExOlswLC40NDQ0NCwwLDAsLjVdLDExMjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjUxNjY3XSwxMTM6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC41MTY2N10sMTE0OlswLC40NDQ0NCwuMDEzODksMCwuMzQxNjddLDExNTpbMCwuNDQ0NDQsMCwwLC4zODMzM10sMTE2OlswLC41NzE0MywwLDAsLjM2MTExXSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNTE2NjddLDExODpbMCwuNDQ0NDQsLjAxMzg5LDAsLjQ2MTExXSwxMTk6WzAsLjQ0NDQ0LC4wMTM4OSwwLC42ODMzNF0sMTIwOlswLC40NDQ0NCwwLDAsLjQ2MTExXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAxMzg5LDAsLjQ2MTExXSwxMjI6WzAsLjQ0NDQ0LDAsMCwuNDM0NzJdLDEyNjpbLjM1LC4zMjY1OSwwLDAsLjVdLDE2MDpbMCwwLDAsMCwuMjVdLDE2ODpbMCwuNjc5MzcsMCwwLC41XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDE4NDpbLjE3MDE0LDAsMCwwLC40NDQ0NV0sMzA1OlswLC40NDQ0NCwwLDAsLjIzODg5XSw1Njc6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC4yNjY2N10sNzEwOlswLC42OTQ0NCwwLDAsLjVdLDcxMTpbMCwuNjMxOTQsMCwwLC41XSw3MTM6WzAsLjYwODg5LDAsMCwuNV0sNzE0OlswLC42OTQ0NCwwLDAsLjVdLDcxNTpbMCwuNjk0NDQsMCwwLC41XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNV0sNzI5OlswLC42NzkzNywwLDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDczMjpbMCwuNjc2NTksMCwwLC41XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNV0sOTE1OlswLC42OTQ0NCwwLDAsLjU0MTY3XSw5MTY6WzAsLjY5NDQ0LDAsMCwuODMzMzRdLDkyMDpbMCwuNjk0NDQsMCwwLC43Nzc3OF0sOTIzOlswLC42OTQ0NCwwLDAsLjYxMTExXSw5MjY6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDkyODpbMCwuNjk0NDQsMCwwLC43MDgzNF0sOTMxOlswLC42OTQ0NCwwLDAsLjcyMjIyXSw5MzM6WzAsLjY5NDQ0LDAsMCwuNzc3NzhdLDkzNDpbMCwuNjk0NDQsMCwwLC43MjIyMl0sOTM2OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw5Mzc6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDgyMTE6WzAsLjQ0NDQ0LC4wMjc3OCwwLC41XSw4MjEyOlswLC40NDQ0NCwuMDI3NzgsMCwxXSw4MjE2OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw4MjE3OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw4MjIwOlswLC42OTQ0NCwwLDAsLjVdLDgyMjE6WzAsLjY5NDQ0LDAsMCwuNV19LCJTY3JpcHQtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNjU6WzAsLjcsLjIyOTI1LDAsLjgwMjUzXSw2NjpbMCwuNywuMDQwODcsMCwuOTA3NTddLDY3OlswLC43LC4xNjg5LDAsLjY2NjE5XSw2ODpbMCwuNywuMDkzNzEsMCwuNzc0NDNdLDY5OlswLC43LC4xODU4MywwLC41NjE2Ml0sNzA6WzAsLjcsLjEzNjM0LDAsLjg5NTQ0XSw3MTpbMCwuNywuMTczMjIsMCwuNjA5NjFdLDcyOlswLC43LC4yOTY5NCwwLC45NjkxOV0sNzM6WzAsLjcsLjE5MTg5LDAsLjgwOTA3XSw3NDpbLjI3Nzc4LC43LC4xOTE4OSwwLDEuMDUxNTldLDc1OlswLC43LC4zMTI1OSwwLC45MTM2NF0sNzY6WzAsLjcsLjE5MTg5LDAsLjg3MzczXSw3NzpbMCwuNywuMTU5ODEsMCwxLjA4MDMxXSw3ODpbMCwuNywuMzUyNSwwLC45MDE1XSw3OTpbMCwuNywuMDgwNzgsMCwuNzM3ODddLDgwOlswLC43LC4wODA3OCwwLDEuMDEyNjJdLDgxOlswLC43LC4wMzMwNSwwLC44ODI4Ml0sODI6WzAsLjcsLjA2MjU5LDAsLjg1XSw4MzpbMCwuNywuMTkxODksMCwuODY3NjddLDg0OlswLC43LC4yOTA4NywwLC43NDY5N10sODU6WzAsLjcsLjI1ODE1LDAsLjc5OTk2XSw4NjpbMCwuNywuMjc1MjMsMCwuNjIyMDRdLDg3OlswLC43LC4yNzUyMywwLC44MDUzMl0sODg6WzAsLjcsLjI2MDA2LDAsLjk0NDQ1XSw4OTpbMCwuNywuMjkzOSwwLC43MDk2MV0sOTA6WzAsLjcsLjI0MDM3LDAsLjgyMTJdLDE2MDpbMCwwLDAsMCwuMjVdfSwiU2l6ZTEtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNDA6Wy4zNTAwMSwuODUsMCwwLC40NTgzNF0sNDE6Wy4zNTAwMSwuODUsMCwwLC40NTgzNF0sNDc6Wy4zNTAwMSwuODUsMCwwLC41Nzc3OF0sOTE6Wy4zNTAwMSwuODUsMCwwLC40MTY2N10sOTI6Wy4zNTAwMSwuODUsMCwwLC41Nzc3OF0sOTM6Wy4zNTAwMSwuODUsMCwwLC40MTY2N10sMTIzOlsuMzUwMDEsLjg1LDAsMCwuNTgzMzRdLDEyNTpbLjM1MDAxLC44NSwwLDAsLjU4MzM0XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjcyMjIyLDAsMCwuNTU1NTZdLDczMjpbMCwuNzIyMjIsMCwwLC41NTU1Nl0sNzcwOlswLC43MjIyMiwwLDAsLjU1NTU2XSw3NzE6WzAsLjcyMjIyLDAsMCwuNTU1NTZdLDgyMTQ6Wy05OWUtNSwuNjAxLDAsMCwuNzc3NzhdLDg1OTM6WzFlLTUsLjYsMCwwLC42NjY2N10sODU5NTpbMWUtNSwuNiwwLDAsLjY2NjY3XSw4NjU3OlsxZS01LC42LDAsMCwuNzc3NzhdLDg2NTk6WzFlLTUsLjYsMCwwLC43Nzc3OF0sODcxOTpbLjI1MDAxLC43NSwwLDAsLjk0NDQ1XSw4NzIwOlsuMjUwMDEsLjc1LDAsMCwuOTQ0NDVdLDg3MjE6Wy4yNTAwMSwuNzUsMCwwLDEuMDU1NTZdLDg3MzA6Wy4zNTAwMSwuODUsMCwwLDFdLDg3Mzk6Wy0uMDA1OTksLjYwNiwwLDAsLjMzMzMzXSw4NzQxOlstLjAwNTk5LC42MDYsMCwwLC41NTU1Nl0sODc0NzpbLjMwNjEyLC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzQ4OlsuMzA2LC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzQ5OlsuMzA2LC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzUwOlsuMzA2MTIsLjgwNSwuMTk0NDUsMCwuNDcyMjJdLDg4OTY6Wy4yNTAwMSwuNzUsMCwwLC44MzMzNF0sODg5NzpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XSw4ODk4OlsuMjUwMDEsLjc1LDAsMCwuODMzMzRdLDg4OTk6Wy4yNTAwMSwuNzUsMCwwLC44MzMzNF0sODk2ODpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSw4OTY5OlsuMzUwMDEsLjg1LDAsMCwuNDcyMjJdLDg5NzA6Wy4zNTAwMSwuODUsMCwwLC40NzIyMl0sODk3MTpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSw5MTY4OlstOTllLTUsLjYwMSwwLDAsLjY2NjY3XSwxMDIxNjpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSwxMDIxNzpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSwxMDc1MjpbLjI1MDAxLC43NSwwLDAsMS4xMTExMV0sMTA3NTM6Wy4yNTAwMSwuNzUsMCwwLDEuMTExMTFdLDEwNzU0OlsuMjUwMDEsLjc1LDAsMCwxLjExMTExXSwxMDc1NjpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XSwxMDc1ODpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XX0sIlNpemUyLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDQwOlsuNjUwMDIsMS4xNSwwLDAsLjU5NzIyXSw0MTpbLjY1MDAyLDEuMTUsMCwwLC41OTcyMl0sNDc6Wy42NTAwMiwxLjE1LDAsMCwuODExMTFdLDkxOlsuNjUwMDIsMS4xNSwwLDAsLjQ3MjIyXSw5MjpbLjY1MDAyLDEuMTUsMCwwLC44MTExMV0sOTM6Wy42NTAwMiwxLjE1LDAsMCwuNDcyMjJdLDEyMzpbLjY1MDAyLDEuMTUsMCwwLC42NjY2N10sMTI1OlsuNjUwMDIsMS4xNSwwLDAsLjY2NjY3XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjc1LDAsMCwxXSw3MzI6WzAsLjc1LDAsMCwxXSw3NzA6WzAsLjc1LDAsMCwxXSw3NzE6WzAsLjc1LDAsMCwxXSw4NzE5OlsuNTUwMDEsMS4wNSwwLDAsMS4yNzc3OF0sODcyMDpbLjU1MDAxLDEuMDUsMCwwLDEuMjc3NzhdLDg3MjE6Wy41NTAwMSwxLjA1LDAsMCwxLjQ0NDQ1XSw4NzMwOlsuNjUwMDIsMS4xNSwwLDAsMV0sODc0NzpbLjg2MjI1LDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzQ4OlsuODYyLDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzQ5OlsuODYyLDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzUwOlsuODYyMjUsMS4zNiwuNDQ0NDUsMCwuNTU1NTZdLDg4OTY6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXSw4ODk3OlsuNTUwMDEsMS4wNSwwLDAsMS4xMTExMV0sODg5ODpbLjU1MDAxLDEuMDUsMCwwLDEuMTExMTFdLDg4OTk6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXSw4OTY4OlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTY5OlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTcwOlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTcxOlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSwxMDIxNjpbLjY1MDAyLDEuMTUsMCwwLC42MTExMV0sMTAyMTc6Wy42NTAwMiwxLjE1LDAsMCwuNjExMTFdLDEwNzUyOlsuNTUwMDEsMS4wNSwwLDAsMS41MTExMl0sMTA3NTM6Wy41NTAwMSwxLjA1LDAsMCwxLjUxMTEyXSwxMDc1NDpbLjU1MDAxLDEuMDUsMCwwLDEuNTExMTJdLDEwNzU2OlsuNTUwMDEsMS4wNSwwLDAsMS4xMTExMV0sMTA3NTg6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXX0sIlNpemUzLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDQwOlsuOTUwMDMsMS40NSwwLDAsLjczNjExXSw0MTpbLjk1MDAzLDEuNDUsMCwwLC43MzYxMV0sNDc6Wy45NTAwMywxLjQ1LDAsMCwxLjA0NDQ1XSw5MTpbLjk1MDAzLDEuNDUsMCwwLC41Mjc3OF0sOTI6Wy45NTAwMywxLjQ1LDAsMCwxLjA0NDQ1XSw5MzpbLjk1MDAzLDEuNDUsMCwwLC41Mjc3OF0sMTIzOlsuOTUwMDMsMS40NSwwLDAsLjc1XSwxMjU6Wy45NTAwMywxLjQ1LDAsMCwuNzVdLDE2MDpbMCwwLDAsMCwuMjVdLDcxMDpbMCwuNzUsMCwwLDEuNDQ0NDVdLDczMjpbMCwuNzUsMCwwLDEuNDQ0NDVdLDc3MDpbMCwuNzUsMCwwLDEuNDQ0NDVdLDc3MTpbMCwuNzUsMCwwLDEuNDQ0NDVdLDg3MzA6Wy45NTAwMywxLjQ1LDAsMCwxXSw4OTY4OlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTY5OlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTcwOlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTcxOlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSwxMDIxNjpbLjk1MDAzLDEuNDUsMCwwLC43NV0sMTAyMTc6Wy45NTAwMywxLjQ1LDAsMCwuNzVdfSwiU2l6ZTQtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNDA6WzEuMjUwMDMsMS43NSwwLDAsLjc5MTY3XSw0MTpbMS4yNTAwMywxLjc1LDAsMCwuNzkxNjddLDQ3OlsxLjI1MDAzLDEuNzUsMCwwLDEuMjc3NzhdLDkxOlsxLjI1MDAzLDEuNzUsMCwwLC41ODMzNF0sOTI6WzEuMjUwMDMsMS43NSwwLDAsMS4yNzc3OF0sOTM6WzEuMjUwMDMsMS43NSwwLDAsLjU4MzM0XSwxMjM6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxMjU6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjgyNSwwLDAsMS44ODg5XSw3MzI6WzAsLjgyNSwwLDAsMS44ODg5XSw3NzA6WzAsLjgyNSwwLDAsMS44ODg5XSw3NzE6WzAsLjgyNSwwLDAsMS44ODg5XSw4NzMwOlsxLjI1MDAzLDEuNzUsMCwwLDFdLDg5Njg6WzEuMjUwMDMsMS43NSwwLDAsLjYzODg5XSw4OTY5OlsxLjI1MDAzLDEuNzUsMCwwLC42Mzg4OV0sODk3MDpbMS4yNTAwMywxLjc1LDAsMCwuNjM4ODldLDg5NzE6WzEuMjUwMDMsMS43NSwwLDAsLjYzODg5XSw5MTE1OlsuNjQ1MDIsMS4xNTUsMCwwLC44NzVdLDkxMTY6WzFlLTUsLjYsMCwwLC44NzVdLDkxMTc6Wy42NDUwMiwxLjE1NSwwLDAsLjg3NV0sOTExODpbLjY0NTAyLDEuMTU1LDAsMCwuODc1XSw5MTE5OlsxZS01LC42LDAsMCwuODc1XSw5MTIwOlsuNjQ1MDIsMS4xNTUsMCwwLC44NzVdLDkxMjE6Wy42NDUwMiwxLjE1NSwwLDAsLjY2NjY3XSw5MTIyOlstOTllLTUsLjYwMSwwLDAsLjY2NjY3XSw5MTIzOlsuNjQ1MDIsMS4xNTUsMCwwLC42NjY2N10sOTEyNDpbLjY0NTAyLDEuMTU1LDAsMCwuNjY2NjddLDkxMjU6Wy05OWUtNSwuNjAxLDAsMCwuNjY2NjddLDkxMjY6Wy42NDUwMiwxLjE1NSwwLDAsLjY2NjY3XSw5MTI3OlsxZS01LC45LDAsMCwuODg4ODldLDkxMjg6Wy42NTAwMiwxLjE1LDAsMCwuODg4ODldLDkxMjk6Wy45MDAwMSwwLDAsMCwuODg4ODldLDkxMzA6WzAsLjMsMCwwLC44ODg4OV0sOTEzMTpbMWUtNSwuOSwwLDAsLjg4ODg5XSw5MTMyOlsuNjUwMDIsMS4xNSwwLDAsLjg4ODg5XSw5MTMzOlsuOTAwMDEsMCwwLDAsLjg4ODg5XSw5MTQzOlsuODg1MDIsLjkxNSwwLDAsMS4wNTU1Nl0sMTAyMTY6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxMDIxNzpbMS4yNTAwMywxLjc1LDAsMCwuODA1NTZdLDU3MzQ0OlstLjAwNDk5LC42MDUsMCwwLDEuMDU1NTZdLDU3MzQ1OlstLjAwNDk5LC42MDUsMCwwLDEuMDU1NTZdLDU3NjgwOlswLC4xMiwwLDAsLjQ1XSw1NzY4MTpbMCwuMTIsMCwwLC40NV0sNTc2ODI6WzAsLjEyLDAsMCwuNDVdLDU3NjgzOlswLC4xMiwwLDAsLjQ1XX0sIlR5cGV3cml0ZXItUmVndWxhciI6ezMyOlswLDAsMCwwLC41MjVdLDMzOlswLC42MTExMSwwLDAsLjUyNV0sMzQ6WzAsLjYxMTExLDAsMCwuNTI1XSwzNTpbMCwuNjExMTEsMCwwLC41MjVdLDM2OlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSwzNzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sMzg6WzAsLjYxMTExLDAsMCwuNTI1XSwzOTpbMCwuNjExMTEsMCwwLC41MjVdLDQwOlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSw0MTpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sNDI6WzAsLjUyMDgzLDAsMCwuNTI1XSw0MzpbLS4wODA1NiwuNTMwNTUsMCwwLC41MjVdLDQ0OlsuMTM4ODksLjEyNSwwLDAsLjUyNV0sNDU6Wy0uMDgwNTYsLjUzMDU1LDAsMCwuNTI1XSw0NjpbMCwuMTI1LDAsMCwuNTI1XSw0NzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sNDg6WzAsLjYxMTExLDAsMCwuNTI1XSw0OTpbMCwuNjExMTEsMCwwLC41MjVdLDUwOlswLC42MTExMSwwLDAsLjUyNV0sNTE6WzAsLjYxMTExLDAsMCwuNTI1XSw1MjpbMCwuNjExMTEsMCwwLC41MjVdLDUzOlswLC42MTExMSwwLDAsLjUyNV0sNTQ6WzAsLjYxMTExLDAsMCwuNTI1XSw1NTpbMCwuNjExMTEsMCwwLC41MjVdLDU2OlswLC42MTExMSwwLDAsLjUyNV0sNTc6WzAsLjYxMTExLDAsMCwuNTI1XSw1ODpbMCwuNDMwNTYsMCwwLC41MjVdLDU5OlsuMTM4ODksLjQzMDU2LDAsMCwuNTI1XSw2MDpbLS4wNTU1NiwuNTU1NTYsMCwwLC41MjVdLDYxOlstLjE5NTQ5LC40MTU2MiwwLDAsLjUyNV0sNjI6Wy0uMDU1NTYsLjU1NTU2LDAsMCwuNTI1XSw2MzpbMCwuNjExMTEsMCwwLC41MjVdLDY0OlswLC42MTExMSwwLDAsLjUyNV0sNjU6WzAsLjYxMTExLDAsMCwuNTI1XSw2NjpbMCwuNjExMTEsMCwwLC41MjVdLDY3OlswLC42MTExMSwwLDAsLjUyNV0sNjg6WzAsLjYxMTExLDAsMCwuNTI1XSw2OTpbMCwuNjExMTEsMCwwLC41MjVdLDcwOlswLC42MTExMSwwLDAsLjUyNV0sNzE6WzAsLjYxMTExLDAsMCwuNTI1XSw3MjpbMCwuNjExMTEsMCwwLC41MjVdLDczOlswLC42MTExMSwwLDAsLjUyNV0sNzQ6WzAsLjYxMTExLDAsMCwuNTI1XSw3NTpbMCwuNjExMTEsMCwwLC41MjVdLDc2OlswLC42MTExMSwwLDAsLjUyNV0sNzc6WzAsLjYxMTExLDAsMCwuNTI1XSw3ODpbMCwuNjExMTEsMCwwLC41MjVdLDc5OlswLC42MTExMSwwLDAsLjUyNV0sODA6WzAsLjYxMTExLDAsMCwuNTI1XSw4MTpbLjEzODg5LC42MTExMSwwLDAsLjUyNV0sODI6WzAsLjYxMTExLDAsMCwuNTI1XSw4MzpbMCwuNjExMTEsMCwwLC41MjVdLDg0OlswLC42MTExMSwwLDAsLjUyNV0sODU6WzAsLjYxMTExLDAsMCwuNTI1XSw4NjpbMCwuNjExMTEsMCwwLC41MjVdLDg3OlswLC42MTExMSwwLDAsLjUyNV0sODg6WzAsLjYxMTExLDAsMCwuNTI1XSw4OTpbMCwuNjExMTEsMCwwLC41MjVdLDkwOlswLC42MTExMSwwLDAsLjUyNV0sOTE6Wy4wODMzMywuNjk0NDQsMCwwLC41MjVdLDkyOlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSw5MzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sOTQ6WzAsLjYxMTExLDAsMCwuNTI1XSw5NTpbLjA5NTE0LDAsMCwwLC41MjVdLDk2OlswLC42MTExMSwwLDAsLjUyNV0sOTc6WzAsLjQzMDU2LDAsMCwuNTI1XSw5ODpbMCwuNjExMTEsMCwwLC41MjVdLDk5OlswLC40MzA1NiwwLDAsLjUyNV0sMTAwOlswLC42MTExMSwwLDAsLjUyNV0sMTAxOlswLC40MzA1NiwwLDAsLjUyNV0sMTAyOlswLC42MTExMSwwLDAsLjUyNV0sMTAzOlsuMjIyMjIsLjQzMDU2LDAsMCwuNTI1XSwxMDQ6WzAsLjYxMTExLDAsMCwuNTI1XSwxMDU6WzAsLjYxMTExLDAsMCwuNTI1XSwxMDY6Wy4yMjIyMiwuNjExMTEsMCwwLC41MjVdLDEwNzpbMCwuNjExMTEsMCwwLC41MjVdLDEwODpbMCwuNjExMTEsMCwwLC41MjVdLDEwOTpbMCwuNDMwNTYsMCwwLC41MjVdLDExMDpbMCwuNDMwNTYsMCwwLC41MjVdLDExMTpbMCwuNDMwNTYsMCwwLC41MjVdLDExMjpbLjIyMjIyLC40MzA1NiwwLDAsLjUyNV0sMTEzOlsuMjIyMjIsLjQzMDU2LDAsMCwuNTI1XSwxMTQ6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTU6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTY6WzAsLjU1MzU4LDAsMCwuNTI1XSwxMTc6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTg6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTk6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMjA6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMjE6Wy4yMjIyMiwuNDMwNTYsMCwwLC41MjVdLDEyMjpbMCwuNDMwNTYsMCwwLC41MjVdLDEyMzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sMTI0OlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSwxMjU6Wy4wODMzMywuNjk0NDQsMCwwLC41MjVdLDEyNjpbMCwuNjExMTEsMCwwLC41MjVdLDEyNzpbMCwuNjExMTEsMCwwLC41MjVdLDE2MDpbMCwwLDAsMCwuNTI1XSwxNzY6WzAsLjYxMTExLDAsMCwuNTI1XSwxODQ6Wy4xOTQ0NSwwLDAsMCwuNTI1XSwzMDU6WzAsLjQzMDU2LDAsMCwuNTI1XSw1Njc6Wy4yMjIyMiwuNDMwNTYsMCwwLC41MjVdLDcxMTpbMCwuNTY1OTcsMCwwLC41MjVdLDcxMzpbMCwuNTY1NTUsMCwwLC41MjVdLDcxNDpbMCwuNjExMTEsMCwwLC41MjVdLDcxNTpbMCwuNjExMTEsMCwwLC41MjVdLDcyODpbMCwuNjExMTEsMCwwLC41MjVdLDczMDpbMCwuNjExMTEsMCwwLC41MjVdLDc3MDpbMCwuNjExMTEsMCwwLC41MjVdLDc3MTpbMCwuNjExMTEsMCwwLC41MjVdLDc3NjpbMCwuNjExMTEsMCwwLC41MjVdLDkxNTpbMCwuNjExMTEsMCwwLC41MjVdLDkxNjpbMCwuNjExMTEsMCwwLC41MjVdLDkyMDpbMCwuNjExMTEsMCwwLC41MjVdLDkyMzpbMCwuNjExMTEsMCwwLC41MjVdLDkyNjpbMCwuNjExMTEsMCwwLC41MjVdLDkyODpbMCwuNjExMTEsMCwwLC41MjVdLDkzMTpbMCwuNjExMTEsMCwwLC41MjVdLDkzMzpbMCwuNjExMTEsMCwwLC41MjVdLDkzNDpbMCwuNjExMTEsMCwwLC41MjVdLDkzNjpbMCwuNjExMTEsMCwwLC41MjVdLDkzNzpbMCwuNjExMTEsMCwwLC41MjVdLDgyMTY6WzAsLjYxMTExLDAsMCwuNTI1XSw4MjE3OlswLC42MTExMSwwLDAsLjUyNV0sODI0MjpbMCwuNjExMTEsMCwwLC41MjVdLDkyNTE6Wy4xMTExMSwuMjE5NDQsMCwwLC41MjVdfX0sYVE9e3NsYW50OlsuMjUsLjI1LC4yNV0sc3BhY2U6WzAsMCwwXSxzdHJldGNoOlswLDAsMF0sc2hyaW5rOlswLDAsMF0seEhlaWdodDpbLjQzMSwuNDMxLC40MzFdLHF1YWQ6WzEsMS4xNzEsMS40NzJdLGV4dHJhU3BhY2U6WzAsMCwwXSxudW0xOlsuNjc3LC43MzIsLjkyNV0sbnVtMjpbLjM5NCwuMzg0LC4zODddLG51bTM6Wy40NDQsLjQ3MSwuNTA0XSxkZW5vbTE6Wy42ODYsLjc1MiwxLjAyNV0sZGVub20yOlsuMzQ1LC4zNDQsLjUzMl0sc3VwMTpbLjQxMywuNTAzLC41MDRdLHN1cDI6Wy4zNjMsLjQzMSwuNDA0XSxzdXAzOlsuMjg5LC4yODYsLjI5NF0sc3ViMTpbLjE1LC4xNDMsLjJdLHN1YjI6Wy4yNDcsLjI4NiwuNF0sc3VwRHJvcDpbLjM4NiwuMzUzLC40OTRdLHN1YkRyb3A6Wy4wNSwuMDcxLC4xXSxkZWxpbTE6WzIuMzksMS43LDEuOThdLGRlbGltMjpbMS4wMSwxLjE1NywxLjQyXSxheGlzSGVpZ2h0OlsuMjUsLjI1LC4yNV0sZGVmYXVsdFJ1bGVUaGlja25lc3M6Wy4wNCwuMDQ5LC4wNDldLGJpZ09wU3BhY2luZzE6Wy4xMTEsLjExMSwuMTExXSxiaWdPcFNwYWNpbmcyOlsuMTY2LC4xNjYsLjE2Nl0sYmlnT3BTcGFjaW5nMzpbLjIsLjIsLjJdLGJpZ09wU3BhY2luZzQ6Wy42LC42MTEsLjYxMV0sYmlnT3BTcGFjaW5nNTpbLjEsLjE0MywuMTQzXSxzcXJ0UnVsZVRoaWNrbmVzczpbLjA0LC4wNCwuMDRdLHB0UGVyRW06WzEwLDEwLDEwXSxkb3VibGVSdWxlU2VwOlsuMiwuMiwuMl0sYXJyYXlSdWxlV2lkdGg6Wy4wNCwuMDQsLjA0XSxmYm94c2VwOlsuMywuMywuM10sZmJveHJ1bGU6Wy4wNCwuMDQsLjA0XX0sWSRlPXvDhToiQSIsw5A6IkQiLMOeOiJvIizDpToiYSIsw7A6ImQiLMO+OiJvIizQkDoiQSIs0JE6IkIiLNCSOiJCIizQkzoiRiIs0JQ6IkEiLNCVOiJFIizQljoiSyIs0Jc6IjMiLNCYOiJOIizQmToiTiIs0Jo6IksiLNCbOiJOIizQnDoiTSIs0J06IkgiLNCeOiJPIizQnzoiTiIs0KA6IlAiLNChOiJDIizQojoiVCIs0KM6InkiLNCkOiJPIizQpToiWCIs0KY6IlUiLNCnOiJoIizQqDoiVyIs0Kk6IlciLNCqOiJCIizQqzoiWCIs0Kw6IkIiLNCtOiIzIizQrjoiWCIs0K86IlIiLNCwOiJhIizQsToiYiIs0LI6ImEiLNCzOiJyIizQtDoieSIs0LU6ImUiLNC2OiJtIizQtzoiZSIs0Lg6Im4iLNC5OiJuIizQujoibiIs0Ls6Im4iLNC8OiJtIizQvToibiIs0L46Im8iLNC/OiJuIizRgDoicCIs0YE6ImMiLNGCOiJvIizRgzoieSIs0YQ6ImIiLNGFOiJ4IizRhjoibiIs0Yc6Im4iLNGIOiJ3IizRiToidyIs0Yo6ImEiLNGLOiJtIizRjDoiYSIs0Y06ImUiLNGOOiJtIizRjzoiciJ9O2Z1bmN0aW9uIGFIdChpLHMpe0s0W2ldPXN9ZnVuY3Rpb24gSjJlKGkscyx1KXtpZighSzRbc10pdGhyb3cgbmV3IEVycm9yKCJGb250IG1ldHJpY3Mgbm90IGZvdW5kIGZvciBmb250OiAiK3MrIi4iKTt2YXIgZD1pLmNoYXJDb2RlQXQoMCkscD1LNFtzXVtkXTtpZighcCYmaVswXWluIFkkZSYmKGQ9WSRlW2lbMF1dLmNoYXJDb2RlQXQoMCkscD1LNFtzXVtkXSksIXAmJnU9PT0idGV4dCImJkskZShkKSYmKHA9SzRbc11bNzddKSxwKXJldHVybntkZXB0aDpwWzBdLGhlaWdodDpwWzFdLGl0YWxpYzpwWzJdLHNrZXc6cFszXSx3aWR0aDpwWzRdfX12YXIgWjJlPXt9O2Z1bmN0aW9uIG9IdChpKXt2YXIgcztpZihpPj01P3M9MDppPj0zP3M9MTpzPTIsIVoyZVtzXSl7dmFyIHU9WjJlW3NdPXtjc3NFbVBlck11OmFRLnF1YWRbc10vMTh9O2Zvcih2YXIgZCBpbiBhUSlhUS5oYXNPd25Qcm9wZXJ0eShkKSYmKHVbZF09YVFbZF1bc10pfXJldHVybiBaMmVbc119dmFyIGNIdD1bWzEsMSwxXSxbMiwxLDFdLFszLDEsMV0sWzQsMiwxXSxbNSwyLDFdLFs2LDMsMV0sWzcsNCwyXSxbOCw2LDNdLFs5LDcsNl0sWzEwLDgsN10sWzExLDEwLDldXSxYJGU9Wy41LC42LC43LC44LC45LDEsMS4yLDEuNDQsMS43MjgsMi4wNzQsMi40ODhdLFEkZT1mdW5jdGlvbihzLHUpe3JldHVybiB1LnNpemU8Mj9zOmNIdFtzLTFdW3Uuc2l6ZS0xXX07Y2xhc3MgTTd7Y29uc3RydWN0b3Iocyl7dGhpcy5zdHlsZT12b2lkIDAsdGhpcy5jb2xvcj12b2lkIDAsdGhpcy5zaXplPXZvaWQgMCx0aGlzLnRleHRTaXplPXZvaWQgMCx0aGlzLnBoYW50b209dm9pZCAwLHRoaXMuZm9udD12b2lkIDAsdGhpcy5mb250RmFtaWx5PXZvaWQgMCx0aGlzLmZvbnRXZWlnaHQ9dm9pZCAwLHRoaXMuZm9udFNoYXBlPXZvaWQgMCx0aGlzLnNpemVNdWx0aXBsaWVyPXZvaWQgMCx0aGlzLm1heFNpemU9dm9pZCAwLHRoaXMubWluUnVsZVRoaWNrbmVzcz12b2lkIDAsdGhpcy5fZm9udE1ldHJpY3M9dm9pZCAwLHRoaXMuc3R5bGU9cy5zdHlsZSx0aGlzLmNvbG9yPXMuY29sb3IsdGhpcy5zaXplPXMuc2l6ZXx8TTcuQkFTRVNJWkUsdGhpcy50ZXh0U2l6ZT1zLnRleHRTaXplfHx0aGlzLnNpemUsdGhpcy5waGFudG9tPSEhcy5waGFudG9tLHRoaXMuZm9udD1zLmZvbnR8fCIiLHRoaXMuZm9udEZhbWlseT1zLmZvbnRGYW1pbHl8fCIiLHRoaXMuZm9udFdlaWdodD1zLmZvbnRXZWlnaHR8fCIiLHRoaXMuZm9udFNoYXBlPXMuZm9udFNoYXBlfHwiIix0aGlzLnNpemVNdWx0aXBsaWVyPVgkZVt0aGlzLnNpemUtMV0sdGhpcy5tYXhTaXplPXMubWF4U2l6ZSx0aGlzLm1pblJ1bGVUaGlja25lc3M9cy5taW5SdWxlVGhpY2tuZXNzLHRoaXMuX2ZvbnRNZXRyaWNzPXZvaWQgMH1leHRlbmQocyl7dmFyIHU9e3N0eWxlOnRoaXMuc3R5bGUsc2l6ZTp0aGlzLnNpemUsdGV4dFNpemU6dGhpcy50ZXh0U2l6ZSxjb2xvcjp0aGlzLmNvbG9yLHBoYW50b206dGhpcy5waGFudG9tLGZvbnQ6dGhpcy5mb250LGZvbnRGYW1pbHk6dGhpcy5mb250RmFtaWx5LGZvbnRXZWlnaHQ6dGhpcy5mb250V2VpZ2h0LGZvbnRTaGFwZTp0aGlzLmZvbnRTaGFwZSxtYXhTaXplOnRoaXMubWF4U2l6ZSxtaW5SdWxlVGhpY2tuZXNzOnRoaXMubWluUnVsZVRoaWNrbmVzc307Zm9yKHZhciBkIGluIHMpcy5oYXNPd25Qcm9wZXJ0eShkKSYmKHVbZF09c1tkXSk7cmV0dXJuIG5ldyBNNyh1KX1oYXZpbmdTdHlsZShzKXtyZXR1cm4gdGhpcy5zdHlsZT09PXM/dGhpczp0aGlzLmV4dGVuZCh7c3R5bGU6cyxzaXplOlEkZSh0aGlzLnRleHRTaXplLHMpfSl9aGF2aW5nQ3JhbXBlZFN0eWxlKCl7cmV0dXJuIHRoaXMuaGF2aW5nU3R5bGUodGhpcy5zdHlsZS5jcmFtcCgpKX1oYXZpbmdTaXplKHMpe3JldHVybiB0aGlzLnNpemU9PT1zJiZ0aGlzLnRleHRTaXplPT09cz90aGlzOnRoaXMuZXh0ZW5kKHtzdHlsZTp0aGlzLnN0eWxlLnRleHQoKSxzaXplOnMsdGV4dFNpemU6cyxzaXplTXVsdGlwbGllcjpYJGVbcy0xXX0pfWhhdmluZ0Jhc2VTdHlsZShzKXtzPXN8fHRoaXMuc3R5bGUudGV4dCgpO3ZhciB1PVEkZShNNy5CQVNFU0laRSxzKTtyZXR1cm4gdGhpcy5zaXplPT09dSYmdGhpcy50ZXh0U2l6ZT09PU03LkJBU0VTSVpFJiZ0aGlzLnN0eWxlPT09cz90aGlzOnRoaXMuZXh0ZW5kKHtzdHlsZTpzLHNpemU6dX0pfWhhdmluZ0Jhc2VTaXppbmcoKXt2YXIgcztzd2l0Y2godGhpcy5zdHlsZS5pZCl7Y2FzZSA0OmNhc2UgNTpzPTM7YnJlYWs7Y2FzZSA2OmNhc2UgNzpzPTE7YnJlYWs7ZGVmYXVsdDpzPTZ9cmV0dXJuIHRoaXMuZXh0ZW5kKHtzdHlsZTp0aGlzLnN0eWxlLnRleHQoKSxzaXplOnN9KX13aXRoQ29sb3Iocyl7cmV0dXJuIHRoaXMuZXh0ZW5kKHtjb2xvcjpzfSl9d2l0aFBoYW50b20oKXtyZXR1cm4gdGhpcy5leHRlbmQoe3BoYW50b206ITB9KX13aXRoRm9udChzKXtyZXR1cm4gdGhpcy5leHRlbmQoe2ZvbnQ6c30pfXdpdGhUZXh0Rm9udEZhbWlseShzKXtyZXR1cm4gdGhpcy5leHRlbmQoe2ZvbnRGYW1pbHk6cyxmb250OiIifSl9d2l0aFRleHRGb250V2VpZ2h0KHMpe3JldHVybiB0aGlzLmV4dGVuZCh7Zm9udFdlaWdodDpzLGZvbnQ6IiJ9KX13aXRoVGV4dEZvbnRTaGFwZShzKXtyZXR1cm4gdGhpcy5leHRlbmQoe2ZvbnRTaGFwZTpzLGZvbnQ6IiJ9KX1zaXppbmdDbGFzc2VzKHMpe3JldHVybiBzLnNpemUhPT10aGlzLnNpemU/WyJzaXppbmciLCJyZXNldC1zaXplIitzLnNpemUsInNpemUiK3RoaXMuc2l6ZV06W119YmFzZVNpemluZ0NsYXNzZXMoKXtyZXR1cm4gdGhpcy5zaXplIT09TTcuQkFTRVNJWkU/WyJzaXppbmciLCJyZXNldC1zaXplIit0aGlzLnNpemUsInNpemUiK003LkJBU0VTSVpFXTpbXX1mb250TWV0cmljcygpe3JldHVybiB0aGlzLl9mb250TWV0cmljc3x8KHRoaXMuX2ZvbnRNZXRyaWNzPW9IdCh0aGlzLnNpemUpKSx0aGlzLl9mb250TWV0cmljc31nZXRDb2xvcigpe3JldHVybiB0aGlzLnBoYW50b20/InRyYW5zcGFyZW50Ijp0aGlzLmNvbG9yfX1NNy5CQVNFU0laRT02O3ZhciBlYmU9e3B0OjEsbW06NzIyNy8yNTQwLGNtOjcyMjcvMjU0LGluOjcyLjI3LGJwOjgwMy84MDAscGM6MTIsZGQ6MTIzOC8xMTU3LGNjOjE0ODU2LzExNTcsbmQ6Njg1LzY0MixuYzoxMzcwLzEwNyxzcDoxLzY1NTM2LHB4OjgwMy84MDB9LHVIdD17ZXg6ITAsZW06ITAsbXU6ITB9LEokZT1mdW5jdGlvbihzKXtyZXR1cm4gdHlwZW9mIHMhPSJzdHJpbmciJiYocz1zLnVuaXQpLHMgaW4gZWJlfHxzIGluIHVIdHx8cz09PSJleCJ9LFVoPWZ1bmN0aW9uKHMsdSl7dmFyIGQ7aWYocy51bml0IGluIGViZSlkPWViZVtzLnVuaXRdL3UuZm9udE1ldHJpY3MoKS5wdFBlckVtL3Uuc2l6ZU11bHRpcGxpZXI7ZWxzZSBpZihzLnVuaXQ9PT0ibXUiKWQ9dS5mb250TWV0cmljcygpLmNzc0VtUGVyTXU7ZWxzZXt2YXIgcDtpZih1LnN0eWxlLmlzVGlnaHQoKT9wPXUuaGF2aW5nU3R5bGUodS5zdHlsZS50ZXh0KCkpOnA9dSxzLnVuaXQ9PT0iZXgiKWQ9cC5mb250TWV0cmljcygpLnhIZWlnaHQ7ZWxzZSBpZihzLnVuaXQ9PT0iZW0iKWQ9cC5mb250TWV0cmljcygpLnF1YWQ7ZWxzZSB0aHJvdyBuZXcgQ2koIkludmFsaWQgdW5pdDogJyIrcy51bml0KyInIik7cCE9PXUmJihkKj1wLnNpemVNdWx0aXBsaWVyL3Uuc2l6ZU11bHRpcGxpZXIpfXJldHVybiBNYXRoLm1pbihzLm51bWJlcipkLHUubWF4U2l6ZSl9LFJpPWZ1bmN0aW9uKHMpe3JldHVybitzLnRvRml4ZWQoNCkrImVtIn0sVDk9ZnVuY3Rpb24ocyl7cmV0dXJuIHMuZmlsdGVyKHU9PnUpLmpvaW4oIiAiKX0sWiRlPWZ1bmN0aW9uKHMsdSxkKXtpZih0aGlzLmNsYXNzZXM9c3x8W10sdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMuaGVpZ2h0PTAsdGhpcy5kZXB0aD0wLHRoaXMubWF4Rm9udFNpemU9MCx0aGlzLnN0eWxlPWR8fHt9LHUpe3Uuc3R5bGUuaXNUaWdodCgpJiZ0aGlzLmNsYXNzZXMucHVzaCgibXRpZ2h0Iik7dmFyIHA9dS5nZXRDb2xvcigpO3AmJih0aGlzLnN0eWxlLmNvbG9yPXApfX0sZXplPWZ1bmN0aW9uKHMpe3ZhciB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocyk7dS5jbGFzc05hbWU9VDkodGhpcy5jbGFzc2VzKTtmb3IodmFyIGQgaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KGQpJiYodS5zdHlsZVtkXT10aGlzLnN0eWxlW2RdKTtmb3IodmFyIHAgaW4gdGhpcy5hdHRyaWJ1dGVzKXRoaXMuYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShwKSYmdS5zZXRBdHRyaWJ1dGUocCx0aGlzLmF0dHJpYnV0ZXNbcF0pO2Zvcih2YXIgdj0wO3Y8dGhpcy5jaGlsZHJlbi5sZW5ndGg7disrKXUuYXBwZW5kQ2hpbGQodGhpcy5jaGlsZHJlblt2XS50b05vZGUoKSk7cmV0dXJuIHV9LHR6ZT1mdW5jdGlvbihzKXt2YXIgdT0iPCIrczt0aGlzLmNsYXNzZXMubGVuZ3RoJiYodSs9JyBjbGFzcz0iJytZYS5lc2NhcGUoVDkodGhpcy5jbGFzc2VzKSkrJyInKTt2YXIgZD0iIjtmb3IodmFyIHAgaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHApJiYoZCs9WWEuaHlwaGVuYXRlKHApKyI6Iit0aGlzLnN0eWxlW3BdKyI7Iik7ZCYmKHUrPScgc3R5bGU9IicrWWEuZXNjYXBlKGQpKyciJyk7Zm9yKHZhciB2IGluIHRoaXMuYXR0cmlidXRlcyl0aGlzLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkodikmJih1Kz0iICIrdisnPSInK1lhLmVzY2FwZSh0aGlzLmF0dHJpYnV0ZXNbdl0pKyciJyk7dSs9Ij4iO2Zvcih2YXIgYj0wO2I8dGhpcy5jaGlsZHJlbi5sZW5ndGg7YisrKXUrPXRoaXMuY2hpbGRyZW5bYl0udG9NYXJrdXAoKTtyZXR1cm4gdSs9IjwvIitzKyI+Iix1fTtjbGFzcyBjUntjb25zdHJ1Y3RvcihzLHUsZCxwKXt0aGlzLmNoaWxkcmVuPXZvaWQgMCx0aGlzLmF0dHJpYnV0ZXM9dm9pZCAwLHRoaXMuY2xhc3Nlcz12b2lkIDAsdGhpcy5oZWlnaHQ9dm9pZCAwLHRoaXMuZGVwdGg9dm9pZCAwLHRoaXMud2lkdGg9dm9pZCAwLHRoaXMubWF4Rm9udFNpemU9dm9pZCAwLHRoaXMuc3R5bGU9dm9pZCAwLFokZS5jYWxsKHRoaXMscyxkLHApLHRoaXMuY2hpbGRyZW49dXx8W119c2V0QXR0cmlidXRlKHMsdSl7dGhpcy5hdHRyaWJ1dGVzW3NdPXV9aGFzQ2xhc3Mocyl7cmV0dXJuIFlhLmNvbnRhaW5zKHRoaXMuY2xhc3NlcyxzKX10b05vZGUoKXtyZXR1cm4gZXplLmNhbGwodGhpcywic3BhbiIpfXRvTWFya3VwKCl7cmV0dXJuIHR6ZS5jYWxsKHRoaXMsInNwYW4iKX19Y2xhc3MgdGJle2NvbnN0cnVjdG9yKHMsdSxkLHApe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5jbGFzc2VzPXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy5kZXB0aD12b2lkIDAsdGhpcy5tYXhGb250U2l6ZT12b2lkIDAsdGhpcy5zdHlsZT12b2lkIDAsWiRlLmNhbGwodGhpcyx1LHApLHRoaXMuY2hpbGRyZW49ZHx8W10sdGhpcy5zZXRBdHRyaWJ1dGUoImhyZWYiLHMpfXNldEF0dHJpYnV0ZShzLHUpe3RoaXMuYXR0cmlidXRlc1tzXT11fWhhc0NsYXNzKHMpe3JldHVybiBZYS5jb250YWlucyh0aGlzLmNsYXNzZXMscyl9dG9Ob2RlKCl7cmV0dXJuIGV6ZS5jYWxsKHRoaXMsImEiKX10b01hcmt1cCgpe3JldHVybiB0emUuY2FsbCh0aGlzLCJhIil9fWNsYXNzIGxIdHtjb25zdHJ1Y3RvcihzLHUsZCl7dGhpcy5zcmM9dm9pZCAwLHRoaXMuYWx0PXZvaWQgMCx0aGlzLmNsYXNzZXM9dm9pZCAwLHRoaXMuaGVpZ2h0PXZvaWQgMCx0aGlzLmRlcHRoPXZvaWQgMCx0aGlzLm1heEZvbnRTaXplPXZvaWQgMCx0aGlzLnN0eWxlPXZvaWQgMCx0aGlzLmFsdD11LHRoaXMuc3JjPXMsdGhpcy5jbGFzc2VzPVsibW9yZCJdLHRoaXMuc3R5bGU9ZH1oYXNDbGFzcyhzKXtyZXR1cm4gWWEuY29udGFpbnModGhpcy5jbGFzc2VzLHMpfXRvTm9kZSgpe3ZhciBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpO3Muc3JjPXRoaXMuc3JjLHMuYWx0PXRoaXMuYWx0LHMuY2xhc3NOYW1lPSJtb3JkIjtmb3IodmFyIHUgaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHUpJiYocy5zdHlsZVt1XT10aGlzLnN0eWxlW3VdKTtyZXR1cm4gc310b01hcmt1cCgpe3ZhciBzPSI8aW1nICBzcmM9JyIrdGhpcy5zcmMrIiAnYWx0PSciK3RoaXMuYWx0KyInICIsdT0iIjtmb3IodmFyIGQgaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KGQpJiYodSs9WWEuaHlwaGVuYXRlKGQpKyI6Iit0aGlzLnN0eWxlW2RdKyI7Iik7cmV0dXJuIHUmJihzKz0nIHN0eWxlPSInK1lhLmVzY2FwZSh1KSsnIicpLHMrPSInLz4iLHN9fXZhciBoSHQ9e8OuOiLEscyCIizDrzoixLHMiCIsw606IsSxzIEiLMOsOiLEscyAIn07Y2xhc3MgQnZ7Y29uc3RydWN0b3Iocyx1LGQscCx2LGIseSxUKXt0aGlzLnRleHQ9dm9pZCAwLHRoaXMuaGVpZ2h0PXZvaWQgMCx0aGlzLmRlcHRoPXZvaWQgMCx0aGlzLml0YWxpYz12b2lkIDAsdGhpcy5za2V3PXZvaWQgMCx0aGlzLndpZHRoPXZvaWQgMCx0aGlzLm1heEZvbnRTaXplPXZvaWQgMCx0aGlzLmNsYXNzZXM9dm9pZCAwLHRoaXMuc3R5bGU9dm9pZCAwLHRoaXMudGV4dD1zLHRoaXMuaGVpZ2h0PXV8fDAsdGhpcy5kZXB0aD1kfHwwLHRoaXMuaXRhbGljPXB8fDAsdGhpcy5za2V3PXZ8fDAsdGhpcy53aWR0aD1ifHwwLHRoaXMuY2xhc3Nlcz15fHxbXSx0aGlzLnN0eWxlPVR8fHt9LHRoaXMubWF4Rm9udFNpemU9MDt2YXIgXz1ZcXQodGhpcy50ZXh0LmNoYXJDb2RlQXQoMCkpO18mJnRoaXMuY2xhc3Nlcy5wdXNoKF8rIl9mYWxsYmFjayIpLC9bw67Dr8Otw6xdLy50ZXN0KHRoaXMudGV4dCkmJih0aGlzLnRleHQ9aEh0W3RoaXMudGV4dF0pfWhhc0NsYXNzKHMpe3JldHVybiBZYS5jb250YWlucyh0aGlzLmNsYXNzZXMscyl9dG9Ob2RlKCl7dmFyIHM9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy50ZXh0KSx1PW51bGw7dGhpcy5pdGFsaWM+MCYmKHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLHUuc3R5bGUubWFyZ2luUmlnaHQ9UmkodGhpcy5pdGFsaWMpKSx0aGlzLmNsYXNzZXMubGVuZ3RoPjAmJih1PXV8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSx1LmNsYXNzTmFtZT1UOSh0aGlzLmNsYXNzZXMpKTtmb3IodmFyIGQgaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KGQpJiYodT11fHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIiksdS5zdHlsZVtkXT10aGlzLnN0eWxlW2RdKTtyZXR1cm4gdT8odS5hcHBlbmRDaGlsZChzKSx1KTpzfXRvTWFya3VwKCl7dmFyIHM9ITEsdT0iPHNwYW4iO3RoaXMuY2xhc3Nlcy5sZW5ndGgmJihzPSEwLHUrPScgY2xhc3M9IicsdSs9WWEuZXNjYXBlKFQ5KHRoaXMuY2xhc3NlcykpLHUrPSciJyk7dmFyIGQ9IiI7dGhpcy5pdGFsaWM+MCYmKGQrPSJtYXJnaW4tcmlnaHQ6Iit0aGlzLml0YWxpYysiZW07Iik7Zm9yKHZhciBwIGluIHRoaXMuc3R5bGUpdGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShwKSYmKGQrPVlhLmh5cGhlbmF0ZShwKSsiOiIrdGhpcy5zdHlsZVtwXSsiOyIpO2QmJihzPSEwLHUrPScgc3R5bGU9IicrWWEuZXNjYXBlKGQpKyciJyk7dmFyIHY9WWEuZXNjYXBlKHRoaXMudGV4dCk7cmV0dXJuIHM/KHUrPSI+Iix1Kz12LHUrPSI8L3NwYW4+Iix1KTp2fX1jbGFzcyBEN3tjb25zdHJ1Y3RvcihzLHUpe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5jaGlsZHJlbj1zfHxbXSx0aGlzLmF0dHJpYnV0ZXM9dXx8e319dG9Ob2RlKCl7dmFyIHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzLCJzdmciKTtmb3IodmFyIGQgaW4gdGhpcy5hdHRyaWJ1dGVzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsZCkmJnUuc2V0QXR0cmlidXRlKGQsdGhpcy5hdHRyaWJ1dGVzW2RdKTtmb3IodmFyIHA9MDtwPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3ArKyl1LmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5bcF0udG9Ob2RlKCkpO3JldHVybiB1fXRvTWFya3VwKCl7dmFyIHM9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIic7Zm9yKHZhciB1IGluIHRoaXMuYXR0cmlidXRlcylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLHUpJiYocys9IiAiK3UrIj0nIit0aGlzLmF0dHJpYnV0ZXNbdV0rIiciKTtzKz0iPiI7Zm9yKHZhciBkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspcys9dGhpcy5jaGlsZHJlbltkXS50b01hcmt1cCgpO3JldHVybiBzKz0iPC9zdmc+IixzfX1jbGFzcyBDOXtjb25zdHJ1Y3RvcihzLHUpe3RoaXMucGF0aE5hbWU9dm9pZCAwLHRoaXMuYWx0ZXJuYXRlPXZvaWQgMCx0aGlzLnBhdGhOYW1lPXMsdGhpcy5hbHRlcm5hdGU9dX10b05vZGUoKXt2YXIgcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHMsInBhdGgiKTtyZXR1cm4gdGhpcy5hbHRlcm5hdGU/dS5zZXRBdHRyaWJ1dGUoImQiLHRoaXMuYWx0ZXJuYXRlKTp1LnNldEF0dHJpYnV0ZSgiZCIsVyRlW3RoaXMucGF0aE5hbWVdKSx1fXRvTWFya3VwKCl7cmV0dXJuIHRoaXMuYWx0ZXJuYXRlPyI8cGF0aCBkPSciK3RoaXMuYWx0ZXJuYXRlKyInLz4iOiI8cGF0aCBkPSciK1ckZVt0aGlzLnBhdGhOYW1lXSsiJy8+In19Y2xhc3MgbmJle2NvbnN0cnVjdG9yKHMpe3RoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5hdHRyaWJ1dGVzPXN8fHt9fXRvTm9kZSgpe3ZhciBzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMocywibGluZSIpO2Zvcih2YXIgZCBpbiB0aGlzLmF0dHJpYnV0ZXMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcyxkKSYmdS5zZXRBdHRyaWJ1dGUoZCx0aGlzLmF0dHJpYnV0ZXNbZF0pO3JldHVybiB1fXRvTWFya3VwKCl7dmFyIHM9IjxsaW5lIjtmb3IodmFyIHUgaW4gdGhpcy5hdHRyaWJ1dGVzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsdSkmJihzKz0iICIrdSsiPSciK3RoaXMuYXR0cmlidXRlc1t1XSsiJyIpO3JldHVybiBzKz0iLz4iLHN9fWZ1bmN0aW9uIG56ZShpKXtpZihpIGluc3RhbmNlb2YgQnYpcmV0dXJuIGk7dGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBzeW1ib2xOb2RlIGJ1dCBnb3QgIitTdHJpbmcoaSkrIi4iKX1mdW5jdGlvbiBmSHQoaSl7aWYoaSBpbnN0YW5jZW9mIGNSKXJldHVybiBpO3Rocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgc3BhbjxIdG1sRG9tTm9kZT4gYnV0IGdvdCAiK1N0cmluZyhpKSsiLiIpfXZhciBkSHQ9e2JpbjoxLGNsb3NlOjEsaW5uZXI6MSxvcGVuOjEscHVuY3Q6MSxyZWw6MX0sZ0h0PXsiYWNjZW50LXRva2VuIjoxLG1hdGhvcmQ6MSwib3AtdG9rZW4iOjEsc3BhY2luZzoxLHRleHRvcmQ6MX0sVWw9e21hdGg6e30sdGV4dDp7fX07ZnVuY3Rpb24gd2UoaSxzLHUsZCxwLHYpe1VsW2ldW3BdPXtmb250OnMsZ3JvdXA6dSxyZXBsYWNlOmR9LHYmJmQmJihVbFtpXVtkXT1VbFtpXVtwXSl9dmFyIEFlPSJtYXRoIixzaT0idGV4dCIsVWU9Im1haW4iLCR0PSJhbXMiLHdoPSJhY2NlbnQtdG9rZW4iLGxzPSJiaW4iLERwPSJjbG9zZSIsTkQ9ImlubmVyIixDYT0ibWF0aG9yZCIsTjA9Im9wLXRva2VuIixobT0ib3BlbiIsb1E9InB1bmN0IixIdD0icmVsIixJNz0ic3BhY2luZyIsbW49InRleHRvcmQiO3dlKEFlLFVlLEh0LCLiiaEiLCJcXGVxdWl2IiwhMCksd2UoQWUsVWUsSHQsIuKJuiIsIlxccHJlYyIsITApLHdlKEFlLFVlLEh0LCLiibsiLCJcXHN1Y2MiLCEwKSx3ZShBZSxVZSxIdCwi4oi8IiwiXFxzaW0iLCEwKSx3ZShBZSxVZSxIdCwi4oqlIiwiXFxwZXJwIiksd2UoQWUsVWUsSHQsIuKqryIsIlxccHJlY2VxIiwhMCksd2UoQWUsVWUsSHQsIuKqsCIsIlxcc3VjY2VxIiwhMCksd2UoQWUsVWUsSHQsIuKJgyIsIlxcc2ltZXEiLCEwKSx3ZShBZSxVZSxIdCwi4oijIiwiXFxtaWQiLCEwKSx3ZShBZSxVZSxIdCwi4omqIiwiXFxsbCIsITApLHdlKEFlLFVlLEh0LCLiiasiLCJcXGdnIiwhMCksd2UoQWUsVWUsSHQsIuKJjSIsIlxcYXN5bXAiLCEwKSx3ZShBZSxVZSxIdCwi4oilIiwiXFxwYXJhbGxlbCIpLHdlKEFlLFVlLEh0LCLii4giLCJcXGJvd3RpZSIsITApLHdlKEFlLFVlLEh0LCLijKMiLCJcXHNtaWxlIiwhMCksd2UoQWUsVWUsSHQsIuKKkSIsIlxcc3FzdWJzZXRlcSIsITApLHdlKEFlLFVlLEh0LCLiipIiLCJcXHNxc3Vwc2V0ZXEiLCEwKSx3ZShBZSxVZSxIdCwi4omQIiwiXFxkb3RlcSIsITApLHdlKEFlLFVlLEh0LCLijKIiLCJcXGZyb3duIiwhMCksd2UoQWUsVWUsSHQsIuKIiyIsIlxcbmkiLCEwKSx3ZShBZSxVZSxIdCwi4oidIiwiXFxwcm9wdG8iLCEwKSx3ZShBZSxVZSxIdCwi4oqiIiwiXFx2ZGFzaCIsITApLHdlKEFlLFVlLEh0LCLiiqMiLCJcXGRhc2h2IiwhMCksd2UoQWUsVWUsSHQsIuKIiyIsIlxcb3ducyIpLHdlKEFlLFVlLG9RLCIuIiwiXFxsZG90cCIpLHdlKEFlLFVlLG9RLCLii4UiLCJcXGNkb3RwIiksd2UoQWUsVWUsbW4sIiMiLCJcXCMiKSx3ZShzaSxVZSxtbiwiIyIsIlxcIyIpLHdlKEFlLFVlLG1uLCImIiwiXFwmIiksd2Uoc2ksVWUsbW4sIiYiLCJcXCYiKSx3ZShBZSxVZSxtbiwi4oS1IiwiXFxhbGVwaCIsITApLHdlKEFlLFVlLG1uLCLiiIAiLCJcXGZvcmFsbCIsITApLHdlKEFlLFVlLG1uLCLihI8iLCJcXGhiYXIiLCEwKSx3ZShBZSxVZSxtbiwi4oiDIiwiXFxleGlzdHMiLCEwKSx3ZShBZSxVZSxtbiwi4oiHIiwiXFxuYWJsYSIsITApLHdlKEFlLFVlLG1uLCLima0iLCJcXGZsYXQiLCEwKSx3ZShBZSxVZSxtbiwi4oSTIiwiXFxlbGwiLCEwKSx3ZShBZSxVZSxtbiwi4pmuIiwiXFxuYXR1cmFsIiwhMCksd2UoQWUsVWUsbW4sIuKZoyIsIlxcY2x1YnN1aXQiLCEwKSx3ZShBZSxVZSxtbiwi4oSYIiwiXFx3cCIsITApLHdlKEFlLFVlLG1uLCLima8iLCJcXHNoYXJwIiwhMCksd2UoQWUsVWUsbW4sIuKZoiIsIlxcZGlhbW9uZHN1aXQiLCEwKSx3ZShBZSxVZSxtbiwi4oScIiwiXFxSZSIsITApLHdlKEFlLFVlLG1uLCLimaEiLCJcXGhlYXJ0c3VpdCIsITApLHdlKEFlLFVlLG1uLCLihJEiLCJcXEltIiwhMCksd2UoQWUsVWUsbW4sIuKZoCIsIlxcc3BhZGVzdWl0IiwhMCksd2UoQWUsVWUsbW4sIsKnIiwiXFxTIiwhMCksd2Uoc2ksVWUsbW4sIsKnIiwiXFxTIiksd2UoQWUsVWUsbW4sIsK2IiwiXFxQIiwhMCksd2Uoc2ksVWUsbW4sIsK2IiwiXFxQIiksd2UoQWUsVWUsbW4sIuKAoCIsIlxcZGFnIiksd2Uoc2ksVWUsbW4sIuKAoCIsIlxcZGFnIiksd2Uoc2ksVWUsbW4sIuKAoCIsIlxcdGV4dGRhZ2dlciIpLHdlKEFlLFVlLG1uLCLigKEiLCJcXGRkYWciKSx3ZShzaSxVZSxtbiwi4oChIiwiXFxkZGFnIiksd2Uoc2ksVWUsbW4sIuKAoSIsIlxcdGV4dGRhZ2dlcmRibCIpLHdlKEFlLFVlLERwLCLijrEiLCJcXHJtb3VzdGFjaGUiLCEwKSx3ZShBZSxVZSxobSwi4o6wIiwiXFxsbW91c3RhY2hlIiwhMCksd2UoQWUsVWUsRHAsIuKfryIsIlxccmdyb3VwIiwhMCksd2UoQWUsVWUsaG0sIuKfriIsIlxcbGdyb3VwIiwhMCksd2UoQWUsVWUsbHMsIuKIkyIsIlxcbXAiLCEwKSx3ZShBZSxVZSxscywi4oqWIiwiXFxvbWludXMiLCEwKSx3ZShBZSxVZSxscywi4oqOIiwiXFx1cGx1cyIsITApLHdlKEFlLFVlLGxzLCLiipMiLCJcXHNxY2FwIiwhMCksd2UoQWUsVWUsbHMsIuKIlyIsIlxcYXN0Iiksd2UoQWUsVWUsbHMsIuKKlCIsIlxcc3FjdXAiLCEwKSx3ZShBZSxVZSxscywi4pevIiwiXFxiaWdjaXJjIiwhMCksd2UoQWUsVWUsbHMsIuKImSIsIlxcYnVsbGV0IiwhMCksd2UoQWUsVWUsbHMsIuKAoSIsIlxcZGRhZ2dlciIpLHdlKEFlLFVlLGxzLCLiiYAiLCJcXHdyIiwhMCksd2UoQWUsVWUsbHMsIuKovyIsIlxcYW1hbGciKSx3ZShBZSxVZSxscywiJiIsIlxcQW5kIiksd2UoQWUsVWUsSHQsIuKftSIsIlxcbG9uZ2xlZnRhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLih5AiLCJcXExlZnRhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLin7giLCJcXExvbmdsZWZ0YXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4p+2IiwiXFxsb25ncmlnaHRhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLih5IiLCJcXFJpZ2h0YXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4p+5IiwiXFxMb25ncmlnaHRhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLihpQiLCJcXGxlZnRyaWdodGFycm93IiwhMCksd2UoQWUsVWUsSHQsIuKftyIsIlxcbG9uZ2xlZnRyaWdodGFycm93IiwhMCksd2UoQWUsVWUsSHQsIuKHlCIsIlxcTGVmdHJpZ2h0YXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4p+6IiwiXFxMb25nbGVmdHJpZ2h0YXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4oamIiwiXFxtYXBzdG8iLCEwKSx3ZShBZSxVZSxIdCwi4p+8IiwiXFxsb25nbWFwc3RvIiwhMCksd2UoQWUsVWUsSHQsIuKGlyIsIlxcbmVhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLihqkiLCJcXGhvb2tsZWZ0YXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4oaqIiwiXFxob29rcmlnaHRhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLihpgiLCJcXHNlYXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4oa8IiwiXFxsZWZ0aGFycG9vbnVwIiwhMCksd2UoQWUsVWUsSHQsIuKHgCIsIlxccmlnaHRoYXJwb29udXAiLCEwKSx3ZShBZSxVZSxIdCwi4oaZIiwiXFxzd2Fycm93IiwhMCksd2UoQWUsVWUsSHQsIuKGvSIsIlxcbGVmdGhhcnBvb25kb3duIiwhMCksd2UoQWUsVWUsSHQsIuKHgSIsIlxccmlnaHRoYXJwb29uZG93biIsITApLHdlKEFlLFVlLEh0LCLihpYiLCJcXG53YXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4oeMIiwiXFxyaWdodGxlZnRoYXJwb29ucyIsITApLHdlKEFlLCR0LEh0LCLiia4iLCJcXG5sZXNzIiwhMCksd2UoQWUsJHQsSHQsIu6AkCIsIlxcQG5sZXFzbGFudCIpLHdlKEFlLCR0LEh0LCLugJEiLCJcXEBubGVxcSIpLHdlKEFlLCR0LEh0LCLiqociLCJcXGxuZXEiLCEwKSx3ZShBZSwkdCxIdCwi4omoIiwiXFxsbmVxcSIsITApLHdlKEFlLCR0LEh0LCLugIwiLCJcXEBsdmVydG5lcXEiKSx3ZShBZSwkdCxIdCwi4oumIiwiXFxsbnNpbSIsITApLHdlKEFlLCR0LEh0LCLiqokiLCJcXGxuYXBwcm94IiwhMCksd2UoQWUsJHQsSHQsIuKKgCIsIlxcbnByZWMiLCEwKSx3ZShBZSwkdCxIdCwi4ougIiwiXFxucHJlY2VxIiwhMCksd2UoQWUsJHQsSHQsIuKLqCIsIlxccHJlY25zaW0iLCEwKSx3ZShBZSwkdCxIdCwi4qq5IiwiXFxwcmVjbmFwcHJveCIsITApLHdlKEFlLCR0LEh0LCLiiYEiLCJcXG5zaW0iLCEwKSx3ZShBZSwkdCxIdCwi7oCGIiwiXFxAbnNob3J0bWlkIiksd2UoQWUsJHQsSHQsIuKIpCIsIlxcbm1pZCIsITApLHdlKEFlLCR0LEh0LCLiiqwiLCJcXG52ZGFzaCIsITApLHdlKEFlLCR0LEh0LCLiiq0iLCJcXG52RGFzaCIsITApLHdlKEFlLCR0LEh0LCLii6oiLCJcXG50cmlhbmdsZWxlZnQiKSx3ZShBZSwkdCxIdCwi4ousIiwiXFxudHJpYW5nbGVsZWZ0ZXEiLCEwKSx3ZShBZSwkdCxIdCwi4oqKIiwiXFxzdWJzZXRuZXEiLCEwKSx3ZShBZSwkdCxIdCwi7oCaIiwiXFxAdmFyc3Vic2V0bmVxIiksd2UoQWUsJHQsSHQsIuKriyIsIlxcc3Vic2V0bmVxcSIsITApLHdlKEFlLCR0LEh0LCLugJciLCJcXEB2YXJzdWJzZXRuZXFxIiksd2UoQWUsJHQsSHQsIuKJryIsIlxcbmd0ciIsITApLHdlKEFlLCR0LEh0LCLugI8iLCJcXEBuZ2Vxc2xhbnQiKSx3ZShBZSwkdCxIdCwi7oCOIiwiXFxAbmdlcXEiKSx3ZShBZSwkdCxIdCwi4qqIIiwiXFxnbmVxIiwhMCksd2UoQWUsJHQsSHQsIuKJqSIsIlxcZ25lcXEiLCEwKSx3ZShBZSwkdCxIdCwi7oCNIiwiXFxAZ3ZlcnRuZXFxIiksd2UoQWUsJHQsSHQsIuKLpyIsIlxcZ25zaW0iLCEwKSx3ZShBZSwkdCxIdCwi4qqKIiwiXFxnbmFwcHJveCIsITApLHdlKEFlLCR0LEh0LCLiioEiLCJcXG5zdWNjIiwhMCksd2UoQWUsJHQsSHQsIuKLoSIsIlxcbnN1Y2NlcSIsITApLHdlKEFlLCR0LEh0LCLii6kiLCJcXHN1Y2Nuc2ltIiwhMCksd2UoQWUsJHQsSHQsIuKquiIsIlxcc3VjY25hcHByb3giLCEwKSx3ZShBZSwkdCxIdCwi4omGIiwiXFxuY29uZyIsITApLHdlKEFlLCR0LEh0LCLugIciLCJcXEBuc2hvcnRwYXJhbGxlbCIpLHdlKEFlLCR0LEh0LCLiiKYiLCJcXG5wYXJhbGxlbCIsITApLHdlKEFlLCR0LEh0LCLiiq8iLCJcXG5WRGFzaCIsITApLHdlKEFlLCR0LEh0LCLii6siLCJcXG50cmlhbmdsZXJpZ2h0Iiksd2UoQWUsJHQsSHQsIuKLrSIsIlxcbnRyaWFuZ2xlcmlnaHRlcSIsITApLHdlKEFlLCR0LEh0LCLugJgiLCJcXEBuc3Vwc2V0ZXFxIiksd2UoQWUsJHQsSHQsIuKKiyIsIlxcc3Vwc2V0bmVxIiwhMCksd2UoQWUsJHQsSHQsIu6AmyIsIlxcQHZhcnN1cHNldG5lcSIpLHdlKEFlLCR0LEh0LCLiq4wiLCJcXHN1cHNldG5lcXEiLCEwKSx3ZShBZSwkdCxIdCwi7oCZIiwiXFxAdmFyc3Vwc2V0bmVxcSIpLHdlKEFlLCR0LEh0LCLiiq4iLCJcXG5WZGFzaCIsITApLHdlKEFlLCR0LEh0LCLiqrUiLCJcXHByZWNuZXFxIiwhMCksd2UoQWUsJHQsSHQsIuKqtiIsIlxcc3VjY25lcXEiLCEwKSx3ZShBZSwkdCxIdCwi7oCWIiwiXFxAbnN1YnNldGVxcSIpLHdlKEFlLCR0LGxzLCLiirQiLCJcXHVubGhkIiksd2UoQWUsJHQsbHMsIuKKtSIsIlxcdW5yaGQiKSx3ZShBZSwkdCxIdCwi4oaaIiwiXFxubGVmdGFycm93IiwhMCksd2UoQWUsJHQsSHQsIuKGmyIsIlxcbnJpZ2h0YXJyb3ciLCEwKSx3ZShBZSwkdCxIdCwi4oeNIiwiXFxuTGVmdGFycm93IiwhMCksd2UoQWUsJHQsSHQsIuKHjyIsIlxcblJpZ2h0YXJyb3ciLCEwKSx3ZShBZSwkdCxIdCwi4oauIiwiXFxubGVmdHJpZ2h0YXJyb3ciLCEwKSx3ZShBZSwkdCxIdCwi4oeOIiwiXFxuTGVmdHJpZ2h0YXJyb3ciLCEwKSx3ZShBZSwkdCxIdCwi4pazIiwiXFx2YXJ0cmlhbmdsZSIpLHdlKEFlLCR0LG1uLCLihI8iLCJcXGhzbGFzaCIpLHdlKEFlLCR0LG1uLCLilr0iLCJcXHRyaWFuZ2xlZG93biIpLHdlKEFlLCR0LG1uLCLil4oiLCJcXGxvemVuZ2UiKSx3ZShBZSwkdCxtbiwi4pOIIiwiXFxjaXJjbGVkUyIpLHdlKEFlLCR0LG1uLCLCriIsIlxcY2lyY2xlZFIiKSx3ZShzaSwkdCxtbiwiwq4iLCJcXGNpcmNsZWRSIiksd2UoQWUsJHQsbW4sIuKIoSIsIlxcbWVhc3VyZWRhbmdsZSIsITApLHdlKEFlLCR0LG1uLCLiiIQiLCJcXG5leGlzdHMiKSx3ZShBZSwkdCxtbiwi4oSnIiwiXFxtaG8iKSx3ZShBZSwkdCxtbiwi4oSyIiwiXFxGaW52IiwhMCksd2UoQWUsJHQsbW4sIuKFgSIsIlxcR2FtZSIsITApLHdlKEFlLCR0LG1uLCLigLUiLCJcXGJhY2twcmltZSIpLHdlKEFlLCR0LG1uLCLilrIiLCJcXGJsYWNrdHJpYW5nbGUiKSx3ZShBZSwkdCxtbiwi4pa8IiwiXFxibGFja3RyaWFuZ2xlZG93biIpLHdlKEFlLCR0LG1uLCLilqAiLCJcXGJsYWNrc3F1YXJlIiksd2UoQWUsJHQsbW4sIuKnqyIsIlxcYmxhY2tsb3plbmdlIiksd2UoQWUsJHQsbW4sIuKYhSIsIlxcYmlnc3RhciIpLHdlKEFlLCR0LG1uLCLiiKIiLCJcXHNwaGVyaWNhbGFuZ2xlIiwhMCksd2UoQWUsJHQsbW4sIuKIgSIsIlxcY29tcGxlbWVudCIsITApLHdlKEFlLCR0LG1uLCLDsCIsIlxcZXRoIiwhMCksd2Uoc2ksVWUsbW4sIsOwIiwiw7AiKSx3ZShBZSwkdCxtbiwi4pWxIiwiXFxkaWFndXAiKSx3ZShBZSwkdCxtbiwi4pWyIiwiXFxkaWFnZG93biIpLHdlKEFlLCR0LG1uLCLilqEiLCJcXHNxdWFyZSIpLHdlKEFlLCR0LG1uLCLilqEiLCJcXEJveCIpLHdlKEFlLCR0LG1uLCLil4oiLCJcXERpYW1vbmQiKSx3ZShBZSwkdCxtbiwiwqUiLCJcXHllbiIsITApLHdlKHNpLCR0LG1uLCLCpSIsIlxceWVuIiwhMCksd2UoQWUsJHQsbW4sIuKckyIsIlxcY2hlY2ttYXJrIiwhMCksd2Uoc2ksJHQsbW4sIuKckyIsIlxcY2hlY2ttYXJrIiksd2UoQWUsJHQsbW4sIuKEtiIsIlxcYmV0aCIsITApLHdlKEFlLCR0LG1uLCLihLgiLCJcXGRhbGV0aCIsITApLHdlKEFlLCR0LG1uLCLihLciLCJcXGdpbWVsIiwhMCksd2UoQWUsJHQsbW4sIs+dIiwiXFxkaWdhbW1hIiwhMCksd2UoQWUsJHQsbW4sIs+wIiwiXFx2YXJrYXBwYSIpLHdlKEFlLCR0LGhtLCLilIwiLCJcXEB1bGNvcm5lciIsITApLHdlKEFlLCR0LERwLCLilJAiLCJcXEB1cmNvcm5lciIsITApLHdlKEFlLCR0LGhtLCLilJQiLCJcXEBsbGNvcm5lciIsITApLHdlKEFlLCR0LERwLCLilJgiLCJcXEBscmNvcm5lciIsITApLHdlKEFlLCR0LEh0LCLiiaYiLCJcXGxlcXEiLCEwKSx3ZShBZSwkdCxIdCwi4qm9IiwiXFxsZXFzbGFudCIsITApLHdlKEFlLCR0LEh0LCLiqpUiLCJcXGVxc2xhbnRsZXNzIiwhMCksd2UoQWUsJHQsSHQsIuKJsiIsIlxcbGVzc3NpbSIsITApLHdlKEFlLCR0LEh0LCLiqoUiLCJcXGxlc3NhcHByb3giLCEwKSx3ZShBZSwkdCxIdCwi4omKIiwiXFxhcHByb3hlcSIsITApLHdlKEFlLCR0LGxzLCLii5YiLCJcXGxlc3Nkb3QiKSx3ZShBZSwkdCxIdCwi4ouYIiwiXFxsbGwiLCEwKSx3ZShBZSwkdCxIdCwi4om2IiwiXFxsZXNzZ3RyIiwhMCksd2UoQWUsJHQsSHQsIuKLmiIsIlxcbGVzc2VxZ3RyIiwhMCksd2UoQWUsJHQsSHQsIuKqiyIsIlxcbGVzc2VxcWd0ciIsITApLHdlKEFlLCR0LEh0LCLiiZEiLCJcXGRvdGVxZG90Iiksd2UoQWUsJHQsSHQsIuKJkyIsIlxccmlzaW5nZG90c2VxIiwhMCksd2UoQWUsJHQsSHQsIuKJkiIsIlxcZmFsbGluZ2RvdHNlcSIsITApLHdlKEFlLCR0LEh0LCLiiL0iLCJcXGJhY2tzaW0iLCEwKSx3ZShBZSwkdCxIdCwi4ouNIiwiXFxiYWNrc2ltZXEiLCEwKSx3ZShBZSwkdCxIdCwi4quFIiwiXFxzdWJzZXRlcXEiLCEwKSx3ZShBZSwkdCxIdCwi4ouQIiwiXFxTdWJzZXQiLCEwKSx3ZShBZSwkdCxIdCwi4oqPIiwiXFxzcXN1YnNldCIsITApLHdlKEFlLCR0LEh0LCLiibwiLCJcXHByZWNjdXJseWVxIiwhMCksd2UoQWUsJHQsSHQsIuKLniIsIlxcY3VybHllcXByZWMiLCEwKSx3ZShBZSwkdCxIdCwi4om+IiwiXFxwcmVjc2ltIiwhMCksd2UoQWUsJHQsSHQsIuKqtyIsIlxccHJlY2FwcHJveCIsITApLHdlKEFlLCR0LEh0LCLiirIiLCJcXHZhcnRyaWFuZ2xlbGVmdCIpLHdlKEFlLCR0LEh0LCLiirQiLCJcXHRyaWFuZ2xlbGVmdGVxIiksd2UoQWUsJHQsSHQsIuKKqCIsIlxcdkRhc2giLCEwKSx3ZShBZSwkdCxIdCwi4oqqIiwiXFxWdmRhc2giLCEwKSx3ZShBZSwkdCxIdCwi4oyjIiwiXFxzbWFsbHNtaWxlIiksd2UoQWUsJHQsSHQsIuKMoiIsIlxcc21hbGxmcm93biIpLHdlKEFlLCR0LEh0LCLiiY8iLCJcXGJ1bXBlcSIsITApLHdlKEFlLCR0LEh0LCLiiY4iLCJcXEJ1bXBlcSIsITApLHdlKEFlLCR0LEh0LCLiiaciLCJcXGdlcXEiLCEwKSx3ZShBZSwkdCxIdCwi4qm+IiwiXFxnZXFzbGFudCIsITApLHdlKEFlLCR0LEh0LCLiqpYiLCJcXGVxc2xhbnRndHIiLCEwKSx3ZShBZSwkdCxIdCwi4omzIiwiXFxndHJzaW0iLCEwKSx3ZShBZSwkdCxIdCwi4qqGIiwiXFxndHJhcHByb3giLCEwKSx3ZShBZSwkdCxscywi4ouXIiwiXFxndHJkb3QiKSx3ZShBZSwkdCxIdCwi4ouZIiwiXFxnZ2ciLCEwKSx3ZShBZSwkdCxIdCwi4om3IiwiXFxndHJsZXNzIiwhMCksd2UoQWUsJHQsSHQsIuKLmyIsIlxcZ3RyZXFsZXNzIiwhMCksd2UoQWUsJHQsSHQsIuKqjCIsIlxcZ3RyZXFxbGVzcyIsITApLHdlKEFlLCR0LEh0LCLiiZYiLCJcXGVxY2lyYyIsITApLHdlKEFlLCR0LEh0LCLiiZciLCJcXGNpcmNlcSIsITApLHdlKEFlLCR0LEh0LCLiiZwiLCJcXHRyaWFuZ2xlcSIsITApLHdlKEFlLCR0LEh0LCLiiLwiLCJcXHRoaWNrc2ltIiksd2UoQWUsJHQsSHQsIuKJiCIsIlxcdGhpY2thcHByb3giKSx3ZShBZSwkdCxIdCwi4quGIiwiXFxzdXBzZXRlcXEiLCEwKSx3ZShBZSwkdCxIdCwi4ouRIiwiXFxTdXBzZXQiLCEwKSx3ZShBZSwkdCxIdCwi4oqQIiwiXFxzcXN1cHNldCIsITApLHdlKEFlLCR0LEh0LCLiib0iLCJcXHN1Y2NjdXJseWVxIiwhMCksd2UoQWUsJHQsSHQsIuKLnyIsIlxcY3VybHllcXN1Y2MiLCEwKSx3ZShBZSwkdCxIdCwi4om/IiwiXFxzdWNjc2ltIiwhMCksd2UoQWUsJHQsSHQsIuKquCIsIlxcc3VjY2FwcHJveCIsITApLHdlKEFlLCR0LEh0LCLiirMiLCJcXHZhcnRyaWFuZ2xlcmlnaHQiKSx3ZShBZSwkdCxIdCwi4oq1IiwiXFx0cmlhbmdsZXJpZ2h0ZXEiKSx3ZShBZSwkdCxIdCwi4oqpIiwiXFxWZGFzaCIsITApLHdlKEFlLCR0LEh0LCLiiKMiLCJcXHNob3J0bWlkIiksd2UoQWUsJHQsSHQsIuKIpSIsIlxcc2hvcnRwYXJhbGxlbCIpLHdlKEFlLCR0LEh0LCLiiawiLCJcXGJldHdlZW4iLCEwKSx3ZShBZSwkdCxIdCwi4ouUIiwiXFxwaXRjaGZvcmsiLCEwKSx3ZShBZSwkdCxIdCwi4oidIiwiXFx2YXJwcm9wdG8iKSx3ZShBZSwkdCxIdCwi4peAIiwiXFxibGFja3RyaWFuZ2xlbGVmdCIpLHdlKEFlLCR0LEh0LCLiiLQiLCJcXHRoZXJlZm9yZSIsITApLHdlKEFlLCR0LEh0LCLiiI0iLCJcXGJhY2tlcHNpbG9uIiksd2UoQWUsJHQsSHQsIuKWtiIsIlxcYmxhY2t0cmlhbmdsZXJpZ2h0Iiksd2UoQWUsJHQsSHQsIuKItSIsIlxcYmVjYXVzZSIsITApLHdlKEFlLCR0LEh0LCLii5giLCJcXGxsbGVzcyIpLHdlKEFlLCR0LEh0LCLii5kiLCJcXGdnZ3RyIiksd2UoQWUsJHQsbHMsIuKKsiIsIlxcbGhkIiksd2UoQWUsJHQsbHMsIuKKsyIsIlxccmhkIiksd2UoQWUsJHQsSHQsIuKJgiIsIlxcZXFzaW0iLCEwKSx3ZShBZSxVZSxIdCwi4ouIIiwiXFxKb2luIiksd2UoQWUsJHQsSHQsIuKJkSIsIlxcRG90ZXEiLCEwKSx3ZShBZSwkdCxscywi4oiUIiwiXFxkb3RwbHVzIiwhMCksd2UoQWUsJHQsbHMsIuKIliIsIlxcc21hbGxzZXRtaW51cyIpLHdlKEFlLCR0LGxzLCLii5IiLCJcXENhcCIsITApLHdlKEFlLCR0LGxzLCLii5MiLCJcXEN1cCIsITApLHdlKEFlLCR0LGxzLCLiqZ4iLCJcXGRvdWJsZWJhcndlZGdlIiwhMCksd2UoQWUsJHQsbHMsIuKKnyIsIlxcYm94bWludXMiLCEwKSx3ZShBZSwkdCxscywi4oqeIiwiXFxib3hwbHVzIiwhMCksd2UoQWUsJHQsbHMsIuKLhyIsIlxcZGl2aWRlb250aW1lcyIsITApLHdlKEFlLCR0LGxzLCLii4kiLCJcXGx0aW1lcyIsITApLHdlKEFlLCR0LGxzLCLii4oiLCJcXHJ0aW1lcyIsITApLHdlKEFlLCR0LGxzLCLii4siLCJcXGxlZnR0aHJlZXRpbWVzIiwhMCksd2UoQWUsJHQsbHMsIuKLjCIsIlxccmlnaHR0aHJlZXRpbWVzIiwhMCksd2UoQWUsJHQsbHMsIuKLjyIsIlxcY3VybHl3ZWRnZSIsITApLHdlKEFlLCR0LGxzLCLii44iLCJcXGN1cmx5dmVlIiwhMCksd2UoQWUsJHQsbHMsIuKKnSIsIlxcY2lyY2xlZGRhc2giLCEwKSx3ZShBZSwkdCxscywi4oqbIiwiXFxjaXJjbGVkYXN0IiwhMCksd2UoQWUsJHQsbHMsIuKLhSIsIlxcY2VudGVyZG90Iiksd2UoQWUsJHQsbHMsIuKKuiIsIlxcaW50ZXJjYWwiLCEwKSx3ZShBZSwkdCxscywi4ouSIiwiXFxkb3VibGVjYXAiKSx3ZShBZSwkdCxscywi4ouTIiwiXFxkb3VibGVjdXAiKSx3ZShBZSwkdCxscywi4oqgIiwiXFxib3h0aW1lcyIsITApLHdlKEFlLCR0LEh0LCLih6IiLCJcXGRhc2hyaWdodGFycm93IiwhMCksd2UoQWUsJHQsSHQsIuKHoCIsIlxcZGFzaGxlZnRhcnJvdyIsITApLHdlKEFlLCR0LEh0LCLih4ciLCJcXGxlZnRsZWZ0YXJyb3dzIiwhMCksd2UoQWUsJHQsSHQsIuKHhiIsIlxcbGVmdHJpZ2h0YXJyb3dzIiwhMCksd2UoQWUsJHQsSHQsIuKHmiIsIlxcTGxlZnRhcnJvdyIsITApLHdlKEFlLCR0LEh0LCLihp4iLCJcXHR3b2hlYWRsZWZ0YXJyb3ciLCEwKSx3ZShBZSwkdCxIdCwi4oaiIiwiXFxsZWZ0YXJyb3d0YWlsIiwhMCksd2UoQWUsJHQsSHQsIuKGqyIsIlxcbG9vcGFycm93bGVmdCIsITApLHdlKEFlLCR0LEh0LCLih4siLCJcXGxlZnRyaWdodGhhcnBvb25zIiwhMCksd2UoQWUsJHQsSHQsIuKGtiIsIlxcY3VydmVhcnJvd2xlZnQiLCEwKSx3ZShBZSwkdCxIdCwi4oa6IiwiXFxjaXJjbGVhcnJvd2xlZnQiLCEwKSx3ZShBZSwkdCxIdCwi4oawIiwiXFxMc2giLCEwKSx3ZShBZSwkdCxIdCwi4oeIIiwiXFx1cHVwYXJyb3dzIiwhMCksd2UoQWUsJHQsSHQsIuKGvyIsIlxcdXBoYXJwb29ubGVmdCIsITApLHdlKEFlLCR0LEh0LCLih4MiLCJcXGRvd25oYXJwb29ubGVmdCIsITApLHdlKEFlLFVlLEh0LCLiirYiLCJcXG9yaWdvZiIsITApLHdlKEFlLFVlLEh0LCLiirciLCJcXGltYWdlb2YiLCEwKSx3ZShBZSwkdCxIdCwi4oq4IiwiXFxtdWx0aW1hcCIsITApLHdlKEFlLCR0LEh0LCLihq0iLCJcXGxlZnRyaWdodHNxdWlnYXJyb3ciLCEwKSx3ZShBZSwkdCxIdCwi4oeJIiwiXFxyaWdodHJpZ2h0YXJyb3dzIiwhMCksd2UoQWUsJHQsSHQsIuKHhCIsIlxccmlnaHRsZWZ0YXJyb3dzIiwhMCksd2UoQWUsJHQsSHQsIuKGoCIsIlxcdHdvaGVhZHJpZ2h0YXJyb3ciLCEwKSx3ZShBZSwkdCxIdCwi4oajIiwiXFxyaWdodGFycm93dGFpbCIsITApLHdlKEFlLCR0LEh0LCLihqwiLCJcXGxvb3BhcnJvd3JpZ2h0IiwhMCksd2UoQWUsJHQsSHQsIuKGtyIsIlxcY3VydmVhcnJvd3JpZ2h0IiwhMCksd2UoQWUsJHQsSHQsIuKGuyIsIlxcY2lyY2xlYXJyb3dyaWdodCIsITApLHdlKEFlLCR0LEh0LCLihrEiLCJcXFJzaCIsITApLHdlKEFlLCR0LEh0LCLih4oiLCJcXGRvd25kb3duYXJyb3dzIiwhMCksd2UoQWUsJHQsSHQsIuKGviIsIlxcdXBoYXJwb29ucmlnaHQiLCEwKSx3ZShBZSwkdCxIdCwi4oeCIiwiXFxkb3duaGFycG9vbnJpZ2h0IiwhMCksd2UoQWUsJHQsSHQsIuKHnSIsIlxccmlnaHRzcXVpZ2Fycm93IiwhMCksd2UoQWUsJHQsSHQsIuKHnSIsIlxcbGVhZHN0byIpLHdlKEFlLCR0LEh0LCLih5siLCJcXFJyaWdodGFycm93IiwhMCksd2UoQWUsJHQsSHQsIuKGviIsIlxccmVzdHJpY3Rpb24iKSx3ZShBZSxVZSxtbiwi4oCYIiwiYCIpLHdlKEFlLFVlLG1uLCIkIiwiXFwkIiksd2Uoc2ksVWUsbW4sIiQiLCJcXCQiKSx3ZShzaSxVZSxtbiwiJCIsIlxcdGV4dGRvbGxhciIpLHdlKEFlLFVlLG1uLCIlIiwiXFwlIiksd2Uoc2ksVWUsbW4sIiUiLCJcXCUiKSx3ZShBZSxVZSxtbiwiXyIsIlxcXyIpLHdlKHNpLFVlLG1uLCJfIiwiXFxfIiksd2Uoc2ksVWUsbW4sIl8iLCJcXHRleHR1bmRlcnNjb3JlIiksd2UoQWUsVWUsbW4sIuKIoCIsIlxcYW5nbGUiLCEwKSx3ZShBZSxVZSxtbiwi4oieIiwiXFxpbmZ0eSIsITApLHdlKEFlLFVlLG1uLCLigLIiLCJcXHByaW1lIiksd2UoQWUsVWUsbW4sIuKWsyIsIlxcdHJpYW5nbGUiKSx3ZShBZSxVZSxtbiwizpMiLCJcXEdhbW1hIiwhMCksd2UoQWUsVWUsbW4sIs6UIiwiXFxEZWx0YSIsITApLHdlKEFlLFVlLG1uLCLOmCIsIlxcVGhldGEiLCEwKSx3ZShBZSxVZSxtbiwizpsiLCJcXExhbWJkYSIsITApLHdlKEFlLFVlLG1uLCLOniIsIlxcWGkiLCEwKSx3ZShBZSxVZSxtbiwizqAiLCJcXFBpIiwhMCksd2UoQWUsVWUsbW4sIs6jIiwiXFxTaWdtYSIsITApLHdlKEFlLFVlLG1uLCLOpSIsIlxcVXBzaWxvbiIsITApLHdlKEFlLFVlLG1uLCLOpiIsIlxcUGhpIiwhMCksd2UoQWUsVWUsbW4sIs6oIiwiXFxQc2kiLCEwKSx3ZShBZSxVZSxtbiwizqkiLCJcXE9tZWdhIiwhMCksd2UoQWUsVWUsbW4sIkEiLCLOkSIpLHdlKEFlLFVlLG1uLCJCIiwizpIiKSx3ZShBZSxVZSxtbiwiRSIsIs6VIiksd2UoQWUsVWUsbW4sIloiLCLOliIpLHdlKEFlLFVlLG1uLCJIIiwizpciKSx3ZShBZSxVZSxtbiwiSSIsIs6ZIiksd2UoQWUsVWUsbW4sIksiLCLOmiIpLHdlKEFlLFVlLG1uLCJNIiwizpwiKSx3ZShBZSxVZSxtbiwiTiIsIs6dIiksd2UoQWUsVWUsbW4sIk8iLCLOnyIpLHdlKEFlLFVlLG1uLCJQIiwizqEiKSx3ZShBZSxVZSxtbiwiVCIsIs6kIiksd2UoQWUsVWUsbW4sIlgiLCLOpyIpLHdlKEFlLFVlLG1uLCLCrCIsIlxcbmVnIiwhMCksd2UoQWUsVWUsbW4sIsKsIiwiXFxsbm90Iiksd2UoQWUsVWUsbW4sIuKKpCIsIlxcdG9wIiksd2UoQWUsVWUsbW4sIuKKpSIsIlxcYm90Iiksd2UoQWUsVWUsbW4sIuKIhSIsIlxcZW1wdHlzZXQiKSx3ZShBZSwkdCxtbiwi4oiFIiwiXFx2YXJub3RoaW5nIiksd2UoQWUsVWUsQ2EsIs6xIiwiXFxhbHBoYSIsITApLHdlKEFlLFVlLENhLCLOsiIsIlxcYmV0YSIsITApLHdlKEFlLFVlLENhLCLOsyIsIlxcZ2FtbWEiLCEwKSx3ZShBZSxVZSxDYSwizrQiLCJcXGRlbHRhIiwhMCksd2UoQWUsVWUsQ2EsIs+1IiwiXFxlcHNpbG9uIiwhMCksd2UoQWUsVWUsQ2EsIs62IiwiXFx6ZXRhIiwhMCksd2UoQWUsVWUsQ2EsIs63IiwiXFxldGEiLCEwKSx3ZShBZSxVZSxDYSwizrgiLCJcXHRoZXRhIiwhMCksd2UoQWUsVWUsQ2EsIs65IiwiXFxpb3RhIiwhMCksd2UoQWUsVWUsQ2EsIs66IiwiXFxrYXBwYSIsITApLHdlKEFlLFVlLENhLCLOuyIsIlxcbGFtYmRhIiwhMCksd2UoQWUsVWUsQ2EsIs68IiwiXFxtdSIsITApLHdlKEFlLFVlLENhLCLOvSIsIlxcbnUiLCEwKSx3ZShBZSxVZSxDYSwizr4iLCJcXHhpIiwhMCksd2UoQWUsVWUsQ2EsIs6/IiwiXFxvbWljcm9uIiwhMCksd2UoQWUsVWUsQ2EsIs+AIiwiXFxwaSIsITApLHdlKEFlLFVlLENhLCLPgSIsIlxccmhvIiwhMCksd2UoQWUsVWUsQ2EsIs+DIiwiXFxzaWdtYSIsITApLHdlKEFlLFVlLENhLCLPhCIsIlxcdGF1IiwhMCksd2UoQWUsVWUsQ2EsIs+FIiwiXFx1cHNpbG9uIiwhMCksd2UoQWUsVWUsQ2EsIs+VIiwiXFxwaGkiLCEwKSx3ZShBZSxVZSxDYSwiz4ciLCJcXGNoaSIsITApLHdlKEFlLFVlLENhLCLPiCIsIlxccHNpIiwhMCksd2UoQWUsVWUsQ2EsIs+JIiwiXFxvbWVnYSIsITApLHdlKEFlLFVlLENhLCLOtSIsIlxcdmFyZXBzaWxvbiIsITApLHdlKEFlLFVlLENhLCLPkSIsIlxcdmFydGhldGEiLCEwKSx3ZShBZSxVZSxDYSwiz5YiLCJcXHZhcnBpIiwhMCksd2UoQWUsVWUsQ2EsIs+xIiwiXFx2YXJyaG8iLCEwKSx3ZShBZSxVZSxDYSwiz4IiLCJcXHZhcnNpZ21hIiwhMCksd2UoQWUsVWUsQ2EsIs+GIiwiXFx2YXJwaGkiLCEwKSx3ZShBZSxVZSxscywi4oiXIiwiKiIsITApLHdlKEFlLFVlLGxzLCIrIiwiKyIpLHdlKEFlLFVlLGxzLCLiiJIiLCItIiwhMCksd2UoQWUsVWUsbHMsIuKLhSIsIlxcY2RvdCIsITApLHdlKEFlLFVlLGxzLCLiiJgiLCJcXGNpcmMiLCEwKSx3ZShBZSxVZSxscywiw7ciLCJcXGRpdiIsITApLHdlKEFlLFVlLGxzLCLCsSIsIlxccG0iLCEwKSx3ZShBZSxVZSxscywiw5ciLCJcXHRpbWVzIiwhMCksd2UoQWUsVWUsbHMsIuKIqSIsIlxcY2FwIiwhMCksd2UoQWUsVWUsbHMsIuKIqiIsIlxcY3VwIiwhMCksd2UoQWUsVWUsbHMsIuKIliIsIlxcc2V0bWludXMiLCEwKSx3ZShBZSxVZSxscywi4oinIiwiXFxsYW5kIiksd2UoQWUsVWUsbHMsIuKIqCIsIlxcbG9yIiksd2UoQWUsVWUsbHMsIuKIpyIsIlxcd2VkZ2UiLCEwKSx3ZShBZSxVZSxscywi4oioIiwiXFx2ZWUiLCEwKSx3ZShBZSxVZSxtbiwi4oiaIiwiXFxzdXJkIiksd2UoQWUsVWUsaG0sIuKfqCIsIlxcbGFuZ2xlIiwhMCksd2UoQWUsVWUsaG0sIuKIoyIsIlxcbHZlcnQiKSx3ZShBZSxVZSxobSwi4oilIiwiXFxsVmVydCIpLHdlKEFlLFVlLERwLCI/IiwiPyIpLHdlKEFlLFVlLERwLCIhIiwiISIpLHdlKEFlLFVlLERwLCLin6kiLCJcXHJhbmdsZSIsITApLHdlKEFlLFVlLERwLCLiiKMiLCJcXHJ2ZXJ0Iiksd2UoQWUsVWUsRHAsIuKIpSIsIlxcclZlcnQiKSx3ZShBZSxVZSxIdCwiPSIsIj0iKSx3ZShBZSxVZSxIdCwiOiIsIjoiKSx3ZShBZSxVZSxIdCwi4omIIiwiXFxhcHByb3giLCEwKSx3ZShBZSxVZSxIdCwi4omFIiwiXFxjb25nIiwhMCksd2UoQWUsVWUsSHQsIuKJpSIsIlxcZ2UiKSx3ZShBZSxVZSxIdCwi4omlIiwiXFxnZXEiLCEwKSx3ZShBZSxVZSxIdCwi4oaQIiwiXFxnZXRzIiksd2UoQWUsVWUsSHQsIj4iLCJcXGd0IiwhMCksd2UoQWUsVWUsSHQsIuKIiCIsIlxcaW4iLCEwKSx3ZShBZSxVZSxIdCwi7oCgIiwiXFxAbm90Iiksd2UoQWUsVWUsSHQsIuKKgiIsIlxcc3Vic2V0IiwhMCksd2UoQWUsVWUsSHQsIuKKgyIsIlxcc3Vwc2V0IiwhMCksd2UoQWUsVWUsSHQsIuKKhiIsIlxcc3Vic2V0ZXEiLCEwKSx3ZShBZSxVZSxIdCwi4oqHIiwiXFxzdXBzZXRlcSIsITApLHdlKEFlLCR0LEh0LCLiiogiLCJcXG5zdWJzZXRlcSIsITApLHdlKEFlLCR0LEh0LCLiiokiLCJcXG5zdXBzZXRlcSIsITApLHdlKEFlLFVlLEh0LCLiiqgiLCJcXG1vZGVscyIpLHdlKEFlLFVlLEh0LCLihpAiLCJcXGxlZnRhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLiiaQiLCJcXGxlIiksd2UoQWUsVWUsSHQsIuKJpCIsIlxcbGVxIiwhMCksd2UoQWUsVWUsSHQsIjwiLCJcXGx0IiwhMCksd2UoQWUsVWUsSHQsIuKGkiIsIlxccmlnaHRhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLihpIiLCJcXHRvIiksd2UoQWUsJHQsSHQsIuKJsSIsIlxcbmdlcSIsITApLHdlKEFlLCR0LEh0LCLiibAiLCJcXG5sZXEiLCEwKSx3ZShBZSxVZSxJNywiwqAiLCJcXCAiKSx3ZShBZSxVZSxJNywiwqAiLCJcXHNwYWNlIiksd2UoQWUsVWUsSTcsIsKgIiwiXFxub2JyZWFrc3BhY2UiKSx3ZShzaSxVZSxJNywiwqAiLCJcXCAiKSx3ZShzaSxVZSxJNywiwqAiLCIgIiksd2Uoc2ksVWUsSTcsIsKgIiwiXFxzcGFjZSIpLHdlKHNpLFVlLEk3LCLCoCIsIlxcbm9icmVha3NwYWNlIiksd2UoQWUsVWUsSTcsbnVsbCwiXFxub2JyZWFrIiksd2UoQWUsVWUsSTcsbnVsbCwiXFxhbGxvd2JyZWFrIiksd2UoQWUsVWUsb1EsIiwiLCIsIiksd2UoQWUsVWUsb1EsIjsiLCI7Iiksd2UoQWUsJHQsbHMsIuKKvCIsIlxcYmFyd2VkZ2UiLCEwKSx3ZShBZSwkdCxscywi4oq7IiwiXFx2ZWViYXIiLCEwKSx3ZShBZSxVZSxscywi4oqZIiwiXFxvZG90IiwhMCksd2UoQWUsVWUsbHMsIuKKlSIsIlxcb3BsdXMiLCEwKSx3ZShBZSxVZSxscywi4oqXIiwiXFxvdGltZXMiLCEwKSx3ZShBZSxVZSxtbiwi4oiCIiwiXFxwYXJ0aWFsIiwhMCksd2UoQWUsVWUsbHMsIuKKmCIsIlxcb3NsYXNoIiwhMCksd2UoQWUsJHQsbHMsIuKKmiIsIlxcY2lyY2xlZGNpcmMiLCEwKSx3ZShBZSwkdCxscywi4oqhIiwiXFxib3hkb3QiLCEwKSx3ZShBZSxVZSxscywi4pazIiwiXFxiaWd0cmlhbmdsZXVwIiksd2UoQWUsVWUsbHMsIuKWvSIsIlxcYmlndHJpYW5nbGVkb3duIiksd2UoQWUsVWUsbHMsIuKAoCIsIlxcZGFnZ2VyIiksd2UoQWUsVWUsbHMsIuKLhCIsIlxcZGlhbW9uZCIpLHdlKEFlLFVlLGxzLCLii4YiLCJcXHN0YXIiKSx3ZShBZSxVZSxscywi4peDIiwiXFx0cmlhbmdsZWxlZnQiKSx3ZShBZSxVZSxscywi4pa5IiwiXFx0cmlhbmdsZXJpZ2h0Iiksd2UoQWUsVWUsaG0sInsiLCJcXHsiKSx3ZShzaSxVZSxtbiwieyIsIlxceyIpLHdlKHNpLFVlLG1uLCJ7IiwiXFx0ZXh0YnJhY2VsZWZ0Iiksd2UoQWUsVWUsRHAsIn0iLCJcXH0iKSx3ZShzaSxVZSxtbiwifSIsIlxcfSIpLHdlKHNpLFVlLG1uLCJ9IiwiXFx0ZXh0YnJhY2VyaWdodCIpLHdlKEFlLFVlLGhtLCJ7IiwiXFxsYnJhY2UiKSx3ZShBZSxVZSxEcCwifSIsIlxccmJyYWNlIiksd2UoQWUsVWUsaG0sIlsiLCJcXGxicmFjayIsITApLHdlKHNpLFVlLG1uLCJbIiwiXFxsYnJhY2siLCEwKSx3ZShBZSxVZSxEcCwiXSIsIlxccmJyYWNrIiwhMCksd2Uoc2ksVWUsbW4sIl0iLCJcXHJicmFjayIsITApLHdlKEFlLFVlLGhtLCIoIiwiXFxscGFyZW4iLCEwKSx3ZShBZSxVZSxEcCwiKSIsIlxccnBhcmVuIiwhMCksd2Uoc2ksVWUsbW4sIjwiLCJcXHRleHRsZXNzIiwhMCksd2Uoc2ksVWUsbW4sIj4iLCJcXHRleHRncmVhdGVyIiwhMCksd2UoQWUsVWUsaG0sIuKMiiIsIlxcbGZsb29yIiwhMCksd2UoQWUsVWUsRHAsIuKMiyIsIlxccmZsb29yIiwhMCksd2UoQWUsVWUsaG0sIuKMiCIsIlxcbGNlaWwiLCEwKSx3ZShBZSxVZSxEcCwi4oyJIiwiXFxyY2VpbCIsITApLHdlKEFlLFVlLG1uLCJcXCIsIlxcYmFja3NsYXNoIiksd2UoQWUsVWUsbW4sIuKIoyIsInwiKSx3ZShBZSxVZSxtbiwi4oijIiwiXFx2ZXJ0Iiksd2Uoc2ksVWUsbW4sInwiLCJcXHRleHRiYXIiLCEwKSx3ZShBZSxVZSxtbiwi4oilIiwiXFx8Iiksd2UoQWUsVWUsbW4sIuKIpSIsIlxcVmVydCIpLHdlKHNpLFVlLG1uLCLiiKUiLCJcXHRleHRiYXJkYmwiKSx3ZShzaSxVZSxtbiwifiIsIlxcdGV4dGFzY2lpdGlsZGUiKSx3ZShzaSxVZSxtbiwiXFwiLCJcXHRleHRiYWNrc2xhc2giKSx3ZShzaSxVZSxtbiwiXiIsIlxcdGV4dGFzY2lpY2lyY3VtIiksd2UoQWUsVWUsSHQsIuKGkSIsIlxcdXBhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLih5EiLCJcXFVwYXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4oaTIiwiXFxkb3duYXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4oeTIiwiXFxEb3duYXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4oaVIiwiXFx1cGRvd25hcnJvdyIsITApLHdlKEFlLFVlLEh0LCLih5UiLCJcXFVwZG93bmFycm93IiwhMCksd2UoQWUsVWUsTjAsIuKIkCIsIlxcY29wcm9kIiksd2UoQWUsVWUsTjAsIuKLgSIsIlxcYmlndmVlIiksd2UoQWUsVWUsTjAsIuKLgCIsIlxcYmlnd2VkZ2UiKSx3ZShBZSxVZSxOMCwi4qiEIiwiXFxiaWd1cGx1cyIpLHdlKEFlLFVlLE4wLCLii4IiLCJcXGJpZ2NhcCIpLHdlKEFlLFVlLE4wLCLii4MiLCJcXGJpZ2N1cCIpLHdlKEFlLFVlLE4wLCLiiKsiLCJcXGludCIpLHdlKEFlLFVlLE4wLCLiiKsiLCJcXGludG9wIiksd2UoQWUsVWUsTjAsIuKIrCIsIlxcaWludCIpLHdlKEFlLFVlLE4wLCLiiK0iLCJcXGlpaW50Iiksd2UoQWUsVWUsTjAsIuKIjyIsIlxccHJvZCIpLHdlKEFlLFVlLE4wLCLiiJEiLCJcXHN1bSIpLHdlKEFlLFVlLE4wLCLiqIIiLCJcXGJpZ290aW1lcyIpLHdlKEFlLFVlLE4wLCLiqIEiLCJcXGJpZ29wbHVzIiksd2UoQWUsVWUsTjAsIuKogCIsIlxcYmlnb2RvdCIpLHdlKEFlLFVlLE4wLCLiiK4iLCJcXG9pbnQiKSx3ZShBZSxVZSxOMCwi4oivIiwiXFxvaWludCIpLHdlKEFlLFVlLE4wLCLiiLAiLCJcXG9paWludCIpLHdlKEFlLFVlLE4wLCLiqIYiLCJcXGJpZ3NxY3VwIiksd2UoQWUsVWUsTjAsIuKIqyIsIlxcc21hbGxpbnQiKSx3ZShzaSxVZSxORCwi4oCmIiwiXFx0ZXh0ZWxsaXBzaXMiKSx3ZShBZSxVZSxORCwi4oCmIiwiXFxtYXRoZWxsaXBzaXMiKSx3ZShzaSxVZSxORCwi4oCmIiwiXFxsZG90cyIsITApLHdlKEFlLFVlLE5ELCLigKYiLCJcXGxkb3RzIiwhMCksd2UoQWUsVWUsTkQsIuKLryIsIlxcQGNkb3RzIiwhMCksd2UoQWUsVWUsTkQsIuKLsSIsIlxcZGRvdHMiLCEwKSx3ZShBZSxVZSxtbiwi4ouuIiwiXFx2YXJ2ZG90cyIpLHdlKEFlLFVlLHdoLCLLiiIsIlxcYWN1dGUiKSx3ZShBZSxVZSx3aCwiy4siLCJcXGdyYXZlIiksd2UoQWUsVWUsd2gsIsKoIiwiXFxkZG90Iiksd2UoQWUsVWUsd2gsIn4iLCJcXHRpbGRlIiksd2UoQWUsVWUsd2gsIsuJIiwiXFxiYXIiKSx3ZShBZSxVZSx3aCwiy5giLCJcXGJyZXZlIiksd2UoQWUsVWUsd2gsIsuHIiwiXFxjaGVjayIpLHdlKEFlLFVlLHdoLCJeIiwiXFxoYXQiKSx3ZShBZSxVZSx3aCwi4oOXIiwiXFx2ZWMiKSx3ZShBZSxVZSx3aCwiy5kiLCJcXGRvdCIpLHdlKEFlLFVlLHdoLCLLmiIsIlxcbWF0aHJpbmciKSx3ZShBZSxVZSxDYSwi7oSxIiwiXFxAaW1hdGgiKSx3ZShBZSxVZSxDYSwi7oi3IiwiXFxAam1hdGgiKSx3ZShBZSxVZSxtbiwixLEiLCLEsSIpLHdlKEFlLFVlLG1uLCLItyIsIsi3Iiksd2Uoc2ksVWUsbW4sIsSxIiwiXFxpIiwhMCksd2Uoc2ksVWUsbW4sIsi3IiwiXFxqIiwhMCksd2Uoc2ksVWUsbW4sIsOfIiwiXFxzcyIsITApLHdlKHNpLFVlLG1uLCLDpiIsIlxcYWUiLCEwKSx3ZShzaSxVZSxtbiwixZMiLCJcXG9lIiwhMCksd2Uoc2ksVWUsbW4sIsO4IiwiXFxvIiwhMCksd2Uoc2ksVWUsbW4sIsOGIiwiXFxBRSIsITApLHdlKHNpLFVlLG1uLCLFkiIsIlxcT0UiLCEwKSx3ZShzaSxVZSxtbiwiw5giLCJcXE8iLCEwKSx3ZShzaSxVZSx3aCwiy4oiLCJcXCciKSx3ZShzaSxVZSx3aCwiy4siLCJcXGAiKSx3ZShzaSxVZSx3aCwiy4YiLCJcXF4iKSx3ZShzaSxVZSx3aCwiy5wiLCJcXH4iKSx3ZShzaSxVZSx3aCwiy4kiLCJcXD0iKSx3ZShzaSxVZSx3aCwiy5giLCJcXHUiKSx3ZShzaSxVZSx3aCwiy5kiLCJcXC4iKSx3ZShzaSxVZSx3aCwiwrgiLCJcXGMiKSx3ZShzaSxVZSx3aCwiy5oiLCJcXHIiKSx3ZShzaSxVZSx3aCwiy4ciLCJcXHYiKSx3ZShzaSxVZSx3aCwiwqgiLCdcXCInKSx3ZShzaSxVZSx3aCwiy50iLCJcXEgiKSx3ZShzaSxVZSx3aCwi4pevIiwiXFx0ZXh0Y2lyY2xlZCIpO3ZhciByemU9eyItLSI6ITAsIi0tLSI6ITAsImBgIjohMCwiJyciOiEwfTt3ZShzaSxVZSxtbiwi4oCTIiwiLS0iLCEwKSx3ZShzaSxVZSxtbiwi4oCTIiwiXFx0ZXh0ZW5kYXNoIiksd2Uoc2ksVWUsbW4sIuKAlCIsIi0tLSIsITApLHdlKHNpLFVlLG1uLCLigJQiLCJcXHRleHRlbWRhc2giKSx3ZShzaSxVZSxtbiwi4oCYIiwiYCIsITApLHdlKHNpLFVlLG1uLCLigJgiLCJcXHRleHRxdW90ZWxlZnQiKSx3ZShzaSxVZSxtbiwi4oCZIiwiJyIsITApLHdlKHNpLFVlLG1uLCLigJkiLCJcXHRleHRxdW90ZXJpZ2h0Iiksd2Uoc2ksVWUsbW4sIuKAnCIsImBgIiwhMCksd2Uoc2ksVWUsbW4sIuKAnCIsIlxcdGV4dHF1b3RlZGJsbGVmdCIpLHdlKHNpLFVlLG1uLCLigJ0iLCInJyIsITApLHdlKHNpLFVlLG1uLCLigJ0iLCJcXHRleHRxdW90ZWRibHJpZ2h0Iiksd2UoQWUsVWUsbW4sIsKwIiwiXFxkZWdyZWUiLCEwKSx3ZShzaSxVZSxtbiwiwrAiLCJcXGRlZ3JlZSIpLHdlKHNpLFVlLG1uLCLCsCIsIlxcdGV4dGRlZ3JlZSIsITApLHdlKEFlLFVlLG1uLCLCoyIsIlxccG91bmRzIiksd2UoQWUsVWUsbW4sIsKjIiwiXFxtYXRoc3RlcmxpbmciLCEwKSx3ZShzaSxVZSxtbiwiwqMiLCJcXHBvdW5kcyIpLHdlKHNpLFVlLG1uLCLCoyIsIlxcdGV4dHN0ZXJsaW5nIiwhMCksd2UoQWUsJHQsbW4sIuKcoCIsIlxcbWFsdGVzZSIpLHdlKHNpLCR0LG1uLCLinKAiLCJcXG1hbHRlc2UiKTtmb3IodmFyIGl6ZT0nMDEyMzQ1Njc4OS9ALiInLHJiZT0wO3JiZTxpemUubGVuZ3RoO3JiZSsrKXt2YXIgc3plPWl6ZS5jaGFyQXQocmJlKTt3ZShBZSxVZSxtbixzemUsc3plKX1mb3IodmFyIGF6ZT0nMDEyMzQ1Njc4OSFAKigpLT0rIjs6Py8uLCcsaWJlPTA7aWJlPGF6ZS5sZW5ndGg7aWJlKyspe3ZhciBvemU9YXplLmNoYXJBdChpYmUpO3dlKHNpLFVlLG1uLG96ZSxvemUpfWZvcih2YXIgY1E9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLHNiZT0wO3NiZTxjUS5sZW5ndGg7c2JlKyspe3ZhciB1UT1jUS5jaGFyQXQoc2JlKTt3ZShBZSxVZSxDYSx1USx1USksd2Uoc2ksVWUsbW4sdVEsdVEpfXdlKEFlLCR0LG1uLCJDIiwi4oSCIiksd2Uoc2ksJHQsbW4sIkMiLCLihIIiKSx3ZShBZSwkdCxtbiwiSCIsIuKEjSIpLHdlKHNpLCR0LG1uLCJIIiwi4oSNIiksd2UoQWUsJHQsbW4sIk4iLCLihJUiKSx3ZShzaSwkdCxtbiwiTiIsIuKElSIpLHdlKEFlLCR0LG1uLCJQIiwi4oSZIiksd2Uoc2ksJHQsbW4sIlAiLCLihJkiKSx3ZShBZSwkdCxtbiwiUSIsIuKEmiIpLHdlKHNpLCR0LG1uLCJRIiwi4oSaIiksd2UoQWUsJHQsbW4sIlIiLCLihJ0iKSx3ZShzaSwkdCxtbiwiUiIsIuKEnSIpLHdlKEFlLCR0LG1uLCJaIiwi4oSkIiksd2Uoc2ksJHQsbW4sIloiLCLihKQiKSx3ZShBZSxVZSxDYSwiaCIsIuKEjiIpLHdlKHNpLFVlLENhLCJoIiwi4oSOIik7Zm9yKHZhciBYYT0iIixJcD0wO0lwPGNRLmxlbmd0aDtJcCsrKXt2YXIgRWY9Y1EuY2hhckF0KElwKTtYYT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2MzIwK0lwKSx3ZShBZSxVZSxDYSxFZixYYSksd2Uoc2ksVWUsbW4sRWYsWGEpLFhhPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTYzNzIrSXApLHdlKEFlLFVlLENhLEVmLFhhKSx3ZShzaSxVZSxtbixFZixYYSksWGE9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjQyNCtJcCksd2UoQWUsVWUsQ2EsRWYsWGEpLHdlKHNpLFVlLG1uLEVmLFhhKSxYYT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2NTgwK0lwKSx3ZShBZSxVZSxDYSxFZixYYSksd2Uoc2ksVWUsbW4sRWYsWGEpLFhhPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY2ODQrSXApLHdlKEFlLFVlLENhLEVmLFhhKSx3ZShzaSxVZSxtbixFZixYYSksWGE9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjczNitJcCksd2UoQWUsVWUsQ2EsRWYsWGEpLHdlKHNpLFVlLG1uLEVmLFhhKSxYYT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2Nzg4K0lwKSx3ZShBZSxVZSxDYSxFZixYYSksd2Uoc2ksVWUsbW4sRWYsWGEpLFhhPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY4NDArSXApLHdlKEFlLFVlLENhLEVmLFhhKSx3ZShzaSxVZSxtbixFZixYYSksWGE9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1Njk0NCtJcCksd2UoQWUsVWUsQ2EsRWYsWGEpLHdlKHNpLFVlLG1uLEVmLFhhKSxJcDwyNiYmKFhhPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY2MzIrSXApLHdlKEFlLFVlLENhLEVmLFhhKSx3ZShzaSxVZSxtbixFZixYYSksWGE9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjQ3NitJcCksd2UoQWUsVWUsQ2EsRWYsWGEpLHdlKHNpLFVlLG1uLEVmLFhhKSl9WGE9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjY2OCksd2UoQWUsVWUsQ2EsImsiLFhhKSx3ZShzaSxVZSxtbiwiayIsWGEpO2Zvcih2YXIgakM9MDtqQzwxMDtqQysrKXt2YXIgUzk9akMudG9TdHJpbmcoKTtYYT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU3Mjk0K2pDKSx3ZShBZSxVZSxDYSxTOSxYYSksd2Uoc2ksVWUsbW4sUzksWGEpLFhhPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTczMTQrakMpLHdlKEFlLFVlLENhLFM5LFhhKSx3ZShzaSxVZSxtbixTOSxYYSksWGE9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NzMyNCtqQyksd2UoQWUsVWUsQ2EsUzksWGEpLHdlKHNpLFVlLG1uLFM5LFhhKSxYYT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU3MzM0K2pDKSx3ZShBZSxVZSxDYSxTOSxYYSksd2Uoc2ksVWUsbW4sUzksWGEpfWZvcih2YXIgYWJlPSLDkMOew74iLG9iZT0wO29iZTxhYmUubGVuZ3RoO29iZSsrKXt2YXIgbFE9YWJlLmNoYXJBdChvYmUpO3dlKEFlLFVlLENhLGxRLGxRKSx3ZShzaSxVZSxtbixsUSxsUSl9dmFyIGhRPVtbIm1hdGhiZiIsInRleHRiZiIsIk1haW4tQm9sZCJdLFsibWF0aGJmIiwidGV4dGJmIiwiTWFpbi1Cb2xkIl0sWyJtYXRobm9ybWFsIiwidGV4dGl0IiwiTWF0aC1JdGFsaWMiXSxbIm1hdGhub3JtYWwiLCJ0ZXh0aXQiLCJNYXRoLUl0YWxpYyJdLFsiYm9sZHN5bWJvbCIsImJvbGRzeW1ib2wiLCJNYWluLUJvbGRJdGFsaWMiXSxbImJvbGRzeW1ib2wiLCJib2xkc3ltYm9sIiwiTWFpbi1Cb2xkSXRhbGljIl0sWyJtYXRoc2NyIiwidGV4dHNjciIsIlNjcmlwdC1SZWd1bGFyIl0sWyIiLCIiLCIiXSxbIiIsIiIsIiJdLFsiIiwiIiwiIl0sWyJtYXRoZnJhayIsInRleHRmcmFrIiwiRnJha3R1ci1SZWd1bGFyIl0sWyJtYXRoZnJhayIsInRleHRmcmFrIiwiRnJha3R1ci1SZWd1bGFyIl0sWyJtYXRoYmIiLCJ0ZXh0YmIiLCJBTVMtUmVndWxhciJdLFsibWF0aGJiIiwidGV4dGJiIiwiQU1TLVJlZ3VsYXIiXSxbIm1hdGhib2xkZnJhayIsInRleHRib2xkZnJhayIsIkZyYWt0dXItUmVndWxhciJdLFsibWF0aGJvbGRmcmFrIiwidGV4dGJvbGRmcmFrIiwiRnJha3R1ci1SZWd1bGFyIl0sWyJtYXRoc2YiLCJ0ZXh0c2YiLCJTYW5zU2VyaWYtUmVndWxhciJdLFsibWF0aHNmIiwidGV4dHNmIiwiU2Fuc1NlcmlmLVJlZ3VsYXIiXSxbIm1hdGhib2xkc2YiLCJ0ZXh0Ym9sZHNmIiwiU2Fuc1NlcmlmLUJvbGQiXSxbIm1hdGhib2xkc2YiLCJ0ZXh0Ym9sZHNmIiwiU2Fuc1NlcmlmLUJvbGQiXSxbIm1hdGhpdHNmIiwidGV4dGl0c2YiLCJTYW5zU2VyaWYtSXRhbGljIl0sWyJtYXRoaXRzZiIsInRleHRpdHNmIiwiU2Fuc1NlcmlmLUl0YWxpYyJdLFsiIiwiIiwiIl0sWyIiLCIiLCIiXSxbIm1hdGh0dCIsInRleHR0dCIsIlR5cGV3cml0ZXItUmVndWxhciJdLFsibWF0aHR0IiwidGV4dHR0IiwiVHlwZXdyaXRlci1SZWd1bGFyIl1dLGN6ZT1bWyJtYXRoYmYiLCJ0ZXh0YmYiLCJNYWluLUJvbGQiXSxbIiIsIiIsIiJdLFsibWF0aHNmIiwidGV4dHNmIiwiU2Fuc1NlcmlmLVJlZ3VsYXIiXSxbIm1hdGhib2xkc2YiLCJ0ZXh0Ym9sZHNmIiwiU2Fuc1NlcmlmLUJvbGQiXSxbIm1hdGh0dCIsInRleHR0dCIsIlR5cGV3cml0ZXItUmVndWxhciJdXSxwSHQ9ZnVuY3Rpb24ocyx1KXt2YXIgZD1zLmNoYXJDb2RlQXQoMCkscD1zLmNoYXJDb2RlQXQoMSksdj0oZC01NTI5NikqMTAyNCsocC01NjMyMCkrNjU1MzYsYj11PT09Im1hdGgiPzA6MTtpZigxMTk4MDg8PXYmJnY8MTIwNDg0KXt2YXIgeT1NYXRoLmZsb29yKCh2LTExOTgwOCkvMjYpO3JldHVybltoUVt5XVsyXSxoUVt5XVtiXV19ZWxzZSBpZigxMjA3ODI8PXYmJnY8PTEyMDgzMSl7dmFyIFQ9TWF0aC5mbG9vcigodi0xMjA3ODIpLzEwKTtyZXR1cm5bY3plW1RdWzJdLGN6ZVtUXVtiXV19ZWxzZXtpZih2PT09MTIwNDg1fHx2PT09MTIwNDg2KXJldHVybltoUVswXVsyXSxoUVswXVtiXV07aWYoMTIwNDg2PHYmJnY8MTIwNzgyKXJldHVyblsiIiwiIl07dGhyb3cgbmV3IENpKCJVbnN1cHBvcnRlZCBjaGFyYWN0ZXI6ICIrcyl9fSxmUT1mdW5jdGlvbihzLHUsZCl7cmV0dXJuIFVsW2RdW3NdJiZVbFtkXVtzXS5yZXBsYWNlJiYocz1VbFtkXVtzXS5yZXBsYWNlKSx7dmFsdWU6cyxtZXRyaWNzOkoyZShzLHUsZCl9fSxGMz1mdW5jdGlvbihzLHUsZCxwLHYpe3ZhciBiPWZRKHMsdSxkKSx5PWIubWV0cmljcztzPWIudmFsdWU7dmFyIFQ7aWYoeSl7dmFyIF89eS5pdGFsaWM7KGQ9PT0idGV4dCJ8fHAmJnAuZm9udD09PSJtYXRoaXQiKSYmKF89MCksVD1uZXcgQnYocyx5LmhlaWdodCx5LmRlcHRoLF8seS5za2V3LHkud2lkdGgsdil9ZWxzZSB0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiTm8gY2hhcmFjdGVyIG1ldHJpY3MgIisoImZvciAnIitzKyInIGluIHN0eWxlICciK3UrIicgYW5kIG1vZGUgJyIrZCsiJyIpKSxUPW5ldyBCdihzLDAsMCwwLDAsMCx2KTtpZihwKXtULm1heEZvbnRTaXplPXAuc2l6ZU11bHRpcGxpZXIscC5zdHlsZS5pc1RpZ2h0KCkmJlQuY2xhc3Nlcy5wdXNoKCJtdGlnaHQiKTt2YXIgQT1wLmdldENvbG9yKCk7QSYmKFQuc3R5bGUuY29sb3I9QSl9cmV0dXJuIFR9LGJIdD1mdW5jdGlvbihzLHUsZCxwKXtyZXR1cm4gcD09PXZvaWQgMCYmKHA9W10pLGQuZm9udD09PSJib2xkc3ltYm9sIiYmZlEocywiTWFpbi1Cb2xkIix1KS5tZXRyaWNzP0YzKHMsIk1haW4tQm9sZCIsdSxkLHAuY29uY2F0KFsibWF0aGJmIl0pKTpzPT09IlxcInx8VWxbdV1bc10uZm9udD09PSJtYWluIj9GMyhzLCJNYWluLVJlZ3VsYXIiLHUsZCxwKTpGMyhzLCJBTVMtUmVndWxhciIsdSxkLHAuY29uY2F0KFsiYW1zcm0iXSkpfSxtSHQ9ZnVuY3Rpb24ocyx1LGQscCx2KXtyZXR1cm4gdiE9PSJ0ZXh0b3JkIiYmZlEocywiTWF0aC1Cb2xkSXRhbGljIix1KS5tZXRyaWNzP3tmb250TmFtZToiTWF0aC1Cb2xkSXRhbGljIixmb250Q2xhc3M6ImJvbGRzeW1ib2wifTp7Zm9udE5hbWU6Ik1haW4tQm9sZCIsZm9udENsYXNzOiJtYXRoYmYifX0sdkh0PWZ1bmN0aW9uKHMsdSxkKXt2YXIgcD1zLm1vZGUsdj1zLnRleHQsYj1bIm1vcmQiXSx5PXA9PT0ibWF0aCJ8fHA9PT0idGV4dCImJnUuZm9udCxUPXk/dS5mb250OnUuZm9udEZhbWlseSxfPSIiLEE9IiI7aWYodi5jaGFyQ29kZUF0KDApPT09NTUzNDkmJihbXyxBXT1wSHQodixwKSksXy5sZW5ndGg+MClyZXR1cm4gRjModixfLHAsdSxiLmNvbmNhdChBKSk7aWYoVCl7dmFyIFAsUjtpZihUPT09ImJvbGRzeW1ib2wiKXt2YXIgRj1tSHQodixwLHUsYixkKTtQPUYuZm9udE5hbWUsUj1bRi5mb250Q2xhc3NdfWVsc2UgeT8oUD1oemVbVF0uZm9udE5hbWUsUj1bVF0pOihQPWRRKFQsdS5mb250V2VpZ2h0LHUuZm9udFNoYXBlKSxSPVtULHUuZm9udFdlaWdodCx1LmZvbnRTaGFwZV0pO2lmKGZRKHYsUCxwKS5tZXRyaWNzKXJldHVybiBGMyh2LFAscCx1LGIuY29uY2F0KFIpKTtpZihyemUuaGFzT3duUHJvcGVydHkodikmJlAuc2xpY2UoMCwxMCk9PT0iVHlwZXdyaXRlciIpe2Zvcih2YXIgaj1bXSxLPTA7Szx2Lmxlbmd0aDtLKyspai5wdXNoKEYzKHZbS10sUCxwLHUsYi5jb25jYXQoUikpKTtyZXR1cm4gbHplKGopfX1pZihkPT09Im1hdGhvcmQiKXJldHVybiBGMyh2LCJNYXRoLUl0YWxpYyIscCx1LGIuY29uY2F0KFsibWF0aG5vcm1hbCJdKSk7aWYoZD09PSJ0ZXh0b3JkIil7dmFyIGVlPVVsW3BdW3ZdJiZVbFtwXVt2XS5mb250O2lmKGVlPT09ImFtcyIpe3ZhciBpZT1kUSgiYW1zcm0iLHUuZm9udFdlaWdodCx1LmZvbnRTaGFwZSk7cmV0dXJuIEYzKHYsaWUscCx1LGIuY29uY2F0KCJhbXNybSIsdS5mb250V2VpZ2h0LHUuZm9udFNoYXBlKSl9ZWxzZSBpZihlZT09PSJtYWluInx8IWVlKXt2YXIgb2U9ZFEoInRleHRybSIsdS5mb250V2VpZ2h0LHUuZm9udFNoYXBlKTtyZXR1cm4gRjModixvZSxwLHUsYi5jb25jYXQodS5mb250V2VpZ2h0LHUuZm9udFNoYXBlKSl9ZWxzZXt2YXIgcGU9ZFEoZWUsdS5mb250V2VpZ2h0LHUuZm9udFNoYXBlKTtyZXR1cm4gRjModixwZSxwLHUsYi5jb25jYXQocGUsdS5mb250V2VpZ2h0LHUuZm9udFNoYXBlKSl9fWVsc2UgdGhyb3cgbmV3IEVycm9yKCJ1bmV4cGVjdGVkIHR5cGU6ICIrZCsiIGluIG1ha2VPcmQiKX0sd0h0PShpLHMpPT57aWYoVDkoaS5jbGFzc2VzKSE9PVQ5KHMuY2xhc3Nlcyl8fGkuc2tldyE9PXMuc2tld3x8aS5tYXhGb250U2l6ZSE9PXMubWF4Rm9udFNpemUpcmV0dXJuITE7aWYoaS5jbGFzc2VzLmxlbmd0aD09PTEpe3ZhciB1PWkuY2xhc3Nlc1swXTtpZih1PT09Im1iaW4ifHx1PT09Im1vcmQiKXJldHVybiExfWZvcih2YXIgZCBpbiBpLnN0eWxlKWlmKGkuc3R5bGUuaGFzT3duUHJvcGVydHkoZCkmJmkuc3R5bGVbZF0hPT1zLnN0eWxlW2RdKXJldHVybiExO2Zvcih2YXIgcCBpbiBzLnN0eWxlKWlmKHMuc3R5bGUuaGFzT3duUHJvcGVydHkocCkmJmkuc3R5bGVbcF0hPT1zLnN0eWxlW3BdKXJldHVybiExO3JldHVybiEwfSx5SHQ9aT0+e2Zvcih2YXIgcz0wO3M8aS5sZW5ndGgtMTtzKyspe3ZhciB1PWlbc10sZD1pW3MrMV07dSBpbnN0YW5jZW9mIEJ2JiZkIGluc3RhbmNlb2YgQnYmJndIdCh1LGQpJiYodS50ZXh0Kz1kLnRleHQsdS5oZWlnaHQ9TWF0aC5tYXgodS5oZWlnaHQsZC5oZWlnaHQpLHUuZGVwdGg9TWF0aC5tYXgodS5kZXB0aCxkLmRlcHRoKSx1Lml0YWxpYz1kLml0YWxpYyxpLnNwbGljZShzKzEsMSkscy0tKX1yZXR1cm4gaX0sY2JlPWZ1bmN0aW9uKHMpe2Zvcih2YXIgdT0wLGQ9MCxwPTAsdj0wO3Y8cy5jaGlsZHJlbi5sZW5ndGg7disrKXt2YXIgYj1zLmNoaWxkcmVuW3ZdO2IuaGVpZ2h0PnUmJih1PWIuaGVpZ2h0KSxiLmRlcHRoPmQmJihkPWIuZGVwdGgpLGIubWF4Rm9udFNpemU+cCYmKHA9Yi5tYXhGb250U2l6ZSl9cy5oZWlnaHQ9dSxzLmRlcHRoPWQscy5tYXhGb250U2l6ZT1wfSxSMj1mdW5jdGlvbihzLHUsZCxwKXt2YXIgdj1uZXcgY1Iocyx1LGQscCk7cmV0dXJuIGNiZSh2KSx2fSx1emU9KGkscyx1LGQpPT5uZXcgY1IoaSxzLHUsZCkseEh0PWZ1bmN0aW9uKHMsdSxkKXt2YXIgcD1SMihbc10sW10sdSk7cmV0dXJuIHAuaGVpZ2h0PU1hdGgubWF4KGR8fHUuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyx1Lm1pblJ1bGVUaGlja25lc3MpLHAuc3R5bGUuYm9yZGVyQm90dG9tV2lkdGg9UmkocC5oZWlnaHQpLHAubWF4Rm9udFNpemU9MSxwfSxrSHQ9ZnVuY3Rpb24ocyx1LGQscCl7dmFyIHY9bmV3IHRiZShzLHUsZCxwKTtyZXR1cm4gY2JlKHYpLHZ9LGx6ZT1mdW5jdGlvbihzKXt2YXIgdT1uZXcgb1Iocyk7cmV0dXJuIGNiZSh1KSx1fSxFSHQ9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gcyBpbnN0YW5jZW9mIG9SP1IyKFtdLFtzXSx1KTpzfSxUSHQ9ZnVuY3Rpb24ocyl7aWYocy5wb3NpdGlvblR5cGU9PT0iaW5kaXZpZHVhbFNoaWZ0Iil7Zm9yKHZhciB1PXMuY2hpbGRyZW4sZD1bdVswXV0scD0tdVswXS5zaGlmdC11WzBdLmVsZW0uZGVwdGgsdj1wLGI9MTtiPHUubGVuZ3RoO2IrKyl7dmFyIHk9LXVbYl0uc2hpZnQtdi11W2JdLmVsZW0uZGVwdGgsVD15LSh1W2ItMV0uZWxlbS5oZWlnaHQrdVtiLTFdLmVsZW0uZGVwdGgpO3Y9dit5LGQucHVzaCh7dHlwZToia2VybiIsc2l6ZTpUfSksZC5wdXNoKHVbYl0pfXJldHVybntjaGlsZHJlbjpkLGRlcHRoOnB9fXZhciBfO2lmKHMucG9zaXRpb25UeXBlPT09InRvcCIpe2Zvcih2YXIgQT1zLnBvc2l0aW9uRGF0YSxQPTA7UDxzLmNoaWxkcmVuLmxlbmd0aDtQKyspe3ZhciBSPXMuY2hpbGRyZW5bUF07QS09Ui50eXBlPT09Imtlcm4iP1Iuc2l6ZTpSLmVsZW0uaGVpZ2h0K1IuZWxlbS5kZXB0aH1fPUF9ZWxzZSBpZihzLnBvc2l0aW9uVHlwZT09PSJib3R0b20iKV89LXMucG9zaXRpb25EYXRhO2Vsc2V7dmFyIEY9cy5jaGlsZHJlblswXTtpZihGLnR5cGUhPT0iZWxlbSIpdGhyb3cgbmV3IEVycm9yKCdGaXJzdCBjaGlsZCBtdXN0IGhhdmUgdHlwZSAiZWxlbSIuJyk7aWYocy5wb3NpdGlvblR5cGU9PT0ic2hpZnQiKV89LUYuZWxlbS5kZXB0aC1zLnBvc2l0aW9uRGF0YTtlbHNlIGlmKHMucG9zaXRpb25UeXBlPT09ImZpcnN0QmFzZWxpbmUiKV89LUYuZWxlbS5kZXB0aDtlbHNlIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBwb3NpdGlvblR5cGUgIitzLnBvc2l0aW9uVHlwZSsiLiIpfXJldHVybntjaGlsZHJlbjpzLmNoaWxkcmVuLGRlcHRoOl99fSxDSHQ9ZnVuY3Rpb24ocyx1KXtmb3IodmFye2NoaWxkcmVuOmQsZGVwdGg6cH09VEh0KHMpLHY9MCxiPTA7YjxkLmxlbmd0aDtiKyspe3ZhciB5PWRbYl07aWYoeS50eXBlPT09ImVsZW0iKXt2YXIgVD15LmVsZW07dj1NYXRoLm1heCh2LFQubWF4Rm9udFNpemUsVC5oZWlnaHQpfX12Kz0yO3ZhciBfPVIyKFsicHN0cnV0Il0sW10pO18uc3R5bGUuaGVpZ2h0PVJpKHYpO2Zvcih2YXIgQT1bXSxQPXAsUj1wLEY9cCxqPTA7ajxkLmxlbmd0aDtqKyspe3ZhciBLPWRbal07aWYoSy50eXBlPT09Imtlcm4iKUYrPUsuc2l6ZTtlbHNle3ZhciBlZT1LLmVsZW0saWU9Sy53cmFwcGVyQ2xhc3Nlc3x8W10sb2U9Sy53cmFwcGVyU3R5bGV8fHt9LHBlPVIyKGllLFtfLGVlXSx2b2lkIDAsb2UpO3BlLnN0eWxlLnRvcD1SaSgtdi1GLWVlLmRlcHRoKSxLLm1hcmdpbkxlZnQmJihwZS5zdHlsZS5tYXJnaW5MZWZ0PUsubWFyZ2luTGVmdCksSy5tYXJnaW5SaWdodCYmKHBlLnN0eWxlLm1hcmdpblJpZ2h0PUsubWFyZ2luUmlnaHQpLEEucHVzaChwZSksRis9ZWUuaGVpZ2h0K2VlLmRlcHRofVA9TWF0aC5taW4oUCxGKSxSPU1hdGgubWF4KFIsRil9dmFyIGJlPVIyKFsidmxpc3QiXSxBKTtiZS5zdHlsZS5oZWlnaHQ9UmkoUik7dmFyIGFlO2lmKFA8MCl7dmFyIG5lPVIyKFtdLFtdKSxzZT1SMihbInZsaXN0Il0sW25lXSk7c2Uuc3R5bGUuaGVpZ2h0PVJpKC1QKTt2YXIgZGU9UjIoWyJ2bGlzdC1zIl0sW25ldyBCdigi4oCLIildKTthZT1bUjIoWyJ2bGlzdC1yIl0sW2JlLGRlXSksUjIoWyJ2bGlzdC1yIl0sW3NlXSldfWVsc2UgYWU9W1IyKFsidmxpc3QtciJdLFtiZV0pXTt2YXIgWD1SMihbInZsaXN0LXQiXSxhZSk7cmV0dXJuIGFlLmxlbmd0aD09PTImJlguY2xhc3Nlcy5wdXNoKCJ2bGlzdC10MiIpLFguaGVpZ2h0PVIsWC5kZXB0aD0tUCxYfSxTSHQ9KGkscyk9Pnt2YXIgdT1SMihbIm1zcGFjZSJdLFtdLHMpLGQ9VWgoaSxzKTtyZXR1cm4gdS5zdHlsZS5tYXJnaW5SaWdodD1SaShkKSx1fSxkUT1mdW5jdGlvbihzLHUsZCl7dmFyIHA9IiI7c3dpdGNoKHMpe2Nhc2UiYW1zcm0iOnA9IkFNUyI7YnJlYWs7Y2FzZSJ0ZXh0cm0iOnA9Ik1haW4iO2JyZWFrO2Nhc2UidGV4dHNmIjpwPSJTYW5zU2VyaWYiO2JyZWFrO2Nhc2UidGV4dHR0IjpwPSJUeXBld3JpdGVyIjticmVhaztkZWZhdWx0OnA9c312YXIgdjtyZXR1cm4gdT09PSJ0ZXh0YmYiJiZkPT09InRleHRpdCI/dj0iQm9sZEl0YWxpYyI6dT09PSJ0ZXh0YmYiP3Y9IkJvbGQiOnU9PT0idGV4dGl0Ij92PSJJdGFsaWMiOnY9IlJlZ3VsYXIiLHArIi0iK3Z9LGh6ZT17bWF0aGJmOnt2YXJpYW50OiJib2xkIixmb250TmFtZToiTWFpbi1Cb2xkIn0sbWF0aHJtOnt2YXJpYW50OiJub3JtYWwiLGZvbnROYW1lOiJNYWluLVJlZ3VsYXIifSx0ZXh0aXQ6e3ZhcmlhbnQ6Iml0YWxpYyIsZm9udE5hbWU6Ik1haW4tSXRhbGljIn0sbWF0aGl0Ont2YXJpYW50OiJpdGFsaWMiLGZvbnROYW1lOiJNYWluLUl0YWxpYyJ9LG1hdGhub3JtYWw6e3ZhcmlhbnQ6Iml0YWxpYyIsZm9udE5hbWU6Ik1hdGgtSXRhbGljIn0sbWF0aGJiOnt2YXJpYW50OiJkb3VibGUtc3RydWNrIixmb250TmFtZToiQU1TLVJlZ3VsYXIifSxtYXRoY2FsOnt2YXJpYW50OiJzY3JpcHQiLGZvbnROYW1lOiJDYWxpZ3JhcGhpYy1SZWd1bGFyIn0sbWF0aGZyYWs6e3ZhcmlhbnQ6ImZyYWt0dXIiLGZvbnROYW1lOiJGcmFrdHVyLVJlZ3VsYXIifSxtYXRoc2NyOnt2YXJpYW50OiJzY3JpcHQiLGZvbnROYW1lOiJTY3JpcHQtUmVndWxhciJ9LG1hdGhzZjp7dmFyaWFudDoic2Fucy1zZXJpZiIsZm9udE5hbWU6IlNhbnNTZXJpZi1SZWd1bGFyIn0sbWF0aHR0Ont2YXJpYW50OiJtb25vc3BhY2UiLGZvbnROYW1lOiJUeXBld3JpdGVyLVJlZ3VsYXIifX0sZnplPXt2ZWM6WyJ2ZWMiLC40NzEsLjcxNF0sb2lpbnRTaXplMTpbIm9paW50U2l6ZTEiLC45NTcsLjQ5OV0sb2lpbnRTaXplMjpbIm9paW50U2l6ZTIiLDEuNDcyLC42NTldLG9paWludFNpemUxOlsib2lpaW50U2l6ZTEiLDEuMzA0LC40OTldLG9paWludFNpemUyOlsib2lpaW50U2l6ZTIiLDEuOTgsLjY1OV19LF9IdD1mdW5jdGlvbihzLHUpe3ZhcltkLHAsdl09ZnplW3NdLGI9bmV3IEM5KGQpLHk9bmV3IEQ3KFtiXSx7d2lkdGg6UmkocCksaGVpZ2h0OlJpKHYpLHN0eWxlOiJ3aWR0aDoiK1JpKHApLHZpZXdCb3g6IjAgMCAiKzFlMypwKyIgIisxZTMqdixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWluWU1pbiJ9KSxUPXV6ZShbIm92ZXJsYXkiXSxbeV0sdSk7cmV0dXJuIFQuaGVpZ2h0PXYsVC5zdHlsZS5oZWlnaHQ9UmkodiksVC5zdHlsZS53aWR0aD1SaShwKSxUfSx6bj17Zm9udE1hcDpoemUsbWFrZVN5bWJvbDpGMyxtYXRoc3ltOmJIdCxtYWtlU3BhbjpSMixtYWtlU3ZnU3Bhbjp1emUsbWFrZUxpbmVTcGFuOnhIdCxtYWtlQW5jaG9yOmtIdCxtYWtlRnJhZ21lbnQ6bHplLHdyYXBGcmFnbWVudDpFSHQsbWFrZVZMaXN0OkNIdCxtYWtlT3JkOnZIdCxtYWtlR2x1ZTpTSHQsc3RhdGljU3ZnOl9IdCxzdmdEYXRhOmZ6ZSx0cnlDb21iaW5lQ2hhcnM6eUh0fSxHaD17bnVtYmVyOjMsdW5pdDoibXUifSwkQz17bnVtYmVyOjQsdW5pdDoibXUifSxPNz17bnVtYmVyOjUsdW5pdDoibXUifSxBSHQ9e21vcmQ6e21vcDpHaCxtYmluOiRDLG1yZWw6TzcsbWlubmVyOkdofSxtb3A6e21vcmQ6R2gsbW9wOkdoLG1yZWw6TzcsbWlubmVyOkdofSxtYmluOnttb3JkOiRDLG1vcDokQyxtb3BlbjokQyxtaW5uZXI6JEN9LG1yZWw6e21vcmQ6TzcsbW9wOk83LG1vcGVuOk83LG1pbm5lcjpPN30sbW9wZW46e30sbWNsb3NlOnttb3A6R2gsbWJpbjokQyxtcmVsOk83LG1pbm5lcjpHaH0sbXB1bmN0Onttb3JkOkdoLG1vcDpHaCxtcmVsOk83LG1vcGVuOkdoLG1jbG9zZTpHaCxtcHVuY3Q6R2gsbWlubmVyOkdofSxtaW5uZXI6e21vcmQ6R2gsbW9wOkdoLG1iaW46JEMsbXJlbDpPNyxtb3BlbjpHaCxtcHVuY3Q6R2gsbWlubmVyOkdofX0sTEh0PXttb3JkOnttb3A6R2h9LG1vcDp7bW9yZDpHaCxtb3A6R2h9LG1iaW46e30sbXJlbDp7fSxtb3Blbjp7fSxtY2xvc2U6e21vcDpHaH0sbXB1bmN0Ont9LG1pbm5lcjp7bW9wOkdofX0sZHplPXt9LGdRPXt9LHBRPXt9O2Z1bmN0aW9uIEppKGkpe2Zvcih2YXJ7dHlwZTpzLG5hbWVzOnUscHJvcHM6ZCxoYW5kbGVyOnAsaHRtbEJ1aWxkZXI6dixtYXRobWxCdWlsZGVyOmJ9PWkseT17dHlwZTpzLG51bUFyZ3M6ZC5udW1BcmdzLGFyZ1R5cGVzOmQuYXJnVHlwZXMsYWxsb3dlZEluQXJndW1lbnQ6ISFkLmFsbG93ZWRJbkFyZ3VtZW50LGFsbG93ZWRJblRleHQ6ISFkLmFsbG93ZWRJblRleHQsYWxsb3dlZEluTWF0aDpkLmFsbG93ZWRJbk1hdGg9PT12b2lkIDA/ITA6ZC5hbGxvd2VkSW5NYXRoLG51bU9wdGlvbmFsQXJnczpkLm51bU9wdGlvbmFsQXJnc3x8MCxpbmZpeDohIWQuaW5maXgscHJpbWl0aXZlOiEhZC5wcmltaXRpdmUsaGFuZGxlcjpwfSxUPTA7VDx1Lmxlbmd0aDsrK1QpZHplW3VbVF1dPXk7cyYmKHYmJihnUVtzXT12KSxiJiYocFFbc109YikpfWZ1bmN0aW9uIHpDKGkpe3Zhcnt0eXBlOnMsaHRtbEJ1aWxkZXI6dSxtYXRobWxCdWlsZGVyOmR9PWk7Smkoe3R5cGU6cyxuYW1lczpbXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKCl7dGhyb3cgbmV3IEVycm9yKCJTaG91bGQgbmV2ZXIgYmUgY2FsbGVkLiIpfSxodG1sQnVpbGRlcjp1LG1hdGhtbEJ1aWxkZXI6ZH0pfXZhciBiUT1mdW5jdGlvbihzKXtyZXR1cm4gcy50eXBlPT09Im9yZGdyb3VwIiYmcy5ib2R5Lmxlbmd0aD09PTE/cy5ib2R5WzBdOnN9LFhmPWZ1bmN0aW9uKHMpe3JldHVybiBzLnR5cGU9PT0ib3JkZ3JvdXAiP3MuYm9keTpbc119LE43PXpuLm1ha2VTcGFuLE1IdD1bImxlZnRtb3N0IiwibWJpbiIsIm1vcGVuIiwibXJlbCIsIm1vcCIsIm1wdW5jdCJdLERIdD1bInJpZ2h0bW9zdCIsIm1yZWwiLCJtY2xvc2UiLCJtcHVuY3QiXSxJSHQ9e2Rpc3BsYXk6VGEuRElTUExBWSx0ZXh0OlRhLlRFWFQsc2NyaXB0OlRhLlNDUklQVCxzY3JpcHRzY3JpcHQ6VGEuU0NSSVBUU0NSSVBUfSxPSHQ9e21vcmQ6Im1vcmQiLG1vcDoibW9wIixtYmluOiJtYmluIixtcmVsOiJtcmVsIixtb3BlbjoibW9wZW4iLG1jbG9zZToibWNsb3NlIixtcHVuY3Q6Im1wdW5jdCIsbWlubmVyOiJtaW5uZXIifSxkMT1mdW5jdGlvbihzLHUsZCxwKXtwPT09dm9pZCAwJiYocD1bbnVsbCxudWxsXSk7Zm9yKHZhciB2PVtdLGI9MDtiPHMubGVuZ3RoO2IrKyl7dmFyIHk9dXUoc1tiXSx1KTtpZih5IGluc3RhbmNlb2Ygb1Ipe3ZhciBUPXkuY2hpbGRyZW47di5wdXNoKC4uLlQpfWVsc2Ugdi5wdXNoKHkpfWlmKHpuLnRyeUNvbWJpbmVDaGFycyh2KSwhZClyZXR1cm4gdjt2YXIgXz11O2lmKHMubGVuZ3RoPT09MSl7dmFyIEE9c1swXTtBLnR5cGU9PT0ic2l6aW5nIj9fPXUuaGF2aW5nU2l6ZShBLnNpemUpOkEudHlwZT09PSJzdHlsaW5nIiYmKF89dS5oYXZpbmdTdHlsZShJSHRbQS5zdHlsZV0pKX12YXIgUD1ONyhbcFswXXx8ImxlZnRtb3N0Il0sW10sdSksUj1ONyhbcFsxXXx8InJpZ2h0bW9zdCJdLFtdLHUpLEY9ZD09PSJyb290IjtyZXR1cm4gZ3plKHYsKGosSyk9Pnt2YXIgZWU9Sy5jbGFzc2VzWzBdLGllPWouY2xhc3Nlc1swXTtlZT09PSJtYmluIiYmWWEuY29udGFpbnMoREh0LGllKT9LLmNsYXNzZXNbMF09Im1vcmQiOmllPT09Im1iaW4iJiZZYS5jb250YWlucyhNSHQsZWUpJiYoai5jbGFzc2VzWzBdPSJtb3JkIil9LHtub2RlOlB9LFIsRiksZ3plKHYsKGosSyk9Pnt2YXIgZWU9dWJlKEspLGllPXViZShqKSxvZT1lZSYmaWU/ai5oYXNDbGFzcygibXRpZ2h0Iik/TEh0W2VlXVtpZV06QUh0W2VlXVtpZV06bnVsbDtpZihvZSlyZXR1cm4gem4ubWFrZUdsdWUob2UsXyl9LHtub2RlOlB9LFIsRiksdn0sZ3plPWZ1bmN0aW9uIGkocyx1LGQscCx2KXtwJiZzLnB1c2gocCk7Zm9yKHZhciBiPTA7YjxzLmxlbmd0aDtiKyspe3ZhciB5PXNbYl0sVD1wemUoeSk7aWYoVCl7aShULmNoaWxkcmVuLHUsZCxudWxsLHYpO2NvbnRpbnVlfXZhciBfPSF5Lmhhc0NsYXNzKCJtc3BhY2UiKTtpZihfKXt2YXIgQT11KHksZC5ub2RlKTtBJiYoZC5pbnNlcnRBZnRlcj9kLmluc2VydEFmdGVyKEEpOihzLnVuc2hpZnQoQSksYisrKSl9Xz9kLm5vZGU9eTp2JiZ5Lmhhc0NsYXNzKCJuZXdsaW5lIikmJihkLm5vZGU9TjcoWyJsZWZ0bW9zdCJdKSksZC5pbnNlcnRBZnRlcj0oUD0+Uj0+e3Muc3BsaWNlKFArMSwwLFIpLGIrK30pKGIpfXAmJnMucG9wKCl9LHB6ZT1mdW5jdGlvbihzKXtyZXR1cm4gcyBpbnN0YW5jZW9mIG9SfHxzIGluc3RhbmNlb2YgdGJlfHxzIGluc3RhbmNlb2YgY1ImJnMuaGFzQ2xhc3MoImVuY2xvc2luZyIpP3M6bnVsbH0sTkh0PWZ1bmN0aW9uIGkocyx1KXt2YXIgZD1wemUocyk7aWYoZCl7dmFyIHA9ZC5jaGlsZHJlbjtpZihwLmxlbmd0aCl7aWYodT09PSJyaWdodCIpcmV0dXJuIGkocFtwLmxlbmd0aC0xXSwicmlnaHQiKTtpZih1PT09ImxlZnQiKXJldHVybiBpKHBbMF0sImxlZnQiKX19cmV0dXJuIHN9LHViZT1mdW5jdGlvbihzLHUpe3JldHVybiBzPyh1JiYocz1OSHQocyx1KSksT0h0W3MuY2xhc3Nlc1swXV18fG51bGwpOm51bGx9LHVSPWZ1bmN0aW9uKHMsdSl7dmFyIGQ9WyJudWxsZGVsaW1pdGVyIl0uY29uY2F0KHMuYmFzZVNpemluZ0NsYXNzZXMoKSk7cmV0dXJuIE43KHUuY29uY2F0KGQpKX0sdXU9ZnVuY3Rpb24ocyx1LGQpe2lmKCFzKXJldHVybiBONygpO2lmKGdRW3MudHlwZV0pe3ZhciBwPWdRW3MudHlwZV0ocyx1KTtpZihkJiZ1LnNpemUhPT1kLnNpemUpe3A9TjcodS5zaXppbmdDbGFzc2VzKGQpLFtwXSx1KTt2YXIgdj11LnNpemVNdWx0aXBsaWVyL2Quc2l6ZU11bHRpcGxpZXI7cC5oZWlnaHQqPXYscC5kZXB0aCo9dn1yZXR1cm4gcH1lbHNlIHRocm93IG5ldyBDaSgiR290IGdyb3VwIG9mIHVua25vd24gdHlwZTogJyIrcy50eXBlKyInIil9O2Z1bmN0aW9uIG1RKGkscyl7dmFyIHU9TjcoWyJiYXNlIl0saSxzKSxkPU43KFsic3RydXQiXSk7cmV0dXJuIGQuc3R5bGUuaGVpZ2h0PVJpKHUuaGVpZ2h0K3UuZGVwdGgpLHUuZGVwdGgmJihkLnN0eWxlLnZlcnRpY2FsQWxpZ249UmkoLXUuZGVwdGgpKSx1LmNoaWxkcmVuLnVuc2hpZnQoZCksdX1mdW5jdGlvbiBsYmUoaSxzKXt2YXIgdT1udWxsO2kubGVuZ3RoPT09MSYmaVswXS50eXBlPT09InRhZyImJih1PWlbMF0udGFnLGk9aVswXS5ib2R5KTt2YXIgZD1kMShpLHMsInJvb3QiKSxwO2QubGVuZ3RoPT09MiYmZFsxXS5oYXNDbGFzcygidGFnIikmJihwPWQucG9wKCkpO2Zvcih2YXIgdj1bXSxiPVtdLHk9MDt5PGQubGVuZ3RoO3krKylpZihiLnB1c2goZFt5XSksZFt5XS5oYXNDbGFzcygibWJpbiIpfHxkW3ldLmhhc0NsYXNzKCJtcmVsIil8fGRbeV0uaGFzQ2xhc3MoImFsbG93YnJlYWsiKSl7Zm9yKHZhciBUPSExO3k8ZC5sZW5ndGgtMSYmZFt5KzFdLmhhc0NsYXNzKCJtc3BhY2UiKSYmIWRbeSsxXS5oYXNDbGFzcygibmV3bGluZSIpOyl5KyssYi5wdXNoKGRbeV0pLGRbeV0uaGFzQ2xhc3MoIm5vYnJlYWsiKSYmKFQ9ITApO1R8fCh2LnB1c2gobVEoYixzKSksYj1bXSl9ZWxzZSBkW3ldLmhhc0NsYXNzKCJuZXdsaW5lIikmJihiLnBvcCgpLGIubGVuZ3RoPjAmJih2LnB1c2gobVEoYixzKSksYj1bXSksdi5wdXNoKGRbeV0pKTtiLmxlbmd0aD4wJiZ2LnB1c2gobVEoYixzKSk7dmFyIF87dT8oXz1tUShkMSh1LHMsITApKSxfLmNsYXNzZXM9WyJ0YWciXSx2LnB1c2goXykpOnAmJnYucHVzaChwKTt2YXIgQT1ONyhbImthdGV4LWh0bWwiXSx2KTtpZihBLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksXyl7dmFyIFA9Xy5jaGlsZHJlblswXTtQLnN0eWxlLmhlaWdodD1SaShBLmhlaWdodCtBLmRlcHRoKSxBLmRlcHRoJiYoUC5zdHlsZS52ZXJ0aWNhbEFsaWduPVJpKC1BLmRlcHRoKSl9cmV0dXJuIEF9ZnVuY3Rpb24gYnplKGkpe3JldHVybiBuZXcgb1IoaSl9Y2xhc3MgRnZ7Y29uc3RydWN0b3Iocyx1LGQpe3RoaXMudHlwZT12b2lkIDAsdGhpcy5hdHRyaWJ1dGVzPXZvaWQgMCx0aGlzLmNoaWxkcmVuPXZvaWQgMCx0aGlzLmNsYXNzZXM9dm9pZCAwLHRoaXMudHlwZT1zLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLmNoaWxkcmVuPXV8fFtdLHRoaXMuY2xhc3Nlcz1kfHxbXX1zZXRBdHRyaWJ1dGUocyx1KXt0aGlzLmF0dHJpYnV0ZXNbc109dX1nZXRBdHRyaWJ1dGUocyl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1tzXX10b05vZGUoKXt2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLHRoaXMudHlwZSk7Zm9yKHZhciB1IGluIHRoaXMuYXR0cmlidXRlcylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLHUpJiZzLnNldEF0dHJpYnV0ZSh1LHRoaXMuYXR0cmlidXRlc1t1XSk7dGhpcy5jbGFzc2VzLmxlbmd0aD4wJiYocy5jbGFzc05hbWU9VDkodGhpcy5jbGFzc2VzKSk7Zm9yKHZhciBkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspcy5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2RdLnRvTm9kZSgpKTtyZXR1cm4gc310b01hcmt1cCgpe3ZhciBzPSI8Iit0aGlzLnR5cGU7Zm9yKHZhciB1IGluIHRoaXMuYXR0cmlidXRlcylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLHUpJiYocys9IiAiK3UrJz0iJyxzKz1ZYS5lc2NhcGUodGhpcy5hdHRyaWJ1dGVzW3VdKSxzKz0nIicpO3RoaXMuY2xhc3Nlcy5sZW5ndGg+MCYmKHMrPScgY2xhc3MgPSInK1lhLmVzY2FwZShUOSh0aGlzLmNsYXNzZXMpKSsnIicpLHMrPSI+Ijtmb3IodmFyIGQ9MDtkPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2QrKylzKz10aGlzLmNoaWxkcmVuW2RdLnRvTWFya3VwKCk7cmV0dXJuIHMrPSI8LyIrdGhpcy50eXBlKyI+IixzfXRvVGV4dCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLm1hcChzPT5zLnRvVGV4dCgpKS5qb2luKCIiKX19Y2xhc3MgbFJ7Y29uc3RydWN0b3Iocyl7dGhpcy50ZXh0PXZvaWQgMCx0aGlzLnRleHQ9c310b05vZGUoKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy50ZXh0KX10b01hcmt1cCgpe3JldHVybiBZYS5lc2NhcGUodGhpcy50b1RleHQoKSl9dG9UZXh0KCl7cmV0dXJuIHRoaXMudGV4dH19Y2xhc3MgUEh0e2NvbnN0cnVjdG9yKHMpe3RoaXMud2lkdGg9dm9pZCAwLHRoaXMuY2hhcmFjdGVyPXZvaWQgMCx0aGlzLndpZHRoPXMscz49LjA1NTU1JiZzPD0uMDU1NTY/dGhpcy5jaGFyYWN0ZXI9IuKAiiI6cz49LjE2NjYmJnM8PS4xNjY3P3RoaXMuY2hhcmFjdGVyPSLigIkiOnM+PS4yMjIyJiZzPD0uMjIyMz90aGlzLmNoYXJhY3Rlcj0i4oCFIjpzPj0uMjc3NyYmczw9LjI3Nzg/dGhpcy5jaGFyYWN0ZXI9IuKAheKAiiI6cz49LS4wNTU1NiYmczw9LS4wNTU1NT90aGlzLmNoYXJhY3Rlcj0i4oCK4oGjIjpzPj0tLjE2NjcmJnM8PS0uMTY2Nj90aGlzLmNoYXJhY3Rlcj0i4oCJ4oGjIjpzPj0tLjIyMjMmJnM8PS0uMjIyMj90aGlzLmNoYXJhY3Rlcj0i4oGf4oGjIjpzPj0tLjI3NzgmJnM8PS0uMjc3Nz90aGlzLmNoYXJhY3Rlcj0i4oCF4oGjIjp0aGlzLmNoYXJhY3Rlcj1udWxsfXRvTm9kZSgpe2lmKHRoaXMuY2hhcmFjdGVyKXJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLmNoYXJhY3Rlcik7dmFyIHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIiwibXNwYWNlIik7cmV0dXJuIHMuc2V0QXR0cmlidXRlKCJ3aWR0aCIsUmkodGhpcy53aWR0aCkpLHN9dG9NYXJrdXAoKXtyZXR1cm4gdGhpcy5jaGFyYWN0ZXI/IjxtdGV4dD4iK3RoaXMuY2hhcmFjdGVyKyI8L210ZXh0PiI6Jzxtc3BhY2Ugd2lkdGg9IicrUmkodGhpcy53aWR0aCkrJyIvPid9dG9UZXh0KCl7cmV0dXJuIHRoaXMuY2hhcmFjdGVyP3RoaXMuY2hhcmFjdGVyOiIgIn19dmFyIHZpPXtNYXRoTm9kZTpGdixUZXh0Tm9kZTpsUixTcGFjZU5vZGU6UEh0LG5ld0RvY3VtZW50RnJhZ21lbnQ6YnplfSxSdj1mdW5jdGlvbihzLHUsZCl7cmV0dXJuIFVsW3VdW3NdJiZVbFt1XVtzXS5yZXBsYWNlJiZzLmNoYXJDb2RlQXQoMCkhPT01NTM0OSYmIShyemUuaGFzT3duUHJvcGVydHkocykmJmQmJihkLmZvbnRGYW1pbHkmJmQuZm9udEZhbWlseS5zbGljZSg0LDYpPT09InR0Inx8ZC5mb250JiZkLmZvbnQuc2xpY2UoNCw2KT09PSJ0dCIpKSYmKHM9VWxbdV1bc10ucmVwbGFjZSksbmV3IHZpLlRleHROb2RlKHMpfSxoYmU9ZnVuY3Rpb24ocyl7cmV0dXJuIHMubGVuZ3RoPT09MT9zWzBdOm5ldyB2aS5NYXRoTm9kZSgibXJvdyIscyl9LGZiZT1mdW5jdGlvbihzLHUpe2lmKHUuZm9udEZhbWlseT09PSJ0ZXh0dHQiKXJldHVybiJtb25vc3BhY2UiO2lmKHUuZm9udEZhbWlseT09PSJ0ZXh0c2YiKXJldHVybiB1LmZvbnRTaGFwZT09PSJ0ZXh0aXQiJiZ1LmZvbnRXZWlnaHQ9PT0idGV4dGJmIj8ic2Fucy1zZXJpZi1ib2xkLWl0YWxpYyI6dS5mb250U2hhcGU9PT0idGV4dGl0Ij8ic2Fucy1zZXJpZi1pdGFsaWMiOnUuZm9udFdlaWdodD09PSJ0ZXh0YmYiPyJib2xkLXNhbnMtc2VyaWYiOiJzYW5zLXNlcmlmIjtpZih1LmZvbnRTaGFwZT09PSJ0ZXh0aXQiJiZ1LmZvbnRXZWlnaHQ9PT0idGV4dGJmIilyZXR1cm4iYm9sZC1pdGFsaWMiO2lmKHUuZm9udFNoYXBlPT09InRleHRpdCIpcmV0dXJuIml0YWxpYyI7aWYodS5mb250V2VpZ2h0PT09InRleHRiZiIpcmV0dXJuImJvbGQiO3ZhciBkPXUuZm9udDtpZighZHx8ZD09PSJtYXRobm9ybWFsIilyZXR1cm4gbnVsbDt2YXIgcD1zLm1vZGU7aWYoZD09PSJtYXRoaXQiKXJldHVybiJpdGFsaWMiO2lmKGQ9PT0iYm9sZHN5bWJvbCIpcmV0dXJuIHMudHlwZT09PSJ0ZXh0b3JkIj8iYm9sZCI6ImJvbGQtaXRhbGljIjtpZihkPT09Im1hdGhiZiIpcmV0dXJuImJvbGQiO2lmKGQ9PT0ibWF0aGJiIilyZXR1cm4iZG91YmxlLXN0cnVjayI7aWYoZD09PSJtYXRoZnJhayIpcmV0dXJuImZyYWt0dXIiO2lmKGQ9PT0ibWF0aHNjciJ8fGQ9PT0ibWF0aGNhbCIpcmV0dXJuInNjcmlwdCI7aWYoZD09PSJtYXRoc2YiKXJldHVybiJzYW5zLXNlcmlmIjtpZihkPT09Im1hdGh0dCIpcmV0dXJuIm1vbm9zcGFjZSI7dmFyIHY9cy50ZXh0O2lmKFlhLmNvbnRhaW5zKFsiXFxpbWF0aCIsIlxcam1hdGgiXSx2KSlyZXR1cm4gbnVsbDtVbFtwXVt2XSYmVWxbcF1bdl0ucmVwbGFjZSYmKHY9VWxbcF1bdl0ucmVwbGFjZSk7dmFyIGI9em4uZm9udE1hcFtkXS5mb250TmFtZTtyZXR1cm4gSjJlKHYsYixwKT96bi5mb250TWFwW2RdLnZhcmlhbnQ6bnVsbH0sajI9ZnVuY3Rpb24ocyx1LGQpe2lmKHMubGVuZ3RoPT09MSl7dmFyIHA9TGwoc1swXSx1KTtyZXR1cm4gZCYmcCBpbnN0YW5jZW9mIEZ2JiZwLnR5cGU9PT0ibW8iJiYocC5zZXRBdHRyaWJ1dGUoImxzcGFjZSIsIjBlbSIpLHAuc2V0QXR0cmlidXRlKCJyc3BhY2UiLCIwZW0iKSksW3BdfWZvcih2YXIgdj1bXSxiLHk9MDt5PHMubGVuZ3RoO3krKyl7dmFyIFQ9TGwoc1t5XSx1KTtpZihUIGluc3RhbmNlb2YgRnYmJmIgaW5zdGFuY2VvZiBGdil7aWYoVC50eXBlPT09Im10ZXh0IiYmYi50eXBlPT09Im10ZXh0IiYmVC5nZXRBdHRyaWJ1dGUoIm1hdGh2YXJpYW50Iik9PT1iLmdldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiKSl7Yi5jaGlsZHJlbi5wdXNoKC4uLlQuY2hpbGRyZW4pO2NvbnRpbnVlfWVsc2UgaWYoVC50eXBlPT09Im1uIiYmYi50eXBlPT09Im1uIil7Yi5jaGlsZHJlbi5wdXNoKC4uLlQuY2hpbGRyZW4pO2NvbnRpbnVlfWVsc2UgaWYoVC50eXBlPT09Im1pIiYmVC5jaGlsZHJlbi5sZW5ndGg9PT0xJiZiLnR5cGU9PT0ibW4iKXt2YXIgXz1ULmNoaWxkcmVuWzBdO2lmKF8gaW5zdGFuY2VvZiBsUiYmXy50ZXh0PT09Ii4iKXtiLmNoaWxkcmVuLnB1c2goLi4uVC5jaGlsZHJlbik7Y29udGludWV9fWVsc2UgaWYoYi50eXBlPT09Im1pIiYmYi5jaGlsZHJlbi5sZW5ndGg9PT0xKXt2YXIgQT1iLmNoaWxkcmVuWzBdO2lmKEEgaW5zdGFuY2VvZiBsUiYmQS50ZXh0PT09Isy4IiYmKFQudHlwZT09PSJtbyJ8fFQudHlwZT09PSJtaSJ8fFQudHlwZT09PSJtbiIpKXt2YXIgUD1ULmNoaWxkcmVuWzBdO1AgaW5zdGFuY2VvZiBsUiYmUC50ZXh0Lmxlbmd0aD4wJiYoUC50ZXh0PVAudGV4dC5zbGljZSgwLDEpKyLMuCIrUC50ZXh0LnNsaWNlKDEpLHYucG9wKCkpfX19di5wdXNoKFQpLGI9VH1yZXR1cm4gdn0sXzk9ZnVuY3Rpb24ocyx1LGQpe3JldHVybiBoYmUoajIocyx1LGQpKX0sTGw9ZnVuY3Rpb24ocyx1KXtpZighcylyZXR1cm4gbmV3IHZpLk1hdGhOb2RlKCJtcm93Iik7aWYocFFbcy50eXBlXSl7dmFyIGQ9cFFbcy50eXBlXShzLHUpO3JldHVybiBkfWVsc2UgdGhyb3cgbmV3IENpKCJHb3QgZ3JvdXAgb2YgdW5rbm93biB0eXBlOiAnIitzLnR5cGUrIiciKX07ZnVuY3Rpb24gbXplKGkscyx1LGQscCl7dmFyIHY9ajIoaSx1KSxiO3YubGVuZ3RoPT09MSYmdlswXWluc3RhbmNlb2YgRnYmJllhLmNvbnRhaW5zKFsibXJvdyIsIm10YWJsZSJdLHZbMF0udHlwZSk/Yj12WzBdOmI9bmV3IHZpLk1hdGhOb2RlKCJtcm93Iix2KTt2YXIgeT1uZXcgdmkuTWF0aE5vZGUoImFubm90YXRpb24iLFtuZXcgdmkuVGV4dE5vZGUocyldKTt5LnNldEF0dHJpYnV0ZSgiZW5jb2RpbmciLCJhcHBsaWNhdGlvbi94LXRleCIpO3ZhciBUPW5ldyB2aS5NYXRoTm9kZSgic2VtYW50aWNzIixbYix5XSksXz1uZXcgdmkuTWF0aE5vZGUoIm1hdGgiLFtUXSk7Xy5zZXRBdHRyaWJ1dGUoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIpLGQmJl8uc2V0QXR0cmlidXRlKCJkaXNwbGF5IiwiYmxvY2siKTt2YXIgQT1wPyJrYXRleCI6ImthdGV4LW1hdGhtbCI7cmV0dXJuIHpuLm1ha2VTcGFuKFtBXSxbX10pfXZhciB2emU9ZnVuY3Rpb24ocyl7cmV0dXJuIG5ldyBNNyh7c3R5bGU6cy5kaXNwbGF5TW9kZT9UYS5ESVNQTEFZOlRhLlRFWFQsbWF4U2l6ZTpzLm1heFNpemUsbWluUnVsZVRoaWNrbmVzczpzLm1pblJ1bGVUaGlja25lc3N9KX0sd3plPWZ1bmN0aW9uKHMsdSl7aWYodS5kaXNwbGF5TW9kZSl7dmFyIGQ9WyJrYXRleC1kaXNwbGF5Il07dS5sZXFubyYmZC5wdXNoKCJsZXFubyIpLHUuZmxlcW4mJmQucHVzaCgiZmxlcW4iKSxzPXpuLm1ha2VTcGFuKGQsW3NdKX1yZXR1cm4gc30sQkh0PWZ1bmN0aW9uKHMsdSxkKXt2YXIgcD12emUoZCksdjtpZihkLm91dHB1dD09PSJtYXRobWwiKXJldHVybiBtemUocyx1LHAsZC5kaXNwbGF5TW9kZSwhMCk7aWYoZC5vdXRwdXQ9PT0iaHRtbCIpe3ZhciBiPWxiZShzLHApO3Y9em4ubWFrZVNwYW4oWyJrYXRleCJdLFtiXSl9ZWxzZXt2YXIgeT1temUocyx1LHAsZC5kaXNwbGF5TW9kZSwhMSksVD1sYmUocyxwKTt2PXpuLm1ha2VTcGFuKFsia2F0ZXgiXSxbeSxUXSl9cmV0dXJuIHd6ZSh2LGQpfSxGSHQ9ZnVuY3Rpb24ocyx1LGQpe3ZhciBwPXZ6ZShkKSx2PWxiZShzLHApLGI9em4ubWFrZVNwYW4oWyJrYXRleCJdLFt2XSk7cmV0dXJuIHd6ZShiLGQpfSxSSHQ9e3dpZGVoYXQ6Il4iLHdpZGVjaGVjazoiy4ciLHdpZGV0aWxkZToifiIsdXRpbGRlOiJ+IixvdmVybGVmdGFycm93OiLihpAiLHVuZGVybGVmdGFycm93OiLihpAiLHhsZWZ0YXJyb3c6IuKGkCIsb3ZlcnJpZ2h0YXJyb3c6IuKGkiIsdW5kZXJyaWdodGFycm93OiLihpIiLHhyaWdodGFycm93OiLihpIiLHVuZGVyYnJhY2U6IuKPnyIsb3ZlcmJyYWNlOiLij54iLG92ZXJncm91cDoi4o+gIix1bmRlcmdyb3VwOiLij6EiLG92ZXJsZWZ0cmlnaHRhcnJvdzoi4oaUIix1bmRlcmxlZnRyaWdodGFycm93OiLihpQiLHhsZWZ0cmlnaHRhcnJvdzoi4oaUIixPdmVycmlnaHRhcnJvdzoi4oeSIix4UmlnaHRhcnJvdzoi4oeSIixvdmVybGVmdGhhcnBvb246IuKGvCIseGxlZnRoYXJwb29udXA6IuKGvCIsb3ZlcnJpZ2h0aGFycG9vbjoi4oeAIix4cmlnaHRoYXJwb29udXA6IuKHgCIseExlZnRhcnJvdzoi4oeQIix4TGVmdHJpZ2h0YXJyb3c6IuKHlCIseGhvb2tsZWZ0YXJyb3c6IuKGqSIseGhvb2tyaWdodGFycm93OiLihqoiLHhtYXBzdG86IuKGpiIseHJpZ2h0aGFycG9vbmRvd246IuKHgSIseGxlZnRoYXJwb29uZG93bjoi4oa9Iix4cmlnaHRsZWZ0aGFycG9vbnM6IuKHjCIseGxlZnRyaWdodGhhcnBvb25zOiLih4siLHh0d29oZWFkbGVmdGFycm93OiLihp4iLHh0d29oZWFkcmlnaHRhcnJvdzoi4oagIix4bG9uZ2VxdWFsOiI9Iix4dG9mcm9tOiLih4QiLHhyaWdodGxlZnRhcnJvd3M6IuKHhCIseHJpZ2h0ZXF1aWxpYnJpdW06IuKHjCIseGxlZnRlcXVpbGlicml1bToi4oeLIiwiXFxjZHJpZ2h0YXJyb3ciOiLihpIiLCJcXGNkbGVmdGFycm93Ijoi4oaQIiwiXFxjZGxvbmdlcXVhbCI6Ij0ifSxqSHQ9ZnVuY3Rpb24ocyl7dmFyIHU9bmV3IHZpLk1hdGhOb2RlKCJtbyIsW25ldyB2aS5UZXh0Tm9kZShSSHRbcy5yZXBsYWNlKC9eXFwvLCIiKV0pXSk7cmV0dXJuIHUuc2V0QXR0cmlidXRlKCJzdHJldGNoeSIsInRydWUiKSx1fSwkSHQ9e292ZXJyaWdodGFycm93OltbInJpZ2h0YXJyb3ciXSwuODg4LDUyMiwieE1heFlNaW4iXSxvdmVybGVmdGFycm93OltbImxlZnRhcnJvdyJdLC44ODgsNTIyLCJ4TWluWU1pbiJdLHVuZGVycmlnaHRhcnJvdzpbWyJyaWdodGFycm93Il0sLjg4OCw1MjIsInhNYXhZTWluIl0sdW5kZXJsZWZ0YXJyb3c6W1sibGVmdGFycm93Il0sLjg4OCw1MjIsInhNaW5ZTWluIl0seHJpZ2h0YXJyb3c6W1sicmlnaHRhcnJvdyJdLDEuNDY5LDUyMiwieE1heFlNaW4iXSwiXFxjZHJpZ2h0YXJyb3ciOltbInJpZ2h0YXJyb3ciXSwzLDUyMiwieE1heFlNaW4iXSx4bGVmdGFycm93OltbImxlZnRhcnJvdyJdLDEuNDY5LDUyMiwieE1pbllNaW4iXSwiXFxjZGxlZnRhcnJvdyI6W1sibGVmdGFycm93Il0sMyw1MjIsInhNaW5ZTWluIl0sT3ZlcnJpZ2h0YXJyb3c6W1siZG91YmxlcmlnaHRhcnJvdyJdLC44ODgsNTYwLCJ4TWF4WU1pbiJdLHhSaWdodGFycm93OltbImRvdWJsZXJpZ2h0YXJyb3ciXSwxLjUyNiw1NjAsInhNYXhZTWluIl0seExlZnRhcnJvdzpbWyJkb3VibGVsZWZ0YXJyb3ciXSwxLjUyNiw1NjAsInhNaW5ZTWluIl0sb3ZlcmxlZnRoYXJwb29uOltbImxlZnRoYXJwb29uIl0sLjg4OCw1MjIsInhNaW5ZTWluIl0seGxlZnRoYXJwb29udXA6W1sibGVmdGhhcnBvb24iXSwuODg4LDUyMiwieE1pbllNaW4iXSx4bGVmdGhhcnBvb25kb3duOltbImxlZnRoYXJwb29uZG93biJdLC44ODgsNTIyLCJ4TWluWU1pbiJdLG92ZXJyaWdodGhhcnBvb246W1sicmlnaHRoYXJwb29uIl0sLjg4OCw1MjIsInhNYXhZTWluIl0seHJpZ2h0aGFycG9vbnVwOltbInJpZ2h0aGFycG9vbiJdLC44ODgsNTIyLCJ4TWF4WU1pbiJdLHhyaWdodGhhcnBvb25kb3duOltbInJpZ2h0aGFycG9vbmRvd24iXSwuODg4LDUyMiwieE1heFlNaW4iXSx4bG9uZ2VxdWFsOltbImxvbmdlcXVhbCJdLC44ODgsMzM0LCJ4TWluWU1pbiJdLCJcXGNkbG9uZ2VxdWFsIjpbWyJsb25nZXF1YWwiXSwzLDMzNCwieE1pbllNaW4iXSx4dHdvaGVhZGxlZnRhcnJvdzpbWyJ0d29oZWFkbGVmdGFycm93Il0sLjg4OCwzMzQsInhNaW5ZTWluIl0seHR3b2hlYWRyaWdodGFycm93OltbInR3b2hlYWRyaWdodGFycm93Il0sLjg4OCwzMzQsInhNYXhZTWluIl0sb3ZlcmxlZnRyaWdodGFycm93OltbImxlZnRhcnJvdyIsInJpZ2h0YXJyb3ciXSwuODg4LDUyMl0sb3ZlcmJyYWNlOltbImxlZnRicmFjZSIsIm1pZGJyYWNlIiwicmlnaHRicmFjZSJdLDEuNiw1NDhdLHVuZGVyYnJhY2U6W1sibGVmdGJyYWNldW5kZXIiLCJtaWRicmFjZXVuZGVyIiwicmlnaHRicmFjZXVuZGVyIl0sMS42LDU0OF0sdW5kZXJsZWZ0cmlnaHRhcnJvdzpbWyJsZWZ0YXJyb3ciLCJyaWdodGFycm93Il0sLjg4OCw1MjJdLHhsZWZ0cmlnaHRhcnJvdzpbWyJsZWZ0YXJyb3ciLCJyaWdodGFycm93Il0sMS43NSw1MjJdLHhMZWZ0cmlnaHRhcnJvdzpbWyJkb3VibGVsZWZ0YXJyb3ciLCJkb3VibGVyaWdodGFycm93Il0sMS43NSw1NjBdLHhyaWdodGxlZnRoYXJwb29uczpbWyJsZWZ0aGFycG9vbmRvd25wbHVzIiwicmlnaHRoYXJwb29ucGx1cyJdLDEuNzUsNzE2XSx4bGVmdHJpZ2h0aGFycG9vbnM6W1sibGVmdGhhcnBvb25wbHVzIiwicmlnaHRoYXJwb29uZG93bnBsdXMiXSwxLjc1LDcxNl0seGhvb2tsZWZ0YXJyb3c6W1sibGVmdGFycm93IiwicmlnaHRob29rIl0sMS4wOCw1MjJdLHhob29rcmlnaHRhcnJvdzpbWyJsZWZ0aG9vayIsInJpZ2h0YXJyb3ciXSwxLjA4LDUyMl0sb3ZlcmxpbmVzZWdtZW50OltbImxlZnRsaW5lc2VnbWVudCIsInJpZ2h0bGluZXNlZ21lbnQiXSwuODg4LDUyMl0sdW5kZXJsaW5lc2VnbWVudDpbWyJsZWZ0bGluZXNlZ21lbnQiLCJyaWdodGxpbmVzZWdtZW50Il0sLjg4OCw1MjJdLG92ZXJncm91cDpbWyJsZWZ0Z3JvdXAiLCJyaWdodGdyb3VwIl0sLjg4OCwzNDJdLHVuZGVyZ3JvdXA6W1sibGVmdGdyb3VwdW5kZXIiLCJyaWdodGdyb3VwdW5kZXIiXSwuODg4LDM0Ml0seG1hcHN0bzpbWyJsZWZ0bWFwc3RvIiwicmlnaHRhcnJvdyJdLDEuNSw1MjJdLHh0b2Zyb206W1sibGVmdFRvRnJvbSIsInJpZ2h0VG9Gcm9tIl0sMS43NSw1MjhdLHhyaWdodGxlZnRhcnJvd3M6W1siYmFyYWJvdmVsZWZ0YXJyb3ciLCJyaWdodGFycm93YWJvdmViYXIiXSwxLjc1LDkwMV0seHJpZ2h0ZXF1aWxpYnJpdW06W1siYmFyYWJvdmVzaG9ydGxlZnRoYXJwb29uIiwicmlnaHRoYXJwb29uYWJvdmVzaG9ydGJhciJdLDEuNzUsNzE2XSx4bGVmdGVxdWlsaWJyaXVtOltbInNob3J0YmFyYWJvdmVsZWZ0aGFycG9vbiIsInNob3J0cmlnaHRoYXJwb29uYWJvdmViYXIiXSwxLjc1LDcxNl19LHpIdD1mdW5jdGlvbihzKXtyZXR1cm4gcy50eXBlPT09Im9yZGdyb3VwIj9zLmJvZHkubGVuZ3RoOjF9LHFIdD1mdW5jdGlvbihzLHUpe2Z1bmN0aW9uIGQoKXt2YXIgeT00ZTUsVD1zLmxhYmVsLnNsaWNlKDEpO2lmKFlhLmNvbnRhaW5zKFsid2lkZWhhdCIsIndpZGVjaGVjayIsIndpZGV0aWxkZSIsInV0aWxkZSJdLFQpKXt2YXIgXz1zLEE9ekh0KF8uYmFzZSksUCxSLEY7aWYoQT41KVQ9PT0id2lkZWhhdCJ8fFQ9PT0id2lkZWNoZWNrIj8oUD00MjAseT0yMzY0LEY9LjQyLFI9VCsiNCIpOihQPTMxMix5PTIzNDAsRj0uMzQsUj0idGlsZGU0Iik7ZWxzZXt2YXIgaj1bMSwxLDIsMiwzLDNdW0FdO1Q9PT0id2lkZWhhdCJ8fFQ9PT0id2lkZWNoZWNrIj8oeT1bMCwxMDYyLDIzNjQsMjM2NCwyMzY0XVtqXSxQPVswLDIzOSwzMDAsMzYwLDQyMF1bal0sRj1bMCwuMjQsLjMsLjMsLjM2LC40Ml1bal0sUj1UK2opOih5PVswLDYwMCwxMDMzLDIzMzksMjM0MF1bal0sUD1bMCwyNjAsMjg2LDMwNiwzMTJdW2pdLEY9WzAsLjI2LC4yODYsLjMsLjMwNiwuMzRdW2pdLFI9InRpbGRlIitqKX12YXIgSz1uZXcgQzkoUiksZWU9bmV3IEQ3KFtLXSx7d2lkdGg6IjEwMCUiLGhlaWdodDpSaShGKSx2aWV3Qm94OiIwIDAgIit5KyIgIitQLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSk7cmV0dXJue3NwYW46em4ubWFrZVN2Z1NwYW4oW10sW2VlXSx1KSxtaW5XaWR0aDowLGhlaWdodDpGfX1lbHNle3ZhciBpZT1bXSxvZT0kSHRbVF0sW3BlLGJlLGFlXT1vZSxuZT1hZS8xZTMsc2U9cGUubGVuZ3RoLGRlLFg7aWYoc2U9PT0xKXt2YXIgZ2U9b2VbM107ZGU9WyJoaWRlLXRhaWwiXSxYPVtnZV19ZWxzZSBpZihzZT09PTIpZGU9WyJoYWxmYXJyb3ctbGVmdCIsImhhbGZhcnJvdy1yaWdodCJdLFg9WyJ4TWluWU1pbiIsInhNYXhZTWluIl07ZWxzZSBpZihzZT09PTMpZGU9WyJicmFjZS1sZWZ0IiwiYnJhY2UtY2VudGVyIiwiYnJhY2UtcmlnaHQiXSxYPVsieE1pbllNaW4iLCJ4TWlkWU1pbiIsInhNYXhZTWluIl07ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYENvcnJlY3Qga2F0ZXhJbWFnZXNEYXRhIG9yIHVwZGF0ZSBjb2RlIGhlcmUgdG8gc3VwcG9ydAogICAgICAgICAgICAgICAgICAgIGArc2UrIiBjaGlsZHJlbi4iKTtmb3IodmFyIFc9MDtXPHNlO1crKyl7dmFyIHhlPW5ldyBDOShwZVtXXSksVT1uZXcgRDcoW3hlXSx7d2lkdGg6IjQwMGVtIixoZWlnaHQ6UmkobmUpLHZpZXdCb3g6IjAgMCAiK3krIiAiK2FlLHByZXNlcnZlQXNwZWN0UmF0aW86WFtXXSsiIHNsaWNlIn0pLEZlPXpuLm1ha2VTdmdTcGFuKFtkZVtXXV0sW1VdLHUpO2lmKHNlPT09MSlyZXR1cm57c3BhbjpGZSxtaW5XaWR0aDpiZSxoZWlnaHQ6bmV9O0ZlLnN0eWxlLmhlaWdodD1SaShuZSksaWUucHVzaChGZSl9cmV0dXJue3NwYW46em4ubWFrZVNwYW4oWyJzdHJldGNoeSJdLGllLHUpLG1pbldpZHRoOmJlLGhlaWdodDpuZX19fXZhcntzcGFuOnAsbWluV2lkdGg6dixoZWlnaHQ6Yn09ZCgpO3JldHVybiBwLmhlaWdodD1iLHAuc3R5bGUuaGVpZ2h0PVJpKGIpLHY+MCYmKHAuc3R5bGUubWluV2lkdGg9UmkodikpLHB9LEhIdD1mdW5jdGlvbihzLHUsZCxwLHYpe3ZhciBiLHk9cy5oZWlnaHQrcy5kZXB0aCtkK3A7aWYoL2Zib3h8Y29sb3J8YW5nbC8udGVzdCh1KSl7aWYoYj16bi5tYWtlU3BhbihbInN0cmV0Y2h5Iix1XSxbXSx2KSx1PT09ImZib3giKXt2YXIgVD12LmNvbG9yJiZ2LmdldENvbG9yKCk7VCYmKGIuc3R5bGUuYm9yZGVyQ29sb3I9VCl9fWVsc2V7dmFyIF89W107L15bYnhdY2FuY2VsJC8udGVzdCh1KSYmXy5wdXNoKG5ldyBuYmUoe3gxOiIwIix5MToiMCIseDI6IjEwMCUiLHkyOiIxMDAlIiwic3Ryb2tlLXdpZHRoIjoiMC4wNDZlbSJ9KSksL154P2NhbmNlbCQvLnRlc3QodSkmJl8ucHVzaChuZXcgbmJlKHt4MToiMCIseTE6IjEwMCUiLHgyOiIxMDAlIix5MjoiMCIsInN0cm9rZS13aWR0aCI6IjAuMDQ2ZW0ifSkpO3ZhciBBPW5ldyBENyhfLHt3aWR0aDoiMTAwJSIsaGVpZ2h0OlJpKHkpfSk7Yj16bi5tYWtlU3ZnU3BhbihbXSxbQV0sdil9cmV0dXJuIGIuaGVpZ2h0PXksYi5zdHlsZS5oZWlnaHQ9UmkoeSksYn0sUDc9e2VuY2xvc2VTcGFuOkhIdCxtYXRoTUxub2RlOmpIdCxzdmdTcGFuOnFIdH07ZnVuY3Rpb24gWW8oaSxzKXtpZighaXx8aS50eXBlIT09cyl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIG5vZGUgb2YgdHlwZSAiK3MrIiwgYnV0IGdvdCAiKyhpPyJub2RlIG9mIHR5cGUgIitpLnR5cGU6U3RyaW5nKGkpKSk7cmV0dXJuIGl9ZnVuY3Rpb24gZGJlKGkpe3ZhciBzPXZRKGkpO2lmKCFzKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgbm9kZSBvZiBzeW1ib2wgZ3JvdXAgdHlwZSwgYnV0IGdvdCAiKyhpPyJub2RlIG9mIHR5cGUgIitpLnR5cGU6U3RyaW5nKGkpKSk7cmV0dXJuIHN9ZnVuY3Rpb24gdlEoaSl7cmV0dXJuIGkmJihpLnR5cGU9PT0iYXRvbSJ8fGdIdC5oYXNPd25Qcm9wZXJ0eShpLnR5cGUpKT9pOm51bGx9dmFyIGdiZT0oaSxzKT0+e3ZhciB1LGQscDtpJiZpLnR5cGU9PT0ic3Vwc3ViIj8oZD1ZbyhpLmJhc2UsImFjY2VudCIpLHU9ZC5iYXNlLGkuYmFzZT11LHA9Zkh0KHV1KGkscykpLGkuYmFzZT1kKTooZD1ZbyhpLCJhY2NlbnQiKSx1PWQuYmFzZSk7dmFyIHY9dXUodSxzLmhhdmluZ0NyYW1wZWRTdHlsZSgpKSxiPWQuaXNTaGlmdHkmJllhLmlzQ2hhcmFjdGVyQm94KHUpLHk9MDtpZihiKXt2YXIgVD1ZYS5nZXRCYXNlRWxlbSh1KSxfPXV1KFQscy5oYXZpbmdDcmFtcGVkU3R5bGUoKSk7eT1uemUoXykuc2tld312YXIgQT1kLmxhYmVsPT09IlxcYyIsUD1BP3YuaGVpZ2h0K3YuZGVwdGg6TWF0aC5taW4odi5oZWlnaHQscy5mb250TWV0cmljcygpLnhIZWlnaHQpLFI7aWYoZC5pc1N0cmV0Y2h5KVI9UDcuc3ZnU3BhbihkLHMpLFI9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp2fSx7dHlwZToiZWxlbSIsZWxlbTpSLHdyYXBwZXJDbGFzc2VzOlsic3ZnLWFsaWduIl0sd3JhcHBlclN0eWxlOnk+MD97d2lkdGg6ImNhbGMoMTAwJSAtICIrUmkoMip5KSsiKSIsbWFyZ2luTGVmdDpSaSgyKnkpfTp2b2lkIDB9XX0scyk7ZWxzZXt2YXIgRixqO2QubGFiZWw9PT0iXFx2ZWMiPyhGPXpuLnN0YXRpY1N2ZygidmVjIixzKSxqPXpuLnN2Z0RhdGEudmVjWzFdKTooRj16bi5tYWtlT3JkKHttb2RlOmQubW9kZSx0ZXh0OmQubGFiZWx9LHMsInRleHRvcmQiKSxGPW56ZShGKSxGLml0YWxpYz0wLGo9Ri53aWR0aCxBJiYoUCs9Ri5kZXB0aCkpLFI9em4ubWFrZVNwYW4oWyJhY2NlbnQtYm9keSJdLFtGXSk7dmFyIEs9ZC5sYWJlbD09PSJcXHRleHRjaXJjbGVkIjtLJiYoUi5jbGFzc2VzLnB1c2goImFjY2VudC1mdWxsIiksUD12LmhlaWdodCk7dmFyIGVlPXk7S3x8KGVlLT1qLzIpLFIuc3R5bGUubGVmdD1SaShlZSksZC5sYWJlbD09PSJcXHRleHRjaXJjbGVkIiYmKFIuc3R5bGUudG9wPSIuMmVtIiksUj16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiZmlyc3RCYXNlbGluZSIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnZ9LHt0eXBlOiJrZXJuIixzaXplOi1QfSx7dHlwZToiZWxlbSIsZWxlbTpSfV19LHMpfXZhciBpZT16bi5tYWtlU3BhbihbIm1vcmQiLCJhY2NlbnQiXSxbUl0scyk7cmV0dXJuIHA/KHAuY2hpbGRyZW5bMF09aWUscC5oZWlnaHQ9TWF0aC5tYXgoaWUuaGVpZ2h0LHAuaGVpZ2h0KSxwLmNsYXNzZXNbMF09Im1vcmQiLHApOmllfSx5emU9KGkscyk9Pnt2YXIgdT1pLmlzU3RyZXRjaHk/UDcubWF0aE1Mbm9kZShpLmxhYmVsKTpuZXcgdmkuTWF0aE5vZGUoIm1vIixbUnYoaS5sYWJlbCxpLm1vZGUpXSksZD1uZXcgdmkuTWF0aE5vZGUoIm1vdmVyIixbTGwoaS5iYXNlLHMpLHVdKTtyZXR1cm4gZC5zZXRBdHRyaWJ1dGUoImFjY2VudCIsInRydWUiKSxkfSxWSHQ9bmV3IFJlZ0V4cChbIlxcYWN1dGUiLCJcXGdyYXZlIiwiXFxkZG90IiwiXFx0aWxkZSIsIlxcYmFyIiwiXFxicmV2ZSIsIlxcY2hlY2siLCJcXGhhdCIsIlxcdmVjIiwiXFxkb3QiLCJcXG1hdGhyaW5nIl0ubWFwKGk9PiJcXCIraSkuam9pbigifCIpKTtKaSh7dHlwZToiYWNjZW50IixuYW1lczpbIlxcYWN1dGUiLCJcXGdyYXZlIiwiXFxkZG90IiwiXFx0aWxkZSIsIlxcYmFyIiwiXFxicmV2ZSIsIlxcY2hlY2siLCJcXGhhdCIsIlxcdmVjIiwiXFxkb3QiLCJcXG1hdGhyaW5nIiwiXFx3aWRlY2hlY2siLCJcXHdpZGVoYXQiLCJcXHdpZGV0aWxkZSIsIlxcb3ZlcnJpZ2h0YXJyb3ciLCJcXG92ZXJsZWZ0YXJyb3ciLCJcXE92ZXJyaWdodGFycm93IiwiXFxvdmVybGVmdHJpZ2h0YXJyb3ciLCJcXG92ZXJncm91cCIsIlxcb3ZlcmxpbmVzZWdtZW50IiwiXFxvdmVybGVmdGhhcnBvb24iLCJcXG92ZXJyaWdodGhhcnBvb24iXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyOihpLHMpPT57dmFyIHU9YlEoc1swXSksZD0hVkh0LnRlc3QoaS5mdW5jTmFtZSkscD0hZHx8aS5mdW5jTmFtZT09PSJcXHdpZGVoYXQifHxpLmZ1bmNOYW1lPT09Ilxcd2lkZXRpbGRlInx8aS5mdW5jTmFtZT09PSJcXHdpZGVjaGVjayI7cmV0dXJue3R5cGU6ImFjY2VudCIsbW9kZTppLnBhcnNlci5tb2RlLGxhYmVsOmkuZnVuY05hbWUsaXNTdHJldGNoeTpkLGlzU2hpZnR5OnAsYmFzZTp1fX0saHRtbEJ1aWxkZXI6Z2JlLG1hdGhtbEJ1aWxkZXI6eXplfSksSmkoe3R5cGU6ImFjY2VudCIsbmFtZXM6WyJcXCciLCJcXGAiLCJcXF4iLCJcXH4iLCJcXD0iLCJcXHUiLCJcXC4iLCdcXCInLCJcXGMiLCJcXHIiLCJcXEgiLCJcXHYiLCJcXHRleHRjaXJjbGVkIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwLGFsbG93ZWRJbk1hdGg6ITAsYXJnVHlwZXM6WyJwcmltaXRpdmUiXX0saGFuZGxlcjooaSxzKT0+e3ZhciB1PXNbMF0sZD1pLnBhcnNlci5tb2RlO3JldHVybiBkPT09Im1hdGgiJiYoaS5wYXJzZXIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJtYXRoVnNUZXh0QWNjZW50cyIsIkxhVGVYJ3MgYWNjZW50ICIraS5mdW5jTmFtZSsiIHdvcmtzIG9ubHkgaW4gdGV4dCBtb2RlIiksZD0idGV4dCIpLHt0eXBlOiJhY2NlbnQiLG1vZGU6ZCxsYWJlbDppLmZ1bmNOYW1lLGlzU3RyZXRjaHk6ITEsaXNTaGlmdHk6ITAsYmFzZTp1fX0saHRtbEJ1aWxkZXI6Z2JlLG1hdGhtbEJ1aWxkZXI6eXplfSksSmkoe3R5cGU6ImFjY2VudFVuZGVyIixuYW1lczpbIlxcdW5kZXJsZWZ0YXJyb3ciLCJcXHVuZGVycmlnaHRhcnJvdyIsIlxcdW5kZXJsZWZ0cmlnaHRhcnJvdyIsIlxcdW5kZXJncm91cCIsIlxcdW5kZXJsaW5lc2VnbWVudCIsIlxcdXRpbGRlIl0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcjooaSxzKT0+e3ZhcntwYXJzZXI6dSxmdW5jTmFtZTpkfT1pLHA9c1swXTtyZXR1cm57dHlwZToiYWNjZW50VW5kZXIiLG1vZGU6dS5tb2RlLGxhYmVsOmQsYmFzZTpwfX0saHRtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT11dShpLmJhc2UscyksZD1QNy5zdmdTcGFuKGkscykscD1pLmxhYmVsPT09IlxcdXRpbGRlIj8uMTI6MCx2PXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJ0b3AiLHBvc2l0aW9uRGF0YTp1LmhlaWdodCxjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06ZCx3cmFwcGVyQ2xhc3NlczpbInN2Zy1hbGlnbiJdfSx7dHlwZToia2VybiIsc2l6ZTpwfSx7dHlwZToiZWxlbSIsZWxlbTp1fV19LHMpO3JldHVybiB6bi5tYWtlU3BhbihbIm1vcmQiLCJhY2NlbnR1bmRlciJdLFt2XSxzKX0sbWF0aG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PVA3Lm1hdGhNTG5vZGUoaS5sYWJlbCksZD1uZXcgdmkuTWF0aE5vZGUoIm11bmRlciIsW0xsKGkuYmFzZSxzKSx1XSk7cmV0dXJuIGQuc2V0QXR0cmlidXRlKCJhY2NlbnR1bmRlciIsInRydWUiKSxkfX0pO3ZhciB3UT1pPT57dmFyIHM9bmV3IHZpLk1hdGhOb2RlKCJtcGFkZGVkIixpP1tpXTpbXSk7cmV0dXJuIHMuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIiswLjZlbSIpLHMuc2V0QXR0cmlidXRlKCJsc3BhY2UiLCIwLjNlbSIpLHN9O0ppKHt0eXBlOiJ4QXJyb3ciLG5hbWVzOlsiXFx4bGVmdGFycm93IiwiXFx4cmlnaHRhcnJvdyIsIlxceExlZnRhcnJvdyIsIlxceFJpZ2h0YXJyb3ciLCJcXHhsZWZ0cmlnaHRhcnJvdyIsIlxceExlZnRyaWdodGFycm93IiwiXFx4aG9va2xlZnRhcnJvdyIsIlxceGhvb2tyaWdodGFycm93IiwiXFx4bWFwc3RvIiwiXFx4cmlnaHRoYXJwb29uZG93biIsIlxceHJpZ2h0aGFycG9vbnVwIiwiXFx4bGVmdGhhcnBvb25kb3duIiwiXFx4bGVmdGhhcnBvb251cCIsIlxceHJpZ2h0bGVmdGhhcnBvb25zIiwiXFx4bGVmdHJpZ2h0aGFycG9vbnMiLCJcXHhsb25nZXF1YWwiLCJcXHh0d29oZWFkcmlnaHRhcnJvdyIsIlxceHR3b2hlYWRsZWZ0YXJyb3ciLCJcXHh0b2Zyb20iLCJcXHhyaWdodGxlZnRhcnJvd3MiLCJcXHhyaWdodGVxdWlsaWJyaXVtIiwiXFx4bGVmdGVxdWlsaWJyaXVtIiwiXFxcXGNkcmlnaHRhcnJvdyIsIlxcXFxjZGxlZnRhcnJvdyIsIlxcXFxjZGxvbmdlcXVhbCJdLHByb3BzOntudW1BcmdzOjEsbnVtT3B0aW9uYWxBcmdzOjF9LGhhbmRsZXIoaSxzLHUpe3ZhcntwYXJzZXI6ZCxmdW5jTmFtZTpwfT1pO3JldHVybnt0eXBlOiJ4QXJyb3ciLG1vZGU6ZC5tb2RlLGxhYmVsOnAsYm9keTpzWzBdLGJlbG93OnVbMF19fSxodG1sQnVpbGRlcihpLHMpe3ZhciB1PXMuc3R5bGUsZD1zLmhhdmluZ1N0eWxlKHUuc3VwKCkpLHA9em4ud3JhcEZyYWdtZW50KHV1KGkuYm9keSxkLHMpLHMpLHY9aS5sYWJlbC5zbGljZSgwLDIpPT09IlxceCI/IngiOiJjZCI7cC5jbGFzc2VzLnB1c2godisiLWFycm93LXBhZCIpO3ZhciBiO2kuYmVsb3cmJihkPXMuaGF2aW5nU3R5bGUodS5zdWIoKSksYj16bi53cmFwRnJhZ21lbnQodXUoaS5iZWxvdyxkLHMpLHMpLGIuY2xhc3Nlcy5wdXNoKHYrIi1hcnJvdy1wYWQiKSk7dmFyIHk9UDcuc3ZnU3BhbihpLHMpLFQ9LXMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0Ky41KnkuaGVpZ2h0LF89LXMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0LS41KnkuaGVpZ2h0LS4xMTE7KHAuZGVwdGg+LjI1fHxpLmxhYmVsPT09IlxceGxlZnRlcXVpbGlicml1bSIpJiYoXy09cC5kZXB0aCk7dmFyIEE7aWYoYil7dmFyIFA9LXMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0K2IuaGVpZ2h0Ky41KnkuaGVpZ2h0Ky4xMTE7QT16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiaW5kaXZpZHVhbFNoaWZ0IixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06cCxzaGlmdDpffSx7dHlwZToiZWxlbSIsZWxlbTp5LHNoaWZ0OlR9LHt0eXBlOiJlbGVtIixlbGVtOmIsc2hpZnQ6UH1dfSxzKX1lbHNlIEE9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnAsc2hpZnQ6X30se3R5cGU6ImVsZW0iLGVsZW06eSxzaGlmdDpUfV19LHMpO3JldHVybiBBLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzFdLmNsYXNzZXMucHVzaCgic3ZnLWFsaWduIiksem4ubWFrZVNwYW4oWyJtcmVsIiwieC1hcnJvdyJdLFtBXSxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PVA3Lm1hdGhNTG5vZGUoaS5sYWJlbCk7dS5zZXRBdHRyaWJ1dGUoIm1pbnNpemUiLGkubGFiZWwuY2hhckF0KDApPT09IngiPyIxLjc1ZW0iOiIzLjBlbSIpO3ZhciBkO2lmKGkuYm9keSl7dmFyIHA9d1EoTGwoaS5ib2R5LHMpKTtpZihpLmJlbG93KXt2YXIgdj13UShMbChpLmJlbG93LHMpKTtkPW5ldyB2aS5NYXRoTm9kZSgibXVuZGVyb3ZlciIsW3UsdixwXSl9ZWxzZSBkPW5ldyB2aS5NYXRoTm9kZSgibW92ZXIiLFt1LHBdKX1lbHNlIGlmKGkuYmVsb3cpe3ZhciBiPXdRKExsKGkuYmVsb3cscykpO2Q9bmV3IHZpLk1hdGhOb2RlKCJtdW5kZXIiLFt1LGJdKX1lbHNlIGQ9d1EoKSxkPW5ldyB2aS5NYXRoTm9kZSgibW92ZXIiLFt1LGRdKTtyZXR1cm4gZH19KTt2YXIgVUh0PXpuLm1ha2VTcGFuO2Z1bmN0aW9uIHh6ZShpLHMpe3ZhciB1PWQxKGkuYm9keSxzLCEwKTtyZXR1cm4gVUh0KFtpLm1jbGFzc10sdSxzKX1mdW5jdGlvbiBremUoaSxzKXt2YXIgdSxkPWoyKGkuYm9keSxzKTtyZXR1cm4gaS5tY2xhc3M9PT0ibWlubmVyIj91PW5ldyB2aS5NYXRoTm9kZSgibXBhZGRlZCIsZCk6aS5tY2xhc3M9PT0ibW9yZCI/aS5pc0NoYXJhY3RlckJveD8odT1kWzBdLHUudHlwZT0ibWkiKTp1PW5ldyB2aS5NYXRoTm9kZSgibWkiLGQpOihpLmlzQ2hhcmFjdGVyQm94Pyh1PWRbMF0sdS50eXBlPSJtbyIpOnU9bmV3IHZpLk1hdGhOb2RlKCJtbyIsZCksaS5tY2xhc3M9PT0ibWJpbiI/KHUuYXR0cmlidXRlcy5sc3BhY2U9IjAuMjJlbSIsdS5hdHRyaWJ1dGVzLnJzcGFjZT0iMC4yMmVtIik6aS5tY2xhc3M9PT0ibXB1bmN0Ij8odS5hdHRyaWJ1dGVzLmxzcGFjZT0iMGVtIix1LmF0dHJpYnV0ZXMucnNwYWNlPSIwLjE3ZW0iKTppLm1jbGFzcz09PSJtb3BlbiJ8fGkubWNsYXNzPT09Im1jbG9zZSI/KHUuYXR0cmlidXRlcy5sc3BhY2U9IjBlbSIsdS5hdHRyaWJ1dGVzLnJzcGFjZT0iMGVtIik6aS5tY2xhc3M9PT0ibWlubmVyIiYmKHUuYXR0cmlidXRlcy5sc3BhY2U9IjAuMDU1NmVtIix1LmF0dHJpYnV0ZXMud2lkdGg9IiswLjExMTFlbSIpKSx1fUppKHt0eXBlOiJtY2xhc3MiLG5hbWVzOlsiXFxtYXRob3JkIiwiXFxtYXRoYmluIiwiXFxtYXRocmVsIiwiXFxtYXRob3BlbiIsIlxcbWF0aGNsb3NlIiwiXFxtYXRocHVuY3QiLCJcXG1hdGhpbm5lciJdLHByb3BzOntudW1BcmdzOjEscHJpbWl0aXZlOiEwfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWkscD1zWzBdO3JldHVybnt0eXBlOiJtY2xhc3MiLG1vZGU6dS5tb2RlLG1jbGFzczoibSIrZC5zbGljZSg1KSxib2R5OlhmKHApLGlzQ2hhcmFjdGVyQm94OllhLmlzQ2hhcmFjdGVyQm94KHApfX0saHRtbEJ1aWxkZXI6eHplLG1hdGhtbEJ1aWxkZXI6a3plfSk7dmFyIHlRPWk9Pnt2YXIgcz1pLnR5cGU9PT0ib3JkZ3JvdXAiJiZpLmJvZHkubGVuZ3RoP2kuYm9keVswXTppO3JldHVybiBzLnR5cGU9PT0iYXRvbSImJihzLmZhbWlseT09PSJiaW4ifHxzLmZhbWlseT09PSJyZWwiKT8ibSIrcy5mYW1pbHk6Im1vcmQifTtKaSh7dHlwZToibWNsYXNzIixuYW1lczpbIlxcQGJpbnJlbCJdLHByb3BzOntudW1BcmdzOjJ9LGhhbmRsZXIoaSxzKXt2YXJ7cGFyc2VyOnV9PWk7cmV0dXJue3R5cGU6Im1jbGFzcyIsbW9kZTp1Lm1vZGUsbWNsYXNzOnlRKHNbMF0pLGJvZHk6WGYoc1sxXSksaXNDaGFyYWN0ZXJCb3g6WWEuaXNDaGFyYWN0ZXJCb3goc1sxXSl9fX0pLEppKHt0eXBlOiJtY2xhc3MiLG5hbWVzOlsiXFxzdGFja3JlbCIsIlxcb3ZlcnNldCIsIlxcdW5kZXJzZXQiXSxwcm9wczp7bnVtQXJnczoyfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWkscD1zWzFdLHY9c1swXSxiO2QhPT0iXFxzdGFja3JlbCI/Yj15UShwKTpiPSJtcmVsIjt2YXIgeT17dHlwZToib3AiLG1vZGU6cC5tb2RlLGxpbWl0czohMCxhbHdheXNIYW5kbGVTdXBTdWI6ITAscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiExLHN1cHByZXNzQmFzZVNoaWZ0OmQhPT0iXFxzdGFja3JlbCIsYm9keTpYZihwKX0sVD17dHlwZToic3Vwc3ViIixtb2RlOnYubW9kZSxiYXNlOnksc3VwOmQ9PT0iXFx1bmRlcnNldCI/bnVsbDp2LHN1YjpkPT09IlxcdW5kZXJzZXQiP3Y6bnVsbH07cmV0dXJue3R5cGU6Im1jbGFzcyIsbW9kZTp1Lm1vZGUsbWNsYXNzOmIsYm9keTpbVF0saXNDaGFyYWN0ZXJCb3g6WWEuaXNDaGFyYWN0ZXJCb3goVCl9fSxodG1sQnVpbGRlcjp4emUsbWF0aG1sQnVpbGRlcjpremV9KSxKaSh7dHlwZToicG1iIixuYW1lczpbIlxccG1iIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1fT1pO3JldHVybnt0eXBlOiJwbWIiLG1vZGU6dS5tb2RlLG1jbGFzczp5UShzWzBdKSxib2R5OlhmKHNbMF0pfX0saHRtbEJ1aWxkZXIoaSxzKXt2YXIgdT1kMShpLmJvZHkscywhMCksZD16bi5tYWtlU3BhbihbaS5tY2xhc3NdLHUscyk7cmV0dXJuIGQuc3R5bGUudGV4dFNoYWRvdz0iMC4wMmVtIDAuMDFlbSAwLjA0cHgiLGR9LG1hdGhtbEJ1aWxkZXIoaSxzKXt2YXIgdT1qMihpLmJvZHkscyksZD1uZXcgdmkuTWF0aE5vZGUoIm1zdHlsZSIsdSk7cmV0dXJuIGQuc2V0QXR0cmlidXRlKCJzdHlsZSIsInRleHQtc2hhZG93OiAwLjAyZW0gMC4wMWVtIDAuMDRweCIpLGR9fSk7dmFyIEdIdD17Ij4iOiJcXFxcY2RyaWdodGFycm93IiwiPCI6IlxcXFxjZGxlZnRhcnJvdyIsIj0iOiJcXFxcY2Rsb25nZXF1YWwiLEE6IlxcdXBhcnJvdyIsVjoiXFxkb3duYXJyb3ciLCJ8IjoiXFxWZXJ0IiwiLiI6Im5vIGFycm93In0sRXplPSgpPT4oe3R5cGU6InN0eWxpbmciLGJvZHk6W10sbW9kZToibWF0aCIsc3R5bGU6ImRpc3BsYXkifSksVHplPWk9PmkudHlwZT09PSJ0ZXh0b3JkIiYmaS50ZXh0PT09IkAiLEtIdD0oaSxzKT0+KGkudHlwZT09PSJtYXRob3JkInx8aS50eXBlPT09ImF0b20iKSYmaS50ZXh0PT09cztmdW5jdGlvbiBXSHQoaSxzLHUpe3ZhciBkPUdIdFtpXTtzd2l0Y2goZCl7Y2FzZSJcXFxcY2RyaWdodGFycm93IjpjYXNlIlxcXFxjZGxlZnRhcnJvdyI6cmV0dXJuIHUuY2FsbEZ1bmN0aW9uKGQsW3NbMF1dLFtzWzFdXSk7Y2FzZSJcXHVwYXJyb3ciOmNhc2UiXFxkb3duYXJyb3ciOnt2YXIgcD11LmNhbGxGdW5jdGlvbigiXFxcXGNkbGVmdCIsW3NbMF1dLFtdKSx2PXt0eXBlOiJhdG9tIix0ZXh0OmQsbW9kZToibWF0aCIsZmFtaWx5OiJyZWwifSxiPXUuY2FsbEZ1bmN0aW9uKCJcXEJpZyIsW3ZdLFtdKSx5PXUuY2FsbEZ1bmN0aW9uKCJcXFxcY2RyaWdodCIsW3NbMV1dLFtdKSxUPXt0eXBlOiJvcmRncm91cCIsbW9kZToibWF0aCIsYm9keTpbcCxiLHldfTtyZXR1cm4gdS5jYWxsRnVuY3Rpb24oIlxcXFxjZHBhcmVudCIsW1RdLFtdKX1jYXNlIlxcXFxjZGxvbmdlcXVhbCI6cmV0dXJuIHUuY2FsbEZ1bmN0aW9uKCJcXFxcY2Rsb25nZXF1YWwiLFtdLFtdKTtjYXNlIlxcVmVydCI6e3ZhciBfPXt0eXBlOiJ0ZXh0b3JkIix0ZXh0OiJcXFZlcnQiLG1vZGU6Im1hdGgifTtyZXR1cm4gdS5jYWxsRnVuY3Rpb24oIlxcQmlnIixbX10sW10pfWRlZmF1bHQ6cmV0dXJue3R5cGU6InRleHRvcmQiLHRleHQ6IiAiLG1vZGU6Im1hdGgifX19ZnVuY3Rpb24gWUh0KGkpe3ZhciBzPVtdO2ZvcihpLmd1bGxldC5iZWdpbkdyb3VwKCksaS5ndWxsZXQubWFjcm9zLnNldCgiXFxjciIsIlxcXFxcXHJlbGF4IiksaS5ndWxsZXQuYmVnaW5Hcm91cCgpOzspe3MucHVzaChpLnBhcnNlRXhwcmVzc2lvbighMSwiXFxcXCIpKSxpLmd1bGxldC5lbmRHcm91cCgpLGkuZ3VsbGV0LmJlZ2luR3JvdXAoKTt2YXIgdT1pLmZldGNoKCkudGV4dDtpZih1PT09IiYifHx1PT09IlxcXFwiKWkuY29uc3VtZSgpO2Vsc2UgaWYodT09PSJcXGVuZCIpe3Nbcy5sZW5ndGgtMV0ubGVuZ3RoPT09MCYmcy5wb3AoKTticmVha31lbHNlIHRocm93IG5ldyBDaSgiRXhwZWN0ZWQgXFxcXCBvciBcXGNyIG9yIFxcZW5kIixpLm5leHRUb2tlbil9Zm9yKHZhciBkPVtdLHA9W2RdLHY9MDt2PHMubGVuZ3RoO3YrKyl7Zm9yKHZhciBiPXNbdl0seT1FemUoKSxUPTA7VDxiLmxlbmd0aDtUKyspaWYoIVR6ZShiW1RdKSl5LmJvZHkucHVzaChiW1RdKTtlbHNle2QucHVzaCh5KSxUKz0xO3ZhciBfPWRiZShiW1RdKS50ZXh0LEE9bmV3IEFycmF5KDIpO2lmKEFbMF09e3R5cGU6Im9yZGdyb3VwIixtb2RlOiJtYXRoIixib2R5OltdfSxBWzFdPXt0eXBlOiJvcmRncm91cCIsbW9kZToibWF0aCIsYm9keTpbXX0sISgiPXwuIi5pbmRleE9mKF8pPi0xKSlpZigiPD5BViIuaW5kZXhPZihfKT4tMSlmb3IodmFyIFA9MDtQPDI7UCsrKXtmb3IodmFyIFI9ITAsRj1UKzE7RjxiLmxlbmd0aDtGKyspe2lmKEtIdChiW0ZdLF8pKXtSPSExLFQ9RjticmVha31pZihUemUoYltGXSkpdGhyb3cgbmV3IENpKCJNaXNzaW5nIGEgIitfKyIgY2hhcmFjdGVyIHRvIGNvbXBsZXRlIGEgQ0QgYXJyb3cuIixiW0ZdKTtBW1BdLmJvZHkucHVzaChiW0ZdKX1pZihSKXRocm93IG5ldyBDaSgiTWlzc2luZyBhICIrXysiIGNoYXJhY3RlciB0byBjb21wbGV0ZSBhIENEIGFycm93LiIsYltUXSl9ZWxzZSB0aHJvdyBuZXcgQ2koJ0V4cGVjdGVkIG9uZSBvZiAiPD5BVj18LiIgYWZ0ZXIgQCcsYltUXSk7dmFyIGo9V0h0KF8sQSxpKSxLPXt0eXBlOiJzdHlsaW5nIixib2R5OltqXSxtb2RlOiJtYXRoIixzdHlsZToiZGlzcGxheSJ9O2QucHVzaChLKSx5PUV6ZSgpfXYlMj09PTA/ZC5wdXNoKHkpOmQuc2hpZnQoKSxkPVtdLHAucHVzaChkKX1pLmd1bGxldC5lbmRHcm91cCgpLGkuZ3VsbGV0LmVuZEdyb3VwKCk7dmFyIGVlPW5ldyBBcnJheShwWzBdLmxlbmd0aCkuZmlsbCh7dHlwZToiYWxpZ24iLGFsaWduOiJjIixwcmVnYXA6LjI1LHBvc3RnYXA6LjI1fSk7cmV0dXJue3R5cGU6ImFycmF5Iixtb2RlOiJtYXRoIixib2R5OnAsYXJyYXlzdHJldGNoOjEsYWRkSm90OiEwLHJvd0dhcHM6W251bGxdLGNvbHM6ZWUsY29sU2VwYXJhdGlvblR5cGU6IkNEIixoTGluZXNCZWZvcmVSb3c6bmV3IEFycmF5KHAubGVuZ3RoKzEpLmZpbGwoW10pfX1KaSh7dHlwZToiY2RsYWJlbCIsbmFtZXM6WyJcXFxcY2RsZWZ0IiwiXFxcXGNkcmlnaHQiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWk7cmV0dXJue3R5cGU6ImNkbGFiZWwiLG1vZGU6dS5tb2RlLHNpZGU6ZC5zbGljZSg0KSxsYWJlbDpzWzBdfX0saHRtbEJ1aWxkZXIoaSxzKXt2YXIgdT1zLmhhdmluZ1N0eWxlKHMuc3R5bGUuc3VwKCkpLGQ9em4ud3JhcEZyYWdtZW50KHV1KGkubGFiZWwsdSxzKSxzKTtyZXR1cm4gZC5jbGFzc2VzLnB1c2goImNkLWxhYmVsLSIraS5zaWRlKSxkLnN0eWxlLmJvdHRvbT1SaSguOC1kLmRlcHRoKSxkLmhlaWdodD0wLGQuZGVwdGg9MCxkfSxtYXRobWxCdWlsZGVyKGkscyl7dmFyIHU9bmV3IHZpLk1hdGhOb2RlKCJtcm93IixbTGwoaS5sYWJlbCxzKV0pO3JldHVybiB1PW5ldyB2aS5NYXRoTm9kZSgibXBhZGRlZCIsW3VdKSx1LnNldEF0dHJpYnV0ZSgid2lkdGgiLCIwIiksaS5zaWRlPT09ImxlZnQiJiZ1LnNldEF0dHJpYnV0ZSgibHNwYWNlIiwiLTF3aWR0aCIpLHUuc2V0QXR0cmlidXRlKCJ2b2Zmc2V0IiwiMC43ZW0iKSx1PW5ldyB2aS5NYXRoTm9kZSgibXN0eWxlIixbdV0pLHUuc2V0QXR0cmlidXRlKCJkaXNwbGF5c3R5bGUiLCJmYWxzZSIpLHUuc2V0QXR0cmlidXRlKCJzY3JpcHRsZXZlbCIsIjEiKSx1fX0pLEppKHt0eXBlOiJjZGxhYmVscGFyZW50IixuYW1lczpbIlxcXFxjZHBhcmVudCJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXIoaSxzKXt2YXJ7cGFyc2VyOnV9PWk7cmV0dXJue3R5cGU6ImNkbGFiZWxwYXJlbnQiLG1vZGU6dS5tb2RlLGZyYWdtZW50OnNbMF19fSxodG1sQnVpbGRlcihpLHMpe3ZhciB1PXpuLndyYXBGcmFnbWVudCh1dShpLmZyYWdtZW50LHMpLHMpO3JldHVybiB1LmNsYXNzZXMucHVzaCgiY2QtdmVydC1hcnJvdyIpLHV9LG1hdGhtbEJ1aWxkZXIoaSxzKXtyZXR1cm4gbmV3IHZpLk1hdGhOb2RlKCJtcm93IixbTGwoaS5mcmFnbWVudCxzKV0pfX0pLEppKHt0eXBlOiJ0ZXh0b3JkIixuYW1lczpbIlxcQGNoYXIiXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIoaSxzKXtmb3IodmFye3BhcnNlcjp1fT1pLGQ9WW8oc1swXSwib3JkZ3JvdXAiKSxwPWQuYm9keSx2PSIiLGI9MDtiPHAubGVuZ3RoO2IrKyl7dmFyIHk9WW8ocFtiXSwidGV4dG9yZCIpO3YrPXkudGV4dH12YXIgVD1wYXJzZUludCh2KSxfO2lmKGlzTmFOKFQpKXRocm93IG5ldyBDaSgiXFxAY2hhciBoYXMgbm9uLW51bWVyaWMgYXJndW1lbnQgIit2KTtpZihUPDB8fFQ+PTExMTQxMTEpdGhyb3cgbmV3IENpKCJcXEBjaGFyIHdpdGggaW52YWxpZCBjb2RlIHBvaW50ICIrdik7cmV0dXJuIFQ8PTY1NTM1P189U3RyaW5nLmZyb21DaGFyQ29kZShUKTooVC09NjU1MzYsXz1TdHJpbmcuZnJvbUNoYXJDb2RlKChUPj4xMCkrNTUyOTYsKFQmMTAyMykrNTYzMjApKSx7dHlwZToidGV4dG9yZCIsbW9kZTp1Lm1vZGUsdGV4dDpffX19KTt2YXIgQ3plPShpLHMpPT57dmFyIHU9ZDEoaS5ib2R5LHMud2l0aENvbG9yKGkuY29sb3IpLCExKTtyZXR1cm4gem4ubWFrZUZyYWdtZW50KHUpfSxTemU9KGkscyk9Pnt2YXIgdT1qMihpLmJvZHkscy53aXRoQ29sb3IoaS5jb2xvcikpLGQ9bmV3IHZpLk1hdGhOb2RlKCJtc3R5bGUiLHUpO3JldHVybiBkLnNldEF0dHJpYnV0ZSgibWF0aGNvbG9yIixpLmNvbG9yKSxkfTtKaSh7dHlwZToiY29sb3IiLG5hbWVzOlsiXFx0ZXh0Y29sb3IiXSxwcm9wczp7bnVtQXJnczoyLGFsbG93ZWRJblRleHQ6ITAsYXJnVHlwZXM6WyJjb2xvciIsIm9yaWdpbmFsIl19LGhhbmRsZXIoaSxzKXt2YXJ7cGFyc2VyOnV9PWksZD1ZbyhzWzBdLCJjb2xvci10b2tlbiIpLmNvbG9yLHA9c1sxXTtyZXR1cm57dHlwZToiY29sb3IiLG1vZGU6dS5tb2RlLGNvbG9yOmQsYm9keTpYZihwKX19LGh0bWxCdWlsZGVyOkN6ZSxtYXRobWxCdWlsZGVyOlN6ZX0pLEppKHt0eXBlOiJjb2xvciIsbmFtZXM6WyJcXGNvbG9yIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwLGFyZ1R5cGVzOlsiY29sb3IiXX0saGFuZGxlcihpLHMpe3ZhcntwYXJzZXI6dSxicmVha09uVG9rZW5UZXh0OmR9PWkscD1ZbyhzWzBdLCJjb2xvci10b2tlbiIpLmNvbG9yO3UuZ3VsbGV0Lm1hY3Jvcy5zZXQoIlxcY3VycmVudEBjb2xvciIscCk7dmFyIHY9dS5wYXJzZUV4cHJlc3Npb24oITAsZCk7cmV0dXJue3R5cGU6ImNvbG9yIixtb2RlOnUubW9kZSxjb2xvcjpwLGJvZHk6dn19LGh0bWxCdWlsZGVyOkN6ZSxtYXRobWxCdWlsZGVyOlN6ZX0pLEppKHt0eXBlOiJjciIsbmFtZXM6WyJcXFxcIl0scHJvcHM6e251bUFyZ3M6MCxudW1PcHRpb25hbEFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKGkscyx1KXt2YXJ7cGFyc2VyOmR9PWkscD1kLmd1bGxldC5mdXR1cmUoKS50ZXh0PT09IlsiP2QucGFyc2VTaXplR3JvdXAoITApOm51bGwsdj0hZC5zZXR0aW5ncy5kaXNwbGF5TW9kZXx8IWQuc2V0dGluZ3MudXNlU3RyaWN0QmVoYXZpb3IoIm5ld0xpbmVJbkRpc3BsYXlNb2RlIiwiSW4gTGFUZVgsIFxcXFwgb3IgXFxuZXdsaW5lIGRvZXMgbm90aGluZyBpbiBkaXNwbGF5IG1vZGUiKTtyZXR1cm57dHlwZToiY3IiLG1vZGU6ZC5tb2RlLG5ld0xpbmU6dixzaXplOnAmJllvKHAsInNpemUiKS52YWx1ZX19LGh0bWxCdWlsZGVyKGkscyl7dmFyIHU9em4ubWFrZVNwYW4oWyJtc3BhY2UiXSxbXSxzKTtyZXR1cm4gaS5uZXdMaW5lJiYodS5jbGFzc2VzLnB1c2goIm5ld2xpbmUiKSxpLnNpemUmJih1LnN0eWxlLm1hcmdpblRvcD1SaShVaChpLnNpemUscykpKSksdX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PW5ldyB2aS5NYXRoTm9kZSgibXNwYWNlIik7cmV0dXJuIGkubmV3TGluZSYmKHUuc2V0QXR0cmlidXRlKCJsaW5lYnJlYWsiLCJuZXdsaW5lIiksaS5zaXplJiZ1LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixSaShVaChpLnNpemUscykpKSksdX19KTt2YXIgcGJlPXsiXFxnbG9iYWwiOiJcXGdsb2JhbCIsIlxcbG9uZyI6IlxcXFxnbG9iYWxsb25nIiwiXFxcXGdsb2JhbGxvbmciOiJcXFxcZ2xvYmFsbG9uZyIsIlxcZGVmIjoiXFxnZGVmIiwiXFxnZGVmIjoiXFxnZGVmIiwiXFxlZGVmIjoiXFx4ZGVmIiwiXFx4ZGVmIjoiXFx4ZGVmIiwiXFxsZXQiOiJcXFxcZ2xvYmFsbGV0IiwiXFxmdXR1cmVsZXQiOiJcXFxcZ2xvYmFsZnV0dXJlIn0sX3plPWk9Pnt2YXIgcz1pLnRleHQ7aWYoL14oPzpbXFx7fSQmI15fXXxFT0YpJC8udGVzdChzKSl0aHJvdyBuZXcgQ2koIkV4cGVjdGVkIGEgY29udHJvbCBzZXF1ZW5jZSIsaSk7cmV0dXJuIHN9LFhIdD1pPT57dmFyIHM9aS5ndWxsZXQucG9wVG9rZW4oKTtyZXR1cm4gcy50ZXh0PT09Ij0iJiYocz1pLmd1bGxldC5wb3BUb2tlbigpLHMudGV4dD09PSIgIiYmKHM9aS5ndWxsZXQucG9wVG9rZW4oKSkpLHN9LEF6ZT0oaSxzLHUsZCk9Pnt2YXIgcD1pLmd1bGxldC5tYWNyb3MuZ2V0KHUudGV4dCk7cD09bnVsbCYmKHUubm9leHBhbmQ9ITAscD17dG9rZW5zOlt1XSxudW1BcmdzOjAsdW5leHBhbmRhYmxlOiFpLmd1bGxldC5pc0V4cGFuZGFibGUodS50ZXh0KX0pLGkuZ3VsbGV0Lm1hY3Jvcy5zZXQocyxwLGQpfTtKaSh7dHlwZToiaW50ZXJuYWwiLG5hbWVzOlsiXFxnbG9iYWwiLCJcXGxvbmciLCJcXFxcZ2xvYmFsbG9uZyJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcihpKXt2YXJ7cGFyc2VyOnMsZnVuY05hbWU6dX09aTtzLmNvbnN1bWVTcGFjZXMoKTt2YXIgZD1zLmZldGNoKCk7aWYocGJlW2QudGV4dF0pcmV0dXJuKHU9PT0iXFxnbG9iYWwifHx1PT09IlxcXFxnbG9iYWxsb25nIikmJihkLnRleHQ9cGJlW2QudGV4dF0pLFlvKHMucGFyc2VGdW5jdGlvbigpLCJpbnRlcm5hbCIpO3Rocm93IG5ldyBDaSgiSW52YWxpZCB0b2tlbiBhZnRlciBtYWNybyBwcmVmaXgiLGQpfX0pLEppKHt0eXBlOiJpbnRlcm5hbCIsbmFtZXM6WyJcXGRlZiIsIlxcZ2RlZiIsIlxcZWRlZiIsIlxceGRlZiJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMCxwcmltaXRpdmU6ITB9LGhhbmRsZXIoaSl7dmFye3BhcnNlcjpzLGZ1bmNOYW1lOnV9PWksZD1zLmd1bGxldC5wb3BUb2tlbigpLHA9ZC50ZXh0O2lmKC9eKD86W1xce30kJiNeX118RU9GKSQvLnRlc3QocCkpdGhyb3cgbmV3IENpKCJFeHBlY3RlZCBhIGNvbnRyb2wgc2VxdWVuY2UiLGQpO2Zvcih2YXIgdj0wLGIseT1bW11dO3MuZ3VsbGV0LmZ1dHVyZSgpLnRleHQhPT0ieyI7KWlmKGQ9cy5ndWxsZXQucG9wVG9rZW4oKSxkLnRleHQ9PT0iIyIpe2lmKHMuZ3VsbGV0LmZ1dHVyZSgpLnRleHQ9PT0ieyIpe2I9cy5ndWxsZXQuZnV0dXJlKCkseVt2XS5wdXNoKCJ7Iik7YnJlYWt9aWYoZD1zLmd1bGxldC5wb3BUb2tlbigpLCEvXlsxLTldJC8udGVzdChkLnRleHQpKXRocm93IG5ldyBDaSgnSW52YWxpZCBhcmd1bWVudCBudW1iZXIgIicrZC50ZXh0KyciJyk7aWYocGFyc2VJbnQoZC50ZXh0KSE9PXYrMSl0aHJvdyBuZXcgQ2koJ0FyZ3VtZW50IG51bWJlciAiJytkLnRleHQrJyIgb3V0IG9mIG9yZGVyJyk7disrLHkucHVzaChbXSl9ZWxzZXtpZihkLnRleHQ9PT0iRU9GIil0aHJvdyBuZXcgQ2koIkV4cGVjdGVkIGEgbWFjcm8gZGVmaW5pdGlvbiIpO3lbdl0ucHVzaChkLnRleHQpfXZhcnt0b2tlbnM6VH09cy5ndWxsZXQuY29uc3VtZUFyZygpO3JldHVybiBiJiZULnVuc2hpZnQoYiksKHU9PT0iXFxlZGVmInx8dT09PSJcXHhkZWYiKSYmKFQ9cy5ndWxsZXQuZXhwYW5kVG9rZW5zKFQpLFQucmV2ZXJzZSgpKSxzLmd1bGxldC5tYWNyb3Muc2V0KHAse3Rva2VuczpULG51bUFyZ3M6dixkZWxpbWl0ZXJzOnl9LHU9PT1wYmVbdV0pLHt0eXBlOiJpbnRlcm5hbCIsbW9kZTpzLm1vZGV9fX0pLEppKHt0eXBlOiJpbnRlcm5hbCIsbmFtZXM6WyJcXGxldCIsIlxcXFxnbG9iYWxsZXQiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITAscHJpbWl0aXZlOiEwfSxoYW5kbGVyKGkpe3ZhcntwYXJzZXI6cyxmdW5jTmFtZTp1fT1pLGQ9X3plKHMuZ3VsbGV0LnBvcFRva2VuKCkpO3MuZ3VsbGV0LmNvbnN1bWVTcGFjZXMoKTt2YXIgcD1YSHQocyk7cmV0dXJuIEF6ZShzLGQscCx1PT09IlxcXFxnbG9iYWxsZXQiKSx7dHlwZToiaW50ZXJuYWwiLG1vZGU6cy5tb2RlfX19KSxKaSh7dHlwZToiaW50ZXJuYWwiLG5hbWVzOlsiXFxmdXR1cmVsZXQiLCJcXFxcZ2xvYmFsZnV0dXJlIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLHByaW1pdGl2ZTohMH0saGFuZGxlcihpKXt2YXJ7cGFyc2VyOnMsZnVuY05hbWU6dX09aSxkPV96ZShzLmd1bGxldC5wb3BUb2tlbigpKSxwPXMuZ3VsbGV0LnBvcFRva2VuKCksdj1zLmd1bGxldC5wb3BUb2tlbigpO3JldHVybiBBemUocyxkLHYsdT09PSJcXFxcZ2xvYmFsZnV0dXJlIikscy5ndWxsZXQucHVzaFRva2VuKHYpLHMuZ3VsbGV0LnB1c2hUb2tlbihwKSx7dHlwZToiaW50ZXJuYWwiLG1vZGU6cy5tb2RlfX19KTt2YXIgaFI9ZnVuY3Rpb24ocyx1LGQpe3ZhciBwPVVsLm1hdGhbc10mJlVsLm1hdGhbc10ucmVwbGFjZSx2PUoyZShwfHxzLHUsZCk7aWYoIXYpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzeW1ib2wgIitzKyIgYW5kIGZvbnQgc2l6ZSAiK3UrIi4iKTtyZXR1cm4gdn0sYmJlPWZ1bmN0aW9uKHMsdSxkLHApe3ZhciB2PWQuaGF2aW5nQmFzZVN0eWxlKHUpLGI9em4ubWFrZVNwYW4ocC5jb25jYXQodi5zaXppbmdDbGFzc2VzKGQpKSxbc10sZCkseT12LnNpemVNdWx0aXBsaWVyL2Quc2l6ZU11bHRpcGxpZXI7cmV0dXJuIGIuaGVpZ2h0Kj15LGIuZGVwdGgqPXksYi5tYXhGb250U2l6ZT12LnNpemVNdWx0aXBsaWVyLGJ9LEx6ZT1mdW5jdGlvbihzLHUsZCl7dmFyIHA9dS5oYXZpbmdCYXNlU3R5bGUoZCksdj0oMS11LnNpemVNdWx0aXBsaWVyL3Auc2l6ZU11bHRpcGxpZXIpKnUuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O3MuY2xhc3Nlcy5wdXNoKCJkZWxpbWNlbnRlciIpLHMuc3R5bGUudG9wPVJpKHYpLHMuaGVpZ2h0LT12LHMuZGVwdGgrPXZ9LFFIdD1mdW5jdGlvbihzLHUsZCxwLHYsYil7dmFyIHk9em4ubWFrZVN5bWJvbChzLCJNYWluLVJlZ3VsYXIiLHYscCksVD1iYmUoeSx1LHAsYik7cmV0dXJuIGQmJkx6ZShULHAsdSksVH0sSkh0PWZ1bmN0aW9uKHMsdSxkLHApe3JldHVybiB6bi5tYWtlU3ltYm9sKHMsIlNpemUiK3UrIi1SZWd1bGFyIixkLHApfSxNemU9ZnVuY3Rpb24ocyx1LGQscCx2LGIpe3ZhciB5PUpIdChzLHUsdixwKSxUPWJiZSh6bi5tYWtlU3BhbihbImRlbGltc2l6aW5nIiwic2l6ZSIrdV0sW3ldLHApLFRhLlRFWFQscCxiKTtyZXR1cm4gZCYmTHplKFQscCxUYS5URVhUKSxUfSxtYmU9ZnVuY3Rpb24ocyx1LGQpe3ZhciBwO3U9PT0iU2l6ZTEtUmVndWxhciI/cD0iZGVsaW0tc2l6ZTEiOnA9ImRlbGltLXNpemU0Ijt2YXIgdj16bi5tYWtlU3BhbihbImRlbGltc2l6aW5naW5uZXIiLHBdLFt6bi5tYWtlU3BhbihbXSxbem4ubWFrZVN5bWJvbChzLHUsZCldKV0pO3JldHVybnt0eXBlOiJlbGVtIixlbGVtOnZ9fSx2YmU9ZnVuY3Rpb24ocyx1LGQpe3ZhciBwPUs0WyJTaXplNC1SZWd1bGFyIl1bcy5jaGFyQ29kZUF0KDApXT9LNFsiU2l6ZTQtUmVndWxhciJdW3MuY2hhckNvZGVBdCgwKV1bNF06SzRbIlNpemUxLVJlZ3VsYXIiXVtzLmNoYXJDb2RlQXQoMCldWzRdLHY9bmV3IEM5KCJpbm5lciIsaUh0KHMsTWF0aC5yb3VuZCgxZTMqdSkpKSxiPW5ldyBENyhbdl0se3dpZHRoOlJpKHApLGhlaWdodDpSaSh1KSxzdHlsZToid2lkdGg6IitSaShwKSx2aWV3Qm94OiIwIDAgIisxZTMqcCsiICIrTWF0aC5yb3VuZCgxZTMqdSkscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pbllNaW4ifSkseT16bi5tYWtlU3ZnU3BhbihbXSxbYl0sZCk7cmV0dXJuIHkuaGVpZ2h0PXUseS5zdHlsZS5oZWlnaHQ9UmkodSkseS5zdHlsZS53aWR0aD1SaShwKSx7dHlwZToiZWxlbSIsZWxlbTp5fX0sd2JlPS4wMDgseFE9e3R5cGU6Imtlcm4iLHNpemU6LTEqd2JlfSxaSHQ9WyJ8IiwiXFxsdmVydCIsIlxccnZlcnQiLCJcXHZlcnQiXSxlVnQ9WyJcXHwiLCJcXGxWZXJ0IiwiXFxyVmVydCIsIlxcVmVydCJdLER6ZT1mdW5jdGlvbihzLHUsZCxwLHYsYil7dmFyIHksVCxfLEEsUD0iIixSPTA7eT1fPUE9cyxUPW51bGw7dmFyIEY9IlNpemUxLVJlZ3VsYXIiO3M9PT0iXFx1cGFycm93Ij9fPUE9IuKPkCI6cz09PSJcXFVwYXJyb3ciP189QT0i4oCWIjpzPT09IlxcZG93bmFycm93Ij95PV89IuKPkCI6cz09PSJcXERvd25hcnJvdyI/eT1fPSLigJYiOnM9PT0iXFx1cGRvd25hcnJvdyI/KHk9IlxcdXBhcnJvdyIsXz0i4o+QIixBPSJcXGRvd25hcnJvdyIpOnM9PT0iXFxVcGRvd25hcnJvdyI/KHk9IlxcVXBhcnJvdyIsXz0i4oCWIixBPSJcXERvd25hcnJvdyIpOllhLmNvbnRhaW5zKFpIdCxzKT8oXz0i4oijIixQPSJ2ZXJ0IixSPTMzMyk6WWEuY29udGFpbnMoZVZ0LHMpPyhfPSLiiKUiLFA9ImRvdWJsZXZlcnQiLFI9NTU2KTpzPT09IlsifHxzPT09IlxcbGJyYWNrIj8oeT0i4o6hIixfPSLijqIiLEE9IuKOoyIsRj0iU2l6ZTQtUmVndWxhciIsUD0ibGJyYWNrIixSPTY2Nyk6cz09PSJdInx8cz09PSJcXHJicmFjayI/KHk9IuKOpCIsXz0i4o6lIixBPSLijqYiLEY9IlNpemU0LVJlZ3VsYXIiLFA9InJicmFjayIsUj02NjcpOnM9PT0iXFxsZmxvb3IifHxzPT09IuKMiiI/KF89eT0i4o6iIixBPSLijqMiLEY9IlNpemU0LVJlZ3VsYXIiLFA9ImxmbG9vciIsUj02NjcpOnM9PT0iXFxsY2VpbCJ8fHM9PT0i4oyIIj8oeT0i4o6hIixfPUE9IuKOoiIsRj0iU2l6ZTQtUmVndWxhciIsUD0ibGNlaWwiLFI9NjY3KTpzPT09IlxccmZsb29yInx8cz09PSLijIsiPyhfPXk9IuKOpSIsQT0i4o6mIixGPSJTaXplNC1SZWd1bGFyIixQPSJyZmxvb3IiLFI9NjY3KTpzPT09IlxccmNlaWwifHxzPT09IuKMiSI/KHk9IuKOpCIsXz1BPSLijqUiLEY9IlNpemU0LVJlZ3VsYXIiLFA9InJjZWlsIixSPTY2Nyk6cz09PSIoInx8cz09PSJcXGxwYXJlbiI/KHk9IuKOmyIsXz0i4o6cIixBPSLijp0iLEY9IlNpemU0LVJlZ3VsYXIiLFA9ImxwYXJlbiIsUj04NzUpOnM9PT0iKSJ8fHM9PT0iXFxycGFyZW4iPyh5PSLijp4iLF89IuKOnyIsQT0i4o6gIixGPSJTaXplNC1SZWd1bGFyIixQPSJycGFyZW4iLFI9ODc1KTpzPT09IlxceyJ8fHM9PT0iXFxsYnJhY2UiPyh5PSLijqciLFQ9IuKOqCIsQT0i4o6pIixfPSLijqoiLEY9IlNpemU0LVJlZ3VsYXIiKTpzPT09IlxcfSJ8fHM9PT0iXFxyYnJhY2UiPyh5PSLijqsiLFQ9IuKOrCIsQT0i4o6tIixfPSLijqoiLEY9IlNpemU0LVJlZ3VsYXIiKTpzPT09IlxcbGdyb3VwInx8cz09PSLin64iPyh5PSLijqciLEE9IuKOqSIsXz0i4o6qIixGPSJTaXplNC1SZWd1bGFyIik6cz09PSJcXHJncm91cCJ8fHM9PT0i4p+vIj8oeT0i4o6rIixBPSLijq0iLF89IuKOqiIsRj0iU2l6ZTQtUmVndWxhciIpOnM9PT0iXFxsbW91c3RhY2hlInx8cz09PSLijrAiPyh5PSLijqciLEE9IuKOrSIsXz0i4o6qIixGPSJTaXplNC1SZWd1bGFyIik6KHM9PT0iXFxybW91c3RhY2hlInx8cz09PSLijrEiKSYmKHk9IuKOqyIsQT0i4o6pIixfPSLijqoiLEY9IlNpemU0LVJlZ3VsYXIiKTt2YXIgaj1oUih5LEYsdiksSz1qLmhlaWdodCtqLmRlcHRoLGVlPWhSKF8sRix2KSxpZT1lZS5oZWlnaHQrZWUuZGVwdGgsb2U9aFIoQSxGLHYpLHBlPW9lLmhlaWdodCtvZS5kZXB0aCxiZT0wLGFlPTE7aWYoVCE9PW51bGwpe3ZhciBuZT1oUihULEYsdik7YmU9bmUuaGVpZ2h0K25lLmRlcHRoLGFlPTJ9dmFyIHNlPUsrcGUrYmUsZGU9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHUtc2UpLyhhZSppZSkpKSxYPXNlK2RlKmFlKmllLGdlPXAuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O2QmJihnZSo9cC5zaXplTXVsdGlwbGllcik7dmFyIFc9WC8yLWdlLHhlPVtdO2lmKFAubGVuZ3RoPjApe3ZhciBVPVgtSy1wZSxGZT1NYXRoLnJvdW5kKFgqMWUzKSxQZT1zSHQoUCxNYXRoLnJvdW5kKFUqMWUzKSksamU9bmV3IEM5KFAsUGUpLEllPShSLzFlMykudG9GaXhlZCgzKSsiZW0iLFNlPShGZS8xZTMpLnRvRml4ZWQoMykrImVtIixDZT1uZXcgRDcoW2plXSx7d2lkdGg6SWUsaGVpZ2h0OlNlLHZpZXdCb3g6IjAgMCAiK1IrIiAiK0ZlfSksa2U9em4ubWFrZVN2Z1NwYW4oW10sW0NlXSxwKTtrZS5oZWlnaHQ9RmUvMWUzLGtlLnN0eWxlLndpZHRoPUllLGtlLnN0eWxlLmhlaWdodD1TZSx4ZS5wdXNoKHt0eXBlOiJlbGVtIixlbGVtOmtlfSl9ZWxzZXtpZih4ZS5wdXNoKG1iZShBLEYsdikpLHhlLnB1c2goeFEpLFQ9PT1udWxsKXt2YXIgS2U9WC1LLXBlKzIqd2JlO3hlLnB1c2godmJlKF8sS2UscCkpfWVsc2V7dmFyIEZ0PShYLUstcGUtYmUpLzIrMip3YmU7eGUucHVzaCh2YmUoXyxGdCxwKSkseGUucHVzaCh4USkseGUucHVzaChtYmUoVCxGLHYpKSx4ZS5wdXNoKHhRKSx4ZS5wdXNoKHZiZShfLEZ0LHApKX14ZS5wdXNoKHhRKSx4ZS5wdXNoKG1iZSh5LEYsdikpfXZhciBOZT1wLmhhdmluZ0Jhc2VTdHlsZShUYS5URVhUKSxnbj16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiYm90dG9tIixwb3NpdGlvbkRhdGE6VyxjaGlsZHJlbjp4ZX0sTmUpO3JldHVybiBiYmUoem4ubWFrZVNwYW4oWyJkZWxpbXNpemluZyIsIm11bHQiXSxbZ25dLE5lKSxUYS5URVhULHAsYil9LHliZT04MCx4YmU9LjA4LGtiZT1mdW5jdGlvbihzLHUsZCxwLHYpe3ZhciBiPXJIdChzLHAsZCkseT1uZXcgQzkocyxiKSxUPW5ldyBENyhbeV0se3dpZHRoOiI0MDBlbSIsaGVpZ2h0OlJpKHUpLHZpZXdCb3g6IjAgMCA0MDAwMDAgIitkLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaW5ZTWluIHNsaWNlIn0pO3JldHVybiB6bi5tYWtlU3ZnU3BhbihbImhpZGUtdGFpbCJdLFtUXSx2KX0sdFZ0PWZ1bmN0aW9uKHMsdSl7dmFyIGQ9dS5oYXZpbmdCYXNlU2l6aW5nKCkscD1QemUoIlxcc3VyZCIscypkLnNpemVNdWx0aXBsaWVyLE56ZSxkKSx2PWQuc2l6ZU11bHRpcGxpZXIsYj1NYXRoLm1heCgwLHUubWluUnVsZVRoaWNrbmVzcy11LmZvbnRNZXRyaWNzKCkuc3FydFJ1bGVUaGlja25lc3MpLHksVD0wLF89MCxBPTAsUDtyZXR1cm4gcC50eXBlPT09InNtYWxsIj8oQT0xZTMrMWUzKmIreWJlLHM8MT92PTE6czwxLjQmJih2PS43KSxUPSgxK2IreGJlKS92LF89KDErYikvdix5PWtiZSgic3FydE1haW4iLFQsQSxiLHUpLHkuc3R5bGUubWluV2lkdGg9IjAuODUzZW0iLFA9LjgzMy92KTpwLnR5cGU9PT0ibGFyZ2UiPyhBPSgxZTMreWJlKSpmUltwLnNpemVdLF89KGZSW3Auc2l6ZV0rYikvdixUPShmUltwLnNpemVdK2IreGJlKS92LHk9a2JlKCJzcXJ0U2l6ZSIrcC5zaXplLFQsQSxiLHUpLHkuc3R5bGUubWluV2lkdGg9IjEuMDJlbSIsUD0xL3YpOihUPXMrYit4YmUsXz1zK2IsQT1NYXRoLmZsb29yKDFlMypzK2IpK3liZSx5PWtiZSgic3FydFRhbGwiLFQsQSxiLHUpLHkuc3R5bGUubWluV2lkdGg9IjAuNzQyZW0iLFA9MS4wNTYpLHkuaGVpZ2h0PV8seS5zdHlsZS5oZWlnaHQ9UmkoVCkse3NwYW46eSxhZHZhbmNlV2lkdGg6UCxydWxlV2lkdGg6KHUuZm9udE1ldHJpY3MoKS5zcXJ0UnVsZVRoaWNrbmVzcytiKSp2fX0sSXplPVsiKCIsIlxcbHBhcmVuIiwiKSIsIlxccnBhcmVuIiwiWyIsIlxcbGJyYWNrIiwiXSIsIlxccmJyYWNrIiwiXFx7IiwiXFxsYnJhY2UiLCJcXH0iLCJcXHJicmFjZSIsIlxcbGZsb29yIiwiXFxyZmxvb3IiLCLijIoiLCLijIsiLCJcXGxjZWlsIiwiXFxyY2VpbCIsIuKMiCIsIuKMiSIsIlxcc3VyZCJdLG5WdD1bIlxcdXBhcnJvdyIsIlxcZG93bmFycm93IiwiXFx1cGRvd25hcnJvdyIsIlxcVXBhcnJvdyIsIlxcRG93bmFycm93IiwiXFxVcGRvd25hcnJvdyIsInwiLCJcXHwiLCJcXHZlcnQiLCJcXFZlcnQiLCJcXGx2ZXJ0IiwiXFxydmVydCIsIlxcbFZlcnQiLCJcXHJWZXJ0IiwiXFxsZ3JvdXAiLCJcXHJncm91cCIsIuKfriIsIuKfryIsIlxcbG1vdXN0YWNoZSIsIlxccm1vdXN0YWNoZSIsIuKOsCIsIuKOsSJdLE96ZT1bIjwiLCI+IiwiXFxsYW5nbGUiLCJcXHJhbmdsZSIsIi8iLCJcXGJhY2tzbGFzaCIsIlxcbHQiLCJcXGd0Il0sZlI9WzAsMS4yLDEuOCwyLjQsM10sclZ0PWZ1bmN0aW9uKHMsdSxkLHAsdil7aWYocz09PSI8Inx8cz09PSJcXGx0Inx8cz09PSLin6giP3M9IlxcbGFuZ2xlIjoocz09PSI+Inx8cz09PSJcXGd0Inx8cz09PSLin6kiKSYmKHM9IlxccmFuZ2xlIiksWWEuY29udGFpbnMoSXplLHMpfHxZYS5jb250YWlucyhPemUscykpcmV0dXJuIE16ZShzLHUsITEsZCxwLHYpO2lmKFlhLmNvbnRhaW5zKG5WdCxzKSlyZXR1cm4gRHplKHMsZlJbdV0sITEsZCxwLHYpO3Rocm93IG5ldyBDaSgiSWxsZWdhbCBkZWxpbWl0ZXI6ICciK3MrIiciKX0saVZ0PVt7dHlwZToic21hbGwiLHN0eWxlOlRhLlNDUklQVFNDUklQVH0se3R5cGU6InNtYWxsIixzdHlsZTpUYS5TQ1JJUFR9LHt0eXBlOiJzbWFsbCIsc3R5bGU6VGEuVEVYVH0se3R5cGU6ImxhcmdlIixzaXplOjF9LHt0eXBlOiJsYXJnZSIsc2l6ZToyfSx7dHlwZToibGFyZ2UiLHNpemU6M30se3R5cGU6ImxhcmdlIixzaXplOjR9XSxzVnQ9W3t0eXBlOiJzbWFsbCIsc3R5bGU6VGEuU0NSSVBUU0NSSVBUfSx7dHlwZToic21hbGwiLHN0eWxlOlRhLlNDUklQVH0se3R5cGU6InNtYWxsIixzdHlsZTpUYS5URVhUfSx7dHlwZToic3RhY2sifV0sTnplPVt7dHlwZToic21hbGwiLHN0eWxlOlRhLlNDUklQVFNDUklQVH0se3R5cGU6InNtYWxsIixzdHlsZTpUYS5TQ1JJUFR9LHt0eXBlOiJzbWFsbCIsc3R5bGU6VGEuVEVYVH0se3R5cGU6ImxhcmdlIixzaXplOjF9LHt0eXBlOiJsYXJnZSIsc2l6ZToyfSx7dHlwZToibGFyZ2UiLHNpemU6M30se3R5cGU6ImxhcmdlIixzaXplOjR9LHt0eXBlOiJzdGFjayJ9XSxhVnQ9ZnVuY3Rpb24ocyl7aWYocy50eXBlPT09InNtYWxsIilyZXR1cm4iTWFpbi1SZWd1bGFyIjtpZihzLnR5cGU9PT0ibGFyZ2UiKXJldHVybiJTaXplIitzLnNpemUrIi1SZWd1bGFyIjtpZihzLnR5cGU9PT0ic3RhY2siKXJldHVybiJTaXplNC1SZWd1bGFyIjt0aHJvdyBuZXcgRXJyb3IoIkFkZCBzdXBwb3J0IGZvciBkZWxpbSB0eXBlICciK3MudHlwZSsiJyBoZXJlLiIpfSxQemU9ZnVuY3Rpb24ocyx1LGQscCl7Zm9yKHZhciB2PU1hdGgubWluKDIsMy1wLnN0eWxlLnNpemUpLGI9djtiPGQubGVuZ3RoJiZkW2JdLnR5cGUhPT0ic3RhY2siO2IrKyl7dmFyIHk9aFIocyxhVnQoZFtiXSksIm1hdGgiKSxUPXkuaGVpZ2h0K3kuZGVwdGg7aWYoZFtiXS50eXBlPT09InNtYWxsIil7dmFyIF89cC5oYXZpbmdCYXNlU3R5bGUoZFtiXS5zdHlsZSk7VCo9Xy5zaXplTXVsdGlwbGllcn1pZihUPnUpcmV0dXJuIGRbYl19cmV0dXJuIGRbZC5sZW5ndGgtMV19LEJ6ZT1mdW5jdGlvbihzLHUsZCxwLHYsYil7cz09PSI8Inx8cz09PSJcXGx0Inx8cz09PSLin6giP3M9IlxcbGFuZ2xlIjoocz09PSI+Inx8cz09PSJcXGd0Inx8cz09PSLin6kiKSYmKHM9IlxccmFuZ2xlIik7dmFyIHk7WWEuY29udGFpbnMoT3plLHMpP3k9aVZ0OllhLmNvbnRhaW5zKEl6ZSxzKT95PU56ZTp5PXNWdDt2YXIgVD1QemUocyx1LHkscCk7cmV0dXJuIFQudHlwZT09PSJzbWFsbCI/UUh0KHMsVC5zdHlsZSxkLHAsdixiKTpULnR5cGU9PT0ibGFyZ2UiP016ZShzLFQuc2l6ZSxkLHAsdixiKTpEemUocyx1LGQscCx2LGIpfSxvVnQ9ZnVuY3Rpb24ocyx1LGQscCx2LGIpe3ZhciB5PXAuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0KnAuc2l6ZU11bHRpcGxpZXIsVD05MDEsXz01L3AuZm9udE1ldHJpY3MoKS5wdFBlckVtLEE9TWF0aC5tYXgodS15LGQreSksUD1NYXRoLm1heChBLzUwMCpULDIqQS1fKTtyZXR1cm4gQnplKHMsUCwhMCxwLHYsYil9LEI3PXtzcXJ0SW1hZ2U6dFZ0LHNpemVkRGVsaW06clZ0LHNpemVUb01heEhlaWdodDpmUixjdXN0b21TaXplZERlbGltOkJ6ZSxsZWZ0UmlnaHREZWxpbTpvVnR9LEZ6ZT17IlxcYmlnbCI6e21jbGFzczoibW9wZW4iLHNpemU6MX0sIlxcQmlnbCI6e21jbGFzczoibW9wZW4iLHNpemU6Mn0sIlxcYmlnZ2wiOnttY2xhc3M6Im1vcGVuIixzaXplOjN9LCJcXEJpZ2dsIjp7bWNsYXNzOiJtb3BlbiIsc2l6ZTo0fSwiXFxiaWdyIjp7bWNsYXNzOiJtY2xvc2UiLHNpemU6MX0sIlxcQmlnciI6e21jbGFzczoibWNsb3NlIixzaXplOjJ9LCJcXGJpZ2dyIjp7bWNsYXNzOiJtY2xvc2UiLHNpemU6M30sIlxcQmlnZ3IiOnttY2xhc3M6Im1jbG9zZSIsc2l6ZTo0fSwiXFxiaWdtIjp7bWNsYXNzOiJtcmVsIixzaXplOjF9LCJcXEJpZ20iOnttY2xhc3M6Im1yZWwiLHNpemU6Mn0sIlxcYmlnZ20iOnttY2xhc3M6Im1yZWwiLHNpemU6M30sIlxcQmlnZ20iOnttY2xhc3M6Im1yZWwiLHNpemU6NH0sIlxcYmlnIjp7bWNsYXNzOiJtb3JkIixzaXplOjF9LCJcXEJpZyI6e21jbGFzczoibW9yZCIsc2l6ZToyfSwiXFxiaWdnIjp7bWNsYXNzOiJtb3JkIixzaXplOjN9LCJcXEJpZ2ciOnttY2xhc3M6Im1vcmQiLHNpemU6NH19LGNWdD1bIigiLCJcXGxwYXJlbiIsIikiLCJcXHJwYXJlbiIsIlsiLCJcXGxicmFjayIsIl0iLCJcXHJicmFjayIsIlxceyIsIlxcbGJyYWNlIiwiXFx9IiwiXFxyYnJhY2UiLCJcXGxmbG9vciIsIlxccmZsb29yIiwi4oyKIiwi4oyLIiwiXFxsY2VpbCIsIlxccmNlaWwiLCLijIgiLCLijIkiLCI8IiwiPiIsIlxcbGFuZ2xlIiwi4p+oIiwiXFxyYW5nbGUiLCLin6kiLCJcXGx0IiwiXFxndCIsIlxcbHZlcnQiLCJcXHJ2ZXJ0IiwiXFxsVmVydCIsIlxcclZlcnQiLCJcXGxncm91cCIsIlxccmdyb3VwIiwi4p+uIiwi4p+vIiwiXFxsbW91c3RhY2hlIiwiXFxybW91c3RhY2hlIiwi4o6wIiwi4o6xIiwiLyIsIlxcYmFja3NsYXNoIiwifCIsIlxcdmVydCIsIlxcfCIsIlxcVmVydCIsIlxcdXBhcnJvdyIsIlxcVXBhcnJvdyIsIlxcZG93bmFycm93IiwiXFxEb3duYXJyb3ciLCJcXHVwZG93bmFycm93IiwiXFxVcGRvd25hcnJvdyIsIi4iXTtmdW5jdGlvbiBrUShpLHMpe3ZhciB1PXZRKGkpO2lmKHUmJllhLmNvbnRhaW5zKGNWdCx1LnRleHQpKXJldHVybiB1O3Rocm93IHU/bmV3IENpKCJJbnZhbGlkIGRlbGltaXRlciAnIit1LnRleHQrIicgYWZ0ZXIgJyIrcy5mdW5jTmFtZSsiJyIsaSk6bmV3IENpKCJJbnZhbGlkIGRlbGltaXRlciB0eXBlICciK2kudHlwZSsiJyIsaSl9Smkoe3R5cGU6ImRlbGltc2l6aW5nIixuYW1lczpbIlxcYmlnbCIsIlxcQmlnbCIsIlxcYmlnZ2wiLCJcXEJpZ2dsIiwiXFxiaWdyIiwiXFxCaWdyIiwiXFxiaWdnciIsIlxcQmlnZ3IiLCJcXGJpZ20iLCJcXEJpZ20iLCJcXGJpZ2dtIiwiXFxCaWdnbSIsIlxcYmlnIiwiXFxCaWciLCJcXGJpZ2ciLCJcXEJpZ2ciXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsicHJpbWl0aXZlIl19LGhhbmRsZXI6KGkscyk9Pnt2YXIgdT1rUShzWzBdLGkpO3JldHVybnt0eXBlOiJkZWxpbXNpemluZyIsbW9kZTppLnBhcnNlci5tb2RlLHNpemU6RnplW2kuZnVuY05hbWVdLnNpemUsbWNsYXNzOkZ6ZVtpLmZ1bmNOYW1lXS5tY2xhc3MsZGVsaW06dS50ZXh0fX0saHRtbEJ1aWxkZXI6KGkscyk9PmkuZGVsaW09PT0iLiI/em4ubWFrZVNwYW4oW2kubWNsYXNzXSk6Qjcuc2l6ZWREZWxpbShpLmRlbGltLGkuc2l6ZSxzLGkubW9kZSxbaS5tY2xhc3NdKSxtYXRobWxCdWlsZGVyOmk9Pnt2YXIgcz1bXTtpLmRlbGltIT09Ii4iJiZzLnB1c2goUnYoaS5kZWxpbSxpLm1vZGUpKTt2YXIgdT1uZXcgdmkuTWF0aE5vZGUoIm1vIixzKTtpLm1jbGFzcz09PSJtb3BlbiJ8fGkubWNsYXNzPT09Im1jbG9zZSI/dS5zZXRBdHRyaWJ1dGUoImZlbmNlIiwidHJ1ZSIpOnUuc2V0QXR0cmlidXRlKCJmZW5jZSIsImZhbHNlIiksdS5zZXRBdHRyaWJ1dGUoInN0cmV0Y2h5IiwidHJ1ZSIpO3ZhciBkPVJpKEI3LnNpemVUb01heEhlaWdodFtpLnNpemVdKTtyZXR1cm4gdS5zZXRBdHRyaWJ1dGUoIm1pbnNpemUiLGQpLHUuc2V0QXR0cmlidXRlKCJtYXhzaXplIixkKSx1fX0pO2Z1bmN0aW9uIFJ6ZShpKXtpZighaS5ib2R5KXRocm93IG5ldyBFcnJvcigiQnVnOiBUaGUgbGVmdHJpZ2h0IFBhcnNlTm9kZSB3YXNuJ3QgZnVsbHkgcGFyc2VkLiIpfUppKHt0eXBlOiJsZWZ0cmlnaHQtcmlnaHQiLG5hbWVzOlsiXFxyaWdodCJdLHByb3BzOntudW1BcmdzOjEscHJpbWl0aXZlOiEwfSxoYW5kbGVyOihpLHMpPT57dmFyIHU9aS5wYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5nZXQoIlxcY3VycmVudEBjb2xvciIpO2lmKHUmJnR5cGVvZiB1IT0ic3RyaW5nIil0aHJvdyBuZXcgQ2koIlxcY3VycmVudEBjb2xvciBzZXQgdG8gbm9uLXN0cmluZyBpbiBcXHJpZ2h0Iik7cmV0dXJue3R5cGU6ImxlZnRyaWdodC1yaWdodCIsbW9kZTppLnBhcnNlci5tb2RlLGRlbGltOmtRKHNbMF0saSkudGV4dCxjb2xvcjp1fX19KSxKaSh7dHlwZToibGVmdHJpZ2h0IixuYW1lczpbIlxcbGVmdCJdLHByb3BzOntudW1BcmdzOjEscHJpbWl0aXZlOiEwfSxoYW5kbGVyOihpLHMpPT57dmFyIHU9a1Eoc1swXSxpKSxkPWkucGFyc2VyOysrZC5sZWZ0cmlnaHREZXB0aDt2YXIgcD1kLnBhcnNlRXhwcmVzc2lvbighMSk7LS1kLmxlZnRyaWdodERlcHRoLGQuZXhwZWN0KCJcXHJpZ2h0IiwhMSk7dmFyIHY9WW8oZC5wYXJzZUZ1bmN0aW9uKCksImxlZnRyaWdodC1yaWdodCIpO3JldHVybnt0eXBlOiJsZWZ0cmlnaHQiLG1vZGU6ZC5tb2RlLGJvZHk6cCxsZWZ0OnUudGV4dCxyaWdodDp2LmRlbGltLHJpZ2h0Q29sb3I6di5jb2xvcn19LGh0bWxCdWlsZGVyOihpLHMpPT57UnplKGkpO2Zvcih2YXIgdT1kMShpLmJvZHkscywhMCxbIm1vcGVuIiwibWNsb3NlIl0pLGQ9MCxwPTAsdj0hMSxiPTA7Yjx1Lmxlbmd0aDtiKyspdVtiXS5pc01pZGRsZT92PSEwOihkPU1hdGgubWF4KHVbYl0uaGVpZ2h0LGQpLHA9TWF0aC5tYXgodVtiXS5kZXB0aCxwKSk7ZCo9cy5zaXplTXVsdGlwbGllcixwKj1zLnNpemVNdWx0aXBsaWVyO3ZhciB5O2lmKGkubGVmdD09PSIuIj95PXVSKHMsWyJtb3BlbiJdKTp5PUI3LmxlZnRSaWdodERlbGltKGkubGVmdCxkLHAscyxpLm1vZGUsWyJtb3BlbiJdKSx1LnVuc2hpZnQoeSksdilmb3IodmFyIFQ9MTtUPHUubGVuZ3RoO1QrKyl7dmFyIF89dVtUXSxBPV8uaXNNaWRkbGU7QSYmKHVbVF09QjcubGVmdFJpZ2h0RGVsaW0oQS5kZWxpbSxkLHAsQS5vcHRpb25zLGkubW9kZSxbXSkpfXZhciBQO2lmKGkucmlnaHQ9PT0iLiIpUD11UihzLFsibWNsb3NlIl0pO2Vsc2V7dmFyIFI9aS5yaWdodENvbG9yP3Mud2l0aENvbG9yKGkucmlnaHRDb2xvcik6cztQPUI3LmxlZnRSaWdodERlbGltKGkucmlnaHQsZCxwLFIsaS5tb2RlLFsibWNsb3NlIl0pfXJldHVybiB1LnB1c2goUCksem4ubWFrZVNwYW4oWyJtaW5uZXIiXSx1LHMpfSxtYXRobWxCdWlsZGVyOihpLHMpPT57UnplKGkpO3ZhciB1PWoyKGkuYm9keSxzKTtpZihpLmxlZnQhPT0iLiIpe3ZhciBkPW5ldyB2aS5NYXRoTm9kZSgibW8iLFtSdihpLmxlZnQsaS5tb2RlKV0pO2Quc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSx1LnVuc2hpZnQoZCl9aWYoaS5yaWdodCE9PSIuIil7dmFyIHA9bmV3IHZpLk1hdGhOb2RlKCJtbyIsW1J2KGkucmlnaHQsaS5tb2RlKV0pO3Auc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSxpLnJpZ2h0Q29sb3ImJnAuc2V0QXR0cmlidXRlKCJtYXRoY29sb3IiLGkucmlnaHRDb2xvciksdS5wdXNoKHApfXJldHVybiBoYmUodSl9fSksSmkoe3R5cGU6Im1pZGRsZSIsbmFtZXM6WyJcXG1pZGRsZSJdLHByb3BzOntudW1BcmdzOjEscHJpbWl0aXZlOiEwfSxoYW5kbGVyOihpLHMpPT57dmFyIHU9a1Eoc1swXSxpKTtpZighaS5wYXJzZXIubGVmdHJpZ2h0RGVwdGgpdGhyb3cgbmV3IENpKCJcXG1pZGRsZSB3aXRob3V0IHByZWNlZGluZyBcXGxlZnQiLHUpO3JldHVybnt0eXBlOiJtaWRkbGUiLG1vZGU6aS5wYXJzZXIubW9kZSxkZWxpbTp1LnRleHR9fSxodG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1O2lmKGkuZGVsaW09PT0iLiIpdT11UihzLFtdKTtlbHNle3U9Qjcuc2l6ZWREZWxpbShpLmRlbGltLDEscyxpLm1vZGUsW10pO3ZhciBkPXtkZWxpbTppLmRlbGltLG9wdGlvbnM6c307dS5pc01pZGRsZT1kfXJldHVybiB1fSxtYXRobWxCdWlsZGVyOihpLHMpPT57dmFyIHU9aS5kZWxpbT09PSJcXHZlcnQifHxpLmRlbGltPT09InwiP1J2KCJ8IiwidGV4dCIpOlJ2KGkuZGVsaW0saS5tb2RlKSxkPW5ldyB2aS5NYXRoTm9kZSgibW8iLFt1XSk7cmV0dXJuIGQuc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSxkLnNldEF0dHJpYnV0ZSgibHNwYWNlIiwiMC4wNWVtIiksZC5zZXRBdHRyaWJ1dGUoInJzcGFjZSIsIjAuMDVlbSIpLGR9fSk7dmFyIEViZT0oaSxzKT0+e3ZhciB1PXpuLndyYXBGcmFnbWVudCh1dShpLmJvZHkscykscyksZD1pLmxhYmVsLnNsaWNlKDEpLHA9cy5zaXplTXVsdGlwbGllcix2LGI9MCx5PVlhLmlzQ2hhcmFjdGVyQm94KGkuYm9keSk7aWYoZD09PSJzb3V0Iil2PXpuLm1ha2VTcGFuKFsic3RyZXRjaHkiLCJzb3V0Il0pLHYuaGVpZ2h0PXMuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcy9wLGI9LS41KnMuZm9udE1ldHJpY3MoKS54SGVpZ2h0O2Vsc2UgaWYoZD09PSJwaGFzZSIpe3ZhciBUPVVoKHtudW1iZXI6LjYsdW5pdDoicHQifSxzKSxfPVVoKHtudW1iZXI6LjM1LHVuaXQ6ImV4In0scyksQT1zLmhhdmluZ0Jhc2VTaXppbmcoKTtwPXAvQS5zaXplTXVsdGlwbGllcjt2YXIgUD11LmhlaWdodCt1LmRlcHRoK1QrXzt1LnN0eWxlLnBhZGRpbmdMZWZ0PVJpKFAvMitUKTt2YXIgUj1NYXRoLmZsb29yKDFlMypQKnApLEY9dEh0KFIpLGo9bmV3IEQ3KFtuZXcgQzkoInBoYXNlIixGKV0se3dpZHRoOiI0MDBlbSIsaGVpZ2h0OlJpKFIvMWUzKSx2aWV3Qm94OiIwIDAgNDAwMDAwICIrUixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWluWU1pbiBzbGljZSJ9KTt2PXpuLm1ha2VTdmdTcGFuKFsiaGlkZS10YWlsIl0sW2pdLHMpLHYuc3R5bGUuaGVpZ2h0PVJpKFApLGI9dS5kZXB0aCtUK199ZWxzZXsvY2FuY2VsLy50ZXN0KGQpP3l8fHUuY2xhc3Nlcy5wdXNoKCJjYW5jZWwtcGFkIik6ZD09PSJhbmdsIj91LmNsYXNzZXMucHVzaCgiYW5nbHBhZCIpOnUuY2xhc3Nlcy5wdXNoKCJib3hwYWQiKTt2YXIgSz0wLGVlPTAsaWU9MDsvYm94Ly50ZXN0KGQpPyhpZT1NYXRoLm1heChzLmZvbnRNZXRyaWNzKCkuZmJveHJ1bGUscy5taW5SdWxlVGhpY2tuZXNzKSxLPXMuZm9udE1ldHJpY3MoKS5mYm94c2VwKyhkPT09ImNvbG9yYm94Ij8wOmllKSxlZT1LKTpkPT09ImFuZ2wiPyhpZT1NYXRoLm1heChzLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3Mscy5taW5SdWxlVGhpY2tuZXNzKSxLPTQqaWUsZWU9TWF0aC5tYXgoMCwuMjUtdS5kZXB0aCkpOihLPXk/LjI6MCxlZT1LKSx2PVA3LmVuY2xvc2VTcGFuKHUsZCxLLGVlLHMpLC9mYm94fGJveGVkfGZjb2xvcmJveC8udGVzdChkKT8odi5zdHlsZS5ib3JkZXJTdHlsZT0ic29saWQiLHYuc3R5bGUuYm9yZGVyV2lkdGg9UmkoaWUpKTpkPT09ImFuZ2wiJiZpZSE9PS4wNDkmJih2LnN0eWxlLmJvcmRlclRvcFdpZHRoPVJpKGllKSx2LnN0eWxlLmJvcmRlclJpZ2h0V2lkdGg9UmkoaWUpKSxiPXUuZGVwdGgrZWUsaS5iYWNrZ3JvdW5kQ29sb3ImJih2LnN0eWxlLmJhY2tncm91bmRDb2xvcj1pLmJhY2tncm91bmRDb2xvcixpLmJvcmRlckNvbG9yJiYodi5zdHlsZS5ib3JkZXJDb2xvcj1pLmJvcmRlckNvbG9yKSl9dmFyIG9lO2lmKGkuYmFja2dyb3VuZENvbG9yKW9lPXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp2LHNoaWZ0OmJ9LHt0eXBlOiJlbGVtIixlbGVtOnUsc2hpZnQ6MH1dfSxzKTtlbHNle3ZhciBwZT0vY2FuY2VsfHBoYXNlLy50ZXN0KGQpP1sic3ZnLWFsaWduIl06W107b2U9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnUsc2hpZnQ6MH0se3R5cGU6ImVsZW0iLGVsZW06dixzaGlmdDpiLHdyYXBwZXJDbGFzc2VzOnBlfV19LHMpfXJldHVybi9jYW5jZWwvLnRlc3QoZCkmJihvZS5oZWlnaHQ9dS5oZWlnaHQsb2UuZGVwdGg9dS5kZXB0aCksL2NhbmNlbC8udGVzdChkKSYmIXk/em4ubWFrZVNwYW4oWyJtb3JkIiwiY2FuY2VsLWxhcCJdLFtvZV0scyk6em4ubWFrZVNwYW4oWyJtb3JkIl0sW29lXSxzKX0sVGJlPShpLHMpPT57dmFyIHU9MCxkPW5ldyB2aS5NYXRoTm9kZShpLmxhYmVsLmluZGV4T2YoImNvbG9yYm94Iik+LTE/Im1wYWRkZWQiOiJtZW5jbG9zZSIsW0xsKGkuYm9keSxzKV0pO3N3aXRjaChpLmxhYmVsKXtjYXNlIlxcY2FuY2VsIjpkLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLCJ1cGRpYWdvbmFsc3RyaWtlIik7YnJlYWs7Y2FzZSJcXGJjYW5jZWwiOmQuc2V0QXR0cmlidXRlKCJub3RhdGlvbiIsImRvd25kaWFnb25hbHN0cmlrZSIpO2JyZWFrO2Nhc2UiXFxwaGFzZSI6ZC5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIiwicGhhc29yYW5nbGUiKTticmVhaztjYXNlIlxcc291dCI6ZC5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIiwiaG9yaXpvbnRhbHN0cmlrZSIpO2JyZWFrO2Nhc2UiXFxmYm94IjpkLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLCJib3giKTticmVhaztjYXNlIlxcYW5nbCI6ZC5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIiwiYWN0dWFyaWFsIik7YnJlYWs7Y2FzZSJcXGZjb2xvcmJveCI6Y2FzZSJcXGNvbG9yYm94IjppZih1PXMuZm9udE1ldHJpY3MoKS5mYm94c2VwKnMuZm9udE1ldHJpY3MoKS5wdFBlckVtLGQuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIisiKzIqdSsicHQiKSxkLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwiKyIrMip1KyJwdCIpLGQuc2V0QXR0cmlidXRlKCJsc3BhY2UiLHUrInB0IiksZC5zZXRBdHRyaWJ1dGUoInZvZmZzZXQiLHUrInB0IiksaS5sYWJlbD09PSJcXGZjb2xvcmJveCIpe3ZhciBwPU1hdGgubWF4KHMuZm9udE1ldHJpY3MoKS5mYm94cnVsZSxzLm1pblJ1bGVUaGlja25lc3MpO2Quc2V0QXR0cmlidXRlKCJzdHlsZSIsImJvcmRlcjogIitwKyJlbSBzb2xpZCAiK1N0cmluZyhpLmJvcmRlckNvbG9yKSl9YnJlYWs7Y2FzZSJcXHhjYW5jZWwiOmQuc2V0QXR0cmlidXRlKCJub3RhdGlvbiIsInVwZGlhZ29uYWxzdHJpa2UgZG93bmRpYWdvbmFsc3RyaWtlIik7YnJlYWt9cmV0dXJuIGkuYmFja2dyb3VuZENvbG9yJiZkLnNldEF0dHJpYnV0ZSgibWF0aGJhY2tncm91bmQiLGkuYmFja2dyb3VuZENvbG9yKSxkfTtKaSh7dHlwZToiZW5jbG9zZSIsbmFtZXM6WyJcXGNvbG9yYm94Il0scHJvcHM6e251bUFyZ3M6MixhbGxvd2VkSW5UZXh0OiEwLGFyZ1R5cGVzOlsiY29sb3IiLCJ0ZXh0Il19LGhhbmRsZXIoaSxzLHUpe3ZhcntwYXJzZXI6ZCxmdW5jTmFtZTpwfT1pLHY9WW8oc1swXSwiY29sb3ItdG9rZW4iKS5jb2xvcixiPXNbMV07cmV0dXJue3R5cGU6ImVuY2xvc2UiLG1vZGU6ZC5tb2RlLGxhYmVsOnAsYmFja2dyb3VuZENvbG9yOnYsYm9keTpifX0saHRtbEJ1aWxkZXI6RWJlLG1hdGhtbEJ1aWxkZXI6VGJlfSksSmkoe3R5cGU6ImVuY2xvc2UiLG5hbWVzOlsiXFxmY29sb3Jib3giXSxwcm9wczp7bnVtQXJnczozLGFsbG93ZWRJblRleHQ6ITAsYXJnVHlwZXM6WyJjb2xvciIsImNvbG9yIiwidGV4dCJdfSxoYW5kbGVyKGkscyx1KXt2YXJ7cGFyc2VyOmQsZnVuY05hbWU6cH09aSx2PVlvKHNbMF0sImNvbG9yLXRva2VuIikuY29sb3IsYj1ZbyhzWzFdLCJjb2xvci10b2tlbiIpLmNvbG9yLHk9c1syXTtyZXR1cm57dHlwZToiZW5jbG9zZSIsbW9kZTpkLm1vZGUsbGFiZWw6cCxiYWNrZ3JvdW5kQ29sb3I6Yixib3JkZXJDb2xvcjp2LGJvZHk6eX19LGh0bWxCdWlsZGVyOkViZSxtYXRobWxCdWlsZGVyOlRiZX0pLEppKHt0eXBlOiJlbmNsb3NlIixuYW1lczpbIlxcZmJveCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJoYm94Il0sYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcihpLHMpe3ZhcntwYXJzZXI6dX09aTtyZXR1cm57dHlwZToiZW5jbG9zZSIsbW9kZTp1Lm1vZGUsbGFiZWw6IlxcZmJveCIsYm9keTpzWzBdfX19KSxKaSh7dHlwZToiZW5jbG9zZSIsbmFtZXM6WyJcXGNhbmNlbCIsIlxcYmNhbmNlbCIsIlxceGNhbmNlbCIsIlxcc291dCIsIlxccGhhc2UiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWkscD1zWzBdO3JldHVybnt0eXBlOiJlbmNsb3NlIixtb2RlOnUubW9kZSxsYWJlbDpkLGJvZHk6cH19LGh0bWxCdWlsZGVyOkViZSxtYXRobWxCdWlsZGVyOlRiZX0pLEppKHt0eXBlOiJlbmNsb3NlIixuYW1lczpbIlxcYW5nbCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJoYm94Il0sYWxsb3dlZEluVGV4dDohMX0saGFuZGxlcihpLHMpe3ZhcntwYXJzZXI6dX09aTtyZXR1cm57dHlwZToiZW5jbG9zZSIsbW9kZTp1Lm1vZGUsbGFiZWw6IlxcYW5nbCIsYm9keTpzWzBdfX19KTt2YXIganplPXt9O2Z1bmN0aW9uIFc0KGkpe2Zvcih2YXJ7dHlwZTpzLG5hbWVzOnUscHJvcHM6ZCxoYW5kbGVyOnAsaHRtbEJ1aWxkZXI6dixtYXRobWxCdWlsZGVyOmJ9PWkseT17dHlwZTpzLG51bUFyZ3M6ZC5udW1BcmdzfHwwLGFsbG93ZWRJblRleHQ6ITEsbnVtT3B0aW9uYWxBcmdzOjAsaGFuZGxlcjpwfSxUPTA7VDx1Lmxlbmd0aDsrK1QpanplW3VbVF1dPXk7diYmKGdRW3NdPXYpLGImJihwUVtzXT1iKX12YXIgJHplPXt9O2Z1bmN0aW9uIGV0KGkscyl7JHplW2ldPXN9ZnVuY3Rpb24genplKGkpe3ZhciBzPVtdO2kuY29uc3VtZVNwYWNlcygpO3ZhciB1PWkuZmV0Y2goKS50ZXh0O2Zvcih1PT09IlxccmVsYXgiJiYoaS5jb25zdW1lKCksaS5jb25zdW1lU3BhY2VzKCksdT1pLmZldGNoKCkudGV4dCk7dT09PSJcXGhsaW5lInx8dT09PSJcXGhkYXNobGluZSI7KWkuY29uc3VtZSgpLHMucHVzaCh1PT09IlxcaGRhc2hsaW5lIiksaS5jb25zdW1lU3BhY2VzKCksdT1pLmZldGNoKCkudGV4dDtyZXR1cm4gc312YXIgRVE9aT0+e3ZhciBzPWkucGFyc2VyLnNldHRpbmdzO2lmKCFzLmRpc3BsYXlNb2RlKXRocm93IG5ldyBDaSgieyIraS5lbnZOYW1lKyJ9IGNhbiBiZSB1c2VkIG9ubHkgaW4gZGlzcGxheSBtb2RlLiIpfTtmdW5jdGlvbiBDYmUoaSl7aWYoaS5pbmRleE9mKCJlZCIpPT09LTEpcmV0dXJuIGkuaW5kZXhPZigiKiIpPT09LTF9ZnVuY3Rpb24gQTkoaSxzLHUpe3Zhcntoc2tpcEJlZm9yZUFuZEFmdGVyOmQsYWRkSm90OnAsY29sczp2LGFycmF5c3RyZXRjaDpiLGNvbFNlcGFyYXRpb25UeXBlOnksYXV0b1RhZzpULHNpbmdsZVJvdzpfLGVtcHR5U2luZ2xlUm93OkEsbWF4TnVtQ29sczpQLGxlcW5vOlJ9PXM7aWYoaS5ndWxsZXQuYmVnaW5Hcm91cCgpLF98fGkuZ3VsbGV0Lm1hY3Jvcy5zZXQoIlxcY3IiLCJcXFxcXFxyZWxheCIpLCFiKXt2YXIgRj1pLmd1bGxldC5leHBhbmRNYWNyb0FzVGV4dCgiXFxhcnJheXN0cmV0Y2giKTtpZihGPT1udWxsKWI9MTtlbHNlIGlmKGI9cGFyc2VGbG9hdChGKSwhYnx8YjwwKXRocm93IG5ldyBDaSgiSW52YWxpZCBcXGFycmF5c3RyZXRjaDogIitGKX1pLmd1bGxldC5iZWdpbkdyb3VwKCk7dmFyIGo9W10sSz1bal0sZWU9W10saWU9W10sb2U9VCE9bnVsbD9bXTp2b2lkIDA7ZnVuY3Rpb24gcGUoKXtUJiZpLmd1bGxldC5tYWNyb3Muc2V0KCJcXEBlcW5zdyIsIjEiLCEwKX1mdW5jdGlvbiBiZSgpe29lJiYoaS5ndWxsZXQubWFjcm9zLmdldCgiXFxkZkB0YWciKT8ob2UucHVzaChpLnN1YnBhcnNlKFtuZXcgVTQoIlxcZGZAdGFnIildKSksaS5ndWxsZXQubWFjcm9zLnNldCgiXFxkZkB0YWciLHZvaWQgMCwhMCkpOm9lLnB1c2goISFUJiZpLmd1bGxldC5tYWNyb3MuZ2V0KCJcXEBlcW5zdyIpPT09IjEiKSl9Zm9yKHBlKCksaWUucHVzaCh6emUoaSkpOzspe3ZhciBhZT1pLnBhcnNlRXhwcmVzc2lvbighMSxfPyJcXGVuZCI6IlxcXFwiKTtpLmd1bGxldC5lbmRHcm91cCgpLGkuZ3VsbGV0LmJlZ2luR3JvdXAoKSxhZT17dHlwZToib3JkZ3JvdXAiLG1vZGU6aS5tb2RlLGJvZHk6YWV9LHUmJihhZT17dHlwZToic3R5bGluZyIsbW9kZTppLm1vZGUsc3R5bGU6dSxib2R5OlthZV19KSxqLnB1c2goYWUpO3ZhciBuZT1pLmZldGNoKCkudGV4dDtpZihuZT09PSImIil7aWYoUCYmai5sZW5ndGg9PT1QKXtpZihffHx5KXRocm93IG5ldyBDaSgiVG9vIG1hbnkgdGFiIGNoYXJhY3RlcnM6ICYiLGkubmV4dFRva2VuKTtpLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgidGV4dEVudiIsIlRvbyBmZXcgY29sdW1ucyBzcGVjaWZpZWQgaW4gdGhlIHthcnJheX0gY29sdW1uIGFyZ3VtZW50LiIpfWkuY29uc3VtZSgpfWVsc2UgaWYobmU9PT0iXFxlbmQiKXtiZSgpLGoubGVuZ3RoPT09MSYmYWUudHlwZT09PSJzdHlsaW5nIiYmYWUuYm9keVswXS5ib2R5Lmxlbmd0aD09PTAmJihLLmxlbmd0aD4xfHwhQSkmJksucG9wKCksaWUubGVuZ3RoPEsubGVuZ3RoKzEmJmllLnB1c2goW10pO2JyZWFrfWVsc2UgaWYobmU9PT0iXFxcXCIpe2kuY29uc3VtZSgpO3ZhciBzZT12b2lkIDA7aS5ndWxsZXQuZnV0dXJlKCkudGV4dCE9PSIgIiYmKHNlPWkucGFyc2VTaXplR3JvdXAoITApKSxlZS5wdXNoKHNlP3NlLnZhbHVlOm51bGwpLGJlKCksaWUucHVzaCh6emUoaSkpLGo9W10sSy5wdXNoKGopLHBlKCl9ZWxzZSB0aHJvdyBuZXcgQ2koIkV4cGVjdGVkICYgb3IgXFxcXCBvciBcXGNyIG9yIFxcZW5kIixpLm5leHRUb2tlbil9cmV0dXJuIGkuZ3VsbGV0LmVuZEdyb3VwKCksaS5ndWxsZXQuZW5kR3JvdXAoKSx7dHlwZToiYXJyYXkiLG1vZGU6aS5tb2RlLGFkZEpvdDpwLGFycmF5c3RyZXRjaDpiLGJvZHk6Syxjb2xzOnYscm93R2FwczplZSxoc2tpcEJlZm9yZUFuZEFmdGVyOmQsaExpbmVzQmVmb3JlUm93OmllLGNvbFNlcGFyYXRpb25UeXBlOnksdGFnczpvZSxsZXFubzpSfX1mdW5jdGlvbiBTYmUoaSl7cmV0dXJuIGkuc2xpY2UoMCwxKT09PSJkIj8iZGlzcGxheSI6InRleHQifXZhciBZND1mdW5jdGlvbihzLHUpe3ZhciBkLHAsdj1zLmJvZHkubGVuZ3RoLGI9cy5oTGluZXNCZWZvcmVSb3cseT0wLFQ9bmV3IEFycmF5KHYpLF89W10sQT1NYXRoLm1heCh1LmZvbnRNZXRyaWNzKCkuYXJyYXlSdWxlV2lkdGgsdS5taW5SdWxlVGhpY2tuZXNzKSxQPTEvdS5mb250TWV0cmljcygpLnB0UGVyRW0sUj01KlA7aWYocy5jb2xTZXBhcmF0aW9uVHlwZSYmcy5jb2xTZXBhcmF0aW9uVHlwZT09PSJzbWFsbCIpe3ZhciBGPXUuaGF2aW5nU3R5bGUoVGEuU0NSSVBUKS5zaXplTXVsdGlwbGllcjtSPS4yNzc4KihGL3Uuc2l6ZU11bHRpcGxpZXIpfXZhciBqPXMuY29sU2VwYXJhdGlvblR5cGU9PT0iQ0QiP1VoKHtudW1iZXI6Myx1bml0OiJleCJ9LHUpOjEyKlAsSz0zKlAsZWU9cy5hcnJheXN0cmV0Y2gqaixpZT0uNyplZSxvZT0uMyplZSxwZT0wO2Z1bmN0aW9uIGJlKGppKXtmb3IodmFyIHhpPTA7eGk8amkubGVuZ3RoOysreGkpeGk+MCYmKHBlKz0uMjUpLF8ucHVzaCh7cG9zOnBlLGlzRGFzaGVkOmppW3hpXX0pfWZvcihiZShiWzBdKSxkPTA7ZDxzLmJvZHkubGVuZ3RoOysrZCl7dmFyIGFlPXMuYm9keVtkXSxuZT1pZSxzZT1vZTt5PGFlLmxlbmd0aCYmKHk9YWUubGVuZ3RoKTt2YXIgZGU9bmV3IEFycmF5KGFlLmxlbmd0aCk7Zm9yKHA9MDtwPGFlLmxlbmd0aDsrK3Ape3ZhciBYPXV1KGFlW3BdLHUpO3NlPFguZGVwdGgmJihzZT1YLmRlcHRoKSxuZTxYLmhlaWdodCYmKG5lPVguaGVpZ2h0KSxkZVtwXT1YfXZhciBnZT1zLnJvd0dhcHNbZF0sVz0wO2dlJiYoVz1VaChnZSx1KSxXPjAmJihXKz1vZSxzZTxXJiYoc2U9VyksVz0wKSkscy5hZGRKb3QmJihzZSs9SyksZGUuaGVpZ2h0PW5lLGRlLmRlcHRoPXNlLHBlKz1uZSxkZS5wb3M9cGUscGUrPXNlK1csVFtkXT1kZSxiZShiW2QrMV0pfXZhciB4ZT1wZS8yK3UuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0LFU9cy5jb2xzfHxbXSxGZT1bXSxQZSxqZSxJZT1bXTtpZihzLnRhZ3MmJnMudGFncy5zb21lKGppPT5qaSkpZm9yKGQ9MDtkPHY7KytkKXt2YXIgU2U9VFtkXSxDZT1TZS5wb3MteGUsa2U9cy50YWdzW2RdLEtlPXZvaWQgMDtrZT09PSEwP0tlPXpuLm1ha2VTcGFuKFsiZXFuLW51bSJdLFtdLHUpOmtlPT09ITE/S2U9em4ubWFrZVNwYW4oW10sW10sdSk6S2U9em4ubWFrZVNwYW4oW10sZDEoa2UsdSwhMCksdSksS2UuZGVwdGg9U2UuZGVwdGgsS2UuaGVpZ2h0PVNlLmhlaWdodCxJZS5wdXNoKHt0eXBlOiJlbGVtIixlbGVtOktlLHNoaWZ0OkNlfSl9Zm9yKHA9MCxqZT0wO3A8eXx8amU8VS5sZW5ndGg7KytwLCsramUpe2Zvcih2YXIgRnQ9VVtqZV18fHt9LE5lPSEwO0Z0LnR5cGU9PT0ic2VwYXJhdG9yIjspe2lmKE5lfHwoUGU9em4ubWFrZVNwYW4oWyJhcnJheWNvbHNlcCJdLFtdKSxQZS5zdHlsZS53aWR0aD1SaSh1LmZvbnRNZXRyaWNzKCkuZG91YmxlUnVsZVNlcCksRmUucHVzaChQZSkpLEZ0LnNlcGFyYXRvcj09PSJ8Inx8RnQuc2VwYXJhdG9yPT09IjoiKXt2YXIgZ249RnQuc2VwYXJhdG9yPT09InwiPyJzb2xpZCI6ImRhc2hlZCIsX3Q9em4ubWFrZVNwYW4oWyJ2ZXJ0aWNhbC1zZXBhcmF0b3IiXSxbXSx1KTtfdC5zdHlsZS5oZWlnaHQ9UmkocGUpLF90LnN0eWxlLmJvcmRlclJpZ2h0V2lkdGg9UmkoQSksX3Quc3R5bGUuYm9yZGVyUmlnaHRTdHlsZT1nbixfdC5zdHlsZS5tYXJnaW49IjAgIitSaSgtQS8yKTt2YXIgRXQ9cGUteGU7RXQmJihfdC5zdHlsZS52ZXJ0aWNhbEFsaWduPVJpKC1FdCkpLEZlLnB1c2goX3QpfWVsc2UgdGhyb3cgbmV3IENpKCJJbnZhbGlkIHNlcGFyYXRvciB0eXBlOiAiK0Z0LnNlcGFyYXRvcik7amUrKyxGdD1VW2plXXx8e30sTmU9ITF9aWYoIShwPj15KSl7dmFyIEd0PXZvaWQgMDsocD4wfHxzLmhza2lwQmVmb3JlQW5kQWZ0ZXIpJiYoR3Q9WWEuZGVmbHQoRnQucHJlZ2FwLFIpLEd0IT09MCYmKFBlPXpuLm1ha2VTcGFuKFsiYXJyYXljb2xzZXAiXSxbXSksUGUuc3R5bGUud2lkdGg9UmkoR3QpLEZlLnB1c2goUGUpKSk7dmFyIGxuPVtdO2ZvcihkPTA7ZDx2OysrZCl7dmFyIHh0PVRbZF0sUHQ9eHRbcF07aWYoUHQpe3ZhciBRZT14dC5wb3MteGU7UHQuZGVwdGg9eHQuZGVwdGgsUHQuaGVpZ2h0PXh0LmhlaWdodCxsbi5wdXNoKHt0eXBlOiJlbGVtIixlbGVtOlB0LHNoaWZ0OlFlfSl9fWxuPXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOmxufSx1KSxsbj16bi5tYWtlU3BhbihbImNvbC1hbGlnbi0iKyhGdC5hbGlnbnx8ImMiKV0sW2xuXSksRmUucHVzaChsbiksKHA8eS0xfHxzLmhza2lwQmVmb3JlQW5kQWZ0ZXIpJiYoR3Q9WWEuZGVmbHQoRnQucG9zdGdhcCxSKSxHdCE9PTAmJihQZT16bi5tYWtlU3BhbihbImFycmF5Y29sc2VwIl0sW10pLFBlLnN0eWxlLndpZHRoPVJpKEd0KSxGZS5wdXNoKFBlKSkpfX1pZihUPXpuLm1ha2VTcGFuKFsibXRhYmxlIl0sRmUpLF8ubGVuZ3RoPjApe2Zvcih2YXIgRHQ9em4ubWFrZUxpbmVTcGFuKCJobGluZSIsdSxBKSxrdD16bi5tYWtlTGluZVNwYW4oImhkYXNobGluZSIsdSxBKSxPbj1be3R5cGU6ImVsZW0iLGVsZW06VCxzaGlmdDowfV07Xy5sZW5ndGg+MDspe3ZhciBodD1fLnBvcCgpLHpyPWh0LnBvcy14ZTtodC5pc0Rhc2hlZD9Pbi5wdXNoKHt0eXBlOiJlbGVtIixlbGVtOmt0LHNoaWZ0OnpyfSk6T24ucHVzaCh7dHlwZToiZWxlbSIsZWxlbTpEdCxzaGlmdDp6cn0pfVQ9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46T259LHUpfWlmKEllLmxlbmd0aD09PTApcmV0dXJuIHpuLm1ha2VTcGFuKFsibW9yZCJdLFtUXSx1KTt2YXIgeXQ9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46SWV9LHUpO3JldHVybiB5dD16bi5tYWtlU3BhbihbInRhZyJdLFt5dF0sdSksem4ubWFrZUZyYWdtZW50KFtULHl0XSl9LHVWdD17YzoiY2VudGVyICIsbDoibGVmdCAiLHI6InJpZ2h0ICJ9LFg0PWZ1bmN0aW9uKHMsdSl7Zm9yKHZhciBkPVtdLHA9bmV3IHZpLk1hdGhOb2RlKCJtdGQiLFtdLFsibXRyLWdsdWUiXSksdj1uZXcgdmkuTWF0aE5vZGUoIm10ZCIsW10sWyJtbWwtZXFuLW51bSJdKSxiPTA7YjxzLmJvZHkubGVuZ3RoO2IrKyl7Zm9yKHZhciB5PXMuYm9keVtiXSxUPVtdLF89MDtfPHkubGVuZ3RoO18rKylULnB1c2gobmV3IHZpLk1hdGhOb2RlKCJtdGQiLFtMbCh5W19dLHUpXSkpO3MudGFncyYmcy50YWdzW2JdJiYoVC51bnNoaWZ0KHApLFQucHVzaChwKSxzLmxlcW5vP1QudW5zaGlmdCh2KTpULnB1c2godikpLGQucHVzaChuZXcgdmkuTWF0aE5vZGUoIm10ciIsVCkpfXZhciBBPW5ldyB2aS5NYXRoTm9kZSgibXRhYmxlIixkKSxQPXMuYXJyYXlzdHJldGNoPT09LjU/LjE6LjE2K3MuYXJyYXlzdHJldGNoLTErKHMuYWRkSm90Py4wOTowKTtBLnNldEF0dHJpYnV0ZSgicm93c3BhY2luZyIsUmkoUCkpO3ZhciBSPSIiLEY9IiI7aWYocy5jb2xzJiZzLmNvbHMubGVuZ3RoPjApe3ZhciBqPXMuY29scyxLPSIiLGVlPSExLGllPTAsb2U9ai5sZW5ndGg7alswXS50eXBlPT09InNlcGFyYXRvciImJihSKz0idG9wICIsaWU9MSksaltqLmxlbmd0aC0xXS50eXBlPT09InNlcGFyYXRvciImJihSKz0iYm90dG9tICIsb2UtPTEpO2Zvcih2YXIgcGU9aWU7cGU8b2U7cGUrKylqW3BlXS50eXBlPT09ImFsaWduIj8oRis9dVZ0W2pbcGVdLmFsaWduXSxlZSYmKEsrPSJub25lICIpLGVlPSEwKTpqW3BlXS50eXBlPT09InNlcGFyYXRvciImJmVlJiYoSys9altwZV0uc2VwYXJhdG9yPT09InwiPyJzb2xpZCAiOiJkYXNoZWQgIixlZT0hMSk7QS5zZXRBdHRyaWJ1dGUoImNvbHVtbmFsaWduIixGLnRyaW0oKSksL1tzZF0vLnRlc3QoSykmJkEuc2V0QXR0cmlidXRlKCJjb2x1bW5saW5lcyIsSy50cmltKCkpfWlmKHMuY29sU2VwYXJhdGlvblR5cGU9PT0iYWxpZ24iKXtmb3IodmFyIGJlPXMuY29sc3x8W10sYWU9IiIsbmU9MTtuZTxiZS5sZW5ndGg7bmUrKylhZSs9bmUlMj8iMGVtICI6IjFlbSAiO0Euc2V0QXR0cmlidXRlKCJjb2x1bW5zcGFjaW5nIixhZS50cmltKCkpfWVsc2Ugcy5jb2xTZXBhcmF0aW9uVHlwZT09PSJhbGlnbmF0Inx8cy5jb2xTZXBhcmF0aW9uVHlwZT09PSJnYXRoZXIiP0Euc2V0QXR0cmlidXRlKCJjb2x1bW5zcGFjaW5nIiwiMGVtIik6cy5jb2xTZXBhcmF0aW9uVHlwZT09PSJzbWFsbCI/QS5zZXRBdHRyaWJ1dGUoImNvbHVtbnNwYWNpbmciLCIwLjI3NzhlbSIpOnMuY29sU2VwYXJhdGlvblR5cGU9PT0iQ0QiP0Euc2V0QXR0cmlidXRlKCJjb2x1bW5zcGFjaW5nIiwiMC41ZW0iKTpBLnNldEF0dHJpYnV0ZSgiY29sdW1uc3BhY2luZyIsIjFlbSIpO3ZhciBzZT0iIixkZT1zLmhMaW5lc0JlZm9yZVJvdztSKz1kZVswXS5sZW5ndGg+MD8ibGVmdCAiOiIiLFIrPWRlW2RlLmxlbmd0aC0xXS5sZW5ndGg+MD8icmlnaHQgIjoiIjtmb3IodmFyIFg9MTtYPGRlLmxlbmd0aC0xO1grKylzZSs9ZGVbWF0ubGVuZ3RoPT09MD8ibm9uZSAiOmRlW1hdWzBdPyJkYXNoZWQgIjoic29saWQgIjtyZXR1cm4vW3NkXS8udGVzdChzZSkmJkEuc2V0QXR0cmlidXRlKCJyb3dsaW5lcyIsc2UudHJpbSgpKSxSIT09IiImJihBPW5ldyB2aS5NYXRoTm9kZSgibWVuY2xvc2UiLFtBXSksQS5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIixSLnRyaW0oKSkpLHMuYXJyYXlzdHJldGNoJiZzLmFycmF5c3RyZXRjaDwxJiYoQT1uZXcgdmkuTWF0aE5vZGUoIm1zdHlsZSIsW0FdKSxBLnNldEF0dHJpYnV0ZSgic2NyaXB0bGV2ZWwiLCIxIikpLEF9LHF6ZT1mdW5jdGlvbihzLHUpe3MuZW52TmFtZS5pbmRleE9mKCJlZCIpPT09LTEmJkVRKHMpO3ZhciBkPVtdLHA9cy5lbnZOYW1lLmluZGV4T2YoImF0Iik+LTE/ImFsaWduYXQiOiJhbGlnbiIsdj1zLmVudk5hbWU9PT0ic3BsaXQiLGI9QTkocy5wYXJzZXIse2NvbHM6ZCxhZGRKb3Q6ITAsYXV0b1RhZzp2P3ZvaWQgMDpDYmUocy5lbnZOYW1lKSxlbXB0eVNpbmdsZVJvdzohMCxjb2xTZXBhcmF0aW9uVHlwZTpwLG1heE51bUNvbHM6dj8yOnZvaWQgMCxsZXFubzpzLnBhcnNlci5zZXR0aW5ncy5sZXFub30sImRpc3BsYXkiKSx5LFQ9MCxfPXt0eXBlOiJvcmRncm91cCIsbW9kZTpzLm1vZGUsYm9keTpbXX07aWYodVswXSYmdVswXS50eXBlPT09Im9yZGdyb3VwIil7Zm9yKHZhciBBPSIiLFA9MDtQPHVbMF0uYm9keS5sZW5ndGg7UCsrKXt2YXIgUj1Zbyh1WzBdLmJvZHlbUF0sInRleHRvcmQiKTtBKz1SLnRleHR9eT1OdW1iZXIoQSksVD15KjJ9dmFyIEY9IVQ7Yi5ib2R5LmZvckVhY2goZnVuY3Rpb24oaWUpe2Zvcih2YXIgb2U9MTtvZTxpZS5sZW5ndGg7b2UrPTIpe3ZhciBwZT1ZbyhpZVtvZV0sInN0eWxpbmciKSxiZT1ZbyhwZS5ib2R5WzBdLCJvcmRncm91cCIpO2JlLmJvZHkudW5zaGlmdChfKX1pZihGKVQ8aWUubGVuZ3RoJiYoVD1pZS5sZW5ndGgpO2Vsc2V7dmFyIGFlPWllLmxlbmd0aC8yO2lmKHk8YWUpdGhyb3cgbmV3IENpKCJUb28gbWFueSBtYXRoIGluIGEgcm93OiAiKygiZXhwZWN0ZWQgIit5KyIsIGJ1dCBnb3QgIithZSksaWVbMF0pfX0pO2Zvcih2YXIgaj0wO2o8VDsrK2ope3ZhciBLPSJyIixlZT0wO2olMj09PTE/Sz0ibCI6aj4wJiZGJiYoZWU9MSksZFtqXT17dHlwZToiYWxpZ24iLGFsaWduOksscHJlZ2FwOmVlLHBvc3RnYXA6MH19cmV0dXJuIGIuY29sU2VwYXJhdGlvblR5cGU9Rj8iYWxpZ24iOiJhbGlnbmF0IixifTtXNCh7dHlwZToiYXJyYXkiLG5hbWVzOlsiYXJyYXkiLCJkYXJyYXkiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKGkscyl7dmFyIHU9dlEoc1swXSksZD11P1tzWzBdXTpZbyhzWzBdLCJvcmRncm91cCIpLmJvZHkscD1kLm1hcChmdW5jdGlvbihiKXt2YXIgeT1kYmUoYiksVD15LnRleHQ7aWYoImxjciIuaW5kZXhPZihUKSE9PS0xKXJldHVybnt0eXBlOiJhbGlnbiIsYWxpZ246VH07aWYoVD09PSJ8IilyZXR1cm57dHlwZToic2VwYXJhdG9yIixzZXBhcmF0b3I6InwifTtpZihUPT09IjoiKXJldHVybnt0eXBlOiJzZXBhcmF0b3IiLHNlcGFyYXRvcjoiOiJ9O3Rocm93IG5ldyBDaSgiVW5rbm93biBjb2x1bW4gYWxpZ25tZW50OiAiK1QsYil9KSx2PXtjb2xzOnAsaHNraXBCZWZvcmVBbmRBZnRlcjohMCxtYXhOdW1Db2xzOnAubGVuZ3RofTtyZXR1cm4gQTkoaS5wYXJzZXIsdixTYmUoaS5lbnZOYW1lKSl9LGh0bWxCdWlsZGVyOlk0LG1hdGhtbEJ1aWxkZXI6WDR9KSxXNCh7dHlwZToiYXJyYXkiLG5hbWVzOlsibWF0cml4IiwicG1hdHJpeCIsImJtYXRyaXgiLCJCbWF0cml4Iiwidm1hdHJpeCIsIlZtYXRyaXgiLCJtYXRyaXgqIiwicG1hdHJpeCoiLCJibWF0cml4KiIsIkJtYXRyaXgqIiwidm1hdHJpeCoiLCJWbWF0cml4KiJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIoaSl7dmFyIHM9e21hdHJpeDpudWxsLHBtYXRyaXg6WyIoIiwiKSJdLGJtYXRyaXg6WyJbIiwiXSJdLEJtYXRyaXg6WyJcXHsiLCJcXH0iXSx2bWF0cml4OlsifCIsInwiXSxWbWF0cml4OlsiXFxWZXJ0IiwiXFxWZXJ0Il19W2kuZW52TmFtZS5yZXBsYWNlKCIqIiwiIildLHU9ImMiLGQ9e2hza2lwQmVmb3JlQW5kQWZ0ZXI6ITEsY29sczpbe3R5cGU6ImFsaWduIixhbGlnbjp1fV19O2lmKGkuZW52TmFtZS5jaGFyQXQoaS5lbnZOYW1lLmxlbmd0aC0xKT09PSIqIil7dmFyIHA9aS5wYXJzZXI7aWYocC5jb25zdW1lU3BhY2VzKCkscC5mZXRjaCgpLnRleHQ9PT0iWyIpe2lmKHAuY29uc3VtZSgpLHAuY29uc3VtZVNwYWNlcygpLHU9cC5mZXRjaCgpLnRleHQsImxjciIuaW5kZXhPZih1KT09PS0xKXRocm93IG5ldyBDaSgiRXhwZWN0ZWQgbCBvciBjIG9yIHIiLHAubmV4dFRva2VuKTtwLmNvbnN1bWUoKSxwLmNvbnN1bWVTcGFjZXMoKSxwLmV4cGVjdCgiXSIpLHAuY29uc3VtZSgpLGQuY29scz1be3R5cGU6ImFsaWduIixhbGlnbjp1fV19fXZhciB2PUE5KGkucGFyc2VyLGQsU2JlKGkuZW52TmFtZSkpLGI9TWF0aC5tYXgoMCwuLi52LmJvZHkubWFwKHk9PnkubGVuZ3RoKSk7cmV0dXJuIHYuY29scz1uZXcgQXJyYXkoYikuZmlsbCh7dHlwZToiYWxpZ24iLGFsaWduOnV9KSxzP3t0eXBlOiJsZWZ0cmlnaHQiLG1vZGU6aS5tb2RlLGJvZHk6W3ZdLGxlZnQ6c1swXSxyaWdodDpzWzFdLHJpZ2h0Q29sb3I6dm9pZCAwfTp2fSxodG1sQnVpbGRlcjpZNCxtYXRobWxCdWlsZGVyOlg0fSksVzQoe3R5cGU6ImFycmF5IixuYW1lczpbInNtYWxsbWF0cml4Il0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcihpKXt2YXIgcz17YXJyYXlzdHJldGNoOi41fSx1PUE5KGkucGFyc2VyLHMsInNjcmlwdCIpO3JldHVybiB1LmNvbFNlcGFyYXRpb25UeXBlPSJzbWFsbCIsdX0saHRtbEJ1aWxkZXI6WTQsbWF0aG1sQnVpbGRlcjpYNH0pLFc0KHt0eXBlOiJhcnJheSIsbmFtZXM6WyJzdWJhcnJheSJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXIoaSxzKXt2YXIgdT12UShzWzBdKSxkPXU/W3NbMF1dOllvKHNbMF0sIm9yZGdyb3VwIikuYm9keSxwPWQubWFwKGZ1bmN0aW9uKGIpe3ZhciB5PWRiZShiKSxUPXkudGV4dDtpZigibGMiLmluZGV4T2YoVCkhPT0tMSlyZXR1cm57dHlwZToiYWxpZ24iLGFsaWduOlR9O3Rocm93IG5ldyBDaSgiVW5rbm93biBjb2x1bW4gYWxpZ25tZW50OiAiK1QsYil9KTtpZihwLmxlbmd0aD4xKXRocm93IG5ldyBDaSgie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW4iKTt2YXIgdj17Y29sczpwLGhza2lwQmVmb3JlQW5kQWZ0ZXI6ITEsYXJyYXlzdHJldGNoOi41fTtpZih2PUE5KGkucGFyc2VyLHYsInNjcmlwdCIpLHYuYm9keS5sZW5ndGg+MCYmdi5ib2R5WzBdLmxlbmd0aD4xKXRocm93IG5ldyBDaSgie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW4iKTtyZXR1cm4gdn0saHRtbEJ1aWxkZXI6WTQsbWF0aG1sQnVpbGRlcjpYNH0pLFc0KHt0eXBlOiJhcnJheSIsbmFtZXM6WyJjYXNlcyIsImRjYXNlcyIsInJjYXNlcyIsImRyY2FzZXMiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKGkpe3ZhciBzPXthcnJheXN0cmV0Y2g6MS4yLGNvbHM6W3t0eXBlOiJhbGlnbiIsYWxpZ246ImwiLHByZWdhcDowLHBvc3RnYXA6MX0se3R5cGU6ImFsaWduIixhbGlnbjoibCIscHJlZ2FwOjAscG9zdGdhcDowfV19LHU9QTkoaS5wYXJzZXIscyxTYmUoaS5lbnZOYW1lKSk7cmV0dXJue3R5cGU6ImxlZnRyaWdodCIsbW9kZTppLm1vZGUsYm9keTpbdV0sbGVmdDppLmVudk5hbWUuaW5kZXhPZigiciIpPi0xPyIuIjoiXFx7IixyaWdodDppLmVudk5hbWUuaW5kZXhPZigiciIpPi0xPyJcXH0iOiIuIixyaWdodENvbG9yOnZvaWQgMH19LGh0bWxCdWlsZGVyOlk0LG1hdGhtbEJ1aWxkZXI6WDR9KSxXNCh7dHlwZToiYXJyYXkiLG5hbWVzOlsiYWxpZ24iLCJhbGlnbioiLCJhbGlnbmVkIiwic3BsaXQiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyOnF6ZSxodG1sQnVpbGRlcjpZNCxtYXRobWxCdWlsZGVyOlg0fSksVzQoe3R5cGU6ImFycmF5IixuYW1lczpbImdhdGhlcmVkIiwiZ2F0aGVyIiwiZ2F0aGVyKiJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIoaSl7WWEuY29udGFpbnMoWyJnYXRoZXIiLCJnYXRoZXIqIl0saS5lbnZOYW1lKSYmRVEoaSk7dmFyIHM9e2NvbHM6W3t0eXBlOiJhbGlnbiIsYWxpZ246ImMifV0sYWRkSm90OiEwLGNvbFNlcGFyYXRpb25UeXBlOiJnYXRoZXIiLGF1dG9UYWc6Q2JlKGkuZW52TmFtZSksZW1wdHlTaW5nbGVSb3c6ITAsbGVxbm86aS5wYXJzZXIuc2V0dGluZ3MubGVxbm99O3JldHVybiBBOShpLnBhcnNlcixzLCJkaXNwbGF5Iil9LGh0bWxCdWlsZGVyOlk0LG1hdGhtbEJ1aWxkZXI6WDR9KSxXNCh7dHlwZToiYXJyYXkiLG5hbWVzOlsiYWxpZ25hdCIsImFsaWduYXQqIiwiYWxpZ25lZGF0Il0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcjpxemUsaHRtbEJ1aWxkZXI6WTQsbWF0aG1sQnVpbGRlcjpYNH0pLFc0KHt0eXBlOiJhcnJheSIsbmFtZXM6WyJlcXVhdGlvbiIsImVxdWF0aW9uKiJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIoaSl7RVEoaSk7dmFyIHM9e2F1dG9UYWc6Q2JlKGkuZW52TmFtZSksZW1wdHlTaW5nbGVSb3c6ITAsc2luZ2xlUm93OiEwLG1heE51bUNvbHM6MSxsZXFubzppLnBhcnNlci5zZXR0aW5ncy5sZXFub307cmV0dXJuIEE5KGkucGFyc2VyLHMsImRpc3BsYXkiKX0saHRtbEJ1aWxkZXI6WTQsbWF0aG1sQnVpbGRlcjpYNH0pLFc0KHt0eXBlOiJhcnJheSIsbmFtZXM6WyJDRCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIoaSl7cmV0dXJuIEVRKGkpLFlIdChpLnBhcnNlcil9LGh0bWxCdWlsZGVyOlk0LG1hdGhtbEJ1aWxkZXI6WDR9KSxldCgiXFxub251bWJlciIsIlxcZ2RlZlxcQGVxbnN3ezB9IiksZXQoIlxcbm90YWciLCJcXG5vbnVtYmVyIiksSmkoe3R5cGU6InRleHQiLG5hbWVzOlsiXFxobGluZSIsIlxcaGRhc2hsaW5lIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLGFsbG93ZWRJbk1hdGg6ITB9LGhhbmRsZXIoaSxzKXt0aHJvdyBuZXcgQ2koaS5mdW5jTmFtZSsiIHZhbGlkIG9ubHkgd2l0aGluIGFycmF5IGVudmlyb25tZW50Iil9fSk7dmFyIEh6ZT1qemU7Smkoe3R5cGU6ImVudmlyb25tZW50IixuYW1lczpbIlxcYmVnaW4iLCJcXGVuZCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJ0ZXh0Il19LGhhbmRsZXIoaSxzKXt2YXJ7cGFyc2VyOnUsZnVuY05hbWU6ZH09aSxwPXNbMF07aWYocC50eXBlIT09Im9yZGdyb3VwIil0aHJvdyBuZXcgQ2koIkludmFsaWQgZW52aXJvbm1lbnQgbmFtZSIscCk7Zm9yKHZhciB2PSIiLGI9MDtiPHAuYm9keS5sZW5ndGg7KytiKXYrPVlvKHAuYm9keVtiXSwidGV4dG9yZCIpLnRleHQ7aWYoZD09PSJcXGJlZ2luIil7aWYoIUh6ZS5oYXNPd25Qcm9wZXJ0eSh2KSl0aHJvdyBuZXcgQ2koIk5vIHN1Y2ggZW52aXJvbm1lbnQ6ICIrdixwKTt2YXIgeT1IemVbdl0se2FyZ3M6VCxvcHRBcmdzOl99PXUucGFyc2VBcmd1bWVudHMoIlxcYmVnaW57Iit2KyJ9Iix5KSxBPXttb2RlOnUubW9kZSxlbnZOYW1lOnYscGFyc2VyOnV9LFA9eS5oYW5kbGVyKEEsVCxfKTt1LmV4cGVjdCgiXFxlbmQiLCExKTt2YXIgUj11Lm5leHRUb2tlbixGPVlvKHUucGFyc2VGdW5jdGlvbigpLCJlbnZpcm9ubWVudCIpO2lmKEYubmFtZSE9PXYpdGhyb3cgbmV3IENpKCJNaXNtYXRjaDogXFxiZWdpbnsiK3YrIn0gbWF0Y2hlZCBieSBcXGVuZHsiK0YubmFtZSsifSIsUik7cmV0dXJuIFB9cmV0dXJue3R5cGU6ImVudmlyb25tZW50Iixtb2RlOnUubW9kZSxuYW1lOnYsbmFtZUdyb3VwOnB9fX0pO3ZhciBWemU9KGkscyk9Pnt2YXIgdT1pLmZvbnQsZD1zLndpdGhGb250KHUpO3JldHVybiB1dShpLmJvZHksZCl9LFV6ZT0oaSxzKT0+e3ZhciB1PWkuZm9udCxkPXMud2l0aEZvbnQodSk7cmV0dXJuIExsKGkuYm9keSxkKX0sR3plPXsiXFxCYmIiOiJcXG1hdGhiYiIsIlxcYm9sZCI6IlxcbWF0aGJmIiwiXFxmcmFrIjoiXFxtYXRoZnJhayIsIlxcYm0iOiJcXGJvbGRzeW1ib2wifTtKaSh7dHlwZToiZm9udCIsbmFtZXM6WyJcXG1hdGhybSIsIlxcbWF0aGl0IiwiXFxtYXRoYmYiLCJcXG1hdGhub3JtYWwiLCJcXG1hdGhiYiIsIlxcbWF0aGNhbCIsIlxcbWF0aGZyYWsiLCJcXG1hdGhzY3IiLCJcXG1hdGhzZiIsIlxcbWF0aHR0IiwiXFxCYmIiLCJcXGJvbGQiLCJcXGZyYWsiXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJbkFyZ3VtZW50OiEwfSxoYW5kbGVyOihpLHMpPT57dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWkscD1iUShzWzBdKSx2PWQ7cmV0dXJuIHYgaW4gR3plJiYodj1HemVbdl0pLHt0eXBlOiJmb250Iixtb2RlOnUubW9kZSxmb250OnYuc2xpY2UoMSksYm9keTpwfX0saHRtbEJ1aWxkZXI6VnplLG1hdGhtbEJ1aWxkZXI6VXplfSksSmkoe3R5cGU6Im1jbGFzcyIsbmFtZXM6WyJcXGJvbGRzeW1ib2wiLCJcXGJtIl0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcjooaSxzKT0+e3ZhcntwYXJzZXI6dX09aSxkPXNbMF0scD1ZYS5pc0NoYXJhY3RlckJveChkKTtyZXR1cm57dHlwZToibWNsYXNzIixtb2RlOnUubW9kZSxtY2xhc3M6eVEoZCksYm9keTpbe3R5cGU6ImZvbnQiLG1vZGU6dS5tb2RlLGZvbnQ6ImJvbGRzeW1ib2wiLGJvZHk6ZH1dLGlzQ2hhcmFjdGVyQm94OnB9fX0pLEppKHt0eXBlOiJmb250IixuYW1lczpbIlxccm0iLCJcXHNmIiwiXFx0dCIsIlxcYmYiLCJcXGl0IiwiXFxjYWwiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6KGkscyk9Pnt2YXJ7cGFyc2VyOnUsZnVuY05hbWU6ZCxicmVha09uVG9rZW5UZXh0OnB9PWkse21vZGU6dn09dSxiPXUucGFyc2VFeHByZXNzaW9uKCEwLHApLHk9Im1hdGgiK2Quc2xpY2UoMSk7cmV0dXJue3R5cGU6ImZvbnQiLG1vZGU6dixmb250OnksYm9keTp7dHlwZToib3JkZ3JvdXAiLG1vZGU6dS5tb2RlLGJvZHk6Yn19fSxodG1sQnVpbGRlcjpWemUsbWF0aG1sQnVpbGRlcjpVemV9KTt2YXIgS3plPShpLHMpPT57dmFyIHU9cztyZXR1cm4gaT09PSJkaXNwbGF5Ij91PXUuaWQ+PVRhLlNDUklQVC5pZD91LnRleHQoKTpUYS5ESVNQTEFZOmk9PT0idGV4dCImJnUuc2l6ZT09PVRhLkRJU1BMQVkuc2l6ZT91PVRhLlRFWFQ6aT09PSJzY3JpcHQiP3U9VGEuU0NSSVBUOmk9PT0ic2NyaXB0c2NyaXB0IiYmKHU9VGEuU0NSSVBUU0NSSVBUKSx1fSxfYmU9KGkscyk9Pnt2YXIgdT1LemUoaS5zaXplLHMuc3R5bGUpLGQ9dS5mcmFjTnVtKCkscD11LmZyYWNEZW4oKSx2O3Y9cy5oYXZpbmdTdHlsZShkKTt2YXIgYj11dShpLm51bWVyLHYscyk7aWYoaS5jb250aW51ZWQpe3ZhciB5PTguNS9zLmZvbnRNZXRyaWNzKCkucHRQZXJFbSxUPTMuNS9zLmZvbnRNZXRyaWNzKCkucHRQZXJFbTtiLmhlaWdodD1iLmhlaWdodDx5P3k6Yi5oZWlnaHQsYi5kZXB0aD1iLmRlcHRoPFQ/VDpiLmRlcHRofXY9cy5oYXZpbmdTdHlsZShwKTt2YXIgXz11dShpLmRlbm9tLHYscyksQSxQLFI7aS5oYXNCYXJMaW5lPyhpLmJhclNpemU/KFA9VWgoaS5iYXJTaXplLHMpLEE9em4ubWFrZUxpbmVTcGFuKCJmcmFjLWxpbmUiLHMsUCkpOkE9em4ubWFrZUxpbmVTcGFuKCJmcmFjLWxpbmUiLHMpLFA9QS5oZWlnaHQsUj1BLmhlaWdodCk6KEE9bnVsbCxQPTAsUj1zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3MpO3ZhciBGLGosSzt1LnNpemU9PT1UYS5ESVNQTEFZLnNpemV8fGkuc2l6ZT09PSJkaXNwbGF5Ij8oRj1zLmZvbnRNZXRyaWNzKCkubnVtMSxQPjA/aj0zKlI6aj03KlIsSz1zLmZvbnRNZXRyaWNzKCkuZGVub20xKTooUD4wPyhGPXMuZm9udE1ldHJpY3MoKS5udW0yLGo9Uik6KEY9cy5mb250TWV0cmljcygpLm51bTMsaj0zKlIpLEs9cy5mb250TWV0cmljcygpLmRlbm9tMik7dmFyIGVlO2lmKEEpe3ZhciBvZT1zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodDtGLWIuZGVwdGgtKG9lKy41KlApPGomJihGKz1qLShGLWIuZGVwdGgtKG9lKy41KlApKSksb2UtLjUqUC0oXy5oZWlnaHQtSyk8aiYmKEsrPWotKG9lLS41KlAtKF8uaGVpZ2h0LUspKSk7dmFyIHBlPS0ob2UtLjUqUCk7ZWU9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOl8sc2hpZnQ6S30se3R5cGU6ImVsZW0iLGVsZW06QSxzaGlmdDpwZX0se3R5cGU6ImVsZW0iLGVsZW06YixzaGlmdDotRn1dfSxzKX1lbHNle3ZhciBpZT1GLWIuZGVwdGgtKF8uaGVpZ2h0LUspO2llPGomJihGKz0uNSooai1pZSksSys9LjUqKGotaWUpKSxlZT16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiaW5kaXZpZHVhbFNoaWZ0IixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06XyxzaGlmdDpLfSx7dHlwZToiZWxlbSIsZWxlbTpiLHNoaWZ0Oi1GfV19LHMpfXY9cy5oYXZpbmdTdHlsZSh1KSxlZS5oZWlnaHQqPXYuc2l6ZU11bHRpcGxpZXIvcy5zaXplTXVsdGlwbGllcixlZS5kZXB0aCo9di5zaXplTXVsdGlwbGllci9zLnNpemVNdWx0aXBsaWVyO3ZhciBiZTt1LnNpemU9PT1UYS5ESVNQTEFZLnNpemU/YmU9cy5mb250TWV0cmljcygpLmRlbGltMTp1LnNpemU9PT1UYS5TQ1JJUFRTQ1JJUFQuc2l6ZT9iZT1zLmhhdmluZ1N0eWxlKFRhLlNDUklQVCkuZm9udE1ldHJpY3MoKS5kZWxpbTI6YmU9cy5mb250TWV0cmljcygpLmRlbGltMjt2YXIgYWUsbmU7cmV0dXJuIGkubGVmdERlbGltPT1udWxsP2FlPXVSKHMsWyJtb3BlbiJdKTphZT1CNy5jdXN0b21TaXplZERlbGltKGkubGVmdERlbGltLGJlLCEwLHMuaGF2aW5nU3R5bGUodSksaS5tb2RlLFsibW9wZW4iXSksaS5jb250aW51ZWQ/bmU9em4ubWFrZVNwYW4oW10pOmkucmlnaHREZWxpbT09bnVsbD9uZT11UihzLFsibWNsb3NlIl0pOm5lPUI3LmN1c3RvbVNpemVkRGVsaW0oaS5yaWdodERlbGltLGJlLCEwLHMuaGF2aW5nU3R5bGUodSksaS5tb2RlLFsibWNsb3NlIl0pLHpuLm1ha2VTcGFuKFsibW9yZCJdLmNvbmNhdCh2LnNpemluZ0NsYXNzZXMocykpLFthZSx6bi5tYWtlU3BhbihbIm1mcmFjIl0sW2VlXSksbmVdLHMpfSxBYmU9KGkscyk9Pnt2YXIgdT1uZXcgdmkuTWF0aE5vZGUoIm1mcmFjIixbTGwoaS5udW1lcixzKSxMbChpLmRlbm9tLHMpXSk7aWYoIWkuaGFzQmFyTGluZSl1LnNldEF0dHJpYnV0ZSgibGluZXRoaWNrbmVzcyIsIjBweCIpO2Vsc2UgaWYoaS5iYXJTaXplKXt2YXIgZD1VaChpLmJhclNpemUscyk7dS5zZXRBdHRyaWJ1dGUoImxpbmV0aGlja25lc3MiLFJpKGQpKX12YXIgcD1LemUoaS5zaXplLHMuc3R5bGUpO2lmKHAuc2l6ZSE9PXMuc3R5bGUuc2l6ZSl7dT1uZXcgdmkuTWF0aE5vZGUoIm1zdHlsZSIsW3VdKTt2YXIgdj1wLnNpemU9PT1UYS5ESVNQTEFZLnNpemU/InRydWUiOiJmYWxzZSI7dS5zZXRBdHRyaWJ1dGUoImRpc3BsYXlzdHlsZSIsdiksdS5zZXRBdHRyaWJ1dGUoInNjcmlwdGxldmVsIiwiMCIpfWlmKGkubGVmdERlbGltIT1udWxsfHxpLnJpZ2h0RGVsaW0hPW51bGwpe3ZhciBiPVtdO2lmKGkubGVmdERlbGltIT1udWxsKXt2YXIgeT1uZXcgdmkuTWF0aE5vZGUoIm1vIixbbmV3IHZpLlRleHROb2RlKGkubGVmdERlbGltLnJlcGxhY2UoIlxcIiwiIikpXSk7eS5zZXRBdHRyaWJ1dGUoImZlbmNlIiwidHJ1ZSIpLGIucHVzaCh5KX1pZihiLnB1c2godSksaS5yaWdodERlbGltIT1udWxsKXt2YXIgVD1uZXcgdmkuTWF0aE5vZGUoIm1vIixbbmV3IHZpLlRleHROb2RlKGkucmlnaHREZWxpbS5yZXBsYWNlKCJcXCIsIiIpKV0pO1Quc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSxiLnB1c2goVCl9cmV0dXJuIGhiZShiKX1yZXR1cm4gdX07Smkoe3R5cGU6ImdlbmZyYWMiLG5hbWVzOlsiXFxkZnJhYyIsIlxcZnJhYyIsIlxcdGZyYWMiLCJcXGRiaW5vbSIsIlxcYmlub20iLCJcXHRiaW5vbSIsIlxcXFxhdG9wZnJhYyIsIlxcXFxicmFjZWZyYWMiLCJcXFxcYnJhY2tmcmFjIl0scHJvcHM6e251bUFyZ3M6MixhbGxvd2VkSW5Bcmd1bWVudDohMH0saGFuZGxlcjooaSxzKT0+e3ZhcntwYXJzZXI6dSxmdW5jTmFtZTpkfT1pLHA9c1swXSx2PXNbMV0sYix5PW51bGwsVD1udWxsLF89ImF1dG8iO3N3aXRjaChkKXtjYXNlIlxcZGZyYWMiOmNhc2UiXFxmcmFjIjpjYXNlIlxcdGZyYWMiOmI9ITA7YnJlYWs7Y2FzZSJcXFxcYXRvcGZyYWMiOmI9ITE7YnJlYWs7Y2FzZSJcXGRiaW5vbSI6Y2FzZSJcXGJpbm9tIjpjYXNlIlxcdGJpbm9tIjpiPSExLHk9IigiLFQ9IikiO2JyZWFrO2Nhc2UiXFxcXGJyYWNlZnJhYyI6Yj0hMSx5PSJcXHsiLFQ9IlxcfSI7YnJlYWs7Y2FzZSJcXFxcYnJhY2tmcmFjIjpiPSExLHk9IlsiLFQ9Il0iO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgZ2VuZnJhYyBjb21tYW5kIil9c3dpdGNoKGQpe2Nhc2UiXFxkZnJhYyI6Y2FzZSJcXGRiaW5vbSI6Xz0iZGlzcGxheSI7YnJlYWs7Y2FzZSJcXHRmcmFjIjpjYXNlIlxcdGJpbm9tIjpfPSJ0ZXh0IjticmVha31yZXR1cm57dHlwZToiZ2VuZnJhYyIsbW9kZTp1Lm1vZGUsY29udGludWVkOiExLG51bWVyOnAsZGVub206dixoYXNCYXJMaW5lOmIsbGVmdERlbGltOnkscmlnaHREZWxpbTpULHNpemU6XyxiYXJTaXplOm51bGx9fSxodG1sQnVpbGRlcjpfYmUsbWF0aG1sQnVpbGRlcjpBYmV9KSxKaSh7dHlwZToiZ2VuZnJhYyIsbmFtZXM6WyJcXGNmcmFjIl0scHJvcHM6e251bUFyZ3M6Mn0saGFuZGxlcjooaSxzKT0+e3ZhcntwYXJzZXI6dSxmdW5jTmFtZTpkfT1pLHA9c1swXSx2PXNbMV07cmV0dXJue3R5cGU6ImdlbmZyYWMiLG1vZGU6dS5tb2RlLGNvbnRpbnVlZDohMCxudW1lcjpwLGRlbm9tOnYsaGFzQmFyTGluZTohMCxsZWZ0RGVsaW06bnVsbCxyaWdodERlbGltOm51bGwsc2l6ZToiZGlzcGxheSIsYmFyU2l6ZTpudWxsfX19KSxKaSh7dHlwZToiaW5maXgiLG5hbWVzOlsiXFxvdmVyIiwiXFxjaG9vc2UiLCJcXGF0b3AiLCJcXGJyYWNlIiwiXFxicmFjayJdLHByb3BzOntudW1BcmdzOjAsaW5maXg6ITB9LGhhbmRsZXIoaSl7dmFye3BhcnNlcjpzLGZ1bmNOYW1lOnUsdG9rZW46ZH09aSxwO3N3aXRjaCh1KXtjYXNlIlxcb3ZlciI6cD0iXFxmcmFjIjticmVhaztjYXNlIlxcY2hvb3NlIjpwPSJcXGJpbm9tIjticmVhaztjYXNlIlxcYXRvcCI6cD0iXFxcXGF0b3BmcmFjIjticmVhaztjYXNlIlxcYnJhY2UiOnA9IlxcXFxicmFjZWZyYWMiO2JyZWFrO2Nhc2UiXFxicmFjayI6cD0iXFxcXGJyYWNrZnJhYyI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBpbmZpeCBnZW5mcmFjIGNvbW1hbmQiKX1yZXR1cm57dHlwZToiaW5maXgiLG1vZGU6cy5tb2RlLHJlcGxhY2VXaXRoOnAsdG9rZW46ZH19fSk7dmFyIFd6ZT1bImRpc3BsYXkiLCJ0ZXh0Iiwic2NyaXB0Iiwic2NyaXB0c2NyaXB0Il0sWXplPWZ1bmN0aW9uKHMpe3ZhciB1PW51bGw7cmV0dXJuIHMubGVuZ3RoPjAmJih1PXMsdT11PT09Ii4iP251bGw6dSksdX07Smkoe3R5cGU6ImdlbmZyYWMiLG5hbWVzOlsiXFxnZW5mcmFjIl0scHJvcHM6e251bUFyZ3M6NixhbGxvd2VkSW5Bcmd1bWVudDohMCxhcmdUeXBlczpbIm1hdGgiLCJtYXRoIiwic2l6ZSIsInRleHQiLCJtYXRoIiwibWF0aCJdfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1fT1pLGQ9c1s0XSxwPXNbNV0sdj1iUShzWzBdKSxiPXYudHlwZT09PSJhdG9tIiYmdi5mYW1pbHk9PT0ib3BlbiI/WXplKHYudGV4dCk6bnVsbCx5PWJRKHNbMV0pLFQ9eS50eXBlPT09ImF0b20iJiZ5LmZhbWlseT09PSJjbG9zZSI/WXplKHkudGV4dCk6bnVsbCxfPVlvKHNbMl0sInNpemUiKSxBLFA9bnVsbDtfLmlzQmxhbms/QT0hMDooUD1fLnZhbHVlLEE9UC5udW1iZXI+MCk7dmFyIFI9ImF1dG8iLEY9c1szXTtpZihGLnR5cGU9PT0ib3JkZ3JvdXAiKXtpZihGLmJvZHkubGVuZ3RoPjApe3ZhciBqPVlvKEYuYm9keVswXSwidGV4dG9yZCIpO1I9V3plW051bWJlcihqLnRleHQpXX19ZWxzZSBGPVlvKEYsInRleHRvcmQiKSxSPVd6ZVtOdW1iZXIoRi50ZXh0KV07cmV0dXJue3R5cGU6ImdlbmZyYWMiLG1vZGU6dS5tb2RlLG51bWVyOmQsZGVub206cCxjb250aW51ZWQ6ITEsaGFzQmFyTGluZTpBLGJhclNpemU6UCxsZWZ0RGVsaW06YixyaWdodERlbGltOlQsc2l6ZTpSfX0saHRtbEJ1aWxkZXI6X2JlLG1hdGhtbEJ1aWxkZXI6QWJlfSksSmkoe3R5cGU6ImluZml4IixuYW1lczpbIlxcYWJvdmUiXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsic2l6ZSJdLGluZml4OiEwfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmQsdG9rZW46cH09aTtyZXR1cm57dHlwZToiaW5maXgiLG1vZGU6dS5tb2RlLHJlcGxhY2VXaXRoOiJcXFxcYWJvdmVmcmFjIixzaXplOllvKHNbMF0sInNpemUiKS52YWx1ZSx0b2tlbjpwfX19KSxKaSh7dHlwZToiZ2VuZnJhYyIsbmFtZXM6WyJcXFxcYWJvdmVmcmFjIl0scHJvcHM6e251bUFyZ3M6MyxhcmdUeXBlczpbIm1hdGgiLCJzaXplIiwibWF0aCJdfSxoYW5kbGVyOihpLHMpPT57dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWkscD1zWzBdLHY9JHF0KFlvKHNbMV0sImluZml4Iikuc2l6ZSksYj1zWzJdLHk9di5udW1iZXI+MDtyZXR1cm57dHlwZToiZ2VuZnJhYyIsbW9kZTp1Lm1vZGUsbnVtZXI6cCxkZW5vbTpiLGNvbnRpbnVlZDohMSxoYXNCYXJMaW5lOnksYmFyU2l6ZTp2LGxlZnREZWxpbTpudWxsLHJpZ2h0RGVsaW06bnVsbCxzaXplOiJhdXRvIn19LGh0bWxCdWlsZGVyOl9iZSxtYXRobWxCdWlsZGVyOkFiZX0pO3ZhciBYemU9KGkscyk9Pnt2YXIgdT1zLnN0eWxlLGQscDtpLnR5cGU9PT0ic3Vwc3ViIj8oZD1pLnN1cD91dShpLnN1cCxzLmhhdmluZ1N0eWxlKHUuc3VwKCkpLHMpOnV1KGkuc3ViLHMuaGF2aW5nU3R5bGUodS5zdWIoKSkscykscD1ZbyhpLmJhc2UsImhvcml6QnJhY2UiKSk6cD1ZbyhpLCJob3JpekJyYWNlIik7dmFyIHY9dXUocC5iYXNlLHMuaGF2aW5nQmFzZVN0eWxlKFRhLkRJU1BMQVkpKSxiPVA3LnN2Z1NwYW4ocCxzKSx5O2lmKHAuaXNPdmVyPyh5PXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06dn0se3R5cGU6Imtlcm4iLHNpemU6LjF9LHt0eXBlOiJlbGVtIixlbGVtOmJ9XX0scykseS5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblsxXS5jbGFzc2VzLnB1c2goInN2Zy1hbGlnbiIpKTooeT16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiYm90dG9tIixwb3NpdGlvbkRhdGE6di5kZXB0aCsuMStiLmhlaWdodCxjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06Yn0se3R5cGU6Imtlcm4iLHNpemU6LjF9LHt0eXBlOiJlbGVtIixlbGVtOnZ9XX0scykseS5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jbGFzc2VzLnB1c2goInN2Zy1hbGlnbiIpKSxkKXt2YXIgVD16bi5tYWtlU3BhbihbIm1vcmQiLHAuaXNPdmVyPyJtb3ZlciI6Im11bmRlciJdLFt5XSxzKTtwLmlzT3Zlcj95PXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06VH0se3R5cGU6Imtlcm4iLHNpemU6LjJ9LHt0eXBlOiJlbGVtIixlbGVtOmR9XX0scyk6eT16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiYm90dG9tIixwb3NpdGlvbkRhdGE6VC5kZXB0aCsuMitkLmhlaWdodCtkLmRlcHRoLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpkfSx7dHlwZToia2VybiIsc2l6ZTouMn0se3R5cGU6ImVsZW0iLGVsZW06VH1dfSxzKX1yZXR1cm4gem4ubWFrZVNwYW4oWyJtb3JkIixwLmlzT3Zlcj8ibW92ZXIiOiJtdW5kZXIiXSxbeV0scyl9LGxWdD0oaSxzKT0+e3ZhciB1PVA3Lm1hdGhNTG5vZGUoaS5sYWJlbCk7cmV0dXJuIG5ldyB2aS5NYXRoTm9kZShpLmlzT3Zlcj8ibW92ZXIiOiJtdW5kZXIiLFtMbChpLmJhc2UscyksdV0pfTtKaSh7dHlwZToiaG9yaXpCcmFjZSIsbmFtZXM6WyJcXG92ZXJicmFjZSIsIlxcdW5kZXJicmFjZSJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXIoaSxzKXt2YXJ7cGFyc2VyOnUsZnVuY05hbWU6ZH09aTtyZXR1cm57dHlwZToiaG9yaXpCcmFjZSIsbW9kZTp1Lm1vZGUsbGFiZWw6ZCxpc092ZXI6L15cXG92ZXIvLnRlc3QoZCksYmFzZTpzWzBdfX0saHRtbEJ1aWxkZXI6WHplLG1hdGhtbEJ1aWxkZXI6bFZ0fSksSmkoe3R5cGU6ImhyZWYiLG5hbWVzOlsiXFxocmVmIl0scHJvcHM6e251bUFyZ3M6MixhcmdUeXBlczpbInVybCIsIm9yaWdpbmFsIl0sYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjooaSxzKT0+e3ZhcntwYXJzZXI6dX09aSxkPXNbMV0scD1ZbyhzWzBdLCJ1cmwiKS51cmw7cmV0dXJuIHUuc2V0dGluZ3MuaXNUcnVzdGVkKHtjb21tYW5kOiJcXGhyZWYiLHVybDpwfSk/e3R5cGU6ImhyZWYiLG1vZGU6dS5tb2RlLGhyZWY6cCxib2R5OlhmKGQpfTp1LmZvcm1hdFVuc3VwcG9ydGVkQ21kKCJcXGhyZWYiKX0saHRtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT1kMShpLmJvZHkscywhMSk7cmV0dXJuIHpuLm1ha2VBbmNob3IoaS5ocmVmLFtdLHUscyl9LG1hdGhtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT1fOShpLmJvZHkscyk7cmV0dXJuIHUgaW5zdGFuY2VvZiBGdnx8KHU9bmV3IEZ2KCJtcm93IixbdV0pKSx1LnNldEF0dHJpYnV0ZSgiaHJlZiIsaS5ocmVmKSx1fX0pLEppKHt0eXBlOiJocmVmIixuYW1lczpbIlxcdXJsIl0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbInVybCJdLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6KGkscyk9Pnt2YXJ7cGFyc2VyOnV9PWksZD1ZbyhzWzBdLCJ1cmwiKS51cmw7aWYoIXUuc2V0dGluZ3MuaXNUcnVzdGVkKHtjb21tYW5kOiJcXHVybCIsdXJsOmR9KSlyZXR1cm4gdS5mb3JtYXRVbnN1cHBvcnRlZENtZCgiXFx1cmwiKTtmb3IodmFyIHA9W10sdj0wO3Y8ZC5sZW5ndGg7disrKXt2YXIgYj1kW3ZdO2I9PT0ifiImJihiPSJcXHRleHRhc2NpaXRpbGRlIikscC5wdXNoKHt0eXBlOiJ0ZXh0b3JkIixtb2RlOiJ0ZXh0Iix0ZXh0OmJ9KX12YXIgeT17dHlwZToidGV4dCIsbW9kZTp1Lm1vZGUsZm9udDoiXFx0ZXh0dHQiLGJvZHk6cH07cmV0dXJue3R5cGU6ImhyZWYiLG1vZGU6dS5tb2RlLGhyZWY6ZCxib2R5OlhmKHkpfX19KSxKaSh7dHlwZToiaGJveCIsbmFtZXM6WyJcXGhib3giXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsidGV4dCJdLGFsbG93ZWRJblRleHQ6ITAscHJpbWl0aXZlOiEwfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1fT1pO3JldHVybnt0eXBlOiJoYm94Iixtb2RlOnUubW9kZSxib2R5OlhmKHNbMF0pfX0saHRtbEJ1aWxkZXIoaSxzKXt2YXIgdT1kMShpLmJvZHkscywhMSk7cmV0dXJuIHpuLm1ha2VGcmFnbWVudCh1KX0sbWF0aG1sQnVpbGRlcihpLHMpe3JldHVybiBuZXcgdmkuTWF0aE5vZGUoIm1yb3ciLGoyKGkuYm9keSxzKSl9fSksSmkoe3R5cGU6Imh0bWwiLG5hbWVzOlsiXFxodG1sQ2xhc3MiLCJcXGh0bWxJZCIsIlxcaHRtbFN0eWxlIiwiXFxodG1sRGF0YSJdLHByb3BzOntudW1BcmdzOjIsYXJnVHlwZXM6WyJyYXciLCJvcmlnaW5hbCJdLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6KGkscyk9Pnt2YXJ7cGFyc2VyOnUsZnVuY05hbWU6ZCx0b2tlbjpwfT1pLHY9WW8oc1swXSwicmF3Iikuc3RyaW5nLGI9c1sxXTt1LnNldHRpbmdzLnN0cmljdCYmdS5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoImh0bWxFeHRlbnNpb24iLCJIVE1MIGV4dGVuc2lvbiBpcyBkaXNhYmxlZCBvbiBzdHJpY3QgbW9kZSIpO3ZhciB5LFQ9e307c3dpdGNoKGQpe2Nhc2UiXFxodG1sQ2xhc3MiOlQuY2xhc3M9dix5PXtjb21tYW5kOiJcXGh0bWxDbGFzcyIsY2xhc3M6dn07YnJlYWs7Y2FzZSJcXGh0bWxJZCI6VC5pZD12LHk9e2NvbW1hbmQ6IlxcaHRtbElkIixpZDp2fTticmVhaztjYXNlIlxcaHRtbFN0eWxlIjpULnN0eWxlPXYseT17Y29tbWFuZDoiXFxodG1sU3R5bGUiLHN0eWxlOnZ9O2JyZWFrO2Nhc2UiXFxodG1sRGF0YSI6e2Zvcih2YXIgXz12LnNwbGl0KCIsIiksQT0wO0E8Xy5sZW5ndGg7QSsrKXt2YXIgUD1fW0FdLnNwbGl0KCI9Iik7aWYoUC5sZW5ndGghPT0yKXRocm93IG5ldyBDaSgiRXJyb3IgcGFyc2luZyBrZXktdmFsdWUgZm9yIFxcaHRtbERhdGEiKTtUWyJkYXRhLSIrUFswXS50cmltKCldPVBbMV0udHJpbSgpfXk9e2NvbW1hbmQ6IlxcaHRtbERhdGEiLGF0dHJpYnV0ZXM6VH07YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBodG1sIGNvbW1hbmQiKX1yZXR1cm4gdS5zZXR0aW5ncy5pc1RydXN0ZWQoeSk/e3R5cGU6Imh0bWwiLG1vZGU6dS5tb2RlLGF0dHJpYnV0ZXM6VCxib2R5OlhmKGIpfTp1LmZvcm1hdFVuc3VwcG9ydGVkQ21kKGQpfSxodG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PWQxKGkuYm9keSxzLCExKSxkPVsiZW5jbG9zaW5nIl07aS5hdHRyaWJ1dGVzLmNsYXNzJiZkLnB1c2goLi4uaS5hdHRyaWJ1dGVzLmNsYXNzLnRyaW0oKS5zcGxpdCgvXHMrLykpO3ZhciBwPXpuLm1ha2VTcGFuKGQsdSxzKTtmb3IodmFyIHYgaW4gaS5hdHRyaWJ1dGVzKXYhPT0iY2xhc3MiJiZpLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkodikmJnAuc2V0QXR0cmlidXRlKHYsaS5hdHRyaWJ1dGVzW3ZdKTtyZXR1cm4gcH0sbWF0aG1sQnVpbGRlcjooaSxzKT0+XzkoaS5ib2R5LHMpfSksSmkoe3R5cGU6Imh0bWxtYXRobWwiLG5hbWVzOlsiXFxodG1sQG1hdGhtbCJdLHByb3BzOntudW1BcmdzOjIsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjooaSxzKT0+e3ZhcntwYXJzZXI6dX09aTtyZXR1cm57dHlwZToiaHRtbG1hdGhtbCIsbW9kZTp1Lm1vZGUsaHRtbDpYZihzWzBdKSxtYXRobWw6WGYoc1sxXSl9fSxodG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PWQxKGkuaHRtbCxzLCExKTtyZXR1cm4gem4ubWFrZUZyYWdtZW50KHUpfSxtYXRobWxCdWlsZGVyOihpLHMpPT5fOShpLm1hdGhtbCxzKX0pO3ZhciBMYmU9ZnVuY3Rpb24ocyl7aWYoL15bLStdPyAqKFxkKyhcLlxkKik/fFwuXGQrKSQvLnRlc3QocykpcmV0dXJue251bWJlcjorcyx1bml0OiJicCJ9O3ZhciB1PS8oWy0rXT8pICooXGQrKD86XC5cZCopP3xcLlxkKykgKihbYS16XXsyfSkvLmV4ZWMocyk7aWYoIXUpdGhyb3cgbmV3IENpKCJJbnZhbGlkIHNpemU6ICciK3MrIicgaW4gXFxpbmNsdWRlZ3JhcGhpY3MiKTt2YXIgZD17bnVtYmVyOisodVsxXSt1WzJdKSx1bml0OnVbM119O2lmKCFKJGUoZCkpdGhyb3cgbmV3IENpKCJJbnZhbGlkIHVuaXQ6ICciK2QudW5pdCsiJyBpbiBcXGluY2x1ZGVncmFwaGljcy4iKTtyZXR1cm4gZH07Smkoe3R5cGU6ImluY2x1ZGVncmFwaGljcyIsbmFtZXM6WyJcXGluY2x1ZGVncmFwaGljcyJdLHByb3BzOntudW1BcmdzOjEsbnVtT3B0aW9uYWxBcmdzOjEsYXJnVHlwZXM6WyJyYXciLCJ1cmwiXSxhbGxvd2VkSW5UZXh0OiExfSxoYW5kbGVyOihpLHMsdSk9Pnt2YXJ7cGFyc2VyOmR9PWkscD17bnVtYmVyOjAsdW5pdDoiZW0ifSx2PXtudW1iZXI6LjksdW5pdDoiZW0ifSxiPXtudW1iZXI6MCx1bml0OiJlbSJ9LHk9IiI7aWYodVswXSlmb3IodmFyIFQ9WW8odVswXSwicmF3Iikuc3RyaW5nLF89VC5zcGxpdCgiLCIpLEE9MDtBPF8ubGVuZ3RoO0ErKyl7dmFyIFA9X1tBXS5zcGxpdCgiPSIpO2lmKFAubGVuZ3RoPT09Mil7dmFyIFI9UFsxXS50cmltKCk7c3dpdGNoKFBbMF0udHJpbSgpKXtjYXNlImFsdCI6eT1SO2JyZWFrO2Nhc2Uid2lkdGgiOnA9TGJlKFIpO2JyZWFrO2Nhc2UiaGVpZ2h0Ijp2PUxiZShSKTticmVhaztjYXNlInRvdGFsaGVpZ2h0IjpiPUxiZShSKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBDaSgiSW52YWxpZCBrZXk6ICciK1BbMF0rIicgaW4gXFxpbmNsdWRlZ3JhcGhpY3MuIil9fX12YXIgRj1ZbyhzWzBdLCJ1cmwiKS51cmw7cmV0dXJuIHk9PT0iIiYmKHk9Rix5PXkucmVwbGFjZSgvXi4qW1xcL10vLCIiKSx5PXkuc3Vic3RyaW5nKDAseS5sYXN0SW5kZXhPZigiLiIpKSksZC5zZXR0aW5ncy5pc1RydXN0ZWQoe2NvbW1hbmQ6IlxcaW5jbHVkZWdyYXBoaWNzIix1cmw6Rn0pP3t0eXBlOiJpbmNsdWRlZ3JhcGhpY3MiLG1vZGU6ZC5tb2RlLGFsdDp5LHdpZHRoOnAsaGVpZ2h0OnYsdG90YWxoZWlnaHQ6YixzcmM6Rn06ZC5mb3JtYXRVbnN1cHBvcnRlZENtZCgiXFxpbmNsdWRlZ3JhcGhpY3MiKX0saHRtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT1VaChpLmhlaWdodCxzKSxkPTA7aS50b3RhbGhlaWdodC5udW1iZXI+MCYmKGQ9VWgoaS50b3RhbGhlaWdodCxzKS11KTt2YXIgcD0wO2kud2lkdGgubnVtYmVyPjAmJihwPVVoKGkud2lkdGgscykpO3ZhciB2PXtoZWlnaHQ6UmkodStkKX07cD4wJiYodi53aWR0aD1SaShwKSksZD4wJiYodi52ZXJ0aWNhbEFsaWduPVJpKC1kKSk7dmFyIGI9bmV3IGxIdChpLnNyYyxpLmFsdCx2KTtyZXR1cm4gYi5oZWlnaHQ9dSxiLmRlcHRoPWQsYn0sbWF0aG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PW5ldyB2aS5NYXRoTm9kZSgibWdseXBoIixbXSk7dS5zZXRBdHRyaWJ1dGUoImFsdCIsaS5hbHQpO3ZhciBkPVVoKGkuaGVpZ2h0LHMpLHA9MDtpZihpLnRvdGFsaGVpZ2h0Lm51bWJlcj4wJiYocD1VaChpLnRvdGFsaGVpZ2h0LHMpLWQsdS5zZXRBdHRyaWJ1dGUoInZhbGlnbiIsUmkoLXApKSksdS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsUmkoZCtwKSksaS53aWR0aC5udW1iZXI+MCl7dmFyIHY9VWgoaS53aWR0aCxzKTt1LnNldEF0dHJpYnV0ZSgid2lkdGgiLFJpKHYpKX1yZXR1cm4gdS5zZXRBdHRyaWJ1dGUoInNyYyIsaS5zcmMpLHV9fSksSmkoe3R5cGU6Imtlcm4iLG5hbWVzOlsiXFxrZXJuIiwiXFxta2VybiIsIlxcaHNraXAiLCJcXG1za2lwIl0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbInNpemUiXSxwcmltaXRpdmU6ITAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcihpLHMpe3ZhcntwYXJzZXI6dSxmdW5jTmFtZTpkfT1pLHA9WW8oc1swXSwic2l6ZSIpO2lmKHUuc2V0dGluZ3Muc3RyaWN0KXt2YXIgdj1kWzFdPT09Im0iLGI9cC52YWx1ZS51bml0PT09Im11Ijt2PyhifHx1LnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgibWF0aFZzVGV4dFVuaXRzIiwiTGFUZVgncyAiK2QrIiBzdXBwb3J0cyBvbmx5IG11IHVuaXRzLCAiKygibm90ICIrcC52YWx1ZS51bml0KyIgdW5pdHMiKSksdS5tb2RlIT09Im1hdGgiJiZ1LnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgibWF0aFZzVGV4dFVuaXRzIiwiTGFUZVgncyAiK2QrIiB3b3JrcyBvbmx5IGluIG1hdGggbW9kZSIpKTpiJiZ1LnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgibWF0aFZzVGV4dFVuaXRzIiwiTGFUZVgncyAiK2QrIiBkb2Vzbid0IHN1cHBvcnQgbXUgdW5pdHMiKX1yZXR1cm57dHlwZToia2VybiIsbW9kZTp1Lm1vZGUsZGltZW5zaW9uOnAudmFsdWV9fSxodG1sQnVpbGRlcihpLHMpe3JldHVybiB6bi5tYWtlR2x1ZShpLmRpbWVuc2lvbixzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PVVoKGkuZGltZW5zaW9uLHMpO3JldHVybiBuZXcgdmkuU3BhY2VOb2RlKHUpfX0pLEppKHt0eXBlOiJsYXAiLG5hbWVzOlsiXFxtYXRobGxhcCIsIlxcbWF0aHJsYXAiLCJcXG1hdGhjbGFwIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOihpLHMpPT57dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWkscD1zWzBdO3JldHVybnt0eXBlOiJsYXAiLG1vZGU6dS5tb2RlLGFsaWdubWVudDpkLnNsaWNlKDUpLGJvZHk6cH19LGh0bWxCdWlsZGVyOihpLHMpPT57dmFyIHU7aS5hbGlnbm1lbnQ9PT0iY2xhcCI/KHU9em4ubWFrZVNwYW4oW10sW3V1KGkuYm9keSxzKV0pLHU9em4ubWFrZVNwYW4oWyJpbm5lciJdLFt1XSxzKSk6dT16bi5tYWtlU3BhbihbImlubmVyIl0sW3V1KGkuYm9keSxzKV0pO3ZhciBkPXpuLm1ha2VTcGFuKFsiZml4Il0sW10pLHA9em4ubWFrZVNwYW4oW2kuYWxpZ25tZW50XSxbdSxkXSxzKSx2PXpuLm1ha2VTcGFuKFsic3RydXQiXSk7cmV0dXJuIHYuc3R5bGUuaGVpZ2h0PVJpKHAuaGVpZ2h0K3AuZGVwdGgpLHAuZGVwdGgmJih2LnN0eWxlLnZlcnRpY2FsQWxpZ249UmkoLXAuZGVwdGgpKSxwLmNoaWxkcmVuLnVuc2hpZnQodikscD16bi5tYWtlU3BhbihbInRoaW5ib3giXSxbcF0scyksem4ubWFrZVNwYW4oWyJtb3JkIiwidmJveCJdLFtwXSxzKX0sbWF0aG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PW5ldyB2aS5NYXRoTm9kZSgibXBhZGRlZCIsW0xsKGkuYm9keSxzKV0pO2lmKGkuYWxpZ25tZW50IT09InJsYXAiKXt2YXIgZD1pLmFsaWdubWVudD09PSJsbGFwIj8iLTEiOiItMC41Ijt1LnNldEF0dHJpYnV0ZSgibHNwYWNlIixkKyJ3aWR0aCIpfXJldHVybiB1LnNldEF0dHJpYnV0ZSgid2lkdGgiLCIwcHgiKSx1fX0pLEppKHt0eXBlOiJzdHlsaW5nIixuYW1lczpbIlxcKCIsIiQiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITAsYWxsb3dlZEluTWF0aDohMX0saGFuZGxlcihpLHMpe3ZhcntmdW5jTmFtZTp1LHBhcnNlcjpkfT1pLHA9ZC5tb2RlO2Quc3dpdGNoTW9kZSgibWF0aCIpO3ZhciB2PXU9PT0iXFwoIj8iXFwpIjoiJCIsYj1kLnBhcnNlRXhwcmVzc2lvbighMSx2KTtyZXR1cm4gZC5leHBlY3QodiksZC5zd2l0Y2hNb2RlKHApLHt0eXBlOiJzdHlsaW5nIixtb2RlOmQubW9kZSxzdHlsZToidGV4dCIsYm9keTpifX19KSxKaSh7dHlwZToidGV4dCIsbmFtZXM6WyJcXCkiLCJcXF0iXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITAsYWxsb3dlZEluTWF0aDohMX0saGFuZGxlcihpLHMpe3Rocm93IG5ldyBDaSgiTWlzbWF0Y2hlZCAiK2kuZnVuY05hbWUpfX0pO3ZhciBRemU9KGkscyk9Pntzd2l0Y2gocy5zdHlsZS5zaXplKXtjYXNlIFRhLkRJU1BMQVkuc2l6ZTpyZXR1cm4gaS5kaXNwbGF5O2Nhc2UgVGEuVEVYVC5zaXplOnJldHVybiBpLnRleHQ7Y2FzZSBUYS5TQ1JJUFQuc2l6ZTpyZXR1cm4gaS5zY3JpcHQ7Y2FzZSBUYS5TQ1JJUFRTQ1JJUFQuc2l6ZTpyZXR1cm4gaS5zY3JpcHRzY3JpcHQ7ZGVmYXVsdDpyZXR1cm4gaS50ZXh0fX07Smkoe3R5cGU6Im1hdGhjaG9pY2UiLG5hbWVzOlsiXFxtYXRoY2hvaWNlIl0scHJvcHM6e251bUFyZ3M6NCxwcmltaXRpdmU6ITB9LGhhbmRsZXI6KGkscyk9Pnt2YXJ7cGFyc2VyOnV9PWk7cmV0dXJue3R5cGU6Im1hdGhjaG9pY2UiLG1vZGU6dS5tb2RlLGRpc3BsYXk6WGYoc1swXSksdGV4dDpYZihzWzFdKSxzY3JpcHQ6WGYoc1syXSksc2NyaXB0c2NyaXB0OlhmKHNbM10pfX0saHRtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT1RemUoaSxzKSxkPWQxKHUscywhMSk7cmV0dXJuIHpuLm1ha2VGcmFnbWVudChkKX0sbWF0aG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PVF6ZShpLHMpO3JldHVybiBfOSh1LHMpfX0pO3ZhciBKemU9KGkscyx1LGQscCx2LGIpPT57aT16bi5tYWtlU3BhbihbXSxbaV0pO3ZhciB5PXUmJllhLmlzQ2hhcmFjdGVyQm94KHUpLFQsXztpZihzKXt2YXIgQT11dShzLGQuaGF2aW5nU3R5bGUocC5zdXAoKSksZCk7Xz17ZWxlbTpBLGtlcm46TWF0aC5tYXgoZC5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzEsZC5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzMtQS5kZXB0aCl9fWlmKHUpe3ZhciBQPXV1KHUsZC5oYXZpbmdTdHlsZShwLnN1YigpKSxkKTtUPXtlbGVtOlAsa2VybjpNYXRoLm1heChkLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nMixkLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNC1QLmhlaWdodCl9fXZhciBSO2lmKF8mJlQpe3ZhciBGPWQuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1K1QuZWxlbS5oZWlnaHQrVC5lbGVtLmRlcHRoK1Qua2VybitpLmRlcHRoK2I7Uj16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiYm90dG9tIixwb3NpdGlvbkRhdGE6RixjaGlsZHJlbjpbe3R5cGU6Imtlcm4iLHNpemU6ZC5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzV9LHt0eXBlOiJlbGVtIixlbGVtOlQuZWxlbSxtYXJnaW5MZWZ0OlJpKC12KX0se3R5cGU6Imtlcm4iLHNpemU6VC5rZXJufSx7dHlwZToiZWxlbSIsZWxlbTppfSx7dHlwZToia2VybiIsc2l6ZTpfLmtlcm59LHt0eXBlOiJlbGVtIixlbGVtOl8uZWxlbSxtYXJnaW5MZWZ0OlJpKHYpfSx7dHlwZToia2VybiIsc2l6ZTpkLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNX1dfSxkKX1lbHNlIGlmKFQpe3ZhciBqPWkuaGVpZ2h0LWI7Uj16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToidG9wIixwb3NpdGlvbkRhdGE6aixjaGlsZHJlbjpbe3R5cGU6Imtlcm4iLHNpemU6ZC5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzV9LHt0eXBlOiJlbGVtIixlbGVtOlQuZWxlbSxtYXJnaW5MZWZ0OlJpKC12KX0se3R5cGU6Imtlcm4iLHNpemU6VC5rZXJufSx7dHlwZToiZWxlbSIsZWxlbTppfV19LGQpfWVsc2UgaWYoXyl7dmFyIEs9aS5kZXB0aCtiO1I9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImJvdHRvbSIscG9zaXRpb25EYXRhOkssY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOml9LHt0eXBlOiJrZXJuIixzaXplOl8ua2Vybn0se3R5cGU6ImVsZW0iLGVsZW06Xy5lbGVtLG1hcmdpbkxlZnQ6Umkodil9LHt0eXBlOiJrZXJuIixzaXplOmQuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1fV19LGQpfWVsc2UgcmV0dXJuIGk7dmFyIGVlPVtSXTtpZihUJiZ2IT09MCYmIXkpe3ZhciBpZT16bi5tYWtlU3BhbihbIm1zcGFjZSJdLFtdLGQpO2llLnN0eWxlLm1hcmdpblJpZ2h0PVJpKHYpLGVlLnVuc2hpZnQoaWUpfXJldHVybiB6bi5tYWtlU3BhbihbIm1vcCIsIm9wLWxpbWl0cyJdLGVlLGQpfSxaemU9WyJcXHNtYWxsaW50Il0sUEQ9KGkscyk9Pnt2YXIgdSxkLHA9ITEsdjtpLnR5cGU9PT0ic3Vwc3ViIj8odT1pLnN1cCxkPWkuc3ViLHY9WW8oaS5iYXNlLCJvcCIpLHA9ITApOnY9WW8oaSwib3AiKTt2YXIgYj1zLnN0eWxlLHk9ITE7Yi5zaXplPT09VGEuRElTUExBWS5zaXplJiZ2LnN5bWJvbCYmIVlhLmNvbnRhaW5zKFp6ZSx2Lm5hbWUpJiYoeT0hMCk7dmFyIFQ7aWYodi5zeW1ib2wpe3ZhciBfPXk/IlNpemUyLVJlZ3VsYXIiOiJTaXplMS1SZWd1bGFyIixBPSIiO2lmKCh2Lm5hbWU9PT0iXFxvaWludCJ8fHYubmFtZT09PSJcXG9paWludCIpJiYoQT12Lm5hbWUuc2xpY2UoMSksdi5uYW1lPUE9PT0ib2lpbnQiPyJcXGlpbnQiOiJcXGlpaW50IiksVD16bi5tYWtlU3ltYm9sKHYubmFtZSxfLCJtYXRoIixzLFsibW9wIiwib3Atc3ltYm9sIix5PyJsYXJnZS1vcCI6InNtYWxsLW9wIl0pLEEubGVuZ3RoPjApe3ZhciBQPVQuaXRhbGljLFI9em4uc3RhdGljU3ZnKEErIlNpemUiKyh5PyIyIjoiMSIpLHMpO1Q9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOlQsc2hpZnQ6MH0se3R5cGU6ImVsZW0iLGVsZW06UixzaGlmdDp5Py4wODowfV19LHMpLHYubmFtZT0iXFwiK0EsVC5jbGFzc2VzLnVuc2hpZnQoIm1vcCIpLFQuaXRhbGljPVB9fWVsc2UgaWYodi5ib2R5KXt2YXIgRj1kMSh2LmJvZHkscywhMCk7Ri5sZW5ndGg9PT0xJiZGWzBdaW5zdGFuY2VvZiBCdj8oVD1GWzBdLFQuY2xhc3Nlc1swXT0ibW9wIik6VD16bi5tYWtlU3BhbihbIm1vcCJdLEYscyl9ZWxzZXtmb3IodmFyIGo9W10sSz0xO0s8di5uYW1lLmxlbmd0aDtLKyspai5wdXNoKHpuLm1hdGhzeW0odi5uYW1lW0tdLHYubW9kZSxzKSk7VD16bi5tYWtlU3BhbihbIm1vcCJdLGoscyl9dmFyIGVlPTAsaWU9MDtyZXR1cm4oVCBpbnN0YW5jZW9mIEJ2fHx2Lm5hbWU9PT0iXFxvaWludCJ8fHYubmFtZT09PSJcXG9paWludCIpJiYhdi5zdXBwcmVzc0Jhc2VTaGlmdCYmKGVlPShULmhlaWdodC1ULmRlcHRoKS8yLXMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0LGllPVQuaXRhbGljKSxwP0p6ZShULHUsZCxzLGIsaWUsZWUpOihlZSYmKFQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixULnN0eWxlLnRvcD1SaShlZSkpLFQpfSxkUj0oaSxzKT0+e3ZhciB1O2lmKGkuc3ltYm9sKXU9bmV3IEZ2KCJtbyIsW1J2KGkubmFtZSxpLm1vZGUpXSksWWEuY29udGFpbnMoWnplLGkubmFtZSkmJnUuc2V0QXR0cmlidXRlKCJsYXJnZW9wIiwiZmFsc2UiKTtlbHNlIGlmKGkuYm9keSl1PW5ldyBGdigibW8iLGoyKGkuYm9keSxzKSk7ZWxzZXt1PW5ldyBGdigibWkiLFtuZXcgbFIoaS5uYW1lLnNsaWNlKDEpKV0pO3ZhciBkPW5ldyBGdigibW8iLFtSdigi4oGhIiwidGV4dCIpXSk7aS5wYXJlbnRJc1N1cFN1Yj91PW5ldyBGdigibXJvdyIsW3UsZF0pOnU9YnplKFt1LGRdKX1yZXR1cm4gdX0saFZ0PXsi4oiPIjoiXFxwcm9kIiwi4oiQIjoiXFxjb3Byb2QiLCLiiJEiOiJcXHN1bSIsIuKLgCI6IlxcYmlnd2VkZ2UiLCLii4EiOiJcXGJpZ3ZlZSIsIuKLgiI6IlxcYmlnY2FwIiwi4ouDIjoiXFxiaWdjdXAiLCLiqIAiOiJcXGJpZ29kb3QiLCLiqIEiOiJcXGJpZ29wbHVzIiwi4qiCIjoiXFxiaWdvdGltZXMiLCLiqIQiOiJcXGJpZ3VwbHVzIiwi4qiGIjoiXFxiaWdzcWN1cCJ9O0ppKHt0eXBlOiJvcCIsbmFtZXM6WyJcXGNvcHJvZCIsIlxcYmlndmVlIiwiXFxiaWd3ZWRnZSIsIlxcYmlndXBsdXMiLCJcXGJpZ2NhcCIsIlxcYmlnY3VwIiwiXFxpbnRvcCIsIlxccHJvZCIsIlxcc3VtIiwiXFxiaWdvdGltZXMiLCJcXGJpZ29wbHVzIiwiXFxiaWdvZG90IiwiXFxiaWdzcWN1cCIsIlxcc21hbGxpbnQiLCLiiI8iLCLiiJAiLCLiiJEiLCLii4AiLCLii4EiLCLii4IiLCLii4MiLCLiqIAiLCLiqIEiLCLiqIIiLCLiqIQiLCLiqIYiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyOihpLHMpPT57dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWkscD1kO3JldHVybiBwLmxlbmd0aD09PTEmJihwPWhWdFtwXSkse3R5cGU6Im9wIixtb2RlOnUubW9kZSxsaW1pdHM6ITAscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiEwLG5hbWU6cH19LGh0bWxCdWlsZGVyOlBELG1hdGhtbEJ1aWxkZXI6ZFJ9KSxKaSh7dHlwZToib3AiLG5hbWVzOlsiXFxtYXRob3AiXSxwcm9wczp7bnVtQXJnczoxLHByaW1pdGl2ZTohMH0saGFuZGxlcjooaSxzKT0+e3ZhcntwYXJzZXI6dX09aSxkPXNbMF07cmV0dXJue3R5cGU6Im9wIixtb2RlOnUubW9kZSxsaW1pdHM6ITEscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiExLGJvZHk6WGYoZCl9fSxodG1sQnVpbGRlcjpQRCxtYXRobWxCdWlsZGVyOmRSfSk7dmFyIGZWdD17IuKIqyI6IlxcaW50Iiwi4oisIjoiXFxpaW50Iiwi4oitIjoiXFxpaWludCIsIuKIriI6Ilxcb2ludCIsIuKIryI6Ilxcb2lpbnQiLCLiiLAiOiJcXG9paWludCJ9O0ppKHt0eXBlOiJvcCIsbmFtZXM6WyJcXGFyY3NpbiIsIlxcYXJjY29zIiwiXFxhcmN0YW4iLCJcXGFyY3RnIiwiXFxhcmNjdGciLCJcXGFyZyIsIlxcY2giLCJcXGNvcyIsIlxcY29zZWMiLCJcXGNvc2giLCJcXGNvdCIsIlxcY290ZyIsIlxcY290aCIsIlxcY3NjIiwiXFxjdGciLCJcXGN0aCIsIlxcZGVnIiwiXFxkaW0iLCJcXGV4cCIsIlxcaG9tIiwiXFxrZXIiLCJcXGxnIiwiXFxsbiIsIlxcbG9nIiwiXFxzZWMiLCJcXHNpbiIsIlxcc2luaCIsIlxcc2giLCJcXHRhbiIsIlxcdGFuaCIsIlxcdGciLCJcXHRoIl0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcihpKXt2YXJ7cGFyc2VyOnMsZnVuY05hbWU6dX09aTtyZXR1cm57dHlwZToib3AiLG1vZGU6cy5tb2RlLGxpbWl0czohMSxwYXJlbnRJc1N1cFN1YjohMSxzeW1ib2w6ITEsbmFtZTp1fX0saHRtbEJ1aWxkZXI6UEQsbWF0aG1sQnVpbGRlcjpkUn0pLEppKHt0eXBlOiJvcCIsbmFtZXM6WyJcXGRldCIsIlxcZ2NkIiwiXFxpbmYiLCJcXGxpbSIsIlxcbWF4IiwiXFxtaW4iLCJcXFByIiwiXFxzdXAiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKGkpe3ZhcntwYXJzZXI6cyxmdW5jTmFtZTp1fT1pO3JldHVybnt0eXBlOiJvcCIsbW9kZTpzLm1vZGUsbGltaXRzOiEwLHBhcmVudElzU3VwU3ViOiExLHN5bWJvbDohMSxuYW1lOnV9fSxodG1sQnVpbGRlcjpQRCxtYXRobWxCdWlsZGVyOmRSfSksSmkoe3R5cGU6Im9wIixuYW1lczpbIlxcaW50IiwiXFxpaW50IiwiXFxpaWludCIsIlxcb2ludCIsIlxcb2lpbnQiLCJcXG9paWludCIsIuKIqyIsIuKIrCIsIuKIrSIsIuKIriIsIuKIryIsIuKIsCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIoaSl7dmFye3BhcnNlcjpzLGZ1bmNOYW1lOnV9PWksZD11O3JldHVybiBkLmxlbmd0aD09PTEmJihkPWZWdFtkXSkse3R5cGU6Im9wIixtb2RlOnMubW9kZSxsaW1pdHM6ITEscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiEwLG5hbWU6ZH19LGh0bWxCdWlsZGVyOlBELG1hdGhtbEJ1aWxkZXI6ZFJ9KTt2YXIgZXFlPShpLHMpPT57dmFyIHUsZCxwPSExLHY7aS50eXBlPT09InN1cHN1YiI/KHU9aS5zdXAsZD1pLnN1Yix2PVlvKGkuYmFzZSwib3BlcmF0b3JuYW1lIikscD0hMCk6dj1ZbyhpLCJvcGVyYXRvcm5hbWUiKTt2YXIgYjtpZih2LmJvZHkubGVuZ3RoPjApe2Zvcih2YXIgeT12LmJvZHkubWFwKFA9Pnt2YXIgUj1QLnRleHQ7cmV0dXJuIHR5cGVvZiBSPT0ic3RyaW5nIj97dHlwZToidGV4dG9yZCIsbW9kZTpQLm1vZGUsdGV4dDpSfTpQfSksVD1kMSh5LHMud2l0aEZvbnQoIm1hdGhybSIpLCEwKSxfPTA7XzxULmxlbmd0aDtfKyspe3ZhciBBPVRbX107QSBpbnN0YW5jZW9mIEJ2JiYoQS50ZXh0PUEudGV4dC5yZXBsYWNlKC9cdTIyMTIvLCItIikucmVwbGFjZSgvXHUyMjE3LywiKiIpKX1iPXpuLm1ha2VTcGFuKFsibW9wIl0sVCxzKX1lbHNlIGI9em4ubWFrZVNwYW4oWyJtb3AiXSxbXSxzKTtyZXR1cm4gcD9KemUoYix1LGQscyxzLnN0eWxlLDAsMCk6Yn0sZFZ0PShpLHMpPT57Zm9yKHZhciB1PWoyKGkuYm9keSxzLndpdGhGb250KCJtYXRocm0iKSksZD0hMCxwPTA7cDx1Lmxlbmd0aDtwKyspe3ZhciB2PXVbcF07aWYoISh2IGluc3RhbmNlb2YgdmkuU3BhY2VOb2RlKSlpZih2IGluc3RhbmNlb2YgdmkuTWF0aE5vZGUpc3dpdGNoKHYudHlwZSl7Y2FzZSJtaSI6Y2FzZSJtbiI6Y2FzZSJtcyI6Y2FzZSJtc3BhY2UiOmNhc2UibXRleHQiOmJyZWFrO2Nhc2UibW8iOnt2YXIgYj12LmNoaWxkcmVuWzBdO3YuY2hpbGRyZW4ubGVuZ3RoPT09MSYmYiBpbnN0YW5jZW9mIHZpLlRleHROb2RlP2IudGV4dD1iLnRleHQucmVwbGFjZSgvXHUyMjEyLywiLSIpLnJlcGxhY2UoL1x1MjIxNy8sIioiKTpkPSExO2JyZWFrfWRlZmF1bHQ6ZD0hMX1lbHNlIGQ9ITF9aWYoZCl7dmFyIHk9dS5tYXAoQT0+QS50b1RleHQoKSkuam9pbigiIik7dT1bbmV3IHZpLlRleHROb2RlKHkpXX12YXIgVD1uZXcgdmkuTWF0aE5vZGUoIm1pIix1KTtULnNldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiLCJub3JtYWwiKTt2YXIgXz1uZXcgdmkuTWF0aE5vZGUoIm1vIixbUnYoIuKBoSIsInRleHQiKV0pO3JldHVybiBpLnBhcmVudElzU3VwU3ViP25ldyB2aS5NYXRoTm9kZSgibXJvdyIsW1QsX10pOnZpLm5ld0RvY3VtZW50RnJhZ21lbnQoW1QsX10pfTtKaSh7dHlwZToib3BlcmF0b3JuYW1lIixuYW1lczpbIlxcb3BlcmF0b3JuYW1lQCIsIlxcb3BlcmF0b3JuYW1ld2l0aGxpbWl0cyJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXI6KGkscyk9Pnt2YXJ7cGFyc2VyOnUsZnVuY05hbWU6ZH09aSxwPXNbMF07cmV0dXJue3R5cGU6Im9wZXJhdG9ybmFtZSIsbW9kZTp1Lm1vZGUsYm9keTpYZihwKSxhbHdheXNIYW5kbGVTdXBTdWI6ZD09PSJcXG9wZXJhdG9ybmFtZXdpdGhsaW1pdHMiLGxpbWl0czohMSxwYXJlbnRJc1N1cFN1YjohMX19LGh0bWxCdWlsZGVyOmVxZSxtYXRobWxCdWlsZGVyOmRWdH0pLGV0KCJcXG9wZXJhdG9ybmFtZSIsIlxcQGlmc3Rhclxcb3BlcmF0b3JuYW1ld2l0aGxpbWl0c1xcb3BlcmF0b3JuYW1lQCIpLHpDKHt0eXBlOiJvcmRncm91cCIsaHRtbEJ1aWxkZXIoaSxzKXtyZXR1cm4gaS5zZW1pc2ltcGxlP3puLm1ha2VGcmFnbWVudChkMShpLmJvZHkscywhMSkpOnpuLm1ha2VTcGFuKFsibW9yZCJdLGQxKGkuYm9keSxzLCEwKSxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3JldHVybiBfOShpLmJvZHkscywhMCl9fSksSmkoe3R5cGU6Im92ZXJsaW5lIixuYW1lczpbIlxcb3ZlcmxpbmUiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1fT1pLGQ9c1swXTtyZXR1cm57dHlwZToib3ZlcmxpbmUiLG1vZGU6dS5tb2RlLGJvZHk6ZH19LGh0bWxCdWlsZGVyKGkscyl7dmFyIHU9dXUoaS5ib2R5LHMuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpLGQ9em4ubWFrZUxpbmVTcGFuKCJvdmVybGluZS1saW5lIixzKSxwPXMuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyx2PXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06dX0se3R5cGU6Imtlcm4iLHNpemU6MypwfSx7dHlwZToiZWxlbSIsZWxlbTpkfSx7dHlwZToia2VybiIsc2l6ZTpwfV19LHMpO3JldHVybiB6bi5tYWtlU3BhbihbIm1vcmQiLCJvdmVybGluZSJdLFt2XSxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PW5ldyB2aS5NYXRoTm9kZSgibW8iLFtuZXcgdmkuVGV4dE5vZGUoIuKAviIpXSk7dS5zZXRBdHRyaWJ1dGUoInN0cmV0Y2h5IiwidHJ1ZSIpO3ZhciBkPW5ldyB2aS5NYXRoTm9kZSgibW92ZXIiLFtMbChpLmJvZHkscyksdV0pO3JldHVybiBkLnNldEF0dHJpYnV0ZSgiYWNjZW50IiwidHJ1ZSIpLGR9fSksSmkoe3R5cGU6InBoYW50b20iLG5hbWVzOlsiXFxwaGFudG9tIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOihpLHMpPT57dmFye3BhcnNlcjp1fT1pLGQ9c1swXTtyZXR1cm57dHlwZToicGhhbnRvbSIsbW9kZTp1Lm1vZGUsYm9keTpYZihkKX19LGh0bWxCdWlsZGVyOihpLHMpPT57dmFyIHU9ZDEoaS5ib2R5LHMud2l0aFBoYW50b20oKSwhMSk7cmV0dXJuIHpuLm1ha2VGcmFnbWVudCh1KX0sbWF0aG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PWoyKGkuYm9keSxzKTtyZXR1cm4gbmV3IHZpLk1hdGhOb2RlKCJtcGhhbnRvbSIsdSl9fSksSmkoe3R5cGU6ImhwaGFudG9tIixuYW1lczpbIlxcaHBoYW50b20iXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6KGkscyk9Pnt2YXJ7cGFyc2VyOnV9PWksZD1zWzBdO3JldHVybnt0eXBlOiJocGhhbnRvbSIsbW9kZTp1Lm1vZGUsYm9keTpkfX0saHRtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT16bi5tYWtlU3BhbihbXSxbdXUoaS5ib2R5LHMud2l0aFBoYW50b20oKSldKTtpZih1LmhlaWdodD0wLHUuZGVwdGg9MCx1LmNoaWxkcmVuKWZvcih2YXIgZD0wO2Q8dS5jaGlsZHJlbi5sZW5ndGg7ZCsrKXUuY2hpbGRyZW5bZF0uaGVpZ2h0PTAsdS5jaGlsZHJlbltkXS5kZXB0aD0wO3JldHVybiB1PXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06dX1dfSxzKSx6bi5tYWtlU3BhbihbIm1vcmQiXSxbdV0scyl9LG1hdGhtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT1qMihYZihpLmJvZHkpLHMpLGQ9bmV3IHZpLk1hdGhOb2RlKCJtcGhhbnRvbSIsdSkscD1uZXcgdmkuTWF0aE5vZGUoIm1wYWRkZWQiLFtkXSk7cmV0dXJuIHAuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIwcHgiKSxwLnNldEF0dHJpYnV0ZSgiZGVwdGgiLCIwcHgiKSxwfX0pLEppKHt0eXBlOiJ2cGhhbnRvbSIsbmFtZXM6WyJcXHZwaGFudG9tIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOihpLHMpPT57dmFye3BhcnNlcjp1fT1pLGQ9c1swXTtyZXR1cm57dHlwZToidnBoYW50b20iLG1vZGU6dS5tb2RlLGJvZHk6ZH19LGh0bWxCdWlsZGVyOihpLHMpPT57dmFyIHU9em4ubWFrZVNwYW4oWyJpbm5lciJdLFt1dShpLmJvZHkscy53aXRoUGhhbnRvbSgpKV0pLGQ9em4ubWFrZVNwYW4oWyJmaXgiXSxbXSk7cmV0dXJuIHpuLm1ha2VTcGFuKFsibW9yZCIsInJsYXAiXSxbdSxkXSxzKX0sbWF0aG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PWoyKFhmKGkuYm9keSkscyksZD1uZXcgdmkuTWF0aE5vZGUoIm1waGFudG9tIix1KSxwPW5ldyB2aS5NYXRoTm9kZSgibXBhZGRlZCIsW2RdKTtyZXR1cm4gcC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMHB4IikscH19KSxKaSh7dHlwZToicmFpc2Vib3giLG5hbWVzOlsiXFxyYWlzZWJveCJdLHByb3BzOntudW1BcmdzOjIsYXJnVHlwZXM6WyJzaXplIiwiaGJveCJdLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIoaSxzKXt2YXJ7cGFyc2VyOnV9PWksZD1ZbyhzWzBdLCJzaXplIikudmFsdWUscD1zWzFdO3JldHVybnt0eXBlOiJyYWlzZWJveCIsbW9kZTp1Lm1vZGUsZHk6ZCxib2R5OnB9fSxodG1sQnVpbGRlcihpLHMpe3ZhciB1PXV1KGkuYm9keSxzKSxkPVVoKGkuZHkscyk7cmV0dXJuIHpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJzaGlmdCIscG9zaXRpb25EYXRhOi1kLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp1fV19LHMpfSxtYXRobWxCdWlsZGVyKGkscyl7dmFyIHU9bmV3IHZpLk1hdGhOb2RlKCJtcGFkZGVkIixbTGwoaS5ib2R5LHMpXSksZD1pLmR5Lm51bWJlcitpLmR5LnVuaXQ7cmV0dXJuIHUuc2V0QXR0cmlidXRlKCJ2b2Zmc2V0IixkKSx1fX0pLEppKHt0eXBlOiJpbnRlcm5hbCIsbmFtZXM6WyJcXHJlbGF4Il0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKGkpe3ZhcntwYXJzZXI6c309aTtyZXR1cm57dHlwZToiaW50ZXJuYWwiLG1vZGU6cy5tb2RlfX19KSxKaSh7dHlwZToicnVsZSIsbmFtZXM6WyJcXHJ1bGUiXSxwcm9wczp7bnVtQXJnczoyLG51bU9wdGlvbmFsQXJnczoxLGFyZ1R5cGVzOlsic2l6ZSIsInNpemUiLCJzaXplIl19LGhhbmRsZXIoaSxzLHUpe3ZhcntwYXJzZXI6ZH09aSxwPXVbMF0sdj1ZbyhzWzBdLCJzaXplIiksYj1ZbyhzWzFdLCJzaXplIik7cmV0dXJue3R5cGU6InJ1bGUiLG1vZGU6ZC5tb2RlLHNoaWZ0OnAmJllvKHAsInNpemUiKS52YWx1ZSx3aWR0aDp2LnZhbHVlLGhlaWdodDpiLnZhbHVlfX0saHRtbEJ1aWxkZXIoaSxzKXt2YXIgdT16bi5tYWtlU3BhbihbIm1vcmQiLCJydWxlIl0sW10scyksZD1VaChpLndpZHRoLHMpLHA9VWgoaS5oZWlnaHQscyksdj1pLnNoaWZ0P1VoKGkuc2hpZnQscyk6MDtyZXR1cm4gdS5zdHlsZS5ib3JkZXJSaWdodFdpZHRoPVJpKGQpLHUuc3R5bGUuYm9yZGVyVG9wV2lkdGg9UmkocCksdS5zdHlsZS5ib3R0b209UmkodiksdS53aWR0aD1kLHUuaGVpZ2h0PXArdix1LmRlcHRoPS12LHUubWF4Rm9udFNpemU9cCoxLjEyNSpzLnNpemVNdWx0aXBsaWVyLHV9LG1hdGhtbEJ1aWxkZXIoaSxzKXt2YXIgdT1VaChpLndpZHRoLHMpLGQ9VWgoaS5oZWlnaHQscykscD1pLnNoaWZ0P1VoKGkuc2hpZnQscyk6MCx2PXMuY29sb3ImJnMuZ2V0Q29sb3IoKXx8ImJsYWNrIixiPW5ldyB2aS5NYXRoTm9kZSgibXNwYWNlIik7Yi5zZXRBdHRyaWJ1dGUoIm1hdGhiYWNrZ3JvdW5kIix2KSxiLnNldEF0dHJpYnV0ZSgid2lkdGgiLFJpKHUpKSxiLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixSaShkKSk7dmFyIHk9bmV3IHZpLk1hdGhOb2RlKCJtcGFkZGVkIixbYl0pO3JldHVybiBwPj0wP3kuc2V0QXR0cmlidXRlKCJoZWlnaHQiLFJpKHApKTooeS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsUmkocCkpLHkuc2V0QXR0cmlidXRlKCJkZXB0aCIsUmkoLXApKSkseS5zZXRBdHRyaWJ1dGUoInZvZmZzZXQiLFJpKHApKSx5fX0pO2Z1bmN0aW9uIHRxZShpLHMsdSl7Zm9yKHZhciBkPWQxKGkscywhMSkscD1zLnNpemVNdWx0aXBsaWVyL3Uuc2l6ZU11bHRpcGxpZXIsdj0wO3Y8ZC5sZW5ndGg7disrKXt2YXIgYj1kW3ZdLmNsYXNzZXMuaW5kZXhPZigic2l6aW5nIik7YjwwP0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGRbdl0uY2xhc3NlcyxzLnNpemluZ0NsYXNzZXModSkpOmRbdl0uY2xhc3Nlc1tiKzFdPT09InJlc2V0LXNpemUiK3Muc2l6ZSYmKGRbdl0uY2xhc3Nlc1tiKzFdPSJyZXNldC1zaXplIit1LnNpemUpLGRbdl0uaGVpZ2h0Kj1wLGRbdl0uZGVwdGgqPXB9cmV0dXJuIHpuLm1ha2VGcmFnbWVudChkKX12YXIgbnFlPVsiXFx0aW55IiwiXFxzaXhwdHNpemUiLCJcXHNjcmlwdHNpemUiLCJcXGZvb3Rub3Rlc2l6ZSIsIlxcc21hbGwiLCJcXG5vcm1hbHNpemUiLCJcXGxhcmdlIiwiXFxMYXJnZSIsIlxcTEFSR0UiLCJcXGh1Z2UiLCJcXEh1Z2UiXSxnVnQ9KGkscyk9Pnt2YXIgdT1zLmhhdmluZ1NpemUoaS5zaXplKTtyZXR1cm4gdHFlKGkuYm9keSx1LHMpfTtKaSh7dHlwZToic2l6aW5nIixuYW1lczpucWUscHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOihpLHMpPT57dmFye2JyZWFrT25Ub2tlblRleHQ6dSxmdW5jTmFtZTpkLHBhcnNlcjpwfT1pLHY9cC5wYXJzZUV4cHJlc3Npb24oITEsdSk7cmV0dXJue3R5cGU6InNpemluZyIsbW9kZTpwLm1vZGUsc2l6ZTpucWUuaW5kZXhPZihkKSsxLGJvZHk6dn19LGh0bWxCdWlsZGVyOmdWdCxtYXRobWxCdWlsZGVyOihpLHMpPT57dmFyIHU9cy5oYXZpbmdTaXplKGkuc2l6ZSksZD1qMihpLmJvZHksdSkscD1uZXcgdmkuTWF0aE5vZGUoIm1zdHlsZSIsZCk7cmV0dXJuIHAuc2V0QXR0cmlidXRlKCJtYXRoc2l6ZSIsUmkodS5zaXplTXVsdGlwbGllcikpLHB9fSksSmkoe3R5cGU6InNtYXNoIixuYW1lczpbIlxcc21hc2giXSxwcm9wczp7bnVtQXJnczoxLG51bU9wdGlvbmFsQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6KGkscyx1KT0+e3ZhcntwYXJzZXI6ZH09aSxwPSExLHY9ITEsYj11WzBdJiZZbyh1WzBdLCJvcmRncm91cCIpO2lmKGIpZm9yKHZhciB5PSIiLFQ9MDtUPGIuYm9keS5sZW5ndGg7KytUKXt2YXIgXz1iLmJvZHlbVF07aWYoeT1fLnRleHQseT09PSJ0IilwPSEwO2Vsc2UgaWYoeT09PSJiIil2PSEwO2Vsc2V7cD0hMSx2PSExO2JyZWFrfX1lbHNlIHA9ITAsdj0hMDt2YXIgQT1zWzBdO3JldHVybnt0eXBlOiJzbWFzaCIsbW9kZTpkLm1vZGUsYm9keTpBLHNtYXNoSGVpZ2h0OnAsc21hc2hEZXB0aDp2fX0saHRtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT16bi5tYWtlU3BhbihbXSxbdXUoaS5ib2R5LHMpXSk7aWYoIWkuc21hc2hIZWlnaHQmJiFpLnNtYXNoRGVwdGgpcmV0dXJuIHU7aWYoaS5zbWFzaEhlaWdodCYmKHUuaGVpZ2h0PTAsdS5jaGlsZHJlbikpZm9yKHZhciBkPTA7ZDx1LmNoaWxkcmVuLmxlbmd0aDtkKyspdS5jaGlsZHJlbltkXS5oZWlnaHQ9MDtpZihpLnNtYXNoRGVwdGgmJih1LmRlcHRoPTAsdS5jaGlsZHJlbikpZm9yKHZhciBwPTA7cDx1LmNoaWxkcmVuLmxlbmd0aDtwKyspdS5jaGlsZHJlbltwXS5kZXB0aD0wO3ZhciB2PXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06dX1dfSxzKTtyZXR1cm4gem4ubWFrZVNwYW4oWyJtb3JkIl0sW3ZdLHMpfSxtYXRobWxCdWlsZGVyOihpLHMpPT57dmFyIHU9bmV3IHZpLk1hdGhOb2RlKCJtcGFkZGVkIixbTGwoaS5ib2R5LHMpXSk7cmV0dXJuIGkuc21hc2hIZWlnaHQmJnUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIwcHgiKSxpLnNtYXNoRGVwdGgmJnUuc2V0QXR0cmlidXRlKCJkZXB0aCIsIjBweCIpLHV9fSksSmkoe3R5cGU6InNxcnQiLG5hbWVzOlsiXFxzcXJ0Il0scHJvcHM6e251bUFyZ3M6MSxudW1PcHRpb25hbEFyZ3M6MX0saGFuZGxlcihpLHMsdSl7dmFye3BhcnNlcjpkfT1pLHA9dVswXSx2PXNbMF07cmV0dXJue3R5cGU6InNxcnQiLG1vZGU6ZC5tb2RlLGJvZHk6dixpbmRleDpwfX0saHRtbEJ1aWxkZXIoaSxzKXt2YXIgdT11dShpLmJvZHkscy5oYXZpbmdDcmFtcGVkU3R5bGUoKSk7dS5oZWlnaHQ9PT0wJiYodS5oZWlnaHQ9cy5mb250TWV0cmljcygpLnhIZWlnaHQpLHU9em4ud3JhcEZyYWdtZW50KHUscyk7dmFyIGQ9cy5mb250TWV0cmljcygpLHA9ZC5kZWZhdWx0UnVsZVRoaWNrbmVzcyx2PXA7cy5zdHlsZS5pZDxUYS5URVhULmlkJiYodj1zLmZvbnRNZXRyaWNzKCkueEhlaWdodCk7dmFyIGI9cCt2LzQseT11LmhlaWdodCt1LmRlcHRoK2IrcCx7c3BhbjpULHJ1bGVXaWR0aDpfLGFkdmFuY2VXaWR0aDpBfT1CNy5zcXJ0SW1hZ2UoeSxzKSxQPVQuaGVpZ2h0LV87UD51LmhlaWdodCt1LmRlcHRoK2ImJihiPShiK1AtdS5oZWlnaHQtdS5kZXB0aCkvMik7dmFyIFI9VC5oZWlnaHQtdS5oZWlnaHQtYi1fO3Uuc3R5bGUucGFkZGluZ0xlZnQ9UmkoQSk7dmFyIEY9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp1LHdyYXBwZXJDbGFzc2VzOlsic3ZnLWFsaWduIl19LHt0eXBlOiJrZXJuIixzaXplOi0odS5oZWlnaHQrUil9LHt0eXBlOiJlbGVtIixlbGVtOlR9LHt0eXBlOiJrZXJuIixzaXplOl99XX0scyk7aWYoaS5pbmRleCl7dmFyIGo9cy5oYXZpbmdTdHlsZShUYS5TQ1JJUFRTQ1JJUFQpLEs9dXUoaS5pbmRleCxqLHMpLGVlPS42KihGLmhlaWdodC1GLmRlcHRoKSxpZT16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToic2hpZnQiLHBvc2l0aW9uRGF0YTotZWUsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOkt9XX0scyksb2U9em4ubWFrZVNwYW4oWyJyb290Il0sW2llXSk7cmV0dXJuIHpuLm1ha2VTcGFuKFsibW9yZCIsInNxcnQiXSxbb2UsRl0scyl9ZWxzZSByZXR1cm4gem4ubWFrZVNwYW4oWyJtb3JkIiwic3FydCJdLFtGXSxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3Zhcntib2R5OnUsaW5kZXg6ZH09aTtyZXR1cm4gZD9uZXcgdmkuTWF0aE5vZGUoIm1yb290IixbTGwodSxzKSxMbChkLHMpXSk6bmV3IHZpLk1hdGhOb2RlKCJtc3FydCIsW0xsKHUscyldKX19KTt2YXIgcnFlPXtkaXNwbGF5OlRhLkRJU1BMQVksdGV4dDpUYS5URVhULHNjcmlwdDpUYS5TQ1JJUFQsc2NyaXB0c2NyaXB0OlRhLlNDUklQVFNDUklQVH07Smkoe3R5cGU6InN0eWxpbmciLG5hbWVzOlsiXFxkaXNwbGF5c3R5bGUiLCJcXHRleHRzdHlsZSIsIlxcc2NyaXB0c3R5bGUiLCJcXHNjcmlwdHNjcmlwdHN0eWxlIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLHByaW1pdGl2ZTohMH0saGFuZGxlcihpLHMpe3ZhcnticmVha09uVG9rZW5UZXh0OnUsZnVuY05hbWU6ZCxwYXJzZXI6cH09aSx2PXAucGFyc2VFeHByZXNzaW9uKCEwLHUpLGI9ZC5zbGljZSgxLGQubGVuZ3RoLTUpO3JldHVybnt0eXBlOiJzdHlsaW5nIixtb2RlOnAubW9kZSxzdHlsZTpiLGJvZHk6dn19LGh0bWxCdWlsZGVyKGkscyl7dmFyIHU9cnFlW2kuc3R5bGVdLGQ9cy5oYXZpbmdTdHlsZSh1KS53aXRoRm9udCgiIik7cmV0dXJuIHRxZShpLmJvZHksZCxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PXJxZVtpLnN0eWxlXSxkPXMuaGF2aW5nU3R5bGUodSkscD1qMihpLmJvZHksZCksdj1uZXcgdmkuTWF0aE5vZGUoIm1zdHlsZSIscCksYj17ZGlzcGxheTpbIjAiLCJ0cnVlIl0sdGV4dDpbIjAiLCJmYWxzZSJdLHNjcmlwdDpbIjEiLCJmYWxzZSJdLHNjcmlwdHNjcmlwdDpbIjIiLCJmYWxzZSJdfSx5PWJbaS5zdHlsZV07cmV0dXJuIHYuc2V0QXR0cmlidXRlKCJzY3JpcHRsZXZlbCIseVswXSksdi5zZXRBdHRyaWJ1dGUoImRpc3BsYXlzdHlsZSIseVsxXSksdn19KTt2YXIgcFZ0PWZ1bmN0aW9uKHMsdSl7dmFyIGQ9cy5iYXNlO2lmKGQpaWYoZC50eXBlPT09Im9wIil7dmFyIHA9ZC5saW1pdHMmJih1LnN0eWxlLnNpemU9PT1UYS5ESVNQTEFZLnNpemV8fGQuYWx3YXlzSGFuZGxlU3VwU3ViKTtyZXR1cm4gcD9QRDpudWxsfWVsc2UgaWYoZC50eXBlPT09Im9wZXJhdG9ybmFtZSIpe3ZhciB2PWQuYWx3YXlzSGFuZGxlU3VwU3ViJiYodS5zdHlsZS5zaXplPT09VGEuRElTUExBWS5zaXplfHxkLmxpbWl0cyk7cmV0dXJuIHY/ZXFlOm51bGx9ZWxzZXtpZihkLnR5cGU9PT0iYWNjZW50IilyZXR1cm4gWWEuaXNDaGFyYWN0ZXJCb3goZC5iYXNlKT9nYmU6bnVsbDtpZihkLnR5cGU9PT0iaG9yaXpCcmFjZSIpe3ZhciBiPSFzLnN1YjtyZXR1cm4gYj09PWQuaXNPdmVyP1h6ZTpudWxsfWVsc2UgcmV0dXJuIG51bGx9ZWxzZSByZXR1cm4gbnVsbH07ekMoe3R5cGU6InN1cHN1YiIsaHRtbEJ1aWxkZXIoaSxzKXt2YXIgdT1wVnQoaSxzKTtpZih1KXJldHVybiB1KGkscyk7dmFye2Jhc2U6ZCxzdXA6cCxzdWI6dn09aSxiPXV1KGQscykseSxULF89cy5mb250TWV0cmljcygpLEE9MCxQPTAsUj1kJiZZYS5pc0NoYXJhY3RlckJveChkKTtpZihwKXt2YXIgRj1zLmhhdmluZ1N0eWxlKHMuc3R5bGUuc3VwKCkpO3k9dXUocCxGLHMpLFJ8fChBPWIuaGVpZ2h0LUYuZm9udE1ldHJpY3MoKS5zdXBEcm9wKkYuc2l6ZU11bHRpcGxpZXIvcy5zaXplTXVsdGlwbGllcil9aWYodil7dmFyIGo9cy5oYXZpbmdTdHlsZShzLnN0eWxlLnN1YigpKTtUPXV1KHYsaixzKSxSfHwoUD1iLmRlcHRoK2ouZm9udE1ldHJpY3MoKS5zdWJEcm9wKmouc2l6ZU11bHRpcGxpZXIvcy5zaXplTXVsdGlwbGllcil9dmFyIEs7cy5zdHlsZT09PVRhLkRJU1BMQVk/Sz1fLnN1cDE6cy5zdHlsZS5jcmFtcGVkP0s9Xy5zdXAzOks9Xy5zdXAyO3ZhciBlZT1zLnNpemVNdWx0aXBsaWVyLGllPVJpKC41L18ucHRQZXJFbS9lZSksb2U9bnVsbDtpZihUKXt2YXIgcGU9aS5iYXNlJiZpLmJhc2UudHlwZT09PSJvcCImJmkuYmFzZS5uYW1lJiYoaS5iYXNlLm5hbWU9PT0iXFxvaWludCJ8fGkuYmFzZS5uYW1lPT09Ilxcb2lpaW50Iik7KGIgaW5zdGFuY2VvZiBCdnx8cGUpJiYob2U9UmkoLWIuaXRhbGljKSl9dmFyIGJlO2lmKHkmJlQpe0E9TWF0aC5tYXgoQSxLLHkuZGVwdGgrLjI1Kl8ueEhlaWdodCksUD1NYXRoLm1heChQLF8uc3ViMik7dmFyIGFlPV8uZGVmYXVsdFJ1bGVUaGlja25lc3MsbmU9NCphZTtpZihBLXkuZGVwdGgtKFQuaGVpZ2h0LVApPG5lKXtQPW5lLShBLXkuZGVwdGgpK1QuaGVpZ2h0O3ZhciBzZT0uOCpfLnhIZWlnaHQtKEEteS5kZXB0aCk7c2U+MCYmKEErPXNlLFAtPXNlKX12YXIgZGU9W3t0eXBlOiJlbGVtIixlbGVtOlQsc2hpZnQ6UCxtYXJnaW5SaWdodDppZSxtYXJnaW5MZWZ0Om9lfSx7dHlwZToiZWxlbSIsZWxlbTp5LHNoaWZ0Oi1BLG1hcmdpblJpZ2h0OmllfV07YmU9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46ZGV9LHMpfWVsc2UgaWYoVCl7UD1NYXRoLm1heChQLF8uc3ViMSxULmhlaWdodC0uOCpfLnhIZWlnaHQpO3ZhciBYPVt7dHlwZToiZWxlbSIsZWxlbTpULG1hcmdpbkxlZnQ6b2UsbWFyZ2luUmlnaHQ6aWV9XTtiZT16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToic2hpZnQiLHBvc2l0aW9uRGF0YTpQLGNoaWxkcmVuOlh9LHMpfWVsc2UgaWYoeSlBPU1hdGgubWF4KEEsSyx5LmRlcHRoKy4yNSpfLnhIZWlnaHQpLGJlPXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJzaGlmdCIscG9zaXRpb25EYXRhOi1BLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp5LG1hcmdpblJpZ2h0OmllfV19LHMpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJzdXBzdWIgbXVzdCBoYXZlIGVpdGhlciBzdXAgb3Igc3ViLiIpO3ZhciBnZT11YmUoYiwicmlnaHQiKXx8Im1vcmQiO3JldHVybiB6bi5tYWtlU3BhbihbZ2VdLFtiLHpuLm1ha2VTcGFuKFsibXN1cHN1YiJdLFtiZV0pXSxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PSExLGQscDtpLmJhc2UmJmkuYmFzZS50eXBlPT09Imhvcml6QnJhY2UiJiYocD0hIWkuc3VwLHA9PT1pLmJhc2UuaXNPdmVyJiYodT0hMCxkPWkuYmFzZS5pc092ZXIpKSxpLmJhc2UmJihpLmJhc2UudHlwZT09PSJvcCJ8fGkuYmFzZS50eXBlPT09Im9wZXJhdG9ybmFtZSIpJiYoaS5iYXNlLnBhcmVudElzU3VwU3ViPSEwKTt2YXIgdj1bTGwoaS5iYXNlLHMpXTtpLnN1YiYmdi5wdXNoKExsKGkuc3ViLHMpKSxpLnN1cCYmdi5wdXNoKExsKGkuc3VwLHMpKTt2YXIgYjtpZih1KWI9ZD8ibW92ZXIiOiJtdW5kZXIiO2Vsc2UgaWYoaS5zdWIpaWYoaS5zdXApe3ZhciBfPWkuYmFzZTtfJiZfLnR5cGU9PT0ib3AiJiZfLmxpbWl0cyYmcy5zdHlsZT09PVRhLkRJU1BMQVl8fF8mJl8udHlwZT09PSJvcGVyYXRvcm5hbWUiJiZfLmFsd2F5c0hhbmRsZVN1cFN1YiYmKHMuc3R5bGU9PT1UYS5ESVNQTEFZfHxfLmxpbWl0cyk/Yj0ibXVuZGVyb3ZlciI6Yj0ibXN1YnN1cCJ9ZWxzZXt2YXIgVD1pLmJhc2U7VCYmVC50eXBlPT09Im9wIiYmVC5saW1pdHMmJihzLnN0eWxlPT09VGEuRElTUExBWXx8VC5hbHdheXNIYW5kbGVTdXBTdWIpfHxUJiZULnR5cGU9PT0ib3BlcmF0b3JuYW1lIiYmVC5hbHdheXNIYW5kbGVTdXBTdWImJihULmxpbWl0c3x8cy5zdHlsZT09PVRhLkRJU1BMQVkpP2I9Im11bmRlciI6Yj0ibXN1YiJ9ZWxzZXt2YXIgeT1pLmJhc2U7eSYmeS50eXBlPT09Im9wIiYmeS5saW1pdHMmJihzLnN0eWxlPT09VGEuRElTUExBWXx8eS5hbHdheXNIYW5kbGVTdXBTdWIpfHx5JiZ5LnR5cGU9PT0ib3BlcmF0b3JuYW1lIiYmeS5hbHdheXNIYW5kbGVTdXBTdWImJih5LmxpbWl0c3x8cy5zdHlsZT09PVRhLkRJU1BMQVkpP2I9Im1vdmVyIjpiPSJtc3VwIn1yZXR1cm4gbmV3IHZpLk1hdGhOb2RlKGIsdil9fSksekMoe3R5cGU6ImF0b20iLGh0bWxCdWlsZGVyKGkscyl7cmV0dXJuIHpuLm1hdGhzeW0oaS50ZXh0LGkubW9kZSxzLFsibSIraS5mYW1pbHldKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PW5ldyB2aS5NYXRoTm9kZSgibW8iLFtSdihpLnRleHQsaS5tb2RlKV0pO2lmKGkuZmFtaWx5PT09ImJpbiIpe3ZhciBkPWZiZShpLHMpO2Q9PT0iYm9sZC1pdGFsaWMiJiZ1LnNldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiLGQpfWVsc2UgaS5mYW1pbHk9PT0icHVuY3QiP3Uuc2V0QXR0cmlidXRlKCJzZXBhcmF0b3IiLCJ0cnVlIik6KGkuZmFtaWx5PT09Im9wZW4ifHxpLmZhbWlseT09PSJjbG9zZSIpJiZ1LnNldEF0dHJpYnV0ZSgic3RyZXRjaHkiLCJmYWxzZSIpO3JldHVybiB1fX0pO3ZhciBpcWU9e21pOiJpdGFsaWMiLG1uOiJub3JtYWwiLG10ZXh0OiJub3JtYWwifTt6Qyh7dHlwZToibWF0aG9yZCIsaHRtbEJ1aWxkZXIoaSxzKXtyZXR1cm4gem4ubWFrZU9yZChpLHMsIm1hdGhvcmQiKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PW5ldyB2aS5NYXRoTm9kZSgibWkiLFtSdihpLnRleHQsaS5tb2RlLHMpXSksZD1mYmUoaSxzKXx8Iml0YWxpYyI7cmV0dXJuIGQhPT1pcWVbdS50eXBlXSYmdS5zZXRBdHRyaWJ1dGUoIm1hdGh2YXJpYW50IixkKSx1fX0pLHpDKHt0eXBlOiJ0ZXh0b3JkIixodG1sQnVpbGRlcihpLHMpe3JldHVybiB6bi5tYWtlT3JkKGkscywidGV4dG9yZCIpfSxtYXRobWxCdWlsZGVyKGkscyl7dmFyIHU9UnYoaS50ZXh0LGkubW9kZSxzKSxkPWZiZShpLHMpfHwibm9ybWFsIixwO3JldHVybiBpLm1vZGU9PT0idGV4dCI/cD1uZXcgdmkuTWF0aE5vZGUoIm10ZXh0IixbdV0pOi9bMC05XS8udGVzdChpLnRleHQpP3A9bmV3IHZpLk1hdGhOb2RlKCJtbiIsW3VdKTppLnRleHQ9PT0iXFxwcmltZSI/cD1uZXcgdmkuTWF0aE5vZGUoIm1vIixbdV0pOnA9bmV3IHZpLk1hdGhOb2RlKCJtaSIsW3VdKSxkIT09aXFlW3AudHlwZV0mJnAuc2V0QXR0cmlidXRlKCJtYXRodmFyaWFudCIsZCkscH19KTt2YXIgTWJlPXsiXFxub2JyZWFrIjoibm9icmVhayIsIlxcYWxsb3dicmVhayI6ImFsbG93YnJlYWsifSxEYmU9eyIgIjp7fSwiXFwgIjp7fSwifiI6e2NsYXNzTmFtZToibm9icmVhayJ9LCJcXHNwYWNlIjp7fSwiXFxub2JyZWFrc3BhY2UiOntjbGFzc05hbWU6Im5vYnJlYWsifX07ekMoe3R5cGU6InNwYWNpbmciLGh0bWxCdWlsZGVyKGkscyl7aWYoRGJlLmhhc093blByb3BlcnR5KGkudGV4dCkpe3ZhciB1PURiZVtpLnRleHRdLmNsYXNzTmFtZXx8IiI7aWYoaS5tb2RlPT09InRleHQiKXt2YXIgZD16bi5tYWtlT3JkKGkscywidGV4dG9yZCIpO3JldHVybiBkLmNsYXNzZXMucHVzaCh1KSxkfWVsc2UgcmV0dXJuIHpuLm1ha2VTcGFuKFsibXNwYWNlIix1XSxbem4ubWF0aHN5bShpLnRleHQsaS5tb2RlLHMpXSxzKX1lbHNle2lmKE1iZS5oYXNPd25Qcm9wZXJ0eShpLnRleHQpKXJldHVybiB6bi5tYWtlU3BhbihbIm1zcGFjZSIsTWJlW2kudGV4dF1dLFtdLHMpO3Rocm93IG5ldyBDaSgnVW5rbm93biB0eXBlIG9mIHNwYWNlICInK2kudGV4dCsnIicpfX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1O2lmKERiZS5oYXNPd25Qcm9wZXJ0eShpLnRleHQpKXU9bmV3IHZpLk1hdGhOb2RlKCJtdGV4dCIsW25ldyB2aS5UZXh0Tm9kZSgiwqAiKV0pO2Vsc2V7aWYoTWJlLmhhc093blByb3BlcnR5KGkudGV4dCkpcmV0dXJuIG5ldyB2aS5NYXRoTm9kZSgibXNwYWNlIik7dGhyb3cgbmV3IENpKCdVbmtub3duIHR5cGUgb2Ygc3BhY2UgIicraS50ZXh0KyciJyl9cmV0dXJuIHV9fSk7dmFyIHNxZT0oKT0+e3ZhciBpPW5ldyB2aS5NYXRoTm9kZSgibXRkIixbXSk7cmV0dXJuIGkuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjUwJSIpLGl9O3pDKHt0eXBlOiJ0YWciLG1hdGhtbEJ1aWxkZXIoaSxzKXt2YXIgdT1uZXcgdmkuTWF0aE5vZGUoIm10YWJsZSIsW25ldyB2aS5NYXRoTm9kZSgibXRyIixbc3FlKCksbmV3IHZpLk1hdGhOb2RlKCJtdGQiLFtfOShpLmJvZHkscyldKSxzcWUoKSxuZXcgdmkuTWF0aE5vZGUoIm10ZCIsW185KGkudGFnLHMpXSldKV0pO3JldHVybiB1LnNldEF0dHJpYnV0ZSgid2lkdGgiLCIxMDAlIiksdX19KTt2YXIgYXFlPXsiXFx0ZXh0Ijp2b2lkIDAsIlxcdGV4dHJtIjoidGV4dHJtIiwiXFx0ZXh0c2YiOiJ0ZXh0c2YiLCJcXHRleHR0dCI6InRleHR0dCIsIlxcdGV4dG5vcm1hbCI6InRleHRybSJ9LG9xZT17IlxcdGV4dGJmIjoidGV4dGJmIiwiXFx0ZXh0bWQiOiJ0ZXh0bWQifSxiVnQ9eyJcXHRleHRpdCI6InRleHRpdCIsIlxcdGV4dHVwIjoidGV4dHVwIn0sY3FlPShpLHMpPT57dmFyIHU9aS5mb250O3JldHVybiB1P2FxZVt1XT9zLndpdGhUZXh0Rm9udEZhbWlseShhcWVbdV0pOm9xZVt1XT9zLndpdGhUZXh0Rm9udFdlaWdodChvcWVbdV0pOnMud2l0aFRleHRGb250U2hhcGUoYlZ0W3VdKTpzfTtKaSh7dHlwZToidGV4dCIsbmFtZXM6WyJcXHRleHQiLCJcXHRleHRybSIsIlxcdGV4dHNmIiwiXFx0ZXh0dHQiLCJcXHRleHRub3JtYWwiLCJcXHRleHRiZiIsIlxcdGV4dG1kIiwiXFx0ZXh0aXQiLCJcXHRleHR1cCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJ0ZXh0Il0sYWxsb3dlZEluQXJndW1lbnQ6ITAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcihpLHMpe3ZhcntwYXJzZXI6dSxmdW5jTmFtZTpkfT1pLHA9c1swXTtyZXR1cm57dHlwZToidGV4dCIsbW9kZTp1Lm1vZGUsYm9keTpYZihwKSxmb250OmR9fSxodG1sQnVpbGRlcihpLHMpe3ZhciB1PWNxZShpLHMpLGQ9ZDEoaS5ib2R5LHUsITApO3JldHVybiB6bi5tYWtlU3BhbihbIm1vcmQiLCJ0ZXh0Il0sZCx1KX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PWNxZShpLHMpO3JldHVybiBfOShpLmJvZHksdSl9fSksSmkoe3R5cGU6InVuZGVybGluZSIsbmFtZXM6WyJcXHVuZGVybGluZSJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcihpLHMpe3ZhcntwYXJzZXI6dX09aTtyZXR1cm57dHlwZToidW5kZXJsaW5lIixtb2RlOnUubW9kZSxib2R5OnNbMF19fSxodG1sQnVpbGRlcihpLHMpe3ZhciB1PXV1KGkuYm9keSxzKSxkPXpuLm1ha2VMaW5lU3BhbigidW5kZXJsaW5lLWxpbmUiLHMpLHA9cy5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzLHY9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6InRvcCIscG9zaXRpb25EYXRhOnUuaGVpZ2h0LGNoaWxkcmVuOlt7dHlwZToia2VybiIsc2l6ZTpwfSx7dHlwZToiZWxlbSIsZWxlbTpkfSx7dHlwZToia2VybiIsc2l6ZTozKnB9LHt0eXBlOiJlbGVtIixlbGVtOnV9XX0scyk7cmV0dXJuIHpuLm1ha2VTcGFuKFsibW9yZCIsInVuZGVybGluZSJdLFt2XSxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PW5ldyB2aS5NYXRoTm9kZSgibW8iLFtuZXcgdmkuVGV4dE5vZGUoIuKAviIpXSk7dS5zZXRBdHRyaWJ1dGUoInN0cmV0Y2h5IiwidHJ1ZSIpO3ZhciBkPW5ldyB2aS5NYXRoTm9kZSgibXVuZGVyIixbTGwoaS5ib2R5LHMpLHVdKTtyZXR1cm4gZC5zZXRBdHRyaWJ1dGUoImFjY2VudHVuZGVyIiwidHJ1ZSIpLGR9fSksSmkoe3R5cGU6InZjZW50ZXIiLG5hbWVzOlsiXFx2Y2VudGVyIl0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbIm9yaWdpbmFsIl0sYWxsb3dlZEluVGV4dDohMX0saGFuZGxlcihpLHMpe3ZhcntwYXJzZXI6dX09aTtyZXR1cm57dHlwZToidmNlbnRlciIsbW9kZTp1Lm1vZGUsYm9keTpzWzBdfX0saHRtbEJ1aWxkZXIoaSxzKXt2YXIgdT11dShpLmJvZHkscyksZD1zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCxwPS41Kih1LmhlaWdodC1kLSh1LmRlcHRoK2QpKTtyZXR1cm4gem4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6InNoaWZ0Iixwb3NpdGlvbkRhdGE6cCxjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06dX1dfSxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3JldHVybiBuZXcgdmkuTWF0aE5vZGUoIm1wYWRkZWQiLFtMbChpLmJvZHkscyldLFsidmNlbnRlciJdKX19KSxKaSh7dHlwZToidmVyYiIsbmFtZXM6WyJcXHZlcmIiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIoaSxzLHUpe3Rocm93IG5ldyBDaSgiXFx2ZXJiIGVuZGVkIGJ5IGVuZCBvZiBsaW5lIGluc3RlYWQgb2YgbWF0Y2hpbmcgZGVsaW1pdGVyIil9LGh0bWxCdWlsZGVyKGkscyl7Zm9yKHZhciB1PXVxZShpKSxkPVtdLHA9cy5oYXZpbmdTdHlsZShzLnN0eWxlLnRleHQoKSksdj0wO3Y8dS5sZW5ndGg7disrKXt2YXIgYj11W3ZdO2I9PT0ifiImJihiPSJcXHRleHRhc2NpaXRpbGRlIiksZC5wdXNoKHpuLm1ha2VTeW1ib2woYiwiVHlwZXdyaXRlci1SZWd1bGFyIixpLm1vZGUscCxbIm1vcmQiLCJ0ZXh0dHQiXSkpfXJldHVybiB6bi5tYWtlU3BhbihbIm1vcmQiLCJ0ZXh0Il0uY29uY2F0KHAuc2l6aW5nQ2xhc3NlcyhzKSksem4udHJ5Q29tYmluZUNoYXJzKGQpLHApfSxtYXRobWxCdWlsZGVyKGkscyl7dmFyIHU9bmV3IHZpLlRleHROb2RlKHVxZShpKSksZD1uZXcgdmkuTWF0aE5vZGUoIm10ZXh0IixbdV0pO3JldHVybiBkLnNldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiLCJtb25vc3BhY2UiKSxkfX0pO3ZhciB1cWU9aT0+aS5ib2R5LnJlcGxhY2UoLyAvZyxpLnN0YXI/IuKQoyI6IsKgIiksTDk9ZHplLGxxZT1gWyBccgoJXWAsbVZ0PSJcXFxcW2EtekEtWkBdKyIsdlZ0PSJcXFxcW15cdUQ4MDAtXHVERkZGXSIsd1Z0PSIoIittVnQrIikiK2xxZSsiKiIseVZ0PWBcXFxcKAp8WyBccgldKwo/KVsgXHIJXSpgLEliZT0iW8yALc2vXSIseFZ0PW5ldyBSZWdFeHAoSWJlKyIrJCIpLGtWdD0iKCIrbHFlKyIrKXwiKyh5VnQrInwiKSsiKFshLVxcW1xcXS3igKfigKot7Z+/76SALe+/v10iKyhJYmUrIioiKSsifFtcdUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVERkZGXSIrKEliZSsiKiIpKyJ8XFxcXHZlcmJcXCooW15dKS4qP1xcNHxcXFxcdmVyYihbXiphLXpBLVpdKS4qP1xcNSIrKCJ8Iit3VnQpKygifCIrdlZ0KyIpIik7Y2xhc3MgaHFle2NvbnN0cnVjdG9yKHMsdSl7dGhpcy5pbnB1dD12b2lkIDAsdGhpcy5zZXR0aW5ncz12b2lkIDAsdGhpcy50b2tlblJlZ2V4PXZvaWQgMCx0aGlzLmNhdGNvZGVzPXZvaWQgMCx0aGlzLmlucHV0PXMsdGhpcy5zZXR0aW5ncz11LHRoaXMudG9rZW5SZWdleD1uZXcgUmVnRXhwKGtWdCwiZyIpLHRoaXMuY2F0Y29kZXM9eyIlIjoxNCwifiI6MTN9fXNldENhdGNvZGUocyx1KXt0aGlzLmNhdGNvZGVzW3NdPXV9bGV4KCl7dmFyIHM9dGhpcy5pbnB1dCx1PXRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXg7aWYodT09PXMubGVuZ3RoKXJldHVybiBuZXcgVTQoIkVPRiIsbmV3IGxtKHRoaXMsdSx1KSk7dmFyIGQ9dGhpcy50b2tlblJlZ2V4LmV4ZWMocyk7aWYoZD09PW51bGx8fGQuaW5kZXghPT11KXRocm93IG5ldyBDaSgiVW5leHBlY3RlZCBjaGFyYWN0ZXI6ICciK3NbdV0rIiciLG5ldyBVNChzW3VdLG5ldyBsbSh0aGlzLHUsdSsxKSkpO3ZhciBwPWRbNl18fGRbM118fChkWzJdPyJcXCAiOiIgIik7aWYodGhpcy5jYXRjb2Rlc1twXT09PTE0KXt2YXIgdj1zLmluZGV4T2YoYApgLHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXgpO3JldHVybiB2PT09LTE/KHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXg9cy5sZW5ndGgsdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoImNvbW1lbnRBdEVuZCIsIiUgY29tbWVudCBoYXMgbm8gdGVybWluYXRpbmcgbmV3bGluZTsgTGFUZVggd291bGQgZmFpbCBiZWNhdXNlIG9mIGNvbW1lbnRpbmcgdGhlIGVuZCBvZiBtYXRoIG1vZGUgKGUuZy4gJCkiKSk6dGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleD12KzEsdGhpcy5sZXgoKX1yZXR1cm4gbmV3IFU0KHAsbmV3IGxtKHRoaXMsdSx0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4KSl9fWNsYXNzIEVWdHtjb25zdHJ1Y3RvcihzLHUpe3M9PT12b2lkIDAmJihzPXt9KSx1PT09dm9pZCAwJiYodT17fSksdGhpcy5jdXJyZW50PXZvaWQgMCx0aGlzLmJ1aWx0aW5zPXZvaWQgMCx0aGlzLnVuZGVmU3RhY2s9dm9pZCAwLHRoaXMuY3VycmVudD11LHRoaXMuYnVpbHRpbnM9cyx0aGlzLnVuZGVmU3RhY2s9W119YmVnaW5Hcm91cCgpe3RoaXMudW5kZWZTdGFjay5wdXNoKHt9KX1lbmRHcm91cCgpe2lmKHRoaXMudW5kZWZTdGFjay5sZW5ndGg9PT0wKXRocm93IG5ldyBDaSgiVW5iYWxhbmNlZCBuYW1lc3BhY2UgZGVzdHJ1Y3Rpb246IGF0dGVtcHQgdG8gcG9wIGdsb2JhbCBuYW1lc3BhY2U7IHBsZWFzZSByZXBvcnQgdGhpcyBhcyBhIGJ1ZyIpO3ZhciBzPXRoaXMudW5kZWZTdGFjay5wb3AoKTtmb3IodmFyIHUgaW4gcylzLmhhc093blByb3BlcnR5KHUpJiYoc1t1XT09bnVsbD9kZWxldGUgdGhpcy5jdXJyZW50W3VdOnRoaXMuY3VycmVudFt1XT1zW3VdKX1lbmRHcm91cHMoKXtmb3IoO3RoaXMudW5kZWZTdGFjay5sZW5ndGg+MDspdGhpcy5lbmRHcm91cCgpfWhhcyhzKXtyZXR1cm4gdGhpcy5jdXJyZW50Lmhhc093blByb3BlcnR5KHMpfHx0aGlzLmJ1aWx0aW5zLmhhc093blByb3BlcnR5KHMpfWdldChzKXtyZXR1cm4gdGhpcy5jdXJyZW50Lmhhc093blByb3BlcnR5KHMpP3RoaXMuY3VycmVudFtzXTp0aGlzLmJ1aWx0aW5zW3NdfXNldChzLHUsZCl7aWYoZD09PXZvaWQgMCYmKGQ9ITEpLGQpe2Zvcih2YXIgcD0wO3A8dGhpcy51bmRlZlN0YWNrLmxlbmd0aDtwKyspZGVsZXRlIHRoaXMudW5kZWZTdGFja1twXVtzXTt0aGlzLnVuZGVmU3RhY2subGVuZ3RoPjAmJih0aGlzLnVuZGVmU3RhY2tbdGhpcy51bmRlZlN0YWNrLmxlbmd0aC0xXVtzXT11KX1lbHNle3ZhciB2PXRoaXMudW5kZWZTdGFja1t0aGlzLnVuZGVmU3RhY2subGVuZ3RoLTFdO3YmJiF2Lmhhc093blByb3BlcnR5KHMpJiYodltzXT10aGlzLmN1cnJlbnRbc10pfXU9PW51bGw/ZGVsZXRlIHRoaXMuY3VycmVudFtzXTp0aGlzLmN1cnJlbnRbc109dX19dmFyIFRWdD0kemU7ZXQoIlxcbm9leHBhbmQiLGZ1bmN0aW9uKGkpe3ZhciBzPWkucG9wVG9rZW4oKTtyZXR1cm4gaS5pc0V4cGFuZGFibGUocy50ZXh0KSYmKHMubm9leHBhbmQ9ITAscy50cmVhdEFzUmVsYXg9ITApLHt0b2tlbnM6W3NdLG51bUFyZ3M6MH19KSxldCgiXFxleHBhbmRhZnRlciIsZnVuY3Rpb24oaSl7dmFyIHM9aS5wb3BUb2tlbigpO3JldHVybiBpLmV4cGFuZE9uY2UoITApLHt0b2tlbnM6W3NdLG51bUFyZ3M6MH19KSxldCgiXFxAZmlyc3RvZnR3byIsZnVuY3Rpb24oaSl7dmFyIHM9aS5jb25zdW1lQXJncygyKTtyZXR1cm57dG9rZW5zOnNbMF0sbnVtQXJnczowfX0pLGV0KCJcXEBzZWNvbmRvZnR3byIsZnVuY3Rpb24oaSl7dmFyIHM9aS5jb25zdW1lQXJncygyKTtyZXR1cm57dG9rZW5zOnNbMV0sbnVtQXJnczowfX0pLGV0KCJcXEBpZm5leHRjaGFyIixmdW5jdGlvbihpKXt2YXIgcz1pLmNvbnN1bWVBcmdzKDMpO2kuY29uc3VtZVNwYWNlcygpO3ZhciB1PWkuZnV0dXJlKCk7cmV0dXJuIHNbMF0ubGVuZ3RoPT09MSYmc1swXVswXS50ZXh0PT09dS50ZXh0P3t0b2tlbnM6c1sxXSxudW1BcmdzOjB9Ont0b2tlbnM6c1syXSxudW1BcmdzOjB9fSksZXQoIlxcQGlmc3RhciIsIlxcQGlmbmV4dGNoYXIgKntcXEBmaXJzdG9mdHdveyMxfX0iKSxldCgiXFxUZXh0T3JNYXRoIixmdW5jdGlvbihpKXt2YXIgcz1pLmNvbnN1bWVBcmdzKDIpO3JldHVybiBpLm1vZGU9PT0idGV4dCI/e3Rva2VuczpzWzBdLG51bUFyZ3M6MH06e3Rva2VuczpzWzFdLG51bUFyZ3M6MH19KTt2YXIgZnFlPXswOjAsMToxLDI6MiwzOjMsNDo0LDU6NSw2OjYsNzo3LDg6OCw5OjksYToxMCxBOjEwLGI6MTEsQjoxMSxjOjEyLEM6MTIsZDoxMyxEOjEzLGU6MTQsRToxNCxmOjE1LEY6MTV9O2V0KCJcXGNoYXIiLGZ1bmN0aW9uKGkpe3ZhciBzPWkucG9wVG9rZW4oKSx1LGQ9IiI7aWYocy50ZXh0PT09IiciKXU9OCxzPWkucG9wVG9rZW4oKTtlbHNlIGlmKHMudGV4dD09PSciJyl1PTE2LHM9aS5wb3BUb2tlbigpO2Vsc2UgaWYocy50ZXh0PT09ImAiKWlmKHM9aS5wb3BUb2tlbigpLHMudGV4dFswXT09PSJcXCIpZD1zLnRleHQuY2hhckNvZGVBdCgxKTtlbHNle2lmKHMudGV4dD09PSJFT0YiKXRocm93IG5ldyBDaSgiXFxjaGFyYCBtaXNzaW5nIGFyZ3VtZW50Iik7ZD1zLnRleHQuY2hhckNvZGVBdCgwKX1lbHNlIHU9MTA7aWYodSl7aWYoZD1mcWVbcy50ZXh0XSxkPT1udWxsfHxkPj11KXRocm93IG5ldyBDaSgiSW52YWxpZCBiYXNlLSIrdSsiIGRpZ2l0ICIrcy50ZXh0KTtmb3IodmFyIHA7KHA9ZnFlW2kuZnV0dXJlKCkudGV4dF0pIT1udWxsJiZwPHU7KWQqPXUsZCs9cCxpLnBvcFRva2VuKCl9cmV0dXJuIlxcQGNoYXJ7IitkKyJ9In0pO3ZhciBPYmU9KGkscyx1KT0+e3ZhciBkPWkuY29uc3VtZUFyZygpLnRva2VucztpZihkLmxlbmd0aCE9PTEpdGhyb3cgbmV3IENpKCJcXG5ld2NvbW1hbmQncyBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgbWFjcm8gbmFtZSIpO3ZhciBwPWRbMF0udGV4dCx2PWkuaXNEZWZpbmVkKHApO2lmKHYmJiFzKXRocm93IG5ldyBDaSgiXFxuZXdjb21tYW5keyIrcCsifSBhdHRlbXB0aW5nIHRvIHJlZGVmaW5lICIrKHArIjsgdXNlIFxccmVuZXdjb21tYW5kIikpO2lmKCF2JiYhdSl0aHJvdyBuZXcgQ2koIlxccmVuZXdjb21tYW5keyIrcCsifSB3aGVuIGNvbW1hbmQgIitwKyIgZG9lcyBub3QgeWV0IGV4aXN0OyB1c2UgXFxuZXdjb21tYW5kIik7dmFyIGI9MDtpZihkPWkuY29uc3VtZUFyZygpLnRva2VucyxkLmxlbmd0aD09PTEmJmRbMF0udGV4dD09PSJbIil7Zm9yKHZhciB5PSIiLFQ9aS5leHBhbmROZXh0VG9rZW4oKTtULnRleHQhPT0iXSImJlQudGV4dCE9PSJFT0YiOyl5Kz1ULnRleHQsVD1pLmV4cGFuZE5leHRUb2tlbigpO2lmKCF5Lm1hdGNoKC9eXHMqWzAtOV0rXHMqJC8pKXRocm93IG5ldyBDaSgiSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzOiAiK3kpO2I9cGFyc2VJbnQoeSksZD1pLmNvbnN1bWVBcmcoKS50b2tlbnN9cmV0dXJuIGkubWFjcm9zLnNldChwLHt0b2tlbnM6ZCxudW1BcmdzOmJ9KSwiIn07ZXQoIlxcbmV3Y29tbWFuZCIsaT0+T2JlKGksITEsITApKSxldCgiXFxyZW5ld2NvbW1hbmQiLGk9Pk9iZShpLCEwLCExKSksZXQoIlxccHJvdmlkZWNvbW1hbmQiLGk9Pk9iZShpLCEwLCEwKSksZXQoIlxcbWVzc2FnZSIsaT0+e3ZhciBzPWkuY29uc3VtZUFyZ3MoMSlbMF07cmV0dXJuIGNvbnNvbGUubG9nKHMucmV2ZXJzZSgpLm1hcCh1PT51LnRleHQpLmpvaW4oIiIpKSwiIn0pLGV0KCJcXGVycm1lc3NhZ2UiLGk9Pnt2YXIgcz1pLmNvbnN1bWVBcmdzKDEpWzBdO3JldHVybiBjb25zb2xlLmVycm9yKHMucmV2ZXJzZSgpLm1hcCh1PT51LnRleHQpLmpvaW4oIiIpKSwiIn0pLGV0KCJcXHNob3ciLGk9Pnt2YXIgcz1pLnBvcFRva2VuKCksdT1zLnRleHQ7cmV0dXJuIGNvbnNvbGUubG9nKHMsaS5tYWNyb3MuZ2V0KHUpLEw5W3VdLFVsLm1hdGhbdV0sVWwudGV4dFt1XSksIiJ9KSxldCgiXFxiZ3JvdXAiLCJ7IiksZXQoIlxcZWdyb3VwIiwifSIpLGV0KCJ+IiwiXFxub2JyZWFrc3BhY2UiKSxldCgiXFxscSIsImAiKSxldCgiXFxycSIsIiciKSxldCgiXFxhYSIsIlxcciBhIiksZXQoIlxcQUEiLCJcXHIgQSIpLGV0KCJcXHRleHRjb3B5cmlnaHQiLCJcXGh0bWxAbWF0aG1se1xcdGV4dGNpcmNsZWR7Y319e1xcY2hhcmDCqX0iKSxldCgiXFxjb3B5cmlnaHQiLCJcXFRleHRPck1hdGh7XFx0ZXh0Y29weXJpZ2h0fXtcXHRleHR7XFx0ZXh0Y29weXJpZ2h0fX0iKSxldCgiXFx0ZXh0cmVnaXN0ZXJlZCIsIlxcaHRtbEBtYXRobWx7XFx0ZXh0Y2lyY2xlZHtcXHNjcmlwdHNpemUgUn19e1xcY2hhcmDCrn0iKSxldCgi4oSsIiwiXFxtYXRoc2Nye0J9IiksZXQoIuKEsCIsIlxcbWF0aHNjcntFfSIpLGV0KCLihLEiLCJcXG1hdGhzY3J7Rn0iKSxldCgi4oSLIiwiXFxtYXRoc2Nye0h9IiksZXQoIuKEkCIsIlxcbWF0aHNjcntJfSIpLGV0KCLihJIiLCJcXG1hdGhzY3J7TH0iKSxldCgi4oSzIiwiXFxtYXRoc2Nye019IiksZXQoIuKEmyIsIlxcbWF0aHNjcntSfSIpLGV0KCLihK0iLCJcXG1hdGhmcmFre0N9IiksZXQoIuKEjCIsIlxcbWF0aGZyYWt7SH0iKSxldCgi4oSoIiwiXFxtYXRoZnJha3tafSIpLGV0KCJcXEJiYmsiLCJcXEJiYntrfSIpLGV0KCLCtyIsIlxcY2RvdHAiKSxldCgiXFxsbGFwIiwiXFxtYXRobGxhcHtcXHRleHRybXsjMX19IiksZXQoIlxccmxhcCIsIlxcbWF0aHJsYXB7XFx0ZXh0cm17IzF9fSIpLGV0KCJcXGNsYXAiLCJcXG1hdGhjbGFwe1xcdGV4dHJteyMxfX0iKSxldCgiXFxtYXRoc3RydXQiLCJcXHZwaGFudG9teyh9IiksZXQoIlxcdW5kZXJiYXIiLCJcXHVuZGVybGluZXtcXHRleHR7IzF9fSIpLGV0KCJcXG5vdCIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcbWF0aHJsYXBcXEBub3R9fXtcXGNoYXIiMzM4fScpLGV0KCJcXG5lcSIsIlxcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcbm90PX19e1xcbWF0aHJlbHtcXGNoYXJg4omgfX0iKSxldCgiXFxuZSIsIlxcbmVxIiksZXQoIuKJoCIsIlxcbmVxIiksZXQoIlxcbm90aW4iLCJcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHt7XFxpbn1cXG1hdGhsbGFwey9cXG1za2lwMW11fX19e1xcbWF0aHJlbHtcXGNoYXJg4oiJfX0iKSxldCgi4oiJIiwiXFxub3RpbiIpLGV0KCLiiZgiLCJcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHs9XFxrZXJuey0xZW19XFxyYWlzZWJveHswLjRlbX17JFxcc2NyaXB0c2l6ZVxcZnJvd24kfX19e1xcbWF0aHJlbHtcXGNoYXJg4omYfX0iKSxldCgi4omZIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcdGlueVxcd2VkZ2V9ez19fXtcXG1hdGhyZWx7XFxjaGFyYOKJmH19IiksZXQoIuKJmiIsIlxcaHRtbEBtYXRobWx7XFxzdGFja3JlbHtcXHRpbnlcXHZlZX17PX19e1xcbWF0aHJlbHtcXGNoYXJg4omafX0iKSxldCgi4ombIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcc2NyaXB0c2l6ZVxcc3Rhcn17PX19e1xcbWF0aHJlbHtcXGNoYXJg4ombfX0iKSxldCgi4omdIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcdGlueVxcbWF0aHJte2RlZn19ez19fXtcXG1hdGhyZWx7XFxjaGFyYOKJnX19IiksZXQoIuKJniIsIlxcaHRtbEBtYXRobWx7XFxzdGFja3JlbHtcXHRpbnlcXG1hdGhybXttfX17PX19e1xcbWF0aHJlbHtcXGNoYXJg4omefX0iKSxldCgi4omfIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcdGlueT99ez19fXtcXG1hdGhyZWx7XFxjaGFyYOKJn319IiksZXQoIuKfgiIsIlxccGVycCIpLGV0KCLigLwiLCJcXG1hdGhjbG9zZXshXFxta2Vybi0wLjhtdSF9IiksZXQoIuKIjCIsIlxcbm90bmkiKSxldCgi4oycIiwiXFx1bGNvcm5lciIpLGV0KCLijJ0iLCJcXHVyY29ybmVyIiksZXQoIuKMniIsIlxcbGxjb3JuZXIiKSxldCgi4oyfIiwiXFxscmNvcm5lciIpLGV0KCLCqSIsIlxcY29weXJpZ2h0IiksZXQoIsKuIiwiXFx0ZXh0cmVnaXN0ZXJlZCIpLGV0KCLvuI8iLCJcXHRleHRyZWdpc3RlcmVkIiksZXQoIlxcdWxjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQHVsY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxY319JyksZXQoIlxcdXJjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQHVyY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxZH19JyksZXQoIlxcbGxjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQGxsY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxZX19JyksZXQoIlxcbHJjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQGxyY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxZn19JyksZXQoIlxcdmRvdHMiLCJcXG1hdGhvcmR7XFx2YXJ2ZG90c1xccnVsZXswcHR9ezE1cHR9fSIpLGV0KCLii64iLCJcXHZkb3RzIiksZXQoIlxcdmFyR2FtbWEiLCJcXG1hdGhpdHtcXEdhbW1hfSIpLGV0KCJcXHZhckRlbHRhIiwiXFxtYXRoaXR7XFxEZWx0YX0iKSxldCgiXFx2YXJUaGV0YSIsIlxcbWF0aGl0e1xcVGhldGF9IiksZXQoIlxcdmFyTGFtYmRhIiwiXFxtYXRoaXR7XFxMYW1iZGF9IiksZXQoIlxcdmFyWGkiLCJcXG1hdGhpdHtcXFhpfSIpLGV0KCJcXHZhclBpIiwiXFxtYXRoaXR7XFxQaX0iKSxldCgiXFx2YXJTaWdtYSIsIlxcbWF0aGl0e1xcU2lnbWF9IiksZXQoIlxcdmFyVXBzaWxvbiIsIlxcbWF0aGl0e1xcVXBzaWxvbn0iKSxldCgiXFx2YXJQaGkiLCJcXG1hdGhpdHtcXFBoaX0iKSxldCgiXFx2YXJQc2kiLCJcXG1hdGhpdHtcXFBzaX0iKSxldCgiXFx2YXJPbWVnYSIsIlxcbWF0aGl0e1xcT21lZ2F9IiksZXQoIlxcc3Vic3RhY2siLCJcXGJlZ2lue3N1YmFycmF5fXtjfSMxXFxlbmR7c3ViYXJyYXl9IiksZXQoIlxcY29sb24iLCJcXG5vYnJlYWtcXG1za2lwMm11XFxtYXRocHVuY3R7fVxcbWF0aGNob2ljZXtcXG1rZXJuLTNtdX17XFxta2Vybi0zbXV9e317fXs6fVxcbXNraXA2bXVcXHJlbGF4IiksZXQoIlxcYm94ZWQiLCJcXGZib3h7JFxcZGlzcGxheXN0eWxleyMxfSR9IiksZXQoIlxcaWZmIiwiXFxET1RTQlxcO1xcTG9uZ2xlZnRyaWdodGFycm93XFw7IiksZXQoIlxcaW1wbGllcyIsIlxcRE9UU0JcXDtcXExvbmdyaWdodGFycm93XFw7IiksZXQoIlxcaW1wbGllZGJ5IiwiXFxET1RTQlxcO1xcTG9uZ2xlZnRhcnJvd1xcOyIpO3ZhciBkcWU9eyIsIjoiXFxkb3RzYyIsIlxcbm90IjoiXFxkb3RzYiIsIisiOiJcXGRvdHNiIiwiPSI6IlxcZG90c2IiLCI8IjoiXFxkb3RzYiIsIj4iOiJcXGRvdHNiIiwiLSI6IlxcZG90c2IiLCIqIjoiXFxkb3RzYiIsIjoiOiJcXGRvdHNiIiwiXFxET1RTQiI6IlxcZG90c2IiLCJcXGNvcHJvZCI6IlxcZG90c2IiLCJcXGJpZ3ZlZSI6IlxcZG90c2IiLCJcXGJpZ3dlZGdlIjoiXFxkb3RzYiIsIlxcYmlndXBsdXMiOiJcXGRvdHNiIiwiXFxiaWdjYXAiOiJcXGRvdHNiIiwiXFxiaWdjdXAiOiJcXGRvdHNiIiwiXFxwcm9kIjoiXFxkb3RzYiIsIlxcc3VtIjoiXFxkb3RzYiIsIlxcYmlnb3RpbWVzIjoiXFxkb3RzYiIsIlxcYmlnb3BsdXMiOiJcXGRvdHNiIiwiXFxiaWdvZG90IjoiXFxkb3RzYiIsIlxcYmlnc3FjdXAiOiJcXGRvdHNiIiwiXFxBbmQiOiJcXGRvdHNiIiwiXFxsb25ncmlnaHRhcnJvdyI6IlxcZG90c2IiLCJcXExvbmdyaWdodGFycm93IjoiXFxkb3RzYiIsIlxcbG9uZ2xlZnRhcnJvdyI6IlxcZG90c2IiLCJcXExvbmdsZWZ0YXJyb3ciOiJcXGRvdHNiIiwiXFxsb25nbGVmdHJpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFxMb25nbGVmdHJpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFxtYXBzdG8iOiJcXGRvdHNiIiwiXFxsb25nbWFwc3RvIjoiXFxkb3RzYiIsIlxcaG9va3JpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFxkb3RlcSI6IlxcZG90c2IiLCJcXG1hdGhiaW4iOiJcXGRvdHNiIiwiXFxtYXRocmVsIjoiXFxkb3RzYiIsIlxccmVsYmFyIjoiXFxkb3RzYiIsIlxcUmVsYmFyIjoiXFxkb3RzYiIsIlxceHJpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFx4bGVmdGFycm93IjoiXFxkb3RzYiIsIlxcRE9UU0kiOiJcXGRvdHNpIiwiXFxpbnQiOiJcXGRvdHNpIiwiXFxvaW50IjoiXFxkb3RzaSIsIlxcaWludCI6IlxcZG90c2kiLCJcXGlpaW50IjoiXFxkb3RzaSIsIlxcaWlpaW50IjoiXFxkb3RzaSIsIlxcaWRvdHNpbnQiOiJcXGRvdHNpIiwiXFxET1RTWCI6IlxcZG90c3gifTtldCgiXFxkb3RzIixmdW5jdGlvbihpKXt2YXIgcz0iXFxkb3RzbyIsdT1pLmV4cGFuZEFmdGVyRnV0dXJlKCkudGV4dDtyZXR1cm4gdSBpbiBkcWU/cz1kcWVbdV06KHUuc2xpY2UoMCw0KT09PSJcXG5vdCJ8fHUgaW4gVWwubWF0aCYmWWEuY29udGFpbnMoWyJiaW4iLCJyZWwiXSxVbC5tYXRoW3VdLmdyb3VwKSkmJihzPSJcXGRvdHNiIiksc30pO3ZhciBOYmU9eyIpIjohMCwiXSI6ITAsIlxccmJyYWNrIjohMCwiXFx9IjohMCwiXFxyYnJhY2UiOiEwLCJcXHJhbmdsZSI6ITAsIlxccmNlaWwiOiEwLCJcXHJmbG9vciI6ITAsIlxccmdyb3VwIjohMCwiXFxybW91c3RhY2hlIjohMCwiXFxyaWdodCI6ITAsIlxcYmlnciI6ITAsIlxcYmlnZ3IiOiEwLCJcXEJpZ3IiOiEwLCJcXEJpZ2dyIjohMCwkOiEwLCI7IjohMCwiLiI6ITAsIiwiOiEwfTtldCgiXFxkb3RzbyIsZnVuY3Rpb24oaSl7dmFyIHM9aS5mdXR1cmUoKS50ZXh0O3JldHVybiBzIGluIE5iZT8iXFxsZG90c1xcLCI6IlxcbGRvdHMifSksZXQoIlxcZG90c2MiLGZ1bmN0aW9uKGkpe3ZhciBzPWkuZnV0dXJlKCkudGV4dDtyZXR1cm4gcyBpbiBOYmUmJnMhPT0iLCI/IlxcbGRvdHNcXCwiOiJcXGxkb3RzIn0pLGV0KCJcXGNkb3RzIixmdW5jdGlvbihpKXt2YXIgcz1pLmZ1dHVyZSgpLnRleHQ7cmV0dXJuIHMgaW4gTmJlPyJcXEBjZG90c1xcLCI6IlxcQGNkb3RzIn0pLGV0KCJcXGRvdHNiIiwiXFxjZG90cyIpLGV0KCJcXGRvdHNtIiwiXFxjZG90cyIpLGV0KCJcXGRvdHNpIiwiXFwhXFxjZG90cyIpLGV0KCJcXGRvdHN4IiwiXFxsZG90c1xcLCIpLGV0KCJcXERPVFNJIiwiXFxyZWxheCIpLGV0KCJcXERPVFNCIiwiXFxyZWxheCIpLGV0KCJcXERPVFNYIiwiXFxyZWxheCIpLGV0KCJcXHRtc3BhY2UiLCJcXFRleHRPck1hdGh7XFxrZXJuIzEjM317XFxtc2tpcCMxIzJ9XFxyZWxheCIpLGV0KCJcXCwiLCJcXHRtc3BhY2UrezNtdX17LjE2NjdlbX0iKSxldCgiXFx0aGluc3BhY2UiLCJcXCwiKSxldCgiXFw+IiwiXFxtc2tpcHs0bXV9IiksZXQoIlxcOiIsIlxcdG1zcGFjZSt7NG11fXsuMjIyMmVtfSIpLGV0KCJcXG1lZHNwYWNlIiwiXFw6IiksZXQoIlxcOyIsIlxcdG1zcGFjZSt7NW11fXsuMjc3N2VtfSIpLGV0KCJcXHRoaWNrc3BhY2UiLCJcXDsiKSxldCgiXFwhIiwiXFx0bXNwYWNlLXszbXV9ey4xNjY3ZW19IiksZXQoIlxcbmVndGhpbnNwYWNlIiwiXFwhIiksZXQoIlxcbmVnbWVkc3BhY2UiLCJcXHRtc3BhY2UtezRtdX17LjIyMjJlbX0iKSxldCgiXFxuZWd0aGlja3NwYWNlIiwiXFx0bXNwYWNlLXs1bXV9ey4yNzdlbX0iKSxldCgiXFxlbnNwYWNlIiwiXFxrZXJuLjVlbSAiKSxldCgiXFxlbnNraXAiLCJcXGhza2lwLjVlbVxccmVsYXgiKSxldCgiXFxxdWFkIiwiXFxoc2tpcDFlbVxccmVsYXgiKSxldCgiXFxxcXVhZCIsIlxcaHNraXAyZW1cXHJlbGF4IiksZXQoIlxcdGFnIiwiXFxAaWZzdGFyXFx0YWdAbGl0ZXJhbFxcdGFnQHBhcmVuIiksZXQoIlxcdGFnQHBhcmVuIiwiXFx0YWdAbGl0ZXJhbHsoeyMxfSl9IiksZXQoIlxcdGFnQGxpdGVyYWwiLGk9PntpZihpLm1hY3Jvcy5nZXQoIlxcZGZAdGFnIikpdGhyb3cgbmV3IENpKCJNdWx0aXBsZSBcXHRhZyIpO3JldHVybiJcXGdkZWZcXGRmQHRhZ3tcXHRleHR7IzF9fSJ9KSxldCgiXFxibW9kIiwiXFxtYXRoY2hvaWNle1xcbXNraXAxbXV9e1xcbXNraXAxbXV9e1xcbXNraXA1bXV9e1xcbXNraXA1bXV9XFxtYXRoYmlue1xccm0gbW9kfVxcbWF0aGNob2ljZXtcXG1za2lwMW11fXtcXG1za2lwMW11fXtcXG1za2lwNW11fXtcXG1za2lwNW11fSIpLGV0KCJcXHBvZCIsIlxcYWxsb3dicmVha1xcbWF0aGNob2ljZXtcXG1rZXJuMThtdX17XFxta2VybjhtdX17XFxta2VybjhtdX17XFxta2VybjhtdX0oIzEpIiksZXQoIlxccG1vZCIsIlxccG9ke3tcXHJtIG1vZH1cXG1rZXJuNm11IzF9IiksZXQoIlxcbW9kIiwiXFxhbGxvd2JyZWFrXFxtYXRoY2hvaWNle1xcbWtlcm4xOG11fXtcXG1rZXJuMTJtdX17XFxta2VybjEybXV9e1xcbWtlcm4xMm11fXtcXHJtIG1vZH1cXCxcXCwjMSIpLGV0KCJcXG5ld2xpbmUiLCJcXFxcXFxyZWxheCIpLGV0KCJcXFRlWCIsIlxcdGV4dHJte1xcaHRtbEBtYXRobWx7VFxca2Vybi0uMTY2N2VtXFxyYWlzZWJveHstLjVleH17RX1cXGtlcm4tLjEyNWVtWH17VGVYfX0iKTt2YXIgZ3FlPVJpKEs0WyJNYWluLVJlZ3VsYXIiXVsiVCIuY2hhckNvZGVBdCgwKV1bMV0tLjcqSzRbIk1haW4tUmVndWxhciJdWyJBIi5jaGFyQ29kZUF0KDApXVsxXSk7ZXQoIlxcTGFUZVgiLCJcXHRleHRybXtcXGh0bWxAbWF0aG1seyIrKCJMXFxrZXJuLS4zNmVtXFxyYWlzZWJveHsiK2dxZSsifXtcXHNjcmlwdHN0eWxlIEF9IikrIlxca2Vybi0uMTVlbVxcVGVYfXtMYVRlWH19IiksZXQoIlxcS2FUZVgiLCJcXHRleHRybXtcXGh0bWxAbWF0aG1seyIrKCJLXFxrZXJuLS4xN2VtXFxyYWlzZWJveHsiK2dxZSsifXtcXHNjcmlwdHN0eWxlIEF9IikrIlxca2Vybi0uMTVlbVxcVGVYfXtLYVRlWH19IiksZXQoIlxcaHNwYWNlIiwiXFxAaWZzdGFyXFxAaHNwYWNlclxcQGhzcGFjZSIpLGV0KCJcXEBoc3BhY2UiLCJcXGhza2lwICMxXFxyZWxheCIpLGV0KCJcXEBoc3BhY2VyIiwiXFxydWxlezBwdH17MHB0fVxcaHNraXAgIzFcXHJlbGF4IiksZXQoIlxcb3JkaW5hcnljb2xvbiIsIjoiKSxldCgiXFx2Y2VudGNvbG9uIiwiXFxtYXRocmVse1xcbWF0aG9wXFxvcmRpbmFyeWNvbG9ufSIpLGV0KCJcXGRibGNvbG9uIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tLjltdX1cXHZjZW50Y29sb259fXtcXG1hdGhvcHtcXGNoYXIiMjIzN319JyksZXQoIlxcY29sb25lcXEiLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX09fX17XFxtYXRob3B7XFxjaGFyIjIyNTR9fScpLGV0KCJcXENvbG9uZXFxIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fT19fXtcXG1hdGhvcHtcXGNoYXIiMjIzN1xcY2hhciIzZH19JyksZXQoIlxcY29sb25lcSIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcbWF0aHJlbHstfX19e1xcbWF0aG9we1xcY2hhciIzYVxcY2hhciIyMjEyfX0nKSxldCgiXFxDb2xvbmVxIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcbWF0aHJlbHstfX19e1xcbWF0aG9we1xcY2hhciIyMjM3XFxjaGFyIjIyMTJ9fScpLGV0KCJcXGVxcWNvbG9uIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7PVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcdmNlbnRjb2xvbn19e1xcbWF0aG9we1xcY2hhciIyMjU1fX0nKSxldCgiXFxFcXFjb2xvbiIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVsez1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGRibGNvbG9ufX17XFxtYXRob3B7XFxjaGFyIjNkXFxjaGFyIjIyMzd9fScpLGV0KCJcXGVxY29sb24iLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXG1hdGhyZWx7LX1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHZjZW50Y29sb259fXtcXG1hdGhvcHtcXGNoYXIiMjIzOX19JyksZXQoIlxcRXFjb2xvbiIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcbWF0aHJlbHstfVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcZGJsY29sb259fXtcXG1hdGhvcHtcXGNoYXIiMjIxMlxcY2hhciIyMjM3fX0nKSxldCgiXFxjb2xvbmFwcHJveCIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcYXBwcm94fX17XFxtYXRob3B7XFxjaGFyIjNhXFxjaGFyIjIyNDh9fScpLGV0KCJcXENvbG9uYXBwcm94IiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcYXBwcm94fX17XFxtYXRob3B7XFxjaGFyIjIyMzdcXGNoYXIiMjI0OH19JyksZXQoIlxcY29sb25zaW0iLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHNpbX19e1xcbWF0aG9we1xcY2hhciIzYVxcY2hhciIyMjNjfX0nKSxldCgiXFxDb2xvbnNpbSIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcZGJsY29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHNpbX19e1xcbWF0aG9we1xcY2hhciIyMjM3XFxjaGFyIjIyM2N9fScpLGV0KCLiiLciLCJcXGRibGNvbG9uIiksZXQoIuKIuSIsIlxcZXFjb2xvbiIpLGV0KCLiiZQiLCJcXGNvbG9uZXFxIiksZXQoIuKJlSIsIlxcZXFxY29sb24iKSxldCgi4qm0IiwiXFxDb2xvbmVxcSIpLGV0KCJcXHJhdGlvIiwiXFx2Y2VudGNvbG9uIiksZXQoIlxcY29sb25jb2xvbiIsIlxcZGJsY29sb24iKSxldCgiXFxjb2xvbmVxdWFscyIsIlxcY29sb25lcXEiKSxldCgiXFxjb2xvbmNvbG9uZXF1YWxzIiwiXFxDb2xvbmVxcSIpLGV0KCJcXGVxdWFsc2NvbG9uIiwiXFxlcXFjb2xvbiIpLGV0KCJcXGVxdWFsc2NvbG9uY29sb24iLCJcXEVxcWNvbG9uIiksZXQoIlxcY29sb25taW51cyIsIlxcY29sb25lcSIpLGV0KCJcXGNvbG9uY29sb25taW51cyIsIlxcQ29sb25lcSIpLGV0KCJcXG1pbnVzY29sb24iLCJcXGVxY29sb24iKSxldCgiXFxtaW51c2NvbG9uY29sb24iLCJcXEVxY29sb24iKSxldCgiXFxjb2xvbmNvbG9uYXBwcm94IiwiXFxDb2xvbmFwcHJveCIpLGV0KCJcXGNvbG9uY29sb25zaW0iLCJcXENvbG9uc2ltIiksZXQoIlxcc2ltY29sb24iLCJcXG1hdGhyZWx7XFxzaW1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHZjZW50Y29sb259IiksZXQoIlxcc2ltY29sb25jb2xvbiIsIlxcbWF0aHJlbHtcXHNpbVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcZGJsY29sb259IiksZXQoIlxcYXBwcm94Y29sb24iLCJcXG1hdGhyZWx7XFxhcHByb3hcXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHZjZW50Y29sb259IiksZXQoIlxcYXBwcm94Y29sb25jb2xvbiIsIlxcbWF0aHJlbHtcXGFwcHJveFxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcZGJsY29sb259IiksZXQoIlxcbm90bmkiLCJcXGh0bWxAbWF0aG1se1xcbm90XFxuaX17XFxtYXRocmVse1xcY2hhcmDiiIx9fSIpLGV0KCJcXGxpbXN1cCIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7bGltXFwsc3VwfSIpLGV0KCJcXGxpbWluZiIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7bGltXFwsaW5mfSIpLGV0KCJcXGluamxpbSIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7aW5qXFwsbGltfSIpLGV0KCJcXHByb2psaW0iLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe3Byb2pcXCxsaW19IiksZXQoIlxcdmFybGltc3VwIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntcXG92ZXJsaW5le2xpbX19IiksZXQoIlxcdmFybGltaW5mIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntcXHVuZGVybGluZXtsaW19fSIpLGV0KCJcXHZhcmluamxpbSIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7XFx1bmRlcnJpZ2h0YXJyb3d7bGltfX0iKSxldCgiXFx2YXJwcm9qbGltIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntcXHVuZGVybGVmdGFycm93e2xpbX19IiksZXQoIlxcZ3ZlcnRuZXFxIiwiXFxodG1sQG1hdGhtbHtcXEBndmVydG5lcXF9e+KJqX0iKSxldCgiXFxsdmVydG5lcXEiLCJcXGh0bWxAbWF0aG1se1xcQGx2ZXJ0bmVxcX174omofSIpLGV0KCJcXG5nZXFxIiwiXFxodG1sQG1hdGhtbHtcXEBuZ2VxcX174omxfSIpLGV0KCJcXG5nZXFzbGFudCIsIlxcaHRtbEBtYXRobWx7XFxAbmdlcXNsYW50fXviibF9IiksZXQoIlxcbmxlcXEiLCJcXGh0bWxAbWF0aG1se1xcQG5sZXFxfXviibB9IiksZXQoIlxcbmxlcXNsYW50IiwiXFxodG1sQG1hdGhtbHtcXEBubGVxc2xhbnR9e+KJsH0iKSxldCgiXFxuc2hvcnRtaWQiLCJcXGh0bWxAbWF0aG1se1xcQG5zaG9ydG1pZH174oikfSIpLGV0KCJcXG5zaG9ydHBhcmFsbGVsIiwiXFxodG1sQG1hdGhtbHtcXEBuc2hvcnRwYXJhbGxlbH174oimfSIpLGV0KCJcXG5zdWJzZXRlcXEiLCJcXGh0bWxAbWF0aG1se1xcQG5zdWJzZXRlcXF9e+KKiH0iKSxldCgiXFxuc3Vwc2V0ZXFxIiwiXFxodG1sQG1hdGhtbHtcXEBuc3Vwc2V0ZXFxfXviiol9IiksZXQoIlxcdmFyc3Vic2V0bmVxIiwiXFxodG1sQG1hdGhtbHtcXEB2YXJzdWJzZXRuZXF9e+KKin0iKSxldCgiXFx2YXJzdWJzZXRuZXFxIiwiXFxodG1sQG1hdGhtbHtcXEB2YXJzdWJzZXRuZXFxfXviq4t9IiksZXQoIlxcdmFyc3Vwc2V0bmVxIiwiXFxodG1sQG1hdGhtbHtcXEB2YXJzdXBzZXRuZXF9e+KKi30iKSxldCgiXFx2YXJzdXBzZXRuZXFxIiwiXFxodG1sQG1hdGhtbHtcXEB2YXJzdXBzZXRuZXFxfXviq4x9IiksZXQoIlxcaW1hdGgiLCJcXGh0bWxAbWF0aG1se1xcQGltYXRofXvEsX0iKSxldCgiXFxqbWF0aCIsIlxcaHRtbEBtYXRobWx7XFxAam1hdGh9e8i3fSIpLGV0KCJcXGxsYnJhY2tldCIsIlxcaHRtbEBtYXRobWx7XFxtYXRob3BlbntbXFxta2Vybi0zLjJtdVt9fXtcXG1hdGhvcGVue1xcY2hhcmDin6Z9fSIpLGV0KCJcXHJyYnJhY2tldCIsIlxcaHRtbEBtYXRobWx7XFxtYXRoY2xvc2V7XVxcbWtlcm4tMy4ybXVdfX17XFxtYXRoY2xvc2V7XFxjaGFyYOKfp319IiksZXQoIuKfpiIsIlxcbGxicmFja2V0IiksZXQoIuKfpyIsIlxccnJicmFja2V0IiksZXQoIlxcbEJyYWNlIiwiXFxodG1sQG1hdGhtbHtcXG1hdGhvcGVue1xce1xcbWtlcm4tMy4ybXVbfX17XFxtYXRob3BlbntcXGNoYXJg4qaDfX0iKSxldCgiXFxyQnJhY2UiLCJcXGh0bWxAbWF0aG1se1xcbWF0aGNsb3Nle11cXG1rZXJuLTMuMm11XFx9fX17XFxtYXRoY2xvc2V7XFxjaGFyYOKmhH19IiksZXQoIuKmgyIsIlxcbEJyYWNlIiksZXQoIuKmhCIsIlxcckJyYWNlIiksZXQoIlxcbWludXNvIiwiXFxtYXRoYmlue1xcaHRtbEBtYXRobWx7e1xcbWF0aHJsYXB7XFxtYXRoY2hvaWNle1xca2VybnswLjE0NWVtfX17XFxrZXJuezAuMTQ1ZW19fXtcXGtlcm57MC4xMDE1ZW19fXtcXGtlcm57MC4wNzI1ZW19fVxcY2lyY317LX19fXtcXGNoYXJg4qa1fX0iKSxldCgi4qa1IiwiXFxtaW51c28iKSxldCgiXFxkYXJyIiwiXFxkb3duYXJyb3ciKSxldCgiXFxkQXJyIiwiXFxEb3duYXJyb3ciKSxldCgiXFxEYXJyIiwiXFxEb3duYXJyb3ciKSxldCgiXFxsYW5nIiwiXFxsYW5nbGUiKSxldCgiXFxyYW5nIiwiXFxyYW5nbGUiKSxldCgiXFx1YXJyIiwiXFx1cGFycm93IiksZXQoIlxcdUFyciIsIlxcVXBhcnJvdyIpLGV0KCJcXFVhcnIiLCJcXFVwYXJyb3ciKSxldCgiXFxOIiwiXFxtYXRoYmJ7Tn0iKSxldCgiXFxSIiwiXFxtYXRoYmJ7Un0iKSxldCgiXFxaIiwiXFxtYXRoYmJ7Wn0iKSxldCgiXFxhbGVmIiwiXFxhbGVwaCIpLGV0KCJcXGFsZWZzeW0iLCJcXGFsZXBoIiksZXQoIlxcQWxwaGEiLCJcXG1hdGhybXtBfSIpLGV0KCJcXEJldGEiLCJcXG1hdGhybXtCfSIpLGV0KCJcXGJ1bGwiLCJcXGJ1bGxldCIpLGV0KCJcXENoaSIsIlxcbWF0aHJte1h9IiksZXQoIlxcY2x1YnMiLCJcXGNsdWJzdWl0IiksZXQoIlxcY251bXMiLCJcXG1hdGhiYntDfSIpLGV0KCJcXENvbXBsZXgiLCJcXG1hdGhiYntDfSIpLGV0KCJcXERhZ2dlciIsIlxcZGRhZ2dlciIpLGV0KCJcXGRpYW1vbmRzIiwiXFxkaWFtb25kc3VpdCIpLGV0KCJcXGVtcHR5IiwiXFxlbXB0eXNldCIpLGV0KCJcXEVwc2lsb24iLCJcXG1hdGhybXtFfSIpLGV0KCJcXEV0YSIsIlxcbWF0aHJte0h9IiksZXQoIlxcZXhpc3QiLCJcXGV4aXN0cyIpLGV0KCJcXGhhcnIiLCJcXGxlZnRyaWdodGFycm93IiksZXQoIlxcaEFyciIsIlxcTGVmdHJpZ2h0YXJyb3ciKSxldCgiXFxIYXJyIiwiXFxMZWZ0cmlnaHRhcnJvdyIpLGV0KCJcXGhlYXJ0cyIsIlxcaGVhcnRzdWl0IiksZXQoIlxcaW1hZ2UiLCJcXEltIiksZXQoIlxcaW5maW4iLCJcXGluZnR5IiksZXQoIlxcSW90YSIsIlxcbWF0aHJte0l9IiksZXQoIlxcaXNpbiIsIlxcaW4iKSxldCgiXFxLYXBwYSIsIlxcbWF0aHJte0t9IiksZXQoIlxcbGFyciIsIlxcbGVmdGFycm93IiksZXQoIlxcbEFyciIsIlxcTGVmdGFycm93IiksZXQoIlxcTGFyciIsIlxcTGVmdGFycm93IiksZXQoIlxcbHJhcnIiLCJcXGxlZnRyaWdodGFycm93IiksZXQoIlxcbHJBcnIiLCJcXExlZnRyaWdodGFycm93IiksZXQoIlxcTHJhcnIiLCJcXExlZnRyaWdodGFycm93IiksZXQoIlxcTXUiLCJcXG1hdGhybXtNfSIpLGV0KCJcXG5hdG51bXMiLCJcXG1hdGhiYntOfSIpLGV0KCJcXE51IiwiXFxtYXRocm17Tn0iKSxldCgiXFxPbWljcm9uIiwiXFxtYXRocm17T30iKSxldCgiXFxwbHVzbW4iLCJcXHBtIiksZXQoIlxccmFyciIsIlxccmlnaHRhcnJvdyIpLGV0KCJcXHJBcnIiLCJcXFJpZ2h0YXJyb3ciKSxldCgiXFxSYXJyIiwiXFxSaWdodGFycm93IiksZXQoIlxccmVhbCIsIlxcUmUiKSxldCgiXFxyZWFscyIsIlxcbWF0aGJie1J9IiksZXQoIlxcUmVhbHMiLCJcXG1hdGhiYntSfSIpLGV0KCJcXFJobyIsIlxcbWF0aHJte1B9IiksZXQoIlxcc2RvdCIsIlxcY2RvdCIpLGV0KCJcXHNlY3QiLCJcXFMiKSxldCgiXFxzcGFkZXMiLCJcXHNwYWRlc3VpdCIpLGV0KCJcXHN1YiIsIlxcc3Vic2V0IiksZXQoIlxcc3ViZSIsIlxcc3Vic2V0ZXEiKSxldCgiXFxzdXBlIiwiXFxzdXBzZXRlcSIpLGV0KCJcXFRhdSIsIlxcbWF0aHJte1R9IiksZXQoIlxcdGhldGFzeW0iLCJcXHZhcnRoZXRhIiksZXQoIlxcd2VpZXJwIiwiXFx3cCIpLGV0KCJcXFpldGEiLCJcXG1hdGhybXtafSIpLGV0KCJcXGFyZ21pbiIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7YXJnXFwsbWlufSIpLGV0KCJcXGFyZ21heCIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7YXJnXFwsbWF4fSIpLGV0KCJcXHBsaW0iLCJcXERPVFNCXFxtYXRob3B7XFxvcGVyYXRvcm5hbWV7cGxpbX19XFxsaW1pdHMiKSxldCgiXFxicmEiLCJcXG1hdGhpbm5lcntcXGxhbmdsZXsjMX18fSIpLGV0KCJcXGtldCIsIlxcbWF0aGlubmVye3x7IzF9XFxyYW5nbGV9IiksZXQoIlxcYnJha2V0IiwiXFxtYXRoaW5uZXJ7XFxsYW5nbGV7IzF9XFxyYW5nbGV9IiksZXQoIlxcQnJhIiwiXFxsZWZ0XFxsYW5nbGUjMVxccmlnaHR8IiksZXQoIlxcS2V0IiwiXFxsZWZ0fCMxXFxyaWdodFxccmFuZ2xlIik7dmFyIHBxZT1pPT5zPT57dmFyIHU9cy5jb25zdW1lQXJnKCkudG9rZW5zLGQ9cy5jb25zdW1lQXJnKCkudG9rZW5zLHA9cy5jb25zdW1lQXJnKCkudG9rZW5zLHY9cy5jb25zdW1lQXJnKCkudG9rZW5zLGI9cy5tYWNyb3MuZ2V0KCJ8IikseT1zLm1hY3Jvcy5nZXQoIlxcfCIpO3MubWFjcm9zLmJlZ2luR3JvdXAoKTt2YXIgVD1QPT5SPT57aSYmKFIubWFjcm9zLnNldCgifCIsYikscC5sZW5ndGgmJlIubWFjcm9zLnNldCgiXFx8Iix5KSk7dmFyIEY9UDtpZighUCYmcC5sZW5ndGgpe3ZhciBqPVIuZnV0dXJlKCk7ai50ZXh0PT09InwiJiYoUi5wb3BUb2tlbigpLEY9ITApfXJldHVybnt0b2tlbnM6Rj9wOmQsbnVtQXJnczowfX07cy5tYWNyb3Muc2V0KCJ8IixUKCExKSkscC5sZW5ndGgmJnMubWFjcm9zLnNldCgiXFx8IixUKCEwKSk7dmFyIF89cy5jb25zdW1lQXJnKCkudG9rZW5zLEE9cy5leHBhbmRUb2tlbnMoWy4uLnYsLi4uXywuLi51XSk7cmV0dXJuIHMubWFjcm9zLmVuZEdyb3VwKCkse3Rva2VuczpBLnJldmVyc2UoKSxudW1BcmdzOjB9fTtldCgiXFxicmFAa2V0IixwcWUoITEpKSxldCgiXFxicmFAc2V0IixwcWUoITApKSxldCgiXFxCcmFrZXQiLCJcXGJyYUBrZXR7XFxsZWZ0XFxsYW5nbGV9e1xcLFxcbWlkZGxlXFx2ZXJ0XFwsfXtcXCxcXG1pZGRsZVxcdmVydFxcLH17XFxyaWdodFxccmFuZ2xlfSIpLGV0KCJcXFNldCIsIlxcYnJhQHNldHtcXGxlZnRcXHtcXDp9e1xcO1xcbWlkZGxlXFx2ZXJ0XFw7fXtcXDtcXG1pZGRsZVxcVmVydFxcO317XFw6XFxyaWdodFxcfX0iKSxldCgiXFxzZXQiLCJcXGJyYUBzZXR7XFx7XFwsfXtcXG1pZH17fXtcXCxcXH19IiksZXQoIlxcYW5nbG4iLCJ7XFxhbmdsIG59IiksZXQoIlxcYmx1ZSIsIlxcdGV4dGNvbG9yeyMjNjQ5NWVkfXsjMX0iKSxldCgiXFxvcmFuZ2UiLCJcXHRleHRjb2xvcnsjI2ZmYTUwMH17IzF9IiksZXQoIlxccGluayIsIlxcdGV4dGNvbG9yeyMjZmYwMGFmfXsjMX0iKSxldCgiXFxyZWQiLCJcXHRleHRjb2xvcnsjI2RmMDAzMH17IzF9IiksZXQoIlxcZ3JlZW4iLCJcXHRleHRjb2xvcnsjIzI4YWU3Yn17IzF9IiksZXQoIlxcZ3JheSIsIlxcdGV4dGNvbG9ye2dyYXl9eyMxfSIpLGV0KCJcXHB1cnBsZSIsIlxcdGV4dGNvbG9yeyMjOWQzOGJkfXsjMX0iKSxldCgiXFxibHVlQSIsIlxcdGV4dGNvbG9yeyMjY2NmYWZmfXsjMX0iKSxldCgiXFxibHVlQiIsIlxcdGV4dGNvbG9yeyMjODBmNmZmfXsjMX0iKSxldCgiXFxibHVlQyIsIlxcdGV4dGNvbG9yeyMjNjNkOWVhfXsjMX0iKSxldCgiXFxibHVlRCIsIlxcdGV4dGNvbG9yeyMjMTFhY2NkfXsjMX0iKSxldCgiXFxibHVlRSIsIlxcdGV4dGNvbG9yeyMjMGM3Zjk5fXsjMX0iKSxldCgiXFx0ZWFsQSIsIlxcdGV4dGNvbG9yeyMjOTRmZmY1fXsjMX0iKSxldCgiXFx0ZWFsQiIsIlxcdGV4dGNvbG9yeyMjMjZlZGQ1fXsjMX0iKSxldCgiXFx0ZWFsQyIsIlxcdGV4dGNvbG9yeyMjMDFkMWMxfXsjMX0iKSxldCgiXFx0ZWFsRCIsIlxcdGV4dGNvbG9yeyMjMDFhOTk1fXsjMX0iKSxldCgiXFx0ZWFsRSIsIlxcdGV4dGNvbG9yeyMjMjA4MTcwfXsjMX0iKSxldCgiXFxncmVlbkEiLCJcXHRleHRjb2xvcnsjI2I2ZmZiMH17IzF9IiksZXQoIlxcZ3JlZW5CIiwiXFx0ZXh0Y29sb3J7IyM4YWYyODF9eyMxfSIpLGV0KCJcXGdyZWVuQyIsIlxcdGV4dGNvbG9yeyMjNzRjZjcwfXsjMX0iKSxldCgiXFxncmVlbkQiLCJcXHRleHRjb2xvcnsjIzFmYWI1NH17IzF9IiksZXQoIlxcZ3JlZW5FIiwiXFx0ZXh0Y29sb3J7IyMwZDkyM2Z9eyMxfSIpLGV0KCJcXGdvbGRBIiwiXFx0ZXh0Y29sb3J7IyNmZmQwYTl9eyMxfSIpLGV0KCJcXGdvbGRCIiwiXFx0ZXh0Y29sb3J7IyNmZmJiNzF9eyMxfSIpLGV0KCJcXGdvbGRDIiwiXFx0ZXh0Y29sb3J7IyNmZjljMzl9eyMxfSIpLGV0KCJcXGdvbGREIiwiXFx0ZXh0Y29sb3J7IyNlMDdkMTB9eyMxfSIpLGV0KCJcXGdvbGRFIiwiXFx0ZXh0Y29sb3J7IyNhNzVhMDV9eyMxfSIpLGV0KCJcXHJlZEEiLCJcXHRleHRjb2xvcnsjI2ZjYTlhOX17IzF9IiksZXQoIlxccmVkQiIsIlxcdGV4dGNvbG9yeyMjZmY4NDgyfXsjMX0iKSxldCgiXFxyZWRDIiwiXFx0ZXh0Y29sb3J7IyNmOTY4NWR9eyMxfSIpLGV0KCJcXHJlZEQiLCJcXHRleHRjb2xvcnsjI2U4NGQzOX17IzF9IiksZXQoIlxccmVkRSIsIlxcdGV4dGNvbG9yeyMjYmMyNjEyfXsjMX0iKSxldCgiXFxtYXJvb25BIiwiXFx0ZXh0Y29sb3J7IyNmZmJkZTB9eyMxfSIpLGV0KCJcXG1hcm9vbkIiLCJcXHRleHRjb2xvcnsjI2ZmOTJjNn17IzF9IiksZXQoIlxcbWFyb29uQyIsIlxcdGV4dGNvbG9yeyMjZWQ1ZmE2fXsjMX0iKSxldCgiXFxtYXJvb25EIiwiXFx0ZXh0Y29sb3J7IyNjYTMzN2N9eyMxfSIpLGV0KCJcXG1hcm9vbkUiLCJcXHRleHRjb2xvcnsjIzllMDM0ZX17IzF9IiksZXQoIlxccHVycGxlQSIsIlxcdGV4dGNvbG9yeyMjZGRkN2ZmfXsjMX0iKSxldCgiXFxwdXJwbGVCIiwiXFx0ZXh0Y29sb3J7IyNjNmI5ZmN9eyMxfSIpLGV0KCJcXHB1cnBsZUMiLCJcXHRleHRjb2xvcnsjI2FhODdmZn17IzF9IiksZXQoIlxccHVycGxlRCIsIlxcdGV4dGNvbG9yeyMjNzg1NGFifXsjMX0iKSxldCgiXFxwdXJwbGVFIiwiXFx0ZXh0Y29sb3J7IyM1NDNiNzh9eyMxfSIpLGV0KCJcXG1pbnRBIiwiXFx0ZXh0Y29sb3J7IyNmNWY5ZTh9eyMxfSIpLGV0KCJcXG1pbnRCIiwiXFx0ZXh0Y29sb3J7IyNlZGYyZGZ9eyMxfSIpLGV0KCJcXG1pbnRDIiwiXFx0ZXh0Y29sb3J7IyNlMGU1Y2N9eyMxfSIpLGV0KCJcXGdyYXlBIiwiXFx0ZXh0Y29sb3J7IyNmNmY3Zjd9eyMxfSIpLGV0KCJcXGdyYXlCIiwiXFx0ZXh0Y29sb3J7IyNmMGYxZjJ9eyMxfSIpLGV0KCJcXGdyYXlDIiwiXFx0ZXh0Y29sb3J7IyNlM2U1ZTZ9eyMxfSIpLGV0KCJcXGdyYXlEIiwiXFx0ZXh0Y29sb3J7IyNkNmQ4ZGF9eyMxfSIpLGV0KCJcXGdyYXlFIiwiXFx0ZXh0Y29sb3J7IyNiYWJlYzJ9eyMxfSIpLGV0KCJcXGdyYXlGIiwiXFx0ZXh0Y29sb3J7IyM4ODhkOTN9eyMxfSIpLGV0KCJcXGdyYXlHIiwiXFx0ZXh0Y29sb3J7IyM2MjY1Njl9eyMxfSIpLGV0KCJcXGdyYXlIIiwiXFx0ZXh0Y29sb3J7IyMzYjNlNDB9eyMxfSIpLGV0KCJcXGdyYXlJIiwiXFx0ZXh0Y29sb3J7IyMyMTI0MmN9eyMxfSIpLGV0KCJcXGthQmx1ZSIsIlxcdGV4dGNvbG9yeyMjMzE0NDUzfXsjMX0iKSxldCgiXFxrYUdyZWVuIiwiXFx0ZXh0Y29sb3J7IyM3MUIzMDd9eyMxfSIpO3ZhciBicWU9eyJeIjohMCxfOiEwLCJcXGxpbWl0cyI6ITAsIlxcbm9saW1pdHMiOiEwfTtjbGFzcyBDVnR7Y29uc3RydWN0b3Iocyx1LGQpe3RoaXMuc2V0dGluZ3M9dm9pZCAwLHRoaXMuZXhwYW5zaW9uQ291bnQ9dm9pZCAwLHRoaXMubGV4ZXI9dm9pZCAwLHRoaXMubWFjcm9zPXZvaWQgMCx0aGlzLnN0YWNrPXZvaWQgMCx0aGlzLm1vZGU9dm9pZCAwLHRoaXMuc2V0dGluZ3M9dSx0aGlzLmV4cGFuc2lvbkNvdW50PTAsdGhpcy5mZWVkKHMpLHRoaXMubWFjcm9zPW5ldyBFVnQoVFZ0LHUubWFjcm9zKSx0aGlzLm1vZGU9ZCx0aGlzLnN0YWNrPVtdfWZlZWQocyl7dGhpcy5sZXhlcj1uZXcgaHFlKHMsdGhpcy5zZXR0aW5ncyl9c3dpdGNoTW9kZShzKXt0aGlzLm1vZGU9c31iZWdpbkdyb3VwKCl7dGhpcy5tYWNyb3MuYmVnaW5Hcm91cCgpfWVuZEdyb3VwKCl7dGhpcy5tYWNyb3MuZW5kR3JvdXAoKX1lbmRHcm91cHMoKXt0aGlzLm1hY3Jvcy5lbmRHcm91cHMoKX1mdXR1cmUoKXtyZXR1cm4gdGhpcy5zdGFjay5sZW5ndGg9PT0wJiZ0aGlzLnB1c2hUb2tlbih0aGlzLmxleGVyLmxleCgpKSx0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdfXBvcFRva2VuKCl7cmV0dXJuIHRoaXMuZnV0dXJlKCksdGhpcy5zdGFjay5wb3AoKX1wdXNoVG9rZW4ocyl7dGhpcy5zdGFjay5wdXNoKHMpfXB1c2hUb2tlbnMocyl7dGhpcy5zdGFjay5wdXNoKC4uLnMpfXNjYW5Bcmd1bWVudChzKXt2YXIgdSxkLHA7aWYocyl7aWYodGhpcy5jb25zdW1lU3BhY2VzKCksdGhpcy5mdXR1cmUoKS50ZXh0IT09IlsiKXJldHVybiBudWxsO3U9dGhpcy5wb3BUb2tlbigpLHt0b2tlbnM6cCxlbmQ6ZH09dGhpcy5jb25zdW1lQXJnKFsiXSJdKX1lbHNlKHt0b2tlbnM6cCxzdGFydDp1LGVuZDpkfT10aGlzLmNvbnN1bWVBcmcoKSk7cmV0dXJuIHRoaXMucHVzaFRva2VuKG5ldyBVNCgiRU9GIixkLmxvYykpLHRoaXMucHVzaFRva2VucyhwKSx1LnJhbmdlKGQsIiIpfWNvbnN1bWVTcGFjZXMoKXtmb3IoOzspe3ZhciBzPXRoaXMuZnV0dXJlKCk7aWYocy50ZXh0PT09IiAiKXRoaXMuc3RhY2sucG9wKCk7ZWxzZSBicmVha319Y29uc3VtZUFyZyhzKXt2YXIgdT1bXSxkPXMmJnMubGVuZ3RoPjA7ZHx8dGhpcy5jb25zdW1lU3BhY2VzKCk7dmFyIHA9dGhpcy5mdXR1cmUoKSx2LGI9MCx5PTA7ZG97aWYodj10aGlzLnBvcFRva2VuKCksdS5wdXNoKHYpLHYudGV4dD09PSJ7IikrK2I7ZWxzZSBpZih2LnRleHQ9PT0ifSIpe2lmKC0tYixiPT09LTEpdGhyb3cgbmV3IENpKCJFeHRyYSB9Iix2KX1lbHNlIGlmKHYudGV4dD09PSJFT0YiKXRocm93IG5ldyBDaSgiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgaW4gYSBtYWNybyBhcmd1bWVudCwgZXhwZWN0ZWQgJyIrKHMmJmQ/c1t5XToifSIpKyInIix2KTtpZihzJiZkKWlmKChiPT09MHx8Yj09PTEmJnNbeV09PT0ieyIpJiZ2LnRleHQ9PT1zW3ldKXtpZigrK3kseT09PXMubGVuZ3RoKXt1LnNwbGljZSgteSx5KTticmVha319ZWxzZSB5PTB9d2hpbGUoYiE9PTB8fGQpO3JldHVybiBwLnRleHQ9PT0ieyImJnVbdS5sZW5ndGgtMV0udGV4dD09PSJ9IiYmKHUucG9wKCksdS5zaGlmdCgpKSx1LnJldmVyc2UoKSx7dG9rZW5zOnUsc3RhcnQ6cCxlbmQ6dn19Y29uc3VtZUFyZ3Mocyx1KXtpZih1KXtpZih1Lmxlbmd0aCE9PXMrMSl0aHJvdyBuZXcgQ2koIlRoZSBsZW5ndGggb2YgZGVsaW1pdGVycyBkb2Vzbid0IG1hdGNoIHRoZSBudW1iZXIgb2YgYXJncyEiKTtmb3IodmFyIGQ9dVswXSxwPTA7cDxkLmxlbmd0aDtwKyspe3ZhciB2PXRoaXMucG9wVG9rZW4oKTtpZihkW3BdIT09di50ZXh0KXRocm93IG5ldyBDaSgiVXNlIG9mIHRoZSBtYWNybyBkb2Vzbid0IG1hdGNoIGl0cyBkZWZpbml0aW9uIix2KX19Zm9yKHZhciBiPVtdLHk9MDt5PHM7eSsrKWIucHVzaCh0aGlzLmNvbnN1bWVBcmcodSYmdVt5KzFdKS50b2tlbnMpO3JldHVybiBifWV4cGFuZE9uY2Uocyl7dmFyIHU9dGhpcy5wb3BUb2tlbigpLGQ9dS50ZXh0LHA9dS5ub2V4cGFuZD9udWxsOnRoaXMuX2dldEV4cGFuc2lvbihkKTtpZihwPT1udWxsfHxzJiZwLnVuZXhwYW5kYWJsZSl7aWYocyYmcD09bnVsbCYmZFswXT09PSJcXCImJiF0aGlzLmlzRGVmaW5lZChkKSl0aHJvdyBuZXcgQ2koIlVuZGVmaW5lZCBjb250cm9sIHNlcXVlbmNlOiAiK2QpO3JldHVybiB0aGlzLnB1c2hUb2tlbih1KSwhMX1pZih0aGlzLmV4cGFuc2lvbkNvdW50KyssdGhpcy5leHBhbnNpb25Db3VudD50aGlzLnNldHRpbmdzLm1heEV4cGFuZCl0aHJvdyBuZXcgQ2koIlRvbyBtYW55IGV4cGFuc2lvbnM6IGluZmluaXRlIGxvb3Agb3IgbmVlZCB0byBpbmNyZWFzZSBtYXhFeHBhbmQgc2V0dGluZyIpO3ZhciB2PXAudG9rZW5zLGI9dGhpcy5jb25zdW1lQXJncyhwLm51bUFyZ3MscC5kZWxpbWl0ZXJzKTtpZihwLm51bUFyZ3Mpe3Y9di5zbGljZSgpO2Zvcih2YXIgeT12Lmxlbmd0aC0xO3k+PTA7LS15KXt2YXIgVD12W3ldO2lmKFQudGV4dD09PSIjIil7aWYoeT09PTApdGhyb3cgbmV3IENpKCJJbmNvbXBsZXRlIHBsYWNlaG9sZGVyIGF0IGVuZCBvZiBtYWNybyBib2R5IixUKTtpZihUPXZbLS15XSxULnRleHQ9PT0iIyIpdi5zcGxpY2UoeSsxLDEpO2Vsc2UgaWYoL15bMS05XSQvLnRlc3QoVC50ZXh0KSl2LnNwbGljZSh5LDIsLi4uYlsrVC50ZXh0LTFdKTtlbHNlIHRocm93IG5ldyBDaSgiTm90IGEgdmFsaWQgYXJndW1lbnQgbnVtYmVyIixUKX19fXJldHVybiB0aGlzLnB1c2hUb2tlbnModiksdi5sZW5ndGh9ZXhwYW5kQWZ0ZXJGdXR1cmUoKXtyZXR1cm4gdGhpcy5leHBhbmRPbmNlKCksdGhpcy5mdXR1cmUoKX1leHBhbmROZXh0VG9rZW4oKXtmb3IoOzspaWYodGhpcy5leHBhbmRPbmNlKCk9PT0hMSl7dmFyIHM9dGhpcy5zdGFjay5wb3AoKTtyZXR1cm4gcy50cmVhdEFzUmVsYXgmJihzLnRleHQ9IlxccmVsYXgiKSxzfXRocm93IG5ldyBFcnJvcn1leHBhbmRNYWNybyhzKXtyZXR1cm4gdGhpcy5tYWNyb3MuaGFzKHMpP3RoaXMuZXhwYW5kVG9rZW5zKFtuZXcgVTQocyldKTp2b2lkIDB9ZXhwYW5kVG9rZW5zKHMpe3ZhciB1PVtdLGQ9dGhpcy5zdGFjay5sZW5ndGg7Zm9yKHRoaXMucHVzaFRva2VucyhzKTt0aGlzLnN0YWNrLmxlbmd0aD5kOylpZih0aGlzLmV4cGFuZE9uY2UoITApPT09ITEpe3ZhciBwPXRoaXMuc3RhY2sucG9wKCk7cC50cmVhdEFzUmVsYXgmJihwLm5vZXhwYW5kPSExLHAudHJlYXRBc1JlbGF4PSExKSx1LnB1c2gocCl9cmV0dXJuIHV9ZXhwYW5kTWFjcm9Bc1RleHQocyl7dmFyIHU9dGhpcy5leHBhbmRNYWNybyhzKTtyZXR1cm4gdSYmdS5tYXAoZD0+ZC50ZXh0KS5qb2luKCIiKX1fZ2V0RXhwYW5zaW9uKHMpe3ZhciB1PXRoaXMubWFjcm9zLmdldChzKTtpZih1PT1udWxsKXJldHVybiB1O2lmKHMubGVuZ3RoPT09MSl7dmFyIGQ9dGhpcy5sZXhlci5jYXRjb2Rlc1tzXTtpZihkIT1udWxsJiZkIT09MTMpcmV0dXJufXZhciBwPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3UodGhpcyk6dTtpZih0eXBlb2YgcD09InN0cmluZyIpe3ZhciB2PTA7aWYocC5pbmRleE9mKCIjIikhPT0tMSlmb3IodmFyIGI9cC5yZXBsYWNlKC8jIy9nLCIiKTtiLmluZGV4T2YoIiMiKyh2KzEpKSE9PS0xOykrK3Y7Zm9yKHZhciB5PW5ldyBocWUocCx0aGlzLnNldHRpbmdzKSxUPVtdLF89eS5sZXgoKTtfLnRleHQhPT0iRU9GIjspVC5wdXNoKF8pLF89eS5sZXgoKTtULnJldmVyc2UoKTt2YXIgQT17dG9rZW5zOlQsbnVtQXJnczp2fTtyZXR1cm4gQX1yZXR1cm4gcH1pc0RlZmluZWQocyl7cmV0dXJuIHRoaXMubWFjcm9zLmhhcyhzKXx8TDkuaGFzT3duUHJvcGVydHkocyl8fFVsLm1hdGguaGFzT3duUHJvcGVydHkocyl8fFVsLnRleHQuaGFzT3duUHJvcGVydHkocyl8fGJxZS5oYXNPd25Qcm9wZXJ0eShzKX1pc0V4cGFuZGFibGUocyl7dmFyIHU9dGhpcy5tYWNyb3MuZ2V0KHMpO3JldHVybiB1IT1udWxsP3R5cGVvZiB1PT0ic3RyaW5nInx8dHlwZW9mIHU9PSJmdW5jdGlvbiJ8fCF1LnVuZXhwYW5kYWJsZTpMOS5oYXNPd25Qcm9wZXJ0eShzKSYmIUw5W3NdLnByaW1pdGl2ZX19dmFyIG1xZT0vXlvigorigovigozigo3igo7igoDigoHigoLigoPigoTigoXigobigofigojigonigpDigpHigpXhtaLisbzigpbigpfigpjigpnigpLigprhtaPigpvigpzhtaThtaXigpPhtabhtafhtajhtanhtapdLyxUUT1PYmplY3QuZnJlZXplKHsi4oKKIjoiKyIsIuKCiyI6Ii0iLCLigowiOiI9Iiwi4oKNIjoiKCIsIuKCjiI6IikiLCLigoAiOiIwIiwi4oKBIjoiMSIsIuKCgiI6IjIiLCLigoMiOiIzIiwi4oKEIjoiNCIsIuKChSI6IjUiLCLigoYiOiI2Iiwi4oKHIjoiNyIsIuKCiCI6IjgiLCLigokiOiI5Iiwi4oKQIjoiYSIsIuKCkSI6ImUiLCLigpUiOiJoIiwi4bWiIjoiaSIsIuKxvCI6ImoiLCLigpYiOiJrIiwi4oKXIjoibCIsIuKCmCI6Im0iLCLigpkiOiJuIiwi4oKSIjoibyIsIuKCmiI6InAiLCLhtaMiOiJyIiwi4oKbIjoicyIsIuKCnCI6InQiLCLhtaQiOiJ1Iiwi4bWlIjoidiIsIuKCkyI6IngiLCLhtaYiOiLOsiIsIuG1pyI6Is6zIiwi4bWoIjoiz4EiLCLhtakiOiLPlSIsIuG1qiI6Is+HIiwi4oG6IjoiKyIsIuKBuyI6Ii0iLCLigbwiOiI9Iiwi4oG9IjoiKCIsIuKBviI6IikiLCLigbAiOiIwIiwiwrkiOiIxIiwiwrIiOiIyIiwiwrMiOiIzIiwi4oG0IjoiNCIsIuKBtSI6IjUiLCLigbYiOiI2Iiwi4oG3IjoiNyIsIuKBuCI6IjgiLCLigbkiOiI5Iiwi4bSsIjoiQSIsIuG0riI6IkIiLCLhtLAiOiJEIiwi4bSxIjoiRSIsIuG0syI6IkciLCLhtLQiOiJIIiwi4bS1IjoiSSIsIuG0tiI6IkoiLCLhtLciOiJLIiwi4bS4IjoiTCIsIuG0uSI6Ik0iLCLhtLoiOiJOIiwi4bS8IjoiTyIsIuG0viI6IlAiLCLhtL8iOiJSIiwi4bWAIjoiVCIsIuG1gSI6IlUiLCLisb0iOiJWIiwi4bWCIjoiVyIsIuG1gyI6ImEiLCLhtYciOiJiIiwi4bacIjoiYyIsIuG1iCI6ImQiLCLhtYkiOiJlIiwi4bagIjoiZiIsIuG1jSI6ImciLMqwOiJoIiwi4oGxIjoiaSIsyrI6ImoiLCLhtY8iOiJrIizLoToibCIsIuG1kCI6Im0iLOKBvzoibiIsIuG1kiI6Im8iLCLhtZYiOiJwIizKszoiciIsy6I6InMiLCLhtZciOiJ0Iiwi4bWYIjoidSIsIuG1myI6InYiLMq3OiJ3IizLozoieCIsyrg6InkiLCLhtrsiOiJ6Iiwi4bWdIjoizrIiLCLhtZ4iOiLOsyIsIuG1nyI6Is60Iiwi4bWgIjoiz5UiLCLhtaEiOiLPhyIsIuG2vyI6Is64In0pLFBiZT17IsyBIjp7dGV4dDoiXFwnIixtYXRoOiJcXGFjdXRlIn0sIsyAIjp7dGV4dDoiXFxgIixtYXRoOiJcXGdyYXZlIn0sIsyIIjp7dGV4dDonXFwiJyxtYXRoOiJcXGRkb3QifSwizIMiOnt0ZXh0OiJcXH4iLG1hdGg6IlxcdGlsZGUifSwizIQiOnt0ZXh0OiJcXD0iLG1hdGg6IlxcYmFyIn0sIsyGIjp7dGV4dDoiXFx1IixtYXRoOiJcXGJyZXZlIn0sIsyMIjp7dGV4dDoiXFx2IixtYXRoOiJcXGNoZWNrIn0sIsyCIjp7dGV4dDoiXFxeIixtYXRoOiJcXGhhdCJ9LCLMhyI6e3RleHQ6IlxcLiIsbWF0aDoiXFxkb3QifSwizIoiOnt0ZXh0OiJcXHIiLG1hdGg6IlxcbWF0aHJpbmcifSwizIsiOnt0ZXh0OiJcXEgifSwizKciOnt0ZXh0OiJcXGMifX0sdnFlPXvDoToiYcyBIizDoDoiYcyAIizDpDoiYcyIIizHnzoiYcyIzIQiLMOjOiJhzIMiLMSBOiJhzIQiLMSDOiJhzIYiLOG6rzoiYcyGzIEiLOG6sToiYcyGzIAiLOG6tToiYcyGzIMiLMeOOiJhzIwiLMOiOiJhzIIiLOG6pToiYcyCzIEiLOG6pzoiYcyCzIAiLOG6qzoiYcyCzIMiLMinOiJhzIciLMehOiJhzIfMhCIsw6U6ImHMiiIsx7s6ImHMisyBIizhuIM6ImLMhyIsxIc6ImPMgSIs4biJOiJjzKfMgSIsxI06ImPMjCIsxIk6ImPMgiIsxIs6ImPMhyIsw6c6ImPMpyIsxI86ImTMjCIs4biLOiJkzIciLOG4kToiZMynIizDqToiZcyBIizDqDoiZcyAIizDqzoiZcyIIizhur06ImXMgyIsxJM6ImXMhCIs4biXOiJlzITMgSIs4biVOiJlzITMgCIsxJU6ImXMhiIs4bidOiJlzKfMhiIsxJs6ImXMjCIsw6o6ImXMgiIs4bq/OiJlzILMgSIs4buBOiJlzILMgCIs4buFOiJlzILMgyIsxJc6ImXMhyIsyKk6ImXMpyIs4bifOiJmzIciLMe1OiJnzIEiLOG4oToiZ8yEIizEnzoiZ8yGIizHpzoiZ8yMIizEnToiZ8yCIizEoToiZ8yHIizEozoiZ8ynIizhuKc6ImjMiCIsyJ86ImjMjCIsxKU6ImjMgiIs4bijOiJozIciLOG4qToiaMynIizDrToiacyBIizDrDoiacyAIizDrzoiacyIIizhuK86ImnMiMyBIizEqToiacyDIizEqzoiacyEIizErToiacyGIizHkDoiacyMIizDrjoiacyCIizHsDoiasyMIizEtToiasyCIizhuLE6ImvMgSIsx6k6ImvMjCIsxLc6ImvMpyIsxLo6ImzMgSIsxL46ImzMjCIsxLw6ImzMpyIs4bi/OiJtzIEiLOG5gToibcyHIizFhDoibsyBIizHuToibsyAIizDsToibsyDIizFiDoibsyMIizhuYU6Im7MhyIsxYY6Im7MpyIsw7M6Im/MgSIsw7I6Im/MgCIsw7Y6Im/MiCIsyKs6Im/MiMyEIizDtToib8yDIizhuY06Im/Mg8yBIizhuY86Im/Mg8yIIizIrToib8yDzIQiLMWNOiJvzIQiLOG5kzoib8yEzIEiLOG5kToib8yEzIAiLMWPOiJvzIYiLMeSOiJvzIwiLMO0OiJvzIIiLOG7kToib8yCzIEiLOG7kzoib8yCzIAiLOG7lzoib8yCzIMiLMivOiJvzIciLMixOiJvzIfMhCIsxZE6Im/MiyIs4bmVOiJwzIEiLOG5lzoicMyHIizFlToicsyBIizFmToicsyMIizhuZk6InLMhyIsxZc6InLMpyIsxZs6InPMgSIs4bmlOiJzzIHMhyIsxaE6InPMjCIs4bmnOiJzzIzMhyIsxZ06InPMgiIs4bmhOiJzzIciLMWfOiJzzKciLOG6lzoidMyIIizFpToidMyMIizhuas6InTMhyIsxaM6InTMpyIsw7o6InXMgSIsw7k6InXMgCIsw7w6InXMiCIsx5g6InXMiMyBIizHnDoidcyIzIAiLMeWOiJ1zIjMhCIsx5o6InXMiMyMIizFqToidcyDIizhubk6InXMg8yBIizFqzoidcyEIizhubs6InXMhMyIIizFrToidcyGIizHlDoidcyMIizDuzoidcyCIizFrzoidcyKIizFsToidcyLIizhub06InbMgyIs4bqDOiJ3zIEiLOG6gToid8yAIizhuoU6InfMiCIsxbU6InfMgiIs4bqHOiJ3zIciLOG6mDoid8yKIizhuo06InjMiCIs4bqLOiJ4zIciLMO9OiJ5zIEiLOG7szoiecyAIizDvzoiecyIIizhu7k6InnMgyIsyLM6InnMhCIsxbc6InnMgiIs4bqPOiJ5zIciLOG6mToiecyKIizFujoiesyBIizFvjoiesyMIizhupE6InrMgiIsxbw6InrMhyIsw4E6IkHMgSIsw4A6IkHMgCIsw4Q6IkHMiCIsx546IkHMiMyEIizDgzoiQcyDIizEgDoiQcyEIizEgjoiQcyGIizhuq46IkHMhsyBIizhurA6IkHMhsyAIizhurQ6IkHMhsyDIizHjToiQcyMIizDgjoiQcyCIizhuqQ6IkHMgsyBIizhuqY6IkHMgsyAIizhuqo6IkHMgsyDIizIpjoiQcyHIizHoDoiQcyHzIQiLMOFOiJBzIoiLMe6OiJBzIrMgSIs4biCOiJCzIciLMSGOiJDzIEiLOG4iDoiQ8ynzIEiLMSMOiJDzIwiLMSIOiJDzIIiLMSKOiJDzIciLMOHOiJDzKciLMSOOiJEzIwiLOG4ijoiRMyHIizhuJA6IkTMpyIsw4k6IkXMgSIsw4g6IkXMgCIsw4s6IkXMiCIs4bq8OiJFzIMiLMSSOiJFzIQiLOG4ljoiRcyEzIEiLOG4lDoiRcyEzIAiLMSUOiJFzIYiLOG4nDoiRcynzIYiLMSaOiJFzIwiLMOKOiJFzIIiLOG6vjoiRcyCzIEiLOG7gDoiRcyCzIAiLOG7hDoiRcyCzIMiLMSWOiJFzIciLMioOiJFzKciLOG4njoiRsyHIizHtDoiR8yBIizhuKA6IkfMhCIsxJ46IkfMhiIsx6Y6IkfMjCIsxJw6IkfMgiIsxKA6IkfMhyIsxKI6IkfMpyIs4bimOiJIzIgiLMieOiJIzIwiLMSkOiJIzIIiLOG4ojoiSMyHIizhuKg6IkjMpyIsw406IknMgSIsw4w6IknMgCIsw486IknMiCIs4biuOiJJzIjMgSIsxKg6IknMgyIsxKo6IknMhCIsxKw6IknMhiIsx486IknMjCIsw446IknMgiIsxLA6IknMhyIsxLQ6IkrMgiIs4biwOiJLzIEiLMeoOiJLzIwiLMS2OiJLzKciLMS5OiJMzIEiLMS9OiJMzIwiLMS7OiJMzKciLOG4vjoiTcyBIizhuYA6Ik3MhyIsxYM6Ik7MgSIsx7g6Ik7MgCIsw5E6Ik7MgyIsxYc6Ik7MjCIs4bmEOiJOzIciLMWFOiJOzKciLMOTOiJPzIEiLMOSOiJPzIAiLMOWOiJPzIgiLMiqOiJPzIjMhCIsw5U6Ik/MgyIs4bmMOiJPzIPMgSIs4bmOOiJPzIPMiCIsyKw6Ik/Mg8yEIizFjDoiT8yEIizhuZI6Ik/MhMyBIizhuZA6Ik/MhMyAIizFjjoiT8yGIizHkToiT8yMIizDlDoiT8yCIizhu5A6Ik/MgsyBIizhu5I6Ik/MgsyAIizhu5Y6Ik/MgsyDIizIrjoiT8yHIizIsDoiT8yHzIQiLMWQOiJPzIsiLOG5lDoiUMyBIizhuZY6IlDMhyIsxZQ6IlLMgSIsxZg6IlLMjCIs4bmYOiJSzIciLMWWOiJSzKciLMWaOiJTzIEiLOG5pDoiU8yBzIciLMWgOiJTzIwiLOG5pjoiU8yMzIciLMWcOiJTzIIiLOG5oDoiU8yHIizFnjoiU8ynIizFpDoiVMyMIizhuao6IlTMhyIsxaI6IlTMpyIsw5o6IlXMgSIsw5k6IlXMgCIsw5w6IlXMiCIsx5c6IlXMiMyBIizHmzoiVcyIzIAiLMeVOiJVzIjMhCIsx5k6IlXMiMyMIizFqDoiVcyDIizhubg6IlXMg8yBIizFqjoiVcyEIizhubo6IlXMhMyIIizFrDoiVcyGIizHkzoiVcyMIizDmzoiVcyCIizFrjoiVcyKIizFsDoiVcyLIizhubw6IlbMgyIs4bqCOiJXzIEiLOG6gDoiV8yAIizhuoQ6IlfMiCIsxbQ6IlfMgiIs4bqGOiJXzIciLOG6jDoiWMyIIizhuoo6IljMhyIsw506IlnMgSIs4buyOiJZzIAiLMW4OiJZzIgiLOG7uDoiWcyDIizIsjoiWcyEIizFtjoiWcyCIizhuo46IlnMhyIsxbk6IlrMgSIsxb06IlrMjCIs4bqQOiJazIIiLMW7OiJazIciLM6sOiLOscyBIizhvbA6Is6xzIAiLOG+sToizrHMhCIs4b6wOiLOscyGIizOrToizrXMgSIs4b2yOiLOtcyAIizOrjoizrfMgSIs4b20OiLOt8yAIizOrzoizrnMgSIs4b22OiLOucyAIizPijoizrnMiCIszpA6Is65zIjMgSIs4b+SOiLOucyIzIAiLOG/kToizrnMhCIs4b+QOiLOucyGIizPjDoizr/MgSIs4b24OiLOv8yAIizPjToiz4XMgSIs4b26OiLPhcyAIizPizoiz4XMiCIszrA6Is+FzIjMgSIs4b+iOiLPhcyIzIAiLOG/oToiz4XMhCIs4b+gOiLPhcyGIizPjjoiz4nMgSIs4b28OiLPicyAIizOjjoizqXMgSIs4b+qOiLOpcyAIizOqzoizqXMiCIs4b+pOiLOpcyEIizhv6g6Is6lzIYiLM6POiLOqcyBIizhv7o6Is6pzIAifTtjbGFzcyBnUntjb25zdHJ1Y3RvcihzLHUpe3RoaXMubW9kZT12b2lkIDAsdGhpcy5ndWxsZXQ9dm9pZCAwLHRoaXMuc2V0dGluZ3M9dm9pZCAwLHRoaXMubGVmdHJpZ2h0RGVwdGg9dm9pZCAwLHRoaXMubmV4dFRva2VuPXZvaWQgMCx0aGlzLm1vZGU9Im1hdGgiLHRoaXMuZ3VsbGV0PW5ldyBDVnQocyx1LHRoaXMubW9kZSksdGhpcy5zZXR0aW5ncz11LHRoaXMubGVmdHJpZ2h0RGVwdGg9MH1leHBlY3Qocyx1KXtpZih1PT09dm9pZCAwJiYodT0hMCksdGhpcy5mZXRjaCgpLnRleHQhPT1zKXRocm93IG5ldyBDaSgiRXhwZWN0ZWQgJyIrcysiJywgZ290ICciK3RoaXMuZmV0Y2goKS50ZXh0KyInIix0aGlzLmZldGNoKCkpO3UmJnRoaXMuY29uc3VtZSgpfWNvbnN1bWUoKXt0aGlzLm5leHRUb2tlbj1udWxsfWZldGNoKCl7cmV0dXJuIHRoaXMubmV4dFRva2VuPT1udWxsJiYodGhpcy5uZXh0VG9rZW49dGhpcy5ndWxsZXQuZXhwYW5kTmV4dFRva2VuKCkpLHRoaXMubmV4dFRva2VufXN3aXRjaE1vZGUocyl7dGhpcy5tb2RlPXMsdGhpcy5ndWxsZXQuc3dpdGNoTW9kZShzKX1wYXJzZSgpe3RoaXMuc2V0dGluZ3MuZ2xvYmFsR3JvdXB8fHRoaXMuZ3VsbGV0LmJlZ2luR3JvdXAoKSx0aGlzLnNldHRpbmdzLmNvbG9ySXNUZXh0Q29sb3ImJnRoaXMuZ3VsbGV0Lm1hY3Jvcy5zZXQoIlxcY29sb3IiLCJcXHRleHRjb2xvciIpO3RyeXt2YXIgcz10aGlzLnBhcnNlRXhwcmVzc2lvbighMSk7cmV0dXJuIHRoaXMuZXhwZWN0KCJFT0YiKSx0aGlzLnNldHRpbmdzLmdsb2JhbEdyb3VwfHx0aGlzLmd1bGxldC5lbmRHcm91cCgpLHN9ZmluYWxseXt0aGlzLmd1bGxldC5lbmRHcm91cHMoKX19c3VicGFyc2Uocyl7dmFyIHU9dGhpcy5uZXh0VG9rZW47dGhpcy5jb25zdW1lKCksdGhpcy5ndWxsZXQucHVzaFRva2VuKG5ldyBVNCgifSIpKSx0aGlzLmd1bGxldC5wdXNoVG9rZW5zKHMpO3ZhciBkPXRoaXMucGFyc2VFeHByZXNzaW9uKCExKTtyZXR1cm4gdGhpcy5leHBlY3QoIn0iKSx0aGlzLm5leHRUb2tlbj11LGR9cGFyc2VFeHByZXNzaW9uKHMsdSl7Zm9yKHZhciBkPVtdOzspe3RoaXMubW9kZT09PSJtYXRoIiYmdGhpcy5jb25zdW1lU3BhY2VzKCk7dmFyIHA9dGhpcy5mZXRjaCgpO2lmKGdSLmVuZE9mRXhwcmVzc2lvbi5pbmRleE9mKHAudGV4dCkhPT0tMXx8dSYmcC50ZXh0PT09dXx8cyYmTDlbcC50ZXh0XSYmTDlbcC50ZXh0XS5pbmZpeClicmVhazt2YXIgdj10aGlzLnBhcnNlQXRvbSh1KTtpZih2KXtpZih2LnR5cGU9PT0iaW50ZXJuYWwiKWNvbnRpbnVlfWVsc2UgYnJlYWs7ZC5wdXNoKHYpfXJldHVybiB0aGlzLm1vZGU9PT0idGV4dCImJnRoaXMuZm9ybUxpZ2F0dXJlcyhkKSx0aGlzLmhhbmRsZUluZml4Tm9kZXMoZCl9aGFuZGxlSW5maXhOb2RlcyhzKXtmb3IodmFyIHU9LTEsZCxwPTA7cDxzLmxlbmd0aDtwKyspaWYoc1twXS50eXBlPT09ImluZml4Iil7aWYodSE9PS0xKXRocm93IG5ldyBDaSgib25seSBvbmUgaW5maXggb3BlcmF0b3IgcGVyIGdyb3VwIixzW3BdLnRva2VuKTt1PXAsZD1zW3BdLnJlcGxhY2VXaXRofWlmKHUhPT0tMSYmZCl7dmFyIHYsYix5PXMuc2xpY2UoMCx1KSxUPXMuc2xpY2UodSsxKTt5Lmxlbmd0aD09PTEmJnlbMF0udHlwZT09PSJvcmRncm91cCI/dj15WzBdOnY9e3R5cGU6Im9yZGdyb3VwIixtb2RlOnRoaXMubW9kZSxib2R5Onl9LFQubGVuZ3RoPT09MSYmVFswXS50eXBlPT09Im9yZGdyb3VwIj9iPVRbMF06Yj17dHlwZToib3JkZ3JvdXAiLG1vZGU6dGhpcy5tb2RlLGJvZHk6VH07dmFyIF87cmV0dXJuIGQ9PT0iXFxcXGFib3ZlZnJhYyI/Xz10aGlzLmNhbGxGdW5jdGlvbihkLFt2LHNbdV0sYl0sW10pOl89dGhpcy5jYWxsRnVuY3Rpb24oZCxbdixiXSxbXSksW19dfWVsc2UgcmV0dXJuIHN9aGFuZGxlU3VwU3Vic2NyaXB0KHMpe3ZhciB1PXRoaXMuZmV0Y2goKSxkPXUudGV4dDt0aGlzLmNvbnN1bWUoKSx0aGlzLmNvbnN1bWVTcGFjZXMoKTt2YXIgcD10aGlzLnBhcnNlR3JvdXAocyk7aWYoIXApdGhyb3cgbmV3IENpKCJFeHBlY3RlZCBncm91cCBhZnRlciAnIitkKyInIix1KTtyZXR1cm4gcH1mb3JtYXRVbnN1cHBvcnRlZENtZChzKXtmb3IodmFyIHU9W10sZD0wO2Q8cy5sZW5ndGg7ZCsrKXUucHVzaCh7dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsdGV4dDpzW2RdfSk7dmFyIHA9e3R5cGU6InRleHQiLG1vZGU6dGhpcy5tb2RlLGJvZHk6dX0sdj17dHlwZToiY29sb3IiLG1vZGU6dGhpcy5tb2RlLGNvbG9yOnRoaXMuc2V0dGluZ3MuZXJyb3JDb2xvcixib2R5OltwXX07cmV0dXJuIHZ9cGFyc2VBdG9tKHMpe3ZhciB1PXRoaXMucGFyc2VHcm91cCgiYXRvbSIscyk7aWYodGhpcy5tb2RlPT09InRleHQiKXJldHVybiB1O2Zvcih2YXIgZCxwOzspe3RoaXMuY29uc3VtZVNwYWNlcygpO3ZhciB2PXRoaXMuZmV0Y2goKTtpZih2LnRleHQ9PT0iXFxsaW1pdHMifHx2LnRleHQ9PT0iXFxub2xpbWl0cyIpe2lmKHUmJnUudHlwZT09PSJvcCIpe3ZhciBiPXYudGV4dD09PSJcXGxpbWl0cyI7dS5saW1pdHM9Yix1LmFsd2F5c0hhbmRsZVN1cFN1Yj0hMH1lbHNlIGlmKHUmJnUudHlwZT09PSJvcGVyYXRvcm5hbWUiKXUuYWx3YXlzSGFuZGxlU3VwU3ViJiYodS5saW1pdHM9di50ZXh0PT09IlxcbGltaXRzIik7ZWxzZSB0aHJvdyBuZXcgQ2koIkxpbWl0IGNvbnRyb2xzIG11c3QgZm9sbG93IGEgbWF0aCBvcGVyYXRvciIsdik7dGhpcy5jb25zdW1lKCl9ZWxzZSBpZih2LnRleHQ9PT0iXiIpe2lmKGQpdGhyb3cgbmV3IENpKCJEb3VibGUgc3VwZXJzY3JpcHQiLHYpO2Q9dGhpcy5oYW5kbGVTdXBTdWJzY3JpcHQoInN1cGVyc2NyaXB0Iil9ZWxzZSBpZih2LnRleHQ9PT0iXyIpe2lmKHApdGhyb3cgbmV3IENpKCJEb3VibGUgc3Vic2NyaXB0Iix2KTtwPXRoaXMuaGFuZGxlU3VwU3Vic2NyaXB0KCJzdWJzY3JpcHQiKX1lbHNlIGlmKHYudGV4dD09PSInIil7aWYoZCl0aHJvdyBuZXcgQ2koIkRvdWJsZSBzdXBlcnNjcmlwdCIsdik7dmFyIHk9e3R5cGU6InRleHRvcmQiLG1vZGU6dGhpcy5tb2RlLHRleHQ6IlxccHJpbWUifSxUPVt5XTtmb3IodGhpcy5jb25zdW1lKCk7dGhpcy5mZXRjaCgpLnRleHQ9PT0iJyI7KVQucHVzaCh5KSx0aGlzLmNvbnN1bWUoKTt0aGlzLmZldGNoKCkudGV4dD09PSJeIiYmVC5wdXNoKHRoaXMuaGFuZGxlU3VwU3Vic2NyaXB0KCJzdXBlcnNjcmlwdCIpKSxkPXt0eXBlOiJvcmRncm91cCIsbW9kZTp0aGlzLm1vZGUsYm9keTpUfX1lbHNlIGlmKFRRW3YudGV4dF0pe3ZhciBfPVRRW3YudGV4dF0sQT1tcWUudGVzdCh2LnRleHQpO2Zvcih0aGlzLmNvbnN1bWUoKTs7KXt2YXIgUD10aGlzLmZldGNoKCkudGV4dDtpZighVFFbUF18fG1xZS50ZXN0KFApIT09QSlicmVhazt0aGlzLmNvbnN1bWUoKSxfKz1UUVtQXX12YXIgUj1uZXcgZ1IoXyx0aGlzLnNldHRpbmdzKS5wYXJzZSgpO0E/cD17dHlwZToib3JkZ3JvdXAiLG1vZGU6Im1hdGgiLGJvZHk6Un06ZD17dHlwZToib3JkZ3JvdXAiLG1vZGU6Im1hdGgiLGJvZHk6Un19ZWxzZSBicmVha31yZXR1cm4gZHx8cD97dHlwZToic3Vwc3ViIixtb2RlOnRoaXMubW9kZSxiYXNlOnUsc3VwOmQsc3ViOnB9OnV9cGFyc2VGdW5jdGlvbihzLHUpe3ZhciBkPXRoaXMuZmV0Y2goKSxwPWQudGV4dCx2PUw5W3BdO2lmKCF2KXJldHVybiBudWxsO2lmKHRoaXMuY29uc3VtZSgpLHUmJnUhPT0iYXRvbSImJiF2LmFsbG93ZWRJbkFyZ3VtZW50KXRocm93IG5ldyBDaSgiR290IGZ1bmN0aW9uICciK3ArIicgd2l0aCBubyBhcmd1bWVudHMiKyh1PyIgYXMgIit1OiIiKSxkKTtpZih0aGlzLm1vZGU9PT0idGV4dCImJiF2LmFsbG93ZWRJblRleHQpdGhyb3cgbmV3IENpKCJDYW4ndCB1c2UgZnVuY3Rpb24gJyIrcCsiJyBpbiB0ZXh0IG1vZGUiLGQpO2lmKHRoaXMubW9kZT09PSJtYXRoIiYmdi5hbGxvd2VkSW5NYXRoPT09ITEpdGhyb3cgbmV3IENpKCJDYW4ndCB1c2UgZnVuY3Rpb24gJyIrcCsiJyBpbiBtYXRoIG1vZGUiLGQpO3ZhcnthcmdzOmIsb3B0QXJnczp5fT10aGlzLnBhcnNlQXJndW1lbnRzKHAsdik7cmV0dXJuIHRoaXMuY2FsbEZ1bmN0aW9uKHAsYix5LGQscyl9Y2FsbEZ1bmN0aW9uKHMsdSxkLHAsdil7dmFyIGI9e2Z1bmNOYW1lOnMscGFyc2VyOnRoaXMsdG9rZW46cCxicmVha09uVG9rZW5UZXh0OnZ9LHk9TDlbc107aWYoeSYmeS5oYW5kbGVyKXJldHVybiB5LmhhbmRsZXIoYix1LGQpO3Rocm93IG5ldyBDaSgiTm8gZnVuY3Rpb24gaGFuZGxlciBmb3IgIitzKX1wYXJzZUFyZ3VtZW50cyhzLHUpe3ZhciBkPXUubnVtQXJncyt1Lm51bU9wdGlvbmFsQXJncztpZihkPT09MClyZXR1cm57YXJnczpbXSxvcHRBcmdzOltdfTtmb3IodmFyIHA9W10sdj1bXSxiPTA7YjxkO2IrKyl7dmFyIHk9dS5hcmdUeXBlcyYmdS5hcmdUeXBlc1tiXSxUPWI8dS5udW1PcHRpb25hbEFyZ3M7KHUucHJpbWl0aXZlJiZ5PT1udWxsfHx1LnR5cGU9PT0ic3FydCImJmI9PT0xJiZ2WzBdPT1udWxsKSYmKHk9InByaW1pdGl2ZSIpO3ZhciBfPXRoaXMucGFyc2VHcm91cE9mVHlwZSgiYXJndW1lbnQgdG8gJyIrcysiJyIseSxUKTtpZihUKXYucHVzaChfKTtlbHNlIGlmKF8hPW51bGwpcC5wdXNoKF8pO2Vsc2UgdGhyb3cgbmV3IENpKCJOdWxsIGFyZ3VtZW50LCBwbGVhc2UgcmVwb3J0IHRoaXMgYXMgYSBidWciKX1yZXR1cm57YXJnczpwLG9wdEFyZ3M6dn19cGFyc2VHcm91cE9mVHlwZShzLHUsZCl7c3dpdGNoKHUpe2Nhc2UiY29sb3IiOnJldHVybiB0aGlzLnBhcnNlQ29sb3JHcm91cChkKTtjYXNlInNpemUiOnJldHVybiB0aGlzLnBhcnNlU2l6ZUdyb3VwKGQpO2Nhc2UidXJsIjpyZXR1cm4gdGhpcy5wYXJzZVVybEdyb3VwKGQpO2Nhc2UibWF0aCI6Y2FzZSJ0ZXh0IjpyZXR1cm4gdGhpcy5wYXJzZUFyZ3VtZW50R3JvdXAoZCx1KTtjYXNlImhib3giOnt2YXIgcD10aGlzLnBhcnNlQXJndW1lbnRHcm91cChkLCJ0ZXh0Iik7cmV0dXJuIHAhPW51bGw/e3R5cGU6InN0eWxpbmciLG1vZGU6cC5tb2RlLGJvZHk6W3BdLHN0eWxlOiJ0ZXh0In06bnVsbH1jYXNlInJhdyI6e3ZhciB2PXRoaXMucGFyc2VTdHJpbmdHcm91cCgicmF3IixkKTtyZXR1cm4gdiE9bnVsbD97dHlwZToicmF3Iixtb2RlOiJ0ZXh0IixzdHJpbmc6di50ZXh0fTpudWxsfWNhc2UicHJpbWl0aXZlIjp7aWYoZCl0aHJvdyBuZXcgQ2koIkEgcHJpbWl0aXZlIGFyZ3VtZW50IGNhbm5vdCBiZSBvcHRpb25hbCIpO3ZhciBiPXRoaXMucGFyc2VHcm91cChzKTtpZihiPT1udWxsKXRocm93IG5ldyBDaSgiRXhwZWN0ZWQgZ3JvdXAgYXMgIitzLHRoaXMuZmV0Y2goKSk7cmV0dXJuIGJ9Y2FzZSJvcmlnaW5hbCI6Y2FzZSBudWxsOmNhc2Ugdm9pZCAwOnJldHVybiB0aGlzLnBhcnNlQXJndW1lbnRHcm91cChkKTtkZWZhdWx0OnRocm93IG5ldyBDaSgiVW5rbm93biBncm91cCB0eXBlIGFzICIrcyx0aGlzLmZldGNoKCkpfX1jb25zdW1lU3BhY2VzKCl7Zm9yKDt0aGlzLmZldGNoKCkudGV4dD09PSIgIjspdGhpcy5jb25zdW1lKCl9cGFyc2VTdHJpbmdHcm91cChzLHUpe3ZhciBkPXRoaXMuZ3VsbGV0LnNjYW5Bcmd1bWVudCh1KTtpZihkPT1udWxsKXJldHVybiBudWxsO2Zvcih2YXIgcD0iIix2Oyh2PXRoaXMuZmV0Y2goKSkudGV4dCE9PSJFT0YiOylwKz12LnRleHQsdGhpcy5jb25zdW1lKCk7cmV0dXJuIHRoaXMuY29uc3VtZSgpLGQudGV4dD1wLGR9cGFyc2VSZWdleEdyb3VwKHMsdSl7Zm9yKHZhciBkPXRoaXMuZmV0Y2goKSxwPWQsdj0iIixiOyhiPXRoaXMuZmV0Y2goKSkudGV4dCE9PSJFT0YiJiZzLnRlc3QoditiLnRleHQpOylwPWIsdis9cC50ZXh0LHRoaXMuY29uc3VtZSgpO2lmKHY9PT0iIil0aHJvdyBuZXcgQ2koIkludmFsaWQgIit1KyI6ICciK2QudGV4dCsiJyIsZCk7cmV0dXJuIGQucmFuZ2UocCx2KX1wYXJzZUNvbG9yR3JvdXAocyl7dmFyIHU9dGhpcy5wYXJzZVN0cmluZ0dyb3VwKCJjb2xvciIscyk7aWYodT09bnVsbClyZXR1cm4gbnVsbDt2YXIgZD0vXigjW2EtZjAtOV17M318Iz9bYS1mMC05XXs2fXxbYS16XSspJC9pLmV4ZWModS50ZXh0KTtpZighZCl0aHJvdyBuZXcgQ2koIkludmFsaWQgY29sb3I6ICciK3UudGV4dCsiJyIsdSk7dmFyIHA9ZFswXTtyZXR1cm4vXlswLTlhLWZdezZ9JC9pLnRlc3QocCkmJihwPSIjIitwKSx7dHlwZToiY29sb3ItdG9rZW4iLG1vZGU6dGhpcy5tb2RlLGNvbG9yOnB9fXBhcnNlU2l6ZUdyb3VwKHMpe3ZhciB1LGQ9ITE7aWYodGhpcy5ndWxsZXQuY29uc3VtZVNwYWNlcygpLCFzJiZ0aGlzLmd1bGxldC5mdXR1cmUoKS50ZXh0IT09InsiP3U9dGhpcy5wYXJzZVJlZ2V4R3JvdXAoL15bLStdPyAqKD86JHxcZCt8XGQrXC5cZCp8XC5cZCopICpbYS16XXswLDJ9ICokLywic2l6ZSIpOnU9dGhpcy5wYXJzZVN0cmluZ0dyb3VwKCJzaXplIixzKSwhdSlyZXR1cm4gbnVsbDshcyYmdS50ZXh0Lmxlbmd0aD09PTAmJih1LnRleHQ9IjBwdCIsZD0hMCk7dmFyIHA9LyhbLStdPykgKihcZCsoPzpcLlxkKik/fFwuXGQrKSAqKFthLXpdezJ9KS8uZXhlYyh1LnRleHQpO2lmKCFwKXRocm93IG5ldyBDaSgiSW52YWxpZCBzaXplOiAnIit1LnRleHQrIiciLHUpO3ZhciB2PXtudW1iZXI6KyhwWzFdK3BbMl0pLHVuaXQ6cFszXX07aWYoIUokZSh2KSl0aHJvdyBuZXcgQ2koIkludmFsaWQgdW5pdDogJyIrdi51bml0KyInIix1KTtyZXR1cm57dHlwZToic2l6ZSIsbW9kZTp0aGlzLm1vZGUsdmFsdWU6dixpc0JsYW5rOmR9fXBhcnNlVXJsR3JvdXAocyl7dGhpcy5ndWxsZXQubGV4ZXIuc2V0Q2F0Y29kZSgiJSIsMTMpLHRoaXMuZ3VsbGV0LmxleGVyLnNldENhdGNvZGUoIn4iLDEyKTt2YXIgdT10aGlzLnBhcnNlU3RyaW5nR3JvdXAoInVybCIscyk7aWYodGhpcy5ndWxsZXQubGV4ZXIuc2V0Q2F0Y29kZSgiJSIsMTQpLHRoaXMuZ3VsbGV0LmxleGVyLnNldENhdGNvZGUoIn4iLDEzKSx1PT1udWxsKXJldHVybiBudWxsO3ZhciBkPXUudGV4dC5yZXBsYWNlKC9cXChbIyQlJn5fXnt9XSkvZywiJDEiKTtyZXR1cm57dHlwZToidXJsIixtb2RlOnRoaXMubW9kZSx1cmw6ZH19cGFyc2VBcmd1bWVudEdyb3VwKHMsdSl7dmFyIGQ9dGhpcy5ndWxsZXQuc2NhbkFyZ3VtZW50KHMpO2lmKGQ9PW51bGwpcmV0dXJuIG51bGw7dmFyIHA9dGhpcy5tb2RlO3UmJnRoaXMuc3dpdGNoTW9kZSh1KSx0aGlzLmd1bGxldC5iZWdpbkdyb3VwKCk7dmFyIHY9dGhpcy5wYXJzZUV4cHJlc3Npb24oITEsIkVPRiIpO3RoaXMuZXhwZWN0KCJFT0YiKSx0aGlzLmd1bGxldC5lbmRHcm91cCgpO3ZhciBiPXt0eXBlOiJvcmRncm91cCIsbW9kZTp0aGlzLm1vZGUsbG9jOmQubG9jLGJvZHk6dn07cmV0dXJuIHUmJnRoaXMuc3dpdGNoTW9kZShwKSxifXBhcnNlR3JvdXAocyx1KXt2YXIgZD10aGlzLmZldGNoKCkscD1kLnRleHQsdjtpZihwPT09InsifHxwPT09IlxcYmVnaW5ncm91cCIpe3RoaXMuY29uc3VtZSgpO3ZhciBiPXA9PT0ieyI/In0iOiJcXGVuZGdyb3VwIjt0aGlzLmd1bGxldC5iZWdpbkdyb3VwKCk7dmFyIHk9dGhpcy5wYXJzZUV4cHJlc3Npb24oITEsYiksVD10aGlzLmZldGNoKCk7dGhpcy5leHBlY3QoYiksdGhpcy5ndWxsZXQuZW5kR3JvdXAoKSx2PXt0eXBlOiJvcmRncm91cCIsbW9kZTp0aGlzLm1vZGUsbG9jOmxtLnJhbmdlKGQsVCksYm9keTp5LHNlbWlzaW1wbGU6cD09PSJcXGJlZ2luZ3JvdXAifHx2b2lkIDB9fWVsc2UgaWYodj10aGlzLnBhcnNlRnVuY3Rpb24odSxzKXx8dGhpcy5wYXJzZVN5bWJvbCgpLHY9PW51bGwmJnBbMF09PT0iXFwiJiYhYnFlLmhhc093blByb3BlcnR5KHApKXtpZih0aGlzLnNldHRpbmdzLnRocm93T25FcnJvcil0aHJvdyBuZXcgQ2koIlVuZGVmaW5lZCBjb250cm9sIHNlcXVlbmNlOiAiK3AsZCk7dj10aGlzLmZvcm1hdFVuc3VwcG9ydGVkQ21kKHApLHRoaXMuY29uc3VtZSgpfXJldHVybiB2fWZvcm1MaWdhdHVyZXMocyl7Zm9yKHZhciB1PXMubGVuZ3RoLTEsZD0wO2Q8dTsrK2Qpe3ZhciBwPXNbZF0sdj1wLnRleHQ7dj09PSItIiYmc1tkKzFdLnRleHQ9PT0iLSImJihkKzE8dSYmc1tkKzJdLnRleHQ9PT0iLSI/KHMuc3BsaWNlKGQsMyx7dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsbG9jOmxtLnJhbmdlKHAsc1tkKzJdKSx0ZXh0OiItLS0ifSksdS09Mik6KHMuc3BsaWNlKGQsMix7dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsbG9jOmxtLnJhbmdlKHAsc1tkKzFdKSx0ZXh0OiItLSJ9KSx1LT0xKSksKHY9PT0iJyJ8fHY9PT0iYCIpJiZzW2QrMV0udGV4dD09PXYmJihzLnNwbGljZShkLDIse3R5cGU6InRleHRvcmQiLG1vZGU6InRleHQiLGxvYzpsbS5yYW5nZShwLHNbZCsxXSksdGV4dDp2K3Z9KSx1LT0xKX19cGFyc2VTeW1ib2woKXt2YXIgcz10aGlzLmZldGNoKCksdT1zLnRleHQ7aWYoL15cXHZlcmJbXmEtekEtWl0vLnRlc3QodSkpe3RoaXMuY29uc3VtZSgpO3ZhciBkPXUuc2xpY2UoNSkscD1kLmNoYXJBdCgwKT09PSIqIjtpZihwJiYoZD1kLnNsaWNlKDEpKSxkLmxlbmd0aDwyfHxkLmNoYXJBdCgwKSE9PWQuc2xpY2UoLTEpKXRocm93IG5ldyBDaShgXFx2ZXJiIGFzc2VydGlvbiBmYWlsZWQgLS0KICAgICAgICAgICAgICAgICAgICBwbGVhc2UgcmVwb3J0IHdoYXQgaW5wdXQgY2F1c2VkIHRoaXMgYnVnYCk7cmV0dXJuIGQ9ZC5zbGljZSgxLC0xKSx7dHlwZToidmVyYiIsbW9kZToidGV4dCIsYm9keTpkLHN0YXI6cH19dnFlLmhhc093blByb3BlcnR5KHVbMF0pJiYhVWxbdGhpcy5tb2RlXVt1WzBdXSYmKHRoaXMuc2V0dGluZ3Muc3RyaWN0JiZ0aGlzLm1vZGU9PT0ibWF0aCImJnRoaXMuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJ1bmljb2RlVGV4dEluTWF0aE1vZGUiLCdBY2NlbnRlZCBVbmljb2RlIHRleHQgY2hhcmFjdGVyICInK3VbMF0rJyIgdXNlZCBpbiBtYXRoIG1vZGUnLHMpLHU9dnFlW3VbMF1dK3Uuc2xpY2UoMSkpO3ZhciB2PXhWdC5leGVjKHUpO3YmJih1PXUuc3Vic3RyaW5nKDAsdi5pbmRleCksdT09PSJpIj91PSLEsSI6dT09PSJqIiYmKHU9Isi3IikpO3ZhciBiO2lmKFVsW3RoaXMubW9kZV1bdV0pe3RoaXMuc2V0dGluZ3Muc3RyaWN0JiZ0aGlzLm1vZGU9PT0ibWF0aCImJmFiZS5pbmRleE9mKHUpPj0wJiZ0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgidW5pY29kZVRleHRJbk1hdGhNb2RlIiwnTGF0aW4tMS9Vbmljb2RlIHRleHQgY2hhcmFjdGVyICInK3VbMF0rJyIgdXNlZCBpbiBtYXRoIG1vZGUnLHMpO3ZhciB5PVVsW3RoaXMubW9kZV1bdV0uZ3JvdXAsVD1sbS5yYW5nZShzKSxfO2lmKGRIdC5oYXNPd25Qcm9wZXJ0eSh5KSl7dmFyIEE9eTtfPXt0eXBlOiJhdG9tIixtb2RlOnRoaXMubW9kZSxmYW1pbHk6QSxsb2M6VCx0ZXh0OnV9fWVsc2UgXz17dHlwZTp5LG1vZGU6dGhpcy5tb2RlLGxvYzpULHRleHQ6dX07Yj1ffWVsc2UgaWYodS5jaGFyQ29kZUF0KDApPj0xMjgpdGhpcy5zZXR0aW5ncy5zdHJpY3QmJihLJGUodS5jaGFyQ29kZUF0KDApKT90aGlzLm1vZGU9PT0ibWF0aCImJnRoaXMuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJ1bmljb2RlVGV4dEluTWF0aE1vZGUiLCdVbmljb2RlIHRleHQgY2hhcmFjdGVyICInK3VbMF0rJyIgdXNlZCBpbiBtYXRoIG1vZGUnLHMpOnRoaXMuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJ1bmtub3duU3ltYm9sIiwnVW5yZWNvZ25pemVkIFVuaWNvZGUgY2hhcmFjdGVyICInK3VbMF0rJyInKygiICgiK3UuY2hhckNvZGVBdCgwKSsiKSIpLHMpKSxiPXt0eXBlOiJ0ZXh0b3JkIixtb2RlOiJ0ZXh0Iixsb2M6bG0ucmFuZ2UocyksdGV4dDp1fTtlbHNlIHJldHVybiBudWxsO2lmKHRoaXMuY29uc3VtZSgpLHYpZm9yKHZhciBQPTA7UDx2WzBdLmxlbmd0aDtQKyspe3ZhciBSPXZbMF1bUF07aWYoIVBiZVtSXSl0aHJvdyBuZXcgQ2koIlVua25vd24gYWNjZW50ICcgIitSKyInIixzKTt2YXIgRj1QYmVbUl1bdGhpcy5tb2RlXXx8UGJlW1JdLnRleHQ7aWYoIUYpdGhyb3cgbmV3IENpKCJBY2NlbnQgIitSKyIgdW5zdXBwb3J0ZWQgaW4gIit0aGlzLm1vZGUrIiBtb2RlIixzKTtiPXt0eXBlOiJhY2NlbnQiLG1vZGU6dGhpcy5tb2RlLGxvYzpsbS5yYW5nZShzKSxsYWJlbDpGLGlzU3RyZXRjaHk6ITEsaXNTaGlmdHk6ITAsYmFzZTpifX1yZXR1cm4gYn19Z1IuZW5kT2ZFeHByZXNzaW9uPVsifSIsIlxcZW5kZ3JvdXAiLCJcXGVuZCIsIlxccmlnaHQiLCImIl07dmFyIEJiZT1mdW5jdGlvbihzLHUpe2lmKCEodHlwZW9mIHM9PSJzdHJpbmcifHxzIGluc3RhbmNlb2YgU3RyaW5nKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJLYVRlWCBjYW4gb25seSBwYXJzZSBzdHJpbmcgdHlwZWQgZXhwcmVzc2lvbiIpO3ZhciBkPW5ldyBnUihzLHUpO2RlbGV0ZSBkLmd1bGxldC5tYWNyb3MuY3VycmVudFsiXFxkZkB0YWciXTt2YXIgcD1kLnBhcnNlKCk7aWYoZGVsZXRlIGQuZ3VsbGV0Lm1hY3Jvcy5jdXJyZW50WyJcXGN1cnJlbnRAY29sb3IiXSxkZWxldGUgZC5ndWxsZXQubWFjcm9zLmN1cnJlbnRbIlxcY29sb3IiXSxkLmd1bGxldC5tYWNyb3MuZ2V0KCJcXGRmQHRhZyIpKXtpZighdS5kaXNwbGF5TW9kZSl0aHJvdyBuZXcgQ2koIlxcdGFnIHdvcmtzIG9ubHkgaW4gZGlzcGxheSBlcXVhdGlvbnMiKTtwPVt7dHlwZToidGFnIixtb2RlOiJ0ZXh0Iixib2R5OnAsdGFnOmQuc3VicGFyc2UoW25ldyBVNCgiXFxkZkB0YWciKV0pfV19cmV0dXJuIHB9LHdxZT1mdW5jdGlvbihzLHUsZCl7dS50ZXh0Q29udGVudD0iIjt2YXIgcD1GYmUocyxkKS50b05vZGUoKTt1LmFwcGVuZENoaWxkKHApfTt0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jb21wYXRNb2RlIT09IkNTUzFDb21wYXQiJiYodHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLndhcm4oIldhcm5pbmc6IEthVGVYIGRvZXNuJ3Qgd29yayBpbiBxdWlya3MgbW9kZS4gTWFrZSBzdXJlIHlvdXIgd2Vic2l0ZSBoYXMgYSBzdWl0YWJsZSBkb2N0eXBlLiIpLHdxZT1mdW5jdGlvbigpe3Rocm93IG5ldyBDaSgiS2FUZVggZG9lc24ndCB3b3JrIGluIHF1aXJrcyBtb2RlLiIpfSk7dmFyIFNWdD1mdW5jdGlvbihzLHUpe3ZhciBkPUZiZShzLHUpLnRvTWFya3VwKCk7cmV0dXJuIGR9LF9WdD1mdW5jdGlvbihzLHUpe3ZhciBkPW5ldyBZMmUodSk7cmV0dXJuIEJiZShzLGQpfSx5cWU9ZnVuY3Rpb24ocyx1LGQpe2lmKGQudGhyb3dPbkVycm9yfHwhKHMgaW5zdGFuY2VvZiBDaSkpdGhyb3cgczt2YXIgcD16bi5tYWtlU3BhbihbImthdGV4LWVycm9yIl0sW25ldyBCdih1KV0pO3JldHVybiBwLnNldEF0dHJpYnV0ZSgidGl0bGUiLHMudG9TdHJpbmcoKSkscC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiY29sb3I6IitkLmVycm9yQ29sb3IpLHB9LEZiZT1mdW5jdGlvbihzLHUpe3ZhciBkPW5ldyBZMmUodSk7dHJ5e3ZhciBwPUJiZShzLGQpO3JldHVybiBCSHQocCxzLGQpfWNhdGNoKHYpe3JldHVybiB5cWUodixzLGQpfX0sQVZ0PWZ1bmN0aW9uKHMsdSl7dmFyIGQ9bmV3IFkyZSh1KTt0cnl7dmFyIHA9QmJlKHMsZCk7cmV0dXJuIEZIdChwLHMsZCl9Y2F0Y2godil7cmV0dXJuIHlxZSh2LHMsZCl9fSxMVnQ9e3ZlcnNpb246IjAuMTYuOSIscmVuZGVyOndxZSxyZW5kZXJUb1N0cmluZzpTVnQsUGFyc2VFcnJvcjpDaSxTRVRUSU5HU19TQ0hFTUE6clEsX19wYXJzZTpfVnQsX19yZW5kZXJUb0RvbVRyZWU6RmJlLF9fcmVuZGVyVG9IVE1MVHJlZTpBVnQsX19zZXRGb250TWV0cmljczphSHQsX19kZWZpbmVTeW1ib2w6d2UsX19kZWZpbmVGdW5jdGlvbjpKaSxfX2RlZmluZU1hY3JvOmV0LF9fZG9tVHJlZTp7U3BhbjpjUixBbmNob3I6dGJlLFN5bWJvbE5vZGU6QnYsU3ZnTm9kZTpENyxQYXRoTm9kZTpDOSxMaW5lTm9kZTpuYmV9fTtjb25zdCBNVnQ9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRlZmF1bHQ6TFZ0fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBDUT1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKFRyLEZuLHFuLFVuKXtmb3IocW49cW58fHt9LFVuPVRyLmxlbmd0aDtVbi0tO3FuW1RyW1VuXV09Rm4pO3JldHVybiBxbn0scz1bMSwyNF0sdT1bMSwyNV0sZD1bMSwyNl0scD1bMSwyN10sdj1bMSwyOF0sYj1bMSw2M10seT1bMSw2NF0sVD1bMSw2NV0sXz1bMSw2Nl0sQT1bMSw2N10sUD1bMSw2OF0sUj1bMSw2OV0sRj1bMSwyOV0saj1bMSwzMF0sSz1bMSwzMV0sZWU9WzEsMzJdLGllPVsxLDMzXSxvZT1bMSwzNF0scGU9WzEsMzVdLGJlPVsxLDM2XSxhZT1bMSwzN10sbmU9WzEsMzhdLHNlPVsxLDM5XSxkZT1bMSw0MF0sWD1bMSw0MV0sZ2U9WzEsNDJdLFc9WzEsNDNdLHhlPVsxLDQ0XSxVPVsxLDQ1XSxGZT1bMSw0Nl0sUGU9WzEsNDddLGplPVsxLDQ4XSxJZT1bMSw1MF0sU2U9WzEsNTFdLENlPVsxLDUyXSxrZT1bMSw1M10sS2U9WzEsNTRdLEZ0PVsxLDU1XSxOZT1bMSw1Nl0sZ249WzEsNTddLF90PVsxLDU4XSxFdD1bMSw1OV0sR3Q9WzEsNjBdLGxuPVsxNCw0Ml0seHQ9WzE0LDM0LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0XSxQdD1bMTIsMTQsMzQsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzRdLFFlPVsxLDgyXSxEdD1bMSw4M10sa3Q9WzEsODRdLE9uPVsxLDg1XSxodD1bMTIsMTQsNDJdLHpyPVsxMiwxNCwzMyw0Ml0seXQ9WzEyLDE0LDMzLDQyLDc2LDc3LDc5LDgwXSxqaT1bMTIsMzNdLHhpPVszNCwzNiwzNywzOCwzOSw0MCw0MSw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NF0sTWE9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxkaXJlY3Rpb246NSxkaXJlY3Rpb25fdGI6NixkaXJlY3Rpb25fYnQ6NyxkaXJlY3Rpb25fcmw6OCxkaXJlY3Rpb25fbHI6OSxncmFwaENvbmZpZzoxMCxDNF9DT05URVhUOjExLE5FV0xJTkU6MTIsc3RhdGVtZW50czoxMyxFT0Y6MTQsQzRfQ09OVEFJTkVSOjE1LEM0X0NPTVBPTkVOVDoxNixDNF9EWU5BTUlDOjE3LEM0X0RFUExPWU1FTlQ6MTgsb3RoZXJTdGF0ZW1lbnRzOjE5LGRpYWdyYW1TdGF0ZW1lbnRzOjIwLG90aGVyU3RhdGVtZW50OjIxLHRpdGxlOjIyLGFjY0Rlc2NyaXB0aW9uOjIzLGFjY190aXRsZToyNCxhY2NfdGl0bGVfdmFsdWU6MjUsYWNjX2Rlc2NyOjI2LGFjY19kZXNjcl92YWx1ZToyNyxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjI4LGJvdW5kYXJ5U3RhdGVtZW50OjI5LGJvdW5kYXJ5U3RhcnRTdGF0ZW1lbnQ6MzAsYm91bmRhcnlTdG9wU3RhdGVtZW50OjMxLGJvdW5kYXJ5U3RhcnQ6MzIsTEJSQUNFOjMzLEVOVEVSUFJJU0VfQk9VTkRBUlk6MzQsYXR0cmlidXRlczozNSxTWVNURU1fQk9VTkRBUlk6MzYsQk9VTkRBUlk6MzcsQ09OVEFJTkVSX0JPVU5EQVJZOjM4LE5PREU6MzksTk9ERV9MOjQwLE5PREVfUjo0MSxSQlJBQ0U6NDIsZGlhZ3JhbVN0YXRlbWVudDo0MyxQRVJTT046NDQsUEVSU09OX0VYVDo0NSxTWVNURU06NDYsU1lTVEVNX0RCOjQ3LFNZU1RFTV9RVUVVRTo0OCxTWVNURU1fRVhUOjQ5LFNZU1RFTV9FWFRfREI6NTAsU1lTVEVNX0VYVF9RVUVVRTo1MSxDT05UQUlORVI6NTIsQ09OVEFJTkVSX0RCOjUzLENPTlRBSU5FUl9RVUVVRTo1NCxDT05UQUlORVJfRVhUOjU1LENPTlRBSU5FUl9FWFRfREI6NTYsQ09OVEFJTkVSX0VYVF9RVUVVRTo1NyxDT01QT05FTlQ6NTgsQ09NUE9ORU5UX0RCOjU5LENPTVBPTkVOVF9RVUVVRTo2MCxDT01QT05FTlRfRVhUOjYxLENPTVBPTkVOVF9FWFRfREI6NjIsQ09NUE9ORU5UX0VYVF9RVUVVRTo2MyxSRUw6NjQsQklSRUw6NjUsUkVMX1U6NjYsUkVMX0Q6NjcsUkVMX0w6NjgsUkVMX1I6NjksUkVMX0I6NzAsUkVMX0lOREVYOjcxLFVQREFURV9FTF9TVFlMRTo3MixVUERBVEVfUkVMX1NUWUxFOjczLFVQREFURV9MQVlPVVRfQ09ORklHOjc0LGF0dHJpYnV0ZTo3NSxTVFI6NzYsU1RSX0tFWTo3NyxTVFJfVkFMVUU6NzgsQVRUUklCVVRFOjc5LEFUVFJJQlVURV9FTVBUWTo4MCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNjoiZGlyZWN0aW9uX3RiIiw3OiJkaXJlY3Rpb25fYnQiLDg6ImRpcmVjdGlvbl9ybCIsOToiZGlyZWN0aW9uX2xyIiwxMToiQzRfQ09OVEVYVCIsMTI6Ik5FV0xJTkUiLDE0OiJFT0YiLDE1OiJDNF9DT05UQUlORVIiLDE2OiJDNF9DT01QT05FTlQiLDE3OiJDNF9EWU5BTUlDIiwxODoiQzRfREVQTE9ZTUVOVCIsMjI6InRpdGxlIiwyMzoiYWNjRGVzY3JpcHRpb24iLDI0OiJhY2NfdGl0bGUiLDI1OiJhY2NfdGl0bGVfdmFsdWUiLDI2OiJhY2NfZGVzY3IiLDI3OiJhY2NfZGVzY3JfdmFsdWUiLDI4OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzMzoiTEJSQUNFIiwzNDoiRU5URVJQUklTRV9CT1VOREFSWSIsMzY6IlNZU1RFTV9CT1VOREFSWSIsMzc6IkJPVU5EQVJZIiwzODoiQ09OVEFJTkVSX0JPVU5EQVJZIiwzOToiTk9ERSIsNDA6Ik5PREVfTCIsNDE6Ik5PREVfUiIsNDI6IlJCUkFDRSIsNDQ6IlBFUlNPTiIsNDU6IlBFUlNPTl9FWFQiLDQ2OiJTWVNURU0iLDQ3OiJTWVNURU1fREIiLDQ4OiJTWVNURU1fUVVFVUUiLDQ5OiJTWVNURU1fRVhUIiw1MDoiU1lTVEVNX0VYVF9EQiIsNTE6IlNZU1RFTV9FWFRfUVVFVUUiLDUyOiJDT05UQUlORVIiLDUzOiJDT05UQUlORVJfREIiLDU0OiJDT05UQUlORVJfUVVFVUUiLDU1OiJDT05UQUlORVJfRVhUIiw1NjoiQ09OVEFJTkVSX0VYVF9EQiIsNTc6IkNPTlRBSU5FUl9FWFRfUVVFVUUiLDU4OiJDT01QT05FTlQiLDU5OiJDT01QT05FTlRfREIiLDYwOiJDT01QT05FTlRfUVVFVUUiLDYxOiJDT01QT05FTlRfRVhUIiw2MjoiQ09NUE9ORU5UX0VYVF9EQiIsNjM6IkNPTVBPTkVOVF9FWFRfUVVFVUUiLDY0OiJSRUwiLDY1OiJCSVJFTCIsNjY6IlJFTF9VIiw2NzoiUkVMX0QiLDY4OiJSRUxfTCIsNjk6IlJFTF9SIiw3MDoiUkVMX0IiLDcxOiJSRUxfSU5ERVgiLDcyOiJVUERBVEVfRUxfU1RZTEUiLDczOiJVUERBVEVfUkVMX1NUWUxFIiw3NDoiVVBEQVRFX0xBWU9VVF9DT05GSUciLDc2OiJTVFIiLDc3OiJTVFJfS0VZIiw3ODoiU1RSX1ZBTFVFIiw3OToiQVRUUklCVVRFIiw4MDoiQVRUUklCVVRFX0VNUFRZIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDFdLFs1LDFdLFs1LDFdLFs1LDFdLFs1LDFdLFs0LDFdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEzLDFdLFsxMywxXSxbMTMsMl0sWzE5LDFdLFsxOSwyXSxbMTksM10sWzIxLDFdLFsyMSwxXSxbMjEsMl0sWzIxLDJdLFsyMSwxXSxbMjksM10sWzMwLDNdLFszMCwzXSxbMzAsNF0sWzMyLDJdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMSwxXSxbMjAsMV0sWzIwLDJdLFsyMCwzXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywxXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFszNSwxXSxbMzUsMl0sWzc1LDFdLFs3NSwyXSxbNzUsMV0sWzc1LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKEZuLHFuLFVuLEF0LHd0LG9uLGZuKXt2YXIgQW49b24ubGVuZ3RoLTE7c3dpdGNoKHd0KXtjYXNlIDM6QXQuc2V0RGlyZWN0aW9uKCJUQiIpO2JyZWFrO2Nhc2UgNDpBdC5zZXREaXJlY3Rpb24oIkJUIik7YnJlYWs7Y2FzZSA1OkF0LnNldERpcmVjdGlvbigiUkwiKTticmVhaztjYXNlIDY6QXQuc2V0RGlyZWN0aW9uKCJMUiIpO2JyZWFrO2Nhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTI6QXQuc2V0QzRUeXBlKG9uW0FuLTNdKTticmVhaztjYXNlIDE5OkF0LnNldFRpdGxlKG9uW0FuXS5zdWJzdHJpbmcoNikpLHRoaXMuJD1vbltBbl0uc3Vic3RyaW5nKDYpO2JyZWFrO2Nhc2UgMjA6QXQuc2V0QWNjRGVzY3JpcHRpb24ob25bQW5dLnN1YnN0cmluZygxNSkpLHRoaXMuJD1vbltBbl0uc3Vic3RyaW5nKDE1KTticmVhaztjYXNlIDIxOnRoaXMuJD1vbltBbl0udHJpbSgpLEF0LnNldFRpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOnRoaXMuJD1vbltBbl0udHJpbSgpLEF0LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAyODpjYXNlIDI5Om9uW0FuXS5zcGxpY2UoMiwwLCJFTlRFUlBSSVNFIiksQXQuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSAzMDpBdC5hZGRQZXJzb25PclN5c3RlbUJvdW5kYXJ5KC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDMxOm9uW0FuXS5zcGxpY2UoMiwwLCJDT05UQUlORVIiKSxBdC5hZGRDb250YWluZXJCb3VuZGFyeSguLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSAzMjpBdC5hZGREZXBsb3ltZW50Tm9kZSgibm9kZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgMzM6QXQuYWRkRGVwbG95bWVudE5vZGUoIm5vZGVMIiwuLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSAzNDpBdC5hZGREZXBsb3ltZW50Tm9kZSgibm9kZVIiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDM1OkF0LnBvcEJvdW5kYXJ5UGFyc2VTdGFjaygpO2JyZWFrO2Nhc2UgMzk6QXQuYWRkUGVyc29uT3JTeXN0ZW0oInBlcnNvbiIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDA6QXQuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3BlcnNvbiIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDE6QXQuYWRkUGVyc29uT3JTeXN0ZW0oInN5c3RlbSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDI6QXQuYWRkUGVyc29uT3JTeXN0ZW0oInN5c3RlbV9kYiIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDM6QXQuYWRkUGVyc29uT3JTeXN0ZW0oInN5c3RlbV9xdWV1ZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDQ6QXQuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3N5c3RlbSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDU6QXQuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3N5c3RlbV9kYiIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDY6QXQuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3N5c3RlbV9xdWV1ZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDc6QXQuYWRkQ29udGFpbmVyKCJjb250YWluZXIiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDQ4OkF0LmFkZENvbnRhaW5lcigiY29udGFpbmVyX2RiIiwuLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSA0OTpBdC5hZGRDb250YWluZXIoImNvbnRhaW5lcl9xdWV1ZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNTA6QXQuYWRkQ29udGFpbmVyKCJleHRlcm5hbF9jb250YWluZXIiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDUxOkF0LmFkZENvbnRhaW5lcigiZXh0ZXJuYWxfY29udGFpbmVyX2RiIiwuLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSA1MjpBdC5hZGRDb250YWluZXIoImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNTM6QXQuYWRkQ29tcG9uZW50KCJjb21wb25lbnQiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDU0OkF0LmFkZENvbXBvbmVudCgiY29tcG9uZW50X2RiIiwuLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSA1NTpBdC5hZGRDb21wb25lbnQoImNvbXBvbmVudF9xdWV1ZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNTY6QXQuYWRkQ29tcG9uZW50KCJleHRlcm5hbF9jb21wb25lbnQiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDU3OkF0LmFkZENvbXBvbmVudCgiZXh0ZXJuYWxfY29tcG9uZW50X2RiIiwuLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSA1ODpBdC5hZGRDb21wb25lbnQoImV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNjA6QXQuYWRkUmVsKCJyZWwiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDYxOkF0LmFkZFJlbCgiYmlyZWwiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDYyOkF0LmFkZFJlbCgicmVsX3UiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDYzOkF0LmFkZFJlbCgicmVsX2QiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDY0OkF0LmFkZFJlbCgicmVsX2wiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDY1OkF0LmFkZFJlbCgicmVsX3IiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDY2OkF0LmFkZFJlbCgicmVsX2IiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDY3Om9uW0FuXS5zcGxpY2UoMCwxKSxBdC5hZGRSZWwoInJlbCIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNjg6QXQudXBkYXRlRWxTdHlsZSgidXBkYXRlX2VsX3N0eWxlIiwuLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSA2OTpBdC51cGRhdGVSZWxTdHlsZSgidXBkYXRlX3JlbF9zdHlsZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNzA6QXQudXBkYXRlTGF5b3V0Q29uZmlnKCJ1cGRhdGVfbGF5b3V0X2NvbmZpZyIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNzE6dGhpcy4kPVtvbltBbl1dO2JyZWFrO2Nhc2UgNzI6b25bQW5dLnVuc2hpZnQob25bQW4tMV0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSA3MzpjYXNlIDc1OnRoaXMuJD1vbltBbl0udHJpbSgpO2JyZWFrO2Nhc2UgNzQ6bGV0IG9vPXt9O29vW29uW0FuLTFdLnRyaW0oKV09b25bQW5dLnRyaW0oKSx0aGlzLiQ9b287YnJlYWs7Y2FzZSA3Njp0aGlzLiQ9IiI7YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTozLDY6WzEsNV0sNzpbMSw2XSw4OlsxLDddLDk6WzEsOF0sMTA6NCwxMTpbMSw5XSwxNTpbMSwxMF0sMTY6WzEsMTFdLDE3OlsxLDEyXSwxODpbMSwxM119LHsxOlszXX0sezE6WzIsMV19LHsxOlsyLDJdfSx7MTpbMiw3XX0sezE6WzIsM119LHsxOlsyLDRdfSx7MTpbMiw1XX0sezE6WzIsNl19LHsxMjpbMSwxNF19LHsxMjpbMSwxNV19LHsxMjpbMSwxNl19LHsxMjpbMSwxN119LHsxMjpbMSwxOF19LHsxMzoxOSwxOToyMCwyMDoyMSwyMToyMiwyMjpzLDIzOnUsMjQ6ZCwyNjpwLDI4OnYsMjk6NDksMzA6NjEsMzI6NjIsMzQ6YiwzNjp5LDM3OlQsMzg6XywzOTpBLDQwOlAsNDE6Uiw0MzoyMyw0NDpGLDQ1OmosNDY6Syw0NzplZSw0ODppZSw0OTpvZSw1MDpwZSw1MTpiZSw1MjphZSw1MzpuZSw1NDpzZSw1NTpkZSw1NjpYLDU3OmdlLDU4OlcsNTk6eGUsNjA6VSw2MTpGZSw2MjpQZSw2MzpqZSw2NDpJZSw2NTpTZSw2NjpDZSw2NzprZSw2ODpLZSw2OTpGdCw3MDpOZSw3MTpnbiw3MjpfdCw3MzpFdCw3NDpHdH0sezEzOjcwLDE5OjIwLDIwOjIxLDIxOjIyLDIyOnMsMjM6dSwyNDpkLDI2OnAsMjg6diwyOTo0OSwzMDo2MSwzMjo2MiwzNDpiLDM2OnksMzc6VCwzODpfLDM5OkEsNDA6UCw0MTpSLDQzOjIzLDQ0OkYsNDU6aiw0NjpLLDQ3OmVlLDQ4OmllLDQ5Om9lLDUwOnBlLDUxOmJlLDUyOmFlLDUzOm5lLDU0OnNlLDU1OmRlLDU2OlgsNTc6Z2UsNTg6Vyw1OTp4ZSw2MDpVLDYxOkZlLDYyOlBlLDYzOmplLDY0OkllLDY1OlNlLDY2OkNlLDY3OmtlLDY4OktlLDY5OkZ0LDcwOk5lLDcxOmduLDcyOl90LDczOkV0LDc0Okd0fSx7MTM6NzEsMTk6MjAsMjA6MjEsMjE6MjIsMjI6cywyMzp1LDI0OmQsMjY6cCwyODp2LDI5OjQ5LDMwOjYxLDMyOjYyLDM0OmIsMzY6eSwzNzpULDM4Ol8sMzk6QSw0MDpQLDQxOlIsNDM6MjMsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGUsNTE6YmUsNTI6YWUsNTM6bmUsNTQ6c2UsNTU6ZGUsNTY6WCw1NzpnZSw1ODpXLDU5OnhlLDYwOlUsNjE6RmUsNjI6UGUsNjM6amUsNjQ6SWUsNjU6U2UsNjY6Q2UsNjc6a2UsNjg6S2UsNjk6RnQsNzA6TmUsNzE6Z24sNzI6X3QsNzM6RXQsNzQ6R3R9LHsxMzo3MiwxOToyMCwyMDoyMSwyMToyMiwyMjpzLDIzOnUsMjQ6ZCwyNjpwLDI4OnYsMjk6NDksMzA6NjEsMzI6NjIsMzQ6YiwzNjp5LDM3OlQsMzg6XywzOTpBLDQwOlAsNDE6Uiw0MzoyMyw0NDpGLDQ1OmosNDY6Syw0NzplZSw0ODppZSw0OTpvZSw1MDpwZSw1MTpiZSw1MjphZSw1MzpuZSw1NDpzZSw1NTpkZSw1NjpYLDU3OmdlLDU4OlcsNTk6eGUsNjA6VSw2MTpGZSw2MjpQZSw2MzpqZSw2NDpJZSw2NTpTZSw2NjpDZSw2NzprZSw2ODpLZSw2OTpGdCw3MDpOZSw3MTpnbiw3MjpfdCw3MzpFdCw3NDpHdH0sezEzOjczLDE5OjIwLDIwOjIxLDIxOjIyLDIyOnMsMjM6dSwyNDpkLDI2OnAsMjg6diwyOTo0OSwzMDo2MSwzMjo2MiwzNDpiLDM2OnksMzc6VCwzODpfLDM5OkEsNDA6UCw0MTpSLDQzOjIzLDQ0OkYsNDU6aiw0NjpLLDQ3OmVlLDQ4OmllLDQ5Om9lLDUwOnBlLDUxOmJlLDUyOmFlLDUzOm5lLDU0OnNlLDU1OmRlLDU2OlgsNTc6Z2UsNTg6Vyw1OTp4ZSw2MDpVLDYxOkZlLDYyOlBlLDYzOmplLDY0OkllLDY1OlNlLDY2OkNlLDY3OmtlLDY4OktlLDY5OkZ0LDcwOk5lLDcxOmduLDcyOl90LDczOkV0LDc0Okd0fSx7MTQ6WzEsNzRdfSxpKGxuLFsyLDEzXSx7NDM6MjMsMjk6NDksMzA6NjEsMzI6NjIsMjA6NzUsMzQ6YiwzNjp5LDM3OlQsMzg6XywzOTpBLDQwOlAsNDE6Uiw0NDpGLDQ1OmosNDY6Syw0NzplZSw0ODppZSw0OTpvZSw1MDpwZSw1MTpiZSw1MjphZSw1MzpuZSw1NDpzZSw1NTpkZSw1NjpYLDU3OmdlLDU4OlcsNTk6eGUsNjA6VSw2MTpGZSw2MjpQZSw2MzpqZSw2NDpJZSw2NTpTZSw2NjpDZSw2NzprZSw2ODpLZSw2OTpGdCw3MDpOZSw3MTpnbiw3MjpfdCw3MzpFdCw3NDpHdH0pLGkobG4sWzIsMTRdKSxpKHh0LFsyLDE2XSx7MTI6WzEsNzZdfSksaShsbixbMiwzNl0sezEyOlsxLDc3XX0pLGkoUHQsWzIsMTldKSxpKFB0LFsyLDIwXSksezI1OlsxLDc4XX0sezI3OlsxLDc5XX0saShQdCxbMiwyM10pLHszNTo4MCw3NTo4MSw3NjpRZSw3NzpEdCw3OTprdCw4MDpPbn0sezM1Ojg2LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6ODcsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNTo4OCw3NTo4MSw3NjpRZSw3NzpEdCw3OTprdCw4MDpPbn0sezM1Ojg5LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6OTAsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNTo5MSw3NTo4MSw3NjpRZSw3NzpEdCw3OTprdCw4MDpPbn0sezM1OjkyLDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6OTMsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNTo5NCw3NTo4MSw3NjpRZSw3NzpEdCw3OTprdCw4MDpPbn0sezM1Ojk1LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6OTYsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNTo5Nyw3NTo4MSw3NjpRZSw3NzpEdCw3OTprdCw4MDpPbn0sezM1Ojk4LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6OTksNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMDAsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMDEsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMDIsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMDMsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMDQsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LGkoaHQsWzIsNTldKSx7MzU6MTA1LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTA2LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTA3LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTA4LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTA5LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTEwLDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTExLDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTEyLDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTEzLDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTE0LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTE1LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MjA6MTE2LDI5OjQ5LDMwOjYxLDMyOjYyLDM0OmIsMzY6eSwzNzpULDM4Ol8sMzk6QSw0MDpQLDQxOlIsNDM6MjMsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGUsNTE6YmUsNTI6YWUsNTM6bmUsNTQ6c2UsNTU6ZGUsNTY6WCw1NzpnZSw1ODpXLDU5OnhlLDYwOlUsNjE6RmUsNjI6UGUsNjM6amUsNjQ6SWUsNjU6U2UsNjY6Q2UsNjc6a2UsNjg6S2UsNjk6RnQsNzA6TmUsNzE6Z24sNzI6X3QsNzM6RXQsNzQ6R3R9LHsxMjpbMSwxMThdLDMzOlsxLDExN119LHszNToxMTksNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMjAsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMjEsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMjIsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMjMsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMjQsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMjUsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHsxNDpbMSwxMjZdfSx7MTQ6WzEsMTI3XX0sezE0OlsxLDEyOF19LHsxNDpbMSwxMjldfSx7MTpbMiw4XX0saShsbixbMiwxNV0pLGkoeHQsWzIsMTddLHsyMToyMiwxOToxMzAsMjI6cywyMzp1LDI0OmQsMjY6cCwyODp2fSksaShsbixbMiwzN10sezE5OjIwLDIwOjIxLDIxOjIyLDQzOjIzLDI5OjQ5LDMwOjYxLDMyOjYyLDEzOjEzMSwyMjpzLDIzOnUsMjQ6ZCwyNjpwLDI4OnYsMzQ6YiwzNjp5LDM3OlQsMzg6XywzOTpBLDQwOlAsNDE6Uiw0NDpGLDQ1OmosNDY6Syw0NzplZSw0ODppZSw0OTpvZSw1MDpwZSw1MTpiZSw1MjphZSw1MzpuZSw1NDpzZSw1NTpkZSw1NjpYLDU3OmdlLDU4OlcsNTk6eGUsNjA6VSw2MTpGZSw2MjpQZSw2MzpqZSw2NDpJZSw2NTpTZSw2NjpDZSw2NzprZSw2ODpLZSw2OTpGdCw3MDpOZSw3MTpnbiw3MjpfdCw3MzpFdCw3NDpHdH0pLGkoUHQsWzIsMjFdKSxpKFB0LFsyLDIyXSksaShodCxbMiwzOV0pLGkoenIsWzIsNzFdLHs3NTo4MSwzNToxMzIsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259KSxpKHl0LFsyLDczXSksezc4OlsxLDEzM119LGkoeXQsWzIsNzVdKSxpKHl0LFsyLDc2XSksaShodCxbMiw0MF0pLGkoaHQsWzIsNDFdKSxpKGh0LFsyLDQyXSksaShodCxbMiw0M10pLGkoaHQsWzIsNDRdKSxpKGh0LFsyLDQ1XSksaShodCxbMiw0Nl0pLGkoaHQsWzIsNDddKSxpKGh0LFsyLDQ4XSksaShodCxbMiw0OV0pLGkoaHQsWzIsNTBdKSxpKGh0LFsyLDUxXSksaShodCxbMiw1Ml0pLGkoaHQsWzIsNTNdKSxpKGh0LFsyLDU0XSksaShodCxbMiw1NV0pLGkoaHQsWzIsNTZdKSxpKGh0LFsyLDU3XSksaShodCxbMiw1OF0pLGkoaHQsWzIsNjBdKSxpKGh0LFsyLDYxXSksaShodCxbMiw2Ml0pLGkoaHQsWzIsNjNdKSxpKGh0LFsyLDY0XSksaShodCxbMiw2NV0pLGkoaHQsWzIsNjZdKSxpKGh0LFsyLDY3XSksaShodCxbMiw2OF0pLGkoaHQsWzIsNjldKSxpKGh0LFsyLDcwXSksezMxOjEzNCw0MjpbMSwxMzVdfSx7MTI6WzEsMTM2XX0sezMzOlsxLDEzN119LGkoamksWzIsMjhdKSxpKGppLFsyLDI5XSksaShqaSxbMiwzMF0pLGkoamksWzIsMzFdKSxpKGppLFsyLDMyXSksaShqaSxbMiwzM10pLGkoamksWzIsMzRdKSx7MTpbMiw5XX0sezE6WzIsMTBdfSx7MTpbMiwxMV19LHsxOlsyLDEyXX0saSh4dCxbMiwxOF0pLGkobG4sWzIsMzhdKSxpKHpyLFsyLDcyXSksaSh5dCxbMiw3NF0pLGkoaHQsWzIsMjRdKSxpKGh0LFsyLDM1XSksaSh4aSxbMiwyNV0pLGkoeGksWzIsMjZdLHsxMjpbMSwxMzhdfSksaSh4aSxbMiwyN10pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSwzOlsyLDJdLDQ6WzIsN10sNTpbMiwzXSw2OlsyLDRdLDc6WzIsNV0sODpbMiw2XSw3NDpbMiw4XSwxMjY6WzIsOV0sMTI3OlsyLDEwXSwxMjg6WzIsMTFdLDEyOTpbMiwxMl19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oRm4scW4pe2lmKHFuLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoRm4pO2Vsc2V7dmFyIFVuPW5ldyBFcnJvcihGbik7dGhyb3cgVW4uaGFzaD1xbixVbn19LHBhcnNlOmZ1bmN0aW9uKEZuKXt2YXIgcW49dGhpcyxVbj1bMF0sQXQ9W10sd3Q9W251bGxdLG9uPVtdLGZuPXRoaXMudGFibGUsQW49IiIsb289MCxqbz0wLCRvPTIsUGE9MSx3bz1vbi5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxfcz1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHRsPXt5eTp7fX07Zm9yKHZhciBkYSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGRhKSYmKHRsLnl5W2RhXT10aGlzLnl5W2RhXSk7X3Muc2V0SW5wdXQoRm4sdGwueXkpLHRsLnl5LmxleGVyPV9zLHRsLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBfcy55eWxsb2M+InUiJiYoX3MueXlsbG9jPXt9KTt2YXIgajA9X3MueXlsbG9jO29uLnB1c2goajApO3ZhciBwbT1fcy5vcHRpb25zJiZfcy5vcHRpb25zLnJhbmdlczt0eXBlb2YgdGwueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9dGwueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gTWwoKXt2YXIga2g7cmV0dXJuIGtoPUF0LnBvcCgpfHxfcy5sZXgoKXx8UGEsdHlwZW9mIGtoIT0ibnVtYmVyIiYmKGtoIGluc3RhbmNlb2YgQXJyYXkmJihBdD1raCxraD1BdC5wb3AoKSksa2g9cW4uc3ltYm9sc19ba2hdfHxraCksa2h9Zm9yKHZhciBYYyxCYyxqYSxPdSxTYT17fSxQbyxGYyx4YSxCYTs7KXtpZihCYz1VbltVbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tCY10/amE9dGhpcy5kZWZhdWx0QWN0aW9uc1tCY106KChYYz09PW51bGx8fHR5cGVvZiBYYz4idSIpJiYoWGM9TWwoKSksamE9Zm5bQmNdJiZmbltCY11bWGNdKSx0eXBlb2YgamE+InUifHwhamEubGVuZ3RofHwhamFbMF0pe3ZhciBnYT0iIjtCYT1bXTtmb3IoUG8gaW4gZm5bQmNdKXRoaXMudGVybWluYWxzX1tQb10mJlBvPiRvJiZCYS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bUG9dKyInIik7X3Muc2hvd1Bvc2l0aW9uP2dhPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKG9vKzEpK2A6CmArX3Muc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtCYS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1hjXXx8WGMpKyInIjpnYT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhvbysxKSsiOiBVbmV4cGVjdGVkICIrKFhjPT1QYT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tYY118fFhjKSsiJyIpLHRoaXMucGFyc2VFcnJvcihnYSx7dGV4dDpfcy5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bWGNdfHxYYyxsaW5lOl9zLnl5bGluZW5vLGxvYzpqMCxleHBlY3RlZDpCYX0pfWlmKGphWzBdaW5zdGFuY2VvZiBBcnJheSYmamEubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitCYysiLCB0b2tlbjogIitYYyk7c3dpdGNoKGphWzBdKXtjYXNlIDE6VW4ucHVzaChYYyksd3QucHVzaChfcy55eXRleHQpLG9uLnB1c2goX3MueXlsbG9jKSxVbi5wdXNoKGphWzFdKSxYYz1udWxsLGpvPV9zLnl5bGVuZyxBbj1fcy55eXRleHQsb289X3MueXlsaW5lbm8sajA9X3MueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihGYz10aGlzLnByb2R1Y3Rpb25zX1tqYVsxXV1bMV0sU2EuJD13dFt3dC5sZW5ndGgtRmNdLFNhLl8kPXtmaXJzdF9saW5lOm9uW29uLmxlbmd0aC0oRmN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpvbltvbi5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpvbltvbi5sZW5ndGgtKEZjfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm9uW29uLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0scG0mJihTYS5fJC5yYW5nZT1bb25bb24ubGVuZ3RoLShGY3x8MSldLnJhbmdlWzBdLG9uW29uLmxlbmd0aC0xXS5yYW5nZVsxXV0pLE91PXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShTYSxbQW4sam8sb28sdGwueXksamFbMV0sd3Qsb25dLmNvbmNhdCh3bykpLHR5cGVvZiBPdTwidSIpcmV0dXJuIE91O0ZjJiYoVW49VW4uc2xpY2UoMCwtMSpGYyoyKSx3dD13dC5zbGljZSgwLC0xKkZjKSxvbj1vbi5zbGljZSgwLC0xKkZjKSksVW4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tqYVsxXV1bMF0pLHd0LnB1c2goU2EuJCksb24ucHVzaChTYS5fJCkseGE9Zm5bVW5bVW4ubGVuZ3RoLTJdXVtVbltVbi5sZW5ndGgtMV1dLFVuLnB1c2goeGEpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSx6cz1mdW5jdGlvbigpe3ZhciBUcj17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihxbixVbil7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihxbixVbik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IocW4pfSxzZXRJbnB1dDpmdW5jdGlvbihGbixxbil7cmV0dXJuIHRoaXMueXk9cW58fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PUZuLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBGbj10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9Rm4sdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPUZuLHRoaXMubWF0Y2hlZCs9Rm47dmFyIHFuPUZuLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gcW4/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLEZufSx1bnB1dDpmdW5jdGlvbihGbil7dmFyIHFuPUZuLmxlbmd0aCxVbj1Gbi5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PUZuK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1xbiksdGhpcy5vZmZzZXQtPXFuO3ZhciBBdD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxVbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPVVuLmxlbmd0aC0xKTt2YXIgd3Q9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlVuPyhVbi5sZW5ndGg9PT1BdC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0F0W0F0Lmxlbmd0aC1Vbi5sZW5ndGhdLmxlbmd0aC1VblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLXFufSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3d0WzBdLHd0WzBdK3RoaXMueXlsZW5nLXFuXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oRm4pe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShGbikpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgRm49dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihGbi5sZW5ndGg+MjA/Ii4uLiI6IiIpK0ZuLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIEZuPXRoaXMubWF0Y2g7cmV0dXJuIEZuLmxlbmd0aDwyMCYmKEZuKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1Gbi5sZW5ndGgpKSwoRm4uc3Vic3RyKDAsMjApKyhGbi5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIEZuPXRoaXMucGFzdElucHV0KCkscW49bmV3IEFycmF5KEZuLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIEZuK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtxbisiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oRm4scW4pe3ZhciBVbixBdCx3dDtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYod3Q9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYod3QueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksQXQ9Rm5bMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLEF0JiYodGhpcy55eWxpbmVubys9QXQubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46QXQ/QXRbQXQubGVuZ3RoLTFdLmxlbmd0aC1BdFtBdC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitGblswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1GblswXSx0aGlzLm1hdGNoKz1GblswXSx0aGlzLm1hdGNoZXM9Rm4sdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoRm5bMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPUZuWzBdLFVuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLHFuLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLFVuKXJldHVybiBVbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgb24gaW4gd3QpdGhpc1tvbl09d3Rbb25dO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIEZuLHFuLFVuLEF0O3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIHd0PXRoaXMuX2N1cnJlbnRSdWxlcygpLG9uPTA7b248d3QubGVuZ3RoO29uKyspaWYoVW49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1t3dFtvbl1dKSxVbiYmKCFxbnx8VW5bMF0ubGVuZ3RoPnFuWzBdLmxlbmd0aCkpe2lmKHFuPVVuLEF0PW9uLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKEZuPXRoaXMudGVzdF9tYXRjaChVbix3dFtvbl0pLEZuIT09ITEpcmV0dXJuIEZuO2lmKHRoaXMuX2JhY2t0cmFjayl7cW49ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gcW4/KEZuPXRoaXMudGVzdF9tYXRjaChxbix3dFtBdF0pLEZuIT09ITE/Rm46ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBxbj10aGlzLm5leHQoKTtyZXR1cm4gcW58fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHFuKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2gocW4pfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBxbj10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBxbj4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHFuKXtyZXR1cm4gcW49dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhxbnx8MCkscW4+PTA/dGhpcy5jb25kaXRpb25TdGFja1txbl06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24ocW4pe3RoaXMuYmVnaW4ocW4pfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHFuLFVuLEF0LHd0KXtzd2l0Y2goQXQpe2Nhc2UgMDpyZXR1cm4gNjtjYXNlIDE6cmV0dXJuIDc7Y2FzZSAyOnJldHVybiA4O2Nhc2UgMzpyZXR1cm4gOTtjYXNlIDQ6cmV0dXJuIDIyO2Nhc2UgNTpyZXR1cm4gMjM7Y2FzZSA2OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwyNDtjYXNlIDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDI2O2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgMTA6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTM6YnJlYWs7Y2FzZSAxNDpjO2JyZWFrO2Nhc2UgMTU6cmV0dXJuIDEyO2Nhc2UgMTY6YnJlYWs7Y2FzZSAxNzpyZXR1cm4gMTE7Y2FzZSAxODpyZXR1cm4gMTU7Y2FzZSAxOTpyZXR1cm4gMTY7Y2FzZSAyMDpyZXR1cm4gMTc7Y2FzZSAyMTpyZXR1cm4gMTg7Y2FzZSAyMjpyZXR1cm4gdGhpcy5iZWdpbigicGVyc29uX2V4dCIpLDQ1O2Nhc2UgMjM6cmV0dXJuIHRoaXMuYmVnaW4oInBlcnNvbiIpLDQ0O2Nhc2UgMjQ6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9leHRfcXVldWUiKSw1MTtjYXNlIDI1OnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fZXh0X2RiIiksNTA7Y2FzZSAyNjpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX2V4dCIpLDQ5O2Nhc2UgMjc6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9xdWV1ZSIpLDQ4O2Nhc2UgMjg6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9kYiIpLDQ3O2Nhc2UgMjk6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbSIpLDQ2O2Nhc2UgMzA6cmV0dXJuIHRoaXMuYmVnaW4oImJvdW5kYXJ5IiksMzc7Y2FzZSAzMTpyZXR1cm4gdGhpcy5iZWdpbigiZW50ZXJwcmlzZV9ib3VuZGFyeSIpLDM0O2Nhc2UgMzI6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9ib3VuZGFyeSIpLDM2O2Nhc2UgMzM6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9leHRfcXVldWUiKSw1NztjYXNlIDM0OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfZXh0X2RiIiksNTY7Y2FzZSAzNTpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX2V4dCIpLDU1O2Nhc2UgMzY6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9xdWV1ZSIpLDU0O2Nhc2UgMzc6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9kYiIpLDUzO2Nhc2UgMzg6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lciIpLDUyO2Nhc2UgMzk6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9ib3VuZGFyeSIpLDM4O2Nhc2UgNDA6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9leHRfcXVldWUiKSw2MztjYXNlIDQxOnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnRfZXh0X2RiIiksNjI7Y2FzZSA0MjpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X2V4dCIpLDYxO2Nhc2UgNDM6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9xdWV1ZSIpLDYwO2Nhc2UgNDQ6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9kYiIpLDU5O2Nhc2UgNDU6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudCIpLDU4O2Nhc2UgNDY6cmV0dXJuIHRoaXMuYmVnaW4oIm5vZGUiKSwzOTtjYXNlIDQ3OnJldHVybiB0aGlzLmJlZ2luKCJub2RlIiksMzk7Y2FzZSA0ODpyZXR1cm4gdGhpcy5iZWdpbigibm9kZV9sIiksNDA7Y2FzZSA0OTpyZXR1cm4gdGhpcy5iZWdpbigibm9kZV9yIiksNDE7Y2FzZSA1MDpyZXR1cm4gdGhpcy5iZWdpbigicmVsIiksNjQ7Y2FzZSA1MTpyZXR1cm4gdGhpcy5iZWdpbigiYmlyZWwiKSw2NTtjYXNlIDUyOnJldHVybiB0aGlzLmJlZ2luKCJyZWxfdSIpLDY2O2Nhc2UgNTM6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF91IiksNjY7Y2FzZSA1NDpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2QiKSw2NztjYXNlIDU1OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfZCIpLDY3O2Nhc2UgNTY6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9sIiksNjg7Y2FzZSA1NzpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2wiKSw2ODtjYXNlIDU4OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfciIpLDY5O2Nhc2UgNTk6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9yIiksNjk7Y2FzZSA2MDpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2IiKSw3MDtjYXNlIDYxOnJldHVybiB0aGlzLmJlZ2luKCJyZWxfaW5kZXgiKSw3MTtjYXNlIDYyOnJldHVybiB0aGlzLmJlZ2luKCJ1cGRhdGVfZWxfc3R5bGUiKSw3MjtjYXNlIDYzOnJldHVybiB0aGlzLmJlZ2luKCJ1cGRhdGVfcmVsX3N0eWxlIiksNzM7Y2FzZSA2NDpyZXR1cm4gdGhpcy5iZWdpbigidXBkYXRlX2xheW91dF9jb25maWciKSw3NDtjYXNlIDY1OnJldHVybiJFT0ZfSU5fU1RSVUNUIjtjYXNlIDY2OnJldHVybiB0aGlzLmJlZ2luKCJhdHRyaWJ1dGUiKSwiQVRUUklCVVRFX0VNUFRZIjtjYXNlIDY3OnRoaXMuYmVnaW4oImF0dHJpYnV0ZSIpO2JyZWFrO2Nhc2UgNjg6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDY5OnJldHVybiA4MDtjYXNlIDcwOmJyZWFrO2Nhc2UgNzE6cmV0dXJuIDgwO2Nhc2UgNzI6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSA3Mzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA3NDpyZXR1cm4iU1RSIjtjYXNlIDc1OnRoaXMuYmVnaW4oInN0cmluZ19rdiIpO2JyZWFrO2Nhc2UgNzY6cmV0dXJuIHRoaXMuYmVnaW4oInN0cmluZ19rdl9rZXkiKSwiU1RSX0tFWSI7Y2FzZSA3Nzp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigic3RyaW5nX2t2X3ZhbHVlIik7YnJlYWs7Y2FzZSA3ODpyZXR1cm4iU1RSX1ZBTFVFIjtjYXNlIDc5OnRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA4MDpyZXR1cm4iU1RSIjtjYXNlIDgxOnJldHVybiJMQlJBQ0UiO2Nhc2UgODI6cmV0dXJuIlJCUkFDRSI7Y2FzZSA4MzpyZXR1cm4iU1BBQ0UiO2Nhc2UgODQ6cmV0dXJuIkVPTCI7Y2FzZSA4NTpyZXR1cm4gMTR9fSxydWxlczpbL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS8sL14oPzp0aXRsZVxzW14jXG47XSspLywvXig/OmFjY0Rlc2NyaXB0aW9uXHNbXiNcbjtdKykvLC9eKD86YWNjVGl0bGVccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKlx7XHMqKS8sL14oPzpbXH1dKS8sL14oPzpbXlx9XSopLywvXig/OiUlKD8hXHspKlteXG5dKihccj9cbj8pKykvLC9eKD86JSVbXlxuXSooXHI/XG4pKikvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86QzRDb250ZXh0XGIpLywvXig/OkM0Q29udGFpbmVyXGIpLywvXig/OkM0Q29tcG9uZW50XGIpLywvXig/OkM0RHluYW1pY1xiKS8sL14oPzpDNERlcGxveW1lbnRcYikvLC9eKD86UGVyc29uX0V4dFxiKS8sL14oPzpQZXJzb25cYikvLC9eKD86U3lzdGVtUXVldWVfRXh0XGIpLywvXig/OlN5c3RlbURiX0V4dFxiKS8sL14oPzpTeXN0ZW1fRXh0XGIpLywvXig/OlN5c3RlbVF1ZXVlXGIpLywvXig/OlN5c3RlbURiXGIpLywvXig/OlN5c3RlbVxiKS8sL14oPzpCb3VuZGFyeVxiKS8sL14oPzpFbnRlcnByaXNlX0JvdW5kYXJ5XGIpLywvXig/OlN5c3RlbV9Cb3VuZGFyeVxiKS8sL14oPzpDb250YWluZXJRdWV1ZV9FeHRcYikvLC9eKD86Q29udGFpbmVyRGJfRXh0XGIpLywvXig/OkNvbnRhaW5lcl9FeHRcYikvLC9eKD86Q29udGFpbmVyUXVldWVcYikvLC9eKD86Q29udGFpbmVyRGJcYikvLC9eKD86Q29udGFpbmVyXGIpLywvXig/OkNvbnRhaW5lcl9Cb3VuZGFyeVxiKS8sL14oPzpDb21wb25lbnRRdWV1ZV9FeHRcYikvLC9eKD86Q29tcG9uZW50RGJfRXh0XGIpLywvXig/OkNvbXBvbmVudF9FeHRcYikvLC9eKD86Q29tcG9uZW50UXVldWVcYikvLC9eKD86Q29tcG9uZW50RGJcYikvLC9eKD86Q29tcG9uZW50XGIpLywvXig/OkRlcGxveW1lbnRfTm9kZVxiKS8sL14oPzpOb2RlXGIpLywvXig/Ok5vZGVfTFxiKS8sL14oPzpOb2RlX1JcYikvLC9eKD86UmVsXGIpLywvXig/OkJpUmVsXGIpLywvXig/OlJlbF9VcFxiKS8sL14oPzpSZWxfVVxiKS8sL14oPzpSZWxfRG93blxiKS8sL14oPzpSZWxfRFxiKS8sL14oPzpSZWxfTGVmdFxiKS8sL14oPzpSZWxfTFxiKS8sL14oPzpSZWxfUmlnaHRcYikvLC9eKD86UmVsX1JcYikvLC9eKD86UmVsX0JhY2tcYikvLC9eKD86UmVsSW5kZXhcYikvLC9eKD86VXBkYXRlRWxlbWVudFN0eWxlXGIpLywvXig/OlVwZGF0ZVJlbFN0eWxlXGIpLywvXig/OlVwZGF0ZUxheW91dENvbmZpZ1xiKS8sL14oPzokKS8sL14oPzpbKF1bIF0qWyxdKS8sL14oPzpbKF0pLywvXig/OlspXSkvLC9eKD86LCwpLywvXig/OiwpLywvXig/OlsgXSpbIl1bIl0pLywvXig/OlsgXSpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OlsgXSpbXCRdKS8sL14oPzpbXj1dKikvLC9eKD86Wz1dWyBdKlsiXSkvLC9eKD86W14iXSspLywvXig/OlsiXSkvLC9eKD86W14sXSspLywvXig/Olx7KS8sL14oPzpcfSkvLC9eKD86W1xzXSspLywvXig/OltcblxyXSspLywvXig/OiQpL10sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzExLDEyXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzldLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbN10saW5jbHVzaXZlOiExfSxzdHJpbmdfa3ZfdmFsdWU6e3J1bGVzOls3OCw3OV0saW5jbHVzaXZlOiExfSxzdHJpbmdfa3Zfa2V5OntydWxlczpbNzddLGluY2x1c2l2ZTohMX0sc3RyaW5nX2t2OntydWxlczpbNzZdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbNzMsNzRdLGluY2x1c2l2ZTohMX0sYXR0cmlidXRlOntydWxlczpbNjgsNjksNzAsNzEsNzIsNzUsODBdLGluY2x1c2l2ZTohMX0sdXBkYXRlX2xheW91dF9jb25maWc6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSx1cGRhdGVfcmVsX3N0eWxlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sdXBkYXRlX2VsX3N0eWxlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX2I6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfcjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9sOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX2Q6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfdTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9iaTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxyZWw6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlX3I6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlX2w6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0saW5kZXg6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0scmVsX2luZGV4OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2V4dF9xdWV1ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxjb21wb25lbnRfZXh0X2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9ib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9leHRfcXVldWU6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfZXh0X2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29udGFpbmVyX2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGJpcmVsOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2JvdW5kYXJ5OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sZW50ZXJwcmlzZV9ib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGJvdW5kYXJ5OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2V4dF9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9leHRfZGI6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxzeXN0ZW1fZXh0OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX3F1ZXVlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scGVyc29uX2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHBlcnNvbjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDgsMTAsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsODEsODIsODMsODQsODVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gVHJ9KCk7TWEubGV4ZXI9enM7ZnVuY3Rpb24gYW8oKXt0aGlzLnl5PXt9fXJldHVybiBhby5wcm90b3R5cGU9TWEsTWEuUGFyc2VyPWFvLG5ldyBhb30oKTtDUS5wYXJzZXI9Q1E7Y29uc3QgRFZ0PUNRO2xldCBSMz1bXSxNOT1bIiJdLE9wPSJnbG9iYWwiLGozPSIiLFE0PVt7YWxpYXM6Imdsb2JhbCIsbGFiZWw6e3RleHQ6Imdsb2JhbCJ9LHR5cGU6e3RleHQ6Imdsb2JhbCJ9LHRhZ3M6bnVsbCxsaW5rOm51bGwscGFyZW50Qm91bmRhcnk6IiJ9XSxwUj1bXSxSYmU9IiIsamJlPSExLFNRPTQsX1E9Mjt2YXIgeHFlO2NvbnN0IElWdD1mdW5jdGlvbigpe3JldHVybiB4cWV9LE9WdD1mdW5jdGlvbihpKXt4cWU9WWYoaSxxdCgpKX0sTlZ0PWZ1bmN0aW9uKGkscyx1LGQscCx2LGIseSxUKXtpZihpPT1udWxsfHxzPT09dm9pZCAwfHxzPT09bnVsbHx8dT09PXZvaWQgMHx8dT09PW51bGx8fGQ9PT12b2lkIDB8fGQ9PT1udWxsKXJldHVybjtsZXQgXz17fTtjb25zdCBBPXBSLmZpbmQoUD0+UC5mcm9tPT09cyYmUC50bz09PXUpO2lmKEE/Xz1BOnBSLnB1c2goXyksXy50eXBlPWksXy5mcm9tPXMsXy50bz11LF8ubGFiZWw9e3RleHQ6ZH0scD09bnVsbClfLnRlY2huPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBwPT0ib2JqZWN0Iil7bGV0W1AsUl09T2JqZWN0LmVudHJpZXMocClbMF07X1tQXT17dGV4dDpSfX1lbHNlIF8udGVjaG49e3RleHQ6cH07aWYodj09bnVsbClfLmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiB2PT0ib2JqZWN0Iil7bGV0W1AsUl09T2JqZWN0LmVudHJpZXModilbMF07X1tQXT17dGV4dDpSfX1lbHNlIF8uZGVzY3I9e3RleHQ6dn07aWYodHlwZW9mIGI9PSJvYmplY3QiKXtsZXRbUCxSXT1PYmplY3QuZW50cmllcyhiKVswXTtfW1BdPVJ9ZWxzZSBfLnNwcml0ZT1iO2lmKHR5cGVvZiB5PT0ib2JqZWN0Iil7bGV0W1AsUl09T2JqZWN0LmVudHJpZXMoeSlbMF07X1tQXT1SfWVsc2UgXy50YWdzPXk7aWYodHlwZW9mIFQ9PSJvYmplY3QiKXtsZXRbUCxSXT1PYmplY3QuZW50cmllcyhUKVswXTtfW1BdPVJ9ZWxzZSBfLmxpbms9VDtfLndyYXA9RDkoKX0sUFZ0PWZ1bmN0aW9uKGkscyx1LGQscCx2LGIpe2lmKHM9PT1udWxsfHx1PT09bnVsbClyZXR1cm47bGV0IHk9e307Y29uc3QgVD1SMy5maW5kKF89Pl8uYWxpYXM9PT1zKTtpZihUJiZzPT09VC5hbGlhcz95PVQ6KHkuYWxpYXM9cyxSMy5wdXNoKHkpKSx1PT1udWxsP3kubGFiZWw9e3RleHQ6IiJ9OnkubGFiZWw9e3RleHQ6dX0sZD09bnVsbCl5LmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBkPT0ib2JqZWN0Iil7bGV0W18sQV09T2JqZWN0LmVudHJpZXMoZClbMF07eVtfXT17dGV4dDpBfX1lbHNlIHkuZGVzY3I9e3RleHQ6ZH07aWYodHlwZW9mIHA9PSJvYmplY3QiKXtsZXRbXyxBXT1PYmplY3QuZW50cmllcyhwKVswXTt5W19dPUF9ZWxzZSB5LnNwcml0ZT1wO2lmKHR5cGVvZiB2PT0ib2JqZWN0Iil7bGV0W18sQV09T2JqZWN0LmVudHJpZXModilbMF07eVtfXT1BfWVsc2UgeS50YWdzPXY7aWYodHlwZW9mIGI9PSJvYmplY3QiKXtsZXRbXyxBXT1PYmplY3QuZW50cmllcyhiKVswXTt5W19dPUF9ZWxzZSB5Lmxpbms9Yjt5LnR5cGVDNFNoYXBlPXt0ZXh0Oml9LHkucGFyZW50Qm91bmRhcnk9T3AseS53cmFwPUQ5KCl9LEJWdD1mdW5jdGlvbihpLHMsdSxkLHAsdixiLHkpe2lmKHM9PT1udWxsfHx1PT09bnVsbClyZXR1cm47bGV0IFQ9e307Y29uc3QgXz1SMy5maW5kKEE9PkEuYWxpYXM9PT1zKTtpZihfJiZzPT09Xy5hbGlhcz9UPV86KFQuYWxpYXM9cyxSMy5wdXNoKFQpKSx1PT1udWxsP1QubGFiZWw9e3RleHQ6IiJ9OlQubGFiZWw9e3RleHQ6dX0sZD09bnVsbClULnRlY2huPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBkPT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMoZClbMF07VFtBXT17dGV4dDpQfX1lbHNlIFQudGVjaG49e3RleHQ6ZH07aWYocD09bnVsbClULmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBwPT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMocClbMF07VFtBXT17dGV4dDpQfX1lbHNlIFQuZGVzY3I9e3RleHQ6cH07aWYodHlwZW9mIHY9PSJvYmplY3QiKXtsZXRbQSxQXT1PYmplY3QuZW50cmllcyh2KVswXTtUW0FdPVB9ZWxzZSBULnNwcml0ZT12O2lmKHR5cGVvZiBiPT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMoYilbMF07VFtBXT1QfWVsc2UgVC50YWdzPWI7aWYodHlwZW9mIHk9PSJvYmplY3QiKXtsZXRbQSxQXT1PYmplY3QuZW50cmllcyh5KVswXTtUW0FdPVB9ZWxzZSBULmxpbms9eTtULndyYXA9RDkoKSxULnR5cGVDNFNoYXBlPXt0ZXh0Oml9LFQucGFyZW50Qm91bmRhcnk9T3B9LEZWdD1mdW5jdGlvbihpLHMsdSxkLHAsdixiLHkpe2lmKHM9PT1udWxsfHx1PT09bnVsbClyZXR1cm47bGV0IFQ9e307Y29uc3QgXz1SMy5maW5kKEE9PkEuYWxpYXM9PT1zKTtpZihfJiZzPT09Xy5hbGlhcz9UPV86KFQuYWxpYXM9cyxSMy5wdXNoKFQpKSx1PT1udWxsP1QubGFiZWw9e3RleHQ6IiJ9OlQubGFiZWw9e3RleHQ6dX0sZD09bnVsbClULnRlY2huPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBkPT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMoZClbMF07VFtBXT17dGV4dDpQfX1lbHNlIFQudGVjaG49e3RleHQ6ZH07aWYocD09bnVsbClULmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBwPT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMocClbMF07VFtBXT17dGV4dDpQfX1lbHNlIFQuZGVzY3I9e3RleHQ6cH07aWYodHlwZW9mIHY9PSJvYmplY3QiKXtsZXRbQSxQXT1PYmplY3QuZW50cmllcyh2KVswXTtUW0FdPVB9ZWxzZSBULnNwcml0ZT12O2lmKHR5cGVvZiBiPT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMoYilbMF07VFtBXT1QfWVsc2UgVC50YWdzPWI7aWYodHlwZW9mIHk9PSJvYmplY3QiKXtsZXRbQSxQXT1PYmplY3QuZW50cmllcyh5KVswXTtUW0FdPVB9ZWxzZSBULmxpbms9eTtULndyYXA9RDkoKSxULnR5cGVDNFNoYXBlPXt0ZXh0Oml9LFQucGFyZW50Qm91bmRhcnk9T3B9LFJWdD1mdW5jdGlvbihpLHMsdSxkLHApe2lmKGk9PT1udWxsfHxzPT09bnVsbClyZXR1cm47bGV0IHY9e307Y29uc3QgYj1RNC5maW5kKHk9PnkuYWxpYXM9PT1pKTtpZihiJiZpPT09Yi5hbGlhcz92PWI6KHYuYWxpYXM9aSxRNC5wdXNoKHYpKSxzPT1udWxsP3YubGFiZWw9e3RleHQ6IiJ9OnYubGFiZWw9e3RleHQ6c30sdT09bnVsbCl2LnR5cGU9e3RleHQ6InN5c3RlbSJ9O2Vsc2UgaWYodHlwZW9mIHU9PSJvYmplY3QiKXtsZXRbeSxUXT1PYmplY3QuZW50cmllcyh1KVswXTt2W3ldPXt0ZXh0OlR9fWVsc2Ugdi50eXBlPXt0ZXh0OnV9O2lmKHR5cGVvZiBkPT0ib2JqZWN0Iil7bGV0W3ksVF09T2JqZWN0LmVudHJpZXMoZClbMF07dlt5XT1UfWVsc2Ugdi50YWdzPWQ7aWYodHlwZW9mIHA9PSJvYmplY3QiKXtsZXRbeSxUXT1PYmplY3QuZW50cmllcyhwKVswXTt2W3ldPVR9ZWxzZSB2Lmxpbms9cDt2LnBhcmVudEJvdW5kYXJ5PU9wLHYud3JhcD1EOSgpLGozPU9wLE9wPWksTTkucHVzaChqMyl9LGpWdD1mdW5jdGlvbihpLHMsdSxkLHApe2lmKGk9PT1udWxsfHxzPT09bnVsbClyZXR1cm47bGV0IHY9e307Y29uc3QgYj1RNC5maW5kKHk9PnkuYWxpYXM9PT1pKTtpZihiJiZpPT09Yi5hbGlhcz92PWI6KHYuYWxpYXM9aSxRNC5wdXNoKHYpKSxzPT1udWxsP3YubGFiZWw9e3RleHQ6IiJ9OnYubGFiZWw9e3RleHQ6c30sdT09bnVsbCl2LnR5cGU9e3RleHQ6ImNvbnRhaW5lciJ9O2Vsc2UgaWYodHlwZW9mIHU9PSJvYmplY3QiKXtsZXRbeSxUXT1PYmplY3QuZW50cmllcyh1KVswXTt2W3ldPXt0ZXh0OlR9fWVsc2Ugdi50eXBlPXt0ZXh0OnV9O2lmKHR5cGVvZiBkPT0ib2JqZWN0Iil7bGV0W3ksVF09T2JqZWN0LmVudHJpZXMoZClbMF07dlt5XT1UfWVsc2Ugdi50YWdzPWQ7aWYodHlwZW9mIHA9PSJvYmplY3QiKXtsZXRbeSxUXT1PYmplY3QuZW50cmllcyhwKVswXTt2W3ldPVR9ZWxzZSB2Lmxpbms9cDt2LnBhcmVudEJvdW5kYXJ5PU9wLHYud3JhcD1EOSgpLGozPU9wLE9wPWksTTkucHVzaChqMyl9LCRWdD1mdW5jdGlvbihpLHMsdSxkLHAsdixiLHkpe2lmKHM9PT1udWxsfHx1PT09bnVsbClyZXR1cm47bGV0IFQ9e307Y29uc3QgXz1RNC5maW5kKEE9PkEuYWxpYXM9PT1zKTtpZihfJiZzPT09Xy5hbGlhcz9UPV86KFQuYWxpYXM9cyxRNC5wdXNoKFQpKSx1PT1udWxsP1QubGFiZWw9e3RleHQ6IiJ9OlQubGFiZWw9e3RleHQ6dX0sZD09bnVsbClULnR5cGU9e3RleHQ6Im5vZGUifTtlbHNlIGlmKHR5cGVvZiBkPT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMoZClbMF07VFtBXT17dGV4dDpQfX1lbHNlIFQudHlwZT17dGV4dDpkfTtpZihwPT1udWxsKVQuZGVzY3I9e3RleHQ6IiJ9O2Vsc2UgaWYodHlwZW9mIHA9PSJvYmplY3QiKXtsZXRbQSxQXT1PYmplY3QuZW50cmllcyhwKVswXTtUW0FdPXt0ZXh0OlB9fWVsc2UgVC5kZXNjcj17dGV4dDpwfTtpZih0eXBlb2YgYj09Im9iamVjdCIpe2xldFtBLFBdPU9iamVjdC5lbnRyaWVzKGIpWzBdO1RbQV09UH1lbHNlIFQudGFncz1iO2lmKHR5cGVvZiB5PT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMoeSlbMF07VFtBXT1QfWVsc2UgVC5saW5rPXk7VC5ub2RlVHlwZT1pLFQucGFyZW50Qm91bmRhcnk9T3AsVC53cmFwPUQ5KCksajM9T3AsT3A9cyxNOS5wdXNoKGozKX0selZ0PWZ1bmN0aW9uKCl7T3A9ajMsTTkucG9wKCksajM9TTkucG9wKCksTTkucHVzaChqMyl9LHFWdD1mdW5jdGlvbihpLHMsdSxkLHAsdixiLHksVCxfLEEpe2xldCBQPVIzLmZpbmQoUj0+Ui5hbGlhcz09PXMpO2lmKCEoUD09PXZvaWQgMCYmKFA9UTQuZmluZChSPT5SLmFsaWFzPT09cyksUD09PXZvaWQgMCkpKXtpZih1IT1udWxsKWlmKHR5cGVvZiB1PT0ib2JqZWN0Iil7bGV0W1IsRl09T2JqZWN0LmVudHJpZXModSlbMF07UFtSXT1GfWVsc2UgUC5iZ0NvbG9yPXU7aWYoZCE9bnVsbClpZih0eXBlb2YgZD09Im9iamVjdCIpe2xldFtSLEZdPU9iamVjdC5lbnRyaWVzKGQpWzBdO1BbUl09Rn1lbHNlIFAuZm9udENvbG9yPWQ7aWYocCE9bnVsbClpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtSLEZdPU9iamVjdC5lbnRyaWVzKHApWzBdO1BbUl09Rn1lbHNlIFAuYm9yZGVyQ29sb3I9cDtpZih2IT1udWxsKWlmKHR5cGVvZiB2PT0ib2JqZWN0Iil7bGV0W1IsRl09T2JqZWN0LmVudHJpZXModilbMF07UFtSXT1GfWVsc2UgUC5zaGFkb3dpbmc9djtpZihiIT1udWxsKWlmKHR5cGVvZiBiPT0ib2JqZWN0Iil7bGV0W1IsRl09T2JqZWN0LmVudHJpZXMoYilbMF07UFtSXT1GfWVsc2UgUC5zaGFwZT1iO2lmKHkhPW51bGwpaWYodHlwZW9mIHk9PSJvYmplY3QiKXtsZXRbUixGXT1PYmplY3QuZW50cmllcyh5KVswXTtQW1JdPUZ9ZWxzZSBQLnNwcml0ZT15O2lmKFQhPW51bGwpaWYodHlwZW9mIFQ9PSJvYmplY3QiKXtsZXRbUixGXT1PYmplY3QuZW50cmllcyhUKVswXTtQW1JdPUZ9ZWxzZSBQLnRlY2huPVQ7aWYoXyE9bnVsbClpZih0eXBlb2YgXz09Im9iamVjdCIpe2xldFtSLEZdPU9iamVjdC5lbnRyaWVzKF8pWzBdO1BbUl09Rn1lbHNlIFAubGVnZW5kVGV4dD1fO2lmKEEhPW51bGwpaWYodHlwZW9mIEE9PSJvYmplY3QiKXtsZXRbUixGXT1PYmplY3QuZW50cmllcyhBKVswXTtQW1JdPUZ9ZWxzZSBQLmxlZ2VuZFNwcml0ZT1BfX0sSFZ0PWZ1bmN0aW9uKGkscyx1LGQscCx2LGIpe2NvbnN0IHk9cFIuZmluZChUPT5ULmZyb209PT1zJiZULnRvPT09dSk7aWYoeSE9PXZvaWQgMCl7aWYoZCE9bnVsbClpZih0eXBlb2YgZD09Im9iamVjdCIpe2xldFtULF9dPU9iamVjdC5lbnRyaWVzKGQpWzBdO3lbVF09X31lbHNlIHkudGV4dENvbG9yPWQ7aWYocCE9bnVsbClpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtULF9dPU9iamVjdC5lbnRyaWVzKHApWzBdO3lbVF09X31lbHNlIHkubGluZUNvbG9yPXA7aWYodiE9bnVsbClpZih0eXBlb2Ygdj09Im9iamVjdCIpe2xldFtULF9dPU9iamVjdC5lbnRyaWVzKHYpWzBdO3lbVF09cGFyc2VJbnQoXyl9ZWxzZSB5Lm9mZnNldFg9cGFyc2VJbnQodik7aWYoYiE9bnVsbClpZih0eXBlb2YgYj09Im9iamVjdCIpe2xldFtULF9dPU9iamVjdC5lbnRyaWVzKGIpWzBdO3lbVF09cGFyc2VJbnQoXyl9ZWxzZSB5Lm9mZnNldFk9cGFyc2VJbnQoYil9fSxWVnQ9ZnVuY3Rpb24oaSxzLHUpe2xldCBkPVNRLHA9X1E7aWYodHlwZW9mIHM9PSJvYmplY3QiKXtjb25zdCB2PU9iamVjdC52YWx1ZXMocylbMF07ZD1wYXJzZUludCh2KX1lbHNlIGQ9cGFyc2VJbnQocyk7aWYodHlwZW9mIHU9PSJvYmplY3QiKXtjb25zdCB2PU9iamVjdC52YWx1ZXModSlbMF07cD1wYXJzZUludCh2KX1lbHNlIHA9cGFyc2VJbnQodSk7ZD49MSYmKFNRPWQpLHA+PTEmJihfUT1wKX0sVVZ0PWZ1bmN0aW9uKCl7cmV0dXJuIFNRfSxHVnQ9ZnVuY3Rpb24oKXtyZXR1cm4gX1F9LEtWdD1mdW5jdGlvbigpe3JldHVybiBPcH0sV1Z0PWZ1bmN0aW9uKCl7cmV0dXJuIGozfSxrcWU9ZnVuY3Rpb24oaSl7cmV0dXJuIGk9PW51bGw/UjM6UjMuZmlsdGVyKHM9PnMucGFyZW50Qm91bmRhcnk9PT1pKX0sWVZ0PWZ1bmN0aW9uKGkpe3JldHVybiBSMy5maW5kKHM9PnMuYWxpYXM9PT1pKX0sWFZ0PWZ1bmN0aW9uKGkpe3JldHVybiBPYmplY3Qua2V5cyhrcWUoaSkpfSxFcWU9ZnVuY3Rpb24oaSl7cmV0dXJuIGk9PW51bGw/UTQ6UTQuZmlsdGVyKHM9PnMucGFyZW50Qm91bmRhcnk9PT1pKX0sUVZ0PUVxZSxKVnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcFJ9LFpWdD1mdW5jdGlvbigpe3JldHVybiBSYmV9LGVVdD1mdW5jdGlvbihpKXtqYmU9aX0sRDk9ZnVuY3Rpb24oKXtyZXR1cm4gamJlfSwkYmU9e2FkZFBlcnNvbk9yU3lzdGVtOlBWdCxhZGRQZXJzb25PclN5c3RlbUJvdW5kYXJ5OlJWdCxhZGRDb250YWluZXI6QlZ0LGFkZENvbnRhaW5lckJvdW5kYXJ5OmpWdCxhZGRDb21wb25lbnQ6RlZ0LGFkZERlcGxveW1lbnROb2RlOiRWdCxwb3BCb3VuZGFyeVBhcnNlU3RhY2s6elZ0LGFkZFJlbDpOVnQsdXBkYXRlRWxTdHlsZTpxVnQsdXBkYXRlUmVsU3R5bGU6SFZ0LHVwZGF0ZUxheW91dENvbmZpZzpWVnQsYXV0b1dyYXA6RDksc2V0V3JhcDplVXQsZ2V0QzRTaGFwZUFycmF5OmtxZSxnZXRDNFNoYXBlOllWdCxnZXRDNFNoYXBlS2V5czpYVnQsZ2V0Qm91bmRhcmllczpFcWUsZ2V0Qm91bmRhcnlzOlFWdCxnZXRDdXJyZW50Qm91bmRhcnlQYXJzZTpLVnQsZ2V0UGFyZW50Qm91bmRhcnlQYXJzZTpXVnQsZ2V0UmVsczpKVnQsZ2V0VGl0bGU6WlZ0LGdldEM0VHlwZTpJVnQsZ2V0QzRTaGFwZUluUm93OlVWdCxnZXRDNEJvdW5kYXJ5SW5Sb3c6R1Z0LHNldEFjY1RpdGxlOkJnLGdldEFjY1RpdGxlOkNwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLHNldEFjY0Rlc2NyaXB0aW9uOlNwLGdldENvbmZpZzooKT0+cXQoKS5jNCxjbGVhcjpmdW5jdGlvbigpe1IzPVtdLFE0PVt7YWxpYXM6Imdsb2JhbCIsbGFiZWw6e3RleHQ6Imdsb2JhbCJ9LHR5cGU6e3RleHQ6Imdsb2JhbCJ9LHRhZ3M6bnVsbCxsaW5rOm51bGwscGFyZW50Qm91bmRhcnk6IiJ9XSxqMz0iIixPcD0iZ2xvYmFsIixNOT1bIiJdLHBSPVtdLE05PVsiIl0sUmJlPSIiLGpiZT0hMSxTUT00LF9RPTJ9LExJTkVUWVBFOntTT0xJRDowLERPVFRFRDoxLE5PVEU6MixTT0xJRF9DUk9TUzozLERPVFRFRF9DUk9TUzo0LFNPTElEX09QRU46NSxET1RURURfT1BFTjo2LExPT1BfU1RBUlQ6MTAsTE9PUF9FTkQ6MTEsQUxUX1NUQVJUOjEyLEFMVF9FTFNFOjEzLEFMVF9FTkQ6MTQsT1BUX1NUQVJUOjE1LE9QVF9FTkQ6MTYsQUNUSVZFX1NUQVJUOjE3LEFDVElWRV9FTkQ6MTgsUEFSX1NUQVJUOjE5LFBBUl9BTkQ6MjAsUEFSX0VORDoyMSxSRUNUX1NUQVJUOjIyLFJFQ1RfRU5EOjIzLFNPTElEX1BPSU5UOjI0LERPVFRFRF9QT0lOVDoyNX0sQVJST1dUWVBFOntGSUxMRUQ6MCxPUEVOOjF9LFBMQUNFTUVOVDp7TEVGVE9GOjAsUklHSFRPRjoxLE9WRVI6Mn0sc2V0VGl0bGU6ZnVuY3Rpb24oaSl7UmJlPVlmKGkscXQoKSl9LHNldEM0VHlwZTpPVnR9LEFRPShpLHMpPT57Y29uc3QgdT1pLmFwcGVuZCgicmVjdCIpO2lmKHUuYXR0cigieCIscy54KSx1LmF0dHIoInkiLHMueSksdS5hdHRyKCJmaWxsIixzLmZpbGwpLHUuYXR0cigic3Ryb2tlIixzLnN0cm9rZSksdS5hdHRyKCJ3aWR0aCIscy53aWR0aCksdS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KSxzLm5hbWUmJnUuYXR0cigibmFtZSIscy5uYW1lKSxzLnJ4IT09dm9pZCAwJiZ1LmF0dHIoInJ4IixzLnJ4KSxzLnJ5IT09dm9pZCAwJiZ1LmF0dHIoInJ5IixzLnJ5KSxzLmF0dHJzIT09dm9pZCAwKWZvcihjb25zdCBkIGluIHMuYXR0cnMpdS5hdHRyKGQscy5hdHRyc1tkXSk7cmV0dXJuIHMuY2xhc3MhPT12b2lkIDAmJnUuYXR0cigiY2xhc3MiLHMuY2xhc3MpLHV9LFRxZT0oaSxzKT0+e2NvbnN0IHU9e3g6cy5zdGFydHgseTpzLnN0YXJ0eSx3aWR0aDpzLnN0b3B4LXMuc3RhcnR4LGhlaWdodDpzLnN0b3B5LXMuc3RhcnR5LGZpbGw6cy5maWxsLHN0cm9rZTpzLnN0cm9rZSxjbGFzczoicmVjdCJ9O0FRKGksdSkubG93ZXIoKX0sdFV0PShpLHMpPT57Y29uc3QgdT1zLnRleHQucmVwbGFjZShmRCwiICIpLGQ9aS5hcHBlbmQoInRleHQiKTtkLmF0dHIoIngiLHMueCksZC5hdHRyKCJ5IixzLnkpLGQuYXR0cigiY2xhc3MiLCJsZWdlbmQiKSxkLnN0eWxlKCJ0ZXh0LWFuY2hvciIscy5hbmNob3IpLHMuY2xhc3MhPT12b2lkIDAmJmQuYXR0cigiY2xhc3MiLHMuY2xhc3MpO2NvbnN0IHA9ZC5hcHBlbmQoInRzcGFuIik7cmV0dXJuIHAuYXR0cigieCIscy54K3MudGV4dE1hcmdpbioyKSxwLnRleHQodSksZH0sblV0PShpLHMsdSxkKT0+e2NvbnN0IHA9aS5hcHBlbmQoImltYWdlIik7cC5hdHRyKCJ4IixzKSxwLmF0dHIoInkiLHUpO2NvbnN0IHY9cDkuc2FuaXRpemVVcmwoZCk7cC5hdHRyKCJ4bGluazpocmVmIix2KX0sclV0PShpLHMsdSxkKT0+e2NvbnN0IHA9aS5hcHBlbmQoInVzZSIpO3AuYXR0cigieCIscykscC5hdHRyKCJ5Iix1KTtjb25zdCB2PXA5LnNhbml0aXplVXJsKGQpO3AuYXR0cigieGxpbms6aHJlZiIsYCMke3Z9YCl9LHFDPSgpPT4oe3g6MCx5OjAsd2lkdGg6MTAwLGhlaWdodDoxMDAsZmlsbDoiI0VERjJBRSIsc3Ryb2tlOiIjNjY2IixhbmNob3I6InN0YXJ0IixyeDowLHJ5OjB9KSx6YmU9KCk9Pih7eDowLHk6MCx3aWR0aDoxMDAsaGVpZ2h0OjEwMCwidGV4dC1hbmNob3IiOiJzdGFydCIsc3R5bGU6IiM2NjYiLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdHNwYW46ITB9KSxxYmU9ZnVuY3Rpb24oaSxzKXtyZXR1cm4gQVEoaSxzKX0sQ3FlPWZ1bmN0aW9uKGkscyx1LGQscCx2KXtjb25zdCBiPWkuYXBwZW5kKCJpbWFnZSIpO2IuYXR0cigid2lkdGgiLHMpLGIuYXR0cigiaGVpZ2h0Iix1KSxiLmF0dHIoIngiLGQpLGIuYXR0cigieSIscCk7bGV0IHk9di5zdGFydHNXaXRoKCJkYXRhOmltYWdlL3BuZztiYXNlNjQiKT92OnA5LnNhbml0aXplVXJsKHYpO2IuYXR0cigieGxpbms6aHJlZiIseSl9LGlVdD0oaSxzLHUpPT57Y29uc3QgZD1pLmFwcGVuZCgiZyIpO2xldCBwPTA7Zm9yKGxldCB2IG9mIHMpe2xldCBiPXYudGV4dENvbG9yP3YudGV4dENvbG9yOiIjNDQ0NDQ0Iix5PXYubGluZUNvbG9yP3YubGluZUNvbG9yOiIjNDQ0NDQ0IixUPXYub2Zmc2V0WD9wYXJzZUludCh2Lm9mZnNldFgpOjAsXz12Lm9mZnNldFk/cGFyc2VJbnQodi5vZmZzZXRZKTowLEE9IiI7aWYocD09PTApe2xldCBSPWQuYXBwZW5kKCJsaW5lIik7Ui5hdHRyKCJ4MSIsdi5zdGFydFBvaW50LngpLFIuYXR0cigieTEiLHYuc3RhcnRQb2ludC55KSxSLmF0dHIoIngyIix2LmVuZFBvaW50LngpLFIuYXR0cigieTIiLHYuZW5kUG9pbnQueSksUi5hdHRyKCJzdHJva2Utd2lkdGgiLCIxIiksUi5hdHRyKCJzdHJva2UiLHkpLFIuc3R5bGUoImZpbGwiLCJub25lIiksdi50eXBlIT09InJlbF9iIiYmUi5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrQSsiI2Fycm93aGVhZCkiKSwodi50eXBlPT09ImJpcmVsInx8di50eXBlPT09InJlbF9iIikmJlIuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrQSsiI2Fycm93ZW5kKSIpLHA9LTF9ZWxzZXtsZXQgUj1kLmFwcGVuZCgicGF0aCIpO1IuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxIikuYXR0cigic3Ryb2tlIix5KS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHkgUWNvbnRyb2x4LGNvbnRyb2x5IHN0b3B4LHN0b3B5ICIucmVwbGFjZUFsbCgic3RhcnR4Iix2LnN0YXJ0UG9pbnQueCkucmVwbGFjZUFsbCgic3RhcnR5Iix2LnN0YXJ0UG9pbnQueSkucmVwbGFjZUFsbCgiY29udHJvbHgiLHYuc3RhcnRQb2ludC54Kyh2LmVuZFBvaW50Lngtdi5zdGFydFBvaW50LngpLzItKHYuZW5kUG9pbnQueC12LnN0YXJ0UG9pbnQueCkvNCkucmVwbGFjZUFsbCgiY29udHJvbHkiLHYuc3RhcnRQb2ludC55Kyh2LmVuZFBvaW50Lnktdi5zdGFydFBvaW50LnkpLzIpLnJlcGxhY2VBbGwoInN0b3B4Iix2LmVuZFBvaW50LngpLnJlcGxhY2VBbGwoInN0b3B5Iix2LmVuZFBvaW50LnkpKSx2LnR5cGUhPT0icmVsX2IiJiZSLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitBKyIjYXJyb3doZWFkKSIpLCh2LnR5cGU9PT0iYmlyZWwifHx2LnR5cGU9PT0icmVsX2IiKSYmUi5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitBKyIjYXJyb3dlbmQpIil9bGV0IFA9dS5tZXNzYWdlRm9udCgpO0Y3KHUpKHYubGFiZWwudGV4dCxkLE1hdGgubWluKHYuc3RhcnRQb2ludC54LHYuZW5kUG9pbnQueCkrTWF0aC5hYnModi5lbmRQb2ludC54LXYuc3RhcnRQb2ludC54KS8yK1QsTWF0aC5taW4odi5zdGFydFBvaW50Lnksdi5lbmRQb2ludC55KStNYXRoLmFicyh2LmVuZFBvaW50Lnktdi5zdGFydFBvaW50LnkpLzIrXyx2LmxhYmVsLndpZHRoLHYubGFiZWwuaGVpZ2h0LHtmaWxsOmJ9LFApLHYudGVjaG4mJnYudGVjaG4udGV4dCE9PSIiJiYoUD11Lm1lc3NhZ2VGb250KCksRjcodSkoIlsiK3YudGVjaG4udGV4dCsiXSIsZCxNYXRoLm1pbih2LnN0YXJ0UG9pbnQueCx2LmVuZFBvaW50LngpK01hdGguYWJzKHYuZW5kUG9pbnQueC12LnN0YXJ0UG9pbnQueCkvMitULE1hdGgubWluKHYuc3RhcnRQb2ludC55LHYuZW5kUG9pbnQueSkrTWF0aC5hYnModi5lbmRQb2ludC55LXYuc3RhcnRQb2ludC55KS8yK3UubWVzc2FnZUZvbnRTaXplKzUrXyxNYXRoLm1heCh2LmxhYmVsLndpZHRoLHYudGVjaG4ud2lkdGgpLHYudGVjaG4uaGVpZ2h0LHtmaWxsOmIsImZvbnQtc3R5bGUiOiJpdGFsaWMifSxQKSl9fSxzVXQ9ZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9aS5hcHBlbmQoImciKTtsZXQgcD1zLmJnQ29sb3I/cy5iZ0NvbG9yOiJub25lIix2PXMuYm9yZGVyQ29sb3I/cy5ib3JkZXJDb2xvcjoiIzQ0NDQ0NCIsYj1zLmZvbnRDb2xvcj9zLmZvbnRDb2xvcjoiYmxhY2siLHk9eyJzdHJva2Utd2lkdGgiOjEsInN0cm9rZS1kYXNoYXJyYXkiOiI3LjAsNy4wIn07cy5ub2RlVHlwZSYmKHk9eyJzdHJva2Utd2lkdGgiOjF9KTtsZXQgVD17eDpzLngseTpzLnksZmlsbDpwLHN0cm9rZTp2LHdpZHRoOnMud2lkdGgsaGVpZ2h0OnMuaGVpZ2h0LHJ4OjIuNSxyeToyLjUsYXR0cnM6eX07cWJlKGQsVCk7bGV0IF89dS5ib3VuZGFyeUZvbnQoKTtfLmZvbnRXZWlnaHQ9ImJvbGQiLF8uZm9udFNpemU9Xy5mb250U2l6ZSsyLF8uZm9udENvbG9yPWIsRjcodSkocy5sYWJlbC50ZXh0LGQscy54LHMueStzLmxhYmVsLlkscy53aWR0aCxzLmhlaWdodCx7ZmlsbDoiIzQ0NDQ0NCJ9LF8pLHMudHlwZSYmcy50eXBlLnRleHQhPT0iIiYmKF89dS5ib3VuZGFyeUZvbnQoKSxfLmZvbnRDb2xvcj1iLEY3KHUpKHMudHlwZS50ZXh0LGQscy54LHMueStzLnR5cGUuWSxzLndpZHRoLHMuaGVpZ2h0LHtmaWxsOiIjNDQ0NDQ0In0sXykpLHMuZGVzY3ImJnMuZGVzY3IudGV4dCE9PSIiJiYoXz11LmJvdW5kYXJ5Rm9udCgpLF8uZm9udFNpemU9Xy5mb250U2l6ZS0yLF8uZm9udENvbG9yPWIsRjcodSkocy5kZXNjci50ZXh0LGQscy54LHMueStzLmRlc2NyLlkscy53aWR0aCxzLmhlaWdodCx7ZmlsbDoiIzQ0NDQ0NCJ9LF8pKX0sYVV0PWZ1bmN0aW9uKGkscyx1KXt2YXIgUDtsZXQgZD1zLmJnQ29sb3I/cy5iZ0NvbG9yOnVbcy50eXBlQzRTaGFwZS50ZXh0KyJfYmdfY29sb3IiXSxwPXMuYm9yZGVyQ29sb3I/cy5ib3JkZXJDb2xvcjp1W3MudHlwZUM0U2hhcGUudGV4dCsiX2JvcmRlcl9jb2xvciJdLHY9cy5mb250Q29sb3I/cy5mb250Q29sb3I6IiNGRkZGRkYiLGI9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0NBSUFBQURZWUc3UUFBQUNEMGxFUVZSNFh1MllvVTRFTVJDR1QrNGo4QWk4QWhhSDRRSGdBVWpRdUZNRUNVZ01JVWd3SkFnTWhnUXNBWVVpSkNpUUlCQlkrRUlUc2pmVGRtZTZWMjR2NGM4dnlHYmIrWmpPdE4wYk5jdmpRWG1rSDgzV3ZZQld0bzZQTG02djdwN3VIMS93MmZYRCtQQnljWDFQdjJsM0lkRG0vdm43eCtkWFFpQXViUnpvVVJhN2dSWldkMGlHUklpSmJPbmhuZllCUVpOSmpOYnV5WTJlSkc4ZmtERTNiYkc0ZXA2TUhVQXNnWXhtRTNuVnM2VnNCV0pTR2Njc09sRlBtTElWaU16TE9CN3BDVk8yQXRISk1vaEg3Rmg2enFpdFFLN20wckp2QVZZZ0djRXBlLy9QTGREejY1c000cEY5TjdJQ2NYREtJQjVOdjZqN3REME5vU2RNMlFyVTlHZzBld0UxTHFCaEhSM0JCZHZqMnZhcG5pZGpIeEQvcTZ2ZDdQdmhyMzFBd2NZOGVYTVRYQUtFQ1paSkZYdUVxMjdhTGdRSzV1TE1vaENlbkdHdUdld094U2pCdllCcWVHNkIrTnFpYmxnZ2RqbmMrWlhEeStGTkZwRnp3NzZPM1VCQVJPdVhoNkZvaUFjZjVnOWVUdlVnenkwbldnNkk4Y1hIUlVwZzViT1ZCQ28rS0RwRmFqT2YyM0dnUG1lN1JTUStsYWNJRU5VZ0o2Z2cxazZIamdPbHFuTHFpcDR0RXVodjBoTkVNWFVEMGNseVhFM3A2cFpBMFMybm52VGxYd0xKRVpXbGI3Y1RRSDErVVNnVE40VmhBZW5tL3dlYTFPQ0FPbXFvNmZFMVdDYjlXU0tCYWgrcmJVV1BXQW1FMlJ2azBBcGlCNDVlT3lOQXpVOHhjVHZqOEt2a0tFb09hSVllSE5BM1p1eWdBdkZNVU8wQUFBQUFTVVZPUks1Q1lJST0iO3N3aXRjaChzLnR5cGVDNFNoYXBlLnRleHQpe2Nhc2UicGVyc29uIjpiPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQUlBQUFEWVlHN1FBQUFDRDBsRVFWUjRYdTJZb1U0RU1SQ0dUKzRqOEFpOEFoYUg0UUhnQVVqUXVGTUVDVWdNSVVnd0pBZ01oZ1FzQVlVaUpDaVFJQkJZK0VJVHNqZlRkbWU2VjI0djRjOHZ5R2JiK1pqT3ROMGJOY3ZqUVhta0g4M1d2WUJXdG82UExtNnY3cDd1SDEvdzJmWEQrUEJ5Y1gxUHYybDNJZERtL3ZuN3grZFhRaUF1YlJ6b1VSYTdnUlpXZDBpR1JJaUpiT25obmZZQlFaTkpqTmJ1eVkyZUpHOGZrREUzYmJHNGVwNk1IVUFzZ1l4bUUzblZzNlZzQldKU0djY3NPbEZQbUxJVmlNekxPQjdwQ1ZPMkF0SEpNb2hIN0ZoNnpxaXRRSzdtMHJKdkFWWWdHY0VwZS8vUExkRHo2NXNNNHBGOU43SUNjWERLSUI1TnY2ajd0RDBOb1NkTTJRclU5R2cwZXdFMUxxQmhIUjNCQmR2ajJ2YXBuaWRqSHhEL3E2dmQ3UHZocjMxQXdjWThlWE1UWEFLRUNaWkpGWHVFcTI3YUxnUUs1dUxNb2hDZW5HR3VHZXdPeFNqQnZZQnFlRzZCK05xaWJsZ2dkam5jK1pYRHkrRk5GcEZ6dzc2TzNVQkFST3VYaDZGb2lBY2Y1ZzllVHZVZ3p5MG5XZzZJOGNYSFJVcGc1Yk9WQkNvK0tEcEZhak9mMjNHZ1BtZTdSU1ErbGFjSUVOVWdKNmdnMWs2SGpnT2xxbkxxaXA0dEV1aHYwaE5FTVhVRDBjbHlYRTNwNnBaQTBTMm5udlRsWHdMSkVaV2xiN2NUUUgxK1VTZ1RONFZoQWVubS93ZWExT0NBT21xbzZmRTFXQ2I5V1NLQmFoK3JiVVdQV0FtRTJSdmswQXBpQjQ1ZU95TkF6VTh4Y1R2ajhLdmtLRW9PYUlZZUhOQTNadXlnQXZGTVVPMEFBQUFBU1VWT1JLNUNZSUk9IjticmVhaztjYXNlImV4dGVybmFsX3BlcnNvbiI6Yj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3Q0FJQUFBRFlZRzdRQUFBQjZFbEVRVlI0WHUyWUxZK0VNQkNHOStkV3IwYWowV2cwR28xR28wK2o4WGR2MnVUQ3Z2MWdwdDBlYkhLUHVoRGFlVzQ2MDVaOW1Kdng0QWRYVXlUVWRkMDh6K3U2ZmxtV1pSbkhzV2thZms5RHB0QXdEUHUrZjBlQVl0dTJQRWFHV3VqNWZDSVpyQkFDMmVMQkFuUkNzRWtreG1lYUpwN2lESjJRTURkSHNMZzhTeEtGRUphQW84bEFYbm11T0ZJaFRNcHh4S0FUZWJvNFVpRmtudU5vNE9uaVNJWFF5UnhFQTNZc25qR0NWRWpWWEQ3eUxVQXF4QkdVeVB2L1k0VzJiZU1nR3VTN2tWUUlCeWNIMGZEK29pNXBlelFFVHhkSEttUUtHazFlUUVZbGRLK2p3NUd4UGZaOXo3TWswUW5oZjFXMW0zdy8vRVVuNUJEbVNac2JSNDRRUUxCRXFyQkhxT3JtU0thUUF4ZG5MQXJDcnhaY003QTdaS3M0aW9ScThMRkMrTnBDM1dDQkpzdnBWdzVlZG05aUVYRnV5TmZ4WEFnU3dmckZRMWMwaU5kYThBZGVqdlVnbmt0T3RKUVF4bWNmRnpHZ2xjNVdWQ2o3b0RnRnFVMThib2VGU3M1MkNVaDhMRThCSVZRRFQxQUJyQjBIdGdTRVlsWDVkb0puQ3d2OVRYb2NLQ2FLYm53aGRES1BxNGxmM1N3VTNITHE0Vi8rV1loSFZNYS8zYjRJbGZ5aWtBZHVDa2NCYzdtUTMvei9RcS9jVHVpa2hrekIxMkFlL21jSkM5VStWbzhFajFnV0F0Z2JlR2dGc0FNSHI1MEJJV09MQ2JlenZocEJGVWRZNkVKdUovUURXMFhvTVg2MHpaMEFBQUFBU1VWT1JLNUNZSUk9IjticmVha31jb25zdCB5PWkuYXBwZW5kKCJnIik7eS5hdHRyKCJjbGFzcyIsInBlcnNvbi1tYW4iKTtjb25zdCBUPXFDKCk7c3dpdGNoKHMudHlwZUM0U2hhcGUudGV4dCl7Y2FzZSJwZXJzb24iOmNhc2UiZXh0ZXJuYWxfcGVyc29uIjpjYXNlInN5c3RlbSI6Y2FzZSJleHRlcm5hbF9zeXN0ZW0iOmNhc2UiY29udGFpbmVyIjpjYXNlImV4dGVybmFsX2NvbnRhaW5lciI6Y2FzZSJjb21wb25lbnQiOmNhc2UiZXh0ZXJuYWxfY29tcG9uZW50IjpULng9cy54LFQueT1zLnksVC5maWxsPWQsVC53aWR0aD1zLndpZHRoLFQuaGVpZ2h0PXMuaGVpZ2h0LFQuc3Ryb2tlPXAsVC5yeD0yLjUsVC5yeT0yLjUsVC5hdHRycz17InN0cm9rZS13aWR0aCI6LjV9LHFiZSh5LFQpO2JyZWFrO2Nhc2Uic3lzdGVtX2RiIjpjYXNlImV4dGVybmFsX3N5c3RlbV9kYiI6Y2FzZSJjb250YWluZXJfZGIiOmNhc2UiZXh0ZXJuYWxfY29udGFpbmVyX2RiIjpjYXNlImNvbXBvbmVudF9kYiI6Y2FzZSJleHRlcm5hbF9jb21wb25lbnRfZGIiOnkuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsZCkuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41IikuYXR0cigic3Ryb2tlIixwKS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHljMCwtMTAgaGFsZiwtMTAgaGFsZiwtMTBjMCwwIGhhbGYsMCBoYWxmLDEwbDAsaGVpZ2h0YzAsMTAgLWhhbGYsMTAgLWhhbGYsMTBjMCwwIC1oYWxmLDAgLWhhbGYsLTEwbDAsLWhlaWdodCIucmVwbGFjZUFsbCgic3RhcnR4IixzLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIscy55KS5yZXBsYWNlQWxsKCJoYWxmIixzLndpZHRoLzIpLnJlcGxhY2VBbGwoImhlaWdodCIscy5oZWlnaHQpKSx5LmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41IikuYXR0cigic3Ryb2tlIixwKS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHljMCwxMCBoYWxmLDEwIGhhbGYsMTBjMCwwIGhhbGYsMCBoYWxmLC0xMCIucmVwbGFjZUFsbCgic3RhcnR4IixzLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIscy55KS5yZXBsYWNlQWxsKCJoYWxmIixzLndpZHRoLzIpKTticmVhaztjYXNlInN5c3RlbV9xdWV1ZSI6Y2FzZSJleHRlcm5hbF9zeXN0ZW1fcXVldWUiOmNhc2UiY29udGFpbmVyX3F1ZXVlIjpjYXNlImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZSI6Y2FzZSJjb21wb25lbnRfcXVldWUiOmNhc2UiZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlIjp5LmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLGQpLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNSIpLmF0dHIoInN0cm9rZSIscCkuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5bHdpZHRoLDBjNSwwIDUsaGFsZiA1LGhhbGZjMCwwIDAsaGFsZiAtNSxoYWxmbC13aWR0aCwwYy01LDAgLTUsLWhhbGYgLTUsLWhhbGZjMCwwIDAsLWhhbGYgNSwtaGFsZiIucmVwbGFjZUFsbCgic3RhcnR4IixzLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIscy55KS5yZXBsYWNlQWxsKCJ3aWR0aCIscy53aWR0aCkucmVwbGFjZUFsbCgiaGFsZiIscy5oZWlnaHQvMikpLHkuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjUiKS5hdHRyKCJzdHJva2UiLHApLmF0dHIoImQiLCJNc3RhcnR4LHN0YXJ0eWMtNSwwIC01LGhhbGYgLTUsaGFsZmMwLGhhbGYgNSxoYWxmIDUsaGFsZiIucmVwbGFjZUFsbCgic3RhcnR4IixzLngrcy53aWR0aCkucmVwbGFjZUFsbCgic3RhcnR5IixzLnkpLnJlcGxhY2VBbGwoImhhbGYiLHMuaGVpZ2h0LzIpKTticmVha31sZXQgXz1wVXQodSxzLnR5cGVDNFNoYXBlLnRleHQpO3N3aXRjaCh5LmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLHYpLmF0dHIoImZvbnQtZmFtaWx5IixfLmZvbnRGYW1pbHkpLmF0dHIoImZvbnQtc2l6ZSIsXy5mb250U2l6ZS0yKS5hdHRyKCJmb250LXN0eWxlIiwiaXRhbGljIikuYXR0cigibGVuZ3RoQWRqdXN0Iiwic3BhY2luZyIpLmF0dHIoInRleHRMZW5ndGgiLHMudHlwZUM0U2hhcGUud2lkdGgpLmF0dHIoIngiLHMueCtzLndpZHRoLzItcy50eXBlQzRTaGFwZS53aWR0aC8yKS5hdHRyKCJ5IixzLnkrcy50eXBlQzRTaGFwZS5ZKS50ZXh0KCI8PCIrcy50eXBlQzRTaGFwZS50ZXh0KyI+PiIpLHMudHlwZUM0U2hhcGUudGV4dCl7Y2FzZSJwZXJzb24iOmNhc2UiZXh0ZXJuYWxfcGVyc29uIjpDcWUoeSw0OCw0OCxzLngrcy53aWR0aC8yLTI0LHMueStzLmltYWdlLlksYik7YnJlYWt9bGV0IEE9dVtzLnR5cGVDNFNoYXBlLnRleHQrIkZvbnQiXSgpO3JldHVybiBBLmZvbnRXZWlnaHQ9ImJvbGQiLEEuZm9udFNpemU9QS5mb250U2l6ZSsyLEEuZm9udENvbG9yPXYsRjcodSkocy5sYWJlbC50ZXh0LHkscy54LHMueStzLmxhYmVsLlkscy53aWR0aCxzLmhlaWdodCx7ZmlsbDp2fSxBKSxBPXVbcy50eXBlQzRTaGFwZS50ZXh0KyJGb250Il0oKSxBLmZvbnRDb2xvcj12LHMudGVjaG4mJigoUD1zLnRlY2huKT09bnVsbD92b2lkIDA6UC50ZXh0KSE9PSIiP0Y3KHUpKHMudGVjaG4udGV4dCx5LHMueCxzLnkrcy50ZWNobi5ZLHMud2lkdGgscy5oZWlnaHQse2ZpbGw6diwiZm9udC1zdHlsZSI6Iml0YWxpYyJ9LEEpOnMudHlwZSYmcy50eXBlLnRleHQhPT0iIiYmRjcodSkocy50eXBlLnRleHQseSxzLngscy55K3MudHlwZS5ZLHMud2lkdGgscy5oZWlnaHQse2ZpbGw6diwiZm9udC1zdHlsZSI6Iml0YWxpYyJ9LEEpLHMuZGVzY3ImJnMuZGVzY3IudGV4dCE9PSIiJiYoQT11LnBlcnNvbkZvbnQoKSxBLmZvbnRDb2xvcj12LEY3KHUpKHMuZGVzY3IudGV4dCx5LHMueCxzLnkrcy5kZXNjci5ZLHMud2lkdGgscy5oZWlnaHQse2ZpbGw6dn0sQSkpLHMuaGVpZ2h0fSxvVXQ9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiZGF0YWJhc2UiKS5hdHRyKCJmaWxsLXJ1bGUiLCJldmVub2RkIikuYXR0cigiY2xpcC1ydWxlIiwiZXZlbm9kZCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIuMjU4LjAwMWwuMjU2LjAwNC4yNTUuMDA1LjI1My4wMDguMjUxLjAxLjI0OS4wMTIuMjQ3LjAxNS4yNDYuMDE2LjI0Mi4wMTkuMjQxLjAyLjIzOS4wMjMuMjM2LjAyNC4yMzMuMDI3LjIzMS4wMjguMjI5LjAzMS4yMjUuMDMyLjIyMy4wMzQuMjIuMDM2LjIxNy4wMzguMjE0LjA0LjIxMS4wNDEuMjA4LjA0My4yMDUuMDQ1LjIwMS4wNDYuMTk4LjA0OC4xOTQuMDUuMTkxLjA1MS4xODcuMDUzLjE4My4wNTQuMTguMDU2LjE3NS4wNTcuMTcyLjA1OS4xNjguMDYuMTYzLjA2MS4xNi4wNjMuMTU1LjA2NC4xNS4wNjYuMDc0LjAzMy4wNzMuMDMzLjA3MS4wMzQuMDcuMDM0LjA2OS4wMzUuMDY4LjAzNS4wNjcuMDM1LjA2Ni4wMzUuMDY0LjAzNi4wNjQuMDM2LjA2Mi4wMzYuMDYuMDM2LjA2LjAzNy4wNTguMDM3LjA1OC4wMzcuMDU1LjAzOC4wNTUuMDM4LjA1My4wMzguMDUyLjAzOC4wNTEuMDM5LjA1LjAzOS4wNDguMDM5LjA0Ny4wMzkuMDQ1LjA0LjA0NC4wNC4wNDMuMDQuMDQxLjA0LjA0LjA0MS4wMzkuMDQxLjAzNy4wNDEuMDM2LjA0MS4wMzQuMDQxLjAzMy4wNDIuMDMyLjA0Mi4wMy4wNDIuMDI5LjA0Mi4wMjcuMDQyLjAyNi4wNDMuMDI0LjA0My4wMjMuMDQzLjAyMS4wNDMuMDIuMDQzLjAxOC4wNDQuMDE3LjA0My4wMTUuMDQ0LjAxMy4wNDQuMDEyLjA0NC4wMTEuMDQ1LjAwOS4wNDQuMDA3LjA0NS4wMDYuMDQ1LjAwNC4wNDUuMDAyLjA0NS4wMDEuMDQ1djE3bC0uMDAxLjA0NS0uMDAyLjA0NS0uMDA0LjA0NS0uMDA2LjA0NS0uMDA3LjA0NS0uMDA5LjA0NC0uMDExLjA0NS0uMDEyLjA0NC0uMDEzLjA0NC0uMDE1LjA0NC0uMDE3LjA0My0uMDE4LjA0NC0uMDIuMDQzLS4wMjEuMDQzLS4wMjMuMDQzLS4wMjQuMDQzLS4wMjYuMDQzLS4wMjcuMDQyLS4wMjkuMDQyLS4wMy4wNDItLjAzMi4wNDItLjAzMy4wNDItLjAzNC4wNDEtLjAzNi4wNDEtLjAzNy4wNDEtLjAzOS4wNDEtLjA0LjA0MS0uMDQxLjA0LS4wNDMuMDQtLjA0NC4wNC0uMDQ1LjA0LS4wNDcuMDM5LS4wNDguMDM5LS4wNS4wMzktLjA1MS4wMzktLjA1Mi4wMzgtLjA1My4wMzgtLjA1NS4wMzgtLjA1NS4wMzgtLjA1OC4wMzctLjA1OC4wMzctLjA2LjAzNy0uMDYuMDM2LS4wNjIuMDM2LS4wNjQuMDM2LS4wNjQuMDM2LS4wNjYuMDM1LS4wNjcuMDM1LS4wNjguMDM1LS4wNjkuMDM1LS4wNy4wMzQtLjA3MS4wMzQtLjA3My4wMzMtLjA3NC4wMzMtLjE1LjA2Ni0uMTU1LjA2NC0uMTYuMDYzLS4xNjMuMDYxLS4xNjguMDYtLjE3Mi4wNTktLjE3NS4wNTctLjE4LjA1Ni0uMTgzLjA1NC0uMTg3LjA1My0uMTkxLjA1MS0uMTk0LjA1LS4xOTguMDQ4LS4yMDEuMDQ2LS4yMDUuMDQ1LS4yMDguMDQzLS4yMTEuMDQxLS4yMTQuMDQtLjIxNy4wMzgtLjIyLjAzNi0uMjIzLjAzNC0uMjI1LjAzMi0uMjI5LjAzMS0uMjMxLjAyOC0uMjMzLjAyNy0uMjM2LjAyNC0uMjM5LjAyMy0uMjQxLjAyLS4yNDIuMDE5LS4yNDYuMDE2LS4yNDcuMDE1LS4yNDkuMDEyLS4yNTEuMDEtLjI1My4wMDgtLjI1NS4wMDUtLjI1Ni4wMDQtLjI1OC4wMDEtLjI1OC0uMDAxLS4yNTYtLjAwNC0uMjU1LS4wMDUtLjI1My0uMDA4LS4yNTEtLjAxLS4yNDktLjAxMi0uMjQ3LS4wMTUtLjI0NS0uMDE2LS4yNDMtLjAxOS0uMjQxLS4wMi0uMjM4LS4wMjMtLjIzNi0uMDI0LS4yMzQtLjAyNy0uMjMxLS4wMjgtLjIyOC0uMDMxLS4yMjYtLjAzMi0uMjIzLS4wMzQtLjIyLS4wMzYtLjIxNy0uMDM4LS4yMTQtLjA0LS4yMTEtLjA0MS0uMjA4LS4wNDMtLjIwNC0uMDQ1LS4yMDEtLjA0Ni0uMTk4LS4wNDgtLjE5NS0uMDUtLjE5LS4wNTEtLjE4Ny0uMDUzLS4xODQtLjA1NC0uMTc5LS4wNTYtLjE3Ni0uMDU3LS4xNzItLjA1OS0uMTY3LS4wNi0uMTY0LS4wNjEtLjE1OS0uMDYzLS4xNTUtLjA2NC0uMTUxLS4wNjYtLjA3NC0uMDMzLS4wNzItLjAzMy0uMDcyLS4wMzQtLjA3LS4wMzQtLjA2OS0uMDM1LS4wNjgtLjAzNS0uMDY3LS4wMzUtLjA2Ni0uMDM1LS4wNjQtLjAzNi0uMDYzLS4wMzYtLjA2Mi0uMDM2LS4wNjEtLjAzNi0uMDYtLjAzNy0uMDU4LS4wMzctLjA1Ny0uMDM3LS4wNTYtLjAzOC0uMDU1LS4wMzgtLjA1My0uMDM4LS4wNTItLjAzOC0uMDUxLS4wMzktLjA0OS0uMDM5LS4wNDktLjAzOS0uMDQ2LS4wMzktLjA0Ni0uMDQtLjA0NC0uMDQtLjA0My0uMDQtLjA0MS0uMDQtLjA0LS4wNDEtLjAzOS0uMDQxLS4wMzctLjA0MS0uMDM2LS4wNDEtLjAzNC0uMDQxLS4wMzMtLjA0Mi0uMDMyLS4wNDItLjAzLS4wNDItLjAyOS0uMDQyLS4wMjctLjA0Mi0uMDI2LS4wNDMtLjAyNC0uMDQzLS4wMjMtLjA0My0uMDIxLS4wNDMtLjAyLS4wNDMtLjAxOC0uMDQ0LS4wMTctLjA0My0uMDE1LS4wNDQtLjAxMy0uMDQ0LS4wMTItLjA0NC0uMDExLS4wNDUtLjAwOS0uMDQ0LS4wMDctLjA0NS0uMDA2LS4wNDUtLjAwNC0uMDQ1LS4wMDItLjA0NS0uMDAxLS4wNDV2LTE3bC4wMDEtLjA0NS4wMDItLjA0NS4wMDQtLjA0NS4wMDYtLjA0NS4wMDctLjA0NS4wMDktLjA0NC4wMTEtLjA0NS4wMTItLjA0NC4wMTMtLjA0NC4wMTUtLjA0NC4wMTctLjA0My4wMTgtLjA0NC4wMi0uMDQzLjAyMS0uMDQzLjAyMy0uMDQzLjAyNC0uMDQzLjAyNi0uMDQzLjAyNy0uMDQyLjAyOS0uMDQyLjAzLS4wNDIuMDMyLS4wNDIuMDMzLS4wNDIuMDM0LS4wNDEuMDM2LS4wNDEuMDM3LS4wNDEuMDM5LS4wNDEuMDQtLjA0MS4wNDEtLjA0LjA0My0uMDQuMDQ0LS4wNC4wNDYtLjA0LjA0Ni0uMDM5LjA0OS0uMDM5LjA0OS0uMDM5LjA1MS0uMDM5LjA1Mi0uMDM4LjA1My0uMDM4LjA1NS0uMDM4LjA1Ni0uMDM4LjA1Ny0uMDM3LjA1OC0uMDM3LjA2LS4wMzcuMDYxLS4wMzYuMDYyLS4wMzYuMDYzLS4wMzYuMDY0LS4wMzYuMDY2LS4wMzUuMDY3LS4wMzUuMDY4LS4wMzUuMDY5LS4wMzUuMDctLjAzNC4wNzItLjAzNC4wNzItLjAzMy4wNzQtLjAzMy4xNTEtLjA2Ni4xNTUtLjA2NC4xNTktLjA2My4xNjQtLjA2MS4xNjctLjA2LjE3Mi0uMDU5LjE3Ni0uMDU3LjE3OS0uMDU2LjE4NC0uMDU0LjE4Ny0uMDUzLjE5LS4wNTEuMTk1LS4wNS4xOTgtLjA0OC4yMDEtLjA0Ni4yMDQtLjA0NS4yMDgtLjA0My4yMTEtLjA0MS4yMTQtLjA0LjIxNy0uMDM4LjIyLS4wMzYuMjIzLS4wMzQuMjI2LS4wMzIuMjI4LS4wMzEuMjMxLS4wMjguMjM0LS4wMjcuMjM2LS4wMjQuMjM4LS4wMjMuMjQxLS4wMi4yNDMtLjAxOS4yNDUtLjAxNi4yNDctLjAxNS4yNDktLjAxMi4yNTEtLjAxLjI1My0uMDA4LjI1NS0uMDA1LjI1Ni0uMDA0LjI1OC0uMDAxLjI1OC4wMDF6bS05LjI1OCAyMC40OTl2LjAxbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMi4wMDUuMDIxLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI1LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDQ5LjA1Ni4wNS4wNjEuMDUxLjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTEuMDc5LjA1Mi4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTEuMTA1LjA1Mi4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OC4xNDQuMDQ5LjE0Ny4wNDcuMTUyLjA0Ny4xNTUuMDQ3LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQxLjE3OC4wNDEuMTgzLjAzOS4xODcuMDM5LjE5LjAzNy4xOTQuMDM1LjE5Ny4wMzUuMjAyLjAzMy4yMDQuMDMxLjIwOS4wMy4yMTIuMDI5LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNS4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDUuMjU2LjAwNC4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMS4yMjQtLjAyNC4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzEuMjAyLS4wMzQuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wNC4xNzktLjA0LjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1My4wODMtLjA1MS4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI0LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEyN2wtLjA3Ny4wNTUtLjA4LjA1My0uMDgzLjA1NC0uMDg1LjA1My0uMDg3LjA1Mi0uMDkuMDUyLS4wOTMuMDUxLS4wOTUuMDUtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDUtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wNC0uMTMyLjAzOC0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNy0uMTM5LjAzNS0uMTQyLjAzNS0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOS0uMTU0LjAyNy0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDEtLjE3OS4wMDgtLjE3OS4wMDgtLjE4MS4wMDYtLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNi0uMTc5LS4wMDgtLjE3OS0uMDA4LS4xNzgtLjAxLS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyNy0uMTUzLS4wMjktLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM1LS4xNC0uMDM1LS4xMzctLjAzNy0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOC0uMTMtLjA0LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQyLS4xMi0uMDQ0LS4xMTctLjA0My0uMTE2LS4wNDUtLjExMy0uMDQ1LS4xMTItLjA0Ni0uMTA5LS4wNDctLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNS0uMDkzLS4wNTItLjA5LS4wNTEtLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTI3em0wLTUuNjU0di4wMTFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjIuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjQuMDE2LjAyMy4wMTcuMDI0LjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjQuMDIzLjAyNS4wMjQuMDI0LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1Mi4xMS4wNTEuMTE0LjA1MS4xMTkuMDUyLjEyMy4wNS4xMjcuMDUxLjEzMS4wNS4xMzUuMDQ5LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQ0LjE3MS4wNDIuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMi4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTIuMjQxLS4wMTUuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDUuMTM2LS4wNDkuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUxLjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI1LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjMuMDEzLS4wMjQuMDEyLS4wMjIuMDEtLjAyMy4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIxLjAwNC0uMDIyLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEzOWwtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1NC0uMDg1LjA1Mi0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDQtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM1LS4xNDMuMDMzLS4xNDQuMDMzLS4xNDcuMDMzLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMDktLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDctLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNy0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAwOS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMy0uMTQ1LS4wMzMtLjE0My0uMDMzLS4xNDEtLjAzNS0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTEtLjA4Ny0uMDUzLS4wODUtLjA1Mi0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTM5em0wLTUuNjY2di4wMTFsLjAwMS4wMi4wMDMuMDIyLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIxLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjQuMDE4LjAyMy4wMTkuMDI0LjAyMS4wMjUuMDIyLjAyNC4wMjMuMDI0LjAyNC4wMjUuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUxLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE3LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEzLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA0OS4xMzEtLjA1MS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIyLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTUzbC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDUzLS4wODUuMDUzLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDgtLjEwNS4wNDgtLjEwNi4wNDgtLjEwOS4wNDYtLjExMS4wNDYtLjExNC4wNDYtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0My0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzQtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzItLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjQtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjMtLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxLS4xNzguMDEtLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDYtLjE4Mi4wMDYtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDEtLjE4NS4wMDEtLjE4NS0uMDAxLS4xODQtLjAwMS0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNi0uMTgxLS4wMDYtLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMS0uMTc2LS4wMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMy0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNC0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzItLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM0LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNDEtLjEyNi0uMDQxLS4xMjQtLjA0MS0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDgtLjEwNS0uMDQ4LS4xMDItLjA0OC0uMS0uMDUtLjA5Ny0uMDQ5LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTItLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTMtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTUzem04Ljc0LTguMTc5bC0uMjU3LjAwNC0uMjU0LjAwNS0uMjUuMDA4LS4yNDcuMDExLS4yNDQuMDEyLS4yNDEuMDE0LS4yMzcuMDE2LS4yMzMuMDE4LS4yMzEuMDIxLS4yMjYuMDIyLS4yMjQuMDIzLS4yMi4wMjYtLjIxNi4wMjctLjIxMi4wMjgtLjIxLjAzMS0uMjA1LjAzMi0uMjAyLjAzMy0uMTk4LjAzNC0uMTk0LjAzNi0uMTkxLjAzOC0uMTg3LjAzOC0uMTgzLjA0LS4xNzkuMDQxLS4xNzUuMDQyLS4xNzIuMDQzLS4xNjguMDQzLS4xNjMuMDQ1LS4xNi4wNDYtLjE1NS4wNDYtLjE1Mi4wNDgtLjE0OC4wNDgtLjE0My4wNDgtLjEzOS4wNDktLjEzNi4wNS0uMTMxLjA1LS4xMjYuMDUxLS4xMjMuMDUxLS4xMTguMDUxLS4xMTQuMDUyLS4xMS4wNTItLjEwNi4wNTItLjEwMS4wNTItLjA5Ni4wNTItLjA5Mi4wNTItLjA4OC4wNTItLjA4My4wNTItLjA3OS4wNTItLjA3NC4wNTEtLjA3LjA1Mi0uMDY1LjA1MS0uMDYuMDUtLjA1Ni4wNS0uMDUxLjA1LS4wMjMuMDI1LS4wMjMuMDI0LS4wMjEuMDI0LS4wMi4wMjUtLjAxOS4wMjQtLjAxOC4wMjQtLjAxNy4wMjMtLjAxNS4wMjQtLjAxNC4wMjMtLjAxMy4wMjMtLjAxMi4wMjMtLjAxLjAyMy0uMDEuMDIyLS4wMDguMDIyLS4wMDYuMDIzLS4wMDYuMDIxLS4wMDQuMDIyLS4wMDQuMDIxLS4wMDEuMDIxLS4wMDEuMDIxLjAwMS4wMjEuMDAxLjAyMS4wMDQuMDIxLjAwNC4wMjIuMDA2LjAyMS4wMDYuMDIzLjAwOC4wMjIuMDEuMDIyLjAxLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE0LjAyMy4wMTUuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyLjAyNS4wMjEuMDI0LjAyMy4wMjQuMDIzLjAyNS4wNTEuMDUuMDU2LjA1LjA2LjA1LjA2NS4wNTEuMDcuMDUyLjA3NC4wNTEuMDc5LjA1Mi4wODMuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTYuMDUyLjEwMS4wNTIuMTA2LjA1Mi4xMS4wNTIuMTE0LjA1Mi4xMTguMDUxLjEyMy4wNTEuMTI2LjA1MS4xMzEuMDUuMTM2LjA1LjEzOS4wNDkuMTQzLjA0OC4xNDguMDQ4LjE1Mi4wNDguMTU1LjA0Ni4xNi4wNDYuMTYzLjA0NS4xNjguMDQzLjE3Mi4wNDMuMTc1LjA0Mi4xNzkuMDQxLjE4My4wNC4xODcuMDM4LjE5MS4wMzguMTk0LjAzNi4xOTguMDM0LjIwMi4wMzMuMjA1LjAzMi4yMS4wMzEuMjEyLjAyOC4yMTYuMDI3LjIyLjAyNi4yMjQuMDIzLjIyNi4wMjIuMjMxLjAyMS4yMzMuMDE4LjIzNy4wMTYuMjQxLjAxNC4yNDQuMDEyLjI0Ny4wMTEuMjUuMDA4LjI1NC4wMDUuMjU3LjAwNC4yNi4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIyLjIyNC0uMDIzLjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzOC4xODctLjAzOC4xODMtLjA0LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQzLjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDguMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI0LjAyLS4wMjUuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjMuMDE1LS4wMjQuMDE0LS4wMjMuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIzLjAwNi0uMDIxLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwNC0uMDIxLS4wMDQtLjAyMi0uMDA2LS4wMjEtLjAwNi0uMDIzLS4wMDgtLjAyMi0uMDEtLjAyMi0uMDEtLjAyMy0uMDEyLS4wMjMtLjAxMy0uMDIzLS4wMTQtLjAyMy0uMDE1LS4wMjQtLjAxNy0uMDIzLS4wMTgtLjAyNC0uMDE5LS4wMjQtLjAyLS4wMjUtLjAyMS0uMDI0LS4wMjMtLjAyNC0uMDIzLS4wMjUtLjA1MS0uMDUtLjA1Ni0uMDUtLjA2LS4wNS0uMDY1LS4wNTEtLjA3LS4wNTItLjA3NC0uMDUxLS4wNzktLjA1Mi0uMDgzLS4wNTItLjA4OC0uMDUyLS4wOTItLjA1Mi0uMDk2LS4wNTItLjEwMS0uMDUyLS4xMDYtLjA1Mi0uMTEtLjA1Mi0uMTE0LS4wNTItLjExOC0uMDUxLS4xMjMtLjA1MS0uMTI2LS4wNTEtLjEzMS0uMDUtLjEzNi0uMDUtLjEzOS0uMDQ5LS4xNDMtLjA0OC0uMTQ4LS4wNDgtLjE1Mi0uMDQ4LS4xNTUtLjA0Ni0uMTYtLjA0Ni0uMTYzLS4wNDUtLjE2OC0uMDQzLS4xNzItLjA0My0uMTc1LS4wNDItLjE3OS0uMDQxLS4xODMtLjA0LS4xODctLjAzOC0uMTkxLS4wMzgtLjE5NC0uMDM2LS4xOTgtLjAzNC0uMjAyLS4wMzMtLjIwNS0uMDMyLS4yMS0uMDMxLS4yMTItLjAyOC0uMjE2LS4wMjctLjIyLS4wMjYtLjIyNC0uMDIzLS4yMjYtLjAyMi0uMjMxLS4wMjEtLjIzMy0uMDE4LS4yMzctLjAxNi0uMjQxLS4wMTQtLjI0NC0uMDEyLS4yNDctLjAxMS0uMjUtLjAwOC0uMjU0LS4wMDUtLjI1Ny0uMDA0LS4yNi0uMDAxLS4yNi4wMDF6Iil9LGNVdD1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjb21wdXRlciIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMiAydjEzaDIwdi0xM2gtMjB6bTE4IDExaC0xNnYtOWgxNnY5em0tMTAuMjI4IDZsLjQ2Ni0xaDMuNTI0bC40NjcgMWgtNC40NTd6bTE0LjIyOCAzaC0yNGwyLTZoMi4xMDRsLTEuMzMgNGgxOC40NWwtMS4yOTctNGgyLjA3M2wyIDZ6bS01LTEwaC0xNHYtN2gxNHY3eiIpfSx1VXQ9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiY2xvY2siKS5hdHRyKCJ3aWR0aCIsIjI0IikuYXR0cigiaGVpZ2h0IiwiMjQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyIDJjNS41MTQgMCAxMCA0LjQ4NiAxMCAxMHMtNC40ODYgMTAtMTAgMTAtMTAtNC40ODYtMTAtMTAgNC40ODYtMTAgMTAtMTB6bTAtMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnM1LjM3MyAxMiAxMiAxMiAxMi01LjM3MyAxMi0xMi01LjM3My0xMi0xMi0xMnptNS44NDggMTIuNDU5Yy4yMDIuMDM4LjIwMi4zMzMuMDAxLjM3Mi0xLjkwNy4zNjEtNi4wNDUgMS4xMTEtNi41NDcgMS4xMTEtLjcxOSAwLTEuMzAxLS41ODItMS4zMDEtMS4zMDEgMC0uNTEyLjc3LTUuNDQ3IDEuMTI1LTcuNDQ1LjAzNC0uMTkyLjMxMi0uMTgxLjM0My4wMTRsLjk4NSA2LjIzOCA1LjM5NCAxLjAxMXoiKX0sbFV0PWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93aGVhZCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6Iil9LGhVdD1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2VuZCIpLmF0dHIoInJlZlgiLDEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxMCAwIEwgMCA1IEwgMTAgMTAgeiIpfSxmVXQ9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZmlsbGVkLWhlYWQiKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0sZFV0PWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsInNlcXVlbmNlbnVtYmVyIikuYXR0cigicmVmWCIsMTUpLmF0dHIoInJlZlkiLDE1KS5hdHRyKCJtYXJrZXJXaWR0aCIsNjApLmF0dHIoIm1hcmtlckhlaWdodCIsNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwxNSkuYXR0cigiY3kiLDE1KS5hdHRyKCJyIiw2KX0sZ1V0PWZ1bmN0aW9uKGkpe2NvbnN0IHU9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY3Jvc3NoZWFkIikuYXR0cigibWFya2VyV2lkdGgiLDE1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hdHRyKCJyZWZYIiwxNikuYXR0cigicmVmWSIsNCk7dS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJzdHJva2UiLCIjMDAwMDAwIikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwLCAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigiZCIsIk0gOSwyIFYgNiBMMTYsNCBaIiksdS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJkIiwiTSAwLDEgTCA2LDcgTSA2LDEgTCAwLDciKX0scFV0PShpLHMpPT4oe2ZvbnRGYW1pbHk6aVtzKyJGb250RmFtaWx5Il0sZm9udFNpemU6aVtzKyJGb250U2l6ZSJdLGZvbnRXZWlnaHQ6aVtzKyJGb250V2VpZ2h0Il19KSxGNz1mdW5jdGlvbigpe2Z1bmN0aW9uIGkocCx2LGIseSxULF8sQSl7Y29uc3QgUD12LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrVC8yKS5hdHRyKCJ5Iix5K18vMis1KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHApO2QoUCxBKX1mdW5jdGlvbiBzKHAsdixiLHksVCxfLEEsUCl7Y29uc3R7Zm9udFNpemU6Uixmb250RmFtaWx5OkYsZm9udFdlaWdodDpqfT1QLEs9cC5zcGxpdChjaS5saW5lQnJlYWtSZWdleCk7Zm9yKGxldCBlZT0wO2VlPEsubGVuZ3RoO2VlKyspe2NvbnN0IGllPWVlKlItUiooSy5sZW5ndGgtMSkvMixvZT12LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrVC8yKS5hdHRyKCJ5Iix5KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLFIpLnN0eWxlKCJmb250LXdlaWdodCIsaikuc3R5bGUoImZvbnQtZmFtaWx5IixGKTtvZS5hcHBlbmQoInRzcGFuIikuYXR0cigiZHkiLGllKS50ZXh0KEtbZWVdKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtYXRoZW1hdGljYWwiKSxkKG9lLEEpfX1mdW5jdGlvbiB1KHAsdixiLHksVCxfLEEsUCl7Y29uc3QgUj12LmFwcGVuZCgic3dpdGNoIiksaj1SLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIngiLGIpLmF0dHIoInkiLHkpLmF0dHIoIndpZHRoIixUKS5hdHRyKCJoZWlnaHQiLF8pLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2ouYXBwZW5kKCJkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlLWNlbGwiKS5zdHlsZSgidGV4dC1hbGlnbiIsImNlbnRlciIpLnN0eWxlKCJ2ZXJ0aWNhbC1hbGlnbiIsIm1pZGRsZSIpLnRleHQocCkscyhwLFIsYix5LFQsXyxBLFApLGQoaixBKX1mdW5jdGlvbiBkKHAsdil7Zm9yKGNvbnN0IGIgaW4gdil2Lmhhc093blByb3BlcnR5KGIpJiZwLmF0dHIoYix2W2JdKX1yZXR1cm4gZnVuY3Rpb24ocCl7cmV0dXJuIHAudGV4dFBsYWNlbWVudD09PSJmbyI/dTpwLnRleHRQbGFjZW1lbnQ9PT0ib2xkIj9pOnN9fSgpLEo0PXtkcmF3UmVjdDpxYmUsZHJhd0JvdW5kYXJ5OnNVdCxkcmF3QzRTaGFwZTphVXQsZHJhd1JlbHM6aVV0LGRyYXdJbWFnZTpDcWUsaW5zZXJ0QXJyb3dIZWFkOmxVdCxpbnNlcnRBcnJvd0VuZDpoVXQsaW5zZXJ0QXJyb3dGaWxsZWRIZWFkOmZVdCxpbnNlcnREeW5hbWljTnVtYmVyOmRVdCxpbnNlcnRBcnJvd0Nyb3NzSGVhZDpnVXQsaW5zZXJ0RGF0YWJhc2VJY29uOm9VdCxpbnNlcnRDb21wdXRlckljb246Y1V0LGluc2VydENsb2NrSWNvbjp1VXR9O2xldCBMUT0wLE1RPTAsU3FlPTQsSGJlPTI7Q1EueXk9JGJlO2xldCAkcz17fTtjbGFzcyBfcWV7Y29uc3RydWN0b3Iocyl7dGhpcy5uYW1lPSIiLHRoaXMuZGF0YT17fSx0aGlzLmRhdGEuc3RhcnR4PXZvaWQgMCx0aGlzLmRhdGEuc3RvcHg9dm9pZCAwLHRoaXMuZGF0YS5zdGFydHk9dm9pZCAwLHRoaXMuZGF0YS5zdG9weT12b2lkIDAsdGhpcy5kYXRhLndpZHRoTGltaXQ9dm9pZCAwLHRoaXMubmV4dERhdGE9e30sdGhpcy5uZXh0RGF0YS5zdGFydHg9dm9pZCAwLHRoaXMubmV4dERhdGEuc3RvcHg9dm9pZCAwLHRoaXMubmV4dERhdGEuc3RhcnR5PXZvaWQgMCx0aGlzLm5leHREYXRhLnN0b3B5PXZvaWQgMCx0aGlzLm5leHREYXRhLmNudD0wLFZiZShzLmRiLmdldENvbmZpZygpKX1zZXREYXRhKHMsdSxkLHApe3RoaXMubmV4dERhdGEuc3RhcnR4PXRoaXMuZGF0YS5zdGFydHg9cyx0aGlzLm5leHREYXRhLnN0b3B4PXRoaXMuZGF0YS5zdG9weD11LHRoaXMubmV4dERhdGEuc3RhcnR5PXRoaXMuZGF0YS5zdGFydHk9ZCx0aGlzLm5leHREYXRhLnN0b3B5PXRoaXMuZGF0YS5zdG9weT1wfXVwZGF0ZVZhbChzLHUsZCxwKXtzW3VdPT09dm9pZCAwP3NbdV09ZDpzW3VdPXAoZCxzW3VdKX1pbnNlcnQocyl7dGhpcy5uZXh0RGF0YS5jbnQ9dGhpcy5uZXh0RGF0YS5jbnQrMTtsZXQgdT10aGlzLm5leHREYXRhLnN0YXJ0eD09PXRoaXMubmV4dERhdGEuc3RvcHg/dGhpcy5uZXh0RGF0YS5zdG9weCtzLm1hcmdpbjp0aGlzLm5leHREYXRhLnN0b3B4K3MubWFyZ2luKjIsZD11K3Mud2lkdGgscD10aGlzLm5leHREYXRhLnN0YXJ0eStzLm1hcmdpbioyLHY9cCtzLmhlaWdodDsodT49dGhpcy5kYXRhLndpZHRoTGltaXR8fGQ+PXRoaXMuZGF0YS53aWR0aExpbWl0fHx0aGlzLm5leHREYXRhLmNudD5TcWUpJiYodT10aGlzLm5leHREYXRhLnN0YXJ0eCtzLm1hcmdpbiskcy5uZXh0TGluZVBhZGRpbmdYLHA9dGhpcy5uZXh0RGF0YS5zdG9weStzLm1hcmdpbioyLHRoaXMubmV4dERhdGEuc3RvcHg9ZD11K3Mud2lkdGgsdGhpcy5uZXh0RGF0YS5zdGFydHk9dGhpcy5uZXh0RGF0YS5zdG9weSx0aGlzLm5leHREYXRhLnN0b3B5PXY9cCtzLmhlaWdodCx0aGlzLm5leHREYXRhLmNudD0xKSxzLng9dSxzLnk9cCx0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsInN0YXJ0eCIsdSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5kYXRhLCJzdGFydHkiLHAsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RvcHgiLGQsTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RvcHkiLHYsTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHRoaXMubmV4dERhdGEsInN0YXJ0eCIsdSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RhcnR5IixwLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbCh0aGlzLm5leHREYXRhLCJzdG9weCIsZCxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RvcHkiLHYsTWF0aC5tYXgpfWluaXQocyl7dGhpcy5uYW1lPSIiLHRoaXMuZGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDAsd2lkdGhMaW1pdDp2b2lkIDB9LHRoaXMubmV4dERhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwLGNudDowfSxWYmUocy5kYi5nZXRDb25maWcoKSl9YnVtcExhc3RNYXJnaW4ocyl7dGhpcy5kYXRhLnN0b3B4Kz1zLHRoaXMuZGF0YS5zdG9weSs9c319Y29uc3QgVmJlPWZ1bmN0aW9uKGkpe2lkKCRzLGkpLGkuZm9udEZhbWlseSYmKCRzLnBlcnNvbkZvbnRGYW1pbHk9JHMuc3lzdGVtRm9udEZhbWlseT0kcy5tZXNzYWdlRm9udEZhbWlseT1pLmZvbnRGYW1pbHkpLGkuZm9udFNpemUmJigkcy5wZXJzb25Gb250U2l6ZT0kcy5zeXN0ZW1Gb250U2l6ZT0kcy5tZXNzYWdlRm9udFNpemU9aS5mb250U2l6ZSksaS5mb250V2VpZ2h0JiYoJHMucGVyc29uRm9udFdlaWdodD0kcy5zeXN0ZW1Gb250V2VpZ2h0PSRzLm1lc3NhZ2VGb250V2VpZ2h0PWkuZm9udFdlaWdodCl9LGJSPShpLHMpPT4oe2ZvbnRGYW1pbHk6aVtzKyJGb250RmFtaWx5Il0sZm9udFNpemU6aVtzKyJGb250U2l6ZSJdLGZvbnRXZWlnaHQ6aVtzKyJGb250V2VpZ2h0Il19KSxEUT1pPT4oe2ZvbnRGYW1pbHk6aS5ib3VuZGFyeUZvbnRGYW1pbHksZm9udFNpemU6aS5ib3VuZGFyeUZvbnRTaXplLGZvbnRXZWlnaHQ6aS5ib3VuZGFyeUZvbnRXZWlnaHR9KSxiVXQ9aT0+KHtmb250RmFtaWx5OmkubWVzc2FnZUZvbnRGYW1pbHksZm9udFNpemU6aS5tZXNzYWdlRm9udFNpemUsZm9udFdlaWdodDppLm1lc3NhZ2VGb250V2VpZ2h0fSk7ZnVuY3Rpb24gJDMoaSxzLHUsZCxwKXtpZighc1tpXS53aWR0aClpZih1KXNbaV0udGV4dD12amUoc1tpXS50ZXh0LHAsZCksc1tpXS50ZXh0TGluZXM9c1tpXS50ZXh0LnNwbGl0KGNpLmxpbmVCcmVha1JlZ2V4KS5sZW5ndGgsc1tpXS53aWR0aD1wLHNbaV0uaGVpZ2h0PUUyZShzW2ldLnRleHQsZCk7ZWxzZXtsZXQgdj1zW2ldLnRleHQuc3BsaXQoY2kubGluZUJyZWFrUmVnZXgpO3NbaV0udGV4dExpbmVzPXYubGVuZ3RoO2xldCBiPTA7c1tpXS5oZWlnaHQ9MCxzW2ldLndpZHRoPTA7Zm9yKGNvbnN0IHkgb2YgdilzW2ldLndpZHRoPU1hdGgubWF4KEg0KHksZCksc1tpXS53aWR0aCksYj1FMmUoeSxkKSxzW2ldLmhlaWdodD1zW2ldLmhlaWdodCtifX1jb25zdCBBcWU9ZnVuY3Rpb24oaSxzLHUpe3MueD11LmRhdGEuc3RhcnR4LHMueT11LmRhdGEuc3RhcnR5LHMud2lkdGg9dS5kYXRhLnN0b3B4LXUuZGF0YS5zdGFydHgscy5oZWlnaHQ9dS5kYXRhLnN0b3B5LXUuZGF0YS5zdGFydHkscy5sYWJlbC55PSRzLmM0U2hhcGVNYXJnaW4tMzU7bGV0IGQ9cy53cmFwJiYkcy53cmFwLHA9RFEoJHMpO3AuZm9udFNpemU9cC5mb250U2l6ZSsyLHAuZm9udFdlaWdodD0iYm9sZCI7bGV0IHY9SDQocy5sYWJlbC50ZXh0LHApOyQzKCJsYWJlbCIscyxkLHAsdiksSjQuZHJhd0JvdW5kYXJ5KGkscywkcyl9LExxZT1mdW5jdGlvbihpLHMsdSxkKXtsZXQgcD0wO2Zvcihjb25zdCB2IG9mIGQpe3A9MDtjb25zdCBiPXVbdl07bGV0IHk9YlIoJHMsYi50eXBlQzRTaGFwZS50ZXh0KTtzd2l0Y2goeS5mb250U2l6ZT15LmZvbnRTaXplLTIsYi50eXBlQzRTaGFwZS53aWR0aD1INCgiwqsiK2IudHlwZUM0U2hhcGUudGV4dCsiwrsiLHkpLGIudHlwZUM0U2hhcGUuaGVpZ2h0PXkuZm9udFNpemUrMixiLnR5cGVDNFNoYXBlLlk9JHMuYzRTaGFwZVBhZGRpbmcscD1iLnR5cGVDNFNoYXBlLlkrYi50eXBlQzRTaGFwZS5oZWlnaHQtNCxiLmltYWdlPXt3aWR0aDowLGhlaWdodDowLFk6MH0sYi50eXBlQzRTaGFwZS50ZXh0KXtjYXNlInBlcnNvbiI6Y2FzZSJleHRlcm5hbF9wZXJzb24iOmIuaW1hZ2Uud2lkdGg9NDgsYi5pbWFnZS5oZWlnaHQ9NDgsYi5pbWFnZS5ZPXAscD1iLmltYWdlLlkrYi5pbWFnZS5oZWlnaHQ7YnJlYWt9Yi5zcHJpdGUmJihiLmltYWdlLndpZHRoPTQ4LGIuaW1hZ2UuaGVpZ2h0PTQ4LGIuaW1hZ2UuWT1wLHA9Yi5pbWFnZS5ZK2IuaW1hZ2UuaGVpZ2h0KTtsZXQgVD1iLndyYXAmJiRzLndyYXAsXz0kcy53aWR0aC0kcy5jNFNoYXBlUGFkZGluZyoyLEE9YlIoJHMsYi50eXBlQzRTaGFwZS50ZXh0KTtpZihBLmZvbnRTaXplPUEuZm9udFNpemUrMixBLmZvbnRXZWlnaHQ9ImJvbGQiLCQzKCJsYWJlbCIsYixULEEsXyksYi5sYWJlbC5ZPXArOCxwPWIubGFiZWwuWStiLmxhYmVsLmhlaWdodCxiLnR5cGUmJmIudHlwZS50ZXh0IT09IiIpe2IudHlwZS50ZXh0PSJbIitiLnR5cGUudGV4dCsiXSI7bGV0IEY9YlIoJHMsYi50eXBlQzRTaGFwZS50ZXh0KTskMygidHlwZSIsYixULEYsXyksYi50eXBlLlk9cCs1LHA9Yi50eXBlLlkrYi50eXBlLmhlaWdodH1lbHNlIGlmKGIudGVjaG4mJmIudGVjaG4udGV4dCE9PSIiKXtiLnRlY2huLnRleHQ9IlsiK2IudGVjaG4udGV4dCsiXSI7bGV0IEY9YlIoJHMsYi50ZWNobi50ZXh0KTskMygidGVjaG4iLGIsVCxGLF8pLGIudGVjaG4uWT1wKzUscD1iLnRlY2huLlkrYi50ZWNobi5oZWlnaHR9bGV0IFA9cCxSPWIubGFiZWwud2lkdGg7aWYoYi5kZXNjciYmYi5kZXNjci50ZXh0IT09IiIpe2xldCBGPWJSKCRzLGIudHlwZUM0U2hhcGUudGV4dCk7JDMoImRlc2NyIixiLFQsRixfKSxiLmRlc2NyLlk9cCsyMCxwPWIuZGVzY3IuWStiLmRlc2NyLmhlaWdodCxSPU1hdGgubWF4KGIubGFiZWwud2lkdGgsYi5kZXNjci53aWR0aCksUD1wLWIuZGVzY3IudGV4dExpbmVzKjV9Uj1SKyRzLmM0U2hhcGVQYWRkaW5nLGIud2lkdGg9TWF0aC5tYXgoYi53aWR0aHx8JHMud2lkdGgsUiwkcy53aWR0aCksYi5oZWlnaHQ9TWF0aC5tYXgoYi5oZWlnaHR8fCRzLmhlaWdodCxQLCRzLmhlaWdodCksYi5tYXJnaW49Yi5tYXJnaW58fCRzLmM0U2hhcGVNYXJnaW4saS5pbnNlcnQoYiksSjQuZHJhd0M0U2hhcGUocyxiLCRzKX1pLmJ1bXBMYXN0TWFyZ2luKCRzLmM0U2hhcGVNYXJnaW4pfTtsZXQganY9Y2xhc3N7Y29uc3RydWN0b3Iocyx1KXt0aGlzLng9cyx0aGlzLnk9dX19LE1xZT1mdW5jdGlvbihpLHMpe2xldCB1PWkueCxkPWkueSxwPXMueCx2PXMueSxiPXUraS53aWR0aC8yLHk9ZCtpLmhlaWdodC8yLFQ9TWF0aC5hYnModS1wKSxfPU1hdGguYWJzKGQtdiksQT1fL1QsUD1pLmhlaWdodC9pLndpZHRoLFI9bnVsbDtyZXR1cm4gZD09diYmdTxwP1I9bmV3IGp2KHUraS53aWR0aCx5KTpkPT12JiZ1PnA/Uj1uZXcganYodSx5KTp1PT1wJiZkPHY/Uj1uZXcganYoYixkK2kuaGVpZ2h0KTp1PT1wJiZkPnYmJihSPW5ldyBqdihiLGQpKSx1PnAmJmQ8dj9QPj1BP1I9bmV3IGp2KHUseStBKmkud2lkdGgvMik6Uj1uZXcganYoYi1UL18qaS5oZWlnaHQvMixkK2kuaGVpZ2h0KTp1PHAmJmQ8dj9QPj1BP1I9bmV3IGp2KHUraS53aWR0aCx5K0EqaS53aWR0aC8yKTpSPW5ldyBqdihiK1QvXyppLmhlaWdodC8yLGQraS5oZWlnaHQpOnU8cCYmZD52P1A+PUE/Uj1uZXcganYodStpLndpZHRoLHktQSppLndpZHRoLzIpOlI9bmV3IGp2KGIraS5oZWlnaHQvMipUL18sZCk6dT5wJiZkPnYmJihQPj1BP1I9bmV3IGp2KHUseS1pLndpZHRoLzIqQSk6Uj1uZXcganYoYi1pLmhlaWdodC8yKlQvXyxkKSksUn0sbVV0PWZ1bmN0aW9uKGkscyl7bGV0IHU9e3g6MCx5OjB9O3UueD1zLngrcy53aWR0aC8yLHUueT1zLnkrcy5oZWlnaHQvMjtsZXQgZD1NcWUoaSx1KTt1Lng9aS54K2kud2lkdGgvMix1Lnk9aS55K2kuaGVpZ2h0LzI7bGV0IHA9TXFlKHMsdSk7cmV0dXJue3N0YXJ0UG9pbnQ6ZCxlbmRQb2ludDpwfX07Y29uc3QgdlV0PWZ1bmN0aW9uKGkscyx1LGQpe2xldCBwPTA7Zm9yKGxldCB2IG9mIHMpe3A9cCsxO2xldCBiPXYud3JhcCYmJHMud3JhcCx5PWJVdCgkcyk7ZC5kYi5nZXRDNFR5cGUoKT09PSJDNER5bmFtaWMiJiYodi5sYWJlbC50ZXh0PXArIjogIit2LmxhYmVsLnRleHQpO2xldCBfPUg0KHYubGFiZWwudGV4dCx5KTskMygibGFiZWwiLHYsYix5LF8pLHYudGVjaG4mJnYudGVjaG4udGV4dCE9PSIiJiYoXz1INCh2LnRlY2huLnRleHQseSksJDMoInRlY2huIix2LGIseSxfKSksdi5kZXNjciYmdi5kZXNjci50ZXh0IT09IiImJihfPUg0KHYuZGVzY3IudGV4dCx5KSwkMygiZGVzY3IiLHYsYix5LF8pKTtsZXQgQT11KHYuZnJvbSksUD11KHYudG8pLFI9bVV0KEEsUCk7di5zdGFydFBvaW50PVIuc3RhcnRQb2ludCx2LmVuZFBvaW50PVIuZW5kUG9pbnR9SjQuZHJhd1JlbHMoaSxzLCRzKX07ZnVuY3Rpb24gRHFlKGkscyx1LGQscCl7bGV0IHY9bmV3IF9xZShwKTt2LmRhdGEud2lkdGhMaW1pdD11LmRhdGEud2lkdGhMaW1pdC9NYXRoLm1pbihIYmUsZC5sZW5ndGgpO2ZvcihsZXRbYix5XW9mIGQuZW50cmllcygpKXtsZXQgVD0wO3kuaW1hZ2U9e3dpZHRoOjAsaGVpZ2h0OjAsWTowfSx5LnNwcml0ZSYmKHkuaW1hZ2Uud2lkdGg9NDgseS5pbWFnZS5oZWlnaHQ9NDgseS5pbWFnZS5ZPVQsVD15LmltYWdlLlkreS5pbWFnZS5oZWlnaHQpO2xldCBfPXkud3JhcCYmJHMud3JhcCxBPURRKCRzKTtpZihBLmZvbnRTaXplPUEuZm9udFNpemUrMixBLmZvbnRXZWlnaHQ9ImJvbGQiLCQzKCJsYWJlbCIseSxfLEEsdi5kYXRhLndpZHRoTGltaXQpLHkubGFiZWwuWT1UKzgsVD15LmxhYmVsLlkreS5sYWJlbC5oZWlnaHQseS50eXBlJiZ5LnR5cGUudGV4dCE9PSIiKXt5LnR5cGUudGV4dD0iWyIreS50eXBlLnRleHQrIl0iO2xldCBqPURRKCRzKTskMygidHlwZSIseSxfLGosdi5kYXRhLndpZHRoTGltaXQpLHkudHlwZS5ZPVQrNSxUPXkudHlwZS5ZK3kudHlwZS5oZWlnaHR9aWYoeS5kZXNjciYmeS5kZXNjci50ZXh0IT09IiIpe2xldCBqPURRKCRzKTtqLmZvbnRTaXplPWouZm9udFNpemUtMiwkMygiZGVzY3IiLHksXyxqLHYuZGF0YS53aWR0aExpbWl0KSx5LmRlc2NyLlk9VCsyMCxUPXkuZGVzY3IuWSt5LmRlc2NyLmhlaWdodH1pZihiPT0wfHxiJUhiZT09PTApe2xldCBqPXUuZGF0YS5zdGFydHgrJHMuZGlhZ3JhbU1hcmdpblgsSz11LmRhdGEuc3RvcHkrJHMuZGlhZ3JhbU1hcmdpblkrVDt2LnNldERhdGEoaixqLEssSyl9ZWxzZXtsZXQgaj12LmRhdGEuc3RvcHghPT12LmRhdGEuc3RhcnR4P3YuZGF0YS5zdG9weCskcy5kaWFncmFtTWFyZ2luWDp2LmRhdGEuc3RhcnR4LEs9di5kYXRhLnN0YXJ0eTt2LnNldERhdGEoaixqLEssSyl9di5uYW1lPXkuYWxpYXM7bGV0IFA9cC5kYi5nZXRDNFNoYXBlQXJyYXkoeS5hbGlhcyksUj1wLmRiLmdldEM0U2hhcGVLZXlzKHkuYWxpYXMpO1IubGVuZ3RoPjAmJkxxZSh2LGksUCxSKSxzPXkuYWxpYXM7bGV0IEY9cC5kYi5nZXRCb3VuZGFyeXMocyk7Ri5sZW5ndGg+MCYmRHFlKGkscyx2LEYscCkseS5hbGlhcyE9PSJnbG9iYWwiJiZBcWUoaSx5LHYpLHUuZGF0YS5zdG9weT1NYXRoLm1heCh2LmRhdGEuc3RvcHkrJHMuYzRTaGFwZU1hcmdpbix1LmRhdGEuc3RvcHkpLHUuZGF0YS5zdG9weD1NYXRoLm1heCh2LmRhdGEuc3RvcHgrJHMuYzRTaGFwZU1hcmdpbix1LmRhdGEuc3RvcHgpLExRPU1hdGgubWF4KExRLHUuZGF0YS5zdG9weCksTVE9TWF0aC5tYXgoTVEsdS5kYXRhLnN0b3B5KX19Y29uc3QgSXFlPXtkcmF3UGVyc29uT3JTeXN0ZW1BcnJheTpMcWUsZHJhd0JvdW5kYXJ5OkFxZSxzZXRDb25mOlZiZSxkcmF3OmZ1bmN0aW9uKGkscyx1LGQpeyRzPXF0KCkuYzQ7Y29uc3QgcD1xdCgpLnNlY3VyaXR5TGV2ZWw7bGV0IHY7cD09PSJzYW5kYm94IiYmKHY9SXIoIiNpIitzKSk7Y29uc3QgYj1JcihwPT09InNhbmRib3giP3Yubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpO2xldCB5PWQuZGI7ZC5kYi5zZXRXcmFwKCRzLndyYXApLFNxZT15LmdldEM0U2hhcGVJblJvdygpLEhiZT15LmdldEM0Qm91bmRhcnlJblJvdygpLFhlLmRlYnVnKGBDOiR7SlNPTi5zdHJpbmdpZnkoJHMsbnVsbCwyKX1gKTtjb25zdCBUPXA9PT0ic2FuZGJveCI/Yi5zZWxlY3QoYFtpZD0iJHtzfSJdYCk6SXIoYFtpZD0iJHtzfSJdYCk7SjQuaW5zZXJ0Q29tcHV0ZXJJY29uKFQpLEo0Lmluc2VydERhdGFiYXNlSWNvbihUKSxKNC5pbnNlcnRDbG9ja0ljb24oVCk7bGV0IF89bmV3IF9xZShkKTtfLnNldERhdGEoJHMuZGlhZ3JhbU1hcmdpblgsJHMuZGlhZ3JhbU1hcmdpblgsJHMuZGlhZ3JhbU1hcmdpblksJHMuZGlhZ3JhbU1hcmdpblkpLF8uZGF0YS53aWR0aExpbWl0PXNjcmVlbi5hdmFpbFdpZHRoLExRPSRzLmRpYWdyYW1NYXJnaW5YLE1RPSRzLmRpYWdyYW1NYXJnaW5ZO2NvbnN0IEE9ZC5kYi5nZXRUaXRsZSgpO2xldCBQPWQuZGIuZ2V0Qm91bmRhcnlzKCIiKTtEcWUoVCwiIixfLFAsZCksSjQuaW5zZXJ0QXJyb3dIZWFkKFQpLEo0Lmluc2VydEFycm93RW5kKFQpLEo0Lmluc2VydEFycm93Q3Jvc3NIZWFkKFQpLEo0Lmluc2VydEFycm93RmlsbGVkSGVhZChUKSx2VXQoVCxkLmRiLmdldFJlbHMoKSxkLmRiLmdldEM0U2hhcGUsZCksXy5kYXRhLnN0b3B4PUxRLF8uZGF0YS5zdG9weT1NUTtjb25zdCBSPV8uZGF0YTtsZXQgaj1SLnN0b3B5LVIuc3RhcnR5KzIqJHMuZGlhZ3JhbU1hcmdpblk7Y29uc3QgZWU9Ui5zdG9weC1SLnN0YXJ0eCsyKiRzLmRpYWdyYW1NYXJnaW5YO0EmJlQuYXBwZW5kKCJ0ZXh0IikudGV4dChBKS5hdHRyKCJ4IiwoUi5zdG9weC1SLnN0YXJ0eCkvMi00KiRzLmRpYWdyYW1NYXJnaW5YKS5hdHRyKCJ5IixSLnN0YXJ0eSskcy5kaWFncmFtTWFyZ2luWSksTmcoVCxqLGVlLCRzLnVzZU1heFdpZHRoKTtjb25zdCBpZT1BPzYwOjA7VC5hdHRyKCJ2aWV3Qm94IixSLnN0YXJ0eC0kcy5kaWFncmFtTWFyZ2luWCsiIC0iKygkcy5kaWFncmFtTWFyZ2luWStpZSkrIiAiK2VlKyIgIisoaitpZSkpLFhlLmRlYnVnKCJtb2RlbHM6IixSKX19LHdVdD1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOkRWdCxkYjokYmUscmVuZGVyZXI6SXFlLHN0eWxlczppPT5gLnBlcnNvbiB7CiAgICBzdHJva2U6ICR7aS5wZXJzb25Cb3JkZXJ9OwogICAgZmlsbDogJHtpLnBlcnNvbkJrZ307CiAgfQpgLGluaXQ6KHtjNDppLHdyYXA6c30pPT57SXFlLnNldENvbmYoaSksJGJlLnNldFdyYXAocyl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgVWJlPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oJDAsV2ksQnMsUWEpe2ZvcihCcz1Cc3x8e30sUWE9JDAubGVuZ3RoO1FhLS07QnNbJDBbUWFdXT1XaSk7cmV0dXJuIEJzfSxzPVsxLDRdLHU9WzEsM10sZD1bMSw1XSxwPVsxLDgsOSwxMCwxMSwyNywzNCwzNiwzOCw0Miw1OCw4MSw4Miw4Myw4NCw4NSw4Niw5OSwxMDIsMTAzLDEwNiwxMDgsMTExLDExMiwxMTMsMTE4LDExOSwxMjAsMTIxXSx2PVsyLDJdLGI9WzEsMTNdLHk9WzEsMTRdLFQ9WzEsMTVdLF89WzEsMTZdLEE9WzEsMjNdLFA9WzEsMjVdLFI9WzEsMjZdLEY9WzEsMjddLGo9WzEsNDldLEs9WzEsNDhdLGVlPVsxLDI5XSxpZT1bMSwzMF0sb2U9WzEsMzFdLHBlPVsxLDMyXSxiZT1bMSwzM10sYWU9WzEsNDRdLG5lPVsxLDQ2XSxzZT1bMSw0Ml0sZGU9WzEsNDddLFg9WzEsNDNdLGdlPVsxLDUwXSxXPVsxLDQ1XSx4ZT1bMSw1MV0sVT1bMSw1Ml0sRmU9WzEsMzRdLFBlPVsxLDM1XSxqZT1bMSwzNl0sSWU9WzEsMzddLFNlPVsxLDU3XSxDZT1bMSw4LDksMTAsMTEsMjcsMzIsMzQsMzYsMzgsNDIsNTgsODEsODIsODMsODQsODUsODYsOTksMTAyLDEwMywxMDYsMTA4LDExMSwxMTIsMTEzLDExOCwxMTksMTIwLDEyMV0sa2U9WzEsNjFdLEtlPVsxLDYwXSxGdD1bMSw2Ml0sTmU9WzgsOSwxMSw3Myw3NV0sZ249WzEsODhdLF90PVsxLDkzXSxFdD1bMSw5Ml0sR3Q9WzEsODldLGxuPVsxLDg1XSx4dD1bMSw5MV0sUHQ9WzEsODddLFFlPVsxLDk0XSxEdD1bMSw5MF0sa3Q9WzEsOTVdLE9uPVsxLDg2XSxodD1bOCw5LDEwLDExLDczLDc1XSx6cj1bOCw5LDEwLDExLDQ0LDczLDc1XSx5dD1bOCw5LDEwLDExLDI5LDQyLDQ0LDQ2LDQ4LDUwLDUyLDU0LDU2LDU4LDYxLDYzLDY1LDY2LDY4LDczLDc1LDg2LDk5LDEwMiwxMDMsMTA2LDEwOCwxMTEsMTEyLDExM10samk9WzgsOSwxMSw0Miw1OCw3Myw3NSw4Niw5OSwxMDIsMTAzLDEwNiwxMDgsMTExLDExMiwxMTNdLHhpPVs0Miw1OCw4Niw5OSwxMDIsMTAzLDEwNiwxMDgsMTExLDExMiwxMTNdLE1hPVsxLDEyMV0senM9WzEsMTIwXSxhbz1bMSwxMjhdLFRyPVsxLDE0Ml0sRm49WzEsMTQzXSxxbj1bMSwxNDRdLFVuPVsxLDE0NV0sQXQ9WzEsMTMwXSx3dD1bMSwxMzJdLG9uPVsxLDEzNl0sZm49WzEsMTM3XSxBbj1bMSwxMzhdLG9vPVsxLDEzOV0sam89WzEsMTQwXSwkbz1bMSwxNDFdLFBhPVsxLDE0Nl0sd289WzEsMTQ3XSxfcz1bMSwxMjZdLHRsPVsxLDEyN10sZGE9WzEsMTM0XSxqMD1bMSwxMjldLHBtPVsxLDEzM10sTWw9WzEsMTMxXSxYYz1bOCw5LDEwLDExLDI3LDMyLDM0LDM2LDM4LDQyLDU4LDgxLDgyLDgzLDg0LDg1LDg2LDk5LDEwMiwxMDMsMTA2LDEwOCwxMTEsMTEyLDExMywxMTgsMTE5LDEyMCwxMjFdLEJjPVsxLDE0OV0samE9WzgsOSwxMV0sT3U9WzgsOSwxMCwxMSwxNCw0Miw1OCw4NiwxMDIsMTAzLDEwNiwxMDgsMTExLDExMiwxMTNdLFNhPVsxLDE2OV0sUG89WzEsMTY1XSxGYz1bMSwxNjZdLHhhPVsxLDE3MF0sQmE9WzEsMTY3XSxnYT1bMSwxNjhdLGtoPVs3NSwxMTMsMTE2XSxsdT1bOCw5LDEwLDExLDEyLDE0LDI3LDI5LDMyLDQyLDU4LDczLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDEwMiwxMDYsMTA4LDExMSwxMTIsMTEzXSxvNT1bMTAsMTAzXSxXaD1bMzEsNDcsNDksNTEsNTMsNTUsNjAsNjIsNjQsNjUsNjcsNjksMTEzLDExNCwxMTVdLG9kPVsxLDIzNV0sR2Q9WzEsMjMzXSxjZD1bMSwyMzddLEtkPVsxLDIzMV0sJGc9WzEsMjMyXSxhcz1bMSwyMzRdLHduPVsxLDIzNl0sWnI9WzEsMjM4XSxaaT1bMSwyNTVdLG51PVs4LDksMTEsMTAzXSx2dT1bOCw5LDEwLDExLDU4LDgxLDEwMiwxMDMsMTA2LDEwNywxMDgsMTA5XSxEbD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZ3JhcGhDb25maWc6NCxkb2N1bWVudDo1LGxpbmU6NixzdGF0ZW1lbnQ6NyxTRU1JOjgsTkVXTElORTo5LFNQQUNFOjEwLEVPRjoxMSxHUkFQSDoxMixOT0RJUjoxMyxESVI6MTQsRmlyc3RTdG10U2VwYXJhdG9yOjE1LGVuZGluZzoxNixlbmRUb2tlbjoxNyxzcGFjZUxpc3Q6MTgsc3BhY2VMaXN0TmV3bGluZToxOSx2ZXJ0ZXhTdGF0ZW1lbnQ6MjAsc2VwYXJhdG9yOjIxLHN0eWxlU3RhdGVtZW50OjIyLGxpbmtTdHlsZVN0YXRlbWVudDoyMyxjbGFzc0RlZlN0YXRlbWVudDoyNCxjbGFzc1N0YXRlbWVudDoyNSxjbGlja1N0YXRlbWVudDoyNixzdWJncmFwaDoyNyx0ZXh0Tm9UYWdzOjI4LFNRUzoyOSx0ZXh0OjMwLFNRRTozMSxlbmQ6MzIsZGlyZWN0aW9uOjMzLGFjY190aXRsZTozNCxhY2NfdGl0bGVfdmFsdWU6MzUsYWNjX2Rlc2NyOjM2LGFjY19kZXNjcl92YWx1ZTozNyxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM4LGxpbms6Mzksbm9kZTo0MCxzdHlsZWRWZXJ0ZXg6NDEsQU1QOjQyLHZlcnRleDo0MyxTVFlMRV9TRVBBUkFUT1I6NDQsaWRTdHJpbmc6NDUsRE9VQkxFQ0lSQ0xFU1RBUlQ6NDYsRE9VQkxFQ0lSQ0xFRU5EOjQ3LFBTOjQ4LFBFOjQ5LCIoLSI6NTAsIi0pIjo1MSxTVEFESVVNU1RBUlQ6NTIsU1RBRElVTUVORDo1MyxTVUJST1VUSU5FU1RBUlQ6NTQsU1VCUk9VVElORUVORDo1NSxWRVJURVhfV0lUSF9QUk9QU19TVEFSVDo1NiwiTk9ERV9TVFJJTkdbZmllbGRdIjo1NyxDT0xPTjo1OCwiTk9ERV9TVFJJTkdbdmFsdWVdIjo1OSxQSVBFOjYwLENZTElOREVSU1RBUlQ6NjEsQ1lMSU5ERVJFTkQ6NjIsRElBTU9ORF9TVEFSVDo2MyxESUFNT05EX1NUT1A6NjQsVEFHRU5EOjY1LFRSQVBTVEFSVDo2NixUUkFQRU5EOjY3LElOVlRSQVBTVEFSVDo2OCxJTlZUUkFQRU5EOjY5LGxpbmtTdGF0ZW1lbnQ6NzAsYXJyb3dUZXh0OjcxLFRFU1RTVFI6NzIsU1RBUlRfTElOSzo3MyxlZGdlVGV4dDo3NCxMSU5LOjc1LGVkZ2VUZXh0VG9rZW46NzYsU1RSOjc3LE1EX1NUUjo3OCx0ZXh0VG9rZW46Nzksa2V5d29yZHM6ODAsU1RZTEU6ODEsTElOS1NUWUxFOjgyLENMQVNTREVGOjgzLENMQVNTOjg0LENMSUNLOjg1LERPV046ODYsVVA6ODcsdGV4dE5vVGFnc1Rva2VuOjg4LHN0eWxlc09wdDo4OSwiaWRTdHJpbmdbdmVydGV4XSI6OTAsImlkU3RyaW5nW2NsYXNzXSI6OTEsQ0FMTEJBQ0tOQU1FOjkyLENBTExCQUNLQVJHUzo5MyxIUkVGOjk0LExJTktfVEFSR0VUOjk1LCJTVFJbbGlua10iOjk2LCJTVFJbdG9vbHRpcF0iOjk3LGFscGhhTnVtOjk4LERFRkFVTFQ6OTksbnVtTGlzdDoxMDAsSU5URVJQT0xBVEU6MTAxLE5VTToxMDIsQ09NTUE6MTAzLHN0eWxlOjEwNCxzdHlsZUNvbXBvbmVudDoxMDUsTk9ERV9TVFJJTkc6MTA2LFVOSVQ6MTA3LEJSS1Q6MTA4LFBDVDoxMDksaWRTdHJpbmdUb2tlbjoxMTAsTUlOVVM6MTExLE1VTFQ6MTEyLFVOSUNPREVfVEVYVDoxMTMsVEVYVDoxMTQsVEFHU1RBUlQ6MTE1LEVER0VfVEVYVDoxMTYsYWxwaGFOdW1Ub2tlbjoxMTcsZGlyZWN0aW9uX3RiOjExOCxkaXJlY3Rpb25fYnQ6MTE5LGRpcmVjdGlvbl9ybDoxMjAsZGlyZWN0aW9uX2xyOjEyMSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsODoiU0VNSSIsOToiTkVXTElORSIsMTA6IlNQQUNFIiwxMToiRU9GIiwxMjoiR1JBUEgiLDEzOiJOT0RJUiIsMTQ6IkRJUiIsMjc6InN1YmdyYXBoIiwyOToiU1FTIiwzMToiU1FFIiwzMjoiZW5kIiwzNDoiYWNjX3RpdGxlIiwzNToiYWNjX3RpdGxlX3ZhbHVlIiwzNjoiYWNjX2Rlc2NyIiwzNzoiYWNjX2Rlc2NyX3ZhbHVlIiwzODoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsNDI6IkFNUCIsNDQ6IlNUWUxFX1NFUEFSQVRPUiIsNDY6IkRPVUJMRUNJUkNMRVNUQVJUIiw0NzoiRE9VQkxFQ0lSQ0xFRU5EIiw0ODoiUFMiLDQ5OiJQRSIsNTA6IigtIiw1MToiLSkiLDUyOiJTVEFESVVNU1RBUlQiLDUzOiJTVEFESVVNRU5EIiw1NDoiU1VCUk9VVElORVNUQVJUIiw1NToiU1VCUk9VVElORUVORCIsNTY6IlZFUlRFWF9XSVRIX1BST1BTX1NUQVJUIiw1NzoiTk9ERV9TVFJJTkdbZmllbGRdIiw1ODoiQ09MT04iLDU5OiJOT0RFX1NUUklOR1t2YWx1ZV0iLDYwOiJQSVBFIiw2MToiQ1lMSU5ERVJTVEFSVCIsNjI6IkNZTElOREVSRU5EIiw2MzoiRElBTU9ORF9TVEFSVCIsNjQ6IkRJQU1PTkRfU1RPUCIsNjU6IlRBR0VORCIsNjY6IlRSQVBTVEFSVCIsNjc6IlRSQVBFTkQiLDY4OiJJTlZUUkFQU1RBUlQiLDY5OiJJTlZUUkFQRU5EIiw3MjoiVEVTVFNUUiIsNzM6IlNUQVJUX0xJTksiLDc1OiJMSU5LIiw3NzoiU1RSIiw3ODoiTURfU1RSIiw4MToiU1RZTEUiLDgyOiJMSU5LU1RZTEUiLDgzOiJDTEFTU0RFRiIsODQ6IkNMQVNTIiw4NToiQ0xJQ0siLDg2OiJET1dOIiw4NzoiVVAiLDkwOiJpZFN0cmluZ1t2ZXJ0ZXhdIiw5MToiaWRTdHJpbmdbY2xhc3NdIiw5MjoiQ0FMTEJBQ0tOQU1FIiw5MzoiQ0FMTEJBQ0tBUkdTIiw5NDoiSFJFRiIsOTU6IkxJTktfVEFSR0VUIiw5NjoiU1RSW2xpbmtdIiw5NzoiU1RSW3Rvb2x0aXBdIiw5OToiREVGQVVMVCIsMTAxOiJJTlRFUlBPTEFURSIsMTAyOiJOVU0iLDEwMzoiQ09NTUEiLDEwNjoiTk9ERV9TVFJJTkciLDEwNzoiVU5JVCIsMTA4OiJCUktUIiwxMDk6IlBDVCIsMTExOiJNSU5VUyIsMTEyOiJNVUxUIiwxMTM6IlVOSUNPREVfVEVYVCIsMTE0OiJURVhUIiwxMTU6IlRBR1NUQVJUIiwxMTY6IkVER0VfVEVYVCIsMTE4OiJkaXJlY3Rpb25fdGIiLDExOToiZGlyZWN0aW9uX2J0IiwxMjA6ImRpcmVjdGlvbl9ybCIsMTIxOiJkaXJlY3Rpb25fbHIifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzUsMF0sWzUsMl0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsM10sWzE2LDJdLFsxNiwxXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMTUsMV0sWzE1LDFdLFsxNSwyXSxbMTksMl0sWzE5LDJdLFsxOSwxXSxbMTksMV0sWzE4LDJdLFsxOCwxXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNyw5XSxbNyw2XSxbNyw0XSxbNywxXSxbNywyXSxbNywyXSxbNywxXSxbMjEsMV0sWzIxLDFdLFsyMSwxXSxbMjAsM10sWzIwLDRdLFsyMCwyXSxbMjAsMV0sWzQwLDFdLFs0MCw1XSxbNDEsMV0sWzQxLDNdLFs0Myw0XSxbNDMsNF0sWzQzLDZdLFs0Myw0XSxbNDMsNF0sWzQzLDRdLFs0Myw4XSxbNDMsNF0sWzQzLDRdLFs0Myw0XSxbNDMsNl0sWzQzLDRdLFs0Myw0XSxbNDMsNF0sWzQzLDRdLFs0Myw0XSxbNDMsMV0sWzM5LDJdLFszOSwzXSxbMzksM10sWzM5LDFdLFszOSwzXSxbNzQsMV0sWzc0LDJdLFs3NCwxXSxbNzQsMV0sWzcwLDFdLFs3MSwzXSxbMzAsMV0sWzMwLDJdLFszMCwxXSxbMzAsMV0sWzgwLDFdLFs4MCwxXSxbODAsMV0sWzgwLDFdLFs4MCwxXSxbODAsMV0sWzgwLDFdLFs4MCwxXSxbODAsMV0sWzgwLDFdLFs4MCwxXSxbMjgsMV0sWzI4LDJdLFsyOCwxXSxbMjgsMV0sWzI0LDVdLFsyNSw1XSxbMjYsMl0sWzI2LDRdLFsyNiwzXSxbMjYsNV0sWzI2LDNdLFsyNiw1XSxbMjYsNV0sWzI2LDddLFsyNiwyXSxbMjYsNF0sWzI2LDJdLFsyNiw0XSxbMjYsNF0sWzI2LDZdLFsyMiw1XSxbMjMsNV0sWzIzLDVdLFsyMyw5XSxbMjMsOV0sWzIzLDddLFsyMyw3XSxbMTAwLDFdLFsxMDAsM10sWzg5LDFdLFs4OSwzXSxbMTA0LDFdLFsxMDQsMl0sWzEwNSwxXSxbMTA1LDFdLFsxMDUsMV0sWzEwNSwxXSxbMTA1LDFdLFsxMDUsMV0sWzEwNSwxXSxbMTA1LDFdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFsxMTAsMV0sWzExMCwxXSxbNzksMV0sWzc5LDFdLFs3OSwxXSxbNzksMV0sWzg4LDFdLFs4OCwxXSxbODgsMV0sWzg4LDFdLFs4OCwxXSxbODgsMV0sWzg4LDFdLFs4OCwxXSxbODgsMV0sWzg4LDFdLFs4OCwxXSxbNzYsMV0sWzc2LDFdLFsxMTcsMV0sWzExNywxXSxbMTE3LDFdLFsxMTcsMV0sWzExNywxXSxbMTE3LDFdLFsxMTcsMV0sWzExNywxXSxbMTE3LDFdLFsxMTcsMV0sWzExNywxXSxbNDUsMV0sWzQ1LDJdLFs5OCwxXSxbOTgsMl0sWzMzLDFdLFszMywxXSxbMzMsMV0sWzMzLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKFdpLEJzLFFhLEJpLE51LE90LFczKXt2YXIgS3Q9T3QubGVuZ3RoLTE7c3dpdGNoKE51KXtjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzooIUFycmF5LmlzQXJyYXkoT3RbS3RdKXx8T3RbS3RdLmxlbmd0aD4wKSYmT3RbS3QtMV0ucHVzaChPdFtLdF0pLHRoaXMuJD1PdFtLdC0xXTticmVhaztjYXNlIDQ6Y2FzZSAxNzY6dGhpcy4kPU90W0t0XTticmVhaztjYXNlIDExOkJpLnNldERpcmVjdGlvbigiVEIiKSx0aGlzLiQ9IlRCIjticmVhaztjYXNlIDEyOkJpLnNldERpcmVjdGlvbihPdFtLdC0xXSksdGhpcy4kPU90W0t0LTFdO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPU90W0t0LTFdLm5vZGVzO2JyZWFrO2Nhc2UgMjg6Y2FzZSAyOTpjYXNlIDMwOmNhc2UgMzE6Y2FzZSAzMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9QmkuYWRkU3ViR3JhcGgoT3RbS3QtNl0sT3RbS3QtMV0sT3RbS3QtNF0pO2JyZWFrO2Nhc2UgMzQ6dGhpcy4kPUJpLmFkZFN1YkdyYXBoKE90W0t0LTNdLE90W0t0LTFdLE90W0t0LTNdKTticmVhaztjYXNlIDM1OnRoaXMuJD1CaS5hZGRTdWJHcmFwaCh2b2lkIDAsT3RbS3QtMV0sdm9pZCAwKTticmVhaztjYXNlIDM3OnRoaXMuJD1PdFtLdF0udHJpbSgpLEJpLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAzODpjYXNlIDM5OnRoaXMuJD1PdFtLdF0udHJpbSgpLEJpLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSA0MzpCaS5hZGRMaW5rKE90W0t0LTJdLnN0bXQsT3RbS3RdLE90W0t0LTFdKSx0aGlzLiQ9e3N0bXQ6T3RbS3RdLG5vZGVzOk90W0t0XS5jb25jYXQoT3RbS3QtMl0ubm9kZXMpfTticmVhaztjYXNlIDQ0OkJpLmFkZExpbmsoT3RbS3QtM10uc3RtdCxPdFtLdC0xXSxPdFtLdC0yXSksdGhpcy4kPXtzdG10Ok90W0t0LTFdLG5vZGVzOk90W0t0LTFdLmNvbmNhdChPdFtLdC0zXS5ub2Rlcyl9O2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXtzdG10Ok90W0t0LTFdLG5vZGVzOk90W0t0LTFdfTticmVhaztjYXNlIDQ2OnRoaXMuJD17c3RtdDpPdFtLdF0sbm9kZXM6T3RbS3RdfTticmVhaztjYXNlIDQ3OnRoaXMuJD1bT3RbS3RdXTticmVhaztjYXNlIDQ4OnRoaXMuJD1PdFtLdC00XS5jb25jYXQoT3RbS3RdKTticmVhaztjYXNlIDQ5OnRoaXMuJD1PdFtLdF07YnJlYWs7Y2FzZSA1MDp0aGlzLiQ9T3RbS3QtMl0sQmkuc2V0Q2xhc3MoT3RbS3QtMl0sT3RbS3RdKTticmVhaztjYXNlIDUxOnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sInNxdWFyZSIpO2JyZWFrO2Nhc2UgNTI6dGhpcy4kPU90W0t0LTNdLEJpLmFkZFZlcnRleChPdFtLdC0zXSxPdFtLdC0xXSwiZG91YmxlY2lyY2xlIik7YnJlYWs7Y2FzZSA1Mzp0aGlzLiQ9T3RbS3QtNV0sQmkuYWRkVmVydGV4KE90W0t0LTVdLE90W0t0LTJdLCJjaXJjbGUiKTticmVhaztjYXNlIDU0OnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sImVsbGlwc2UiKTticmVhaztjYXNlIDU1OnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sInN0YWRpdW0iKTticmVhaztjYXNlIDU2OnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sInN1YnJvdXRpbmUiKTticmVhaztjYXNlIDU3OnRoaXMuJD1PdFtLdC03XSxCaS5hZGRWZXJ0ZXgoT3RbS3QtN10sT3RbS3QtMV0sInJlY3QiLHZvaWQgMCx2b2lkIDAsdm9pZCAwLE9iamVjdC5mcm9tRW50cmllcyhbW090W0t0LTVdLE90W0t0LTNdXV0pKTticmVhaztjYXNlIDU4OnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sImN5bGluZGVyIik7YnJlYWs7Y2FzZSA1OTp0aGlzLiQ9T3RbS3QtM10sQmkuYWRkVmVydGV4KE90W0t0LTNdLE90W0t0LTFdLCJyb3VuZCIpO2JyZWFrO2Nhc2UgNjA6dGhpcy4kPU90W0t0LTNdLEJpLmFkZFZlcnRleChPdFtLdC0zXSxPdFtLdC0xXSwiZGlhbW9uZCIpO2JyZWFrO2Nhc2UgNjE6dGhpcy4kPU90W0t0LTVdLEJpLmFkZFZlcnRleChPdFtLdC01XSxPdFtLdC0yXSwiaGV4YWdvbiIpO2JyZWFrO2Nhc2UgNjI6dGhpcy4kPU90W0t0LTNdLEJpLmFkZFZlcnRleChPdFtLdC0zXSxPdFtLdC0xXSwib2RkIik7YnJlYWs7Y2FzZSA2Mzp0aGlzLiQ9T3RbS3QtM10sQmkuYWRkVmVydGV4KE90W0t0LTNdLE90W0t0LTFdLCJ0cmFwZXpvaWQiKTticmVhaztjYXNlIDY0OnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sImludl90cmFwZXpvaWQiKTticmVhaztjYXNlIDY1OnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sImxlYW5fcmlnaHQiKTticmVhaztjYXNlIDY2OnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sImxlYW5fbGVmdCIpO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPU90W0t0XSxCaS5hZGRWZXJ0ZXgoT3RbS3RdKTticmVhaztjYXNlIDY4Ok90W0t0LTFdLnRleHQ9T3RbS3RdLHRoaXMuJD1PdFtLdC0xXTticmVhaztjYXNlIDY5OmNhc2UgNzA6T3RbS3QtMl0udGV4dD1PdFtLdC0xXSx0aGlzLiQ9T3RbS3QtMl07YnJlYWs7Y2FzZSA3MTp0aGlzLiQ9T3RbS3RdO2JyZWFrO2Nhc2UgNzI6dmFyIHowPUJpLmRlc3RydWN0TGluayhPdFtLdF0sT3RbS3QtMl0pO3RoaXMuJD17dHlwZTp6MC50eXBlLHN0cm9rZTp6MC5zdHJva2UsbGVuZ3RoOnowLmxlbmd0aCx0ZXh0Ok90W0t0LTFdfTticmVhaztjYXNlIDczOnRoaXMuJD17dGV4dDpPdFtLdF0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgNzQ6dGhpcy4kPXt0ZXh0Ok90W0t0LTFdLnRleHQrIiIrT3RbS3RdLHR5cGU6T3RbS3QtMV0udHlwZX07YnJlYWs7Y2FzZSA3NTp0aGlzLiQ9e3RleHQ6T3RbS3RdLHR5cGU6InN0cmluZyJ9O2JyZWFrO2Nhc2UgNzY6dGhpcy4kPXt0ZXh0Ok90W0t0XSx0eXBlOiJtYXJrZG93biJ9O2JyZWFrO2Nhc2UgNzc6dmFyIHowPUJpLmRlc3RydWN0TGluayhPdFtLdF0pO3RoaXMuJD17dHlwZTp6MC50eXBlLHN0cm9rZTp6MC5zdHJva2UsbGVuZ3RoOnowLmxlbmd0aH07YnJlYWs7Y2FzZSA3ODp0aGlzLiQ9T3RbS3QtMV07YnJlYWs7Y2FzZSA3OTp0aGlzLiQ9e3RleHQ6T3RbS3RdLHR5cGU6InRleHQifTticmVhaztjYXNlIDgwOnRoaXMuJD17dGV4dDpPdFtLdC0xXS50ZXh0KyIiK090W0t0XSx0eXBlOk90W0t0LTFdLnR5cGV9O2JyZWFrO2Nhc2UgODE6dGhpcy4kPXt0ZXh0Ok90W0t0XSx0eXBlOiJzdHJpbmcifTticmVhaztjYXNlIDgyOmNhc2UgOTc6dGhpcy4kPXt0ZXh0Ok90W0t0XSx0eXBlOiJtYXJrZG93biJ9O2JyZWFrO2Nhc2UgOTQ6dGhpcy4kPXt0ZXh0Ok90W0t0XSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSA5NTp0aGlzLiQ9e3RleHQ6T3RbS3QtMV0udGV4dCsiIitPdFtLdF0sdHlwZTpPdFtLdC0xXS50eXBlfTticmVhaztjYXNlIDk2OnRoaXMuJD17dGV4dDpPdFtLdF0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgOTg6dGhpcy4kPU90W0t0LTRdLEJpLmFkZENsYXNzKE90W0t0LTJdLE90W0t0XSk7YnJlYWs7Y2FzZSA5OTp0aGlzLiQ9T3RbS3QtNF0sQmkuc2V0Q2xhc3MoT3RbS3QtMl0sT3RbS3RdKTticmVhaztjYXNlIDEwMDpjYXNlIDEwODp0aGlzLiQ9T3RbS3QtMV0sQmkuc2V0Q2xpY2tFdmVudChPdFtLdC0xXSxPdFtLdF0pO2JyZWFrO2Nhc2UgMTAxOmNhc2UgMTA5OnRoaXMuJD1PdFtLdC0zXSxCaS5zZXRDbGlja0V2ZW50KE90W0t0LTNdLE90W0t0LTJdKSxCaS5zZXRUb29sdGlwKE90W0t0LTNdLE90W0t0XSk7YnJlYWs7Y2FzZSAxMDI6dGhpcy4kPU90W0t0LTJdLEJpLnNldENsaWNrRXZlbnQoT3RbS3QtMl0sT3RbS3QtMV0sT3RbS3RdKTticmVhaztjYXNlIDEwMzp0aGlzLiQ9T3RbS3QtNF0sQmkuc2V0Q2xpY2tFdmVudChPdFtLdC00XSxPdFtLdC0zXSxPdFtLdC0yXSksQmkuc2V0VG9vbHRpcChPdFtLdC00XSxPdFtLdF0pO2JyZWFrO2Nhc2UgMTA0OnRoaXMuJD1PdFtLdC0yXSxCaS5zZXRMaW5rKE90W0t0LTJdLE90W0t0XSk7YnJlYWs7Y2FzZSAxMDU6dGhpcy4kPU90W0t0LTRdLEJpLnNldExpbmsoT3RbS3QtNF0sT3RbS3QtMl0pLEJpLnNldFRvb2x0aXAoT3RbS3QtNF0sT3RbS3RdKTticmVhaztjYXNlIDEwNjp0aGlzLiQ9T3RbS3QtNF0sQmkuc2V0TGluayhPdFtLdC00XSxPdFtLdC0yXSxPdFtLdF0pO2JyZWFrO2Nhc2UgMTA3OnRoaXMuJD1PdFtLdC02XSxCaS5zZXRMaW5rKE90W0t0LTZdLE90W0t0LTRdLE90W0t0XSksQmkuc2V0VG9vbHRpcChPdFtLdC02XSxPdFtLdC0yXSk7YnJlYWs7Y2FzZSAxMTA6dGhpcy4kPU90W0t0LTFdLEJpLnNldExpbmsoT3RbS3QtMV0sT3RbS3RdKTticmVhaztjYXNlIDExMTp0aGlzLiQ9T3RbS3QtM10sQmkuc2V0TGluayhPdFtLdC0zXSxPdFtLdC0yXSksQmkuc2V0VG9vbHRpcChPdFtLdC0zXSxPdFtLdF0pO2JyZWFrO2Nhc2UgMTEyOnRoaXMuJD1PdFtLdC0zXSxCaS5zZXRMaW5rKE90W0t0LTNdLE90W0t0LTJdLE90W0t0XSk7YnJlYWs7Y2FzZSAxMTM6dGhpcy4kPU90W0t0LTVdLEJpLnNldExpbmsoT3RbS3QtNV0sT3RbS3QtNF0sT3RbS3RdKSxCaS5zZXRUb29sdGlwKE90W0t0LTVdLE90W0t0LTJdKTticmVhaztjYXNlIDExNDp0aGlzLiQ9T3RbS3QtNF0sQmkuYWRkVmVydGV4KE90W0t0LTJdLHZvaWQgMCx2b2lkIDAsT3RbS3RdKTticmVhaztjYXNlIDExNTp0aGlzLiQ9T3RbS3QtNF0sQmkudXBkYXRlTGluayhbT3RbS3QtMl1dLE90W0t0XSk7YnJlYWs7Y2FzZSAxMTY6dGhpcy4kPU90W0t0LTRdLEJpLnVwZGF0ZUxpbmsoT3RbS3QtMl0sT3RbS3RdKTticmVhaztjYXNlIDExNzp0aGlzLiQ9T3RbS3QtOF0sQmkudXBkYXRlTGlua0ludGVycG9sYXRlKFtPdFtLdC02XV0sT3RbS3QtMl0pLEJpLnVwZGF0ZUxpbmsoW090W0t0LTZdXSxPdFtLdF0pO2JyZWFrO2Nhc2UgMTE4OnRoaXMuJD1PdFtLdC04XSxCaS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoT3RbS3QtNl0sT3RbS3QtMl0pLEJpLnVwZGF0ZUxpbmsoT3RbS3QtNl0sT3RbS3RdKTticmVhaztjYXNlIDExOTp0aGlzLiQ9T3RbS3QtNl0sQmkudXBkYXRlTGlua0ludGVycG9sYXRlKFtPdFtLdC00XV0sT3RbS3RdKTticmVhaztjYXNlIDEyMDp0aGlzLiQ9T3RbS3QtNl0sQmkudXBkYXRlTGlua0ludGVycG9sYXRlKE90W0t0LTRdLE90W0t0XSk7YnJlYWs7Y2FzZSAxMjE6Y2FzZSAxMjM6dGhpcy4kPVtPdFtLdF1dO2JyZWFrO2Nhc2UgMTIyOmNhc2UgMTI0Ok90W0t0LTJdLnB1c2goT3RbS3RdKSx0aGlzLiQ9T3RbS3QtMl07YnJlYWs7Y2FzZSAxMjY6dGhpcy4kPU90W0t0LTFdK090W0t0XTticmVhaztjYXNlIDE3NDp0aGlzLiQ9T3RbS3RdO2JyZWFrO2Nhc2UgMTc1OnRoaXMuJD1PdFtLdC0xXSsiIitPdFtLdF07YnJlYWs7Y2FzZSAxNzc6dGhpcy4kPU90W0t0LTFdKyIiK090W0t0XTticmVhaztjYXNlIDE3ODp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlRCIn07YnJlYWs7Y2FzZSAxNzk6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJCVCJ9O2JyZWFrO2Nhc2UgMTgwOnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiUkwifTticmVhaztjYXNlIDE4MTp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkxSIn07YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsOTpzLDEwOnUsMTI6ZH0sezE6WzNdfSxpKHAsdix7NTo2fSksezQ6Nyw5OnMsMTA6dSwxMjpkfSx7NDo4LDk6cywxMDp1LDEyOmR9LHsxMzpbMSw5XSwxNDpbMSwxMF19LHsxOlsyLDFdLDY6MTEsNzoxMiw4OmIsOTp5LDEwOlQsMTE6XywyMDoxNywyMjoxOCwyMzoxOSwyNDoyMCwyNToyMSwyNjoyMiwyNzpBLDMzOjI0LDM0OlAsMzY6UiwzODpGLDQwOjI4LDQxOjM4LDQyOmosNDM6MzksNDU6NDAsNTg6Syw4MTplZSw4MjppZSw4MzpvZSw4NDpwZSw4NTpiZSw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVLDExODpGZSwxMTk6UGUsMTIwOmplLDEyMTpJZX0saShwLFsyLDldKSxpKHAsWzIsMTBdKSxpKHAsWzIsMTFdKSx7ODpbMSw1NF0sOTpbMSw1NV0sMTA6U2UsMTU6NTMsMTg6NTZ9LGkoQ2UsWzIsM10pLGkoQ2UsWzIsNF0pLGkoQ2UsWzIsNV0pLGkoQ2UsWzIsNl0pLGkoQ2UsWzIsN10pLGkoQ2UsWzIsOF0pLHs4OmtlLDk6S2UsMTE6RnQsMjE6NTgsMzk6NTksNzA6NjMsNzM6WzEsNjRdLDc1OlsxLDY1XX0sezg6a2UsOTpLZSwxMTpGdCwyMTo2Nn0sezg6a2UsOTpLZSwxMTpGdCwyMTo2N30sezg6a2UsOTpLZSwxMTpGdCwyMTo2OH0sezg6a2UsOTpLZSwxMTpGdCwyMTo2OX0sezg6a2UsOTpLZSwxMTpGdCwyMTo3MH0sezg6a2UsOTpLZSwxMDpbMSw3MV0sMTE6RnQsMjE6NzJ9LGkoQ2UsWzIsMzZdKSx7MzU6WzEsNzNdfSx7Mzc6WzEsNzRdfSxpKENlLFsyLDM5XSksaShOZSxbMiw0Nl0sezE4Ojc1LDEwOlNlfSksezEwOlsxLDc2XX0sezEwOlsxLDc3XX0sezEwOlsxLDc4XX0sezEwOlsxLDc5XX0sezE0OmduLDQyOl90LDU4OkV0LDc3OlsxLDgzXSw4NjpHdCw5MjpbMSw4MF0sOTQ6WzEsODFdLDk4OjgyLDEwMjpsbiwxMDM6eHQsMTA2OlB0LDEwODpRZSwxMTE6RHQsMTEyOmt0LDExMzpPbiwxMTc6ODR9LGkoQ2UsWzIsMTc4XSksaShDZSxbMiwxNzldKSxpKENlLFsyLDE4MF0pLGkoQ2UsWzIsMTgxXSksaShodCxbMiw0N10pLGkoaHQsWzIsNDldLHs0NDpbMSw5Nl19KSxpKHpyLFsyLDY3XSx7MTEwOjEwOSwyOTpbMSw5N10sNDI6aiw0NjpbMSw5OF0sNDg6WzEsOTldLDUwOlsxLDEwMF0sNTI6WzEsMTAxXSw1NDpbMSwxMDJdLDU2OlsxLDEwM10sNTg6Syw2MTpbMSwxMDRdLDYzOlsxLDEwNV0sNjU6WzEsMTA2XSw2NjpbMSwxMDddLDY4OlsxLDEwOF0sODY6YWUsOTk6bmUsMTAyOnNlLDEwMzpkZSwxMDY6WCwxMDg6Z2UsMTExOlcsMTEyOnhlLDExMzpVfSksaSh5dCxbMiwxNzRdKSxpKHl0LFsyLDEzNV0pLGkoeXQsWzIsMTM2XSksaSh5dCxbMiwxMzddKSxpKHl0LFsyLDEzOF0pLGkoeXQsWzIsMTM5XSksaSh5dCxbMiwxNDBdKSxpKHl0LFsyLDE0MV0pLGkoeXQsWzIsMTQyXSksaSh5dCxbMiwxNDNdKSxpKHl0LFsyLDE0NF0pLGkoeXQsWzIsMTQ1XSksaShwLFsyLDEyXSksaShwLFsyLDE4XSksaShwLFsyLDE5XSksezk6WzEsMTEwXX0saShqaSxbMiwyNl0sezE4OjExMSwxMDpTZX0pLGkoQ2UsWzIsMjddKSx7NDA6MTEyLDQxOjM4LDQyOmosNDM6MzksNDU6NDAsNTg6Syw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVfSxpKENlLFsyLDQwXSksaShDZSxbMiw0MV0pLGkoQ2UsWzIsNDJdKSxpKHhpLFsyLDcxXSx7NzE6MTEzLDYwOlsxLDExNV0sNzI6WzEsMTE0XX0pLHs3NDoxMTYsNzY6MTE3LDc3OlsxLDExOF0sNzg6WzEsMTE5XSwxMTM6TWEsMTE2OnpzfSxpKFs0Miw1OCw2MCw3Miw4Niw5OSwxMDIsMTAzLDEwNiwxMDgsMTExLDExMiwxMTNdLFsyLDc3XSksaShDZSxbMiwyOF0pLGkoQ2UsWzIsMjldKSxpKENlLFsyLDMwXSksaShDZSxbMiwzMV0pLGkoQ2UsWzIsMzJdKSx7MTA6YW8sMTI6VHIsMTQ6Rm4sMjc6cW4sMjg6MTIyLDMyOlVuLDQyOkF0LDU4Ond0LDczOm9uLDc3OlsxLDEyNF0sNzg6WzEsMTI1XSw4MDoxMzUsODE6Zm4sODI6QW4sODM6b28sODQ6am8sODU6JG8sODY6UGEsODc6d28sODg6MTIzLDEwMjpfcywxMDY6dGwsMTA4OmRhLDExMTpqMCwxMTI6cG0sMTEzOk1sfSxpKFhjLHYsezU6MTQ4fSksaShDZSxbMiwzN10pLGkoQ2UsWzIsMzhdKSxpKE5lLFsyLDQ1XSx7NDI6QmN9KSx7NDI6aiw0NToxNTAsNTg6Syw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVfSx7OTk6WzEsMTUxXSwxMDA6MTUyLDEwMjpbMSwxNTNdfSx7NDI6aiw0NToxNTQsNTg6Syw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVfSx7NDI6aiw0NToxNTUsNTg6Syw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVfSxpKGphLFsyLDEwMF0sezEwOlsxLDE1Nl0sOTM6WzEsMTU3XX0pLHs3NzpbMSwxNThdfSxpKGphLFsyLDEwOF0sezExNzoxNjAsMTA6WzEsMTU5XSwxNDpnbiw0MjpfdCw1ODpFdCw4NjpHdCwxMDI6bG4sMTAzOnh0LDEwNjpQdCwxMDg6UWUsMTExOkR0LDExMjprdCwxMTM6T259KSxpKGphLFsyLDExMF0sezEwOlsxLDE2MV19KSxpKE91LFsyLDE3Nl0pLGkoT3UsWzIsMTYzXSksaShPdSxbMiwxNjRdKSxpKE91LFsyLDE2NV0pLGkoT3UsWzIsMTY2XSksaShPdSxbMiwxNjddKSxpKE91LFsyLDE2OF0pLGkoT3UsWzIsMTY5XSksaShPdSxbMiwxNzBdKSxpKE91LFsyLDE3MV0pLGkoT3UsWzIsMTcyXSksaShPdSxbMiwxNzNdKSx7NDI6aiw0NToxNjIsNTg6Syw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVfSx7MzA6MTYzLDY1OlNhLDc3OlBvLDc4OkZjLDc5OjE2NCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezMwOjE3MSw2NTpTYSw3NzpQbyw3ODpGYyw3OToxNjQsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHszMDoxNzMsNDg6WzEsMTcyXSw2NTpTYSw3NzpQbyw3ODpGYyw3OToxNjQsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHszMDoxNzQsNjU6U2EsNzc6UG8sNzg6RmMsNzk6MTY0LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSx7MzA6MTc1LDY1OlNhLDc3OlBvLDc4OkZjLDc5OjE2NCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezMwOjE3Niw2NTpTYSw3NzpQbyw3ODpGYyw3OToxNjQsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHsxMDY6WzEsMTc3XX0sezMwOjE3OCw2NTpTYSw3NzpQbyw3ODpGYyw3OToxNjQsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHszMDoxNzksNjM6WzEsMTgwXSw2NTpTYSw3NzpQbyw3ODpGYyw3OToxNjQsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHszMDoxODEsNjU6U2EsNzc6UG8sNzg6RmMsNzk6MTY0LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSx7MzA6MTgyLDY1OlNhLDc3OlBvLDc4OkZjLDc5OjE2NCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezMwOjE4Myw2NTpTYSw3NzpQbyw3ODpGYyw3OToxNjQsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LGkoeXQsWzIsMTc1XSksaShwLFsyLDIwXSksaShqaSxbMiwyNV0pLGkoTmUsWzIsNDNdLHsxODoxODQsMTA6U2V9KSxpKHhpLFsyLDY4XSx7MTA6WzEsMTg1XX0pLHsxMDpbMSwxODZdfSx7MzA6MTg3LDY1OlNhLDc3OlBvLDc4OkZjLDc5OjE2NCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezc1OlsxLDE4OF0sNzY6MTg5LDExMzpNYSwxMTY6enN9LGkoa2gsWzIsNzNdKSxpKGtoLFsyLDc1XSksaShraCxbMiw3Nl0pLGkoa2gsWzIsMTYxXSksaShraCxbMiwxNjJdKSx7ODprZSw5OktlLDEwOmFvLDExOkZ0LDEyOlRyLDE0OkZuLDIxOjE5MSwyNzpxbiwyOTpbMSwxOTBdLDMyOlVuLDQyOkF0LDU4Ond0LDczOm9uLDgwOjEzNSw4MTpmbiw4MjpBbiw4Mzpvbyw4NDpqbyw4NTokbyw4NjpQYSw4Nzp3byw4ODoxOTIsMTAyOl9zLDEwNjp0bCwxMDg6ZGEsMTExOmowLDExMjpwbSwxMTM6TWx9LGkobHUsWzIsOTRdKSxpKGx1LFsyLDk2XSksaShsdSxbMiw5N10pLGkobHUsWzIsMTUwXSksaShsdSxbMiwxNTFdKSxpKGx1LFsyLDE1Ml0pLGkobHUsWzIsMTUzXSksaShsdSxbMiwxNTRdKSxpKGx1LFsyLDE1NV0pLGkobHUsWzIsMTU2XSksaShsdSxbMiwxNTddKSxpKGx1LFsyLDE1OF0pLGkobHUsWzIsMTU5XSksaShsdSxbMiwxNjBdKSxpKGx1LFsyLDgzXSksaShsdSxbMiw4NF0pLGkobHUsWzIsODVdKSxpKGx1LFsyLDg2XSksaShsdSxbMiw4N10pLGkobHUsWzIsODhdKSxpKGx1LFsyLDg5XSksaShsdSxbMiw5MF0pLGkobHUsWzIsOTFdKSxpKGx1LFsyLDkyXSksaShsdSxbMiw5M10pLHs2OjExLDc6MTIsODpiLDk6eSwxMDpULDExOl8sMjA6MTcsMjI6MTgsMjM6MTksMjQ6MjAsMjU6MjEsMjY6MjIsMjc6QSwzMjpbMSwxOTNdLDMzOjI0LDM0OlAsMzY6UiwzODpGLDQwOjI4LDQxOjM4LDQyOmosNDM6MzksNDU6NDAsNTg6Syw4MTplZSw4MjppZSw4MzpvZSw4NDpwZSw4NTpiZSw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVLDExODpGZSwxMTk6UGUsMTIwOmplLDEyMTpJZX0sezEwOlNlLDE4OjE5NH0sezEwOlsxLDE5NV0sNDI6aiw1ODpLLDg2OmFlLDk5Om5lLDEwMjpzZSwxMDM6ZGUsMTA2OlgsMTA4OmdlLDExMDoxMDksMTExOlcsMTEyOnhlLDExMzpVfSx7MTA6WzEsMTk2XX0sezEwOlsxLDE5N10sMTAzOlsxLDE5OF19LGkobzUsWzIsMTIxXSksezEwOlsxLDE5OV0sNDI6aiw1ODpLLDg2OmFlLDk5Om5lLDEwMjpzZSwxMDM6ZGUsMTA2OlgsMTA4OmdlLDExMDoxMDksMTExOlcsMTEyOnhlLDExMzpVfSx7MTA6WzEsMjAwXSw0MjpqLDU4OkssODY6YWUsOTk6bmUsMTAyOnNlLDEwMzpkZSwxMDY6WCwxMDg6Z2UsMTEwOjEwOSwxMTE6VywxMTI6eGUsMTEzOlV9LHs3NzpbMSwyMDFdfSxpKGphLFsyLDEwMl0sezEwOlsxLDIwMl19KSxpKGphLFsyLDEwNF0sezEwOlsxLDIwM119KSx7Nzc6WzEsMjA0XX0saShPdSxbMiwxNzddKSx7Nzc6WzEsMjA1XSw5NTpbMSwyMDZdfSxpKGh0LFsyLDUwXSx7MTEwOjEwOSw0MjpqLDU4OkssODY6YWUsOTk6bmUsMTAyOnNlLDEwMzpkZSwxMDY6WCwxMDg6Z2UsMTExOlcsMTEyOnhlLDExMzpVfSksezMxOlsxLDIwN10sNjU6U2EsNzk6MjA4LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSxpKFdoLFsyLDc5XSksaShXaCxbMiw4MV0pLGkoV2gsWzIsODJdKSxpKFdoLFsyLDE0Nl0pLGkoV2gsWzIsMTQ3XSksaShXaCxbMiwxNDhdKSxpKFdoLFsyLDE0OV0pLHs0NzpbMSwyMDldLDY1OlNhLDc5OjIwOCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezMwOjIxMCw2NTpTYSw3NzpQbyw3ODpGYyw3OToxNjQsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHs0OTpbMSwyMTFdLDY1OlNhLDc5OjIwOCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezUxOlsxLDIxMl0sNjU6U2EsNzk6MjA4LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSx7NTM6WzEsMjEzXSw2NTpTYSw3OToyMDgsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHs1NTpbMSwyMTRdLDY1OlNhLDc5OjIwOCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezU4OlsxLDIxNV19LHs2MjpbMSwyMTZdLDY1OlNhLDc5OjIwOCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezY0OlsxLDIxN10sNjU6U2EsNzk6MjA4LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSx7MzA6MjE4LDY1OlNhLDc3OlBvLDc4OkZjLDc5OjE2NCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezMxOlsxLDIxOV0sNjU6U2EsNzk6MjA4LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSx7NjU6U2EsNjc6WzEsMjIwXSw2OTpbMSwyMjFdLDc5OjIwOCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezY1OlNhLDY3OlsxLDIyM10sNjk6WzEsMjIyXSw3OToyMDgsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LGkoTmUsWzIsNDRdLHs0MjpCY30pLGkoeGksWzIsNzBdKSxpKHhpLFsyLDY5XSksezYwOlsxLDIyNF0sNjU6U2EsNzk6MjA4LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSxpKHhpLFsyLDcyXSksaShraCxbMiw3NF0pLHszMDoyMjUsNjU6U2EsNzc6UG8sNzg6RmMsNzk6MTY0LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSxpKFhjLHYsezU6MjI2fSksaShsdSxbMiw5NV0pLGkoQ2UsWzIsMzVdKSx7NDE6MjI3LDQyOmosNDM6MzksNDU6NDAsNTg6Syw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVfSx7MTA6b2QsNTg6R2QsODE6Y2QsODk6MjI4LDEwMjpLZCwxMDQ6MjI5LDEwNToyMzAsMTA2OiRnLDEwNzphcywxMDg6d24sMTA5OlpyfSx7MTA6b2QsNTg6R2QsODE6Y2QsODk6MjM5LDEwMTpbMSwyNDBdLDEwMjpLZCwxMDQ6MjI5LDEwNToyMzAsMTA2OiRnLDEwNzphcywxMDg6d24sMTA5OlpyfSx7MTA6b2QsNTg6R2QsODE6Y2QsODk6MjQxLDEwMTpbMSwyNDJdLDEwMjpLZCwxMDQ6MjI5LDEwNToyMzAsMTA2OiRnLDEwNzphcywxMDg6d24sMTA5OlpyfSx7MTAyOlsxLDI0M119LHsxMDpvZCw1ODpHZCw4MTpjZCw4OToyNDQsMTAyOktkLDEwNDoyMjksMTA1OjIzMCwxMDY6JGcsMTA3OmFzLDEwODp3biwxMDk6WnJ9LHs0MjpqLDQ1OjI0NSw1ODpLLDg2OmFlLDk5Om5lLDEwMjpzZSwxMDM6ZGUsMTA2OlgsMTA4OmdlLDExMDo0MSwxMTE6VywxMTI6eGUsMTEzOlV9LGkoamEsWzIsMTAxXSksezc3OlsxLDI0Nl19LHs3NzpbMSwyNDddLDk1OlsxLDI0OF19LGkoamEsWzIsMTA5XSksaShqYSxbMiwxMTFdLHsxMDpbMSwyNDldfSksaShqYSxbMiwxMTJdKSxpKHpyLFsyLDUxXSksaShXaCxbMiw4MF0pLGkoenIsWzIsNTJdKSx7NDk6WzEsMjUwXSw2NTpTYSw3OToyMDgsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LGkoenIsWzIsNTldKSxpKHpyLFsyLDU0XSksaSh6cixbMiw1NV0pLGkoenIsWzIsNTZdKSx7MTA2OlsxLDI1MV19LGkoenIsWzIsNThdKSxpKHpyLFsyLDYwXSksezY0OlsxLDI1Ml0sNjU6U2EsNzk6MjA4LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSxpKHpyLFsyLDYyXSksaSh6cixbMiw2M10pLGkoenIsWzIsNjVdKSxpKHpyLFsyLDY0XSksaSh6cixbMiw2Nl0pLGkoWzEwLDQyLDU4LDg2LDk5LDEwMiwxMDMsMTA2LDEwOCwxMTEsMTEyLDExM10sWzIsNzhdKSx7MzE6WzEsMjUzXSw2NTpTYSw3OToyMDgsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHs2OjExLDc6MTIsODpiLDk6eSwxMDpULDExOl8sMjA6MTcsMjI6MTgsMjM6MTksMjQ6MjAsMjU6MjEsMjY6MjIsMjc6QSwzMjpbMSwyNTRdLDMzOjI0LDM0OlAsMzY6UiwzODpGLDQwOjI4LDQxOjM4LDQyOmosNDM6MzksNDU6NDAsNTg6Syw4MTplZSw4MjppZSw4MzpvZSw4NDpwZSw4NTpiZSw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVLDExODpGZSwxMTk6UGUsMTIwOmplLDEyMTpJZX0saShodCxbMiw0OF0pLGkoamEsWzIsMTE0XSx7MTAzOlppfSksaShudSxbMiwxMjNdLHsxMDU6MjU2LDEwOm9kLDU4OkdkLDgxOmNkLDEwMjpLZCwxMDY6JGcsMTA3OmFzLDEwODp3biwxMDk6WnJ9KSxpKHZ1LFsyLDEyNV0pLGkodnUsWzIsMTI3XSksaSh2dSxbMiwxMjhdKSxpKHZ1LFsyLDEyOV0pLGkodnUsWzIsMTMwXSksaSh2dSxbMiwxMzFdKSxpKHZ1LFsyLDEzMl0pLGkodnUsWzIsMTMzXSksaSh2dSxbMiwxMzRdKSxpKGphLFsyLDExNV0sezEwMzpaaX0pLHsxMDpbMSwyNTddfSxpKGphLFsyLDExNl0sezEwMzpaaX0pLHsxMDpbMSwyNThdfSxpKG81LFsyLDEyMl0pLGkoamEsWzIsOThdLHsxMDM6Wml9KSxpKGphLFsyLDk5XSx7MTEwOjEwOSw0MjpqLDU4OkssODY6YWUsOTk6bmUsMTAyOnNlLDEwMzpkZSwxMDY6WCwxMDg6Z2UsMTExOlcsMTEyOnhlLDExMzpVfSksaShqYSxbMiwxMDNdKSxpKGphLFsyLDEwNV0sezEwOlsxLDI1OV19KSxpKGphLFsyLDEwNl0pLHs5NTpbMSwyNjBdfSx7NDk6WzEsMjYxXX0sezYwOlsxLDI2Ml19LHs2NDpbMSwyNjNdfSx7ODprZSw5OktlLDExOkZ0LDIxOjI2NH0saShDZSxbMiwzNF0pLHsxMDpvZCw1ODpHZCw4MTpjZCwxMDI6S2QsMTA0OjI2NSwxMDU6MjMwLDEwNjokZywxMDc6YXMsMTA4OnduLDEwOTpacn0saSh2dSxbMiwxMjZdKSx7MTQ6Z24sNDI6X3QsNTg6RXQsODY6R3QsOTg6MjY2LDEwMjpsbiwxMDM6eHQsMTA2OlB0LDEwODpRZSwxMTE6RHQsMTEyOmt0LDExMzpPbiwxMTc6ODR9LHsxNDpnbiw0MjpfdCw1ODpFdCw4NjpHdCw5ODoyNjcsMTAyOmxuLDEwMzp4dCwxMDY6UHQsMTA4OlFlLDExMTpEdCwxMTI6a3QsMTEzOk9uLDExNzo4NH0sezk1OlsxLDI2OF19LGkoamEsWzIsMTEzXSksaSh6cixbMiw1M10pLHszMDoyNjksNjU6U2EsNzc6UG8sNzg6RmMsNzk6MTY0LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSxpKHpyLFsyLDYxXSksaShYYyx2LHs1OjI3MH0pLGkobnUsWzIsMTI0XSx7MTA1OjI1NiwxMDpvZCw1ODpHZCw4MTpjZCwxMDI6S2QsMTA2OiRnLDEwNzphcywxMDg6d24sMTA5OlpyfSksaShqYSxbMiwxMTldLHsxMTc6MTYwLDEwOlsxLDI3MV0sMTQ6Z24sNDI6X3QsNTg6RXQsODY6R3QsMTAyOmxuLDEwMzp4dCwxMDY6UHQsMTA4OlFlLDExMTpEdCwxMTI6a3QsMTEzOk9ufSksaShqYSxbMiwxMjBdLHsxMTc6MTYwLDEwOlsxLDI3Ml0sMTQ6Z24sNDI6X3QsNTg6RXQsODY6R3QsMTAyOmxuLDEwMzp4dCwxMDY6UHQsMTA4OlFlLDExMTpEdCwxMTI6a3QsMTEzOk9ufSksaShqYSxbMiwxMDddKSx7MzE6WzEsMjczXSw2NTpTYSw3OToyMDgsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHs2OjExLDc6MTIsODpiLDk6eSwxMDpULDExOl8sMjA6MTcsMjI6MTgsMjM6MTksMjQ6MjAsMjU6MjEsMjY6MjIsMjc6QSwzMjpbMSwyNzRdLDMzOjI0LDM0OlAsMzY6UiwzODpGLDQwOjI4LDQxOjM4LDQyOmosNDM6MzksNDU6NDAsNTg6Syw4MTplZSw4MjppZSw4MzpvZSw4NDpwZSw4NTpiZSw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVLDExODpGZSwxMTk6UGUsMTIwOmplLDEyMTpJZX0sezEwOm9kLDU4OkdkLDgxOmNkLDg5OjI3NSwxMDI6S2QsMTA0OjIyOSwxMDU6MjMwLDEwNjokZywxMDc6YXMsMTA4OnduLDEwOTpacn0sezEwOm9kLDU4OkdkLDgxOmNkLDg5OjI3NiwxMDI6S2QsMTA0OjIyOSwxMDU6MjMwLDEwNjokZywxMDc6YXMsMTA4OnduLDEwOTpacn0saSh6cixbMiw1N10pLGkoQ2UsWzIsMzNdKSxpKGphLFsyLDExN10sezEwMzpaaX0pLGkoamEsWzIsMTE4XSx7MTAzOlppfSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6ZnVuY3Rpb24oV2ksQnMpe2lmKEJzLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoV2kpO2Vsc2V7dmFyIFFhPW5ldyBFcnJvcihXaSk7dGhyb3cgUWEuaGFzaD1CcyxRYX19LHBhcnNlOmZ1bmN0aW9uKFdpKXt2YXIgQnM9dGhpcyxRYT1bMF0sQmk9W10sTnU9W251bGxdLE90PVtdLFczPXRoaXMudGFibGUsS3Q9IiIsejA9MCxCcD0wLFkzPTIsJDk9MSxjNT1PdC5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxFaD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHpnPXt5eTp7fX07Zm9yKHZhciBibSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGJtKSYmKHpnLnl5W2JtXT10aGlzLnl5W2JtXSk7RWguc2V0SW5wdXQoV2ksemcueXkpLHpnLnl5LmxleGVyPUVoLHpnLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBFaC55eWxsb2M+InUiJiYoRWgueXlsbG9jPXt9KTt2YXIgejk9RWgueXlsbG9jO090LnB1c2goejkpO3ZhciBtbT1FaC5vcHRpb25zJiZFaC5vcHRpb25zLnJhbmdlczt0eXBlb2YgemcueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9emcueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gdTUoKXt2YXIgRnA7cmV0dXJuIEZwPUJpLnBvcCgpfHxFaC5sZXgoKXx8JDksdHlwZW9mIEZwIT0ibnVtYmVyIiYmKEZwIGluc3RhbmNlb2YgQXJyYXkmJihCaT1GcCxGcD1CaS5wb3AoKSksRnA9QnMuc3ltYm9sc19bRnBdfHxGcCksRnB9Zm9yKHZhciB5MSx1ZCxsZCxxOSxWdj17fSxZNyxHMixYNyxsNTs7KXtpZih1ZD1RYVtRYS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t1ZF0/bGQ9dGhpcy5kZWZhdWx0QWN0aW9uc1t1ZF06KCh5MT09PW51bGx8fHR5cGVvZiB5MT4idSIpJiYoeTE9dTUoKSksbGQ9VzNbdWRdJiZXM1t1ZF1beTFdKSx0eXBlb2YgbGQ+InUifHwhbGQubGVuZ3RofHwhbGRbMF0pe3ZhciBYMz0iIjtsNT1bXTtmb3IoWTcgaW4gVzNbdWRdKXRoaXMudGVybWluYWxzX1tZN10mJlk3PlkzJiZsNS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bWTddKyInIik7RWguc2hvd1Bvc2l0aW9uP1gzPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHowKzEpK2A6CmArRWguc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtsNS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3kxXXx8eTEpKyInIjpYMz0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh6MCsxKSsiOiBVbmV4cGVjdGVkICIrKHkxPT0kOT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t5MV18fHkxKSsiJyIpLHRoaXMucGFyc2VFcnJvcihYMyx7dGV4dDpFaC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19beTFdfHx5MSxsaW5lOkVoLnl5bGluZW5vLGxvYzp6OSxleHBlY3RlZDpsNX0pfWlmKGxkWzBdaW5zdGFuY2VvZiBBcnJheSYmbGQubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit1ZCsiLCB0b2tlbjogIit5MSk7c3dpdGNoKGxkWzBdKXtjYXNlIDE6UWEucHVzaCh5MSksTnUucHVzaChFaC55eXRleHQpLE90LnB1c2goRWgueXlsbG9jKSxRYS5wdXNoKGxkWzFdKSx5MT1udWxsLEJwPUVoLnl5bGVuZyxLdD1FaC55eXRleHQsejA9RWgueXlsaW5lbm8sejk9RWgueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihHMj10aGlzLnByb2R1Y3Rpb25zX1tsZFsxXV1bMV0sVnYuJD1OdVtOdS5sZW5ndGgtRzJdLFZ2Ll8kPXtmaXJzdF9saW5lOk90W090Lmxlbmd0aC0oRzJ8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpPdFtPdC5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpPdFtPdC5sZW5ndGgtKEcyfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOk90W090Lmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sbW0mJihWdi5fJC5yYW5nZT1bT3RbT3QubGVuZ3RoLShHMnx8MSldLnJhbmdlWzBdLE90W090Lmxlbmd0aC0xXS5yYW5nZVsxXV0pLHE5PXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShWdixbS3QsQnAsejAsemcueXksbGRbMV0sTnUsT3RdLmNvbmNhdChjNSkpLHR5cGVvZiBxOTwidSIpcmV0dXJuIHE5O0cyJiYoUWE9UWEuc2xpY2UoMCwtMSpHMioyKSxOdT1OdS5zbGljZSgwLC0xKkcyKSxPdD1PdC5zbGljZSgwLC0xKkcyKSksUWEucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tsZFsxXV1bMF0pLE51LnB1c2goVnYuJCksT3QucHVzaChWdi5fJCksWDc9VzNbUWFbUWEubGVuZ3RoLTJdXVtRYVtRYS5sZW5ndGgtMV1dLFFhLnB1c2goWDcpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxZaD1mdW5jdGlvbigpe3ZhciAkMD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihCcyxRYSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihCcyxRYSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoQnMpfSxzZXRJbnB1dDpmdW5jdGlvbihXaSxCcyl7cmV0dXJuIHRoaXMueXk9QnN8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PVdpLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBXaT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9V2ksdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPVdpLHRoaXMubWF0Y2hlZCs9V2k7dmFyIEJzPVdpLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gQnM/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLFdpfSx1bnB1dDpmdW5jdGlvbihXaSl7dmFyIEJzPVdpLmxlbmd0aCxRYT1XaS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PVdpK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1CcyksdGhpcy5vZmZzZXQtPUJzO3ZhciBCaT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxRYS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPVFhLmxlbmd0aC0xKTt2YXIgTnU9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlFhPyhRYS5sZW5ndGg9PT1CaS5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0JpW0JpLmxlbmd0aC1RYS5sZW5ndGhdLmxlbmd0aC1RYVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLUJzfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W051WzBdLE51WzBdK3RoaXMueXlsZW5nLUJzXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oV2kpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShXaSkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgV2k9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihXaS5sZW5ndGg+MjA/Ii4uLiI6IiIpK1dpLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIFdpPXRoaXMubWF0Y2g7cmV0dXJuIFdpLmxlbmd0aDwyMCYmKFdpKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1XaS5sZW5ndGgpKSwoV2kuc3Vic3RyKDAsMjApKyhXaS5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIFdpPXRoaXMucGFzdElucHV0KCksQnM9bmV3IEFycmF5KFdpLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIFdpK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtCcysiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oV2ksQnMpe3ZhciBRYSxCaSxOdTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoTnU9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoTnUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksQmk9V2lbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLEJpJiYodGhpcy55eWxpbmVubys9QmkubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46Qmk/QmlbQmkubGVuZ3RoLTFdLmxlbmd0aC1CaVtCaS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitXaVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1XaVswXSx0aGlzLm1hdGNoKz1XaVswXSx0aGlzLm1hdGNoZXM9V2ksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoV2lbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPVdpWzBdLFFhPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLEJzLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLFFhKXJldHVybiBRYTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgT3QgaW4gTnUpdGhpc1tPdF09TnVbT3RdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIFdpLEJzLFFhLEJpO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIE51PXRoaXMuX2N1cnJlbnRSdWxlcygpLE90PTA7T3Q8TnUubGVuZ3RoO090KyspaWYoUWE9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tOdVtPdF1dKSxRYSYmKCFCc3x8UWFbMF0ubGVuZ3RoPkJzWzBdLmxlbmd0aCkpe2lmKEJzPVFhLEJpPU90LHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKFdpPXRoaXMudGVzdF9tYXRjaChRYSxOdVtPdF0pLFdpIT09ITEpcmV0dXJuIFdpO2lmKHRoaXMuX2JhY2t0cmFjayl7QnM9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gQnM/KFdpPXRoaXMudGVzdF9tYXRjaChCcyxOdVtCaV0pLFdpIT09ITE/V2k6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBCcz10aGlzLm5leHQoKTtyZXR1cm4gQnN8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKEJzKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goQnMpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBCcz10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBCcz4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKEJzKXtyZXR1cm4gQnM9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhCc3x8MCksQnM+PTA/dGhpcy5jb25kaXRpb25TdGFja1tCc106IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oQnMpe3RoaXMuYmVnaW4oQnMpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKEJzLFFhLEJpLE51KXtzd2l0Y2goQmkpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzQ7Y2FzZSAxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSAyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzNjtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDQ6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDc6dGhpcy5iZWdpbigiY2FsbGJhY2tuYW1lIik7YnJlYWs7Y2FzZSA4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDk6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrYXJncyIpO2JyZWFrO2Nhc2UgMTA6cmV0dXJuIDkyO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6cmV0dXJuIDkzO2Nhc2UgMTM6cmV0dXJuIk1EX1NUUiI7Y2FzZSAxNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNTp0aGlzLmJlZ2luKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDE2OnJldHVybiJTVFIiO2Nhc2UgMTc6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTg6dGhpcy5wdXNoU3RhdGUoInN0cmluZyIpO2JyZWFrO2Nhc2UgMTk6cmV0dXJuIDgxO2Nhc2UgMjA6cmV0dXJuIDk5O2Nhc2UgMjE6cmV0dXJuIDgyO2Nhc2UgMjI6cmV0dXJuIDEwMTtjYXNlIDIzOnJldHVybiA4MztjYXNlIDI0OnJldHVybiA4NDtjYXNlIDI1OnJldHVybiA5NDtjYXNlIDI2OnRoaXMuYmVnaW4oImNsaWNrIik7YnJlYWs7Y2FzZSAyNzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyODpyZXR1cm4gODU7Y2FzZSAyOTpyZXR1cm4gQnMubGV4LmZpcnN0R3JhcGgoKSYmdGhpcy5iZWdpbigiZGlyIiksMTI7Y2FzZSAzMDpyZXR1cm4gQnMubGV4LmZpcnN0R3JhcGgoKSYmdGhpcy5iZWdpbigiZGlyIiksMTI7Y2FzZSAzMTpyZXR1cm4gQnMubGV4LmZpcnN0R3JhcGgoKSYmdGhpcy5iZWdpbigiZGlyIiksMTI7Y2FzZSAzMjpyZXR1cm4gMjc7Y2FzZSAzMzpyZXR1cm4gMzI7Y2FzZSAzNDpyZXR1cm4gOTU7Y2FzZSAzNTpyZXR1cm4gOTU7Y2FzZSAzNjpyZXR1cm4gOTU7Y2FzZSAzNzpyZXR1cm4gOTU7Y2FzZSAzODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDEzO2Nhc2UgMzk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7Y2FzZSA0MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7Y2FzZSA0NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQ2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7Y2FzZSA0NzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQ5OnJldHVybiAxMTg7Y2FzZSA1MDpyZXR1cm4gMTE5O2Nhc2UgNTE6cmV0dXJuIDEyMDtjYXNlIDUyOnJldHVybiAxMjE7Y2FzZSA1MzpyZXR1cm4gMTAyO2Nhc2UgNTQ6cmV0dXJuIDEwODtjYXNlIDU1OnJldHVybiA0NDtjYXNlIDU2OnJldHVybiA1ODtjYXNlIDU3OnJldHVybiA0MjtjYXNlIDU4OnJldHVybiA4O2Nhc2UgNTk6cmV0dXJuIDEwMztjYXNlIDYwOnJldHVybiAxMTI7Y2FzZSA2MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDc1O2Nhc2UgNjI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJlZGdlVGV4dCIpLDczO2Nhc2UgNjM6cmV0dXJuIDExNjtjYXNlIDY0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzU7Y2FzZSA2NTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRoaWNrRWRnZVRleHQiKSw3MztjYXNlIDY2OnJldHVybiAxMTY7Y2FzZSA2NzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDc1O2Nhc2UgNjg6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJkb3R0ZWRFZGdlVGV4dCIpLDczO2Nhc2UgNjk6cmV0dXJuIDExNjtjYXNlIDcwOnJldHVybiA3NTtjYXNlIDcxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNTE7Y2FzZSA3MjpyZXR1cm4iVEVYVCI7Y2FzZSA3MzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImVsbGlwc2VUZXh0IiksNTA7Y2FzZSA3NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDUzO2Nhc2UgNzU6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNTI7Y2FzZSA3NjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDU1O2Nhc2UgNzc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNTQ7Y2FzZSA3ODpyZXR1cm4gNTY7Y2FzZSA3OTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw2NTtjYXNlIDgwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjI7Y2FzZSA4MTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw2MTtjYXNlIDgyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDc7Y2FzZSA4MzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw0NjtjYXNlIDg0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjc7Y2FzZSA4NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDY5O2Nhc2UgODY6cmV0dXJuIDExNDtjYXNlIDg3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidHJhcFRleHQiKSw2NjtjYXNlIDg4OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidHJhcFRleHQiKSw2ODtjYXNlIDg5OnJldHVybiAxMTU7Y2FzZSA5MDpyZXR1cm4gNjU7Y2FzZSA5MTpyZXR1cm4gODc7Y2FzZSA5MjpyZXR1cm4iU0VQIjtjYXNlIDkzOnJldHVybiA4NjtjYXNlIDk0OnJldHVybiAxMTI7Y2FzZSA5NTpyZXR1cm4gMTA4O2Nhc2UgOTY6cmV0dXJuIDQyO2Nhc2UgOTc6cmV0dXJuIDEwNjtjYXNlIDk4OnJldHVybiAxMTE7Y2FzZSA5OTpyZXR1cm4gMTEzO2Nhc2UgMTAwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjA7Y2FzZSAxMDE6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNjA7Y2FzZSAxMDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0OTtjYXNlIDEwMzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw0ODtjYXNlIDEwNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDMxO2Nhc2UgMTA1OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDI5O2Nhc2UgMTA2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjQ7Y2FzZSAxMDc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNjM7Y2FzZSAxMDg6cmV0dXJuIlRFWFQiO2Nhc2UgMTA5OnJldHVybiJRVU9URSI7Y2FzZSAxMTA6cmV0dXJuIDk7Y2FzZSAxMTE6cmV0dXJuIDEwO2Nhc2UgMTEyOnJldHVybiAxMX19LHJ1bGVzOlsvXig/OmFjY1RpdGxlXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccypce1xzKikvLC9eKD86W1x9XSkvLC9eKD86W15cfV0qKS8sL14oPzpjYWxsW1xzXSspLywvXig/OlwoW1xzXSpcKSkvLC9eKD86XCgpLywvXig/OlteKF0qKS8sL14oPzpcKSkvLC9eKD86W14pXSopLywvXig/OlteYCJdKykvLC9eKD86W2BdWyJdKS8sL14oPzpbIl1bYF0pLywvXig/OlteIl0rKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86c3R5bGVcYikvLC9eKD86ZGVmYXVsdFxiKS8sL14oPzpsaW5rU3R5bGVcYikvLC9eKD86aW50ZXJwb2xhdGVcYikvLC9eKD86Y2xhc3NEZWZcYikvLC9eKD86Y2xhc3NcYikvLC9eKD86aHJlZltcc10pLywvXig/OmNsaWNrW1xzXSspLywvXig/Oltcc1xuXSkvLC9eKD86W15cc1xuXSopLywvXig/OmZsb3djaGFydC1lbGtcYikvLC9eKD86Z3JhcGhcYikvLC9eKD86Zmxvd2NoYXJ0XGIpLywvXig/OnN1YmdyYXBoXGIpLywvXig/OmVuZFxiXHMqKS8sL14oPzpfc2VsZlxiKS8sL14oPzpfYmxhbmtcYikvLC9eKD86X3BhcmVudFxiKS8sL14oPzpfdG9wXGIpLywvXig/Oihccj9cbikqXHMqXG4pLywvXig/OlxzKkxSXGIpLywvXig/OlxzKlJMXGIpLywvXig/OlxzKlRCXGIpLywvXig/OlxzKkJUXGIpLywvXig/OlxzKlREXGIpLywvXig/OlxzKkJSXGIpLywvXig/OlxzKjwpLywvXig/OlxzKj4pLywvXig/OlxzKlxeKS8sL14oPzpccyp2XGIpLywvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopLywvXig/OlswLTldKykvLC9eKD86IykvLC9eKD86Ojo6KS8sL14oPzo6KS8sL14oPzomKS8sL14oPzo7KS8sL14oPzosKS8sL14oPzpcKikvLC9eKD86XHMqW3hvPF0/LS0rWy14bz5dXHMqKS8sL14oPzpccypbeG88XT8tLVxzKikvLC9eKD86W14tXXwtKD8hLSkrKS8sL14oPzpccypbeG88XT89PStbPXhvPl1ccyopLywvXig/OlxzKlt4bzxdPz09XHMqKS8sL14oPzpbXj1dfD0oPyEpKS8sL14oPzpccypbeG88XT8tP1wuKy1beG8+XT9ccyopLywvXig/OlxzKlt4bzxdPy1cLlxzKikvLC9eKD86W15cLl18XC4oPyEpKS8sL14oPzpccyp+fltcfl0rXHMqKS8sL14oPzpbLS9cKV1bXCldKS8sL14oPzpbXlwoXClcW1xdXHtcfV18IVwpKykvLC9eKD86XCgtKS8sL14oPzpcXVwpKS8sL14oPzpcKFxbKS8sL14oPzpcXVxdKS8sL14oPzpcW1xbKS8sL14oPzpcW1x8KS8sL14oPzo+KS8sL14oPzpcKVxdKS8sL14oPzpcW1woKS8sL14oPzpcKVwpXCkpLywvXig/OlwoXChcKCkvLC9eKD86W1xcKD89XF0pXVtcXV0pLywvXig/OlwvKD89XF0pXF0pLywvXig/OlwvKD8hXF0pfFxcKD8hXF0pfFteXFxcW1xdXChcKVx7XH1cL10rKS8sL14oPzpcW1wvKS8sL14oPzpcW1xcKS8sL14oPzo8KS8sL14oPzo+KS8sL14oPzpcXikvLC9eKD86XFxcfCkvLC9eKD86dlxiKS8sL14oPzpcKikvLC9eKD86IykvLC9eKD86JikvLC9eKD86KFtBLVphLXowLTkhIlwjJCUmJyorXC5gP1xcX1wvXXwtKD89W15cPlwtXC5dKXwoPyEpKSspLywvXig/Oi0pLywvXig/OltcdTAwQUFcdTAwQjVcdTAwQkFcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBGNl18W1x1MDBGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzddfFtcdTAzN0EtXHUwMzdEXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XXxbXHUwM0Y3LVx1MDQ4MVx1MDQ4QS1cdTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVEMC1cdTA1RUFdfFtcdTA1RjAtXHUwNUYyXHUwNjIwLVx1MDY0QVx1MDY2RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUVdfFtcdTA2RUZcdTA2RkEtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3Q0EtXHUwN0VBXXxbXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4QTBdfFtcdTA4QTItXHUwOEFDXHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTc3XXxbXHUwOTc5LVx1MDk3Rlx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMl18W1x1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUYwXHUwOUYxXHUwQTA1LVx1MEEwQV18W1x1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XXxbXHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThdfFtcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1MEIwNS1cdTBCMENdfFtcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNdfFtcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XXxbXHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBdfFtcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzMzXHUwQzM1LVx1MEMzOVx1MEMzRF18W1x1MEM1OFx1MEM1OVx1MEM2MFx1MEM2MVx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNdfFtcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBdfFtcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDYwXHUwRDYxXHUwRDdBLVx1MEQ3Rlx1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXXxbXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBFMDEtXHUwRTMwXHUwRTMyXHUwRTMzXHUwRTQwLVx1MEU0Nlx1MEU4MV18W1x1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1MEVBM118W1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjBcdTBFQjJcdTBFQjNcdTBFQkRcdTBFQzAtXHUwRUM0XHUwRUM2XXxbXHUwRURDLVx1MEVERlx1MEYwMFx1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFdfFtcdTEwM0ZcdTEwNTAtXHUxMDU1XHUxMDVBLVx1MTA1RFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2RS1cdTEwNzBcdTEwNzUtXHUxMDgxXXxbXHUxMDhFXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RF18W1x1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXXxbXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBdfFtcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q118W1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzExXXxbXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc4MC1cdTE3QjNcdTE3RDddfFtcdTE3RENcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFDXXxbXHUxOTUwLVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUMxLVx1MTlDN1x1MUEwMC1cdTFBMTZdfFtcdTFBMjAtXHUxQTU0XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNEJcdTFCODMtXHUxQkEwXHUxQkFFXHUxQkFGXXxbXHUxQkJBLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNEQtXHUxQzRGXHUxQzVBLVx1MUM3RFx1MUNFOS1cdTFDRUNdfFtcdTFDRUUtXHUxQ0YxXHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXXxbXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RF18W1x1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXXxbXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rl18W1x1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOF18W1x1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxODNcdTIxODRdfFtcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXXxbXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNl18W1x1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXXxbXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDVcdTMwMDZcdTMwMzEtXHUzMDM1XHUzMDNCXHUzMDNDXXxbXHUzMDQxLVx1MzA5Nlx1MzA5RC1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRdfFtcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ118W1x1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJdfFtcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5N1x1QTZBMC1cdUE2RTVcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OF18W1x1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdBQVx1QTdGOC1cdUE4MDFcdUE4MDMtXHVBODA1XXxbXHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1QThGMi1cdUE4RjdcdUE4RkJdfFtcdUE5MEEtXHVBOTI1XHVBOTMwLVx1QTk0Nlx1QTk2MC1cdUE5N0NcdUE5ODQtXHVBOUIyXHVBOUNGXHVBQTAwLVx1QUEyOF18W1x1QUE0MC1cdUFBNDJcdUFBNDQtXHVBQTRCXHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE4MC1cdUFBQUZcdUFBQjFcdUFBQjVdfFtcdUFBQjZcdUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0XXxbXHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVdfFtcdUFCQzAtXHVBQkUyXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RF18W1x1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XXxbXHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXXxbXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNdfFtcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRl18W1x1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXSkvLC9eKD86XHwpLywvXig/Olx8KS8sL14oPzpcKSkvLC9eKD86XCgpLywvXig/OlxdKS8sL14oPzpcWykvLC9eKD86KFx9KSkvLC9eKD86XHspLywvXig/OlteXFtcXVwoXClce1x9XHxcIl0rKS8sL14oPzoiKS8sL14oPzooXHI/XG4pKykvLC9eKD86XHMpLywvXig/OiQpL10sY29uZGl0aW9uczp7Y2FsbGJhY2thcmdzOntydWxlczpbMTEsMTIsMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrbmFtZTp7cnVsZXM6WzgsOSwxMCwxNSwxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzE1LDE4LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSxjbGljazp7cnVsZXM6WzE1LDE4LDI3LDI4LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSxkb3R0ZWRFZGdlVGV4dDp7cnVsZXM6WzE1LDE4LDY3LDY5LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSx0aGlja0VkZ2VUZXh0OntydWxlczpbMTUsMTgsNjQsNjYsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGVkZ2VUZXh0OntydWxlczpbMTUsMTgsNjEsNjMsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LHRyYXBUZXh0OntydWxlczpbMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODQsODUsODYsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGVsbGlwc2VUZXh0OntydWxlczpbMTUsMTgsNzAsNzEsNzIsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LHRleHQ6e3J1bGVzOlsxNSwxOCw3MCw3Myw3NCw3NSw3Niw3Nyw4MCw4MSw4Miw4Myw4Nyw4OCwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOF0saW5jbHVzaXZlOiExfSx2ZXJ0ZXg6e3J1bGVzOlsxNSwxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sZGlyOntydWxlczpbMTUsMTgsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls1LDYsMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzMsMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzEsMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzEzLDE0LDE1LDE4LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsxNSwxNiwxNywxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsMTUsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjQsNjUsNjcsNjgsNzAsNzMsNzUsNzcsNzgsNzksODEsODMsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAxLDEwMywxMDUsMTA3LDEwOSwxMTAsMTExLDExMl0saW5jbHVzaXZlOiEwfX19O3JldHVybiAkMH0oKTtEbC5sZXhlcj1ZaDtmdW5jdGlvbiB3MSgpe3RoaXMueXk9e319cmV0dXJuIHcxLnByb3RvdHlwZT1EbCxEbC5QYXJzZXI9dzEsbmV3IHcxfSgpO1ViZS5wYXJzZXI9VWJlO2NvbnN0IEdiZT1VYmUseVV0PSJmbG93Y2hhcnQtIjtsZXQgT3FlPTAsQkQ9cXQoKSxvaD17fSx6Mz1bXSxGRD17fSxSNz1bXSxJUT17fSxPUT17fSxOUT0wLEtiZT0hMCwkdixQUSxCUT1bXTtjb25zdCBGUT1pPT5jaS5zYW5pdGl6ZVRleHQoaSxCRCksbVI9ZnVuY3Rpb24oaSl7Y29uc3Qgcz1PYmplY3Qua2V5cyhvaCk7Zm9yKGNvbnN0IHUgb2YgcylpZihvaFt1XS5pZD09PWkpcmV0dXJuIG9oW3VdLmRvbUlkO3JldHVybiBpfSxOcWU9ZnVuY3Rpb24oaSxzLHUsZCxwLHYsYj17fSl7bGV0IHksVD1pO1QhPT12b2lkIDAmJlQudHJpbSgpLmxlbmd0aCE9PTAmJihvaFtUXT09PXZvaWQgMCYmKG9oW1RdPXtpZDpULGxhYmVsVHlwZToidGV4dCIsZG9tSWQ6eVV0K1QrIi0iK09xZSxzdHlsZXM6W10sY2xhc3NlczpbXX0pLE9xZSsrLHMhPT12b2lkIDA/KEJEPXF0KCkseT1GUShzLnRleHQudHJpbSgpKSxvaFtUXS5sYWJlbFR5cGU9cy50eXBlLHlbMF09PT0nIicmJnlbeS5sZW5ndGgtMV09PT0nIicmJih5PXkuc3Vic3RyaW5nKDEseS5sZW5ndGgtMSkpLG9oW1RdLnRleHQ9eSk6b2hbVF0udGV4dD09PXZvaWQgMCYmKG9oW1RdLnRleHQ9aSksdSE9PXZvaWQgMCYmKG9oW1RdLnR5cGU9dSksZCE9bnVsbCYmZC5mb3JFYWNoKGZ1bmN0aW9uKF8pe29oW1RdLnN0eWxlcy5wdXNoKF8pfSkscCE9bnVsbCYmcC5mb3JFYWNoKGZ1bmN0aW9uKF8pe29oW1RdLmNsYXNzZXMucHVzaChfKX0pLHYhPT12b2lkIDAmJihvaFtUXS5kaXI9diksb2hbVF0ucHJvcHM9PT12b2lkIDA/b2hbVF0ucHJvcHM9YjpiIT09dm9pZCAwJiZPYmplY3QuYXNzaWduKG9oW1RdLnByb3BzLGIpKX0sUHFlPWZ1bmN0aW9uKGkscyx1KXtjb25zdCB2PXtzdGFydDppLGVuZDpzLHR5cGU6dm9pZCAwLHRleHQ6IiIsbGFiZWxUeXBlOiJ0ZXh0In07WGUuaW5mbygiYWJjNzggR290IGVkZ2UuLi4iLHYpO2NvbnN0IGI9dS50ZXh0O2lmKGIhPT12b2lkIDAmJih2LnRleHQ9RlEoYi50ZXh0LnRyaW0oKSksdi50ZXh0WzBdPT09JyInJiZ2LnRleHRbdi50ZXh0Lmxlbmd0aC0xXT09PSciJyYmKHYudGV4dD12LnRleHQuc3Vic3RyaW5nKDEsdi50ZXh0Lmxlbmd0aC0xKSksdi5sYWJlbFR5cGU9Yi50eXBlKSx1IT09dm9pZCAwJiYodi50eXBlPXUudHlwZSx2LnN0cm9rZT11LnN0cm9rZSx2Lmxlbmd0aD11Lmxlbmd0aCksKHY9PW51bGw/dm9pZCAwOnYubGVuZ3RoKT4xMCYmKHYubGVuZ3RoPTEwKSx6My5sZW5ndGg8KEJELm1heEVkZ2VzPz81MDApKVhlLmluZm8oImFiYzc4IHB1c2hpbmcgZWRnZS4uLiIpLHozLnB1c2godik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEVkZ2UgbGltaXQgZXhjZWVkZWQuICR7ejMubGVuZ3RofSBlZGdlcyBmb3VuZCwgYnV0IHRoZSBsaW1pdCBpcyAke0JELm1heEVkZ2VzfS4KCkluaXRpYWxpemUgbWVybWFpZCB3aXRoIG1heEVkZ2VzIHNldCB0byBhIGhpZ2hlciBudW1iZXIgdG8gYWxsb3cgbW9yZSBlZGdlcy4KWW91IGNhbm5vdCBzZXQgdGhpcyBjb25maWcgdmlhIGNvbmZpZ3VyYXRpb24gaW5zaWRlIHRoZSBkaWFncmFtIGFzIGl0IGlzIGEgc2VjdXJlIGNvbmZpZy4KWW91IGhhdmUgdG8gY2FsbCBtZXJtYWlkLmluaXRpYWxpemUuYCl9LEJxZT1mdW5jdGlvbihpLHMsdSl7WGUuaW5mbygiYWRkTGluayAoYWJjNzgpIixpLHMsdSk7bGV0IGQscDtmb3IoZD0wO2Q8aS5sZW5ndGg7ZCsrKWZvcihwPTA7cDxzLmxlbmd0aDtwKyspUHFlKGlbZF0sc1twXSx1KX0sRnFlPWZ1bmN0aW9uKGkscyl7aS5mb3JFYWNoKGZ1bmN0aW9uKHUpe3U9PT0iZGVmYXVsdCI/ejMuZGVmYXVsdEludGVycG9sYXRlPXM6ejNbdV0uaW50ZXJwb2xhdGU9c30pfSxScWU9ZnVuY3Rpb24oaSxzKXtpLmZvckVhY2goZnVuY3Rpb24odSl7aWYodT49ejMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVGhlIGluZGV4ICR7dX0gZm9yIGxpbmtTdHlsZSBpcyBvdXQgb2YgYm91bmRzLiBWYWxpZCBpbmRpY2VzIGZvciBsaW5rU3R5bGUgYXJlIGJldHdlZW4gMCBhbmQgJHt6My5sZW5ndGgtMX0uIChIZWxwOiBFbnN1cmUgdGhhdCB0aGUgaW5kZXggaXMgd2l0aGluIHRoZSByYW5nZSBvZiBleGlzdGluZyBlZGdlcy4pYCk7dT09PSJkZWZhdWx0Ij96My5kZWZhdWx0U3R5bGU9czooQW8uaXNTdWJzdHJpbmdJbkFycmF5KCJmaWxsIixzKT09PS0xJiZzLnB1c2goImZpbGw6bm9uZSIpLHozW3VdLnN0eWxlPXMpfSl9LGpxZT1mdW5jdGlvbihpLHMpe2kuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe0ZEW3VdPT09dm9pZCAwJiYoRkRbdV09e2lkOnUsc3R5bGVzOltdLHRleHRTdHlsZXM6W119KSxzIT1udWxsJiZzLmZvckVhY2goZnVuY3Rpb24oZCl7aWYoZC5tYXRjaCgiY29sb3IiKSl7Y29uc3QgcD1kLnJlcGxhY2UoImZpbGwiLCJiZ0ZpbGwiKS5yZXBsYWNlKCJjb2xvciIsImZpbGwiKTtGRFt1XS50ZXh0U3R5bGVzLnB1c2gocCl9RkRbdV0uc3R5bGVzLnB1c2goZCl9KX0pfSwkcWU9ZnVuY3Rpb24oaSl7JHY9aSwkdi5tYXRjaCgvLio8LykmJigkdj0iUkwiKSwkdi5tYXRjaCgvLipcXi8pJiYoJHY9IkJUIiksJHYubWF0Y2goLy4qPi8pJiYoJHY9IkxSIiksJHYubWF0Y2goLy4qdi8pJiYoJHY9IlRCIiksJHY9PT0iVEQiJiYoJHY9IlRCIil9LFJRPWZ1bmN0aW9uKGkscyl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24odSl7bGV0IGQ9dTtvaFtkXSE9PXZvaWQgMCYmb2hbZF0uY2xhc3Nlcy5wdXNoKHMpLElRW2RdIT09dm9pZCAwJiZJUVtkXS5jbGFzc2VzLnB1c2gocyl9KX0seFV0PWZ1bmN0aW9uKGkscyl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24odSl7cyE9PXZvaWQgMCYmKE9RW1BRPT09Imdlbi0xIj9tUih1KTp1XT1GUShzKSl9KX0sa1V0PWZ1bmN0aW9uKGkscyx1KXtsZXQgZD1tUihpKTtpZihxdCgpLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UifHxzPT09dm9pZCAwKXJldHVybjtsZXQgcD1bXTtpZih0eXBlb2YgdT09InN0cmluZyIpe3A9dS5zcGxpdCgvLCg/PSg/Oig/OlteIl0qIil7Mn0pKlteIl0qJCkvKTtmb3IobGV0IHY9MDt2PHAubGVuZ3RoO3YrKyl7bGV0IGI9cFt2XS50cmltKCk7Yi5jaGFyQXQoMCk9PT0nIicmJmIuY2hhckF0KGIubGVuZ3RoLTEpPT09JyInJiYoYj1iLnN1YnN0cigxLGIubGVuZ3RoLTIpKSxwW3ZdPWJ9fXAubGVuZ3RoPT09MCYmcC5wdXNoKGkpLG9oW2ldIT09dm9pZCAwJiYob2hbaV0uaGF2ZUNhbGxiYWNrPSEwLEJRLnB1c2goZnVuY3Rpb24oKXtjb25zdCB2PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtkfSJdYCk7diE9PW51bGwmJnYuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7QW8ucnVuRnVuYyhzLC4uLnApfSwhMSl9KSl9LHpxZT1mdW5jdGlvbihpLHMsdSl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZCl7b2hbZF0hPT12b2lkIDAmJihvaFtkXS5saW5rPUFvLmZvcm1hdFVybChzLEJEKSxvaFtkXS5saW5rVGFyZ2V0PXUpfSksUlEoaSwiY2xpY2thYmxlIil9LHFxZT1mdW5jdGlvbihpKXtpZihPUS5oYXNPd25Qcm9wZXJ0eShpKSlyZXR1cm4gT1FbaV19LEhxZT1mdW5jdGlvbihpLHMsdSl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZCl7a1V0KGQscyx1KX0pLFJRKGksImNsaWNrYWJsZSIpfSxWcWU9ZnVuY3Rpb24oaSl7QlEuZm9yRWFjaChmdW5jdGlvbihzKXtzKGkpfSl9LFVxZT1mdW5jdGlvbigpe3JldHVybiAkdi50cmltKCl9LEdxZT1mdW5jdGlvbigpe3JldHVybiBvaH0sS3FlPWZ1bmN0aW9uKCl7cmV0dXJuIHozfSxXcWU9ZnVuY3Rpb24oKXtyZXR1cm4gRkR9LFlxZT1mdW5jdGlvbihpKXtsZXQgcz1JcigiLm1lcm1haWRUb29sdGlwIik7KHMuX2dyb3Vwc3x8cylbMF1bMF09PT1udWxsJiYocz1JcigiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSksSXIoaSkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7Y29uc3QgcD1Jcih0aGlzKTtpZihwLmF0dHIoInRpdGxlIik9PT1udWxsKXJldHVybjtjb25zdCBiPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cy50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZSgib3BhY2l0eSIsIi45Iikscy50ZXh0KHAuYXR0cigidGl0bGUiKSkuc3R5bGUoImxlZnQiLHdpbmRvdy5zY3JvbGxYK2IubGVmdCsoYi5yaWdodC1iLmxlZnQpLzIrInB4Iikuc3R5bGUoInRvcCIsd2luZG93LnNjcm9sbFkrYi5ib3R0b20rInB4Iikscy5odG1sKHMuaHRtbCgpLnJlcGxhY2UoLyZsdDticlwvJmd0Oy9nLCI8YnIvPiIpKSxwLmNsYXNzZWQoImhvdmVyIiwhMCl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7cy50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5zdHlsZSgib3BhY2l0eSIsMCksSXIodGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKX0pfTtCUS5wdXNoKFlxZSk7Y29uc3QgWHFlPWZ1bmN0aW9uKGk9Imdlbi0xIil7b2g9e30sRkQ9e30sejM9W10sQlE9W1lxZV0sUjc9W10sSVE9e30sTlE9MCxPUT17fSxLYmU9ITAsUFE9aSxCRD1xdCgpLFBnKCl9LFFxZT1pPT57UFE9aXx8Imdlbi0yIn0sSnFlPWZ1bmN0aW9uKCl7cmV0dXJuImZpbGw6I2ZmYTtzdHJva2U6ICNmNjY7IHN0cm9rZS13aWR0aDogM3B4OyBzdHJva2UtZGFzaGFycmF5OiA1LCA1O2ZpbGw6I2ZmYTtzdHJva2U6ICM2NjY7In0sWnFlPWZ1bmN0aW9uKGkscyx1KXtsZXQgZD1pLnRleHQudHJpbSgpLHA9dS50ZXh0O2k9PT11JiZ1LnRleHQubWF0Y2goL1xzLykmJihkPXZvaWQgMCk7ZnVuY3Rpb24gdihBKXtjb25zdCBQPXtib29sZWFuOnt9LG51bWJlcjp7fSxzdHJpbmc6e319LFI9W107bGV0IEY7cmV0dXJue25vZGVMaXN0OkEuZmlsdGVyKGZ1bmN0aW9uKEspe2NvbnN0IGVlPXR5cGVvZiBLO3JldHVybiBLLnN0bXQmJksuc3RtdD09PSJkaXIiPyhGPUsudmFsdWUsITEpOksudHJpbSgpPT09IiI/ITE6ZWUgaW4gUD9QW2VlXS5oYXNPd25Qcm9wZXJ0eShLKT8hMTpQW2VlXVtLXT0hMDpSLmluY2x1ZGVzKEspPyExOlIucHVzaChLKX0pLGRpcjpGfX1sZXQgYj1bXTtjb25zdHtub2RlTGlzdDp5LGRpcjpUfT12KGIuY29uY2F0LmFwcGx5KGIscykpO2lmKGI9eSxQUT09PSJnZW4tMSIpZm9yKGxldCBBPTA7QTxiLmxlbmd0aDtBKyspYltBXT1tUihiW0FdKTtkPWR8fCJzdWJHcmFwaCIrTlEscD1wfHwiIixwPUZRKHApLE5RPU5RKzE7Y29uc3QgXz17aWQ6ZCxub2RlczpiLHRpdGxlOnAudHJpbSgpLGNsYXNzZXM6W10sZGlyOlQsbGFiZWxUeXBlOnUudHlwZX07cmV0dXJuIFhlLmluZm8oIkFkZGluZyIsXy5pZCxfLm5vZGVzLF8uZGlyKSxfLm5vZGVzPWNIZShfLFI3KS5ub2RlcyxSNy5wdXNoKF8pLElRW2RdPV8sZH0sRVV0PWZ1bmN0aW9uKGkpe2Zvcihjb25zdFtzLHVdb2YgUjcuZW50cmllcygpKWlmKHUuaWQ9PT1pKXJldHVybiBzO3JldHVybi0xfTtsZXQgdlI9LTE7Y29uc3QgZUhlPVtdLHRIZT1mdW5jdGlvbihpLHMpe2NvbnN0IHU9Ujdbc10ubm9kZXM7aWYodlI9dlIrMSx2Uj4yZTMpcmV0dXJuO2lmKGVIZVt2Ul09cyxSN1tzXS5pZD09PWkpcmV0dXJue3Jlc3VsdDohMCxjb3VudDowfTtsZXQgZD0wLHA9MTtmb3IoO2Q8dS5sZW5ndGg7KXtjb25zdCB2PUVVdCh1W2RdKTtpZih2Pj0wKXtjb25zdCBiPXRIZShpLHYpO2lmKGIucmVzdWx0KXJldHVybntyZXN1bHQ6ITAsY291bnQ6cCtiLmNvdW50fTtwPXArYi5jb3VudH1kPWQrMX1yZXR1cm57cmVzdWx0OiExLGNvdW50OnB9fSxuSGU9ZnVuY3Rpb24oaSl7cmV0dXJuIGVIZVtpXX0sckhlPWZ1bmN0aW9uKCl7dlI9LTEsUjcubGVuZ3RoPjAmJnRIZSgibm9uZSIsUjcubGVuZ3RoLTEpfSxpSGU9ZnVuY3Rpb24oKXtyZXR1cm4gUjd9LHNIZT0oKT0+S2JlPyhLYmU9ITEsITApOiExLFRVdD1pPT57bGV0IHM9aS50cmltKCksdT0iYXJyb3dfb3BlbiI7c3dpdGNoKHNbMF0pe2Nhc2UiPCI6dT0iYXJyb3dfcG9pbnQiLHM9cy5zbGljZSgxKTticmVhaztjYXNlIngiOnU9ImFycm93X2Nyb3NzIixzPXMuc2xpY2UoMSk7YnJlYWs7Y2FzZSJvIjp1PSJhcnJvd19jaXJjbGUiLHM9cy5zbGljZSgxKTticmVha31sZXQgZD0ibm9ybWFsIjtyZXR1cm4gcy5pbmNsdWRlcygiPSIpJiYoZD0idGhpY2siKSxzLmluY2x1ZGVzKCIuIikmJihkPSJkb3R0ZWQiKSx7dHlwZTp1LHN0cm9rZTpkfX0sQ1V0PShpLHMpPT57Y29uc3QgdT1zLmxlbmd0aDtsZXQgZD0wO2ZvcihsZXQgcD0wO3A8dTsrK3Apc1twXT09PWkmJisrZDtyZXR1cm4gZH0sU1V0PWk9Pntjb25zdCBzPWkudHJpbSgpO2xldCB1PXMuc2xpY2UoMCwtMSksZD0iYXJyb3dfb3BlbiI7c3dpdGNoKHMuc2xpY2UoLTEpKXtjYXNlIngiOmQ9ImFycm93X2Nyb3NzIixzWzBdPT09IngiJiYoZD0iZG91YmxlXyIrZCx1PXUuc2xpY2UoMSkpO2JyZWFrO2Nhc2UiPiI6ZD0iYXJyb3dfcG9pbnQiLHNbMF09PT0iPCImJihkPSJkb3VibGVfIitkLHU9dS5zbGljZSgxKSk7YnJlYWs7Y2FzZSJvIjpkPSJhcnJvd19jaXJjbGUiLHNbMF09PT0ibyImJihkPSJkb3VibGVfIitkLHU9dS5zbGljZSgxKSk7YnJlYWt9bGV0IHA9Im5vcm1hbCIsdj11Lmxlbmd0aC0xO3VbMF09PT0iPSImJihwPSJ0aGljayIpLHVbMF09PT0ifiImJihwPSJpbnZpc2libGUiKTtsZXQgYj1DVXQoIi4iLHUpO3JldHVybiBiJiYocD0iZG90dGVkIix2PWIpLHt0eXBlOmQsc3Ryb2tlOnAsbGVuZ3RoOnZ9fSxhSGU9KGkscyk9Pntjb25zdCB1PVNVdChpKTtsZXQgZDtpZihzKXtpZihkPVRVdChzKSxkLnN0cm9rZSE9PXUuc3Ryb2tlKXJldHVybnt0eXBlOiJJTlZBTElEIixzdHJva2U6IklOVkFMSUQifTtpZihkLnR5cGU9PT0iYXJyb3dfb3BlbiIpZC50eXBlPXUudHlwZTtlbHNle2lmKGQudHlwZSE9PXUudHlwZSlyZXR1cm57dHlwZToiSU5WQUxJRCIsc3Ryb2tlOiJJTlZBTElEIn07ZC50eXBlPSJkb3VibGVfIitkLnR5cGV9cmV0dXJuIGQudHlwZT09PSJkb3VibGVfYXJyb3ciJiYoZC50eXBlPSJkb3VibGVfYXJyb3dfcG9pbnQiKSxkLmxlbmd0aD11Lmxlbmd0aCxkfXJldHVybiB1fSxvSGU9KGkscyk9PntsZXQgdT0hMTtyZXR1cm4gaS5mb3JFYWNoKGQ9PntkLm5vZGVzLmluZGV4T2Yocyk+PTAmJih1PSEwKX0pLHV9LGNIZT0oaSxzKT0+e2NvbnN0IHU9W107cmV0dXJuIGkubm9kZXMuZm9yRWFjaCgoZCxwKT0+e29IZShzLGQpfHx1LnB1c2goaS5ub2Rlc1twXSl9KSx7bm9kZXM6dX19LHVIZT17Zmlyc3RHcmFwaDpzSGV9LEhDPXtkZWZhdWx0Q29uZmlnOigpPT5aamUuZmxvd2NoYXJ0LHNldEFjY1RpdGxlOkJnLGdldEFjY1RpdGxlOkNwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLHNldEFjY0Rlc2NyaXB0aW9uOlNwLGFkZFZlcnRleDpOcWUsbG9va1VwRG9tSWQ6bVIsYWRkTGluazpCcWUsdXBkYXRlTGlua0ludGVycG9sYXRlOkZxZSx1cGRhdGVMaW5rOlJxZSxhZGRDbGFzczpqcWUsc2V0RGlyZWN0aW9uOiRxZSxzZXRDbGFzczpSUSxzZXRUb29sdGlwOnhVdCxnZXRUb29sdGlwOnFxZSxzZXRDbGlja0V2ZW50OkhxZSxzZXRMaW5rOnpxZSxiaW5kRnVuY3Rpb25zOlZxZSxnZXREaXJlY3Rpb246VXFlLGdldFZlcnRpY2VzOkdxZSxnZXRFZGdlczpLcWUsZ2V0Q2xhc3NlczpXcWUsY2xlYXI6WHFlLHNldEdlbjpRcWUsZGVmYXVsdFN0eWxlOkpxZSxhZGRTdWJHcmFwaDpacWUsZ2V0RGVwdGhGaXJzdFBvczpuSGUsaW5kZXhOb2RlczpySGUsZ2V0U3ViR3JhcGhzOmlIZSxkZXN0cnVjdExpbms6YUhlLGxleDp1SGUsZXhpc3RzOm9IZSxtYWtlVW5pcTpjSGUsc2V0RGlhZ3JhbVRpdGxlOmNtLGdldERpYWdyYW1UaXRsZTpBcH0sX1V0PU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxhZGRDbGFzczpqcWUsYWRkTGluazpCcWUsYWRkU2luZ2xlTGluazpQcWUsYWRkU3ViR3JhcGg6WnFlLGFkZFZlcnRleDpOcWUsYmluZEZ1bmN0aW9uczpWcWUsY2xlYXI6WHFlLGRlZmF1bHQ6SEMsZGVmYXVsdFN0eWxlOkpxZSxkZXN0cnVjdExpbms6YUhlLGZpcnN0R3JhcGg6c0hlLGdldENsYXNzZXM6V3FlLGdldERlcHRoRmlyc3RQb3M6bkhlLGdldERpcmVjdGlvbjpVcWUsZ2V0RWRnZXM6S3FlLGdldFN1YkdyYXBoczppSGUsZ2V0VG9vbHRpcDpxcWUsZ2V0VmVydGljZXM6R3FlLGluZGV4Tm9kZXM6ckhlLGxleDp1SGUsbG9va1VwRG9tSWQ6bVIsc2V0Q2xhc3M6UlEsc2V0Q2xpY2tFdmVudDpIcWUsc2V0RGlyZWN0aW9uOiRxZSxzZXRHZW46UXFlLHNldExpbms6enFlLHVwZGF0ZUxpbms6UnFlLHVwZGF0ZUxpbmtJbnRlcnBvbGF0ZTpGcWV9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIEFVdD0iW29iamVjdCBTeW1ib2xdIjtmdW5jdGlvbiBWQyhpKXtyZXR1cm4gdHlwZW9mIGk9PSJzeW1ib2wifHxxNChpKSYmQUMoaSk9PUFVdH1mdW5jdGlvbiBSRChpLHMpe2Zvcih2YXIgdT0tMSxkPWk9PW51bGw/MDppLmxlbmd0aCxwPUFycmF5KGQpOysrdTxkOylwW3VdPXMoaVt1XSx1LGkpO3JldHVybiBwfXZhciBMVXQ9MS8wLGxIZT1Jdj9Jdi5wcm90b3R5cGU6dm9pZCAwLGhIZT1sSGU/bEhlLnRvU3RyaW5nOnZvaWQgMDtmdW5jdGlvbiBmSGUoaSl7aWYodHlwZW9mIGk9PSJzdHJpbmciKXJldHVybiBpO2lmKEQwKGkpKXJldHVybiBSRChpLGZIZSkrIiI7aWYoVkMoaSkpcmV0dXJuIGhIZT9oSGUuY2FsbChpKToiIjt2YXIgcz1pKyIiO3JldHVybiBzPT0iMCImJjEvaT09LUxVdD8iLTAiOnN9dmFyIE1VdD0vXHMvO2Z1bmN0aW9uIERVdChpKXtmb3IodmFyIHM9aS5sZW5ndGg7cy0tJiZNVXQudGVzdChpLmNoYXJBdChzKSk7KTtyZXR1cm4gc312YXIgSVV0PS9eXHMrLztmdW5jdGlvbiBPVXQoaSl7cmV0dXJuIGkmJmkuc2xpY2UoMCxEVXQoaSkrMSkucmVwbGFjZShJVXQsIiIpfXZhciBkSGU9MC8wLE5VdD0vXlstK10weFswLTlhLWZdKyQvaSxQVXQ9L14wYlswMV0rJC9pLEJVdD0vXjBvWzAtN10rJC9pLEZVdD1wYXJzZUludDtmdW5jdGlvbiBSVXQoaSl7aWYodHlwZW9mIGk9PSJudW1iZXIiKXJldHVybiBpO2lmKFZDKGkpKXJldHVybiBkSGU7aWYoYW0oaSkpe3ZhciBzPXR5cGVvZiBpLnZhbHVlT2Y9PSJmdW5jdGlvbiI/aS52YWx1ZU9mKCk6aTtpPWFtKHMpP3MrIiI6c31pZih0eXBlb2YgaSE9InN0cmluZyIpcmV0dXJuIGk9PT0wP2k6K2k7aT1PVXQoaSk7dmFyIHU9UFV0LnRlc3QoaSk7cmV0dXJuIHV8fEJVdC50ZXN0KGkpP0ZVdChpLnNsaWNlKDIpLHU/Mjo4KTpOVXQudGVzdChpKT9kSGU6K2l9dmFyIGdIZT0xLzAsalV0PTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MjtmdW5jdGlvbiBqUShpKXtpZighaSlyZXR1cm4gaT09PTA/aTowO2lmKGk9UlV0KGkpLGk9PT1nSGV8fGk9PT0tZ0hlKXt2YXIgcz1pPDA/LTE6MTtyZXR1cm4gcypqVXR9cmV0dXJuIGk9PT1pP2k6MH1mdW5jdGlvbiAkVXQoaSl7dmFyIHM9alEoaSksdT1zJTE7cmV0dXJuIHM9PT1zP3U/cy11OnM6MH1mdW5jdGlvbiB6VXQoKXt9ZnVuY3Rpb24gcEhlKGkscyl7Zm9yKHZhciB1PS0xLGQ9aT09bnVsbD8wOmkubGVuZ3RoOysrdTxkJiZzKGlbdV0sdSxpKSE9PSExOyk7cmV0dXJuIGl9ZnVuY3Rpb24gYkhlKGkscyx1LGQpe2Zvcih2YXIgcD1pLmxlbmd0aCx2PXUrKGQ/MTotMSk7ZD92LS06Kyt2PHA7KWlmKHMoaVt2XSx2LGkpKXJldHVybiB2O3JldHVybi0xfWZ1bmN0aW9uIHFVdChpKXtyZXR1cm4gaSE9PWl9ZnVuY3Rpb24gSFV0KGkscyx1KXtmb3IodmFyIGQ9dS0xLHA9aS5sZW5ndGg7KytkPHA7KWlmKGlbZF09PT1zKXJldHVybiBkO3JldHVybi0xfWZ1bmN0aW9uIFZVdChpLHMsdSl7cmV0dXJuIHM9PT1zP0hVdChpLHMsdSk6YkhlKGkscVV0LHUpfWZ1bmN0aW9uIFVVdChpLHMpe3ZhciB1PWk9PW51bGw/MDppLmxlbmd0aDtyZXR1cm4hIXUmJlZVdChpLHMsMCk+LTF9ZnVuY3Rpb24gZm0oaSl7cmV0dXJuIHc5KGkpP2FqZShpKTpsJGUoaSl9dmFyIEdVdD0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxLVXQ9L15cdyokLztmdW5jdGlvbiBXYmUoaSxzKXtpZihEMChpKSlyZXR1cm4hMTt2YXIgdT10eXBlb2YgaTtyZXR1cm4gdT09Im51bWJlciJ8fHU9PSJzeW1ib2wifHx1PT0iYm9vbGVhbiJ8fGk9PW51bGx8fFZDKGkpPyEwOktVdC50ZXN0KGkpfHwhR1V0LnRlc3QoaSl8fHMhPW51bGwmJmkgaW4gT2JqZWN0KHMpfXZhciBXVXQ9NTAwO2Z1bmN0aW9uIFlVdChpKXt2YXIgcz1iRChpLGZ1bmN0aW9uKGQpe3JldHVybiB1LnNpemU9PT1XVXQmJnUuY2xlYXIoKSxkfSksdT1zLmNhY2hlO3JldHVybiBzfXZhciBYVXQ9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csUVV0PS9cXChcXCk/L2csSlV0PVlVdChmdW5jdGlvbihpKXt2YXIgcz1bXTtyZXR1cm4gaS5jaGFyQ29kZUF0KDApPT09NDYmJnMucHVzaCgiIiksaS5yZXBsYWNlKFhVdCxmdW5jdGlvbih1LGQscCx2KXtzLnB1c2gocD92LnJlcGxhY2UoUVV0LCIkMSIpOmR8fHUpfSksc30pO2NvbnN0IFpVdD1KVXQ7ZnVuY3Rpb24gbUhlKGkpe3JldHVybiBpPT1udWxsPyIiOmZIZShpKX1mdW5jdGlvbiAkUShpLHMpe3JldHVybiBEMChpKT9pOldiZShpLHMpP1tpXTpaVXQobUhlKGkpKX12YXIgZUd0PTEvMDtmdW5jdGlvbiB3UihpKXtpZih0eXBlb2YgaT09InN0cmluZyJ8fFZDKGkpKXJldHVybiBpO3ZhciBzPWkrIiI7cmV0dXJuIHM9PSIwIiYmMS9pPT0tZUd0PyItMCI6c31mdW5jdGlvbiB6UShpLHMpe3M9JFEocyxpKTtmb3IodmFyIHU9MCxkPXMubGVuZ3RoO2khPW51bGwmJnU8ZDspaT1pW3dSKHNbdSsrXSldO3JldHVybiB1JiZ1PT1kP2k6dm9pZCAwfWZ1bmN0aW9uIHRHdChpLHMsdSl7dmFyIGQ9aT09bnVsbD92b2lkIDA6elEoaSxzKTtyZXR1cm4gZD09PXZvaWQgMD91OmR9ZnVuY3Rpb24gWWJlKGkscyl7Zm9yKHZhciB1PS0xLGQ9cy5sZW5ndGgscD1pLmxlbmd0aDsrK3U8ZDspaVtwK3VdPXNbdV07cmV0dXJuIGl9dmFyIHZIZT1Jdj9Jdi5pc0NvbmNhdFNwcmVhZGFibGU6dm9pZCAwO2Z1bmN0aW9uIG5HdChpKXtyZXR1cm4gRDAoaSl8fG1EKGkpfHwhISh2SGUmJmkmJmlbdkhlXSl9ZnVuY3Rpb24gcVEoaSxzLHUsZCxwKXt2YXIgdj0tMSxiPWkubGVuZ3RoO2Zvcih1fHwodT1uR3QpLHB8fChwPVtdKTsrK3Y8Yjspe3ZhciB5PWlbdl07cz4wJiZ1KHkpP3M+MT9xUSh5LHMtMSx1LGQscCk6WWJlKHAseSk6ZHx8KHBbcC5sZW5ndGhdPXkpfXJldHVybiBwfWZ1bmN0aW9uIGpEKGkpe3ZhciBzPWk9PW51bGw/MDppLmxlbmd0aDtyZXR1cm4gcz9xUShpLDEpOltdfWZ1bmN0aW9uIHJHdChpKXtyZXR1cm4gbGplKHVqZShpLHZvaWQgMCxqRCksaSsiIil9ZnVuY3Rpb24gaUd0KGkscyx1LGQpe3ZhciBwPS0xLHY9aT09bnVsbD8wOmkubGVuZ3RoO2ZvcihkJiZ2JiYodT1pWysrcF0pOysrcDx2Oyl1PXModSxpW3BdLHAsaSk7cmV0dXJuIHV9ZnVuY3Rpb24gc0d0KGkscyl7cmV0dXJuIGkmJlhGKHMsZm0ocyksaSl9ZnVuY3Rpb24gYUd0KGkscyl7cmV0dXJuIGkmJlhGKHMsSUMocyksaSl9ZnVuY3Rpb24gd0hlKGkscyl7Zm9yKHZhciB1PS0xLGQ9aT09bnVsbD8wOmkubGVuZ3RoLHA9MCx2PVtdOysrdTxkOyl7dmFyIGI9aVt1XTtzKGIsdSxpKSYmKHZbcCsrXT1iKX1yZXR1cm4gdn1mdW5jdGlvbiB5SGUoKXtyZXR1cm5bXX12YXIgb0d0PU9iamVjdC5wcm90b3R5cGUsY0d0PW9HdC5wcm9wZXJ0eUlzRW51bWVyYWJsZSx4SGU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyx1R3Q9eEhlP2Z1bmN0aW9uKGkpe3JldHVybiBpPT1udWxsP1tdOihpPU9iamVjdChpKSx3SGUoeEhlKGkpLGZ1bmN0aW9uKHMpe3JldHVybiBjR3QuY2FsbChpLHMpfSkpfTp5SGU7Y29uc3QgWGJlPXVHdDtmdW5jdGlvbiBsR3QoaSxzKXtyZXR1cm4gWEYoaSxYYmUoaSkscyl9dmFyIGhHdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGZHdD1oR3Q/ZnVuY3Rpb24oaSl7Zm9yKHZhciBzPVtdO2k7KVliZShzLFhiZShpKSksaT12MmUoaSk7cmV0dXJuIHN9OnlIZTtjb25zdCBrSGU9Zkd0O2Z1bmN0aW9uIGRHdChpLHMpe3JldHVybiBYRihpLGtIZShpKSxzKX1mdW5jdGlvbiBFSGUoaSxzLHUpe3ZhciBkPXMoaSk7cmV0dXJuIEQwKGkpP2Q6WWJlKGQsdShpKSl9ZnVuY3Rpb24gUWJlKGkpe3JldHVybiBFSGUoaSxmbSxYYmUpfWZ1bmN0aW9uIGdHdChpKXtyZXR1cm4gRUhlKGksSUMsa0hlKX12YXIgcEd0PU9iamVjdC5wcm90b3R5cGUsYkd0PXBHdC5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBtR3QoaSl7dmFyIHM9aS5sZW5ndGgsdT1uZXcgaS5jb25zdHJ1Y3RvcihzKTtyZXR1cm4gcyYmdHlwZW9mIGlbMF09PSJzdHJpbmciJiZiR3QuY2FsbChpLCJpbmRleCIpJiYodS5pbmRleD1pLmluZGV4LHUuaW5wdXQ9aS5pbnB1dCksdX1mdW5jdGlvbiB2R3QoaSxzKXt2YXIgdT1zP20yZShpLmJ1ZmZlcik6aS5idWZmZXI7cmV0dXJuIG5ldyBpLmNvbnN0cnVjdG9yKHUsaS5ieXRlT2Zmc2V0LGkuYnl0ZUxlbmd0aCl9dmFyIHdHdD0vXHcqJC87ZnVuY3Rpb24geUd0KGkpe3ZhciBzPW5ldyBpLmNvbnN0cnVjdG9yKGkuc291cmNlLHdHdC5leGVjKGkpKTtyZXR1cm4gcy5sYXN0SW5kZXg9aS5sYXN0SW5kZXgsc312YXIgVEhlPUl2P0l2LnByb3RvdHlwZTp2b2lkIDAsQ0hlPVRIZT9USGUudmFsdWVPZjp2b2lkIDA7ZnVuY3Rpb24geEd0KGkpe3JldHVybiBDSGU/T2JqZWN0KENIZS5jYWxsKGkpKTp7fX12YXIga0d0PSJbb2JqZWN0IEJvb2xlYW5dIixFR3Q9IltvYmplY3QgRGF0ZV0iLFRHdD0iW29iamVjdCBNYXBdIixDR3Q9IltvYmplY3QgTnVtYmVyXSIsU0d0PSJbb2JqZWN0IFJlZ0V4cF0iLF9HdD0iW29iamVjdCBTZXRdIixBR3Q9IltvYmplY3QgU3RyaW5nXSIsTEd0PSJbb2JqZWN0IFN5bWJvbF0iLE1HdD0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLERHdD0iW29iamVjdCBEYXRhVmlld10iLElHdD0iW29iamVjdCBGbG9hdDMyQXJyYXldIixPR3Q9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsTkd0PSJbb2JqZWN0IEludDhBcnJheV0iLFBHdD0iW29iamVjdCBJbnQxNkFycmF5XSIsQkd0PSJbb2JqZWN0IEludDMyQXJyYXldIixGR3Q9IltvYmplY3QgVWludDhBcnJheV0iLFJHdD0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLGpHdD0iW29iamVjdCBVaW50MTZBcnJheV0iLCRHdD0iW29iamVjdCBVaW50MzJBcnJheV0iO2Z1bmN0aW9uIHpHdChpLHMsdSl7dmFyIGQ9aS5jb25zdHJ1Y3Rvcjtzd2l0Y2gocyl7Y2FzZSBNR3Q6cmV0dXJuIG0yZShpKTtjYXNlIGtHdDpjYXNlIEVHdDpyZXR1cm4gbmV3IGQoK2kpO2Nhc2UgREd0OnJldHVybiB2R3QoaSx1KTtjYXNlIElHdDpjYXNlIE9HdDpjYXNlIE5HdDpjYXNlIFBHdDpjYXNlIEJHdDpjYXNlIEZHdDpjYXNlIFJHdDpjYXNlIGpHdDpjYXNlICRHdDpyZXR1cm4gVVJlKGksdSk7Y2FzZSBUR3Q6cmV0dXJuIG5ldyBkO2Nhc2UgQ0d0OmNhc2UgQUd0OnJldHVybiBuZXcgZChpKTtjYXNlIFNHdDpyZXR1cm4geUd0KGkpO2Nhc2UgX0d0OnJldHVybiBuZXcgZDtjYXNlIExHdDpyZXR1cm4geEd0KGkpfX12YXIgcUd0PSJbb2JqZWN0IE1hcF0iO2Z1bmN0aW9uIEhHdChpKXtyZXR1cm4gcTQoaSkmJlNEKGkpPT1xR3R9dmFyIFNIZT13RCYmd0QuaXNNYXAsVkd0PVNIZT9OWChTSGUpOkhHdDtjb25zdCBVR3Q9Vkd0O3ZhciBHR3Q9IltvYmplY3QgU2V0XSI7ZnVuY3Rpb24gS0d0KGkpe3JldHVybiBxNChpKSYmU0QoaSk9PUdHdH12YXIgX0hlPXdEJiZ3RC5pc1NldCxXR3Q9X0hlP05YKF9IZSk6S0d0O2NvbnN0IFlHdD1XR3Q7dmFyIFhHdD0xLFFHdD0yLEpHdD00LEFIZT0iW29iamVjdCBBcmd1bWVudHNdIixaR3Q9IltvYmplY3QgQXJyYXldIixlS3Q9IltvYmplY3QgQm9vbGVhbl0iLHRLdD0iW29iamVjdCBEYXRlXSIsbkt0PSJbb2JqZWN0IEVycm9yXSIsTEhlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsckt0PSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsaUt0PSJbb2JqZWN0IE1hcF0iLHNLdD0iW29iamVjdCBOdW1iZXJdIixNSGU9IltvYmplY3QgT2JqZWN0XSIsYUt0PSJbb2JqZWN0IFJlZ0V4cF0iLG9LdD0iW29iamVjdCBTZXRdIixjS3Q9IltvYmplY3QgU3RyaW5nXSIsdUt0PSJbb2JqZWN0IFN5bWJvbF0iLGxLdD0iW29iamVjdCBXZWFrTWFwXSIsaEt0PSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsZkt0PSJbb2JqZWN0IERhdGFWaWV3XSIsZEt0PSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLGdLdD0iW29iamVjdCBGbG9hdDY0QXJyYXldIixwS3Q9IltvYmplY3QgSW50OEFycmF5XSIsYkt0PSJbb2JqZWN0IEludDE2QXJyYXldIixtS3Q9IltvYmplY3QgSW50MzJBcnJheV0iLHZLdD0iW29iamVjdCBVaW50OEFycmF5XSIsd0t0PSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIseUt0PSJbb2JqZWN0IFVpbnQxNkFycmF5XSIseEt0PSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsR2w9e307R2xbQUhlXT1HbFtaR3RdPUdsW2hLdF09R2xbZkt0XT1HbFtlS3RdPUdsW3RLdF09R2xbZEt0XT1HbFtnS3RdPUdsW3BLdF09R2xbYkt0XT1HbFttS3RdPUdsW2lLdF09R2xbc0t0XT1HbFtNSGVdPUdsW2FLdF09R2xbb0t0XT1HbFtjS3RdPUdsW3VLdF09R2xbdkt0XT1HbFt3S3RdPUdsW3lLdF09R2xbeEt0XT0hMCxHbFtuS3RdPUdsW0xIZV09R2xbbEt0XT0hMTtmdW5jdGlvbiB5UihpLHMsdSxkLHAsdil7dmFyIGIseT1zJlhHdCxUPXMmUUd0LF89cyZKR3Q7aWYodSYmKGI9cD91KGksZCxwLHYpOnUoaSkpLGIhPT12b2lkIDApcmV0dXJuIGI7aWYoIWFtKGkpKXJldHVybiBpO3ZhciBBPUQwKGkpO2lmKEEpe2lmKGI9bUd0KGkpLCF5KXJldHVybiBHUmUoaSxiKX1lbHNle3ZhciBQPVNEKGkpLFI9UD09TEhlfHxQPT1yS3Q7aWYodkQoaSkpcmV0dXJuIFZSZShpLHkpO2lmKFA9PU1IZXx8UD09QUhlfHxSJiYhcCl7aWYoYj1UfHxSP3t9OllSZShpKSwheSlyZXR1cm4gVD9kR3QoaSxhR3QoYixpKSk6bEd0KGksc0d0KGIsaSkpfWVsc2V7aWYoIUdsW1BdKXJldHVybiBwP2k6e307Yj16R3QoaSxQLHkpfX12fHwodj1uZXcgUDMpO3ZhciBGPXYuZ2V0KGkpO2lmKEYpcmV0dXJuIEY7di5zZXQoaSxiKSxZR3QoaSk/aS5mb3JFYWNoKGZ1bmN0aW9uKGVlKXtiLmFkZCh5UihlZSxzLHUsZWUsaSx2KSl9KTpVR3QoaSkmJmkuZm9yRWFjaChmdW5jdGlvbihlZSxpZSl7Yi5zZXQoaWUseVIoZWUscyx1LGllLGksdikpfSk7dmFyIGo9Xz9UP2dHdDpRYmU6VD9JQzpmbSxLPUE/dm9pZCAwOmooaSk7cmV0dXJuIHBIZShLfHxpLGZ1bmN0aW9uKGVlLGllKXtLJiYoaWU9ZWUsZWU9aVtpZV0pLEJYKGIsaWUseVIoZWUscyx1LGllLGksdikpfSksYn12YXIga0t0PTQ7ZnVuY3Rpb24gREhlKGkpe3JldHVybiB5UihpLGtLdCl9dmFyIEVLdD0xLFRLdD00O2Z1bmN0aW9uIENLdChpKXtyZXR1cm4geVIoaSxFS3R8VEt0KX12YXIgU0t0PSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjtmdW5jdGlvbiBfS3QoaSl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KGksU0t0KSx0aGlzfWZ1bmN0aW9uIEFLdChpKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoaSl9ZnVuY3Rpb24geFIoaSl7dmFyIHM9LTEsdT1pPT1udWxsPzA6aS5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IFM3Oysrczx1Oyl0aGlzLmFkZChpW3NdKX14Ui5wcm90b3R5cGUuYWRkPXhSLnByb3RvdHlwZS5wdXNoPV9LdCx4Ui5wcm90b3R5cGUuaGFzPUFLdDtmdW5jdGlvbiBMS3QoaSxzKXtmb3IodmFyIHU9LTEsZD1pPT1udWxsPzA6aS5sZW5ndGg7Kyt1PGQ7KWlmKHMoaVt1XSx1LGkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIElIZShpLHMpe3JldHVybiBpLmhhcyhzKX12YXIgTUt0PTEsREt0PTI7ZnVuY3Rpb24gT0hlKGkscyx1LGQscCx2KXt2YXIgYj11Jk1LdCx5PWkubGVuZ3RoLFQ9cy5sZW5ndGg7aWYoeSE9VCYmIShiJiZUPnkpKXJldHVybiExO3ZhciBfPXYuZ2V0KGkpLEE9di5nZXQocyk7aWYoXyYmQSlyZXR1cm4gXz09cyYmQT09aTt2YXIgUD0tMSxSPSEwLEY9dSZES3Q/bmV3IHhSOnZvaWQgMDtmb3Iodi5zZXQoaSxzKSx2LnNldChzLGkpOysrUDx5Oyl7dmFyIGo9aVtQXSxLPXNbUF07aWYoZCl2YXIgZWU9Yj9kKEssaixQLHMsaSx2KTpkKGosSyxQLGkscyx2KTtpZihlZSE9PXZvaWQgMCl7aWYoZWUpY29udGludWU7Uj0hMTticmVha31pZihGKXtpZighTEt0KHMsZnVuY3Rpb24oaWUsb2Upe2lmKCFJSGUoRixvZSkmJihqPT09aWV8fHAoaixpZSx1LGQsdikpKXJldHVybiBGLnB1c2gob2UpfSkpe1I9ITE7YnJlYWt9fWVsc2UgaWYoIShqPT09S3x8cChqLEssdSxkLHYpKSl7Uj0hMTticmVha319cmV0dXJuIHYuZGVsZXRlKGkpLHYuZGVsZXRlKHMpLFJ9ZnVuY3Rpb24gSUt0KGkpe3ZhciBzPS0xLHU9QXJyYXkoaS5zaXplKTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKGQscCl7dVsrK3NdPVtwLGRdfSksdX1mdW5jdGlvbiBKYmUoaSl7dmFyIHM9LTEsdT1BcnJheShpLnNpemUpO3JldHVybiBpLmZvckVhY2goZnVuY3Rpb24oZCl7dVsrK3NdPWR9KSx1fXZhciBPS3Q9MSxOS3Q9MixQS3Q9IltvYmplY3QgQm9vbGVhbl0iLEJLdD0iW29iamVjdCBEYXRlXSIsRkt0PSJbb2JqZWN0IEVycm9yXSIsUkt0PSJbb2JqZWN0IE1hcF0iLGpLdD0iW29iamVjdCBOdW1iZXJdIiwkS3Q9IltvYmplY3QgUmVnRXhwXSIsekt0PSJbb2JqZWN0IFNldF0iLHFLdD0iW29iamVjdCBTdHJpbmddIixIS3Q9IltvYmplY3QgU3ltYm9sXSIsVkt0PSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsVUt0PSJbb2JqZWN0IERhdGFWaWV3XSIsTkhlPUl2P0l2LnByb3RvdHlwZTp2b2lkIDAsWmJlPU5IZT9OSGUudmFsdWVPZjp2b2lkIDA7ZnVuY3Rpb24gR0t0KGkscyx1LGQscCx2LGIpe3N3aXRjaCh1KXtjYXNlIFVLdDppZihpLmJ5dGVMZW5ndGghPXMuYnl0ZUxlbmd0aHx8aS5ieXRlT2Zmc2V0IT1zLmJ5dGVPZmZzZXQpcmV0dXJuITE7aT1pLmJ1ZmZlcixzPXMuYnVmZmVyO2Nhc2UgVkt0OnJldHVybiEoaS5ieXRlTGVuZ3RoIT1zLmJ5dGVMZW5ndGh8fCF2KG5ldyBJWChpKSxuZXcgSVgocykpKTtjYXNlIFBLdDpjYXNlIEJLdDpjYXNlIGpLdDpyZXR1cm4gcEQoK2ksK3MpO2Nhc2UgRkt0OnJldHVybiBpLm5hbWU9PXMubmFtZSYmaS5tZXNzYWdlPT1zLm1lc3NhZ2U7Y2FzZSAkS3Q6Y2FzZSBxS3Q6cmV0dXJuIGk9PXMrIiI7Y2FzZSBSS3Q6dmFyIHk9SUt0O2Nhc2Ugekt0OnZhciBUPWQmT0t0O2lmKHl8fCh5PUpiZSksaS5zaXplIT1zLnNpemUmJiFUKXJldHVybiExO3ZhciBfPWIuZ2V0KGkpO2lmKF8pcmV0dXJuIF89PXM7ZHw9Tkt0LGIuc2V0KGkscyk7dmFyIEE9T0hlKHkoaSkseShzKSxkLHAsdixiKTtyZXR1cm4gYi5kZWxldGUoaSksQTtjYXNlIEhLdDppZihaYmUpcmV0dXJuIFpiZS5jYWxsKGkpPT1aYmUuY2FsbChzKX1yZXR1cm4hMX12YXIgS0t0PTEsV0t0PU9iamVjdC5wcm90b3R5cGUsWUt0PVdLdC5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBYS3QoaSxzLHUsZCxwLHYpe3ZhciBiPXUmS0t0LHk9UWJlKGkpLFQ9eS5sZW5ndGgsXz1RYmUocyksQT1fLmxlbmd0aDtpZihUIT1BJiYhYilyZXR1cm4hMTtmb3IodmFyIFA9VDtQLS07KXt2YXIgUj15W1BdO2lmKCEoYj9SIGluIHM6WUt0LmNhbGwocyxSKSkpcmV0dXJuITF9dmFyIEY9di5nZXQoaSksaj12LmdldChzKTtpZihGJiZqKXJldHVybiBGPT1zJiZqPT1pO3ZhciBLPSEwO3Yuc2V0KGkscyksdi5zZXQocyxpKTtmb3IodmFyIGVlPWI7KytQPFQ7KXtSPXlbUF07dmFyIGllPWlbUl0sb2U9c1tSXTtpZihkKXZhciBwZT1iP2Qob2UsaWUsUixzLGksdik6ZChpZSxvZSxSLGkscyx2KTtpZighKHBlPT09dm9pZCAwP2llPT09b2V8fHAoaWUsb2UsdSxkLHYpOnBlKSl7Sz0hMTticmVha31lZXx8KGVlPVI9PSJjb25zdHJ1Y3RvciIpfWlmKEsmJiFlZSl7dmFyIGJlPWkuY29uc3RydWN0b3IsYWU9cy5jb25zdHJ1Y3RvcjtiZSE9YWUmJiJjb25zdHJ1Y3RvciJpbiBpJiYiY29uc3RydWN0b3IiaW4gcyYmISh0eXBlb2YgYmU9PSJmdW5jdGlvbiImJmJlIGluc3RhbmNlb2YgYmUmJnR5cGVvZiBhZT09ImZ1bmN0aW9uIiYmYWUgaW5zdGFuY2VvZiBhZSkmJihLPSExKX1yZXR1cm4gdi5kZWxldGUoaSksdi5kZWxldGUocyksS312YXIgUUt0PTEsUEhlPSJbb2JqZWN0IEFyZ3VtZW50c10iLEJIZT0iW29iamVjdCBBcnJheV0iLEhRPSJbb2JqZWN0IE9iamVjdF0iLEpLdD1PYmplY3QucHJvdG90eXBlLEZIZT1KS3QuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gWkt0KGkscyx1LGQscCx2KXt2YXIgYj1EMChpKSx5PUQwKHMpLFQ9Yj9CSGU6U0QoaSksXz15P0JIZTpTRChzKTtUPVQ9PVBIZT9IUTpULF89Xz09UEhlP0hROl87dmFyIEE9VD09SFEsUD1fPT1IUSxSPVQ9PV87aWYoUiYmdkQoaSkpe2lmKCF2RChzKSlyZXR1cm4hMTtiPSEwLEE9ITF9aWYoUiYmIUEpcmV0dXJuIHZ8fCh2PW5ldyBQMyksYnx8UFgoaSk/T0hlKGkscyx1LGQscCx2KTpHS3QoaSxzLFQsdSxkLHAsdik7aWYoISh1JlFLdCkpe3ZhciBGPUEmJkZIZS5jYWxsKGksIl9fd3JhcHBlZF9fIiksaj1QJiZGSGUuY2FsbChzLCJfX3dyYXBwZWRfXyIpO2lmKEZ8fGope3ZhciBLPUY/aS52YWx1ZSgpOmksZWU9aj9zLnZhbHVlKCk6cztyZXR1cm4gdnx8KHY9bmV3IFAzKSxwKEssZWUsdSxkLHYpfX1yZXR1cm4gUj8odnx8KHY9bmV3IFAzKSxYS3QoaSxzLHUsZCxwLHYpKTohMX1mdW5jdGlvbiBlbWUoaSxzLHUsZCxwKXtyZXR1cm4gaT09PXM/ITA6aT09bnVsbHx8cz09bnVsbHx8IXE0KGkpJiYhcTQocyk/aSE9PWkmJnMhPT1zOlpLdChpLHMsdSxkLGVtZSxwKX12YXIgZVd0PTEsdFd0PTI7ZnVuY3Rpb24gbld0KGkscyx1LGQpe3ZhciBwPXUubGVuZ3RoLHY9cCxiPSFkO2lmKGk9PW51bGwpcmV0dXJuIXY7Zm9yKGk9T2JqZWN0KGkpO3AtLTspe3ZhciB5PXVbcF07aWYoYiYmeVsyXT95WzFdIT09aVt5WzBdXTohKHlbMF1pbiBpKSlyZXR1cm4hMX1mb3IoOysrcDx2Oyl7eT11W3BdO3ZhciBUPXlbMF0sXz1pW1RdLEE9eVsxXTtpZihiJiZ5WzJdKXtpZihfPT09dm9pZCAwJiYhKFQgaW4gaSkpcmV0dXJuITF9ZWxzZXt2YXIgUD1uZXcgUDM7aWYoZCl2YXIgUj1kKF8sQSxULGkscyxQKTtpZighKFI9PT12b2lkIDA/ZW1lKEEsXyxlV3R8dFd0LGQsUCk6UikpcmV0dXJuITF9fXJldHVybiEwfWZ1bmN0aW9uIFJIZShpKXtyZXR1cm4gaT09PWkmJiFhbShpKX1mdW5jdGlvbiByV3QoaSl7Zm9yKHZhciBzPWZtKGkpLHU9cy5sZW5ndGg7dS0tOyl7dmFyIGQ9c1t1XSxwPWlbZF07c1t1XT1bZCxwLFJIZShwKV19cmV0dXJuIHN9ZnVuY3Rpb24gakhlKGkscyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiB1PT1udWxsPyExOnVbaV09PT1zJiYocyE9PXZvaWQgMHx8aSBpbiBPYmplY3QodSkpfX1mdW5jdGlvbiBpV3QoaSl7dmFyIHM9cld0KGkpO3JldHVybiBzLmxlbmd0aD09MSYmc1swXVsyXT9qSGUoc1swXVswXSxzWzBdWzFdKTpmdW5jdGlvbih1KXtyZXR1cm4gdT09PWl8fG5XdCh1LGkscyl9fWZ1bmN0aW9uIHNXdChpLHMpe3JldHVybiBpIT1udWxsJiZzIGluIE9iamVjdChpKX1mdW5jdGlvbiAkSGUoaSxzLHUpe3M9JFEocyxpKTtmb3IodmFyIGQ9LTEscD1zLmxlbmd0aCx2PSExOysrZDxwOyl7dmFyIGI9d1Ioc1tkXSk7aWYoISh2PWkhPW51bGwmJnUoaSxiKSkpYnJlYWs7aT1pW2JdfXJldHVybiB2fHwrK2QhPXA/djoocD1pPT1udWxsPzA6aS5sZW5ndGgsISFwJiZ3MmUocCkmJkZYKGIscCkmJihEMChpKXx8bUQoaSkpKX1mdW5jdGlvbiB6SGUoaSxzKXtyZXR1cm4gaSE9bnVsbCYmJEhlKGkscyxzV3QpfXZhciBhV3Q9MSxvV3Q9MjtmdW5jdGlvbiBjV3QoaSxzKXtyZXR1cm4gV2JlKGkpJiZSSGUocyk/akhlKHdSKGkpLHMpOmZ1bmN0aW9uKHUpe3ZhciBkPXRHdCh1LGkpO3JldHVybiBkPT09dm9pZCAwJiZkPT09cz96SGUodSxpKTplbWUocyxkLGFXdHxvV3QpfX1mdW5jdGlvbiB1V3QoaSl7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBzPT1udWxsP3ZvaWQgMDpzW2ldfX1mdW5jdGlvbiBsV3QoaSl7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiB6UShzLGkpfX1mdW5jdGlvbiBoV3QoaSl7cmV0dXJuIFdiZShpKT91V3Qod1IoaSkpOmxXdChpKX1mdW5jdGlvbiBJOShpKXtyZXR1cm4gdHlwZW9mIGk9PSJmdW5jdGlvbiI/aTppPT1udWxsP09DOnR5cGVvZiBpPT0ib2JqZWN0Ij9EMChpKT9jV3QoaVswXSxpWzFdKTppV3QoaSk6aFd0KGkpfWZ1bmN0aW9uIHRtZShpLHMpe3JldHVybiBpJiZiMmUoaSxzLGZtKX1mdW5jdGlvbiBmV3QoaSxzKXtyZXR1cm4gZnVuY3Rpb24odSxkKXtpZih1PT1udWxsKXJldHVybiB1O2lmKCF3OSh1KSlyZXR1cm4gaSh1LGQpO2Zvcih2YXIgcD11Lmxlbmd0aCx2PXM/cDotMSxiPU9iamVjdCh1KTsocz92LS06Kyt2PHApJiZkKGJbdl0sdixiKSE9PSExOyk7cmV0dXJuIHV9fXZhciBkV3Q9Zld0KHRtZSk7Y29uc3QgVlE9ZFd0O3ZhciBnV3Q9ZnVuY3Rpb24oKXtyZXR1cm4gTjMuRGF0ZS5ub3coKX07Y29uc3QgcUhlPWdXdDt2YXIgSEhlPU9iamVjdC5wcm90b3R5cGUscFd0PUhIZS5oYXNPd25Qcm9wZXJ0eSxiV3Q9UlgoZnVuY3Rpb24oaSxzKXtpPU9iamVjdChpKTt2YXIgdT0tMSxkPXMubGVuZ3RoLHA9ZD4yP3NbMl06dm9pZCAwO2ZvcihwJiZRRihzWzBdLHNbMV0scCkmJihkPTEpOysrdTxkOylmb3IodmFyIHY9c1t1XSxiPUlDKHYpLHk9LTEsVD1iLmxlbmd0aDsrK3k8VDspe3ZhciBfPWJbeV0sQT1pW19dOyhBPT09dm9pZCAwfHxwRChBLEhIZVtfXSkmJiFwV3QuY2FsbChpLF8pKSYmKGlbX109dltfXSl9cmV0dXJuIGl9KTtjb25zdCAkRD1iV3Q7ZnVuY3Rpb24gbVd0KGkscyx1KXtmb3IodmFyIGQ9LTEscD1pPT1udWxsPzA6aS5sZW5ndGg7KytkPHA7KWlmKHUocyxpW2RdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBVUShpKXt2YXIgcz1pPT1udWxsPzA6aS5sZW5ndGg7cmV0dXJuIHM/aVtzLTFdOnZvaWQgMH1mdW5jdGlvbiBubWUoaSl7cmV0dXJuIHR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6T0N9ZnVuY3Rpb24gQXIoaSxzKXt2YXIgdT1EMChpKT9wSGU6VlE7cmV0dXJuIHUoaSxubWUocykpfWZ1bmN0aW9uIHZXdChpLHMpe3ZhciB1PVtdO3JldHVybiBWUShpLGZ1bmN0aW9uKGQscCx2KXtzKGQscCx2KSYmdS5wdXNoKGQpfSksdX1mdW5jdGlvbiBqNyhpLHMpe3ZhciB1PUQwKGkpP3dIZTp2V3Q7cmV0dXJuIHUoaSxJOShzKSl9ZnVuY3Rpb24gd1d0KGkpe3JldHVybiBmdW5jdGlvbihzLHUsZCl7dmFyIHA9T2JqZWN0KHMpO2lmKCF3OShzKSl7dmFyIHY9STkodSk7cz1mbShzKSx1PWZ1bmN0aW9uKHkpe3JldHVybiB2KHBbeV0seSxwKX19dmFyIGI9aShzLHUsZCk7cmV0dXJuIGI+LTE/cFt2P3NbYl06Yl06dm9pZCAwfX12YXIgeVd0PU1hdGgubWF4O2Z1bmN0aW9uIHhXdChpLHMsdSl7dmFyIGQ9aT09bnVsbD8wOmkubGVuZ3RoO2lmKCFkKXJldHVybi0xO3ZhciBwPXU9PW51bGw/MDokVXQodSk7cmV0dXJuIHA8MCYmKHA9eVd0KGQrcCwwKSksYkhlKGksSTkocykscCl9dmFyIGtXdD13V3QoeFd0KTtjb25zdCBybWU9a1d0O2Z1bmN0aW9uIFZIZShpLHMpe3ZhciB1PS0xLGQ9dzkoaSk/QXJyYXkoaS5sZW5ndGgpOltdO3JldHVybiBWUShpLGZ1bmN0aW9uKHAsdixiKXtkWysrdV09cyhwLHYsYil9KSxkfWZ1bmN0aW9uIFAwKGkscyl7dmFyIHU9RDAoaSk/UkQ6VkhlO3JldHVybiB1KGksSTkocykpfWZ1bmN0aW9uIEVXdChpLHMpe3JldHVybiBpPT1udWxsP2k6YjJlKGksbm1lKHMpLElDKX1mdW5jdGlvbiBUV3QoaSxzKXtyZXR1cm4gaSYmdG1lKGksbm1lKHMpKX1mdW5jdGlvbiBDV3QoaSxzKXtyZXR1cm4gaT5zfXZhciBTV3Q9T2JqZWN0LnByb3RvdHlwZSxfV3Q9U1d0Lmhhc093blByb3BlcnR5O2Z1bmN0aW9uIEFXdChpLHMpe3JldHVybiBpIT1udWxsJiZfV3QuY2FsbChpLHMpfWZ1bmN0aW9uIExvKGkscyl7cmV0dXJuIGkhPW51bGwmJiRIZShpLHMsQVd0KX1mdW5jdGlvbiBMV3QoaSxzKXtyZXR1cm4gUkQocyxmdW5jdGlvbih1KXtyZXR1cm4gaVt1XX0pfWZ1bmN0aW9uICQ3KGkpe3JldHVybiBpPT1udWxsP1tdOkxXdChpLGZtKGkpKX1mdW5jdGlvbiBRZihpKXtyZXR1cm4gaT09PXZvaWQgMH1mdW5jdGlvbiBVSGUoaSxzKXtyZXR1cm4gaTxzfWZ1bmN0aW9uIEdRKGkscyl7dmFyIHU9e307cmV0dXJuIHM9STkocyksdG1lKGksZnVuY3Rpb24oZCxwLHYpe0RYKHUscCxzKGQscCx2KSl9KSx1fWZ1bmN0aW9uIGltZShpLHMsdSl7Zm9yKHZhciBkPS0xLHA9aS5sZW5ndGg7KytkPHA7KXt2YXIgdj1pW2RdLGI9cyh2KTtpZihiIT1udWxsJiYoeT09PXZvaWQgMD9iPT09YiYmIVZDKGIpOnUoYix5KSkpdmFyIHk9YixUPXZ9cmV0dXJuIFR9ZnVuY3Rpb24gVUMoaSl7cmV0dXJuIGkmJmkubGVuZ3RoP2ltZShpLE9DLENXdCk6dm9pZCAwfWZ1bmN0aW9uIGtSKGkpe3JldHVybiBpJiZpLmxlbmd0aD9pbWUoaSxPQyxVSGUpOnZvaWQgMH1mdW5jdGlvbiBzbWUoaSxzKXtyZXR1cm4gaSYmaS5sZW5ndGg/aW1lKGksSTkocyksVUhlKTp2b2lkIDB9ZnVuY3Rpb24gTVd0KGkscyx1LGQpe2lmKCFhbShpKSlyZXR1cm4gaTtzPSRRKHMsaSk7Zm9yKHZhciBwPS0xLHY9cy5sZW5ndGgsYj12LTEseT1pO3khPW51bGwmJisrcDx2Oyl7dmFyIFQ9d1Ioc1twXSksXz11O2lmKFQ9PT0iX19wcm90b19fInx8VD09PSJjb25zdHJ1Y3RvciJ8fFQ9PT0icHJvdG90eXBlIilyZXR1cm4gaTtpZihwIT1iKXt2YXIgQT15W1RdO189ZD9kKEEsVCx5KTp2b2lkIDAsXz09PXZvaWQgMCYmKF89YW0oQSk/QTpGWChzW3ArMV0pP1tdOnt9KX1CWCh5LFQsXykseT15W1RdfXJldHVybiBpfWZ1bmN0aW9uIERXdChpLHMsdSl7Zm9yKHZhciBkPS0xLHA9cy5sZW5ndGgsdj17fTsrK2Q8cDspe3ZhciBiPXNbZF0seT16UShpLGIpO3UoeSxiKSYmTVd0KHYsJFEoYixpKSx5KX1yZXR1cm4gdn1mdW5jdGlvbiBJV3QoaSxzKXt2YXIgdT1pLmxlbmd0aDtmb3IoaS5zb3J0KHMpO3UtLTspaVt1XT1pW3VdLnZhbHVlO3JldHVybiBpfWZ1bmN0aW9uIE9XdChpLHMpe2lmKGkhPT1zKXt2YXIgdT1pIT09dm9pZCAwLGQ9aT09PW51bGwscD1pPT09aSx2PVZDKGkpLGI9cyE9PXZvaWQgMCx5PXM9PT1udWxsLFQ9cz09PXMsXz1WQyhzKTtpZigheSYmIV8mJiF2JiZpPnN8fHYmJmImJlQmJiF5JiYhX3x8ZCYmYiYmVHx8IXUmJlR8fCFwKXJldHVybiAxO2lmKCFkJiYhdiYmIV8mJmk8c3x8XyYmdSYmcCYmIWQmJiF2fHx5JiZ1JiZwfHwhYiYmcHx8IVQpcmV0dXJuLTF9cmV0dXJuIDB9ZnVuY3Rpb24gTld0KGkscyx1KXtmb3IodmFyIGQ9LTEscD1pLmNyaXRlcmlhLHY9cy5jcml0ZXJpYSxiPXAubGVuZ3RoLHk9dS5sZW5ndGg7KytkPGI7KXt2YXIgVD1PV3QocFtkXSx2W2RdKTtpZihUKXtpZihkPj15KXJldHVybiBUO3ZhciBfPXVbZF07cmV0dXJuIFQqKF89PSJkZXNjIj8tMToxKX19cmV0dXJuIGkuaW5kZXgtcy5pbmRleH1mdW5jdGlvbiBQV3QoaSxzLHUpe3MubGVuZ3RoP3M9UkQocyxmdW5jdGlvbih2KXtyZXR1cm4gRDAodik/ZnVuY3Rpb24oYil7cmV0dXJuIHpRKGIsdi5sZW5ndGg9PT0xP3ZbMF06dil9OnZ9KTpzPVtPQ107dmFyIGQ9LTE7cz1SRChzLE5YKEk5KSk7dmFyIHA9VkhlKGksZnVuY3Rpb24odixiLHkpe3ZhciBUPVJEKHMsZnVuY3Rpb24oXyl7cmV0dXJuIF8odil9KTtyZXR1cm57Y3JpdGVyaWE6VCxpbmRleDorK2QsdmFsdWU6dn19KTtyZXR1cm4gSVd0KHAsZnVuY3Rpb24odixiKXtyZXR1cm4gTld0KHYsYix1KX0pfWZ1bmN0aW9uIEJXdChpLHMpe3JldHVybiBEV3QoaSxzLGZ1bmN0aW9uKHUsZCl7cmV0dXJuIHpIZShpLGQpfSl9dmFyIEZXdD1yR3QoZnVuY3Rpb24oaSxzKXtyZXR1cm4gaT09bnVsbD97fTpCV3QoaSxzKX0pO2NvbnN0IEVSPUZXdDt2YXIgUld0PU1hdGguY2VpbCxqV3Q9TWF0aC5tYXg7ZnVuY3Rpb24gJFd0KGkscyx1LGQpe2Zvcih2YXIgcD0tMSx2PWpXdChSV3QoKHMtaSkvKHV8fDEpKSwwKSxiPUFycmF5KHYpO3YtLTspYltkP3Y6KytwXT1pLGkrPXU7cmV0dXJuIGJ9ZnVuY3Rpb24geld0KGkpe3JldHVybiBmdW5jdGlvbihzLHUsZCl7cmV0dXJuIGQmJnR5cGVvZiBkIT0ibnVtYmVyIiYmUUYocyx1LGQpJiYodT1kPXZvaWQgMCkscz1qUShzKSx1PT09dm9pZCAwPyh1PXMscz0wKTp1PWpRKHUpLGQ9ZD09PXZvaWQgMD9zPHU/MTotMTpqUShkKSwkV3Qocyx1LGQsaSl9fXZhciBxV3Q9eld0KCk7Y29uc3QgR0M9cVd0O2Z1bmN0aW9uIEhXdChpLHMsdSxkLHApe3JldHVybiBwKGksZnVuY3Rpb24odixiLHkpe3U9ZD8oZD0hMSx2KTpzKHUsdixiLHkpfSksdX1mdW5jdGlvbiBUUihpLHMsdSl7dmFyIGQ9RDAoaSk/aUd0OkhXdCxwPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gZChpLEk5KHMpLHUscCxWUSl9dmFyIFZXdD1SWChmdW5jdGlvbihpLHMpe2lmKGk9PW51bGwpcmV0dXJuW107dmFyIHU9cy5sZW5ndGg7cmV0dXJuIHU+MSYmUUYoaSxzWzBdLHNbMV0pP3M9W106dT4yJiZRRihzWzBdLHNbMV0sc1syXSkmJihzPVtzWzBdXSksUFd0KGkscVEocywxKSxbXSl9KTtjb25zdCBDUj1WV3Q7dmFyIFVXdD0xLzAsR1d0PUNEJiYxL0piZShuZXcgQ0QoWywtMF0pKVsxXT09VVd0P2Z1bmN0aW9uKGkpe3JldHVybiBuZXcgQ0QoaSl9OnpVdDtjb25zdCBLV3Q9R1d0O3ZhciBXV3Q9MjAwO2Z1bmN0aW9uIFlXdChpLHMsdSl7dmFyIGQ9LTEscD1VVXQsdj1pLmxlbmd0aCxiPSEwLHk9W10sVD15O2lmKHUpYj0hMSxwPW1XdDtlbHNlIGlmKHY+PVdXdCl7dmFyIF89cz9udWxsOktXdChpKTtpZihfKXJldHVybiBKYmUoXyk7Yj0hMSxwPUlIZSxUPW5ldyB4Un1lbHNlIFQ9cz9bXTp5O2U6Zm9yKDsrK2Q8djspe3ZhciBBPWlbZF0sUD1zP3MoQSk6QTtpZihBPXV8fEEhPT0wP0E6MCxiJiZQPT09UCl7Zm9yKHZhciBSPVQubGVuZ3RoO1ItLTspaWYoVFtSXT09PVApY29udGludWUgZTtzJiZULnB1c2goUCkseS5wdXNoKEEpfWVsc2UgcChULFAsdSl8fChUIT09eSYmVC5wdXNoKFApLHkucHVzaChBKSl9cmV0dXJuIHl9dmFyIFhXdD1SWChmdW5jdGlvbihpKXtyZXR1cm4gWVd0KHFRKGksMSxKUmUsITApKX0pO2NvbnN0IFFXdD1YV3Q7dmFyIEpXdD0wO2Z1bmN0aW9uIEtRKGkpe3ZhciBzPSsrSld0O3JldHVybiBtSGUoaSkrc31mdW5jdGlvbiBaV3QoaSxzLHUpe2Zvcih2YXIgZD0tMSxwPWkubGVuZ3RoLHY9cy5sZW5ndGgsYj17fTsrK2Q8cDspe3ZhciB5PWQ8dj9zW2RdOnZvaWQgMDt1KGIsaVtkXSx5KX1yZXR1cm4gYn1mdW5jdGlvbiBlWXQoaSxzKXtyZXR1cm4gWld0KGl8fFtdLHN8fFtdLEJYKX12YXIgdFl0PSJcMCIsS0M9IlwwIixHSGU9IgEiO2NsYXNzIEIwe2NvbnN0cnVjdG9yKHM9e30pe3RoaXMuX2lzRGlyZWN0ZWQ9TG8ocywiZGlyZWN0ZWQiKT9zLmRpcmVjdGVkOiEwLHRoaXMuX2lzTXVsdGlncmFwaD1MbyhzLCJtdWx0aWdyYXBoIik/cy5tdWx0aWdyYXBoOiExLHRoaXMuX2lzQ29tcG91bmQ9TG8ocywiY29tcG91bmQiKT9zLmNvbXBvdW5kOiExLHRoaXMuX2xhYmVsPXZvaWQgMCx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49eUQodm9pZCAwKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49eUQodm9pZCAwKSx0aGlzLl9ub2Rlcz17fSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50PXt9LHRoaXMuX2NoaWxkcmVuPXt9LHRoaXMuX2NoaWxkcmVuW0tDXT17fSksdGhpcy5faW49e30sdGhpcy5fcHJlZHM9e30sdGhpcy5fb3V0PXt9LHRoaXMuX3N1Y3M9e30sdGhpcy5fZWRnZU9ianM9e30sdGhpcy5fZWRnZUxhYmVscz17fX1pc0RpcmVjdGVkKCl7cmV0dXJuIHRoaXMuX2lzRGlyZWN0ZWR9aXNNdWx0aWdyYXBoKCl7cmV0dXJuIHRoaXMuX2lzTXVsdGlncmFwaH1pc0NvbXBvdW5kKCl7cmV0dXJuIHRoaXMuX2lzQ29tcG91bmR9c2V0R3JhcGgocyl7cmV0dXJuIHRoaXMuX2xhYmVsPXMsdGhpc31ncmFwaCgpe3JldHVybiB0aGlzLl9sYWJlbH1zZXREZWZhdWx0Tm9kZUxhYmVsKHMpe3JldHVybiBnRChzKXx8KHM9eUQocykpLHRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbj1zLHRoaXN9bm9kZUNvdW50KCl7cmV0dXJuIHRoaXMuX25vZGVDb3VudH1ub2Rlcygpe3JldHVybiBmbSh0aGlzLl9ub2Rlcyl9c291cmNlcygpe3ZhciBzPXRoaXM7cmV0dXJuIGo3KHRoaXMubm9kZXMoKSxmdW5jdGlvbih1KXtyZXR1cm4gaVIocy5faW5bdV0pfSl9c2lua3MoKXt2YXIgcz10aGlzO3JldHVybiBqNyh0aGlzLm5vZGVzKCksZnVuY3Rpb24odSl7cmV0dXJuIGlSKHMuX291dFt1XSl9KX1zZXROb2RlcyhzLHUpe3ZhciBkPWFyZ3VtZW50cyxwPXRoaXM7cmV0dXJuIEFyKHMsZnVuY3Rpb24odil7ZC5sZW5ndGg+MT9wLnNldE5vZGUodix1KTpwLnNldE5vZGUodil9KSx0aGlzfXNldE5vZGUocyx1KXtyZXR1cm4gTG8odGhpcy5fbm9kZXMscyk/KGFyZ3VtZW50cy5sZW5ndGg+MSYmKHRoaXMuX25vZGVzW3NdPXUpLHRoaXMpOih0aGlzLl9ub2Rlc1tzXT1hcmd1bWVudHMubGVuZ3RoPjE/dTp0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm4ocyksdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3BhcmVudFtzXT1LQyx0aGlzLl9jaGlsZHJlbltzXT17fSx0aGlzLl9jaGlsZHJlbltLQ11bc109ITApLHRoaXMuX2luW3NdPXt9LHRoaXMuX3ByZWRzW3NdPXt9LHRoaXMuX291dFtzXT17fSx0aGlzLl9zdWNzW3NdPXt9LCsrdGhpcy5fbm9kZUNvdW50LHRoaXMpfW5vZGUocyl7cmV0dXJuIHRoaXMuX25vZGVzW3NdfWhhc05vZGUocyl7cmV0dXJuIExvKHRoaXMuX25vZGVzLHMpfXJlbW92ZU5vZGUocyl7dmFyIHU9dGhpcztpZihMbyh0aGlzLl9ub2RlcyxzKSl7dmFyIGQ9ZnVuY3Rpb24ocCl7dS5yZW1vdmVFZGdlKHUuX2VkZ2VPYmpzW3BdKX07ZGVsZXRlIHRoaXMuX25vZGVzW3NdLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChzKSxkZWxldGUgdGhpcy5fcGFyZW50W3NdLEFyKHRoaXMuY2hpbGRyZW4ocyksZnVuY3Rpb24ocCl7dS5zZXRQYXJlbnQocCl9KSxkZWxldGUgdGhpcy5fY2hpbGRyZW5bc10pLEFyKGZtKHRoaXMuX2luW3NdKSxkKSxkZWxldGUgdGhpcy5faW5bc10sZGVsZXRlIHRoaXMuX3ByZWRzW3NdLEFyKGZtKHRoaXMuX291dFtzXSksZCksZGVsZXRlIHRoaXMuX291dFtzXSxkZWxldGUgdGhpcy5fc3Vjc1tzXSwtLXRoaXMuX25vZGVDb3VudH1yZXR1cm4gdGhpc31zZXRQYXJlbnQocyx1KXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYoUWYodSkpdT1LQztlbHNle3UrPSIiO2Zvcih2YXIgZD11OyFRZihkKTtkPXRoaXMucGFyZW50KGQpKWlmKGQ9PT1zKXRocm93IG5ldyBFcnJvcigiU2V0dGluZyAiK3UrIiBhcyBwYXJlbnQgb2YgIitzKyIgd291bGQgY3JlYXRlIGEgY3ljbGUiKTt0aGlzLnNldE5vZGUodSl9cmV0dXJuIHRoaXMuc2V0Tm9kZShzKSx0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChzKSx0aGlzLl9wYXJlbnRbc109dSx0aGlzLl9jaGlsZHJlblt1XVtzXT0hMCx0aGlzfV9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChzKXtkZWxldGUgdGhpcy5fY2hpbGRyZW5bdGhpcy5fcGFyZW50W3NdXVtzXX1wYXJlbnQocyl7aWYodGhpcy5faXNDb21wb3VuZCl7dmFyIHU9dGhpcy5fcGFyZW50W3NdO2lmKHUhPT1LQylyZXR1cm4gdX19Y2hpbGRyZW4ocyl7aWYoUWYocykmJihzPUtDKSx0aGlzLl9pc0NvbXBvdW5kKXt2YXIgdT10aGlzLl9jaGlsZHJlbltzXTtpZih1KXJldHVybiBmbSh1KX1lbHNle2lmKHM9PT1LQylyZXR1cm4gdGhpcy5ub2RlcygpO2lmKHRoaXMuaGFzTm9kZShzKSlyZXR1cm5bXX19cHJlZGVjZXNzb3JzKHMpe3ZhciB1PXRoaXMuX3ByZWRzW3NdO2lmKHUpcmV0dXJuIGZtKHUpfXN1Y2Nlc3NvcnMocyl7dmFyIHU9dGhpcy5fc3Vjc1tzXTtpZih1KXJldHVybiBmbSh1KX1uZWlnaGJvcnMocyl7dmFyIHU9dGhpcy5wcmVkZWNlc3NvcnMocyk7aWYodSlyZXR1cm4gUVd0KHUsdGhpcy5zdWNjZXNzb3JzKHMpKX1pc0xlYWYocyl7dmFyIHU7cmV0dXJuIHRoaXMuaXNEaXJlY3RlZCgpP3U9dGhpcy5zdWNjZXNzb3JzKHMpOnU9dGhpcy5uZWlnaGJvcnMocyksdS5sZW5ndGg9PT0wfWZpbHRlck5vZGVzKHMpe3ZhciB1PW5ldyB0aGlzLmNvbnN0cnVjdG9yKHtkaXJlY3RlZDp0aGlzLl9pc0RpcmVjdGVkLG11bHRpZ3JhcGg6dGhpcy5faXNNdWx0aWdyYXBoLGNvbXBvdW5kOnRoaXMuX2lzQ29tcG91bmR9KTt1LnNldEdyYXBoKHRoaXMuZ3JhcGgoKSk7dmFyIGQ9dGhpcztBcih0aGlzLl9ub2RlcyxmdW5jdGlvbihiLHkpe3MoeSkmJnUuc2V0Tm9kZSh5LGIpfSksQXIodGhpcy5fZWRnZU9ianMsZnVuY3Rpb24oYil7dS5oYXNOb2RlKGIudikmJnUuaGFzTm9kZShiLncpJiZ1LnNldEVkZ2UoYixkLmVkZ2UoYikpfSk7dmFyIHA9e307ZnVuY3Rpb24gdihiKXt2YXIgeT1kLnBhcmVudChiKTtyZXR1cm4geT09PXZvaWQgMHx8dS5oYXNOb2RlKHkpPyhwW2JdPXkseSk6eSBpbiBwP3BbeV06dih5KX1yZXR1cm4gdGhpcy5faXNDb21wb3VuZCYmQXIodS5ub2RlcygpLGZ1bmN0aW9uKGIpe3Uuc2V0UGFyZW50KGIsdihiKSl9KSx1fXNldERlZmF1bHRFZGdlTGFiZWwocyl7cmV0dXJuIGdEKHMpfHwocz15RChzKSksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPXMsdGhpc31lZGdlQ291bnQoKXtyZXR1cm4gdGhpcy5fZWRnZUNvdW50fWVkZ2VzKCl7cmV0dXJuICQ3KHRoaXMuX2VkZ2VPYmpzKX1zZXRQYXRoKHMsdSl7dmFyIGQ9dGhpcyxwPWFyZ3VtZW50cztyZXR1cm4gVFIocyxmdW5jdGlvbih2LGIpe3JldHVybiBwLmxlbmd0aD4xP2Quc2V0RWRnZSh2LGIsdSk6ZC5zZXRFZGdlKHYsYiksYn0pLHRoaXN9c2V0RWRnZSgpe3ZhciBzLHUsZCxwLHY9ITEsYj1hcmd1bWVudHNbMF07dHlwZW9mIGI9PSJvYmplY3QiJiZiIT09bnVsbCYmInYiaW4gYj8ocz1iLnYsdT1iLncsZD1iLm5hbWUsYXJndW1lbnRzLmxlbmd0aD09PTImJihwPWFyZ3VtZW50c1sxXSx2PSEwKSk6KHM9Yix1PWFyZ3VtZW50c1sxXSxkPWFyZ3VtZW50c1szXSxhcmd1bWVudHMubGVuZ3RoPjImJihwPWFyZ3VtZW50c1syXSx2PSEwKSkscz0iIitzLHU9IiIrdSxRZihkKXx8KGQ9IiIrZCk7dmFyIHk9U1IodGhpcy5faXNEaXJlY3RlZCxzLHUsZCk7aWYoTG8odGhpcy5fZWRnZUxhYmVscyx5KSlyZXR1cm4gdiYmKHRoaXMuX2VkZ2VMYWJlbHNbeV09cCksdGhpcztpZighUWYoZCkmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKHMpLHRoaXMuc2V0Tm9kZSh1KSx0aGlzLl9lZGdlTGFiZWxzW3ldPXY/cDp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4ocyx1LGQpO3ZhciBUPW5ZdCh0aGlzLl9pc0RpcmVjdGVkLHMsdSxkKTtyZXR1cm4gcz1ULnYsdT1ULncsT2JqZWN0LmZyZWV6ZShUKSx0aGlzLl9lZGdlT2Jqc1t5XT1ULEtIZSh0aGlzLl9wcmVkc1t1XSxzKSxLSGUodGhpcy5fc3Vjc1tzXSx1KSx0aGlzLl9pblt1XVt5XT1ULHRoaXMuX291dFtzXVt5XT1ULHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9ZWRnZShzLHUsZCl7dmFyIHA9YXJndW1lbnRzLmxlbmd0aD09PTE/YW1lKHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpTUih0aGlzLl9pc0RpcmVjdGVkLHMsdSxkKTtyZXR1cm4gdGhpcy5fZWRnZUxhYmVsc1twXX1oYXNFZGdlKHMsdSxkKXt2YXIgcD1hcmd1bWVudHMubGVuZ3RoPT09MT9hbWUodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlNSKHRoaXMuX2lzRGlyZWN0ZWQscyx1LGQpO3JldHVybiBMbyh0aGlzLl9lZGdlTGFiZWxzLHApfXJlbW92ZUVkZ2Uocyx1LGQpe3ZhciBwPWFyZ3VtZW50cy5sZW5ndGg9PT0xP2FtZSh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6U1IodGhpcy5faXNEaXJlY3RlZCxzLHUsZCksdj10aGlzLl9lZGdlT2Jqc1twXTtyZXR1cm4gdiYmKHM9di52LHU9di53LGRlbGV0ZSB0aGlzLl9lZGdlTGFiZWxzW3BdLGRlbGV0ZSB0aGlzLl9lZGdlT2Jqc1twXSxXSGUodGhpcy5fcHJlZHNbdV0scyksV0hlKHRoaXMuX3N1Y3Nbc10sdSksZGVsZXRlIHRoaXMuX2luW3VdW3BdLGRlbGV0ZSB0aGlzLl9vdXRbc11bcF0sdGhpcy5fZWRnZUNvdW50LS0pLHRoaXN9aW5FZGdlcyhzLHUpe3ZhciBkPXRoaXMuX2luW3NdO2lmKGQpe3ZhciBwPSQ3KGQpO3JldHVybiB1P2o3KHAsZnVuY3Rpb24odil7cmV0dXJuIHYudj09PXV9KTpwfX1vdXRFZGdlcyhzLHUpe3ZhciBkPXRoaXMuX291dFtzXTtpZihkKXt2YXIgcD0kNyhkKTtyZXR1cm4gdT9qNyhwLGZ1bmN0aW9uKHYpe3JldHVybiB2Lnc9PT11fSk6cH19bm9kZUVkZ2VzKHMsdSl7dmFyIGQ9dGhpcy5pbkVkZ2VzKHMsdSk7aWYoZClyZXR1cm4gZC5jb25jYXQodGhpcy5vdXRFZGdlcyhzLHUpKX19QjAucHJvdG90eXBlLl9ub2RlQ291bnQ9MCxCMC5wcm90b3R5cGUuX2VkZ2VDb3VudD0wO2Z1bmN0aW9uIEtIZShpLHMpe2lbc10/aVtzXSsrOmlbc109MX1mdW5jdGlvbiBXSGUoaSxzKXstLWlbc118fGRlbGV0ZSBpW3NdfWZ1bmN0aW9uIFNSKGkscyx1LGQpe3ZhciBwPSIiK3Msdj0iIit1O2lmKCFpJiZwPnYpe3ZhciBiPXA7cD12LHY9Yn1yZXR1cm4gcCtHSGUrditHSGUrKFFmKGQpP3RZdDpkKX1mdW5jdGlvbiBuWXQoaSxzLHUsZCl7dmFyIHA9IiIrcyx2PSIiK3U7aWYoIWkmJnA+dil7dmFyIGI9cDtwPXYsdj1ifXZhciB5PXt2OnAsdzp2fTtyZXR1cm4gZCYmKHkubmFtZT1kKSx5fWZ1bmN0aW9uIGFtZShpLHMpe3JldHVybiBTUihpLHMudixzLncscy5uYW1lKX1jbGFzcyByWXR7Y29uc3RydWN0b3IoKXt2YXIgcz17fTtzLl9uZXh0PXMuX3ByZXY9cyx0aGlzLl9zZW50aW5lbD1zfWRlcXVldWUoKXt2YXIgcz10aGlzLl9zZW50aW5lbCx1PXMuX3ByZXY7aWYodSE9PXMpcmV0dXJuIFlIZSh1KSx1fWVucXVldWUocyl7dmFyIHU9dGhpcy5fc2VudGluZWw7cy5fcHJldiYmcy5fbmV4dCYmWUhlKHMpLHMuX25leHQ9dS5fbmV4dCx1Ll9uZXh0Ll9wcmV2PXMsdS5fbmV4dD1zLHMuX3ByZXY9dX10b1N0cmluZygpe2Zvcih2YXIgcz1bXSx1PXRoaXMuX3NlbnRpbmVsLGQ9dS5fcHJldjtkIT09dTspcy5wdXNoKEpTT04uc3RyaW5naWZ5KGQsaVl0KSksZD1kLl9wcmV2O3JldHVybiJbIitzLmpvaW4oIiwgIikrIl0ifX1mdW5jdGlvbiBZSGUoaSl7aS5fcHJldi5fbmV4dD1pLl9uZXh0LGkuX25leHQuX3ByZXY9aS5fcHJldixkZWxldGUgaS5fbmV4dCxkZWxldGUgaS5fcHJldn1mdW5jdGlvbiBpWXQoaSxzKXtpZihpIT09Il9uZXh0IiYmaSE9PSJfcHJldiIpcmV0dXJuIHN9dmFyIHNZdD15RCgxKTtmdW5jdGlvbiBhWXQoaSxzKXtpZihpLm5vZGVDb3VudCgpPD0xKXJldHVybltdO3ZhciB1PWNZdChpLHN8fHNZdCksZD1vWXQodS5ncmFwaCx1LmJ1Y2tldHMsdS56ZXJvSWR4KTtyZXR1cm4gakQoUDAoZCxmdW5jdGlvbihwKXtyZXR1cm4gaS5vdXRFZGdlcyhwLnYscC53KX0pKX1mdW5jdGlvbiBvWXQoaSxzLHUpe2Zvcih2YXIgZD1bXSxwPXNbcy5sZW5ndGgtMV0sdj1zWzBdLGI7aS5ub2RlQ291bnQoKTspe2Zvcig7Yj12LmRlcXVldWUoKTspb21lKGkscyx1LGIpO2Zvcig7Yj1wLmRlcXVldWUoKTspb21lKGkscyx1LGIpO2lmKGkubm9kZUNvdW50KCkpe2Zvcih2YXIgeT1zLmxlbmd0aC0yO3k+MDstLXkpaWYoYj1zW3ldLmRlcXVldWUoKSxiKXtkPWQuY29uY2F0KG9tZShpLHMsdSxiLCEwKSk7YnJlYWt9fX1yZXR1cm4gZH1mdW5jdGlvbiBvbWUoaSxzLHUsZCxwKXt2YXIgdj1wP1tdOnZvaWQgMDtyZXR1cm4gQXIoaS5pbkVkZ2VzKGQudiksZnVuY3Rpb24oYil7dmFyIHk9aS5lZGdlKGIpLFQ9aS5ub2RlKGIudik7cCYmdi5wdXNoKHt2OmIudix3OmIud30pLFQub3V0LT15LGNtZShzLHUsVCl9KSxBcihpLm91dEVkZ2VzKGQudiksZnVuY3Rpb24oYil7dmFyIHk9aS5lZGdlKGIpLFQ9Yi53LF89aS5ub2RlKFQpO18uaW4tPXksY21lKHMsdSxfKX0pLGkucmVtb3ZlTm9kZShkLnYpLHZ9ZnVuY3Rpb24gY1l0KGkscyl7dmFyIHU9bmV3IEIwLGQ9MCxwPTA7QXIoaS5ub2RlcygpLGZ1bmN0aW9uKHkpe3Uuc2V0Tm9kZSh5LHt2OnksaW46MCxvdXQ6MH0pfSksQXIoaS5lZGdlcygpLGZ1bmN0aW9uKHkpe3ZhciBUPXUuZWRnZSh5LnYseS53KXx8MCxfPXMoeSksQT1UK187dS5zZXRFZGdlKHkudix5LncsQSkscD1NYXRoLm1heChwLHUubm9kZSh5LnYpLm91dCs9XyksZD1NYXRoLm1heChkLHUubm9kZSh5LncpLmluKz1fKX0pO3ZhciB2PUdDKHArZCszKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHJZdH0pLGI9ZCsxO3JldHVybiBBcih1Lm5vZGVzKCksZnVuY3Rpb24oeSl7Y21lKHYsYix1Lm5vZGUoeSkpfSkse2dyYXBoOnUsYnVja2V0czp2LHplcm9JZHg6Yn19ZnVuY3Rpb24gY21lKGkscyx1KXt1Lm91dD91LmluP2lbdS5vdXQtdS5pbitzXS5lbnF1ZXVlKHUpOmlbaS5sZW5ndGgtMV0uZW5xdWV1ZSh1KTppWzBdLmVucXVldWUodSl9ZnVuY3Rpb24gdVl0KGkpe3ZhciBzPWkuZ3JhcGgoKS5hY3ljbGljZXI9PT0iZ3JlZWR5Ij9hWXQoaSx1KGkpKTpsWXQoaSk7QXIocyxmdW5jdGlvbihkKXt2YXIgcD1pLmVkZ2UoZCk7aS5yZW1vdmVFZGdlKGQpLHAuZm9yd2FyZE5hbWU9ZC5uYW1lLHAucmV2ZXJzZWQ9ITAsaS5zZXRFZGdlKGQudyxkLnYscCxLUSgicmV2IikpfSk7ZnVuY3Rpb24gdShkKXtyZXR1cm4gZnVuY3Rpb24ocCl7cmV0dXJuIGQuZWRnZShwKS53ZWlnaHR9fX1mdW5jdGlvbiBsWXQoaSl7dmFyIHM9W10sdT17fSxkPXt9O2Z1bmN0aW9uIHAodil7TG8oZCx2KXx8KGRbdl09ITAsdVt2XT0hMCxBcihpLm91dEVkZ2VzKHYpLGZ1bmN0aW9uKGIpe0xvKHUsYi53KT9zLnB1c2goYik6cChiLncpfSksZGVsZXRlIHVbdl0pfXJldHVybiBBcihpLm5vZGVzKCkscCksc31mdW5jdGlvbiBoWXQoaSl7QXIoaS5lZGdlcygpLGZ1bmN0aW9uKHMpe3ZhciB1PWkuZWRnZShzKTtpZih1LnJldmVyc2VkKXtpLnJlbW92ZUVkZ2Uocyk7dmFyIGQ9dS5mb3J3YXJkTmFtZTtkZWxldGUgdS5yZXZlcnNlZCxkZWxldGUgdS5mb3J3YXJkTmFtZSxpLnNldEVkZ2Uocy53LHMudix1LGQpfX0pfWZ1bmN0aW9uIHpEKGkscyx1LGQpe3ZhciBwO2RvIHA9S1EoZCk7d2hpbGUoaS5oYXNOb2RlKHApKTtyZXR1cm4gdS5kdW1teT1zLGkuc2V0Tm9kZShwLHUpLHB9ZnVuY3Rpb24gZll0KGkpe3ZhciBzPW5ldyBCMCgpLnNldEdyYXBoKGkuZ3JhcGgoKSk7cmV0dXJuIEFyKGkubm9kZXMoKSxmdW5jdGlvbih1KXtzLnNldE5vZGUodSxpLm5vZGUodSkpfSksQXIoaS5lZGdlcygpLGZ1bmN0aW9uKHUpe3ZhciBkPXMuZWRnZSh1LnYsdS53KXx8e3dlaWdodDowLG1pbmxlbjoxfSxwPWkuZWRnZSh1KTtzLnNldEVkZ2UodS52LHUudyx7d2VpZ2h0OmQud2VpZ2h0K3Aud2VpZ2h0LG1pbmxlbjpNYXRoLm1heChkLm1pbmxlbixwLm1pbmxlbil9KX0pLHN9ZnVuY3Rpb24gWEhlKGkpe3ZhciBzPW5ldyBCMCh7bXVsdGlncmFwaDppLmlzTXVsdGlncmFwaCgpfSkuc2V0R3JhcGgoaS5ncmFwaCgpKTtyZXR1cm4gQXIoaS5ub2RlcygpLGZ1bmN0aW9uKHUpe2kuY2hpbGRyZW4odSkubGVuZ3RofHxzLnNldE5vZGUodSxpLm5vZGUodSkpfSksQXIoaS5lZGdlcygpLGZ1bmN0aW9uKHUpe3Muc2V0RWRnZSh1LGkuZWRnZSh1KSl9KSxzfWZ1bmN0aW9uIFFIZShpLHMpe3ZhciB1PWkueCxkPWkueSxwPXMueC11LHY9cy55LWQsYj1pLndpZHRoLzIseT1pLmhlaWdodC8yO2lmKCFwJiYhdil0aHJvdyBuZXcgRXJyb3IoIk5vdCBwb3NzaWJsZSB0byBmaW5kIGludGVyc2VjdGlvbiBpbnNpZGUgb2YgdGhlIHJlY3RhbmdsZSIpO3ZhciBULF87cmV0dXJuIE1hdGguYWJzKHYpKmI+TWF0aC5hYnMocCkqeT8odjwwJiYoeT0teSksVD15KnAvdixfPXkpOihwPDAmJihiPS1iKSxUPWIsXz1iKnYvcCkse3g6dStULHk6ZCtffX1mdW5jdGlvbiBXUShpKXt2YXIgcz1QMChHQyhaSGUoaSkrMSksZnVuY3Rpb24oKXtyZXR1cm5bXX0pO3JldHVybiBBcihpLm5vZGVzKCksZnVuY3Rpb24odSl7dmFyIGQ9aS5ub2RlKHUpLHA9ZC5yYW5rO1FmKHApfHwoc1twXVtkLm9yZGVyXT11KX0pLHN9ZnVuY3Rpb24gZFl0KGkpe3ZhciBzPWtSKFAwKGkubm9kZXMoKSxmdW5jdGlvbih1KXtyZXR1cm4gaS5ub2RlKHUpLnJhbmt9KSk7QXIoaS5ub2RlcygpLGZ1bmN0aW9uKHUpe3ZhciBkPWkubm9kZSh1KTtMbyhkLCJyYW5rIikmJihkLnJhbmstPXMpfSl9ZnVuY3Rpb24gZ1l0KGkpe3ZhciBzPWtSKFAwKGkubm9kZXMoKSxmdW5jdGlvbih2KXtyZXR1cm4gaS5ub2RlKHYpLnJhbmt9KSksdT1bXTtBcihpLm5vZGVzKCksZnVuY3Rpb24odil7dmFyIGI9aS5ub2RlKHYpLnJhbmstczt1W2JdfHwodVtiXT1bXSksdVtiXS5wdXNoKHYpfSk7dmFyIGQ9MCxwPWkuZ3JhcGgoKS5ub2RlUmFua0ZhY3RvcjtBcih1LGZ1bmN0aW9uKHYsYil7UWYodikmJmIlcCE9PTA/LS1kOmQmJkFyKHYsZnVuY3Rpb24oeSl7aS5ub2RlKHkpLnJhbmsrPWR9KX0pfWZ1bmN0aW9uIEpIZShpLHMsdSxkKXt2YXIgcD17d2lkdGg6MCxoZWlnaHQ6MH07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTQmJihwLnJhbms9dSxwLm9yZGVyPWQpLHpEKGksImJvcmRlciIscCxzKX1mdW5jdGlvbiBaSGUoaSl7cmV0dXJuIFVDKFAwKGkubm9kZXMoKSxmdW5jdGlvbihzKXt2YXIgdT1pLm5vZGUocykucmFuaztpZighUWYodSkpcmV0dXJuIHV9KSl9ZnVuY3Rpb24gcFl0KGkscyl7dmFyIHU9e2xoczpbXSxyaHM6W119O3JldHVybiBBcihpLGZ1bmN0aW9uKGQpe3MoZCk/dS5saHMucHVzaChkKTp1LnJocy5wdXNoKGQpfSksdX1mdW5jdGlvbiBiWXQoaSxzKXt2YXIgdT1xSGUoKTt0cnl7cmV0dXJuIHMoKX1maW5hbGx5e2NvbnNvbGUubG9nKGkrIiB0aW1lOiAiKyhxSGUoKS11KSsibXMiKX19ZnVuY3Rpb24gbVl0KGkscyl7cmV0dXJuIHMoKX1mdW5jdGlvbiB2WXQoaSl7ZnVuY3Rpb24gcyh1KXt2YXIgZD1pLmNoaWxkcmVuKHUpLHA9aS5ub2RlKHUpO2lmKGQubGVuZ3RoJiZBcihkLHMpLExvKHAsIm1pblJhbmsiKSl7cC5ib3JkZXJMZWZ0PVtdLHAuYm9yZGVyUmlnaHQ9W107Zm9yKHZhciB2PXAubWluUmFuayxiPXAubWF4UmFuaysxO3Y8YjsrK3YpZVZlKGksImJvcmRlckxlZnQiLCJfYmwiLHUscCx2KSxlVmUoaSwiYm9yZGVyUmlnaHQiLCJfYnIiLHUscCx2KX19QXIoaS5jaGlsZHJlbigpLHMpfWZ1bmN0aW9uIGVWZShpLHMsdSxkLHAsdil7dmFyIGI9e3dpZHRoOjAsaGVpZ2h0OjAscmFuazp2LGJvcmRlclR5cGU6c30seT1wW3NdW3YtMV0sVD16RChpLCJib3JkZXIiLGIsdSk7cFtzXVt2XT1ULGkuc2V0UGFyZW50KFQsZCkseSYmaS5zZXRFZGdlKHksVCx7d2VpZ2h0OjF9KX1mdW5jdGlvbiB3WXQoaSl7dmFyIHM9aS5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsocz09PSJsciJ8fHM9PT0icmwiKSYmdFZlKGkpfWZ1bmN0aW9uIHlZdChpKXt2YXIgcz1pLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyhzPT09ImJ0Inx8cz09PSJybCIpJiZ4WXQoaSksKHM9PT0ibHIifHxzPT09InJsIikmJihrWXQoaSksdFZlKGkpKX1mdW5jdGlvbiB0VmUoaSl7QXIoaS5ub2RlcygpLGZ1bmN0aW9uKHMpe25WZShpLm5vZGUocykpfSksQXIoaS5lZGdlcygpLGZ1bmN0aW9uKHMpe25WZShpLmVkZ2UocykpfSl9ZnVuY3Rpb24gblZlKGkpe3ZhciBzPWkud2lkdGg7aS53aWR0aD1pLmhlaWdodCxpLmhlaWdodD1zfWZ1bmN0aW9uIHhZdChpKXtBcihpLm5vZGVzKCksZnVuY3Rpb24ocyl7dW1lKGkubm9kZShzKSl9KSxBcihpLmVkZ2VzKCksZnVuY3Rpb24ocyl7dmFyIHU9aS5lZGdlKHMpO0FyKHUucG9pbnRzLHVtZSksTG8odSwieSIpJiZ1bWUodSl9KX1mdW5jdGlvbiB1bWUoaSl7aS55PS1pLnl9ZnVuY3Rpb24ga1l0KGkpe0FyKGkubm9kZXMoKSxmdW5jdGlvbihzKXtsbWUoaS5ub2RlKHMpKX0pLEFyKGkuZWRnZXMoKSxmdW5jdGlvbihzKXt2YXIgdT1pLmVkZ2Uocyk7QXIodS5wb2ludHMsbG1lKSxMbyh1LCJ4IikmJmxtZSh1KX0pfWZ1bmN0aW9uIGxtZShpKXt2YXIgcz1pLng7aS54PWkueSxpLnk9c31mdW5jdGlvbiBFWXQoaSl7aS5ncmFwaCgpLmR1bW15Q2hhaW5zPVtdLEFyKGkuZWRnZXMoKSxmdW5jdGlvbihzKXtUWXQoaSxzKX0pfWZ1bmN0aW9uIFRZdChpLHMpe3ZhciB1PXMudixkPWkubm9kZSh1KS5yYW5rLHA9cy53LHY9aS5ub2RlKHApLnJhbmssYj1zLm5hbWUseT1pLmVkZ2UocyksVD15LmxhYmVsUmFuaztpZih2IT09ZCsxKXtpLnJlbW92ZUVkZ2Uocyk7dmFyIF8sQSxQO2ZvcihQPTAsKytkO2Q8djsrK1AsKytkKXkucG9pbnRzPVtdLEE9e3dpZHRoOjAsaGVpZ2h0OjAsZWRnZUxhYmVsOnksZWRnZU9iajpzLHJhbms6ZH0sXz16RChpLCJlZGdlIixBLCJfZCIpLGQ9PT1UJiYoQS53aWR0aD15LndpZHRoLEEuaGVpZ2h0PXkuaGVpZ2h0LEEuZHVtbXk9ImVkZ2UtbGFiZWwiLEEubGFiZWxwb3M9eS5sYWJlbHBvcyksaS5zZXRFZGdlKHUsXyx7d2VpZ2h0Onkud2VpZ2h0fSxiKSxQPT09MCYmaS5ncmFwaCgpLmR1bW15Q2hhaW5zLnB1c2goXyksdT1fO2kuc2V0RWRnZSh1LHAse3dlaWdodDp5LndlaWdodH0sYil9fWZ1bmN0aW9uIENZdChpKXtBcihpLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24ocyl7dmFyIHU9aS5ub2RlKHMpLGQ9dS5lZGdlTGFiZWwscDtmb3IoaS5zZXRFZGdlKHUuZWRnZU9iaixkKTt1LmR1bW15OylwPWkuc3VjY2Vzc29ycyhzKVswXSxpLnJlbW92ZU5vZGUocyksZC5wb2ludHMucHVzaCh7eDp1LngseTp1Lnl9KSx1LmR1bW15PT09ImVkZ2UtbGFiZWwiJiYoZC54PXUueCxkLnk9dS55LGQud2lkdGg9dS53aWR0aCxkLmhlaWdodD11LmhlaWdodCkscz1wLHU9aS5ub2RlKHMpfSl9ZnVuY3Rpb24gaG1lKGkpe3ZhciBzPXt9O2Z1bmN0aW9uIHUoZCl7dmFyIHA9aS5ub2RlKGQpO2lmKExvKHMsZCkpcmV0dXJuIHAucmFuaztzW2RdPSEwO3ZhciB2PWtSKFAwKGkub3V0RWRnZXMoZCksZnVuY3Rpb24oYil7cmV0dXJuIHUoYi53KS1pLmVkZ2UoYikubWlubGVufSkpO3JldHVybih2PT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfHx2PT09dm9pZCAwfHx2PT09bnVsbCkmJih2PTApLHAucmFuaz12fUFyKGkuc291cmNlcygpLHUpfWZ1bmN0aW9uIF9SKGkscyl7cmV0dXJuIGkubm9kZShzLncpLnJhbmstaS5ub2RlKHMudikucmFuay1pLmVkZ2UocykubWlubGVufWZ1bmN0aW9uIHJWZShpKXt2YXIgcz1uZXcgQjAoe2RpcmVjdGVkOiExfSksdT1pLm5vZGVzKClbMF0sZD1pLm5vZGVDb3VudCgpO3Muc2V0Tm9kZSh1LHt9KTtmb3IodmFyIHAsdjtTWXQocyxpKTxkOylwPV9ZdChzLGkpLHY9cy5oYXNOb2RlKHAudik/X1IoaSxwKTotX1IoaSxwKSxBWXQocyxpLHYpO3JldHVybiBzfWZ1bmN0aW9uIFNZdChpLHMpe2Z1bmN0aW9uIHUoZCl7QXIocy5ub2RlRWRnZXMoZCksZnVuY3Rpb24ocCl7dmFyIHY9cC52LGI9ZD09PXY/cC53OnY7IWkuaGFzTm9kZShiKSYmIV9SKHMscCkmJihpLnNldE5vZGUoYix7fSksaS5zZXRFZGdlKGQsYix7fSksdShiKSl9KX1yZXR1cm4gQXIoaS5ub2RlcygpLHUpLGkubm9kZUNvdW50KCl9ZnVuY3Rpb24gX1l0KGkscyl7cmV0dXJuIHNtZShzLmVkZ2VzKCksZnVuY3Rpb24odSl7aWYoaS5oYXNOb2RlKHUudikhPT1pLmhhc05vZGUodS53KSlyZXR1cm4gX1Iocyx1KX0pfWZ1bmN0aW9uIEFZdChpLHMsdSl7QXIoaS5ub2RlcygpLGZ1bmN0aW9uKGQpe3Mubm9kZShkKS5yYW5rKz11fSl9ZnVuY3Rpb24gTFl0KCl7fUxZdC5wcm90b3R5cGU9bmV3IEVycm9yO2Z1bmN0aW9uIGlWZShpLHMsdSl7RDAocyl8fChzPVtzXSk7dmFyIGQ9KGkuaXNEaXJlY3RlZCgpP2kuc3VjY2Vzc29yczppLm5laWdoYm9ycykuYmluZChpKSxwPVtdLHY9e307cmV0dXJuIEFyKHMsZnVuY3Rpb24oYil7aWYoIWkuaGFzTm9kZShiKSl0aHJvdyBuZXcgRXJyb3IoIkdyYXBoIGRvZXMgbm90IGhhdmUgbm9kZTogIitiKTtzVmUoaSxiLHU9PT0icG9zdCIsdixkLHApfSkscH1mdW5jdGlvbiBzVmUoaSxzLHUsZCxwLHYpe0xvKGQscyl8fChkW3NdPSEwLHV8fHYucHVzaChzKSxBcihwKHMpLGZ1bmN0aW9uKGIpe3NWZShpLGIsdSxkLHAsdil9KSx1JiZ2LnB1c2gocykpfWZ1bmN0aW9uIE1ZdChpLHMpe3JldHVybiBpVmUoaSxzLCJwb3N0Iil9ZnVuY3Rpb24gRFl0KGkscyl7cmV0dXJuIGlWZShpLHMsInByZSIpfVdDLmluaXRMb3dMaW1WYWx1ZXM9ZG1lLFdDLmluaXRDdXRWYWx1ZXM9Zm1lLFdDLmNhbGNDdXRWYWx1ZT1hVmUsV0MubGVhdmVFZGdlPWNWZSxXQy5lbnRlckVkZ2U9dVZlLFdDLmV4Y2hhbmdlRWRnZXM9bFZlO2Z1bmN0aW9uIFdDKGkpe2k9Zll0KGkpLGhtZShpKTt2YXIgcz1yVmUoaSk7ZG1lKHMpLGZtZShzLGkpO2Zvcih2YXIgdSxkO3U9Y1ZlKHMpOylkPXVWZShzLGksdSksbFZlKHMsaSx1LGQpfWZ1bmN0aW9uIGZtZShpLHMpe3ZhciB1PU1ZdChpLGkubm9kZXMoKSk7dT11LnNsaWNlKDAsdS5sZW5ndGgtMSksQXIodSxmdW5jdGlvbihkKXtJWXQoaSxzLGQpfSl9ZnVuY3Rpb24gSVl0KGkscyx1KXt2YXIgZD1pLm5vZGUodSkscD1kLnBhcmVudDtpLmVkZ2UodSxwKS5jdXR2YWx1ZT1hVmUoaSxzLHUpfWZ1bmN0aW9uIGFWZShpLHMsdSl7dmFyIGQ9aS5ub2RlKHUpLHA9ZC5wYXJlbnQsdj0hMCxiPXMuZWRnZSh1LHApLHk9MDtyZXR1cm4gYnx8KHY9ITEsYj1zLmVkZ2UocCx1KSkseT1iLndlaWdodCxBcihzLm5vZGVFZGdlcyh1KSxmdW5jdGlvbihUKXt2YXIgXz1ULnY9PT11LEE9Xz9ULnc6VC52O2lmKEEhPT1wKXt2YXIgUD1fPT09dixSPXMuZWRnZShUKS53ZWlnaHQ7aWYoeSs9UD9SOi1SLE5ZdChpLHUsQSkpe3ZhciBGPWkuZWRnZSh1LEEpLmN1dHZhbHVlO3krPVA/LUY6Rn19fSkseX1mdW5jdGlvbiBkbWUoaSxzKXthcmd1bWVudHMubGVuZ3RoPDImJihzPWkubm9kZXMoKVswXSksb1ZlKGkse30sMSxzKX1mdW5jdGlvbiBvVmUoaSxzLHUsZCxwKXt2YXIgdj11LGI9aS5ub2RlKGQpO3JldHVybiBzW2RdPSEwLEFyKGkubmVpZ2hib3JzKGQpLGZ1bmN0aW9uKHkpe0xvKHMseSl8fCh1PW9WZShpLHMsdSx5LGQpKX0pLGIubG93PXYsYi5saW09dSsrLHA/Yi5wYXJlbnQ9cDpkZWxldGUgYi5wYXJlbnQsdX1mdW5jdGlvbiBjVmUoaSl7cmV0dXJuIHJtZShpLmVkZ2VzKCksZnVuY3Rpb24ocyl7cmV0dXJuIGkuZWRnZShzKS5jdXR2YWx1ZTwwfSl9ZnVuY3Rpb24gdVZlKGkscyx1KXt2YXIgZD11LnYscD11Lnc7cy5oYXNFZGdlKGQscCl8fChkPXUudyxwPXUudik7dmFyIHY9aS5ub2RlKGQpLGI9aS5ub2RlKHApLHk9dixUPSExO3YubGltPmIubGltJiYoeT1iLFQ9ITApO3ZhciBfPWo3KHMuZWRnZXMoKSxmdW5jdGlvbihBKXtyZXR1cm4gVD09PWhWZShpLGkubm9kZShBLnYpLHkpJiZUIT09aFZlKGksaS5ub2RlKEEudykseSl9KTtyZXR1cm4gc21lKF8sZnVuY3Rpb24oQSl7cmV0dXJuIF9SKHMsQSl9KX1mdW5jdGlvbiBsVmUoaSxzLHUsZCl7dmFyIHA9dS52LHY9dS53O2kucmVtb3ZlRWRnZShwLHYpLGkuc2V0RWRnZShkLnYsZC53LHt9KSxkbWUoaSksZm1lKGkscyksT1l0KGkscyl9ZnVuY3Rpb24gT1l0KGkscyl7dmFyIHU9cm1lKGkubm9kZXMoKSxmdW5jdGlvbihwKXtyZXR1cm4hcy5ub2RlKHApLnBhcmVudH0pLGQ9RFl0KGksdSk7ZD1kLnNsaWNlKDEpLEFyKGQsZnVuY3Rpb24ocCl7dmFyIHY9aS5ub2RlKHApLnBhcmVudCxiPXMuZWRnZShwLHYpLHk9ITE7Ynx8KGI9cy5lZGdlKHYscCkseT0hMCkscy5ub2RlKHApLnJhbms9cy5ub2RlKHYpLnJhbmsrKHk/Yi5taW5sZW46LWIubWlubGVuKX0pfWZ1bmN0aW9uIE5ZdChpLHMsdSl7cmV0dXJuIGkuaGFzRWRnZShzLHUpfWZ1bmN0aW9uIGhWZShpLHMsdSl7cmV0dXJuIHUubG93PD1zLmxpbSYmcy5saW08PXUubGltfWZ1bmN0aW9uIFBZdChpKXtzd2l0Y2goaS5ncmFwaCgpLnJhbmtlcil7Y2FzZSJuZXR3b3JrLXNpbXBsZXgiOmZWZShpKTticmVhaztjYXNlInRpZ2h0LXRyZWUiOkZZdChpKTticmVhaztjYXNlImxvbmdlc3QtcGF0aCI6Qll0KGkpO2JyZWFrO2RlZmF1bHQ6ZlZlKGkpfX12YXIgQll0PWhtZTtmdW5jdGlvbiBGWXQoaSl7aG1lKGkpLHJWZShpKX1mdW5jdGlvbiBmVmUoaSl7V0MoaSl9ZnVuY3Rpb24gUll0KGkpe3ZhciBzPXpEKGksInJvb3QiLHt9LCJfcm9vdCIpLHU9all0KGkpLGQ9VUMoJDcodSkpLTEscD0yKmQrMTtpLmdyYXBoKCkubmVzdGluZ1Jvb3Q9cyxBcihpLmVkZ2VzKCksZnVuY3Rpb24oYil7aS5lZGdlKGIpLm1pbmxlbio9cH0pO3ZhciB2PSRZdChpKSsxO0FyKGkuY2hpbGRyZW4oKSxmdW5jdGlvbihiKXtkVmUoaSxzLHAsdixkLHUsYil9KSxpLmdyYXBoKCkubm9kZVJhbmtGYWN0b3I9cH1mdW5jdGlvbiBkVmUoaSxzLHUsZCxwLHYsYil7dmFyIHk9aS5jaGlsZHJlbihiKTtpZigheS5sZW5ndGgpe2IhPT1zJiZpLnNldEVkZ2UocyxiLHt3ZWlnaHQ6MCxtaW5sZW46dX0pO3JldHVybn12YXIgVD1KSGUoaSwiX2J0IiksXz1KSGUoaSwiX2JiIiksQT1pLm5vZGUoYik7aS5zZXRQYXJlbnQoVCxiKSxBLmJvcmRlclRvcD1ULGkuc2V0UGFyZW50KF8sYiksQS5ib3JkZXJCb3R0b209XyxBcih5LGZ1bmN0aW9uKFApe2RWZShpLHMsdSxkLHAsdixQKTt2YXIgUj1pLm5vZGUoUCksRj1SLmJvcmRlclRvcD9SLmJvcmRlclRvcDpQLGo9Ui5ib3JkZXJCb3R0b20/Ui5ib3JkZXJCb3R0b206UCxLPVIuYm9yZGVyVG9wP2Q6MipkLGVlPUYhPT1qPzE6cC12W2JdKzE7aS5zZXRFZGdlKFQsRix7d2VpZ2h0OkssbWlubGVuOmVlLG5lc3RpbmdFZGdlOiEwfSksaS5zZXRFZGdlKGosXyx7d2VpZ2h0OkssbWlubGVuOmVlLG5lc3RpbmdFZGdlOiEwfSl9KSxpLnBhcmVudChiKXx8aS5zZXRFZGdlKHMsVCx7d2VpZ2h0OjAsbWlubGVuOnArdltiXX0pfWZ1bmN0aW9uIGpZdChpKXt2YXIgcz17fTtmdW5jdGlvbiB1KGQscCl7dmFyIHY9aS5jaGlsZHJlbihkKTt2JiZ2Lmxlbmd0aCYmQXIodixmdW5jdGlvbihiKXt1KGIscCsxKX0pLHNbZF09cH1yZXR1cm4gQXIoaS5jaGlsZHJlbigpLGZ1bmN0aW9uKGQpe3UoZCwxKX0pLHN9ZnVuY3Rpb24gJFl0KGkpe3JldHVybiBUUihpLmVkZ2VzKCksZnVuY3Rpb24ocyx1KXtyZXR1cm4gcytpLmVkZ2UodSkud2VpZ2h0fSwwKX1mdW5jdGlvbiB6WXQoaSl7dmFyIHM9aS5ncmFwaCgpO2kucmVtb3ZlTm9kZShzLm5lc3RpbmdSb290KSxkZWxldGUgcy5uZXN0aW5nUm9vdCxBcihpLmVkZ2VzKCksZnVuY3Rpb24odSl7dmFyIGQ9aS5lZGdlKHUpO2QubmVzdGluZ0VkZ2UmJmkucmVtb3ZlRWRnZSh1KX0pfWZ1bmN0aW9uIHFZdChpLHMsdSl7dmFyIGQ9e30scDtBcih1LGZ1bmN0aW9uKHYpe2Zvcih2YXIgYj1pLnBhcmVudCh2KSx5LFQ7Yjspe2lmKHk9aS5wYXJlbnQoYikseT8oVD1kW3ldLGRbeV09Yik6KFQ9cCxwPWIpLFQmJlQhPT1iKXtzLnNldEVkZ2UoVCxiKTtyZXR1cm59Yj15fX0pfWZ1bmN0aW9uIEhZdChpLHMsdSl7dmFyIGQ9Vll0KGkpLHA9bmV3IEIwKHtjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyb290OmR9KS5zZXREZWZhdWx0Tm9kZUxhYmVsKGZ1bmN0aW9uKHYpe3JldHVybiBpLm5vZGUodil9KTtyZXR1cm4gQXIoaS5ub2RlcygpLGZ1bmN0aW9uKHYpe3ZhciBiPWkubm9kZSh2KSx5PWkucGFyZW50KHYpOyhiLnJhbms9PT1zfHxiLm1pblJhbms8PXMmJnM8PWIubWF4UmFuaykmJihwLnNldE5vZGUodikscC5zZXRQYXJlbnQodix5fHxkKSxBcihpW3VdKHYpLGZ1bmN0aW9uKFQpe3ZhciBfPVQudj09PXY/VC53OlQudixBPXAuZWRnZShfLHYpLFA9UWYoQSk/MDpBLndlaWdodDtwLnNldEVkZ2UoXyx2LHt3ZWlnaHQ6aS5lZGdlKFQpLndlaWdodCtQfSl9KSxMbyhiLCJtaW5SYW5rIikmJnAuc2V0Tm9kZSh2LHtib3JkZXJMZWZ0OmIuYm9yZGVyTGVmdFtzXSxib3JkZXJSaWdodDpiLmJvcmRlclJpZ2h0W3NdfSkpfSkscH1mdW5jdGlvbiBWWXQoaSl7Zm9yKHZhciBzO2kuaGFzTm9kZShzPUtRKCJfcm9vdCIpKTspO3JldHVybiBzfWZ1bmN0aW9uIFVZdChpLHMpe2Zvcih2YXIgdT0wLGQ9MTtkPHMubGVuZ3RoOysrZCl1Kz1HWXQoaSxzW2QtMV0sc1tkXSk7cmV0dXJuIHV9ZnVuY3Rpb24gR1l0KGkscyx1KXtmb3IodmFyIGQ9ZVl0KHUsUDAodSxmdW5jdGlvbihfLEEpe3JldHVybiBBfSkpLHA9akQoUDAocyxmdW5jdGlvbihfKXtyZXR1cm4gQ1IoUDAoaS5vdXRFZGdlcyhfKSxmdW5jdGlvbihBKXtyZXR1cm57cG9zOmRbQS53XSx3ZWlnaHQ6aS5lZGdlKEEpLndlaWdodH19KSwicG9zIil9KSksdj0xO3Y8dS5sZW5ndGg7KXY8PD0xO3ZhciBiPTIqdi0xO3YtPTE7dmFyIHk9UDAobmV3IEFycmF5KGIpLGZ1bmN0aW9uKCl7cmV0dXJuIDB9KSxUPTA7cmV0dXJuIEFyKHAuZm9yRWFjaChmdW5jdGlvbihfKXt2YXIgQT1fLnBvcyt2O3lbQV0rPV8ud2VpZ2h0O2Zvcih2YXIgUD0wO0E+MDspQSUyJiYoUCs9eVtBKzFdKSxBPUEtMT4+MSx5W0FdKz1fLndlaWdodDtUKz1fLndlaWdodCpQfSkpLFR9ZnVuY3Rpb24gS1l0KGkpe3ZhciBzPXt9LHU9ajcoaS5ub2RlcygpLGZ1bmN0aW9uKHkpe3JldHVybiFpLmNoaWxkcmVuKHkpLmxlbmd0aH0pLGQ9VUMoUDAodSxmdW5jdGlvbih5KXtyZXR1cm4gaS5ub2RlKHkpLnJhbmt9KSkscD1QMChHQyhkKzEpLGZ1bmN0aW9uKCl7cmV0dXJuW119KTtmdW5jdGlvbiB2KHkpe2lmKCFMbyhzLHkpKXtzW3ldPSEwO3ZhciBUPWkubm9kZSh5KTtwW1QucmFua10ucHVzaCh5KSxBcihpLnN1Y2Nlc3NvcnMoeSksdil9fXZhciBiPUNSKHUsZnVuY3Rpb24oeSl7cmV0dXJuIGkubm9kZSh5KS5yYW5rfSk7cmV0dXJuIEFyKGIsdikscH1mdW5jdGlvbiBXWXQoaSxzKXtyZXR1cm4gUDAocyxmdW5jdGlvbih1KXt2YXIgZD1pLmluRWRnZXModSk7aWYoZC5sZW5ndGgpe3ZhciBwPVRSKGQsZnVuY3Rpb24odixiKXt2YXIgeT1pLmVkZ2UoYiksVD1pLm5vZGUoYi52KTtyZXR1cm57c3VtOnYuc3VtK3kud2VpZ2h0KlQub3JkZXIsd2VpZ2h0OnYud2VpZ2h0K3kud2VpZ2h0fX0se3N1bTowLHdlaWdodDowfSk7cmV0dXJue3Y6dSxiYXJ5Y2VudGVyOnAuc3VtL3Aud2VpZ2h0LHdlaWdodDpwLndlaWdodH19ZWxzZSByZXR1cm57djp1fX0pfWZ1bmN0aW9uIFlZdChpLHMpe3ZhciB1PXt9O0FyKGksZnVuY3Rpb24ocCx2KXt2YXIgYj11W3Audl09e2luZGVncmVlOjAsaW46W10sb3V0OltdLHZzOltwLnZdLGk6dn07UWYocC5iYXJ5Y2VudGVyKXx8KGIuYmFyeWNlbnRlcj1wLmJhcnljZW50ZXIsYi53ZWlnaHQ9cC53ZWlnaHQpfSksQXIocy5lZGdlcygpLGZ1bmN0aW9uKHApe3ZhciB2PXVbcC52XSxiPXVbcC53XTshUWYodikmJiFRZihiKSYmKGIuaW5kZWdyZWUrKyx2Lm91dC5wdXNoKHVbcC53XSkpfSk7dmFyIGQ9ajcodSxmdW5jdGlvbihwKXtyZXR1cm4hcC5pbmRlZ3JlZX0pO3JldHVybiBYWXQoZCl9ZnVuY3Rpb24gWFl0KGkpe3ZhciBzPVtdO2Z1bmN0aW9uIHUodil7cmV0dXJuIGZ1bmN0aW9uKGIpe2IubWVyZ2VkfHwoUWYoYi5iYXJ5Y2VudGVyKXx8UWYodi5iYXJ5Y2VudGVyKXx8Yi5iYXJ5Y2VudGVyPj12LmJhcnljZW50ZXIpJiZRWXQodixiKX19ZnVuY3Rpb24gZCh2KXtyZXR1cm4gZnVuY3Rpb24oYil7Yi5pbi5wdXNoKHYpLC0tYi5pbmRlZ3JlZT09PTAmJmkucHVzaChiKX19Zm9yKDtpLmxlbmd0aDspe3ZhciBwPWkucG9wKCk7cy5wdXNoKHApLEFyKHAuaW4ucmV2ZXJzZSgpLHUocCkpLEFyKHAub3V0LGQocCkpfXJldHVybiBQMChqNyhzLGZ1bmN0aW9uKHYpe3JldHVybiF2Lm1lcmdlZH0pLGZ1bmN0aW9uKHYpe3JldHVybiBFUih2LFsidnMiLCJpIiwiYmFyeWNlbnRlciIsIndlaWdodCJdKX0pfWZ1bmN0aW9uIFFZdChpLHMpe3ZhciB1PTAsZD0wO2kud2VpZ2h0JiYodSs9aS5iYXJ5Y2VudGVyKmkud2VpZ2h0LGQrPWkud2VpZ2h0KSxzLndlaWdodCYmKHUrPXMuYmFyeWNlbnRlcipzLndlaWdodCxkKz1zLndlaWdodCksaS52cz1zLnZzLmNvbmNhdChpLnZzKSxpLmJhcnljZW50ZXI9dS9kLGkud2VpZ2h0PWQsaS5pPU1hdGgubWluKHMuaSxpLmkpLHMubWVyZ2VkPSEwfWZ1bmN0aW9uIEpZdChpLHMpe3ZhciB1PXBZdChpLGZ1bmN0aW9uKEEpe3JldHVybiBMbyhBLCJiYXJ5Y2VudGVyIil9KSxkPXUubGhzLHA9Q1IodS5yaHMsZnVuY3Rpb24oQSl7cmV0dXJuLUEuaX0pLHY9W10sYj0wLHk9MCxUPTA7ZC5zb3J0KFpZdCghIXMpKSxUPWdWZSh2LHAsVCksQXIoZCxmdW5jdGlvbihBKXtUKz1BLnZzLmxlbmd0aCx2LnB1c2goQS52cyksYis9QS5iYXJ5Y2VudGVyKkEud2VpZ2h0LHkrPUEud2VpZ2h0LFQ9Z1ZlKHYscCxUKX0pO3ZhciBfPXt2czpqRCh2KX07cmV0dXJuIHkmJihfLmJhcnljZW50ZXI9Yi95LF8ud2VpZ2h0PXkpLF99ZnVuY3Rpb24gZ1ZlKGkscyx1KXtmb3IodmFyIGQ7cy5sZW5ndGgmJihkPVVRKHMpKS5pPD11OylzLnBvcCgpLGkucHVzaChkLnZzKSx1Kys7cmV0dXJuIHV9ZnVuY3Rpb24gWll0KGkpe3JldHVybiBmdW5jdGlvbihzLHUpe3JldHVybiBzLmJhcnljZW50ZXI8dS5iYXJ5Y2VudGVyPy0xOnMuYmFyeWNlbnRlcj51LmJhcnljZW50ZXI/MTppP3UuaS1zLmk6cy5pLXUuaX19ZnVuY3Rpb24gcFZlKGkscyx1LGQpe3ZhciBwPWkuY2hpbGRyZW4ocyksdj1pLm5vZGUocyksYj12P3YuYm9yZGVyTGVmdDp2b2lkIDAseT12P3YuYm9yZGVyUmlnaHQ6dm9pZCAwLFQ9e307YiYmKHA9ajcocCxmdW5jdGlvbihqKXtyZXR1cm4gaiE9PWImJmohPT15fSkpO3ZhciBfPVdZdChpLHApO0FyKF8sZnVuY3Rpb24oail7aWYoaS5jaGlsZHJlbihqLnYpLmxlbmd0aCl7dmFyIEs9cFZlKGksai52LHUsZCk7VFtqLnZdPUssTG8oSywiYmFyeWNlbnRlciIpJiZ0WHQoaixLKX19KTt2YXIgQT1ZWXQoXyx1KTtlWHQoQSxUKTt2YXIgUD1KWXQoQSxkKTtpZihiJiYoUC52cz1qRChbYixQLnZzLHldKSxpLnByZWRlY2Vzc29ycyhiKS5sZW5ndGgpKXt2YXIgUj1pLm5vZGUoaS5wcmVkZWNlc3NvcnMoYilbMF0pLEY9aS5ub2RlKGkucHJlZGVjZXNzb3JzKHkpWzBdKTtMbyhQLCJiYXJ5Y2VudGVyIil8fChQLmJhcnljZW50ZXI9MCxQLndlaWdodD0wKSxQLmJhcnljZW50ZXI9KFAuYmFyeWNlbnRlcipQLndlaWdodCtSLm9yZGVyK0Yub3JkZXIpLyhQLndlaWdodCsyKSxQLndlaWdodCs9Mn1yZXR1cm4gUH1mdW5jdGlvbiBlWHQoaSxzKXtBcihpLGZ1bmN0aW9uKHUpe3UudnM9akQodS52cy5tYXAoZnVuY3Rpb24oZCl7cmV0dXJuIHNbZF0/c1tkXS52czpkfSkpfSl9ZnVuY3Rpb24gdFh0KGkscyl7UWYoaS5iYXJ5Y2VudGVyKT8oaS5iYXJ5Y2VudGVyPXMuYmFyeWNlbnRlcixpLndlaWdodD1zLndlaWdodCk6KGkuYmFyeWNlbnRlcj0oaS5iYXJ5Y2VudGVyKmkud2VpZ2h0K3MuYmFyeWNlbnRlcipzLndlaWdodCkvKGkud2VpZ2h0K3Mud2VpZ2h0KSxpLndlaWdodCs9cy53ZWlnaHQpfWZ1bmN0aW9uIG5YdChpKXt2YXIgcz1aSGUoaSksdT1iVmUoaSxHQygxLHMrMSksImluRWRnZXMiKSxkPWJWZShpLEdDKHMtMSwtMSwtMSksIm91dEVkZ2VzIikscD1LWXQoaSk7bVZlKGkscCk7Zm9yKHZhciB2PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxiLHk9MCxUPTA7VDw0OysreSwrK1Qpe3JYdCh5JTI/dTpkLHklND49MikscD1XUShpKTt2YXIgXz1VWXQoaSxwKTtfPHYmJihUPTAsYj1DS3QocCksdj1fKX1tVmUoaSxiKX1mdW5jdGlvbiBiVmUoaSxzLHUpe3JldHVybiBQMChzLGZ1bmN0aW9uKGQpe3JldHVybiBIWXQoaSxkLHUpfSl9ZnVuY3Rpb24gclh0KGkscyl7dmFyIHU9bmV3IEIwO0FyKGksZnVuY3Rpb24oZCl7dmFyIHA9ZC5ncmFwaCgpLnJvb3Qsdj1wVmUoZCxwLHUscyk7QXIodi52cyxmdW5jdGlvbihiLHkpe2Qubm9kZShiKS5vcmRlcj15fSkscVl0KGQsdSx2LnZzKX0pfWZ1bmN0aW9uIG1WZShpLHMpe0FyKHMsZnVuY3Rpb24odSl7QXIodSxmdW5jdGlvbihkLHApe2kubm9kZShkKS5vcmRlcj1wfSl9KX1mdW5jdGlvbiBpWHQoaSl7dmFyIHM9YVh0KGkpO0FyKGkuZ3JhcGgoKS5kdW1teUNoYWlucyxmdW5jdGlvbih1KXtmb3IodmFyIGQ9aS5ub2RlKHUpLHA9ZC5lZGdlT2JqLHY9c1h0KGkscyxwLnYscC53KSxiPXYucGF0aCx5PXYubGNhLFQ9MCxfPWJbVF0sQT0hMDt1IT09cC53Oyl7aWYoZD1pLm5vZGUodSksQSl7Zm9yKDsoXz1iW1RdKSE9PXkmJmkubm9kZShfKS5tYXhSYW5rPGQucmFuazspVCsrO189PT15JiYoQT0hMSl9aWYoIUEpe2Zvcig7VDxiLmxlbmd0aC0xJiZpLm5vZGUoXz1iW1QrMV0pLm1pblJhbms8PWQucmFuazspVCsrO189YltUXX1pLnNldFBhcmVudCh1LF8pLHU9aS5zdWNjZXNzb3JzKHUpWzBdfX0pfWZ1bmN0aW9uIHNYdChpLHMsdSxkKXt2YXIgcD1bXSx2PVtdLGI9TWF0aC5taW4oc1t1XS5sb3csc1tkXS5sb3cpLHk9TWF0aC5tYXgoc1t1XS5saW0sc1tkXS5saW0pLFQsXztUPXU7ZG8gVD1pLnBhcmVudChUKSxwLnB1c2goVCk7d2hpbGUoVCYmKHNbVF0ubG93PmJ8fHk+c1tUXS5saW0pKTtmb3IoXz1ULFQ9ZDsoVD1pLnBhcmVudChUKSkhPT1fOyl2LnB1c2goVCk7cmV0dXJue3BhdGg6cC5jb25jYXQodi5yZXZlcnNlKCkpLGxjYTpffX1mdW5jdGlvbiBhWHQoaSl7dmFyIHM9e30sdT0wO2Z1bmN0aW9uIGQocCl7dmFyIHY9dTtBcihpLmNoaWxkcmVuKHApLGQpLHNbcF09e2xvdzp2LGxpbTp1Kyt9fXJldHVybiBBcihpLmNoaWxkcmVuKCksZCksc31mdW5jdGlvbiBvWHQoaSxzKXt2YXIgdT17fTtmdW5jdGlvbiBkKHAsdil7dmFyIGI9MCx5PTAsVD1wLmxlbmd0aCxfPVVRKHYpO3JldHVybiBBcih2LGZ1bmN0aW9uKEEsUCl7dmFyIFI9dVh0KGksQSksRj1SP2kubm9kZShSKS5vcmRlcjpUOyhSfHxBPT09XykmJihBcih2LnNsaWNlKHksUCsxKSxmdW5jdGlvbihqKXtBcihpLnByZWRlY2Vzc29ycyhqKSxmdW5jdGlvbihLKXt2YXIgZWU9aS5ub2RlKEspLGllPWVlLm9yZGVyOyhpZTxifHxGPGllKSYmIShlZS5kdW1teSYmaS5ub2RlKGopLmR1bW15KSYmdlZlKHUsSyxqKX0pfSkseT1QKzEsYj1GKX0pLHZ9cmV0dXJuIFRSKHMsZCksdX1mdW5jdGlvbiBjWHQoaSxzKXt2YXIgdT17fTtmdW5jdGlvbiBkKHYsYix5LFQsXyl7dmFyIEE7QXIoR0MoYix5KSxmdW5jdGlvbihQKXtBPXZbUF0saS5ub2RlKEEpLmR1bW15JiZBcihpLnByZWRlY2Vzc29ycyhBKSxmdW5jdGlvbihSKXt2YXIgRj1pLm5vZGUoUik7Ri5kdW1teSYmKEYub3JkZXI8VHx8Ri5vcmRlcj5fKSYmdlZlKHUsUixBKX0pfSl9ZnVuY3Rpb24gcCh2LGIpe3ZhciB5PS0xLFQsXz0wO3JldHVybiBBcihiLGZ1bmN0aW9uKEEsUCl7aWYoaS5ub2RlKEEpLmR1bW15PT09ImJvcmRlciIpe3ZhciBSPWkucHJlZGVjZXNzb3JzKEEpO1IubGVuZ3RoJiYoVD1pLm5vZGUoUlswXSkub3JkZXIsZChiLF8sUCx5LFQpLF89UCx5PVQpfWQoYixfLGIubGVuZ3RoLFQsdi5sZW5ndGgpfSksYn1yZXR1cm4gVFIocyxwKSx1fWZ1bmN0aW9uIHVYdChpLHMpe2lmKGkubm9kZShzKS5kdW1teSlyZXR1cm4gcm1lKGkucHJlZGVjZXNzb3JzKHMpLGZ1bmN0aW9uKHUpe3JldHVybiBpLm5vZGUodSkuZHVtbXl9KX1mdW5jdGlvbiB2VmUoaSxzLHUpe2lmKHM+dSl7dmFyIGQ9cztzPXUsdT1kfXZhciBwPWlbc107cHx8KGlbc109cD17fSkscFt1XT0hMH1mdW5jdGlvbiBsWHQoaSxzLHUpe2lmKHM+dSl7dmFyIGQ9cztzPXUsdT1kfXJldHVybiBMbyhpW3NdLHUpfWZ1bmN0aW9uIGhYdChpLHMsdSxkKXt2YXIgcD17fSx2PXt9LGI9e307cmV0dXJuIEFyKHMsZnVuY3Rpb24oeSl7QXIoeSxmdW5jdGlvbihULF8pe3BbVF09VCx2W1RdPVQsYltUXT1ffSl9KSxBcihzLGZ1bmN0aW9uKHkpe3ZhciBUPS0xO0FyKHksZnVuY3Rpb24oXyl7dmFyIEE9ZChfKTtpZihBLmxlbmd0aCl7QT1DUihBLGZ1bmN0aW9uKEspe3JldHVybiBiW0tdfSk7Zm9yKHZhciBQPShBLmxlbmd0aC0xKS8yLFI9TWF0aC5mbG9vcihQKSxGPU1hdGguY2VpbChQKTtSPD1GOysrUil7dmFyIGo9QVtSXTt2W19dPT09XyYmVDxiW2pdJiYhbFh0KHUsXyxqKSYmKHZbal09Xyx2W19dPXBbX109cFtqXSxUPWJbal0pfX19KX0pLHtyb290OnAsYWxpZ246dn19ZnVuY3Rpb24gZlh0KGkscyx1LGQscCl7dmFyIHY9e30sYj1kWHQoaSxzLHUscCkseT1wPyJib3JkZXJMZWZ0IjoiYm9yZGVyUmlnaHQiO2Z1bmN0aW9uIFQoUCxSKXtmb3IodmFyIEY9Yi5ub2RlcygpLGo9Ri5wb3AoKSxLPXt9O2o7KUtbal0/UChqKTooS1tqXT0hMCxGLnB1c2goaiksRj1GLmNvbmNhdChSKGopKSksaj1GLnBvcCgpfWZ1bmN0aW9uIF8oUCl7dltQXT1iLmluRWRnZXMoUCkucmVkdWNlKGZ1bmN0aW9uKFIsRil7cmV0dXJuIE1hdGgubWF4KFIsdltGLnZdK2IuZWRnZShGKSl9LDApfWZ1bmN0aW9uIEEoUCl7dmFyIFI9Yi5vdXRFZGdlcyhQKS5yZWR1Y2UoZnVuY3Rpb24oaixLKXtyZXR1cm4gTWF0aC5taW4oaix2W0sud10tYi5lZGdlKEspKX0sTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxGPWkubm9kZShQKTtSIT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZJiZGLmJvcmRlclR5cGUhPT15JiYodltQXT1NYXRoLm1heCh2W1BdLFIpKX1yZXR1cm4gVChfLGIucHJlZGVjZXNzb3JzLmJpbmQoYikpLFQoQSxiLnN1Y2Nlc3NvcnMuYmluZChiKSksQXIoZCxmdW5jdGlvbihQKXt2W1BdPXZbdVtQXV19KSx2fWZ1bmN0aW9uIGRYdChpLHMsdSxkKXt2YXIgcD1uZXcgQjAsdj1pLmdyYXBoKCksYj12WHQodi5ub2Rlc2VwLHYuZWRnZXNlcCxkKTtyZXR1cm4gQXIocyxmdW5jdGlvbih5KXt2YXIgVDtBcih5LGZ1bmN0aW9uKF8pe3ZhciBBPXVbX107aWYocC5zZXROb2RlKEEpLFQpe3ZhciBQPXVbVF0sUj1wLmVkZ2UoUCxBKTtwLnNldEVkZ2UoUCxBLE1hdGgubWF4KGIoaSxfLFQpLFJ8fDApKX1UPV99KX0pLHB9ZnVuY3Rpb24gZ1h0KGkscyl7cmV0dXJuIHNtZSgkNyhzKSxmdW5jdGlvbih1KXt2YXIgZD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkscD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7cmV0dXJuIEVXdCh1LGZ1bmN0aW9uKHYsYil7dmFyIHk9d1h0KGksYikvMjtkPU1hdGgubWF4KHYreSxkKSxwPU1hdGgubWluKHYteSxwKX0pLGQtcH0pfWZ1bmN0aW9uIHBYdChpLHMpe3ZhciB1PSQ3KHMpLGQ9a1IodSkscD1VQyh1KTtBcihbInUiLCJkIl0sZnVuY3Rpb24odil7QXIoWyJsIiwiciJdLGZ1bmN0aW9uKGIpe3ZhciB5PXYrYixUPWlbeV0sXztpZihUIT09cyl7dmFyIEE9JDcoVCk7Xz1iPT09ImwiP2Qta1IoQSk6cC1VQyhBKSxfJiYoaVt5XT1HUShULGZ1bmN0aW9uKFApe3JldHVybiBQK199KSl9fSl9KX1mdW5jdGlvbiBiWHQoaSxzKXtyZXR1cm4gR1EoaS51bCxmdW5jdGlvbih1LGQpe2lmKHMpcmV0dXJuIGlbcy50b0xvd2VyQ2FzZSgpXVtkXTt2YXIgcD1DUihQMChpLGQpKTtyZXR1cm4ocFsxXStwWzJdKS8yfSl9ZnVuY3Rpb24gbVh0KGkpe3ZhciBzPVdRKGkpLHU9algob1h0KGkscyksY1h0KGkscykpLGQ9e30scDtBcihbInUiLCJkIl0sZnVuY3Rpb24oYil7cD1iPT09InUiP3M6JDcocykucmV2ZXJzZSgpLEFyKFsibCIsInIiXSxmdW5jdGlvbih5KXt5PT09InIiJiYocD1QMChwLGZ1bmN0aW9uKFApe3JldHVybiAkNyhQKS5yZXZlcnNlKCl9KSk7dmFyIFQ9KGI9PT0idSI/aS5wcmVkZWNlc3NvcnM6aS5zdWNjZXNzb3JzKS5iaW5kKGkpLF89aFh0KGkscCx1LFQpLEE9Zlh0KGkscCxfLnJvb3QsXy5hbGlnbix5PT09InIiKTt5PT09InIiJiYoQT1HUShBLGZ1bmN0aW9uKFApe3JldHVybi1QfSkpLGRbYit5XT1BfSl9KTt2YXIgdj1nWHQoaSxkKTtyZXR1cm4gcFh0KGQsdiksYlh0KGQsaS5ncmFwaCgpLmFsaWduKX1mdW5jdGlvbiB2WHQoaSxzLHUpe3JldHVybiBmdW5jdGlvbihkLHAsdil7dmFyIGI9ZC5ub2RlKHApLHk9ZC5ub2RlKHYpLFQ9MCxfO2lmKFQrPWIud2lkdGgvMixMbyhiLCJsYWJlbHBvcyIpKXN3aXRjaChiLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6Xz0tYi53aWR0aC8yO2JyZWFrO2Nhc2UiciI6Xz1iLndpZHRoLzI7YnJlYWt9aWYoXyYmKFQrPXU/XzotXyksXz0wLFQrPShiLmR1bW15P3M6aSkvMixUKz0oeS5kdW1teT9zOmkpLzIsVCs9eS53aWR0aC8yLExvKHksImxhYmVscG9zIikpc3dpdGNoKHkubGFiZWxwb3MudG9Mb3dlckNhc2UoKSl7Y2FzZSJsIjpfPXkud2lkdGgvMjticmVhaztjYXNlInIiOl89LXkud2lkdGgvMjticmVha31yZXR1cm4gXyYmKFQrPXU/XzotXyksXz0wLFR9fWZ1bmN0aW9uIHdYdChpLHMpe3JldHVybiBpLm5vZGUocykud2lkdGh9ZnVuY3Rpb24geVh0KGkpe2k9WEhlKGkpLHhYdChpKSxUV3QobVh0KGkpLGZ1bmN0aW9uKHMsdSl7aS5ub2RlKHUpLng9c30pfWZ1bmN0aW9uIHhYdChpKXt2YXIgcz1XUShpKSx1PWkuZ3JhcGgoKS5yYW5rc2VwLGQ9MDtBcihzLGZ1bmN0aW9uKHApe3ZhciB2PVVDKFAwKHAsZnVuY3Rpb24oYil7cmV0dXJuIGkubm9kZShiKS5oZWlnaHR9KSk7QXIocCxmdW5jdGlvbihiKXtpLm5vZGUoYikueT1kK3YvMn0pLGQrPXYrdX0pfWZ1bmN0aW9uIHFEKGkscyl7dmFyIHU9cyYmcy5kZWJ1Z1RpbWluZz9iWXQ6bVl0O3UoImxheW91dCIsZnVuY3Rpb24oKXt2YXIgZD11KCIgIGJ1aWxkTGF5b3V0R3JhcGgiLGZ1bmN0aW9uKCl7cmV0dXJuIElYdChpKX0pO3UoIiAgcnVuTGF5b3V0IixmdW5jdGlvbigpe2tYdChkLHUpfSksdSgiICB1cGRhdGVJbnB1dEdyYXBoIixmdW5jdGlvbigpe0VYdChpLGQpfSl9KX1mdW5jdGlvbiBrWHQoaSxzKXtzKCIgICAgbWFrZVNwYWNlRm9yRWRnZUxhYmVscyIsZnVuY3Rpb24oKXtPWHQoaSl9KSxzKCIgICAgcmVtb3ZlU2VsZkVkZ2VzIixmdW5jdGlvbigpe3FYdChpKX0pLHMoIiAgICBhY3ljbGljIixmdW5jdGlvbigpe3VZdChpKX0pLHMoIiAgICBuZXN0aW5nR3JhcGgucnVuIixmdW5jdGlvbigpe1JZdChpKX0pLHMoIiAgICByYW5rIixmdW5jdGlvbigpe1BZdChYSGUoaSkpfSkscygiICAgIGluamVjdEVkZ2VMYWJlbFByb3hpZXMiLGZ1bmN0aW9uKCl7Tlh0KGkpfSkscygiICAgIHJlbW92ZUVtcHR5UmFua3MiLGZ1bmN0aW9uKCl7Z1l0KGkpfSkscygiICAgIG5lc3RpbmdHcmFwaC5jbGVhbnVwIixmdW5jdGlvbigpe3pZdChpKX0pLHMoIiAgICBub3JtYWxpemVSYW5rcyIsZnVuY3Rpb24oKXtkWXQoaSl9KSxzKCIgICAgYXNzaWduUmFua01pbk1heCIsZnVuY3Rpb24oKXtQWHQoaSl9KSxzKCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsZnVuY3Rpb24oKXtCWHQoaSl9KSxzKCIgICAgbm9ybWFsaXplLnJ1biIsZnVuY3Rpb24oKXtFWXQoaSl9KSxzKCIgICAgcGFyZW50RHVtbXlDaGFpbnMiLGZ1bmN0aW9uKCl7aVh0KGkpfSkscygiICAgIGFkZEJvcmRlclNlZ21lbnRzIixmdW5jdGlvbigpe3ZZdChpKX0pLHMoIiAgICBvcmRlciIsZnVuY3Rpb24oKXtuWHQoaSl9KSxzKCIgICAgaW5zZXJ0U2VsZkVkZ2VzIixmdW5jdGlvbigpe0hYdChpKX0pLHMoIiAgICBhZGp1c3RDb29yZGluYXRlU3lzdGVtIixmdW5jdGlvbigpe3dZdChpKX0pLHMoIiAgICBwb3NpdGlvbiIsZnVuY3Rpb24oKXt5WHQoaSl9KSxzKCIgICAgcG9zaXRpb25TZWxmRWRnZXMiLGZ1bmN0aW9uKCl7Vlh0KGkpfSkscygiICAgIHJlbW92ZUJvcmRlck5vZGVzIixmdW5jdGlvbigpe3pYdChpKX0pLHMoIiAgICBub3JtYWxpemUudW5kbyIsZnVuY3Rpb24oKXtDWXQoaSl9KSxzKCIgICAgZml4dXBFZGdlTGFiZWxDb29yZHMiLGZ1bmN0aW9uKCl7alh0KGkpfSkscygiICAgIHVuZG9Db29yZGluYXRlU3lzdGVtIixmdW5jdGlvbigpe3lZdChpKX0pLHMoIiAgICB0cmFuc2xhdGVHcmFwaCIsZnVuY3Rpb24oKXtGWHQoaSl9KSxzKCIgICAgYXNzaWduTm9kZUludGVyc2VjdHMiLGZ1bmN0aW9uKCl7Ulh0KGkpfSkscygiICAgIHJldmVyc2VQb2ludHMiLGZ1bmN0aW9uKCl7JFh0KGkpfSkscygiICAgIGFjeWNsaWMudW5kbyIsZnVuY3Rpb24oKXtoWXQoaSl9KX1mdW5jdGlvbiBFWHQoaSxzKXtBcihpLm5vZGVzKCksZnVuY3Rpb24odSl7dmFyIGQ9aS5ub2RlKHUpLHA9cy5ub2RlKHUpO2QmJihkLng9cC54LGQueT1wLnkscy5jaGlsZHJlbih1KS5sZW5ndGgmJihkLndpZHRoPXAud2lkdGgsZC5oZWlnaHQ9cC5oZWlnaHQpKX0pLEFyKGkuZWRnZXMoKSxmdW5jdGlvbih1KXt2YXIgZD1pLmVkZ2UodSkscD1zLmVkZ2UodSk7ZC5wb2ludHM9cC5wb2ludHMsTG8ocCwieCIpJiYoZC54PXAueCxkLnk9cC55KX0pLGkuZ3JhcGgoKS53aWR0aD1zLmdyYXBoKCkud2lkdGgsaS5ncmFwaCgpLmhlaWdodD1zLmdyYXBoKCkuaGVpZ2h0fXZhciBUWHQ9WyJub2Rlc2VwIiwiZWRnZXNlcCIsInJhbmtzZXAiLCJtYXJnaW54IiwibWFyZ2lueSJdLENYdD17cmFua3NlcDo1MCxlZGdlc2VwOjIwLG5vZGVzZXA6NTAscmFua2RpcjoidGIifSxTWHQ9WyJhY3ljbGljZXIiLCJyYW5rZXIiLCJyYW5rZGlyIiwiYWxpZ24iXSxfWHQ9WyJ3aWR0aCIsImhlaWdodCJdLEFYdD17d2lkdGg6MCxoZWlnaHQ6MH0sTFh0PVsibWlubGVuIiwid2VpZ2h0Iiwid2lkdGgiLCJoZWlnaHQiLCJsYWJlbG9mZnNldCJdLE1YdD17bWlubGVuOjEsd2VpZ2h0OjEsd2lkdGg6MCxoZWlnaHQ6MCxsYWJlbG9mZnNldDoxMCxsYWJlbHBvczoiciJ9LERYdD1bImxhYmVscG9zIl07ZnVuY3Rpb24gSVh0KGkpe3ZhciBzPW5ldyBCMCh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLHU9cG1lKGkuZ3JhcGgoKSk7cmV0dXJuIHMuc2V0R3JhcGgoalgoe30sQ1h0LGdtZSh1LFRYdCksRVIodSxTWHQpKSksQXIoaS5ub2RlcygpLGZ1bmN0aW9uKGQpe3ZhciBwPXBtZShpLm5vZGUoZCkpO3Muc2V0Tm9kZShkLCREKGdtZShwLF9YdCksQVh0KSkscy5zZXRQYXJlbnQoZCxpLnBhcmVudChkKSl9KSxBcihpLmVkZ2VzKCksZnVuY3Rpb24oZCl7dmFyIHA9cG1lKGkuZWRnZShkKSk7cy5zZXRFZGdlKGQsalgoe30sTVh0LGdtZShwLExYdCksRVIocCxEWHQpKSl9KSxzfWZ1bmN0aW9uIE9YdChpKXt2YXIgcz1pLmdyYXBoKCk7cy5yYW5rc2VwLz0yLEFyKGkuZWRnZXMoKSxmdW5jdGlvbih1KXt2YXIgZD1pLmVkZ2UodSk7ZC5taW5sZW4qPTIsZC5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpIT09ImMiJiYocy5yYW5rZGlyPT09IlRCInx8cy5yYW5rZGlyPT09IkJUIj9kLndpZHRoKz1kLmxhYmVsb2Zmc2V0OmQuaGVpZ2h0Kz1kLmxhYmVsb2Zmc2V0KX0pfWZ1bmN0aW9uIE5YdChpKXtBcihpLmVkZ2VzKCksZnVuY3Rpb24ocyl7dmFyIHU9aS5lZGdlKHMpO2lmKHUud2lkdGgmJnUuaGVpZ2h0KXt2YXIgZD1pLm5vZGUocy52KSxwPWkubm9kZShzLncpLHY9e3Jhbms6KHAucmFuay1kLnJhbmspLzIrZC5yYW5rLGU6c307ekQoaSwiZWRnZS1wcm94eSIsdiwiX2VwIil9fSl9ZnVuY3Rpb24gUFh0KGkpe3ZhciBzPTA7QXIoaS5ub2RlcygpLGZ1bmN0aW9uKHUpe3ZhciBkPWkubm9kZSh1KTtkLmJvcmRlclRvcCYmKGQubWluUmFuaz1pLm5vZGUoZC5ib3JkZXJUb3ApLnJhbmssZC5tYXhSYW5rPWkubm9kZShkLmJvcmRlckJvdHRvbSkucmFuayxzPVVDKHMsZC5tYXhSYW5rKSl9KSxpLmdyYXBoKCkubWF4UmFuaz1zfWZ1bmN0aW9uIEJYdChpKXtBcihpLm5vZGVzKCksZnVuY3Rpb24ocyl7dmFyIHU9aS5ub2RlKHMpO3UuZHVtbXk9PT0iZWRnZS1wcm94eSImJihpLmVkZ2UodS5lKS5sYWJlbFJhbms9dS5yYW5rLGkucmVtb3ZlTm9kZShzKSl9KX1mdW5jdGlvbiBGWHQoaSl7dmFyIHM9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHU9MCxkPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxwPTAsdj1pLmdyYXBoKCksYj12Lm1hcmdpbnh8fDAseT12Lm1hcmdpbnl8fDA7ZnVuY3Rpb24gVChfKXt2YXIgQT1fLngsUD1fLnksUj1fLndpZHRoLEY9Xy5oZWlnaHQ7cz1NYXRoLm1pbihzLEEtUi8yKSx1PU1hdGgubWF4KHUsQStSLzIpLGQ9TWF0aC5taW4oZCxQLUYvMikscD1NYXRoLm1heChwLFArRi8yKX1BcihpLm5vZGVzKCksZnVuY3Rpb24oXyl7VChpLm5vZGUoXykpfSksQXIoaS5lZGdlcygpLGZ1bmN0aW9uKF8pe3ZhciBBPWkuZWRnZShfKTtMbyhBLCJ4IikmJlQoQSl9KSxzLT1iLGQtPXksQXIoaS5ub2RlcygpLGZ1bmN0aW9uKF8pe3ZhciBBPWkubm9kZShfKTtBLngtPXMsQS55LT1kfSksQXIoaS5lZGdlcygpLGZ1bmN0aW9uKF8pe3ZhciBBPWkuZWRnZShfKTtBcihBLnBvaW50cyxmdW5jdGlvbihQKXtQLngtPXMsUC55LT1kfSksTG8oQSwieCIpJiYoQS54LT1zKSxMbyhBLCJ5IikmJihBLnktPWQpfSksdi53aWR0aD11LXMrYix2LmhlaWdodD1wLWQreX1mdW5jdGlvbiBSWHQoaSl7QXIoaS5lZGdlcygpLGZ1bmN0aW9uKHMpe3ZhciB1PWkuZWRnZShzKSxkPWkubm9kZShzLnYpLHA9aS5ub2RlKHMudyksdixiO3UucG9pbnRzPyh2PXUucG9pbnRzWzBdLGI9dS5wb2ludHNbdS5wb2ludHMubGVuZ3RoLTFdKToodS5wb2ludHM9W10sdj1wLGI9ZCksdS5wb2ludHMudW5zaGlmdChRSGUoZCx2KSksdS5wb2ludHMucHVzaChRSGUocCxiKSl9KX1mdW5jdGlvbiBqWHQoaSl7QXIoaS5lZGdlcygpLGZ1bmN0aW9uKHMpe3ZhciB1PWkuZWRnZShzKTtpZihMbyh1LCJ4Iikpc3dpdGNoKCh1LmxhYmVscG9zPT09ImwifHx1LmxhYmVscG9zPT09InIiKSYmKHUud2lkdGgtPXUubGFiZWxvZmZzZXQpLHUubGFiZWxwb3Mpe2Nhc2UibCI6dS54LT11LndpZHRoLzIrdS5sYWJlbG9mZnNldDticmVhaztjYXNlInIiOnUueCs9dS53aWR0aC8yK3UubGFiZWxvZmZzZXQ7YnJlYWt9fSl9ZnVuY3Rpb24gJFh0KGkpe0FyKGkuZWRnZXMoKSxmdW5jdGlvbihzKXt2YXIgdT1pLmVkZ2Uocyk7dS5yZXZlcnNlZCYmdS5wb2ludHMucmV2ZXJzZSgpfSl9ZnVuY3Rpb24gelh0KGkpe0FyKGkubm9kZXMoKSxmdW5jdGlvbihzKXtpZihpLmNoaWxkcmVuKHMpLmxlbmd0aCl7dmFyIHU9aS5ub2RlKHMpLGQ9aS5ub2RlKHUuYm9yZGVyVG9wKSxwPWkubm9kZSh1LmJvcmRlckJvdHRvbSksdj1pLm5vZGUoVVEodS5ib3JkZXJMZWZ0KSksYj1pLm5vZGUoVVEodS5ib3JkZXJSaWdodCkpO3Uud2lkdGg9TWF0aC5hYnMoYi54LXYueCksdS5oZWlnaHQ9TWF0aC5hYnMocC55LWQueSksdS54PXYueCt1LndpZHRoLzIsdS55PWQueSt1LmhlaWdodC8yfX0pLEFyKGkubm9kZXMoKSxmdW5jdGlvbihzKXtpLm5vZGUocykuZHVtbXk9PT0iYm9yZGVyIiYmaS5yZW1vdmVOb2RlKHMpfSl9ZnVuY3Rpb24gcVh0KGkpe0FyKGkuZWRnZXMoKSxmdW5jdGlvbihzKXtpZihzLnY9PT1zLncpe3ZhciB1PWkubm9kZShzLnYpO3Uuc2VsZkVkZ2VzfHwodS5zZWxmRWRnZXM9W10pLHUuc2VsZkVkZ2VzLnB1c2goe2U6cyxsYWJlbDppLmVkZ2Uocyl9KSxpLnJlbW92ZUVkZ2Uocyl9fSl9ZnVuY3Rpb24gSFh0KGkpe3ZhciBzPVdRKGkpO0FyKHMsZnVuY3Rpb24odSl7dmFyIGQ9MDtBcih1LGZ1bmN0aW9uKHAsdil7dmFyIGI9aS5ub2RlKHApO2Iub3JkZXI9ditkLEFyKGIuc2VsZkVkZ2VzLGZ1bmN0aW9uKHkpe3pEKGksInNlbGZlZGdlIix7d2lkdGg6eS5sYWJlbC53aWR0aCxoZWlnaHQ6eS5sYWJlbC5oZWlnaHQscmFuazpiLnJhbmssb3JkZXI6disgKytkLGU6eS5lLGxhYmVsOnkubGFiZWx9LCJfc2UiKX0pLGRlbGV0ZSBiLnNlbGZFZGdlc30pfSl9ZnVuY3Rpb24gVlh0KGkpe0FyKGkubm9kZXMoKSxmdW5jdGlvbihzKXt2YXIgdT1pLm5vZGUocyk7aWYodS5kdW1teT09PSJzZWxmZWRnZSIpe3ZhciBkPWkubm9kZSh1LmUudikscD1kLngrZC53aWR0aC8yLHY9ZC55LGI9dS54LXAseT1kLmhlaWdodC8yO2kuc2V0RWRnZSh1LmUsdS5sYWJlbCksaS5yZW1vdmVOb2RlKHMpLHUubGFiZWwucG9pbnRzPVt7eDpwKzIqYi8zLHk6di15fSx7eDpwKzUqYi82LHk6di15fSx7eDpwK2IseTp2fSx7eDpwKzUqYi82LHk6dit5fSx7eDpwKzIqYi8zLHk6dit5fV0sdS5sYWJlbC54PXUueCx1LmxhYmVsLnk9dS55fX0pfWZ1bmN0aW9uIGdtZShpLHMpe3JldHVybiBHUShFUihpLHMpLE51bWJlcil9ZnVuY3Rpb24gcG1lKGkpe3ZhciBzPXt9O3JldHVybiBBcihpLGZ1bmN0aW9uKHUsZCl7c1tkLnRvTG93ZXJDYXNlKCldPXV9KSxzfWZ1bmN0aW9uIHdWZShpLHMpe3JldHVybiEhaS5jaGlsZHJlbihzKS5sZW5ndGh9ZnVuY3Rpb24geVZlKGkpe3JldHVybiBibWUoaS52KSsiOiIrYm1lKGkudykrIjoiK2JtZShpLm5hbWUpfXZhciBVWHQ9LzovZztmdW5jdGlvbiBibWUoaSl7cmV0dXJuIGk/U3RyaW5nKGkpLnJlcGxhY2UoVVh0LCJcXDoiKToiIn1mdW5jdGlvbiBaNChpLHMpe3MmJmkuYXR0cigic3R5bGUiLHMpfWZ1bmN0aW9uIHhWZShpLHMsdSl7cyYmaS5hdHRyKCJjbGFzcyIscykuYXR0cigiY2xhc3MiLHUrIiAiK2kuYXR0cigiY2xhc3MiKSl9ZnVuY3Rpb24gcTMoaSxzKXt2YXIgdT1zLmdyYXBoKCk7aWYocmplKHUpKXt2YXIgZD11LnRyYW5zaXRpb247aWYoZ0QoZCkpcmV0dXJuIGQoaSl9cmV0dXJuIGl9dmFyIG1tZT17bm9ybWFsOktYdCx2ZWU6V1h0LHVuZGlyZWN0ZWQ6WVh0fTtmdW5jdGlvbiBHWHQoaSl7bW1lPWl9ZnVuY3Rpb24gS1h0KGkscyx1LGQpe3ZhciBwPWkuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscykuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIiksdj1wLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpO1o0KHYsdVtkKyJTdHlsZSJdKSx1W2QrIkNsYXNzIl0mJnYuYXR0cigiY2xhc3MiLHVbZCsiQ2xhc3MiXSl9ZnVuY3Rpb24gV1h0KGkscyx1LGQpe3ZhciBwPWkuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscykuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIiksdj1wLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIEwgNCA1IHoiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpO1o0KHYsdVtkKyJTdHlsZSJdKSx1W2QrIkNsYXNzIl0mJnYuYXR0cigiY2xhc3MiLHVbZCsiQ2xhc3MiXSl9ZnVuY3Rpb24gWVh0KGkscyx1LGQpe3ZhciBwPWkuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscykuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIiksdj1wLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgNSBMIDEwIDUiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpO1o0KHYsdVtkKyJTdHlsZSJdKSx1W2QrIkNsYXNzIl0mJnYuYXR0cigiY2xhc3MiLHVbZCsiQ2xhc3MiXSl9ZnVuY3Rpb24gdm1lKGkscyl7dmFyIHU9aS5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ3aWR0aCIsIjEwMDAwMCIpLGQ9dS5hcHBlbmQoInhodG1sOmRpdiIpO2QuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIik7dmFyIHA9cy5sYWJlbDtzd2l0Y2godHlwZW9mIHApe2Nhc2UiZnVuY3Rpb24iOmQuaW5zZXJ0KHApO2JyZWFrO2Nhc2Uib2JqZWN0IjpkLmluc2VydChmdW5jdGlvbigpe3JldHVybiBwfSk7YnJlYWs7ZGVmYXVsdDpkLmh0bWwocCl9WjQoZCxzLmxhYmVsU3R5bGUpLGQuc3R5bGUoImRpc3BsYXkiLCJpbmxpbmUtYmxvY2siKSxkLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsIm5vd3JhcCIpO3ZhciB2PWQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiB1LmF0dHIoIndpZHRoIix2LndpZHRoKS5hdHRyKCJoZWlnaHQiLHYuaGVpZ2h0KSx1fWZ1bmN0aW9uIFhYdChpLHMpe3ZhciB1PWk7cmV0dXJuIHUubm9kZSgpLmFwcGVuZENoaWxkKHMubGFiZWwpLFo0KHUscy5sYWJlbFN0eWxlKSx1fWZ1bmN0aW9uIFFYdChpLHMpe2Zvcih2YXIgdT1pLmFwcGVuZCgidGV4dCIpLGQ9Slh0KHMubGFiZWwpLnNwbGl0KGAKYCkscD0wO3A8ZC5sZW5ndGg7cCsrKXUuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoInhtbDpzcGFjZSIsInByZXNlcnZlIikuYXR0cigiZHkiLCIxZW0iKS5hdHRyKCJ4IiwiMSIpLnRleHQoZFtwXSk7cmV0dXJuIFo0KHUscy5sYWJlbFN0eWxlKSx1fWZ1bmN0aW9uIEpYdChpKXtmb3IodmFyIHM9IiIsdT0hMSxkLHA9MDtwPGkubGVuZ3RoOysrcClpZihkPWlbcF0sdSl7c3dpdGNoKGQpe2Nhc2UibiI6cys9YApgO2JyZWFrO2RlZmF1bHQ6cys9ZH11PSExfWVsc2UgZD09PSJcXCI/dT0hMDpzKz1kO3JldHVybiBzfWZ1bmN0aW9uIHdtZShpLHMsdSl7dmFyIGQ9cy5sYWJlbCxwPWkuYXBwZW5kKCJnIik7cy5sYWJlbFR5cGU9PT0ic3ZnIj9YWHQocCxzKTp0eXBlb2YgZCE9InN0cmluZyJ8fHMubGFiZWxUeXBlPT09Imh0bWwiP3ZtZShwLHMpOlFYdChwLHMpO3ZhciB2PXAubm9kZSgpLmdldEJCb3goKSxiO3N3aXRjaCh1KXtjYXNlInRvcCI6Yj0tcy5oZWlnaHQvMjticmVhaztjYXNlImJvdHRvbSI6Yj1zLmhlaWdodC8yLXYuaGVpZ2h0O2JyZWFrO2RlZmF1bHQ6Yj0tdi5oZWlnaHQvMn1yZXR1cm4gcC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistdi53aWR0aC8yKyIsIitiKyIpIikscH12YXIgeW1lPWZ1bmN0aW9uKGkscyl7dmFyIHU9cy5ub2RlcygpLmZpbHRlcihmdW5jdGlvbih2KXtyZXR1cm4gd1ZlKHMsdil9KSxkPWkuc2VsZWN0QWxsKCJnLmNsdXN0ZXIiKS5kYXRhKHUsZnVuY3Rpb24odil7cmV0dXJuIHZ9KTtxMyhkLmV4aXQoKSxzKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCk7dmFyIHA9ZC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlciIpLmF0dHIoImlkIixmdW5jdGlvbih2KXt2YXIgYj1zLm5vZGUodik7cmV0dXJuIGIuaWR9KS5zdHlsZSgib3BhY2l0eSIsMCkuZWFjaChmdW5jdGlvbih2KXt2YXIgYj1zLm5vZGUodikseT1Jcih0aGlzKTtJcih0aGlzKS5hcHBlbmQoInJlY3QiKTt2YXIgVD15LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKTt3bWUoVCxiLGIuY2x1c3RlckxhYmVsUG9zKX0pO3JldHVybiBkPWQubWVyZ2UocCksZD1xMyhkLHMpLnN0eWxlKCJvcGFjaXR5IiwxKSxkLnNlbGVjdEFsbCgicmVjdCIpLmVhY2goZnVuY3Rpb24odil7dmFyIGI9cy5ub2RlKHYpLHk9SXIodGhpcyk7WjQoeSxiLnN0eWxlKX0pLGR9O2Z1bmN0aW9uIFpYdChpKXt5bWU9aX1sZXQgeG1lPWZ1bmN0aW9uKGkscyl7dmFyIHU9aS5zZWxlY3RBbGwoImcuZWRnZUxhYmVsIikuZGF0YShzLmVkZ2VzKCksZnVuY3Rpb24ocCl7cmV0dXJuIHlWZShwKX0pLmNsYXNzZWQoInVwZGF0ZSIsITApO3UuZXhpdCgpLnJlbW92ZSgpLHUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJlZGdlTGFiZWwiLCEwKS5zdHlsZSgib3BhY2l0eSIsMCksdT1pLnNlbGVjdEFsbCgiZy5lZGdlTGFiZWwiKSx1LmVhY2goZnVuY3Rpb24ocCl7dmFyIHY9SXIodGhpcyk7di5zZWxlY3QoIi5sYWJlbCIpLnJlbW92ZSgpO3ZhciBiPXMuZWRnZShwKSx5PXdtZSh2LHMuZWRnZShwKSwwKS5jbGFzc2VkKCJsYWJlbCIsITApLFQ9eS5ub2RlKCkuZ2V0QkJveCgpO2IubGFiZWxJZCYmeS5hdHRyKCJpZCIsYi5sYWJlbElkKSxMbyhiLCJ3aWR0aCIpfHwoYi53aWR0aD1ULndpZHRoKSxMbyhiLCJoZWlnaHQiKXx8KGIuaGVpZ2h0PVQuaGVpZ2h0KX0pO3ZhciBkO3JldHVybiB1LmV4aXQ/ZD11LmV4aXQoKTpkPXUuc2VsZWN0QWxsKG51bGwpLHEzKGQscykuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLHV9O2Z1bmN0aW9uIGVRdChpKXt4bWU9aX1mdW5jdGlvbiBrVmUoaSxzKXtyZXR1cm4gaS5pbnRlcnNlY3Qocyl9dmFyIGttZT1mdW5jdGlvbihpLHMsdSl7dmFyIGQ9aS5zZWxlY3RBbGwoImcuZWRnZVBhdGgiKS5kYXRhKHMuZWRnZXMoKSxmdW5jdGlvbihiKXtyZXR1cm4geVZlKGIpfSkuY2xhc3NlZCgidXBkYXRlIiwhMCkscD1zUXQoZCxzKTthUXQoZCxzKTt2YXIgdj1kLm1lcmdlIT09dm9pZCAwP2QubWVyZ2UocCk6ZDtyZXR1cm4gcTModixzKS5zdHlsZSgib3BhY2l0eSIsMSksdi5lYWNoKGZ1bmN0aW9uKGIpe3ZhciB5PUlyKHRoaXMpLFQ9cy5lZGdlKGIpO1QuZWxlbT10aGlzLFQuaWQmJnkuYXR0cigiaWQiLFQuaWQpLHhWZSh5LFQuY2xhc3MsKHkuY2xhc3NlZCgidXBkYXRlIik/InVwZGF0ZSAiOiIiKSsiZWRnZVBhdGgiKX0pLHYuc2VsZWN0QWxsKCJwYXRoLnBhdGgiKS5lYWNoKGZ1bmN0aW9uKGIpe3ZhciB5PXMuZWRnZShiKTt5LmFycm93aGVhZElkPUtRKCJhcnJvd2hlYWQiKTt2YXIgVD1Jcih0aGlzKS5hdHRyKCJtYXJrZXItZW5kIixmdW5jdGlvbigpe3JldHVybiJ1cmwoIituUXQobG9jYXRpb24uaHJlZix5LmFycm93aGVhZElkKSsiKSJ9KS5zdHlsZSgiZmlsbCIsIm5vbmUiKTtxMyhULHMpLmF0dHIoImQiLGZ1bmN0aW9uKF8pe3JldHVybiByUXQocyxfKX0pLFo0KFQseS5zdHlsZSl9KSx2LnNlbGVjdEFsbCgiZGVmcyAqIikucmVtb3ZlKCksdi5zZWxlY3RBbGwoImRlZnMiKS5lYWNoKGZ1bmN0aW9uKGIpe3ZhciB5PXMuZWRnZShiKSxUPXVbeS5hcnJvd2hlYWRdO1QoSXIodGhpcykseS5hcnJvd2hlYWRJZCx5LCJhcnJvd2hlYWQiKX0pLHZ9O2Z1bmN0aW9uIHRRdChpKXtrbWU9aX1mdW5jdGlvbiBuUXQoaSxzKXt2YXIgdT1pLnNwbGl0KCIjIilbMF07cmV0dXJuIHUrIiMiK3N9ZnVuY3Rpb24gclF0KGkscyl7dmFyIHU9aS5lZGdlKHMpLGQ9aS5ub2RlKHMudikscD1pLm5vZGUocy53KSx2PXUucG9pbnRzLnNsaWNlKDEsdS5wb2ludHMubGVuZ3RoLTEpO3JldHVybiB2LnVuc2hpZnQoa1ZlKGQsdlswXSkpLHYucHVzaChrVmUocCx2W3YubGVuZ3RoLTFdKSksRVZlKHUsdil9ZnVuY3Rpb24gRVZlKGkscyl7dmFyIHU9KGs3fHxQSXQubGluZSkoKS54KGZ1bmN0aW9uKGQpe3JldHVybiBkLnh9KS55KGZ1bmN0aW9uKGQpe3JldHVybiBkLnl9KTtyZXR1cm4odS5jdXJ2ZXx8dS5pbnRlcnBvbGF0ZSkoaS5jdXJ2ZSksdShzKX1mdW5jdGlvbiBpUXQoaSl7dmFyIHM9aS5nZXRCQm94KCksdT1pLm93bmVyU1ZHRWxlbWVudC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkubXVsdGlwbHkoaS5nZXRTY3JlZW5DVE0oKSkudHJhbnNsYXRlKHMud2lkdGgvMixzLmhlaWdodC8yKTtyZXR1cm57eDp1LmUseTp1LmZ9fWZ1bmN0aW9uIHNRdChpLHMpe3ZhciB1PWkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VQYXRoIikuc3R5bGUoIm9wYWNpdHkiLDApO3JldHVybiB1LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwicGF0aCIpLmF0dHIoImQiLGZ1bmN0aW9uKGQpe3ZhciBwPXMuZWRnZShkKSx2PXMubm9kZShkLnYpLmVsZW0sYj1HQyhwLnBvaW50cy5sZW5ndGgpLm1hcChmdW5jdGlvbigpe3JldHVybiBpUXQodil9KTtyZXR1cm4gRVZlKHAsYil9KSx1LmFwcGVuZCgiZGVmcyIpLHV9ZnVuY3Rpb24gYVF0KGkscyl7dmFyIHU9aS5leGl0KCk7cTModSxzKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCl9dmFyIEVtZT1mdW5jdGlvbihpLHMsdSl7dmFyIGQ9cy5ub2RlcygpLmZpbHRlcihmdW5jdGlvbihiKXtyZXR1cm4hd1ZlKHMsYil9KSxwPWkuc2VsZWN0QWxsKCJnLm5vZGUiKS5kYXRhKGQsZnVuY3Rpb24oYil7cmV0dXJuIGJ9KS5jbGFzc2VkKCJ1cGRhdGUiLCEwKTtwLmV4aXQoKS5yZW1vdmUoKSxwLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJub2RlIikuc3R5bGUoIm9wYWNpdHkiLDApLHA9aS5zZWxlY3RBbGwoImcubm9kZSIpLHAuZWFjaChmdW5jdGlvbihiKXt2YXIgeT1zLm5vZGUoYiksVD1Jcih0aGlzKTt4VmUoVCx5LmNsYXNzLChULmNsYXNzZWQoInVwZGF0ZSIpPyJ1cGRhdGUgIjoiIikrIm5vZGUiKSxULnNlbGVjdCgiZy5sYWJlbCIpLnJlbW92ZSgpO3ZhciBfPVQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLEE9d21lKF8seSksUD11W3kuc2hhcGVdLFI9RVIoQS5ub2RlKCkuZ2V0QkJveCgpLCJ3aWR0aCIsImhlaWdodCIpO3kuZWxlbT10aGlzLHkuaWQmJlQuYXR0cigiaWQiLHkuaWQpLHkubGFiZWxJZCYmXy5hdHRyKCJpZCIseS5sYWJlbElkKSxMbyh5LCJ3aWR0aCIpJiYoUi53aWR0aD15LndpZHRoKSxMbyh5LCJoZWlnaHQiKSYmKFIuaGVpZ2h0PXkuaGVpZ2h0KSxSLndpZHRoKz15LnBhZGRpbmdMZWZ0K3kucGFkZGluZ1JpZ2h0LFIuaGVpZ2h0Kz15LnBhZGRpbmdUb3AreS5wYWRkaW5nQm90dG9tLF8uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHkucGFkZGluZ0xlZnQteS5wYWRkaW5nUmlnaHQpLzIrIiwiKyh5LnBhZGRpbmdUb3AteS5wYWRkaW5nQm90dG9tKS8yKyIpIik7dmFyIEY9SXIodGhpcyk7Ri5zZWxlY3QoIi5sYWJlbC1jb250YWluZXIiKS5yZW1vdmUoKTt2YXIgaj1QKEYsUix5KS5jbGFzc2VkKCJsYWJlbC1jb250YWluZXIiLCEwKTtaNChqLHkuc3R5bGUpO3ZhciBLPWoubm9kZSgpLmdldEJCb3goKTt5LndpZHRoPUsud2lkdGgseS5oZWlnaHQ9Sy5oZWlnaHR9KTt2YXIgdjtyZXR1cm4gcC5leGl0P3Y9cC5leGl0KCk6dj1wLnNlbGVjdEFsbChudWxsKSxxMyh2LHMpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxwfTtmdW5jdGlvbiBvUXQoaSl7RW1lPWl9ZnVuY3Rpb24gY1F0KGkscyl7dmFyIHU9aS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4hSXIodGhpcykuY2xhc3NlZCgidXBkYXRlIil9KTtmdW5jdGlvbiBkKHApe3ZhciB2PXMubm9kZShwKTtyZXR1cm4idHJhbnNsYXRlKCIrdi54KyIsIit2LnkrIikifXUuYXR0cigidHJhbnNmb3JtIixkKSxxMyhpLHMpLnN0eWxlKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGQpLHEzKHUuc2VsZWN0QWxsKCJyZWN0IikscykuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHApe3JldHVybiBzLm5vZGUocCkud2lkdGh9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHApe3JldHVybiBzLm5vZGUocCkuaGVpZ2h0fSkuYXR0cigieCIsZnVuY3Rpb24ocCl7dmFyIHY9cy5ub2RlKHApO3JldHVybi12LndpZHRoLzJ9KS5hdHRyKCJ5IixmdW5jdGlvbihwKXt2YXIgdj1zLm5vZGUocCk7cmV0dXJuLXYuaGVpZ2h0LzJ9KX1mdW5jdGlvbiB1UXQoaSxzKXt2YXIgdT1pLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiFJcih0aGlzKS5jbGFzc2VkKCJ1cGRhdGUiKX0pO2Z1bmN0aW9uIGQocCl7dmFyIHY9cy5lZGdlKHApO3JldHVybiBMbyh2LCJ4Iik/InRyYW5zbGF0ZSgiK3YueCsiLCIrdi55KyIpIjoiIn11LmF0dHIoInRyYW5zZm9ybSIsZCkscTMoaSxzKS5zdHlsZSgib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixkKX1mdW5jdGlvbiBsUXQoaSxzKXt2YXIgdT1pLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiFJcih0aGlzKS5jbGFzc2VkKCJ1cGRhdGUiKX0pO2Z1bmN0aW9uIGQocCl7dmFyIHY9cy5ub2RlKHApO3JldHVybiJ0cmFuc2xhdGUoIit2LngrIiwiK3YueSsiKSJ9dS5hdHRyKCJ0cmFuc2Zvcm0iLGQpLHEzKGkscykuc3R5bGUoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsZCl9ZnVuY3Rpb24gVFZlKGkscyx1LGQpe3ZhciBwPWkueCx2PWkueSxiPXAtZC54LHk9di1kLnksVD1NYXRoLnNxcnQocypzKnkqeSt1KnUqYipiKSxfPU1hdGguYWJzKHMqdSpiL1QpO2QueDxwJiYoXz0tXyk7dmFyIEE9TWF0aC5hYnMocyp1KnkvVCk7cmV0dXJuIGQueTx2JiYoQT0tQSkse3g6cCtfLHk6ditBfX1mdW5jdGlvbiBoUXQoaSxzLHUpe3JldHVybiBUVmUoaSxzLHMsdSl9ZnVuY3Rpb24gZlF0KGkscyx1LGQpe3ZhciBwLHYsYix5LFQsXyxBLFAsUixGLGosSyxlZSxpZSxvZTtpZihwPXMueS1pLnksYj1pLngtcy54LFQ9cy54KmkueS1pLngqcy55LFI9cCp1LngrYip1LnkrVCxGPXAqZC54K2IqZC55K1QsIShSIT09MCYmRiE9PTAmJkNWZShSLEYpKSYmKHY9ZC55LXUueSx5PXUueC1kLngsXz1kLngqdS55LXUueCpkLnksQT12KmkueCt5KmkueStfLFA9dipzLngreSpzLnkrXywhKEEhPT0wJiZQIT09MCYmQ1ZlKEEsUCkpJiYoaj1wKnktdipiLGohPT0wKSkpcmV0dXJuIEs9TWF0aC5hYnMoai8yKSxlZT1iKl8teSpULGllPWVlPDA/KGVlLUspL2o6KGVlK0spL2osZWU9dipULXAqXyxvZT1lZTwwPyhlZS1LKS9qOihlZStLKS9qLHt4OmllLHk6b2V9fWZ1bmN0aW9uIENWZShpLHMpe3JldHVybiBpKnM+MH1mdW5jdGlvbiBlNShpLHMsdSl7dmFyIGQ9aS54LHA9aS55LHY9W10sYj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkseT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7cy5mb3JFYWNoKGZ1bmN0aW9uKGope2I9TWF0aC5taW4oYixqLngpLHk9TWF0aC5taW4oeSxqLnkpfSk7Zm9yKHZhciBUPWQtaS53aWR0aC8yLWIsXz1wLWkuaGVpZ2h0LzIteSxBPTA7QTxzLmxlbmd0aDtBKyspe3ZhciBQPXNbQV0sUj1zW0E8cy5sZW5ndGgtMT9BKzE6MF0sRj1mUXQoaSx1LHt4OlQrUC54LHk6XytQLnl9LHt4OlQrUi54LHk6XytSLnl9KTtGJiZ2LnB1c2goRil9cmV0dXJuIHYubGVuZ3RoPyh2Lmxlbmd0aD4xJiZ2LnNvcnQoZnVuY3Rpb24oaixLKXt2YXIgZWU9ai54LXUueCxpZT1qLnktdS55LG9lPU1hdGguc3FydChlZSplZStpZSppZSkscGU9Sy54LXUueCxiZT1LLnktdS55LGFlPU1hdGguc3FydChwZSpwZStiZSpiZSk7cmV0dXJuIG9lPGFlPy0xOm9lPT09YWU/MDoxfSksdlswXSk6KGNvbnNvbGUubG9nKCJOTyBJTlRFUlNFQ1RJT04gRk9VTkQsIFJFVFVSTiBOT0RFIENFTlRFUiIsaSksaSl9ZnVuY3Rpb24gVG1lKGkscyl7dmFyIHU9aS54LGQ9aS55LHA9cy54LXUsdj1zLnktZCxiPWkud2lkdGgvMix5PWkuaGVpZ2h0LzIsVCxfO3JldHVybiBNYXRoLmFicyh2KSpiPk1hdGguYWJzKHApKnk/KHY8MCYmKHk9LXkpLFQ9dj09PTA/MDp5KnAvdixfPXkpOihwPDAmJihiPS1iKSxUPWIsXz1wPT09MD8wOmIqdi9wKSx7eDp1K1QseTpkK199fXZhciBDbWU9e3JlY3Q6Z1F0LGVsbGlwc2U6cFF0LGNpcmNsZTpiUXQsZGlhbW9uZDptUXR9O2Z1bmN0aW9uIGRRdChpKXtDbWU9aX1mdW5jdGlvbiBnUXQoaSxzLHUpe3ZhciBkPWkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigicngiLHUucngpLmF0dHIoInJ5Iix1LnJ5KS5hdHRyKCJ4Iiwtcy53aWR0aC8yKS5hdHRyKCJ5Iiwtcy5oZWlnaHQvMikuYXR0cigid2lkdGgiLHMud2lkdGgpLmF0dHIoImhlaWdodCIscy5oZWlnaHQpO3JldHVybiB1LmludGVyc2VjdD1mdW5jdGlvbihwKXtyZXR1cm4gVG1lKHUscCl9LGR9ZnVuY3Rpb24gcFF0KGkscyx1KXt2YXIgZD1zLndpZHRoLzIscD1zLmhlaWdodC8yLHY9aS5pbnNlcnQoImVsbGlwc2UiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4Iiwtcy53aWR0aC8yKS5hdHRyKCJ5Iiwtcy5oZWlnaHQvMikuYXR0cigicngiLGQpLmF0dHIoInJ5IixwKTtyZXR1cm4gdS5pbnRlcnNlY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIFRWZSh1LGQscCxiKX0sdn1mdW5jdGlvbiBiUXQoaSxzLHUpe3ZhciBkPU1hdGgubWF4KHMud2lkdGgscy5oZWlnaHQpLzIscD1pLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsLXMud2lkdGgvMikuYXR0cigieSIsLXMuaGVpZ2h0LzIpLmF0dHIoInIiLGQpO3JldHVybiB1LmludGVyc2VjdD1mdW5jdGlvbih2KXtyZXR1cm4gaFF0KHUsZCx2KX0scH1mdW5jdGlvbiBtUXQoaSxzLHUpe3ZhciBkPXMud2lkdGgqTWF0aC5TUVJUMi8yLHA9cy5oZWlnaHQqTWF0aC5TUVJUMi8yLHY9W3t4OjAseTotcH0se3g6LWQseTowfSx7eDowLHk6cH0se3g6ZCx5OjB9XSxiPWkuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIix2Lm1hcChmdW5jdGlvbih5KXtyZXR1cm4geS54KyIsIit5Lnl9KS5qb2luKCIgIikpO3JldHVybiB1LmludGVyc2VjdD1mdW5jdGlvbih5KXtyZXR1cm4gZTUodSx2LHkpfSxifWZ1bmN0aW9uIHZRdCgpe3ZhciBpPWZ1bmN0aW9uKHMsdSl7eFF0KHUpO3ZhciBkPUFSKHMsIm91dHB1dCIpLHA9QVIoZCwiY2x1c3RlcnMiKSx2PUFSKGQsImVkZ2VQYXRocyIpLGI9eG1lKEFSKGQsImVkZ2VMYWJlbHMiKSx1KSx5PUVtZShBUihkLCJub2RlcyIpLHUsQ21lKTtxRCh1KSxsUXQoeSx1KSx1UXQoYix1KSxrbWUodix1LG1tZSk7dmFyIFQ9eW1lKHAsdSk7Y1F0KFQsdSksa1F0KHUpfTtyZXR1cm4gaS5jcmVhdGVOb2Rlcz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ob1F0KHMpLGkpOkVtZX0saS5jcmVhdGVDbHVzdGVycz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oWlh0KHMpLGkpOnltZX0saS5jcmVhdGVFZGdlTGFiZWxzPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlUXQocyksaSk6eG1lfSxpLmNyZWF0ZUVkZ2VQYXRocz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odFF0KHMpLGkpOmttZX0saS5zaGFwZXM9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGRRdChzKSxpKTpDbWV9LGkuYXJyb3dzPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhHWHQocyksaSk6bW1lfSxpfXZhciB3UXQ9e3BhZGRpbmdMZWZ0OjEwLHBhZGRpbmdSaWdodDoxMCxwYWRkaW5nVG9wOjEwLHBhZGRpbmdCb3R0b206MTAscng6MCxyeTowLHNoYXBlOiJyZWN0In0seVF0PXthcnJvd2hlYWQ6Im5vcm1hbCIsY3VydmU6a3B9O2Z1bmN0aW9uIHhRdChpKXtpLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgdT1pLm5vZGUocyk7IUxvKHUsImxhYmVsIikmJiFpLmNoaWxkcmVuKHMpLmxlbmd0aCYmKHUubGFiZWw9cyksTG8odSwicGFkZGluZ1giKSYmJEQodSx7cGFkZGluZ0xlZnQ6dS5wYWRkaW5nWCxwYWRkaW5nUmlnaHQ6dS5wYWRkaW5nWH0pLExvKHUsInBhZGRpbmdZIikmJiREKHUse3BhZGRpbmdUb3A6dS5wYWRkaW5nWSxwYWRkaW5nQm90dG9tOnUucGFkZGluZ1l9KSxMbyh1LCJwYWRkaW5nIikmJiREKHUse3BhZGRpbmdMZWZ0OnUucGFkZGluZyxwYWRkaW5nUmlnaHQ6dS5wYWRkaW5nLHBhZGRpbmdUb3A6dS5wYWRkaW5nLHBhZGRpbmdCb3R0b206dS5wYWRkaW5nfSksJEQodSx3UXQpLEFyKFsicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSJdLGZ1bmN0aW9uKGQpe3VbZF09TnVtYmVyKHVbZF0pfSksTG8odSwid2lkdGgiKSYmKHUuX3ByZXZXaWR0aD11LndpZHRoKSxMbyh1LCJoZWlnaHQiKSYmKHUuX3ByZXZIZWlnaHQ9dS5oZWlnaHQpfSksaS5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIHU9aS5lZGdlKHMpO0xvKHUsImxhYmVsIil8fCh1LmxhYmVsPSIiKSwkRCh1LHlRdCl9KX1mdW5jdGlvbiBrUXQoaSl7QXIoaS5ub2RlcygpLGZ1bmN0aW9uKHMpe3ZhciB1PWkubm9kZShzKTtMbyh1LCJfcHJldldpZHRoIik/dS53aWR0aD11Ll9wcmV2V2lkdGg6ZGVsZXRlIHUud2lkdGgsTG8odSwiX3ByZXZIZWlnaHQiKT91LmhlaWdodD11Ll9wcmV2SGVpZ2h0OmRlbGV0ZSB1LmhlaWdodCxkZWxldGUgdS5fcHJldldpZHRoLGRlbGV0ZSB1Ll9wcmV2SGVpZ2h0fSl9ZnVuY3Rpb24gQVIoaSxzKXt2YXIgdT1pLnNlbGVjdCgiZy4iK3MpO3JldHVybiB1LmVtcHR5KCkmJih1PWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLHMpKSx1fWZ1bmN0aW9uIFNWZShpLHMsdSl7Y29uc3QgZD1zLndpZHRoLHA9cy5oZWlnaHQsdj0oZCtwKSouOSxiPVt7eDp2LzIseTowfSx7eDp2LHk6LXYvMn0se3g6di8yLHk6LXZ9LHt4OjAseTotdi8yfV0seT16NyhpLHYsdixiKTtyZXR1cm4gdS5pbnRlcnNlY3Q9ZnVuY3Rpb24oVCl7cmV0dXJuIGU1KHUsYixUKX0seX1mdW5jdGlvbiBfVmUoaSxzLHUpe2NvbnN0IHA9cy5oZWlnaHQsdj1wLzQsYj1zLndpZHRoKzIqdix5PVt7eDp2LHk6MH0se3g6Yi12LHk6MH0se3g6Yix5Oi1wLzJ9LHt4OmItdix5Oi1wfSx7eDp2LHk6LXB9LHt4OjAseTotcC8yfV0sVD16NyhpLGIscCx5KTtyZXR1cm4gdS5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIGU1KHUseSxfKX0sVH1mdW5jdGlvbiBBVmUoaSxzLHUpe2NvbnN0IGQ9cy53aWR0aCxwPXMuaGVpZ2h0LHY9W3t4Oi1wLzIseTowfSx7eDpkLHk6MH0se3g6ZCx5Oi1wfSx7eDotcC8yLHk6LXB9LHt4OjAseTotcC8yfV0sYj16NyhpLGQscCx2KTtyZXR1cm4gdS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIGU1KHUsdix5KX0sYn1mdW5jdGlvbiBMVmUoaSxzLHUpe2NvbnN0IGQ9cy53aWR0aCxwPXMuaGVpZ2h0LHY9W3t4Oi0yKnAvNix5OjB9LHt4OmQtcC82LHk6MH0se3g6ZCsyKnAvNix5Oi1wfSx7eDpwLzYseTotcH1dLGI9ejcoaSxkLHAsdik7cmV0dXJuIHUuaW50ZXJzZWN0PWZ1bmN0aW9uKHkpe3JldHVybiBlNSh1LHYseSl9LGJ9ZnVuY3Rpb24gTVZlKGkscyx1KXtjb25zdCBkPXMud2lkdGgscD1zLmhlaWdodCx2PVt7eDoyKnAvNix5OjB9LHt4OmQrcC82LHk6MH0se3g6ZC0yKnAvNix5Oi1wfSx7eDotcC82LHk6LXB9XSxiPXo3KGksZCxwLHYpO3JldHVybiB1LmludGVyc2VjdD1mdW5jdGlvbih5KXtyZXR1cm4gZTUodSx2LHkpfSxifWZ1bmN0aW9uIERWZShpLHMsdSl7Y29uc3QgZD1zLndpZHRoLHA9cy5oZWlnaHQsdj1be3g6LTIqcC82LHk6MH0se3g6ZCsyKnAvNix5OjB9LHt4OmQtcC82LHk6LXB9LHt4OnAvNix5Oi1wfV0sYj16NyhpLGQscCx2KTtyZXR1cm4gdS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIGU1KHUsdix5KX0sYn1mdW5jdGlvbiBJVmUoaSxzLHUpe2NvbnN0IGQ9cy53aWR0aCxwPXMuaGVpZ2h0LHY9W3t4OnAvNix5OjB9LHt4OmQtcC82LHk6MH0se3g6ZCsyKnAvNix5Oi1wfSx7eDotMipwLzYseTotcH1dLGI9ejcoaSxkLHAsdik7cmV0dXJuIHUuaW50ZXJzZWN0PWZ1bmN0aW9uKHkpe3JldHVybiBlNSh1LHYseSl9LGJ9ZnVuY3Rpb24gT1ZlKGkscyx1KXtjb25zdCBkPXMud2lkdGgscD1zLmhlaWdodCx2PVt7eDowLHk6MH0se3g6ZCtwLzIseTowfSx7eDpkLHk6LXAvMn0se3g6ZCtwLzIseTotcH0se3g6MCx5Oi1wfV0sYj16NyhpLGQscCx2KTtyZXR1cm4gdS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIGU1KHUsdix5KX0sYn1mdW5jdGlvbiBOVmUoaSxzLHUpe2NvbnN0IGQ9cy5oZWlnaHQscD1zLndpZHRoK2QvNCx2PWkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigicngiLGQvMikuYXR0cigicnkiLGQvMikuYXR0cigieCIsLXAvMikuYXR0cigieSIsLWQvMikuYXR0cigid2lkdGgiLHApLmF0dHIoImhlaWdodCIsZCk7cmV0dXJuIHUuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiBUbWUodSxiKX0sdn1mdW5jdGlvbiBQVmUoaSxzLHUpe2NvbnN0IGQ9cy53aWR0aCxwPXMuaGVpZ2h0LHY9W3t4OjAseTowfSx7eDpkLHk6MH0se3g6ZCx5Oi1wfSx7eDowLHk6LXB9LHt4OjAseTowfSx7eDotOCx5OjB9LHt4OmQrOCx5OjB9LHt4OmQrOCx5Oi1wfSx7eDotOCx5Oi1wfSx7eDotOCx5OjB9XSxiPXo3KGksZCxwLHYpO3JldHVybiB1LmludGVyc2VjdD1mdW5jdGlvbih5KXtyZXR1cm4gZTUodSx2LHkpfSxifWZ1bmN0aW9uIEJWZShpLHMsdSl7Y29uc3QgZD1zLndpZHRoLHA9ZC8yLHY9cC8oMi41K2QvNTApLGI9cy5oZWlnaHQrdix5PSJNIDAsIit2KyIgYSAiK3ArIiwiK3YrIiAwLDAsMCAiK2QrIiAwIGEgIitwKyIsIit2KyIgMCwwLDAgIistZCsiIDAgbCAwLCIrYisiIGEgIitwKyIsIit2KyIgMCwwLDAgIitkKyIgMCBsIDAsIistYixUPWkuYXR0cigibGFiZWwtb2Zmc2V0LXkiLHYpLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImQiLHkpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1kLzIrIiwiKy0oYi8yK3YpKyIpIik7cmV0dXJuIHUuaW50ZXJzZWN0PWZ1bmN0aW9uKF8pe2NvbnN0IEE9VG1lKHUsXyksUD1BLngtdS54O2lmKHAhPTAmJihNYXRoLmFicyhQKTx1LndpZHRoLzJ8fE1hdGguYWJzKFApPT11LndpZHRoLzImJk1hdGguYWJzKEEueS11LnkpPnUuaGVpZ2h0LzItdikpe2xldCBSPXYqdiooMS1QKlAvKHAqcCkpO1IhPTAmJihSPU1hdGguc3FydChSKSksUj12LVIsXy55LXUueT4wJiYoUj0tUiksQS55Kz1SfXJldHVybiBBfSxUfWZ1bmN0aW9uIEVRdChpKXtpLnNoYXBlcygpLnF1ZXN0aW9uPVNWZSxpLnNoYXBlcygpLmhleGFnb249X1ZlLGkuc2hhcGVzKCkuc3RhZGl1bT1OVmUsaS5zaGFwZXMoKS5zdWJyb3V0aW5lPVBWZSxpLnNoYXBlcygpLmN5bGluZGVyPUJWZSxpLnNoYXBlcygpLnJlY3RfbGVmdF9pbnZfYXJyb3c9QVZlLGkuc2hhcGVzKCkubGVhbl9yaWdodD1MVmUsaS5zaGFwZXMoKS5sZWFuX2xlZnQ9TVZlLGkuc2hhcGVzKCkudHJhcGV6b2lkPURWZSxpLnNoYXBlcygpLmludl90cmFwZXpvaWQ9SVZlLGkuc2hhcGVzKCkucmVjdF9yaWdodF9pbnZfYXJyb3c9T1ZlfWZ1bmN0aW9uIFRRdChpKXtpKHtxdWVzdGlvbjpTVmV9KSxpKHtoZXhhZ29uOl9WZX0pLGkoe3N0YWRpdW06TlZlfSksaSh7c3Vicm91dGluZTpQVmV9KSxpKHtjeWxpbmRlcjpCVmV9KSxpKHtyZWN0X2xlZnRfaW52X2Fycm93OkFWZX0pLGkoe2xlYW5fcmlnaHQ6TFZlfSksaSh7bGVhbl9sZWZ0Ok1WZX0pLGkoe3RyYXBlem9pZDpEVmV9KSxpKHtpbnZfdHJhcGV6b2lkOklWZX0pLGkoe3JlY3RfcmlnaHRfaW52X2Fycm93Ok9WZX0pfWZ1bmN0aW9uIHo3KGkscyx1LGQpe3JldHVybiBpLmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsZC5tYXAoZnVuY3Rpb24ocCl7cmV0dXJuIHAueCsiLCIrcC55fSkuam9pbigiICIpKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistcy8yKyIsIit1LzIrIikiKX1jb25zdCBDUXQ9e2FkZFRvUmVuZGVyOkVRdCxhZGRUb1JlbmRlclYyOlRRdH0sRlZlPXt9LFNRdD1mdW5jdGlvbihpKXtjb25zdCBzPU9iamVjdC5rZXlzKGkpO2Zvcihjb25zdCB1IG9mIHMpRlZlW3VdPWlbdV19LFJWZT1hc3luYyBmdW5jdGlvbihpLHMsdSxkLHAsdil7Y29uc3QgYj1kP2Quc2VsZWN0KGBbaWQ9IiR7dX0iXWApOklyKGBbaWQ9IiR7dX0iXWApLHk9cHx8ZG9jdW1lbnQsVD1PYmplY3Qua2V5cyhpKTtmb3IoY29uc3QgXyBvZiBUKXtjb25zdCBBPWlbX107bGV0IFA9ImRlZmF1bHQiO0EuY2xhc3Nlcy5sZW5ndGg+MCYmKFA9QS5jbGFzc2VzLmpvaW4oIiAiKSk7Y29uc3QgUj1vbShBLnN0eWxlcyk7bGV0IEY9QS50ZXh0IT09dm9pZCAwP0EudGV4dDpBLmlkLGo7aWYoZjEocXQoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IGllPXtsYWJlbDphd2FpdCBDQyhGLnJlcGxhY2UoL2ZhW2JscnNdPzpmYS1bXHctXSsvZyxvZT0+YDxpIGNsYXNzPScke29lLnJlcGxhY2UoIjoiLCIgIil9Jz48L2k+YCkscXQoKSl9O2o9dm1lKGIsaWUpLm5vZGUoKSxqLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoail9ZWxzZXtjb25zdCBpZT15LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7aWUuc2V0QXR0cmlidXRlKCJzdHlsZSIsUi5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2NvbnN0IG9lPUYuc3BsaXQoY2kubGluZUJyZWFrUmVnZXgpO2Zvcihjb25zdCBwZSBvZiBvZSl7Y29uc3QgYmU9eS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTtiZS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxiZS5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIiksYmUuc2V0QXR0cmlidXRlKCJ4IiwiMSIpLGJlLnRleHRDb250ZW50PXBlLGllLmFwcGVuZENoaWxkKGJlKX1qPWllfWxldCBLPTAsZWU9IiI7c3dpdGNoKEEudHlwZSl7Y2FzZSJyb3VuZCI6Sz01LGVlPSJyZWN0IjticmVhaztjYXNlInNxdWFyZSI6ZWU9InJlY3QiO2JyZWFrO2Nhc2UiZGlhbW9uZCI6ZWU9InF1ZXN0aW9uIjticmVhaztjYXNlImhleGFnb24iOmVlPSJoZXhhZ29uIjticmVhaztjYXNlIm9kZCI6ZWU9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UibGVhbl9yaWdodCI6ZWU9ImxlYW5fcmlnaHQiO2JyZWFrO2Nhc2UibGVhbl9sZWZ0IjplZT0ibGVhbl9sZWZ0IjticmVhaztjYXNlInRyYXBlem9pZCI6ZWU9InRyYXBlem9pZCI7YnJlYWs7Y2FzZSJpbnZfdHJhcGV6b2lkIjplZT0iaW52X3RyYXBlem9pZCI7YnJlYWs7Y2FzZSJvZGRfcmlnaHQiOmVlPSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImNpcmNsZSI6ZWU9ImNpcmNsZSI7YnJlYWs7Y2FzZSJlbGxpcHNlIjplZT0iZWxsaXBzZSI7YnJlYWs7Y2FzZSJzdGFkaXVtIjplZT0ic3RhZGl1bSI7YnJlYWs7Y2FzZSJzdWJyb3V0aW5lIjplZT0ic3Vicm91dGluZSI7YnJlYWs7Y2FzZSJjeWxpbmRlciI6ZWU9ImN5bGluZGVyIjticmVhaztjYXNlImdyb3VwIjplZT0icmVjdCI7YnJlYWs7ZGVmYXVsdDplZT0icmVjdCJ9WGUud2FybigiQWRkaW5nIG5vZGUiLEEuaWQsQS5kb21JZCkscy5zZXROb2RlKHYuZGIubG9va1VwRG9tSWQoQS5pZCkse2xhYmVsVHlwZToic3ZnIixsYWJlbFN0eWxlOlIubGFiZWxTdHlsZSxzaGFwZTplZSxsYWJlbDpqLHJ4Oksscnk6SyxjbGFzczpQLHN0eWxlOlIuc3R5bGUsaWQ6di5kYi5sb29rVXBEb21JZChBLmlkKX0pfX0salZlPWFzeW5jIGZ1bmN0aW9uKGkscyx1KXtsZXQgZD0wLHAsdjtpZihpLmRlZmF1bHRTdHlsZSE9PXZvaWQgMCl7Y29uc3QgYj1vbShpLmRlZmF1bHRTdHlsZSk7cD1iLnN0eWxlLHY9Yi5sYWJlbFN0eWxlfWZvcihjb25zdCBiIG9mIGkpe2QrKztjb25zdCB5PSJMLSIrYi5zdGFydCsiLSIrYi5lbmQsVD0iTFMtIitiLnN0YXJ0LF89IkxFLSIrYi5lbmQsQT17fTtiLnR5cGU9PT0iYXJyb3dfb3BlbiI/QS5hcnJvd2hlYWQ9Im5vbmUiOkEuYXJyb3doZWFkPSJub3JtYWwiO2xldCBQPSIiLFI9IiI7aWYoYi5zdHlsZSE9PXZvaWQgMCl7Y29uc3QgRj1vbShiLnN0eWxlKTtQPUYuc3R5bGUsUj1GLmxhYmVsU3R5bGV9ZWxzZSBzd2l0Y2goYi5zdHJva2Upe2Nhc2Uibm9ybWFsIjpQPSJmaWxsOm5vbmUiLHAhPT12b2lkIDAmJihQPXApLHYhPT12b2lkIDAmJihSPXYpO2JyZWFrO2Nhc2UiZG90dGVkIjpQPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtZGFzaGFycmF5OjM7IjticmVhaztjYXNlInRoaWNrIjpQPSIgc3Ryb2tlLXdpZHRoOiAzLjVweDtmaWxsOm5vbmUiO2JyZWFrfUEuc3R5bGU9UCxBLmxhYmVsU3R5bGU9UixiLmludGVycG9sYXRlIT09dm9pZCAwP0EuY3VydmU9T3YoYi5pbnRlcnBvbGF0ZSxrcCk6aS5kZWZhdWx0SW50ZXJwb2xhdGUhPT12b2lkIDA/QS5jdXJ2ZT1PdihpLmRlZmF1bHRJbnRlcnBvbGF0ZSxrcCk6QS5jdXJ2ZT1PdihGVmUuY3VydmUsa3ApLGIudGV4dD09PXZvaWQgMD9iLnN0eWxlIT09dm9pZCAwJiYoQS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihBLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixBLmxhYmVscG9zPSJjIixmMShxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKT8oQS5sYWJlbFR5cGU9Imh0bWwiLEEubGFiZWw9YDxzcGFuIGlkPSJMLSR7eX0iIGNsYXNzPSJlZGdlTGFiZWwgTC0ke1R9JyBMLSR7X30iIHN0eWxlPSIke0EubGFiZWxTdHlsZX0iPiR7YXdhaXQgQ0MoYi50ZXh0LnJlcGxhY2UoL2ZhW2JscnNdPzpmYS1bXHctXSsvZyxGPT5gPGkgY2xhc3M9JyR7Ri5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmApLHF0KCkpfTwvc3Bhbj5gKTooQS5sYWJlbFR5cGU9InRleHQiLEEubGFiZWw9Yi50ZXh0LnJlcGxhY2UoY2kubGluZUJyZWFrUmVnZXgsYApgKSxiLnN0eWxlPT09dm9pZCAwJiYoQS5zdHlsZT1BLnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZSIpLEEubGFiZWxTdHlsZT1BLmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSkpLEEuaWQ9eSxBLmNsYXNzPVQrIiAiK18sQS5taW5sZW49Yi5sZW5ndGh8fDEscy5zZXRFZGdlKHUuZGIubG9va1VwRG9tSWQoYi5zdGFydCksdS5kYi5sb29rVXBEb21JZChiLmVuZCksQSxkKX19LF9RdD17c2V0Q29uZjpTUXQsYWRkVmVydGljZXM6UlZlLGFkZEVkZ2VzOmpWZSxnZXRDbGFzc2VzOmZ1bmN0aW9uKGkscyl7cmV0dXJuIFhlLmluZm8oIkV4dHJhY3RpbmcgY2xhc3NlcyIpLHMuZGIuZ2V0Q2xhc3NlcygpfSxkcmF3OmFzeW5jIGZ1bmN0aW9uKGkscyx1LGQpe1hlLmluZm8oIkRyYXdpbmcgZmxvd2NoYXJ0Iik7Y29uc3R7c2VjdXJpdHlMZXZlbDpwLGZsb3djaGFydDp2fT1xdCgpO2xldCBiO3A9PT0ic2FuZGJveCImJihiPUlyKCIjaSIrcykpO2NvbnN0IHk9SXIocD09PSJzYW5kYm94Ij9iLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHk6ImJvZHkiKSxUPXA9PT0ic2FuZGJveCI/Yi5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudDpkb2N1bWVudDtsZXQgXz1kLmRiLmdldERpcmVjdGlvbigpO189PT12b2lkIDAmJihfPSJURCIpO2NvbnN0IEE9di5ub2RlU3BhY2luZ3x8NTAsUD12LnJhbmtTcGFjaW5nfHw1MCxSPW5ldyBCMCh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOl8sbm9kZXNlcDpBLHJhbmtzZXA6UCxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7bGV0IEY7Y29uc3Qgaj1kLmRiLmdldFN1YkdyYXBocygpO2ZvcihsZXQgbmU9ai5sZW5ndGgtMTtuZT49MDtuZS0tKUY9altuZV0sZC5kYi5hZGRWZXJ0ZXgoRi5pZCxGLnRpdGxlLCJncm91cCIsdm9pZCAwLEYuY2xhc3Nlcyk7Y29uc3QgSz1kLmRiLmdldFZlcnRpY2VzKCk7WGUud2FybigiR2V0IHZlcnRpY2VzIixLKTtjb25zdCBlZT1kLmRiLmdldEVkZ2VzKCk7bGV0IGllPTA7Zm9yKGllPWoubGVuZ3RoLTE7aWU+PTA7aWUtLSl7Rj1qW2llXSxfQmUoImNsdXN0ZXIiKS5hcHBlbmQoInRleHQiKTtmb3IobGV0IG5lPTA7bmU8Ri5ub2Rlcy5sZW5ndGg7bmUrKylYZS53YXJuKCJTZXR0aW5nIHN1YmdyYXBoIixGLm5vZGVzW25lXSxkLmRiLmxvb2tVcERvbUlkKEYubm9kZXNbbmVdKSxkLmRiLmxvb2tVcERvbUlkKEYuaWQpKSxSLnNldFBhcmVudChkLmRiLmxvb2tVcERvbUlkKEYubm9kZXNbbmVdKSxkLmRiLmxvb2tVcERvbUlkKEYuaWQpKX1hd2FpdCBSVmUoSyxSLHMseSxULGQpLGF3YWl0IGpWZShlZSxSLGQpO2NvbnN0IG9lPW5ldyB2UXQ7Q1F0LmFkZFRvUmVuZGVyKG9lKSxvZS5hcnJvd3MoKS5ub25lPWZ1bmN0aW9uKHNlLGRlLFgsZ2Upe2NvbnN0IHhlPXNlLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGRlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAwIDAgTCAwIDAgeiIpO1o0KHhlLFhbZ2UrIlN0eWxlIl0pfSxvZS5hcnJvd3MoKS5ub3JtYWw9ZnVuY3Rpb24oc2UsZGUpe3NlLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGRlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6IikuYXR0cigiY2xhc3MiLCJhcnJvd2hlYWRQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX07Y29uc3QgcGU9eS5zZWxlY3QoYFtpZD0iJHtzfSJdYCksYmU9eS5zZWxlY3QoIiMiK3MrIiBnIik7Zm9yKG9lKGJlLFIpLGJlLnNlbGVjdEFsbCgiZy5ub2RlIikuYXR0cigidGl0bGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZGIuZ2V0VG9vbHRpcCh0aGlzLmlkKX0pLGQuZGIuaW5kZXhOb2Rlcygic3ViR3JhcGgiK2llKSxpZT0wO2llPGoubGVuZ3RoO2llKyspaWYoRj1qW2llXSxGLnRpdGxlIT09InVuZGVmaW5lZCIpe2NvbnN0IG5lPVQucXVlcnlTZWxlY3RvckFsbCgiIyIrcysnIFtpZD0iJytkLmRiLmxvb2tVcERvbUlkKEYuaWQpKyciXSByZWN0Jyksc2U9VC5xdWVyeVNlbGVjdG9yQWxsKCIjIitzKycgW2lkPSInK2QuZGIubG9va1VwRG9tSWQoRi5pZCkrJyJdJyksZGU9bmVbMF0ueC5iYXNlVmFsLnZhbHVlLFg9bmVbMF0ueS5iYXNlVmFsLnZhbHVlLGdlPW5lWzBdLndpZHRoLmJhc2VWYWwudmFsdWUseGU9SXIoc2VbMF0pLnNlbGVjdCgiLmxhYmVsIik7eGUuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7ZGUrZ2UvMn0sICR7WCsxNH0pYCkseGUuYXR0cigiaWQiLHMrIlRleHQiKTtmb3IobGV0IFU9MDtVPEYuY2xhc3Nlcy5sZW5ndGg7VSsrKXNlWzBdLmNsYXNzTGlzdC5hZGQoRi5jbGFzc2VzW1VdKX1pZighdi5odG1sTGFiZWxzKXtjb25zdCBuZT1ULnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJytzKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpO2Zvcihjb25zdCBzZSBvZiBuZSl7Y29uc3QgZGU9c2UuZ2V0QkJveCgpLFg9VC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVjdCIpO1guc2V0QXR0cmlidXRlKCJyeCIsMCksWC5zZXRBdHRyaWJ1dGUoInJ5IiwwKSxYLnNldEF0dHJpYnV0ZSgid2lkdGgiLGRlLndpZHRoKSxYLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixkZS5oZWlnaHQpLHNlLmluc2VydEJlZm9yZShYLHNlLmZpcnN0Q2hpbGQpfX15OShSLHBlLHYuZGlhZ3JhbVBhZGRpbmcsdi51c2VNYXhXaWR0aCksT2JqZWN0LmtleXMoSykuZm9yRWFjaChmdW5jdGlvbihuZSl7Y29uc3Qgc2U9S1tuZV07aWYoc2UubGluayl7Y29uc3QgZGU9eS5zZWxlY3QoIiMiK3MrJyBbaWQ9IicrZC5kYi5sb29rVXBEb21JZChuZSkrJyJdJyk7aWYoZGUpe2NvbnN0IFg9VC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO1guc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2xhc3MiLHNlLmNsYXNzZXMuam9pbigiICIpKSxYLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImhyZWYiLHNlLmxpbmspLFguc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVsIiwibm9vcGVuZXIiKSxwPT09InNhbmRib3giP1guc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGFyZ2V0IiwiX3RvcCIpOnNlLmxpbmtUYXJnZXQmJlguc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGFyZ2V0IixzZS5saW5rVGFyZ2V0KTtjb25zdCBnZT1kZS5pbnNlcnQoZnVuY3Rpb24oKXtyZXR1cm4gWH0sIjpmaXJzdC1jaGlsZCIpLFc9ZGUuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIik7VyYmZ2UuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIFcubm9kZSgpfSk7Y29uc3QgeGU9ZGUuc2VsZWN0KCIubGFiZWwiKTt4ZSYmZ2UuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIHhlLm5vZGUoKX0pfX19KX19O2Z1bmN0aW9uIHE3KGkpe3ZhciBzPXtvcHRpb25zOntkaXJlY3RlZDppLmlzRGlyZWN0ZWQoKSxtdWx0aWdyYXBoOmkuaXNNdWx0aWdyYXBoKCksY29tcG91bmQ6aS5pc0NvbXBvdW5kKCl9LG5vZGVzOkFRdChpKSxlZGdlczpMUXQoaSl9O3JldHVybiBRZihpLmdyYXBoKCkpfHwocy52YWx1ZT1ESGUoaS5ncmFwaCgpKSksc31mdW5jdGlvbiBBUXQoaSl7cmV0dXJuIFAwKGkubm9kZXMoKSxmdW5jdGlvbihzKXt2YXIgdT1pLm5vZGUocyksZD1pLnBhcmVudChzKSxwPXt2OnN9O3JldHVybiBRZih1KXx8KHAudmFsdWU9dSksUWYoZCl8fChwLnBhcmVudD1kKSxwfSl9ZnVuY3Rpb24gTFF0KGkpe3JldHVybiBQMChpLmVkZ2VzKCksZnVuY3Rpb24ocyl7dmFyIHU9aS5lZGdlKHMpLGQ9e3Y6cy52LHc6cy53fTtyZXR1cm4gUWYocy5uYW1lKXx8KGQubmFtZT1zLm5hbWUpLFFmKHUpfHwoZC52YWx1ZT11KSxkfSl9Y29uc3QgTVF0PShpLHMsdSxkKT0+e3MuZm9yRWFjaChwPT57RFF0W3BdKGksdSxkKX0pfSxEUXQ9e2V4dGVuc2lvbjooaSxzLHUpPT57WGUudHJhY2UoIk1ha2luZyBtYXJrZXJzIGZvciAiLHUpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWV4dGVuc2lvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZXh0ZW5zaW9uICIrcykuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSw3IEwxOCwxMyBWIDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWV4dGVuc2lvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGV4dGVuc2lvbiAiK3MpLmF0dHIoInJlZlgiLDEpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBWIDEzIEwxOCw3IFoiKX0sY29tcG9zaXRpb246KGkscyx1KT0+e2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWNvbXBvc2l0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjb21wb3NpdGlvbiAiK3MpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHUrIl8iK3MrIi1jb21wb3NpdGlvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrcykuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpfSxhZ2dyZWdhdGlvbjooaSxzLHUpPT57aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix1KyJfIitzKyItYWdncmVnYXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGFnZ3JlZ2F0aW9uICIrcykuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWFnZ3JlZ2F0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIitzKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LGRlcGVuZGVuY3k6KGkscyx1KT0+e2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWRlcGVuZGVuY3lTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGRlcGVuZGVuY3kgIitzKS5hdHRyKCJyZWZYIiw2KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWRlcGVuZGVuY3lFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBkZXBlbmRlbmN5ICIrcykuYXR0cigicmVmWCIsMTMpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LGxvbGxpcG9wOihpLHMsdSk9PntpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHUrIl8iK3MrIi1sb2xsaXBvcFN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgbG9sbGlwb3AgIitzKS5hdHRyKCJyZWZYIiwxMykuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigiZmlsbCIsInRyYW5zcGFyZW50IikuYXR0cigiY3giLDcpLmF0dHIoImN5Iiw3KS5hdHRyKCJyIiw2KSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHUrIl8iK3MrIi1sb2xsaXBvcEVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGxvbGxpcG9wICIrcykuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigiZmlsbCIsInRyYW5zcGFyZW50IikuYXR0cigiY3giLDcpLmF0dHIoImN5Iiw3KS5hdHRyKCJyIiw2KX0scG9pbnQ6KGkscyx1KT0+e2kuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLXBvaW50RW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitzKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsNikuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksaS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix1KyJfIitzKyItcG9pbnRTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrcykuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDQuNSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgNSBMIDEwIDEwIEwgMTAgMCB6IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSxjaXJjbGU6KGkscyx1KT0+e2kuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWNpcmNsZUVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrcykuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDExKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsIjUiKS5hdHRyKCJjeSIsIjUiKS5hdHRyKCJyIiwiNSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSxpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHUrIl8iK3MrIi1jaXJjbGVTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrcykuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLC0xKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsIjUiKS5hdHRyKCJjeSIsIjUiKS5hdHRyKCJyIiwiNSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sY3Jvc3M6KGkscyx1KT0+e2kuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWNyb3NzRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY3Jvc3MgIitzKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDExIDExIikuYXR0cigicmVmWCIsMTIpLmF0dHIoInJlZlkiLDUuMikuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBsIDksOSBNIDEwLDEgbCAtOSw5IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwyKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLGkuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWNyb3NzU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK3MpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwtMSkuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LGJhcmI6KGkscyx1KT0+e2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWJhcmJFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE0KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE5LDcgTDksMTMgTDE0LDcgTDksMSBaIil9fSxTbWU9TVF0O2Z1bmN0aW9uIElRdChpLHMpe3MmJmkuYXR0cigic3R5bGUiLHMpfWZ1bmN0aW9uIE9RdChpKXtjb25zdCBzPUlyKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJmb3JlaWduT2JqZWN0IikpLHU9cy5hcHBlbmQoInhodG1sOmRpdiIpLGQ9aS5sYWJlbCxwPWkuaXNOb2RlPyJub2RlTGFiZWwiOiJlZGdlTGFiZWwiO3JldHVybiB1Lmh0bWwoJzxzcGFuIGNsYXNzPSInK3ArJyIgJysoaS5sYWJlbFN0eWxlPydzdHlsZT0iJytpLmxhYmVsU3R5bGUrJyInOiIiKSsiPiIrZCsiPC9zcGFuPiIpLElRdCh1LGkubGFiZWxTdHlsZSksdS5zdHlsZSgiZGlzcGxheSIsImlubGluZS1ibG9jayIpLHUuc3R5bGUoIndoaXRlLXNwYWNlIiwibm93cmFwIiksdS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKSxzLm5vZGUoKX1jb25zdCAkMj0oaSxzLHUsZCk9PntsZXQgcD1pfHwiIjtpZih0eXBlb2YgcD09Im9iamVjdCImJihwPXBbMF0pLGYxKHF0KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtwPXAucmVwbGFjZSgvXFxufFxuL2csIjxiciAvPiIpLFhlLmRlYnVnKCJ2ZXJ0ZXhUZXh0IitwKTtjb25zdCB2PXtpc05vZGU6ZCxsYWJlbDpaRihwKS5yZXBsYWNlKC9mYVtibHJzXT86ZmEtW1x3LV0rL2cseT0+YDxpIGNsYXNzPScke3kucmVwbGFjZSgiOiIsIiAiKX0nPjwvaT5gKSxsYWJlbFN0eWxlOnMucmVwbGFjZSgiZmlsbDoiLCJjb2xvcjoiKX07cmV0dXJuIE9RdCh2KX1lbHNle2NvbnN0IHY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTt2LnNldEF0dHJpYnV0ZSgic3R5bGUiLHMucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSk7bGV0IGI9W107dHlwZW9mIHA9PSJzdHJpbmciP2I9cC5zcGxpdCgvXFxufFxufDxiclxzKlwvPz4vZ2kpOkFycmF5LmlzQXJyYXkocCk/Yj1wOmI9W107Zm9yKGNvbnN0IHkgb2YgYil7Y29uc3QgVD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTtULnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLFQuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLFQuc2V0QXR0cmlidXRlKCJ4IiwiMCIpLHU/VC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwidGl0bGUtcm93Iik6VC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwicm93IiksVC50ZXh0Q29udGVudD15LnRyaW0oKSx2LmFwcGVuZENoaWxkKFQpfXJldHVybiB2fX0sTlF0PXt9O2Z1bmN0aW9uIFBRdChpLHMpe2NvbnN0IHU9c3x8TlF0LGQ9dHlwZW9mIHUuaW5jbHVkZUltYWdlQWx0PT0iYm9vbGVhbiI/dS5pbmNsdWRlSW1hZ2VBbHQ6ITAscD10eXBlb2YgdS5pbmNsdWRlSHRtbD09ImJvb2xlYW4iP3UuaW5jbHVkZUh0bWw6ITA7cmV0dXJuICRWZShpLGQscCl9ZnVuY3Rpb24gJFZlKGkscyx1KXtpZihCUXQoaSkpe2lmKCJ2YWx1ZSJpbiBpKXJldHVybiBpLnR5cGU9PT0iaHRtbCImJiF1PyIiOmkudmFsdWU7aWYocyYmImFsdCJpbiBpJiZpLmFsdClyZXR1cm4gaS5hbHQ7aWYoImNoaWxkcmVuImluIGkpcmV0dXJuIHpWZShpLmNoaWxkcmVuLHMsdSl9cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/elZlKGkscyx1KToiIn1mdW5jdGlvbiB6VmUoaSxzLHUpe2NvbnN0IGQ9W107bGV0IHA9LTE7Zm9yKDsrK3A8aS5sZW5ndGg7KWRbcF09JFZlKGlbcF0scyx1KTtyZXR1cm4gZC5qb2luKCIiKX1mdW5jdGlvbiBCUXQoaSl7cmV0dXJuISEoaSYmdHlwZW9mIGk9PSJvYmplY3QiKX1mdW5jdGlvbiB0NShpLHMsdSxkKXtjb25zdCBwPWkubGVuZ3RoO2xldCB2PTAsYjtpZihzPDA/cz0tcz5wPzA6cCtzOnM9cz5wP3A6cyx1PXU+MD91OjAsZC5sZW5ndGg8MWU0KWI9QXJyYXkuZnJvbShkKSxiLnVuc2hpZnQocyx1KSxpLnNwbGljZSguLi5iKTtlbHNlIGZvcih1JiZpLnNwbGljZShzLHUpO3Y8ZC5sZW5ndGg7KWI9ZC5zbGljZSh2LHYrMWU0KSxiLnVuc2hpZnQocywwKSxpLnNwbGljZSguLi5iKSx2Kz0xZTQscys9MWU0fWZ1bmN0aW9uIHp2KGkscyl7cmV0dXJuIGkubGVuZ3RoPjA/KHQ1KGksaS5sZW5ndGgsMCxzKSxpKTpzfWNvbnN0IHFWZT17fS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBGUXQoaSl7Y29uc3Qgcz17fTtsZXQgdT0tMTtmb3IoOysrdTxpLmxlbmd0aDspUlF0KHMsaVt1XSk7cmV0dXJuIHN9ZnVuY3Rpb24gUlF0KGkscyl7bGV0IHU7Zm9yKHUgaW4gcyl7Y29uc3QgcD0ocVZlLmNhbGwoaSx1KT9pW3VdOnZvaWQgMCl8fChpW3VdPXt9KSx2PXNbdV07bGV0IGI7aWYodilmb3IoYiBpbiB2KXtxVmUuY2FsbChwLGIpfHwocFtiXT1bXSk7Y29uc3QgeT12W2JdO2pRdChwW2JdLEFycmF5LmlzQXJyYXkoeSk/eTp5P1t5XTpbXSl9fX1mdW5jdGlvbiBqUXQoaSxzKXtsZXQgdT0tMTtjb25zdCBkPVtdO2Zvcig7Kyt1PHMubGVuZ3RoOykoc1t1XS5hZGQ9PT0iYWZ0ZXIiP2k6ZCkucHVzaChzW3VdKTt0NShpLDAsMCxkKX1jb25zdCAkUXQ9L1shLVwvOi1AXFstYFx7LX5ceEExXHhBN1x4QUJceEI2XHhCN1x4QkJceEJGXHUwMzdFXHUwMzg3XHUwNTVBLVx1MDU1Rlx1MDU4OVx1MDU4QVx1MDVCRVx1MDVDMFx1MDVDM1x1MDVDNlx1MDVGM1x1MDVGNFx1MDYwOVx1MDYwQVx1MDYwQ1x1MDYwRFx1MDYxQlx1MDYxRC1cdTA2MUZcdTA2NkEtXHUwNjZEXHUwNkQ0XHUwNzAwLVx1MDcwRFx1MDdGNy1cdTA3RjlcdTA4MzAtXHUwODNFXHUwODVFXHUwOTY0XHUwOTY1XHUwOTcwXHUwOUZEXHUwQTc2XHUwQUYwXHUwQzc3XHUwQzg0XHUwREY0XHUwRTRGXHUwRTVBXHUwRTVCXHUwRjA0LVx1MEYxMlx1MEYxNFx1MEYzQS1cdTBGM0RcdTBGODVcdTBGRDAtXHUwRkQ0XHUwRkQ5XHUwRkRBXHUxMDRBLVx1MTA0Rlx1MTBGQlx1MTM2MC1cdTEzNjhcdTE0MDBcdTE2NkVcdTE2OUJcdTE2OUNcdTE2RUItXHUxNkVEXHUxNzM1XHUxNzM2XHUxN0Q0LVx1MTdENlx1MTdEOC1cdTE3REFcdTE4MDAtXHUxODBBXHUxOTQ0XHUxOTQ1XHUxQTFFXHUxQTFGXHUxQUEwLVx1MUFBNlx1MUFBOC1cdTFBQURcdTFCNUEtXHUxQjYwXHUxQjdEXHUxQjdFXHUxQkZDLVx1MUJGRlx1MUMzQi1cdTFDM0ZcdTFDN0VcdTFDN0ZcdTFDQzAtXHUxQ0M3XHUxQ0QzXHUyMDEwLVx1MjAyN1x1MjAzMC1cdTIwNDNcdTIwNDUtXHUyMDUxXHUyMDUzLVx1MjA1RVx1MjA3RFx1MjA3RVx1MjA4RFx1MjA4RVx1MjMwOC1cdTIzMEJcdTIzMjlcdTIzMkFcdTI3NjgtXHUyNzc1XHUyN0M1XHUyN0M2XHUyN0U2LVx1MjdFRlx1Mjk4My1cdTI5OThcdTI5RDgtXHUyOURCXHUyOUZDXHUyOUZEXHUyQ0Y5LVx1MkNGQ1x1MkNGRVx1MkNGRlx1MkQ3MFx1MkUwMC1cdTJFMkVcdTJFMzAtXHUyRTRGXHUyRTUyLVx1MkU1RFx1MzAwMS1cdTMwMDNcdTMwMDgtXHUzMDExXHUzMDE0LVx1MzAxRlx1MzAzMFx1MzAzRFx1MzBBMFx1MzBGQlx1QTRGRVx1QTRGRlx1QTYwRC1cdUE2MEZcdUE2NzNcdUE2N0VcdUE2RjItXHVBNkY3XHVBODc0LVx1QTg3N1x1QThDRVx1QThDRlx1QThGOC1cdUE4RkFcdUE4RkNcdUE5MkVcdUE5MkZcdUE5NUZcdUE5QzEtXHVBOUNEXHVBOURFXHVBOURGXHVBQTVDLVx1QUE1Rlx1QUFERVx1QUFERlx1QUFGMFx1QUFGMVx1QUJFQlx1RkQzRVx1RkQzRlx1RkUxMC1cdUZFMTlcdUZFMzAtXHVGRTUyXHVGRTU0LVx1RkU2MVx1RkU2M1x1RkU2OFx1RkU2QVx1RkU2Qlx1RkYwMS1cdUZGMDNcdUZGMDUtXHVGRjBBXHVGRjBDLVx1RkYwRlx1RkYxQVx1RkYxQlx1RkYxRlx1RkYyMFx1RkYzQi1cdUZGM0RcdUZGM0ZcdUZGNUJcdUZGNURcdUZGNUYtXHVGRjY1XS8sbjU9TzkoL1tBLVphLXpdLyksSDM9TzkoL1tcZEEtWmEtel0vKSx6UXQ9TzkoL1sjLScqK1wtLTk9P0EtWl4tfl0vKTtmdW5jdGlvbiBfbWUoaSl7cmV0dXJuIGkhPT1udWxsJiYoaTwzMnx8aT09PTEyNyl9Y29uc3QgQW1lPU85KC9cZC8pLHFRdD1POSgvW1xkQS1GYS1mXS8pLEhRdD1POSgvWyEtLzotQFstYHstfl0vKTtmdW5jdGlvbiBzbyhpKXtyZXR1cm4gaSE9PW51bGwmJmk8LTJ9ZnVuY3Rpb24gejIoaSl7cmV0dXJuIGkhPT1udWxsJiYoaTwwfHxpPT09MzIpfWZ1bmN0aW9uIEl1KGkpe3JldHVybiBpPT09LTJ8fGk9PT0tMXx8aT09PTMyfWNvbnN0IFZRdD1POSgkUXQpLFVRdD1POSgvXHMvKTtmdW5jdGlvbiBPOShpKXtyZXR1cm4gcztmdW5jdGlvbiBzKHUpe3JldHVybiB1IT09bnVsbCYmaS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUodSkpfX1mdW5jdGlvbiBLbChpLHMsdSxkKXtjb25zdCBwPWQ/ZC0xOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtsZXQgdj0wO3JldHVybiBiO2Z1bmN0aW9uIGIoVCl7cmV0dXJuIEl1KFQpPyhpLmVudGVyKHUpLHkoVCkpOnMoVCl9ZnVuY3Rpb24geShUKXtyZXR1cm4gSXUoVCkmJnYrKzxwPyhpLmNvbnN1bWUoVCkseSk6KGkuZXhpdCh1KSxzKFQpKX19Y29uc3QgR1F0PXt0b2tlbml6ZTpLUXR9O2Z1bmN0aW9uIEtRdChpKXtjb25zdCBzPWkuYXR0ZW1wdCh0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmNvbnRlbnRJbml0aWFsLGQscCk7bGV0IHU7cmV0dXJuIHM7ZnVuY3Rpb24gZCh5KXtpZih5PT09bnVsbCl7aS5jb25zdW1lKHkpO3JldHVybn1yZXR1cm4gaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZSh5KSxpLmV4aXQoImxpbmVFbmRpbmciKSxLbChpLHMsImxpbmVQcmVmaXgiKX1mdW5jdGlvbiBwKHkpe3JldHVybiBpLmVudGVyKCJwYXJhZ3JhcGgiKSx2KHkpfWZ1bmN0aW9uIHYoeSl7Y29uc3QgVD1pLmVudGVyKCJjaHVua1RleHQiLHtjb250ZW50VHlwZToidGV4dCIscHJldmlvdXM6dX0pO3JldHVybiB1JiYodS5uZXh0PVQpLHU9VCxiKHkpfWZ1bmN0aW9uIGIoeSl7aWYoeT09PW51bGwpe2kuZXhpdCgiY2h1bmtUZXh0IiksaS5leGl0KCJwYXJhZ3JhcGgiKSxpLmNvbnN1bWUoeSk7cmV0dXJufXJldHVybiBzbyh5KT8oaS5jb25zdW1lKHkpLGkuZXhpdCgiY2h1bmtUZXh0Iiksdik6KGkuY29uc3VtZSh5KSxiKX19Y29uc3QgV1F0PXt0b2tlbml6ZTpZUXR9LEhWZT17dG9rZW5pemU6WFF0fTtmdW5jdGlvbiBZUXQoaSl7Y29uc3Qgcz10aGlzLHU9W107bGV0IGQ9MCxwLHYsYjtyZXR1cm4geTtmdW5jdGlvbiB5KHBlKXtpZihkPHUubGVuZ3RoKXtjb25zdCBiZT11W2RdO3JldHVybiBzLmNvbnRhaW5lclN0YXRlPWJlWzFdLGkuYXR0ZW1wdChiZVswXS5jb250aW51YXRpb24sVCxfKShwZSl9cmV0dXJuIF8ocGUpfWZ1bmN0aW9uIFQocGUpe2lmKGQrKyxzLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3cpe3MuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdz12b2lkIDAscCYmb2UoKTtjb25zdCBiZT1zLmV2ZW50cy5sZW5ndGg7bGV0IGFlPWJlLG5lO2Zvcig7YWUtLTspaWYocy5ldmVudHNbYWVdWzBdPT09ImV4aXQiJiZzLmV2ZW50c1thZV1bMV0udHlwZT09PSJjaHVua0Zsb3ciKXtuZT1zLmV2ZW50c1thZV1bMV0uZW5kO2JyZWFrfWllKGQpO2xldCBzZT1iZTtmb3IoO3NlPHMuZXZlbnRzLmxlbmd0aDspcy5ldmVudHNbc2VdWzFdLmVuZD1PYmplY3QuYXNzaWduKHt9LG5lKSxzZSsrO3JldHVybiB0NShzLmV2ZW50cyxhZSsxLDAscy5ldmVudHMuc2xpY2UoYmUpKSxzLmV2ZW50cy5sZW5ndGg9c2UsXyhwZSl9cmV0dXJuIHkocGUpfWZ1bmN0aW9uIF8ocGUpe2lmKGQ9PT11Lmxlbmd0aCl7aWYoIXApcmV0dXJuIFIocGUpO2lmKHAuY3VycmVudENvbnN0cnVjdCYmcC5jdXJyZW50Q29uc3RydWN0LmNvbmNyZXRlKXJldHVybiBqKHBlKTtzLmludGVycnVwdD0hIShwLmN1cnJlbnRDb25zdHJ1Y3QmJiFwLl9nZm1UYWJsZUR5bmFtaWNJbnRlcnJ1cHRIYWNrKX1yZXR1cm4gcy5jb250YWluZXJTdGF0ZT17fSxpLmNoZWNrKEhWZSxBLFApKHBlKX1mdW5jdGlvbiBBKHBlKXtyZXR1cm4gcCYmb2UoKSxpZShkKSxSKHBlKX1mdW5jdGlvbiBQKHBlKXtyZXR1cm4gcy5wYXJzZXIubGF6eVtzLm5vdygpLmxpbmVdPWQhPT11Lmxlbmd0aCxiPXMubm93KCkub2Zmc2V0LGoocGUpfWZ1bmN0aW9uIFIocGUpe3JldHVybiBzLmNvbnRhaW5lclN0YXRlPXt9LGkuYXR0ZW1wdChIVmUsRixqKShwZSl9ZnVuY3Rpb24gRihwZSl7cmV0dXJuIGQrKyx1LnB1c2goW3MuY3VycmVudENvbnN0cnVjdCxzLmNvbnRhaW5lclN0YXRlXSksUihwZSl9ZnVuY3Rpb24gaihwZSl7aWYocGU9PT1udWxsKXtwJiZvZSgpLGllKDApLGkuY29uc3VtZShwZSk7cmV0dXJufXJldHVybiBwPXB8fHMucGFyc2VyLmZsb3cocy5ub3coKSksaS5lbnRlcigiY2h1bmtGbG93Iix7Y29udGVudFR5cGU6ImZsb3ciLHByZXZpb3VzOnYsX3Rva2VuaXplcjpwfSksSyhwZSl9ZnVuY3Rpb24gSyhwZSl7aWYocGU9PT1udWxsKXtlZShpLmV4aXQoImNodW5rRmxvdyIpLCEwKSxpZSgwKSxpLmNvbnN1bWUocGUpO3JldHVybn1yZXR1cm4gc28ocGUpPyhpLmNvbnN1bWUocGUpLGVlKGkuZXhpdCgiY2h1bmtGbG93IikpLGQ9MCxzLmludGVycnVwdD12b2lkIDAseSk6KGkuY29uc3VtZShwZSksSyl9ZnVuY3Rpb24gZWUocGUsYmUpe2NvbnN0IGFlPXMuc2xpY2VTdHJlYW0ocGUpO2lmKGJlJiZhZS5wdXNoKG51bGwpLHBlLnByZXZpb3VzPXYsdiYmKHYubmV4dD1wZSksdj1wZSxwLmRlZmluZVNraXAocGUuc3RhcnQpLHAud3JpdGUoYWUpLHMucGFyc2VyLmxhenlbcGUuc3RhcnQubGluZV0pe2xldCBuZT1wLmV2ZW50cy5sZW5ndGg7Zm9yKDtuZS0tOylpZihwLmV2ZW50c1tuZV1bMV0uc3RhcnQub2Zmc2V0PGImJighcC5ldmVudHNbbmVdWzFdLmVuZHx8cC5ldmVudHNbbmVdWzFdLmVuZC5vZmZzZXQ+YikpcmV0dXJuO2NvbnN0IHNlPXMuZXZlbnRzLmxlbmd0aDtsZXQgZGU9c2UsWCxnZTtmb3IoO2RlLS07KWlmKHMuZXZlbnRzW2RlXVswXT09PSJleGl0IiYmcy5ldmVudHNbZGVdWzFdLnR5cGU9PT0iY2h1bmtGbG93Iil7aWYoWCl7Z2U9cy5ldmVudHNbZGVdWzFdLmVuZDticmVha31YPSEwfWZvcihpZShkKSxuZT1zZTtuZTxzLmV2ZW50cy5sZW5ndGg7KXMuZXZlbnRzW25lXVsxXS5lbmQ9T2JqZWN0LmFzc2lnbih7fSxnZSksbmUrKzt0NShzLmV2ZW50cyxkZSsxLDAscy5ldmVudHMuc2xpY2Uoc2UpKSxzLmV2ZW50cy5sZW5ndGg9bmV9fWZ1bmN0aW9uIGllKHBlKXtsZXQgYmU9dS5sZW5ndGg7Zm9yKDtiZS0tID5wZTspe2NvbnN0IGFlPXVbYmVdO3MuY29udGFpbmVyU3RhdGU9YWVbMV0sYWVbMF0uZXhpdC5jYWxsKHMsaSl9dS5sZW5ndGg9cGV9ZnVuY3Rpb24gb2UoKXtwLndyaXRlKFtudWxsXSksdj12b2lkIDAscD12b2lkIDAscy5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93PXZvaWQgMH19ZnVuY3Rpb24gWFF0KGkscyx1KXtyZXR1cm4gS2woaSxpLmF0dGVtcHQodGhpcy5wYXJzZXIuY29uc3RydWN0cy5kb2N1bWVudCxzLHUpLCJsaW5lUHJlZml4Iix0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIik/dm9pZCAwOjQpfWZ1bmN0aW9uIFZWZShpKXtpZihpPT09bnVsbHx8ejIoaSl8fFVRdChpKSlyZXR1cm4gMTtpZihWUXQoaSkpcmV0dXJuIDJ9ZnVuY3Rpb24gTG1lKGkscyx1KXtjb25zdCBkPVtdO2xldCBwPS0xO2Zvcig7KytwPGkubGVuZ3RoOyl7Y29uc3Qgdj1pW3BdLnJlc29sdmVBbGw7diYmIWQuaW5jbHVkZXModikmJihzPXYocyx1KSxkLnB1c2godikpfXJldHVybiBzfWNvbnN0IE1tZT17bmFtZToiYXR0ZW50aW9uIix0b2tlbml6ZTpKUXQscmVzb2x2ZUFsbDpRUXR9O2Z1bmN0aW9uIFFRdChpLHMpe2xldCB1PS0xLGQscCx2LGIseSxULF8sQTtmb3IoOysrdTxpLmxlbmd0aDspaWYoaVt1XVswXT09PSJlbnRlciImJmlbdV1bMV0udHlwZT09PSJhdHRlbnRpb25TZXF1ZW5jZSImJmlbdV1bMV0uX2Nsb3NlKXtmb3IoZD11O2QtLTspaWYoaVtkXVswXT09PSJleGl0IiYmaVtkXVsxXS50eXBlPT09ImF0dGVudGlvblNlcXVlbmNlIiYmaVtkXVsxXS5fb3BlbiYmcy5zbGljZVNlcmlhbGl6ZShpW2RdWzFdKS5jaGFyQ29kZUF0KDApPT09cy5zbGljZVNlcmlhbGl6ZShpW3VdWzFdKS5jaGFyQ29kZUF0KDApKXtpZigoaVtkXVsxXS5fY2xvc2V8fGlbdV1bMV0uX29wZW4pJiYoaVt1XVsxXS5lbmQub2Zmc2V0LWlbdV1bMV0uc3RhcnQub2Zmc2V0KSUzJiYhKChpW2RdWzFdLmVuZC5vZmZzZXQtaVtkXVsxXS5zdGFydC5vZmZzZXQraVt1XVsxXS5lbmQub2Zmc2V0LWlbdV1bMV0uc3RhcnQub2Zmc2V0KSUzKSljb250aW51ZTtUPWlbZF1bMV0uZW5kLm9mZnNldC1pW2RdWzFdLnN0YXJ0Lm9mZnNldD4xJiZpW3VdWzFdLmVuZC5vZmZzZXQtaVt1XVsxXS5zdGFydC5vZmZzZXQ+MT8yOjE7Y29uc3QgUD1PYmplY3QuYXNzaWduKHt9LGlbZF1bMV0uZW5kKSxSPU9iamVjdC5hc3NpZ24oe30saVt1XVsxXS5zdGFydCk7VVZlKFAsLVQpLFVWZShSLFQpLGI9e3R5cGU6VD4xPyJzdHJvbmdTZXF1ZW5jZSI6ImVtcGhhc2lzU2VxdWVuY2UiLHN0YXJ0OlAsZW5kOk9iamVjdC5hc3NpZ24oe30saVtkXVsxXS5lbmQpfSx5PXt0eXBlOlQ+MT8ic3Ryb25nU2VxdWVuY2UiOiJlbXBoYXNpc1NlcXVlbmNlIixzdGFydDpPYmplY3QuYXNzaWduKHt9LGlbdV1bMV0uc3RhcnQpLGVuZDpSfSx2PXt0eXBlOlQ+MT8ic3Ryb25nVGV4dCI6ImVtcGhhc2lzVGV4dCIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxpW2RdWzFdLmVuZCksZW5kOk9iamVjdC5hc3NpZ24oe30saVt1XVsxXS5zdGFydCl9LHA9e3R5cGU6VD4xPyJzdHJvbmciOiJlbXBoYXNpcyIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxiLnN0YXJ0KSxlbmQ6T2JqZWN0LmFzc2lnbih7fSx5LmVuZCl9LGlbZF1bMV0uZW5kPU9iamVjdC5hc3NpZ24oe30sYi5zdGFydCksaVt1XVsxXS5zdGFydD1PYmplY3QuYXNzaWduKHt9LHkuZW5kKSxfPVtdLGlbZF1bMV0uZW5kLm9mZnNldC1pW2RdWzFdLnN0YXJ0Lm9mZnNldCYmKF89enYoXyxbWyJlbnRlciIsaVtkXVsxXSxzXSxbImV4aXQiLGlbZF1bMV0sc11dKSksXz16dihfLFtbImVudGVyIixwLHNdLFsiZW50ZXIiLGIsc10sWyJleGl0IixiLHNdLFsiZW50ZXIiLHYsc11dKSxfPXp2KF8sTG1lKHMucGFyc2VyLmNvbnN0cnVjdHMuaW5zaWRlU3Bhbi5udWxsLGkuc2xpY2UoZCsxLHUpLHMpKSxfPXp2KF8sW1siZXhpdCIsdixzXSxbImVudGVyIix5LHNdLFsiZXhpdCIseSxzXSxbImV4aXQiLHAsc11dKSxpW3VdWzFdLmVuZC5vZmZzZXQtaVt1XVsxXS5zdGFydC5vZmZzZXQ/KEE9MixfPXp2KF8sW1siZW50ZXIiLGlbdV1bMV0sc10sWyJleGl0IixpW3VdWzFdLHNdXSkpOkE9MCx0NShpLGQtMSx1LWQrMyxfKSx1PWQrXy5sZW5ndGgtQS0yO2JyZWFrfX1mb3IodT0tMTsrK3U8aS5sZW5ndGg7KWlbdV1bMV0udHlwZT09PSJhdHRlbnRpb25TZXF1ZW5jZSImJihpW3VdWzFdLnR5cGU9ImRhdGEiKTtyZXR1cm4gaX1mdW5jdGlvbiBKUXQoaSxzKXtjb25zdCB1PXRoaXMucGFyc2VyLmNvbnN0cnVjdHMuYXR0ZW50aW9uTWFya2Vycy5udWxsLGQ9dGhpcy5wcmV2aW91cyxwPVZWZShkKTtsZXQgdjtyZXR1cm4gYjtmdW5jdGlvbiBiKFQpe3JldHVybiB2PVQsaS5lbnRlcigiYXR0ZW50aW9uU2VxdWVuY2UiKSx5KFQpfWZ1bmN0aW9uIHkoVCl7aWYoVD09PXYpcmV0dXJuIGkuY29uc3VtZShUKSx5O2NvbnN0IF89aS5leGl0KCJhdHRlbnRpb25TZXF1ZW5jZSIpLEE9VlZlKFQpLFA9IUF8fEE9PT0yJiZwfHx1LmluY2x1ZGVzKFQpLFI9IXB8fHA9PT0yJiZBfHx1LmluY2x1ZGVzKGQpO3JldHVybiBfLl9vcGVuPSEhKHY9PT00Mj9QOlAmJihwfHwhUikpLF8uX2Nsb3NlPSEhKHY9PT00Mj9SOlImJihBfHwhUCkpLHMoVCl9fWZ1bmN0aW9uIFVWZShpLHMpe2kuY29sdW1uKz1zLGkub2Zmc2V0Kz1zLGkuX2J1ZmZlckluZGV4Kz1zfWNvbnN0IFpRdD17bmFtZToiYXV0b2xpbmsiLHRva2VuaXplOmVKdH07ZnVuY3Rpb24gZUp0KGkscyx1KXtsZXQgZD0wO3JldHVybiBwO2Z1bmN0aW9uIHAoRil7cmV0dXJuIGkuZW50ZXIoImF1dG9saW5rIiksaS5lbnRlcigiYXV0b2xpbmtNYXJrZXIiKSxpLmNvbnN1bWUoRiksaS5leGl0KCJhdXRvbGlua01hcmtlciIpLGkuZW50ZXIoImF1dG9saW5rUHJvdG9jb2wiKSx2fWZ1bmN0aW9uIHYoRil7cmV0dXJuIG41KEYpPyhpLmNvbnN1bWUoRiksYik6XyhGKX1mdW5jdGlvbiBiKEYpe3JldHVybiBGPT09NDN8fEY9PT00NXx8Rj09PTQ2fHxIMyhGKT8oZD0xLHkoRikpOl8oRil9ZnVuY3Rpb24geShGKXtyZXR1cm4gRj09PTU4PyhpLmNvbnN1bWUoRiksZD0wLFQpOihGPT09NDN8fEY9PT00NXx8Rj09PTQ2fHxIMyhGKSkmJmQrKzwzMj8oaS5jb25zdW1lKEYpLHkpOihkPTAsXyhGKSl9ZnVuY3Rpb24gVChGKXtyZXR1cm4gRj09PTYyPyhpLmV4aXQoImF1dG9saW5rUHJvdG9jb2wiKSxpLmVudGVyKCJhdXRvbGlua01hcmtlciIpLGkuY29uc3VtZShGKSxpLmV4aXQoImF1dG9saW5rTWFya2VyIiksaS5leGl0KCJhdXRvbGluayIpLHMpOkY9PT1udWxsfHxGPT09MzJ8fEY9PT02MHx8X21lKEYpP3UoRik6KGkuY29uc3VtZShGKSxUKX1mdW5jdGlvbiBfKEYpe3JldHVybiBGPT09NjQ/KGkuY29uc3VtZShGKSxBKTp6UXQoRik/KGkuY29uc3VtZShGKSxfKTp1KEYpfWZ1bmN0aW9uIEEoRil7cmV0dXJuIEgzKEYpP1AoRik6dShGKX1mdW5jdGlvbiBQKEYpe3JldHVybiBGPT09NDY/KGkuY29uc3VtZShGKSxkPTAsQSk6Rj09PTYyPyhpLmV4aXQoImF1dG9saW5rUHJvdG9jb2wiKS50eXBlPSJhdXRvbGlua0VtYWlsIixpLmVudGVyKCJhdXRvbGlua01hcmtlciIpLGkuY29uc3VtZShGKSxpLmV4aXQoImF1dG9saW5rTWFya2VyIiksaS5leGl0KCJhdXRvbGluayIpLHMpOlIoRil9ZnVuY3Rpb24gUihGKXtpZigoRj09PTQ1fHxIMyhGKSkmJmQrKzw2Myl7Y29uc3Qgaj1GPT09NDU/UjpQO3JldHVybiBpLmNvbnN1bWUoRiksan1yZXR1cm4gdShGKX19Y29uc3QgWVE9e3Rva2VuaXplOnRKdCxwYXJ0aWFsOiEwfTtmdW5jdGlvbiB0SnQoaSxzLHUpe3JldHVybiBkO2Z1bmN0aW9uIGQodil7cmV0dXJuIEl1KHYpP0tsKGkscCwibGluZVByZWZpeCIpKHYpOnAodil9ZnVuY3Rpb24gcCh2KXtyZXR1cm4gdj09PW51bGx8fHNvKHYpP3Modik6dSh2KX19Y29uc3QgR1ZlPXtuYW1lOiJibG9ja1F1b3RlIix0b2tlbml6ZTpuSnQsY29udGludWF0aW9uOnt0b2tlbml6ZTpySnR9LGV4aXQ6aUp0fTtmdW5jdGlvbiBuSnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztyZXR1cm4gcDtmdW5jdGlvbiBwKGIpe2lmKGI9PT02Mil7Y29uc3QgeT1kLmNvbnRhaW5lclN0YXRlO3JldHVybiB5Lm9wZW58fChpLmVudGVyKCJibG9ja1F1b3RlIix7X2NvbnRhaW5lcjohMH0pLHkub3Blbj0hMCksaS5lbnRlcigiYmxvY2tRdW90ZVByZWZpeCIpLGkuZW50ZXIoImJsb2NrUXVvdGVNYXJrZXIiKSxpLmNvbnN1bWUoYiksaS5leGl0KCJibG9ja1F1b3RlTWFya2VyIiksdn1yZXR1cm4gdShiKX1mdW5jdGlvbiB2KGIpe3JldHVybiBJdShiKT8oaS5lbnRlcigiYmxvY2tRdW90ZVByZWZpeFdoaXRlc3BhY2UiKSxpLmNvbnN1bWUoYiksaS5leGl0KCJibG9ja1F1b3RlUHJlZml4V2hpdGVzcGFjZSIpLGkuZXhpdCgiYmxvY2tRdW90ZVByZWZpeCIpLHMpOihpLmV4aXQoImJsb2NrUXVvdGVQcmVmaXgiKSxzKGIpKX19ZnVuY3Rpb24gckp0KGkscyx1KXtjb25zdCBkPXRoaXM7cmV0dXJuIHA7ZnVuY3Rpb24gcChiKXtyZXR1cm4gSXUoYik/S2woaSx2LCJsaW5lUHJlZml4IixkLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIik/dm9pZCAwOjQpKGIpOnYoYil9ZnVuY3Rpb24gdihiKXtyZXR1cm4gaS5hdHRlbXB0KEdWZSxzLHUpKGIpfX1mdW5jdGlvbiBpSnQoaSl7aS5leGl0KCJibG9ja1F1b3RlIil9Y29uc3QgS1ZlPXtuYW1lOiJjaGFyYWN0ZXJFc2NhcGUiLHRva2VuaXplOnNKdH07ZnVuY3Rpb24gc0p0KGkscyx1KXtyZXR1cm4gZDtmdW5jdGlvbiBkKHYpe3JldHVybiBpLmVudGVyKCJjaGFyYWN0ZXJFc2NhcGUiKSxpLmVudGVyKCJlc2NhcGVNYXJrZXIiKSxpLmNvbnN1bWUodiksaS5leGl0KCJlc2NhcGVNYXJrZXIiKSxwfWZ1bmN0aW9uIHAodil7cmV0dXJuIEhRdCh2KT8oaS5lbnRlcigiY2hhcmFjdGVyRXNjYXBlVmFsdWUiKSxpLmNvbnN1bWUodiksaS5leGl0KCJjaGFyYWN0ZXJFc2NhcGVWYWx1ZSIpLGkuZXhpdCgiY2hhcmFjdGVyRXNjYXBlIikscyk6dSh2KX19Y29uc3QgV1ZlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImkiKTtmdW5jdGlvbiBEbWUoaSl7Y29uc3Qgcz0iJiIraSsiOyI7V1ZlLmlubmVySFRNTD1zO2NvbnN0IHU9V1ZlLnRleHRDb250ZW50O3JldHVybiB1LmNoYXJDb2RlQXQodS5sZW5ndGgtMSk9PT01OSYmaSE9PSJzZW1pInx8dT09PXM/ITE6dX1jb25zdCBZVmU9e25hbWU6ImNoYXJhY3RlclJlZmVyZW5jZSIsdG9rZW5pemU6YUp0fTtmdW5jdGlvbiBhSnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztsZXQgcD0wLHYsYjtyZXR1cm4geTtmdW5jdGlvbiB5KFApe3JldHVybiBpLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2UiKSxpLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXIiKSxpLmNvbnN1bWUoUCksaS5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXIiKSxUfWZ1bmN0aW9uIFQoUCl7cmV0dXJuIFA9PT0zNT8oaS5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYyIpLGkuY29uc3VtZShQKSxpLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMiKSxfKTooaS5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKSx2PTMxLGI9SDMsQShQKSl9ZnVuY3Rpb24gXyhQKXtyZXR1cm4gUD09PTg4fHxQPT09MTIwPyhpLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJIZXhhZGVjaW1hbCIpLGkuY29uc3VtZShQKSxpLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlckhleGFkZWNpbWFsIiksaS5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKSx2PTYsYj1xUXQsQSk6KGkuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZVZhbHVlIiksdj03LGI9QW1lLEEoUCkpfWZ1bmN0aW9uIEEoUCl7aWYoUD09PTU5JiZwKXtjb25zdCBSPWkuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKTtyZXR1cm4gYj09PUgzJiYhRG1lKGQuc2xpY2VTZXJpYWxpemUoUikpP3UoUCk6KGkuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlciIpLGkuY29uc3VtZShQKSxpLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlciIpLGkuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlIikscyl9cmV0dXJuIGIoUCkmJnArKzx2PyhpLmNvbnN1bWUoUCksQSk6dShQKX19Y29uc3QgWFZlPXt0b2tlbml6ZTpjSnQscGFydGlhbDohMH0sUVZlPXtuYW1lOiJjb2RlRmVuY2VkIix0b2tlbml6ZTpvSnQsY29uY3JldGU6ITB9O2Z1bmN0aW9uIG9KdChpLHMsdSl7Y29uc3QgZD10aGlzLHA9e3Rva2VuaXplOmFlLHBhcnRpYWw6ITB9O2xldCB2PTAsYj0wLHk7cmV0dXJuIFQ7ZnVuY3Rpb24gVChuZSl7cmV0dXJuIF8obmUpfWZ1bmN0aW9uIF8obmUpe2NvbnN0IHNlPWQuZXZlbnRzW2QuZXZlbnRzLmxlbmd0aC0xXTtyZXR1cm4gdj1zZSYmc2VbMV0udHlwZT09PSJsaW5lUHJlZml4Ij9zZVsyXS5zbGljZVNlcmlhbGl6ZShzZVsxXSwhMCkubGVuZ3RoOjAseT1uZSxpLmVudGVyKCJjb2RlRmVuY2VkIiksaS5lbnRlcigiY29kZUZlbmNlZEZlbmNlIiksaS5lbnRlcigiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKSxBKG5lKX1mdW5jdGlvbiBBKG5lKXtyZXR1cm4gbmU9PT15PyhiKyssaS5jb25zdW1lKG5lKSxBKTpiPDM/dShuZSk6KGkuZXhpdCgiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKSxJdShuZSk/S2woaSxQLCJ3aGl0ZXNwYWNlIikobmUpOlAobmUpKX1mdW5jdGlvbiBQKG5lKXtyZXR1cm4gbmU9PT1udWxsfHxzbyhuZSk/KGkuZXhpdCgiY29kZUZlbmNlZEZlbmNlIiksZC5pbnRlcnJ1cHQ/cyhuZSk6aS5jaGVjayhYVmUsSyxiZSkobmUpKTooaS5lbnRlcigiY29kZUZlbmNlZEZlbmNlSW5mbyIpLGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxSKG5lKSl9ZnVuY3Rpb24gUihuZSl7cmV0dXJuIG5lPT09bnVsbHx8c28obmUpPyhpLmV4aXQoImNodW5rU3RyaW5nIiksaS5leGl0KCJjb2RlRmVuY2VkRmVuY2VJbmZvIiksUChuZSkpOkl1KG5lKT8oaS5leGl0KCJjaHVua1N0cmluZyIpLGkuZXhpdCgiY29kZUZlbmNlZEZlbmNlSW5mbyIpLEtsKGksRiwid2hpdGVzcGFjZSIpKG5lKSk6bmU9PT05NiYmbmU9PT15P3UobmUpOihpLmNvbnN1bWUobmUpLFIpfWZ1bmN0aW9uIEYobmUpe3JldHVybiBuZT09PW51bGx8fHNvKG5lKT9QKG5lKTooaS5lbnRlcigiY29kZUZlbmNlZEZlbmNlTWV0YSIpLGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxqKG5lKSl9ZnVuY3Rpb24gaihuZSl7cmV0dXJuIG5lPT09bnVsbHx8c28obmUpPyhpLmV4aXQoImNodW5rU3RyaW5nIiksaS5leGl0KCJjb2RlRmVuY2VkRmVuY2VNZXRhIiksUChuZSkpOm5lPT09OTYmJm5lPT09eT91KG5lKTooaS5jb25zdW1lKG5lKSxqKX1mdW5jdGlvbiBLKG5lKXtyZXR1cm4gaS5hdHRlbXB0KHAsYmUsZWUpKG5lKX1mdW5jdGlvbiBlZShuZSl7cmV0dXJuIGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUobmUpLGkuZXhpdCgibGluZUVuZGluZyIpLGllfWZ1bmN0aW9uIGllKG5lKXtyZXR1cm4gdj4wJiZJdShuZSk/S2woaSxvZSwibGluZVByZWZpeCIsdisxKShuZSk6b2UobmUpfWZ1bmN0aW9uIG9lKG5lKXtyZXR1cm4gbmU9PT1udWxsfHxzbyhuZSk/aS5jaGVjayhYVmUsSyxiZSkobmUpOihpLmVudGVyKCJjb2RlRmxvd1ZhbHVlIikscGUobmUpKX1mdW5jdGlvbiBwZShuZSl7cmV0dXJuIG5lPT09bnVsbHx8c28obmUpPyhpLmV4aXQoImNvZGVGbG93VmFsdWUiKSxvZShuZSkpOihpLmNvbnN1bWUobmUpLHBlKX1mdW5jdGlvbiBiZShuZSl7cmV0dXJuIGkuZXhpdCgiY29kZUZlbmNlZCIpLHMobmUpfWZ1bmN0aW9uIGFlKG5lLHNlLGRlKXtsZXQgWD0wO3JldHVybiBnZTtmdW5jdGlvbiBnZShQZSl7cmV0dXJuIG5lLmVudGVyKCJsaW5lRW5kaW5nIiksbmUuY29uc3VtZShQZSksbmUuZXhpdCgibGluZUVuZGluZyIpLFd9ZnVuY3Rpb24gVyhQZSl7cmV0dXJuIG5lLmVudGVyKCJjb2RlRmVuY2VkRmVuY2UiKSxJdShQZSk/S2wobmUseGUsImxpbmVQcmVmaXgiLGQucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKT92b2lkIDA6NCkoUGUpOnhlKFBlKX1mdW5jdGlvbiB4ZShQZSl7cmV0dXJuIFBlPT09eT8obmUuZW50ZXIoImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlIiksVShQZSkpOmRlKFBlKX1mdW5jdGlvbiBVKFBlKXtyZXR1cm4gUGU9PT15PyhYKyssbmUuY29uc3VtZShQZSksVSk6WD49Yj8obmUuZXhpdCgiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKSxJdShQZSk/S2wobmUsRmUsIndoaXRlc3BhY2UiKShQZSk6RmUoUGUpKTpkZShQZSl9ZnVuY3Rpb24gRmUoUGUpe3JldHVybiBQZT09PW51bGx8fHNvKFBlKT8obmUuZXhpdCgiY29kZUZlbmNlZEZlbmNlIiksc2UoUGUpKTpkZShQZSl9fX1mdW5jdGlvbiBjSnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztyZXR1cm4gcDtmdW5jdGlvbiBwKGIpe3JldHVybiBiPT09bnVsbD91KGIpOihpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKGIpLGkuZXhpdCgibGluZUVuZGluZyIpLHYpfWZ1bmN0aW9uIHYoYil7cmV0dXJuIGQucGFyc2VyLmxhenlbZC5ub3coKS5saW5lXT91KGIpOnMoYil9fWNvbnN0IEltZT17bmFtZToiY29kZUluZGVudGVkIix0b2tlbml6ZTpsSnR9LHVKdD17dG9rZW5pemU6aEp0LHBhcnRpYWw6ITB9O2Z1bmN0aW9uIGxKdChpLHMsdSl7Y29uc3QgZD10aGlzO3JldHVybiBwO2Z1bmN0aW9uIHAoXyl7cmV0dXJuIGkuZW50ZXIoImNvZGVJbmRlbnRlZCIpLEtsKGksdiwibGluZVByZWZpeCIsNCsxKShfKX1mdW5jdGlvbiB2KF8pe2NvbnN0IEE9ZC5ldmVudHNbZC5ldmVudHMubGVuZ3RoLTFdO3JldHVybiBBJiZBWzFdLnR5cGU9PT0ibGluZVByZWZpeCImJkFbMl0uc2xpY2VTZXJpYWxpemUoQVsxXSwhMCkubGVuZ3RoPj00P2IoXyk6dShfKX1mdW5jdGlvbiBiKF8pe3JldHVybiBfPT09bnVsbD9UKF8pOnNvKF8pP2kuYXR0ZW1wdCh1SnQsYixUKShfKTooaS5lbnRlcigiY29kZUZsb3dWYWx1ZSIpLHkoXykpfWZ1bmN0aW9uIHkoXyl7cmV0dXJuIF89PT1udWxsfHxzbyhfKT8oaS5leGl0KCJjb2RlRmxvd1ZhbHVlIiksYihfKSk6KGkuY29uc3VtZShfKSx5KX1mdW5jdGlvbiBUKF8pe3JldHVybiBpLmV4aXQoImNvZGVJbmRlbnRlZCIpLHMoXyl9fWZ1bmN0aW9uIGhKdChpLHMsdSl7Y29uc3QgZD10aGlzO3JldHVybiBwO2Z1bmN0aW9uIHAoYil7cmV0dXJuIGQucGFyc2VyLmxhenlbZC5ub3coKS5saW5lXT91KGIpOnNvKGIpPyhpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKGIpLGkuZXhpdCgibGluZUVuZGluZyIpLHApOktsKGksdiwibGluZVByZWZpeCIsNCsxKShiKX1mdW5jdGlvbiB2KGIpe2NvbnN0IHk9ZC5ldmVudHNbZC5ldmVudHMubGVuZ3RoLTFdO3JldHVybiB5JiZ5WzFdLnR5cGU9PT0ibGluZVByZWZpeCImJnlbMl0uc2xpY2VTZXJpYWxpemUoeVsxXSwhMCkubGVuZ3RoPj00P3MoYik6c28oYik/cChiKTp1KGIpfX1jb25zdCBmSnQ9e25hbWU6ImNvZGVUZXh0Iix0b2tlbml6ZTpwSnQscmVzb2x2ZTpkSnQscHJldmlvdXM6Z0p0fTtmdW5jdGlvbiBkSnQoaSl7bGV0IHM9aS5sZW5ndGgtNCx1PTMsZCxwO2lmKChpW3VdWzFdLnR5cGU9PT0ibGluZUVuZGluZyJ8fGlbdV1bMV0udHlwZT09PSJzcGFjZSIpJiYoaVtzXVsxXS50eXBlPT09ImxpbmVFbmRpbmcifHxpW3NdWzFdLnR5cGU9PT0ic3BhY2UiKSl7Zm9yKGQ9dTsrK2Q8czspaWYoaVtkXVsxXS50eXBlPT09ImNvZGVUZXh0RGF0YSIpe2lbdV1bMV0udHlwZT0iY29kZVRleHRQYWRkaW5nIixpW3NdWzFdLnR5cGU9ImNvZGVUZXh0UGFkZGluZyIsdSs9MixzLT0yO2JyZWFrfX1mb3IoZD11LTEscysrOysrZDw9czspcD09PXZvaWQgMD9kIT09cyYmaVtkXVsxXS50eXBlIT09ImxpbmVFbmRpbmciJiYocD1kKTooZD09PXN8fGlbZF1bMV0udHlwZT09PSJsaW5lRW5kaW5nIikmJihpW3BdWzFdLnR5cGU9ImNvZGVUZXh0RGF0YSIsZCE9PXArMiYmKGlbcF1bMV0uZW5kPWlbZC0xXVsxXS5lbmQsaS5zcGxpY2UocCsyLGQtcC0yKSxzLT1kLXAtMixkPXArMikscD12b2lkIDApO3JldHVybiBpfWZ1bmN0aW9uIGdKdChpKXtyZXR1cm4gaSE9PTk2fHx0aGlzLmV2ZW50c1t0aGlzLmV2ZW50cy5sZW5ndGgtMV1bMV0udHlwZT09PSJjaGFyYWN0ZXJFc2NhcGUifWZ1bmN0aW9uIHBKdChpLHMsdSl7bGV0IGQ9MCxwLHY7cmV0dXJuIGI7ZnVuY3Rpb24gYihQKXtyZXR1cm4gaS5lbnRlcigiY29kZVRleHQiKSxpLmVudGVyKCJjb2RlVGV4dFNlcXVlbmNlIikseShQKX1mdW5jdGlvbiB5KFApe3JldHVybiBQPT09OTY/KGkuY29uc3VtZShQKSxkKysseSk6KGkuZXhpdCgiY29kZVRleHRTZXF1ZW5jZSIpLFQoUCkpfWZ1bmN0aW9uIFQoUCl7cmV0dXJuIFA9PT1udWxsP3UoUCk6UD09PTMyPyhpLmVudGVyKCJzcGFjZSIpLGkuY29uc3VtZShQKSxpLmV4aXQoInNwYWNlIiksVCk6UD09PTk2Pyh2PWkuZW50ZXIoImNvZGVUZXh0U2VxdWVuY2UiKSxwPTAsQShQKSk6c28oUCk/KGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUoUCksaS5leGl0KCJsaW5lRW5kaW5nIiksVCk6KGkuZW50ZXIoImNvZGVUZXh0RGF0YSIpLF8oUCkpfWZ1bmN0aW9uIF8oUCl7cmV0dXJuIFA9PT1udWxsfHxQPT09MzJ8fFA9PT05Nnx8c28oUCk/KGkuZXhpdCgiY29kZVRleHREYXRhIiksVChQKSk6KGkuY29uc3VtZShQKSxfKX1mdW5jdGlvbiBBKFApe3JldHVybiBQPT09OTY/KGkuY29uc3VtZShQKSxwKyssQSk6cD09PWQ/KGkuZXhpdCgiY29kZVRleHRTZXF1ZW5jZSIpLGkuZXhpdCgiY29kZVRleHQiKSxzKFApKToodi50eXBlPSJjb2RlVGV4dERhdGEiLF8oUCkpfX1mdW5jdGlvbiBKVmUoaSl7Y29uc3Qgcz17fTtsZXQgdT0tMSxkLHAsdixiLHksVCxfO2Zvcig7Kyt1PGkubGVuZ3RoOyl7Zm9yKDt1IGluIHM7KXU9c1t1XTtpZihkPWlbdV0sdSYmZFsxXS50eXBlPT09ImNodW5rRmxvdyImJmlbdS0xXVsxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4IiYmKFQ9ZFsxXS5fdG9rZW5pemVyLmV2ZW50cyx2PTAsdjxULmxlbmd0aCYmVFt2XVsxXS50eXBlPT09ImxpbmVFbmRpbmdCbGFuayImJih2Kz0yKSx2PFQubGVuZ3RoJiZUW3ZdWzFdLnR5cGU9PT0iY29udGVudCIpKWZvcig7Kyt2PFQubGVuZ3RoJiZUW3ZdWzFdLnR5cGUhPT0iY29udGVudCI7KVRbdl1bMV0udHlwZT09PSJjaHVua1RleHQiJiYoVFt2XVsxXS5faXNJbkZpcnN0Q29udGVudE9mTGlzdEl0ZW09ITAsdisrKTtpZihkWzBdPT09ImVudGVyIilkWzFdLmNvbnRlbnRUeXBlJiYoT2JqZWN0LmFzc2lnbihzLGJKdChpLHUpKSx1PXNbdV0sXz0hMCk7ZWxzZSBpZihkWzFdLl9jb250YWluZXIpe2Zvcih2PXUscD12b2lkIDA7di0tJiYoYj1pW3ZdLGJbMV0udHlwZT09PSJsaW5lRW5kaW5nInx8YlsxXS50eXBlPT09ImxpbmVFbmRpbmdCbGFuayIpOyliWzBdPT09ImVudGVyIiYmKHAmJihpW3BdWzFdLnR5cGU9ImxpbmVFbmRpbmdCbGFuayIpLGJbMV0udHlwZT0ibGluZUVuZGluZyIscD12KTtwJiYoZFsxXS5lbmQ9T2JqZWN0LmFzc2lnbih7fSxpW3BdWzFdLnN0YXJ0KSx5PWkuc2xpY2UocCx1KSx5LnVuc2hpZnQoZCksdDUoaSxwLHUtcCsxLHkpKX19cmV0dXJuIV99ZnVuY3Rpb24gYkp0KGkscyl7Y29uc3QgdT1pW3NdWzFdLGQ9aVtzXVsyXTtsZXQgcD1zLTE7Y29uc3Qgdj1bXSxiPXUuX3Rva2VuaXplcnx8ZC5wYXJzZXJbdS5jb250ZW50VHlwZV0odS5zdGFydCkseT1iLmV2ZW50cyxUPVtdLF89e307bGV0IEEsUCxSPS0xLEY9dSxqPTAsSz0wO2NvbnN0IGVlPVtLXTtmb3IoO0Y7KXtmb3IoO2lbKytwXVsxXSE9PUY7KTt2LnB1c2gocCksRi5fdG9rZW5pemVyfHwoQT1kLnNsaWNlU3RyZWFtKEYpLEYubmV4dHx8QS5wdXNoKG51bGwpLFAmJmIuZGVmaW5lU2tpcChGLnN0YXJ0KSxGLl9pc0luRmlyc3RDb250ZW50T2ZMaXN0SXRlbSYmKGIuX2dmbVRhc2tsaXN0Rmlyc3RDb250ZW50T2ZMaXN0SXRlbT0hMCksYi53cml0ZShBKSxGLl9pc0luRmlyc3RDb250ZW50T2ZMaXN0SXRlbSYmKGIuX2dmbVRhc2tsaXN0Rmlyc3RDb250ZW50T2ZMaXN0SXRlbT12b2lkIDApKSxQPUYsRj1GLm5leHR9Zm9yKEY9dTsrK1I8eS5sZW5ndGg7KXlbUl1bMF09PT0iZXhpdCImJnlbUi0xXVswXT09PSJlbnRlciImJnlbUl1bMV0udHlwZT09PXlbUi0xXVsxXS50eXBlJiZ5W1JdWzFdLnN0YXJ0LmxpbmUhPT15W1JdWzFdLmVuZC5saW5lJiYoSz1SKzEsZWUucHVzaChLKSxGLl90b2tlbml6ZXI9dm9pZCAwLEYucHJldmlvdXM9dm9pZCAwLEY9Ri5uZXh0KTtmb3IoYi5ldmVudHM9W10sRj8oRi5fdG9rZW5pemVyPXZvaWQgMCxGLnByZXZpb3VzPXZvaWQgMCk6ZWUucG9wKCksUj1lZS5sZW5ndGg7Ui0tOyl7Y29uc3QgaWU9eS5zbGljZShlZVtSXSxlZVtSKzFdKSxvZT12LnBvcCgpO1QudW5zaGlmdChbb2Usb2UraWUubGVuZ3RoLTFdKSx0NShpLG9lLDIsaWUpfWZvcihSPS0xOysrUjxULmxlbmd0aDspX1tqK1RbUl1bMF1dPWorVFtSXVsxXSxqKz1UW1JdWzFdLVRbUl1bMF0tMTtyZXR1cm4gX31jb25zdCBtSnQ9e3Rva2VuaXplOnlKdCxyZXNvbHZlOndKdH0sdkp0PXt0b2tlbml6ZTp4SnQscGFydGlhbDohMH07ZnVuY3Rpb24gd0p0KGkpe3JldHVybiBKVmUoaSksaX1mdW5jdGlvbiB5SnQoaSxzKXtsZXQgdTtyZXR1cm4gZDtmdW5jdGlvbiBkKHkpe3JldHVybiBpLmVudGVyKCJjb250ZW50IiksdT1pLmVudGVyKCJjaHVua0NvbnRlbnQiLHtjb250ZW50VHlwZToiY29udGVudCJ9KSxwKHkpfWZ1bmN0aW9uIHAoeSl7cmV0dXJuIHk9PT1udWxsP3YoeSk6c28oeSk/aS5jaGVjayh2SnQsYix2KSh5KTooaS5jb25zdW1lKHkpLHApfWZ1bmN0aW9uIHYoeSl7cmV0dXJuIGkuZXhpdCgiY2h1bmtDb250ZW50IiksaS5leGl0KCJjb250ZW50Iikscyh5KX1mdW5jdGlvbiBiKHkpe3JldHVybiBpLmNvbnN1bWUoeSksaS5leGl0KCJjaHVua0NvbnRlbnQiKSx1Lm5leHQ9aS5lbnRlcigiY2h1bmtDb250ZW50Iix7Y29udGVudFR5cGU6ImNvbnRlbnQiLHByZXZpb3VzOnV9KSx1PXUubmV4dCxwfX1mdW5jdGlvbiB4SnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztyZXR1cm4gcDtmdW5jdGlvbiBwKGIpe3JldHVybiBpLmV4aXQoImNodW5rQ29udGVudCIpLGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUoYiksaS5leGl0KCJsaW5lRW5kaW5nIiksS2woaSx2LCJsaW5lUHJlZml4Iil9ZnVuY3Rpb24gdihiKXtpZihiPT09bnVsbHx8c28oYikpcmV0dXJuIHUoYik7Y29uc3QgeT1kLmV2ZW50c1tkLmV2ZW50cy5sZW5ndGgtMV07cmV0dXJuIWQucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKSYmeSYmeVsxXS50eXBlPT09ImxpbmVQcmVmaXgiJiZ5WzJdLnNsaWNlU2VyaWFsaXplKHlbMV0sITApLmxlbmd0aD49ND9zKGIpOmkuaW50ZXJydXB0KGQucGFyc2VyLmNvbnN0cnVjdHMuZmxvdyx1LHMpKGIpfX1mdW5jdGlvbiBaVmUoaSxzLHUsZCxwLHYsYix5LFQpe2NvbnN0IF89VHx8TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCBBPTA7cmV0dXJuIFA7ZnVuY3Rpb24gUChpZSl7cmV0dXJuIGllPT09NjA/KGkuZW50ZXIoZCksaS5lbnRlcihwKSxpLmVudGVyKHYpLGkuY29uc3VtZShpZSksaS5leGl0KHYpLFIpOmllPT09bnVsbHx8aWU9PT0zMnx8aWU9PT00MXx8X21lKGllKT91KGllKTooaS5lbnRlcihkKSxpLmVudGVyKGIpLGkuZW50ZXIoeSksaS5lbnRlcigiY2h1bmtTdHJpbmciLHtjb250ZW50VHlwZToic3RyaW5nIn0pLEsoaWUpKX1mdW5jdGlvbiBSKGllKXtyZXR1cm4gaWU9PT02Mj8oaS5lbnRlcih2KSxpLmNvbnN1bWUoaWUpLGkuZXhpdCh2KSxpLmV4aXQocCksaS5leGl0KGQpLHMpOihpLmVudGVyKHkpLGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxGKGllKSl9ZnVuY3Rpb24gRihpZSl7cmV0dXJuIGllPT09NjI/KGkuZXhpdCgiY2h1bmtTdHJpbmciKSxpLmV4aXQoeSksUihpZSkpOmllPT09bnVsbHx8aWU9PT02MHx8c28oaWUpP3UoaWUpOihpLmNvbnN1bWUoaWUpLGllPT09OTI/ajpGKX1mdW5jdGlvbiBqKGllKXtyZXR1cm4gaWU9PT02MHx8aWU9PT02Mnx8aWU9PT05Mj8oaS5jb25zdW1lKGllKSxGKTpGKGllKX1mdW5jdGlvbiBLKGllKXtyZXR1cm4hQSYmKGllPT09bnVsbHx8aWU9PT00MXx8ejIoaWUpKT8oaS5leGl0KCJjaHVua1N0cmluZyIpLGkuZXhpdCh5KSxpLmV4aXQoYiksaS5leGl0KGQpLHMoaWUpKTpBPF8mJmllPT09NDA/KGkuY29uc3VtZShpZSksQSsrLEspOmllPT09NDE/KGkuY29uc3VtZShpZSksQS0tLEspOmllPT09bnVsbHx8aWU9PT0zMnx8aWU9PT00MHx8X21lKGllKT91KGllKTooaS5jb25zdW1lKGllKSxpZT09PTkyP2VlOkspfWZ1bmN0aW9uIGVlKGllKXtyZXR1cm4gaWU9PT00MHx8aWU9PT00MXx8aWU9PT05Mj8oaS5jb25zdW1lKGllKSxLKTpLKGllKX19ZnVuY3Rpb24gZVVlKGkscyx1LGQscCx2KXtjb25zdCBiPXRoaXM7bGV0IHk9MCxUO3JldHVybiBfO2Z1bmN0aW9uIF8oRil7cmV0dXJuIGkuZW50ZXIoZCksaS5lbnRlcihwKSxpLmNvbnN1bWUoRiksaS5leGl0KHApLGkuZW50ZXIodiksQX1mdW5jdGlvbiBBKEYpe3JldHVybiB5Pjk5OXx8Rj09PW51bGx8fEY9PT05MXx8Rj09PTkzJiYhVHx8Rj09PTk0JiYheSYmIl9oaWRkZW5Gb290bm90ZVN1cHBvcnQiaW4gYi5wYXJzZXIuY29uc3RydWN0cz91KEYpOkY9PT05Mz8oaS5leGl0KHYpLGkuZW50ZXIocCksaS5jb25zdW1lKEYpLGkuZXhpdChwKSxpLmV4aXQoZCkscyk6c28oRik/KGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUoRiksaS5leGl0KCJsaW5lRW5kaW5nIiksQSk6KGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxQKEYpKX1mdW5jdGlvbiBQKEYpe3JldHVybiBGPT09bnVsbHx8Rj09PTkxfHxGPT09OTN8fHNvKEYpfHx5Kys+OTk5PyhpLmV4aXQoImNodW5rU3RyaW5nIiksQShGKSk6KGkuY29uc3VtZShGKSxUfHwoVD0hSXUoRikpLEY9PT05Mj9SOlApfWZ1bmN0aW9uIFIoRil7cmV0dXJuIEY9PT05MXx8Rj09PTkyfHxGPT09OTM/KGkuY29uc3VtZShGKSx5KyssUCk6UChGKX19ZnVuY3Rpb24gdFVlKGkscyx1LGQscCx2KXtsZXQgYjtyZXR1cm4geTtmdW5jdGlvbiB5KFIpe3JldHVybiBSPT09MzR8fFI9PT0zOXx8Uj09PTQwPyhpLmVudGVyKGQpLGkuZW50ZXIocCksaS5jb25zdW1lKFIpLGkuZXhpdChwKSxiPVI9PT00MD80MTpSLFQpOnUoUil9ZnVuY3Rpb24gVChSKXtyZXR1cm4gUj09PWI/KGkuZW50ZXIocCksaS5jb25zdW1lKFIpLGkuZXhpdChwKSxpLmV4aXQoZCkscyk6KGkuZW50ZXIodiksXyhSKSl9ZnVuY3Rpb24gXyhSKXtyZXR1cm4gUj09PWI/KGkuZXhpdCh2KSxUKGIpKTpSPT09bnVsbD91KFIpOnNvKFIpPyhpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKFIpLGkuZXhpdCgibGluZUVuZGluZyIpLEtsKGksXywibGluZVByZWZpeCIpKTooaS5lbnRlcigiY2h1bmtTdHJpbmciLHtjb250ZW50VHlwZToic3RyaW5nIn0pLEEoUikpfWZ1bmN0aW9uIEEoUil7cmV0dXJuIFI9PT1ifHxSPT09bnVsbHx8c28oUik/KGkuZXhpdCgiY2h1bmtTdHJpbmciKSxfKFIpKTooaS5jb25zdW1lKFIpLFI9PT05Mj9QOkEpfWZ1bmN0aW9uIFAoUil7cmV0dXJuIFI9PT1ifHxSPT09OTI/KGkuY29uc3VtZShSKSxBKTpBKFIpfX1mdW5jdGlvbiBMUihpLHMpe2xldCB1O3JldHVybiBkO2Z1bmN0aW9uIGQocCl7cmV0dXJuIHNvKHApPyhpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKHApLGkuZXhpdCgibGluZUVuZGluZyIpLHU9ITAsZCk6SXUocCk/S2woaSxkLHU/ImxpbmVQcmVmaXgiOiJsaW5lU3VmZml4IikocCk6cyhwKX19ZnVuY3Rpb24gSEQoaSl7cmV0dXJuIGkucmVwbGFjZSgvW1x0XG5cciBdKy9nLCIgIikucmVwbGFjZSgvXiB8ICQvZywiIikudG9Mb3dlckNhc2UoKS50b1VwcGVyQ2FzZSgpfWNvbnN0IGtKdD17bmFtZToiZGVmaW5pdGlvbiIsdG9rZW5pemU6VEp0fSxFSnQ9e3Rva2VuaXplOkNKdCxwYXJ0aWFsOiEwfTtmdW5jdGlvbiBUSnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztsZXQgcDtyZXR1cm4gdjtmdW5jdGlvbiB2KEYpe3JldHVybiBpLmVudGVyKCJkZWZpbml0aW9uIiksYihGKX1mdW5jdGlvbiBiKEYpe3JldHVybiBlVWUuY2FsbChkLGkseSx1LCJkZWZpbml0aW9uTGFiZWwiLCJkZWZpbml0aW9uTGFiZWxNYXJrZXIiLCJkZWZpbml0aW9uTGFiZWxTdHJpbmciKShGKX1mdW5jdGlvbiB5KEYpe3JldHVybiBwPUhEKGQuc2xpY2VTZXJpYWxpemUoZC5ldmVudHNbZC5ldmVudHMubGVuZ3RoLTFdWzFdKS5zbGljZSgxLC0xKSksRj09PTU4PyhpLmVudGVyKCJkZWZpbml0aW9uTWFya2VyIiksaS5jb25zdW1lKEYpLGkuZXhpdCgiZGVmaW5pdGlvbk1hcmtlciIpLFQpOnUoRil9ZnVuY3Rpb24gVChGKXtyZXR1cm4gejIoRik/TFIoaSxfKShGKTpfKEYpfWZ1bmN0aW9uIF8oRil7cmV0dXJuIFpWZShpLEEsdSwiZGVmaW5pdGlvbkRlc3RpbmF0aW9uIiwiZGVmaW5pdGlvbkRlc3RpbmF0aW9uTGl0ZXJhbCIsImRlZmluaXRpb25EZXN0aW5hdGlvbkxpdGVyYWxNYXJrZXIiLCJkZWZpbml0aW9uRGVzdGluYXRpb25SYXciLCJkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmciKShGKX1mdW5jdGlvbiBBKEYpe3JldHVybiBpLmF0dGVtcHQoRUp0LFAsUCkoRil9ZnVuY3Rpb24gUChGKXtyZXR1cm4gSXUoRik/S2woaSxSLCJ3aGl0ZXNwYWNlIikoRik6UihGKX1mdW5jdGlvbiBSKEYpe3JldHVybiBGPT09bnVsbHx8c28oRik/KGkuZXhpdCgiZGVmaW5pdGlvbiIpLGQucGFyc2VyLmRlZmluZWQucHVzaChwKSxzKEYpKTp1KEYpfX1mdW5jdGlvbiBDSnQoaSxzLHUpe3JldHVybiBkO2Z1bmN0aW9uIGQoeSl7cmV0dXJuIHoyKHkpP0xSKGkscCkoeSk6dSh5KX1mdW5jdGlvbiBwKHkpe3JldHVybiB0VWUoaSx2LHUsImRlZmluaXRpb25UaXRsZSIsImRlZmluaXRpb25UaXRsZU1hcmtlciIsImRlZmluaXRpb25UaXRsZVN0cmluZyIpKHkpfWZ1bmN0aW9uIHYoeSl7cmV0dXJuIEl1KHkpP0tsKGksYiwid2hpdGVzcGFjZSIpKHkpOmIoeSl9ZnVuY3Rpb24gYih5KXtyZXR1cm4geT09PW51bGx8fHNvKHkpP3MoeSk6dSh5KX19Y29uc3QgU0p0PXtuYW1lOiJoYXJkQnJlYWtFc2NhcGUiLHRva2VuaXplOl9KdH07ZnVuY3Rpb24gX0p0KGkscyx1KXtyZXR1cm4gZDtmdW5jdGlvbiBkKHYpe3JldHVybiBpLmVudGVyKCJoYXJkQnJlYWtFc2NhcGUiKSxpLmNvbnN1bWUodikscH1mdW5jdGlvbiBwKHYpe3JldHVybiBzbyh2KT8oaS5leGl0KCJoYXJkQnJlYWtFc2NhcGUiKSxzKHYpKTp1KHYpfX1jb25zdCBBSnQ9e25hbWU6ImhlYWRpbmdBdHgiLHRva2VuaXplOk1KdCxyZXNvbHZlOkxKdH07ZnVuY3Rpb24gTEp0KGkscyl7bGV0IHU9aS5sZW5ndGgtMixkPTMscCx2O3JldHVybiBpW2RdWzFdLnR5cGU9PT0id2hpdGVzcGFjZSImJihkKz0yKSx1LTI+ZCYmaVt1XVsxXS50eXBlPT09IndoaXRlc3BhY2UiJiYodS09MiksaVt1XVsxXS50eXBlPT09ImF0eEhlYWRpbmdTZXF1ZW5jZSImJihkPT09dS0xfHx1LTQ+ZCYmaVt1LTJdWzFdLnR5cGU9PT0id2hpdGVzcGFjZSIpJiYodS09ZCsxPT09dT8yOjQpLHU+ZCYmKHA9e3R5cGU6ImF0eEhlYWRpbmdUZXh0IixzdGFydDppW2RdWzFdLnN0YXJ0LGVuZDppW3VdWzFdLmVuZH0sdj17dHlwZToiY2h1bmtUZXh0IixzdGFydDppW2RdWzFdLnN0YXJ0LGVuZDppW3VdWzFdLmVuZCxjb250ZW50VHlwZToidGV4dCJ9LHQ1KGksZCx1LWQrMSxbWyJlbnRlciIscCxzXSxbImVudGVyIix2LHNdLFsiZXhpdCIsdixzXSxbImV4aXQiLHAsc11dKSksaX1mdW5jdGlvbiBNSnQoaSxzLHUpe2xldCBkPTA7cmV0dXJuIHA7ZnVuY3Rpb24gcChBKXtyZXR1cm4gaS5lbnRlcigiYXR4SGVhZGluZyIpLHYoQSl9ZnVuY3Rpb24gdihBKXtyZXR1cm4gaS5lbnRlcigiYXR4SGVhZGluZ1NlcXVlbmNlIiksYihBKX1mdW5jdGlvbiBiKEEpe3JldHVybiBBPT09MzUmJmQrKzw2PyhpLmNvbnN1bWUoQSksYik6QT09PW51bGx8fHoyKEEpPyhpLmV4aXQoImF0eEhlYWRpbmdTZXF1ZW5jZSIpLHkoQSkpOnUoQSl9ZnVuY3Rpb24geShBKXtyZXR1cm4gQT09PTM1PyhpLmVudGVyKCJhdHhIZWFkaW5nU2VxdWVuY2UiKSxUKEEpKTpBPT09bnVsbHx8c28oQSk/KGkuZXhpdCgiYXR4SGVhZGluZyIpLHMoQSkpOkl1KEEpP0tsKGkseSwid2hpdGVzcGFjZSIpKEEpOihpLmVudGVyKCJhdHhIZWFkaW5nVGV4dCIpLF8oQSkpfWZ1bmN0aW9uIFQoQSl7cmV0dXJuIEE9PT0zNT8oaS5jb25zdW1lKEEpLFQpOihpLmV4aXQoImF0eEhlYWRpbmdTZXF1ZW5jZSIpLHkoQSkpfWZ1bmN0aW9uIF8oQSl7cmV0dXJuIEE9PT1udWxsfHxBPT09MzV8fHoyKEEpPyhpLmV4aXQoImF0eEhlYWRpbmdUZXh0IikseShBKSk6KGkuY29uc3VtZShBKSxfKX19Y29uc3QgREp0PVsiYWRkcmVzcyIsImFydGljbGUiLCJhc2lkZSIsImJhc2UiLCJiYXNlZm9udCIsImJsb2NrcXVvdGUiLCJib2R5IiwiY2FwdGlvbiIsImNlbnRlciIsImNvbCIsImNvbGdyb3VwIiwiZGQiLCJkZXRhaWxzIiwiZGlhbG9nIiwiZGlyIiwiZGl2IiwiZGwiLCJkdCIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvb3RlciIsImZvcm0iLCJmcmFtZSIsImZyYW1lc2V0IiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZCIsImhlYWRlciIsImhyIiwiaHRtbCIsImlmcmFtZSIsImxlZ2VuZCIsImxpIiwibGluayIsIm1haW4iLCJtZW51IiwibWVudWl0ZW0iLCJuYXYiLCJub2ZyYW1lcyIsIm9sIiwib3B0Z3JvdXAiLCJvcHRpb24iLCJwIiwicGFyYW0iLCJzZWFyY2giLCJzZWN0aW9uIiwic3VtbWFyeSIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpdGxlIiwidHIiLCJ0cmFjayIsInVsIl0sblVlPVsicHJlIiwic2NyaXB0Iiwic3R5bGUiLCJ0ZXh0YXJlYSJdLElKdD17bmFtZToiaHRtbEZsb3ciLHRva2VuaXplOkJKdCxyZXNvbHZlVG86UEp0LGNvbmNyZXRlOiEwfSxPSnQ9e3Rva2VuaXplOlJKdCxwYXJ0aWFsOiEwfSxOSnQ9e3Rva2VuaXplOkZKdCxwYXJ0aWFsOiEwfTtmdW5jdGlvbiBQSnQoaSl7bGV0IHM9aS5sZW5ndGg7Zm9yKDtzLS0mJiEoaVtzXVswXT09PSJlbnRlciImJmlbc11bMV0udHlwZT09PSJodG1sRmxvdyIpOyk7cmV0dXJuIHM+MSYmaVtzLTJdWzFdLnR5cGU9PT0ibGluZVByZWZpeCImJihpW3NdWzFdLnN0YXJ0PWlbcy0yXVsxXS5zdGFydCxpW3MrMV1bMV0uc3RhcnQ9aVtzLTJdWzFdLnN0YXJ0LGkuc3BsaWNlKHMtMiwyKSksaX1mdW5jdGlvbiBCSnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztsZXQgcCx2LGIseSxUO3JldHVybiBfO2Z1bmN0aW9uIF8oTmUpe3JldHVybiBBKE5lKX1mdW5jdGlvbiBBKE5lKXtyZXR1cm4gaS5lbnRlcigiaHRtbEZsb3ciKSxpLmVudGVyKCJodG1sRmxvd0RhdGEiKSxpLmNvbnN1bWUoTmUpLFB9ZnVuY3Rpb24gUChOZSl7cmV0dXJuIE5lPT09MzM/KGkuY29uc3VtZShOZSksUik6TmU9PT00Nz8oaS5jb25zdW1lKE5lKSx2PSEwLEspOk5lPT09NjM/KGkuY29uc3VtZShOZSkscD0zLGQuaW50ZXJydXB0P3M6a2UpOm41KE5lKT8oaS5jb25zdW1lKE5lKSxiPVN0cmluZy5mcm9tQ2hhckNvZGUoTmUpLGVlKTp1KE5lKX1mdW5jdGlvbiBSKE5lKXtyZXR1cm4gTmU9PT00NT8oaS5jb25zdW1lKE5lKSxwPTIsRik6TmU9PT05MT8oaS5jb25zdW1lKE5lKSxwPTUseT0wLGopOm41KE5lKT8oaS5jb25zdW1lKE5lKSxwPTQsZC5pbnRlcnJ1cHQ/czprZSk6dShOZSl9ZnVuY3Rpb24gRihOZSl7cmV0dXJuIE5lPT09NDU/KGkuY29uc3VtZShOZSksZC5pbnRlcnJ1cHQ/czprZSk6dShOZSl9ZnVuY3Rpb24gaihOZSl7Y29uc3QgZ249IkNEQVRBWyI7cmV0dXJuIE5lPT09Z24uY2hhckNvZGVBdCh5KyspPyhpLmNvbnN1bWUoTmUpLHk9PT1nbi5sZW5ndGg/ZC5pbnRlcnJ1cHQ/czp4ZTpqKTp1KE5lKX1mdW5jdGlvbiBLKE5lKXtyZXR1cm4gbjUoTmUpPyhpLmNvbnN1bWUoTmUpLGI9U3RyaW5nLmZyb21DaGFyQ29kZShOZSksZWUpOnUoTmUpfWZ1bmN0aW9uIGVlKE5lKXtpZihOZT09PW51bGx8fE5lPT09NDd8fE5lPT09NjJ8fHoyKE5lKSl7Y29uc3QgZ249TmU9PT00NyxfdD1iLnRvTG93ZXJDYXNlKCk7cmV0dXJuIWduJiYhdiYmblVlLmluY2x1ZGVzKF90KT8ocD0xLGQuaW50ZXJydXB0P3MoTmUpOnhlKE5lKSk6REp0LmluY2x1ZGVzKGIudG9Mb3dlckNhc2UoKSk/KHA9Nixnbj8oaS5jb25zdW1lKE5lKSxpZSk6ZC5pbnRlcnJ1cHQ/cyhOZSk6eGUoTmUpKToocD03LGQuaW50ZXJydXB0JiYhZC5wYXJzZXIubGF6eVtkLm5vdygpLmxpbmVdP3UoTmUpOnY/b2UoTmUpOnBlKE5lKSl9cmV0dXJuIE5lPT09NDV8fEgzKE5lKT8oaS5jb25zdW1lKE5lKSxiKz1TdHJpbmcuZnJvbUNoYXJDb2RlKE5lKSxlZSk6dShOZSl9ZnVuY3Rpb24gaWUoTmUpe3JldHVybiBOZT09PTYyPyhpLmNvbnN1bWUoTmUpLGQuaW50ZXJydXB0P3M6eGUpOnUoTmUpfWZ1bmN0aW9uIG9lKE5lKXtyZXR1cm4gSXUoTmUpPyhpLmNvbnN1bWUoTmUpLG9lKTpnZShOZSl9ZnVuY3Rpb24gcGUoTmUpe3JldHVybiBOZT09PTQ3PyhpLmNvbnN1bWUoTmUpLGdlKTpOZT09PTU4fHxOZT09PTk1fHxuNShOZSk/KGkuY29uc3VtZShOZSksYmUpOkl1KE5lKT8oaS5jb25zdW1lKE5lKSxwZSk6Z2UoTmUpfWZ1bmN0aW9uIGJlKE5lKXtyZXR1cm4gTmU9PT00NXx8TmU9PT00Nnx8TmU9PT01OHx8TmU9PT05NXx8SDMoTmUpPyhpLmNvbnN1bWUoTmUpLGJlKTphZShOZSl9ZnVuY3Rpb24gYWUoTmUpe3JldHVybiBOZT09PTYxPyhpLmNvbnN1bWUoTmUpLG5lKTpJdShOZSk/KGkuY29uc3VtZShOZSksYWUpOnBlKE5lKX1mdW5jdGlvbiBuZShOZSl7cmV0dXJuIE5lPT09bnVsbHx8TmU9PT02MHx8TmU9PT02MXx8TmU9PT02Mnx8TmU9PT05Nj91KE5lKTpOZT09PTM0fHxOZT09PTM5PyhpLmNvbnN1bWUoTmUpLFQ9TmUsc2UpOkl1KE5lKT8oaS5jb25zdW1lKE5lKSxuZSk6ZGUoTmUpfWZ1bmN0aW9uIHNlKE5lKXtyZXR1cm4gTmU9PT1UPyhpLmNvbnN1bWUoTmUpLFQ9bnVsbCxYKTpOZT09PW51bGx8fHNvKE5lKT91KE5lKTooaS5jb25zdW1lKE5lKSxzZSl9ZnVuY3Rpb24gZGUoTmUpe3JldHVybiBOZT09PW51bGx8fE5lPT09MzR8fE5lPT09Mzl8fE5lPT09NDd8fE5lPT09NjB8fE5lPT09NjF8fE5lPT09NjJ8fE5lPT09OTZ8fHoyKE5lKT9hZShOZSk6KGkuY29uc3VtZShOZSksZGUpfWZ1bmN0aW9uIFgoTmUpe3JldHVybiBOZT09PTQ3fHxOZT09PTYyfHxJdShOZSk/cGUoTmUpOnUoTmUpfWZ1bmN0aW9uIGdlKE5lKXtyZXR1cm4gTmU9PT02Mj8oaS5jb25zdW1lKE5lKSxXKTp1KE5lKX1mdW5jdGlvbiBXKE5lKXtyZXR1cm4gTmU9PT1udWxsfHxzbyhOZSk/eGUoTmUpOkl1KE5lKT8oaS5jb25zdW1lKE5lKSxXKTp1KE5lKX1mdW5jdGlvbiB4ZShOZSl7cmV0dXJuIE5lPT09NDUmJnA9PT0yPyhpLmNvbnN1bWUoTmUpLGplKTpOZT09PTYwJiZwPT09MT8oaS5jb25zdW1lKE5lKSxJZSk6TmU9PT02MiYmcD09PTQ/KGkuY29uc3VtZShOZSksS2UpOk5lPT09NjMmJnA9PT0zPyhpLmNvbnN1bWUoTmUpLGtlKTpOZT09PTkzJiZwPT09NT8oaS5jb25zdW1lKE5lKSxDZSk6c28oTmUpJiYocD09PTZ8fHA9PT03KT8oaS5leGl0KCJodG1sRmxvd0RhdGEiKSxpLmNoZWNrKE9KdCxGdCxVKShOZSkpOk5lPT09bnVsbHx8c28oTmUpPyhpLmV4aXQoImh0bWxGbG93RGF0YSIpLFUoTmUpKTooaS5jb25zdW1lKE5lKSx4ZSl9ZnVuY3Rpb24gVShOZSl7cmV0dXJuIGkuY2hlY2soTkp0LEZlLEZ0KShOZSl9ZnVuY3Rpb24gRmUoTmUpe3JldHVybiBpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKE5lKSxpLmV4aXQoImxpbmVFbmRpbmciKSxQZX1mdW5jdGlvbiBQZShOZSl7cmV0dXJuIE5lPT09bnVsbHx8c28oTmUpP1UoTmUpOihpLmVudGVyKCJodG1sRmxvd0RhdGEiKSx4ZShOZSkpfWZ1bmN0aW9uIGplKE5lKXtyZXR1cm4gTmU9PT00NT8oaS5jb25zdW1lKE5lKSxrZSk6eGUoTmUpfWZ1bmN0aW9uIEllKE5lKXtyZXR1cm4gTmU9PT00Nz8oaS5jb25zdW1lKE5lKSxiPSIiLFNlKTp4ZShOZSl9ZnVuY3Rpb24gU2UoTmUpe2lmKE5lPT09NjIpe2NvbnN0IGduPWIudG9Mb3dlckNhc2UoKTtyZXR1cm4gblVlLmluY2x1ZGVzKGduKT8oaS5jb25zdW1lKE5lKSxLZSk6eGUoTmUpfXJldHVybiBuNShOZSkmJmIubGVuZ3RoPDg/KGkuY29uc3VtZShOZSksYis9U3RyaW5nLmZyb21DaGFyQ29kZShOZSksU2UpOnhlKE5lKX1mdW5jdGlvbiBDZShOZSl7cmV0dXJuIE5lPT09OTM/KGkuY29uc3VtZShOZSksa2UpOnhlKE5lKX1mdW5jdGlvbiBrZShOZSl7cmV0dXJuIE5lPT09NjI/KGkuY29uc3VtZShOZSksS2UpOk5lPT09NDUmJnA9PT0yPyhpLmNvbnN1bWUoTmUpLGtlKTp4ZShOZSl9ZnVuY3Rpb24gS2UoTmUpe3JldHVybiBOZT09PW51bGx8fHNvKE5lKT8oaS5leGl0KCJodG1sRmxvd0RhdGEiKSxGdChOZSkpOihpLmNvbnN1bWUoTmUpLEtlKX1mdW5jdGlvbiBGdChOZSl7cmV0dXJuIGkuZXhpdCgiaHRtbEZsb3ciKSxzKE5lKX19ZnVuY3Rpb24gRkp0KGkscyx1KXtjb25zdCBkPXRoaXM7cmV0dXJuIHA7ZnVuY3Rpb24gcChiKXtyZXR1cm4gc28oYik/KGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUoYiksaS5leGl0KCJsaW5lRW5kaW5nIiksdik6dShiKX1mdW5jdGlvbiB2KGIpe3JldHVybiBkLnBhcnNlci5sYXp5W2Qubm93KCkubGluZV0/dShiKTpzKGIpfX1mdW5jdGlvbiBSSnQoaSxzLHUpe3JldHVybiBkO2Z1bmN0aW9uIGQocCl7cmV0dXJuIGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUocCksaS5leGl0KCJsaW5lRW5kaW5nIiksaS5hdHRlbXB0KFlRLHMsdSl9fWNvbnN0IGpKdD17bmFtZToiaHRtbFRleHQiLHRva2VuaXplOiRKdH07ZnVuY3Rpb24gJEp0KGkscyx1KXtjb25zdCBkPXRoaXM7bGV0IHAsdixiO3JldHVybiB5O2Z1bmN0aW9uIHkoa2Upe3JldHVybiBpLmVudGVyKCJodG1sVGV4dCIpLGkuZW50ZXIoImh0bWxUZXh0RGF0YSIpLGkuY29uc3VtZShrZSksVH1mdW5jdGlvbiBUKGtlKXtyZXR1cm4ga2U9PT0zMz8oaS5jb25zdW1lKGtlKSxfKTprZT09PTQ3PyhpLmNvbnN1bWUoa2UpLGFlKTprZT09PTYzPyhpLmNvbnN1bWUoa2UpLHBlKTpuNShrZSk/KGkuY29uc3VtZShrZSksZGUpOnUoa2UpfWZ1bmN0aW9uIF8oa2Upe3JldHVybiBrZT09PTQ1PyhpLmNvbnN1bWUoa2UpLEEpOmtlPT09OTE/KGkuY29uc3VtZShrZSksdj0wLGopOm41KGtlKT8oaS5jb25zdW1lKGtlKSxvZSk6dShrZSl9ZnVuY3Rpb24gQShrZSl7cmV0dXJuIGtlPT09NDU/KGkuY29uc3VtZShrZSksRik6dShrZSl9ZnVuY3Rpb24gUChrZSl7cmV0dXJuIGtlPT09bnVsbD91KGtlKTprZT09PTQ1PyhpLmNvbnN1bWUoa2UpLFIpOnNvKGtlKT8oYj1QLEllKGtlKSk6KGkuY29uc3VtZShrZSksUCl9ZnVuY3Rpb24gUihrZSl7cmV0dXJuIGtlPT09NDU/KGkuY29uc3VtZShrZSksRik6UChrZSl9ZnVuY3Rpb24gRihrZSl7cmV0dXJuIGtlPT09NjI/amUoa2UpOmtlPT09NDU/UihrZSk6UChrZSl9ZnVuY3Rpb24gaihrZSl7Y29uc3QgS2U9IkNEQVRBWyI7cmV0dXJuIGtlPT09S2UuY2hhckNvZGVBdCh2KyspPyhpLmNvbnN1bWUoa2UpLHY9PT1LZS5sZW5ndGg/SzpqKTp1KGtlKX1mdW5jdGlvbiBLKGtlKXtyZXR1cm4ga2U9PT1udWxsP3Uoa2UpOmtlPT09OTM/KGkuY29uc3VtZShrZSksZWUpOnNvKGtlKT8oYj1LLEllKGtlKSk6KGkuY29uc3VtZShrZSksSyl9ZnVuY3Rpb24gZWUoa2Upe3JldHVybiBrZT09PTkzPyhpLmNvbnN1bWUoa2UpLGllKTpLKGtlKX1mdW5jdGlvbiBpZShrZSl7cmV0dXJuIGtlPT09NjI/amUoa2UpOmtlPT09OTM/KGkuY29uc3VtZShrZSksaWUpOksoa2UpfWZ1bmN0aW9uIG9lKGtlKXtyZXR1cm4ga2U9PT1udWxsfHxrZT09PTYyP2plKGtlKTpzbyhrZSk/KGI9b2UsSWUoa2UpKTooaS5jb25zdW1lKGtlKSxvZSl9ZnVuY3Rpb24gcGUoa2Upe3JldHVybiBrZT09PW51bGw/dShrZSk6a2U9PT02Mz8oaS5jb25zdW1lKGtlKSxiZSk6c28oa2UpPyhiPXBlLEllKGtlKSk6KGkuY29uc3VtZShrZSkscGUpfWZ1bmN0aW9uIGJlKGtlKXtyZXR1cm4ga2U9PT02Mj9qZShrZSk6cGUoa2UpfWZ1bmN0aW9uIGFlKGtlKXtyZXR1cm4gbjUoa2UpPyhpLmNvbnN1bWUoa2UpLG5lKTp1KGtlKX1mdW5jdGlvbiBuZShrZSl7cmV0dXJuIGtlPT09NDV8fEgzKGtlKT8oaS5jb25zdW1lKGtlKSxuZSk6c2Uoa2UpfWZ1bmN0aW9uIHNlKGtlKXtyZXR1cm4gc28oa2UpPyhiPXNlLEllKGtlKSk6SXUoa2UpPyhpLmNvbnN1bWUoa2UpLHNlKTpqZShrZSl9ZnVuY3Rpb24gZGUoa2Upe3JldHVybiBrZT09PTQ1fHxIMyhrZSk/KGkuY29uc3VtZShrZSksZGUpOmtlPT09NDd8fGtlPT09NjJ8fHoyKGtlKT9YKGtlKTp1KGtlKX1mdW5jdGlvbiBYKGtlKXtyZXR1cm4ga2U9PT00Nz8oaS5jb25zdW1lKGtlKSxqZSk6a2U9PT01OHx8a2U9PT05NXx8bjUoa2UpPyhpLmNvbnN1bWUoa2UpLGdlKTpzbyhrZSk/KGI9WCxJZShrZSkpOkl1KGtlKT8oaS5jb25zdW1lKGtlKSxYKTpqZShrZSl9ZnVuY3Rpb24gZ2Uoa2Upe3JldHVybiBrZT09PTQ1fHxrZT09PTQ2fHxrZT09PTU4fHxrZT09PTk1fHxIMyhrZSk/KGkuY29uc3VtZShrZSksZ2UpOlcoa2UpfWZ1bmN0aW9uIFcoa2Upe3JldHVybiBrZT09PTYxPyhpLmNvbnN1bWUoa2UpLHhlKTpzbyhrZSk/KGI9VyxJZShrZSkpOkl1KGtlKT8oaS5jb25zdW1lKGtlKSxXKTpYKGtlKX1mdW5jdGlvbiB4ZShrZSl7cmV0dXJuIGtlPT09bnVsbHx8a2U9PT02MHx8a2U9PT02MXx8a2U9PT02Mnx8a2U9PT05Nj91KGtlKTprZT09PTM0fHxrZT09PTM5PyhpLmNvbnN1bWUoa2UpLHA9a2UsVSk6c28oa2UpPyhiPXhlLEllKGtlKSk6SXUoa2UpPyhpLmNvbnN1bWUoa2UpLHhlKTooaS5jb25zdW1lKGtlKSxGZSl9ZnVuY3Rpb24gVShrZSl7cmV0dXJuIGtlPT09cD8oaS5jb25zdW1lKGtlKSxwPXZvaWQgMCxQZSk6a2U9PT1udWxsP3Uoa2UpOnNvKGtlKT8oYj1VLEllKGtlKSk6KGkuY29uc3VtZShrZSksVSl9ZnVuY3Rpb24gRmUoa2Upe3JldHVybiBrZT09PW51bGx8fGtlPT09MzR8fGtlPT09Mzl8fGtlPT09NjB8fGtlPT09NjF8fGtlPT09OTY/dShrZSk6a2U9PT00N3x8a2U9PT02Mnx8ejIoa2UpP1goa2UpOihpLmNvbnN1bWUoa2UpLEZlKX1mdW5jdGlvbiBQZShrZSl7cmV0dXJuIGtlPT09NDd8fGtlPT09NjJ8fHoyKGtlKT9YKGtlKTp1KGtlKX1mdW5jdGlvbiBqZShrZSl7cmV0dXJuIGtlPT09NjI/KGkuY29uc3VtZShrZSksaS5leGl0KCJodG1sVGV4dERhdGEiKSxpLmV4aXQoImh0bWxUZXh0Iikscyk6dShrZSl9ZnVuY3Rpb24gSWUoa2Upe3JldHVybiBpLmV4aXQoImh0bWxUZXh0RGF0YSIpLGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUoa2UpLGkuZXhpdCgibGluZUVuZGluZyIpLFNlfWZ1bmN0aW9uIFNlKGtlKXtyZXR1cm4gSXUoa2UpP0tsKGksQ2UsImxpbmVQcmVmaXgiLGQucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKT92b2lkIDA6NCkoa2UpOkNlKGtlKX1mdW5jdGlvbiBDZShrZSl7cmV0dXJuIGkuZW50ZXIoImh0bWxUZXh0RGF0YSIpLGIoa2UpfX1jb25zdCBPbWU9e25hbWU6ImxhYmVsRW5kIix0b2tlbml6ZTpHSnQscmVzb2x2ZVRvOlVKdCxyZXNvbHZlQWxsOlZKdH0sekp0PXt0b2tlbml6ZTpLSnR9LHFKdD17dG9rZW5pemU6V0p0fSxISnQ9e3Rva2VuaXplOllKdH07ZnVuY3Rpb24gVkp0KGkpe2xldCBzPS0xO2Zvcig7KytzPGkubGVuZ3RoOyl7Y29uc3QgdT1pW3NdWzFdOyh1LnR5cGU9PT0ibGFiZWxJbWFnZSJ8fHUudHlwZT09PSJsYWJlbExpbmsifHx1LnR5cGU9PT0ibGFiZWxFbmQiKSYmKGkuc3BsaWNlKHMrMSx1LnR5cGU9PT0ibGFiZWxJbWFnZSI/NDoyKSx1LnR5cGU9ImRhdGEiLHMrKyl9cmV0dXJuIGl9ZnVuY3Rpb24gVUp0KGkscyl7bGV0IHU9aS5sZW5ndGgsZD0wLHAsdixiLHk7Zm9yKDt1LS07KWlmKHA9aVt1XVsxXSx2KXtpZihwLnR5cGU9PT0ibGluayJ8fHAudHlwZT09PSJsYWJlbExpbmsiJiZwLl9pbmFjdGl2ZSlicmVhaztpW3VdWzBdPT09ImVudGVyIiYmcC50eXBlPT09ImxhYmVsTGluayImJihwLl9pbmFjdGl2ZT0hMCl9ZWxzZSBpZihiKXtpZihpW3VdWzBdPT09ImVudGVyIiYmKHAudHlwZT09PSJsYWJlbEltYWdlInx8cC50eXBlPT09ImxhYmVsTGluayIpJiYhcC5fYmFsYW5jZWQmJih2PXUscC50eXBlIT09ImxhYmVsTGluayIpKXtkPTI7YnJlYWt9fWVsc2UgcC50eXBlPT09ImxhYmVsRW5kIiYmKGI9dSk7Y29uc3QgVD17dHlwZTppW3ZdWzFdLnR5cGU9PT0ibGFiZWxMaW5rIj8ibGluayI6ImltYWdlIixzdGFydDpPYmplY3QuYXNzaWduKHt9LGlbdl1bMV0uc3RhcnQpLGVuZDpPYmplY3QuYXNzaWduKHt9LGlbaS5sZW5ndGgtMV1bMV0uZW5kKX0sXz17dHlwZToibGFiZWwiLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30saVt2XVsxXS5zdGFydCksZW5kOk9iamVjdC5hc3NpZ24oe30saVtiXVsxXS5lbmQpfSxBPXt0eXBlOiJsYWJlbFRleHQiLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30saVt2K2QrMl1bMV0uZW5kKSxlbmQ6T2JqZWN0LmFzc2lnbih7fSxpW2ItMl1bMV0uc3RhcnQpfTtyZXR1cm4geT1bWyJlbnRlciIsVCxzXSxbImVudGVyIixfLHNdXSx5PXp2KHksaS5zbGljZSh2KzEsditkKzMpKSx5PXp2KHksW1siZW50ZXIiLEEsc11dKSx5PXp2KHksTG1lKHMucGFyc2VyLmNvbnN0cnVjdHMuaW5zaWRlU3Bhbi5udWxsLGkuc2xpY2UoditkKzQsYi0zKSxzKSkseT16dih5LFtbImV4aXQiLEEsc10saVtiLTJdLGlbYi0xXSxbImV4aXQiLF8sc11dKSx5PXp2KHksaS5zbGljZShiKzEpKSx5PXp2KHksW1siZXhpdCIsVCxzXV0pLHQ1KGksdixpLmxlbmd0aCx5KSxpfWZ1bmN0aW9uIEdKdChpLHMsdSl7Y29uc3QgZD10aGlzO2xldCBwPWQuZXZlbnRzLmxlbmd0aCx2LGI7Zm9yKDtwLS07KWlmKChkLmV2ZW50c1twXVsxXS50eXBlPT09ImxhYmVsSW1hZ2UifHxkLmV2ZW50c1twXVsxXS50eXBlPT09ImxhYmVsTGluayIpJiYhZC5ldmVudHNbcF1bMV0uX2JhbGFuY2VkKXt2PWQuZXZlbnRzW3BdWzFdO2JyZWFrfXJldHVybiB5O2Z1bmN0aW9uIHkoUil7cmV0dXJuIHY/di5faW5hY3RpdmU/UChSKTooYj1kLnBhcnNlci5kZWZpbmVkLmluY2x1ZGVzKEhEKGQuc2xpY2VTZXJpYWxpemUoe3N0YXJ0OnYuZW5kLGVuZDpkLm5vdygpfSkpKSxpLmVudGVyKCJsYWJlbEVuZCIpLGkuZW50ZXIoImxhYmVsTWFya2VyIiksaS5jb25zdW1lKFIpLGkuZXhpdCgibGFiZWxNYXJrZXIiKSxpLmV4aXQoImxhYmVsRW5kIiksVCk6dShSKX1mdW5jdGlvbiBUKFIpe3JldHVybiBSPT09NDA/aS5hdHRlbXB0KHpKdCxBLGI/QTpQKShSKTpSPT09OTE/aS5hdHRlbXB0KHFKdCxBLGI/XzpQKShSKTpiP0EoUik6UChSKX1mdW5jdGlvbiBfKFIpe3JldHVybiBpLmF0dGVtcHQoSEp0LEEsUCkoUil9ZnVuY3Rpb24gQShSKXtyZXR1cm4gcyhSKX1mdW5jdGlvbiBQKFIpe3JldHVybiB2Ll9iYWxhbmNlZD0hMCx1KFIpfX1mdW5jdGlvbiBLSnQoaSxzLHUpe3JldHVybiBkO2Z1bmN0aW9uIGQoUCl7cmV0dXJuIGkuZW50ZXIoInJlc291cmNlIiksaS5lbnRlcigicmVzb3VyY2VNYXJrZXIiKSxpLmNvbnN1bWUoUCksaS5leGl0KCJyZXNvdXJjZU1hcmtlciIpLHB9ZnVuY3Rpb24gcChQKXtyZXR1cm4gejIoUCk/TFIoaSx2KShQKTp2KFApfWZ1bmN0aW9uIHYoUCl7cmV0dXJuIFA9PT00MT9BKFApOlpWZShpLGIseSwicmVzb3VyY2VEZXN0aW5hdGlvbiIsInJlc291cmNlRGVzdGluYXRpb25MaXRlcmFsIiwicmVzb3VyY2VEZXN0aW5hdGlvbkxpdGVyYWxNYXJrZXIiLCJyZXNvdXJjZURlc3RpbmF0aW9uUmF3IiwicmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZyIsMzIpKFApfWZ1bmN0aW9uIGIoUCl7cmV0dXJuIHoyKFApP0xSKGksVCkoUCk6QShQKX1mdW5jdGlvbiB5KFApe3JldHVybiB1KFApfWZ1bmN0aW9uIFQoUCl7cmV0dXJuIFA9PT0zNHx8UD09PTM5fHxQPT09NDA/dFVlKGksXyx1LCJyZXNvdXJjZVRpdGxlIiwicmVzb3VyY2VUaXRsZU1hcmtlciIsInJlc291cmNlVGl0bGVTdHJpbmciKShQKTpBKFApfWZ1bmN0aW9uIF8oUCl7cmV0dXJuIHoyKFApP0xSKGksQSkoUCk6QShQKX1mdW5jdGlvbiBBKFApe3JldHVybiBQPT09NDE/KGkuZW50ZXIoInJlc291cmNlTWFya2VyIiksaS5jb25zdW1lKFApLGkuZXhpdCgicmVzb3VyY2VNYXJrZXIiKSxpLmV4aXQoInJlc291cmNlIikscyk6dShQKX19ZnVuY3Rpb24gV0p0KGkscyx1KXtjb25zdCBkPXRoaXM7cmV0dXJuIHA7ZnVuY3Rpb24gcCh5KXtyZXR1cm4gZVVlLmNhbGwoZCxpLHYsYiwicmVmZXJlbmNlIiwicmVmZXJlbmNlTWFya2VyIiwicmVmZXJlbmNlU3RyaW5nIikoeSl9ZnVuY3Rpb24gdih5KXtyZXR1cm4gZC5wYXJzZXIuZGVmaW5lZC5pbmNsdWRlcyhIRChkLnNsaWNlU2VyaWFsaXplKGQuZXZlbnRzW2QuZXZlbnRzLmxlbmd0aC0xXVsxXSkuc2xpY2UoMSwtMSkpKT9zKHkpOnUoeSl9ZnVuY3Rpb24gYih5KXtyZXR1cm4gdSh5KX19ZnVuY3Rpb24gWUp0KGkscyx1KXtyZXR1cm4gZDtmdW5jdGlvbiBkKHYpe3JldHVybiBpLmVudGVyKCJyZWZlcmVuY2UiKSxpLmVudGVyKCJyZWZlcmVuY2VNYXJrZXIiKSxpLmNvbnN1bWUodiksaS5leGl0KCJyZWZlcmVuY2VNYXJrZXIiKSxwfWZ1bmN0aW9uIHAodil7cmV0dXJuIHY9PT05Mz8oaS5lbnRlcigicmVmZXJlbmNlTWFya2VyIiksaS5jb25zdW1lKHYpLGkuZXhpdCgicmVmZXJlbmNlTWFya2VyIiksaS5leGl0KCJyZWZlcmVuY2UiKSxzKTp1KHYpfX1jb25zdCBYSnQ9e25hbWU6ImxhYmVsU3RhcnRJbWFnZSIsdG9rZW5pemU6UUp0LHJlc29sdmVBbGw6T21lLnJlc29sdmVBbGx9O2Z1bmN0aW9uIFFKdChpLHMsdSl7Y29uc3QgZD10aGlzO3JldHVybiBwO2Z1bmN0aW9uIHAoeSl7cmV0dXJuIGkuZW50ZXIoImxhYmVsSW1hZ2UiKSxpLmVudGVyKCJsYWJlbEltYWdlTWFya2VyIiksaS5jb25zdW1lKHkpLGkuZXhpdCgibGFiZWxJbWFnZU1hcmtlciIpLHZ9ZnVuY3Rpb24gdih5KXtyZXR1cm4geT09PTkxPyhpLmVudGVyKCJsYWJlbE1hcmtlciIpLGkuY29uc3VtZSh5KSxpLmV4aXQoImxhYmVsTWFya2VyIiksaS5leGl0KCJsYWJlbEltYWdlIiksYik6dSh5KX1mdW5jdGlvbiBiKHkpe3JldHVybiB5PT09OTQmJiJfaGlkZGVuRm9vdG5vdGVTdXBwb3J0ImluIGQucGFyc2VyLmNvbnN0cnVjdHM/dSh5KTpzKHkpfX1jb25zdCBKSnQ9e25hbWU6ImxhYmVsU3RhcnRMaW5rIix0b2tlbml6ZTpaSnQscmVzb2x2ZUFsbDpPbWUucmVzb2x2ZUFsbH07ZnVuY3Rpb24gWkp0KGkscyx1KXtjb25zdCBkPXRoaXM7cmV0dXJuIHA7ZnVuY3Rpb24gcChiKXtyZXR1cm4gaS5lbnRlcigibGFiZWxMaW5rIiksaS5lbnRlcigibGFiZWxNYXJrZXIiKSxpLmNvbnN1bWUoYiksaS5leGl0KCJsYWJlbE1hcmtlciIpLGkuZXhpdCgibGFiZWxMaW5rIiksdn1mdW5jdGlvbiB2KGIpe3JldHVybiBiPT09OTQmJiJfaGlkZGVuRm9vdG5vdGVTdXBwb3J0ImluIGQucGFyc2VyLmNvbnN0cnVjdHM/dShiKTpzKGIpfX1jb25zdCBObWU9e25hbWU6ImxpbmVFbmRpbmciLHRva2VuaXplOmVadH07ZnVuY3Rpb24gZVp0KGkscyl7cmV0dXJuIHU7ZnVuY3Rpb24gdShkKXtyZXR1cm4gaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShkKSxpLmV4aXQoImxpbmVFbmRpbmciKSxLbChpLHMsImxpbmVQcmVmaXgiKX19Y29uc3QgWFE9e25hbWU6InRoZW1hdGljQnJlYWsiLHRva2VuaXplOnRadH07ZnVuY3Rpb24gdFp0KGkscyx1KXtsZXQgZD0wLHA7cmV0dXJuIHY7ZnVuY3Rpb24gdihfKXtyZXR1cm4gaS5lbnRlcigidGhlbWF0aWNCcmVhayIpLGIoXyl9ZnVuY3Rpb24gYihfKXtyZXR1cm4gcD1fLHkoXyl9ZnVuY3Rpb24geShfKXtyZXR1cm4gXz09PXA/KGkuZW50ZXIoInRoZW1hdGljQnJlYWtTZXF1ZW5jZSIpLFQoXykpOmQ+PTMmJihfPT09bnVsbHx8c28oXykpPyhpLmV4aXQoInRoZW1hdGljQnJlYWsiKSxzKF8pKTp1KF8pfWZ1bmN0aW9uIFQoXyl7cmV0dXJuIF89PT1wPyhpLmNvbnN1bWUoXyksZCsrLFQpOihpLmV4aXQoInRoZW1hdGljQnJlYWtTZXF1ZW5jZSIpLEl1KF8pP0tsKGkseSwid2hpdGVzcGFjZSIpKF8pOnkoXykpfX1jb25zdCBxMj17bmFtZToibGlzdCIsdG9rZW5pemU6aVp0LGNvbnRpbnVhdGlvbjp7dG9rZW5pemU6c1p0fSxleGl0Om9adH0sblp0PXt0b2tlbml6ZTpjWnQscGFydGlhbDohMH0sclp0PXt0b2tlbml6ZTphWnQscGFydGlhbDohMH07ZnVuY3Rpb24gaVp0KGkscyx1KXtjb25zdCBkPXRoaXMscD1kLmV2ZW50c1tkLmV2ZW50cy5sZW5ndGgtMV07bGV0IHY9cCYmcFsxXS50eXBlPT09ImxpbmVQcmVmaXgiP3BbMl0uc2xpY2VTZXJpYWxpemUocFsxXSwhMCkubGVuZ3RoOjAsYj0wO3JldHVybiB5O2Z1bmN0aW9uIHkoRil7Y29uc3Qgaj1kLmNvbnRhaW5lclN0YXRlLnR5cGV8fChGPT09NDJ8fEY9PT00M3x8Rj09PTQ1PyJsaXN0VW5vcmRlcmVkIjoibGlzdE9yZGVyZWQiKTtpZihqPT09Imxpc3RVbm9yZGVyZWQiPyFkLmNvbnRhaW5lclN0YXRlLm1hcmtlcnx8Rj09PWQuY29udGFpbmVyU3RhdGUubWFya2VyOkFtZShGKSl7aWYoZC5jb250YWluZXJTdGF0ZS50eXBlfHwoZC5jb250YWluZXJTdGF0ZS50eXBlPWosaS5lbnRlcihqLHtfY29udGFpbmVyOiEwfSkpLGo9PT0ibGlzdFVub3JkZXJlZCIpcmV0dXJuIGkuZW50ZXIoImxpc3RJdGVtUHJlZml4IiksRj09PTQyfHxGPT09NDU/aS5jaGVjayhYUSx1LF8pKEYpOl8oRik7aWYoIWQuaW50ZXJydXB0fHxGPT09NDkpcmV0dXJuIGkuZW50ZXIoImxpc3RJdGVtUHJlZml4IiksaS5lbnRlcigibGlzdEl0ZW1WYWx1ZSIpLFQoRil9cmV0dXJuIHUoRil9ZnVuY3Rpb24gVChGKXtyZXR1cm4gQW1lKEYpJiYrK2I8MTA/KGkuY29uc3VtZShGKSxUKTooIWQuaW50ZXJydXB0fHxiPDIpJiYoZC5jb250YWluZXJTdGF0ZS5tYXJrZXI/Rj09PWQuY29udGFpbmVyU3RhdGUubWFya2VyOkY9PT00MXx8Rj09PTQ2KT8oaS5leGl0KCJsaXN0SXRlbVZhbHVlIiksXyhGKSk6dShGKX1mdW5jdGlvbiBfKEYpe3JldHVybiBpLmVudGVyKCJsaXN0SXRlbU1hcmtlciIpLGkuY29uc3VtZShGKSxpLmV4aXQoImxpc3RJdGVtTWFya2VyIiksZC5jb250YWluZXJTdGF0ZS5tYXJrZXI9ZC5jb250YWluZXJTdGF0ZS5tYXJrZXJ8fEYsaS5jaGVjayhZUSxkLmludGVycnVwdD91OkEsaS5hdHRlbXB0KG5adCxSLFApKX1mdW5jdGlvbiBBKEYpe3JldHVybiBkLmNvbnRhaW5lclN0YXRlLmluaXRpYWxCbGFua0xpbmU9ITAsdisrLFIoRil9ZnVuY3Rpb24gUChGKXtyZXR1cm4gSXUoRik/KGkuZW50ZXIoImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIpLGkuY29uc3VtZShGKSxpLmV4aXQoImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIpLFIpOnUoRil9ZnVuY3Rpb24gUihGKXtyZXR1cm4gZC5jb250YWluZXJTdGF0ZS5zaXplPXYrZC5zbGljZVNlcmlhbGl6ZShpLmV4aXQoImxpc3RJdGVtUHJlZml4IiksITApLmxlbmd0aCxzKEYpfX1mdW5jdGlvbiBzWnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztyZXR1cm4gZC5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93PXZvaWQgMCxpLmNoZWNrKFlRLHAsdik7ZnVuY3Rpb24gcCh5KXtyZXR1cm4gZC5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcz1kLmNvbnRhaW5lclN0YXRlLmZ1cnRoZXJCbGFua0xpbmVzfHxkLmNvbnRhaW5lclN0YXRlLmluaXRpYWxCbGFua0xpbmUsS2woaSxzLCJsaXN0SXRlbUluZGVudCIsZC5jb250YWluZXJTdGF0ZS5zaXplKzEpKHkpfWZ1bmN0aW9uIHYoeSl7cmV0dXJuIGQuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXN8fCFJdSh5KT8oZC5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcz12b2lkIDAsZC5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lPXZvaWQgMCxiKHkpKTooZC5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcz12b2lkIDAsZC5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lPXZvaWQgMCxpLmF0dGVtcHQoclp0LHMsYikoeSkpfWZ1bmN0aW9uIGIoeSl7cmV0dXJuIGQuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdz0hMCxkLmludGVycnVwdD12b2lkIDAsS2woaSxpLmF0dGVtcHQocTIscyx1KSwibGluZVByZWZpeCIsZC5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KSh5KX19ZnVuY3Rpb24gYVp0KGkscyx1KXtjb25zdCBkPXRoaXM7cmV0dXJuIEtsKGkscCwibGlzdEl0ZW1JbmRlbnQiLGQuY29udGFpbmVyU3RhdGUuc2l6ZSsxKTtmdW5jdGlvbiBwKHYpe2NvbnN0IGI9ZC5ldmVudHNbZC5ldmVudHMubGVuZ3RoLTFdO3JldHVybiBiJiZiWzFdLnR5cGU9PT0ibGlzdEl0ZW1JbmRlbnQiJiZiWzJdLnNsaWNlU2VyaWFsaXplKGJbMV0sITApLmxlbmd0aD09PWQuY29udGFpbmVyU3RhdGUuc2l6ZT9zKHYpOnUodil9fWZ1bmN0aW9uIG9adChpKXtpLmV4aXQodGhpcy5jb250YWluZXJTdGF0ZS50eXBlKX1mdW5jdGlvbiBjWnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztyZXR1cm4gS2woaSxwLCJsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UiLGQucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKT92b2lkIDA6NCsxKTtmdW5jdGlvbiBwKHYpe2NvbnN0IGI9ZC5ldmVudHNbZC5ldmVudHMubGVuZ3RoLTFdO3JldHVybiFJdSh2KSYmYiYmYlsxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSI/cyh2KTp1KHYpfX1jb25zdCByVWU9e25hbWU6InNldGV4dFVuZGVybGluZSIsdG9rZW5pemU6bFp0LHJlc29sdmVUbzp1WnR9O2Z1bmN0aW9uIHVadChpLHMpe2xldCB1PWkubGVuZ3RoLGQscCx2O2Zvcig7dS0tOylpZihpW3VdWzBdPT09ImVudGVyIil7aWYoaVt1XVsxXS50eXBlPT09ImNvbnRlbnQiKXtkPXU7YnJlYWt9aVt1XVsxXS50eXBlPT09InBhcmFncmFwaCImJihwPXUpfWVsc2UgaVt1XVsxXS50eXBlPT09ImNvbnRlbnQiJiZpLnNwbGljZSh1LDEpLCF2JiZpW3VdWzFdLnR5cGU9PT0iZGVmaW5pdGlvbiImJih2PXUpO2NvbnN0IGI9e3R5cGU6InNldGV4dEhlYWRpbmciLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30saVtwXVsxXS5zdGFydCksZW5kOk9iamVjdC5hc3NpZ24oe30saVtpLmxlbmd0aC0xXVsxXS5lbmQpfTtyZXR1cm4gaVtwXVsxXS50eXBlPSJzZXRleHRIZWFkaW5nVGV4dCIsdj8oaS5zcGxpY2UocCwwLFsiZW50ZXIiLGIsc10pLGkuc3BsaWNlKHYrMSwwLFsiZXhpdCIsaVtkXVsxXSxzXSksaVtkXVsxXS5lbmQ9T2JqZWN0LmFzc2lnbih7fSxpW3ZdWzFdLmVuZCkpOmlbZF1bMV09YixpLnB1c2goWyJleGl0IixiLHNdKSxpfWZ1bmN0aW9uIGxadChpLHMsdSl7Y29uc3QgZD10aGlzO2xldCBwO3JldHVybiB2O2Z1bmN0aW9uIHYoXyl7bGV0IEE9ZC5ldmVudHMubGVuZ3RoLFA7Zm9yKDtBLS07KWlmKGQuZXZlbnRzW0FdWzFdLnR5cGUhPT0ibGluZUVuZGluZyImJmQuZXZlbnRzW0FdWzFdLnR5cGUhPT0ibGluZVByZWZpeCImJmQuZXZlbnRzW0FdWzFdLnR5cGUhPT0iY29udGVudCIpe1A9ZC5ldmVudHNbQV1bMV0udHlwZT09PSJwYXJhZ3JhcGgiO2JyZWFrfXJldHVybiFkLnBhcnNlci5sYXp5W2Qubm93KCkubGluZV0mJihkLmludGVycnVwdHx8UCk/KGkuZW50ZXIoInNldGV4dEhlYWRpbmdMaW5lIikscD1fLGIoXykpOnUoXyl9ZnVuY3Rpb24gYihfKXtyZXR1cm4gaS5lbnRlcigic2V0ZXh0SGVhZGluZ0xpbmVTZXF1ZW5jZSIpLHkoXyl9ZnVuY3Rpb24geShfKXtyZXR1cm4gXz09PXA/KGkuY29uc3VtZShfKSx5KTooaS5leGl0KCJzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlIiksSXUoXyk/S2woaSxULCJsaW5lU3VmZml4IikoXyk6VChfKSl9ZnVuY3Rpb24gVChfKXtyZXR1cm4gXz09PW51bGx8fHNvKF8pPyhpLmV4aXQoInNldGV4dEhlYWRpbmdMaW5lIikscyhfKSk6dShfKX19Y29uc3QgaFp0PXt0b2tlbml6ZTpmWnR9O2Z1bmN0aW9uIGZadChpKXtjb25zdCBzPXRoaXMsdT1pLmF0dGVtcHQoWVEsZCxpLmF0dGVtcHQodGhpcy5wYXJzZXIuY29uc3RydWN0cy5mbG93SW5pdGlhbCxwLEtsKGksaS5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZmxvdyxwLGkuYXR0ZW1wdChtSnQscCkpLCJsaW5lUHJlZml4IikpKTtyZXR1cm4gdTtmdW5jdGlvbiBkKHYpe2lmKHY9PT1udWxsKXtpLmNvbnN1bWUodik7cmV0dXJufXJldHVybiBpLmVudGVyKCJsaW5lRW5kaW5nQmxhbmsiKSxpLmNvbnN1bWUodiksaS5leGl0KCJsaW5lRW5kaW5nQmxhbmsiKSxzLmN1cnJlbnRDb25zdHJ1Y3Q9dm9pZCAwLHV9ZnVuY3Rpb24gcCh2KXtpZih2PT09bnVsbCl7aS5jb25zdW1lKHYpO3JldHVybn1yZXR1cm4gaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZSh2KSxpLmV4aXQoImxpbmVFbmRpbmciKSxzLmN1cnJlbnRDb25zdHJ1Y3Q9dm9pZCAwLHV9fWNvbnN0IGRadD17cmVzb2x2ZUFsbDpzVWUoKX0sZ1p0PWlVZSgic3RyaW5nIikscFp0PWlVZSgidGV4dCIpO2Z1bmN0aW9uIGlVZShpKXtyZXR1cm57dG9rZW5pemU6cyxyZXNvbHZlQWxsOnNVZShpPT09InRleHQiP2JadDp2b2lkIDApfTtmdW5jdGlvbiBzKHUpe2NvbnN0IGQ9dGhpcyxwPXRoaXMucGFyc2VyLmNvbnN0cnVjdHNbaV0sdj11LmF0dGVtcHQocCxiLHkpO3JldHVybiBiO2Z1bmN0aW9uIGIoQSl7cmV0dXJuIF8oQSk/dihBKTp5KEEpfWZ1bmN0aW9uIHkoQSl7aWYoQT09PW51bGwpe3UuY29uc3VtZShBKTtyZXR1cm59cmV0dXJuIHUuZW50ZXIoImRhdGEiKSx1LmNvbnN1bWUoQSksVH1mdW5jdGlvbiBUKEEpe3JldHVybiBfKEEpPyh1LmV4aXQoImRhdGEiKSx2KEEpKToodS5jb25zdW1lKEEpLFQpfWZ1bmN0aW9uIF8oQSl7aWYoQT09PW51bGwpcmV0dXJuITA7Y29uc3QgUD1wW0FdO2xldCBSPS0xO2lmKFApZm9yKDsrK1I8UC5sZW5ndGg7KXtjb25zdCBGPVBbUl07aWYoIUYucHJldmlvdXN8fEYucHJldmlvdXMuY2FsbChkLGQucHJldmlvdXMpKXJldHVybiEwfXJldHVybiExfX19ZnVuY3Rpb24gc1VlKGkpe3JldHVybiBzO2Z1bmN0aW9uIHModSxkKXtsZXQgcD0tMSx2O2Zvcig7KytwPD11Lmxlbmd0aDspdj09PXZvaWQgMD91W3BdJiZ1W3BdWzFdLnR5cGU9PT0iZGF0YSImJih2PXAscCsrKTooIXVbcF18fHVbcF1bMV0udHlwZSE9PSJkYXRhIikmJihwIT09disyJiYodVt2XVsxXS5lbmQ9dVtwLTFdWzFdLmVuZCx1LnNwbGljZSh2KzIscC12LTIpLHA9disyKSx2PXZvaWQgMCk7cmV0dXJuIGk/aSh1LGQpOnV9fWZ1bmN0aW9uIGJadChpLHMpe2xldCB1PTA7Zm9yKDsrK3U8PWkubGVuZ3RoOylpZigodT09PWkubGVuZ3RofHxpW3VdWzFdLnR5cGU9PT0ibGluZUVuZGluZyIpJiZpW3UtMV1bMV0udHlwZT09PSJkYXRhIil7Y29uc3QgZD1pW3UtMV1bMV0scD1zLnNsaWNlU3RyZWFtKGQpO2xldCB2PXAubGVuZ3RoLGI9LTEseT0wLFQ7Zm9yKDt2LS07KXtjb25zdCBfPXBbdl07aWYodHlwZW9mIF89PSJzdHJpbmciKXtmb3IoYj1fLmxlbmd0aDtfLmNoYXJDb2RlQXQoYi0xKT09PTMyOyl5KyssYi0tO2lmKGIpYnJlYWs7Yj0tMX1lbHNlIGlmKF89PT0tMilUPSEwLHkrKztlbHNlIGlmKF8hPT0tMSl7disrO2JyZWFrfX1pZih5KXtjb25zdCBfPXt0eXBlOnU9PT1pLmxlbmd0aHx8VHx8eTwyPyJsaW5lU3VmZml4IjoiaGFyZEJyZWFrVHJhaWxpbmciLHN0YXJ0OntsaW5lOmQuZW5kLmxpbmUsY29sdW1uOmQuZW5kLmNvbHVtbi15LG9mZnNldDpkLmVuZC5vZmZzZXQteSxfaW5kZXg6ZC5zdGFydC5faW5kZXgrdixfYnVmZmVySW5kZXg6dj9iOmQuc3RhcnQuX2J1ZmZlckluZGV4K2J9LGVuZDpPYmplY3QuYXNzaWduKHt9LGQuZW5kKX07ZC5lbmQ9T2JqZWN0LmFzc2lnbih7fSxfLnN0YXJ0KSxkLnN0YXJ0Lm9mZnNldD09PWQuZW5kLm9mZnNldD9PYmplY3QuYXNzaWduKGQsXyk6KGkuc3BsaWNlKHUsMCxbImVudGVyIixfLHNdLFsiZXhpdCIsXyxzXSksdSs9Mil9dSsrfXJldHVybiBpfWZ1bmN0aW9uIG1adChpLHMsdSl7bGV0IGQ9T2JqZWN0LmFzc2lnbih1P09iamVjdC5hc3NpZ24oe30sdSk6e2xpbmU6MSxjb2x1bW46MSxvZmZzZXQ6MH0se19pbmRleDowLF9idWZmZXJJbmRleDotMX0pO2NvbnN0IHA9e30sdj1bXTtsZXQgYj1bXSx5PVtdO2NvbnN0IFQ9e2NvbnN1bWU6b2UsZW50ZXI6cGUsZXhpdDpiZSxhdHRlbXB0OnNlKGFlKSxjaGVjazpzZShuZSksaW50ZXJydXB0OnNlKG5lLHtpbnRlcnJ1cHQ6ITB9KX0sXz17cHJldmlvdXM6bnVsbCxjb2RlOm51bGwsY29udGFpbmVyU3RhdGU6e30sZXZlbnRzOltdLHBhcnNlcjppLHNsaWNlU3RyZWFtOkYsc2xpY2VTZXJpYWxpemU6Uixub3c6aixkZWZpbmVTa2lwOkssd3JpdGU6UH07bGV0IEE9cy50b2tlbml6ZS5jYWxsKF8sVCk7cmV0dXJuIHMucmVzb2x2ZUFsbCYmdi5wdXNoKHMpLF87ZnVuY3Rpb24gUChXKXtyZXR1cm4gYj16dihiLFcpLGVlKCksYltiLmxlbmd0aC0xXSE9PW51bGw/W106KGRlKHMsMCksXy5ldmVudHM9TG1lKHYsXy5ldmVudHMsXyksXy5ldmVudHMpfWZ1bmN0aW9uIFIoVyx4ZSl7cmV0dXJuIHdadChGKFcpLHhlKX1mdW5jdGlvbiBGKFcpe3JldHVybiB2WnQoYixXKX1mdW5jdGlvbiBqKCl7Y29uc3R7bGluZTpXLGNvbHVtbjp4ZSxvZmZzZXQ6VSxfaW5kZXg6RmUsX2J1ZmZlckluZGV4OlBlfT1kO3JldHVybntsaW5lOlcsY29sdW1uOnhlLG9mZnNldDpVLF9pbmRleDpGZSxfYnVmZmVySW5kZXg6UGV9fWZ1bmN0aW9uIEsoVyl7cFtXLmxpbmVdPVcuY29sdW1uLGdlKCl9ZnVuY3Rpb24gZWUoKXtsZXQgVztmb3IoO2QuX2luZGV4PGIubGVuZ3RoOyl7Y29uc3QgeGU9YltkLl9pbmRleF07aWYodHlwZW9mIHhlPT0ic3RyaW5nIilmb3IoVz1kLl9pbmRleCxkLl9idWZmZXJJbmRleDwwJiYoZC5fYnVmZmVySW5kZXg9MCk7ZC5faW5kZXg9PT1XJiZkLl9idWZmZXJJbmRleDx4ZS5sZW5ndGg7KWllKHhlLmNoYXJDb2RlQXQoZC5fYnVmZmVySW5kZXgpKTtlbHNlIGllKHhlKX19ZnVuY3Rpb24gaWUoVyl7QT1BKFcpfWZ1bmN0aW9uIG9lKFcpe3NvKFcpPyhkLmxpbmUrKyxkLmNvbHVtbj0xLGQub2Zmc2V0Kz1XPT09LTM/MjoxLGdlKCkpOlchPT0tMSYmKGQuY29sdW1uKyssZC5vZmZzZXQrKyksZC5fYnVmZmVySW5kZXg8MD9kLl9pbmRleCsrOihkLl9idWZmZXJJbmRleCsrLGQuX2J1ZmZlckluZGV4PT09YltkLl9pbmRleF0ubGVuZ3RoJiYoZC5fYnVmZmVySW5kZXg9LTEsZC5faW5kZXgrKykpLF8ucHJldmlvdXM9V31mdW5jdGlvbiBwZShXLHhlKXtjb25zdCBVPXhlfHx7fTtyZXR1cm4gVS50eXBlPVcsVS5zdGFydD1qKCksXy5ldmVudHMucHVzaChbImVudGVyIixVLF9dKSx5LnB1c2goVSksVX1mdW5jdGlvbiBiZShXKXtjb25zdCB4ZT15LnBvcCgpO3JldHVybiB4ZS5lbmQ9aigpLF8uZXZlbnRzLnB1c2goWyJleGl0Iix4ZSxfXSkseGV9ZnVuY3Rpb24gYWUoVyx4ZSl7ZGUoVyx4ZS5mcm9tKX1mdW5jdGlvbiBuZShXLHhlKXt4ZS5yZXN0b3JlKCl9ZnVuY3Rpb24gc2UoVyx4ZSl7cmV0dXJuIFU7ZnVuY3Rpb24gVShGZSxQZSxqZSl7bGV0IEllLFNlLENlLGtlO3JldHVybiBBcnJheS5pc0FycmF5KEZlKT9GdChGZSk6InRva2VuaXplImluIEZlP0Z0KFtGZV0pOktlKEZlKTtmdW5jdGlvbiBLZShFdCl7cmV0dXJuIEd0O2Z1bmN0aW9uIEd0KGxuKXtjb25zdCB4dD1sbiE9PW51bGwmJkV0W2xuXSxQdD1sbiE9PW51bGwmJkV0Lm51bGwsUWU9Wy4uLkFycmF5LmlzQXJyYXkoeHQpP3h0Onh0P1t4dF06W10sLi4uQXJyYXkuaXNBcnJheShQdCk/UHQ6UHQ/W1B0XTpbXV07cmV0dXJuIEZ0KFFlKShsbil9fWZ1bmN0aW9uIEZ0KEV0KXtyZXR1cm4gSWU9RXQsU2U9MCxFdC5sZW5ndGg9PT0wP2plOk5lKEV0W1NlXSl9ZnVuY3Rpb24gTmUoRXQpe3JldHVybiBHdDtmdW5jdGlvbiBHdChsbil7cmV0dXJuIGtlPVgoKSxDZT1FdCxFdC5wYXJ0aWFsfHwoXy5jdXJyZW50Q29uc3RydWN0PUV0KSxFdC5uYW1lJiZfLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcyhFdC5uYW1lKT9fdCgpOkV0LnRva2VuaXplLmNhbGwoeGU/T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKF8pLHhlKTpfLFQsZ24sX3QpKGxuKX19ZnVuY3Rpb24gZ24oRXQpe3JldHVybiBXKENlLGtlKSxQZX1mdW5jdGlvbiBfdChFdCl7cmV0dXJuIGtlLnJlc3RvcmUoKSwrK1NlPEllLmxlbmd0aD9OZShJZVtTZV0pOmplfX19ZnVuY3Rpb24gZGUoVyx4ZSl7Vy5yZXNvbHZlQWxsJiYhdi5pbmNsdWRlcyhXKSYmdi5wdXNoKFcpLFcucmVzb2x2ZSYmdDUoXy5ldmVudHMseGUsXy5ldmVudHMubGVuZ3RoLXhlLFcucmVzb2x2ZShfLmV2ZW50cy5zbGljZSh4ZSksXykpLFcucmVzb2x2ZVRvJiYoXy5ldmVudHM9Vy5yZXNvbHZlVG8oXy5ldmVudHMsXykpfWZ1bmN0aW9uIFgoKXtjb25zdCBXPWooKSx4ZT1fLnByZXZpb3VzLFU9Xy5jdXJyZW50Q29uc3RydWN0LEZlPV8uZXZlbnRzLmxlbmd0aCxQZT1BcnJheS5mcm9tKHkpO3JldHVybntyZXN0b3JlOmplLGZyb206RmV9O2Z1bmN0aW9uIGplKCl7ZD1XLF8ucHJldmlvdXM9eGUsXy5jdXJyZW50Q29uc3RydWN0PVUsXy5ldmVudHMubGVuZ3RoPUZlLHk9UGUsZ2UoKX19ZnVuY3Rpb24gZ2UoKXtkLmxpbmUgaW4gcCYmZC5jb2x1bW48MiYmKGQuY29sdW1uPXBbZC5saW5lXSxkLm9mZnNldCs9cFtkLmxpbmVdLTEpfX1mdW5jdGlvbiB2WnQoaSxzKXtjb25zdCB1PXMuc3RhcnQuX2luZGV4LGQ9cy5zdGFydC5fYnVmZmVySW5kZXgscD1zLmVuZC5faW5kZXgsdj1zLmVuZC5fYnVmZmVySW5kZXg7bGV0IGI7aWYodT09PXApYj1baVt1XS5zbGljZShkLHYpXTtlbHNle2lmKGI9aS5zbGljZSh1LHApLGQ+LTEpe2NvbnN0IHk9YlswXTt0eXBlb2YgeT09InN0cmluZyI/YlswXT15LnNsaWNlKGQpOmIuc2hpZnQoKX12PjAmJmIucHVzaChpW3BdLnNsaWNlKDAsdikpfXJldHVybiBifWZ1bmN0aW9uIHdadChpLHMpe2xldCB1PS0xO2NvbnN0IGQ9W107bGV0IHA7Zm9yKDsrK3U8aS5sZW5ndGg7KXtjb25zdCB2PWlbdV07bGV0IGI7aWYodHlwZW9mIHY9PSJzdHJpbmciKWI9djtlbHNlIHN3aXRjaCh2KXtjYXNlLTU6e2I9IlxyIjticmVha31jYXNlLTQ6e2I9YApgO2JyZWFrfWNhc2UtMzp7Yj1gXHIKYDticmVha31jYXNlLTI6e2I9cz8iICI6IgkiO2JyZWFrfWNhc2UtMTp7aWYoIXMmJnApY29udGludWU7Yj0iICI7YnJlYWt9ZGVmYXVsdDpiPVN0cmluZy5mcm9tQ2hhckNvZGUodil9cD12PT09LTIsZC5wdXNoKGIpfXJldHVybiBkLmpvaW4oIiIpfWNvbnN0IHladD1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYXR0ZW50aW9uTWFya2Vyczp7bnVsbDpbNDIsOTVdfSxjb250ZW50SW5pdGlhbDp7OTE6a0p0fSxkaXNhYmxlOntudWxsOltdfSxkb2N1bWVudDp7NDI6cTIsNDM6cTIsNDU6cTIsNDg6cTIsNDk6cTIsNTA6cTIsNTE6cTIsNTI6cTIsNTM6cTIsNTQ6cTIsNTU6cTIsNTY6cTIsNTc6cTIsNjI6R1ZlfSxmbG93OnszNTpBSnQsNDI6WFEsNDU6W3JVZSxYUV0sNjA6SUp0LDYxOnJVZSw5NTpYUSw5NjpRVmUsMTI2OlFWZX0sZmxvd0luaXRpYWw6e1stMl06SW1lLFstMV06SW1lLDMyOkltZX0saW5zaWRlU3Bhbjp7bnVsbDpbTW1lLGRadF19LHN0cmluZzp7Mzg6WVZlLDkyOktWZX0sdGV4dDp7Wy01XTpObWUsWy00XTpObWUsWy0zXTpObWUsMzM6WEp0LDM4OllWZSw0MjpNbWUsNjA6W1pRdCxqSnRdLDkxOkpKdCw5MjpbU0p0LEtWZV0sOTM6T21lLDk1Ok1tZSw5NjpmSnR9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO2Z1bmN0aW9uIHhadChpKXtjb25zdCB1PUZRdChbeVp0LC4uLihpfHx7fSkuZXh0ZW5zaW9uc3x8W11dKSxkPXtkZWZpbmVkOltdLGxhenk6e30sY29uc3RydWN0czp1LGNvbnRlbnQ6cChHUXQpLGRvY3VtZW50OnAoV1F0KSxmbG93OnAoaFp0KSxzdHJpbmc6cChnWnQpLHRleHQ6cChwWnQpfTtyZXR1cm4gZDtmdW5jdGlvbiBwKHYpe3JldHVybiBiO2Z1bmN0aW9uIGIoeSl7cmV0dXJuIG1adChkLHYseSl9fX1jb25zdCBhVWU9L1tcMFx0XG5ccl0vZztmdW5jdGlvbiBrWnQoKXtsZXQgaT0xLHM9IiIsdT0hMCxkO3JldHVybiBwO2Z1bmN0aW9uIHAodixiLHkpe2NvbnN0IFQ9W107bGV0IF8sQSxQLFIsRjtmb3Iodj1zK3YudG9TdHJpbmcoYiksUD0wLHM9IiIsdSYmKHYuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiZQKyssdT12b2lkIDApO1A8di5sZW5ndGg7KXtpZihhVWUubGFzdEluZGV4PVAsXz1hVWUuZXhlYyh2KSxSPV8mJl8uaW5kZXghPT12b2lkIDA/Xy5pbmRleDp2Lmxlbmd0aCxGPXYuY2hhckNvZGVBdChSKSwhXyl7cz12LnNsaWNlKFApO2JyZWFrfWlmKEY9PT0xMCYmUD09PVImJmQpVC5wdXNoKC0zKSxkPXZvaWQgMDtlbHNlIHN3aXRjaChkJiYoVC5wdXNoKC01KSxkPXZvaWQgMCksUDxSJiYoVC5wdXNoKHYuc2xpY2UoUCxSKSksaSs9Ui1QKSxGKXtjYXNlIDA6e1QucHVzaCg2NTUzMyksaSsrO2JyZWFrfWNhc2UgOTp7Zm9yKEE9TWF0aC5jZWlsKGkvNCkqNCxULnB1c2goLTIpO2krKzxBOylULnB1c2goLTEpO2JyZWFrfWNhc2UgMTA6e1QucHVzaCgtNCksaT0xO2JyZWFrfWRlZmF1bHQ6ZD0hMCxpPTF9UD1SKzF9cmV0dXJuIHkmJihkJiZULnB1c2goLTUpLHMmJlQucHVzaChzKSxULnB1c2gobnVsbCkpLFR9fWZ1bmN0aW9uIEVadChpKXtmb3IoOyFKVmUoaSk7KTtyZXR1cm4gaX1mdW5jdGlvbiBvVWUoaSxzKXtjb25zdCB1PU51bWJlci5wYXJzZUludChpLHMpO3JldHVybiB1PDl8fHU9PT0xMXx8dT4xMyYmdTwzMnx8dT4xMjYmJnU8MTYwfHx1PjU1Mjk1JiZ1PDU3MzQ0fHx1PjY0OTc1JiZ1PDY1MDA4fHwodSY2NTUzNSk9PT02NTUzNXx8KHUmNjU1MzUpPT09NjU1MzR8fHU+MTExNDExMT8i77+9IjpTdHJpbmcuZnJvbUNoYXJDb2RlKHUpfWNvbnN0IFRadD0vXFwoWyEtLzotQFstYHstfl0pfCYoIyg/OlxkezEsN318eFtcZGEtZl17MSw2fSl8W1xkYS16XXsxLDMxfSk7L2dpO2Z1bmN0aW9uIENadChpKXtyZXR1cm4gaS5yZXBsYWNlKFRadCxTWnQpfWZ1bmN0aW9uIFNadChpLHMsdSl7aWYocylyZXR1cm4gcztpZih1LmNoYXJDb2RlQXQoMCk9PT0zNSl7Y29uc3QgcD11LmNoYXJDb2RlQXQoMSksdj1wPT09MTIwfHxwPT09ODg7cmV0dXJuIG9VZSh1LnNsaWNlKHY/MjoxKSx2PzE2OjEwKX1yZXR1cm4gRG1lKHUpfHxpfWZ1bmN0aW9uIFFRKGkpe3JldHVybiFpfHx0eXBlb2YgaSE9Im9iamVjdCI/IiI6InBvc2l0aW9uImluIGl8fCJ0eXBlImluIGk/Y1VlKGkucG9zaXRpb24pOiJzdGFydCJpbiBpfHwiZW5kImluIGk/Y1VlKGkpOiJsaW5lImluIGl8fCJjb2x1bW4iaW4gaT9QbWUoaSk6IiJ9ZnVuY3Rpb24gUG1lKGkpe3JldHVybiB1VWUoaSYmaS5saW5lKSsiOiIrdVVlKGkmJmkuY29sdW1uKX1mdW5jdGlvbiBjVWUoaSl7cmV0dXJuIFBtZShpJiZpLnN0YXJ0KSsiLSIrUG1lKGkmJmkuZW5kKX1mdW5jdGlvbiB1VWUoaSl7cmV0dXJuIGkmJnR5cGVvZiBpPT0ibnVtYmVyIj9pOjF9Y29uc3QgbFVlPXt9Lmhhc093blByb3BlcnR5LGhVZT1mdW5jdGlvbihpLHMsdSl7cmV0dXJuIHR5cGVvZiBzIT0ic3RyaW5nIiYmKHU9cyxzPXZvaWQgMCksX1p0KHUpKEVadCh4WnQodSkuZG9jdW1lbnQoKS53cml0ZShrWnQoKShpLHMsITApKSkpfTtmdW5jdGlvbiBfWnQoaSl7Y29uc3Qgcz17dHJhbnNmb3JtczpbXSxjYW5Db250YWluRW9sczpbImVtcGhhc2lzIiwiZnJhZ21lbnQiLCJoZWFkaW5nIiwicGFyYWdyYXBoIiwic3Ryb25nIl0sZW50ZXI6e2F1dG9saW5rOnkoTWEpLGF1dG9saW5rUHJvdG9jb2w6VyxhdXRvbGlua0VtYWlsOlcsYXR4SGVhZGluZzp5KHpyKSxibG9ja1F1b3RlOnkoUWUpLGNoYXJhY3RlckVzY2FwZTpXLGNoYXJhY3RlclJlZmVyZW5jZTpXLGNvZGVGZW5jZWQ6eShEdCksY29kZUZlbmNlZEZlbmNlSW5mbzpULGNvZGVGZW5jZWRGZW5jZU1ldGE6VCxjb2RlSW5kZW50ZWQ6eShEdCxUKSxjb2RlVGV4dDp5KGt0LFQpLGNvZGVUZXh0RGF0YTpXLGRhdGE6Vyxjb2RlRmxvd1ZhbHVlOlcsZGVmaW5pdGlvbjp5KE9uKSxkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6VCxkZWZpbml0aW9uTGFiZWxTdHJpbmc6VCxkZWZpbml0aW9uVGl0bGVTdHJpbmc6VCxlbXBoYXNpczp5KGh0KSxoYXJkQnJlYWtFc2NhcGU6eSh5dCksaGFyZEJyZWFrVHJhaWxpbmc6eSh5dCksaHRtbEZsb3c6eShqaSxUKSxodG1sRmxvd0RhdGE6VyxodG1sVGV4dDp5KGppLFQpLGh0bWxUZXh0RGF0YTpXLGltYWdlOnkoeGkpLGxhYmVsOlQsbGluazp5KE1hKSxsaXN0SXRlbTp5KGFvKSxsaXN0SXRlbVZhbHVlOmosbGlzdE9yZGVyZWQ6eSh6cyxGKSxsaXN0VW5vcmRlcmVkOnkoenMpLHBhcmFncmFwaDp5KFRyKSxyZWZlcmVuY2U6X3QscmVmZXJlbmNlU3RyaW5nOlQscmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZzpULHJlc291cmNlVGl0bGVTdHJpbmc6VCxzZXRleHRIZWFkaW5nOnkoenIpLHN0cm9uZzp5KEZuKSx0aGVtYXRpY0JyZWFrOnkoVW4pfSxleGl0OnthdHhIZWFkaW5nOkEoKSxhdHhIZWFkaW5nU2VxdWVuY2U6c2UsYXV0b2xpbms6QSgpLGF1dG9saW5rRW1haWw6UHQsYXV0b2xpbmtQcm90b2NvbDp4dCxibG9ja1F1b3RlOkEoKSxjaGFyYWN0ZXJFc2NhcGVWYWx1ZTp4ZSxjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJIZXhhZGVjaW1hbDpHdCxjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljOkd0LGNoYXJhY3RlclJlZmVyZW5jZVZhbHVlOmxuLGNvZGVGZW5jZWQ6QShvZSksY29kZUZlbmNlZEZlbmNlOmllLGNvZGVGZW5jZWRGZW5jZUluZm86Syxjb2RlRmVuY2VkRmVuY2VNZXRhOmVlLGNvZGVGbG93VmFsdWU6eGUsY29kZUluZGVudGVkOkEocGUpLGNvZGVUZXh0OkEoSWUpLGNvZGVUZXh0RGF0YTp4ZSxkYXRhOnhlLGRlZmluaXRpb246QSgpLGRlZmluaXRpb25EZXN0aW5hdGlvblN0cmluZzpuZSxkZWZpbml0aW9uTGFiZWxTdHJpbmc6YmUsZGVmaW5pdGlvblRpdGxlU3RyaW5nOmFlLGVtcGhhc2lzOkEoKSxoYXJkQnJlYWtFc2NhcGU6QShGZSksaGFyZEJyZWFrVHJhaWxpbmc6QShGZSksaHRtbEZsb3c6QShQZSksaHRtbEZsb3dEYXRhOnhlLGh0bWxUZXh0OkEoamUpLGh0bWxUZXh0RGF0YTp4ZSxpbWFnZTpBKENlKSxsYWJlbDpLZSxsYWJlbFRleHQ6a2UsbGluZUVuZGluZzpVLGxpbms6QShTZSksbGlzdEl0ZW06QSgpLGxpc3RPcmRlcmVkOkEoKSxsaXN0VW5vcmRlcmVkOkEoKSxwYXJhZ3JhcGg6QSgpLHJlZmVyZW5jZVN0cmluZzpFdCxyZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nOkZ0LHJlc291cmNlVGl0bGVTdHJpbmc6TmUscmVzb3VyY2U6Z24sc2V0ZXh0SGVhZGluZzpBKGdlKSxzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlOlgsc2V0ZXh0SGVhZGluZ1RleHQ6ZGUsc3Ryb25nOkEoKSx0aGVtYXRpY0JyZWFrOkEoKX19O2ZVZShzLChpfHx7fSkubWRhc3RFeHRlbnNpb25zfHxbXSk7Y29uc3QgdT17fTtyZXR1cm4gZDtmdW5jdGlvbiBkKEF0KXtsZXQgd3Q9e3R5cGU6InJvb3QiLGNoaWxkcmVuOltdfTtjb25zdCBvbj17c3RhY2s6W3d0XSx0b2tlblN0YWNrOltdLGNvbmZpZzpzLGVudGVyOl8sZXhpdDpQLGJ1ZmZlcjpULHJlc3VtZTpSLHNldERhdGE6dixnZXREYXRhOmJ9LGZuPVtdO2xldCBBbj0tMTtmb3IoOysrQW48QXQubGVuZ3RoOylpZihBdFtBbl1bMV0udHlwZT09PSJsaXN0T3JkZXJlZCJ8fEF0W0FuXVsxXS50eXBlPT09Imxpc3RVbm9yZGVyZWQiKWlmKEF0W0FuXVswXT09PSJlbnRlciIpZm4ucHVzaChBbik7ZWxzZXtjb25zdCBvbz1mbi5wb3AoKTtBbj1wKEF0LG9vLEFuKX1mb3IoQW49LTE7KytBbjxBdC5sZW5ndGg7KXtjb25zdCBvbz1zW0F0W0FuXVswXV07bFVlLmNhbGwob28sQXRbQW5dWzFdLnR5cGUpJiZvb1tBdFtBbl1bMV0udHlwZV0uY2FsbChPYmplY3QuYXNzaWduKHtzbGljZVNlcmlhbGl6ZTpBdFtBbl1bMl0uc2xpY2VTZXJpYWxpemV9LG9uKSxBdFtBbl1bMV0pfWlmKG9uLnRva2VuU3RhY2subGVuZ3RoPjApe2NvbnN0IG9vPW9uLnRva2VuU3RhY2tbb24udG9rZW5TdGFjay5sZW5ndGgtMV07KG9vWzFdfHxkVWUpLmNhbGwob24sdm9pZCAwLG9vWzBdKX1mb3Iod3QucG9zaXRpb249e3N0YXJ0Ok45KEF0Lmxlbmd0aD4wP0F0WzBdWzFdLnN0YXJ0OntsaW5lOjEsY29sdW1uOjEsb2Zmc2V0OjB9KSxlbmQ6TjkoQXQubGVuZ3RoPjA/QXRbQXQubGVuZ3RoLTJdWzFdLmVuZDp7bGluZToxLGNvbHVtbjoxLG9mZnNldDowfSl9LEFuPS0xOysrQW48cy50cmFuc2Zvcm1zLmxlbmd0aDspd3Q9cy50cmFuc2Zvcm1zW0FuXSh3dCl8fHd0O3JldHVybiB3dH1mdW5jdGlvbiBwKEF0LHd0LG9uKXtsZXQgZm49d3QtMSxBbj0tMSxvbz0hMSxqbywkbyxQYSx3bztmb3IoOysrZm48PW9uOyl7Y29uc3QgX3M9QXRbZm5dO2lmKF9zWzFdLnR5cGU9PT0ibGlzdFVub3JkZXJlZCJ8fF9zWzFdLnR5cGU9PT0ibGlzdE9yZGVyZWQifHxfc1sxXS50eXBlPT09ImJsb2NrUXVvdGUiPyhfc1swXT09PSJlbnRlciI/QW4rKzpBbi0tLHdvPXZvaWQgMCk6X3NbMV0udHlwZT09PSJsaW5lRW5kaW5nQmxhbmsiP19zWzBdPT09ImVudGVyIiYmKGpvJiYhd28mJiFBbiYmIVBhJiYoUGE9Zm4pLHdvPXZvaWQgMCk6X3NbMV0udHlwZT09PSJsaW5lUHJlZml4Inx8X3NbMV0udHlwZT09PSJsaXN0SXRlbVZhbHVlInx8X3NbMV0udHlwZT09PSJsaXN0SXRlbU1hcmtlciJ8fF9zWzFdLnR5cGU9PT0ibGlzdEl0ZW1QcmVmaXgifHxfc1sxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSJ8fCh3bz12b2lkIDApLCFBbiYmX3NbMF09PT0iZW50ZXIiJiZfc1sxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4Inx8QW49PT0tMSYmX3NbMF09PT0iZXhpdCImJihfc1sxXS50eXBlPT09Imxpc3RVbm9yZGVyZWQifHxfc1sxXS50eXBlPT09Imxpc3RPcmRlcmVkIikpe2lmKGpvKXtsZXQgdGw9Zm47Zm9yKCRvPXZvaWQgMDt0bC0tOyl7Y29uc3QgZGE9QXRbdGxdO2lmKGRhWzFdLnR5cGU9PT0ibGluZUVuZGluZyJ8fGRhWzFdLnR5cGU9PT0ibGluZUVuZGluZ0JsYW5rIil7aWYoZGFbMF09PT0iZXhpdCIpY29udGludWU7JG8mJihBdFskb11bMV0udHlwZT0ibGluZUVuZGluZ0JsYW5rIixvbz0hMCksZGFbMV0udHlwZT0ibGluZUVuZGluZyIsJG89dGx9ZWxzZSBpZighKGRhWzFdLnR5cGU9PT0ibGluZVByZWZpeCJ8fGRhWzFdLnR5cGU9PT0iYmxvY2tRdW90ZVByZWZpeCJ8fGRhWzFdLnR5cGU9PT0iYmxvY2tRdW90ZVByZWZpeFdoaXRlc3BhY2UifHxkYVsxXS50eXBlPT09ImJsb2NrUXVvdGVNYXJrZXIifHxkYVsxXS50eXBlPT09Imxpc3RJdGVtSW5kZW50IikpYnJlYWt9UGEmJighJG98fFBhPCRvKSYmKGpvLl9zcHJlYWQ9ITApLGpvLmVuZD1PYmplY3QuYXNzaWduKHt9LCRvP0F0WyRvXVsxXS5zdGFydDpfc1sxXS5lbmQpLEF0LnNwbGljZSgkb3x8Zm4sMCxbImV4aXQiLGpvLF9zWzJdXSksZm4rKyxvbisrfV9zWzFdLnR5cGU9PT0ibGlzdEl0ZW1QcmVmaXgiJiYoam89e3R5cGU6Imxpc3RJdGVtIixfc3ByZWFkOiExLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30sX3NbMV0uc3RhcnQpLGVuZDp2b2lkIDB9LEF0LnNwbGljZShmbiwwLFsiZW50ZXIiLGpvLF9zWzJdXSksZm4rKyxvbisrLFBhPXZvaWQgMCx3bz0hMCl9fXJldHVybiBBdFt3dF1bMV0uX3NwcmVhZD1vbyxvbn1mdW5jdGlvbiB2KEF0LHd0KXt1W0F0XT13dH1mdW5jdGlvbiBiKEF0KXtyZXR1cm4gdVtBdF19ZnVuY3Rpb24geShBdCx3dCl7cmV0dXJuIG9uO2Z1bmN0aW9uIG9uKGZuKXtfLmNhbGwodGhpcyxBdChmbiksZm4pLHd0JiZ3dC5jYWxsKHRoaXMsZm4pfX1mdW5jdGlvbiBUKCl7dGhpcy5zdGFjay5wdXNoKHt0eXBlOiJmcmFnbWVudCIsY2hpbGRyZW46W119KX1mdW5jdGlvbiBfKEF0LHd0LG9uKXtyZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXS5jaGlsZHJlbi5wdXNoKEF0KSx0aGlzLnN0YWNrLnB1c2goQXQpLHRoaXMudG9rZW5TdGFjay5wdXNoKFt3dCxvbl0pLEF0LnBvc2l0aW9uPXtzdGFydDpOOSh3dC5zdGFydCl9LEF0fWZ1bmN0aW9uIEEoQXQpe3JldHVybiB3dDtmdW5jdGlvbiB3dChvbil7QXQmJkF0LmNhbGwodGhpcyxvbiksUC5jYWxsKHRoaXMsb24pfX1mdW5jdGlvbiBQKEF0LHd0KXtjb25zdCBvbj10aGlzLnN0YWNrLnBvcCgpLGZuPXRoaXMudG9rZW5TdGFjay5wb3AoKTtpZihmbilmblswXS50eXBlIT09QXQudHlwZSYmKHd0P3d0LmNhbGwodGhpcyxBdCxmblswXSk6KGZuWzFdfHxkVWUpLmNhbGwodGhpcyxBdCxmblswXSkpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2xvc2UgYCIrQXQudHlwZSsiYCAoIitRUSh7c3RhcnQ6QXQuc3RhcnQsZW5kOkF0LmVuZH0pKyIpOiBpdOKAmXMgbm90IG9wZW4iKTtyZXR1cm4gb24ucG9zaXRpb24uZW5kPU45KEF0LmVuZCksb259ZnVuY3Rpb24gUigpe3JldHVybiBQUXQodGhpcy5zdGFjay5wb3AoKSl9ZnVuY3Rpb24gRigpe3YoImV4cGVjdGluZ0ZpcnN0TGlzdEl0ZW1WYWx1ZSIsITApfWZ1bmN0aW9uIGooQXQpe2lmKGIoImV4cGVjdGluZ0ZpcnN0TGlzdEl0ZW1WYWx1ZSIpKXtjb25zdCB3dD10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTJdO3d0LnN0YXJ0PU51bWJlci5wYXJzZUludCh0aGlzLnNsaWNlU2VyaWFsaXplKEF0KSwxMCksdigiZXhwZWN0aW5nRmlyc3RMaXN0SXRlbVZhbHVlIil9fWZ1bmN0aW9uIEsoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QubGFuZz1BdH1mdW5jdGlvbiBlZSgpe2NvbnN0IEF0PXRoaXMucmVzdW1lKCksd3Q9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTt3dC5tZXRhPUF0fWZ1bmN0aW9uIGllKCl7YigiZmxvd0NvZGVJbnNpZGUiKXx8KHRoaXMuYnVmZmVyKCksdigiZmxvd0NvZGVJbnNpZGUiLCEwKSl9ZnVuY3Rpb24gb2UoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudmFsdWU9QXQucmVwbGFjZSgvXihccj9cbnxccil8KFxyP1xufFxyKSQvZywiIiksdigiZmxvd0NvZGVJbnNpZGUiKX1mdW5jdGlvbiBwZSgpe2NvbnN0IEF0PXRoaXMucmVzdW1lKCksd3Q9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTt3dC52YWx1ZT1BdC5yZXBsYWNlKC8oXHI/XG58XHIpJC9nLCIiKX1mdW5jdGlvbiBiZShBdCl7Y29uc3Qgd3Q9dGhpcy5yZXN1bWUoKSxvbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO29uLmxhYmVsPXd0LG9uLmlkZW50aWZpZXI9SEQodGhpcy5zbGljZVNlcmlhbGl6ZShBdCkpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gYWUoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudGl0bGU9QXR9ZnVuY3Rpb24gbmUoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudXJsPUF0fWZ1bmN0aW9uIHNlKEF0KXtjb25zdCB3dD10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKCF3dC5kZXB0aCl7Y29uc3Qgb249dGhpcy5zbGljZVNlcmlhbGl6ZShBdCkubGVuZ3RoO3d0LmRlcHRoPW9ufX1mdW5jdGlvbiBkZSgpe3YoInNldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmciLCEwKX1mdW5jdGlvbiBYKEF0KXtjb25zdCB3dD10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO3d0LmRlcHRoPXRoaXMuc2xpY2VTZXJpYWxpemUoQXQpLmNoYXJDb2RlQXQoMCk9PT02MT8xOjJ9ZnVuY3Rpb24gZ2UoKXt2KCJzZXRleHRIZWFkaW5nU2x1cnBMaW5lRW5kaW5nIil9ZnVuY3Rpb24gVyhBdCl7Y29uc3Qgd3Q9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtsZXQgb249d3QuY2hpbGRyZW5bd3QuY2hpbGRyZW4ubGVuZ3RoLTFdOyghb258fG9uLnR5cGUhPT0idGV4dCIpJiYob249cW4oKSxvbi5wb3NpdGlvbj17c3RhcnQ6TjkoQXQuc3RhcnQpfSx3dC5jaGlsZHJlbi5wdXNoKG9uKSksdGhpcy5zdGFjay5wdXNoKG9uKX1mdW5jdGlvbiB4ZShBdCl7Y29uc3Qgd3Q9dGhpcy5zdGFjay5wb3AoKTt3dC52YWx1ZSs9dGhpcy5zbGljZVNlcmlhbGl6ZShBdCksd3QucG9zaXRpb24uZW5kPU45KEF0LmVuZCl9ZnVuY3Rpb24gVShBdCl7Y29uc3Qgd3Q9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtpZihiKCJhdEhhcmRCcmVhayIpKXtjb25zdCBvbj13dC5jaGlsZHJlblt3dC5jaGlsZHJlbi5sZW5ndGgtMV07b24ucG9zaXRpb24uZW5kPU45KEF0LmVuZCksdigiYXRIYXJkQnJlYWsiKTtyZXR1cm59IWIoInNldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmciKSYmcy5jYW5Db250YWluRW9scy5pbmNsdWRlcyh3dC50eXBlKSYmKFcuY2FsbCh0aGlzLEF0KSx4ZS5jYWxsKHRoaXMsQXQpKX1mdW5jdGlvbiBGZSgpe3YoImF0SGFyZEJyZWFrIiwhMCl9ZnVuY3Rpb24gUGUoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudmFsdWU9QXR9ZnVuY3Rpb24gamUoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudmFsdWU9QXR9ZnVuY3Rpb24gSWUoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudmFsdWU9QXR9ZnVuY3Rpb24gU2UoKXtjb25zdCBBdD10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKGIoImluUmVmZXJlbmNlIikpe2NvbnN0IHd0PWIoInJlZmVyZW5jZVR5cGUiKXx8InNob3J0Y3V0IjtBdC50eXBlKz0iUmVmZXJlbmNlIixBdC5yZWZlcmVuY2VUeXBlPXd0LGRlbGV0ZSBBdC51cmwsZGVsZXRlIEF0LnRpdGxlfWVsc2UgZGVsZXRlIEF0LmlkZW50aWZpZXIsZGVsZXRlIEF0LmxhYmVsO3YoInJlZmVyZW5jZVR5cGUiKX1mdW5jdGlvbiBDZSgpe2NvbnN0IEF0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07aWYoYigiaW5SZWZlcmVuY2UiKSl7Y29uc3Qgd3Q9YigicmVmZXJlbmNlVHlwZSIpfHwic2hvcnRjdXQiO0F0LnR5cGUrPSJSZWZlcmVuY2UiLEF0LnJlZmVyZW5jZVR5cGU9d3QsZGVsZXRlIEF0LnVybCxkZWxldGUgQXQudGl0bGV9ZWxzZSBkZWxldGUgQXQuaWRlbnRpZmllcixkZWxldGUgQXQubGFiZWw7digicmVmZXJlbmNlVHlwZSIpfWZ1bmN0aW9uIGtlKEF0KXtjb25zdCB3dD10aGlzLnNsaWNlU2VyaWFsaXplKEF0KSxvbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTJdO29uLmxhYmVsPUNadCh3dCksb24uaWRlbnRpZmllcj1IRCh3dCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBLZSgpe2NvbnN0IEF0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV0sd3Q9dGhpcy5yZXN1bWUoKSxvbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKHYoImluUmVmZXJlbmNlIiwhMCksb24udHlwZT09PSJsaW5rIil7Y29uc3QgZm49QXQuY2hpbGRyZW47b24uY2hpbGRyZW49Zm59ZWxzZSBvbi5hbHQ9d3R9ZnVuY3Rpb24gRnQoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudXJsPUF0fWZ1bmN0aW9uIE5lKCl7Y29uc3QgQXQ9dGhpcy5yZXN1bWUoKSx3dD10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO3d0LnRpdGxlPUF0fWZ1bmN0aW9uIGduKCl7digiaW5SZWZlcmVuY2UiKX1mdW5jdGlvbiBfdCgpe3YoInJlZmVyZW5jZVR5cGUiLCJjb2xsYXBzZWQiKX1mdW5jdGlvbiBFdChBdCl7Y29uc3Qgd3Q9dGhpcy5yZXN1bWUoKSxvbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO29uLmxhYmVsPXd0LG9uLmlkZW50aWZpZXI9SEQodGhpcy5zbGljZVNlcmlhbGl6ZShBdCkpLnRvTG93ZXJDYXNlKCksdigicmVmZXJlbmNlVHlwZSIsImZ1bGwiKX1mdW5jdGlvbiBHdChBdCl7digiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIsQXQudHlwZSl9ZnVuY3Rpb24gbG4oQXQpe2NvbnN0IHd0PXRoaXMuc2xpY2VTZXJpYWxpemUoQXQpLG9uPWIoImNoYXJhY3RlclJlZmVyZW5jZVR5cGUiKTtsZXQgZm47b24/KGZuPW9VZSh3dCxvbj09PSJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljIj8xMDoxNiksdigiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIpKTpmbj1EbWUod3QpO2NvbnN0IEFuPXRoaXMuc3RhY2sucG9wKCk7QW4udmFsdWUrPWZuLEFuLnBvc2l0aW9uLmVuZD1OOShBdC5lbmQpfWZ1bmN0aW9uIHh0KEF0KXt4ZS5jYWxsKHRoaXMsQXQpO2NvbnN0IHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudXJsPXRoaXMuc2xpY2VTZXJpYWxpemUoQXQpfWZ1bmN0aW9uIFB0KEF0KXt4ZS5jYWxsKHRoaXMsQXQpO2NvbnN0IHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudXJsPSJtYWlsdG86Iit0aGlzLnNsaWNlU2VyaWFsaXplKEF0KX1mdW5jdGlvbiBRZSgpe3JldHVybnt0eXBlOiJibG9ja3F1b3RlIixjaGlsZHJlbjpbXX19ZnVuY3Rpb24gRHQoKXtyZXR1cm57dHlwZToiY29kZSIsbGFuZzpudWxsLG1ldGE6bnVsbCx2YWx1ZToiIn19ZnVuY3Rpb24ga3QoKXtyZXR1cm57dHlwZToiaW5saW5lQ29kZSIsdmFsdWU6IiJ9fWZ1bmN0aW9uIE9uKCl7cmV0dXJue3R5cGU6ImRlZmluaXRpb24iLGlkZW50aWZpZXI6IiIsbGFiZWw6bnVsbCx0aXRsZTpudWxsLHVybDoiIn19ZnVuY3Rpb24gaHQoKXtyZXR1cm57dHlwZToiZW1waGFzaXMiLGNoaWxkcmVuOltdfX1mdW5jdGlvbiB6cigpe3JldHVybnt0eXBlOiJoZWFkaW5nIixkZXB0aDp2b2lkIDAsY2hpbGRyZW46W119fWZ1bmN0aW9uIHl0KCl7cmV0dXJue3R5cGU6ImJyZWFrIn19ZnVuY3Rpb24gamkoKXtyZXR1cm57dHlwZToiaHRtbCIsdmFsdWU6IiJ9fWZ1bmN0aW9uIHhpKCl7cmV0dXJue3R5cGU6ImltYWdlIix0aXRsZTpudWxsLHVybDoiIixhbHQ6bnVsbH19ZnVuY3Rpb24gTWEoKXtyZXR1cm57dHlwZToibGluayIsdGl0bGU6bnVsbCx1cmw6IiIsY2hpbGRyZW46W119fWZ1bmN0aW9uIHpzKEF0KXtyZXR1cm57dHlwZToibGlzdCIsb3JkZXJlZDpBdC50eXBlPT09Imxpc3RPcmRlcmVkIixzdGFydDpudWxsLHNwcmVhZDpBdC5fc3ByZWFkLGNoaWxkcmVuOltdfX1mdW5jdGlvbiBhbyhBdCl7cmV0dXJue3R5cGU6Imxpc3RJdGVtIixzcHJlYWQ6QXQuX3NwcmVhZCxjaGVja2VkOm51bGwsY2hpbGRyZW46W119fWZ1bmN0aW9uIFRyKCl7cmV0dXJue3R5cGU6InBhcmFncmFwaCIsY2hpbGRyZW46W119fWZ1bmN0aW9uIEZuKCl7cmV0dXJue3R5cGU6InN0cm9uZyIsY2hpbGRyZW46W119fWZ1bmN0aW9uIHFuKCl7cmV0dXJue3R5cGU6InRleHQiLHZhbHVlOiIifX1mdW5jdGlvbiBVbigpe3JldHVybnt0eXBlOiJ0aGVtYXRpY0JyZWFrIn19fWZ1bmN0aW9uIE45KGkpe3JldHVybntsaW5lOmkubGluZSxjb2x1bW46aS5jb2x1bW4sb2Zmc2V0Omkub2Zmc2V0fX1mdW5jdGlvbiBmVWUoaSxzKXtsZXQgdT0tMTtmb3IoOysrdTxzLmxlbmd0aDspe2NvbnN0IGQ9c1t1XTtBcnJheS5pc0FycmF5KGQpP2ZVZShpLGQpOkFadChpLGQpfX1mdW5jdGlvbiBBWnQoaSxzKXtsZXQgdTtmb3IodSBpbiBzKWlmKGxVZS5jYWxsKHMsdSkpe2lmKHU9PT0iY2FuQ29udGFpbkVvbHMiKXtjb25zdCBkPXNbdV07ZCYmaVt1XS5wdXNoKC4uLmQpfWVsc2UgaWYodT09PSJ0cmFuc2Zvcm1zIil7Y29uc3QgZD1zW3VdO2QmJmlbdV0ucHVzaCguLi5kKX1lbHNlIGlmKHU9PT0iZW50ZXIifHx1PT09ImV4aXQiKXtjb25zdCBkPXNbdV07ZCYmT2JqZWN0LmFzc2lnbihpW3VdLGQpfX19ZnVuY3Rpb24gZFVlKGkscyl7dGhyb3cgaT9uZXcgRXJyb3IoIkNhbm5vdCBjbG9zZSBgIitpLnR5cGUrImAgKCIrUVEoe3N0YXJ0Omkuc3RhcnQsZW5kOmkuZW5kfSkrIik6IGEgZGlmZmVyZW50IHRva2VuIChgIitzLnR5cGUrImAsICIrUVEoe3N0YXJ0OnMuc3RhcnQsZW5kOnMuZW5kfSkrIikgaXMgb3BlbiIpOm5ldyBFcnJvcigiQ2Fubm90IGNsb3NlIGRvY3VtZW50LCBhIHRva2VuIChgIitzLnR5cGUrImAsICIrUVEoe3N0YXJ0OnMuc3RhcnQsZW5kOnMuZW5kfSkrIikgaXMgc3RpbGwgb3BlbiIpfWZ1bmN0aW9uIExadChpKXtjb25zdCBzPWkucmVwbGFjZSgvXG57Mix9L2csYApgKTtyZXR1cm4gSk0ocyl9ZnVuY3Rpb24gTVp0KGkpe2NvbnN0IHM9TFp0KGkpLHtjaGlsZHJlbjp1fT1oVWUocyksZD1bW11dO2xldCBwPTA7ZnVuY3Rpb24gdihiLHk9Im5vcm1hbCIpe2IudHlwZT09PSJ0ZXh0Ij9iLnZhbHVlLnNwbGl0KGAKYCkuZm9yRWFjaCgoXyxBKT0+e0EhPT0wJiYocCsrLGQucHVzaChbXSkpLF8uc3BsaXQoIiAiKS5mb3JFYWNoKFA9PntQJiZkW3BdLnB1c2goe2NvbnRlbnQ6UCx0eXBlOnl9KX0pfSk6KGIudHlwZT09PSJzdHJvbmcifHxiLnR5cGU9PT0iZW1waGFzaXMiKSYmYi5jaGlsZHJlbi5mb3JFYWNoKFQ9Pnt2KFQsYi50eXBlKX0pfXJldHVybiB1LmZvckVhY2goYj0+e2IudHlwZT09PSJwYXJhZ3JhcGgiJiZiLmNoaWxkcmVuLmZvckVhY2goeT0+e3YoeSl9KX0pLGR9ZnVuY3Rpb24gRFp0KGkpe2NvbnN0e2NoaWxkcmVuOnN9PWhVZShpKTtmdW5jdGlvbiB1KGQpe3JldHVybiBkLnR5cGU9PT0idGV4dCI/ZC52YWx1ZS5yZXBsYWNlKC9cbi9nLCI8YnIvPiIpOmQudHlwZT09PSJzdHJvbmciP2A8c3Ryb25nPiR7ZC5jaGlsZHJlbi5tYXAodSkuam9pbigiIil9PC9zdHJvbmc+YDpkLnR5cGU9PT0iZW1waGFzaXMiP2A8ZW0+JHtkLmNoaWxkcmVuLm1hcCh1KS5qb2luKCIiKX08L2VtPmA6ZC50eXBlPT09InBhcmFncmFwaCI/YDxwPiR7ZC5jaGlsZHJlbi5tYXAodSkuam9pbigiIil9PC9wPmA6YFVuc3VwcG9ydGVkIG1hcmtkb3duOiAke2QudHlwZX1gfXJldHVybiBzLm1hcCh1KS5qb2luKCIiKX1mdW5jdGlvbiBJWnQoaSl7cmV0dXJuIEludGwuU2VnbWVudGVyP1suLi5uZXcgSW50bC5TZWdtZW50ZXIoKS5zZWdtZW50KGkpXS5tYXAocz0+cy5zZWdtZW50KTpbLi4uaV19ZnVuY3Rpb24gT1p0KGkscyl7Y29uc3QgdT1JWnQocy5jb250ZW50KTtyZXR1cm4gZ1VlKGksW10sdSxzLnR5cGUpfWZ1bmN0aW9uIGdVZShpLHMsdSxkKXtpZih1Lmxlbmd0aD09PTApcmV0dXJuW3tjb250ZW50OnMuam9pbigiIiksdHlwZTpkfSx7Y29udGVudDoiIix0eXBlOmR9XTtjb25zdFtwLC4uLnZdPXUsYj1bLi4ucyxwXTtyZXR1cm4gaShbe2NvbnRlbnQ6Yi5qb2luKCIiKSx0eXBlOmR9XSk/Z1VlKGksYix2LGQpOihzLmxlbmd0aD09PTAmJnAmJihzLnB1c2gocCksdS5zaGlmdCgpKSxbe2NvbnRlbnQ6cy5qb2luKCIiKSx0eXBlOmR9LHtjb250ZW50OnUuam9pbigiIiksdHlwZTpkfV0pfWZ1bmN0aW9uIE5adChpLHMpe2lmKGkuc29tZSgoe2NvbnRlbnQ6dX0pPT51LmluY2x1ZGVzKGAKYCkpKXRocm93IG5ldyBFcnJvcigic3BsaXRMaW5lVG9GaXRXaWR0aCBkb2VzIG5vdCBzdXBwb3J0IG5ld2xpbmVzIGluIHRoZSBsaW5lIik7cmV0dXJuIEJtZShpLHMpfWZ1bmN0aW9uIEJtZShpLHMsdT1bXSxkPVtdKXtpZihpLmxlbmd0aD09PTApcmV0dXJuIGQubGVuZ3RoPjAmJnUucHVzaChkKSx1Lmxlbmd0aD4wP3U6W107bGV0IHA9IiI7aVswXS5jb250ZW50PT09IiAiJiYocD0iICIsaS5zaGlmdCgpKTtjb25zdCB2PWkuc2hpZnQoKT8/e2NvbnRlbnQ6IiAiLHR5cGU6Im5vcm1hbCJ9LGI9Wy4uLmRdO2lmKHAhPT0iIiYmYi5wdXNoKHtjb250ZW50OnAsdHlwZToibm9ybWFsIn0pLGIucHVzaCh2KSxzKGIpKXJldHVybiBCbWUoaSxzLHUsYik7aWYoZC5sZW5ndGg+MCl1LnB1c2goZCksaS51bnNoaWZ0KHYpO2Vsc2UgaWYodi5jb250ZW50KXtjb25zdFt5LFRdPU9adChzLHYpO3UucHVzaChbeV0pLFQuY29udGVudCYmaS51bnNoaWZ0KFQpfXJldHVybiBCbWUoaSxzLHUpfWZ1bmN0aW9uIFBadChpLHMpe3MmJmkuYXR0cigic3R5bGUiLHMpfWZ1bmN0aW9uIEJadChpLHMsdSxkLHA9ITEpe2NvbnN0IHY9aS5hcHBlbmQoImZvcmVpZ25PYmplY3QiKSxiPXYuYXBwZW5kKCJ4aHRtbDpkaXYiKSx5PXMubGFiZWwsVD1zLmlzTm9kZT8ibm9kZUxhYmVsIjoiZWRnZUxhYmVsIjtiLmh0bWwoYAogICAgPHNwYW4gY2xhc3M9IiR7VH0gJHtkfSIgYCsocy5sYWJlbFN0eWxlPydzdHlsZT0iJytzLmxhYmVsU3R5bGUrJyInOiIiKSsiPiIreSsiPC9zcGFuPiIpLFBadChiLHMubGFiZWxTdHlsZSksYi5zdHlsZSgiZGlzcGxheSIsInRhYmxlLWNlbGwiKSxiLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsIm5vd3JhcCIpLGIuc3R5bGUoIm1heC13aWR0aCIsdSsicHgiKSxiLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLHAmJmIuYXR0cigiY2xhc3MiLCJsYWJlbEJrZyIpO2xldCBfPWIubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBfLndpZHRoPT09dSYmKGIuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLGIuc3R5bGUoIndoaXRlLXNwYWNlIiwiYnJlYWstc3BhY2VzIiksYi5zdHlsZSgid2lkdGgiLHUrInB4IiksXz1iLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksdi5zdHlsZSgid2lkdGgiLF8ud2lkdGgpLHYuc3R5bGUoImhlaWdodCIsXy5oZWlnaHQpLHYubm9kZSgpfWZ1bmN0aW9uIEZtZShpLHMsdSl7cmV0dXJuIGkuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoImNsYXNzIiwidGV4dC1vdXRlci10c3BhbiIpLmF0dHIoIngiLDApLmF0dHIoInkiLHMqdS0uMSsiZW0iKS5hdHRyKCJkeSIsdSsiZW0iKX1mdW5jdGlvbiBGWnQoaSxzLHUpe2NvbnN0IGQ9aS5hcHBlbmQoInRleHQiKSxwPUZtZShkLDEscyk7Um1lKHAsdSk7Y29uc3Qgdj1wLm5vZGUoKS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKTtyZXR1cm4gZC5yZW1vdmUoKSx2fWZ1bmN0aW9uIFJadChpLHMsdSl7dmFyIGI7Y29uc3QgZD1pLmFwcGVuZCgidGV4dCIpLHA9Rm1lKGQsMSxzKTtSbWUocCxbe2NvbnRlbnQ6dSx0eXBlOiJub3JtYWwifV0pO2NvbnN0IHY9KGI9cC5ub2RlKCkpPT1udWxsP3ZvaWQgMDpiLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiB2JiZkLnJlbW92ZSgpLHZ9ZnVuY3Rpb24galp0KGkscyx1LGQ9ITEpe2NvbnN0IHY9cy5hcHBlbmQoImciKSxiPXYuaW5zZXJ0KCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYWNrZ3JvdW5kIikseT12LmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLCItMTAuMSIpO2xldCBUPTA7Zm9yKGNvbnN0IF8gb2YgdSl7Y29uc3QgQT1SPT5GWnQodiwxLjEsUik8PWksUD1BKF8pP1tfXTpOWnQoXyxBKTtmb3IoY29uc3QgUiBvZiBQKXtjb25zdCBGPUZtZSh5LFQsMS4xKTtSbWUoRixSKSxUKyt9fWlmKGQpe2NvbnN0IF89eS5ub2RlKCkuZ2V0QkJveCgpLEE9MjtyZXR1cm4gYi5hdHRyKCJ4IiwtQSkuYXR0cigieSIsLUEpLmF0dHIoIndpZHRoIixfLndpZHRoKzIqQSkuYXR0cigiaGVpZ2h0IixfLmhlaWdodCsyKkEpLHYubm9kZSgpfWVsc2UgcmV0dXJuIHkubm9kZSgpfWZ1bmN0aW9uIFJtZShpLHMpe2kudGV4dCgiIikscy5mb3JFYWNoKCh1LGQpPT57Y29uc3QgcD1pLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJmb250LXN0eWxlIix1LnR5cGU9PT0iZW1waGFzaXMiPyJpdGFsaWMiOiJub3JtYWwiKS5hdHRyKCJjbGFzcyIsInRleHQtaW5uZXItdHNwYW4iKS5hdHRyKCJmb250LXdlaWdodCIsdS50eXBlPT09InN0cm9uZyI/ImJvbGQiOiJub3JtYWwiKTtkPT09MD9wLnRleHQodS5jb250ZW50KTpwLnRleHQoIiAiK3UuY29udGVudCl9KX1jb25zdCBKUT0oaSxzPSIiLHtzdHlsZTp1PSIiLGlzVGl0bGU6ZD0hMSxjbGFzc2VzOnA9IiIsdXNlSHRtbExhYmVsczp2PSEwLGlzTm9kZTpiPSEwLHdpZHRoOnk9MjAwLGFkZFN2Z0JhY2tncm91bmQ6VD0hMX09e30pPT57aWYoWGUuaW5mbygiY3JlYXRlVGV4dCIscyx1LGQscCx2LGIsVCksdil7Y29uc3QgXz1EWnQocyksQT17aXNOb2RlOmIsbGFiZWw6WkYoXykucmVwbGFjZSgvZmFbYmxyc10/OmZhLVtcdy1dKy9nLFI9PmA8aSBjbGFzcz0nJHtSLnJlcGxhY2UoIjoiLCIgIil9Jz48L2k+YCksbGFiZWxTdHlsZTp1LnJlcGxhY2UoImZpbGw6IiwiY29sb3I6Iil9O3JldHVybiBCWnQoaSxBLHkscCxUKX1lbHNle2NvbnN0IF89TVp0KHMpO3JldHVybiBqWnQoeSxpLF8sVCl9fSxnMT1hc3luYyhpLHMsdSxkKT0+e2xldCBwO2NvbnN0IHY9cy51c2VIdG1sTGFiZWxzfHxmMShxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKTt1P3A9dTpwPSJub2RlIGRlZmF1bHQiO2NvbnN0IGI9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIscCkuYXR0cigiaWQiLHMuZG9tSWR8fHMuaWQpLHk9Yi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigic3R5bGUiLHMubGFiZWxTdHlsZSk7bGV0IFQ7cy5sYWJlbFRleHQ9PT12b2lkIDA/VD0iIjpUPXR5cGVvZiBzLmxhYmVsVGV4dD09InN0cmluZyI/cy5sYWJlbFRleHQ6cy5sYWJlbFRleHRbMF07Y29uc3QgXz15Lm5vZGUoKTtsZXQgQTtzLmxhYmVsVHlwZT09PSJtYXJrZG93biI/QT1KUSh5LFlmKFpGKFQpLHF0KCkpLHt1c2VIdG1sTGFiZWxzOnYsd2lkdGg6cy53aWR0aHx8cXQoKS5mbG93Y2hhcnQud3JhcHBpbmdXaWR0aCxjbGFzc2VzOiJtYXJrZG93bi1ub2RlLWxhYmVsIn0pOkE9Xy5hcHBlbmRDaGlsZCgkMihZZihaRihUKSxxdCgpKSxzLmxhYmVsU3R5bGUsITEsZCkpO2xldCBQPUEuZ2V0QkJveCgpO2NvbnN0IFI9cy5wYWRkaW5nLzI7aWYoZjEocXQoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IEY9QS5jaGlsZHJlblswXSxqPUlyKEEpLEs9Ri5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIik7aWYoSyl7Y29uc3QgZWU9VC5yZXBsYWNlKC88aW1nW14+XSo+L2csIiIpLnRyaW0oKT09PSIiO2F3YWl0IFByb21pc2UuYWxsKFsuLi5LXS5tYXAoaWU9Pm5ldyBQcm9taXNlKG9lPT57ZnVuY3Rpb24gcGUoKXtpZihpZS5zdHlsZS5kaXNwbGF5PSJmbGV4IixpZS5zdHlsZS5mbGV4RGlyZWN0aW9uPSJjb2x1bW4iLGVlKXtjb25zdCBiZT1xdCgpLmZvbnRTaXplP3F0KCkuZm9udFNpemU6d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZm9udFNpemUsYWU9NSxuZT1wYXJzZUludChiZSwxMCkqYWUrInB4IjtpZS5zdHlsZS5taW5XaWR0aD1uZSxpZS5zdHlsZS5tYXhXaWR0aD1uZX1lbHNlIGllLnN0eWxlLndpZHRoPSIxMDAlIjtvZShpZSl9c2V0VGltZW91dCgoKT0+e2llLmNvbXBsZXRlJiZwZSgpfSksaWUuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHBlKSxpZS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixwZSl9KSkpfVA9Ri5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxqLmF0dHIoIndpZHRoIixQLndpZHRoKSxqLmF0dHIoImhlaWdodCIsUC5oZWlnaHQpfXJldHVybiB2P3kuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLVAud2lkdGgvMisiLCAiKy1QLmhlaWdodC8yKyIpIik6eS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIistUC5oZWlnaHQvMisiKSIpLHMuY2VudGVyTGFiZWwmJnkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLVAud2lkdGgvMisiLCAiKy1QLmhlaWdodC8yKyIpIikseS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx7c2hhcGVTdmc6YixiYm94OlAsaGFsZlBhZGRpbmc6UixsYWJlbDp5fX0sS2g9KGkscyk9Pntjb25zdCB1PXMubm9kZSgpLmdldEJCb3goKTtpLndpZHRoPXUud2lkdGgsaS5oZWlnaHQ9dS5oZWlnaHR9O2Z1bmN0aW9uIHI1KGkscyx1LGQpe3JldHVybiBpLmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsZC5tYXAoZnVuY3Rpb24ocCl7cmV0dXJuIHAueCsiLCIrcC55fSkuam9pbigiICIpKS5hdHRyKCJjbGFzcyIsImxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1zLzIrIiwiK3UvMisiKSIpfWxldCBNbz17fSxWMz17fSxwVWU9e307Y29uc3QgJFp0PSgpPT57VjM9e30scFVlPXt9LE1vPXt9fSxaUT0oaSxzKT0+KFhlLnRyYWNlKCJJbiBpc0Rlc2NlbmRhbnQiLHMsIiAiLGksIiA9ICIsVjNbc10uaW5jbHVkZXMoaSkpLCEhVjNbc10uaW5jbHVkZXMoaSkpLHpadD0oaSxzKT0+KFhlLmluZm8oIkRlc2NlbmRhbnRzIG9mICIscywiIGlzICIsVjNbc10pLFhlLmluZm8oIkVkZ2UgaXMgIixpKSxpLnY9PT1zfHxpLnc9PT1zPyExOlYzW3NdP1YzW3NdLmluY2x1ZGVzKGkudil8fFpRKGkudixzKXx8WlEoaS53LHMpfHxWM1tzXS5pbmNsdWRlcyhpLncpOihYZS5kZWJ1ZygiVGlsdCwgIixzLCIsbm90IGluIGRlc2NlbmRhbnRzIiksITEpKSxiVWU9KGkscyx1LGQpPT57WGUud2FybigiQ29weWluZyBjaGlsZHJlbiBvZiAiLGksInJvb3QiLGQsImRhdGEiLHMubm9kZShpKSxkKTtjb25zdCBwPXMuY2hpbGRyZW4oaSl8fFtdO2khPT1kJiZwLnB1c2goaSksWGUud2FybigiQ29weWluZyAobm9kZXMpIGNsdXN0ZXJJZCIsaSwibm9kZXMiLHApLHAuZm9yRWFjaCh2PT57aWYocy5jaGlsZHJlbih2KS5sZW5ndGg+MCliVWUodixzLHUsZCk7ZWxzZXtjb25zdCBiPXMubm9kZSh2KTtYZS5pbmZvKCJjcCAiLHYsIiB0byAiLGQsIiB3aXRoIHBhcmVudCAiLGkpLHUuc2V0Tm9kZSh2LGIpLGQhPT1zLnBhcmVudCh2KSYmKFhlLndhcm4oIlNldHRpbmcgcGFyZW50Iix2LHMucGFyZW50KHYpKSx1LnNldFBhcmVudCh2LHMucGFyZW50KHYpKSksaSE9PWQmJnYhPT1pPyhYZS5kZWJ1ZygiU2V0dGluZyBwYXJlbnQiLHYsaSksdS5zZXRQYXJlbnQodixpKSk6KFhlLmluZm8oIkluIGNvcHkgIixpLCJyb290IixkLCJkYXRhIixzLm5vZGUoaSksZCksWGUuZGVidWcoIk5vdCBTZXR0aW5nIHBhcmVudCBmb3Igbm9kZT0iLHYsImNsdXN0ZXIhPT1yb290SWQiLGkhPT1kLCJub2RlIT09Y2x1c3RlcklkIix2IT09aSkpO2NvbnN0IHk9cy5lZGdlcyh2KTtYZS5kZWJ1ZygiQ29weWluZyBFZGdlcyIseSkseS5mb3JFYWNoKFQ9PntYZS5pbmZvKCJFZGdlIixUKTtjb25zdCBfPXMuZWRnZShULnYsVC53LFQubmFtZSk7WGUuaW5mbygiRWRnZSBkYXRhIixfLGQpO3RyeXt6WnQoVCxkKT8oWGUuaW5mbygiQ29weWluZyBhcyAiLFQudixULncsXyxULm5hbWUpLHUuc2V0RWRnZShULnYsVC53LF8sVC5uYW1lKSxYZS5pbmZvKCJuZXdHcmFwaCBlZGdlcyAiLHUuZWRnZXMoKSx1LmVkZ2UodS5lZGdlcygpWzBdKSkpOlhlLmluZm8oIlNraXBwaW5nIGNvcHkgb2YgZWRnZSAiLFQudiwiLS0+IixULncsIiByb290SWQ6ICIsZCwiIGNsdXN0ZXJJZDoiLGkpfWNhdGNoKEEpe1hlLmVycm9yKEEpfX0pfVhlLmRlYnVnKCJSZW1vdmluZyBub2RlIix2KSxzLnJlbW92ZU5vZGUodil9KX0sbVVlPShpLHMpPT57Y29uc3QgdT1zLmNoaWxkcmVuKGkpO2xldCBkPVsuLi51XTtmb3IoY29uc3QgcCBvZiB1KXBVZVtwXT1pLGQ9Wy4uLmQsLi4ubVVlKHAscyldO3JldHVybiBkfSxNUj0oaSxzKT0+e1hlLnRyYWNlKCJTZWFyY2hpbmciLGkpO2NvbnN0IHU9cy5jaGlsZHJlbihpKTtpZihYZS50cmFjZSgiU2VhcmNoaW5nIGNoaWxkcmVuIG9mIGlkICIsaSx1KSx1Lmxlbmd0aDwxKXJldHVybiBYZS50cmFjZSgiVGhpcyBpcyBhIHZhbGlkIG5vZGUiLGkpLGk7Zm9yKGNvbnN0IGQgb2YgdSl7Y29uc3QgcD1NUihkLHMpO2lmKHApcmV0dXJuIFhlLnRyYWNlKCJGb3VuZCByZXBsYWNlbWVudCBmb3IiLGksIiA9PiAiLHApLHB9fSxlSj1pPT4hTW9baV18fCFNb1tpXS5leHRlcm5hbENvbm5lY3Rpb25zP2k6TW9baV0/TW9baV0uaWQ6aSxxWnQ9KGkscyk9PntpZighaXx8cz4xMCl7WGUuZGVidWcoIk9wdGluZyBvdXQsIG5vIGdyYXBoICIpO3JldHVybn1lbHNlIFhlLmRlYnVnKCJPcHRpbmcgaW4sIGdyYXBoICIpO2kubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe2kuY2hpbGRyZW4odSkubGVuZ3RoPjAmJihYZS53YXJuKCJDbHVzdGVyIGlkZW50aWZpZWQiLHUsIiBSZXBsYWNlbWVudCBpZCBpbiBlZGdlczogIixNUih1LGkpKSxWM1t1XT1tVWUodSxpKSxNb1t1XT17aWQ6TVIodSxpKSxjbHVzdGVyRGF0YTppLm5vZGUodSl9KX0pLGkubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe2NvbnN0IGQ9aS5jaGlsZHJlbih1KSxwPWkuZWRnZXMoKTtkLmxlbmd0aD4wPyhYZS5kZWJ1ZygiQ2x1c3RlciBpZGVudGlmaWVkIix1LFYzKSxwLmZvckVhY2godj0+e2lmKHYudiE9PXUmJnYudyE9PXUpe2NvbnN0IGI9WlEodi52LHUpLHk9WlEodi53LHUpO2JeeSYmKFhlLndhcm4oIkVkZ2U6ICIsdiwiIGxlYXZlcyBjbHVzdGVyICIsdSksWGUud2FybigiRGVzY2VuZGFudHMgb2YgWFhYICIsdSwiOiAiLFYzW3VdKSxNb1t1XS5leHRlcm5hbENvbm5lY3Rpb25zPSEwKX19KSk6WGUuZGVidWcoIk5vdCBhIGNsdXN0ZXIgIix1LFYzKX0pO2ZvcihsZXQgdSBvZiBPYmplY3Qua2V5cyhNbykpe2NvbnN0IGQ9TW9bdV0uaWQscD1pLnBhcmVudChkKTtwIT09dSYmTW9bcF0mJiFNb1twXS5leHRlcm5hbENvbm5lY3Rpb25zJiYoTW9bdV0uaWQ9cCl9aS5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24odSl7Y29uc3QgZD1pLmVkZ2UodSk7WGUud2FybigiRWRnZSAiK3UudisiIC0+ICIrdS53KyI6ICIrSlNPTi5zdHJpbmdpZnkodSkpLFhlLndhcm4oIkVkZ2UgIit1LnYrIiAtPiAiK3UudysiOiAiK0pTT04uc3RyaW5naWZ5KGkuZWRnZSh1KSkpO2xldCBwPXUudix2PXUudztpZihYZS53YXJuKCJGaXggWFhYIixNbywiaWRzOiIsdS52LHUudywiVHJhbnNsYXRpbmc6ICIsTW9bdS52XSwiIC0tLSAiLE1vW3Uud10pLE1vW3Uudl0mJk1vW3Uud10mJk1vW3Uudl09PT1Nb1t1LnddKXtYZS53YXJuKCJGaXhpbmcgYW5kIHRyaXhpbmcgbGluayB0byBzZWxmIC0gcmVtb3ZpbmcgWFhYIix1LnYsdS53LHUubmFtZSksWGUud2FybigiRml4aW5nIGFuZCB0cml4aW5nIC0gcmVtb3ZpbmcgWFhYIix1LnYsdS53LHUubmFtZSkscD1lSih1LnYpLHY9ZUoodS53KSxpLnJlbW92ZUVkZ2UodS52LHUudyx1Lm5hbWUpO2NvbnN0IGI9dS53KyItLS0iK3UudjtpLnNldE5vZGUoYix7ZG9tSWQ6YixpZDpiLGxhYmVsU3R5bGU6IiIsbGFiZWxUZXh0OmQubGFiZWwscGFkZGluZzowLHNoYXBlOiJsYWJlbFJlY3QiLHN0eWxlOiIifSk7Y29uc3QgeT1zdHJ1Y3R1cmVkQ2xvbmUoZCksVD1zdHJ1Y3R1cmVkQ2xvbmUoZCk7eS5sYWJlbD0iIix5LmFycm93VHlwZUVuZD0ibm9uZSIsVC5sYWJlbD0iIix5LmZyb21DbHVzdGVyPXUudixULnRvQ2x1c3Rlcj11LnYsaS5zZXRFZGdlKHAsYix5LHUubmFtZSsiLWN5Y2xpYy1zcGVjaWFsIiksaS5zZXRFZGdlKGIsdixULHUubmFtZSsiLWN5Y2xpYy1zcGVjaWFsIil9ZWxzZSBpZihNb1t1LnZdfHxNb1t1LnddKXtpZihYZS53YXJuKCJGaXhpbmcgYW5kIHRyaXhpbmcgLSByZW1vdmluZyBYWFgiLHUudix1LncsdS5uYW1lKSxwPWVKKHUudiksdj1lSih1LncpLGkucmVtb3ZlRWRnZSh1LnYsdS53LHUubmFtZSkscCE9PXUudil7Y29uc3QgYj1pLnBhcmVudChwKTtNb1tiXS5leHRlcm5hbENvbm5lY3Rpb25zPSEwLGQuZnJvbUNsdXN0ZXI9dS52fWlmKHYhPT11Lncpe2NvbnN0IGI9aS5wYXJlbnQodik7TW9bYl0uZXh0ZXJuYWxDb25uZWN0aW9ucz0hMCxkLnRvQ2x1c3Rlcj11Lnd9WGUud2FybigiRml4IFJlcGxhY2luZyB3aXRoIFhYWCIscCx2LHUubmFtZSksaS5zZXRFZGdlKHAsdixkLHUubmFtZSl9fSksWGUud2FybigiQWRqdXN0ZWQgR3JhcGgiLHE3KGkpKSx2VWUoaSwwKSxYZS50cmFjZShNbyl9LHZVZT0oaSxzKT0+e2lmKFhlLndhcm4oImV4dHJhY3RvciAtICIscyxxNyhpKSxpLmNoaWxkcmVuKCJEIikpLHM+MTApe1hlLmVycm9yKCJCYWlsaW5nIG91dCIpO3JldHVybn1sZXQgdT1pLm5vZGVzKCksZD0hMTtmb3IoY29uc3QgcCBvZiB1KXtjb25zdCB2PWkuY2hpbGRyZW4ocCk7ZD1kfHx2Lmxlbmd0aD4wfWlmKCFkKXtYZS5kZWJ1ZygiRG9uZSwgbm8gbm9kZSBoYXMgY2hpbGRyZW4iLGkubm9kZXMoKSk7cmV0dXJufVhlLmRlYnVnKCJOb2RlcyA9ICIsdSxzKTtmb3IoY29uc3QgcCBvZiB1KWlmKFhlLmRlYnVnKCJFeHRyYWN0aW5nIG5vZGUiLHAsTW8sTW9bcF0mJiFNb1twXS5leHRlcm5hbENvbm5lY3Rpb25zLCFpLnBhcmVudChwKSxpLm5vZGUocCksaS5jaGlsZHJlbigiRCIpLCIgRGVwdGggIixzKSwhTW9bcF0pWGUuZGVidWcoIk5vdCBhIGNsdXN0ZXIiLHAscyk7ZWxzZSBpZighTW9bcF0uZXh0ZXJuYWxDb25uZWN0aW9ucyYmaS5jaGlsZHJlbihwKSYmaS5jaGlsZHJlbihwKS5sZW5ndGg+MCl7WGUud2FybigiQ2x1c3RlciB3aXRob3V0IGV4dGVybmFsIGNvbm5lY3Rpb25zLCB3aXRob3V0IGEgcGFyZW50IGFuZCB3aXRoIGNoaWxkcmVuIixwLHMpO2xldCBiPWkuZ3JhcGgoKS5yYW5rZGlyPT09IlRCIj8iTFIiOiJUQiI7TW9bcF0mJk1vW3BdLmNsdXN0ZXJEYXRhJiZNb1twXS5jbHVzdGVyRGF0YS5kaXImJihiPU1vW3BdLmNsdXN0ZXJEYXRhLmRpcixYZS53YXJuKCJGaXhpbmcgZGlyIixNb1twXS5jbHVzdGVyRGF0YS5kaXIsYikpO2NvbnN0IHk9bmV3IEIwKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6Yixub2Rlc2VwOjUwLHJhbmtzZXA6NTAsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO1hlLndhcm4oIk9sZCBncmFwaCBiZWZvcmUgY29weSIscTcoaSkpLGJVZShwLGkseSxwKSxpLnNldE5vZGUocCx7Y2x1c3Rlck5vZGU6ITAsaWQ6cCxjbHVzdGVyRGF0YTpNb1twXS5jbHVzdGVyRGF0YSxsYWJlbFRleHQ6TW9bcF0ubGFiZWxUZXh0LGdyYXBoOnl9KSxYZS53YXJuKCJOZXcgZ3JhcGggYWZ0ZXIgY29weSBub2RlOiAoIixwLCIpIixxNyh5KSksWGUuZGVidWcoIk9sZCBncmFwaCBhZnRlciBjb3B5IixxNyhpKSl9ZWxzZSBYZS53YXJuKCJDbHVzdGVyICoqICIscCwiICoqbm90IG1lZXRpbmcgdGhlIGNyaXRlcmlhICFleHRlcm5hbENvbm5lY3Rpb25zOiIsIU1vW3BdLmV4dGVybmFsQ29ubmVjdGlvbnMsIiBubyBwYXJlbnQ6ICIsIWkucGFyZW50KHApLCIgY2hpbGRyZW4gIixpLmNoaWxkcmVuKHApJiZpLmNoaWxkcmVuKHApLmxlbmd0aD4wLGkuY2hpbGRyZW4oIkQiKSxzKSxYZS5kZWJ1ZyhNbyk7dT1pLm5vZGVzKCksWGUud2FybigiTmV3IGxpc3Qgb2Ygbm9kZXMiLHUpO2Zvcihjb25zdCBwIG9mIHUpe2NvbnN0IHY9aS5ub2RlKHApO1hlLndhcm4oIiBOb3cgbmV4dCBsZXZlbCIscCx2KSx2LmNsdXN0ZXJOb2RlJiZ2VWUodi5ncmFwaCxzKzEpfX0sd1VlPShpLHMpPT57aWYocy5sZW5ndGg9PT0wKXJldHVybltdO2xldCB1PU9iamVjdC5hc3NpZ24ocyk7cmV0dXJuIHMuZm9yRWFjaChkPT57Y29uc3QgcD1pLmNoaWxkcmVuKGQpLHY9d1VlKGkscCk7dT1bLi4udSwuLi52XX0pLHV9LEhadD1pPT53VWUoaSxpLmNoaWxkcmVuKCkpO2Z1bmN0aW9uIFZadChpLHMpe3JldHVybiBpLmludGVyc2VjdChzKX1mdW5jdGlvbiB5VWUoaSxzLHUsZCl7dmFyIHA9aS54LHY9aS55LGI9cC1kLngseT12LWQueSxUPU1hdGguc3FydChzKnMqeSp5K3UqdSpiKmIpLF89TWF0aC5hYnMocyp1KmIvVCk7ZC54PHAmJihfPS1fKTt2YXIgQT1NYXRoLmFicyhzKnUqeS9UKTtyZXR1cm4gZC55PHYmJihBPS1BKSx7eDpwK18seTp2K0F9fWZ1bmN0aW9uIFVadChpLHMsdSl7cmV0dXJuIHlVZShpLHMscyx1KX1mdW5jdGlvbiBHWnQoaSxzLHUsZCl7dmFyIHAsdixiLHksVCxfLEEsUCxSLEYsaixLLGVlLGllLG9lO2lmKHA9cy55LWkueSxiPWkueC1zLngsVD1zLngqaS55LWkueCpzLnksUj1wKnUueCtiKnUueStULEY9cCpkLngrYipkLnkrVCwhKFIhPT0wJiZGIT09MCYmeFVlKFIsRikpJiYodj1kLnktdS55LHk9dS54LWQueCxfPWQueCp1LnktdS54KmQueSxBPXYqaS54K3kqaS55K18sUD12KnMueCt5KnMueStfLCEoQSE9PTAmJlAhPT0wJiZ4VWUoQSxQKSkmJihqPXAqeS12KmIsaiE9PTApKSlyZXR1cm4gSz1NYXRoLmFicyhqLzIpLGVlPWIqXy15KlQsaWU9ZWU8MD8oZWUtSykvajooZWUrSykvaixlZT12KlQtcCpfLG9lPWVlPDA/KGVlLUspL2o6KGVlK0spL2ose3g6aWUseTpvZX19ZnVuY3Rpb24geFVlKGkscyl7cmV0dXJuIGkqcz4wfWZ1bmN0aW9uIEtadChpLHMsdSl7dmFyIGQ9aS54LHA9aS55LHY9W10sYj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkseT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7dHlwZW9mIHMuZm9yRWFjaD09ImZ1bmN0aW9uIj9zLmZvckVhY2goZnVuY3Rpb24oail7Yj1NYXRoLm1pbihiLGoueCkseT1NYXRoLm1pbih5LGoueSl9KTooYj1NYXRoLm1pbihiLHMueCkseT1NYXRoLm1pbih5LHMueSkpO2Zvcih2YXIgVD1kLWkud2lkdGgvMi1iLF89cC1pLmhlaWdodC8yLXksQT0wO0E8cy5sZW5ndGg7QSsrKXt2YXIgUD1zW0FdLFI9c1tBPHMubGVuZ3RoLTE/QSsxOjBdLEY9R1p0KGksdSx7eDpUK1AueCx5Ol8rUC55fSx7eDpUK1IueCx5Ol8rUi55fSk7RiYmdi5wdXNoKEYpfXJldHVybiB2Lmxlbmd0aD8odi5sZW5ndGg+MSYmdi5zb3J0KGZ1bmN0aW9uKGosSyl7dmFyIGVlPWoueC11LngsaWU9ai55LXUueSxvZT1NYXRoLnNxcnQoZWUqZWUraWUqaWUpLHBlPUsueC11LngsYmU9Sy55LXUueSxhZT1NYXRoLnNxcnQocGUqcGUrYmUqYmUpO3JldHVybiBvZTxhZT8tMTpvZT09PWFlPzA6MX0pLHZbMF0pOml9Y29uc3QgRFI9KGkscyk9Pnt2YXIgdT1pLngsZD1pLnkscD1zLngtdSx2PXMueS1kLGI9aS53aWR0aC8yLHk9aS5oZWlnaHQvMixULF87cmV0dXJuIE1hdGguYWJzKHYpKmI+TWF0aC5hYnMocCkqeT8odjwwJiYoeT0teSksVD12PT09MD8wOnkqcC92LF89eSk6KHA8MCYmKGI9LWIpLFQ9YixfPXA9PT0wPzA6Yip2L3ApLHt4OnUrVCx5OmQrX319LHloPXtub2RlOlZadCxjaXJjbGU6VVp0LGVsbGlwc2U6eVVlLHBvbHlnb246S1p0LHJlY3Q6RFJ9LFdadD1hc3luYyhpLHMpPT57cy51c2VIdG1sTGFiZWxzfHxxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzfHwocy5jZW50ZXJMYWJlbD0hMCk7Y29uc3R7c2hhcGVTdmc6ZCxiYm94OnAsaGFsZlBhZGRpbmc6dn09YXdhaXQgZzEoaSxzLCJub2RlICIrcy5jbGFzc2VzLCEwKTtYZS5pbmZvKCJDbGFzc2VzID0gIixzLmNsYXNzZXMpO2NvbnN0IGI9ZC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gYi5hdHRyKCJyeCIscy5yeCkuYXR0cigicnkiLHMucnkpLmF0dHIoIngiLC1wLndpZHRoLzItdikuYXR0cigieSIsLXAuaGVpZ2h0LzItdikuYXR0cigid2lkdGgiLHAud2lkdGgrcy5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHAuaGVpZ2h0K3MucGFkZGluZyksS2gocyxiKSxzLmludGVyc2VjdD1mdW5jdGlvbih5KXtyZXR1cm4geWgucmVjdChzLHkpfSxkfSxZWnQ9aT0+e2NvbnN0IHM9bmV3IFNldDtmb3IoY29uc3QgdSBvZiBpKXN3aXRjaCh1KXtjYXNlIngiOnMuYWRkKCJyaWdodCIpLHMuYWRkKCJsZWZ0Iik7YnJlYWs7Y2FzZSJ5IjpzLmFkZCgidXAiKSxzLmFkZCgiZG93biIpO2JyZWFrO2RlZmF1bHQ6cy5hZGQodSk7YnJlYWt9cmV0dXJuIHN9LFhadD0oaSxzLHUpPT57Y29uc3QgZD1ZWnQoaSkscD0yLHY9cy5oZWlnaHQrMip1LnBhZGRpbmcsYj12L3AseT1zLndpZHRoKzIqYit1LnBhZGRpbmcsVD11LnBhZGRpbmcvMjtyZXR1cm4gZC5oYXMoInJpZ2h0IikmJmQuaGFzKCJsZWZ0IikmJmQuaGFzKCJ1cCIpJiZkLmhhcygiZG93biIpP1t7eDowLHk6MH0se3g6Yix5OjB9LHt4OnkvMix5OjIqVH0se3g6eS1iLHk6MH0se3g6eSx5OjB9LHt4OnkseTotdi8zfSx7eDp5KzIqVCx5Oi12LzJ9LHt4OnkseTotMip2LzN9LHt4OnkseTotdn0se3g6eS1iLHk6LXZ9LHt4OnkvMix5Oi12LTIqVH0se3g6Yix5Oi12fSx7eDowLHk6LXZ9LHt4OjAseTotMip2LzN9LHt4Oi0yKlQseTotdi8yfSx7eDowLHk6LXYvM31dOmQuaGFzKCJyaWdodCIpJiZkLmhhcygibGVmdCIpJiZkLmhhcygidXAiKT9be3g6Yix5OjB9LHt4OnktYix5OjB9LHt4OnkseTotdi8yfSx7eDp5LWIseTotdn0se3g6Yix5Oi12fSx7eDowLHk6LXYvMn1dOmQuaGFzKCJyaWdodCIpJiZkLmhhcygibGVmdCIpJiZkLmhhcygiZG93biIpP1t7eDowLHk6MH0se3g6Yix5Oi12fSx7eDp5LWIseTotdn0se3g6eSx5OjB9XTpkLmhhcygicmlnaHQiKSYmZC5oYXMoInVwIikmJmQuaGFzKCJkb3duIik/W3t4OjAseTowfSx7eDp5LHk6LWJ9LHt4OnkseTotditifSx7eDowLHk6LXZ9XTpkLmhhcygibGVmdCIpJiZkLmhhcygidXAiKSYmZC5oYXMoImRvd24iKT9be3g6eSx5OjB9LHt4OjAseTotYn0se3g6MCx5Oi12K2J9LHt4OnkseTotdn1dOmQuaGFzKCJyaWdodCIpJiZkLmhhcygibGVmdCIpP1t7eDpiLHk6MH0se3g6Yix5Oi1UfSx7eDp5LWIseTotVH0se3g6eS1iLHk6MH0se3g6eSx5Oi12LzJ9LHt4OnktYix5Oi12fSx7eDp5LWIseTotditUfSx7eDpiLHk6LXYrVH0se3g6Yix5Oi12fSx7eDowLHk6LXYvMn1dOmQuaGFzKCJ1cCIpJiZkLmhhcygiZG93biIpP1t7eDp5LzIseTowfSx7eDowLHk6LVR9LHt4OmIseTotVH0se3g6Yix5Oi12K1R9LHt4OjAseTotditUfSx7eDp5LzIseTotdn0se3g6eSx5Oi12K1R9LHt4OnktYix5Oi12K1R9LHt4OnktYix5Oi1UfSx7eDp5LHk6LVR9XTpkLmhhcygicmlnaHQiKSYmZC5oYXMoInVwIik/W3t4OjAseTowfSx7eDp5LHk6LWJ9LHt4OjAseTotdn1dOmQuaGFzKCJyaWdodCIpJiZkLmhhcygiZG93biIpP1t7eDowLHk6MH0se3g6eSx5OjB9LHt4OjAseTotdn1dOmQuaGFzKCJsZWZ0IikmJmQuaGFzKCJ1cCIpP1t7eDp5LHk6MH0se3g6MCx5Oi1ifSx7eDp5LHk6LXZ9XTpkLmhhcygibGVmdCIpJiZkLmhhcygiZG93biIpP1t7eDp5LHk6MH0se3g6MCx5OjB9LHt4OnkseTotdn1dOmQuaGFzKCJyaWdodCIpP1t7eDpiLHk6LVR9LHt4OmIseTotVH0se3g6eS1iLHk6LVR9LHt4OnktYix5OjB9LHt4OnkseTotdi8yfSx7eDp5LWIseTotdn0se3g6eS1iLHk6LXYrVH0se3g6Yix5Oi12K1R9LHt4OmIseTotditUfV06ZC5oYXMoImxlZnQiKT9be3g6Yix5OjB9LHt4OmIseTotVH0se3g6eS1iLHk6LVR9LHt4OnktYix5Oi12K1R9LHt4OmIseTotditUfSx7eDpiLHk6LXZ9LHt4OjAseTotdi8yfV06ZC5oYXMoInVwIik/W3t4OmIseTotVH0se3g6Yix5Oi12K1R9LHt4OjAseTotditUfSx7eDp5LzIseTotdn0se3g6eSx5Oi12K1R9LHt4OnktYix5Oi12K1R9LHt4OnktYix5Oi1UfV06ZC5oYXMoImRvd24iKT9be3g6eS8yLHk6MH0se3g6MCx5Oi1UfSx7eDpiLHk6LVR9LHt4OmIseTotditUfSx7eDp5LWIseTotditUfSx7eDp5LWIseTotVH0se3g6eSx5Oi1UfV06W3t4OjAseTowfV19LGtVZT1pPT5pPyIgIitpOiIiLGRtPShpLHMpPT5gJHtzfHwibm9kZSBkZWZhdWx0In0ke2tVZShpLmNsYXNzZXMpfSAke2tVZShpLmNsYXNzKX1gLEVVZT1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmR9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHA9ZC53aWR0aCtzLnBhZGRpbmcsdj1kLmhlaWdodCtzLnBhZGRpbmcsYj1wK3YseT1be3g6Yi8yLHk6MH0se3g6Yix5Oi1iLzJ9LHt4OmIvMix5Oi1ifSx7eDowLHk6LWIvMn1dO1hlLmluZm8oIlF1ZXN0aW9uIG1haW4gKENpcmNsZSkiKTtjb25zdCBUPXI1KHUsYixiLHkpO3JldHVybiBULmF0dHIoInN0eWxlIixzLnN0eWxlKSxLaChzLFQpLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKF8pe3JldHVybiBYZS53YXJuKCJJbnRlcnNlY3QgY2FsbGVkIikseWgucG9seWdvbihzLHksXyl9LHV9LFFadD0oaSxzKT0+e2NvbnN0IHU9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixzLmRvbUlkfHxzLmlkKSxkPTI4LHA9W3t4OjAseTpkLzJ9LHt4OmQvMix5OjB9LHt4OjAseTotZC8yfSx7eDotZC8yLHk6MH1dO3JldHVybiB1Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIscC5tYXAoZnVuY3Rpb24oYil7cmV0dXJuIGIueCsiLCIrYi55fSkuam9pbigiICIpKS5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDI4KS5hdHRyKCJoZWlnaHQiLDI4KSxzLndpZHRoPTI4LHMuaGVpZ2h0PTI4LHMuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiB5aC5jaXJjbGUocywxNCxiKX0sdX0sSlp0PWFzeW5jKGkscyk9Pntjb25zdHtzaGFwZVN2Zzp1LGJib3g6ZH09YXdhaXQgZzEoaSxzLGRtKHMsdm9pZCAwKSwhMCkscD00LHY9ZC5oZWlnaHQrcy5wYWRkaW5nLGI9di9wLHk9ZC53aWR0aCsyKmIrcy5wYWRkaW5nLFQ9W3t4OmIseTowfSx7eDp5LWIseTowfSx7eDp5LHk6LXYvMn0se3g6eS1iLHk6LXZ9LHt4OmIseTotdn0se3g6MCx5Oi12LzJ9XSxfPXI1KHUseSx2LFQpO3JldHVybiBfLmF0dHIoInN0eWxlIixzLnN0eWxlKSxLaChzLF8pLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKEEpe3JldHVybiB5aC5wb2x5Z29uKHMsVCxBKX0sdX0sWlp0PWFzeW5jKGkscyk9Pntjb25zdHtzaGFwZVN2Zzp1LGJib3g6ZH09YXdhaXQgZzEoaSxzLHZvaWQgMCwhMCkscD0yLHY9ZC5oZWlnaHQrMipzLnBhZGRpbmcsYj12L3AseT1kLndpZHRoKzIqYitzLnBhZGRpbmcsVD1YWnQocy5kaXJlY3Rpb25zLGQscyksXz1yNSh1LHksdixUKTtyZXR1cm4gXy5hdHRyKCJzdHlsZSIscy5zdHlsZSksS2gocyxfKSxzLmludGVyc2VjdD1mdW5jdGlvbihBKXtyZXR1cm4geWgucG9seWdvbihzLFQsQSl9LHV9LGVlbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmR9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHA9ZC53aWR0aCtzLnBhZGRpbmcsdj1kLmhlaWdodCtzLnBhZGRpbmcsYj1be3g6LXYvMix5OjB9LHt4OnAseTowfSx7eDpwLHk6LXZ9LHt4Oi12LzIseTotdn0se3g6MCx5Oi12LzJ9XTtyZXR1cm4gcjUodSxwLHYsYikuYXR0cigic3R5bGUiLHMuc3R5bGUpLHMud2lkdGg9cCt2LHMuaGVpZ2h0PXYscy5pbnRlcnNlY3Q9ZnVuY3Rpb24oVCl7cmV0dXJuIHloLnBvbHlnb24ocyxiLFQpfSx1fSx0ZW49YXN5bmMoaSxzKT0+e2NvbnN0e3NoYXBlU3ZnOnUsYmJveDpkfT1hd2FpdCBnMShpLHMsZG0ocyksITApLHA9ZC53aWR0aCtzLnBhZGRpbmcsdj1kLmhlaWdodCtzLnBhZGRpbmcsYj1be3g6LTIqdi82LHk6MH0se3g6cC12LzYseTowfSx7eDpwKzIqdi82LHk6LXZ9LHt4OnYvNix5Oi12fV0seT1yNSh1LHAsdixiKTtyZXR1cm4geS5hdHRyKCJzdHlsZSIscy5zdHlsZSksS2gocyx5KSxzLmludGVyc2VjdD1mdW5jdGlvbihUKXtyZXR1cm4geWgucG9seWdvbihzLGIsVCl9LHV9LG5lbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmR9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHA9ZC53aWR0aCtzLnBhZGRpbmcsdj1kLmhlaWdodCtzLnBhZGRpbmcsYj1be3g6Mip2LzYseTowfSx7eDpwK3YvNix5OjB9LHt4OnAtMip2LzYseTotdn0se3g6LXYvNix5Oi12fV0seT1yNSh1LHAsdixiKTtyZXR1cm4geS5hdHRyKCJzdHlsZSIscy5zdHlsZSksS2gocyx5KSxzLmludGVyc2VjdD1mdW5jdGlvbihUKXtyZXR1cm4geWgucG9seWdvbihzLGIsVCl9LHV9LHJlbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmR9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHA9ZC53aWR0aCtzLnBhZGRpbmcsdj1kLmhlaWdodCtzLnBhZGRpbmcsYj1be3g6LTIqdi82LHk6MH0se3g6cCsyKnYvNix5OjB9LHt4OnAtdi82LHk6LXZ9LHt4OnYvNix5Oi12fV0seT1yNSh1LHAsdixiKTtyZXR1cm4geS5hdHRyKCJzdHlsZSIscy5zdHlsZSksS2gocyx5KSxzLmludGVyc2VjdD1mdW5jdGlvbihUKXtyZXR1cm4geWgucG9seWdvbihzLGIsVCl9LHV9LGllbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmR9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHA9ZC53aWR0aCtzLnBhZGRpbmcsdj1kLmhlaWdodCtzLnBhZGRpbmcsYj1be3g6di82LHk6MH0se3g6cC12LzYseTowfSx7eDpwKzIqdi82LHk6LXZ9LHt4Oi0yKnYvNix5Oi12fV0seT1yNSh1LHAsdixiKTtyZXR1cm4geS5hdHRyKCJzdHlsZSIscy5zdHlsZSksS2gocyx5KSxzLmludGVyc2VjdD1mdW5jdGlvbihUKXtyZXR1cm4geWgucG9seWdvbihzLGIsVCl9LHV9LHNlbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmR9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHA9ZC53aWR0aCtzLnBhZGRpbmcsdj1kLmhlaWdodCtzLnBhZGRpbmcsYj1be3g6MCx5OjB9LHt4OnArdi8yLHk6MH0se3g6cCx5Oi12LzJ9LHt4OnArdi8yLHk6LXZ9LHt4OjAseTotdn1dLHk9cjUodSxwLHYsYik7cmV0dXJuIHkuYXR0cigic3R5bGUiLHMuc3R5bGUpLEtoKHMseSkscy5pbnRlcnNlY3Q9ZnVuY3Rpb24oVCl7cmV0dXJuIHloLnBvbHlnb24ocyxiLFQpfSx1fSxhZW49YXN5bmMoaSxzKT0+e2NvbnN0e3NoYXBlU3ZnOnUsYmJveDpkfT1hd2FpdCBnMShpLHMsZG0ocyx2b2lkIDApLCEwKSxwPWQud2lkdGgrcy5wYWRkaW5nLHY9cC8yLGI9di8oMi41K3AvNTApLHk9ZC5oZWlnaHQrYitzLnBhZGRpbmcsVD0iTSAwLCIrYisiIGEgIit2KyIsIitiKyIgMCwwLDAgIitwKyIgMCBhICIrdisiLCIrYisiIDAsMCwwICIrLXArIiAwIGwgMCwiK3krIiBhICIrdisiLCIrYisiIDAsMCwwICIrcCsiIDAgbCAwLCIrLXksXz11LmF0dHIoImxhYmVsLW9mZnNldC15IixiKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJzdHlsZSIscy5zdHlsZSkuYXR0cigiZCIsVCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXAvMisiLCIrLSh5LzIrYikrIikiKTtyZXR1cm4gS2gocyxfKSxzLmludGVyc2VjdD1mdW5jdGlvbihBKXtjb25zdCBQPXloLnJlY3QocyxBKSxSPVAueC1zLng7aWYodiE9MCYmKE1hdGguYWJzKFIpPHMud2lkdGgvMnx8TWF0aC5hYnMoUik9PXMud2lkdGgvMiYmTWF0aC5hYnMoUC55LXMueSk+cy5oZWlnaHQvMi1iKSl7bGV0IEY9YipiKigxLVIqUi8odip2KSk7RiE9MCYmKEY9TWF0aC5zcXJ0KEYpKSxGPWItRixBLnktcy55PjAmJihGPS1GKSxQLnkrPUZ9cmV0dXJuIFB9LHV9LG9lbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmQsaGFsZlBhZGRpbmc6cH09YXdhaXQgZzEoaSxzLCJub2RlICIrcy5jbGFzc2VzKyIgIitzLmNsYXNzLCEwKSx2PXUuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksYj1zLnBvc2l0aW9uZWQ/cy53aWR0aDpkLndpZHRoK3MucGFkZGluZyx5PXMucG9zaXRpb25lZD9zLmhlaWdodDpkLmhlaWdodCtzLnBhZGRpbmcsVD1zLnBvc2l0aW9uZWQ/LWIvMjotZC53aWR0aC8yLXAsXz1zLnBvc2l0aW9uZWQ/LXkvMjotZC5oZWlnaHQvMi1wO2lmKHYuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIscy5zdHlsZSkuYXR0cigicngiLHMucngpLmF0dHIoInJ5IixzLnJ5KS5hdHRyKCJ4IixUKS5hdHRyKCJ5IixfKS5hdHRyKCJ3aWR0aCIsYikuYXR0cigiaGVpZ2h0Iix5KSxzLnByb3BzKXtjb25zdCBBPW5ldyBTZXQoT2JqZWN0LmtleXMocy5wcm9wcykpO3MucHJvcHMuYm9yZGVycyYmKGptZSh2LHMucHJvcHMuYm9yZGVycyxiLHkpLEEuZGVsZXRlKCJib3JkZXJzIikpLEEuZm9yRWFjaChQPT57WGUud2FybihgVW5rbm93biBub2RlIHByb3BlcnR5ICR7UH1gKX0pfXJldHVybiBLaChzLHYpLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKEEpe3JldHVybiB5aC5yZWN0KHMsQSl9LHV9LGNlbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmQsaGFsZlBhZGRpbmc6cH09YXdhaXQgZzEoaSxzLCJub2RlICIrcy5jbGFzc2VzLCEwKSx2PXUuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksYj1zLnBvc2l0aW9uZWQ/cy53aWR0aDpkLndpZHRoK3MucGFkZGluZyx5PXMucG9zaXRpb25lZD9zLmhlaWdodDpkLmhlaWdodCtzLnBhZGRpbmcsVD1zLnBvc2l0aW9uZWQ/LWIvMjotZC53aWR0aC8yLXAsXz1zLnBvc2l0aW9uZWQ/LXkvMjotZC5oZWlnaHQvMi1wO2lmKHYuYXR0cigiY2xhc3MiLCJiYXNpYyBjbHVzdGVyIGNvbXBvc2l0ZSBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIscy5zdHlsZSkuYXR0cigicngiLHMucngpLmF0dHIoInJ5IixzLnJ5KS5hdHRyKCJ4IixUKS5hdHRyKCJ5IixfKS5hdHRyKCJ3aWR0aCIsYikuYXR0cigiaGVpZ2h0Iix5KSxzLnByb3BzKXtjb25zdCBBPW5ldyBTZXQoT2JqZWN0LmtleXMocy5wcm9wcykpO3MucHJvcHMuYm9yZGVycyYmKGptZSh2LHMucHJvcHMuYm9yZGVycyxiLHkpLEEuZGVsZXRlKCJib3JkZXJzIikpLEEuZm9yRWFjaChQPT57WGUud2FybihgVW5rbm93biBub2RlIHByb3BlcnR5ICR7UH1gKX0pfXJldHVybiBLaChzLHYpLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKEEpe3JldHVybiB5aC5yZWN0KHMsQSl9LHV9LHVlbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dX09YXdhaXQgZzEoaSxzLCJsYWJlbCIsITApO1hlLnRyYWNlKCJDbGFzc2VzID0gIixzLmNsYXNzKTtjb25zdCBkPXUuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikscD0wLHY9MDtpZihkLmF0dHIoIndpZHRoIixwKS5hdHRyKCJoZWlnaHQiLHYpLHUuYXR0cigiY2xhc3MiLCJsYWJlbCBlZGdlTGFiZWwiKSxzLnByb3BzKXtjb25zdCBiPW5ldyBTZXQoT2JqZWN0LmtleXMocy5wcm9wcykpO3MucHJvcHMuYm9yZGVycyYmKGptZShkLHMucHJvcHMuYm9yZGVycyxwLHYpLGIuZGVsZXRlKCJib3JkZXJzIikpLGIuZm9yRWFjaCh5PT57WGUud2FybihgVW5rbm93biBub2RlIHByb3BlcnR5ICR7eX1gKX0pfXJldHVybiBLaChzLGQpLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiB5aC5yZWN0KHMsYil9LHV9O2Z1bmN0aW9uIGptZShpLHMsdSxkKXtjb25zdCBwPVtdLHY9eT0+e3AucHVzaCh5LDApfSxiPXk9PntwLnB1c2goMCx5KX07cy5pbmNsdWRlcygidCIpPyhYZS5kZWJ1ZygiYWRkIHRvcCBib3JkZXIiKSx2KHUpKTpiKHUpLHMuaW5jbHVkZXMoInIiKT8oWGUuZGVidWcoImFkZCByaWdodCBib3JkZXIiKSx2KGQpKTpiKGQpLHMuaW5jbHVkZXMoImIiKT8oWGUuZGVidWcoImFkZCBib3R0b20gYm9yZGVyIiksdih1KSk6Yih1KSxzLmluY2x1ZGVzKCJsIik/KFhlLmRlYnVnKCJhZGQgbGVmdCBib3JkZXIiKSx2KGQpKTpiKGQpLGkuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIscC5qb2luKCIgIikpfWNvbnN0IGxlbj0oaSxzKT0+e2xldCB1O3MuY2xhc3Nlcz91PSJub2RlICIrcy5jbGFzc2VzOnU9Im5vZGUgZGVmYXVsdCI7Y29uc3QgZD1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIix1KS5hdHRyKCJpZCIscy5kb21JZHx8cy5pZCkscD1kLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHY9ZC5pbnNlcnQoImxpbmUiKSxiPWQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLHk9cy5sYWJlbFRleHQuZmxhdD9zLmxhYmVsVGV4dC5mbGF0KCk6cy5sYWJlbFRleHQ7bGV0IFQ9IiI7dHlwZW9mIHk9PSJvYmplY3QiP1Q9eVswXTpUPXksWGUuaW5mbygiTGFiZWwgdGV4dCBhYmM3OSIsVCx5LHR5cGVvZiB5PT0ib2JqZWN0Iik7Y29uc3QgXz1iLm5vZGUoKS5hcHBlbmRDaGlsZCgkMihULHMubGFiZWxTdHlsZSwhMCwhMCkpO2xldCBBPXt3aWR0aDowLGhlaWdodDowfTtpZihmMShxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7Y29uc3QgSz1fLmNoaWxkcmVuWzBdLGVlPUlyKF8pO0E9Sy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxlZS5hdHRyKCJ3aWR0aCIsQS53aWR0aCksZWUuYXR0cigiaGVpZ2h0IixBLmhlaWdodCl9WGUuaW5mbygiVGV4dCAyIix5KTtjb25zdCBQPXkuc2xpY2UoMSx5Lmxlbmd0aCk7bGV0IFI9Xy5nZXRCQm94KCk7Y29uc3QgRj1iLm5vZGUoKS5hcHBlbmRDaGlsZCgkMihQLmpvaW4/UC5qb2luKCI8YnIvPiIpOlAscy5sYWJlbFN0eWxlLCEwLCEwKSk7aWYoZjEocXQoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IEs9Ri5jaGlsZHJlblswXSxlZT1JcihGKTtBPUsuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZWUuYXR0cigid2lkdGgiLEEud2lkdGgpLGVlLmF0dHIoImhlaWdodCIsQS5oZWlnaHQpfWNvbnN0IGo9cy5wYWRkaW5nLzI7cmV0dXJuIElyKEYpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoQS53aWR0aD5SLndpZHRoPzA6KFIud2lkdGgtQS53aWR0aCkvMikrIiwgIisoUi5oZWlnaHQrais1KSsiKSIpLElyKF8pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoQS53aWR0aDxSLndpZHRoPzA6LShSLndpZHRoLUEud2lkdGgpLzIpKyIsIDApIiksQT1iLm5vZGUoKS5nZXRCQm94KCksYi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistQS53aWR0aC8yKyIsICIrKC1BLmhlaWdodC8yLWorMykrIikiKSxwLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtQS53aWR0aC8yLWopLmF0dHIoInkiLC1BLmhlaWdodC8yLWopLmF0dHIoIndpZHRoIixBLndpZHRoK3MucGFkZGluZykuYXR0cigiaGVpZ2h0IixBLmhlaWdodCtzLnBhZGRpbmcpLHYuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1BLndpZHRoLzItaikuYXR0cigieDIiLEEud2lkdGgvMitqKS5hdHRyKCJ5MSIsLUEuaGVpZ2h0LzItaitSLmhlaWdodCtqKS5hdHRyKCJ5MiIsLUEuaGVpZ2h0LzItaitSLmhlaWdodCtqKSxLaChzLHApLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKEspe3JldHVybiB5aC5yZWN0KHMsSyl9LGR9LGhlbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmR9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHA9ZC5oZWlnaHQrcy5wYWRkaW5nLHY9ZC53aWR0aCtwLzQrcy5wYWRkaW5nLGI9dS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJzdHlsZSIscy5zdHlsZSkuYXR0cigicngiLHAvMikuYXR0cigicnkiLHAvMikuYXR0cigieCIsLXYvMikuYXR0cigieSIsLXAvMikuYXR0cigid2lkdGgiLHYpLmF0dHIoImhlaWdodCIscCk7cmV0dXJuIEtoKHMsYikscy5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIHloLnJlY3Qocyx5KX0sdX0sZmVuPWFzeW5jKGkscyk9Pntjb25zdHtzaGFwZVN2Zzp1LGJib3g6ZCxoYWxmUGFkZGluZzpwfT1hd2FpdCBnMShpLHMsZG0ocyx2b2lkIDApLCEwKSx2PXUuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gdi5hdHRyKCJzdHlsZSIscy5zdHlsZSkuYXR0cigicngiLHMucngpLmF0dHIoInJ5IixzLnJ5KS5hdHRyKCJyIixkLndpZHRoLzIrcCkuYXR0cigid2lkdGgiLGQud2lkdGgrcy5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGQuaGVpZ2h0K3MucGFkZGluZyksWGUuaW5mbygiQ2lyY2xlIG1haW4iKSxLaChzLHYpLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiBYZS5pbmZvKCJDaXJjbGUgaW50ZXJzZWN0IixzLGQud2lkdGgvMitwLGIpLHloLmNpcmNsZShzLGQud2lkdGgvMitwLGIpfSx1fSxkZW49YXN5bmMoaSxzKT0+e2NvbnN0e3NoYXBlU3ZnOnUsYmJveDpkLGhhbGZQYWRkaW5nOnB9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHY9NSxiPXUuaW5zZXJ0KCJnIiwiOmZpcnN0LWNoaWxkIikseT1iLmluc2VydCgiY2lyY2xlIiksVD1iLmluc2VydCgiY2lyY2xlIik7cmV0dXJuIGIuYXR0cigiY2xhc3MiLHMuY2xhc3MpLHkuYXR0cigic3R5bGUiLHMuc3R5bGUpLmF0dHIoInJ4IixzLnJ4KS5hdHRyKCJyeSIscy5yeSkuYXR0cigiciIsZC53aWR0aC8yK3ArdikuYXR0cigid2lkdGgiLGQud2lkdGgrcy5wYWRkaW5nK3YqMikuYXR0cigiaGVpZ2h0IixkLmhlaWdodCtzLnBhZGRpbmcrdioyKSxULmF0dHIoInN0eWxlIixzLnN0eWxlKS5hdHRyKCJyeCIscy5yeCkuYXR0cigicnkiLHMucnkpLmF0dHIoInIiLGQud2lkdGgvMitwKS5hdHRyKCJ3aWR0aCIsZC53aWR0aCtzLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsZC5oZWlnaHQrcy5wYWRkaW5nKSxYZS5pbmZvKCJEb3VibGVDaXJjbGUgbWFpbiIpLEtoKHMseSkscy5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIFhlLmluZm8oIkRvdWJsZUNpcmNsZSBpbnRlcnNlY3QiLHMsZC53aWR0aC8yK3ArdixfKSx5aC5jaXJjbGUocyxkLndpZHRoLzIrcCt2LF8pfSx1fSxnZW49YXN5bmMoaSxzKT0+e2NvbnN0e3NoYXBlU3ZnOnUsYmJveDpkfT1hd2FpdCBnMShpLHMsZG0ocyx2b2lkIDApLCEwKSxwPWQud2lkdGgrcy5wYWRkaW5nLHY9ZC5oZWlnaHQrcy5wYWRkaW5nLGI9W3t4OjAseTowfSx7eDpwLHk6MH0se3g6cCx5Oi12fSx7eDowLHk6LXZ9LHt4OjAseTowfSx7eDotOCx5OjB9LHt4OnArOCx5OjB9LHt4OnArOCx5Oi12fSx7eDotOCx5Oi12fSx7eDotOCx5OjB9XSx5PXI1KHUscCx2LGIpO3JldHVybiB5LmF0dHIoInN0eWxlIixzLnN0eWxlKSxLaChzLHkpLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKFQpe3JldHVybiB5aC5wb2x5Z29uKHMsYixUKX0sdX0scGVuPShpLHMpPT57Y29uc3QgdT1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLHMuZG9tSWR8fHMuaWQpLGQ9dS5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBkLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMTQpLmF0dHIoImhlaWdodCIsMTQpLEtoKHMsZCkscy5pbnRlcnNlY3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHloLmNpcmNsZShzLDcscCl9LHV9LFRVZT0oaSxzLHUpPT57Y29uc3QgZD1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLHMuZG9tSWR8fHMuaWQpO2xldCBwPTcwLHY9MTA7dT09PSJMUiImJihwPTEwLHY9NzApO2NvbnN0IGI9ZC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtMSpwLzIpLmF0dHIoInkiLC0xKnYvMikuYXR0cigid2lkdGgiLHApLmF0dHIoImhlaWdodCIsdikuYXR0cigiY2xhc3MiLCJmb3JrLWpvaW4iKTtyZXR1cm4gS2gocyxiKSxzLmhlaWdodD1zLmhlaWdodCtzLnBhZGRpbmcvMixzLndpZHRoPXMud2lkdGgrcy5wYWRkaW5nLzIscy5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIHloLnJlY3Qocyx5KX0sZH0sQ1VlPXtyaG9tYnVzOkVVZSxjb21wb3NpdGU6Y2VuLHF1ZXN0aW9uOkVVZSxyZWN0Om9lbixsYWJlbFJlY3Q6dWVuLHJlY3RXaXRoVGl0bGU6bGVuLGNob2ljZTpRWnQsY2lyY2xlOmZlbixkb3VibGVjaXJjbGU6ZGVuLHN0YWRpdW06aGVuLGhleGFnb246Slp0LGJsb2NrX2Fycm93OlpadCxyZWN0X2xlZnRfaW52X2Fycm93OmVlbixsZWFuX3JpZ2h0OnRlbixsZWFuX2xlZnQ6bmVuLHRyYXBlem9pZDpyZW4saW52X3RyYXBlem9pZDppZW4scmVjdF9yaWdodF9pbnZfYXJyb3c6c2VuLGN5bGluZGVyOmFlbixzdGFydDpwZW4sZW5kOihpLHMpPT57Y29uc3QgdT1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLHMuZG9tSWR8fHMuaWQpLGQ9dS5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLHA9dS5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBwLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMTQpLmF0dHIoImhlaWdodCIsMTQpLGQuYXR0cigiY2xhc3MiLCJzdGF0ZS1lbmQiKS5hdHRyKCJyIiw1KS5hdHRyKCJ3aWR0aCIsMTApLmF0dHIoImhlaWdodCIsMTApLEtoKHMscCkscy5pbnRlcnNlY3Q9ZnVuY3Rpb24odil7cmV0dXJuIHloLmNpcmNsZShzLDcsdil9LHV9LG5vdGU6V1p0LHN1YnJvdXRpbmU6Z2VuLGZvcms6VFVlLGpvaW46VFVlLGNsYXNzX2JveDooaSxzKT0+e2NvbnN0IHU9cy5wYWRkaW5nLzIsZD00LHA9ODtsZXQgdjtzLmNsYXNzZXM/dj0ibm9kZSAiK3MuY2xhc3Nlczp2PSJub2RlIGRlZmF1bHQiO2NvbnN0IGI9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsdikuYXR0cigiaWQiLHMuZG9tSWR8fHMuaWQpLHk9Yi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxUPWIuaW5zZXJ0KCJsaW5lIiksXz1iLmluc2VydCgibGluZSIpO2xldCBBPTAsUD1kO2NvbnN0IFI9Yi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIik7bGV0IEY9MDtjb25zdCBqPXMuY2xhc3NEYXRhLmFubm90YXRpb25zJiZzLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXSxLPXMuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdPyLCqyIrcy5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0rIsK7IjoiIixlZT1SLm5vZGUoKS5hcHBlbmRDaGlsZCgkMihLLHMubGFiZWxTdHlsZSwhMCwhMCkpO2xldCBpZT1lZS5nZXRCQm94KCk7aWYoZjEocXQoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IGRlPWVlLmNoaWxkcmVuWzBdLFg9SXIoZWUpO2llPWRlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFguYXR0cigid2lkdGgiLGllLndpZHRoKSxYLmF0dHIoImhlaWdodCIsaWUuaGVpZ2h0KX1zLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXSYmKFArPWllLmhlaWdodCtkLEErPWllLndpZHRoKTtsZXQgb2U9cy5jbGFzc0RhdGEubGFiZWw7cy5jbGFzc0RhdGEudHlwZSE9PXZvaWQgMCYmcy5jbGFzc0RhdGEudHlwZSE9PSIiJiYocXQoKS5mbG93Y2hhcnQuaHRtbExhYmVscz9vZSs9IiZsdDsiK3MuY2xhc3NEYXRhLnR5cGUrIiZndDsiOm9lKz0iPCIrcy5jbGFzc0RhdGEudHlwZSsiPiIpO2NvbnN0IHBlPVIubm9kZSgpLmFwcGVuZENoaWxkKCQyKG9lLHMubGFiZWxTdHlsZSwhMCwhMCkpO0lyKHBlKS5hdHRyKCJjbGFzcyIsImNsYXNzVGl0bGUiKTtsZXQgYmU9cGUuZ2V0QkJveCgpO2lmKGYxKHF0KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBkZT1wZS5jaGlsZHJlblswXSxYPUlyKHBlKTtiZT1kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxYLmF0dHIoIndpZHRoIixiZS53aWR0aCksWC5hdHRyKCJoZWlnaHQiLGJlLmhlaWdodCl9UCs9YmUuaGVpZ2h0K2QsYmUud2lkdGg+QSYmKEE9YmUud2lkdGgpO2NvbnN0IGFlPVtdO3MuY2xhc3NEYXRhLm1lbWJlcnMuZm9yRWFjaChkZT0+e2NvbnN0IFg9ZGUuZ2V0RGlzcGxheURldGFpbHMoKTtsZXQgZ2U9WC5kaXNwbGF5VGV4dDtxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzJiYoZ2U9Z2UucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikpO2NvbnN0IFc9Ui5ub2RlKCkuYXBwZW5kQ2hpbGQoJDIoZ2UsWC5jc3NTdHlsZT9YLmNzc1N0eWxlOnMubGFiZWxTdHlsZSwhMCwhMCkpO2xldCB4ZT1XLmdldEJCb3goKTtpZihmMShxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7Y29uc3QgVT1XLmNoaWxkcmVuWzBdLEZlPUlyKFcpO3hlPVUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksRmUuYXR0cigid2lkdGgiLHhlLndpZHRoKSxGZS5hdHRyKCJoZWlnaHQiLHhlLmhlaWdodCl9eGUud2lkdGg+QSYmKEE9eGUud2lkdGgpLFArPXhlLmhlaWdodCtkLGFlLnB1c2goVyl9KSxQKz1wO2NvbnN0IG5lPVtdO2lmKHMuY2xhc3NEYXRhLm1ldGhvZHMuZm9yRWFjaChkZT0+e2NvbnN0IFg9ZGUuZ2V0RGlzcGxheURldGFpbHMoKTtsZXQgZ2U9WC5kaXNwbGF5VGV4dDtxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzJiYoZ2U9Z2UucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikpO2NvbnN0IFc9Ui5ub2RlKCkuYXBwZW5kQ2hpbGQoJDIoZ2UsWC5jc3NTdHlsZT9YLmNzc1N0eWxlOnMubGFiZWxTdHlsZSwhMCwhMCkpO2xldCB4ZT1XLmdldEJCb3goKTtpZihmMShxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7Y29uc3QgVT1XLmNoaWxkcmVuWzBdLEZlPUlyKFcpO3hlPVUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksRmUuYXR0cigid2lkdGgiLHhlLndpZHRoKSxGZS5hdHRyKCJoZWlnaHQiLHhlLmhlaWdodCl9eGUud2lkdGg+QSYmKEE9eGUud2lkdGgpLFArPXhlLmhlaWdodCtkLG5lLnB1c2goVyl9KSxQKz1wLGope2xldCBkZT0oQS1pZS53aWR0aCkvMjtJcihlZSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKygtMSpBLzIrZGUpKyIsICIrLTEqUC8yKyIpIiksRj1pZS5oZWlnaHQrZH1sZXQgc2U9KEEtYmUud2lkdGgpLzI7cmV0dXJuIElyKHBlKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKC0xKkEvMitzZSkrIiwgIisoLTEqUC8yK0YpKyIpIiksRis9YmUuaGVpZ2h0K2QsVC5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MSIsLUEvMi11KS5hdHRyKCJ4MiIsQS8yK3UpLmF0dHIoInkxIiwtUC8yLXUrcCtGKS5hdHRyKCJ5MiIsLVAvMi11K3ArRiksRis9cCxhZS5mb3JFYWNoKGRlPT57SXIoZGUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIistQS8yKyIsICIrKC0xKlAvMitGK3AvMikrIikiKTtjb25zdCBYPWRlPT1udWxsP3ZvaWQgMDpkZS5nZXRCQm94KCk7Ris9KChYPT1udWxsP3ZvaWQgMDpYLmhlaWdodCk/PzApK2R9KSxGKz1wLF8uYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1BLzItdSkuYXR0cigieDIiLEEvMit1KS5hdHRyKCJ5MSIsLVAvMi11K3ArRikuYXR0cigieTIiLC1QLzItdStwK0YpLEYrPXAsbmUuZm9yRWFjaChkZT0+e0lyKGRlKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrLUEvMisiLCAiKygtMSpQLzIrRikrIikiKTtjb25zdCBYPWRlPT1udWxsP3ZvaWQgMDpkZS5nZXRCQm94KCk7Ris9KChYPT1udWxsP3ZvaWQgMDpYLmhlaWdodCk/PzApK2R9KSx5LmF0dHIoInN0eWxlIixzLnN0eWxlKS5hdHRyKCJjbGFzcyIsIm91dGVyIHRpdGxlLXN0YXRlIikuYXR0cigieCIsLUEvMi11KS5hdHRyKCJ5IiwtKFAvMiktdSkuYXR0cigid2lkdGgiLEErcy5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLFArcy5wYWRkaW5nKSxLaChzLHkpLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKGRlKXtyZXR1cm4geWgucmVjdChzLGRlKX0sYn19O2xldCBWRD17fTtjb25zdCB0Sj1hc3luYyhpLHMsdSk9PntsZXQgZCxwO2lmKHMubGluayl7bGV0IHY7cXQoKS5zZWN1cml0eUxldmVsPT09InNhbmRib3giP3Y9Il90b3AiOnMubGlua1RhcmdldCYmKHY9cy5saW5rVGFyZ2V0fHwiX2JsYW5rIiksZD1pLmluc2VydCgic3ZnOmEiKS5hdHRyKCJ4bGluazpocmVmIixzLmxpbmspLmF0dHIoInRhcmdldCIsdikscD1hd2FpdCBDVWVbcy5zaGFwZV0oZCxzLHUpfWVsc2UgcD1hd2FpdCBDVWVbcy5zaGFwZV0oaSxzLHUpLGQ9cDtyZXR1cm4gcy50b29sdGlwJiZwLmF0dHIoInRpdGxlIixzLnRvb2x0aXApLHMuY2xhc3MmJnAuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQgIitzLmNsYXNzKSxkLmF0dHIoImRhdGEtbm9kZSIsInRydWUiKSxkLmF0dHIoImRhdGEtaWQiLHMuaWQpLFZEW3MuaWRdPWQscy5oYXZlQ2FsbGJhY2smJlZEW3MuaWRdLmF0dHIoImNsYXNzIixWRFtzLmlkXS5hdHRyKCJjbGFzcyIpKyIgY2xpY2thYmxlIiksZH0sYmVuPShpLHMpPT57VkRbcy5pZF09aX0sbWVuPSgpPT57VkQ9e319LCRtZT1pPT57Y29uc3Qgcz1WRFtpLmlkXTtYZS50cmFjZSgiVHJhbnNmb3JtaW5nIG5vZGUiLGkuZGlmZixpLCJ0cmFuc2xhdGUoIisoaS54LWkud2lkdGgvMi01KSsiLCAiK2kud2lkdGgvMisiKSIpO2NvbnN0IHU9OCxkPWkuZGlmZnx8MDtyZXR1cm4gaS5jbHVzdGVyTm9kZT9zLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhpLngrZC1pLndpZHRoLzIpKyIsICIrKGkueS1pLmhlaWdodC8yLXUpKyIpIik6cy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpLngrIiwgIitpLnkrIikiKSxkfSxuSj0oe2Zsb3djaGFydDppfSk9Pnt2YXIgcCx2O2NvbnN0IHM9KChwPWk9PW51bGw/dm9pZCAwOmkuc3ViR3JhcGhUaXRsZU1hcmdpbik9PW51bGw/dm9pZCAwOnAudG9wKT8/MCx1PSgodj1pPT1udWxsP3ZvaWQgMDppLnN1YkdyYXBoVGl0bGVNYXJnaW4pPT1udWxsP3ZvaWQgMDp2LmJvdHRvbSk/PzAsZD1zK3U7cmV0dXJue3N1YkdyYXBoVGl0bGVUb3BNYXJnaW46cyxzdWJHcmFwaFRpdGxlQm90dG9tTWFyZ2luOnUsc3ViR3JhcGhUaXRsZVRvdGFsTWFyZ2luOmR9fSx2ZW49e3JlY3Q6KGkscyk9PntYZS5pbmZvKCJDcmVhdGluZyBzdWJncmFwaCByZWN0IGZvciAiLHMuaWQscyk7Y29uc3QgdT1xdCgpLGQ9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXIiKyhzLmNsYXNzPyIgIitzLmNsYXNzOiIiKSkuYXR0cigiaWQiLHMuaWQpLHA9ZC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx2PWYxKHUuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpLGI9ZC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXItbGFiZWwiKSx5PXMubGFiZWxUeXBlPT09Im1hcmtkb3duIj9KUShiLHMubGFiZWxUZXh0LHtzdHlsZTpzLmxhYmVsU3R5bGUsdXNlSHRtbExhYmVsczp2fSk6Yi5ub2RlKCkuYXBwZW5kQ2hpbGQoJDIocy5sYWJlbFRleHQscy5sYWJlbFN0eWxlLHZvaWQgMCwhMCkpO2xldCBUPXkuZ2V0QkJveCgpO2lmKGYxKHUuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBqPXkuY2hpbGRyZW5bMF0sSz1Jcih5KTtUPWouZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksSy5hdHRyKCJ3aWR0aCIsVC53aWR0aCksSy5hdHRyKCJoZWlnaHQiLFQuaGVpZ2h0KX1jb25zdCBfPTAqcy5wYWRkaW5nLEE9Xy8yLFA9cy53aWR0aDw9VC53aWR0aCtfP1Qud2lkdGgrXzpzLndpZHRoO3Mud2lkdGg8PVQud2lkdGgrXz9zLmRpZmY9KFQud2lkdGgtcy53aWR0aCkvMi1zLnBhZGRpbmcvMjpzLmRpZmY9LXMucGFkZGluZy8yLFhlLnRyYWNlKCJEYXRhICIscyxKU09OLnN0cmluZ2lmeShzKSkscC5hdHRyKCJzdHlsZSIscy5zdHlsZSkuYXR0cigicngiLHMucngpLmF0dHIoInJ5IixzLnJ5KS5hdHRyKCJ4IixzLngtUC8yKS5hdHRyKCJ5IixzLnktcy5oZWlnaHQvMi1BKS5hdHRyKCJ3aWR0aCIsUCkuYXR0cigiaGVpZ2h0IixzLmhlaWdodCtfKTtjb25zdHtzdWJHcmFwaFRpdGxlVG9wTWFyZ2luOlJ9PW5KKHUpO3Y/Yi5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtzLngtVC53aWR0aC8yfSwgJHtzLnktcy5oZWlnaHQvMitSfSlgKTpiLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3MueH0sICR7cy55LXMuaGVpZ2h0LzIrUn0pYCk7Y29uc3QgRj1wLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIHMud2lkdGg9Ri53aWR0aCxzLmhlaWdodD1GLmhlaWdodCxzLmludGVyc2VjdD1mdW5jdGlvbihqKXtyZXR1cm4gRFIocyxqKX0sZH0scm91bmRlZFdpdGhUaXRsZTooaSxzKT0+e2NvbnN0IHU9cXQoKSxkPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLHMuY2xhc3NlcykuYXR0cigiaWQiLHMuaWQpLHA9ZC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx2PWQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyLWxhYmVsIiksYj1kLmFwcGVuZCgicmVjdCIpLHk9di5ub2RlKCkuYXBwZW5kQ2hpbGQoJDIocy5sYWJlbFRleHQscy5sYWJlbFN0eWxlLHZvaWQgMCwhMCkpO2xldCBUPXkuZ2V0QkJveCgpO2lmKGYxKHUuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBqPXkuY2hpbGRyZW5bMF0sSz1Jcih5KTtUPWouZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksSy5hdHRyKCJ3aWR0aCIsVC53aWR0aCksSy5hdHRyKCJoZWlnaHQiLFQuaGVpZ2h0KX1UPXkuZ2V0QkJveCgpO2NvbnN0IF89MCpzLnBhZGRpbmcsQT1fLzIsUD1zLndpZHRoPD1ULndpZHRoK3MucGFkZGluZz9ULndpZHRoK3MucGFkZGluZzpzLndpZHRoO3Mud2lkdGg8PVQud2lkdGgrcy5wYWRkaW5nP3MuZGlmZj0oVC53aWR0aCtzLnBhZGRpbmcqMC1zLndpZHRoKS8yOnMuZGlmZj0tcy5wYWRkaW5nLzIscC5hdHRyKCJjbGFzcyIsIm91dGVyIikuYXR0cigieCIscy54LVAvMi1BKS5hdHRyKCJ5IixzLnktcy5oZWlnaHQvMi1BKS5hdHRyKCJ3aWR0aCIsUCtfKS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0K18pLGIuYXR0cigiY2xhc3MiLCJpbm5lciIpLmF0dHIoIngiLHMueC1QLzItQSkuYXR0cigieSIscy55LXMuaGVpZ2h0LzItQStULmhlaWdodC0xKS5hdHRyKCJ3aWR0aCIsUCtfKS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0K18tVC5oZWlnaHQtMyk7Y29uc3R7c3ViR3JhcGhUaXRsZVRvcE1hcmdpbjpSfT1uSih1KTt2LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3MueC1ULndpZHRoLzJ9LCAke3MueS1zLmhlaWdodC8yLXMucGFkZGluZy8zKyhmMSh1LmZsb3djaGFydC5odG1sTGFiZWxzKT81OjMpK1J9KWApO2NvbnN0IEY9cC5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBzLmhlaWdodD1GLmhlaWdodCxzLmludGVyc2VjdD1mdW5jdGlvbihqKXtyZXR1cm4gRFIocyxqKX0sZH0sbm90ZUdyb3VwOihpLHMpPT57Y29uc3QgdT1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm90ZS1jbHVzdGVyIikuYXR0cigiaWQiLHMuaWQpLGQ9dS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxwPTAqcy5wYWRkaW5nLHY9cC8yO2QuYXR0cigicngiLHMucngpLmF0dHIoInJ5IixzLnJ5KS5hdHRyKCJ4IixzLngtcy53aWR0aC8yLXYpLmF0dHIoInkiLHMueS1zLmhlaWdodC8yLXYpLmF0dHIoIndpZHRoIixzLndpZHRoK3ApLmF0dHIoImhlaWdodCIscy5oZWlnaHQrcCkuYXR0cigiZmlsbCIsIm5vbmUiKTtjb25zdCBiPWQubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gcy53aWR0aD1iLndpZHRoLHMuaGVpZ2h0PWIuaGVpZ2h0LHMuaW50ZXJzZWN0PWZ1bmN0aW9uKHkpe3JldHVybiBEUihzLHkpfSx1fSxkaXZpZGVyOihpLHMpPT57Y29uc3QgdT1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixzLmNsYXNzZXMpLmF0dHIoImlkIixzLmlkKSxkPXUuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikscD0wKnMucGFkZGluZyx2PXAvMjtkLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoIngiLHMueC1zLndpZHRoLzItdikuYXR0cigieSIscy55LXMuaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixzLndpZHRoK3ApLmF0dHIoImhlaWdodCIscy5oZWlnaHQrcCk7Y29uc3QgYj1kLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIHMud2lkdGg9Yi53aWR0aCxzLmhlaWdodD1iLmhlaWdodCxzLmRpZmY9LXMucGFkZGluZy8yLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKHkpe3JldHVybiBEUihzLHkpfSx1fX07bGV0IFNVZT17fTtjb25zdCB3ZW49KGkscyk9PntYZS50cmFjZSgiSW5zZXJ0aW5nIGNsdXN0ZXIiKTtjb25zdCB1PXMuc2hhcGV8fCJyZWN0IjtTVWVbcy5pZF09dmVuW3VdKGkscyl9LHllbj0oKT0+e1NVZT17fX0sUDk9e2FnZ3JlZ2F0aW9uOjE4LGV4dGVuc2lvbjoxOCxjb21wb3NpdGlvbjoxOCxkZXBlbmRlbmN5OjYsbG9sbGlwb3A6MTMuNSxhcnJvd19wb2ludDo1LjN9O2Z1bmN0aW9uIHJKKGkscyl7aWYoaT09PXZvaWQgMHx8cz09PXZvaWQgMClyZXR1cm57YW5nbGU6MCxkZWx0YVg6MCxkZWx0YVk6MH07aT1pSihpKSxzPWlKKHMpO2NvbnN0W3UsZF09W2kueCxpLnldLFtwLHZdPVtzLngscy55XSxiPXAtdSx5PXYtZDtyZXR1cm57YW5nbGU6TWF0aC5hdGFuKHkvYiksZGVsdGFYOmIsZGVsdGFZOnl9fWNvbnN0IGlKPWk9PkFycmF5LmlzQXJyYXkoaSk/e3g6aVswXSx5OmlbMV19OmksX1VlPWk9Pih7eDpmdW5jdGlvbihzLHUsZCl7bGV0IHA9MDtpZih1PT09MCYmT2JqZWN0Lmhhc093bihQOSxpLmFycm93VHlwZVN0YXJ0KSl7Y29uc3R7YW5nbGU6dixkZWx0YVg6Yn09ckooZFswXSxkWzFdKTtwPVA5W2kuYXJyb3dUeXBlU3RhcnRdKk1hdGguY29zKHYpKihiPj0wPzE6LTEpfWVsc2UgaWYodT09PWQubGVuZ3RoLTEmJk9iamVjdC5oYXNPd24oUDksaS5hcnJvd1R5cGVFbmQpKXtjb25zdHthbmdsZTp2LGRlbHRhWDpifT1ySihkW2QubGVuZ3RoLTFdLGRbZC5sZW5ndGgtMl0pO3A9UDlbaS5hcnJvd1R5cGVFbmRdKk1hdGguY29zKHYpKihiPj0wPzE6LTEpfXJldHVybiBpSihzKS54K3B9LHk6ZnVuY3Rpb24ocyx1LGQpe2xldCBwPTA7aWYodT09PTAmJk9iamVjdC5oYXNPd24oUDksaS5hcnJvd1R5cGVTdGFydCkpe2NvbnN0e2FuZ2xlOnYsZGVsdGFZOmJ9PXJKKGRbMF0sZFsxXSk7cD1QOVtpLmFycm93VHlwZVN0YXJ0XSpNYXRoLmFicyhNYXRoLnNpbih2KSkqKGI+PTA/MTotMSl9ZWxzZSBpZih1PT09ZC5sZW5ndGgtMSYmT2JqZWN0Lmhhc093bihQOSxpLmFycm93VHlwZUVuZCkpe2NvbnN0e2FuZ2xlOnYsZGVsdGFZOmJ9PXJKKGRbZC5sZW5ndGgtMV0sZFtkLmxlbmd0aC0yXSk7cD1QOVtpLmFycm93VHlwZUVuZF0qTWF0aC5hYnMoTWF0aC5zaW4odikpKihiPj0wPzE6LTEpfXJldHVybiBpSihzKS55K3B9fSksQVVlPShpLHMsdSxkLHApPT57cy5hcnJvd1R5cGVTdGFydCYmTFVlKGksInN0YXJ0IixzLmFycm93VHlwZVN0YXJ0LHUsZCxwKSxzLmFycm93VHlwZUVuZCYmTFVlKGksImVuZCIscy5hcnJvd1R5cGVFbmQsdSxkLHApfSx4ZW49e2Fycm93X2Nyb3NzOiJjcm9zcyIsYXJyb3dfcG9pbnQ6InBvaW50IixhcnJvd19iYXJiOiJiYXJiIixhcnJvd19jaXJjbGU6ImNpcmNsZSIsYWdncmVnYXRpb246ImFnZ3JlZ2F0aW9uIixleHRlbnNpb246ImV4dGVuc2lvbiIsY29tcG9zaXRpb246ImNvbXBvc2l0aW9uIixkZXBlbmRlbmN5OiJkZXBlbmRlbmN5Iixsb2xsaXBvcDoibG9sbGlwb3AifSxMVWU9KGkscyx1LGQscCx2KT0+e2NvbnN0IGI9eGVuW3VdO2lmKCFiKXtYZS53YXJuKGBVbmtub3duIGFycm93IHR5cGU6ICR7dX1gKTtyZXR1cm59Y29uc3QgeT1zPT09InN0YXJ0Ij8iU3RhcnQiOiJFbmQiO2kuYXR0cihgbWFya2VyLSR7c31gLGB1cmwoJHtkfSMke3B9XyR7dn0tJHtifSR7eX0pYCl9O2xldCBzSj17fSxWZD17fTtjb25zdCBrZW49KCk9PntzSj17fSxWZD17fX0sem1lPShpLHMpPT57Y29uc3QgdT1mMShxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSxkPXMubGFiZWxUeXBlPT09Im1hcmtkb3duIj9KUShpLHMubGFiZWwse3N0eWxlOnMubGFiZWxTdHlsZSx1c2VIdG1sTGFiZWxzOnUsYWRkU3ZnQmFja2dyb3VuZDohMH0pOiQyKHMubGFiZWwscy5sYWJlbFN0eWxlKSxwPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWwiKSx2PXAuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpO3Yubm9kZSgpLmFwcGVuZENoaWxkKGQpO2xldCBiPWQuZ2V0QkJveCgpO2lmKHUpe2NvbnN0IFQ9ZC5jaGlsZHJlblswXSxfPUlyKGQpO2I9VC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxfLmF0dHIoIndpZHRoIixiLndpZHRoKSxfLmF0dHIoImhlaWdodCIsYi5oZWlnaHQpfXYuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWIud2lkdGgvMisiLCAiKy1iLmhlaWdodC8yKyIpIiksc0pbcy5pZF09cCxzLndpZHRoPWIud2lkdGgscy5oZWlnaHQ9Yi5oZWlnaHQ7bGV0IHk7aWYocy5zdGFydExhYmVsTGVmdCl7Y29uc3QgVD0kMihzLnN0YXJ0TGFiZWxMZWZ0LHMubGFiZWxTdHlsZSksXz1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLEE9Xy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7eT1BLm5vZGUoKS5hcHBlbmRDaGlsZChUKTtjb25zdCBQPVQuZ2V0QkJveCgpO0EuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLVAud2lkdGgvMisiLCAiKy1QLmhlaWdodC8yKyIpIiksVmRbcy5pZF18fChWZFtzLmlkXT17fSksVmRbcy5pZF0uc3RhcnRMZWZ0PV8sYUooeSxzLnN0YXJ0TGFiZWxMZWZ0KX1pZihzLnN0YXJ0TGFiZWxSaWdodCl7Y29uc3QgVD0kMihzLnN0YXJ0TGFiZWxSaWdodCxzLmxhYmVsU3R5bGUpLF89aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxBPV8uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO3k9Xy5ub2RlKCkuYXBwZW5kQ2hpbGQoVCksQS5ub2RlKCkuYXBwZW5kQ2hpbGQoVCk7Y29uc3QgUD1ULmdldEJCb3goKTtBLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1QLndpZHRoLzIrIiwgIistUC5oZWlnaHQvMisiKSIpLFZkW3MuaWRdfHwoVmRbcy5pZF09e30pLFZkW3MuaWRdLnN0YXJ0UmlnaHQ9XyxhSih5LHMuc3RhcnRMYWJlbFJpZ2h0KX1pZihzLmVuZExhYmVsTGVmdCl7Y29uc3QgVD0kMihzLmVuZExhYmVsTGVmdCxzLmxhYmVsU3R5bGUpLF89aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxBPV8uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO3k9QS5ub2RlKCkuYXBwZW5kQ2hpbGQoVCk7Y29uc3QgUD1ULmdldEJCb3goKTtBLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1QLndpZHRoLzIrIiwgIistUC5oZWlnaHQvMisiKSIpLF8ubm9kZSgpLmFwcGVuZENoaWxkKFQpLFZkW3MuaWRdfHwoVmRbcy5pZF09e30pLFZkW3MuaWRdLmVuZExlZnQ9XyxhSih5LHMuZW5kTGFiZWxMZWZ0KX1pZihzLmVuZExhYmVsUmlnaHQpe2NvbnN0IFQ9JDIocy5lbmRMYWJlbFJpZ2h0LHMubGFiZWxTdHlsZSksXz1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLEE9Xy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7eT1BLm5vZGUoKS5hcHBlbmRDaGlsZChUKTtjb25zdCBQPVQuZ2V0QkJveCgpO0EuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLVAud2lkdGgvMisiLCAiKy1QLmhlaWdodC8yKyIpIiksXy5ub2RlKCkuYXBwZW5kQ2hpbGQoVCksVmRbcy5pZF18fChWZFtzLmlkXT17fSksVmRbcy5pZF0uZW5kUmlnaHQ9XyxhSih5LHMuZW5kTGFiZWxSaWdodCl9cmV0dXJuIGR9O2Z1bmN0aW9uIGFKKGkscyl7cXQoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmaSYmKGkuc3R5bGUud2lkdGg9cy5sZW5ndGgqOSsicHgiLGkuc3R5bGUuaGVpZ2h0PSIxMnB4Iil9Y29uc3QgTVVlPShpLHMpPT57WGUuZGVidWcoIk1vdmluZyBsYWJlbCBhYmM4OCAiLGkuaWQsaS5sYWJlbCxzSltpLmlkXSxzKTtsZXQgdT1zLnVwZGF0ZWRQYXRoP3MudXBkYXRlZFBhdGg6cy5vcmlnaW5hbFBhdGg7Y29uc3QgZD1xdCgpLHtzdWJHcmFwaFRpdGxlVG90YWxNYXJnaW46cH09bkooZCk7aWYoaS5sYWJlbCl7Y29uc3Qgdj1zSltpLmlkXTtsZXQgYj1pLngseT1pLnk7aWYodSl7Y29uc3QgVD1Bby5jYWxjTGFiZWxQb3NpdGlvbih1KTtYZS5kZWJ1ZygiTW92aW5nIGxhYmVsICIraS5sYWJlbCsiIGZyb20gKCIsYiwiLCIseSwiKSB0byAoIixULngsIiwiLFQueSwiKSBhYmM4OCIpLHMudXBkYXRlZFBhdGgmJihiPVQueCx5PVQueSl9di5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtifSwgJHt5K3AvMn0pYCl9aWYoaS5zdGFydExhYmVsTGVmdCl7Y29uc3Qgdj1WZFtpLmlkXS5zdGFydExlZnQ7bGV0IGI9aS54LHk9aS55O2lmKHUpe2NvbnN0IFQ9QW8uY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbihpLmFycm93VHlwZVN0YXJ0PzEwOjAsInN0YXJ0X2xlZnQiLHUpO2I9VC54LHk9VC55fXYuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7Yn0sICR7eX0pYCl9aWYoaS5zdGFydExhYmVsUmlnaHQpe2NvbnN0IHY9VmRbaS5pZF0uc3RhcnRSaWdodDtsZXQgYj1pLngseT1pLnk7aWYodSl7Y29uc3QgVD1Bby5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKGkuYXJyb3dUeXBlU3RhcnQ/MTA6MCwic3RhcnRfcmlnaHQiLHUpO2I9VC54LHk9VC55fXYuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7Yn0sICR7eX0pYCl9aWYoaS5lbmRMYWJlbExlZnQpe2NvbnN0IHY9VmRbaS5pZF0uZW5kTGVmdDtsZXQgYj1pLngseT1pLnk7aWYodSl7Y29uc3QgVD1Bby5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKGkuYXJyb3dUeXBlRW5kPzEwOjAsImVuZF9sZWZ0Iix1KTtiPVQueCx5PVQueX12LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2J9LCAke3l9KWApfWlmKGkuZW5kTGFiZWxSaWdodCl7Y29uc3Qgdj1WZFtpLmlkXS5lbmRSaWdodDtsZXQgYj1pLngseT1pLnk7aWYodSl7Y29uc3QgVD1Bby5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKGkuYXJyb3dUeXBlRW5kPzEwOjAsImVuZF9yaWdodCIsdSk7Yj1ULngseT1ULnl9di5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtifSwgJHt5fSlgKX19LEVlbj0oaSxzKT0+e2NvbnN0IHU9aS54LGQ9aS55LHA9TWF0aC5hYnMocy54LXUpLHY9TWF0aC5hYnMocy55LWQpLGI9aS53aWR0aC8yLHk9aS5oZWlnaHQvMjtyZXR1cm4gcD49Ynx8dj49eX0sVGVuPShpLHMsdSk9PntYZS5kZWJ1ZyhgaW50ZXJzZWN0aW9uIGNhbGMgYWJjODk6CiAgb3V0c2lkZVBvaW50OiAke0pTT04uc3RyaW5naWZ5KHMpfQogIGluc2lkZVBvaW50IDogJHtKU09OLnN0cmluZ2lmeSh1KX0KICBub2RlICAgICAgICA6IHg6JHtpLnh9IHk6JHtpLnl9IHc6JHtpLndpZHRofSBoOiR7aS5oZWlnaHR9YCk7Y29uc3QgZD1pLngscD1pLnksdj1NYXRoLmFicyhkLXUueCksYj1pLndpZHRoLzI7bGV0IHk9dS54PHMueD9iLXY6Yit2O2NvbnN0IFQ9aS5oZWlnaHQvMixfPU1hdGguYWJzKHMueS11LnkpLEE9TWF0aC5hYnMocy54LXUueCk7aWYoTWF0aC5hYnMocC1zLnkpKmI+TWF0aC5hYnMoZC1zLngpKlQpe2xldCBQPXUueTxzLnk/cy55LVQtcDpwLVQtcy55O3k9QSpQL187Y29uc3QgUj17eDp1Lng8cy54P3UueCt5OnUueC1BK3kseTp1Lnk8cy55P3UueStfLVA6dS55LV8rUH07cmV0dXJuIHk9PT0wJiYoUi54PXMueCxSLnk9cy55KSxBPT09MCYmKFIueD1zLngpLF89PT0wJiYoUi55PXMueSksWGUuZGVidWcoYGFiYzg5IHRvcHAvYm90dCBjYWxjLCBRICR7X30sIHEgJHtQfSwgUiAke0F9LCByICR7eX1gLFIpLFJ9ZWxzZXt1Lng8cy54P3k9cy54LWItZDp5PWQtYi1zLng7bGV0IFA9Xyp5L0EsUj11Lng8cy54P3UueCtBLXk6dS54LUEreSxGPXUueTxzLnk/dS55K1A6dS55LVA7cmV0dXJuIFhlLmRlYnVnKGBzaWRlcyBjYWxjIGFiYzg5LCBRICR7X30sIHEgJHtQfSwgUiAke0F9LCByICR7eX1gLHtfeDpSLF95OkZ9KSx5PT09MCYmKFI9cy54LEY9cy55KSxBPT09MCYmKFI9cy54KSxfPT09MCYmKEY9cy55KSx7eDpSLHk6Rn19fSxEVWU9KGkscyk9PntYZS5kZWJ1ZygiYWJjODggY3V0UGF0aEF0SW50ZXJzZWN0IixpLHMpO2xldCB1PVtdLGQ9aVswXSxwPSExO3JldHVybiBpLmZvckVhY2godj0+e2lmKCFFZW4ocyx2KSYmIXApe2NvbnN0IGI9VGVuKHMsZCx2KTtsZXQgeT0hMTt1LmZvckVhY2goVD0+e3k9eXx8VC54PT09Yi54JiZULnk9PT1iLnl9KSx1LnNvbWUoVD0+VC54PT09Yi54JiZULnk9PT1iLnkpfHx1LnB1c2goYikscD0hMH1lbHNlIGQ9dixwfHx1LnB1c2godil9KSx1fSxJVWU9ZnVuY3Rpb24oaSxzLHUsZCxwLHYsYil7bGV0IHk9dS5wb2ludHM7WGUuZGVidWcoImFiYzg4IEluc2VydEVkZ2U6IGVkZ2U9Iix1LCJlPSIscyk7bGV0IFQ9ITE7Y29uc3QgXz12Lm5vZGUocy52KTt2YXIgQT12Lm5vZGUocy53KTtBIT1udWxsJiZBLmludGVyc2VjdCYmKF8hPW51bGwmJl8uaW50ZXJzZWN0KSYmKHk9eS5zbGljZSgxLHUucG9pbnRzLmxlbmd0aC0xKSx5LnVuc2hpZnQoXy5pbnRlcnNlY3QoeVswXSkpLHkucHVzaChBLmludGVyc2VjdCh5W3kubGVuZ3RoLTFdKSkpLHUudG9DbHVzdGVyJiYoWGUuZGVidWcoInRvIGNsdXN0ZXIgYWJjODgiLGRbdS50b0NsdXN0ZXJdKSx5PURVZSh1LnBvaW50cyxkW3UudG9DbHVzdGVyXS5ub2RlKSxUPSEwKSx1LmZyb21DbHVzdGVyJiYoWGUuZGVidWcoImZyb20gY2x1c3RlciBhYmM4OCIsZFt1LmZyb21DbHVzdGVyXSkseT1EVWUoeS5yZXZlcnNlKCksZFt1LmZyb21DbHVzdGVyXS5ub2RlKS5yZXZlcnNlKCksVD0hMCk7Y29uc3QgUD15LmZpbHRlcihiZT0+IU51bWJlci5pc05hTihiZS55KSk7bGV0IFI9RkY7dS5jdXJ2ZSYmKHA9PT0iZ3JhcGgifHxwPT09ImZsb3djaGFydCIpJiYoUj11LmN1cnZlKTtjb25zdHt4OkYseTpqfT1fVWUodSksSz1rNygpLngoRikueShqKS5jdXJ2ZShSKTtsZXQgZWU7c3dpdGNoKHUudGhpY2tuZXNzKXtjYXNlIm5vcm1hbCI6ZWU9ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCI7YnJlYWs7Y2FzZSJ0aGljayI6ZWU9ImVkZ2UtdGhpY2tuZXNzLXRoaWNrIjticmVhaztjYXNlImludmlzaWJsZSI6ZWU9ImVkZ2UtdGhpY2tuZXNzLXRoaWNrIjticmVhaztkZWZhdWx0OmVlPSIifXN3aXRjaCh1LnBhdHRlcm4pe2Nhc2Uic29saWQiOmVlKz0iIGVkZ2UtcGF0dGVybi1zb2xpZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOmVlKz0iIGVkZ2UtcGF0dGVybi1kb3R0ZWQiO2JyZWFrO2Nhc2UiZGFzaGVkIjplZSs9IiBlZGdlLXBhdHRlcm4tZGFzaGVkIjticmVha31jb25zdCBpZT1pLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLEsoUCkpLmF0dHIoImlkIix1LmlkKS5hdHRyKCJjbGFzcyIsIiAiK2VlKyh1LmNsYXNzZXM/IiAiK3UuY2xhc3NlczoiIikpLmF0dHIoInN0eWxlIix1LnN0eWxlKTtsZXQgb2U9IiI7KHF0KCkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGV8fHF0KCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSkmJihvZT13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxvZT1vZS5yZXBsYWNlKC9cKC9nLCJcXCgiKSxvZT1vZS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksQVVlKGllLHUsb2UsYixwKTtsZXQgcGU9e307cmV0dXJuIFQmJihwZS51cGRhdGVkUGF0aD15KSxwZS5vcmlnaW5hbFBhdGg9dS5wb2ludHMscGV9LE9VZT1hc3luYyhpLHMsdSxkLHAsdik9PntYZS5pbmZvKCJHcmFwaCBpbiByZWN1cnNpdmUgcmVuZGVyOiBYWFgiLHE3KHMpLHApO2NvbnN0IGI9cy5ncmFwaCgpLnJhbmtkaXI7WGUudHJhY2UoIkRpciBpbiByZWN1cnNpdmUgcmVuZGVyIC0gZGlyOiIsYik7Y29uc3QgeT1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwicm9vdCIpO3Mubm9kZXMoKT9YZS5pbmZvKCJSZWN1cnNpdmUgcmVuZGVyIFhYWCIscy5ub2RlcygpKTpYZS5pbmZvKCJObyBub2RlcyBmb3VuZCBmb3IiLHMpLHMuZWRnZXMoKS5sZW5ndGg+MCYmWGUudHJhY2UoIlJlY3Vyc2l2ZSBlZGdlcyIscy5lZGdlKHMuZWRnZXMoKVswXSkpO2NvbnN0IFQ9eS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXJzIiksXz15Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVBhdGhzIiksQT15Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZUxhYmVscyIpLFA9eS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGVzIik7YXdhaXQgUHJvbWlzZS5hbGwocy5ub2RlcygpLm1hcChhc3luYyBmdW5jdGlvbihqKXtjb25zdCBLPXMubm9kZShqKTtpZihwIT09dm9pZCAwKXtjb25zdCBlZT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHAuY2x1c3RlckRhdGEpKTtYZS5pbmZvKCJTZXR0aW5nIGRhdGEgZm9yIGNsdXN0ZXIgWFhYICgiLGosIikgIixlZSxwKSxzLnNldE5vZGUocC5pZCxlZSkscy5wYXJlbnQoail8fChYZS50cmFjZSgiU2V0dGluZyBwYXJlbnQiLGoscC5pZCkscy5zZXRQYXJlbnQoaixwLmlkLGVlKSl9aWYoWGUuaW5mbygiKEluc2VydCkgTm9kZSBYWFgiK2orIjogIitKU09OLnN0cmluZ2lmeShzLm5vZGUoaikpKSxLJiZLLmNsdXN0ZXJOb2RlKXtYZS5pbmZvKCJDbHVzdGVyIGlkZW50aWZpZWQiLGosSy53aWR0aCxzLm5vZGUoaikpO2NvbnN0IGVlPWF3YWl0IE9VZShQLEsuZ3JhcGgsdSxkLHMubm9kZShqKSx2KSxpZT1lZS5lbGVtO0toKEssaWUpLEsuZGlmZj1lZS5kaWZmfHwwLFhlLmluZm8oIk5vZGUgYm91bmRzIChhYmMxMjMpIixqLEssSy53aWR0aCxLLngsSy55KSxiZW4oaWUsSyksWGUud2FybigiUmVjdXJzaXZlIHJlbmRlciBjb21wbGV0ZSAiLGllLEspfWVsc2Ugcy5jaGlsZHJlbihqKS5sZW5ndGg+MD8oWGUuaW5mbygiQ2x1c3RlciAtIHRoZSBub24gcmVjdXJzaXZlIHBhdGggWFhYIixqLEsuaWQsSyxzKSxYZS5pbmZvKE1SKEsuaWQscykpLE1vW0suaWRdPXtpZDpNUihLLmlkLHMpLG5vZGU6S30pOihYZS5pbmZvKCJOb2RlIC0gdGhlIG5vbiByZWN1cnNpdmUgcGF0aCIsaixLLmlkLEspLGF3YWl0IHRKKFAscy5ub2RlKGopLGIpKX0pKSxzLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihqKXtjb25zdCBLPXMuZWRnZShqLnYsai53LGoubmFtZSk7WGUuaW5mbygiRWRnZSAiK2oudisiIC0+ICIrai53KyI6ICIrSlNPTi5zdHJpbmdpZnkoaikpLFhlLmluZm8oIkVkZ2UgIitqLnYrIiAtPiAiK2oudysiOiAiLGosIiAiLEpTT04uc3RyaW5naWZ5KHMuZWRnZShqKSkpLFhlLmluZm8oIkZpeCIsTW8sImlkczoiLGoudixqLncsIlRyYW5zbGF0aW5nOiAiLE1vW2oudl0sTW9bai53XSksem1lKEEsSyl9KSxzLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihqKXtYZS5pbmZvKCJFZGdlICIrai52KyIgLT4gIitqLncrIjogIitKU09OLnN0cmluZ2lmeShqKSl9KSxYZS5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSxYZS5pbmZvKCIjIyMgICAgICAgICAgICAgICAgTGF5b3V0ICAgICAgICAgICAgICAgICAjIyMiKSxYZS5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSxYZS5pbmZvKHMpLHFEKHMpLFhlLmluZm8oIkdyYXBoIGFmdGVyIGxheW91dDoiLHE3KHMpKTtsZXQgUj0wO2NvbnN0e3N1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbjpGfT1uSih2KTtyZXR1cm4gSFp0KHMpLmZvckVhY2goZnVuY3Rpb24oail7Y29uc3QgSz1zLm5vZGUoaik7WGUuaW5mbygiUG9zaXRpb24gIitqKyI6ICIrSlNPTi5zdHJpbmdpZnkocy5ub2RlKGopKSksWGUuaW5mbygiUG9zaXRpb24gIitqKyI6ICgiK0sueCwiLCIrSy55LCIpIHdpZHRoOiAiLEsud2lkdGgsIiBoZWlnaHQ6ICIsSy5oZWlnaHQpLEsmJksuY2x1c3Rlck5vZGU/KEsueSs9RiwkbWUoSykpOnMuY2hpbGRyZW4oaikubGVuZ3RoPjA/KEsuaGVpZ2h0Kz1GLHdlbihULEspLE1vW0suaWRdLm5vZGU9Syk6KEsueSs9Ri8yLCRtZShLKSl9KSxzLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihqKXtjb25zdCBLPXMuZWRnZShqKTtYZS5pbmZvKCJFZGdlICIrai52KyIgLT4gIitqLncrIjogIitKU09OLnN0cmluZ2lmeShLKSxLKSxLLnBvaW50cy5mb3JFYWNoKGllPT5pZS55Kz1GLzIpO2NvbnN0IGVlPUlVZShfLGosSyxNbyx1LHMsZCk7TVVlKEssZWUpfSkscy5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oail7Y29uc3QgSz1zLm5vZGUoaik7WGUuaW5mbyhqLEsudHlwZSxLLmRpZmYpLEsudHlwZT09PSJncm91cCImJihSPUsuZGlmZil9KSx7ZWxlbTp5LGRpZmY6Un19LHFtZT1hc3luYyhpLHMsdSxkLHApPT57U21lKGksdSxkLHApLG1lbigpLGtlbigpLHllbigpLCRadCgpLFhlLndhcm4oIkdyYXBoIGF0IGZpcnN0OiIsSlNPTi5zdHJpbmdpZnkocTcocykpKSxxWnQocyksWGUud2FybigiR3JhcGggYWZ0ZXI6IixKU09OLnN0cmluZ2lmeShxNyhzKSkpO2NvbnN0IHY9cXQoKTthd2FpdCBPVWUoaSxzLGQscCx2b2lkIDAsdil9LE5VZT17fSxDZW49ZnVuY3Rpb24oaSl7Y29uc3Qgcz1PYmplY3Qua2V5cyhpKTtmb3IoY29uc3QgdSBvZiBzKU5VZVt1XT1pW3VdfSxQVWU9YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCxwLHYpe2NvbnN0IGI9ZC5zZWxlY3QoYFtpZD0iJHt1fSJdYCkseT1PYmplY3Qua2V5cyhpKTtmb3IoY29uc3QgVCBvZiB5KXtjb25zdCBfPWlbVF07bGV0IEE9ImRlZmF1bHQiO18uY2xhc3Nlcy5sZW5ndGg+MCYmKEE9Xy5jbGFzc2VzLmpvaW4oIiAiKSksQT1BKyIgZmxvd2NoYXJ0LWxhYmVsIjtjb25zdCBQPW9tKF8uc3R5bGVzKTtsZXQgUj1fLnRleHQhPT12b2lkIDA/Xy50ZXh0Ol8uaWQsRjtpZihYZS5pbmZvKCJ2ZXJ0ZXgiLF8sXy5sYWJlbFR5cGUpLF8ubGFiZWxUeXBlPT09Im1hcmtkb3duIilYZS5pbmZvKCJ2ZXJ0ZXgiLF8sXy5sYWJlbFR5cGUpO2Vsc2UgaWYoZjEocXQoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpRj12bWUoYix7bGFiZWw6Un0pLm5vZGUoKSxGLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoRik7ZWxzZXtjb25zdCBpZT1wLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7aWUuc2V0QXR0cmlidXRlKCJzdHlsZSIsUC5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2NvbnN0IG9lPVIuc3BsaXQoY2kubGluZUJyZWFrUmVnZXgpO2Zvcihjb25zdCBwZSBvZiBvZSl7Y29uc3QgYmU9cC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTtiZS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxiZS5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIiksYmUuc2V0QXR0cmlidXRlKCJ4IiwiMSIpLGJlLnRleHRDb250ZW50PXBlLGllLmFwcGVuZENoaWxkKGJlKX1GPWllfWxldCBqPTAsSz0iIjtzd2l0Y2goXy50eXBlKXtjYXNlInJvdW5kIjpqPTUsSz0icmVjdCI7YnJlYWs7Y2FzZSJzcXVhcmUiOks9InJlY3QiO2JyZWFrO2Nhc2UiZGlhbW9uZCI6Sz0icXVlc3Rpb24iO2JyZWFrO2Nhc2UiaGV4YWdvbiI6Sz0iaGV4YWdvbiI7YnJlYWs7Y2FzZSJvZGQiOks9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UibGVhbl9yaWdodCI6Sz0ibGVhbl9yaWdodCI7YnJlYWs7Y2FzZSJsZWFuX2xlZnQiOks9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOks9InRyYXBlem9pZCI7YnJlYWs7Y2FzZSJpbnZfdHJhcGV6b2lkIjpLPSJpbnZfdHJhcGV6b2lkIjticmVhaztjYXNlIm9kZF9yaWdodCI6Sz0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJjaXJjbGUiOks9ImNpcmNsZSI7YnJlYWs7Y2FzZSJlbGxpcHNlIjpLPSJlbGxpcHNlIjticmVhaztjYXNlInN0YWRpdW0iOks9InN0YWRpdW0iO2JyZWFrO2Nhc2Uic3Vicm91dGluZSI6Sz0ic3Vicm91dGluZSI7YnJlYWs7Y2FzZSJjeWxpbmRlciI6Sz0iY3lsaW5kZXIiO2JyZWFrO2Nhc2UiZ3JvdXAiOks9InJlY3QiO2JyZWFrO2Nhc2UiZG91YmxlY2lyY2xlIjpLPSJkb3VibGVjaXJjbGUiO2JyZWFrO2RlZmF1bHQ6Sz0icmVjdCJ9Y29uc3QgZWU9YXdhaXQgQ0MoUixxdCgpKTtzLnNldE5vZGUoXy5pZCx7bGFiZWxTdHlsZTpQLmxhYmVsU3R5bGUsc2hhcGU6SyxsYWJlbFRleHQ6ZWUsbGFiZWxUeXBlOl8ubGFiZWxUeXBlLHJ4Omoscnk6aixjbGFzczpBLHN0eWxlOlAuc3R5bGUsaWQ6Xy5pZCxsaW5rOl8ubGluayxsaW5rVGFyZ2V0Ol8ubGlua1RhcmdldCx0b29sdGlwOnYuZGIuZ2V0VG9vbHRpcChfLmlkKXx8IiIsZG9tSWQ6di5kYi5sb29rVXBEb21JZChfLmlkKSxoYXZlQ2FsbGJhY2s6Xy5oYXZlQ2FsbGJhY2ssd2lkdGg6Xy50eXBlPT09Imdyb3VwIj81MDA6dm9pZCAwLGRpcjpfLmRpcix0eXBlOl8udHlwZSxwcm9wczpfLnByb3BzLHBhZGRpbmc6cXQoKS5mbG93Y2hhcnQucGFkZGluZ30pLFhlLmluZm8oInNldE5vZGUiLHtsYWJlbFN0eWxlOlAubGFiZWxTdHlsZSxsYWJlbFR5cGU6Xy5sYWJlbFR5cGUsc2hhcGU6SyxsYWJlbFRleHQ6ZWUscng6aixyeTpqLGNsYXNzOkEsc3R5bGU6UC5zdHlsZSxpZDpfLmlkLGRvbUlkOnYuZGIubG9va1VwRG9tSWQoXy5pZCksd2lkdGg6Xy50eXBlPT09Imdyb3VwIj81MDA6dm9pZCAwLHR5cGU6Xy50eXBlLGRpcjpfLmRpcixwcm9wczpfLnByb3BzLHBhZGRpbmc6cXQoKS5mbG93Y2hhcnQucGFkZGluZ30pfX0sQlVlPWFzeW5jIGZ1bmN0aW9uKGkscyx1KXtYZS5pbmZvKCJhYmM3OCBlZGdlcyA9ICIsaSk7bGV0IGQ9MCxwPXt9LHYsYjtpZihpLmRlZmF1bHRTdHlsZSE9PXZvaWQgMCl7Y29uc3QgeT1vbShpLmRlZmF1bHRTdHlsZSk7dj15LnN0eWxlLGI9eS5sYWJlbFN0eWxlfWZvcihjb25zdCB5IG9mIGkpe2QrKztjb25zdCBUPSJMLSIreS5zdGFydCsiLSIreS5lbmQ7cFtUXT09PXZvaWQgMD8ocFtUXT0wLFhlLmluZm8oImFiYzc4IG5ldyBlbnRyeSIsVCxwW1RdKSk6KHBbVF0rKyxYZS5pbmZvKCJhYmM3OCBuZXcgZW50cnkiLFQscFtUXSkpO2xldCBfPVQrIi0iK3BbVF07WGUuaW5mbygiYWJjNzggbmV3IGxpbmsgaWQgdG8gYmUgdXNlZCBpcyIsVCxfLHBbVF0pO2NvbnN0IEE9IkxTLSIreS5zdGFydCxQPSJMRS0iK3kuZW5kLFI9e3N0eWxlOiIiLGxhYmVsU3R5bGU6IiJ9O3N3aXRjaChSLm1pbmxlbj15Lmxlbmd0aHx8MSx5LnR5cGU9PT0iYXJyb3dfb3BlbiI/Ui5hcnJvd2hlYWQ9Im5vbmUiOlIuYXJyb3doZWFkPSJub3JtYWwiLFIuYXJyb3dUeXBlU3RhcnQ9ImFycm93X29wZW4iLFIuYXJyb3dUeXBlRW5kPSJhcnJvd19vcGVuIix5LnR5cGUpe2Nhc2UiZG91YmxlX2Fycm93X2Nyb3NzIjpSLmFycm93VHlwZVN0YXJ0PSJhcnJvd19jcm9zcyI7Y2FzZSJhcnJvd19jcm9zcyI6Ui5hcnJvd1R5cGVFbmQ9ImFycm93X2Nyb3NzIjticmVhaztjYXNlImRvdWJsZV9hcnJvd19wb2ludCI6Ui5hcnJvd1R5cGVTdGFydD0iYXJyb3dfcG9pbnQiO2Nhc2UiYXJyb3dfcG9pbnQiOlIuYXJyb3dUeXBlRW5kPSJhcnJvd19wb2ludCI7YnJlYWs7Y2FzZSJkb3VibGVfYXJyb3dfY2lyY2xlIjpSLmFycm93VHlwZVN0YXJ0PSJhcnJvd19jaXJjbGUiO2Nhc2UiYXJyb3dfY2lyY2xlIjpSLmFycm93VHlwZUVuZD0iYXJyb3dfY2lyY2xlIjticmVha31sZXQgRj0iIixqPSIiO3N3aXRjaCh5LnN0cm9rZSl7Y2FzZSJub3JtYWwiOkY9ImZpbGw6bm9uZTsiLHYhPT12b2lkIDAmJihGPXYpLGIhPT12b2lkIDAmJihqPWIpLFIudGhpY2tuZXNzPSJub3JtYWwiLFIucGF0dGVybj0ic29saWQiO2JyZWFrO2Nhc2UiZG90dGVkIjpSLnRoaWNrbmVzcz0ibm9ybWFsIixSLnBhdHRlcm49ImRvdHRlZCIsUi5zdHlsZT0iZmlsbDpub25lO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWRhc2hhcnJheTozOyI7YnJlYWs7Y2FzZSJ0aGljayI6Ui50aGlja25lc3M9InRoaWNrIixSLnBhdHRlcm49InNvbGlkIixSLnN0eWxlPSJzdHJva2Utd2lkdGg6IDMuNXB4O2ZpbGw6bm9uZTsiO2JyZWFrO2Nhc2UiaW52aXNpYmxlIjpSLnRoaWNrbmVzcz0iaW52aXNpYmxlIixSLnBhdHRlcm49InNvbGlkIixSLnN0eWxlPSJzdHJva2Utd2lkdGg6IDA7ZmlsbDpub25lOyI7YnJlYWt9aWYoeS5zdHlsZSE9PXZvaWQgMCl7Y29uc3QgSz1vbSh5LnN0eWxlKTtGPUsuc3R5bGUsaj1LLmxhYmVsU3R5bGV9Ui5zdHlsZT1SLnN0eWxlKz1GLFIubGFiZWxTdHlsZT1SLmxhYmVsU3R5bGUrPWoseS5pbnRlcnBvbGF0ZSE9PXZvaWQgMD9SLmN1cnZlPU92KHkuaW50ZXJwb2xhdGUsa3ApOmkuZGVmYXVsdEludGVycG9sYXRlIT09dm9pZCAwP1IuY3VydmU9T3YoaS5kZWZhdWx0SW50ZXJwb2xhdGUsa3ApOlIuY3VydmU9T3YoTlVlLmN1cnZlLGtwKSx5LnRleHQ9PT12b2lkIDA/eS5zdHlsZSE9PXZvaWQgMCYmKFIuYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiKTooUi5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIsUi5sYWJlbHBvcz0iYyIpLFIubGFiZWxUeXBlPXkubGFiZWxUeXBlLFIubGFiZWw9YXdhaXQgQ0MoeS50ZXh0LnJlcGxhY2UoY2kubGluZUJyZWFrUmVnZXgsYApgKSxxdCgpKSx5LnN0eWxlPT09dm9pZCAwJiYoUi5zdHlsZT1SLnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZTsiKSxSLmxhYmVsU3R5bGU9Ui5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IiksUi5pZD1fLFIuY2xhc3Nlcz0iZmxvd2NoYXJ0LWxpbmsgIitBKyIgIitQLHMuc2V0RWRnZSh5LnN0YXJ0LHkuZW5kLFIsZCl9fSxIbWU9e3NldENvbmY6Q2VuLGFkZFZlcnRpY2VzOlBVZSxhZGRFZGdlczpCVWUsZ2V0Q2xhc3NlczpmdW5jdGlvbihpLHMpe3JldHVybiBzLmRiLmdldENsYXNzZXMoKX0sZHJhdzphc3luYyBmdW5jdGlvbihpLHMsdSxkKXtYZS5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCIpO2xldCBwPWQuZGIuZ2V0RGlyZWN0aW9uKCk7cD09PXZvaWQgMCYmKHA9IlREIik7Y29uc3R7c2VjdXJpdHlMZXZlbDp2LGZsb3djaGFydDpifT1xdCgpLHk9Yi5ub2RlU3BhY2luZ3x8NTAsVD1iLnJhbmtTcGFjaW5nfHw1MDtsZXQgXzt2PT09InNhbmRib3giJiYoXz1JcigiI2kiK3MpKTtjb25zdCBBPUlyKHY9PT0ic2FuZGJveCI/Xy5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksUD12PT09InNhbmRib3giP18ubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsUj1uZXcgQjAoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpwLG5vZGVzZXA6eSxyYW5rc2VwOlQsbWFyZ2lueDowLG1hcmdpbnk6MH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO2xldCBGO2NvbnN0IGo9ZC5kYi5nZXRTdWJHcmFwaHMoKTtYZS5pbmZvKCJTdWJncmFwaHMgLSAiLGopO2ZvcihsZXQgYWU9ai5sZW5ndGgtMTthZT49MDthZS0tKUY9althZV0sWGUuaW5mbygiU3ViZ3JhcGggLSAiLEYpLGQuZGIuYWRkVmVydGV4KEYuaWQse3RleHQ6Ri50aXRsZSx0eXBlOkYubGFiZWxUeXBlfSwiZ3JvdXAiLHZvaWQgMCxGLmNsYXNzZXMsRi5kaXIpO2NvbnN0IEs9ZC5kYi5nZXRWZXJ0aWNlcygpLGVlPWQuZGIuZ2V0RWRnZXMoKTtYZS5pbmZvKCJFZGdlcyIsZWUpO2xldCBpZT0wO2ZvcihpZT1qLmxlbmd0aC0xO2llPj0wO2llLS0pe0Y9altpZV0sX0JlKCJjbHVzdGVyIikuYXBwZW5kKCJ0ZXh0Iik7Zm9yKGxldCBhZT0wO2FlPEYubm9kZXMubGVuZ3RoO2FlKyspWGUuaW5mbygiU2V0dGluZyB1cCBzdWJncmFwaHMiLEYubm9kZXNbYWVdLEYuaWQpLFIuc2V0UGFyZW50KEYubm9kZXNbYWVdLEYuaWQpfWF3YWl0IFBVZShLLFIscyxBLFAsZCksYXdhaXQgQlVlKGVlLFIpO2NvbnN0IG9lPUEuc2VsZWN0KGBbaWQ9IiR7c30iXWApLHBlPUEuc2VsZWN0KCIjIitzKyIgZyIpO2lmKGF3YWl0IHFtZShwZSxSLFsicG9pbnQiLCJjaXJjbGUiLCJjcm9zcyJdLCJmbG93Y2hhcnQiLHMpLEFvLmluc2VydFRpdGxlKG9lLCJmbG93Y2hhcnRUaXRsZVRleHQiLGIudGl0bGVUb3BNYXJnaW4sZC5kYi5nZXREaWFncmFtVGl0bGUoKSkseTkoUixvZSxiLmRpYWdyYW1QYWRkaW5nLGIudXNlTWF4V2lkdGgpLGQuZGIuaW5kZXhOb2Rlcygic3ViR3JhcGgiK2llKSwhYi5odG1sTGFiZWxzKXtjb25zdCBhZT1QLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJytzKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpO2Zvcihjb25zdCBuZSBvZiBhZSl7Y29uc3Qgc2U9bmUuZ2V0QkJveCgpLGRlPVAuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlY3QiKTtkZS5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxkZS5zZXRBdHRyaWJ1dGUoInJ5IiwwKSxkZS5zZXRBdHRyaWJ1dGUoIndpZHRoIixzZS53aWR0aCksZGUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLHNlLmhlaWdodCksbmUuaW5zZXJ0QmVmb3JlKGRlLG5lLmZpcnN0Q2hpbGQpfX1PYmplY3Qua2V5cyhLKS5mb3JFYWNoKGZ1bmN0aW9uKGFlKXtjb25zdCBuZT1LW2FlXTtpZihuZS5saW5rKXtjb25zdCBzZT1JcigiIyIrcysnIFtpZD0iJythZSsnIl0nKTtpZihzZSl7Y29uc3QgZGU9UC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO2RlLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNsYXNzIixuZS5jbGFzc2VzLmpvaW4oIiAiKSksZGUuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsbmUubGluayksZGUuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVsIiwibm9vcGVuZXIiKSx2PT09InNhbmRib3giP2RlLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsIl90b3AiKTpuZS5saW5rVGFyZ2V0JiZkZS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLG5lLmxpbmtUYXJnZXQpO2NvbnN0IFg9c2UuaW5zZXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIGRlfSwiOmZpcnN0LWNoaWxkIiksZ2U9c2Uuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIik7Z2UmJlguYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIGdlLm5vZGUoKX0pO2NvbnN0IFc9c2Uuc2VsZWN0KCIubGFiZWwiKTtXJiZYLmFwcGVuZChmdW5jdGlvbigpe3JldHVybiBXLm5vZGUoKX0pfX19KX19LFNlbj0oaSxzKT0+e2NvbnN0IHU9QVJlLGQ9dShpLCJyIikscD11KGksImciKSx2PXUoaSwiYiIpO3JldHVybiBTQyhkLHAsdixzKX0sRlVlPWk9PmAubGFiZWwgewogICAgZm9udC1mYW1pbHk6ICR7aS5mb250RmFtaWx5fTsKICAgIGNvbG9yOiAke2kubm9kZVRleHRDb2xvcnx8aS50ZXh0Q29sb3J9OwogIH0KICAuY2x1c3Rlci1sYWJlbCB0ZXh0IHsKICAgIGZpbGw6ICR7aS50aXRsZUNvbG9yfTsKICB9CiAgLmNsdXN0ZXItbGFiZWwgc3BhbixwIHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAubGFiZWwgdGV4dCxzcGFuLHAgewogICAgZmlsbDogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICAgIGNvbG9yOiAke2kubm9kZVRleHRDb2xvcnx8aS50ZXh0Q29sb3J9OwogIH0KCiAgLm5vZGUgcmVjdCwKICAubm9kZSBjaXJjbGUsCiAgLm5vZGUgZWxsaXBzZSwKICAubm9kZSBwb2x5Z29uLAogIC5ub2RlIHBhdGggewogICAgZmlsbDogJHtpLm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CiAgLmZsb3djaGFydC1sYWJlbCB0ZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgfQogIC8vIC5mbG93Y2hhcnQtbGFiZWwgLnRleHQtb3V0ZXItdHNwYW4gewogIC8vICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAvLyB9CiAgLy8gLmZsb3djaGFydC1sYWJlbCAudGV4dC1pbm5lci10c3BhbiB7CiAgLy8gICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgLy8gfQoKICAubm9kZSAua2F0ZXggcGF0aCB7CiAgICBmaWxsOiAjMDAwOwogICAgc3Ryb2tlOiAjMDAwOwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAubm9kZSAubGFiZWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAubm9kZS5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHtpLmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyLjBweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgICBmaWxsOiAke2kuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICB9CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQoKICAvKiBGb3IgaHRtbCBsYWJlbHMgb25seSAqLwogIC5sYWJlbEJrZyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke1NlbihpLmVkZ2VMYWJlbEJhY2tncm91bmQsLjUpfTsKICAgIC8vIGJhY2tncm91bmQtY29sb3I6IAogIH0KCiAgLmNsdXN0ZXIgcmVjdCB7CiAgICBmaWxsOiAke2kuY2x1c3RlckJrZ307CiAgICBzdHJva2U6ICR7aS5jbHVzdGVyQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuY2x1c3RlciBzcGFuLHAgewogICAgY29sb3I6ICR7aS50aXRsZUNvbG9yfTsKICB9CiAgLyogLmNsdXN0ZXIgZGl2IHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfSAqLwoKICBkaXYubWVybWFpZFRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWF4LXdpZHRoOiAyMDBweDsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2kuYm9yZGVyMn07CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEwMDsKICB9CgogIC5mbG93Y2hhcnRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KYCxfZW49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpHYmUsZGI6SEMscmVuZGVyZXI6SG1lLHN0eWxlczpGVWUsaW5pdDppPT57aS5mbG93Y2hhcnR8fChpLmZsb3djaGFydD17fSksaS5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZT1pLmFycm93TWFya2VyQWJzb2x1dGUsX1F0LnNldENvbmYoaS5mbG93Y2hhcnQpLEhDLmNsZWFyKCksSEMuc2V0R2VuKCJnZW4tMSIpfX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksQWVuPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6R2JlLGRiOkhDLHJlbmRlcmVyOkhtZSxzdHlsZXM6RlVlLGluaXQ6aT0+e2kuZmxvd2NoYXJ0fHwoaS5mbG93Y2hhcnQ9e30pLGkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGU9aS5hcnJvd01hcmtlckFic29sdXRlLF9qdCh7Zmxvd2NoYXJ0OnthcnJvd01hcmtlckFic29sdXRlOmkuYXJyb3dNYXJrZXJBYnNvbHV0ZX19KSxIbWUuc2V0Q29uZihpLmZsb3djaGFydCksSEMuY2xlYXIoKSxIQy5zZXRHZW4oImdlbi0yIil9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgVm1lPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oZGUsWCxnZSxXKXtmb3IoZ2U9Z2V8fHt9LFc9ZGUubGVuZ3RoO1ctLTtnZVtkZVtXXV09WCk7cmV0dXJuIGdlfSxzPVs2LDgsMTAsMjAsMjIsMjQsMjYsMjcsMjhdLHU9WzEsMTBdLGQ9WzEsMTFdLHA9WzEsMTJdLHY9WzEsMTNdLGI9WzEsMTRdLHk9WzEsMTVdLFQ9WzEsMjFdLF89WzEsMjJdLEE9WzEsMjNdLFA9WzEsMjRdLFI9WzEsMjVdLEY9WzYsOCwxMCwxMywxNSwxOCwxOSwyMCwyMiwyNCwyNiwyNywyOCw0MSw0Miw0Myw0NCw0NV0saj1bMSwzNF0sSz1bMjcsMjgsNDYsNDddLGVlPVs0MSw0Miw0Myw0NCw0NV0saWU9WzE3LDM0XSxvZT1bMSw1NF0scGU9WzEsNTNdLGJlPVsxNywzNCwzNiwzOF0sYWU9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLEVSX0RJQUdSQU06NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxTUEFDRTo4LHN0YXRlbWVudDo5LE5FV0xJTkU6MTAsZW50aXR5TmFtZToxMSxyZWxTcGVjOjEyLCI6IjoxMyxyb2xlOjE0LEJMT0NLX1NUQVJUOjE1LGF0dHJpYnV0ZXM6MTYsQkxPQ0tfU1RPUDoxNyxTUVM6MTgsU1FFOjE5LHRpdGxlOjIwLHRpdGxlX3ZhbHVlOjIxLGFjY190aXRsZToyMixhY2NfdGl0bGVfdmFsdWU6MjMsYWNjX2Rlc2NyOjI0LGFjY19kZXNjcl92YWx1ZToyNSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjI2LEFMUEhBTlVNOjI3LEVOVElUWV9OQU1FOjI4LGF0dHJpYnV0ZToyOSxhdHRyaWJ1dGVUeXBlOjMwLGF0dHJpYnV0ZU5hbWU6MzEsYXR0cmlidXRlS2V5VHlwZUxpc3Q6MzIsYXR0cmlidXRlQ29tbWVudDozMyxBVFRSSUJVVEVfV09SRDozNCxhdHRyaWJ1dGVLZXlUeXBlOjM1LENPTU1BOjM2LEFUVFJJQlVURV9LRVk6MzcsQ09NTUVOVDozOCxjYXJkaW5hbGl0eTozOSxyZWxUeXBlOjQwLFpFUk9fT1JfT05FOjQxLFpFUk9fT1JfTU9SRTo0MixPTkVfT1JfTU9SRTo0MyxPTkxZX09ORTo0NCxNRF9QQVJFTlQ6NDUsTk9OX0lERU5USUZZSU5HOjQ2LElERU5USUZZSU5HOjQ3LFdPUkQ6NDgsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IkVSX0RJQUdSQU0iLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJORVdMSU5FIiwxMzoiOiIsMTU6IkJMT0NLX1NUQVJUIiwxNzoiQkxPQ0tfU1RPUCIsMTg6IlNRUyIsMTk6IlNRRSIsMjA6InRpdGxlIiwyMToidGl0bGVfdmFsdWUiLDIyOiJhY2NfdGl0bGUiLDIzOiJhY2NfdGl0bGVfdmFsdWUiLDI0OiJhY2NfZGVzY3IiLDI1OiJhY2NfZGVzY3JfdmFsdWUiLDI2OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwyNzoiQUxQSEFOVU0iLDI4OiJFTlRJVFlfTkFNRSIsMzQ6IkFUVFJJQlVURV9XT1JEIiwzNjoiQ09NTUEiLDM3OiJBVFRSSUJVVEVfS0VZIiwzODoiQ09NTUVOVCIsNDE6IlpFUk9fT1JfT05FIiw0MjoiWkVST19PUl9NT1JFIiw0MzoiT05FX09SX01PUkUiLDQ0OiJPTkxZX09ORSIsNDU6Ik1EX1BBUkVOVCIsNDY6Ik5PTl9JREVOVElGWUlORyIsNDc6IklERU5USUZZSU5HIiw0ODoiV09SRCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbNSwwXSxbNSwyXSxbNywyXSxbNywxXSxbNywxXSxbNywxXSxbOSw1XSxbOSw0XSxbOSwzXSxbOSwxXSxbOSw3XSxbOSw2XSxbOSw0XSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwxXSxbMTEsMV0sWzExLDFdLFsxNiwxXSxbMTYsMl0sWzI5LDJdLFsyOSwzXSxbMjksM10sWzI5LDRdLFszMCwxXSxbMzEsMV0sWzMyLDFdLFszMiwzXSxbMzUsMV0sWzMzLDFdLFsxMiwzXSxbMzksMV0sWzM5LDFdLFszOSwxXSxbMzksMV0sWzM5LDFdLFs0MCwxXSxbNDAsMV0sWzE0LDFdLFsxNCwxXSxbMTQsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oWCxnZSxXLHhlLFUsRmUsUGUpe3ZhciBqZT1GZS5sZW5ndGgtMTtzd2l0Y2goVSl7Y2FzZSAxOmJyZWFrO2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOkZlW2plLTFdLnB1c2goRmVbamVdKSx0aGlzLiQ9RmVbamUtMV07YnJlYWs7Y2FzZSA0OmNhc2UgNTp0aGlzLiQ9RmVbamVdO2JyZWFrO2Nhc2UgNjpjYXNlIDc6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgODp4ZS5hZGRFbnRpdHkoRmVbamUtNF0pLHhlLmFkZEVudGl0eShGZVtqZS0yXSkseGUuYWRkUmVsYXRpb25zaGlwKEZlW2plLTRdLEZlW2plXSxGZVtqZS0yXSxGZVtqZS0zXSk7YnJlYWs7Y2FzZSA5OnhlLmFkZEVudGl0eShGZVtqZS0zXSkseGUuYWRkQXR0cmlidXRlcyhGZVtqZS0zXSxGZVtqZS0xXSk7YnJlYWs7Y2FzZSAxMDp4ZS5hZGRFbnRpdHkoRmVbamUtMl0pO2JyZWFrO2Nhc2UgMTE6eGUuYWRkRW50aXR5KEZlW2plXSk7YnJlYWs7Y2FzZSAxMjp4ZS5hZGRFbnRpdHkoRmVbamUtNl0sRmVbamUtNF0pLHhlLmFkZEF0dHJpYnV0ZXMoRmVbamUtNl0sRmVbamUtMV0pO2JyZWFrO2Nhc2UgMTM6eGUuYWRkRW50aXR5KEZlW2plLTVdLEZlW2plLTNdKTticmVhaztjYXNlIDE0OnhlLmFkZEVudGl0eShGZVtqZS0zXSxGZVtqZS0xXSk7YnJlYWs7Y2FzZSAxNTpjYXNlIDE2OnRoaXMuJD1GZVtqZV0udHJpbSgpLHhlLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxNzpjYXNlIDE4OnRoaXMuJD1GZVtqZV0udHJpbSgpLHhlLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxOTpjYXNlIDQzOnRoaXMuJD1GZVtqZV07YnJlYWs7Y2FzZSAyMDpjYXNlIDQxOmNhc2UgNDI6dGhpcy4kPUZlW2plXS5yZXBsYWNlKC8iL2csIiIpO2JyZWFrO2Nhc2UgMjE6Y2FzZSAyOTp0aGlzLiQ9W0ZlW2plXV07YnJlYWs7Y2FzZSAyMjpGZVtqZV0ucHVzaChGZVtqZS0xXSksdGhpcy4kPUZlW2plXTticmVhaztjYXNlIDIzOnRoaXMuJD17YXR0cmlidXRlVHlwZTpGZVtqZS0xXSxhdHRyaWJ1dGVOYW1lOkZlW2plXX07YnJlYWs7Y2FzZSAyNDp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6RmVbamUtMl0sYXR0cmlidXRlTmFtZTpGZVtqZS0xXSxhdHRyaWJ1dGVLZXlUeXBlTGlzdDpGZVtqZV19O2JyZWFrO2Nhc2UgMjU6dGhpcy4kPXthdHRyaWJ1dGVUeXBlOkZlW2plLTJdLGF0dHJpYnV0ZU5hbWU6RmVbamUtMV0sYXR0cmlidXRlQ29tbWVudDpGZVtqZV19O2JyZWFrO2Nhc2UgMjY6dGhpcy4kPXthdHRyaWJ1dGVUeXBlOkZlW2plLTNdLGF0dHJpYnV0ZU5hbWU6RmVbamUtMl0sYXR0cmlidXRlS2V5VHlwZUxpc3Q6RmVbamUtMV0sYXR0cmlidXRlQ29tbWVudDpGZVtqZV19O2JyZWFrO2Nhc2UgMjc6Y2FzZSAyODpjYXNlIDMxOnRoaXMuJD1GZVtqZV07YnJlYWs7Y2FzZSAzMDpGZVtqZS0yXS5wdXNoKEZlW2plXSksdGhpcy4kPUZlW2plLTJdO2JyZWFrO2Nhc2UgMzI6dGhpcy4kPUZlW2plXS5yZXBsYWNlKC8iL2csIiIpO2JyZWFrO2Nhc2UgMzM6dGhpcy4kPXtjYXJkQTpGZVtqZV0scmVsVHlwZTpGZVtqZS0xXSxjYXJkQjpGZVtqZS0yXX07YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9eGUuQ2FyZGluYWxpdHkuWkVST19PUl9PTkU7YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9eGUuQ2FyZGluYWxpdHkuWkVST19PUl9NT1JFO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPXhlLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPXhlLkNhcmRpbmFsaXR5Lk9OTFlfT05FO2JyZWFrO2Nhc2UgMzg6dGhpcy4kPXhlLkNhcmRpbmFsaXR5Lk1EX1BBUkVOVDticmVhaztjYXNlIDM5OnRoaXMuJD14ZS5JZGVudGlmaWNhdGlvbi5OT05fSURFTlRJRllJTkc7YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9eGUuSWRlbnRpZmljYXRpb24uSURFTlRJRllJTkc7YnJlYWt9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LGkocyxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOjksMjA6dSwyMjpkLDI0OnAsMjY6diwyNzpiLDI4Onl9LGkocyxbMiw3XSx7MTpbMiwxXX0pLGkocyxbMiwzXSksezk6MTYsMTE6OSwyMDp1LDIyOmQsMjQ6cCwyNjp2LDI3OmIsMjg6eX0saShzLFsyLDVdKSxpKHMsWzIsNl0pLGkocyxbMiwxMV0sezEyOjE3LDM5OjIwLDE1OlsxLDE4XSwxODpbMSwxOV0sNDE6VCw0MjpfLDQzOkEsNDQ6UCw0NTpSfSksezIxOlsxLDI2XX0sezIzOlsxLDI3XX0sezI1OlsxLDI4XX0saShzLFsyLDE4XSksaShGLFsyLDE5XSksaShGLFsyLDIwXSksaShzLFsyLDRdKSx7MTE6MjksMjc6YiwyODp5fSx7MTY6MzAsMTc6WzEsMzFdLDI5OjMyLDMwOjMzLDM0Omp9LHsxMTozNSwyNzpiLDI4Onl9LHs0MDozNiw0NjpbMSwzN10sNDc6WzEsMzhdfSxpKEssWzIsMzRdKSxpKEssWzIsMzVdKSxpKEssWzIsMzZdKSxpKEssWzIsMzddKSxpKEssWzIsMzhdKSxpKHMsWzIsMTVdKSxpKHMsWzIsMTZdKSxpKHMsWzIsMTddKSx7MTM6WzEsMzldfSx7MTc6WzEsNDBdfSxpKHMsWzIsMTBdKSx7MTY6NDEsMTc6WzIsMjFdLDI5OjMyLDMwOjMzLDM0Omp9LHszMTo0MiwzNDpbMSw0M119LHszNDpbMiwyN119LHsxOTpbMSw0NF19LHszOTo0NSw0MTpULDQyOl8sNDM6QSw0NDpQLDQ1OlJ9LGkoZWUsWzIsMzldKSxpKGVlLFsyLDQwXSksezE0OjQ2LDI3OlsxLDQ5XSwyODpbMSw0OF0sNDg6WzEsNDddfSxpKHMsWzIsOV0pLHsxNzpbMiwyMl19LGkoaWUsWzIsMjNdLHszMjo1MCwzMzo1MSwzNTo1MiwzNzpvZSwzODpwZX0pLGkoWzE3LDM0LDM3LDM4XSxbMiwyOF0pLGkocyxbMiwxNF0sezE1OlsxLDU1XX0pLGkoWzI3LDI4XSxbMiwzM10pLGkocyxbMiw4XSksaShzLFsyLDQxXSksaShzLFsyLDQyXSksaShzLFsyLDQzXSksaShpZSxbMiwyNF0sezMzOjU2LDM2OlsxLDU3XSwzODpwZX0pLGkoaWUsWzIsMjVdKSxpKGJlLFsyLDI5XSksaShpZSxbMiwzMl0pLGkoYmUsWzIsMzFdKSx7MTY6NTgsMTc6WzEsNTldLDI5OjMyLDMwOjMzLDM0Omp9LGkoaWUsWzIsMjZdKSx7MzU6NjAsMzc6b2V9LHsxNzpbMSw2MV19LGkocyxbMiwxM10pLGkoYmUsWzIsMzBdKSxpKHMsWzIsMTJdKV0sZGVmYXVsdEFjdGlvbnM6ezM0OlsyLDI3XSw0MTpbMiwyMl19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oWCxnZSl7aWYoZ2UucmVjb3ZlcmFibGUpdGhpcy50cmFjZShYKTtlbHNle3ZhciBXPW5ldyBFcnJvcihYKTt0aHJvdyBXLmhhc2g9Z2UsV319LHBhcnNlOmZ1bmN0aW9uKFgpe3ZhciBnZT10aGlzLFc9WzBdLHhlPVtdLFU9W251bGxdLEZlPVtdLFBlPXRoaXMudGFibGUsamU9IiIsSWU9MCxTZT0wLENlPTIsa2U9MSxLZT1GZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxGdD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLE5lPXt5eTp7fX07Zm9yKHZhciBnbiBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGduKSYmKE5lLnl5W2duXT10aGlzLnl5W2duXSk7RnQuc2V0SW5wdXQoWCxOZS55eSksTmUueXkubGV4ZXI9RnQsTmUueXkucGFyc2VyPXRoaXMsdHlwZW9mIEZ0Lnl5bGxvYz4idSImJihGdC55eWxsb2M9e30pO3ZhciBfdD1GdC55eWxsb2M7RmUucHVzaChfdCk7dmFyIEV0PUZ0Lm9wdGlvbnMmJkZ0Lm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBOZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1OZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBHdCgpe3ZhciBqaTtyZXR1cm4gamk9eGUucG9wKCl8fEZ0LmxleCgpfHxrZSx0eXBlb2YgamkhPSJudW1iZXIiJiYoamkgaW5zdGFuY2VvZiBBcnJheSYmKHhlPWppLGppPXhlLnBvcCgpKSxqaT1nZS5zeW1ib2xzX1tqaV18fGppKSxqaX1mb3IodmFyIGxuLHh0LFB0LFFlLER0PXt9LGt0LE9uLGh0LHpyOzspe2lmKHh0PVdbVy5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t4dF0/UHQ9dGhpcy5kZWZhdWx0QWN0aW9uc1t4dF06KChsbj09PW51bGx8fHR5cGVvZiBsbj4idSIpJiYobG49R3QoKSksUHQ9UGVbeHRdJiZQZVt4dF1bbG5dKSx0eXBlb2YgUHQ+InUifHwhUHQubGVuZ3RofHwhUHRbMF0pe3ZhciB5dD0iIjt6cj1bXTtmb3Ioa3QgaW4gUGVbeHRdKXRoaXMudGVybWluYWxzX1trdF0mJmt0PkNlJiZ6ci5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19ba3RdKyInIik7RnQuc2hvd1Bvc2l0aW9uP3l0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEllKzEpK2A6CmArRnQuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCt6ci5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW2xuXXx8bG4pKyInIjp5dD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhJZSsxKSsiOiBVbmV4cGVjdGVkICIrKGxuPT1rZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tsbl18fGxuKSsiJyIpLHRoaXMucGFyc2VFcnJvcih5dCx7dGV4dDpGdC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bbG5dfHxsbixsaW5lOkZ0Lnl5bGluZW5vLGxvYzpfdCxleHBlY3RlZDp6cn0pfWlmKFB0WzBdaW5zdGFuY2VvZiBBcnJheSYmUHQubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit4dCsiLCB0b2tlbjogIitsbik7c3dpdGNoKFB0WzBdKXtjYXNlIDE6Vy5wdXNoKGxuKSxVLnB1c2goRnQueXl0ZXh0KSxGZS5wdXNoKEZ0Lnl5bGxvYyksVy5wdXNoKFB0WzFdKSxsbj1udWxsLFNlPUZ0Lnl5bGVuZyxqZT1GdC55eXRleHQsSWU9RnQueXlsaW5lbm8sX3Q9RnQueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihPbj10aGlzLnByb2R1Y3Rpb25zX1tQdFsxXV1bMV0sRHQuJD1VW1UubGVuZ3RoLU9uXSxEdC5fJD17Zmlyc3RfbGluZTpGZVtGZS5sZW5ndGgtKE9ufHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6RmVbRmUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46RmVbRmUubGVuZ3RoLShPbnx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpGZVtGZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEV0JiYoRHQuXyQucmFuZ2U9W0ZlW0ZlLmxlbmd0aC0oT258fDEpXS5yYW5nZVswXSxGZVtGZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxRZT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoRHQsW2plLFNlLEllLE5lLnl5LFB0WzFdLFUsRmVdLmNvbmNhdChLZSkpLHR5cGVvZiBRZTwidSIpcmV0dXJuIFFlO09uJiYoVz1XLnNsaWNlKDAsLTEqT24qMiksVT1VLnNsaWNlKDAsLTEqT24pLEZlPUZlLnNsaWNlKDAsLTEqT24pKSxXLnB1c2godGhpcy5wcm9kdWN0aW9uc19bUHRbMV1dWzBdKSxVLnB1c2goRHQuJCksRmUucHVzaChEdC5fJCksaHQ9UGVbV1tXLmxlbmd0aC0yXV1bV1tXLmxlbmd0aC0xXV0sVy5wdXNoKGh0KTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sbmU9ZnVuY3Rpb24oKXt2YXIgZGU9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oZ2UsVyl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihnZSxXKTtlbHNlIHRocm93IG5ldyBFcnJvcihnZSl9LHNldElucHV0OmZ1bmN0aW9uKFgsZ2Upe3JldHVybiB0aGlzLnl5PWdlfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1YLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBYPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1YLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1YLHRoaXMubWF0Y2hlZCs9WDt2YXIgZ2U9WC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIGdlPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxYfSx1bnB1dDpmdW5jdGlvbihYKXt2YXIgZ2U9WC5sZW5ndGgsVz1YLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9WCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZ2UpLHRoaXMub2Zmc2V0LT1nZTt2YXIgeGU9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksVy5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPVcubGVuZ3RoLTEpO3ZhciBVPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpXPyhXLmxlbmd0aD09PXhlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkreGVbeGUubGVuZ3RoLVcubGVuZ3RoXS5sZW5ndGgtV1swXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWdlfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W1VbMF0sVVswXSt0aGlzLnl5bGVuZy1nZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKFgpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShYKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBYPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oWC5sZW5ndGg+MjA/Ii4uLiI6IiIpK1guc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgWD10aGlzLm1hdGNoO3JldHVybiBYLmxlbmd0aDwyMCYmKFgrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVgubGVuZ3RoKSksKFguc3Vic3RyKDAsMjApKyhYLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgWD10aGlzLnBhc3RJbnB1dCgpLGdlPW5ldyBBcnJheShYLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIFgrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK2dlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihYLGdlKXt2YXIgVyx4ZSxVO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihVPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSkseGU9WFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykseGUmJih0aGlzLnl5bGluZW5vKz14ZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjp4ZT94ZVt4ZS5sZW5ndGgtMV0ubGVuZ3RoLXhlW3hlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK1hbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9WFswXSx0aGlzLm1hdGNoKz1YWzBdLHRoaXMubWF0Y2hlcz1YLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKFhbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPVhbMF0sVz10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxnZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxXKXJldHVybiBXO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBGZSBpbiBVKXRoaXNbRmVdPVVbRmVdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIFgsZ2UsVyx4ZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBVPXRoaXMuX2N1cnJlbnRSdWxlcygpLEZlPTA7RmU8VS5sZW5ndGg7RmUrKylpZihXPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbVVtGZV1dKSxXJiYoIWdlfHxXWzBdLmxlbmd0aD5nZVswXS5sZW5ndGgpKXtpZihnZT1XLHhlPUZlLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKFg9dGhpcy50ZXN0X21hdGNoKFcsVVtGZV0pLFghPT0hMSlyZXR1cm4gWDtpZih0aGlzLl9iYWNrdHJhY2spe2dlPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGdlPyhYPXRoaXMudGVzdF9tYXRjaChnZSxVW3hlXSksWCE9PSExP1g6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBnZT10aGlzLm5leHQoKTtyZXR1cm4gZ2V8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKGdlKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goZ2UpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBnZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBnZT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKGdlKXtyZXR1cm4gZ2U9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhnZXx8MCksZ2U+PTA/dGhpcy5jb25kaXRpb25TdGFja1tnZV06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oZ2Upe3RoaXMuYmVnaW4oZ2UpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGdlLFcseGUsVSl7c3dpdGNoKHhlKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDIyO2Nhc2UgMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgMjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMjQ7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSA0OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA3OnJldHVybiAxMDtjYXNlIDg6YnJlYWs7Y2FzZSA5OnJldHVybiA4O2Nhc2UgMTA6cmV0dXJuIDI4O2Nhc2UgMTE6cmV0dXJuIDQ4O2Nhc2UgMTI6cmV0dXJuIDQ7Y2FzZSAxMzpyZXR1cm4gdGhpcy5iZWdpbigiYmxvY2siKSwxNTtjYXNlIDE0OnJldHVybiAzNjtjYXNlIDE1OmJyZWFrO2Nhc2UgMTY6cmV0dXJuIDM3O2Nhc2UgMTc6cmV0dXJuIDM0O2Nhc2UgMTg6cmV0dXJuIDM0O2Nhc2UgMTk6cmV0dXJuIDM4O2Nhc2UgMjA6YnJlYWs7Y2FzZSAyMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE3O2Nhc2UgMjI6cmV0dXJuIFcueXl0ZXh0WzBdO2Nhc2UgMjM6cmV0dXJuIDE4O2Nhc2UgMjQ6cmV0dXJuIDE5O2Nhc2UgMjU6cmV0dXJuIDQxO2Nhc2UgMjY6cmV0dXJuIDQzO2Nhc2UgMjc6cmV0dXJuIDQzO2Nhc2UgMjg6cmV0dXJuIDQzO2Nhc2UgMjk6cmV0dXJuIDQxO2Nhc2UgMzA6cmV0dXJuIDQxO2Nhc2UgMzE6cmV0dXJuIDQyO2Nhc2UgMzI6cmV0dXJuIDQyO2Nhc2UgMzM6cmV0dXJuIDQyO2Nhc2UgMzQ6cmV0dXJuIDQyO2Nhc2UgMzU6cmV0dXJuIDQyO2Nhc2UgMzY6cmV0dXJuIDQzO2Nhc2UgMzc6cmV0dXJuIDQyO2Nhc2UgMzg6cmV0dXJuIDQzO2Nhc2UgMzk6cmV0dXJuIDQ0O2Nhc2UgNDA6cmV0dXJuIDQ0O2Nhc2UgNDE6cmV0dXJuIDQ0O2Nhc2UgNDI6cmV0dXJuIDQ0O2Nhc2UgNDM6cmV0dXJuIDQxO2Nhc2UgNDQ6cmV0dXJuIDQyO2Nhc2UgNDU6cmV0dXJuIDQzO2Nhc2UgNDY6cmV0dXJuIDQ1O2Nhc2UgNDc6cmV0dXJuIDQ2O2Nhc2UgNDg6cmV0dXJuIDQ3O2Nhc2UgNDk6cmV0dXJuIDQ3O2Nhc2UgNTA6cmV0dXJuIDQ2O2Nhc2UgNTE6cmV0dXJuIDQ2O2Nhc2UgNTI6cmV0dXJuIDQ2O2Nhc2UgNTM6cmV0dXJuIDI3O2Nhc2UgNTQ6cmV0dXJuIFcueXl0ZXh0WzBdO2Nhc2UgNTU6cmV0dXJuIDZ9fSxydWxlczpbL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86W1xzXSspL2ksL14oPzoiW14iJVxyXG5cdlxiXFxdKyIpL2ksL14oPzoiW14iXSoiKS9pLC9eKD86ZXJEaWFncmFtXGIpL2ksL14oPzpceykvaSwvXig/OiwpL2ksL14oPzpccyspL2ksL14oPzpcYigoPzpQSyl8KD86RkspfCg/OlVLKSlcYikvaSwvXig/OiguKj8pW35dKC4qPykqW35dKS9pLC9eKD86W1wqQS1aYS16X11bQS1aYS16MC05XC1fXFtcXVwoXCldKikvaSwvXig/OiJbXiJdKiIpL2ksL14oPzpbXG5dKykvaSwvXig/Olx9KS9pLC9eKD86LikvaSwvXig/OlxbKS9pLC9eKD86XF0pL2ksL14oPzpvbmUgb3IgemVyb1xiKS9pLC9eKD86b25lIG9yIG1vcmVcYikvaSwvXig/Om9uZSBvciBtYW55XGIpL2ksL14oPzoxXCspL2ksL14oPzpcfG9cYikvaSwvXig/Onplcm8gb3Igb25lXGIpL2ksL14oPzp6ZXJvIG9yIG1vcmVcYikvaSwvXig/Onplcm8gb3IgbWFueVxiKS9pLC9eKD86MFwrKS9pLC9eKD86XH1vXGIpL2ksL14oPzptYW55XCgwXCkpL2ksL14oPzptYW55XCgxXCkpL2ksL14oPzptYW55XGIpL2ksL14oPzpcfVx8KS9pLC9eKD86b25lXGIpL2ksL14oPzpvbmx5IG9uZVxiKS9pLC9eKD86MVxiKS9pLC9eKD86XHxcfCkvaSwvXig/Om9cfCkvaSwvXig/Om9ceykvaSwvXig/Olx8XHspL2ksL14oPzpccyp1XGIpL2ksL14oPzpcLlwuKS9pLC9eKD86LS0pL2ksL14oPzp0b1xiKS9pLC9eKD86b3B0aW9uYWxseSB0b1xiKS9pLC9eKD86XC4tKS9pLC9eKD86LVwuKS9pLC9eKD86W0EtWmEtel9dW0EtWmEtejAtOVwtX10qKS9pLC9eKD86LikvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls1LDZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbM10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LGJsb2NrOntydWxlczpbMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjJdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsOCw5LDEwLDExLDEyLDEzLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIGRlfSgpO2FlLmxleGVyPW5lO2Z1bmN0aW9uIHNlKCl7dGhpcy55eT17fX1yZXR1cm4gc2UucHJvdG90eXBlPWFlLGFlLlBhcnNlcj1zZSxuZXcgc2V9KCk7Vm1lLnBhcnNlcj1WbWU7Y29uc3QgTGVuPVZtZTtsZXQgQjk9e30sVW1lPVtdO2NvbnN0IE1lbj17WkVST19PUl9PTkU6IlpFUk9fT1JfT05FIixaRVJPX09SX01PUkU6IlpFUk9fT1JfTU9SRSIsT05FX09SX01PUkU6Ik9ORV9PUl9NT1JFIixPTkxZX09ORToiT05MWV9PTkUiLE1EX1BBUkVOVDoiTURfUEFSRU5UIn0sRGVuPXtOT05fSURFTlRJRllJTkc6Ik5PTl9JREVOVElGWUlORyIsSURFTlRJRllJTkc6IklERU5USUZZSU5HIn0sUlVlPWZ1bmN0aW9uKGkscz12b2lkIDApe3JldHVybiBCOVtpXT09PXZvaWQgMD8oQjlbaV09e2F0dHJpYnV0ZXM6W10sYWxpYXM6c30sWGUuaW5mbygiQWRkZWQgbmV3IGVudGl0eSA6IixpKSk6QjlbaV0mJiFCOVtpXS5hbGlhcyYmcyYmKEI5W2ldLmFsaWFzPXMsWGUuaW5mbyhgQWRkIGFsaWFzICcke3N9JyB0byBlbnRpdHkgJyR7aX0nYCkpLEI5W2ldfSxJZW49e0NhcmRpbmFsaXR5Ok1lbixJZGVudGlmaWNhdGlvbjpEZW4sZ2V0Q29uZmlnOigpPT5xdCgpLmVyLGFkZEVudGl0eTpSVWUsYWRkQXR0cmlidXRlczpmdW5jdGlvbihpLHMpe2xldCB1PVJVZShpKSxkO2ZvcihkPXMubGVuZ3RoLTE7ZD49MDtkLS0pdS5hdHRyaWJ1dGVzLnB1c2goc1tkXSksWGUuZGVidWcoIkFkZGVkIGF0dHJpYnV0ZSAiLHNbZF0uYXR0cmlidXRlTmFtZSl9LGdldEVudGl0aWVzOigpPT5COSxhZGRSZWxhdGlvbnNoaXA6ZnVuY3Rpb24oaSxzLHUsZCl7bGV0IHA9e2VudGl0eUE6aSxyb2xlQTpzLGVudGl0eUI6dSxyZWxTcGVjOmR9O1VtZS5wdXNoKHApLFhlLmRlYnVnKCJBZGRlZCBuZXcgcmVsYXRpb25zaGlwIDoiLHApfSxnZXRSZWxhdGlvbnNoaXBzOigpPT5VbWUsY2xlYXI6ZnVuY3Rpb24oKXtCOT17fSxVbWU9W10sUGcoKX0sc2V0QWNjVGl0bGU6QmcsZ2V0QWNjVGl0bGU6Q3Asc2V0QWNjRGVzY3JpcHRpb246U3AsZ2V0QWNjRGVzY3JpcHRpb246X3Asc2V0RGlhZ3JhbVRpdGxlOmNtLGdldERpYWdyYW1UaXRsZTpBcH0sVTM9e09OTFlfT05FX1NUQVJUOiJPTkxZX09ORV9TVEFSVCIsT05MWV9PTkVfRU5EOiJPTkxZX09ORV9FTkQiLFpFUk9fT1JfT05FX1NUQVJUOiJaRVJPX09SX09ORV9TVEFSVCIsWkVST19PUl9PTkVfRU5EOiJaRVJPX09SX09ORV9FTkQiLE9ORV9PUl9NT1JFX1NUQVJUOiJPTkVfT1JfTU9SRV9TVEFSVCIsT05FX09SX01PUkVfRU5EOiJPTkVfT1JfTU9SRV9FTkQiLFpFUk9fT1JfTU9SRV9TVEFSVDoiWkVST19PUl9NT1JFX1NUQVJUIixaRVJPX09SX01PUkVfRU5EOiJaRVJPX09SX01PUkVfRU5EIixNRF9QQVJFTlRfRU5EOiJNRF9QQVJFTlRfRU5EIixNRF9QQVJFTlRfU1RBUlQ6Ik1EX1BBUkVOVF9TVEFSVCJ9LEczPXtFUk1hcmtlcnM6VTMsaW5zZXJ0TWFya2VyczpmdW5jdGlvbihpLHMpe2xldCB1O2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsVTMuTURfUEFSRU5UX1NUQVJUKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFUzLk1EX1BBUkVOVF9FTkQpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixVMy5PTkxZX09ORV9TVEFSVCkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDE4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixzLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTksMCBMOSwxOCBNMTUsMCBMMTUsMTgiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFUzLk9OTFlfT05FX0VORCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwxOCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIscy5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0zLDAgTDMsMTggTTksMCBMOSwxOCIpLHU9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixVMy5aRVJPX09SX09ORV9TVEFSVCkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDMwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIiksdS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIscy5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4IiwyMSkuYXR0cigiY3kiLDkpLmF0dHIoInIiLDYpLHUuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixzLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTksMCBMOSwxOCIpLHU9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixVMy5aRVJPX09SX09ORV9FTkQpLmF0dHIoInJlZlgiLDMwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMzApLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKSx1LmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixzLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDkpLmF0dHIoImN5Iiw5KS5hdHRyKCJyIiw2KSx1LmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIscy5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0yMSwwIEwyMSwxOCIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsVTMuT05FX09SX01PUkVfU1RBUlQpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDQ1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixzLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTAsMTggUSAxOCwwIDM2LDE4IFEgMTgsMzYgMCwxOCBNNDIsOSBMNDIsMjciKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFUzLk9ORV9PUl9NT1JFX0VORCkuYXR0cigicmVmWCIsMjcpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNDUpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLHMuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMyw5IEwzLDI3IE05LDE4IFEyNywwIDQ1LDE4IFEyNywzNiA5LDE4IiksdT1pLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFUzLlpFUk9fT1JfTU9SRV9TVEFSVCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKSx1LmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixzLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDQ4KS5hdHRyKCJjeSIsMTgpLmF0dHIoInIiLDYpLHUuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixzLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTAsMTggUTE4LDAgMzYsMTggUTE4LDM2IDAsMTgiKSx1PWkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsVTMuWkVST19PUl9NT1JFX0VORCkuYXR0cigicmVmWCIsMzkpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKSx1LmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixzLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDkpLmF0dHIoImN5IiwxOCkuYXR0cigiciIsNiksdS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLHMuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMjEsMTggUTM5LDAgNTcsMTggUTM5LDM2IDIxLDE4Iil9fSxPZW49L14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO2Z1bmN0aW9uIE5lbihpKXtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciJiZPZW4udGVzdChpKX1jb25zdCBVZD1bXTtmb3IobGV0IGk9MDtpPDI1NjsrK2kpVWQucHVzaCgoaSsyNTYpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7ZnVuY3Rpb24gUGVuKGkscz0wKXtyZXR1cm4gVWRbaVtzKzBdXStVZFtpW3MrMV1dK1VkW2lbcysyXV0rVWRbaVtzKzNdXSsiLSIrVWRbaVtzKzRdXStVZFtpW3MrNV1dKyItIitVZFtpW3MrNl1dK1VkW2lbcys3XV0rIi0iK1VkW2lbcys4XV0rVWRbaVtzKzldXSsiLSIrVWRbaVtzKzEwXV0rVWRbaVtzKzExXV0rVWRbaVtzKzEyXV0rVWRbaVtzKzEzXV0rVWRbaVtzKzE0XV0rVWRbaVtzKzE1XV19ZnVuY3Rpb24gQmVuKGkpe2lmKCFOZW4oaSkpdGhyb3cgVHlwZUVycm9yKCJJbnZhbGlkIFVVSUQiKTtsZXQgcztjb25zdCB1PW5ldyBVaW50OEFycmF5KDE2KTtyZXR1cm4gdVswXT0ocz1wYXJzZUludChpLnNsaWNlKDAsOCksMTYpKT4+PjI0LHVbMV09cz4+PjE2JjI1NSx1WzJdPXM+Pj44JjI1NSx1WzNdPXMmMjU1LHVbNF09KHM9cGFyc2VJbnQoaS5zbGljZSg5LDEzKSwxNikpPj4+OCx1WzVdPXMmMjU1LHVbNl09KHM9cGFyc2VJbnQoaS5zbGljZSgxNCwxOCksMTYpKT4+PjgsdVs3XT1zJjI1NSx1WzhdPShzPXBhcnNlSW50KGkuc2xpY2UoMTksMjMpLDE2KSk+Pj44LHVbOV09cyYyNTUsdVsxMF09KHM9cGFyc2VJbnQoaS5zbGljZSgyNCwzNiksMTYpKS8xMDk5NTExNjI3Nzc2JjI1NSx1WzExXT1zLzQyOTQ5NjcyOTYmMjU1LHVbMTJdPXM+Pj4yNCYyNTUsdVsxM109cz4+PjE2JjI1NSx1WzE0XT1zPj4+OCYyNTUsdVsxNV09cyYyNTUsdX1mdW5jdGlvbiBGZW4oaSl7aT11bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoaSkpO2NvbnN0IHM9W107Zm9yKGxldCB1PTA7dTxpLmxlbmd0aDsrK3Upcy5wdXNoKGkuY2hhckNvZGVBdCh1KSk7cmV0dXJuIHN9Y29uc3QgUmVuPSI2YmE3YjgxMC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgiLGplbj0iNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4IjtmdW5jdGlvbiAkZW4oaSxzLHUpe2Z1bmN0aW9uIGQocCx2LGIseSl7dmFyIFQ7aWYodHlwZW9mIHA9PSJzdHJpbmciJiYocD1GZW4ocCkpLHR5cGVvZiB2PT0ic3RyaW5nIiYmKHY9QmVuKHYpKSwoKFQ9dik9PT1udWxsfHxUPT09dm9pZCAwP3ZvaWQgMDpULmxlbmd0aCkhPT0xNil0aHJvdyBUeXBlRXJyb3IoIk5hbWVzcGFjZSBtdXN0IGJlIGFycmF5LWxpa2UgKDE2IGl0ZXJhYmxlIGludGVnZXIgdmFsdWVzLCAwLTI1NSkiKTtsZXQgXz1uZXcgVWludDhBcnJheSgxNitwLmxlbmd0aCk7aWYoXy5zZXQodiksXy5zZXQocCx2Lmxlbmd0aCksXz11KF8pLF9bNl09X1s2XSYxNXxzLF9bOF09X1s4XSY2M3wxMjgsYil7eT15fHwwO2ZvcihsZXQgQT0wO0E8MTY7KytBKWJbeStBXT1fW0FdO3JldHVybiBifXJldHVybiBQZW4oXyl9dHJ5e2QubmFtZT1pfWNhdGNoe31yZXR1cm4gZC5ETlM9UmVuLGQuVVJMPWplbixkfWZ1bmN0aW9uIHplbihpLHMsdSxkKXtzd2l0Y2goaSl7Y2FzZSAwOnJldHVybiBzJnVefnMmZDtjYXNlIDE6cmV0dXJuIHNedV5kO2Nhc2UgMjpyZXR1cm4gcyZ1XnMmZF51JmQ7Y2FzZSAzOnJldHVybiBzXnVeZH19ZnVuY3Rpb24gR21lKGkscyl7cmV0dXJuIGk8PHN8aT4+PjMyLXN9ZnVuY3Rpb24gcWVuKGkpe2NvbnN0IHM9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdLHU9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXTtpZih0eXBlb2YgaT09InN0cmluZyIpe2NvbnN0IGI9dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGkpKTtpPVtdO2ZvcihsZXQgeT0wO3k8Yi5sZW5ndGg7Kyt5KWkucHVzaChiLmNoYXJDb2RlQXQoeSkpfWVsc2UgQXJyYXkuaXNBcnJheShpKXx8KGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaSkpO2kucHVzaCgxMjgpO2NvbnN0IGQ9aS5sZW5ndGgvNCsyLHA9TWF0aC5jZWlsKGQvMTYpLHY9bmV3IEFycmF5KHApO2ZvcihsZXQgYj0wO2I8cDsrK2Ipe2NvbnN0IHk9bmV3IFVpbnQzMkFycmF5KDE2KTtmb3IobGV0IFQ9MDtUPDE2OysrVCl5W1RdPWlbYio2NCtUKjRdPDwyNHxpW2IqNjQrVCo0KzFdPDwxNnxpW2IqNjQrVCo0KzJdPDw4fGlbYio2NCtUKjQrM107dltiXT15fXZbcC0xXVsxNF09KGkubGVuZ3RoLTEpKjgvTWF0aC5wb3coMiwzMiksdltwLTFdWzE0XT1NYXRoLmZsb29yKHZbcC0xXVsxNF0pLHZbcC0xXVsxNV09KGkubGVuZ3RoLTEpKjgmNDI5NDk2NzI5NTtmb3IobGV0IGI9MDtiPHA7KytiKXtjb25zdCB5PW5ldyBVaW50MzJBcnJheSg4MCk7Zm9yKGxldCBGPTA7RjwxNjsrK0YpeVtGXT12W2JdW0ZdO2ZvcihsZXQgRj0xNjtGPDgwOysrRil5W0ZdPUdtZSh5W0YtM11eeVtGLThdXnlbRi0xNF1eeVtGLTE2XSwxKTtsZXQgVD11WzBdLF89dVsxXSxBPXVbMl0sUD11WzNdLFI9dVs0XTtmb3IobGV0IEY9MDtGPDgwOysrRil7Y29uc3Qgaj1NYXRoLmZsb29yKEYvMjApLEs9R21lKFQsNSkremVuKGosXyxBLFApK1Irc1tqXSt5W0ZdPj4+MDtSPVAsUD1BLEE9R21lKF8sMzApPj4+MCxfPVQsVD1LfXVbMF09dVswXStUPj4+MCx1WzFdPXVbMV0rXz4+PjAsdVsyXT11WzJdK0E+Pj4wLHVbM109dVszXStQPj4+MCx1WzRdPXVbNF0rUj4+PjB9cmV0dXJuW3VbMF0+PjI0JjI1NSx1WzBdPj4xNiYyNTUsdVswXT4+OCYyNTUsdVswXSYyNTUsdVsxXT4+MjQmMjU1LHVbMV0+PjE2JjI1NSx1WzFdPj44JjI1NSx1WzFdJjI1NSx1WzJdPj4yNCYyNTUsdVsyXT4+MTYmMjU1LHVbMl0+PjgmMjU1LHVbMl0mMjU1LHVbM10+PjI0JjI1NSx1WzNdPj4xNiYyNTUsdVszXT4+OCYyNTUsdVszXSYyNTUsdVs0XT4+MjQmMjU1LHVbNF0+PjE2JjI1NSx1WzRdPj44JjI1NSx1WzRdJjI1NV19Y29uc3QgSGVuPSRlbigidjUiLDgwLHFlbiksVmVuPS9bXlxkQS1aYS16XShcVykqL2c7bGV0IHAxPXt9LElSPW5ldyBNYXA7Y29uc3QgVWVuPWZ1bmN0aW9uKGkpe2NvbnN0IHM9T2JqZWN0LmtleXMoaSk7Zm9yKGNvbnN0IHUgb2YgcylwMVt1XT1pW3VdfSxHZW49KGkscyx1KT0+e2NvbnN0IGQ9cDEuZW50aXR5UGFkZGluZy8zLHA9cDEuZW50aXR5UGFkZGluZy8zLHY9cDEuZm9udFNpemUqLjg1LGI9cy5ub2RlKCkuZ2V0QkJveCgpLHk9W107bGV0IFQ9ITEsXz0hMSxBPTAsUD0wLFI9MCxGPTAsaj1iLmhlaWdodCtkKjIsSz0xO3UuZm9yRWFjaChwZT0+e3BlLmF0dHJpYnV0ZUtleVR5cGVMaXN0IT09dm9pZCAwJiZwZS5hdHRyaWJ1dGVLZXlUeXBlTGlzdC5sZW5ndGg+MCYmKFQ9ITApLHBlLmF0dHJpYnV0ZUNvbW1lbnQhPT12b2lkIDAmJihfPSEwKX0pLHUuZm9yRWFjaChwZT0+e2NvbnN0IGJlPWAke3Mubm9kZSgpLmlkfS1hdHRyLSR7S31gO2xldCBhZT0wO2NvbnN0IG5lPXFGKHBlLmF0dHJpYnV0ZVR5cGUpLHNlPWkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsYCR7YmV9LXR5cGVgKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJsZWZ0Iikuc3R5bGUoImZvbnQtZmFtaWx5IixxdCgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLHYrInB4IikudGV4dChuZSksZGU9aS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJlciBlbnRpdHlMYWJlbCIsITApLmF0dHIoImlkIixgJHtiZX0tbmFtZWApLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnN0eWxlKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImxlZnQiKS5zdHlsZSgiZm9udC1mYW1pbHkiLHF0KCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIsdisicHgiKS50ZXh0KHBlLmF0dHJpYnV0ZU5hbWUpLFg9e307WC50bj1zZSxYLm5uPWRlO2NvbnN0IGdlPXNlLm5vZGUoKS5nZXRCQm94KCksVz1kZS5ub2RlKCkuZ2V0QkJveCgpO2lmKEE9TWF0aC5tYXgoQSxnZS53aWR0aCksUD1NYXRoLm1heChQLFcud2lkdGgpLGFlPU1hdGgubWF4KGdlLmhlaWdodCxXLmhlaWdodCksVCl7Y29uc3QgeGU9cGUuYXR0cmlidXRlS2V5VHlwZUxpc3QhPT12b2lkIDA/cGUuYXR0cmlidXRlS2V5VHlwZUxpc3Quam9pbigiLCIpOiIiLFU9aS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJlciBlbnRpdHlMYWJlbCIsITApLmF0dHIoImlkIixgJHtiZX0ta2V5YCkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuc3R5bGUoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibGVmdCIpLnN0eWxlKCJmb250LWZhbWlseSIscXQoKS5mb250RmFtaWx5KS5zdHlsZSgiZm9udC1zaXplIix2KyJweCIpLnRleHQoeGUpO1gua249VTtjb25zdCBGZT1VLm5vZGUoKS5nZXRCQm94KCk7Uj1NYXRoLm1heChSLEZlLndpZHRoKSxhZT1NYXRoLm1heChhZSxGZS5oZWlnaHQpfWlmKF8pe2NvbnN0IHhlPWkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsYCR7YmV9LWNvbW1lbnRgKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJsZWZ0Iikuc3R5bGUoImZvbnQtZmFtaWx5IixxdCgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLHYrInB4IikudGV4dChwZS5hdHRyaWJ1dGVDb21tZW50fHwiIik7WC5jbj14ZTtjb25zdCBVPXhlLm5vZGUoKS5nZXRCQm94KCk7Rj1NYXRoLm1heChGLFUud2lkdGgpLGFlPU1hdGgubWF4KGFlLFUuaGVpZ2h0KX1YLmhlaWdodD1hZSx5LnB1c2goWCksais9YWUrZCoyLEsrPTF9KTtsZXQgZWU9NDtUJiYoZWUrPTIpLF8mJihlZSs9Mik7Y29uc3QgaWU9QStQK1IrRixvZT17d2lkdGg6TWF0aC5tYXgocDEubWluRW50aXR5V2lkdGgsTWF0aC5tYXgoYi53aWR0aCtwMS5lbnRpdHlQYWRkaW5nKjIsaWUrcCplZSkpLGhlaWdodDp1Lmxlbmd0aD4wP2o6TWF0aC5tYXgocDEubWluRW50aXR5SGVpZ2h0LGIuaGVpZ2h0K3AxLmVudGl0eVBhZGRpbmcqMil9O2lmKHUubGVuZ3RoPjApe2NvbnN0IHBlPU1hdGgubWF4KDAsKG9lLndpZHRoLWllLXAqZWUpLyhlZS8yKSk7cy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvZS53aWR0aC8yKyIsIisoZCtiLmhlaWdodC8yKSsiKSIpO2xldCBiZT1iLmhlaWdodCtkKjIsYWU9ImF0dHJpYnV0ZUJveE9kZCI7eS5mb3JFYWNoKG5lPT57Y29uc3Qgc2U9YmUrZCtuZS5oZWlnaHQvMjtuZS50bi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitwKyIsIitzZSsiKSIpO2NvbnN0IGRlPWkuaW5zZXJ0KCJyZWN0IiwiIyIrbmUudG4ubm9kZSgpLmlkKS5jbGFzc2VkKGBlciAke2FlfWAsITApLmF0dHIoIngiLDApLmF0dHIoInkiLGJlKS5hdHRyKCJ3aWR0aCIsQStwKjIrcGUpLmF0dHIoImhlaWdodCIsbmUuaGVpZ2h0K2QqMiksWD1wYXJzZUZsb2F0KGRlLmF0dHIoIngiKSkrcGFyc2VGbG9hdChkZS5hdHRyKCJ3aWR0aCIpKTtuZS5ubi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoWCtwKSsiLCIrc2UrIikiKTtjb25zdCBnZT1pLmluc2VydCgicmVjdCIsIiMiK25lLm5uLm5vZGUoKS5pZCkuY2xhc3NlZChgZXIgJHthZX1gLCEwKS5hdHRyKCJ4IixYKS5hdHRyKCJ5IixiZSkuYXR0cigid2lkdGgiLFArcCoyK3BlKS5hdHRyKCJoZWlnaHQiLG5lLmhlaWdodCtkKjIpO2xldCBXPXBhcnNlRmxvYXQoZ2UuYXR0cigieCIpKStwYXJzZUZsb2F0KGdlLmF0dHIoIndpZHRoIikpO2lmKFQpe25lLmtuLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhXK3ApKyIsIitzZSsiKSIpO2NvbnN0IHhlPWkuaW5zZXJ0KCJyZWN0IiwiIyIrbmUua24ubm9kZSgpLmlkKS5jbGFzc2VkKGBlciAke2FlfWAsITApLmF0dHIoIngiLFcpLmF0dHIoInkiLGJlKS5hdHRyKCJ3aWR0aCIsUitwKjIrcGUpLmF0dHIoImhlaWdodCIsbmUuaGVpZ2h0K2QqMik7Vz1wYXJzZUZsb2F0KHhlLmF0dHIoIngiKSkrcGFyc2VGbG9hdCh4ZS5hdHRyKCJ3aWR0aCIpKX1fJiYobmUuY24uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKFcrcCkrIiwiK3NlKyIpIiksaS5pbnNlcnQoInJlY3QiLCIjIituZS5jbi5ub2RlKCkuaWQpLmNsYXNzZWQoYGVyICR7YWV9YCwidHJ1ZSIpLmF0dHIoIngiLFcpLmF0dHIoInkiLGJlKS5hdHRyKCJ3aWR0aCIsRitwKjIrcGUpLmF0dHIoImhlaWdodCIsbmUuaGVpZ2h0K2QqMikpLGJlKz1uZS5oZWlnaHQrZCoyLGFlPWFlPT09ImF0dHJpYnV0ZUJveE9kZCI/ImF0dHJpYnV0ZUJveEV2ZW4iOiJhdHRyaWJ1dGVCb3hPZGQifSl9ZWxzZSBvZS5oZWlnaHQ9TWF0aC5tYXgocDEubWluRW50aXR5SGVpZ2h0LGopLHMuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrb2Uud2lkdGgvMisiLCIrb2UuaGVpZ2h0LzIrIikiKTtyZXR1cm4gb2V9LEtlbj1mdW5jdGlvbihpLHMsdSl7Y29uc3QgZD1PYmplY3Qua2V5cyhzKTtsZXQgcDtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKHYpe2NvbnN0IGI9WmVuKHYsImVudGl0eSIpO0lSLnNldCh2LGIpO2NvbnN0IHk9aS5hcHBlbmQoImciKS5hdHRyKCJpZCIsYik7cD1wPT09dm9pZCAwP2I6cDtjb25zdCBUPSJ0ZXh0LSIrYixfPXkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsVCkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuc3R5bGUoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtZmFtaWx5IixxdCgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLHAxLmZvbnRTaXplKyJweCIpLnRleHQoc1t2XS5hbGlhcz8/dikse3dpZHRoOkEsaGVpZ2h0OlB9PUdlbih5LF8sc1t2XS5hdHRyaWJ1dGVzKSxGPXkuaW5zZXJ0KCJyZWN0IiwiIyIrVCkuY2xhc3NlZCgiZXIgZW50aXR5Qm94IiwhMCkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLEEpLmF0dHIoImhlaWdodCIsUCkubm9kZSgpLmdldEJCb3goKTt1LnNldE5vZGUoYix7d2lkdGg6Ri53aWR0aCxoZWlnaHQ6Ri5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOmJ9KX0pLHB9LFdlbj1mdW5jdGlvbihpLHMpe3Mubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe3UhPT12b2lkIDAmJnMubm9kZSh1KSE9PXZvaWQgMCYmaS5zZWxlY3QoIiMiK3UpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhzLm5vZGUodSkueC1zLm5vZGUodSkud2lkdGgvMikrIiwiKyhzLm5vZGUodSkueS1zLm5vZGUodSkuaGVpZ2h0LzIpKyIgKSIpfSl9LGpVZT1mdW5jdGlvbihpKXtyZXR1cm4oaS5lbnRpdHlBK2kucm9sZUEraS5lbnRpdHlCKS5yZXBsYWNlKC9ccy9nLCIiKX0sWWVuPWZ1bmN0aW9uKGkscyl7cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbih1KXtzLnNldEVkZ2UoSVIuZ2V0KHUuZW50aXR5QSksSVIuZ2V0KHUuZW50aXR5Qikse3JlbGF0aW9uc2hpcDp1fSxqVWUodSkpfSksaX07bGV0ICRVZT0wO2NvbnN0IFhlbj1mdW5jdGlvbihpLHMsdSxkLHApeyRVZSsrO2NvbnN0IHY9dS5lZGdlKElSLmdldChzLmVudGl0eUEpLElSLmdldChzLmVudGl0eUIpLGpVZShzKSksYj1rNygpLngoZnVuY3Rpb24oail7cmV0dXJuIGoueH0pLnkoZnVuY3Rpb24oail7cmV0dXJuIGoueX0pLmN1cnZlKEZGKSx5PWkuaW5zZXJ0KCJwYXRoIiwiIyIrZCkuY2xhc3NlZCgiZXIgcmVsYXRpb25zaGlwTGluZSIsITApLmF0dHIoImQiLGIodi5wb2ludHMpKS5zdHlsZSgic3Ryb2tlIixwMS5zdHJva2UpLnN0eWxlKCJmaWxsIiwibm9uZSIpO3MucmVsU3BlYy5yZWxUeXBlPT09cC5kYi5JZGVudGlmaWNhdGlvbi5OT05fSURFTlRJRllJTkcmJnkuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjgsOCIpO2xldCBUPSIiO3N3aXRjaChwMS5hcnJvd01hcmtlckFic29sdXRlJiYoVD13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxUPVQucmVwbGFjZSgvXCgvZywiXFwoIiksVD1ULnJlcGxhY2UoL1wpL2csIlxcKSIpKSxzLnJlbFNwZWMuY2FyZEEpe2Nhc2UgcC5kYi5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTp5LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitUKyIjIitHMy5FUk1hcmtlcnMuWkVST19PUl9PTkVfRU5EKyIpIik7YnJlYWs7Y2FzZSBwLmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTp5LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitUKyIjIitHMy5FUk1hcmtlcnMuWkVST19PUl9NT1JFX0VORCsiKSIpO2JyZWFrO2Nhc2UgcC5kYi5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTp5LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitUKyIjIitHMy5FUk1hcmtlcnMuT05FX09SX01PUkVfRU5EKyIpIik7YnJlYWs7Y2FzZSBwLmRiLkNhcmRpbmFsaXR5Lk9OTFlfT05FOnkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK1QrIiMiK0czLkVSTWFya2Vycy5PTkxZX09ORV9FTkQrIikiKTticmVhaztjYXNlIHAuZGIuQ2FyZGluYWxpdHkuTURfUEFSRU5UOnkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK1QrIiMiK0czLkVSTWFya2Vycy5NRF9QQVJFTlRfRU5EKyIpIik7YnJlYWt9c3dpdGNoKHMucmVsU3BlYy5jYXJkQil7Y2FzZSBwLmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfT05FOnkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrVCsiIyIrRzMuRVJNYXJrZXJzLlpFUk9fT1JfT05FX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSBwLmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTp5LmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK1QrIiMiK0czLkVSTWFya2Vycy5aRVJPX09SX01PUkVfU1RBUlQrIikiKTticmVhaztjYXNlIHAuZGIuQ2FyZGluYWxpdHkuT05FX09SX01PUkU6eS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitUKyIjIitHMy5FUk1hcmtlcnMuT05FX09SX01PUkVfU1RBUlQrIikiKTticmVhaztjYXNlIHAuZGIuQ2FyZGluYWxpdHkuT05MWV9PTkU6eS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitUKyIjIitHMy5FUk1hcmtlcnMuT05MWV9PTkVfU1RBUlQrIikiKTticmVhaztjYXNlIHAuZGIuQ2FyZGluYWxpdHkuTURfUEFSRU5UOnkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrVCsiIyIrRzMuRVJNYXJrZXJzLk1EX1BBUkVOVF9TVEFSVCsiKSIpO2JyZWFrfWNvbnN0IF89eS5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSxBPXkubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoXyouNSksUD0icmVsIiskVWUsRj1pLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImVyIHJlbGF0aW9uc2hpcExhYmVsIiwhMCkuYXR0cigiaWQiLFApLmF0dHIoIngiLEEueCkuYXR0cigieSIsQS55KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1mYW1pbHkiLHF0KCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIscDEuZm9udFNpemUrInB4IikudGV4dChzLnJvbGVBKS5ub2RlKCkuZ2V0QkJveCgpO2kuaW5zZXJ0KCJyZWN0IiwiIyIrUCkuY2xhc3NlZCgiZXIgcmVsYXRpb25zaGlwTGFiZWxCb3giLCEwKS5hdHRyKCJ4IixBLngtRi53aWR0aC8yKS5hdHRyKCJ5IixBLnktRi5oZWlnaHQvMikuYXR0cigid2lkdGgiLEYud2lkdGgpLmF0dHIoImhlaWdodCIsRi5oZWlnaHQpfSxRZW49ZnVuY3Rpb24oaSxzLHUsZCl7cDE9cXQoKS5lcixYZS5pbmZvKCJEcmF3aW5nIEVSIGRpYWdyYW0iKTtjb25zdCBwPXF0KCkuc2VjdXJpdHlMZXZlbDtsZXQgdjtwPT09InNhbmRib3giJiYodj1JcigiI2kiK3MpKTtjb25zdCB5PUlyKHA9PT0ic2FuZGJveCI/di5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5Iikuc2VsZWN0KGBbaWQ9JyR7c30nXWApO0czLmluc2VydE1hcmtlcnMoeSxwMSk7bGV0IFQ7VD1uZXcgQjAoe211bHRpZ3JhcGg6ITAsZGlyZWN0ZWQ6ITAsY29tcG91bmQ6ITF9KS5zZXRHcmFwaCh7cmFua2RpcjpwMS5sYXlvdXREaXJlY3Rpb24sbWFyZ2lueDoyMCxtYXJnaW55OjIwLG5vZGVzZXA6MTAwLGVkZ2VzZXA6MTAwLHJhbmtzZXA6MTAwfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7Y29uc3QgXz1LZW4oeSxkLmRiLmdldEVudGl0aWVzKCksVCksQT1ZZW4oZC5kYi5nZXRSZWxhdGlvbnNoaXBzKCksVCk7cUQoVCksV2VuKHksVCksQS5mb3JFYWNoKGZ1bmN0aW9uKEspe1hlbih5LEssVCxfLGQpfSk7Y29uc3QgUD1wMS5kaWFncmFtUGFkZGluZztBby5pbnNlcnRUaXRsZSh5LCJlbnRpdHlUaXRsZVRleHQiLHAxLnRpdGxlVG9wTWFyZ2luLGQuZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpO2NvbnN0IFI9eS5ub2RlKCkuZ2V0QkJveCgpLEY9Ui53aWR0aCtQKjIsaj1SLmhlaWdodCtQKjI7TmcoeSxqLEYscDEudXNlTWF4V2lkdGgpLHkuYXR0cigidmlld0JveCIsYCR7Ui54LVB9ICR7Ui55LVB9ICR7Rn0gJHtqfWApfSxKZW49IjI4ZTlmOWRiLTNjOGQtNWFhNS05ZmFmLTQ0Mjg2YWU1OTM3YyI7ZnVuY3Rpb24gWmVuKGk9IiIscz0iIil7Y29uc3QgdT1pLnJlcGxhY2UoVmVuLCIiKTtyZXR1cm5gJHt6VWUocyl9JHt6VWUodSl9JHtIZW4oaSxKZW4pfWB9ZnVuY3Rpb24gelVlKGk9IiIpe3JldHVybiBpLmxlbmd0aD4wP2Ake2l9LWA6IiJ9Y29uc3QgZXRuPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6TGVuLGRiOkllbixyZW5kZXJlcjp7c2V0Q29uZjpVZW4sZHJhdzpRZW59LHN0eWxlczppPT5gCiAgLmVudGl0eUJveCB7CiAgICBmaWxsOiAke2kubWFpbkJrZ307CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICB9CgogIC5hdHRyaWJ1dGVCb3hPZGQgewogICAgZmlsbDogJHtpLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZH07CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICB9CgogIC5hdHRyaWJ1dGVCb3hFdmVuIHsKICAgIGZpbGw6ICAke2kuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbn07CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICB9CgogIC5yZWxhdGlvbnNoaXBMYWJlbEJveCB7CiAgICBmaWxsOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBvcGFjaXR5OiAwLjc7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2kudGVydGlhcnlDb2xvcn07CiAgICAgIHJlY3QgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQogIH0KCiAgICAucmVsYXRpb25zaGlwTGluZSB7CiAgICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgICB9CgogIC5lbnRpdHlUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0gICAgCiAgI01EX1BBUkVOVF9TVEFSVCB7CiAgICBmaWxsOiAjZjVmNWY1ICFpbXBvcnRhbnQ7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgfQogICNNRF9QQVJFTlRfRU5EIHsKICAgIGZpbGw6ICNmNWY1ZjUgIWltcG9ydGFudDsKICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICAgIHN0cm9rZS13aWR0aDogMTsKICB9CiAgCmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBLbWU9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihhZSxuZSxzZSxkZSl7Zm9yKHNlPXNlfHx7fSxkZT1hZS5sZW5ndGg7ZGUtLTtzZVthZVtkZV1dPW5lKTtyZXR1cm4gc2V9LHM9WzEsM10sdT1bMSw2XSxkPVsxLDRdLHA9WzEsNV0sdj1bMiw1XSxiPVsxLDEyXSx5PVs1LDcsMTMsMTksMjEsMjMsMjQsMjYsMjgsMzEsMzcsNDAsNDddLFQ9WzcsMTMsMTksMjEsMjMsMjQsMjYsMjgsMzEsMzcsNDBdLF89WzcsMTIsMTMsMTksMjEsMjMsMjQsMjYsMjgsMzEsMzcsNDBdLEE9WzcsMTMsNDddLFA9WzEsNDJdLFI9WzEsNDFdLEY9WzcsMTMsMjksMzIsMzUsMzgsNDddLGo9WzEsNTVdLEs9WzEsNTZdLGVlPVsxLDU3XSxpZT1bNywxMywzMiwzNSw0Miw0N10sb2U9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGVvbDo0LEdHOjUsZG9jdW1lbnQ6NixFT0Y6NywiOiI6OCxESVI6OSxvcHRpb25zOjEwLGJvZHk6MTEsT1BUOjEyLE5MOjEzLGxpbmU6MTQsc3RhdGVtZW50OjE1LGNvbW1pdFN0YXRlbWVudDoxNixtZXJnZVN0YXRlbWVudDoxNyxjaGVycnlQaWNrU3RhdGVtZW50OjE4LGFjY190aXRsZToxOSxhY2NfdGl0bGVfdmFsdWU6MjAsYWNjX2Rlc2NyOjIxLGFjY19kZXNjcl92YWx1ZToyMixhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjIzLHNlY3Rpb246MjQsYnJhbmNoU3RhdGVtZW50OjI1LENIRUNLT1VUOjI2LHJlZjoyNyxCUkFOQ0g6MjgsT1JERVI6MjksTlVNOjMwLENIRVJSWV9QSUNLOjMxLENPTU1JVF9JRDozMixTVFI6MzMsUEFSRU5UX0NPTU1JVDozNCxDT01NSVRfVEFHOjM1LEVNUFRZU1RSOjM2LE1FUkdFOjM3LENPTU1JVF9UWVBFOjM4LGNvbW1pdFR5cGU6MzksQ09NTUlUOjQwLGNvbW1pdF9hcmc6NDEsQ09NTUlUX01TRzo0MixOT1JNQUw6NDMsUkVWRVJTRTo0NCxISUdITElHSFQ6NDUsSUQ6NDYsIjsiOjQ3LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw1OiJHRyIsNzoiRU9GIiw4OiI6Iiw5OiJESVIiLDEyOiJPUFQiLDEzOiJOTCIsMTk6ImFjY190aXRsZSIsMjA6ImFjY190aXRsZV92YWx1ZSIsMjE6ImFjY19kZXNjciIsMjI6ImFjY19kZXNjcl92YWx1ZSIsMjM6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDI0OiJzZWN0aW9uIiwyNjoiQ0hFQ0tPVVQiLDI4OiJCUkFOQ0giLDI5OiJPUkRFUiIsMzA6Ik5VTSIsMzE6IkNIRVJSWV9QSUNLIiwzMjoiQ09NTUlUX0lEIiwzMzoiU1RSIiwzNDoiUEFSRU5UX0NPTU1JVCIsMzU6IkNPTU1JVF9UQUciLDM2OiJFTVBUWVNUUiIsMzc6Ik1FUkdFIiwzODoiQ09NTUlUX1RZUEUiLDQwOiJDT01NSVQiLDQyOiJDT01NSVRfTVNHIiw0MzoiTk9STUFMIiw0NDoiUkVWRVJTRSIsNDU6IkhJR0hMSUdIVCIsNDY6IklEIiw0NzoiOyJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywzXSxbMyw0XSxbMyw1XSxbNiwwXSxbNiwyXSxbMTAsMl0sWzEwLDFdLFsxMSwwXSxbMTEsMl0sWzE0LDJdLFsxNCwxXSxbMTUsMV0sWzE1LDFdLFsxNSwxXSxbMTUsMl0sWzE1LDJdLFsxNSwxXSxbMTUsMV0sWzE1LDFdLFsxNSwyXSxbMjUsMl0sWzI1LDRdLFsxOCwzXSxbMTgsNV0sWzE4LDVdLFsxOCw3XSxbMTgsN10sWzE4LDVdLFsxOCw1XSxbMTgsNV0sWzE4LDddLFsxOCw3XSxbMTgsN10sWzE4LDddLFsxNywyXSxbMTcsNF0sWzE3LDRdLFsxNyw0XSxbMTcsNl0sWzE3LDZdLFsxNyw2XSxbMTcsNl0sWzE3LDZdLFsxNyw2XSxbMTcsOF0sWzE3LDhdLFsxNyw4XSxbMTcsOF0sWzE3LDhdLFsxNyw4XSxbMTYsMl0sWzE2LDNdLFsxNiwzXSxbMTYsNV0sWzE2LDVdLFsxNiwzXSxbMTYsNV0sWzE2LDVdLFsxNiw1XSxbMTYsNV0sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDNdLFsxNiw1XSxbMTYsNV0sWzE2LDVdLFsxNiw1XSxbMTYsNV0sWzE2LDVdLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFs0MSwwXSxbNDEsMV0sWzM5LDFdLFszOSwxXSxbMzksMV0sWzI3LDFdLFsyNywxXSxbNCwxXSxbNCwxXSxbNCwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihuZSxzZSxkZSxYLGdlLFcseGUpe3ZhciBVPVcubGVuZ3RoLTE7c3dpdGNoKGdlKXtjYXNlIDI6cmV0dXJuIFdbVV07Y2FzZSAzOnJldHVybiBXW1UtMV07Y2FzZSA0OnJldHVybiBYLnNldERpcmVjdGlvbihXW1UtM10pLFdbVS0xXTtjYXNlIDY6WC5zZXRPcHRpb25zKFdbVS0xXSksdGhpcy4kPVdbVV07YnJlYWs7Y2FzZSA3OldbVS0xXSs9V1tVXSx0aGlzLiQ9V1tVLTFdO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxMDpXW1UtMV0ucHVzaChXW1VdKSx0aGlzLiQ9V1tVLTFdO2JyZWFrO2Nhc2UgMTE6dGhpcy4kPVdbVS0xXTticmVhaztjYXNlIDE2OnRoaXMuJD1XW1VdLnRyaW0oKSxYLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxNzpjYXNlIDE4OnRoaXMuJD1XW1VdLnRyaW0oKSxYLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxOTpYLmFkZFNlY3Rpb24oV1tVXS5zdWJzdHIoOCkpLHRoaXMuJD1XW1VdLnN1YnN0cig4KTticmVhaztjYXNlIDIxOlguY2hlY2tvdXQoV1tVXSk7YnJlYWs7Y2FzZSAyMjpYLmJyYW5jaChXW1VdKTticmVhaztjYXNlIDIzOlguYnJhbmNoKFdbVS0yXSxXW1VdKTticmVhaztjYXNlIDI0OlguY2hlcnJ5UGljayhXW1VdLCIiLHZvaWQgMCk7YnJlYWs7Y2FzZSAyNTpYLmNoZXJyeVBpY2soV1tVLTJdLCIiLHZvaWQgMCxXW1VdKTticmVhaztjYXNlIDI2OlguY2hlcnJ5UGljayhXW1UtMl0sIiIsV1tVXSk7YnJlYWs7Y2FzZSAyNzpYLmNoZXJyeVBpY2soV1tVLTRdLCIiLFdbVV0sV1tVLTJdKTticmVhaztjYXNlIDI4OlguY2hlcnJ5UGljayhXW1UtNF0sIiIsV1tVLTJdLFdbVV0pO2JyZWFrO2Nhc2UgMjk6WC5jaGVycnlQaWNrKFdbVV0sIiIsV1tVLTJdKTticmVhaztjYXNlIDMwOlguY2hlcnJ5UGljayhXW1VdLCIiLCIiKTticmVhaztjYXNlIDMxOlguY2hlcnJ5UGljayhXW1UtMl0sIiIsIiIpO2JyZWFrO2Nhc2UgMzI6WC5jaGVycnlQaWNrKFdbVS00XSwiIiwiIixXW1UtMl0pO2JyZWFrO2Nhc2UgMzM6WC5jaGVycnlQaWNrKFdbVS00XSwiIiwiIixXW1VdKTticmVhaztjYXNlIDM0OlguY2hlcnJ5UGljayhXW1UtMl0sIiIsV1tVLTRdLFdbVV0pO2JyZWFrO2Nhc2UgMzU6WC5jaGVycnlQaWNrKFdbVS0yXSwiIiwiIixXW1VdKTticmVhaztjYXNlIDM2OlgubWVyZ2UoV1tVXSwiIiwiIiwiIik7YnJlYWs7Y2FzZSAzNzpYLm1lcmdlKFdbVS0yXSxXW1VdLCIiLCIiKTticmVhaztjYXNlIDM4OlgubWVyZ2UoV1tVLTJdLCIiLFdbVV0sIiIpO2JyZWFrO2Nhc2UgMzk6WC5tZXJnZShXW1UtMl0sIiIsIiIsV1tVXSk7YnJlYWs7Y2FzZSA0MDpYLm1lcmdlKFdbVS00XSxXW1VdLCIiLFdbVS0yXSk7YnJlYWs7Y2FzZSA0MTpYLm1lcmdlKFdbVS00XSwiIixXW1VdLFdbVS0yXSk7YnJlYWs7Y2FzZSA0MjpYLm1lcmdlKFdbVS00XSwiIixXW1UtMl0sV1tVXSk7YnJlYWs7Y2FzZSA0MzpYLm1lcmdlKFdbVS00XSxXW1UtMl0sV1tVXSwiIik7YnJlYWs7Y2FzZSA0NDpYLm1lcmdlKFdbVS00XSxXW1UtMl0sIiIsV1tVXSk7YnJlYWs7Y2FzZSA0NTpYLm1lcmdlKFdbVS00XSxXW1VdLFdbVS0yXSwiIik7YnJlYWs7Y2FzZSA0NjpYLm1lcmdlKFdbVS02XSxXW1UtNF0sV1tVLTJdLFdbVV0pO2JyZWFrO2Nhc2UgNDc6WC5tZXJnZShXW1UtNl0sV1tVXSxXW1UtNF0sV1tVLTJdKTticmVhaztjYXNlIDQ4OlgubWVyZ2UoV1tVLTZdLFdbVS00XSxXW1VdLFdbVS0yXSk7YnJlYWs7Y2FzZSA0OTpYLm1lcmdlKFdbVS02XSxXW1UtMl0sV1tVLTRdLFdbVV0pO2JyZWFrO2Nhc2UgNTA6WC5tZXJnZShXW1UtNl0sV1tVXSxXW1UtMl0sV1tVLTRdKTticmVhaztjYXNlIDUxOlgubWVyZ2UoV1tVLTZdLFdbVS0yXSxXW1VdLFdbVS00XSk7YnJlYWs7Y2FzZSA1MjpYLmNvbW1pdChXW1VdKTticmVhaztjYXNlIDUzOlguY29tbWl0KCIiLCIiLFguY29tbWl0VHlwZS5OT1JNQUwsV1tVXSk7YnJlYWs7Y2FzZSA1NDpYLmNvbW1pdCgiIiwiIixXW1VdLCIiKTticmVhaztjYXNlIDU1OlguY29tbWl0KCIiLCIiLFdbVV0sV1tVLTJdKTticmVhaztjYXNlIDU2OlguY29tbWl0KCIiLCIiLFdbVS0yXSxXW1VdKTticmVhaztjYXNlIDU3OlguY29tbWl0KCIiLFdbVV0sWC5jb21taXRUeXBlLk5PUk1BTCwiIik7YnJlYWs7Y2FzZSA1ODpYLmNvbW1pdCgiIixXW1UtMl0sWC5jb21taXRUeXBlLk5PUk1BTCxXW1VdKTticmVhaztjYXNlIDU5OlguY29tbWl0KCIiLFdbVV0sWC5jb21taXRUeXBlLk5PUk1BTCxXW1UtMl0pO2JyZWFrO2Nhc2UgNjA6WC5jb21taXQoIiIsV1tVLTJdLFdbVV0sIiIpO2JyZWFrO2Nhc2UgNjE6WC5jb21taXQoIiIsV1tVXSxXW1UtMl0sIiIpO2JyZWFrO2Nhc2UgNjI6WC5jb21taXQoIiIsV1tVLTRdLFdbVS0yXSxXW1VdKTticmVhaztjYXNlIDYzOlguY29tbWl0KCIiLFdbVS00XSxXW1VdLFdbVS0yXSk7YnJlYWs7Y2FzZSA2NDpYLmNvbW1pdCgiIixXW1UtMl0sV1tVLTRdLFdbVV0pO2JyZWFrO2Nhc2UgNjU6WC5jb21taXQoIiIsV1tVXSxXW1UtNF0sV1tVLTJdKTticmVhaztjYXNlIDY2OlguY29tbWl0KCIiLFdbVV0sV1tVLTJdLFdbVS00XSk7YnJlYWs7Y2FzZSA2NzpYLmNvbW1pdCgiIixXW1UtMl0sV1tVXSxXW1UtNF0pO2JyZWFrO2Nhc2UgNjg6WC5jb21taXQoV1tVXSwiIixYLmNvbW1pdFR5cGUuTk9STUFMLCIiKTticmVhaztjYXNlIDY5OlguY29tbWl0KFdbVV0sIiIsWC5jb21taXRUeXBlLk5PUk1BTCxXW1UtMl0pO2JyZWFrO2Nhc2UgNzA6WC5jb21taXQoV1tVLTJdLCIiLFguY29tbWl0VHlwZS5OT1JNQUwsV1tVXSk7YnJlYWs7Y2FzZSA3MTpYLmNvbW1pdChXW1UtMl0sIiIsV1tVXSwiIik7YnJlYWs7Y2FzZSA3MjpYLmNvbW1pdChXW1VdLCIiLFdbVS0yXSwiIik7YnJlYWs7Y2FzZSA3MzpYLmNvbW1pdChXW1VdLFdbVS0yXSxYLmNvbW1pdFR5cGUuTk9STUFMLCIiKTticmVhaztjYXNlIDc0OlguY29tbWl0KFdbVS0yXSxXW1VdLFguY29tbWl0VHlwZS5OT1JNQUwsIiIpO2JyZWFrO2Nhc2UgNzU6WC5jb21taXQoV1tVLTRdLCIiLFdbVS0yXSxXW1VdKTticmVhaztjYXNlIDc2OlguY29tbWl0KFdbVS00XSwiIixXW1VdLFdbVS0yXSk7YnJlYWs7Y2FzZSA3NzpYLmNvbW1pdChXW1UtMl0sIiIsV1tVLTRdLFdbVV0pO2JyZWFrO2Nhc2UgNzg6WC5jb21taXQoV1tVXSwiIixXW1UtNF0sV1tVLTJdKTticmVhaztjYXNlIDc5OlguY29tbWl0KFdbVV0sIiIsV1tVLTJdLFdbVS00XSk7YnJlYWs7Y2FzZSA4MDpYLmNvbW1pdChXW1UtMl0sIiIsV1tVXSxXW1UtNF0pO2JyZWFrO2Nhc2UgODE6WC5jb21taXQoV1tVLTRdLFdbVV0sV1tVLTJdLCIiKTticmVhaztjYXNlIDgyOlguY29tbWl0KFdbVS00XSxXW1UtMl0sV1tVXSwiIik7YnJlYWs7Y2FzZSA4MzpYLmNvbW1pdChXW1UtMl0sV1tVXSxXW1UtNF0sIiIpO2JyZWFrO2Nhc2UgODQ6WC5jb21taXQoV1tVXSxXW1UtMl0sV1tVLTRdLCIiKTticmVhaztjYXNlIDg1OlguY29tbWl0KFdbVV0sV1tVLTRdLFdbVS0yXSwiIik7YnJlYWs7Y2FzZSA4NjpYLmNvbW1pdChXW1UtMl0sV1tVLTRdLFdbVV0sIiIpO2JyZWFrO2Nhc2UgODc6WC5jb21taXQoV1tVLTRdLFdbVV0sWC5jb21taXRUeXBlLk5PUk1BTCxXW1UtMl0pO2JyZWFrO2Nhc2UgODg6WC5jb21taXQoV1tVLTRdLFdbVS0yXSxYLmNvbW1pdFR5cGUuTk9STUFMLFdbVV0pO2JyZWFrO2Nhc2UgODk6WC5jb21taXQoV1tVLTJdLFdbVV0sWC5jb21taXRUeXBlLk5PUk1BTCxXW1UtNF0pO2JyZWFrO2Nhc2UgOTA6WC5jb21taXQoV1tVXSxXW1UtMl0sWC5jb21taXRUeXBlLk5PUk1BTCxXW1UtNF0pO2JyZWFrO2Nhc2UgOTE6WC5jb21taXQoV1tVXSxXW1UtNF0sWC5jb21taXRUeXBlLk5PUk1BTCxXW1UtMl0pO2JyZWFrO2Nhc2UgOTI6WC5jb21taXQoV1tVLTJdLFdbVS00XSxYLmNvbW1pdFR5cGUuTk9STUFMLFdbVV0pO2JyZWFrO2Nhc2UgOTM6WC5jb21taXQoV1tVLTZdLFdbVS00XSxXW1UtMl0sV1tVXSk7YnJlYWs7Y2FzZSA5NDpYLmNvbW1pdChXW1UtNl0sV1tVLTRdLFdbVV0sV1tVLTJdKTticmVhaztjYXNlIDk1OlguY29tbWl0KFdbVS02XSxXW1UtMl0sV1tVLTRdLFdbVV0pO2JyZWFrO2Nhc2UgOTY6WC5jb21taXQoV1tVLTZdLFdbVV0sV1tVLTRdLFdbVS0yXSk7YnJlYWs7Y2FzZSA5NzpYLmNvbW1pdChXW1UtNl0sV1tVLTJdLFdbVV0sV1tVLTRdKTticmVhaztjYXNlIDk4OlguY29tbWl0KFdbVS02XSxXW1VdLFdbVS0yXSxXW1UtNF0pO2JyZWFrO2Nhc2UgOTk6WC5jb21taXQoV1tVLTRdLFdbVS02XSxXW1UtMl0sV1tVXSk7YnJlYWs7Y2FzZSAxMDA6WC5jb21taXQoV1tVLTRdLFdbVS02XSxXW1VdLFdbVS0yXSk7YnJlYWs7Y2FzZSAxMDE6WC5jb21taXQoV1tVLTJdLFdbVS02XSxXW1UtNF0sV1tVXSk7YnJlYWs7Y2FzZSAxMDI6WC5jb21taXQoV1tVXSxXW1UtNl0sV1tVLTRdLFdbVS0yXSk7YnJlYWs7Y2FzZSAxMDM6WC5jb21taXQoV1tVLTJdLFdbVS02XSxXW1VdLFdbVS00XSk7YnJlYWs7Y2FzZSAxMDQ6WC5jb21taXQoV1tVXSxXW1UtNl0sV1tVLTJdLFdbVS00XSk7YnJlYWs7Y2FzZSAxMDU6WC5jb21taXQoV1tVXSxXW1UtNF0sV1tVLTJdLFdbVS02XSk7YnJlYWs7Y2FzZSAxMDY6WC5jb21taXQoV1tVLTJdLFdbVS00XSxXW1VdLFdbVS02XSk7YnJlYWs7Y2FzZSAxMDc6WC5jb21taXQoV1tVXSxXW1UtMl0sV1tVLTRdLFdbVS02XSk7YnJlYWs7Y2FzZSAxMDg6WC5jb21taXQoV1tVLTJdLFdbVV0sV1tVLTRdLFdbVS02XSk7YnJlYWs7Y2FzZSAxMDk6WC5jb21taXQoV1tVLTRdLFdbVS0yXSxXW1VdLFdbVS02XSk7YnJlYWs7Y2FzZSAxMTA6WC5jb21taXQoV1tVLTRdLFdbVV0sV1tVLTJdLFdbVS02XSk7YnJlYWs7Y2FzZSAxMTE6WC5jb21taXQoV1tVLTJdLFdbVS00XSxXW1UtNl0sV1tVXSk7YnJlYWs7Y2FzZSAxMTI6WC5jb21taXQoV1tVXSxXW1UtNF0sV1tVLTZdLFdbVS0yXSk7YnJlYWs7Y2FzZSAxMTM6WC5jb21taXQoV1tVLTJdLFdbVV0sV1tVLTZdLFdbVS00XSk7YnJlYWs7Y2FzZSAxMTQ6WC5jb21taXQoV1tVXSxXW1UtMl0sV1tVLTZdLFdbVS00XSk7YnJlYWs7Y2FzZSAxMTU6WC5jb21taXQoV1tVLTRdLFdbVS0yXSxXW1UtNl0sV1tVXSk7YnJlYWs7Y2FzZSAxMTY6WC5jb21taXQoV1tVLTRdLFdbVV0sV1tVLTZdLFdbVS0yXSk7YnJlYWs7Y2FzZSAxMTc6dGhpcy4kPSIiO2JyZWFrO2Nhc2UgMTE4OnRoaXMuJD1XW1VdO2JyZWFrO2Nhc2UgMTE5OnRoaXMuJD1YLmNvbW1pdFR5cGUuTk9STUFMO2JyZWFrO2Nhc2UgMTIwOnRoaXMuJD1YLmNvbW1pdFR5cGUuUkVWRVJTRTticmVhaztjYXNlIDEyMTp0aGlzLiQ9WC5jb21taXRUeXBlLkhJR0hMSUdIVDticmVha319LHRhYmxlOlt7MzoxLDQ6Miw1OnMsNzp1LDEzOmQsNDc6cH0sezE6WzNdfSx7Mzo3LDQ6Miw1OnMsNzp1LDEzOmQsNDc6cH0sezY6OCw3OnYsODpbMSw5XSw5OlsxLDEwXSwxMDoxMSwxMzpifSxpKHksWzIsMTI0XSksaSh5LFsyLDEyNV0pLGkoeSxbMiwxMjZdKSx7MTpbMiwxXX0sezc6WzEsMTNdfSx7NjoxNCw3OnYsMTA6MTEsMTM6Yn0sezg6WzEsMTVdfSxpKFQsWzIsOV0sezExOjE2LDEyOlsxLDE3XX0pLGkoXyxbMiw4XSksezE6WzIsMl19LHs3OlsxLDE4XX0sezY6MTksNzp2LDEwOjExLDEzOmJ9LHs3OlsyLDZdLDEzOlsxLDIyXSwxNDoyMCwxNToyMSwxNjoyMywxNzoyNCwxODoyNSwxOTpbMSwyNl0sMjE6WzEsMjddLDIzOlsxLDI4XSwyNDpbMSwyOV0sMjU6MzAsMjY6WzEsMzFdLDI4OlsxLDM1XSwzMTpbMSwzNF0sMzc6WzEsMzNdLDQwOlsxLDMyXX0saShfLFsyLDddKSx7MTpbMiwzXX0sezc6WzEsMzZdfSxpKFQsWzIsMTBdKSx7NDozNyw3OnUsMTM6ZCw0NzpwfSxpKFQsWzIsMTJdKSxpKEEsWzIsMTNdKSxpKEEsWzIsMTRdKSxpKEEsWzIsMTVdKSx7MjA6WzEsMzhdfSx7MjI6WzEsMzldfSxpKEEsWzIsMThdKSxpKEEsWzIsMTldKSxpKEEsWzIsMjBdKSx7Mjc6NDAsMzM6UCw0NjpSfSxpKEEsWzIsMTE3XSx7NDE6NDMsMzI6WzEsNDZdLDMzOlsxLDQ4XSwzNTpbMSw0NF0sMzg6WzEsNDVdLDQyOlsxLDQ3XX0pLHsyNzo0OSwzMzpQLDQ2OlJ9LHszMjpbMSw1MF0sMzU6WzEsNTFdfSx7Mjc6NTIsMzM6UCw0NjpSfSx7MTpbMiw0XX0saShULFsyLDExXSksaShBLFsyLDE2XSksaShBLFsyLDE3XSksaShBLFsyLDIxXSksaShGLFsyLDEyMl0pLGkoRixbMiwxMjNdKSxpKEEsWzIsNTJdKSx7MzM6WzEsNTNdfSx7Mzk6NTQsNDM6aiw0NDpLLDQ1OmVlfSx7MzM6WzEsNThdfSx7MzM6WzEsNTldfSxpKEEsWzIsMTE4XSksaShBLFsyLDM2XSx7MzI6WzEsNjBdLDM1OlsxLDYyXSwzODpbMSw2MV19KSx7MzM6WzEsNjNdfSx7MzM6WzEsNjRdLDM2OlsxLDY1XX0saShBLFsyLDIyXSx7Mjk6WzEsNjZdfSksaShBLFsyLDUzXSx7MzI6WzEsNjhdLDM4OlsxLDY3XSw0MjpbMSw2OV19KSxpKEEsWzIsNTRdLHszMjpbMSw3MV0sMzU6WzEsNzBdLDQyOlsxLDcyXX0pLGkoaWUsWzIsMTE5XSksaShpZSxbMiwxMjBdKSxpKGllLFsyLDEyMV0pLGkoQSxbMiw1N10sezM1OlsxLDczXSwzODpbMSw3NF0sNDI6WzEsNzVdfSksaShBLFsyLDY4XSx7MzI6WzEsNzhdLDM1OlsxLDc2XSwzODpbMSw3N119KSx7MzM6WzEsNzldfSx7Mzk6ODAsNDM6aiw0NDpLLDQ1OmVlfSx7MzM6WzEsODFdfSxpKEEsWzIsMjRdLHszNDpbMSw4Ml0sMzU6WzEsODNdfSksezMyOlsxLDg0XX0sezMyOlsxLDg1XX0sezMwOlsxLDg2XX0sezM5Ojg3LDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDg4XX0sezMzOlsxLDg5XX0sezMzOlsxLDkwXX0sezMzOlsxLDkxXX0sezMzOlsxLDkyXX0sezMzOlsxLDkzXX0sezM5Ojk0LDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDk1XX0sezMzOlsxLDk2XX0sezM5Ojk3LDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDk4XX0saShBLFsyLDM3XSx7MzU6WzEsMTAwXSwzODpbMSw5OV19KSxpKEEsWzIsMzhdLHszMjpbMSwxMDJdLDM1OlsxLDEwMV19KSxpKEEsWzIsMzldLHszMjpbMSwxMDNdLDM4OlsxLDEwNF19KSx7MzM6WzEsMTA1XX0sezMzOlsxLDEwNl0sMzY6WzEsMTA3XX0sezMzOlsxLDEwOF19LHszMzpbMSwxMDldfSxpKEEsWzIsMjNdKSxpKEEsWzIsNTVdLHszMjpbMSwxMTBdLDQyOlsxLDExMV19KSxpKEEsWzIsNTldLHszODpbMSwxMTJdLDQyOlsxLDExM119KSxpKEEsWzIsNjldLHszMjpbMSwxMTVdLDM4OlsxLDExNF19KSxpKEEsWzIsNTZdLHszMjpbMSwxMTZdLDQyOlsxLDExN119KSxpKEEsWzIsNjFdLHszNTpbMSwxMThdLDQyOlsxLDExOV19KSxpKEEsWzIsNzJdLHszMjpbMSwxMjFdLDM1OlsxLDEyMF19KSxpKEEsWzIsNThdLHszODpbMSwxMjJdLDQyOlsxLDEyM119KSxpKEEsWzIsNjBdLHszNTpbMSwxMjRdLDQyOlsxLDEyNV19KSxpKEEsWzIsNzNdLHszNTpbMSwxMjddLDM4OlsxLDEyNl19KSxpKEEsWzIsNzBdLHszMjpbMSwxMjldLDM4OlsxLDEyOF19KSxpKEEsWzIsNzFdLHszMjpbMSwxMzFdLDM1OlsxLDEzMF19KSxpKEEsWzIsNzRdLHszNTpbMSwxMzNdLDM4OlsxLDEzMl19KSx7Mzk6MTM0LDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDEzNV19LHszMzpbMSwxMzZdfSx7MzM6WzEsMTM3XX0sezMzOlsxLDEzOF19LHszOToxMzksNDM6aiw0NDpLLDQ1OmVlfSxpKEEsWzIsMjVdLHszNTpbMSwxNDBdfSksaShBLFsyLDI2XSx7MzQ6WzEsMTQxXX0pLGkoQSxbMiwzMV0sezM0OlsxLDE0Ml19KSxpKEEsWzIsMjldLHszNDpbMSwxNDNdfSksaShBLFsyLDMwXSx7MzQ6WzEsMTQ0XX0pLHszMzpbMSwxNDVdfSx7MzM6WzEsMTQ2XX0sezM5OjE0Nyw0MzpqLDQ0OkssNDU6ZWV9LHszMzpbMSwxNDhdfSx7Mzk6MTQ5LDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDE1MF19LHszMzpbMSwxNTFdfSx7MzM6WzEsMTUyXX0sezMzOlsxLDE1M119LHszMzpbMSwxNTRdfSx7MzM6WzEsMTU1XX0sezMzOlsxLDE1Nl19LHszOToxNTcsNDM6aiw0NDpLLDQ1OmVlfSx7MzM6WzEsMTU4XX0sezMzOlsxLDE1OV19LHszMzpbMSwxNjBdfSx7Mzk6MTYxLDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDE2Ml19LHszOToxNjMsNDM6aiw0NDpLLDQ1OmVlfSx7MzM6WzEsMTY0XX0sezMzOlsxLDE2NV19LHszMzpbMSwxNjZdfSx7Mzk6MTY3LDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDE2OF19LGkoQSxbMiw0M10sezM1OlsxLDE2OV19KSxpKEEsWzIsNDRdLHszODpbMSwxNzBdfSksaShBLFsyLDQyXSx7MzI6WzEsMTcxXX0pLGkoQSxbMiw0NV0sezM1OlsxLDE3Ml19KSxpKEEsWzIsNDBdLHszODpbMSwxNzNdfSksaShBLFsyLDQxXSx7MzI6WzEsMTc0XX0pLHszMzpbMSwxNzVdLDM2OlsxLDE3Nl19LHszMzpbMSwxNzddfSx7MzM6WzEsMTc4XX0sezMzOlsxLDE3OV19LHszMzpbMSwxODBdfSxpKEEsWzIsNjZdLHs0MjpbMSwxODFdfSksaShBLFsyLDc5XSx7MzI6WzEsMTgyXX0pLGkoQSxbMiw2N10sezQyOlsxLDE4M119KSxpKEEsWzIsOTBdLHszODpbMSwxODRdfSksaShBLFsyLDgwXSx7MzI6WzEsMTg1XX0pLGkoQSxbMiw4OV0sezM4OlsxLDE4Nl19KSxpKEEsWzIsNjVdLHs0MjpbMSwxODddfSksaShBLFsyLDc4XSx7MzI6WzEsMTg4XX0pLGkoQSxbMiw2NF0sezQyOlsxLDE4OV19KSxpKEEsWzIsODRdLHszNTpbMSwxOTBdfSksaShBLFsyLDc3XSx7MzI6WzEsMTkxXX0pLGkoQSxbMiw4M10sezM1OlsxLDE5Ml19KSxpKEEsWzIsNjNdLHs0MjpbMSwxOTNdfSksaShBLFsyLDkxXSx7Mzg6WzEsMTk0XX0pLGkoQSxbMiw2Ml0sezQyOlsxLDE5NV19KSxpKEEsWzIsODVdLHszNTpbMSwxOTZdfSksaShBLFsyLDg2XSx7MzU6WzEsMTk3XX0pLGkoQSxbMiw5Ml0sezM4OlsxLDE5OF19KSxpKEEsWzIsNzZdLHszMjpbMSwxOTldfSksaShBLFsyLDg3XSx7Mzg6WzEsMjAwXX0pLGkoQSxbMiw3NV0sezMyOlsxLDIwMV19KSxpKEEsWzIsODFdLHszNTpbMSwyMDJdfSksaShBLFsyLDgyXSx7MzU6WzEsMjAzXX0pLGkoQSxbMiw4OF0sezM4OlsxLDIwNF19KSx7MzM6WzEsMjA1XX0sezM5OjIwNiw0MzpqLDQ0OkssNDU6ZWV9LHszMzpbMSwyMDddfSx7MzM6WzEsMjA4XX0sezM5OjIwOSw0MzpqLDQ0OkssNDU6ZWV9LHszMzpbMSwyMTBdfSxpKEEsWzIsMjddKSxpKEEsWzIsMzJdKSxpKEEsWzIsMjhdKSxpKEEsWzIsMzNdKSxpKEEsWzIsMzRdKSxpKEEsWzIsMzVdKSx7MzM6WzEsMjExXX0sezMzOlsxLDIxMl19LHszMzpbMSwyMTNdfSx7Mzk6MjE0LDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDIxNV19LHszOToyMTYsNDM6aiw0NDpLLDQ1OmVlfSx7MzM6WzEsMjE3XX0sezMzOlsxLDIxOF19LHszMzpbMSwyMTldfSx7MzM6WzEsMjIwXX0sezMzOlsxLDIyMV19LHszMzpbMSwyMjJdfSx7MzM6WzEsMjIzXX0sezM5OjIyNCw0MzpqLDQ0OkssNDU6ZWV9LHszMzpbMSwyMjVdfSx7MzM6WzEsMjI2XX0sezMzOlsxLDIyN119LHszOToyMjgsNDM6aiw0NDpLLDQ1OmVlfSx7MzM6WzEsMjI5XX0sezM5OjIzMCw0MzpqLDQ0OkssNDU6ZWV9LHszMzpbMSwyMzFdfSx7MzM6WzEsMjMyXX0sezMzOlsxLDIzM119LHszOToyMzQsNDM6aiw0NDpLLDQ1OmVlfSxpKEEsWzIsNDZdKSxpKEEsWzIsNDhdKSxpKEEsWzIsNDddKSxpKEEsWzIsNDldKSxpKEEsWzIsNTFdKSxpKEEsWzIsNTBdKSxpKEEsWzIsMTA3XSksaShBLFsyLDEwOF0pLGkoQSxbMiwxMDVdKSxpKEEsWzIsMTA2XSksaShBLFsyLDExMF0pLGkoQSxbMiwxMDldKSxpKEEsWzIsMTE0XSksaShBLFsyLDExM10pLGkoQSxbMiwxMTJdKSxpKEEsWzIsMTExXSksaShBLFsyLDExNl0pLGkoQSxbMiwxMTVdKSxpKEEsWzIsMTA0XSksaShBLFsyLDEwM10pLGkoQSxbMiwxMDJdKSxpKEEsWzIsMTAxXSksaShBLFsyLDk5XSksaShBLFsyLDEwMF0pLGkoQSxbMiw5OF0pLGkoQSxbMiw5N10pLGkoQSxbMiw5Nl0pLGkoQSxbMiw5NV0pLGkoQSxbMiw5M10pLGkoQSxbMiw5NF0pXSxkZWZhdWx0QWN0aW9uczp7NzpbMiwxXSwxMzpbMiwyXSwxODpbMiwzXSwzNjpbMiw0XX0scGFyc2VFcnJvcjpmdW5jdGlvbihuZSxzZSl7aWYoc2UucmVjb3ZlcmFibGUpdGhpcy50cmFjZShuZSk7ZWxzZXt2YXIgZGU9bmV3IEVycm9yKG5lKTt0aHJvdyBkZS5oYXNoPXNlLGRlfX0scGFyc2U6ZnVuY3Rpb24obmUpe3ZhciBzZT10aGlzLGRlPVswXSxYPVtdLGdlPVtudWxsXSxXPVtdLHhlPXRoaXMudGFibGUsVT0iIixGZT0wLFBlPTAsamU9MixJZT0xLFNlPVcuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksQ2U9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxrZT17eXk6e319O2Zvcih2YXIgS2UgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxLZSkmJihrZS55eVtLZV09dGhpcy55eVtLZV0pO0NlLnNldElucHV0KG5lLGtlLnl5KSxrZS55eS5sZXhlcj1DZSxrZS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgQ2UueXlsbG9jPiJ1IiYmKENlLnl5bGxvYz17fSk7dmFyIEZ0PUNlLnl5bGxvYztXLnB1c2goRnQpO3ZhciBOZT1DZS5vcHRpb25zJiZDZS5vcHRpb25zLnJhbmdlczt0eXBlb2Yga2UueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9a2UueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gZ24oKXt2YXIgaHQ7cmV0dXJuIGh0PVgucG9wKCl8fENlLmxleCgpfHxJZSx0eXBlb2YgaHQhPSJudW1iZXIiJiYoaHQgaW5zdGFuY2VvZiBBcnJheSYmKFg9aHQsaHQ9WC5wb3AoKSksaHQ9c2Uuc3ltYm9sc19baHRdfHxodCksaHR9Zm9yKHZhciBfdCxFdCxHdCxsbix4dD17fSxQdCxRZSxEdCxrdDs7KXtpZihFdD1kZVtkZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tFdF0/R3Q9dGhpcy5kZWZhdWx0QWN0aW9uc1tFdF06KChfdD09PW51bGx8fHR5cGVvZiBfdD4idSIpJiYoX3Q9Z24oKSksR3Q9eGVbRXRdJiZ4ZVtFdF1bX3RdKSx0eXBlb2YgR3Q+InUifHwhR3QubGVuZ3RofHwhR3RbMF0pe3ZhciBPbj0iIjtrdD1bXTtmb3IoUHQgaW4geGVbRXRdKXRoaXMudGVybWluYWxzX1tQdF0mJlB0PmplJiZrdC5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bUHRdKyInIik7Q2Uuc2hvd1Bvc2l0aW9uP09uPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEZlKzEpK2A6CmArQ2Uuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtrdC5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW190XXx8X3QpKyInIjpPbj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhGZSsxKSsiOiBVbmV4cGVjdGVkICIrKF90PT1JZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tfdF18fF90KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPbix7dGV4dDpDZS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX3RdfHxfdCxsaW5lOkNlLnl5bGluZW5vLGxvYzpGdCxleHBlY3RlZDprdH0pfWlmKEd0WzBdaW5zdGFuY2VvZiBBcnJheSYmR3QubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitFdCsiLCB0b2tlbjogIitfdCk7c3dpdGNoKEd0WzBdKXtjYXNlIDE6ZGUucHVzaChfdCksZ2UucHVzaChDZS55eXRleHQpLFcucHVzaChDZS55eWxsb2MpLGRlLnB1c2goR3RbMV0pLF90PW51bGwsUGU9Q2UueXlsZW5nLFU9Q2UueXl0ZXh0LEZlPUNlLnl5bGluZW5vLEZ0PUNlLnl5bGxvYzticmVhaztjYXNlIDI6aWYoUWU9dGhpcy5wcm9kdWN0aW9uc19bR3RbMV1dWzFdLHh0LiQ9Z2VbZ2UubGVuZ3RoLVFlXSx4dC5fJD17Zmlyc3RfbGluZTpXW1cubGVuZ3RoLShRZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOldbVy5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpXW1cubGVuZ3RoLShRZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpXW1cubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxOZSYmKHh0Ll8kLnJhbmdlPVtXW1cubGVuZ3RoLShRZXx8MSldLnJhbmdlWzBdLFdbVy5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxsbj10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoeHQsW1UsUGUsRmUsa2UueXksR3RbMV0sZ2UsV10uY29uY2F0KFNlKSksdHlwZW9mIGxuPCJ1IilyZXR1cm4gbG47UWUmJihkZT1kZS5zbGljZSgwLC0xKlFlKjIpLGdlPWdlLnNsaWNlKDAsLTEqUWUpLFc9Vy5zbGljZSgwLC0xKlFlKSksZGUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tHdFsxXV1bMF0pLGdlLnB1c2goeHQuJCksVy5wdXNoKHh0Ll8kKSxEdD14ZVtkZVtkZS5sZW5ndGgtMl1dW2RlW2RlLmxlbmd0aC0xXV0sZGUucHVzaChEdCk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LHBlPWZ1bmN0aW9uKCl7dmFyIGFlPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHNlLGRlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHNlLGRlKTtlbHNlIHRocm93IG5ldyBFcnJvcihzZSl9LHNldElucHV0OmZ1bmN0aW9uKG5lLHNlKXtyZXR1cm4gdGhpcy55eT1zZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9bmUsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIG5lPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1uZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9bmUsdGhpcy5tYXRjaGVkKz1uZTt2YXIgc2U9bmUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBzZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksbmV9LHVucHV0OmZ1bmN0aW9uKG5lKXt2YXIgc2U9bmUubGVuZ3RoLGRlPW5lLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9bmUrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLXNlKSx0aGlzLm9mZnNldC09c2U7dmFyIFg9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksZGUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1kZS5sZW5ndGgtMSk7dmFyIGdlPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpkZT8oZGUubGVuZ3RoPT09WC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK1hbWC5sZW5ndGgtZGUubGVuZ3RoXS5sZW5ndGgtZGVbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1zZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtnZVswXSxnZVswXSt0aGlzLnl5bGVuZy1zZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKG5lKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobmUpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIG5lPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4obmUubGVuZ3RoPjIwPyIuLi4iOiIiKStuZS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBuZT10aGlzLm1hdGNoO3JldHVybiBuZS5sZW5ndGg8MjAmJihuZSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtbmUubGVuZ3RoKSksKG5lLnN1YnN0cigwLDIwKSsobmUubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBuZT10aGlzLnBhc3RJbnB1dCgpLHNlPW5ldyBBcnJheShuZS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBuZSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArc2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKG5lLHNlKXt2YXIgZGUsWCxnZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoZ2U9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoZ2UueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksWD1uZVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksWCYmKHRoaXMueXlsaW5lbm8rPVgubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46WD9YW1gubGVuZ3RoLTFdLmxlbmd0aC1YW1gubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rbmVbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9bmVbMF0sdGhpcy5tYXRjaCs9bmVbMF0sdGhpcy5tYXRjaGVzPW5lLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKG5lWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1uZVswXSxkZT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxzZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxkZSlyZXR1cm4gZGU7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIFcgaW4gZ2UpdGhpc1tXXT1nZVtXXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBuZSxzZSxkZSxYO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGdlPXRoaXMuX2N1cnJlbnRSdWxlcygpLFc9MDtXPGdlLmxlbmd0aDtXKyspaWYoZGU9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tnZVtXXV0pLGRlJiYoIXNlfHxkZVswXS5sZW5ndGg+c2VbMF0ubGVuZ3RoKSl7aWYoc2U9ZGUsWD1XLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKG5lPXRoaXMudGVzdF9tYXRjaChkZSxnZVtXXSksbmUhPT0hMSlyZXR1cm4gbmU7aWYodGhpcy5fYmFja3RyYWNrKXtzZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBzZT8obmU9dGhpcy50ZXN0X21hdGNoKHNlLGdlW1hdKSxuZSE9PSExP25lOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgc2U9dGhpcy5uZXh0KCk7cmV0dXJuIHNlfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihzZSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHNlKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgc2U9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gc2U+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihzZSl7cmV0dXJuIHNlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoc2V8fDApLHNlPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbc2VdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHNlKXt0aGlzLmJlZ2luKHNlKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihzZSxkZSxYLGdlKXtzd2l0Y2goWCl7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwxOTtjYXNlIDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDI6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDIxO2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgNDp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDY6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgNzpyZXR1cm4gMTM7Y2FzZSA4OmJyZWFrO2Nhc2UgOTpicmVhaztjYXNlIDEwOnJldHVybiA1O2Nhc2UgMTE6cmV0dXJuIDQwO2Nhc2UgMTI6cmV0dXJuIDMyO2Nhc2UgMTM6cmV0dXJuIDM4O2Nhc2UgMTQ6cmV0dXJuIDQyO2Nhc2UgMTU6cmV0dXJuIDQzO2Nhc2UgMTY6cmV0dXJuIDQ0O2Nhc2UgMTc6cmV0dXJuIDQ1O2Nhc2UgMTg6cmV0dXJuIDM1O2Nhc2UgMTk6cmV0dXJuIDI4O2Nhc2UgMjA6cmV0dXJuIDI5O2Nhc2UgMjE6cmV0dXJuIDM3O2Nhc2UgMjI6cmV0dXJuIDMxO2Nhc2UgMjM6cmV0dXJuIDM0O2Nhc2UgMjQ6cmV0dXJuIDI2O2Nhc2UgMjU6cmV0dXJuIDk7Y2FzZSAyNjpyZXR1cm4gOTtjYXNlIDI3OnJldHVybiA4O2Nhc2UgMjg6cmV0dXJuIkNBUkVUIjtjYXNlIDI5OnRoaXMuYmVnaW4oIm9wdGlvbnMiKTticmVhaztjYXNlIDMwOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDMxOnJldHVybiAxMjtjYXNlIDMyOnJldHVybiAzNjtjYXNlIDMzOnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMzQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzU6cmV0dXJuIDMzO2Nhc2UgMzY6cmV0dXJuIDMwO2Nhc2UgMzc6cmV0dXJuIDQ2O2Nhc2UgMzg6cmV0dXJuIDd9fSxydWxlczpbL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/Oihccj9cbikrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiVbXlxuXSopL2ksL14oPzpnaXRHcmFwaFxiKS9pLC9eKD86Y29tbWl0KD89XHN8JCkpL2ksL14oPzppZDopL2ksL14oPzp0eXBlOikvaSwvXig/Om1zZzopL2ksL14oPzpOT1JNQUxcYikvaSwvXig/OlJFVkVSU0VcYikvaSwvXig/OkhJR0hMSUdIVFxiKS9pLC9eKD86dGFnOikvaSwvXig/OmJyYW5jaCg/PVxzfCQpKS9pLC9eKD86b3JkZXI6KS9pLC9eKD86bWVyZ2UoPz1cc3wkKSkvaSwvXig/OmNoZXJyeS1waWNrKD89XHN8JCkpL2ksL14oPzpwYXJlbnQ6KS9pLC9eKD86Y2hlY2tvdXQoPz1cc3wkKSkvaSwvXig/OkxSXGIpL2ksL14oPzpUQlxiKS9pLC9eKD86OikvaSwvXig/OlxeKS9pLC9eKD86b3B0aW9uc1xyP1xuKS9pLC9eKD86WyBcclxuXHRdK2VuZFxiKS9pLC9eKD86W1xzXFNdKyg/PVsgXHJcblx0XStlbmQpKS9pLC9eKD86WyJdWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbMC05XSsoPz1cc3wkKSkvaSwvXig/Olx3KFstXC4vXHddKlstXHddKT8pL2ksL14oPzokKS9pLC9eKD86XHMrKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNSw2XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzNdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSxvcHRpb25zOntydWxlczpbMzAsMzFdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMzQsMzVdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMyLDMzLDM2LDM3LDM4LDM5XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIGFlfSgpO29lLmxleGVyPXBlO2Z1bmN0aW9uIGJlKCl7dGhpcy55eT17fX1yZXR1cm4gYmUucHJvdG90eXBlPW9lLG9lLlBhcnNlcj1iZSxuZXcgYmV9KCk7S21lLnBhcnNlcj1LbWU7Y29uc3QgdHRuPUttZTtsZXQgb0o9cXQoKS5naXRHcmFwaC5tYWluQnJhbmNoTmFtZSxudG49cXQoKS5naXRHcmFwaC5tYWluQnJhbmNoT3JkZXIsYjE9e30sTnA9bnVsbCxPUj17fTtPUltvSl09e25hbWU6b0osb3JkZXI6bnRufTtsZXQgRjA9e307RjBbb0pdPU5wO2xldCBzZD1vSixxVWU9IkxSIixZQz0wO2Z1bmN0aW9uIFdtZSgpe3JldHVybiBtamUoe2xlbmd0aDo3fSl9ZnVuY3Rpb24gcnRuKGkscyl7Y29uc3QgdT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBpLnJlZHVjZSgoZCxwKT0+e2NvbnN0IHY9cyhwKTtyZXR1cm4gdVt2XXx8KHVbdl09ITAsZC5wdXNoKHApKSxkfSxbXSl9Y29uc3QgaXRuPWZ1bmN0aW9uKGkpe3FVZT1pfTtsZXQgSFVlPXt9O2NvbnN0IHN0bj1mdW5jdGlvbihpKXtYZS5kZWJ1Zygib3B0aW9ucyBzdHIiLGkpLGk9aSYmaS50cmltKCksaT1pfHwie30iO3RyeXtIVWU9SlNPTi5wYXJzZShpKX1jYXRjaChzKXtYZS5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBnaXRHcmFwaCBvcHRpb25zIixzLm1lc3NhZ2UpfX0sYXRuPWZ1bmN0aW9uKCl7cmV0dXJuIEhVZX0sb3RuPWZ1bmN0aW9uKGkscyx1LGQpe1hlLmRlYnVnKCJFbnRlcmluZyBjb21taXQ6IixpLHMsdSxkKSxzPWNpLnNhbml0aXplVGV4dChzLHF0KCkpLGk9Y2kuc2FuaXRpemVUZXh0KGkscXQoKSksZD1jaS5zYW5pdGl6ZVRleHQoZCxxdCgpKTtjb25zdCBwPXtpZDpzfHxZQysiLSIrV21lKCksbWVzc2FnZTppLHNlcTpZQysrLHR5cGU6dXx8VUQuTk9STUFMLHRhZzpkfHwiIixwYXJlbnRzOk5wPT1udWxsP1tdOltOcC5pZF0sYnJhbmNoOnNkfTtOcD1wLGIxW3AuaWRdPXAsRjBbc2RdPXAuaWQsWGUuZGVidWcoImluIHB1c2hDb21taXQgIitwLmlkKX0sY3RuPWZ1bmN0aW9uKGkscyl7aWYoaT1jaS5zYW5pdGl6ZVRleHQoaSxxdCgpKSxGMFtpXT09PXZvaWQgMClGMFtpXT1OcCE9bnVsbD9OcC5pZDpudWxsLE9SW2ldPXtuYW1lOmksb3JkZXI6cz9wYXJzZUludChzLDEwKTpudWxsfSxWVWUoaSksWGUuZGVidWcoImluIGNyZWF0ZUJyYW5jaCIpO2Vsc2V7bGV0IHU9bmV3IEVycm9yKCdUcnlpbmcgdG8gY3JlYXRlIGFuIGV4aXN0aW5nIGJyYW5jaC4gKEhlbHA6IEVpdGhlciB1c2UgYSBuZXcgbmFtZSBpZiB5b3Ugd2FudCBjcmVhdGUgYSBuZXcgYnJhbmNoIG9yIHRyeSB1c2luZyAiY2hlY2tvdXQgJytpKyciKScpO3Rocm93IHUuaGFzaD17dGV4dDoiYnJhbmNoICIraSx0b2tlbjoiYnJhbmNoICIraSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbJyJjaGVja291dCAnK2krJyInXX0sdX19LHV0bj1mdW5jdGlvbihpLHMsdSxkKXtpPWNpLnNhbml0aXplVGV4dChpLHF0KCkpLHM9Y2kuc2FuaXRpemVUZXh0KHMscXQoKSk7Y29uc3QgcD1iMVtGMFtzZF1dLHY9YjFbRjBbaV1dO2lmKHNkPT09aSl7bGV0IHk9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ2Fubm90IG1lcmdlIGEgYnJhbmNoIHRvIGl0c2VsZicpO3Rocm93IHkuaGFzaD17dGV4dDoibWVyZ2UgIitpLHRva2VuOiJtZXJnZSAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJicmFuY2ggYWJjIl19LHl9ZWxzZSBpZihwPT09dm9pZCAwfHwhcCl7bGV0IHk9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ3VycmVudCBicmFuY2ggKCcrc2QrIiloYXMgbm8gY29tbWl0cyIpO3Rocm93IHkuaGFzaD17dGV4dDoibWVyZ2UgIitpLHRva2VuOiJtZXJnZSAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJjb21taXQiXX0seX1lbHNlIGlmKEYwW2ldPT09dm9pZCAwKXtsZXQgeT1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBCcmFuY2ggdG8gYmUgbWVyZ2VkICgnK2krIikgZG9lcyBub3QgZXhpc3QiKTt0aHJvdyB5Lmhhc2g9e3RleHQ6Im1lcmdlICIraSx0b2tlbjoibWVyZ2UgIitpLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiYnJhbmNoICIraV19LHl9ZWxzZSBpZih2PT09dm9pZCAwfHwhdil7bGV0IHk9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQnJhbmNoIHRvIGJlIG1lcmdlZCAoJytpKyIpIGhhcyBubyBjb21taXRzIik7dGhyb3cgeS5oYXNoPXt0ZXh0OiJtZXJnZSAiK2ksdG9rZW46Im1lcmdlICIraSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbJyJjb21taXQiJ119LHl9ZWxzZSBpZihwPT09dil7bGV0IHk9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQm90aCBicmFuY2hlcyBoYXZlIHNhbWUgaGVhZCcpO3Rocm93IHkuaGFzaD17dGV4dDoibWVyZ2UgIitpLHRva2VuOiJtZXJnZSAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJicmFuY2ggYWJjIl19LHl9ZWxzZSBpZihzJiZiMVtzXSE9PXZvaWQgMCl7bGV0IHk9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ29tbWl0IHdpdGggaWQ6JytzKyIgYWxyZWFkeSBleGlzdHMsIHVzZSBkaWZmZXJlbnQgY3VzdG9tIElkIik7dGhyb3cgeS5oYXNoPXt0ZXh0OiJtZXJnZSAiK2krcyt1K2QsdG9rZW46Im1lcmdlICIraStzK3UrZCxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbIm1lcmdlICIraSsiICIrcysiX1VOSVFVRSAiK3UrIiAiK2RdfSx5fWNvbnN0IGI9e2lkOnN8fFlDKyItIitXbWUoKSxtZXNzYWdlOiJtZXJnZWQgYnJhbmNoICIraSsiIGludG8gIitzZCxzZXE6WUMrKyxwYXJlbnRzOltOcD09bnVsbD9udWxsOk5wLmlkLEYwW2ldXSxicmFuY2g6c2QsdHlwZTpVRC5NRVJHRSxjdXN0b21UeXBlOnUsY3VzdG9tSWQ6ISFzLHRhZzpkfHwiIn07TnA9YixiMVtiLmlkXT1iLEYwW3NkXT1iLmlkLFhlLmRlYnVnKEYwKSxYZS5kZWJ1ZygiaW4gbWVyZ2VCcmFuY2giKX0sbHRuPWZ1bmN0aW9uKGkscyx1LGQpe2lmKFhlLmRlYnVnKCJFbnRlcmluZyBjaGVycnlQaWNrOiIsaSxzLHUpLGk9Y2kuc2FuaXRpemVUZXh0KGkscXQoKSkscz1jaS5zYW5pdGl6ZVRleHQocyxxdCgpKSx1PWNpLnNhbml0aXplVGV4dCh1LHF0KCkpLGQ9Y2kuc2FuaXRpemVUZXh0KGQscXQoKSksIWl8fGIxW2ldPT09dm9pZCAwKXtsZXQgYj1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAiY2hlcnJ5UGljayIuIFNvdXJjZSBjb21taXQgaWQgc2hvdWxkIGV4aXN0IGFuZCBwcm92aWRlZCcpO3Rocm93IGIuaGFzaD17dGV4dDoiY2hlcnJ5UGljayAiK2krIiAiK3MsdG9rZW46ImNoZXJyeVBpY2sgIitpKyIgIitzLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiY2hlcnJ5LXBpY2sgYWJjIl19LGJ9bGV0IHA9YjFbaV0sdj1wLmJyYW5jaDtpZihkJiYhKEFycmF5LmlzQXJyYXkocC5wYXJlbnRzKSYmcC5wYXJlbnRzLmluY2x1ZGVzKGQpKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgb3BlcmF0aW9uOiBUaGUgc3BlY2lmaWVkIHBhcmVudCBjb21taXQgaXMgbm90IGFuIGltbWVkaWF0ZSBwYXJlbnQgb2YgdGhlIGNoZXJyeS1waWNrZWQgY29tbWl0LiIpO2lmKHAudHlwZT09PVVELk1FUkdFJiYhZCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB1c2FnZSBvZiBjaGVycnktcGljazogSWYgdGhlIHNvdXJjZSBjb21taXQgaXMgYSBtZXJnZSBjb21taXQsIGFuIGltbWVkaWF0ZSBwYXJlbnQgY29tbWl0IG11c3QgYmUgc3BlY2lmaWVkLiIpO2lmKCFzfHxiMVtzXT09PXZvaWQgMCl7aWYodj09PXNkKXtsZXQgVD1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAiY2hlcnJ5UGljayIuIFNvdXJjZSBjb21taXQgaXMgYWxyZWFkeSBvbiBjdXJyZW50IGJyYW5jaCcpO3Rocm93IFQuaGFzaD17dGV4dDoiY2hlcnJ5UGljayAiK2krIiAiK3MsdG9rZW46ImNoZXJyeVBpY2sgIitpKyIgIitzLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiY2hlcnJ5LXBpY2sgYWJjIl19LFR9Y29uc3QgYj1iMVtGMFtzZF1dO2lmKGI9PT12b2lkIDB8fCFiKXtsZXQgVD1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAiY2hlcnJ5LXBpY2siLiBDdXJyZW50IGJyYW5jaCAoJytzZCsiKWhhcyBubyBjb21taXRzIik7dGhyb3cgVC5oYXNoPXt0ZXh0OiJjaGVycnlQaWNrICIraSsiICIrcyx0b2tlbjoiY2hlcnJ5UGljayAiK2krIiAiK3MsbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJjaGVycnktcGljayBhYmMiXX0sVH1jb25zdCB5PXtpZDpZQysiLSIrV21lKCksbWVzc2FnZToiY2hlcnJ5LXBpY2tlZCAiK3ArIiBpbnRvICIrc2Qsc2VxOllDKysscGFyZW50czpbTnA9PW51bGw/bnVsbDpOcC5pZCxwLmlkXSxicmFuY2g6c2QsdHlwZTpVRC5DSEVSUllfUElDSyx0YWc6dT8/YGNoZXJyeS1waWNrOiR7cC5pZH0ke3AudHlwZT09PVVELk1FUkdFP2B8cGFyZW50OiR7ZH1gOiIifWB9O05wPXksYjFbeS5pZF09eSxGMFtzZF09eS5pZCxYZS5kZWJ1ZyhGMCksWGUuZGVidWcoImluIGNoZXJyeVBpY2siKX19LFZVZT1mdW5jdGlvbihpKXtpZihpPWNpLnNhbml0aXplVGV4dChpLHF0KCkpLEYwW2ldPT09dm9pZCAwKXtsZXQgcz1uZXcgRXJyb3IoJ1RyeWluZyB0byBjaGVja291dCBicmFuY2ggd2hpY2ggaXMgbm90IHlldCBjcmVhdGVkLiAoSGVscCB0cnkgdXNpbmcgImJyYW5jaCAnK2krJyIpJyk7dGhyb3cgcy5oYXNoPXt0ZXh0OiJjaGVja291dCAiK2ksdG9rZW46ImNoZWNrb3V0ICIraSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbJyJicmFuY2ggJytpKyciJ119LHN9ZWxzZXtzZD1pO2NvbnN0IHM9RjBbc2RdO05wPWIxW3NdfX07ZnVuY3Rpb24gVVVlKGkscyx1KXtjb25zdCBkPWkuaW5kZXhPZihzKTtkPT09LTE/aS5wdXNoKHUpOmkuc3BsaWNlKGQsMSx1KX1mdW5jdGlvbiBHVWUoaSl7Y29uc3Qgcz1pLnJlZHVjZSgocCx2KT0+cC5zZXE+di5zZXE/cDp2LGlbMF0pO2xldCB1PSIiO2kuZm9yRWFjaChmdW5jdGlvbihwKXtwPT09cz91Kz0iCSoiOnUrPSIJfCJ9KTtjb25zdCBkPVt1LHMuaWQscy5zZXFdO2ZvcihsZXQgcCBpbiBGMClGMFtwXT09PXMuaWQmJmQucHVzaChwKTtpZihYZS5kZWJ1ZyhkLmpvaW4oIiAiKSkscy5wYXJlbnRzJiZzLnBhcmVudHMubGVuZ3RoPT0yKXtjb25zdCBwPWIxW3MucGFyZW50c1swXV07VVVlKGkscyxwKSxpLnB1c2goYjFbcy5wYXJlbnRzWzFdXSl9ZWxzZXtpZihzLnBhcmVudHMubGVuZ3RoPT0wKXJldHVybjt7Y29uc3QgcD1iMVtzLnBhcmVudHNdO1VVZShpLHMscCl9fWk9cnRuKGkscD0+cC5pZCksR1VlKGkpfWNvbnN0IGh0bj1mdW5jdGlvbigpe1hlLmRlYnVnKGIxKTtjb25zdCBpPUtVZSgpWzBdO0dVZShbaV0pfSxmdG49ZnVuY3Rpb24oKXtiMT17fSxOcD1udWxsO2xldCBpPXF0KCkuZ2l0R3JhcGgubWFpbkJyYW5jaE5hbWUscz1xdCgpLmdpdEdyYXBoLm1haW5CcmFuY2hPcmRlcjtGMD17fSxGMFtpXT1udWxsLE9SPXt9LE9SW2ldPXtuYW1lOmksb3JkZXI6c30sc2Q9aSxZQz0wLFBnKCl9LGR0bj1mdW5jdGlvbigpe3JldHVybiBPYmplY3QudmFsdWVzKE9SKS5tYXAoKHMsdSk9PnMub3JkZXIhPT1udWxsP3M6ey4uLnMsb3JkZXI6cGFyc2VGbG9hdChgMC4ke3V9YCwxMCl9KS5zb3J0KChzLHUpPT5zLm9yZGVyLXUub3JkZXIpLm1hcCgoe25hbWU6c30pPT4oe25hbWU6c30pKX0sZ3RuPWZ1bmN0aW9uKCl7cmV0dXJuIEYwfSxwdG49ZnVuY3Rpb24oKXtyZXR1cm4gYjF9LEtVZT1mdW5jdGlvbigpe2NvbnN0IGk9T2JqZWN0LmtleXMoYjEpLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gYjFbc119KTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKHMpe1hlLmRlYnVnKHMuaWQpfSksaS5zb3J0KChzLHUpPT5zLnNlcS11LnNlcSksaX0sYnRuPWZ1bmN0aW9uKCl7cmV0dXJuIHNkfSxtdG49ZnVuY3Rpb24oKXtyZXR1cm4gcVVlfSx2dG49ZnVuY3Rpb24oKXtyZXR1cm4gTnB9LFVEPXtOT1JNQUw6MCxSRVZFUlNFOjEsSElHSExJR0hUOjIsTUVSR0U6MyxDSEVSUllfUElDSzo0fSx3dG49e2dldENvbmZpZzooKT0+cXQoKS5naXRHcmFwaCxzZXREaXJlY3Rpb246aXRuLHNldE9wdGlvbnM6c3RuLGdldE9wdGlvbnM6YXRuLGNvbW1pdDpvdG4sYnJhbmNoOmN0bixtZXJnZTp1dG4sY2hlcnJ5UGljazpsdG4sY2hlY2tvdXQ6VlVlLHByZXR0eVByaW50Omh0bixjbGVhcjpmdG4sZ2V0QnJhbmNoZXNBc09iakFycmF5OmR0bixnZXRCcmFuY2hlczpndG4sZ2V0Q29tbWl0czpwdG4sZ2V0Q29tbWl0c0FycmF5OktVZSxnZXRDdXJyZW50QnJhbmNoOmJ0bixnZXREaXJlY3Rpb246bXRuLGdldEhlYWQ6dnRuLHNldEFjY1RpdGxlOkJnLGdldEFjY1RpdGxlOkNwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLHNldEFjY0Rlc2NyaXB0aW9uOlNwLHNldERpYWdyYW1UaXRsZTpjbSxnZXREaWFncmFtVGl0bGU6QXAsY29tbWl0VHlwZTpVRH07bGV0IE5SPXt9O2NvbnN0IGFkPXtOT1JNQUw6MCxSRVZFUlNFOjEsSElHSExJR0hUOjIsTUVSR0U6MyxDSEVSUllfUElDSzo0fSxYQz04O2xldCBIMj17fSxINz17fSxjSj1bXSxQUj0wLFIwPSJMUiI7Y29uc3QgeXRuPSgpPT57SDI9e30sSDc9e30sTlI9e30sUFI9MCxjSj1bXSxSMD0iTFIifSxXVWU9aT0+e2NvbnN0IHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtsZXQgdT1bXTt0eXBlb2YgaT09InN0cmluZyI/dT1pLnNwbGl0KC9cXG58XG58PGJyXHMqXC8/Pi9naSk6QXJyYXkuaXNBcnJheShpKT91PWk6dT1bXTtmb3IoY29uc3QgZCBvZiB1KXtjb25zdCBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO3Auc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIikscC5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIikscC5zZXRBdHRyaWJ1dGUoIngiLCIwIikscC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwicm93IikscC50ZXh0Q29udGVudD1kLnRyaW0oKSxzLmFwcGVuZENoaWxkKHApfXJldHVybiBzfSx4dG49aT0+e2xldCBzPSIiLHU9MDtyZXR1cm4gaS5mb3JFYWNoKGQ9Pntjb25zdCBwPVIwPT09IlRCIj9IN1tkXS55Okg3W2RdLng7cD49dSYmKHM9ZCx1PXApfSksc3x8dm9pZCAwfSxZVWU9KGkscyx1KT0+e2NvbnN0IGQ9cXQoKS5naXRHcmFwaCxwPWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjb21taXQtYnVsbGV0cyIpLHY9aS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNvbW1pdC1sYWJlbHMiKTtsZXQgYj0wO1IwPT09IlRCIiYmKGI9MzApO2NvbnN0IFQ9T2JqZWN0LmtleXMocykuc29ydCgoUixGKT0+c1tSXS5zZXEtc1tGXS5zZXEpLF89ZC5wYXJhbGxlbENvbW1pdHMsQT0xMCxQPTQwO1QuZm9yRWFjaChSPT57Y29uc3QgRj1zW1JdO2lmKF8paWYoRi5wYXJlbnRzLmxlbmd0aCl7Y29uc3QgaWU9eHRuKEYucGFyZW50cyk7Yj1SMD09PSJUQiI/SDdbaWVdLnkrUDpIN1tpZV0ueCtQfWVsc2UgYj0wLFIwPT09IlRCIiYmKGI9MzApO2NvbnN0IGo9YitBLEs9UjA9PT0iVEIiP2o6SDJbRi5icmFuY2hdLnBvcyxlZT1SMD09PSJUQiI/SDJbRi5icmFuY2hdLnBvczpqO2lmKHUpe2xldCBpZSxvZT1GLmN1c3RvbVR5cGUhPT12b2lkIDAmJkYuY3VzdG9tVHlwZSE9PSIiP0YuY3VzdG9tVHlwZTpGLnR5cGU7c3dpdGNoKG9lKXtjYXNlIGFkLk5PUk1BTDppZT0iY29tbWl0LW5vcm1hbCI7YnJlYWs7Y2FzZSBhZC5SRVZFUlNFOmllPSJjb21taXQtcmV2ZXJzZSI7YnJlYWs7Y2FzZSBhZC5ISUdITElHSFQ6aWU9ImNvbW1pdC1oaWdobGlnaHQiO2JyZWFrO2Nhc2UgYWQuTUVSR0U6aWU9ImNvbW1pdC1tZXJnZSI7YnJlYWs7Y2FzZSBhZC5DSEVSUllfUElDSzppZT0iY29tbWl0LWNoZXJyeS1waWNrIjticmVhaztkZWZhdWx0OmllPSJjb21taXQtbm9ybWFsIn1pZihvZT09PWFkLkhJR0hMSUdIVCl7Y29uc3QgcGU9cC5hcHBlbmQoInJlY3QiKTtwZS5hdHRyKCJ4IixlZS0xMCkscGUuYXR0cigieSIsSy0xMCkscGUuYXR0cigiaGVpZ2h0IiwyMCkscGUuYXR0cigid2lkdGgiLDIwKSxwZS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke0YuaWR9IGNvbW1pdC1oaWdobGlnaHQke0gyW0YuYnJhbmNoXS5pbmRleCVYQ30gJHtpZX0tb3V0ZXJgKSxwLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLGVlLTYpLmF0dHIoInkiLEstNikuYXR0cigiaGVpZ2h0IiwxMikuYXR0cigid2lkdGgiLDEyKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke0YuaWR9IGNvbW1pdCR7SDJbRi5icmFuY2hdLmluZGV4JVhDfSAke2llfS1pbm5lcmApfWVsc2UgaWYob2U9PT1hZC5DSEVSUllfUElDSylwLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGVlKS5hdHRyKCJjeSIsSykuYXR0cigiciIsMTApLmF0dHIoImNsYXNzIixgY29tbWl0ICR7Ri5pZH0gJHtpZX1gKSxwLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGVlLTMpLmF0dHIoImN5IixLKzIpLmF0dHIoInIiLDIuNzUpLmF0dHIoImZpbGwiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtGLmlkfSAke2llfWApLHAuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsZWUrMykuYXR0cigiY3kiLEsrMikuYXR0cigiciIsMi43NSkuYXR0cigiZmlsbCIsIiNmZmYiKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke0YuaWR9ICR7aWV9YCkscC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsZWUrMykuYXR0cigieTEiLEsrMSkuYXR0cigieDIiLGVlKS5hdHRyKCJ5MiIsSy01KS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtGLmlkfSAke2llfWApLHAuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLGVlLTMpLmF0dHIoInkxIixLKzEpLmF0dHIoIngyIixlZSkuYXR0cigieTIiLEstNSkuYXR0cigic3Ryb2tlIiwiI2ZmZiIpLmF0dHIoImNsYXNzIixgY29tbWl0ICR7Ri5pZH0gJHtpZX1gKTtlbHNle2NvbnN0IHBlPXAuYXBwZW5kKCJjaXJjbGUiKTtpZihwZS5hdHRyKCJjeCIsZWUpLHBlLmF0dHIoImN5IixLKSxwZS5hdHRyKCJyIixGLnR5cGU9PT1hZC5NRVJHRT85OjEwKSxwZS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke0YuaWR9IGNvbW1pdCR7SDJbRi5icmFuY2hdLmluZGV4JVhDfWApLG9lPT09YWQuTUVSR0Upe2NvbnN0IGJlPXAuYXBwZW5kKCJjaXJjbGUiKTtiZS5hdHRyKCJjeCIsZWUpLGJlLmF0dHIoImN5IixLKSxiZS5hdHRyKCJyIiw2KSxiZS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke2llfSAke0YuaWR9IGNvbW1pdCR7SDJbRi5icmFuY2hdLmluZGV4JVhDfWApfW9lPT09YWQuUkVWRVJTRSYmcC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixgTSAke2VlLTV9LCR7Sy01fUwke2VlKzV9LCR7Sys1fU0ke2VlLTV9LCR7Sys1fUwke2VlKzV9LCR7Sy01fWApLmF0dHIoImNsYXNzIixgY29tbWl0ICR7aWV9ICR7Ri5pZH0gY29tbWl0JHtIMltGLmJyYW5jaF0uaW5kZXglWEN9YCl9fWlmKFIwPT09IlRCIj9IN1tGLmlkXT17eDplZSx5Omp9Okg3W0YuaWRdPXt4OmoseTpLfSx1KXtpZihGLnR5cGUhPT1hZC5DSEVSUllfUElDSyYmKEYuY3VzdG9tSWQmJkYudHlwZT09PWFkLk1FUkdFfHxGLnR5cGUhPT1hZC5NRVJHRSkmJmQuc2hvd0NvbW1pdExhYmVsKXtjb25zdCBwZT12LmFwcGVuZCgiZyIpLGJlPXBlLmluc2VydCgicmVjdCIpLmF0dHIoImNsYXNzIiwiY29tbWl0LWxhYmVsLWJrZyIpLGFlPXBlLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIpLmF0dHIoInkiLEsrMjUpLmF0dHIoImNsYXNzIiwiY29tbWl0LWxhYmVsIikudGV4dChGLmlkKTtsZXQgbmU9YWUubm9kZSgpLmdldEJCb3goKTtpZihiZS5hdHRyKCJ4IixqLW5lLndpZHRoLzItMikuYXR0cigieSIsSysxMy41KS5hdHRyKCJ3aWR0aCIsbmUud2lkdGgrMioyKS5hdHRyKCJoZWlnaHQiLG5lLmhlaWdodCsyKjIpLFIwPT09IlRCIiYmKGJlLmF0dHIoIngiLGVlLShuZS53aWR0aCs0KjQrNSkpLmF0dHIoInkiLEstMTIpLGFlLmF0dHIoIngiLGVlLShuZS53aWR0aCs0KjQpKS5hdHRyKCJ5IixLK25lLmhlaWdodC0xMikpLFIwIT09IlRCIiYmYWUuYXR0cigieCIsai1uZS53aWR0aC8yKSxkLnJvdGF0ZUNvbW1pdExhYmVsKWlmKFIwPT09IlRCIilhZS5hdHRyKCJ0cmFuc2Zvcm0iLCJyb3RhdGUoLTQ1LCAiK2VlKyIsICIrSysiKSIpLGJlLmF0dHIoInRyYW5zZm9ybSIsInJvdGF0ZSgtNDUsICIrZWUrIiwgIitLKyIpIik7ZWxzZXtsZXQgc2U9LTcuNS0obmUud2lkdGgrMTApLzI1KjkuNSxkZT0xMCtuZS53aWR0aC8yNSo4LjU7cGUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrc2UrIiwgIitkZSsiKSByb3RhdGUoLTQ1LCAiK2IrIiwgIitLKyIpIil9fWlmKEYudGFnKXtjb25zdCBwZT12Lmluc2VydCgicG9seWdvbiIpLGJlPXYuYXBwZW5kKCJjaXJjbGUiKSxhZT12LmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLEstMTYpLmF0dHIoImNsYXNzIiwidGFnLWxhYmVsIikudGV4dChGLnRhZyk7bGV0IG5lPWFlLm5vZGUoKS5nZXRCQm94KCk7YWUuYXR0cigieCIsai1uZS53aWR0aC8yKTtjb25zdCBzZT1uZS5oZWlnaHQvMixkZT1LLTE5LjI7cGUuYXR0cigiY2xhc3MiLCJ0YWctbGFiZWwtYmtnIikuYXR0cigicG9pbnRzIixgCiAgICAgICAgICAke2ItbmUud2lkdGgvMi00LzJ9LCR7ZGUrMn0KICAgICAgICAgICR7Yi1uZS53aWR0aC8yLTQvMn0sJHtkZS0yfQogICAgICAgICAgJHtqLW5lLndpZHRoLzItNH0sJHtkZS1zZS0yfQogICAgICAgICAgJHtqK25lLndpZHRoLzIrNH0sJHtkZS1zZS0yfQogICAgICAgICAgJHtqK25lLndpZHRoLzIrNH0sJHtkZStzZSsyfQogICAgICAgICAgJHtqLW5lLndpZHRoLzItNH0sJHtkZStzZSsyfWApLGJlLmF0dHIoImN4IixiLW5lLndpZHRoLzIrNC8yKS5hdHRyKCJjeSIsZGUpLmF0dHIoInIiLDEuNSkuYXR0cigiY2xhc3MiLCJ0YWctaG9sZSIpLFIwPT09IlRCIiYmKHBlLmF0dHIoImNsYXNzIiwidGFnLWxhYmVsLWJrZyIpLmF0dHIoInBvaW50cyIsYAogICAgICAgICAgICAke2VlfSwke2IrMn0KICAgICAgICAgICAgJHtlZX0sJHtiLTJ9CiAgICAgICAgICAgICR7ZWUrQX0sJHtiLXNlLTJ9CiAgICAgICAgICAgICR7ZWUrQStuZS53aWR0aCs0fSwke2Itc2UtMn0KICAgICAgICAgICAgJHtlZStBK25lLndpZHRoKzR9LCR7YitzZSsyfQogICAgICAgICAgICAke2VlK0F9LCR7YitzZSsyfWApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxMiwxMikgcm90YXRlKDQ1LCAiK2VlKyIsIitiKyIpIiksYmUuYXR0cigiY3giLGVlKzQvMikuYXR0cigiY3kiLGIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxMiwxMikgcm90YXRlKDQ1LCAiK2VlKyIsIitiKyIpIiksYWUuYXR0cigieCIsZWUrNSkuYXR0cigieSIsYiszKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTQsMTQpIHJvdGF0ZSg0NSwgIitlZSsiLCIrYisiKSIpKX19Yis9UCtBLGI+UFImJihQUj1iKX0pfSxrdG49KGkscyx1LGQscCk9Pntjb25zdCBiPShSMD09PSJUQiI/dS54PGQueDp1Lnk8ZC55KT9zLmJyYW5jaDppLmJyYW5jaCx5PV89Pl8uYnJhbmNoPT09YixUPV89Pl8uc2VxPmkuc2VxJiZfLnNlcTxzLnNlcTtyZXR1cm4gT2JqZWN0LnZhbHVlcyhwKS5zb21lKF89PlQoXykmJnkoXykpfSxCUj0oaSxzLHU9MCk9Pntjb25zdCBkPWkrTWF0aC5hYnMoaS1zKS8yO2lmKHU+NSlyZXR1cm4gZDtpZihjSi5ldmVyeShiPT5NYXRoLmFicyhiLWQpPj0xMCkpcmV0dXJuIGNKLnB1c2goZCksZDtjb25zdCB2PU1hdGguYWJzKGktcyk7cmV0dXJuIEJSKGkscy12LzUsdSsxKX0sRXRuPShpLHMsdSxkKT0+e2NvbnN0IHA9SDdbcy5pZF0sdj1IN1t1LmlkXSxiPWt0bihzLHUscCx2LGQpO2xldCB5PSIiLFQ9IiIsXz0wLEE9MCxQPUgyW3UuYnJhbmNoXS5pbmRleDt1LnR5cGU9PT1hZC5NRVJHRSYmcy5pZCE9PXUucGFyZW50c1swXSYmKFA9SDJbcy5icmFuY2hdLmluZGV4KTtsZXQgUjtpZihiKXt5PSJBIDEwIDEwLCAwLCAwLCAwLCIsVD0iQSAxMCAxMCwgMCwgMCwgMSwiLF89MTAsQT0xMDtjb25zdCBGPXAueTx2Lnk/QlIocC55LHYueSk6QlIodi55LHAueSksaj1wLng8di54P0JSKHAueCx2LngpOkJSKHYueCxwLngpO1IwPT09IlRCIj9wLng8di54P1I9YE0gJHtwLnh9ICR7cC55fSBMICR7ai1ffSAke3AueX0gJHtUfSAke2p9ICR7cC55K0F9IEwgJHtqfSAke3YueS1ffSAke3l9ICR7aitBfSAke3YueX0gTCAke3YueH0gJHt2Lnl9YDooUD1IMltzLmJyYW5jaF0uaW5kZXgsUj1gTSAke3AueH0gJHtwLnl9IEwgJHtqK199ICR7cC55fSAke3l9ICR7an0gJHtwLnkrQX0gTCAke2p9ICR7di55LV99ICR7VH0gJHtqLUF9ICR7di55fSBMICR7di54fSAke3YueX1gKTpwLnk8di55P1I9YE0gJHtwLnh9ICR7cC55fSBMICR7cC54fSAke0YtX30gJHt5fSAke3AueCtBfSAke0Z9IEwgJHt2LngtX30gJHtGfSAke1R9ICR7di54fSAke0YrQX0gTCAke3YueH0gJHt2Lnl9YDooUD1IMltzLmJyYW5jaF0uaW5kZXgsUj1gTSAke3AueH0gJHtwLnl9IEwgJHtwLnh9ICR7RitffSAke1R9ICR7cC54K0F9ICR7Rn0gTCAke3YueC1ffSAke0Z9ICR7eX0gJHt2Lnh9ICR7Ri1BfSBMICR7di54fSAke3YueX1gKX1lbHNlIHk9IkEgMjAgMjAsIDAsIDAsIDAsIixUPSJBIDIwIDIwLCAwLCAwLCAxLCIsXz0yMCxBPTIwLFIwPT09IlRCIj8ocC54PHYueCYmKHUudHlwZT09PWFkLk1FUkdFJiZzLmlkIT09dS5wYXJlbnRzWzBdP1I9YE0gJHtwLnh9ICR7cC55fSBMICR7cC54fSAke3YueS1ffSAke3l9ICR7cC54K0F9ICR7di55fSBMICR7di54fSAke3YueX1gOlI9YE0gJHtwLnh9ICR7cC55fSBMICR7di54LV99ICR7cC55fSAke1R9ICR7di54fSAke3AueStBfSBMICR7di54fSAke3YueX1gKSxwLng+di54JiYoeT0iQSAyMCAyMCwgMCwgMCwgMCwiLFQ9IkEgMjAgMjAsIDAsIDAsIDEsIixfPTIwLEE9MjAsdS50eXBlPT09YWQuTUVSR0UmJnMuaWQhPT11LnBhcmVudHNbMF0/Uj1gTSAke3AueH0gJHtwLnl9IEwgJHtwLnh9ICR7di55LV99ICR7VH0gJHtwLngtQX0gJHt2Lnl9IEwgJHt2Lnh9ICR7di55fWA6Uj1gTSAke3AueH0gJHtwLnl9IEwgJHt2LngrX30gJHtwLnl9ICR7eX0gJHt2Lnh9ICR7cC55K0F9IEwgJHt2Lnh9ICR7di55fWApLHAueD09PXYueCYmKFI9YE0gJHtwLnh9ICR7cC55fSBMICR7di54fSAke3YueX1gKSk6KHAueTx2LnkmJih1LnR5cGU9PT1hZC5NRVJHRSYmcy5pZCE9PXUucGFyZW50c1swXT9SPWBNICR7cC54fSAke3AueX0gTCAke3YueC1ffSAke3AueX0gJHtUfSAke3YueH0gJHtwLnkrQX0gTCAke3YueH0gJHt2Lnl9YDpSPWBNICR7cC54fSAke3AueX0gTCAke3AueH0gJHt2LnktX30gJHt5fSAke3AueCtBfSAke3YueX0gTCAke3YueH0gJHt2Lnl9YCkscC55PnYueSYmKHUudHlwZT09PWFkLk1FUkdFJiZzLmlkIT09dS5wYXJlbnRzWzBdP1I9YE0gJHtwLnh9ICR7cC55fSBMICR7di54LV99ICR7cC55fSAke3l9ICR7di54fSAke3AueS1BfSBMICR7di54fSAke3YueX1gOlI9YE0gJHtwLnh9ICR7cC55fSBMICR7cC54fSAke3YueStffSAke1R9ICR7cC54K0F9ICR7di55fSBMICR7di54fSAke3YueX1gKSxwLnk9PT12LnkmJihSPWBNICR7cC54fSAke3AueX0gTCAke3YueH0gJHt2Lnl9YCkpO2kuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsUikuYXR0cigiY2xhc3MiLCJhcnJvdyBhcnJvdyIrUCVYQyl9LFR0bj0oaSxzKT0+e2NvbnN0IHU9aS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNvbW1pdC1hcnJvd3MiKTtPYmplY3Qua2V5cyhzKS5mb3JFYWNoKGQ9Pntjb25zdCBwPXNbZF07cC5wYXJlbnRzJiZwLnBhcmVudHMubGVuZ3RoPjAmJnAucGFyZW50cy5mb3JFYWNoKHY9PntFdG4odSxzW3ZdLHAscyl9KX0pfSxDdG49KGkscyk9Pntjb25zdCB1PXF0KCkuZ2l0R3JhcGgsZD1pLmFwcGVuZCgiZyIpO3MuZm9yRWFjaCgocCx2KT0+e2NvbnN0IGI9diVYQyx5PUgyW3AubmFtZV0ucG9zLFQ9ZC5hcHBlbmQoImxpbmUiKTtULmF0dHIoIngxIiwwKSxULmF0dHIoInkxIix5KSxULmF0dHIoIngyIixQUiksVC5hdHRyKCJ5MiIseSksVC5hdHRyKCJjbGFzcyIsImJyYW5jaCBicmFuY2giK2IpLFIwPT09IlRCIiYmKFQuYXR0cigieTEiLDMwKSxULmF0dHIoIngxIix5KSxULmF0dHIoInkyIixQUiksVC5hdHRyKCJ4MiIseSkpLGNKLnB1c2goeSk7bGV0IF89cC5uYW1lO2NvbnN0IEE9V1VlKF8pLFA9ZC5pbnNlcnQoInJlY3QiKSxGPWQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJicmFuY2hMYWJlbCIpLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwgYnJhbmNoLWxhYmVsIitiKTtGLm5vZGUoKS5hcHBlbmRDaGlsZChBKTtsZXQgaj1BLmdldEJCb3goKTtQLmF0dHIoImNsYXNzIiwiYnJhbmNoTGFiZWxCa2cgbGFiZWwiK2IpLmF0dHIoInJ4Iiw0KS5hdHRyKCJyeSIsNCkuYXR0cigieCIsLWoud2lkdGgtNC0odS5yb3RhdGVDb21taXRMYWJlbD09PSEwPzMwOjApKS5hdHRyKCJ5Iiwtai5oZWlnaHQvMis4KS5hdHRyKCJ3aWR0aCIsai53aWR0aCsxOCkuYXR0cigiaGVpZ2h0IixqLmhlaWdodCs0KSxGLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKygtai53aWR0aC0xNC0odS5yb3RhdGVDb21taXRMYWJlbD09PSEwPzMwOjApKSsiLCAiKyh5LWouaGVpZ2h0LzItMSkrIikiKSxSMD09PSJUQiImJihQLmF0dHIoIngiLHktai53aWR0aC8yLTEwKS5hdHRyKCJ5IiwwKSxGLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyh5LWoud2lkdGgvMi01KSsiLCAwKSIpKSxSMCE9PSJUQiImJlAuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKC0xOSwgIisoeS1qLmhlaWdodC8yKSsiKSIpfSl9LFN0bj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOnR0bixkYjp3dG4scmVuZGVyZXI6e2RyYXc6ZnVuY3Rpb24oaSxzLHUsZCl7eXRuKCk7Y29uc3QgcD1xdCgpLHY9cC5naXRHcmFwaDtYZS5kZWJ1ZygiaW4gZ2l0Z3JhcGggcmVuZGVyZXIiLGkrYApgLCJpZDoiLHMsdSksTlI9ZC5kYi5nZXRDb21taXRzKCk7Y29uc3QgYj1kLmRiLmdldEJyYW5jaGVzQXNPYmpBcnJheSgpO1IwPWQuZGIuZ2V0RGlyZWN0aW9uKCk7Y29uc3QgeT1JcihgW2lkPSIke3N9Il1gKTtsZXQgVD0wO2IuZm9yRWFjaCgoXyxBKT0+e2NvbnN0IFA9V1VlKF8ubmFtZSksUj15LmFwcGVuZCgiZyIpLEY9Ui5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImJyYW5jaExhYmVsIiksaj1GLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwgYnJhbmNoLWxhYmVsIik7ai5ub2RlKCkuYXBwZW5kQ2hpbGQoUCk7bGV0IEs9UC5nZXRCQm94KCk7SDJbXy5uYW1lXT17cG9zOlQsaW5kZXg6QX0sVCs9NTArKHYucm90YXRlQ29tbWl0TGFiZWw/NDA6MCkrKFIwPT09IlRCIj9LLndpZHRoLzI6MCksai5yZW1vdmUoKSxGLnJlbW92ZSgpLFIucmVtb3ZlKCl9KSxZVWUoeSxOUiwhMSksdi5zaG93QnJhbmNoZXMmJkN0bih5LGIpLFR0bih5LE5SKSxZVWUoeSxOUiwhMCksQW8uaW5zZXJ0VGl0bGUoeSwiZ2l0VGl0bGVUZXh0Iix2LnRpdGxlVG9wTWFyZ2luLGQuZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpLGUkZSh2b2lkIDAseSx2LmRpYWdyYW1QYWRkaW5nLHYudXNlTWF4V2lkdGg/P3AudXNlTWF4V2lkdGgpfX0sc3R5bGVzOmk9PmAKICAuY29tbWl0LWlkLAogIC5jb21taXQtbXNnLAogIC5icmFuY2gtbGFiZWwgewogICAgZmlsbDogbGlnaHRncmV5OwogICAgY29sb3I6IGxpZ2h0Z3JleTsKICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7CiAgfQogICR7WzAsMSwyLDMsNCw1LDYsN10ubWFwKHM9PmAKICAgICAgICAuYnJhbmNoLWxhYmVsJHtzfSB7IGZpbGw6ICR7aVsiZ2l0QnJhbmNoTGFiZWwiK3NdfTsgfQogICAgICAgIC5jb21taXQke3N9IHsgc3Ryb2tlOiAke2lbImdpdCIrc119OyBmaWxsOiAke2lbImdpdCIrc119OyB9CiAgICAgICAgLmNvbW1pdC1oaWdobGlnaHQke3N9IHsgc3Ryb2tlOiAke2lbImdpdEludiIrc119OyBmaWxsOiAke2lbImdpdEludiIrc119OyB9CiAgICAgICAgLmxhYmVsJHtzfSAgeyBmaWxsOiAke2lbImdpdCIrc119OyB9CiAgICAgICAgLmFycm93JHtzfSB7IHN0cm9rZTogJHtpWyJnaXQiK3NdfTsgfQogICAgICAgIGApLmpvaW4oYApgKX0KCiAgLmJyYW5jaCB7CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgc3Ryb2tlLWRhc2hhcnJheTogMjsKICB9CiAgLmNvbW1pdC1sYWJlbCB7IGZvbnQtc2l6ZTogJHtpLmNvbW1pdExhYmVsRm9udFNpemV9OyBmaWxsOiAke2kuY29tbWl0TGFiZWxDb2xvcn07fQogIC5jb21taXQtbGFiZWwtYmtnIHsgZm9udC1zaXplOiAke2kuY29tbWl0TGFiZWxGb250U2l6ZX07IGZpbGw6ICR7aS5jb21taXRMYWJlbEJhY2tncm91bmR9OyBvcGFjaXR5OiAwLjU7IH0KICAudGFnLWxhYmVsIHsgZm9udC1zaXplOiAke2kudGFnTGFiZWxGb250U2l6ZX07IGZpbGw6ICR7aS50YWdMYWJlbENvbG9yfTt9CiAgLnRhZy1sYWJlbC1ia2cgeyBmaWxsOiAke2kudGFnTGFiZWxCYWNrZ3JvdW5kfTsgc3Ryb2tlOiAke2kudGFnTGFiZWxCb3JkZXJ9OyB9CiAgLnRhZy1ob2xlIHsgZmlsbDogJHtpLnRleHRDb2xvcn07IH0KCiAgLmNvbW1pdC1tZXJnZSB7CiAgICBzdHJva2U6ICR7aS5wcmltYXJ5Q29sb3J9OwogICAgZmlsbDogJHtpLnByaW1hcnlDb2xvcn07CiAgfQogIC5jb21taXQtcmV2ZXJzZSB7CiAgICBzdHJva2U6ICR7aS5wcmltYXJ5Q29sb3J9OwogICAgZmlsbDogJHtpLnByaW1hcnlDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDM7CiAgfQogIC5jb21taXQtaGlnaGxpZ2h0LW91dGVyIHsKICB9CiAgLmNvbW1pdC1oaWdobGlnaHQtaW5uZXIgewogICAgc3Ryb2tlOiAke2kucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7aS5wcmltYXJ5Q29sb3J9OwogIH0KCiAgLmFycm93IHsgc3Ryb2tlLXdpZHRoOiA4OyBzdHJva2UtbGluZWNhcDogcm91bmQ7IGZpbGw6IG5vbmV9CiAgLmdpdFRpdGxlVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZmlsbDogJHtpLnRleHRDb2xvcn07CiAgfQpgfX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgWW1lPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oVyx4ZSxVLEZlKXtmb3IoVT1VfHx7fSxGZT1XLmxlbmd0aDtGZS0tO1VbV1tGZV1dPXhlKTtyZXR1cm4gVX0scz1bNiw4LDEwLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDMwLDMyLDMzLDM1LDM3XSx1PVsxLDI1XSxkPVsxLDI2XSxwPVsxLDI3XSx2PVsxLDI4XSxiPVsxLDI5XSx5PVsxLDMwXSxUPVsxLDMxXSxfPVsxLDldLEE9WzEsMTBdLFA9WzEsMTFdLFI9WzEsMTJdLEY9WzEsMTNdLGo9WzEsMTRdLEs9WzEsMTVdLGVlPVsxLDE2XSxpZT1bMSwxOF0sb2U9WzEsMTldLHBlPVsxLDIwXSxiZT1bMSwyMV0sYWU9WzEsMjJdLG5lPVsxLDI0XSxzZT1bMSwzMl0sZGU9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGdhbnR0OjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsU1BBQ0U6OCxzdGF0ZW1lbnQ6OSxOTDoxMCx3ZWVrZGF5OjExLHdlZWtkYXlfbW9uZGF5OjEyLHdlZWtkYXlfdHVlc2RheToxMyx3ZWVrZGF5X3dlZG5lc2RheToxNCx3ZWVrZGF5X3RodXJzZGF5OjE1LHdlZWtkYXlfZnJpZGF5OjE2LHdlZWtkYXlfc2F0dXJkYXk6MTcsd2Vla2RheV9zdW5kYXk6MTgsZGF0ZUZvcm1hdDoxOSxpbmNsdXNpdmVFbmREYXRlczoyMCx0b3BBeGlzOjIxLGF4aXNGb3JtYXQ6MjIsdGlja0ludGVydmFsOjIzLGV4Y2x1ZGVzOjI0LGluY2x1ZGVzOjI1LHRvZGF5TWFya2VyOjI2LHRpdGxlOjI3LGFjY190aXRsZToyOCxhY2NfdGl0bGVfdmFsdWU6MjksYWNjX2Rlc2NyOjMwLGFjY19kZXNjcl92YWx1ZTozMSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjMyLHNlY3Rpb246MzMsY2xpY2tTdGF0ZW1lbnQ6MzQsdGFza1R4dDozNSx0YXNrRGF0YTozNixjbGljazozNyxjYWxsYmFja25hbWU6MzgsY2FsbGJhY2thcmdzOjM5LGhyZWY6NDAsY2xpY2tTdGF0ZW1lbnREZWJ1Zzo0MSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiZ2FudHQiLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJOTCIsMTI6IndlZWtkYXlfbW9uZGF5IiwxMzoid2Vla2RheV90dWVzZGF5IiwxNDoid2Vla2RheV93ZWRuZXNkYXkiLDE1OiJ3ZWVrZGF5X3RodXJzZGF5IiwxNjoid2Vla2RheV9mcmlkYXkiLDE3OiJ3ZWVrZGF5X3NhdHVyZGF5IiwxODoid2Vla2RheV9zdW5kYXkiLDE5OiJkYXRlRm9ybWF0IiwyMDoiaW5jbHVzaXZlRW5kRGF0ZXMiLDIxOiJ0b3BBeGlzIiwyMjoiYXhpc0Zvcm1hdCIsMjM6InRpY2tJbnRlcnZhbCIsMjQ6ImV4Y2x1ZGVzIiwyNToiaW5jbHVkZXMiLDI2OiJ0b2RheU1hcmtlciIsMjc6InRpdGxlIiwyODoiYWNjX3RpdGxlIiwyOToiYWNjX3RpdGxlX3ZhbHVlIiwzMDoiYWNjX2Rlc2NyIiwzMToiYWNjX2Rlc2NyX3ZhbHVlIiwzMjoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzM6InNlY3Rpb24iLDM1OiJ0YXNrVHh0IiwzNjoidGFza0RhdGEiLDM3OiJjbGljayIsMzg6ImNhbGxiYWNrbmFtZSIsMzk6ImNhbGxiYWNrYXJncyIsNDA6ImhyZWYifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDJdLFszNCwyXSxbMzQsM10sWzM0LDNdLFszNCw0XSxbMzQsM10sWzM0LDRdLFszNCwyXSxbNDEsMl0sWzQxLDNdLFs0MSwzXSxbNDEsNF0sWzQxLDNdLFs0MSw0XSxbNDEsMl1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oeGUsVSxGZSxQZSxqZSxJZSxTZSl7dmFyIENlPUllLmxlbmd0aC0xO3N3aXRjaChqZSl7Y2FzZSAxOnJldHVybiBJZVtDZS0xXTtjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzpJZVtDZS0xXS5wdXNoKEllW0NlXSksdGhpcy4kPUllW0NlLTFdO2JyZWFrO2Nhc2UgNDpjYXNlIDU6dGhpcy4kPUllW0NlXTticmVhaztjYXNlIDY6Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6UGUuc2V0V2Vla2RheSgibW9uZGF5Iik7YnJlYWs7Y2FzZSA5OlBlLnNldFdlZWtkYXkoInR1ZXNkYXkiKTticmVhaztjYXNlIDEwOlBlLnNldFdlZWtkYXkoIndlZG5lc2RheSIpO2JyZWFrO2Nhc2UgMTE6UGUuc2V0V2Vla2RheSgidGh1cnNkYXkiKTticmVhaztjYXNlIDEyOlBlLnNldFdlZWtkYXkoImZyaWRheSIpO2JyZWFrO2Nhc2UgMTM6UGUuc2V0V2Vla2RheSgic2F0dXJkYXkiKTticmVhaztjYXNlIDE0OlBlLnNldFdlZWtkYXkoInN1bmRheSIpO2JyZWFrO2Nhc2UgMTU6UGUuc2V0RGF0ZUZvcm1hdChJZVtDZV0uc3Vic3RyKDExKSksdGhpcy4kPUllW0NlXS5zdWJzdHIoMTEpO2JyZWFrO2Nhc2UgMTY6UGUuZW5hYmxlSW5jbHVzaXZlRW5kRGF0ZXMoKSx0aGlzLiQ9SWVbQ2VdLnN1YnN0cigxOCk7YnJlYWs7Y2FzZSAxNzpQZS5Ub3BBeGlzKCksdGhpcy4kPUllW0NlXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxODpQZS5zZXRBeGlzRm9ybWF0KEllW0NlXS5zdWJzdHIoMTEpKSx0aGlzLiQ9SWVbQ2VdLnN1YnN0cigxMSk7YnJlYWs7Y2FzZSAxOTpQZS5zZXRUaWNrSW50ZXJ2YWwoSWVbQ2VdLnN1YnN0cigxMykpLHRoaXMuJD1JZVtDZV0uc3Vic3RyKDEzKTticmVhaztjYXNlIDIwOlBlLnNldEV4Y2x1ZGVzKEllW0NlXS5zdWJzdHIoOSkpLHRoaXMuJD1JZVtDZV0uc3Vic3RyKDkpO2JyZWFrO2Nhc2UgMjE6UGUuc2V0SW5jbHVkZXMoSWVbQ2VdLnN1YnN0cig5KSksdGhpcy4kPUllW0NlXS5zdWJzdHIoOSk7YnJlYWs7Y2FzZSAyMjpQZS5zZXRUb2RheU1hcmtlcihJZVtDZV0uc3Vic3RyKDEyKSksdGhpcy4kPUllW0NlXS5zdWJzdHIoMTIpO2JyZWFrO2Nhc2UgMjQ6UGUuc2V0RGlhZ3JhbVRpdGxlKEllW0NlXS5zdWJzdHIoNikpLHRoaXMuJD1JZVtDZV0uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgMjU6dGhpcy4kPUllW0NlXS50cmltKCksUGUuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDI2OmNhc2UgMjc6dGhpcy4kPUllW0NlXS50cmltKCksUGUuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDI4OlBlLmFkZFNlY3Rpb24oSWVbQ2VdLnN1YnN0cig4KSksdGhpcy4kPUllW0NlXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAzMDpQZS5hZGRUYXNrKEllW0NlLTFdLEllW0NlXSksdGhpcy4kPSJ0YXNrIjticmVhaztjYXNlIDMxOnRoaXMuJD1JZVtDZS0xXSxQZS5zZXRDbGlja0V2ZW50KEllW0NlLTFdLEllW0NlXSxudWxsKTticmVhaztjYXNlIDMyOnRoaXMuJD1JZVtDZS0yXSxQZS5zZXRDbGlja0V2ZW50KEllW0NlLTJdLEllW0NlLTFdLEllW0NlXSk7YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9SWVbQ2UtMl0sUGUuc2V0Q2xpY2tFdmVudChJZVtDZS0yXSxJZVtDZS0xXSxudWxsKSxQZS5zZXRMaW5rKEllW0NlLTJdLEllW0NlXSk7YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9SWVbQ2UtM10sUGUuc2V0Q2xpY2tFdmVudChJZVtDZS0zXSxJZVtDZS0yXSxJZVtDZS0xXSksUGUuc2V0TGluayhJZVtDZS0zXSxJZVtDZV0pO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPUllW0NlLTJdLFBlLnNldENsaWNrRXZlbnQoSWVbQ2UtMl0sSWVbQ2VdLG51bGwpLFBlLnNldExpbmsoSWVbQ2UtMl0sSWVbQ2UtMV0pO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPUllW0NlLTNdLFBlLnNldENsaWNrRXZlbnQoSWVbQ2UtM10sSWVbQ2UtMV0sSWVbQ2VdKSxQZS5zZXRMaW5rKEllW0NlLTNdLEllW0NlLTJdKTticmVhaztjYXNlIDM3OnRoaXMuJD1JZVtDZS0xXSxQZS5zZXRMaW5rKEllW0NlLTFdLEllW0NlXSk7YnJlYWs7Y2FzZSAzODpjYXNlIDQ0OnRoaXMuJD1JZVtDZS0xXSsiICIrSWVbQ2VdO2JyZWFrO2Nhc2UgMzk6Y2FzZSA0MDpjYXNlIDQyOnRoaXMuJD1JZVtDZS0yXSsiICIrSWVbQ2UtMV0rIiAiK0llW0NlXTticmVhaztjYXNlIDQxOmNhc2UgNDM6dGhpcy4kPUllW0NlLTNdKyIgIitJZVtDZS0yXSsiICIrSWVbQ2UtMV0rIiAiK0llW0NlXTticmVha319LHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0saShzLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODpbMSw2XSw5OjcsMTA6WzEsOF0sMTE6MTcsMTI6dSwxMzpkLDE0OnAsMTU6diwxNjpiLDE3OnksMTg6VCwxOTpfLDIwOkEsMjE6UCwyMjpSLDIzOkYsMjQ6aiwyNTpLLDI2OmVlLDI3OmllLDI4Om9lLDMwOnBlLDMyOmJlLDMzOmFlLDM0OjIzLDM1Om5lLDM3OnNlfSxpKHMsWzIsN10sezE6WzIsMV19KSxpKHMsWzIsM10pLHs5OjMzLDExOjE3LDEyOnUsMTM6ZCwxNDpwLDE1OnYsMTY6YiwxNzp5LDE4OlQsMTk6XywyMDpBLDIxOlAsMjI6UiwyMzpGLDI0OmosMjU6SywyNjplZSwyNzppZSwyODpvZSwzMDpwZSwzMjpiZSwzMzphZSwzNDoyMywzNTpuZSwzNzpzZX0saShzLFsyLDVdKSxpKHMsWzIsNl0pLGkocyxbMiwxNV0pLGkocyxbMiwxNl0pLGkocyxbMiwxN10pLGkocyxbMiwxOF0pLGkocyxbMiwxOV0pLGkocyxbMiwyMF0pLGkocyxbMiwyMV0pLGkocyxbMiwyMl0pLGkocyxbMiwyM10pLGkocyxbMiwyNF0pLHsyOTpbMSwzNF19LHszMTpbMSwzNV19LGkocyxbMiwyN10pLGkocyxbMiwyOF0pLGkocyxbMiwyOV0pLHszNjpbMSwzNl19LGkocyxbMiw4XSksaShzLFsyLDldKSxpKHMsWzIsMTBdKSxpKHMsWzIsMTFdKSxpKHMsWzIsMTJdKSxpKHMsWzIsMTNdKSxpKHMsWzIsMTRdKSx7Mzg6WzEsMzddLDQwOlsxLDM4XX0saShzLFsyLDRdKSxpKHMsWzIsMjVdKSxpKHMsWzIsMjZdKSxpKHMsWzIsMzBdKSxpKHMsWzIsMzFdLHszOTpbMSwzOV0sNDA6WzEsNDBdfSksaShzLFsyLDM3XSx7Mzg6WzEsNDFdfSksaShzLFsyLDMyXSx7NDA6WzEsNDJdfSksaShzLFsyLDMzXSksaShzLFsyLDM1XSx7Mzk6WzEsNDNdfSksaShzLFsyLDM0XSksaShzLFsyLDM2XSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6ZnVuY3Rpb24oeGUsVSl7aWYoVS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKHhlKTtlbHNle3ZhciBGZT1uZXcgRXJyb3IoeGUpO3Rocm93IEZlLmhhc2g9VSxGZX19LHBhcnNlOmZ1bmN0aW9uKHhlKXt2YXIgVT10aGlzLEZlPVswXSxQZT1bXSxqZT1bbnVsbF0sSWU9W10sU2U9dGhpcy50YWJsZSxDZT0iIixrZT0wLEtlPTAsRnQ9MixOZT0xLGduPUllLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLF90PU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksRXQ9e3l5Ont9fTtmb3IodmFyIEd0IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksR3QpJiYoRXQueXlbR3RdPXRoaXMueXlbR3RdKTtfdC5zZXRJbnB1dCh4ZSxFdC55eSksRXQueXkubGV4ZXI9X3QsRXQueXkucGFyc2VyPXRoaXMsdHlwZW9mIF90Lnl5bGxvYz4idSImJihfdC55eWxsb2M9e30pO3ZhciBsbj1fdC55eWxsb2M7SWUucHVzaChsbik7dmFyIHh0PV90Lm9wdGlvbnMmJl90Lm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBFdC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1FdC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBQdCgpe3ZhciB6cztyZXR1cm4genM9UGUucG9wKCl8fF90LmxleCgpfHxOZSx0eXBlb2YgenMhPSJudW1iZXIiJiYoenMgaW5zdGFuY2VvZiBBcnJheSYmKFBlPXpzLHpzPVBlLnBvcCgpKSx6cz1VLnN5bWJvbHNfW3pzXXx8enMpLHpzfWZvcih2YXIgUWUsRHQsa3QsT24saHQ9e30senIseXQsamkseGk7Oyl7aWYoRHQ9RmVbRmUubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbRHRdP2t0PXRoaXMuZGVmYXVsdEFjdGlvbnNbRHRdOigoUWU9PT1udWxsfHx0eXBlb2YgUWU+InUiKSYmKFFlPVB0KCkpLGt0PVNlW0R0XSYmU2VbRHRdW1FlXSksdHlwZW9mIGt0PiJ1Inx8IWt0Lmxlbmd0aHx8IWt0WzBdKXt2YXIgTWE9IiI7eGk9W107Zm9yKHpyIGluIFNlW0R0XSl0aGlzLnRlcm1pbmFsc19benJdJiZ6cj5GdCYmeGkucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW3pyXSsiJyIpO190LnNob3dQb3NpdGlvbj9NYT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhrZSsxKStgOgpgK190LnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGAreGkuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tRZV18fFFlKSsiJyI6TWE9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoa2UrMSkrIjogVW5leHBlY3RlZCAiKyhRZT09TmU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bUWVdfHxRZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTWEse3RleHQ6X3QubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1FlXXx8UWUsbGluZTpfdC55eWxpbmVubyxsb2M6bG4sZXhwZWN0ZWQ6eGl9KX1pZihrdFswXWluc3RhbmNlb2YgQXJyYXkmJmt0Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrRHQrIiwgdG9rZW46ICIrUWUpO3N3aXRjaChrdFswXSl7Y2FzZSAxOkZlLnB1c2goUWUpLGplLnB1c2goX3QueXl0ZXh0KSxJZS5wdXNoKF90Lnl5bGxvYyksRmUucHVzaChrdFsxXSksUWU9bnVsbCxLZT1fdC55eWxlbmcsQ2U9X3QueXl0ZXh0LGtlPV90Lnl5bGluZW5vLGxuPV90Lnl5bGxvYzticmVhaztjYXNlIDI6aWYoeXQ9dGhpcy5wcm9kdWN0aW9uc19ba3RbMV1dWzFdLGh0LiQ9amVbamUubGVuZ3RoLXl0XSxodC5fJD17Zmlyc3RfbGluZTpJZVtJZS5sZW5ndGgtKHl0fHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6SWVbSWUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46SWVbSWUubGVuZ3RoLSh5dHx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpJZVtJZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHh0JiYoaHQuXyQucmFuZ2U9W0llW0llLmxlbmd0aC0oeXR8fDEpXS5yYW5nZVswXSxJZVtJZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxPbj10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoaHQsW0NlLEtlLGtlLEV0Lnl5LGt0WzFdLGplLEllXS5jb25jYXQoZ24pKSx0eXBlb2YgT248InUiKXJldHVybiBPbjt5dCYmKEZlPUZlLnNsaWNlKDAsLTEqeXQqMiksamU9amUuc2xpY2UoMCwtMSp5dCksSWU9SWUuc2xpY2UoMCwtMSp5dCkpLEZlLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba3RbMV1dWzBdKSxqZS5wdXNoKGh0LiQpLEllLnB1c2goaHQuXyQpLGppPVNlW0ZlW0ZlLmxlbmd0aC0yXV1bRmVbRmUubGVuZ3RoLTFdXSxGZS5wdXNoKGppKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sWD1mdW5jdGlvbigpe3ZhciBXPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKFUsRmUpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoVSxGZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoVSl9LHNldElucHV0OmZ1bmN0aW9uKHhlLFUpe3JldHVybiB0aGlzLnl5PVV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXhlLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB4ZT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9eGUsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXhlLHRoaXMubWF0Y2hlZCs9eGU7dmFyIFU9eGUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBVPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx4ZX0sdW5wdXQ6ZnVuY3Rpb24oeGUpe3ZhciBVPXhlLmxlbmd0aCxGZT14ZS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXhlK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1VKSx0aGlzLm9mZnNldC09VTt2YXIgUGU9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksRmUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1GZS5sZW5ndGgtMSk7dmFyIGplPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpGZT8oRmUubGVuZ3RoPT09UGUubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStQZVtQZS5sZW5ndGgtRmUubGVuZ3RoXS5sZW5ndGgtRmVbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1VfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2plWzBdLGplWzBdK3RoaXMueXlsZW5nLVVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbih4ZSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHhlKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB4ZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHhlLmxlbmd0aD4yMD8iLi4uIjoiIikreGUuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgeGU9dGhpcy5tYXRjaDtyZXR1cm4geGUubGVuZ3RoPDIwJiYoeGUrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXhlLmxlbmd0aCkpLCh4ZS5zdWJzdHIoMCwyMCkrKHhlLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgeGU9dGhpcy5wYXN0SW5wdXQoKSxVPW5ldyBBcnJheSh4ZS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB4ZSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArVSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oeGUsVSl7dmFyIEZlLFBlLGplO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihqZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihqZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxQZT14ZVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksUGUmJih0aGlzLnl5bGluZW5vKz1QZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpQZT9QZVtQZS5sZW5ndGgtMV0ubGVuZ3RoLVBlW1BlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3hlWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXhlWzBdLHRoaXMubWF0Y2grPXhlWzBdLHRoaXMubWF0Y2hlcz14ZSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh4ZVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9eGVbMF0sRmU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsVSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxGZSlyZXR1cm4gRmU7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIEllIGluIGplKXRoaXNbSWVdPWplW0llXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciB4ZSxVLEZlLFBlO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGplPXRoaXMuX2N1cnJlbnRSdWxlcygpLEllPTA7SWU8amUubGVuZ3RoO0llKyspaWYoRmU9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tqZVtJZV1dKSxGZSYmKCFVfHxGZVswXS5sZW5ndGg+VVswXS5sZW5ndGgpKXtpZihVPUZlLFBlPUllLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKHhlPXRoaXMudGVzdF9tYXRjaChGZSxqZVtJZV0pLHhlIT09ITEpcmV0dXJuIHhlO2lmKHRoaXMuX2JhY2t0cmFjayl7VT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBVPyh4ZT10aGlzLnRlc3RfbWF0Y2goVSxqZVtQZV0pLHhlIT09ITE/eGU6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBVPXRoaXMubmV4dCgpO3JldHVybiBVfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihVKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goVSl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIFU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gVT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKFUpe3JldHVybiBVPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoVXx8MCksVT49MD90aGlzLmNvbmRpdGlvblN0YWNrW1VdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKFUpe3RoaXMuYmVnaW4oVSl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oVSxGZSxQZSxqZSl7c3dpdGNoKFBlKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksIm9wZW5fZGlyZWN0aXZlIjtjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDI4O2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgMzpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMzA7Y2FzZSA0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSA1OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNzpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA4OmJyZWFrO2Nhc2UgOTpicmVhaztjYXNlIDEwOmJyZWFrO2Nhc2UgMTE6cmV0dXJuIDEwO2Nhc2UgMTI6YnJlYWs7Y2FzZSAxMzpicmVhaztjYXNlIDE0OnRoaXMuYmVnaW4oImhyZWYiKTticmVhaztjYXNlIDE1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE2OnJldHVybiA0MDtjYXNlIDE3OnRoaXMuYmVnaW4oImNhbGxiYWNrbmFtZSIpO2JyZWFrO2Nhc2UgMTg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTk6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrYXJncyIpO2JyZWFrO2Nhc2UgMjA6cmV0dXJuIDM4O2Nhc2UgMjE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIDM5O2Nhc2UgMjM6dGhpcy5iZWdpbigiY2xpY2siKTticmVhaztjYXNlIDI0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI1OnJldHVybiAzNztjYXNlIDI2OnJldHVybiA0O2Nhc2UgMjc6cmV0dXJuIDE5O2Nhc2UgMjg6cmV0dXJuIDIwO2Nhc2UgMjk6cmV0dXJuIDIxO2Nhc2UgMzA6cmV0dXJuIDIyO2Nhc2UgMzE6cmV0dXJuIDIzO2Nhc2UgMzI6cmV0dXJuIDI1O2Nhc2UgMzM6cmV0dXJuIDI0O2Nhc2UgMzQ6cmV0dXJuIDI2O2Nhc2UgMzU6cmV0dXJuIDEyO2Nhc2UgMzY6cmV0dXJuIDEzO2Nhc2UgMzc6cmV0dXJuIDE0O2Nhc2UgMzg6cmV0dXJuIDE1O2Nhc2UgMzk6cmV0dXJuIDE2O2Nhc2UgNDA6cmV0dXJuIDE3O2Nhc2UgNDE6cmV0dXJuIDE4O2Nhc2UgNDI6cmV0dXJuImRhdGUiO2Nhc2UgNDM6cmV0dXJuIDI3O2Nhc2UgNDQ6cmV0dXJuImFjY0Rlc2NyaXB0aW9uIjtjYXNlIDQ1OnJldHVybiAzMztjYXNlIDQ2OnJldHVybiAzNTtjYXNlIDQ3OnJldHVybiAzNjtjYXNlIDQ4OnJldHVybiI6IjtjYXNlIDQ5OnJldHVybiA2O2Nhc2UgNTA6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86JSUoPyFceykqW15cbl0qKS9pLC9eKD86W15cfV0lJSpbXlxuXSopL2ksL14oPzolJSpbXlxuXSpbXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86JVteXG5dKikvaSwvXig/OmhyZWZbXHNdK1siXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86Y2FsbFtcc10rKS9pLC9eKD86XChbXHNdKlwpKS9pLC9eKD86XCgpL2ksL14oPzpbXihdKikvaSwvXig/OlwpKS9pLC9eKD86W14pXSopL2ksL14oPzpjbGlja1tcc10rKS9pLC9eKD86W1xzXG5dKS9pLC9eKD86W15cc1xuXSopL2ksL14oPzpnYW50dFxiKS9pLC9eKD86ZGF0ZUZvcm1hdFxzW14jXG47XSspL2ksL14oPzppbmNsdXNpdmVFbmREYXRlc1xiKS9pLC9eKD86dG9wQXhpc1xiKS9pLC9eKD86YXhpc0Zvcm1hdFxzW14jXG47XSspL2ksL14oPzp0aWNrSW50ZXJ2YWxcc1teI1xuO10rKS9pLC9eKD86aW5jbHVkZXNcc1teI1xuO10rKS9pLC9eKD86ZXhjbHVkZXNcc1teI1xuO10rKS9pLC9eKD86dG9kYXlNYXJrZXJcc1teXG47XSspL2ksL14oPzp3ZWVrZGF5XHMrbW9uZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrdHVlc2RheVxiKS9pLC9eKD86d2Vla2RheVxzK3dlZG5lc2RheVxiKS9pLC9eKD86d2Vla2RheVxzK3RodXJzZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrZnJpZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrc2F0dXJkYXlcYikvaSwvXig/OndlZWtkYXlccytzdW5kYXlcYikvaSwvXig/OlxkXGRcZFxkLVxkXGQtXGRcZFxiKS9pLC9eKD86dGl0bGVcc1teXG5dKykvaSwvXig/OmFjY0Rlc2NyaXB0aW9uXHNbXiNcbjtdKykvaSwvXig/OnNlY3Rpb25cc1teXG5dKykvaSwvXig/OlteOlxuXSspL2ksL14oPzo6W14jXG47XSspL2ksL14oPzo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls2LDddLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbNF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsyXSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrYXJnczp7cnVsZXM6WzIxLDIyXSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrbmFtZTp7cnVsZXM6WzE4LDE5LDIwXSxpbmNsdXNpdmU6ITF9LGhyZWY6e3J1bGVzOlsxNSwxNl0saW5jbHVzaXZlOiExfSxjbGljazp7cnVsZXM6WzI0LDI1XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMyw1LDgsOSwxMCwxMSwxMiwxMywxNCwxNywyMywyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MF0saW5jbHVzaXZlOiEwfX19O3JldHVybiBXfSgpO2RlLmxleGVyPVg7ZnVuY3Rpb24gZ2UoKXt0aGlzLnl5PXt9fXJldHVybiBnZS5wcm90b3R5cGU9ZGUsZGUuUGFyc2VyPWdlLG5ldyBnZX0oKTtZbWUucGFyc2VyPVltZTtjb25zdCBfdG49WW1lO3ZhciBYVWU9e2V4cG9ydHM6e319OyhmdW5jdGlvbihpLHMpeyhmdW5jdGlvbih1LGQpe2kuZXhwb3J0cz1kKCl9KShBZyxmdW5jdGlvbigpe3ZhciB1PSJkYXkiO3JldHVybiBmdW5jdGlvbihkLHAsdil7dmFyIGI9ZnVuY3Rpb24oXyl7cmV0dXJuIF8uYWRkKDQtXy5pc29XZWVrZGF5KCksdSl9LHk9cC5wcm90b3R5cGU7eS5pc29XZWVrWWVhcj1mdW5jdGlvbigpe3JldHVybiBiKHRoaXMpLnllYXIoKX0seS5pc29XZWVrPWZ1bmN0aW9uKF8pe2lmKCF0aGlzLiR1dGlscygpLnUoXykpcmV0dXJuIHRoaXMuYWRkKDcqKF8tdGhpcy5pc29XZWVrKCkpLHUpO3ZhciBBLFAsUixGLGo9Yih0aGlzKSxLPShBPXRoaXMuaXNvV2Vla1llYXIoKSxQPXRoaXMuJHUsUj0oUD92LnV0Yzp2KSgpLnllYXIoQSkuc3RhcnRPZigieWVhciIpLEY9NC1SLmlzb1dlZWtkYXkoKSxSLmlzb1dlZWtkYXkoKT40JiYoRis9NyksUi5hZGQoRix1KSk7cmV0dXJuIGouZGlmZihLLCJ3ZWVrIikrMX0seS5pc29XZWVrZGF5PWZ1bmN0aW9uKF8pe3JldHVybiB0aGlzLiR1dGlscygpLnUoXyk/dGhpcy5kYXkoKXx8Nzp0aGlzLmRheSh0aGlzLmRheSgpJTc/XzpfLTcpfTt2YXIgVD15LnN0YXJ0T2Y7eS5zdGFydE9mPWZ1bmN0aW9uKF8sQSl7dmFyIFA9dGhpcy4kdXRpbHMoKSxSPSEhUC51KEEpfHxBO3JldHVybiBQLnAoXyk9PT0iaXNvd2VlayI/Uj90aGlzLmRhdGUodGhpcy5kYXRlKCktKHRoaXMuaXNvV2Vla2RheSgpLTEpKS5zdGFydE9mKCJkYXkiKTp0aGlzLmRhdGUodGhpcy5kYXRlKCktMS0odGhpcy5pc29XZWVrZGF5KCktMSkrNykuZW5kT2YoImRheSIpOlQuYmluZCh0aGlzKShfLEEpfX19KX0pKFhVZSk7dmFyIEF0bj1YVWUuZXhwb3J0cztjb25zdCBMdG49aEMoQXRuKTt2YXIgUVVlPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oaSxzKXsoZnVuY3Rpb24odSxkKXtpLmV4cG9ydHM9ZCgpfSkoQWcsZnVuY3Rpb24oKXt2YXIgdT17TFRTOiJoOm1tOnNzIEEiLExUOiJoOm1tIEEiLEw6Ik1NL0REL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSJ9LGQ9LyhcW1teW10qXF0pfChbLV86Ly4sKClcc10rKXwoQXxhfFlZWVl8WVk/fE1NP00/TT98RG98REQ/fGhoP3xISD98bW0/fHNzP3xTezEsM318enxaWj8pL2cscD0vXGRcZC8sdj0vXGRcZD8vLGI9L1xkKlteLV86LywoKVxzXGRdKy8seT17fSxUPWZ1bmN0aW9uKEspe3JldHVybihLPStLKSsoSz42OD8xOTAwOjJlMyl9LF89ZnVuY3Rpb24oSyl7cmV0dXJuIGZ1bmN0aW9uKGVlKXt0aGlzW0tdPStlZX19LEE9Wy9bKy1dXGRcZDo/KFxkXGQpP3xaLyxmdW5jdGlvbihLKXsodGhpcy56b25lfHwodGhpcy56b25lPXt9KSkub2Zmc2V0PWZ1bmN0aW9uKGVlKXtpZighZWV8fGVlPT09IloiKXJldHVybiAwO3ZhciBpZT1lZS5tYXRjaCgvKFsrLV18XGRcZCkvZyksb2U9NjAqaWVbMV0rKCtpZVsyXXx8MCk7cmV0dXJuIG9lPT09MD8wOmllWzBdPT09IisiPy1vZTpvZX0oSyl9XSxQPWZ1bmN0aW9uKEspe3ZhciBlZT15W0tdO3JldHVybiBlZSYmKGVlLmluZGV4T2Y/ZWU6ZWUucy5jb25jYXQoZWUuZikpfSxSPWZ1bmN0aW9uKEssZWUpe3ZhciBpZSxvZT15Lm1lcmlkaWVtO2lmKG9lKXtmb3IodmFyIHBlPTE7cGU8PTI0O3BlKz0xKWlmKEsuaW5kZXhPZihvZShwZSwwLGVlKSk+LTEpe2llPXBlPjEyO2JyZWFrfX1lbHNlIGllPUs9PT0oZWU/InBtIjoiUE0iKTtyZXR1cm4gaWV9LEY9e0E6W2IsZnVuY3Rpb24oSyl7dGhpcy5hZnRlcm5vb249UihLLCExKX1dLGE6W2IsZnVuY3Rpb24oSyl7dGhpcy5hZnRlcm5vb249UihLLCEwKX1dLFM6Wy9cZC8sZnVuY3Rpb24oSyl7dGhpcy5taWxsaXNlY29uZHM9MTAwKitLfV0sU1M6W3AsZnVuY3Rpb24oSyl7dGhpcy5taWxsaXNlY29uZHM9MTAqK0t9XSxTU1M6Wy9cZHszfS8sZnVuY3Rpb24oSyl7dGhpcy5taWxsaXNlY29uZHM9K0t9XSxzOlt2LF8oInNlY29uZHMiKV0sc3M6W3YsXygic2Vjb25kcyIpXSxtOlt2LF8oIm1pbnV0ZXMiKV0sbW06W3YsXygibWludXRlcyIpXSxIOlt2LF8oImhvdXJzIildLGg6W3YsXygiaG91cnMiKV0sSEg6W3YsXygiaG91cnMiKV0saGg6W3YsXygiaG91cnMiKV0sRDpbdixfKCJkYXkiKV0sREQ6W3AsXygiZGF5IildLERvOltiLGZ1bmN0aW9uKEspe3ZhciBlZT15Lm9yZGluYWwsaWU9Sy5tYXRjaCgvXGQrLyk7aWYodGhpcy5kYXk9aWVbMF0sZWUpZm9yKHZhciBvZT0xO29lPD0zMTtvZSs9MSllZShvZSkucmVwbGFjZSgvXFt8XF0vZywiIik9PT1LJiYodGhpcy5kYXk9b2UpfV0sTTpbdixfKCJtb250aCIpXSxNTTpbcCxfKCJtb250aCIpXSxNTU06W2IsZnVuY3Rpb24oSyl7dmFyIGVlPVAoIm1vbnRocyIpLGllPShQKCJtb250aHNTaG9ydCIpfHxlZS5tYXAoZnVuY3Rpb24ob2Upe3JldHVybiBvZS5zbGljZSgwLDMpfSkpLmluZGV4T2YoSykrMTtpZihpZTwxKXRocm93IG5ldyBFcnJvcjt0aGlzLm1vbnRoPWllJTEyfHxpZX1dLE1NTU06W2IsZnVuY3Rpb24oSyl7dmFyIGVlPVAoIm1vbnRocyIpLmluZGV4T2YoSykrMTtpZihlZTwxKXRocm93IG5ldyBFcnJvcjt0aGlzLm1vbnRoPWVlJTEyfHxlZX1dLFk6Wy9bKy1dP1xkKy8sXygieWVhciIpXSxZWTpbcCxmdW5jdGlvbihLKXt0aGlzLnllYXI9VChLKX1dLFlZWVk6Wy9cZHs0fS8sXygieWVhciIpXSxaOkEsWlo6QX07ZnVuY3Rpb24gaihLKXt2YXIgZWUsaWU7ZWU9SyxpZT15JiZ5LmZvcm1hdHM7Zm9yKHZhciBvZT0oSz1lZS5yZXBsYWNlKC8oXFtbXlxdXStdKXwoTFRTP3xsezEsNH18THsxLDR9KS9nLGZ1bmN0aW9uKFgsZ2UsVyl7dmFyIHhlPVcmJlcudG9VcHBlckNhc2UoKTtyZXR1cm4gZ2V8fGllW1ddfHx1W1ddfHxpZVt4ZV0ucmVwbGFjZSgvKFxbW15cXV0rXSl8KE1NTU18TU18RER8ZGRkZCkvZyxmdW5jdGlvbihVLEZlLFBlKXtyZXR1cm4gRmV8fFBlLnNsaWNlKDEpfSl9KSkubWF0Y2goZCkscGU9b2UubGVuZ3RoLGJlPTA7YmU8cGU7YmUrPTEpe3ZhciBhZT1vZVtiZV0sbmU9RlthZV0sc2U9bmUmJm5lWzBdLGRlPW5lJiZuZVsxXTtvZVtiZV09ZGU/e3JlZ2V4OnNlLHBhcnNlcjpkZX06YWUucmVwbGFjZSgvXlxbfFxdJC9nLCIiKX1yZXR1cm4gZnVuY3Rpb24oWCl7Zm9yKHZhciBnZT17fSxXPTAseGU9MDtXPHBlO1crPTEpe3ZhciBVPW9lW1ddO2lmKHR5cGVvZiBVPT0ic3RyaW5nIil4ZSs9VS5sZW5ndGg7ZWxzZXt2YXIgRmU9VS5yZWdleCxQZT1VLnBhcnNlcixqZT1YLnNsaWNlKHhlKSxJZT1GZS5leGVjKGplKVswXTtQZS5jYWxsKGdlLEllKSxYPVgucmVwbGFjZShJZSwiIil9fXJldHVybiBmdW5jdGlvbihTZSl7dmFyIENlPVNlLmFmdGVybm9vbjtpZihDZSE9PXZvaWQgMCl7dmFyIGtlPVNlLmhvdXJzO0NlP2tlPDEyJiYoU2UuaG91cnMrPTEyKTprZT09PTEyJiYoU2UuaG91cnM9MCksZGVsZXRlIFNlLmFmdGVybm9vbn19KGdlKSxnZX19cmV0dXJuIGZ1bmN0aW9uKEssZWUsaWUpe2llLnAuY3VzdG9tUGFyc2VGb3JtYXQ9ITAsSyYmSy5wYXJzZVR3b0RpZ2l0WWVhciYmKFQ9Sy5wYXJzZVR3b0RpZ2l0WWVhcik7dmFyIG9lPWVlLnByb3RvdHlwZSxwZT1vZS5wYXJzZTtvZS5wYXJzZT1mdW5jdGlvbihiZSl7dmFyIGFlPWJlLmRhdGUsbmU9YmUudXRjLHNlPWJlLmFyZ3M7dGhpcy4kdT1uZTt2YXIgZGU9c2VbMV07aWYodHlwZW9mIGRlPT0ic3RyaW5nIil7dmFyIFg9c2VbMl09PT0hMCxnZT1zZVszXT09PSEwLFc9WHx8Z2UseGU9c2VbMl07Z2UmJih4ZT1zZVsyXSkseT10aGlzLiRsb2NhbGUoKSwhWCYmeGUmJih5PWllLkxzW3hlXSksdGhpcy4kZD1mdW5jdGlvbihqZSxJZSxTZSl7dHJ5e2lmKFsieCIsIlgiXS5pbmRleE9mKEllKT4tMSlyZXR1cm4gbmV3IERhdGUoKEllPT09IlgiPzFlMzoxKSpqZSk7dmFyIENlPWooSWUpKGplKSxrZT1DZS55ZWFyLEtlPUNlLm1vbnRoLEZ0PUNlLmRheSxOZT1DZS5ob3Vycyxnbj1DZS5taW51dGVzLF90PUNlLnNlY29uZHMsRXQ9Q2UubWlsbGlzZWNvbmRzLEd0PUNlLnpvbmUsbG49bmV3IERhdGUseHQ9RnR8fChrZXx8S2U/MTpsbi5nZXREYXRlKCkpLFB0PWtlfHxsbi5nZXRGdWxsWWVhcigpLFFlPTA7a2UmJiFLZXx8KFFlPUtlPjA/S2UtMTpsbi5nZXRNb250aCgpKTt2YXIgRHQ9TmV8fDAsa3Q9Z258fDAsT249X3R8fDAsaHQ9RXR8fDA7cmV0dXJuIEd0P25ldyBEYXRlKERhdGUuVVRDKFB0LFFlLHh0LER0LGt0LE9uLGh0KzYwKkd0Lm9mZnNldCoxZTMpKTpTZT9uZXcgRGF0ZShEYXRlLlVUQyhQdCxRZSx4dCxEdCxrdCxPbixodCkpOm5ldyBEYXRlKFB0LFFlLHh0LER0LGt0LE9uLGh0KX1jYXRjaHtyZXR1cm4gbmV3IERhdGUoIiIpfX0oYWUsZGUsbmUpLHRoaXMuaW5pdCgpLHhlJiZ4ZSE9PSEwJiYodGhpcy4kTD10aGlzLmxvY2FsZSh4ZSkuJEwpLFcmJmFlIT10aGlzLmZvcm1hdChkZSkmJih0aGlzLiRkPW5ldyBEYXRlKCIiKSkseT17fX1lbHNlIGlmKGRlIGluc3RhbmNlb2YgQXJyYXkpZm9yKHZhciBVPWRlLmxlbmd0aCxGZT0xO0ZlPD1VO0ZlKz0xKXtzZVsxXT1kZVtGZS0xXTt2YXIgUGU9aWUuYXBwbHkodGhpcyxzZSk7aWYoUGUuaXNWYWxpZCgpKXt0aGlzLiRkPVBlLiRkLHRoaXMuJEw9UGUuJEwsdGhpcy5pbml0KCk7YnJlYWt9RmU9PT1VJiYodGhpcy4kZD1uZXcgRGF0ZSgiIikpfWVsc2UgcGUuY2FsbCh0aGlzLGJlKX19fSl9KShRVWUpO3ZhciBNdG49UVVlLmV4cG9ydHM7Y29uc3QgRHRuPWhDKE10bik7dmFyIEpVZT17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGkscyl7KGZ1bmN0aW9uKHUsZCl7aS5leHBvcnRzPWQoKX0pKEFnLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHUsZCl7dmFyIHA9ZC5wcm90b3R5cGUsdj1wLmZvcm1hdDtwLmZvcm1hdD1mdW5jdGlvbihiKXt2YXIgeT10aGlzLFQ9dGhpcy4kbG9jYWxlKCk7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiB2LmJpbmQodGhpcykoYik7dmFyIF89dGhpcy4kdXRpbHMoKSxBPShifHwiWVlZWS1NTS1ERFRISDptbTpzc1oiKS5yZXBsYWNlKC9cWyhbXlxdXSspXXxRfHdvfHd3fHd8V1d8V3x6enp8enxnZ2dnfEdHR0d8RG98WHx4fGt7MSwyfXxTL2csZnVuY3Rpb24oUCl7c3dpdGNoKFApe2Nhc2UiUSI6cmV0dXJuIE1hdGguY2VpbCgoeS4kTSsxKS8zKTtjYXNlIkRvIjpyZXR1cm4gVC5vcmRpbmFsKHkuJEQpO2Nhc2UiZ2dnZyI6cmV0dXJuIHkud2Vla1llYXIoKTtjYXNlIkdHR0ciOnJldHVybiB5Lmlzb1dlZWtZZWFyKCk7Y2FzZSJ3byI6cmV0dXJuIFQub3JkaW5hbCh5LndlZWsoKSwiVyIpO2Nhc2UidyI6Y2FzZSJ3dyI6cmV0dXJuIF8ucyh5LndlZWsoKSxQPT09InciPzE6MiwiMCIpO2Nhc2UiVyI6Y2FzZSJXVyI6cmV0dXJuIF8ucyh5Lmlzb1dlZWsoKSxQPT09IlciPzE6MiwiMCIpO2Nhc2UiayI6Y2FzZSJrayI6cmV0dXJuIF8ucyhTdHJpbmcoeS4kSD09PTA/MjQ6eS4kSCksUD09PSJrIj8xOjIsIjAiKTtjYXNlIlgiOnJldHVybiBNYXRoLmZsb29yKHkuJGQuZ2V0VGltZSgpLzFlMyk7Y2FzZSJ4IjpyZXR1cm4geS4kZC5nZXRUaW1lKCk7Y2FzZSJ6IjpyZXR1cm4iWyIreS5vZmZzZXROYW1lKCkrIl0iO2Nhc2Uienp6IjpyZXR1cm4iWyIreS5vZmZzZXROYW1lKCJsb25nIikrIl0iO2RlZmF1bHQ6cmV0dXJuIFB9fSk7cmV0dXJuIHYuYmluZCh0aGlzKShBKX19fSl9KShKVWUpO3ZhciBJdG49SlVlLmV4cG9ydHM7Y29uc3QgT3RuPWhDKEl0bik7TGcuZXh0ZW5kKEx0biksTGcuZXh0ZW5kKER0biksTGcuZXh0ZW5kKE90bik7bGV0IGk1PSIiLFhtZT0iIixRbWUsSm1lPSIiLEZSPVtdLFJSPVtdLFptZT17fSxldmU9W10sdUo9W10sR0Q9IiIsdHZlPSIiO2NvbnN0IFpVZT1bImFjdGl2ZSIsImRvbmUiLCJjcml0IiwibWlsZXN0b25lIl07bGV0IG52ZT1bXSxqUj0hMSxydmU9ITEsaXZlPSJzdW5kYXkiLHN2ZT0wO2NvbnN0IE50bj1mdW5jdGlvbigpe2V2ZT1bXSx1Sj1bXSxHRD0iIixudmU9W10sbEo9MCxvdmU9dm9pZCAwLGhKPXZvaWQgMCxtMT1bXSxpNT0iIixYbWU9IiIsdHZlPSIiLFFtZT12b2lkIDAsSm1lPSIiLEZSPVtdLFJSPVtdLGpSPSExLHJ2ZT0hMSxzdmU9MCxabWU9e30sUGcoKSxpdmU9InN1bmRheSJ9LFB0bj1mdW5jdGlvbihpKXtYbWU9aX0sQnRuPWZ1bmN0aW9uKCl7cmV0dXJuIFhtZX0sRnRuPWZ1bmN0aW9uKGkpe1FtZT1pfSxSdG49ZnVuY3Rpb24oKXtyZXR1cm4gUW1lfSxqdG49ZnVuY3Rpb24oaSl7Sm1lPWl9LCR0bj1mdW5jdGlvbigpe3JldHVybiBKbWV9LHp0bj1mdW5jdGlvbihpKXtpNT1pfSxxdG49ZnVuY3Rpb24oKXtqUj0hMH0sSHRuPWZ1bmN0aW9uKCl7cmV0dXJuIGpSfSxWdG49ZnVuY3Rpb24oKXtydmU9ITB9LFV0bj1mdW5jdGlvbigpe3JldHVybiBydmV9LEd0bj1mdW5jdGlvbihpKXt0dmU9aX0sS3RuPWZ1bmN0aW9uKCl7cmV0dXJuIHR2ZX0sV3RuPWZ1bmN0aW9uKCl7cmV0dXJuIGk1fSxZdG49ZnVuY3Rpb24oaSl7RlI9aS50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0sWHRuPWZ1bmN0aW9uKCl7cmV0dXJuIEZSfSxRdG49ZnVuY3Rpb24oaSl7UlI9aS50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0sSnRuPWZ1bmN0aW9uKCl7cmV0dXJuIFJSfSxadG49ZnVuY3Rpb24oKXtyZXR1cm4gWm1lfSxlbm49ZnVuY3Rpb24oaSl7R0Q9aSxldmUucHVzaChpKX0sdG5uPWZ1bmN0aW9uKCl7cmV0dXJuIGV2ZX0sbm5uPWZ1bmN0aW9uKCl7bGV0IGk9c0dlKCk7Y29uc3Qgcz0xMDtsZXQgdT0wO2Zvcig7IWkmJnU8czspaT1zR2UoKSx1Kys7cmV0dXJuIHVKPW0xLHVKfSxlR2U9ZnVuY3Rpb24oaSxzLHUsZCl7cmV0dXJuIGQuaW5jbHVkZXMoaS5mb3JtYXQocy50cmltKCkpKT8hMTppLmlzb1dlZWtkYXkoKT49NiYmdS5pbmNsdWRlcygid2Vla2VuZHMiKXx8dS5pbmNsdWRlcyhpLmZvcm1hdCgiZGRkZCIpLnRvTG93ZXJDYXNlKCkpPyEwOnUuaW5jbHVkZXMoaS5mb3JtYXQocy50cmltKCkpKX0scm5uPWZ1bmN0aW9uKGkpe2l2ZT1pfSxpbm49ZnVuY3Rpb24oKXtyZXR1cm4gaXZlfSx0R2U9ZnVuY3Rpb24oaSxzLHUsZCl7aWYoIXUubGVuZ3RofHxpLm1hbnVhbEVuZFRpbWUpcmV0dXJuO2xldCBwO2kuc3RhcnRUaW1lIGluc3RhbmNlb2YgRGF0ZT9wPUxnKGkuc3RhcnRUaW1lKTpwPUxnKGkuc3RhcnRUaW1lLHMsITApLHA9cC5hZGQoMSwiZCIpO2xldCB2O2kuZW5kVGltZSBpbnN0YW5jZW9mIERhdGU/dj1MZyhpLmVuZFRpbWUpOnY9TGcoaS5lbmRUaW1lLHMsITApO2NvbnN0W2IseV09c25uKHAsdixzLHUsZCk7aS5lbmRUaW1lPWIudG9EYXRlKCksaS5yZW5kZXJFbmRUaW1lPXl9LHNubj1mdW5jdGlvbihpLHMsdSxkLHApe2xldCB2PSExLGI9bnVsbDtmb3IoO2k8PXM7KXZ8fChiPXMudG9EYXRlKCkpLHY9ZUdlKGksdSxkLHApLHYmJihzPXMuYWRkKDEsImQiKSksaT1pLmFkZCgxLCJkIik7cmV0dXJuW3MsYl19LGF2ZT1mdW5jdGlvbihpLHMsdSl7dT11LnRyaW0oKTtjb25zdCBwPS9eYWZ0ZXJccysoPzxpZHM+W1xkXHctIF0rKS8uZXhlYyh1KTtpZihwIT09bnVsbCl7bGV0IGI9bnVsbDtmb3IoY29uc3QgVCBvZiBwLmdyb3Vwcy5pZHMuc3BsaXQoIiAiKSl7bGV0IF89UUMoVCk7XyE9PXZvaWQgMCYmKCFifHxfLmVuZFRpbWU+Yi5lbmRUaW1lKSYmKGI9Xyl9aWYoYilyZXR1cm4gYi5lbmRUaW1lO2NvbnN0IHk9bmV3IERhdGU7cmV0dXJuIHkuc2V0SG91cnMoMCwwLDAsMCkseX1sZXQgdj1MZyh1LHMudHJpbSgpLCEwKTtpZih2LmlzVmFsaWQoKSlyZXR1cm4gdi50b0RhdGUoKTt7WGUuZGVidWcoIkludmFsaWQgZGF0ZToiK3UpLFhlLmRlYnVnKCJXaXRoIGRhdGUgZm9ybWF0OiIrcy50cmltKCkpO2NvbnN0IGI9bmV3IERhdGUodSk7aWYoYj09PXZvaWQgMHx8aXNOYU4oYi5nZXRUaW1lKCkpfHxiLmdldEZ1bGxZZWFyKCk8LTFlNHx8Yi5nZXRGdWxsWWVhcigpPjFlNCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGF0ZToiK3UpO3JldHVybiBifX0sbkdlPWZ1bmN0aW9uKGkpe2NvbnN0IHM9L14oXGQrKD86XC5cZCspPykoW01kaG1zd3ldfG1zKSQvLmV4ZWMoaS50cmltKCkpO3JldHVybiBzIT09bnVsbD9bTnVtYmVyLnBhcnNlRmxvYXQoc1sxXSksc1syXV06W05hTiwibXMiXX0sckdlPWZ1bmN0aW9uKGkscyx1LGQ9ITEpe3U9dS50cmltKCk7Y29uc3Qgdj0vXnVudGlsXHMrKD88aWRzPltcZFx3LSBdKykvLmV4ZWModSk7aWYodiE9PW51bGwpe2xldCBBPW51bGw7Zm9yKGNvbnN0IFIgb2Ygdi5ncm91cHMuaWRzLnNwbGl0KCIgIikpe2xldCBGPVFDKFIpO0YhPT12b2lkIDAmJighQXx8Ri5zdGFydFRpbWU8QS5zdGFydFRpbWUpJiYoQT1GKX1pZihBKXJldHVybiBBLnN0YXJ0VGltZTtjb25zdCBQPW5ldyBEYXRlO3JldHVybiBQLnNldEhvdXJzKDAsMCwwLDApLFB9bGV0IGI9TGcodSxzLnRyaW0oKSwhMCk7aWYoYi5pc1ZhbGlkKCkpcmV0dXJuIGQmJihiPWIuYWRkKDEsImQiKSksYi50b0RhdGUoKTtsZXQgeT1MZyhpKTtjb25zdFtULF9dPW5HZSh1KTtpZighTnVtYmVyLmlzTmFOKFQpKXtjb25zdCBBPXkuYWRkKFQsXyk7QS5pc1ZhbGlkKCkmJih5PUEpfXJldHVybiB5LnRvRGF0ZSgpfTtsZXQgbEo9MDtjb25zdCBLRD1mdW5jdGlvbihpKXtyZXR1cm4gaT09PXZvaWQgMD8obEo9bEorMSwidGFzayIrbEopOml9LGFubj1mdW5jdGlvbihpLHMpe2xldCB1O3Muc3Vic3RyKDAsMSk9PT0iOiI/dT1zLnN1YnN0cigxLHMubGVuZ3RoKTp1PXM7Y29uc3QgZD11LnNwbGl0KCIsIikscD17fTtjR2UoZCxwLFpVZSk7Zm9yKGxldCBiPTA7YjxkLmxlbmd0aDtiKyspZFtiXT1kW2JdLnRyaW0oKTtsZXQgdj0iIjtzd2l0Y2goZC5sZW5ndGgpe2Nhc2UgMTpwLmlkPUtEKCkscC5zdGFydFRpbWU9aS5lbmRUaW1lLHY9ZFswXTticmVhaztjYXNlIDI6cC5pZD1LRCgpLHAuc3RhcnRUaW1lPWF2ZSh2b2lkIDAsaTUsZFswXSksdj1kWzFdO2JyZWFrO2Nhc2UgMzpwLmlkPUtEKGRbMF0pLHAuc3RhcnRUaW1lPWF2ZSh2b2lkIDAsaTUsZFsxXSksdj1kWzJdO2JyZWFrfXJldHVybiB2JiYocC5lbmRUaW1lPXJHZShwLnN0YXJ0VGltZSxpNSx2LGpSKSxwLm1hbnVhbEVuZFRpbWU9TGcodiwiWVlZWS1NTS1ERCIsITApLmlzVmFsaWQoKSx0R2UocCxpNSxSUixGUikpLHB9LG9ubj1mdW5jdGlvbihpLHMpe2xldCB1O3Muc3Vic3RyKDAsMSk9PT0iOiI/dT1zLnN1YnN0cigxLHMubGVuZ3RoKTp1PXM7Y29uc3QgZD11LnNwbGl0KCIsIikscD17fTtjR2UoZCxwLFpVZSk7Zm9yKGxldCB2PTA7djxkLmxlbmd0aDt2KyspZFt2XT1kW3ZdLnRyaW0oKTtzd2l0Y2goZC5sZW5ndGgpe2Nhc2UgMTpwLmlkPUtEKCkscC5zdGFydFRpbWU9e3R5cGU6InByZXZUYXNrRW5kIixpZDppfSxwLmVuZFRpbWU9e2RhdGE6ZFswXX07YnJlYWs7Y2FzZSAyOnAuaWQ9S0QoKSxwLnN0YXJ0VGltZT17dHlwZToiZ2V0U3RhcnREYXRlIixzdGFydERhdGE6ZFswXX0scC5lbmRUaW1lPXtkYXRhOmRbMV19O2JyZWFrO2Nhc2UgMzpwLmlkPUtEKGRbMF0pLHAuc3RhcnRUaW1lPXt0eXBlOiJnZXRTdGFydERhdGUiLHN0YXJ0RGF0YTpkWzFdfSxwLmVuZFRpbWU9e2RhdGE6ZFsyXX07YnJlYWt9cmV0dXJuIHB9O2xldCBvdmUsaEosbTE9W107Y29uc3QgaUdlPXt9LGNubj1mdW5jdGlvbihpLHMpe2NvbnN0IHU9e3NlY3Rpb246R0QsdHlwZTpHRCxwcm9jZXNzZWQ6ITEsbWFudWFsRW5kVGltZTohMSxyZW5kZXJFbmRUaW1lOm51bGwscmF3OntkYXRhOnN9LHRhc2s6aSxjbGFzc2VzOltdfSxkPW9ubihoSixzKTt1LnJhdy5zdGFydFRpbWU9ZC5zdGFydFRpbWUsdS5yYXcuZW5kVGltZT1kLmVuZFRpbWUsdS5pZD1kLmlkLHUucHJldlRhc2tJZD1oSix1LmFjdGl2ZT1kLmFjdGl2ZSx1LmRvbmU9ZC5kb25lLHUuY3JpdD1kLmNyaXQsdS5taWxlc3RvbmU9ZC5taWxlc3RvbmUsdS5vcmRlcj1zdmUsc3ZlKys7Y29uc3QgcD1tMS5wdXNoKHUpO2hKPXUuaWQsaUdlW3UuaWRdPXAtMX0sUUM9ZnVuY3Rpb24oaSl7Y29uc3Qgcz1pR2VbaV07cmV0dXJuIG0xW3NdfSx1bm49ZnVuY3Rpb24oaSxzKXtjb25zdCB1PXtzZWN0aW9uOkdELHR5cGU6R0QsZGVzY3JpcHRpb246aSx0YXNrOmksY2xhc3NlczpbXX0sZD1hbm4ob3ZlLHMpO3Uuc3RhcnRUaW1lPWQuc3RhcnRUaW1lLHUuZW5kVGltZT1kLmVuZFRpbWUsdS5pZD1kLmlkLHUuYWN0aXZlPWQuYWN0aXZlLHUuZG9uZT1kLmRvbmUsdS5jcml0PWQuY3JpdCx1Lm1pbGVzdG9uZT1kLm1pbGVzdG9uZSxvdmU9dSx1Si5wdXNoKHUpfSxzR2U9ZnVuY3Rpb24oKXtjb25zdCBpPWZ1bmN0aW9uKHUpe2NvbnN0IGQ9bTFbdV07bGV0IHA9IiI7c3dpdGNoKG0xW3VdLnJhdy5zdGFydFRpbWUudHlwZSl7Y2FzZSJwcmV2VGFza0VuZCI6e2NvbnN0IHY9UUMoZC5wcmV2VGFza0lkKTtkLnN0YXJ0VGltZT12LmVuZFRpbWU7YnJlYWt9Y2FzZSJnZXRTdGFydERhdGUiOnA9YXZlKHZvaWQgMCxpNSxtMVt1XS5yYXcuc3RhcnRUaW1lLnN0YXJ0RGF0YSkscCYmKG0xW3VdLnN0YXJ0VGltZT1wKTticmVha31yZXR1cm4gbTFbdV0uc3RhcnRUaW1lJiYobTFbdV0uZW5kVGltZT1yR2UobTFbdV0uc3RhcnRUaW1lLGk1LG0xW3VdLnJhdy5lbmRUaW1lLmRhdGEsalIpLG0xW3VdLmVuZFRpbWUmJihtMVt1XS5wcm9jZXNzZWQ9ITAsbTFbdV0ubWFudWFsRW5kVGltZT1MZyhtMVt1XS5yYXcuZW5kVGltZS5kYXRhLCJZWVlZLU1NLUREIiwhMCkuaXNWYWxpZCgpLHRHZShtMVt1XSxpNSxSUixGUikpKSxtMVt1XS5wcm9jZXNzZWR9O2xldCBzPSEwO2Zvcihjb25zdFt1LGRdb2YgbTEuZW50cmllcygpKWkodSkscz1zJiZkLnByb2Nlc3NlZDtyZXR1cm4gc30sbG5uPWZ1bmN0aW9uKGkscyl7bGV0IHU9cztxdCgpLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UiJiYodT1wOS5zYW5pdGl6ZVVybChzKSksaS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZCl7UUMoZCkhPT12b2lkIDAmJihvR2UoZCwoKT0+e3dpbmRvdy5vcGVuKHUsIl9zZWxmIil9KSxabWVbZF09dSl9KSxhR2UoaSwiY2xpY2thYmxlIil9LGFHZT1mdW5jdGlvbihpLHMpe2kuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe2xldCBkPVFDKHUpO2QhPT12b2lkIDAmJmQuY2xhc3Nlcy5wdXNoKHMpfSl9LGhubj1mdW5jdGlvbihpLHMsdSl7aWYocXQoKS5zZWN1cml0eUxldmVsIT09Imxvb3NlInx8cz09PXZvaWQgMClyZXR1cm47bGV0IGQ9W107aWYodHlwZW9mIHU9PSJzdHJpbmciKXtkPXUuc3BsaXQoLywoPz0oPzooPzpbXiJdKiIpezJ9KSpbXiJdKiQpLyk7Zm9yKGxldCB2PTA7djxkLmxlbmd0aDt2Kyspe2xldCBiPWRbdl0udHJpbSgpO2IuY2hhckF0KDApPT09JyInJiZiLmNoYXJBdChiLmxlbmd0aC0xKT09PSciJyYmKGI9Yi5zdWJzdHIoMSxiLmxlbmd0aC0yKSksZFt2XT1ifX1kLmxlbmd0aD09PTAmJmQucHVzaChpKSxRQyhpKSE9PXZvaWQgMCYmb0dlKGksKCk9PntBby5ydW5GdW5jKHMsLi4uZCl9KX0sb0dlPWZ1bmN0aW9uKGkscyl7bnZlLnB1c2goZnVuY3Rpb24oKXtjb25zdCB1PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtpfSJdYCk7dSE9PW51bGwmJnUuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7cygpfSl9LGZ1bmN0aW9uKCl7Y29uc3QgdT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9IiR7aX0tdGV4dCJdYCk7dSE9PW51bGwmJnUuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7cygpfSl9KX0sZm5uPXtnZXRDb25maWc6KCk9PnF0KCkuZ2FudHQsY2xlYXI6TnRuLHNldERhdGVGb3JtYXQ6enRuLGdldERhdGVGb3JtYXQ6V3RuLGVuYWJsZUluY2x1c2l2ZUVuZERhdGVzOnF0bixlbmREYXRlc0FyZUluY2x1c2l2ZTpIdG4sZW5hYmxlVG9wQXhpczpWdG4sdG9wQXhpc0VuYWJsZWQ6VXRuLHNldEF4aXNGb3JtYXQ6UHRuLGdldEF4aXNGb3JtYXQ6QnRuLHNldFRpY2tJbnRlcnZhbDpGdG4sZ2V0VGlja0ludGVydmFsOlJ0bixzZXRUb2RheU1hcmtlcjpqdG4sZ2V0VG9kYXlNYXJrZXI6JHRuLHNldEFjY1RpdGxlOkJnLGdldEFjY1RpdGxlOkNwLHNldERpYWdyYW1UaXRsZTpjbSxnZXREaWFncmFtVGl0bGU6QXAsc2V0RGlzcGxheU1vZGU6R3RuLGdldERpc3BsYXlNb2RlOkt0bixzZXRBY2NEZXNjcmlwdGlvbjpTcCxnZXRBY2NEZXNjcmlwdGlvbjpfcCxhZGRTZWN0aW9uOmVubixnZXRTZWN0aW9uczp0bm4sZ2V0VGFza3M6bm5uLGFkZFRhc2s6Y25uLGZpbmRUYXNrQnlJZDpRQyxhZGRUYXNrT3JnOnVubixzZXRJbmNsdWRlczpZdG4sZ2V0SW5jbHVkZXM6WHRuLHNldEV4Y2x1ZGVzOlF0bixnZXRFeGNsdWRlczpKdG4sc2V0Q2xpY2tFdmVudDpmdW5jdGlvbihpLHMsdSl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZCl7aG5uKGQscyx1KX0pLGFHZShpLCJjbGlja2FibGUiKX0sc2V0TGluazpsbm4sZ2V0TGlua3M6WnRuLGJpbmRGdW5jdGlvbnM6ZnVuY3Rpb24oaSl7bnZlLmZvckVhY2goZnVuY3Rpb24ocyl7cyhpKX0pfSxwYXJzZUR1cmF0aW9uOm5HZSxpc0ludmFsaWREYXRlOmVHZSxzZXRXZWVrZGF5OnJubixnZXRXZWVrZGF5Omlubn07ZnVuY3Rpb24gY0dlKGkscyx1KXtsZXQgZD0hMDtmb3IoO2Q7KWQ9ITEsdS5mb3JFYWNoKGZ1bmN0aW9uKHApe2NvbnN0IHY9Il5cXHMqIitwKyJcXHMqJCIsYj1uZXcgUmVnRXhwKHYpO2lbMF0ubWF0Y2goYikmJihzW3BdPSEwLGkuc2hpZnQoMSksZD0hMCl9KX1jb25zdCBkbm49ZnVuY3Rpb24oKXtYZS5kZWJ1ZygiU29tZXRoaW5nIGlzIGNhbGxpbmcsIHNldENvbmYsIHJlbW92ZSB0aGUgY2FsbCIpfSx1R2U9e21vbmRheTpERix0dWVzZGF5OnhGZSx3ZWRuZXNkYXk6a0ZlLHRodXJzZGF5OnlDLGZyaWRheTpFRmUsc2F0dXJkYXk6VEZlLHN1bmRheTpNRn0sZ25uPShpLHMpPT57bGV0IHU9Wy4uLmldLm1hcCgoKT0+LTEvMCksZD1bLi4uaV0uc29ydCgodixiKT0+di5zdGFydFRpbWUtYi5zdGFydFRpbWV8fHYub3JkZXItYi5vcmRlcikscD0wO2Zvcihjb25zdCB2IG9mIGQpZm9yKGxldCBiPTA7Yjx1Lmxlbmd0aDtiKyspaWYodi5zdGFydFRpbWU+PXVbYl0pe3VbYl09di5lbmRUaW1lLHYub3JkZXI9YitzLGI+cCYmKHA9Yik7YnJlYWt9cmV0dXJuIHB9O2xldCBWNztjb25zdCBwbm49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpfdG4sZGI6Zm5uLHJlbmRlcmVyOntzZXRDb25mOmRubixkcmF3OmZ1bmN0aW9uKGkscyx1LGQpe2NvbnN0IHA9cXQoKS5nYW50dCx2PXF0KCkuc2VjdXJpdHlMZXZlbDtsZXQgYjt2PT09InNhbmRib3giJiYoYj1JcigiI2kiK3MpKTtjb25zdCB5PUlyKHY9PT0ic2FuZGJveCI/Yi5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksVD12PT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsXz1ULmdldEVsZW1lbnRCeUlkKHMpO1Y3PV8ucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aCxWNz09PXZvaWQgMCYmKFY3PTEyMDApLHAudXNlV2lkdGghPT12b2lkIDAmJihWNz1wLnVzZVdpZHRoKTtjb25zdCBBPWQuZGIuZ2V0VGFza3MoKTtsZXQgUD1bXTtmb3IoY29uc3QgZGUgb2YgQSlQLnB1c2goZGUudHlwZSk7UD1zZShQKTtjb25zdCBSPXt9O2xldCBGPTIqcC50b3BQYWRkaW5nO2lmKGQuZGIuZ2V0RGlzcGxheU1vZGUoKT09PSJjb21wYWN0Inx8cC5kaXNwbGF5TW9kZT09PSJjb21wYWN0Iil7Y29uc3QgZGU9e307Zm9yKGNvbnN0IGdlIG9mIEEpZGVbZ2Uuc2VjdGlvbl09PT12b2lkIDA/ZGVbZ2Uuc2VjdGlvbl09W2dlXTpkZVtnZS5zZWN0aW9uXS5wdXNoKGdlKTtsZXQgWD0wO2Zvcihjb25zdCBnZSBvZiBPYmplY3Qua2V5cyhkZSkpe2NvbnN0IFc9Z25uKGRlW2dlXSxYKSsxO1grPVcsRis9VyoocC5iYXJIZWlnaHQrcC5iYXJHYXApLFJbZ2VdPVd9fWVsc2V7Ris9QS5sZW5ndGgqKHAuYmFySGVpZ2h0K3AuYmFyR2FwKTtmb3IoY29uc3QgZGUgb2YgUClSW2RlXT1BLmZpbHRlcihYPT5YLnR5cGU9PT1kZSkubGVuZ3RofV8uc2V0QXR0cmlidXRlKCJ2aWV3Qm94IiwiMCAwICIrVjcrIiAiK0YpO2NvbnN0IGo9eS5zZWxlY3QoYFtpZD0iJHtzfSJdYCksSz1mTnQoKS5kb21haW4oW1dBdChBLGZ1bmN0aW9uKGRlKXtyZXR1cm4gZGUuc3RhcnRUaW1lfSksS0F0KEEsZnVuY3Rpb24oZGUpe3JldHVybiBkZS5lbmRUaW1lfSldKS5yYW5nZVJvdW5kKFswLFY3LXAubGVmdFBhZGRpbmctcC5yaWdodFBhZGRpbmddKTtmdW5jdGlvbiBlZShkZSxYKXtjb25zdCBnZT1kZS5zdGFydFRpbWUsVz1YLnN0YXJ0VGltZTtsZXQgeGU9MDtyZXR1cm4gZ2U+Vz94ZT0xOmdlPFcmJih4ZT0tMSkseGV9QS5zb3J0KGVlKSxpZShBLFY3LEYpLE5nKGosRixWNyxwLnVzZU1heFdpZHRoKSxqLmFwcGVuZCgidGV4dCIpLnRleHQoZC5kYi5nZXREaWFncmFtVGl0bGUoKSkuYXR0cigieCIsVjcvMikuYXR0cigieSIscC50aXRsZVRvcE1hcmdpbikuYXR0cigiY2xhc3MiLCJ0aXRsZVRleHQiKTtmdW5jdGlvbiBpZShkZSxYLGdlKXtjb25zdCBXPXAuYmFySGVpZ2h0LHhlPVcrcC5iYXJHYXAsVT1wLnRvcFBhZGRpbmcsRmU9cC5sZWZ0UGFkZGluZyxQZT1zRCgpLmRvbWFpbihbMCxQLmxlbmd0aF0pLnJhbmdlKFsiIzAwQjlGQSIsIiNGOTUwMDIiXSkuaW50ZXJwb2xhdGUoYkR0KTtwZSh4ZSxVLEZlLFgsZ2UsZGUsZC5kYi5nZXRFeGNsdWRlcygpLGQuZGIuZ2V0SW5jbHVkZXMoKSksYmUoRmUsVSxYLGdlKSxvZShkZSx4ZSxVLEZlLFcsUGUsWCksYWUoeGUsVSksbmUoRmUsVSxYLGdlKX1mdW5jdGlvbiBvZShkZSxYLGdlLFcseGUsVSxGZSl7Y29uc3QgamU9Wy4uLm5ldyBTZXQoZGUubWFwKGtlPT5rZS5vcmRlcikpXS5tYXAoa2U9PmRlLmZpbmQoS2U9PktlLm9yZGVyPT09a2UpKTtqLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoamUpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsMCkuYXR0cigieSIsZnVuY3Rpb24oa2UsS2Upe3JldHVybiBLZT1rZS5vcmRlcixLZSpYK2dlLTJ9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oKXtyZXR1cm4gRmUtcC5yaWdodFBhZGRpbmcvMn0pLmF0dHIoImhlaWdodCIsWCkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGtlKXtmb3IoY29uc3RbS2UsRnRdb2YgUC5lbnRyaWVzKCkpaWYoa2UudHlwZT09PUZ0KXJldHVybiJzZWN0aW9uIHNlY3Rpb24iK0tlJXAubnVtYmVyU2VjdGlvblN0eWxlcztyZXR1cm4ic2VjdGlvbiBzZWN0aW9uMCJ9KTtjb25zdCBJZT1qLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoZGUpLmVudGVyKCksU2U9ZC5kYi5nZXRMaW5rcygpO2lmKEllLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIixmdW5jdGlvbihrZSl7cmV0dXJuIGtlLmlkfSkuYXR0cigicngiLDMpLmF0dHIoInJ5IiwzKS5hdHRyKCJ4IixmdW5jdGlvbihrZSl7cmV0dXJuIGtlLm1pbGVzdG9uZT9LKGtlLnN0YXJ0VGltZSkrVysuNSooSyhrZS5lbmRUaW1lKS1LKGtlLnN0YXJ0VGltZSkpLS41KnhlOksoa2Uuc3RhcnRUaW1lKStXfSkuYXR0cigieSIsZnVuY3Rpb24oa2UsS2Upe3JldHVybiBLZT1rZS5vcmRlcixLZSpYK2dlfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKGtlKXtyZXR1cm4ga2UubWlsZXN0b25lP3hlOksoa2UucmVuZGVyRW5kVGltZXx8a2UuZW5kVGltZSktSyhrZS5zdGFydFRpbWUpfSkuYXR0cigiaGVpZ2h0Iix4ZSkuYXR0cigidHJhbnNmb3JtLW9yaWdpbiIsZnVuY3Rpb24oa2UsS2Upe3JldHVybiBLZT1rZS5vcmRlciwoSyhrZS5zdGFydFRpbWUpK1crLjUqKEsoa2UuZW5kVGltZSktSyhrZS5zdGFydFRpbWUpKSkudG9TdHJpbmcoKSsicHggIisoS2UqWCtnZSsuNSp4ZSkudG9TdHJpbmcoKSsicHgifSkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGtlKXtjb25zdCBLZT0idGFzayI7bGV0IEZ0PSIiO2tlLmNsYXNzZXMubGVuZ3RoPjAmJihGdD1rZS5jbGFzc2VzLmpvaW4oIiAiKSk7bGV0IE5lPTA7Zm9yKGNvbnN0W190LEV0XW9mIFAuZW50cmllcygpKWtlLnR5cGU9PT1FdCYmKE5lPV90JXAubnVtYmVyU2VjdGlvblN0eWxlcyk7bGV0IGduPSIiO3JldHVybiBrZS5hY3RpdmU/a2UuY3JpdD9nbis9IiBhY3RpdmVDcml0Ijpnbj0iIGFjdGl2ZSI6a2UuZG9uZT9rZS5jcml0P2duPSIgZG9uZUNyaXQiOmduPSIgZG9uZSI6a2UuY3JpdCYmKGduKz0iIGNyaXQiKSxnbi5sZW5ndGg9PT0wJiYoZ249IiB0YXNrIiksa2UubWlsZXN0b25lJiYoZ249IiBtaWxlc3RvbmUgIitnbiksZ24rPU5lLGduKz0iICIrRnQsS2UrZ259KSxJZS5hcHBlbmQoInRleHQiKS5hdHRyKCJpZCIsZnVuY3Rpb24oa2Upe3JldHVybiBrZS5pZCsiLXRleHQifSkudGV4dChmdW5jdGlvbihrZSl7cmV0dXJuIGtlLnRhc2t9KS5hdHRyKCJmb250LXNpemUiLHAuZm9udFNpemUpLmF0dHIoIngiLGZ1bmN0aW9uKGtlKXtsZXQgS2U9SyhrZS5zdGFydFRpbWUpLEZ0PUsoa2UucmVuZGVyRW5kVGltZXx8a2UuZW5kVGltZSk7a2UubWlsZXN0b25lJiYoS2UrPS41KihLKGtlLmVuZFRpbWUpLUsoa2Uuc3RhcnRUaW1lKSktLjUqeGUpLGtlLm1pbGVzdG9uZSYmKEZ0PUtlK3hlKTtjb25zdCBOZT10aGlzLmdldEJCb3goKS53aWR0aDtyZXR1cm4gTmU+RnQtS2U/RnQrTmUrMS41KnAubGVmdFBhZGRpbmc+RmU/S2UrVy01OkZ0K1crNTooRnQtS2UpLzIrS2UrV30pLmF0dHIoInkiLGZ1bmN0aW9uKGtlLEtlKXtyZXR1cm4gS2U9a2Uub3JkZXIsS2UqWCtwLmJhckhlaWdodC8yKyhwLmZvbnRTaXplLzItMikrZ2V9KS5hdHRyKCJ0ZXh0LWhlaWdodCIseGUpLmF0dHIoImNsYXNzIixmdW5jdGlvbihrZSl7Y29uc3QgS2U9SyhrZS5zdGFydFRpbWUpO2xldCBGdD1LKGtlLmVuZFRpbWUpO2tlLm1pbGVzdG9uZSYmKEZ0PUtlK3hlKTtjb25zdCBOZT10aGlzLmdldEJCb3goKS53aWR0aDtsZXQgZ249IiI7a2UuY2xhc3Nlcy5sZW5ndGg+MCYmKGduPWtlLmNsYXNzZXMuam9pbigiICIpKTtsZXQgX3Q9MDtmb3IoY29uc3RbR3QsbG5db2YgUC5lbnRyaWVzKCkpa2UudHlwZT09PWxuJiYoX3Q9R3QlcC5udW1iZXJTZWN0aW9uU3R5bGVzKTtsZXQgRXQ9IiI7cmV0dXJuIGtlLmFjdGl2ZSYmKGtlLmNyaXQ/RXQ9ImFjdGl2ZUNyaXRUZXh0IitfdDpFdD0iYWN0aXZlVGV4dCIrX3QpLGtlLmRvbmU/a2UuY3JpdD9FdD1FdCsiIGRvbmVDcml0VGV4dCIrX3Q6RXQ9RXQrIiBkb25lVGV4dCIrX3Q6a2UuY3JpdCYmKEV0PUV0KyIgY3JpdFRleHQiK190KSxrZS5taWxlc3RvbmUmJihFdCs9IiBtaWxlc3RvbmVUZXh0IiksTmU+RnQtS2U/RnQrTmUrMS41KnAubGVmdFBhZGRpbmc+RmU/Z24rIiB0YXNrVGV4dE91dHNpZGVMZWZ0IHRhc2tUZXh0T3V0c2lkZSIrX3QrIiAiK0V0OmduKyIgdGFza1RleHRPdXRzaWRlUmlnaHQgdGFza1RleHRPdXRzaWRlIitfdCsiICIrRXQrIiB3aWR0aC0iK05lOmduKyIgdGFza1RleHQgdGFza1RleHQiK190KyIgIitFdCsiIHdpZHRoLSIrTmV9KSxxdCgpLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCIpe2xldCBrZTtrZT1JcigiI2kiK3MpO2NvbnN0IEtlPWtlLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50O0llLmZpbHRlcihmdW5jdGlvbihGdCl7cmV0dXJuIFNlW0Z0LmlkXSE9PXZvaWQgMH0pLmVhY2goZnVuY3Rpb24oRnQpe3ZhciBOZT1LZS5xdWVyeVNlbGVjdG9yKCIjIitGdC5pZCksZ249S2UucXVlcnlTZWxlY3RvcigiIyIrRnQuaWQrIi10ZXh0Iik7Y29uc3QgX3Q9TmUucGFyZW50Tm9kZTt2YXIgRXQ9S2UuY3JlYXRlRWxlbWVudCgiYSIpO0V0LnNldEF0dHJpYnV0ZSgieGxpbms6aHJlZiIsU2VbRnQuaWRdKSxFdC5zZXRBdHRyaWJ1dGUoInRhcmdldCIsIl90b3AiKSxfdC5hcHBlbmRDaGlsZChFdCksRXQuYXBwZW5kQ2hpbGQoTmUpLEV0LmFwcGVuZENoaWxkKGduKX0pfX1mdW5jdGlvbiBwZShkZSxYLGdlLFcseGUsVSxGZSxQZSl7aWYoRmUubGVuZ3RoPT09MCYmUGUubGVuZ3RoPT09MClyZXR1cm47bGV0IGplLEllO2Zvcihjb25zdHtzdGFydFRpbWU6TmUsZW5kVGltZTpnbn1vZiBVKShqZT09PXZvaWQgMHx8TmU8amUpJiYoamU9TmUpLChJZT09PXZvaWQgMHx8Z24+SWUpJiYoSWU9Z24pO2lmKCFqZXx8IUllKXJldHVybjtpZihMZyhJZSkuZGlmZihMZyhqZSksInllYXIiKT41KXtYZS53YXJuKCJUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBtaW4gYW5kIG1heCB0aW1lIGlzIG1vcmUgdGhhbiA1IHllYXJzLiBUaGlzIHdpbGwgY2F1c2UgcGVyZm9ybWFuY2UgaXNzdWVzLiBTa2lwcGluZyBkcmF3aW5nIGV4Y2x1ZGUgZGF5cy4iKTtyZXR1cm59Y29uc3QgU2U9ZC5kYi5nZXREYXRlRm9ybWF0KCksQ2U9W107bGV0IGtlPW51bGwsS2U9TGcoamUpO2Zvcig7S2UudmFsdWVPZigpPD1JZTspZC5kYi5pc0ludmFsaWREYXRlKEtlLFNlLEZlLFBlKT9rZT9rZS5lbmQ9S2U6a2U9e3N0YXJ0OktlLGVuZDpLZX06a2UmJihDZS5wdXNoKGtlKSxrZT1udWxsKSxLZT1LZS5hZGQoMSwiZCIpO2ouYXBwZW5kKCJnIikuc2VsZWN0QWxsKCJyZWN0IikuZGF0YShDZSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJpZCIsZnVuY3Rpb24oTmUpe3JldHVybiJleGNsdWRlLSIrTmUuc3RhcnQuZm9ybWF0KCJZWVlZLU1NLUREIil9KS5hdHRyKCJ4IixmdW5jdGlvbihOZSl7cmV0dXJuIEsoTmUuc3RhcnQpK2dlfSkuYXR0cigieSIscC5ncmlkTGluZVN0YXJ0UGFkZGluZykuYXR0cigid2lkdGgiLGZ1bmN0aW9uKE5lKXtjb25zdCBnbj1OZS5lbmQuYWRkKDEsImRheSIpO3JldHVybiBLKGduKS1LKE5lLnN0YXJ0KX0pLmF0dHIoImhlaWdodCIseGUtWC1wLmdyaWRMaW5lU3RhcnRQYWRkaW5nKS5hdHRyKCJ0cmFuc2Zvcm0tb3JpZ2luIixmdW5jdGlvbihOZSxnbil7cmV0dXJuKEsoTmUuc3RhcnQpK2dlKy41KihLKE5lLmVuZCktSyhOZS5zdGFydCkpKS50b1N0cmluZygpKyJweCAiKyhnbipkZSsuNSp4ZSkudG9TdHJpbmcoKSsicHgifSkuYXR0cigiY2xhc3MiLCJleGNsdWRlLXJhbmdlIil9ZnVuY3Rpb24gYmUoZGUsWCxnZSxXKXtsZXQgeGU9ckx0KEspLnRpY2tTaXplKC1XK1grcC5ncmlkTGluZVN0YXJ0UGFkZGluZykudGlja0Zvcm1hdChzWChkLmRiLmdldEF4aXNGb3JtYXQoKXx8cC5heGlzRm9ybWF0fHwiJVktJW0tJWQiKSk7Y29uc3QgRmU9L14oWzEtOV1cZCopKG1pbGxpc2Vjb25kfHNlY29uZHxtaW51dGV8aG91cnxkYXl8d2Vla3xtb250aCkkLy5leGVjKGQuZGIuZ2V0VGlja0ludGVydmFsKCl8fHAudGlja0ludGVydmFsKTtpZihGZSE9PW51bGwpe2NvbnN0IFBlPUZlWzFdLGplPUZlWzJdLEllPWQuZGIuZ2V0V2Vla2RheSgpfHxwLndlZWtkYXk7c3dpdGNoKGplKXtjYXNlIm1pbGxpc2Vjb25kIjp4ZS50aWNrcyhhRC5ldmVyeShQZSkpO2JyZWFrO2Nhc2Uic2Vjb25kIjp4ZS50aWNrcyhiOS5ldmVyeShQZSkpO2JyZWFrO2Nhc2UibWludXRlIjp4ZS50aWNrcyhBRi5ldmVyeShQZSkpO2JyZWFrO2Nhc2UiaG91ciI6eGUudGlja3MoTEYuZXZlcnkoUGUpKTticmVhaztjYXNlImRheSI6eGUudGlja3ModkMuZXZlcnkoUGUpKTticmVhaztjYXNlIndlZWsiOnhlLnRpY2tzKHVHZVtJZV0uZXZlcnkoUGUpKTticmVhaztjYXNlIm1vbnRoIjp4ZS50aWNrcyhJRi5ldmVyeShQZSkpO2JyZWFrfX1pZihqLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZ3JpZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2RlKyIsICIrKFctNTApKyIpIikuY2FsbCh4ZSkuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZmlsbCIsIiMwMDAiKS5hdHRyKCJzdHJva2UiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCkuYXR0cigiZHkiLCIxZW0iKSxkLmRiLnRvcEF4aXNFbmFibGVkKCl8fHAudG9wQXhpcyl7bGV0IFBlPW5MdChLKS50aWNrU2l6ZSgtVytYK3AuZ3JpZExpbmVTdGFydFBhZGRpbmcpLnRpY2tGb3JtYXQoc1goZC5kYi5nZXRBeGlzRm9ybWF0KCl8fHAuYXhpc0Zvcm1hdHx8IiVZLSVtLSVkIikpO2lmKEZlIT09bnVsbCl7Y29uc3QgamU9RmVbMV0sSWU9RmVbMl0sU2U9ZC5kYi5nZXRXZWVrZGF5KCl8fHAud2Vla2RheTtzd2l0Y2goSWUpe2Nhc2UibWlsbGlzZWNvbmQiOlBlLnRpY2tzKGFELmV2ZXJ5KGplKSk7YnJlYWs7Y2FzZSJzZWNvbmQiOlBlLnRpY2tzKGI5LmV2ZXJ5KGplKSk7YnJlYWs7Y2FzZSJtaW51dGUiOlBlLnRpY2tzKEFGLmV2ZXJ5KGplKSk7YnJlYWs7Y2FzZSJob3VyIjpQZS50aWNrcyhMRi5ldmVyeShqZSkpO2JyZWFrO2Nhc2UiZGF5IjpQZS50aWNrcyh2Qy5ldmVyeShqZSkpO2JyZWFrO2Nhc2Uid2VlayI6UGUudGlja3ModUdlW1NlXS5ldmVyeShqZSkpO2JyZWFrO2Nhc2UibW9udGgiOlBlLnRpY2tzKElGLmV2ZXJ5KGplKSk7YnJlYWt9fWouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJncmlkIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZGUrIiwgIitYKyIpIikuY2FsbChQZSkuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZmlsbCIsIiMwMDAiKS5hdHRyKCJzdHJva2UiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCl9fWZ1bmN0aW9uIGFlKGRlLFgpe2xldCBnZT0wO2NvbnN0IFc9T2JqZWN0LmtleXMoUikubWFwKHhlPT5beGUsUlt4ZV1dKTtqLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoVykuZW50ZXIoKS5hcHBlbmQoZnVuY3Rpb24oeGUpe2NvbnN0IFU9eGVbMF0uc3BsaXQoY2kubGluZUJyZWFrUmVnZXgpLEZlPS0oVS5sZW5ndGgtMSkvMixQZT1ULmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7UGUuc2V0QXR0cmlidXRlKCJkeSIsRmUrImVtIik7Zm9yKGNvbnN0W2plLEllXW9mIFUuZW50cmllcygpKXtjb25zdCBTZT1ULmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO1NlLnNldEF0dHJpYnV0ZSgiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLFNlLnNldEF0dHJpYnV0ZSgieCIsIjEwIiksamU+MCYmU2Uuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLFNlLnRleHRDb250ZW50PUllLFBlLmFwcGVuZENoaWxkKFNlKX1yZXR1cm4gUGV9KS5hdHRyKCJ4IiwxMCkuYXR0cigieSIsZnVuY3Rpb24oeGUsVSl7aWYoVT4wKWZvcihsZXQgRmU9MDtGZTxVO0ZlKyspcmV0dXJuIGdlKz1XW1UtMV1bMV0seGVbMV0qZGUvMitnZSpkZStYO2Vsc2UgcmV0dXJuIHhlWzFdKmRlLzIrWH0pLmF0dHIoImZvbnQtc2l6ZSIscC5zZWN0aW9uRm9udFNpemUpLmF0dHIoImNsYXNzIixmdW5jdGlvbih4ZSl7Zm9yKGNvbnN0W1UsRmVdb2YgUC5lbnRyaWVzKCkpaWYoeGVbMF09PT1GZSlyZXR1cm4ic2VjdGlvblRpdGxlIHNlY3Rpb25UaXRsZSIrVSVwLm51bWJlclNlY3Rpb25TdHlsZXM7cmV0dXJuInNlY3Rpb25UaXRsZSJ9KX1mdW5jdGlvbiBuZShkZSxYLGdlLFcpe2NvbnN0IHhlPWQuZGIuZ2V0VG9kYXlNYXJrZXIoKTtpZih4ZT09PSJvZmYiKXJldHVybjtjb25zdCBVPWouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0b2RheSIpLEZlPW5ldyBEYXRlLFBlPVUuYXBwZW5kKCJsaW5lIik7UGUuYXR0cigieDEiLEsoRmUpK2RlKS5hdHRyKCJ4MiIsSyhGZSkrZGUpLmF0dHIoInkxIixwLnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJ5MiIsVy1wLnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJjbGFzcyIsInRvZGF5IikseGUhPT0iIiYmUGUuYXR0cigic3R5bGUiLHhlLnJlcGxhY2UoLywvZywiOyIpKX1mdW5jdGlvbiBzZShkZSl7Y29uc3QgWD17fSxnZT1bXTtmb3IobGV0IFc9MCx4ZT1kZS5sZW5ndGg7Vzx4ZTsrK1cpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFgsZGVbV10pfHwoWFtkZVtXXV09ITAsZ2UucHVzaChkZVtXXSkpO3JldHVybiBnZX19fSxzdHlsZXM6aT0+YAogIC5tZXJtYWlkLW1haW4tZm9udCB7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSwgInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmKTsKICB9CgogIC5leGNsdWRlLXJhbmdlIHsKICAgIGZpbGw6ICR7aS5leGNsdWRlQmtnQ29sb3J9OwogIH0KCiAgLnNlY3Rpb24gewogICAgc3Ryb2tlOiBub25lOwogICAgb3BhY2l0eTogMC4yOwogIH0KCiAgLnNlY3Rpb24wIHsKICAgIGZpbGw6ICR7aS5zZWN0aW9uQmtnQ29sb3J9OwogIH0KCiAgLnNlY3Rpb24yIHsKICAgIGZpbGw6ICR7aS5zZWN0aW9uQmtnQ29sb3IyfTsKICB9CgogIC5zZWN0aW9uMSwKICAuc2VjdGlvbjMgewogICAgZmlsbDogJHtpLmFsdFNlY3Rpb25Ca2dDb2xvcn07CiAgICBvcGFjaXR5OiAwLjI7CiAgfQoKICAuc2VjdGlvblRpdGxlMCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuc2VjdGlvblRpdGxlMSB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuc2VjdGlvblRpdGxlMiB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuc2VjdGlvblRpdGxlMyB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuc2VjdGlvblRpdGxlIHsKICAgIHRleHQtYW5jaG9yOiBzdGFydDsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5LCAidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYpOwogIH0KCgogIC8qIEdyaWQgYW5kIGF4aXMgKi8KCiAgLmdyaWQgLnRpY2sgewogICAgc3Ryb2tlOiAke2kuZ3JpZENvbG9yfTsKICAgIG9wYWNpdHk6IDAuODsKICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKICB9CgogIC5ncmlkIC50aWNrIHRleHQgewogICAgZm9udC1mYW1pbHk6ICR7aS5mb250RmFtaWx5fTsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KCiAgLmdyaWQgcGF0aCB7CiAgICBzdHJva2Utd2lkdGg6IDA7CiAgfQoKCiAgLyogVG9kYXkgbGluZSAqLwoKICAudG9kYXkgewogICAgZmlsbDogbm9uZTsKICAgIHN0cm9rZTogJHtpLnRvZGF5TGluZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMnB4OwogIH0KCgogIC8qIFRhc2sgc3R5bGluZyAqLwoKICAvKiBEZWZhdWx0IHRhc2sgKi8KCiAgLnRhc2sgewogICAgc3Ryb2tlLXdpZHRoOiAyOwogIH0KCiAgLnRhc2tUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSwgInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmKTsKICB9CgogIC50YXNrVGV4dE91dHNpZGVSaWdodCB7CiAgICBmaWxsOiAke2kudGFza1RleHREYXJrQ29sb3J9OwogICAgdGV4dC1hbmNob3I6IHN0YXJ0OwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHksICJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZik7CiAgfQoKICAudGFza1RleHRPdXRzaWRlTGVmdCB7CiAgICBmaWxsOiAke2kudGFza1RleHREYXJrQ29sb3J9OwogICAgdGV4dC1hbmNob3I6IGVuZDsKICB9CgoKICAvKiBTcGVjaWFsIGNhc2UgY2xpY2thYmxlICovCgogIC50YXNrLmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgfQoKICAudGFza1RleHQuY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZpbGw6ICR7aS50YXNrVGV4dENsaWNrYWJsZUNvbG9yfSAhaW1wb3J0YW50OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgfQoKICAudGFza1RleHRPdXRzaWRlTGVmdC5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZmlsbDogJHtpLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogYm9sZDsKICB9CgogIC50YXNrVGV4dE91dHNpZGVSaWdodC5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZmlsbDogJHtpLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogYm9sZDsKICB9CgoKICAvKiBTcGVjaWZpYyB0YXNrIHNldHRpbmdzIGZvciB0aGUgc2VjdGlvbnMqLwoKICAudGFza1RleHQwLAogIC50YXNrVGV4dDEsCiAgLnRhc2tUZXh0MiwKICAudGFza1RleHQzIHsKICAgIGZpbGw6ICR7aS50YXNrVGV4dENvbG9yfTsKICB9CgogIC50YXNrMCwKICAudGFzazEsCiAgLnRhc2syLAogIC50YXNrMyB7CiAgICBmaWxsOiAke2kudGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHtpLnRhc2tCb3JkZXJDb2xvcn07CiAgfQoKICAudGFza1RleHRPdXRzaWRlMCwKICAudGFza1RleHRPdXRzaWRlMgogIHsKICAgIGZpbGw6ICR7aS50YXNrVGV4dE91dHNpZGVDb2xvcn07CiAgfQoKICAudGFza1RleHRPdXRzaWRlMSwKICAudGFza1RleHRPdXRzaWRlMyB7CiAgICBmaWxsOiAke2kudGFza1RleHRPdXRzaWRlQ29sb3J9OwogIH0KCgogIC8qIEFjdGl2ZSB0YXNrICovCgogIC5hY3RpdmUwLAogIC5hY3RpdmUxLAogIC5hY3RpdmUyLAogIC5hY3RpdmUzIHsKICAgIGZpbGw6ICR7aS5hY3RpdmVUYXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlOiAke2kuYWN0aXZlVGFza0JvcmRlckNvbG9yfTsKICB9CgogIC5hY3RpdmVUZXh0MCwKICAuYWN0aXZlVGV4dDEsCiAgLmFjdGl2ZVRleHQyLAogIC5hY3RpdmVUZXh0MyB7CiAgICBmaWxsOiAke2kudGFza1RleHREYXJrQ29sb3J9ICFpbXBvcnRhbnQ7CiAgfQoKCiAgLyogQ29tcGxldGVkIHRhc2sgKi8KCiAgLmRvbmUwLAogIC5kb25lMSwKICAuZG9uZTIsCiAgLmRvbmUzIHsKICAgIHN0cm9rZTogJHtpLmRvbmVUYXNrQm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHtpLmRvbmVUYXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyOwogIH0KCiAgLmRvbmVUZXh0MCwKICAuZG9uZVRleHQxLAogIC5kb25lVGV4dDIsCiAgLmRvbmVUZXh0MyB7CiAgICBmaWxsOiAke2kudGFza1RleHREYXJrQ29sb3J9ICFpbXBvcnRhbnQ7CiAgfQoKCiAgLyogVGFza3Mgb24gdGhlIGNyaXRpY2FsIGxpbmUgKi8KCiAgLmNyaXQwLAogIC5jcml0MSwKICAuY3JpdDIsCiAgLmNyaXQzIHsKICAgIHN0cm9rZTogJHtpLmNyaXRCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke2kuY3JpdEJrZ0NvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMjsKICB9CgogIC5hY3RpdmVDcml0MCwKICAuYWN0aXZlQ3JpdDEsCiAgLmFjdGl2ZUNyaXQyLAogIC5hY3RpdmVDcml0MyB7CiAgICBzdHJva2U6ICR7aS5jcml0Qm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHtpLmFjdGl2ZVRhc2tCa2dDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDI7CiAgfQoKICAuZG9uZUNyaXQwLAogIC5kb25lQ3JpdDEsCiAgLmRvbmVDcml0MiwKICAuZG9uZUNyaXQzIHsKICAgIHN0cm9rZTogJHtpLmNyaXRCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke2kuZG9uZVRhc2tCa2dDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDI7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7CiAgfQoKICAubWlsZXN0b25lIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKSBzY2FsZSgwLjgsMC44KTsKICB9CgogIC5taWxlc3RvbmVUZXh0IHsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICB9CiAgLmRvbmVDcml0VGV4dDAsCiAgLmRvbmVDcml0VGV4dDEsCiAgLmRvbmVDcml0VGV4dDIsCiAgLmRvbmVDcml0VGV4dDMgewogICAgZmlsbDogJHtpLnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50OwogIH0KCiAgLmFjdGl2ZUNyaXRUZXh0MCwKICAuYWN0aXZlQ3JpdFRleHQxLAogIC5hY3RpdmVDcml0VGV4dDIsCiAgLmFjdGl2ZUNyaXRUZXh0MyB7CiAgICBmaWxsOiAke2kudGFza1RleHREYXJrQ29sb3J9ICFpbXBvcnRhbnQ7CiAgfQoKICAudGl0bGVUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcnx8aS50ZXh0Q29sb3J9OwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHksICJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZik7CiAgfQpgfX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgY3ZlPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24odixiLHksVCl7Zm9yKHk9eXx8e30sVD12Lmxlbmd0aDtULS07eVt2W1RdXT1iKTtyZXR1cm4geX0scz1bNiw5LDEwXSx1PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxpbmZvOjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsc3RhdGVtZW50OjgsTkw6OSxzaG93SW5mbzoxMCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiaW5mbyIsNjoiRU9GIiw5OiJOTCIsMTA6InNob3dJbmZvIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFs1LDBdLFs1LDJdLFs3LDFdLFs3LDFdLFs4LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGIseSxULF8sQSxQLFIpe3N3aXRjaChQLmxlbmd0aC0xLEEpe2Nhc2UgMTpyZXR1cm4gXztjYXNlIDQ6YnJlYWs7Y2FzZSA2Ol8uc2V0SW5mbyghMCk7YnJlYWt9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LGkocyxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6Niw5OlsxLDddLDEwOlsxLDhdfSx7MTpbMiwxXX0saShzLFsyLDNdKSxpKHMsWzIsNF0pLGkocyxbMiw1XSksaShzLFsyLDZdKV0sZGVmYXVsdEFjdGlvbnM6ezQ6WzIsMV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oYix5KXtpZih5LnJlY292ZXJhYmxlKXRoaXMudHJhY2UoYik7ZWxzZXt2YXIgVD1uZXcgRXJyb3IoYik7dGhyb3cgVC5oYXNoPXksVH19LHBhcnNlOmZ1bmN0aW9uKGIpe3ZhciB5PXRoaXMsVD1bMF0sXz1bXSxBPVtudWxsXSxQPVtdLFI9dGhpcy50YWJsZSxGPSIiLGo9MCxLPTAsZWU9MixpZT0xLG9lPVAuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscGU9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxiZT17eXk6e319O2Zvcih2YXIgYWUgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxhZSkmJihiZS55eVthZV09dGhpcy55eVthZV0pO3BlLnNldElucHV0KGIsYmUueXkpLGJlLnl5LmxleGVyPXBlLGJlLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBwZS55eWxsb2M+InUiJiYocGUueXlsbG9jPXt9KTt2YXIgbmU9cGUueXlsbG9jO1AucHVzaChuZSk7dmFyIHNlPXBlLm9wdGlvbnMmJnBlLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBiZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1iZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBkZSgpe3ZhciBDZTtyZXR1cm4gQ2U9Xy5wb3AoKXx8cGUubGV4KCl8fGllLHR5cGVvZiBDZSE9Im51bWJlciImJihDZSBpbnN0YW5jZW9mIEFycmF5JiYoXz1DZSxDZT1fLnBvcCgpKSxDZT15LnN5bWJvbHNfW0NlXXx8Q2UpLENlfWZvcih2YXIgWCxnZSxXLHhlLFU9e30sRmUsUGUsamUsSWU7Oyl7aWYoZ2U9VFtULmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2dlXT9XPXRoaXMuZGVmYXVsdEFjdGlvbnNbZ2VdOigoWD09PW51bGx8fHR5cGVvZiBYPiJ1IikmJihYPWRlKCkpLFc9UltnZV0mJlJbZ2VdW1hdKSx0eXBlb2YgVz4idSJ8fCFXLmxlbmd0aHx8IVdbMF0pe3ZhciBTZT0iIjtJZT1bXTtmb3IoRmUgaW4gUltnZV0pdGhpcy50ZXJtaW5hbHNfW0ZlXSYmRmU+ZWUmJkllLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tGZV0rIiciKTtwZS5zaG93UG9zaXRpb24/U2U9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoaisxKStgOgpgK3BlLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArSWUuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tYXXx8WCkrIiciOlNlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGorMSkrIjogVW5leHBlY3RlZCAiKyhYPT1pZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tYXXx8WCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoU2Use3RleHQ6cGUubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1hdfHxYLGxpbmU6cGUueXlsaW5lbm8sbG9jOm5lLGV4cGVjdGVkOkllfSl9aWYoV1swXWluc3RhbmNlb2YgQXJyYXkmJlcubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitnZSsiLCB0b2tlbjogIitYKTtzd2l0Y2goV1swXSl7Y2FzZSAxOlQucHVzaChYKSxBLnB1c2gocGUueXl0ZXh0KSxQLnB1c2gocGUueXlsbG9jKSxULnB1c2goV1sxXSksWD1udWxsLEs9cGUueXlsZW5nLEY9cGUueXl0ZXh0LGo9cGUueXlsaW5lbm8sbmU9cGUueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihQZT10aGlzLnByb2R1Y3Rpb25zX1tXWzFdXVsxXSxVLiQ9QVtBLmxlbmd0aC1QZV0sVS5fJD17Zmlyc3RfbGluZTpQW1AubGVuZ3RoLShQZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOlBbUC5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpQW1AubGVuZ3RoLShQZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpQW1AubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxzZSYmKFUuXyQucmFuZ2U9W1BbUC5sZW5ndGgtKFBlfHwxKV0ucmFuZ2VbMF0sUFtQLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHhlPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShVLFtGLEssaixiZS55eSxXWzFdLEEsUF0uY29uY2F0KG9lKSksdHlwZW9mIHhlPCJ1IilyZXR1cm4geGU7UGUmJihUPVQuc2xpY2UoMCwtMSpQZSoyKSxBPUEuc2xpY2UoMCwtMSpQZSksUD1QLnNsaWNlKDAsLTEqUGUpKSxULnB1c2godGhpcy5wcm9kdWN0aW9uc19bV1sxXV1bMF0pLEEucHVzaChVLiQpLFAucHVzaChVLl8kKSxqZT1SW1RbVC5sZW5ndGgtMl1dW1RbVC5sZW5ndGgtMV1dLFQucHVzaChqZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LGQ9ZnVuY3Rpb24oKXt2YXIgdj17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih5LFQpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoeSxUKTtlbHNlIHRocm93IG5ldyBFcnJvcih5KX0sc2V0SW5wdXQ6ZnVuY3Rpb24oYix5KXtyZXR1cm4gdGhpcy55eT15fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1iLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1iLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1iLHRoaXMubWF0Y2hlZCs9Yjt2YXIgeT1iLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4geT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksYn0sdW5wdXQ6ZnVuY3Rpb24oYil7dmFyIHk9Yi5sZW5ndGgsVD1iLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Yit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgteSksdGhpcy5vZmZzZXQtPXk7dmFyIF89dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksVC5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPVQubGVuZ3RoLTEpO3ZhciBBPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpUPyhULmxlbmd0aD09PV8ubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStfW18ubGVuZ3RoLVQubGVuZ3RoXS5sZW5ndGgtVFswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLXl9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bQVswXSxBWzBdK3RoaXMueXlsZW5nLXldKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihiKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoYikpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKGIubGVuZ3RoPjIwPyIuLi4iOiIiKStiLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5tYXRjaDtyZXR1cm4gYi5sZW5ndGg8MjAmJihiKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1iLmxlbmd0aCkpLChiLnN1YnN0cigwLDIwKSsoYi5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wYXN0SW5wdXQoKSx5PW5ldyBBcnJheShiLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIGIrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK3krIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKGIseSl7dmFyIFQsXyxBO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihBPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEEueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksXz1iWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxfJiYodGhpcy55eWxpbmVubys9Xy5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpfP19bXy5sZW5ndGgtMV0ubGVuZ3RoLV9bXy5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitiWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPWJbMF0sdGhpcy5tYXRjaCs9YlswXSx0aGlzLm1hdGNoZXM9Yix0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShiWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1iWzBdLFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMseSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxUKXJldHVybiBUO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBQIGluIEEpdGhpc1tQXT1BW1BdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIGIseSxULF87dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgQT10aGlzLl9jdXJyZW50UnVsZXMoKSxQPTA7UDxBLmxlbmd0aDtQKyspaWYoVD10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW0FbUF1dKSxUJiYoIXl8fFRbMF0ubGVuZ3RoPnlbMF0ubGVuZ3RoKSl7aWYoeT1ULF89UCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihiPXRoaXMudGVzdF9tYXRjaChULEFbUF0pLGIhPT0hMSlyZXR1cm4gYjtpZih0aGlzLl9iYWNrdHJhY2spe3k9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4geT8oYj10aGlzLnRlc3RfbWF0Y2goeSxBW19dKSxiIT09ITE/YjohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5uZXh0KCk7cmV0dXJuIHl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHkpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh5KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgeT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiB5PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oeSl7cmV0dXJuIHk9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh5fHwwKSx5Pj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbeV06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oeSl7dGhpcy5iZWdpbih5KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih5LFQsXyxBKXtzd2l0Y2goXyl7Y2FzZSAwOnJldHVybiA0O2Nhc2UgMTpyZXR1cm4gOTtjYXNlIDI6cmV0dXJuInNwYWNlIjtjYXNlIDM6cmV0dXJuIDEwO2Nhc2UgNDpyZXR1cm4gNjtjYXNlIDU6cmV0dXJuIlRYVCJ9fSxydWxlczpbL14oPzppbmZvXGIpL2ksL14oPzpbXHNcblxyXSspL2ksL14oPzpbXHNdKykvaSwvXig/OnNob3dJbmZvXGIpL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7SU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHZ9KCk7dS5sZXhlcj1kO2Z1bmN0aW9uIHAoKXt0aGlzLnl5PXt9fXJldHVybiBwLnByb3RvdHlwZT11LHUuUGFyc2VyPXAsbmV3IHB9KCk7Y3ZlLnBhcnNlcj1jdmU7Y29uc3QgYm5uPWN2ZSxsR2U9e2luZm86ITF9O2xldCB1dmU9bEdlLmluZm87Y29uc3QgbW5uPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6Ym5uLGRiOntjbGVhcjooKT0+e3V2ZT1sR2UuaW5mb30sc2V0SW5mbzppPT57dXZlPWl9LGdldEluZm86KCk9PnV2ZX0scmVuZGVyZXI6e2RyYXc6KGkscyx1KT0+e1hlLmRlYnVnKGByZW5kZXJpbmcgaW5mbyBkaWFncmFtCmAraSk7Y29uc3QgZD1yUihzKTtOZyhkLDEwMCw0MDAsITApLGQuYXBwZW5kKCJnIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMTAwKS5hdHRyKCJ5Iiw0MCkuYXR0cigiY2xhc3MiLCJ2ZXJzaW9uIikuYXR0cigiZm9udC1zaXplIiwzMikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChgdiR7dX1gKX19fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgbHZlPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24ocGUsYmUsYWUsbmUpe2ZvcihhZT1hZXx8e30sbmU9cGUubGVuZ3RoO25lLS07YWVbcGVbbmVdXT1iZSk7cmV0dXJuIGFlfSxzPVsxLDNdLHU9WzEsNF0sZD1bMSw1XSxwPVsxLDZdLHY9WzEsMTAsMTIsMTQsMTYsMTgsMTksMjAsMjEsMjJdLGI9WzIsNF0seT1bMSw1LDEwLDEyLDE0LDE2LDE4LDE5LDIwLDIxLDIyXSxUPVsyMCwyMSwyMl0sXz1bMiw3XSxBPVsxLDEyXSxQPVsxLDEzXSxSPVsxLDE0XSxGPVsxLDE1XSxqPVsxLDE2XSxLPVsxLDE3XSxlZT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZW9sOjQsUElFOjUsZG9jdW1lbnQ6NixzaG93RGF0YTo3LGxpbmU6OCxzdGF0ZW1lbnQ6OSx0eHQ6MTAsdmFsdWU6MTEsdGl0bGU6MTIsdGl0bGVfdmFsdWU6MTMsYWNjX3RpdGxlOjE0LGFjY190aXRsZV92YWx1ZToxNSxhY2NfZGVzY3I6MTYsYWNjX2Rlc2NyX3ZhbHVlOjE3LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MTgsc2VjdGlvbjoxOSxORVdMSU5FOjIwLCI7IjoyMSxFT0Y6MjIsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6IlBJRSIsNzoic2hvd0RhdGEiLDEwOiJ0eHQiLDExOiJ2YWx1ZSIsMTI6InRpdGxlIiwxMzoidGl0bGVfdmFsdWUiLDE0OiJhY2NfdGl0bGUiLDE1OiJhY2NfdGl0bGVfdmFsdWUiLDE2OiJhY2NfZGVzY3IiLDE3OiJhY2NfZGVzY3JfdmFsdWUiLDE4OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwxOToic2VjdGlvbiIsMjA6Ik5FV0xJTkUiLDIxOiI7IiwyMjoiRU9GIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDJdLFszLDNdLFs2LDBdLFs2LDJdLFs4LDJdLFs5LDBdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs0LDFdLFs0LDFdLFs0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGJlLGFlLG5lLHNlLGRlLFgsZ2Upe3ZhciBXPVgubGVuZ3RoLTE7c3dpdGNoKGRlKXtjYXNlIDM6c2Uuc2V0U2hvd0RhdGEoITApO2JyZWFrO2Nhc2UgNjp0aGlzLiQ9WFtXLTFdO2JyZWFrO2Nhc2UgODpzZS5hZGRTZWN0aW9uKFhbVy0xXSxzZS5jbGVhbnVwVmFsdWUoWFtXXSkpO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9WFtXXS50cmltKCksc2Uuc2V0RGlhZ3JhbVRpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9WFtXXS50cmltKCksc2Uuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDExOmNhc2UgMTI6dGhpcy4kPVhbV10udHJpbSgpLHNlLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMzpzZS5hZGRTZWN0aW9uKFhbV10uc3Vic3RyKDgpKSx0aGlzLiQ9WFtXXS5zdWJzdHIoOCk7YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTpzLDIwOnUsMjE6ZCwyMjpwfSx7MTpbM119LHszOjcsNDoyLDU6cywyMDp1LDIxOmQsMjI6cH0saSh2LGIsezY6OCw3OlsxLDldfSksaSh5LFsyLDE0XSksaSh5LFsyLDE1XSksaSh5LFsyLDE2XSksezE6WzIsMV19LGkoVCxfLHs4OjEwLDk6MTEsMTpbMiwyXSwxMDpBLDEyOlAsMTQ6UiwxNjpGLDE4OmosMTk6S30pLGkodixiLHs2OjE4fSksaSh2LFsyLDVdKSx7NDoxOSwyMDp1LDIxOmQsMjI6cH0sezExOlsxLDIwXX0sezEzOlsxLDIxXX0sezE1OlsxLDIyXX0sezE3OlsxLDIzXX0saShULFsyLDEyXSksaShULFsyLDEzXSksaShULF8sezg6MTAsOToxMSwxOlsyLDNdLDEwOkEsMTI6UCwxNDpSLDE2OkYsMTg6aiwxOTpLfSksaSh2LFsyLDZdKSxpKFQsWzIsOF0pLGkoVCxbMiw5XSksaShULFsyLDEwXSksaShULFsyLDExXSldLGRlZmF1bHRBY3Rpb25zOns3OlsyLDFdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKGJlLGFlKXtpZihhZS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKGJlKTtlbHNle3ZhciBuZT1uZXcgRXJyb3IoYmUpO3Rocm93IG5lLmhhc2g9YWUsbmV9fSxwYXJzZTpmdW5jdGlvbihiZSl7dmFyIGFlPXRoaXMsbmU9WzBdLHNlPVtdLGRlPVtudWxsXSxYPVtdLGdlPXRoaXMudGFibGUsVz0iIix4ZT0wLFU9MCxGZT0yLFBlPTEsamU9WC5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxJZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFNlPXt5eTp7fX07Zm9yKHZhciBDZSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LENlKSYmKFNlLnl5W0NlXT10aGlzLnl5W0NlXSk7SWUuc2V0SW5wdXQoYmUsU2UueXkpLFNlLnl5LmxleGVyPUllLFNlLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBJZS55eWxsb2M+InUiJiYoSWUueXlsbG9jPXt9KTt2YXIga2U9SWUueXlsbG9jO1gucHVzaChrZSk7dmFyIEtlPUllLm9wdGlvbnMmJkllLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBTZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1TZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBGdCgpe3ZhciBrdDtyZXR1cm4ga3Q9c2UucG9wKCl8fEllLmxleCgpfHxQZSx0eXBlb2Yga3QhPSJudW1iZXIiJiYoa3QgaW5zdGFuY2VvZiBBcnJheSYmKHNlPWt0LGt0PXNlLnBvcCgpKSxrdD1hZS5zeW1ib2xzX1trdF18fGt0KSxrdH1mb3IodmFyIE5lLGduLF90LEV0LEd0PXt9LGxuLHh0LFB0LFFlOzspe2lmKGduPW5lW25lLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2duXT9fdD10aGlzLmRlZmF1bHRBY3Rpb25zW2duXTooKE5lPT09bnVsbHx8dHlwZW9mIE5lPiJ1IikmJihOZT1GdCgpKSxfdD1nZVtnbl0mJmdlW2duXVtOZV0pLHR5cGVvZiBfdD4idSJ8fCFfdC5sZW5ndGh8fCFfdFswXSl7dmFyIER0PSIiO1FlPVtdO2ZvcihsbiBpbiBnZVtnbl0pdGhpcy50ZXJtaW5hbHNfW2xuXSYmbG4+RmUmJlFlLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tsbl0rIiciKTtJZS5zaG93UG9zaXRpb24/RHQ9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoeGUrMSkrYDoKYCtJZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK1FlLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bTmVdfHxOZSkrIiciOkR0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHhlKzEpKyI6IFVuZXhwZWN0ZWQgIisoTmU9PVBlPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW05lXXx8TmUpKyInIiksdGhpcy5wYXJzZUVycm9yKER0LHt0ZXh0OkllLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tOZV18fE5lLGxpbmU6SWUueXlsaW5lbm8sbG9jOmtlLGV4cGVjdGVkOlFlfSl9aWYoX3RbMF1pbnN0YW5jZW9mIEFycmF5JiZfdC5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2duKyIsIHRva2VuOiAiK05lKTtzd2l0Y2goX3RbMF0pe2Nhc2UgMTpuZS5wdXNoKE5lKSxkZS5wdXNoKEllLnl5dGV4dCksWC5wdXNoKEllLnl5bGxvYyksbmUucHVzaChfdFsxXSksTmU9bnVsbCxVPUllLnl5bGVuZyxXPUllLnl5dGV4dCx4ZT1JZS55eWxpbmVubyxrZT1JZS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKHh0PXRoaXMucHJvZHVjdGlvbnNfW190WzFdXVsxXSxHdC4kPWRlW2RlLmxlbmd0aC14dF0sR3QuXyQ9e2ZpcnN0X2xpbmU6WFtYLmxlbmd0aC0oeHR8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpYW1gubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46WFtYLmxlbmd0aC0oeHR8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46WFtYLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sS2UmJihHdC5fJC5yYW5nZT1bWFtYLmxlbmd0aC0oeHR8fDEpXS5yYW5nZVswXSxYW1gubGVuZ3RoLTFdLnJhbmdlWzFdXSksRXQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KEd0LFtXLFUseGUsU2UueXksX3RbMV0sZGUsWF0uY29uY2F0KGplKSksdHlwZW9mIEV0PCJ1IilyZXR1cm4gRXQ7eHQmJihuZT1uZS5zbGljZSgwLC0xKnh0KjIpLGRlPWRlLnNsaWNlKDAsLTEqeHQpLFg9WC5zbGljZSgwLC0xKnh0KSksbmUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tfdFsxXV1bMF0pLGRlLnB1c2goR3QuJCksWC5wdXNoKEd0Ll8kKSxQdD1nZVtuZVtuZS5sZW5ndGgtMl1dW25lW25lLmxlbmd0aC0xXV0sbmUucHVzaChQdCk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LGllPWZ1bmN0aW9uKCl7dmFyIHBlPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKGFlLG5lKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKGFlLG5lKTtlbHNlIHRocm93IG5ldyBFcnJvcihhZSl9LHNldElucHV0OmZ1bmN0aW9uKGJlLGFlKXtyZXR1cm4gdGhpcy55eT1hZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9YmUsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIGJlPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1iZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9YmUsdGhpcy5tYXRjaGVkKz1iZTt2YXIgYWU9YmUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBhZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksYmV9LHVucHV0OmZ1bmN0aW9uKGJlKXt2YXIgYWU9YmUubGVuZ3RoLG5lPWJlLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9YmUrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWFlKSx0aGlzLm9mZnNldC09YWU7dmFyIHNlPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG5lLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bmUubGVuZ3RoLTEpO3ZhciBkZT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bmU/KG5lLmxlbmd0aD09PXNlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrc2Vbc2UubGVuZ3RoLW5lLmxlbmd0aF0ubGVuZ3RoLW5lWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tYWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bZGVbMF0sZGVbMF0rdGhpcy55eWxlbmctYWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihiZSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKGJlKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBiZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKGJlLmxlbmd0aD4yMD8iLi4uIjoiIikrYmUuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgYmU9dGhpcy5tYXRjaDtyZXR1cm4gYmUubGVuZ3RoPDIwJiYoYmUrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLWJlLmxlbmd0aCkpLChiZS5zdWJzdHIoMCwyMCkrKGJlLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgYmU9dGhpcy5wYXN0SW5wdXQoKSxhZT1uZXcgQXJyYXkoYmUubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gYmUrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK2FlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihiZSxhZSl7dmFyIG5lLHNlLGRlO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihkZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihkZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxzZT1iZVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksc2UmJih0aGlzLnl5bGluZW5vKz1zZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpzZT9zZVtzZS5sZW5ndGgtMV0ubGVuZ3RoLXNlW3NlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK2JlWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPWJlWzBdLHRoaXMubWF0Y2grPWJlWzBdLHRoaXMubWF0Y2hlcz1iZSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShiZVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9YmVbMF0sbmU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsYWUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbmUpcmV0dXJuIG5lO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBYIGluIGRlKXRoaXNbWF09ZGVbWF07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgYmUsYWUsbmUsc2U7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgZGU9dGhpcy5fY3VycmVudFJ1bGVzKCksWD0wO1g8ZGUubGVuZ3RoO1grKylpZihuZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2RlW1hdXSksbmUmJighYWV8fG5lWzBdLmxlbmd0aD5hZVswXS5sZW5ndGgpKXtpZihhZT1uZSxzZT1YLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKGJlPXRoaXMudGVzdF9tYXRjaChuZSxkZVtYXSksYmUhPT0hMSlyZXR1cm4gYmU7aWYodGhpcy5fYmFja3RyYWNrKXthZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBhZT8oYmU9dGhpcy50ZXN0X21hdGNoKGFlLGRlW3NlXSksYmUhPT0hMT9iZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIGFlPXRoaXMubmV4dCgpO3JldHVybiBhZXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oYWUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChhZSl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIGFlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIGFlPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oYWUpe3JldHVybiBhZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKGFlfHwwKSxhZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW2FlXToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihhZSl7dGhpcy5iZWdpbihhZSl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oYWUsbmUsc2UsZGUpe3N3aXRjaChzZSl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIDIwO2Nhc2UgMzpicmVhaztjYXNlIDQ6YnJlYWs7Y2FzZSA1OnJldHVybiB0aGlzLmJlZ2luKCJ0aXRsZSIpLDEyO2Nhc2UgNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJ0aXRsZV92YWx1ZSI7Y2FzZSA3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwxNDtjYXNlIDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDk6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDE2O2Nhc2UgMTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDExOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDEyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEzOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE0OnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMTU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTY6cmV0dXJuInR4dCI7Y2FzZSAxNzpyZXR1cm4gNTtjYXNlIDE4OnJldHVybiA3O2Nhc2UgMTk6cmV0dXJuInZhbHVlIjtjYXNlIDIwOnJldHVybiAyMn19LHJ1bGVzOlsvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/OltcblxyXSspL2ksL14oPzolJVteXG5dKikvaSwvXig/Oltcc10rKS9pLC9eKD86dGl0bGVcYikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpwaWVcYikvaSwvXig/OnNob3dEYXRhXGIpL2ksL14oPzo6W1xzXSpbXGRdKyg/OlwuW1xkXSspPykvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMiwxM10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlsxMF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOls4XSxpbmNsdXNpdmU6ITF9LHRpdGxlOntydWxlczpbNl0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsxNSwxNl0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNyw5LDExLDE0LDE3LDE4LDE5LDIwXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHBlfSgpO2VlLmxleGVyPWllO2Z1bmN0aW9uIG9lKCl7dGhpcy55eT17fX1yZXR1cm4gb2UucHJvdG90eXBlPWVlLGVlLlBhcnNlcj1vZSxuZXcgb2V9KCk7bHZlLnBhcnNlcj1sdmU7Y29uc3Qgdm5uPWx2ZSxoR2U9c2gucGllLGZKPXtzZWN0aW9uczp7fSxzaG93RGF0YTohMSxjb25maWc6aEdlfTtsZXQgZEo9Zkouc2VjdGlvbnMsaHZlPWZKLnNob3dEYXRhO2NvbnN0IHdubj1zdHJ1Y3R1cmVkQ2xvbmUoaEdlKSx5bm49e2dldENvbmZpZzooKT0+c3RydWN0dXJlZENsb25lKHdubiksY2xlYXI6KCk9PntkSj1zdHJ1Y3R1cmVkQ2xvbmUoZkouc2VjdGlvbnMpLGh2ZT1mSi5zaG93RGF0YSxQZygpfSxzZXREaWFncmFtVGl0bGU6Y20sZ2V0RGlhZ3JhbVRpdGxlOkFwLHNldEFjY1RpdGxlOkJnLGdldEFjY1RpdGxlOkNwLHNldEFjY0Rlc2NyaXB0aW9uOlNwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLGFkZFNlY3Rpb246KGkscyk9PntpPVlmKGkscXQoKSksZEpbaV09PT12b2lkIDAmJihkSltpXT1zLFhlLmRlYnVnKGBhZGRlZCBuZXcgc2VjdGlvbjogJHtpfSwgd2l0aCB2YWx1ZTogJHtzfWApKX0sZ2V0U2VjdGlvbnM6KCk9PmRKLGNsZWFudXBWYWx1ZTppPT4oaS5zdWJzdHJpbmcoMCwxKT09PSI6IiYmKGk9aS5zdWJzdHJpbmcoMSkudHJpbSgpKSxOdW1iZXIoaS50cmltKCkpKSxzZXRTaG93RGF0YTppPT57aHZlPWl9LGdldFNob3dEYXRhOigpPT5odmV9LHhubj1pPT5gCiAgLnBpZUNpcmNsZXsKICAgIHN0cm9rZTogJHtpLnBpZVN0cm9rZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aCA6ICR7aS5waWVTdHJva2VXaWR0aH07CiAgICBvcGFjaXR5IDogJHtpLnBpZU9wYWNpdHl9OwogIH0KICAucGllT3V0ZXJDaXJjbGV7CiAgICBzdHJva2U6ICR7aS5waWVPdXRlclN0cm9rZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogJHtpLnBpZU91dGVyU3Ryb2tlV2lkdGh9OwogICAgZmlsbDogbm9uZTsKICB9CiAgLnBpZVRpdGxlVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1zaXplOiAke2kucGllVGl0bGVUZXh0U2l6ZX07CiAgICBmaWxsOiAke2kucGllVGl0bGVUZXh0Q29sb3J9OwogICAgZm9udC1mYW1pbHk6ICR7aS5mb250RmFtaWx5fTsKICB9CiAgLnNsaWNlIHsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBmaWxsOiAke2kucGllU2VjdGlvblRleHRDb2xvcn07CiAgICBmb250LXNpemU6JHtpLnBpZVNlY3Rpb25UZXh0U2l6ZX07CiAgICAvLyBmaWxsOiB3aGl0ZTsKICB9CiAgLmxlZ2VuZCB0ZXh0IHsKICAgIGZpbGw6ICR7aS5waWVMZWdlbmRUZXh0Q29sb3J9OwogICAgZm9udC1mYW1pbHk6ICR7aS5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogJHtpLnBpZUxlZ2VuZFRleHRTaXplfTsKICB9CmAsa25uPWk9Pntjb25zdCBzPU9iamVjdC5lbnRyaWVzKGkpLm1hcChkPT4oe2xhYmVsOmRbMF0sdmFsdWU6ZFsxXX0pKS5zb3J0KChkLHApPT5wLnZhbHVlLWQudmFsdWUpO3JldHVybiBTTnQoKS52YWx1ZShkPT5kLnZhbHVlKShzKX0sRW5uPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6dm5uLGRiOnlubixyZW5kZXJlcjp7ZHJhdzooaSxzLHUsZCk9PntYZS5kZWJ1ZyhgcmVuZGVyaW5nIHBpZSBjaGFydApgK2kpO2NvbnN0IHA9ZC5kYix2PXF0KCksYj1KRihwLmdldENvbmZpZygpLHYucGllKSx5PTQwLFQ9MTgsXz00LEE9NDUwLFA9QSxSPXJSKHMpLEY9Ui5hcHBlbmQoImciKSxqPXAuZ2V0U2VjdGlvbnMoKTtGLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1AvMisiLCIrQS8yKyIpIik7Y29uc3R7dGhlbWVWYXJpYWJsZXM6S309djtsZXRbZWVdPU5DKEsucGllT3V0ZXJTdHJva2VXaWR0aCk7ZWU/PyhlZT0yKTtjb25zdCBpZT1iLnRleHRQb3NpdGlvbixvZT1NYXRoLm1pbihQLEEpLzIteSxwZT1sRCgpLmlubmVyUmFkaXVzKDApLm91dGVyUmFkaXVzKG9lKSxiZT1sRCgpLmlubmVyUmFkaXVzKG9lKmllKS5vdXRlclJhZGl1cyhvZSppZSk7Ri5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwwKS5hdHRyKCJjeSIsMCkuYXR0cigiciIsb2UrZWUvMikuYXR0cigiY2xhc3MiLCJwaWVPdXRlckNpcmNsZSIpO2NvbnN0IGFlPWtubihqKSxuZT1bSy5waWUxLEsucGllMixLLnBpZTMsSy5waWU0LEsucGllNSxLLnBpZTYsSy5waWU3LEsucGllOCxLLnBpZTksSy5waWUxMCxLLnBpZTExLEsucGllMTJdLHNlPV9GKG5lKTtGLnNlbGVjdEFsbCgibXlTbGljZXMiKS5kYXRhKGFlKS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHBlKS5hdHRyKCJmaWxsIix4ZT0+c2UoeGUuZGF0YS5sYWJlbCkpLmF0dHIoImNsYXNzIiwicGllQ2lyY2xlIik7bGV0IGRlPTA7T2JqZWN0LmtleXMoaikuZm9yRWFjaCh4ZT0+e2RlKz1qW3hlXX0pLEYuc2VsZWN0QWxsKCJteVNsaWNlcyIpLmRhdGEoYWUpLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikudGV4dCh4ZT0+KHhlLmRhdGEudmFsdWUvZGUqMTAwKS50b0ZpeGVkKDApKyIlIikuYXR0cigidHJhbnNmb3JtIix4ZT0+InRyYW5zbGF0ZSgiK2JlLmNlbnRyb2lkKHhlKSsiKSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImNsYXNzIiwic2xpY2UiKSxGLmFwcGVuZCgidGV4dCIpLnRleHQocC5nZXREaWFncmFtVGl0bGUoKSkuYXR0cigieCIsMCkuYXR0cigieSIsLShBLTUwKS8yKS5hdHRyKCJjbGFzcyIsInBpZVRpdGxlVGV4dCIpO2NvbnN0IFg9Ri5zZWxlY3RBbGwoIi5sZWdlbmQiKS5kYXRhKHNlLmRvbWFpbigpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGVnZW5kIikuYXR0cigidHJhbnNmb3JtIiwoeGUsVSk9Pntjb25zdCBGZT1UK18sUGU9RmUqc2UuZG9tYWluKCkubGVuZ3RoLzIsamU9MTIqVCxJZT1VKkZlLVBlO3JldHVybiJ0cmFuc2xhdGUoIitqZSsiLCIrSWUrIikifSk7WC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ3aWR0aCIsVCkuYXR0cigiaGVpZ2h0IixUKS5zdHlsZSgiZmlsbCIsc2UpLnN0eWxlKCJzdHJva2UiLHNlKSxYLmRhdGEoYWUpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLFQrXykuYXR0cigieSIsVC1fKS50ZXh0KHhlPT57Y29uc3R7bGFiZWw6VSx2YWx1ZTpGZX09eGUuZGF0YTtyZXR1cm4gcC5nZXRTaG93RGF0YSgpP2Ake1V9IFske0ZlfV1gOlV9KTtjb25zdCBnZT1NYXRoLm1heCguLi5YLnNlbGVjdEFsbCgidGV4dCIpLm5vZGVzKCkubWFwKHhlPT4oeGU9PW51bGw/dm9pZCAwOnhlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKT8/MCkpLFc9UCt5K1QrXytnZTtSLmF0dHIoInZpZXdCb3giLGAwIDAgJHtXfSAke0F9YCksTmcoUixBLFcsYi51c2VNYXhXaWR0aCl9fSxzdHlsZXM6eG5ufX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgZnZlPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oX3QsRXQsR3QsbG4pe2ZvcihHdD1HdHx8e30sbG49X3QubGVuZ3RoO2xuLS07R3RbX3RbbG5dXT1FdCk7cmV0dXJuIEd0fSxzPVsxLDNdLHU9WzEsNF0sZD1bMSw1XSxwPVsxLDZdLHY9WzEsN10sYj1bMSw1LDEzLDE1LDE3LDE5LDIwLDI1LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM3LDM4LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwXSx5PVsxLDUsNiwxMywxNSwxNywxOSwyMCwyNSwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNywzOCw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MF0sVD1bMzIsMzMsMzRdLF89WzIsN10sQT1bMSwxM10sUD1bMSwxN10sUj1bMSwxOF0sRj1bMSwxOV0saj1bMSwyMF0sSz1bMSwyMV0sZWU9WzEsMjJdLGllPVsxLDIzXSxvZT1bMSwyNF0scGU9WzEsMjVdLGJlPVsxLDI2XSxhZT1bMSwyN10sbmU9WzEsMzBdLHNlPVsxLDMxXSxkZT1bMSwzMl0sWD1bMSwzM10sZ2U9WzEsMzRdLFc9WzEsMzVdLHhlPVsxLDM2XSxVPVsxLDM3XSxGZT1bMSwzOF0sUGU9WzEsMzldLGplPVsxLDQwXSxJZT1bMSw0MV0sU2U9WzEsNDJdLENlPVsxLDU3XSxrZT1bMSw1OF0sS2U9WzUsMjIsMjYsMzIsMzMsMzQsNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTFdLEZ0PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxlb2w6NCxTUEFDRTo1LFFVQURSQU5UOjYsZG9jdW1lbnQ6NyxsaW5lOjgsc3RhdGVtZW50OjksYXhpc0RldGFpbHM6MTAscXVhZHJhbnREZXRhaWxzOjExLHBvaW50czoxMix0aXRsZToxMyx0aXRsZV92YWx1ZToxNCxhY2NfdGl0bGU6MTUsYWNjX3RpdGxlX3ZhbHVlOjE2LGFjY19kZXNjcjoxNyxhY2NfZGVzY3JfdmFsdWU6MTgsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToxOSxzZWN0aW9uOjIwLHRleHQ6MjEscG9pbnRfc3RhcnQ6MjIscG9pbnRfeDoyMyxwb2ludF95OjI0LCJYLUFYSVMiOjI1LCJBWElTLVRFWFQtREVMSU1JVEVSIjoyNiwiWS1BWElTIjoyNyxRVUFEUkFOVF8xOjI4LFFVQURSQU5UXzI6MjksUVVBRFJBTlRfMzozMCxRVUFEUkFOVF80OjMxLE5FV0xJTkU6MzIsU0VNSTozMyxFT0Y6MzQsYWxwaGFOdW1Ub2tlbjozNSx0ZXh0Tm9UYWdzVG9rZW46MzYsU1RSOjM3LE1EX1NUUjozOCxhbHBoYU51bTozOSxQVU5DVFVBVElPTjo0MCxBTVA6NDEsTlVNOjQyLEFMUEhBOjQzLENPTU1BOjQ0LFBMVVM6NDUsRVFVQUxTOjQ2LE1VTFQ6NDcsRE9UOjQ4LEJSS1Q6NDksVU5ERVJTQ09SRTo1MCxNSU5VUzo1MSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNToiU1BBQ0UiLDY6IlFVQURSQU5UIiwxMzoidGl0bGUiLDE0OiJ0aXRsZV92YWx1ZSIsMTU6ImFjY190aXRsZSIsMTY6ImFjY190aXRsZV92YWx1ZSIsMTc6ImFjY19kZXNjciIsMTg6ImFjY19kZXNjcl92YWx1ZSIsMTk6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDIwOiJzZWN0aW9uIiwyMjoicG9pbnRfc3RhcnQiLDIzOiJwb2ludF94IiwyNDoicG9pbnRfeSIsMjU6IlgtQVhJUyIsMjY6IkFYSVMtVEVYVC1ERUxJTUlURVIiLDI3OiJZLUFYSVMiLDI4OiJRVUFEUkFOVF8xIiwyOToiUVVBRFJBTlRfMiIsMzA6IlFVQURSQU5UXzMiLDMxOiJRVUFEUkFOVF80IiwzMjoiTkVXTElORSIsMzM6IlNFTUkiLDM0OiJFT0YiLDM3OiJTVFIiLDM4OiJNRF9TVFIiLDQwOiJQVU5DVFVBVElPTiIsNDE6IkFNUCIsNDI6Ik5VTSIsNDM6IkFMUEhBIiw0NDoiQ09NTUEiLDQ1OiJQTFVTIiw0NjoiRVFVQUxTIiw0NzoiTVVMVCIsNDg6IkRPVCIsNDk6IkJSS1QiLDUwOiJVTkRFUlNDT1JFIiw1MToiTUlOVVMifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsMl0sWzMsMl0sWzcsMF0sWzcsMl0sWzgsMl0sWzksMF0sWzksMl0sWzksMV0sWzksMV0sWzksMV0sWzksMl0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzEyLDRdLFsxMCw0XSxbMTAsM10sWzEwLDJdLFsxMCw0XSxbMTAsM10sWzEwLDJdLFsxMSwyXSxbMTEsMl0sWzExLDJdLFsxMSwyXSxbNCwxXSxbNCwxXSxbNCwxXSxbMjEsMV0sWzIxLDJdLFsyMSwxXSxbMjEsMV0sWzM5LDFdLFszOSwyXSxbMzUsMV0sWzM1LDFdLFszNSwxXSxbMzUsMV0sWzM1LDFdLFszNSwxXSxbMzUsMV0sWzM1LDFdLFszNSwxXSxbMzUsMV0sWzM1LDFdLFszNiwxXSxbMzYsMV0sWzM2LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKEV0LEd0LGxuLHh0LFB0LFFlLER0KXt2YXIga3Q9UWUubGVuZ3RoLTE7c3dpdGNoKFB0KXtjYXNlIDEyOnRoaXMuJD1RZVtrdF0udHJpbSgpLHh0LnNldERpYWdyYW1UaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTM6dGhpcy4kPVFlW2t0XS50cmltKCkseHQuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDE0OmNhc2UgMTU6dGhpcy4kPVFlW2t0XS50cmltKCkseHQuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDE2Onh0LmFkZFNlY3Rpb24oUWVba3RdLnN1YnN0cig4KSksdGhpcy4kPVFlW2t0XS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxNzp4dC5hZGRQb2ludChRZVtrdC0zXSxRZVtrdC0xXSxRZVtrdF0pO2JyZWFrO2Nhc2UgMTg6eHQuc2V0WEF4aXNMZWZ0VGV4dChRZVtrdC0yXSkseHQuc2V0WEF4aXNSaWdodFRleHQoUWVba3RdKTticmVhaztjYXNlIDE5OlFlW2t0LTFdLnRleHQrPSIg4p+2ICIseHQuc2V0WEF4aXNMZWZ0VGV4dChRZVtrdC0xXSk7YnJlYWs7Y2FzZSAyMDp4dC5zZXRYQXhpc0xlZnRUZXh0KFFlW2t0XSk7YnJlYWs7Y2FzZSAyMTp4dC5zZXRZQXhpc0JvdHRvbVRleHQoUWVba3QtMl0pLHh0LnNldFlBeGlzVG9wVGV4dChRZVtrdF0pO2JyZWFrO2Nhc2UgMjI6UWVba3QtMV0udGV4dCs9IiDin7YgIix4dC5zZXRZQXhpc0JvdHRvbVRleHQoUWVba3QtMV0pO2JyZWFrO2Nhc2UgMjM6eHQuc2V0WUF4aXNCb3R0b21UZXh0KFFlW2t0XSk7YnJlYWs7Y2FzZSAyNDp4dC5zZXRRdWFkcmFudDFUZXh0KFFlW2t0XSk7YnJlYWs7Y2FzZSAyNTp4dC5zZXRRdWFkcmFudDJUZXh0KFFlW2t0XSk7YnJlYWs7Y2FzZSAyNjp4dC5zZXRRdWFkcmFudDNUZXh0KFFlW2t0XSk7YnJlYWs7Y2FzZSAyNzp4dC5zZXRRdWFkcmFudDRUZXh0KFFlW2t0XSk7YnJlYWs7Y2FzZSAzMTp0aGlzLiQ9e3RleHQ6UWVba3RdLHR5cGU6InRleHQifTticmVhaztjYXNlIDMyOnRoaXMuJD17dGV4dDpRZVtrdC0xXS50ZXh0KyIiK1FlW2t0XSx0eXBlOlFlW2t0LTFdLnR5cGV9O2JyZWFrO2Nhc2UgMzM6dGhpcy4kPXt0ZXh0OlFlW2t0XSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9e3RleHQ6UWVba3RdLHR5cGU6Im1hcmtkb3duIn07YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9UWVba3RdO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPVFlW2t0LTFdKyIiK1FlW2t0XTticmVha319LHRhYmxlOlt7MzoxLDQ6Miw1OnMsNjp1LDMyOmQsMzM6cCwzNDp2fSx7MTpbM119LHszOjgsNDoyLDU6cyw2OnUsMzI6ZCwzMzpwLDM0OnZ9LHszOjksNDoyLDU6cyw2OnUsMzI6ZCwzMzpwLDM0OnZ9LGkoYixbMiw0XSx7NzoxMH0pLGkoeSxbMiwyOF0pLGkoeSxbMiwyOV0pLGkoeSxbMiwzMF0pLHsxOlsyLDFdfSx7MTpbMiwyXX0saShULF8sezg6MTEsOToxMiwxMDoxNCwxMToxNSwxMjoxNiwyMToyOCwzNToyOSwxOlsyLDNdLDU6QSwxMzpQLDE1OlIsMTc6RiwxOTpqLDIwOkssMjU6ZWUsMjc6aWUsMjg6b2UsMjk6cGUsMzA6YmUsMzE6YWUsMzc6bmUsMzg6c2UsNDA6ZGUsNDE6WCw0MjpnZSw0MzpXLDQ0OnhlLDQ1OlUsNDY6RmUsNDc6UGUsNDg6amUsNDk6SWUsNTA6U2V9KSxpKGIsWzIsNV0pLHs0OjQzLDMyOmQsMzM6cCwzNDp2fSxpKFQsXyx7MTA6MTQsMTE6MTUsMTI6MTYsMjE6MjgsMzU6MjksOTo0NCw1OkEsMTM6UCwxNTpSLDE3OkYsMTk6aiwyMDpLLDI1OmVlLDI3OmllLDI4Om9lLDI5OnBlLDMwOmJlLDMxOmFlLDM3Om5lLDM4OnNlLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlfSksaShULFsyLDldKSxpKFQsWzIsMTBdKSxpKFQsWzIsMTFdKSx7MTQ6WzEsNDVdfSx7MTY6WzEsNDZdfSx7MTg6WzEsNDddfSxpKFQsWzIsMTVdKSxpKFQsWzIsMTZdKSx7MjE6NDgsMzU6MjksMzc6bmUsMzg6c2UsNDA6ZGUsNDE6WCw0MjpnZSw0MzpXLDQ0OnhlLDQ1OlUsNDY6RmUsNDc6UGUsNDg6amUsNDk6SWUsNTA6U2V9LHsyMTo0OSwzNToyOSwzNzpuZSwzODpzZSw0MDpkZSw0MTpYLDQyOmdlLDQzOlcsNDQ6eGUsNDU6VSw0NjpGZSw0NzpQZSw0ODpqZSw0OTpJZSw1MDpTZX0sezIxOjUwLDM1OjI5LDM3Om5lLDM4OnNlLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlfSx7MjE6NTEsMzU6MjksMzc6bmUsMzg6c2UsNDA6ZGUsNDE6WCw0MjpnZSw0MzpXLDQ0OnhlLDQ1OlUsNDY6RmUsNDc6UGUsNDg6amUsNDk6SWUsNTA6U2V9LHsyMTo1MiwzNToyOSwzNzpuZSwzODpzZSw0MDpkZSw0MTpYLDQyOmdlLDQzOlcsNDQ6eGUsNDU6VSw0NjpGZSw0NzpQZSw0ODpqZSw0OTpJZSw1MDpTZX0sezIxOjUzLDM1OjI5LDM3Om5lLDM4OnNlLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlfSx7NTpDZSwyMjpbMSw1NF0sMzU6NTYsMzY6NTUsNDA6ZGUsNDE6WCw0MjpnZSw0MzpXLDQ0OnhlLDQ1OlUsNDY6RmUsNDc6UGUsNDg6amUsNDk6SWUsNTA6U2UsNTE6a2V9LGkoS2UsWzIsMzFdKSxpKEtlLFsyLDMzXSksaShLZSxbMiwzNF0pLGkoS2UsWzIsMzddKSxpKEtlLFsyLDM4XSksaShLZSxbMiwzOV0pLGkoS2UsWzIsNDBdKSxpKEtlLFsyLDQxXSksaShLZSxbMiw0Ml0pLGkoS2UsWzIsNDNdKSxpKEtlLFsyLDQ0XSksaShLZSxbMiw0NV0pLGkoS2UsWzIsNDZdKSxpKEtlLFsyLDQ3XSksaShiLFsyLDZdKSxpKFQsWzIsOF0pLGkoVCxbMiwxMl0pLGkoVCxbMiwxM10pLGkoVCxbMiwxNF0pLGkoVCxbMiwyMF0sezM2OjU1LDM1OjU2LDU6Q2UsMjY6WzEsNTldLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlLDUxOmtlfSksaShULFsyLDIzXSx7MzY6NTUsMzU6NTYsNTpDZSwyNjpbMSw2MF0sNDA6ZGUsNDE6WCw0MjpnZSw0MzpXLDQ0OnhlLDQ1OlUsNDY6RmUsNDc6UGUsNDg6amUsNDk6SWUsNTA6U2UsNTE6a2V9KSxpKFQsWzIsMjRdLHszNjo1NSwzNTo1Niw1OkNlLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlLDUxOmtlfSksaShULFsyLDI1XSx7MzY6NTUsMzU6NTYsNTpDZSw0MDpkZSw0MTpYLDQyOmdlLDQzOlcsNDQ6eGUsNDU6VSw0NjpGZSw0NzpQZSw0ODpqZSw0OTpJZSw1MDpTZSw1MTprZX0pLGkoVCxbMiwyNl0sezM2OjU1LDM1OjU2LDU6Q2UsNDA6ZGUsNDE6WCw0MjpnZSw0MzpXLDQ0OnhlLDQ1OlUsNDY6RmUsNDc6UGUsNDg6amUsNDk6SWUsNTA6U2UsNTE6a2V9KSxpKFQsWzIsMjddLHszNjo1NSwzNTo1Niw1OkNlLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlLDUxOmtlfSksezIzOlsxLDYxXX0saShLZSxbMiwzMl0pLGkoS2UsWzIsNDhdKSxpKEtlLFsyLDQ5XSksaShLZSxbMiw1MF0pLGkoVCxbMiwxOV0sezM1OjI5LDIxOjYyLDM3Om5lLDM4OnNlLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlfSksaShULFsyLDIyXSx7MzU6MjksMjE6NjMsMzc6bmUsMzg6c2UsNDA6ZGUsNDE6WCw0MjpnZSw0MzpXLDQ0OnhlLDQ1OlUsNDY6RmUsNDc6UGUsNDg6amUsNDk6SWUsNTA6U2V9KSx7MjQ6WzEsNjRdfSxpKFQsWzIsMThdLHszNjo1NSwzNTo1Niw1OkNlLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlLDUxOmtlfSksaShULFsyLDIxXSx7MzY6NTUsMzU6NTYsNTpDZSw0MDpkZSw0MTpYLDQyOmdlLDQzOlcsNDQ6eGUsNDU6VSw0NjpGZSw0NzpQZSw0ODpqZSw0OTpJZSw1MDpTZSw1MTprZX0pLGkoVCxbMiwxN10pXSxkZWZhdWx0QWN0aW9uczp7ODpbMiwxXSw5OlsyLDJdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKEV0LEd0KXtpZihHdC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKEV0KTtlbHNle3ZhciBsbj1uZXcgRXJyb3IoRXQpO3Rocm93IGxuLmhhc2g9R3QsbG59fSxwYXJzZTpmdW5jdGlvbihFdCl7dmFyIEd0PXRoaXMsbG49WzBdLHh0PVtdLFB0PVtudWxsXSxRZT1bXSxEdD10aGlzLnRhYmxlLGt0PSIiLE9uPTAsaHQ9MCx6cj0yLHl0PTEsamk9UWUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkseGk9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxNYT17eXk6e319O2Zvcih2YXIgenMgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx6cykmJihNYS55eVt6c109dGhpcy55eVt6c10pO3hpLnNldElucHV0KEV0LE1hLnl5KSxNYS55eS5sZXhlcj14aSxNYS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgeGkueXlsbG9jPiJ1IiYmKHhpLnl5bGxvYz17fSk7dmFyIGFvPXhpLnl5bGxvYztRZS5wdXNoKGFvKTt2YXIgVHI9eGkub3B0aW9ucyYmeGkub3B0aW9ucy5yYW5nZXM7dHlwZW9mIE1hLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPU1hLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIEZuKCl7dmFyIFBhO3JldHVybiBQYT14dC5wb3AoKXx8eGkubGV4KCl8fHl0LHR5cGVvZiBQYSE9Im51bWJlciImJihQYSBpbnN0YW5jZW9mIEFycmF5JiYoeHQ9UGEsUGE9eHQucG9wKCkpLFBhPUd0LnN5bWJvbHNfW1BhXXx8UGEpLFBhfWZvcih2YXIgcW4sVW4sQXQsd3Qsb249e30sZm4sQW4sb28sam87Oyl7aWYoVW49bG5bbG4ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbVW5dP0F0PXRoaXMuZGVmYXVsdEFjdGlvbnNbVW5dOigocW49PT1udWxsfHx0eXBlb2YgcW4+InUiKSYmKHFuPUZuKCkpLEF0PUR0W1VuXSYmRHRbVW5dW3FuXSksdHlwZW9mIEF0PiJ1Inx8IUF0Lmxlbmd0aHx8IUF0WzBdKXt2YXIgJG89IiI7am89W107Zm9yKGZuIGluIER0W1VuXSl0aGlzLnRlcm1pbmFsc19bZm5dJiZmbj56ciYmam8ucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW2ZuXSsiJyIpO3hpLnNob3dQb3NpdGlvbj8kbz0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhPbisxKStgOgpgK3hpLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGAram8uam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1txbl18fHFuKSsiJyI6JG89IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoT24rMSkrIjogVW5leHBlY3RlZCAiKyhxbj09eXQ/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bcW5dfHxxbikrIiciKSx0aGlzLnBhcnNlRXJyb3IoJG8se3RleHQ6eGkubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3FuXXx8cW4sbGluZTp4aS55eWxpbmVubyxsb2M6YW8sZXhwZWN0ZWQ6am99KX1pZihBdFswXWluc3RhbmNlb2YgQXJyYXkmJkF0Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrVW4rIiwgdG9rZW46ICIrcW4pO3N3aXRjaChBdFswXSl7Y2FzZSAxOmxuLnB1c2gocW4pLFB0LnB1c2goeGkueXl0ZXh0KSxRZS5wdXNoKHhpLnl5bGxvYyksbG4ucHVzaChBdFsxXSkscW49bnVsbCxodD14aS55eWxlbmcsa3Q9eGkueXl0ZXh0LE9uPXhpLnl5bGluZW5vLGFvPXhpLnl5bGxvYzticmVhaztjYXNlIDI6aWYoQW49dGhpcy5wcm9kdWN0aW9uc19bQXRbMV1dWzFdLG9uLiQ9UHRbUHQubGVuZ3RoLUFuXSxvbi5fJD17Zmlyc3RfbGluZTpRZVtRZS5sZW5ndGgtKEFufHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6UWVbUWUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46UWVbUWUubGVuZ3RoLShBbnx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpRZVtRZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LFRyJiYob24uXyQucmFuZ2U9W1FlW1FlLmxlbmd0aC0oQW58fDEpXS5yYW5nZVswXSxRZVtRZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx3dD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkob24sW2t0LGh0LE9uLE1hLnl5LEF0WzFdLFB0LFFlXS5jb25jYXQoamkpKSx0eXBlb2Ygd3Q8InUiKXJldHVybiB3dDtBbiYmKGxuPWxuLnNsaWNlKDAsLTEqQW4qMiksUHQ9UHQuc2xpY2UoMCwtMSpBbiksUWU9UWUuc2xpY2UoMCwtMSpBbikpLGxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bQXRbMV1dWzBdKSxQdC5wdXNoKG9uLiQpLFFlLnB1c2gob24uXyQpLG9vPUR0W2xuW2xuLmxlbmd0aC0yXV1bbG5bbG4ubGVuZ3RoLTFdXSxsbi5wdXNoKG9vKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sTmU9ZnVuY3Rpb24oKXt2YXIgX3Q9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oR3QsbG4pe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoR3QsbG4pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEd0KX0sc2V0SW5wdXQ6ZnVuY3Rpb24oRXQsR3Qpe3JldHVybiB0aGlzLnl5PUd0fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1FdCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgRXQ9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPUV0LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1FdCx0aGlzLm1hdGNoZWQrPUV0O3ZhciBHdD1FdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEd0Pyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxFdH0sdW5wdXQ6ZnVuY3Rpb24oRXQpe3ZhciBHdD1FdC5sZW5ndGgsbG49RXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1FdCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtR3QpLHRoaXMub2Zmc2V0LT1HdDt2YXIgeHQ9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1sbi5sZW5ndGgtMSk7dmFyIFB0PXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpsbj8obG4ubGVuZ3RoPT09eHQubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKSt4dFt4dC5sZW5ndGgtbG4ubGVuZ3RoXS5sZW5ndGgtbG5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1HdH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtQdFswXSxQdFswXSt0aGlzLnl5bGVuZy1HdF0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKEV0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoRXQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIEV0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oRXQubGVuZ3RoPjIwPyIuLi4iOiIiKStFdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBFdD10aGlzLm1hdGNoO3JldHVybiBFdC5sZW5ndGg8MjAmJihFdCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtRXQubGVuZ3RoKSksKEV0LnN1YnN0cigwLDIwKSsoRXQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBFdD10aGlzLnBhc3RJbnB1dCgpLEd0PW5ldyBBcnJheShFdC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBFdCt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArR3QrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKEV0LEd0KXt2YXIgbG4seHQsUHQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKFB0PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFB0Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLHh0PUV0WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSx4dCYmKHRoaXMueXlsaW5lbm8rPXh0Lmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnh0P3h0W3h0Lmxlbmd0aC0xXS5sZW5ndGgteHRbeHQubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rRXRbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9RXRbMF0sdGhpcy5tYXRjaCs9RXRbMF0sdGhpcy5tYXRjaGVzPUV0LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKEV0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1FdFswXSxsbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxHdCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxsbilyZXR1cm4gbG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIFFlIGluIFB0KXRoaXNbUWVdPVB0W1FlXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBFdCxHdCxsbix4dDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBQdD10aGlzLl9jdXJyZW50UnVsZXMoKSxRZT0wO1FlPFB0Lmxlbmd0aDtRZSsrKWlmKGxuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbUHRbUWVdXSksbG4mJighR3R8fGxuWzBdLmxlbmd0aD5HdFswXS5sZW5ndGgpKXtpZihHdD1sbix4dD1RZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihFdD10aGlzLnRlc3RfbWF0Y2gobG4sUHRbUWVdKSxFdCE9PSExKXJldHVybiBFdDtpZih0aGlzLl9iYWNrdHJhY2spe0d0PSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEd0PyhFdD10aGlzLnRlc3RfbWF0Y2goR3QsUHRbeHRdKSxFdCE9PSExP0V0OiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgR3Q9dGhpcy5uZXh0KCk7cmV0dXJuIEd0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihHdCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEd0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgR3Q9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gR3Q+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihHdCl7cmV0dXJuIEd0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoR3R8fDApLEd0Pj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbR3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEd0KXt0aGlzLmJlZ2luKEd0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihHdCxsbix4dCxQdCl7c3dpdGNoKHh0KXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gMzI7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpyZXR1cm4gdGhpcy5iZWdpbigidGl0bGUiKSwxMztjYXNlIDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwidGl0bGVfdmFsdWUiO2Nhc2UgNjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTU7Y2FzZSA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSA4OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxNztjYXNlIDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDEwOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDExOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEyOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDEzOnJldHVybiAyNTtjYXNlIDE0OnJldHVybiAyNztjYXNlIDE1OnJldHVybiAyNjtjYXNlIDE2OnJldHVybiAyODtjYXNlIDE3OnJldHVybiAyOTtjYXNlIDE4OnJldHVybiAzMDtjYXNlIDE5OnJldHVybiAzMTtjYXNlIDIwOnRoaXMuYmVnaW4oIm1kX3N0cmluZyIpO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIk1EX1NUUiI7Y2FzZSAyMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDI0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI1OnJldHVybiJTVFIiO2Nhc2UgMjY6cmV0dXJuIHRoaXMuYmVnaW4oInBvaW50X3N0YXJ0IiksMjI7Y2FzZSAyNzpyZXR1cm4gdGhpcy5iZWdpbigicG9pbnRfeCIpLDIzO2Nhc2UgMjg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjk6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oInBvaW50X3kiKTticmVhaztjYXNlIDMwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjQ7Y2FzZSAzMTpyZXR1cm4gNjtjYXNlIDMyOnJldHVybiA0MztjYXNlIDMzOnJldHVybiJDT0xPTiI7Y2FzZSAzNDpyZXR1cm4gNDU7Y2FzZSAzNTpyZXR1cm4gNDQ7Y2FzZSAzNjpyZXR1cm4gNDY7Y2FzZSAzNzpyZXR1cm4gNDY7Y2FzZSAzODpyZXR1cm4gNDc7Y2FzZSAzOTpyZXR1cm4gNDk7Y2FzZSA0MDpyZXR1cm4gNTA7Y2FzZSA0MTpyZXR1cm4gNDg7Y2FzZSA0MjpyZXR1cm4gNDE7Y2FzZSA0MzpyZXR1cm4gNTE7Y2FzZSA0NDpyZXR1cm4gNDI7Y2FzZSA0NTpyZXR1cm4gNTtjYXNlIDQ2OnJldHVybiAzMztjYXNlIDQ3OnJldHVybiA0MDtjYXNlIDQ4OnJldHVybiAzNH19LHJ1bGVzOlsvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/OltcblxyXSspL2ksL14oPzolJVteXG5dKikvaSwvXig/OnRpdGxlXGIpL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OiAqeC1heGlzICopL2ksL14oPzogKnktYXhpcyAqKS9pLC9eKD86ICotLSs+ICopL2ksL14oPzogKnF1YWRyYW50LTEgKikvaSwvXig/OiAqcXVhZHJhbnQtMiAqKS9pLC9eKD86ICpxdWFkcmFudC0zICopL2ksL14oPzogKnF1YWRyYW50LTQgKikvaSwvXig/OlsiXVtgXSkvaSwvXig/OlteYCJdKykvaSwvXig/OltgXVsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86XHMqOlxzKlxbXHMqKS9pLC9eKD86KDEpfCgwKC5cZCspPykpL2ksL14oPzpccypcXSAqKS9pLC9eKD86XHMqLFxzKikvaSwvXig/OigxKXwoMCguXGQrKT8pKS9pLC9eKD86ICpxdWFkcmFudENoYXJ0ICopL2ksL14oPzpbQS1aYS16XSspL2ksL14oPzo6KS9pLC9eKD86XCspL2ksL14oPzosKS9pLC9eKD86PSkvaSwvXig/Oj0pL2ksL14oPzpcKikvaSwvXig/OiMpL2ksL14oPzpbXF9dKS9pLC9eKD86XC4pL2ksL14oPzomKS9pLC9eKD86LSkvaSwvXig/OlswLTldKykvaSwvXig/OlxzKS9pLC9eKD86OykvaSwvXig/OlshIiMkJSYnKissLS5gP1xcXy9dKS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7cG9pbnRfeTp7cnVsZXM6WzMwXSxpbmNsdXNpdmU6ITF9LHBvaW50X3g6e3J1bGVzOlsyOV0saW5jbHVzaXZlOiExfSxwb2ludF9zdGFydDp7cnVsZXM6WzI3LDI4XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMSwxMl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls5XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzddLGluY2x1c2l2ZTohMX0sdGl0bGU6e3J1bGVzOls1XSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzIxLDIyXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzI0LDI1XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNiw4LDEwLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIzLDI2LDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIF90fSgpO0Z0LmxleGVyPU5lO2Z1bmN0aW9uIGduKCl7dGhpcy55eT17fX1yZXR1cm4gZ24ucHJvdG90eXBlPUZ0LEZ0LlBhcnNlcj1nbixuZXcgZ259KCk7ZnZlLnBhcnNlcj1mdmU7Y29uc3QgVG5uPWZ2ZSxQcD1mMmUoKTtjbGFzcyBDbm57Y29uc3RydWN0b3IoKXt0aGlzLmNvbmZpZz10aGlzLmdldERlZmF1bHRDb25maWcoKSx0aGlzLnRoZW1lQ29uZmlnPXRoaXMuZ2V0RGVmYXVsdFRoZW1lQ29uZmlnKCksdGhpcy5kYXRhPXRoaXMuZ2V0RGVmYXVsdERhdGEoKX1nZXREZWZhdWx0RGF0YSgpe3JldHVybnt0aXRsZVRleHQ6IiIscXVhZHJhbnQxVGV4dDoiIixxdWFkcmFudDJUZXh0OiIiLHF1YWRyYW50M1RleHQ6IiIscXVhZHJhbnQ0VGV4dDoiIix4QXhpc0xlZnRUZXh0OiIiLHhBeGlzUmlnaHRUZXh0OiIiLHlBeGlzQm90dG9tVGV4dDoiIix5QXhpc1RvcFRleHQ6IiIscG9pbnRzOltdfX1nZXREZWZhdWx0Q29uZmlnKCl7dmFyIHMsdSxkLHAsdixiLHksVCxfLEEsUCxSLEYsaixLLGVlLGllLG9lO3JldHVybntzaG93WEF4aXM6ITAsc2hvd1lBeGlzOiEwLHNob3dUaXRsZTohMCxjaGFydEhlaWdodDooKHM9c2gucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOnMuY2hhcnRXaWR0aCl8fDUwMCxjaGFydFdpZHRoOigodT1zaC5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6dS5jaGFydEhlaWdodCl8fDUwMCx0aXRsZVBhZGRpbmc6KChkPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpkLnRpdGxlUGFkZGluZyl8fDEwLHRpdGxlRm9udFNpemU6KChwPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpwLnRpdGxlRm9udFNpemUpfHwyMCxxdWFkcmFudFBhZGRpbmc6KCh2PXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDp2LnF1YWRyYW50UGFkZGluZyl8fDUseEF4aXNMYWJlbFBhZGRpbmc6KChiPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpiLnhBeGlzTGFiZWxQYWRkaW5nKXx8NSx5QXhpc0xhYmVsUGFkZGluZzooKHk9c2gucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOnkueUF4aXNMYWJlbFBhZGRpbmcpfHw1LHhBeGlzTGFiZWxGb250U2l6ZTooKFQ9c2gucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOlQueEF4aXNMYWJlbEZvbnRTaXplKXx8MTYseUF4aXNMYWJlbEZvbnRTaXplOigoXz1zaC5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6Xy55QXhpc0xhYmVsRm9udFNpemUpfHwxNixxdWFkcmFudExhYmVsRm9udFNpemU6KChBPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpBLnF1YWRyYW50TGFiZWxGb250U2l6ZSl8fDE2LHF1YWRyYW50VGV4dFRvcFBhZGRpbmc6KChQPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpQLnF1YWRyYW50VGV4dFRvcFBhZGRpbmcpfHw1LHBvaW50VGV4dFBhZGRpbmc6KChSPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpSLnBvaW50VGV4dFBhZGRpbmcpfHw1LHBvaW50TGFiZWxGb250U2l6ZTooKEY9c2gucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOkYucG9pbnRMYWJlbEZvbnRTaXplKXx8MTIscG9pbnRSYWRpdXM6KChqPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpqLnBvaW50UmFkaXVzKXx8NSx4QXhpc1Bvc2l0aW9uOigoSz1zaC5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6Sy54QXhpc1Bvc2l0aW9uKXx8InRvcCIseUF4aXNQb3NpdGlvbjooKGVlPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDplZS55QXhpc1Bvc2l0aW9uKXx8ImxlZnQiLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDooKGllPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDppZS5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgpfHwxLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDooKG9lPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpvZS5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgpfHwyfX1nZXREZWZhdWx0VGhlbWVDb25maWcoKXtyZXR1cm57cXVhZHJhbnQxRmlsbDpQcC5xdWFkcmFudDFGaWxsLHF1YWRyYW50MkZpbGw6UHAucXVhZHJhbnQyRmlsbCxxdWFkcmFudDNGaWxsOlBwLnF1YWRyYW50M0ZpbGwscXVhZHJhbnQ0RmlsbDpQcC5xdWFkcmFudDRGaWxsLHF1YWRyYW50MVRleHRGaWxsOlBwLnF1YWRyYW50MVRleHRGaWxsLHF1YWRyYW50MlRleHRGaWxsOlBwLnF1YWRyYW50MlRleHRGaWxsLHF1YWRyYW50M1RleHRGaWxsOlBwLnF1YWRyYW50M1RleHRGaWxsLHF1YWRyYW50NFRleHRGaWxsOlBwLnF1YWRyYW50NFRleHRGaWxsLHF1YWRyYW50UG9pbnRGaWxsOlBwLnF1YWRyYW50UG9pbnRGaWxsLHF1YWRyYW50UG9pbnRUZXh0RmlsbDpQcC5xdWFkcmFudFBvaW50VGV4dEZpbGwscXVhZHJhbnRYQXhpc1RleHRGaWxsOlBwLnF1YWRyYW50WEF4aXNUZXh0RmlsbCxxdWFkcmFudFlBeGlzVGV4dEZpbGw6UHAucXVhZHJhbnRZQXhpc1RleHRGaWxsLHF1YWRyYW50VGl0bGVGaWxsOlBwLnF1YWRyYW50VGl0bGVGaWxsLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsOlBwLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsOlBwLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfX1jbGVhcigpe3RoaXMuY29uZmlnPXRoaXMuZ2V0RGVmYXVsdENvbmZpZygpLHRoaXMudGhlbWVDb25maWc9dGhpcy5nZXREZWZhdWx0VGhlbWVDb25maWcoKSx0aGlzLmRhdGE9dGhpcy5nZXREZWZhdWx0RGF0YSgpLFhlLmluZm8oImNsZWFyIGNhbGxlZCIpfXNldERhdGEocyl7dGhpcy5kYXRhPXsuLi50aGlzLmRhdGEsLi4uc319YWRkUG9pbnRzKHMpe3RoaXMuZGF0YS5wb2ludHM9Wy4uLnMsLi4udGhpcy5kYXRhLnBvaW50c119c2V0Q29uZmlnKHMpe1hlLnRyYWNlKCJzZXRDb25maWcgY2FsbGVkIHdpdGg6ICIscyksdGhpcy5jb25maWc9ey4uLnRoaXMuY29uZmlnLC4uLnN9fXNldFRoZW1lQ29uZmlnKHMpe1hlLnRyYWNlKCJzZXRUaGVtZUNvbmZpZyBjYWxsZWQgd2l0aDogIixzKSx0aGlzLnRoZW1lQ29uZmlnPXsuLi50aGlzLnRoZW1lQ29uZmlnLC4uLnN9fWNhbGN1bGF0ZVNwYWNlKHMsdSxkLHApe2NvbnN0IHY9dGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcqMit0aGlzLmNvbmZpZy54QXhpc0xhYmVsRm9udFNpemUsYj17dG9wOnM9PT0idG9wIiYmdT92OjAsYm90dG9tOnM9PT0iYm90dG9tIiYmdT92OjB9LHk9dGhpcy5jb25maWcueUF4aXNMYWJlbFBhZGRpbmcqMit0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsVD17bGVmdDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09ImxlZnQiJiZkP3k6MCxyaWdodDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09InJpZ2h0IiYmZD95OjB9LF89dGhpcy5jb25maWcudGl0bGVGb250U2l6ZSt0aGlzLmNvbmZpZy50aXRsZVBhZGRpbmcqMixBPXt0b3A6cD9fOjB9LFA9dGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nK1QubGVmdCxSPXRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZytiLnRvcCtBLnRvcCxGPXRoaXMuY29uZmlnLmNoYXJ0V2lkdGgtdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nKjItVC5sZWZ0LVQucmlnaHQsaj10aGlzLmNvbmZpZy5jaGFydEhlaWdodC10aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcqMi1iLnRvcC1iLmJvdHRvbS1BLnRvcCxLPUYvMixlZT1qLzI7cmV0dXJue3hBeGlzU3BhY2U6Yix5QXhpc1NwYWNlOlQsdGl0bGVTcGFjZTpBLHF1YWRyYW50U3BhY2U6e3F1YWRyYW50TGVmdDpQLHF1YWRyYW50VG9wOlIscXVhZHJhbnRXaWR0aDpGLHF1YWRyYW50SGFsZldpZHRoOksscXVhZHJhbnRIZWlnaHQ6aixxdWFkcmFudEhhbGZIZWlnaHQ6ZWV9fX1nZXRBeGlzTGFiZWxzKHMsdSxkLHApe2NvbnN0e3F1YWRyYW50U3BhY2U6dix0aXRsZVNwYWNlOmJ9PXAse3F1YWRyYW50SGFsZkhlaWdodDp5LHF1YWRyYW50SGVpZ2h0OlQscXVhZHJhbnRMZWZ0Ol8scXVhZHJhbnRIYWxmV2lkdGg6QSxxdWFkcmFudFRvcDpQLHF1YWRyYW50V2lkdGg6Un09dixGPSEhdGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0LGo9ISF0aGlzLmRhdGEueUF4aXNUb3BUZXh0LEs9W107cmV0dXJuIHRoaXMuZGF0YS54QXhpc0xlZnRUZXh0JiZ1JiZLLnB1c2goe3RleHQ6dGhpcy5kYXRhLnhBeGlzTGVmdFRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50WEF4aXNUZXh0RmlsbCx4Ol8rKEY/QS8yOjApLHk6cz09PSJ0b3AiP3RoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK2IudG9wOnRoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK1ArVCt0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcsZm9udFNpemU6dGhpcy5jb25maWcueEF4aXNMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOkY/ImNlbnRlciI6ImxlZnQiLGhvcml6b250YWxQb3M6InRvcCIscm90YXRpb246MH0pLHRoaXMuZGF0YS54QXhpc1JpZ2h0VGV4dCYmdSYmSy5wdXNoKHt0ZXh0OnRoaXMuZGF0YS54QXhpc1JpZ2h0VGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRYQXhpc1RleHRGaWxsLHg6XytBKyhGP0EvMjowKSx5OnM9PT0idG9wIj90aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZytiLnRvcDp0aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZytQK1QrdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLGZvbnRTaXplOnRoaXMuY29uZmlnLnhBeGlzTGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczpGPyJjZW50ZXIiOiJsZWZ0Iixob3Jpem9udGFsUG9zOiJ0b3AiLHJvdGF0aW9uOjB9KSx0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0JiZkJiZLLnB1c2goe3RleHQ6dGhpcy5kYXRhLnlBeGlzQm90dG9tVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRZQXhpc1RleHRGaWxsLHg6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJsZWZ0Ij90aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZzp0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZytfK1IrdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLHk6UCtULShqP3kvMjowKSxmb250U2l6ZTp0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsdmVydGljYWxQb3M6aj8iY2VudGVyIjoibGVmdCIsaG9yaXpvbnRhbFBvczoidG9wIixyb3RhdGlvbjotOTB9KSx0aGlzLmRhdGEueUF4aXNUb3BUZXh0JiZkJiZLLnB1c2goe3RleHQ6dGhpcy5kYXRhLnlBeGlzVG9wVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRZQXhpc1RleHRGaWxsLHg6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJsZWZ0Ij90aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZzp0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZytfK1IrdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLHk6UCt5LShqP3kvMjowKSxmb250U2l6ZTp0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsdmVydGljYWxQb3M6aj8iY2VudGVyIjoibGVmdCIsaG9yaXpvbnRhbFBvczoidG9wIixyb3RhdGlvbjotOTB9KSxLfWdldFF1YWRyYW50cyhzKXtjb25zdHtxdWFkcmFudFNwYWNlOnV9PXMse3F1YWRyYW50SGFsZkhlaWdodDpkLHF1YWRyYW50TGVmdDpwLHF1YWRyYW50SGFsZldpZHRoOnYscXVhZHJhbnRUb3A6Yn09dSx5PVt7dGV4dDp7dGV4dDp0aGlzLmRhdGEucXVhZHJhbnQxVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQxVGV4dEZpbGwseDowLHk6MCxmb250U2l6ZTp0aGlzLmNvbmZpZy5xdWFkcmFudExhYmVsRm9udFNpemUsdmVydGljYWxQb3M6ImNlbnRlciIsaG9yaXpvbnRhbFBvczoibWlkZGxlIixyb3RhdGlvbjowfSx4OnArdix5OmIsd2lkdGg6dixoZWlnaHQ6ZCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQxRmlsbH0se3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50MlRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50MlRleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDpwLHk6Yix3aWR0aDp2LGhlaWdodDpkLGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDJGaWxsfSx7dGV4dDp7dGV4dDp0aGlzLmRhdGEucXVhZHJhbnQzVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQzVGV4dEZpbGwseDowLHk6MCxmb250U2l6ZTp0aGlzLmNvbmZpZy5xdWFkcmFudExhYmVsRm9udFNpemUsdmVydGljYWxQb3M6ImNlbnRlciIsaG9yaXpvbnRhbFBvczoibWlkZGxlIixyb3RhdGlvbjowfSx4OnAseTpiK2Qsd2lkdGg6dixoZWlnaHQ6ZCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQzRmlsbH0se3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50NFRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50NFRleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDpwK3YseTpiK2Qsd2lkdGg6dixoZWlnaHQ6ZCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQ0RmlsbH1dO2Zvcihjb25zdCBUIG9mIHkpVC50ZXh0Lng9VC54K1Qud2lkdGgvMix0aGlzLmRhdGEucG9pbnRzLmxlbmd0aD09PTA/KFQudGV4dC55PVQueStULmhlaWdodC8yLFQudGV4dC5ob3Jpem9udGFsUG9zPSJtaWRkbGUiKTooVC50ZXh0Lnk9VC55K3RoaXMuY29uZmlnLnF1YWRyYW50VGV4dFRvcFBhZGRpbmcsVC50ZXh0Lmhvcml6b250YWxQb3M9InRvcCIpO3JldHVybiB5fWdldFF1YWRyYW50UG9pbnRzKHMpe2NvbnN0e3F1YWRyYW50U3BhY2U6dX09cyx7cXVhZHJhbnRIZWlnaHQ6ZCxxdWFkcmFudExlZnQ6cCxxdWFkcmFudFRvcDp2LHF1YWRyYW50V2lkdGg6Yn09dSx5PXNEKCkuZG9tYWluKFswLDFdKS5yYW5nZShbcCxiK3BdKSxUPXNEKCkuZG9tYWluKFswLDFdKS5yYW5nZShbZCt2LHZdKTtyZXR1cm4gdGhpcy5kYXRhLnBvaW50cy5tYXAoQT0+KHt4OnkoQS54KSx5OlQoQS55KSxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRQb2ludEZpbGwscmFkaXVzOnRoaXMuY29uZmlnLnBvaW50UmFkaXVzLHRleHQ6e3RleHQ6QS50ZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFBvaW50VGV4dEZpbGwseDp5KEEueCkseTpUKEEueSkrdGhpcy5jb25maWcucG9pbnRUZXh0UGFkZGluZyx2ZXJ0aWNhbFBvczoiY2VudGVyIixob3Jpem9udGFsUG9zOiJ0b3AiLGZvbnRTaXplOnRoaXMuY29uZmlnLnBvaW50TGFiZWxGb250U2l6ZSxyb3RhdGlvbjowfX0pKX1nZXRCb3JkZXJzKHMpe2NvbnN0IHU9dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLzIse3F1YWRyYW50U3BhY2U6ZH09cyx7cXVhZHJhbnRIYWxmSGVpZ2h0OnAscXVhZHJhbnRIZWlnaHQ6dixxdWFkcmFudExlZnQ6YixxdWFkcmFudEhhbGZXaWR0aDp5LHF1YWRyYW50VG9wOlQscXVhZHJhbnRXaWR0aDpffT1kO3JldHVyblt7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpiLXUseTE6VCx4MjpiK18rdSx5MjpUfSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpiK18seTE6VCt1LHgyOmIrXyx5MjpUK3YtdX0se3N0cm9rZUZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxzdHJva2VXaWR0aDp0aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgseDE6Yi11LHkxOlQrdix4MjpiK18rdSx5MjpUK3Z9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOmIseTE6VCt1LHgyOmIseTI6VCt2LXV9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOmIreSx5MTpUK3UseDI6Yit5LHkyOlQrdi11fSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpiK3UseTE6VCtwLHgyOmIrXy11LHkyOlQrcH1dfWdldFRpdGxlKHMpe2lmKHMpcmV0dXJue3RleHQ6dGhpcy5kYXRhLnRpdGxlVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRUaXRsZUZpbGwsZm9udFNpemU6dGhpcy5jb25maWcudGl0bGVGb250U2l6ZSxob3Jpem9udGFsUG9zOiJ0b3AiLHZlcnRpY2FsUG9zOiJjZW50ZXIiLHJvdGF0aW9uOjAseTp0aGlzLmNvbmZpZy50aXRsZVBhZGRpbmcseDp0aGlzLmNvbmZpZy5jaGFydFdpZHRoLzJ9fWJ1aWxkKCl7Y29uc3Qgcz10aGlzLmNvbmZpZy5zaG93WEF4aXMmJiEhKHRoaXMuZGF0YS54QXhpc0xlZnRUZXh0fHx0aGlzLmRhdGEueEF4aXNSaWdodFRleHQpLHU9dGhpcy5jb25maWcuc2hvd1lBeGlzJiYhISh0aGlzLmRhdGEueUF4aXNUb3BUZXh0fHx0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0KSxkPXRoaXMuY29uZmlnLnNob3dUaXRsZSYmISF0aGlzLmRhdGEudGl0bGVUZXh0LHA9dGhpcy5kYXRhLnBvaW50cy5sZW5ndGg+MD8iYm90dG9tIjp0aGlzLmNvbmZpZy54QXhpc1Bvc2l0aW9uLHY9dGhpcy5jYWxjdWxhdGVTcGFjZShwLHMsdSxkKTtyZXR1cm57cG9pbnRzOnRoaXMuZ2V0UXVhZHJhbnRQb2ludHModikscXVhZHJhbnRzOnRoaXMuZ2V0UXVhZHJhbnRzKHYpLGF4aXNMYWJlbHM6dGhpcy5nZXRBeGlzTGFiZWxzKHAscyx1LHYpLGJvcmRlckxpbmVzOnRoaXMuZ2V0Qm9yZGVycyh2KSx0aXRsZTp0aGlzLmdldFRpdGxlKGQpfX19Y29uc3QgU25uPXF0KCk7ZnVuY3Rpb24gVTcoaSl7cmV0dXJuIFlmKGkudHJpbSgpLFNubil9Y29uc3QgUmc9bmV3IENubjtmdW5jdGlvbiBfbm4oaSl7Umcuc2V0RGF0YSh7cXVhZHJhbnQxVGV4dDpVNyhpLnRleHQpfSl9ZnVuY3Rpb24gQW5uKGkpe1JnLnNldERhdGEoe3F1YWRyYW50MlRleHQ6VTcoaS50ZXh0KX0pfWZ1bmN0aW9uIExubihpKXtSZy5zZXREYXRhKHtxdWFkcmFudDNUZXh0OlU3KGkudGV4dCl9KX1mdW5jdGlvbiBNbm4oaSl7Umcuc2V0RGF0YSh7cXVhZHJhbnQ0VGV4dDpVNyhpLnRleHQpfSl9ZnVuY3Rpb24gRG5uKGkpe1JnLnNldERhdGEoe3hBeGlzTGVmdFRleHQ6VTcoaS50ZXh0KX0pfWZ1bmN0aW9uIElubihpKXtSZy5zZXREYXRhKHt4QXhpc1JpZ2h0VGV4dDpVNyhpLnRleHQpfSl9ZnVuY3Rpb24gT25uKGkpe1JnLnNldERhdGEoe3lBeGlzVG9wVGV4dDpVNyhpLnRleHQpfSl9ZnVuY3Rpb24gTm5uKGkpe1JnLnNldERhdGEoe3lBeGlzQm90dG9tVGV4dDpVNyhpLnRleHQpfSl9ZnVuY3Rpb24gUG5uKGkscyx1KXtSZy5hZGRQb2ludHMoW3t4OnMseTp1LHRleHQ6VTcoaS50ZXh0KX1dKX1mdW5jdGlvbiBCbm4oaSl7Umcuc2V0Q29uZmlnKHtjaGFydFdpZHRoOml9KX1mdW5jdGlvbiBGbm4oaSl7Umcuc2V0Q29uZmlnKHtjaGFydEhlaWdodDppfSl9ZnVuY3Rpb24gUm5uKCl7Y29uc3QgaT1xdCgpLHt0aGVtZVZhcmlhYmxlczpzLHF1YWRyYW50Q2hhcnQ6dX09aTtyZXR1cm4gdSYmUmcuc2V0Q29uZmlnKHUpLFJnLnNldFRoZW1lQ29uZmlnKHtxdWFkcmFudDFGaWxsOnMucXVhZHJhbnQxRmlsbCxxdWFkcmFudDJGaWxsOnMucXVhZHJhbnQyRmlsbCxxdWFkcmFudDNGaWxsOnMucXVhZHJhbnQzRmlsbCxxdWFkcmFudDRGaWxsOnMucXVhZHJhbnQ0RmlsbCxxdWFkcmFudDFUZXh0RmlsbDpzLnF1YWRyYW50MVRleHRGaWxsLHF1YWRyYW50MlRleHRGaWxsOnMucXVhZHJhbnQyVGV4dEZpbGwscXVhZHJhbnQzVGV4dEZpbGw6cy5xdWFkcmFudDNUZXh0RmlsbCxxdWFkcmFudDRUZXh0RmlsbDpzLnF1YWRyYW50NFRleHRGaWxsLHF1YWRyYW50UG9pbnRGaWxsOnMucXVhZHJhbnRQb2ludEZpbGwscXVhZHJhbnRQb2ludFRleHRGaWxsOnMucXVhZHJhbnRQb2ludFRleHRGaWxsLHF1YWRyYW50WEF4aXNUZXh0RmlsbDpzLnF1YWRyYW50WEF4aXNUZXh0RmlsbCxxdWFkcmFudFlBeGlzVGV4dEZpbGw6cy5xdWFkcmFudFlBeGlzVGV4dEZpbGwscXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw6cy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxxdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbDpzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHF1YWRyYW50VGl0bGVGaWxsOnMucXVhZHJhbnRUaXRsZUZpbGx9KSxSZy5zZXREYXRhKHt0aXRsZVRleHQ6QXAoKX0pLFJnLmJ1aWxkKCl9Y29uc3Qgam5uPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6VG5uLGRiOntzZXRXaWR0aDpCbm4sc2V0SGVpZ2h0OkZubixzZXRRdWFkcmFudDFUZXh0Ol9ubixzZXRRdWFkcmFudDJUZXh0OkFubixzZXRRdWFkcmFudDNUZXh0OkxubixzZXRRdWFkcmFudDRUZXh0Ok1ubixzZXRYQXhpc0xlZnRUZXh0OkRubixzZXRYQXhpc1JpZ2h0VGV4dDpJbm4sc2V0WUF4aXNUb3BUZXh0Ok9ubixzZXRZQXhpc0JvdHRvbVRleHQ6Tm5uLGFkZFBvaW50OlBubixnZXRRdWFkcmFudERhdGE6Um5uLGNsZWFyOmZ1bmN0aW9uKCl7UmcuY2xlYXIoKSxQZygpfSxzZXRBY2NUaXRsZTpCZyxnZXRBY2NUaXRsZTpDcCxzZXREaWFncmFtVGl0bGU6Y20sZ2V0RGlhZ3JhbVRpdGxlOkFwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLHNldEFjY0Rlc2NyaXB0aW9uOlNwfSxyZW5kZXJlcjp7ZHJhdzooaSxzLHUsZCk9Pnt2YXIgZGUsWCxnZTtmdW5jdGlvbiBwKFcpe3JldHVybiBXPT09InRvcCI/ImhhbmdpbmciOiJtaWRkbGUifWZ1bmN0aW9uIHYoVyl7cmV0dXJuIFc9PT0ibGVmdCI/InN0YXJ0IjoibWlkZGxlIn1mdW5jdGlvbiBiKFcpe3JldHVybmB0cmFuc2xhdGUoJHtXLnh9LCAke1cueX0pIHJvdGF0ZSgke1cucm90YXRpb258fDB9KWB9Y29uc3QgeT1xdCgpO1hlLmRlYnVnKGBSZW5kZXJpbmcgcXVhZHJhbnQgY2hhcnQKYCtpKTtjb25zdCBUPXkuc2VjdXJpdHlMZXZlbDtsZXQgXztUPT09InNhbmRib3giJiYoXz1JcigiI2kiK3MpKTtjb25zdCBQPUlyKFQ9PT0ic2FuZGJveCI/Xy5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5Iikuc2VsZWN0KGBbaWQ9IiR7c30iXWApLFI9UC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm1haW4iKSxGPSgoZGU9eS5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6ZGUuY2hhcnRXaWR0aCl8fDUwMCxqPSgoWD15LnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpYLmNoYXJ0SGVpZ2h0KXx8NTAwO05nKFAsaixGLCgoZ2U9eS5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6Z2UudXNlTWF4V2lkdGgpfHwhMCksUC5hdHRyKCJ2aWV3Qm94IiwiMCAwICIrRisiICIraiksZC5kYi5zZXRIZWlnaHQoaiksZC5kYi5zZXRXaWR0aChGKTtjb25zdCBLPWQuZGIuZ2V0UXVhZHJhbnREYXRhKCksZWU9Ui5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInF1YWRyYW50cyIpLGllPVIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJib3JkZXIiKSxvZT1SLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZGF0YS1wb2ludHMiKSxwZT1SLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWxzIiksYmU9Ui5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpdGxlIik7Sy50aXRsZSYmYmUuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiZmlsbCIsSy50aXRsZS5maWxsKS5hdHRyKCJmb250LXNpemUiLEsudGl0bGUuZm9udFNpemUpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIixwKEsudGl0bGUuaG9yaXpvbnRhbFBvcykpLmF0dHIoInRleHQtYW5jaG9yIix2KEsudGl0bGUudmVydGljYWxQb3MpKS5hdHRyKCJ0cmFuc2Zvcm0iLGIoSy50aXRsZSkpLnRleHQoSy50aXRsZS50ZXh0KSxLLmJvcmRlckxpbmVzJiZpZS5zZWxlY3RBbGwoImxpbmUiKS5kYXRhKEsuYm9yZGVyTGluZXMpLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLFc9PlcueDEpLmF0dHIoInkxIixXPT5XLnkxKS5hdHRyKCJ4MiIsVz0+Vy54MikuYXR0cigieTIiLFc9PlcueTIpLnN0eWxlKCJzdHJva2UiLFc9Plcuc3Ryb2tlRmlsbCkuc3R5bGUoInN0cm9rZS13aWR0aCIsVz0+Vy5zdHJva2VXaWR0aCk7Y29uc3QgYWU9ZWUuc2VsZWN0QWxsKCJnLnF1YWRyYW50IikuZGF0YShLLnF1YWRyYW50cykuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInF1YWRyYW50Iik7YWUuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsVz0+Vy54KS5hdHRyKCJ5IixXPT5XLnkpLmF0dHIoIndpZHRoIixXPT5XLndpZHRoKS5hdHRyKCJoZWlnaHQiLFc9PlcuaGVpZ2h0KS5hdHRyKCJmaWxsIixXPT5XLmZpbGwpLGFlLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImZpbGwiLFc9PlcudGV4dC5maWxsKS5hdHRyKCJmb250LXNpemUiLFc9PlcudGV4dC5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLFc9PnAoVy50ZXh0Lmhvcml6b250YWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsVz0+dihXLnRleHQudmVydGljYWxQb3MpKS5hdHRyKCJ0cmFuc2Zvcm0iLFc9PmIoVy50ZXh0KSkudGV4dChXPT5XLnRleHQudGV4dCkscGUuc2VsZWN0QWxsKCJnLmxhYmVsIikuZGF0YShLLmF4aXNMYWJlbHMpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnRleHQoVz0+Vy50ZXh0KS5hdHRyKCJmaWxsIixXPT5XLmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIsVz0+Vy5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLFc9PnAoVy5ob3Jpem9udGFsUG9zKSkuYXR0cigidGV4dC1hbmNob3IiLFc9PnYoVy52ZXJ0aWNhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIsVz0+YihXKSk7Y29uc3Qgc2U9b2Uuc2VsZWN0QWxsKCJnLmRhdGEtcG9pbnQiKS5kYXRhKEsucG9pbnRzKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZGF0YS1wb2ludCIpO3NlLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLFc9PlcueCkuYXR0cigiY3kiLFc9PlcueSkuYXR0cigiciIsVz0+Vy5yYWRpdXMpLmF0dHIoImZpbGwiLFc9PlcuZmlsbCksc2UuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkudGV4dChXPT5XLnRleHQudGV4dCkuYXR0cigiZmlsbCIsVz0+Vy50ZXh0LmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIsVz0+Vy50ZXh0LmZvbnRTaXplKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsVz0+cChXLnRleHQuaG9yaXpvbnRhbFBvcykpLmF0dHIoInRleHQtYW5jaG9yIixXPT52KFcudGV4dC52ZXJ0aWNhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIsVz0+YihXLnRleHQpKX19LHN0eWxlczooKT0+IiJ9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBkdmU9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihQZSxqZSxJZSxTZSl7Zm9yKEllPUllfHx7fSxTZT1QZS5sZW5ndGg7U2UtLTtJZVtQZVtTZV1dPWplKTtyZXR1cm4gSWV9LHM9WzEsMTAsMTIsMTQsMTYsMTgsMTksMjEsMjNdLHU9WzIsNl0sZD1bMSwzXSxwPVsxLDVdLHY9WzEsNl0sYj1bMSw3XSx5PVsxLDUsMTAsMTIsMTQsMTYsMTgsMTksMjEsMjMsMzQsMzUsMzZdLFQ9WzEsMjVdLF89WzEsMjZdLEE9WzEsMjhdLFA9WzEsMjldLFI9WzEsMzBdLEY9WzEsMzFdLGo9WzEsMzJdLEs9WzEsMzNdLGVlPVsxLDM0XSxpZT1bMSwzNV0sb2U9WzEsMzZdLHBlPVsxLDM3XSxiZT1bMSw0M10sYWU9WzEsNDJdLG5lPVsxLDQ3XSxzZT1bMSw1MF0sZGU9WzEsMTAsMTIsMTQsMTYsMTgsMTksMjEsMjMsMzQsMzUsMzZdLFg9WzEsMTAsMTIsMTQsMTYsMTgsMTksMjEsMjMsMjQsMjYsMjcsMjgsMzQsMzUsMzZdLGdlPVsxLDEwLDEyLDE0LDE2LDE4LDE5LDIxLDIzLDI0LDI2LDI3LDI4LDM0LDM1LDM2LDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwXSxXPVsxLDY0XSx4ZT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZW9sOjQsWFlDSEFSVDo1LGNoYXJ0Q29uZmlnOjYsZG9jdW1lbnQ6NyxDSEFSVF9PUklFTlRBVElPTjo4LHN0YXRlbWVudDo5LHRpdGxlOjEwLHRleHQ6MTEsWF9BWElTOjEyLHBhcnNlWEF4aXM6MTMsWV9BWElTOjE0LHBhcnNlWUF4aXM6MTUsTElORToxNixwbG90RGF0YToxNyxCQVI6MTgsYWNjX3RpdGxlOjE5LGFjY190aXRsZV92YWx1ZToyMCxhY2NfZGVzY3I6MjEsYWNjX2Rlc2NyX3ZhbHVlOjIyLGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MjMsU1FVQVJFX0JSQUNFU19TVEFSVDoyNCxjb21tYVNlcGFyYXRlZE51bWJlcnM6MjUsU1FVQVJFX0JSQUNFU19FTkQ6MjYsTlVNQkVSX1dJVEhfREVDSU1BTDoyNyxDT01NQToyOCx4QXhpc0RhdGE6MjksYmFuZERhdGE6MzAsQVJST1dfREVMSU1JVEVSOjMxLGNvbW1hU2VwYXJhdGVkVGV4dHM6MzIseUF4aXNEYXRhOjMzLE5FV0xJTkU6MzQsU0VNSTozNSxFT0Y6MzYsYWxwaGFOdW06MzcsU1RSOjM4LE1EX1NUUjozOSxhbHBoYU51bVRva2VuOjQwLEFNUDo0MSxOVU06NDIsQUxQSEE6NDMsUExVUzo0NCxFUVVBTFM6NDUsTVVMVDo0NixET1Q6NDcsQlJLVDo0OCxNSU5VUzo0OSxVTkRFUlNDT1JFOjUwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw1OiJYWUNIQVJUIiw4OiJDSEFSVF9PUklFTlRBVElPTiIsMTA6InRpdGxlIiwxMjoiWF9BWElTIiwxNDoiWV9BWElTIiwxNjoiTElORSIsMTg6IkJBUiIsMTk6ImFjY190aXRsZSIsMjA6ImFjY190aXRsZV92YWx1ZSIsMjE6ImFjY19kZXNjciIsMjI6ImFjY19kZXNjcl92YWx1ZSIsMjM6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDI0OiJTUVVBUkVfQlJBQ0VTX1NUQVJUIiwyNjoiU1FVQVJFX0JSQUNFU19FTkQiLDI3OiJOVU1CRVJfV0lUSF9ERUNJTUFMIiwyODoiQ09NTUEiLDMxOiJBUlJPV19ERUxJTUlURVIiLDM0OiJORVdMSU5FIiwzNToiU0VNSSIsMzY6IkVPRiIsMzg6IlNUUiIsMzk6Ik1EX1NUUiIsNDE6IkFNUCIsNDI6Ik5VTSIsNDM6IkFMUEhBIiw0NDoiUExVUyIsNDU6IkVRVUFMUyIsNDY6Ik1VTFQiLDQ3OiJET1QiLDQ4OiJCUktUIiw0OToiTUlOVVMiLDUwOiJVTkRFUlNDT1JFIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDNdLFszLDJdLFszLDFdLFs2LDFdLFs3LDBdLFs3LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDNdLFs5LDJdLFs5LDNdLFs5LDJdLFs5LDJdLFs5LDFdLFsxNywzXSxbMjUsM10sWzI1LDFdLFsxMywxXSxbMTMsMl0sWzEzLDFdLFsyOSwxXSxbMjksM10sWzMwLDNdLFszMiwzXSxbMzIsMV0sWzE1LDFdLFsxNSwyXSxbMTUsMV0sWzMzLDNdLFs0LDFdLFs0LDFdLFs0LDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFszNywxXSxbMzcsMl0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGplLEllLFNlLENlLGtlLEtlLEZ0KXt2YXIgTmU9S2UubGVuZ3RoLTE7c3dpdGNoKGtlKXtjYXNlIDU6Q2Uuc2V0T3JpZW50YXRpb24oS2VbTmVdKTticmVhaztjYXNlIDk6Q2Uuc2V0RGlhZ3JhbVRpdGxlKEtlW05lXS50ZXh0LnRyaW0oKSk7YnJlYWs7Y2FzZSAxMjpDZS5zZXRMaW5lRGF0YSh7dGV4dDoiIix0eXBlOiJ0ZXh0In0sS2VbTmVdKTticmVhaztjYXNlIDEzOkNlLnNldExpbmVEYXRhKEtlW05lLTFdLEtlW05lXSk7YnJlYWs7Y2FzZSAxNDpDZS5zZXRCYXJEYXRhKHt0ZXh0OiIiLHR5cGU6InRleHQifSxLZVtOZV0pO2JyZWFrO2Nhc2UgMTU6Q2Uuc2V0QmFyRGF0YShLZVtOZS0xXSxLZVtOZV0pO2JyZWFrO2Nhc2UgMTY6dGhpcy4kPUtlW05lXS50cmltKCksQ2Uuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDE3OmNhc2UgMTg6dGhpcy4kPUtlW05lXS50cmltKCksQ2Uuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDE5OnRoaXMuJD1LZVtOZS0xXTticmVhaztjYXNlIDIwOnRoaXMuJD1bTnVtYmVyKEtlW05lLTJdKSwuLi5LZVtOZV1dO2JyZWFrO2Nhc2UgMjE6dGhpcy4kPVtOdW1iZXIoS2VbTmVdKV07YnJlYWs7Y2FzZSAyMjpDZS5zZXRYQXhpc1RpdGxlKEtlW05lXSk7YnJlYWs7Y2FzZSAyMzpDZS5zZXRYQXhpc1RpdGxlKEtlW05lLTFdKTticmVhaztjYXNlIDI0OkNlLnNldFhBeGlzVGl0bGUoe3R5cGU6InRleHQiLHRleHQ6IiJ9KTticmVhaztjYXNlIDI1OkNlLnNldFhBeGlzQmFuZChLZVtOZV0pO2JyZWFrO2Nhc2UgMjY6Q2Uuc2V0WEF4aXNSYW5nZURhdGEoTnVtYmVyKEtlW05lLTJdKSxOdW1iZXIoS2VbTmVdKSk7YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9S2VbTmUtMV07YnJlYWs7Y2FzZSAyODp0aGlzLiQ9W0tlW05lLTJdLC4uLktlW05lXV07YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9W0tlW05lXV07YnJlYWs7Y2FzZSAzMDpDZS5zZXRZQXhpc1RpdGxlKEtlW05lXSk7YnJlYWs7Y2FzZSAzMTpDZS5zZXRZQXhpc1RpdGxlKEtlW05lLTFdKTticmVhaztjYXNlIDMyOkNlLnNldFlBeGlzVGl0bGUoe3R5cGU6InRleHQiLHRleHQ6IiJ9KTticmVhaztjYXNlIDMzOkNlLnNldFlBeGlzUmFuZ2VEYXRhKE51bWJlcihLZVtOZS0yXSksTnVtYmVyKEtlW05lXSkpO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPXt0ZXh0OktlW05lXSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSAzODp0aGlzLiQ9e3RleHQ6S2VbTmVdLHR5cGU6InRleHQifTticmVhaztjYXNlIDM5OnRoaXMuJD17dGV4dDpLZVtOZV0sdHlwZToibWFya2Rvd24ifTticmVhaztjYXNlIDQwOnRoaXMuJD1LZVtOZV07YnJlYWs7Y2FzZSA0MTp0aGlzLiQ9S2VbTmUtMV0rIiIrS2VbTmVdO2JyZWFrfX0sdGFibGU6W2kocyx1LHszOjEsNDoyLDc6NCw1OmQsMzQ6cCwzNTp2LDM2OmJ9KSx7MTpbM119LGkocyx1LHs0OjIsNzo0LDM6OCw1OmQsMzQ6cCwzNTp2LDM2OmJ9KSxpKHMsdSx7NDoyLDc6NCw2OjksMzoxMCw1OmQsODpbMSwxMV0sMzQ6cCwzNTp2LDM2OmJ9KSx7MTpbMiw0XSw5OjEyLDEwOlsxLDEzXSwxMjpbMSwxNF0sMTQ6WzEsMTVdLDE2OlsxLDE2XSwxODpbMSwxN10sMTk6WzEsMThdLDIxOlsxLDE5XSwyMzpbMSwyMF19LGkoeSxbMiwzNF0pLGkoeSxbMiwzNV0pLGkoeSxbMiwzNl0pLHsxOlsyLDFdfSxpKHMsdSx7NDoyLDc6NCwzOjIxLDU6ZCwzNDpwLDM1OnYsMzY6Yn0pLHsxOlsyLDNdfSxpKHksWzIsNV0pLGkocyxbMiw3XSx7NDoyMiwzNDpwLDM1OnYsMzY6Yn0pLHsxMToyMywzNzoyNCwzODpULDM5Ol8sNDA6MjcsNDE6QSw0MjpQLDQzOlIsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGV9LHsxMTozOSwxMzozOCwyNDpiZSwyNzphZSwyOTo0MCwzMDo0MSwzNzoyNCwzODpULDM5Ol8sNDA6MjcsNDE6QSw0MjpQLDQzOlIsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGV9LHsxMTo0NSwxNTo0NCwyNzpuZSwzMzo0NiwzNzoyNCwzODpULDM5Ol8sNDA6MjcsNDE6QSw0MjpQLDQzOlIsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGV9LHsxMTo0OSwxNzo0OCwyNDpzZSwzNzoyNCwzODpULDM5Ol8sNDA6MjcsNDE6QSw0MjpQLDQzOlIsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGV9LHsxMTo1MiwxNzo1MSwyNDpzZSwzNzoyNCwzODpULDM5Ol8sNDA6MjcsNDE6QSw0MjpQLDQzOlIsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGV9LHsyMDpbMSw1M119LHsyMjpbMSw1NF19LGkoZGUsWzIsMThdKSx7MTpbMiwyXX0saShkZSxbMiw4XSksaShkZSxbMiw5XSksaShYLFsyLDM3XSx7NDA6NTUsNDE6QSw0MjpQLDQzOlIsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGV9KSxpKFgsWzIsMzhdKSxpKFgsWzIsMzldKSxpKGdlLFsyLDQwXSksaShnZSxbMiw0Ml0pLGkoZ2UsWzIsNDNdKSxpKGdlLFsyLDQ0XSksaShnZSxbMiw0NV0pLGkoZ2UsWzIsNDZdKSxpKGdlLFsyLDQ3XSksaShnZSxbMiw0OF0pLGkoZ2UsWzIsNDldKSxpKGdlLFsyLDUwXSksaShnZSxbMiw1MV0pLGkoZGUsWzIsMTBdKSxpKGRlLFsyLDIyXSx7MzA6NDEsMjk6NTYsMjQ6YmUsMjc6YWV9KSxpKGRlLFsyLDI0XSksaShkZSxbMiwyNV0pLHszMTpbMSw1N119LHsxMTo1OSwzMjo1OCwzNzoyNCwzODpULDM5Ol8sNDA6MjcsNDE6QSw0MjpQLDQzOlIsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGV9LGkoZGUsWzIsMTFdKSxpKGRlLFsyLDMwXSx7MzM6NjAsMjc6bmV9KSxpKGRlLFsyLDMyXSksezMxOlsxLDYxXX0saShkZSxbMiwxMl0pLHsxNzo2MiwyNDpzZX0sezI1OjYzLDI3Old9LGkoZGUsWzIsMTRdKSx7MTc6NjUsMjQ6c2V9LGkoZGUsWzIsMTZdKSxpKGRlLFsyLDE3XSksaShnZSxbMiw0MV0pLGkoZGUsWzIsMjNdKSx7Mjc6WzEsNjZdfSx7MjY6WzEsNjddfSx7MjY6WzIsMjldLDI4OlsxLDY4XX0saShkZSxbMiwzMV0pLHsyNzpbMSw2OV19LGkoZGUsWzIsMTNdKSx7MjY6WzEsNzBdfSx7MjY6WzIsMjFdLDI4OlsxLDcxXX0saShkZSxbMiwxNV0pLGkoZGUsWzIsMjZdKSxpKGRlLFsyLDI3XSksezExOjU5LDMyOjcyLDM3OjI0LDM4OlQsMzk6Xyw0MDoyNyw0MTpBLDQyOlAsNDM6Uiw0NDpGLDQ1OmosNDY6Syw0NzplZSw0ODppZSw0OTpvZSw1MDpwZX0saShkZSxbMiwzM10pLGkoZGUsWzIsMTldKSx7MjU6NzMsMjc6V30sezI2OlsyLDI4XX0sezI2OlsyLDIwXX1dLGRlZmF1bHRBY3Rpb25zOns4OlsyLDFdLDEwOlsyLDNdLDIxOlsyLDJdLDcyOlsyLDI4XSw3MzpbMiwyMF19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oamUsSWUpe2lmKEllLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoamUpO2Vsc2V7dmFyIFNlPW5ldyBFcnJvcihqZSk7dGhyb3cgU2UuaGFzaD1JZSxTZX19LHBhcnNlOmZ1bmN0aW9uKGplKXt2YXIgSWU9dGhpcyxTZT1bMF0sQ2U9W10sa2U9W251bGxdLEtlPVtdLEZ0PXRoaXMudGFibGUsTmU9IiIsZ249MCxfdD0wLEV0PTIsR3Q9MSxsbj1LZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSx4dD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFB0PXt5eTp7fX07Zm9yKHZhciBRZSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LFFlKSYmKFB0Lnl5W1FlXT10aGlzLnl5W1FlXSk7eHQuc2V0SW5wdXQoamUsUHQueXkpLFB0Lnl5LmxleGVyPXh0LFB0Lnl5LnBhcnNlcj10aGlzLHR5cGVvZiB4dC55eWxsb2M+InUiJiYoeHQueXlsbG9jPXt9KTt2YXIgRHQ9eHQueXlsbG9jO0tlLnB1c2goRHQpO3ZhciBrdD14dC5vcHRpb25zJiZ4dC5vcHRpb25zLnJhbmdlczt0eXBlb2YgUHQueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9UHQueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gT24oKXt2YXIgcW47cmV0dXJuIHFuPUNlLnBvcCgpfHx4dC5sZXgoKXx8R3QsdHlwZW9mIHFuIT0ibnVtYmVyIiYmKHFuIGluc3RhbmNlb2YgQXJyYXkmJihDZT1xbixxbj1DZS5wb3AoKSkscW49SWUuc3ltYm9sc19bcW5dfHxxbikscW59Zm9yKHZhciBodCx6cix5dCxqaSx4aT17fSxNYSx6cyxhbyxUcjs7KXtpZih6cj1TZVtTZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t6cl0/eXQ9dGhpcy5kZWZhdWx0QWN0aW9uc1t6cl06KChodD09PW51bGx8fHR5cGVvZiBodD4idSIpJiYoaHQ9T24oKSkseXQ9RnRbenJdJiZGdFt6cl1baHRdKSx0eXBlb2YgeXQ+InUifHwheXQubGVuZ3RofHwheXRbMF0pe3ZhciBGbj0iIjtUcj1bXTtmb3IoTWEgaW4gRnRbenJdKXRoaXMudGVybWluYWxzX1tNYV0mJk1hPkV0JiZUci5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bTWFdKyInIik7eHQuc2hvd1Bvc2l0aW9uP0ZuPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGduKzEpK2A6CmAreHQuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtUci5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW2h0XXx8aHQpKyInIjpGbj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhnbisxKSsiOiBVbmV4cGVjdGVkICIrKGh0PT1HdD8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1todF18fGh0KSsiJyIpLHRoaXMucGFyc2VFcnJvcihGbix7dGV4dDp4dC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19baHRdfHxodCxsaW5lOnh0Lnl5bGluZW5vLGxvYzpEdCxleHBlY3RlZDpUcn0pfWlmKHl0WzBdaW5zdGFuY2VvZiBBcnJheSYmeXQubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit6cisiLCB0b2tlbjogIitodCk7c3dpdGNoKHl0WzBdKXtjYXNlIDE6U2UucHVzaChodCksa2UucHVzaCh4dC55eXRleHQpLEtlLnB1c2goeHQueXlsbG9jKSxTZS5wdXNoKHl0WzFdKSxodD1udWxsLF90PXh0Lnl5bGVuZyxOZT14dC55eXRleHQsZ249eHQueXlsaW5lbm8sRHQ9eHQueXlsbG9jO2JyZWFrO2Nhc2UgMjppZih6cz10aGlzLnByb2R1Y3Rpb25zX1t5dFsxXV1bMV0seGkuJD1rZVtrZS5sZW5ndGgtenNdLHhpLl8kPXtmaXJzdF9saW5lOktlW0tlLmxlbmd0aC0oenN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpLZVtLZS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpLZVtLZS5sZW5ndGgtKHpzfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOktlW0tlLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sa3QmJih4aS5fJC5yYW5nZT1bS2VbS2UubGVuZ3RoLSh6c3x8MSldLnJhbmdlWzBdLEtlW0tlLmxlbmd0aC0xXS5yYW5nZVsxXV0pLGppPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseSh4aSxbTmUsX3QsZ24sUHQueXkseXRbMV0sa2UsS2VdLmNvbmNhdChsbikpLHR5cGVvZiBqaTwidSIpcmV0dXJuIGppO3pzJiYoU2U9U2Uuc2xpY2UoMCwtMSp6cyoyKSxrZT1rZS5zbGljZSgwLC0xKnpzKSxLZT1LZS5zbGljZSgwLC0xKnpzKSksU2UucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t5dFsxXV1bMF0pLGtlLnB1c2goeGkuJCksS2UucHVzaCh4aS5fJCksYW89RnRbU2VbU2UubGVuZ3RoLTJdXVtTZVtTZS5sZW5ndGgtMV1dLFNlLnB1c2goYW8pO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxVPWZ1bmN0aW9uKCl7dmFyIFBlPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKEllLFNlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKEllLFNlKTtlbHNlIHRocm93IG5ldyBFcnJvcihJZSl9LHNldElucHV0OmZ1bmN0aW9uKGplLEllKXtyZXR1cm4gdGhpcy55eT1JZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9amUsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIGplPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1qZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9amUsdGhpcy5tYXRjaGVkKz1qZTt2YXIgSWU9amUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBJZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksamV9LHVucHV0OmZ1bmN0aW9uKGplKXt2YXIgSWU9amUubGVuZ3RoLFNlPWplLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9amUrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLUllKSx0aGlzLm9mZnNldC09SWU7dmFyIENlPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLFNlLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09U2UubGVuZ3RoLTEpO3ZhciBrZT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46U2U/KFNlLmxlbmd0aD09PUNlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrQ2VbQ2UubGVuZ3RoLVNlLmxlbmd0aF0ubGVuZ3RoLVNlWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tSWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1ba2VbMF0sa2VbMF0rdGhpcy55eWxlbmctSWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihqZSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKGplKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBqZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKGplLmxlbmd0aD4yMD8iLi4uIjoiIikramUuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgamU9dGhpcy5tYXRjaDtyZXR1cm4gamUubGVuZ3RoPDIwJiYoamUrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLWplLmxlbmd0aCkpLChqZS5zdWJzdHIoMCwyMCkrKGplLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgamU9dGhpcy5wYXN0SW5wdXQoKSxJZT1uZXcgQXJyYXkoamUubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gamUrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0llKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihqZSxJZSl7dmFyIFNlLENlLGtlO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihrZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihrZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxDZT1qZVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksQ2UmJih0aGlzLnl5bGluZW5vKz1DZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpDZT9DZVtDZS5sZW5ndGgtMV0ubGVuZ3RoLUNlW0NlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK2plWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPWplWzBdLHRoaXMubWF0Y2grPWplWzBdLHRoaXMubWF0Y2hlcz1qZSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShqZVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9amVbMF0sU2U9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsSWUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksU2UpcmV0dXJuIFNlO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBLZSBpbiBrZSl0aGlzW0tlXT1rZVtLZV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgamUsSWUsU2UsQ2U7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIga2U9dGhpcy5fY3VycmVudFJ1bGVzKCksS2U9MDtLZTxrZS5sZW5ndGg7S2UrKylpZihTZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2tlW0tlXV0pLFNlJiYoIUllfHxTZVswXS5sZW5ndGg+SWVbMF0ubGVuZ3RoKSl7aWYoSWU9U2UsQ2U9S2UsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoamU9dGhpcy50ZXN0X21hdGNoKFNlLGtlW0tlXSksamUhPT0hMSlyZXR1cm4gamU7aWYodGhpcy5fYmFja3RyYWNrKXtJZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBJZT8oamU9dGhpcy50ZXN0X21hdGNoKEllLGtlW0NlXSksamUhPT0hMT9qZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIEllPXRoaXMubmV4dCgpO3JldHVybiBJZXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oSWUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChJZSl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIEllPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIEllPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oSWUpe3JldHVybiBJZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKEllfHwwKSxJZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW0llXToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihJZSl7dGhpcy5iZWdpbihJZSl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oSWUsU2UsQ2Usa2Upe3N3aXRjaChDZSl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwzNDtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwzNDtjYXNlIDQ6cmV0dXJuIDM0O2Nhc2UgNTpicmVhaztjYXNlIDY6cmV0dXJuIDEwO2Nhc2UgNzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImFjY190aXRsZSIpLDE5O2Nhc2UgODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgOTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImFjY19kZXNjciIpLDIxO2Nhc2UgMTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDExOnRoaXMucHVzaFN0YXRlKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMzpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxNDpyZXR1cm4gNTtjYXNlIDE1OnJldHVybiA4O2Nhc2UgMTY6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJheGlzX2RhdGEiKSwiWF9BWElTIjtjYXNlIDE3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYXhpc19kYXRhIiksIllfQVhJUyI7Y2FzZSAxODpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImF4aXNfYmFuZF9kYXRhIiksMjQ7Y2FzZSAxOTpyZXR1cm4gMzE7Y2FzZSAyMDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImRhdGEiKSwxNjtjYXNlIDIxOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiZGF0YSIpLDE4O2Nhc2UgMjI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJkYXRhX2lubmVyIiksMjQ7Y2FzZSAyMzpyZXR1cm4gMjc7Y2FzZSAyNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDI2O2Nhc2UgMjU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjY6dGhpcy5wdXNoU3RhdGUoInN0cmluZyIpO2JyZWFrO2Nhc2UgMjc6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjg6cmV0dXJuIlNUUiI7Y2FzZSAyOTpyZXR1cm4gMjQ7Y2FzZSAzMDpyZXR1cm4gMjY7Y2FzZSAzMTpyZXR1cm4gNDM7Y2FzZSAzMjpyZXR1cm4iQ09MT04iO2Nhc2UgMzM6cmV0dXJuIDQ0O2Nhc2UgMzQ6cmV0dXJuIDI4O2Nhc2UgMzU6cmV0dXJuIDQ1O2Nhc2UgMzY6cmV0dXJuIDQ2O2Nhc2UgMzc6cmV0dXJuIDQ4O2Nhc2UgMzg6cmV0dXJuIDUwO2Nhc2UgMzk6cmV0dXJuIDQ3O2Nhc2UgNDA6cmV0dXJuIDQxO2Nhc2UgNDE6cmV0dXJuIDQ5O2Nhc2UgNDI6cmV0dXJuIDQyO2Nhc2UgNDM6YnJlYWs7Y2FzZSA0NDpyZXR1cm4gMzU7Y2FzZSA0NTpyZXR1cm4gMzZ9fSxydWxlczpbL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzooXHI/XG4pKS9pLC9eKD86KFxyP1xuKSkvaSwvXig/OltcblxyXSspL2ksL14oPzolJVteXG5dKikvaSwvXig/OnRpdGxlXGIpL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86XHspL2ksL14oPzpbXlx9XSopL2ksL14oPzp4eWNoYXJ0LWJldGFcYikvaSwvXig/Oig/OnZlcnRpY2FsfGhvcml6b250YWwpKS9pLC9eKD86eC1heGlzXGIpL2ksL14oPzp5LWF4aXNcYikvaSwvXig/OlxbKS9pLC9eKD86LS0+KS9pLC9eKD86bGluZVxiKS9pLC9eKD86YmFyXGIpL2ksL14oPzpcWykvaSwvXig/OlsrLV0/KD86XGQrKD86XC5cZCspP3xcLlxkKykpL2ksL14oPzpcXSkvaSwvXig/Oig/OmBcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx7IHRoaXNcLnB1c2hTdGF0ZVwobWRfc3RyaW5nXCk7IFx9XG48bWRfc3RyaW5nPlwoXD86XChcPyFgIlwpXC5cKVwrICAgICAgICAgICAgICAgICAgXHsgcmV0dXJuIE1EX1NUUjsgXH1cbjxtZF9zdHJpbmc+XChcPzpgKSkvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86XFspL2ksL14oPzpcXSkvaSwvXig/OltBLVphLXpdKykvaSwvXig/OjopL2ksL14oPzpcKykvaSwvXig/OiwpL2ksL14oPzo9KS9pLC9eKD86XCopL2ksL14oPzojKS9pLC9eKD86W1xfXSkvaSwvXig/OlwuKS9pLC9eKD86JikvaSwvXig/Oi0pL2ksL14oPzpbMC05XSspL2ksL14oPzpccyspL2ksL14oPzo7KS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7ZGF0YV9pbm5lcjp7cnVsZXM6WzAsMSw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMjAsMjEsMjMsMjQsMjUsMjYsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDVdLGluY2x1c2l2ZTohMH0sZGF0YTp7cnVsZXM6WzAsMSwzLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywyMCwyMSwyMiwyNSwyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NV0saW5jbHVzaXZlOiEwfSxheGlzX2JhbmRfZGF0YTp7cnVsZXM6WzAsMSw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMjAsMjEsMjQsMjUsMjYsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDVdLGluY2x1c2l2ZTohMH0sYXhpc19kYXRhOntydWxlczpbMCwxLDIsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIzLDI1LDI2LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1XSxpbmNsdXNpdmU6ITB9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMiwxM10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlsxMF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOls4XSxpbmNsdXNpdmU6ITF9LHRpdGxlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsyNywyOF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywyMCwyMSwyNSwyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NV0saW5jbHVzaXZlOiEwfX19O3JldHVybiBQZX0oKTt4ZS5sZXhlcj1VO2Z1bmN0aW9uIEZlKCl7dGhpcy55eT17fX1yZXR1cm4gRmUucHJvdG90eXBlPXhlLHhlLlBhcnNlcj1GZSxuZXcgRmV9KCk7ZHZlLnBhcnNlcj1kdmU7Y29uc3QgJG5uPWR2ZTtmdW5jdGlvbiBmR2UoaSl7cmV0dXJuIGkudHlwZT09PSJiYXIifWZ1bmN0aW9uIGRHZShpKXtyZXR1cm4gaS50eXBlPT09ImJhbmQifWZ1bmN0aW9uICRSKGkpe3JldHVybiBpLnR5cGU9PT0ibGluZWFyIn1jbGFzcyBnR2V7Y29uc3RydWN0b3Iocyl7dGhpcy5wYXJlbnRHcm91cD1zfWdldE1heERpbWVuc2lvbihzLHUpe2lmKCF0aGlzLnBhcmVudEdyb3VwKXJldHVybnt3aWR0aDpzLnJlZHVjZSgodixiKT0+TWF0aC5tYXgoYi5sZW5ndGgsdiksMCkqdSxoZWlnaHQ6dX07Y29uc3QgZD17d2lkdGg6MCxoZWlnaHQ6MH0scD10aGlzLnBhcmVudEdyb3VwLmFwcGVuZCgiZyIpLmF0dHIoInZpc2liaWxpdHkiLCJoaWRkZW4iKS5hdHRyKCJmb250LXNpemUiLHUpO2Zvcihjb25zdCB2IG9mIHMpe2NvbnN0IGI9Ulp0KHAsMSx2KSx5PWI/Yi53aWR0aDp2Lmxlbmd0aCp1LFQ9Yj9iLmhlaWdodDp1O2Qud2lkdGg9TWF0aC5tYXgoZC53aWR0aCx5KSxkLmhlaWdodD1NYXRoLm1heChkLmhlaWdodCxUKX1yZXR1cm4gcC5yZW1vdmUoKSxkfX1jb25zdCBwR2U9LjcsYkdlPS4yO2NsYXNzIG1HZXtjb25zdHJ1Y3RvcihzLHUsZCxwKXt0aGlzLmF4aXNDb25maWc9cyx0aGlzLnRpdGxlPXUsdGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvcj1kLHRoaXMuYXhpc1RoZW1lQ29uZmlnPXAsdGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5heGlzUG9zaXRpb249ImxlZnQiLHRoaXMuc2hvd1RpdGxlPSExLHRoaXMuc2hvd0xhYmVsPSExLHRoaXMuc2hvd1RpY2s9ITEsdGhpcy5zaG93QXhpc0xpbmU9ITEsdGhpcy5vdXRlclBhZGRpbmc9MCx0aGlzLnRpdGxlVGV4dEhlaWdodD0wLHRoaXMubGFiZWxUZXh0SGVpZ2h0PTAsdGhpcy5yYW5nZT1bMCwxMF0sdGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5heGlzUG9zaXRpb249ImxlZnQifXNldFJhbmdlKHMpe3RoaXMucmFuZ2U9cyx0aGlzLmF4aXNQb3NpdGlvbj09PSJsZWZ0Inx8dGhpcy5heGlzUG9zaXRpb249PT0icmlnaHQiP3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodD1zWzFdLXNbMF06dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9c1sxXS1zWzBdLHRoaXMucmVjYWxjdWxhdGVTY2FsZSgpfWdldFJhbmdlKCl7cmV0dXJuW3RoaXMucmFuZ2VbMF0rdGhpcy5vdXRlclBhZGRpbmcsdGhpcy5yYW5nZVsxXS10aGlzLm91dGVyUGFkZGluZ119c2V0QXhpc1Bvc2l0aW9uKHMpe3RoaXMuYXhpc1Bvc2l0aW9uPXMsdGhpcy5zZXRSYW5nZSh0aGlzLnJhbmdlKX1nZXRUaWNrRGlzdGFuY2UoKXtjb25zdCBzPXRoaXMuZ2V0UmFuZ2UoKTtyZXR1cm4gTWF0aC5hYnMoc1swXS1zWzFdKS90aGlzLmdldFRpY2tWYWx1ZXMoKS5sZW5ndGh9Z2V0QXhpc091dGVyUGFkZGluZygpe3JldHVybiB0aGlzLm91dGVyUGFkZGluZ31nZXRMYWJlbERpbWVuc2lvbigpe3JldHVybiB0aGlzLnRleHREaW1lbnNpb25DYWxjdWxhdG9yLmdldE1heERpbWVuc2lvbih0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAocz0+cy50b1N0cmluZygpKSx0aGlzLmF4aXNDb25maWcubGFiZWxGb250U2l6ZSl9cmVjYWxjdWxhdGVPdXRlclBhZGRpbmdUb0RyYXdCYXIoKXtwR2UqdGhpcy5nZXRUaWNrRGlzdGFuY2UoKT50aGlzLm91dGVyUGFkZGluZyoyJiYodGhpcy5vdXRlclBhZGRpbmc9TWF0aC5mbG9vcihwR2UqdGhpcy5nZXRUaWNrRGlzdGFuY2UoKS8yKSksdGhpcy5yZWNhbGN1bGF0ZVNjYWxlKCl9Y2FsY3VsYXRlU3BhY2VJZkRyYXduSG9yaXpvbnRhbGx5KHMpe2xldCB1PXMuaGVpZ2h0O2lmKHRoaXMuYXhpc0NvbmZpZy5zaG93QXhpc0xpbmUmJnU+dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgmJih1LT10aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aCx0aGlzLnNob3dBeGlzTGluZT0hMCksdGhpcy5heGlzQ29uZmlnLnNob3dMYWJlbCl7Y29uc3QgZD10aGlzLmdldExhYmVsRGltZW5zaW9uKCkscD1iR2Uqcy53aWR0aDt0aGlzLm91dGVyUGFkZGluZz1NYXRoLm1pbihkLndpZHRoLzIscCk7Y29uc3Qgdj1kLmhlaWdodCt0aGlzLmF4aXNDb25maWcubGFiZWxQYWRkaW5nKjI7dGhpcy5sYWJlbFRleHRIZWlnaHQ9ZC5oZWlnaHQsdjw9dSYmKHUtPXYsdGhpcy5zaG93TGFiZWw9ITApfWlmKHRoaXMuYXhpc0NvbmZpZy5zaG93VGljayYmdT49dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgmJih0aGlzLnNob3dUaWNrPSEwLHUtPXRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RoKSx0aGlzLmF4aXNDb25maWcuc2hvd1RpdGxlJiZ0aGlzLnRpdGxlKXtjb25zdCBkPXRoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3IuZ2V0TWF4RGltZW5zaW9uKFt0aGlzLnRpdGxlXSx0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSkscD1kLmhlaWdodCt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nKjI7dGhpcy50aXRsZVRleHRIZWlnaHQ9ZC5oZWlnaHQscDw9dSYmKHUtPXAsdGhpcy5zaG93VGl0bGU9ITApfXRoaXMuYm91bmRpbmdSZWN0LndpZHRoPXMud2lkdGgsdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0PXMuaGVpZ2h0LXV9Y2FsY3VsYXRlU3BhY2VJZkRyYXduVmVydGljYWwocyl7bGV0IHU9cy53aWR0aDtpZih0aGlzLmF4aXNDb25maWcuc2hvd0F4aXNMaW5lJiZ1PnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoJiYodS09dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgsdGhpcy5zaG93QXhpc0xpbmU9ITApLHRoaXMuYXhpc0NvbmZpZy5zaG93TGFiZWwpe2NvbnN0IGQ9dGhpcy5nZXRMYWJlbERpbWVuc2lvbigpLHA9YkdlKnMuaGVpZ2h0O3RoaXMub3V0ZXJQYWRkaW5nPU1hdGgubWluKGQuaGVpZ2h0LzIscCk7Y29uc3Qgdj1kLndpZHRoK3RoaXMuYXhpc0NvbmZpZy5sYWJlbFBhZGRpbmcqMjt2PD11JiYodS09dix0aGlzLnNob3dMYWJlbD0hMCl9aWYodGhpcy5heGlzQ29uZmlnLnNob3dUaWNrJiZ1Pj10aGlzLmF4aXNDb25maWcudGlja0xlbmd0aCYmKHRoaXMuc2hvd1RpY2s9ITAsdS09dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgpLHRoaXMuYXhpc0NvbmZpZy5zaG93VGl0bGUmJnRoaXMudGl0bGUpe2NvbnN0IGQ9dGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvci5nZXRNYXhEaW1lbnNpb24oW3RoaXMudGl0bGVdLHRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplKSxwPWQuaGVpZ2h0K3RoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcqMjt0aGlzLnRpdGxlVGV4dEhlaWdodD1kLmhlaWdodCxwPD11JiYodS09cCx0aGlzLnNob3dUaXRsZT0hMCl9dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9cy53aWR0aC11LHRoaXMuYm91bmRpbmdSZWN0LmhlaWdodD1zLmhlaWdodH1jYWxjdWxhdGVTcGFjZShzKXtyZXR1cm4gdGhpcy5heGlzUG9zaXRpb249PT0ibGVmdCJ8fHRoaXMuYXhpc1Bvc2l0aW9uPT09InJpZ2h0Ij90aGlzLmNhbGN1bGF0ZVNwYWNlSWZEcmF3blZlcnRpY2FsKHMpOnRoaXMuY2FsY3VsYXRlU3BhY2VJZkRyYXduSG9yaXpvbnRhbGx5KHMpLHRoaXMucmVjYWxjdWxhdGVTY2FsZSgpLHt3aWR0aDp0aGlzLmJvdW5kaW5nUmVjdC53aWR0aCxoZWlnaHQ6dGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0fX1zZXRCb3VuZGluZ0JveFhZKHMpe3RoaXMuYm91bmRpbmdSZWN0Lng9cy54LHRoaXMuYm91bmRpbmdSZWN0Lnk9cy55fWdldERyYXdhYmxlRWxlbWVudHNGb3JMZWZ0QXhpcygpe2NvbnN0IHM9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2NvbnN0IHU9dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC10aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aC8yO3MucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbImxlZnQtYXhpcyIsImF4aXNsLWxpbmUiXSxkYXRhOlt7cGF0aDpgTSAke3V9LCR7dGhpcy5ib3VuZGluZ1JlY3QueX0gTCAke3V9LCR7dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9IGAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5heGlzTGluZUNvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRofV19KX1pZih0aGlzLnNob3dMYWJlbCYmcy5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsibGVmdC1heGlzIiwibGFiZWwiXSxkYXRhOnRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcCh1PT4oe3RleHQ6dS50b1N0cmluZygpLHg6dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC0odGhpcy5zaG93TGFiZWw/dGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZzowKS0odGhpcy5zaG93VGljaz90aGlzLmF4aXNDb25maWcudGlja0xlbmd0aDowKS0odGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCkseTp0aGlzLmdldFNjYWxlVmFsdWUodSksZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5sYWJlbENvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy5sYWJlbEZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6Im1pZGRsZSIsaG9yaXpvbnRhbFBvczoicmlnaHQifSkpfSksdGhpcy5zaG93VGljayl7Y29uc3QgdT10aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYm91bmRpbmdSZWN0LndpZHRoLSh0aGlzLnNob3dBeGlzTGluZT90aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aDowKTtzLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJsZWZ0LWF4aXMiLCJ0aWNrcyJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKGQ9Pih7cGF0aDpgTSAke3V9LCR7dGhpcy5nZXRTY2FsZVZhbHVlKGQpfSBMICR7dS10aGlzLmF4aXNDb25maWcudGlja0xlbmd0aH0sJHt0aGlzLmdldFNjYWxlVmFsdWUoZCl9YCxzdHJva2VGaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLnRpY2tDb2xvcixzdHJva2VXaWR0aDp0aGlzLmF4aXNDb25maWcudGlja1dpZHRofSkpfSl9cmV0dXJuIHRoaXMuc2hvd1RpdGxlJiZzLnB1c2goe3R5cGU6InRleHQiLGdyb3VwVGV4dHM6WyJsZWZ0LWF4aXMiLCJ0aXRsZSJdLGRhdGE6W3t0ZXh0OnRoaXMudGl0bGUseDp0aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcseTp0aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodC8yLGZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGl0bGVDb2xvcixmb250U2l6ZTp0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSxyb3RhdGlvbjoyNzAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn1dfSksc31nZXREcmF3YWJsZUVsZW1lbnRzRm9yQm90dG9tQXhpcygpe2NvbnN0IHM9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2NvbnN0IHU9dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aC8yO3MucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbImJvdHRvbS1heGlzIiwiYXhpcy1saW5lIl0sZGF0YTpbe3BhdGg6YE0gJHt0aGlzLmJvdW5kaW5nUmVjdC54fSwke3V9IEwgJHt0aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYm91bmRpbmdSZWN0LndpZHRofSwke3V9YCxzdHJva2VGaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLmF4aXNMaW5lQ29sb3Isc3Ryb2tlV2lkdGg6dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGh9XX0pfWlmKHRoaXMuc2hvd0xhYmVsJiZzLnB1c2goe3R5cGU6InRleHQiLGdyb3VwVGV4dHM6WyJib3R0b20tYXhpcyIsImxhYmVsIl0sZGF0YTp0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAodT0+KHt0ZXh0OnUudG9TdHJpbmcoKSx4OnRoaXMuZ2V0U2NhbGVWYWx1ZSh1KSx5OnRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZysodGhpcy5zaG93VGljaz90aGlzLmF4aXNDb25maWcudGlja0xlbmd0aDowKSsodGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCksZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5sYWJlbENvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy5sYWJlbEZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn0pKX0pLHRoaXMuc2hvd1RpY2spe2NvbnN0IHU9dGhpcy5ib3VuZGluZ1JlY3QueSsodGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCk7cy5wdXNoKHt0eXBlOiJwYXRoIixncm91cFRleHRzOlsiYm90dG9tLWF4aXMiLCJ0aWNrcyJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKGQ9Pih7cGF0aDpgTSAke3RoaXMuZ2V0U2NhbGVWYWx1ZShkKX0sJHt1fSBMICR7dGhpcy5nZXRTY2FsZVZhbHVlKGQpfSwke3UrdGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGh9YCxzdHJva2VGaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLnRpY2tDb2xvcixzdHJva2VXaWR0aDp0aGlzLmF4aXNDb25maWcudGlja1dpZHRofSkpfSl9cmV0dXJuIHRoaXMuc2hvd1RpdGxlJiZzLnB1c2goe3R5cGU6InRleHQiLGdyb3VwVGV4dHM6WyJib3R0b20tYXhpcyIsInRpdGxlIl0sZGF0YTpbe3RleHQ6dGhpcy50aXRsZSx4OnRoaXMucmFuZ2VbMF0rKHRoaXMucmFuZ2VbMV0tdGhpcy5yYW5nZVswXSkvMix5OnRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LXRoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmctdGhpcy50aXRsZVRleHRIZWlnaHQsZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy50aXRsZUNvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn1dfSksc31nZXREcmF3YWJsZUVsZW1lbnRzRm9yVG9wQXhpcygpe2NvbnN0IHM9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2NvbnN0IHU9dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQtdGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgvMjtzLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJ0b3AtYXhpcyIsImF4aXMtbGluZSJdLGRhdGE6W3twYXRoOmBNICR7dGhpcy5ib3VuZGluZ1JlY3QueH0sJHt1fSBMICR7dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aH0sJHt1fWAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5heGlzTGluZUNvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRofV19KX1pZih0aGlzLnNob3dMYWJlbCYmcy5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsidG9wLWF4aXMiLCJsYWJlbCJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKHU9Pih7dGV4dDp1LnRvU3RyaW5nKCkseDp0aGlzLmdldFNjYWxlVmFsdWUodSkseTp0aGlzLmJvdW5kaW5nUmVjdC55Kyh0aGlzLnNob3dUaXRsZT90aGlzLnRpdGxlVGV4dEhlaWdodCt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nKjI6MCkrdGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZyxmaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLmxhYmVsQ29sb3IsZm9udFNpemU6dGhpcy5heGlzQ29uZmlnLmxhYmVsRm9udFNpemUscm90YXRpb246MCx2ZXJ0aWNhbFBvczoidG9wIixob3Jpem9udGFsUG9zOiJjZW50ZXIifSkpfSksdGhpcy5zaG93VGljayl7Y29uc3QgdT10aGlzLmJvdW5kaW5nUmVjdC55O3MucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbInRvcC1heGlzIiwidGlja3MiXSxkYXRhOnRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcChkPT4oe3BhdGg6YE0gJHt0aGlzLmdldFNjYWxlVmFsdWUoZCl9LCR7dSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQtKHRoaXMuc2hvd0F4aXNMaW5lP3RoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoOjApfSBMICR7dGhpcy5nZXRTY2FsZVZhbHVlKGQpfSwke3UrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LXRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RoLSh0aGlzLnNob3dBeGlzTGluZT90aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aDowKX1gLHN0cm9rZUZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGlja0NvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy50aWNrV2lkdGh9KSl9KX1yZXR1cm4gdGhpcy5zaG93VGl0bGUmJnMucHVzaCh7dHlwZToidGV4dCIsZ3JvdXBUZXh0czpbInRvcC1heGlzIiwidGl0bGUiXSxkYXRhOlt7dGV4dDp0aGlzLnRpdGxlLHg6dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC8yLHk6dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nLGZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGl0bGVDb2xvcixmb250U2l6ZTp0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSxyb3RhdGlvbjowLHZlcnRpY2FsUG9zOiJ0b3AiLGhvcml6b250YWxQb3M6ImNlbnRlciJ9XX0pLHN9Z2V0RHJhd2FibGVFbGVtZW50cygpe2lmKHRoaXMuYXhpc1Bvc2l0aW9uPT09ImxlZnQiKXJldHVybiB0aGlzLmdldERyYXdhYmxlRWxlbWVudHNGb3JMZWZ0QXhpcygpO2lmKHRoaXMuYXhpc1Bvc2l0aW9uPT09InJpZ2h0Iil0aHJvdyBFcnJvcigiRHJhd2luZyBvZiByaWdodCBheGlzIGlzIG5vdCBpbXBsZW1lbnRlZCIpO3JldHVybiB0aGlzLmF4aXNQb3NpdGlvbj09PSJib3R0b20iP3RoaXMuZ2V0RHJhd2FibGVFbGVtZW50c0ZvckJvdHRvbUF4aXMoKTp0aGlzLmF4aXNQb3NpdGlvbj09PSJ0b3AiP3RoaXMuZ2V0RHJhd2FibGVFbGVtZW50c0ZvclRvcEF4aXMoKTpbXX19Y2xhc3Mgem5uIGV4dGVuZHMgbUdle2NvbnN0cnVjdG9yKHMsdSxkLHAsdil7c3VwZXIocyxwLHYsdSksdGhpcy5jYXRlZ29yaWVzPWQsdGhpcy5zY2FsZT1xcGUoKS5kb21haW4odGhpcy5jYXRlZ29yaWVzKS5yYW5nZSh0aGlzLmdldFJhbmdlKCkpfXNldFJhbmdlKHMpe3N1cGVyLnNldFJhbmdlKHMpfXJlY2FsY3VsYXRlU2NhbGUoKXt0aGlzLnNjYWxlPXFwZSgpLmRvbWFpbih0aGlzLmNhdGVnb3JpZXMpLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSkucGFkZGluZ0lubmVyKDEpLnBhZGRpbmdPdXRlcigwKS5hbGlnbiguNSksWGUudHJhY2UoIkJhbmRBeGlzIGF4aXMgZmluYWwgY2F0ZWdvcmllcywgcmFuZ2U6ICIsdGhpcy5jYXRlZ29yaWVzLHRoaXMuZ2V0UmFuZ2UoKSl9Z2V0VGlja1ZhbHVlcygpe3JldHVybiB0aGlzLmNhdGVnb3JpZXN9Z2V0U2NhbGVWYWx1ZShzKXtyZXR1cm4gdGhpcy5zY2FsZShzKXx8dGhpcy5nZXRSYW5nZSgpWzBdfX1jbGFzcyBxbm4gZXh0ZW5kcyBtR2V7Y29uc3RydWN0b3Iocyx1LGQscCx2KXtzdXBlcihzLHAsdix1KSx0aGlzLmRvbWFpbj1kLHRoaXMuc2NhbGU9c0QoKS5kb21haW4odGhpcy5kb21haW4pLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSl9Z2V0VGlja1ZhbHVlcygpe3JldHVybiB0aGlzLnNjYWxlLnRpY2tzKCl9cmVjYWxjdWxhdGVTY2FsZSgpe2NvbnN0IHM9Wy4uLnRoaXMuZG9tYWluXTt0aGlzLmF4aXNQb3NpdGlvbj09PSJsZWZ0IiYmcy5yZXZlcnNlKCksdGhpcy5zY2FsZT1zRCgpLmRvbWFpbihzKS5yYW5nZSh0aGlzLmdldFJhbmdlKCkpfWdldFNjYWxlVmFsdWUocyl7cmV0dXJuIHRoaXMuc2NhbGUocyl9fWZ1bmN0aW9uIHZHZShpLHMsdSxkKXtjb25zdCBwPW5ldyBnR2UoZCk7cmV0dXJuIGRHZShpKT9uZXcgem5uKHMsdSxpLmNhdGVnb3JpZXMsaS50aXRsZSxwKTpuZXcgcW5uKHMsdSxbaS5taW4saS5tYXhdLGkudGl0bGUscCl9Y2xhc3MgSG5ue2NvbnN0cnVjdG9yKHMsdSxkLHApe3RoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3I9cyx0aGlzLmNoYXJ0Q29uZmlnPXUsdGhpcy5jaGFydERhdGE9ZCx0aGlzLmNoYXJ0VGhlbWVDb25maWc9cCx0aGlzLmJvdW5kaW5nUmVjdD17eDowLHk6MCx3aWR0aDowLGhlaWdodDowfSx0aGlzLnNob3dDaGFydFRpdGxlPSExfXNldEJvdW5kaW5nQm94WFkocyl7dGhpcy5ib3VuZGluZ1JlY3QueD1zLngsdGhpcy5ib3VuZGluZ1JlY3QueT1zLnl9Y2FsY3VsYXRlU3BhY2Uocyl7Y29uc3QgdT10aGlzLnRleHREaW1lbnNpb25DYWxjdWxhdG9yLmdldE1heERpbWVuc2lvbihbdGhpcy5jaGFydERhdGEudGl0bGVdLHRoaXMuY2hhcnRDb25maWcudGl0bGVGb250U2l6ZSksZD1NYXRoLm1heCh1LndpZHRoLHMud2lkdGgpLHA9dS5oZWlnaHQrMip0aGlzLmNoYXJ0Q29uZmlnLnRpdGxlUGFkZGluZztyZXR1cm4gdS53aWR0aDw9ZCYmdS5oZWlnaHQ8PXAmJnRoaXMuY2hhcnRDb25maWcuc2hvd1RpdGxlJiZ0aGlzLmNoYXJ0RGF0YS50aXRsZSYmKHRoaXMuYm91bmRpbmdSZWN0LndpZHRoPWQsdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0PXAsdGhpcy5zaG93Q2hhcnRUaXRsZT0hMCkse3dpZHRoOnRoaXMuYm91bmRpbmdSZWN0LndpZHRoLGhlaWdodDp0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9fWdldERyYXdhYmxlRWxlbWVudHMoKXtjb25zdCBzPVtdO3JldHVybiB0aGlzLnNob3dDaGFydFRpdGxlJiZzLnB1c2goe2dyb3VwVGV4dHM6WyJjaGFydC10aXRsZSJdLHR5cGU6InRleHQiLGRhdGE6W3tmb250U2l6ZTp0aGlzLmNoYXJ0Q29uZmlnLnRpdGxlRm9udFNpemUsdGV4dDp0aGlzLmNoYXJ0RGF0YS50aXRsZSx2ZXJ0aWNhbFBvczoibWlkZGxlIixob3Jpem9udGFsUG9zOiJjZW50ZXIiLHg6dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC8yLHk6dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQvMixmaWxsOnRoaXMuY2hhcnRUaGVtZUNvbmZpZy50aXRsZUNvbG9yLHJvdGF0aW9uOjB9XX0pLHN9fWZ1bmN0aW9uIFZubihpLHMsdSxkKXtjb25zdCBwPW5ldyBnR2UoZCk7cmV0dXJuIG5ldyBIbm4ocCxpLHMsdSl9Y2xhc3MgVW5ue2NvbnN0cnVjdG9yKHMsdSxkLHAsdil7dGhpcy5wbG90RGF0YT1zLHRoaXMueEF4aXM9dSx0aGlzLnlBeGlzPWQsdGhpcy5vcmllbnRhdGlvbj1wLHRoaXMucGxvdEluZGV4PXZ9Z2V0RHJhd2FibGVFbGVtZW50KCl7Y29uc3Qgcz10aGlzLnBsb3REYXRhLmRhdGEubWFwKGQ9Plt0aGlzLnhBeGlzLmdldFNjYWxlVmFsdWUoZFswXSksdGhpcy55QXhpcy5nZXRTY2FsZVZhbHVlKGRbMV0pXSk7bGV0IHU7cmV0dXJuIHRoaXMub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCI/dT1rNygpLnkoZD0+ZFswXSkueChkPT5kWzFdKShzKTp1PWs3KCkueChkPT5kWzBdKS55KGQ9PmRbMV0pKHMpLHU/W3tncm91cFRleHRzOlsicGxvdCIsYGxpbmUtcGxvdC0ke3RoaXMucGxvdEluZGV4fWBdLHR5cGU6InBhdGgiLGRhdGE6W3twYXRoOnUsc3Ryb2tlRmlsbDp0aGlzLnBsb3REYXRhLnN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5wbG90RGF0YS5zdHJva2VXaWR0aH1dfV06W119fWNsYXNzIEdubntjb25zdHJ1Y3RvcihzLHUsZCxwLHYsYil7dGhpcy5iYXJEYXRhPXMsdGhpcy5ib3VuZGluZ1JlY3Q9dSx0aGlzLnhBeGlzPWQsdGhpcy55QXhpcz1wLHRoaXMub3JpZW50YXRpb249dix0aGlzLnBsb3RJbmRleD1ifWdldERyYXdhYmxlRWxlbWVudCgpe2NvbnN0IHM9dGhpcy5iYXJEYXRhLmRhdGEubWFwKHY9Plt0aGlzLnhBeGlzLmdldFNjYWxlVmFsdWUodlswXSksdGhpcy55QXhpcy5nZXRTY2FsZVZhbHVlKHZbMV0pXSksdT0uMDUsZD1NYXRoLm1pbih0aGlzLnhBeGlzLmdldEF4aXNPdXRlclBhZGRpbmcoKSoyLHRoaXMueEF4aXMuZ2V0VGlja0Rpc3RhbmNlKCkpKigxLXUpLHA9ZC8yO3JldHVybiB0aGlzLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiP1t7Z3JvdXBUZXh0czpbInBsb3QiLGBiYXItcGxvdC0ke3RoaXMucGxvdEluZGV4fWBdLHR5cGU6InJlY3QiLGRhdGE6cy5tYXAodj0+KHt4OnRoaXMuYm91bmRpbmdSZWN0LngseTp2WzBdLXAsaGVpZ2h0OmQsd2lkdGg6dlsxXS10aGlzLmJvdW5kaW5nUmVjdC54LGZpbGw6dGhpcy5iYXJEYXRhLmZpbGwsc3Ryb2tlV2lkdGg6MCxzdHJva2VGaWxsOnRoaXMuYmFyRGF0YS5maWxsfSkpfV06W3tncm91cFRleHRzOlsicGxvdCIsYGJhci1wbG90LSR7dGhpcy5wbG90SW5kZXh9YF0sdHlwZToicmVjdCIsZGF0YTpzLm1hcCh2PT4oe3g6dlswXS1wLHk6dlsxXSx3aWR0aDpkLGhlaWdodDp0aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodC12WzFdLGZpbGw6dGhpcy5iYXJEYXRhLmZpbGwsc3Ryb2tlV2lkdGg6MCxzdHJva2VGaWxsOnRoaXMuYmFyRGF0YS5maWxsfSkpfV19fWNsYXNzIEtubntjb25zdHJ1Y3RvcihzLHUsZCl7dGhpcy5jaGFydENvbmZpZz1zLHRoaXMuY2hhcnREYXRhPXUsdGhpcy5jaGFydFRoZW1lQ29uZmlnPWQsdGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH19c2V0QXhlcyhzLHUpe3RoaXMueEF4aXM9cyx0aGlzLnlBeGlzPXV9c2V0Qm91bmRpbmdCb3hYWShzKXt0aGlzLmJvdW5kaW5nUmVjdC54PXMueCx0aGlzLmJvdW5kaW5nUmVjdC55PXMueX1jYWxjdWxhdGVTcGFjZShzKXtyZXR1cm4gdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9cy53aWR0aCx0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQ9cy5oZWlnaHQse3dpZHRoOnRoaXMuYm91bmRpbmdSZWN0LndpZHRoLGhlaWdodDp0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9fWdldERyYXdhYmxlRWxlbWVudHMoKXtpZighKHRoaXMueEF4aXMmJnRoaXMueUF4aXMpKXRocm93IEVycm9yKCJBeGVzIG11c3QgYmUgcGFzc2VkIHRvIHJlbmRlciBQbG90cyIpO2NvbnN0IHM9W107Zm9yKGNvbnN0W3UsZF1vZiB0aGlzLmNoYXJ0RGF0YS5wbG90cy5lbnRyaWVzKCkpc3dpdGNoKGQudHlwZSl7Y2FzZSJsaW5lIjp7Y29uc3QgcD1uZXcgVW5uKGQsdGhpcy54QXhpcyx0aGlzLnlBeGlzLHRoaXMuY2hhcnRDb25maWcuY2hhcnRPcmllbnRhdGlvbix1KTtzLnB1c2goLi4ucC5nZXREcmF3YWJsZUVsZW1lbnQoKSl9YnJlYWs7Y2FzZSJiYXIiOntjb25zdCBwPW5ldyBHbm4oZCx0aGlzLmJvdW5kaW5nUmVjdCx0aGlzLnhBeGlzLHRoaXMueUF4aXMsdGhpcy5jaGFydENvbmZpZy5jaGFydE9yaWVudGF0aW9uLHUpO3MucHVzaCguLi5wLmdldERyYXdhYmxlRWxlbWVudCgpKX1icmVha31yZXR1cm4gc319ZnVuY3Rpb24gV25uKGkscyx1KXtyZXR1cm4gbmV3IEtubihpLHMsdSl9Y2xhc3MgWW5ue2NvbnN0cnVjdG9yKHMsdSxkLHApe3RoaXMuY2hhcnRDb25maWc9cyx0aGlzLmNoYXJ0RGF0YT11LHRoaXMuY29tcG9uZW50U3RvcmU9e3RpdGxlOlZubihzLHUsZCxwKSxwbG90OldubihzLHUsZCkseEF4aXM6dkdlKHUueEF4aXMscy54QXhpcyx7dGl0bGVDb2xvcjpkLnhBeGlzVGl0bGVDb2xvcixsYWJlbENvbG9yOmQueEF4aXNMYWJlbENvbG9yLHRpY2tDb2xvcjpkLnhBeGlzVGlja0NvbG9yLGF4aXNMaW5lQ29sb3I6ZC54QXhpc0xpbmVDb2xvcn0scCkseUF4aXM6dkdlKHUueUF4aXMscy55QXhpcyx7dGl0bGVDb2xvcjpkLnlBeGlzVGl0bGVDb2xvcixsYWJlbENvbG9yOmQueUF4aXNMYWJlbENvbG9yLHRpY2tDb2xvcjpkLnlBeGlzVGlja0NvbG9yLGF4aXNMaW5lQ29sb3I6ZC55QXhpc0xpbmVDb2xvcn0scCl9fWNhbGN1bGF0ZVZlcnRpY2FsU3BhY2UoKXtsZXQgcz10aGlzLmNoYXJ0Q29uZmlnLndpZHRoLHU9dGhpcy5jaGFydENvbmZpZy5oZWlnaHQsZD0wLHA9MCx2PU1hdGguZmxvb3Iocyp0aGlzLmNoYXJ0Q29uZmlnLnBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudC8xMDApLGI9TWF0aC5mbG9vcih1KnRoaXMuY2hhcnRDb25maWcucGxvdFJlc2VydmVkU3BhY2VQZXJjZW50LzEwMCkseT10aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOnYsaGVpZ2h0OmJ9KTtzLT15LndpZHRoLHUtPXkuaGVpZ2h0LHk9dGhpcy5jb21wb25lbnRTdG9yZS50aXRsZS5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6dGhpcy5jaGFydENvbmZpZy53aWR0aCxoZWlnaHQ6dX0pLHA9eS5oZWlnaHQsdS09eS5oZWlnaHQsdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRBeGlzUG9zaXRpb24oImJvdHRvbSIpLHk9dGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6cyxoZWlnaHQ6dX0pLHUtPXkuaGVpZ2h0LHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0QXhpc1Bvc2l0aW9uKCJsZWZ0IikseT10aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDpzLGhlaWdodDp1fSksZD15LndpZHRoLHMtPXkud2lkdGgscz4wJiYodis9cyxzPTApLHU+MCYmKGIrPXUsdT0wKSx0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOnYsaGVpZ2h0OmJ9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3Quc2V0Qm91bmRpbmdCb3hYWSh7eDpkLHk6cH0pLHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0UmFuZ2UoW2QsZCt2XSksdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRCb3VuZGluZ0JveFhZKHt4OmQseTpwK2J9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldFJhbmdlKFtwLHArYl0pLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0Qm91bmRpbmdCb3hYWSh7eDowLHk6cH0pLHRoaXMuY2hhcnREYXRhLnBsb3RzLnNvbWUoVD0+ZkdlKFQpKSYmdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5yZWNhbGN1bGF0ZU91dGVyUGFkZGluZ1RvRHJhd0JhcigpfWNhbGN1bGF0ZUhvcml6b250YWxTcGFjZSgpe2xldCBzPXRoaXMuY2hhcnRDb25maWcud2lkdGgsdT10aGlzLmNoYXJ0Q29uZmlnLmhlaWdodCxkPTAscD0wLHY9MCxiPU1hdGguZmxvb3Iocyp0aGlzLmNoYXJ0Q29uZmlnLnBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudC8xMDApLHk9TWF0aC5mbG9vcih1KnRoaXMuY2hhcnRDb25maWcucGxvdFJlc2VydmVkU3BhY2VQZXJjZW50LzEwMCksVD10aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOmIsaGVpZ2h0Onl9KTtzLT1ULndpZHRoLHUtPVQuaGVpZ2h0LFQ9dGhpcy5jb21wb25lbnRTdG9yZS50aXRsZS5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6dGhpcy5jaGFydENvbmZpZy53aWR0aCxoZWlnaHQ6dX0pLGQ9VC5oZWlnaHQsdS09VC5oZWlnaHQsdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRBeGlzUG9zaXRpb24oImxlZnQiKSxUPXRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOnMsaGVpZ2h0OnV9KSxzLT1ULndpZHRoLHA9VC53aWR0aCx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldEF4aXNQb3NpdGlvbigidG9wIiksVD10aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDpzLGhlaWdodDp1fSksdS09VC5oZWlnaHQsdj1kK1QuaGVpZ2h0LHM+MCYmKGIrPXMscz0wKSx1PjAmJih5Kz11LHU9MCksdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDpiLGhlaWdodDp5fSksdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LnNldEJvdW5kaW5nQm94WFkoe3g6cCx5OnZ9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldFJhbmdlKFtwLHArYl0pLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0Qm91bmRpbmdCb3hYWSh7eDpwLHk6ZH0pLHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0UmFuZ2UoW3Ysdit5XSksdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRCb3VuZGluZ0JveFhZKHt4OjAseTp2fSksdGhpcy5jaGFydERhdGEucGxvdHMuc29tZShfPT5mR2UoXykpJiZ0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLnJlY2FsY3VsYXRlT3V0ZXJQYWRkaW5nVG9EcmF3QmFyKCl9Y2FsY3VsYXRlU3BhY2UoKXt0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0T3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCI/dGhpcy5jYWxjdWxhdGVIb3Jpem9udGFsU3BhY2UoKTp0aGlzLmNhbGN1bGF0ZVZlcnRpY2FsU3BhY2UoKX1nZXREcmF3YWJsZUVsZW1lbnQoKXt0aGlzLmNhbGN1bGF0ZVNwYWNlKCk7Y29uc3Qgcz1bXTt0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3Quc2V0QXhlcyh0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMpO2Zvcihjb25zdCB1IG9mIE9iamVjdC52YWx1ZXModGhpcy5jb21wb25lbnRTdG9yZSkpcy5wdXNoKC4uLnUuZ2V0RHJhd2FibGVFbGVtZW50cygpKTtyZXR1cm4gc319Y2xhc3MgWG5ue3N0YXRpYyBidWlsZChzLHUsZCxwKXtyZXR1cm4gbmV3IFlubihzLHUsZCxwKS5nZXREcmF3YWJsZUVsZW1lbnQoKX19bGV0IHpSPTAsd0dlLHFSPXhHZSgpLEhSPXlHZSgpLGVsPWtHZSgpLGd2ZT1IUi5wbG90Q29sb3JQYWxldHRlLnNwbGl0KCIsIikubWFwKGk9PmkudHJpbSgpKSxnSj0hMSxwdmU9ITE7ZnVuY3Rpb24geUdlKCl7Y29uc3QgaT1mMmUoKSxzPVZoKCk7cmV0dXJuIEpGKGkueHlDaGFydCxzLnRoZW1lVmFyaWFibGVzLnh5Q2hhcnQpfWZ1bmN0aW9uIHhHZSgpe2NvbnN0IGk9VmgoKTtyZXR1cm4gSkYoc2gueHlDaGFydCxpLnh5Q2hhcnQpfWZ1bmN0aW9uIGtHZSgpe3JldHVybnt5QXhpczp7dHlwZToibGluZWFyIix0aXRsZToiIixtaW46MS8wLG1heDotMS8wfSx4QXhpczp7dHlwZToiYmFuZCIsdGl0bGU6IiIsY2F0ZWdvcmllczpbXX0sdGl0bGU6IiIscGxvdHM6W119fWZ1bmN0aW9uIGJ2ZShpKXtjb25zdCBzPVZoKCk7cmV0dXJuIFlmKGkudHJpbSgpLHMpfWZ1bmN0aW9uIFFubihpKXt3R2U9aX1mdW5jdGlvbiBKbm4oaSl7aT09PSJob3Jpem9udGFsIj9xUi5jaGFydE9yaWVudGF0aW9uPSJob3Jpem9udGFsIjpxUi5jaGFydE9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCJ9ZnVuY3Rpb24gWm5uKGkpe2VsLnhBeGlzLnRpdGxlPWJ2ZShpLnRleHQpfWZ1bmN0aW9uIEVHZShpLHMpe2VsLnhBeGlzPXt0eXBlOiJsaW5lYXIiLHRpdGxlOmVsLnhBeGlzLnRpdGxlLG1pbjppLG1heDpzfSxnSj0hMH1mdW5jdGlvbiBlcm4oaSl7ZWwueEF4aXM9e3R5cGU6ImJhbmQiLHRpdGxlOmVsLnhBeGlzLnRpdGxlLGNhdGVnb3JpZXM6aS5tYXAocz0+YnZlKHMudGV4dCkpfSxnSj0hMH1mdW5jdGlvbiB0cm4oaSl7ZWwueUF4aXMudGl0bGU9YnZlKGkudGV4dCl9ZnVuY3Rpb24gbnJuKGkscyl7ZWwueUF4aXM9e3R5cGU6ImxpbmVhciIsdGl0bGU6ZWwueUF4aXMudGl0bGUsbWluOmksbWF4OnN9LHB2ZT0hMH1mdW5jdGlvbiBycm4oaSl7Y29uc3Qgcz1NYXRoLm1pbiguLi5pKSx1PU1hdGgubWF4KC4uLmkpLGQ9JFIoZWwueUF4aXMpP2VsLnlBeGlzLm1pbjoxLzAscD0kUihlbC55QXhpcyk/ZWwueUF4aXMubWF4Oi0xLzA7ZWwueUF4aXM9e3R5cGU6ImxpbmVhciIsdGl0bGU6ZWwueUF4aXMudGl0bGUsbWluOk1hdGgubWluKGQscyksbWF4Ok1hdGgubWF4KHAsdSl9fWZ1bmN0aW9uIFRHZShpKXtsZXQgcz1bXTtpZihpLmxlbmd0aD09PTApcmV0dXJuIHM7aWYoIWdKKXtjb25zdCB1PSRSKGVsLnhBeGlzKT9lbC54QXhpcy5taW46MS8wLGQ9JFIoZWwueEF4aXMpP2VsLnhBeGlzLm1heDotMS8wO0VHZShNYXRoLm1pbih1LDEpLE1hdGgubWF4KGQsaS5sZW5ndGgpKX1pZihwdmV8fHJybihpKSxkR2UoZWwueEF4aXMpJiYocz1lbC54QXhpcy5jYXRlZ29yaWVzLm1hcCgodSxkKT0+W3UsaVtkXV0pKSwkUihlbC54QXhpcykpe2NvbnN0IHU9ZWwueEF4aXMubWluLGQ9ZWwueEF4aXMubWF4LHA9KGQtdSsxKS9pLmxlbmd0aCx2PVtdO2ZvcihsZXQgYj11O2I8PWQ7Yis9cCl2LnB1c2goYCR7Yn1gKTtzPXYubWFwKChiLHkpPT5bYixpW3ldXSl9cmV0dXJuIHN9ZnVuY3Rpb24gQ0dlKGkpe3JldHVybiBndmVbaT09PTA/MDppJWd2ZS5sZW5ndGhdfWZ1bmN0aW9uIGlybihpLHMpe2NvbnN0IHU9VEdlKHMpO2VsLnBsb3RzLnB1c2goe3R5cGU6ImxpbmUiLHN0cm9rZUZpbGw6Q0dlKHpSKSxzdHJva2VXaWR0aDoyLGRhdGE6dX0pLHpSKyt9ZnVuY3Rpb24gc3JuKGkscyl7Y29uc3QgdT1UR2Uocyk7ZWwucGxvdHMucHVzaCh7dHlwZToiYmFyIixmaWxsOkNHZSh6UiksZGF0YTp1fSkselIrK31mdW5jdGlvbiBhcm4oKXtpZihlbC5wbG90cy5sZW5ndGg9PT0wKXRocm93IEVycm9yKCJObyBQbG90IHRvIHJlbmRlciwgcGxlYXNlIHByb3ZpZGUgYSBwbG90IHdpdGggc29tZSBkYXRhIik7cmV0dXJuIGVsLnRpdGxlPUFwKCksWG5uLmJ1aWxkKHFSLGVsLEhSLHdHZSl9ZnVuY3Rpb24gb3JuKCl7cmV0dXJuIEhSfWZ1bmN0aW9uIGNybigpe3JldHVybiBxUn1jb25zdCB1cm49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjokbm4sZGI6e2dldERyYXdhYmxlRWxlbTphcm4sY2xlYXI6ZnVuY3Rpb24oKXtQZygpLHpSPTAscVI9eEdlKCksZWw9a0dlKCksSFI9eUdlKCksZ3ZlPUhSLnBsb3RDb2xvclBhbGV0dGUuc3BsaXQoIiwiKS5tYXAoaT0+aS50cmltKCkpLGdKPSExLHB2ZT0hMX0sc2V0QWNjVGl0bGU6QmcsZ2V0QWNjVGl0bGU6Q3Asc2V0RGlhZ3JhbVRpdGxlOmNtLGdldERpYWdyYW1UaXRsZTpBcCxnZXRBY2NEZXNjcmlwdGlvbjpfcCxzZXRBY2NEZXNjcmlwdGlvbjpTcCxzZXRPcmllbnRhdGlvbjpKbm4sc2V0WEF4aXNUaXRsZTpabm4sc2V0WEF4aXNSYW5nZURhdGE6RUdlLHNldFhBeGlzQmFuZDplcm4sc2V0WUF4aXNUaXRsZTp0cm4sc2V0WUF4aXNSYW5nZURhdGE6bnJuLHNldExpbmVEYXRhOmlybixzZXRCYXJEYXRhOnNybixzZXRUbXBTVkdHOlFubixnZXRDaGFydFRoZW1lQ29uZmlnOm9ybixnZXRDaGFydENvbmZpZzpjcm59LHJlbmRlcmVyOntkcmF3OihpLHMsdSxkKT0+e2NvbnN0IHA9ZC5kYix2PXAuZ2V0Q2hhcnRUaGVtZUNvbmZpZygpLGI9cC5nZXRDaGFydENvbmZpZygpO2Z1bmN0aW9uIHkoZWUpe3JldHVybiBlZT09PSJ0b3AiPyJ0ZXh0LWJlZm9yZS1lZGdlIjoibWlkZGxlIn1mdW5jdGlvbiBUKGVlKXtyZXR1cm4gZWU9PT0ibGVmdCI/InN0YXJ0IjplZT09PSJyaWdodCI/ImVuZCI6Im1pZGRsZSJ9ZnVuY3Rpb24gXyhlZSl7cmV0dXJuYHRyYW5zbGF0ZSgke2VlLnh9LCAke2VlLnl9KSByb3RhdGUoJHtlZS5yb3RhdGlvbnx8MH0pYH1YZS5kZWJ1ZyhgUmVuZGVyaW5nIHh5Y2hhcnQgY2hhcnQKYCtpKTtjb25zdCBBPXJSKHMpLFA9QS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm1haW4iKSxSPVAuYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLGIud2lkdGgpLmF0dHIoImhlaWdodCIsYi5oZWlnaHQpLmF0dHIoImNsYXNzIiwiYmFja2dyb3VuZCIpO05nKEEsYi5oZWlnaHQsYi53aWR0aCwhMCksQS5hdHRyKCJ2aWV3Qm94IixgMCAwICR7Yi53aWR0aH0gJHtiLmhlaWdodH1gKSxSLmF0dHIoImZpbGwiLHYuYmFja2dyb3VuZENvbG9yKSxwLnNldFRtcFNWR0coQS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm1lcm1haWQtdG1wLWdyb3VwIikpO2NvbnN0IEY9cC5nZXREcmF3YWJsZUVsZW0oKSxqPXt9O2Z1bmN0aW9uIEsoZWUpe2xldCBpZT1QLG9lPSIiO2Zvcihjb25zdFtwZV1vZiBlZS5lbnRyaWVzKCkpe2xldCBiZT1QO3BlPjAmJmpbb2VdJiYoYmU9altvZV0pLG9lKz1lZVtwZV0saWU9altvZV0saWV8fChpZT1qW29lXT1iZS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZWVbcGVdKSl9cmV0dXJuIGllfWZvcihjb25zdCBlZSBvZiBGKXtpZihlZS5kYXRhLmxlbmd0aD09PTApY29udGludWU7Y29uc3QgaWU9SyhlZS5ncm91cFRleHRzKTtzd2l0Y2goZWUudHlwZSl7Y2FzZSJyZWN0IjppZS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKGVlLmRhdGEpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsb2U9Pm9lLngpLmF0dHIoInkiLG9lPT5vZS55KS5hdHRyKCJ3aWR0aCIsb2U9Pm9lLndpZHRoKS5hdHRyKCJoZWlnaHQiLG9lPT5vZS5oZWlnaHQpLmF0dHIoImZpbGwiLG9lPT5vZS5maWxsKS5hdHRyKCJzdHJva2UiLG9lPT5vZS5zdHJva2VGaWxsKS5hdHRyKCJzdHJva2Utd2lkdGgiLG9lPT5vZS5zdHJva2VXaWR0aCk7YnJlYWs7Y2FzZSJ0ZXh0IjppZS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKGVlLmRhdGEpLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiZmlsbCIsb2U9Pm9lLmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIsb2U9Pm9lLmZvbnRTaXplKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsb2U9Pnkob2UudmVydGljYWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsb2U9PlQob2UuaG9yaXpvbnRhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIsb2U9Pl8ob2UpKS50ZXh0KG9lPT5vZS50ZXh0KTticmVhaztjYXNlInBhdGgiOmllLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoZWUuZGF0YSkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixvZT0+b2UucGF0aCkuYXR0cigiZmlsbCIsb2U9Pm9lLmZpbGw/b2UuZmlsbDoibm9uZSIpLmF0dHIoInN0cm9rZSIsb2U9Pm9lLnN0cm9rZUZpbGwpLmF0dHIoInN0cm9rZS13aWR0aCIsb2U9Pm9lLnN0cm9rZVdpZHRoKTticmVha319fX19fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBtdmU9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihfdCxFdCxHdCxsbil7Zm9yKEd0PUd0fHx7fSxsbj1fdC5sZW5ndGg7bG4tLTtHdFtfdFtsbl1dPUV0KTtyZXR1cm4gR3R9LHM9WzEsM10sdT1bMSw0XSxkPVsxLDVdLHA9WzEsNl0sdj1bNSw2LDgsOSwxMSwxMywzMSwzMiwzMywzNCwzNSwzNiw0NCw2Miw2M10sYj1bMSwxOF0seT1bMiw3XSxUPVsxLDIyXSxfPVsxLDIzXSxBPVsxLDI0XSxQPVsxLDI1XSxSPVsxLDI2XSxGPVsxLDI3XSxqPVsxLDIwXSxLPVsxLDI4XSxlZT1bMSwyOV0saWU9WzYyLDYzXSxvZT1bNSw4LDksMTEsMTMsMzEsMzIsMzMsMzQsMzUsMzYsNDQsNTEsNTMsNjIsNjNdLHBlPVsxLDQ3XSxiZT1bMSw0OF0sYWU9WzEsNDldLG5lPVsxLDUwXSxzZT1bMSw1MV0sZGU9WzEsNTJdLFg9WzEsNTNdLGdlPVs1Myw1NF0sVz1bMSw2NF0seGU9WzEsNjBdLFU9WzEsNjFdLEZlPVsxLDYyXSxQZT1bMSw2M10samU9WzEsNjVdLEllPVsxLDY5XSxTZT1bMSw3MF0sQ2U9WzEsNjddLGtlPVsxLDY4XSxLZT1bNSw4LDksMTEsMTMsMzEsMzIsMzMsMzQsMzUsMzYsNDQsNjIsNjNdLEZ0PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxkaXJlY3RpdmU6NCxORVdMSU5FOjUsUkQ6NixkaWFncmFtOjcsRU9GOjgsYWNjX3RpdGxlOjksYWNjX3RpdGxlX3ZhbHVlOjEwLGFjY19kZXNjcjoxMSxhY2NfZGVzY3JfdmFsdWU6MTIsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToxMyxyZXF1aXJlbWVudERlZjoxNCxlbGVtZW50RGVmOjE1LHJlbGF0aW9uc2hpcERlZjoxNixyZXF1aXJlbWVudFR5cGU6MTcscmVxdWlyZW1lbnROYW1lOjE4LFNUUlVDVF9TVEFSVDoxOSxyZXF1aXJlbWVudEJvZHk6MjAsSUQ6MjEsQ09MT05TRVA6MjIsaWQ6MjMsVEVYVDoyNCx0ZXh0OjI1LFJJU0s6MjYscmlza0xldmVsOjI3LFZFUklGWU1USEQ6MjgsdmVyaWZ5VHlwZToyOSxTVFJVQ1RfU1RPUDozMCxSRVFVSVJFTUVOVDozMSxGVU5DVElPTkFMX1JFUVVJUkVNRU5UOjMyLElOVEVSRkFDRV9SRVFVSVJFTUVOVDozMyxQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDozNCxQSFlTSUNBTF9SRVFVSVJFTUVOVDozNSxERVNJR05fQ09OU1RSQUlOVDozNixMT1dfUklTSzozNyxNRURfUklTSzozOCxISUdIX1JJU0s6MzksVkVSSUZZX0FOQUxZU0lTOjQwLFZFUklGWV9ERU1PTlNUUkFUSU9OOjQxLFZFUklGWV9JTlNQRUNUSU9OOjQyLFZFUklGWV9URVNUOjQzLEVMRU1FTlQ6NDQsZWxlbWVudE5hbWU6NDUsZWxlbWVudEJvZHk6NDYsVFlQRTo0Nyx0eXBlOjQ4LERPQ1JFRjo0OSxyZWY6NTAsRU5EX0FSUk9XX0w6NTEscmVsYXRpb25zaGlwOjUyLExJTkU6NTMsRU5EX0FSUk9XX1I6NTQsQ09OVEFJTlM6NTUsQ09QSUVTOjU2LERFUklWRVM6NTcsU0FUSVNGSUVTOjU4LFZFUklGSUVTOjU5LFJFRklORVM6NjAsVFJBQ0VTOjYxLHVucVN0cmluZzo2MixxU3RyaW5nOjYzLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw1OiJORVdMSU5FIiw2OiJSRCIsODoiRU9GIiw5OiJhY2NfdGl0bGUiLDEwOiJhY2NfdGl0bGVfdmFsdWUiLDExOiJhY2NfZGVzY3IiLDEyOiJhY2NfZGVzY3JfdmFsdWUiLDEzOiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwxOToiU1RSVUNUX1NUQVJUIiwyMToiSUQiLDIyOiJDT0xPTlNFUCIsMjQ6IlRFWFQiLDI2OiJSSVNLIiwyODoiVkVSSUZZTVRIRCIsMzA6IlNUUlVDVF9TVE9QIiwzMToiUkVRVUlSRU1FTlQiLDMyOiJGVU5DVElPTkFMX1JFUVVJUkVNRU5UIiwzMzoiSU5URVJGQUNFX1JFUVVJUkVNRU5UIiwzNDoiUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQiLDM1OiJQSFlTSUNBTF9SRVFVSVJFTUVOVCIsMzY6IkRFU0lHTl9DT05TVFJBSU5UIiwzNzoiTE9XX1JJU0siLDM4OiJNRURfUklTSyIsMzk6IkhJR0hfUklTSyIsNDA6IlZFUklGWV9BTkFMWVNJUyIsNDE6IlZFUklGWV9ERU1PTlNUUkFUSU9OIiw0MjoiVkVSSUZZX0lOU1BFQ1RJT04iLDQzOiJWRVJJRllfVEVTVCIsNDQ6IkVMRU1FTlQiLDQ3OiJUWVBFIiw0OToiRE9DUkVGIiw1MToiRU5EX0FSUk9XX0wiLDUzOiJMSU5FIiw1NDoiRU5EX0FSUk9XX1IiLDU1OiJDT05UQUlOUyIsNTY6IkNPUElFUyIsNTc6IkRFUklWRVMiLDU4OiJTQVRJU0ZJRVMiLDU5OiJWRVJJRklFUyIsNjA6IlJFRklORVMiLDYxOiJUUkFDRVMiLDYyOiJ1bnFTdHJpbmciLDYzOiJxU3RyaW5nIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFszLDJdLFszLDRdLFs0LDJdLFs0LDJdLFs0LDFdLFs3LDBdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFsxNCw1XSxbMjAsNV0sWzIwLDVdLFsyMCw1XSxbMjAsNV0sWzIwLDJdLFsyMCwxXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMjcsMV0sWzI3LDFdLFsyNywxXSxbMjksMV0sWzI5LDFdLFsyOSwxXSxbMjksMV0sWzE1LDVdLFs0Niw1XSxbNDYsNV0sWzQ2LDJdLFs0NiwxXSxbMTYsNV0sWzE2LDVdLFs1MiwxXSxbNTIsMV0sWzUyLDFdLFs1MiwxXSxbNTIsMV0sWzUyLDFdLFs1MiwxXSxbMTgsMV0sWzE4LDFdLFsyMywxXSxbMjMsMV0sWzI1LDFdLFsyNSwxXSxbNDUsMV0sWzQ1LDFdLFs0OCwxXSxbNDgsMV0sWzUwLDFdLFs1MCwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihFdCxHdCxsbix4dCxQdCxRZSxEdCl7dmFyIGt0PVFlLmxlbmd0aC0xO3N3aXRjaChQdCl7Y2FzZSA0OnRoaXMuJD1RZVtrdF0udHJpbSgpLHh0LnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSA1OmNhc2UgNjp0aGlzLiQ9UWVba3RdLnRyaW0oKSx4dC5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxMzp4dC5hZGRSZXF1aXJlbWVudChRZVtrdC0zXSxRZVtrdC00XSk7YnJlYWs7Y2FzZSAxNDp4dC5zZXROZXdSZXFJZChRZVtrdC0yXSk7YnJlYWs7Y2FzZSAxNTp4dC5zZXROZXdSZXFUZXh0KFFlW2t0LTJdKTticmVhaztjYXNlIDE2Onh0LnNldE5ld1JlcVJpc2soUWVba3QtMl0pO2JyZWFrO2Nhc2UgMTc6eHQuc2V0TmV3UmVxVmVyaWZ5TWV0aG9kKFFlW2t0LTJdKTticmVhaztjYXNlIDIwOnRoaXMuJD14dC5SZXF1aXJlbWVudFR5cGUuUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9eHQuUmVxdWlyZW1lbnRUeXBlLkZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyMjp0aGlzLiQ9eHQuUmVxdWlyZW1lbnRUeXBlLklOVEVSRkFDRV9SRVFVSVJFTUVOVDticmVhaztjYXNlIDIzOnRoaXMuJD14dC5SZXF1aXJlbWVudFR5cGUuUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyNDp0aGlzLiQ9eHQuUmVxdWlyZW1lbnRUeXBlLlBIWVNJQ0FMX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjU6dGhpcy4kPXh0LlJlcXVpcmVtZW50VHlwZS5ERVNJR05fQ09OU1RSQUlOVDticmVhaztjYXNlIDI2OnRoaXMuJD14dC5SaXNrTGV2ZWwuTE9XX1JJU0s7YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9eHQuUmlza0xldmVsLk1FRF9SSVNLO2JyZWFrO2Nhc2UgMjg6dGhpcy4kPXh0LlJpc2tMZXZlbC5ISUdIX1JJU0s7YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9eHQuVmVyaWZ5VHlwZS5WRVJJRllfQU5BTFlTSVM7YnJlYWs7Y2FzZSAzMDp0aGlzLiQ9eHQuVmVyaWZ5VHlwZS5WRVJJRllfREVNT05TVFJBVElPTjticmVhaztjYXNlIDMxOnRoaXMuJD14dC5WZXJpZnlUeXBlLlZFUklGWV9JTlNQRUNUSU9OO2JyZWFrO2Nhc2UgMzI6dGhpcy4kPXh0LlZlcmlmeVR5cGUuVkVSSUZZX1RFU1Q7YnJlYWs7Y2FzZSAzMzp4dC5hZGRFbGVtZW50KFFlW2t0LTNdKTticmVhaztjYXNlIDM0Onh0LnNldE5ld0VsZW1lbnRUeXBlKFFlW2t0LTJdKTticmVhaztjYXNlIDM1Onh0LnNldE5ld0VsZW1lbnREb2NSZWYoUWVba3QtMl0pO2JyZWFrO2Nhc2UgMzg6eHQuYWRkUmVsYXRpb25zaGlwKFFlW2t0LTJdLFFlW2t0XSxRZVtrdC00XSk7YnJlYWs7Y2FzZSAzOTp4dC5hZGRSZWxhdGlvbnNoaXAoUWVba3QtMl0sUWVba3QtNF0sUWVba3RdKTticmVhaztjYXNlIDQwOnRoaXMuJD14dC5SZWxhdGlvbnNoaXBzLkNPTlRBSU5TO2JyZWFrO2Nhc2UgNDE6dGhpcy4kPXh0LlJlbGF0aW9uc2hpcHMuQ09QSUVTO2JyZWFrO2Nhc2UgNDI6dGhpcy4kPXh0LlJlbGF0aW9uc2hpcHMuREVSSVZFUzticmVhaztjYXNlIDQzOnRoaXMuJD14dC5SZWxhdGlvbnNoaXBzLlNBVElTRklFUzticmVhaztjYXNlIDQ0OnRoaXMuJD14dC5SZWxhdGlvbnNoaXBzLlZFUklGSUVTO2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXh0LlJlbGF0aW9uc2hpcHMuUkVGSU5FUzticmVhaztjYXNlIDQ2OnRoaXMuJD14dC5SZWxhdGlvbnNoaXBzLlRSQUNFUzticmVha319LHRhYmxlOlt7MzoxLDQ6Miw2OnMsOTp1LDExOmQsMTM6cH0sezE6WzNdfSx7Mzo4LDQ6Miw1OlsxLDddLDY6cyw5OnUsMTE6ZCwxMzpwfSx7NTpbMSw5XX0sezEwOlsxLDEwXX0sezEyOlsxLDExXX0saSh2LFsyLDZdKSx7MzoxMiw0OjIsNjpzLDk6dSwxMTpkLDEzOnB9LHsxOlsyLDJdfSx7NDoxNyw1OmIsNzoxMyw4OnksOTp1LDExOmQsMTM6cCwxNDoxNCwxNToxNSwxNjoxNiwxNzoxOSwyMzoyMSwzMTpULDMyOl8sMzM6QSwzNDpQLDM1OlIsMzY6Riw0NDpqLDYyOkssNjM6ZWV9LGkodixbMiw0XSksaSh2LFsyLDVdKSx7MTpbMiwxXX0sezg6WzEsMzBdfSx7NDoxNyw1OmIsNzozMSw4OnksOTp1LDExOmQsMTM6cCwxNDoxNCwxNToxNSwxNjoxNiwxNzoxOSwyMzoyMSwzMTpULDMyOl8sMzM6QSwzNDpQLDM1OlIsMzY6Riw0NDpqLDYyOkssNjM6ZWV9LHs0OjE3LDU6Yiw3OjMyLDg6eSw5OnUsMTE6ZCwxMzpwLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE5LDIzOjIxLDMxOlQsMzI6XywzMzpBLDM0OlAsMzU6UiwzNjpGLDQ0OmosNjI6Syw2MzplZX0sezQ6MTcsNTpiLDc6MzMsODp5LDk6dSwxMTpkLDEzOnAsMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTksMjM6MjEsMzE6VCwzMjpfLDMzOkEsMzQ6UCwzNTpSLDM2OkYsNDQ6aiw2MjpLLDYzOmVlfSx7NDoxNyw1OmIsNzozNCw4OnksOTp1LDExOmQsMTM6cCwxNDoxNCwxNToxNSwxNjoxNiwxNzoxOSwyMzoyMSwzMTpULDMyOl8sMzM6QSwzNDpQLDM1OlIsMzY6Riw0NDpqLDYyOkssNjM6ZWV9LHs0OjE3LDU6Yiw3OjM1LDg6eSw5OnUsMTE6ZCwxMzpwLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE5LDIzOjIxLDMxOlQsMzI6XywzMzpBLDM0OlAsMzU6UiwzNjpGLDQ0OmosNjI6Syw2MzplZX0sezE4OjM2LDYyOlsxLDM3XSw2MzpbMSwzOF19LHs0NTozOSw2MjpbMSw0MF0sNjM6WzEsNDFdfSx7NTE6WzEsNDJdLDUzOlsxLDQzXX0saShpZSxbMiwyMF0pLGkoaWUsWzIsMjFdKSxpKGllLFsyLDIyXSksaShpZSxbMiwyM10pLGkoaWUsWzIsMjRdKSxpKGllLFsyLDI1XSksaShvZSxbMiw0OV0pLGkob2UsWzIsNTBdKSx7MTpbMiwzXX0sezg6WzIsOF19LHs4OlsyLDldfSx7ODpbMiwxMF19LHs4OlsyLDExXX0sezg6WzIsMTJdfSx7MTk6WzEsNDRdfSx7MTk6WzIsNDddfSx7MTk6WzIsNDhdfSx7MTk6WzEsNDVdfSx7MTk6WzIsNTNdfSx7MTk6WzIsNTRdfSx7NTI6NDYsNTU6cGUsNTY6YmUsNTc6YWUsNTg6bmUsNTk6c2UsNjA6ZGUsNjE6WH0sezUyOjU0LDU1OnBlLDU2OmJlLDU3OmFlLDU4Om5lLDU5OnNlLDYwOmRlLDYxOlh9LHs1OlsxLDU1XX0sezU6WzEsNTZdfSx7NTM6WzEsNTddfSxpKGdlLFsyLDQwXSksaShnZSxbMiw0MV0pLGkoZ2UsWzIsNDJdKSxpKGdlLFsyLDQzXSksaShnZSxbMiw0NF0pLGkoZ2UsWzIsNDVdKSxpKGdlLFsyLDQ2XSksezU0OlsxLDU4XX0sezU6VywyMDo1OSwyMTp4ZSwyNDpVLDI2OkZlLDI4OlBlLDMwOmplfSx7NTpJZSwzMDpTZSw0Njo2Niw0NzpDZSw0OTprZX0sezIzOjcxLDYyOkssNjM6ZWV9LHsyMzo3Miw2MjpLLDYzOmVlfSxpKEtlLFsyLDEzXSksezIyOlsxLDczXX0sezIyOlsxLDc0XX0sezIyOlsxLDc1XX0sezIyOlsxLDc2XX0sezU6VywyMDo3NywyMTp4ZSwyNDpVLDI2OkZlLDI4OlBlLDMwOmplfSxpKEtlLFsyLDE5XSksaShLZSxbMiwzM10pLHsyMjpbMSw3OF19LHsyMjpbMSw3OV19LHs1OkllLDMwOlNlLDQ2OjgwLDQ3OkNlLDQ5OmtlfSxpKEtlLFsyLDM3XSksaShLZSxbMiwzOF0pLGkoS2UsWzIsMzldKSx7MjM6ODEsNjI6Syw2MzplZX0sezI1OjgyLDYyOlsxLDgzXSw2MzpbMSw4NF19LHsyNzo4NSwzNzpbMSw4Nl0sMzg6WzEsODddLDM5OlsxLDg4XX0sezI5Ojg5LDQwOlsxLDkwXSw0MTpbMSw5MV0sNDI6WzEsOTJdLDQzOlsxLDkzXX0saShLZSxbMiwxOF0pLHs0ODo5NCw2MjpbMSw5NV0sNjM6WzEsOTZdfSx7NTA6OTcsNjI6WzEsOThdLDYzOlsxLDk5XX0saShLZSxbMiwzNl0pLHs1OlsxLDEwMF19LHs1OlsxLDEwMV19LHs1OlsyLDUxXX0sezU6WzIsNTJdfSx7NTpbMSwxMDJdfSx7NTpbMiwyNl19LHs1OlsyLDI3XX0sezU6WzIsMjhdfSx7NTpbMSwxMDNdfSx7NTpbMiwyOV19LHs1OlsyLDMwXX0sezU6WzIsMzFdfSx7NTpbMiwzMl19LHs1OlsxLDEwNF19LHs1OlsyLDU1XX0sezU6WzIsNTZdfSx7NTpbMSwxMDVdfSx7NTpbMiw1N119LHs1OlsyLDU4XX0sezU6VywyMDoxMDYsMjE6eGUsMjQ6VSwyNjpGZSwyODpQZSwzMDpqZX0sezU6VywyMDoxMDcsMjE6eGUsMjQ6VSwyNjpGZSwyODpQZSwzMDpqZX0sezU6VywyMDoxMDgsMjE6eGUsMjQ6VSwyNjpGZSwyODpQZSwzMDpqZX0sezU6VywyMDoxMDksMjE6eGUsMjQ6VSwyNjpGZSwyODpQZSwzMDpqZX0sezU6SWUsMzA6U2UsNDY6MTEwLDQ3OkNlLDQ5OmtlfSx7NTpJZSwzMDpTZSw0NjoxMTEsNDc6Q2UsNDk6a2V9LGkoS2UsWzIsMTRdKSxpKEtlLFsyLDE1XSksaShLZSxbMiwxNl0pLGkoS2UsWzIsMTddKSxpKEtlLFsyLDM0XSksaShLZSxbMiwzNV0pXSxkZWZhdWx0QWN0aW9uczp7ODpbMiwyXSwxMjpbMiwxXSwzMDpbMiwzXSwzMTpbMiw4XSwzMjpbMiw5XSwzMzpbMiwxMF0sMzQ6WzIsMTFdLDM1OlsyLDEyXSwzNzpbMiw0N10sMzg6WzIsNDhdLDQwOlsyLDUzXSw0MTpbMiw1NF0sODM6WzIsNTFdLDg0OlsyLDUyXSw4NjpbMiwyNl0sODc6WzIsMjddLDg4OlsyLDI4XSw5MDpbMiwyOV0sOTE6WzIsMzBdLDkyOlsyLDMxXSw5MzpbMiwzMl0sOTU6WzIsNTVdLDk2OlsyLDU2XSw5ODpbMiw1N10sOTk6WzIsNThdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKEV0LEd0KXtpZihHdC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKEV0KTtlbHNle3ZhciBsbj1uZXcgRXJyb3IoRXQpO3Rocm93IGxuLmhhc2g9R3QsbG59fSxwYXJzZTpmdW5jdGlvbihFdCl7dmFyIEd0PXRoaXMsbG49WzBdLHh0PVtdLFB0PVtudWxsXSxRZT1bXSxEdD10aGlzLnRhYmxlLGt0PSIiLE9uPTAsaHQ9MCx6cj0yLHl0PTEsamk9UWUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkseGk9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxNYT17eXk6e319O2Zvcih2YXIgenMgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx6cykmJihNYS55eVt6c109dGhpcy55eVt6c10pO3hpLnNldElucHV0KEV0LE1hLnl5KSxNYS55eS5sZXhlcj14aSxNYS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgeGkueXlsbG9jPiJ1IiYmKHhpLnl5bGxvYz17fSk7dmFyIGFvPXhpLnl5bGxvYztRZS5wdXNoKGFvKTt2YXIgVHI9eGkub3B0aW9ucyYmeGkub3B0aW9ucy5yYW5nZXM7dHlwZW9mIE1hLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPU1hLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIEZuKCl7dmFyIFBhO3JldHVybiBQYT14dC5wb3AoKXx8eGkubGV4KCl8fHl0LHR5cGVvZiBQYSE9Im51bWJlciImJihQYSBpbnN0YW5jZW9mIEFycmF5JiYoeHQ9UGEsUGE9eHQucG9wKCkpLFBhPUd0LnN5bWJvbHNfW1BhXXx8UGEpLFBhfWZvcih2YXIgcW4sVW4sQXQsd3Qsb249e30sZm4sQW4sb28sam87Oyl7aWYoVW49bG5bbG4ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbVW5dP0F0PXRoaXMuZGVmYXVsdEFjdGlvbnNbVW5dOigocW49PT1udWxsfHx0eXBlb2YgcW4+InUiKSYmKHFuPUZuKCkpLEF0PUR0W1VuXSYmRHRbVW5dW3FuXSksdHlwZW9mIEF0PiJ1Inx8IUF0Lmxlbmd0aHx8IUF0WzBdKXt2YXIgJG89IiI7am89W107Zm9yKGZuIGluIER0W1VuXSl0aGlzLnRlcm1pbmFsc19bZm5dJiZmbj56ciYmam8ucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW2ZuXSsiJyIpO3hpLnNob3dQb3NpdGlvbj8kbz0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhPbisxKStgOgpgK3hpLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGAram8uam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1txbl18fHFuKSsiJyI6JG89IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoT24rMSkrIjogVW5leHBlY3RlZCAiKyhxbj09eXQ/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bcW5dfHxxbikrIiciKSx0aGlzLnBhcnNlRXJyb3IoJG8se3RleHQ6eGkubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3FuXXx8cW4sbGluZTp4aS55eWxpbmVubyxsb2M6YW8sZXhwZWN0ZWQ6am99KX1pZihBdFswXWluc3RhbmNlb2YgQXJyYXkmJkF0Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrVW4rIiwgdG9rZW46ICIrcW4pO3N3aXRjaChBdFswXSl7Y2FzZSAxOmxuLnB1c2gocW4pLFB0LnB1c2goeGkueXl0ZXh0KSxRZS5wdXNoKHhpLnl5bGxvYyksbG4ucHVzaChBdFsxXSkscW49bnVsbCxodD14aS55eWxlbmcsa3Q9eGkueXl0ZXh0LE9uPXhpLnl5bGluZW5vLGFvPXhpLnl5bGxvYzticmVhaztjYXNlIDI6aWYoQW49dGhpcy5wcm9kdWN0aW9uc19bQXRbMV1dWzFdLG9uLiQ9UHRbUHQubGVuZ3RoLUFuXSxvbi5fJD17Zmlyc3RfbGluZTpRZVtRZS5sZW5ndGgtKEFufHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6UWVbUWUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46UWVbUWUubGVuZ3RoLShBbnx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpRZVtRZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LFRyJiYob24uXyQucmFuZ2U9W1FlW1FlLmxlbmd0aC0oQW58fDEpXS5yYW5nZVswXSxRZVtRZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx3dD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkob24sW2t0LGh0LE9uLE1hLnl5LEF0WzFdLFB0LFFlXS5jb25jYXQoamkpKSx0eXBlb2Ygd3Q8InUiKXJldHVybiB3dDtBbiYmKGxuPWxuLnNsaWNlKDAsLTEqQW4qMiksUHQ9UHQuc2xpY2UoMCwtMSpBbiksUWU9UWUuc2xpY2UoMCwtMSpBbikpLGxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bQXRbMV1dWzBdKSxQdC5wdXNoKG9uLiQpLFFlLnB1c2gob24uXyQpLG9vPUR0W2xuW2xuLmxlbmd0aC0yXV1bbG5bbG4ubGVuZ3RoLTFdXSxsbi5wdXNoKG9vKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sTmU9ZnVuY3Rpb24oKXt2YXIgX3Q9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oR3QsbG4pe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoR3QsbG4pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEd0KX0sc2V0SW5wdXQ6ZnVuY3Rpb24oRXQsR3Qpe3JldHVybiB0aGlzLnl5PUd0fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1FdCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgRXQ9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPUV0LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1FdCx0aGlzLm1hdGNoZWQrPUV0O3ZhciBHdD1FdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEd0Pyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxFdH0sdW5wdXQ6ZnVuY3Rpb24oRXQpe3ZhciBHdD1FdC5sZW5ndGgsbG49RXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1FdCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtR3QpLHRoaXMub2Zmc2V0LT1HdDt2YXIgeHQ9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1sbi5sZW5ndGgtMSk7dmFyIFB0PXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpsbj8obG4ubGVuZ3RoPT09eHQubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKSt4dFt4dC5sZW5ndGgtbG4ubGVuZ3RoXS5sZW5ndGgtbG5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1HdH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtQdFswXSxQdFswXSt0aGlzLnl5bGVuZy1HdF0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKEV0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoRXQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIEV0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oRXQubGVuZ3RoPjIwPyIuLi4iOiIiKStFdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBFdD10aGlzLm1hdGNoO3JldHVybiBFdC5sZW5ndGg8MjAmJihFdCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtRXQubGVuZ3RoKSksKEV0LnN1YnN0cigwLDIwKSsoRXQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBFdD10aGlzLnBhc3RJbnB1dCgpLEd0PW5ldyBBcnJheShFdC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBFdCt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArR3QrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKEV0LEd0KXt2YXIgbG4seHQsUHQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKFB0PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFB0Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLHh0PUV0WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSx4dCYmKHRoaXMueXlsaW5lbm8rPXh0Lmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnh0P3h0W3h0Lmxlbmd0aC0xXS5sZW5ndGgteHRbeHQubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rRXRbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9RXRbMF0sdGhpcy5tYXRjaCs9RXRbMF0sdGhpcy5tYXRjaGVzPUV0LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKEV0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1FdFswXSxsbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxHdCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxsbilyZXR1cm4gbG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIFFlIGluIFB0KXRoaXNbUWVdPVB0W1FlXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBFdCxHdCxsbix4dDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBQdD10aGlzLl9jdXJyZW50UnVsZXMoKSxRZT0wO1FlPFB0Lmxlbmd0aDtRZSsrKWlmKGxuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbUHRbUWVdXSksbG4mJighR3R8fGxuWzBdLmxlbmd0aD5HdFswXS5sZW5ndGgpKXtpZihHdD1sbix4dD1RZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihFdD10aGlzLnRlc3RfbWF0Y2gobG4sUHRbUWVdKSxFdCE9PSExKXJldHVybiBFdDtpZih0aGlzLl9iYWNrdHJhY2spe0d0PSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEd0PyhFdD10aGlzLnRlc3RfbWF0Y2goR3QsUHRbeHRdKSxFdCE9PSExP0V0OiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgR3Q9dGhpcy5uZXh0KCk7cmV0dXJuIEd0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihHdCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEd0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgR3Q9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gR3Q+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihHdCl7cmV0dXJuIEd0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoR3R8fDApLEd0Pj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbR3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEd0KXt0aGlzLmJlZ2luKEd0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihHdCxsbix4dCxQdCl7c3dpdGNoKHh0KXtjYXNlIDA6cmV0dXJuInRpdGxlIjtjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDk7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSAzOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxMTtjYXNlIDQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDU6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA3OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDg6cmV0dXJuIDU7Y2FzZSA5OmJyZWFrO2Nhc2UgMTA6YnJlYWs7Y2FzZSAxMTpicmVhaztjYXNlIDEyOnJldHVybiA4O2Nhc2UgMTM6cmV0dXJuIDY7Y2FzZSAxNDpyZXR1cm4gMTk7Y2FzZSAxNTpyZXR1cm4gMzA7Y2FzZSAxNjpyZXR1cm4gMjI7Y2FzZSAxNzpyZXR1cm4gMjE7Y2FzZSAxODpyZXR1cm4gMjQ7Y2FzZSAxOTpyZXR1cm4gMjY7Y2FzZSAyMDpyZXR1cm4gMjg7Y2FzZSAyMTpyZXR1cm4gMzE7Y2FzZSAyMjpyZXR1cm4gMzI7Y2FzZSAyMzpyZXR1cm4gMzM7Y2FzZSAyNDpyZXR1cm4gMzQ7Y2FzZSAyNTpyZXR1cm4gMzU7Y2FzZSAyNjpyZXR1cm4gMzY7Y2FzZSAyNzpyZXR1cm4gMzc7Y2FzZSAyODpyZXR1cm4gMzg7Y2FzZSAyOTpyZXR1cm4gMzk7Y2FzZSAzMDpyZXR1cm4gNDA7Y2FzZSAzMTpyZXR1cm4gNDE7Y2FzZSAzMjpyZXR1cm4gNDI7Y2FzZSAzMzpyZXR1cm4gNDM7Y2FzZSAzNDpyZXR1cm4gNDQ7Y2FzZSAzNTpyZXR1cm4gNTU7Y2FzZSAzNjpyZXR1cm4gNTY7Y2FzZSAzNzpyZXR1cm4gNTc7Y2FzZSAzODpyZXR1cm4gNTg7Y2FzZSAzOTpyZXR1cm4gNTk7Y2FzZSA0MDpyZXR1cm4gNjA7Y2FzZSA0MTpyZXR1cm4gNjE7Y2FzZSA0MjpyZXR1cm4gNDc7Y2FzZSA0MzpyZXR1cm4gNDk7Y2FzZSA0NDpyZXR1cm4gNTE7Y2FzZSA0NTpyZXR1cm4gNTQ7Y2FzZSA0NjpyZXR1cm4gNTM7Y2FzZSA0Nzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDQ4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDQ5OnJldHVybiJxU3RyaW5nIjtjYXNlIDUwOnJldHVybiBsbi55eXRleHQ9bG4ueXl0ZXh0LnRyaW0oKSw2Mn19LHJ1bGVzOlsvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86KFxyP1xuKSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OiQpL2ksL14oPzpyZXF1aXJlbWVudERpYWdyYW1cYikvaSwvXig/Olx7KS9pLC9eKD86XH0pL2ksL14oPzo6KS9pLC9eKD86aWRcYikvaSwvXig/OnRleHRcYikvaSwvXig/OnJpc2tcYikvaSwvXig/OnZlcmlmeU1ldGhvZFxiKS9pLC9eKD86cmVxdWlyZW1lbnRcYikvaSwvXig/OmZ1bmN0aW9uYWxSZXF1aXJlbWVudFxiKS9pLC9eKD86aW50ZXJmYWNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBlcmZvcm1hbmNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBoeXNpY2FsUmVxdWlyZW1lbnRcYikvaSwvXig/OmRlc2lnbkNvbnN0cmFpbnRcYikvaSwvXig/Omxvd1xiKS9pLC9eKD86bWVkaXVtXGIpL2ksL14oPzpoaWdoXGIpL2ksL14oPzphbmFseXNpc1xiKS9pLC9eKD86ZGVtb25zdHJhdGlvblxiKS9pLC9eKD86aW5zcGVjdGlvblxiKS9pLC9eKD86dGVzdFxiKS9pLC9eKD86ZWxlbWVudFxiKS9pLC9eKD86Y29udGFpbnNcYikvaSwvXig/OmNvcGllc1xiKS9pLC9eKD86ZGVyaXZlc1xiKS9pLC9eKD86c2F0aXNmaWVzXGIpL2ksL14oPzp2ZXJpZmllc1xiKS9pLC9eKD86cmVmaW5lc1xiKS9pLC9eKD86dHJhY2VzXGIpL2ksL14oPzp0eXBlXGIpL2ksL14oPzpkb2NyZWZcYikvaSwvXig/OjwtKS9pLC9eKD86LT4pL2ksL14oPzotKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXHddW15cclxuXHtcPFw+XC1cPV0qKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNiw3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzRdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMl0saW5jbHVzaXZlOiExfSx1bnFTdHJpbmc6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sdG9rZW46e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbNDgsNDldLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwzLDUsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDUwXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIF90fSgpO0Z0LmxleGVyPU5lO2Z1bmN0aW9uIGduKCl7dGhpcy55eT17fX1yZXR1cm4gZ24ucHJvdG90eXBlPUZ0LEZ0LlBhcnNlcj1nbixuZXcgZ259KCk7bXZlLnBhcnNlcj1tdmU7Y29uc3QgbHJuPW12ZTtsZXQgdnZlPVtdLFYyPXt9LFZSPXt9LEY5PXt9LFVSPXt9O2NvbnN0IGhybj17UmVxdWlyZW1lbnRUeXBlOntSRVFVSVJFTUVOVDoiUmVxdWlyZW1lbnQiLEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6IkZ1bmN0aW9uYWwgUmVxdWlyZW1lbnQiLElOVEVSRkFDRV9SRVFVSVJFTUVOVDoiSW50ZXJmYWNlIFJlcXVpcmVtZW50IixQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDoiUGVyZm9ybWFuY2UgUmVxdWlyZW1lbnQiLFBIWVNJQ0FMX1JFUVVJUkVNRU5UOiJQaHlzaWNhbCBSZXF1aXJlbWVudCIsREVTSUdOX0NPTlNUUkFJTlQ6IkRlc2lnbiBDb25zdHJhaW50In0sUmlza0xldmVsOntMT1dfUklTSzoiTG93IixNRURfUklTSzoiTWVkaXVtIixISUdIX1JJU0s6IkhpZ2gifSxWZXJpZnlUeXBlOntWRVJJRllfQU5BTFlTSVM6IkFuYWx5c2lzIixWRVJJRllfREVNT05TVFJBVElPTjoiRGVtb25zdHJhdGlvbiIsVkVSSUZZX0lOU1BFQ1RJT046Ikluc3BlY3Rpb24iLFZFUklGWV9URVNUOiJUZXN0In0sUmVsYXRpb25zaGlwczp7Q09OVEFJTlM6ImNvbnRhaW5zIixDT1BJRVM6ImNvcGllcyIsREVSSVZFUzoiZGVyaXZlcyIsU0FUSVNGSUVTOiJzYXRpc2ZpZXMiLFZFUklGSUVTOiJ2ZXJpZmllcyIsUkVGSU5FUzoicmVmaW5lcyIsVFJBQ0VTOiJ0cmFjZXMifSxnZXRDb25maWc6KCk9PnF0KCkucmVxLGFkZFJlcXVpcmVtZW50OihpLHMpPT4oVlJbaV09PT12b2lkIDAmJihWUltpXT17bmFtZTppLHR5cGU6cyxpZDpWMi5pZCx0ZXh0OlYyLnRleHQscmlzazpWMi5yaXNrLHZlcmlmeU1ldGhvZDpWMi52ZXJpZnlNZXRob2R9KSxWMj17fSxWUltpXSksZ2V0UmVxdWlyZW1lbnRzOigpPT5WUixzZXROZXdSZXFJZDppPT57VjIhPT12b2lkIDAmJihWMi5pZD1pKX0sc2V0TmV3UmVxVGV4dDppPT57VjIhPT12b2lkIDAmJihWMi50ZXh0PWkpfSxzZXROZXdSZXFSaXNrOmk9PntWMiE9PXZvaWQgMCYmKFYyLnJpc2s9aSl9LHNldE5ld1JlcVZlcmlmeU1ldGhvZDppPT57VjIhPT12b2lkIDAmJihWMi52ZXJpZnlNZXRob2Q9aSl9LHNldEFjY1RpdGxlOkJnLGdldEFjY1RpdGxlOkNwLHNldEFjY0Rlc2NyaXB0aW9uOlNwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLGFkZEVsZW1lbnQ6aT0+KFVSW2ldPT09dm9pZCAwJiYoVVJbaV09e25hbWU6aSx0eXBlOkY5LnR5cGUsZG9jUmVmOkY5LmRvY1JlZn0sWGUuaW5mbygiQWRkZWQgbmV3IHJlcXVpcmVtZW50OiAiLGkpKSxGOT17fSxVUltpXSksZ2V0RWxlbWVudHM6KCk9PlVSLHNldE5ld0VsZW1lbnRUeXBlOmk9PntGOSE9PXZvaWQgMCYmKEY5LnR5cGU9aSl9LHNldE5ld0VsZW1lbnREb2NSZWY6aT0+e0Y5IT09dm9pZCAwJiYoRjkuZG9jUmVmPWkpfSxhZGRSZWxhdGlvbnNoaXA6KGkscyx1KT0+e3Z2ZS5wdXNoKHt0eXBlOmksc3JjOnMsZHN0OnV9KX0sZ2V0UmVsYXRpb25zaGlwczooKT0+dnZlLGNsZWFyOigpPT57dnZlPVtdLFYyPXt9LFZSPXt9LEY5PXt9LFVSPXt9LFBnKCl9fSxmcm49aT0+YAoKICBtYXJrZXIgewogICAgZmlsbDogJHtpLnJlbGF0aW9uQ29sb3J9OwogICAgc3Ryb2tlOiAke2kucmVsYXRpb25Db2xvcn07CiAgfQoKICBtYXJrZXIuY3Jvc3MgewogICAgc3Ryb2tlOiAke2kubGluZUNvbG9yfTsKICB9CgogIHN2ZyB7CiAgICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAke2kuZm9udFNpemV9OwogIH0KCiAgLnJlcUJveCB7CiAgICBmaWxsOiAke2kucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfTsKICAgIGZpbGwtb3BhY2l0eTogMS4wOwogICAgc3Ryb2tlOiAke2kucmVxdWlyZW1lbnRCb3JkZXJDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6ICR7aS5yZXF1aXJlbWVudEJvcmRlclNpemV9OwogIH0KICAKICAucmVxVGl0bGUsIC5yZXFMYWJlbHsKICAgIGZpbGw6ICAke2kucmVxdWlyZW1lbnRUZXh0Q29sb3J9OwogIH0KICAucmVxTGFiZWxCb3ggewogICAgZmlsbDogJHtpLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfTsKICAgIGZpbGwtb3BhY2l0eTogMS4wOwogIH0KCiAgLnJlcS10aXRsZS1saW5lIHsKICAgIHN0cm9rZTogJHtpLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAke2kucmVxdWlyZW1lbnRCb3JkZXJTaXplfTsKICB9CiAgLnJlbGF0aW9uc2hpcExpbmUgewogICAgc3Ryb2tlOiAke2kucmVsYXRpb25Db2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgfQogIC5yZWxhdGlvbnNoaXBMYWJlbCB7CiAgICBmaWxsOiAke2kucmVsYXRpb25MYWJlbENvbG9yfTsKICB9CgpgLHd2ZT17Q09OVEFJTlM6ImNvbnRhaW5zIixBUlJPVzoiYXJyb3cifSxTR2U9e1JlcU1hcmtlcnM6d3ZlLGluc2VydExpbmVFbmRpbmdzOihpLHMpPT57bGV0IHU9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix3dmUuQ09OVEFJTlMrIl9saW5lX2VuZGluZyIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLHMubGluZV9oZWlnaHQvMikuYXR0cigibWFya2VyV2lkdGgiLHMubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlckhlaWdodCIscy5saW5lX2hlaWdodCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiZyIpO3UuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIscy5saW5lX2hlaWdodC8yKS5hdHRyKCJjeSIscy5saW5lX2hlaWdodC8yKS5hdHRyKCJyIixzLmxpbmVfaGVpZ2h0LzIpLmF0dHIoImZpbGwiLCJub25lIiksdS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLHMubGluZV9oZWlnaHQpLmF0dHIoInkxIixzLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInkyIixzLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksdS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLHMubGluZV9oZWlnaHQpLmF0dHIoIngxIixzLmxpbmVfaGVpZ2h0LzIpLmF0dHIoIngyIixzLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix3dmUuQVJST1crIl9saW5lX2VuZGluZyIpLmF0dHIoInJlZlgiLHMubGluZV9oZWlnaHQpLmF0dHIoInJlZlkiLC41KnMubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlcldpZHRoIixzLmxpbmVfaGVpZ2h0KS5hdHRyKCJtYXJrZXJIZWlnaHQiLHMubGluZV9oZWlnaHQpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixgTTAsMAogICAgICBMJHtzLmxpbmVfaGVpZ2h0fSwke3MubGluZV9oZWlnaHQvMn0KICAgICAgTSR7cy5saW5lX2hlaWdodH0sJHtzLmxpbmVfaGVpZ2h0LzJ9CiAgICAgIEwwLCR7cy5saW5lX2hlaWdodH1gKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEpfX07bGV0IFRmPXt9LF9HZT0wO2NvbnN0IEFHZT0oaSxzKT0+aS5pbnNlcnQoInJlY3QiLCIjIitzKS5hdHRyKCJjbGFzcyIsInJlcSByZXFCb3giKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsVGYucmVjdF9taW5fd2lkdGgrInB4IikuYXR0cigiaGVpZ2h0IixUZi5yZWN0X21pbl9oZWlnaHQrInB4IiksTEdlPShpLHMsdSk9PntsZXQgZD1UZi5yZWN0X21pbl93aWR0aC8yLHA9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZXFMYWJlbCByZXFUaXRsZSIpLmF0dHIoImlkIixzKS5hdHRyKCJ4IixkKS5hdHRyKCJ5IixUZi5yZWN0X3BhZGRpbmcpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiaGFuZ2luZyIpLHY9MDt1LmZvckVhY2goXz0+e3Y9PTA/cC5hcHBlbmQoInRzcGFuIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4IixUZi5yZWN0X21pbl93aWR0aC8yKS5hdHRyKCJkeSIsMCkudGV4dChfKTpwLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLFRmLnJlY3RfbWluX3dpZHRoLzIpLmF0dHIoImR5IixUZi5saW5lX2hlaWdodCouNzUpLnRleHQoXyksdisrfSk7bGV0IGI9MS41KlRmLnJlY3RfcGFkZGluZyx5PXYqVGYubGluZV9oZWlnaHQqLjc1LFQ9Yit5O3JldHVybiBpLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwicmVxLXRpdGxlLWxpbmUiKS5hdHRyKCJ4MSIsIjAiKS5hdHRyKCJ4MiIsVGYucmVjdF9taW5fd2lkdGgpLmF0dHIoInkxIixUKS5hdHRyKCJ5MiIsVCkse3RpdGxlTm9kZTpwLHk6VH19LE1HZT0oaSxzLHUsZCk9PntsZXQgcD1pLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwicmVxIHJlcUxhYmVsIikuYXR0cigiaWQiLHMpLmF0dHIoIngiLFRmLnJlY3RfcGFkZGluZykuYXR0cigieSIsZCkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJoYW5naW5nIiksdj0wO2NvbnN0IGI9MzA7bGV0IHk9W107cmV0dXJuIHUuZm9yRWFjaChUPT57bGV0IF89VC5sZW5ndGg7Zm9yKDtfPmImJnY8Mzspe2xldCBBPVQuc3Vic3RyaW5nKDAsYik7VD1ULnN1YnN0cmluZyhiLFQubGVuZ3RoKSxfPVQubGVuZ3RoLHlbeS5sZW5ndGhdPUEsdisrfWlmKHY9PTMpe2xldCBBPXlbeS5sZW5ndGgtMV07eVt5Lmxlbmd0aC0xXT1BLnN1YnN0cmluZygwLEEubGVuZ3RoLTQpKyIuLi4ifWVsc2UgeVt5Lmxlbmd0aF09VDt2PTB9KSx5LmZvckVhY2goVD0+e3AuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLFRmLnJlY3RfcGFkZGluZykuYXR0cigiZHkiLFRmLmxpbmVfaGVpZ2h0KS50ZXh0KFQpfSkscH0sZHJuPShpLHMsdSxkKT0+e2NvbnN0IHA9cy5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSx2PXMubm9kZSgpLmdldFBvaW50QXRMZW5ndGgocCouNSksYj0icmVsIitfR2U7X0dlKys7Y29uc3QgVD1pLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwicmVxIHJlbGF0aW9uc2hpcExhYmVsIikuYXR0cigiaWQiLGIpLmF0dHIoIngiLHYueCkuYXR0cigieSIsdi55KS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikudGV4dChkKS5ub2RlKCkuZ2V0QkJveCgpO2kuaW5zZXJ0KCJyZWN0IiwiIyIrYikuYXR0cigiY2xhc3MiLCJyZXEgcmVxTGFiZWxCb3giKS5hdHRyKCJ4Iix2LngtVC53aWR0aC8yKS5hdHRyKCJ5Iix2LnktVC5oZWlnaHQvMikuYXR0cigid2lkdGgiLFQud2lkdGgpLmF0dHIoImhlaWdodCIsVC5oZWlnaHQpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjg1JSIpfSxncm49ZnVuY3Rpb24oaSxzLHUsZCxwKXtjb25zdCB2PXUuZWRnZShXRChzLnNyYyksV0Qocy5kc3QpKSxiPWs3KCkueChmdW5jdGlvbihUKXtyZXR1cm4gVC54fSkueShmdW5jdGlvbihUKXtyZXR1cm4gVC55fSkseT1pLmluc2VydCgicGF0aCIsIiMiK2QpLmF0dHIoImNsYXNzIiwiZXIgcmVsYXRpb25zaGlwTGluZSIpLmF0dHIoImQiLGIodi5wb2ludHMpKS5hdHRyKCJmaWxsIiwibm9uZSIpO3MudHlwZT09cC5kYi5SZWxhdGlvbnNoaXBzLkNPTlRBSU5TP3kuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrY2kuZ2V0VXJsKFRmLmFycm93TWFya2VyQWJzb2x1dGUpKyIjIitzLnR5cGUrIl9saW5lX2VuZGluZykiKTooeS5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiMTAsNyIpLHkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2NpLmdldFVybChUZi5hcnJvd01hcmtlckFic29sdXRlKSsiIyIrU0dlLlJlcU1hcmtlcnMuQVJST1crIl9saW5lX2VuZGluZykiKSksZHJuKGkseSxUZixgPDwke3MudHlwZX0+PmApfSxwcm49KGkscyx1KT0+e09iamVjdC5rZXlzKGkpLmZvckVhY2goZD0+e2xldCBwPWlbZF07ZD1XRChkKSxYZS5pbmZvKCJBZGRlZCBuZXcgcmVxdWlyZW1lbnQ6ICIsZCk7Y29uc3Qgdj11LmFwcGVuZCgiZyIpLmF0dHIoImlkIixkKSxiPSJyZXEtIitkLHk9QUdlKHYsYik7bGV0IFQ9TEdlKHYsZCsiX3RpdGxlIixbYDw8JHtwLnR5cGV9Pj5gLGAke3AubmFtZX1gXSk7TUdlKHYsZCsiX2JvZHkiLFtgSWQ6ICR7cC5pZH1gLGBUZXh0OiAke3AudGV4dH1gLGBSaXNrOiAke3Aucmlza31gLGBWZXJpZmljYXRpb246ICR7cC52ZXJpZnlNZXRob2R9YF0sVC55KTtjb25zdCBfPXkubm9kZSgpLmdldEJCb3goKTtzLnNldE5vZGUoZCx7d2lkdGg6Xy53aWR0aCxoZWlnaHQ6Xy5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOmR9KX0pfSxicm49KGkscyx1KT0+e09iamVjdC5rZXlzKGkpLmZvckVhY2goZD0+e2xldCBwPWlbZF07Y29uc3Qgdj1XRChkKSxiPXUuYXBwZW5kKCJnIikuYXR0cigiaWQiLHYpLHk9ImVsZW1lbnQtIit2LFQ9QUdlKGIseSk7bGV0IF89TEdlKGIseSsiX3RpdGxlIixbIjw8RWxlbWVudD4+IixgJHtkfWBdKTtNR2UoYix5KyJfYm9keSIsW2BUeXBlOiAke3AudHlwZXx8Ik5vdCBTcGVjaWZpZWQifWAsYERvYyBSZWY6ICR7cC5kb2NSZWZ8fCJOb25lIn1gXSxfLnkpO2NvbnN0IEE9VC5ub2RlKCkuZ2V0QkJveCgpO3Muc2V0Tm9kZSh2LHt3aWR0aDpBLndpZHRoLGhlaWdodDpBLmhlaWdodCxzaGFwZToicmVjdCIsaWQ6dn0pfSl9LG1ybj0oaSxzKT0+KGkuZm9yRWFjaChmdW5jdGlvbih1KXtsZXQgZD1XRCh1LnNyYykscD1XRCh1LmRzdCk7cy5zZXRFZGdlKGQscCx7cmVsYXRpb25zaGlwOnV9KX0pLGkpLHZybj1mdW5jdGlvbihpLHMpe3Mubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe3UhPT12b2lkIDAmJnMubm9kZSh1KSE9PXZvaWQgMCYmKGkuc2VsZWN0KCIjIit1KSxpLnNlbGVjdCgiIyIrdSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHMubm9kZSh1KS54LXMubm9kZSh1KS53aWR0aC8yKSsiLCIrKHMubm9kZSh1KS55LXMubm9kZSh1KS5oZWlnaHQvMikrIiApIikpfSl9LFdEPWk9PmkucmVwbGFjZSgvXHMvZywiIikucmVwbGFjZSgvXC4vZywiXyIpLHdybj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOmxybixkYjpocm4scmVuZGVyZXI6e2RyYXc6KGkscyx1LGQpPT57VGY9cXQoKS5yZXF1aXJlbWVudDtjb25zdCBwPVRmLnNlY3VyaXR5TGV2ZWw7bGV0IHY7cD09PSJzYW5kYm94IiYmKHY9SXIoIiNpIitzKSk7Y29uc3QgeT1JcihwPT09InNhbmRib3giP3Yubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLnNlbGVjdChgW2lkPScke3N9J11gKTtTR2UuaW5zZXJ0TGluZUVuZGluZ3MoeSxUZik7Y29uc3QgVD1uZXcgQjAoe211bHRpZ3JhcGg6ITEsY29tcG91bmQ6ITEsZGlyZWN0ZWQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpUZi5sYXlvdXREaXJlY3Rpb24sbWFyZ2lueDoyMCxtYXJnaW55OjIwLG5vZGVzZXA6MTAwLGVkZ2VzZXA6MTAwLHJhbmtzZXA6MTAwfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7bGV0IF89ZC5kYi5nZXRSZXF1aXJlbWVudHMoKSxBPWQuZGIuZ2V0RWxlbWVudHMoKSxQPWQuZGIuZ2V0UmVsYXRpb25zaGlwcygpO3BybihfLFQseSksYnJuKEEsVCx5KSxtcm4oUCxUKSxxRChUKSx2cm4oeSxUKSxQLmZvckVhY2goZnVuY3Rpb24oZWUpe2dybih5LGVlLFQscyxkKX0pO2NvbnN0IFI9VGYucmVjdF9wYWRkaW5nLEY9eS5ub2RlKCkuZ2V0QkJveCgpLGo9Ri53aWR0aCtSKjIsSz1GLmhlaWdodCtSKjI7TmcoeSxLLGosVGYudXNlTWF4V2lkdGgpLHkuYXR0cigidmlld0JveCIsYCR7Ri54LVJ9ICR7Ri55LVJ9ICR7an0gJHtLfWApfX0sc3R5bGVzOmZybn19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIHl2ZT1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKHh0LFB0LFFlLER0KXtmb3IoUWU9UWV8fHt9LER0PXh0Lmxlbmd0aDtEdC0tO1FlW3h0W0R0XV09UHQpO3JldHVybiBRZX0scz1bMSwyXSx1PVsxLDNdLGQ9WzEsNF0scD1bMiw0XSx2PVsxLDldLGI9WzEsMTFdLHk9WzEsMTNdLFQ9WzEsMTRdLF89WzEsMTZdLEE9WzEsMTddLFA9WzEsMThdLFI9WzEsMjRdLEY9WzEsMjVdLGo9WzEsMjZdLEs9WzEsMjddLGVlPVsxLDI4XSxpZT1bMSwyOV0sb2U9WzEsMzBdLHBlPVsxLDMxXSxiZT1bMSwzMl0sYWU9WzEsMzNdLG5lPVsxLDM0XSxzZT1bMSwzNV0sZGU9WzEsMzZdLFg9WzEsMzddLGdlPVsxLDM4XSxXPVsxLDM5XSx4ZT1bMSw0MV0sVT1bMSw0Ml0sRmU9WzEsNDNdLFBlPVsxLDQ0XSxqZT1bMSw0NV0sSWU9WzEsNDZdLFNlPVsxLDQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0Nyw0OCw0OSw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sQ2U9WzQsNSwxNiw1MCw1Miw1M10sa2U9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sS2U9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0OSw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sRnQ9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0OCw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sTmU9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0Nyw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sZ249WzY4LDY5LDcwXSxfdD1bMSwxMjBdLEV0PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxTUEFDRTo0LE5FV0xJTkU6NSxTRDo2LGRvY3VtZW50OjcsbGluZTo4LHN0YXRlbWVudDo5LGJveF9zZWN0aW9uOjEwLGJveF9saW5lOjExLHBhcnRpY2lwYW50X3N0YXRlbWVudDoxMixjcmVhdGU6MTMsYm94OjE0LHJlc3RPZkxpbmU6MTUsZW5kOjE2LHNpZ25hbDoxNyxhdXRvbnVtYmVyOjE4LE5VTToxOSxvZmY6MjAsYWN0aXZhdGU6MjEsYWN0b3I6MjIsZGVhY3RpdmF0ZToyMyxub3RlX3N0YXRlbWVudDoyNCxsaW5rc19zdGF0ZW1lbnQ6MjUsbGlua19zdGF0ZW1lbnQ6MjYscHJvcGVydGllc19zdGF0ZW1lbnQ6MjcsZGV0YWlsc19zdGF0ZW1lbnQ6MjgsdGl0bGU6MjksbGVnYWN5X3RpdGxlOjMwLGFjY190aXRsZTozMSxhY2NfdGl0bGVfdmFsdWU6MzIsYWNjX2Rlc2NyOjMzLGFjY19kZXNjcl92YWx1ZTozNCxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM1LGxvb3A6MzYscmVjdDozNyxvcHQ6MzgsYWx0OjM5LGVsc2Vfc2VjdGlvbnM6NDAscGFyOjQxLHBhcl9zZWN0aW9uczo0MixwYXJfb3Zlcjo0Myxjcml0aWNhbDo0NCxvcHRpb25fc2VjdGlvbnM6NDUsYnJlYWs6NDYsb3B0aW9uOjQ3LGFuZDo0OCxlbHNlOjQ5LHBhcnRpY2lwYW50OjUwLEFTOjUxLHBhcnRpY2lwYW50X2FjdG9yOjUyLGRlc3Ryb3k6NTMsbm90ZTo1NCxwbGFjZW1lbnQ6NTUsdGV4dDI6NTYsb3Zlcjo1NyxhY3Rvcl9wYWlyOjU4LGxpbmtzOjU5LGxpbms6NjAscHJvcGVydGllczo2MSxkZXRhaWxzOjYyLHNwYWNlTGlzdDo2MywiLCI6NjQsbGVmdF9vZjo2NSxyaWdodF9vZjo2NixzaWduYWx0eXBlOjY3LCIrIjo2OCwiLSI6NjksQUNUT1I6NzAsU09MSURfT1BFTl9BUlJPVzo3MSxET1RURURfT1BFTl9BUlJPVzo3MixTT0xJRF9BUlJPVzo3MyxET1RURURfQVJST1c6NzQsU09MSURfQ1JPU1M6NzUsRE9UVEVEX0NST1NTOjc2LFNPTElEX1BPSU5UOjc3LERPVFRFRF9QT0lOVDo3OCxUWFQ6NzksJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJORVdMSU5FIiw2OiJTRCIsMTM6ImNyZWF0ZSIsMTQ6ImJveCIsMTU6InJlc3RPZkxpbmUiLDE2OiJlbmQiLDE4OiJhdXRvbnVtYmVyIiwxOToiTlVNIiwyMDoib2ZmIiwyMToiYWN0aXZhdGUiLDIzOiJkZWFjdGl2YXRlIiwyOToidGl0bGUiLDMwOiJsZWdhY3lfdGl0bGUiLDMxOiJhY2NfdGl0bGUiLDMyOiJhY2NfdGl0bGVfdmFsdWUiLDMzOiJhY2NfZGVzY3IiLDM0OiJhY2NfZGVzY3JfdmFsdWUiLDM1OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzNjoibG9vcCIsMzc6InJlY3QiLDM4OiJvcHQiLDM5OiJhbHQiLDQxOiJwYXIiLDQzOiJwYXJfb3ZlciIsNDQ6ImNyaXRpY2FsIiw0NjoiYnJlYWsiLDQ3OiJvcHRpb24iLDQ4OiJhbmQiLDQ5OiJlbHNlIiw1MDoicGFydGljaXBhbnQiLDUxOiJBUyIsNTI6InBhcnRpY2lwYW50X2FjdG9yIiw1MzoiZGVzdHJveSIsNTQ6Im5vdGUiLDU3OiJvdmVyIiw1OToibGlua3MiLDYwOiJsaW5rIiw2MToicHJvcGVydGllcyIsNjI6ImRldGFpbHMiLDY0OiIsIiw2NToibGVmdF9vZiIsNjY6InJpZ2h0X29mIiw2ODoiKyIsNjk6Ii0iLDcwOiJBQ1RPUiIsNzE6IlNPTElEX09QRU5fQVJST1ciLDcyOiJET1RURURfT1BFTl9BUlJPVyIsNzM6IlNPTElEX0FSUk9XIiw3NDoiRE9UVEVEX0FSUk9XIiw3NToiU09MSURfQ1JPU1MiLDc2OiJET1RURURfQ1JPU1MiLDc3OiJTT0xJRF9QT0lOVCIsNzg6IkRPVFRFRF9QT0lOVCIsNzk6IlRYVCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbNywwXSxbNywyXSxbOCwyXSxbOCwxXSxbOCwxXSxbMTAsMF0sWzEwLDJdLFsxMSwyXSxbMTEsMV0sWzExLDFdLFs5LDFdLFs5LDJdLFs5LDRdLFs5LDJdLFs5LDRdLFs5LDNdLFs5LDNdLFs5LDJdLFs5LDNdLFs5LDNdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs0NSwxXSxbNDUsNF0sWzQyLDFdLFs0Miw0XSxbNDAsMV0sWzQwLDRdLFsxMiw1XSxbMTIsM10sWzEyLDVdLFsxMiwzXSxbMTIsM10sWzI0LDRdLFsyNCw0XSxbMjUsM10sWzI2LDNdLFsyNywzXSxbMjgsM10sWzYzLDJdLFs2MywxXSxbNTgsM10sWzU4LDFdLFs1NSwxXSxbNTUsMV0sWzE3LDVdLFsxNyw1XSxbMTcsNF0sWzIyLDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzU2LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKFB0LFFlLER0LGt0LE9uLGh0LHpyKXt2YXIgeXQ9aHQubGVuZ3RoLTE7c3dpdGNoKE9uKXtjYXNlIDM6cmV0dXJuIGt0LmFwcGx5KGh0W3l0XSksaHRbeXRdO2Nhc2UgNDpjYXNlIDk6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNTpjYXNlIDEwOmh0W3l0LTFdLnB1c2goaHRbeXRdKSx0aGlzLiQ9aHRbeXQtMV07YnJlYWs7Y2FzZSA2OmNhc2UgNzpjYXNlIDExOmNhc2UgMTI6dGhpcy4kPWh0W3l0XTticmVhaztjYXNlIDg6Y2FzZSAxMzp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxNTpodFt5dF0udHlwZT0iY3JlYXRlUGFydGljaXBhbnQiLHRoaXMuJD1odFt5dF07YnJlYWs7Y2FzZSAxNjpodFt5dC0xXS51bnNoaWZ0KHt0eXBlOiJib3hTdGFydCIsYm94RGF0YTprdC5wYXJzZUJveERhdGEoaHRbeXQtMl0pfSksaHRbeXQtMV0ucHVzaCh7dHlwZToiYm94RW5kIixib3hUZXh0Omh0W3l0LTJdfSksdGhpcy4kPWh0W3l0LTFdO2JyZWFrO2Nhc2UgMTg6dGhpcy4kPXt0eXBlOiJzZXF1ZW5jZUluZGV4IixzZXF1ZW5jZUluZGV4Ok51bWJlcihodFt5dC0yXSksc2VxdWVuY2VJbmRleFN0ZXA6TnVtYmVyKGh0W3l0LTFdKSxzZXF1ZW5jZVZpc2libGU6ITAsc2lnbmFsVHlwZTprdC5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDE5OnRoaXMuJD17dHlwZToic2VxdWVuY2VJbmRleCIsc2VxdWVuY2VJbmRleDpOdW1iZXIoaHRbeXQtMV0pLHNlcXVlbmNlSW5kZXhTdGVwOjEsc2VxdWVuY2VWaXNpYmxlOiEwLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuQVVUT05VTUJFUn07YnJlYWs7Y2FzZSAyMDp0aGlzLiQ9e3R5cGU6InNlcXVlbmNlSW5kZXgiLHNlcXVlbmNlVmlzaWJsZTohMSxzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkFVVE9OVU1CRVJ9O2JyZWFrO2Nhc2UgMjE6dGhpcy4kPXt0eXBlOiJzZXF1ZW5jZUluZGV4IixzZXF1ZW5jZVZpc2libGU6ITAsc2lnbmFsVHlwZTprdC5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDIyOnRoaXMuJD17dHlwZToiYWN0aXZlU3RhcnQiLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuQUNUSVZFX1NUQVJULGFjdG9yOmh0W3l0LTFdfTticmVhaztjYXNlIDIzOnRoaXMuJD17dHlwZToiYWN0aXZlRW5kIixzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkFDVElWRV9FTkQsYWN0b3I6aHRbeXQtMV19O2JyZWFrO2Nhc2UgMjk6a3Quc2V0RGlhZ3JhbVRpdGxlKGh0W3l0XS5zdWJzdHJpbmcoNikpLHRoaXMuJD1odFt5dF0uc3Vic3RyaW5nKDYpO2JyZWFrO2Nhc2UgMzA6a3Quc2V0RGlhZ3JhbVRpdGxlKGh0W3l0XS5zdWJzdHJpbmcoNykpLHRoaXMuJD1odFt5dF0uc3Vic3RyaW5nKDcpO2JyZWFrO2Nhc2UgMzE6dGhpcy4kPWh0W3l0XS50cmltKCksa3Quc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDMyOmNhc2UgMzM6dGhpcy4kPWh0W3l0XS50cmltKCksa3Quc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDM0Omh0W3l0LTFdLnVuc2hpZnQoe3R5cGU6Imxvb3BTdGFydCIsbG9vcFRleHQ6a3QucGFyc2VNZXNzYWdlKGh0W3l0LTJdKSxzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkxPT1BfU1RBUlR9KSxodFt5dC0xXS5wdXNoKHt0eXBlOiJsb29wRW5kIixsb29wVGV4dDpodFt5dC0yXSxzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkxPT1BfRU5EfSksdGhpcy4kPWh0W3l0LTFdO2JyZWFrO2Nhc2UgMzU6aHRbeXQtMV0udW5zaGlmdCh7dHlwZToicmVjdFN0YXJ0Iixjb2xvcjprdC5wYXJzZU1lc3NhZ2UoaHRbeXQtMl0pLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuUkVDVF9TVEFSVH0pLGh0W3l0LTFdLnB1c2goe3R5cGU6InJlY3RFbmQiLGNvbG9yOmt0LnBhcnNlTWVzc2FnZShodFt5dC0yXSksc2lnbmFsVHlwZTprdC5MSU5FVFlQRS5SRUNUX0VORH0pLHRoaXMuJD1odFt5dC0xXTticmVhaztjYXNlIDM2Omh0W3l0LTFdLnVuc2hpZnQoe3R5cGU6Im9wdFN0YXJ0IixvcHRUZXh0Omt0LnBhcnNlTWVzc2FnZShodFt5dC0yXSksc2lnbmFsVHlwZTprdC5MSU5FVFlQRS5PUFRfU1RBUlR9KSxodFt5dC0xXS5wdXNoKHt0eXBlOiJvcHRFbmQiLG9wdFRleHQ6a3QucGFyc2VNZXNzYWdlKGh0W3l0LTJdKSxzaWduYWxUeXBlOmt0LkxJTkVUWVBFLk9QVF9FTkR9KSx0aGlzLiQ9aHRbeXQtMV07YnJlYWs7Y2FzZSAzNzpodFt5dC0xXS51bnNoaWZ0KHt0eXBlOiJhbHRTdGFydCIsYWx0VGV4dDprdC5wYXJzZU1lc3NhZ2UoaHRbeXQtMl0pLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuQUxUX1NUQVJUfSksaHRbeXQtMV0ucHVzaCh7dHlwZToiYWx0RW5kIixzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkFMVF9FTkR9KSx0aGlzLiQ9aHRbeXQtMV07YnJlYWs7Y2FzZSAzODpodFt5dC0xXS51bnNoaWZ0KHt0eXBlOiJwYXJTdGFydCIscGFyVGV4dDprdC5wYXJzZU1lc3NhZ2UoaHRbeXQtMl0pLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuUEFSX1NUQVJUfSksaHRbeXQtMV0ucHVzaCh7dHlwZToicGFyRW5kIixzaWduYWxUeXBlOmt0LkxJTkVUWVBFLlBBUl9FTkR9KSx0aGlzLiQ9aHRbeXQtMV07YnJlYWs7Y2FzZSAzOTpodFt5dC0xXS51bnNoaWZ0KHt0eXBlOiJwYXJTdGFydCIscGFyVGV4dDprdC5wYXJzZU1lc3NhZ2UoaHRbeXQtMl0pLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuUEFSX09WRVJfU1RBUlR9KSxodFt5dC0xXS5wdXNoKHt0eXBlOiJwYXJFbmQiLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuUEFSX0VORH0pLHRoaXMuJD1odFt5dC0xXTticmVhaztjYXNlIDQwOmh0W3l0LTFdLnVuc2hpZnQoe3R5cGU6ImNyaXRpY2FsU3RhcnQiLGNyaXRpY2FsVGV4dDprdC5wYXJzZU1lc3NhZ2UoaHRbeXQtMl0pLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuQ1JJVElDQUxfU1RBUlR9KSxodFt5dC0xXS5wdXNoKHt0eXBlOiJjcml0aWNhbEVuZCIsc2lnbmFsVHlwZTprdC5MSU5FVFlQRS5DUklUSUNBTF9FTkR9KSx0aGlzLiQ9aHRbeXQtMV07YnJlYWs7Y2FzZSA0MTpodFt5dC0xXS51bnNoaWZ0KHt0eXBlOiJicmVha1N0YXJ0IixicmVha1RleHQ6a3QucGFyc2VNZXNzYWdlKGh0W3l0LTJdKSxzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkJSRUFLX1NUQVJUfSksaHRbeXQtMV0ucHVzaCh7dHlwZToiYnJlYWtFbmQiLG9wdFRleHQ6a3QucGFyc2VNZXNzYWdlKGh0W3l0LTJdKSxzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkJSRUFLX0VORH0pLHRoaXMuJD1odFt5dC0xXTticmVhaztjYXNlIDQzOnRoaXMuJD1odFt5dC0zXS5jb25jYXQoW3t0eXBlOiJvcHRpb24iLG9wdGlvblRleHQ6a3QucGFyc2VNZXNzYWdlKGh0W3l0LTFdKSxzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkNSSVRJQ0FMX09QVElPTn0saHRbeXRdXSk7YnJlYWs7Y2FzZSA0NTp0aGlzLiQ9aHRbeXQtM10uY29uY2F0KFt7dHlwZToiYW5kIixwYXJUZXh0Omt0LnBhcnNlTWVzc2FnZShodFt5dC0xXSksc2lnbmFsVHlwZTprdC5MSU5FVFlQRS5QQVJfQU5EfSxodFt5dF1dKTticmVhaztjYXNlIDQ3OnRoaXMuJD1odFt5dC0zXS5jb25jYXQoW3t0eXBlOiJlbHNlIixhbHRUZXh0Omt0LnBhcnNlTWVzc2FnZShodFt5dC0xXSksc2lnbmFsVHlwZTprdC5MSU5FVFlQRS5BTFRfRUxTRX0saHRbeXRdXSk7YnJlYWs7Y2FzZSA0ODpodFt5dC0zXS5kcmF3PSJwYXJ0aWNpcGFudCIsaHRbeXQtM10udHlwZT0iYWRkUGFydGljaXBhbnQiLGh0W3l0LTNdLmRlc2NyaXB0aW9uPWt0LnBhcnNlTWVzc2FnZShodFt5dC0xXSksdGhpcy4kPWh0W3l0LTNdO2JyZWFrO2Nhc2UgNDk6aHRbeXQtMV0uZHJhdz0icGFydGljaXBhbnQiLGh0W3l0LTFdLnR5cGU9ImFkZFBhcnRpY2lwYW50Iix0aGlzLiQ9aHRbeXQtMV07YnJlYWs7Y2FzZSA1MDpodFt5dC0zXS5kcmF3PSJhY3RvciIsaHRbeXQtM10udHlwZT0iYWRkUGFydGljaXBhbnQiLGh0W3l0LTNdLmRlc2NyaXB0aW9uPWt0LnBhcnNlTWVzc2FnZShodFt5dC0xXSksdGhpcy4kPWh0W3l0LTNdO2JyZWFrO2Nhc2UgNTE6aHRbeXQtMV0uZHJhdz0iYWN0b3IiLGh0W3l0LTFdLnR5cGU9ImFkZFBhcnRpY2lwYW50Iix0aGlzLiQ9aHRbeXQtMV07YnJlYWs7Y2FzZSA1MjpodFt5dC0xXS50eXBlPSJkZXN0cm95UGFydGljaXBhbnQiLHRoaXMuJD1odFt5dC0xXTticmVhaztjYXNlIDUzOnRoaXMuJD1baHRbeXQtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDpodFt5dC0yXSxhY3RvcjpodFt5dC0xXS5hY3Rvcix0ZXh0Omh0W3l0XX1dO2JyZWFrO2Nhc2UgNTQ6aHRbeXQtMl09W10uY29uY2F0KGh0W3l0LTFdLGh0W3l0LTFdKS5zbGljZSgwLDIpLGh0W3l0LTJdWzBdPWh0W3l0LTJdWzBdLmFjdG9yLGh0W3l0LTJdWzFdPWh0W3l0LTJdWzFdLmFjdG9yLHRoaXMuJD1baHRbeXQtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDprdC5QTEFDRU1FTlQuT1ZFUixhY3RvcjpodFt5dC0yXS5zbGljZSgwLDIpLHRleHQ6aHRbeXRdfV07YnJlYWs7Y2FzZSA1NTp0aGlzLiQ9W2h0W3l0LTFdLHt0eXBlOiJhZGRMaW5rcyIsYWN0b3I6aHRbeXQtMV0uYWN0b3IsdGV4dDpodFt5dF19XTticmVhaztjYXNlIDU2OnRoaXMuJD1baHRbeXQtMV0se3R5cGU6ImFkZEFMaW5rIixhY3RvcjpodFt5dC0xXS5hY3Rvcix0ZXh0Omh0W3l0XX1dO2JyZWFrO2Nhc2UgNTc6dGhpcy4kPVtodFt5dC0xXSx7dHlwZToiYWRkUHJvcGVydGllcyIsYWN0b3I6aHRbeXQtMV0uYWN0b3IsdGV4dDpodFt5dF19XTticmVhaztjYXNlIDU4OnRoaXMuJD1baHRbeXQtMV0se3R5cGU6ImFkZERldGFpbHMiLGFjdG9yOmh0W3l0LTFdLmFjdG9yLHRleHQ6aHRbeXRdfV07YnJlYWs7Y2FzZSA2MTp0aGlzLiQ9W2h0W3l0LTJdLGh0W3l0XV07YnJlYWs7Y2FzZSA2Mjp0aGlzLiQ9aHRbeXRdO2JyZWFrO2Nhc2UgNjM6dGhpcy4kPWt0LlBMQUNFTUVOVC5MRUZUT0Y7YnJlYWs7Y2FzZSA2NDp0aGlzLiQ9a3QuUExBQ0VNRU5ULlJJR0hUT0Y7YnJlYWs7Y2FzZSA2NTp0aGlzLiQ9W2h0W3l0LTRdLGh0W3l0LTFdLHt0eXBlOiJhZGRNZXNzYWdlIixmcm9tOmh0W3l0LTRdLmFjdG9yLHRvOmh0W3l0LTFdLmFjdG9yLHNpZ25hbFR5cGU6aHRbeXQtM10sbXNnOmh0W3l0XSxhY3RpdmF0ZTohMH0se3R5cGU6ImFjdGl2ZVN0YXJ0IixzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkFDVElWRV9TVEFSVCxhY3RvcjpodFt5dC0xXX1dO2JyZWFrO2Nhc2UgNjY6dGhpcy4kPVtodFt5dC00XSxodFt5dC0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTpodFt5dC00XS5hY3Rvcix0bzpodFt5dC0xXS5hY3RvcixzaWduYWxUeXBlOmh0W3l0LTNdLG1zZzpodFt5dF19LHt0eXBlOiJhY3RpdmVFbmQiLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuQUNUSVZFX0VORCxhY3RvcjpodFt5dC00XX1dO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPVtodFt5dC0zXSxodFt5dC0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTpodFt5dC0zXS5hY3Rvcix0bzpodFt5dC0xXS5hY3RvcixzaWduYWxUeXBlOmh0W3l0LTJdLG1zZzpodFt5dF19XTticmVhaztjYXNlIDY4OnRoaXMuJD17dHlwZToiYWRkUGFydGljaXBhbnQiLGFjdG9yOmh0W3l0XX07YnJlYWs7Y2FzZSA2OTp0aGlzLiQ9a3QuTElORVRZUEUuU09MSURfT1BFTjticmVhaztjYXNlIDcwOnRoaXMuJD1rdC5MSU5FVFlQRS5ET1RURURfT1BFTjticmVhaztjYXNlIDcxOnRoaXMuJD1rdC5MSU5FVFlQRS5TT0xJRDticmVhaztjYXNlIDcyOnRoaXMuJD1rdC5MSU5FVFlQRS5ET1RURUQ7YnJlYWs7Y2FzZSA3Mzp0aGlzLiQ9a3QuTElORVRZUEUuU09MSURfQ1JPU1M7YnJlYWs7Y2FzZSA3NDp0aGlzLiQ9a3QuTElORVRZUEUuRE9UVEVEX0NST1NTO2JyZWFrO2Nhc2UgNzU6dGhpcy4kPWt0LkxJTkVUWVBFLlNPTElEX1BPSU5UO2JyZWFrO2Nhc2UgNzY6dGhpcy4kPWt0LkxJTkVUWVBFLkRPVFRFRF9QT0lOVDticmVhaztjYXNlIDc3OnRoaXMuJD1rdC5wYXJzZU1lc3NhZ2UoaHRbeXRdLnRyaW0oKS5zdWJzdHJpbmcoMSkpO2JyZWFrfX0sdGFibGU6W3szOjEsNDpzLDU6dSw2OmR9LHsxOlszXX0sezM6NSw0OnMsNTp1LDY6ZH0sezM6Niw0OnMsNTp1LDY6ZH0saShbMSw0LDUsMTMsMTQsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLHAsezc6N30pLHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM10sNDp2LDU6Yiw4OjgsOToxMCwxMjoxMiwxMzp5LDE0OlQsMTc6MTUsMTg6XywyMTpBLDIyOjQwLDIzOlAsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6UiwzMDpGLDMxOmosMzM6SywzNTplZSwzNjppZSwzNzpvZSwzODpwZSwzOTpiZSw0MTphZSw0MzpuZSw0NDpzZSw0NjpkZSw1MDpYLDUyOmdlLDUzOlcsNTQ6eGUsNTk6VSw2MDpGZSw2MTpQZSw2MjpqZSw3MDpJZX0saShTZSxbMiw1XSksezk6NDcsMTI6MTIsMTM6eSwxNDpULDE3OjE1LDE4Ol8sMjE6QSwyMjo0MCwyMzpQLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OlIsMzA6RiwzMTpqLDMzOkssMzU6ZWUsMzY6aWUsMzc6b2UsMzg6cGUsMzk6YmUsNDE6YWUsNDM6bmUsNDQ6c2UsNDY6ZGUsNTA6WCw1MjpnZSw1MzpXLDU0OnhlLDU5OlUsNjA6RmUsNjE6UGUsNjI6amUsNzA6SWV9LGkoU2UsWzIsN10pLGkoU2UsWzIsOF0pLGkoU2UsWzIsMTRdKSx7MTI6NDgsNTA6WCw1MjpnZSw1MzpXfSx7MTU6WzEsNDldfSx7NTpbMSw1MF19LHs1OlsxLDUzXSwxOTpbMSw1MV0sMjA6WzEsNTJdfSx7MjI6NTQsNzA6SWV9LHsyMjo1NSw3MDpJZX0sezU6WzEsNTZdfSx7NTpbMSw1N119LHs1OlsxLDU4XX0sezU6WzEsNTldfSx7NTpbMSw2MF19LGkoU2UsWzIsMjldKSxpKFNlLFsyLDMwXSksezMyOlsxLDYxXX0sezM0OlsxLDYyXX0saShTZSxbMiwzM10pLHsxNTpbMSw2M119LHsxNTpbMSw2NF19LHsxNTpbMSw2NV19LHsxNTpbMSw2Nl19LHsxNTpbMSw2N119LHsxNTpbMSw2OF19LHsxNTpbMSw2OV19LHsxNTpbMSw3MF19LHsyMjo3MSw3MDpJZX0sezIyOjcyLDcwOkllfSx7MjI6NzMsNzA6SWV9LHs2Nzo3NCw3MTpbMSw3NV0sNzI6WzEsNzZdLDczOlsxLDc3XSw3NDpbMSw3OF0sNzU6WzEsNzldLDc2OlsxLDgwXSw3NzpbMSw4MV0sNzg6WzEsODJdfSx7NTU6ODMsNTc6WzEsODRdLDY1OlsxLDg1XSw2NjpbMSw4Nl19LHsyMjo4Nyw3MDpJZX0sezIyOjg4LDcwOkllfSx7MjI6ODksNzA6SWV9LHsyMjo5MCw3MDpJZX0saShbNSw1MSw2NCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OV0sWzIsNjhdKSxpKFNlLFsyLDZdKSxpKFNlLFsyLDE1XSksaShDZSxbMiw5XSx7MTA6OTF9KSxpKFNlLFsyLDE3XSksezU6WzEsOTNdLDE5OlsxLDkyXX0sezU6WzEsOTRdfSxpKFNlLFsyLDIxXSksezU6WzEsOTVdfSx7NTpbMSw5Nl19LGkoU2UsWzIsMjRdKSxpKFNlLFsyLDI1XSksaShTZSxbMiwyNl0pLGkoU2UsWzIsMjddKSxpKFNlLFsyLDI4XSksaShTZSxbMiwzMV0pLGkoU2UsWzIsMzJdKSxpKGtlLHAsezc6OTd9KSxpKGtlLHAsezc6OTh9KSxpKGtlLHAsezc6OTl9KSxpKEtlLHAsezQwOjEwMCw3OjEwMX0pLGkoRnQscCx7NDI6MTAyLDc6MTAzfSksaShGdCxwLHs3OjEwMyw0MjoxMDR9KSxpKE5lLHAsezQ1OjEwNSw3OjEwNn0pLGkoa2UscCx7NzoxMDd9KSx7NTpbMSwxMDldLDUxOlsxLDEwOF19LHs1OlsxLDExMV0sNTE6WzEsMTEwXX0sezU6WzEsMTEyXX0sezIyOjExNSw2ODpbMSwxMTNdLDY5OlsxLDExNF0sNzA6SWV9LGkoZ24sWzIsNjldKSxpKGduLFsyLDcwXSksaShnbixbMiw3MV0pLGkoZ24sWzIsNzJdKSxpKGduLFsyLDczXSksaShnbixbMiw3NF0pLGkoZ24sWzIsNzVdKSxpKGduLFsyLDc2XSksezIyOjExNiw3MDpJZX0sezIyOjExOCw1ODoxMTcsNzA6SWV9LHs3MDpbMiw2M119LHs3MDpbMiw2NF19LHs1NjoxMTksNzk6X3R9LHs1NjoxMjEsNzk6X3R9LHs1NjoxMjIsNzk6X3R9LHs1NjoxMjMsNzk6X3R9LHs0OlsxLDEyNl0sNTpbMSwxMjhdLDExOjEyNSwxMjoxMjcsMTY6WzEsMTI0XSw1MDpYLDUyOmdlLDUzOld9LHs1OlsxLDEyOV19LGkoU2UsWzIsMTldKSxpKFNlLFsyLDIwXSksaShTZSxbMiwyMl0pLGkoU2UsWzIsMjNdKSx7NDp2LDU6Yiw4OjgsOToxMCwxMjoxMiwxMzp5LDE0OlQsMTY6WzEsMTMwXSwxNzoxNSwxODpfLDIxOkEsMjI6NDAsMjM6UCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpSLDMwOkYsMzE6aiwzMzpLLDM1OmVlLDM2OmllLDM3Om9lLDM4OnBlLDM5OmJlLDQxOmFlLDQzOm5lLDQ0OnNlLDQ2OmRlLDUwOlgsNTI6Z2UsNTM6Vyw1NDp4ZSw1OTpVLDYwOkZlLDYxOlBlLDYyOmplLDcwOkllfSx7NDp2LDU6Yiw4OjgsOToxMCwxMjoxMiwxMzp5LDE0OlQsMTY6WzEsMTMxXSwxNzoxNSwxODpfLDIxOkEsMjI6NDAsMjM6UCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpSLDMwOkYsMzE6aiwzMzpLLDM1OmVlLDM2OmllLDM3Om9lLDM4OnBlLDM5OmJlLDQxOmFlLDQzOm5lLDQ0OnNlLDQ2OmRlLDUwOlgsNTI6Z2UsNTM6Vyw1NDp4ZSw1OTpVLDYwOkZlLDYxOlBlLDYyOmplLDcwOkllfSx7NDp2LDU6Yiw4OjgsOToxMCwxMjoxMiwxMzp5LDE0OlQsMTY6WzEsMTMyXSwxNzoxNSwxODpfLDIxOkEsMjI6NDAsMjM6UCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpSLDMwOkYsMzE6aiwzMzpLLDM1OmVlLDM2OmllLDM3Om9lLDM4OnBlLDM5OmJlLDQxOmFlLDQzOm5lLDQ0OnNlLDQ2OmRlLDUwOlgsNTI6Z2UsNTM6Vyw1NDp4ZSw1OTpVLDYwOkZlLDYxOlBlLDYyOmplLDcwOkllfSx7MTY6WzEsMTMzXX0sezQ6diw1OmIsODo4LDk6MTAsMTI6MTIsMTM6eSwxNDpULDE2OlsyLDQ2XSwxNzoxNSwxODpfLDIxOkEsMjI6NDAsMjM6UCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpSLDMwOkYsMzE6aiwzMzpLLDM1OmVlLDM2OmllLDM3Om9lLDM4OnBlLDM5OmJlLDQxOmFlLDQzOm5lLDQ0OnNlLDQ2OmRlLDQ5OlsxLDEzNF0sNTA6WCw1MjpnZSw1MzpXLDU0OnhlLDU5OlUsNjA6RmUsNjE6UGUsNjI6amUsNzA6SWV9LHsxNjpbMSwxMzVdfSx7NDp2LDU6Yiw4OjgsOToxMCwxMjoxMiwxMzp5LDE0OlQsMTY6WzIsNDRdLDE3OjE1LDE4Ol8sMjE6QSwyMjo0MCwyMzpQLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OlIsMzA6RiwzMTpqLDMzOkssMzU6ZWUsMzY6aWUsMzc6b2UsMzg6cGUsMzk6YmUsNDE6YWUsNDM6bmUsNDQ6c2UsNDY6ZGUsNDg6WzEsMTM2XSw1MDpYLDUyOmdlLDUzOlcsNTQ6eGUsNTk6VSw2MDpGZSw2MTpQZSw2MjpqZSw3MDpJZX0sezE2OlsxLDEzN119LHsxNjpbMSwxMzhdfSx7NDp2LDU6Yiw4OjgsOToxMCwxMjoxMiwxMzp5LDE0OlQsMTY6WzIsNDJdLDE3OjE1LDE4Ol8sMjE6QSwyMjo0MCwyMzpQLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OlIsMzA6RiwzMTpqLDMzOkssMzU6ZWUsMzY6aWUsMzc6b2UsMzg6cGUsMzk6YmUsNDE6YWUsNDM6bmUsNDQ6c2UsNDY6ZGUsNDc6WzEsMTM5XSw1MDpYLDUyOmdlLDUzOlcsNTQ6eGUsNTk6VSw2MDpGZSw2MTpQZSw2MjpqZSw3MDpJZX0sezQ6diw1OmIsODo4LDk6MTAsMTI6MTIsMTM6eSwxNDpULDE2OlsxLDE0MF0sMTc6MTUsMTg6XywyMTpBLDIyOjQwLDIzOlAsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6UiwzMDpGLDMxOmosMzM6SywzNTplZSwzNjppZSwzNzpvZSwzODpwZSwzOTpiZSw0MTphZSw0MzpuZSw0NDpzZSw0NjpkZSw1MDpYLDUyOmdlLDUzOlcsNTQ6eGUsNTk6VSw2MDpGZSw2MTpQZSw2MjpqZSw3MDpJZX0sezE1OlsxLDE0MV19LGkoU2UsWzIsNDldKSx7MTU6WzEsMTQyXX0saShTZSxbMiw1MV0pLGkoU2UsWzIsNTJdKSx7MjI6MTQzLDcwOkllfSx7MjI6MTQ0LDcwOkllfSx7NTY6MTQ1LDc5Ol90fSx7NTY6MTQ2LDc5Ol90fSx7NTY6MTQ3LDc5Ol90fSx7NjQ6WzEsMTQ4XSw3OTpbMiw2Ml19LHs1OlsyLDU1XX0sezU6WzIsNzddfSx7NTpbMiw1Nl19LHs1OlsyLDU3XX0sezU6WzIsNThdfSxpKFNlLFsyLDE2XSksaShDZSxbMiwxMF0pLHsxMjoxNDksNTA6WCw1MjpnZSw1MzpXfSxpKENlLFsyLDEyXSksaShDZSxbMiwxM10pLGkoU2UsWzIsMThdKSxpKFNlLFsyLDM0XSksaShTZSxbMiwzNV0pLGkoU2UsWzIsMzZdKSxpKFNlLFsyLDM3XSksezE1OlsxLDE1MF19LGkoU2UsWzIsMzhdKSx7MTU6WzEsMTUxXX0saShTZSxbMiwzOV0pLGkoU2UsWzIsNDBdKSx7MTU6WzEsMTUyXX0saShTZSxbMiw0MV0pLHs1OlsxLDE1M119LHs1OlsxLDE1NF19LHs1NjoxNTUsNzk6X3R9LHs1NjoxNTYsNzk6X3R9LHs1OlsyLDY3XX0sezU6WzIsNTNdfSx7NTpbMiw1NF19LHsyMjoxNTcsNzA6SWV9LGkoQ2UsWzIsMTFdKSxpKEtlLHAsezc6MTAxLDQwOjE1OH0pLGkoRnQscCx7NzoxMDMsNDI6MTU5fSksaShOZSxwLHs3OjEwNiw0NToxNjB9KSxpKFNlLFsyLDQ4XSksaShTZSxbMiw1MF0pLHs1OlsyLDY1XX0sezU6WzIsNjZdfSx7Nzk6WzIsNjFdfSx7MTY6WzIsNDddfSx7MTY6WzIsNDVdfSx7MTY6WzIsNDNdfV0sZGVmYXVsdEFjdGlvbnM6ezU6WzIsMV0sNjpbMiwyXSw4NTpbMiw2M10sODY6WzIsNjRdLDExOTpbMiw1NV0sMTIwOlsyLDc3XSwxMjE6WzIsNTZdLDEyMjpbMiw1N10sMTIzOlsyLDU4XSwxNDU6WzIsNjddLDE0NjpbMiw1M10sMTQ3OlsyLDU0XSwxNTU6WzIsNjVdLDE1NjpbMiw2Nl0sMTU3OlsyLDYxXSwxNTg6WzIsNDddLDE1OTpbMiw0NV0sMTYwOlsyLDQzXX0scGFyc2VFcnJvcjpmdW5jdGlvbihQdCxRZSl7aWYoUWUucmVjb3ZlcmFibGUpdGhpcy50cmFjZShQdCk7ZWxzZXt2YXIgRHQ9bmV3IEVycm9yKFB0KTt0aHJvdyBEdC5oYXNoPVFlLER0fX0scGFyc2U6ZnVuY3Rpb24oUHQpe3ZhciBRZT10aGlzLER0PVswXSxrdD1bXSxPbj1bbnVsbF0saHQ9W10senI9dGhpcy50YWJsZSx5dD0iIixqaT0wLHhpPTAsTWE9Mix6cz0xLGFvPWh0LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLFRyPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksRm49e3l5Ont9fTtmb3IodmFyIHFuIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkscW4pJiYoRm4ueXlbcW5dPXRoaXMueXlbcW5dKTtUci5zZXRJbnB1dChQdCxGbi55eSksRm4ueXkubGV4ZXI9VHIsRm4ueXkucGFyc2VyPXRoaXMsdHlwZW9mIFRyLnl5bGxvYz4idSImJihUci55eWxsb2M9e30pO3ZhciBVbj1Uci55eWxsb2M7aHQucHVzaChVbik7dmFyIEF0PVRyLm9wdGlvbnMmJlRyLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBGbi55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1Gbi55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiB3dCgpe3ZhciBkYTtyZXR1cm4gZGE9a3QucG9wKCl8fFRyLmxleCgpfHx6cyx0eXBlb2YgZGEhPSJudW1iZXIiJiYoZGEgaW5zdGFuY2VvZiBBcnJheSYmKGt0PWRhLGRhPWt0LnBvcCgpKSxkYT1RZS5zeW1ib2xzX1tkYV18fGRhKSxkYX1mb3IodmFyIG9uLGZuLEFuLG9vLGpvPXt9LCRvLFBhLHdvLF9zOzspe2lmKGZuPUR0W0R0Lmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2ZuXT9Bbj10aGlzLmRlZmF1bHRBY3Rpb25zW2ZuXTooKG9uPT09bnVsbHx8dHlwZW9mIG9uPiJ1IikmJihvbj13dCgpKSxBbj16cltmbl0mJnpyW2ZuXVtvbl0pLHR5cGVvZiBBbj4idSJ8fCFBbi5sZW5ndGh8fCFBblswXSl7dmFyIHRsPSIiO19zPVtdO2ZvcigkbyBpbiB6cltmbl0pdGhpcy50ZXJtaW5hbHNfWyRvXSYmJG8+TWEmJl9zLnB1c2goIiciK3RoaXMudGVybWluYWxzX1skb10rIiciKTtUci5zaG93UG9zaXRpb24/dGw9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoamkrMSkrYDoKYCtUci5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK19zLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bb25dfHxvbikrIiciOnRsPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGppKzEpKyI6IFVuZXhwZWN0ZWQgIisob249PXpzPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW29uXXx8b24pKyInIiksdGhpcy5wYXJzZUVycm9yKHRsLHt0ZXh0OlRyLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tvbl18fG9uLGxpbmU6VHIueXlsaW5lbm8sbG9jOlVuLGV4cGVjdGVkOl9zfSl9aWYoQW5bMF1pbnN0YW5jZW9mIEFycmF5JiZBbi5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2ZuKyIsIHRva2VuOiAiK29uKTtzd2l0Y2goQW5bMF0pe2Nhc2UgMTpEdC5wdXNoKG9uKSxPbi5wdXNoKFRyLnl5dGV4dCksaHQucHVzaChUci55eWxsb2MpLER0LnB1c2goQW5bMV0pLG9uPW51bGwseGk9VHIueXlsZW5nLHl0PVRyLnl5dGV4dCxqaT1Uci55eWxpbmVubyxVbj1Uci55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKFBhPXRoaXMucHJvZHVjdGlvbnNfW0FuWzFdXVsxXSxqby4kPU9uW09uLmxlbmd0aC1QYV0sam8uXyQ9e2ZpcnN0X2xpbmU6aHRbaHQubGVuZ3RoLShQYXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmh0W2h0Lmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmh0W2h0Lmxlbmd0aC0oUGF8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46aHRbaHQubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxBdCYmKGpvLl8kLnJhbmdlPVtodFtodC5sZW5ndGgtKFBhfHwxKV0ucmFuZ2VbMF0saHRbaHQubGVuZ3RoLTFdLnJhbmdlWzFdXSksb289dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KGpvLFt5dCx4aSxqaSxGbi55eSxBblsxXSxPbixodF0uY29uY2F0KGFvKSksdHlwZW9mIG9vPCJ1IilyZXR1cm4gb287UGEmJihEdD1EdC5zbGljZSgwLC0xKlBhKjIpLE9uPU9uLnNsaWNlKDAsLTEqUGEpLGh0PWh0LnNsaWNlKDAsLTEqUGEpKSxEdC5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW0FuWzFdXVswXSksT24ucHVzaChqby4kKSxodC5wdXNoKGpvLl8kKSx3bz16cltEdFtEdC5sZW5ndGgtMl1dW0R0W0R0Lmxlbmd0aC0xXV0sRHQucHVzaCh3byk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LEd0PWZ1bmN0aW9uKCl7dmFyIHh0PXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKFFlLER0KXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKFFlLER0KTtlbHNlIHRocm93IG5ldyBFcnJvcihRZSl9LHNldElucHV0OmZ1bmN0aW9uKFB0LFFlKXtyZXR1cm4gdGhpcy55eT1RZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9UHQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIFB0PXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1QdCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9UHQsdGhpcy5tYXRjaGVkKz1QdDt2YXIgUWU9UHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBRZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksUHR9LHVucHV0OmZ1bmN0aW9uKFB0KXt2YXIgUWU9UHQubGVuZ3RoLER0PVB0LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9UHQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLVFlKSx0aGlzLm9mZnNldC09UWU7dmFyIGt0PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLER0Lmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09RHQubGVuZ3RoLTEpO3ZhciBPbj10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46RHQ/KER0Lmxlbmd0aD09PWt0Lmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkra3Rba3QubGVuZ3RoLUR0Lmxlbmd0aF0ubGVuZ3RoLUR0WzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tUWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bT25bMF0sT25bMF0rdGhpcy55eWxlbmctUWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihQdCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFB0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBQdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFB0Lmxlbmd0aD4yMD8iLi4uIjoiIikrUHQuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgUHQ9dGhpcy5tYXRjaDtyZXR1cm4gUHQubGVuZ3RoPDIwJiYoUHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVB0Lmxlbmd0aCkpLChQdC5zdWJzdHIoMCwyMCkrKFB0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgUHQ9dGhpcy5wYXN0SW5wdXQoKSxRZT1uZXcgQXJyYXkoUHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gUHQrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK1FlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihQdCxRZSl7dmFyIER0LGt0LE9uO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihPbj17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihPbi55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxrdD1QdFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksa3QmJih0aGlzLnl5bGluZW5vKz1rdC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjprdD9rdFtrdC5sZW5ndGgtMV0ubGVuZ3RoLWt0W2t0Lmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK1B0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVB0WzBdLHRoaXMubWF0Y2grPVB0WzBdLHRoaXMubWF0Y2hlcz1QdCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShQdFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9UHRbMF0sRHQ9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsUWUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksRHQpcmV0dXJuIER0O2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBodCBpbiBPbil0aGlzW2h0XT1PbltodF07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgUHQsUWUsRHQsa3Q7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgT249dGhpcy5fY3VycmVudFJ1bGVzKCksaHQ9MDtodDxPbi5sZW5ndGg7aHQrKylpZihEdD10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW09uW2h0XV0pLER0JiYoIVFlfHxEdFswXS5sZW5ndGg+UWVbMF0ubGVuZ3RoKSl7aWYoUWU9RHQsa3Q9aHQsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoUHQ9dGhpcy50ZXN0X21hdGNoKER0LE9uW2h0XSksUHQhPT0hMSlyZXR1cm4gUHQ7aWYodGhpcy5fYmFja3RyYWNrKXtRZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBRZT8oUHQ9dGhpcy50ZXN0X21hdGNoKFFlLE9uW2t0XSksUHQhPT0hMT9QdDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIFFlPXRoaXMubmV4dCgpO3JldHVybiBRZXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oUWUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChRZSl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIFFlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIFFlPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oUWUpe3JldHVybiBRZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKFFlfHwwKSxRZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW1FlXToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihRZSl7dGhpcy5iZWdpbihRZSl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oUWUsRHQsa3QsT24pe3N3aXRjaChrdCl7Y2FzZSAwOnJldHVybiA1O2Nhc2UgMTpicmVhaztjYXNlIDI6YnJlYWs7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpicmVhaztjYXNlIDU6YnJlYWs7Y2FzZSA2OnJldHVybiAxOTtjYXNlIDc6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwxNDtjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksNTA7Y2FzZSA5OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDUyO2Nhc2UgMTA6cmV0dXJuIDEzO2Nhc2UgMTE6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksNTM7Y2FzZSAxMjpyZXR1cm4gRHQueXl0ZXh0PUR0Lnl5dGV4dC50cmltKCksdGhpcy5iZWdpbigiQUxJQVMiKSw3MDtjYXNlIDEzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oIkxJTkUiKSw1MTtjYXNlIDE0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDU7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM2O2Nhc2UgMTY6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzNztjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzg7Y2FzZSAxODpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM5O2Nhc2UgMTk6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0OTtjYXNlIDIwOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDE7Y2FzZSAyMTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQzO2Nhc2UgMjI6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0ODtjYXNlIDIzOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDQ7Y2FzZSAyNDpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQ3O2Nhc2UgMjU6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0NjtjYXNlIDI2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTU7Y2FzZSAyNzpyZXR1cm4gMTY7Y2FzZSAyODpyZXR1cm4gNjU7Y2FzZSAyOTpyZXR1cm4gNjY7Y2FzZSAzMDpyZXR1cm4gNTk7Y2FzZSAzMTpyZXR1cm4gNjA7Y2FzZSAzMjpyZXR1cm4gNjE7Y2FzZSAzMzpyZXR1cm4gNjI7Y2FzZSAzNDpyZXR1cm4gNTc7Y2FzZSAzNTpyZXR1cm4gNTQ7Y2FzZSAzNjpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSwyMTtjYXNlIDM3OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDIzO2Nhc2UgMzg6cmV0dXJuIDI5O2Nhc2UgMzk6cmV0dXJuIDMwO2Nhc2UgNDA6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDMxO2Nhc2UgNDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDQyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzMztjYXNlIDQzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSA0NDp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA0NTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA0NjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA0NzpyZXR1cm4gNjtjYXNlIDQ4OnJldHVybiAxODtjYXNlIDQ5OnJldHVybiAyMDtjYXNlIDUwOnJldHVybiA2NDtjYXNlIDUxOnJldHVybiA1O2Nhc2UgNTI6cmV0dXJuIER0Lnl5dGV4dD1EdC55eXRleHQudHJpbSgpLDcwO2Nhc2UgNTM6cmV0dXJuIDczO2Nhc2UgNTQ6cmV0dXJuIDc0O2Nhc2UgNTU6cmV0dXJuIDcxO2Nhc2UgNTY6cmV0dXJuIDcyO2Nhc2UgNTc6cmV0dXJuIDc1O2Nhc2UgNTg6cmV0dXJuIDc2O2Nhc2UgNTk6cmV0dXJuIDc3O2Nhc2UgNjA6cmV0dXJuIDc4O2Nhc2UgNjE6cmV0dXJuIDc5O2Nhc2UgNjI6cmV0dXJuIDY4O2Nhc2UgNjM6cmV0dXJuIDY5O2Nhc2UgNjQ6cmV0dXJuIDU7Y2FzZSA2NTpyZXR1cm4iSU5WQUxJRCJ9fSxydWxlczpbL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OigoPyFcbilccykrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86WzAtOV0rKD89WyBcbl0rKSkvaSwvXig/OmJveFxiKS9pLC9eKD86cGFydGljaXBhbnRcYikvaSwvXig/OmFjdG9yXGIpL2ksL14oPzpjcmVhdGVcYikvaSwvXig/OmRlc3Ryb3lcYikvaSwvXig/OlteXC0+OlxuLDtdKz8oW1wtXSpbXlwtPjpcbiw7XSs/KSo/KD89KCg/IVxuKVxzKSthcyg/IVxuKVxzfFsjXG47XXwkKSkvaSwvXig/OmFzXGIpL2ksL14oPzooPzopKS9pLC9eKD86bG9vcFxiKS9pLC9eKD86cmVjdFxiKS9pLC9eKD86b3B0XGIpL2ksL14oPzphbHRcYikvaSwvXig/OmVsc2VcYikvaSwvXig/OnBhclxiKS9pLC9eKD86cGFyX292ZXJcYikvaSwvXig/OmFuZFxiKS9pLC9eKD86Y3JpdGljYWxcYikvaSwvXig/Om9wdGlvblxiKS9pLC9eKD86YnJlYWtcYikvaSwvXig/Oig/Ols6XT8oPzpubyk/d3JhcCk/W14jXG47XSopL2ksL14oPzplbmRcYikvaSwvXig/OmxlZnQgb2ZcYikvaSwvXig/OnJpZ2h0IG9mXGIpL2ksL14oPzpsaW5rc1xiKS9pLC9eKD86bGlua1xiKS9pLC9eKD86cHJvcGVydGllc1xiKS9pLC9eKD86ZGV0YWlsc1xiKS9pLC9eKD86b3ZlclxiKS9pLC9eKD86bm90ZVxiKS9pLC9eKD86YWN0aXZhdGVcYikvaSwvXig/OmRlYWN0aXZhdGVcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OnRpdGxlOlxzW14jXG47XSspL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OnNlcXVlbmNlRGlhZ3JhbVxiKS9pLC9eKD86YXV0b251bWJlclxiKS9pLC9eKD86b2ZmXGIpL2ksL14oPzosKS9pLC9eKD86OykvaSwvXig/OlteXCtcLT46XG4sO10rKCg/ISgteHwtLXh8LVwpfC0tXCkpKVtcLV0qW15cK1wtPjpcbiw7XSspKikvaSwvXig/Oi0+PikvaSwvXig/Oi0tPj4pL2ksL14oPzotPikvaSwvXig/Oi0tPikvaSwvXig/Oi1beF0pL2ksL14oPzotLVt4XSkvaSwvXig/Oi1bXCldKS9pLC9eKD86LS1bXCldKS9pLC9eKD86Oig/Oig/Om5vKT93cmFwKT9bXiNcbjtdKykvaSwvXig/OlwrKS9pLC9eKD86LSkvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNDUsNDZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbNDNdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbNDFdLGluY2x1c2l2ZTohMX0sSUQ6e3J1bGVzOlsyLDMsMTJdLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOlsyLDMsMTMsMTRdLGluY2x1c2l2ZTohMX0sTElORTp7cnVsZXM6WzIsMywyNl0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDMsNCw1LDYsNyw4LDksMTAsMTEsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDIsNDQsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4geHR9KCk7RXQubGV4ZXI9R3Q7ZnVuY3Rpb24gbG4oKXt0aGlzLnl5PXt9fXJldHVybiBsbi5wcm90b3R5cGU9RXQsRXQuUGFyc2VyPWxuLG5ldyBsbn0oKTt5dmUucGFyc2VyPXl2ZTtjb25zdCB5cm49eXZlO2NsYXNzIHhybntjb25zdHJ1Y3RvcihzKXt0aGlzLmluaXQ9cyx0aGlzLnJlY29yZHM9dGhpcy5pbml0KCl9cmVzZXQoKXt0aGlzLnJlY29yZHM9dGhpcy5pbml0KCl9fWNvbnN0IERzPW5ldyB4cm4oKCk9Pih7cHJldkFjdG9yOnZvaWQgMCxhY3RvcnM6e30sY3JlYXRlZEFjdG9yczp7fSxkZXN0cm95ZWRBY3RvcnM6e30sYm94ZXM6W10sbWVzc2FnZXM6W10sbm90ZXM6W10sc2VxdWVuY2VOdW1iZXJzRW5hYmxlZDohMSx3cmFwRW5hYmxlZDp2b2lkIDAsY3VycmVudEJveDp2b2lkIDAsbGFzdENyZWF0ZWQ6dm9pZCAwLGxhc3REZXN0cm95ZWQ6dm9pZCAwfSkpLGtybj1mdW5jdGlvbihpKXtEcy5yZWNvcmRzLmJveGVzLnB1c2goe25hbWU6aS50ZXh0LHdyYXA6aS53cmFwPT09dm9pZCAwJiZKQygpfHwhIWkud3JhcCxmaWxsOmkuY29sb3IsYWN0b3JLZXlzOltdfSksRHMucmVjb3Jkcy5jdXJyZW50Qm94PURzLnJlY29yZHMuYm94ZXMuc2xpY2UoLTEpWzBdfSx4dmU9ZnVuY3Rpb24oaSxzLHUsZCl7bGV0IHA9RHMucmVjb3Jkcy5jdXJyZW50Qm94O2NvbnN0IHY9RHMucmVjb3Jkcy5hY3RvcnNbaV07aWYodil7aWYoRHMucmVjb3Jkcy5jdXJyZW50Qm94JiZ2LmJveCYmRHMucmVjb3Jkcy5jdXJyZW50Qm94IT09di5ib3gpdGhyb3cgbmV3IEVycm9yKCJBIHNhbWUgcGFydGljaXBhbnQgc2hvdWxkIG9ubHkgYmUgZGVmaW5lZCBpbiBvbmUgQm94OiAiK3YubmFtZSsiIGNhbid0IGJlIGluICciK3YuYm94Lm5hbWUrIicgYW5kIGluICciK0RzLnJlY29yZHMuY3VycmVudEJveC5uYW1lKyInIGF0IHRoZSBzYW1lIHRpbWUuIik7aWYocD12LmJveD92LmJveDpEcy5yZWNvcmRzLmN1cnJlbnRCb3gsdi5ib3g9cCx2JiZzPT09di5uYW1lJiZ1PT1udWxsKXJldHVybn0odT09bnVsbHx8dS50ZXh0PT1udWxsKSYmKHU9e3RleHQ6cyx3cmFwOm51bGwsdHlwZTpkfSksKGQ9PW51bGx8fHUudGV4dD09bnVsbCkmJih1PXt0ZXh0OnMsd3JhcDpudWxsLHR5cGU6ZH0pLERzLnJlY29yZHMuYWN0b3JzW2ldPXtib3g6cCxuYW1lOnMsZGVzY3JpcHRpb246dS50ZXh0LHdyYXA6dS53cmFwPT09dm9pZCAwJiZKQygpfHwhIXUud3JhcCxwcmV2QWN0b3I6RHMucmVjb3Jkcy5wcmV2QWN0b3IsbGlua3M6e30scHJvcGVydGllczp7fSxhY3RvckNudDpudWxsLHJlY3REYXRhOm51bGwsdHlwZTpkfHwicGFydGljaXBhbnQifSxEcy5yZWNvcmRzLnByZXZBY3RvciYmRHMucmVjb3Jkcy5hY3RvcnNbRHMucmVjb3Jkcy5wcmV2QWN0b3JdJiYoRHMucmVjb3Jkcy5hY3RvcnNbRHMucmVjb3Jkcy5wcmV2QWN0b3JdLm5leHRBY3Rvcj1pKSxEcy5yZWNvcmRzLmN1cnJlbnRCb3gmJkRzLnJlY29yZHMuY3VycmVudEJveC5hY3RvcktleXMucHVzaChpKSxEcy5yZWNvcmRzLnByZXZBY3Rvcj1pfSxFcm49aT0+e2xldCBzLHU9MDtmb3Iocz0wO3M8RHMucmVjb3Jkcy5tZXNzYWdlcy5sZW5ndGg7cysrKURzLnJlY29yZHMubWVzc2FnZXNbc10udHlwZT09PUtSLkFDVElWRV9TVEFSVCYmRHMucmVjb3Jkcy5tZXNzYWdlc1tzXS5mcm9tLmFjdG9yPT09aSYmdSsrLERzLnJlY29yZHMubWVzc2FnZXNbc10udHlwZT09PUtSLkFDVElWRV9FTkQmJkRzLnJlY29yZHMubWVzc2FnZXNbc10uZnJvbS5hY3Rvcj09PWkmJnUtLTtyZXR1cm4gdX0sVHJuPWZ1bmN0aW9uKGkscyx1LGQpe0RzLnJlY29yZHMubWVzc2FnZXMucHVzaCh7ZnJvbTppLHRvOnMsbWVzc2FnZTp1LnRleHQsd3JhcDp1LndyYXA9PT12b2lkIDAmJkpDKCl8fCEhdS53cmFwLGFuc3dlcjpkfSl9LEpmPWZ1bmN0aW9uKGkscyx1PXt0ZXh0OnZvaWQgMCx3cmFwOnZvaWQgMH0sZCxwPSExKXtpZihkPT09S1IuQUNUSVZFX0VORCYmRXJuKGkuYWN0b3IpPDEpe2xldCBiPW5ldyBFcnJvcigiVHJ5aW5nIHRvIGluYWN0aXZhdGUgYW4gaW5hY3RpdmUgcGFydGljaXBhbnQgKCIraS5hY3RvcisiKSIpO3Rocm93IGIuaGFzaD17dGV4dDoiLT4+LSIsdG9rZW46Ii0+Pi0iLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiJ0FDVElWRV9QQVJUSUNJUEFOVCciXX0sYn1yZXR1cm4gRHMucmVjb3Jkcy5tZXNzYWdlcy5wdXNoKHtmcm9tOmksdG86cyxtZXNzYWdlOnUudGV4dCx3cmFwOnUud3JhcD09PXZvaWQgMCYmSkMoKXx8ISF1LndyYXAsdHlwZTpkLGFjdGl2YXRlOnB9KSwhMH0sQ3JuPWZ1bmN0aW9uKCl7cmV0dXJuIERzLnJlY29yZHMuYm94ZXMubGVuZ3RoPjB9LFNybj1mdW5jdGlvbigpe3JldHVybiBEcy5yZWNvcmRzLmJveGVzLnNvbWUoaT0+aS5uYW1lKX0sX3JuPWZ1bmN0aW9uKCl7cmV0dXJuIERzLnJlY29yZHMubWVzc2FnZXN9LEFybj1mdW5jdGlvbigpe3JldHVybiBEcy5yZWNvcmRzLmJveGVzfSxMcm49ZnVuY3Rpb24oKXtyZXR1cm4gRHMucmVjb3Jkcy5hY3RvcnN9LE1ybj1mdW5jdGlvbigpe3JldHVybiBEcy5yZWNvcmRzLmNyZWF0ZWRBY3RvcnN9LERybj1mdW5jdGlvbigpe3JldHVybiBEcy5yZWNvcmRzLmRlc3Ryb3llZEFjdG9yc30sR1I9ZnVuY3Rpb24oaSl7cmV0dXJuIERzLnJlY29yZHMuYWN0b3JzW2ldfSxJcm49ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoRHMucmVjb3Jkcy5hY3RvcnMpfSxPcm49ZnVuY3Rpb24oKXtEcy5yZWNvcmRzLnNlcXVlbmNlTnVtYmVyc0VuYWJsZWQ9ITB9LE5ybj1mdW5jdGlvbigpe0RzLnJlY29yZHMuc2VxdWVuY2VOdW1iZXJzRW5hYmxlZD0hMX0sUHJuPSgpPT5Ecy5yZWNvcmRzLnNlcXVlbmNlTnVtYmVyc0VuYWJsZWQsQnJuPWZ1bmN0aW9uKGkpe0RzLnJlY29yZHMud3JhcEVuYWJsZWQ9aX0sSkM9KCk9PkRzLnJlY29yZHMud3JhcEVuYWJsZWQhPT12b2lkIDA/RHMucmVjb3Jkcy53cmFwRW5hYmxlZDpxdCgpLnNlcXVlbmNlLndyYXAsRnJuPWZ1bmN0aW9uKCl7RHMucmVzZXQoKSxQZygpfSxScm49ZnVuY3Rpb24oaSl7Y29uc3Qgcz1pLnRyaW0oKSx1PXt0ZXh0OnMucmVwbGFjZSgvXjo/KD86bm8pP3dyYXA6LywiIikudHJpbSgpLHdyYXA6cy5tYXRjaCgvXjo/d3JhcDovKSE9PW51bGw/ITA6cy5tYXRjaCgvXjo/bm93cmFwOi8pIT09bnVsbD8hMTp2b2lkIDB9O3JldHVybiBYZS5kZWJ1ZygicGFyc2VNZXNzYWdlOiIsdSksdX0sanJuPWZ1bmN0aW9uKGkpe2NvbnN0IHM9aS5tYXRjaCgvXigoPzpyZ2JhP3xoc2xhPylccypcKC4qXCl8XHcqKSguKikkLyk7bGV0IHU9cyE9bnVsbCYmc1sxXT9zWzFdLnRyaW0oKToidHJhbnNwYXJlbnQiLGQ9cyE9bnVsbCYmc1syXT9zWzJdLnRyaW0oKTp2b2lkIDA7aWYod2luZG93JiZ3aW5kb3cuQ1NTKXdpbmRvdy5DU1Muc3VwcG9ydHMoImNvbG9yIix1KXx8KHU9InRyYW5zcGFyZW50IixkPWkudHJpbSgpKTtlbHNle2NvbnN0IHA9bmV3IE9wdGlvbigpLnN0eWxlO3AuY29sb3I9dSxwLmNvbG9yIT09dSYmKHU9InRyYW5zcGFyZW50IixkPWkudHJpbSgpKX1yZXR1cm57Y29sb3I6dSx0ZXh0OmQhPT12b2lkIDA/WWYoZC5yZXBsYWNlKC9eOj8oPzpubyk/d3JhcDovLCIiKSxxdCgpKTp2b2lkIDAsd3JhcDpkIT09dm9pZCAwP2QubWF0Y2goL146P3dyYXA6LykhPT1udWxsPyEwOmQubWF0Y2goL146P25vd3JhcDovKSE9PW51bGw/ITE6dm9pZCAwOnZvaWQgMH19LEtSPXtTT0xJRDowLERPVFRFRDoxLE5PVEU6MixTT0xJRF9DUk9TUzozLERPVFRFRF9DUk9TUzo0LFNPTElEX09QRU46NSxET1RURURfT1BFTjo2LExPT1BfU1RBUlQ6MTAsTE9PUF9FTkQ6MTEsQUxUX1NUQVJUOjEyLEFMVF9FTFNFOjEzLEFMVF9FTkQ6MTQsT1BUX1NUQVJUOjE1LE9QVF9FTkQ6MTYsQUNUSVZFX1NUQVJUOjE3LEFDVElWRV9FTkQ6MTgsUEFSX1NUQVJUOjE5LFBBUl9BTkQ6MjAsUEFSX0VORDoyMSxSRUNUX1NUQVJUOjIyLFJFQ1RfRU5EOjIzLFNPTElEX1BPSU5UOjI0LERPVFRFRF9QT0lOVDoyNSxBVVRPTlVNQkVSOjI2LENSSVRJQ0FMX1NUQVJUOjI3LENSSVRJQ0FMX09QVElPTjoyOCxDUklUSUNBTF9FTkQ6MjksQlJFQUtfU1RBUlQ6MzAsQlJFQUtfRU5EOjMxLFBBUl9PVkVSX1NUQVJUOjMyfSwkcm49e0ZJTExFRDowLE9QRU46MX0senJuPXtMRUZUT0Y6MCxSSUdIVE9GOjEsT1ZFUjoyfSxER2U9ZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9e2FjdG9yOmkscGxhY2VtZW50OnMsbWVzc2FnZTp1LnRleHQsd3JhcDp1LndyYXA9PT12b2lkIDAmJkpDKCl8fCEhdS53cmFwfSxwPVtdLmNvbmNhdChpLGkpO0RzLnJlY29yZHMubm90ZXMucHVzaChkKSxEcy5yZWNvcmRzLm1lc3NhZ2VzLnB1c2goe2Zyb206cFswXSx0bzpwWzFdLG1lc3NhZ2U6dS50ZXh0LHdyYXA6dS53cmFwPT09dm9pZCAwJiZKQygpfHwhIXUud3JhcCx0eXBlOktSLk5PVEUscGxhY2VtZW50OnN9KX0sSUdlPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1HUihpKTt0cnl7bGV0IGQ9WWYocy50ZXh0LHF0KCkpO2Q9ZC5yZXBsYWNlKC8mYW1wOy9nLCImIiksZD1kLnJlcGxhY2UoLyZlcXVhbHM7L2csIj0iKTtjb25zdCBwPUpTT04ucGFyc2UoZCk7a3ZlKHUscCl9Y2F0Y2goZCl7WGUuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgbGluayB0ZXh0IixkKX19LHFybj1mdW5jdGlvbihpLHMpe2NvbnN0IHU9R1IoaSk7dHJ5e2NvbnN0IGI9e307bGV0IHk9WWYocy50ZXh0LHF0KCkpO3ZhciBkPXkuaW5kZXhPZigiQCIpO3k9eS5yZXBsYWNlKC8mYW1wOy9nLCImIikseT15LnJlcGxhY2UoLyZlcXVhbHM7L2csIj0iKTt2YXIgcD15LnNsaWNlKDAsZC0xKS50cmltKCksdj15LnNsaWNlKGQrMSkudHJpbSgpO2JbcF09dixrdmUodSxiKX1jYXRjaChiKXtYZS5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBsaW5rIHRleHQiLGIpfX07ZnVuY3Rpb24ga3ZlKGkscyl7aWYoaS5saW5rcz09bnVsbClpLmxpbmtzPXM7ZWxzZSBmb3IobGV0IHUgaW4gcylpLmxpbmtzW3VdPXNbdV19Y29uc3QgT0dlPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1HUihpKTt0cnl7bGV0IGQ9WWYocy50ZXh0LHF0KCkpO2NvbnN0IHA9SlNPTi5wYXJzZShkKTtOR2UodSxwKX1jYXRjaChkKXtYZS5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBwcm9wZXJ0aWVzIHRleHQiLGQpfX07ZnVuY3Rpb24gTkdlKGkscyl7aWYoaS5wcm9wZXJ0aWVzPT1udWxsKWkucHJvcGVydGllcz1zO2Vsc2UgZm9yKGxldCB1IGluIHMpaS5wcm9wZXJ0aWVzW3VdPXNbdV19ZnVuY3Rpb24gSHJuKCl7RHMucmVjb3Jkcy5jdXJyZW50Qm94PXZvaWQgMH1jb25zdCBQR2U9ZnVuY3Rpb24oaSxzKXtjb25zdCB1PUdSKGkpLGQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocy50ZXh0KTt0cnl7Y29uc3QgcD1kLmlubmVySFRNTCx2PUpTT04ucGFyc2UocCk7di5wcm9wZXJ0aWVzJiZOR2UodSx2LnByb3BlcnRpZXMpLHYubGlua3MmJmt2ZSh1LHYubGlua3MpfWNhdGNoKHApe1hlLmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIGRldGFpbHMgdGV4dCIscCl9fSxWcm49ZnVuY3Rpb24oaSxzKXtpZihpIT09dm9pZCAwJiZpLnByb3BlcnRpZXMhPT12b2lkIDApcmV0dXJuIGkucHJvcGVydGllc1tzXX0sQkdlPWZ1bmN0aW9uKGkpe2lmKEFycmF5LmlzQXJyYXkoaSkpaS5mb3JFYWNoKGZ1bmN0aW9uKHMpe0JHZShzKX0pO2Vsc2Ugc3dpdGNoKGkudHlwZSl7Y2FzZSJzZXF1ZW5jZUluZGV4IjpEcy5yZWNvcmRzLm1lc3NhZ2VzLnB1c2goe2Zyb206dm9pZCAwLHRvOnZvaWQgMCxtZXNzYWdlOntzdGFydDppLnNlcXVlbmNlSW5kZXgsc3RlcDppLnNlcXVlbmNlSW5kZXhTdGVwLHZpc2libGU6aS5zZXF1ZW5jZVZpc2libGV9LHdyYXA6ITEsdHlwZTppLnNpZ25hbFR5cGV9KTticmVhaztjYXNlImFkZFBhcnRpY2lwYW50Ijp4dmUoaS5hY3RvcixpLmFjdG9yLGkuZGVzY3JpcHRpb24saS5kcmF3KTticmVhaztjYXNlImNyZWF0ZVBhcnRpY2lwYW50IjppZihEcy5yZWNvcmRzLmFjdG9yc1tpLmFjdG9yXSl0aHJvdyBuZXcgRXJyb3IoIkl0IGlzIG5vdCBwb3NzaWJsZSB0byBoYXZlIGFjdG9ycyB3aXRoIHRoZSBzYW1lIGlkLCBldmVuIGlmIG9uZSBpcyBkZXN0cm95ZWQgYmVmb3JlIHRoZSBuZXh0IGlzIGNyZWF0ZWQuIFVzZSAnQVMnIGFsaWFzZXMgdG8gc2ltdWxhdGUgdGhlIGJlaGF2aW9yIik7RHMucmVjb3Jkcy5sYXN0Q3JlYXRlZD1pLmFjdG9yLHh2ZShpLmFjdG9yLGkuYWN0b3IsaS5kZXNjcmlwdGlvbixpLmRyYXcpLERzLnJlY29yZHMuY3JlYXRlZEFjdG9yc1tpLmFjdG9yXT1Ecy5yZWNvcmRzLm1lc3NhZ2VzLmxlbmd0aDticmVhaztjYXNlImRlc3Ryb3lQYXJ0aWNpcGFudCI6RHMucmVjb3Jkcy5sYXN0RGVzdHJveWVkPWkuYWN0b3IsRHMucmVjb3Jkcy5kZXN0cm95ZWRBY3RvcnNbaS5hY3Rvcl09RHMucmVjb3Jkcy5tZXNzYWdlcy5sZW5ndGg7YnJlYWs7Y2FzZSJhY3RpdmVTdGFydCI6SmYoaS5hY3Rvcix2b2lkIDAsdm9pZCAwLGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhY3RpdmVFbmQiOkpmKGkuYWN0b3Isdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWRkTm90ZSI6REdlKGkuYWN0b3IsaS5wbGFjZW1lbnQsaS50ZXh0KTticmVhaztjYXNlImFkZExpbmtzIjpJR2UoaS5hY3RvcixpLnRleHQpO2JyZWFrO2Nhc2UiYWRkQUxpbmsiOnFybihpLmFjdG9yLGkudGV4dCk7YnJlYWs7Y2FzZSJhZGRQcm9wZXJ0aWVzIjpPR2UoaS5hY3RvcixpLnRleHQpO2JyZWFrO2Nhc2UiYWRkRGV0YWlscyI6UEdlKGkuYWN0b3IsaS50ZXh0KTticmVhaztjYXNlImFkZE1lc3NhZ2UiOmlmKERzLnJlY29yZHMubGFzdENyZWF0ZWQpe2lmKGkudG8hPT1Ecy5yZWNvcmRzLmxhc3RDcmVhdGVkKXRocm93IG5ldyBFcnJvcigiVGhlIGNyZWF0ZWQgcGFydGljaXBhbnQgIitEcy5yZWNvcmRzLmxhc3RDcmVhdGVkKyIgZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGNyZWF0aW5nIG1lc3NhZ2UgYWZ0ZXIgaXRzIGRlY2xhcmF0aW9uLiBQbGVhc2UgY2hlY2sgdGhlIHNlcXVlbmNlIGRpYWdyYW0uIik7RHMucmVjb3Jkcy5sYXN0Q3JlYXRlZD12b2lkIDB9ZWxzZSBpZihEcy5yZWNvcmRzLmxhc3REZXN0cm95ZWQpe2lmKGkudG8hPT1Ecy5yZWNvcmRzLmxhc3REZXN0cm95ZWQmJmkuZnJvbSE9PURzLnJlY29yZHMubGFzdERlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBkZXN0cm95ZWQgcGFydGljaXBhbnQgIitEcy5yZWNvcmRzLmxhc3REZXN0cm95ZWQrIiBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgZGVzdHJveWluZyBtZXNzYWdlIGFmdGVyIGl0cyBkZWNsYXJhdGlvbi4gUGxlYXNlIGNoZWNrIHRoZSBzZXF1ZW5jZSBkaWFncmFtLiIpO0RzLnJlY29yZHMubGFzdERlc3Ryb3llZD12b2lkIDB9SmYoaS5mcm9tLGkudG8saS5tc2csaS5zaWduYWxUeXBlLGkuYWN0aXZhdGUpO2JyZWFrO2Nhc2UiYm94U3RhcnQiOmtybihpLmJveERhdGEpO2JyZWFrO2Nhc2UiYm94RW5kIjpIcm4oKTticmVhaztjYXNlImxvb3BTdGFydCI6SmYodm9pZCAwLHZvaWQgMCxpLmxvb3BUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJsb29wRW5kIjpKZih2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UicmVjdFN0YXJ0IjpKZih2b2lkIDAsdm9pZCAwLGkuY29sb3IsaS5zaWduYWxUeXBlKTticmVhaztjYXNlInJlY3RFbmQiOkpmKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRTdGFydCI6SmYodm9pZCAwLHZvaWQgMCxpLm9wdFRleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlIm9wdEVuZCI6SmYodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImFsdFN0YXJ0IjpKZih2b2lkIDAsdm9pZCAwLGkuYWx0VGV4dCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiZWxzZSI6SmYodm9pZCAwLHZvaWQgMCxpLmFsdFRleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImFsdEVuZCI6SmYodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVhaztjYXNlInNldEFjY1RpdGxlIjpCZyhpLnRleHQpO2JyZWFrO2Nhc2UicGFyU3RhcnQiOkpmKHZvaWQgMCx2b2lkIDAsaS5wYXJUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhbmQiOkpmKHZvaWQgMCx2b2lkIDAsaS5wYXJUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJwYXJFbmQiOkpmKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJjcml0aWNhbFN0YXJ0IjpKZih2b2lkIDAsdm9pZCAwLGkuY3JpdGljYWxUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRpb24iOkpmKHZvaWQgMCx2b2lkIDAsaS5vcHRpb25UZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJjcml0aWNhbEVuZCI6SmYodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImJyZWFrU3RhcnQiOkpmKHZvaWQgMCx2b2lkIDAsaS5icmVha1RleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImJyZWFrRW5kIjpKZih2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrfX0sRkdlPXthZGRBY3Rvcjp4dmUsYWRkTWVzc2FnZTpUcm4sYWRkU2lnbmFsOkpmLGFkZExpbmtzOklHZSxhZGREZXRhaWxzOlBHZSxhZGRQcm9wZXJ0aWVzOk9HZSxhdXRvV3JhcDpKQyxzZXRXcmFwOkJybixlbmFibGVTZXF1ZW5jZU51bWJlcnM6T3JuLGRpc2FibGVTZXF1ZW5jZU51bWJlcnM6TnJuLHNob3dTZXF1ZW5jZU51bWJlcnM6UHJuLGdldE1lc3NhZ2VzOl9ybixnZXRBY3RvcnM6THJuLGdldENyZWF0ZWRBY3RvcnM6TXJuLGdldERlc3Ryb3llZEFjdG9yczpEcm4sZ2V0QWN0b3I6R1IsZ2V0QWN0b3JLZXlzOklybixnZXRBY3RvclByb3BlcnR5OlZybixnZXRBY2NUaXRsZTpDcCxnZXRCb3hlczpBcm4sZ2V0RGlhZ3JhbVRpdGxlOkFwLHNldERpYWdyYW1UaXRsZTpjbSxnZXRDb25maWc6KCk9PnF0KCkuc2VxdWVuY2UsY2xlYXI6RnJuLHBhcnNlTWVzc2FnZTpScm4scGFyc2VCb3hEYXRhOmpybixMSU5FVFlQRTpLUixBUlJPV1RZUEU6JHJuLFBMQUNFTUVOVDp6cm4sYWRkTm90ZTpER2Usc2V0QWNjVGl0bGU6QmcsYXBwbHk6QkdlLHNldEFjY0Rlc2NyaXB0aW9uOlNwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLGhhc0F0TGVhc3RPbmVCb3g6Q3JuLGhhc0F0TGVhc3RPbmVCb3hXaXRoVGl0bGU6U3JufSxVcm49aT0+YC5hY3RvciB7CiAgICBzdHJva2U6ICR7aS5hY3RvckJvcmRlcn07CiAgICBmaWxsOiAke2kuYWN0b3JCa2d9OwogIH0KCiAgdGV4dC5hY3RvciA+IHRzcGFuIHsKICAgIGZpbGw6ICR7aS5hY3RvclRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAuYWN0b3ItbGluZSB7CiAgICBzdHJva2U6ICR7aS5hY3RvckxpbmVDb2xvcn07CiAgfQoKICAubWVzc2FnZUxpbmUwIHsKICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsKICAgIHN0cm9rZTogJHtpLnNpZ25hbENvbG9yfTsKICB9CgogIC5tZXNzYWdlTGluZTEgewogICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICBzdHJva2UtZGFzaGFycmF5OiAyLCAyOwogICAgc3Ryb2tlOiAke2kuc2lnbmFsQ29sb3J9OwogIH0KCiAgI2Fycm93aGVhZCBwYXRoIHsKICAgIGZpbGw6ICR7aS5zaWduYWxDb2xvcn07CiAgICBzdHJva2U6ICR7aS5zaWduYWxDb2xvcn07CiAgfQoKICAuc2VxdWVuY2VOdW1iZXIgewogICAgZmlsbDogJHtpLnNlcXVlbmNlTnVtYmVyQ29sb3J9OwogIH0KCiAgI3NlcXVlbmNlbnVtYmVyIHsKICAgIGZpbGw6ICR7aS5zaWduYWxDb2xvcn07CiAgfQoKICAjY3Jvc3NoZWFkIHBhdGggewogICAgZmlsbDogJHtpLnNpZ25hbENvbG9yfTsKICAgIHN0cm9rZTogJHtpLnNpZ25hbENvbG9yfTsKICB9CgogIC5tZXNzYWdlVGV4dCB7CiAgICBmaWxsOiAke2kuc2lnbmFsVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICB9CgogIC5sYWJlbEJveCB7CiAgICBzdHJva2U6ICR7aS5sYWJlbEJveEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7aS5sYWJlbEJveEJrZ0NvbG9yfTsKICB9CgogIC5sYWJlbFRleHQsIC5sYWJlbFRleHQgPiB0c3BhbiB7CiAgICBmaWxsOiAke2kubGFiZWxUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogIH0KCiAgLmxvb3BUZXh0LCAubG9vcFRleHQgPiB0c3BhbiB7CiAgICBmaWxsOiAke2kubG9vcFRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAubG9vcExpbmUgewogICAgc3Ryb2tlLXdpZHRoOiAycHg7CiAgICBzdHJva2UtZGFzaGFycmF5OiAyLCAyOwogICAgc3Ryb2tlOiAke2kubGFiZWxCb3hCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke2kubGFiZWxCb3hCb3JkZXJDb2xvcn07CiAgfQoKICAubm90ZSB7CiAgICAvL3N0cm9rZTogI2RlY2M5MzsKICAgIHN0cm9rZTogJHtpLm5vdGVCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke2kubm90ZUJrZ0NvbG9yfTsKICB9CgogIC5ub3RlVGV4dCwgLm5vdGVUZXh0ID4gdHNwYW4gewogICAgZmlsbDogJHtpLm5vdGVUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogIH0KCiAgLmFjdGl2YXRpb24wIHsKICAgIGZpbGw6ICR7aS5hY3RpdmF0aW9uQmtnQ29sb3J9OwogICAgc3Ryb2tlOiAke2kuYWN0aXZhdGlvbkJvcmRlckNvbG9yfTsKICB9CgogIC5hY3RpdmF0aW9uMSB7CiAgICBmaWxsOiAke2kuYWN0aXZhdGlvbkJrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHtpLmFjdGl2YXRpb25Cb3JkZXJDb2xvcn07CiAgfQoKICAuYWN0aXZhdGlvbjIgewogICAgZmlsbDogJHtpLmFjdGl2YXRpb25Ca2dDb2xvcn07CiAgICBzdHJva2U6ICR7aS5hY3RpdmF0aW9uQm9yZGVyQ29sb3J9OwogIH0KCiAgLmFjdG9yUG9wdXBNZW51IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB9CgogIC5hY3RvclBvcHVwTWVudVBhbmVsIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGZpbGw6ICR7aS5hY3RvckJrZ307CiAgICBib3gtc2hhZG93OiAwcHggOHB4IDE2cHggMHB4IHJnYmEoMCwwLDAsMC4yKTsKICAgIGZpbHRlcjogZHJvcC1zaGFkb3coM3B4IDVweCAycHggcmdiKDAgMCAwIC8gMC40KSk7Cn0KICAuYWN0b3ItbWFuIGxpbmUgewogICAgc3Ryb2tlOiAke2kuYWN0b3JCb3JkZXJ9OwogICAgZmlsbDogJHtpLmFjdG9yQmtnfTsKICB9CiAgLmFjdG9yLW1hbiBjaXJjbGUsIGxpbmUgewogICAgc3Ryb2tlOiAke2kuYWN0b3JCb3JkZXJ9OwogICAgZmlsbDogJHtpLmFjdG9yQmtnfTsKICAgIHN0cm9rZS13aWR0aDogMnB4OwogIH0KYCxaQz0xOCoyLFJHZT0iYWN0b3ItdG9wIixqR2U9ImFjdG9yLWJvdHRvbSIsRXZlPWZ1bmN0aW9uKGkscyl7cmV0dXJuIEFRKGkscyl9LEdybj1mdW5jdGlvbihpLHMsdSxkLHApe2lmKHMubGlua3M9PT12b2lkIDB8fHMubGlua3M9PT1udWxsfHxPYmplY3Qua2V5cyhzLmxpbmtzKS5sZW5ndGg9PT0wKXJldHVybntoZWlnaHQ6MCx3aWR0aDowfTtjb25zdCB2PXMubGlua3MsYj1zLmFjdG9yQ250LHk9cy5yZWN0RGF0YTt2YXIgVD0ibm9uZSI7cCYmKFQ9ImJsb2NrICFpbXBvcnRhbnQiKTtjb25zdCBfPWkuYXBwZW5kKCJnIik7Xy5hdHRyKCJpZCIsImFjdG9yIitiKyJfcG9wdXAiKSxfLmF0dHIoImNsYXNzIiwiYWN0b3JQb3B1cE1lbnUiKSxfLmF0dHIoImRpc3BsYXkiLFQpO3ZhciBBPSIiO3kuY2xhc3MhPT12b2lkIDAmJihBPSIgIit5LmNsYXNzKTtsZXQgUD15LndpZHRoPnU/eS53aWR0aDp1O2NvbnN0IFI9Xy5hcHBlbmQoInJlY3QiKTtpZihSLmF0dHIoImNsYXNzIiwiYWN0b3JQb3B1cE1lbnVQYW5lbCIrQSksUi5hdHRyKCJ4Iix5LngpLFIuYXR0cigieSIseS5oZWlnaHQpLFIuYXR0cigiZmlsbCIseS5maWxsKSxSLmF0dHIoInN0cm9rZSIseS5zdHJva2UpLFIuYXR0cigid2lkdGgiLFApLFIuYXR0cigiaGVpZ2h0Iix5LmhlaWdodCksUi5hdHRyKCJyeCIseS5yeCksUi5hdHRyKCJyeSIseS5yeSksdiE9bnVsbCl7dmFyIEY9MjA7Zm9yKGxldCBlZSBpbiB2KXt2YXIgaj1fLmFwcGVuZCgiYSIpLEs9cDkuc2FuaXRpemVVcmwodltlZV0pO2ouYXR0cigieGxpbms6aHJlZiIsSyksai5hdHRyKCJ0YXJnZXQiLCJfYmxhbmsiKSx1aW4oZCkoZWUsaix5LngrMTAseS5oZWlnaHQrRixQLDIwLHtjbGFzczoiYWN0b3IifSxkKSxGKz0zMH19cmV0dXJuIFIuYXR0cigiaGVpZ2h0IixGKSx7aGVpZ2h0OnkuaGVpZ2h0K0Ysd2lkdGg6UH19LEtybj1mdW5jdGlvbihpKXtyZXR1cm4idmFyIHB1ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJyIraSsiJyk7IGlmIChwdSAhPSBudWxsKSB7IHB1LnN0eWxlLmRpc3BsYXkgPSBwdS5zdHlsZS5kaXNwbGF5ID09ICdibG9jaycgPyAnbm9uZScgOiAnYmxvY2snOyB9In0scEo9YXN5bmMgZnVuY3Rpb24oaSxzLHU9bnVsbCl7bGV0IGQ9aS5hcHBlbmQoImZvcmVpZ25PYmplY3QiKTtjb25zdCBwPWF3YWl0IENDKHMudGV4dCxWaCgpKSxiPWQuYXBwZW5kKCJ4aHRtbDpkaXYiKS5hdHRyKCJzdHlsZSIsIndpZHRoOiBmaXQtY29udGVudDsiKS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKS5odG1sKHApLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihkLmF0dHIoImhlaWdodCIsTWF0aC5yb3VuZChiLmhlaWdodCkpLmF0dHIoIndpZHRoIixNYXRoLnJvdW5kKGIud2lkdGgpKSxzLmNsYXNzPT09Im5vdGVUZXh0Iil7Y29uc3QgeT1pLm5vZGUoKS5maXJzdENoaWxkO3kuc2V0QXR0cmlidXRlKCJoZWlnaHQiLGIuaGVpZ2h0KzIqcy50ZXh0TWFyZ2luKTtjb25zdCBUPXkuZ2V0QkJveCgpO2QuYXR0cigieCIsTWF0aC5yb3VuZChULngrVC53aWR0aC8yLWIud2lkdGgvMikpLmF0dHIoInkiLE1hdGgucm91bmQoVC55K1QuaGVpZ2h0LzItYi5oZWlnaHQvMikpfWVsc2UgaWYodSl7bGV0e3N0YXJ0eDp5LHN0b3B4OlQsc3RhcnR5Ol99PXU7aWYoeT5UKXtjb25zdCBBPXk7eT1ULFQ9QX1kLmF0dHIoIngiLE1hdGgucm91bmQoeStNYXRoLmFicyh5LVQpLzItYi53aWR0aC8yKSkscy5jbGFzcz09PSJsb29wVGV4dCI/ZC5hdHRyKCJ5IixNYXRoLnJvdW5kKF8pKTpkLmF0dHIoInkiLE1hdGgucm91bmQoXy1iLmhlaWdodCkpfXJldHVybltkXX0sWUQ9ZnVuY3Rpb24oaSxzKXtsZXQgdT0wLGQ9MDtjb25zdCBwPXMudGV4dC5zcGxpdChjaS5saW5lQnJlYWtSZWdleCksW3YsYl09TkMocy5mb250U2l6ZSk7bGV0IHk9W10sVD0wLF89KCk9PnMueTtpZihzLnZhbGlnbiE9PXZvaWQgMCYmcy50ZXh0TWFyZ2luIT09dm9pZCAwJiZzLnRleHRNYXJnaW4+MClzd2l0Y2gocy52YWxpZ24pe2Nhc2UidG9wIjpjYXNlInN0YXJ0IjpfPSgpPT5NYXRoLnJvdW5kKHMueStzLnRleHRNYXJnaW4pO2JyZWFrO2Nhc2UibWlkZGxlIjpjYXNlImNlbnRlciI6Xz0oKT0+TWF0aC5yb3VuZChzLnkrKHUrZCtzLnRleHRNYXJnaW4pLzIpO2JyZWFrO2Nhc2UiYm90dG9tIjpjYXNlImVuZCI6Xz0oKT0+TWF0aC5yb3VuZChzLnkrKHUrZCsyKnMudGV4dE1hcmdpbiktcy50ZXh0TWFyZ2luKTticmVha31pZihzLmFuY2hvciE9PXZvaWQgMCYmcy50ZXh0TWFyZ2luIT09dm9pZCAwJiZzLndpZHRoIT09dm9pZCAwKXN3aXRjaChzLmFuY2hvcil7Y2FzZSJsZWZ0IjpjYXNlInN0YXJ0IjpzLng9TWF0aC5yb3VuZChzLngrcy50ZXh0TWFyZ2luKSxzLmFuY2hvcj0ic3RhcnQiLHMuZG9taW5hbnRCYXNlbGluZT0ibWlkZGxlIixzLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUiO2JyZWFrO2Nhc2UibWlkZGxlIjpjYXNlImNlbnRlciI6cy54PU1hdGgucm91bmQocy54K3Mud2lkdGgvMikscy5hbmNob3I9Im1pZGRsZSIscy5kb21pbmFudEJhc2VsaW5lPSJtaWRkbGUiLHMuYWxpZ25tZW50QmFzZWxpbmU9Im1pZGRsZSI7YnJlYWs7Y2FzZSJyaWdodCI6Y2FzZSJlbmQiOnMueD1NYXRoLnJvdW5kKHMueCtzLndpZHRoLXMudGV4dE1hcmdpbikscy5hbmNob3I9ImVuZCIscy5kb21pbmFudEJhc2VsaW5lPSJtaWRkbGUiLHMuYWxpZ25tZW50QmFzZWxpbmU9Im1pZGRsZSI7YnJlYWt9Zm9yKGxldFtBLFBdb2YgcC5lbnRyaWVzKCkpe3MudGV4dE1hcmdpbiE9PXZvaWQgMCYmcy50ZXh0TWFyZ2luPT09MCYmdiE9PXZvaWQgMCYmKFQ9QSp2KTtjb25zdCBSPWkuYXBwZW5kKCJ0ZXh0Iik7Ui5hdHRyKCJ4IixzLngpLFIuYXR0cigieSIsXygpKSxzLmFuY2hvciE9PXZvaWQgMCYmUi5hdHRyKCJ0ZXh0LWFuY2hvciIscy5hbmNob3IpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIixzLmRvbWluYW50QmFzZWxpbmUpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIscy5hbGlnbm1lbnRCYXNlbGluZSkscy5mb250RmFtaWx5IT09dm9pZCAwJiZSLnN0eWxlKCJmb250LWZhbWlseSIscy5mb250RmFtaWx5KSxiIT09dm9pZCAwJiZSLnN0eWxlKCJmb250LXNpemUiLGIpLHMuZm9udFdlaWdodCE9PXZvaWQgMCYmUi5zdHlsZSgiZm9udC13ZWlnaHQiLHMuZm9udFdlaWdodCkscy5maWxsIT09dm9pZCAwJiZSLmF0dHIoImZpbGwiLHMuZmlsbCkscy5jbGFzcyE9PXZvaWQgMCYmUi5hdHRyKCJjbGFzcyIscy5jbGFzcykscy5keSE9PXZvaWQgMD9SLmF0dHIoImR5IixzLmR5KTpUIT09MCYmUi5hdHRyKCJkeSIsVCk7Y29uc3QgRj1QfHxoamU7aWYocy50c3Bhbil7Y29uc3Qgaj1SLmFwcGVuZCgidHNwYW4iKTtqLmF0dHIoIngiLHMueCkscy5maWxsIT09dm9pZCAwJiZqLmF0dHIoImZpbGwiLHMuZmlsbCksai50ZXh0KEYpfWVsc2UgUi50ZXh0KEYpO3MudmFsaWduIT09dm9pZCAwJiZzLnRleHRNYXJnaW4hPT12b2lkIDAmJnMudGV4dE1hcmdpbj4wJiYoZCs9KFIuX2dyb3Vwc3x8UilbMF1bMF0uZ2V0QkJveCgpLmhlaWdodCx1PWQpLHkucHVzaChSKX1yZXR1cm4geX0sJEdlPWZ1bmN0aW9uKGkscyl7ZnVuY3Rpb24gdShwLHYsYix5LFQpe3JldHVybiBwKyIsIit2KyIgIisocCtiKSsiLCIrdisiICIrKHArYikrIiwiKyh2K3ktVCkrIiAiKyhwK2ItVCoxLjIpKyIsIisodit5KSsiICIrcCsiLCIrKHYreSl9Y29uc3QgZD1pLmFwcGVuZCgicG9seWdvbiIpO3JldHVybiBkLmF0dHIoInBvaW50cyIsdShzLngscy55LHMud2lkdGgscy5oZWlnaHQsNykpLGQuYXR0cigiY2xhc3MiLCJsYWJlbEJveCIpLHMueT1zLnkrcy5oZWlnaHQvMixZRChpLHMpLGR9O2xldCBzNT0tMTtjb25zdCB6R2U9KGkscyx1LGQpPT57aS5zZWxlY3QmJnUuZm9yRWFjaChwPT57Y29uc3Qgdj1zW3BdLGI9aS5zZWxlY3QoIiNhY3RvciIrdi5hY3RvckNudCk7IWQubWlycm9yQWN0b3JzJiZ2LnN0b3B5P2IuYXR0cigieTIiLHYuc3RvcHkrdi5oZWlnaHQvMik6ZC5taXJyb3JBY3RvcnMmJmIuYXR0cigieTIiLHYuc3RvcHkpfSl9LFdybj1hc3luYyBmdW5jdGlvbihpLHMsdSxkKXtjb25zdCBwPWQ/cy5zdG9weTpzLnN0YXJ0eSx2PXMueCtzLndpZHRoLzIsYj1wKzUseT1pLmFwcGVuZCgiZyIpLmxvd2VyKCk7dmFyIFQ9eTtkfHwoczUrKyxPYmplY3Qua2V5cyhzLmxpbmtzfHx7fSkubGVuZ3RoJiYhdS5mb3JjZU1lbnVzJiZULmF0dHIoIm9uY2xpY2siLEtybihgYWN0b3Ike3M1fV9wb3B1cGApKS5hdHRyKCJjdXJzb3IiLCJwb2ludGVyIiksVC5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yIitzNSkuYXR0cigieDEiLHYpLmF0dHIoInkxIixiKS5hdHRyKCJ4MiIsdikuYXR0cigieTIiLDJlMykuYXR0cigiY2xhc3MiLCJhY3Rvci1saW5lIikuYXR0cigiY2xhc3MiLCIyMDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjVweCIpLmF0dHIoInN0cm9rZSIsIiM5OTkiKSxUPXkuYXBwZW5kKCJnIikscy5hY3RvckNudD1zNSxzLmxpbmtzIT1udWxsJiZULmF0dHIoImlkIiwicm9vdC0iK3M1KSk7Y29uc3QgXz1xQygpO3ZhciBBPSJhY3RvciI7cy5wcm9wZXJ0aWVzIT1udWxsJiZzLnByb3BlcnRpZXMuY2xhc3M/QT1zLnByb3BlcnRpZXMuY2xhc3M6Xy5maWxsPSIjZWFlYWVhIixkP0ErPWAgJHtqR2V9YDpBKz1gICR7UkdlfWAsXy54PXMueCxfLnk9cCxfLndpZHRoPXMud2lkdGgsXy5oZWlnaHQ9cy5oZWlnaHQsXy5jbGFzcz1BLF8ucng9MyxfLnJ5PTMsXy5uYW1lPXMubmFtZTtjb25zdCBQPUV2ZShULF8pO2lmKHMucmVjdERhdGE9XyxzLnByb3BlcnRpZXMhPW51bGwmJnMucHJvcGVydGllcy5pY29uKXtjb25zdCBGPXMucHJvcGVydGllcy5pY29uLnRyaW0oKTtGLmNoYXJBdCgwKT09PSJAIj9yVXQoVCxfLngrXy53aWR0aC0yMCxfLnkrMTAsRi5zdWJzdHIoMSkpOm5VdChULF8ueCtfLndpZHRoLTIwLF8ueSsxMCxGKX1hd2FpdCBUdmUodSxEdihzLmRlc2NyaXB0aW9uKSkocy5kZXNjcmlwdGlvbixULF8ueCxfLnksXy53aWR0aCxfLmhlaWdodCx7Y2xhc3M6ImFjdG9yIn0sdSk7bGV0IFI9cy5oZWlnaHQ7aWYoUC5ub2RlKXtjb25zdCBGPVAubm9kZSgpLmdldEJCb3goKTtzLmhlaWdodD1GLmhlaWdodCxSPUYuaGVpZ2h0fXJldHVybiBSfSxZcm49YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCl7Y29uc3QgcD1kP3Muc3RvcHk6cy5zdGFydHksdj1zLngrcy53aWR0aC8yLGI9cCs4MDtpLmxvd2VyKCksZHx8KHM1KyssaS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yIitzNSkuYXR0cigieDEiLHYpLmF0dHIoInkxIixiKS5hdHRyKCJ4MiIsdikuYXR0cigieTIiLDJlMykuYXR0cigiY2xhc3MiLCJhY3Rvci1saW5lIikuYXR0cigiY2xhc3MiLCIyMDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjVweCIpLmF0dHIoInN0cm9rZSIsIiM5OTkiKSxzLmFjdG9yQ250PXM1KTtjb25zdCB5PWkuYXBwZW5kKCJnIik7bGV0IFQ9ImFjdG9yLW1hbiI7ZD9UKz1gICR7akdlfWA6VCs9YCAke1JHZX1gLHkuYXR0cigiY2xhc3MiLFQpLHkuYXR0cigibmFtZSIscy5uYW1lKTtjb25zdCBfPXFDKCk7Xy54PXMueCxfLnk9cCxfLmZpbGw9IiNlYWVhZWEiLF8ud2lkdGg9cy53aWR0aCxfLmhlaWdodD1zLmhlaWdodCxfLmNsYXNzPSJhY3RvciIsXy5yeD0zLF8ucnk9Myx5LmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3ItbWFuLXRvcnNvIitzNSkuYXR0cigieDEiLHYpLmF0dHIoInkxIixwKzI1KS5hdHRyKCJ4MiIsdikuYXR0cigieTIiLHArNDUpLHkuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3Rvci1tYW4tYXJtcyIrczUpLmF0dHIoIngxIix2LVpDLzIpLmF0dHIoInkxIixwKzMzKS5hdHRyKCJ4MiIsditaQy8yKS5hdHRyKCJ5MiIscCszMykseS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsdi1aQy8yKS5hdHRyKCJ5MSIscCs2MCkuYXR0cigieDIiLHYpLmF0dHIoInkyIixwKzQ1KSx5LmFwcGVuZCgibGluZSIpLmF0dHIoIngxIix2KS5hdHRyKCJ5MSIscCs0NSkuYXR0cigieDIiLHYrWkMvMi0yKS5hdHRyKCJ5MiIscCs2MCk7Y29uc3QgQT15LmFwcGVuZCgiY2lyY2xlIik7QS5hdHRyKCJjeCIscy54K3Mud2lkdGgvMiksQS5hdHRyKCJjeSIscCsxMCksQS5hdHRyKCJyIiwxNSksQS5hdHRyKCJ3aWR0aCIscy53aWR0aCksQS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KTtjb25zdCBQPXkubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gcy5oZWlnaHQ9UC5oZWlnaHQsYXdhaXQgVHZlKHUsRHYocy5kZXNjcmlwdGlvbikpKHMuZGVzY3JpcHRpb24seSxfLngsXy55KzM1LF8ud2lkdGgsXy5oZWlnaHQse2NsYXNzOiJhY3RvciJ9LHUpLHMuaGVpZ2h0fSxYcm49YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCl7c3dpdGNoKHMudHlwZSl7Y2FzZSJhY3RvciI6cmV0dXJuIGF3YWl0IFlybihpLHMsdSxkKTtjYXNlInBhcnRpY2lwYW50IjpyZXR1cm4gYXdhaXQgV3JuKGkscyx1LGQpfX0sUXJuPWFzeW5jIGZ1bmN0aW9uKGkscyx1KXtjb25zdCBwPWkuYXBwZW5kKCJnIik7cUdlKHAscykscy5uYW1lJiZhd2FpdCBUdmUodSkocy5uYW1lLHAscy54LHMueSsocy50ZXh0TWF4SGVpZ2h0fHwwKS8yLHMud2lkdGgsMCx7Y2xhc3M6InRleHQifSx1KSxwLmxvd2VyKCl9LEpybj1mdW5jdGlvbihpKXtyZXR1cm4gaS5hcHBlbmQoImciKX0sWnJuPWZ1bmN0aW9uKGkscyx1LGQscCl7Y29uc3Qgdj1xQygpLGI9cy5hbmNob3JlZDt2Lng9cy5zdGFydHgsdi55PXMuc3RhcnR5LHYuY2xhc3M9ImFjdGl2YXRpb24iK3AlMyx2LndpZHRoPXMuc3RvcHgtcy5zdGFydHgsdi5oZWlnaHQ9dS1zLnN0YXJ0eSxFdmUoYix2KX0sZWluPWFzeW5jIGZ1bmN0aW9uKGkscyx1LGQpe2NvbnN0e2JveE1hcmdpbjpwLGJveFRleHRNYXJnaW46dixsYWJlbEJveEhlaWdodDpiLGxhYmVsQm94V2lkdGg6eSxtZXNzYWdlRm9udEZhbWlseTpULG1lc3NhZ2VGb250U2l6ZTpfLG1lc3NhZ2VGb250V2VpZ2h0OkF9PWQsUD1pLmFwcGVuZCgiZyIpLFI9ZnVuY3Rpb24oSyxlZSxpZSxvZSl7cmV0dXJuIFAuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLEspLmF0dHIoInkxIixlZSkuYXR0cigieDIiLGllKS5hdHRyKCJ5MiIsb2UpLmF0dHIoImNsYXNzIiwibG9vcExpbmUiKX07UihzLnN0YXJ0eCxzLnN0YXJ0eSxzLnN0b3B4LHMuc3RhcnR5KSxSKHMuc3RvcHgscy5zdGFydHkscy5zdG9weCxzLnN0b3B5KSxSKHMuc3RhcnR4LHMuc3RvcHkscy5zdG9weCxzLnN0b3B5KSxSKHMuc3RhcnR4LHMuc3RhcnR5LHMuc3RhcnR4LHMuc3RvcHkpLHMuc2VjdGlvbnMhPT12b2lkIDAmJnMuc2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbihLKXtSKHMuc3RhcnR4LEsueSxzLnN0b3B4LEsueSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzLCAzIil9KTtsZXQgRj16YmUoKTtGLnRleHQ9dSxGLng9cy5zdGFydHgsRi55PXMuc3RhcnR5LEYuZm9udEZhbWlseT1ULEYuZm9udFNpemU9XyxGLmZvbnRXZWlnaHQ9QSxGLmFuY2hvcj0ibWlkZGxlIixGLnZhbGlnbj0ibWlkZGxlIixGLnRzcGFuPSExLEYud2lkdGg9eXx8NTAsRi5oZWlnaHQ9Ynx8MjAsRi50ZXh0TWFyZ2luPXYsRi5jbGFzcz0ibGFiZWxUZXh0IiwkR2UoUCxGKSxGPUhHZSgpLEYudGV4dD1zLnRpdGxlLEYueD1zLnN0YXJ0eCt5LzIrKHMuc3RvcHgtcy5zdGFydHgpLzIsRi55PXMuc3RhcnR5K3ArdixGLmFuY2hvcj0ibWlkZGxlIixGLnZhbGlnbj0ibWlkZGxlIixGLnRleHRNYXJnaW49dixGLmNsYXNzPSJsb29wVGV4dCIsRi5mb250RmFtaWx5PVQsRi5mb250U2l6ZT1fLEYuZm9udFdlaWdodD1BLEYud3JhcD0hMDtsZXQgaj1EdihGLnRleHQpP2F3YWl0IHBKKFAsRixzKTpZRChQLEYpO2lmKHMuc2VjdGlvblRpdGxlcyE9PXZvaWQgMCl7Zm9yKGNvbnN0W0ssZWVdb2YgT2JqZWN0LmVudHJpZXMocy5zZWN0aW9uVGl0bGVzKSlpZihlZS5tZXNzYWdlKXtGLnRleHQ9ZWUubWVzc2FnZSxGLng9cy5zdGFydHgrKHMuc3RvcHgtcy5zdGFydHgpLzIsRi55PXMuc2VjdGlvbnNbS10ueStwK3YsRi5jbGFzcz0ibG9vcFRleHQiLEYuYW5jaG9yPSJtaWRkbGUiLEYudmFsaWduPSJtaWRkbGUiLEYudHNwYW49ITEsRi5mb250RmFtaWx5PVQsRi5mb250U2l6ZT1fLEYuZm9udFdlaWdodD1BLEYud3JhcD1zLndyYXAsRHYoRi50ZXh0KT8ocy5zdGFydHk9cy5zZWN0aW9uc1tLXS55LGF3YWl0IHBKKFAsRixzKSk6WUQoUCxGKTtsZXQgaWU9TWF0aC5yb3VuZChqLm1hcChvZT0+KG9lLl9ncm91cHN8fG9lKVswXVswXS5nZXRCQm94KCkuaGVpZ2h0KS5yZWR1Y2UoKG9lLHBlKT0+b2UrcGUpKTtzLnNlY3Rpb25zW0tdLmhlaWdodCs9aWUtKHArdil9fXJldHVybiBzLmhlaWdodD1NYXRoLnJvdW5kKHMuc3RvcHktcy5zdGFydHkpLFB9LHFHZT1mdW5jdGlvbihpLHMpe1RxZShpLHMpfSx0aW49ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiZGF0YWJhc2UiKS5hdHRyKCJmaWxsLXJ1bGUiLCJldmVub2RkIikuYXR0cigiY2xpcC1ydWxlIiwiZXZlbm9kZCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIuMjU4LjAwMWwuMjU2LjAwNC4yNTUuMDA1LjI1My4wMDguMjUxLjAxLjI0OS4wMTIuMjQ3LjAxNS4yNDYuMDE2LjI0Mi4wMTkuMjQxLjAyLjIzOS4wMjMuMjM2LjAyNC4yMzMuMDI3LjIzMS4wMjguMjI5LjAzMS4yMjUuMDMyLjIyMy4wMzQuMjIuMDM2LjIxNy4wMzguMjE0LjA0LjIxMS4wNDEuMjA4LjA0My4yMDUuMDQ1LjIwMS4wNDYuMTk4LjA0OC4xOTQuMDUuMTkxLjA1MS4xODcuMDUzLjE4My4wNTQuMTguMDU2LjE3NS4wNTcuMTcyLjA1OS4xNjguMDYuMTYzLjA2MS4xNi4wNjMuMTU1LjA2NC4xNS4wNjYuMDc0LjAzMy4wNzMuMDMzLjA3MS4wMzQuMDcuMDM0LjA2OS4wMzUuMDY4LjAzNS4wNjcuMDM1LjA2Ni4wMzUuMDY0LjAzNi4wNjQuMDM2LjA2Mi4wMzYuMDYuMDM2LjA2LjAzNy4wNTguMDM3LjA1OC4wMzcuMDU1LjAzOC4wNTUuMDM4LjA1My4wMzguMDUyLjAzOC4wNTEuMDM5LjA1LjAzOS4wNDguMDM5LjA0Ny4wMzkuMDQ1LjA0LjA0NC4wNC4wNDMuMDQuMDQxLjA0LjA0LjA0MS4wMzkuMDQxLjAzNy4wNDEuMDM2LjA0MS4wMzQuMDQxLjAzMy4wNDIuMDMyLjA0Mi4wMy4wNDIuMDI5LjA0Mi4wMjcuMDQyLjAyNi4wNDMuMDI0LjA0My4wMjMuMDQzLjAyMS4wNDMuMDIuMDQzLjAxOC4wNDQuMDE3LjA0My4wMTUuMDQ0LjAxMy4wNDQuMDEyLjA0NC4wMTEuMDQ1LjAwOS4wNDQuMDA3LjA0NS4wMDYuMDQ1LjAwNC4wNDUuMDAyLjA0NS4wMDEuMDQ1djE3bC0uMDAxLjA0NS0uMDAyLjA0NS0uMDA0LjA0NS0uMDA2LjA0NS0uMDA3LjA0NS0uMDA5LjA0NC0uMDExLjA0NS0uMDEyLjA0NC0uMDEzLjA0NC0uMDE1LjA0NC0uMDE3LjA0My0uMDE4LjA0NC0uMDIuMDQzLS4wMjEuMDQzLS4wMjMuMDQzLS4wMjQuMDQzLS4wMjYuMDQzLS4wMjcuMDQyLS4wMjkuMDQyLS4wMy4wNDItLjAzMi4wNDItLjAzMy4wNDItLjAzNC4wNDEtLjAzNi4wNDEtLjAzNy4wNDEtLjAzOS4wNDEtLjA0LjA0MS0uMDQxLjA0LS4wNDMuMDQtLjA0NC4wNC0uMDQ1LjA0LS4wNDcuMDM5LS4wNDguMDM5LS4wNS4wMzktLjA1MS4wMzktLjA1Mi4wMzgtLjA1My4wMzgtLjA1NS4wMzgtLjA1NS4wMzgtLjA1OC4wMzctLjA1OC4wMzctLjA2LjAzNy0uMDYuMDM2LS4wNjIuMDM2LS4wNjQuMDM2LS4wNjQuMDM2LS4wNjYuMDM1LS4wNjcuMDM1LS4wNjguMDM1LS4wNjkuMDM1LS4wNy4wMzQtLjA3MS4wMzQtLjA3My4wMzMtLjA3NC4wMzMtLjE1LjA2Ni0uMTU1LjA2NC0uMTYuMDYzLS4xNjMuMDYxLS4xNjguMDYtLjE3Mi4wNTktLjE3NS4wNTctLjE4LjA1Ni0uMTgzLjA1NC0uMTg3LjA1My0uMTkxLjA1MS0uMTk0LjA1LS4xOTguMDQ4LS4yMDEuMDQ2LS4yMDUuMDQ1LS4yMDguMDQzLS4yMTEuMDQxLS4yMTQuMDQtLjIxNy4wMzgtLjIyLjAzNi0uMjIzLjAzNC0uMjI1LjAzMi0uMjI5LjAzMS0uMjMxLjAyOC0uMjMzLjAyNy0uMjM2LjAyNC0uMjM5LjAyMy0uMjQxLjAyLS4yNDIuMDE5LS4yNDYuMDE2LS4yNDcuMDE1LS4yNDkuMDEyLS4yNTEuMDEtLjI1My4wMDgtLjI1NS4wMDUtLjI1Ni4wMDQtLjI1OC4wMDEtLjI1OC0uMDAxLS4yNTYtLjAwNC0uMjU1LS4wMDUtLjI1My0uMDA4LS4yNTEtLjAxLS4yNDktLjAxMi0uMjQ3LS4wMTUtLjI0NS0uMDE2LS4yNDMtLjAxOS0uMjQxLS4wMi0uMjM4LS4wMjMtLjIzNi0uMDI0LS4yMzQtLjAyNy0uMjMxLS4wMjgtLjIyOC0uMDMxLS4yMjYtLjAzMi0uMjIzLS4wMzQtLjIyLS4wMzYtLjIxNy0uMDM4LS4yMTQtLjA0LS4yMTEtLjA0MS0uMjA4LS4wNDMtLjIwNC0uMDQ1LS4yMDEtLjA0Ni0uMTk4LS4wNDgtLjE5NS0uMDUtLjE5LS4wNTEtLjE4Ny0uMDUzLS4xODQtLjA1NC0uMTc5LS4wNTYtLjE3Ni0uMDU3LS4xNzItLjA1OS0uMTY3LS4wNi0uMTY0LS4wNjEtLjE1OS0uMDYzLS4xNTUtLjA2NC0uMTUxLS4wNjYtLjA3NC0uMDMzLS4wNzItLjAzMy0uMDcyLS4wMzQtLjA3LS4wMzQtLjA2OS0uMDM1LS4wNjgtLjAzNS0uMDY3LS4wMzUtLjA2Ni0uMDM1LS4wNjQtLjAzNi0uMDYzLS4wMzYtLjA2Mi0uMDM2LS4wNjEtLjAzNi0uMDYtLjAzNy0uMDU4LS4wMzctLjA1Ny0uMDM3LS4wNTYtLjAzOC0uMDU1LS4wMzgtLjA1My0uMDM4LS4wNTItLjAzOC0uMDUxLS4wMzktLjA0OS0uMDM5LS4wNDktLjAzOS0uMDQ2LS4wMzktLjA0Ni0uMDQtLjA0NC0uMDQtLjA0My0uMDQtLjA0MS0uMDQtLjA0LS4wNDEtLjAzOS0uMDQxLS4wMzctLjA0MS0uMDM2LS4wNDEtLjAzNC0uMDQxLS4wMzMtLjA0Mi0uMDMyLS4wNDItLjAzLS4wNDItLjAyOS0uMDQyLS4wMjctLjA0Mi0uMDI2LS4wNDMtLjAyNC0uMDQzLS4wMjMtLjA0My0uMDIxLS4wNDMtLjAyLS4wNDMtLjAxOC0uMDQ0LS4wMTctLjA0My0uMDE1LS4wNDQtLjAxMy0uMDQ0LS4wMTItLjA0NC0uMDExLS4wNDUtLjAwOS0uMDQ0LS4wMDctLjA0NS0uMDA2LS4wNDUtLjAwNC0uMDQ1LS4wMDItLjA0NS0uMDAxLS4wNDV2LTE3bC4wMDEtLjA0NS4wMDItLjA0NS4wMDQtLjA0NS4wMDYtLjA0NS4wMDctLjA0NS4wMDktLjA0NC4wMTEtLjA0NS4wMTItLjA0NC4wMTMtLjA0NC4wMTUtLjA0NC4wMTctLjA0My4wMTgtLjA0NC4wMi0uMDQzLjAyMS0uMDQzLjAyMy0uMDQzLjAyNC0uMDQzLjAyNi0uMDQzLjAyNy0uMDQyLjAyOS0uMDQyLjAzLS4wNDIuMDMyLS4wNDIuMDMzLS4wNDIuMDM0LS4wNDEuMDM2LS4wNDEuMDM3LS4wNDEuMDM5LS4wNDEuMDQtLjA0MS4wNDEtLjA0LjA0My0uMDQuMDQ0LS4wNC4wNDYtLjA0LjA0Ni0uMDM5LjA0OS0uMDM5LjA0OS0uMDM5LjA1MS0uMDM5LjA1Mi0uMDM4LjA1My0uMDM4LjA1NS0uMDM4LjA1Ni0uMDM4LjA1Ny0uMDM3LjA1OC0uMDM3LjA2LS4wMzcuMDYxLS4wMzYuMDYyLS4wMzYuMDYzLS4wMzYuMDY0LS4wMzYuMDY2LS4wMzUuMDY3LS4wMzUuMDY4LS4wMzUuMDY5LS4wMzUuMDctLjAzNC4wNzItLjAzNC4wNzItLjAzMy4wNzQtLjAzMy4xNTEtLjA2Ni4xNTUtLjA2NC4xNTktLjA2My4xNjQtLjA2MS4xNjctLjA2LjE3Mi0uMDU5LjE3Ni0uMDU3LjE3OS0uMDU2LjE4NC0uMDU0LjE4Ny0uMDUzLjE5LS4wNTEuMTk1LS4wNS4xOTgtLjA0OC4yMDEtLjA0Ni4yMDQtLjA0NS4yMDgtLjA0My4yMTEtLjA0MS4yMTQtLjA0LjIxNy0uMDM4LjIyLS4wMzYuMjIzLS4wMzQuMjI2LS4wMzIuMjI4LS4wMzEuMjMxLS4wMjguMjM0LS4wMjcuMjM2LS4wMjQuMjM4LS4wMjMuMjQxLS4wMi4yNDMtLjAxOS4yNDUtLjAxNi4yNDctLjAxNS4yNDktLjAxMi4yNTEtLjAxLjI1My0uMDA4LjI1NS0uMDA1LjI1Ni0uMDA0LjI1OC0uMDAxLjI1OC4wMDF6bS05LjI1OCAyMC40OTl2LjAxbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMi4wMDUuMDIxLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI1LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDQ5LjA1Ni4wNS4wNjEuMDUxLjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTEuMDc5LjA1Mi4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTEuMTA1LjA1Mi4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OC4xNDQuMDQ5LjE0Ny4wNDcuMTUyLjA0Ny4xNTUuMDQ3LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQxLjE3OC4wNDEuMTgzLjAzOS4xODcuMDM5LjE5LjAzNy4xOTQuMDM1LjE5Ny4wMzUuMjAyLjAzMy4yMDQuMDMxLjIwOS4wMy4yMTIuMDI5LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNS4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDUuMjU2LjAwNC4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMS4yMjQtLjAyNC4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzEuMjAyLS4wMzQuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wNC4xNzktLjA0LjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1My4wODMtLjA1MS4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI0LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEyN2wtLjA3Ny4wNTUtLjA4LjA1My0uMDgzLjA1NC0uMDg1LjA1My0uMDg3LjA1Mi0uMDkuMDUyLS4wOTMuMDUxLS4wOTUuMDUtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDUtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wNC0uMTMyLjAzOC0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNy0uMTM5LjAzNS0uMTQyLjAzNS0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOS0uMTU0LjAyNy0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDEtLjE3OS4wMDgtLjE3OS4wMDgtLjE4MS4wMDYtLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNi0uMTc5LS4wMDgtLjE3OS0uMDA4LS4xNzgtLjAxLS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyNy0uMTUzLS4wMjktLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM1LS4xNC0uMDM1LS4xMzctLjAzNy0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOC0uMTMtLjA0LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQyLS4xMi0uMDQ0LS4xMTctLjA0My0uMTE2LS4wNDUtLjExMy0uMDQ1LS4xMTItLjA0Ni0uMTA5LS4wNDctLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNS0uMDkzLS4wNTItLjA5LS4wNTEtLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTI3em0wLTUuNjU0di4wMTFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjIuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjQuMDE2LjAyMy4wMTcuMDI0LjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjQuMDIzLjAyNS4wMjQuMDI0LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1Mi4xMS4wNTEuMTE0LjA1MS4xMTkuMDUyLjEyMy4wNS4xMjcuMDUxLjEzMS4wNS4xMzUuMDQ5LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQ0LjE3MS4wNDIuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMi4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTIuMjQxLS4wMTUuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDUuMTM2LS4wNDkuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUxLjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI1LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjMuMDEzLS4wMjQuMDEyLS4wMjIuMDEtLjAyMy4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIxLjAwNC0uMDIyLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEzOWwtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1NC0uMDg1LjA1Mi0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDQtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM1LS4xNDMuMDMzLS4xNDQuMDMzLS4xNDcuMDMzLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMDktLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDctLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNy0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAwOS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMy0uMTQ1LS4wMzMtLjE0My0uMDMzLS4xNDEtLjAzNS0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTEtLjA4Ny0uMDUzLS4wODUtLjA1Mi0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTM5em0wLTUuNjY2di4wMTFsLjAwMS4wMi4wMDMuMDIyLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIxLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjQuMDE4LjAyMy4wMTkuMDI0LjAyMS4wMjUuMDIyLjAyNC4wMjMuMDI0LjAyNC4wMjUuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUxLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE3LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEzLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA0OS4xMzEtLjA1MS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIyLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTUzbC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDUzLS4wODUuMDUzLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDgtLjEwNS4wNDgtLjEwNi4wNDgtLjEwOS4wNDYtLjExMS4wNDYtLjExNC4wNDYtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0My0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzQtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzItLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjQtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjMtLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxLS4xNzguMDEtLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDYtLjE4Mi4wMDYtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDEtLjE4NS4wMDEtLjE4NS0uMDAxLS4xODQtLjAwMS0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNi0uMTgxLS4wMDYtLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMS0uMTc2LS4wMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMy0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNC0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzItLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM0LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNDEtLjEyNi0uMDQxLS4xMjQtLjA0MS0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDgtLjEwNS0uMDQ4LS4xMDItLjA0OC0uMS0uMDUtLjA5Ny0uMDQ5LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTItLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTMtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTUzem04Ljc0LTguMTc5bC0uMjU3LjAwNC0uMjU0LjAwNS0uMjUuMDA4LS4yNDcuMDExLS4yNDQuMDEyLS4yNDEuMDE0LS4yMzcuMDE2LS4yMzMuMDE4LS4yMzEuMDIxLS4yMjYuMDIyLS4yMjQuMDIzLS4yMi4wMjYtLjIxNi4wMjctLjIxMi4wMjgtLjIxLjAzMS0uMjA1LjAzMi0uMjAyLjAzMy0uMTk4LjAzNC0uMTk0LjAzNi0uMTkxLjAzOC0uMTg3LjAzOC0uMTgzLjA0LS4xNzkuMDQxLS4xNzUuMDQyLS4xNzIuMDQzLS4xNjguMDQzLS4xNjMuMDQ1LS4xNi4wNDYtLjE1NS4wNDYtLjE1Mi4wNDgtLjE0OC4wNDgtLjE0My4wNDgtLjEzOS4wNDktLjEzNi4wNS0uMTMxLjA1LS4xMjYuMDUxLS4xMjMuMDUxLS4xMTguMDUxLS4xMTQuMDUyLS4xMS4wNTItLjEwNi4wNTItLjEwMS4wNTItLjA5Ni4wNTItLjA5Mi4wNTItLjA4OC4wNTItLjA4My4wNTItLjA3OS4wNTItLjA3NC4wNTEtLjA3LjA1Mi0uMDY1LjA1MS0uMDYuMDUtLjA1Ni4wNS0uMDUxLjA1LS4wMjMuMDI1LS4wMjMuMDI0LS4wMjEuMDI0LS4wMi4wMjUtLjAxOS4wMjQtLjAxOC4wMjQtLjAxNy4wMjMtLjAxNS4wMjQtLjAxNC4wMjMtLjAxMy4wMjMtLjAxMi4wMjMtLjAxLjAyMy0uMDEuMDIyLS4wMDguMDIyLS4wMDYuMDIzLS4wMDYuMDIxLS4wMDQuMDIyLS4wMDQuMDIxLS4wMDEuMDIxLS4wMDEuMDIxLjAwMS4wMjEuMDAxLjAyMS4wMDQuMDIxLjAwNC4wMjIuMDA2LjAyMS4wMDYuMDIzLjAwOC4wMjIuMDEuMDIyLjAxLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE0LjAyMy4wMTUuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyLjAyNS4wMjEuMDI0LjAyMy4wMjQuMDIzLjAyNS4wNTEuMDUuMDU2LjA1LjA2LjA1LjA2NS4wNTEuMDcuMDUyLjA3NC4wNTEuMDc5LjA1Mi4wODMuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTYuMDUyLjEwMS4wNTIuMTA2LjA1Mi4xMS4wNTIuMTE0LjA1Mi4xMTguMDUxLjEyMy4wNTEuMTI2LjA1MS4xMzEuMDUuMTM2LjA1LjEzOS4wNDkuMTQzLjA0OC4xNDguMDQ4LjE1Mi4wNDguMTU1LjA0Ni4xNi4wNDYuMTYzLjA0NS4xNjguMDQzLjE3Mi4wNDMuMTc1LjA0Mi4xNzkuMDQxLjE4My4wNC4xODcuMDM4LjE5MS4wMzguMTk0LjAzNi4xOTguMDM0LjIwMi4wMzMuMjA1LjAzMi4yMS4wMzEuMjEyLjAyOC4yMTYuMDI3LjIyLjAyNi4yMjQuMDIzLjIyNi4wMjIuMjMxLjAyMS4yMzMuMDE4LjIzNy4wMTYuMjQxLjAxNC4yNDQuMDEyLjI0Ny4wMTEuMjUuMDA4LjI1NC4wMDUuMjU3LjAwNC4yNi4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIyLjIyNC0uMDIzLjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzOC4xODctLjAzOC4xODMtLjA0LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQzLjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDguMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI0LjAyLS4wMjUuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjMuMDE1LS4wMjQuMDE0LS4wMjMuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIzLjAwNi0uMDIxLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwNC0uMDIxLS4wMDQtLjAyMi0uMDA2LS4wMjEtLjAwNi0uMDIzLS4wMDgtLjAyMi0uMDEtLjAyMi0uMDEtLjAyMy0uMDEyLS4wMjMtLjAxMy0uMDIzLS4wMTQtLjAyMy0uMDE1LS4wMjQtLjAxNy0uMDIzLS4wMTgtLjAyNC0uMDE5LS4wMjQtLjAyLS4wMjUtLjAyMS0uMDI0LS4wMjMtLjAyNC0uMDIzLS4wMjUtLjA1MS0uMDUtLjA1Ni0uMDUtLjA2LS4wNS0uMDY1LS4wNTEtLjA3LS4wNTItLjA3NC0uMDUxLS4wNzktLjA1Mi0uMDgzLS4wNTItLjA4OC0uMDUyLS4wOTItLjA1Mi0uMDk2LS4wNTItLjEwMS0uMDUyLS4xMDYtLjA1Mi0uMTEtLjA1Mi0uMTE0LS4wNTItLjExOC0uMDUxLS4xMjMtLjA1MS0uMTI2LS4wNTEtLjEzMS0uMDUtLjEzNi0uMDUtLjEzOS0uMDQ5LS4xNDMtLjA0OC0uMTQ4LS4wNDgtLjE1Mi0uMDQ4LS4xNTUtLjA0Ni0uMTYtLjA0Ni0uMTYzLS4wNDUtLjE2OC0uMDQzLS4xNzItLjA0My0uMTc1LS4wNDItLjE3OS0uMDQxLS4xODMtLjA0LS4xODctLjAzOC0uMTkxLS4wMzgtLjE5NC0uMDM2LS4xOTgtLjAzNC0uMjAyLS4wMzMtLjIwNS0uMDMyLS4yMS0uMDMxLS4yMTItLjAyOC0uMjE2LS4wMjctLjIyLS4wMjYtLjIyNC0uMDIzLS4yMjYtLjAyMi0uMjMxLS4wMjEtLjIzMy0uMDE4LS4yMzctLjAxNi0uMjQxLS4wMTQtLjI0NC0uMDEyLS4yNDctLjAxMS0uMjUtLjAwOC0uMjU0LS4wMDUtLjI1Ny0uMDA0LS4yNi0uMDAxLS4yNi4wMDF6Iil9LG5pbj1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjb21wdXRlciIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMiAydjEzaDIwdi0xM2gtMjB6bTE4IDExaC0xNnYtOWgxNnY5em0tMTAuMjI4IDZsLjQ2Ni0xaDMuNTI0bC40NjcgMWgtNC40NTd6bTE0LjIyOCAzaC0yNGwyLTZoMi4xMDRsLTEuMzMgNGgxOC40NWwtMS4yOTctNGgyLjA3M2wyIDZ6bS01LTEwaC0xNHYtN2gxNHY3eiIpfSxyaW49ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiY2xvY2siKS5hdHRyKCJ3aWR0aCIsIjI0IikuYXR0cigiaGVpZ2h0IiwiMjQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyIDJjNS41MTQgMCAxMCA0LjQ4NiAxMCAxMHMtNC40ODYgMTAtMTAgMTAtMTAtNC40ODYtMTAtMTAgNC40ODYtMTAgMTAtMTB6bTAtMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnM1LjM3MyAxMiAxMiAxMiAxMi01LjM3MyAxMi0xMi01LjM3My0xMi0xMi0xMnptNS44NDggMTIuNDU5Yy4yMDIuMDM4LjIwMi4zMzMuMDAxLjM3Mi0xLjkwNy4zNjEtNi4wNDUgMS4xMTEtNi41NDcgMS4xMTEtLjcxOSAwLTEuMzAxLS41ODItMS4zMDEtMS4zMDEgMC0uNTEyLjc3LTUuNDQ3IDEuMTI1LTcuNDQ1LjAzNC0uMTkyLjMxMi0uMTgxLjM0My4wMTRsLjk4NSA2LjIzOCA1LjM5NCAxLjAxMXoiKX0saWluPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93aGVhZCIpLmF0dHIoInJlZlgiLDcuOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKX0sc2luPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImZpbGxlZC1oZWFkIikuYXR0cigicmVmWCIsMTUuNSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0sYWluPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsInNlcXVlbmNlbnVtYmVyIikuYXR0cigicmVmWCIsMTUpLmF0dHIoInJlZlkiLDE1KS5hdHRyKCJtYXJrZXJXaWR0aCIsNjApLmF0dHIoIm1hcmtlckhlaWdodCIsNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwxNSkuYXR0cigiY3kiLDE1KS5hdHRyKCJyIiw2KX0sb2luPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNyb3NzaGVhZCIpLmF0dHIoIm1hcmtlcldpZHRoIiwxNSkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXR0cigicmVmWCIsNCkuYXR0cigicmVmWSIsNC41KS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHQiKS5hdHRyKCJkIiwiTSAxLDIgTCA2LDcgTSA2LDIgTCAxLDciKX0sSEdlPWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDp2b2lkIDAsYW5jaG9yOnZvaWQgMCxzdHlsZToiIzY2NiIsd2lkdGg6dm9pZCAwLGhlaWdodDp2b2lkIDAsdGV4dE1hcmdpbjowLHJ4OjAscnk6MCx0c3BhbjohMCx2YWxpZ246dm9pZCAwfX0sY2luPWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDoiI0VERjJBRSIsc3Ryb2tlOiIjNjY2Iix3aWR0aDoxMDAsYW5jaG9yOiJzdGFydCIsaGVpZ2h0OjEwMCxyeDowLHJ5OjB9fSxUdmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHYsYix5LFQsXyxBLFApe2NvbnN0IFI9Yi5hcHBlbmQoInRleHQiKS5hdHRyKCJ4Iix5K18vMikuYXR0cigieSIsVCtBLzIrNSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCh2KTtwKFIsUCl9ZnVuY3Rpb24gcyh2LGIseSxULF8sQSxQLFIpe2NvbnN0e2FjdG9yRm9udFNpemU6RixhY3RvckZvbnRGYW1pbHk6aixhY3RvckZvbnRXZWlnaHQ6S309UixbZWUsaWVdPU5DKEYpLG9lPXYuc3BsaXQoY2kubGluZUJyZWFrUmVnZXgpO2ZvcihsZXQgcGU9MDtwZTxvZS5sZW5ndGg7cGUrKyl7Y29uc3QgYmU9cGUqZWUtZWUqKG9lLmxlbmd0aC0xKS8yLGFlPWIuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIseStfLzIpLmF0dHIoInkiLFQpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLGllKS5zdHlsZSgiZm9udC13ZWlnaHQiLEspLnN0eWxlKCJmb250LWZhbWlseSIsaik7YWUuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLHkrXy8yKS5hdHRyKCJkeSIsYmUpLnRleHQob2VbcGVdKSxhZS5hdHRyKCJ5IixUK0EvMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHAoYWUsUCl9fWZ1bmN0aW9uIHUodixiLHksVCxfLEEsUCxSKXtjb25zdCBGPWIuYXBwZW5kKCJzd2l0Y2giKSxLPUYuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIseSkuYXR0cigieSIsVCkuYXR0cigid2lkdGgiLF8pLmF0dHIoImhlaWdodCIsQSkuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7Sy5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dCh2KSxzKHYsRix5LFQsXyxBLFAsUikscChLLFApfWFzeW5jIGZ1bmN0aW9uIGQodixiLHksVCxfLEEsUCxSKXtjb25zdCBGPWF3YWl0IEhGKHYsVmgoKSksaj1iLmFwcGVuZCgic3dpdGNoIiksZWU9ai5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4Iix5K18vMi1GLndpZHRoLzIpLmF0dHIoInkiLFQrQS8yLUYuaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixGLndpZHRoKS5hdHRyKCJoZWlnaHQiLEYuaGVpZ2h0KS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2VlLmFwcGVuZCgiZGl2Iikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS5odG1sKGF3YWl0IENDKHYsVmgoKSkpLHModixqLHksVCxfLEEsUCxSKSxwKGVlLFApfWZ1bmN0aW9uIHAodixiKXtmb3IoY29uc3QgeSBpbiBiKWIuaGFzT3duUHJvcGVydHkoeSkmJnYuYXR0cih5LGJbeV0pfXJldHVybiBmdW5jdGlvbih2LGI9ITEpe3JldHVybiBiP2Q6di50ZXh0UGxhY2VtZW50PT09ImZvIj91OnYudGV4dFBsYWNlbWVudD09PSJvbGQiP2k6c319KCksdWluPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaShwLHYsYix5LFQsXyxBKXtjb25zdCBQPXYuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYikuYXR0cigieSIseSkuc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKS50ZXh0KHApO2QoUCxBKX1mdW5jdGlvbiBzKHAsdixiLHksVCxfLEEsUCl7Y29uc3R7YWN0b3JGb250U2l6ZTpSLGFjdG9yRm9udEZhbWlseTpGLGFjdG9yRm9udFdlaWdodDpqfT1QLEs9cC5zcGxpdChjaS5saW5lQnJlYWtSZWdleCk7Zm9yKGxldCBlZT0wO2VlPEsubGVuZ3RoO2VlKyspe2NvbnN0IGllPWVlKlItUiooSy5sZW5ndGgtMSkvMixvZT12LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIpLmF0dHIoInkiLHkpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0Iikuc3R5bGUoImZvbnQtc2l6ZSIsUikuc3R5bGUoImZvbnQtd2VpZ2h0IixqKS5zdHlsZSgiZm9udC1mYW1pbHkiLEYpO29lLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixiKS5hdHRyKCJkeSIsaWUpLnRleHQoS1tlZV0pLG9lLmF0dHIoInkiLHkrXy8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIiksZChvZSxBKX19ZnVuY3Rpb24gdShwLHYsYix5LFQsXyxBLFApe2NvbnN0IFI9di5hcHBlbmQoInN3aXRjaCIpLGo9Ui5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixiKS5hdHRyKCJ5Iix5KS5hdHRyKCJ3aWR0aCIsVCkuYXR0cigiaGVpZ2h0IixfKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtqLmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHApLHMocCxSLGIseSxULF8sQSxQKSxkKGosQSl9ZnVuY3Rpb24gZChwLHYpe2Zvcihjb25zdCBiIGluIHYpdi5oYXNPd25Qcm9wZXJ0eShiKSYmcC5hdHRyKGIsdltiXSl9cmV0dXJuIGZ1bmN0aW9uKHApe3JldHVybiBwLnRleHRQbGFjZW1lbnQ9PT0iZm8iP3U6cC50ZXh0UGxhY2VtZW50PT09Im9sZCI/aTpzfX0oKSxaZj17ZHJhd1JlY3Q6RXZlLGRyYXdUZXh0OllELGRyYXdMYWJlbDokR2UsZHJhd0FjdG9yOlhybixkcmF3Qm94OlFybixkcmF3UG9wdXA6R3JuLGFuY2hvckVsZW1lbnQ6SnJuLGRyYXdBY3RpdmF0aW9uOlpybixkcmF3TG9vcDplaW4sZHJhd0JhY2tncm91bmRSZWN0OnFHZSxpbnNlcnRBcnJvd0hlYWQ6aWluLGluc2VydEFycm93RmlsbGVkSGVhZDpzaW4saW5zZXJ0U2VxdWVuY2VOdW1iZXI6YWluLGluc2VydEFycm93Q3Jvc3NIZWFkOm9pbixpbnNlcnREYXRhYmFzZUljb246dGluLGluc2VydENvbXB1dGVySWNvbjpuaW4saW5zZXJ0Q2xvY2tJY29uOnJpbixnZXRUZXh0T2JqOkhHZSxnZXROb3RlUmVjdDpjaW4sZml4TGlmZUxpbmVIZWlnaHRzOnpHZSxzYW5pdGl6ZVVybDpwOS5zYW5pdGl6ZVVybH07bGV0IEVuPXt9O2NvbnN0IG5pPXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGFjdGl2YXRpb25zOltdLG1vZGVsczp7Z2V0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsdGhpcy5hY3RvcnMubGVuZ3RoPT09MD9bMF06dGhpcy5hY3RvcnMubWFwKGk9PmkuaGVpZ2h0fHwwKSkrKHRoaXMubG9vcHMubGVuZ3RoPT09MD8wOnRoaXMubG9vcHMubWFwKGk9PmkuaGVpZ2h0fHwwKS5yZWR1Y2UoKGkscyk9PmkrcykpKyh0aGlzLm1lc3NhZ2VzLmxlbmd0aD09PTA/MDp0aGlzLm1lc3NhZ2VzLm1hcChpPT5pLmhlaWdodHx8MCkucmVkdWNlKChpLHMpPT5pK3MpKSsodGhpcy5ub3Rlcy5sZW5ndGg9PT0wPzA6dGhpcy5ub3Rlcy5tYXAoaT0+aS5oZWlnaHR8fDApLnJlZHVjZSgoaSxzKT0+aStzKSl9LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5hY3RvcnM9W10sdGhpcy5ib3hlcz1bXSx0aGlzLmxvb3BzPVtdLHRoaXMubWVzc2FnZXM9W10sdGhpcy5ub3Rlcz1bXX0sYWRkQm94OmZ1bmN0aW9uKGkpe3RoaXMuYm94ZXMucHVzaChpKX0sYWRkQWN0b3I6ZnVuY3Rpb24oaSl7dGhpcy5hY3RvcnMucHVzaChpKX0sYWRkTG9vcDpmdW5jdGlvbihpKXt0aGlzLmxvb3BzLnB1c2goaSl9LGFkZE1lc3NhZ2U6ZnVuY3Rpb24oaSl7dGhpcy5tZXNzYWdlcy5wdXNoKGkpfSxhZGROb3RlOmZ1bmN0aW9uKGkpe3RoaXMubm90ZXMucHVzaChpKX0sbGFzdEFjdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0b3JzW3RoaXMuYWN0b3JzLmxlbmd0aC0xXX0sbGFzdExvb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb29wc1t0aGlzLmxvb3BzLmxlbmd0aC0xXX0sbGFzdE1lc3NhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlc1t0aGlzLm1lc3NhZ2VzLmxlbmd0aC0xXX0sbGFzdE5vdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3Rlc1t0aGlzLm5vdGVzLmxlbmd0aC0xXX0sYWN0b3JzOltdLGJveGVzOltdLGxvb3BzOltdLG1lc3NhZ2VzOltdLG5vdGVzOltdfSxpbml0OmZ1bmN0aW9uKCl7dGhpcy5zZXF1ZW5jZUl0ZW1zPVtdLHRoaXMuYWN0aXZhdGlvbnM9W10sdGhpcy5tb2RlbHMuY2xlYXIoKSx0aGlzLmRhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx0aGlzLnZlcnRpY2FsUG9zPTAsVUdlKHF0KCkpfSx1cGRhdGVWYWw6ZnVuY3Rpb24oaSxzLHUsZCl7aVtzXT09PXZvaWQgMD9pW3NdPXU6aVtzXT1kKHUsaVtzXSl9LHVwZGF0ZUJvdW5kczpmdW5jdGlvbihpLHMsdSxkKXtjb25zdCBwPXRoaXM7bGV0IHY9MDtmdW5jdGlvbiBiKHkpe3JldHVybiBmdW5jdGlvbihfKXt2Kys7Y29uc3QgQT1wLnNlcXVlbmNlSXRlbXMubGVuZ3RoLXYrMTtwLnVwZGF0ZVZhbChfLCJzdGFydHkiLHMtQSpFbi5ib3hNYXJnaW4sTWF0aC5taW4pLHAudXBkYXRlVmFsKF8sInN0b3B5IixkK0EqRW4uYm94TWFyZ2luLE1hdGgubWF4KSxwLnVwZGF0ZVZhbChuaS5kYXRhLCJzdGFydHgiLGktQSpFbi5ib3hNYXJnaW4sTWF0aC5taW4pLHAudXBkYXRlVmFsKG5pLmRhdGEsInN0b3B4Iix1K0EqRW4uYm94TWFyZ2luLE1hdGgubWF4KSx5IT09ImFjdGl2YXRpb24iJiYocC51cGRhdGVWYWwoXywic3RhcnR4IixpLUEqRW4uYm94TWFyZ2luLE1hdGgubWluKSxwLnVwZGF0ZVZhbChfLCJzdG9weCIsdStBKkVuLmJveE1hcmdpbixNYXRoLm1heCkscC51cGRhdGVWYWwobmkuZGF0YSwic3RhcnR5IixzLUEqRW4uYm94TWFyZ2luLE1hdGgubWluKSxwLnVwZGF0ZVZhbChuaS5kYXRhLCJzdG9weSIsZCtBKkVuLmJveE1hcmdpbixNYXRoLm1heCkpfX10aGlzLnNlcXVlbmNlSXRlbXMuZm9yRWFjaChiKCkpLHRoaXMuYWN0aXZhdGlvbnMuZm9yRWFjaChiKCJhY3RpdmF0aW9uIikpfSxpbnNlcnQ6ZnVuY3Rpb24oaSxzLHUsZCl7Y29uc3QgcD1jaS5nZXRNaW4oaSx1KSx2PWNpLmdldE1heChpLHUpLGI9Y2kuZ2V0TWluKHMsZCkseT1jaS5nZXRNYXgocyxkKTt0aGlzLnVwZGF0ZVZhbChuaS5kYXRhLCJzdGFydHgiLHAsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKG5pLmRhdGEsInN0YXJ0eSIsYixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwobmkuZGF0YSwic3RvcHgiLHYsTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKG5pLmRhdGEsInN0b3B5Iix5LE1hdGgubWF4KSx0aGlzLnVwZGF0ZUJvdW5kcyhwLGIsdix5KX0sbmV3QWN0aXZhdGlvbjpmdW5jdGlvbihpLHMsdSl7Y29uc3QgZD11W2kuZnJvbS5hY3Rvcl0scD1iSihpLmZyb20uYWN0b3IpLmxlbmd0aHx8MCx2PWQueCtkLndpZHRoLzIrKHAtMSkqRW4uYWN0aXZhdGlvbldpZHRoLzI7dGhpcy5hY3RpdmF0aW9ucy5wdXNoKHtzdGFydHg6dixzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcysyLHN0b3B4OnYrRW4uYWN0aXZhdGlvbldpZHRoLHN0b3B5OnZvaWQgMCxhY3RvcjppLmZyb20uYWN0b3IsYW5jaG9yZWQ6WmYuYW5jaG9yRWxlbWVudChzKX0pfSxlbmRBY3RpdmF0aW9uOmZ1bmN0aW9uKGkpe2NvbnN0IHM9dGhpcy5hY3RpdmF0aW9ucy5tYXAoZnVuY3Rpb24odSl7cmV0dXJuIHUuYWN0b3J9KS5sYXN0SW5kZXhPZihpLmZyb20uYWN0b3IpO3JldHVybiB0aGlzLmFjdGl2YXRpb25zLnNwbGljZShzLDEpWzBdfSxjcmVhdGVMb29wOmZ1bmN0aW9uKGk9e21lc3NhZ2U6dm9pZCAwLHdyYXA6ITEsd2lkdGg6dm9pZCAwfSxzKXtyZXR1cm57c3RhcnR4OnZvaWQgMCxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcyxzdG9weDp2b2lkIDAsc3RvcHk6dm9pZCAwLHRpdGxlOmkubWVzc2FnZSx3cmFwOmkud3JhcCx3aWR0aDppLndpZHRoLGhlaWdodDowLGZpbGw6c319LG5ld0xvb3A6ZnVuY3Rpb24oaT17bWVzc2FnZTp2b2lkIDAsd3JhcDohMSx3aWR0aDp2b2lkIDB9LHMpe3RoaXMuc2VxdWVuY2VJdGVtcy5wdXNoKHRoaXMuY3JlYXRlTG9vcChpLHMpKX0sZW5kTG9vcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlcXVlbmNlSXRlbXMucG9wKCl9LGlzTG9vcE92ZXJsYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXF1ZW5jZUl0ZW1zLmxlbmd0aD90aGlzLnNlcXVlbmNlSXRlbXNbdGhpcy5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC0xXS5vdmVybGFwOiExfSxhZGRTZWN0aW9uVG9Mb29wOmZ1bmN0aW9uKGkpe2NvbnN0IHM9dGhpcy5zZXF1ZW5jZUl0ZW1zLnBvcCgpO3Muc2VjdGlvbnM9cy5zZWN0aW9uc3x8W10scy5zZWN0aW9uVGl0bGVzPXMuc2VjdGlvblRpdGxlc3x8W10scy5zZWN0aW9ucy5wdXNoKHt5Om5pLmdldFZlcnRpY2FsUG9zKCksaGVpZ2h0OjB9KSxzLnNlY3Rpb25UaXRsZXMucHVzaChpKSx0aGlzLnNlcXVlbmNlSXRlbXMucHVzaChzKX0sc2F2ZVZlcnRpY2FsUG9zOmZ1bmN0aW9uKCl7dGhpcy5pc0xvb3BPdmVybGFwKCkmJih0aGlzLnNhdmVkVmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcyl9LHJlc2V0VmVydGljYWxQb3M6ZnVuY3Rpb24oKXt0aGlzLmlzTG9vcE92ZXJsYXAoKSYmKHRoaXMudmVydGljYWxQb3M9dGhpcy5zYXZlZFZlcnRpY2FsUG9zKX0sYnVtcFZlcnRpY2FsUG9zOmZ1bmN0aW9uKGkpe3RoaXMudmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcytpLHRoaXMuZGF0YS5zdG9weT1jaS5nZXRNYXgodGhpcy5kYXRhLnN0b3B5LHRoaXMudmVydGljYWxQb3MpfSxnZXRWZXJ0aWNhbFBvczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZlcnRpY2FsUG9zfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm57Ym91bmRzOnRoaXMuZGF0YSxtb2RlbHM6dGhpcy5tb2RlbHN9fX0sbGluPWFzeW5jIGZ1bmN0aW9uKGkscyl7bmkuYnVtcFZlcnRpY2FsUG9zKEVuLmJveE1hcmdpbikscy5oZWlnaHQ9RW4uYm94TWFyZ2luLHMuc3RhcnR5PW5pLmdldFZlcnRpY2FsUG9zKCk7Y29uc3QgdT1xQygpO3UueD1zLnN0YXJ0eCx1Lnk9cy5zdGFydHksdS53aWR0aD1zLndpZHRofHxFbi53aWR0aCx1LmNsYXNzPSJub3RlIjtjb25zdCBkPWkuYXBwZW5kKCJnIikscD1aZi5kcmF3UmVjdChkLHUpLHY9emJlKCk7di54PXMuc3RhcnR4LHYueT1zLnN0YXJ0eSx2LndpZHRoPXUud2lkdGgsdi5keT0iMWVtIix2LnRleHQ9cy5tZXNzYWdlLHYuY2xhc3M9Im5vdGVUZXh0Iix2LmZvbnRGYW1pbHk9RW4ubm90ZUZvbnRGYW1pbHksdi5mb250U2l6ZT1Fbi5ub3RlRm9udFNpemUsdi5mb250V2VpZ2h0PUVuLm5vdGVGb250V2VpZ2h0LHYuYW5jaG9yPUVuLm5vdGVBbGlnbix2LnRleHRNYXJnaW49RW4ubm90ZU1hcmdpbix2LnZhbGlnbj0iY2VudGVyIjtjb25zdCBiPUR2KHYudGV4dCk/YXdhaXQgcEooZCx2KTpZRChkLHYpLHk9TWF0aC5yb3VuZChiLm1hcChUPT4oVC5fZ3JvdXBzfHxUKVswXVswXS5nZXRCQm94KCkuaGVpZ2h0KS5yZWR1Y2UoKFQsXyk9PlQrXykpO3AuYXR0cigiaGVpZ2h0Iix5KzIqRW4ubm90ZU1hcmdpbikscy5oZWlnaHQrPXkrMipFbi5ub3RlTWFyZ2luLG5pLmJ1bXBWZXJ0aWNhbFBvcyh5KzIqRW4ubm90ZU1hcmdpbikscy5zdG9weT1zLnN0YXJ0eSt5KzIqRW4ubm90ZU1hcmdpbixzLnN0b3B4PXMuc3RhcnR4K3Uud2lkdGgsbmkuaW5zZXJ0KHMuc3RhcnR4LHMuc3RhcnR5LHMuc3RvcHgscy5zdG9weSksbmkubW9kZWxzLmFkZE5vdGUocyl9LGVTPWk9Pih7Zm9udEZhbWlseTppLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOmkubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6aS5tZXNzYWdlRm9udFdlaWdodH0pLFhEPWk9Pih7Zm9udEZhbWlseTppLm5vdGVGb250RmFtaWx5LGZvbnRTaXplOmkubm90ZUZvbnRTaXplLGZvbnRXZWlnaHQ6aS5ub3RlRm9udFdlaWdodH0pLEN2ZT1pPT4oe2ZvbnRGYW1pbHk6aS5hY3RvckZvbnRGYW1pbHksZm9udFNpemU6aS5hY3RvckZvbnRTaXplLGZvbnRXZWlnaHQ6aS5hY3RvckZvbnRXZWlnaHR9KTthc3luYyBmdW5jdGlvbiBoaW4oaSxzKXtuaS5idW1wVmVydGljYWxQb3MoMTApO2NvbnN0e3N0YXJ0eDp1LHN0b3B4OmQsbWVzc2FnZTpwfT1zLHY9Y2kuc3BsaXRCcmVha3MocCkubGVuZ3RoLGI9RHYocCkseT1iP2F3YWl0IEhGKHAscXQoKSk6QW8uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMocCxlUyhFbikpO2lmKCFiKXtjb25zdCBQPXkuaGVpZ2h0L3Y7cy5oZWlnaHQrPVAsbmkuYnVtcFZlcnRpY2FsUG9zKFApfWxldCBULF89eS5oZWlnaHQtMTA7Y29uc3QgQT15LndpZHRoO2lmKHU9PT1kKXtUPW5pLmdldFZlcnRpY2FsUG9zKCkrXyxFbi5yaWdodEFuZ2xlc3x8KF8rPUVuLmJveE1hcmdpbixUPW5pLmdldFZlcnRpY2FsUG9zKCkrXyksXys9MzA7Y29uc3QgUD1jaS5nZXRNYXgoQS8yLEVuLndpZHRoLzIpO25pLmluc2VydCh1LVAsbmkuZ2V0VmVydGljYWxQb3MoKS0xMCtfLGQrUCxuaS5nZXRWZXJ0aWNhbFBvcygpKzMwK18pfWVsc2UgXys9RW4uYm94TWFyZ2luLFQ9bmkuZ2V0VmVydGljYWxQb3MoKStfLG5pLmluc2VydCh1LFQtMTAsZCxUKTtyZXR1cm4gbmkuYnVtcFZlcnRpY2FsUG9zKF8pLHMuaGVpZ2h0Kz1fLHMuc3RvcHk9cy5zdGFydHkrcy5oZWlnaHQsbmkuaW5zZXJ0KHMuZnJvbUJvdW5kcyxzLnN0YXJ0eSxzLnRvQm91bmRzLHMuc3RvcHkpLFR9Y29uc3QgZmluPWFzeW5jIGZ1bmN0aW9uKGkscyx1LGQpe2NvbnN0e3N0YXJ0eDpwLHN0b3B4OnYsc3RhcnR5OmIsbWVzc2FnZTp5LHR5cGU6VCxzZXF1ZW5jZUluZGV4Ol8sc2VxdWVuY2VWaXNpYmxlOkF9PXMsUD1Bby5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh5LGVTKEVuKSksUj16YmUoKTtSLng9cCxSLnk9YisxMCxSLndpZHRoPXYtcCxSLmNsYXNzPSJtZXNzYWdlVGV4dCIsUi5keT0iMWVtIixSLnRleHQ9eSxSLmZvbnRGYW1pbHk9RW4ubWVzc2FnZUZvbnRGYW1pbHksUi5mb250U2l6ZT1Fbi5tZXNzYWdlRm9udFNpemUsUi5mb250V2VpZ2h0PUVuLm1lc3NhZ2VGb250V2VpZ2h0LFIuYW5jaG9yPUVuLm1lc3NhZ2VBbGlnbixSLnZhbGlnbj0iY2VudGVyIixSLnRleHRNYXJnaW49RW4ud3JhcFBhZGRpbmcsUi50c3Bhbj0hMSxEdihSLnRleHQpP2F3YWl0IHBKKGksUix7c3RhcnR4OnAsc3RvcHg6dixzdGFydHk6dX0pOllEKGksUik7Y29uc3QgRj1QLndpZHRoO2xldCBqO3A9PT12P0VuLnJpZ2h0QW5nbGVzP2o9aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixgTSAgJHtwfSwke3V9IEggJHtwK2NpLmdldE1heChFbi53aWR0aC8yLEYvMil9IFYgJHt1KzI1fSBIICR7cH1gKTpqPWkuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gIitwKyIsIit1KyIgQyAiKyhwKzYwKSsiLCIrKHUtMTApKyIgIisocCs2MCkrIiwiKyh1KzMwKSsiICIrcCsiLCIrKHUrMjApKTooaj1pLmFwcGVuZCgibGluZSIpLGouYXR0cigieDEiLHApLGouYXR0cigieTEiLHUpLGouYXR0cigieDIiLHYpLGouYXR0cigieTIiLHUpKSxUPT09ZC5kYi5MSU5FVFlQRS5ET1RURUR8fFQ9PT1kLmRiLkxJTkVUWVBFLkRPVFRFRF9DUk9TU3x8VD09PWQuZGIuTElORVRZUEUuRE9UVEVEX1BPSU5UfHxUPT09ZC5kYi5MSU5FVFlQRS5ET1RURURfT1BFTj8oai5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjMsIDMiKSxqLmF0dHIoImNsYXNzIiwibWVzc2FnZUxpbmUxIikpOmouYXR0cigiY2xhc3MiLCJtZXNzYWdlTGluZTAiKTtsZXQgSz0iIjtFbi5hcnJvd01hcmtlckFic29sdXRlJiYoSz13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxLPUsucmVwbGFjZSgvXCgvZywiXFwoIiksSz1LLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxqLmF0dHIoInN0cm9rZS13aWR0aCIsMiksai5hdHRyKCJzdHJva2UiLCJub25lIiksai5zdHlsZSgiZmlsbCIsIm5vbmUiKSwoVD09PWQuZGIuTElORVRZUEUuU09MSUR8fFQ9PT1kLmRiLkxJTkVUWVBFLkRPVFRFRCkmJmouYXR0cigibWFya2VyLWVuZCIsInVybCgiK0srIiNhcnJvd2hlYWQpIiksKFQ9PT1kLmRiLkxJTkVUWVBFLlNPTElEX1BPSU5UfHxUPT09ZC5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlQpJiZqLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitLKyIjZmlsbGVkLWhlYWQpIiksKFQ9PT1kLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTfHxUPT09ZC5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1MpJiZqLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitLKyIjY3Jvc3NoZWFkKSIpLChBfHxFbi5zaG93U2VxdWVuY2VOdW1iZXJzKSYmKGouYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrSysiI3NlcXVlbmNlbnVtYmVyKSIpLGkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscCkuYXR0cigieSIsdSs0KS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJmb250LXNpemUiLCIxMnB4IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJjbGFzcyIsInNlcXVlbmNlTnVtYmVyIikudGV4dChfKSl9LGRpbj1hc3luYyBmdW5jdGlvbihpLHMsdSxkLHAsdixiKXtsZXQgeT0wLFQ9MCxfLEE9MDtmb3IoY29uc3QgUCBvZiBkKXtjb25zdCBSPXNbUF0sRj1SLmJveDtfJiZfIT1GJiYoYnx8bmkubW9kZWxzLmFkZEJveChfKSxUKz1Fbi5ib3hNYXJnaW4rXy5tYXJnaW4pLEYmJkYhPV8mJihifHwoRi54PXkrVCxGLnk9cCksVCs9Ri5tYXJnaW4pLFIud2lkdGg9Ui53aWR0aHx8RW4ud2lkdGgsUi5oZWlnaHQ9Y2kuZ2V0TWF4KFIuaGVpZ2h0fHxFbi5oZWlnaHQsRW4uaGVpZ2h0KSxSLm1hcmdpbj1SLm1hcmdpbnx8RW4uYWN0b3JNYXJnaW4sQT1jaS5nZXRNYXgoQSxSLmhlaWdodCksdVtSLm5hbWVdJiYoVCs9Ui53aWR0aC8yKSxSLng9eStULFIuc3RhcnR5PW5pLmdldFZlcnRpY2FsUG9zKCksbmkuaW5zZXJ0KFIueCxwLFIueCtSLndpZHRoLFIuaGVpZ2h0KSx5Kz1SLndpZHRoK1QsUi5ib3gmJihSLmJveC53aWR0aD15K0YubWFyZ2luLVIuYm94LngpLFQ9Ui5tYXJnaW4sXz1SLmJveCxuaS5tb2RlbHMuYWRkQWN0b3IoUil9XyYmIWImJm5pLm1vZGVscy5hZGRCb3goXyksbmkuYnVtcFZlcnRpY2FsUG9zKEEpfSxTdmU9YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCl7aWYoZCl7bGV0IHA9MDtuaS5idW1wVmVydGljYWxQb3MoRW4uYm94TWFyZ2luKjIpO2Zvcihjb25zdCB2IG9mIHUpe2NvbnN0IGI9c1t2XTtiLnN0b3B5fHwoYi5zdG9weT1uaS5nZXRWZXJ0aWNhbFBvcygpKTtjb25zdCB5PWF3YWl0IFpmLmRyYXdBY3RvcihpLGIsRW4sITApO3A9Y2kuZ2V0TWF4KHAseSl9bmkuYnVtcFZlcnRpY2FsUG9zKHArRW4uYm94TWFyZ2luKX1lbHNlIGZvcihjb25zdCBwIG9mIHUpe2NvbnN0IHY9c1twXTthd2FpdCBaZi5kcmF3QWN0b3IoaSx2LEVuLCExKX19LFZHZT1mdW5jdGlvbihpLHMsdSxkKXtsZXQgcD0wLHY9MDtmb3IoY29uc3QgYiBvZiB1KXtjb25zdCB5PXNbYl0sVD1taW4oeSksXz1aZi5kcmF3UG9wdXAoaSx5LFQsRW4sRW4uZm9yY2VNZW51cyxkKTtfLmhlaWdodD5wJiYocD1fLmhlaWdodCksXy53aWR0aCt5Lng+diYmKHY9Xy53aWR0aCt5LngpfXJldHVybnttYXhIZWlnaHQ6cCxtYXhXaWR0aDp2fX0sVUdlPWZ1bmN0aW9uKGkpe2lkKEVuLGkpLGkuZm9udEZhbWlseSYmKEVuLmFjdG9yRm9udEZhbWlseT1Fbi5ub3RlRm9udEZhbWlseT1Fbi5tZXNzYWdlRm9udEZhbWlseT1pLmZvbnRGYW1pbHkpLGkuZm9udFNpemUmJihFbi5hY3RvckZvbnRTaXplPUVuLm5vdGVGb250U2l6ZT1Fbi5tZXNzYWdlRm9udFNpemU9aS5mb250U2l6ZSksaS5mb250V2VpZ2h0JiYoRW4uYWN0b3JGb250V2VpZ2h0PUVuLm5vdGVGb250V2VpZ2h0PUVuLm1lc3NhZ2VGb250V2VpZ2h0PWkuZm9udFdlaWdodCl9LGJKPWZ1bmN0aW9uKGkpe3JldHVybiBuaS5hY3RpdmF0aW9ucy5maWx0ZXIoZnVuY3Rpb24ocyl7cmV0dXJuIHMuYWN0b3I9PT1pfSl9LEdHZT1mdW5jdGlvbihpLHMpe2NvbnN0IHU9c1tpXSxkPWJKKGkpLHA9ZC5yZWR1Y2UoZnVuY3Rpb24oYix5KXtyZXR1cm4gY2kuZ2V0TWluKGIseS5zdGFydHgpfSx1LngrdS53aWR0aC8yLTEpLHY9ZC5yZWR1Y2UoZnVuY3Rpb24oYix5KXtyZXR1cm4gY2kuZ2V0TWF4KGIseS5zdG9weCl9LHUueCt1LndpZHRoLzIrMSk7cmV0dXJuW3Asdl19O2Z1bmN0aW9uIGE1KGkscyx1LGQscCl7bmkuYnVtcFZlcnRpY2FsUG9zKHUpO2xldCB2PWQ7aWYocy5pZCYmcy5tZXNzYWdlJiZpW3MuaWRdKXtjb25zdCBiPWlbcy5pZF0ud2lkdGgseT1lUyhFbik7cy5tZXNzYWdlPUFvLndyYXBMYWJlbChgWyR7cy5tZXNzYWdlfV1gLGItMipFbi53cmFwUGFkZGluZyx5KSxzLndpZHRoPWIscy53cmFwPSEwO2NvbnN0IFQ9QW8uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMocy5tZXNzYWdlLHkpLF89Y2kuZ2V0TWF4KFQuaGVpZ2h0LEVuLmxhYmVsQm94SGVpZ2h0KTt2PWQrXyxYZS5kZWJ1ZyhgJHtffSAtICR7cy5tZXNzYWdlfWApfXAocyksbmkuYnVtcFZlcnRpY2FsUG9zKHYpfWZ1bmN0aW9uIGdpbihpLHMsdSxkLHAsdixiKXtmdW5jdGlvbiB5KF8sQSl7Xy54PHBbaS5mcm9tXS54PyhuaS5pbnNlcnQocy5zdG9weC1BLHMuc3RhcnR5LHMuc3RhcnR4LHMuc3RvcHkrXy5oZWlnaHQvMitFbi5ub3RlTWFyZ2luKSxzLnN0b3B4PXMuc3RvcHgrQSk6KG5pLmluc2VydChzLnN0YXJ0eCxzLnN0YXJ0eSxzLnN0b3B4K0Escy5zdG9weStfLmhlaWdodC8yK0VuLm5vdGVNYXJnaW4pLHMuc3RvcHg9cy5zdG9weC1BKX1mdW5jdGlvbiBUKF8sQSl7Xy54PHBbaS50b10ueD8obmkuaW5zZXJ0KHMuc3RhcnR4LUEscy5zdGFydHkscy5zdG9weCxzLnN0b3B5K18uaGVpZ2h0LzIrRW4ubm90ZU1hcmdpbikscy5zdGFydHg9cy5zdGFydHgrQSk6KG5pLmluc2VydChzLnN0b3B4LHMuc3RhcnR5LHMuc3RhcnR4K0Escy5zdG9weStfLmhlaWdodC8yK0VuLm5vdGVNYXJnaW4pLHMuc3RhcnR4PXMuc3RhcnR4LUEpfWlmKHZbaS50b109PWQpe2NvbnN0IF89cFtpLnRvXSxBPV8udHlwZT09ImFjdG9yIj9aQy8yKzM6Xy53aWR0aC8yKzM7eShfLEEpLF8uc3RhcnR5PXUtXy5oZWlnaHQvMixuaS5idW1wVmVydGljYWxQb3MoXy5oZWlnaHQvMil9ZWxzZSBpZihiW2kuZnJvbV09PWQpe2NvbnN0IF89cFtpLmZyb21dO2lmKEVuLm1pcnJvckFjdG9ycyl7Y29uc3QgQT1fLnR5cGU9PSJhY3RvciI/WkMvMjpfLndpZHRoLzI7VChfLEEpfV8uc3RvcHk9dS1fLmhlaWdodC8yLG5pLmJ1bXBWZXJ0aWNhbFBvcyhfLmhlaWdodC8yKX1lbHNlIGlmKGJbaS50b109PWQpe2NvbnN0IF89cFtpLnRvXTtpZihFbi5taXJyb3JBY3RvcnMpe2NvbnN0IEE9Xy50eXBlPT0iYWN0b3IiP1pDLzIrMzpfLndpZHRoLzIrMzt5KF8sQSl9Xy5zdG9weT11LV8uaGVpZ2h0LzIsbmkuYnVtcFZlcnRpY2FsUG9zKF8uaGVpZ2h0LzIpfX1jb25zdCBwaW49YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCl7Y29uc3R7c2VjdXJpdHlMZXZlbDpwLHNlcXVlbmNlOnZ9PXF0KCk7RW49djtsZXQgYjtwPT09InNhbmRib3giJiYoYj1JcigiI2kiK3MpKTtjb25zdCB5PUlyKHA9PT0ic2FuZGJveCI/Yi5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksVD1wPT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQ7bmkuaW5pdCgpLFhlLmRlYnVnKGQuZGIpO2NvbnN0IF89cD09PSJzYW5kYm94Ij95LnNlbGVjdChgW2lkPSIke3N9Il1gKTpJcihgW2lkPSIke3N9Il1gKSxBPWQuZGIuZ2V0QWN0b3JzKCksUD1kLmRiLmdldENyZWF0ZWRBY3RvcnMoKSxSPWQuZGIuZ2V0RGVzdHJveWVkQWN0b3JzKCksRj1kLmRiLmdldEJveGVzKCk7bGV0IGo9ZC5kYi5nZXRBY3RvcktleXMoKTtjb25zdCBLPWQuZGIuZ2V0TWVzc2FnZXMoKSxlZT1kLmRiLmdldERpYWdyYW1UaXRsZSgpLGllPWQuZGIuaGFzQXRMZWFzdE9uZUJveCgpLG9lPWQuZGIuaGFzQXRMZWFzdE9uZUJveFdpdGhUaXRsZSgpLHBlPWF3YWl0IGJpbihBLEssZCk7aWYoRW4uaGVpZ2h0PWF3YWl0IHZpbihBLHBlLEYpLFpmLmluc2VydENvbXB1dGVySWNvbihfKSxaZi5pbnNlcnREYXRhYmFzZUljb24oXyksWmYuaW5zZXJ0Q2xvY2tJY29uKF8pLGllJiYobmkuYnVtcFZlcnRpY2FsUG9zKEVuLmJveE1hcmdpbiksb2UmJm5pLmJ1bXBWZXJ0aWNhbFBvcyhGWzBdLnRleHRNYXhIZWlnaHQpKSxFbi5oaWRlVW51c2VkUGFydGljaXBhbnRzPT09ITApe2NvbnN0IFNlPW5ldyBTZXQ7Sy5mb3JFYWNoKENlPT57U2UuYWRkKENlLmZyb20pLFNlLmFkZChDZS50byl9KSxqPWouZmlsdGVyKENlPT5TZS5oYXMoQ2UpKX1hd2FpdCBkaW4oXyxBLFAsaiwwLEssITEpO2NvbnN0IGJlPWF3YWl0IHhpbihLLEEscGUsZCk7WmYuaW5zZXJ0QXJyb3dIZWFkKF8pLFpmLmluc2VydEFycm93Q3Jvc3NIZWFkKF8pLFpmLmluc2VydEFycm93RmlsbGVkSGVhZChfKSxaZi5pbnNlcnRTZXF1ZW5jZU51bWJlcihfKTtmdW5jdGlvbiBhZShTZSxDZSl7Y29uc3Qga2U9bmkuZW5kQWN0aXZhdGlvbihTZSk7a2Uuc3RhcnR5KzE4PkNlJiYoa2Uuc3RhcnR5PUNlLTYsQ2UrPTEyKSxaZi5kcmF3QWN0aXZhdGlvbihfLGtlLENlLEVuLGJKKFNlLmZyb20uYWN0b3IpLmxlbmd0aCksbmkuaW5zZXJ0KGtlLnN0YXJ0eCxDZS0xMCxrZS5zdG9weCxDZSl9bGV0IG5lPTEsc2U9MTtjb25zdCBkZT1bXSxYPVtdO2xldCBnZT0wO2Zvcihjb25zdCBTZSBvZiBLKXtsZXQgQ2Usa2UsS2U7c3dpdGNoKFNlLnR5cGUpe2Nhc2UgZC5kYi5MSU5FVFlQRS5OT1RFOm5pLnJlc2V0VmVydGljYWxQb3MoKSxrZT1TZS5ub3RlTW9kZWwsYXdhaXQgbGluKF8sa2UpO2JyZWFrO2Nhc2UgZC5kYi5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQ6bmkubmV3QWN0aXZhdGlvbihTZSxfLEEpO2JyZWFrO2Nhc2UgZC5kYi5MSU5FVFlQRS5BQ1RJVkVfRU5EOmFlKFNlLG5pLmdldFZlcnRpY2FsUG9zKCkpO2JyZWFrO2Nhc2UgZC5kYi5MSU5FVFlQRS5MT09QX1NUQVJUOmE1KGJlLFNlLEVuLmJveE1hcmdpbixFbi5ib3hNYXJnaW4rRW4uYm94VGV4dE1hcmdpbixGdD0+bmkubmV3TG9vcChGdCkpO2JyZWFrO2Nhc2UgZC5kYi5MSU5FVFlQRS5MT09QX0VORDpDZT1uaS5lbmRMb29wKCksYXdhaXQgWmYuZHJhd0xvb3AoXyxDZSwibG9vcCIsRW4pLG5pLmJ1bXBWZXJ0aWNhbFBvcyhDZS5zdG9weS1uaS5nZXRWZXJ0aWNhbFBvcygpKSxuaS5tb2RlbHMuYWRkTG9vcChDZSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLlJFQ1RfU1RBUlQ6YTUoYmUsU2UsRW4uYm94TWFyZ2luLEVuLmJveE1hcmdpbixGdD0+bmkubmV3TG9vcCh2b2lkIDAsRnQubWVzc2FnZSkpO2JyZWFrO2Nhc2UgZC5kYi5MSU5FVFlQRS5SRUNUX0VORDpDZT1uaS5lbmRMb29wKCksWC5wdXNoKENlKSxuaS5tb2RlbHMuYWRkTG9vcChDZSksbmkuYnVtcFZlcnRpY2FsUG9zKENlLnN0b3B5LW5pLmdldFZlcnRpY2FsUG9zKCkpO2JyZWFrO2Nhc2UgZC5kYi5MSU5FVFlQRS5PUFRfU1RBUlQ6YTUoYmUsU2UsRW4uYm94TWFyZ2luLEVuLmJveE1hcmdpbitFbi5ib3hUZXh0TWFyZ2luLEZ0PT5uaS5uZXdMb29wKEZ0KSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLk9QVF9FTkQ6Q2U9bmkuZW5kTG9vcCgpLGF3YWl0IFpmLmRyYXdMb29wKF8sQ2UsIm9wdCIsRW4pLG5pLmJ1bXBWZXJ0aWNhbFBvcyhDZS5zdG9weS1uaS5nZXRWZXJ0aWNhbFBvcygpKSxuaS5tb2RlbHMuYWRkTG9vcChDZSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkFMVF9TVEFSVDphNShiZSxTZSxFbi5ib3hNYXJnaW4sRW4uYm94TWFyZ2luK0VuLmJveFRleHRNYXJnaW4sRnQ9Pm5pLm5ld0xvb3AoRnQpKTticmVhaztjYXNlIGQuZGIuTElORVRZUEUuQUxUX0VMU0U6YTUoYmUsU2UsRW4uYm94TWFyZ2luK0VuLmJveFRleHRNYXJnaW4sRW4uYm94TWFyZ2luLEZ0PT5uaS5hZGRTZWN0aW9uVG9Mb29wKEZ0KSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkFMVF9FTkQ6Q2U9bmkuZW5kTG9vcCgpLGF3YWl0IFpmLmRyYXdMb29wKF8sQ2UsImFsdCIsRW4pLG5pLmJ1bXBWZXJ0aWNhbFBvcyhDZS5zdG9weS1uaS5nZXRWZXJ0aWNhbFBvcygpKSxuaS5tb2RlbHMuYWRkTG9vcChDZSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLlBBUl9TVEFSVDpjYXNlIGQuZGIuTElORVRZUEUuUEFSX09WRVJfU1RBUlQ6YTUoYmUsU2UsRW4uYm94TWFyZ2luLEVuLmJveE1hcmdpbitFbi5ib3hUZXh0TWFyZ2luLEZ0PT5uaS5uZXdMb29wKEZ0KSksbmkuc2F2ZVZlcnRpY2FsUG9zKCk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLlBBUl9BTkQ6YTUoYmUsU2UsRW4uYm94TWFyZ2luK0VuLmJveFRleHRNYXJnaW4sRW4uYm94TWFyZ2luLEZ0PT5uaS5hZGRTZWN0aW9uVG9Mb29wKEZ0KSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLlBBUl9FTkQ6Q2U9bmkuZW5kTG9vcCgpLGF3YWl0IFpmLmRyYXdMb29wKF8sQ2UsInBhciIsRW4pLG5pLmJ1bXBWZXJ0aWNhbFBvcyhDZS5zdG9weS1uaS5nZXRWZXJ0aWNhbFBvcygpKSxuaS5tb2RlbHMuYWRkTG9vcChDZSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkFVVE9OVU1CRVI6bmU9U2UubWVzc2FnZS5zdGFydHx8bmUsc2U9U2UubWVzc2FnZS5zdGVwfHxzZSxTZS5tZXNzYWdlLnZpc2libGU/ZC5kYi5lbmFibGVTZXF1ZW5jZU51bWJlcnMoKTpkLmRiLmRpc2FibGVTZXF1ZW5jZU51bWJlcnMoKTticmVhaztjYXNlIGQuZGIuTElORVRZUEUuQ1JJVElDQUxfU1RBUlQ6YTUoYmUsU2UsRW4uYm94TWFyZ2luLEVuLmJveE1hcmdpbitFbi5ib3hUZXh0TWFyZ2luLEZ0PT5uaS5uZXdMb29wKEZ0KSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX09QVElPTjphNShiZSxTZSxFbi5ib3hNYXJnaW4rRW4uYm94VGV4dE1hcmdpbixFbi5ib3hNYXJnaW4sRnQ9Pm5pLmFkZFNlY3Rpb25Ub0xvb3AoRnQpKTticmVhaztjYXNlIGQuZGIuTElORVRZUEUuQ1JJVElDQUxfRU5EOkNlPW5pLmVuZExvb3AoKSxhd2FpdCBaZi5kcmF3TG9vcChfLENlLCJjcml0aWNhbCIsRW4pLG5pLmJ1bXBWZXJ0aWNhbFBvcyhDZS5zdG9weS1uaS5nZXRWZXJ0aWNhbFBvcygpKSxuaS5tb2RlbHMuYWRkTG9vcChDZSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkJSRUFLX1NUQVJUOmE1KGJlLFNlLEVuLmJveE1hcmdpbixFbi5ib3hNYXJnaW4rRW4uYm94VGV4dE1hcmdpbixGdD0+bmkubmV3TG9vcChGdCkpO2JyZWFrO2Nhc2UgZC5kYi5MSU5FVFlQRS5CUkVBS19FTkQ6Q2U9bmkuZW5kTG9vcCgpLGF3YWl0IFpmLmRyYXdMb29wKF8sQ2UsImJyZWFrIixFbiksbmkuYnVtcFZlcnRpY2FsUG9zKENlLnN0b3B5LW5pLmdldFZlcnRpY2FsUG9zKCkpLG5pLm1vZGVscy5hZGRMb29wKENlKTticmVhaztkZWZhdWx0OnRyeXtLZT1TZS5tc2dNb2RlbCxLZS5zdGFydHk9bmkuZ2V0VmVydGljYWxQb3MoKSxLZS5zZXF1ZW5jZUluZGV4PW5lLEtlLnNlcXVlbmNlVmlzaWJsZT1kLmRiLnNob3dTZXF1ZW5jZU51bWJlcnMoKTtjb25zdCBGdD1hd2FpdCBoaW4oXyxLZSk7Z2luKFNlLEtlLEZ0LGdlLEEsUCxSKSxkZS5wdXNoKHttZXNzYWdlTW9kZWw6S2UsbGluZVN0YXJ0WTpGdH0pLG5pLm1vZGVscy5hZGRNZXNzYWdlKEtlKX1jYXRjaChGdCl7WGUuZXJyb3IoImVycm9yIHdoaWxlIGRyYXdpbmcgbWVzc2FnZSIsRnQpfX1bZC5kYi5MSU5FVFlQRS5TT0xJRF9PUEVOLGQuZGIuTElORVRZUEUuRE9UVEVEX09QRU4sZC5kYi5MSU5FVFlQRS5TT0xJRCxkLmRiLkxJTkVUWVBFLkRPVFRFRCxkLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTLGQuZGIuTElORVRZUEUuRE9UVEVEX0NST1NTLGQuZGIuTElORVRZUEUuU09MSURfUE9JTlQsZC5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlRdLmluY2x1ZGVzKFNlLnR5cGUpJiYobmU9bmUrc2UpLGdlKyt9WGUuZGVidWcoImNyZWF0ZWRBY3RvcnMiLFApLFhlLmRlYnVnKCJkZXN0cm95ZWRBY3RvcnMiLFIpLGF3YWl0IFN2ZShfLEEsaiwhMSk7Zm9yKGNvbnN0IFNlIG9mIGRlKWF3YWl0IGZpbihfLFNlLm1lc3NhZ2VNb2RlbCxTZS5saW5lU3RhcnRZLGQpO0VuLm1pcnJvckFjdG9ycyYmYXdhaXQgU3ZlKF8sQSxqLCEwKSxYLmZvckVhY2goU2U9PlpmLmRyYXdCYWNrZ3JvdW5kUmVjdChfLFNlKSksekdlKF8sQSxqLEVuKTtmb3IoY29uc3QgU2Ugb2YgbmkubW9kZWxzLmJveGVzKVNlLmhlaWdodD1uaS5nZXRWZXJ0aWNhbFBvcygpLVNlLnksbmkuaW5zZXJ0KFNlLngsU2UueSxTZS54K1NlLndpZHRoLFNlLmhlaWdodCksU2Uuc3RhcnR4PVNlLngsU2Uuc3RhcnR5PVNlLnksU2Uuc3RvcHg9U2Uuc3RhcnR4K1NlLndpZHRoLFNlLnN0b3B5PVNlLnN0YXJ0eStTZS5oZWlnaHQsU2Uuc3Ryb2tlPSJyZ2IoMCwwLDAsIDAuNSkiLGF3YWl0IFpmLmRyYXdCb3goXyxTZSxFbik7aWUmJm5pLmJ1bXBWZXJ0aWNhbFBvcyhFbi5ib3hNYXJnaW4pO2NvbnN0IFc9VkdlKF8sQSxqLFQpLHtib3VuZHM6eGV9PW5pLmdldEJvdW5kcygpO2xldCBVPXhlLnN0b3B5LXhlLnN0YXJ0eTtVPFcubWF4SGVpZ2h0JiYoVT1XLm1heEhlaWdodCk7bGV0IEZlPVUrMipFbi5kaWFncmFtTWFyZ2luWTtFbi5taXJyb3JBY3RvcnMmJihGZT1GZS1Fbi5ib3hNYXJnaW4rRW4uYm90dG9tTWFyZ2luQWRqKTtsZXQgUGU9eGUuc3RvcHgteGUuc3RhcnR4O1BlPFcubWF4V2lkdGgmJihQZT1XLm1heFdpZHRoKTtjb25zdCBqZT1QZSsyKkVuLmRpYWdyYW1NYXJnaW5YO2VlJiZfLmFwcGVuZCgidGV4dCIpLnRleHQoZWUpLmF0dHIoIngiLCh4ZS5zdG9weC14ZS5zdGFydHgpLzItMipFbi5kaWFncmFtTWFyZ2luWCkuYXR0cigieSIsLTI1KSxOZyhfLEZlLGplLEVuLnVzZU1heFdpZHRoKTtjb25zdCBJZT1lZT80MDowO18uYXR0cigidmlld0JveCIseGUuc3RhcnR4LUVuLmRpYWdyYW1NYXJnaW5YKyIgLSIrKEVuLmRpYWdyYW1NYXJnaW5ZK0llKSsiICIramUrIiAiKyhGZStJZSkpLFhlLmRlYnVnKCJtb2RlbHM6IixuaS5tb2RlbHMpfTthc3luYyBmdW5jdGlvbiBiaW4oaSxzLHUpe2NvbnN0IGQ9e307Zm9yKGNvbnN0IHAgb2YgcylpZihpW3AudG9dJiZpW3AuZnJvbV0pe2NvbnN0IHY9aVtwLnRvXTtpZihwLnBsYWNlbWVudD09PXUuZGIuUExBQ0VNRU5ULkxFRlRPRiYmIXYucHJldkFjdG9yfHxwLnBsYWNlbWVudD09PXUuZGIuUExBQ0VNRU5ULlJJR0hUT0YmJiF2Lm5leHRBY3Rvciljb250aW51ZTtjb25zdCBiPXAucGxhY2VtZW50IT09dm9pZCAwLHk9IWIsVD1iP1hEKEVuKTplUyhFbiksXz1wLndyYXA/QW8ud3JhcExhYmVsKHAubWVzc2FnZSxFbi53aWR0aC0yKkVuLndyYXBQYWRkaW5nLFQpOnAubWVzc2FnZSxQPShEdihfKT9hd2FpdCBIRihwLm1lc3NhZ2UscXQoKSk6QW8uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoXyxUKSkud2lkdGgrMipFbi53cmFwUGFkZGluZzt5JiZwLmZyb209PT12Lm5leHRBY3Rvcj9kW3AudG9dPWNpLmdldE1heChkW3AudG9dfHwwLFApOnkmJnAuZnJvbT09PXYucHJldkFjdG9yP2RbcC5mcm9tXT1jaS5nZXRNYXgoZFtwLmZyb21dfHwwLFApOnkmJnAuZnJvbT09PXAudG8/KGRbcC5mcm9tXT1jaS5nZXRNYXgoZFtwLmZyb21dfHwwLFAvMiksZFtwLnRvXT1jaS5nZXRNYXgoZFtwLnRvXXx8MCxQLzIpKTpwLnBsYWNlbWVudD09PXUuZGIuUExBQ0VNRU5ULlJJR0hUT0Y/ZFtwLmZyb21dPWNpLmdldE1heChkW3AuZnJvbV18fDAsUCk6cC5wbGFjZW1lbnQ9PT11LmRiLlBMQUNFTUVOVC5MRUZUT0Y/ZFt2LnByZXZBY3Rvcl09Y2kuZ2V0TWF4KGRbdi5wcmV2QWN0b3JdfHwwLFApOnAucGxhY2VtZW50PT09dS5kYi5QTEFDRU1FTlQuT1ZFUiYmKHYucHJldkFjdG9yJiYoZFt2LnByZXZBY3Rvcl09Y2kuZ2V0TWF4KGRbdi5wcmV2QWN0b3JdfHwwLFAvMikpLHYubmV4dEFjdG9yJiYoZFtwLmZyb21dPWNpLmdldE1heChkW3AuZnJvbV18fDAsUC8yKSkpfXJldHVybiBYZS5kZWJ1ZygibWF4TWVzc2FnZVdpZHRoUGVyQWN0b3I6IixkKSxkfWNvbnN0IG1pbj1mdW5jdGlvbihpKXtsZXQgcz0wO2NvbnN0IHU9Q3ZlKEVuKTtmb3IoY29uc3QgZCBpbiBpLmxpbmtzKXtjb25zdCB2PUFvLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGQsdSkud2lkdGgrMipFbi53cmFwUGFkZGluZysyKkVuLmJveE1hcmdpbjtzPHYmJihzPXYpfXJldHVybiBzfTthc3luYyBmdW5jdGlvbiB2aW4oaSxzLHUpe2xldCBkPTA7Zm9yKGNvbnN0IHYgb2YgT2JqZWN0LmtleXMoaSkpe2NvbnN0IGI9aVt2XTtiLndyYXAmJihiLmRlc2NyaXB0aW9uPUFvLndyYXBMYWJlbChiLmRlc2NyaXB0aW9uLEVuLndpZHRoLTIqRW4ud3JhcFBhZGRpbmcsQ3ZlKEVuKSkpO2NvbnN0IHk9RHYoYi5kZXNjcmlwdGlvbik/YXdhaXQgSEYoYi5kZXNjcmlwdGlvbixxdCgpKTpBby5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhiLmRlc2NyaXB0aW9uLEN2ZShFbikpO2Iud2lkdGg9Yi53cmFwP0VuLndpZHRoOmNpLmdldE1heChFbi53aWR0aCx5LndpZHRoKzIqRW4ud3JhcFBhZGRpbmcpLGIuaGVpZ2h0PWIud3JhcD9jaS5nZXRNYXgoeS5oZWlnaHQsRW4uaGVpZ2h0KTpFbi5oZWlnaHQsZD1jaS5nZXRNYXgoZCxiLmhlaWdodCl9Zm9yKGNvbnN0IHYgaW4gcyl7Y29uc3QgYj1pW3ZdO2lmKCFiKWNvbnRpbnVlO2NvbnN0IHk9aVtiLm5leHRBY3Rvcl07aWYoIXkpe2NvbnN0IFA9c1t2XStFbi5hY3Rvck1hcmdpbi1iLndpZHRoLzI7Yi5tYXJnaW49Y2kuZ2V0TWF4KFAsRW4uYWN0b3JNYXJnaW4pO2NvbnRpbnVlfWNvbnN0IF89c1t2XStFbi5hY3Rvck1hcmdpbi1iLndpZHRoLzIteS53aWR0aC8yO2IubWFyZ2luPWNpLmdldE1heChfLEVuLmFjdG9yTWFyZ2luKX1sZXQgcD0wO3JldHVybiB1LmZvckVhY2godj0+e2NvbnN0IGI9ZVMoRW4pO2xldCB5PXYuYWN0b3JLZXlzLnJlZHVjZSgoQSxQKT0+QSs9aVtQXS53aWR0aCsoaVtQXS5tYXJnaW58fDApLDApO3ktPTIqRW4uYm94VGV4dE1hcmdpbix2LndyYXAmJih2Lm5hbWU9QW8ud3JhcExhYmVsKHYubmFtZSx5LTIqRW4ud3JhcFBhZGRpbmcsYikpO2NvbnN0IFQ9QW8uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnModi5uYW1lLGIpO3A9Y2kuZ2V0TWF4KFQuaGVpZ2h0LHApO2NvbnN0IF89Y2kuZ2V0TWF4KHksVC53aWR0aCsyKkVuLndyYXBQYWRkaW5nKTtpZih2Lm1hcmdpbj1Fbi5ib3hUZXh0TWFyZ2luLHk8Xyl7Y29uc3QgQT0oXy15KS8yO3YubWFyZ2luKz1BfX0pLHUuZm9yRWFjaCh2PT52LnRleHRNYXhIZWlnaHQ9cCksY2kuZ2V0TWF4KGQsRW4uaGVpZ2h0KX1jb25zdCB3aW49YXN5bmMgZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9c1tpLmZyb21dLngscD1zW2kudG9dLngsdj1pLndyYXAmJmkubWVzc2FnZTtsZXQgYj1EdihpLm1lc3NhZ2UpP2F3YWl0IEhGKGkubWVzc2FnZSxxdCgpKTpBby5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh2P0FvLndyYXBMYWJlbChpLm1lc3NhZ2UsRW4ud2lkdGgsWEQoRW4pKTppLm1lc3NhZ2UsWEQoRW4pKTtjb25zdCB5PXt3aWR0aDp2P0VuLndpZHRoOmNpLmdldE1heChFbi53aWR0aCxiLndpZHRoKzIqRW4ubm90ZU1hcmdpbiksaGVpZ2h0OjAsc3RhcnR4OnNbaS5mcm9tXS54LHN0b3B4OjAsc3RhcnR5OjAsc3RvcHk6MCxtZXNzYWdlOmkubWVzc2FnZX07cmV0dXJuIGkucGxhY2VtZW50PT09dS5kYi5QTEFDRU1FTlQuUklHSFRPRj8oeS53aWR0aD12P2NpLmdldE1heChFbi53aWR0aCxiLndpZHRoKTpjaS5nZXRNYXgoc1tpLmZyb21dLndpZHRoLzIrc1tpLnRvXS53aWR0aC8yLGIud2lkdGgrMipFbi5ub3RlTWFyZ2luKSx5LnN0YXJ0eD1kKyhzW2kuZnJvbV0ud2lkdGgrRW4uYWN0b3JNYXJnaW4pLzIpOmkucGxhY2VtZW50PT09dS5kYi5QTEFDRU1FTlQuTEVGVE9GPyh5LndpZHRoPXY/Y2kuZ2V0TWF4KEVuLndpZHRoLGIud2lkdGgrMipFbi5ub3RlTWFyZ2luKTpjaS5nZXRNYXgoc1tpLmZyb21dLndpZHRoLzIrc1tpLnRvXS53aWR0aC8yLGIud2lkdGgrMipFbi5ub3RlTWFyZ2luKSx5LnN0YXJ0eD1kLXkud2lkdGgrKHNbaS5mcm9tXS53aWR0aC1Fbi5hY3Rvck1hcmdpbikvMik6aS50bz09PWkuZnJvbT8oYj1Bby5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh2P0FvLndyYXBMYWJlbChpLm1lc3NhZ2UsY2kuZ2V0TWF4KEVuLndpZHRoLHNbaS5mcm9tXS53aWR0aCksWEQoRW4pKTppLm1lc3NhZ2UsWEQoRW4pKSx5LndpZHRoPXY/Y2kuZ2V0TWF4KEVuLndpZHRoLHNbaS5mcm9tXS53aWR0aCk6Y2kuZ2V0TWF4KHNbaS5mcm9tXS53aWR0aCxFbi53aWR0aCxiLndpZHRoKzIqRW4ubm90ZU1hcmdpbikseS5zdGFydHg9ZCsoc1tpLmZyb21dLndpZHRoLXkud2lkdGgpLzIpOih5LndpZHRoPU1hdGguYWJzKGQrc1tpLmZyb21dLndpZHRoLzItKHArc1tpLnRvXS53aWR0aC8yKSkrRW4uYWN0b3JNYXJnaW4seS5zdGFydHg9ZDxwP2Qrc1tpLmZyb21dLndpZHRoLzItRW4uYWN0b3JNYXJnaW4vMjpwK3NbaS50b10ud2lkdGgvMi1Fbi5hY3Rvck1hcmdpbi8yKSx2JiYoeS5tZXNzYWdlPUFvLndyYXBMYWJlbChpLm1lc3NhZ2UseS53aWR0aC0yKkVuLndyYXBQYWRkaW5nLFhEKEVuKSkpLFhlLmRlYnVnKGBOTTpbJHt5LnN0YXJ0eH0sJHt5LnN0b3B4fSwke3kuc3RhcnR5fSwke3kuc3RvcHl9OiR7eS53aWR0aH0sJHt5LmhlaWdodH09JHtpLm1lc3NhZ2V9XWApLHl9LHlpbj1mdW5jdGlvbihpLHMsdSl7aWYoIVt1LmRiLkxJTkVUWVBFLlNPTElEX09QRU4sdS5kYi5MSU5FVFlQRS5ET1RURURfT1BFTix1LmRiLkxJTkVUWVBFLlNPTElELHUuZGIuTElORVRZUEUuRE9UVEVELHUuZGIuTElORVRZUEUuU09MSURfQ1JPU1MsdS5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1MsdS5kYi5MSU5FVFlQRS5TT0xJRF9QT0lOVCx1LmRiLkxJTkVUWVBFLkRPVFRFRF9QT0lOVF0uaW5jbHVkZXMoaS50eXBlKSlyZXR1cm57fTtjb25zdFtkLHBdPUdHZShpLmZyb20scyksW3YsYl09R0dlKGkudG8scykseT1kPD12LFQ9eT9wOmQ7bGV0IF89eT92OmI7Y29uc3QgQT1NYXRoLmFicyh2LWIpPjIsUD1LPT55Py1LOks7aS5mcm9tPT09aS50bz9fPVQ6KGkuYWN0aXZhdGUmJiFBJiYoXys9UChFbi5hY3RpdmF0aW9uV2lkdGgvMi0xKSksW3UuZGIuTElORVRZUEUuU09MSURfT1BFTix1LmRiLkxJTkVUWVBFLkRPVFRFRF9PUEVOXS5pbmNsdWRlcyhpLnR5cGUpfHwoXys9UCgzKSkpO2NvbnN0IFI9W2QscCx2LGJdLEY9TWF0aC5hYnMoVC1fKTtpLndyYXAmJmkubWVzc2FnZSYmKGkubWVzc2FnZT1Bby53cmFwTGFiZWwoaS5tZXNzYWdlLGNpLmdldE1heChGKzIqRW4ud3JhcFBhZGRpbmcsRW4ud2lkdGgpLGVTKEVuKSkpO2NvbnN0IGo9QW8uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoaS5tZXNzYWdlLGVTKEVuKSk7cmV0dXJue3dpZHRoOmNpLmdldE1heChpLndyYXA/MDpqLndpZHRoKzIqRW4ud3JhcFBhZGRpbmcsRisyKkVuLndyYXBQYWRkaW5nLEVuLndpZHRoKSxoZWlnaHQ6MCxzdGFydHg6VCxzdG9weDpfLHN0YXJ0eTowLHN0b3B5OjAsbWVzc2FnZTppLm1lc3NhZ2UsdHlwZTppLnR5cGUsd3JhcDppLndyYXAsZnJvbUJvdW5kczpNYXRoLm1pbi5hcHBseShudWxsLFIpLHRvQm91bmRzOk1hdGgubWF4LmFwcGx5KG51bGwsUil9fSx4aW49YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCl7Y29uc3QgcD17fSx2PVtdO2xldCBiLHksVDtmb3IoY29uc3QgXyBvZiBpKXtzd2l0Y2goXy5pZD1Bby5yYW5kb20oe2xlbmd0aDoxMH0pLF8udHlwZSl7Y2FzZSBkLmRiLkxJTkVUWVBFLkxPT1BfU1RBUlQ6Y2FzZSBkLmRiLkxJTkVUWVBFLkFMVF9TVEFSVDpjYXNlIGQuZGIuTElORVRZUEUuT1BUX1NUQVJUOmNhc2UgZC5kYi5MSU5FVFlQRS5QQVJfU1RBUlQ6Y2FzZSBkLmRiLkxJTkVUWVBFLlBBUl9PVkVSX1NUQVJUOmNhc2UgZC5kYi5MSU5FVFlQRS5DUklUSUNBTF9TVEFSVDpjYXNlIGQuZGIuTElORVRZUEUuQlJFQUtfU1RBUlQ6di5wdXNoKHtpZDpfLmlkLG1zZzpfLm1lc3NhZ2UsZnJvbTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUix0bzpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUix3aWR0aDowfSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkFMVF9FTFNFOmNhc2UgZC5kYi5MSU5FVFlQRS5QQVJfQU5EOmNhc2UgZC5kYi5MSU5FVFlQRS5DUklUSUNBTF9PUFRJT046Xy5tZXNzYWdlJiYoYj12LnBvcCgpLHBbYi5pZF09YixwW18uaWRdPWIsdi5wdXNoKGIpKTticmVhaztjYXNlIGQuZGIuTElORVRZUEUuTE9PUF9FTkQ6Y2FzZSBkLmRiLkxJTkVUWVBFLkFMVF9FTkQ6Y2FzZSBkLmRiLkxJTkVUWVBFLk9QVF9FTkQ6Y2FzZSBkLmRiLkxJTkVUWVBFLlBBUl9FTkQ6Y2FzZSBkLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX0VORDpjYXNlIGQuZGIuTElORVRZUEUuQlJFQUtfRU5EOmI9di5wb3AoKSxwW2IuaWRdPWI7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkFDVElWRV9TVEFSVDp7Y29uc3QgUD1zW18uZnJvbT9fLmZyb20uYWN0b3I6Xy50by5hY3Rvcl0sUj1iSihfLmZyb20/Xy5mcm9tLmFjdG9yOl8udG8uYWN0b3IpLmxlbmd0aCxGPVAueCtQLndpZHRoLzIrKFItMSkqRW4uYWN0aXZhdGlvbldpZHRoLzIsaj17c3RhcnR4OkYsc3RvcHg6RitFbi5hY3RpdmF0aW9uV2lkdGgsYWN0b3I6Xy5mcm9tLmFjdG9yLGVuYWJsZWQ6ITB9O25pLmFjdGl2YXRpb25zLnB1c2goail9YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkFDVElWRV9FTkQ6e2NvbnN0IFA9bmkuYWN0aXZhdGlvbnMubWFwKFI9PlIuYWN0b3IpLmxhc3RJbmRleE9mKF8uZnJvbS5hY3Rvcik7ZGVsZXRlIG5pLmFjdGl2YXRpb25zLnNwbGljZShQLDEpWzBdfWJyZWFrfV8ucGxhY2VtZW50IT09dm9pZCAwPyh5PWF3YWl0IHdpbihfLHMsZCksXy5ub3RlTW9kZWw9eSx2LmZvckVhY2goUD0+e2I9UCxiLmZyb209Y2kuZ2V0TWluKGIuZnJvbSx5LnN0YXJ0eCksYi50bz1jaS5nZXRNYXgoYi50byx5LnN0YXJ0eCt5LndpZHRoKSxiLndpZHRoPWNpLmdldE1heChiLndpZHRoLE1hdGguYWJzKGIuZnJvbS1iLnRvKSktRW4ubGFiZWxCb3hXaWR0aH0pKTooVD15aW4oXyxzLGQpLF8ubXNnTW9kZWw9VCxULnN0YXJ0eCYmVC5zdG9weCYmdi5sZW5ndGg+MCYmdi5mb3JFYWNoKFA9PntpZihiPVAsVC5zdGFydHg9PT1ULnN0b3B4KXtjb25zdCBSPXNbXy5mcm9tXSxGPXNbXy50b107Yi5mcm9tPWNpLmdldE1pbihSLngtVC53aWR0aC8yLFIueC1SLndpZHRoLzIsYi5mcm9tKSxiLnRvPWNpLmdldE1heChGLngrVC53aWR0aC8yLEYueCtSLndpZHRoLzIsYi50byksYi53aWR0aD1jaS5nZXRNYXgoYi53aWR0aCxNYXRoLmFicyhiLnRvLWIuZnJvbSkpLUVuLmxhYmVsQm94V2lkdGh9ZWxzZSBiLmZyb209Y2kuZ2V0TWluKFQuc3RhcnR4LGIuZnJvbSksYi50bz1jaS5nZXRNYXgoVC5zdG9weCxiLnRvKSxiLndpZHRoPWNpLmdldE1heChiLndpZHRoLFQud2lkdGgpLUVuLmxhYmVsQm94V2lkdGh9KSl9cmV0dXJuIG5pLmFjdGl2YXRpb25zPVtdLFhlLmRlYnVnKCJMb29wIHR5cGUgd2lkdGhzOiIscCkscH0sa2luPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6eXJuLGRiOkZHZSxyZW5kZXJlcjp7Ym91bmRzOm5pLGRyYXdBY3RvcnM6U3ZlLGRyYXdBY3RvcnNQb3B1cDpWR2Usc2V0Q29uZjpVR2UsZHJhdzpwaW59LHN0eWxlczpVcm4saW5pdDooe3dyYXA6aX0pPT57RkdlLnNldFdyYXAoaSl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgX3ZlPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oYW8sVHIsRm4scW4pe2ZvcihGbj1Gbnx8e30scW49YW8ubGVuZ3RoO3FuLS07Rm5bYW9bcW5dXT1Ucik7cmV0dXJuIEZufSxzPVsxLDE3XSx1PVsxLDE4XSxkPVsxLDE5XSxwPVsxLDM5XSx2PVsxLDQwXSxiPVsxLDI1XSx5PVsxLDIzXSxUPVsxLDI0XSxfPVsxLDMxXSxBPVsxLDMyXSxQPVsxLDMzXSxSPVsxLDM0XSxGPVsxLDM1XSxqPVsxLDM2XSxLPVsxLDI2XSxlZT1bMSwyN10saWU9WzEsMjhdLG9lPVsxLDI5XSxwZT1bMSw0M10sYmU9WzEsMzBdLGFlPVsxLDQyXSxuZT1bMSw0NF0sc2U9WzEsNDFdLGRlPVsxLDQ1XSxYPVsxLDldLGdlPVsxLDgsOV0sVz1bMSw1Nl0seGU9WzEsNTddLFU9WzEsNThdLEZlPVsxLDU5XSxQZT1bMSw2MF0samU9WzEsNjFdLEllPVsxLDYyXSxTZT1bMSw4LDksMzldLENlPVsxLDc0XSxrZT1bMSw4LDksMTIsMTMsMjEsMzcsMzksNDIsNTksNjAsNjEsNjIsNjMsNjQsNjUsNzAsNzJdLEtlPVsxLDgsOSwxMiwxMywxOSwyMSwzNywzOSw0Miw0Niw1OSw2MCw2MSw2Miw2Myw2NCw2NSw3MCw3Miw3NCw4MCw5NSw5Nyw5OF0sRnQ9WzEzLDc0LDgwLDk1LDk3LDk4XSxOZT1bMTMsNjQsNjUsNzQsODAsOTUsOTcsOThdLGduPVsxMyw1OSw2MCw2MSw2Miw2Myw3NCw4MCw5NSw5Nyw5OF0sX3Q9WzEsOTNdLEV0PVsxLDExMF0sR3Q9WzEsMTA4XSxsbj1bMSwxMDJdLHh0PVsxLDEwM10sUHQ9WzEsMTA0XSxRZT1bMSwxMDVdLER0PVsxLDEwNl0sa3Q9WzEsMTA3XSxPbj1bMSwxMDldLGh0PVsxLDgsOSwzNywzOSw0Ml0senI9WzEsOCw5LDIxXSx5dD1bMSw4LDksNzhdLGppPVsxLDgsOSwyMSw3Myw3NCw3OCw4MCw4MSw4Miw4Myw4NCw4NV0seGk9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxzdGF0ZW1lbnRzOjUsZ3JhcGhDb25maWc6NixDTEFTU19ESUFHUkFNOjcsTkVXTElORTo4LEVPRjo5LHN0YXRlbWVudDoxMCxjbGFzc0xhYmVsOjExLFNRUzoxMixTVFI6MTMsU1FFOjE0LG5hbWVzcGFjZU5hbWU6MTUsYWxwaGFOdW1Ub2tlbjoxNixjbGFzc05hbWU6MTcsY2xhc3NMaXRlcmFsTmFtZToxOCxHRU5FUklDVFlQRToxOSxyZWxhdGlvblN0YXRlbWVudDoyMCxMQUJFTDoyMSxuYW1lc3BhY2VTdGF0ZW1lbnQ6MjIsY2xhc3NTdGF0ZW1lbnQ6MjMsbWVtYmVyU3RhdGVtZW50OjI0LGFubm90YXRpb25TdGF0ZW1lbnQ6MjUsY2xpY2tTdGF0ZW1lbnQ6MjYsc3R5bGVTdGF0ZW1lbnQ6MjcsY3NzQ2xhc3NTdGF0ZW1lbnQ6Mjgsbm90ZVN0YXRlbWVudDoyOSxkaXJlY3Rpb246MzAsYWNjX3RpdGxlOjMxLGFjY190aXRsZV92YWx1ZTozMixhY2NfZGVzY3I6MzMsYWNjX2Rlc2NyX3ZhbHVlOjM0LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MzUsbmFtZXNwYWNlSWRlbnRpZmllcjozNixTVFJVQ1RfU1RBUlQ6MzcsY2xhc3NTdGF0ZW1lbnRzOjM4LFNUUlVDVF9TVE9QOjM5LE5BTUVTUEFDRTo0MCxjbGFzc0lkZW50aWZpZXI6NDEsU1RZTEVfU0VQQVJBVE9SOjQyLG1lbWJlcnM6NDMsQ0xBU1M6NDQsQU5OT1RBVElPTl9TVEFSVDo0NSxBTk5PVEFUSU9OX0VORDo0NixNRU1CRVI6NDcsU0VQQVJBVE9SOjQ4LHJlbGF0aW9uOjQ5LE5PVEVfRk9SOjUwLG5vdGVUZXh0OjUxLE5PVEU6NTIsZGlyZWN0aW9uX3RiOjUzLGRpcmVjdGlvbl9idDo1NCxkaXJlY3Rpb25fcmw6NTUsZGlyZWN0aW9uX2xyOjU2LHJlbGF0aW9uVHlwZTo1NyxsaW5lVHlwZTo1OCxBR0dSRUdBVElPTjo1OSxFWFRFTlNJT046NjAsQ09NUE9TSVRJT046NjEsREVQRU5ERU5DWTo2MixMT0xMSVBPUDo2MyxMSU5FOjY0LERPVFRFRF9MSU5FOjY1LENBTExCQUNLOjY2LExJTks6NjcsTElOS19UQVJHRVQ6NjgsQ0xJQ0s6NjksQ0FMTEJBQ0tfTkFNRTo3MCxDQUxMQkFDS19BUkdTOjcxLEhSRUY6NzIsU1RZTEU6NzMsQUxQSEE6NzQsc3R5bGVzT3B0Ojc1LENTU0NMQVNTOjc2LHN0eWxlOjc3LENPTU1BOjc4LHN0eWxlQ29tcG9uZW50Ojc5LE5VTTo4MCxDT0xPTjo4MSxVTklUOjgyLFNQQUNFOjgzLEJSS1Q6ODQsUENUOjg1LGNvbW1lbnRUb2tlbjo4Nix0ZXh0VG9rZW46ODcsZ3JhcGhDb2RlVG9rZW5zOjg4LHRleHROb1RhZ3NUb2tlbjo4OSxUQUdTVEFSVDo5MCxUQUdFTkQ6OTEsIj09Ijo5MiwiLS0iOjkzLERFRkFVTFQ6OTQsTUlOVVM6OTUsa2V5d29yZHM6OTYsVU5JQ09ERV9URVhUOjk3LEJRVU9URV9TVFI6OTgsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDc6IkNMQVNTX0RJQUdSQU0iLDg6Ik5FV0xJTkUiLDk6IkVPRiIsMTI6IlNRUyIsMTM6IlNUUiIsMTQ6IlNRRSIsMTk6IkdFTkVSSUNUWVBFIiwyMToiTEFCRUwiLDMxOiJhY2NfdGl0bGUiLDMyOiJhY2NfdGl0bGVfdmFsdWUiLDMzOiJhY2NfZGVzY3IiLDM0OiJhY2NfZGVzY3JfdmFsdWUiLDM1OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzNzoiU1RSVUNUX1NUQVJUIiwzOToiU1RSVUNUX1NUT1AiLDQwOiJOQU1FU1BBQ0UiLDQyOiJTVFlMRV9TRVBBUkFUT1IiLDQ0OiJDTEFTUyIsNDU6IkFOTk9UQVRJT05fU1RBUlQiLDQ2OiJBTk5PVEFUSU9OX0VORCIsNDc6Ik1FTUJFUiIsNDg6IlNFUEFSQVRPUiIsNTA6Ik5PVEVfRk9SIiw1MjoiTk9URSIsNTM6ImRpcmVjdGlvbl90YiIsNTQ6ImRpcmVjdGlvbl9idCIsNTU6ImRpcmVjdGlvbl9ybCIsNTY6ImRpcmVjdGlvbl9sciIsNTk6IkFHR1JFR0FUSU9OIiw2MDoiRVhURU5TSU9OIiw2MToiQ09NUE9TSVRJT04iLDYyOiJERVBFTkRFTkNZIiw2MzoiTE9MTElQT1AiLDY0OiJMSU5FIiw2NToiRE9UVEVEX0xJTkUiLDY2OiJDQUxMQkFDSyIsNjc6IkxJTksiLDY4OiJMSU5LX1RBUkdFVCIsNjk6IkNMSUNLIiw3MDoiQ0FMTEJBQ0tfTkFNRSIsNzE6IkNBTExCQUNLX0FSR1MiLDcyOiJIUkVGIiw3MzoiU1RZTEUiLDc0OiJBTFBIQSIsNzY6IkNTU0NMQVNTIiw3ODoiQ09NTUEiLDgwOiJOVU0iLDgxOiJDT0xPTiIsODI6IlVOSVQiLDgzOiJTUEFDRSIsODQ6IkJSS1QiLDg1OiJQQ1QiLDg4OiJncmFwaENvZGVUb2tlbnMiLDkwOiJUQUdTVEFSVCIsOTE6IlRBR0VORCIsOTI6Ij09Iiw5MzoiLS0iLDk0OiJERUZBVUxUIiw5NToiTUlOVVMiLDk2OiJrZXl3b3JkcyIsOTc6IlVOSUNPREVfVEVYVCIsOTg6IkJRVU9URV9TVFIifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMV0sWzQsMV0sWzYsNF0sWzUsMV0sWzUsMl0sWzUsM10sWzExLDNdLFsxNSwxXSxbMTUsMl0sWzE3LDFdLFsxNywxXSxbMTcsMl0sWzE3LDJdLFsxNywyXSxbMTAsMV0sWzEwLDJdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMl0sWzEwLDFdLFsyMiw0XSxbMjIsNV0sWzM2LDJdLFszOCwxXSxbMzgsMl0sWzM4LDNdLFsyMywxXSxbMjMsM10sWzIzLDRdLFsyMyw2XSxbNDEsMl0sWzQxLDNdLFsyNSw0XSxbNDMsMV0sWzQzLDJdLFsyNCwxXSxbMjQsMl0sWzI0LDFdLFsyNCwxXSxbMjAsM10sWzIwLDRdLFsyMCw0XSxbMjAsNV0sWzI5LDNdLFsyOSwyXSxbMzAsMV0sWzMwLDFdLFszMCwxXSxbMzAsMV0sWzQ5LDNdLFs0OSwyXSxbNDksMl0sWzQ5LDFdLFs1NywxXSxbNTcsMV0sWzU3LDFdLFs1NywxXSxbNTcsMV0sWzU4LDFdLFs1OCwxXSxbMjYsM10sWzI2LDRdLFsyNiwzXSxbMjYsNF0sWzI2LDRdLFsyNiw1XSxbMjYsM10sWzI2LDRdLFsyNiw0XSxbMjYsNV0sWzI2LDRdLFsyNiw1XSxbMjYsNV0sWzI2LDZdLFsyNywzXSxbMjgsM10sWzc1LDFdLFs3NSwzXSxbNzcsMV0sWzc3LDJdLFs3OSwxXSxbNzksMV0sWzc5LDFdLFs3OSwxXSxbNzksMV0sWzc5LDFdLFs3OSwxXSxbNzksMV0sWzc5LDFdLFs4NiwxXSxbODYsMV0sWzg3LDFdLFs4NywxXSxbODcsMV0sWzg3LDFdLFs4NywxXSxbODcsMV0sWzg3LDFdLFs4OSwxXSxbODksMV0sWzg5LDFdLFs4OSwxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE4LDFdLFs1MSwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihUcixGbixxbixVbixBdCx3dCxvbil7dmFyIGZuPXd0Lmxlbmd0aC0xO3N3aXRjaChBdCl7Y2FzZSA4OnRoaXMuJD13dFtmbi0xXTticmVhaztjYXNlIDk6Y2FzZSAxMTpjYXNlIDEyOnRoaXMuJD13dFtmbl07YnJlYWs7Y2FzZSAxMDpjYXNlIDEzOnRoaXMuJD13dFtmbi0xXSt3dFtmbl07YnJlYWs7Y2FzZSAxNDpjYXNlIDE1OnRoaXMuJD13dFtmbi0xXSsifiIrd3RbZm5dKyJ+IjticmVhaztjYXNlIDE2OlVuLmFkZFJlbGF0aW9uKHd0W2ZuXSk7YnJlYWs7Y2FzZSAxNzp3dFtmbi0xXS50aXRsZT1Vbi5jbGVhbnVwTGFiZWwod3RbZm5dKSxVbi5hZGRSZWxhdGlvbih3dFtmbi0xXSk7YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9d3RbZm5dLnRyaW0oKSxVbi5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMjg6Y2FzZSAyOTp0aGlzLiQ9d3RbZm5dLnRyaW0oKSxVbi5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMzA6VW4uYWRkQ2xhc3Nlc1RvTmFtZXNwYWNlKHd0W2ZuLTNdLHd0W2ZuLTFdKTticmVhaztjYXNlIDMxOlVuLmFkZENsYXNzZXNUb05hbWVzcGFjZSh3dFtmbi00XSx3dFtmbi0xXSk7YnJlYWs7Y2FzZSAzMjp0aGlzLiQ9d3RbZm5dLFVuLmFkZE5hbWVzcGFjZSh3dFtmbl0pO2JyZWFrO2Nhc2UgMzM6dGhpcy4kPVt3dFtmbl1dO2JyZWFrO2Nhc2UgMzQ6dGhpcy4kPVt3dFtmbi0xXV07YnJlYWs7Y2FzZSAzNTp3dFtmbl0udW5zaGlmdCh3dFtmbi0yXSksdGhpcy4kPXd0W2ZuXTticmVhaztjYXNlIDM3OlVuLnNldENzc0NsYXNzKHd0W2ZuLTJdLHd0W2ZuXSk7YnJlYWs7Y2FzZSAzODpVbi5hZGRNZW1iZXJzKHd0W2ZuLTNdLHd0W2ZuLTFdKTticmVhaztjYXNlIDM5OlVuLnNldENzc0NsYXNzKHd0W2ZuLTVdLHd0W2ZuLTNdKSxVbi5hZGRNZW1iZXJzKHd0W2ZuLTVdLHd0W2ZuLTFdKTticmVhaztjYXNlIDQwOnRoaXMuJD13dFtmbl0sVW4uYWRkQ2xhc3Mod3RbZm5dKTticmVhaztjYXNlIDQxOnRoaXMuJD13dFtmbi0xXSxVbi5hZGRDbGFzcyh3dFtmbi0xXSksVW4uc2V0Q2xhc3NMYWJlbCh3dFtmbi0xXSx3dFtmbl0pO2JyZWFrO2Nhc2UgNDI6VW4uYWRkQW5ub3RhdGlvbih3dFtmbl0sd3RbZm4tMl0pO2JyZWFrO2Nhc2UgNDM6dGhpcy4kPVt3dFtmbl1dO2JyZWFrO2Nhc2UgNDQ6d3RbZm5dLnB1c2god3RbZm4tMV0pLHRoaXMuJD13dFtmbl07YnJlYWs7Y2FzZSA0NTpicmVhaztjYXNlIDQ2OlVuLmFkZE1lbWJlcih3dFtmbi0xXSxVbi5jbGVhbnVwTGFiZWwod3RbZm5dKSk7YnJlYWs7Y2FzZSA0NzpicmVhaztjYXNlIDQ4OmJyZWFrO2Nhc2UgNDk6dGhpcy4kPXtpZDE6d3RbZm4tMl0saWQyOnd0W2ZuXSxyZWxhdGlvbjp3dFtmbi0xXSxyZWxhdGlvblRpdGxlMToibm9uZSIscmVsYXRpb25UaXRsZTI6Im5vbmUifTticmVhaztjYXNlIDUwOnRoaXMuJD17aWQxOnd0W2ZuLTNdLGlkMjp3dFtmbl0scmVsYXRpb246d3RbZm4tMV0scmVsYXRpb25UaXRsZTE6d3RbZm4tMl0scmVsYXRpb25UaXRsZTI6Im5vbmUifTticmVhaztjYXNlIDUxOnRoaXMuJD17aWQxOnd0W2ZuLTNdLGlkMjp3dFtmbl0scmVsYXRpb246d3RbZm4tMl0scmVsYXRpb25UaXRsZTE6Im5vbmUiLHJlbGF0aW9uVGl0bGUyOnd0W2ZuLTFdfTticmVhaztjYXNlIDUyOnRoaXMuJD17aWQxOnd0W2ZuLTRdLGlkMjp3dFtmbl0scmVsYXRpb246d3RbZm4tMl0scmVsYXRpb25UaXRsZTE6d3RbZm4tM10scmVsYXRpb25UaXRsZTI6d3RbZm4tMV19O2JyZWFrO2Nhc2UgNTM6VW4uYWRkTm90ZSh3dFtmbl0sd3RbZm4tMV0pO2JyZWFrO2Nhc2UgNTQ6VW4uYWRkTm90ZSh3dFtmbl0pO2JyZWFrO2Nhc2UgNTU6VW4uc2V0RGlyZWN0aW9uKCJUQiIpO2JyZWFrO2Nhc2UgNTY6VW4uc2V0RGlyZWN0aW9uKCJCVCIpO2JyZWFrO2Nhc2UgNTc6VW4uc2V0RGlyZWN0aW9uKCJSTCIpO2JyZWFrO2Nhc2UgNTg6VW4uc2V0RGlyZWN0aW9uKCJMUiIpO2JyZWFrO2Nhc2UgNTk6dGhpcy4kPXt0eXBlMTp3dFtmbi0yXSx0eXBlMjp3dFtmbl0sbGluZVR5cGU6d3RbZm4tMV19O2JyZWFrO2Nhc2UgNjA6dGhpcy4kPXt0eXBlMToibm9uZSIsdHlwZTI6d3RbZm5dLGxpbmVUeXBlOnd0W2ZuLTFdfTticmVhaztjYXNlIDYxOnRoaXMuJD17dHlwZTE6d3RbZm4tMV0sdHlwZTI6Im5vbmUiLGxpbmVUeXBlOnd0W2ZuXX07YnJlYWs7Y2FzZSA2Mjp0aGlzLiQ9e3R5cGUxOiJub25lIix0eXBlMjoibm9uZSIsbGluZVR5cGU6d3RbZm5dfTticmVhaztjYXNlIDYzOnRoaXMuJD1Vbi5yZWxhdGlvblR5cGUuQUdHUkVHQVRJT047YnJlYWs7Y2FzZSA2NDp0aGlzLiQ9VW4ucmVsYXRpb25UeXBlLkVYVEVOU0lPTjticmVhaztjYXNlIDY1OnRoaXMuJD1Vbi5yZWxhdGlvblR5cGUuQ09NUE9TSVRJT047YnJlYWs7Y2FzZSA2Njp0aGlzLiQ9VW4ucmVsYXRpb25UeXBlLkRFUEVOREVOQ1k7YnJlYWs7Y2FzZSA2Nzp0aGlzLiQ9VW4ucmVsYXRpb25UeXBlLkxPTExJUE9QO2JyZWFrO2Nhc2UgNjg6dGhpcy4kPVVuLmxpbmVUeXBlLkxJTkU7YnJlYWs7Y2FzZSA2OTp0aGlzLiQ9VW4ubGluZVR5cGUuRE9UVEVEX0xJTkU7YnJlYWs7Y2FzZSA3MDpjYXNlIDc2OnRoaXMuJD13dFtmbi0yXSxVbi5zZXRDbGlja0V2ZW50KHd0W2ZuLTFdLHd0W2ZuXSk7YnJlYWs7Y2FzZSA3MTpjYXNlIDc3OnRoaXMuJD13dFtmbi0zXSxVbi5zZXRDbGlja0V2ZW50KHd0W2ZuLTJdLHd0W2ZuLTFdKSxVbi5zZXRUb29sdGlwKHd0W2ZuLTJdLHd0W2ZuXSk7YnJlYWs7Y2FzZSA3Mjp0aGlzLiQ9d3RbZm4tMl0sVW4uc2V0TGluayh3dFtmbi0xXSx3dFtmbl0pO2JyZWFrO2Nhc2UgNzM6dGhpcy4kPXd0W2ZuLTNdLFVuLnNldExpbmsod3RbZm4tMl0sd3RbZm4tMV0sd3RbZm5dKTticmVhaztjYXNlIDc0OnRoaXMuJD13dFtmbi0zXSxVbi5zZXRMaW5rKHd0W2ZuLTJdLHd0W2ZuLTFdKSxVbi5zZXRUb29sdGlwKHd0W2ZuLTJdLHd0W2ZuXSk7YnJlYWs7Y2FzZSA3NTp0aGlzLiQ9d3RbZm4tNF0sVW4uc2V0TGluayh3dFtmbi0zXSx3dFtmbi0yXSx3dFtmbl0pLFVuLnNldFRvb2x0aXAod3RbZm4tM10sd3RbZm4tMV0pO2JyZWFrO2Nhc2UgNzg6dGhpcy4kPXd0W2ZuLTNdLFVuLnNldENsaWNrRXZlbnQod3RbZm4tMl0sd3RbZm4tMV0sd3RbZm5dKTticmVhaztjYXNlIDc5OnRoaXMuJD13dFtmbi00XSxVbi5zZXRDbGlja0V2ZW50KHd0W2ZuLTNdLHd0W2ZuLTJdLHd0W2ZuLTFdKSxVbi5zZXRUb29sdGlwKHd0W2ZuLTNdLHd0W2ZuXSk7YnJlYWs7Y2FzZSA4MDp0aGlzLiQ9d3RbZm4tM10sVW4uc2V0TGluayh3dFtmbi0yXSx3dFtmbl0pO2JyZWFrO2Nhc2UgODE6dGhpcy4kPXd0W2ZuLTRdLFVuLnNldExpbmsod3RbZm4tM10sd3RbZm4tMV0sd3RbZm5dKTticmVhaztjYXNlIDgyOnRoaXMuJD13dFtmbi00XSxVbi5zZXRMaW5rKHd0W2ZuLTNdLHd0W2ZuLTFdKSxVbi5zZXRUb29sdGlwKHd0W2ZuLTNdLHd0W2ZuXSk7YnJlYWs7Y2FzZSA4Mzp0aGlzLiQ9d3RbZm4tNV0sVW4uc2V0TGluayh3dFtmbi00XSx3dFtmbi0yXSx3dFtmbl0pLFVuLnNldFRvb2x0aXAod3RbZm4tNF0sd3RbZm4tMV0pO2JyZWFrO2Nhc2UgODQ6dGhpcy4kPXd0W2ZuLTJdLFVuLnNldENzc1N0eWxlKHd0W2ZuLTFdLHd0W2ZuXSk7YnJlYWs7Y2FzZSA4NTpVbi5zZXRDc3NDbGFzcyh3dFtmbi0xXSx3dFtmbl0pO2JyZWFrO2Nhc2UgODY6dGhpcy4kPVt3dFtmbl1dO2JyZWFrO2Nhc2UgODc6d3RbZm4tMl0ucHVzaCh3dFtmbl0pLHRoaXMuJD13dFtmbi0yXTticmVhaztjYXNlIDg5OnRoaXMuJD13dFtmbi0xXSt3dFtmbl07YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTozLDY6NCw3OlsxLDZdLDEwOjUsMTY6MzcsMTc6MjAsMTg6MzgsMjA6NywyMjo4LDIzOjksMjQ6MTAsMjU6MTEsMjY6MTIsMjc6MTMsMjg6MTQsMjk6MTUsMzA6MTYsMzE6cywzMzp1LDM1OmQsMzY6MjEsNDA6cCw0MToyMiw0NDp2LDQ1OmIsNDc6eSw0ODpULDUwOl8sNTI6QSw1MzpQLDU0OlIsNTU6Riw1NjpqLDY2OkssNjc6ZWUsNjk6aWUsNzM6b2UsNzQ6cGUsNzY6YmUsODA6YWUsOTU6bmUsOTc6c2UsOTg6ZGV9LHsxOlszXX0sezE6WzIsMV19LHsxOlsyLDJdfSx7MTpbMiwzXX0saShYLFsyLDVdLHs4OlsxLDQ2XX0pLHs4OlsxLDQ3XX0saShnZSxbMiwxNl0sezIxOlsxLDQ4XX0pLGkoZ2UsWzIsMThdKSxpKGdlLFsyLDE5XSksaShnZSxbMiwyMF0pLGkoZ2UsWzIsMjFdKSxpKGdlLFsyLDIyXSksaShnZSxbMiwyM10pLGkoZ2UsWzIsMjRdKSxpKGdlLFsyLDI1XSksaShnZSxbMiwyNl0pLHszMjpbMSw0OV19LHszNDpbMSw1MF19LGkoZ2UsWzIsMjldKSxpKGdlLFsyLDQ1XSx7NDk6NTEsNTc6NTQsNTg6NTUsMTM6WzEsNTJdLDIxOlsxLDUzXSw1OTpXLDYwOnhlLDYxOlUsNjI6RmUsNjM6UGUsNjQ6amUsNjU6SWV9KSx7Mzc6WzEsNjNdfSxpKFNlLFsyLDM2XSx7Mzc6WzEsNjVdLDQyOlsxLDY0XX0pLGkoZ2UsWzIsNDddKSxpKGdlLFsyLDQ4XSksezE2OjY2LDc0OnBlLDgwOmFlLDk1Om5lLDk3OnNlfSx7MTY6MzcsMTc6NjcsMTg6MzgsNzQ6cGUsODA6YWUsOTU6bmUsOTc6c2UsOTg6ZGV9LHsxNjozNywxNzo2OCwxODozOCw3NDpwZSw4MDphZSw5NTpuZSw5NzpzZSw5ODpkZX0sezE2OjM3LDE3OjY5LDE4OjM4LDc0OnBlLDgwOmFlLDk1Om5lLDk3OnNlLDk4OmRlfSx7NzQ6WzEsNzBdfSx7MTM6WzEsNzFdfSx7MTY6MzcsMTc6NzIsMTg6MzgsNzQ6cGUsODA6YWUsOTU6bmUsOTc6c2UsOTg6ZGV9LHsxMzpDZSw1MTo3M30saShnZSxbMiw1NV0pLGkoZ2UsWzIsNTZdKSxpKGdlLFsyLDU3XSksaShnZSxbMiw1OF0pLGkoa2UsWzIsMTFdLHsxNjozNywxODozOCwxNzo3NSwxOTpbMSw3Nl0sNzQ6cGUsODA6YWUsOTU6bmUsOTc6c2UsOTg6ZGV9KSxpKGtlLFsyLDEyXSx7MTk6WzEsNzddfSksezE1Ojc4LDE2Ojc5LDc0OnBlLDgwOmFlLDk1Om5lLDk3OnNlfSx7MTY6MzcsMTc6ODAsMTg6MzgsNzQ6cGUsODA6YWUsOTU6bmUsOTc6c2UsOTg6ZGV9LGkoS2UsWzIsMTEyXSksaShLZSxbMiwxMTNdKSxpKEtlLFsyLDExNF0pLGkoS2UsWzIsMTE1XSksaShbMSw4LDksMTIsMTMsMTksMjEsMzcsMzksNDIsNTksNjAsNjEsNjIsNjMsNjQsNjUsNzAsNzJdLFsyLDExNl0pLGkoWCxbMiw2XSx7MTA6NSwyMDo3LDIyOjgsMjM6OSwyNDoxMCwyNToxMSwyNjoxMiwyNzoxMywyODoxNCwyOToxNSwzMDoxNiwxNzoyMCwzNjoyMSw0MToyMiwxNjozNywxODozOCw1OjgxLDMxOnMsMzM6dSwzNTpkLDQwOnAsNDQ6diw0NTpiLDQ3OnksNDg6VCw1MDpfLDUyOkEsNTM6UCw1NDpSLDU1OkYsNTY6aiw2NjpLLDY3OmVlLDY5OmllLDczOm9lLDc0OnBlLDc2OmJlLDgwOmFlLDk1Om5lLDk3OnNlLDk4OmRlfSksezU6ODIsMTA6NSwxNjozNywxNzoyMCwxODozOCwyMDo3LDIyOjgsMjM6OSwyNDoxMCwyNToxMSwyNjoxMiwyNzoxMywyODoxNCwyOToxNSwzMDoxNiwzMTpzLDMzOnUsMzU6ZCwzNjoyMSw0MDpwLDQxOjIyLDQ0OnYsNDU6Yiw0Nzp5LDQ4OlQsNTA6Xyw1MjpBLDUzOlAsNTQ6Uiw1NTpGLDU2OmosNjY6Syw2NzplZSw2OTppZSw3MzpvZSw3NDpwZSw3NjpiZSw4MDphZSw5NTpuZSw5NzpzZSw5ODpkZX0saShnZSxbMiwxN10pLGkoZ2UsWzIsMjddKSxpKGdlLFsyLDI4XSksezEzOlsxLDg0XSwxNjozNywxNzo4MywxODozOCw3NDpwZSw4MDphZSw5NTpuZSw5NzpzZSw5ODpkZX0sezQ5Ojg1LDU3OjU0LDU4OjU1LDU5OlcsNjA6eGUsNjE6VSw2MjpGZSw2MzpQZSw2NDpqZSw2NTpJZX0saShnZSxbMiw0Nl0pLHs1ODo4Niw2NDpqZSw2NTpJZX0saShGdCxbMiw2Ml0sezU3Ojg3LDU5OlcsNjA6eGUsNjE6VSw2MjpGZSw2MzpQZX0pLGkoTmUsWzIsNjNdKSxpKE5lLFsyLDY0XSksaShOZSxbMiw2NV0pLGkoTmUsWzIsNjZdKSxpKE5lLFsyLDY3XSksaShnbixbMiw2OF0pLGkoZ24sWzIsNjldKSx7ODpbMSw4OV0sMjM6OTAsMzg6ODgsNDE6MjIsNDQ6dn0sezE2OjkxLDc0OnBlLDgwOmFlLDk1Om5lLDk3OnNlfSx7NDM6OTIsNDc6X3R9LHs0NjpbMSw5NF19LHsxMzpbMSw5NV19LHsxMzpbMSw5Nl19LHs3MDpbMSw5N10sNzI6WzEsOThdfSx7MjE6RXQsNzM6R3QsNzQ6bG4sNzU6OTksNzc6MTAwLDc5OjEwMSw4MDp4dCw4MTpQdCw4MjpRZSw4MzpEdCw4NDprdCw4NTpPbn0sezc0OlsxLDExMV19LHsxMzpDZSw1MToxMTJ9LGkoZ2UsWzIsNTRdKSxpKGdlLFsyLDExN10pLGkoa2UsWzIsMTNdKSxpKGtlLFsyLDE0XSksaShrZSxbMiwxNV0pLHszNzpbMiwzMl19LHsxNToxMTMsMTY6NzksMzc6WzIsOV0sNzQ6cGUsODA6YWUsOTU6bmUsOTc6c2V9LGkoaHQsWzIsNDBdLHsxMToxMTQsMTI6WzEsMTE1XX0pLGkoWCxbMiw3XSksezk6WzEsMTE2XX0saSh6cixbMiw0OV0pLHsxNjozNywxNzoxMTcsMTg6MzgsNzQ6cGUsODA6YWUsOTU6bmUsOTc6c2UsOTg6ZGV9LHsxMzpbMSwxMTldLDE2OjM3LDE3OjExOCwxODozOCw3NDpwZSw4MDphZSw5NTpuZSw5NzpzZSw5ODpkZX0saShGdCxbMiw2MV0sezU3OjEyMCw1OTpXLDYwOnhlLDYxOlUsNjI6RmUsNjM6UGV9KSxpKEZ0LFsyLDYwXSksezM5OlsxLDEyMV19LHsyMzo5MCwzODoxMjIsNDE6MjIsNDQ6dn0sezg6WzEsMTIzXSwzOTpbMiwzM119LGkoU2UsWzIsMzddLHszNzpbMSwxMjRdfSksezM5OlsxLDEyNV19LHszOTpbMiw0M10sNDM6MTI2LDQ3Ol90fSx7MTY6MzcsMTc6MTI3LDE4OjM4LDc0OnBlLDgwOmFlLDk1Om5lLDk3OnNlLDk4OmRlfSxpKGdlLFsyLDcwXSx7MTM6WzEsMTI4XX0pLGkoZ2UsWzIsNzJdLHsxMzpbMSwxMzBdLDY4OlsxLDEyOV19KSxpKGdlLFsyLDc2XSx7MTM6WzEsMTMxXSw3MTpbMSwxMzJdfSksezEzOlsxLDEzM119LGkoZ2UsWzIsODRdLHs3ODpbMSwxMzRdfSksaSh5dCxbMiw4Nl0sezc5OjEzNSwyMTpFdCw3MzpHdCw3NDpsbiw4MDp4dCw4MTpQdCw4MjpRZSw4MzpEdCw4NDprdCw4NTpPbn0pLGkoamksWzIsODhdKSxpKGppLFsyLDkwXSksaShqaSxbMiw5MV0pLGkoamksWzIsOTJdKSxpKGppLFsyLDkzXSksaShqaSxbMiw5NF0pLGkoamksWzIsOTVdKSxpKGppLFsyLDk2XSksaShqaSxbMiw5N10pLGkoamksWzIsOThdKSxpKGdlLFsyLDg1XSksaShnZSxbMiw1M10pLHszNzpbMiwxMF19LGkoaHQsWzIsNDFdKSx7MTM6WzEsMTM2XX0sezE6WzIsNF19LGkoenIsWzIsNTFdKSxpKHpyLFsyLDUwXSksezE2OjM3LDE3OjEzNywxODozOCw3NDpwZSw4MDphZSw5NTpuZSw5NzpzZSw5ODpkZX0saShGdCxbMiw1OV0pLGkoZ2UsWzIsMzBdKSx7Mzk6WzEsMTM4XX0sezIzOjkwLDM4OjEzOSwzOTpbMiwzNF0sNDE6MjIsNDQ6dn0sezQzOjE0MCw0NzpfdH0saShTZSxbMiwzOF0pLHszOTpbMiw0NF19LGkoZ2UsWzIsNDJdKSxpKGdlLFsyLDcxXSksaShnZSxbMiw3M10pLGkoZ2UsWzIsNzRdLHs2ODpbMSwxNDFdfSksaShnZSxbMiw3N10pLGkoZ2UsWzIsNzhdLHsxMzpbMSwxNDJdfSksaShnZSxbMiw4MF0sezEzOlsxLDE0NF0sNjg6WzEsMTQzXX0pLHsyMTpFdCw3MzpHdCw3NDpsbiw3NzoxNDUsNzk6MTAxLDgwOnh0LDgxOlB0LDgyOlFlLDgzOkR0LDg0Omt0LDg1Ok9ufSxpKGppLFsyLDg5XSksezE0OlsxLDE0Nl19LGkoenIsWzIsNTJdKSxpKGdlLFsyLDMxXSksezM5OlsyLDM1XX0sezM5OlsxLDE0N119LGkoZ2UsWzIsNzVdKSxpKGdlLFsyLDc5XSksaShnZSxbMiw4MV0pLGkoZ2UsWzIsODJdLHs2ODpbMSwxNDhdfSksaSh5dCxbMiw4N10sezc5OjEzNSwyMTpFdCw3MzpHdCw3NDpsbiw4MDp4dCw4MTpQdCw4MjpRZSw4MzpEdCw4NDprdCw4NTpPbn0pLGkoaHQsWzIsOF0pLGkoU2UsWzIsMzldKSxpKGdlLFsyLDgzXSldLGRlZmF1bHRBY3Rpb25zOnsyOlsyLDFdLDM6WzIsMl0sNDpbMiwzXSw3ODpbMiwzMl0sMTEzOlsyLDEwXSwxMTY6WzIsNF0sMTI2OlsyLDQ0XSwxMzk6WzIsMzVdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKFRyLEZuKXtpZihGbi5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKFRyKTtlbHNle3ZhciBxbj1uZXcgRXJyb3IoVHIpO3Rocm93IHFuLmhhc2g9Rm4scW59fSxwYXJzZTpmdW5jdGlvbihUcil7dmFyIEZuPXRoaXMscW49WzBdLFVuPVtdLEF0PVtudWxsXSx3dD1bXSxvbj10aGlzLnRhYmxlLGZuPSIiLEFuPTAsb289MCxqbz0yLCRvPTEsUGE9d3Quc2xpY2UuY2FsbChhcmd1bWVudHMsMSksd289T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxfcz17eXk6e319O2Zvcih2YXIgdGwgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx0bCkmJihfcy55eVt0bF09dGhpcy55eVt0bF0pO3dvLnNldElucHV0KFRyLF9zLnl5KSxfcy55eS5sZXhlcj13byxfcy55eS5wYXJzZXI9dGhpcyx0eXBlb2Ygd28ueXlsbG9jPiJ1IiYmKHdvLnl5bGxvYz17fSk7dmFyIGRhPXdvLnl5bGxvYzt3dC5wdXNoKGRhKTt2YXIgajA9d28ub3B0aW9ucyYmd28ub3B0aW9ucy5yYW5nZXM7dHlwZW9mIF9zLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPV9zLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIHBtKCl7dmFyIGdhO3JldHVybiBnYT1Vbi5wb3AoKXx8d28ubGV4KCl8fCRvLHR5cGVvZiBnYSE9Im51bWJlciImJihnYSBpbnN0YW5jZW9mIEFycmF5JiYoVW49Z2EsZ2E9VW4ucG9wKCkpLGdhPUZuLnN5bWJvbHNfW2dhXXx8Z2EpLGdhfWZvcih2YXIgTWwsWGMsQmMsamEsT3U9e30sU2EsUG8sRmMseGE7Oyl7aWYoWGM9cW5bcW4ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbWGNdP0JjPXRoaXMuZGVmYXVsdEFjdGlvbnNbWGNdOigoTWw9PT1udWxsfHx0eXBlb2YgTWw+InUiKSYmKE1sPXBtKCkpLEJjPW9uW1hjXSYmb25bWGNdW01sXSksdHlwZW9mIEJjPiJ1Inx8IUJjLmxlbmd0aHx8IUJjWzBdKXt2YXIgQmE9IiI7eGE9W107Zm9yKFNhIGluIG9uW1hjXSl0aGlzLnRlcm1pbmFsc19bU2FdJiZTYT5qbyYmeGEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1NhXSsiJyIpO3dvLnNob3dQb3NpdGlvbj9CYT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhBbisxKStgOgpgK3dvLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGAreGEuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tNbF18fE1sKSsiJyI6QmE9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoQW4rMSkrIjogVW5leHBlY3RlZCAiKyhNbD09JG8/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bTWxdfHxNbCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoQmEse3RleHQ6d28ubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW01sXXx8TWwsbGluZTp3by55eWxpbmVubyxsb2M6ZGEsZXhwZWN0ZWQ6eGF9KX1pZihCY1swXWluc3RhbmNlb2YgQXJyYXkmJkJjLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrWGMrIiwgdG9rZW46ICIrTWwpO3N3aXRjaChCY1swXSl7Y2FzZSAxOnFuLnB1c2goTWwpLEF0LnB1c2god28ueXl0ZXh0KSx3dC5wdXNoKHdvLnl5bGxvYykscW4ucHVzaChCY1sxXSksTWw9bnVsbCxvbz13by55eWxlbmcsZm49d28ueXl0ZXh0LEFuPXdvLnl5bGluZW5vLGRhPXdvLnl5bGxvYzticmVhaztjYXNlIDI6aWYoUG89dGhpcy5wcm9kdWN0aW9uc19bQmNbMV1dWzFdLE91LiQ9QXRbQXQubGVuZ3RoLVBvXSxPdS5fJD17Zmlyc3RfbGluZTp3dFt3dC5sZW5ndGgtKFBvfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6d3Rbd3QubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46d3Rbd3QubGVuZ3RoLShQb3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp3dFt3dC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGowJiYoT3UuXyQucmFuZ2U9W3d0W3d0Lmxlbmd0aC0oUG98fDEpXS5yYW5nZVswXSx3dFt3dC5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxqYT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoT3UsW2ZuLG9vLEFuLF9zLnl5LEJjWzFdLEF0LHd0XS5jb25jYXQoUGEpKSx0eXBlb2YgamE8InUiKXJldHVybiBqYTtQbyYmKHFuPXFuLnNsaWNlKDAsLTEqUG8qMiksQXQ9QXQuc2xpY2UoMCwtMSpQbyksd3Q9d3Quc2xpY2UoMCwtMSpQbykpLHFuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bQmNbMV1dWzBdKSxBdC5wdXNoKE91LiQpLHd0LnB1c2goT3UuXyQpLEZjPW9uW3FuW3FuLmxlbmd0aC0yXV1bcW5bcW4ubGVuZ3RoLTFdXSxxbi5wdXNoKEZjKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sTWE9ZnVuY3Rpb24oKXt2YXIgYW89e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oRm4scW4pe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoRm4scW4pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEZuKX0sc2V0SW5wdXQ6ZnVuY3Rpb24oVHIsRm4pe3JldHVybiB0aGlzLnl5PUZufHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1Ucix0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgVHI9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPVRyLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1Ucix0aGlzLm1hdGNoZWQrPVRyO3ZhciBGbj1Uci5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEZuPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxUcn0sdW5wdXQ6ZnVuY3Rpb24oVHIpe3ZhciBGbj1Uci5sZW5ndGgscW49VHIuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1Ucit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtRm4pLHRoaXMub2Zmc2V0LT1Gbjt2YXIgVW49dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSkscW4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1xbi5sZW5ndGgtMSk7dmFyIEF0PXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpxbj8ocW4ubGVuZ3RoPT09VW4ubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStVbltVbi5sZW5ndGgtcW4ubGVuZ3RoXS5sZW5ndGgtcW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1Gbn0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtBdFswXSxBdFswXSt0aGlzLnl5bGVuZy1Gbl0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKFRyKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoVHIpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIFRyPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oVHIubGVuZ3RoPjIwPyIuLi4iOiIiKStUci5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBUcj10aGlzLm1hdGNoO3JldHVybiBUci5sZW5ndGg8MjAmJihUcis9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtVHIubGVuZ3RoKSksKFRyLnN1YnN0cigwLDIwKSsoVHIubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBUcj10aGlzLnBhc3RJbnB1dCgpLEZuPW5ldyBBcnJheShUci5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBUcit0aGlzLnVwY29taW5nSW5wdXQoKStgCmArRm4rIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKFRyLEZuKXt2YXIgcW4sVW4sQXQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKEF0PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEF0Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLFVuPVRyWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxVbiYmKHRoaXMueXlsaW5lbm8rPVVuLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOlVuP1VuW1VuLmxlbmd0aC0xXS5sZW5ndGgtVW5bVW4ubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rVHJbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9VHJbMF0sdGhpcy5tYXRjaCs9VHJbMF0sdGhpcy5tYXRjaGVzPVRyLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKFRyWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1UclswXSxxbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxGbix0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxxbilyZXR1cm4gcW47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIHd0IGluIEF0KXRoaXNbd3RdPUF0W3d0XTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBUcixGbixxbixVbjt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBBdD10aGlzLl9jdXJyZW50UnVsZXMoKSx3dD0wO3d0PEF0Lmxlbmd0aDt3dCsrKWlmKHFuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbQXRbd3RdXSkscW4mJighRm58fHFuWzBdLmxlbmd0aD5GblswXS5sZW5ndGgpKXtpZihGbj1xbixVbj13dCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihUcj10aGlzLnRlc3RfbWF0Y2gocW4sQXRbd3RdKSxUciE9PSExKXJldHVybiBUcjtpZih0aGlzLl9iYWNrdHJhY2spe0ZuPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEZuPyhUcj10aGlzLnRlc3RfbWF0Y2goRm4sQXRbVW5dKSxUciE9PSExP1RyOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgRm49dGhpcy5uZXh0KCk7cmV0dXJuIEZufHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihGbil7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEZuKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgRm49dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gRm4+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihGbil7cmV0dXJuIEZuPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoRm58fDApLEZuPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbRm5dOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEZuKXt0aGlzLmJlZ2luKEZuKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihGbixxbixVbixBdCl7c3dpdGNoKFVuKXtjYXNlIDA6cmV0dXJuIDUzO2Nhc2UgMTpyZXR1cm4gNTQ7Y2FzZSAyOnJldHVybiA1NTtjYXNlIDM6cmV0dXJuIDU2O2Nhc2UgNDpicmVhaztjYXNlIDU6YnJlYWs7Y2FzZSA2OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwzMTtjYXNlIDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDMzO2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgMTA6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTM6cmV0dXJuIDg7Y2FzZSAxNDpicmVhaztjYXNlIDE1OnJldHVybiA3O2Nhc2UgMTY6cmV0dXJuIDc7Y2FzZSAxNzpyZXR1cm4iRURHRV9TVEFURSI7Y2FzZSAxODp0aGlzLmJlZ2luKCJjYWxsYmFja19uYW1lIik7YnJlYWs7Y2FzZSAxOTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMDp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiY2FsbGJhY2tfYXJncyIpO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIDcwO2Nhc2UgMjI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjM6cmV0dXJuIDcxO2Nhc2UgMjQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjU6cmV0dXJuIlNUUiI7Y2FzZSAyNjp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDI3OnJldHVybiA3MztjYXNlIDI4OnJldHVybiB0aGlzLmJlZ2luKCJuYW1lc3BhY2UiKSw0MDtjYXNlIDI5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksODtjYXNlIDMwOmJyZWFrO2Nhc2UgMzE6cmV0dXJuIHRoaXMuYmVnaW4oIm5hbWVzcGFjZS1ib2R5IiksMzc7Y2FzZSAzMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDM5O2Nhc2UgMzM6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgMzQ6cmV0dXJuIDg7Y2FzZSAzNTpicmVhaztjYXNlIDM2OnJldHVybiJFREdFX1NUQVRFIjtjYXNlIDM3OnJldHVybiB0aGlzLmJlZ2luKCJjbGFzcyIpLDQ0O2Nhc2UgMzg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw4O2Nhc2UgMzk6YnJlYWs7Y2FzZSA0MDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwzOTtjYXNlIDQxOnJldHVybiB0aGlzLmJlZ2luKCJjbGFzcy1ib2R5IiksMzc7Y2FzZSA0MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDM5O2Nhc2UgNDM6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgNDQ6cmV0dXJuIkVER0VfU1RBVEUiO2Nhc2UgNDU6cmV0dXJuIk9QRU5fSU5fU1RSVUNUIjtjYXNlIDQ2OmJyZWFrO2Nhc2UgNDc6cmV0dXJuIk1FTUJFUiI7Y2FzZSA0ODpyZXR1cm4gNzY7Y2FzZSA0OTpyZXR1cm4gNjY7Y2FzZSA1MDpyZXR1cm4gNjc7Y2FzZSA1MTpyZXR1cm4gNjk7Y2FzZSA1MjpyZXR1cm4gNTA7Y2FzZSA1MzpyZXR1cm4gNTI7Y2FzZSA1NDpyZXR1cm4gNDU7Y2FzZSA1NTpyZXR1cm4gNDY7Y2FzZSA1NjpyZXR1cm4gNzI7Y2FzZSA1Nzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA1ODpyZXR1cm4iR0VORVJJQ1RZUEUiO2Nhc2UgNTk6dGhpcy5iZWdpbigiZ2VuZXJpYyIpO2JyZWFrO2Nhc2UgNjA6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjE6cmV0dXJuIkJRVU9URV9TVFIiO2Nhc2UgNjI6dGhpcy5iZWdpbigiYnFzdHJpbmciKTticmVhaztjYXNlIDYzOnJldHVybiA2ODtjYXNlIDY0OnJldHVybiA2ODtjYXNlIDY1OnJldHVybiA2ODtjYXNlIDY2OnJldHVybiA2ODtjYXNlIDY3OnJldHVybiA2MDtjYXNlIDY4OnJldHVybiA2MDtjYXNlIDY5OnJldHVybiA2MjtjYXNlIDcwOnJldHVybiA2MjtjYXNlIDcxOnJldHVybiA2MTtjYXNlIDcyOnJldHVybiA1OTtjYXNlIDczOnJldHVybiA2MztjYXNlIDc0OnJldHVybiA2NDtjYXNlIDc1OnJldHVybiA2NTtjYXNlIDc2OnJldHVybiAyMTtjYXNlIDc3OnJldHVybiA0MjtjYXNlIDc4OnJldHVybiA5NTtjYXNlIDc5OnJldHVybiJET1QiO2Nhc2UgODA6cmV0dXJuIlBMVVMiO2Nhc2UgODE6cmV0dXJuIDgxO2Nhc2UgODI6cmV0dXJuIDc4O2Nhc2UgODM6cmV0dXJuIDg0O2Nhc2UgODQ6cmV0dXJuIDg0O2Nhc2UgODU6cmV0dXJuIDg1O2Nhc2UgODY6cmV0dXJuIkVRVUFMUyI7Y2FzZSA4NzpyZXR1cm4iRVFVQUxTIjtjYXNlIDg4OnJldHVybiA3NDtjYXNlIDg5OnJldHVybiAxMjtjYXNlIDkwOnJldHVybiAxNDtjYXNlIDkxOnJldHVybiJQVU5DVFVBVElPTiI7Y2FzZSA5MjpyZXR1cm4gODA7Y2FzZSA5MzpyZXR1cm4gOTc7Y2FzZSA5NDpyZXR1cm4gODM7Y2FzZSA5NTpyZXR1cm4gODM7Y2FzZSA5NjpyZXR1cm4gOX19LHJ1bGVzOlsvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopLywvXig/OiUlKD8hXHspKlteXG5dKihccj9cbj8pKykvLC9eKD86JSVbXlxuXSooXHI/XG4pKikvLC9eKD86YWNjVGl0bGVccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKlx7XHMqKS8sL14oPzpbXH1dKS8sL14oPzpbXlx9XSopLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/OmNsYXNzRGlhZ3JhbS12MlxiKS8sL14oPzpjbGFzc0RpYWdyYW1cYikvLC9eKD86XFtcKlxdKS8sL14oPzpjYWxsW1xzXSspLywvXig/OlwoW1xzXSpcKSkvLC9eKD86XCgpLywvXig/OlteKF0qKS8sL14oPzpcKSkvLC9eKD86W14pXSopLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OlsiXSkvLC9eKD86c3R5bGVcYikvLC9eKD86bmFtZXNwYWNlXGIpLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/Olt7XSkvLC9eKD86W31dKS8sL14oPzokKS8sL14oPzpccyooXHI/XG4pKykvLC9eKD86XHMrKS8sL14oPzpcW1wqXF0pLywvXig/OmNsYXNzXGIpLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/Olt9XSkvLC9eKD86W3tdKS8sL14oPzpbfV0pLywvXig/OiQpLywvXig/OlxbXCpcXSkvLC9eKD86W3tdKS8sL14oPzpbXG5dKS8sL14oPzpbXnt9XG5dKikvLC9eKD86Y3NzQ2xhc3NcYikvLC9eKD86Y2FsbGJhY2tcYikvLC9eKD86bGlua1xiKS8sL14oPzpjbGlja1xiKS8sL14oPzpub3RlIGZvclxiKS8sL14oPzpub3RlXGIpLywvXig/Ojw8KS8sL14oPzo+PikvLC9eKD86aHJlZlxiKS8sL14oPzpbfl0pLywvXig/Oltefl0qKS8sL14oPzp+KS8sL14oPzpbYF0pLywvXig/OlteYF0rKS8sL14oPzpbYF0pLywvXig/Ol9zZWxmXGIpLywvXig/Ol9ibGFua1xiKS8sL14oPzpfcGFyZW50XGIpLywvXig/Ol90b3BcYikvLC9eKD86XHMqPFx8KS8sL14oPzpccypcfD4pLywvXig/OlxzKj4pLywvXig/OlxzKjwpLywvXig/OlxzKlwqKS8sL14oPzpccypvXGIpLywvXig/OlxzKlwoXCkpLywvXig/Oi0tKS8sL14oPzpcLlwuKS8sL14oPzo6ezF9W146XG47XSspLywvXig/Ojp7M30pLywvXig/Oi0pLywvXig/OlwuKS8sL14oPzpcKykvLC9eKD86OikvLC9eKD86LCkvLC9eKD86IykvLC9eKD86IykvLC9eKD86JSkvLC9eKD86PSkvLC9eKD86PSkvLC9eKD86XHcrKS8sL14oPzpcWykvLC9eKD86XF0pLywvXig/OlshIiMkJSYnKissLS5gP1xcL10pLywvXig/OlswLTldKykvLC9eKD86W1x1MDBBQVx1MDBCNVx1MDBCQVx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XXxbXHUwMEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N118W1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVdfFtcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQV18W1x1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRV18W1x1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFdfFtcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMF18W1x1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5NzddfFtcdTA5NzktXHUwOTdGXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXXxbXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXXxbXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzldfFtcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOF18W1x1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ118W1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q118W1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTldfFtcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMF18W1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNEXXxbXHUwQzU4XHUwQzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM118W1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMF18W1x1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFdfFtcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXXxbXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXXxbXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZdfFtcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQV18W1x1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFdfFtcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXXxbXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBdfFtcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMF18W1x1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXXxbXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFdfFtcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN118W1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNdfFtcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNl18W1x1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZdfFtcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ118W1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURdfFtcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXXxbXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNdfFtcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXXxbXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XXxbXHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE4M1x1MjE4NF18W1x1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNdfFtcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XXxbXHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VdfFtcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNVx1MzAwNlx1MzAzMS1cdTMwMzVcdTMwM0JcdTMwM0NdfFtcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRF18W1x1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXXxbXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQl18W1x1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjk3XHVBNkEwLVx1QTZFNVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XXxbXHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVdfFtcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQl18W1x1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XXxbXHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNV18W1x1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRdfFtcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRV18W1x1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXXxbXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZdfFtcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RdfFtcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ118W1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXXxbXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdKS8sL14oPzpccykvLC9eKD86XHMpLywvXig/OiQpL10sY29uZGl0aW9uczp7Im5hbWVzcGFjZS1ib2R5Ijp7cnVsZXM6WzI2LDMyLDMzLDM0LDM1LDM2LDM3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU5LDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk2XSxpbmNsdXNpdmU6ITF9LG5hbWVzcGFjZTp7cnVsZXM6WzI2LDI4LDI5LDMwLDMxLDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU5LDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk2XSxpbmNsdXNpdmU6ITF9LCJjbGFzcy1ib2R5Ijp7cnVsZXM6WzI2LDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU5LDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk2XSxpbmNsdXNpdmU6ITF9LGNsYXNzOntydWxlczpbMjYsMzgsMzksNDAsNDEsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTksNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzExLDEyLDI2LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU5LDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk2XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzksMjYsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTksNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTZdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbNywyNiw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1OSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5Nl0saW5jbHVzaXZlOiExfSxjYWxsYmFja19hcmdzOntydWxlczpbMjIsMjMsMjYsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTksNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTZdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tfbmFtZTp7cnVsZXM6WzE5LDIwLDIxLDI2LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU5LDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk2XSxpbmNsdXNpdmU6ITF9LGhyZWY6e3J1bGVzOlsyNiw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1OSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5Nl0saW5jbHVzaXZlOiExfSxzdHJ1Y3Q6e3J1bGVzOlsyNiw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1OSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5Nl0saW5jbHVzaXZlOiExfSxnZW5lcmljOntydWxlczpbMjYsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTZdLGluY2x1c2l2ZTohMX0sYnFzdHJpbmc6e3J1bGVzOlsyNiw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5Nl0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsyNCwyNSwyNiw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1OSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5Nl0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw4LDEwLDEzLDE0LDE1LDE2LDE3LDE4LDI2LDI3LDI4LDM3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU5LDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIGFvfSgpO3hpLmxleGVyPU1hO2Z1bmN0aW9uIHpzKCl7dGhpcy55eT17fX1yZXR1cm4genMucHJvdG90eXBlPXhpLHhpLlBhcnNlcj16cyxuZXcgenN9KCk7X3ZlLnBhcnNlcj1fdmU7Y29uc3QgS0dlPV92ZSxXR2U9WyIjIiwiKyIsIn4iLCItIiwiIl07Y2xhc3MgWUdle2NvbnN0cnVjdG9yKHMsdSl7dGhpcy5tZW1iZXJUeXBlPXUsdGhpcy52aXNpYmlsaXR5PSIiLHRoaXMuY2xhc3NpZmllcj0iIjtjb25zdCBkPVlmKHMscXQoKSk7dGhpcy5wYXJzZU1lbWJlcihkKX1nZXREaXNwbGF5RGV0YWlscygpe2xldCBzPXRoaXMudmlzaWJpbGl0eStxRih0aGlzLmlkKTt0aGlzLm1lbWJlclR5cGU9PT0ibWV0aG9kIiYmKHMrPWAoJHtxRih0aGlzLnBhcmFtZXRlcnMudHJpbSgpKX0pYCx0aGlzLnJldHVyblR5cGUmJihzKz0iIDogIitxRih0aGlzLnJldHVyblR5cGUpKSkscz1zLnRyaW0oKTtjb25zdCB1PXRoaXMucGFyc2VDbGFzc2lmaWVyKCk7cmV0dXJue2Rpc3BsYXlUZXh0OnMsY3NzU3R5bGU6dX19cGFyc2VNZW1iZXIocyl7bGV0IHU9IiI7aWYodGhpcy5tZW1iZXJUeXBlPT09Im1ldGhvZCIpe2NvbnN0IGQ9LyhbIyt+LV0pPyguKylcKCguKilcKShbXHMkKl0pPyguKikoWyQqXSk/LyxwPXMubWF0Y2goZCk7aWYocCl7Y29uc3Qgdj1wWzFdP3BbMV0udHJpbSgpOiIiO2lmKFdHZS5pbmNsdWRlcyh2KSYmKHRoaXMudmlzaWJpbGl0eT12KSx0aGlzLmlkPXBbMl0udHJpbSgpLHRoaXMucGFyYW1ldGVycz1wWzNdP3BbM10udHJpbSgpOiIiLHU9cFs0XT9wWzRdLnRyaW0oKToiIix0aGlzLnJldHVyblR5cGU9cFs1XT9wWzVdLnRyaW0oKToiIix1PT09IiIpe2NvbnN0IGI9dGhpcy5yZXR1cm5UeXBlLnN1YnN0cmluZyh0aGlzLnJldHVyblR5cGUubGVuZ3RoLTEpO2IubWF0Y2goL1skKl0vKSYmKHU9Yix0aGlzLnJldHVyblR5cGU9dGhpcy5yZXR1cm5UeXBlLnN1YnN0cmluZygwLHRoaXMucmV0dXJuVHlwZS5sZW5ndGgtMSkpfX19ZWxzZXtjb25zdCBkPXMubGVuZ3RoLHA9cy5zdWJzdHJpbmcoMCwxKSx2PXMuc3Vic3RyaW5nKGQtMSk7V0dlLmluY2x1ZGVzKHApJiYodGhpcy52aXNpYmlsaXR5PXApLHYubWF0Y2goL1skKl0vKSYmKHU9diksdGhpcy5pZD1zLnN1YnN0cmluZyh0aGlzLnZpc2liaWxpdHk9PT0iIj8wOjEsdT09PSIiP2Q6ZC0xKX10aGlzLmNsYXNzaWZpZXI9dX1wYXJzZUNsYXNzaWZpZXIoKXtzd2l0Y2godGhpcy5jbGFzc2lmaWVyKXtjYXNlIioiOnJldHVybiJmb250LXN0eWxlOml0YWxpYzsiO2Nhc2UiJCI6cmV0dXJuInRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IjtkZWZhdWx0OnJldHVybiIifX19Y29uc3QgbUo9ImNsYXNzSWQtIjtsZXQgQXZlPVtdLHhoPXt9LHZKPVtdLFhHZT0wLFI5PXt9LEx2ZT0wLFdSPVtdO2NvbnN0IHRTPWk9PmNpLnNhbml0aXplVGV4dChpLHF0KCkpLG5TPWZ1bmN0aW9uKGkpe2NvbnN0IHM9Y2kuc2FuaXRpemVUZXh0KGkscXQoKSk7bGV0IHU9IiIsZD1zO2lmKHMuaW5kZXhPZigifiIpPjApe2NvbnN0IHA9cy5zcGxpdCgifiIpO2Q9dFMocFswXSksdT10UyhwWzFdKX1yZXR1cm57Y2xhc3NOYW1lOmQsdHlwZTp1fX0sRWluPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1jaS5zYW5pdGl6ZVRleHQoaSxxdCgpKTtzJiYocz10UyhzKSk7Y29uc3R7Y2xhc3NOYW1lOmR9PW5TKHUpO3hoW2RdLmxhYmVsPXN9LHdKPWZ1bmN0aW9uKGkpe2NvbnN0IHM9Y2kuc2FuaXRpemVUZXh0KGkscXQoKSkse2NsYXNzTmFtZTp1LHR5cGU6ZH09blMocyk7aWYoT2JqZWN0Lmhhc093bih4aCx1KSlyZXR1cm47Y29uc3QgcD1jaS5zYW5pdGl6ZVRleHQodSxxdCgpKTt4aFtwXT17aWQ6cCx0eXBlOmQsbGFiZWw6cCxjc3NDbGFzc2VzOltdLG1ldGhvZHM6W10sbWVtYmVyczpbXSxhbm5vdGF0aW9uczpbXSxzdHlsZXM6W10sZG9tSWQ6bUorcCsiLSIrWEdlfSxYR2UrK30sUUdlPWZ1bmN0aW9uKGkpe2NvbnN0IHM9Y2kuc2FuaXRpemVUZXh0KGkscXQoKSk7aWYocyBpbiB4aClyZXR1cm4geGhbc10uZG9tSWQ7dGhyb3cgbmV3IEVycm9yKCJDbGFzcyBub3QgZm91bmQ6ICIrcyl9LFRpbj1mdW5jdGlvbigpe0F2ZT1bXSx4aD17fSx2Sj1bXSxXUj1bXSxXUi5wdXNoKFpHZSksUjk9e30sTHZlPTAsUGcoKX0sQ2luPWZ1bmN0aW9uKGkpe3JldHVybiB4aFtpXX0sU2luPWZ1bmN0aW9uKCl7cmV0dXJuIHhofSxfaW49ZnVuY3Rpb24oKXtyZXR1cm4gQXZlfSxBaW49ZnVuY3Rpb24oKXtyZXR1cm4gdkp9LExpbj1mdW5jdGlvbihpKXtYZS5kZWJ1ZygiQWRkaW5nIHJlbGF0aW9uOiAiK0pTT04uc3RyaW5naWZ5KGkpKSx3SihpLmlkMSksd0ooaS5pZDIpLGkuaWQxPW5TKGkuaWQxKS5jbGFzc05hbWUsaS5pZDI9blMoaS5pZDIpLmNsYXNzTmFtZSxpLnJlbGF0aW9uVGl0bGUxPWNpLnNhbml0aXplVGV4dChpLnJlbGF0aW9uVGl0bGUxLnRyaW0oKSxxdCgpKSxpLnJlbGF0aW9uVGl0bGUyPWNpLnNhbml0aXplVGV4dChpLnJlbGF0aW9uVGl0bGUyLnRyaW0oKSxxdCgpKSxBdmUucHVzaChpKX0sTWluPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1uUyhpKS5jbGFzc05hbWU7eGhbdV0uYW5ub3RhdGlvbnMucHVzaChzKX0sSkdlPWZ1bmN0aW9uKGkscyl7d0ooaSk7Y29uc3QgdT1uUyhpKS5jbGFzc05hbWUsZD14aFt1XTtpZih0eXBlb2Ygcz09InN0cmluZyIpe2NvbnN0IHA9cy50cmltKCk7cC5zdGFydHNXaXRoKCI8PCIpJiZwLmVuZHNXaXRoKCI+PiIpP2QuYW5ub3RhdGlvbnMucHVzaCh0UyhwLnN1YnN0cmluZygyLHAubGVuZ3RoLTIpKSk6cC5pbmRleE9mKCIpIik+MD9kLm1ldGhvZHMucHVzaChuZXcgWUdlKHAsIm1ldGhvZCIpKTpwJiZkLm1lbWJlcnMucHVzaChuZXcgWUdlKHAsImF0dHJpYnV0ZSIpKX19LERpbj1mdW5jdGlvbihpLHMpe0FycmF5LmlzQXJyYXkocykmJihzLnJldmVyc2UoKSxzLmZvckVhY2godT0+SkdlKGksdSkpKX0sSWluPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT17aWQ6YG5vdGUke3ZKLmxlbmd0aH1gLGNsYXNzOnMsdGV4dDppfTt2Si5wdXNoKHUpfSxPaW49ZnVuY3Rpb24oaSl7cmV0dXJuIGkuc3RhcnRzV2l0aCgiOiIpJiYoaT1pLnN1YnN0cmluZygxKSksdFMoaS50cmltKCkpfSxNdmU9ZnVuY3Rpb24oaSxzKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbih1KXtsZXQgZD11O3VbMF0ubWF0Y2goL1xkLykmJihkPW1KK2QpLHhoW2RdIT09dm9pZCAwJiZ4aFtkXS5jc3NDbGFzc2VzLnB1c2gocyl9KX0sTmluPWZ1bmN0aW9uKGkscyl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24odSl7cyE9PXZvaWQgMCYmKHhoW3VdLnRvb2x0aXA9dFMocykpfSl9LFBpbj1mdW5jdGlvbihpLHMpe3JldHVybiBzP1I5W3NdLmNsYXNzZXNbaV0udG9vbHRpcDp4aFtpXS50b29sdGlwfSxCaW49ZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9cXQoKTtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihwKXtsZXQgdj1wO3BbMF0ubWF0Y2goL1xkLykmJih2PW1KK3YpLHhoW3ZdIT09dm9pZCAwJiYoeGhbdl0ubGluaz1Bby5mb3JtYXRVcmwocyxkKSxkLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCI/eGhbdl0ubGlua1RhcmdldD0iX3RvcCI6dHlwZW9mIHU9PSJzdHJpbmciP3hoW3ZdLmxpbmtUYXJnZXQ9dFModSk6eGhbdl0ubGlua1RhcmdldD0iX2JsYW5rIil9KSxNdmUoaSwiY2xpY2thYmxlIil9LEZpbj1mdW5jdGlvbihpLHMsdSl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZCl7UmluKGQscyx1KSx4aFtkXS5oYXZlQ2FsbGJhY2s9ITB9KSxNdmUoaSwiY2xpY2thYmxlIil9LFJpbj1mdW5jdGlvbihpLHMsdSl7Y29uc3QgZD1jaS5zYW5pdGl6ZVRleHQoaSxxdCgpKTtpZihxdCgpLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UifHxzPT09dm9pZCAwKXJldHVybjtjb25zdCB2PWQ7aWYoeGhbdl0hPT12b2lkIDApe2NvbnN0IGI9UUdlKHYpO2xldCB5PVtdO2lmKHR5cGVvZiB1PT0ic3RyaW5nIil7eT11LnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2ZvcihsZXQgVD0wO1Q8eS5sZW5ndGg7VCsrKXtsZXQgXz15W1RdLnRyaW0oKTtfLmNoYXJBdCgwKT09PSciJyYmXy5jaGFyQXQoXy5sZW5ndGgtMSk9PT0nIicmJihfPV8uc3Vic3RyKDEsXy5sZW5ndGgtMikpLHlbVF09X319eS5sZW5ndGg9PT0wJiZ5LnB1c2goYiksV1IucHVzaChmdW5jdGlvbigpe2NvbnN0IFQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPSIke2J9Il1gKTtUIT09bnVsbCYmVC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtBby5ydW5GdW5jKHMsLi4ueSl9LCExKX0pfX0samluPWZ1bmN0aW9uKGkpe1dSLmZvckVhY2goZnVuY3Rpb24ocyl7cyhpKX0pfSwkaW49e0xJTkU6MCxET1RURURfTElORToxfSx6aW49e0FHR1JFR0FUSU9OOjAsRVhURU5TSU9OOjEsQ09NUE9TSVRJT046MixERVBFTkRFTkNZOjMsTE9MTElQT1A6NH0sWkdlPWZ1bmN0aW9uKGkpe2xldCBzPUlyKCIubWVybWFpZFRvb2x0aXAiKTsocy5fZ3JvdXBzfHxzKVswXVswXT09PW51bGwmJihzPUlyKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsIm1lcm1haWRUb29sdGlwIikuc3R5bGUoIm9wYWNpdHkiLDApKSxJcihpKS5zZWxlY3QoInN2ZyIpLnNlbGVjdEFsbCgiZy5ub2RlIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtjb25zdCBwPUlyKHRoaXMpO2lmKHAuYXR0cigidGl0bGUiKT09PW51bGwpcmV0dXJuO2NvbnN0IGI9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtzLnRyYW5zaXRpb24oKS5kdXJhdGlvbigyMDApLnN0eWxlKCJvcGFjaXR5IiwiLjkiKSxzLnRleHQocC5hdHRyKCJ0aXRsZSIpKS5zdHlsZSgibGVmdCIsd2luZG93LnNjcm9sbFgrYi5sZWZ0KyhiLnJpZ2h0LWIubGVmdCkvMisicHgiKS5zdHlsZSgidG9wIix3aW5kb3cuc2Nyb2xsWStiLnRvcC0xNCtkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCsicHgiKSxzLmh0bWwocy5odG1sKCkucmVwbGFjZSgvJmx0O2JyXC8mZ3Q7L2csIjxici8+IikpLHAuY2xhc3NlZCgiaG92ZXIiLCEwKX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtzLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKCJvcGFjaXR5IiwwKSxJcih0aGlzKS5jbGFzc2VkKCJob3ZlciIsITEpfSl9O1dSLnB1c2goWkdlKTtsZXQgZUtlPSJUQiI7Y29uc3QgeUo9e3NldEFjY1RpdGxlOkJnLGdldEFjY1RpdGxlOkNwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLHNldEFjY0Rlc2NyaXB0aW9uOlNwLGdldENvbmZpZzooKT0+cXQoKS5jbGFzcyxhZGRDbGFzczp3SixiaW5kRnVuY3Rpb25zOmppbixjbGVhcjpUaW4sZ2V0Q2xhc3M6Q2luLGdldENsYXNzZXM6U2luLGdldE5vdGVzOkFpbixhZGRBbm5vdGF0aW9uOk1pbixhZGROb3RlOklpbixnZXRSZWxhdGlvbnM6X2luLGFkZFJlbGF0aW9uOkxpbixnZXREaXJlY3Rpb246KCk9PmVLZSxzZXREaXJlY3Rpb246aT0+e2VLZT1pfSxhZGRNZW1iZXI6SkdlLGFkZE1lbWJlcnM6RGluLGNsZWFudXBMYWJlbDpPaW4sbGluZVR5cGU6JGluLHJlbGF0aW9uVHlwZTp6aW4sc2V0Q2xpY2tFdmVudDpGaW4sc2V0Q3NzQ2xhc3M6TXZlLHNldExpbms6QmluLGdldFRvb2x0aXA6UGluLHNldFRvb2x0aXA6TmluLGxvb2tVcERvbUlkOlFHZSxzZXREaWFncmFtVGl0bGU6Y20sZ2V0RGlhZ3JhbVRpdGxlOkFwLHNldENsYXNzTGFiZWw6RWluLGFkZE5hbWVzcGFjZTpmdW5jdGlvbihpKXtSOVtpXT09PXZvaWQgMCYmKFI5W2ldPXtpZDppLGNsYXNzZXM6e30sY2hpbGRyZW46e30sZG9tSWQ6bUoraSsiLSIrTHZlfSxMdmUrKyl9LGFkZENsYXNzZXNUb05hbWVzcGFjZTpmdW5jdGlvbihpLHMpe2lmKFI5W2ldIT09dm9pZCAwKWZvcihjb25zdCB1IG9mIHMpe2NvbnN0e2NsYXNzTmFtZTpkfT1uUyh1KTt4aFtkXS5wYXJlbnQ9aSxSOVtpXS5jbGFzc2VzW2RdPXhoW2RdfX0sZ2V0TmFtZXNwYWNlOmZ1bmN0aW9uKGkpe3JldHVybiBSOVtpXX0sZ2V0TmFtZXNwYWNlczpmdW5jdGlvbigpe3JldHVybiBSOX0sc2V0Q3NzU3R5bGU6ZnVuY3Rpb24oaSxzKXtjb25zdCB1PXhoW2ldO2lmKCEoIXN8fCF1KSlmb3IoY29uc3QgZCBvZiBzKWQuaW5jbHVkZXMoIiwiKT91LnN0eWxlcy5wdXNoKC4uLmQuc3BsaXQoIiwiKSk6dS5zdHlsZXMucHVzaChkKX19LHRLZT1pPT5gZy5jbGFzc0dyb3VwIHRleHQgewogIGZpbGw6ICR7aS5ub2RlQm9yZGVyfHxpLmNsYXNzVGV4dH07CiAgc3Ryb2tlOiBub25lOwogIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgZm9udC1zaXplOiAxMHB4OwoKICAudGl0bGUgewogICAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKICB9Cgp9Cgoubm9kZUxhYmVsLCAuZWRnZUxhYmVsIHsKICBjb2xvcjogJHtpLmNsYXNzVGV4dH07Cn0KLmVkZ2VMYWJlbCAubGFiZWwgcmVjdCB7CiAgZmlsbDogJHtpLm1haW5Ca2d9Owp9Ci5sYWJlbCB0ZXh0IHsKICBmaWxsOiAke2kuY2xhc3NUZXh0fTsKfQouZWRnZUxhYmVsIC5sYWJlbCBzcGFuIHsKICBiYWNrZ3JvdW5kOiAke2kubWFpbkJrZ307Cn0KCi5jbGFzc1RpdGxlIHsKICBmb250LXdlaWdodDogYm9sZGVyOwp9Ci5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7aS5tYWluQmtnfTsKICAgIHN0cm9rZTogJHtpLm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKCi5kaXZpZGVyIHsKICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCmcuY2xpY2thYmxlIHsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCmcuY2xhc3NHcm91cCByZWN0IHsKICBmaWxsOiAke2kubWFpbkJrZ307CiAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07Cn0KCmcuY2xhc3NHcm91cCBsaW5lIHsKICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCi5jbGFzc0xhYmVsIC5ib3ggewogIHN0cm9rZTogbm9uZTsKICBzdHJva2Utd2lkdGg6IDA7CiAgZmlsbDogJHtpLm1haW5Ca2d9OwogIG9wYWNpdHk6IDAuNTsKfQoKLmNsYXNzTGFiZWwgLmxhYmVsIHsKICBmaWxsOiAke2kubm9kZUJvcmRlcn07CiAgZm9udC1zaXplOiAxMHB4Owp9CgoucmVsYXRpb24gewogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwogIGZpbGw6IG5vbmU7Cn0KCi5kYXNoZWQtbGluZXsKICBzdHJva2UtZGFzaGFycmF5OiAzOwp9CgouZG90dGVkLWxpbmV7CiAgc3Ryb2tlLWRhc2hhcnJheTogMSAyOwp9CgojY29tcG9zaXRpb25TdGFydCwgLmNvbXBvc2l0aW9uIHsKICBmaWxsOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNjb21wb3NpdGlvbkVuZCwgLmNvbXBvc2l0aW9uIHsKICBmaWxsOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHsKICBmaWxsOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHsKICBmaWxsOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNleHRlbnNpb25TdGFydCwgLmV4dGVuc2lvbiB7CiAgZmlsbDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojZXh0ZW5zaW9uRW5kLCAuZXh0ZW5zaW9uIHsKICBmaWxsOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNhZ2dyZWdhdGlvblN0YXJ0LCAuYWdncmVnYXRpb24gewogIGZpbGw6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2FnZ3JlZ2F0aW9uRW5kLCAuYWdncmVnYXRpb24gewogIGZpbGw6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2xvbGxpcG9wU3RhcnQsIC5sb2xsaXBvcCB7CiAgZmlsbDogJHtpLm1haW5Ca2d9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2xvbGxpcG9wRW5kLCAubG9sbGlwb3AgewogIGZpbGw6ICR7aS5tYWluQmtnfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCi5lZGdlVGVybWluYWxzIHsKICBmb250LXNpemU6IDExcHg7CiAgbGluZS1oZWlnaHQ6IGluaXRpYWw7Cn0KCi5jbGFzc1RpdGxlVGV4dCB7CiAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICBmb250LXNpemU6IDE4cHg7CiAgZmlsbDogJHtpLnRleHRDb2xvcn07Cn0KYDtsZXQgbktlPTA7Y29uc3QgcWluPWZ1bmN0aW9uKGkscyx1LGQscCl7Y29uc3Qgdj1mdW5jdGlvbihvZSl7c3dpdGNoKG9lKXtjYXNlIHAuZGIucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OOnJldHVybiJhZ2dyZWdhdGlvbiI7Y2FzZSBwLmRiLnJlbGF0aW9uVHlwZS5FWFRFTlNJT046cmV0dXJuImV4dGVuc2lvbiI7Y2FzZSBwLmRiLnJlbGF0aW9uVHlwZS5DT01QT1NJVElPTjpyZXR1cm4iY29tcG9zaXRpb24iO2Nhc2UgcC5kYi5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTpyZXR1cm4iZGVwZW5kZW5jeSI7Y2FzZSBwLmRiLnJlbGF0aW9uVHlwZS5MT0xMSVBPUDpyZXR1cm4ibG9sbGlwb3AifX07cy5wb2ludHM9cy5wb2ludHMuZmlsdGVyKG9lPT4hTnVtYmVyLmlzTmFOKG9lLnkpKTtjb25zdCBiPXMucG9pbnRzLHk9azcoKS54KGZ1bmN0aW9uKG9lKXtyZXR1cm4gb2UueH0pLnkoZnVuY3Rpb24ob2Upe3JldHVybiBvZS55fSkuY3VydmUoRkYpLFQ9aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIix5KGIpKS5hdHRyKCJpZCIsImVkZ2UiK25LZSkuYXR0cigiY2xhc3MiLCJyZWxhdGlvbiIpO2xldCBfPSIiO2QuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKF89d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gsXz1fLnJlcGxhY2UoL1woL2csIlxcKCIpLF89Xy5yZXBsYWNlKC9cKS9nLCJcXCkiKSksdS5yZWxhdGlvbi5saW5lVHlwZT09MSYmVC5hdHRyKCJjbGFzcyIsInJlbGF0aW9uIGRhc2hlZC1saW5lIiksdS5yZWxhdGlvbi5saW5lVHlwZT09MTAmJlQuYXR0cigiY2xhc3MiLCJyZWxhdGlvbiBkb3R0ZWQtbGluZSIpLHUucmVsYXRpb24udHlwZTEhPT0ibm9uZSImJlQuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrXysiIyIrdih1LnJlbGF0aW9uLnR5cGUxKSsiU3RhcnQpIiksdS5yZWxhdGlvbi50eXBlMiE9PSJub25lIiYmVC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrXysiIyIrdih1LnJlbGF0aW9uLnR5cGUyKSsiRW5kKSIpO2xldCBBLFA7Y29uc3QgUj1zLnBvaW50cy5sZW5ndGg7bGV0IEY9QW8uY2FsY0xhYmVsUG9zaXRpb24ocy5wb2ludHMpO0E9Ri54LFA9Ri55O2xldCBqLEssZWUsaWU7aWYoUiUyIT09MCYmUj4xKXtsZXQgb2U9QW8uY2FsY0NhcmRpbmFsaXR5UG9zaXRpb24odS5yZWxhdGlvbi50eXBlMSE9PSJub25lIixzLnBvaW50cyxzLnBvaW50c1swXSkscGU9QW8uY2FsY0NhcmRpbmFsaXR5UG9zaXRpb24odS5yZWxhdGlvbi50eXBlMiE9PSJub25lIixzLnBvaW50cyxzLnBvaW50c1tSLTFdKTtYZS5kZWJ1ZygiY2FyZGluYWxpdHlfMV9wb2ludCAiK0pTT04uc3RyaW5naWZ5KG9lKSksWGUuZGVidWcoImNhcmRpbmFsaXR5XzJfcG9pbnQgIitKU09OLnN0cmluZ2lmeShwZSkpLGo9b2UueCxLPW9lLnksZWU9cGUueCxpZT1wZS55fWlmKHUudGl0bGUhPT12b2lkIDApe2NvbnN0IG9lPWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjbGFzc0xhYmVsIikscGU9b2UuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoIngiLEEpLmF0dHIoInkiLFApLmF0dHIoImZpbGwiLCJyZWQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQodS50aXRsZSk7d2luZG93LmxhYmVsPXBlO2NvbnN0IGJlPXBlLm5vZGUoKS5nZXRCQm94KCk7b2UuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJib3giKS5hdHRyKCJ4IixiZS54LWQucGFkZGluZy8yKS5hdHRyKCJ5IixiZS55LWQucGFkZGluZy8yKS5hdHRyKCJ3aWR0aCIsYmUud2lkdGgrZC5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGJlLmhlaWdodCtkLnBhZGRpbmcpfVhlLmluZm8oIlJlbmRlcmluZyByZWxhdGlvbiAiK0pTT04uc3RyaW5naWZ5KHUpKSx1LnJlbGF0aW9uVGl0bGUxIT09dm9pZCAwJiZ1LnJlbGF0aW9uVGl0bGUxIT09Im5vbmUiJiZpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2FyZGluYWxpdHkiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInR5cGUxIikuYXR0cigieCIsaikuYXR0cigieSIsSykuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigiZm9udC1zaXplIiwiNiIpLnRleHQodS5yZWxhdGlvblRpdGxlMSksdS5yZWxhdGlvblRpdGxlMiE9PXZvaWQgMCYmdS5yZWxhdGlvblRpdGxlMiE9PSJub25lIiYmaS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNhcmRpbmFsaXR5IikuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJ0eXBlMiIpLmF0dHIoIngiLGVlKS5hdHRyKCJ5IixpZSkuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigiZm9udC1zaXplIiwiNiIpLnRleHQodS5yZWxhdGlvblRpdGxlMiksbktlKyt9LEhpbj1mdW5jdGlvbihpLHMsdSxkKXtYZS5kZWJ1ZygiUmVuZGVyaW5nIGNsYXNzICIscyx1KTtjb25zdCBwPXMuaWQsdj17aWQ6cCxsYWJlbDpzLmlkLHdpZHRoOjAsaGVpZ2h0OjB9LGI9aS5hcHBlbmQoImciKS5hdHRyKCJpZCIsZC5kYi5sb29rVXBEb21JZChwKSkuYXR0cigiY2xhc3MiLCJjbGFzc0dyb3VwIik7bGV0IHk7cy5saW5rP3k9Yi5hcHBlbmQoInN2ZzphIikuYXR0cigieGxpbms6aHJlZiIscy5saW5rKS5hdHRyKCJ0YXJnZXQiLHMubGlua1RhcmdldCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieSIsdS50ZXh0SGVpZ2h0K3UucGFkZGluZykuYXR0cigieCIsMCk6eT1iLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLHUudGV4dEhlaWdodCt1LnBhZGRpbmcpLmF0dHIoIngiLDApO2xldCBUPSEwO3MuYW5ub3RhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihwZSl7Y29uc3QgYmU9eS5hcHBlbmQoInRzcGFuIikudGV4dCgiwqsiK3BlKyLCuyIpO1R8fGJlLmF0dHIoImR5Iix1LnRleHRIZWlnaHQpLFQ9ITF9KTtsZXQgXz1yS2Uocyk7Y29uc3QgQT15LmFwcGVuZCgidHNwYW4iKS50ZXh0KF8pLmF0dHIoImNsYXNzIiwidGl0bGUiKTtUfHxBLmF0dHIoImR5Iix1LnRleHRIZWlnaHQpO2NvbnN0IFA9eS5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodDtsZXQgUixGLGo7aWYocy5tZW1iZXJzLmxlbmd0aD4wKXtSPWIuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoInkxIix1LnBhZGRpbmcrUCt1LmRpdmlkZXJNYXJnaW4vMikuYXR0cigieTIiLHUucGFkZGluZytQK3UuZGl2aWRlck1hcmdpbi8yKTtjb25zdCBwZT1iLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHUucGFkZGluZykuYXR0cigieSIsUCt1LmRpdmlkZXJNYXJnaW4rdS50ZXh0SGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjbGFzcyIsImNsYXNzVGV4dCIpO1Q9ITAscy5tZW1iZXJzLmZvckVhY2goZnVuY3Rpb24oYmUpe2lLZShwZSxiZSxULHUpLFQ9ITF9KSxGPXBlLm5vZGUoKS5nZXRCQm94KCl9aWYocy5tZXRob2RzLmxlbmd0aD4wKXtqPWIuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoInkxIix1LnBhZGRpbmcrUCt1LmRpdmlkZXJNYXJnaW4rRi5oZWlnaHQpLmF0dHIoInkyIix1LnBhZGRpbmcrUCt1LmRpdmlkZXJNYXJnaW4rRi5oZWlnaHQpO2NvbnN0IHBlPWIuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsdS5wYWRkaW5nKS5hdHRyKCJ5IixQKzIqdS5kaXZpZGVyTWFyZ2luK0YuaGVpZ2h0K3UudGV4dEhlaWdodCkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY2xhc3MiLCJjbGFzc1RleHQiKTtUPSEwLHMubWV0aG9kcy5mb3JFYWNoKGZ1bmN0aW9uKGJlKXtpS2UocGUsYmUsVCx1KSxUPSExfSl9Y29uc3QgSz1iLm5vZGUoKS5nZXRCQm94KCk7dmFyIGVlPSIgIjtzLmNzc0NsYXNzZXMubGVuZ3RoPjAmJihlZT1lZStzLmNzc0NsYXNzZXMuam9pbigiICIpKTtjb25zdCBvZT1iLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIixLLndpZHRoKzIqdS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLEsuaGVpZ2h0K3UucGFkZGluZysuNSp1LmRpdmlkZXJNYXJnaW4pLmF0dHIoImNsYXNzIixlZSkubm9kZSgpLmdldEJCb3goKS53aWR0aDtyZXR1cm4geS5ub2RlKCkuY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHBlKXtwZS5zZXRBdHRyaWJ1dGUoIngiLChvZS1wZS5nZXRCQm94KCkud2lkdGgpLzIpfSkscy50b29sdGlwJiZ5Lmluc2VydCgidGl0bGUiKS50ZXh0KHMudG9vbHRpcCksUiYmUi5hdHRyKCJ4MiIsb2UpLGomJmouYXR0cigieDIiLG9lKSx2LndpZHRoPW9lLHYuaGVpZ2h0PUsuaGVpZ2h0K3UucGFkZGluZysuNSp1LmRpdmlkZXJNYXJnaW4sdn0scktlPWZ1bmN0aW9uKGkpe2xldCBzPWkuaWQ7cmV0dXJuIGkudHlwZSYmKHMrPSI8IitxRihpLnR5cGUpKyI+Iiksc30sVmluPWZ1bmN0aW9uKGkscyx1LGQpe1hlLmRlYnVnKCJSZW5kZXJpbmcgbm90ZSAiLHMsdSk7Y29uc3QgcD1zLmlkLHY9e2lkOnAsdGV4dDpzLnRleHQsd2lkdGg6MCxoZWlnaHQ6MH0sYj1pLmFwcGVuZCgiZyIpLmF0dHIoImlkIixwKS5hdHRyKCJjbGFzcyIsImNsYXNzR3JvdXAiKTtsZXQgeT1iLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLHUudGV4dEhlaWdodCt1LnBhZGRpbmcpLmF0dHIoIngiLDApO2NvbnN0IFQ9SlNPTi5wYXJzZShgIiR7cy50ZXh0fSJgKS5zcGxpdChgCmApO1QuZm9yRWFjaChmdW5jdGlvbihSKXtYZS5kZWJ1ZyhgQWRkaW5nIGxpbmU6ICR7Un1gKSx5LmFwcGVuZCgidHNwYW4iKS50ZXh0KFIpLmF0dHIoImNsYXNzIiwidGl0bGUiKS5hdHRyKCJkeSIsdS50ZXh0SGVpZ2h0KX0pO2NvbnN0IF89Yi5ub2RlKCkuZ2V0QkJveCgpLFA9Yi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsXy53aWR0aCsyKnUucGFkZGluZykuYXR0cigiaGVpZ2h0IixfLmhlaWdodCtULmxlbmd0aCp1LnRleHRIZWlnaHQrdS5wYWRkaW5nKy41KnUuZGl2aWRlck1hcmdpbikubm9kZSgpLmdldEJCb3goKS53aWR0aDtyZXR1cm4geS5ub2RlKCkuY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKFIpe1Iuc2V0QXR0cmlidXRlKCJ4IiwoUC1SLmdldEJCb3goKS53aWR0aCkvMil9KSx2LndpZHRoPVAsdi5oZWlnaHQ9Xy5oZWlnaHQrVC5sZW5ndGgqdS50ZXh0SGVpZ2h0K3UucGFkZGluZysuNSp1LmRpdmlkZXJNYXJnaW4sdn0saUtlPWZ1bmN0aW9uKGkscyx1LGQpe2NvbnN0e2Rpc3BsYXlUZXh0OnAsY3NzU3R5bGU6dn09cy5nZXREaXNwbGF5RGV0YWlscygpLGI9aS5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsZC5wYWRkaW5nKS50ZXh0KHApO3YhPT0iIiYmYi5hdHRyKCJzdHlsZSIscy5jc3NTdHlsZSksdXx8Yi5hdHRyKCJkeSIsZC50ZXh0SGVpZ2h0KX0sRHZlPXtnZXRDbGFzc1RpdGxlU3RyaW5nOnJLZSxkcmF3Q2xhc3M6SGluLGRyYXdFZGdlOnFpbixkcmF3Tm90ZTpWaW59O2xldCB4Sj17fTtjb25zdCBrSj0yMCxZUj1mdW5jdGlvbihpKXtjb25zdCBzPU9iamVjdC5lbnRyaWVzKHhKKS5maW5kKHU9PnVbMV0ubGFiZWw9PT1pKTtpZihzKXJldHVybiBzWzBdfSxVaW49ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSw3IEwxOCwxMyBWIDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImV4dGVuc2lvbkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgViAxMyBMMTgsNyBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwiZXh0ZW5zaW9uIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY29tcG9zaXRpb25FbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFnZ3JlZ2F0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFnZ3JlZ2F0aW9uRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJkZXBlbmRlbmN5U3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gNSw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSxHaW49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpLR2UsZGI6eUoscmVuZGVyZXI6e2RyYXc6ZnVuY3Rpb24oaSxzLHUsZCl7Y29uc3QgcD1xdCgpLmNsYXNzO3hKPXt9LFhlLmluZm8oIlJlbmRlcmluZyBkaWFncmFtICIraSk7Y29uc3Qgdj1xdCgpLnNlY3VyaXR5TGV2ZWw7bGV0IGI7dj09PSJzYW5kYm94IiYmKGI9SXIoIiNpIitzKSk7Y29uc3QgeT1Jcih2PT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLFQ9eS5zZWxlY3QoYFtpZD0nJHtzfSddYCk7VWluKFQpO2NvbnN0IF89bmV3IEIwKHttdWx0aWdyYXBoOiEwfSk7Xy5zZXRHcmFwaCh7aXNNdWx0aUdyYXBoOiEwfSksXy5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KTtjb25zdCBBPWQuZGIuZ2V0Q2xhc3NlcygpLFA9T2JqZWN0LmtleXMoQSk7Zm9yKGNvbnN0IG9lIG9mIFApe2NvbnN0IHBlPUFbb2VdLGJlPUR2ZS5kcmF3Q2xhc3MoVCxwZSxwLGQpO3hKW2JlLmlkXT1iZSxfLnNldE5vZGUoYmUuaWQsYmUpLFhlLmluZm8oIk9yZyBoZWlnaHQ6ICIrYmUuaGVpZ2h0KX1kLmRiLmdldFJlbGF0aW9ucygpLmZvckVhY2goZnVuY3Rpb24ob2Upe1hlLmluZm8oInRqb2hvIitZUihvZS5pZDEpK1lSKG9lLmlkMikrSlNPTi5zdHJpbmdpZnkob2UpKSxfLnNldEVkZ2UoWVIob2UuaWQxKSxZUihvZS5pZDIpLHtyZWxhdGlvbjpvZX0sb2UudGl0bGV8fCJERUZBVUxUIil9KSxkLmRiLmdldE5vdGVzKCkuZm9yRWFjaChmdW5jdGlvbihvZSl7WGUuZGVidWcoYEFkZGluZyBub3RlOiAke0pTT04uc3RyaW5naWZ5KG9lKX1gKTtjb25zdCBwZT1EdmUuZHJhd05vdGUoVCxvZSxwLGQpO3hKW3BlLmlkXT1wZSxfLnNldE5vZGUocGUuaWQscGUpLG9lLmNsYXNzJiZvZS5jbGFzcyBpbiBBJiZfLnNldEVkZ2Uob2UuaWQsWVIob2UuY2xhc3MpLHtyZWxhdGlvbjp7aWQxOm9lLmlkLGlkMjpvZS5jbGFzcyxyZWxhdGlvbjp7dHlwZTE6Im5vbmUiLHR5cGUyOiJub25lIixsaW5lVHlwZToxMH19fSwiREVGQVVMVCIpfSkscUQoXyksXy5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24ob2Upe29lIT09dm9pZCAwJiZfLm5vZGUob2UpIT09dm9pZCAwJiYoWGUuZGVidWcoIk5vZGUgIitvZSsiOiAiK0pTT04uc3RyaW5naWZ5KF8ubm9kZShvZSkpKSx5LnNlbGVjdCgiIyIrKGQuZGIubG9va1VwRG9tSWQob2UpfHxvZSkpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhfLm5vZGUob2UpLngtXy5ub2RlKG9lKS53aWR0aC8yKSsiLCIrKF8ubm9kZShvZSkueS1fLm5vZGUob2UpLmhlaWdodC8yKSsiICkiKSl9KSxfLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihvZSl7b2UhPT12b2lkIDAmJl8uZWRnZShvZSkhPT12b2lkIDAmJihYZS5kZWJ1ZygiRWRnZSAiK29lLnYrIiAtPiAiK29lLncrIjogIitKU09OLnN0cmluZ2lmeShfLmVkZ2Uob2UpKSksRHZlLmRyYXdFZGdlKFQsXy5lZGdlKG9lKSxfLmVkZ2Uob2UpLnJlbGF0aW9uLHAsZCkpfSk7Y29uc3Qgaj1ULm5vZGUoKS5nZXRCQm94KCksSz1qLndpZHRoK2tKKjIsZWU9ai5oZWlnaHQra0oqMjtOZyhULGVlLEsscC51c2VNYXhXaWR0aCk7Y29uc3QgaWU9YCR7ai54LWtKfSAke2oueS1rSn0gJHtLfSAke2VlfWA7WGUuZGVidWcoYHZpZXdCb3ggJHtpZX1gKSxULmF0dHIoInZpZXdCb3giLGllKX19LHN0eWxlczp0S2UsaW5pdDppPT57aS5jbGFzc3x8KGkuY2xhc3M9e30pLGkuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT1pLmFycm93TWFya2VyQWJzb2x1dGUseUouY2xlYXIoKX19fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLEl2ZT1pPT5jaS5zYW5pdGl6ZVRleHQoaSxxdCgpKTtsZXQgT3ZlPXtkaXZpZGVyTWFyZ2luOjEwLHBhZGRpbmc6NSx0ZXh0SGVpZ2h0OjEwLGN1cnZlOnZvaWQgMH07Y29uc3QgS2luPWZ1bmN0aW9uKGkscyx1LGQpe2NvbnN0IHA9T2JqZWN0LmtleXMoaSk7WGUuaW5mbygia2V5czoiLHApLFhlLmluZm8oaSkscC5mb3JFYWNoKGZ1bmN0aW9uKHYpe3ZhciBfLEE7Y29uc3QgYj1pW3ZdLFQ9e3NoYXBlOiJyZWN0IixpZDpiLmlkLGRvbUlkOmIuZG9tSWQsbGFiZWxUZXh0Okl2ZShiLmlkKSxsYWJlbFN0eWxlOiIiLHN0eWxlOiJmaWxsOiBub25lOyBzdHJva2U6IGJsYWNrIixwYWRkaW5nOigoXz1xdCgpLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOl8ucGFkZGluZyk/PygoQT1xdCgpLmNsYXNzKT09bnVsbD92b2lkIDA6QS5wYWRkaW5nKX07cy5zZXROb2RlKGIuaWQsVCksc0tlKGIuY2xhc3NlcyxzLHUsZCxiLmlkKSxYZS5pbmZvKCJzZXROb2RlIixUKX0pfSxzS2U9ZnVuY3Rpb24oaSxzLHUsZCxwKXtjb25zdCB2PU9iamVjdC5rZXlzKGkpO1hlLmluZm8oImtleXM6Iix2KSxYZS5pbmZvKGkpLHYuZmlsdGVyKGI9PmlbYl0ucGFyZW50PT1wKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciBqLEs7Y29uc3QgeT1pW2JdLFQ9eS5jc3NDbGFzc2VzLmpvaW4oIiAiKSxfPW9tKHkuc3R5bGVzKSxBPXkubGFiZWw/P3kuaWQsUD0wLFI9ImNsYXNzX2JveCIsRj17bGFiZWxTdHlsZTpfLmxhYmVsU3R5bGUsc2hhcGU6UixsYWJlbFRleHQ6SXZlKEEpLGNsYXNzRGF0YTp5LHJ4OlAscnk6UCxjbGFzczpULHN0eWxlOl8uc3R5bGUsaWQ6eS5pZCxkb21JZDp5LmRvbUlkLHRvb2x0aXA6ZC5kYi5nZXRUb29sdGlwKHkuaWQscCl8fCIiLGhhdmVDYWxsYmFjazp5LmhhdmVDYWxsYmFjayxsaW5rOnkubGluayx3aWR0aDp5LnR5cGU9PT0iZ3JvdXAiPzUwMDp2b2lkIDAsdHlwZTp5LnR5cGUscGFkZGluZzooKGo9cXQoKS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpqLnBhZGRpbmcpPz8oKEs9cXQoKS5jbGFzcyk9PW51bGw/dm9pZCAwOksucGFkZGluZyl9O3Muc2V0Tm9kZSh5LmlkLEYpLHAmJnMuc2V0UGFyZW50KHkuaWQscCksWGUuaW5mbygic2V0Tm9kZSIsRil9KX0sV2luPWZ1bmN0aW9uKGkscyx1LGQpe1hlLmluZm8oaSksaS5mb3JFYWNoKGZ1bmN0aW9uKHAsdil7dmFyIEssZWU7Y29uc3QgYj1wLHk9IiIsVD17bGFiZWxTdHlsZToiIixzdHlsZToiIn0sXz1iLnRleHQsQT0wLFA9Im5vdGUiLFI9e2xhYmVsU3R5bGU6VC5sYWJlbFN0eWxlLHNoYXBlOlAsbGFiZWxUZXh0Okl2ZShfKSxub3RlRGF0YTpiLHJ4OkEscnk6QSxjbGFzczp5LHN0eWxlOlQuc3R5bGUsaWQ6Yi5pZCxkb21JZDpiLmlkLHRvb2x0aXA6IiIsdHlwZToibm90ZSIscGFkZGluZzooKEs9cXQoKS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpLLnBhZGRpbmcpPz8oKGVlPXF0KCkuY2xhc3MpPT1udWxsP3ZvaWQgMDplZS5wYWRkaW5nKX07aWYocy5zZXROb2RlKGIuaWQsUiksWGUuaW5mbygic2V0Tm9kZSIsUiksIWIuY2xhc3N8fCEoYi5jbGFzcyBpbiBkKSlyZXR1cm47Y29uc3QgRj11K3Ysaj17aWQ6YGVkZ2VOb3RlJHtGfWAsY2xhc3NlczoicmVsYXRpb24iLHBhdHRlcm46ImRvdHRlZCIsYXJyb3doZWFkOiJub25lIixzdGFydExhYmVsUmlnaHQ6IiIsZW5kTGFiZWxMZWZ0OiIiLGFycm93VHlwZVN0YXJ0OiJub25lIixhcnJvd1R5cGVFbmQ6Im5vbmUiLHN0eWxlOiJmaWxsOm5vbmUiLGxhYmVsU3R5bGU6IiIsY3VydmU6T3YoT3ZlLmN1cnZlLGtwKX07cy5zZXRFZGdlKGIuaWQsYi5jbGFzcyxqLEYpfSl9LFlpbj1mdW5jdGlvbihpLHMpe2NvbnN0IHU9cXQoKS5mbG93Y2hhcnQ7bGV0IGQ9MDtpLmZvckVhY2goZnVuY3Rpb24ocCl7dmFyIGI7ZCsrO2NvbnN0IHY9e2NsYXNzZXM6InJlbGF0aW9uIixwYXR0ZXJuOnAucmVsYXRpb24ubGluZVR5cGU9PTE/ImRhc2hlZCI6InNvbGlkIixpZDpgaWRfJHtwLmlkMX1fJHtwLmlkMn1fJHtkfWAsYXJyb3doZWFkOnAudHlwZT09PSJhcnJvd19vcGVuIj8ibm9uZSI6Im5vcm1hbCIsc3RhcnRMYWJlbFJpZ2h0OnAucmVsYXRpb25UaXRsZTE9PT0ibm9uZSI/IiI6cC5yZWxhdGlvblRpdGxlMSxlbmRMYWJlbExlZnQ6cC5yZWxhdGlvblRpdGxlMj09PSJub25lIj8iIjpwLnJlbGF0aW9uVGl0bGUyLGFycm93VHlwZVN0YXJ0OmFLZShwLnJlbGF0aW9uLnR5cGUxKSxhcnJvd1R5cGVFbmQ6YUtlKHAucmVsYXRpb24udHlwZTIpLHN0eWxlOiJmaWxsOm5vbmUiLGxhYmVsU3R5bGU6IiIsY3VydmU6T3YodT09bnVsbD92b2lkIDA6dS5jdXJ2ZSxrcCl9O2lmKFhlLmluZm8odixwKSxwLnN0eWxlIT09dm9pZCAwKXtjb25zdCB5PW9tKHAuc3R5bGUpO3Yuc3R5bGU9eS5zdHlsZSx2LmxhYmVsU3R5bGU9eS5sYWJlbFN0eWxlfXAudGV4dD1wLnRpdGxlLHAudGV4dD09PXZvaWQgMD9wLnN0eWxlIT09dm9pZCAwJiYodi5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOih2LmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIix2LmxhYmVscG9zPSJjIiwoKGI9cXQoKS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpiLmh0bWxMYWJlbHMpPz9xdCgpLmh0bWxMYWJlbHM/KHYubGFiZWxUeXBlPSJodG1sIix2LmxhYmVsPSc8c3BhbiBjbGFzcz0iZWRnZUxhYmVsIj4nK3AudGV4dCsiPC9zcGFuPiIpOih2LmxhYmVsVHlwZT0idGV4dCIsdi5sYWJlbD1wLnRleHQucmVwbGFjZShjaS5saW5lQnJlYWtSZWdleCxgCmApLHAuc3R5bGU9PT12b2lkIDAmJih2LnN0eWxlPXYuc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lIiksdi5sYWJlbFN0eWxlPXYubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKSkscy5zZXRFZGdlKHAuaWQxLHAuaWQyLHYsZCl9KX0sWGluPWZ1bmN0aW9uKGkpe092ZT17Li4uT3ZlLC4uLml9fSxRaW49YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCl7WGUuaW5mbygiRHJhd2luZyBjbGFzcyAtICIscyk7Y29uc3QgcD1xdCgpLmZsb3djaGFydD8/cXQoKS5jbGFzcyx2PXF0KCkuc2VjdXJpdHlMZXZlbDtYZS5pbmZvKCJjb25maWc6IixwKTtjb25zdCBiPShwPT1udWxsP3ZvaWQgMDpwLm5vZGVTcGFjaW5nKT8/NTAseT0ocD09bnVsbD92b2lkIDA6cC5yYW5rU3BhY2luZyk/PzUwLFQ9bmV3IEIwKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6ZC5kYi5nZXREaXJlY3Rpb24oKSxub2Rlc2VwOmIscmFua3NlcDp5LG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KSxfPWQuZGIuZ2V0TmFtZXNwYWNlcygpLEE9ZC5kYi5nZXRDbGFzc2VzKCksUD1kLmRiLmdldFJlbGF0aW9ucygpLFI9ZC5kYi5nZXROb3RlcygpO1hlLmluZm8oUCksS2luKF8sVCxzLGQpLHNLZShBLFQscyxkKSxZaW4oUCxUKSxXaW4oUixULFAubGVuZ3RoKzEsQSk7bGV0IEY7dj09PSJzYW5kYm94IiYmKEY9SXIoIiNpIitzKSk7Y29uc3Qgaj1Jcih2PT09InNhbmRib3giP0Yubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLEs9ai5zZWxlY3QoYFtpZD0iJHtzfSJdYCksZWU9ai5zZWxlY3QoIiMiK3MrIiBnIik7aWYoYXdhaXQgcW1lKGVlLFQsWyJhZ2dyZWdhdGlvbiIsImV4dGVuc2lvbiIsImNvbXBvc2l0aW9uIiwiZGVwZW5kZW5jeSIsImxvbGxpcG9wIl0sImNsYXNzRGlhZ3JhbSIscyksQW8uaW5zZXJ0VGl0bGUoSywiY2xhc3NUaXRsZVRleHQiLChwPT1udWxsP3ZvaWQgMDpwLnRpdGxlVG9wTWFyZ2luKT8/NSxkLmRiLmdldERpYWdyYW1UaXRsZSgpKSx5OShULEsscD09bnVsbD92b2lkIDA6cC5kaWFncmFtUGFkZGluZyxwPT1udWxsP3ZvaWQgMDpwLnVzZU1heFdpZHRoKSwhKHAhPW51bGwmJnAuaHRtbExhYmVscykpe2NvbnN0IGllPXY9PT0ic2FuZGJveCI/Ri5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudDpkb2N1bWVudCxvZT1pZS5xdWVyeVNlbGVjdG9yQWxsKCdbaWQ9IicrcysnIl0gLmVkZ2VMYWJlbCAubGFiZWwnKTtmb3IoY29uc3QgcGUgb2Ygb2Upe2NvbnN0IGJlPXBlLmdldEJCb3goKSxhZT1pZS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVjdCIpO2FlLnNldEF0dHJpYnV0ZSgicngiLDApLGFlLnNldEF0dHJpYnV0ZSgicnkiLDApLGFlLnNldEF0dHJpYnV0ZSgid2lkdGgiLGJlLndpZHRoKSxhZS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsYmUuaGVpZ2h0KSxwZS5pbnNlcnRCZWZvcmUoYWUscGUuZmlyc3RDaGlsZCl9fX07ZnVuY3Rpb24gYUtlKGkpe2xldCBzO3N3aXRjaChpKXtjYXNlIDA6cz0iYWdncmVnYXRpb24iO2JyZWFrO2Nhc2UgMTpzPSJleHRlbnNpb24iO2JyZWFrO2Nhc2UgMjpzPSJjb21wb3NpdGlvbiI7YnJlYWs7Y2FzZSAzOnM9ImRlcGVuZGVuY3kiO2JyZWFrO2Nhc2UgNDpzPSJsb2xsaXBvcCI7YnJlYWs7ZGVmYXVsdDpzPSJub25lIn1yZXR1cm4gc31jb25zdCBKaW49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpLR2UsZGI6eUoscmVuZGVyZXI6e3NldENvbmY6WGluLGRyYXc6UWlufSxzdHlsZXM6dEtlLGluaXQ6aT0+e2kuY2xhc3N8fChpLmNsYXNzPXt9KSxpLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9aS5hcnJvd01hcmtlckFic29sdXRlLHlKLmNsZWFyKCl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgTnZlPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oSWUsU2UsQ2Usa2Upe2ZvcihDZT1DZXx8e30sa2U9SWUubGVuZ3RoO2tlLS07Q2VbSWVba2VdXT1TZSk7cmV0dXJuIENlfSxzPVsxLDJdLHU9WzEsM10sZD1bMSw0XSxwPVsyLDRdLHY9WzEsOV0sYj1bMSwxMV0seT1bMSwxNV0sVD1bMSwxNl0sXz1bMSwxN10sQT1bMSwxOF0sUD1bMSwzMF0sUj1bMSwxOV0sRj1bMSwyMF0saj1bMSwyMV0sSz1bMSwyMl0sZWU9WzEsMjNdLGllPVsxLDI1XSxvZT1bMSwyNl0scGU9WzEsMjddLGJlPVsxLDI4XSxhZT1bMSwyOV0sbmU9WzEsMzJdLHNlPVsxLDMzXSxkZT1bMSwzNF0sWD1bMSwzNV0sZ2U9WzEsMzFdLFc9WzEsNCw1LDE1LDE2LDE4LDIwLDIxLDIzLDI0LDI1LDI2LDI3LDI4LDMyLDM0LDM2LDM3LDQxLDQ0LDQ1LDQ2LDQ3LDUwXSx4ZT1bMSw0LDUsMTMsMTQsMTUsMTYsMTgsMjAsMjEsMjMsMjQsMjUsMjYsMjcsMjgsMzIsMzQsMzYsMzcsNDEsNDQsNDUsNDYsNDcsNTBdLFU9WzQsNSwxNSwxNiwxOCwyMCwyMSwyMywyNCwyNSwyNiwyNywyOCwzMiwzNCwzNiwzNyw0MSw0NCw0NSw0Niw0Nyw1MF0sRmU9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLFNQQUNFOjQsTkw6NSxTRDo2LGRvY3VtZW50OjcsbGluZTo4LHN0YXRlbWVudDo5LGNsYXNzRGVmU3RhdGVtZW50OjEwLGNzc0NsYXNzU3RhdGVtZW50OjExLGlkU3RhdGVtZW50OjEyLERFU0NSOjEzLCItLT4iOjE0LEhJREVfRU1QVFk6MTUsc2NhbGU6MTYsV0lEVEg6MTcsQ09NUE9TSVRfU1RBVEU6MTgsU1RSVUNUX1NUQVJUOjE5LFNUUlVDVF9TVE9QOjIwLFNUQVRFX0RFU0NSOjIxLEFTOjIyLElEOjIzLEZPUks6MjQsSk9JTjoyNSxDSE9JQ0U6MjYsQ09OQ1VSUkVOVDoyNyxub3RlOjI4LG5vdGVQb3NpdGlvbjoyOSxOT1RFX1RFWFQ6MzAsZGlyZWN0aW9uOjMxLGFjY190aXRsZTozMixhY2NfdGl0bGVfdmFsdWU6MzMsYWNjX2Rlc2NyOjM0LGFjY19kZXNjcl92YWx1ZTozNSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM2LGNsYXNzRGVmOjM3LENMQVNTREVGX0lEOjM4LENMQVNTREVGX1NUWUxFT1BUUzozOSxERUZBVUxUOjQwLGNsYXNzOjQxLENMQVNTRU5USVRZX0lEUzo0MixTVFlMRUNMQVNTOjQzLGRpcmVjdGlvbl90Yjo0NCxkaXJlY3Rpb25fYnQ6NDUsZGlyZWN0aW9uX3JsOjQ2LGRpcmVjdGlvbl9scjo0Nyxlb2w6NDgsIjsiOjQ5LEVER0VfU1RBVEU6NTAsU1RZTEVfU0VQQVJBVE9SOjUxLGxlZnRfb2Y6NTIscmlnaHRfb2Y6NTMsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJOTCIsNjoiU0QiLDEzOiJERVNDUiIsMTQ6Ii0tPiIsMTU6IkhJREVfRU1QVFkiLDE2OiJzY2FsZSIsMTc6IldJRFRIIiwxODoiQ09NUE9TSVRfU1RBVEUiLDE5OiJTVFJVQ1RfU1RBUlQiLDIwOiJTVFJVQ1RfU1RPUCIsMjE6IlNUQVRFX0RFU0NSIiwyMjoiQVMiLDIzOiJJRCIsMjQ6IkZPUksiLDI1OiJKT0lOIiwyNjoiQ0hPSUNFIiwyNzoiQ09OQ1VSUkVOVCIsMjg6Im5vdGUiLDMwOiJOT1RFX1RFWFQiLDMyOiJhY2NfdGl0bGUiLDMzOiJhY2NfdGl0bGVfdmFsdWUiLDM0OiJhY2NfZGVzY3IiLDM1OiJhY2NfZGVzY3JfdmFsdWUiLDM2OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzNzoiY2xhc3NEZWYiLDM4OiJDTEFTU0RFRl9JRCIsMzk6IkNMQVNTREVGX1NUWUxFT1BUUyIsNDA6IkRFRkFVTFQiLDQxOiJjbGFzcyIsNDI6IkNMQVNTRU5USVRZX0lEUyIsNDM6IlNUWUxFQ0xBU1MiLDQ0OiJkaXJlY3Rpb25fdGIiLDQ1OiJkaXJlY3Rpb25fYnQiLDQ2OiJkaXJlY3Rpb25fcmwiLDQ3OiJkaXJlY3Rpb25fbHIiLDQ5OiI7Iiw1MDoiRURHRV9TVEFURSIsNTE6IlNUWUxFX1NFUEFSQVRPUiIsNTI6ImxlZnRfb2YiLDUzOiJyaWdodF9vZiJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbNywwXSxbNywyXSxbOCwyXSxbOCwxXSxbOCwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwyXSxbOSwzXSxbOSw0XSxbOSwxXSxbOSwyXSxbOSwxXSxbOSw0XSxbOSwzXSxbOSw2XSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSw0XSxbOSw0XSxbOSwxXSxbOSwyXSxbOSwyXSxbOSwxXSxbMTAsM10sWzEwLDNdLFsxMSwzXSxbMzEsMV0sWzMxLDFdLFszMSwxXSxbMzEsMV0sWzQ4LDFdLFs0OCwxXSxbMTIsMV0sWzEyLDFdLFsxMiwzXSxbMTIsM10sWzI5LDFdLFsyOSwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihTZSxDZSxrZSxLZSxGdCxOZSxnbil7dmFyIF90PU5lLmxlbmd0aC0xO3N3aXRjaChGdCl7Y2FzZSAzOnJldHVybiBLZS5zZXRSb290RG9jKE5lW190XSksTmVbX3RdO2Nhc2UgNDp0aGlzLiQ9W107YnJlYWs7Y2FzZSA1Ok5lW190XSE9Im5sIiYmKE5lW190LTFdLnB1c2goTmVbX3RdKSx0aGlzLiQ9TmVbX3QtMV0pO2JyZWFrO2Nhc2UgNjpjYXNlIDc6dGhpcy4kPU5lW190XTticmVhaztjYXNlIDg6dGhpcy4kPSJubCI7YnJlYWs7Y2FzZSAxMTp0aGlzLiQ9TmVbX3RdO2JyZWFrO2Nhc2UgMTI6Y29uc3QgeHQ9TmVbX3QtMV07eHQuZGVzY3JpcHRpb249S2UudHJpbUNvbG9uKE5lW190XSksdGhpcy4kPXh0O2JyZWFrO2Nhc2UgMTM6dGhpcy4kPXtzdG10OiJyZWxhdGlvbiIsc3RhdGUxOk5lW190LTJdLHN0YXRlMjpOZVtfdF19O2JyZWFrO2Nhc2UgMTQ6Y29uc3QgUHQ9S2UudHJpbUNvbG9uKE5lW190XSk7dGhpcy4kPXtzdG10OiJyZWxhdGlvbiIsc3RhdGUxOk5lW190LTNdLHN0YXRlMjpOZVtfdC0xXSxkZXNjcmlwdGlvbjpQdH07YnJlYWs7Y2FzZSAxODp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpOZVtfdC0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIixkb2M6TmVbX3QtMV19O2JyZWFrO2Nhc2UgMTk6dmFyIEV0PU5lW190XSxHdD1OZVtfdC0yXS50cmltKCk7aWYoTmVbX3RdLm1hdGNoKCI6Iikpe3ZhciBsbj1OZVtfdF0uc3BsaXQoIjoiKTtFdD1sblswXSxHdD1bR3QsbG5bMV1dfXRoaXMuJD17c3RtdDoic3RhdGUiLGlkOkV0LHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOkd0fTticmVhaztjYXNlIDIwOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOk5lW190LTNdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOk5lW190LTVdLGRvYzpOZVtfdC0xXX07YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpOZVtfdF0sdHlwZToiZm9yayJ9O2JyZWFrO2Nhc2UgMjI6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6TmVbX3RdLHR5cGU6ImpvaW4ifTticmVhaztjYXNlIDIzOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOk5lW190XSx0eXBlOiJjaG9pY2UifTticmVhaztjYXNlIDI0OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOktlLmdldERpdmlkZXJJZCgpLHR5cGU6ImRpdmlkZXIifTticmVhaztjYXNlIDI1OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOk5lW190LTFdLnRyaW0oKSxub3RlOntwb3NpdGlvbjpOZVtfdC0yXS50cmltKCksdGV4dDpOZVtfdF0udHJpbSgpfX07YnJlYWs7Y2FzZSAyODp0aGlzLiQ9TmVbX3RdLnRyaW0oKSxLZS5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMjk6Y2FzZSAzMDp0aGlzLiQ9TmVbX3RdLnRyaW0oKSxLZS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMzE6Y2FzZSAzMjp0aGlzLiQ9e3N0bXQ6ImNsYXNzRGVmIixpZDpOZVtfdC0xXS50cmltKCksY2xhc3NlczpOZVtfdF0udHJpbSgpfTticmVhaztjYXNlIDMzOnRoaXMuJD17c3RtdDoiYXBwbHlDbGFzcyIsaWQ6TmVbX3QtMV0udHJpbSgpLHN0eWxlQ2xhc3M6TmVbX3RdLnRyaW0oKX07YnJlYWs7Y2FzZSAzNDpLZS5zZXREaXJlY3Rpb24oIlRCIiksdGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJUQiJ9O2JyZWFrO2Nhc2UgMzU6S2Uuc2V0RGlyZWN0aW9uKCJCVCIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiQlQifTticmVhaztjYXNlIDM2OktlLnNldERpcmVjdGlvbigiUkwiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlJMIn07YnJlYWs7Y2FzZSAzNzpLZS5zZXREaXJlY3Rpb24oIkxSIiksdGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJMUiJ9O2JyZWFrO2Nhc2UgNDA6Y2FzZSA0MTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpOZVtfdF0udHJpbSgpLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifTticmVhaztjYXNlIDQyOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOk5lW190LTJdLnRyaW0oKSxjbGFzc2VzOltOZVtfdF0udHJpbSgpXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn07YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpOZVtfdC0yXS50cmltKCksY2xhc3NlczpbTmVbX3RdLnRyaW0oKV0sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9O2JyZWFrfX0sdGFibGU6W3szOjEsNDpzLDU6dSw2OmR9LHsxOlszXX0sezM6NSw0OnMsNTp1LDY6ZH0sezM6Niw0OnMsNTp1LDY6ZH0saShbMSw0LDUsMTUsMTYsMTgsMjEsMjMsMjQsMjUsMjYsMjcsMjgsMzIsMzQsMzYsMzcsNDEsNDQsNDUsNDYsNDcsNTBdLHAsezc6N30pLHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM10sNDp2LDU6Yiw4OjgsOToxMCwxMDoxMiwxMToxMywxMjoxNCwxNTp5LDE2OlQsMTg6XywyMTpBLDIzOlAsMjQ6UiwyNTpGLDI2OmosMjc6SywyODplZSwzMToyNCwzMjppZSwzNDpvZSwzNjpwZSwzNzpiZSw0MTphZSw0NDpuZSw0NTpzZSw0NjpkZSw0NzpYLDUwOmdlfSxpKFcsWzIsNV0pLHs5OjM2LDEwOjEyLDExOjEzLDEyOjE0LDE1OnksMTY6VCwxODpfLDIxOkEsMjM6UCwyNDpSLDI1OkYsMjY6aiwyNzpLLDI4OmVlLDMxOjI0LDMyOmllLDM0Om9lLDM2OnBlLDM3OmJlLDQxOmFlLDQ0Om5lLDQ1OnNlLDQ2OmRlLDQ3OlgsNTA6Z2V9LGkoVyxbMiw3XSksaShXLFsyLDhdKSxpKFcsWzIsOV0pLGkoVyxbMiwxMF0pLGkoVyxbMiwxMV0sezEzOlsxLDM3XSwxNDpbMSwzOF19KSxpKFcsWzIsMTVdKSx7MTc6WzEsMzldfSxpKFcsWzIsMTddLHsxOTpbMSw0MF19KSx7MjI6WzEsNDFdfSxpKFcsWzIsMjFdKSxpKFcsWzIsMjJdKSxpKFcsWzIsMjNdKSxpKFcsWzIsMjRdKSx7Mjk6NDIsMzA6WzEsNDNdLDUyOlsxLDQ0XSw1MzpbMSw0NV19LGkoVyxbMiwyN10pLHszMzpbMSw0Nl19LHszNTpbMSw0N119LGkoVyxbMiwzMF0pLHszODpbMSw0OF0sNDA6WzEsNDldfSx7NDI6WzEsNTBdfSxpKHhlLFsyLDQwXSx7NTE6WzEsNTFdfSksaSh4ZSxbMiw0MV0sezUxOlsxLDUyXX0pLGkoVyxbMiwzNF0pLGkoVyxbMiwzNV0pLGkoVyxbMiwzNl0pLGkoVyxbMiwzN10pLGkoVyxbMiw2XSksaShXLFsyLDEyXSksezEyOjUzLDIzOlAsNTA6Z2V9LGkoVyxbMiwxNl0pLGkoVSxwLHs3OjU0fSksezIzOlsxLDU1XX0sezIzOlsxLDU2XX0sezIyOlsxLDU3XX0sezIzOlsyLDQ0XX0sezIzOlsyLDQ1XX0saShXLFsyLDI4XSksaShXLFsyLDI5XSksezM5OlsxLDU4XX0sezM5OlsxLDU5XX0sezQzOlsxLDYwXX0sezIzOlsxLDYxXX0sezIzOlsxLDYyXX0saShXLFsyLDEzXSx7MTM6WzEsNjNdfSksezQ6diw1OmIsODo4LDk6MTAsMTA6MTIsMTE6MTMsMTI6MTQsMTU6eSwxNjpULDE4Ol8sMjA6WzEsNjRdLDIxOkEsMjM6UCwyNDpSLDI1OkYsMjY6aiwyNzpLLDI4OmVlLDMxOjI0LDMyOmllLDM0Om9lLDM2OnBlLDM3OmJlLDQxOmFlLDQ0Om5lLDQ1OnNlLDQ2OmRlLDQ3OlgsNTA6Z2V9LGkoVyxbMiwxOV0sezE5OlsxLDY1XX0pLHszMDpbMSw2Nl19LHsyMzpbMSw2N119LGkoVyxbMiwzMV0pLGkoVyxbMiwzMl0pLGkoVyxbMiwzM10pLGkoeGUsWzIsNDJdKSxpKHhlLFsyLDQzXSksaShXLFsyLDE0XSksaShXLFsyLDE4XSksaShVLHAsezc6Njh9KSxpKFcsWzIsMjVdKSxpKFcsWzIsMjZdKSx7NDp2LDU6Yiw4OjgsOToxMCwxMDoxMiwxMToxMywxMjoxNCwxNTp5LDE2OlQsMTg6XywyMDpbMSw2OV0sMjE6QSwyMzpQLDI0OlIsMjU6RiwyNjpqLDI3OkssMjg6ZWUsMzE6MjQsMzI6aWUsMzQ6b2UsMzY6cGUsMzc6YmUsNDE6YWUsNDQ6bmUsNDU6c2UsNDY6ZGUsNDc6WCw1MDpnZX0saShXLFsyLDIwXSldLGRlZmF1bHRBY3Rpb25zOns1OlsyLDFdLDY6WzIsMl0sNDQ6WzIsNDRdLDQ1OlsyLDQ1XX0scGFyc2VFcnJvcjpmdW5jdGlvbihTZSxDZSl7aWYoQ2UucmVjb3ZlcmFibGUpdGhpcy50cmFjZShTZSk7ZWxzZXt2YXIga2U9bmV3IEVycm9yKFNlKTt0aHJvdyBrZS5oYXNoPUNlLGtlfX0scGFyc2U6ZnVuY3Rpb24oU2Upe3ZhciBDZT10aGlzLGtlPVswXSxLZT1bXSxGdD1bbnVsbF0sTmU9W10sZ249dGhpcy50YWJsZSxfdD0iIixFdD0wLEd0PTAsbG49Mix4dD0xLFB0PU5lLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLFFlPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksRHQ9e3l5Ont9fTtmb3IodmFyIGt0IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksa3QpJiYoRHQueXlba3RdPXRoaXMueXlba3RdKTtRZS5zZXRJbnB1dChTZSxEdC55eSksRHQueXkubGV4ZXI9UWUsRHQueXkucGFyc2VyPXRoaXMsdHlwZW9mIFFlLnl5bGxvYz4idSImJihRZS55eWxsb2M9e30pO3ZhciBPbj1RZS55eWxsb2M7TmUucHVzaChPbik7dmFyIGh0PVFlLm9wdGlvbnMmJlFlLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBEdC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1EdC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiB6cigpe3ZhciBBdDtyZXR1cm4gQXQ9S2UucG9wKCl8fFFlLmxleCgpfHx4dCx0eXBlb2YgQXQhPSJudW1iZXIiJiYoQXQgaW5zdGFuY2VvZiBBcnJheSYmKEtlPUF0LEF0PUtlLnBvcCgpKSxBdD1DZS5zeW1ib2xzX1tBdF18fEF0KSxBdH1mb3IodmFyIHl0LGppLHhpLE1hLHpzPXt9LGFvLFRyLEZuLHFuOzspe2lmKGppPWtlW2tlLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2ppXT94aT10aGlzLmRlZmF1bHRBY3Rpb25zW2ppXTooKHl0PT09bnVsbHx8dHlwZW9mIHl0PiJ1IikmJih5dD16cigpKSx4aT1nbltqaV0mJmduW2ppXVt5dF0pLHR5cGVvZiB4aT4idSJ8fCF4aS5sZW5ndGh8fCF4aVswXSl7dmFyIFVuPSIiO3FuPVtdO2ZvcihhbyBpbiBnbltqaV0pdGhpcy50ZXJtaW5hbHNfW2FvXSYmYW8+bG4mJnFuLnB1c2goIiciK3RoaXMudGVybWluYWxzX1thb10rIiciKTtRZS5zaG93UG9zaXRpb24/VW49IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoRXQrMSkrYDoKYCtRZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK3FuLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beXRdfHx5dCkrIiciOlVuPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEV0KzEpKyI6IFVuZXhwZWN0ZWQgIisoeXQ9PXh0PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3l0XXx8eXQpKyInIiksdGhpcy5wYXJzZUVycm9yKFVuLHt0ZXh0OlFlLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t5dF18fHl0LGxpbmU6UWUueXlsaW5lbm8sbG9jOk9uLGV4cGVjdGVkOnFufSl9aWYoeGlbMF1pbnN0YW5jZW9mIEFycmF5JiZ4aS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2ppKyIsIHRva2VuOiAiK3l0KTtzd2l0Y2goeGlbMF0pe2Nhc2UgMTprZS5wdXNoKHl0KSxGdC5wdXNoKFFlLnl5dGV4dCksTmUucHVzaChRZS55eWxsb2MpLGtlLnB1c2goeGlbMV0pLHl0PW51bGwsR3Q9UWUueXlsZW5nLF90PVFlLnl5dGV4dCxFdD1RZS55eWxpbmVubyxPbj1RZS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKFRyPXRoaXMucHJvZHVjdGlvbnNfW3hpWzFdXVsxXSx6cy4kPUZ0W0Z0Lmxlbmd0aC1Ucl0senMuXyQ9e2ZpcnN0X2xpbmU6TmVbTmUubGVuZ3RoLShUcnx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOk5lW05lLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOk5lW05lLmxlbmd0aC0oVHJ8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46TmVbTmUubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxodCYmKHpzLl8kLnJhbmdlPVtOZVtOZS5sZW5ndGgtKFRyfHwxKV0ucmFuZ2VbMF0sTmVbTmUubGVuZ3RoLTFdLnJhbmdlWzFdXSksTWE9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHpzLFtfdCxHdCxFdCxEdC55eSx4aVsxXSxGdCxOZV0uY29uY2F0KFB0KSksdHlwZW9mIE1hPCJ1IilyZXR1cm4gTWE7VHImJihrZT1rZS5zbGljZSgwLC0xKlRyKjIpLEZ0PUZ0LnNsaWNlKDAsLTEqVHIpLE5lPU5lLnNsaWNlKDAsLTEqVHIpKSxrZS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3hpWzFdXVswXSksRnQucHVzaCh6cy4kKSxOZS5wdXNoKHpzLl8kKSxGbj1nbltrZVtrZS5sZW5ndGgtMl1dW2tlW2tlLmxlbmd0aC0xXV0sa2UucHVzaChGbik7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LFBlPWZ1bmN0aW9uKCl7dmFyIEllPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKENlLGtlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKENlLGtlKTtlbHNlIHRocm93IG5ldyBFcnJvcihDZSl9LHNldElucHV0OmZ1bmN0aW9uKFNlLENlKXtyZXR1cm4gdGhpcy55eT1DZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9U2UsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIFNlPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1TZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9U2UsdGhpcy5tYXRjaGVkKz1TZTt2YXIgQ2U9U2UubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBDZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksU2V9LHVucHV0OmZ1bmN0aW9uKFNlKXt2YXIgQ2U9U2UubGVuZ3RoLGtlPVNlLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9U2UrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLUNlKSx0aGlzLm9mZnNldC09Q2U7dmFyIEtlPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLGtlLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09a2UubGVuZ3RoLTEpO3ZhciBGdD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46a2U/KGtlLmxlbmd0aD09PUtlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrS2VbS2UubGVuZ3RoLWtlLmxlbmd0aF0ubGVuZ3RoLWtlWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tQ2V9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bRnRbMF0sRnRbMF0rdGhpcy55eWxlbmctQ2VdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihTZSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFNlKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBTZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFNlLmxlbmd0aD4yMD8iLi4uIjoiIikrU2Uuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgU2U9dGhpcy5tYXRjaDtyZXR1cm4gU2UubGVuZ3RoPDIwJiYoU2UrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVNlLmxlbmd0aCkpLChTZS5zdWJzdHIoMCwyMCkrKFNlLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgU2U9dGhpcy5wYXN0SW5wdXQoKSxDZT1uZXcgQXJyYXkoU2UubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gU2UrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0NlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihTZSxDZSl7dmFyIGtlLEtlLEZ0O2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihGdD17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihGdC55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxLZT1TZVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksS2UmJih0aGlzLnl5bGluZW5vKz1LZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpLZT9LZVtLZS5sZW5ndGgtMV0ubGVuZ3RoLUtlW0tlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK1NlWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVNlWzBdLHRoaXMubWF0Y2grPVNlWzBdLHRoaXMubWF0Y2hlcz1TZSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShTZVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9U2VbMF0sa2U9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsQ2UsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksa2UpcmV0dXJuIGtlO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBOZSBpbiBGdCl0aGlzW05lXT1GdFtOZV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgU2UsQ2Usa2UsS2U7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgRnQ9dGhpcy5fY3VycmVudFJ1bGVzKCksTmU9MDtOZTxGdC5sZW5ndGg7TmUrKylpZihrZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW0Z0W05lXV0pLGtlJiYoIUNlfHxrZVswXS5sZW5ndGg+Q2VbMF0ubGVuZ3RoKSl7aWYoQ2U9a2UsS2U9TmUsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoU2U9dGhpcy50ZXN0X21hdGNoKGtlLEZ0W05lXSksU2UhPT0hMSlyZXR1cm4gU2U7aWYodGhpcy5fYmFja3RyYWNrKXtDZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBDZT8oU2U9dGhpcy50ZXN0X21hdGNoKENlLEZ0W0tlXSksU2UhPT0hMT9TZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIENlPXRoaXMubmV4dCgpO3JldHVybiBDZXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oQ2Upe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChDZSl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIENlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIENlPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oQ2Upe3JldHVybiBDZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKENlfHwwKSxDZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW0NlXToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihDZSl7dGhpcy5iZWdpbihDZSl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oQ2Usa2UsS2UsRnQpe3N3aXRjaChLZSl7Y2FzZSAwOnJldHVybiA0MDtjYXNlIDE6cmV0dXJuIDQ0O2Nhc2UgMjpyZXR1cm4gNDU7Y2FzZSAzOnJldHVybiA0NjtjYXNlIDQ6cmV0dXJuIDQ3O2Nhc2UgNTpicmVhaztjYXNlIDY6YnJlYWs7Y2FzZSA3OnJldHVybiA1O2Nhc2UgODpicmVhaztjYXNlIDk6YnJlYWs7Y2FzZSAxMDpicmVhaztjYXNlIDExOmJyZWFrO2Nhc2UgMTI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTQ0FMRSIpLDE2O2Nhc2UgMTM6cmV0dXJuIDE3O2Nhc2UgMTQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTU6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDMyO2Nhc2UgMTY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzNDtjYXNlIDE4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSAxOTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAyMDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMTpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAyMjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIkNMQVNTREVGIiksMzc7Y2FzZSAyMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJDTEFTU0RFRklEIiksIkRFRkFVTFRfQ0xBU1NERUZfSUQiO2Nhc2UgMjQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NERUZJRCIpLDM4O2Nhc2UgMjU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwzOTtjYXNlIDI2OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiQ0xBU1MiKSw0MTtjYXNlIDI3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkNMQVNTX1NUWUxFIiksNDI7Y2FzZSAyODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQzO2Nhc2UgMjk6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTQ0FMRSIpLDE2O2Nhc2UgMzA6cmV0dXJuIDE3O2Nhc2UgMzE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzI6dGhpcy5wdXNoU3RhdGUoIlNUQVRFIik7YnJlYWs7Y2FzZSAzMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGtlLnl5dGV4dD1rZS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI0O2Nhc2UgMzQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxrZS55eXRleHQ9a2UueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNTtjYXNlIDM1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksa2UueXl0ZXh0PWtlLnl5dGV4dC5zbGljZSgwLC0xMCkudHJpbSgpLDI2O2Nhc2UgMzY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxrZS55eXRleHQ9a2UueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNDtjYXNlIDM3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksa2UueXl0ZXh0PWtlLnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjU7Y2FzZSAzODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGtlLnl5dGV4dD1rZS55eXRleHQuc2xpY2UoMCwtMTApLnRyaW0oKSwyNjtjYXNlIDM5OnJldHVybiA0NDtjYXNlIDQwOnJldHVybiA0NTtjYXNlIDQxOnJldHVybiA0NjtjYXNlIDQyOnJldHVybiA0NztjYXNlIDQzOnRoaXMucHVzaFN0YXRlKCJTVEFURV9TVFJJTkciKTticmVhaztjYXNlIDQ0OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiU1RBVEVfSUQiKSwiQVMiO2Nhc2UgNDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiSUQiO2Nhc2UgNDY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNDc6cmV0dXJuIlNUQVRFX0RFU0NSIjtjYXNlIDQ4OnJldHVybiAxODtjYXNlIDQ5OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDUwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoInN0cnVjdCIpLDE5O2Nhc2UgNTE6YnJlYWs7Y2FzZSA1MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDIwO2Nhc2UgNTM6YnJlYWs7Y2FzZSA1NDpyZXR1cm4gdGhpcy5iZWdpbigiTk9URSIpLDI4O2Nhc2UgNTU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDUyO2Nhc2UgNTY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDUzO2Nhc2UgNTc6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFIik7YnJlYWs7Y2FzZSA1ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFX0lEIiksIkFTIjtjYXNlIDU5OmJyZWFrO2Nhc2UgNjA6cmV0dXJuIk5PVEVfVEVYVCI7Y2FzZSA2MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJJRCI7Y2FzZSA2MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX1RFWFQiKSwyMztjYXNlIDYzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksa2UueXl0ZXh0PWtlLnl5dGV4dC5zdWJzdHIoMikudHJpbSgpLDMwO2Nhc2UgNjQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxrZS55eXRleHQ9a2UueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwzMDtjYXNlIDY1OnJldHVybiA2O2Nhc2UgNjY6cmV0dXJuIDY7Y2FzZSA2NzpyZXR1cm4gMTU7Y2FzZSA2ODpyZXR1cm4gNTA7Y2FzZSA2OTpyZXR1cm4gMjM7Y2FzZSA3MDpyZXR1cm4ga2UueXl0ZXh0PWtlLnl5dGV4dC50cmltKCksMTM7Y2FzZSA3MTpyZXR1cm4gMTQ7Y2FzZSA3MjpyZXR1cm4gMjc7Y2FzZSA3MzpyZXR1cm4gNTE7Y2FzZSA3NDpyZXR1cm4gNTtjYXNlIDc1OnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/OmRlZmF1bHRcYikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopL2ksL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/Oltcc10rKS9pLC9eKD86KCg/IVxuKVxzKSspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OnNjYWxlXHMrKS9pLC9eKD86XGQrKS9pLC9eKD86XHMrd2lkdGhcYikvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86Y2xhc3NEZWZccyspL2ksL14oPzpERUZBVUxUXHMrKS9pLC9eKD86XHcrXHMrKS9pLC9eKD86W15cbl0qKS9pLC9eKD86Y2xhc3NccyspL2ksL14oPzooXHcrKSsoKCxccypcdyspKikpL2ksL14oPzpbXlxuXSopL2ksL14oPzpzY2FsZVxzKykvaSwvXig/OlxkKykvaSwvXig/OlxzK3dpZHRoXGIpL2ksL14oPzpzdGF0ZVxzKykvaSwvXig/Oi4qPDxmb3JrPj4pL2ksL14oPzouKjw8am9pbj4+KS9pLC9eKD86Lio8PGNob2ljZT4+KS9pLC9eKD86LipcW1xbZm9ya1xdXF0pL2ksL14oPzouKlxbXFtqb2luXF1cXSkvaSwvXig/Oi4qXFtcW2Nob2ljZVxdXF0pL2ksL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS9pLC9eKD86WyJdKS9pLC9eKD86XHMqYXNccyspL2ksL14oPzpbXlxuXHtdKikvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86W15cblxzXHtdKykvaSwvXig/OlxuKS9pLC9eKD86XHspL2ksL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/Olx9KS9pLC9eKD86W1xuXSkvaSwvXig/Om5vdGVccyspL2ksL14oPzpsZWZ0IG9mXGIpL2ksL14oPzpyaWdodCBvZlxiKS9pLC9eKD86IikvaSwvXig/OlxzKmFzXHMqKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXlxuXSopL2ksL14oPzpccypbXjpcblxzXC1dKykvaSwvXig/OlxzKjpbXjpcbjtdKykvaSwvXig/Oltcc1xTXSo/ZW5kIG5vdGVcYikvaSwvXig/OnN0YXRlRGlhZ3JhbVxzKykvaSwvXig/OnN0YXRlRGlhZ3JhbS12MlxzKykvaSwvXig/OmhpZGUgZW1wdHkgZGVzY3JpcHRpb25cYikvaSwvXig/OlxbXCpcXSkvaSwvXig/OlteOlxuXHNcLVx7XSspL2ksL14oPzpccyo6W146XG47XSspL2ksL14oPzotLT4pL2ksL14oPzotLSkvaSwvXig/Ojo6OikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOntMSU5FOntydWxlczpbOSwxMF0saW5jbHVzaXZlOiExfSxzdHJ1Y3Q6e3J1bGVzOls5LDEwLDIyLDI2LDMyLDM5LDQwLDQxLDQyLDUxLDUyLDUzLDU0LDY4LDY5LDcwLDcxLDcyXSxpbmNsdXNpdmU6ITF9LEZMT0FUSU5HX05PVEVfSUQ6e3J1bGVzOls2MV0saW5jbHVzaXZlOiExfSxGTE9BVElOR19OT1RFOntydWxlczpbNTgsNTksNjBdLGluY2x1c2l2ZTohMX0sTk9URV9URVhUOntydWxlczpbNjMsNjRdLGluY2x1c2l2ZTohMX0sTk9URV9JRDp7cnVsZXM6WzYyXSxpbmNsdXNpdmU6ITF9LE5PVEU6e3J1bGVzOls1NSw1Niw1N10saW5jbHVzaXZlOiExfSxDTEFTU19TVFlMRTp7cnVsZXM6WzI4XSxpbmNsdXNpdmU6ITF9LENMQVNTOntydWxlczpbMjddLGluY2x1c2l2ZTohMX0sQ0xBU1NERUZJRDp7cnVsZXM6WzI1XSxpbmNsdXNpdmU6ITF9LENMQVNTREVGOntydWxlczpbMjMsMjRdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzIwLDIxXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzE4XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzE2XSxpbmNsdXNpdmU6ITF9LFNDQUxFOntydWxlczpbMTMsMTQsMzAsMzFdLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sU1RBVEVfSUQ6e3J1bGVzOls0NV0saW5jbHVzaXZlOiExfSxTVEFURV9TVFJJTkc6e3J1bGVzOls0Niw0N10saW5jbHVzaXZlOiExfSxGT1JLX1NUQVRFOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LFNUQVRFOntydWxlczpbOSwxMCwzMywzNCwzNSwzNiwzNywzOCw0Myw0NCw0OCw0OSw1MF0saW5jbHVzaXZlOiExfSxJRDp7cnVsZXM6WzksMTBdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsNyw4LDEwLDExLDEyLDE1LDE3LDE5LDIyLDI2LDI5LDMyLDUwLDU0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDczLDc0LDc1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIEllfSgpO0ZlLmxleGVyPVBlO2Z1bmN0aW9uIGplKCl7dGhpcy55eT17fX1yZXR1cm4gamUucHJvdG90eXBlPUZlLEZlLlBhcnNlcj1qZSxuZXcgamV9KCk7TnZlLnBhcnNlcj1OdmU7Y29uc3Qgb0tlPU52ZSxaaW49IkxSIixlc249IlRCIixFSj0ic3RhdGUiLFB2ZT0icmVsYXRpb24iLHRzbj0iY2xhc3NEZWYiLG5zbj0iYXBwbHlDbGFzcyIsWFI9ImRlZmF1bHQiLGNLZT0iZGl2aWRlciIsQnZlPSJbKl0iLHVLZT0ic3RhcnQiLGxLZT1CdmUsaEtlPSJlbmQiLGZLZT0iY29sb3IiLGRLZT0iZmlsbCIscnNuPSJiZ0ZpbGwiLGlzbj0iLCI7ZnVuY3Rpb24gZ0tlKCl7cmV0dXJue319bGV0IHBLZT1aaW4sVEo9W10sUVI9Z0tlKCk7Y29uc3QgYktlPSgpPT4oe3JlbGF0aW9uczpbXSxzdGF0ZXM6e30sZG9jdW1lbnRzOnt9fSk7bGV0IENKPXtyb290OmJLZSgpfSxqZz1DSi5yb290LEpSPTAsbUtlPTA7Y29uc3Qgc3NuPXtMSU5FOjAsRE9UVEVEX0xJTkU6MX0sYXNuPXtBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozfSxTSj1pPT5KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGkpKSxvc249aT0+e1hlLmluZm8oIlNldHRpbmcgcm9vdCBkb2MiLGkpLFRKPWl9LGNzbj0oKT0+VEosX0o9KGkscyx1KT0+e2lmKHMuc3RtdD09PVB2ZSlfSihpLHMuc3RhdGUxLCEwKSxfSihpLHMuc3RhdGUyLCExKTtlbHNlIGlmKHMuc3RtdD09PUVKJiYocy5pZD09PSJbKl0iPyhzLmlkPXU/aS5pZCsiX3N0YXJ0IjppLmlkKyJfZW5kIixzLnN0YXJ0PXUpOnMuaWQ9cy5pZC50cmltKCkpLHMuZG9jKXtjb25zdCBkPVtdO2xldCBwPVtdLHY7Zm9yKHY9MDt2PHMuZG9jLmxlbmd0aDt2KyspaWYocy5kb2Nbdl0udHlwZT09PWNLZSl7Y29uc3QgYj1TSihzLmRvY1t2XSk7Yi5kb2M9U0oocCksZC5wdXNoKGIpLHA9W119ZWxzZSBwLnB1c2gocy5kb2Nbdl0pO2lmKGQubGVuZ3RoPjAmJnAubGVuZ3RoPjApe2NvbnN0IGI9e3N0bXQ6RUosaWQ6YmplKCksdHlwZToiZGl2aWRlciIsZG9jOlNKKHApfTtkLnB1c2goU0ooYikpLHMuZG9jPWR9cy5kb2MuZm9yRWFjaChiPT5fSihzLGIsITApKX19LHVzbj0oKT0+KF9KKHtpZDoicm9vdCJ9LHtpZDoicm9vdCIsZG9jOlRKfSwhMCkse2lkOiJyb290Iixkb2M6VEp9KSxsc249aT0+e2xldCBzO2kuZG9jP3M9aS5kb2M6cz1pLFhlLmluZm8ocyksdktlKCEwKSxYZS5pbmZvKCJFeHRyYWN0IixzKSxzLmZvckVhY2godT0+e3N3aXRjaCh1LnN0bXQpe2Nhc2UgRUo6clModS5pZC50cmltKCksdS50eXBlLHUuZG9jLHUuZGVzY3JpcHRpb24sdS5ub3RlLHUuY2xhc3Nlcyx1LnN0eWxlcyx1LnRleHRTdHlsZXMpO2JyZWFrO2Nhc2UgUHZlOndLZSh1LnN0YXRlMSx1LnN0YXRlMix1LmRlc2NyaXB0aW9uKTticmVhaztjYXNlIHRzbjp5S2UodS5pZC50cmltKCksdS5jbGFzc2VzKTticmVhaztjYXNlIG5zbjokdmUodS5pZC50cmltKCksdS5zdHlsZUNsYXNzKTticmVha319KX0sclM9ZnVuY3Rpb24oaSxzPVhSLHU9bnVsbCxkPW51bGwscD1udWxsLHY9bnVsbCxiPW51bGwseT1udWxsKXtjb25zdCBUPWk9PW51bGw/dm9pZCAwOmkudHJpbSgpO2pnLnN0YXRlc1tUXT09PXZvaWQgMD8oWGUuaW5mbygiQWRkaW5nIHN0YXRlICIsVCxkKSxqZy5zdGF0ZXNbVF09e2lkOlQsZGVzY3JpcHRpb25zOltdLHR5cGU6cyxkb2M6dSxub3RlOnAsY2xhc3NlczpbXSxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pOihqZy5zdGF0ZXNbVF0uZG9jfHwoamcuc3RhdGVzW1RdLmRvYz11KSxqZy5zdGF0ZXNbVF0udHlwZXx8KGpnLnN0YXRlc1tUXS50eXBlPXMpKSxkJiYoWGUuaW5mbygiU2V0dGluZyBzdGF0ZSBkZXNjcmlwdGlvbiIsVCxkKSx0eXBlb2YgZD09InN0cmluZyImJmp2ZShULGQudHJpbSgpKSx0eXBlb2YgZD09Im9iamVjdCImJmQuZm9yRWFjaChfPT5qdmUoVCxfLnRyaW0oKSkpKSxwJiYoamcuc3RhdGVzW1RdLm5vdGU9cCxqZy5zdGF0ZXNbVF0ubm90ZS50ZXh0PWNpLnNhbml0aXplVGV4dChqZy5zdGF0ZXNbVF0ubm90ZS50ZXh0LHF0KCkpKSx2JiYoWGUuaW5mbygiU2V0dGluZyBzdGF0ZSBjbGFzc2VzIixULHYpLCh0eXBlb2Ygdj09InN0cmluZyI/W3ZdOnYpLmZvckVhY2goQT0+JHZlKFQsQS50cmltKCkpKSksYiYmKFhlLmluZm8oIlNldHRpbmcgc3RhdGUgc3R5bGVzIixULGIpLCh0eXBlb2YgYj09InN0cmluZyI/W2JdOmIpLmZvckVhY2goQT0+eXNuKFQsQS50cmltKCkpKSkseSYmKFhlLmluZm8oIlNldHRpbmcgc3RhdGUgc3R5bGVzIixULGIpLCh0eXBlb2YgeT09InN0cmluZyI/W3ldOnkpLmZvckVhY2goQT0+eHNuKFQsQS50cmltKCkpKSl9LHZLZT1mdW5jdGlvbihpKXtDSj17cm9vdDpiS2UoKX0samc9Q0oucm9vdCxKUj0wLFFSPWdLZSgpLGl8fFBnKCl9LFpSPWZ1bmN0aW9uKGkpe3JldHVybiBqZy5zdGF0ZXNbaV19LGhzbj1mdW5jdGlvbigpe3JldHVybiBqZy5zdGF0ZXN9LGZzbj1mdW5jdGlvbigpe1hlLmluZm8oIkRvY3VtZW50cyA9ICIsQ0opfSxkc249ZnVuY3Rpb24oKXtyZXR1cm4gamcucmVsYXRpb25zfTtmdW5jdGlvbiBGdmUoaT0iIil7bGV0IHM9aTtyZXR1cm4gaT09PUJ2ZSYmKEpSKysscz1gJHt1S2V9JHtKUn1gKSxzfWZ1bmN0aW9uIFJ2ZShpPSIiLHM9WFIpe3JldHVybiBpPT09QnZlP3VLZTpzfWZ1bmN0aW9uIGdzbihpPSIiKXtsZXQgcz1pO3JldHVybiBpPT09bEtlJiYoSlIrKyxzPWAke2hLZX0ke0pSfWApLHN9ZnVuY3Rpb24gcHNuKGk9IiIscz1YUil7cmV0dXJuIGk9PT1sS2U/aEtlOnN9ZnVuY3Rpb24gYnNuKGkscyx1KXtsZXQgZD1GdmUoaS5pZC50cmltKCkpLHA9UnZlKGkuaWQudHJpbSgpLGkudHlwZSksdj1GdmUocy5pZC50cmltKCkpLGI9UnZlKHMuaWQudHJpbSgpLHMudHlwZSk7clMoZCxwLGkuZG9jLGkuZGVzY3JpcHRpb24saS5ub3RlLGkuY2xhc3NlcyxpLnN0eWxlcyxpLnRleHRTdHlsZXMpLHJTKHYsYixzLmRvYyxzLmRlc2NyaXB0aW9uLHMubm90ZSxzLmNsYXNzZXMscy5zdHlsZXMscy50ZXh0U3R5bGVzKSxqZy5yZWxhdGlvbnMucHVzaCh7aWQxOmQsaWQyOnYscmVsYXRpb25UaXRsZTpjaS5zYW5pdGl6ZVRleHQodSxxdCgpKX0pfWNvbnN0IHdLZT1mdW5jdGlvbihpLHMsdSl7aWYodHlwZW9mIGk9PSJvYmplY3QiKWJzbihpLHMsdSk7ZWxzZXtjb25zdCBkPUZ2ZShpLnRyaW0oKSkscD1SdmUoaSksdj1nc24ocy50cmltKCkpLGI9cHNuKHMpO3JTKGQscCksclModixiKSxqZy5yZWxhdGlvbnMucHVzaCh7aWQxOmQsaWQyOnYsdGl0bGU6Y2kuc2FuaXRpemVUZXh0KHUscXQoKSl9KX19LGp2ZT1mdW5jdGlvbihpLHMpe2NvbnN0IHU9amcuc3RhdGVzW2ldLGQ9cy5zdGFydHNXaXRoKCI6Iik/cy5yZXBsYWNlKCI6IiwiIikudHJpbSgpOnM7dS5kZXNjcmlwdGlvbnMucHVzaChjaS5zYW5pdGl6ZVRleHQoZCxxdCgpKSl9LG1zbj1mdW5jdGlvbihpKXtyZXR1cm4gaS5zdWJzdHJpbmcoMCwxKT09PSI6Ij9pLnN1YnN0cigyKS50cmltKCk6aS50cmltKCl9LHZzbj0oKT0+KG1LZSsrLCJkaXZpZGVyLWlkLSIrbUtlKSx5S2U9ZnVuY3Rpb24oaSxzPSIiKXtRUltpXT09PXZvaWQgMCYmKFFSW2ldPXtpZDppLHN0eWxlczpbXSx0ZXh0U3R5bGVzOltdfSk7Y29uc3QgdT1RUltpXTtzIT1udWxsJiZzLnNwbGl0KGlzbikuZm9yRWFjaChkPT57Y29uc3QgcD1kLnJlcGxhY2UoLyhbXjtdKik7LywiJDEiKS50cmltKCk7aWYoZC5tYXRjaChmS2UpKXtjb25zdCBiPXAucmVwbGFjZShkS2UscnNuKS5yZXBsYWNlKGZLZSxkS2UpO3UudGV4dFN0eWxlcy5wdXNoKGIpfXUuc3R5bGVzLnB1c2gocCl9KX0sd3NuPWZ1bmN0aW9uKCl7cmV0dXJuIFFSfSwkdmU9ZnVuY3Rpb24oaSxzKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbih1KXtsZXQgZD1aUih1KTtpZihkPT09dm9pZCAwKXtjb25zdCBwPXUudHJpbSgpO3JTKHApLGQ9WlIocCl9ZC5jbGFzc2VzLnB1c2gocyl9KX0seXNuPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1aUihpKTt1IT09dm9pZCAwJiZ1LnRleHRTdHlsZXMucHVzaChzKX0seHNuPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1aUihpKTt1IT09dm9pZCAwJiZ1LnRleHRTdHlsZXMucHVzaChzKX0sRzc9e2dldENvbmZpZzooKT0+cXQoKS5zdGF0ZSxhZGRTdGF0ZTpyUyxjbGVhcjp2S2UsZ2V0U3RhdGU6WlIsZ2V0U3RhdGVzOmhzbixnZXRSZWxhdGlvbnM6ZHNuLGdldENsYXNzZXM6d3NuLGdldERpcmVjdGlvbjooKT0+cEtlLGFkZFJlbGF0aW9uOndLZSxnZXREaXZpZGVySWQ6dnNuLHNldERpcmVjdGlvbjppPT57cEtlPWl9LGNsZWFudXBMYWJlbDptc24sbGluZVR5cGU6c3NuLHJlbGF0aW9uVHlwZTphc24sbG9nRG9jdW1lbnRzOmZzbixnZXRSb290RG9jOmNzbixzZXRSb290RG9jOm9zbixnZXRSb290RG9jVjI6dXNuLGV4dHJhY3Q6bHNuLHRyaW1Db2xvbjppPT5pJiZpWzBdPT09IjoiP2kuc3Vic3RyKDEpLnRyaW0oKTppLnRyaW0oKSxnZXRBY2NUaXRsZTpDcCxzZXRBY2NUaXRsZTpCZyxnZXRBY2NEZXNjcmlwdGlvbjpfcCxzZXRBY2NEZXNjcmlwdGlvbjpTcCxhZGRTdHlsZUNsYXNzOnlLZSxzZXRDc3NDbGFzczokdmUsYWRkRGVzY3JpcHRpb246anZlLHNldERpYWdyYW1UaXRsZTpjbSxnZXREaWFncmFtVGl0bGU6QXB9LHhLZT1pPT5gCmRlZnMgI3N0YXRlZGlhZ3JhbS1iYXJiRW5kIHsKICAgIGZpbGw6ICR7aS50cmFuc2l0aW9uQ29sb3J9OwogICAgc3Ryb2tlOiAke2kudHJhbnNpdGlvbkNvbG9yfTsKICB9Cmcuc3RhdGVHcm91cCB0ZXh0IHsKICBmaWxsOiAke2kubm9kZUJvcmRlcn07CiAgc3Ryb2tlOiBub25lOwogIGZvbnQtc2l6ZTogMTBweDsKfQpnLnN0YXRlR3JvdXAgdGV4dCB7CiAgZmlsbDogJHtpLnRleHRDb2xvcn07CiAgc3Ryb2tlOiBub25lOwogIGZvbnQtc2l6ZTogMTBweDsKCn0KZy5zdGF0ZUdyb3VwIC5zdGF0ZS10aXRsZSB7CiAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKICBmaWxsOiAke2kuc3RhdGVMYWJlbENvbG9yfTsKfQoKZy5zdGF0ZUdyb3VwIHJlY3QgewogIGZpbGw6ICR7aS5tYWluQmtnfTsKICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKfQoKZy5zdGF0ZUdyb3VwIGxpbmUgewogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgoudHJhbnNpdGlvbiB7CiAgc3Ryb2tlOiAke2kudHJhbnNpdGlvbkNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDE7CiAgZmlsbDogbm9uZTsKfQoKLnN0YXRlR3JvdXAgLmNvbXBvc2l0IHsKICBmaWxsOiAke2kuYmFja2dyb3VuZH07CiAgYm9yZGVyLWJvdHRvbTogMXB4Cn0KCi5zdGF0ZUdyb3VwIC5hbHQtY29tcG9zaXQgewogIGZpbGw6ICNlMGUwZTA7CiAgYm9yZGVyLWJvdHRvbTogMXB4Cn0KCi5zdGF0ZS1ub3RlIHsKICBzdHJva2U6ICR7aS5ub3RlQm9yZGVyQ29sb3J9OwogIGZpbGw6ICR7aS5ub3RlQmtnQ29sb3J9OwoKICB0ZXh0IHsKICAgIGZpbGw6ICR7aS5ub3RlVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICB9Cn0KCi5zdGF0ZUxhYmVsIC5ib3ggewogIHN0cm9rZTogbm9uZTsKICBzdHJva2Utd2lkdGg6IDA7CiAgZmlsbDogJHtpLm1haW5Ca2d9OwogIG9wYWNpdHk6IDAuNTsKfQoKLmVkZ2VMYWJlbCAubGFiZWwgcmVjdCB7CiAgZmlsbDogJHtpLmxhYmVsQmFja2dyb3VuZENvbG9yfTsKICBvcGFjaXR5OiAwLjU7Cn0KLmVkZ2VMYWJlbCAubGFiZWwgdGV4dCB7CiAgZmlsbDogJHtpLnRyYW5zaXRpb25MYWJlbENvbG9yfHxpLnRlcnRpYXJ5VGV4dENvbG9yfTsKfQoubGFiZWwgZGl2IC5lZGdlTGFiZWwgewogIGNvbG9yOiAke2kudHJhbnNpdGlvbkxhYmVsQ29sb3J8fGkudGVydGlhcnlUZXh0Q29sb3J9Owp9Cgouc3RhdGVMYWJlbCB0ZXh0IHsKICBmaWxsOiAke2kuc3RhdGVMYWJlbENvbG9yfTsKICBmb250LXNpemU6IDEwcHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5ub2RlIGNpcmNsZS5zdGF0ZS1zdGFydCB7CiAgZmlsbDogJHtpLnNwZWNpYWxTdGF0ZUNvbG9yfTsKICBzdHJva2U6ICR7aS5zcGVjaWFsU3RhdGVDb2xvcn07Cn0KCi5ub2RlIC5mb3JrLWpvaW4gewogIGZpbGw6ICR7aS5zcGVjaWFsU3RhdGVDb2xvcn07CiAgc3Ryb2tlOiAke2kuc3BlY2lhbFN0YXRlQ29sb3J9Owp9Cgoubm9kZSBjaXJjbGUuc3RhdGUtZW5kIHsKICBmaWxsOiAke2kuaW5uZXJFbmRCYWNrZ3JvdW5kfTsKICBzdHJva2U6ICR7aS5iYWNrZ3JvdW5kfTsKICBzdHJva2Utd2lkdGg6IDEuNQp9Ci5lbmQtc3RhdGUtaW5uZXIgewogIGZpbGw6ICR7aS5jb21wb3NpdGVCYWNrZ3JvdW5kfHxpLmJhY2tncm91bmR9OwogIC8vIHN0cm9rZTogJHtpLmJhY2tncm91bmR9OwogIHN0cm9rZS13aWR0aDogMS41Cn0KCi5ub2RlIHJlY3QgewogIGZpbGw6ICR7aS5zdGF0ZUJrZ3x8aS5tYWluQmtnfTsKICBzdHJva2U6ICR7aS5zdGF0ZUJvcmRlcnx8aS5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoubm9kZSBwb2x5Z29uIHsKICBmaWxsOiAke2kubWFpbkJrZ307CiAgc3Ryb2tlOiAke2kuc3RhdGVCb3JkZXJ8fGkubm9kZUJvcmRlcn07OwogIHN0cm9rZS13aWR0aDogMXB4Owp9CiNzdGF0ZWRpYWdyYW0tYmFyYkVuZCB7CiAgZmlsbDogJHtpLmxpbmVDb2xvcn07Cn0KCi5zdGF0ZWRpYWdyYW0tY2x1c3RlciByZWN0IHsKICBmaWxsOiAke2kuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfTsKICBzdHJva2U6ICR7aS5zdGF0ZUJvcmRlcnx8aS5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLmNsdXN0ZXItbGFiZWwsIC5ub2RlTGFiZWwgewogIGNvbG9yOiAke2kuc3RhdGVMYWJlbENvbG9yfTsKfQoKLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qub3V0ZXIgewogIHJ4OiA1cHg7CiAgcnk6IDVweDsKfQouc3RhdGVkaWFncmFtLXN0YXRlIC5kaXZpZGVyIHsKICBzdHJva2U6ICR7aS5zdGF0ZUJvcmRlcnx8aS5ub2RlQm9yZGVyfTsKfQoKLnN0YXRlZGlhZ3JhbS1zdGF0ZSAudGl0bGUtc3RhdGUgewogIHJ4OiA1cHg7CiAgcnk6IDVweDsKfQouc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXIgLmlubmVyIHsKICBmaWxsOiAke2kuY29tcG9zaXRlQmFja2dyb3VuZHx8aS5iYWNrZ3JvdW5kfTsKfQouc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXItYWx0IC5pbm5lciB7CiAgZmlsbDogJHtpLmFsdEJhY2tncm91bmQ/aS5hbHRCYWNrZ3JvdW5kOiIjZWZlZmVmIn07Cn0KCi5zdGF0ZWRpYWdyYW0tY2x1c3RlciAuaW5uZXIgewogIHJ4OjA7CiAgcnk6MDsKfQoKLnN0YXRlZGlhZ3JhbS1zdGF0ZSByZWN0LmJhc2ljIHsKICByeDogNXB4OwogIHJ5OiA1cHg7Cn0KLnN0YXRlZGlhZ3JhbS1zdGF0ZSByZWN0LmRpdmlkZXIgewogIHN0cm9rZS1kYXNoYXJyYXk6IDEwLDEwOwogIGZpbGw6ICR7aS5hbHRCYWNrZ3JvdW5kP2kuYWx0QmFja2dyb3VuZDoiI2VmZWZlZiJ9Owp9Cgoubm90ZS1lZGdlIHsKICBzdHJva2UtZGFzaGFycmF5OiA1Owp9Cgouc3RhdGVkaWFncmFtLW5vdGUgcmVjdCB7CiAgZmlsbDogJHtpLm5vdGVCa2dDb2xvcn07CiAgc3Ryb2tlOiAke2kubm90ZUJvcmRlckNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDFweDsKICByeDogMDsKICByeTogMDsKfQouc3RhdGVkaWFncmFtLW5vdGUgcmVjdCB7CiAgZmlsbDogJHtpLm5vdGVCa2dDb2xvcn07CiAgc3Ryb2tlOiAke2kubm90ZUJvcmRlckNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDFweDsKICByeDogMDsKICByeTogMDsKfQoKLnN0YXRlZGlhZ3JhbS1ub3RlIHRleHQgewogIGZpbGw6ICR7aS5ub3RlVGV4dENvbG9yfTsKfQoKLnN0YXRlZGlhZ3JhbS1ub3RlIC5ub2RlTGFiZWwgewogIGNvbG9yOiAke2kubm90ZVRleHRDb2xvcn07Cn0KLnN0YXRlZGlhZ3JhbSAuZWRnZUxhYmVsIHsKICBjb2xvcjogcmVkOyAvLyAke2kubm90ZVRleHRDb2xvcn07Cn0KCiNkZXBlbmRlbmN5U3RhcnQsICNkZXBlbmRlbmN5RW5kIHsKICBmaWxsOiAke2kubGluZUNvbG9yfTsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMTsKfQoKLnN0YXRlZGlhZ3JhbVRpdGxlVGV4dCB7CiAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICBmb250LXNpemU6IDE4cHg7CiAgZmlsbDogJHtpLnRleHRDb2xvcn07Cn0KYCx6dmU9e30sa3NuPShpLHMpPT57enZlW2ldPXN9LEVzbj1pPT56dmVbaV0sa0tlPSgpPT5PYmplY3Qua2V5cyh6dmUpLFRzbj17Z2V0OkVzbixzZXQ6a3NuLGtleXM6a0tlLHNpemU6KCk9PmtLZSgpLmxlbmd0aH0sQ3NuPWk9PmkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsInN0YXJ0LXN0YXRlIikuYXR0cigiciIscXQoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3giLHF0KCkuc3RhdGUucGFkZGluZytxdCgpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeSIscXQoKS5zdGF0ZS5wYWRkaW5nK3F0KCkuc3RhdGUuc2l6ZVVuaXQpLFNzbj1pPT5pLmFwcGVuZCgibGluZSIpLnN0eWxlKCJzdHJva2UiLCJncmV5Iikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzIikuYXR0cigieDEiLHF0KCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDIiLHF0KCkuc3RhdGUudGV4dEhlaWdodCoyKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDApLF9zbj0oaSxzKT0+e2NvbnN0IHU9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwyKnF0KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIscXQoKS5zdGF0ZS50ZXh0SGVpZ2h0KzIqcXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJmb250LXNpemUiLHF0KCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KHMuaWQpLGQ9dS5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBpLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLHF0KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIscXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsZC53aWR0aCsyKnF0KCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixkLmhlaWdodCsyKnF0KCkuc3RhdGUucGFkZGluZykuYXR0cigicngiLHF0KCkuc3RhdGUucmFkaXVzKSx1fSxBc249KGkscyk9Pntjb25zdCB1PWZ1bmN0aW9uKFIsRixqKXtjb25zdCBLPVIuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLDIqcXQoKS5zdGF0ZS5wYWRkaW5nKS50ZXh0KEYpO2p8fEsuYXR0cigiZHkiLHF0KCkuc3RhdGUudGV4dEhlaWdodCl9LHA9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwyKnF0KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIscXQoKS5zdGF0ZS50ZXh0SGVpZ2h0KzEuMypxdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImZvbnQtc2l6ZSIscXQoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQocy5kZXNjcmlwdGlvbnNbMF0pLm5vZGUoKS5nZXRCQm94KCksdj1wLmhlaWdodCxiPWkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5Iix2K3F0KCkuc3RhdGUucGFkZGluZyouNCtxdCgpLnN0YXRlLmRpdmlkZXJNYXJnaW4rcXQoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJjbGFzcyIsInN0YXRlLWRlc2NyaXB0aW9uIik7bGV0IHk9ITAsVD0hMDtzLmRlc2NyaXB0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKFIpe3l8fCh1KGIsUixUKSxUPSExKSx5PSExfSk7Y29uc3QgXz1pLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixxdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkxIixxdCgpLnN0YXRlLnBhZGRpbmcrditxdCgpLnN0YXRlLmRpdmlkZXJNYXJnaW4vMikuYXR0cigieTIiLHF0KCkuc3RhdGUucGFkZGluZyt2K3F0KCkuc3RhdGUuZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJjbGFzcyIsImRlc2NyLWRpdmlkZXIiKSxBPWIubm9kZSgpLmdldEJCb3goKSxQPU1hdGgubWF4KEEud2lkdGgscC53aWR0aCk7cmV0dXJuIF8uYXR0cigieDIiLFArMypxdCgpLnN0YXRlLnBhZGRpbmcpLGkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixxdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixQKzIqcXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLEEuaGVpZ2h0K3YrMipxdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInJ4IixxdCgpLnN0YXRlLnJhZGl1cyksaX0sTHNuPShpLHMsdSk9Pntjb25zdCBkPXF0KCkuc3RhdGUucGFkZGluZyxwPTIqcXQoKS5zdGF0ZS5wYWRkaW5nLHY9aS5ub2RlKCkuZ2V0QkJveCgpLGI9di53aWR0aCx5PXYueCxUPWkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIscXQoKS5zdGF0ZS50aXRsZVNoaWZ0KS5hdHRyKCJmb250LXNpemUiLHF0KCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KHMuaWQpLEE9VC5ub2RlKCkuZ2V0QkJveCgpLndpZHRoK3A7bGV0IFA9TWF0aC5tYXgoQSxiKTtQPT09YiYmKFA9UCtwKTtsZXQgUjtjb25zdCBGPWkubm9kZSgpLmdldEJCb3goKTtzLmRvYyxSPXktZCxBPmImJihSPShiLVApLzIrZCksTWF0aC5hYnMoeS1GLngpPGQmJkE+YiYmKFI9eS0oQS1iKS8yKTtjb25zdCBqPTEtcXQoKS5zdGF0ZS50ZXh0SGVpZ2h0O3JldHVybiBpLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLFIpLmF0dHIoInkiLGopLmF0dHIoImNsYXNzIix1PyJhbHQtY29tcG9zaXQiOiJjb21wb3NpdCIpLmF0dHIoIndpZHRoIixQKS5hdHRyKCJoZWlnaHQiLEYuaGVpZ2h0K3F0KCkuc3RhdGUudGV4dEhlaWdodCtxdCgpLnN0YXRlLnRpdGxlU2hpZnQrMSkuYXR0cigicngiLCIwIiksVC5hdHRyKCJ4IixSK2QpLEE8PWImJlQuYXR0cigieCIseSsoUC1wKS8yLUEvMitkKSxpLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLFIpLmF0dHIoInkiLHF0KCkuc3RhdGUudGl0bGVTaGlmdC1xdCgpLnN0YXRlLnRleHRIZWlnaHQtcXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsUCkuYXR0cigiaGVpZ2h0IixxdCgpLnN0YXRlLnRleHRIZWlnaHQqMykuYXR0cigicngiLHF0KCkuc3RhdGUucmFkaXVzKSxpLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLFIpLmF0dHIoInkiLHF0KCkuc3RhdGUudGl0bGVTaGlmdC1xdCgpLnN0YXRlLnRleHRIZWlnaHQtcXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsUCkuYXR0cigiaGVpZ2h0IixGLmhlaWdodCszKzIqcXQoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJyeCIscXQoKS5zdGF0ZS5yYWRpdXMpLGl9LE1zbj1pPT4oaS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwiZW5kLXN0YXRlLW91dGVyIikuYXR0cigiciIscXQoKS5zdGF0ZS5zaXplVW5pdCtxdCgpLnN0YXRlLm1pbmlQYWRkaW5nKS5hdHRyKCJjeCIscXQoKS5zdGF0ZS5wYWRkaW5nK3F0KCkuc3RhdGUuc2l6ZVVuaXQrcXQoKS5zdGF0ZS5taW5pUGFkZGluZykuYXR0cigiY3kiLHF0KCkuc3RhdGUucGFkZGluZytxdCgpLnN0YXRlLnNpemVVbml0K3F0KCkuc3RhdGUubWluaVBhZGRpbmcpLGkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsImVuZC1zdGF0ZS1pbm5lciIpLmF0dHIoInIiLHF0KCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN4IixxdCgpLnN0YXRlLnBhZGRpbmcrcXQoKS5zdGF0ZS5zaXplVW5pdCsyKS5hdHRyKCJjeSIscXQoKS5zdGF0ZS5wYWRkaW5nK3F0KCkuc3RhdGUuc2l6ZVVuaXQrMikpLERzbj0oaSxzKT0+e2xldCB1PXF0KCkuc3RhdGUuZm9ya1dpZHRoLGQ9cXQoKS5zdGF0ZS5mb3JrSGVpZ2h0O2lmKHMucGFyZW50SWQpe2xldCBwPXU7dT1kLGQ9cH1yZXR1cm4gaS5hcHBlbmQoInJlY3QiKS5zdHlsZSgic3Ryb2tlIiwiYmxhY2siKS5zdHlsZSgiZmlsbCIsImJsYWNrIikuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsZCkuYXR0cigieCIscXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixxdCgpLnN0YXRlLnBhZGRpbmcpfSxJc249KGkscyx1LGQpPT57bGV0IHA9MDtjb25zdCB2PWQuYXBwZW5kKCJ0ZXh0Iik7di5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLHYuYXR0cigiY2xhc3MiLCJub3RlVGV4dCIpO2xldCBiPWkucmVwbGFjZSgvXHJcbi9nLCI8YnIvPiIpO2I9Yi5yZXBsYWNlKC9cbi9nLCI8YnIvPiIpO2NvbnN0IHk9Yi5zcGxpdChjaS5saW5lQnJlYWtSZWdleCk7bGV0IFQ9MS4yNSpxdCgpLnN0YXRlLm5vdGVNYXJnaW47Zm9yKGNvbnN0IF8gb2YgeSl7Y29uc3QgQT1fLnRyaW0oKTtpZihBLmxlbmd0aD4wKXtjb25zdCBQPXYuYXBwZW5kKCJ0c3BhbiIpO2lmKFAudGV4dChBKSxUPT09MCl7Y29uc3QgUj1QLm5vZGUoKS5nZXRCQm94KCk7VCs9Ui5oZWlnaHR9cCs9VCxQLmF0dHIoIngiLHMrcXQoKS5zdGF0ZS5ub3RlTWFyZ2luKSxQLmF0dHIoInkiLHUrcCsxLjI1KnF0KCkuc3RhdGUubm90ZU1hcmdpbil9fXJldHVybnt0ZXh0V2lkdGg6di5ub2RlKCkuZ2V0QkJveCgpLndpZHRoLHRleHRIZWlnaHQ6cH19LE9zbj0oaSxzKT0+e3MuYXR0cigiY2xhc3MiLCJzdGF0ZS1ub3RlIik7Y29uc3QgdT1zLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLHF0KCkuc3RhdGUucGFkZGluZyksZD1zLmFwcGVuZCgiZyIpLHt0ZXh0V2lkdGg6cCx0ZXh0SGVpZ2h0OnZ9PUlzbihpLDAsMCxkKTtyZXR1cm4gdS5hdHRyKCJoZWlnaHQiLHYrMipxdCgpLnN0YXRlLm5vdGVNYXJnaW4pLHUuYXR0cigid2lkdGgiLHArcXQoKS5zdGF0ZS5ub3RlTWFyZ2luKjIpLHV9LEVLZT1mdW5jdGlvbihpLHMpe2NvbnN0IHU9cy5pZCxkPXtpZDp1LGxhYmVsOnMuaWQsd2lkdGg6MCxoZWlnaHQ6MH0scD1pLmFwcGVuZCgiZyIpLmF0dHIoImlkIix1KS5hdHRyKCJjbGFzcyIsInN0YXRlR3JvdXAiKTtzLnR5cGU9PT0ic3RhcnQiJiZDc24ocCkscy50eXBlPT09ImVuZCImJk1zbihwKSwocy50eXBlPT09ImZvcmsifHxzLnR5cGU9PT0iam9pbiIpJiZEc24ocCxzKSxzLnR5cGU9PT0ibm90ZSImJk9zbihzLm5vdGUudGV4dCxwKSxzLnR5cGU9PT0iZGl2aWRlciImJlNzbihwKSxzLnR5cGU9PT0iZGVmYXVsdCImJnMuZGVzY3JpcHRpb25zLmxlbmd0aD09PTAmJl9zbihwLHMpLHMudHlwZT09PSJkZWZhdWx0IiYmcy5kZXNjcmlwdGlvbnMubGVuZ3RoPjAmJkFzbihwLHMpO2NvbnN0IHY9cC5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBkLndpZHRoPXYud2lkdGgrMipxdCgpLnN0YXRlLnBhZGRpbmcsZC5oZWlnaHQ9di5oZWlnaHQrMipxdCgpLnN0YXRlLnBhZGRpbmcsVHNuLnNldCh1LGQpLGR9O2xldCBUS2U9MDtjb25zdCBOc249ZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9ZnVuY3Rpb24oVCl7c3dpdGNoKFQpe2Nhc2UgRzcucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OOnJldHVybiJhZ2dyZWdhdGlvbiI7Y2FzZSBHNy5yZWxhdGlvblR5cGUuRVhURU5TSU9OOnJldHVybiJleHRlbnNpb24iO2Nhc2UgRzcucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OOnJldHVybiJjb21wb3NpdGlvbiI7Y2FzZSBHNy5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTpyZXR1cm4iZGVwZW5kZW5jeSJ9fTtzLnBvaW50cz1zLnBvaW50cy5maWx0ZXIoVD0+IU51bWJlci5pc05hTihULnkpKTtjb25zdCBwPXMucG9pbnRzLHY9azcoKS54KGZ1bmN0aW9uKFQpe3JldHVybiBULnh9KS55KGZ1bmN0aW9uKFQpe3JldHVybiBULnl9KS5jdXJ2ZShGRiksYj1pLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHYocCkpLmF0dHIoImlkIiwiZWRnZSIrVEtlKS5hdHRyKCJjbGFzcyIsInRyYW5zaXRpb24iKTtsZXQgeT0iIjtpZihxdCgpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGUmJih5PXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLHk9eS5yZXBsYWNlKC9cKC9nLCJcXCgiKSx5PXkucmVwbGFjZSgvXCkvZywiXFwpIikpLGIuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3krIiMiK2QoRzcucmVsYXRpb25UeXBlLkRFUEVOREVOQ1kpKyJFbmQpIiksdS50aXRsZSE9PXZvaWQgMCl7Y29uc3QgVD1pLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwic3RhdGVMYWJlbCIpLHt4Ol8seTpBfT1Bby5jYWxjTGFiZWxQb3NpdGlvbihzLnBvaW50cyksUD1jaS5nZXRSb3dzKHUudGl0bGUpO2xldCBSPTA7Y29uc3QgRj1bXTtsZXQgaj0wLEs9MDtmb3IobGV0IG9lPTA7b2U8PVAubGVuZ3RoO29lKyspe2NvbnN0IHBlPVQuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KFBbb2VdKS5hdHRyKCJ4IixfKS5hdHRyKCJ5IixBK1IpLGJlPXBlLm5vZGUoKS5nZXRCQm94KCk7aj1NYXRoLm1heChqLGJlLndpZHRoKSxLPU1hdGgubWluKEssYmUueCksWGUuaW5mbyhiZS54LF8sQStSKSxSPT09MCYmKFI9cGUubm9kZSgpLmdldEJCb3goKS5oZWlnaHQsWGUuaW5mbygiVGl0bGUgaGVpZ2h0IixSLEEpKSxGLnB1c2gocGUpfWxldCBlZT1SKlAubGVuZ3RoO2lmKFAubGVuZ3RoPjEpe2NvbnN0IG9lPShQLmxlbmd0aC0xKSpSKi41O0YuZm9yRWFjaCgocGUsYmUpPT5wZS5hdHRyKCJ5IixBK2JlKlItb2UpKSxlZT1SKlAubGVuZ3RofWNvbnN0IGllPVQubm9kZSgpLmdldEJCb3goKTtULmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwiYm94IikuYXR0cigieCIsXy1qLzItcXQoKS5zdGF0ZS5wYWRkaW5nLzIpLmF0dHIoInkiLEEtZWUvMi1xdCgpLnN0YXRlLnBhZGRpbmcvMi0zLjUpLmF0dHIoIndpZHRoIixqK3F0KCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixlZStxdCgpLnN0YXRlLnBhZGRpbmcpLFhlLmluZm8oaWUpfVRLZSsrfTtsZXQgZ207Y29uc3QgcXZlPXt9LFBzbj1mdW5jdGlvbigpe30sQnNuPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImRlcGVuZGVuY3lFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTksNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0sRnNuPWZ1bmN0aW9uKGkscyx1LGQpe2dtPXF0KCkuc3RhdGU7Y29uc3QgcD1xdCgpLnNlY3VyaXR5TGV2ZWw7bGV0IHY7cD09PSJzYW5kYm94IiYmKHY9SXIoIiNpIitzKSk7Y29uc3QgYj1JcihwPT09InNhbmRib3giP3Yubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLHk9cD09PSJzYW5kYm94Ij92Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50O1hlLmRlYnVnKCJSZW5kZXJpbmcgZGlhZ3JhbSAiK2kpO2NvbnN0IFQ9Yi5zZWxlY3QoYFtpZD0nJHtzfSddYCk7QnNuKFQpO2NvbnN0IF89ZC5kYi5nZXRSb290RG9jKCk7Q0tlKF8sVCx2b2lkIDAsITEsYix5LGQpO2NvbnN0IEE9Z20ucGFkZGluZyxQPVQubm9kZSgpLmdldEJCb3goKSxSPVAud2lkdGgrQSoyLEY9UC5oZWlnaHQrQSoyLGo9UioxLjc1O05nKFQsRixqLGdtLnVzZU1heFdpZHRoKSxULmF0dHIoInZpZXdCb3giLGAke1AueC1nbS5wYWRkaW5nfSAgJHtQLnktZ20ucGFkZGluZ30gYCtSKyIgIitGKX0sUnNuPWk9Pmk/aS5sZW5ndGgqZ20uZm9udFNpemVGYWN0b3I6MSxDS2U9KGkscyx1LGQscCx2LGIpPT57Y29uc3QgeT1uZXcgQjAoe2NvbXBvdW5kOiEwLG11bHRpZ3JhcGg6ITB9KTtsZXQgVCxfPSEwO2ZvcihUPTA7VDxpLmxlbmd0aDtUKyspaWYoaVtUXS5zdG10PT09InJlbGF0aW9uIil7Xz0hMTticmVha311P3kuc2V0R3JhcGgoe3JhbmtkaXI6IkxSIixtdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwLHJhbmtlcjoidGlnaHQtdHJlZSIscmFua3NlcDpfPzE6Z20uZWRnZUxlbmd0aEZhY3Rvcixub2RlU2VwOl8/MTo1MCxpc011bHRpR3JhcGg6ITB9KTp5LnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rc2VwOl8/MTpnbS5lZGdlTGVuZ3RoRmFjdG9yLG5vZGVTZXA6Xz8xOjUwLHJhbmtlcjoidGlnaHQtdHJlZSIsaXNNdWx0aUdyYXBoOiEwfSkseS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KSxiLmRiLmV4dHJhY3QoaSk7Y29uc3QgQT1iLmRiLmdldFN0YXRlcygpLFA9Yi5kYi5nZXRSZWxhdGlvbnMoKSxSPU9iamVjdC5rZXlzKEEpO2Zvcihjb25zdCBpZSBvZiBSKXtjb25zdCBvZT1BW2llXTt1JiYob2UucGFyZW50SWQ9dSk7bGV0IHBlO2lmKG9lLmRvYyl7bGV0IGJlPXMuYXBwZW5kKCJnIikuYXR0cigiaWQiLG9lLmlkKS5hdHRyKCJjbGFzcyIsInN0YXRlR3JvdXAiKTtwZT1DS2Uob2UuZG9jLGJlLG9lLmlkLCFkLHAsdixiKTt7YmU9THNuKGJlLG9lLGQpO2xldCBhZT1iZS5ub2RlKCkuZ2V0QkJveCgpO3BlLndpZHRoPWFlLndpZHRoLHBlLmhlaWdodD1hZS5oZWlnaHQrZ20ucGFkZGluZy8yLHF2ZVtvZS5pZF09e3k6Z20uY29tcG9zaXRUaXRsZVNpemV9fX1lbHNlIHBlPUVLZShzLG9lKTtpZihvZS5ub3RlKXtjb25zdCBiZT17ZGVzY3JpcHRpb25zOltdLGlkOm9lLmlkKyItbm90ZSIsbm90ZTpvZS5ub3RlLHR5cGU6Im5vdGUifSxhZT1FS2UocyxiZSk7b2Uubm90ZS5wb3NpdGlvbj09PSJsZWZ0IG9mIj8oeS5zZXROb2RlKHBlLmlkKyItbm90ZSIsYWUpLHkuc2V0Tm9kZShwZS5pZCxwZSkpOih5LnNldE5vZGUocGUuaWQscGUpLHkuc2V0Tm9kZShwZS5pZCsiLW5vdGUiLGFlKSkseS5zZXRQYXJlbnQocGUuaWQscGUuaWQrIi1ncm91cCIpLHkuc2V0UGFyZW50KHBlLmlkKyItbm90ZSIscGUuaWQrIi1ncm91cCIpfWVsc2UgeS5zZXROb2RlKHBlLmlkLHBlKX1YZS5kZWJ1ZygiQ291bnQ9Iix5Lm5vZGVDb3VudCgpLHkpO2xldCBGPTA7UC5mb3JFYWNoKGZ1bmN0aW9uKGllKXtGKyssWGUuZGVidWcoIlNldHRpbmcgZWRnZSIsaWUpLHkuc2V0RWRnZShpZS5pZDEsaWUuaWQyLHtyZWxhdGlvbjppZSx3aWR0aDpSc24oaWUudGl0bGUpLGhlaWdodDpnbS5sYWJlbEhlaWdodCpjaS5nZXRSb3dzKGllLnRpdGxlKS5sZW5ndGgsbGFiZWxwb3M6ImMifSwiaWQiK0YpfSkscUQoeSksWGUuZGVidWcoIkdyYXBoIGFmdGVyIGxheW91dCIseS5ub2RlcygpKTtjb25zdCBqPXMubm9kZSgpO3kubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGllKXtpZSE9PXZvaWQgMCYmeS5ub2RlKGllKSE9PXZvaWQgMD8oWGUud2FybigiTm9kZSAiK2llKyI6ICIrSlNPTi5zdHJpbmdpZnkoeS5ub2RlKGllKSkpLHAuc2VsZWN0KCIjIitqLmlkKyIgIyIraWUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyh5Lm5vZGUoaWUpLngteS5ub2RlKGllKS53aWR0aC8yKSsiLCIrKHkubm9kZShpZSkueSsocXZlW2llXT9xdmVbaWVdLnk6MCkteS5ub2RlKGllKS5oZWlnaHQvMikrIiApIikscC5zZWxlY3QoIiMiK2ouaWQrIiAjIitpZSkuYXR0cigiZGF0YS14LXNoaWZ0Iix5Lm5vZGUoaWUpLngteS5ub2RlKGllKS53aWR0aC8yKSx2LnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK2ouaWQrIiAjIitpZSsiIC5kaXZpZGVyIikuZm9yRWFjaChwZT0+e2NvbnN0IGJlPXBlLnBhcmVudEVsZW1lbnQ7bGV0IGFlPTAsbmU9MDtiZSYmKGJlLnBhcmVudEVsZW1lbnQmJihhZT1iZS5wYXJlbnRFbGVtZW50LmdldEJCb3goKS53aWR0aCksbmU9cGFyc2VJbnQoYmUuZ2V0QXR0cmlidXRlKCJkYXRhLXgtc2hpZnQiKSwxMCksTnVtYmVyLmlzTmFOKG5lKSYmKG5lPTApKSxwZS5zZXRBdHRyaWJ1dGUoIngxIiwwLW5lKzgpLHBlLnNldEF0dHJpYnV0ZSgieDIiLGFlLW5lLTgpfSkpOlhlLmRlYnVnKCJObyBOb2RlICIraWUrIjogIitKU09OLnN0cmluZ2lmeSh5Lm5vZGUoaWUpKSl9KTtsZXQgSz1qLmdldEJCb3goKTt5LmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihpZSl7aWUhPT12b2lkIDAmJnkuZWRnZShpZSkhPT12b2lkIDAmJihYZS5kZWJ1ZygiRWRnZSAiK2llLnYrIiAtPiAiK2llLncrIjogIitKU09OLnN0cmluZ2lmeSh5LmVkZ2UoaWUpKSksTnNuKHMseS5lZGdlKGllKSx5LmVkZ2UoaWUpLnJlbGF0aW9uKSl9KSxLPWouZ2V0QkJveCgpO2NvbnN0IGVlPXtpZDp1fHwicm9vdCIsbGFiZWw6dXx8InJvb3QiLHdpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiBlZS53aWR0aD1LLndpZHRoKzIqZ20ucGFkZGluZyxlZS5oZWlnaHQ9Sy5oZWlnaHQrMipnbS5wYWRkaW5nLFhlLmRlYnVnKCJEb2MgcmVuZGVyZWQiLGVlLHkpLGVlfSxqc249T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpvS2UsZGI6RzcscmVuZGVyZXI6e3NldENvbmY6UHNuLGRyYXc6RnNufSxzdHlsZXM6eEtlLGluaXQ6aT0+e2kuc3RhdGV8fChpLnN0YXRlPXt9KSxpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGU9aS5hcnJvd01hcmtlckFic29sdXRlLEc3LmNsZWFyKCl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxBSj0icmVjdCIsSHZlPSJyZWN0V2l0aFRpdGxlIiwkc249InN0YXJ0Iix6c249ImVuZCIscXNuPSJkaXZpZGVyIixIc249InJvdW5kZWRXaXRoVGl0bGUiLFZzbj0ibm90ZSIsVXNuPSJub3RlR3JvdXAiLFFEPSJzdGF0ZWRpYWdyYW0iLEdzbj1gJHtRRH0tc3RhdGVgLFNLZT0idHJhbnNpdGlvbiIsS3NuPSJub3RlIixXc249YCR7U0tlfSBub3RlLWVkZ2VgLFlzbj1gJHtRRH0tJHtLc259YCxYc249YCR7UUR9LWNsdXN0ZXJgLFFzbj1gJHtRRH0tY2x1c3Rlci1hbHRgLF9LZT0icGFyZW50IixBS2U9Im5vdGUiLEpzbj0ic3RhdGUiLFZ2ZT0iLS0tLSIsWnNuPWAke1Z2ZX0ke0FLZX1gLExLZT1gJHtWdmV9JHtfS2V9YCxNS2U9ImZpbGw6bm9uZSIsREtlPSJmaWxsOiAjMzMzIixJS2U9ImMiLE9LZT0idGV4dCIsTktlPSJub3JtYWwiO2xldCBMSj17fSxqOT0wO2NvbnN0IGVhbj1mdW5jdGlvbihpKXtjb25zdCBzPU9iamVjdC5rZXlzKGkpO2Zvcihjb25zdCB1IG9mIHMpaVt1XX0sdGFuPWZ1bmN0aW9uKGkscyl7cmV0dXJuIHMuZGIuZXh0cmFjdChzLmRiLmdldFJvb3REb2NWMigpKSxzLmRiLmdldENsYXNzZXMoKX07ZnVuY3Rpb24gbmFuKGkpe3JldHVybiBpPT1udWxsPyIiOmkuY2xhc3Nlcz9pLmNsYXNzZXMuam9pbigiICIpOiIifWZ1bmN0aW9uIFV2ZShpPSIiLHM9MCx1PSIiLGQ9VnZlKXtjb25zdCBwPXUhPT1udWxsJiZ1Lmxlbmd0aD4wP2Ake2R9JHt1fWA6IiI7cmV0dXJuYCR7SnNufS0ke2l9JHtwfS0ke3N9YH1jb25zdCBlaj0oaSxzLHUsZCxwLHYpPT57Y29uc3QgYj11LmlkLHk9bmFuKGRbYl0pO2lmKGIhPT0icm9vdCIpe2xldCBUPUFKO3Uuc3RhcnQ9PT0hMCYmKFQ9JHNuKSx1LnN0YXJ0PT09ITEmJihUPXpzbiksdS50eXBlIT09WFImJihUPXUudHlwZSksTEpbYl18fChMSltiXT17aWQ6YixzaGFwZTpULGRlc2NyaXB0aW9uOmNpLnNhbml0aXplVGV4dChiLHF0KCkpLGNsYXNzZXM6YCR7eX0gJHtHc259YH0pO2NvbnN0IF89TEpbYl07dS5kZXNjcmlwdGlvbiYmKEFycmF5LmlzQXJyYXkoXy5kZXNjcmlwdGlvbik/KF8uc2hhcGU9SHZlLF8uZGVzY3JpcHRpb24ucHVzaCh1LmRlc2NyaXB0aW9uKSk6Xy5kZXNjcmlwdGlvbi5sZW5ndGg+MD8oXy5zaGFwZT1IdmUsXy5kZXNjcmlwdGlvbj09PWI/Xy5kZXNjcmlwdGlvbj1bdS5kZXNjcmlwdGlvbl06Xy5kZXNjcmlwdGlvbj1bXy5kZXNjcmlwdGlvbix1LmRlc2NyaXB0aW9uXSk6KF8uc2hhcGU9QUosXy5kZXNjcmlwdGlvbj11LmRlc2NyaXB0aW9uKSxfLmRlc2NyaXB0aW9uPWNpLnNhbml0aXplVGV4dE9yQXJyYXkoXy5kZXNjcmlwdGlvbixxdCgpKSksXy5kZXNjcmlwdGlvbi5sZW5ndGg9PT0xJiZfLnNoYXBlPT09SHZlJiYoXy5zaGFwZT1BSiksIV8udHlwZSYmdS5kb2MmJihYZS5pbmZvKCJTZXR0aW5nIGNsdXN0ZXIgZm9yICIsYixHdmUodSkpLF8udHlwZT0iZ3JvdXAiLF8uZGlyPUd2ZSh1KSxfLnNoYXBlPXUudHlwZT09PWNLZT9xc246SHNuLF8uY2xhc3Nlcz1fLmNsYXNzZXMrIiAiK1hzbisiICIrKHY/UXNuOiIiKSk7Y29uc3QgQT17bGFiZWxTdHlsZToiIixzaGFwZTpfLnNoYXBlLGxhYmVsVGV4dDpfLmRlc2NyaXB0aW9uLGNsYXNzZXM6Xy5jbGFzc2VzLHN0eWxlOiIiLGlkOmIsZGlyOl8uZGlyLGRvbUlkOlV2ZShiLGo5KSx0eXBlOl8udHlwZSxwYWRkaW5nOjE1fTtpZihBLmNlbnRlckxhYmVsPSEwLHUubm90ZSl7Y29uc3QgUD17bGFiZWxTdHlsZToiIixzaGFwZTpWc24sbGFiZWxUZXh0OnUubm90ZS50ZXh0LGNsYXNzZXM6WXNuLHN0eWxlOiIiLGlkOmIrWnNuKyItIitqOSxkb21JZDpVdmUoYixqOSxBS2UpLHR5cGU6Xy50eXBlLHBhZGRpbmc6MTV9LFI9e2xhYmVsU3R5bGU6IiIsc2hhcGU6VXNuLGxhYmVsVGV4dDp1Lm5vdGUudGV4dCxjbGFzc2VzOl8uY2xhc3NlcyxzdHlsZToiIixpZDpiK0xLZSxkb21JZDpVdmUoYixqOSxfS2UpLHR5cGU6Imdyb3VwIixwYWRkaW5nOjB9O2o5Kys7Y29uc3QgRj1iK0xLZTtpLnNldE5vZGUoRixSKSxpLnNldE5vZGUoUC5pZCxQKSxpLnNldE5vZGUoYixBKSxpLnNldFBhcmVudChiLEYpLGkuc2V0UGFyZW50KFAuaWQsRik7bGV0IGo9YixLPVAuaWQ7dS5ub3RlLnBvc2l0aW9uPT09ImxlZnQgb2YiJiYoaj1QLmlkLEs9YiksaS5zZXRFZGdlKGosSyx7YXJyb3doZWFkOiJub25lIixhcnJvd1R5cGU6IiIsc3R5bGU6TUtlLGxhYmVsU3R5bGU6IiIsY2xhc3NlczpXc24sYXJyb3doZWFkU3R5bGU6REtlLGxhYmVscG9zOklLZSxsYWJlbFR5cGU6T0tlLHRoaWNrbmVzczpOS2V9KX1lbHNlIGkuc2V0Tm9kZShiLEEpfXMmJnMuaWQhPT0icm9vdCImJihYZS50cmFjZSgiU2V0dGluZyBub2RlICIsYiwiIHRvIGJlIGNoaWxkIG9mIGl0cyBwYXJlbnQgIixzLmlkKSxpLnNldFBhcmVudChiLHMuaWQpKSx1LmRvYyYmKFhlLnRyYWNlKCJBZGRpbmcgbm9kZXMgY2hpbGRyZW4gIikscmFuKGksdSx1LmRvYyxkLHAsIXYpKX0scmFuPShpLHMsdSxkLHAsdik9PntYZS50cmFjZSgiaXRlbXMiLHUpLHUuZm9yRWFjaChiPT57c3dpdGNoKGIuc3RtdCl7Y2FzZSBFSjplaihpLHMsYixkLHAsdik7YnJlYWs7Y2FzZSBYUjplaihpLHMsYixkLHAsdik7YnJlYWs7Y2FzZSBQdmU6e2VqKGkscyxiLnN0YXRlMSxkLHAsdiksZWooaSxzLGIuc3RhdGUyLGQscCx2KTtjb25zdCB5PXtpZDoiZWRnZSIrajksYXJyb3doZWFkOiJub3JtYWwiLGFycm93VHlwZUVuZDoiYXJyb3dfYmFyYiIsc3R5bGU6TUtlLGxhYmVsU3R5bGU6IiIsbGFiZWw6Y2kuc2FuaXRpemVUZXh0KGIuZGVzY3JpcHRpb24scXQoKSksYXJyb3doZWFkU3R5bGU6REtlLGxhYmVscG9zOklLZSxsYWJlbFR5cGU6T0tlLHRoaWNrbmVzczpOS2UsY2xhc3NlczpTS2V9O2kuc2V0RWRnZShiLnN0YXRlMS5pZCxiLnN0YXRlMi5pZCx5LGo5KSxqOSsrfWJyZWFrfX0pfSxHdmU9KGkscz1lc24pPT57bGV0IHU9cztpZihpLmRvYylmb3IobGV0IGQ9MDtkPGkuZG9jLmxlbmd0aDtkKyspe2NvbnN0IHA9aS5kb2NbZF07cC5zdG10PT09ImRpciImJih1PXAudmFsdWUpfXJldHVybiB1fSxpYW49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpvS2UsZGI6RzcscmVuZGVyZXI6e3NldENvbmY6ZWFuLGdldENsYXNzZXM6dGFuLGRyYXc6YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCl7WGUuaW5mbygiRHJhd2luZyBzdGF0ZSBkaWFncmFtICh2MikiLHMpLExKPXt9LGQuZGIuZ2V0RGlyZWN0aW9uKCk7Y29uc3R7c2VjdXJpdHlMZXZlbDpwLHN0YXRlOnZ9PXF0KCksYj12Lm5vZGVTcGFjaW5nfHw1MCx5PXYucmFua1NwYWNpbmd8fDUwO1hlLmluZm8oZC5kYi5nZXRSb290RG9jVjIoKSksZC5kYi5leHRyYWN0KGQuZGIuZ2V0Um9vdERvY1YyKCkpLFhlLmluZm8oZC5kYi5nZXRSb290RG9jVjIoKSk7Y29uc3QgVD1kLmRiLmdldFN0YXRlcygpLF89bmV3IEIwKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6R3ZlKGQuZGIuZ2V0Um9vdERvY1YyKCkpLG5vZGVzZXA6YixyYW5rc2VwOnksbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO2VqKF8sdm9pZCAwLGQuZGIuZ2V0Um9vdERvY1YyKCksVCxkLmRiLCEwKTtsZXQgQTtwPT09InNhbmRib3giJiYoQT1JcigiI2kiK3MpKTtjb25zdCBQPUlyKHA9PT0ic2FuZGJveCI/QS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksUj1QLnNlbGVjdChgW2lkPSIke3N9Il1gKSxGPVAuc2VsZWN0KCIjIitzKyIgZyIpO2F3YWl0IHFtZShGLF8sWyJiYXJiIl0sUUQscyk7Y29uc3Qgaj04O0FvLmluc2VydFRpdGxlKFIsInN0YXRlZGlhZ3JhbVRpdGxlVGV4dCIsdi50aXRsZVRvcE1hcmdpbixkLmRiLmdldERpYWdyYW1UaXRsZSgpKTtjb25zdCBLPVIubm9kZSgpLmdldEJCb3goKSxlZT1LLndpZHRoK2oqMixpZT1LLmhlaWdodCtqKjI7Ui5hdHRyKCJjbGFzcyIsUUQpO2NvbnN0IG9lPVIubm9kZSgpLmdldEJCb3goKTtOZyhSLGllLGVlLHYudXNlTWF4V2lkdGgpO2NvbnN0IHBlPWAke29lLngtan0gJHtvZS55LWp9ICR7ZWV9ICR7aWV9YDtYZS5kZWJ1Zyhgdmlld0JveCAke3BlfWApLFIuYXR0cigidmlld0JveCIscGUpO2NvbnN0IGJlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJytzKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpO2Zvcihjb25zdCBhZSBvZiBiZSl7Y29uc3QgbmU9YWUuZ2V0QkJveCgpLHNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLEFKKTtzZS5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxzZS5zZXRBdHRyaWJ1dGUoInJ5IiwwKSxzZS5zZXRBdHRyaWJ1dGUoIndpZHRoIixuZS53aWR0aCksc2Uuc2V0QXR0cmlidXRlKCJoZWlnaHQiLG5lLmhlaWdodCksYWUuaW5zZXJ0QmVmb3JlKHNlLGFlLmZpcnN0Q2hpbGQpfX19LHN0eWxlczp4S2UsaW5pdDppPT57aS5zdGF0ZXx8KGkuc3RhdGU9e30pLGkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZT1pLmFycm93TWFya2VyQWJzb2x1dGUsRzcuY2xlYXIoKX19fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBLdmU9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihQLFIsRixqKXtmb3IoRj1GfHx7fSxqPVAubGVuZ3RoO2otLTtGW1Bbal1dPVIpO3JldHVybiBGfSxzPVs2LDgsMTAsMTEsMTIsMTQsMTYsMTcsMThdLHU9WzEsOV0sZD1bMSwxMF0scD1bMSwxMV0sdj1bMSwxMl0sYj1bMSwxM10seT1bMSwxNF0sVD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsam91cm5leTo0LGRvY3VtZW50OjUsRU9GOjYsbGluZTo3LFNQQUNFOjgsc3RhdGVtZW50OjksTkVXTElORToxMCx0aXRsZToxMSxhY2NfdGl0bGU6MTIsYWNjX3RpdGxlX3ZhbHVlOjEzLGFjY19kZXNjcjoxNCxhY2NfZGVzY3JfdmFsdWU6MTUsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToxNixzZWN0aW9uOjE3LHRhc2tOYW1lOjE4LHRhc2tEYXRhOjE5LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJqb3VybmV5Iiw2OiJFT0YiLDg6IlNQQUNFIiwxMDoiTkVXTElORSIsMTE6InRpdGxlIiwxMjoiYWNjX3RpdGxlIiwxMzoiYWNjX3RpdGxlX3ZhbHVlIiwxNDoiYWNjX2Rlc2NyIiwxNToiYWNjX2Rlc2NyX3ZhbHVlIiwxNjoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMTc6InNlY3Rpb24iLDE4OiJ0YXNrTmFtZSIsMTk6InRhc2tEYXRhIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFs1LDBdLFs1LDJdLFs3LDJdLFs3LDFdLFs3LDFdLFs3LDFdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs5LDJdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKFIsRixqLEssZWUsaWUsb2Upe3ZhciBwZT1pZS5sZW5ndGgtMTtzd2l0Y2goZWUpe2Nhc2UgMTpyZXR1cm4gaWVbcGUtMV07Y2FzZSAyOnRoaXMuJD1bXTticmVhaztjYXNlIDM6aWVbcGUtMV0ucHVzaChpZVtwZV0pLHRoaXMuJD1pZVtwZS0xXTticmVhaztjYXNlIDQ6Y2FzZSA1OnRoaXMuJD1pZVtwZV07YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA4Oksuc2V0RGlhZ3JhbVRpdGxlKGllW3BlXS5zdWJzdHIoNikpLHRoaXMuJD1pZVtwZV0uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9aWVbcGVdLnRyaW0oKSxLLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMDpjYXNlIDExOnRoaXMuJD1pZVtwZV0udHJpbSgpLEsuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDEyOksuYWRkU2VjdGlvbihpZVtwZV0uc3Vic3RyKDgpKSx0aGlzLiQ9aWVbcGVdLnN1YnN0cig4KTticmVhaztjYXNlIDEzOksuYWRkVGFzayhpZVtwZS0xXSxpZVtwZV0pLHRoaXMuJD0idGFzayI7YnJlYWt9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LGkocyxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOnUsMTI6ZCwxNDpwLDE2OnYsMTc6YiwxODp5fSxpKHMsWzIsN10sezE6WzIsMV19KSxpKHMsWzIsM10pLHs5OjE1LDExOnUsMTI6ZCwxNDpwLDE2OnYsMTc6YiwxODp5fSxpKHMsWzIsNV0pLGkocyxbMiw2XSksaShzLFsyLDhdKSx7MTM6WzEsMTZdfSx7MTU6WzEsMTddfSxpKHMsWzIsMTFdKSxpKHMsWzIsMTJdKSx7MTk6WzEsMThdfSxpKHMsWzIsNF0pLGkocyxbMiw5XSksaShzLFsyLDEwXSksaShzLFsyLDEzXSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6ZnVuY3Rpb24oUixGKXtpZihGLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoUik7ZWxzZXt2YXIgaj1uZXcgRXJyb3IoUik7dGhyb3cgai5oYXNoPUYsan19LHBhcnNlOmZ1bmN0aW9uKFIpe3ZhciBGPXRoaXMsaj1bMF0sSz1bXSxlZT1bbnVsbF0saWU9W10sb2U9dGhpcy50YWJsZSxwZT0iIixiZT0wLGFlPTAsbmU9MixzZT0xLGRlPWllLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLFg9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxnZT17eXk6e319O2Zvcih2YXIgVyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LFcpJiYoZ2UueXlbV109dGhpcy55eVtXXSk7WC5zZXRJbnB1dChSLGdlLnl5KSxnZS55eS5sZXhlcj1YLGdlLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBYLnl5bGxvYz4idSImJihYLnl5bGxvYz17fSk7dmFyIHhlPVgueXlsbG9jO2llLnB1c2goeGUpO3ZhciBVPVgub3B0aW9ucyYmWC5vcHRpb25zLnJhbmdlczt0eXBlb2YgZ2UueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Z2UueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gRmUoKXt2YXIgX3Q7cmV0dXJuIF90PUsucG9wKCl8fFgubGV4KCl8fHNlLHR5cGVvZiBfdCE9Im51bWJlciImJihfdCBpbnN0YW5jZW9mIEFycmF5JiYoSz1fdCxfdD1LLnBvcCgpKSxfdD1GLnN5bWJvbHNfW190XXx8X3QpLF90fWZvcih2YXIgUGUsamUsSWUsU2UsQ2U9e30sa2UsS2UsRnQsTmU7Oyl7aWYoamU9altqLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2plXT9JZT10aGlzLmRlZmF1bHRBY3Rpb25zW2plXTooKFBlPT09bnVsbHx8dHlwZW9mIFBlPiJ1IikmJihQZT1GZSgpKSxJZT1vZVtqZV0mJm9lW2plXVtQZV0pLHR5cGVvZiBJZT4idSJ8fCFJZS5sZW5ndGh8fCFJZVswXSl7dmFyIGduPSIiO05lPVtdO2ZvcihrZSBpbiBvZVtqZV0pdGhpcy50ZXJtaW5hbHNfW2tlXSYma2U+bmUmJk5lLnB1c2goIiciK3RoaXMudGVybWluYWxzX1trZV0rIiciKTtYLnNob3dQb3NpdGlvbj9nbj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhiZSsxKStgOgpgK1guc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtOZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1BlXXx8UGUpKyInIjpnbj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhiZSsxKSsiOiBVbmV4cGVjdGVkICIrKFBlPT1zZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tQZV18fFBlKSsiJyIpLHRoaXMucGFyc2VFcnJvcihnbix7dGV4dDpYLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tQZV18fFBlLGxpbmU6WC55eWxpbmVubyxsb2M6eGUsZXhwZWN0ZWQ6TmV9KX1pZihJZVswXWluc3RhbmNlb2YgQXJyYXkmJkllLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIramUrIiwgdG9rZW46ICIrUGUpO3N3aXRjaChJZVswXSl7Y2FzZSAxOmoucHVzaChQZSksZWUucHVzaChYLnl5dGV4dCksaWUucHVzaChYLnl5bGxvYyksai5wdXNoKEllWzFdKSxQZT1udWxsLGFlPVgueXlsZW5nLHBlPVgueXl0ZXh0LGJlPVgueXlsaW5lbm8seGU9WC55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKEtlPXRoaXMucHJvZHVjdGlvbnNfW0llWzFdXVsxXSxDZS4kPWVlW2VlLmxlbmd0aC1LZV0sQ2UuXyQ9e2ZpcnN0X2xpbmU6aWVbaWUubGVuZ3RoLShLZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmllW2llLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmllW2llLmxlbmd0aC0oS2V8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46aWVbaWUubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxVJiYoQ2UuXyQucmFuZ2U9W2llW2llLmxlbmd0aC0oS2V8fDEpXS5yYW5nZVswXSxpZVtpZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxTZT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoQ2UsW3BlLGFlLGJlLGdlLnl5LEllWzFdLGVlLGllXS5jb25jYXQoZGUpKSx0eXBlb2YgU2U8InUiKXJldHVybiBTZTtLZSYmKGo9ai5zbGljZSgwLC0xKktlKjIpLGVlPWVlLnNsaWNlKDAsLTEqS2UpLGllPWllLnNsaWNlKDAsLTEqS2UpKSxqLnB1c2godGhpcy5wcm9kdWN0aW9uc19bSWVbMV1dWzBdKSxlZS5wdXNoKENlLiQpLGllLnB1c2goQ2UuXyQpLEZ0PW9lW2pbai5sZW5ndGgtMl1dW2pbai5sZW5ndGgtMV1dLGoucHVzaChGdCk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LF89ZnVuY3Rpb24oKXt2YXIgUD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihGLGope2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoRixqKTtlbHNlIHRocm93IG5ldyBFcnJvcihGKX0sc2V0SW5wdXQ6ZnVuY3Rpb24oUixGKXtyZXR1cm4gdGhpcy55eT1GfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1SLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBSPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1SLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1SLHRoaXMubWF0Y2hlZCs9Ujt2YXIgRj1SLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gRj8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksUn0sdW5wdXQ6ZnVuY3Rpb24oUil7dmFyIEY9Ui5sZW5ndGgsaj1SLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Uit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtRiksdGhpcy5vZmZzZXQtPUY7dmFyIEs9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksai5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWoubGVuZ3RoLTEpO3ZhciBlZT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46aj8oai5sZW5ndGg9PT1LLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrS1tLLmxlbmd0aC1qLmxlbmd0aF0ubGVuZ3RoLWpbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1GfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2VlWzBdLGVlWzBdK3RoaXMueXlsZW5nLUZdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihSKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoUikpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgUj10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFIubGVuZ3RoPjIwPyIuLi4iOiIiKStSLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIFI9dGhpcy5tYXRjaDtyZXR1cm4gUi5sZW5ndGg8MjAmJihSKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1SLmxlbmd0aCkpLChSLnN1YnN0cigwLDIwKSsoUi5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIFI9dGhpcy5wYXN0SW5wdXQoKSxGPW5ldyBBcnJheShSLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIFIrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0YrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKFIsRil7dmFyIGosSyxlZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoZWU9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoZWUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksSz1SWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxLJiYodGhpcy55eWxpbmVubys9Sy5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpLP0tbSy5sZW5ndGgtMV0ubGVuZ3RoLUtbSy5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitSWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVJbMF0sdGhpcy5tYXRjaCs9UlswXSx0aGlzLm1hdGNoZXM9Uix0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShSWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1SWzBdLGo9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsRix0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxqKXJldHVybiBqO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBpZSBpbiBlZSl0aGlzW2llXT1lZVtpZV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgUixGLGosSzt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBlZT10aGlzLl9jdXJyZW50UnVsZXMoKSxpZT0wO2llPGVlLmxlbmd0aDtpZSsrKWlmKGo9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tlZVtpZV1dKSxqJiYoIUZ8fGpbMF0ubGVuZ3RoPkZbMF0ubGVuZ3RoKSl7aWYoRj1qLEs9aWUsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoUj10aGlzLnRlc3RfbWF0Y2goaixlZVtpZV0pLFIhPT0hMSlyZXR1cm4gUjtpZih0aGlzLl9iYWNrdHJhY2spe0Y9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gRj8oUj10aGlzLnRlc3RfbWF0Y2goRixlZVtLXSksUiE9PSExP1I6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBGPXRoaXMubmV4dCgpO3JldHVybiBGfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihGKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goRil9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIEY9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gRj4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKEYpe3JldHVybiBGPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoRnx8MCksRj49MD90aGlzLmNvbmRpdGlvblN0YWNrW0ZdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEYpe3RoaXMuYmVnaW4oRil9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oRixqLEssZWUpe3N3aXRjaChLKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gMTA7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpicmVhaztjYXNlIDU6cmV0dXJuIDQ7Y2FzZSA2OnJldHVybiAxMTtjYXNlIDc6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDEyO2Nhc2UgODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgOTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMTQ7Y2FzZSAxMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgMTE6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTM6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTQ6cmV0dXJuIDE3O2Nhc2UgMTU6cmV0dXJuIDE4O2Nhc2UgMTY6cmV0dXJuIDE5O2Nhc2UgMTc6cmV0dXJuIjoiO2Nhc2UgMTg6cmV0dXJuIDY7Y2FzZSAxOTpyZXR1cm4iSU5WQUxJRCJ9fSxydWxlczpbL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OmpvdXJuZXlcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86c2VjdGlvblxzW14jOlxuO10rKS9pLC9eKD86W14jOlxuO10rKS9pLC9eKD86OlteI1xuO10rKS9pLC9eKD86OikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTIsMTNdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMTBdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbOF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMTgsMTldLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gUH0oKTtULmxleGVyPV87ZnVuY3Rpb24gQSgpe3RoaXMueXk9e319cmV0dXJuIEEucHJvdG90eXBlPVQsVC5QYXJzZXI9QSxuZXcgQX0oKTtLdmUucGFyc2VyPUt2ZTtjb25zdCBzYW49S3ZlO2xldCBKRD0iIjtjb25zdCBXdmU9W10sdGo9W10sbmo9W10sYWFuPWZ1bmN0aW9uKCl7V3ZlLmxlbmd0aD0wLHRqLmxlbmd0aD0wLEpEPSIiLG5qLmxlbmd0aD0wLFBnKCl9LG9hbj1mdW5jdGlvbihpKXtKRD1pLFd2ZS5wdXNoKGkpfSxjYW49ZnVuY3Rpb24oKXtyZXR1cm4gV3ZlfSx1YW49ZnVuY3Rpb24oKXtsZXQgaT1QS2UoKTtjb25zdCBzPTEwMDtsZXQgdT0wO2Zvcig7IWkmJnU8czspaT1QS2UoKSx1Kys7cmV0dXJuIHRqLnB1c2goLi4ubmopLHRqfSxsYW49ZnVuY3Rpb24oKXtjb25zdCBpPVtdO3JldHVybiB0ai5mb3JFYWNoKHU9Pnt1LnBlb3BsZSYmaS5wdXNoKC4uLnUucGVvcGxlKX0pLFsuLi5uZXcgU2V0KGkpXS5zb3J0KCl9LGhhbj1mdW5jdGlvbihpLHMpe2NvbnN0IHU9cy5zdWJzdHIoMSkuc3BsaXQoIjoiKTtsZXQgZD0wLHA9W107dS5sZW5ndGg9PT0xPyhkPU51bWJlcih1WzBdKSxwPVtdKTooZD1OdW1iZXIodVswXSkscD11WzFdLnNwbGl0KCIsIikpO2NvbnN0IHY9cC5tYXAoeT0+eS50cmltKCkpLGI9e3NlY3Rpb246SkQsdHlwZTpKRCxwZW9wbGU6dix0YXNrOmksc2NvcmU6ZH07bmoucHVzaChiKX0sZmFuPWZ1bmN0aW9uKGkpe2NvbnN0IHM9e3NlY3Rpb246SkQsdHlwZTpKRCxkZXNjcmlwdGlvbjppLHRhc2s6aSxjbGFzc2VzOltdfTt0ai5wdXNoKHMpfSxQS2U9ZnVuY3Rpb24oKXtjb25zdCBpPWZ1bmN0aW9uKHUpe3JldHVybiBualt1XS5wcm9jZXNzZWR9O2xldCBzPSEwO2Zvcihjb25zdFt1LGRdb2YgbmouZW50cmllcygpKWkodSkscz1zJiZkLnByb2Nlc3NlZDtyZXR1cm4gc30sQktlPXtnZXRDb25maWc6KCk9PnF0KCkuam91cm5leSxjbGVhcjphYW4sc2V0RGlhZ3JhbVRpdGxlOmNtLGdldERpYWdyYW1UaXRsZTpBcCxzZXRBY2NUaXRsZTpCZyxnZXRBY2NUaXRsZTpDcCxzZXRBY2NEZXNjcmlwdGlvbjpTcCxnZXRBY2NEZXNjcmlwdGlvbjpfcCxhZGRTZWN0aW9uOm9hbixnZXRTZWN0aW9uczpjYW4sZ2V0VGFza3M6dWFuLGFkZFRhc2s6aGFuLGFkZFRhc2tPcmc6ZmFuLGdldEFjdG9yczpmdW5jdGlvbigpe3JldHVybiBsYW4oKX19LGRhbj1pPT5gLmxhYmVsIHsKICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7CiAgICBjb2xvcjogJHtpLnRleHRDb2xvcn07CiAgfQogIC5tb3V0aCB7CiAgICBzdHJva2U6ICM2NjY7CiAgfQoKICBsaW5lIHsKICAgIHN0cm9rZTogJHtpLnRleHRDb2xvcn0KICB9CgogIC5sZWdlbmQgewogICAgZmlsbDogJHtpLnRleHRDb2xvcn07CiAgfQoKICAubGFiZWwgdGV4dCB7CiAgICBmaWxsOiAjMzMzOwogIH0KICAubGFiZWwgewogICAgY29sb3I6ICR7aS50ZXh0Q29sb3J9CiAgfQoKICAuZmFjZSB7CiAgICAke2kuZmFjZUNvbG9yP2BmaWxsOiAke2kuZmFjZUNvbG9yfWA6ImZpbGw6ICNGRkY4REMifTsKICAgIHN0cm9rZTogIzk5OTsKICB9CgogIC5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7aS5tYWluQmtnfTsKICAgIHN0cm9rZTogJHtpLm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAubm9kZSAubGFiZWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAubm9kZS5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHtpLmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAxLjVweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuNTsKICAgIH0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CgogIC5jbHVzdGVyIHJlY3QgewogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICBkaXYubWVybWFpZFRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWF4LXdpZHRoOiAyMDBweDsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2kuYm9yZGVyMn07CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEwMDsKICB9CgogIC50YXNrLXR5cGUtMCwgLnNlY3Rpb24tdHlwZS0wICB7CiAgICAke2kuZmlsbFR5cGUwP2BmaWxsOiAke2kuZmlsbFR5cGUwfWA6IiJ9OwogIH0KICAudGFzay10eXBlLTEsIC5zZWN0aW9uLXR5cGUtMSAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlMX1gOiIifTsKICB9CiAgLnRhc2stdHlwZS0yLCAuc2VjdGlvbi10eXBlLTIgIHsKICAgICR7aS5maWxsVHlwZTA/YGZpbGw6ICR7aS5maWxsVHlwZTJ9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtMywgLnNlY3Rpb24tdHlwZS0zICB7CiAgICAke2kuZmlsbFR5cGUwP2BmaWxsOiAke2kuZmlsbFR5cGUzfWA6IiJ9OwogIH0KICAudGFzay10eXBlLTQsIC5zZWN0aW9uLXR5cGUtNCAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlNH1gOiIifTsKICB9CiAgLnRhc2stdHlwZS01LCAuc2VjdGlvbi10eXBlLTUgIHsKICAgICR7aS5maWxsVHlwZTA/YGZpbGw6ICR7aS5maWxsVHlwZTV9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtNiwgLnNlY3Rpb24tdHlwZS02ICB7CiAgICAke2kuZmlsbFR5cGUwP2BmaWxsOiAke2kuZmlsbFR5cGU2fWA6IiJ9OwogIH0KICAudGFzay10eXBlLTcsIC5zZWN0aW9uLXR5cGUtNyAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlN31gOiIifTsKICB9CgogIC5hY3Rvci0wIHsKICAgICR7aS5hY3RvcjA/YGZpbGw6ICR7aS5hY3RvcjB9YDoiIn07CiAgfQogIC5hY3Rvci0xIHsKICAgICR7aS5hY3RvcjE/YGZpbGw6ICR7aS5hY3RvcjF9YDoiIn07CiAgfQogIC5hY3Rvci0yIHsKICAgICR7aS5hY3RvcjI/YGZpbGw6ICR7aS5hY3RvcjJ9YDoiIn07CiAgfQogIC5hY3Rvci0zIHsKICAgICR7aS5hY3RvcjM/YGZpbGw6ICR7aS5hY3RvcjN9YDoiIn07CiAgfQogIC5hY3Rvci00IHsKICAgICR7aS5hY3RvcjQ/YGZpbGw6ICR7aS5hY3RvcjR9YDoiIn07CiAgfQogIC5hY3Rvci01IHsKICAgICR7aS5hY3RvcjU/YGZpbGw6ICR7aS5hY3RvcjV9YDoiIn07CiAgfQpgLFl2ZT1mdW5jdGlvbihpLHMpe3JldHVybiBBUShpLHMpfSxnYW49ZnVuY3Rpb24oaSxzKXtjb25zdCBkPWkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIscy5jeCkuYXR0cigiY3kiLHMuY3kpLmF0dHIoImNsYXNzIiwiZmFjZSIpLmF0dHIoInIiLDE1KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoIm92ZXJmbG93IiwidmlzaWJsZSIpLHA9aS5hcHBlbmQoImciKTtwLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLHMuY3gtMTUvMykuYXR0cigiY3kiLHMuY3ktMTUvMykuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpLHAuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIscy5jeCsxNS8zKS5hdHRyKCJjeSIscy5jeS0xNS8zKS5hdHRyKCJyIiwxLjUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigiZmlsbCIsIiM2NjYiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iik7ZnVuY3Rpb24gdihUKXtjb25zdCBfPWxEKCkuc3RhcnRBbmdsZShNYXRoLlBJLzIpLmVuZEFuZ2xlKDMqKE1hdGguUEkvMikpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoNi44MTgxODE4MTgxODE4MTc1KTtULmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixfKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitzLmN4KyIsIisocy5jeSsyKSsiKSIpfWZ1bmN0aW9uIGIoVCl7Y29uc3QgXz1sRCgpLnN0YXJ0QW5nbGUoMypNYXRoLlBJLzIpLmVuZEFuZ2xlKDUqKE1hdGguUEkvMikpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoNi44MTgxODE4MTgxODE4MTc1KTtULmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixfKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitzLmN4KyIsIisocy5jeSs3KSsiKSIpfWZ1bmN0aW9uIHkoVCl7VC5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlIiwyKS5hdHRyKCJ4MSIscy5jeC01KS5hdHRyKCJ5MSIscy5jeSs3KS5hdHRyKCJ4MiIscy5jeCs1KS5hdHRyKCJ5MiIscy5jeSs3KS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpfXJldHVybiBzLnNjb3JlPjM/dihwKTpzLnNjb3JlPDM/YihwKTp5KHApLGR9LEZLZT1mdW5jdGlvbihpLHMpe2NvbnN0IHU9aS5hcHBlbmQoImNpcmNsZSIpO3JldHVybiB1LmF0dHIoImN4IixzLmN4KSx1LmF0dHIoImN5IixzLmN5KSx1LmF0dHIoImNsYXNzIiwiYWN0b3ItIitzLnBvcyksdS5hdHRyKCJmaWxsIixzLmZpbGwpLHUuYXR0cigic3Ryb2tlIixzLnN0cm9rZSksdS5hdHRyKCJyIixzLnIpLHUuY2xhc3MhPT12b2lkIDAmJnUuYXR0cigiY2xhc3MiLHUuY2xhc3MpLHMudGl0bGUhPT12b2lkIDAmJnUuYXBwZW5kKCJ0aXRsZSIpLnRleHQocy50aXRsZSksdX0sUktlPWZ1bmN0aW9uKGkscyl7cmV0dXJuIHRVdChpLHMpfSxwYW49ZnVuY3Rpb24oaSxzKXtmdW5jdGlvbiB1KHAsdixiLHksVCl7cmV0dXJuIHArIiwiK3YrIiAiKyhwK2IpKyIsIit2KyIgIisocCtiKSsiLCIrKHYreS1UKSsiICIrKHArYi1UKjEuMikrIiwiKyh2K3kpKyIgIitwKyIsIisodit5KX1jb25zdCBkPWkuYXBwZW5kKCJwb2x5Z29uIik7ZC5hdHRyKCJwb2ludHMiLHUocy54LHMueSw1MCwyMCw3KSksZC5hdHRyKCJjbGFzcyIsImxhYmVsQm94Iikscy55PXMueStzLmxhYmVsTWFyZ2luLHMueD1zLngrLjUqcy5sYWJlbE1hcmdpbixSS2UoaSxzKX0sYmFuPWZ1bmN0aW9uKGkscyx1KXtjb25zdCBkPWkuYXBwZW5kKCJnIikscD1xQygpO3AueD1zLngscC55PXMueSxwLmZpbGw9cy5maWxsLHAud2lkdGg9dS53aWR0aCpzLnRhc2tDb3VudCt1LmRpYWdyYW1NYXJnaW5YKihzLnRhc2tDb3VudC0xKSxwLmhlaWdodD11LmhlaWdodCxwLmNsYXNzPSJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrcy5udW0scC5yeD0zLHAucnk9MyxZdmUoZCxwKSwkS2UodSkocy50ZXh0LGQscC54LHAueSxwLndpZHRoLHAuaGVpZ2h0LHtjbGFzczoiam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK3MubnVtfSx1LHMuY29sb3VyKX07bGV0IGpLZT0tMTtjb25zdCBtYW49ZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9cy54K3Uud2lkdGgvMixwPWkuYXBwZW5kKCJnIik7aktlKys7Y29uc3Qgdj0zMDArNSozMDtwLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwidGFzayIraktlKS5hdHRyKCJ4MSIsZCkuYXR0cigieTEiLHMueSkuYXR0cigieDIiLGQpLmF0dHIoInkyIix2KS5hdHRyKCJjbGFzcyIsInRhc2stbGluZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCI0IDIiKS5hdHRyKCJzdHJva2UiLCIjNjY2IiksZ2FuKHAse2N4OmQsY3k6MzAwKyg1LXMuc2NvcmUpKjMwLHNjb3JlOnMuc2NvcmV9KTtjb25zdCBiPXFDKCk7Yi54PXMueCxiLnk9cy55LGIuZmlsbD1zLmZpbGwsYi53aWR0aD11LndpZHRoLGIuaGVpZ2h0PXUuaGVpZ2h0LGIuY2xhc3M9InRhc2sgdGFzay10eXBlLSIrcy5udW0sYi5yeD0zLGIucnk9MyxZdmUocCxiKTtsZXQgeT1zLngrMTQ7cy5wZW9wbGUuZm9yRWFjaChUPT57Y29uc3QgXz1zLmFjdG9yc1tUXS5jb2xvcixBPXtjeDp5LGN5OnMueSxyOjcsZmlsbDpfLHN0cm9rZToiIzAwMCIsdGl0bGU6VCxwb3M6cy5hY3RvcnNbVF0ucG9zaXRpb259O0ZLZShwLEEpLHkrPTEwfSksJEtlKHUpKHMudGFzayxwLGIueCxiLnksYi53aWR0aCxiLmhlaWdodCx7Y2xhc3M6InRhc2sifSx1LHMuY29sb3VyKX0sdmFuPWZ1bmN0aW9uKGkscyl7VHFlKGkscyl9LCRLZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGkocCx2LGIseSxULF8sQSxQKXtjb25zdCBSPXYuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYitULzIpLmF0dHIoInkiLHkrXy8yKzUpLnN0eWxlKCJmb250LWNvbG9yIixQKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHApO2QoUixBKX1mdW5jdGlvbiBzKHAsdixiLHksVCxfLEEsUCxSKXtjb25zdHt0YXNrRm9udFNpemU6Rix0YXNrRm9udEZhbWlseTpqfT1QLEs9cC5zcGxpdCgvPGJyXHMqXC8/Pi9naSk7Zm9yKGxldCBlZT0wO2VlPEsubGVuZ3RoO2VlKyspe2NvbnN0IGllPWVlKkYtRiooSy5sZW5ndGgtMSkvMixvZT12LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrVC8yKS5hdHRyKCJ5Iix5KS5hdHRyKCJmaWxsIixSKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1zaXplIixGKS5zdHlsZSgiZm9udC1mYW1pbHkiLGopO29lLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixiK1QvMikuYXR0cigiZHkiLGllKS50ZXh0KEtbZWVdKSxvZS5hdHRyKCJ5Iix5K18vMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLGQob2UsQSl9fWZ1bmN0aW9uIHUocCx2LGIseSxULF8sQSxQKXtjb25zdCBSPXYuYXBwZW5kKCJzd2l0Y2giKSxqPVIuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsYikuYXR0cigieSIseSkuYXR0cigid2lkdGgiLFQpLmF0dHIoImhlaWdodCIsXykuYXR0cigicG9zaXRpb24iLCJmaXhlZCIpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2ouYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHApLHMocCxSLGIseSxULF8sQSxQKSxkKGosQSl9ZnVuY3Rpb24gZChwLHYpe2Zvcihjb25zdCBiIGluIHYpYiBpbiB2JiZwLmF0dHIoYix2W2JdKX1yZXR1cm4gZnVuY3Rpb24ocCl7cmV0dXJuIHAudGV4dFBsYWNlbWVudD09PSJmbyI/dTpwLnRleHRQbGFjZW1lbnQ9PT0ib2xkIj9pOnN9fSgpLHJqPXtkcmF3UmVjdDpZdmUsZHJhd0NpcmNsZTpGS2UsZHJhd1NlY3Rpb246YmFuLGRyYXdUZXh0OlJLZSxkcmF3TGFiZWw6cGFuLGRyYXdUYXNrOm1hbixkcmF3QmFja2dyb3VuZFJlY3Q6dmFuLGluaXRHcmFwaGljczpmdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw1KS5hdHRyKCJyZWZZIiwyKS5hdHRyKCJtYXJrZXJXaWR0aCIsNikuYXR0cigibWFya2VySGVpZ2h0Iiw0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCwwIFYgNCBMNiwyIFoiKX19LHdhbj1mdW5jdGlvbihpKXtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe01KW3VdPWlbdV19KX0sSzc9e307ZnVuY3Rpb24geWFuKGkpe2NvbnN0IHM9cXQoKS5qb3VybmV5O2xldCB1PTYwO09iamVjdC5rZXlzKEs3KS5mb3JFYWNoKGQ9Pntjb25zdCBwPUs3W2RdLmNvbG9yLHY9e2N4OjIwLGN5OnUscjo3LGZpbGw6cCxzdHJva2U6IiMwMDAiLHBvczpLN1tkXS5wb3NpdGlvbn07cmouZHJhd0NpcmNsZShpLHYpO2NvbnN0IGI9e3g6NDAseTp1KzcsZmlsbDoiIzY2NiIsdGV4dDpkLHRleHRNYXJnaW46cy5ib3hUZXh0TWFyZ2lufDV9O3JqLmRyYXdUZXh0KGksYiksdSs9MjB9KX1jb25zdCBNSj1xdCgpLmpvdXJuZXksaVM9TUoubGVmdE1hcmdpbix4YW49ZnVuY3Rpb24oaSxzLHUsZCl7Y29uc3QgcD1xdCgpLmpvdXJuZXksdj1xdCgpLnNlY3VyaXR5TGV2ZWw7bGV0IGI7dj09PSJzYW5kYm94IiYmKGI9SXIoIiNpIitzKSk7Y29uc3QgeT1Jcih2PT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpO3F2LmluaXQoKTtjb25zdCBUPXkuc2VsZWN0KCIjIitzKTtyai5pbml0R3JhcGhpY3MoVCk7Y29uc3QgXz1kLmRiLmdldFRhc2tzKCksQT1kLmRiLmdldERpYWdyYW1UaXRsZSgpLFA9ZC5kYi5nZXRBY3RvcnMoKTtmb3IoY29uc3QgaWUgaW4gSzcpZGVsZXRlIEs3W2llXTtsZXQgUj0wO1AuZm9yRWFjaChpZT0+e0s3W2llXT17Y29sb3I6cC5hY3RvckNvbG91cnNbUiVwLmFjdG9yQ29sb3Vycy5sZW5ndGhdLHBvc2l0aW9uOlJ9LFIrK30pLHlhbihUKSxxdi5pbnNlcnQoMCwwLGlTLE9iamVjdC5rZXlzKEs3KS5sZW5ndGgqNTApLGthbihULF8sMCk7Y29uc3QgRj1xdi5nZXRCb3VuZHMoKTtBJiZULmFwcGVuZCgidGV4dCIpLnRleHQoQSkuYXR0cigieCIsaVMpLmF0dHIoImZvbnQtc2l6ZSIsIjRleCIpLmF0dHIoImZvbnQtd2VpZ2h0IiwiYm9sZCIpLmF0dHIoInkiLDI1KTtjb25zdCBqPUYuc3RvcHktRi5zdGFydHkrMipwLmRpYWdyYW1NYXJnaW5ZLEs9aVMrRi5zdG9weCsyKnAuZGlhZ3JhbU1hcmdpblg7TmcoVCxqLEsscC51c2VNYXhXaWR0aCksVC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsaVMpLmF0dHIoInkxIixwLmhlaWdodCo0KS5hdHRyKCJ4MiIsSy1pUy00KS5hdHRyKCJ5MiIscC5oZWlnaHQqNCkuYXR0cigic3Ryb2tlLXdpZHRoIiw0KS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKTtjb25zdCBlZT1BPzcwOjA7VC5hdHRyKCJ2aWV3Qm94IixgJHtGLnN0YXJ0eH0gLTI1ICR7S30gJHtqK2VlfWApLFQuYXR0cigicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaW5ZTWluIG1lZXQiKSxULmF0dHIoImhlaWdodCIsaitlZSsyNSl9LHF2PXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGluaXQ6ZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlSXRlbXM9W10sdGhpcy5kYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdGhpcy52ZXJ0aWNhbFBvcz0wfSx1cGRhdGVWYWw6ZnVuY3Rpb24oaSxzLHUsZCl7aVtzXT09PXZvaWQgMD9pW3NdPXU6aVtzXT1kKHUsaVtzXSl9LHVwZGF0ZUJvdW5kczpmdW5jdGlvbihpLHMsdSxkKXtjb25zdCBwPXF0KCkuam91cm5leSx2PXRoaXM7bGV0IGI9MDtmdW5jdGlvbiB5KFQpe3JldHVybiBmdW5jdGlvbihBKXtiKys7Y29uc3QgUD12LnNlcXVlbmNlSXRlbXMubGVuZ3RoLWIrMTt2LnVwZGF0ZVZhbChBLCJzdGFydHkiLHMtUCpwLmJveE1hcmdpbixNYXRoLm1pbiksdi51cGRhdGVWYWwoQSwic3RvcHkiLGQrUCpwLmJveE1hcmdpbixNYXRoLm1heCksdi51cGRhdGVWYWwocXYuZGF0YSwic3RhcnR4IixpLVAqcC5ib3hNYXJnaW4sTWF0aC5taW4pLHYudXBkYXRlVmFsKHF2LmRhdGEsInN0b3B4Iix1K1AqcC5ib3hNYXJnaW4sTWF0aC5tYXgpLFQhPT0iYWN0aXZhdGlvbiImJih2LnVwZGF0ZVZhbChBLCJzdGFydHgiLGktUCpwLmJveE1hcmdpbixNYXRoLm1pbiksdi51cGRhdGVWYWwoQSwic3RvcHgiLHUrUCpwLmJveE1hcmdpbixNYXRoLm1heCksdi51cGRhdGVWYWwocXYuZGF0YSwic3RhcnR5IixzLVAqcC5ib3hNYXJnaW4sTWF0aC5taW4pLHYudXBkYXRlVmFsKHF2LmRhdGEsInN0b3B5IixkK1AqcC5ib3hNYXJnaW4sTWF0aC5tYXgpKX19dGhpcy5zZXF1ZW5jZUl0ZW1zLmZvckVhY2goeSgpKX0saW5zZXJ0OmZ1bmN0aW9uKGkscyx1LGQpe2NvbnN0IHA9TWF0aC5taW4oaSx1KSx2PU1hdGgubWF4KGksdSksYj1NYXRoLm1pbihzLGQpLHk9TWF0aC5tYXgocyxkKTt0aGlzLnVwZGF0ZVZhbChxdi5kYXRhLCJzdGFydHgiLHAsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHF2LmRhdGEsInN0YXJ0eSIsYixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwocXYuZGF0YSwic3RvcHgiLHYsTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHF2LmRhdGEsInN0b3B5Iix5LE1hdGgubWF4KSx0aGlzLnVwZGF0ZUJvdW5kcyhwLGIsdix5KX0sYnVtcFZlcnRpY2FsUG9zOmZ1bmN0aW9uKGkpe3RoaXMudmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcytpLHRoaXMuZGF0YS5zdG9weT10aGlzLnZlcnRpY2FsUG9zfSxnZXRWZXJ0aWNhbFBvczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZlcnRpY2FsUG9zfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfX0sWHZlPU1KLnNlY3Rpb25GaWxscyx6S2U9TUouc2VjdGlvbkNvbG91cnMsa2FuPWZ1bmN0aW9uKGkscyx1KXtjb25zdCBkPXF0KCkuam91cm5leTtsZXQgcD0iIjtjb25zdCB2PWQuaGVpZ2h0KjIrZC5kaWFncmFtTWFyZ2luWSxiPXUrdjtsZXQgeT0wLFQ9IiNDQ0MiLF89ImJsYWNrIixBPTA7Zm9yKGNvbnN0W1AsUl1vZiBzLmVudHJpZXMoKSl7aWYocCE9PVIuc2VjdGlvbil7VD1YdmVbeSVYdmUubGVuZ3RoXSxBPXklWHZlLmxlbmd0aCxfPXpLZVt5JXpLZS5sZW5ndGhdO2xldCBqPTA7Y29uc3QgSz1SLnNlY3Rpb247Zm9yKGxldCBpZT1QO2llPHMubGVuZ3RoJiZzW2llXS5zZWN0aW9uPT1LO2llKyspaj1qKzE7Y29uc3QgZWU9e3g6UCpkLnRhc2tNYXJnaW4rUCpkLndpZHRoK2lTLHk6NTAsdGV4dDpSLnNlY3Rpb24sZmlsbDpULG51bTpBLGNvbG91cjpfLHRhc2tDb3VudDpqfTtyai5kcmF3U2VjdGlvbihpLGVlLGQpLHA9Ui5zZWN0aW9uLHkrK31jb25zdCBGPVIucGVvcGxlLnJlZHVjZSgoaixLKT0+KEs3W0tdJiYoaltLXT1LN1tLXSksaikse30pO1IueD1QKmQudGFza01hcmdpbitQKmQud2lkdGgraVMsUi55PWIsUi53aWR0aD1kLmRpYWdyYW1NYXJnaW5YLFIuaGVpZ2h0PWQuZGlhZ3JhbU1hcmdpblksUi5jb2xvdXI9XyxSLmZpbGw9VCxSLm51bT1BLFIuYWN0b3JzPUYscmouZHJhd1Rhc2soaSxSLGQpLHF2Lmluc2VydChSLngsUi55LFIueCtSLndpZHRoK2QudGFza01hcmdpbiwzMDArNSozMCl9fSxxS2U9e3NldENvbmY6d2FuLGRyYXc6eGFufSxFYW49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpzYW4sZGI6QktlLHJlbmRlcmVyOnFLZSxzdHlsZXM6ZGFuLGluaXQ6aT0+e3FLZS5zZXRDb25mKGkuam91cm5leSksQktlLmNsZWFyKCl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxUYW49KGkscyx1KT0+e2NvbnN0e3BhcmVudEJ5SWQ6ZH09dSxwPW5ldyBTZXQ7bGV0IHY9aTtmb3IoO3Y7KXtpZihwLmFkZCh2KSx2PT09cylyZXR1cm4gdjt2PWRbdl19Zm9yKHY9czt2Oyl7aWYocC5oYXModikpcmV0dXJuIHY7dj1kW3ZdfXJldHVybiJyb290In07ZnVuY3Rpb24gREooaSl7dGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZHluYW1pY2FsbHkgcmVxdWlyZSAiJytpKyciLiBQbGVhc2UgY29uZmlndXJlIHRoZSBkeW5hbWljUmVxdWlyZVRhcmdldHMgb3IvYW5kIGlnbm9yZUR5bmFtaWNSZXF1aXJlcyBvcHRpb24gb2YgQHJvbGx1cC9wbHVnaW4tY29tbW9uanMgYXBwcm9wcmlhdGVseSBmb3IgdGhpcyByZXF1aXJlIGNhbGwgdG8gd29yay4nKX12YXIgSEtlPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oaSxzKXsoZnVuY3Rpb24odSl7aS5leHBvcnRzPXUoKX0pKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdShkLHAsdil7ZnVuY3Rpb24gYihfLEEpe2lmKCFwW19dKXtpZighZFtfXSl7dmFyIFA9dHlwZW9mIERKPT0iZnVuY3Rpb24iJiZESjtpZighQSYmUClyZXR1cm4gUChfLCEwKTtpZih5KXJldHVybiB5KF8sITApO3ZhciBSPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK18rIiciKTt0aHJvdyBSLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFJ9dmFyIEY9cFtfXT17ZXhwb3J0czp7fX07ZFtfXVswXS5jYWxsKEYuZXhwb3J0cyxmdW5jdGlvbihqKXt2YXIgSz1kW19dWzFdW2pdO3JldHVybiBiKEt8fGopfSxGLEYuZXhwb3J0cyx1LGQscCx2KX1yZXR1cm4gcFtfXS5leHBvcnRzfWZvcih2YXIgeT10eXBlb2YgREo9PSJmdW5jdGlvbiImJkRKLFQ9MDtUPHYubGVuZ3RoO1QrKyliKHZbVF0pO3JldHVybiBifXJldHVybiB1fSgpKHsxOltmdW5jdGlvbih1LGQscCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHAsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gXyhBLFApe2Zvcih2YXIgUj0wO1I8UC5sZW5ndGg7UisrKXt2YXIgRj1QW1JdO0YuZW51bWVyYWJsZT1GLmVudW1lcmFibGV8fCExLEYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBGJiYoRi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsRi5rZXksRil9fXJldHVybiBmdW5jdGlvbihBLFAsUil7cmV0dXJuIFAmJl8oQS5wcm90b3R5cGUsUCksUiYmXyhBLFIpLEF9fSgpO2Z1bmN0aW9uIGIoXyxBKXtpZighKF8gaW5zdGFuY2VvZiBBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgeT1mdW5jdGlvbigpe2Z1bmN0aW9uIF8oKXt2YXIgQT10aGlzLFA9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9LFI9UC5kZWZhdWx0TGF5b3V0T3B0aW9ucyxGPVI9PT12b2lkIDA/e306UixqPVAuYWxnb3JpdGhtcyxLPWo9PT12b2lkIDA/WyJsYXllcmVkIiwic3RyZXNzIiwibXJ0cmVlIiwicmFkaWFsIiwiZm9yY2UiLCJkaXNjbyIsInNwb3JlT3ZlcmxhcCIsInNwb3JlQ29tcGFjdGlvbiIsInJlY3RwYWNraW5nIl06aixlZT1QLndvcmtlckZhY3RvcnksaWU9UC53b3JrZXJVcmw7aWYoYih0aGlzLF8pLHRoaXMuZGVmYXVsdExheW91dE9wdGlvbnM9Rix0aGlzLmluaXRpYWxpemVkPSExLHR5cGVvZiBpZT4idSImJnR5cGVvZiBlZT4idSIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29uc3RydWN0IGFuIEVMSyB3aXRob3V0IGJvdGggJ3dvcmtlclVybCcgYW5kICd3b3JrZXJGYWN0b3J5Jy4iKTt2YXIgb2U9ZWU7dHlwZW9mIGllPCJ1IiYmdHlwZW9mIGVlPiJ1IiYmKG9lPWZ1bmN0aW9uKGFlKXtyZXR1cm4gbmV3IFdvcmtlcihhZSl9KTt2YXIgcGU9b2UoaWUpO2lmKHR5cGVvZiBwZS5wb3N0TWVzc2FnZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJDcmVhdGVkIHdvcmtlciBkb2VzIG5vdCBwcm92aWRlIHRoZSByZXF1aXJlZCAncG9zdE1lc3NhZ2UnIGZ1bmN0aW9uLiIpO3RoaXMud29ya2VyPW5ldyBUKHBlKSx0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7Y21kOiJyZWdpc3RlciIsYWxnb3JpdGhtczpLfSkudGhlbihmdW5jdGlvbihiZSl7cmV0dXJuIEEuaW5pdGlhbGl6ZWQ9ITB9KS5jYXRjaChjb25zb2xlLmVycil9cmV0dXJuIHYoXyxbe2tleToibGF5b3V0Iix2YWx1ZTpmdW5jdGlvbihQKXt2YXIgUj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30sRj1SLmxheW91dE9wdGlvbnMsaj1GPT09dm9pZCAwP3RoaXMuZGVmYXVsdExheW91dE9wdGlvbnM6RixLPVIubG9nZ2luZyxlZT1LPT09dm9pZCAwPyExOkssaWU9Ui5tZWFzdXJlRXhlY3V0aW9uVGltZSxvZT1pZT09PXZvaWQgMD8hMTppZTtyZXR1cm4gUD90aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7Y21kOiJsYXlvdXQiLGdyYXBoOlAsbGF5b3V0T3B0aW9uczpqLG9wdGlvbnM6e2xvZ2dpbmc6ZWUsbWVhc3VyZUV4ZWN1dGlvblRpbWU6b2V9fSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIG1hbmRhdG9yeSBwYXJhbWV0ZXIgJ2dyYXBoJy4iKSl9fSx7a2V5OiJrbm93bkxheW91dEFsZ29yaXRobXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHtjbWQ6ImFsZ29yaXRobXMifSl9fSx7a2V5OiJrbm93bkxheW91dE9wdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHtjbWQ6Im9wdGlvbnMifSl9fSx7a2V5OiJrbm93bkxheW91dENhdGVnb3JpZXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHtjbWQ6ImNhdGVnb3JpZXMifSl9fSx7a2V5OiJ0ZXJtaW5hdGVXb3JrZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy53b3JrZXIudGVybWluYXRlKCl9fV0pLF99KCk7cC5kZWZhdWx0PXk7dmFyIFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBfKEEpe3ZhciBQPXRoaXM7aWYoYih0aGlzLF8pLEE9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIG1hbmRhdG9yeSBwYXJhbWV0ZXIgJ3dvcmtlcicuIik7dGhpcy5yZXNvbHZlcnM9e30sdGhpcy53b3JrZXI9QSx0aGlzLndvcmtlci5vbm1lc3NhZ2U9ZnVuY3Rpb24oUil7c2V0VGltZW91dChmdW5jdGlvbigpe1AucmVjZWl2ZShQLFIpfSwwKX19cmV0dXJuIHYoXyxbe2tleToicG9zdE1lc3NhZ2UiLHZhbHVlOmZ1bmN0aW9uKFApe3ZhciBSPXRoaXMuaWR8fDA7dGhpcy5pZD1SKzEsUC5pZD1SO3ZhciBGPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGosSyl7Ri5yZXNvbHZlcnNbUl09ZnVuY3Rpb24oZWUsaWUpe2VlPyhGLmNvbnZlcnRHd3RTdHlsZUVycm9yKGVlKSxLKGVlKSk6aihpZSl9LEYud29ya2VyLnBvc3RNZXNzYWdlKFApfSl9fSx7a2V5OiJyZWNlaXZlIix2YWx1ZTpmdW5jdGlvbihQLFIpe3ZhciBGPVIuZGF0YSxqPVAucmVzb2x2ZXJzW0YuaWRdO2omJihkZWxldGUgUC5yZXNvbHZlcnNbRi5pZF0sRi5lcnJvcj9qKEYuZXJyb3IpOmoobnVsbCxGLmRhdGEpKX19LHtrZXk6InRlcm1pbmF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLndvcmtlci50ZXJtaW5hdGUmJnRoaXMud29ya2VyLnRlcm1pbmF0ZSgpfX0se2tleToiY29udmVydEd3dFN0eWxlRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKFApe2lmKFApe3ZhciBSPVAuX19qYXZhJGV4Y2VwdGlvbjtSJiYoUi5jYXVzZSYmUi5jYXVzZS5iYWNraW5nSnNPYmplY3QmJihQLmNhdXNlPVIuY2F1c2UuYmFja2luZ0pzT2JqZWN0LHRoaXMuY29udmVydEd3dFN0eWxlRXJyb3IoUC5jYXVzZSkpLGRlbGV0ZSBQLl9famF2YSRleGNlcHRpb24pfX19XSksX30oKX0se31dLDI6W2Z1bmN0aW9uKHUsZCxwKXsoZnVuY3Rpb24odil7KGZ1bmN0aW9uKCl7dmFyIGI7dHlwZW9mIHdpbmRvdzwidSI/Yj13aW5kb3c6dHlwZW9mIHY8InUiP2I9djp0eXBlb2Ygc2VsZjwidSImJihiPXNlbGYpO3ZhciB5O2Z1bmN0aW9uIFQoKXt9ZnVuY3Rpb24gXygpe31mdW5jdGlvbiBBKCl7fWZ1bmN0aW9uIFAoKXt9ZnVuY3Rpb24gUigpe31mdW5jdGlvbiBGKCl7fWZ1bmN0aW9uIGooKXt9ZnVuY3Rpb24gSygpe31mdW5jdGlvbiBlZSgpe31mdW5jdGlvbiBpZSgpe31mdW5jdGlvbiBvZSgpe31mdW5jdGlvbiBwZSgpe31mdW5jdGlvbiBiZSgpe31mdW5jdGlvbiBhZSgpe31mdW5jdGlvbiBuZSgpe31mdW5jdGlvbiBzZSgpe31mdW5jdGlvbiBkZSgpe31mdW5jdGlvbiBYKCl7fWZ1bmN0aW9uIGdlKCl7fWZ1bmN0aW9uIFcoKXt9ZnVuY3Rpb24geGUoKXt9ZnVuY3Rpb24gVSgpe31mdW5jdGlvbiBGZSgpe31mdW5jdGlvbiBQZSgpe31mdW5jdGlvbiBqZSgpe31mdW5jdGlvbiBJZSgpe31mdW5jdGlvbiBTZSgpe31mdW5jdGlvbiBDZSgpe31mdW5jdGlvbiBrZSgpe31mdW5jdGlvbiBLZSgpe31mdW5jdGlvbiBGdCgpe31mdW5jdGlvbiBOZSgpe31mdW5jdGlvbiBnbigpe31mdW5jdGlvbiBfdCgpe31mdW5jdGlvbiBFdCgpe31mdW5jdGlvbiBHdCgpe31mdW5jdGlvbiBsbigpe31mdW5jdGlvbiB4dCgpe31mdW5jdGlvbiBQdCgpe31mdW5jdGlvbiBRZSgpe31mdW5jdGlvbiBEdCgpe31mdW5jdGlvbiBrdCgpe31mdW5jdGlvbiBPbigpe31mdW5jdGlvbiBodCgpe31mdW5jdGlvbiB6cigpe31mdW5jdGlvbiB5dCgpe31mdW5jdGlvbiBqaSgpe31mdW5jdGlvbiB4aSgpe31mdW5jdGlvbiBNYSgpe31mdW5jdGlvbiB6cygpe31mdW5jdGlvbiBhbygpe31mdW5jdGlvbiBUcigpe31mdW5jdGlvbiBGbigpe31mdW5jdGlvbiBxbigpe31mdW5jdGlvbiBVbigpe31mdW5jdGlvbiBBdCgpe31mdW5jdGlvbiB3dCgpe31mdW5jdGlvbiBvbigpe31mdW5jdGlvbiBmbigpe31mdW5jdGlvbiBBbigpe31mdW5jdGlvbiBvbygpe31mdW5jdGlvbiBqbygpe31mdW5jdGlvbiAkbygpe31mdW5jdGlvbiBQYSgpe31mdW5jdGlvbiB3bygpe31mdW5jdGlvbiBfcygpe31mdW5jdGlvbiB0bCgpe31mdW5jdGlvbiBkYSgpe31mdW5jdGlvbiBqMCgpe31mdW5jdGlvbiBwbSgpe31mdW5jdGlvbiBNbCgpe31mdW5jdGlvbiBYYygpe31mdW5jdGlvbiBCYygpe31mdW5jdGlvbiBqYSgpe31mdW5jdGlvbiBPdSgpe31mdW5jdGlvbiBTYSgpe31mdW5jdGlvbiBQbygpe31mdW5jdGlvbiBGYygpe31mdW5jdGlvbiB4YSgpe31mdW5jdGlvbiBCYSgpe31mdW5jdGlvbiBnYSgpe31mdW5jdGlvbiBraCgpe31mdW5jdGlvbiBsdSgpe31mdW5jdGlvbiBvNSgpe31mdW5jdGlvbiBXaCgpe31mdW5jdGlvbiBvZCgpe31mdW5jdGlvbiBHZCgpe31mdW5jdGlvbiBjZCgpe31mdW5jdGlvbiBLZCgpe31mdW5jdGlvbiAkZygpe31mdW5jdGlvbiBhcygpe31mdW5jdGlvbiB3bigpe31mdW5jdGlvbiBacigpe31mdW5jdGlvbiBaaSgpe31mdW5jdGlvbiBudSgpe31mdW5jdGlvbiB2dSgpe31mdW5jdGlvbiBEbCgpe31mdW5jdGlvbiBZaCgpe31mdW5jdGlvbiB3MSgpe31mdW5jdGlvbiAkMCgpe31mdW5jdGlvbiBXaSgpe31mdW5jdGlvbiBCcygpe31mdW5jdGlvbiBRYSgpe31mdW5jdGlvbiBCaSgpe31mdW5jdGlvbiBOdSgpe31mdW5jdGlvbiBPdCgpe31mdW5jdGlvbiBXMygpe31mdW5jdGlvbiBLdCgpe31mdW5jdGlvbiB6MCgpe31mdW5jdGlvbiBCcCgpe31mdW5jdGlvbiBZMygpe31mdW5jdGlvbiAkOSgpe31mdW5jdGlvbiBjNSgpe31mdW5jdGlvbiBFaCgpe31mdW5jdGlvbiB6Zygpe31mdW5jdGlvbiBibSgpe31mdW5jdGlvbiB6OSgpe31mdW5jdGlvbiBtbSgpe31mdW5jdGlvbiB1NSgpe31mdW5jdGlvbiB5MSgpe31mdW5jdGlvbiB1ZCgpe31mdW5jdGlvbiBsZCgpe31mdW5jdGlvbiBxOSgpe31mdW5jdGlvbiBWdigpe31mdW5jdGlvbiBZNygpe31mdW5jdGlvbiBHMigpe31mdW5jdGlvbiBYNygpe31mdW5jdGlvbiBsNSgpe31mdW5jdGlvbiBYMygpe31mdW5jdGlvbiBGcCgpe31mdW5jdGlvbiBuSSgpe31mdW5jdGlvbiBjaCgpe31mdW5jdGlvbiBvUygpe31mdW5jdGlvbiBodSgpe31mdW5jdGlvbiAkSigpe31mdW5jdGlvbiB2bSgpe31mdW5jdGlvbiB6Sigpe31mdW5jdGlvbiBvaigpe31mdW5jdGlvbiBxSigpe31mdW5jdGlvbiBjaigpe31mdW5jdGlvbiBxMCgpe31mdW5jdGlvbiBRMygpe31mdW5jdGlvbiBjUygpe31mdW5jdGlvbiB1aigpe31mdW5jdGlvbiBLMigpe31mdW5jdGlvbiBKMygpe31mdW5jdGlvbiBISigpe31mdW5jdGlvbiB3bSgpe31mdW5jdGlvbiBWSigpe31mdW5jdGlvbiBVSigpe31mdW5jdGlvbiBRNygpe31mdW5jdGlvbiB1Uygpe31mdW5jdGlvbiBsaigpe31mdW5jdGlvbiBIOSgpe31mdW5jdGlvbiBHSigpe31mdW5jdGlvbiBWOSgpe31mdW5jdGlvbiBLSigpe31mdW5jdGlvbiBXSigpe31mdW5jdGlvbiBZSigpe31mdW5jdGlvbiBYSigpe31mdW5jdGlvbiBRSigpe31mdW5jdGlvbiBKSigpe31mdW5jdGlvbiBaSigpe31mdW5jdGlvbiBlWigpe31mdW5jdGlvbiB0Wigpe31mdW5jdGlvbiBuWigpe31mdW5jdGlvbiByWigpe31mdW5jdGlvbiBySSgpe31mdW5jdGlvbiBpWigpe31mdW5jdGlvbiBzWigpe31mdW5jdGlvbiBsUygpe31mdW5jdGlvbiBoaigpe31mdW5jdGlvbiBKNygpe31mdW5jdGlvbiBhWigpe31mdW5jdGlvbiBvWigpe31mdW5jdGlvbiBjWigpe31mdW5jdGlvbiB1Wigpe31mdW5jdGlvbiBsWigpe31mdW5jdGlvbiBoUygpe31mdW5jdGlvbiBpSSgpe31mdW5jdGlvbiBmaigpe31mdW5jdGlvbiBoNSgpe31mdW5jdGlvbiBmNSgpe31mdW5jdGlvbiBoWigpe31mdW5jdGlvbiB0MCgpe31mdW5jdGlvbiBaNygpe31mdW5jdGlvbiBmWigpe31mdW5jdGlvbiBVOSgpe31mdW5jdGlvbiBXZCgpe31mdW5jdGlvbiBkWigpe31mdW5jdGlvbiBnWigpe31mdW5jdGlvbiBwWigpe31mdW5jdGlvbiBkaigpe31mdW5jdGlvbiBiWigpe31mdW5jdGlvbiBmUygpe31mdW5jdGlvbiBkUygpe31mdW5jdGlvbiBnaigpe31mdW5jdGlvbiBzSSgpe31mdW5jdGlvbiBlOCgpe31mdW5jdGlvbiBtWigpe31mdW5jdGlvbiBwaigpe31mdW5jdGlvbiBiaigpe31mdW5jdGlvbiB2Wigpe31mdW5jdGlvbiB3Wigpe31mdW5jdGlvbiB5Wigpe31mdW5jdGlvbiB4Wigpe31mdW5jdGlvbiBrWigpe31mdW5jdGlvbiBFWigpe31mdW5jdGlvbiBZZCgpe31mdW5jdGlvbiBVdigpe31mdW5jdGlvbiBUWigpe31mdW5jdGlvbiBnUygpe31mdW5jdGlvbiBwUygpe31mdW5jdGlvbiBDWigpe31mdW5jdGlvbiBkNSgpe31mdW5jdGlvbiBHOSgpe31mdW5jdGlvbiBhSSgpe31mdW5jdGlvbiBaMygpe31mdW5jdGlvbiBLOSgpe31mdW5jdGlvbiBTWigpe31mdW5jdGlvbiBiUygpe31mdW5jdGlvbiBoZCgpe31mdW5jdGlvbiBtaigpe31mdW5jdGlvbiBvSSgpe31mdW5jdGlvbiBXOSgpe31mdW5jdGlvbiBjSSgpe31mdW5jdGlvbiB2aigpe31mdW5jdGlvbiBfWigpe31mdW5jdGlvbiB1SSgpe31mdW5jdGlvbiBBWigpe31mdW5jdGlvbiBMWigpe31mdW5jdGlvbiB3aigpe31mdW5jdGlvbiB0OCgpe31mdW5jdGlvbiB5aigpe31mdW5jdGlvbiBuOCgpe31mdW5jdGlvbiBNWigpe31mdW5jdGlvbiBsSSgpe31mdW5jdGlvbiBEWigpe31mdW5jdGlvbiBJWigpe31mdW5jdGlvbiBPWigpe31mdW5jdGlvbiBOWigpe31mdW5jdGlvbiB4aigpe31mdW5jdGlvbiBQWigpe31mdW5jdGlvbiBCWigpe31mdW5jdGlvbiBraigpe31mdW5jdGlvbiBGWigpe31mdW5jdGlvbiBSWigpe31mdW5jdGlvbiBqWigpe31mdW5jdGlvbiAkWigpe31mdW5jdGlvbiBFaigpe31mdW5jdGlvbiB6Wigpe31mdW5jdGlvbiBxWigpe31mdW5jdGlvbiBUaigpe31mdW5jdGlvbiBDaigpe31mdW5jdGlvbiBTaigpe31mdW5jdGlvbiBIWigpe31mdW5jdGlvbiBWWigpe31mdW5jdGlvbiBZOSgpe31mdW5jdGlvbiByOCgpe31mdW5jdGlvbiBtUygpe31mdW5jdGlvbiBVWigpe31mdW5jdGlvbiBoSSgpe31mdW5jdGlvbiB2Uygpe31mdW5jdGlvbiBmSSgpe31mdW5jdGlvbiBfaigpe31mdW5jdGlvbiBBaigpe31mdW5jdGlvbiBHWigpe31mdW5jdGlvbiBLWigpe31mdW5jdGlvbiBXWigpe31mdW5jdGlvbiBMaigpe31mdW5jdGlvbiBNaigpe31mdW5jdGlvbiBZWigpe31mdW5jdGlvbiBYWigpe31mdW5jdGlvbiBRWigpe31mdW5jdGlvbiBKWigpe31mdW5jdGlvbiBaWigpe31mdW5jdGlvbiBEaigpe31mdW5jdGlvbiBlZWUoKXt9ZnVuY3Rpb24gdGVlKCl7fWZ1bmN0aW9uIG5lZSgpe31mdW5jdGlvbiByZWUoKXt9ZnVuY3Rpb24gSWooKXt9ZnVuY3Rpb24gd1MoKXt9ZnVuY3Rpb24gaWVlKCl7fWZ1bmN0aW9uIHNlZSgpe31mdW5jdGlvbiBPaigpe31mdW5jdGlvbiBhZWUoKXt9ZnVuY3Rpb24gb2VlKCl7fWZ1bmN0aW9uIGNlZSgpe31mdW5jdGlvbiB1ZWUoKXt9ZnVuY3Rpb24gbGVlKCl7fWZ1bmN0aW9uIGhlZSgpe31mdW5jdGlvbiBOaigpe31mdW5jdGlvbiBmZWUoKXt9ZnVuY3Rpb24gUGooKXt9ZnVuY3Rpb24gZGVlKCl7fWZ1bmN0aW9uIGdlZSgpe31mdW5jdGlvbiBwZWUoKXt9ZnVuY3Rpb24geVMoKXt9ZnVuY3Rpb24gYmVlKCl7fWZ1bmN0aW9uIHhTKCl7fWZ1bmN0aW9uIG1lZSgpe31mdW5jdGlvbiBCaigpe31mdW5jdGlvbiBGaigpe31mdW5jdGlvbiBSaigpe31mdW5jdGlvbiBqaigpe31mdW5jdGlvbiBHdigpe31mdW5jdGlvbiAkaigpe31mdW5jdGlvbiB6aigpe31mdW5jdGlvbiBxaigpe31mdW5jdGlvbiBIaigpe31mdW5jdGlvbiB2ZWUoKXt9ZnVuY3Rpb24gaTgoKXt9ZnVuY3Rpb24gZEkoKXt9ZnVuY3Rpb24gZzUoKXt9ZnVuY3Rpb24gd2VlKCl7fWZ1bmN0aW9uIHllZSgpe31mdW5jdGlvbiBrUygpe31mdW5jdGlvbiBWaigpe31mdW5jdGlvbiB4ZWUoKXt9ZnVuY3Rpb24ga2VlKCl7fWZ1bmN0aW9uIEVlZSgpe31mdW5jdGlvbiBUZWUoKXt9ZnVuY3Rpb24gQ2VlKCl7fWZ1bmN0aW9uIFNlZSgpe31mdW5jdGlvbiBfZWUoKXt9ZnVuY3Rpb24gQWVlKCl7fWZ1bmN0aW9uIExlZSgpe31mdW5jdGlvbiBNZWUoKXt9ZnVuY3Rpb24gRVMoKXt9ZnVuY3Rpb24gVWooKXt9ZnVuY3Rpb24gRGVlKCl7fWZ1bmN0aW9uIEllZSgpe31mdW5jdGlvbiBPZWUoKXt9ZnVuY3Rpb24gTmVlKCl7fWZ1bmN0aW9uIFBlZSgpe31mdW5jdGlvbiBHaigpe31mdW5jdGlvbiBLaigpe31mdW5jdGlvbiBCZWUoKXt9ZnVuY3Rpb24gV2ooKXt9ZnVuY3Rpb24gWWooKXt9ZnVuY3Rpb24gRmVlKCl7fWZ1bmN0aW9uIFJlZSgpe31mdW5jdGlvbiBqZWUoKXt9ZnVuY3Rpb24gJGVlKCl7fWZ1bmN0aW9uIHplZSgpe31mdW5jdGlvbiBxZWUoKXt9ZnVuY3Rpb24gSGVlKCl7fWZ1bmN0aW9uIFZlZSgpe31mdW5jdGlvbiBnSSgpe31mdW5jdGlvbiBVZWUoKXt9ZnVuY3Rpb24gWDkoKXt9ZnVuY3Rpb24gWGooKXt9ZnVuY3Rpb24gR2VlKCl7fWZ1bmN0aW9uIEtlZSgpe31mdW5jdGlvbiBXZWUoKXt9ZnVuY3Rpb24gWWVlKCl7fWZ1bmN0aW9uIFhlZSgpe31mdW5jdGlvbiBRZWUoKXt9ZnVuY3Rpb24gSmVlKCl7fWZ1bmN0aW9uIFplZSgpe31mdW5jdGlvbiBldGUoKXt9ZnVuY3Rpb24gdHRlKCl7fWZ1bmN0aW9uIG50ZSgpe31mdW5jdGlvbiBydGUoKXt9ZnVuY3Rpb24gaXRlKCl7fWZ1bmN0aW9uIHN0ZSgpe31mdW5jdGlvbiBhdGUoKXt9ZnVuY3Rpb24gczgoKXt9ZnVuY3Rpb24gUWooKXt9ZnVuY3Rpb24gb3RlKCl7fWZ1bmN0aW9uIGN0ZSgpe31mdW5jdGlvbiB1dGUoKXt9ZnVuY3Rpb24gSmooKXt9ZnVuY3Rpb24gbHRlKCl7fWZ1bmN0aW9uIFRTKCl7fWZ1bmN0aW9uIGh0ZSgpe31mdW5jdGlvbiBmdGUoKXt9ZnVuY3Rpb24gZHRlKCl7fWZ1bmN0aW9uIGd0ZSgpe31mdW5jdGlvbiBwdGUoKXt9ZnVuY3Rpb24gYnRlKCl7fWZ1bmN0aW9uIG10ZSgpe31mdW5jdGlvbiB2dGUoKXt9ZnVuY3Rpb24gd3RlKCl7fWZ1bmN0aW9uIHl0ZSgpe31mdW5jdGlvbiBhOCgpe31mdW5jdGlvbiB4dGUoKXt9ZnVuY3Rpb24ga3RlKCl7fWZ1bmN0aW9uIEV0ZSgpe31mdW5jdGlvbiBUdGUoKXt9ZnVuY3Rpb24gQ3RlKCl7fWZ1bmN0aW9uIFN0ZSgpe31mdW5jdGlvbiBfdGUoKXt9ZnVuY3Rpb24gQXRlKCl7fWZ1bmN0aW9uIENTKCl7fWZ1bmN0aW9uIEx0ZSgpe31mdW5jdGlvbiBNdGUoKXt9ZnVuY3Rpb24gRHRlKCl7fWZ1bmN0aW9uIEl0ZSgpe31mdW5jdGlvbiBPdGUoKXt9ZnVuY3Rpb24gTnRlKCl7fWZ1bmN0aW9uIFB0ZSgpe31mdW5jdGlvbiBCdGUoKXt9ZnVuY3Rpb24gbzgoKXt9ZnVuY3Rpb24gWmooKXt9ZnVuY3Rpb24gRnRlKCl7fWZ1bmN0aW9uIHBJKCl7fWZ1bmN0aW9uIFJ0ZSgpe31mdW5jdGlvbiBqdGUoKXt9ZnVuY3Rpb24gJHRlKCl7fWZ1bmN0aW9uIHp0ZSgpe31mdW5jdGlvbiBxdGUoKXt9ZnVuY3Rpb24gSHRlKCl7fWZ1bmN0aW9uIFZ0ZSgpe31mdW5jdGlvbiBlJCgpe31mdW5jdGlvbiBVdGUoKXt9ZnVuY3Rpb24gdCQoKXt9ZnVuY3Rpb24gR3RlKCl7fWZ1bmN0aW9uIG4kKCl7fWZ1bmN0aW9uIHIkKCl7fWZ1bmN0aW9uIGkkKCl7fWZ1bmN0aW9uIEt0ZSgpe31mdW5jdGlvbiBXdGUoKXt9ZnVuY3Rpb24gcyQoKXt9ZnVuY3Rpb24gWXRlKCl7fWZ1bmN0aW9uIGEkKCl7fWZ1bmN0aW9uIFh0ZSgpe31mdW5jdGlvbiBRdGUoKXt9ZnVuY3Rpb24gYkkoKXt9ZnVuY3Rpb24gSnRlKCl7fWZ1bmN0aW9uIFp0ZSgpe31mdW5jdGlvbiBlbmUoKXt9ZnVuY3Rpb24gdG5lKCl7fWZ1bmN0aW9uIG5uZSgpe31mdW5jdGlvbiBvJCgpe31mdW5jdGlvbiBybmUoKXt9ZnVuY3Rpb24gaW5lKCl7fWZ1bmN0aW9uIHNuZSgpe31mdW5jdGlvbiBwd2UoKXt9ZnVuY3Rpb24gYW5lKCl7fWZ1bmN0aW9uIG9uZSgpe31mdW5jdGlvbiBjbmUoKXt9ZnVuY3Rpb24gdW5lKCl7fWZ1bmN0aW9uIGxuZSgpe31mdW5jdGlvbiBobmUoKXt9ZnVuY3Rpb24gZm5lKCl7fWZ1bmN0aW9uIGRuZSgpe31mdW5jdGlvbiBnbmUoKXt9ZnVuY3Rpb24gcG5lKCl7fWZ1bmN0aW9uIGJuZSgpe31mdW5jdGlvbiBtbmUoKXt9ZnVuY3Rpb24gdm5lKCl7fWZ1bmN0aW9uIHduZSgpe31mdW5jdGlvbiB5bmUoKXt9ZnVuY3Rpb24geG5lKCl7fWZ1bmN0aW9uIGZ1KCl7fWZ1bmN0aW9uIGtuZSgpe31mdW5jdGlvbiBTUygpe31mdW5jdGlvbiBSYygpe31mdW5jdGlvbiBQdSgpe31mdW5jdGlvbiBocygpe31mdW5jdGlvbiBtSSgpe31mdW5jdGlvbiBFbmUoKXt9ZnVuY3Rpb24gVG5lKCl7fWZ1bmN0aW9uIENuZSgpe31mdW5jdGlvbiBjOCgpe31mdW5jdGlvbiB5bSgpe31mdW5jdGlvbiBROSgpe31mdW5jdGlvbiBTbmUoKXt9ZnVuY3Rpb24gdkkoKXt9ZnVuY3Rpb24gX25lKCl7fWZ1bmN0aW9uIEFuZSgpe31mdW5jdGlvbiBMbmUoKXt9ZnVuY3Rpb24gYyQoKXt9ZnVuY3Rpb24gTW5lKCl7fWZ1bmN0aW9uIERuZSgpe31mdW5jdGlvbiB3SSgpe31mdW5jdGlvbiBJbmUoKXt9ZnVuY3Rpb24gdWgoKXt9ZnVuY3Rpb24gZ2woKXt9ZnVuY3Rpb24gdSQoKXt9ZnVuY3Rpb24gT25lKCl7fWZ1bmN0aW9uIE5uZSgpe31mdW5jdGlvbiBleSgpe31mdW5jdGlvbiBwNSgpe31mdW5jdGlvbiB0eSgpe31mdW5jdGlvbiBScCgpe31mdW5jdGlvbiB1OCgpe31mdW5jdGlvbiB5SSgpe31mdW5jdGlvbiBsJCgpe31mdW5jdGlvbiBoJCgpe31mdW5jdGlvbiBQbmUoKXt9ZnVuY3Rpb24geDEoKXt9ZnVuY3Rpb24gZiQoKXt9ZnVuY3Rpb24gbnkoKXt9ZnVuY3Rpb24gSjkoKXt9ZnVuY3Rpb24geEkoKXt9ZnVuY3Rpb24gbDgoKXt9ZnVuY3Rpb24gVzIoKXt9ZnVuY3Rpb24gZCQoKXt9ZnVuY3Rpb24gZyQoKXt9ZnVuY3Rpb24gcCQoKXt9ZnVuY3Rpb24gQm5lKCl7fWZ1bmN0aW9uIGg4KCl7fWZ1bmN0aW9uIHJ5KCl7fWZ1bmN0aW9uIGpwKCl7fWZ1bmN0aW9uIFkyKCl7fWZ1bmN0aW9uIGI1KCl7fWZ1bmN0aW9uIFo5KCl7fWZ1bmN0aW9uIF9TKCl7fWZ1bmN0aW9uIGtJKCl7fWZ1bmN0aW9uIEZuZSgpe31mdW5jdGlvbiBSbmUoKXt9ZnVuY3Rpb24gYiQoKXt9ZnVuY3Rpb24gbSQoKXt9ZnVuY3Rpb24gVXQoKXt9ZnVuY3Rpb24gZWsoKXt9ZnVuY3Rpb24gdiQoKXt9ZnVuY3Rpb24gdyQoKXt9ZnVuY3Rpb24gam5lKCl7fWZ1bmN0aW9uIHRrKCl7fWZ1bmN0aW9uIG5rKCl7fWZ1bmN0aW9uIHkkKCl7fWZ1bmN0aW9uICRuZSgpe31mdW5jdGlvbiB6bmUoKXt9ZnVuY3Rpb24gcW5lKCl7fWZ1bmN0aW9uIEhuZSgpe31mdW5jdGlvbiBWbmUoKXt9ZnVuY3Rpb24gVW5lKCl7fWZ1bmN0aW9uIEVJKCl7fWZ1bmN0aW9uIEduZSgpe31mdW5jdGlvbiBLbmUoKXt9ZnVuY3Rpb24geCQoKXt9ZnVuY3Rpb24gQVMoKXt9ZnVuY3Rpb24gV25lKCl7fWZ1bmN0aW9uIFRJKCl7fWZ1bmN0aW9uIHJrKCl7fWZ1bmN0aW9uIGlrKCl7fWZ1bmN0aW9uIHNrKCl7fWZ1bmN0aW9uIGskKCl7fWZ1bmN0aW9uIFluZSgpe31mdW5jdGlvbiBFJCgpe31mdW5jdGlvbiBUJCgpe31mdW5jdGlvbiBYbmUoKXt9ZnVuY3Rpb24gTFMoKXt9ZnVuY3Rpb24gWDIoKXt9ZnVuY3Rpb24gQyQoKXt9ZnVuY3Rpb24gUyQoKXt9ZnVuY3Rpb24gTVMoKXt9ZnVuY3Rpb24gUW5lKCl7fWZ1bmN0aW9uIG01KCl7fWZ1bmN0aW9uIF8kKCl7fWZ1bmN0aW9uIENJKCl7fWZ1bmN0aW9uIFFjKCl7fWZ1bmN0aW9uIFNJKCl7fWZ1bmN0aW9uIF9JKCl7fWZ1bmN0aW9uIERTKCl7fWZ1bmN0aW9uIEpuZSgpe31mdW5jdGlvbiBabmUoKXt9ZnVuY3Rpb24gSVMoKXt9ZnVuY3Rpb24gZXJlKCl7fWZ1bmN0aW9uIE9TKCl7fWZ1bmN0aW9uIE5TKCl7fWZ1bmN0aW9uIEgwKCl7fWZ1bmN0aW9uIEFJKCl7fWZ1bmN0aW9uIExJKCl7fWZ1bmN0aW9uIGY4KCl7fWZ1bmN0aW9uIHRyZSgpe31mdW5jdGlvbiBucmUoKXt9ZnVuY3Rpb24gcnJlKCl7fWZ1bmN0aW9uIGlyZSgpe31mdW5jdGlvbiBYZCgpe31mdW5jdGlvbiBQUygpe31mdW5jdGlvbiBkOCgpe31mdW5jdGlvbiBrMSgpe31mdW5jdGlvbiBBJCgpe31mdW5jdGlvbiBMJCgpe31mdW5jdGlvbiBNJCgpe31mdW5jdGlvbiBEJCgpe31mdW5jdGlvbiBJJCgpe31mdW5jdGlvbiBPJCgpe31mdW5jdGlvbiBWMCgpe31mdW5jdGlvbiBubCgpe31mdW5jdGlvbiBzcmUoKXt9ZnVuY3Rpb24gYXJlKCl7fWZ1bmN0aW9uIG9yZSgpe31mdW5jdGlvbiBybCgpe31mdW5jdGlvbiBCUygpe31mdW5jdGlvbiBOJCgpe31mdW5jdGlvbiBQJCgpe31mdW5jdGlvbiBnOCgpe31mdW5jdGlvbiBjcmUoKXt9ZnVuY3Rpb24gYWsoKXt9ZnVuY3Rpb24gdXJlKCl7fWZ1bmN0aW9uIEIkKCl7fWZ1bmN0aW9uIGxyZSgpe31mdW5jdGlvbiBocmUoKXt9ZnVuY3Rpb24gRlMoKXt9ZnVuY3Rpb24gRiQoKXt9ZnVuY3Rpb24gTUkoKXt9ZnVuY3Rpb24gUlMoKXt9ZnVuY3Rpb24gZnJlKCl7fWZ1bmN0aW9uIGRyZSgpe31mdW5jdGlvbiBESSgpe31mdW5jdGlvbiBqUygpe31mdW5jdGlvbiBFMSgpe31mdW5jdGlvbiBvaygpe31mdW5jdGlvbiBncmUoKXt9ZnVuY3Rpb24gY2soKXt9ZnVuY3Rpb24gSUkoKXt9ZnVuY3Rpb24geG0oKXt9ZnVuY3Rpb24gJFMoKXt9ZnVuY3Rpb24gT0koKXt9ZnVuY3Rpb24gVTAoKXt9ZnVuY3Rpb24gelMoKXt9ZnVuY3Rpb24gVDEoKXt9ZnVuY3Rpb24gQzEoKXt9ZnVuY3Rpb24gcHJlKCl7fWZ1bmN0aW9uIGJyZSgpe31mdW5jdGlvbiB2NSgpe31mdW5jdGlvbiB1aygpe31mdW5jdGlvbiBsaygpe31mdW5jdGlvbiBxUygpe31mdW5jdGlvbiBtcmUoKXt9ZnVuY3Rpb24gdnJlKCl7fWZ1bmN0aW9uIHA4KCl7fWZ1bmN0aW9uIFIkKCl7fWZ1bmN0aW9uIGokKCl7fWZ1bmN0aW9uIHdyZSgpe31mdW5jdGlvbiAkJCgpe31mdW5jdGlvbiB5cmUoKXt9ZnVuY3Rpb24geiQoKXt9ZnVuY3Rpb24gTkkoKXt9ZnVuY3Rpb24geHJlKCl7fWZ1bmN0aW9uIEhTKCl7fWZ1bmN0aW9uIGtyZSgpe31mdW5jdGlvbiBFcmUoKXt9ZnVuY3Rpb24gVHJlKCl7fWZ1bmN0aW9uIENyZSgpe31mdW5jdGlvbiBTcmUoKXt9ZnVuY3Rpb24gcSQoKXt9ZnVuY3Rpb24gX3JlKCl7fWZ1bmN0aW9uIEFyZSgpe31mdW5jdGlvbiBMcmUoKXt9ZnVuY3Rpb24gSCQoKXt9ZnVuY3Rpb24gTXJlKCl7fWZ1bmN0aW9uIERyZSgpe31mdW5jdGlvbiBWUygpe31mdW5jdGlvbiBJcmUoKXt9ZnVuY3Rpb24gT3JlKCl7fWZ1bmN0aW9uIE5yZSgpe31mdW5jdGlvbiBQcmUoKXt9ZnVuY3Rpb24gQnJlKCl7fWZ1bmN0aW9uIEZyZSgpe31mdW5jdGlvbiBWJCgpe31mdW5jdGlvbiBScmUoKXt9ZnVuY3Rpb24gVSQoKXt9ZnVuY3Rpb24ganJlKCl7fWZ1bmN0aW9uIFBJKCl7fWZ1bmN0aW9uICRyZSgpe31mdW5jdGlvbiBHJCgpe31mdW5jdGlvbiB6cmUoKXt9ZnVuY3Rpb24gSyQoKXt9ZnVuY3Rpb24gcXJlKCl7fWZ1bmN0aW9uIFckKCl7fWZ1bmN0aW9uIFkkKCl7fWZ1bmN0aW9uIFgkKCl7fWZ1bmN0aW9uIEJJKCl7fWZ1bmN0aW9uIHc1KCl7fWZ1bmN0aW9uIFVTKCl7fWZ1bmN0aW9uIFMxKCl7fWZ1bmN0aW9uIFEkKCl7fWZ1bmN0aW9uIGhrKCl7fWZ1bmN0aW9uIEZJKCl7fWZ1bmN0aW9uIEokKCl7fWZ1bmN0aW9uIGttKCl7fWZ1bmN0aW9uIFokKCl7fWZ1bmN0aW9uIEdTKCl7b18oKX1mdW5jdGlvbiBIcmUoKXtpTygpfWZ1bmN0aW9uIGV6KCl7ZFUoKX1mdW5jdGlvbiB0eigpe0xjZSgpfWZ1bmN0aW9uIG56KCl7SUEoKX1mdW5jdGlvbiBLUygpe1h4ZSgpfWZ1bmN0aW9uIFdTKCl7YjAoKX1mdW5jdGlvbiByeigpe2F4ZSgpfWZ1bmN0aW9uIGl6KCl7Vk4oKX1mdW5jdGlvbiBiOCgpe3NPKCl9ZnVuY3Rpb24gS3YoKXtPTygpfWZ1bmN0aW9uIGZrKCl7aGV0KCl9ZnVuY3Rpb24gc3ooKXtseCgpfWZ1bmN0aW9uIFZyZSgpeyR1dCgpfWZ1bmN0aW9uIGF6KCl7czdlKCl9ZnVuY3Rpb24gbTgoKXtBb3QoKX1mdW5jdGlvbiBSSSgpe2E3ZSgpfWZ1bmN0aW9uIG96KCl7bWx0KCl9ZnVuY3Rpb24gVXJlKCl7X290KCl9ZnVuY3Rpb24gY3ooKXtURSgpfWZ1bmN0aW9uIFlTKCl7ZWZ0KCl9ZnVuY3Rpb24gWFMoKXtaaHQoKX1mdW5jdGlvbiBqSSgpe0VjdCgpfWZ1bmN0aW9uIEdyZSgpe3RmdCgpfWZ1bmN0aW9uIEtyZSgpe0NiKCl9ZnVuY3Rpb24gV3JlKCl7ZXEoKX1mdW5jdGlvbiBZcmUoKXtZa2UoKX1mdW5jdGlvbiBYcmUoKXtOdCgpfWZ1bmN0aW9uIFFyZSgpe25mdCgpfWZ1bmN0aW9uIEpyZSgpe0xmdCgpfWZ1bmN0aW9uIFpyZSgpe0xvdCgpfWZ1bmN0aW9uIGVpZSgpe2VndCgpfWZ1bmN0aW9uIHRpZSgpe01vdCgpfWZ1bmN0aW9uIG5pZSgpe2dtdCgpfWZ1bmN0aW9uIHJpZSgpe185ZSgpfWZ1bmN0aW9uIGlpZSgpe3RwKCl9ZnVuY3Rpb24gc2llKCl7cDF0KCl9ZnVuY3Rpb24gdjgoKXtIYygpfWZ1bmN0aW9uIGFpZSgpe2pvdCgpfWZ1bmN0aW9uIGRrKCl7dXgoKX1mdW5jdGlvbiBDZigpe3VrZSgpfWZ1bmN0aW9uIG9pZSgpe1NiKCl9ZnVuY3Rpb24gZ2soKXtsa2UoKX1mdW5jdGlvbiBRUygpe3oxKCl9ZnVuY3Rpb24gY2llKCl7WU4oKX1mdW5jdGlvbiB1aWUoKXt0bGUoKX1mdW5jdGlvbiBsaWUoKXtsdWUoKX1mdW5jdGlvbiBTZigpe3BpdCgpfWZ1bmN0aW9uIGhpZSgpe1pIKCl9ZnVuY3Rpb24gZmllKCl7d1UoKX1mdW5jdGlvbiB1eigpe3BpKCl9ZnVuY3Rpb24gZGllKCl7UFYoKX1mdW5jdGlvbiBseigpe0I4ZSgpfWZ1bmN0aW9uIGh6KCl7bGNlKCl9ZnVuY3Rpb24gZnooKXt6VSgpfWZ1bmN0aW9uIGR6KCl7eGtlKCl9ZnVuY3Rpb24gbjAoZSl7bnIoZSl9ZnVuY3Rpb24gZ3ooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gSlMoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gcHooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gYnooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gZ2llKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHBpZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBteihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBiaWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gdnooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gUTIoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gbWllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHZpZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiAkSShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB3aWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24geWllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHBrKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEoyKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHd6KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGJrKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHk1KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHpJKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHc4KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHFJKGUpe3RoaXMuYj1lfWZ1bmN0aW9uIHFnKGUpe3RoaXMuYz1lfWZ1bmN0aW9uIHhpZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBpeShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB5eihlKXt0aGlzLmE9ZX1mdW5jdGlvbiB4eihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBISShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBWSShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBreihlKXt0aGlzLmE9ZX1mdW5jdGlvbiB5OChlKXt0aGlzLmE9ZX1mdW5jdGlvbiBtayhlKXt0aGlzLmE9ZX1mdW5jdGlvbiBraWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gRXooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gVHooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gQ3ooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gU3ooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gamMoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gdmsoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gd2soZSl7dGhpcy5hPWV9ZnVuY3Rpb24gJHAoKXt0aGlzLmE9W119ZnVuY3Rpb24gRWllKGUsdCl7ZS5hPXR9ZnVuY3Rpb24gVGllKGUsdCl7ZS5hPXR9ZnVuY3Rpb24gQ2llKGUsdCl7ZS5iPXR9ZnVuY3Rpb24gU2llKGUsdCl7ZS5iPXR9ZnVuY3Rpb24gX2llKGUsdCl7ZS5iPXR9ZnVuY3Rpb24gX3ooZSx0KXtlLmo9dH1mdW5jdGlvbiBid2UoZSx0KXtlLmc9dH1mdW5jdGlvbiBBeihlLHQpe2UuaT10fWZ1bmN0aW9uIEFpZShlLHQpe2UuYz10fWZ1bmN0aW9uIHg4KGUsdCl7ZS5jPXR9ZnVuY3Rpb24gbXdlKGUsdCl7ZS5kPXR9ZnVuY3Rpb24gazgoZSx0KXtlLmQ9dH1mdW5jdGlvbiB4KGUsdCl7ZS5rPXR9ZnVuY3Rpb24gbShlLHQpe2UuYz10fWZ1bmN0aW9uIGsoZSx0KXtlLmM9dH1mdW5jdGlvbiBTKGUsdCl7ZS5hPXR9ZnVuY3Rpb24gTShlLHQpe2UuYT10fWZ1bmN0aW9uIE8oZSx0KXtlLmY9dH1mdW5jdGlvbiBOKGUsdCl7ZS5hPXR9ZnVuY3Rpb24gJChlLHQpe2UuYj10fWZ1bmN0aW9uIEgoZSx0KXtlLmQ9dH1mdW5jdGlvbiBxKGUsdCl7ZS5pPXR9ZnVuY3Rpb24gWShlLHQpe2Uubz10fWZ1bmN0aW9uIFooZSx0KXtlLnI9dH1mdW5jdGlvbiBjZShlLHQpe2UuYT10fWZ1bmN0aW9uIHZlKGUsdCl7ZS5iPXR9ZnVuY3Rpb24gbWUoZSx0KXtlLmU9dH1mdW5jdGlvbiBMZShlLHQpe2UuZj10fWZ1bmN0aW9uIF9lKGUsdCl7ZS5nPXR9ZnVuY3Rpb24gRWUoZSx0KXtlLmU9dH1mdW5jdGlvbiBCZShlLHQpe2UuZj10fWZ1bmN0aW9uIFJlKGUsdCl7ZS5mPXR9ZnVuY3Rpb24gVmUoZSx0KXtlLmE9dH1mdW5jdGlvbiBjdChlLHQpe2UuYj10fWZ1bmN0aW9uIHN0KGUsdCl7ZS5uPXR9ZnVuY3Rpb24gWWUoZSx0KXtlLmE9dH1mdW5jdGlvbiBtdChlLHQpe2UuYz10fWZ1bmN0aW9uIEplKGUsdCl7ZS5jPXR9ZnVuY3Rpb24gTHQoZSx0KXtlLmM9dH1mdW5jdGlvbiBNdChlLHQpe2UuYT10fWZ1bmN0aW9uIHV0KGUsdCl7ZS5hPXR9ZnVuY3Rpb24gV3QoZSx0KXtlLmQ9dH1mdW5jdGlvbiBUdChlLHQpe2UuZD10fWZ1bmN0aW9uIF9uKGUsdCl7ZS5lPXR9ZnVuY3Rpb24gaG4oZSx0KXtlLmU9dH1mdW5jdGlvbiBZdChlLHQpe2UuZz10fWZ1bmN0aW9uIERuKGUsdCl7ZS5mPXR9ZnVuY3Rpb24gaXIoZSx0KXtlLmo9dH1mdW5jdGlvbiB2cihlLHQpe2UuYT10fWZ1bmN0aW9uIE5uKGUsdCl7ZS5hPXR9ZnVuY3Rpb24gcHIoZSx0KXtlLmI9dH1mdW5jdGlvbiBFcihlKXtlLmI9ZS5hfWZ1bmN0aW9uIE1yKGUpe2UuYz1lLmQuZH1mdW5jdGlvbiBDcihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBPcihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBXbihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBicihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBTcihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBOcihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBTaShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB5cyhlKXt0aGlzLmE9ZX1mdW5jdGlvbiBwYShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBNaShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBnaShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBmcyhlKXt0aGlzLmE9ZX1mdW5jdGlvbiBGcyhlKXt0aGlzLmE9ZX1mdW5jdGlvbiB4cyhlKXt0aGlzLmE9ZX1mdW5jdGlvbiBScyhlKXt0aGlzLmI9ZX1mdW5jdGlvbiB5byhlKXt0aGlzLmI9ZX1mdW5jdGlvbiAkYShlKXt0aGlzLmI9ZX1mdW5jdGlvbiBEYShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBCbyhlKXt0aGlzLmE9ZX1mdW5jdGlvbiB0cihlKXt0aGlzLmM9ZX1mdW5jdGlvbiBHKGUpe3RoaXMuYz1lfWZ1bmN0aW9uIEpuKGUpe3RoaXMuYz1lfWZ1bmN0aW9uIGtyKGUpe3RoaXMuZD1lfWZ1bmN0aW9uIGxyKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFZ0KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEhzKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHdyKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEVzKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGdvKGUpe3RoaXMuYT1lfWZ1bmN0aW9uICRjKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHphKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFNjKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGJhKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHhvKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGxoKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFdsKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFoyKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGViKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEcwKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHpwKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGZkKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFd2KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHN5KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEU4KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHg1KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFQ4KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFpTKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGs1KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFFkKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIF8xKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEpkKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFl2KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEVtKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEx6KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIExpZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBNaWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gZV8oZSl7dGhpcy5hPWV9ZnVuY3Rpb24gRGllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIElpZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBFNShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBNeihlKXt0aGlzLmE9ZX1mdW5jdGlvbiB5ayhlKXt0aGlzLmE9ZX1mdW5jdGlvbiBVSShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB0XyhlKXt0aGlzLmE9ZX1mdW5jdGlvbiBEeihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBJeihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBPaWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gcXAoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gbl8oZSl7dGhpcy5hPWV9ZnVuY3Rpb24gR0koZSl7dGhpcy5hPWV9ZnVuY3Rpb24gVG0oZSl7dGhpcy5hPWV9ZnVuY3Rpb24gWmQoZSl7dGhpcy5lPWV9ZnVuY3Rpb24gVDUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24galdlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEM4KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHZ3ZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiAkV2UoZSl7dGhpcy5hPWV9ZnVuY3Rpb24geldlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHFXZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBIV2UoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gVldlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFVXZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBHV2UoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gS1dlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFdXZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBZV2UoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gWFdlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHd3ZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBRV2UoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gSldlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFpXZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBlWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gdFllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIG5ZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiByWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gaVllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHNZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBhWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gb1llKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGNZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB1WWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gbFllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGhZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBmWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gZFllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGdZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBwWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gYlllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIG1ZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB2WWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gd1llKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHlZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB4WWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24ga1llKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEVZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBUWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gQ1llKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFNZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBfWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gQVllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIExZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBNWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gRFllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIElZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBPWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gTlllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFBZZShlKXt0aGlzLmM9ZX1mdW5jdGlvbiBCWWUoZSl7dGhpcy5iPWV9ZnVuY3Rpb24gRlllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFJZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBqWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gJFllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHpZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBxWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gSFllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFZZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBVWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gR1llKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEtZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBXWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gWVllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFhZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBRWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gSlllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFpZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBlWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gdFhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIG5YZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiByWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gaVhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHNYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBhWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gb1hlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGNYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB1WGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gSGcoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gQzUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gbFhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGhYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBmWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gZFhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGdYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBwWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gYlhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIG1YZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB2WGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gd1hlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHlYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB4WGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24ga1hlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEVYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBUWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gQ1hlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFNYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBfWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gQVhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIExYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBNWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gRFhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIElYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBPWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gTlhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFBYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBPeihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBCWGUoZSl7dGhpcy5mPWV9ZnVuY3Rpb24gRlhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFJYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBqWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gJFhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHpYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBxWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gSFhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFZYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBVWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gR1hlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEtYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBXWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gWVhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFhYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBRWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gSlhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFpYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBlUWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gdFFlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIG5RZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiByUWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gaVFlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHNRZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBhUWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gb1FlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGNRZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB1UWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gbFFlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIE5pZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB5d2UoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gVWkoZSl7dGhpcy5iPWV9ZnVuY3Rpb24gaFFlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGZRZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBkUWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gZ1FlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHBRZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBiUWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gbVFlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHZRZShlKXt0aGlzLmI9ZX1mdW5jdGlvbiB3UWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gS0koZSl7dGhpcy5hPWV9ZnVuY3Rpb24geVFlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHhRZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB4d2UoZSl7dGhpcy5jPWV9ZnVuY3Rpb24gTnooZSl7dGhpcy5lPWV9ZnVuY3Rpb24gUHooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gQnooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gUGllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGtRZShlKXt0aGlzLmQ9ZX1mdW5jdGlvbiBFUWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24ga3dlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEV3ZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBYdihlKXt0aGlzLmU9ZX1mdW5jdGlvbiBEY24oKXt0aGlzLmE9MH1mdW5jdGlvbiBQcigpe05sKHRoaXMpfWZ1bmN0aW9uIGJ0KCl7WXNlKHRoaXMpfWZ1bmN0aW9uIEJpZSgpe2NhdCh0aGlzKX1mdW5jdGlvbiBUUWUoKXt9ZnVuY3Rpb24gUXYoKXt0aGlzLmM9TFBlfWZ1bmN0aW9uIENRZShlLHQpe2UuYis9dH1mdW5jdGlvbiBJY24oZSx0KXt0LldiKGUpfWZ1bmN0aW9uIE9jbihlKXtyZXR1cm4gZS5hfWZ1bmN0aW9uIE5jbihlKXtyZXR1cm4gZS5hfWZ1bmN0aW9uIFBjbihlKXtyZXR1cm4gZS5hfWZ1bmN0aW9uIEJjbihlKXtyZXR1cm4gZS5hfWZ1bmN0aW9uIEZjbihlKXtyZXR1cm4gZS5hfWZ1bmN0aW9uIHVlKGUpe3JldHVybiBlLmV9ZnVuY3Rpb24gUmNuKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gamNuKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gJGNuKCl7YzNlKCksd0luKCl9ZnVuY3Rpb24gemNuKGUpe2UuYi5PZihlLmUpfWZ1bmN0aW9uIFNRZShlKXtlLmI9bmV3IG5zZX1mdW5jdGlvbiByXyhlLHQpe2UuYj10LWUuYn1mdW5jdGlvbiBpXyhlLHQpe2UuYT10LWUuYX1mdW5jdGlvbiAkbihlLHQpe2UucHVzaCh0KX1mdW5jdGlvbiBfUWUoZSx0KXtlLnNvcnQodCl9ZnVuY3Rpb24gQVFlKGUsdCl7dC5qZChlLmEpfWZ1bmN0aW9uIHFjbihlLHQpe2xhKHQsZSl9ZnVuY3Rpb24gSGNuKGUsdCxuKXtlLllkKG4sdCl9ZnVuY3Rpb24gV0koZSx0KXtlLmU9dCx0LmI9ZX1mdW5jdGlvbiBUd2UoZSl7d2QoKSx0aGlzLmE9ZX1mdW5jdGlvbiBMUWUoZSl7d2QoKSx0aGlzLmE9ZX1mdW5jdGlvbiBNUWUoZSl7d2QoKSx0aGlzLmE9ZX1mdW5jdGlvbiBGaWUoZSl7d3coKSx0aGlzLmE9ZX1mdW5jdGlvbiBEUWUoZSl7WGsoKSxTMGUubGUoZSl9ZnVuY3Rpb24gQ3dlKCl7Q3dlPVUsbmV3IFByfWZ1bmN0aW9uIENtKCl7Sm50LmNhbGwodGhpcyl9ZnVuY3Rpb24gU3dlKCl7Sm50LmNhbGwodGhpcyl9ZnVuY3Rpb24gX3dlKCl7Q20uY2FsbCh0aGlzKX1mdW5jdGlvbiBSaWUoKXtDbS5jYWxsKHRoaXMpfWZ1bmN0aW9uIElRZSgpe0NtLmNhbGwodGhpcyl9ZnVuY3Rpb24gWUkoKXtDbS5jYWxsKHRoaXMpfWZ1bmN0aW9uIHBsKCl7Q20uY2FsbCh0aGlzKX1mdW5jdGlvbiBTOCgpe0NtLmNhbGwodGhpcyl9ZnVuY3Rpb24gUXIoKXtDbS5jYWxsKHRoaXMpfWZ1bmN0aW9uIFhoKCl7Q20uY2FsbCh0aGlzKX1mdW5jdGlvbiBPUWUoKXtDbS5jYWxsKHRoaXMpfWZ1bmN0aW9uIF9jKCl7Q20uY2FsbCh0aGlzKX1mdW5jdGlvbiBOUWUoKXtDbS5jYWxsKHRoaXMpfWZ1bmN0aW9uIFBRZSgpe3RoaXMuYT10aGlzfWZ1bmN0aW9uIEZ6KCl7dGhpcy5CYnw9MjU2fWZ1bmN0aW9uIEJRZSgpe3RoaXMuYj1uZXcgVXR0fWZ1bmN0aW9uIGF5KGUsdCl7ZS5sZW5ndGg9dH1mdW5jdGlvbiBSeihlLHQpe3Z0KGUuYSx0KX1mdW5jdGlvbiBWY24oZSx0KXtKeGUoZS5jLHQpfWZ1bmN0aW9uIFVjbihlLHQpe25hKGUuYix0KX1mdW5jdGlvbiBHY24oZSx0KXtvVShlLmEsdCl9ZnVuY3Rpb24gS2NuKGUsdCl7RmNlKGUuYSx0KX1mdW5jdGlvbiB4ayhlLHQpe05pKGUuZSx0KX1mdW5jdGlvbiBfOChlKXtFVShlLmMsZS5iKX1mdW5jdGlvbiBXY24oZSx0KXtlLmtjKCkuTmIodCl9ZnVuY3Rpb24gQXdlKGUpe3RoaXMuYT0kNG4oZSl9ZnVuY3Rpb24gS3MoKXt0aGlzLmE9bmV3IFByfWZ1bmN0aW9uIEZRZSgpe3RoaXMuYT1uZXcgUHJ9ZnVuY3Rpb24gTHdlKCl7dGhpcy5hPW5ldyBuZXR9ZnVuY3Rpb24ganooKXt0aGlzLmE9bmV3IGJ0fWZ1bmN0aW9uIGppZSgpe3RoaXMuYT1uZXcgYnR9ZnVuY3Rpb24gTXdlKCl7dGhpcy5hPW5ldyBidH1mdW5jdGlvbiBfZigpe3RoaXMuYT1uZXcgcG19ZnVuY3Rpb24gU20oKXt0aGlzLmE9bmV3IE51dH1mdW5jdGlvbiBEd2UoKXt0aGlzLmE9bmV3IGJtfWZ1bmN0aW9uIEl3ZSgpe3RoaXMuYT1uZXcgU290fWZ1bmN0aW9uIE93ZSgpe3RoaXMuYT1uZXcgUnJ0fWZ1bmN0aW9uIFJRZSgpe3RoaXMuYT1uZXcgYnR9ZnVuY3Rpb24galFlKCl7dGhpcy5hPW5ldyBidH1mdW5jdGlvbiAkUWUoKXt0aGlzLmE9bmV3IGJ0fWZ1bmN0aW9uIE53ZSgpe3RoaXMuYT1uZXcgYnR9ZnVuY3Rpb24gelFlKCl7dGhpcy5kPW5ldyBidH1mdW5jdGlvbiBxUWUoKXt0aGlzLmE9bmV3IEdvdH1mdW5jdGlvbiBIUWUoKXt0aGlzLmE9bmV3IEtzfWZ1bmN0aW9uIFZRZSgpe3RoaXMuYT1uZXcgUHJ9ZnVuY3Rpb24gVVFlKCl7dGhpcy5iPW5ldyBQcn1mdW5jdGlvbiBHUWUoKXt0aGlzLmI9bmV3IGJ0fWZ1bmN0aW9uIFB3ZSgpe3RoaXMuZT1uZXcgYnR9ZnVuY3Rpb24gS1FlKCl7dGhpcy5hPW5ldyBLcmV9ZnVuY3Rpb24gV1FlKCl7dGhpcy5kPW5ldyBidH1mdW5jdGlvbiBZUWUoKXtRYXQuY2FsbCh0aGlzKX1mdW5jdGlvbiBYUWUoKXtRYXQuY2FsbCh0aGlzKX1mdW5jdGlvbiBRUWUoKXtidC5jYWxsKHRoaXMpfWZ1bmN0aW9uIEJ3ZSgpe193ZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIEZ3ZSgpe2p6LmNhbGwodGhpcyl9ZnVuY3Rpb24gSlFlKCl7VnEuY2FsbCh0aGlzKX1mdW5jdGlvbiBaUWUoKXtOd2UuY2FsbCh0aGlzKX1mdW5jdGlvbiBzXygpe1RRZS5jYWxsKHRoaXMpfWZ1bmN0aW9uICRpZSgpe3NfLmNhbGwodGhpcyl9ZnVuY3Rpb24gQTgoKXtUUWUuY2FsbCh0aGlzKX1mdW5jdGlvbiBSd2UoKXtBOC5jYWxsKHRoaXMpfWZ1bmN0aW9uIGVKZSgpe3F3ZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIHRKZSgpe3F3ZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIG5KZSgpe3F3ZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIHJKZSgpe0h3ZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIGFfKCl7V25lLmNhbGwodGhpcyl9ZnVuY3Rpb24gandlKCl7V25lLmNhbGwodGhpcyl9ZnVuY3Rpb24gYmwoKXtvcy5jYWxsKHRoaXMpfWZ1bmN0aW9uIGlKZSgpe3dKZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIHNKZSgpe3dKZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIGFKZSgpe1ByLmNhbGwodGhpcyl9ZnVuY3Rpb24gb0plKCl7UHIuY2FsbCh0aGlzKX1mdW5jdGlvbiBjSmUoKXtQci5jYWxsKHRoaXMpfWZ1bmN0aW9uIHppZSgpe3NmdC5jYWxsKHRoaXMpfWZ1bmN0aW9uIHVKZSgpe0tzLmNhbGwodGhpcyl9ZnVuY3Rpb24gbEplKCl7RnouY2FsbCh0aGlzKX1mdW5jdGlvbiBxaWUoKXtreWUuY2FsbCh0aGlzKX1mdW5jdGlvbiAkd2UoKXtQci5jYWxsKHRoaXMpfWZ1bmN0aW9uIEhpZSgpe2t5ZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIFZpZSgpe1ByLmNhbGwodGhpcyl9ZnVuY3Rpb24gaEplKCl7UHIuY2FsbCh0aGlzKX1mdW5jdGlvbiB6d2UoKXttNS5jYWxsKHRoaXMpfWZ1bmN0aW9uIGZKZSgpe3p3ZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIGRKZSgpe201LmNhbGwodGhpcyl9ZnVuY3Rpb24gZ0plKCl7SiQuY2FsbCh0aGlzKX1mdW5jdGlvbiBxd2UoKXt0aGlzLmE9bmV3IEtzfWZ1bmN0aW9uIHBKZSgpe3RoaXMuYT1uZXcgUHJ9ZnVuY3Rpb24gYkplKCl7dGhpcy5hPW5ldyBidH1mdW5jdGlvbiBId2UoKXt0aGlzLmE9bmV3IFByfWZ1bmN0aW9uIEw4KCl7dGhpcy5hPW5ldyBvc31mdW5jdGlvbiBtSmUoKXt0aGlzLmo9bmV3IGJ0fWZ1bmN0aW9uIHZKZSgpe3RoaXMuYT1uZXcgYlplfWZ1bmN0aW9uIHdKZSgpe3RoaXMuYT1uZXcgUW5lfWZ1bmN0aW9uIFZ3ZSgpe3RoaXMuYT1uZXcgaHN9ZnVuY3Rpb24gb18oKXtvXz1VLHYwZT1uZXcgX31mdW5jdGlvbiBVaWUoKXtVaWU9VSx3MGU9bmV3IHhKZX1mdW5jdGlvbiBHaWUoKXtHaWU9VSx5MGU9bmV3IHlKZX1mdW5jdGlvbiB5SmUoKXtway5jYWxsKHRoaXMsIiIpfWZ1bmN0aW9uIHhKZSgpe3BrLmNhbGwodGhpcywiIil9ZnVuY3Rpb24ga0plKGUpe0FodC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gRUplKGUpe0FodC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gVXdlKGUpe3Z6LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBHd2UoZSl7VVplLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBZY24oZSl7VVplLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBYY24oZSl7R3dlLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBRY24oZSl7R3dlLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBKY24oZSl7R3dlLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBUSmUoZSl7VG9lLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBDSmUoZSl7VG9lLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBTSmUoZSl7YWl0LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBfSmUoZSl7cDNlLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBjXyhlKXtYei5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gS3dlKGUpe1h6LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBBSmUoZSl7WHouY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIFd3ZShlKXt5OW4uY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIFl3ZShlKXtXd2UuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIEFjKGUpe19zdC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gTEplKGUpe0FjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBNOCgpe3drLmNhbGwodGhpcyx7fSl9ZnVuY3Rpb24gTUplKCl7TUplPVUsZDZ0PW5ldyBXfWZ1bmN0aW9uICR6KCl7JHo9VSxFMGU9bmV3IEFudH1mdW5jdGlvbiBESmUoKXtESmU9VSxVU2U9bmV3IFR9ZnVuY3Rpb24gWHdlKCl7WHdlPVUsR1NlPW5ldyBhZX1mdW5jdGlvbiB6eigpe3p6PVUsTkw9bmV3IGRlfWZ1bmN0aW9uIEtpZShlKXtPaygpLHRoaXMuYT1lfWZ1bmN0aW9uIFdpZShlKXtFN2UoKSx0aGlzLmE9ZX1mdW5jdGlvbiBKdihlKXtJYWUoKSx0aGlzLmY9ZX1mdW5jdGlvbiBZaWUoZSl7SWFlKCksdGhpcy5mPWV9ZnVuY3Rpb24gSUplKGUpe2dpdCgpLHRoaXMuYT1lfWZ1bmN0aW9uIE9KZShlKXtlLmI9bnVsbCxlLmM9MH1mdW5jdGlvbiBaY24oZSx0KXtlLmU9dCxnYnQoZSx0KX1mdW5jdGlvbiBldW4oZSx0KXtlLmE9dCxva24oZSl9ZnVuY3Rpb24gWGllKGUsdCxuKXtlLmFbdC5nXT1ufWZ1bmN0aW9uIHR1bihlLHQsbil7azhuKG4sZSx0KX1mdW5jdGlvbiBudW4oZSx0KXtRZm4odC5pLGUubil9ZnVuY3Rpb24gTkplKGUsdCl7eHluKGUpLkNkKHQpfWZ1bmN0aW9uIHJ1bihlLHQpe2UuYS5lYygpLk1jKHQpfWZ1bmN0aW9uIFBKZShlLHQpe3JldHVybiBlLmctdC5nfWZ1bmN0aW9uIGl1bihlLHQpe3JldHVybiBlKmUvdH1mdW5jdGlvbiBSdChlKXtyZXR1cm4gbnIoZSksZX1mdW5jdGlvbiB6ZShlKXtyZXR1cm4gbnIoZSksZX1mdW5jdGlvbiBYSShlKXtyZXR1cm4gbnIoZSksZX1mdW5jdGlvbiBzdW4oZSl7cmV0dXJuIG5ldyB2ayhlKX1mdW5jdGlvbiBhdW4oZSl7cmV0dXJuIG5ldyB5eShlKX1mdW5jdGlvbiBRd2UoZSl7cmV0dXJuIG5yKGUpLGV9ZnVuY3Rpb24gb3VuKGUpe3JldHVybiBucihlKSxlfWZ1bmN0aW9uIHF6KGUpe0FjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiB0YyhlKXtBYy5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gQkplKGUpe0FjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBRaWUoZSl7X3N0LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBrayhlKXtBYy5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gWW4oZSl7QWMuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIG5jKGUpe0FjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBGSmUoZSl7QWMuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIEQ4KGUpe0FjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBIcChlKXtBYy5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gVnAoZSl7QWMuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIEk4KGUpe0FjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBkZChlKXtBYy5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gSmllKGUpe0FjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiByaShlKXtBYy5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gSWwoZSl7bnIoZSksdGhpcy5hPWV9ZnVuY3Rpb24gSndlKGUpe3JldHVybiBVbShlKSxlfWZ1bmN0aW9uIHVfKGUpe2w1ZShlLGUubGVuZ3RoKX1mdW5jdGlvbiBsXyhlKXtyZXR1cm4gZS5iPT1lLmN9ZnVuY3Rpb24gb3koZSl7cmV0dXJuISFlJiZlLmJ9ZnVuY3Rpb24gY3VuKGUpe3JldHVybiEhZSYmZS5rfWZ1bmN0aW9uIHV1bihlKXtyZXR1cm4hIWUmJmUuan1mdW5jdGlvbiBsdW4oZSx0LG4pe2UuYy5FZih0LG4pfWZ1bmN0aW9uIFJKZShlLHQpe2UuYmUodCksdC5hZShlKX1mdW5jdGlvbiBPOChlKXt3ZCgpLHRoaXMuYT1YcihlKX1mdW5jdGlvbiBaaWUoKXt0aGlzLmE9ZWkoWHIoQ28pKX1mdW5jdGlvbiBqSmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIGh1bigpe3Rocm93IHVlKG5ldyBRcil9ZnVuY3Rpb24gWndlKCl7dGhyb3cgdWUobmV3IFFyKX1mdW5jdGlvbiAkSmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIGZ1bigpe3Rocm93IHVlKG5ldyBRcil9ZnVuY3Rpb24gZHVuKCl7dGhyb3cgdWUobmV3IFFyKX1mdW5jdGlvbiBIeigpe0h6PVUsWGsoKX1mdW5jdGlvbiBVcCgpe05yLmNhbGwodGhpcywiIil9ZnVuY3Rpb24gaF8oKXtOci5jYWxsKHRoaXMsIiIpfWZ1bmN0aW9uIHRiKCl7TnIuY2FsbCh0aGlzLCIiKX1mdW5jdGlvbiBTNSgpe05yLmNhbGwodGhpcywiIil9ZnVuY3Rpb24gZTNlKGUpe3RjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiB0M2UoZSl7dGMuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIGdkKGUpe1luLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBFayhlKXskYS5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gekplKGUpe0VrLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBlc2UoZSl7anEuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIHRzZShlKXtOeWUuY2FsbCh0aGlzLGUsMCl9ZnVuY3Rpb24gbnNlKCl7RzVlLmNhbGwodGhpcywxMiwzKX1mdW5jdGlvbiBsZShlLHQpe3JldHVybiB5b3QoZSx0KX1mdW5jdGlvbiBWeihlLHQpe3JldHVybiBqb2UoZSx0KX1mdW5jdGlvbiBndW4oZSx0KXtyZXR1cm4gZS5hLXQuYX1mdW5jdGlvbiBwdW4oZSx0KXtyZXR1cm4gZS5hLXQuYX1mdW5jdGlvbiBidW4oZSx0KXtyZXR1cm4gZS5hLXQuYX1mdW5jdGlvbiBtdW4oZSx0KXtyZXR1cm4gdCBpbiBlLmF9ZnVuY3Rpb24gcUplKGUpe3JldHVybiBlLmE/ZS5iOjB9ZnVuY3Rpb24gdnVuKGUpe3JldHVybiBlLmE/ZS5iOjB9ZnVuY3Rpb24gd3VuKGUsdCxuKXt0LkNkKGUuYVtuXSl9ZnVuY3Rpb24geXVuKGUsdCxuKXt0LlBlKGUuYVtuXSl9ZnVuY3Rpb24geHVuKGUsdCl7ZS5iPW5ldyBFbyh0KX1mdW5jdGlvbiBrdW4oZSx0KXtyZXR1cm4gZS5iPXQsZX1mdW5jdGlvbiBISmUoZSx0KXtyZXR1cm4gZS5jPXQsZX1mdW5jdGlvbiBWSmUoZSx0KXtyZXR1cm4gZS5mPXQsZX1mdW5jdGlvbiBFdW4oZSx0KXtyZXR1cm4gZS5nPXQsZX1mdW5jdGlvbiBuM2UoZSx0KXtyZXR1cm4gZS5hPXQsZX1mdW5jdGlvbiByM2UoZSx0KXtyZXR1cm4gZS5mPXQsZX1mdW5jdGlvbiBUdW4oZSx0KXtyZXR1cm4gZS5rPXQsZX1mdW5jdGlvbiBpM2UoZSx0KXtyZXR1cm4gZS5hPXQsZX1mdW5jdGlvbiBDdW4oZSx0KXtyZXR1cm4gZS5lPXQsZX1mdW5jdGlvbiBzM2UoZSx0KXtyZXR1cm4gZS5lPXQsZX1mdW5jdGlvbiBTdW4oZSx0KXtyZXR1cm4gZS5mPXQsZX1mdW5jdGlvbiBfdW4oZSx0KXtlLmI9ITAsZS5kPXR9ZnVuY3Rpb24gQXVuKGUsdCl7cmV0dXJuIGUuYi10LmJ9ZnVuY3Rpb24gTHVuKGUsdCl7cmV0dXJuIGUuZy10Lmd9ZnVuY3Rpb24gTXVuKGUsdCl7cmV0dXJuIGU/MDp0LTF9ZnVuY3Rpb24gVUplKGUsdCl7cmV0dXJuIGU/MDp0LTF9ZnVuY3Rpb24gRHVuKGUsdCl7cmV0dXJuIGU/dC0xOjB9ZnVuY3Rpb24gSXVuKGUsdCl7cmV0dXJuIGUucy10LnN9ZnVuY3Rpb24gT3VuKGUsdCl7cmV0dXJuIHQucmcoZSl9ZnVuY3Rpb24gWnYoZSx0KXtyZXR1cm4gZS5iPXQsZX1mdW5jdGlvbiBVeihlLHQpe3JldHVybiBlLmE9dCxlfWZ1bmN0aW9uIGV3KGUsdCl7cmV0dXJuIGUuYz10LGV9ZnVuY3Rpb24gdHcoZSx0KXtyZXR1cm4gZS5kPXQsZX1mdW5jdGlvbiBudyhlLHQpe3JldHVybiBlLmU9dCxlfWZ1bmN0aW9uIGEzZShlLHQpe3JldHVybiBlLmY9dCxlfWZ1bmN0aW9uIGZfKGUsdCl7cmV0dXJuIGUuYT10LGV9ZnVuY3Rpb24gVGsoZSx0KXtyZXR1cm4gZS5iPXQsZX1mdW5jdGlvbiBDayhlLHQpe3JldHVybiBlLmM9dCxlfWZ1bmN0aW9uIFF0KGUsdCl7cmV0dXJuIGUuYz10LGV9ZnVuY3Rpb24geW4oZSx0KXtyZXR1cm4gZS5iPXQsZX1mdW5jdGlvbiBKdChlLHQpe3JldHVybiBlLmQ9dCxlfWZ1bmN0aW9uIFp0KGUsdCl7cmV0dXJuIGUuZT10LGV9ZnVuY3Rpb24gTnVuKGUsdCl7cmV0dXJuIGUuZj10LGV9ZnVuY3Rpb24gZW4oZSx0KXtyZXR1cm4gZS5nPXQsZX1mdW5jdGlvbiB0bihlLHQpe3JldHVybiBlLmE9dCxlfWZ1bmN0aW9uIG5uKGUsdCl7cmV0dXJuIGUuaT10LGV9ZnVuY3Rpb24gcm4oZSx0KXtyZXR1cm4gZS5qPXQsZX1mdW5jdGlvbiBQdW4oZSx0KXtDYigpLE1jKHQsZSl9ZnVuY3Rpb24gQnVuKGUsdCxuKXtKZG4oZS5hLHQsbil9ZnVuY3Rpb24gR3ooZSl7ZGFlLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBHSmUoZSl7dDVuLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBLSmUoZSl7QWF0LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBvM2UoZSl7QWF0LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBuYihlKXtMdy5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gV0plKGUpe25vZS5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gWUplKGUpe25vZS5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gWEplKCl7YnllLmNhbGwodGhpcywiIil9ZnVuY3Rpb24gcWEoKXt0aGlzLmE9MCx0aGlzLmI9MH1mdW5jdGlvbiBRSmUoKXt0aGlzLmI9MCx0aGlzLmE9MH1mdW5jdGlvbiBKSmUoZSx0KXtlLmI9MCxNeShlLHQpfWZ1bmN0aW9uIFpKZShlLHQpe3JldHVybiBlLms9dCxlfWZ1bmN0aW9uIEZ1bihlLHQpe3JldHVybiBlLmo9dCxlfWZ1bmN0aW9uIFJ1bihlLHQpe2UuYz10LGUuYj0hMH1mdW5jdGlvbiBlWmUoKXtlWmU9VSxTNnQ9WThuKCl9ZnVuY3Rpb24gcmIoKXtyYj1VLHdfdD1hOG4oKX1mdW5jdGlvbiB0WmUoKXt0WmU9VSxMYT12eG4oKX1mdW5jdGlvbiBjM2UoKXtjM2U9VSxRYj1oRSgpfWZ1bmN0aW9uIFNrKCl7U2s9VSxBUGU9bzhuKCl9ZnVuY3Rpb24gblplKCl7blplPVUsckF0PWM4bigpfWZ1bmN0aW9uIHUzZSgpe3UzZT1VLHR1PWlrbigpfWZ1bmN0aW9uIEswKGUpe3JldHVybiBlLmUmJmUuZSgpfWZ1bmN0aW9uIHJaZShlKXtyZXR1cm4gZS5sfGUubTw8MjJ9ZnVuY3Rpb24gaVplKGUsdCl7cmV0dXJuIGUuYy5fYih0KX1mdW5jdGlvbiBzWmUoZSx0KXtyZXR1cm4gaTF0KGUuYix0KX1mdW5jdGlvbiByc2UoZSl7cmV0dXJuIGU/ZS5kOm51bGx9ZnVuY3Rpb24ganVuKGUpe3JldHVybiBlP2UuZzpudWxsfWZ1bmN0aW9uICR1bihlKXtyZXR1cm4gZT9lLmk6bnVsbH1mdW5jdGlvbiBfbShlKXtyZXR1cm4gR2coZSksZS5vfWZ1bmN0aW9uIF81KGUsdCl7cmV0dXJuIGUuYSs9dCxlfWZ1bmN0aW9uIGlzZShlLHQpe3JldHVybiBlLmErPXQsZX1mdW5jdGlvbiBHcChlLHQpe3JldHVybiBlLmErPXQsZX1mdW5jdGlvbiBydyhlLHQpe3JldHVybiBlLmErPXQsZX1mdW5jdGlvbiBsM2UoZSx0KXtmb3IoO2UuQmQodCk7KTt9ZnVuY3Rpb24gS3ooZSl7dGhpcy5hPW5ldyBOOChlKX1mdW5jdGlvbiBhWmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIG9aZSgpe3Rocm93IHVlKG5ldyBRcil9ZnVuY3Rpb24gY1plKCl7dGhyb3cgdWUobmV3IFFyKX1mdW5jdGlvbiB1WmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIGxaZSgpe3Rocm93IHVlKG5ldyBRcil9ZnVuY3Rpb24gaFplKCl7dGhyb3cgdWUobmV3IFFyKX1mdW5jdGlvbiBLcChlKXt0aGlzLmE9bmV3IFBhZShlKX1mdW5jdGlvbiBmWmUoKXt0aGlzLmE9bmV3IFVBKEVJZSl9ZnVuY3Rpb24gZFplKCl7dGhpcy5iPW5ldyBVQShxRGUpfWZ1bmN0aW9uIGdaZSgpe3RoaXMuYT1uZXcgVUEoS0llKX1mdW5jdGlvbiBwWmUoKXt0aGlzLmI9bmV3IFVBKHBnZSl9ZnVuY3Rpb24gYlplKCl7dGhpcy5iPW5ldyBVQShwZ2UpfWZ1bmN0aW9uIFd6KGUpe3RoaXMuYT0wLHRoaXMuYj1lfWZ1bmN0aW9uIGgzZShlKXtHdnQoKSxJSW4odGhpcyxlKX1mdW5jdGlvbiBfayhlKXtyZXR1cm4gZmIoZSksZS5hfWZ1bmN0aW9uIFFJKGUpe3JldHVybiBlLmIhPWUuZC5jfWZ1bmN0aW9uIGYzZShlLHQpe3JldHVybiBlLmRbdC5wXX1mdW5jdGlvbiBtWmUoZSx0KXtyZXR1cm4gWUNuKGUsdCl9ZnVuY3Rpb24gZDNlKGUsdCxuKXtlLnNwbGljZSh0LG4pfWZ1bmN0aW9uIEE1KGUsdCl7Zm9yKDtlLlJlKHQpOyk7fWZ1bmN0aW9uIHZaZShlKXtlLmM/SWJ0KGUpOk9idChlKX1mdW5jdGlvbiB3WmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIHlaZSgpe3Rocm93IHVlKG5ldyBRcil9ZnVuY3Rpb24geFplKCl7dGhyb3cgdWUobmV3IFFyKX1mdW5jdGlvbiBrWmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIEVaZSgpe3Rocm93IHVlKG5ldyBRcil9ZnVuY3Rpb24gVFplKCl7dGhyb3cgdWUobmV3IFFyKX1mdW5jdGlvbiBDWmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIFNaZSgpe3Rocm93IHVlKG5ldyBRcil9ZnVuY3Rpb24gX1plKCl7dGhyb3cgdWUobmV3IFFyKX1mdW5jdGlvbiBBWmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIHp1bigpe3Rocm93IHVlKG5ldyBfYyl9ZnVuY3Rpb24gcXVuKCl7dGhyb3cgdWUobmV3IF9jKX1mdW5jdGlvbiBKSShlKXt0aGlzLmE9bmV3IExaZShlKX1mdW5jdGlvbiBMWmUoZSl7R3duKHRoaXMsZSxUOW4oKSl9ZnVuY3Rpb24gWkkoZSl7cmV0dXJuIWV8fG9hdChlKX1mdW5jdGlvbiBlTyhlKXtyZXR1cm4gbmRbZV0hPS0xfWZ1bmN0aW9uIEh1bigpe2FLIT0wJiYoYUs9MCksb0s9LTF9ZnVuY3Rpb24gTVplKCl7bTBlPT1udWxsJiYobTBlPVtdKX1mdW5jdGlvbiB0TyhlLHQpe3E1LmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIEFrKGUsdCl7dE8uY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gRFplKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gSVplKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gT1plKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gTlplKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gUFplKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gQlplKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gRlplKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gTGsoZSx0KXt0aGlzLmU9ZSx0aGlzLmQ9dH1mdW5jdGlvbiBnM2UoZSx0KXt0aGlzLmI9ZSx0aGlzLmM9dH1mdW5jdGlvbiBSWmUoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiBqWmUoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiAkWmUoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiB6WmUoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiBxWmUoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBzc2UoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBIWmUoZSx0KXt0aGlzLmE9ZSx0aGlzLmY9dH1mdW5jdGlvbiBpdyhlLHQpe3RoaXMuZz1lLHRoaXMuaT10fWZ1bmN0aW9uIFVyKGUsdCl7dGhpcy5mPWUsdGhpcy5nPXR9ZnVuY3Rpb24gVlplKGUsdCl7dGhpcy5iPWUsdGhpcy5jPXR9ZnVuY3Rpb24gVVplKGUpe1R5ZShlLmRjKCkpLHRoaXMuYz1lfWZ1bmN0aW9uIFZ1bihlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIEdaZShlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIEtaZShlKXt0aGlzLmE9bChYcihlKSwxNSl9ZnVuY3Rpb24gcDNlKGUpe3RoaXMuYT1sKFhyKGUpLDE1KX1mdW5jdGlvbiBXWmUoZSl7dGhpcy5hPWwoWHIoZSksODUpfWZ1bmN0aW9uIFl6KGUpe3RoaXMuYj1sKFhyKGUpLDg1KX1mdW5jdGlvbiBYeihlKXt0aGlzLmI9bChYcihlKSw1MSl9ZnVuY3Rpb24gUXooKXt0aGlzLnE9bmV3IGIuRGF0ZX1mdW5jdGlvbiBhc2UoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBZWmUoZSx0KXtyZXR1cm4gSHUoZS5iLHQpfWZ1bmN0aW9uIG5PKGUsdCl7cmV0dXJuIGUuYi5IYyh0KX1mdW5jdGlvbiBYWmUoZSx0KXtyZXR1cm4gZS5iLkljKHQpfWZ1bmN0aW9uIFFaZShlLHQpe3JldHVybiBlLmIuUWModCl9ZnVuY3Rpb24gSlplKGUsdCl7cmV0dXJuIGUuYi5IYyh0KX1mdW5jdGlvbiBaWmUoZSx0KXtyZXR1cm4gZS5jLnVjKHQpfWZ1bmN0aW9uIGVldChlLHQpe3JldHVybiBQaShlLmMsdCl9ZnVuY3Rpb24gVzAoZSx0KXtyZXR1cm4gZS5hLl9iKHQpfWZ1bmN0aW9uIHRldChlLHQpe3JldHVybiBlPnQmJnQ8ckx9ZnVuY3Rpb24gZF8oZSl7cmV0dXJuIGUuZi5jK2UuaS5jfWZ1bmN0aW9uIFV1bihlKXtyZXR1cm4gR3N0KCksZT9mNnQ6aDZ0fWZ1bmN0aW9uIE44KGUpe3AwdC5jYWxsKHRoaXMsZSwwKX1mdW5jdGlvbiBuZXQoKXtQYWUuY2FsbCh0aGlzLG51bGwpfWZ1bmN0aW9uIFA4KGUpe3RoaXMuYz1lLHJodCh0aGlzKX1mdW5jdGlvbiBvcygpe2tudCh0aGlzKSxDaCh0aGlzKX1mdW5jdGlvbiBWZygpe1ZnPVUsbTZ0PW5ldyBGZX1mdW5jdGlvbiBNaygpe01rPVUsQVQ9bmV3IEllfWZ1bmN0aW9uIGN5KCl7Y3k9VSxJMGU9bmV3IEh0dH1mdW5jdGlvbiBKeigpe0p6PVUsQTZ0PW5ldyBWdHR9ZnVuY3Rpb24gRGsoKXtEaz1VLHdfZT1uZXcgUWV9ZnVuY3Rpb24gYjNlKCl7UG9lLmNhbGwodGhpcyxudWxsKX1mdW5jdGlvbiBBbSgpe0FtPVUseng9bmV3IGZufWZ1bmN0aW9uIElzKGUsdCl7ZmIoZSksZS5hLk5iKHQpfWZ1bmN0aW9uIEd1bihlLHQpe3JldHVybiBlLmEuWGModCl9ZnVuY3Rpb24gS3VuKGUsdCl7cmV0dXJuIGUuYS5ZYyh0KX1mdW5jdGlvbiBvc2UoZSx0KXtyZXR1cm4gZS5hLiRjKHQpfWZ1bmN0aW9uIGNzZShlLHQpe3JldHVybiBlLmEuX2ModCl9ZnVuY3Rpb24gV3VuKGUsdCl7cmV0dXJuIGUuR2ModCksZX1mdW5jdGlvbiBZdW4oZSx0KXtyZXR1cm4gS2EoZSx0KSxlfWZ1bmN0aW9uIFh1bihlLHQpe1Z1ZSh0dChlLmEpLHQpfWZ1bmN0aW9uIFF1bihlLHQpe1Z1ZSh0dChlLmEpLHQpfWZ1bmN0aW9uIHJldChlLHQpe3JldHVybiBlLkdjKHQpLGV9ZnVuY3Rpb24gSnVuKGUsdCl7cmV0dXJuIGUuYS5mPXQsZX1mdW5jdGlvbiBpZXQoZSx0KXtyZXR1cm4gZS5hLmQ9dCxlfWZ1bmN0aW9uIHNldChlLHQpe3JldHVybiBlLmEuZz10LGV9ZnVuY3Rpb24gYWV0KGUsdCl7cmV0dXJuIGUuYS5qPXQsZX1mdW5jdGlvbiByMChlLHQpe3JldHVybiBlLmEuYT10LGV9ZnVuY3Rpb24gaTAoZSx0KXtyZXR1cm4gZS5hLmQ9dCxlfWZ1bmN0aW9uIHMwKGUsdCl7cmV0dXJuIGUuYS5lPXQsZX1mdW5jdGlvbiBhMChlLHQpe3JldHVybiBlLmEuZz10LGV9ZnVuY3Rpb24gck8oZSx0KXtyZXR1cm4gZS5hLmY9dCxlfWZ1bmN0aW9uIFp1bihlKXtyZXR1cm4gZS5iPSExLGV9ZnVuY3Rpb24gb2V0KCl7b2V0PVUsUjZ0PW5ldyBQYX1mdW5jdGlvbiBaeigpe1p6PVUsRzBlPW5ldyBncnR9ZnVuY3Rpb24gbTNlKCl7bTNlPVUsazh0PW5ldyBtbX1mdW5jdGlvbiBjZXQoKXtjZXQ9VSxFOHQ9bmV3IEcyfWZ1bmN0aW9uIHYzZSgpe3YzZT1VLFQ4dD1uZXcgcHN0fWZ1bmN0aW9uIHczZSgpe3czZT1VLHBBZT1uZXcgRnB9ZnVuY3Rpb24gdWV0KCl7dWV0PVUsTzh0PW5ldyBxMH1mdW5jdGlvbiBnXygpe2dfPVUsUDh0PW5ldyBRM31mdW5jdGlvbiBpTygpe2lPPVUsajh0PW5ldyBsU31mdW5jdGlvbiBzTygpe3NPPVUsUjh0PW5ldyBxYX1mdW5jdGlvbiBoZXQoKXtoZXQ9VSxIOHQ9bmV3IFlkfWZ1bmN0aW9uIHBfKCl7cF89VSxROHQ9bmV3IHlTfWZ1bmN0aW9uIGVxKCl7ZXE9VSxJNj1uZXcgQ2VlfWZ1bmN0aW9uIHRxKCl7dHE9VSxYa3Q9bmV3ICRuZX1mdW5jdGlvbiBucSgpe25xPVUsYmdlPW5ldyBkZXR9ZnVuY3Rpb24gcnEoKXtycT1VLG1nZT1uZXcgZHJ0fWZ1bmN0aW9uIGJfKCl7Yl89VSxxQj1uZXcgZ2F0fWZ1bmN0aW9uIGZldCgpe0podCgpLHRoaXMuYz1uZXcgbnNlfWZ1bmN0aW9uIGRldCgpe1VyLmNhbGwodGhpcyxXM3QsMCl9ZnVuY3Rpb24gZWxuKGUsdCxuKXtyYyhlLmQsdC5mLG4pfWZ1bmN0aW9uIHRsbihlLHQsbixyKXtENm4oZSxyLHQsbil9ZnVuY3Rpb24gbmxuKGUsdCxuLHIpe25DbihyLGUsdCxuKX1mdW5jdGlvbiBybG4oZSx0LG4scil7SURuKHIsZSx0LG4pfWZ1bmN0aW9uIG1fKGUsdCl7aDIoZS5jLmMsdC5iLHQpfWZ1bmN0aW9uIHN3KGUsdCl7aDIoZS5jLmIsdC5jLHQpfWZ1bmN0aW9uIGlsbihlKXtyZXR1cm4gZS5lLmIrZS5mLmJ9ZnVuY3Rpb24gc2xuKGUpe3JldHVybiBlLmUuYStlLmYuYX1mdW5jdGlvbiBhbG4oZSl7cmV0dXJuIGUuYj9lLmI6ZS5hfWZ1bmN0aW9uIG9sbihlKXtyZXR1cm4oZS5jK2UuYSkvMn1mdW5jdGlvbiBnZXQoZSx0KXtyZXR1cm4gejduKGUuYSx0KX1mdW5jdGlvbiB2XyhlLHQpe3JldHVybiBlLmE9dC5nLGV9ZnVuY3Rpb24geTNlKCl7eTNlPVUsX1BlPW5ldyBoSmV9ZnVuY3Rpb24gcGV0KCl7cGV0PVUsal90PW5ldyBjSmV9ZnVuY3Rpb24gYXcoKXthdz1VLG1fdD1uZXcgem5lfWZ1bmN0aW9uIGJldCgpe2JldD1VLENfdD1uZXcgWW5lfWZ1bmN0aW9uIG1ldCgpe21ldD1VLFJfdD1uZXcgb0plfWZ1bmN0aW9uIGliKCl7aWI9VSxHZj1uZXcgJHdlfWZ1bmN0aW9uIGlxKCl7aXE9VSxrWT1uZXcgUHJ9ZnVuY3Rpb24gd18oKXt3Xz1VLHJwZT1uZXcgU250fWZ1bmN0aW9uIFdwKCl7V3A9VSxkRj1uZXcgX250fWZ1bmN0aW9uIHVzZSgpe3VzZT1VLFpfdD1uZXcgYnJlfWZ1bmN0aW9uIEZvKCl7Rm89VSx0QXQ9bmV3IHY1fWZ1bmN0aW9uIHNiKCl7c2I9VSx0bT1uZXcgWiR9ZnVuY3Rpb24geDNlKCl7eDNlPVUsUlBlPW5ldyBidH1mdW5jdGlvbiBzcShlKXtyZXR1cm4gbChlLDQ0KS5sZCgpfWZ1bmN0aW9uIGxzZShlKXtyZXR1cm4gZS5iPGUuZC5nYygpfWZ1bmN0aW9uIGNsbihlLHQpe3JldHVybiB0LnNwbGl0KGUpfWZ1bmN0aW9uIGhzZShlLHQpe3JldHVybiBpdShlLHQpPjB9ZnVuY3Rpb24gZnNlKGUsdCl7cmV0dXJuIGl1KGUsdCk8MH1mdW5jdGlvbiB2ZXQoZSx0KXtyZXR1cm4gQWFlKGUuYSx0KX1mdW5jdGlvbiB1bG4oZSx0KXt4b3QuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gazNlKGUpe0thZSgpLGFpdC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gRTNlKGUsdCl7Z3N0KGUsZS5sZW5ndGgsdCl9ZnVuY3Rpb24gYU8oZSx0KXtxc3QoZSxlLmxlbmd0aCx0KX1mdW5jdGlvbiB5XyhlLHQpe3JldHVybiBlLmEuZ2V0KHQpfWZ1bmN0aW9uIHdldChlLHQpe3JldHVybiBIdShlLmUsdCl9ZnVuY3Rpb24gVDNlKGUpe3JldHVybiBucihlKSwhMX1mdW5jdGlvbiBDM2UoZSl7dGhpcy5hPWwoWHIoZSksMjI5KX1mdW5jdGlvbiBhcShlKXtrbi5jYWxsKHRoaXMsZSwyMSl9ZnVuY3Rpb24gb3EoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBkc2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB5ZXQoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiBjcShlLHQpe3RoaXMuZD1lLHRoaXMuZT10fWZ1bmN0aW9uIHhldChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIGtldChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIEVldChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIFRldChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIEI4KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gQ2V0KGUsdCl7dGhpcy5iPWUsdGhpcy5hPXR9ZnVuY3Rpb24gUzNlKGUsdCl7dGhpcy5iPWUsdGhpcy5hPXR9ZnVuY3Rpb24gXzNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQTNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gTDUoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBnc2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBwc2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBic2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB1cShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIEwzZShlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIGxxKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gTTNlKGUsdCl7dGhpcy5iPWUsdGhpcy5hPXR9ZnVuY3Rpb24gaHEoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBfZXQoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiBEM2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBtc2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBvTyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHhfKGUsdCxuKXtlLnNwbGljZSh0LDAsbil9ZnVuY3Rpb24gbGxuKGUsdCxuKXtlLk1iKG4pJiZ0LkNkKG4pfWZ1bmN0aW9uIGhsbihlLHQsbil7dC5QZShlLmEuWWUobikpfWZ1bmN0aW9uIGZsbihlLHQsbil7dC5EZChlLmEuWmUobikpfWZ1bmN0aW9uIGRsbihlLHQsbil7dC5DZChlLmEuS2IobikpfWZ1bmN0aW9uIGdsbihlLHQpe3JldHVybiB2bChlLmMsdCl9ZnVuY3Rpb24gcGxuKGUsdCl7cmV0dXJuIHZsKGUuZSx0KX1mdW5jdGlvbiBmcShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIGRxKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24ga18oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBJM2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBXcyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIGdxKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQWV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gTGV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gTWV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gRGV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gSWV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gT2V0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gTmV0KGUsdCl7dGhpcy5iPWUsdGhpcy5hPXR9ZnVuY3Rpb24gUGV0KGUsdCl7dGhpcy5iPWUsdGhpcy5hPXR9ZnVuY3Rpb24gTzNlKGUsdCl7dGhpcy5iPWUsdGhpcy5hPXR9ZnVuY3Rpb24gSWsoZSx0KXt0aGlzLmM9ZSx0aGlzLmQ9dH1mdW5jdGlvbiBCZXQoZSx0KXt0aGlzLmU9ZSx0aGlzLmQ9dH1mdW5jdGlvbiBGZXQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBSZXQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBqZXQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiAkZXQoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiB6ZXQoZSx0KXt0aGlzLmI9dCx0aGlzLmM9ZX1mdW5jdGlvbiBwcShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIGNPKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gdnNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gTjNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gRV8oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB3c2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB5c2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB1TyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIFAzZShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHhzZShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIFRfKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQjNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQ18oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBTXyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHV5KGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24ga3NlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gRXNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gRjNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gbE8oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBNNShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIFRzZShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIGJxKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gaE8oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBseShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIG1xKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gUjNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQ3NlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gU3NlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gX3NlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQXNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gTHNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gTXNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gRHNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gcWV0KGUsdCl7dGhpcy5iPWUsdGhpcy5hPXR9ZnVuY3Rpb24gajNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gSGV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gVmV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gVWV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gJDNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gejNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gR2V0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gYmxuKGUsdCl7cmV0dXJuIGprKCksdCE9ZX1mdW5jdGlvbiBmTyhlKXtyZXR1cm4gbXIoZS5hKSxlLmJ9ZnVuY3Rpb24gSXNlKGUpe3JldHVybiBFRW4oZSxlLmMpLGV9ZnVuY3Rpb24gS2V0KCl7cmV0dXJuIGVaZSgpLG5ldyBTNnR9ZnVuY3Rpb24gV2V0KCl7WXEoKSx0aGlzLmE9bmV3IGk0ZX1mdW5jdGlvbiBZZXQoKXtJVSgpLHRoaXMuYT1uZXcgS3N9ZnVuY3Rpb24gWGV0KCl7Zm9lKCksdGhpcy5iPW5ldyBLc31mdW5jdGlvbiBRZXQoZSx0KXt0aGlzLmI9ZSx0aGlzLmQ9dH1mdW5jdGlvbiBKZXQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBaZXQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBldHQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiB0dHQoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiBxM2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBIM2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB2cShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIG93KGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gT3NlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gd3EoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBWM2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBVM2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBkTyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIEczZShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIE5zZShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHlxKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gUHNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQnNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gRnNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gUnNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gSzNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24ganNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gVzNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gZ08oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiAkc2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBZM2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBwTyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIFgzZShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIG50dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIHJ0dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIGl0dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIHN0dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIFEzZShlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIGF0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIG90dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIGx0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gX18oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBiTyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIEY4KGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQV8oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBtTyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHpzZShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHhxKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gTF8oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBxc2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBrcShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIEQ1KGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gdk8oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBNXyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIERfKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gd08oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBFcShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIEk1KGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gSHNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gY3R0KGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gVHEoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB1dHQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBsdHQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBodHQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBmdHQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBkdHQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBndHQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBjYShlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIHB0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIGJ0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIG10dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIHZ0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIHd0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIHl0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIHh0dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIGt0dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIEV0dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIFR0dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIEN0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIFN0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIENxKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gX3R0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gQXR0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gUjgoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBMdHQoZSx0KXt0aGlzLmY9ZSx0aGlzLmM9dH1mdW5jdGlvbiBKM2UoZSx0KXtyZXR1cm4gdmwoZS5nLHQpfWZ1bmN0aW9uIG1sbihlLHQpe3JldHVybiB2bCh0LmIsZSl9ZnVuY3Rpb24gTXR0KGUsdCl7cmV0dXJuIEtjZShlLmEsdCl9ZnVuY3Rpb24gdmxuKGUsdCl7cmV0dXJuLWUuYi5hZih0KX1mdW5jdGlvbiB3bG4oZSx0KXtlJiZraShsRixlLHQpfWZ1bmN0aW9uIFozZShlLHQpe2UuaT1udWxsLHhWKGUsdCl9ZnVuY3Rpb24geWxuKGUsdCxuKXt4Z3QodCxqdWUoZSxuKSl9ZnVuY3Rpb24geGxuKGUsdCxuKXt4Z3QodCxqdWUoZSxuKSl9ZnVuY3Rpb24ga2xuKGUsdCl7WFRuKGUuYSxsKHQsNTgpKX1mdW5jdGlvbiBEdHQoZSx0KXtHdm4oZS5hLGwodCwxMikpfWZ1bmN0aW9uIFNxKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gSXR0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gT3R0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gTnR0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gUHR0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gQnR0KGUsdCl7dGhpcy5kPWUsdGhpcy5iPXR9ZnVuY3Rpb24gRnR0KGUsdCl7dGhpcy5lPWUsdGhpcy5hPXR9ZnVuY3Rpb24geU8oZSx0KXt0aGlzLmI9ZSx0aGlzLmM9dH1mdW5jdGlvbiBleWUoZSx0KXt0aGlzLmk9ZSx0aGlzLmc9dH1mdW5jdGlvbiB0eWUoZSx0KXt0aGlzLmQ9ZSx0aGlzLmU9dH1mdW5jdGlvbiBFbG4oZSx0KXtvd24obmV3IG9yKGUpLHQpfWZ1bmN0aW9uIF9xKGUpe3JldHVybiBGTihlLmMsZS5iKX1mdW5jdGlvbiBoYyhlKXtyZXR1cm4gZT9lLm1kKCk6bnVsbH1mdW5jdGlvbiBxZShlKXtyZXR1cm4gZT8/bnVsbH1mdW5jdGlvbiBJYShlKXtyZXR1cm4gdHlwZW9mIGU9PT1JbGV9ZnVuY3Rpb24gaHkoZSl7cmV0dXJuIHR5cGVvZiBlPT09Q3h9ZnVuY3Rpb24gZnkoZSl7cmV0dXJuIHR5cGVvZiBlPT09UWtlfWZ1bmN0aW9uIGN3KGUsdCl7cmV0dXJuIGl1KGUsdCk9PTB9ZnVuY3Rpb24gQXEoZSx0KXtyZXR1cm4gaXUoZSx0KT49MH1mdW5jdGlvbiBJXyhlLHQpe3JldHVybiBpdShlLHQpIT0wfWZ1bmN0aW9uIExxKGUsdCl7cmV0dXJuIFQzbihlLktjKCksdCl9ZnVuY3Rpb24gYWIoZSx0KXtyZXR1cm4gZS5SZCgpLlhiKHQpfWZ1bmN0aW9uIFJ0dChlKXtyZXR1cm4gUWwoZSksZS5kLmdjKCl9ZnVuY3Rpb24gTXEoZSl7cmV0dXJuIFZfKGU9PW51bGwpLGV9ZnVuY3Rpb24gT18oZSx0KXtyZXR1cm4gZS5hKz0iIit0LGV9ZnVuY3Rpb24gWG8oZSx0KXtyZXR1cm4gZS5hKz0iIit0LGV9ZnVuY3Rpb24gTl8oZSx0KXtyZXR1cm4gZS5hKz0iIit0LGV9ZnVuY3Rpb24gd3UoZSx0KXtyZXR1cm4gZS5hKz0iIit0LGV9ZnVuY3Rpb24gaGkoZSx0KXtyZXR1cm4gZS5hKz0iIit0LGV9ZnVuY3Rpb24gbnllKGUsdCl7cmV0dXJuIGUuYSs9IiIrdCxlfWZ1bmN0aW9uIFRsbihlKXtyZXR1cm4iIisobnIoZSksZSl9ZnVuY3Rpb24ganR0KGUpe05sKHRoaXMpLGJBKHRoaXMsZSl9ZnVuY3Rpb24gJHR0KCl7VTVlKCksUTRlLmNhbGwodGhpcyl9ZnVuY3Rpb24genR0KGUsdCl7bjVlLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHF0dChlLHQpe241ZS5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBEcShlLHQpe241ZS5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBrbyhlLHQpe0NzKGUsdCxlLmMuYixlLmMpfWZ1bmN0aW9uIE81KGUsdCl7Q3MoZSx0LGUuYSxlLmEuYSl9ZnVuY3Rpb24gcnllKGUpe3JldHVybiBTbihlLDApLG51bGx9ZnVuY3Rpb24gSHR0KCl7dGhpcy5iPTAsdGhpcy5hPSExfWZ1bmN0aW9uIFZ0dCgpe3RoaXMuYj0wLHRoaXMuYT0hMX1mdW5jdGlvbiBVdHQoKXt0aGlzLmI9bmV3IE44KEF5KDEyKSl9ZnVuY3Rpb24gR3R0KCl7R3R0PVUseTd0PUtyKGV1ZSgpKX1mdW5jdGlvbiBLdHQoKXtLdHQ9VSxxOHQ9S3IocmJ0KCkpfWZ1bmN0aW9uIFd0dCgpe1d0dD1VLGhUdD1LcihCZnQoKSl9ZnVuY3Rpb24gaXllKCl7aXllPVUsQ3dlKCksS1NlPW5ldyBQcn1mdW5jdGlvbiBZMChlKXtyZXR1cm4gZS5hPTAsZS5iPTAsZX1mdW5jdGlvbiBZdHQoZSx0KXtyZXR1cm4gZS5hPXQuZysxLGV9ZnVuY3Rpb24gVnNlKGUsdCl7bXkuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gcG4oZSx0KXt2cy5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBONShlLHQpe2V5ZS5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBYdHQoZSx0KXtUTy5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBVc2UoZSx0KXttRS5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB3aShlLHQpe2lxKCksa2koa1ksZSx0KX1mdW5jdGlvbiBRdHQoZSx0KXtlLnEuc2V0VGltZShGbSh0KSl9ZnVuY3Rpb24gQ2xuKGUpe2IuY2xlYXJUaW1lb3V0KGUpfWZ1bmN0aW9uIFNsbihlKXtyZXR1cm4gWHIoZSksbmV3IFBfKGUpfWZ1bmN0aW9uIEp0dChlLHQpe3JldHVybiBxZShlKT09PXFlKHQpfWZ1bmN0aW9uIFp0dChlLHQpe3JldHVybiBlLmEuYS5hLmNjKHQpfWZ1bmN0aW9uIEdzZShlLHQpe3JldHVybiB0ZihlLmEsMCx0KX1mdW5jdGlvbiBzeWUoZSl7cmV0dXJuIExnbihsKGUsNzQpKX1mdW5jdGlvbiBqOChlKXtyZXR1cm4gdWEoKG5yKGUpLGUpKX1mdW5jdGlvbiBfbG4oZSl7cmV0dXJuIHVhKChucihlKSxlKSl9ZnVuY3Rpb24gZW50KGUpe3JldHVybiBxdShlLmwsZS5tLGUuaCl9ZnVuY3Rpb24gYXllKGUsdCl7cmV0dXJuIHJ1KGUuYSx0LmEpfWZ1bmN0aW9uIEFsbihlLHQpe3JldHVybiAkc3QoZS5hLHQuYSl9ZnVuY3Rpb24gTGxuKGUsdCl7cmV0dXJuIFlpKGUuYSx0LmEpfWZ1bmN0aW9uIHBkKGUsdCl7cmV0dXJuIGUuaW5kZXhPZih0KX1mdW5jdGlvbiBNbG4oZSx0KXtyZXR1cm4gZS5qW3QucF09PTJ9ZnVuY3Rpb24gdXcoZSx0KXtyZXR1cm4gZT09dD8wOmU/MTotMX1mdW5jdGlvbiBJcShlKXtyZXR1cm4gZTwxMD8iMCIrZToiIitlfWZ1bmN0aW9uIHdjKGUpe3JldHVybiB0eXBlb2YgZT09PVFrZX1mdW5jdGlvbiBEbG4oZSl7cmV0dXJuIGU9PXMzfHxlPT1vNH1mdW5jdGlvbiBJbG4oZSl7cmV0dXJuIGU9PXMzfHxlPT1hNH1mdW5jdGlvbiB0bnQoZSx0KXtyZXR1cm4gcnUoZS5nLHQuZyl9ZnVuY3Rpb24gb3llKGUpe3JldHVybiBnYyhlLmIuYixlLDApfWZ1bmN0aW9uIG5udCgpe3NILmNhbGwodGhpcywwLDAsMCwwKX1mdW5jdGlvbiBiZCgpe3dyLmNhbGwodGhpcyxuZXcgZTIpfWZ1bmN0aW9uIGN5ZShlLHQpe25FKGUsMCxlLmxlbmd0aCx0KX1mdW5jdGlvbiBPbG4oZSx0KXtyZXR1cm4gdnQoZS5hLHQpLHR9ZnVuY3Rpb24gTmxuKGUsdCl7cmV0dXJuIHUwKCksdC5hKz1lfWZ1bmN0aW9uIFBsbihlLHQpe3JldHVybiB1MCgpLHQuYSs9ZX1mdW5jdGlvbiBCbG4oZSx0KXtyZXR1cm4gdTAoKSx0LmMrPWV9ZnVuY3Rpb24gRmxuKGUsdCl7cmV0dXJuIHZ0KGUuYyx0KSxlfWZ1bmN0aW9uIHV5ZShlLHQpe3JldHVybiBEaChlLmEsdCksZX1mdW5jdGlvbiBybnQoZSl7dGhpcy5hPUtldCgpLHRoaXMuYj1lfWZ1bmN0aW9uIGludChlKXt0aGlzLmE9S2V0KCksdGhpcy5iPWV9ZnVuY3Rpb24gRW8oZSl7dGhpcy5hPWUuYSx0aGlzLmI9ZS5ifWZ1bmN0aW9uIFBfKGUpe3RoaXMuYT1lLEdTLmNhbGwodGhpcyl9ZnVuY3Rpb24gc250KGUpe3RoaXMuYT1lLEdTLmNhbGwodGhpcyl9ZnVuY3Rpb24gJDgoKXtlZi5jYWxsKHRoaXMsMCwwLDAsMCl9ZnVuY3Rpb24gT3EoZSl7cmV0dXJuIERoKG5ldyBYcyxlKX1mdW5jdGlvbiBhbnQoZSl7cmV0dXJuIEVIKGwoZSwxMjMpKX1mdW5jdGlvbiBoaChlKXtyZXR1cm4gZS52aCgpJiZlLndoKCl9ZnVuY3Rpb24gUDUoZSl7cmV0dXJuIGUhPVoxJiZlIT1XYn1mdW5jdGlvbiBVZyhlKXtyZXR1cm4gZT09dWN8fGU9PXZjfWZ1bmN0aW9uIEI1KGUpe3JldHVybiBlPT13Znx8ZT09UTF9ZnVuY3Rpb24gb250KGUpe3JldHVybiBlPT1HNnx8ZT09VTZ9ZnVuY3Rpb24gUmxuKGUsdCl7cmV0dXJuIHJ1KGUuZyx0LmcpfWZ1bmN0aW9uIGNudChlLHQpe3JldHVybiBuZXcgbUUodCxlKX1mdW5jdGlvbiBqbG4oZSx0KXtyZXR1cm4gbmV3IG1FKHQsZSl9ZnVuY3Rpb24gbHllKGUpe3JldHVybiBhZG4oZS5iLktjKCksZS5hKX1mdW5jdGlvbiBLc2UoZSx0KXtDRShlLHQpLGxFKGUsZS5EKX1mdW5jdGlvbiBXc2UoZSx0LG4pe2RWKGUsdCksZlYoZSxuKX1mdW5jdGlvbiBGNShlLHQsbil7RHcoZSx0KSxNdyhlLG4pfWZ1bmN0aW9uIFFoKGUsdCxuKXtVdShlLHQpLEd1KGUsbil9ZnVuY3Rpb24geE8oZSx0LG4pe2FFKGUsdCksY0UoZSxuKX1mdW5jdGlvbiBrTyhlLHQsbil7b0UoZSx0KSx1RShlLG4pfWZ1bmN0aW9uIHVudChlLHQsbil7R3llLmNhbGwodGhpcyxlLHQsbil9ZnVuY3Rpb24gaHllKGUpe0x0dC5jYWxsKHRoaXMsZSwhMCl9ZnVuY3Rpb24gbG50KCl7b3EuY2FsbCh0aGlzLCJUYWlsIiwzKX1mdW5jdGlvbiBobnQoKXtvcS5jYWxsKHRoaXMsIkhlYWQiLDEpfWZ1bmN0aW9uIG9iKGUpe0NkKCkseTNuLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBsdyhlKXtzSC5jYWxsKHRoaXMsZSxlLGUsZSl9ZnVuY3Rpb24gWXNlKGUpe2UuYz1XZSh3YSxSbiwxLDAsNSwxKX1mdW5jdGlvbiBmeWUoZSl7cmV0dXJuIGUuYiYmZ2xlKGUpLGUuYX1mdW5jdGlvbiBkeWUoZSl7cmV0dXJuIGUuYiYmZ2xlKGUpLGUuY31mdW5jdGlvbiAkbG4oZSx0KXtHMXx8KGUuYj10KX1mdW5jdGlvbiB6bG4oZSx0KXtyZXR1cm4gZVtlLmxlbmd0aF09dH1mdW5jdGlvbiBxbG4oZSx0KXtyZXR1cm4gZVtlLmxlbmd0aF09dH1mdW5jdGlvbiBIbG4oZSx0KXtyZXR1cm4gTHkodCxNMShlKSl9ZnVuY3Rpb24gVmxuKGUsdCl7cmV0dXJuIEx5KHQsTTEoZSkpfWZ1bmN0aW9uIFVsbihlLHQpe3JldHVybiB2VihVYWUoZS5kKSx0KX1mdW5jdGlvbiBHbG4oZSx0KXtyZXR1cm4gdlYoVWFlKGUuZyksdCl9ZnVuY3Rpb24gS2xuKGUsdCl7cmV0dXJuIHZWKFVhZShlLmopLHQpfWZ1bmN0aW9uIEhhKGUsdCl7dnMuY2FsbCh0aGlzLGUuYix0KX1mdW5jdGlvbiBXbG4oZSx0KXtxcihkdShlLmEpLElvdCh0KSl9ZnVuY3Rpb24gWWxuKGUsdCl7cXIoWGwoZS5hKSxPb3QodCkpfWZ1bmN0aW9uIFhsbihlLHQsbil7UWgobixuLmkrZSxuLmordCl9ZnVuY3Rpb24gZm50KGUsdCxuKXtUcyhlLmNbdC5nXSx0Lmcsbil9ZnVuY3Rpb24gUWxuKGUsdCxuKXtsKGUuYyw3MSkuR2kodCxuKX1mdW5jdGlvbiBYc2UoZSx0LG4pe3JldHVybiBUcyhlLHQsbiksbn1mdW5jdGlvbiBkbnQoZSl7VnUoZS5TZigpLG5ldyBNaWUoZSkpfWZ1bmN0aW9uIFI1KGUpe3JldHVybiBlIT1udWxsP2VzKGUpOjB9ZnVuY3Rpb24gSmxuKGUpe3JldHVybiBlPT1udWxsPzA6ZXMoZSl9ZnVuY3Rpb24gQl8oZSl7RGkoKSxYdi5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gZ250KGUpe3RoaXMuYT1lLF80ZS5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gQTEoKXtBMT1VLGIuTWF0aC5sb2coMil9ZnVuY3Rpb24gSmgoKXtKaD1VLFNnPShiZXQoKSxDX3QpfWZ1bmN0aW9uIHBudCgpe3BudD1VLE1kZT1uZXcgTEEoVmdlKX1mdW5jdGlvbiBKcigpe0pyPVUsbmV3IGJudCxuZXcgYnR9ZnVuY3Rpb24gYm50KCl7bmV3IFByLG5ldyBQcixuZXcgUHJ9ZnVuY3Rpb24gWmxuKCl7dGhyb3cgdWUobmV3IEhwKFE1dCkpfWZ1bmN0aW9uIGVobigpe3Rocm93IHVlKG5ldyBIcChRNXQpKX1mdW5jdGlvbiB0aG4oKXt0aHJvdyB1ZShuZXcgSHAoSjV0KSl9ZnVuY3Rpb24gbmhuKCl7dGhyb3cgdWUobmV3IEhwKEo1dCkpfWZ1bmN0aW9uIFFzZShlKXt0aGlzLmE9ZSxZei5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gSnNlKGUpe3RoaXMuYT1lLFl6LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBtbnQoZSx0KXt3dygpLHRoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIHJobihlLHQpe1hyKHQpLFY1KGUpLkpjKG5ldyBpZSl9ZnVuY3Rpb24gVnMoZSx0KXtMYWUoZS5jLGUuYy5sZW5ndGgsdCl9ZnVuY3Rpb24gTGMoZSl7cmV0dXJuIGUuYTxlLmMuYy5sZW5ndGh9ZnVuY3Rpb24gZ3llKGUpe3JldHVybiBlLmE8ZS5jLmEubGVuZ3RofWZ1bmN0aW9uIHZudChlLHQpe3JldHVybiBlLmE/ZS5iOnQuV2UoKX1mdW5jdGlvbiBydShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6MH1mdW5jdGlvbiBweWUoZSx0KXtyZXR1cm4gaXUoZSx0KT4wP2U6dH1mdW5jdGlvbiBxdShlLHQsbil7cmV0dXJue2w6ZSxtOnQsaDpufX1mdW5jdGlvbiBpaG4oZSx0KXtlLmEhPW51bGwmJkR0dCh0LGUuYSl9ZnVuY3Rpb24gc2huKGUpe3BvKGUsbnVsbCksRmEoZSxudWxsKX1mdW5jdGlvbiBhaG4oZSx0LG4pe3JldHVybiBraShlLmcsbix0KX1mdW5jdGlvbiBqNShlLHQsbil7cmV0dXJuIFI4ZSh0LG4sZS5jKX1mdW5jdGlvbiBvaG4oZSx0LG4pe3JldHVybiBraShlLmssbix0KX1mdW5jdGlvbiBjaG4oZSx0LG4pe3JldHVybiBLTW4oZSx0LG4pLG59ZnVuY3Rpb24gdWhuKGUsdCl7cmV0dXJuIFNoKCksdC5uLmIrPWV9ZnVuY3Rpb24gd250KGUpe1I1ZS5jYWxsKHRoaXMpLHRoaXMuYj1lfWZ1bmN0aW9uIGJ5ZShlKXtyNGUuY2FsbCh0aGlzKSx0aGlzLmE9ZX1mdW5jdGlvbiB5bnQoKXtvcS5jYWxsKHRoaXMsIlJhbmdlIiwyKX1mdW5jdGlvbiBOcShlKXt0aGlzLmI9ZSx0aGlzLmE9bmV3IGJ0fWZ1bmN0aW9uIHhudChlKXt0aGlzLmI9bmV3IE51LHRoaXMuYT1lfWZ1bmN0aW9uIGtudChlKXtlLmE9bmV3IF90LGUuYz1uZXcgX3R9ZnVuY3Rpb24gRW50KGUpe2UuYT1uZXcgUHIsZS5kPW5ldyBQcn1mdW5jdGlvbiBUbnQoZSl7ZG9lKGUsbnVsbCksZ29lKGUsbnVsbCl9ZnVuY3Rpb24gQ250KGUsdCl7cmV0dXJuIFlNbihlLmEsdCxudWxsKX1mdW5jdGlvbiBsaG4oZSx0KXtyZXR1cm4ga2koZS5hLHQuYSx0KX1mdW5jdGlvbiBKYShlKXtyZXR1cm4gbmV3IGx0KGUuYSxlLmIpfWZ1bmN0aW9uIG15ZShlKXtyZXR1cm4gbmV3IGx0KGUuYyxlLmQpfWZ1bmN0aW9uIGhobihlKXtyZXR1cm4gbmV3IGx0KGUuYyxlLmQpfWZ1bmN0aW9uIEZfKGUsdCl7cmV0dXJuIG9NbihlLmMsZS5iLHQpfWZ1bmN0aW9uIERlKGUsdCl7cmV0dXJuIGUhPW51bGwmJml1ZShlLHQpfWZ1bmN0aW9uIFpzZShlLHQpe3JldHVybiBleW4oZS5LYygpLHQpIT0tMX1mdW5jdGlvbiBQcShlKXtyZXR1cm4gZS5PYigpP2UuUGIoKTpudWxsfWZ1bmN0aW9uIGZobihlKXt0aGlzLmI9KENuKCksbmV3IHRyKGUpKX1mdW5jdGlvbiB2eWUoZSl7dGhpcy5hPWUsUHIuY2FsbCh0aGlzKX1mdW5jdGlvbiBTbnQoKXtUTy5jYWxsKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBfbnQoKXtxcS5jYWxsKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBBbnQoKXtVci5jYWxsKHRoaXMsIklOU1RBTkNFIiwwKX1mdW5jdGlvbiBMbnQoKXtteGUoKSx0aGlzLmE9bmV3IFVBKGdBZSl9ZnVuY3Rpb24gTW50KGUpe3JldHVybiBJZihlLDAsZS5sZW5ndGgpfWZ1bmN0aW9uIGRobihlLHQpe3JldHVybiBuZXcgV250KGUuS2MoKSx0KX1mdW5jdGlvbiB3eWUoZSx0KXtyZXR1cm4gZS5hLkJjKHQpIT1udWxsfWZ1bmN0aW9uIERudChlLHQpeyRyKGUpLGUuR2MobCh0LDE1KSl9ZnVuY3Rpb24gZ2huKGUsdCxuKXtlLmMuYmQodCxsKG4sMTM2KSl9ZnVuY3Rpb24gcGhuKGUsdCxuKXtlLmMuVWkodCxsKG4sMTM2KSl9ZnVuY3Rpb24gSW50KGUsdCl7ZS5jJiYoJDRlKHQpLGlvdCh0KSl9ZnVuY3Rpb24gYmhuKGUsdCl7ZS5xLnNldEhvdXJzKHQpLFhBKGUsdCl9ZnVuY3Rpb24gbWhuKGUsdCl7ZHcodCxlLmEuYS5hLGUuYS5hLmIpfWZ1bmN0aW9uIHZobihlLHQsbixyKXtUcyhlLmFbdC5nXSxuLmcscil9ZnVuY3Rpb24gZWFlKGUsdCxuKXtyZXR1cm4gZS5hW3QuZ11bbi5nXX1mdW5jdGlvbiB3aG4oZSx0KXtyZXR1cm4gZS5lW3QuYy5wXVt0LnBdfWZ1bmN0aW9uIHlobihlLHQpe3JldHVybiBlLmNbdC5jLnBdW3QucF19ZnVuY3Rpb24gTDEoZSx0KXtyZXR1cm4gZS5hW3QuYy5wXVt0LnBdfWZ1bmN0aW9uIHhobihlLHQpe3JldHVybiBlLmpbdC5wXT1JVG4odCl9ZnVuY3Rpb24gdGFlKGUsdCl7cmV0dXJuIGUuYS5CYyh0KSE9bnVsbH1mdW5jdGlvbiBraG4oZSx0KXtyZXR1cm4gemUoR2UodC5hKSk8PWV9ZnVuY3Rpb24gRWhuKGUsdCl7cmV0dXJuIHplKEdlKHQuYSkpPj1lfWZ1bmN0aW9uIFRobihlLHQpe3JldHVybiBFNmUoZS5mLHQuUGcoKSl9ZnVuY3Rpb24gejgoZSx0KXtyZXR1cm4gZS5hKnQuYStlLmIqdC5ifWZ1bmN0aW9uIENobihlLHQpe3JldHVybiBlLmE8ZzRlKHQpPy0xOjF9ZnVuY3Rpb24gU2huKGUsdCl7cmV0dXJuIEU2ZShlLmIsdC5QZygpKX1mdW5jdGlvbiBfaG4oZSx0LG4pe3JldHVybiBuP3QhPTA6dCE9ZS0xfWZ1bmN0aW9uIE9udChlLHQsbil7ZS5hPXReMTUwMixlLmI9bl5oaGV9ZnVuY3Rpb24gQWhuKGUsdCxuKXtyZXR1cm4gZS5hPXQsZS5iPW4sZX1mdW5jdGlvbiBtZChlLHQpe3JldHVybiBlLmEqPXQsZS5iKj10LGV9ZnVuY3Rpb24gdnQoZSx0KXtyZXR1cm4gJG4oZS5jLHQpLCEwfWZ1bmN0aW9uIFJfKGUsdCxuKXtyZXR1cm4gVHMoZS5nLHQsbiksbn1mdW5jdGlvbiBZcyhlLHQsbil7Rk8uY2FsbCh0aGlzLGUsdCxuKX1mdW5jdGlvbiBCcShlLHQsbil7WXMuY2FsbCh0aGlzLGUsdCxuKX1mdW5jdGlvbiB5eWUoZSx0LG4pe0pxLmNhbGwodGhpcyxlLHQsbil9ZnVuY3Rpb24gTm50KGUsdCxuKXtKcS5jYWxsKHRoaXMsZSx0LG4pfWZ1bmN0aW9uIFBudChlLHQsbil7eXllLmNhbGwodGhpcyxlLHQsbil9ZnVuY3Rpb24gbWwoZSx0LG4pe1lzLmNhbGwodGhpcyxlLHQsbil9ZnVuY3Rpb24gQm50KGUsdCxuKXtCcS5jYWxsKHRoaXMsZSx0LG4pfWZ1bmN0aW9uIHh5ZShlLHQsbil7Rk8uY2FsbCh0aGlzLGUsdCxuKX1mdW5jdGlvbiAkNShlLHQsbil7Rk8uY2FsbCh0aGlzLGUsdCxuKX1mdW5jdGlvbiBGbnQoZSx0LG4pe3h5ZS5jYWxsKHRoaXMsZSx0LG4pfWZ1bmN0aW9uIEZxKGUpe2Uuaj1XZShhX2UsZHQsMzE5LDAsMCwxKX1mdW5jdGlvbiB6NSgpe3RoaXMuYT1XZSh3YSxSbiwxLDgsNSwxKX1mdW5jdGlvbiBreWUoKXt0aGlzLkJifD0yNTYsdGhpcy5CYnw9NTEyfWZ1bmN0aW9uIG9yKGUpe3RoaXMuaT1lLHRoaXMuZj10aGlzLmkuan1mdW5jdGlvbiBjYihlKXt0aGlzLmM9ZSx0aGlzLmE9dGhpcy5jLmF9ZnVuY3Rpb24gcTUoZSx0KXt0aGlzLmE9ZSxZei5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gRXllKGUsdCl7cmV0dXJuIFY0bihlLG5ldyB0Yix0KS5hfWZ1bmN0aW9uIFR5ZShlKXtpZighZSl0aHJvdyB1ZShuZXcgWUkpfWZ1bmN0aW9uIEN5ZShlKXtpZighZSl0aHJvdyB1ZShuZXcgcGwpfWZ1bmN0aW9uIFN5ZSgpe1N5ZT1VLFN5ZSgpLEw2dD1uZXcgbG59ZnVuY3Rpb24gUm50KCl7Um50PVUsdXNlKCksZUF0PW5ldyBken1mdW5jdGlvbiBPaygpe09rPVUsYl9lPW5ldyBLaWUobnVsbCl9ZnVuY3Rpb24gTGhuKGUpe1VPKGUsQzR0KSxBVShlLEtEbihlKSl9ZnVuY3Rpb24gam50KGUpe2UuYT1sKEtuKGUuYi5hLDQpLDEyOSl9ZnVuY3Rpb24gJG50KGUpe2UuYT1sKEtuKGUuYi5hLDQpLDEyOSl9ZnVuY3Rpb24gem50KGUpe2UuYi5RYigpLC0tZS5kLmYuZCxsSChlLmQpfWZ1bmN0aW9uIF95ZShlKXt0aGlzLmE9ZSxxZy5jYWxsKHRoaXMsZS5kKX1mdW5jdGlvbiBxbnQoZSx0KXt0aGlzLmE9ZSx0c2UuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEhudChlLHQpe3RoaXMuYT1lLHRzZS5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gVm50KGUsdCl7dGhpcy5hPWUsdHNlLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBBeWUoZSx0KXt0aGlzLmE9dCx0c2UuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIFVudChlLHQpe3RoaXMuYT10LFRvZS5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gR250KGUsdCl7dGhpcy5hPWUsVG9lLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBLbnQoZSx0KXt0aGlzLmE9dCxYei5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gV250KGUsdCl7dGhpcy5hPXQsWHouY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIGRyKGUsdCl7cmV0dXJuIFhyKHQpLG5ldyBLbnQoZSx0KX1mdW5jdGlvbiBZbnQoZSx0KXtyZXR1cm4gbmV3IHlwdChlLmEsZS5iLHQpfWZ1bmN0aW9uIEx5ZShlLHQsbil7cmV0dXJuIGUuaW5kZXhPZih0LG4pfWZ1bmN0aW9uIFJxKGUsdCl7cmV0dXJuIGUubGFzdEluZGV4T2YodCl9ZnVuY3Rpb24gal8oZSl7cmV0dXJuIGU9PW51bGw/dWw6eGMoZSl9ZnVuY3Rpb24gTWhuKGUpe3JldHVybiBlPT1udWxsP251bGw6ZS5uYW1lfWZ1bmN0aW9uIERobihlKXtyZXR1cm4gZS5sK2UubSpMeCtlLmgqWm19ZnVuY3Rpb24gSWhuKGUpe3JldHVybiBRSShlLmEpP05vdChlKTpudWxsfWZ1bmN0aW9uIEFmKGUpe05yLmNhbGwodGhpcywobnIoZSksZSkpfWZ1bmN0aW9uIFRoKGUpe05yLmNhbGwodGhpcywobnIoZSksZSkpfWZ1bmN0aW9uIFhudChlKXtway5jYWxsKHRoaXMsbChYcihlKSwzNCkpfWZ1bmN0aW9uIFFudChlKXtway5jYWxsKHRoaXMsbChYcihlKSwzNCkpfWZ1bmN0aW9uIG5hZShlKXt3ci5jYWxsKHRoaXMsbmV3IEk2ZShlKSl9ZnVuY3Rpb24ganEoZSl7JGEuY2FsbCh0aGlzLGUpLHRoaXMuYT1lfWZ1bmN0aW9uIE15ZShlKXt5by5jYWxsKHRoaXMsZSksdGhpcy5hPWV9ZnVuY3Rpb24gRHllKGUpe0VrLmNhbGwodGhpcyxlKSx0aGlzLmE9ZX1mdW5jdGlvbiBKbnQoKXtGcSh0aGlzKSxTSCh0aGlzKSx0aGlzLmplKCl9ZnVuY3Rpb24gWm50KGUpe3RoaXMuYT1lLFJzLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBmaChlKXtyZXR1cm4gbXIoZS5hIT1udWxsKSxlLmF9ZnVuY3Rpb24gZXJ0KGUsdCl7cmV0dXJuIHZ0KHQuYSxlLmEpLGUuYX1mdW5jdGlvbiB0cnQoZSx0KXtyZXR1cm4gdnQodC5iLGUuYSksZS5hfWZ1bmN0aW9uIGh3KGUsdCl7cmV0dXJuIHZ0KHQuYSxlLmEpLGUuYX1mdW5jdGlvbiBFTyhlLHQsbil7cmV0dXJuIGhjZShlLHQsdCxuKSxlfWZ1bmN0aW9uICRxKGUsdCl7cmV0dXJuKytlLmIsdnQoZS5hLHQpfWZ1bmN0aW9uIEl5ZShlLHQpe3JldHVybisrZS5iLGFsKGUuYSx0KX1mdW5jdGlvbiBPaG4oZSx0KXtyZXR1cm4gWWkoZS5jLmQsdC5jLmQpfWZ1bmN0aW9uIE5obihlLHQpe3JldHVybiBZaShlLmMuYyx0LmMuYyl9ZnVuY3Rpb24gUGhuKGUsdCl7cmV0dXJuIFlpKGUubi5hLHQubi5hKX1mdW5jdGlvbiBpbChlLHQpe3JldHVybiBsKCRpKGUuYix0KSwxNSl9ZnVuY3Rpb24gQmhuKGUsdCl7cmV0dXJuIGUubi5iPShucih0KSx0KX1mdW5jdGlvbiBGaG4oZSx0KXtyZXR1cm4gZS5uLmI9KG5yKHQpLHQpfWZ1bmN0aW9uIHZsKGUsdCl7cmV0dXJuISF0JiZlLmJbdC5nXT09dH1mdW5jdGlvbiAkXyhlKXtyZXR1cm4gTGMoZS5hKXx8TGMoZS5iKX1mdW5jdGlvbiBmdyhlKXtyZXR1cm4gZS4kSHx8KGUuJEg9KytiT24pfWZ1bmN0aW9uIFJobihlKXtyZXR1cm4gZS5hIT1udWxsP2UuYTpudWxsfWZ1bmN0aW9uIGpobihlLHQpe3JldHVybiBZaShlLmUuYix0LmUuYil9ZnVuY3Rpb24gJGhuKGUsdCl7cmV0dXJuIFlpKGUuZS5hLHQuZS5hKX1mdW5jdGlvbiB6aG4oZSx0LG4pe3JldHVybiBGY3QoZSx0LG4sZS5iKX1mdW5jdGlvbiBPeWUoZSx0LG4pe3JldHVybiBGY3QoZSx0LG4sZS5jKX1mdW5jdGlvbiBxaG4oZSl7cmV0dXJuIHUwKCksISFlJiYhZS5kYygpfWZ1bmN0aW9uIG5ydCgpe3BfKCksdGhpcy5iPW5ldyBkWWUodGhpcyl9ZnVuY3Rpb24genEoKXt6cT1VLHBLPW5ldyB2cyhiM3QsMCl9ZnVuY3Rpb24gSG4oKXtIbj1VLFBiPSExLFNUPSEwfWZ1bmN0aW9uIFlwKGUpe3ZhciB0O3Q9ZS5hLGUuYT1lLmIsZS5iPXR9ZnVuY3Rpb24gVE8oZSx0KXt3XygpLHRoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIHFxKGUsdCl7V3AoKSx0aGlzLmI9ZSx0aGlzLmM9dH1mdW5jdGlvbiByYWUoZSx0KXtJYWUoKSx0aGlzLmY9dCx0aGlzLmQ9ZX1mdW5jdGlvbiBOeWUoZSx0KXtrNmUodCxlKSx0aGlzLmQ9ZSx0aGlzLmM9dH1mdW5jdGlvbiBQeWUoZSx0KXtVOGUuY2FsbCh0aGlzLGUsdCxudWxsKX1mdW5jdGlvbiBycnQoZSx0LG4scil7cjVlLmNhbGwodGhpcyxlLHQsbixyKX1mdW5jdGlvbiBxOChlKXt0aGlzLmQ9ZSxvci5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gSDgoZSl7dGhpcy5jPWUsb3IuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIENPKGUpe3RoaXMuYz1lLHE4LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBIaG4oZSl7cmV0dXJuIG5ldyBUeSgzLGUpfWZ1bmN0aW9uIGVnKGUpe3JldHVybiBNaChlLFl5KSxuZXcgQnUoZSl9ZnVuY3Rpb24gaXJ0KGUpe3JldHVybiBYaygpLHBhcnNlSW50KGUpfHwtMX1mdW5jdGlvbiBWaG4oZSl7cmV0dXJuICR6KCksR3IoKGhvdCgpLG82dCksZSl9ZnVuY3Rpb24gTmsoZSx0LG4pe3JldHVybiBMeWUoZSxjbCh0KSxuKX1mdW5jdGlvbiBpYWUoZSx0KXtyZXR1cm4gbmV3IHJpdChlLGUuZ2MoKSx0KX1mdW5jdGlvbiBVaG4oZSx0KXtyZXR1cm4gT2FlKGUuYykuTWQoKS5YYih0KX1mdW5jdGlvbiBQayhlLHQsbil7dmFyIHI7cj1lLmZkKHQpLHIuUmIobil9ZnVuY3Rpb24gQnllKGUsdCxuKXtsKGhOKGUsdCksMjEpLkZjKG4pfWZ1bmN0aW9uIEdobihlLHQsbil7RmNlKGUuYSxuKSxvVShlLmEsdCl9ZnVuY3Rpb24gU08oZSl7RGUoZSwxNTgpJiZsKGUsMTU4KS5waSgpfWZ1bmN0aW9uIHNydChlKXtBNGUuY2FsbCh0aGlzLGUsbnVsbCxudWxsKX1mdW5jdGlvbiBzYWUoZSl7Y3koKSx0aGlzLmI9ZSx0aGlzLmE9ITB9ZnVuY3Rpb24gYXJ0KGUpe0p6KCksdGhpcy5iPWUsdGhpcy5hPSEwfWZ1bmN0aW9uIEJrKGUpe3JldHVybiBtcihlLmIhPTApLGUuYS5hLmN9ZnVuY3Rpb24gbzAoZSl7cmV0dXJuIG1yKGUuYiE9MCksZS5jLmIuY31mdW5jdGlvbiBLaG4oZSx0KXtyZXR1cm4gaGNlKGUsdCx0KzEsIiIpLGV9ZnVuY3Rpb24gbnMoZSx0KXtyZXR1cm4hIWUucSYmSHUoZS5xLHQpfWZ1bmN0aW9uIG9ydChlKXtyZXR1cm4gZS5iPWwoSTVlKGUuYSksNDQpfWZ1bmN0aW9uIFdobihlKXtyZXR1cm4gZS5mIT1udWxsP2UuZjoiIitlLmd9ZnVuY3Rpb24gYWFlKGUpe3JldHVybiBlLmYhPW51bGw/ZS5mOiIiK2UuZ31mdW5jdGlvbiBZaG4oZSx0KXtyZXR1cm4gZT4wP3QvKGUqZSk6dCoxMDB9ZnVuY3Rpb24gWGhuKGUsdCl7cmV0dXJuIGU+MD90KnQvZTp0KnQqMTAwfWZ1bmN0aW9uIGR5KGUsdCl7cmV0dXJuIGwoQjEoZS5hLHQpLDM0KX1mdW5jdGlvbiBRaG4oZSx0KXtyZXR1cm4gQ2IoKSx4bihlLHQuZSx0KX1mdW5jdGlvbiBKaG4oZSx0LG4pe3JldHVybiB0cSgpLG4uTWcoZSx0KX1mdW5jdGlvbiBaaG4oZSl7cmV0dXJuIHRwKCksZS5lLmErZS5mLmEvMn1mdW5jdGlvbiBlZm4oZSx0LG4pe3JldHVybiB0cCgpLG4uZS5hLWUqdH1mdW5jdGlvbiB0Zm4oZSl7cmV0dXJuIHRwKCksZS5lLmIrZS5mLmIvMn1mdW5jdGlvbiBuZm4oZSx0LG4pe3JldHVybiB0cCgpLG4uZS5iLWUqdH1mdW5jdGlvbiBjcnQoZSl7ZS5kPW5ldyBzcnQoZSksZS5lPW5ldyBQcn1mdW5jdGlvbiB1cnQoKXt0aGlzLmE9bmV3IEN3LHRoaXMuYj1uZXcgQ3d9ZnVuY3Rpb24gbHJ0KGUpe3RoaXMuYz1lLHRoaXMuYT0xLHRoaXMuYj0xfWZ1bmN0aW9uIGhydChlKXtNbGUoKSxTUWUodGhpcyksdGhpcy5GZihlKX1mdW5jdGlvbiByZm4oZSx0LG4pe1pIKCksZS5wZih0KSYmbi5DZChlKX1mdW5jdGlvbiBpZm4oZSx0LG4pe3JldHVybiB2dCh0LGsxdChlLG4pKX1mdW5jdGlvbiBkdyhlLHQsbil7cmV0dXJuIGUuYSs9dCxlLmIrPW4sZX1mdW5jdGlvbiBzZm4oZSx0LG4pe3JldHVybiBlLmEqPXQsZS5iKj1uLGV9ZnVuY3Rpb24gRnllKGUsdCl7cmV0dXJuIGUuYT10LmEsZS5iPXQuYixlfWZ1bmN0aW9uIEhxKGUpe3JldHVybiBlLmE9LWUuYSxlLmI9LWUuYixlfWZ1bmN0aW9uIHpfKGUsdCxuKXtyZXR1cm4gZS5hLT10LGUuYi09bixlfWZ1bmN0aW9uIGZydChlKXtvcy5jYWxsKHRoaXMpLGZBKHRoaXMsZSl9ZnVuY3Rpb24gZHJ0KCl7VXIuY2FsbCh0aGlzLCJHUk9XX1RSRUUiLDApfWZ1bmN0aW9uIGdydCgpe1VyLmNhbGwodGhpcywiUE9MWU9NSU5PIiwwKX1mdW5jdGlvbiBkaChlLHQsbil7eGwuY2FsbCh0aGlzLGUsdCxuLDIpfWZ1bmN0aW9uIGFmbihlLHQsbil7X0EoZHUoZS5hKSx0LElvdChuKSl9ZnVuY3Rpb24gcHJ0KGUsdCl7d18oKSxUTy5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBSeWUoZSx0KXtXcCgpLHFxLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIGJydChlLHQpe1dwKCksUnllLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIG1ydChlLHQpe1dwKCkscXEuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gb2ZuKGUsdCl7cmV0dXJuIGUuYy5GYyhsKHQsMTM2KSl9ZnVuY3Rpb24gY2ZuKGUsdCxuKXtfQShYbChlLmEpLHQsT290KG4pKX1mdW5jdGlvbiB2cnQoZSl7dGhpcy5jPWUsVXUoZSwwKSxHdShlLDApfWZ1bmN0aW9uIG9hZShlLHQpe0poKCksY0guY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gd3J0KGUsdCl7SmgoKSxvYWUuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24ganllKGUsdCl7SmgoKSxvYWUuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gJHllKGUsdCl7SmgoKSxjSC5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB5cnQoZSx0KXtKaCgpLGp5ZS5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB4cnQoZSx0KXtKaCgpLCR5ZS5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBrcnQoZSx0KXtKaCgpLGNILmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHVmbihlLHQsbil7cmV0dXJuIHQuemwoZS5lLGUuYyxuKX1mdW5jdGlvbiBsZm4oZSx0LG4pe3JldHVybiB0LkFsKGUuZSxlLmMsbil9ZnVuY3Rpb24genllKGUsdCxuKXtyZXR1cm4gVlUobE4oZSx0KSxuKX1mdW5jdGlvbiBjYWUoZSx0KXtyZXR1cm4geWIoZS5lLGwodCw1NCkpfWZ1bmN0aW9uIGhmbihlKXtyZXR1cm4gZT09bnVsbD9udWxsOkJEbihlKX1mdW5jdGlvbiBmZm4oZSl7cmV0dXJuIGU9PW51bGw/bnVsbDpMOW4oZSl9ZnVuY3Rpb24gZGZuKGUpe3JldHVybiBlPT1udWxsP251bGw6eGMoZSl9ZnVuY3Rpb24gZ2ZuKGUpe3JldHVybiBlPT1udWxsP251bGw6eGMoZSl9ZnVuY3Rpb24gQnQoZSl7cmV0dXJuIFZfKGU9PW51bGx8fGh5KGUpKSxlfWZ1bmN0aW9uIEdlKGUpe3JldHVybiBWXyhlPT1udWxsfHxmeShlKSksZX1mdW5jdGlvbiBlaShlKXtyZXR1cm4gVl8oZT09bnVsbHx8SWEoZSkpLGV9ZnVuY3Rpb24gR2coZSl7ZS5vPT1udWxsJiZvVG4oZSl9ZnVuY3Rpb24gcXllKGUpe2lmKCFlKXRocm93IHVlKG5ldyBZSSl9ZnVuY3Rpb24gcGZuKGUpe2lmKCFlKXRocm93IHVlKG5ldyBSaWUpfWZ1bmN0aW9uIG1yKGUpe2lmKCFlKXRocm93IHVlKG5ldyBfYyl9ZnVuY3Rpb24gZ3koZSl7aWYoIWUpdGhyb3cgdWUobmV3IHBsKX1mdW5jdGlvbiBFcnQoZSl7aWYoIWUpdGhyb3cgdWUobmV3IFhoKX1mdW5jdGlvbiBGaygpe0ZrPVUsZkY9bmV3IGlKZSxuZXcgc0plfWZ1bmN0aW9uIEg1KCl7SDU9VSxZNj1uZXcgVWkoInJvb3QiKX1mdW5jdGlvbiBIeWUoKXtzZnQuY2FsbCh0aGlzKSx0aGlzLkJifD1Jb31mdW5jdGlvbiBiZm4oZSx0KXt0aGlzLmQ9ZSxNcih0aGlzKSx0aGlzLmI9dH1mdW5jdGlvbiBWeWUoZSx0KXtQb2UuY2FsbCh0aGlzLGUpLHRoaXMuYT10fWZ1bmN0aW9uIFV5ZShlLHQpe1BvZS5jYWxsKHRoaXMsZSksdGhpcy5hPXR9ZnVuY3Rpb24gR3llKGUsdCxuKXtZSC5jYWxsKHRoaXMsZSx0LG4sbnVsbCl9ZnVuY3Rpb24gVHJ0KGUsdCxuKXtZSC5jYWxsKHRoaXMsZSx0LG4sbnVsbCl9ZnVuY3Rpb24gX08oZSx0KXt0aGlzLmM9ZSxMay5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBxXyhlLHQpe3RoaXMuYT1lLF9PLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIEt5ZShlKXt0aGlzLnE9bmV3IGIuRGF0ZShGbShlKSl9ZnVuY3Rpb24gQ3J0KGUpe3JldHVybiBlPjg/MDplKzF9ZnVuY3Rpb24gU3J0KGUsdCl7RzF8fHZ0KGUuYSx0KX1mdW5jdGlvbiBtZm4oZSx0KXtyZXR1cm4gc08oKSxiRSh0LmQuaSxlKX1mdW5jdGlvbiB2Zm4oZSx0KXtyZXR1cm4gbHgoKSxuZXcgbm10KHQsZSl9ZnVuY3Rpb24gd2ZuKGUsdCxuKXtyZXR1cm4gZS5OZSh0LG4pPD0wP246dH1mdW5jdGlvbiB5Zm4oZSx0LG4pe3JldHVybiBlLk5lKHQsbik8PTA/dDpufWZ1bmN0aW9uIHhmbihlLHQpe3JldHVybiBsKEIxKGUuYix0KSwxNDMpfWZ1bmN0aW9uIGtmbihlLHQpe3JldHVybiBsKEIxKGUuYyx0KSwyMzMpfWZ1bmN0aW9uIHVhZShlKXtyZXR1cm4gbChqdChlLmEsZS5iKSwyOTQpfWZ1bmN0aW9uIF9ydChlKXtyZXR1cm4gbmV3IGx0KGUuYyxlLmQrZS5hKX1mdW5jdGlvbiBBcnQoZSl7cmV0dXJuIG5yKGUpLGU/MTIzMToxMjM3fWZ1bmN0aW9uIExydChlKXtyZXR1cm4gU2goKSxvbnQobChlLDIwMykpfWZ1bmN0aW9uIHB5KCl7cHk9VSxxX2U9dW4oKG1oKCksQ3YpKX1mdW5jdGlvbiBFZm4oZSx0KXt0LmE/X0VuKGUsdCk6dGFlKGUuYSx0LmIpfWZ1bmN0aW9uIEFPKGUsdCxuKXsrK2UuaixlLnRqKCksTm9lKGUsdCxuKX1mdW5jdGlvbiBNcnQoZSx0LG4peysrZS5qLGUucWoodCxlLlppKHQsbikpfWZ1bmN0aW9uIERydChlLHQsbil7dmFyIHI7cj1lLmZkKHQpLHIuUmIobil9ZnVuY3Rpb24gV3llKGUsdCxuKXtyZXR1cm4gbj1OaChlLHQsNixuKSxufWZ1bmN0aW9uIFl5ZShlLHQsbil7cmV0dXJuIG49TmgoZSx0LDMsbiksbn1mdW5jdGlvbiBYeWUoZSx0LG4pe3JldHVybiBuPU5oKGUsdCw5LG4pLG59ZnVuY3Rpb24gdmQoZSx0KXtyZXR1cm4gVU8odCx5RWUpLGUuZj10LGV9ZnVuY3Rpb24gUXllKGUsdCl7cmV0dXJuKHQmSWkpJWUuZC5sZW5ndGh9ZnVuY3Rpb24gSXJ0KGUsdCxuKXtyZXR1cm4gTWtlKGUuYyxlLmIsdCxuKX1mdW5jdGlvbiBPcnQoZSx0KXt0aGlzLmM9ZSxMdy5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gTnJ0KGUsdCl7dGhpcy5hPWUsdlFlLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBMTyhlLHQpe3RoaXMuYT1lLHZRZS5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gdnMoZSx0KXtVaS5jYWxsKHRoaXMsZSksdGhpcy5hPXR9ZnVuY3Rpb24gSnllKGUsdCl7eHdlLmNhbGwodGhpcyxlKSx0aGlzLmE9dH1mdW5jdGlvbiBsYWUoZSx0KXt4d2UuY2FsbCh0aGlzLGUpLHRoaXMuYT10fWZ1bmN0aW9uIFRmbihlKXtJOGUuY2FsbCh0aGlzLDAsMCksdGhpcy5mPWV9ZnVuY3Rpb24gUHJ0KGUsdCxuKXtyZXR1cm4gZS5hKz1JZih0LDAsbiksZX1mdW5jdGlvbiBNTyhlKXtyZXR1cm4hZS5hJiYoZS5hPW5ldyBnZSksZS5hfWZ1bmN0aW9uIFp5ZShlLHQpe3ZhciBuO3JldHVybiBuPWUuZSxlLmU9dCxufWZ1bmN0aW9uIGU0ZShlLHQpe3ZhciBuO3JldHVybiBuPXQsISFlLkZlKG4pfWZ1bmN0aW9uIENmbihlLHQpe3JldHVybiBIbigpLGU9PXQ/MDplPzE6LTF9ZnVuY3Rpb24gYnkoZSx0KXtlLmEuYmQoZS5iLHQpLCsrZS5iLGUuYz0tMX1mdW5jdGlvbiBETyhlKXtlLmI/RE8oZS5iKTplLmYuYy56YyhlLmUsZS5kKX1mdW5jdGlvbiBCcnQoZSl7TmwoZS5lKSxlLmQuYj1lLmQsZS5kLmE9ZS5kfWZ1bmN0aW9uIFNmbihlLHQsbil7QW0oKSxFaWUoZSx0LlZlKGUuYSxuKSl9ZnVuY3Rpb24gdDRlKGUsdCxuKXtyZXR1cm4gUTgoZSxsKHQsMjIpLG4pfWZ1bmN0aW9uIGMwKGUsdCl7cmV0dXJuIFZ6KG5ldyBBcnJheSh0KSxlKX1mdW5jdGlvbiBfZm4oZSl7cmV0dXJuIFlyKHViKGUsMzIpKV5ZcihlKX1mdW5jdGlvbiBoYWUoZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZSl9ZnVuY3Rpb24gQWZuKGUpe3JldHVybiBlPT1udWxsP251bGw6ZS5tZXNzYWdlfWZ1bmN0aW9uIExmbihlLHQsbil7cmV0dXJuIGUuYXBwbHkodCxuKX1mdW5jdGlvbiBNZm4oZSx0KXt2YXIgbjtuPWVbbGhlXSxuLmNhbGwoZSx0KX1mdW5jdGlvbiBEZm4oZSx0KXt2YXIgbjtuPWVbbGhlXSxuLmNhbGwoZSx0KX1mdW5jdGlvbiBJZm4oZSx0KXtyZXR1cm4gc08oKSwhYkUodC5kLmksZSl9ZnVuY3Rpb24gbjRlKGUsdCxuLHIpe3NILmNhbGwodGhpcyxlLHQsbixyKX1mdW5jdGlvbiBGcnQoKXtWcS5jYWxsKHRoaXMpLHRoaXMuYT1uZXcgcWF9ZnVuY3Rpb24gcjRlKCl7dGhpcy5uPW5ldyBxYSx0aGlzLm89bmV3IHFhfWZ1bmN0aW9uIFJydCgpe3RoaXMuYj1uZXcgcWEsdGhpcy5jPW5ldyBidH1mdW5jdGlvbiBqcnQoKXt0aGlzLmE9bmV3IGJ0LHRoaXMuYj1uZXcgYnR9ZnVuY3Rpb24gJHJ0KCl7dGhpcy5hPW5ldyBibSx0aGlzLmI9bmV3IEJRZX1mdW5jdGlvbiBpNGUoKXt0aGlzLmI9bmV3IGUyLHRoaXMuYT1uZXcgZTJ9ZnVuY3Rpb24genJ0KCl7dGhpcy5iPW5ldyBLcyx0aGlzLmE9bmV3IEtzfWZ1bmN0aW9uIHFydCgpe3RoaXMuYj1uZXcgUHIsdGhpcy5hPW5ldyBQcn1mdW5jdGlvbiBIcnQoKXt0aGlzLmI9bmV3IGRaZSx0aGlzLmE9bmV3IENTfWZ1bmN0aW9uIFZydCgpe3RoaXMuYT1uZXcgV3JlLHRoaXMuYj1uZXcgQWVlfWZ1bmN0aW9uIFVydCgpe3RoaXMuYT1uZXcgYnQsdGhpcy5kPW5ldyBidH1mdW5jdGlvbiBWcSgpe3RoaXMubj1uZXcgQTgsdGhpcy5pPW5ldyAkOH1mdW5jdGlvbiBHcnQoZSl7dGhpcy5hPShNaChlLFl5KSxuZXcgQnUoZSkpfWZ1bmN0aW9uIEtydChlKXt0aGlzLmE9KE1oKGUsWXkpLG5ldyBCdShlKSl9ZnVuY3Rpb24gT2ZuKGUpe3JldHVybiBlPDEwMD9udWxsOm5ldyBuYihlKX1mdW5jdGlvbiBOZm4oZSx0KXtyZXR1cm4gZS5uLmE9KG5yKHQpLHQrMTApfWZ1bmN0aW9uIFBmbihlLHQpe3JldHVybiBlLm4uYT0obnIodCksdCsxMCl9ZnVuY3Rpb24gQmZuKGUsdCl7cmV0dXJuIHQ9PWV8fGpFKF9VKHQpLGUpfWZ1bmN0aW9uIFdydChlLHQpe3JldHVybiBraShlLmEsdCwiIik9PW51bGx9ZnVuY3Rpb24gRmZuKGUsdCl7dmFyIG47cmV0dXJuIG49dC5xaShlLmEpLG59ZnVuY3Rpb24gT2koZSx0KXtyZXR1cm4gZS5hKz10LmEsZS5iKz10LmIsZX1mdW5jdGlvbiBtYShlLHQpe3JldHVybiBlLmEtPXQuYSxlLmItPXQuYixlfWZ1bmN0aW9uIFJmbihlKXtyZXR1cm4gYXkoZS5qLmMsMCksZS5hPS0xLGV9ZnVuY3Rpb24gczRlKGUsdCxuKXtyZXR1cm4gbj1OaChlLHQsMTEsbiksbn1mdW5jdGlvbiBqZm4oZSx0LG4pe24hPW51bGwmJndWKHQscHVlKGUsbikpfWZ1bmN0aW9uICRmbihlLHQsbil7biE9bnVsbCYmeVYodCxwdWUoZSxuKSl9ZnVuY3Rpb24gVjgoZSx0LG4scil7bnQuY2FsbCh0aGlzLGUsdCxuLHIpfWZ1bmN0aW9uIGE0ZShlLHQsbixyKXtudC5jYWxsKHRoaXMsZSx0LG4scil9ZnVuY3Rpb24gWXJ0KGUsdCxuLHIpe2E0ZS5jYWxsKHRoaXMsZSx0LG4scil9ZnVuY3Rpb24gWHJ0KGUsdCxuLHIpe3BILmNhbGwodGhpcyxlLHQsbixyKX1mdW5jdGlvbiBmYWUoZSx0LG4scil7cEguY2FsbCh0aGlzLGUsdCxuLHIpfWZ1bmN0aW9uIG80ZShlLHQsbixyKXtwSC5jYWxsKHRoaXMsZSx0LG4scil9ZnVuY3Rpb24gUXJ0KGUsdCxuLHIpe2ZhZS5jYWxsKHRoaXMsZSx0LG4scil9ZnVuY3Rpb24gYzRlKGUsdCxuLHIpe2ZhZS5jYWxsKHRoaXMsZSx0LG4scil9ZnVuY3Rpb24gTG4oZSx0LG4scil7bzRlLmNhbGwodGhpcyxlLHQsbixyKX1mdW5jdGlvbiBKcnQoZSx0LG4scil7YzRlLmNhbGwodGhpcyxlLHQsbixyKX1mdW5jdGlvbiBacnQoZSx0LG4scil7YTVlLmNhbGwodGhpcyxlLHQsbixyKX1mdW5jdGlvbiBteShlLHQpe3RjLmNhbGwodGhpcyxDTCtlK2F2K3QpfWZ1bmN0aW9uIHU0ZShlLHQpe3JldHVybiBlLmprKCkud2koKS5yaShlLHQpfWZ1bmN0aW9uIGw0ZShlLHQpe3JldHVybiBlLmprKCkud2koKS50aShlLHQpfWZ1bmN0aW9uIGVpdChlLHQpe3JldHVybiBucihlKSxxZShlKT09PXFlKHQpfWZ1bmN0aW9uIHZuKGUsdCl7cmV0dXJuIG5yKGUpLHFlKGUpPT09cWUodCl9ZnVuY3Rpb24gemZuKGUsdCl7cmV0dXJuIGUuYi5CZChuZXcga2V0KGUsdCkpfWZ1bmN0aW9uIHFmbihlLHQpe3JldHVybiBlLmIuQmQobmV3IEVldChlLHQpKX1mdW5jdGlvbiB0aXQoZSx0KXtyZXR1cm4gZS5iLkJkKG5ldyBUZXQoZSx0KSl9ZnVuY3Rpb24gSGZuKGUsdCl7cmV0dXJuIGUuZT1sKGUuZC5LYih0KSwxNTkpfWZ1bmN0aW9uIGg0ZShlLHQsbil7cmV0dXJuIGUubGFzdEluZGV4T2YodCxuKX1mdW5jdGlvbiBWZm4oZSx0LG4pe3JldHVybiBZaShlW3QuYV0sZVtuLmFdKX1mdW5jdGlvbiBVZm4oZSx0KXtyZXR1cm4gcnQodCwoTnQoKSxUQiksZSl9ZnVuY3Rpb24gR2ZuKGUsdCl7cmV0dXJuIHJ1KHQuYS5kLnAsZS5hLmQucCl9ZnVuY3Rpb24gS2ZuKGUsdCl7cmV0dXJuIHJ1KGUuYS5kLnAsdC5hLmQucCl9ZnVuY3Rpb24gV2ZuKGUsdCl7cmV0dXJuIFlpKGUuYy1lLnMsdC5jLXQucyl9ZnVuY3Rpb24gWWZuKGUsdCl7cmV0dXJuIFlpKGUuYi5lLmEsdC5iLmUuYSl9ZnVuY3Rpb24gWGZuKGUsdCl7cmV0dXJuIFlpKGUuYy5lLmEsdC5jLmUuYSl9ZnVuY3Rpb24gbml0KGUpe3JldHVybiBlLmM/Z2MoZS5jLmEsZSwwKTotMX1mdW5jdGlvbiBVOChlKXtyZXR1cm4gZT09VHZ8fGU9PVRnfHxlPT1NdX1mdW5jdGlvbiBmNGUoZSx0KXt0aGlzLmM9ZSxqYWUuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gcml0KGUsdCxuKXt0aGlzLmE9ZSxOeWUuY2FsbCh0aGlzLHQsbil9ZnVuY3Rpb24gaWl0KGUpe3RoaXMuYz1lLERxLmNhbGwodGhpcyxFUCwwKX1mdW5jdGlvbiBzaXQoZSx0LG4pe3RoaXMuYz10LHRoaXMuYj1uLHRoaXMuYT1lfWZ1bmN0aW9uIElPKGUpe2prKCksdGhpcy5kPWUsdGhpcy5hPW5ldyB6NX1mdW5jdGlvbiBhaXQoZSl7d2QoKSx0aGlzLmE9KENuKCksbmV3IEVrKGUpKX1mdW5jdGlvbiBRZm4oZSx0KXtVZyhlLmYpP1pFbihlLHQpOk14bihlLHQpfWZ1bmN0aW9uIG9pdChlLHQpe2xkbi5jYWxsKHRoaXMsZSxlLmxlbmd0aCx0KX1mdW5jdGlvbiBKZm4oZSx0KXtHMXx8dCYmKGUuZD10KX1mdW5jdGlvbiBjaXQoZSx0KXtyZXR1cm4gRGUodCwxNSkmJkJidChlLmMsdCl9ZnVuY3Rpb24gWmZuKGUsdCxuKXtyZXR1cm4gbChlLmMsNzEpLldrKHQsbil9ZnVuY3Rpb24gVXEoZSx0LG4pe3JldHVybiBsKGUuYyw3MSkuWGsodCxuKX1mdW5jdGlvbiBlMG4oZSx0LG4pe3JldHVybiB1Zm4oZSxsKHQsMzQzKSxuKX1mdW5jdGlvbiBkNGUoZSx0LG4pe3JldHVybiBsZm4oZSxsKHQsMzQzKSxuKX1mdW5jdGlvbiB0MG4oZSx0LG4pe3JldHVybiBMZ3QoZSxsKHQsMzQzKSxuKX1mdW5jdGlvbiB1aXQoZSx0LG4pe3JldHVybiBIeG4oZSxsKHQsMzQzKSxuKX1mdW5jdGlvbiBIXyhlLHQpe3JldHVybiB0PT1udWxsP251bGw6T3koZS5iLHQpfWZ1bmN0aW9uIGc0ZShlKXtyZXR1cm4gZnkoZSk/KG5yKGUpLGUpOmUudWUoKX1mdW5jdGlvbiBHcShlKXtyZXR1cm4haXNOYU4oZSkmJiFpc0Zpbml0ZShlKX1mdW5jdGlvbiBkYWUoZSl7a250KHRoaXMpLENoKHRoaXMpLEthKHRoaXMsZSl9ZnVuY3Rpb24gT2woZSl7WXNlKHRoaXMpLE00ZSh0aGlzLmMsMCxlLlBjKCkpfWZ1bmN0aW9uIFpoKGUsdCxuKXt0aGlzLmE9ZSx0aGlzLmI9dCx0aGlzLmM9bn1mdW5jdGlvbiBsaXQoZSx0LG4pe3RoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1ufWZ1bmN0aW9uIGhpdChlLHQsbil7dGhpcy5kPWUsdGhpcy5iPW4sdGhpcy5hPXR9ZnVuY3Rpb24gZml0KGUpe3RoaXMuYT1lLFZnKCksWmMoRGF0ZS5ub3coKSl9ZnVuY3Rpb24gZGl0KGUpe3BoKGUuYSksTDZlKGUuYyxlLmIpLGUuYj1udWxsfWZ1bmN0aW9uIGdhZSgpe2dhZT1VLHBfZT1uZXcgRXQsXzZ0PW5ldyBHdH1mdW5jdGlvbiBnaXQoKXtnaXQ9VSxNX3Q9V2Uod2EsUm4sMSwwLDUsMSl9ZnVuY3Rpb24gcGl0KCl7cGl0PVUsV190PVdlKHdhLFJuLDEsMCw1LDEpfWZ1bmN0aW9uIHA0ZSgpe3A0ZT1VLFlfdD1XZSh3YSxSbiwxLDAsNSwxKX1mdW5jdGlvbiB3ZCgpe3dkPVUsbmV3IFR3ZSgoQ24oKSxDbigpLF9vKSl9ZnVuY3Rpb24gbjBuKGUpe3JldHVybiByRSgpLEdyKCh4bHQoKSxNNnQpLGUpfWZ1bmN0aW9uIHIwbihlKXtyZXR1cm4gRmwoKSxHcigoaGx0KCksQjZ0KSxlKX1mdW5jdGlvbiBpMG4oZSl7cmV0dXJuIFpWKCksR3IoKFhjdCgpLHE2dCksZSl9ZnVuY3Rpb24gczBuKGUpe3JldHVybiBhVigpLEdyKChRY3QoKSxINnQpLGUpfWZ1bmN0aW9uIGEwbihlKXtyZXR1cm4gUFUoKSxHcigoWGZ0KCksVjZ0KSxlKX1mdW5jdGlvbiBvMG4oZSl7cmV0dXJuIHQxKCksR3IoKHVsdCgpLEs2dCksZSl9ZnVuY3Rpb24gYzBuKGUpe3JldHVybiBCbCgpLEdyKChjbHQoKSxZNnQpLGUpfWZ1bmN0aW9uIHUwbihlKXtyZXR1cm4gb2woKSxHcigobGx0KCksUTZ0KSxlKX1mdW5jdGlvbiBsMG4oZSl7cmV0dXJuIFlVKCksR3IoKEd0dCgpLHk3dCksZSl9ZnVuY3Rpb24gaDBuKGUpe3JldHVybiBQdygpLEdyKChFbHQoKSxrN3QpLGUpfWZ1bmN0aW9uIGYwbihlKXtyZXR1cm4gYngoKSxHcigoQ2x0KCksVDd0KSxlKX1mdW5jdGlvbiBkMG4oZSl7cmV0dXJuIE5BKCksR3IoKFRsdCgpLF83dCksZSl9ZnVuY3Rpb24gZzBuKGUpe3JldHVybiBaeigpLEdyKChrY3QoKSxBN3QpLGUpfWZ1bmN0aW9uIHAwbihlKXtyZXR1cm4gb1YoKSxHcigoSmN0KCksVTd0KSxlKX1mdW5jdGlvbiBiMG4oZSl7cmV0dXJuIGxBKCksR3IoKGZsdCgpLG04dCksZSl9ZnVuY3Rpb24gbTBuKGUpe3JldHVybiB1bygpLEdyKChhaHQoKSx4OHQpLGUpfWZ1bmN0aW9uIHYwbihlKXtyZXR1cm4gd0UoKSxHcigoX2x0KCksUzh0KSxlKX1mdW5jdGlvbiB3MG4oZSl7cmV0dXJuIEttKCksR3IoKFNsdCgpLEk4dCksZSl9ZnVuY3Rpb24gYjRlKGUsdCl7aWYoIWUpdGhyb3cgdWUobmV3IFluKHQpKX1mdW5jdGlvbiBSayhlKXtpZighZSl0aHJvdyB1ZShuZXcgbmMoSmtlKSl9ZnVuY3Rpb24gcGFlKGUsdCl7aWYoZSE9dCl0aHJvdyB1ZShuZXcgWGgpfWZ1bmN0aW9uIGJpdChlLHQsbil7dGhpcy5hPWUsdGhpcy5iPXQsdGhpcy5jPW59ZnVuY3Rpb24gbTRlKGUsdCxuKXt0aGlzLmE9ZSx0aGlzLmI9dCx0aGlzLmM9bn1mdW5jdGlvbiBtaXQoZSx0LG4pe3RoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1ufWZ1bmN0aW9uIEtxKGUsdCxuKXt0aGlzLmI9ZSx0aGlzLmE9dCx0aGlzLmM9bn1mdW5jdGlvbiB2NGUoZSx0LG4pe3RoaXMuYj1lLHRoaXMuYz10LHRoaXMuYT1ufWZ1bmN0aW9uIHc0ZShlLHQsbil7dGhpcy5hPWUsdGhpcy5iPXQsdGhpcy5jPW59ZnVuY3Rpb24gV3EoZSx0LG4pe3RoaXMuZT10LHRoaXMuYj1lLHRoaXMuZD1ufWZ1bmN0aW9uIHZpdChlLHQsbil7dGhpcy5iPWUsdGhpcy5hPXQsdGhpcy5jPW59ZnVuY3Rpb24geTBuKGUsdCxuKXtyZXR1cm4gQW0oKSxlLmEuWWQodCxuKSx0fWZ1bmN0aW9uIGJhZShlKXt2YXIgdDtyZXR1cm4gdD1uZXcgTWwsdC5lPWUsdH1mdW5jdGlvbiB5NGUoZSl7dmFyIHQ7cmV0dXJuIHQ9bmV3IHpRZSx0LmI9ZSx0fWZ1bmN0aW9uIE9PKCl7T089VSxDSz1uZXcgcFosU0s9bmV3IGRqfWZ1bmN0aW9uIFlxKCl7WXE9VSxLOHQ9bmV3IFNaLEc4dD1uZXcgYlN9ZnVuY3Rpb24gdTAoKXt1MD1VLEo4dD1uZXcgaWVlLFo4dD1uZXcgc2VlfWZ1bmN0aW9uIHgwbihlKXtyZXR1cm4gT3coKSxHcigoSHV0KCksdXh0KSxlKX1mdW5jdGlvbiBrMG4oZSl7cmV0dXJuIHZvKCksR3IoKEt0dCgpLHE4dCksZSl9ZnVuY3Rpb24gRTBuKGUpe3JldHVybiBJVigpLEdyKChMbHQoKSxVOHQpLGUpfWZ1bmN0aW9uIFQwbihlKXtyZXR1cm4gUjEoKSxHcigoQWx0KCksbnh0KSxlKX1mdW5jdGlvbiBDMG4oZSl7cmV0dXJuIFJ5KCksR3IoKG9odCgpLGl4dCksZSl9ZnVuY3Rpb24gUzBuKGUpe3JldHVybiBPVSgpLEdyKChQZnQoKSxseHQpLGUpfWZ1bmN0aW9uIF8wbihlKXtyZXR1cm4geXgoKSxHcigoSWh0KCksaHh0KSxlKX1mdW5jdGlvbiBBMG4oZSl7cmV0dXJuIEpIKCksR3IoKHN1dCgpLGZ4dCksZSl9ZnVuY3Rpb24gTDBuKGUpe3JldHVybiBkQSgpLEdyKCh6dXQoKSxkeHQpLGUpfWZ1bmN0aW9uIE0wbihlKXtyZXR1cm4gcFYoKSxHcigocXV0KCksZ3h0KSxlKX1mdW5jdGlvbiBEMG4oZSl7cmV0dXJuIGwyKCksR3IoKGNodCgpLHB4dCksZSl9ZnVuY3Rpb24gSTBuKGUpe3JldHVybiBwTigpLEdyKCh0dXQoKSxieHQpLGUpfWZ1bmN0aW9uIE8wbihlKXtyZXR1cm4gekUoKSxHcigoUGh0KCksa3h0KSxlKX1mdW5jdGlvbiBOMG4oZSl7cmV0dXJuIEhvKCksR3IoKGYwdCgpLEV4dCksZSl9ZnVuY3Rpb24gUDBuKGUpe3JldHVybiB2RSgpLEdyKChVdXQoKSxUeHQpLGUpfWZ1bmN0aW9uIEIwbihlKXtyZXR1cm4gZXAoKSxHcigoR3V0KCksU3h0KSxlKX1mdW5jdGlvbiBGMG4oZSl7cmV0dXJuIHpIKCksR3IoKGV1dCgpLF94dCksZSl9ZnVuY3Rpb24gUjBuKGUpe3JldHVybiBXTigpLEdyKChOaHQoKSx4eHQpLGUpfWZ1bmN0aW9uIGowbihlKXtyZXR1cm4gVm0oKSxHcigoVnV0KCksdnh0KSxlKX1mdW5jdGlvbiAkMG4oZSl7cmV0dXJuIHlVKCksR3IoKE9odCgpLHd4dCksZSl9ZnVuY3Rpb24gejBuKGUpe3JldHVybiBjTigpLEdyKChudXQoKSx5eHQpLGUpfWZ1bmN0aW9uIHEwbihlKXtyZXR1cm4gaGYoKSxHcigobGh0KCksQXh0KSxlKX1mdW5jdGlvbiBIMG4oZSl7cmV0dXJuIHAyKCksR3IoKEtmdCgpLEprdCksZSl9ZnVuY3Rpb24gVjBuKGUpe3JldHVybiBFQSgpLEdyKChLdXQoKSxaa3QpLGUpfWZ1bmN0aW9uIFUwbihlKXtyZXR1cm4gQnkoKSxHcigoTWx0KCksZUV0KSxlKX1mdW5jdGlvbiBHMG4oZSl7cmV0dXJuIE9BKCksR3IoKHVodCgpLHRFdCksZSl9ZnVuY3Rpb24gSzBuKGUpe3JldHVybiBOZigpLEdyKChkMHQoKSxuRXQpLGUpfWZ1bmN0aW9uIFcwbihlKXtyZXR1cm4gRWQoKSxHcigoRGx0KCksckV0KSxlKX1mdW5jdGlvbiBZMG4oZSl7cmV0dXJuIGROKCksR3IoKHJ1dCgpLGlFdCksZSl9ZnVuY3Rpb24gWDBuKGUpe3JldHVybiBxbygpLEdyKChYdXQoKSxhRXQpLGUpfWZ1bmN0aW9uIFEwbihlKXtyZXR1cm4gTFYoKSxHcigoV3V0KCksb0V0KSxlKX1mdW5jdGlvbiBKMG4oZSl7cmV0dXJuIHlBKCksR3IoKFl1dCgpLGNFdCksZSl9ZnVuY3Rpb24gWjBuKGUpe3JldHVybiBTRSgpLEdyKChRdXQoKSx1RXQpLGUpfWZ1bmN0aW9uIGUxbihlKXtyZXR1cm4gZ1YoKSxHcigoSnV0KCksbEV0KSxlKX1mdW5jdGlvbiB0MW4oZSl7cmV0dXJuIE9WKCksR3IoKFp1dCgpLGhFdCksZSl9ZnVuY3Rpb24gbjFuKGUpe3JldHVybiBJdygpLEdyKChvbHQoKSxfRXQpLGUpfWZ1bmN0aW9uIHIxbihlKXtyZXR1cm4gb0EoKSxHcigoaXV0KCksSUV0KSxlKX1mdW5jdGlvbiBpMW4oZSl7cmV0dXJuIHhkKCksR3IoKGN1dCgpLGpFdCksZSl9ZnVuY3Rpb24gczFuKGUpe3JldHVybiBEMSgpLEdyKCh1dXQoKSx6RXQpLGUpfWZ1bmN0aW9uIGExbihlKXtyZXR1cm4gSjAoKSxHcigobHV0KCksblR0KSxlKX1mdW5jdGlvbiBvMW4oZSl7cmV0dXJuIFN3KCksR3IoKGh1dCgpLHVUdCksZSl9ZnVuY3Rpb24gYzFuKGUpe3JldHVybiB3eCgpLEdyKChSbHQoKSxsVHQpLGUpfWZ1bmN0aW9uIHUxbihlKXtyZXR1cm4gV0EoKSxHcigoV3R0KCksaFR0KSxlKX1mdW5jdGlvbiBsMW4oZSl7cmV0dXJuIHhBKCksR3IoKGVsdCgpLGZUdCksZSl9ZnVuY3Rpb24gaDFuKGUpe3JldHVybiBrQSgpLEdyKChGbHQoKSxQVHQpLGUpfWZ1bmN0aW9uIGYxbihlKXtyZXR1cm4gUkgoKSxHcigoYXV0KCksQlR0KSxlKX1mdW5jdGlvbiBkMW4oZSl7cmV0dXJuIGtWKCksR3IoKG91dCgpLHpUdCksZSl9ZnVuY3Rpb24gZzFuKGUpe3JldHVybiBiVSgpLEdyKChoaHQoKSxIVHQpLGUpfWZ1bmN0aW9uIHAxbihlKXtyZXR1cm4gTE4oKSxHcigodGx0KCksVVR0KSxlKX1mdW5jdGlvbiBiMW4oZSl7cmV0dXJuIGVWKCksR3IoKGZ1dCgpLFZUdCksZSl9ZnVuY3Rpb24gbTFuKGUpe3JldHVybiB1VSgpLEdyKChCbHQoKSxoQ3QpLGUpfWZ1bmN0aW9uIHYxbihlKXtyZXR1cm4gQVYoKSxHcigobmx0KCksZkN0KSxlKX1mdW5jdGlvbiB3MW4oZSl7cmV0dXJuIFdWKCksR3IoKHJsdCgpLGRDdCksZSl9ZnVuY3Rpb24geTFuKGUpe3JldHVybiBzVSgpLEdyKChpbHQoKSxwQ3QpLGUpfWZ1bmN0aW9uIHgxbihlKXtyZXR1cm4gcVYoKSxHcigoc2x0KCksdkN0KSxlKX1mdW5jdGlvbiBrMW4oZSl7cmV0dXJuIEdIKCksR3IoKGR1dCgpLGpDdCksZSl9ZnVuY3Rpb24gRTFuKGUpe3JldHVybiBkRSgpLEdyKChaY3QoKSx6OHQpLGUpfWZ1bmN0aW9uIFQxbihlKXtyZXR1cm4gWm4oKSxHcigoQmh0KCksQjh0KSxlKX1mdW5jdGlvbiBDMW4oZSl7cmV0dXJuIHRWKCksR3IoKGFsdCgpLCRDdCksZSl9ZnVuY3Rpb24gUzFuKGUpe3JldHVybiBmY2UoKSxHcigoZ3V0KCksekN0KSxlKX1mdW5jdGlvbiBfMW4oZSl7cmV0dXJuIFZBKCksR3IoKGZodCgpLEhDdCksZSl9ZnVuY3Rpb24gQTFuKGUpe3JldHVybiBucSgpLEdyKChNY3QoKSxVQ3QpLGUpfWZ1bmN0aW9uIEwxbihlKXtyZXR1cm4gUE4oKSxHcigoZ2x0KCksVkN0KSxlKX1mdW5jdGlvbiBNMW4oZSl7cmV0dXJuIHJxKCksR3IoKERjdCgpLEtDdCksZSl9ZnVuY3Rpb24gRDFuKGUpe3JldHVybiByTigpLEdyKChwdXQoKSxXQ3QpLGUpfWZ1bmN0aW9uIEkxbihlKXtyZXR1cm4gWE4oKSxHcigoZGh0KCksWUN0KSxlKX1mdW5jdGlvbiBPMW4oZSl7cmV0dXJuIGJfKCksR3IoKEljdCgpLGhTdCksZSl9ZnVuY3Rpb24gTjFuKGUpe3JldHVybiBDTigpLEdyKChidXQoKSxmU3QpLGUpfWZ1bmN0aW9uIFAxbihlKXtyZXR1cm4gcjEoKSxHcigocGh0KCksdlN0KSxlKX1mdW5jdGlvbiBCMW4oZSl7cmV0dXJuIGcyKCksR3IoKE9mdCgpLHlTdCksZSl9ZnVuY3Rpb24gRjFuKGUpe3JldHVybiBvZygpLEdyKChGaHQoKSx4U3QpLGUpfWZ1bmN0aW9uIFIxbihlKXtyZXR1cm4gWW0oKSxHcigoUmh0KCksX1N0KSxlKX1mdW5jdGlvbiBqMW4oZSl7cmV0dXJuIEpzKCksR3IoKGdodCgpLEdTdCksZSl9ZnVuY3Rpb24gJDFuKGUpe3JldHVybiBGMSgpLEdyKChwbHQoKSxLU3QpLGUpfWZ1bmN0aW9uIHoxbihlKXtyZXR1cm4gaXAoKSxHcigoamx0KCksV1N0KSxlKX1mdW5jdGlvbiBxMW4oZSl7cmV0dXJuIHZVKCksR3IoKGpodCgpLFlTdCksZSl9ZnVuY3Rpb24gSDFuKGUpe3JldHVybiBycCgpLEdyKChkbHQoKSxRU3QpLGUpfWZ1bmN0aW9uIFYxbihlKXtyZXR1cm4gSWgoKSxHcigoJGx0KCksWlN0KSxlKX1mdW5jdGlvbiBVMW4oZSl7cmV0dXJuIHF5KCksR3IoKFlmdCgpLGVfdCksZSl9ZnVuY3Rpb24gRzFuKGUpe3JldHVybiB0NigpLEdyKChiaHQoKSx0X3QpLGUpfWZ1bmN0aW9uIEsxbihlKXtyZXR1cm4gUmEoKSxHcigoJGh0KCksbl90KSxlKX1mdW5jdGlvbiBXMW4oZSl7cmV0dXJuIFJsKCksR3IoKHpodCgpLHJfdCksZSl9ZnVuY3Rpb24gWTFuKGUpe3JldHVybiBDdCgpLEdyKChtaHQoKSxpX3QpLGUpfWZ1bmN0aW9uIFgxbihlKXtyZXR1cm4gbWgoKSxHcigoemx0KCksdV90KSxlKX1mdW5jdGlvbiBRMW4oZSl7cmV0dXJuIFpsKCksR3IoKFdmdCgpLGxfdCksZSl9ZnVuY3Rpb24gSjFuKGUpe3JldHVybiBkeCgpLEdyKChibHQoKSxoX3QpLGUpfWZ1bmN0aW9uIFoxbihlLHQpe3JldHVybiBucihlKSxlKyhucih0KSx0KX1mdW5jdGlvbiBlZG4oZSl7cmV0dXJuIG1hZSgpLEdyKChtdXQoKSxmX3QpLGUpfWZ1bmN0aW9uIHRkbihlKXtyZXR1cm4gVlYoKSxHcigocWx0KCksZF90KSxlKX1mdW5jdGlvbiBuZG4oZSl7cmV0dXJuIE5WKCksR3IoKEhsdCgpLGJfdCksZSl9ZnVuY3Rpb24gamsoKXtqaz1VLCREZT0oQ3QoKSxlciksRFc9YXJ9ZnVuY3Rpb24gbWFlKCl7bWFlPVUsclBlPW5ldyBXaXQsaVBlPW5ldyBPc3R9ZnVuY3Rpb24gcmRuKGUpe3JldHVybiFlLmUmJihlLmU9bmV3IGJ0KSxlLmV9ZnVuY3Rpb24gdmFlKGUsdCl7dGhpcy5jPWUsdGhpcy5hPXQsdGhpcy5iPXQtZX1mdW5jdGlvbiB3aXQoZSx0LG4pe3RoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1ufWZ1bmN0aW9uIHdhZShlLHQsbil7dGhpcy5hPWUsdGhpcy5iPXQsdGhpcy5jPW59ZnVuY3Rpb24geDRlKGUsdCxuKXt0aGlzLmE9ZSx0aGlzLmI9dCx0aGlzLmM9bn1mdW5jdGlvbiBrNGUoZSx0LG4pe3RoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1ufWZ1bmN0aW9uIHlpdChlLHQsbil7dGhpcy5hPWUsdGhpcy5iPXQsdGhpcy5jPW59ZnVuY3Rpb24geGl0KGUsdCxuKXt0aGlzLmE9ZSx0aGlzLmI9dCx0aGlzLmM9bn1mdW5jdGlvbiBYcChlLHQsbil7dGhpcy5lPWUsdGhpcy5hPXQsdGhpcy5jPW59ZnVuY3Rpb24ga2l0KGUsdCxuKXtKaCgpLCQ1ZS5jYWxsKHRoaXMsZSx0LG4pfWZ1bmN0aW9uIHlhZShlLHQsbil7SmgoKSxFNWUuY2FsbCh0aGlzLGUsdCxuKX1mdW5jdGlvbiBFNGUoZSx0LG4pe0poKCksRTVlLmNhbGwodGhpcyxlLHQsbil9ZnVuY3Rpb24gVDRlKGUsdCxuKXtKaCgpLEU1ZS5jYWxsKHRoaXMsZSx0LG4pfWZ1bmN0aW9uIEVpdChlLHQsbil7SmgoKSx5YWUuY2FsbCh0aGlzLGUsdCxuKX1mdW5jdGlvbiBDNGUoZSx0LG4pe0poKCkseWFlLmNhbGwodGhpcyxlLHQsbil9ZnVuY3Rpb24gVGl0KGUsdCxuKXtKaCgpLEM0ZS5jYWxsKHRoaXMsZSx0LG4pfWZ1bmN0aW9uIENpdChlLHQsbil7SmgoKSxFNGUuY2FsbCh0aGlzLGUsdCxuKX1mdW5jdGlvbiBTaXQoZSx0LG4pe0poKCksVDRlLmNhbGwodGhpcyxlLHQsbil9ZnVuY3Rpb24geGFlKGUpe3NILmNhbGwodGhpcyxlLmQsZS5jLGUuYSxlLmIpfWZ1bmN0aW9uIFM0ZShlKXtzSC5jYWxsKHRoaXMsZS5kLGUuYyxlLmEsZS5iKX1mdW5jdGlvbiBfNGUoZSl7dGhpcy5kPWUsTXIodGhpcyksdGhpcy5iPW5nbihlLmQpfWZ1bmN0aW9uIGlkbihlKXtyZXR1cm4gSEUoKSxHcigoTmZ0KCksTF90KSxlKX1mdW5jdGlvbiBOTyhlLHQpe3JldHVybiBYcihlKSxYcih0KSxuZXcgSVplKGUsdCl9ZnVuY3Rpb24gRzgoZSx0KXtyZXR1cm4gWHIoZSksWHIodCksbmV3IGppdChlLHQpfWZ1bmN0aW9uIHNkbihlLHQpe3JldHVybiBYcihlKSxYcih0KSxuZXcgJGl0KGUsdCl9ZnVuY3Rpb24gYWRuKGUsdCl7cmV0dXJuIFhyKGUpLFhyKHQpLG5ldyB6WmUoZSx0KX1mdW5jdGlvbiBrYWUoZSl7cmV0dXJuIG1yKGUuYiE9MCksYWYoZSxlLmEuYSl9ZnVuY3Rpb24gb2RuKGUpe3JldHVybiBtcihlLmIhPTApLGFmKGUsZS5jLmIpfWZ1bmN0aW9uIGNkbihlKXtyZXR1cm4hZS5jJiYoZS5jPW5ldyBYZCksZS5jfWZ1bmN0aW9uICRrKGUpe3ZhciB0O3JldHVybiB0PW5ldyBidCxHb2UodCxlKSx0fWZ1bmN0aW9uIHVkbihlKXt2YXIgdDtyZXR1cm4gdD1uZXcgS3MsR29lKHQsZSksdH1mdW5jdGlvbiBfaXQoZSl7dmFyIHQ7cmV0dXJuIHQ9bmV3IEx3ZSxzY2UodCxlKSx0fWZ1bmN0aW9uIFBPKGUpe3ZhciB0O3JldHVybiB0PW5ldyBvcyxzY2UodCxlKSx0fWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4gVl8oZT09bnVsbHx8aXVlKGUsdCkpLGV9ZnVuY3Rpb24gbGRuKGUsdCxuKXtTc3QuY2FsbCh0aGlzLHQsbiksdGhpcy5hPWV9ZnVuY3Rpb24gQWl0KGUsdCl7dGhpcy5jPWUsdGhpcy5iPXQsdGhpcy5hPSExfWZ1bmN0aW9uIExpdCgpe3RoaXMuYT0iOyw7Iix0aGlzLmI9IiIsdGhpcy5jPSIifWZ1bmN0aW9uIE1pdChlLHQsbil7dGhpcy5iPWUsenR0LmNhbGwodGhpcyx0LG4pfWZ1bmN0aW9uIEE0ZShlLHQsbil7dGhpcy5jPWUsY3EuY2FsbCh0aGlzLHQsbil9ZnVuY3Rpb24gTDRlKGUsdCxuKXtJay5jYWxsKHRoaXMsZSx0KSx0aGlzLmI9bn1mdW5jdGlvbiBNNGUoZSx0LG4pe2s5ZShuLDAsZSx0LG4ubGVuZ3RoLCExKX1mdW5jdGlvbiB0ZyhlLHQsbixyLGEpe2UuYj10LGUuYz1uLGUuZD1yLGUuYT1hfWZ1bmN0aW9uIEQ0ZShlLHQsbixyLGEpe2UuZD10LGUuYz1uLGUuYT1yLGUuYj1hfWZ1bmN0aW9uIGhkbihlLHQpe3QmJihlLmI9dCxlLmE9KGZiKHQpLHQuYSkpfWZ1bmN0aW9uIEJPKGUsdCl7aWYoIWUpdGhyb3cgdWUobmV3IFluKHQpKX1mdW5jdGlvbiBLOChlLHQpe2lmKCFlKXRocm93IHVlKG5ldyBuYyh0KSl9ZnVuY3Rpb24gSTRlKGUsdCl7aWYoIWUpdGhyb3cgdWUobmV3IEJKZSh0KSl9ZnVuY3Rpb24gZmRuKGUsdCl7cmV0dXJuIGVxKCkscnUoZS5kLnAsdC5kLnApfWZ1bmN0aW9uIGRkbihlLHQpe3JldHVybiB0cCgpLFlpKGUuZS5iLHQuZS5iKX1mdW5jdGlvbiBnZG4oZSx0KXtyZXR1cm4gdHAoKSxZaShlLmUuYSx0LmUuYSl9ZnVuY3Rpb24gcGRuKGUsdCl7cmV0dXJuIHJ1KFVpdChlLmQpLFVpdCh0LmQpKX1mdW5jdGlvbiBYcShlLHQpe3JldHVybiB0JiZ5SChlLHQuZCk/dDpudWxsfWZ1bmN0aW9uIGJkbihlLHQpe3JldHVybiB0PT0oQ3QoKSxlcik/ZS5jOmUuZH1mdW5jdGlvbiBPNGUoZSl7cmV0dXJuIG1iKHBnbih3YyhlKT9NZihlKTplKSl9ZnVuY3Rpb24gbWRuKGUpe3JldHVybiBuZXcgbHQoZS5jK2UuYixlLmQrZS5hKX1mdW5jdGlvbiBEaXQoZSl7cmV0dXJuIGUhPW51bGwmJiFIY2UoZSwkTSx6TSl9ZnVuY3Rpb24gdmRuKGUsdCl7cmV0dXJuKHUxdChlKTw8NHx1MXQodCkpJlpzfWZ1bmN0aW9uIElpdChlLHQsbixyLGEpe2UuYz10LGUuZD1uLGUuYj1yLGUuYT1hfWZ1bmN0aW9uIE40ZShlKXt2YXIgdCxuO3Q9ZS5iLG49ZS5jLGUuYj1uLGUuYz10fWZ1bmN0aW9uIFA0ZShlKXt2YXIgdCxuO249ZS5kLHQ9ZS5hLGUuZD10LGUuYT1ufWZ1bmN0aW9uIHdkbihlLHQpe3ZhciBuO3JldHVybiBuPWUuYyxkN2UoZSx0KSxufWZ1bmN0aW9uIEI0ZShlLHQpe3JldHVybiB0PDA/ZS5nPS0xOmUuZz10LGV9ZnVuY3Rpb24gUXEoZSx0KXtyZXR1cm4gX3duKGUpLGUuYSo9dCxlLmIqPXQsZX1mdW5jdGlvbiBPaXQoZSx0LG4pe19odC5jYWxsKHRoaXMsdCxuKSx0aGlzLmQ9ZX1mdW5jdGlvbiBGTyhlLHQsbil7dHllLmNhbGwodGhpcyxlLHQpLHRoaXMuYz1ufWZ1bmN0aW9uIEpxKGUsdCxuKXt0eWUuY2FsbCh0aGlzLGUsdCksdGhpcy5jPW59ZnVuY3Rpb24gRjRlKGUpe3A0ZSgpLG01LmNhbGwodGhpcyksdGhpcy5jaShlKX1mdW5jdGlvbiBOaXQoKXtlRSgpLCRnbi5jYWxsKHRoaXMsKGliKCksR2YpKX1mdW5jdGlvbiBQaXQoZSl7cmV0dXJuIERpKCksbmV3IG5nKDAsZSl9ZnVuY3Rpb24gQml0KCl7Qml0PVUsc3BlPShDbigpLG5ldyBEYShjMGUpKX1mdW5jdGlvbiBacSgpe1pxPVUsbmV3IFc4ZSgoR2llKCkseTBlKSwoVWllKCksdzBlKSl9ZnVuY3Rpb24gRml0KCl7Rml0PVUsdF9lPVdlKHJvLGR0LDE3LDI1NiwwLDEpfWZ1bmN0aW9uIFJpdCgpe3RoaXMuYj16ZShHZShJdCgoYjAoKSxaMGUpKSkpfWZ1bmN0aW9uIEVhZShlKXt0aGlzLmI9ZSx0aGlzLmE9TW0odGhpcy5iLmEpLk9kKCl9ZnVuY3Rpb24gaml0KGUsdCl7dGhpcy5iPWUsdGhpcy5hPXQsR1MuY2FsbCh0aGlzKX1mdW5jdGlvbiAkaXQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dCxHUy5jYWxsKHRoaXMpfWZ1bmN0aW9uIHppdChlLHQsbil7dGhpcy5hPWUsTjUuY2FsbCh0aGlzLHQsbil9ZnVuY3Rpb24gcWl0KGUsdCxuKXt0aGlzLmE9ZSxONS5jYWxsKHRoaXMsdCxuKX1mdW5jdGlvbiB6ayhlLHQsbil7dmFyIHI7cj1uZXcgeXkobiksZTEoZSx0LHIpfWZ1bmN0aW9uIFI0ZShlLHQsbil7dmFyIHI7cmV0dXJuIHI9ZVt0XSxlW3RdPW4scn1mdW5jdGlvbiBlSChlKXt2YXIgdDtyZXR1cm4gdD1lLnNsaWNlKCksam9lKHQsZSl9ZnVuY3Rpb24gdEgoZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5uLGUuYS5iK3QuZCt0LmF9ZnVuY3Rpb24gSGl0KGUpe3ZhciB0O3JldHVybiB0PWUubixlLmUuYit0LmQrdC5hfWZ1bmN0aW9uIGo0ZShlKXt2YXIgdDtyZXR1cm4gdD1lLm4sZS5lLmErdC5iK3QuY31mdW5jdGlvbiAkNGUoZSl7ZS5hLmI9ZS5iLGUuYi5hPWUuYSxlLmE9ZS5iPW51bGx9ZnVuY3Rpb24gdWkoZSx0KXtyZXR1cm4gQ3MoZSx0LGUuYy5iLGUuYyksITB9ZnVuY3Rpb24geWRuKGUpe3JldHVybiBlLmE/ZS5hOlFhZShlKX1mdW5jdGlvbiB4ZG4oZSl7cmV0dXJuIHR4KCksY2coZSk9PWRzKEViKGUpKX1mdW5jdGlvbiBrZG4oZSl7cmV0dXJuIHR4KCksRWIoZSk9PWRzKGNnKGUpKX1mdW5jdGlvbiBndyhlLHQpe3JldHVybiBSQShlLG5ldyBJayh0LmEsdC5iKSl9ZnVuY3Rpb24gRWRuKGUsdCl7cmV0dXJuIGtIKCksZnVlKGUsdCksbmV3IGhhdChlLHQpfWZ1bmN0aW9uIFRkbihlLHQpe3JldHVybiBlLmM8dC5jPy0xOmUuYz09dC5jPzA6MX1mdW5jdGlvbiBWaXQoZSl7cmV0dXJuIGUuYi5jLmxlbmd0aC1lLmUuYy5sZW5ndGh9ZnVuY3Rpb24gVWl0KGUpe3JldHVybiBlLmUuYy5sZW5ndGgtZS5nLmMubGVuZ3RofWZ1bmN0aW9uIFRhZShlKXtyZXR1cm4gZS5lLmMubGVuZ3RoK2UuZy5jLmxlbmd0aH1mdW5jdGlvbiBSTyhlKXtyZXR1cm4gZT09MHx8aXNOYU4oZSk/ZTplPDA/LTE6MX1mdW5jdGlvbiBDZG4oZSl7cmV0dXJuIURvKGUpJiZlLmMuaS5jPT1lLmQuaS5jfWZ1bmN0aW9uIFNkbihlKXtyZXR1cm4gU2goKSwoQ3QoKSxKdSkuSGMoZS5qKX1mdW5jdGlvbiBfZG4oZSx0LG4pe3JldHVybiB0cCgpLG4uZS5hK24uZi5hK2UqdH1mdW5jdGlvbiBBZG4oZSx0LG4pe3JldHVybiB0cCgpLG4uZS5iK24uZi5iK2UqdH1mdW5jdGlvbiBMZG4oZSx0LG4pe3JldHVybiBraShlLmIsbChuLmIsMTgpLHQpfWZ1bmN0aW9uIE1kbihlLHQsbil7cmV0dXJuIGtpKGUuYixsKG4uYiwxOCksdCl9ZnVuY3Rpb24gRGRuKGUsdCxuKXttRG4oZS5hLGUuYixlLmMsbCh0LDE2Niksbil9ZnVuY3Rpb24gejRlKGUsdCxuLHIpe3o4ZS5jYWxsKHRoaXMsZSx0LG4sciwwLDApfWZ1bmN0aW9uIEdpdChlKXtwNGUoKSxGNGUuY2FsbCh0aGlzLGUpLHRoaXMuYT0tMX1mdW5jdGlvbiBLaXQoZSx0KXtTc3QuY2FsbCh0aGlzLHQsMTA0MCksdGhpcy5hPWV9ZnVuY3Rpb24gV2l0KCl7Y3R0LmNhbGwodGhpcywiQ09VTlRfQ0hJTERSRU4iLDApfWZ1bmN0aW9uIG5IKGUsdCl7eU8uY2FsbCh0aGlzLGUsdCksdGhpcy5hPXRoaXN9ZnVuY3Rpb24ga3MoZSx0KXt2YXIgbjtyZXR1cm4gbj1HYWUoZSx0KSxuLmk9MixufWZ1bmN0aW9uIHJIKGUsdCl7dmFyIG47cmV0dXJuKytlLmosbj1lLkNqKHQpLG59ZnVuY3Rpb24gZmkoZSx0LG4pe3JldHVybiBlLmE9LTEsQnllKGUsdC5nLG4pLGV9ZnVuY3Rpb24gSWRuKGUsdCl7cmV0dXJuIHZ0KGUsbmV3IGx0KHQuYSx0LmIpKX1mdW5jdGlvbiBZaXQoZSl7cmV0dXJuIHV4KCksV2UoUFcsSUcsNDAsZSwwLDEpfWZ1bmN0aW9uIFhpdChlKXtyZXR1cm4gZS5lLlJkKCkuZ2MoKSplLmMuUmQoKS5nYygpfWZ1bmN0aW9uIENhZShlLHQsbil7cmV0dXJuIG5ldyBzaXQocWduKGUpLl9lKCksbix0KX1mdW5jdGlvbiBPZG4oZSx0KXtnN2UoZSx0PT1udWxsP251bGw6KG5yKHQpLHQpKX1mdW5jdGlvbiBOZG4oZSx0KXtmN2UoZSx0PT1udWxsP251bGw6KG5yKHQpLHQpKX1mdW5jdGlvbiBQZG4oZSx0KXtmN2UoZSx0PT1udWxsP251bGw6KG5yKHQpLHQpKX1mdW5jdGlvbiBWXyhlKXtpZighZSl0aHJvdyB1ZShuZXcga2sobnVsbCkpfWZ1bmN0aW9uIHE0ZShlKXtpZihlLmMuZSE9ZS5hKXRocm93IHVlKG5ldyBYaCl9ZnVuY3Rpb24gSDRlKGUpe2lmKGUuZS5jIT1lLmIpdGhyb3cgdWUobmV3IFhoKX1mdW5jdGlvbiBpSChlKXtmb3IoWHIoZSk7ZS5PYigpOyllLlBiKCksZS5RYigpfWZ1bmN0aW9uIFNhZShlKXt3dygpLHRoaXMuYT0oQ24oKSxuZXcgRGEoWHIoZSkpKX1mdW5jdGlvbiBWNGUoZSl7dGhpcy5jPWUsdGhpcy5iPXRoaXMuYy5kLnZjKCkuS2MoKX1mdW5jdGlvbiBCZG4oZSl7ZS5hLmxkKCksbChlLmEubWQoKSwxNikuZ2MoKSxad2UoKX1mdW5jdGlvbiBRaXQoZSx0KXtyZXR1cm4gZS5hKz1JZih0LDAsdC5sZW5ndGgpLGV9ZnVuY3Rpb24ganQoZSx0KXtyZXR1cm4gU24odCxlLmMubGVuZ3RoKSxlLmNbdF19ZnVuY3Rpb24gSml0KGUsdCl7cmV0dXJuIFNuKHQsZS5hLmxlbmd0aCksZS5hW3RdfWZ1bmN0aW9uIEZkbihlLHQpe3JldHVybiBucih0KSx2Tih0LChucihlKSxlKSl9ZnVuY3Rpb24gUmRuKGUsdCl7cmV0dXJuIG5yKGUpLHZOKGUsKG5yKHQpLHQpKX1mdW5jdGlvbiBMbShlLHQsbixyLGEsbyl7cmV0dXJuIGtndChlLHQsbixyLGEsMCxvKX1mdW5jdGlvbiBqZG4oZSx0KXtyZXR1cm4gVHModCwwLFU0ZSh0WzBdLGFwKDEpKSl9ZnVuY3Rpb24gJGRuKGUsdCl7cmV0dXJuIGFwKGJvKGFwKGUuYSkuYSx0LmEpKX1mdW5jdGlvbiBVNGUoZSx0KXtyZXR1cm4gJGRuKGwoZSwxNjgpLGwodCwxNjgpKX1mdW5jdGlvbiBaaXQoKXtaaXQ9VSxuX2U9V2UocjMsZHQsMTY4LDI1NiwwLDEpfWZ1bmN0aW9uIGVzdCgpe2VzdD1VLHNfZT1XZShpMyxkdCwxOTEsMjU2LDAsMSl9ZnVuY3Rpb24gdHN0KCl7dHN0PVUsSlNlPVdlKGp4LGR0LDIyMiwyNTYsMCwxKX1mdW5jdGlvbiBuc3QoKXtuc3Q9VSxlX2U9V2UoUEwsZHQsMTgwLDEyOCwwLDEpfWZ1bmN0aW9uIEc0ZSgpe3RnKHRoaXMsITEsITEsITEsITEpfWZ1bmN0aW9uIEs0ZShlKXt3ci5jYWxsKHRoaXMsbmV3IGUyKSxLYSh0aGlzLGUpfWZ1bmN0aW9uIFVfKGUpe3RoaXMuYT1uZXcgTjgoZS5nYygpKSxLYSh0aGlzLGUpfWZ1bmN0aW9uIHJzdChlKXt0aGlzLmM9ZSx0aGlzLmE9bmV3IFA4KHRoaXMuYy5hKX1mdW5jdGlvbiBpc3QoZSl7dGhpcy5hPWUsdGhpcy5jPW5ldyBQcix1eW4odGhpcyl9ZnVuY3Rpb24gc3N0KCl7dGhpcy5kPW5ldyBsdCgwLDApLHRoaXMuZT1uZXcgS3N9ZnVuY3Rpb24gYm4oZSx0KXtBbSgpLFBvZS5jYWxsKHRoaXMsZSksdGhpcy5hPXR9ZnVuY3Rpb24gc0goZSx0LG4scil7RDRlKHRoaXMsZSx0LG4scil9ZnVuY3Rpb24gemRuKGUsdCxuKXtyZXR1cm4gcnUodC5kW2UuZ10sbi5kW2UuZ10pfWZ1bmN0aW9uIHFkbihlLHQsbil7cmV0dXJuIHJ1KGUuZFt0LnBdLGUuZFtuLnBdKX1mdW5jdGlvbiBIZG4oZSx0LG4pe3JldHVybiBydShlLmRbdC5wXSxlLmRbbi5wXSl9ZnVuY3Rpb24gVmRuKGUsdCxuKXtyZXR1cm4gcnUoZS5kW3QucF0sZS5kW24ucF0pfWZ1bmN0aW9uIFVkbihlLHQsbil7cmV0dXJuIHJ1KGUuZFt0LnBdLGUuZFtuLnBdKX1mdW5jdGlvbiBhSChlLHQsbil7cmV0dXJuIGIuTWF0aC5taW4obi9lLDEvdCl9ZnVuY3Rpb24gYXN0KGUsdCl7cmV0dXJuIGU/MDpiLk1hdGgubWF4KDAsdC0xKX1mdW5jdGlvbiBfYWUoZSx0KXtyZXR1cm4gZT09bnVsbD90PT1udWxsOnZuKGUsdCl9ZnVuY3Rpb24gR2RuKGUsdCl7cmV0dXJuIGU9PW51bGw/dD09bnVsbDpRVihlLHQpfWZ1bmN0aW9uIG9zdChlKXtyZXR1cm4gZS5xP2UucTooQ24oKSxDbigpLG1nKX1mdW5jdGlvbiBjc3QoZSl7cmV0dXJuIGUuYy1sKGp0KGUuYSxlLmIpLDI5NCkuYn1mdW5jdGlvbiBnaChlKXtyZXR1cm4gZS5jP2UuYy5mOmUuZS5ifWZ1bmN0aW9uIHdsKGUpe3JldHVybiBlLmM/ZS5jLmc6ZS5lLmF9ZnVuY3Rpb24gS2RuKGUsdCl7cmV0dXJuIGUuYT09bnVsbCYmSGJ0KGUpLGUuYVt0XX1mdW5jdGlvbiB1c3QoZSl7dmFyIHQ7cmV0dXJuIHQ9VGd0KGUpLHQ/dXN0KHQpOmV9ZnVuY3Rpb24gb0goZSx0KXtyZXR1cm4gRGkoKSxuZXcgZjVlKGUsdCl9ZnVuY3Rpb24gbmcoZSx0KXtEaSgpLFh2LmNhbGwodGhpcyxlKSx0aGlzLmE9dH1mdW5jdGlvbiBjSChlLHQpe0poKCksTnouY2FsbCh0aGlzLHQpLHRoaXMuYT1lfWZ1bmN0aW9uIEdfKGUsdCxuKXt0aGlzLmE9ZSxZcy5jYWxsKHRoaXMsdCxuLDIpfWZ1bmN0aW9uIGxzdChlKXt0aGlzLmI9bmV3IG9zLHRoaXMuYT1lLHRoaXMuYz0tMX1mdW5jdGlvbiBoc3QoZSl7TnllLmNhbGwodGhpcywwLDApLHRoaXMuYT1lLHRoaXMuYj0wfWZ1bmN0aW9uIHVIKGUpe0x3LmNhbGwodGhpcyxlLmdjKCkpLEFzKHRoaXMsZSl9ZnVuY3Rpb24gbEgoZSl7ZS5iP2xIKGUuYik6ZS5kLmRjKCkmJmUuZi5jLkJjKGUuZSl9ZnVuY3Rpb24gVzRlKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlLlRtPT09eGV9ZnVuY3Rpb24gQWFlKGUsdCl7cmV0dXJuIERlKHQsMjIpJiZ2bChlLGwodCwyMikpfWZ1bmN0aW9uIGZzdChlLHQpe3JldHVybiBEZSh0LDIyKSYma3duKGUsbCh0LDIyKSl9ZnVuY3Rpb24gem8oZSx0KXtyZXR1cm4gUjB0KGUsdCxKbW4oZSxlLmIuQ2UodCkpKX1mdW5jdGlvbiBXZG4oZSx0KXtyZXR1cm4gZS5hLmdldCh0KSE9PXZvaWQgMH1mdW5jdGlvbiBZNGUoZSl7cmV0dXJuIEpsKGUsMjYpKmlMK0psKGUsMjcpKnNMfWZ1bmN0aW9uIGRzdChlLHQpe3JldHVybiB6d24obmV3IHpzLG5ldyBaMihlKSx0KX1mdW5jdGlvbiBMYWUoZSx0LG4pe0IwdCgwLHQsZS5sZW5ndGgpLG5FKGUsMCx0LG4pfWZ1bmN0aW9uIHB3KGUsdCxuKXtFeSh0LGUuYy5sZW5ndGgpLHhfKGUuYyx0LG4pfWZ1bmN0aW9uIGhIKGUsdCxuKXt2YXIgcjtlJiYocj1lLmksci5jPXQsci5iPW4pfWZ1bmN0aW9uIGZIKGUsdCxuKXt2YXIgcjtlJiYocj1lLmksci5kPXQsci5hPW4pfWZ1bmN0aW9uIGdzdChlLHQsbil7dmFyIHI7Zm9yKHI9MDtyPHQ7KytyKWVbcl09bn1mdW5jdGlvbiBZZG4oZSx0KXt2YXIgbjtmb3Iobj0wO248dDsrK24pZVtuXT0tMX1mdW5jdGlvbiBycyhlLHQpe3ZhciBuO3JldHVybiBuPXVuKGUpLGo3ZShuLHQpLG59ZnVuY3Rpb24gWGRuKGUsdCl7cmV0dXJuIWUmJihlPVtdKSxlW2UubGVuZ3RoXT10LGV9ZnVuY3Rpb24gTWFlKGUsdCl7T2koZS5jLHQpLGUuYi5jKz10LmEsZS5iLmQrPXQuYn1mdW5jdGlvbiBRZG4oZSx0KXtNYWUoZSxtYShuZXcgbHQodC5hLHQuYiksZS5jKSl9ZnVuY3Rpb24gRGFlKGUsdCl7dGhpcy5iPW5ldyBvcyx0aGlzLmE9ZSx0aGlzLmM9dH1mdW5jdGlvbiBwc3QoKXt0aGlzLmI9bmV3IFgzLHRoaXMuYz1uZXcgWWF0KHRoaXMpfWZ1bmN0aW9uIFg0ZSgpe3RoaXMuZD1uZXcgZGEsdGhpcy5lPW5ldyBXYXQodGhpcyl9ZnVuY3Rpb24gUTRlKCl7VTVlKCksdGhpcy5mPW5ldyBvcyx0aGlzLmU9bmV3IG9zfWZ1bmN0aW9uIGJzdCgpe1NoKCksdGhpcy5rPW5ldyBQcix0aGlzLmQ9bmV3IEtzfWZ1bmN0aW9uIElhZSgpe0lhZT1VLHZfdD1uZXcgSGEoKHBpKCkscmgpLDApfWZ1bmN0aW9uIG1zdCgpe21zdD1VLHM2dD1uZXcgaHN0KFdlKHdhLFJuLDEsMCw1LDEpKX1mdW5jdGlvbiBKZG4oZSx0LG4pe3JldHVybiBuYShlLG5ldyBCOCh0LmEsbi5hKSl9ZnVuY3Rpb24gWmRuKGUsdCxuKXtyZXR1cm4tcnUoZS5mW3QucF0sZS5mW24ucF0pfWZ1bmN0aW9uIGVnbihlLHQsbil7STJ0KG4sZSwxKSx2dCh0LG5ldyBJZXQobixlKSl9ZnVuY3Rpb24gdGduKGUsdCxuKXtGQShuLGUsMSksdnQodCxuZXcgUGV0KG4sZSkpfWZ1bmN0aW9uIHZzdChlLHQsbil7dGhpcy5hPWUsQnEuY2FsbCh0aGlzLHQsbiwyMil9ZnVuY3Rpb24gd3N0KGUsdCxuKXt0aGlzLmE9ZSxCcS5jYWxsKHRoaXMsdCxuLDE0KX1mdW5jdGlvbiB5c3QoZSx0LG4scil7SmgoKSxpY3QuY2FsbCh0aGlzLGUsdCxuLHIpfWZ1bmN0aW9uIHhzdChlLHQsbixyKXtKaCgpLGljdC5jYWxsKHRoaXMsZSx0LG4scil9ZnVuY3Rpb24geWwoZSx0LG4pe3JldHVybiBlLmE9LTEsQnllKGUsdC5nKzEsbiksZX1mdW5jdGlvbiBKNGUoZSx0LG4pe3JldHVybiBuPU5oKGUsbCh0LDU0KSw3LG4pLG59ZnVuY3Rpb24gWjRlKGUsdCxuKXtyZXR1cm4gbj1OaChlLGwodCw1NCksMyxuKSxufWZ1bmN0aW9uIFlyKGUpe3JldHVybiB3YyhlKT9lfDA6clplKGUpfWZ1bmN0aW9uIGtzdChlKXtyZXR1cm4gRGkoKSxuZXcgY29lKDEwLGUsMCl9ZnVuY3Rpb24gRXN0KGUpe3ZhciB0O3JldHVybiB0PWUuZix0fHwoZS5mPWUuRGMoKSl9ZnVuY3Rpb24gVzgoZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5pLHR8fChlLmk9ZS5iYygpKX1mdW5jdGlvbiBkSChlKXtpZihlLmUuaiE9ZS5kKXRocm93IHVlKG5ldyBYaCl9ZnVuY3Rpb24gTW0oZSl7cmV0dXJuIGUuYz9lLmM6ZS5jPWUuU2QoKX1mdW5jdGlvbiBPYWUoZSl7cmV0dXJuIGUuZD9lLmQ6ZS5kPWUuVGQoKX1mdW5jdGlvbiBLXyhlLHQpe3JldHVybiBVNW4obE4oZSx0KSk/dC56aSgpOm51bGx9ZnVuY3Rpb24gbmduKGUpe3JldHVybiBEZShlLDE1KT9sKGUsMTUpLmVkKCk6ZS5LYygpfWZ1bmN0aW9uIGU1ZShlKXtyZXR1cm4gZS5RYyhXZSh3YSxSbiwxLGUuZ2MoKSw1LDEpKX1mdW5jdGlvbiBUc3QoZSl7cmV0dXJuIGUhPW51bGwmJlJhZShlKSYmZS5UbSE9PXhlfWZ1bmN0aW9uIHQ1ZShlKXtyZXR1cm4hQXJyYXkuaXNBcnJheShlKSYmZS5UbT09PXhlfWZ1bmN0aW9uIENzdChlLHQpe3JldHVybiBYcih0KSxlLmEuSmQodCkmJiFlLmIuSmQodCl9ZnVuY3Rpb24gcmduKGUsdCl7cmV0dXJuIHF1KGUubCZ0LmwsZS5tJnQubSxlLmgmdC5oKX1mdW5jdGlvbiBpZ24oZSx0KXtyZXR1cm4gcXUoZS5sfHQubCxlLm18dC5tLGUuaHx0LmgpfWZ1bmN0aW9uIHNnbihlLHQpe3JldHVybiBxdShlLmxedC5sLGUubV50Lm0sZS5oXnQuaCl9ZnVuY3Rpb24gbDAoZSx0KXtyZXR1cm4gbWIobnB0KHdjKGUpP01mKGUpOmUsdCkpfWZ1bmN0aW9uIGJ3KGUsdCl7cmV0dXJuIG1iKEQ5ZSh3YyhlKT9NZihlKTplLHQpKX1mdW5jdGlvbiB1YihlLHQpe3JldHVybiBtYigkOW4od2MoZSk/TWYoZSk6ZSx0KSl9ZnVuY3Rpb24gYWduKGUsdCl7cmV0dXJuIENmbigobnIoZSksZSksKG5yKHQpLHQpKX1mdW5jdGlvbiBOYWUoZSx0KXtyZXR1cm4gWWkoKG5yKGUpLGUpLChucih0KSx0KSl9ZnVuY3Rpb24gZ0goZSl7dGhpcy5iPW5ldyBCdSgxMSksdGhpcy5hPShFdygpLGUpfWZ1bmN0aW9uIGhyKGUpe3RoaXMuYT0obXN0KCksczZ0KSx0aGlzLmQ9bChYcihlKSw1MSl9ZnVuY3Rpb24gU3N0KGUsdCl7dGhpcy5jPTAsdGhpcy5kPWUsdGhpcy5iPXR8NjR8X2R9ZnVuY3Rpb24gbjVlKGUsdCl7dGhpcy5lPWUsdGhpcy5kPXQmNjQ/dHxfZDp0fWZ1bmN0aW9uIFBhZShlKXt0aGlzLmI9bnVsbCx0aGlzLmE9KEV3KCksZXx8ZF9lKX1mdW5jdGlvbiBfc3QoZSl7RnEodGhpcyksdGhpcy5nPWUsU0godGhpcyksdGhpcy5qZSgpfWZ1bmN0aW9uIERtKGUpe3NiKCksdGhpcy5hPTAsdGhpcy5iPWUtMSx0aGlzLmM9MX1mdW5jdGlvbiByNWUoZSx0LG4scil7dGhpcy5hPWUsWUguY2FsbCh0aGlzLGUsdCxuLHIpfWZ1bmN0aW9uIG9nbihlLHQsbil7ZS5hLk1iKG4pJiYoZS5iPSEwLHQuQ2QobikpfWZ1bmN0aW9uIGk1ZShlKXtlLmR8fChlLmQ9ZS5iLktjKCksZS5jPWUuYi5nYygpKX1mdW5jdGlvbiBxayhlLHQpe2lmKGU8MHx8ZT49dCl0aHJvdyB1ZShuZXcgQndlKX1mdW5jdGlvbiB2eShlLHQpe3JldHVybiBPTihlLChucih0KSxuZXcgeG8odCkpKX1mdW5jdGlvbiBZOChlLHQpe3JldHVybiBPTihlLChucih0KSxuZXcgbGgodCkpKX1mdW5jdGlvbiBBc3QoZSx0LG4pe3JldHVybiBYSW4oZSxsKHQsMTIpLGwobiwxMikpfWZ1bmN0aW9uIExzdChlKXtyZXR1cm4ga2woKSxsKGUsMTIpLmcuYy5sZW5ndGghPTB9ZnVuY3Rpb24gTXN0KGUpe3JldHVybiBrbCgpLGwoZSwxMikuZS5jLmxlbmd0aCE9MH1mdW5jdGlvbiBjZ24oZSx0KXtyZXR1cm4gbHgoKSxZaSh0LmEuby5hLGUuYS5vLmEpfWZ1bmN0aW9uIHVnbihlLHQpe3QuQmImZXUmJiFlLmEubyYmKGUuYS5vPXQpfWZ1bmN0aW9uIGxnbihlLHQpe3QuVWcoIkdlbmVyYWwgJ1JvdGF0b3IiLDEpLFREbihlKX1mdW5jdGlvbiBoZ24oZSx0LG4pe3QucWYobix6ZShHZShjcihlLmIsbikpKSplLmEpfWZ1bmN0aW9uIERzdChlLHQsbil7cmV0dXJuIGg2KCksZ0UoZSx0KSYmZ0UoZSxuKX1mdW5jdGlvbiBXXyhlKXtyZXR1cm4gUmwoKSwhZS5IYyh2cCkmJiFlLkhjKFliKX1mdW5jdGlvbiBmZ24oZSl7cmV0dXJuIGUuZT9fNmUoZS5lKTpudWxsfWZ1bmN0aW9uIFlfKGUpe3JldHVybiB3YyhlKT8iIitlOlBidChlKX1mdW5jdGlvbiBzNWUoZSl7dmFyIHQ7Zm9yKHQ9ZTt0LmY7KXQ9dC5mO3JldHVybiB0fWZ1bmN0aW9uIGRnbihlLHQsbil7cmV0dXJuIFRzKHQsMCxVNGUodFswXSxuWzBdKSksdH1mdW5jdGlvbiBRcChlLHQsbixyKXt2YXIgYTthPWUuaSxhLmk9dCxhLmE9bixhLmI9cn1mdW5jdGlvbiBudChlLHQsbixyKXtZcy5jYWxsKHRoaXMsZSx0LG4pLHRoaXMuYj1yfWZ1bmN0aW9uIF9hKGUsdCxuLHIsYSl7Rm9lLmNhbGwodGhpcyxlLHQsbixyLGEsLTEpfWZ1bmN0aW9uIFhfKGUsdCxuLHIsYSl7c04uY2FsbCh0aGlzLGUsdCxuLHIsYSwtMSl9ZnVuY3Rpb24gcEgoZSx0LG4scil7Rk8uY2FsbCh0aGlzLGUsdCxuKSx0aGlzLmI9cn1mdW5jdGlvbiBJc3QoZSl7THR0LmNhbGwodGhpcyxlLCExKSx0aGlzLmE9ITF9ZnVuY3Rpb24gT3N0KCl7Y3R0LmNhbGwodGhpcywiTE9PS0FIRUFEX0xBWU9VVCIsMSl9ZnVuY3Rpb24gTnN0KGUpe3RoaXMuYj1lLHE4LmNhbGwodGhpcyxlKSxqbnQodGhpcyl9ZnVuY3Rpb24gUHN0KGUpe3RoaXMuYj1lLENPLmNhbGwodGhpcyxlKSwkbnQodGhpcyl9ZnVuY3Rpb24gd3koZSx0LG4pe3RoaXMuYT1lLFY4LmNhbGwodGhpcyx0LG4sNSw2KX1mdW5jdGlvbiBhNWUoZSx0LG4scil7dGhpcy5iPWUsWXMuY2FsbCh0aGlzLHQsbixyKX1mdW5jdGlvbiBCc3QoZSx0KXt0aGlzLmI9ZSxxZy5jYWxsKHRoaXMsZS5iKSx0aGlzLmE9dH1mdW5jdGlvbiBGc3QoZSl7dGhpcy5hPXlkdChlLmEpLHRoaXMuYj1uZXcgT2woZS5iKX1mdW5jdGlvbiBvNWUoZSx0KXt3dygpLFZ1bi5jYWxsKHRoaXMsZSxSVihuZXcgSWwodCkpKX1mdW5jdGlvbiBiSChlLHQpe3JldHVybiBEaSgpLG5ldyBrNWUoZSx0LDApfWZ1bmN0aW9uIEJhZShlLHQpe3JldHVybiBEaSgpLG5ldyBrNWUoNixlLHQpfWZ1bmN0aW9uIFphKGUsdCl7Zm9yKG5yKHQpO2UuT2IoKTspdC5DZChlLlBiKCkpfWZ1bmN0aW9uIEh1KGUsdCl7cmV0dXJuIElhKHQpP3NvZShlLHQpOiEhem8oZS5mLHQpfWZ1bmN0aW9uIEZhZShlLHQpe3JldHVybiB0LlZoKCk/eWIoZS5iLGwodCw1NCkpOnR9ZnVuY3Rpb24gZ2duKGUsdCl7cmV0dXJuIHZuKGUuc3Vic3RyKDAsdC5sZW5ndGgpLHQpfWZ1bmN0aW9uIHJnKGUpe3JldHVybiBuZXcgaHIobmV3IEF5ZShlLmEubGVuZ3RoLGUuYSkpfWZ1bmN0aW9uIG1IKGUpe3JldHVybiBuZXcgbHQoZS5jK2UuYi8yLGUuZCtlLmEvMil9ZnVuY3Rpb24gcGduKGUpe3JldHVybiBxdSh+ZS5sJmVoLH5lLm0mZWgsfmUuaCZocCl9ZnVuY3Rpb24gUmFlKGUpe3JldHVybiB0eXBlb2YgZT09PXdQfHx0eXBlb2YgZT09PU9sZX1mdW5jdGlvbiBObChlKXtlLmY9bmV3IHJudChlKSxlLmk9bmV3IGludChlKSwrK2UuZ31mdW5jdGlvbiBSc3QoZSl7aWYoIWUpdGhyb3cgdWUobmV3IF9jKTtyZXR1cm4gZS5kfWZ1bmN0aW9uIFg4KGUpe3ZhciB0O3JldHVybiB0PXdBKGUpLG1yKHQhPW51bGwpLHR9ZnVuY3Rpb24gYmduKGUpe3ZhciB0O3JldHVybiB0PUk0bihlKSxtcih0IT1udWxsKSx0fWZ1bmN0aW9uIEhrKGUsdCl7dmFyIG47cmV0dXJuIG49ZS5hLmdjKCksazZlKHQsbiksbi10fWZ1bmN0aW9uIG5hKGUsdCl7dmFyIG47cmV0dXJuIG49ZS5hLnpjKHQsZSksbj09bnVsbH1mdW5jdGlvbiBqTyhlLHQpe3JldHVybiBlLmEuemModCwoSG4oKSxQYikpPT1udWxsfWZ1bmN0aW9uIGM1ZShlKXtyZXR1cm4gbmV3IGJuKG51bGwseGduKGUsZS5sZW5ndGgpKX1mdW5jdGlvbiB1NWUoZSx0LG4pe3JldHVybiBzdnQoZSxsKHQsNDIpLGwobiwxNzYpKX1mdW5jdGlvbiBROChlLHQsbil7cmV0dXJuIGQwKGUuYSx0KSxSNGUoZS5iLHQuZyxuKX1mdW5jdGlvbiBtZ24oZSx0LG4pe3FrKG4sZS5hLmMubGVuZ3RoKSxyZihlLmEsbix0KX1mdW5jdGlvbiBIZShlLHQsbixyKXtCMHQodCxuLGUubGVuZ3RoKSx2Z24oZSx0LG4scil9ZnVuY3Rpb24gdmduKGUsdCxuLHIpe3ZhciBhO2ZvcihhPXQ7YTxuOysrYSllW2FdPXJ9ZnVuY3Rpb24gbDVlKGUsdCl7dmFyIG47Zm9yKG49MDtuPHQ7KytuKWVbbl09ITF9ZnVuY3Rpb24gSW0oZSx0LG4pe0NkKCksdGhpcy5lPWUsdGhpcy5kPXQsdGhpcy5hPW59ZnVuY3Rpb24gaDVlKGUsdCxuKXt0aGlzLmM9ZSx0aGlzLmE9dCxDbigpLHRoaXMuYj1ufWZ1bmN0aW9uIGphZShlLHQpe3RoaXMuZD1lLG9yLmNhbGwodGhpcyxlKSx0aGlzLmU9dH1mdW5jdGlvbiBYMChlLHQsbil7cmV0dXJuIEZ5bihlLHQuZyxuKSxkMChlLmMsdCksZX1mdW5jdGlvbiB3Z24oZSl7cmV0dXJuIHA2KGUsKEpzKCksdWMpKSxlLmQ9ITAsZX1mdW5jdGlvbiAkYWUoZSl7cmV0dXJuIWUuaiYmaXIoZSxFX24oZS5nLGUuYikpLGUuan1mdW5jdGlvbiBqc3QoZSl7ZS5hPW51bGwsZS5lPW51bGwsTmwoZS5iKSxlLmQ9MCwrK2UuY31mdW5jdGlvbiBRXyhlKXtneShlLmIhPS0xKSx0MihlLmMsZS5hPWUuYiksZS5iPS0xfWZ1bmN0aW9uIGY1ZShlLHQpe1h2LmNhbGwodGhpcywxKSx0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiB5Z24oZSx0KXtyZXR1cm4gZT4wP2IuTWF0aC5sb2coZS90KTotMTAwfWZ1bmN0aW9uICRzdChlLHQpe3JldHVybiBpdShlLHQpPDA/LTE6aXUoZSx0KT4wPzE6MH1mdW5jdGlvbiAkTyhlLHQpe0RudChlLERlKHQsMTYwKT90OmwodCwyMDM2KS5SbCgpKX1mdW5jdGlvbiBkNWUoZSx0KXtpZihlPT1udWxsKXRocm93IHVlKG5ldyBEOCh0KSl9ZnVuY3Rpb24geGduKGUsdCl7cmV0dXJuIEV3bih0LGUubGVuZ3RoKSxuZXcgS2l0KGUsdCl9ZnVuY3Rpb24gZzVlKGUsdCl7cmV0dXJuIHQ/S2EoZSx0KTohMX1mdW5jdGlvbiBrZ24oKXtyZXR1cm4gJHooKSxoZShsZShhNnQsMSksaXQsNTQ5LDAsW0UwZV0pfWZ1bmN0aW9uIEpfKGUpe3JldHVybiBlLmU9PTA/ZTpuZXcgSW0oLWUuZSxlLmQsZS5hKX1mdW5jdGlvbiBFZ24oZSx0KXtyZXR1cm4gWWkoZS5jLmMrZS5jLmIsdC5jLmMrdC5jLmIpfWZ1bmN0aW9uIHpPKGUsdCl7Q3MoZS5kLHQsZS5iLmIsZS5iKSwrK2UuYSxlLmM9bnVsbH1mdW5jdGlvbiB6c3QoZSx0KXtyZXR1cm4gZS5jP3pzdChlLmMsdCk6dnQoZS5iLHQpLGV9ZnVuY3Rpb24gVGduKGUsdCxuKXt2YXIgcjtyZXR1cm4gcj1feShlLHQpLHhvZShlLHQsbikscn1mdW5jdGlvbiBxc3QoZSx0LG4pe3ZhciByO2ZvcihyPTA7cjx0OysrcilUcyhlLHIsbil9ZnVuY3Rpb24gSHN0KGUsdCxuLHIsYSl7Zm9yKDt0PG47KXJbYSsrXT1jbyhlLHQrKyl9ZnVuY3Rpb24gVmsoZSx0LG4scixhKXtMdWUoZSxsKCRpKHQuayxuKSwxNSksbixyLGEpfWZ1bmN0aW9uIG13KGUsdCl7SXMoZmMoZS5PYygpLG5ldyBGaiksbmV3IGtZZSh0KSl9ZnVuY3Rpb24gQ2duKGUsdCl7cmV0dXJuIFlpKGUuZS5hK2UuZi5hLHQuZS5hK3QuZi5hKX1mdW5jdGlvbiBTZ24oZSx0KXtyZXR1cm4gWWkoZS5lLmIrZS5mLmIsdC5lLmIrdC5mLmIpfWZ1bmN0aW9uIHphZShlKXtyZXR1cm4gYi5NYXRoLmFicyhlLmQuZS1lLmUuZSktZS5hfWZ1bmN0aW9uIF9nbihlKXtyZXR1cm4gZT09Z3M/ZUI6ZT09aWE/Ii1JTkYiOiIiK2V9ZnVuY3Rpb24gQWduKGUpe3JldHVybiBlPT1ncz9lQjplPT1pYT8iLUlORiI6IiIrZX1mdW5jdGlvbiBMZ24oZSl7cmV0dXJuIHR4KCksZHMoY2coZSkpPT1kcyhFYihlKSl9ZnVuY3Rpb24gTWduKGUsdCxuKXtyZXR1cm4gbChlLmMuaGQodCxsKG4sMTM2KSksNDQpfWZ1bmN0aW9uIERnbihlLHQpe0o4KGUsbmV3IHl5KHQuZiE9bnVsbD90LmY6IiIrdC5nKSl9ZnVuY3Rpb24gSWduKGUsdCl7SjgoZSxuZXcgeXkodC5mIT1udWxsP3QuZjoiIit0LmcpKX1mdW5jdGlvbiBBcyhlLHQpe3JldHVybiBlLlNpKCkmJih0PWJvdChlLHQpKSxlLkZpKHQpfWZ1bmN0aW9uIHFhZShlLHQpe3JldHVybiB0PWUuWWsobnVsbCx0KSxSZ3QoZSxudWxsLHQpfWZ1bmN0aW9uIE9nbihlLHQpeysrZS5qLEF1ZShlLGUuaSx0KSxuRW4oZSxsKHQsMzQzKSl9ZnVuY3Rpb24gcDVlKGUpe2U/RnhlKGUsKFZnKCksbTZ0KSk6RnBuKChWZygpLGUpKX1mdW5jdGlvbiB2dyhlKXt0aGlzLmQ9KG5yKGUpLGUpLHRoaXMuYT0wLHRoaXMuYz1FUH1mdW5jdGlvbiBIYWUoZSx0KXt0aGlzLmQ9VDRuKGUpLHRoaXMuYz10LHRoaXMuYT0uNSp0fWZ1bmN0aW9uIFZzdChlKXtSNWUuY2FsbCh0aGlzKSx0aGlzLmE9ZSx2dChlLmEsdGhpcyl9ZnVuY3Rpb24gVXN0KCl7ZTIuY2FsbCh0aGlzKSx0aGlzLmE9ITAsdGhpcy5iPSEwfWZ1bmN0aW9uIEdzdCgpe0dzdD1VLGg2dD1uZXcgamMoITEpLGY2dD1uZXcgamMoITApfWZ1bmN0aW9uIFpfKGUpe3ZhciB0O3JldHVybiB0PWUuZyx0fHwoZS5nPW5ldyB2eihlKSl9ZnVuY3Rpb24gdkgoZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5rLHR8fChlLms9bmV3IFEyKGUpKX1mdW5jdGlvbiBiNWUoZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5rLHR8fChlLms9bmV3IFEyKGUpKX1mdW5jdGlvbiBOZ24oZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5pLHR8fChlLmk9bmV3IHdpZShlKSl9ZnVuY3Rpb24gS3N0KGUpe3ZhciB0O3JldHVybiB0PWUuZix0fHwoZS5mPW5ldyBfeWUoZSkpfWZ1bmN0aW9uIFZhZShlKXt2YXIgdDtyZXR1cm4gdD1lLmosdHx8KGUuaj1uZXcga3ooZSkpfWZ1bmN0aW9uIFVhZShlKXt2YXIgdDtyZXR1cm4gdD1lLmQsdHx8KGUuZD1uZXcgSjIoZSkpfWZ1bmN0aW9uIFdzdChlLHQsbil7cmV0dXJuIERpKCksbmV3IEhvdChlLHQsbil9ZnVuY3Rpb24gWXN0KGUsdCl7cmV0dXJuIFpPKHQsZS5jLmIuYy5nYygpKSxuZXcgRFplKGUsdCl9ZnVuY3Rpb24gbTVlKGUsdCl7dmFyIG47cmV0dXJuIG49ZS5hLmdjKCksWk8odCxuKSxuLTEtdH1mdW5jdGlvbiBJKGUsdCxuKXt2YXIgcjtyZXR1cm4gcj1HYWUoZSx0KSxVaHQobixyKSxyfWZ1bmN0aW9uIEdhZShlLHQpe3ZhciBuO3JldHVybiBuPW5ldyBCN2Usbi5qPWUsbi5kPXQsbn1mdW5jdGlvbiBYcihlKXtpZihlPT1udWxsKXRocm93IHVlKG5ldyBTOCk7cmV0dXJuIGV9ZnVuY3Rpb24geXkoZSl7aWYoZT09bnVsbCl0aHJvdyB1ZShuZXcgUzgpO3RoaXMuYT1lfWZ1bmN0aW9uIFhzdChlKXtDd2UoKSx0aGlzLmI9bmV3IGJ0LHRoaXMuYT1lLFNNbih0aGlzLGUpfWZ1bmN0aW9uIHY1ZShlKXt0aGlzLmI9ZSx0aGlzLmE9bChMZih0aGlzLmIuYS5lKSwyMjcpfWZ1bmN0aW9uIHd3KCl7d3c9VSx3ZCgpLHgwZT1uZXcgb29lKChDbigpLENuKCksX28pKX1mdW5jdGlvbiBLYWUoKXtLYWU9VSx3ZCgpLFZTZT1uZXcgazNlKChDbigpLENuKCksaEspKX1mdW5jdGlvbiBsYigpe2xiPVUsVm49dEVuKCksVG4oKSxPNCYmbjhuKCl9ZnVuY3Rpb24gd0goZSl7ZS5zPU5hTixlLmM9TmFOLHkydChlLGUuZSkseTJ0KGUsZS5qKX1mdW5jdGlvbiB5cihlKXtyZXR1cm4oZS5pPT1udWxsJiZTZChlKSxlLmkpLmxlbmd0aH1mdW5jdGlvbiBRc3QoZSx0KXtyZXR1cm4gbChNbShlLmEpLk1kKCkuWGIodCksNDQpLmxkKCl9ZnVuY3Rpb24gY3IoZSx0KXtyZXR1cm4gSWEodCk/eHUoZSx0KTpoYyh6byhlLmYsdCkpfWZ1bmN0aW9uIFBnbihlLHQpe3JldHVybiB0eCgpLGU9PWNnKHQpP0ViKHQpOmNnKHQpfWZ1bmN0aW9uIEJnbihlLHQsbixyKXtyZXR1cm4gbj09MHx8KG4tcikvbjxlLmV8fHQ+PWUuZ31mdW5jdGlvbiBUcyhlLHQsbil7cmV0dXJuIHBmbihuPT1udWxsfHxsQW4oZSxuKSksZVt0XT1ufWZ1bmN0aW9uIHc1ZShlLHQpe3JldHVybiBYbih0LGUubGVuZ3RoKzEpLGUuc3Vic3RyKHQpfWZ1bmN0aW9uIFdhZShlLHQpe2Zvcihucih0KTtlLmM8ZS5kOyllLlNlKHQsZS5jKyspfWZ1bmN0aW9uIHk1ZShlKXt0aGlzLmQ9ZSx0aGlzLmM9ZS5hLmQuYSx0aGlzLmI9ZS5hLmUuZ31mdW5jdGlvbiBKc3QoZSl7dGhpcy5jPWUsdGhpcy5hPW5ldyBvcyx0aGlzLmI9bmV3IG9zfWZ1bmN0aW9uIHl1KGUpe3RoaXMuYz1uZXcgcWEsdGhpcy5hPW5ldyBidCx0aGlzLmI9ZX1mdW5jdGlvbiBac3QoZSl7dGhpcy5iPW5ldyBidCx0aGlzLmE9bmV3IGJ0LHRoaXMuYz1lfWZ1bmN0aW9uIEZnbihlLHQsbil7bCh0LmIsNjgpLFZ1KHQuYSxuZXcgeDRlKGUsbix0KSl9ZnVuY3Rpb24gUmduKGUsdCl7cmV0dXJuIGx4KCksbChRbyhlLHQuZCksMTUpLkZjKHQpfWZ1bmN0aW9uIEo4KGUsdCl7dmFyIG47bj1lLmEubGVuZ3RoLF95KGUsbikseG9lKGUsbix0KX1mdW5jdGlvbiBlYXQoZSx0KXt2YXIgbjtuPWNvbnNvbGVbZV0sbi5jYWxsKGNvbnNvbGUsdCl9ZnVuY3Rpb24gdGF0KGUsdCl7dmFyIG47KytlLmosbj1lLkVqKCksZS5yaihlLlppKG4sdCkpfWZ1bmN0aW9uIFlhZShlLHQsbil7dmFyIHI7cmV0dXJuIHI9aWNlKGUsdCxuKSxza2UoZSxyKX1mdW5jdGlvbiB5dyhlKXtyZXR1cm4hZS5kJiYoZS5kPW5ldyBZcyhXbyxlLDEpKSxlLmR9ZnVuY3Rpb24gamduKGUpe3JldHVybiFlLmEmJihlLmE9bmV3IFlzKFhiLGUsNCkpLGUuYX1mdW5jdGlvbiBVayhlLHQpe3JldHVybiBlLmErPVN0cmluZy5mcm9tQ2hhckNvZGUodCksZX1mdW5jdGlvbiBoYihlLHQpe3JldHVybiBlLmErPVN0cmluZy5mcm9tQ2hhckNvZGUodCksZX1mdW5jdGlvbiB4NWUoZSx0LG4pe3RoaXMuYT1lLHh3ZS5jYWxsKHRoaXMsdCksdGhpcy5iPW59ZnVuY3Rpb24gbmF0KGUsdCxuKXt0aGlzLmE9ZSxyNmUuY2FsbCh0aGlzLDgsdCxudWxsLG4pfWZ1bmN0aW9uIGs1ZShlLHQsbil7WHYuY2FsbCh0aGlzLGUpLHRoaXMuYT10LHRoaXMuYj1ufWZ1bmN0aW9uIEU1ZShlLHQsbil7TnouY2FsbCh0aGlzLHQpLHRoaXMuYT1lLHRoaXMuYj1ufWZ1bmN0aW9uIHJhdChlKXt0aGlzLmM9ZSx0aGlzLmI9dGhpcy5jLmEsdGhpcy5hPXRoaXMuYy5lfWZ1bmN0aW9uICRnbihlKXt0aGlzLmE9KG5yKGxpKSxsaSksdGhpcy5iPWUsbmV3ICR3ZX1mdW5jdGlvbiBpYXQoZSl7TTVlKGUuYSksZS5iPVdlKHdhLFJuLDEsZS5iLmxlbmd0aCw1LDEpfWZ1bmN0aW9uIHBoKGUpe2d5KGUuYyE9LTEpLGUuZC5nZChlLmMpLGUuYj1lLmMsZS5jPS0xfWZ1bmN0aW9uIGVBKGUpe3JldHVybiBiLk1hdGguc3FydChlLmEqZS5hK2UuYiplLmIpfWZ1bmN0aW9uIHlIKGUsdCl7cmV0dXJuIHh1ZShlLmMsZS5mLHQsZS5iLGUuYSxlLmUsZS5kKX1mdW5jdGlvbiB4dyhlLHQpe3JldHVybiBxayh0LGUuYS5jLmxlbmd0aCksanQoZS5hLHQpfWZ1bmN0aW9uIHlkKGUsdCl7cmV0dXJuIHFlKGUpPT09cWUodCl8fGUhPW51bGwmJlBpKGUsdCl9ZnVuY3Rpb24gc2F0KGUpe3JldHVybiBEZShlLDEwMikmJihsKGUsMTkpLkJiJmV1KSE9MH1mdW5jdGlvbiBhYXQoZSl7cmV0dXJuIExmKGUpLERlKGUsNDg0KT9sKGUsNDg0KTp4YyhlKX1mdW5jdGlvbiBvYXQoZSl7cmV0dXJuIGU/ZS5kYygpOiFlLktjKCkuT2IoKX1mdW5jdGlvbiB6Z24oZSl7cmV0dXJuIFA0P3NvZShQNCxlKTohMX1mdW5jdGlvbiBxZ24oZSl7cmV0dXJuIDA+PWU/bmV3IGIzZTpLd24oZS0xKX1mdW5jdGlvbiBlbyhlKXtyZXR1cm4hZS5hJiZlLmM/ZS5jLmI6ZS5hfWZ1bmN0aW9uIFQ1ZShlKXtyZXR1cm4gRGUoZSw2MTYpP2U6bmV3IG9vdChlKX1mdW5jdGlvbiBmYihlKXtlLmM/ZmIoZS5jKTooeGIoZSksZS5kPSEwKX1mdW5jdGlvbiB0QShlKXtlLmM/ZS5jLiRlKCk6KGUuZD0hMCxoQ24oZSkpfWZ1bmN0aW9uIGNhdChlKXtlLmI9ITEsZS5jPSExLGUuZD0hMSxlLmE9ITF9ZnVuY3Rpb24gdWF0KGUpe3ZhciB0LG47cmV0dXJuIHQ9ZS5jLmkuYyxuPWUuZC5pLmMsdD09bn1mdW5jdGlvbiBIZ24oZSx0KXt2YXIgbjtuPWUuSWgodCksbj49MD9lLmtpKG4pOmQ5ZShlLHQpfWZ1bmN0aW9uIGxhdChlLHQpe2UuYzwwfHxlLmIuYjxlLmM/a28oZS5iLHQpOmUuYS50Zih0KX1mdW5jdGlvbiBWZ24oZSx0KXtxcigoIWUuYSYmKGUuYT1uZXcgTE8oZSxlKSksZS5hKSx0KX1mdW5jdGlvbiBVZ24oZSx0KXtNYWUobCh0LmIsNjgpLGUpLFZ1KHQuYSxuZXcgTXooZSkpfWZ1bmN0aW9uIEdnbihlLHQpe3JldHVybiBydSh0LmouYy5sZW5ndGgsZS5qLmMubGVuZ3RoKX1mdW5jdGlvbiBLZ24oZSx0LG4pe3JldHVybiBoeCgpLG4uTGcoZSxsKHQubGQoKSwxNDkpKX1mdW5jdGlvbiBMZihlKXtpZihlPT1udWxsKXRocm93IHVlKG5ldyBTOCk7cmV0dXJuIGV9ZnVuY3Rpb24gbnIoZSl7aWYoZT09bnVsbCl0aHJvdyB1ZShuZXcgUzgpO3JldHVybiBlfWZ1bmN0aW9uIFdnbihlKXtpZihlLnAhPTQpdGhyb3cgdWUobmV3IHBsKTtyZXR1cm4gZS5lfWZ1bmN0aW9uIFlnbihlKXtpZihlLnAhPTMpdGhyb3cgdWUobmV3IHBsKTtyZXR1cm4gZS5lfWZ1bmN0aW9uIFhnbihlKXtpZihlLnAhPTMpdGhyb3cgdWUobmV3IHBsKTtyZXR1cm4gZS5qfWZ1bmN0aW9uIFFnbihlKXtpZihlLnAhPTQpdGhyb3cgdWUobmV3IHBsKTtyZXR1cm4gZS5qfWZ1bmN0aW9uIEpnbihlKXtpZihlLnAhPTYpdGhyb3cgdWUobmV3IHBsKTtyZXR1cm4gZS5mfWZ1bmN0aW9uIFpnbihlKXtpZihlLnAhPTYpdGhyb3cgdWUobmV3IHBsKTtyZXR1cm4gZS5rfWZ1bmN0aW9uIEM1ZShlKXtyZXR1cm4hZS5iJiYoZS5iPW5ldyBQeihuZXcgVmllKSksZS5ifWZ1bmN0aW9uIGt3KGUpe3JldHVybiBlLmM9PS0yJiZMdChlLEd4bihlLmcsZS5iKSksZS5jfWZ1bmN0aW9uIEdrKGUsdCl7dmFyIG47cmV0dXJuIG49R2FlKCIiLGUpLG4ubj10LG4uaT0xLG59ZnVuY3Rpb24geEgoZSx0LG4scil7aXcuY2FsbCh0aGlzLGUsbiksdGhpcy5hPXQsdGhpcy5mPXJ9ZnVuY3Rpb24gUzVlKGUsdCxuLHIpe2l3LmNhbGwodGhpcyxlLHQpLHRoaXMuZD1uLHRoaXMuYT1yfWZ1bmN0aW9uIGhhdChlLHQpe2Zobi5jYWxsKHRoaXMsV3duKFhyKGUpLFhyKHQpKSksdGhpcy5hPXR9ZnVuY3Rpb24gWHMoKXttSmUuY2FsbCh0aGlzKSxheSh0aGlzLmouYywwKSx0aGlzLmE9LTF9ZnVuY3Rpb24gZmF0KCl7VnhlLmNhbGwodGhpcyxGZiwoU2soKSxBUGUpKSx4TG4odGhpcyl9ZnVuY3Rpb24gZGF0KCl7VnhlLmNhbGwodGhpcyxjdiwoblplKCksckF0KSksZk1uKHRoaXMpfWZ1bmN0aW9uIGdhdCgpe1VyLmNhbGwodGhpcywiREVMQVVOQVlfVFJJQU5HVUxBVElPTiIsMCl9ZnVuY3Rpb24gZXBuKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZSl9ZnVuY3Rpb24ga2koZSx0LG4pe3JldHVybiBJYSh0KT9yYyhlLHQsbik6anUoZS5mLHQsbil9ZnVuY3Rpb24gXzVlKGUpe3JldHVybiBDbigpLGU/ZS5PZSgpOihFdygpLEV3KCksZ19lKX1mdW5jdGlvbiB0cG4oZSl7cmV0dXJuIE1oKGUsRmxlKSxjVihibyhibyg1LGUpLGUvMTB8MCkpfWZ1bmN0aW9uIHBhdChlLHQpe3JldHVybiBacSgpLG5ldyBXOGUobmV3IFFudChlKSxuZXcgWG50KHQpKX1mdW5jdGlvbiBrSCgpe2tIPVUsaTZ0PW5ldyBZd2UoaGUobGUodXYsMSksWFUsNDQsMCxbXSkpfWZ1bmN0aW9uIGJhdChlKXtyZXR1cm4hZS5kJiYoZS5kPW5ldyAkYShlLmMuQ2MoKSkpLGUuZH1mdW5jdGlvbiBLayhlKXtyZXR1cm4hZS5hJiYoZS5hPW5ldyB6SmUoZS5jLnZjKCkpKSxlLmF9ZnVuY3Rpb24gbWF0KGUpe3JldHVybiFlLmImJihlLmI9bmV3IEVrKGUuYy5lYygpKSksZS5ifWZ1bmN0aW9uIGlnKGUsdCl7Zm9yKDt0LS0gPjA7KWU9ZTw8MXwoZTwwPzE6MCk7cmV0dXJuIGV9ZnVuY3Rpb24gdmF0KGUsdCl7dmFyIG47cmV0dXJuIG49bmV3IHl1KGUpLCRuKHQuYyxuKSxufWZ1bmN0aW9uIHdhdChlLHQpe2UudS5IYygoUmwoKSx2cCkpJiZXa24oZSx0KSxmdm4oZSx0KX1mdW5jdGlvbiBKYyhlLHQpe3JldHVybiBxZShlKT09PXFlKHQpfHxlIT1udWxsJiZQaShlLHQpfWZ1bmN0aW9uIFFvKGUsdCl7cmV0dXJuIEFhZShlLmEsdCk/ZS5iW2wodCwyMikuZ106bnVsbH1mdW5jdGlvbiBucG4oKXtyZXR1cm4gWnooKSxoZShsZShVX2UsMSksaXQsNDg5LDAsW0cwZV0pfWZ1bmN0aW9uIHJwbigpe3JldHVybiBucSgpLGhlKGxlKHdPZSwxKSxpdCw0OTAsMCxbYmdlXSl9ZnVuY3Rpb24gaXBuKCl7cmV0dXJuIHJxKCksaGUobGUoR0N0LDEpLGl0LDU1OCwwLFttZ2VdKX1mdW5jdGlvbiBzcG4oKXtyZXR1cm4gYl8oKSxoZShsZSgkT2UsMSksaXQsNTM5LDAsW3FCXSl9ZnVuY3Rpb24gRUgoZSl7cmV0dXJuIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxlLm59ZnVuY3Rpb24gWGFlKGUpe3JldHVybiFlLmMmJihlLmM9bmV3IG50KEhsLGUsOSw5KSksZS5jfWZ1bmN0aW9uIEE1ZShlKXtyZXR1cm4hZS5jJiYoZS5jPW5ldyBMbihfcixlLDUsOCkpLGUuY31mdW5jdGlvbiBhcG4oZSl7cmV0dXJuIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmJ9ZnVuY3Rpb24gcU8oZSl7cmV0dXJuIGUuai5jLmxlbmd0aD0wLE01ZShlLmMpLFJmbihlLmEpLGV9ZnVuY3Rpb24gV2soZSl7cmV0dXJuIGUuZT09RVQmJmhuKGUsZTZuKGUuZyxlLmIpKSxlLmV9ZnVuY3Rpb24gSE8oZSl7cmV0dXJuIGUuZj09RVQmJkRuKGUsVTduKGUuZyxlLmIpKSxlLmZ9ZnVuY3Rpb24gRWkoZSx0LG4scil7cmV0dXJuIHFmdChlLHQsbiwhMSksalYoZSxyKSxlfWZ1bmN0aW9uIHlhdChlLHQpe3RoaXMuYj1lLGphZS5jYWxsKHRoaXMsZSx0KSxqbnQodGhpcyl9ZnVuY3Rpb24geGF0KGUsdCl7dGhpcy5iPWUsZjRlLmNhbGwodGhpcyxlLHQpLCRudCh0aGlzKX1mdW5jdGlvbiBuQShlKXt0aGlzLmQ9ZSx0aGlzLmE9dGhpcy5kLmIsdGhpcy5iPXRoaXMuZC5jfWZ1bmN0aW9uIEw1ZShlLHQpe3RoaXMuYj1lLHRoaXMuYz10LHRoaXMuYT1uZXcgUDgodGhpcy5iKX1mdW5jdGlvbiBjbyhlLHQpe3JldHVybiBYbih0LGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQodCl9ZnVuY3Rpb24gb3BuKGUsdCl7YjhlKGUsemUobnAodCwieCIpKSx6ZShucCh0LCJ5IikpKX1mdW5jdGlvbiBjcG4oZSx0KXtiOGUoZSx6ZShucCh0LCJ4IikpLHplKG5wKHQsInkiKSkpfWZ1bmN0aW9uIEZpKGUsdCl7cmV0dXJuIHhiKGUpLG5ldyBibihlLG5ldyAkNmUodCxlLmEpKX1mdW5jdGlvbiBmYyhlLHQpe3JldHVybiB4YihlKSxuZXcgYm4oZSxuZXcgQzZlKHQsZS5hKSl9ZnVuY3Rpb24geHkoZSx0KXtyZXR1cm4geGIoZSksbmV3IFZ5ZShlLG5ldyBNdXQodCxlLmEpKX1mdW5jdGlvbiBUSChlLHQpe3JldHVybiB4YihlKSxuZXcgVXllKGUsbmV3IER1dCh0LGUuYSkpfWZ1bmN0aW9uIHVwbihlLHQpe3JldHVybiBuZXcgVWF0KGwoWHIoZSksNTApLGwoWHIodCksNTApKX1mdW5jdGlvbiBscG4oZSx0KXtyZXR1cm4gWWkoZS5kLmMrZS5kLmIvMix0LmQuYyt0LmQuYi8yKX1mdW5jdGlvbiBrYXQoZSx0LG4pe24uYT9HdShlLHQuYi1lLmYvMik6VXUoZSx0LmEtZS5nLzIpfWZ1bmN0aW9uIGhwbihlLHQpe3JldHVybiBZaShlLmcuYytlLmcuYi8yLHQuZy5jK3QuZy5iLzIpfWZ1bmN0aW9uIGZwbihlLHQpe3JldHVybiB3M2UoKSxZaSgobnIoZSksZSksKG5yKHQpLHQpKX1mdW5jdGlvbiBkcG4oZSl7cmV0dXJuIGUhPW51bGwmJm5PKEVZLGUudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gTTVlKGUpe3ZhciB0O2Zvcih0PWUuS2MoKTt0Lk9iKCk7KXQuUGIoKSx0LlFiKCl9ZnVuY3Rpb24gVjUoZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5iLCF0JiYoZS5iPXQ9bmV3IG1pZShlKSksdH1mdW5jdGlvbiBRYWUoZSl7dmFyIHQ7cmV0dXJuIHQ9UXduKGUpLHR8fG51bGx9ZnVuY3Rpb24gRWF0KGUsdCl7dmFyIG4scjtyZXR1cm4gbj1lL3Qscj11YShuKSxuPnImJisrcixyfWZ1bmN0aW9uIGdwbihlLHQsbil7dmFyIHI7cj1sKGUuZC5LYihuKSwxNTkpLHImJnIuTmIodCl9ZnVuY3Rpb24gcHBuKGUsdCxuKXttTG4oZS5hLG4pLFczbihuKSxSRW4oZS5iLG4pLFJMbih0LG4pfWZ1bmN0aW9uIENIKGUsdCxuLHIpe3RoaXMuYT1lLHRoaXMuYz10LHRoaXMuYj1uLHRoaXMuZD1yfWZ1bmN0aW9uIEQ1ZShlLHQsbixyKXt0aGlzLmM9ZSx0aGlzLmI9dCx0aGlzLmE9bix0aGlzLmQ9cn1mdW5jdGlvbiBUYXQoZSx0LG4scil7dGhpcy5jPWUsdGhpcy5iPXQsdGhpcy5kPW4sdGhpcy5hPXJ9ZnVuY3Rpb24gZWYoZSx0LG4scil7dGhpcy5jPWUsdGhpcy5kPXQsdGhpcy5iPW4sdGhpcy5hPXJ9ZnVuY3Rpb24gQ2F0KGUsdCxuLHIpe3RoaXMuYT1lLHRoaXMuZD10LHRoaXMuYz1uLHRoaXMuYj1yfWZ1bmN0aW9uIEphZShlLHQsbixyKXt0aGlzLmE9ZSx0aGlzLmU9dCx0aGlzLmQ9bix0aGlzLmM9cn1mdW5jdGlvbiBTYXQoZSx0LG4scil7dGhpcy5hPWUsdGhpcy5jPXQsdGhpcy5kPW4sdGhpcy5iPXJ9ZnVuY3Rpb24gWmFlKGUsdCxuKXt0aGlzLmE9aUVlLHRoaXMuZD1lLHRoaXMuYj10LHRoaXMuYz1ufWZ1bmN0aW9uIFo4KGUsdCxuLHIpe1VyLmNhbGwodGhpcyxlLHQpLHRoaXMuYT1uLHRoaXMuYj1yfWZ1bmN0aW9uIF9hdChlLHQpe3RoaXMuZD0obnIoZSksZSksdGhpcy5hPTE2NDQ5LHRoaXMuYz10fWZ1bmN0aW9uIEFhdChlKXt0aGlzLmE9bmV3IGJ0LHRoaXMuZT1XZShWcixkdCw1MyxlLDAsMil9ZnVuY3Rpb24gYnBuKGUpe2UuVWcoIk5vIGNyb3NzaW5nIG1pbmltaXphdGlvbiIsMSksZS5WZygpfWZ1bmN0aW9uIExhdCgpe0FjLmNhbGwodGhpcywiVGhlcmUgaXMgbm8gbW9yZSBlbGVtZW50LiIpfWZ1bmN0aW9uIE1hdChlLHQsbixyKXt0aGlzLmE9ZSx0aGlzLmI9dCx0aGlzLmM9bix0aGlzLmQ9cn1mdW5jdGlvbiBEYXQoZSx0LG4scil7dGhpcy5hPWUsdGhpcy5iPXQsdGhpcy5jPW4sdGhpcy5kPXJ9ZnVuY3Rpb24gT20oZSx0LG4scil7dGhpcy5lPWUsdGhpcy5hPXQsdGhpcy5jPW4sdGhpcy5kPXJ9ZnVuY3Rpb24gSWF0KGUsdCxuLHIpe3RoaXMuYT1lLHRoaXMuYz10LHRoaXMuZD1uLHRoaXMuYj1yfWZ1bmN0aW9uIE9hdChlLHQsbixyKXtKaCgpLEl1dC5jYWxsKHRoaXMsdCxuLHIpLHRoaXMuYT1lfWZ1bmN0aW9uIE5hdChlLHQsbixyKXtKaCgpLEl1dC5jYWxsKHRoaXMsdCxuLHIpLHRoaXMuYT1lfWZ1bmN0aW9uIGVvZShlLHQsbil7dmFyIHIsYTtyZXR1cm4gcj1Wa2UoZSksYT10LnRpKG4sciksYX1mdW5jdGlvbiBLZyhlKXt2YXIgdCxuO3JldHVybiBuPSh0PW5ldyBRdix0KSxzRShuLGUpLG59ZnVuY3Rpb24gdG9lKGUpe3ZhciB0LG47cmV0dXJuIG49KHQ9bmV3IFF2LHQpLEt4ZShuLGUpLG59ZnVuY3Rpb24gbXBuKGUsdCl7dmFyIG47cmV0dXJuIG49Y3IoZS5mLHQpLFM3ZSh0LG4pLG51bGx9ZnVuY3Rpb24gUGF0KGUpe3JldHVybiFlLmImJihlLmI9bmV3IG50KGpzLGUsMTIsMykpLGUuYn1mdW5jdGlvbiBCYXQoZSl7cmV0dXJuIFZfKGU9PW51bGx8fFJhZShlKSYmZS5UbSE9PXhlKSxlfWZ1bmN0aW9uIFNIKGUpe3JldHVybiBlLm4mJihlLmUhPT1Gd3QmJmUuamUoKSxlLmo9bnVsbCksZX1mdW5jdGlvbiBZayhlKXtpZihRbChlLmQpLGUuZC5kIT1lLmMpdGhyb3cgdWUobmV3IFhoKX1mdW5jdGlvbiBJNWUoZSl7cmV0dXJuIG1yKGUuYjxlLmQuZ2MoKSksZS5kLlhiKGUuYz1lLmIrKyl9ZnVuY3Rpb24gQ2goZSl7ZS5hLmE9ZS5jLGUuYy5iPWUuYSxlLmEuYj1lLmMuYT1udWxsLGUuYj0wfWZ1bmN0aW9uIG5vZShlKXt0aGlzLmY9ZSx0aGlzLmM9dGhpcy5mLmUsZS5mPjAmJmdndCh0aGlzKX1mdW5jdGlvbiBGYXQoZSx0KXt0aGlzLmE9ZSxiZm4uY2FsbCh0aGlzLGUsbChlLmQsMTUpLmZkKHQpKX1mdW5jdGlvbiB2cG4oZSx0KXtyZXR1cm4gWWkod2woZSkqZ2goZSksd2wodCkqZ2godCkpfWZ1bmN0aW9uIHdwbihlLHQpe3JldHVybiBZaSh3bChlKSpnaChlKSx3bCh0KSpnaCh0KSl9ZnVuY3Rpb24geXBuKGUpe3JldHVybiBxdyhlKSYmUnQoQnQoYXQoZSwoTnQoKSxndikpKSl9ZnVuY3Rpb24geHBuKGUsdCl7cmV0dXJuIHhuKGUsbChRKHQsKE50KCksSFQpKSwxNyksdCl9ZnVuY3Rpb24ga3BuKGUsdCl7cmV0dXJuIGwoUShlLChmdCgpLFd4KSksMTUpLkZjKHQpLHR9ZnVuY3Rpb24gTzVlKGUsdCl7cmV0dXJuIGUuYj10LmIsZS5jPXQuYyxlLmQ9dC5kLGUuYT10LmEsZX1mdW5jdGlvbiBSYXQoZSx0LG4scil7dGhpcy5iPWUsdGhpcy5jPXIsRHEuY2FsbCh0aGlzLHQsbil9ZnVuY3Rpb24gRXBuKGUsdCxuKXtlLmk9MCxlLmU9MCx0IT1uJiZ4MHQoZSx0LG4pfWZ1bmN0aW9uIFRwbihlLHQsbil7ZS5pPTAsZS5lPTAsdCE9biYmazB0KGUsdCxuKX1mdW5jdGlvbiBDcG4oZSx0LG4pe3JldHVybiBwXygpLEo0bihsKGNyKGUuZSx0KSw1MjkpLG4pfWZ1bmN0aW9uIGV4KGUpe3ZhciB0O3JldHVybiB0PWUuZix0fHwoZS5mPW5ldyBMayhlLGUuYykpfWZ1bmN0aW9uIGphdChlLHQpe3JldHVybiBlNihlLmosdC5zLHQuYykrZTYodC5lLGUucyxlLmMpfWZ1bmN0aW9uICRhdChlLHQpe2UuZSYmIWUuZS5hJiYoQ1FlKGUuZSx0KSwkYXQoZS5lLHQpKX1mdW5jdGlvbiB6YXQoZSx0KXtlLmQmJiFlLmQuYSYmKENRZShlLmQsdCksemF0KGUuZCx0KSl9ZnVuY3Rpb24gU3BuKGUsdCl7cmV0dXJuLVlpKHdsKGUpKmdoKGUpLHdsKHQpKmdoKHQpKX1mdW5jdGlvbiBfcG4oZSl7cmV0dXJuIGwoZS5sZCgpLDE0OSkuUGcoKSsiOiIreGMoZS5tZCgpKX1mdW5jdGlvbiBxYXQoKXtOdWUodGhpcyxuZXcgZnopLHRoaXMud2I9KGxiKCksVm4pLFNrKCl9ZnVuY3Rpb24gSGF0KGUpe3RoaXMuYj1uZXcgYnQscmEodGhpcy5iLHRoaXMuYiksdGhpcy5hPWV9ZnVuY3Rpb24gTjVlKGUsdCl7bmV3IG9zLHRoaXMuYT1uZXcgYmwsdGhpcy5iPWUsdGhpcy5jPXR9ZnVuY3Rpb24gRXcoKXtFdz1VLGRfZT1uZXcgS2UsRDBlPW5ldyBLZSxnX2U9bmV3IEZ0fWZ1bmN0aW9uIENuKCl7Q249VSxfbz1uZXcgamUsbWc9bmV3IFNlLGhLPW5ldyBDZX1mdW5jdGlvbiBQNWUoKXtQNWU9VSxqNnQ9bmV3IHdvLHo2dD1uZXcgWDRlLCQ2dD1uZXcgX3N9ZnVuY3Rpb24gdHgoKXt0eD1VLHdLPW5ldyBidCxYMGU9bmV3IFByLFkwZT1uZXcgYnR9ZnVuY3Rpb24gX0goZSx0KXtpZihlPT1udWxsKXRocm93IHVlKG5ldyBEOCh0KSk7cmV0dXJuIGV9ZnVuY3Rpb24gQUgoZSl7cmV0dXJuIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYX1mdW5jdGlvbiBxaShlKXtyZXR1cm4hZS5xJiYoZS5xPW5ldyBudChVZixlLDExLDEwKSksZS5xfWZ1bmN0aW9uIHR0KGUpe3JldHVybiFlLnMmJihlLnM9bmV3IG50KGRsLGUsMjEsMTcpKSxlLnN9ZnVuY3Rpb24gQXBuKGUpe3JldHVybiBYcihlKSxNZHQobmV3IGhyKGRyKGUuYS5LYygpLG5ldyBqKSkpfWZ1bmN0aW9uIExwbihlLHQpe3JldHVybiBiaChlKSxiaCh0KSxQSmUobChlLDIyKSxsKHQsMjIpKX1mdW5jdGlvbiBObShlLHQsbil7dmFyIHIsYTtyPWc0ZShuKSxhPW5ldyB2ayhyKSxlMShlLHQsYSl9ZnVuY3Rpb24gcm9lKGUsdCxuLHIsYSxvKXtzTi5jYWxsKHRoaXMsZSx0LG4scixhLG8/LTI6LTEpfWZ1bmN0aW9uIFZhdChlLHQsbixyKXt0eWUuY2FsbCh0aGlzLHQsbiksdGhpcy5iPWUsdGhpcy5hPXJ9ZnVuY3Rpb24gVWF0KGUsdCl7WGNuLmNhbGwodGhpcyxuZXcgUGFlKGUpKSx0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBCNWUoZSl7dGhpcy5iPWUsdGhpcy5jPWUsZS5lPW51bGwsZS5jPW51bGwsdGhpcy5hPTF9ZnVuY3Rpb24gTXBuKGUpe3UwKCk7dmFyIHQ7dD1sKGUuZywxMCksdC5uLmE9ZS5kLmMrdC5kLmJ9ZnVuY3Rpb24gWGsoKXtYaz1VO3ZhciBlLHQ7dD0hRjVuKCksZT1uZXcgc2UsUzBlPXQ/bmV3IG5lOmV9ZnVuY3Rpb24gaW9lKGUpe3JldHVybiBDbigpLERlKGUsNTkpP25ldyBlc2UoZSk6bmV3IGpxKGUpfWZ1bmN0aW9uIExIKGUpe3JldHVybiBEZShlLDE2KT9uZXcgVV8obChlLDE2KSk6dWRuKGUuS2MoKSl9ZnVuY3Rpb24gRHBuKGUpe3JldHVybiBuZXcgcW50KGUsZS5lLlJkKCkuZ2MoKSplLmMuUmQoKS5nYygpKX1mdW5jdGlvbiBJcG4oZSl7cmV0dXJuIG5ldyBIbnQoZSxlLmUuUmQoKS5nYygpKmUuYy5SZCgpLmdjKCkpfWZ1bmN0aW9uIEY1ZShlKXtyZXR1cm4gZSYmZS5oYXNoQ29kZT9lLmhhc2hDb2RlKCk6ZncoZSl9ZnVuY3Rpb24gc29lKGUsdCl7cmV0dXJuIHQ9PW51bGw/ISF6byhlLmYsbnVsbCk6V2RuKGUuaSx0KX1mdW5jdGlvbiBPcG4oZSx0KXt2YXIgbjtyZXR1cm4gbj13eWUoZS5hLHQpLG4mJih0LmQ9bnVsbCksbn1mdW5jdGlvbiBHYXQoZSx0LG4pe3JldHVybiBlLmY/ZS5mLmVmKHQsbik6ITF9ZnVuY3Rpb24gVk8oZSx0LG4scil7VHMoZS5jW3QuZ10sbi5nLHIpLFRzKGUuY1tuLmddLHQuZyxyKX1mdW5jdGlvbiBhb2UoZSx0LG4scil7VHMoZS5jW3QuZ10sdC5nLG4pLFRzKGUuYlt0LmddLHQuZyxyKX1mdW5jdGlvbiBOcG4oZSx0LG4pe3JldHVybiB6ZShHZShuLmEpKTw9ZSYmemUoR2Uobi5iKSk+PXR9ZnVuY3Rpb24gS2F0KGUsdCl7dGhpcy5nPWUsdGhpcy5kPWhlKGxlKHdnLDEpLG0yLDEwLDAsW3RdKX1mdW5jdGlvbiBXYXQoZSl7dGhpcy5jPWUsdGhpcy5iPW5ldyBLcChsKFhyKG5ldyB0bCksNTApKX1mdW5jdGlvbiBZYXQoZSl7dGhpcy5jPWUsdGhpcy5iPW5ldyBLcChsKFhyKG5ldyBsNSksNTApKX1mdW5jdGlvbiBYYXQoZSl7dGhpcy5iPWUsdGhpcy5hPW5ldyBLcChsKFhyKG5ldyBCaSksNTApKX1mdW5jdGlvbiBRYXQoKXt0aGlzLmI9bmV3IEtzLHRoaXMuZD1uZXcgb3MsdGhpcy5lPW5ldyBGd2V9ZnVuY3Rpb24gUjVlKCl7dGhpcy5jPW5ldyBxYSx0aGlzLmQ9bmV3IHFhLHRoaXMuZT1uZXcgcWF9ZnVuY3Rpb24gVHcoKXt0aGlzLmE9bmV3IGJsLHRoaXMuYj0oTWgoMyxZeSksbmV3IEJ1KDMpKX1mdW5jdGlvbiBKcChlLHQpe3RoaXMuZT1lLHRoaXMuYT13YSx0aGlzLmI9UWJ0KHQpLHRoaXMuYz10fWZ1bmN0aW9uIE1IKGUpe3RoaXMuYz1lLmMsdGhpcy5kPWUuZCx0aGlzLmI9ZS5iLHRoaXMuYT1lLmF9ZnVuY3Rpb24gSmF0KGUsdCxuLHIsYSxvKXt0aGlzLmE9ZSxKb2UuY2FsbCh0aGlzLHQsbixyLGEsbyl9ZnVuY3Rpb24gWmF0KGUsdCxuLHIsYSxvKXt0aGlzLmE9ZSxKb2UuY2FsbCh0aGlzLHQsbixyLGEsbyl9ZnVuY3Rpb24gZGIoZSx0LG4scixhLG8sZil7cmV0dXJuIG5ldyBFb2UoZS5lLHQsbixyLGEsbyxmKX1mdW5jdGlvbiBQcG4oZSx0LG4pe3JldHVybiBuPj0wJiZ2bihlLnN1YnN0cihuLHQubGVuZ3RoKSx0KX1mdW5jdGlvbiBlb3QoZSx0KXtyZXR1cm4gRGUodCwxNDkpJiZ2bihlLmIsbCh0LDE0OSkuUGcoKSl9ZnVuY3Rpb24gQnBuKGUsdCl7cmV0dXJuIGUuYT90LkdoKCkuS2MoKTpsKHQuR2goKSw3MSkuSWkoKX1mdW5jdGlvbiB0b3QoZSx0KXt2YXIgbjtyZXR1cm4gbj1lLmIuUWModCksWWN0KG4sZS5iLmdjKCkpLG59ZnVuY3Rpb24gVU8oZSx0KXtpZihlPT1udWxsKXRocm93IHVlKG5ldyBEOCh0KSk7cmV0dXJuIGV9ZnVuY3Rpb24gZGMoZSl7cmV0dXJuIGUudXx8KFlsKGUpLGUudT1uZXcgTnJ0KGUsZSkpLGUudX1mdW5jdGlvbiBvb2UoZSl7dGhpcy5hPShDbigpLERlKGUsNTkpP25ldyBlc2UoZSk6bmV3IGpxKGUpKX1mdW5jdGlvbiBzbChlKXt2YXIgdDtyZXR1cm4gdD1sKEtuKGUsMTYpLDI5KSx0fHxlLmlpKCl9ZnVuY3Rpb24gREgoZSx0KXt2YXIgbjtyZXR1cm4gbj1fbShlLlJtKSx0PT1udWxsP246bisiOiAiK3R9ZnVuY3Rpb24gdGYoZSx0LG4pe3JldHVybiBHYSh0LG4sZS5sZW5ndGgpLGUuc3Vic3RyKHQsbi10KX1mdW5jdGlvbiBub3QoZSx0KXtWcS5jYWxsKHRoaXMpLFk2ZSh0aGlzKSx0aGlzLmE9ZSx0aGlzLmM9dH1mdW5jdGlvbiBGcG4oZSl7ZSYmREgoZSxlLmllKCkpfWZ1bmN0aW9uIFJwbihlKXtIeigpLGIuc2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGV9LDApfWZ1bmN0aW9uIGpwbigpe3JldHVybiBaVigpLGhlKGxlKGtfZSwxKSxpdCw0MzYsMCxbajBlLHhfZV0pfWZ1bmN0aW9uICRwbigpe3JldHVybiBhVigpLGhlKGxlKFRfZSwxKSxpdCw0MzUsMCxbRV9lLCQwZV0pfWZ1bmN0aW9uIHpwbigpe3JldHVybiBvVigpLGhlKGxlKEpfZSwxKSxpdCw0MzIsMCxbUTBlLHlLXSl9ZnVuY3Rpb24gcXBuKCl7cmV0dXJuIGRFKCksaGUobGUoJDh0LDEpLGl0LDUxNywwLFtkQixoMWVdKX1mdW5jdGlvbiBIcG4oKXtyZXR1cm4gekgoKSxoZShsZShQTGUsMSksaXQsNDI5LDAsW3oxZSxOTGVdKX1mdW5jdGlvbiBWcG4oKXtyZXR1cm4gcE4oKSxoZShsZSh3TGUsMSksaXQsNDI4LDAsW1hLLHZMZV0pfWZ1bmN0aW9uIFVwbigpe3JldHVybiBKSCgpLGhlKGxlKGhMZSwxKSxpdCw0MzEsMCxbbExlLFMxZV0pfWZ1bmN0aW9uIEdwbigpe3JldHVybiBkTigpLGhlKGxlKF9EZSwxKSxpdCw0MzAsMCxba2RlLEVkZV0pfWZ1bmN0aW9uIEtwbigpe3JldHVybiBvQSgpLGhlKGxlKERFdCwxKSxpdCw1MzEsMCxbdU0sY01dKX1mdW5jdGlvbiBXcG4oKXtyZXR1cm4ga1YoKSxoZShsZShFSWUsMSksaXQsNTAxLDAsWyRXLFg2XSl9ZnVuY3Rpb24gWXBuKCl7cmV0dXJuIHhkKCksaGUobGUoUkV0LDEpLGl0LDUyMywwLFt3MyxUMl0pfWZ1bmN0aW9uIFhwbigpe3JldHVybiBEMSgpLGhlKGxlKCRFdCwxKSxpdCw1MjIsMCxbd3YsWTFdKX1mdW5jdGlvbiBRcG4oKXtyZXR1cm4gSjAoKSxoZShsZSh0VHQsMSksaXQsNTI4LDAsW0U0LHFiXSl9ZnVuY3Rpb24gSnBuKCl7cmV0dXJuIGNOKCksaGUobGUoa0xlLDEpLGl0LDQ4OCwwLFt4TGUsSktdKX1mdW5jdGlvbiBacG4oKXtyZXR1cm4gR0goKSxoZShsZShmT2UsMSksaXQsNDkxLDAsW2RnZSxoT2VdKX1mdW5jdGlvbiBlMm4oKXtyZXR1cm4gZmNlKCksaGUobGUodk9lLDEpLGl0LDQ5MiwwLFtiT2UsbU9lXSl9ZnVuY3Rpb24gdDJuKCl7cmV0dXJuIFJIKCksaGUobGUoa0llLDEpLGl0LDQzMywwLFtVZGUseEllXSl9ZnVuY3Rpb24gbjJuKCl7cmV0dXJuIGVWKCksaGUobGUoQ0llLDEpLGl0LDQzNCwwLFtUSWUsUWRlXSl9ZnVuY3Rpb24gcjJuKCl7cmV0dXJuIFN3KCksaGUobGUoY1R0LDEpLGl0LDQ2NSwwLFtIYixLNl0pfWZ1bmN0aW9uIGkybigpe3JldHVybiByTigpLGhlKGxlKHlPZSwxKSxpdCw0MzgsMCxbdmdlLFFXXSl9ZnVuY3Rpb24gczJuKCl7cmV0dXJuIENOKCksaGUobGUocU9lLDEpLGl0LDQzNywwLFtaVyx6T2VdKX1mdW5jdGlvbiBhMm4oKXtyZXR1cm4gbWFlKCksaGUobGUoZ1ksMSksaXQsMzQ3LDAsW3JQZSxpUGVdKX1mdW5jdGlvbiBJSChlLHQsbixyKXtyZXR1cm4gbj49MD9lLlVoKHQsbixyKTplLkNoKG51bGwsbixyKX1mdW5jdGlvbiBHTyhlKXtyZXR1cm4gZS5iLmI9PTA/ZS5hLnNmKCk6a2FlKGUuYil9ZnVuY3Rpb24gbzJuKGUpe2lmKGUucCE9NSl0aHJvdyB1ZShuZXcgcGwpO3JldHVybiBZcihlLmYpfWZ1bmN0aW9uIGMybihlKXtpZihlLnAhPTUpdGhyb3cgdWUobmV3IHBsKTtyZXR1cm4gWXIoZS5rKX1mdW5jdGlvbiBqNWUoZSl7cmV0dXJuIHFlKGUuYSk9PT1xZSgobGNlKCksbnBlKSkmJmFNbihlKSxlLmF9ZnVuY3Rpb24gdTJuKGUsdCl7ZS5iPXQsZS5jPjAmJmUuYj4wJiYoZS5nPWFIKGUuYyxlLmIsZS5hKSl9ZnVuY3Rpb24gbDJuKGUsdCl7ZS5jPXQsZS5jPjAmJmUuYj4wJiYoZS5nPWFIKGUuYyxlLmIsZS5hKSl9ZnVuY3Rpb24gcm90KGUsdCl7Y2UodGhpcyxuZXcgbHQoZS5hLGUuYikpLHZlKHRoaXMsUE8odCkpfWZ1bmN0aW9uIEN3KCl7UWNuLmNhbGwodGhpcyxuZXcgTjgoQXkoMTIpKSksVHllKCEwKSx0aGlzLmE9Mn1mdW5jdGlvbiBjb2UoZSx0LG4pe0RpKCksWHYuY2FsbCh0aGlzLGUpLHRoaXMuYj10LHRoaXMuYT1ufWZ1bmN0aW9uICQ1ZShlLHQsbil7SmgoKSxOei5jYWxsKHRoaXMsdCksdGhpcy5hPWUsdGhpcy5iPW59ZnVuY3Rpb24gaW90KGUpe3ZhciB0O3Q9ZS5jLmQuYixlLmI9dCxlLmE9ZS5jLmQsdC5hPWUuYy5kLmI9ZX1mdW5jdGlvbiBoMm4oZSl7cmV0dXJuIGUuYj09MD9udWxsOihtcihlLmIhPTApLGFmKGUsZS5hLmEpKX1mdW5jdGlvbiB4dShlLHQpe3JldHVybiB0PT1udWxsP2hjKHpvKGUuZixudWxsKSk6eV8oZS5pLHQpfWZ1bmN0aW9uIHNvdChlLHQsbixyLGEpe3JldHVybiBuZXcgQnVlKGUsKHJFKCksUDBlKSx0LG4scixhKX1mdW5jdGlvbiBPSChlLHQpe3JldHVybiBHY3QodCksUHduKGUsV2UoVnIsZGksMjgsdCwxNSwxKSx0KX1mdW5jdGlvbiBOSChlLHQpe3JldHVybiBfSChlLCJzZXQxIiksX0godCwic2V0MiIpLG5ldyBHWmUoZSx0KX1mdW5jdGlvbiBmMm4oZSx0KXt2YXIgbj1DMGVbZS5jaGFyQ29kZUF0KDApXTtyZXR1cm4gbj8/ZX1mdW5jdGlvbiBhb3QoZSx0KXt2YXIgbixyO3JldHVybiBuPXQscj1uZXcgeHQsT3Z0KGUsbixyKSxyLmR9ZnVuY3Rpb24gdW9lKGUsdCxuLHIpe3ZhciBhO2E9bmV3IEZydCx0LmFbbi5nXT1hLFE4KGUuYixyLGEpfWZ1bmN0aW9uIGQybihlLHQpe3ZhciBuO3JldHVybiBuPUl3bihlLmYsdCksT2koSHEobiksZS5mLmQpfWZ1bmN0aW9uIEtPKGUpe3ZhciB0O0h3bihlLmEpLGRudChlLmEpLHQ9bmV3IGVfKGUuYSksUzhlKHQpfWZ1bmN0aW9uIGcybihlLHQpe3pidChlLCEwKSxWdShlLmUuUmYoKSxuZXcgdjRlKGUsITAsdCkpfWZ1bmN0aW9uIHAybihlLHQpe3JldHVybiB0eCgpLGU9PWRzKGNnKHQpKXx8ZT09ZHMoRWIodCkpfWZ1bmN0aW9uIGIybihlLHQpe3JldHVybiB0cCgpLGwoUSh0LChIYygpLCRkKSksMTcpLmE9PWV9ZnVuY3Rpb24gdWEoZSl7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKGUsSWkpLC0yMTQ3NDgzNjQ4KXwwfWZ1bmN0aW9uIG9vdChlKXt0aGlzLmE9bChYcihlKSwyNzcpLHRoaXMuYj0oQ24oKSxuZXcgRHllKGUpKX1mdW5jdGlvbiBjb3QoZSx0LG4pe3RoaXMuaT1uZXcgYnQsdGhpcy5iPWUsdGhpcy5nPXQsdGhpcy5hPW59ZnVuY3Rpb24gejVlKGUsdCxuKXt0aGlzLmE9bmV3IGJ0LHRoaXMuZT1lLHRoaXMuZj10LHRoaXMuYz1ufWZ1bmN0aW9uIFBIKGUsdCxuKXt0aGlzLmM9bmV3IGJ0LHRoaXMuZT1lLHRoaXMuZj10LHRoaXMuYj1ufWZ1bmN0aW9uIHVvdChlKXtWcS5jYWxsKHRoaXMpLFk2ZSh0aGlzKSx0aGlzLmE9ZSx0aGlzLmM9ITB9ZnVuY3Rpb24gbTJuKGUpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlPWV8fHt9LG5ldyB0fWZ1bmN0aW9uIHYybihlKXtpZihlLkFlKCkpcmV0dXJuIG51bGw7dmFyIHQ9ZS5uO3JldHVybiBzS1t0XX1mdW5jdGlvbiBXTyhlKXtyZXR1cm4gZS5EYj4+MTYhPTM/bnVsbDpsKGUuQ2IsMjcpfWZ1bmN0aW9uIE0xKGUpe3JldHVybiBlLkRiPj4xNiE9OT9udWxsOmwoZS5DYiwyNyl9ZnVuY3Rpb24gbG90KGUpe3JldHVybiBlLkRiPj4xNiE9Nj9udWxsOmwoZS5DYiw3NCl9ZnVuY3Rpb24gU3coKXtTdz1VLEhiPW5ldyBIM2UoTXgsMCksSzY9bmV3IEgzZShEeCwxKX1mdW5jdGlvbiB4ZCgpe3hkPVUsdzM9bmV3ICQzZShEeCwwKSxUMj1uZXcgJDNlKE14LDEpfWZ1bmN0aW9uIEQxKCl7RDE9VSx3dj1uZXcgejNlKHdoZSwwKSxZMT1uZXcgejNlKCJVUCIsMSl9ZnVuY3Rpb24gaG90KCl7aG90PVUsbzZ0PUtyKCgkeigpLGhlKGxlKGE2dCwxKSxpdCw1NDksMCxbRTBlXSkpKX1mdW5jdGlvbiBmb3QoZSl7dmFyIHQ7cmV0dXJuIHQ9bmV3IEt6KEF5KGUubGVuZ3RoKSksajdlKHQsZSksdH1mdW5jdGlvbiBkb3QoZSx0KXtyZXR1cm4gZS5iKz10LmIsZS5jKz10LmMsZS5kKz10LmQsZS5hKz10LmEsZX1mdW5jdGlvbiB3Mm4oZSx0KXtyZXR1cm4gWmZ0KGUsdCk/KFlodChlKSwhMCk6ITF9ZnVuY3Rpb24gV2coZSx0KXtpZih0PT1udWxsKXRocm93IHVlKG5ldyBTOCk7cmV0dXJuIGo1bihlLHQpfWZ1bmN0aW9uIFlPKGUsdCl7dmFyIG47bj1lLnEuZ2V0SG91cnMoKSxlLnEuc2V0RGF0ZSh0KSxYQShlLG4pfWZ1bmN0aW9uIHE1ZShlLHQsbil7dmFyIHI7cj1lLkloKHQpLHI+PTA/ZS5iaShyLG4pOiQ5ZShlLHQsbil9ZnVuY3Rpb24gZ290KGUsdCl7dmFyIG47cmV0dXJuIG49ZS5JaCh0KSxuPj0wP2UuV2gobik6cXVlKGUsdCl9ZnVuY3Rpb24gcG90KGUsdCl7dmFyIG47Zm9yKFhyKHQpLG49ZS5hO247bj1uLmMpdC5ZZChuLmcsbi5pKX1mdW5jdGlvbiBsb2UoZSx0LG4pe3ZhciByO3I9dzB0KGUsdCxuKSxlLmI9bmV3IFRWKHIuYy5sZW5ndGgpfWZ1bmN0aW9uIFU1KGUsdCxuKXtCSCgpLGUmJmtpKFpnZSxlLHQpLGUmJmtpKGxGLGUsbil9ZnVuY3Rpb24geTJuKGUsdCl7cmV0dXJuIFlxKCksSG4oKSxsKHQuYSwxNykuYTxlfWZ1bmN0aW9uIHgybihlLHQpe3JldHVybiBZcSgpLEhuKCksbCh0LmIsMTcpLmE8ZX1mdW5jdGlvbiBob2UoZSx0KXtyZXR1cm4gYi5NYXRoLmFicyhlKTxiLk1hdGguYWJzKHQpP2U6dH1mdW5jdGlvbiBrMm4oZSl7cmV0dXJuIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYS5pPjB9ZnVuY3Rpb24gSDVlKGUpe3ZhciB0O3JldHVybiB0PWUuZCx0PWUuYmooZS5mKSxxcihlLHQpLHQuT2IoKX1mdW5jdGlvbiBib3QoZSx0KXt2YXIgbjtyZXR1cm4gbj1uZXcgSzRlKHQpLHpndChuLGUpLG5ldyBPbChuKX1mdW5jdGlvbiBFMm4oZSl7aWYoZS5wIT0wKXRocm93IHVlKG5ldyBwbCk7cmV0dXJuIElfKGUuZiwwKX1mdW5jdGlvbiBUMm4oZSl7aWYoZS5wIT0wKXRocm93IHVlKG5ldyBwbCk7cmV0dXJuIElfKGUuaywwKX1mdW5jdGlvbiBtb3QoZSl7cmV0dXJuIGUuRGI+PjE2IT03P251bGw6bChlLkNiLDI0MSl9ZnVuY3Rpb24gUWsoZSl7cmV0dXJuIGUuRGI+PjE2IT02P251bGw6bChlLkNiLDI0MSl9ZnVuY3Rpb24gdm90KGUpe3JldHVybiBlLkRiPj4xNiE9Nz9udWxsOmwoZS5DYiwxNjcpfWZ1bmN0aW9uIGRzKGUpe3JldHVybiBlLkRiPj4xNiE9MTE/bnVsbDpsKGUuQ2IsMjcpfWZ1bmN0aW9uIGt5KGUpe3JldHVybiBlLkRiPj4xNiE9MTc/bnVsbDpsKGUuQ2IsMjkpfWZ1bmN0aW9uIHdvdChlKXtyZXR1cm4gZS5EYj4+MTYhPTM/bnVsbDpsKGUuQ2IsMTU1KX1mdW5jdGlvbiBWNWUoZSl7dmFyIHQ7cmV0dXJuIHhiKGUpLHQ9bmV3IEtzLEZpKGUsbmV3IGs1KHQpKX1mdW5jdGlvbiB5b3QoZSx0KXt2YXIgbj1lLmE9ZS5hfHxbXTtyZXR1cm4gblt0XXx8KG5bdF09ZS52ZSh0KSl9ZnVuY3Rpb24gQzJuKGUsdCl7dmFyIG47bj1lLnEuZ2V0SG91cnMoKSxlLnEuc2V0TW9udGgodCksWEEoZSxuKX1mdW5jdGlvbiB4b3QoZSx0KXtGcSh0aGlzKSx0aGlzLmY9dCx0aGlzLmc9ZSxTSCh0aGlzKSx0aGlzLmplKCl9ZnVuY3Rpb24ga290KGUsdCl7dGhpcy5hPWUsdGhpcy5jPUphKHRoaXMuYSksdGhpcy5iPW5ldyBNSCh0KX1mdW5jdGlvbiBFb3QoZSx0LG4pe3RoaXMuYT10LHRoaXMuYz1lLHRoaXMuYj0oWHIobiksbmV3IE9sKG4pKX1mdW5jdGlvbiBUb3QoZSx0LG4pe3RoaXMuYT10LHRoaXMuYz1lLHRoaXMuYj0oWHIobiksbmV3IE9sKG4pKX1mdW5jdGlvbiBDb3QoZSl7dGhpcy5hPWUsdGhpcy5iPVdlKEFFdCxkdCwyMDQzLGUuZS5sZW5ndGgsMCwyKX1mdW5jdGlvbiBTb3QoKXt0aGlzLmE9bmV3IGJkLHRoaXMuZT1uZXcgS3MsdGhpcy5nPTAsdGhpcy5pPTB9ZnVuY3Rpb24gQkgoKXtCSD1VLFpnZT1uZXcgUHIsbEY9bmV3IFByLHdsbihDNnQsbmV3IExTKX1mdW5jdGlvbiBfb3QoKXtfb3Q9VSxmRXQ9eWwobmV3IFhzLCh1bygpLG1jKSwodm8oKSxnQikpfWZ1bmN0aW9uIFU1ZSgpe1U1ZT1VLGRFdD15bChuZXcgWHMsKHVvKCksbWMpLCh2bygpLGdCKSl9ZnVuY3Rpb24gQW90KCl7QW90PVUscEV0PXlsKG5ldyBYcywodW8oKSxtYyksKHZvKCksZ0IpKX1mdW5jdGlvbiBMb3QoKXtMb3Q9VSxPRXQ9ZmkobmV3IFhzLCh1bygpLG1jKSwodm8oKSx6TCkpfWZ1bmN0aW9uIFNoKCl7U2g9VSxCRXQ9ZmkobmV3IFhzLCh1bygpLG1jKSwodm8oKSx6TCkpfWZ1bmN0aW9uIE1vdCgpe01vdD1VLEZFdD1maShuZXcgWHMsKHVvKCksbWMpLCh2bygpLHpMKSl9ZnVuY3Rpb24gZm9lKCl7Zm9lPVUscUV0PWZpKG5ldyBYcywodW8oKSxtYyksKHZvKCksekwpKX1mdW5jdGlvbiByQShlLHQsbixyLGEsbyl7cmV0dXJuIG5ldyBaZyhlLmUsdCxlLkxqKCksbixyLGEsbyl9ZnVuY3Rpb24gcmMoZSx0LG4pe3JldHVybiB0PT1udWxsP2p1KGUuZixudWxsLG4pOkJ3KGUuaSx0LG4pfWZ1bmN0aW9uIHBvKGUsdCl7ZS5jJiZhbChlLmMuZyxlKSxlLmM9dCxlLmMmJnZ0KGUuYy5nLGUpfWZ1bmN0aW9uIFZhKGUsdCl7ZS5jJiZhbChlLmMuYSxlKSxlLmM9dCxlLmMmJnZ0KGUuYy5hLGUpfWZ1bmN0aW9uIE1jKGUsdCl7ZS5pJiZhbChlLmkuaixlKSxlLmk9dCxlLmkmJnZ0KGUuaS5qLGUpfWZ1bmN0aW9uIEZhKGUsdCl7ZS5kJiZhbChlLmQuZSxlKSxlLmQ9dCxlLmQmJnZ0KGUuZC5lLGUpfWZ1bmN0aW9uIGRvZShlLHQpe2UuYSYmYWwoZS5hLmssZSksZS5hPXQsZS5hJiZ2dChlLmEuayxlKX1mdW5jdGlvbiBnb2UoZSx0KXtlLmImJmFsKGUuYi5mLGUpLGUuYj10LGUuYiYmdnQoZS5iLmYsZSl9ZnVuY3Rpb24gRG90KGUsdCl7RmduKGUsZS5iLGUuYyksbChlLmIuYiw2OCksdCYmbCh0LmIsNjgpLmJ9ZnVuY3Rpb24gUzJuKGUsdCl7cmV0dXJuIFlpKGwoZS5jLDY1KS5jLmUuYixsKHQuYyw2NSkuYy5lLmIpfWZ1bmN0aW9uIF8ybihlLHQpe3JldHVybiBZaShsKGUuYyw2NSkuYy5lLmEsbCh0LmMsNjUpLmMuZS5hKX1mdW5jdGlvbiBBMm4oZSl7cmV0dXJuIE1jZSgpLEhuKCksbChlLmEsODYpLmQuZSE9MH1mdW5jdGlvbiBGSChlLHQpe0RlKGUuQ2IsMTg0KSYmKGwoZS5DYiwxODQpLnRiPW51bGwpLEZ1KGUsdCl9ZnVuY3Rpb24gcG9lKGUsdCl7RGUoZS5DYiw5MCkmJnp5KFlsKGwoZS5DYiw5MCkpLDQpLEZ1KGUsdCl9ZnVuY3Rpb24gTDJuKGUsdCl7bThlKGUsdCksRGUoZS5DYiw5MCkmJnp5KFlsKGwoZS5DYiw5MCkpLDIpfWZ1bmN0aW9uIE0ybihlLHQpe3ZhciBuLHI7bj10LmMscj1uIT1udWxsLHImJko4KGUsbmV3IHl5KHQuYykpfWZ1bmN0aW9uIElvdChlKXt2YXIgdCxuO3JldHVybiBuPShTaygpLHQ9bmV3IFF2LHQpLHNFKG4sZSksbn1mdW5jdGlvbiBPb3QoZSl7dmFyIHQsbjtyZXR1cm4gbj0oU2soKSx0PW5ldyBRdix0KSxzRShuLGUpLG59ZnVuY3Rpb24gTm90KGUpe2Zvcih2YXIgdDs7KWlmKHQ9ZS5QYigpLCFlLk9iKCkpcmV0dXJuIHR9ZnVuY3Rpb24gRDJuKGUsdCxuKXtyZXR1cm4gdnQoZS5hLChrSCgpLGZ1ZSh0LG4pLG5ldyBpdyh0LG4pKSksZX1mdW5jdGlvbiBrdShlLHQpe3JldHVybiBGbygpLFZvZSh0KT9uZXcgbkgodCxlKTpuZXcgeU8odCxlKX1mdW5jdGlvbiBYTyhlKXtyZXR1cm4gQ2QoKSxpdShlLDApPj0wP2tiKGUpOkpfKGtiKHIyKGUpKSl9ZnVuY3Rpb24gSTJuKGUpe3ZhciB0O3JldHVybiB0PWwoZUgoZS5iKSw5KSxuZXcgWmgoZS5hLHQsZS5jKX1mdW5jdGlvbiBQb3QoZSx0KXt2YXIgbjtyZXR1cm4gbj1sKE95KGV4KGUuYSksdCksMTYpLG4/bi5nYygpOjB9ZnVuY3Rpb24gQm90KGUsdCxuKXt2YXIgcjtvMXQodCxuLGUuYy5sZW5ndGgpLHI9bi10LGQzZShlLmMsdCxyKX1mdW5jdGlvbiBacChlLHQsbil7bzF0KHQsbixlLmdjKCkpLHRoaXMuYz1lLHRoaXMuYT10LHRoaXMuYj1uLXR9ZnVuY3Rpb24gbngoZSl7dGhpcy5jPW5ldyBvcyx0aGlzLmI9ZS5iLHRoaXMuZD1lLmMsdGhpcy5hPWUuYX1mdW5jdGlvbiBib2UoZSl7dGhpcy5hPWIuTWF0aC5jb3MoZSksdGhpcy5iPWIuTWF0aC5zaW4oZSl9ZnVuY3Rpb24gUG0oZSx0LG4scil7dGhpcy5jPWUsdGhpcy5kPXIsZG9lKHRoaXMsdCksZ29lKHRoaXMsbil9ZnVuY3Rpb24gRzVlKGUsdCl7WWNuLmNhbGwodGhpcyxuZXcgTjgoQXkoZSkpKSxNaCh0LER3dCksdGhpcy5hPXR9ZnVuY3Rpb24gRm90KGUsdCxuKXtyZXR1cm4gbmV3IEJ1ZShlLChyRSgpLE4wZSksbnVsbCwhMSx0LG4pfWZ1bmN0aW9uIFJvdChlLHQsbil7cmV0dXJuIG5ldyBCdWUoZSwockUoKSxCMGUpLHQsbixudWxsLCExKX1mdW5jdGlvbiBPMm4oKXtyZXR1cm4gRmwoKSxoZShsZShvYywxKSxpdCwxMDgsMCxbeV9lLEVjLGk0XSl9ZnVuY3Rpb24gTjJuKCl7cmV0dXJuIG9sKCksaGUobGUoWDZ0LDEpLGl0LDQ3MiwwLFthMSxGYix3MF0pfWZ1bmN0aW9uIFAybigpe3JldHVybiBCbCgpLGhlKGxlKFc2dCwxKSxpdCw0NzEsMCxbRmQsQmIsdjBdKX1mdW5jdGlvbiBCMm4oKXtyZXR1cm4gdDEoKSxoZShsZShzNCwxKSxpdCwyMzcsMCxbR2MsJHUsS2NdKX1mdW5jdGlvbiBGMm4oKXtyZXR1cm4gbEEoKSxoZShsZShkQWUsMSksaXQsMzkxLDAsW3QxZSxlMWUsbjFlXSl9ZnVuY3Rpb24gUjJuKCl7cmV0dXJuIE93KCksaGUobGUobTFlLDEpLGl0LDM3MiwwLFtvMyxSYixhM10pfWZ1bmN0aW9uIGoybigpe3JldHVybiBkQSgpLGhlKGxlKGRMZSwxKSxpdCwzMjIsMCxbSEwsbUIsZkxlXSl9ZnVuY3Rpb24gJDJuKCl7cmV0dXJuIHBWKCksaGUobGUocExlLDEpLGl0LDM1MSwwLFtnTGUsWUssXzFlXSl9ZnVuY3Rpb24gejJuKCl7cmV0dXJuIFZtKCksaGUobGUobXh0LDEpLGl0LDQ2MCwwLFtNMWUsRlQsUDZdKX1mdW5jdGlvbiBxMm4oKXtyZXR1cm4gdkUoKSxoZShsZSgkMWUsMSksaXQsMjk5LDAsW1IxZSxqMWUsdkJdKX1mdW5jdGlvbiBIMm4oKXtyZXR1cm4gZXAoKSxoZShsZShDeHQsMSksaXQsMzExLDAsW3dCLEY2LFV4XSl9ZnVuY3Rpb24gVjJuKCl7cmV0dXJuIEVBKCksaGUobGUobURlLDEpLGl0LDM5MCwwLFtwZGUsYkRlLFNXXSl9ZnVuY3Rpb24gVTJuKCl7cmV0dXJuIHFvKCksaGUobGUoc0V0LDEpLGl0LDQ2MywwLFtzTSwkbCx6dV0pfWZ1bmN0aW9uIEcybigpe3JldHVybiBMVigpLGhlKGxlKE1EZSwxKSxpdCwzODcsMCxbQURlLFRkZSxMRGVdKX1mdW5jdGlvbiBLMm4oKXtyZXR1cm4geUEoKSxoZShsZShERGUsMSksaXQsMzQ5LDAsW1NkZSxDZGUsTUJdKX1mdW5jdGlvbiBXMm4oKXtyZXR1cm4gU0UoKSxoZShsZShPRGUsMSksaXQsMzUwLDAsW19kZSxJRGUsYU1dKX1mdW5jdGlvbiBZMm4oKXtyZXR1cm4gZ1YoKSxoZShsZShCRGUsMSksaXQsMzUyLDAsW1BEZSxBZGUsTkRlXSl9ZnVuY3Rpb24gWDJuKCl7cmV0dXJuIE9WKCksaGUobGUoRkRlLDEpLGl0LDM4OCwwLFtMZGUsWFQsazRdKX1mdW5jdGlvbiBRMm4oKXtyZXR1cm4gSXcoKSxoZShsZShTRXQsMSksaXQsNDY0LDAsW0RCLG9NLE1XXSl9ZnVuY3Rpb24gSTEoZSl7cmV0dXJuIEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbZS5pLm4sZS5uLGUuYV0pKX1mdW5jdGlvbiBKMm4oKXtyZXR1cm4geEEoKSxoZShsZShlSWUsMSksaXQsMzkyLDAsW1pEZSxJZGUsT0JdKX1mdW5jdGlvbiBqb3QoKXtqb3Q9VSxGVHQ9eWwobmV3IFhzLCh3eCgpLGhNKSwoV0EoKSxWRGUpKX1mdW5jdGlvbiBSSCgpe1JIPVUsVWRlPW5ldyBWM2UoIkRGUyIsMCkseEllPW5ldyBWM2UoIkJGUyIsMSl9ZnVuY3Rpb24gJG90KGUsdCxuKXt2YXIgcjtyPW5ldyBodGUsci5iPXQsci5hPW4sKyt0LmIsdnQoZS5kLHIpfWZ1bmN0aW9uIFoybihlLHQsbil7dmFyIHI7cj1uZXcgRW8obi5kKSxPaShyLGUpLGI4ZSh0LHIuYSxyLmIpfWZ1bmN0aW9uIGVibihlLHQpe09udChlLFlyKHZhKGJ3KHQsMjQpLFpVKSksWXIodmEodCxaVSkpKX1mdW5jdGlvbiBFeShlLHQpe2lmKGU8MHx8ZT50KXRocm93IHVlKG5ldyB0YyhkRWUrZStnRWUrdCkpfWZ1bmN0aW9uIFNuKGUsdCl7aWYoZTwwfHxlPj10KXRocm93IHVlKG5ldyB0YyhkRWUrZStnRWUrdCkpfWZ1bmN0aW9uIFhuKGUsdCl7aWYoZTwwfHxlPj10KXRocm93IHVlKG5ldyBlM2UoZEVlK2UrZ0VlK3QpKX1mdW5jdGlvbiBrbihlLHQpe3RoaXMuYj0obnIoZSksZSksdGhpcy5hPXQmWHk/dDp0fDY0fF9kfWZ1bmN0aW9uIEs1ZShlKXt2YXIgdDtyZXR1cm4geGIoZSksdD0oRXcoKSxFdygpLEQwZSksbFYoZSx0KX1mdW5jdGlvbiB0Ym4oZSx0LG4pe3ZhciByO3JldHVybiByPVpBKGUsdCwhMSksci5iPD10JiZyLmE8PW59ZnVuY3Rpb24gbmJuKCl7cmV0dXJuIHRWKCksaGUobGUocE9lLDEpLGl0LDQzOSwwLFtnZ2UsZ09lLGRPZV0pfWZ1bmN0aW9uIHJibigpe3JldHVybiBxVigpLGhlKGxlKFhJZSwxKSxpdCwzOTQsMCxbWUllLHVnZSxXSWVdKX1mdW5jdGlvbiBpYm4oKXtyZXR1cm4gV1YoKSxoZShsZShLSWUsMSksaXQsNDQ1LDAsW1JCLFZXLHJnZV0pfWZ1bmN0aW9uIHNibigpe3JldHVybiBzVSgpLGhlKGxlKGdDdCwxKSxpdCw0NTYsMCxbaWdlLGFnZSxzZ2VdKX1mdW5jdGlvbiBhYm4oKXtyZXR1cm4gTE4oKSxoZShsZShBSWUsMSksaXQsMzkzLDAsW3pXLFNJZSxfSWVdKX1mdW5jdGlvbiBvYm4oKXtyZXR1cm4gQVYoKSxoZShsZShHSWUsMSksaXQsMzAwLDAsW25nZSxVSWUsVkllXSl9ZnVuY3Rpb24gY2JuKCl7cmV0dXJuIHJwKCksaGUobGUoWU5lLDEpLGl0LDM0NiwwLFtvWSxBMixETV0pfWZ1bmN0aW9uIHVibigpe3JldHVybiBQTigpLGhlKGxlKHBnZSwxKSxpdCw0NDQsMCxbV1csWVcsWFddKX1mdW5jdGlvbiBsYm4oKXtyZXR1cm4gRjEoKSxoZShsZShGTmUsMSksaXQsMjc4LDAsW25DLF80LHJDXSl9ZnVuY3Rpb24gaGJuKCl7cmV0dXJuIGR4KCksaGUobGUoblBlLDEpLGl0LDI4MCwwLFt0UGUsTDQsZFldKX1mdW5jdGlvbiBfdyhlKXtyZXR1cm4gWHIoZSksRGUoZSwxNik/bmV3IE9sKGwoZSwxNikpOiRrKGUuS2MoKSl9ZnVuY3Rpb24gVzVlKGUsdCl7cmV0dXJuIGUmJmUuZXF1YWxzP2UuZXF1YWxzKHQpOnFlKGUpPT09cWUodCl9ZnVuY3Rpb24gdmEoZSx0KXtyZXR1cm4gbWIocmduKHdjKGUpP01mKGUpOmUsd2ModCk/TWYodCk6dCkpfWZ1bmN0aW9uIFEwKGUsdCl7cmV0dXJuIG1iKGlnbih3YyhlKT9NZihlKTplLHdjKHQpP01mKHQpOnQpKX1mdW5jdGlvbiBtb2UoZSx0KXtyZXR1cm4gbWIoc2duKHdjKGUpP01mKGUpOmUsd2ModCk/TWYodCk6dCkpfWZ1bmN0aW9uIGZibihlLHQpe3ZhciBuO3JldHVybiBuPShucihlKSxlKS5nLHF5ZSghIW4pLG5yKHQpLG4odCl9ZnVuY3Rpb24gem90KGUsdCl7dmFyIG4scjtyZXR1cm4gcj1IayhlLHQpLG49ZS5hLmZkKHIpLG5ldyBWWmUoZSxuKX1mdW5jdGlvbiBkYm4oZSl7cmV0dXJuIGUuRGI+PjE2IT02P251bGw6bChVdWUoZSksMjQxKX1mdW5jdGlvbiBnYm4oZSl7aWYoZS5wIT0yKXRocm93IHVlKG5ldyBwbCk7cmV0dXJuIFlyKGUuZikmWnN9ZnVuY3Rpb24gcGJuKGUpe2lmKGUucCE9Mil0aHJvdyB1ZShuZXcgcGwpO3JldHVybiBZcihlLmspJlpzfWZ1bmN0aW9uIHJlKGUpe3JldHVybiBtcihlLmE8ZS5jLmMubGVuZ3RoKSxlLmI9ZS5hKyssZS5jLmNbZS5iXX1mdW5jdGlvbiBiYm4oZSx0KXtlLmI9ZS5ifHQuYixlLmM9ZS5jfHQuYyxlLmQ9ZS5kfHQuZCxlLmE9ZS5hfHQuYX1mdW5jdGlvbiBtYm4oZSx0KXt2YXIgbjtuPXplKEdlKGUuYS5vZigocGkoKSxpWSkpKSksbnd0KGUsdCxuKX1mdW5jdGlvbiBxb3QoZSx0KXtJbS5jYWxsKHRoaXMsMSwyLGhlKGxlKFZyLDEpLGRpLDI4LDE1LFtlLHRdKSl9ZnVuY3Rpb24gSG90KGUsdCxuKXtYdi5jYWxsKHRoaXMsMjUpLHRoaXMuYj1lLHRoaXMuYT10LHRoaXMuYz1ufWZ1bmN0aW9uIF9oKGUpe0RpKCksWHYuY2FsbCh0aGlzLGUpLHRoaXMuYz0hMSx0aGlzLmE9ITF9ZnVuY3Rpb24gdmJuKGUpe3JldHVybiBlLmE9PShlRSgpLF9ZKSYmdXQoZSxJU24oZS5nLGUuYikpLGUuYX1mdW5jdGlvbiByeChlKXtyZXR1cm4gZS5kPT0oZUUoKSxfWSkmJlR0KGUsREFuKGUuZyxlLmIpKSxlLmR9ZnVuY3Rpb24gd2JuKGUsdCl7cmV0dXJuIGhBKCksZS5jPT10LmM/WWkodC5kLGUuZCk6WWkodC5jLGUuYyl9ZnVuY3Rpb24geWJuKGUsdCl7cmV0dXJuIGhBKCksZS5jPT10LmM/WWkodC5kLGUuZCk6WWkoZS5jLHQuYyl9ZnVuY3Rpb24geGJuKGUsdCl7cmV0dXJuIGhBKCksZS5jPT10LmM/WWkoZS5kLHQuZCk6WWkoZS5jLHQuYyl9ZnVuY3Rpb24ga2JuKGUsdCl7cmV0dXJuIGhBKCksZS5jPT10LmM/WWkoZS5kLHQuZCk6WWkodC5jLGUuYyl9ZnVuY3Rpb24gWTVlKGUsdCl7cmV0dXJuIGZzdChlLmEsdCk/UjRlKGUuYixsKHQsMjIpLmcsbnVsbCk6bnVsbH1mdW5jdGlvbiBFYm4oZSl7cmV0dXJuIGJvKGwwKFpjKEpsKGUsMzIpKSwzMiksWmMoSmwoZSwzMikpKX1mdW5jdGlvbiBYNWUoZSl7cmV0dXJuIGUuYj09bnVsbHx8ZS5iLmxlbmd0aD09MD8ibl8iK2UuYToibl8iK2UuYn1mdW5jdGlvbiBCbShlKXtyZXR1cm4gZS5jPT1udWxsfHxlLmMubGVuZ3RoPT0wPyJuXyIrZS5nOiJuXyIrZS5jfWZ1bmN0aW9uIFZvdChlLHQpe3ZhciBuO2ZvcihuPWUrIiI7bi5sZW5ndGg8dDspbj0iMCIrbjtyZXR1cm4gbn1mdW5jdGlvbiBUYm4oZSx0KXt2YXIgbjtuPWwoY3IoZS5nLHQpLDYwKSxWdSh0LmQsbmV3IFJldChlLG4pKX1mdW5jdGlvbiBDYm4oZSx0KXt2YXIgbixyO3JldHVybiBuPUtkdChlKSxyPUtkdCh0KSxuPHI/LTE6bj5yPzE6MH1mdW5jdGlvbiBVb3QoZSx0KXt2YXIgbixyO3JldHVybiBuPSRvZSh0KSxyPW4sbChjcihlLmMsciksMTcpLmF9ZnVuY3Rpb24gdm9lKGUsdCxuKXt2YXIgcjtyPWUuZFt0LnBdLGUuZFt0LnBdPWUuZFtuLnBdLGUuZFtuLnBdPXJ9ZnVuY3Rpb24gU2JuKGUsdCxuKXt2YXIgcjtlLm4mJnQmJm4mJihyPW5ldyBLbmUsdnQoZS5lLHIpKX1mdW5jdGlvbiB3b2UoZSx0KXtpZihuYShlLmEsdCksdC5kKXRocm93IHVlKG5ldyBBYyhlM3QpKTt0LmQ9ZX1mdW5jdGlvbiBRNWUoZSx0KXt0aGlzLmE9bmV3IGJ0LHRoaXMuZD1uZXcgYnQsdGhpcy5mPWUsdGhpcy5jPXR9ZnVuY3Rpb24gR290KCl7dGhpcy5jPW5ldyBMbnQsdGhpcy5hPW5ldyBQdXQsdGhpcy5iPW5ldyBVUWUsdWV0KCl9ZnVuY3Rpb24gS290KCl7aHgoKSx0aGlzLmI9bmV3IFByLHRoaXMuYT1uZXcgUHIsdGhpcy5jPW5ldyBidH1mdW5jdGlvbiBXb3QoZSx0LG4pe3RoaXMuZD1lLHRoaXMuaj10LHRoaXMuZT1uLHRoaXMubz0tMSx0aGlzLnA9M31mdW5jdGlvbiBZb3QoZSx0LG4pe3RoaXMuZD1lLHRoaXMuaz10LHRoaXMuZj1uLHRoaXMubz0tMSx0aGlzLnA9NX1mdW5jdGlvbiBYb3QoZSx0LG4scixhLG8pe1E2ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBRb3QoZSx0LG4scixhLG8pe0o2ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBKb3QoZSx0LG4scixhLG8pe3A2ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBab3QoZSx0LG4scixhLG8pe3Q3ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBlY3QoZSx0LG4scixhLG8pe2I2ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiB0Y3QoZSx0LG4scixhLG8pe1o2ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBuY3QoZSx0LG4scixhLG8pe2U3ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiByY3QoZSx0LG4scixhLG8pe202ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBpY3QoZSx0LG4scil7TnouY2FsbCh0aGlzLG4pLHRoaXMuYj1lLHRoaXMuYz10LHRoaXMuZD1yfWZ1bmN0aW9uIHNjdChlLHQpe3RoaXMuZj1lLHRoaXMuYT0oZUUoKSxTWSksdGhpcy5jPVNZLHRoaXMuYj10fWZ1bmN0aW9uIGFjdChlLHQpe3RoaXMuZz1lLHRoaXMuZD0oZUUoKSxfWSksdGhpcy5hPV9ZLHRoaXMuYj10fWZ1bmN0aW9uIEo1ZShlLHQpeyFlLmMmJihlLmM9bmV3IExzKGUsMCkpLEhVKGUuYywoR2koKSxITSksdCl9ZnVuY3Rpb24gX2JuKGUsdCl7cmV0dXJuIHVUbihlLHQsRGUodCwxMDIpJiYobCh0LDE5KS5CYiZJbykhPTApfWZ1bmN0aW9uIEFibihlLHQpe3JldHVybiAkc3QoWmMoZS5xLmdldFRpbWUoKSksWmModC5xLmdldFRpbWUoKSkpfWZ1bmN0aW9uIG9jdChlKXtyZXR1cm4gQ2FlKGUuZS5SZCgpLmdjKCkqZS5jLlJkKCkuZ2MoKSwxNixuZXcgcGllKGUpKX1mdW5jdGlvbiBMYm4oZSl7cmV0dXJuISFlLnUmJmR1KGUudS5hKS5pIT0wJiYhKGUubiYmY3VlKGUubikpfWZ1bmN0aW9uIE1ibihlKXtyZXR1cm4hIWUuYSYmWGwoZS5hLmEpLmkhPTAmJiEoZS5iJiZ1dWUoZS5iKSl9ZnVuY3Rpb24gWjVlKGUsdCl7cmV0dXJuIHQ9PTA/ISFlLm8mJmUuby5mIT0wOm51ZShlLHQpfWZ1bmN0aW9uIERibihlLHQsbil7dmFyIHI7cmV0dXJuIHI9bChlLlpiKCkueGModCksMTYpLCEhciYmci5IYyhuKX1mdW5jdGlvbiBjY3QoZSx0LG4pe3ZhciByO3JldHVybiByPWwoZS5aYigpLnhjKHQpLDE2KSwhIXImJnIuTWMobil9ZnVuY3Rpb24gdWN0KGUsdCl7dmFyIG47cmV0dXJuIG49MS10LGUuYVtuXT1FVihlLmFbbl0sbiksRVYoZSx0KX1mdW5jdGlvbiBsY3QoZSx0KXt2YXIgbixyO3JldHVybiByPXZhKGUsVm8pLG49bDAodCwzMiksUTAobixyKX1mdW5jdGlvbiBoY3QoZSx0LG4pe3ZhciByO3I9KFhyKGUpLG5ldyBPbChlKSksTzduKG5ldyBFb3Qocix0LG4pKX1mdW5jdGlvbiBRTyhlLHQsbil7dmFyIHI7cj0oWHIoZSksbmV3IE9sKGUpKSxON24obmV3IFRvdChyLHQsbikpfWZ1bmN0aW9uIHpjKGUsdCxuLHIsYSxvKXtyZXR1cm4gcWZ0KGUsdCxuLG8pLGM4ZShlLHIpLHU4ZShlLGEpLGV9ZnVuY3Rpb24gZmN0KGUsdCxuLHIpe3JldHVybiBlLmErPSIiK3RmKHQ9PW51bGw/dWw6eGModCksbixyKSxlfWZ1bmN0aW9uIFVhKGUsdCl7dGhpcy5hPWUsa3IuY2FsbCh0aGlzLGUpLEV5KHQsZS5nYygpKSx0aGlzLmI9dH1mdW5jdGlvbiBkY3QoZSl7dGhpcy5hPVdlKHdhLFJuLDEsUDdlKGIuTWF0aC5tYXgoOCxlKSk8PDEsNSwxKX1mdW5jdGlvbiBKTyhlKXtyZXR1cm4gbChqMShlLFdlKHdnLG0yLDEwLGUuYy5sZW5ndGgsMCwxKSksMTk5KX1mdW5jdGlvbiBrZChlKXtyZXR1cm4gbChqMShlLFdlKHUxZSxCaGUsMTgsZS5jLmxlbmd0aCwwLDEpKSw0ODMpfWZ1bmN0aW9uIGdjdChlKXtyZXR1cm4gZS5hP2UuZS5sZW5ndGg9PTA/ZS5hLmE6ZS5hLmErKCIiK2UuZSk6ZS5jfWZ1bmN0aW9uIGlBKGUpe2Zvcig7ZS5kPjAmJmUuYVstLWUuZF09PTA7KTtlLmFbZS5kKytdPT0wJiYoZS5lPTApfWZ1bmN0aW9uIHBjdChlKXtyZXR1cm4gbXIoZS5iLmIhPWUuZC5hKSxlLmM9ZS5iPWUuYi5iLC0tZS5hLGUuYy5jfWZ1bmN0aW9uIElibihlLHQsbil7ZS5hPXQsZS5jPW4sZS5iLmEuJGIoKSxDaChlLmQpLGF5KGUuZS5hLmMsMCl9ZnVuY3Rpb24gYmN0KGUsdCl7dmFyIG47ZS5lPW5ldyBWd2Usbj1IeSh0KSxWcyhuLGUuYyksTWJ0KGUsbiwwKX1mdW5jdGlvbiBRcyhlLHQsbixyKXt2YXIgYTthPW5ldyBKOSxhLmE9dCxhLmI9bixhLmM9cix1aShlLmEsYSl9ZnVuY3Rpb24gZ3QoZSx0LG4scil7dmFyIGE7YT1uZXcgSjksYS5hPXQsYS5iPW4sYS5jPXIsdWkoZS5iLGEpfWZ1bmN0aW9uIG1jdChlLHQsbil7aWYoZTwwfHx0PGV8fHQ+bil0aHJvdyB1ZShuZXcgdGMoVTluKGUsdCxuKSkpfWZ1bmN0aW9uIFpPKGUsdCl7aWYoZTwwfHxlPj10KXRocm93IHVlKG5ldyB0Yyhra24oZSx0KSkpO3JldHVybiBlfWZ1bmN0aW9uIE9ibihlKXtpZighKCJzdGFjayJpbiBlKSl0cnl7dGhyb3cgZX1jYXRjaHt9cmV0dXJuIGV9ZnVuY3Rpb24gRzUoZSl7cmV0dXJuIHBfKCksRGUoZS5nLDEwKT9sKGUuZywxMCk6bnVsbH1mdW5jdGlvbiBOYm4oZSl7cmV0dXJuIFY1KGUpLmRjKCk/ITE6KHJobihlLG5ldyBvZSksITApfWZ1bmN0aW9uIEZtKGUpe3ZhciB0O3JldHVybiB3YyhlKT8odD1lLHQ9PS0wPzA6dCk6WXZuKGUpfWZ1bmN0aW9uIHZjdChlLHQpe3JldHVybiBEZSh0LDQ0KT9ndWUoZS5hLGwodCw0NCkpOiExfWZ1bmN0aW9uIHdjdChlLHQpe3JldHVybiBEZSh0LDQ0KT9ndWUoZS5hLGwodCw0NCkpOiExfWZ1bmN0aW9uIHljdChlLHQpe3JldHVybiBEZSh0LDQ0KT9ndWUoZS5hLGwodCw0NCkpOiExfWZ1bmN0aW9uIGU2ZShlKXt2YXIgdDtyZXR1cm4gZmIoZSksdD1uZXcgTmUsQTUoZS5hLG5ldyB4NSh0KSksdH1mdW5jdGlvbiB0NmUoKXt2YXIgZSx0LG47cmV0dXJuIHQ9KG49KGU9bmV3IFF2LGUpLG4pLHZ0KFJQZSx0KSx0fWZ1bmN0aW9uIGpIKGUpe3ZhciB0O3JldHVybiBmYihlKSx0PW5ldyBnbixBNShlLmEsbmV3IFQ4KHQpKSx0fWZ1bmN0aW9uIFBibihlLHQpe3JldHVybiBlLmE8PWUuYj8odC5EZChlLmErKyksITApOiExfWZ1bmN0aW9uIHhjdChlKXtvY2UuY2FsbCh0aGlzLGUsKHJFKCksTzBlKSxudWxsLCExLG51bGwsITEpfWZ1bmN0aW9uIGtjdCgpe2tjdD1VLEE3dD1LcigoWnooKSxoZShsZShVX2UsMSksaXQsNDg5LDAsW0cwZV0pKSl9ZnVuY3Rpb24gRWN0KCl7RWN0PVUsakRlPXBhdChwdCgxKSxwdCg0KSksUkRlPXBhdChwdCgxKSxwdCgyKSl9ZnVuY3Rpb24gQmJuKGUsdCl7cmV0dXJuIG5ldyB3YWUodCx6XyhKYSh0LmUpLGUsZSksKEhuKCksITApKX1mdW5jdGlvbiAkSChlKXtyZXR1cm4gbmV3IEJ1KChNaChlLEZsZSksY1YoYm8oYm8oNSxlKSxlLzEwfDApKSkpfWZ1bmN0aW9uIEZibihlKXtyZXR1cm4gQ2FlKGUuZS5SZCgpLmdjKCkqZS5jLlJkKCkuZ2MoKSwyNzMsbmV3IGdpZShlKSl9ZnVuY3Rpb24gVGN0KGUpe3JldHVybiBsKGoxKGUsV2UoRjh0LEkzdCwxMixlLmMubGVuZ3RoLDAsMSkpLDIwNDIpfWZ1bmN0aW9uIFJibihlKXtyZXR1cm4gU2goKSwhRG8oZSkmJiEoIURvKGUpJiZlLmMuaS5jPT1lLmQuaS5jKX1mdW5jdGlvbiBqYm4oZSx0KXtyZXR1cm4gdXgoKSxsKFEodCwoSGMoKSxXNikpLDE3KS5hPj1lLmdjKCl9ZnVuY3Rpb24gc0EoZSx0KXt4SW4odCxlKSxONGUoZS5kKSxONGUobChRKGUsKE50KCksd1cpKSwyMTQpKX1mdW5jdGlvbiB5b2UoZSx0KXtrSW4odCxlKSxQNGUoZS5kKSxQNGUobChRKGUsKE50KCksd1cpKSwyMTQpKX1mdW5jdGlvbiAkYm4oZSx0LG4pe2UuZCYmYWwoZS5kLmUsZSksZS5kPXQsZS5kJiZwdyhlLmQuZSxuLGUpfWZ1bmN0aW9uIHpibihlLHQsbil7cmV0dXJuIG4uZi5jLmxlbmd0aD4wP3U1ZShlLmEsdCxuKTp1NWUoZS5iLHQsbil9ZnVuY3Rpb24gcWJuKGUsdCxuKXt2YXIgcjtyPXM2bigpO3RyeXtyZXR1cm4gTGZuKGUsdCxuKX1maW5hbGx5e05tbihyKX19ZnVuY3Rpb24gQXcoZSx0KXt2YXIgbixyO3JldHVybiBuPVdnKGUsdCkscj1udWxsLG4mJihyPW4ucGUoKSkscn1mdW5jdGlvbiBhQShlLHQpe3ZhciBuLHI7cmV0dXJuIG49V2coZSx0KSxyPW51bGwsbiYmKHI9bi5zZSgpKSxyfWZ1bmN0aW9uIEprKGUsdCl7dmFyIG4scjtyZXR1cm4gbj1feShlLHQpLHI9bnVsbCxuJiYocj1uLnNlKCkpLHJ9ZnVuY3Rpb24gWWcoZSx0KXt2YXIgbixyO3JldHVybiBuPVdnKGUsdCkscj1udWxsLG4mJihyPWU5ZShuKSkscn1mdW5jdGlvbiBIYm4oZSx0LG4pe3ZhciByO3JldHVybiByPU5FKG4pLFJVKGUuZyxyLHQpLFJVKGUuaSx0LG4pLHR9ZnVuY3Rpb24gbjZlKGUsdCxuKXt0aGlzLmQ9bmV3IE9ZZSh0aGlzKSx0aGlzLmU9ZSx0aGlzLmk9dCx0aGlzLmY9bn1mdW5jdGlvbiBDY3QoZSx0LG4scil7dGhpcy5lPW51bGwsdGhpcy5jPWUsdGhpcy5kPXQsdGhpcy5hPW4sdGhpcy5iPXJ9ZnVuY3Rpb24gU2N0KGUsdCxuLHIpe0VudCh0aGlzKSx0aGlzLmM9ZSx0aGlzLmU9dCx0aGlzLmY9bix0aGlzLmI9cn1mdW5jdGlvbiByNmUoZSx0LG4scil7dGhpcy5kPWUsdGhpcy5uPXQsdGhpcy5nPW4sdGhpcy5vPXIsdGhpcy5wPS0xfWZ1bmN0aW9uIF9jdChlLHQsbixyKXtyZXR1cm4gRGUobiw1OSk/bmV3IHJydChlLHQsbixyKTpuZXcgcjVlKGUsdCxuLHIpfWZ1bmN0aW9uIFprKGUpe3JldHVybiBEZShlLDE2KT9sKGUsMTYpLmRjKCk6IWUuS2MoKS5PYigpfWZ1bmN0aW9uIEFjdChlKXtpZihlLmUuZyE9ZS5iKXRocm93IHVlKG5ldyBYaCk7cmV0dXJuISFlLmMmJmUuZD4wfWZ1bmN0aW9uIEJyKGUpe3JldHVybiBtcihlLmIhPWUuZC5jKSxlLmM9ZS5iLGUuYj1lLmIuYSwrK2UuYSxlLmMuY31mdW5jdGlvbiBpNmUoZSx0KXtucih0KSxUcyhlLmEsZS5jLHQpLGUuYz1lLmMrMSZlLmEubGVuZ3RoLTEsWGR0KGUpfWZ1bmN0aW9uIGdiKGUsdCl7bnIodCksZS5iPWUuYi0xJmUuYS5sZW5ndGgtMSxUcyhlLmEsZS5iLHQpLFhkdChlKX1mdW5jdGlvbiBMY3QoZSl7dmFyIHQ7dD1lLkdoKCksdGhpcy5hPURlKHQsNzEpP2wodCw3MSkuSWkoKTp0LktjKCl9ZnVuY3Rpb24gVmJuKGUpe3JldHVybiBuZXcga24oTHduKGwoZS5hLm1kKCksMTYpLmdjKCksZS5hLmxkKCkpLDE2KX1mdW5jdGlvbiBNY3QoKXtNY3Q9VSxVQ3Q9S3IoKG5xKCksaGUobGUod09lLDEpLGl0LDQ5MCwwLFtiZ2VdKSkpfWZ1bmN0aW9uIERjdCgpe0RjdD1VLEtDdD1LcigocnEoKSxoZShsZShHQ3QsMSksaXQsNTU4LDAsW21nZV0pKSl9ZnVuY3Rpb24gSWN0KCl7SWN0PVUsaFN0PUtyKChiXygpLGhlKGxlKCRPZSwxKSxpdCw1MzksMCxbcUJdKSkpfWZ1bmN0aW9uIFVibigpe3JldHVybiBLbSgpLGhlKGxlKG1BZSwxKSxpdCwzODksMCxbYzQsYkFlLG8xZSxjMWVdKX1mdW5jdGlvbiBHYm4oKXtyZXR1cm4gckUoKSxoZShsZShmSywxKSxpdCwzMDQsMCxbTzBlLE4wZSxQMGUsQjBlXSl9ZnVuY3Rpb24gS2JuKCl7cmV0dXJuIGJ4KCksaGUobGUoRTd0LDEpLGl0LDMzMiwwLFthQixzQixvQixjQl0pfWZ1bmN0aW9uIFdibigpe3JldHVybiBOQSgpLGhlKGxlKFM3dCwxKSxpdCw0MDYsMCxbdUIsYkssbUssbEJdKX1mdW5jdGlvbiBZYm4oKXtyZXR1cm4gUHcoKSxoZShsZSh4N3QsMSksaXQsNDE3LDAsW2lCLHJCLFYwZSxVMGVdKX1mdW5jdGlvbiBYYm4oKXtyZXR1cm4gd0UoKSxoZShsZShDOHQsMSksaXQsNDE2LDAsW3MzLG80LGE0LE02XSl9ZnVuY3Rpb24gUWJuKCl7cmV0dXJuIFIxKCksaGUobGUodHh0LDEpLGl0LDQyMSwwLFtWeCxNVCxEVCxiMWVdKX1mdW5jdGlvbiBKYm4oKXtyZXR1cm4gSVYoKSxoZShsZShWOHQsMSksaXQsMzcxLDAsW3AxZSxISyxWSyxwQl0pfWZ1bmN0aW9uIFpibigpe3JldHVybiBCeSgpLGhlKGxlKG1kZSwxKSxpdCwyMDMsMCxbX1csYmRlLEc2LFU2XSl9ZnVuY3Rpb24gZW1uKCl7cmV0dXJuIEVkKCksaGUobGUoU0RlLDEpLGl0LDI4NCwwLFtFMixDRGUseWRlLHhkZV0pfWZ1bmN0aW9uIHRtbihlKXt2YXIgdDtyZXR1cm4gZS5qPT0oQ3QoKSxEcikmJih0PXYydChlKSx2bCh0LGFyKSl9ZnVuY3Rpb24gbm1uKGUsdCl7dmFyIG47bj10LmEscG8obix0LmMuZCksRmEobix0LmQuZCksRHkobi5hLGUubil9ZnVuY3Rpb24gczZlKGUsdCl7dmFyIG47cmV0dXJuIG49bChCMShlLmIsdCksNjcpLCFuJiYobj1uZXcgb3MpLG59ZnVuY3Rpb24gaXgoZSl7cmV0dXJuIHBfKCksRGUoZS5nLDE1NCk/bChlLmcsMTU0KTpudWxsfWZ1bmN0aW9uIHJtbihlKXtlLmE9bnVsbCxlLmU9bnVsbCxheShlLmIuYywwKSxheShlLmYuYywwKSxlLmM9bnVsbH1mdW5jdGlvbiB6SCgpe3pIPVUsejFlPW5ldyBGM2UoY1QsMCksTkxlPW5ldyBGM2UoIlRPUF9MRUZUIiwxKX1mdW5jdGlvbiBvQSgpe29BPVUsdU09bmV3IGozZSgiVVBQRVIiLDApLGNNPW5ldyBqM2UoIkxPV0VSIiwxKX1mdW5jdGlvbiBpbW4oZSx0KXtyZXR1cm4gejgobmV3IGx0KHQuZS5hK3QuZi5hLzIsdC5lLmIrdC5mLmIvMiksZSl9ZnVuY3Rpb24gT2N0KGUsdCl7cmV0dXJuIGwoZmgodnkobCgkaShlLmssdCksMTUpLk9jKCksSTYpKSwxMTMpfWZ1bmN0aW9uIE5jdChlLHQpe3JldHVybiBsKGZoKFk4KGwoJGkoZS5rLHQpLDE1KS5PYygpLEk2KSksMTEzKX1mdW5jdGlvbiBzbW4oKXtyZXR1cm4gd3goKSxoZShsZShxRGUsMSksaXQsNDA1LDAsW05XLGxNLGhNLGZNXSl9ZnVuY3Rpb24gYW1uKCl7cmV0dXJuIGtBKCksaGUobGUoeUllLDEpLGl0LDM1MywwLFtWZGUsalcsSGRlLHFkZV0pfWZ1bmN0aW9uIG9tbigpe3JldHVybiB1VSgpLGhlKGxlKEhJZSwxKSxpdCwzNTQsMCxbdGdlLHpJZSxxSWUsJEllXSl9ZnVuY3Rpb24gY21uKCl7cmV0dXJuIG1oKCksaGUobGUoQk0sMSksaXQsMzg2LDAsW2lGLEN2LHJGLEE0XSl9ZnVuY3Rpb24gdW1uKCl7cmV0dXJuIEloKCksaGUobGUoSlN0LDEpLGl0LDI5MSwwLFtlRixrZyxHYixaQl0pfWZ1bmN0aW9uIGxtbigpe3JldHVybiBpcCgpLGhlKGxlKFZnZSwxKSxpdCwyMjMsMCxbSGdlLEpCLGlDLHM5XSl9ZnVuY3Rpb24gaG1uKCl7cmV0dXJuIFZWKCksaGUobGUoY1BlLDEpLGl0LDMyMCwwLFtLZ2Usc1BlLG9QZSxhUGVdKX1mdW5jdGlvbiBmbW4oKXtyZXR1cm4gTlYoKSxoZShsZShwX3QsMSksaXQsNDE1LDAsW1dnZSxsUGUsdVBlLGhQZV0pfWZ1bmN0aW9uIGRtbihlKXtyZXR1cm4gQkgoKSxIdShaZ2UsZSk/bChjcihaZ2UsZSksMzQxKS5RZygpOm51bGx9ZnVuY3Rpb24gbmYoZSx0LG4pe3JldHVybiB0PDA/cXVlKGUsbik6bChuLDY5KS53aygpLkJrKGUsZS5oaSgpLHQpfWZ1bmN0aW9uIGdtbihlLHQsbil7dmFyIHI7cmV0dXJuIHI9TkUobiksUlUoZS5qLHIsdCksa2koZS5rLHQsbiksdH1mdW5jdGlvbiBwbW4oZSx0LG4pe3ZhciByO3JldHVybiByPU5FKG4pLFJVKGUuZCxyLHQpLGtpKGUuZSx0LG4pLHR9ZnVuY3Rpb24gUGN0KGUpe3ZhciB0LG47cmV0dXJuIHQ9KHJiKCksbj1uZXcgVEksbiksZSYmQVUodCxlKSx0fWZ1bmN0aW9uIGE2ZShlKXt2YXIgdDtyZXR1cm4gdD1lLmFqKGUuaSksZS5pPjAmJnB1KGUuZywwLHQsMCxlLmkpLHR9ZnVuY3Rpb24gQmN0KGUsdCl7dmFyIG47Zm9yKG49ZS5qLmMubGVuZ3RoO248dDtuKyspdnQoZS5qLGUuTmcoKSl9ZnVuY3Rpb24gRmN0KGUsdCxuLHIpe3ZhciBhO3JldHVybiBhPXJbdC5nXVtuLmddLHplKEdlKFEoZS5hLGEpKSl9ZnVuY3Rpb24gUmN0KGUsdCl7aXEoKTt2YXIgbjtyZXR1cm4gbj1sKGNyKGtZLGUpLDU3KSwhbnx8bi5mayh0KX1mdW5jdGlvbiBibW4oZSl7aWYoZS5wIT0xKXRocm93IHVlKG5ldyBwbCk7cmV0dXJuIFlyKGUuZik8PDI0Pj4yNH1mdW5jdGlvbiBtbW4oZSl7aWYoZS5wIT0xKXRocm93IHVlKG5ldyBwbCk7cmV0dXJuIFlyKGUuayk8PDI0Pj4yNH1mdW5jdGlvbiB2bW4oZSl7aWYoZS5wIT03KXRocm93IHVlKG5ldyBwbCk7cmV0dXJuIFlyKGUuayk8PDE2Pj4xNn1mdW5jdGlvbiB3bW4oZSl7aWYoZS5wIT03KXRocm93IHVlKG5ldyBwbCk7cmV0dXJuIFlyKGUuZik8PDE2Pj4xNn1mdW5jdGlvbiBLNShlLHQpe3JldHVybiB0LmU9PTB8fGUuZT09MD9CTDooR0UoKSxRdWUoZSx0KSl9ZnVuY3Rpb24gamN0KGUsdCl7cmV0dXJuIHFlKHQpPT09cWUoZSk/Iih0aGlzIE1hcCkiOnQ9PW51bGw/dWw6eGModCl9ZnVuY3Rpb24geW1uKGUsdCxuKXtyZXR1cm4gTmFlKEdlKGhjKHpvKGUuZix0KSkpLEdlKGhjKHpvKGUuZixuKSkpKX1mdW5jdGlvbiB4bW4oZSx0LG4pe3ZhciByO3I9bChjcihlLmcsbiksNjApLHZ0KGUuYS5jLG5ldyBjYSh0LHIpKX1mdW5jdGlvbiAkY3QoZSx0LG4pe2UuaT0wLGUuZT0wLHQhPW4mJihrMHQoZSx0LG4pLHgwdChlLHQsbikpfWZ1bmN0aW9uIGttbihlLHQsbixyLGEpe3ZhciBvO289RVRuKGEsbixyKSx2dCh0LHBrbihhLG8pKSxhOW4oZSxhLHQpfWZ1bmN0aW9uIG82ZShlLHQsbixyLGEpe3RoaXMuaT1lLHRoaXMuYT10LHRoaXMuZT1uLHRoaXMuaj1yLHRoaXMuZj1hfWZ1bmN0aW9uIHpjdChlLHQpe1I1ZS5jYWxsKHRoaXMpLHRoaXMuYT1lLHRoaXMuYj10LHZ0KHRoaXMuYS5iLHRoaXMpfWZ1bmN0aW9uIHFjdChlKXt0aGlzLmI9bmV3IFByLHRoaXMuYz1uZXcgUHIsdGhpcy5kPW5ldyBQcix0aGlzLmE9ZX1mdW5jdGlvbiBIY3QoZSx0KXt2YXIgbjtyZXR1cm4gbj1uZXcgUzUsZS5HZChuKSxuLmErPSIuLiIsdC5IZChuKSxuLmF9ZnVuY3Rpb24gVmN0KGUsdCl7dmFyIG47Zm9yKG49dDtuOylkdyhlLG4uaSxuLmopLG49ZHMobik7cmV0dXJuIGV9ZnVuY3Rpb24gVWN0KGUsdCxuKXt2YXIgcjtyZXR1cm4gcj1ORShuKSxraShlLmIscix0KSxraShlLmMsdCxuKSx0fWZ1bmN0aW9uIFhnKGUpe3ZhciB0O2Zvcih0PTA7ZS5PYigpOyllLlBiKCksdD1ibyh0LDEpO3JldHVybiBjVih0KX1mdW5jdGlvbiBzZyhlLHQpe0ZvKCk7dmFyIG47cmV0dXJuIG49bChlLDY5KS52aygpLGs5bihuLHQpLG4ueGwodCl9ZnVuY3Rpb24gRW1uKGUsdCxuKXtpZihuKXt2YXIgcj1uLm9lKCk7ZS5hW3RdPXIobil9ZWxzZSBkZWxldGUgZS5hW3RdfWZ1bmN0aW9uIGM2ZShlLHQpe3ZhciBuO249ZS5xLmdldEhvdXJzKCksZS5xLnNldEZ1bGxZZWFyKHQrTGIpLFhBKGUsbil9ZnVuY3Rpb24gVG1uKGUsdCl7cmV0dXJuIGwodD09bnVsbD9oYyh6byhlLmYsbnVsbCkpOnlfKGUuaSx0KSwyODgpfWZ1bmN0aW9uIHU2ZShlLHQpe3JldHVybiBlPT0oWm4oKSxQcykmJnQ9PVBzPzQ6ZT09UHN8fHQ9PVBzPzg6MzJ9ZnVuY3Rpb24gcUgoZSx0LG4pe3JldHVybiAkVShlLHQsbixEZSh0LDEwMikmJihsKHQsMTkpLkJiJklvKSE9MCl9ZnVuY3Rpb24gQ21uKGUsdCxuKXtyZXR1cm4gWEUoZSx0LG4sRGUodCwxMDIpJiYobCh0LDE5KS5CYiZJbykhPTApfWZ1bmN0aW9uIFNtbihlLHQsbil7cmV0dXJuIGJUbihlLHQsbixEZSh0LDEwMikmJihsKHQsMTkpLkJiJklvKSE9MCl9ZnVuY3Rpb24gbDZlKGUpe2UuYiE9ZS5jJiYoZS5hPVdlKHdhLFJuLDEsOCw1LDEpLGUuYj0wLGUuYz0wKX1mdW5jdGlvbiBjQShlKXtyZXR1cm4gbXIoZS5hPGUuYy5hLmxlbmd0aCksZS5iPWUuYSxyaHQoZSksZS5jLmJbZS5iXX1mdW5jdGlvbiBkdShlKXtyZXR1cm4gZS5ufHwoWWwoZSksZS5uPW5ldyB2c3QoZSxXbyxlKSxkYyhlKSksZS5ufWZ1bmN0aW9uIEdjdChlKXtpZihlPDApdGhyb3cgdWUobmV3IEZKZSgiTmVnYXRpdmUgYXJyYXkgc2l6ZTogIitlKSl9ZnVuY3Rpb24geG9lKGUsdCxuKXtpZihuKXt2YXIgcj1uLm9lKCk7bj1yKG4pfWVsc2Ugbj12b2lkIDA7ZS5hW3RdPW59ZnVuY3Rpb24gS2N0KGUsdCl7VEUoKTt2YXIgbjtyZXR1cm4gbj1lLmouZy10LmouZyxuIT0wP246MH1mdW5jdGlvbiBfbW4oZSx0KXtyZXR1cm4gVmcoKSxxcih0dChlLmEpLHQpfWZ1bmN0aW9uIEFtbihlLHQpe3JldHVybiBWZygpLHFyKHR0KGUuYSksdCl9ZnVuY3Rpb24gUWcoZSx0KXtDZCgpLEltLmNhbGwodGhpcyxlLDEsaGUobGUoVnIsMSksZGksMjgsMTUsW3RdKSl9ZnVuY3Rpb24gVHkoZSx0KXtEaSgpLFh2LmNhbGwodGhpcyxlKSx0aGlzLmE9dCx0aGlzLmM9LTEsdGhpcy5iPS0xfWZ1bmN0aW9uIEN5KGUsdCxuLHIpe1dvdC5jYWxsKHRoaXMsMSxuLHIpLHRoaXMuYz1lLHRoaXMuYj10fWZ1bmN0aW9uIGtvZShlLHQsbixyKXtZb3QuY2FsbCh0aGlzLDEsbixyKSx0aGlzLmM9ZSx0aGlzLmI9dH1mdW5jdGlvbiBFb2UoZSx0LG4scixhLG8sZil7Sm9lLmNhbGwodGhpcyx0LHIsYSxvLGYpLHRoaXMuYz1lLHRoaXMuYT1ufWZ1bmN0aW9uIFJtKGUsdCxuKXt0aGlzLmU9ZSx0aGlzLmE9d2EsdGhpcy5iPVFidCh0KSx0aGlzLmM9dCx0aGlzLmQ9bn1mdW5jdGlvbiBUb2UoZSl7dGhpcy5lPWUsdGhpcy5jPXRoaXMuZS5hLHRoaXMuYj10aGlzLmUuZyx0aGlzLmQ9dGhpcy5lLml9ZnVuY3Rpb24gaDZlKGUpe3RoaXMuZD1lLHRoaXMuYj10aGlzLmQuYS5lbnRyaWVzKCksdGhpcy5hPXRoaXMuYi5uZXh0KCl9ZnVuY3Rpb24gV2N0KGUpe3RoaXMuYz1lLHRoaXMuYT1sKE9mKGUpLDE1NiksdGhpcy5iPXRoaXMuYS5qaygpLndpKCl9ZnVuY3Rpb24gZTIoKXtQci5jYWxsKHRoaXMpLGNydCh0aGlzKSx0aGlzLmQuYj10aGlzLmQsdGhpcy5kLmE9dGhpcy5kfWZ1bmN0aW9uIENzKGUsdCxuLHIpe3ZhciBhO2E9bmV3IF90LGEuYz10LGEuYj1uLGEuYT1yLHIuYj1uLmE9YSwrK2UuYn1mdW5jdGlvbiBMbW4oZSx0KXt2YXIgbjtyZXR1cm4gbj10IT1udWxsP3h1KGUsdCk6aGMoem8oZS5mLHQpKSxNcShuKX1mdW5jdGlvbiBNbW4oZSx0KXt2YXIgbjtyZXR1cm4gbj10IT1udWxsP3h1KGUsdCk6aGMoem8oZS5mLHQpKSxNcShuKX1mdW5jdGlvbiB5YyhlLHQpe3ZhciBuO3JldHVybiB0LmIuS2IoVWx0KGUsdC5jLlhlKCksKG49bmV3IF8xKHQpLG4pKSl9ZnVuY3Rpb24gRG1uKGUsdCl7dmFyIG47cmV0dXJuIEdjdCh0KSxuPWUuc2xpY2UoMCx0KSxuLmxlbmd0aD10LGpvZShuLGUpfWZ1bmN0aW9uIFljdChlLHQpe3ZhciBuO2ZvcihuPTA7bjx0OysrbilUcyhlLG4sbmV3IGxyKGwoZVtuXSw0NCkpKX1mdW5jdGlvbiBJbW4oZSx0KXt2YXIgbjtmb3Iobj1lLmQtMTtuPj0wJiZlLmFbbl09PT10W25dO24tLSk7cmV0dXJuIG48MH1mdW5jdGlvbiBISChlKXt2YXIgdDtyZXR1cm4gZT9uZXcgSzRlKGUpOih0PW5ldyBiZCxzY2UodCxlKSx0KX1mdW5jdGlvbiBPbW4oZSx0KXt2YXIgbixyO3I9ITE7ZG8gbj1oMHQoZSx0KSxyPXJ8bjt3aGlsZShuKTtyZXR1cm4gcn1mdW5jdGlvbiBObW4oZSl7ZSYmYXduKChYd2UoKSxHU2UpKSwtLWFLLGUmJm9LIT0tMSYmKENsbihvSyksb0s9LTEpfWZ1bmN0aW9uIFZIKGUpe1J4ZSgpLE9udCh0aGlzLFlyKHZhKGJ3KGUsMjQpLFpVKSksWXIodmEoZSxaVSkpKX1mdW5jdGlvbiBYY3QoKXtYY3Q9VSxxNnQ9S3IoKFpWKCksaGUobGUoa19lLDEpLGl0LDQzNiwwLFtqMGUseF9lXSkpKX1mdW5jdGlvbiBRY3QoKXtRY3Q9VSxINnQ9S3IoKGFWKCksaGUobGUoVF9lLDEpLGl0LDQzNSwwLFtFX2UsJDBlXSkpKX1mdW5jdGlvbiBKY3QoKXtKY3Q9VSxVN3Q9S3IoKG9WKCksaGUobGUoSl9lLDEpLGl0LDQzMiwwLFtRMGUseUtdKSkpfWZ1bmN0aW9uIFpjdCgpe1pjdD1VLHo4dD1LcigoZEUoKSxoZShsZSgkOHQsMSksaXQsNTE3LDAsW2RCLGgxZV0pKSl9ZnVuY3Rpb24gZXV0KCl7ZXV0PVUsX3h0PUtyKCh6SCgpLGhlKGxlKFBMZSwxKSxpdCw0MjksMCxbejFlLE5MZV0pKSl9ZnVuY3Rpb24gdHV0KCl7dHV0PVUsYnh0PUtyKChwTigpLGhlKGxlKHdMZSwxKSxpdCw0MjgsMCxbWEssdkxlXSkpKX1mdW5jdGlvbiBudXQoKXtudXQ9VSx5eHQ9S3IoKGNOKCksaGUobGUoa0xlLDEpLGl0LDQ4OCwwLFt4TGUsSktdKSkpfWZ1bmN0aW9uIHJ1dCgpe3J1dD1VLGlFdD1LcigoZE4oKSxoZShsZShfRGUsMSksaXQsNDMwLDAsW2tkZSxFZGVdKSkpfWZ1bmN0aW9uIGl1dCgpe2l1dD1VLElFdD1Lcigob0EoKSxoZShsZShERXQsMSksaXQsNTMxLDAsW3VNLGNNXSkpKX1mdW5jdGlvbiBzdXQoKXtzdXQ9VSxmeHQ9S3IoKEpIKCksaGUobGUoaExlLDEpLGl0LDQzMSwwLFtsTGUsUzFlXSkpKX1mdW5jdGlvbiBhdXQoKXthdXQ9VSxCVHQ9S3IoKFJIKCksaGUobGUoa0llLDEpLGl0LDQzMywwLFtVZGUseEllXSkpKX1mdW5jdGlvbiBvdXQoKXtvdXQ9VSx6VHQ9S3IoKGtWKCksaGUobGUoRUllLDEpLGl0LDUwMSwwLFskVyxYNl0pKSl9ZnVuY3Rpb24gY3V0KCl7Y3V0PVUsakV0PUtyKCh4ZCgpLGhlKGxlKFJFdCwxKSxpdCw1MjMsMCxbdzMsVDJdKSkpfWZ1bmN0aW9uIHV1dCgpe3V1dD1VLHpFdD1LcigoRDEoKSxoZShsZSgkRXQsMSksaXQsNTIyLDAsW3d2LFkxXSkpKX1mdW5jdGlvbiBsdXQoKXtsdXQ9VSxuVHQ9S3IoKEowKCksaGUobGUodFR0LDEpLGl0LDUyOCwwLFtFNCxxYl0pKSl9ZnVuY3Rpb24gaHV0KCl7aHV0PVUsdVR0PUtyKChTdygpLGhlKGxlKGNUdCwxKSxpdCw0NjUsMCxbSGIsSzZdKSkpfWZ1bmN0aW9uIGZ1dCgpe2Z1dD1VLFZUdD1LcigoZVYoKSxoZShsZShDSWUsMSksaXQsNDM0LDAsW1RJZSxRZGVdKSkpfWZ1bmN0aW9uIGR1dCgpe2R1dD1VLGpDdD1LcigoR0goKSxoZShsZShmT2UsMSksaXQsNDkxLDAsW2RnZSxoT2VdKSkpfWZ1bmN0aW9uIGd1dCgpe2d1dD1VLHpDdD1LcigoZmNlKCksaGUobGUodk9lLDEpLGl0LDQ5MiwwLFtiT2UsbU9lXSkpKX1mdW5jdGlvbiBwdXQoKXtwdXQ9VSxXQ3Q9S3IoKHJOKCksaGUobGUoeU9lLDEpLGl0LDQzOCwwLFt2Z2UsUVddKSkpfWZ1bmN0aW9uIGJ1dCgpe2J1dD1VLGZTdD1LcigoQ04oKSxoZShsZShxT2UsMSksaXQsNDM3LDAsW1pXLHpPZV0pKSl9ZnVuY3Rpb24gbXV0KCl7bXV0PVUsZl90PUtyKChtYWUoKSxoZShsZShnWSwxKSxpdCwzNDcsMCxbclBlLGlQZV0pKSl9ZnVuY3Rpb24gUG1uKCl7cmV0dXJuIEpzKCksaGUobGUoTE0sMSksaXQsODgsMCxbSjEsdmMsdWMsUTEsd2ZdKX1mdW5jdGlvbiBCbW4oKXtyZXR1cm4gQ3QoKSxoZShsZShPbywxKSxhdSw2NCwwLFtQYyxRbixhcixEcixlcl0pfWZ1bmN0aW9uIEZtbihlLHQsbil7cmV0dXJuIGwodD09bnVsbD9qdShlLmYsbnVsbCxuKTpCdyhlLmksdCxuKSwyODgpfWZ1bmN0aW9uIFJtbihlKXtyZXR1cm4oZS5rPT0oWm4oKSxQcyl8fGUuaz09VXMpJiZucyhlLChmdCgpLEtMKSl9ZnVuY3Rpb24gQ29lKGUpe3JldHVybiBlLmMmJmUuZD9YNWUoZS5jKSsiLT4iK1g1ZShlLmQpOiJlXyIrZncoZSl9ZnVuY3Rpb24gdG8oZSx0KXt2YXIgbixyO2Zvcihucih0KSxyPWUuS2MoKTtyLk9iKCk7KW49ci5QYigpLHQuQ2Qobil9ZnVuY3Rpb24gam1uKGUsdCl7dmFyIG47bj1uZXcgTTgsTm0obiwieCIsdC5hKSxObShuLCJ5Iix0LmIpLEo4KGUsbil9ZnVuY3Rpb24gJG1uKGUsdCl7dmFyIG47bj1uZXcgTTgsTm0obiwieCIsdC5hKSxObShuLCJ5Iix0LmIpLEo4KGUsbil9ZnVuY3Rpb24gdnV0KGUsdCl7dmFyIG47Zm9yKG49dDtuOylkdyhlLC1uLmksLW4uaiksbj1kcyhuKTtyZXR1cm4gZX1mdW5jdGlvbiBmNmUoZSx0KXt2YXIgbixyO2ZvcihuPXQscj0wO24+MDspcis9ZS5hW25dLG4tPW4mLW47cmV0dXJuIHJ9ZnVuY3Rpb24gcmYoZSx0LG4pe3ZhciByO3JldHVybiByPShTbih0LGUuYy5sZW5ndGgpLGUuY1t0XSksZS5jW3RdPW4scn1mdW5jdGlvbiBkNmUoZSx0LG4pe2UuYS5jLmxlbmd0aD0wLGhNbihlLHQsbiksZS5hLmMubGVuZ3RoPT0wfHxqX24oZSx0KX1mdW5jdGlvbiBlTihlKXtlLmk9MCxhTyhlLmIsbnVsbCksYU8oZS5jLG51bGwpLGUuYT1udWxsLGUuZT1udWxsLCsrZS5nfWZ1bmN0aW9uIFVIKCl7VUg9VSxHMT0hMCxJNnQ9ITEsTzZ0PSExLFA2dD0hMSxONnQ9ITF9ZnVuY3Rpb24gU29lKGUpe1VIKCksIUcxJiYodGhpcy5jPWUsdGhpcy5lPSEwLHRoaXMuYT1uZXcgYnQpfWZ1bmN0aW9uIHd1dChlLHQpe3RoaXMuYz0wLHRoaXMuYj10LHF0dC5jYWxsKHRoaXMsZSwxNzQ5MyksdGhpcy5hPXRoaXMuY31mdW5jdGlvbiB5dXQoZSl7a3d0KCksU1FlKHRoaXMpLHRoaXMuYT1uZXcgb3MsRzdlKHRoaXMsZSksdWkodGhpcy5hLGUpfWZ1bmN0aW9uIHh1dCgpe1lzZSh0aGlzKSx0aGlzLmI9bmV3IGx0KGdzLGdzKSx0aGlzLmE9bmV3IGx0KGlhLGlhKX1mdW5jdGlvbiBHSCgpe0dIPVUsZGdlPW5ldyBLM2UoSEVlLDApLGhPZT1uZXcgSzNlKCJUQVJHRVRfV0lEVEgiLDEpfWZ1bmN0aW9uIFc1KGUsdCl7cmV0dXJuKHhiKGUpLF9rKG5ldyBibihlLG5ldyAkNmUodCxlLmEpKSkpLkJkKHp4KX1mdW5jdGlvbiB6bW4oKXtyZXR1cm4gdW8oKSxoZShsZShnQWUsMSksaXQsMzY3LDAsW3kwLHZnLGJ1LF91LG1jXSl9ZnVuY3Rpb24gcW1uKCl7cmV0dXJuIFJ5KCksaGUobGUocnh0LDEpLGl0LDM3NSwwLFtiQixLSyxXSyxHSyxVS10pfWZ1bmN0aW9uIEhtbigpe3JldHVybiBsMigpLGhlKGxlKG1MZSwxKSxpdCwzNDgsMCxbQTFlLGJMZSxMMWUsQlQsUFRdKX1mdW5jdGlvbiBWbW4oKXtyZXR1cm4gT0EoKSxoZShsZSh3RGUsMSksaXQsMzIzLDAsW3ZEZSx2ZGUsd2RlLHJNLGlNXSl9ZnVuY3Rpb24gVW1uKCl7cmV0dXJuIGhmKCksaGUobGUoV0xlLDEpLGl0LDE3MSwwLFtFQixZTCwkYixYTCxkNF0pfWZ1bmN0aW9uIEdtbigpe3JldHVybiBiVSgpLGhlKGxlKHFUdCwxKSxpdCwzNjgsMCxbWWRlLEdkZSxYZGUsS2RlLFdkZV0pfWZ1bmN0aW9uIEttbigpe3JldHVybiBWQSgpLGhlKGxlKHFDdCwxKSxpdCwzNzMsMCxbUTYsZTkseE0seU0sekJdKX1mdW5jdGlvbiBXbW4oKXtyZXR1cm4gWE4oKSxoZShsZShUT2UsMSksaXQsMzI0LDAsW3hPZSx3Z2UsRU9lLHlnZSxrT2VdKX1mdW5jdGlvbiBZbW4oKXtyZXR1cm4gcjEoKSxoZShsZSh4ZywxKSxpdCwxNzAsMCxbUG4saGEsemQseXYsUzJdKX1mdW5jdGlvbiBYbW4oKXtyZXR1cm4gdDYoKSxoZShsZShPTSwxKSxpdCwyNTYsMCxbS2IsdEYsWE5lLElNLFFOZV0pfWZ1bmN0aW9uIFFtbihlKXtyZXR1cm4gSHooKSxmdW5jdGlvbigpe3JldHVybiBxYm4oZSx0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIERvKGUpe3JldHVybiFlLmN8fCFlLmQ/ITE6ISFlLmMuaSYmZS5jLmk9PWUuZC5pfWZ1bmN0aW9uIGc2ZShlLHQpe3JldHVybiBEZSh0LDE0Myk/dm4oZS5jLGwodCwxNDMpLmMpOiExfWZ1bmN0aW9uIFlsKGUpe3JldHVybiBlLnR8fChlLnQ9bmV3IGJRZShlKSxfQShuZXcgSUplKGUpLDAsZS50KSksZS50fWZ1bmN0aW9uIGt1dChlKXt0aGlzLmI9ZSxvci5jYWxsKHRoaXMsZSksdGhpcy5hPWwoS24odGhpcy5iLmEsNCksMTI5KX1mdW5jdGlvbiBFdXQoZSl7dGhpcy5iPWUsSDguY2FsbCh0aGlzLGUpLHRoaXMuYT1sKEtuKHRoaXMuYi5hLDQpLDEyOSl9ZnVuY3Rpb24gaDAoZSx0LG4scixhKXtPdXQuY2FsbCh0aGlzLHQscixhKSx0aGlzLmM9ZSx0aGlzLmI9bn1mdW5jdGlvbiBwNmUoZSx0LG4scixhKXtXb3QuY2FsbCh0aGlzLHQscixhKSx0aGlzLmM9ZSx0aGlzLmE9bn1mdW5jdGlvbiBiNmUoZSx0LG4scixhKXtZb3QuY2FsbCh0aGlzLHQscixhKSx0aGlzLmM9ZSx0aGlzLmE9bn1mdW5jdGlvbiBtNmUoZSx0LG4scixhKXtPdXQuY2FsbCh0aGlzLHQscixhKSx0aGlzLmM9ZSx0aGlzLmE9bn1mdW5jdGlvbiBfb2UoZSx0KXt2YXIgbjtyZXR1cm4gbj1sKEIxKGUuZCx0KSwyMyksbnx8bChCMShlLmUsdCksMjMpfWZ1bmN0aW9uIFR1dChlLHQpe3ZhciBuLHI7cmV0dXJuIG49dC5sZCgpLHI9ZS5GZShuKSwhIXImJkpjKHIuZSx0Lm1kKCkpfWZ1bmN0aW9uIEN1dChlLHQpe3ZhciBuO3JldHVybiBuPXQubGQoKSxuZXcgaXcobixlLmUucGMobixsKHQubWQoKSwxNikpKX1mdW5jdGlvbiBKbW4oZSx0KXt2YXIgbjtyZXR1cm4gbj1lLmEuZ2V0KHQpLG4/P1dlKHdhLFJuLDEsMCw1LDEpfWZ1bmN0aW9uIFN1dChlKXt2YXIgdDtyZXR1cm4gdD1lLmxlbmd0aCx2bihzci5zdWJzdHIoc3IubGVuZ3RoLXQsdCksZSl9ZnVuY3Rpb24geHIoZSl7aWYoanIoZSkpcmV0dXJuIGUuYz1lLmEsZS5hLlBiKCk7dGhyb3cgdWUobmV3IF9jKX1mdW5jdGlvbiB2NmUoZSx0KXtyZXR1cm4gdD09MHx8ZS5lPT0wP2U6dD4wP3BidChlLHQpOmoxdChlLC10KX1mdW5jdGlvbiBzeChlLHQpe3JldHVybiB0PT0wfHxlLmU9PTA/ZTp0PjA/ajF0KGUsdCk6cGJ0KGUsLXQpfWZ1bmN0aW9uIHc2ZShlKXt1bG4uY2FsbCh0aGlzLGU9PW51bGw/dWw6eGMoZSksRGUoZSw4Mik/bChlLDgyKTpudWxsKX1mdW5jdGlvbiBfdXQoZSl7dmFyIHQ7cmV0dXJuIGUuY3x8KHQ9ZS5yLERlKHQsOTApJiYoZS5jPWwodCwyOSkpKSxlLmN9ZnVuY3Rpb24gQW9lKGUpe3ZhciB0O3JldHVybiB0PW5ldyBUdyxwYyh0LGUpLHJ0KHQsKE50KCksY2MpLG51bGwpLHR9ZnVuY3Rpb24gQXV0KGUpe3ZhciB0LG47cmV0dXJuIHQ9ZS5jLmksbj1lLmQuaSx0Lms9PShabigpLFVzKSYmbi5rPT1Vc31mdW5jdGlvbiBMb2UoZSl7dmFyIHQsbixyO3JldHVybiB0PWUmZWgsbj1lPj4yMiZlaCxyPWU8MD9ocDowLHF1KHQsbixyKX1mdW5jdGlvbiBabW4oZSl7dmFyIHQsbixyLGE7Zm9yKG49ZSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKXQ9bltyXSx0QSh0KX1mdW5jdGlvbiBldm4oZSx0KXt2YXIgbixyO249bCh1NG4oZS5jLHQpLDE2KSxuJiYocj1uLmdjKCksbi4kYigpLGUuZC09cil9ZnVuY3Rpb24gTW9lKGUsdCxuKXt2YXIgcjtyZXR1cm4gcj1lLkloKHQpLHI+PTA/ZS5MaChyLG4sITApOkh3KGUsdCxuKX1mdW5jdGlvbiB0dm4oZSx0LG4pe3JldHVybiBZaSh6OChCRShlKSxKYSh0LmIpKSx6OChCRShlKSxKYShuLmIpKSl9ZnVuY3Rpb24gbnZuKGUsdCxuKXtyZXR1cm4gWWkoejgoQkUoZSksSmEodC5lKSksejgoQkUoZSksSmEobi5lKSkpfWZ1bmN0aW9uIHJ2bihlLHQpe3JldHVybiBiLk1hdGgubWluKHBiKHQuYSxlLmQuZC5jKSxwYih0LmIsZS5kLmQuYykpfWZ1bmN0aW9uIHROKGUsdCl7ZS5faShlLmkrMSksUl8oZSxlLmksZS5aaShlLmksdCkpLGUuTWkoZS5pKyssdCksZS5OaSgpfWZ1bmN0aW9uIHVBKGUpe3ZhciB0LG47KytlLmosdD1lLmcsbj1lLmksZS5nPW51bGwsZS5pPTAsZS5PaShuLHQpLGUuTmkoKX1mdW5jdGlvbiBMdXQoZSx0LG4pe3ZhciByO3I9bmV3IHZ5ZShlLmEpLGJBKHIsZS5hLmEpLGp1KHIuZix0LG4pLGUuYS5hPXJ9ZnVuY3Rpb24geTZlKGUsdCxuLHIpe3ZhciBhO2ZvcihhPTA7YTxnSzthKyspaEgoZS5hW2FdW3QuZ10sbixyW3QuZ10pfWZ1bmN0aW9uIHg2ZShlLHQsbixyKXt2YXIgYTtmb3IoYT0wO2E8cTBlO2ErKylmSChlLmFbdC5nXVthXSxuLHJbdC5nXSl9ZnVuY3Rpb24gJGkoZSx0KXt2YXIgbjtyZXR1cm4gbj1sKGUuYy54Yyh0KSwxNiksIW4mJihuPWUuaWModCkpLGUucGModCxuKX1mdW5jdGlvbiBpdm4oZSl7dmFyIHQ7cmV0dXJuIHQ9KFhyKGUpLGU/bmV3IE9sKGUpOiRrKGUuS2MoKSkpLEpOKHQpLFJWKHQpfWZ1bmN0aW9uIE8xKGUpe3ZhciB0LG47cmV0dXJuIFhyKGUpLHQ9dHBuKGUubGVuZ3RoKSxuPW5ldyBCdSh0KSxqN2UobixlKSxufWZ1bmN0aW9uIERvZShlLHQsbixyKXt2YXIgYTtyZXR1cm4gYT1XZShWcixkaSwyOCx0LDE1LDEpLEN4bihhLGUsdCxuLHIpLGF9ZnVuY3Rpb24gazZlKGUsdCl7aWYoZTwwfHxlPnQpdGhyb3cgdWUobmV3IHRjKHU5ZShlLHQsImluZGV4IikpKTtyZXR1cm4gZX1mdW5jdGlvbiB0MihlLHQpe3ZhciBuO3JldHVybiBuPShTbih0LGUuYy5sZW5ndGgpLGUuY1t0XSksZDNlKGUuYyx0LDEpLG59ZnVuY3Rpb24gRTZlKGUsdCl7dmFyIG4scjtyZXR1cm4gbj0obnIoZSksZSkscj0obnIodCksdCksbj09cj8wOm48cj8tMToxfWZ1bmN0aW9uIFQ2ZShlKXt2YXIgdDtyZXR1cm4gdD1lLmUrZS5mLGlzTmFOKHQpJiZHcShlLmQpP2UuZDp0fWZ1bmN0aW9uIHN2bihlKXtyZXR1cm4gZS5lPTMsZS5kPWUuWWIoKSxlLmUhPTI/KGUuZT0wLCEwKTohMX1mdW5jdGlvbiBKZyhlLHQpe3JldHVybiBlLmE/aGkoZS5hLGUuYik6ZS5hPW5ldyBUaChlLmQpLE5fKGUuYSx0KSxlfWZ1bmN0aW9uIGF4KGUsdCl7cmV0dXJuIElhKHQpP3Q9PW51bGw/UzllKGUuZixudWxsKTpVZnQoZS5pLHQpOlM5ZShlLmYsdCl9ZnVuY3Rpb24gTXV0KGUsdCl7enR0LmNhbGwodGhpcyx0LnpkKCksdC55ZCgpJi02KSxucihlKSx0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBEdXQoZSx0KXtxdHQuY2FsbCh0aGlzLHQuemQoKSx0LnlkKCkmLTYpLG5yKGUpLHRoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIEM2ZShlLHQpe0RxLmNhbGwodGhpcyx0LnpkKCksdC55ZCgpJi02KSxucihlKSx0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBJdXQoZSx0LG4pe056LmNhbGwodGhpcyxuKSx0aGlzLmI9ZSx0aGlzLmM9dCx0aGlzLmQ9KFdjZSgpLGlwZSl9ZnVuY3Rpb24gT3V0KGUsdCxuKXt0aGlzLmQ9ZSx0aGlzLms9dD8xOjAsdGhpcy5mPW4/MTowLHRoaXMubz0tMSx0aGlzLnA9MH1mdW5jdGlvbiBOMShlKXt0aGlzLmM9ZSx0aGlzLmE9bmV3IEcodGhpcy5jLmEpLHRoaXMuYj1uZXcgRyh0aGlzLmMuYil9ZnVuY3Rpb24gS0goKXt0aGlzLmU9bmV3IGJ0LHRoaXMuYz1uZXcgYnQsdGhpcy5kPW5ldyBidCx0aGlzLmI9bmV3IGJ0fWZ1bmN0aW9uIE51dCgpe3RoaXMuZz1uZXcgTXdlLHRoaXMuYj1uZXcgTXdlLHRoaXMuYT1uZXcgYnQsdGhpcy5rPW5ldyBidH1mdW5jdGlvbiBQdXQoKXt0aGlzLmE9bmV3IE53ZSx0aGlzLmI9bmV3IFpRZSx0aGlzLmQ9bmV3IGNoLHRoaXMuZT1uZXcgcUp9ZnVuY3Rpb24gQnV0KGUsdCxuKXt0aGlzLmE9ZSx0aGlzLmM9dCx0aGlzLmQ9bix2dCh0LmUsdGhpcyksdnQobi5iLHRoaXMpfWZ1bmN0aW9uIFM2ZShlLHQsbil7dmFyIHIsYTtmb3Iocj0wLGE9MDthPHQubGVuZ3RoO2ErKylyKz1lLnRnKHRbYV0scixuKX1mdW5jdGlvbiBhdm4oZSx0KXt2YXIgbjtyZXR1cm4gbj1DTW4oZSx0KSxlLmI9bmV3IFRWKG4uYy5sZW5ndGgpLFZMbihlLG4pfWZ1bmN0aW9uIG92bihlLHQpe3ZhciBuO249ZS5xLmdldEhvdXJzKCkrKHQvNjB8MCksZS5xLnNldE1pbnV0ZXModCksWEEoZSxuKX1mdW5jdGlvbiBJb2UoZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5iLHQuYj09MD9udWxsOmwoZmYodCwwKSw2NSkuYn1mdW5jdGlvbiBfNmUoZSl7aWYoZS5hKXtpZihlLmUpcmV0dXJuIF82ZShlLmUpfWVsc2UgcmV0dXJuIGU7cmV0dXJuIG51bGx9ZnVuY3Rpb24gY3ZuKGUsdCl7cmV0dXJuIGUucDx0LnA/MTplLnA+dC5wPy0xOjB9ZnVuY3Rpb24gRnV0KGUpe3ZhciB0O3JldHVybiBlLmF8fCh0PWUucixEZSh0LDE1NikmJihlLmE9bCh0LDE1NikpKSxlLmF9ZnVuY3Rpb24gdXZuKGUsdCxuKXt2YXIgcjtyZXR1cm4rK2UuZSwtLWUuZixyPWwoZS5kW3RdLmdkKG4pLDEzNiksci5tZCgpfWZ1bmN0aW9uIGx2bihlKXt2YXIgdCxuO3JldHVybiB0PWUubGQoKSxuPWwoZS5tZCgpLDE2KSxOTyhuLk5jKCksbmV3IGJpZSh0KSl9ZnVuY3Rpb24gUnV0KGUsdCl7cmV0dXJuIEh1KGUuYSx0KT8oYXgoZS5hLHQpLCEwKTohMX1mdW5jdGlvbiBveChlLHQsbil7cmV0dXJuIFpPKHQsZS5lLlJkKCkuZ2MoKSksWk8obixlLmMuUmQoKS5nYygpKSxlLmFbdF1bbl19ZnVuY3Rpb24gV0goZSx0LG4pe3RoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1uLHZ0KGUudCx0aGlzKSx2dCh0LmksdGhpcyl9ZnVuY3Rpb24gWUgoZSx0LG4scil7dGhpcy5mPWUsdGhpcy5lPXQsdGhpcy5kPW4sdGhpcy5iPXIsdGhpcy5jPXI/ci5kOm51bGx9ZnVuY3Rpb24gbk4oKXt0aGlzLmI9bmV3IG9zLHRoaXMuYT1uZXcgb3MsdGhpcy5iPW5ldyBvcyx0aGlzLmE9bmV3IG9zfWZ1bmN0aW9uIGVFKCl7ZUU9VTt2YXIgZSx0O1NZPShTaygpLHQ9bmV3IEZ6LHQpLF9ZPShlPW5ldyB6aWUsZSl9ZnVuY3Rpb24gaHZuKGUpe3ZhciB0O3JldHVybiB4YihlKSx0PW5ldyBNaXQoZSxlLmEuZSxlLmEuZHw0KSxuZXcgVnllKGUsdCl9ZnVuY3Rpb24ganV0KGUpe3ZhciB0O2ZvcihmYihlKSx0PTA7ZS5hLkJkKG5ldyBBbik7KXQ9Ym8odCwxKTtyZXR1cm4gdH1mdW5jdGlvbiBYSChlLHQpe3JldHVybiBucih0KSxlLmM8ZS5kPyhlLlNlKHQsZS5jKyspLCEwKTohMX1mdW5jdGlvbiBCdShlKXtZc2UodGhpcyksQk8oZT49MCwiSW5pdGlhbCBjYXBhY2l0eSBtdXN0IG5vdCBiZSBuZWdhdGl2ZSIpfWZ1bmN0aW9uIFFIKCl7UUg9VSxrTT1uZXcgVWkoIm9yZy5lY2xpcHNlLmVsay5sYWJlbHMubGFiZWxNYW5hZ2VyIil9ZnVuY3Rpb24gJHV0KCl7JHV0PVUsc0xlPW5ldyB2cygic2VwYXJhdGVMYXllckNvbm5lY3Rpb25zIiwoSVYoKSxwMWUpKX1mdW5jdGlvbiBKMCgpe0owPVUsRTQ9bmV3IHEzZSgiUkVHVUxBUiIsMCkscWI9bmV3IHEzZSgiQ1JJVElDQUwiLDEpfWZ1bmN0aW9uIHJOKCl7ck49VSx2Z2U9bmV3IFkzZSgiRklYRUQiLDApLFFXPW5ldyBZM2UoIkNFTlRFUl9OT0RFIiwxKX1mdW5jdGlvbiBKSCgpe0pIPVUsbExlPW5ldyBOM2UoIlFVQURSQVRJQyIsMCksUzFlPW5ldyBOM2UoIlNDQU5MSU5FIiwxKX1mdW5jdGlvbiB6dXQoKXt6dXQ9VSxkeHQ9S3IoKGRBKCksaGUobGUoZExlLDEpLGl0LDMyMiwwLFtITCxtQixmTGVdKSkpfWZ1bmN0aW9uIHF1dCgpe3F1dD1VLGd4dD1LcigocFYoKSxoZShsZShwTGUsMSksaXQsMzUxLDAsW2dMZSxZSyxfMWVdKSkpfWZ1bmN0aW9uIEh1dCgpe0h1dD1VLHV4dD1LcigoT3coKSxoZShsZShtMWUsMSksaXQsMzcyLDAsW28zLFJiLGEzXSkpKX1mdW5jdGlvbiBWdXQoKXtWdXQ9VSx2eHQ9S3IoKFZtKCksaGUobGUobXh0LDEpLGl0LDQ2MCwwLFtNMWUsRlQsUDZdKSkpfWZ1bmN0aW9uIFV1dCgpe1V1dD1VLFR4dD1LcigodkUoKSxoZShsZSgkMWUsMSksaXQsMjk5LDAsW1IxZSxqMWUsdkJdKSkpfWZ1bmN0aW9uIEd1dCgpe0d1dD1VLFN4dD1LcigoZXAoKSxoZShsZShDeHQsMSksaXQsMzExLDAsW3dCLEY2LFV4XSkpKX1mdW5jdGlvbiBLdXQoKXtLdXQ9VSxaa3Q9S3IoKEVBKCksaGUobGUobURlLDEpLGl0LDM5MCwwLFtwZGUsYkRlLFNXXSkpKX1mdW5jdGlvbiBXdXQoKXtXdXQ9VSxvRXQ9S3IoKExWKCksaGUobGUoTURlLDEpLGl0LDM4NywwLFtBRGUsVGRlLExEZV0pKSl9ZnVuY3Rpb24gWXV0KCl7WXV0PVUsY0V0PUtyKCh5QSgpLGhlKGxlKEREZSwxKSxpdCwzNDksMCxbU2RlLENkZSxNQl0pKSl9ZnVuY3Rpb24gWHV0KCl7WHV0PVUsYUV0PUtyKChxbygpLGhlKGxlKHNFdCwxKSxpdCw0NjMsMCxbc00sJGwsenVdKSkpfWZ1bmN0aW9uIFF1dCgpe1F1dD1VLHVFdD1LcigoU0UoKSxoZShsZShPRGUsMSksaXQsMzUwLDAsW19kZSxJRGUsYU1dKSkpfWZ1bmN0aW9uIEp1dCgpe0p1dD1VLGxFdD1LcigoZ1YoKSxoZShsZShCRGUsMSksaXQsMzUyLDAsW1BEZSxBZGUsTkRlXSkpKX1mdW5jdGlvbiBadXQoKXtadXQ9VSxoRXQ9S3IoKE9WKCksaGUobGUoRkRlLDEpLGl0LDM4OCwwLFtMZGUsWFQsazRdKSkpfWZ1bmN0aW9uIGVsdCgpe2VsdD1VLGZUdD1LcigoeEEoKSxoZShsZShlSWUsMSksaXQsMzkyLDAsW1pEZSxJZGUsT0JdKSkpfWZ1bmN0aW9uIHRsdCgpe3RsdD1VLFVUdD1LcigoTE4oKSxoZShsZShBSWUsMSksaXQsMzkzLDAsW3pXLFNJZSxfSWVdKSkpfWZ1bmN0aW9uIG5sdCgpe25sdD1VLGZDdD1LcigoQVYoKSxoZShsZShHSWUsMSksaXQsMzAwLDAsW25nZSxVSWUsVkllXSkpKX1mdW5jdGlvbiBybHQoKXtybHQ9VSxkQ3Q9S3IoKFdWKCksaGUobGUoS0llLDEpLGl0LDQ0NSwwLFtSQixWVyxyZ2VdKSkpfWZ1bmN0aW9uIGlsdCgpe2lsdD1VLHBDdD1Lcigoc1UoKSxoZShsZShnQ3QsMSksaXQsNDU2LDAsW2lnZSxhZ2Usc2dlXSkpKX1mdW5jdGlvbiBzbHQoKXtzbHQ9VSx2Q3Q9S3IoKHFWKCksaGUobGUoWEllLDEpLGl0LDM5NCwwLFtZSWUsdWdlLFdJZV0pKSl9ZnVuY3Rpb24gYWx0KCl7YWx0PVUsJEN0PUtyKCh0VigpLGhlKGxlKHBPZSwxKSxpdCw0MzksMCxbZ2dlLGdPZSxkT2VdKSkpfWZ1bmN0aW9uIG9sdCgpe29sdD1VLF9FdD1LcigoSXcoKSxoZShsZShTRXQsMSksaXQsNDY0LDAsW0RCLG9NLE1XXSkpKX1mdW5jdGlvbiBjbHQoKXtjbHQ9VSxZNnQ9S3IoKEJsKCksaGUobGUoVzZ0LDEpLGl0LDQ3MSwwLFtGZCxCYix2MF0pKSl9ZnVuY3Rpb24gdWx0KCl7dWx0PVUsSzZ0PUtyKCh0MSgpLGhlKGxlKHM0LDEpLGl0LDIzNywwLFtHYywkdSxLY10pKSl9ZnVuY3Rpb24gbGx0KCl7bGx0PVUsUTZ0PUtyKChvbCgpLGhlKGxlKFg2dCwxKSxpdCw0NzIsMCxbYTEsRmIsdzBdKSkpfWZ1bmN0aW9uIGhsdCgpe2hsdD1VLEI2dD1LcigoRmwoKSxoZShsZShvYywxKSxpdCwxMDgsMCxbeV9lLEVjLGk0XSkpKX1mdW5jdGlvbiBmbHQoKXtmbHQ9VSxtOHQ9S3IoKGxBKCksaGUobGUoZEFlLDEpLGl0LDM5MSwwLFt0MWUsZTFlLG4xZV0pKSl9ZnVuY3Rpb24gZGx0KCl7ZGx0PVUsUVN0PUtyKChycCgpLGhlKGxlKFlOZSwxKSxpdCwzNDYsMCxbb1ksQTIsRE1dKSkpfWZ1bmN0aW9uIGdsdCgpe2dsdD1VLFZDdD1LcigoUE4oKSxoZShsZShwZ2UsMSksaXQsNDQ0LDAsW1dXLFlXLFhXXSkpKX1mdW5jdGlvbiBwbHQoKXtwbHQ9VSxLU3Q9S3IoKEYxKCksaGUobGUoRk5lLDEpLGl0LDI3OCwwLFtuQyxfNCxyQ10pKSl9ZnVuY3Rpb24gYmx0KCl7Ymx0PVUsaF90PUtyKChkeCgpLGhlKGxlKG5QZSwxKSxpdCwyODAsMCxbdFBlLEw0LGRZXSkpKX1mdW5jdGlvbiBQMShlLHQpe3JldHVybiFlLm8mJihlLm89bmV3IHhsKChzdSgpLENnKSxMMixlLDApKSxLY2UoZS5vLHQpfWZ1bmN0aW9uIGZ2bihlLHQpe3ZhciBuO2UuQyYmKG49bChRbyhlLmIsdCksMTI3KS5uLG4uZD1lLkMuZCxuLmE9ZS5DLmEpfWZ1bmN0aW9uIEE2ZShlKXt2YXIgdCxuLHIsYTthPWUuZCx0PWUuYSxuPWUuYixyPWUuYyxlLmQ9bixlLmE9cixlLmI9YSxlLmM9dH1mdW5jdGlvbiBkdm4oZSl7cmV0dXJuIWUuZyYmKGUuZz1uZXcgTVMpLCFlLmcuYiYmKGUuZy5iPW5ldyBmUWUoZSkpLGUuZy5ifWZ1bmN0aW9uIGlOKGUpe3JldHVybiFlLmcmJihlLmc9bmV3IE1TKSwhZS5nLmMmJihlLmcuYz1uZXcgcFFlKGUpKSxlLmcuY31mdW5jdGlvbiBndm4oZSl7cmV0dXJuIWUuZyYmKGUuZz1uZXcgTVMpLCFlLmcuZCYmKGUuZy5kPW5ldyBkUWUoZSkpLGUuZy5kfWZ1bmN0aW9uIHB2bihlKXtyZXR1cm4hZS5nJiYoZS5nPW5ldyBNUyksIWUuZy5hJiYoZS5nLmE9bmV3IGdRZShlKSksZS5nLmF9ZnVuY3Rpb24gYnZuKGUsdCxuLHIpe3JldHVybiBuJiYocj1uLlJoKHQsbXMobi5EaCgpLGUuYy51aygpKSxudWxsLHIpKSxyfWZ1bmN0aW9uIG12bihlLHQsbixyKXtyZXR1cm4gbiYmKHI9bi5UaCh0LG1zKG4uRGgoKSxlLmMudWsoKSksbnVsbCxyKSkscn1mdW5jdGlvbiBPb2UoZSx0LG4scil7dmFyIGE7cmV0dXJuIGE9V2UoVnIsZGksMjgsdCsxLDE1LDEpLHhBbihhLGUsdCxuLHIpLGF9ZnVuY3Rpb24gV2UoZSx0LG4scixhLG8pe3ZhciBmO3JldHVybiBmPXpkdChhLHIpLGEhPTEwJiZoZShsZShlLG8pLHQsbixhLGYpLGZ9ZnVuY3Rpb24gdnZuKGUsdCxuKXt2YXIgcixhO2ZvcihhPW5ldyBtRSh0LGUpLHI9MDtyPG47KytyKWlVKGEpO3JldHVybiBhfWZ1bmN0aW9uIE5vZShlLHQsbil7dmFyIHIsYTtpZihuIT1udWxsKWZvcihyPTA7cjx0OysrcilhPW5bcl0sZS5RaShyLGEpfWZ1bmN0aW9uIEw2ZShlLHQpe3ZhciBuO3JldHVybiBuPW5ldyB4dCxuLmM9ITAsbi5kPXQubWQoKSxPdnQoZSx0LmxkKCksbil9ZnVuY3Rpb24gd3ZuKGUsdCl7dmFyIG47bj1lLnEuZ2V0SG91cnMoKSsodC8zNjAwfDApLGUucS5zZXRTZWNvbmRzKHQpLFhBKGUsbil9ZnVuY3Rpb24gTTZlKGUsdCl7dmFyIG4scjtyZXR1cm4gbj10LHI9aW9lKCRrKG5ldyB6b2UoZSxuKSkpLGlIKG5ldyB6b2UoZSxuKSkscn1mdW5jdGlvbiB5dm4oZSx0KXt0LlVnKCJMYWJlbCBtYW5hZ2VtZW50IiwxKSxNcShRKGUsKFFIKCksa00pKSksdC5WZygpfWZ1bmN0aW9uIHh2bihlLHQsbixyKXtPbXQoZSx0LG4sWEUoZSx0LHIsRGUodCwxMDIpJiYobCh0LDE5KS5CYiZJbykhPTApKX1mdW5jdGlvbiBENmUoZSx0LG4pe2woZS5iLDY4KSxsKGUuYiw2OCksbChlLmIsNjgpLFZ1KGUuYSxuZXcgYml0KG4sdCxlKSl9ZnVuY3Rpb24gR2EoZSx0LG4pe2lmKGU8MHx8dD5ufHx0PGUpdGhyb3cgdWUobmV3IGUzZShlRytlK2ZFZSt0K3VFZStuKSl9ZnVuY3Rpb24gUG9lKGUpe2U/KHRoaXMuYz1lLHRoaXMuYj1udWxsKToodGhpcy5jPW51bGwsdGhpcy5iPW5ldyBidCl9ZnVuY3Rpb24gQm9lKGUsdCl7Y3EuY2FsbCh0aGlzLGUsdCksdGhpcy5hPVdlKGRPbixYVSw0NDcsMiwwLDEpLHRoaXMuYj0hMH1mdW5jdGlvbiBJNmUoZSl7cDB0LmNhbGwodGhpcyxlLDApLGNydCh0aGlzKSx0aGlzLmQuYj10aGlzLmQsdGhpcy5kLmE9dGhpcy5kfWZ1bmN0aW9uIE82ZShlKXt0aGlzLmU9ZSx0aGlzLmI9dGhpcy5lLmEuZW50cmllcygpLHRoaXMuYT1XZSh3YSxSbiwxLDAsNSwxKX1mdW5jdGlvbiBtbHQoKXttbHQ9VSxnRXQ9eWwoZmkobmV3IFhzLCh1bygpLHkwKSwodm8oKSxmMWUpKSxtYyxnQil9ZnVuY3Rpb24ga3ZuKCl7cmV0dXJuIHlVKCksaGUobGUoeUxlLDEpLGl0LDI4MywwLFtJMWUsRDFlLE4xZSxPMWUsUDFlLFFLXSl9ZnVuY3Rpb24gRXZuKCl7cmV0dXJuIFdOKCksaGUobGUoX0xlLDEpLGl0LDI4MSwwLFtaSyxUTGUsU0xlLEVMZSxDTGUsQjFlXSl9ZnVuY3Rpb24gVHZuKCl7cmV0dXJuIHpFKCksaGUobGUoT0xlLDEpLGl0LDI4MiwwLFtWTCxMTGUsSUxlLERMZSxNTGUsQUxlXSl9ZnVuY3Rpb24gQ3ZuKCl7cmV0dXJuIHl4KCksaGUobGUoTlQsMSksaXQsMjMyLDAsW09ULHFMLElULGg0LE42LE82XSl9ZnVuY3Rpb24gU3ZuKCl7cmV0dXJuIFpuKCksaGUobGUobDFlLDEpLGl0LDI3MywwLFtQcyxBYSxVcyxBdSxjdSxLMV0pfWZ1bmN0aW9uIF92bigpe3JldHVybiBSbCgpLGhlKGxlKGNZLDEpLGl0LDI3OSwwLFtZYix2cCxuRixQTSxOTSxhOV0pfWZ1bmN0aW9uIEF2bigpe3JldHVybiBSYSgpLGhlKGxlKEpOZSwxKSxpdCwxMDEsMCxbV2IsWjEsc0MsVHYsVGcsTXVdKX1mdW5jdGlvbiBMdm4oKXtyZXR1cm4gdlUoKSxoZShsZShITmUsMSksaXQsMzIxLDAsW1VnZSwkTmUscU5lLFJOZSx6TmUsak5lXSl9ZnVuY3Rpb24gTXZuKCl7cmV0dXJuIG9nKCksaGUobGUoS09lLDEpLGl0LDI1NSwwLFtTZ2UsSEIsVkIsblksZVksdFldKX1mdW5jdGlvbiBEdm4oKXtyZXR1cm4gWW0oKSxoZShsZShNZ2UsMSksaXQsMjk4LDAsW0xnZSxTTSxDTSxBZ2UsRU0sVE1dKX1mdW5jdGlvbiBONmUoZSl7dmFyIHQ7cmV0dXJuIWUuYSYmZS5iIT0tMSYmKHQ9ZS5jLkRoKCksZS5hPU1uKHQsZS5iKSksZS5hfWZ1bmN0aW9uIHFyKGUsdCl7cmV0dXJuIGUuU2koKSYmZS5IYyh0KT8hMTooZS5IaSh0KSwhMCl9ZnVuY3Rpb24gWjAoZSx0KXtyZXR1cm4gVU8odCwiSG9yaXpvbnRhbCBhbGlnbm1lbnQgY2Fubm90IGJlIG51bGwiKSxlLmI9dCxlfWZ1bmN0aW9uIHZsdChlLHQsbil7RGkoKTt2YXIgcjtyZXR1cm4gcj1fYihlLHQpLG4mJnImJnpnbihlKSYmKHI9bnVsbCkscn1mdW5jdGlvbiBQNmUoZSx0LG4pe3ZhciByO3I9ZS5iW24uYy5wXVtuLnBdLHIuYis9dC5iLHIuYys9dC5jLHIuYSs9dC5hLCsrci5hfWZ1bmN0aW9uIEI2ZShlLHQsbil7dmFyIHI7ZS5kW3QuZ109bixyPWUuZy5jLHJbdC5nXT1iLk1hdGgubWF4KHJbdC5nXSxuKzEpfWZ1bmN0aW9uIHBiKGUsdCl7dmFyIG4scjtyZXR1cm4gbj1lLmEtdC5hLHI9ZS5iLXQuYixiLk1hdGguc3FydChuKm4rcipyKX1mdW5jdGlvbiBGNmUoZSx0KXt2YXIgbixyO2ZvcihyPXQuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksMzYpLGNtdChlLG4sMCwwKX1mdW5jdGlvbiBuMihlLHQsbil7dmFyIHIsYTtmb3IoYT1lLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDM2KSxLRShyLHQsbil9ZnVuY3Rpb24gSXZuKGUpe3ZhciB0LG47Zm9yKG49UnIoZS5hLDApO24uYiE9bi5kLmM7KXQ9bChCcihuKSw2NSksYjllKHQpfWZ1bmN0aW9uIHdsdChlLHQpe3JldHVybiB3ZXQoZS5lLHQpfHxoMihlLmUsdCxuZXcgdWR0KHQpKSxsKEIxKGUuZSx0KSwxMTMpfWZ1bmN0aW9uIFBsKGUsdCxuLHIpe3JldHVybiBucihlKSxucih0KSxucihuKSxucihyKSxuZXcgaDVlKGUsdCxuZXcgUHQpfWZ1bmN0aW9uIHhsKGUsdCxuLHIpe3RoaXMuYWsoKSx0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bmV3IGE1ZSh0aGlzLHQsbixyKX1mdW5jdGlvbiBGb2UoZSx0LG4scixhLG8pe3I2ZS5jYWxsKHRoaXMsdCxyLGEsbyksdGhpcy5jPWUsdGhpcy5iPW59ZnVuY3Rpb24gc04oZSx0LG4scixhLG8pe3I2ZS5jYWxsKHRoaXMsdCxyLGEsbyksdGhpcy5jPWUsdGhpcy5hPW59ZnVuY3Rpb24gYU4oZSx0KXt2YXIgbixyLGE7cmV0dXJuIGE9ZS5yLHI9ZS5kLG49WkEoZSx0LCEwKSxuLmIhPWF8fG4uYSE9cn1mdW5jdGlvbiBvTihlLHQsbil7dmFyIHIsYTtyZXR1cm4gYT0ocj1WRShlLmIsdCksciksYT9WVShsTihlLGEpLG4pOm51bGx9ZnVuY3Rpb24gT3ZuKGUsdCxuKXt2YXIgcixhLG87cj1XZyhlLG4pLGE9bnVsbCxyJiYoYT1lOWUocikpLG89YSxhZHQodCxuLG8pfWZ1bmN0aW9uIE52bihlLHQsbil7dmFyIHIsYSxvO3I9V2coZSxuKSxhPW51bGwsciYmKGE9ZTllKHIpKSxvPWEsYWR0KHQsbixvKX1mdW5jdGlvbiB0RShlLHQpe3ZhciBuO3JldHVybiBuPWUuSWgodCksbj49MD9lLkxoKG4sITAsITApOkh3KGUsdCwhMCl9ZnVuY3Rpb24gUHZuKGUsdCxuKXt2YXIgcjtyZXR1cm4gcj13MHQoZSx0LG4pLGUuYj1uZXcgVFYoci5jLmxlbmd0aCksUTllKGUscil9ZnVuY3Rpb24gQnZuKGUpe2lmKGUuYjw9MCl0aHJvdyB1ZShuZXcgX2MpO3JldHVybi0tZS5iLGUuYS09ZS5jLmMscHQoZS5hKX1mdW5jdGlvbiBGdm4oZSl7dmFyIHQ7aWYoIWUuYSl0aHJvdyB1ZShuZXcgTGF0KTtyZXR1cm4gdD1lLmEsZS5hPWRzKGUuYSksdH1mdW5jdGlvbiBSdm4oZSl7Zm9yKDshZS5hOylpZighdGl0KGUuYyxuZXcgWlMoZSkpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGN4KGUpe3ZhciB0O3JldHVybiBYcihlKSxEZShlLDIwNCk/KHQ9bChlLDIwNCksdCk6bmV3IHc4KGUpfWZ1bmN0aW9uIGp2bihlKXtaSCgpLGwoZS5vZigocGkoKSxTNCkpLDE4MSkuRmMoKFJsKCksbkYpKSxlLnFmKCRnZSxudWxsKX1mdW5jdGlvbiBaSCgpe1pIPVUscFN0PW5ldyBsJCxtU3Q9bmV3IGgkLGJTdD1feW4oKHBpKCksJGdlKSxwU3QsVWIsbVN0KX1mdW5jdGlvbiBlVigpe2VWPVUsVEllPW5ldyBHM2UoIkxFQUZfTlVNQkVSIiwwKSxRZGU9bmV3IEczZSgiTk9ERV9TSVpFIiwxKX1mdW5jdGlvbiBSb2UoZSl7ZS5hPVdlKFZyLGRpLDI4LGUuYisxLDE1LDEpLGUuYz1XZShWcixkaSwyOCxlLmIsMTUsMSksZS5kPTB9ZnVuY3Rpb24gJHZuKGUsdCl7ZS5hLk5lKHQuZCxlLmIpPjAmJih2dChlLmMsbmV3IEw0ZSh0LmMsdC5kLGUuZCkpLGUuYj10LmQpfWZ1bmN0aW9uIFI2ZShlLHQpe2lmKGUuZz09bnVsbHx8dD49ZS5pKXRocm93IHVlKG5ldyBWc2UodCxlLmkpKTtyZXR1cm4gZS5nW3RdfWZ1bmN0aW9uIHlsdChlLHQsbil7aWYoRUUoZSxuKSxuIT1udWxsJiYhZS5mayhuKSl0aHJvdyB1ZShuZXcgUmllKTtyZXR1cm4gbn1mdW5jdGlvbiBqb2UoZSx0KXtyZXR1cm4gZ04odCkhPTEwJiZoZShiaCh0KSx0LlNtLHQuX19lbGVtZW50VHlwZUlkJCxnTih0KSxlKSxlfWZ1bmN0aW9uIG5FKGUsdCxuLHIpe3ZhciBhO3I9KEV3KCkscnx8ZF9lKSxhPWUuc2xpY2UodCxuKSxsOWUoYSxlLHQsbiwtdCxyKX1mdW5jdGlvbiBzZihlLHQsbixyLGEpe3JldHVybiB0PDA/SHcoZSxuLHIpOmwobiw2OSkud2soKS55ayhlLGUuaGkoKSx0LHIsYSl9ZnVuY3Rpb24genZuKGUsdCl7cmV0dXJuIFlpKHplKEdlKFEoZSwoZnQoKSxsMykpKSksemUoR2UoUSh0LGwzKSkpKX1mdW5jdGlvbiB4bHQoKXt4bHQ9VSxNNnQ9S3IoKHJFKCksaGUobGUoZkssMSksaXQsMzA0LDAsW08wZSxOMGUsUDBlLEIwZV0pKSl9ZnVuY3Rpb24gckUoKXtyRT1VLE8wZT1uZXcgb3EoIkFsbCIsMCksTjBlPW5ldyBobnQsUDBlPW5ldyB5bnQsQjBlPW5ldyBsbnR9ZnVuY3Rpb24gQmwoKXtCbD1VLEZkPW5ldyBwc2UoTXgsMCksQmI9bmV3IHBzZShjVCwxKSx2MD1uZXcgcHNlKER4LDIpfWZ1bmN0aW9uIGtsdCgpe2tsdD1VLHpVKCksR1BlPWdzLHZBdD1pYSxLUGU9bmV3IHBhKGdzKSx3QXQ9bmV3IHBhKGlhKX1mdW5jdGlvbiBFbHQoKXtFbHQ9VSxrN3Q9S3IoKFB3KCksaGUobGUoeDd0LDEpLGl0LDQxNywwLFtpQixyQixWMGUsVTBlXSkpKX1mdW5jdGlvbiBUbHQoKXtUbHQ9VSxfN3Q9S3IoKE5BKCksaGUobGUoUzd0LDEpLGl0LDQwNiwwLFt1QixiSyxtSyxsQl0pKSl9ZnVuY3Rpb24gQ2x0KCl7Q2x0PVUsVDd0PUtyKChieCgpLGhlKGxlKEU3dCwxKSxpdCwzMzIsMCxbYUIsc0Isb0IsY0JdKSkpfWZ1bmN0aW9uIFNsdCgpe1NsdD1VLEk4dD1LcigoS20oKSxoZShsZShtQWUsMSksaXQsMzg5LDAsW2M0LGJBZSxvMWUsYzFlXSkpKX1mdW5jdGlvbiBfbHQoKXtfbHQ9VSxTOHQ9S3IoKHdFKCksaGUobGUoQzh0LDEpLGl0LDQxNiwwLFtzMyxvNCxhNCxNNl0pKSl9ZnVuY3Rpb24gQWx0KCl7QWx0PVUsbnh0PUtyKChSMSgpLGhlKGxlKHR4dCwxKSxpdCw0MjEsMCxbVngsTVQsRFQsYjFlXSkpKX1mdW5jdGlvbiBMbHQoKXtMbHQ9VSxVOHQ9S3IoKElWKCksaGUobGUoVjh0LDEpLGl0LDM3MSwwLFtwMWUsSEssVksscEJdKSkpfWZ1bmN0aW9uIE1sdCgpe01sdD1VLGVFdD1LcigoQnkoKSxoZShsZShtZGUsMSksaXQsMjAzLDAsW19XLGJkZSxHNixVNl0pKSl9ZnVuY3Rpb24gRGx0KCl7RGx0PVUsckV0PUtyKChFZCgpLGhlKGxlKFNEZSwxKSxpdCwyODQsMCxbRTIsQ0RlLHlkZSx4ZGVdKSkpfWZ1bmN0aW9uIGNOKCl7Y049VSx4TGU9bmV3IEIzZShJZCwwKSxKSz1uZXcgQjNlKCJJTVBST1ZFX1NUUkFJR0hUTkVTUyIsMSl9ZnVuY3Rpb24gSWx0KGUsdCl7dmFyIG4scjtyZXR1cm4gcj10L2UuYy5SZCgpLmdjKCl8MCxuPXQlZS5jLlJkKCkuZ2MoKSxveChlLHIsbil9ZnVuY3Rpb24gT2x0KGUpe3ZhciB0O2lmKGUubmwoKSlmb3IodD1lLmktMTt0Pj0wOy0tdClPZShlLHQpO3JldHVybiBhNmUoZSl9ZnVuY3Rpb24gajZlKGUpe3ZhciB0LG47aWYoIWUuYilyZXR1cm4gbnVsbDtmb3Iobj1lLmI7dD1uLmFbMF07KW49dDtyZXR1cm4gbn1mdW5jdGlvbiBObHQoZSl7dmFyIHQsbjtpZighZS5iKXJldHVybiBudWxsO2ZvcihuPWUuYjt0PW4uYVsxXTspbj10O3JldHVybiBufWZ1bmN0aW9uIHF2bihlKXtyZXR1cm4gRGUoZSwxODApPyIiK2woZSwxODApLmE6ZT09bnVsbD9udWxsOnhjKGUpfWZ1bmN0aW9uIEh2bihlKXtyZXR1cm4gRGUoZSwxODApPyIiK2woZSwxODApLmE6ZT09bnVsbD9udWxsOnhjKGUpfWZ1bmN0aW9uIFBsdChlLHQpe2lmKHQuYSl0aHJvdyB1ZShuZXcgQWMoZTN0KSk7bmEoZS5hLHQpLHQuYT1lLCFlLmomJihlLmo9dCl9ZnVuY3Rpb24gJDZlKGUsdCl7RHEuY2FsbCh0aGlzLHQuemQoKSx0LnlkKCkmLTE2NDQ5KSxucihlKSx0aGlzLmE9ZSx0aGlzLmM9dH1mdW5jdGlvbiBWdm4oZSx0KXtyZXR1cm4gbmV3IHdhZSh0LGR3KEphKHQuZSksdC5mLmErZSx0LmYuYitlKSwoSG4oKSwhMSkpfWZ1bmN0aW9uIFV2bihlLHQpe3JldHVybiBqaygpLHZ0KGUsbmV3IGNhKHQscHQodC5lLmMubGVuZ3RoK3QuZy5jLmxlbmd0aCkpKX1mdW5jdGlvbiBHdm4oZSx0KXtyZXR1cm4gamsoKSx2dChlLG5ldyBjYSh0LHB0KHQuZS5jLmxlbmd0aCt0LmcuYy5sZW5ndGgpKSl9ZnVuY3Rpb24gQmx0KCl7Qmx0PVUsaEN0PUtyKCh1VSgpLGhlKGxlKEhJZSwxKSxpdCwzNTQsMCxbdGdlLHpJZSxxSWUsJEllXSkpKX1mdW5jdGlvbiBGbHQoKXtGbHQ9VSxQVHQ9S3IoKGtBKCksaGUobGUoeUllLDEpLGl0LDM1MywwLFtWZGUsalcsSGRlLHFkZV0pKSl9ZnVuY3Rpb24gUmx0KCl7Umx0PVUsbFR0PUtyKCh3eCgpLGhlKGxlKHFEZSwxKSxpdCw0MDUsMCxbTlcsbE0saE0sZk1dKSkpfWZ1bmN0aW9uIGpsdCgpe2psdD1VLFdTdD1LcigoaXAoKSxoZShsZShWZ2UsMSksaXQsMjIzLDAsW0hnZSxKQixpQyxzOV0pKSl9ZnVuY3Rpb24gJGx0KCl7JGx0PVUsWlN0PUtyKChJaCgpLGhlKGxlKEpTdCwxKSxpdCwyOTEsMCxbZUYsa2csR2IsWkJdKSkpfWZ1bmN0aW9uIHpsdCgpe3psdD1VLHVfdD1LcigobWgoKSxoZShsZShCTSwxKSxpdCwzODYsMCxbaUYsQ3YsckYsQTRdKSkpfWZ1bmN0aW9uIHFsdCgpe3FsdD1VLGRfdD1LcigoVlYoKSxoZShsZShjUGUsMSksaXQsMzIwLDAsW0tnZSxzUGUsb1BlLGFQZV0pKSl9ZnVuY3Rpb24gSGx0KCl7SGx0PVUsYl90PUtyKChOVigpLGhlKGxlKHBfdCwxKSxpdCw0MTUsMCxbV2dlLGxQZSx1UGUsaFBlXSkpKX1mdW5jdGlvbiB0Vigpe3RWPVUsZ2dlPW5ldyBqc2Uodnl0LDApLGdPZT1uZXcganNlKGNDZSwxKSxkT2U9bmV3IGpzZShJZCwyKX1mdW5jdGlvbiBTeShlLHQsbixyLGEpe3JldHVybiBucihlKSxucih0KSxucihuKSxucihyKSxucihhKSxuZXcgaDVlKGUsdCxyKX1mdW5jdGlvbiBWbHQoZSx0KXt2YXIgbjtyZXR1cm4gbj1sKGF4KGUuZSx0KSw0MDApLG4/KCQ0ZShuKSxuLmUpOm51bGx9ZnVuY3Rpb24gYWwoZSx0KXt2YXIgbjtyZXR1cm4gbj1nYyhlLHQsMCksbj09LTE/ITE6KHQyKGUsbiksITApfWZ1bmN0aW9uIFVsdChlLHQsbil7dmFyIHI7cmV0dXJuIGZiKGUpLHI9bmV3IG9uLHIuYT10LGUuYS5OYihuZXcgQ2V0KHIsbikpLHIuYX1mdW5jdGlvbiBLdm4oZSl7dmFyIHQ7cmV0dXJuIGZiKGUpLHQ9V2UoTmEsWm8sMjgsMCwxNSwxKSxBNShlLmEsbmV3IEU4KHQpKSx0fWZ1bmN0aW9uIHo2ZShlKXt2YXIgdDtpZighdGNlKGUpKXRocm93IHVlKG5ldyBfYyk7cmV0dXJuIGUuZT0xLHQ9ZS5kLGUuZD1udWxsLHR9ZnVuY3Rpb24gcjIoZSl7dmFyIHQ7cmV0dXJuIHdjKGUpJiYodD0wLWUsIWlzTmFOKHQpKT90Om1iKHhFKGUpKX1mdW5jdGlvbiBnYyhlLHQsbil7Zm9yKDtuPGUuYy5sZW5ndGg7KytuKWlmKEpjKHQsZS5jW25dKSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiAkb2UoZSl7dmFyIHQsbjtyZXR1cm4gbj1sKGp0KGUuaiwwKSwxMiksdD1sKFEobiwoZnQoKSx6aSkpLDEyKSx0fWZ1bmN0aW9uIHpvZShlLHQpe3ZhciBuO3RoaXMuZj1lLHRoaXMuYj10LG49bChjcihlLmIsdCksMjYwKSx0aGlzLmM9bj9uLmI6bnVsbH1mdW5jdGlvbiBHbHQoKXt1MCgpLHRoaXMuYj1uZXcgUHIsdGhpcy5mPW5ldyBQcix0aGlzLmc9bmV3IFByLHRoaXMuZT1uZXcgUHJ9ZnVuY3Rpb24gblYoZSl7RnEodGhpcyksdGhpcy5nPWU/REgoZSxlLmllKCkpOm51bGwsdGhpcy5mPWUsU0godGhpcyksdGhpcy5qZSgpfWZ1bmN0aW9uIHFvZShlKXt2YXIgdDt0PWUuamooKSx0IT1udWxsJiZlLmQhPS0xJiZsKHQsOTQpLnhoKGUpLGUuaSYmZS5pLm9qKCl9ZnVuY3Rpb24gdU4oZSl7dmFyIHQ7Zm9yKHQ9ZS5wKzE7dDxlLmMuYS5jLmxlbmd0aDsrK3QpLS1sKGp0KGUuYy5hLHQpLDEwKS5wfWZ1bmN0aW9uIEtsdChlKXtneSghIWUuYykscGFlKGUuZi5nLGUuZCksZS5jLlFiKCksZS5jPW51bGwsZS5iPUw3ZShlKSxlLmQ9ZS5mLmd9ZnVuY3Rpb24gWGwoZSl7cmV0dXJuIGUuYnx8KGUuYj1uZXcgd3N0KGUsV28sZSksIWUuYSYmKGUuYT1uZXcgTE8oZSxlKSkpLGUuYn1mdW5jdGlvbiBsTihlLHQpe3ZhciBuLHI7cmV0dXJuIG49bCh0LDY5MCkscj1uLnhpKCksIXImJm4uQWkocj1uZXcgRnR0KGUsdCkpLHJ9ZnVuY3Rpb24gaWMoZSx0KXt2YXIgbixyO3JldHVybiBuPWwodCw2OTIpLHI9bi4kaygpLCFyJiZuLmNsKHI9bmV3IGFjdChlLHQpKSxyfWZ1bmN0aW9uIHE2ZShlLHQpe3BfKCk7dmFyIG4scjtyZXR1cm4gbj1peChlKSxyPWl4KHQpLCEhbiYmISFyJiYhbWR0KG4uayxyLmspfWZ1bmN0aW9uIHJWKGUsdCl7cmV0dXJuIEpjKHQsanQoZS5mLDApKXx8SmModCxqdChlLmYsMSkpfHxKYyh0LGp0KGUuZiwyKSl9ZnVuY3Rpb24gaE4oZSx0KXtpZih0PDApdGhyb3cgdWUobmV3IHRjKEl5dCt0KSk7cmV0dXJuIEJjdChlLHQrMSksanQoZS5qLHQpfWZ1bmN0aW9uIFdsdChlLHQsbixyKXtpZighZSl0aHJvdyB1ZShuZXcgWW4oS0EodCxoZShsZSh3YSwxKSxSbiwxLDUsW24scl0pKSkpfWZ1bmN0aW9uIFpnKGUsdCxuLHIsYSxvLGYpe0pvZS5jYWxsKHRoaXMsdCxyLGEsbyxmKSx0aGlzLmM9ZSx0aGlzLmI9bn1mdW5jdGlvbiBhZyhlLHQsbil7dmFyIHIsYTtmb3Iocj0xMCxhPTA7YTxuLTE7YSsrKXQ8ciYmKGUuYSs9IjAiKSxyKj0xMDtlLmErPXR9ZnVuY3Rpb24gaVYoZSl7dmFyIHQsbjtyZXR1cm4gbj1lLmxlbmd0aCx0PVdlKGtmLEFkLDI4LG4sMTUsMSksSHN0KGUsMCxuLHQsMCksdH1mdW5jdGlvbiBmTihlKXt0c3QoKTt2YXIgdCxuO3JldHVybiB0PWUrMTI4LG49SlNlW3RdLCFuJiYobj1KU2VbdF09bmV3IFNpKGUpKSxufWZ1bmN0aW9uIFlsdChlKXtyZXR1cm4gcGFlKGUuZC5hLmUuZyxlLmIpLG1yKGUuYyE9ZS5kLmEuZCksZS5hPWUuYyxlLmM9ZS5jLmEsZS5hfWZ1bmN0aW9uIFd2bihlKXtzd2l0Y2goZS5nKXtjYXNlIDA6cmV0dXJuIElpO2Nhc2UgMTpyZXR1cm4tMTtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBZdm4oZSl7cmV0dXJuIGJ4ZShlLChpRSgpLFhTZSkpPDA/LURobih4RShlKSk6ZS5sK2UubSpMeCtlLmgqWm19ZnVuY3Rpb24gWGx0KGUpeyh0aGlzLnE/dGhpcy5xOihDbigpLENuKCksbWcpKS5BYyhlLnE/ZS5xOihDbigpLENuKCksbWcpKX1mdW5jdGlvbiBYdm4oZSx0KXtVOChsKGwoZS5mLDI3KS5vZigocGkoKSxfTSkpLDEwMSkpJiZyNW4oWGFlKGwoZS5mLDI3KSksdCl9ZnVuY3Rpb24gSG9lKGUsdCl7dmFyIG47cmV0dXJuIG49bXMoZS5kLHQpLG4+PTA/clUoZSxuLCEwLCEwKTpIdyhlLHQsITApfWZ1bmN0aW9uIEg2ZShlKXt2YXIgdDtyZXR1cm4gdD1qbShLbihlLDMyKSksdD09bnVsbCYmKEt1KGUpLHQ9am0oS24oZSwzMikpKSx0fWZ1bmN0aW9uIFY2ZShlKXt2YXIgdDtyZXR1cm4gZS5PaCgpfHwodD15cihlLkRoKCkpLWUuamkoKSxlLiRoKCkuTWsodCkpLGUuemgoKX1mdW5jdGlvbiBRbHQoZSx0KXtIX2U9bmV3IE90LEM3dD10LFJMPWUsbChSTC5iLDY4KSxENmUoUkwsSF9lLG51bGwpLGZ2dChSTCl9ZnVuY3Rpb24gbEEoKXtsQT1VLHQxZT1uZXcgbXNlKCJYWSIsMCksZTFlPW5ldyBtc2UoIlgiLDEpLG4xZT1uZXcgbXNlKCJZIiwyKX1mdW5jdGlvbiBvbCgpe29sPVUsYTE9bmV3IGJzZSgiVE9QIiwwKSxGYj1uZXcgYnNlKGNULDEpLHcwPW5ldyBic2UoeEVlLDIpfWZ1bmN0aW9uIGVwKCl7ZXA9VSx3Qj1uZXcgRXNlKElkLDApLEY2PW5ldyBFc2UoIlRPUCIsMSksVXg9bmV3IEVzZSh4RWUsMil9ZnVuY3Rpb24gZE4oKXtkTj1VLGtkZT1uZXcgUjNlKCJJTlBVVF9PUkRFUiIsMCksRWRlPW5ldyBSM2UoIlBPUlRfREVHUkVFIiwxKX1mdW5jdGlvbiBpRSgpe2lFPVUsV1NlPXF1KGVoLGVoLDUyNDI4NyksZzZ0PXF1KDAsMCxTUCksWVNlPUxvZSgxKSxMb2UoMiksWFNlPUxvZSgwKX1mdW5jdGlvbiBWb2UoZSl7dmFyIHQ7cmV0dXJuIGUuZCE9ZS5yJiYodD1PZihlKSxlLmU9ISF0JiZ0LmxrKCk9PWc1dCxlLmQ9dCksZS5lfWZ1bmN0aW9uIFVvZShlLHQsbil7dmFyIHI7cmV0dXJuIHI9ZS5nW3RdLFJfKGUsdCxlLlppKHQsbikpLGUuUmkodCxuLHIpLGUuTmkoKSxyfWZ1bmN0aW9uIHNWKGUsdCl7dmFyIG47cmV0dXJuIG49ZS5kZCh0KSxuPj0wPyhlLmdkKG4pLCEwKTohMX1mdW5jdGlvbiBHb2UoZSx0KXt2YXIgbjtmb3IoWHIoZSksWHIodCksbj0hMTt0Lk9iKCk7KW49bnxlLkZjKHQuUGIoKSk7cmV0dXJuIG59ZnVuY3Rpb24gQjEoZSx0KXt2YXIgbjtyZXR1cm4gbj1sKGNyKGUuZSx0KSw0MDApLG4/KEludChlLG4pLG4uZSk6bnVsbH1mdW5jdGlvbiBKbHQoZSl7dmFyIHQsbjtyZXR1cm4gdD1lLzYwfDAsbj1lJTYwLG49PTA/IiIrdDoiIit0KyI6IisoIiIrbil9ZnVuY3Rpb24gX3koZSx0KXt2YXIgbj1lLmFbdF0scj0odmNlKCksXzBlKVt0eXBlb2Ygbl07cmV0dXJuIHI/cihuKTpaN2UodHlwZW9mIG4pfWZ1bmN0aW9uIERjKGUsdCl7dmFyIG4scjtyZXR1cm4geGIoZSkscj1uZXcgQzZlKHQsZS5hKSxuPW5ldyBpaXQociksbmV3IGJuKGUsbil9ZnVuY3Rpb24gS29lKGUpe3ZhciB0O3JldHVybiB0PWUuYi5jLmxlbmd0aD09MD9udWxsOmp0KGUuYiwwKSx0IT1udWxsJiZyY2UoZSwwKSx0fWZ1bmN0aW9uIFF2bihlLHQpe3ZhciBuLHIsYTthPXQuYy5pLG49bChjcihlLmYsYSksNjApLHI9bi5kLmMtbi5lLmMsazdlKHQuYSxyLDApfWZ1bmN0aW9uIFU2ZShlLHQpe3ZhciBuO2ZvcigrK2UuZCwrK2UuY1t0XSxuPXQrMTtuPGUuYS5sZW5ndGg7KSsrZS5hW25dLG4rPW4mLW59ZnVuY3Rpb24gWmx0KGUsdCxuLHIpe0RpKCksWHYuY2FsbCh0aGlzLDI2KSx0aGlzLmM9ZSx0aGlzLmE9dCx0aGlzLmQ9bix0aGlzLmI9cn1mdW5jdGlvbiBlaHQoZSx0KXtmb3IoO3RbMF08ZS5sZW5ndGgmJnBkKGAgCVxyCmAsY2woY28oZSx0WzBdKSkpPj0wOykrK3RbMF19ZnVuY3Rpb24gSnZuKGUsdCl7VXUoZSx0PT1udWxsfHxHcSgobnIodCksdCkpfHxpc05hTigobnIodCksdCkpPzA6KG5yKHQpLHQpKX1mdW5jdGlvbiBadm4oZSx0KXtHdShlLHQ9PW51bGx8fEdxKChucih0KSx0KSl8fGlzTmFOKChucih0KSx0KSk/MDoobnIodCksdCkpfWZ1bmN0aW9uIGV3bihlLHQpe0R3KGUsdD09bnVsbHx8R3EoKG5yKHQpLHQpKXx8aXNOYU4oKG5yKHQpLHQpKT8wOihucih0KSx0KSl9ZnVuY3Rpb24gdHduKGUsdCl7TXcoZSx0PT1udWxsfHxHcSgobnIodCksdCkpfHxpc05hTigobnIodCksdCkpPzA6KG5yKHQpLHQpKX1mdW5jdGlvbiBud24oZSx0LG4pe3JldHVybiB6OChuZXcgbHQobi5lLmErbi5mLmEvMixuLmUuYituLmYuYi8yKSxlKT09KG5yKHQpLHQpfWZ1bmN0aW9uIHJ3bihlLHQpe3JldHVybiBEZSh0LDEwMikmJmwodCwxOSkuQmImSW8/bmV3IFVzZSh0LGUpOm5ldyBtRSh0LGUpfWZ1bmN0aW9uIGl3bihlLHQpe3JldHVybiBEZSh0LDEwMikmJmwodCwxOSkuQmImSW8/bmV3IFVzZSh0LGUpOm5ldyBtRSh0LGUpfWZ1bmN0aW9uIGdOKGUpe3JldHVybiBlLl9fZWxlbWVudFR5cGVDYXRlZ29yeSQ9PW51bGw/MTA6ZS5fX2VsZW1lbnRUeXBlQ2F0ZWdvcnkkfWZ1bmN0aW9uIHRodChlLHQpe3JldHVybiB0PT0oZ2FlKCksZ2FlKCksXzZ0KT9lLnRvTG9jYWxlTG93ZXJDYXNlKCk6ZS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIG5odChlKXtpZighZS5lKXRocm93IHVlKG5ldyBfYyk7cmV0dXJuIGUuYz1lLmE9ZS5lLGUuZT1lLmUuZSwtLWUuZCxlLmEuZn1mdW5jdGlvbiBHNmUoZSl7aWYoIWUuYyl0aHJvdyB1ZShuZXcgX2MpO3JldHVybiBlLmU9ZS5hPWUuYyxlLmM9ZS5jLmMsKytlLmQsZS5hLmZ9ZnVuY3Rpb24gcmh0KGUpe3ZhciB0O2ZvcigrK2UuYSx0PWUuYy5hLmxlbmd0aDtlLmE8dDsrK2UuYSlpZihlLmMuYltlLmFdKXJldHVybn1mdW5jdGlvbiBzd24oZSl7dmFyIHQsbjtpZihlLmEpe249bnVsbDtkbyB0PWUuYSxlLmE9bnVsbCxuPWRwdCh0LG4pO3doaWxlKGUuYSk7ZS5hPW59fWZ1bmN0aW9uIGF3bihlKXt2YXIgdCxuO2lmKGUuYil7bj1udWxsO2RvIHQ9ZS5iLGUuYj1udWxsLG49ZHB0KHQsbik7d2hpbGUoZS5iKTtlLmI9bn19ZnVuY3Rpb24gb3duKGUsdCl7dmFyIG47Zm9yKG49MDtlLmUhPWUuaS5nYygpOylEZG4odCxncihlKSxwdChuKSksbiE9SWkmJisrbn1mdW5jdGlvbiBjd24oZSx0KXt2YXIgbjtyZXR1cm4gbj1GdyhlLmUuYyx0LmUuYyksbj09MD9ZaShlLmUuZCx0LmUuZCk6bn1mdW5jdGlvbiB1d24oZSx0KXt2YXIgbixyO2ZvcihyPXQuYyxuPXIrMTtuPD10LmY7bisrKWUuYVtuXT5lLmFbcl0mJihyPW4pO3JldHVybiByfWZ1bmN0aW9uIGlodChlKXt2YXIgdDtyZXR1cm4gdD1sKFEoZSwoZnQoKSxjMykpLDMxMyksdD90LmE9PWU6ITF9ZnVuY3Rpb24gc2h0KGUpe3ZhciB0O3JldHVybiB0PWwoUShlLChmdCgpLGMzKSksMzEzKSx0P3QuaT09ZTohMX1mdW5jdGlvbiBhaHQoKXthaHQ9VSx4OHQ9S3IoKHVvKCksaGUobGUoZ0FlLDEpLGl0LDM2NywwLFt5MCx2ZyxidSxfdSxtY10pKSl9ZnVuY3Rpb24gb2h0KCl7b2h0PVUsaXh0PUtyKChSeSgpLGhlKGxlKHJ4dCwxKSxpdCwzNzUsMCxbYkIsS0ssV0ssR0ssVUtdKSkpfWZ1bmN0aW9uIGNodCgpe2NodD1VLHB4dD1LcigobDIoKSxoZShsZShtTGUsMSksaXQsMzQ4LDAsW0ExZSxiTGUsTDFlLEJULFBUXSkpKX1mdW5jdGlvbiB1aHQoKXt1aHQ9VSx0RXQ9S3IoKE9BKCksaGUobGUod0RlLDEpLGl0LDMyMywwLFt2RGUsdmRlLHdkZSxyTSxpTV0pKSl9ZnVuY3Rpb24gbGh0KCl7bGh0PVUsQXh0PUtyKChoZigpLGhlKGxlKFdMZSwxKSxpdCwxNzEsMCxbRUIsWUwsJGIsWEwsZDRdKSkpfWZ1bmN0aW9uIGhodCgpe2hodD1VLEhUdD1LcigoYlUoKSxoZShsZShxVHQsMSksaXQsMzY4LDAsW1lkZSxHZGUsWGRlLEtkZSxXZGVdKSkpfWZ1bmN0aW9uIGZodCgpe2ZodD1VLEhDdD1LcigoVkEoKSxoZShsZShxQ3QsMSksaXQsMzczLDAsW1E2LGU5LHhNLHlNLHpCXSkpKX1mdW5jdGlvbiBkaHQoKXtkaHQ9VSxZQ3Q9S3IoKFhOKCksaGUobGUoVE9lLDEpLGl0LDMyNCwwLFt4T2Usd2dlLEVPZSx5Z2Usa09lXSkpKX1mdW5jdGlvbiBnaHQoKXtnaHQ9VSxHU3Q9S3IoKEpzKCksaGUobGUoTE0sMSksaXQsODgsMCxbSjEsdmMsdWMsUTEsd2ZdKSkpfWZ1bmN0aW9uIHBodCgpe3BodD1VLHZTdD1LcigocjEoKSxoZShsZSh4ZywxKSxpdCwxNzAsMCxbUG4saGEsemQseXYsUzJdKSkpfWZ1bmN0aW9uIGJodCgpe2JodD1VLHRfdD1LcigodDYoKSxoZShsZShPTSwxKSxpdCwyNTYsMCxbS2IsdEYsWE5lLElNLFFOZV0pKSl9ZnVuY3Rpb24gbWh0KCl7bWh0PVUsaV90PUtyKChDdCgpLGhlKGxlKE9vLDEpLGF1LDY0LDAsW1BjLFFuLGFyLERyLGVyXSkpKX1mdW5jdGlvbiBhVigpe2FWPVUsRV9lPW5ldyBBM2UoIkJZX1NJWkUiLDApLCQwZT1uZXcgQTNlKCJCWV9TSVpFX0FORF9TSEFQRSIsMSl9ZnVuY3Rpb24gb1YoKXtvVj1VLFEwZT1uZXcgRDNlKCJFQURFUyIsMCkseUs9bmV3IEQzZSgiRlJVQ0hURVJNQU5fUkVJTkdPTEQiLDEpfWZ1bmN0aW9uIHBOKCl7cE49VSxYSz1uZXcgUDNlKCJSRUFESU5HX0RJUkVDVElPTiIsMCksdkxlPW5ldyBQM2UoIlJPVEFUSU9OIiwxKX1mdW5jdGlvbiBoQSgpe2hBPVUsTDh0PW5ldyBuSSxNOHQ9bmV3ICRKLF84dD1uZXcgdm0sQTh0PW5ldyBodSxEOHQ9bmV3IHpKfWZ1bmN0aW9uIHZodChlKXt0aGlzLmI9bmV3IGJ0LHRoaXMuYT1uZXcgYnQsdGhpcy5jPW5ldyBidCx0aGlzLmQ9bmV3IGJ0LHRoaXMuZT1lfWZ1bmN0aW9uIHdodChlKXt0aGlzLmc9ZSx0aGlzLmY9bmV3IGJ0LHRoaXMuYT1iLk1hdGgubWluKHRoaXMuZy5jLmMsdGhpcy5nLmQuYyl9ZnVuY3Rpb24geWh0KGUsdCxuKXtWcS5jYWxsKHRoaXMpLFk2ZSh0aGlzKSx0aGlzLmE9ZSx0aGlzLmM9bix0aGlzLmI9dC5kLHRoaXMuZj10LmV9ZnVuY3Rpb24gbHduKGUsdCxuKXt2YXIgcixhO2ZvcihhPW5ldyBHKG4pO2EuYTxhLmMuYy5sZW5ndGg7KXI9cmUoYSksT3hlKGUsdCxyKX1mdW5jdGlvbiBlMShlLHQsbil7dmFyIHI7aWYodD09bnVsbCl0aHJvdyB1ZShuZXcgUzgpO3JldHVybiByPVdnKGUsdCksRW1uKGUsdCxuKSxyfWZ1bmN0aW9uIFdvZShlLHQpe3ZhciBuO3JldHVybiBuPWwoY3IoZS5hLHQpLDEzNyksbnx8KG49bmV3IEJzLGtpKGUuYSx0LG4pKSxufWZ1bmN0aW9uIE1uKGUsdCl7dmFyIG47cmV0dXJuIG49KGUuaT09bnVsbCYmU2QoZSksZS5pKSx0Pj0wJiZ0PG4ubGVuZ3RoP25bdF06bnVsbH1mdW5jdGlvbiBod24oZSx0KXt2YXIgbjtyZXR1cm4gbj10PjA/dC0xOnQsWkplKEZ1bihWaHQoQjRlKG5ldyBMOCxuKSxlLm4pLGUuaiksZS5rKX1mdW5jdGlvbiBzYyhlKXt2YXIgdCxuO249KHQ9bmV3IHFpZSx0KSxxcigoIWUucSYmKGUucT1uZXcgbnQoVWYsZSwxMSwxMCkpLGUucSksbil9ZnVuY3Rpb24gSzZlKGUpe3JldHVybihlLmkmMj8iaW50ZXJmYWNlICI6ZS5pJjE/IiI6ImNsYXNzICIpKyhHZyhlKSxlLm8pfWZ1bmN0aW9uIGNWKGUpe3JldHVybiBpdShlLElpKT4wP0lpOml1KGUsbG8pPDA/bG86WXIoZSl9ZnVuY3Rpb24gQXkoZSl7cmV0dXJuIGU8Mz8oTWgoZSxQd3QpLGUrMSk6ZTxyTD91YShlLy43NSsxKTpJaX1mdW5jdGlvbiB4aHQoZSx0KXtyZXR1cm4gbnIodCksaTVlKGUpLGUuZC5PYigpPyh0LkNkKGUuZC5QYigpKSwhMCk6ITF9ZnVuY3Rpb24gZnduKGUsdCl7dmFyIG4scjtyZXR1cm4gbj1sKE95KGUuZCx0KSwxNiksbj8ocj10LGUuZS5wYyhyLG4pKTpudWxsfWZ1bmN0aW9uIGR3bihlLHQsbixyKXt2YXIgYTtlLmo9LTEsRTllKGUsdDllKGUsdCxuKSwoRm8oKSxhPWwodCw2OSkudmsoKSxhLnhsKHIpKSl9ZnVuY3Rpb24gZ3duKGUsdCl7cmV0dXJuIHV4KCksLXJ1KGwoUShlLChIYygpLFc2KSksMTcpLmEsbChRKHQsVzYpLDE3KS5hKX1mdW5jdGlvbiBraHQoZSx0KXtyZXR1cm4hIXBBKGUsdCxZcihtbyhmZyxpZyhZcihtbyh0PT1udWxsPzA6ZXModCksZGcpKSwxNSkpKSl9ZnVuY3Rpb24gcHduKCl7cmV0dXJuIEhFKCksaGUobGUoeFksMSksaXQsMjQ1LDAsW0pnZSx3WSx5WSx2WSxRZ2UsbVksYlksWGdlXSl9ZnVuY3Rpb24gYnduKCl7cmV0dXJuIGcyKCksaGUobGUod1N0LDEpLGl0LDI4NSwwLFtWT2UseWEsVGMsSjYsZm8scHMsdDksWDFdKX1mdW5jdGlvbiBtd24oKXtyZXR1cm4gT1UoKSxoZShsZSh1TGUsMSksaXQsMjc2LDAsW3cxZSxrMWUsdjFlLEMxZSx4MWUseTFlLFQxZSxFMWVdKX1mdW5jdGlvbiB2d24oZSl7dmFyIHQ7cmV0dXJuIHQ9emUoR2UoUShlLChOdCgpLHgyKSkpKSx0PDAmJih0PTAscnQoZSx4Mix0KSksdH1mdW5jdGlvbiB1VihlLHQpe3ZhciBuLHI7Zm9yKHI9ZS5LYygpO3IuT2IoKTspbj1sKHIuUGIoKSw3MikscnQobiwoZnQoKSxZeCksdCl9ZnVuY3Rpb24gd3duKGUsdCxuKXt2YXIgcjtyPWIuTWF0aC5tYXgoMCxlLmIvMi0uNSksRkEobixyLDEpLHZ0KHQsbmV3IExldChuLHIpKX1mdW5jdGlvbiB5d24oZSx0LG4pe3ZhciByO3JldHVybiByPWUuYS5lW2wodC5hLDEwKS5wXS1lLmEuZVtsKG4uYSwxMCkucF0sdWEoUk8ocikpfWZ1bmN0aW9uIGxWKGUsdCl7dmFyIG47cmV0dXJuIHhiKGUpLG49bmV3IFJhdChlLGUuYS56ZCgpLGUuYS55ZCgpfDQsdCksbmV3IGJuKGUsbil9ZnVuY3Rpb24gWW9lKGUpe3ZhciB0O2d5KCEhZS5jKSx0PWUuYy5hLGFmKGUuZCxlLmMpLGUuYj09ZS5jP2UuYj10Oi0tZS5hLGUuYz1udWxsfWZ1bmN0aW9uIEVodChlKXtyZXR1cm4gZS5hPj0tLjAxJiZlLmE8PUgxJiYoZS5hPTApLGUuYj49LS4wMSYmZS5iPD1IMSYmKGUuYj0wKSxlfWZ1bmN0aW9uIFk1KGUpe2g2KCk7dmFyIHQsbjtmb3Iobj1oQ2UsdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0+biYmKG49ZVt0XSk7cmV0dXJuIG59ZnVuY3Rpb24gVGh0KGUsdCl7dmFyIG47aWYobj1vUChlLkRoKCksdCksIW4pdGhyb3cgdWUobmV3IFluKE9iK3QrJGZlKSk7cmV0dXJuIG59ZnVuY3Rpb24gTHkoZSx0KXt2YXIgbjtmb3Iobj1lO2RzKG4pOylpZihuPWRzKG4pLG49PXQpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24geHduKGUsdCl7dmFyIG4scixhO2ZvcihyPXQuYS5sZCgpLG49bCh0LmEubWQoKSwxNikuZ2MoKSxhPTA7YTxuO2ErKyllLkNkKHIpfWZ1bmN0aW9uIFZ1KGUsdCl7dmFyIG4scixhLG87Zm9yKG5yKHQpLHI9ZS5jLGE9MCxvPXIubGVuZ3RoO2E8bzsrK2Epbj1yW2FdLHQuQ2Qobil9ZnVuY3Rpb24gQ2h0KGUsdCxuLHIsYSxvKXt2YXIgZjtmPUFvZShyKSxwbyhmLGEpLEZhKGYsbykseG4oZS5hLHIsbmV3IEtxKGYsdCxuLmYpKX1mdW5jdGlvbiBTaHQoZSx0KXtIaShlLCh1ZygpLGNnZSksdC5mKSxIaShlLG1DdCx0LmUpLEhpKGUsb2dlLHQuZCksSGkoZSxiQ3QsdC5jKX1mdW5jdGlvbiBfaHQoZSx0KXt0aGlzLmE9bmV3IFByLHRoaXMuZT1uZXcgUHIsdGhpcy5iPShFQSgpLFNXKSx0aGlzLmM9ZSx0aGlzLmI9dH1mdW5jdGlvbiBBaHQoZSl7dGhpcy5kPWUsdGhpcy5jPWUuYy52YygpLktjKCksdGhpcy5iPW51bGwsdGhpcy5hPW51bGwsdGhpcy5lPSgkeigpLEUwZSl9ZnVuY3Rpb24gYWYoZSx0KXt2YXIgbjtyZXR1cm4gbj10LmMsdC5hLmI9dC5iLHQuYi5hPXQuYSx0LmE9dC5iPW51bGwsdC5jPW51bGwsLS1lLmIsbn1mdW5jdGlvbiBrd24oZSx0KXtyZXR1cm4gdCYmZS5iW3QuZ109PXQ/KFRzKGUuYix0LmcsbnVsbCksLS1lLmMsITApOiExfWZ1bmN0aW9uIEV3bihlLHQpe2lmKDA+ZXx8ZT50KXRocm93IHVlKG5ldyB0M2UoImZyb21JbmRleDogMCwgdG9JbmRleDogIitlK3VFZSt0KSl9ZnVuY3Rpb24gTHcoZSl7aWYoZTwwKXRocm93IHVlKG5ldyBZbigiSWxsZWdhbCBDYXBhY2l0eTogIitlKSk7dGhpcy5nPXRoaXMuYWooZSl9ZnVuY3Rpb24gVzZlKGUsdCl7cmV0dXJuIEExKCksZjAoQWIpLGIuTWF0aC5hYnMoZS10KTw9QWJ8fGU9PXR8fGlzTmFOKGUpJiZpc05hTih0KX1mdW5jdGlvbiBYb2UoZSx0KXt2YXIgbixyLGEsbztmb3Iocj1lLmQsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sTDEoZS5nLG4pLmE9dH1mdW5jdGlvbiBUd24oZSx0LG4pe3ZhciByLGEsbztmb3IoYT10W25dLHI9MDtyPGEubGVuZ3RoO3IrKylvPWFbcl0sZS5lW28uYy5wXVtvLnBdPXJ9ZnVuY3Rpb24gQ3duKGUpe3ZhciB0O2Zvcih0PTA7dDxlLmMubGVuZ3RoO3QrKykoU24odCxlLmMubGVuZ3RoKSxsKGUuY1t0XSwxMikpLnA9dH1mdW5jdGlvbiBTd24oZSl7dmFyIHQsbjtmb3IodD1lLmEuZC5qLG49ZS5jLmQuajt0IT1uOylkMChlLmIsdCksdD0kVih0KTtkMChlLmIsdCl9ZnVuY3Rpb24gX3duKGUpe3ZhciB0O3JldHVybiB0PWIuTWF0aC5zcXJ0KGUuYSplLmErZS5iKmUuYiksdD4wJiYoZS5hLz10LGUuYi89dCksZX1mdW5jdGlvbiBBaChlKXt2YXIgdDtyZXR1cm4gZS53P2UudzoodD1kYm4oZSksdCYmIXQuVmgoKSYmKGUudz10KSx0KX1mdW5jdGlvbiBzRShlLHQpe3ZhciBuLHI7cj1lLmEsbj1tNG4oZSx0LG51bGwpLHIhPXQmJiFlLmUmJihuPVpFKGUsdCxuKSksbiYmbi5vaigpfWZ1bmN0aW9uIExodChlLHQsbil7dmFyIHIsYTtyPXQ7ZG8gYT16ZShlLnBbci5wXSkrbixlLnBbci5wXT1hLHI9ZS5hW3IucF07d2hpbGUociE9dCl9ZnVuY3Rpb24gTWh0KGUsdCxuKXt2YXIgcj1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHIsYXJndW1lbnRzKX07cmV0dXJuIHQuYXBwbHkocixuKSxyfWZ1bmN0aW9uIEF3bihlKXt2YXIgdDtyZXR1cm4gZT09bnVsbD9udWxsOih0PWwoZSwxOTUpLCR4bih0LHQubGVuZ3RoKSl9ZnVuY3Rpb24gT2UoZSx0KXtpZihlLmc9PW51bGx8fHQ+PWUuaSl0aHJvdyB1ZShuZXcgVnNlKHQsZS5pKSk7cmV0dXJuIGUuV2kodCxlLmdbdF0pfWZ1bmN0aW9uIEx3bihlLHQpe0NuKCk7dmFyIG4scjtmb3Iocj1uZXcgYnQsbj0wO248ZTsrK24pJG4oci5jLHQpO3JldHVybiBuZXcgZXNlKHIpfWZ1bmN0aW9uIERodChlKXtyZXR1cm4geGIoZSksSzgoITAsIm4gbWF5IG5vdCBiZSBuZWdhdGl2ZSIpLG5ldyBibihlLG5ldyBhZnQoZS5hKSl9ZnVuY3Rpb24gWTZlKGUpe2UuYj0oQmwoKSxCYiksZS5mPShvbCgpLEZiKSxlLmQ9KE1oKDIsWXkpLG5ldyBCdSgyKSksZS5lPW5ldyBxYX1mdW5jdGlvbiBoVihlKXt0aGlzLmI9KFhyKGUpLG5ldyBPbChlKSksdGhpcy5hPW5ldyBidCx0aGlzLmQ9bmV3IGJ0LHRoaXMuZT1uZXcgcWF9ZnVuY3Rpb24gdDEoKXt0MT1VLEdjPW5ldyBnc2UoIkJFR0lOIiwwKSwkdT1uZXcgZ3NlKGNULDEpLEtjPW5ldyBnc2UoIkVORCIsMil9ZnVuY3Rpb24gRjEoKXtGMT1VLG5DPW5ldyB6c2UoY1QsMCksXzQ9bmV3IHpzZSgiSEVBRCIsMSksckM9bmV3IHpzZSgiVEFJTCIsMil9ZnVuY3Rpb24gdXgoKXt1eD1VLFJUdD1UZChUZChUZCh2XyhuZXcgWHMsKHd4KCksbE0pKSwoV0EoKSxEZGUpKSxHRGUpLFhEZSl9ZnVuY3Rpb24gdHAoKXt0cD1VLCRUdD1UZChUZChUZCh2XyhuZXcgWHMsKHd4KCksZk0pKSwoV0EoKSxXRGUpKSxIRGUpLEtEZSl9ZnVuY3Rpb24gSWh0KCl7SWh0PVUsaHh0PUtyKCh5eCgpLGhlKGxlKE5ULDEpLGl0LDIzMiwwLFtPVCxxTCxJVCxoNCxONixPNl0pKSl9ZnVuY3Rpb24gT2h0KCl7T2h0PVUsd3h0PUtyKCh5VSgpLGhlKGxlKHlMZSwxKSxpdCwyODMsMCxbSTFlLEQxZSxOMWUsTzFlLFAxZSxRS10pKSl9ZnVuY3Rpb24gTmh0KCl7Tmh0PVUseHh0PUtyKChXTigpLGhlKGxlKF9MZSwxKSxpdCwyODEsMCxbWkssVExlLFNMZSxFTGUsQ0xlLEIxZV0pKSl9ZnVuY3Rpb24gUGh0KCl7UGh0PVUsa3h0PUtyKCh6RSgpLGhlKGxlKE9MZSwxKSxpdCwyODIsMCxbVkwsTExlLElMZSxETGUsTUxlLEFMZV0pKSl9ZnVuY3Rpb24gQmh0KCl7Qmh0PVUsQjh0PUtyKChabigpLGhlKGxlKGwxZSwxKSxpdCwyNzMsMCxbUHMsQWEsVXMsQXUsY3UsSzFdKSkpfWZ1bmN0aW9uIEZodCgpe0ZodD1VLHhTdD1Lcigob2coKSxoZShsZShLT2UsMSksaXQsMjU1LDAsW1NnZSxIQixWQixuWSxlWSx0WV0pKSl9ZnVuY3Rpb24gUmh0KCl7Umh0PVUsX1N0PUtyKChZbSgpLGhlKGxlKE1nZSwxKSxpdCwyOTgsMCxbTGdlLFNNLENNLEFnZSxFTSxUTV0pKSl9ZnVuY3Rpb24gamh0KCl7amh0PVUsWVN0PUtyKCh2VSgpLGhlKGxlKEhOZSwxKSxpdCwzMjEsMCxbVWdlLCROZSxxTmUsUk5lLHpOZSxqTmVdKSkpfWZ1bmN0aW9uICRodCgpeyRodD1VLG5fdD1LcigoUmEoKSxoZShsZShKTmUsMSksaXQsMTAxLDAsW1diLFoxLHNDLFR2LFRnLE11XSkpKX1mdW5jdGlvbiB6aHQoKXt6aHQ9VSxyX3Q9S3IoKFJsKCksaGUobGUoY1ksMSksaXQsMjc5LDAsW1liLHZwLG5GLFBNLE5NLGE5XSkpKX1mdW5jdGlvbiBxaHQoKXtxaHQ9VSxnSz0odDEoKSxoZShsZShzNCwxKSxpdCwyMzcsMCxbR2MsJHUsS2NdKSkubGVuZ3RoLHEwZT1nS31mdW5jdGlvbiBNd24oKXtyZXR1cm4gcXkoKSxoZShsZShLbywxKSxpdCw5NSwwLFtFMCxtcCxUMCxTMCxFZyxxZixqaCxDMCx6Zl0pfWZ1bmN0aW9uIER3bihlLHQpe3JldHVybiBDYigpLHJ1KGUuYi5jLmxlbmd0aC1lLmUuYy5sZW5ndGgsdC5iLmMubGVuZ3RoLXQuZS5jLmxlbmd0aCl9ZnVuY3Rpb24gWDUoZSx0KXtyZXR1cm4gJHVuKGdBKGUsdCxZcihtbyhmZyxpZyhZcihtbyh0PT1udWxsPzA6ZXModCksZGcpKSwxNSkpKSkpfWZ1bmN0aW9uIFg2ZShlLHQpe3JldHVybiBBMSgpLGYwKEFiKSxiLk1hdGguYWJzKGUtdCk8PUFifHxlPT10fHxpc05hTihlKSYmaXNOYU4odCl9ZnVuY3Rpb24gZlYoZSx0KXt2YXIgbjtuPWUuYixlLmI9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSwxLG4sZS5iKSl9ZnVuY3Rpb24gYUUoZSx0KXt2YXIgbjtuPWUuYixlLmI9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSwzLG4sZS5iKSl9ZnVuY3Rpb24gTXcoZSx0KXt2YXIgbjtuPWUuZixlLmY9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSwzLG4sZS5mKSl9ZnVuY3Rpb24gRHcoZSx0KXt2YXIgbjtuPWUuZyxlLmc9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSw0LG4sZS5nKSl9ZnVuY3Rpb24gVXUoZSx0KXt2YXIgbjtuPWUuaSxlLmk9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSw1LG4sZS5pKSl9ZnVuY3Rpb24gR3UoZSx0KXt2YXIgbjtuPWUuaixlLmo9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSw2LG4sZS5qKSl9ZnVuY3Rpb24gb0UoZSx0KXt2YXIgbjtuPWUuaixlLmo9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSwxLG4sZS5qKSl9ZnVuY3Rpb24gY0UoZSx0KXt2YXIgbjtuPWUuYyxlLmM9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSw0LG4sZS5jKSl9ZnVuY3Rpb24gdUUoZSx0KXt2YXIgbjtuPWUuayxlLms9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSwyLG4sZS5rKSl9ZnVuY3Rpb24gZFYoZSx0KXt2YXIgbjtuPWUuYSxlLmE9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSwwLG4sZS5hKSl9ZnVuY3Rpb24gaTIoZSx0KXt2YXIgbjtuPWUucyxlLnM9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcga29lKGUsNCxuLGUucykpfWZ1bmN0aW9uIE15KGUsdCl7dmFyIG47bj1lLnQsZS50PXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGtvZShlLDUsbixlLnQpKX1mdW5jdGlvbiBRb2UoZSx0KXt2YXIgbjtuPWUuZCxlLmQ9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcga29lKGUsMixuLGUuZCkpfWZ1bmN0aW9uIGxFKGUsdCl7dmFyIG47bj1lLkYsZS5GPXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSw1LG4sdCkpfWZ1bmN0aW9uIGJOKGUsdCl7dmFyIG47cmV0dXJuIG49bChjcigoaXEoKSxrWSksZSksNTcpLG4/bi5nayh0KTpXZSh3YSxSbiwxLHQsNSwxKX1mdW5jdGlvbiBJd24oZSx0KXt2YXIgbjtyZXR1cm4gbj1tYShKYShsKGNyKGUuZyx0KSw4KSksbXllKGwoY3IoZS5mLHQpLDQ3MCkuYikpLG59ZnVuY3Rpb24gT3duKGUsdCl7dmFyIG4scixhO3JldHVybiBuPShyPShyYigpLGE9bmV3IHNrLGEpLHQmJlU5ZShyLHQpLHIpLGw3ZShuLGUpLG59ZnVuY3Rpb24gbnAoZSx0KXt2YXIgbixyO3JldHVybiBuPXQgaW4gZS5hLG4mJihyPVdnKGUsdCkucmUoKSxyKT9yLmE6bnVsbH1mdW5jdGlvbiBIaHQoZSx0LG4pe2lmKEVFKGUsbiksIWUua2woKSYmbiE9bnVsbCYmIWUuZmsobikpdGhyb3cgdWUobmV3IFJpZSk7cmV0dXJuIG59ZnVuY3Rpb24gVmh0KGUsdCl7cmV0dXJuIGUubj10LGUubj8oZS5mPW5ldyBidCxlLmU9bmV3IGJ0KTooZS5mPW51bGwsZS5lPW51bGwpLGV9ZnVuY3Rpb24gVWh0KGUsdCl7aWYoZSl7dC5uPWU7dmFyIG49djJuKHQpO2lmKCFuKXtzS1tlXT1bdF07cmV0dXJufW4uUm09dH19ZnVuY3Rpb24gam0oZSl7dmFyIHQ7cmV0dXJuIFZfKGU9PW51bGx8fEFycmF5LmlzQXJyYXkoZSkmJih0PWdOKGUpLCEodD49MTQmJnQ8PTE2KSkpLGV9ZnVuY3Rpb24gR3IoZSx0KXt2YXIgbjtyZXR1cm4gbnIodCksbj1lWyI6Iit0XSxCTyghIW4sIkVudW0gY29uc3RhbnQgdW5kZWZpbmVkOiAiK3QpLG59ZnVuY3Rpb24gRnIoZSx0LG4scixhLG8pe3ZhciBmO3JldHVybiBmPUdhZShlLHQpLFVodChuLGYpLGYuaT1hPzg6MCxmLmY9cixmLmU9YSxmLmc9byxmfWZ1bmN0aW9uIFE2ZShlLHQsbixyLGEpe3RoaXMuZD10LHRoaXMuaz1yLHRoaXMuZj1hLHRoaXMubz0tMSx0aGlzLnA9MSx0aGlzLmM9ZSx0aGlzLmE9bn1mdW5jdGlvbiBKNmUoZSx0LG4scixhKXt0aGlzLmQ9dCx0aGlzLms9cix0aGlzLmY9YSx0aGlzLm89LTEsdGhpcy5wPTIsdGhpcy5jPWUsdGhpcy5hPW59ZnVuY3Rpb24gWjZlKGUsdCxuLHIsYSl7dGhpcy5kPXQsdGhpcy5rPXIsdGhpcy5mPWEsdGhpcy5vPS0xLHRoaXMucD02LHRoaXMuYz1lLHRoaXMuYT1ufWZ1bmN0aW9uIGU3ZShlLHQsbixyLGEpe3RoaXMuZD10LHRoaXMuaz1yLHRoaXMuZj1hLHRoaXMubz0tMSx0aGlzLnA9Nyx0aGlzLmM9ZSx0aGlzLmE9bn1mdW5jdGlvbiB0N2UoZSx0LG4scixhKXt0aGlzLmQ9dCx0aGlzLmo9cix0aGlzLmU9YSx0aGlzLm89LTEsdGhpcy5wPTQsdGhpcy5jPWUsdGhpcy5hPW59ZnVuY3Rpb24gR2h0KGUsdCl7dmFyIG4scixhLG87Zm9yKHI9dCxhPTAsbz1yLmxlbmd0aDthPG87KythKW49clthXSxQbHQoZS5hLG4pO3JldHVybiBlfWZ1bmN0aW9uIExoKGUpe3ZhciB0LG4scixhO2ZvcihuPWUscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0sWHIodCk7cmV0dXJuIG5ldyBzbnQoZSl9ZnVuY3Rpb24gbjdlKGUpe3ZhciB0O3JldHVybiB0PW1hKEphKGUuZC5kKSxlLmMuZCksUkUodCxlLmMuZS5hLGUuYy5lLmIpLE9pKHQsZS5jLmQpfWZ1bmN0aW9uIHI3ZShlKXt2YXIgdDtyZXR1cm4gdD1tYShKYShlLmMuZCksZS5kLmQpLFJFKHQsZS5kLmUuYSxlLmQuZS5iKSxPaSh0LGUuZC5kKX1mdW5jdGlvbiBOd24oZSl7dmFyIHQ9L2Z1bmN0aW9uKD86XHMrKFtcdyRdKykpP1xzKlwoLyxuPXQuZXhlYyhlKTtyZXR1cm4gbiYmblsxXXx8UmxlfWZ1bmN0aW9uIFB3bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gYT1lLmxlbmd0aCxyPWIuTWF0aC5taW4obixhKSxrOWUoZSwwLHQsMCxyLCEwKSx0fWZ1bmN0aW9uIEtodChlLHQsbil7dmFyIHIsYTtmb3IoYT10LktjKCk7YS5PYigpOylyPWwoYS5QYigpLDc0KSxuYShlLGwobi5LYihyKSwyNykpfWZ1bmN0aW9uIEJ3bihlLHQpe1U4KGwoUShsKGUuZSwxMCksKE50KCksTXMpKSwxMDEpKSYmKENuKCksVnMobChlLmUsMTApLmosdCkpfWZ1bmN0aW9uIEZ3bigpe3JldHVybiBQVSgpLGhlKGxlKCRfZSwxKSxpdCwyNTcsMCxbal9lLFBfZSxCX2UsTl9lLHowZSxSX2UsRl9lLE9fZSxJX2VdKX1mdW5jdGlvbiBSd24oKXtyZXR1cm4gcDIoKSxoZShsZShwRGUsMSksaXQsMjY1LDAsW2dkZSxmRGUsZERlLGRkZSxoRGUsZ0RlLENXLFdULFlUXSl9ZnVuY3Rpb24gSXcoKXtJdz1VLERCPW5ldyBEc2UoIkJBUllDRU5URVIiLDApLG9NPW5ldyBEc2UoSDN0LDEpLE1XPW5ldyBEc2UoVjN0LDIpfWZ1bmN0aW9uIGdWKCl7Z1Y9VSxQRGU9bmV3IExzZSgiTk8iLDApLEFkZT1uZXcgTHNlKEhFZSwxKSxORGU9bmV3IExzZSgiTE9PS19CQUNLIiwyKX1mdW5jdGlvbiBwVigpe3BWPVUsZ0xlPW5ldyB5c2UoIkFSRCIsMCksWUs9bmV3IHlzZSgiTVNEIiwxKSxfMWU9bmV3IHlzZSgiTUFOVUFMIiwyKX1mdW5jdGlvbiBxbygpe3FvPVUsc009bmV3IENzZShjTCwwKSwkbD1uZXcgQ3NlKCJJTlBVVCIsMSksenU9bmV3IENzZSgiT1VUUFVUIiwyKX1mdW5jdGlvbiBoRSgpe3JldHVybiBUZ2V8fChUZ2U9bmV3IFhidCxRNShUZ2UsaGUobGUoTDYsMSksUm4sMTM0LDAsW25ldyB1el0pKSksVGdlfWZ1bmN0aW9uIGYwKGUpe2lmKCEoZT49MCkpdGhyb3cgdWUobmV3IFluKCJ0b2xlcmFuY2UgKCIrZSsiKSBtdXN0IGJlID49IDAiKSk7cmV0dXJuIGV9ZnVuY3Rpb24gV2h0KGUsdCl7dmFyIG47cmV0dXJuIERlKHQsNDQpP2UuYy5NYyh0KToobj1LY2UoZSx0KSxZVihlLHQpLG4pfWZ1bmN0aW9uIEpvKGUsdCxuKXtyZXR1cm4gR20oZSx0KSxGdShlLG4pLGkyKGUsMCksTXkoZSwxKSx1MihlLCEwKSxjMihlLCEwKSxlfWZ1bmN0aW9uIG1OKGUsdCl7dmFyIG47aWYobj1lLmdjKCksdDwwfHx0Pm4pdGhyb3cgdWUobmV3IG15KHQsbikpO3JldHVybiBuZXcgZjRlKGUsdCl9ZnVuY3Rpb24gYlYoZSx0KXtlLmI9Yi5NYXRoLm1heChlLmIsdC5kKSxlLmUrPXQucisoZS5hLmMubGVuZ3RoPT0wPzA6ZS5jKSx2dChlLmEsdCl9ZnVuY3Rpb24gWWh0KGUpe2d5KGUuYz49MCksSDVuKGUuZCxlLmMpPDAmJihlLmE9ZS5hLTEmZS5kLmEubGVuZ3RoLTEsZS5iPWUuZC5jKSxlLmM9LTF9ZnVuY3Rpb24gbVYoZSl7dmFyIHQsbjtmb3Iobj1lLmMuQ2MoKS5LYygpO24uT2IoKTspdD1sKG4uUGIoKSwxNiksdC4kYigpO2UuYy4kYigpLGUuZD0wfWZ1bmN0aW9uIGp3bihlKXt2YXIgdCxuLHIsYTtmb3Iobj1lLmEscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0scXN0KHQsdC5sZW5ndGgsbnVsbCl9ZnVuY3Rpb24gZkEoZSx0KXt2YXIgbixyLGEsbztmb3Iocj10LGE9MCxvPXIubGVuZ3RoO2E8bzsrK2Epbj1yW2FdLENzKGUsbixlLmMuYixlLmMpfWZ1bmN0aW9uIFhodChlLHQpe3ZhciBuLHI7Zm9yKG49MCxyPWUuZ2MoKTtuPHI7KytuKWlmKEpjKHQsZS5YYihuKSkpcmV0dXJuIG47cmV0dXJuLTF9ZnVuY3Rpb24gaTdlKGUpe3ZhciB0LG47aWYoZT09MClyZXR1cm4gMzI7Zm9yKG49MCx0PTE7ISh0JmUpO3Q8PD0xKSsrbjtyZXR1cm4gbn1mdW5jdGlvbiBNaChlLHQpe2lmKGU8MCl0aHJvdyB1ZShuZXcgWW4odCsiIGNhbm5vdCBiZSBuZWdhdGl2ZSBidXQgd2FzOiAiK2UpKTtyZXR1cm4gZX1mdW5jdGlvbiAkd24oZSx0KXt0eXBlb2Ygd2luZG93PT09d1AmJnR5cGVvZiB3aW5kb3cuJGd3dD09PXdQJiYod2luZG93LiRnd3RbZV09dCl9ZnVuY3Rpb24gdlYoZSx0KXtyZXR1cm4ganVuKHBBKGUuYSx0LFlyKG1vKGZnLGlnKFlyKG1vKHQ9PW51bGw/MDplcyh0KSxkZykpLDE1KSkpKSl9ZnVuY3Rpb24genduKGUsdCxuKXtyZXR1cm4gU3koZSxuZXcgZmQodCksbmV3IEF0LG5ldyBXdihuKSxoZShsZShvYywxKSxpdCwxMDgsMCxbXSkpfWZ1bmN0aW9uIHF3bigpe3JldHVybiBabCgpLGhlKGxlKGVQZSwxKSxpdCwyNjQsMCxbYUMsYUYsdVksRk0sbFksZlksaFksR2dlLHNGXSl9ZnVuY3Rpb24gUWh0KCl7UWh0PVUscDZ0PWhlKGxlKFZyLDEpLGRpLDI4LDE1LFswLDgsNCwxMiwyLDEwLDYsMTQsMSw5LDUsMTMsMywxMSw3LDE1XSl9ZnVuY3Rpb24gZEEoKXtkQT1VLEhMPW5ldyB3c2UoIkxBWUVSX1NXRUVQIiwwKSxtQj1uZXcgd3NlKCRoZSwxKSxmTGU9bmV3IHdzZShJZCwyKX1mdW5jdGlvbiBzN2UoKXtzN2U9VSxiRXQ9ZmkoZmkoZmkobmV3IFhzLCh1bygpLHkwKSwodm8oKSxENikpLHZnLGw0KSxidSx1NCl9ZnVuY3Rpb24gSmh0KCl7Smh0PVUsbUV0PWZpKGZpKGZpKG5ldyBYcywodW8oKSx5MCksKHZvKCksRDYpKSx2ZyxsNCksYnUsdTQpfWZ1bmN0aW9uIGE3ZSgpe2E3ZT1VLHZFdD1maShmaShmaShuZXcgWHMsKHVvKCkseTApLCh2bygpLEQ2KSksdmcsbDQpLGJ1LHU0KX1mdW5jdGlvbiBaaHQoKXtaaHQ9VSx3RXQ9ZmkoZmkoZmkobmV3IFhzLCh1bygpLHkwKSwodm8oKSxENikpLHZnLGw0KSxidSx1NCl9ZnVuY3Rpb24gZWZ0KCl7ZWZ0PVUseUV0PWZpKGZpKGZpKG5ldyBYcywodW8oKSx5MCksKHZvKCksRDYpKSx2ZyxsNCksYnUsdTQpfWZ1bmN0aW9uIHRmdCgpe3RmdD1VLHhFdD1maShmaShmaShuZXcgWHMsKHVvKCkseTApLCh2bygpLEQ2KSksdmcsbDQpLGJ1LHU0KX1mdW5jdGlvbiBuZnQoKXtuZnQ9VSxURXQ9eWwoZmkoZmkobmV3IFhzLCh1bygpLGJ1KSwodm8oKSxQSykpLF91LE1LKSxtYyxOSyl9ZnVuY3Rpb24gSHduKGUpe3ZhciB0LG47Zm9yKG49bmV3IEcoR2R0KGUpKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksNjk1KSx0Ll9mKCl9ZnVuY3Rpb24gVnduKCl7TVplKCk7Zm9yKHZhciBlPW0wZSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllLnB1c2goYXJndW1lbnRzW3RdKX1mdW5jdGlvbiByZnQoZSl7bTNlKCksdGhpcy5nPW5ldyBQcix0aGlzLmY9bmV3IFByLHRoaXMuYj1uZXcgUHIsdGhpcy5jPW5ldyBDdyx0aGlzLmk9ZX1mdW5jdGlvbiBvN2UoKXt0aGlzLmY9bmV3IHFhLHRoaXMuZD1uZXcgUndlLHRoaXMuYz1uZXcgcWEsdGhpcy5hPW5ldyBidCx0aGlzLmI9bmV3IGJ0fWZ1bmN0aW9uIGlmdChlLHQsbixyKXt0aGlzLmFrKCksdGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW51bGwsdGhpcy5jPW5ldyBacnQodGhpcyx0LG4scil9ZnVuY3Rpb24gSm9lKGUsdCxuLHIsYSl7dGhpcy5kPWUsdGhpcy5uPXQsdGhpcy5nPW4sdGhpcy5vPXIsdGhpcy5wPS0xLGF8fCh0aGlzLm89LTItci0xKX1mdW5jdGlvbiBzZnQoKXtreWUuY2FsbCh0aGlzKSx0aGlzLm49LTEsdGhpcy5nPW51bGwsdGhpcy5pPW51bGwsdGhpcy5qPW51bGwsdGhpcy5CYnw9bTB9ZnVuY3Rpb24gYWZ0KGUpe0RxLmNhbGwodGhpcyxlLkFkKDY0KT9weWUoMCxEZihlLnpkKCksMSkpOkVQLGUueWQoKSksdGhpcy5iPTEsdGhpcy5hPWV9ZnVuY3Rpb24gVXduKGUsdCl7cmV0dXJuIHV4KCksbChRKHQsKEhjKCksVzYpKSwxNykuYTxlLmdjKCkmJmwoUSh0LFc2KSwxNykuYT49MH1mdW5jdGlvbiBjN2UoZSx0KXtlLnI+MCYmZS5jPGUuciYmKGUuYys9dCxlLmkmJmUuaS5kPjAmJmUuZyE9MCYmYzdlKGUuaSx0L2UuciplLmkuZCkpfWZ1bmN0aW9uIHU3ZShlLHQpe3ZhciBuO249ZS5jLGUuYz10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMSxuLGUuYykpfWZ1bmN0aW9uIFpvZShlLHQpe3ZhciBuO249ZS5jLGUuYz10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsNCxuLGUuYykpfWZ1bmN0aW9uIGZFKGUsdCl7dmFyIG47bj1lLmssZS5rPXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSwyLG4sZS5rKSl9ZnVuY3Rpb24gZWNlKGUsdCl7dmFyIG47bj1lLkQsZS5EPXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSwyLG4sZS5EKSl9ZnVuY3Rpb24gd1YoZSx0KXt2YXIgbjtuPWUuZixlLmY9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgX2EoZSwxLDgsbixlLmYpKX1mdW5jdGlvbiB5VihlLHQpe3ZhciBuO249ZS5pLGUuaT10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsNyxuLGUuaSkpfWZ1bmN0aW9uIGw3ZShlLHQpe3ZhciBuO249ZS5hLGUuYT10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsOCxuLGUuYSkpfWZ1bmN0aW9uIGg3ZShlLHQpe3ZhciBuO249ZS5iLGUuYj10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMCxuLGUuYikpfWZ1bmN0aW9uIGY3ZShlLHQpe3ZhciBuO249ZS5iLGUuYj10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMCxuLGUuYikpfWZ1bmN0aW9uIGQ3ZShlLHQpe3ZhciBuO249ZS5jLGUuYz10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMSxuLGUuYykpfWZ1bmN0aW9uIGc3ZShlLHQpe3ZhciBuO249ZS5kLGUuZD10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMSxuLGUuZCkpfWZ1bmN0aW9uIEd3bihlLHQsbil7dmFyIHI7ZS5iPXQsZS5hPW4scj0oZS5hJjUxMik9PTUxMj9uZXcgZ0plOm5ldyBKJCxlLmM9YVNuKHIsZS5iLGUuYSl9ZnVuY3Rpb24gb2Z0KGUsdCl7cmV0dXJuIHVwKGUuZSx0KT8oRm8oKSxWb2UodCk/bmV3IG5IKHQsZSk6bmV3IHlPKHQsZSkpOm5ldyBQdHQodCxlKX1mdW5jdGlvbiBLd24oZSl7dmFyIHQsbjtyZXR1cm4gMD5lP25ldyBiM2U6KHQ9ZSsxLG49bmV3IHd1dCh0LGUpLG5ldyBVeWUobnVsbCxuKSl9ZnVuY3Rpb24gV3duKGUsdCl7Q24oKTt2YXIgbjtyZXR1cm4gbj1uZXcgTjgoMSksSWEoZSk/cmMobixlLHQpOmp1KG4uZixlLHQpLG5ldyB0cihuKX1mdW5jdGlvbiBZd24oZSx0KXt2YXIgbixyO3JldHVybiBuPWUuYyxyPXQuZVtlLnBdLHI+MD9sKGp0KG4uYSxyLTEpLDEwKTpudWxsfWZ1bmN0aW9uIFh3bihlLHQpe3ZhciBuLHI7cmV0dXJuIG49ZS5vK2UucCxyPXQubyt0LnAsbjxyPy0xOm49PXI/MDoxfWZ1bmN0aW9uIFF3bihlKXt2YXIgdDtyZXR1cm4gdD1RKGUsKGZ0KCksemkpKSxEZSh0LDE2Nyk/QzF0KGwodCwxNjcpKTpudWxsfWZ1bmN0aW9uIGNmdChlKXt2YXIgdDtyZXR1cm4gZT1iLk1hdGgubWF4KGUsMiksdD1QN2UoZSksZT50Pyh0PDw9MSx0PjA/dDpyTCk6dH1mdW5jdGlvbiB0Y2UoZSl7c3dpdGNoKEN5ZShlLmUhPTMpLGUuZSl7Y2FzZSAyOnJldHVybiExO2Nhc2UgMDpyZXR1cm4hMH1yZXR1cm4gc3ZuKGUpfWZ1bmN0aW9uIHVmdChlLHQpe3ZhciBuO3JldHVybiBEZSh0LDgpPyhuPWwodCw4KSxlLmE9PW4uYSYmZS5iPT1uLmIpOiExfWZ1bmN0aW9uIEp3bihlLHQpe3ZhciBuO249bmV3IE90LGwodC5iLDY4KSxsKHQuYiw2OCksbCh0LmIsNjgpLFZ1KHQuYSxuZXcgazRlKGUsbix0KSl9ZnVuY3Rpb24gbGZ0KGUsdCl7dmFyIG4scjtmb3Iocj10LnZjKCkuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksNDQpLEdOKGUsbi5sZCgpLG4ubWQoKSl9ZnVuY3Rpb24gcDdlKGUsdCl7dmFyIG47bj1lLmQsZS5kPXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSwxMSxuLGUuZCkpfWZ1bmN0aW9uIHhWKGUsdCl7dmFyIG47bj1lLmosZS5qPXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSwxMyxuLGUuaikpfWZ1bmN0aW9uIGI3ZShlLHQpe3ZhciBuO249ZS5iLGUuYj10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMjEsbixlLmIpKX1mdW5jdGlvbiBad24oZSx0KXsoVUgoKSxHMT9udWxsOnQuYykubGVuZ3RoPT0wJiZTcnQodCxuZXcgRHQpLHJjKGUuYSxHMT9udWxsOnQuYyx0KX1mdW5jdGlvbiBlM24oZSx0KXt0LlVnKCJIaWVyYXJjaGljYWwgcG9ydCBjb25zdHJhaW50IHByb2Nlc3NpbmciLDEpLHY2bihlKSxSSW4oZSksdC5WZygpfWZ1bmN0aW9uIE93KCl7T3c9VSxvMz1uZXcgdnNlKCJTVEFSVCIsMCksUmI9bmV3IHZzZSgiTUlERExFIiwxKSxhMz1uZXcgdnNlKCJFTkQiLDIpfWZ1bmN0aW9uIGtWKCl7a1Y9VSwkVz1uZXcgVTNlKCJQMV9OT0RFX1BMQUNFTUVOVCIsMCksWDY9bmV3IFUzZSgiUDJfRURHRV9ST1VUSU5HIiwxKX1mdW5jdGlvbiBiYigpe2JiPVUsSHg9bmV3IFVpKE5FZSksRUs9bmV3IFVpKEMzdCksJEw9bmV3IFVpKFMzdCksaEI9bmV3IFVpKF8zdCl9ZnVuY3Rpb24gTncoZSl7dmFyIHQ7cmV0dXJuIHBhZShlLmYuZyxlLmQpLG1yKGUuYiksZS5jPWUuYSx0PWwoZS5hLlBiKCksNDQpLGUuYj1MN2UoZSksdH1mdW5jdGlvbiBtN2UoZSl7dmFyIHQ7cmV0dXJuIGUuYj09bnVsbD8oV3AoKSxXcCgpLGRGKToodD1lLnVsKCk/ZS50bCgpOmUuc2woKSx0KX1mdW5jdGlvbiBoZnQoZSx0KXt2YXIgbjtyZXR1cm4gbj10PT1udWxsPy0xOmdjKGUuYix0LDApLG48MD8hMToocmNlKGUsbiksITApfWZ1bmN0aW9uIGQwKGUsdCl7dmFyIG47cmV0dXJuIG5yKHQpLG49dC5nLGUuYltuXT8hMTooVHMoZS5iLG4sdCksKytlLmMsITApfWZ1bmN0aW9uIEVWKGUsdCl7dmFyIG4scjtyZXR1cm4gbj0xLXQscj1lLmFbbl0sZS5hW25dPXIuYVt0XSxyLmFbdF09ZSxlLmI9ITAsci5iPSExLHJ9ZnVuY3Rpb24gdDNuKGUsdCl7dmFyIG4scjtmb3Iocj10LktjKCk7ci5PYigpOyluPWwoci5QYigpLDI3MiksZS5iPSEwLG5hKGUuZSxuKSxuLmI9ZX1mdW5jdGlvbiBuM24oZSx0KXt2YXIgbixyO3JldHVybiBuPWwoUShlLChOdCgpLHc0KSksOCkscj1sKFEodCx3NCksOCksWWkobi5iLHIuYil9ZnVuY3Rpb24gbmNlKGUsdCxuKXt2YXIgcixhLG87cmV0dXJuIG89dD4+NSxhPXQmMzEscj12YSh1YihlLm5bbl1bb10sWXIobDAoYSwxKSkpLDMpLHJ9ZnVuY3Rpb24gZmZ0KGUsdCxuKXt2YXIgcixhLG87Zm9yKG89ZS5hLmxlbmd0aC0xLGE9ZS5iLHI9MDtyPG47YT1hKzEmbywrK3IpVHModCxyLGUuYVthXSl9ZnVuY3Rpb24gcmNlKGUsdCl7dmFyIG47bj10MihlLmIsZS5iLmMubGVuZ3RoLTEpLHQ8ZS5iLmMubGVuZ3RoJiYocmYoZS5iLHQsbiksUHB0KGUsdCkpfWZ1bmN0aW9uIGRmdChlLHQpe3ZhciBuO3JldHVybiBuPWwoY3IoZS5jLHQpLDQ2Nyksbnx8KG49bmV3IFdRZSxuLmM9dCxraShlLmMsbi5jLG4pKSxufWZ1bmN0aW9uIHIzbihlLHQpe3ZhciBuLHI7cj1uZXcgYnQsbj10O2RvICRuKHIuYyxuKSxuPWwoY3IoZS5rLG4pLDE4KTt3aGlsZShuKTtyZXR1cm4gcn1mdW5jdGlvbiBpY2UoZSx0LG4pe3ZhciByO3JldHVybiByPW5ldyBidCxXOWUoZSx0LHIsbiwhMCwhMCksZS5iPW5ldyBUVihyLmMubGVuZ3RoKSxyfWZ1bmN0aW9uICRtKGUsdCl7dmFyIG4scjtmb3Iobj1lLlBjKCksbkUobiwwLG4ubGVuZ3RoLHQpLHI9MDtyPG4ubGVuZ3RoO3IrKyllLmhkKHIsbltyXSl9ZnVuY3Rpb24gdjdlKGUpe3ZhciB0LG47Zm9yKG49bmV3IG9yKGUpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwyNyksVXUodCwwKSxHdSh0LDApfWZ1bmN0aW9uIGdmdChlKXt0aGlzLmU9ZSx0aGlzLmQ9bmV3IEt6KEF5KFc4KHRoaXMuZSkuZ2MoKSkpLHRoaXMuYz10aGlzLmUuYSx0aGlzLmI9dGhpcy5lLmN9ZnVuY3Rpb24gVFYoZSl7dGhpcy5iPWUsdGhpcy5hPVdlKFZyLGRpLDI4LGUrMSwxNSwxKSx0aGlzLmM9V2UoVnIsZGksMjgsZSwxNSwxKSx0aGlzLmQ9MH1mdW5jdGlvbiBwZnQoZSx0LG4pe19odC5jYWxsKHRoaXMsdCxuKSx0aGlzLmQ9V2Uod2csbTIsMTAsZS5hLmMubGVuZ3RoLDAsMSksajEoZS5hLHRoaXMuZCl9ZnVuY3Rpb24gYmZ0KGUsdCxuKXtuNmUuY2FsbCh0aGlzLGUsdCxuKSx0aGlzLmE9bmV3IFByLHRoaXMuYj1uZXcgUHIsdGhpcy5kPW5ldyB6WWUodGhpcyl9ZnVuY3Rpb24gbWZ0KGUpe1g0ZS5jYWxsKHRoaXMpLHRoaXMuYj16ZShHZShRKGUsKE50KCkseDApKSkpLHRoaXMuYT1sKFEoZSxicCksMjIzKX1mdW5jdGlvbiBzY2UoZSx0KXt2YXIgbjtyZXR1cm4gRGUodCwxNik/KG49bCh0LDE2KSxlLkdjKG4pKTpHb2UoZSxsKFhyKHQpLDIwKS5LYygpKX1mdW5jdGlvbiBpM24oZSx0KXtJcyhGaShuZXcgYm4obnVsbCxuZXcga24obmV3IGJyKGUuYiksMSkpLG5ldyB1dHQoZSx0KSksbmV3IGh0dChlLHQpKX1mdW5jdGlvbiBzM24oZSx0KXt0LlVnKHEzdCwxKSxJcyhEYyhuZXcgYm4obnVsbCxuZXcga24oZS5iLDE2KSksbmV3IEtKKSxuZXcgV0opLHQuVmcoKX1mdW5jdGlvbiBlcyhlKXtyZXR1cm4gSWEoZSk/czIoZSk6ZnkoZSk/ajgoZSk6aHkoZSk/QXJ0KGUpOnQ1ZShlKT9lLkhiKCk6VzRlKGUpP2Z3KGUpOkY1ZShlKX1mdW5jdGlvbiB2ZnQoZSl7dmFyIHQsbjtmb3Iobj1lLmMuYS5lYygpLktjKCk7bi5PYigpOyl0PWwobi5QYigpLDIxOSksTSh0LG5ldyBGc3QodC5mKSl9ZnVuY3Rpb24gdzdlKGUpe3ZhciB0LG47Zm9yKG49ZS5jLmEuZWMoKS5LYygpO24uT2IoKTspdD1sKG4uUGIoKSwyMTkpLE8odCxuZXcgUWd0KHQuZSkpfWZ1bmN0aW9uIEZ1KGUsdCl7dmFyIG47bj1lLnpiLGUuemI9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgX2EoZSwxLDEsbixlLnpiKSl9ZnVuY3Rpb24gQ1YoZSx0KXt2YXIgbjtuPWUueGIsZS54Yj10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMyxuLGUueGIpKX1mdW5jdGlvbiBTVihlLHQpe3ZhciBuO249ZS55YixlLnliPXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSwyLG4sZS55YikpfWZ1bmN0aW9uIFNzKGUsdCl7dmFyIG4scjtuPShyPW5ldyB6aWUsciksbi5uPXQscXIoKCFlLnMmJihlLnM9bmV3IG50KGRsLGUsMjEsMTcpKSxlLnMpLG4pfWZ1bmN0aW9uIGlzKGUsdCl7dmFyIG4scjtyPShuPW5ldyBIeWUsbiksci5uPXQscXIoKCFlLnMmJihlLnM9bmV3IG50KGRsLGUsMjEsMTcpKSxlLnMpLHIpfWZ1bmN0aW9uIEthKGUsdCl7dmFyIG4scixhO2Zvcihucih0KSxuPSExLGE9dC5LYygpO2EuT2IoKTspcj1hLlBiKCksbj1ufGUuRmMocik7cmV0dXJuIG59ZnVuY3Rpb24gd2Z0KGUpe3ZhciB0LG4scjtmb3IodD0wLHI9ZS5LYygpO3IuT2IoKTspbj1yLlBiKCksdCs9biE9bnVsbD9lcyhuKTowLHQ9fn50O3JldHVybiB0fWZ1bmN0aW9uIGFjZShlLHQpe3ZhciBuPWUuYSxyPTA7Zm9yKHZhciBhIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShhKSYmKHRbcisrXT1hKTtyZXR1cm4gdH1mdW5jdGlvbiB5ZnQoZSl7dmFyIHQ7cmV0dXJuIGU9PTA/IlVUQyI6KGU8MD8oZT0tZSx0PSJVVEMrIik6dD0iVVRDLSIsdCtKbHQoZSkpfWZ1bmN0aW9uIHk3ZShlKXtyZXR1cm4gZS5hPDU0P2UuZjwwPy0xOmUuZj4wPzE6MDooIWUuYyYmKGUuYz1YTyhaYyhlLmYpKSksZS5jKS5lfWZ1bmN0aW9uIHhmdChlLHQpe3Q/ZS5CPT1udWxsJiYoZS5CPWUuRCxlLkQ9bnVsbCk6ZS5CIT1udWxsJiYoZS5EPWUuQixlLkI9bnVsbCl9ZnVuY3Rpb24gYTNuKGUsdCl7cmV0dXJuIHdFKCksZT09czMmJnQ9PW80fHxlPT1vNCYmdD09czN8fGU9PU02JiZ0PT1hNHx8ZT09YTQmJnQ9PU02fWZ1bmN0aW9uIG8zbihlLHQpe3JldHVybiB3RSgpLGU9PXMzJiZ0PT1hNHx8ZT09czMmJnQ9PU02fHxlPT1vNCYmdD09TTZ8fGU9PW80JiZ0PT1hNH1mdW5jdGlvbiBrZnQoZSx0KXtyZXR1cm4gQTEoKSxmMChIMSksYi5NYXRoLmFicygwLXQpPD1IMXx8dD09MHx8aXNOYU4oMCkmJmlzTmFOKHQpPzA6ZS90fWZ1bmN0aW9uIEVmdChlLHQpe3JldHVybiB6ZShHZShmaChPTihmYyhuZXcgYm4obnVsbCxuZXcga24oZS5jLmIsMTYpKSxuZXcgQVllKGUpKSx0KSkpKX1mdW5jdGlvbiB4N2UoZSx0KXtyZXR1cm4gemUoR2UoZmgoT04oZmMobmV3IGJuKG51bGwsbmV3IGtuKGUuYy5iLDE2KSksbmV3IF9ZZShlKSksdCkpKSl9ZnVuY3Rpb24gYzNuKCl7cmV0dXJuIEhvKCksaGUobGUoRjFlLDEpLGl0LDI1OSwwLFtlVyx2ZixVTCx0VywkVCxCNixHTCxSVCxqVCxuV10pfWZ1bmN0aW9uIHUzbigpe3JldHVybiBOZigpLGhlKGxlKFREZSwxKSxpdCwyNDMsMCxbQVcsQUIsTEIseERlLGtEZSx5RGUsRURlLExXLHYzLHg0XSl9ZnVuY3Rpb24gbDNuKGUsdCl7dmFyIG47dC5VZygiR2VuZXJhbCBDb21wYWN0b3IiLDEpLG49cDVuKGwoYXQoZSwoU2IoKSxaZGUpKSwzOTMpKSxuLkNnKGUpfWZ1bmN0aW9uIGgzbihlLHQpe3ZhciBuLHI7cmV0dXJuIG49bChhdChlLChTYigpLHFXKSksMTcpLHI9bChhdCh0LHFXKSwxNykscnUobi5hLHIuYSl9ZnVuY3Rpb24gazdlKGUsdCxuKXt2YXIgcixhO2ZvcihhPVJyKGUsMCk7YS5iIT1hLmQuYzspcj1sKEJyKGEpLDgpLHIuYSs9dCxyLmIrPW47cmV0dXJuIGV9ZnVuY3Rpb24gZ0EoZSx0LG4pe3ZhciByO2ZvcihyPWUuYltuJmUuZl07cjtyPXIuYilpZihuPT1yLmEmJnlkKHQsci5nKSlyZXR1cm4gcjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBwQShlLHQsbil7dmFyIHI7Zm9yKHI9ZS5jW24mZS5mXTtyO3I9ci5kKWlmKG49PXIuZiYmeWQodCxyLmkpKXJldHVybiByO3JldHVybiBudWxsfWZ1bmN0aW9uIGYzbihlLHQsbil7dmFyIHIsYSxvO2ZvcihyPTAsYT0wO2E8bjthKyspbz10W2FdLGVbYV09bzw8MXxyLHI9bz4+PjMxO3IhPTAmJihlW25dPXIpfWZ1bmN0aW9uIG9jZShlLHQsbixyLGEsbyl7dmFyIGY7dGhpcy5jPWUsZj1uZXcgYnQsdHhlKGUsZix0LGUuYixuLHIsYSxvKSx0aGlzLmE9bmV3IFVhKGYsMCl9ZnVuY3Rpb24gVGZ0KCl7dGhpcy5jPW5ldyBXeigwKSx0aGlzLmI9bmV3IFd6KGxDZSksdGhpcy5kPW5ldyBXeihoeXQpLHRoaXMuYT1uZXcgV3ooTGhlKX1mdW5jdGlvbiBvZihlLHQsbixyLGEsbyxmKXtVci5jYWxsKHRoaXMsZSx0KSx0aGlzLmQ9bix0aGlzLmU9cix0aGlzLmM9YSx0aGlzLmI9byx0aGlzLmE9TzEoZil9ZnVuY3Rpb24gT3MoZSx0LG4scixhLG8sZixnLHcsRSxDLEwsQil7cmV0dXJuIExwdChlLHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCKSwkY2UoZSwhMSksZX1mdW5jdGlvbiBkM24oZSl7cmV0dXJuIGUuYi5jLmkuaz09KFpuKCksVXMpP2woUShlLmIuYy5pLChmdCgpLHppKSksMTIpOmUuYi5jfWZ1bmN0aW9uIENmdChlKXtyZXR1cm4gZS5iLmQuaS5rPT0oWm4oKSxVcyk/bChRKGUuYi5kLmksKGZ0KCksemkpKSwxMik6ZS5iLmR9ZnVuY3Rpb24gZzNuKGUpe3ZhciB0O3JldHVybiB0PWpIKGUpLGN3KHQuYSwwKT8oSnooKSxKeigpLEE2dCk6KEp6KCksbmV3IGFydCh0LmIpKX1mdW5jdGlvbiBjY2UoZSl7dmFyIHQ7cmV0dXJuIHQ9ZTZlKGUpLGN3KHQuYSwwKT8oY3koKSxjeSgpLEkwZSk6KGN5KCksbmV3IHNhZSh0LmIpKX1mdW5jdGlvbiB1Y2UoZSl7dmFyIHQ7cmV0dXJuIHQ9ZTZlKGUpLGN3KHQuYSwwKT8oY3koKSxjeSgpLEkwZSk6KGN5KCksbmV3IHNhZSh0LmMpKX1mdW5jdGlvbiBTZnQoZSl7c3dpdGNoKGUuZyl7Y2FzZSAyOnJldHVybiBDdCgpLGVyO2Nhc2UgNDpyZXR1cm4gQ3QoKSxhcjtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiBfZnQoZSl7c3dpdGNoKGUuZyl7Y2FzZSAxOnJldHVybiBDdCgpLERyO2Nhc2UgMzpyZXR1cm4gQ3QoKSxRbjtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiBBZnQoZSl7c3dpdGNoKGUuZyl7Y2FzZSAwOnJldHVybiBuZXcgTW5lO2Nhc2UgMTpyZXR1cm4gbmV3IERuZTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBseCgpe2x4PVUsZzFlPW5ldyB2cygiZWRnZWxhYmVsY2VudGVyZWRuZXNzYW5hbHlzaXMuaW5jbHVkZWxhYmVsIiwoSG4oKSxQYikpfWZ1bmN0aW9uIEU3ZSgpe0U3ZT1VLENFdD1UZChZdHQoZmkoZmkobmV3IFhzLCh1bygpLGJ1KSwodm8oKSxQSykpLF91LE1LKSxtYyksTkspfWZ1bmN0aW9uIExmdCgpe0xmdD1VLExFdD1UZChZdHQoZmkoZmkobmV3IFhzLCh1bygpLGJ1KSwodm8oKSxQSykpLF91LE1LKSxtYyksTkspfWZ1bmN0aW9uIGxjZSgpe2xjZT1VLHFNPW5ldyB1SmUsbnBlPWhlKGxlKGRsLDEpLFM2LDE3OSwwLFtdKSxYX3Q9aGUobGUoVWYsMSksTFNlLDYyLDAsW10pfWZ1bmN0aW9uIGRFKCl7ZEU9VSxkQj1uZXcgSTNlKCJUT19JTlRFUk5BTF9MVFIiLDApLGgxZT1uZXcgSTNlKCJUT19JTlBVVF9ESVJFQ1RJT04iLDEpfWZ1bmN0aW9uIGtsKCl7a2w9VSxFQWU9bmV3IEsyLHhBZT1uZXcgSjMsa0FlPW5ldyBISix5QWU9bmV3IHdtLFRBZT1uZXcgVkosQ0FlPW5ldyBVSn1mdW5jdGlvbiBwM24oZSx0KXt0LlVnKHEzdCwxKSxTOGUoWnVuKG5ldyBlXygoZ18oKSxuZXcgSmFlKGUsITEsITEsbmV3IGNTKSkpKSksdC5WZygpfWZ1bmN0aW9uIGIzbihlLHQsbil7bi5VZygiREZTIFRyZWVpZnlpbmcgcGhhc2UiLDEpLE81bihlLHQpLERDbihlLHQpLGUuYT1udWxsLGUuYj1udWxsLG4uVmcoKX1mdW5jdGlvbiB2TihlLHQpe3JldHVybiBIbigpLElhKGUpP0U2ZShlLGVpKHQpKTpmeShlKT9OYWUoZSxHZSh0KSk6aHkoZSk/YWduKGUsQnQodCkpOmUuRmQodCl9ZnVuY3Rpb24gYkEoZSx0KXt2YXIgbixyO2Zvcihucih0KSxyPXQudmMoKS5LYygpO3IuT2IoKTspbj1sKHIuUGIoKSw0NCksZS56YyhuLmxkKCksbi5tZCgpKX1mdW5jdGlvbiBtM24oZSx0LG4pe3ZhciByO2ZvcihyPW4uS2MoKTtyLk9iKCk7KWlmKCFxSChlLHQsci5QYigpKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiB2M24oZSx0LG4scixhKXt2YXIgbztyZXR1cm4gbiYmKG89bXModC5EaCgpLGUuYyksYT1uLlJoKHQsLTEtKG89PS0xP3I6byksbnVsbCxhKSksYX1mdW5jdGlvbiB3M24oZSx0LG4scixhKXt2YXIgbztyZXR1cm4gbiYmKG89bXModC5EaCgpLGUuYyksYT1uLlRoKHQsLTEtKG89PS0xP3I6byksbnVsbCxhKSksYX1mdW5jdGlvbiBNZnQoZSl7dmFyIHQ7aWYoZS5iPT0tMil7aWYoZS5lPT0wKXQ9LTE7ZWxzZSBmb3IodD0wO2UuYVt0XT09MDt0KyspO2UuYj10fXJldHVybiBlLmJ9ZnVuY3Rpb24geTNuKGUpe2lmKG5yKGUpLGUubGVuZ3RoPT0wKXRocm93IHVlKG5ldyBnZCgiWmVybyBsZW5ndGggQmlnSW50ZWdlciIpKTtTX24odGhpcyxlKX1mdW5jdGlvbiBUN2UoZSl7dGhpcy5pPWUuZ2MoKSx0aGlzLmk+MCYmKHRoaXMuZz10aGlzLmFqKHRoaXMuaSsodGhpcy5pLzh8MCkrMSksZS5RYyh0aGlzLmcpKX1mdW5jdGlvbiBEZnQoZSx0LG4pe3RoaXMuZz1lLHRoaXMuZD10LHRoaXMuZT1uLHRoaXMuYT1uZXcgYnQsSWtuKHRoaXMpLENuKCksVnModGhpcy5hLG51bGwpfWZ1bmN0aW9uIEM3ZShlLHQpe3QucT1lLGUuZD1iLk1hdGgubWF4KGUuZCx0LnIpLGUuYis9dC5kKyhlLmEuYy5sZW5ndGg9PTA/MDplLmMpLHZ0KGUuYSx0KX1mdW5jdGlvbiBnRShlLHQpe3ZhciBuLHIsYSxvO3JldHVybiBhPWUuYyxuPWUuYytlLmIsbz1lLmQscj1lLmQrZS5hLHQuYT5hJiZ0LmE8biYmdC5iPm8mJnQuYjxyfWZ1bmN0aW9uIER5KGUsdCl7dmFyIG4scjtmb3Iocj1ScihlLDApO3IuYiE9ci5kLmM7KW49bChCcihyKSw4KSxuLmErPXQuYSxuLmIrPXQuYjtyZXR1cm4gZX1mdW5jdGlvbiB4M24oZSl7dmFyIHQsbixyO2ZvcihyPTAsbj1uZXcgRyhlLmIpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwzMCksdC5wPXIsKytyfWZ1bmN0aW9uIGszbihlKXt2YXIgdCxuLHI7cmV0dXJuIGUuaj09KEN0KCksUW4pJiYodD12MnQoZSksbj12bCh0LGFyKSxyPXZsKHQsZXIpLHJ8fHImJm4pfWZ1bmN0aW9uIEUzbihlLHQpe3ZhciBuO3JldHVybiBuPSR4ZShlKSxtOWUobmV3IGx0KG4uYyxuLmQpLG5ldyBsdChuLmIsbi5hKSxlLk1mKCksdCxlLmFnKCkpfWZ1bmN0aW9uIFM3ZShlLHQpe3ZhciBuO249bCh0LDE5MCksTm0obiwieCIsZS5pKSxObShuLCJ5IixlLmopLE5tKG4sVWZlLGUuZyksTm0obixWZmUsZS5mKX1mdW5jdGlvbiBfVihlLHQpe3ZhciBuO0RlKHQsODUpPyhsKGUuYyw3OSkuR2soKSxuPWwodCw4NSksbGZ0KGUsbikpOmwoZS5jLDc5KS5XYih0KX1mdW5jdGlvbiBtQShlLHQpe3ZhciBuLHI7Zm9yKG5yKHQpLHI9ZS52YygpLktjKCk7ci5PYigpOyluPWwoci5QYigpLDQ0KSx0LllkKG4ubGQoKSxuLm1kKCkpfWZ1bmN0aW9uIFQzbihlLHQpe3ZhciBuO2ZvcihYcih0KTtlLk9iKCk7KWlmKG49ZS5QYigpLCFBN2UobChuLDEwKSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQzNuKCl7dmFyIGU7cmV0dXJuIEYwZXx8KEYwZT1uZXcgRlFlLGU9bmV3IFNvZSgiIiksJGxuKGUsKERrKCksd19lKSksWnduKEYwZSxlKSksRjBlfWZ1bmN0aW9uIElmdChlLHQpe3JldHVybiBTeShuZXcgZWIoZSksbmV3IEcwKHQpLG5ldyB6cCh0KSxuZXcgYW8saGUobGUob2MsMSksaXQsMTA4LDAsW10pKX1mdW5jdGlvbiBBVigpe0FWPVUsbmdlPW5ldyBQc2UoSWQsMCksVUllPW5ldyBQc2UoIlBPTEFSX0NPT1JESU5BVEUiLDEpLFZJZT1uZXcgUHNlKCJJRCIsMil9ZnVuY3Rpb24gTFYoKXtMVj1VLEFEZT1uZXcgU3NlKCJFUVVBTExZIiwwKSxUZGU9bmV3IFNzZShuRywxKSxMRGU9bmV3IFNzZSgiTk9SVEhfU09VVEgiLDIpfWZ1bmN0aW9uIHBFKCl7cEU9VSxqTD1uZXcgdnMoImRlYnVnU1ZHIiwoSG4oKSwhMSkpLFZfZT1uZXcgdnMoIm92ZXJsYXBzRXhpc3RlZCIsITApfWZ1bmN0aW9uIE9mdCgpe09mdD1VLHlTdD1LcigoZzIoKSxoZShsZSh3U3QsMSksaXQsMjg1LDAsW1ZPZSx5YSxUYyxKNixmbyxwcyx0OSxYMV0pKSl9ZnVuY3Rpb24gTmZ0KCl7TmZ0PVUsTF90PUtyKChIRSgpLGhlKGxlKHhZLDEpLGl0LDI0NSwwLFtKZ2Usd1kseVksdlksUWdlLG1ZLGJZLFhnZV0pKSl9ZnVuY3Rpb24gUGZ0KCl7UGZ0PVUsbHh0PUtyKChPVSgpLGhlKGxlKHVMZSwxKSxpdCwyNzYsMCxbdzFlLGsxZSx2MWUsQzFlLHgxZSx5MWUsVDFlLEUxZV0pKSl9ZnVuY3Rpb24gQmZ0KCl7cmV0dXJuIFdBKCksaGUobGUoQU9uLDEpLGl0LDI2MiwwLFtEZGUsR0RlLFhEZSxRRGUsWURlLFVEZSxKRGUsSERlLFdEZSxLRGUsVkRlXSl9ZnVuY3Rpb24gem0oZSx0LG4pe3ZhciByLGE7cmV0dXJuIGE9bChIXyhlLmQsdCksMTcpLHI9bChIXyhlLmIsbiksMTcpLCFhfHwhcj9udWxsOm94KGUsYS5hLHIuYSl9ZnVuY3Rpb24gRmZ0KGUsdCl7dmFyIG47cmV0dXJuIG49aWxlKGhFKCksZSksbj8oSGkodCwocGkoKSxhNyksbiksITApOiExfWZ1bmN0aW9uIFJmdChlKXtyZXR1cm4gcHkoKSxlLkEuSGMoKG1oKCksQTQpKSYmIWUuQi5IYygoWmwoKSxhRikpP04xdChlKTpudWxsfWZ1bmN0aW9uIGpmdCgpe3RoaXMuYT1sKEl0KChiMCgpLHhLKSksMTcpLmEsdGhpcy5jPXplKEdlKEl0KGtLKSkpLHRoaXMuYj16ZShHZShJdChKMGUpKSl9ZnVuY3Rpb24gcW0oZSl7dGhpcy5mPWUsdGhpcy5lPW5ldyBoNmUodGhpcy5mLmkpLHRoaXMuYT10aGlzLmUsdGhpcy5iPUw3ZSh0aGlzKSx0aGlzLmQ9dGhpcy5mLmd9ZnVuY3Rpb24gTHMoZSx0KXtKcS5jYWxsKHRoaXMsUV90LGUsdCksdGhpcy5iPXRoaXMsdGhpcy5hPVd1KGUuRGgoKSxNbih0aGlzLmUuRGgoKSx0aGlzLmMpKX1mdW5jdGlvbiBTM24oZSx0KXt2YXIgbixyO2ZvcihyPW5ldyBHKHQuYik7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDMwKSxlLmFbbi5wXT1zOW4obil9ZnVuY3Rpb24gRGgoZSx0KXt2YXIgbjtmb3Iobj0wO248dC5qLmMubGVuZ3RoO24rKylsKGhOKGUsbiksMjEpLkdjKGwoaE4odCxuKSwxNikpO3JldHVybiBlfWZ1bmN0aW9uIGhjZShlLHQsbixyKXt2YXIgYTthPWUuYS5sZW5ndGgsbj5hP249YTpYbih0LG4rMSksZS5hPXRmKGUuYSwwLHQpKygiIityKSt3NWUoZS5hLG4pfWZ1bmN0aW9uICRmdChlLHQpe2UuYT1ibyhlLmEsMSksZS5jPWIuTWF0aC5taW4oZS5jLHQpLGUuYj1iLk1hdGgubWF4KGUuYix0KSxlLmQ9Ym8oZS5kLHQpfWZ1bmN0aW9uIF8zbihlLHQpe3JldHVybiB0PGUuYi5nYygpP2woZS5iLlhiKHQpLDEwKTp0PT1lLmIuZ2MoKT9lLmE6bChqdChlLmUsdC1lLmIuZ2MoKS0xKSwxMCl9ZnVuY3Rpb24gQTNuKGUsdCxuKXtyZXR1cm4gWWkoejgoQkUoZSksbmV3IGx0KHQuZS5hLHQuZS5iKSksejgoQkUoZSksbmV3IGx0KG4uZS5hLG4uZS5iKSkpfWZ1bmN0aW9uIEwzbihlLHQsbil7cmV0dXJuIGU9PShJdygpLE1XKT9uZXcgSGVlOkpsKHQsMSkhPTA/bmV3IG8zZShuLmxlbmd0aCk6bmV3IEtKZShuLmxlbmd0aCl9ZnVuY3Rpb24gTmkoZSx0KXt2YXIgbixyLGE7aWYobj1lLnRoKCksbiE9bnVsbCYmZS53aCgpKWZvcihyPTAsYT1uLmxlbmd0aDtyPGE7KytyKW5bcl0uZGoodCl9ZnVuY3Rpb24gTTNuKGUsdCl7dmFyIG4scixhO2ZvcihuPWUuYy5YZSgpLGE9dC5LYygpO2EuT2IoKTspcj1hLlBiKCksZS5hLllkKG4scik7cmV0dXJuIGUuYi5LYihuKX1mdW5jdGlvbiBiRShlLHQpe3ZhciBuLHI7Zm9yKG49ZSxyPWVvKG4pLmU7cjspe2lmKG49cixuPT10KXJldHVybiEwO3I9ZW8obikuZX1yZXR1cm4hMX1mdW5jdGlvbiBtYihlKXt2YXIgdDtyZXR1cm4gdD1lLmgsdD09MD9lLmwrZS5tKkx4OnQ9PWhwP2UubCtlLm0qTHgtWm06ZX1mdW5jdGlvbiBEM24oZSx0LG4pe3ZhciByLGE7cmV0dXJuIHI9ZS5hLmZbdC5wXSxhPWUuYS5mW24ucF0scjxhPy0xOnI9PWE/MDoxfWZ1bmN0aW9uIEkzbihlLHQpe3ZhciBuLHI7Zm9yKHI9bmV3IEcodCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDcyKSx2dChlLmQsbiksZTluKGUsbil9ZnVuY3Rpb24gTzNuKGUsdCl7dmFyIG47dC5VZygiRWRnZSBhbmQgbGF5ZXIgY29uc3RyYWludCBlZGdlIHJldmVyc2FsIiwxKSxuPXFTbihlKSx3RG4obiksdC5WZygpfWZ1bmN0aW9uIE4zbihlLHQpe3ZhciBuLHI7Zm9yKHI9bmV3IG9yKGUpO3IuZSE9ci5pLmdjKCk7KW49bChncihyKSwyNyksUWgobixuLmkrdC5iLG4uait0LmQpfWZ1bmN0aW9uIHpmdChlKXt2YXIgdDtlLmQ9PW51bGw/KCsrZS5lLGUuZj0wLFowdChudWxsKSk6KCsrZS5lLHQ9ZS5kLGUuZD1udWxsLGUuZj0wLFowdCh0KSl9ZnVuY3Rpb24gUDNuKGUpe3ZhciB0O2lmKGUuYT09ZS5iLmEpdGhyb3cgdWUobmV3IF9jKTtyZXR1cm4gdD1lLmEsZS5jPXQsZS5hPWwoTGYoZS5hLmUpLDIyNyksdH1mdW5jdGlvbiBLbihlLHQpe3ZhciBuO3JldHVybiBlLkRiJnQ/KG49bXVlKGUsdCksbj09LTE/ZS5FYjpqbShlLkViKVtuXSk6bnVsbH1mdW5jdGlvbiBxYyhlLHQpe3ZhciBuLHI7cmV0dXJuIG49KHI9bmV3IGh6LHIpLG4uRz10LCFlLnJiJiYoZS5yYj1uZXcgd3koZSxsMSxlKSkscXIoZS5yYixuKSxufWZ1bmN0aW9uIFRpKGUsdCl7dmFyIG4scjtyZXR1cm4gbj0ocj1uZXcgRnosciksbi5HPXQsIWUucmImJihlLnJiPW5ldyB3eShlLGwxLGUpKSxxcihlLnJiLG4pLG59ZnVuY3Rpb24gcWZ0KGUsdCxuLHIpe0RlKGUuQ2IsMTg0KSYmKGwoZS5DYiwxODQpLnRiPW51bGwpLEZ1KGUsbiksdCYmSmtuKGUsdCksciYmZS5nbCghMCl9ZnVuY3Rpb24gSGZ0KGUsdCl7ZS5jJiYoc210KGUsdCwhMCksSXMobmV3IGJuKG51bGwsbmV3IGtuKHQsMTYpKSxuZXcgTlllKGUpKSksc210KGUsdCwhMSl9ZnVuY3Rpb24gQjNuKGUpe3BudCgpO3ZhciB0O3JldHVybiB2ZXQoTWRlLGUpfHwodD1uZXcgZHRlLHQuYT1lLHQ0ZShNZGUsZSx0KSksbChRbyhNZGUsZSksNjQ1KX1mdW5jdGlvbiBNVihlKXt2YXIgdDtpZihlLmc+MXx8ZS5PYigpKXJldHVybisrZS5hLGUuZz0wLHQ9ZS5pLGUuT2IoKSx0O3Rocm93IHVlKG5ldyBfYyl9ZnVuY3Rpb24gVmZ0KGUpe3N3aXRjaChlLmEuZyl7Y2FzZSAxOnJldHVybiBuZXcgWWV0O2Nhc2UgMzpyZXR1cm4gbmV3IFlkdDtkZWZhdWx0OnJldHVybiBuZXcgbmllfX1mdW5jdGlvbiBfN2UoZSx0KXtzd2l0Y2godCl7Y2FzZSAxOnJldHVybiEhZS5uJiZlLm4uaSE9MDtjYXNlIDI6cmV0dXJuIGUuayE9bnVsbH1yZXR1cm4gWjVlKGUsdCl9ZnVuY3Rpb24gWmMoZSl7cmV0dXJuIF9QPGUmJmU8Wm0/ZTwwP2IuTWF0aC5jZWlsKGUpOmIuTWF0aC5mbG9vcihlKTptYihsQ24oZSkpfWZ1bmN0aW9uIHdOKGUpe3ZhciB0O3JldHVybiBlPDEyOD8obnN0KCksdD1lX2VbZV0sIXQmJih0PWVfZVtlXT1uZXcgeXMoZSkpLHQpOm5ldyB5cyhlKX1mdW5jdGlvbiBGM24oZSx0KXt2YXIgbjt0cnl7dC5kZSgpfWNhdGNoKHIpe2lmKHI9YnMociksRGUociw4Mikpbj1yLCRuKGUuYyxuKTtlbHNlIHRocm93IHVlKHIpfX1mdW5jdGlvbiBNZihlKXt2YXIgdCxuLHIsYTtyZXR1cm4gYT1lLHI9MCxhPDAmJihhKz1abSxyPWhwKSxuPXVhKGEvTHgpLHQ9dWEoYS1uKkx4KSxxdSh0LG4scil9ZnVuY3Rpb24geU4oZSl7dmFyIHQsbixyO2ZvcihyPTAsbj1uZXcgUDgoZS5hKTtuLmE8bi5jLmEubGVuZ3RoOyl0PWNBKG4pLGUuYi5IYyh0KSYmKytyO3JldHVybiByfWZ1bmN0aW9uIFIzbihlKXt2YXIgdCxuLHI7Zm9yKHQ9MSxyPWUuS2MoKTtyLk9iKCk7KW49ci5QYigpLHQ9MzEqdCsobj09bnVsbD8wOmVzKG4pKSx0PX5+dDtyZXR1cm4gdH1mdW5jdGlvbiBwYyhlLHQpe3ZhciBuO3JldHVybiB0JiYobj10Lm5mKCksbi5kYygpfHwoZS5xP2JBKGUucSxuKTplLnE9bmV3IGp0dChuKSkpLGV9ZnVuY3Rpb24gVWZ0KGUsdCl7dmFyIG47cmV0dXJuIG49ZS5hLmdldCh0KSxuPT09dm9pZCAwPysrZS5kOihEZm4oZS5hLHQpLC0tZS5jLCsrZS5iLmcpLG59ZnVuY3Rpb24gajNuKGUsdCl7dmFyIG4scixhO3JldHVybiBuPXQucC1lLnAsbj09MD8ocj1lLmYuYSplLmYuYixhPXQuZi5hKnQuZi5iLFlpKHIsYSkpOm59ZnVuY3Rpb24gJDNuKGUsdCl7dmFyIG4scjtyZXR1cm4gbj1lLmoscj10LmosbiE9cj9uLmctci5nOmUucD09dC5wPzA6bj09KEN0KCksUW4pP2UucC10LnA6dC5wLWUucH1mdW5jdGlvbiB2QShlLHQsbixyLGEpe1RzKGUuY1t0LmddLG4uZyxyKSxUcyhlLmNbbi5nXSx0LmcsciksVHMoZS5iW3QuZ10sbi5nLGEpLFRzKGUuYltuLmddLHQuZyxhKX1mdW5jdGlvbiBIbShlLHQsbil7dGhpcy5iPShucihlKSxlKSx0aGlzLmQ9KG5yKHQpLHQpLHRoaXMuZT0obnIobiksbiksdGhpcy5jPXRoaXMuZCsoIiIrdGhpcy5lKX1mdW5jdGlvbiBtRShlLHQpe3RoaXMuYj1lLHRoaXMuZT10LHRoaXMuZD10LmosdGhpcy5mPShGbygpLGwoZSw2OSkueGsoKSksdGhpcy5rPVd1KHQuZS5EaCgpLGUpfWZ1bmN0aW9uIHhOKGUpe3RoaXMubj1uZXcgYnQsdGhpcy5lPW5ldyBvcyx0aGlzLmo9bmV3IG9zLHRoaXMuaz1uZXcgYnQsdGhpcy5mPW5ldyBidCx0aGlzLnA9ZX1mdW5jdGlvbiBHZnQoZSl7ZS5yPW5ldyBLcyxlLnc9bmV3IEtzLGUudD1uZXcgYnQsZS5pPW5ldyBidCxlLmQ9bmV3IEtzLGUuYT1uZXcgJDgsZS5jPW5ldyBQcn1mdW5jdGlvbiBQdygpe1B3PVUsaUI9bmV3IHVxKCJVUCIsMCksckI9bmV3IHVxKHdoZSwxKSxWMGU9bmV3IHVxKE14LDIpLFUwZT1uZXcgdXEoRHgsMyl9ZnVuY3Rpb24gdkUoKXt2RT1VLFIxZT1uZXcga3NlKCJPTkVfU0lERUQiLDApLGoxZT1uZXcga3NlKCJUV09fU0lERUQiLDEpLHZCPW5ldyBrc2UoIk9GRiIsMil9ZnVuY3Rpb24gZmNlKCl7ZmNlPVUsYk9lPW5ldyBXM2UoIkVRVUFMX0JFVFdFRU5fU1RSVUNUVVJFUyIsMCksbU9lPW5ldyBXM2UoIlRPX0FTUEVDVF9SQVRJTyIsMSl9ZnVuY3Rpb24gS2Z0KCl7S2Z0PVUsSmt0PUtyKChwMigpLGhlKGxlKHBEZSwxKSxpdCwyNjUsMCxbZ2RlLGZEZSxkRGUsZGRlLGhEZSxnRGUsQ1csV1QsWVRdKSkpfWZ1bmN0aW9uIFdmdCgpe1dmdD1VLGxfdD1LcigoWmwoKSxoZShsZShlUGUsMSksaXQsMjY0LDAsW2FDLGFGLHVZLEZNLGxZLGZZLGhZLEdnZSxzRl0pKSl9ZnVuY3Rpb24gWWZ0KCl7WWZ0PVUsZV90PUtyKChxeSgpLGhlKGxlKEtvLDEpLGl0LDk1LDAsW0UwLG1wLFQwLFMwLEVnLHFmLGpoLEMwLHpmXSkpKX1mdW5jdGlvbiBYZnQoKXtYZnQ9VSxWNnQ9S3IoKFBVKCksaGUobGUoJF9lLDEpLGl0LDI1NywwLFtqX2UsUF9lLEJfZSxOX2UsejBlLFJfZSxGX2UsT19lLElfZV0pKSl9ZnVuY3Rpb24gQTdlKGUpe3ZhciB0O3JldHVybiB0PWwoUShlLChmdCgpLFdjKSksNjQpLGUuaz09KFpuKCksVXMpJiYodD09KEN0KCksZXIpfHx0PT1hcil9ZnVuY3Rpb24gejNuKGUsdCxuKXt2YXIgcixhO2E9bChRKGUsKE50KCksY2MpKSw3NSksYSYmKHI9bmV3IGJsLEFjZShyLDAsYSksRHkocixuKSxLYSh0LHIpKX1mdW5jdGlvbiBEVihlLHQsbil7dmFyIHIsYSxvLGY7Zj1lbyhlKSxyPWYuZCxhPWYuYyxvPWUubix0JiYoby5hPW8uYS1yLmItYS5hKSxuJiYoby5iPW8uYi1yLmQtYS5iKX1mdW5jdGlvbiBxM24oZSx0KXt2YXIgbixyO3JldHVybiBuPWUuZi5jLmxlbmd0aCxyPXQuZi5jLmxlbmd0aCxuPHI/LTE6bj09cj8wOjF9ZnVuY3Rpb24gSDNuKGUpe3JldHVybiBlLmIuYy5sZW5ndGghPTAmJmwoanQoZS5iLDApLDcyKS5hP2woanQoZS5iLDApLDcyKS5hOlFhZShlKX1mdW5jdGlvbiBWM24oZSl7dmFyIHQ7aWYoZSl7aWYodD1lLHQuZGMoKSl0aHJvdyB1ZShuZXcgX2MpO3JldHVybiB0LlhiKHQuZ2MoKS0xKX1yZXR1cm4gTm90KGUuS2MoKSl9ZnVuY3Rpb24gUWZ0KGUpe3ZhciB0O3JldHVybiBpdShlLDApPDAmJihlPU80ZShlKSksdD1Zcih1YihlLDMyKSksNjQtKHQhPTA/clAodCk6clAoWXIoZSkpKzMyKX1mdW5jdGlvbiBVM24oKXtyZXR1cm4gVUgoKSxHMT9uZXcgU29lKG51bGwpOnAydChDM24oKSwiY29tLmdvb2dsZS5jb21tb24uYmFzZS5TdHJpbmdzIil9ZnVuY3Rpb24gZGNlKGUsdCxuLHIpe3JldHVybiBuPT0xPyghZS5uJiYoZS5uPW5ldyBudChlYyxlLDEsNykpLFRvKGUubix0LHIpKTpXeGUoZSx0LG4scil9ZnVuY3Rpb24ga04oZSx0KXt2YXIgbixyO3JldHVybiByPShuPW5ldyBQUyxuKSxGdShyLHQpLHFyKCghZS5BJiYoZS5BPW5ldyBtbChadSxlLDcpKSxlLkEpLHIpLHJ9ZnVuY3Rpb24gRzNuKGUsdCxuKXt2YXIgcixhLG8sZjtyZXR1cm4gbz1udWxsLGY9dCxhPUF3KGYsV2ZlKSxyPW5ldyBwdHQoZSxuKSxvPShFOG4oci5hLHIuYixhKSxhKSxvfWZ1bmN0aW9uIGdjZShlKXt2YXIgdDtyZXR1cm4oIWUuYXx8IShlLkJiJjEpJiZlLmEuVmgoKSkmJih0PU9mKGUpLERlKHQsMTU2KSYmKGUuYT1sKHQsMTU2KSkpLGUuYX1mdW5jdGlvbiBFTihlLHQpe3ZhciBuLHI7Zm9yKG5yKHQpLHI9dC5LYygpO3IuT2IoKTspaWYobj1yLlBiKCksIWUuSGMobikpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gSzNuKGUsdCl7dmFyIG4scixhO3JldHVybiBuPWUubCt0Lmwscj1lLm0rdC5tKyhuPj4yMiksYT1lLmgrdC5oKyhyPj4yMikscXUobiZlaCxyJmVoLGEmaHApfWZ1bmN0aW9uIEpmdChlLHQpe3ZhciBuLHIsYTtyZXR1cm4gbj1lLmwtdC5sLHI9ZS5tLXQubSsobj4+MjIpLGE9ZS5oLXQuaCsocj4+MjIpLHF1KG4mZWgsciZlaCxhJmhwKX1mdW5jdGlvbiBXM24oZSl7dmFyIHQsbjtmb3IoekRuKGUpLG49bmV3IEcoZS5kKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTA1KSx0LmkmJkI5bih0KX1mdW5jdGlvbiBicyhlKXt2YXIgdDtyZXR1cm4gRGUoZSw4Mik/ZToodD1lJiZlLl9famF2YSRleGNlcHRpb24sdHx8KHQ9bmV3IFUwdChlKSxEUWUodCkpLHQpfWZ1bmN0aW9uIFROKGUpe2lmKERlKGUsMTkzKSlyZXR1cm4gbChlLDEyMyk7aWYoZSlyZXR1cm4gbnVsbDt0aHJvdyB1ZShuZXcgRDgoVDR0KSl9ZnVuY3Rpb24gTDdlKGUpe3JldHVybiBlLmEuT2IoKT8hMDplLmEhPWUuZT8hMTooZS5hPW5ldyBPNmUoZS5mLmYpLGUuYS5PYigpKX1mdW5jdGlvbiBaZnQoZSx0KXtpZih0PT1udWxsKXJldHVybiExO2Zvcig7ZS5hIT1lLmI7KWlmKFBpKHQsRlYoZSkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGUwdChlLHQpe3JldHVybiFlfHwhdHx8ZT09dD8hMTokMXQoZS5kLmMsdC5kLmMrdC5kLmIpJiYkMXQodC5kLmMsZS5kLmMrZS5kLmIpfWZ1bmN0aW9uIHJhKGUsdCl7dmFyIG4scjtyZXR1cm4gbj10LlBjKCkscj1uLmxlbmd0aCxyPT0wPyExOihNNGUoZS5jLGUuYy5sZW5ndGgsbiksITApfWZ1bmN0aW9uIFkzbihlLHQsbil7dmFyIHIsYTtmb3IoYT10LnZjKCkuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksNDQpLGUueWMoci5sZCgpLHIubWQoKSxuKTtyZXR1cm4gZX1mdW5jdGlvbiBwY2UoZSl7dmFyIHQsbixyO2Zvcih0PW5ldyBvcyxyPVJyKGUuZCwwKTtyLmIhPXIuZC5jOyluPWwoQnIociksNjUpLHVpKHQsbi5jKTtyZXR1cm4gdH1mdW5jdGlvbiB0MHQoZSx0KXt2YXIgbixyO2ZvcihyPW5ldyBHKGUuYik7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDcyKSxydChuLChmdCgpLFl4KSx0KX1mdW5jdGlvbiBYM24oZSx0LG4pe3ZhciByLGE7Zm9yKGE9bmV3IEcoZS5iKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMjcpLFFoKHIsci5pK3Qsci5qK24pfWZ1bmN0aW9uIG4wdChlLHQpe2lmKCFlKXRocm93IHVlKG5ldyBZbihLQSgidmFsdWUgYWxyZWFkeSBwcmVzZW50OiAlcyIsaGUobGUod2EsMSksUm4sMSw1LFt0XSkpKSl9ZnVuY3Rpb24gUTNuKGUsdCxuLHIsYSl7cmV0dXJuIGg2KCksYi5NYXRoLm1pbihNdnQoZSx0LG4scixhKSxNdnQobixyLGUsdCxIcShuZXcgbHQoYS5hLGEuYikpKSl9ZnVuY3Rpb24gSjNuKGUsdCxuLHIpe2wobi5iLDY4KSxsKG4uYiw2OCksbChyLmIsNjgpLGwoci5iLDY4KSxsKHIuYiw2OCksVnUoci5hLG5ldyB4NGUoZSx0LHIpKX1mdW5jdGlvbiBaM24oZSx0KXtlLmQ9PShKcygpLHVjKXx8ZS5kPT13Zj9sKHQuYSw2MCkuYy5GYyhsKHQuYiw2MCkpOmwodC5iLDYwKS5jLkZjKGwodC5hLDYwKSl9ZnVuY3Rpb24gcjB0KGUsdCl7dmFyIG47cmV0dXJuIG49ZWcodC5hLmdjKCkpLElzKGxWKG5ldyBibihudWxsLG5ldyBrbih0LDEpKSxlLmkpLG5ldyBvdHQoZSxuKSksbn1mdW5jdGlvbiBpMHQoZSl7dmFyIHQsbjtyZXR1cm4gbj0odD1uZXcgUFMsdCksRnUobiwiVCIpLHFyKCghZS5kJiYoZS5kPW5ldyBtbChadSxlLDExKSksZS5kKSxuKSxufWZ1bmN0aW9uIE03ZShlKXt2YXIgdCxuLHIsYTtmb3IodD0xLG49MCxhPWUuZ2MoKTtuPGE7KytuKXI9ZS5WaShuKSx0PTMxKnQrKHI9PW51bGw/MDplcyhyKSk7cmV0dXJuIHR9ZnVuY3Rpb24gczB0KGUsdCxuLHIpe3ZhciBhO3JldHVybiBaTyh0LGUuZS5SZCgpLmdjKCkpLFpPKG4sZS5jLlJkKCkuZ2MoKSksYT1lLmFbdF1bbl0sVHMoZS5hW3RdLG4sciksYX1mdW5jdGlvbiBoZShlLHQsbixyLGEpe3JldHVybiBhLlJtPWUsYS5TbT10LGEuVG09eGUsYS5fX2VsZW1lbnRUeXBlSWQkPW4sYS5fX2VsZW1lbnRUeXBlQ2F0ZWdvcnkkPXIsYX1mdW5jdGlvbiBJVigpe0lWPVUscDFlPW5ldyBncShJZCwwKSxISz1uZXcgZ3EoVTN0LDEpLFZLPW5ldyBncShHM3QsMikscEI9bmV3IGdxKCJCT1RIIiwzKX1mdW5jdGlvbiBSMSgpe1IxPVUsVng9bmV3IHBxKGNULDApLE1UPW5ldyBwcShNeCwxKSxEVD1uZXcgcHEoRHgsMiksYjFlPW5ldyBwcSgiVE9QIiwzKX1mdW5jdGlvbiB3RSgpe3dFPVUsczM9bmV3IGZxKCJRMSIsMCksbzQ9bmV3IGZxKCJRNCIsMSksYTQ9bmV3IGZxKCJRMiIsMiksTTY9bmV3IGZxKCJRMyIsMyl9ZnVuY3Rpb24gT1YoKXtPVj1VLExkZT1uZXcgTXNlKCJPRkYiLDApLFhUPW5ldyBNc2UoIlNJTkdMRV9FREdFIiwxKSxrND1uZXcgTXNlKCJNVUxUSV9FREdFIiwyKX1mdW5jdGlvbiBDTigpe0NOPVUsWlc9bmV3IFgzZSgiTUlOSU1VTV9TUEFOTklOR19UUkVFIiwwKSx6T2U9bmV3IFgzZSgiTUFYSU1VTV9TUEFOTklOR19UUkVFIiwxKX1mdW5jdGlvbiBoeCgpe2h4PVUsZ1N0PW5ldyBleSxkU3Q9bmV3IE5uZX1mdW5jdGlvbiBEN2UoZSl7dmFyIHQsbjtyZXR1cm4gbj0ocmIoKSx0PW5ldyByayx0KSxlJiZxcigoIWUuYSYmKGUuYT1uZXcgbnQoY3MsZSw2LDYpKSxlLmEpLG4pLG59ZnVuY3Rpb24gYmNlKGUpe3ZhciB0LG4scixhO2ZvcihhPW5ldyBidCxyPWUuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksMjcpLHQ9SHkobikscmEoYSx0KTtyZXR1cm4gYX1mdW5jdGlvbiBleW4oZSx0KXt2YXIgbixyO2ZvcihfSCh0LCJwcmVkaWNhdGUiKSxyPTA7ZS5PYigpO3IrKylpZihuPWUuUGIoKSx0LkxiKG4pKXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIGZ4KGUsdCl7dmFyIG4scjtpZihyPTAsZTw2NCYmZTw9dClmb3IodD10PDY0P3Q6NjMsbj1lO248PXQ7bisrKXI9UTAocixsMCgxLG4pKTtyZXR1cm4gcn1mdW5jdGlvbiB0eW4oZSx0KXt2YXIgbixyO3JldHVybiBuPWUuYyxyPXQuZVtlLnBdLHI8bi5hLmMubGVuZ3RoLTE/bChqdChuLmEscisxKSwxMCk6bnVsbH1mdW5jdGlvbiBJN2UoZSl7Q24oKTt2YXIgdCxuLHI7Zm9yKHI9MCxuPWUuS2MoKTtuLk9iKCk7KXQ9bi5QYigpLHI9cisodCE9bnVsbD9lcyh0KTowKSxyPXJ8MDtyZXR1cm4gcn1mdW5jdGlvbiBueW4oZSl7dmFyIHQsbixyO3JldHVybiB0PWwoZS5lJiZlLmUoKSw5KSxyPShuPXQuc2xpY2UoKSxsKGpvZShuLHQpLDkpKSxuZXcgWmgodCxyLHQubGVuZ3RoKX1mdW5jdGlvbiBhMHQoZSx0LG4pe3ZhciByO05sKGUuYSksVnUobi5pLG5ldyBfWGUoZSkpLHI9bmV3IE5xKGwoY3IoZS5hLHQuYiksNjgpKSxYMXQoZSxyLHQpLG4uZj1yfWZ1bmN0aW9uIHJ5bihlKXt2YXIgdDtVdyhlLCEwKSx0PWIyLG5zKGUsKE50KCksVVQpKSYmKHQrPWwoUShlLFVUKSwxNykuYSkscnQoZSxVVCxwdCh0KSl9ZnVuY3Rpb24gaXluKGUpe3ZhciB0O3JldHVybiB0PW5ldyBYLHQuYT1lLHQuYj1neW4oZSksdC5jPVdlKHp0LGR0LDIsMiw2LDEpLHQuY1swXT15ZnQoZSksdC5jWzFdPXlmdChlKSx0fWZ1bmN0aW9uIG8wdChlKXt2YXIgdCxuLHI7cmV0dXJuIG49ZS5uLHI9ZS5vLHQ9ZS5kLG5ldyBlZihuLmEtdC5iLG4uYi10LmQsci5hKyh0LmIrdC5jKSxyLmIrKHQuZCt0LmEpKX1mdW5jdGlvbiBzeW4oZSx0KXtyZXR1cm4hZXx8IXR8fGU9PXQ/ITE6RncoZS5iLmMsdC5iLmMrdC5iLmIpPDAmJkZ3KHQuYi5jLGUuYi5jK2UuYi5iKTwwfWZ1bmN0aW9uIGMwdChlKXtzd2l0Y2goZS5nKXtjYXNlIDE6cmV0dXJuIEdiO2Nhc2UgMjpyZXR1cm4ga2c7Y2FzZSAzOnJldHVybiBaQjtkZWZhdWx0OnJldHVybiBlRn19ZnVuY3Rpb24gYXluKGUpe3N3aXRjaChsKFEoZSwoTnQoKSxRdSkpLDE3MSkuZyl7Y2FzZSAyOmNhc2UgNDpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBTTihlLHQsbil7c3dpdGNoKG4uZyl7Y2FzZSAyOmUuYj10O2JyZWFrO2Nhc2UgMTplLmM9dDticmVhaztjYXNlIDQ6ZS5kPXQ7YnJlYWs7Y2FzZSAzOmUuYT10fX1mdW5jdGlvbiBPN2UoZSx0KXtzd2l0Y2godCl7Y2FzZSAwOiFlLm8mJihlLm89bmV3IHhsKChzdSgpLENnKSxMMixlLDApKSxlLm8uYy4kYigpO3JldHVybn1GdWUoZSx0KX1mdW5jdGlvbiBveW4oZSx0KXt2YXIgbixyO3JldHVybiBuPWwobChjcihlLmcsdC5hKSw0MikuYSw2OCkscj1sKGwoY3IoZS5nLHQuYiksNDIpLmEsNjgpLEJtdChuLHIpfWZ1bmN0aW9uIE43ZShlLHQsbil7dmFyIHI7aWYocj1lLmdjKCksdD5yKXRocm93IHVlKG5ldyBteSh0LHIpKTtyZXR1cm4gZS5TaSgpJiYobj1ib3QoZSxuKSksZS5FaSh0LG4pfWZ1bmN0aW9uIHlFKGUsdCxuLHIsYSl7dmFyIG8sZjtmb3IoZj1uO2Y8PWE7ZisrKWZvcihvPXQ7bzw9cjtvKyspcjYoZSxvLGYpfHxGVShlLG8sZiwhMCwhMSl9ZnVuY3Rpb24gY3luKGUpe2g2KCk7dmFyIHQsbixyO2ZvcihuPVdlKEVhLGR0LDgsMiwwLDEpLHI9MCx0PTA7dDwyO3QrKylyKz0uNSxuW3RdPXQ3bihyLGUpO3JldHVybiBufWZ1bmN0aW9uIHhFKGUpe3ZhciB0LG4scjtyZXR1cm4gdD1+ZS5sKzEmZWgsbj1+ZS5tKyh0PT0wPzE6MCkmZWgscj1+ZS5oKyh0PT0wJiZuPT0wPzE6MCkmaHAscXUodCxuLHIpfWZ1bmN0aW9uIFA3ZShlKXt2YXIgdDtpZihlPDApcmV0dXJuIGxvO2lmKGU9PTApcmV0dXJuIDA7Zm9yKHQ9ckw7ISh0JmUpO3Q+Pj0xKTtyZXR1cm4gdH1mdW5jdGlvbiBtY2UoZSx0LG4pe3JldHVybiBlPj0xMjg/ITE6ZTw2ND9JXyh2YShsMCgxLGUpLG4pLDApOklfKHZhKGwwKDEsZS02NCksdCksMCl9ZnVuY3Rpb24gX04oZSx0LG4pe3JldHVybiBuPT1udWxsPyghZS5xJiYoZS5xPW5ldyBQciksYXgoZS5xLHQpKTooIWUucSYmKGUucT1uZXcgUHIpLGtpKGUucSx0LG4pKSxlfWZ1bmN0aW9uIHJ0KGUsdCxuKXtyZXR1cm4gbj09bnVsbD8oIWUucSYmKGUucT1uZXcgUHIpLGF4KGUucSx0KSk6KCFlLnEmJihlLnE9bmV3IFByKSxraShlLnEsdCxuKSksZX1mdW5jdGlvbiB1MHQoZSl7dmFyIHQsbjtyZXR1cm4gbj1uZXcgS0gscGMobixlKSxydChuLChiYigpLEh4KSxlKSx0PW5ldyBQcixGQW4oZSxuLHQpLGhEbihlLG4sdCksbn1mdW5jdGlvbiBsMHQoZSl7dmFyIHQsbjtyZXR1cm4gdD1lLnQtZS5rW2Uuby5wXSplLmQrZS5qW2Uuby5wXT5lLmYsbj1lLnUrZS5lW2Uuby5wXSplLmQ+ZS5mKmUucyplLmQsdHx8bn1mdW5jdGlvbiBoMHQoZSx0KXt2YXIgbixyLGEsbztmb3Iobj0hMSxyPWUuYVt0XS5sZW5ndGgsbz0wO288ci0xO28rKylhPW8rMSxuPW58UDVuKGUsdCxvLGEpO3JldHVybiBufWZ1bmN0aW9uIHV5bihlKXt2YXIgdCxuLHIsYTtmb3Iobj1lLmEscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0sdjB0KGUsdCwoQ3QoKSxEcikpLHYwdChlLHQsUW4pfWZ1bmN0aW9uIGYwdCgpe2YwdD1VLEV4dD1LcigoSG8oKSxoZShsZShGMWUsMSksaXQsMjU5LDAsW2VXLHZmLFVMLHRXLCRULEI2LEdMLFJULGpULG5XXSkpKX1mdW5jdGlvbiBkMHQoKXtkMHQ9VSxuRXQ9S3IoKE5mKCksaGUobGUoVERlLDEpLGl0LDI0MywwLFtBVyxBQixMQix4RGUsa0RlLHlEZSxFRGUsTFcsdjMseDRdKSkpfWZ1bmN0aW9uIFZtKCl7Vm09VSxNMWU9bmV3IHhzZShJZCwwKSxGVD1uZXcgeHNlKCJJTkNPTUlOR19PTkxZIiwxKSxQNj1uZXcgeHNlKCJPVVRHT0lOR19PTkxZIiwyKX1mdW5jdGlvbiB2Y2UoKXt2Y2U9VSxfMGU9e2Jvb2xlYW46VXVuLG51bWJlcjpzdW4sc3RyaW5nOmF1bixvYmplY3Q6SXB0LGZ1bmN0aW9uOklwdCx1bmRlZmluZWQ6amNufX1mdW5jdGlvbiBCN2UoKXt0aGlzLm89bnVsbCx0aGlzLms9bnVsbCx0aGlzLmo9bnVsbCx0aGlzLmQ9bnVsbCx0aGlzLmI9bnVsbCx0aGlzLm49bnVsbCx0aGlzLmE9bnVsbH1mdW5jdGlvbiBGN2UoZSx0KXt0aGlzLmM9ZSx0aGlzLmQ9dCx0aGlzLmI9dGhpcy5kL3RoaXMuYy5jLlJkKCkuZ2MoKXwwLHRoaXMuYT10aGlzLmQldGhpcy5jLmMuUmQoKS5nYygpfWZ1bmN0aW9uIGcwdChlLHQpe3RoaXMuYj1lLE41LmNhbGwodGhpcywobChPZSh0dCgobGIoKSxWbikubyksMTApLDE5KSx0LmkpLHQuZyksdGhpcy5hPShsY2UoKSxucGUpfWZ1bmN0aW9uIFI3ZShlLHQsbil7dGhpcy5xPW5ldyBiLkRhdGUsdGhpcy5xLnNldEZ1bGxZZWFyKGUrTGIsdCxuKSx0aGlzLnEuc2V0SG91cnMoMCwwLDAsMCksWEEodGhpcywwKX1mdW5jdGlvbiBwMHQoZSx0KXtCTyhlPj0wLCJOZWdhdGl2ZSBpbml0aWFsIGNhcGFjaXR5IiksQk8odD49MCwiTm9uLXBvc2l0aXZlIGxvYWQgZmFjdG9yIiksTmwodGhpcyl9ZnVuY3Rpb24gbHluKGUsdCxuLHIsYSl7dmFyIG8sZjtpZihmPWUubGVuZ3RoLG89bi5sZW5ndGgsdDwwfHxyPDB8fGE8MHx8dCthPmZ8fHIrYT5vKXRocm93IHVlKG5ldyBfd2UpfWZ1bmN0aW9uIGo3ZShlLHQpe0NuKCk7dmFyIG4scixhLG8sZjtmb3IoZj0hMSxyPXQsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sZj1mfGUuRmMobik7cmV0dXJuIGZ9ZnVuY3Rpb24gYjB0KGUsdCxuKXt2YXIgcixhO3JldHVybiByPW5ldyBCb2UodCxuKSxhPW5ldyB4dCxlLmI9eGJ0KGUsZS5iLHIsYSksYS5ifHwrK2UuYyxlLmIuYj0hMSxhLmR9ZnVuY3Rpb24gd0EoZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5hW2UuYl0sdD09bnVsbD9udWxsOihUcyhlLmEsZS5iLG51bGwpLGUuYj1lLmIrMSZlLmEubGVuZ3RoLTEsdCl9ZnVuY3Rpb24gbTB0KGUpe3ZhciB0LG47cmV0dXJuIG49clAoZS5oKSxuPT0zMj8odD1yUChlLm0pLHQ9PTMyP3JQKGUubCkrMzI6dCsyMC0xMCk6bi0xMn1mdW5jdGlvbiAkN2UoZSl7dmFyIHQ7cmV0dXJuKCFlLmN8fCEoZS5CYiYxKSYmZS5jLkRiJjY0KSYmKHQ9T2YoZSksRGUodCw5MCkmJihlLmM9bCh0LDI5KSkpLGUuY31mdW5jdGlvbiB2YihlKXt2YXIgdCxuO2ZvcihuPW5ldyBHKGUuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksNjApLHQuZC5jPS10LmQuYy10LmQuYjtWOWUoZSl9ZnVuY3Rpb24gd2IoZSl7dmFyIHQsbjtmb3Iobj1uZXcgRyhlLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDg2KSx0LmcuYz0tdC5nLmMtdC5nLmI7TVUoZSl9ZnVuY3Rpb24gdjB0KGUsdCxuKXt2YXIgcixhLG8sZjtmb3IoZj1UQSh0LG4pLG89MCxhPWYuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTIpLGtpKGUuYyxyLHB0KG8rKykpfWZ1bmN0aW9uIHcwdChlLHQsbil7dmFyIHI7cmV0dXJuIHI9bmV3IGJ0LFc5ZShlLHQsciwoQ3QoKSxhciksITAsITEpLFc5ZShlLG4scixlciwhMSwhMSkscn1mdW5jdGlvbiBJYyhlKXt2YXIgdCxuLHIsYSxvO2Zvcih0PW5ldyBxYSxyPWUsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sdC5hKz1uLmEsdC5iKz1uLmI7cmV0dXJuIHR9ZnVuY3Rpb24gd2NlKGUsdCxuKXt2YXIgcixhLG8sZjtyZXR1cm4gbz1udWxsLGY9dCxhPUF3KGYsImxhYmVscyIpLHI9bmV3IEN0dChlLG4pLG89KEtFbihyLmEsci5iLGEpLGEpLG99ZnVuY3Rpb24gaHluKGUsdCxuLHIpe3ZhciBhO3JldHVybiBhPVA5ZShlLHQsbixyKSwhYSYmKGE9dzRuKGUsbixyKSxhJiYhZzYoZSx0LGEpKT9udWxsOmF9ZnVuY3Rpb24gZnluKGUsdCxuLHIpe3ZhciBhO3JldHVybiBhPUI5ZShlLHQsbixyKSwhYSYmKGE9QmNlKGUsbixyKSxhJiYhZzYoZSx0LGEpKT9udWxsOmF9ZnVuY3Rpb24gZHluKGUsdCxuKXtpZihYcih0KSxuLk9iKCkpZm9yKG55ZSh0LGFhdChuLlBiKCkpKTtuLk9iKCk7KW55ZSh0LGUuYSksbnllKHQsYWF0KG4uUGIoKSkpO3JldHVybiB0fWZ1bmN0aW9uIHkwdChlLHQpe3ZhciBuO2ZvcihuPTA7bjxlLmEuYS5sZW5ndGg7bisrKWlmKCFsKEppdChlLmEsbiksMTc4KS5MYih0KSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBneW4oZSl7dmFyIHQ7cmV0dXJuIGU9PTA/IkV0Yy9HTVQiOihlPDA/KGU9LWUsdD0iRXRjL0dNVC0iKTp0PSJFdGMvR01UKyIsdCtKbHQoZSkpfWZ1bmN0aW9uIHo3ZShlKXt2YXIgdDtyZXR1cm4gZS5iPD0wPyExOih0PXBkKCJNTHlkaEhtc1NEa0siLGNsKGNvKGUuYywwKSkpLHQ+MXx8dD49MCYmZS5iPDMpfWZ1bmN0aW9uIHljZShlKXt2YXIgdCxuLHI7dD1+ZS5sKzEmZWgsbj1+ZS5tKyh0PT0wPzE6MCkmZWgscj1+ZS5oKyh0PT0wJiZuPT0wPzE6MCkmaHAsZS5sPXQsZS5tPW4sZS5oPXJ9ZnVuY3Rpb24gcTdlKGUpe0NuKCk7dmFyIHQsbixyO2ZvcihyPTEsbj1lLktjKCk7bi5PYigpOyl0PW4uUGIoKSxyPTMxKnIrKHQhPW51bGw/ZXModCk6MCkscj1yfDA7cmV0dXJuIHJ9ZnVuY3Rpb24gcHluKGUsdCxuLHIsYSl7dmFyIG87cmV0dXJuIG89RDllKGUsdCksbiYmeWNlKG8pLGEmJihlPWM3bihlLHQpLHI/TmI9eEUoZSk6TmI9cXUoZS5sLGUubSxlLmgpKSxvfWZ1bmN0aW9uIHgwdChlLHQsbil7ZS5nPVJ1ZShlLHQsKEN0KCksYXIpLGUuYiksZS5kPVJ1ZShlLG4sYXIsZS5iKSwhKGUuZy5jPT0wfHxlLmQuYz09MCkmJkpndChlKX1mdW5jdGlvbiBrMHQoZSx0LG4pe2UuZz1SdWUoZSx0LChDdCgpLGVyKSxlLmopLGUuZD1SdWUoZSxuLGVyLGUuaiksIShlLmcuYz09MHx8ZS5kLmM9PTApJiZKZ3QoZSl9ZnVuY3Rpb24gSDdlKGUsdCl7c3dpdGNoKHQpe2Nhc2UgNzpyZXR1cm4hIWUuZSYmZS5lLmkhPTA7Y2FzZSA4OnJldHVybiEhZS5kJiZlLmQuaSE9MH1yZXR1cm4gXzhlKGUsdCl9ZnVuY3Rpb24gYnluKGUsdCl7c3dpdGNoKHQuZyl7Y2FzZSAwOkRlKGUuYiw2NDEpfHwoZS5iPW5ldyBqZnQpO2JyZWFrO2Nhc2UgMTpEZShlLmIsNjQyKXx8KGUuYj1uZXcgUml0KX19ZnVuY3Rpb24gRTB0KGUpe3N3aXRjaChlLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IE9uZTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbihGRysoZS5mIT1udWxsP2UuZjoiIitlLmcpKSl9fWZ1bmN0aW9uIFQwdChlKXtzd2l0Y2goZS5nKXtjYXNlIDA6cmV0dXJuIG5ldyBnbDtkZWZhdWx0OnRocm93IHVlKG5ldyBZbihGRysoZS5mIT1udWxsP2UuZjoiIitlLmcpKSl9fWZ1bmN0aW9uIG15bihlLHQsbil7cmV0dXJuIV9rKEZpKG5ldyBibihudWxsLG5ldyBrbihlLmMsMTYpKSxuZXcgV2wobmV3IGx0dCh0LG4pKSkpLkJkKChBbSgpLHp4KSl9ZnVuY3Rpb24gQzB0KGUsdCl7cmV0dXJuIHo4KEJFKGwoUSh0LChIYygpLHkzKSksODgpKSxuZXcgbHQoZS5jLmUuYS1lLmIuZS5hLGUuYy5lLmItZS5iLmUuYikpPD0wfWZ1bmN0aW9uIHZ5bihlLHQpe2Zvcig7ZS5nPT1udWxsJiYhZS5jP0g1ZShlKTplLmc9PW51bGx8fGUuaSE9MCYmbChlLmdbZS5pLTFdLDUxKS5PYigpOylrbG4odCxDVShlKSl9ZnVuY3Rpb24gVW0oZSl7dmFyIHQsbjtmb3Iobj1uZXcgRyhlLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDg2KSx0LmYuJGIoKTtldW4oZS5iLGUpLGFidChlKX1mdW5jdGlvbiBBTihlKXt2YXIgdCxuLHI7Zm9yKHQ9bmV3IGJsLHI9UnIoZSwwKTtyLmIhPXIuZC5jOyluPWwoQnIociksOCksUGsodCwwLG5ldyBFbyhuKSk7cmV0dXJuIHR9ZnVuY3Rpb24ga0UoZSl7dmFyIHQ7cmV0dXJuIGZiKGUpLHQ9bmV3IG9uLGUuYS5CZCh0KT8oT2soKSxuZXcgS2llKG5yKHQuYSkpKTooT2soKSxPaygpLGJfZSl9ZnVuY3Rpb24gVjdlKGUsdCxuKXtzd2l0Y2godCl7Y2FzZSAwOiFlLm8mJihlLm89bmV3IHhsKChzdSgpLENnKSxMMixlLDApKSxfVihlLm8sbik7cmV0dXJufSR1ZShlLHQsbil9ZnVuY3Rpb24geGNlKGUsdCxuKXt0aGlzLmc9ZSx0aGlzLmU9bmV3IHFhLHRoaXMuZj1uZXcgcWEsdGhpcy5kPW5ldyBvcyx0aGlzLmI9bmV3IG9zLHRoaXMuYT10LHRoaXMuYz1ufWZ1bmN0aW9uIGtjZShlLHQsbixyKXt0aGlzLmI9bmV3IGJ0LHRoaXMubj1uZXcgYnQsdGhpcy5pPXIsdGhpcy5qPW4sdGhpcy5zPWUsdGhpcy50PXQsdGhpcy5yPTAsdGhpcy5kPTB9ZnVuY3Rpb24gRUUoZSx0KXtpZighZS5MaSgpJiZ0PT1udWxsKXRocm93IHVlKG5ldyBZbigiVGhlICdubyBudWxsJyBjb25zdHJhaW50IGlzIHZpb2xhdGVkIikpO3JldHVybiB0fWZ1bmN0aW9uIHMyKGUpe3ZhciB0LG47Zm9yKHQ9MCxuPTA7bjxlLmxlbmd0aDtuKyspdD0odDw8NSktdCsoWG4obixlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG4pKXwwO3JldHVybiB0fWZ1bmN0aW9uIFMwdChlLHQpe3ZhciBuLHIsYTtmb3IoYT1lLmI7YTspe2lmKG49ZS5hLk5lKHQsYS5kKSxuPT0wKXJldHVybiBhO3I9bjwwPzA6MSxhPWEuYVtyXX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB3eW4oZSx0LG4pe3ZhciByLGE7cj0oSG4oKSwhIXN5ZShuKSksYT1sKHQueGMociksMTUpLGF8fChhPW5ldyBidCx0LnpjKHIsYSkpLGEuRmMobil9ZnVuY3Rpb24geXluKGUsdCl7dmFyIG4scjtyZXR1cm4gbj1sKGF0KGUsKHoxKCksakIpKSwxNykuYSxyPWwoYXQodCxqQiksMTcpLmEsbj09cnx8bjxyPy0xOm4+cj8xOjB9ZnVuY3Rpb24geHluKGUpe3JldHVybiB2dChlLmMsKGh4KCksZ1N0KSksVzZlKGUuYSx6ZShHZShJdCgoR2NlKCksVFcpKSkpKT9uZXcgSG5lOm5ldyBPWGUoZSl9ZnVuY3Rpb24ga3luKGUpe2Zvcig7IWUuZHx8IWUuZC5PYigpOylpZihlLmImJiFsXyhlLmIpKWUuZD1sKFg4KGUuYiksNTEpO2Vsc2UgcmV0dXJuIG51bGw7cmV0dXJuIGUuZH1mdW5jdGlvbiBVN2UoZSl7c3dpdGNoKGUuZyl7Y2FzZSAxOnJldHVybiBoeXQ7ZGVmYXVsdDpjYXNlIDI6cmV0dXJuIDA7Y2FzZSAzOnJldHVybiBMaGU7Y2FzZSA0OnJldHVybiBsQ2V9fWZ1bmN0aW9uIEV5bigpe0RpKCk7dmFyIGU7cmV0dXJuIGNwZXx8KGU9SGhuKF9iKCJNIiwhMCkpLGU9b0goX2IoIk0iLCExKSxlKSxjcGU9ZSxjcGUpfWZ1bmN0aW9uIE5WKCl7TlY9VSxXZ2U9bmV3IENxKCJFTEsiLDApLGxQZT1uZXcgQ3EoIkpTT04iLDEpLHVQZT1uZXcgQ3EoIkRPVCIsMiksaFBlPW5ldyBDcSgiU1ZHIiwzKX1mdW5jdGlvbiB5QSgpe3lBPVUsU2RlPW5ldyBfc2UoIlNUQUNLRUQiLDApLENkZT1uZXcgX3NlKCJSRVZFUlNFX1NUQUNLRUQiLDEpLE1CPW5ldyBfc2UoIlNFUVVFTkNFRCIsMil9ZnVuY3Rpb24geEEoKXt4QT1VLFpEZT1uZXcgT3NlKElkLDApLElkZT1uZXcgT3NlKCJNSURETEVfVE9fTUlERExFIiwxKSxPQj1uZXcgT3NlKCJBVk9JRF9PVkVSTEFQIiwyKX1mdW5jdGlvbiBURSgpe1RFPVUsb0xlPW5ldyBNWixjTGU9bmV3IGxJLFg4dD1uZXcgeWosWTh0PW5ldyBEWixXOHQ9bmV3IG44LGFMZT0obnIoVzh0KSxuZXcga2UpfWZ1bmN0aW9uIFBWKCl7UFY9VSxXTmU9bmV3IGx3KDE1KSxYU3Q9bmV3IEhhKChwaSgpLF8yKSxXTmUpLE1NPW45LFZOZT1MU3QsVU5lPWt2LEtOZT1pNyxHTmU9QzR9ZnVuY3Rpb24gUTUoZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihyPXQsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sZj1uZXcgSnN0KGUpLG4uaGYoZiksWEFuKGYpO05sKGUuZil9ZnVuY3Rpb24gRWNlKGUsdCl7dmFyIG47cmV0dXJuIHQ9PT1lPyEwOkRlKHQsMjI5KT8obj1sKHQsMjI5KSxQaShlLlpiKCksbi5aYigpKSk6ITF9ZnVuY3Rpb24gRzdlKGUsdCl7cmV0dXJuIG5idChlLHQpPyh4bihlLmIsbChRKHQsKGZ0KCkscHApKSwyMSksdCksdWkoZS5hLHQpLCEwKTohMX1mdW5jdGlvbiBUeW4oZSl7dmFyIHQsbjt0PWwoUShlLChmdCgpLGpsKSksMTApLHQmJihuPXQuYyxhbChuLmEsdCksbi5hLmMubGVuZ3RoPT0wJiZhbChlbyh0KS5iLG4pKX1mdW5jdGlvbiBDeW4oZSx0KXtyZXR1cm4gbnMoZSwoZnQoKSxLaSkpJiZucyh0LEtpKT9sKFEodCxLaSksMTcpLmEtbChRKGUsS2kpLDE3KS5hOjB9ZnVuY3Rpb24gU3luKGUsdCl7cmV0dXJuIG5zKGUsKGZ0KCksS2kpKSYmbnModCxLaSk/bChRKGUsS2kpLDE3KS5hLWwoUSh0LEtpKSwxNykuYTowfWZ1bmN0aW9uIF8wdChlKXtyZXR1cm4gRzE/V2UoRDZ0LFh3dCw1ODEsMCwwLDEpOmwoajEoZS5hLFdlKEQ2dCxYd3QsNTgxLGUuYS5jLmxlbmd0aCwwLDEpKSw4NTYpfWZ1bmN0aW9uIF95bihlLHQsbixyKXtyZXR1cm4ga0goKSxuZXcgWXdlKGhlKGxlKHV2LDEpLFhVLDQ0LDAsWyhmdWUoZSx0KSxuZXcgaXcoZSx0KSksKGZ1ZShuLHIpLG5ldyBpdyhuLHIpKV0pKX1mdW5jdGlvbiBKNShlLHQsbil7dmFyIHIsYTtyZXR1cm4gYT0ocj1uZXcgcWllLHIpLEpvKGEsdCxuKSxxcigoIWUucSYmKGUucT1uZXcgbnQoVWYsZSwxMSwxMCkpLGUucSksYSksYX1mdW5jdGlvbiBUY2UoZSl7dmFyIHQsbixyLGE7Zm9yKGE9Y2xuKFNfdCxlKSxuPWEubGVuZ3RoLHI9V2UoenQsZHQsMixuLDYsMSksdD0wO3Q8bjsrK3Qpclt0XT1hW3RdO3JldHVybiByfWZ1bmN0aW9uIEs3ZShlLHQpe3ZhciBuO3QqMisxPj1lLmIuYy5sZW5ndGh8fChLN2UoZSwyKnQrMSksbj0yKnQrMixuPGUuYi5jLmxlbmd0aCYmSzdlKGUsbiksUHB0KGUsdCkpfWZ1bmN0aW9uIEF5bihlLHQpe3ZhciBuLHI7Zm9yKHI9UnIoZSwwKTtyLmIhPXIuZC5jOyluPWwoQnIociksMjE5KSxuLmUubGVuZ3RoPjAmJih0LkNkKG4pLG4uaSYmQzRuKG4pKX1mdW5jdGlvbiBXN2UoZSx0LG4pe3ZhciByO2ZvcihyPW4tMTtyPj0wJiZlW3JdPT09dFtyXTtyLS0pO3JldHVybiByPDA/MDpmc2UodmEoZVtyXSxWbyksdmEodFtyXSxWbykpPy0xOjF9ZnVuY3Rpb24gQTB0KGUsdCxuKXt2YXIgcixhO3RoaXMuZz1lLHRoaXMuYz10LHRoaXMuYT10aGlzLHRoaXMuZD10aGlzLGE9Y2Z0KG4pLHI9V2UoYzZ0LFRQLDIyNyxhLDAsMSksdGhpcy5iPXJ9ZnVuY3Rpb24gQ2NlKGUsdCxuLHIsYSl7dmFyIG8sZjtmb3IoZj1uO2Y8PWE7ZisrKWZvcihvPXQ7bzw9cjtvKyspaWYocjYoZSxvLGYpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEx5bihlLHQpe3ZhciBuLHI7Zm9yKHI9ZS5aYigpLkNjKCkuS2MoKTtyLk9iKCk7KWlmKG49bChyLlBiKCksMTYpLG4uSGModCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gTDB0KGUsdCxuKXt2YXIgcixhLG8sZjtmb3IobnIobiksZj0hMSxvPWUuZmQodCksYT1uLktjKCk7YS5PYigpOylyPWEuUGIoKSxvLlJiKHIpLGY9ITA7cmV0dXJuIGZ9ZnVuY3Rpb24gU2NlKGUsdCl7dmFyIG4scjtyZXR1cm4gcj1sKEtuKGUuYSw0KSwxMjkpLG49V2UoZXBlLHIwZSw0MjQsdCwwLDEpLHIhPW51bGwmJnB1KHIsMCxuLDAsci5sZW5ndGgpLG59ZnVuY3Rpb24gTTB0KGUsdCl7dmFyIG47cmV0dXJuIG49bmV3IGVsZSgoZS5mJjI1NikhPTAsZS5pLGUuYSxlLmQsKGUuZiYxNikhPTAsZS5qLGUuZyx0KSxlLmUhPW51bGx8fChuLmM9ZSksbn1mdW5jdGlvbiBNeW4oZSx0KXt2YXIgbjtyZXR1cm4gZT09PXQ/ITA6RGUodCw4NSk/KG49bCh0LDg1KSxReGUoTW0oZSksbi52YygpKSk6ITF9ZnVuY3Rpb24gRDB0KGUsdCxuKXt2YXIgcixhO2ZvcihhPW4uS2MoKTthLk9iKCk7KWlmKHI9bChhLlBiKCksNDQpLGUuQmUodCxyLm1kKCkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEkwdChlLHQsbil7cmV0dXJuIGUuZFt0LnBdW24ucF18fChPNm4oZSx0LG4pLGUuZFt0LnBdW24ucF09ITAsZS5kW24ucF1bdC5wXT0hMCksZS5hW3QucF1bbi5wXX1mdW5jdGlvbiBEeW4oZSx0KXt2YXIgbjtyZXR1cm4hZXx8ZT09dHx8IW5zKHQsKGZ0KCksdTMpKT8hMToobj1sKFEodCwoZnQoKSx1MykpLDEwKSxuIT1lKX1mdW5jdGlvbiBfY2UoZSl7c3dpdGNoKGUuaSl7Y2FzZSAyOnJldHVybiEwO2Nhc2UgMTpyZXR1cm4hMTtjYXNlLTE6KytlLmM7ZGVmYXVsdDpyZXR1cm4gZS4kbCgpfX1mdW5jdGlvbiBPMHQoZSl7c3dpdGNoKGUuaSl7Y2FzZS0yOnJldHVybiEwO2Nhc2UtMTpyZXR1cm4hMTtjYXNlIDE6LS1lLmM7ZGVmYXVsdDpyZXR1cm4gZS5fbCgpfX1mdW5jdGlvbiBOMHQoZSl7eG90LmNhbGwodGhpcywiVGhlIGdpdmVuIHN0cmluZyBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0IGZvciBpbmRpdmlkdWFsIHNwYWNpbmdzLiIsZSl9ZnVuY3Rpb24gSXluKGUsdCl7dmFyIG47dC5VZygiTWluIFNpemUgUHJlcHJvY2Vzc2luZyIsMSksbj1hOWUoZSksSGkoZSwodWcoKSxtTSksbi5hKSxIaShlLFVXLG4uYiksdC5WZygpfWZ1bmN0aW9uIE95bihlKXt2YXIgdCxuLHI7Zm9yKHQ9MCxyPVdlKEVhLGR0LDgsZS5iLDAsMSksbj1ScihlLDApO24uYiE9bi5kLmM7KXJbdCsrXT1sKEJyKG4pLDgpO3JldHVybiByfWZ1bmN0aW9uIEFjZShlLHQsbil7dmFyIHIsYSxvO2ZvcihyPW5ldyBvcyxvPVJyKG4sMCk7by5iIT1vLmQuYzspYT1sKEJyKG8pLDgpLHVpKHIsbmV3IEVvKGEpKTtMMHQoZSx0LHIpfWZ1bmN0aW9uIE55bihlLHQpe3ZhciBuO3JldHVybiBuPWJvKGUsdCksZnNlKG1vZShlLHQpLDApfEFxKG1vZShlLG4pLDApP246Ym8oRVAsbW9lKHViKG4sNjMpLDEpKX1mdW5jdGlvbiBQeW4oZSx0KXt2YXIgbixyO3JldHVybiBuPWwoZS5kLkJjKHQpLDE2KSxuPyhyPWUuZS5oYygpLHIuR2MobiksZS5lLmQtPW4uZ2MoKSxuLiRiKCkscik6bnVsbH1mdW5jdGlvbiBQMHQoZSl7dmFyIHQ7aWYodD1lLmEuYy5sZW5ndGgsdD4wKXJldHVybiBxayh0LTEsZS5hLmMubGVuZ3RoKSx0MihlLmEsdC0xKTt0aHJvdyB1ZShuZXcgT1FlKX1mdW5jdGlvbiBCMHQoZSx0LG4pe2lmKGU+dCl0aHJvdyB1ZShuZXcgWW4oZUcrZStRd3QrdCkpO2lmKGU8MHx8dD5uKXRocm93IHVlKG5ldyB0M2UoZUcrZStmRWUrdCt1RWUrbikpfWZ1bmN0aW9uIENFKGUsdCl7ZS5EPT1udWxsJiZlLkIhPW51bGwmJihlLkQ9ZS5CLGUuQj1udWxsKSxlY2UoZSx0PT1udWxsP251bGw6KG5yKHQpLHQpKSxlLkMmJmUuaGwobnVsbCl9ZnVuY3Rpb24gQnluKGUsdCl7dmFyIG47bj1JdCgoR2NlKCksVFcpKSE9bnVsbCYmdC5TZygpIT1udWxsP3plKEdlKHQuU2coKSkpL3plKEdlKEl0KFRXKSkpOjEsa2koZS5iLHQsbil9ZnVuY3Rpb24gWTdlKGUsdCl7dmFyIG4scjtpZihyPWUuY1t0XSxyIT0wKWZvcihlLmNbdF09MCxlLmQtPXIsbj10KzE7bjxlLmEubGVuZ3RoOyllLmFbbl0tPXIsbis9biYtbn1mdW5jdGlvbiBJeShlKXt2YXIgdDsrK2UuaixlLmk9PTA/ZS5nPW51bGw6ZS5pPGUuZy5sZW5ndGgmJih0PWUuZyxlLmc9ZS5haihlLmkpLHB1KHQsMCxlLmcsMCxlLmkpKX1mdW5jdGlvbiBGeW4oZSx0LG4pe2lmKHQ8MCl0aHJvdyB1ZShuZXcgdGMoSXl0K3QpKTt0PGUuai5jLmxlbmd0aD9yZihlLmosdCxuKTooQmN0KGUsdCksdnQoZS5qLG4pKX1mdW5jdGlvbiBGMHQoZSl7aWYoIWUuYXx8IShlLmEuaSY4KSl0aHJvdyB1ZShuZXcgbmMoIkVudW1lcmF0aW9uIGNsYXNzIGV4cGVjdGVkIGZvciBsYXlvdXQgb3B0aW9uICIrZS5mKSl9ZnVuY3Rpb24gWDdlKGUpe3ZhciB0O3JldHVybiB0PSghZS5hJiYoZS5hPW5ldyBudCh3cCxlLDksNSkpLGUuYSksdC5pIT0wP2FsbihsKE9lKHQsMCksNjk0KSk6bnVsbH1mdW5jdGlvbiBSeW4oZSl7dmFyIHQ7Zm9yKFhyKGUpLGI0ZSghMCwibnVtYmVyVG9BZHZhbmNlIG11c3QgYmUgbm9ubmVnYXRpdmUiKSx0PTA7dDwwJiZqcihlKTt0KyspeHIoZSk7cmV0dXJuIHR9ZnVuY3Rpb24gTGNlKCl7TGNlPVUsS19lPShaeigpLEcwZSksR19lPW5ldyBwbihDRWUsS19lKSxMN3Q9bmV3IFVpKFNFZSksTTd0PW5ldyBVaShfRWUpLEQ3dD1uZXcgVWkoQUVlKX1mdW5jdGlvbiBrQSgpe2tBPVUsVmRlPW5ldyB3cSgkRWUsMCksalc9bmV3IHdxKGd5dCwxKSxIZGU9bmV3IHdxKCJGQU4iLDIpLHFkZT1uZXcgd3EoIkNPTlNUUkFJTlQiLDMpfWZ1bmN0aW9uIExOKCl7TE49VSx6Vz1uZXcgTnNlKElkLDApLFNJZT1uZXcgTnNlKCJSQURJQUxfQ09NUEFDVElPTiIsMSksX0llPW5ldyBOc2UoIldFREdFX0NPTVBBQ1RJT04iLDIpfWZ1bmN0aW9uIFNFKCl7U0U9VSxfZGU9bmV3IEFzZSgiQ09OU0VSVkFUSVZFIiwwKSxJRGU9bmV3IEFzZSgiQ09OU0VSVkFUSVZFX1NPRlQiLDEpLGFNPW5ldyBBc2UoIlNMT1BQWSIsMil9ZnVuY3Rpb24gRmwoKXtGbD1VLHlfZT1uZXcgZHNlKCJDT05DVVJSRU5UIiwwKSxFYz1uZXcgZHNlKCJJREVOVElUWV9GSU5JU0giLDEpLGk0PW5ldyBkc2UoIlVOT1JERVJFRCIsMil9ZnVuY3Rpb24gTWNlKCl7TWNlPVUsaTFlPWZvdChoZShsZShMTSwxKSxpdCw4OCwwLFsoSnMoKSx1YyksdmNdKSksczFlPWZvdChoZShsZShMTSwxKSxpdCw4OCwwLFt3ZixRMV0pKX1mdW5jdGlvbiBiaChlKXtyZXR1cm4gSWEoZSk/enQ6ZnkoZSk/dGE6aHkoZSk/TnM6dDVlKGUpfHxXNGUoZSk/ZS5SbTplLlJtfHxBcnJheS5pc0FycmF5KGUpJiZsZSh1NnQsMSl8fHU2dH1mdW5jdGlvbiBqeW4oZSl7cmV0dXJuIGU/ZS5pJjE/ZT09aWg/TnM6ZT09VnI/cm86ZT09QjQ/X1Q6ZT09TmE/dGE6ZT09bm0/cjM6ZT09aDc/aTM6ZT09QWw/ang6UEw6ZTpudWxsfWZ1bmN0aW9uIFo1KGUpe3JldHVybihlLmMhPWUuYi5ifHxlLmkhPWUuZy5iKSYmKGF5KGUuYS5jLDApLHJhKGUuYSxlLmIpLHJhKGUuYSxlLmcpLGUuYz1lLmIuYixlLmk9ZS5nLmIpLGUuYX1mdW5jdGlvbiAkeW4oZSx0KXt2YXIgbixyO2ZvcihuPWUuYS5sZW5ndGgtMTt0IT1lLmI7KXI9dC0xJm4sVHMoZS5hLHQsZS5hW3JdKSx0PXI7VHMoZS5hLGUuYixudWxsKSxlLmI9ZS5iKzEmbn1mdW5jdGlvbiB6eW4oZSx0KXt2YXIgbixyO2ZvcihuPWUuYS5sZW5ndGgtMSxlLmM9ZS5jLTEmbjt0IT1lLmM7KXI9dCsxJm4sVHMoZS5hLHQsZS5hW3JdKSx0PXI7VHMoZS5hLGUuYyxudWxsKX1mdW5jdGlvbiBRN2UoZSx0LG4pe3ZhciByLGE7cmV0dXJuIEV5KHQsZS5jLmxlbmd0aCkscj1uLlBjKCksYT1yLmxlbmd0aCxhPT0wPyExOihNNGUoZS5jLHQsciksITApfWZ1bmN0aW9uIFIwdChlLHQsbil7dmFyIHIsYSxvLGY7Zm9yKGE9bixvPTAsZj1hLmxlbmd0aDtvPGY7KytvKWlmKHI9YVtvXSxlLmIuQmUodCxyLmxkKCkpKXJldHVybiByO3JldHVybiBudWxsfWZ1bmN0aW9uIE1OKGUpe3ZhciB0LG4scixhLG87Zm9yKG89MSxuPWUscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0sbz0zMSpvKyh0IT1udWxsP2VzKHQpOjApLG89b3wwO3JldHVybiBvfWZ1bmN0aW9uIEtyKGUpe3ZhciB0LG4scixhLG87Zm9yKHQ9e30scj1lLGE9MCxvPXIubGVuZ3RoO2E8bzsrK2Epbj1yW2FdLHRbIjoiKyhuLmYhPW51bGw/bi5mOiIiK24uZyldPW47cmV0dXJuIHR9ZnVuY3Rpb24gcXluKGUpe3ZhciB0LG47aWYoZT09bnVsbClyZXR1cm4gbnVsbDtmb3IodD0wLG49ZS5sZW5ndGg7dDxuO3QrKylpZighRGl0KGVbdF0pKXJldHVybiBlW3RdO3JldHVybiBudWxsfWZ1bmN0aW9uIERjZShlLHQpe3JldHVybiFlfHx0JiYhZS5qfHxEZShlLDEyNykmJmwoZSwxMjcpLmEuYj09MD8wOmUuamYoKX1mdW5jdGlvbiBCVihlLHQpe3JldHVybiFlfHx0JiYhZS5rfHxEZShlLDEyNykmJmwoZSwxMjcpLmEuYT09MD8wOmUua2YoKX1mdW5jdGlvbiBqMHQoZSx0KXtyZXR1cm4gbnMoZSwoZnQoKSxLaSkpJiZucyh0LEtpKT9ydShsKFEoZSxLaSksMTcpLmEsbChRKHQsS2kpLDE3KS5hKTowfWZ1bmN0aW9uICQwdChlKXt2YXIgdCxuLHI7Zm9yKHI9MCxuPW5ldyBocihkcihlLmEuS2MoKSxuZXcgaikpO2pyKG4pOyl0PWwoeHIobiksMTgpLHQuYy5pPT10LmQuaXx8KytyO3JldHVybiByfWZ1bmN0aW9uIHowdChlLHQpe3ZhciBuLHIsYTtmb3IoYT10LWUuZixyPW5ldyBHKGUuZCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDMxNSksQjF0KG4sbi5lLG4uZithKTtlLmY9dH1mdW5jdGlvbiBHbShlLHQpe3ZhciBuLHIsYTtyPWUuWWsodCxudWxsKSxhPW51bGwsdCYmKGE9KFNrKCksbj1uZXcgUXYsbiksc0UoYSxlLnIpKSxyPSQxKGUsYSxyKSxyJiZyLm9qKCl9ZnVuY3Rpb24gcTB0KGUsdCl7dmFyIG4scixhO249ZSxhPTA7ZG97aWYobj09dClyZXR1cm4gYTtpZihyPW4uZSwhcil0aHJvdyB1ZShuZXcgWUkpO249ZW8ociksKythfXdoaWxlKCEwKX1mdW5jdGlvbiBIeW4oZSl7dmFyIHQsbixyLGE7Zm9yKHI9ZS5iLmEsbj1yLmEuZWMoKS5LYygpO24uT2IoKTspdD1sKG4uUGIoKSw1NjcpLGE9bmV3IEcydCh0LGUuZSxlLmYpLHZ0KGUuZyxhKX1mdW5jdGlvbiBWeW4oZSl7dmFyIHQ7cmV0dXJuIHQ9bmV3IHdodChlKSxRTyhlLmEsRDh0LG5ldyBJbChoZShsZShmQiwxKSxSbiwzODIsMCxbdF0pKSksdC5kJiZ2dCh0LmYsdC5kKSx0LmZ9ZnVuY3Rpb24gSDB0KGUsdCl7dmFyIG47Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZihlPT0oWG4obix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KG4pKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBVeW4oZSx0KXtyZXR1cm4gdDxlLmxlbmd0aCYmKFhuKHQsZS5sZW5ndGgpLGUuY2hhckNvZGVBdCh0KSE9NjMpJiYoWG4odCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KHQpIT0zNSl9ZnVuY3Rpb24gVjB0KGUsdCxuLHIpe0VudCh0aGlzKSx0aGlzLmM9V2Uod2csbTIsMTAsZS5hLmMubGVuZ3RoLDAsMSksdGhpcy5lPXQsajEoZS5hLHRoaXMuYyksdGhpcy5mPW4sdGhpcy5iPXJ9ZnVuY3Rpb24gVTB0KGUpe0RKZSgpLEZxKHRoaXMpLFNIKHRoaXMpLHRoaXMuZT1lLGdidCh0aGlzLGUpLHRoaXMuZz1lPT1udWxsP3VsOnhjKGUpLHRoaXMuYT0iIix0aGlzLmI9ZSx0aGlzLmE9IiJ9ZnVuY3Rpb24gSjdlKCl7dGhpcy5hPW5ldyB3SSx0aGlzLmY9bmV3IHlYZSh0aGlzKSx0aGlzLmI9bmV3IHhYZSh0aGlzKSx0aGlzLmk9bmV3IGtYZSh0aGlzKSx0aGlzLmU9bmV3IEVYZSh0aGlzKX1mdW5jdGlvbiBHMHQoKXtKY24uY2FsbCh0aGlzLG5ldyBJNmUoQXkoMTYpKSksTWgoMixEd3QpLHRoaXMuYj0yLHRoaXMuYT1uZXcgUzVlKG51bGwsbnVsbCwwLG51bGwpLFdJKHRoaXMuYSx0aGlzLmEpfWZ1bmN0aW9uIFo3ZShlKXt0aHJvdyB2Y2UoKSx1ZShuZXcgTEplKCJVbmV4cGVjdGVkIHR5cGVvZiByZXN1bHQgJyIrZSsiJzsgcGxlYXNlIHJlcG9ydCB0aGlzIGJ1ZyB0byB0aGUgR1dUIHRlYW0iKSl9ZnVuY3Rpb24gSWNlKGUsdCxuKXtyZXR1cm4gYi5NYXRoLmFicyh0LWUpPE1HfHxiLk1hdGguYWJzKG4tZSk8TUc/ITA6dC1lPk1HP2Utbj5NRzpuLWU+TUd9ZnVuY3Rpb24gSzB0KGUsdCl7dmFyIG47Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZihlPT0oWG4obix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KG4pKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBHeW4oZSl7dmFyIHQsbjtpZihlPT1udWxsKXJldHVybiExO2Zvcih0PTAsbj1lLmxlbmd0aDt0PG47dCsrKWlmKCFEaXQoZVt0XSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gZThlKGUsdCl7dmFyIG4scixhO3JldHVybiByPSExLG49dC5xLmQsdC5kPGUuYiYmKGE9SDllKHQucSxlLmIpLHQucS5kPmEmJihFZ3QodC5xLGEpLHI9biE9dC5xLmQpKSxyfWZ1bmN0aW9uIFcwdChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7cmV0dXJuIHc9dC5pLEU9dC5qLHI9ZS5mLGE9ci5pLG89ci5qLGY9dy1hLGc9RS1vLG49Yi5NYXRoLnNxcnQoZipmK2cqZyksbn1mdW5jdGlvbiB0OGUoZSx0KXt2YXIgbixyO3JldHVybiByPVhWKGUpLHJ8fChuPShrbGUoKSxQMnQodCkpLHI9bmV3IGtRZShuKSxxcihyLkVsKCksZSkpLHJ9ZnVuY3Rpb24gRE4oZSx0KXt2YXIgbixyO3JldHVybiBuPWwoZS5jLkJjKHQpLDE2KSxuPyhyPWUuaGMoKSxyLkdjKG4pLGUuZC09bi5nYygpLG4uJGIoKSxlLm1jKHIpKTplLmpjKCl9ZnVuY3Rpb24gS3luKGUsdCl7dmFyIG4scjtmb3Iocj1KbChlLmQsMSkhPTAsbj0hMDtuOyluPSExLG49dC5jLm1nKHQuZSxyKSxuPW58Y1AoZSx0LHIsITEpLHI9IXI7dzdlKGUpfWZ1bmN0aW9uIFkwdChlLHQsbixyKXt2YXIgYSxvO2UuYT10LG89cj8wOjEsZS5mPShhPW5ldyBjcHQoZS5jLGUuYSxuLG8pLG5ldyAkYnQobixlLmEsYSxlLmUsZS5iLGUuYz09KEl3KCksb00pKSl9ZnVuY3Rpb24gRlYoZSl7dmFyIHQ7cmV0dXJuIG1yKGUuYSE9ZS5iKSx0PWUuZC5hW2UuYV0sRXJ0KGUuYj09ZS5kLmMmJnQhPW51bGwpLGUuYz1lLmEsZS5hPWUuYSsxJmUuZC5hLmxlbmd0aC0xLHR9ZnVuY3Rpb24gWDB0KGUpe3ZhciB0O2lmKGUuYyE9MClyZXR1cm4gZS5jO2Zvcih0PTA7dDxlLmEubGVuZ3RoO3QrKyllLmM9ZS5jKjMzKyhlLmFbdF0mLTEpO3JldHVybiBlLmM9ZS5jKmUuZSxlLmN9ZnVuY3Rpb24gV3luKGUpe3ZhciB0O2lmKCEoZS5jLmM8MD9lLmE+PWUuYy5iOmUuYTw9ZS5jLmIpKXRocm93IHVlKG5ldyBfYyk7cmV0dXJuIHQ9ZS5hLGUuYSs9ZS5jLmMsKytlLmIscHQodCl9ZnVuY3Rpb24gT2NlKGUpe3ZhciB0O3JldHVybiB0PW5ldyBieWUoZS5hKSxwYyh0LGUpLHJ0KHQsKGZ0KCksemkpLGUpLHQuby5hPWUuZyx0Lm8uYj1lLmYsdC5uLmE9ZS5pLHQubi5iPWUuaix0fWZ1bmN0aW9uIE5jZShlKXtyZXR1cm4oQ3QoKSxobCkuSGMoZS5qKT96ZShHZShRKGUsKGZ0KCkselQpKSkpOkljKGhlKGxlKEVhLDEpLGR0LDgsMCxbZS5pLm4sZS5uLGUuYV0pKS5ifWZ1bmN0aW9uIFl5bihlKXt2YXIgdDtyZXR1cm4gdD1PcShURXQpLGwoUShlLChmdCgpLEx1KSksMjEpLkhjKChIbygpLCRUKSkmJmZpKHQsKHVvKCksYnUpLCh2bygpLFJLKSksdH1mdW5jdGlvbiBYeW4oZSl7dmFyIHQsbixyLGE7Zm9yKGE9bmV3IEtzLHI9bmV3IEcoZSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDI3KSx0PW1TbihuKSxLYShhLHQpO3JldHVybiBhfWZ1bmN0aW9uIFF5bihlKXt2YXIgdCxuO2ZvcihuPW5ldyBHKGUucik7bi5hPG4uYy5jLmxlbmd0aDspaWYodD1sKHJlKG4pLDEwKSxlLm5bdC5wXTw9MClyZXR1cm4gdDtyZXR1cm4gbnVsbH1mdW5jdGlvbiBKeW4oZSx0LG4pe3ZhciByLGE7Zm9yKGE9dC5hLmEuZWMoKS5LYygpO2EuT2IoKTspaWYocj1sKGEuUGIoKSw2MCksR2F0KGUscixuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBaeW4oZSx0LG4scil7dmFyIGEsbztmb3Iobz1lLktjKCk7by5PYigpOylhPWwoby5QYigpLDcyKSxhLm4uYT10LmErKHIuYS1hLm8uYSkvMixhLm4uYj10LmIsdC5iKz1hLm8uYitufWZ1bmN0aW9uIGU0bihlLHQsbil7dmFyIHI7cj1uZXcgYzJ0KGUsdCkseG4oZS5yLHQuYWcoKSxyKSxuJiYhV18oZS51KSYmKHIuYz1uZXcgdW90KGUuZCksVnUodC5SZigpLG5ldyBEaWUocikpKX1mdW5jdGlvbiBpdShlLHQpe3ZhciBuO3JldHVybiB3YyhlKSYmd2ModCkmJihuPWUtdCwhaXNOYU4obikpP246YnhlKHdjKGUpP01mKGUpOmUsd2ModCk/TWYodCk6dCl9ZnVuY3Rpb24gbjhlKGUsdCl7dmFyIG4scixhO2ZvcihhPTEsbj1lLHI9dD49MD90Oi10O3I+MDspciUyPT0wPyhuKj1uLHI9ci8yfDApOihhKj1uLHItPTEpO3JldHVybiB0PDA/MS9hOmF9ZnVuY3Rpb24gdDRuKGUsdCl7dmFyIG4scixhO2ZvcihhPTEsbj1lLHI9dD49MD90Oi10O3I+MDspciUyPT0wPyhuKj1uLHI9ci8yfDApOihhKj1uLHItPTEpO3JldHVybiB0PDA/MS9hOmF9ZnVuY3Rpb24geWIoZSx0KXt2YXIgbixyLGEsbztyZXR1cm4gbz0oYT1lP1hWKGUpOm51bGwsRHB0KChyPXQsYSYmYS5HbCgpLHIpKSksbz09dCYmKG49WFYoZSksbiYmbi5HbCgpKSxvfWZ1bmN0aW9uIFEwdChlLHQsbil7dmFyIHIsYTtyZXR1cm4gYT1lLmYsZS5mPXQsZS5EYiY0JiYhKGUuRGImMSkmJihyPW5ldyBfYShlLDEsMCxhLHQpLG4/bi5uaihyKTpuPXIpLG59ZnVuY3Rpb24gSjB0KGUsdCxuKXt2YXIgcixhO3JldHVybiBhPWUuYixlLmI9dCxlLkRiJjQmJiEoZS5EYiYxKSYmKHI9bmV3IF9hKGUsMSwzLGEsdCksbj9uLm5qKHIpOm49ciksbn1mdW5jdGlvbiByOGUoZSx0LG4pe3ZhciByLGE7cmV0dXJuIGE9ZS5hLGUuYT10LGUuRGImNCYmIShlLkRiJjEpJiYocj1uZXcgX2EoZSwxLDEsYSx0KSxuP24ubmoocik6bj1yKSxufWZ1bmN0aW9uIFowdChlKXt2YXIgdCxuO2lmKGUhPW51bGwpZm9yKG49MDtuPGUubGVuZ3RoOysrbil0PWVbbl0sdCYmKGwodC5nLDM3OSksdC5pKX1mdW5jdGlvbiBuNG4oZSx0LG4scixhLG8sZixnKXt2YXIgdztmb3Iodz1uO288Zjspdz49cnx8dDxuJiZnLk5lKGVbdF0sZVt3XSk8PTA/VHMoYSxvKyssZVt0KytdKTpUcyhhLG8rKyxlW3crK10pfWZ1bmN0aW9uIHI0bihlLHQsbixyLGEpe3Q9PTB8fHI9PTB8fCh0PT0xP2Fbcl09WThlKGEsbixyLGVbMF0pOnI9PTE/YVt0XT1ZOGUoYSxlLHQsblswXSk6Q0VuKGUsbixhLHQscikpfWZ1bmN0aW9uIGk0bihlLHQsbil7dmFyIHIsYSxvLGY7Zm9yKHI9bi9lLmdjKCksYT0wLGY9ZS5LYygpO2YuT2IoKTspbz1sKGYuUGIoKSwxODYpLHowdChvLG8uZityKmEpLHY4bihvLHQsciksKythfWZ1bmN0aW9uIHM0bihlKXt2YXIgdCxuLHI7Zm9yKHI9MCxuPW5ldyBHKGUuYSk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDE3Mikscj1iLk1hdGgubWF4KHIsdC5nKTtyZXR1cm4gcn1mdW5jdGlvbiBhNG4oZSl7dmFyIHQsbixyO2ZvcihyPW5ldyBHKGUuYik7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDIxOSksdD1uLmMua2coKT9uLmY6bi5hLHQmJklMbih0LG4uail9ZnVuY3Rpb24gRUEoKXtFQT1VLHBkZT1uZXcgVHNlKCJEVU1NWV9OT0RFX09WRVIiLDApLGJEZT1uZXcgVHNlKCJEVU1NWV9OT0RFX1VOREVSIiwxKSxTVz1uZXcgVHNlKCJFUVVBTCIsMil9ZnVuY3Rpb24gZHgoKXtkeD1VLHRQZT1uZXcgSHNlKCJQQVJBTExFTF9OT0RFIiwwKSxMND1uZXcgSHNlKCJISUVSQVJDSElDQUxfTk9ERSIsMSksZFk9bmV3IEhzZSgiUk9PVF9OT0RFIiwyKX1mdW5jdGlvbiBycCgpe3JwPVUsb1k9bmV3IHFzZSgiSU5IRVJJVCIsMCksQTI9bmV3IHFzZSgiSU5DTFVERV9DSElMRFJFTiIsMSksRE09bmV3IHFzZSgiU0VQQVJBVEVfQ0hJTERSRU4iLDIpfWZ1bmN0aW9uIGk4ZShlLHQpe3N3aXRjaCh0KXtjYXNlIDE6IWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSwkcihlLm4pO3JldHVybjtjYXNlIDI6ZkUoZSxudWxsKTtyZXR1cm59TzdlKGUsdCl9ZnVuY3Rpb24gZTF0KGUpe3N3aXRjaChlLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IEFuZTtjYXNlIDE6cmV0dXJuIG5ldyBjJDtjYXNlIDI6cmV0dXJuIG5ldyBMbmU7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gYTIoZSl7c3dpdGNoKHdkKCksZS5jKXtjYXNlIDA6cmV0dXJuIEthZSgpLFZTZTtjYXNlIDE6cmV0dXJuIG5ldyBPOChScHQobmV3IFA4KGUpKSk7ZGVmYXVsdDpyZXR1cm4gbmV3IFNKZShlKX19ZnVuY3Rpb24gdDF0KGUpe3N3aXRjaCh3ZCgpLGUuZ2MoKSl7Y2FzZSAwOnJldHVybiBLYWUoKSxWU2U7Y2FzZSAxOnJldHVybiBuZXcgTzgoZS5LYygpLlBiKCkpO2RlZmF1bHQ6cmV0dXJuIG5ldyBrM2UoZSl9fWZ1bmN0aW9uIFJWKGUpe3ZhciB0O3N3aXRjaChlLmdjKCkpe2Nhc2UgMDpyZXR1cm4geDBlO2Nhc2UgMTpyZXR1cm4gbmV3IFNhZShYcihlLlhiKDApKSk7ZGVmYXVsdDpyZXR1cm4gdD1lLG5ldyBvb2UodCl9fWZ1bmN0aW9uIHB0KGUpe3ZhciB0LG47cmV0dXJuIGU+LTEyOSYmZTwxMjg/KEZpdCgpLHQ9ZSsxMjgsbj10X2VbdF0sIW4mJihuPXRfZVt0XT1uZXcgQ3IoZSkpLG4pOm5ldyBDcihlKX1mdW5jdGlvbiBfRShlKXt2YXIgdCxuO3JldHVybiBlPi0xMjkmJmU8MTI4Pyhlc3QoKSx0PWUrMTI4LG49c19lW3RdLCFuJiYobj1zX2VbdF09bmV3IFduKGUpKSxuKTpuZXcgV24oZSl9ZnVuY3Rpb24gbjF0KGUsdCl7dmFyIG47ZS5hLmMubGVuZ3RoPjAmJihuPWwoanQoZS5hLGUuYS5jLmxlbmd0aC0xKSw1NzkpLEc3ZShuLHQpKXx8dnQoZS5hLG5ldyB5dXQodCkpfWZ1bmN0aW9uIG80bihlKXt1MCgpO3ZhciB0LG47dD1lLmQuYy1lLmUuYyxuPWwoZS5nLDE1NCksVnUobi5iLG5ldyBwWWUodCkpLFZ1KG4uYyxuZXcgYlllKHQpKSx0byhuLmksbmV3IG1ZZSh0KSl9ZnVuY3Rpb24gcjF0KGUpe3ZhciB0O3JldHVybiB0PW5ldyB0Yix0LmErPSJWZXJ0aWNhbFNlZ21lbnQgIix3dSh0LGUuZSksdC5hKz0iICIsaGkodCxFeWUobmV3IFppZSxuZXcgRyhlLmspKSksdC5hfWZ1bmN0aW9uIFBjZShlLHQpe3ZhciBuLHIsYTtmb3Iobj0wLGE9T2MoZSx0KS5LYygpO2EuT2IoKTspcj1sKGEuUGIoKSwxMiksbis9UShyLChmdCgpLGpsKSkhPW51bGw/MTowO3JldHVybiBufWZ1bmN0aW9uIGU2KGUsdCxuKXt2YXIgcixhLG87Zm9yKHI9MCxvPVJyKGUsMCk7by5iIT1vLmQuYyYmKGE9emUoR2UoQnIobykpKSwhKGE+bikpOylhPj10JiYrK3I7cmV0dXJuIHJ9ZnVuY3Rpb24gaTF0KGUsdCl7WHIoZSk7dHJ5e3JldHVybiBlLl9iKHQpfWNhdGNoKG4pe2lmKG49YnMobiksRGUobiwyMTIpfHxEZShuLDE2OSkpcmV0dXJuITE7dGhyb3cgdWUobil9fWZ1bmN0aW9uIHM4ZShlLHQpe1hyKGUpO3RyeXtyZXR1cm4gZS5IYyh0KX1jYXRjaChuKXtpZihuPWJzKG4pLERlKG4sMjEyKXx8RGUobiwxNjkpKXJldHVybiExO3Rocm93IHVlKG4pfX1mdW5jdGlvbiBjNG4oZSx0KXtYcihlKTt0cnl7cmV0dXJuIGUuTWModCl9Y2F0Y2gobil7aWYobj1icyhuKSxEZShuLDIxMil8fERlKG4sMTY5KSlyZXR1cm4hMTt0aHJvdyB1ZShuKX19ZnVuY3Rpb24gT3koZSx0KXtYcihlKTt0cnl7cmV0dXJuIGUueGModCl9Y2F0Y2gobil7aWYobj1icyhuKSxEZShuLDIxMil8fERlKG4sMTY5KSlyZXR1cm4gbnVsbDt0aHJvdyB1ZShuKX19ZnVuY3Rpb24gdTRuKGUsdCl7WHIoZSk7dHJ5e3JldHVybiBlLkJjKHQpfWNhdGNoKG4pe2lmKG49YnMobiksRGUobiwyMTIpfHxEZShuLDE2OSkpcmV0dXJuIG51bGw7dGhyb3cgdWUobil9fWZ1bmN0aW9uIFRBKGUsdCl7c3dpdGNoKHQuZyl7Y2FzZSAyOmNhc2UgMTpyZXR1cm4gT2MoZSx0KTtjYXNlIDM6Y2FzZSA0OnJldHVybiBsZihPYyhlLHQpKX1yZXR1cm4gQ24oKSxDbigpLF9vfWZ1bmN0aW9uIENBKGUpe3ZhciB0O3JldHVybiBlLkRiJjY0P2cwKGUpOih0PW5ldyBBZihnMChlKSksdC5hKz0iIChuYW1lOiAiLFhvKHQsZS56YiksdC5hKz0iKSIsdC5hKX1mdW5jdGlvbiBsNG4oZSl7dmFyIHQ7cmV0dXJuIHQ9bChCMShlLmMuYywiIiksMjMzKSx0fHwodD1uZXcgbngoQ2soVGsobmV3IG55LCIiKSwiT3RoZXIiKSksaDIoZS5jLmMsIiIsdCkpLHR9ZnVuY3Rpb24gYThlKGUsdCxuKXt2YXIgcixhO3JldHVybiBhPWUuc2IsZS5zYj10LGUuRGImNCYmIShlLkRiJjEpJiYocj1uZXcgX2EoZSwxLDQsYSx0KSxuP24ubmoocik6bj1yKSxufWZ1bmN0aW9uIG84ZShlLHQsbil7dmFyIHIsYTtyZXR1cm4gYT1lLnIsZS5yPXQsZS5EYiY0JiYhKGUuRGImMSkmJihyPW5ldyBfYShlLDEsOCxhLGUuciksbj9uLm5qKHIpOm49ciksbn1mdW5jdGlvbiBoNG4oZSx0LG4pe3ZhciByLGE7cmV0dXJuIHI9bmV3IFpnKGUuZSw0LDEzLChhPXQuYyxhfHwoVG4oKSx0ZCkpLG51bGwsZjIoZSx0KSwhMSksbj9uLm5qKHIpOm49cixufWZ1bmN0aW9uIGY0bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gcj1uZXcgWmcoZS5lLDMsMTMsbnVsbCwoYT10LmMsYXx8KFRuKCksdGQpKSxmMihlLHQpLCExKSxuP24ubmoocik6bj1yLG59ZnVuY3Rpb24gbzIoZSx0KXt2YXIgbixyO3JldHVybiBuPWwodCw2OTEpLHI9bi5lbCgpLCFyJiZuLmZsKHI9RGUodCw5MCk/bmV3IEJ0dChlLGwodCwyOSkpOm5ldyBzY3QoZSxsKHQsMTU2KSkpLHJ9ZnVuY3Rpb24gSU4oZSx0LG4pe3ZhciByO2UuX2koZS5pKzEpLHI9ZS5aaSh0LG4pLHQhPWUuaSYmcHUoZS5nLHQsZS5nLHQrMSxlLmktdCksVHMoZS5nLHQsciksKytlLmksZS5NaSh0LG4pLGUuTmkoKX1mdW5jdGlvbiBkNG4oZSx0KXt2YXIgbjtyZXR1cm4gdC5hJiYobj10LmEuYS5sZW5ndGgsZS5hP2hpKGUuYSxlLmIpOmUuYT1uZXcgVGgoZS5kKSxmY3QoZS5hLHQuYSx0LmQubGVuZ3RoLG4pKSxlfWZ1bmN0aW9uIGc0bihlLHQpe3ZhciBuO2UuYz10LGUuYT13NW4odCksZS5hPDU0JiYoZS5mPShuPXQuZD4xP2xjdCh0LmFbMF0sdC5hWzFdKTpsY3QodC5hWzBdLDApLEZtKHQuZT4wP246cjIobikpKSl9ZnVuY3Rpb24gT04oZSx0KXt2YXIgbjtyZXR1cm4gbj1uZXcgb24sZS5hLkJkKG4pPyhPaygpLG5ldyBLaWUobnIoVWx0KGUsbi5hLHQpKSkpOihmYihlKSxPaygpLE9rKCksYl9lKX1mdW5jdGlvbiBzMXQoZSx0KXt2YXIgbjtlLmMubGVuZ3RoIT0wJiYobj1sKGoxKGUsV2Uod2csbTIsMTAsZS5jLmxlbmd0aCwwLDEpKSwxOTkpLGN5ZShuLG5ldyBVOSksSnB0KG4sdCkpfWZ1bmN0aW9uIGExdChlLHQpe3ZhciBuO2UuYy5sZW5ndGghPTAmJihuPWwoajEoZSxXZSh3ZyxtMiwxMCxlLmMubGVuZ3RoLDAsMSkpLDE5OSksY3llKG4sbmV3IFdkKSxKcHQobix0KSl9ZnVuY3Rpb24gUGkoZSx0KXtyZXR1cm4gSWEoZSk/dm4oZSx0KTpmeShlKT9laXQoZSx0KTpoeShlKT8obnIoZSkscWUoZSk9PT1xZSh0KSk6dDVlKGUpP2UuRmIodCk6VzRlKGUpP0p0dChlLHQpOlc1ZShlLHQpfWZ1bmN0aW9uIGNmKGUsdCxuKXtpZih0PDApZDllKGUsbik7ZWxzZXtpZighbi5yaygpKXRocm93IHVlKG5ldyBZbihPYituLnhlKCkra0wpKTtsKG4sNjkpLndrKCkuRWsoZSxlLmhpKCksdCl9fWZ1bmN0aW9uIG8xdChlLHQsbil7aWYoZTwwfHx0Pm4pdGhyb3cgdWUobmV3IHRjKGVHK2UrZkVlK3QrIiwgc2l6ZTogIituKSk7aWYoZT50KXRocm93IHVlKG5ldyBZbihlRytlK1F3dCt0KSl9ZnVuY3Rpb24gYzF0KGUpe3ZhciB0O3JldHVybiBlLkRiJjY0P2cwKGUpOih0PW5ldyBBZihnMChlKSksdC5hKz0iIChzb3VyY2U6ICIsWG8odCxlLmQpLHQuYSs9IikiLHQuYSl9ZnVuY3Rpb24gdTF0KGUpe3JldHVybiBlPj02NSYmZTw9NzA/ZS02NSsxMDplPj05NyYmZTw9MTAyP2UtOTcrMTA6ZT49NDgmJmU8PTU3P2UtNDg6MH1mdW5jdGlvbiBwNG4oZSl7WVUoKTt2YXIgdCxuLHIsYTtmb3Iobj1ldWUoKSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKWlmKHQ9bltyXSxnYyh0LmEsZSwwKSE9LTEpcmV0dXJuIHQ7cmV0dXJuIEgwZX1mdW5jdGlvbiBiNG4oZSx0KXt2YXIgbixyLGEsbztpZih0LmVqKGUuYSksbz1sKEtuKGUuYSw4KSwyMDM1KSxvIT1udWxsKWZvcihuPW8scj0wLGE9bi5sZW5ndGg7cjxhOysrciludWxsLlVtKCl9ZnVuY3Rpb24gYzIoZSx0KXt2YXIgbjtuPShlLkJiJjI1NikhPTAsdD9lLkJifD0yNTY6ZS5CYiY9LTI1NyxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgaDAoZSwxLDIsbix0KSl9ZnVuY3Rpb24gYzhlKGUsdCl7dmFyIG47bj0oZS5CYiYyNTYpIT0wLHQ/ZS5CYnw9MjU2OmUuQmImPS0yNTcsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGgwKGUsMSw4LG4sdCkpfWZ1bmN0aW9uIGpWKGUsdCl7dmFyIG47bj0oZS5CYiYyNTYpIT0wLHQ/ZS5CYnw9MjU2OmUuQmImPS0yNTcsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGgwKGUsMSw4LG4sdCkpfWZ1bmN0aW9uIHUyKGUsdCl7dmFyIG47bj0oZS5CYiY1MTIpIT0wLHQ/ZS5CYnw9NTEyOmUuQmImPS01MTMsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGgwKGUsMSwzLG4sdCkpfWZ1bmN0aW9uIHU4ZShlLHQpe3ZhciBuO249KGUuQmImNTEyKSE9MCx0P2UuQmJ8PTUxMjplLkJiJj0tNTEzLGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBoMChlLDEsOSxuLHQpKX1mdW5jdGlvbiBtNG4oZSx0LG4pe3ZhciByLGE7cmV0dXJuIGE9ZS5hLGUuYT10LGUuRGImNCYmIShlLkRiJjEpJiYocj1uZXcgX2EoZSwxLDUsYSxlLmEpLG4/TXhlKG4scik6bj1yKSxufWZ1bmN0aW9uIFNBKGUsdCl7dmFyIG47cmV0dXJuIGUuYj09LTEmJmUuYSYmKG49ZS5hLnBrKCksZS5iPW4/ZS5jLkhoKGUuYS5MaigpLG4pOm1zKGUuYy5EaCgpLGUuYSkpLGUuYy55aChlLmIsdCl9ZnVuY3Rpb24gbDF0KGUsdCl7dmFyIG4scjtmb3Iocj1uZXcgb3IoZSk7ci5lIT1yLmkuZ2MoKTspaWYobj1sKGdyKHIpLDI5KSxxZSh0KT09PXFlKG4pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGw4ZShlKXt2YXIgdCxuO3JldHVybiB0PWUuayx0PT0oWm4oKSxVcyk/KG49bChRKGUsKGZ0KCksV2MpKSw2NCksbj09KEN0KCksUW4pfHxuPT1Ecik6ITF9ZnVuY3Rpb24gaDF0KGUpe3ZhciB0O3JldHVybiB0PWU2ZShlKSxjdyh0LmEsMCk/KGN5KCksY3koKSxJMGUpOihjeSgpLG5ldyBzYWUoaHNlKHQuYSwwKT9UNmUodCkvRm0odC5hKTowKSl9ZnVuY3Rpb24gTk4oZSx0KXt0aGlzLmU9dCx0aGlzLmE9UWZ0KGUpLHRoaXMuYTw1ND90aGlzLmY9Rm0oZSk6dGhpcy5jPShDZCgpLGl1KGUsMCk+PTA/a2IoZSk6Sl8oa2IocjIoZSkpKSl9ZnVuY3Rpb24gZjF0KGUsdCxuLHIsYSxvKXt0aGlzLmU9bmV3IGJ0LHRoaXMuZj0ocW8oKSxzTSksdnQodGhpcy5lLGUpLHRoaXMuZD10LHRoaXMuYT1uLHRoaXMuYj1yLHRoaXMuZj1hLHRoaXMuYz1vfWZ1bmN0aW9uIHY0bihlLHQsbil7ZS5uPUxtKG5tLFtkdCxhaGVdLFszNzYsMjhdLDE0LFtuLHVhKGIuTWF0aC5jZWlsKHQvMzIpKV0sMiksZS5vPXQsZS5wPW4sZS5qPXQtMT4+MSxlLms9bi0xPj4xfWZ1bmN0aW9uIGQxdChlKXtyZXR1cm4gZS09ZT4+MSYxNDMxNjU1NzY1LGU9KGU+PjImODU4OTkzNDU5KSsoZSY4NTg5OTM0NTkpLGU9KGU+PjQpK2UmMjUyNjQ1MTM1LGUrPWU+PjgsZSs9ZT4+MTYsZSY2M31mdW5jdGlvbiBnMXQoZSx0KXt2YXIgbixyO2ZvcihyPW5ldyBvcihlKTtyLmUhPXIuaS5nYygpOylpZihuPWwoZ3IociksMTQyKSxxZSh0KT09PXFlKG4pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHc0bihlLHQsbil7dmFyIHIsYSxvO3JldHVybiBvPShhPVZFKGUuYix0KSxhKSxvJiYocj1sKFZVKGxOKGUsbyksIiIpLDI5KSxyKT9QOWUoZSxyLHQsbik6bnVsbH1mdW5jdGlvbiBCY2UoZSx0LG4pe3ZhciByLGEsbztyZXR1cm4gbz0oYT1WRShlLmIsdCksYSksbyYmKHI9bChWVShsTihlLG8pLCIiKSwyOSkscik/QjllKGUscix0LG4pOm51bGx9ZnVuY3Rpb24geTRuKGUsdCl7dmFyIG47aWYobj1YNShlLmksdCksbj09bnVsbCl0aHJvdyB1ZShuZXcgZGQoIk5vZGUgZGlkIG5vdCBleGlzdCBpbiBpbnB1dC4iKSk7cmV0dXJuIFM3ZSh0LG4pLG51bGx9ZnVuY3Rpb24geDRuKGUsdCl7dmFyIG47aWYobj1vUChlLHQpLERlKG4sMzMxKSlyZXR1cm4gbChuLDM1KTt0aHJvdyB1ZShuZXcgWW4oT2IrdCsiJyBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUiKSl9ZnVuY3Rpb24gX0EoZSx0LG4pe3ZhciByO2lmKHI9ZS5nYygpLHQ+cil0aHJvdyB1ZShuZXcgbXkodCxyKSk7aWYoZS5TaSgpJiZlLkhjKG4pKXRocm93IHVlKG5ldyBZbihXUCkpO2UuR2kodCxuKX1mdW5jdGlvbiBrNG4oZSx0KXt0LlVnKCJTb3J0IGVuZCBsYWJlbHMiLDEpLElzKEZpKERjKG5ldyBibihudWxsLG5ldyBrbihlLmIsMTYpKSxuZXcgaGopLG5ldyBKNyksbmV3IGFaKSx0LlZnKCl9ZnVuY3Rpb24gSnMoKXtKcz1VLEoxPW5ldyBtTyhjTCwwKSx2Yz1uZXcgbU8oRHgsMSksdWM9bmV3IG1PKE14LDIpLFExPW5ldyBtTyh3aGUsMyksd2Y9bmV3IG1PKCJVUCIsNCl9ZnVuY3Rpb24gUE4oKXtQTj1VLFdXPW5ldyAkc2UoIlAxX1NUUlVDVFVSRSIsMCksWVc9bmV3ICRzZSgiUDJfUFJPQ0VTU0lOR19PUkRFUiIsMSksWFc9bmV3ICRzZSgiUDNfRVhFQ1VUSU9OIiwyKX1mdW5jdGlvbiBwMXQoKXtwMXQ9VSxqVHQ9VGQoVGQodl8oVGQoVGQodl8oZmkobmV3IFhzLCh3eCgpLGxNKSwoV0EoKSxEZGUpKSxoTSksWURlKSxRRGUpLGZNKSxVRGUpLEpEZSl9ZnVuY3Rpb24gRTRuKGUpe3N3aXRjaChsKFEoZSwoZnQoKSxodikpLDMxMSkuZyl7Y2FzZSAxOnJ0KGUsaHYsKGVwKCksVXgpKTticmVhaztjYXNlIDI6cnQoZSxodiwoZXAoKSxGNikpfX1mdW5jdGlvbiBUNG4oZSl7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gbmV3IG5KZTtjYXNlIDE6cmV0dXJuIG5ldyBlSmU7Y2FzZSAyOnJldHVybiBuZXcgdEplO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFlJKX19ZnVuY3Rpb24gYjF0KGUpe3N3aXRjaChlLmcpe2Nhc2UgMjpyZXR1cm4gdmM7Y2FzZSAxOnJldHVybiB1YztjYXNlIDQ6cmV0dXJuIFExO2Nhc2UgMzpyZXR1cm4gd2Y7ZGVmYXVsdDpyZXR1cm4gSjF9fWZ1bmN0aW9uIGg4ZShlLHQpe3N3aXRjaChlLmIuZyl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gdDtjYXNlIDI6Y2FzZSAzOnJldHVybiBuZXcgZWYodC5kLDAsdC5hLHQuYik7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gZjhlKGUpe3N3aXRjaChlLmcpe2Nhc2UgMTpyZXR1cm4gZXI7Y2FzZSAyOnJldHVybiBRbjtjYXNlIDM6cmV0dXJuIGFyO2Nhc2UgNDpyZXR1cm4gRHI7ZGVmYXVsdDpyZXR1cm4gUGN9fWZ1bmN0aW9uIEJOKGUpe3N3aXRjaChlLmcpe2Nhc2UgMTpyZXR1cm4gRHI7Y2FzZSAyOnJldHVybiBlcjtjYXNlIDM6cmV0dXJuIFFuO2Nhc2UgNDpyZXR1cm4gYXI7ZGVmYXVsdDpyZXR1cm4gUGN9fWZ1bmN0aW9uICRWKGUpe3N3aXRjaChlLmcpe2Nhc2UgMTpyZXR1cm4gYXI7Y2FzZSAyOnJldHVybiBEcjtjYXNlIDM6cmV0dXJuIGVyO2Nhc2UgNDpyZXR1cm4gUW47ZGVmYXVsdDpyZXR1cm4gUGN9fWZ1bmN0aW9uIGQ4ZShlLHQsbixyKXtzd2l0Y2godCl7Y2FzZSAxOnJldHVybiFlLm4mJihlLm49bmV3IG50KGVjLGUsMSw3KSksZS5uO2Nhc2UgMjpyZXR1cm4gZS5rfXJldHVybiBzeGUoZSx0LG4scil9ZnVuY3Rpb24gQUEoZSx0LG4pe3ZhciByLGE7cmV0dXJuIGUuUGooKT8oYT1lLlFqKCkscj1IdWUoZSx0LG4pLGUuSmooZS5Jaig3LHB0KG4pLHIsdCxhKSkscik6SHVlKGUsdCxuKX1mdW5jdGlvbiBGY2UoZSx0KXt2YXIgbixyLGE7ZS5kPT1udWxsPygrK2UuZSwtLWUuZik6KGE9dC5sZCgpLG49dC5CaSgpLHI9KG4mSWkpJWUuZC5sZW5ndGgsdXZuKGUscixqMnQoZSxyLG4sYSkpKX1mdW5jdGlvbiBBRShlLHQpe3ZhciBuO249KGUuQmImbTApIT0wLHQ/ZS5CYnw9bTA6ZS5CYiY9LTEwMjUsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGgwKGUsMSwxMCxuLHQpKX1mdW5jdGlvbiBMRShlLHQpe3ZhciBuO249KGUuQmImWHkpIT0wLHQ/ZS5CYnw9WHk6ZS5CYiY9LTQwOTcsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGgwKGUsMSwxMixuLHQpKX1mdW5jdGlvbiBNRShlLHQpe3ZhciBuO249KGUuQmImU2wpIT0wLHQ/ZS5CYnw9U2w6ZS5CYiY9LTgxOTMsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGgwKGUsMSwxNSxuLHQpKX1mdW5jdGlvbiBERShlLHQpe3ZhciBuO249KGUuQmImcjQpIT0wLHQ/ZS5CYnw9cjQ6ZS5CYiY9LTIwNDksZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGgwKGUsMSwxMSxuLHQpKX1mdW5jdGlvbiBDNG4oZSl7dmFyIHQ7ZS5nJiYodD1lLmMua2coKT9lLmY6ZS5hLFk5ZSh0LmEsZS5vLCEwKSxZOWUodC5hLGUubywhMSkscnQoZS5vLChOdCgpLE1zKSwoUmEoKSxUdikpKX1mdW5jdGlvbiBTNG4oZSl7dmFyIHQ7aWYoIWUuYSl0aHJvdyB1ZShuZXcgbmMoIkNhbm5vdCBvZmZzZXQgYW4gdW5hc3NpZ25lZCBjdXQuIikpO3Q9ZS5jLWUuYixlLmIrPXQsemF0KGUsdCksJGF0KGUsdCl9ZnVuY3Rpb24gXzRuKGUsdCl7dmFyIG47aWYobj1jcihlLmssdCksbj09bnVsbCl0aHJvdyB1ZShuZXcgZGQoIlBvcnQgZGlkIG5vdCBleGlzdCBpbiBpbnB1dC4iKSk7cmV0dXJuIFM3ZSh0LG4pLG51bGx9ZnVuY3Rpb24gQTRuKGUpe3ZhciB0LG47Zm9yKG49QjJ0KEFoKGUpKS5LYygpO24uT2IoKTspaWYodD1laShuLlBiKCkpLFlBKGUsdCkpcmV0dXJuIExtbigobWV0KCksUl90KSx0KTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBtMXQoZSl7dmFyIHQsbjtmb3Iobj1lLnAuYS5lYygpLktjKCk7bi5PYigpOylpZih0PWwobi5QYigpLDIxOCksdC5mJiZlLmJbdC5jXTwtMWUtMTApcmV0dXJuIHQ7cmV0dXJuIG51bGx9ZnVuY3Rpb24gTDRuKGUpe3ZhciB0LG47Zm9yKG49aGIobmV3IHRiLDkxKSx0PSEwO2UuT2IoKTspdHx8KG4uYSs9Q28pLHQ9ITEsd3UobixlLlBiKCkpO3JldHVybihuLmErPSJdIixuKS5hfWZ1bmN0aW9uIE00bihlKXt2YXIgdCxuLHI7Zm9yKHQ9bmV3IGJ0LHI9bmV3IEcoZS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNjAyKSxyYSh0LGwobi5DZigpLDE2KSk7cmV0dXJuIHR9ZnVuY3Rpb24gUmNlKGUsdCl7dmFyIG4scjtmb3Iocj1uZXcgRyh0KTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNDIpLGFsKGUuYi5iLG4uYiksT3BuKGwobi5hLDE5NCksbChuLmIsODYpKX1mdW5jdGlvbiBENG4oZSx0KXt2YXIgbjtyZXR1cm4gbj1ZaShlLmIuYyx0LmIuYyksbiE9MHx8KG49WWkoZS5hLmEsdC5hLmEpLG4hPTApP246WWkoZS5hLmIsdC5hLmIpfWZ1bmN0aW9uIFlpKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPT10P2U9PTA/WWkoMS9lLDEvdCk6MDppc05hTihlKT9pc05hTih0KT8wOjE6LTF9ZnVuY3Rpb24gSTRuKGUpe3ZhciB0O3JldHVybiB0PWUuYVtlLmMtMSZlLmEubGVuZ3RoLTFdLHQ9PW51bGw/bnVsbDooZS5jPWUuYy0xJmUuYS5sZW5ndGgtMSxUcyhlLmEsZS5jLG51bGwpLHQpfWZ1bmN0aW9uIE80bihlKXt2YXIgdCxuLHI7Zm9yKHI9MCxuPWUubGVuZ3RoLHQ9MDt0PG47dCsrKWVbdF09PTMyfHxlW3RdPT0xM3x8ZVt0XT09MTB8fGVbdF09PTl8fChlW3IrK109ZVt0XSk7cmV0dXJuIHJ9ZnVuY3Rpb24gTjRuKGUsdCl7dmFyIG4scixhLG8sZjtmb3IoZj1XdShlLmUuRGgoKSx0KSxvPTAsbj1sKGUuZywxMjQpLGE9MDthPGUuaTsrK2Epcj1uW2FdLGYuYW0oci5MaygpKSYmKytvO3JldHVybiBvfWZ1bmN0aW9uIFA0bihlLHQsbil7dmFyIHIsYTtmb3IoYT1EZSh0LDEwMikmJmwodCwxOSkuQmImSW8/bmV3IFVzZSh0LGUpOm5ldyBtRSh0LGUpLHI9MDtyPG47KytyKWlVKGEpO3JldHVybiBhfWZ1bmN0aW9uIHYxdChlLHQsbil7dmFyIHIsYTtpZihlLmMpSHhlKGUuYyx0LG4pO2Vsc2UgZm9yKGE9bmV3IEcoZS5iKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTYzKSx2MXQocix0LG4pfWZ1bmN0aW9uIEI0bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gcj1sKHQub2YoZS5hKSwzNCksYT1sKG4ub2YoZS5hKSwzNCksciE9bnVsbCYmYSE9bnVsbD92TihyLGEpOnIhPW51bGw/LTE6YSE9bnVsbD8xOjB9ZnVuY3Rpb24gZzhlKGUsdCl7dmFyIG4scixhO2Zvcihucih0KSxuPSExLHI9bmV3IEcoZSk7ci5hPHIuYy5jLmxlbmd0aDspYT1yZShyKSx0LkhjKGEpJiYoUV8ociksbj0hMCk7cmV0dXJuIG59ZnVuY3Rpb24gdW4oZSl7dmFyIHQsbixyLGE7cmV0dXJuIG49KHQ9bChLMCgocj1lLlJtLGE9ci5mLGE9PUhyP3I6YSkpLDkpLG5ldyBaaCh0LGwoYzAodCx0Lmxlbmd0aCksOSksMCkpLGQwKG4sZSksbn1mdW5jdGlvbiB6VihlKXt2YXIgdCxuO3JldHVybiBuPWwoUShlLChOdCgpLFJoKSksODgpLG49PShKcygpLEoxKT8odD16ZShHZShRKGUsY1cpKSksdD49MT92YzpRMSk6bn1mdW5jdGlvbiBGNG4oZSl7c3dpdGNoKGwoUShlLChOdCgpLGJwKSksMjIzKS5nKXtjYXNlIDE6cmV0dXJuIG5ldyBUZWU7Y2FzZSAzOnJldHVybiBuZXcgTGVlO2RlZmF1bHQ6cmV0dXJuIG5ldyBFZWV9fWZ1bmN0aW9uIHhiKGUpe2lmKGUuYyl4YihlLmMpO2Vsc2UgaWYoZS5kKXRocm93IHVlKG5ldyBuYygiU3RyZWFtIGFscmVhZHkgdGVybWluYXRlZCwgY2FuJ3QgYmUgbW9kaWZpZWQgb3IgdXNlZCIpKX1mdW5jdGlvbiBCdyhlLHQsbil7dmFyIHI7cmV0dXJuIHI9ZS5hLmdldCh0KSxlLmEuc2V0KHQsbj09PXZvaWQgMD9udWxsOm4pLHI9PT12b2lkIDA/KCsrZS5jLCsrZS5iLmcpOisrZS5kLHJ9ZnVuY3Rpb24gUjRuKGUsdCxuKXt2YXIgcixhO2ZvcihhPWUuYS5lYygpLktjKCk7YS5PYigpOylpZihyPWwoYS5QYigpLDEwKSxFTihuLGwoanQodCxyLnApLDE2KSkpcmV0dXJuIHI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gcDhlKGUsdCxuKXt2YXIgcjtyZXR1cm4gcj0wLHQmJihCNShlLmEpP3IrPXQuZi5hLzI6cis9dC5mLmIvMiksbiYmKEI1KGUuYSk/cis9bi5mLmEvMjpyKz1uLmYuYi8yKSxyfWZ1bmN0aW9uIGo0bihlLHQsbil7dmFyIHI7cj1uLCFyJiYocj1CNGUobmV3IEw4LDApKSxyLlVnKEwzdCwyKSxrZHQoZS5iLHQsci5laCgxKSksZU1uKGUsdCxyLmVoKDEpKSxySW4odCxyLmVoKDEpKSxyLlZnKCl9ZnVuY3Rpb24gYjhlKGUsdCxuKXt2YXIgcixhO3JldHVybiByPShyYigpLGE9bmV3IEFTLGEpLGRWKHIsdCksZlYocixuKSxlJiZxcigoIWUuYSYmKGUuYT1uZXcgWXMocWgsZSw1KSksZS5hKSxyKSxyfWZ1bmN0aW9uIGpjZShlKXt2YXIgdDtyZXR1cm4gZS5EYiY2ND9nMChlKToodD1uZXcgQWYoZzAoZSkpLHQuYSs9IiAoaWRlbnRpZmllcjogIixYbyh0LGUuayksdC5hKz0iKSIsdC5hKX1mdW5jdGlvbiAkY2UoZSx0KXt2YXIgbjtuPShlLkJiJmV1KSE9MCx0P2UuQmJ8PWV1OmUuQmImPS0zMjc2OSxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgaDAoZSwxLDE4LG4sdCkpfWZ1bmN0aW9uIG04ZShlLHQpe3ZhciBuO249KGUuQmImZXUpIT0wLHQ/ZS5CYnw9ZXU6ZS5CYiY9LTMyNzY5LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBoMChlLDEsMTgsbix0KSl9ZnVuY3Rpb24gSUUoZSx0KXt2YXIgbjtuPShlLkJiJl9kKSE9MCx0P2UuQmJ8PV9kOmUuQmImPS0xNjM4NSxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgaDAoZSwxLDE2LG4sdCkpfWZ1bmN0aW9uIHY4ZShlLHQpe3ZhciBuO249KGUuQmImSW8pIT0wLHQ/ZS5CYnw9SW86ZS5CYiY9LTY1NTM3LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBoMChlLDEsMjAsbix0KSl9ZnVuY3Rpb24gdzhlKGUpe3ZhciB0O3JldHVybiB0PVdlKGtmLEFkLDI4LDIsMTUsMSksZS09SW8sdFswXT0oZT4+MTApK0FQJlpzLHRbMV09KGUmMTAyMykrNTYzMjAmWnMsSWYodCwwLHQubGVuZ3RoKX1mdW5jdGlvbiAkNG4oZSl7dmFyIHQ7cmV0dXJuIHQ9ankoZSksdD4zNDAyODIzNDY2Mzg1Mjg4NmUyMj9nczp0PC0zNDAyODIzNDY2Mzg1Mjg4NmUyMj9pYTp0fWZ1bmN0aW9uIGJvKGUsdCl7dmFyIG47cmV0dXJuIHdjKGUpJiZ3Yyh0KSYmKG49ZSt0LF9QPG4mJm48Wm0pP246bWIoSzNuKHdjKGUpP01mKGUpOmUsd2ModCk/TWYodCk6dCkpfWZ1bmN0aW9uIG1vKGUsdCl7dmFyIG47cmV0dXJuIHdjKGUpJiZ3Yyh0KSYmKG49ZSp0LF9QPG4mJm48Wm0pP246bWIocUxuKHdjKGUpP01mKGUpOmUsd2ModCk/TWYodCk6dCkpfWZ1bmN0aW9uIERmKGUsdCl7dmFyIG47cmV0dXJuIHdjKGUpJiZ3Yyh0KSYmKG49ZS10LF9QPG4mJm48Wm0pP246bWIoSmZ0KHdjKGUpP01mKGUpOmUsd2ModCk/TWYodCk6dCkpfWZ1bmN0aW9uIE9jKGUsdCl7dmFyIG47cmV0dXJuIGUuaXx8ZjllKGUpLG49bChRbyhlLmcsdCksNDIpLG4/bmV3IFpwKGUuaixsKG4uYSwxNykuYSxsKG4uYiwxNykuYSk6KENuKCksQ24oKSxfbyl9ZnVuY3Rpb24gejRuKGUpe3JldHVybiBNY2UoKSxIbigpLCEhKHgxdChsKGUuYSw4NikuaixsKGUuYiw4OCkpfHxsKGUuYSw4NikuZC5lIT0wJiZ4MXQobChlLmEsODYpLmosbChlLmIsODgpKSl9ZnVuY3Rpb24gcTRuKGUsdCl7cmV0dXJuIHZuKHQuYiYmdC5jP0JtKHQuYikrIi0+IitCbSh0LmMpOiJlXyIrZXModCksZS5iJiZlLmM/Qm0oZS5iKSsiLT4iK0JtKGUuYyk6ImVfIitlcyhlKSl9ZnVuY3Rpb24gSDRuKGUsdCl7cmV0dXJuIHZuKHQuYiYmdC5jP0JtKHQuYikrIi0+IitCbSh0LmMpOiJlXyIrZXModCksZS5iJiZlLmM/Qm0oZS5iKSsiLT4iK0JtKGUuYyk6ImVfIitlcyhlKSl9ZnVuY3Rpb24gRncoZSx0KXtyZXR1cm4gQTEoKSxmMChBYiksYi5NYXRoLmFicyhlLXQpPD1BYnx8ZT09dHx8aXNOYU4oZSkmJmlzTmFOKHQpPzA6ZTx0Py0xOmU+dD8xOnV3KGlzTmFOKGUpLGlzTmFOKHQpKX1mdW5jdGlvbiBpcCgpe2lwPVUsSGdlPW5ldyB4cShjTCwwKSxKQj1uZXcgeHEoIlBPTFlMSU5FIiwxKSxpQz1uZXcgeHEoIk9SVEhPR09OQUwiLDIpLHM5PW5ldyB4cSgiU1BMSU5FUyIsMyl9ZnVuY3Rpb24gcVYoKXtxVj1VLFlJZT1uZXcgUnNlKCJBU1BFQ1RfUkFUSU9fRFJJVkVOIiwwKSx1Z2U9bmV3IFJzZSgiTUFYX1NDQUxFX0RSSVZFTiIsMSksV0llPW5ldyBSc2UoIkFSRUFfRFJJVkVOIiwyKX1mdW5jdGlvbiBWNG4oZSx0LG4pe3ZhciByO3RyeXtkeW4oZSx0LG4pfWNhdGNoKGEpe3Rocm93IGE9YnMoYSksRGUoYSw2MDYpPyhyPWEsdWUobmV3IHc2ZShyKSkpOnVlKGEpfXJldHVybiB0fWZ1bmN0aW9uIFU0bihlKXt2YXIgdCxuLHI7Zm9yKG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoZVtuXT09bnVsbCl0aHJvdyB1ZShuZXcgRDgoImF0IGluZGV4ICIrbikpO3JldHVybiB0PWUsbmV3IElsKHQpfWZ1bmN0aW9uIHNwKGUpe3ZhciB0LG4scjtmb3IodD1uZXcgYnQscj1uZXcgRyhlLmopO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxMiksdnQodCxuLmIpO3JldHVybiBYcih0KSxuZXcgUF8odCl9ZnVuY3Rpb24ga2EoZSl7dmFyIHQsbixyO2Zvcih0PW5ldyBidCxyPW5ldyBHKGUuaik7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDEyKSx2dCh0LG4uZSk7cmV0dXJuIFhyKHQpLG5ldyBQXyh0KX1mdW5jdGlvbiBxcyhlKXt2YXIgdCxuLHI7Zm9yKHQ9bmV3IGJ0LHI9bmV3IEcoZS5qKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTIpLHZ0KHQsbi5nKTtyZXR1cm4gWHIodCksbmV3IFBfKHQpfWZ1bmN0aW9uIEc0bihlLHQpe3ZhciBuLHIsYTtmb3IoYT1uZXcgUHIscj10LnZjKCkuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksNDQpLGtpKGEsbi5sZCgpLE0zbihlLGwobi5tZCgpLDE1KSkpO3JldHVybiBhfWZ1bmN0aW9uIEs0bihlKXt2YXIgdCxuO2ZvcihuPUJFbihBaChreShlKSkpLktjKCk7bi5PYigpOylpZih0PWVpKG4uUGIoKSksWUEoZSx0KSlyZXR1cm4gTW1uKChwZXQoKSxqX3QpLHQpO3JldHVybiBudWxsfWZ1bmN0aW9uIHpjZShlLHQpe3ZhciBuLHIsYTtmb3IoYT0wLHI9bCh0LktiKGUpLDIwKS5LYygpO3IuT2IoKTspbj1sKHIuUGIoKSwxOCksUnQoQnQoUShuLChmdCgpLFcxKSkpKXx8KythO3JldHVybiBhfWZ1bmN0aW9uIHcxdChlKXt2YXIgdCxuLHIsYTtmb3IodD1uZXcgS3J0KGUuUmQoKS5nYygpKSxhPTAscj1jeChlLlJkKCkuS2MoKSk7ci5PYigpOyluPXIuUGIoKSxEMm4odCxuLHB0KGErKykpO3JldHVybiBNOW4odC5hKX1mdW5jdGlvbiBxY2UoZSx0LG4scil7dmFyIGEsbztyZXR1cm4gbnIociksbnIobiksYT1lLnhjKHQpLG89YT09bnVsbD9uOnJldChsKGEsMTUpLGwobiwxNikpLG89PW51bGw/ZS5CYyh0KTplLnpjKHQsbyksb31mdW5jdGlvbiBXNG4oZSx0LG4scil7dmFyIGEsbyxmO2ZvcihhPXQrMTthPG47KythKWZvcihvPWE7bz50JiZyLk5lKGVbby0xXSxlW29dKT4wOy0tbylmPWVbb10sVHMoZSxvLGVbby0xXSksVHMoZSxvLTEsZil9ZnVuY3Rpb24gc24oZSx0KXt2YXIgbixyLGEsbyxmO2lmKG49dC5mLGgyKGUuYy5kLG4sdCksdC5nIT1udWxsKWZvcihhPXQuZyxvPTAsZj1hLmxlbmd0aDtvPGY7KytvKXI9YVtvXSxoMihlLmMuZSxyLHQpfWZ1bmN0aW9uIHkxdChlLHQpe3ZhciBuLHI7Zm9yKG49UnIoZSwwKTtuLmIhPW4uZC5jOyl7aWYocj1YSShHZShCcihuKSkpLHI9PXQpcmV0dXJuO2lmKHI+dCl7cGN0KG4pO2JyZWFrfX16TyhuLHQpfWZ1bmN0aW9uIFk0bihlLHQpe3ZhciBuLHIsYTtyPUc1KHQpLGE9emUoR2UoUHkociwoTnQoKSx4MCkpKSksbj1iLk1hdGgubWF4KDAsYS8yLS41KSxGQSh0LG4sMSksdnQoZSxuZXcgTmV0KHQsbikpfWZ1bmN0aW9uIFg0bihlLHQsbil7dmFyIHI7bi5VZygiU3RyYWlnaHQgTGluZSBFZGdlIFJvdXRpbmciLDEpLG4uZGgodCx5Q2UpLHI9bChhdCh0LChINSgpLFk2KSksMjcpLHJ2dChlLHIpLG4uZGgodCxPRyl9ZnVuY3Rpb24geThlKGUsdCl7ZS5uLmMubGVuZ3RoPT0wJiZ2dChlLm4sbmV3IFBIKGUucyxlLnQsZS5pKSksdnQoZS5iLHQpLGV4ZShsKGp0KGUubixlLm4uYy5sZW5ndGgtMSksMjA5KSx0KSxqbXQoZSx0KX1mdW5jdGlvbiBMQShlKXt2YXIgdDt0aGlzLmE9KHQ9bChlLmUmJmUuZSgpLDkpLG5ldyBaaCh0LGwoYzAodCx0Lmxlbmd0aCksOSksMCkpLHRoaXMuYj1XZSh3YSxSbiwxLHRoaXMuYS5hLmxlbmd0aCw1LDEpfWZ1bmN0aW9uIHhjKGUpe3ZhciB0O3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlLlRtPT09eGU/X20oYmgoZSkpKyJAIisodD1lcyhlKT4+PjAsdC50b1N0cmluZygxNikpOmUudG9TdHJpbmcoKX1mdW5jdGlvbiBRNG4oZSx0KXtyZXR1cm4gZS5oPT1TUCYmZS5tPT0wJiZlLmw9PTA/KHQmJihOYj1xdSgwLDAsMCkpLGVudCgoaUUoKSxZU2UpKSk6KHQmJihOYj1xdShlLmwsZS5tLGUuaCkpLHF1KDAsMCwwKSl9ZnVuY3Rpb24gSjRuKGUsdCl7c3dpdGNoKHQuZyl7Y2FzZSAyOnJldHVybiBlLmI7Y2FzZSAxOnJldHVybiBlLmM7Y2FzZSA0OnJldHVybiBlLmQ7Y2FzZSAzOnJldHVybiBlLmE7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24geDF0KGUsdCl7c3dpdGNoKHQuZyl7Y2FzZSAyOnJldHVybiBlLmI7Y2FzZSAxOnJldHVybiBlLmM7Y2FzZSA0OnJldHVybiBlLmQ7Y2FzZSAzOnJldHVybiBlLmE7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24geDhlKGUsdCxuLHIpe3N3aXRjaCh0KXtjYXNlIDM6cmV0dXJuIGUuZjtjYXNlIDQ6cmV0dXJuIGUuZztjYXNlIDU6cmV0dXJuIGUuaTtjYXNlIDY6cmV0dXJuIGUuan1yZXR1cm4gZDhlKGUsdCxuLHIpfWZ1bmN0aW9uIEhWKGUsdCl7aWYodD09ZS5kKXJldHVybiBlLmU7aWYodD09ZS5lKXJldHVybiBlLmQ7dGhyb3cgdWUobmV3IFluKCJOb2RlICIrdCsiIG5vdCBwYXJ0IG9mIGVkZ2UgIitlKSl9ZnVuY3Rpb24gWjRuKGUsdCl7dmFyIG47aWYobj1vUChlLkRoKCksdCksRGUobiwxMDIpKXJldHVybiBsKG4sMTkpO3Rocm93IHVlKG5ldyBZbihPYit0KyInIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIpKX1mdW5jdGlvbiB1ZihlLHQsbixyKXtpZih0PDApJDllKGUsbixyKTtlbHNle2lmKCFuLnJrKCkpdGhyb3cgdWUobmV3IFluKE9iK24ueGUoKStrTCkpO2wobiw2OSkud2soKS5DayhlLGUuaGkoKSx0LHIpfX1mdW5jdGlvbiBRbChlKXt2YXIgdDtpZihlLmIpe2lmKFFsKGUuYiksZS5iLmQhPWUuYyl0aHJvdyB1ZShuZXcgWGgpfWVsc2UgZS5kLmRjKCkmJih0PWwoZS5mLmMueGMoZS5lKSwxNiksdCYmKGUuZD10KSl9ZnVuY3Rpb24gZTVuKGUpe3B5KCk7dmFyIHQsbixyLGE7Zm9yKHQ9ZS5vLmIscj1sKGwoJGkoZS5yLChDdCgpLERyKSksMjEpLDg3KS5LYygpO3IuT2IoKTspbj1sKHIuUGIoKSwxMTcpLGE9bi5lLGEuYis9dH1mdW5jdGlvbiB0NW4oZSl7dmFyIHQsbixyO2Zvcih0aGlzLmE9bmV3IGJkLHI9bmV3IEcoZSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDE2KSx0PW5ldyBzc3QsdDNuKHQsbiksbmEodGhpcy5hLHQpfWZ1bmN0aW9uIG41bihlLHQpe3ZhciBuLHIsYTtmb3Iocj1yX24oZSx0KSxhPXJbci5sZW5ndGgtMV0vMixuPTA7bjxyLmxlbmd0aDtuKyspaWYocltuXT49YSlyZXR1cm4gdC5jK247cmV0dXJuIHQuYyt0LmIuZ2MoKX1mdW5jdGlvbiByNW4oZSx0KXtGaygpO3ZhciBuLHIsYSxvO2ZvcihyPU9sdChlKSxhPXQsbkUociwwLHIubGVuZ3RoLGEpLG49MDtuPHIubGVuZ3RoO24rKylvPVY3bihlLHJbbl0sbiksbiE9byYmQUEoZSxuLG8pfWZ1bmN0aW9uIEhjZShlLHQsbil7dmFyIHIsYTtmb3Iocj0wLGE9ZS5sZW5ndGg7cjxhO3IrKylpZihtY2UoKFhuKHIsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChyKSksdCxuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBpNW4oZSx0KXt2YXIgbixyO2ZvcihyPWUuZS5hLmVjKCkuS2MoKTtyLk9iKCk7KWlmKG49bChyLlBiKCksMjcyKSxoOW4odCxuLmQpfHx5a24odCxuLmQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGs4ZShlLHQsbixyLGEpe3ZhciBvLGYsZztmb3IoZj1hO3QuYiE9dC5jOylvPWwoWDgodCksMTApLGc9bChPYyhvLHIpLlhiKDApLDEyKSxlLmRbZy5wXT1mKyssJG4obi5jLGcpO3JldHVybiBmfWZ1bmN0aW9uIEU4ZShlLHQpe3ZhciBuLHIsYSxvLGYsZztmb3Iocj0wLG49MCxvPXQsZj0wLGc9by5sZW5ndGg7ZjxnOysrZilhPW9bZl0sYT4wJiYocis9YSwrK24pO3JldHVybiBuPjEmJihyKz1lLmQqKG4tMSkpLHJ9ZnVuY3Rpb24gczVuKGUpe3ZhciB0LG4scixhLG87cmV0dXJuIG89anhlKGUpLG49WkkoZS5jKSxyPSFuLHImJihhPW5ldyAkcCxlMShvLCJrbm93bkxheW91dGVycyIsYSksdD1uZXcgdVFlKGEpLHRvKGUuYyx0KSksb31mdW5jdGlvbiBUOGUoZSl7dmFyIHQsbixyO2ZvcihyPW5ldyBVcCxyLmErPSJbIix0PTAsbj1lLmdjKCk7dDxuOylYbyhyLGpfKGUuVmkodCkpKSwrK3Q8biYmKHIuYSs9Q28pO3JldHVybiByLmErPSJdIixyLmF9ZnVuY3Rpb24gYTVuKGUpe3JldHVybiBlLmU9PW51bGw/ZTooIWUuYyYmKGUuYz1uZXcgZWxlKChlLmYmMjU2KSE9MCxlLmksZS5hLGUuZCwoZS5mJjE2KSE9MCxlLmosZS5nLG51bGwpKSxlLmMpfWZ1bmN0aW9uIG81bihlKXtyZXR1cm4gZS5rIT0oWm4oKSxQcyk/ITE6VzUobmV3IGJuKG51bGwsbmV3IHZ3KG5ldyBocihkcihxcyhlKS5hLktjKCksbmV3IGopKSkpLG5ldyBIail9ZnVuY3Rpb24gbGYoZSl7dmFyIHQsbjtyZXR1cm4gRGUoZSwzMDcpPyhuPWl2bihsKGUsMzA3KSksdD1uLHQpOkRlKGUsNDQxKT9sKGUsNDQxKS5hOkRlKGUsNTkpP25ldyBfSmUoZSk6bmV3IHAzZShlKX1mdW5jdGlvbiBjNW4oZSl7dmFyIHQ7cmV0dXJuIGU9PW51bGw/ITA6KHQ9ZS5sZW5ndGgsdD4wJiYoWG4odC0xLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQodC0xKT09NTgpJiYhSGNlKGUsJE0sek0pKX1mdW5jdGlvbiBDOGUoZSx0KXt2YXIgbjtyZXR1cm4gcWUoZSk9PT1xZSh0KT8hMDpEZSh0LDkyKT8obj1sKHQsOTIpLGUuZT09bi5lJiZlLmQ9PW4uZCYmSW1uKGUsbi5hKSk6ITF9ZnVuY3Rpb24gZ3goZSl7c3dpdGNoKEN0KCksZS5nKXtjYXNlIDQ6cmV0dXJuIFFuO2Nhc2UgMTpyZXR1cm4gYXI7Y2FzZSAzOnJldHVybiBEcjtjYXNlIDI6cmV0dXJuIGVyO2RlZmF1bHQ6cmV0dXJuIFBjfX1mdW5jdGlvbiB1NW4oZSl7dmFyIHQsbjtpZihlLmIpcmV0dXJuIGUuYjtmb3Iobj1HMT9udWxsOmUuZDtuOyl7aWYodD1HMT9udWxsOm4uYix0KXJldHVybiB0O249RzE/bnVsbDpuLmR9cmV0dXJuIERrKCksd19lfWZ1bmN0aW9uIFM4ZShlKXt2YXIgdCxuLHI7Zm9yKHI9emUoR2UoZS5hLm9mKChwaSgpLGlZKSkpKSxuPW5ldyBHKGUuYS5TZigpKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksNjk1KSxud3QoZSx0LHIpfWZ1bmN0aW9uIGw1bihlKXt2YXIgdCxuLHIsYTtmb3IodD0oZS5qPT1udWxsJiYoZS5qPShYaygpLGE9UzBlLm1lKGUpLEE4bihhKSkpLGUuaiksbj0wLHI9dC5sZW5ndGg7bjxyOysrbik7fWZ1bmN0aW9uIFZjZShlLHQpe3ZhciBuLHI7Zm9yKHI9bmV3IEcodCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDQyKSx2dChlLmIuYixsKG4uYiw4NikpLHdvZShsKG4uYSwxOTQpLGwobi5iLDg2KSl9ZnVuY3Rpb24gaDVuKGUsdCxuKXt2YXIgcixhO2ZvcihhPWUuYS5iLHI9YS5jLmxlbmd0aDtyPG47cisrKXB3KGEsMCxuZXcgeXUoZS5hKSk7VmEodCxsKGp0KGEsYS5jLmxlbmd0aC1uKSwzMCkpLGUuYlt0LnBdPW59ZnVuY3Rpb24gZjVuKGUsdCxuLHIsYSl7U2goKSxwMChzMChpMChyMChhMChuZXcgX2YsMCksYS5kLmUtZSksdCksYS5kKSkscDAoczAoaTAocjAoYTAobmV3IF9mLDApLG4tYS5hLmUpLGEuYSkscikpfWZ1bmN0aW9uIGsxdChlLHQpe3ZhciBuO3JldHVybiBlLmQ/SHUoZS5iLHQpP2woY3IoZS5iLHQpLDQ3KToobj10LmRnKCksa2koZS5iLHQsbiksbik6dC5kZygpfWZ1bmN0aW9uIGQ1bihlKXt2YXIgdD1lLmU7ZnVuY3Rpb24gbihyKXtyZXR1cm4hcnx8ci5sZW5ndGg9PTA/IiI6IgkiK3Iuam9pbihgCglgKX1yZXR1cm4gdCYmKHQuc3RhY2t8fG4oZVtqbGVdKSl9ZnVuY3Rpb24gXzhlKGUsdCl7c3dpdGNoKHQpe2Nhc2UgMzpyZXR1cm4gZS5mIT0wO2Nhc2UgNDpyZXR1cm4gZS5nIT0wO2Nhc2UgNTpyZXR1cm4gZS5pIT0wO2Nhc2UgNjpyZXR1cm4gZS5qIT0wfXJldHVybiBfN2UoZSx0KX1mdW5jdGlvbiBFMXQoZSl7c3dpdGNoKGUuZyl7Y2FzZSAwOnJldHVybiBuZXcga25lO2Nhc2UgMTpyZXR1cm4gbmV3IFB1O2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKEZoZSsoZS5mIT1udWxsP2UuZjoiIitlLmcpKSl9fWZ1bmN0aW9uIGc1bihlKXtzd2l0Y2goZS5nKXtjYXNlIDA6cmV0dXJuIG5ldyBTUztjYXNlIDE6cmV0dXJuIG5ldyBSYztkZWZhdWx0OnRocm93IHVlKG5ldyBZbihFZmUrKGUuZiE9bnVsbD9lLmY6IiIrZS5nKSkpfX1mdW5jdGlvbiBwNW4oZSl7c3dpdGNoKGUuZyl7Y2FzZSAxOnJldHVybiBuZXcgYm5lO2Nhc2UgMjpyZXR1cm4gbmV3IHVydDtkZWZhdWx0OnRocm93IHVlKG5ldyBZbihFZmUrKGUuZiE9bnVsbD9lLmY6IiIrZS5nKSkpfX1mdW5jdGlvbiBUMXQoZSl7c3dpdGNoKGUuZyl7Y2FzZSAwOnJldHVybiBuZXcgSHdlO2Nhc2UgMTpyZXR1cm4gbmV3IHJKZTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbihGRysoZS5mIT1udWxsP2UuZjoiIitlLmcpKSl9fWZ1bmN0aW9uIFVjZSgpe1J4ZSgpO3ZhciBlLHQsbjtuPWZPbisrK0RhdGUubm93KCksZT11YShiLk1hdGguZmxvb3IobipNUCkpJlpVLHQ9dWEobi1lKmNFZSksdGhpcy5hPWVeMTUwMix0aGlzLmI9dF5oaGV9ZnVuY3Rpb24gaGYoKXtoZj1VLEVCPW5ldyBsTyhJZCwwKSxZTD1uZXcgbE8oIkZJUlNUIiwxKSwkYj1uZXcgbE8oVTN0LDIpLFhMPW5ldyBsTygiTEFTVCIsMyksZDQ9bmV3IGxPKEczdCw0KX1mdW5jdGlvbiBWVigpe1ZWPVUsS2dlPW5ldyBUcShjQ2UsMCksc1BlPW5ldyBUcSgiR1JPVVBfREVDIiwxKSxvUGU9bmV3IFRxKCJHUk9VUF9NSVhFRCIsMiksYVBlPW5ldyBUcSgiR1JPVVBfSU5DIiwzKX1mdW5jdGlvbiBiNW4oZSx0KXt2YXIgbixyLGEsbzt0JiYoYT1ucCh0LCJ4Iiksbj1uZXcgZVFlKGUpLG9FKG4uYSwobnIoYSksYSkpLG89bnAodCwieSIpLHI9bmV3IG5RZShlKSx1RShyLmEsKG5yKG8pLG8pKSl9ZnVuY3Rpb24gbTVuKGUsdCl7dmFyIG4scixhLG87dCYmKGE9bnAodCwieCIpLG49bmV3IGlRZShlKSxhRShuLmEsKG5yKGEpLGEpKSxvPW5wKHQsInkiKSxyPW5ldyBzUWUoZSksY0Uoci5hLChucihvKSxvKSkpfWZ1bmN0aW9uIHY1bihlLHQpe3ZhciBuLHIsYSxvO2ZvcihhPW5ldyBCdSh0LmdjKCkpLHI9dC5LYygpO3IuT2IoKTspbj1yLlBiKCksbz1jbGUoZSxsKG4sNTgpKSxvJiYkbihhLmMsbyk7cmV0dXJuIGF9ZnVuY3Rpb24gTnkoZSx0LG4pe3ZhciByLGE7Zm9yKGE9ZS5LYygpO2EuT2IoKTspaWYocj1hLlBiKCkscWUodCk9PT1xZShyKXx8dCE9bnVsbCYmUGkodCxyKSlyZXR1cm4gbiYmYS5RYigpLCEwO3JldHVybiExfWZ1bmN0aW9uIEMxdChlKXt2YXIgdCxuLHI7cmV0dXJuIG49ZS5qaCgpLG4/KHQ9ZS5FaCgpLERlKHQsMTY3KSYmKHI9QzF0KGwodCwxNjcpKSxyIT1udWxsKT9yKyIuIituOm4pOm51bGx9ZnVuY3Rpb24gdzVuKGUpe3ZhciB0LG4scjtyZXR1cm4gZS5lPT0wPzA6KHQ9ZS5kPDw1LG49ZS5hW2UuZC0xXSxlLmU8MCYmKHI9TWZ0KGUpLHI9PWUuZC0xJiYoLS1uLG49bnwwKSksdC09clAobiksdCl9ZnVuY3Rpb24geTVuKGUpe3ZhciB0LG4scjtyZXR1cm4gZTxsSy5sZW5ndGg/bEtbZV06KG49ZT4+NSx0PWUmMzEscj1XZShWcixkaSwyOCxuKzEsMTUsMSkscltuXT0xPDx0LG5ldyBJbSgxLG4rMSxyKSl9ZnVuY3Rpb24gUzF0KGUsdCl7dmFyIG4scjtpZih0KXtmb3Iobj0wO248ZS5pOysrbilpZihyPWwoZS5nW25dLDM3OCksci5taih0KSlyZXR1cm4hMTtyZXR1cm4gcXIoZSx0KX1lbHNlIHJldHVybiExfWZ1bmN0aW9uIEE4ZShlLHQsbil7dmFyIHIsYTtpZigrK2UuaixuLmRjKCkpcmV0dXJuITE7Zm9yKGE9bi5LYygpO2EuT2IoKTspcj1hLlBiKCksZS5xaih0LGUuWmkodCxyKSksKyt0O3JldHVybiEwfWZ1bmN0aW9uIHg1bihlLHQsbixyKXt2YXIgYSxvO2lmKG89bi10LG88Mylmb3IoO288MzspZSo9MTAsKytvO2Vsc2V7Zm9yKGE9MTtvPjM7KWEqPTEwLC0tbztlPShlKyhhPj4xKSkvYXwwfXJldHVybiByLmk9ZSwhMH1mdW5jdGlvbiBtcyhlLHQpe3ZhciBuLHIsYTtpZihuPShlLmk9PW51bGwmJlNkKGUpLGUuaSkscj10LkxqKCksciE9LTEpe2ZvcihhPW4ubGVuZ3RoO3I8YTsrK3IpaWYobltyXT09dClyZXR1cm4gcn1yZXR1cm4tMX1mdW5jdGlvbiBrNW4oZSl7dmFyIHQsbixyLGEsbztmb3Iobj1sKGUuZyw2ODkpLHI9ZS5pLTE7cj49MDstLXIpZm9yKHQ9bltyXSxhPTA7YTxyOysrYSlpZihvPW5bYV0sSW10KGUsdCxvKSl7dngoZSxyKTticmVha319ZnVuY3Rpb24gTDhlKGUpe3ZhciB0LG4scixhO2Zvcih0PW5ldyAkcCxhPW5ldyB5byhlLmIuS2MoKSk7YS5iLk9iKCk7KXI9bChhLmIuUGIoKSw3MDEpLG49UjluKHIpLFRnbih0LHQuYS5sZW5ndGgsbik7cmV0dXJuIHQuYX1mdW5jdGlvbiBNOGUoZSl7dmFyIHQ7cmV0dXJuIWUuYyYmKGUuYz1uZXcga2gpLFZzKGUuZCxuZXcgbzUpLHhTbihlKSx0PWZTbihlKSxJcyhuZXcgYm4obnVsbCxuZXcga24oZS5kLDE2KSksbmV3IElpZShlKSksdH1mdW5jdGlvbiBFNW4oZSx0KXt0LlVnKCJFbmQgbGFiZWwgcG9zdC1wcm9jZXNzaW5nIiwxKSxJcyhGaShEYyhuZXcgYm4obnVsbCxuZXcga24oZS5iLDE2KSksbmV3IGVaKSxuZXcgdFopLG5ldyBuWiksdC5WZygpfWZ1bmN0aW9uIEQ4ZShlKXtHY2UoKSx0aGlzLmM9TzEoaGUobGUoRE9uLDEpLFJuLDg0NSwwLFtYa3RdKSksdGhpcy5iPW5ldyBQcix0aGlzLmE9ZSxraSh0aGlzLmIsVFcsMSksVnUoUWt0LG5ldyBJWGUodGhpcykpfWZ1bmN0aW9uIF8xdChlLHQsbil7cWh0KCksSlFlLmNhbGwodGhpcyksdGhpcy5hPUxtKEc2dCxbZHQsd0VlXSxbNjAzLDIxN10sMCxbZ0sscTBlXSwyKSx0aGlzLmM9bmV3ICQ4LHRoaXMuZz1lLHRoaXMuZj10LHRoaXMuZD1ufWZ1bmN0aW9uIEk4ZShlLHQpe3RoaXMubj1MbShubSxbZHQsYWhlXSxbMzc2LDI4XSwxNCxbdCx1YShiLk1hdGguY2VpbChlLzMyKSldLDIpLHRoaXMubz1lLHRoaXMucD10LHRoaXMuaj1lLTE+PjEsdGhpcy5rPXQtMT4+MX1mdW5jdGlvbiBUNW4oZSl7WkgoKSxsKGUub2YoKHBpKCksVWIpKSwxODEpLkhjKChabCgpLGhZKSkmJihsKGUub2YoUzQpLDE4MSkuRmMoKFJsKCksYTkpKSxsKGUub2YoVWIpLDE4MSkuTWMoaFkpKX1mdW5jdGlvbiBBMXQoZSl7dmFyIHQsbjt0PWUuZD09KHl4KCksSVQpLG49THhlKGUpLHQmJiFufHwhdCYmbj9ydChlLmEsKE50KCksUmQpLChvZygpLFZCKSk6cnQoZS5hLChOdCgpLFJkKSwob2coKSxIQikpfWZ1bmN0aW9uIEdjZSgpe0djZT1VLHRxKCksVFc9KE50KCksbTMpLFFrdD1PMShoZShsZShDZ2UsMSksb0NlLDE0OSwwLFtTQix4MCxINixiMyx5NCxjZGUsR1QsS1QsdWRlLHRNLHE2LHZ2LFY2XSkpfWZ1bmN0aW9uIEM1bihlLHQpe3ZhciBuO3JldHVybiBuPWwoeWMoZSxQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksRWMpXSkpKSwxNSksbi5RYyhZaXQobi5nYygpKSl9ZnVuY3Rpb24gTDF0KGUsdCl7dmFyIG4scjtpZihyPW5ldyBiYShlLmEuYWQodCwhMCkpLHIuYS5nYygpPD0xKXRocm93IHVlKG5ldyBTOCk7cmV0dXJuIG49ci5hLmVjKCkuS2MoKSxuLlBiKCksbChuLlBiKCksNDApfWZ1bmN0aW9uIFM1bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gcj16ZShlLnBbdC5pLnBdKSt6ZShlLmRbdC5pLnBdKSt0Lm4uYit0LmEuYixhPXplKGUucFtuLmkucF0pK3plKGUuZFtuLmkucF0pK24ubi5iK24uYS5iLGEtcn1mdW5jdGlvbiBPOGUoZSx0KXt2YXIgbjtyZXR1cm4gZS5pPjAmJih0Lmxlbmd0aDxlLmkmJihuPWJOKGJoKHQpLmMsZS5pKSx0PW4pLHB1KGUuZywwLHQsMCxlLmkpKSx0Lmxlbmd0aD5lLmkmJlRzKHQsZS5pLG51bGwpLHR9ZnVuY3Rpb24gVVYoZSl7dmFyIHQ7cmV0dXJuIGUuRGImNjQ/Q0EoZSk6KHQ9bmV3IEFmKENBKGUpKSx0LmErPSIgKGluc3RhbmNlQ2xhc3NOYW1lOiAiLFhvKHQsZS5EKSx0LmErPSIpIix0LmEpfWZ1bmN0aW9uIEdWKGUpe3ZhciB0LG4scixhO2ZvcihhPTAsbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0PShYbihuLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQobikpLHQ8NjQmJihhPVEwKGEsbDAoMSx0KSkpO3JldHVybiBhfWZ1bmN0aW9uIF81bihlLHQsbil7dmFyIHIsYTtmb3Iocj12YShuLFZvKSxhPTA7aXUociwwKSE9MCYmYTx0O2ErKylyPWJvKHIsdmEoZVthXSxWbykpLGVbYV09WXIocikscj1idyhyLDMyKTtyZXR1cm4gWXIocil9ZnVuY3Rpb24gRk4oZSx0KXt2YXIgbixyLGEsbztmb3Iobz1XdShlLmUuRGgoKSx0KSxuPWwoZS5nLDEyNCksYT0wO2E8ZS5pOysrYSlpZihyPW5bYV0sby5hbShyLkxrKCkpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEtjZShlLHQpe3ZhciBuLHIsYTtyZXR1cm4gZS5mPjA/KGUuX2ooKSxyPXQ9PW51bGw/MDplcyh0KSxhPShyJklpKSVlLmQubGVuZ3RoLG49ajJ0KGUsYSxyLHQpLG4hPS0xKTohMX1mdW5jdGlvbiBNMXQoZSx0KXt2YXIgbixyO2UuYT1ibyhlLmEsMSksZS5jPWIuTWF0aC5taW4oZS5jLHQpLGUuYj1iLk1hdGgubWF4KGUuYix0KSxlLmQrPXQsbj10LWUuZixyPWUuZStuLGUuZj1yLWUuZS1uLGUuZT1yfWZ1bmN0aW9uIE44ZShlLHQpe3N3aXRjaCh0KXtjYXNlIDM6TXcoZSwwKTtyZXR1cm47Y2FzZSA0OkR3KGUsMCk7cmV0dXJuO2Nhc2UgNTpVdShlLDApO3JldHVybjtjYXNlIDY6R3UoZSwwKTtyZXR1cm59aThlKGUsdCl9ZnVuY3Rpb24gUncoZSx0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIEc4KGUuaiwoa2woKSx4QWUpKTtjYXNlIDI6cmV0dXJuIEc4KGUuaiwoa2woKSxFQWUpKTtkZWZhdWx0OnJldHVybiBDbigpLENuKCksX299fWZ1bmN0aW9uIFA4ZShlKXt3dygpO3ZhciB0O3N3aXRjaCh0PWUuUGMoKSx0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiB4MGU7Y2FzZSAxOnJldHVybiBuZXcgU2FlKFhyKHRbMF0pKTtkZWZhdWx0OnJldHVybiBuZXcgb29lKFU0bih0KSl9fWZ1bmN0aW9uIEQxdChlLHQpe2UuWGooKTt0cnl7ZS5kLmJkKGUuZSsrLHQpLGUuZj1lLmQuaixlLmc9LTF9Y2F0Y2gobil7dGhyb3cgbj1icyhuKSxEZShuLDc3KT91ZShuZXcgWGgpOnVlKG4pfX1mdW5jdGlvbiBXY2UoKXtXY2U9VSxpcGU9bmV3IE5TLE1QZT1uZXcgSDAsRFBlPW5ldyBBSSxJUGU9bmV3IExJLE9QZT1uZXcgZjgsTlBlPW5ldyB0cmUsUFBlPW5ldyBucmUsQlBlPW5ldyBycmUsRlBlPW5ldyBpcmV9ZnVuY3Rpb24gS1YoZSx0KXtpeWUoKTt2YXIgbixyO3JldHVybiBuPU1PKCh6eigpLHp6KCksTkwpKSxyPW51bGwsdD09biYmKHI9bCh4dShLU2UsZSksNjI0KSkscnx8KHI9bmV3IFhzdChlKSx0PT1uJiZyYyhLU2UsZSxyKSkscn1mdW5jdGlvbiBJMXQoZSl7QnkoKTt2YXIgdDtyZXR1cm4oZS5xP2UucTooQ24oKSxDbigpLG1nKSkuX2IoKE50KCksZzMpKT90PWwoUShlLGczKSwyMDMpOnQ9bChRKGVvKGUpLGVNKSwyMDMpLHR9ZnVuY3Rpb24gUHkoZSx0KXt2YXIgbixyO3JldHVybiByPW51bGwsbnMoZSwoTnQoKSxrVykpJiYobj1sKFEoZSxrVyksOTYpLG4ucGYodCkmJihyPW4ub2YodCkpKSxyPT1udWxsJiYocj1RKGVvKGUpLHQpKSxyfWZ1bmN0aW9uIE8xdChlLHQpe3ZhciBuLHIsYTtyZXR1cm4gRGUodCw0NCk/KG49bCh0LDQ0KSxyPW4ubGQoKSxhPU95KGUuUmMoKSxyKSx5ZChhLG4ubWQoKSkmJihhIT1udWxsfHxlLlJjKCkuX2IocikpKTohMX1mdW5jdGlvbiBuMShlLHQpe3ZhciBuLHIsYTtyZXR1cm4gZS5mPjAmJihlLl9qKCkscj10PT1udWxsPzA6ZXModCksYT0ociZJaSklZS5kLmxlbmd0aCxuPXk5ZShlLGEscix0KSxuKT9uLm1kKCk6bnVsbH1mdW5jdGlvbiBSdShlLHQsbil7dmFyIHIsYSxvO3JldHVybiBlLlBqKCk/KHI9ZS5pLG89ZS5RaigpLElOKGUscix0KSxhPWUuSWooMyxudWxsLHQscixvKSxuP24ubmooYSk6bj1hKTpJTihlLGUuaSx0KSxufWZ1bmN0aW9uIEE1bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gcj1uZXcgWmcoZS5lLDQsMTAsKGE9dC5jLERlKGEsOTApP2woYSwyOSk6KFRuKCksS2YpKSxudWxsLGYyKGUsdCksITEpLG4/bi5uaihyKTpuPXIsbn1mdW5jdGlvbiBMNW4oZSx0LG4pe3ZhciByLGE7cmV0dXJuIHI9bmV3IFpnKGUuZSwzLDEwLG51bGwsKGE9dC5jLERlKGEsOTApP2woYSwyOSk6KFRuKCksS2YpKSxmMihlLHQpLCExKSxuP24ubmoocik6bj1yLG59ZnVuY3Rpb24gTjF0KGUpe3B5KCk7dmFyIHQ7cmV0dXJuIHQ9bmV3IEVvKGwoZS5lLm9mKChwaSgpLGk3KSksOCkpLGUuQi5IYygoWmwoKSxhQykpJiYodC5hPD0wJiYodC5hPTIwKSx0LmI8PTAmJih0LmI9MjApKSx0fWZ1bmN0aW9uIGtiKGUpe0NkKCk7dmFyIHQsbjtyZXR1cm4gbj1ZcihlKSx0PVlyKHViKGUsMzIpKSx0IT0wP25ldyBxb3Qobix0KTpuPjEwfHxuPDA/bmV3IFFnKDEsbik6eTZ0W25dfWZ1bmN0aW9uIFJOKGUsdCl7dmFyIG47cmV0dXJuIHdjKGUpJiZ3Yyh0KSYmKG49ZSV0LF9QPG4mJm48Wm0pP246bWIoKE5rZSh3YyhlKT9NZihlKTplLHdjKHQpP01mKHQpOnQsITApLE5iKSl9ZnVuY3Rpb24gTUEoZSx0KXt2YXIgbjtiRG4odCksbj1sKFEoZSwoTnQoKSxwVykpLDI4MyksbiYmcnQoZSxwVyxJN24obikpLFlwKGUuYyksWXAoZS5mKSxBNmUoZS5kKSxBNmUobChRKGUsd1cpLDIxNCkpfWZ1bmN0aW9uIE01bihlKXt2YXIgdCxuLHIsYTtmb3Iocj1ja24oZSksVnMocixqOHQpLGE9ZS5kLGEuYy5sZW5ndGg9MCxuPW5ldyBHKHIpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSw0NjYpLHJhKGEsdC5iKX1mdW5jdGlvbiBZY2UoZSl7dmFyIHQ7ZS5jIT0wJiYodD1sKGp0KGUuYSxlLmIpLDI5NCksdC5iPT0xPygrK2UuYixlLmI8ZS5hLmMubGVuZ3RoJiZFcihsKGp0KGUuYSxlLmIpLDI5NCkpKTotLXQuYiwtLWUuYyl9ZnVuY3Rpb24gRDVuKGUpe3ZhciB0O3Q9ZS5hO2RvIHQ9bCh4cihuZXcgaHIoZHIocXModCkuYS5LYygpLG5ldyBqKSkpLDE4KS5kLmksdC5rPT0oWm4oKSxBYSkmJnZ0KGUuZSx0KTt3aGlsZSh0Lms9PShabigpLEFhKSl9ZnVuY3Rpb24gUDF0KGUpe3RoaXMuZT1XZShWcixkaSwyOCxlLmxlbmd0aCwxNSwxKSx0aGlzLmM9V2UoaWgscGcsMjgsZS5sZW5ndGgsMTYsMSksdGhpcy5iPVdlKGloLHBnLDI4LGUubGVuZ3RoLDE2LDEpLHRoaXMuZj0wfWZ1bmN0aW9uIEk1bihlKXt2YXIgdCxuO2ZvcihlLmo9V2UoTmEsWm8sMjgsZS5wLmMubGVuZ3RoLDE1LDEpLG49bmV3IEcoZS5wKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTApLGUualt0LnBdPXQuby5iL2UuaX1mdW5jdGlvbiBPNW4oZSx0KXt2YXIgbixyLGEsbztmb3Iobz10LmIuYixlLmE9bmV3IG9zLGUuYj1XZShWcixkaSwyOCxvLDE1LDEpLG49MCxhPVJyKHQuYiwwKTthLmIhPWEuZC5jOylyPWwoQnIoYSksNDApLHIuZz1uKyt9ZnVuY3Rpb24gQjF0KGUsdCxuKXt2YXIgcixhLG8sZjtmb3Iobz10LWUuZSxmPW4tZS5mLGE9bmV3IEcoZS5hKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTcyKSxxTihyLHIucytvLHIudCtmKTtlLmU9dCxlLmY9bn1mdW5jdGlvbiBqTihlLHQpe3ZhciBuLHI7Zm9yKHI9dC5sZW5ndGgsbj0wO248cjtuKz0yKUV1KGUsKFhuKG4sdC5sZW5ndGgpLHQuY2hhckNvZGVBdChuKSksKFhuKG4rMSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KG4rMSkpKX1mdW5jdGlvbiBONW4oZSx0KXt0LlVnKCJNaW4gU2l6ZSBQb3N0cHJvY2Vzc2luZyIsMSksSGkoZSwodWcoKSxUNCksYi5NYXRoLm1heCh6ZShHZShhdChlLFQ0KSkpLHplKEdlKGF0KGUsbU0pKSkpKSx0LlZnKCl9ZnVuY3Rpb24gQjhlKCl7QjhlPVUsWk5lPW5ldyBsdygxNSksYV90PW5ldyBIYSgocGkoKSxfMiksWk5lKSxjX3Q9bmV3IEhhKEV2LDE1KSxvX3Q9bmV3IEhhKHpnZSxwdCgwKSksc190PW5ldyBIYShaNixsVCl9ZnVuY3Rpb24gbWgoKXttaD1VLGlGPW5ldyBFcSgiUE9SVFMiLDApLEN2PW5ldyBFcSgiUE9SVF9MQUJFTFMiLDEpLHJGPW5ldyBFcSgiTk9ERV9MQUJFTFMiLDIpLEE0PW5ldyBFcSgiTUlOSU1VTV9TSVpFIiwzKX1mdW5jdGlvbiBXVigpe1dWPVUsUkI9bmV3IEJzZSgiUDFfV0lEVEhfQVBQUk9YSU1BVElPTiIsMCksVlc9bmV3IEJzZSgiUDJfUEFDS0lORyIsMSkscmdlPW5ldyBCc2UoIlAzX1dISVRFU1BBQ0VfRUxJTUlOQVRJT04iLDIpfWZ1bmN0aW9uIEYxdChlKXtpZihlLmI9PW51bGwpe2Zvcig7ZS5hLk9iKCk7KWlmKGUuYj1lLmEuUGIoKSwhbChlLmIsNTQpLkpoKCkpcmV0dXJuITA7cmV0dXJuIGUuYj1udWxsLCExfWVsc2UgcmV0dXJuITB9ZnVuY3Rpb24gT0UoZSx0LG4pe3ZhciByLGEsbztmb3IoYT1udWxsLG89ZS5iO287KXtpZihyPWUuYS5OZSh0LG8uZCksbiYmcj09MClyZXR1cm4gbztyPj0wP289by5hWzFdOihhPW8sbz1vLmFbMF0pfXJldHVybiBhfWZ1bmN0aW9uICROKGUsdCxuKXt2YXIgcixhLG87Zm9yKGE9bnVsbCxvPWUuYjtvOyl7aWYocj1lLmEuTmUodCxvLmQpLG4mJnI9PTApcmV0dXJuIG87cjw9MD9vPW8uYVswXTooYT1vLG89by5hWzFdKX1yZXR1cm4gYX1mdW5jdGlvbiBQNW4oZSx0LG4scil7dmFyIGEsbyxmO3JldHVybiBhPSExLFJNbihlLmYsbixyKSYmKHI2bihlLmYsZS5hW3RdW25dLGUuYVt0XVtyXSksbz1lLmFbdF0sZj1vW3JdLG9bcl09b1tuXSxvW25dPWYsYT0hMCksYX1mdW5jdGlvbiBSMXQoZSx0LG4pe3ZhciByLGEsbyxmO2ZvcihhPWwoY3IoZS5iLG4pLDE4Mykscj0wLGY9bmV3IEcodC5qKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTEzKSxhW28uZC5wXSYmKytyO3JldHVybiByfWZ1bmN0aW9uIEY4ZShlLHQsbil7dmFyIHIsYTtyPWwoeHUodUMsdCksMTIyKSxhPWwoeHUoS00sdCksMTIyKSxuPyhyYyh1QyxlLHIpLHJjKEtNLGUsYSkpOihyYyhLTSxlLHIpLHJjKHVDLGUsYSkpfWZ1bmN0aW9uIGoxdChlLHQpe3ZhciBuLHIsYSxvO3JldHVybiBuPXQ+PjUsdCY9MzEsYT1lLmQrbisodD09MD8wOjEpLHI9V2UoVnIsZGksMjgsYSwxNSwxKSxPeG4ocixlLmEsbix0KSxvPW5ldyBJbShlLmUsYSxyKSxpQShvKSxvfWZ1bmN0aW9uIEI1bihlLHQpe3ZhciBuLHIsYTtmb3Iocj1uZXcgaHIoZHIocXMoZSkuYS5LYygpLG5ldyBqKSk7anIocik7KWlmKG49bCh4cihyKSwxOCksYT1uLmQuaSxhLmM9PXQpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gUjhlKGUsdCxuKXt2YXIgcixhLG8sZixnO3JldHVybiBmPWUuayxnPXQuayxyPW5bZi5nXVtnLmddLGE9R2UoUHkoZSxyKSksbz1HZShQeSh0LHIpKSxiLk1hdGgubWF4KChucihhKSxhKSwobnIobyksbykpfWZ1bmN0aW9uIEY1bigpe3JldHVybiBFcnJvci5zdGFja1RyYWNlTGltaXQ+MD8oYi5FcnJvci5zdGFja1RyYWNlTGltaXQ9RXJyb3Iuc3RhY2tUcmFjZUxpbWl0PTY0LCEwKToic3RhY2siaW4gbmV3IEVycm9yfWZ1bmN0aW9uIFI1bihlLHQpe3JldHVybiBBMSgpLEExKCksZjAoQWIpLChiLk1hdGguYWJzKGUtdCk8PUFifHxlPT10fHxpc05hTihlKSYmaXNOYU4odCk/MDplPHQ/LTE6ZT50PzE6dXcoaXNOYU4oZSksaXNOYU4odCkpKT4wfWZ1bmN0aW9uIGo4ZShlLHQpe3JldHVybiBBMSgpLEExKCksZjAoQWIpLChiLk1hdGguYWJzKGUtdCk8PUFifHxlPT10fHxpc05hTihlKSYmaXNOYU4odCk/MDplPHQ/LTE6ZT50PzE6dXcoaXNOYU4oZSksaXNOYU4odCkpKTwwfWZ1bmN0aW9uICQxdChlLHQpe3JldHVybiBBMSgpLEExKCksZjAoQWIpLChiLk1hdGguYWJzKGUtdCk8PUFifHxlPT10fHxpc05hTihlKSYmaXNOYU4odCk/MDplPHQ/LTE6ZT50PzE6dXcoaXNOYU4oZSksaXNOYU4odCkpKTw9MH1mdW5jdGlvbiBYY2UoZSx0KXtmb3IodmFyIG49MDshdFtuXXx8dFtuXT09IiI7KW4rKztmb3IodmFyIHI9dFtuKytdO248dC5sZW5ndGg7bisrKSF0W25dfHx0W25dPT0iInx8KHIrPWUrdFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gejF0KGUpe3ZhciB0LG47cmV0dXJuIHQ9bChLbihlLmEsNCksMTI5KSx0IT1udWxsPyhuPVdlKGVwZSxyMGUsNDI0LHQubGVuZ3RoLDAsMSkscHUodCwwLG4sMCx0Lmxlbmd0aCksbik6TV90fWZ1bmN0aW9uIHExdChlKXt2YXIgdCxuLHIsYSxvO2lmKGU9PW51bGwpcmV0dXJuIG51bGw7Zm9yKG89bmV3IGJ0LG49VGNlKGUpLHI9MCxhPW4ubGVuZ3RoO3I8YTsrK3IpdD1uW3JdLHZ0KG8sVHUodCwhMCkpO3JldHVybiBvfWZ1bmN0aW9uIEgxdChlKXt2YXIgdCxuLHIsYSxvO2lmKGU9PW51bGwpcmV0dXJuIG51bGw7Zm9yKG89bmV3IGJ0LG49VGNlKGUpLHI9MCxhPW4ubGVuZ3RoO3I8YTsrK3IpdD1uW3JdLHZ0KG8sVHUodCwhMCkpO3JldHVybiBvfWZ1bmN0aW9uIFYxdChlKXt2YXIgdCxuLHIsYSxvO2lmKGU9PW51bGwpcmV0dXJuIG51bGw7Zm9yKG89bmV3IGJ0LG49VGNlKGUpLHI9MCxhPW4ubGVuZ3RoO3I8YTsrK3IpdD1uW3JdLHZ0KG8sVHUodCwhMCkpO3JldHVybiBvfWZ1bmN0aW9uIFUxdChlLHQpe3ZhciBuLHIsYTtpZihlLmMpTXcoZS5jLHQpO2Vsc2UgZm9yKG49dC1naChlKSxhPW5ldyBHKGUuYSk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE2MyksVTF0KHIsZ2gocikrbil9ZnVuY3Rpb24gRzF0KGUsdCl7dmFyIG4scixhO2lmKGUuYylEdyhlLmMsdCk7ZWxzZSBmb3Iobj10LXdsKGUpLGE9bmV3IEcoZS5kKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTYzKSxHMXQocix3bChyKStuKX1mdW5jdGlvbiBJZihlLHQsbil7dmFyIHIsYSxvLGY7Zm9yKG89dCtuLEdhKHQsbyxlLmxlbmd0aCksZj0iIixhPXQ7YTxvOylyPWIuTWF0aC5taW4oYSsxZTQsbyksZis9ZXBuKGUuc2xpY2UoYSxyKSksYT1yO3JldHVybiBmfWZ1bmN0aW9uICQ4ZShlKXtzd2l0Y2goZS5nKXtjYXNlIDEyOmNhc2UgMTM6Y2FzZSAxNDpjYXNlIDE1OmNhc2UgMTY6Y2FzZSAxNzpjYXNlIDE4OmNhc2UgMTk6Y2FzZSAyMDpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBsMigpe2wyPVUsQTFlPW5ldyB1TyhIRWUsMCksYkxlPW5ldyB1TyhXM3QsMSksTDFlPW5ldyB1TygkaGUsMiksQlQ9bmV3IHVPKCRFZSwzKSxQVD1uZXcgdU8oIkdSRUVEWV9NT0RFTF9PUkRFUiIsNCl9ZnVuY3Rpb24gRWQoKXtFZD1VLEUyPW5ldyBtcShJZCwwKSxDRGU9bmV3IG1xKCJOT0RFU19BTkRfRURHRVMiLDEpLHlkZT1uZXcgbXEoIlBSRUZFUl9FREdFUyIsMikseGRlPW5ldyBtcSgiUFJFRkVSX05PREVTIiwzKX1mdW5jdGlvbiB6OGUoZSx0LG4scixhLG8pe3RoaXMuYT1lLHRoaXMuYz10LHRoaXMuYj1uLHRoaXMuZj1yLHRoaXMuZD1hLHRoaXMuZT1vLHRoaXMuYz4wJiZ0aGlzLmI+MCYmKHRoaXMuZz1hSCh0aGlzLmMsdGhpcy5iLHRoaXMuYSkpfWZ1bmN0aW9uIGo1bihlLHQpe3ZhciBuPWUuYSxyO3Q9U3RyaW5nKHQpLG4uaGFzT3duUHJvcGVydHkodCkmJihyPW5bdF0pO3ZhciBhPSh2Y2UoKSxfMGUpW3R5cGVvZiByXSxvPWE/YShyKTpaN2UodHlwZW9mIHIpO3JldHVybiBvfWZ1bmN0aW9uIE5FKGUpe3ZhciB0LG4scjtpZihyPW51bGwsdD1QZCBpbiBlLmEsbj0hdCxuKXRocm93IHVlKG5ldyBkZCgiRXZlcnkgZWxlbWVudCBtdXN0IGhhdmUgYW4gaWQuIikpO3JldHVybiByPXh4KFdnKGUsUGQpKSxyfWZ1bmN0aW9uIGp3KGUpe3ZhciB0LG47Zm9yKG49ZnB0KGUpLHQ9bnVsbDtlLmM9PTI7KUxpKGUpLHR8fCh0PShEaSgpLERpKCksbmV3IEJfKDIpKSxRbSh0LG4pLG49dCksbi5KbShmcHQoZSkpO3JldHVybiBufWZ1bmN0aW9uIFlWKGUsdCl7dmFyIG4scixhO3JldHVybiBlLl9qKCkscj10PT1udWxsPzA6ZXModCksYT0ociZJaSklZS5kLmxlbmd0aCxuPXk5ZShlLGEscix0KSxuPyhXaHQoZSxuKSxuLm1kKCkpOm51bGx9ZnVuY3Rpb24gSzF0KGUsdCl7cmV0dXJuIGUuZT50LmU/MTplLmU8dC5lPy0xOmUuZD50LmQ/ZS5lOmUuZDx0LmQ/LXQuZTplLmUqVzdlKGUuYSx0LmEsZS5kKX1mdW5jdGlvbiBXMXQoZSl7cmV0dXJuIGU+PTQ4JiZlPDQ4K2IuTWF0aC5taW4oMTAsMTApP2UtNDg6ZT49OTcmJmU8OTc/ZS05NysxMDplPj02NSYmZTw2NT9lLTY1KzEwOi0xfWZ1bmN0aW9uICQ1bihlLHQpe2lmKHQuYz09ZSlyZXR1cm4gdC5kO2lmKHQuZD09ZSlyZXR1cm4gdC5jO3Rocm93IHVlKG5ldyBZbigiSW5wdXQgZWRnZSBpcyBub3QgY29ubmVjdGVkIHRvIHRoZSBpbnB1dCBwb3J0LiIpKX1mdW5jdGlvbiB6NW4oZSl7aWYoUVYod1QsZSkpcmV0dXJuIEhuKCksU1Q7aWYoUVYoRmZlLGUpKXJldHVybiBIbigpLFBiO3Rocm93IHVlKG5ldyBZbigiRXhwZWN0aW5nIHRydWUgb3IgZmFsc2UiKSl9ZnVuY3Rpb24gcThlKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSBJbGU6cmV0dXJuIHMyKGUpO2Nhc2UgUWtlOnJldHVybiBqOChlKTtjYXNlIEN4OnJldHVybiBBcnQoZSk7ZGVmYXVsdDpyZXR1cm4gZT09bnVsbD8wOmZ3KGUpfX1mdW5jdGlvbiBUZChlLHQpe2lmKGUuYTwwKXRocm93IHVlKG5ldyBuYygiRGlkIG5vdCBjYWxsIGJlZm9yZSguLi4pIG9yIGFmdGVyKC4uLikgYmVmb3JlIGNhbGxpbmcgYWRkKC4uLikuIikpO3JldHVybiBCeWUoZSxlLmEsdCksZX1mdW5jdGlvbiBIOGUoZSl7cmV0dXJuIEJIKCksRGUoZSwxNjIpP2woY3IobEYsQzZ0KSwyOTUpLlJnKGUpOkh1KGxGLGJoKGUpKT9sKGNyKGxGLGJoKGUpKSwyOTUpLlJnKGUpOm51bGx9ZnVuY3Rpb24gS3UoZSl7dmFyIHQsbjtyZXR1cm4gZS5EYiYzMnx8KG49KHQ9bChLbihlLDE2KSwyOSkseXIodHx8ZS5paSgpKS15cihlLmlpKCkpKSxuIT0wJiZweChlLDMyLFdlKHdhLFJuLDEsbiw1LDEpKSksZX1mdW5jdGlvbiBweChlLHQsbil7dmFyIHI7ZS5EYiZ0P249PW51bGw/VEVuKGUsdCk6KHI9bXVlKGUsdCkscj09LTE/ZS5FYj1uOlRzKGptKGUuRWIpLHIsbikpOm4hPW51bGwmJktDbihlLHQsbil9ZnVuY3Rpb24gcTVuKGUsdCxuLHIpe3ZhciBhLG87dC5jLmxlbmd0aCE9MCYmKGE9RlRuKG4sciksbz1Sa24odCksSXMobFYobmV3IGJuKG51bGwsbmV3IGtuKG8sMSkpLG5ldyBhOCksbmV3IENhdChlLG4sYSxyKSkpfWZ1bmN0aW9uIEg1bihlLHQpe3ZhciBuLHIsYSxvO3JldHVybiByPWUuYS5sZW5ndGgtMSxuPXQtZS5iJnIsbz1lLmMtdCZyLGE9ZS5jLWUuYiZyLEVydChuPGEpLG4+PW8/KHp5bihlLHQpLC0xKTooJHluKGUsdCksMSl9ZnVuY3Rpb24gWFYoZSl7dmFyIHQsbixyO2lmKHI9ZS5KaCgpLCFyKWZvcih0PTAsbj1lLlBoKCk7bjtuPW4uUGgoKSl7aWYoKyt0Pm9oZSlyZXR1cm4gbi5RaCgpO2lmKHI9bi5KaCgpLHJ8fG49PWUpYnJlYWt9cmV0dXJuIHJ9ZnVuY3Rpb24gWTF0KGUsdCl7dmFyIG47cmV0dXJuIHFlKHQpPT09cWUoZSk/ITA6IURlKHQsMjEpfHwobj1sKHQsMjEpLG4uZ2MoKSE9ZS5nYygpKT8hMTplLkljKG4pfWZ1bmN0aW9uIFY1bihlLHQpe3JldHVybiBlLmU8dC5lPy0xOmUuZT50LmU/MTplLmY8dC5mPy0xOmUuZj50LmY/MTplcyhlKS1lcyh0KX1mdW5jdGlvbiBRVihlLHQpe3JldHVybiBucihlKSx0PT1udWxsPyExOnZuKGUsdCk/ITA6ZS5sZW5ndGg9PXQubGVuZ3RoJiZ2bihlLnRvTG93ZXJDYXNlKCksdC50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBhcChlKXt2YXIgdCxuO3JldHVybiBpdShlLC0xMjkpPjAmJml1KGUsMTI4KTwwPyhaaXQoKSx0PVlyKGUpKzEyOCxuPW5fZVt0XSwhbiYmKG49bl9lW3RdPW5ldyBPcihlKSksbik6bmV3IE9yKGUpfWZ1bmN0aW9uIEttKCl7S209VSxjND1uZXcgZHEoSWQsMCksYkFlPW5ldyBkcSgiSU5TSURFX1BPUlRfU0lERV9HUk9VUFMiLDEpLG8xZT1uZXcgZHEoIkdST1VQX01PREVMX09SREVSIiwyKSxjMWU9bmV3IGRxKCRFZSwzKX1mdW5jdGlvbiBVNW4oZSl7dmFyIHQ7cmV0dXJuIGUuYnx8UnVuKGUsKHQ9RmZuKGUuZSxlLmEpLCF0fHwhdm4oRmZlLG4xKCghdC5iJiYodC5iPW5ldyBkaCgoVG4oKSxObyksWWMsdCkpLHQuYiksInF1YWxpZmllZCIpKSkpLGUuY31mdW5jdGlvbiBHNW4oZSx0KXt2YXIgbixyO2ZvcihuPShYbih0LGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQodCkpLHI9dCsxO3I8ZS5sZW5ndGgmJihYbihyLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQocik9PW4pOykrK3I7cmV0dXJuIHItdH1mdW5jdGlvbiBLNW4oZSx0KXsoIXQmJmNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQhPW51bGw/Y29uc29sZS5ncm91cENvbGxhcHNlZDpjb25zb2xlLmdyb3VwPz9jb25zb2xlLmxvZykuY2FsbChjb25zb2xlLGUpfWZ1bmN0aW9uIFc1bihlLHQsbixyKXtyPT1lLGwobi5iLDY4KSxsKG4uYiw2OCksbChyLmIsNjgpLGwoci5iLDY4KS5jLmIsRDZlKHIsdCxlKX1mdW5jdGlvbiBZNW4oZSl7dmFyIHQsbjtmb3IodD1uZXcgRyhlLmcpO3QuYTx0LmMuYy5sZW5ndGg7KWwocmUodCksNTY4KTtuPW5ldyBsYnQoZS5nLHplKGUuYSksZS5jKSxFRG4obiksZS5nPW4uYixlLmQ9bi5hfWZ1bmN0aW9uIFgxdChlLHQsbil7dmFyIHIsYSxvO2ZvcihvPW5ldyBHKG4uYSk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDIyNSkscj1uZXcgTnEobChjcihlLmEsYS5iKSw2OCkpLHZ0KHQuYSxyKSxYMXQoZSxyLGEpfWZ1bmN0aW9uIFg1bihlLHQsbil7dmFyIHIsYSxvO3JldHVybiByPWwoT2UoWGwoZS5hKSx0KSw4OSksbz0oYT1yLmMsYXx8KFRuKCksdGQpKSwoby5WaCgpP3liKGUuYixsKG8sNTQpKTpvKT09bj9qVShyKTpzRShyLG4pLG99ZnVuY3Rpb24gVjhlKGUsdCxuKXt0LmI9Yi5NYXRoLm1heCh0LmIsLW4uYSksdC5jPWIuTWF0aC5tYXgodC5jLG4uYS1lLmEpLHQuZD1iLk1hdGgubWF4KHQuZCwtbi5iKSx0LmE9Yi5NYXRoLm1heCh0LmEsbi5iLWUuYil9ZnVuY3Rpb24gVThlKGUsdCxuKXt0aGlzLmM9ZSx0aGlzLmY9bmV3IGJ0LHRoaXMuZT1uZXcgcWEsdGhpcy5qPW5ldyBHNGUsdGhpcy5uPW5ldyBHNGUsdGhpcy5iPXQsdGhpcy5nPW5ldyBlZih0LmMsdC5kLHQuYix0LmEpLHRoaXMuYT1ufWZ1bmN0aW9uIFFjZShlKXt2YXIgdCxuLHIsYTtmb3IodGhpcy5hPW5ldyBiZCx0aGlzLmQ9bmV3IEtzLHRoaXMuZT0wLG49ZSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKXQ9bltyXSwhdGhpcy5mJiYodGhpcy5mPXQpLHdvZSh0aGlzLHQpfWZ1bmN0aW9uIFExdChlKXtDZCgpLGUubGVuZ3RoPT0wPyh0aGlzLmU9MCx0aGlzLmQ9MSx0aGlzLmE9aGUobGUoVnIsMSksZGksMjgsMTUsWzBdKSk6KHRoaXMuZT0xLHRoaXMuZD1lLmxlbmd0aCx0aGlzLmE9ZSxpQSh0aGlzKSl9ZnVuY3Rpb24gREEoZSx0LG4pe0pRZS5jYWxsKHRoaXMpLHRoaXMuYT1XZShHNnQsd0VlLDIxNywodDEoKSxoZShsZShzNCwxKSxpdCwyMzcsMCxbR2MsJHUsS2NdKSkubGVuZ3RoLDAsMSksdGhpcy5iPWUsdGhpcy5kPXQsdGhpcy5jPW59ZnVuY3Rpb24gUTVuKGUpe3ZhciB0LG4scixhLG8sZjtmb3IoZj1sKFEoZSwoZnQoKSx6aSkpLDEyKSxydChmLHpULGUuaS5uLmIpLHQ9a2QoZS5lKSxyPXQsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sRmEobixmKX1mdW5jdGlvbiBKNW4oZSl7dmFyIHQsbixyLGEsbyxmO2ZvcihuPWwoUShlLChmdCgpLHppKSksMTIpLHJ0KG4selQsZS5pLm4uYiksdD1rZChlLmcpLGE9dCxvPTAsZj1hLmxlbmd0aDtvPGY7KytvKXI9YVtvXSxwbyhyLG4pfWZ1bmN0aW9uIFo1bihlLHQpe2ZvZSgpO3ZhciBuLHI7Zm9yKHI9bmV3IGhyKGRyKHNwKGUpLmEuS2MoKSxuZXcgaikpO2pyKHIpOylpZihuPWwoeHIociksMTgpLG4uZC5pPT10fHxuLmMuaT09dClyZXR1cm4gbjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBKMXQoZSx0KXt2YXIgbixyO3JldHVybiBuPXQucWkoZS5hKSxuJiYocj1laShuMSgoIW4uYiYmKG4uYj1uZXcgZGgoKFRuKCksTm8pLFljLG4pKSxuLmIpLF9pKSksciE9bnVsbCk/cjp0LnhlKCl9ZnVuY3Rpb24gZTZuKGUsdCl7dmFyIG4scjtyZXR1cm4gbj10LnFpKGUuYSksbiYmKHI9ZWkobjEoKCFuLmImJihuLmI9bmV3IGRoKChUbigpLE5vKSxZYyxuKSksbi5iKSxfaSkpLHIhPW51bGwpP3I6dC54ZSgpfWZ1bmN0aW9uIHQ2bihlLHQpe3ZhciBuLHI7cmV0dXJuIG49cnUoZS5hLmMucCx0LmEuYy5wKSxuIT0wP246KHI9cnUoZS5hLmQuaS5wLHQuYS5kLmkucCksciE9MD9yOnJ1KHQuYS5kLnAsZS5hLmQucCkpfWZ1bmN0aW9uIG42bihlLHQpe3ZhciBuLHIsYSxvO2ZvcihyPTAsYT10LmdjKCk7cjxhOysrciluPXQuVGwociksRGUobiwxMDIpJiZsKG4sMTkpLkJiJmV1JiYobz10LlVsKHIpLG8hPW51bGwmJmNsZShlLGwobyw1OCkpKX1mdW5jdGlvbiBaMXQoZSx0KXt2YXIgbixyLGE7aWYodnQod0ssZSksdC5GYyhlKSxuPWwoY3IoWDBlLGUpLDIxKSxuKWZvcihhPW4uS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMjcpLGdjKHdLLHIsMCkhPS0xfHxaMXQocix0KX1mdW5jdGlvbiByNm4oZSx0LG4pe3ZhciByLGE7T3VlKGUuZSx0LG4sKEN0KCksZXIpKSxPdWUoZS5pLHQsbixhciksZS5hJiYoYT1sKFEodCwoZnQoKSx6aSkpLDEyKSxyPWwoUShuLHppKSwxMiksdm9lKGUuZyxhLHIpKX1mdW5jdGlvbiBlZHQoZSx0LG4pe3ZhciByLGEsbztyPXQuYy5wLG89dC5wLGUuYltyXVtvXT1uZXcgS2F0KGUsdCksbiYmKGUuYVtyXVtvXT1uZXcgUFllKHQpLGE9bChRKHQsKGZ0KCksdTMpKSwxMCksYSYmeG4oZS5kLGEsdCkpfWZ1bmN0aW9uIGk2bihlLHQsbil7dmFyIHIsYSxvLGY7cmV0dXJuIG89dC5qLGY9bi5qLG8hPWY/by5nLWYuZzoocj1lLmZbdC5wXSxhPWUuZltuLnBdLHI9PTAmJmE9PTA/MDpyPT0wPy0xOmE9PTA/MTpZaShyLGEpKX1mdW5jdGlvbiBzNm4oKXt2YXIgZTtyZXR1cm4gYUshPTAmJihlPURhdGUubm93KCksZS1sNnQ+MmUzJiYobDZ0PWUsb0s9Yi5zZXRUaW1lb3V0KEh1biwxMCkpKSxhSysrPT0wPyhzd24oKFh3ZSgpLEdTZSkpLCEwKTohMX1mdW5jdGlvbiBhNm4oZSx0LG4pe3ZhciByOyhJNnQ/KHU1bihlKSwhMCk6TzZ0fHxQNnQ/KERrKCksITApOk42dCYmKERrKCksITEpKSYmKHI9bmV3IGZpdCh0KSxyLmI9bixnOW4oZSxyKSl9ZnVuY3Rpb24gSmNlKGUsdCl7dmFyIG47bj0hZS5BLkhjKChtaCgpLEN2KSl8fGUucT09KFJhKCksTXUpLGUudS5IYygoUmwoKSx2cCkpP24/WURuKGUsdCk6VnZ0KGUsdCk6ZS51LkhjKFliKSYmKG4/cERuKGUsdCk6c3d0KGUsdCkpfWZ1bmN0aW9uIHRkdChlKXt2YXIgdDtxZShhdChlLChwaSgpLG43KSkpPT09cWUoKHJwKCksb1kpKSYmKGRzKGUpPyh0PWwoYXQoZHMoZSksbjcpLDM0NiksSGkoZSxuNyx0KSk6SGkoZSxuNyxETSkpfWZ1bmN0aW9uIG82bihlKXt2YXIgdCxuO3JldHVybiBucyhlLmQuaSwoTnQoKSxIVCkpPyh0PWwoUShlLmMuaSxIVCksMTcpLG49bChRKGUuZC5pLEhUKSwxNykscnUodC5hLG4uYSk+MCk6ITF9ZnVuY3Rpb24gbmR0KGUsdCxuKXtyZXR1cm4gbmV3IGVmKGIuTWF0aC5taW4oZS5hLHQuYSktbi8yLGIuTWF0aC5taW4oZS5iLHQuYiktbi8yLGIuTWF0aC5hYnMoZS5hLXQuYSkrbixiLk1hdGguYWJzKGUuYi10LmIpK24pfWZ1bmN0aW9uIHJkdChlKXt2YXIgdDt0aGlzLmQ9bmV3IGJ0LHRoaXMuaj1uZXcgcWEsdGhpcy5nPW5ldyBxYSx0PWUuZy5iLHRoaXMuZj1sKFEoZW8odCksKE50KCksUmgpKSw4OCksdGhpcy5lPXplKEdlKHRVKHQseTQpKSl9ZnVuY3Rpb24gaWR0KGUpe3RoaXMuZD1uZXcgYnQsdGhpcy5lPW5ldyBlMix0aGlzLmM9V2UoVnIsZGksMjgsKEN0KCksaGUobGUoT28sMSksYXUsNjQsMCxbUGMsUW4sYXIsRHIsZXJdKSkubGVuZ3RoLDE1LDEpLHRoaXMuYj1lfWZ1bmN0aW9uIEc4ZShlLHQsbil7dmFyIHI7c3dpdGNoKHI9bltlLmddW3RdLGUuZyl7Y2FzZSAxOmNhc2UgMzpyZXR1cm4gbmV3IGx0KDAscik7Y2FzZSAyOmNhc2UgNDpyZXR1cm4gbmV3IGx0KHIsMCk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gc2R0KGUsdCxuKXt2YXIgcixhO2E9bChHTyh0LmYpLDIwNSk7dHJ5e2EucmYoZSxuKSxsYXQodC5mLGEpfWNhdGNoKG8pe3Rocm93IG89YnMobyksRGUobywxMDMpPyhyPW8sdWUocikpOnVlKG8pfX1mdW5jdGlvbiBhZHQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdztyZXR1cm4gcj1udWxsLGc9RmtlKGhFKCksdCksbz1udWxsLGcmJihhPW51bGwsdz1Qa2UoZyxuKSxmPW51bGwsdyE9bnVsbCYmKGY9ZS5xZihnLHcpKSxhPWYsbz1hKSxyPW8scn1mdW5jdGlvbiBaY2UoZSx0LG4scil7dmFyIGE7aWYoYT1lLmxlbmd0aCx0Pj1hKXJldHVybiBhO2Zvcih0PXQ+MD90OjA7dDxhJiYhbWNlKChYbih0LGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQodCkpLG4scik7dCsrKTtyZXR1cm4gdH1mdW5jdGlvbiBqMShlLHQpe3ZhciBuLHI7Zm9yKHI9ZS5jLmxlbmd0aCx0Lmxlbmd0aDxyJiYodD1WeihuZXcgQXJyYXkociksdCkpLG49MDtuPHI7KytuKVRzKHQsbixlLmNbbl0pO3JldHVybiB0Lmxlbmd0aD5yJiZUcyh0LHIsbnVsbCksdH1mdW5jdGlvbiBvZHQoZSx0KXt2YXIgbixyO2ZvcihyPWUuYS5sZW5ndGgsdC5sZW5ndGg8ciYmKHQ9VnoobmV3IEFycmF5KHIpLHQpKSxuPTA7bjxyOysrbilUcyh0LG4sZS5hW25dKTtyZXR1cm4gdC5sZW5ndGg+ciYmVHModCxyLG51bGwpLHR9ZnVuY3Rpb24gUEUoZSx0KXt2YXIgbixyO2lmKCsrZS5qLHQhPW51bGwmJihuPShyPWUuYS5DYixEZShyLDk5KT9sKHIsOTkpLnRoKCk6bnVsbCksZkVuKHQsbikpKXtweChlLmEsNCxuKTtyZXR1cm59cHgoZS5hLDQsbCh0LDEyOSkpfWZ1bmN0aW9uIGM2bihlKXt2YXIgdDtpZihlPT1udWxsKXJldHVybiBudWxsO2lmKHQ9ZFRuKFR1KGUsITApKSx0PT1udWxsKXRocm93IHVlKG5ldyBKaWUoIkludmFsaWQgaGV4QmluYXJ5IHZhbHVlOiAnIitlKyInIikpO3JldHVybiB0fWZ1bmN0aW9uIEpWKGUsdCxuKXt2YXIgcjt0LmEubGVuZ3RoPjAmJih2dChlLmIsbmV3IEFpdCh0LmEsbikpLHI9dC5hLmxlbmd0aCwwPHI/dC5hPXRmKHQuYSwwLDApOjA+ciYmKHQuYSs9TW50KFdlKGtmLEFkLDI4LC1yLDE1LDEpKSkpfWZ1bmN0aW9uIGNkdChlLHQsbil7dmFyIHIsYSxvO2lmKCFuW3QuZF0pZm9yKG5bdC5kXT0hMCxhPW5ldyBHKFo1KHQpKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMjE4KSxvPUhWKHIsdCksY2R0KGUsbyxuKX1mdW5jdGlvbiBoMihlLHQsbil7dmFyIHIsYSxvO3JldHVybiBhPWwoY3IoZS5lLHQpLDQwMCksYT8obz1aeWUoYSxuKSxJbnQoZSxhKSxvKToocj1uZXcgQTRlKGUsdCxuKSxraShlLmUsdCxyKSxpb3QociksbnVsbCl9ZnVuY3Rpb24gdTZuKGUsdCxuLHIpe3ZhciBhLG8sZjtyZXR1cm4gYT1uZXcgWmcoZS5lLDEsMTMsKGY9dC5jLGZ8fChUbigpLHRkKSksKG89bi5jLG98fChUbigpLHRkKSksZjIoZSx0KSwhMSkscj9yLm5qKGEpOnI9YSxyfWZ1bmN0aW9uIGV1ZSgpe3JldHVybiBZVSgpLGhlKGxlKHc3dCwxKSxpdCwxNjQsMCxbbTd0LGI3dCx2N3QsYzd0LG83dCx1N3QsZjd0LGg3dCxsN3QscDd0LGc3dCxkN3Qsczd0LGk3dCxhN3Qsbjd0LHQ3dCxyN3QsWjZ0LEo2dCxlN3QsSDBlXSl9ZnVuY3Rpb24gQkUoZSl7c3dpdGNoKGUuZyl7Y2FzZSA0OnJldHVybiBuZXcgbHQoMCwtMSk7Y2FzZSAxOnJldHVybiBuZXcgbHQoMSwwKTtjYXNlIDI6cmV0dXJuIG5ldyBsdCgtMSwwKTtkZWZhdWx0OnJldHVybiBuZXcgbHQoMCwxKX19ZnVuY3Rpb24gdHVlKGUpe3N3aXRjaChlLmcpe2Nhc2UgMTpyZXR1cm4gSnMoKSx3ZjtjYXNlIDQ6cmV0dXJuIEpzKCksdWM7Y2FzZSAyOnJldHVybiBKcygpLHZjO2Nhc2UgMzpyZXR1cm4gSnMoKSxRMX1yZXR1cm4gSnMoKSxKMX1mdW5jdGlvbiBsNm4oZSl7dmFyIHQ7c3dpdGNoKHQ9ZS5oaihudWxsKSx0KXtjYXNlIDEwOnJldHVybiAwO2Nhc2UgMTU6cmV0dXJuIDE7Y2FzZSAxNDpyZXR1cm4gMjtjYXNlIDExOnJldHVybiAzO2Nhc2UgMjE6cmV0dXJuIDR9cmV0dXJuLTF9ZnVuY3Rpb24gcjEoKXtyMT1VLFBuPW5ldyBiTygiUEFSRU5UUyIsMCksaGE9bmV3IGJPKCJOT0RFUyIsMSksemQ9bmV3IGJPKCJFREdFUyIsMikseXY9bmV3IGJPKCJQT1JUUyIsMyksUzI9bmV3IGJPKCJMQUJFTFMiLDQpfWZ1bmN0aW9uIGg2bihlLHQsbil7dmFyIHI7c3dpdGNoKHI9bi5xLmdldEZ1bGxZZWFyKCktTGIrTGIscjwwJiYocj0tciksdCl7Y2FzZSAxOmUuYSs9cjticmVhaztjYXNlIDI6YWcoZSxyJTEwMCwyKTticmVhaztkZWZhdWx0OmFnKGUscix0KX19ZnVuY3Rpb24gUnIoZSx0KXt2YXIgbixyO2lmKEV5KHQsZS5iKSx0Pj1lLmI+PjEpZm9yKHI9ZS5jLG49ZS5iO24+dDstLW4pcj1yLmI7ZWxzZSBmb3Iocj1lLmEuYSxuPTA7bjx0OysrbilyPXIuYTtyZXR1cm4gbmV3IGhpdChlLHQscil9ZnVuY3Rpb24gWlYoKXtaVj1VLGowZT1uZXcgXzNlKCJOVU1fT0ZfRVhURVJOQUxfU0lERVNfVEhBTl9OVU1fT0ZfRVhURU5TSU9OU19MQVNUIiwwKSx4X2U9bmV3IF8zZSgiQ09STkVSX0NBU0VTX1RIQU5fU0lOR0xFX1NJREVfTEFTVCIsMSl9ZnVuY3Rpb24gdWR0KGUpe3RoaXMuYj1uZXcgYnQsdGhpcy5lPW5ldyBidCx0aGlzLmQ9ZSx0aGlzLmE9IV9rKEZpKG5ldyBibihudWxsLG5ldyB2dyhuZXcgTjEoZS5iKSkpLG5ldyBXbChuZXcgdmVlKSkpLkJkKChBbSgpLHp4KSl9ZnVuY3Rpb24gbGR0KGUsdCl7dmFyIG4scixhLG87Zm9yKG49MCxhPW5ldyBHKHQuYSk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDEwKSxvPXIuby5hK3IuZC5jK3IuZC5iK2UuaixuPWIuTWF0aC5tYXgobixvKTtyZXR1cm4gbn1mdW5jdGlvbiBoZHQoZSx0KXt2YXIgbixyLGE7YT10LmQuaSxyPWEuaywhKHI9PShabigpLFBzKXx8cj09SzEpJiYobj1uZXcgaHIoZHIocXMoYSkuYS5LYygpLG5ldyBqKSksanIobikmJmtpKGUuayx0LGwoeHIobiksMTgpKSl9ZnVuY3Rpb24gZjZuKGUsdCl7cmV0dXJuIHRwKCksWWkoKGUuYS5iPT0wP25ldyBsdChlLmMuZS5hLGUuYy5lLmIpOmwoQmsoZS5hKSw4KSkuYiwodC5hLmI9PTA/bmV3IGx0KHQuYy5lLmEsdC5jLmUuYik6bChCayh0LmEpLDgpKS5iKX1mdW5jdGlvbiBkNm4oZSx0KXtyZXR1cm4gdHAoKSxZaSgoZS5hLmI9PTA/bmV3IGx0KGUuYy5lLmEsZS5jLmUuYik6bChCayhlLmEpLDgpKS5hLCh0LmEuYj09MD9uZXcgbHQodC5jLmUuYSx0LmMuZS5iKTpsKEJrKHQuYSksOCkpLmEpfWZ1bmN0aW9uIGc2bihlLHQpe3JldHVybiB0cCgpLFlpKChlLmEuYj09MD9uZXcgbHQoZS5iLmUuYSxlLmIuZS5iKTpsKG8wKGUuYSksOCkpLmEsKHQuYS5iPT0wP25ldyBsdCh0LmIuZS5hLHQuYi5lLmIpOmwobzAodC5hKSw4KSkuYSl9ZnVuY3Rpb24gcDZuKGUsdCl7cmV0dXJuIHRwKCksWWkoKGUuYS5iPT0wP25ldyBsdChlLmIuZS5hLGUuYi5lLmIpOmwobzAoZS5hKSw4KSkuYiwodC5hLmI9PTA/bmV3IGx0KHQuYi5lLmEsdC5iLmUuYik6bChvMCh0LmEpLDgpKS5iKX1mdW5jdGlvbiB0Nigpe3Q2PVUsS2I9bmV3IHZPKCJESVNUUklCVVRFRCIsMCksdEY9bmV3IHZPKCJKVVNUSUZJRUQiLDEpLFhOZT1uZXcgdk8oIkJFR0lOIiwyKSxJTT1uZXcgdk8oY1QsMyksUU5lPW5ldyB2TygiRU5EIiw0KX1mdW5jdGlvbiBudWUoZSx0KXt2YXIgbixyLGE7cmV0dXJuIHI9TW4oZS5EaCgpLHQpLG49dC1lLmppKCksbjwwPyhhPWUuSWgociksYT49MD9lLldoKGEpOnF1ZShlLHIpKTpuPDA/cXVlKGUscik6bChyLDY5KS53aygpLkJrKGUsZS5oaSgpLG4pfWZ1bmN0aW9uIGZkdChlKXt2YXIgdCxuLHI7Zm9yKHI9KCFlLm8mJihlLm89bmV3IHhsKChzdSgpLENnKSxMMixlLDApKSxlLm8pLG49ci5jLktjKCk7bi5lIT1uLmkuZ2MoKTspdD1sKG4uWWooKSw0NCksdC5tZCgpO3JldHVybiBpTihyKX1mdW5jdGlvbiBJdChlKXt2YXIgdDtpZihEZShlLmEsNCkpe2lmKHQ9SDhlKGUuYSksdD09bnVsbCl0aHJvdyB1ZShuZXcgbmMoTnl0K2UuYisiJy4gIitPeXQrKEdnKGhGKSxoRi5rKStKQ2UpKTtyZXR1cm4gdH1lbHNlIHJldHVybiBlLmF9ZnVuY3Rpb24gYjZuKGUsdCl7dmFyIG4scjtpZihlLmoubGVuZ3RoIT10LmoubGVuZ3RoKXJldHVybiExO2ZvcihuPTAscj1lLmoubGVuZ3RoO248cjtuKyspaWYoIXZuKGUualtuXSx0Lmpbbl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGdyKGUpe3ZhciB0O3RyeXtyZXR1cm4gdD1lLmkuWGIoZS5lKSxlLlhqKCksZS5nPWUuZSsrLHR9Y2F0Y2gobil7dGhyb3cgbj1icyhuKSxEZShuLDc3KT8oZS5YaigpLHVlKG5ldyBfYykpOnVlKG4pfX1mdW5jdGlvbiBydWUoZSl7dmFyIHQ7dHJ5e3JldHVybiB0PWUuYy5WaShlLmUpLGUuWGooKSxlLmc9ZS5lKyssdH1jYXRjaChuKXt0aHJvdyBuPWJzKG4pLERlKG4sNzcpPyhlLlhqKCksdWUobmV3IF9jKSk6dWUobil9fWZ1bmN0aW9uIGVVKGUpe3ZhciB0LG4scixhO2ZvcihhPTAsbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0PShYbihuLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQobikpLHQ+PTY0JiZ0PDEyOCYmKGE9UTAoYSxsMCgxLHQtNjQpKSk7cmV0dXJuIGF9ZnVuY3Rpb24gdFUoZSx0KXt2YXIgbixyO3JldHVybiByPW51bGwsbnMoZSwocGkoKSxyOSkpJiYobj1sKFEoZSxyOSksOTYpLG4ucGYodCkmJihyPW4ub2YodCkpKSxyPT1udWxsJiZlbyhlKSYmKHI9UShlbyhlKSx0KSkscn1mdW5jdGlvbiBtNm4oZSx0KXt2YXIgbjtyZXR1cm4gbj1sKFEoZSwoTnQoKSxjYykpLDc1KSxac2UodCxPOHQpP24/Q2gobik6KG49bmV3IGJsLHJ0KGUsY2MsbikpOm4mJnJ0KGUsY2MsbnVsbCksbn1mdW5jdGlvbiBJQSgpe0lBPVUsWF9lPShwaSgpLF9OZSksVzBlPW9OZSxJN3Q9WjYsWV9lPV8yLEI3dD0oZFUoKSxBX2UpLFA3dD1TX2UsRjd0PU1fZSxON3Q9Q19lLE83dD0oTGNlKCksR19lKSxLMGU9TDd0LFdfZT1NN3Qsdks9RDd0fWZ1bmN0aW9uIG5VKGUpe3N3aXRjaCh3M2UoKSx0aGlzLmM9bmV3IGJ0LHRoaXMuZD1lLGUuZyl7Y2FzZSAwOmNhc2UgMjp0aGlzLmE9XzVlKHBBZSksdGhpcy5iPWdzO2JyZWFrO2Nhc2UgMzpjYXNlIDE6dGhpcy5hPXBBZSx0aGlzLmI9aWF9fWZ1bmN0aW9uIHY2bihlKXt2YXIgdDtVOChsKFEoZSwoTnQoKSxNcykpLDEwMSkpJiYodD1lLmIsZTJ0KChTbigwLHQuYy5sZW5ndGgpLGwodC5jWzBdLDMwKSkpLGUydChsKGp0KHQsdC5jLmxlbmd0aC0xKSwzMCkpKX1mdW5jdGlvbiB3Nm4oZSx0KXt0LlVnKCJTZWxmLUxvb3AgcG9zdC1wcm9jZXNzaW5nIiwxKSxJcyhGaShGaShEYyhuZXcgYm4obnVsbCxuZXcga24oZS5iLDE2KSksbmV3IFJaKSxuZXcgalopLG5ldyAkWiksbmV3IEVqKSx0LlZnKCl9ZnVuY3Rpb24gZGR0KGUsdCxuKXt2YXIgcixhO2lmKGUuYylVdShlLmMsZS5jLmkrdCksR3UoZS5jLGUuYy5qK24pO2Vsc2UgZm9yKGE9bmV3IEcoZS5iKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTYzKSxkZHQocix0LG4pfWZ1bmN0aW9uIHk2bihlKXt2YXIgdDtpZihlPT1udWxsKXJldHVybiBudWxsO2lmKHQ9c0luKFR1KGUsITApKSx0PT1udWxsKXRocm93IHVlKG5ldyBKaWUoIkludmFsaWQgYmFzZTY0QmluYXJ5IHZhbHVlOiAnIitlKyInIikpO3JldHVybiB0fWZ1bmN0aW9uIGZmKGUsdCl7dmFyIG47bj1lLmZkKHQpO3RyeXtyZXR1cm4gbi5QYigpfWNhdGNoKHIpe3Rocm93IHI9YnMociksRGUociwxMTIpP3VlKG5ldyB0YygiQ2FuJ3QgZ2V0IGVsZW1lbnQgIit0KSk6dWUocil9fWZ1bmN0aW9uIGdkdChlLHQpe3ZhciBuLHIsYTtmb3Iobj1lLm8sYT1sKGwoJGkoZS5yLHQpLDIxKSw4NykuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTE3KSxyLmUuYT1FN24ocixuLmEpLHIuZS5iPW4uYip6ZShHZShyLmIub2YocEspKSl9ZnVuY3Rpb24geDZuKGUsdCl7dmFyIG4scixhO2ZvcihhPW5ldyBCdSh0LmdjKCkpLHI9dC5LYygpO3IuT2IoKTspbj1sKHIuUGIoKSwyOTMpLG4uYz09bi5mP3FFKGUsbixuLmMpOlY5bihlLG4pfHwkbihhLmMsbik7cmV0dXJuIGF9ZnVuY3Rpb24gcGR0KGUpe3ZhciB0O3JldHVybiB0PW5ldyB0Yix0LmErPSJuIixlLmshPShabigpLFBzKSYmaGkoaGkoKHQuYSs9IigiLHQpLGFhZShlLmspLnRvTG93ZXJDYXNlKCkpLCIpIiksaGkoKHQuYSs9Il8iLHQpLEhOKGUpKSx0LmF9ZnVuY3Rpb24gazZuKGUsdCl7dmFyIG4scixhLG87cmV0dXJuIGE9ZS5rLG49emUoR2UoUShlLChmdCgpLGwzKSkpKSxvPXQuayxyPXplKEdlKFEodCxsMykpKSxvIT0oWm4oKSxVcyk/LTE6YSE9VXM/MTpuPT1yPzA6bjxyPy0xOjF9ZnVuY3Rpb24gRTZuKGUsdCl7dmFyIG4scjtyZXR1cm4gbj1sKGwoY3IoZS5nLHQuYSksNDIpLmEsNjgpLHI9bChsKGNyKGUuZyx0LmIpLDQyKS5hLDY4KSxwYih0LmEsdC5iKS1wYih0LmEsbXllKG4uYikpLXBiKHQuYixteWUoci5iKSl9ZnVuY3Rpb24gYmR0KGUsdCl7dmFyIG47c3dpdGNoKG49bChRbyhlLmIsdCksMTI3KS5uLHQuZyl7Y2FzZSAxOmUudD49MCYmKG4uZD1lLnQpO2JyZWFrO2Nhc2UgMzplLnQ+PTAmJihuLmE9ZS50KX1lLkMmJihuLmI9ZS5DLmIsbi5jPWUuQy5jKX1mdW5jdGlvbiBPQSgpe09BPVUsdkRlPW5ldyBoTyhjQ2UsMCksdmRlPW5ldyBoTygkaGUsMSksd2RlPW5ldyBoTygiTElORUFSX1NFR01FTlRTIiwyKSxyTT1uZXcgaE8oIkJSQU5ERVNfS09FUEYiLDMpLGlNPW5ldyBoTyhjeXQsNCl9ZnVuY3Rpb24gTkEoKXtOQT1VLHVCPW5ldyBocShuRywwKSxiSz1uZXcgaHEoeWhlLDEpLG1LPW5ldyBocSh4aGUsMiksbEI9bmV3IGhxKGtoZSwzKSx1Qi5hPSExLGJLLmE9ITAsbUsuYT0hMSxsQi5hPSEwfWZ1bmN0aW9uIGJ4KCl7Yng9VSxhQj1uZXcgbHEobkcsMCksc0I9bmV3IGxxKHloZSwxKSxvQj1uZXcgbHEoeGhlLDIpLGNCPW5ldyBscShraGUsMyksYUIuYT0hMSxzQi5hPSEwLG9CLmE9ITEsY0IuYT0hMH1mdW5jdGlvbiBteChlLHQsbixyKXt2YXIgYTtyZXR1cm4gbj49MD9lLlNoKHQsbixyKTooZS5QaCgpJiYocj0oYT1lLkZoKCksYT49MD9lLkFoKHIpOmUuUGgoKS5UaChlLC0xLWEsbnVsbCxyKSkpLGUuQ2godCxuLHIpKX1mdW5jdGlvbiBLOGUoZSx0KXtzd2l0Y2godCl7Y2FzZSA3OiFlLmUmJihlLmU9bmV3IExuKGpzLGUsNyw0KSksJHIoZS5lKTtyZXR1cm47Y2FzZSA4OiFlLmQmJihlLmQ9bmV3IExuKGpzLGUsOCw1KSksJHIoZS5kKTtyZXR1cm59TjhlKGUsdCl9ZnVuY3Rpb24gSGkoZSx0LG4pe3JldHVybiBuPT1udWxsPyghZS5vJiYoZS5vPW5ldyB4bCgoc3UoKSxDZyksTDIsZSwwKSksWVYoZS5vLHQpKTooIWUubyYmKGUubz1uZXcgeGwoKHN1KCksQ2cpLEwyLGUsMCkpLEdOKGUubyx0LG4pKSxlfWZ1bmN0aW9uIG1kdChlLHQpe0NuKCk7dmFyIG4scixhLG87Zm9yKG49ZSxvPXQsRGUoZSwyMSkmJiFEZSh0LDIxKSYmKG49dCxvPWUpLGE9bi5LYygpO2EuT2IoKTspaWYocj1hLlBiKCksby5IYyhyKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBUNm4oZSx0LG4scil7aWYodC5hPHIuYSlyZXR1cm4hMDtpZih0LmE9PXIuYSl7aWYodC5iPHIuYilyZXR1cm4hMDtpZih0LmI9PXIuYiYmZS5iPm4uYilyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBpdWUoZSx0KXtyZXR1cm4gSWEoZSk/ISFyNnRbdF06ZS5TbT8hIWUuU21bdF06ZnkoZSk/ISFuNnRbdF06aHkoZSk/ISF0NnRbdF06ITF9ZnVuY3Rpb24gQzZuKGUpe3ZhciB0O3Q9ZS5hO2RvIHQ9bCh4cihuZXcgaHIoZHIoa2EodCkuYS5LYygpLG5ldyBqKSkpLDE4KS5jLmksdC5rPT0oWm4oKSxBYSkmJmUuYi5GYyh0KTt3aGlsZSh0Lms9PShabigpLEFhKSk7ZS5iPWxmKGUuYil9ZnVuY3Rpb24gdmR0KGUsdCl7dmFyIG4scixhO2ZvcihhPWUscj1uZXcgaHIoZHIoa2EodCkuYS5LYygpLG5ldyBqKSk7anIocik7KW49bCh4cihyKSwxOCksbi5jLmkuYyYmKGE9Yi5NYXRoLm1heChhLG4uYy5pLmMucCkpO3JldHVybiBhfWZ1bmN0aW9uIFM2bihlLHQpe3ZhciBuLHIsYTtmb3IoYT0wLHI9bChsKCRpKGUucix0KSwyMSksODcpLktjKCk7ci5PYigpOyluPWwoci5QYigpLDExNyksYSs9bi5kLmQrbi5iLk1mKCkuYituLmQuYSxyLk9iKCkmJihhKz1lLncpO3JldHVybiBhfWZ1bmN0aW9uIF82bihlLHQpe3ZhciBuLHIsYTtmb3IoYT0wLHI9bChsKCRpKGUucix0KSwyMSksODcpLktjKCk7ci5PYigpOyluPWwoci5QYigpLDExNyksYSs9bi5kLmIrbi5iLk1mKCkuYStuLmQuYyxyLk9iKCkmJihhKz1lLncpO3JldHVybiBhfWZ1bmN0aW9uIHdkdChlKXt2YXIgdCxuLHIsYTtpZihyPTAsYT1IeShlKSxhLmMubGVuZ3RoPT0wKXJldHVybiAxO2ZvcihuPW5ldyBHKGEpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwyNykscis9d2R0KHQpO3JldHVybiByfWZ1bmN0aW9uIEE2bihlKXt2YXIgdCxuLHI7Zm9yKHI9ZS5jLmEsZS5wPShYcihyKSxuZXcgT2wocikpLG49bmV3IEcocik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDEwKSx0LnA9aGtuKHQpLmE7Q24oKSxWcyhlLnAsbmV3IHFlZSl9ZnVuY3Rpb24gTDZuKGUsdCxuKXt2YXIgcixhLG8sZjtyZXR1cm4gcj1lLmRkKHQpLHIhPS0xJiYoZS5QaigpPyhvPWUuUWooKSxmPXJIKGUsciksYT1lLklqKDQsZixudWxsLHIsbyksbj9uLm5qKGEpOm49YSk6ckgoZSxyKSksbn1mdW5jdGlvbiBUbyhlLHQsbil7dmFyIHIsYSxvLGY7cmV0dXJuIHI9ZS5kZCh0KSxyIT0tMSYmKGUuUGooKT8obz1lLlFqKCksZj12eChlLHIpLGE9ZS5Jaig0LGYsbnVsbCxyLG8pLG4/bi5uaihhKTpuPWEpOnZ4KGUscikpLG59ZnVuY3Rpb24gTTZuKGUsdCxuLHIpe3ZhciBhLG8sZjtuLlhoKHQpJiYoRm8oKSxWb2UodCk/KGE9bChuLk1oKHQpLDE2MCksbjZuKGUsYSkpOihvPShmPXQsZj9sKHIsNTQpLmdpKGYpOm51bGwpLG8mJkljbihuLk1oKHQpLG8pKSl9ZnVuY3Rpb24gclUoZSx0LG4scil7dmFyIGEsbyxmO3JldHVybiBvPU1uKGUuRGgoKSx0KSxhPXQtZS5qaSgpLGE8MD8oZj1lLkloKG8pLGY+PTA/ZS5MaChmLG4sITApOkh3KGUsbyxuKSk6bChvLDY5KS53aygpLnlrKGUsZS5oaSgpLGEsbixyKX1mdW5jdGlvbiBENm4oZSx0LG4scil7dmFyIGEsbztvPXQucGYoKHBpKCkscjcpKT9sKHQub2YocjcpLDIxKTplLmosYT1wNG4obyksYSE9KFlVKCksSDBlKSYmKG4mJiEkOGUoYSl8fEp4ZShnVG4oZSxhLHIpLHQpKX1mdW5jdGlvbiBJNm4oZSl7c3dpdGNoKGUuZyl7Y2FzZSAxOnJldHVybiBQdygpLGlCO2Nhc2UgMzpyZXR1cm4gUHcoKSxyQjtjYXNlIDI6cmV0dXJuIFB3KCksVTBlO2Nhc2UgNDpyZXR1cm4gUHcoKSxWMGU7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gTzZuKGUsdCxuKXtpZihlLmUpc3dpdGNoKGUuYil7Y2FzZSAxOkVwbihlLmMsdCxuKTticmVhaztjYXNlIDA6VHBuKGUuYyx0LG4pfWVsc2UgJGN0KGUuYyx0LG4pO2UuYVt0LnBdW24ucF09ZS5jLmksZS5hW24ucF1bdC5wXT1lLmMuZX1mdW5jdGlvbiB5ZHQoZSl7dmFyIHQsbjtpZihlPT1udWxsKXJldHVybiBudWxsO2ZvcihuPVdlKHdnLGR0LDE5OSxlLmxlbmd0aCwwLDIpLHQ9MDt0PG4ubGVuZ3RoO3QrKyluW3RdPWwoRG1uKGVbdF0sZVt0XS5sZW5ndGgpLDE5OSk7cmV0dXJuIG59ZnVuY3Rpb24gaVUoZSl7dmFyIHQ7aWYoX2NlKGUpKXJldHVybiBkSChlKSxlLnVsKCkmJih0PXpBKGUuZSxlLmIsZS5jLGUuYSxlLmopLGUuaj10KSxlLmc9ZS5hLCsrZS5hLCsrZS5jLGUuaT0wLGUuajt0aHJvdyB1ZShuZXcgX2MpfWZ1bmN0aW9uIE42bihlLHQpe3ZhciBuLHIsYSxvO3JldHVybiBvPWUubyxuPWUucCxvPG4/byo9bzpuKj1uLHI9bytuLG89dC5vLG49dC5wLG88bj9vKj1vOm4qPW4sYT1vK24scjxhPy0xOnI9PWE/MDoxfWZ1bmN0aW9uIGYyKGUsdCl7dmFyIG4scixhO2lmKGE9dGd0KGUsdCksYT49MClyZXR1cm4gYTtpZihlLm9sKCkpe2ZvcihyPTA7cjxlLmk7KytyKWlmKG49ZS5wbChsKGUuZ1tyXSw1OCkpLHFlKG4pPT09cWUodCkpcmV0dXJuIHJ9cmV0dXJuLTF9ZnVuY3Rpb24gbjYoZSx0LG4pe3ZhciByLGE7aWYoYT1lLmdjKCksdD49YSl0aHJvdyB1ZShuZXcgbXkodCxhKSk7aWYoZS5TaSgpJiYocj1lLmRkKG4pLHI+PTAmJnIhPXQpKXRocm93IHVlKG5ldyBZbihXUCkpO3JldHVybiBlLlhpKHQsbil9ZnVuY3Rpb24gVzhlKGUsdCl7aWYodGhpcy5hPWwoWHIoZSksMjUzKSx0aGlzLmI9bChYcih0KSwyNTMpLGUuRWQodCk+MHx8ZT09KFVpZSgpLHcwZSl8fHQ9PShHaWUoKSx5MGUpKXRocm93IHVlKG5ldyBZbigiSW52YWxpZCByYW5nZTogIitIY3QoZSx0KSkpfWZ1bmN0aW9uIHhkdChlKXt2YXIgdCxuO2Zvcih0aGlzLmI9bmV3IGJ0LHRoaXMuYz1lLHRoaXMuYT0hMSxuPW5ldyBHKGUuYSk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDEwKSx0aGlzLmE9dGhpcy5hfHQuaz09KFpuKCksUHMpfWZ1bmN0aW9uIFA2bihlLHQpe3ZhciBuLHIsYTtmb3Iobj1odyhuZXcgU20sZSksYT1uZXcgRyh0KTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTI1KSxwMChzMChpMChhMChyMChuZXcgX2YsMCksMCksbikscikpO3JldHVybiBufWZ1bmN0aW9uIGtkdChlLHQsbil7bi5VZygiQ29tcG91bmQgZ3JhcGggcHJlcHJvY2Vzc29yIiwxKSxlLmE9bmV3IEN3LCR2dChlLHQsbnVsbCksTExuKGUsdCksWlRuKGUpLHJ0KHQsKGZ0KCksakxlKSxlLmEpLGUuYT1udWxsLE5sKGUuYiksbi5WZygpfWZ1bmN0aW9uIEVkdChlLHQsbil7dmFyIHIsYSxvO2ZvcihhPW5ldyBocihkcigodD9rYShlKTpxcyhlKSkuYS5LYygpLG5ldyBqKSk7anIoYSk7KXI9bCh4cihhKSwxOCksbz10P3IuYy5pOnIuZC5pLG8uaz09KFpuKCksY3UpJiZWYShvLG4pfWZ1bmN0aW9uIEI2bihlLHQpe3ZhciBuLHIsYTtmb3IodC5VZygiVW50cmVlaWZ5IiwxKSxuPWwoUShlLChRaSgpLHNJZSkpLDE1KSxhPW4uS2MoKTthLk9iKCk7KXI9bChhLlBiKCksNjUpLHVpKHIuYi5kLHIpLHVpKHIuYy5iLHIpO3QuVmcoKX1mdW5jdGlvbiBGNm4oZSl7dmFyIHQsbixyO2ZvcihyPWwoJGkoZS5hLChSeSgpLEtLKSksMTUpLktjKCk7ci5PYigpOyluPWwoci5QYigpLDEwNSksdD1veGUobiksVmsoZSxuLHRbMF0sKE93KCksYTMpLDApLFZrKGUsbix0WzFdLG8zLDEpfWZ1bmN0aW9uIFI2bihlKXt2YXIgdCxuLHI7Zm9yKHI9bCgkaShlLmEsKFJ5KCksV0spKSwxNSkuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksMTA1KSx0PW94ZShuKSxWayhlLG4sdFswXSwoT3coKSxhMyksMCksVmsoZSxuLHRbMV0sbzMsMSl9ZnVuY3Rpb24gQnkoKXtCeT1VLF9XPW5ldyBicShJZCwwKSxiZGU9bmV3IGJxKCJQT1JUX1BPU0lUSU9OIiwxKSxHNj1uZXcgYnEoIk5PREVfU0laRV9XSEVSRV9TUEFDRV9QRVJNSVRTIiwyKSxVNj1uZXcgYnEoIk5PREVfU0laRSIsMyl9ZnVuY3Rpb24gc1UoKXtzVT1VLGlnZT1uZXcgRnNlKCJJTlRFUkFDVElWRV9OT0RFX1JFT1JERVJFUiIsMCksYWdlPW5ldyBGc2UoIk1JTl9TSVpFX1BSRV9QUk9DRVNTT1IiLDEpLHNnZT1uZXcgRnNlKCJNSU5fU0laRV9QT1NUX1BST0NFU1NPUiIsMil9ZnVuY3Rpb24gb2coKXtvZz1VLFNnZT1uZXcgX18oIkFVVE9NQVRJQyIsMCksSEI9bmV3IF9fKE14LDEpLFZCPW5ldyBfXyhEeCwyKSxuWT1uZXcgX18oIlRPUCIsMyksZVk9bmV3IF9fKHhFZSw0KSx0WT1uZXcgX18oY1QsNSl9ZnVuY3Rpb24gWThlKGUsdCxuLHIpe0dFKCk7dmFyIGEsbztmb3IoYT0wLG89MDtvPG47bysrKWE9Ym8obW8odmEodFtvXSxWbyksdmEocixWbykpLHZhKFlyKGEpLFZvKSksZVtvXT1ZcihhKSxhPXViKGEsMzIpO3JldHVybiBZcihhKX1mdW5jdGlvbiBYOGUoZSx0LG4pe3ZhciByLGE7Zm9yKGE9MCxyPTA7cjxxMGU7cisrKWE9Yi5NYXRoLm1heChhLERjZShlLmFbdC5nXVtyXSxuKSk7cmV0dXJuIHQ9PSh0MSgpLCR1KSYmZS5iJiYoYT1iLk1hdGgubWF4KGEsZS5iLmIpKSxhfWZ1bmN0aW9uIGFVKGUsdCl7dmFyIG4scjtpZihxeWUodD4wKSwodCYtdCk9PXQpcmV0dXJuIHVhKHQqSmwoZSwzMSkqNDY1NjYxMjg3MzA3NzM5M2UtMjUpO2RvIG49SmwoZSwzMSkscj1uJXQ7d2hpbGUobi1yKyh0LTEpPDApO3JldHVybiB1YShyKX1mdW5jdGlvbiBqNm4oZSx0LG4pe3N3aXRjaChuLmcpe2Nhc2UgMTplLmE9dC5hLzIsZS5iPTA7YnJlYWs7Y2FzZSAyOmUuYT10LmEsZS5iPXQuYi8yO2JyZWFrO2Nhc2UgMzplLmE9dC5hLzIsZS5iPXQuYjticmVhaztjYXNlIDQ6ZS5hPTAsZS5iPXQuYi8yfX1mdW5jdGlvbiB6TihlLHQsbixyKXt2YXIgYSxvO2ZvcihhPXQ7YTxlLmMubGVuZ3RoO2ErKylpZihvPShTbihhLGUuYy5sZW5ndGgpLGwoZS5jW2FdLDEyKSksbi5NYihvKSkkbihyLmMsbyk7ZWxzZSByZXR1cm4gYTtyZXR1cm4gZS5jLmxlbmd0aH1mdW5jdGlvbiBzdWUoZSl7c3dpdGNoKGUuZyl7Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMTpyZXR1cm4gbmV3IFRmdDtjYXNlIDI6cmV0dXJuIG5ldyBWd2U7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWW4oRWZlKyhlLmYhPW51bGw/ZS5mOiIiK2UuZykpKX19ZnVuY3Rpb24gcU4oZSx0LG4pe3ZhciByLGE7Zm9yKFgzbihlLHQtZS5zLG4tZS50KSxhPW5ldyBHKGUubik7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDIwOSksRWUocixyLmUrdC1lLnMpLEJlKHIsci5mK24tZS50KTtlLnM9dCxlLnQ9bn1mdW5jdGlvbiAkNm4oZSl7dmFyIHQsbixyLGEsbztmb3Iobj0wLGE9bmV3IEcoZS5hKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTI1KSxyLmQ9bisrO3JldHVybiB0PVl4bihlKSxvPW51bGwsdC5jLmxlbmd0aD4xJiYobz1QNm4oZSx0KSksb31mdW5jdGlvbiBUZHQoZSl7dmFyIHQ7cmV0dXJuIHQ9emUoR2UoYXQoZSwocGkoKSxRQikpKSkqYi5NYXRoLnNxcnQoKCFlLmEmJihlLmE9bmV3IG50KEFpLGUsMTAsMTEpKSxlLmEpLmkpLG5ldyBsdCh0LHQvemUoR2UoYXQoZSxzWSkpKSl9ZnVuY3Rpb24gYXVlKGUpe3ZhciB0O3JldHVybiBlLmYmJmUuZi5WaCgpJiYodD1sKGUuZiw1NCksZS5mPWwoeWIoZSx0KSw4NCksZS5mIT10JiZlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgX2EoZSw5LDgsdCxlLmYpKSksZS5mfWZ1bmN0aW9uIG91ZShlKXt2YXIgdDtyZXR1cm4gZS5pJiZlLmkuVmgoKSYmKHQ9bChlLmksNTQpLGUuaT1sKHliKGUsdCksODQpLGUuaSE9dCYmZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsOSw3LHQsZS5pKSkpLGUuaX1mdW5jdGlvbiBSbyhlKXt2YXIgdDtyZXR1cm4gZS5iJiZlLmIuRGImNjQmJih0PWUuYixlLmI9bCh5YihlLHQpLDE5KSxlLmIhPXQmJmUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDksMjEsdCxlLmIpKSksZS5ifWZ1bmN0aW9uIG9VKGUsdCl7dmFyIG4scixhO2UuZD09bnVsbD8oKytlLmUsKytlLmYpOihyPXQuQmkoKSxjQ24oZSxlLmYrMSksYT0ociZJaSklZS5kLmxlbmd0aCxuPWUuZFthXSwhbiYmKG49ZS5kW2FdPWUuZGsoKSksbi5GYyh0KSwrK2UuZil9ZnVuY3Rpb24gUThlKGUsdCxuKXt2YXIgcjtyZXR1cm4gdC50aygpPyExOnQuSWsoKSE9LTI/KHI9dC5paygpLHI9PW51bGw/bj09bnVsbDpQaShyLG4pKTp0LnFrKCk9PWUuZS5EaCgpJiZuPT1udWxsfWZ1bmN0aW9uIGNVKCl7dmFyIGU7TWgoMTYsUHd0KSxlPWNmdCgxNiksdGhpcy5iPVdlKGswZSxUUCwzMDMsZSwwLDEpLHRoaXMuYz1XZShrMGUsVFAsMzAzLGUsMCwxKSx0aGlzLmE9bnVsbCx0aGlzLmU9bnVsbCx0aGlzLmk9MCx0aGlzLmY9ZS0xLHRoaXMuZz0wfWZ1bmN0aW9uIG9wKGUpe3I0ZS5jYWxsKHRoaXMpLHRoaXMuaz0oWm4oKSxQcyksdGhpcy5qPShNaCg2LFl5KSxuZXcgQnUoNikpLHRoaXMuYj0oTWgoMixZeSksbmV3IEJ1KDIpKSx0aGlzLmQ9bmV3ICRpZSx0aGlzLmY9bmV3IFJ3ZSx0aGlzLmE9ZX1mdW5jdGlvbiB6Nm4oZSl7dmFyIHQsbjtlLmMubGVuZ3RoPD0xfHwodD1BYnQoZSwoQ3QoKSxEcikpLHBwdChlLGwodC5hLDE3KS5hLGwodC5iLDE3KS5hKSxuPUFidChlLGVyKSxwcHQoZSxsKG4uYSwxNykuYSxsKG4uYiwxNykuYSkpfWZ1bmN0aW9uIHE2bihlLHQsbil7dmFyIHIsYTtmb3IoYT1lLmEuYixyPWEuYy5sZW5ndGg7cjxuO3IrKylwdyhhLGEuYy5sZW5ndGgsbmV3IHl1KGUuYSkpO1ZhKHQsKFNuKG4tMSxhLmMubGVuZ3RoKSxsKGEuY1tuLTFdLDMwKSkpLGUuYlt0LnBdPW59ZnVuY3Rpb24gQ2R0KGUsdCl7dmFyIG4scixhO2ZvcihlLmJbdC5nXT0xLHI9UnIodC5kLDApO3IuYiE9ci5kLmM7KW49bChCcihyKSw2NSksYT1uLmMsZS5iW2EuZ109PTE/dWkoZS5hLG4pOmUuYlthLmddPT0yP2UuYlthLmddPTE6Q2R0KGUsYSl9ZnVuY3Rpb24gU2R0KGUsdCxuLHIpe3ZhciBhLG8sZjtmb3IoYT1sKCRpKHI/ZS5hOmUuYix0KSwyMSksZj1hLktjKCk7Zi5PYigpOylpZihvPWwoZi5QYigpLDI3KSxOVShlLG4sbykpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gY3VlKGUpe3ZhciB0LG47Zm9yKG49bmV3IG9yKGUpO24uZSE9bi5pLmdjKCk7KWlmKHQ9bChncihuKSw4OSksdC5lfHwoIXQuZCYmKHQuZD1uZXcgWXMoV28sdCwxKSksdC5kKS5pIT0wKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHV1ZShlKXt2YXIgdCxuO2ZvcihuPW5ldyBvcihlKTtuLmUhPW4uaS5nYygpOylpZih0PWwoZ3IobiksODkpLHQuZXx8KCF0LmQmJih0LmQ9bmV3IFlzKFdvLHQsMSkpLHQuZCkuaSE9MClyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBINm4oZSl7dmFyIHQsbixyO2Zvcih0PTAscj1uZXcgRyhlLmMuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDEwKSx0Kz1YZyhuZXcgaHIoZHIocXMobikuYS5LYygpLG5ldyBqKSkpO3JldHVybiB0L2UuYy5hLmMubGVuZ3RofWZ1bmN0aW9uIGx1ZSgpe2x1ZT1VLGpPZT0odGxlKCksUE9lKSxST2U9bmV3IGx3KDgpLG5ldyBIYSgocGkoKSxfMiksUk9lKSxuZXcgSGEoRXYsOCksbFN0PU9PZSxCT2U9blN0LEZPZT1yU3QsdVN0PW5ldyBIYShHQiwoSG4oKSwhMSkpfWZ1bmN0aW9uIFY2bihlLHQsbil7dmFyIHI7bi5VZygiU2hyaW5raW5nIHRyZWUgY29tcGFjdGlvbiIsMSksUnQoQnQoUSh0LChwRSgpLGpMKSkpKT8oSnduKGUsdC5mKSxRbHQodC5mLChyPXQuYyxyKSkpOlFsdCh0LmYsdC5jKSxuLlZnKCl9ZnVuY3Rpb24gSjhlKGUsdCxuLHIpe3N3aXRjaCh0KXtjYXNlIDc6cmV0dXJuIWUuZSYmKGUuZT1uZXcgTG4oanMsZSw3LDQpKSxlLmU7Y2FzZSA4OnJldHVybiFlLmQmJihlLmQ9bmV3IExuKGpzLGUsOCw1KSksZS5kfXJldHVybiB4OGUoZSx0LG4scil9ZnVuY3Rpb24gaHVlKGUpe3ZhciB0O3JldHVybiBlLmEmJmUuYS5WaCgpJiYodD1sKGUuYSw1NCksZS5hPWwoeWIoZSx0KSwxNDIpLGUuYSE9dCYmZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsOSw1LHQsZS5hKSkpLGUuYX1mdW5jdGlvbiBXbShlKXtyZXR1cm4gZTw0OHx8ZT4xMDI/LTE6ZTw9NTc/ZS00ODplPDY1Py0xOmU8PTcwP2UtNjUrMTA6ZTw5Nz8tMTplLTk3KzEwfWZ1bmN0aW9uIGZ1ZShlLHQpe2lmKGU9PW51bGwpdGhyb3cgdWUobmV3IEQ4KCJudWxsIGtleSBpbiBlbnRyeTogbnVsbD0iK3QpKTtpZih0PT1udWxsKXRocm93IHVlKG5ldyBEOCgibnVsbCB2YWx1ZSBpbiBlbnRyeTogIitlKyI9bnVsbCIpKX1mdW5jdGlvbiBVNm4oZSx0KXtmb3IodmFyIG4scjtlLk9iKCk7KWlmKCF0Lk9iKCl8fChuPWUuUGIoKSxyPXQuUGIoKSwhKHFlKG4pPT09cWUocil8fG4hPW51bGwmJlBpKG4scikpKSlyZXR1cm4hMTtyZXR1cm4hdC5PYigpfWZ1bmN0aW9uIF9kdChlLHQpe3ZhciBuO3JldHVybiBuPWhlKGxlKE5hLDEpLFpvLDI4LDE1LFtEY2UoZS5hWzBdLHQpLERjZShlLmFbMV0sdCksRGNlKGUuYVsyXSx0KV0pLGUuZCYmKG5bMF09Yi5NYXRoLm1heChuWzBdLG5bMl0pLG5bMl09blswXSksbn1mdW5jdGlvbiBBZHQoZSx0KXt2YXIgbjtyZXR1cm4gbj1oZShsZShOYSwxKSxabywyOCwxNSxbQlYoZS5hWzBdLHQpLEJWKGUuYVsxXSx0KSxCVihlLmFbMl0sdCldKSxlLmQmJihuWzBdPWIuTWF0aC5tYXgoblswXSxuWzJdKSxuWzJdPW5bMF0pLG59ZnVuY3Rpb24gWjhlKGUsdCxuKXtVOChsKFEodCwoTnQoKSxNcykpLDEwMSkpfHwoZDZlKGUsdCxkMih0LG4pKSxkNmUoZSx0LGQyKHQsKEN0KCksRHIpKSksZDZlKGUsdCxkMih0LFFuKSksQ24oKSxWcyh0LmosbmV3IElZZShlKSkpfWZ1bmN0aW9uIExkdChlKXt2YXIgdCxuO2ZvcihlLmN8fGxNbihlKSxuPW5ldyBibCx0PW5ldyBHKGUuYSkscmUodCk7dC5hPHQuYy5jLmxlbmd0aDspdWkobixsKHJlKHQpLDQxOCkuYSk7cmV0dXJuIG1yKG4uYiE9MCksYWYobixuLmMuYiksbn1mdW5jdGlvbiBHNm4oZSx0LG4pe3ZhciByLGEsbyxmLGc7Zm9yKGc9ZS5yK3QsZS5yKz10LGUuZCs9bixyPW4vZS5uLmMubGVuZ3RoLGE9MCxmPW5ldyBHKGUubik7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDIwOSksc1RuKG8sZyxyLGEpLCsrYX1mdW5jdGlvbiBLNm4oZSl7dmFyIHQsbixyO2ZvcihlLmIuYS4kYigpLGUuYT1XZShkSyxSbiw2MCxlLmMuYy5hLmIuYy5sZW5ndGgsMCwxKSx0PTAscj1uZXcgRyhlLmMuYy5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSw2MCksbi5mPXQrK31mdW5jdGlvbiBXNm4oZSl7dmFyIHQsbixyO2ZvcihlLmIuYS4kYigpLGUuYT1XZShyMWUsUm4sODYsZS5jLmEuYS5iLmMubGVuZ3RoLDAsMSksdD0wLHI9bmV3IEcoZS5jLmEuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksODYpLG4uaT10Kyt9ZnVuY3Rpb24gTWR0KGUpe3ZhciB0O2lmKHQ9UnluKGUpLCFqcihlKSl0aHJvdyB1ZShuZXcgdGMoInBvc2l0aW9uICgwKSBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRoYXQgcmVtYWluZWQgKCIrdCsiKSIpKTtyZXR1cm4geHIoZSl9ZnVuY3Rpb24gWTZuKGUsdCl7dmFyIG47cmV0dXJuIGUuYXx8KG49V2UoTmEsWm8sMjgsMCwxNSwxKSxBNShlLmIuYSxuZXcgc3kobikpLF9RZShuLE1odChQZS5wcm90b3R5cGUuTWUsUGUsW10pKSxlLmE9bmV3IG9pdChuLGUuZCkpLFhIKGUuYSx0KX1mdW5jdGlvbiBEZHQoZSx0LG4pe3ZhciByO3RyeXtyZXR1cm4gcjYoZSx0K2UuaixuK2Uuayl9Y2F0Y2goYSl7dGhyb3cgYT1icyhhKSxEZShhLDc3KT8ocj1hLHVlKG5ldyB0YyhyLmcraUcrdCtDbytuKyIpLiIpKSk6dWUoYSl9fWZ1bmN0aW9uIFg2bihlLHQsbil7dmFyIHI7dHJ5e3JldHVybiBOZHQoZSx0K2UuaixuK2Uuayl9Y2F0Y2goYSl7dGhyb3cgYT1icyhhKSxEZShhLDc3KT8ocj1hLHVlKG5ldyB0YyhyLmcraUcrdCtDbytuKyIpLiIpKSk6dWUoYSl9fWZ1bmN0aW9uIFE2bihlLHQsbil7dmFyIHI7dHJ5e3JldHVybiBQZHQoZSx0K2UuaixuK2Uuayl9Y2F0Y2goYSl7dGhyb3cgYT1icyhhKSxEZShhLDc3KT8ocj1hLHVlKG5ldyB0YyhyLmcraUcrdCtDbytuKyIpLiIpKSk6dWUoYSl9fWZ1bmN0aW9uIElkdChlKXtzd2l0Y2goZS5nKXtjYXNlIDE6cmV0dXJuIEN0KCksZXI7Y2FzZSA0OnJldHVybiBDdCgpLFFuO2Nhc2UgMzpyZXR1cm4gQ3QoKSxhcjtjYXNlIDI6cmV0dXJuIEN0KCksRHI7ZGVmYXVsdDpyZXR1cm4gQ3QoKSxQY319ZnVuY3Rpb24gSjZuKGUsdCxuKXt0Lms9PShabigpLFBzKSYmbi5rPT1BYSYmKGUuZD1QY2UodCwoQ3QoKSxEcikpLGUuYj1QY2UodCxRbikpLG4uaz09UHMmJnQuaz09QWEmJihlLmQ9UGNlKG4sKEN0KCksUW4pKSxlLmI9UGNlKG4sRHIpKX1mdW5jdGlvbiBkdWUoZSx0KXt2YXIgbixyLGE7Zm9yKGE9T2MoZSx0KSxyPWEuS2MoKTtyLk9iKCk7KWlmKG49bChyLlBiKCksMTIpLFEobiwoZnQoKSxqbCkpIT1udWxsfHwkXyhuZXcgTjEobi5iKSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gWjZuKGUsdCxuKXtuLlVnKCJMaW5lYXIgc2VnbWVudHMgbm9kZSBwbGFjZW1lbnQiLDEpLGUuYj1sKFEodCwoZnQoKSwkNikpLDMxMiksakluKGUsdCkscExuKGUsdCksT0xuKGUsdCksYkluKGUpLGUuYT1udWxsLGUuYj1udWxsLG4uVmcoKX1mdW5jdGlvbiBleGUoZSx0KXtyZXR1cm4gVXUodCxlLmUrZS5kKyhlLmMuYy5sZW5ndGg9PTA/MDplLmIpKSxHdSh0LGUuZiksZS5hPWIuTWF0aC5tYXgoZS5hLHQuZiksZS5kKz10LmcrKGUuYy5jLmxlbmd0aD09MD8wOmUuYiksdnQoZS5jLHQpLCEwfWZ1bmN0aW9uIGU3bihlLHQsbil7dmFyIHIsYSxvLGY7Zm9yKGY9MCxyPW4vZS5hLmMubGVuZ3RoLG89bmV3IEcoZS5hKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTcyKSxxTihhLGEucyxhLnQrZipyKSxHNm4oYSxlLmQtYS5yK3QsciksKytmfWZ1bmN0aW9uIHQ3bihlLHQpe3ZhciBuLHIsYSxvLGYsZztmb3IoYT10Lmxlbmd0aC0xLGY9MCxnPTAscj0wO3I8PWE7cisrKW89dFtyXSxuPXc5bihhLHIpKm44ZSgxLWUsYS1yKSpuOGUoZSxyKSxmKz1vLmEqbixnKz1vLmIqbjtyZXR1cm4gbmV3IGx0KGYsZyl9ZnVuY3Rpb24gT2R0KGUsdCl7dmFyIG4scixhLG8sZjtmb3Iobj10LmdjKCksZS5faShlLmkrbiksbz10LktjKCksZj1lLmksZS5pKz1uLHI9ZjtyPGUuaTsrK3IpYT1vLlBiKCksUl8oZSxyLGUuWmkocixhKSksZS5NaShyLGEpLGUuTmkoKTtyZXR1cm4gbiE9MH1mdW5jdGlvbiBuN24oZSx0LG4pe3ZhciByLGEsbztyZXR1cm4gZS5QaigpPyhyPWUuRWooKSxvPWUuUWooKSwrK2UuaixlLnFqKHIsZS5aaShyLHQpKSxhPWUuSWooMyxudWxsLHQscixvKSxuP24ubmooYSk6bj1hKTpNcnQoZSxlLkVqKCksdCksbn1mdW5jdGlvbiByN24oZSx0LG4pe3ZhciByLGEsbztyZXR1cm4gcj1sKE9lKGR1KGUuYSksdCksODkpLG89KGE9ci5jLERlKGEsOTApP2woYSwyOSk6KFRuKCksS2YpKSwoby5EYiY2ND95YihlLmIsbyk6byk9PW4/alUocik6c0UocixuKSxvfWZ1bmN0aW9uIGk3bihlKXt2YXIgdDtyZXR1cm4gZT09bnVsbD9udWxsOm5ldyBvYigodD1UdShlLCEwKSx0Lmxlbmd0aD4wJiYoWG4oMCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KDApPT00Myk/KFhuKDEsdC5sZW5ndGgrMSksdC5zdWJzdHIoMSkpOnQpKX1mdW5jdGlvbiBzN24oZSl7dmFyIHQ7cmV0dXJuIGU9PW51bGw/bnVsbDpuZXcgb2IoKHQ9VHUoZSwhMCksdC5sZW5ndGg+MCYmKFhuKDAsdC5sZW5ndGgpLHQuY2hhckNvZGVBdCgwKT09NDMpPyhYbigxLHQubGVuZ3RoKzEpLHQuc3Vic3RyKDEpKTp0KSl9ZnVuY3Rpb24gdHhlKGUsdCxuLHIsYSxvLGYsZyl7dmFyIHcsRTtyJiYodz1yLmFbMF0sdyYmdHhlKGUsdCxuLHcsYSxvLGYsZykseHVlKGUsbixyLmQsYSxvLGYsZykmJnQuRmMociksRT1yLmFbMV0sRSYmdHhlKGUsdCxuLEUsYSxvLGYsZykpfWZ1bmN0aW9uIHI2KGUsdCxuKXt0cnl7cmV0dXJuIGN3KG5jZShlLHQsbiksMSl9Y2F0Y2gocil7dGhyb3cgcj1icyhyKSxEZShyLDMzMyk/dWUobmV3IHRjKEVoZStlLm8rIioiK2UucCtUaGUrdCtDbytuK0NoZSkpOnVlKHIpfX1mdW5jdGlvbiBOZHQoZSx0LG4pe3RyeXtyZXR1cm4gY3cobmNlKGUsdCxuKSwwKX1jYXRjaChyKXt0aHJvdyByPWJzKHIpLERlKHIsMzMzKT91ZShuZXcgdGMoRWhlK2UubysiKiIrZS5wK1RoZSt0K0NvK24rQ2hlKSk6dWUocil9fWZ1bmN0aW9uIFBkdChlLHQsbil7dHJ5e3JldHVybiBjdyhuY2UoZSx0LG4pLDIpfWNhdGNoKHIpe3Rocm93IHI9YnMociksRGUociwzMzMpP3VlKG5ldyB0YyhFaGUrZS5vKyIqIitlLnArVGhlK3QrQ28rbitDaGUpKTp1ZShyKX19ZnVuY3Rpb24gQmR0KGUsdCl7aWYoZS5nPT0tMSl0aHJvdyB1ZShuZXcgcGwpO2UuWGooKTt0cnl7ZS5kLmhkKGUuZyx0KSxlLmY9ZS5kLmp9Y2F0Y2gobil7dGhyb3cgbj1icyhuKSxEZShuLDc3KT91ZShuZXcgWGgpOnVlKG4pfX1mdW5jdGlvbiBhN24oZSl7dmFyIHQsbixyLGEsbztmb3Iocj1uZXcgRyhlLmIpO3IuYTxyLmMuYy5sZW5ndGg7KWZvcihuPWwocmUociksMzApLHQ9MCxvPW5ldyBHKG4uYSk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDEwKSxhLnA9dCsrfWZ1bmN0aW9uIFBBKGUsdCl7dmFyIG4scixhLG87Zm9yKG89ZS5nYygpLHQubGVuZ3RoPG8mJih0PVZ6KG5ldyBBcnJheShvKSx0KSksYT10LHI9ZS5LYygpLG49MDtuPG87KytuKVRzKGEsbixyLlBiKCkpO3JldHVybiB0Lmxlbmd0aD5vJiZUcyh0LG8sbnVsbCksdH1mdW5jdGlvbiBvN24oZSx0KXt2YXIgbixyO2lmKHI9ZS5nYygpLHQ9PW51bGwpe2ZvcihuPTA7bjxyO24rKylpZihlLlhiKG4pPT1udWxsKXJldHVybiBufWVsc2UgZm9yKG49MDtuPHI7bisrKWlmKFBpKHQsZS5YYihuKSkpcmV0dXJuIG47cmV0dXJuLTF9ZnVuY3Rpb24gZ3VlKGUsdCl7dmFyIG4scixhO3JldHVybiBuPXQubGQoKSxhPXQubWQoKSxyPWUueGMobiksISghKHFlKGEpPT09cWUocil8fGEhPW51bGwmJlBpKGEscikpfHxyPT1udWxsJiYhZS5fYihuKSl9ZnVuY3Rpb24gYzduKGUsdCl7dmFyIG4scixhO3JldHVybiB0PD0yMj8obj1lLmwmKDE8PHQpLTEscj1hPTApOnQ8PTQ0PyhuPWUubCxyPWUubSYoMTw8dC0yMiktMSxhPTApOihuPWUubCxyPWUubSxhPWUuaCYoMTw8dC00NCktMSkscXUobixyLGEpfWZ1bmN0aW9uIHU3bihlLHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMTpyZXR1cm4gZS5mLm4uZCtlLnQ7Y2FzZSAzOnJldHVybiBlLmYubi5hK2UudDtjYXNlIDI6cmV0dXJuIGUuZi5uLmMrZS5zO2Nhc2UgNDpyZXR1cm4gZS5mLm4uYitlLnM7ZGVmYXVsdDpyZXR1cm4gMH19ZnVuY3Rpb24gbDduKGUsdCl7dmFyIG4scjtzd2l0Y2gocj10LmMsbj10LmEsZS5iLmcpe2Nhc2UgMDpuLmQ9ZS5lLXIuYS1yLmQ7YnJlYWs7Y2FzZSAxOm4uZCs9ZS5lO2JyZWFrO2Nhc2UgMjpuLmM9ZS5lLXIuYS1yLmQ7YnJlYWs7Y2FzZSAzOm4uYz1lLmUrci5kfX1mdW5jdGlvbiBueGUoZSx0LG4scil7dmFyIGEsbzt0aGlzLmE9dCx0aGlzLmM9cixhPWUuYSxTaWUodGhpcyxuZXcgbHQoLWEuYywtYS5kKSksT2kodGhpcy5iLG4pLG89ci8yLHQuYT96Xyh0aGlzLmIsMCxvKTp6Xyh0aGlzLmIsbywwKSx2dChlLmMsdGhpcyl9ZnVuY3Rpb24gRmR0KGUsdCxuLHIpe3ZhciBhO3RoaXMuYz1lLHRoaXMuZD10LGE9bmV3IG9zLENzKGEsbixhLmMuYixhLmMpLHRoaXMuYT1hLHRoaXMuYj1sKFEociwoSGMoKSx5MykpLDg4KSx0aGlzLmU9emUoR2UoUShyLG1JZSkpKSxFd3QodGhpcyl9ZnVuY3Rpb24gdVUoKXt1VT1VLHRnZT1uZXcgeXEoSWQsMCksekllPW5ldyB5cShZM3QsMSkscUllPW5ldyB5cSgiRURHRV9MRU5HVEhfQllfUE9TSVRJT04iLDIpLCRJZT1uZXcgeXEoIkNST1NTSU5HX01JTklNSVpBVElPTl9CWV9QT1NJVElPTiIsMyl9ZnVuY3Rpb24gcHVlKGUsdCl7dmFyIG4scjtpZihuPWwoWDUoZS5nLHQpLDI3KSxuKXJldHVybiBuO2lmKHI9bChYNShlLmosdCksMTIzKSxyKXJldHVybiByO3Rocm93IHVlKG5ldyBkZCgiUmVmZXJlbmNlZCBzaGFwZSBkb2VzIG5vdCBleGlzdDogIit0KSl9ZnVuY3Rpb24gcnhlKGUsdCl7dmFyIG4scjtpZihEZSh0LDI1Mykpe3I9bCh0LDI1Myk7dHJ5e3JldHVybiBuPWUuRWQociksbj09MH1jYXRjaChhKXtpZihhPWJzKGEpLERlKGEsMjEyKSlyZXR1cm4hMTt0aHJvdyB1ZShhKX19cmV0dXJuITF9ZnVuY3Rpb24gaDduKGUsdCl7aWYoZS5jPT10KXJldHVybiBlLmQ7aWYoZS5kPT10KXJldHVybiBlLmM7dGhyb3cgdWUobmV3IFluKCJOb2RlICdvbmUnIG11c3QgYmUgZWl0aGVyIHNvdXJjZSBvciB0YXJnZXQgb2YgZWRnZSAnZWRnZScuIikpfWZ1bmN0aW9uIGY3bihlLHQpe2lmKGUuYy5pPT10KXJldHVybiBlLmQuaTtpZihlLmQuaT09dClyZXR1cm4gZS5jLmk7dGhyb3cgdWUobmV3IFluKCJOb2RlICIrdCsiIGlzIG5laXRoZXIgc291cmNlIG5vciB0YXJnZXQgb2YgZWRnZSAiK2UpKX1mdW5jdGlvbiBkN24oZSx0LG4pe24uVWcoIlNlbGYtTG9vcCBvcmRlcmluZyIsMSksSXMoZmMoRmkoRmkoRGMobmV3IGJuKG51bGwsbmV3IGtuKHQuYiwxNikpLG5ldyBOWiksbmV3IHhqKSxuZXcgUFopLG5ldyBCWiksbmV3IGlZZShlKSksbi5WZygpfWZ1bmN0aW9uIGc3bihlLHQpe3ZhciBuO3N3aXRjaCh0Lmcpe2Nhc2UgMjpjYXNlIDQ6bj1lLmEsZS5jLmQubi5iPG4uZC5uLmImJihuPWUuYyksUXAoZSx0LChSMSgpLGIxZSksbik7YnJlYWs7Y2FzZSAxOmNhc2UgMzpRcChlLHQsKFIxKCksVngpLG51bGwpfX1mdW5jdGlvbiBidWUoZSx0LG4scixhLG8pe3ZhciBmLGcsdyxFLEM7Zm9yKGY9ZzhuKHQsbixvKSxnPW49PShDdCgpLFFuKXx8bj09ZXI/LTE6MSxFPWVbbi5nXSxDPTA7QzxFLmxlbmd0aDtDKyspdz1FW0NdLHc+MCYmKHcrPWEpLEVbQ109ZixmKz1nKih3K3IpfWZ1bmN0aW9uIFJkdChlKXt2YXIgdCxuLHI7Zm9yKHI9ZS5mLGUubj1XZShOYSxabywyOCxyLDE1LDEpLGUuZD1XZShOYSxabywyOCxyLDE1LDEpLHQ9MDt0PHI7dCsrKW49bChqdChlLmMuYix0KSwzMCksZS5uW3RdPWxkdChlLG4pLGUuZFt0XT10YnQoZSxuKX1mdW5jdGlvbiBtdWUoZSx0KXt2YXIgbixyLGE7Zm9yKGE9MCxyPTI7cjx0O3I8PD0xKWUuRGImciYmKythO2lmKGE9PTApe2ZvcihuPXQ8PD0xO248PTEyODtuPDw9MSlpZihlLkRiJm4pcmV0dXJuIDA7cmV0dXJuLTF9ZWxzZSByZXR1cm4gYX1mdW5jdGlvbiBqZHQoZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihmPVd1KGUuZS5EaCgpLHQpLG89bnVsbCxuPWwoZS5nLDEyNCksYT0wO2E8ZS5pOysrYSlyPW5bYV0sZi5hbShyLkxrKCkpJiYoIW8mJihvPW5ldyBYMikscXIobyxyKSk7byYmYXd0KGUsbyl9ZnVuY3Rpb24gJGR0KGUpe3ZhciB0LG4scjtpZighZSlyZXR1cm4gbnVsbDtpZihlLmRjKCkpcmV0dXJuIiI7Zm9yKHI9bmV3IFVwLG49ZS5LYygpO24uT2IoKTspdD1uLlBiKCksWG8ocixlaSh0KSksci5hKz0iICI7cmV0dXJuIEdzZShyLHIuYS5sZW5ndGgtMSl9ZnVuY3Rpb24gemR0KGUsdCl7dmFyIG49bmV3IEFycmF5KHQpLHI7c3dpdGNoKGUpe2Nhc2UgMTQ6Y2FzZSAxNTpyPTA7YnJlYWs7Y2FzZSAxNjpyPSExO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG59Zm9yKHZhciBhPTA7YTx0OysrYSluW2FdPXI7cmV0dXJuIG59ZnVuY3Rpb24gJHcoZSl7dmFyIHQsbixyO2ZvcihuPW5ldyBHKGUuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksNjApLHQuYy4kYigpO1VnKGUuZCk/cj1lLmEuYzpyPWUuYS5kLFZ1KHIsbmV3IExpZShlKSksZS5jLmRmKGUpLHdidChlKX1mdW5jdGlvbiBxZHQoZSl7dmFyIHQsbixyLGE7Zm9yKG49bmV3IEcoZS5lLmMpO24uYTxuLmMuYy5sZW5ndGg7KXtmb3IodD1sKHJlKG4pLDI5MCksYT1uZXcgRyh0LmIpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSw0NTQpLEFrZShyKTtZcHQodCl9fWZ1bmN0aW9uIGxVKGUpe3ZhciB0LG4scixhLG87Zm9yKHI9MCxvPTAsYT0wLG49bmV3IEcoZS5hKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTcyKSxvPWIuTWF0aC5tYXgobyx0LnIpLHIrPXQuZCsoYT4wP2UuYzowKSwrK2E7ZS5iPXIsZS5kPW99ZnVuY3Rpb24gSGR0KGUsdCl7dmFyIG47cmV0dXJuIG49aGUobGUoTmEsMSksWm8sMjgsMTUsW1g4ZShlLCh0MSgpLEdjKSx0KSxYOGUoZSwkdSx0KSxYOGUoZSxLYyx0KV0pLGUuZiYmKG5bMF09Yi5NYXRoLm1heChuWzBdLG5bMl0pLG5bMl09blswXSksbn1mdW5jdGlvbiBwN24oZSx0LG4pe3ZhciByO3RyeXtGVShlLHQrZS5qLG4rZS5rLCExLCEwKX1jYXRjaChhKXt0aHJvdyBhPWJzKGEpLERlKGEsNzcpPyhyPWEsdWUobmV3IHRjKHIuZytpRyt0K0NvK24rIikuIikpKTp1ZShhKX19ZnVuY3Rpb24gYjduKGUsdCxuKXt2YXIgcjt0cnl7RlUoZSx0K2UuaixuK2UuaywhMCwhMSl9Y2F0Y2goYSl7dGhyb3cgYT1icyhhKSxEZShhLDc3KT8ocj1hLHVlKG5ldyB0YyhyLmcraUcrdCtDbytuKyIpLiIpKSk6dWUoYSl9fWZ1bmN0aW9uIFZkdChlKXt2YXIgdDtucyhlLChOdCgpLGQzKSkmJih0PWwoUShlLGQzKSwyMSksdC5IYygocXkoKSxFMCkpPyh0Lk1jKEUwKSx0LkZjKFQwKSk6dC5IYyhUMCkmJih0Lk1jKFQwKSx0LkZjKEUwKSkpfWZ1bmN0aW9uIFVkdChlKXt2YXIgdDtucyhlLChOdCgpLGQzKSkmJih0PWwoUShlLGQzKSwyMSksdC5IYygocXkoKSxTMCkpPyh0Lk1jKFMwKSx0LkZjKHFmKSk6dC5IYyhxZikmJih0Lk1jKHFmKSx0LkZjKFMwKSkpfWZ1bmN0aW9uIHZ1ZShlLHQsbixyKXt2YXIgYSxvLGYsZztyZXR1cm4gZS5hPT1udWxsJiZ2OW4oZSx0KSxmPXQuYi5qLmMubGVuZ3RoLG89bi5kLnAsZz1yLmQucCxhPWctMSxhPDAmJihhPWYtMSksbzw9YT9lLmFbYV0tZS5hW29dOmUuYVtmLTFdLWUuYVtvXStlLmFbYV19ZnVuY3Rpb24gbTduKGUpe3ZhciB0LG47aWYoIWUuYilmb3IoZS5iPSRIKGwoZS5mLDI3KS5raCgpLmkpLG49bmV3IG9yKGwoZS5mLDI3KS5raCgpKTtuLmUhPW4uaS5nYygpOyl0PWwoZ3IobiksMTM1KSx2dChlLmIsbmV3IFlpZSh0KSk7cmV0dXJuIGUuYn1mdW5jdGlvbiB2N24oZSl7dmFyIHQsbjtpZighZS5lKWZvcihlLmU9JEgoWGFlKGwoZS5mLDI3KSkuaSksbj1uZXcgb3IoWGFlKGwoZS5mLDI3KSkpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwxMjMpLHZ0KGUuZSxuZXcgQlhlKHQpKTtyZXR1cm4gZS5lfWZ1bmN0aW9uIEdkdChlKXt2YXIgdCxuO2lmKCFlLmEpZm9yKGUuYT0kSChBSChsKGUuZiwyNykpLmkpLG49bmV3IG9yKEFIKGwoZS5mLDI3KSkpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwyNyksdnQoZS5hLG5ldyByYWUoZSx0KSk7cmV0dXJuIGUuYX1mdW5jdGlvbiB6dyhlKXt2YXIgdDtpZighZS5DJiYoZS5EIT1udWxsfHxlLkIhPW51bGwpKWlmKHQ9c0RuKGUpLHQpZS5obCh0KTtlbHNlIHRyeXtlLmhsKG51bGwpfWNhdGNoKG4pe2lmKG49YnMobiksIURlKG4sNjMpKXRocm93IHVlKG4pfXJldHVybiBlLkN9ZnVuY3Rpb24gdzduKGUpe3N3aXRjaChlLnEuZyl7Y2FzZSA1OmJndChlLChDdCgpLFFuKSksYmd0KGUsRHIpO2JyZWFrO2Nhc2UgNDp2dnQoZSwoQ3QoKSxRbikpLHZ2dChlLERyKTticmVhaztkZWZhdWx0OnhwdChlLChDdCgpLFFuKSkseHB0KGUsRHIpfX1mdW5jdGlvbiB5N24oZSl7c3dpdGNoKGUucS5nKXtjYXNlIDU6bWd0KGUsKEN0KCksYXIpKSxtZ3QoZSxlcik7YnJlYWs7Y2FzZSA0Ond2dChlLChDdCgpLGFyKSksd3Z0KGUsZXIpO2JyZWFrO2RlZmF1bHQ6a3B0KGUsKEN0KCksYXIpKSxrcHQoZSxlcil9fWZ1bmN0aW9uIGk2KGUsdCl7dmFyIG4scixhO2ZvcihhPW5ldyBxYSxyPWUuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksMzYpLEtFKG4sYS5hLDApLGEuYSs9bi5mLmErdCxhLmI9Yi5NYXRoLm1heChhLmIsbi5mLmIpO3JldHVybiBhLmI+MCYmKGEuYis9dCksYX1mdW5jdGlvbiBoVShlLHQpe3ZhciBuLHIsYTtmb3IoYT1uZXcgcWEscj1lLktjKCk7ci5PYigpOyluPWwoci5QYigpLDM2KSxLRShuLDAsYS5iKSxhLmIrPW4uZi5iK3QsYS5hPWIuTWF0aC5tYXgoYS5hLG4uZi5hKTtyZXR1cm4gYS5hPjAmJihhLmErPXQpLGF9ZnVuY3Rpb24gS2R0KGUpe3ZhciB0LG4scjtmb3Iocj1JaSxuPW5ldyBHKGUuYSk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDEwKSxucyh0LChmdCgpLEtpKSkmJihyPWIuTWF0aC5taW4ocixsKFEodCxLaSksMTcpLmEpKTtyZXR1cm4gcn1mdW5jdGlvbiBXZHQoZSx0KXt2YXIgbixyO2lmKHQubGVuZ3RoPT0wKXJldHVybiAwO2ZvcihuPVlhZShlLmEsdFswXSwoQ3QoKSxlcikpLG4rPVlhZShlLmEsdFt0Lmxlbmd0aC0xXSxhcikscj0wO3I8dC5sZW5ndGg7cisrKW4rPXI5bihlLHIsdCk7cmV0dXJuIG59ZnVuY3Rpb24gWWR0KCl7R0EoKSx0aGlzLmM9bmV3IGJ0LHRoaXMuaT1uZXcgYnQsdGhpcy5lPW5ldyBiZCx0aGlzLmY9bmV3IGJkLHRoaXMuZz1uZXcgYmQsdGhpcy5qPW5ldyBidCx0aGlzLmE9bmV3IGJ0LHRoaXMuYj1uZXcgUHIsdGhpcy5rPW5ldyBQcn1mdW5jdGlvbiB3dWUoZSx0KXt2YXIgbixyO3JldHVybiBlLkRiPj4xNj09Nj9lLkNiLlRoKGUsNSx1MSx0KToocj1SbyhsKE1uKChuPWwoS24oZSwxNiksMjkpLG58fGUuaWkoKSksZS5EYj4+MTYpLDE5KSksZS5DYi5UaChlLHIubixyLmYsdCkpfWZ1bmN0aW9uIHg3bihlKXtYaygpO3ZhciB0PWUuZTtpZih0JiZ0LnN0YWNrKXt2YXIgbj10LnN0YWNrLHI9dCtgCmA7cmV0dXJuIG4uc3Vic3RyaW5nKDAsci5sZW5ndGgpPT1yJiYobj1uLnN1YnN0cmluZyhyLmxlbmd0aCkpLG4uc3BsaXQoYApgKX1yZXR1cm5bXX1mdW5jdGlvbiBrN24oZSl7dmFyIHQ7cmV0dXJuIHQ9KFFodCgpLHA2dCksdFtlPj4+MjhdfHRbZT4+MjQmMTVdPDw0fHRbZT4+MjAmMTVdPDw4fHRbZT4+MTYmMTVdPDwxMnx0W2U+PjEyJjE1XTw8MTZ8dFtlPj44JjE1XTw8MjB8dFtlPj40JjE1XTw8MjR8dFtlJjE1XTw8Mjh9ZnVuY3Rpb24gWGR0KGUpe3ZhciB0LG4scjtlLmI9PWUuYyYmKHI9ZS5hLmxlbmd0aCxuPVA3ZShiLk1hdGgubWF4KDgscikpPDwxLGUuYiE9MD8odD1jMChlLmEsbiksZmZ0KGUsdCxyKSxlLmE9dCxlLmI9MCk6YXkoZS5hLG4pLGUuYz1yKX1mdW5jdGlvbiBFN24oZSx0KXt2YXIgbjtyZXR1cm4gbj1lLmIsbi5wZigocGkoKSxyaCkpP24uYWcoKT09KEN0KCksZXIpPy1uLk1mKCkuYS16ZShHZShuLm9mKHJoKSkpOnQremUoR2Uobi5vZihyaCkpKTpuLmFnKCk9PShDdCgpLGVyKT8tbi5NZigpLmE6dH1mdW5jdGlvbiBITihlKXt2YXIgdDtyZXR1cm4gZS5iLmMubGVuZ3RoIT0wJiZsKGp0KGUuYiwwKSw3MikuYT9sKGp0KGUuYiwwKSw3MikuYToodD1RYWUoZSksdD8/IiIrKGUuYz9nYyhlLmMuYSxlLDApOi0xKSl9ZnVuY3Rpb24gZlUoZSl7dmFyIHQ7cmV0dXJuIGUuZi5jLmxlbmd0aCE9MCYmbChqdChlLmYsMCksNzIpLmE/bChqdChlLmYsMCksNzIpLmE6KHQ9UWFlKGUpLHQ/PyIiKyhlLmk/Z2MoZS5pLmosZSwwKTotMSkpfWZ1bmN0aW9uIFQ3bihlLHQpe3ZhciBuLHI7aWYodDwwfHx0Pj1lLmdjKCkpcmV0dXJuIG51bGw7Zm9yKG49dDtuPGUuZ2MoKTsrK24paWYocj1sKGUuWGIobiksMTMxKSxuPT1lLmdjKCktMXx8IXIubylyZXR1cm4gbmV3IGNhKHB0KG4pLHIpO3JldHVybiBudWxsfWZ1bmN0aW9uIEM3bihlLHQsbil7dmFyIHIsYSxvLGYsZztmb3Iobz1lLmMsZz1uP3Q6ZSxyPW4/ZTp0LGE9Zy5wKzE7YTxyLnA7KythKWlmKGY9bChqdChvLmEsYSksMTApLCEoZi5rPT0oWm4oKSxLMSl8fFo3bihmKSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gaXhlKGUpe3ZhciB0LG4scixhLG87Zm9yKG89MCxhPWlhLHI9MCxuPW5ldyBHKGUuYSk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDE3Miksbys9dC5yKyhyPjA/ZS5jOjApLGE9Yi5NYXRoLm1heChhLHQuZCksKytyO2UuZT1vLGUuYj1hfWZ1bmN0aW9uIFM3bihlKXt2YXIgdCxuO2lmKCFlLmIpZm9yKGUuYj0kSChsKGUuZiwxMjMpLmtoKCkuaSksbj1uZXcgb3IobChlLmYsMTIzKS5raCgpKTtuLmUhPW4uaS5nYygpOyl0PWwoZ3IobiksMTM1KSx2dChlLmIsbmV3IFlpZSh0KSk7cmV0dXJuIGUuYn1mdW5jdGlvbiBfN24oZSx0KXt2YXIgbixyLGE7aWYodC5kYygpKXJldHVybiBGaygpLEZrKCksZkY7Zm9yKG49bmV3IE9ydChlLHQuZ2MoKSksYT1uZXcgb3IoZSk7YS5lIT1hLmkuZ2MoKTspcj1ncihhKSx0LkhjKHIpJiZxcihuLHIpO3JldHVybiBufWZ1bmN0aW9uIHN4ZShlLHQsbixyKXtyZXR1cm4gdD09MD9yPyghZS5vJiYoZS5vPW5ldyB4bCgoc3UoKSxDZyksTDIsZSwwKSksZS5vKTooIWUubyYmKGUubz1uZXcgeGwoKHN1KCksQ2cpLEwyLGUsMCkpLGlOKGUubykpOnJVKGUsdCxuLHIpfWZ1bmN0aW9uIHl1ZShlKXt2YXIgdCxuO2lmKGUucmIpZm9yKHQ9MCxuPWUucmIuaTt0PG47Kyt0KVNPKE9lKGUucmIsdCkpO2lmKGUudmIpZm9yKHQ9MCxuPWUudmIuaTt0PG47Kyt0KVNPKE9lKGUudmIsdCkpO0tfKChFbCgpLGlvKSxlKSxlLkJifD0xfWZ1bmN0aW9uIHNzKGUsdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseil7cmV0dXJuIExwdChlLHQscixudWxsLGEsbyxmLGcsdyxFLEIsITAseiksbThlKGUsQyksRGUoZS5DYiw5MCkmJnp5KFlsKGwoZS5DYiw5MCkpLDIpLG4mJmI3ZShlLG4pLHY4ZShlLEwpLGV9ZnVuY3Rpb24gQTduKGUpe3ZhciB0LG47aWYoZT09bnVsbClyZXR1cm4gbnVsbDtuPTA7dHJ5e249T2goZSxsbyxJaSkmWnN9Y2F0Y2gocil7aWYocj1icyhyKSxEZShyLDEzMCkpdD1pVihlKSxuPXRbMF07ZWxzZSB0aHJvdyB1ZShyKX1yZXR1cm4gd04obil9ZnVuY3Rpb24gTDduKGUpe3ZhciB0LG47aWYoZT09bnVsbClyZXR1cm4gbnVsbDtuPTA7dHJ5e249T2goZSxsbyxJaSkmWnN9Y2F0Y2gocil7aWYocj1icyhyKSxEZShyLDEzMCkpdD1pVihlKSxuPXRbMF07ZWxzZSB0aHJvdyB1ZShyKX1yZXR1cm4gd04obil9ZnVuY3Rpb24gTTduKGUsdCl7dmFyIG4scixhO3JldHVybiBhPWUuaC10LmgsYTwwfHwobj1lLmwtdC5sLHI9ZS5tLXQubSsobj4+MjIpLGErPXI+PjIyLGE8MCk/ITE6KGUubD1uJmVoLGUubT1yJmVoLGUuaD1hJmhwLCEwKX1mdW5jdGlvbiB4dWUoZSx0LG4scixhLG8sZil7dmFyIGcsdztyZXR1cm4hKHQuVGUoKSYmKHc9ZS5hLk5lKG4sciksdzwwfHwhYSYmdz09MCl8fHQuVWUoKSYmKGc9ZS5hLk5lKG4sbyksZz4wfHwhZiYmZz09MCkpfWZ1bmN0aW9uIEQ3bihlLHQpe1RFKCk7dmFyIG47aWYobj1lLmouZy10LmouZyxuIT0wKXJldHVybiAwO3N3aXRjaChlLmouZyl7Y2FzZSAyOnJldHVybiB6Y2UodCxjTGUpLXpjZShlLGNMZSk7Y2FzZSA0OnJldHVybiB6Y2UoZSxvTGUpLXpjZSh0LG9MZSl9cmV0dXJuIDB9ZnVuY3Rpb24gSTduKGUpe3N3aXRjaChlLmcpe2Nhc2UgMDpyZXR1cm4gRDFlO2Nhc2UgMTpyZXR1cm4gSTFlO2Nhc2UgMjpyZXR1cm4gTzFlO2Nhc2UgMzpyZXR1cm4gTjFlO2Nhc2UgNDpyZXR1cm4gUUs7Y2FzZSA1OnJldHVybiBQMWU7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gYWMoZSx0LG4pe3ZhciByLGE7cmV0dXJuIHI9KGE9bmV3IEhpZSxHbShhLHQpLEZ1KGEsbikscXIoKCFlLmMmJihlLmM9bmV3IG50KGszLGUsMTIsMTApKSxlLmMpLGEpLGEpLGkyKHIsMCksTXkociwxKSx1MihyLCEwKSxjMihyLCEwKSxyfWZ1bmN0aW9uIHZ4KGUsdCl7dmFyIG4scjtpZih0Pj1lLmkpdGhyb3cgdWUobmV3IFZzZSh0LGUuaSkpO3JldHVybisrZS5qLG49ZS5nW3RdLHI9ZS5pLXQtMSxyPjAmJnB1KGUuZyx0KzEsZS5nLHQsciksVHMoZS5nLC0tZS5pLG51bGwpLGUuUWkodCxuKSxlLk5pKCksbn1mdW5jdGlvbiBRZHQoZSx0KXt2YXIgbixyO3JldHVybiBlLkRiPj4xNj09MTc/ZS5DYi5UaChlLDIxLFZmLHQpOihyPVJvKGwoTW4oKG49bChLbihlLDE2KSwyOSksbnx8ZS5paSgpKSxlLkRiPj4xNiksMTkpKSxlLkNiLlRoKGUsci5uLHIuZix0KSl9ZnVuY3Rpb24gTzduKGUpe3ZhciB0LG4scixhO2ZvcihDbigpLFZzKGUuYyxlLmEpLGE9bmV3IEcoZS5jKTthLmE8YS5jLmMubGVuZ3RoOylmb3Iocj1yZShhKSxuPW5ldyBHKGUuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDY5MyksdC5iZihyKX1mdW5jdGlvbiBON24oZSl7dmFyIHQsbixyLGE7Zm9yKENuKCksVnMoZS5jLGUuYSksYT1uZXcgRyhlLmMpO2EuYTxhLmMuYy5sZW5ndGg7KWZvcihyPXJlKGEpLG49bmV3IEcoZS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMzgyKSx0LmJmKHIpfWZ1bmN0aW9uIFA3bihlKXt2YXIgdCxuLHIsYSxvO2ZvcihhPUlpLG89bnVsbCxyPW5ldyBHKGUuZCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDIxOCksbi5kLmpebi5lLmomJih0PW4uZS5lLW4uZC5lLW4uYSx0PGEmJihhPXQsbz1uKSk7cmV0dXJuIG99ZnVuY3Rpb24gYXhlKCl7YXhlPVUsbDh0PW5ldyBwbihQRWUsKEhuKCksITEpKSxvOHQ9bmV3IHBuKEJFZSwxMDApLGFBZT0obEEoKSx0MWUpLGM4dD1uZXcgcG4oRkVlLGFBZSksdTh0PW5ldyBwbihSRWUsRGQpLGg4dD1uZXcgcG4oakVlLHB0KElpKSl9ZnVuY3Rpb24gSmR0KGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDO2ZvcihFPTAsYT1lLmFbdF0sbz0wLGY9YS5sZW5ndGg7bzxmOysrbylmb3Iocj1hW29dLEM9VEEocixuKSx3PUMuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTIpLGtpKGUuZixnLHB0KEUrKykpfWZ1bmN0aW9uIEI3bihlLHQsbil7dmFyIHIsYSxvLGY7aWYobilmb3IoYT1uLmEubGVuZ3RoLHI9bmV3IERtKGEpLGY9KHIuYi1yLmEpKnIuYzwwPyhzYigpLHRtKTpuZXcgY2Iocik7Zi5PYigpOylvPWwoZi5QYigpLDE3KSx4bihlLHQseHgoX3kobixvLmEpKSl9ZnVuY3Rpb24gRjduKGUsdCxuKXt2YXIgcixhLG8sZjtpZihuKWZvcihhPW4uYS5sZW5ndGgscj1uZXcgRG0oYSksZj0oci5iLXIuYSkqci5jPDA/KHNiKCksdG0pOm5ldyBjYihyKTtmLk9iKCk7KW89bChmLlBiKCksMTcpLHhuKGUsdCx4eChfeShuLG8uYSkpKX1mdW5jdGlvbiBveGUoZSl7Q2IoKTt2YXIgdDtyZXR1cm4gdD1sKFBBKFc4KGUuayksV2UoT28sYXUsNjQsMiwwLDEpKSwxMjYpLG5FKHQsMCx0Lmxlbmd0aCxudWxsKSx0WzBdPT0oQ3QoKSxRbikmJnRbMV09PWVyJiYoVHModCwwLGVyKSxUcyh0LDEsUW4pKSx0fWZ1bmN0aW9uIFpkdChlLHQsbil7dmFyIHIsYSxvO3JldHVybiBhPUNDbihlLHQsbiksbz1ROWUoZSxhKSxSb2UoZS5iKSx2b2UoZSx0LG4pLENuKCksVnMoYSxuZXcgcVllKGUpKSxyPVE5ZShlLGEpLFJvZShlLmIpLHZvZShlLG4sdCksbmV3IGNhKHB0KG8pLHB0KHIpKX1mdW5jdGlvbiBlZ3QoKXtlZ3Q9VSxORXQ9ZmkobmV3IFhzLCh1bygpLG1jKSwodm8oKSx6TCkpLElXPW5ldyB2cygibGluZWFyU2VnbWVudHMuaW5wdXRQcmlvIixwdCgwKSksT1c9bmV3IHZzKCJsaW5lYXJTZWdtZW50cy5vdXRwdXRQcmlvIixwdCgwKSl9ZnVuY3Rpb24gd3goKXt3eD1VLE5XPW5ldyB2cSgiUDFfVFJFRUlGSUNBVElPTiIsMCksbE09bmV3IHZxKCJQMl9OT0RFX09SREVSSU5HIiwxKSxoTT1uZXcgdnEoIlAzX05PREVfUExBQ0VNRU5UIiwyKSxmTT1uZXcgdnEoIlA0X0VER0VfUk9VVElORyIsMyl9ZnVuY3Rpb24gUjduKGUpe3ZhciB0LG4scixhO2ZvcihuPTAsdD0wLGE9bmV3IG9yKGUpO2EuZSE9YS5pLmdjKCk7KXI9bChncihhKSwyNyksbj1iLk1hdGgubWF4KHIuZytyLmksbiksdD1iLk1hdGgubWF4KHIuZityLmosdCk7cmV0dXJuIG5ldyBsdChuLHQpfWZ1bmN0aW9uIGo3bihlLHQpe3ZhciBuLHIsYSxvO2ZvcihvPTAscj1uZXcgRyhlKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMjcpLG8rPWIuTWF0aC5wb3cobi5nKm4uZi10LDIpO3JldHVybiBhPWIuTWF0aC5zcXJ0KG8vKGUuYy5sZW5ndGgtMSkpLGF9ZnVuY3Rpb24gSWgoKXtJaD1VLGVGPW5ldyBrcSgiVU5LTk9XTiIsMCksa2c9bmV3IGtxKCJBQk9WRSIsMSksR2I9bmV3IGtxKCJCRUxPVyIsMiksWkI9bmV3IGtxKCJJTkxJTkUiLDMpLG5ldyB2cygib3JnLmVjbGlwc2UuZWxrLmxhYmVsU2lkZSIsZUYpfWZ1bmN0aW9uIHRndChlLHQpe3ZhciBuO2lmKGUuWWkoKSYmdCE9bnVsbCl7Zm9yKG49MDtuPGUuaTsrK24paWYoUGkodCxlLmdbbl0pKXJldHVybiBufWVsc2UgZm9yKG49MDtuPGUuaTsrK24paWYocWUoZS5nW25dKT09PXFlKHQpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uICQ3bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gdC5jPT0ocW8oKSx6dSkmJm4uYz09JGw/LTE6dC5jPT0kbCYmbi5jPT16dT8xOihyPXEwdCh0LmEsZS5hKSxhPXEwdChuLmEsZS5hKSx0LmM9PXp1P2EtcjpyLWEpfWZ1bmN0aW9uIEZ5KGUsdCxuKXtpZihuJiYodDwwfHx0Pm4uYS5jLmxlbmd0aCkpdGhyb3cgdWUobmV3IFluKCJpbmRleCBtdXN0IGJlID49IDAgYW5kIDw9IGxheWVyIG5vZGUgY291bnQiKSk7ZS5jJiZhbChlLmMuYSxlKSxlLmM9bixuJiZwdyhuLmEsdCxlKX1mdW5jdGlvbiBuZ3QoZSx0KXt2YXIgbixyLGE7Zm9yKHI9bmV3IGhyKGRyKHNwKGUpLmEuS2MoKSxuZXcgaikpO2pyKHIpOylyZXR1cm4gbj1sKHhyKHIpLDE4KSxhPWwodC5LYihuKSwxMCksbmV3IEpTKFhyKGEubi5iK2Euby5iLzIpKTtyZXR1cm4gb18oKSxvXygpLHYwZX1mdW5jdGlvbiByZ3QoZSx0KXt0aGlzLmM9bmV3IFByLHRoaXMuYT1lLHRoaXMuYj10LHRoaXMuZD1sKFEoZSwoZnQoKSwkNikpLDMxMikscWUoUShlLChOdCgpLEdNZSkpKT09PXFlKChjTigpLEpLKSk/dGhpcy5lPW5ldyBYUWU6dGhpcy5lPW5ldyBZUWV9ZnVuY3Rpb24gQkEoZSx0KXt2YXIgbixyO3JldHVybiByPW51bGwsZS5wZigocGkoKSxyOSkpJiYobj1sKGUub2YocjkpLDk2KSxuLnBmKHQpJiYocj1uLm9mKHQpKSkscj09bnVsbCYmZS5UZigpJiYocj1lLlRmKCkub2YodCkpLHI9PW51bGwmJihyPUl0KHQpKSxyfWZ1bmN0aW9uIGt1ZShlLHQpe3ZhciBuLHI7bj1lLmZkKHQpO3RyeXtyZXR1cm4gcj1uLlBiKCksbi5RYigpLHJ9Y2F0Y2goYSl7dGhyb3cgYT1icyhhKSxEZShhLDExMik/dWUobmV3IHRjKCJDYW4ndCByZW1vdmUgZWxlbWVudCAiK3QpKTp1ZShhKX19ZnVuY3Rpb24gejduKGUsdCl7dmFyIG4scixhO2lmKHI9bmV3IFF6LGE9bmV3IFI3ZShyLnEuZ2V0RnVsbFllYXIoKS1MYixyLnEuZ2V0TW9udGgoKSxyLnEuZ2V0RGF0ZSgpKSxuPUpBbihlLHQsYSksbj09MHx8bjx0Lmxlbmd0aCl0aHJvdyB1ZShuZXcgWW4odCkpO3JldHVybiBhfWZ1bmN0aW9uIGN4ZShlLHQpe3ZhciBuLHIsYTtmb3IobnIodCkscXllKHQhPWUpLGE9ZS5iLmMubGVuZ3RoLHI9dC5LYygpO3IuT2IoKTspbj1yLlBiKCksdnQoZS5iLG5yKG4pKTtyZXR1cm4gYSE9ZS5iLmMubGVuZ3RoPyhLN2UoZSwwKSwhMCk6ITF9ZnVuY3Rpb24gVk4oKXtWTj1VLGxBZT0ocGkoKSxXQiksbmV3IEhhKERnZSwoSG4oKSwhMCkpLGQ4dD1rdixnOHQ9aTcscDh0PVViLGY4dD1yNyxmQWU9WUIsYjh0PVM0LHVBZT0oYXhlKCksbDh0KSxvQWU9Yzh0LGNBZT11OHQsaEFlPWg4dCxUSz1vOHR9ZnVuY3Rpb24gcTduKGUsdCl7aWYodD09ZS5jKXJldHVybiBlLmQ7aWYodD09ZS5kKXJldHVybiBlLmM7dGhyb3cgdWUobmV3IFluKCIncG9ydCcgbXVzdCBiZSBlaXRoZXIgdGhlIHNvdXJjZSBwb3J0IG9yIHRhcmdldCBwb3J0IG9mIHRoZSBlZGdlLiIpKX1mdW5jdGlvbiBIN24oZSx0LG4pe3ZhciByLGE7c3dpdGNoKGE9ZS5vLHI9ZS5kLHQuZyl7Y2FzZSAxOnJldHVybi1yLmQtbjtjYXNlIDM6cmV0dXJuIGEuYityLmErbjtjYXNlIDI6cmV0dXJuIGEuYStyLmMrbjtjYXNlIDQ6cmV0dXJuLXIuYi1uO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIHV4ZShlLHQsbixyKXt2YXIgYSxvLGYsZztmb3IoVmEodCxsKHIuWGIoMCksMzApKSxnPXIua2QoMSxyLmdjKCkpLG89bChuLktiKHQpLDIwKS5LYygpO28uT2IoKTspYT1sKG8uUGIoKSwxOCksZj1hLmMuaT09dD9hLmQuaTphLmMuaSx1eGUoZSxmLG4sZyl9ZnVuY3Rpb24gaWd0KGUpe3ZhciB0O3JldHVybiB0PW5ldyBQcixucyhlLChmdCgpLFcxZSkpP2woUShlLFcxZSksODUpOihJcyhGaShuZXcgYm4obnVsbCxuZXcga24oZS5qLDE2KSksbmV3IEdaKSxuZXcgdVllKHQpKSxydChlLFcxZSx0KSx0KX1mdW5jdGlvbiBzZ3QoZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihyPTAsYT0wLG49MCxmPW5ldyBHKGUpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxODYpLHI9Yi5NYXRoLm1heChyLG8uZSksYSs9by5iKyhuPjA/dDowKSwrK247cmV0dXJuIG5ldyBsdChyLGEpfWZ1bmN0aW9uIGx4ZShlLHQpe3ZhciBuLHI7cmV0dXJuIGUuRGI+PjE2PT02P2UuQ2IuVGgoZSw2LGpzLHQpOihyPVJvKGwoTW4oKG49bChLbihlLDE2KSwyOSksbnx8KHN1KCkscFkpKSxlLkRiPj4xNiksMTkpKSxlLkNiLlRoKGUsci5uLHIuZix0KSl9ZnVuY3Rpb24gaHhlKGUsdCl7dmFyIG4scjtyZXR1cm4gZS5EYj4+MTY9PTc/ZS5DYi5UaChlLDEsb0YsdCk6KHI9Um8obChNbigobj1sKEtuKGUsMTYpLDI5KSxufHwoc3UoKSxkUGUpKSxlLkRiPj4xNiksMTkpKSxlLkNiLlRoKGUsci5uLHIuZix0KSl9ZnVuY3Rpb24gZnhlKGUsdCl7dmFyIG4scjtyZXR1cm4gZS5EYj4+MTY9PTk/ZS5DYi5UaChlLDksQWksdCk6KHI9Um8obChNbigobj1sKEtuKGUsMTYpLDI5KSxufHwoc3UoKSxwUGUpKSxlLkRiPj4xNiksMTkpKSxlLkNiLlRoKGUsci5uLHIuZix0KSl9ZnVuY3Rpb24gYWd0KGUsdCl7dmFyIG4scjtyZXR1cm4gZS5EYj4+MTY9PTU/ZS5DYi5UaChlLDksVFksdCk6KHI9Um8obChNbigobj1sKEtuKGUsMTYpLDI5KSxufHwoVG4oKSxEMikpLGUuRGI+PjE2KSwxOSkpLGUuQ2IuVGgoZSxyLm4sci5mLHQpKX1mdW5jdGlvbiBvZ3QoZSx0KXt2YXIgbixyO3JldHVybiBlLkRiPj4xNj09Nz9lLkNiLlRoKGUsNix1MSx0KToocj1SbyhsKE1uKChuPWwoS24oZSwxNiksMjkpLG58fChUbigpLE8yKSksZS5EYj4+MTYpLDE5KSksZS5DYi5UaChlLHIubixyLmYsdCkpfWZ1bmN0aW9uIGR4ZShlLHQpe3ZhciBuLHI7cmV0dXJuIGUuRGI+PjE2PT0zP2UuQ2IuVGgoZSwwLHVGLHQpOihyPVJvKGwoTW4oKG49bChLbihlLDE2KSwyOSksbnx8KFRuKCksTTIpKSxlLkRiPj4xNiksMTkpKSxlLkNiLlRoKGUsci5uLHIuZix0KSl9ZnVuY3Rpb24gY2d0KCl7dGhpcy5hPW5ldyBUJCx0aGlzLmc9bmV3IGNVLHRoaXMuaj1uZXcgY1UsdGhpcy5iPW5ldyBQcix0aGlzLmQ9bmV3IGNVLHRoaXMuaT1uZXcgY1UsdGhpcy5rPW5ldyBQcix0aGlzLmM9bmV3IFByLHRoaXMuZT1uZXcgUHIsdGhpcy5mPW5ldyBQcn1mdW5jdGlvbiBWN24oZSx0LG4pe3ZhciByLGEsbztmb3IobjwwJiYobj0wKSxvPWUuaSxhPW47YTxvO2ErKylpZihyPU9lKGUsYSksdD09bnVsbCl7aWYocj09bnVsbClyZXR1cm4gYX1lbHNlIGlmKHFlKHQpPT09cWUocil8fFBpKHQscikpcmV0dXJuIGE7cmV0dXJuLTF9ZnVuY3Rpb24gVTduKGUsdCl7dmFyIG4scjtyZXR1cm4gbj10LnFpKGUuYSksbj8ocj1laShuMSgoIW4uYiYmKG4uYj1uZXcgZGgoKFRuKCksTm8pLFljLG4pKSxuLmIpLHRLKSksdm4oSlAscik/S18oZSxBaCh0LnFrKCkpKTpyKTpudWxsfWZ1bmN0aW9uIEZFKGUsdCl7dmFyIG4scjtpZih0KXtpZih0PT1lKXJldHVybiEwO2ZvcihuPTAscj1sKHQsNTQpLlBoKCk7ciYmciE9dDtyPXIuUGgoKSl7aWYoKytuPm9oZSlyZXR1cm4gRkUoZSxyKTtpZihyPT1lKXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBHN24oZSl7c3dpdGNoKHpxKCksZS5xLmcpe2Nhc2UgNTpWcHQoZSwoQ3QoKSxRbikpLFZwdChlLERyKTticmVhaztjYXNlIDQ6VTJ0KGUsKEN0KCksUW4pKSxVMnQoZSxEcik7YnJlYWs7ZGVmYXVsdDpXdnQoZSwoQ3QoKSxRbikpLFd2dChlLERyKX19ZnVuY3Rpb24gSzduKGUpe3N3aXRjaCh6cSgpLGUucS5nKXtjYXNlIDU6dTJ0KGUsKEN0KCksYXIpKSx1MnQoZSxlcik7YnJlYWs7Y2FzZSA0OmdkdChlLChDdCgpLGFyKSksZ2R0KGUsZXIpO2JyZWFrO2RlZmF1bHQ6WXZ0KGUsKEN0KCksYXIpKSxZdnQoZSxlcil9fWZ1bmN0aW9uIFc3bihlKXt2YXIgdCxuO3Q9bChRKGUsKGIwKCksZTh0KSksMTcpLHQ/KG49dC5hLG49PTA/cnQoZSwoYmIoKSxFSyksbmV3IFVjZSk6cnQoZSwoYmIoKSxFSyksbmV3IFZIKG4pKSk6cnQoZSwoYmIoKSxFSyksbmV3IFZIKDEpKX1mdW5jdGlvbiBZN24oZSx0KXt2YXIgbjtzd2l0Y2gobj1lLmksdC5nKXtjYXNlIDE6cmV0dXJuLShlLm4uYitlLm8uYik7Y2FzZSAyOnJldHVybiBlLm4uYS1uLm8uYTtjYXNlIDM6cmV0dXJuIGUubi5iLW4uby5iO2Nhc2UgNDpyZXR1cm4tKGUubi5hK2Uuby5hKX1yZXR1cm4gMH1mdW5jdGlvbiBYN24oZSx0KXtzd2l0Y2goZS5nKXtjYXNlIDA6cmV0dXJuIHQ9PShoZigpLCRiKT9ISzpWSztjYXNlIDE6cmV0dXJuIHQ9PShoZigpLCRiKT9ISzpwQjtjYXNlIDI6cmV0dXJuIHQ9PShoZigpLCRiKT9wQjpWSztkZWZhdWx0OnJldHVybiBwQn19ZnVuY3Rpb24gVU4oZSx0KXt2YXIgbixyLGE7Zm9yKGFsKGUuYSx0KSxlLmUtPXQucisoZS5hLmMubGVuZ3RoPT0wPzA6ZS5jKSxhPXhDZSxyPW5ldyBHKGUuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDE3MiksYT1iLk1hdGgubWF4KGEsbi5kKTtlLmI9YX1mdW5jdGlvbiBneGUoZSx0KXt2YXIgbixyO3JldHVybiBlLkRiPj4xNj09Mz9lLkNiLlRoKGUsMTIsQWksdCk6KHI9Um8obChNbigobj1sKEtuKGUsMTYpLDI5KSxufHwoc3UoKSxmUGUpKSxlLkRiPj4xNiksMTkpKSxlLkNiLlRoKGUsci5uLHIuZix0KSl9ZnVuY3Rpb24gcHhlKGUsdCl7dmFyIG4scjtyZXR1cm4gZS5EYj4+MTY9PTExP2UuQ2IuVGgoZSwxMCxBaSx0KToocj1SbyhsKE1uKChuPWwoS24oZSwxNiksMjkpLG58fChzdSgpLGdQZSkpLGUuRGI+PjE2KSwxOSkpLGUuQ2IuVGgoZSxyLm4sci5mLHQpKX1mdW5jdGlvbiB1Z3QoZSx0KXt2YXIgbixyO3JldHVybiBlLkRiPj4xNj09MTA/ZS5DYi5UaChlLDExLFZmLHQpOihyPVJvKGwoTW4oKG49bChLbihlLDE2KSwyOSksbnx8KFRuKCksSTIpKSxlLkRiPj4xNiksMTkpKSxlLkNiLlRoKGUsci5uLHIuZix0KSl9ZnVuY3Rpb24gbGd0KGUsdCl7dmFyIG4scjtyZXR1cm4gZS5EYj4+MTY9PTEwP2UuQ2IuVGgoZSwxMixVZix0KToocj1SbyhsKE1uKChuPWwoS24oZSwxNiksMjkpLG58fChUbigpLE40KSksZS5EYj4+MTYpLDE5KSksZS5DYi5UaChlLHIubixyLmYsdCkpfWZ1bmN0aW9uIE9mKGUpe3ZhciB0O3JldHVybiEoZS5CYiYxKSYmZS5yJiZlLnIuVmgoKSYmKHQ9bChlLnIsNTQpLGUucj1sKHliKGUsdCksMTQyKSxlLnIhPXQmJmUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDksOCx0LGUucikpKSxlLnJ9ZnVuY3Rpb24gRXVlKGUsdCxuKXt2YXIgcjtyZXR1cm4gcj1oZShsZShOYSwxKSxabywyOCwxNSxbenhlKGUsKHQxKCksR2MpLHQsbiksenhlKGUsJHUsdCxuKSx6eGUoZSxLYyx0LG4pXSksZS5mJiYoclswXT1iLk1hdGgubWF4KHJbMF0sclsyXSksclsyXT1yWzBdKSxyfWZ1bmN0aW9uIFE3bihlLHQpe3ZhciBuLHIsYTtpZihhPXg2bihlLHQpLGEuYy5sZW5ndGghPTApZm9yKFZzKGEsbmV3IHBTKSxuPWEuYy5sZW5ndGgscj0wO3I8bjtyKyspcUUoZSwoU24ocixhLmMubGVuZ3RoKSxsKGEuY1tyXSwyOTMpKSx5U24oZSxhLHIpKX1mdW5jdGlvbiBKN24oZSl7dmFyIHQsbixyLGE7Zm9yKGE9bCgkaShlLmEsKFJ5KCksVUspKSwxNSkuS2MoKTthLk9iKCk7KWZvcihyPWwoYS5QYigpLDEwNSksbj1XOChyLmspLktjKCk7bi5PYigpOyl0PWwobi5QYigpLDY0KSxWayhlLHIsdCwoT3coKSxSYiksMSl9ZnVuY3Rpb24gWjduKGUpe3ZhciB0LG47aWYoZS5rPT0oWm4oKSxBYSkpe2ZvcihuPW5ldyBocihkcihzcChlKS5hLktjKCksbmV3IGopKTtqcihuKTspaWYodD1sKHhyKG4pLDE4KSwhRG8odCkmJmUuYz09a3hlKHQsZSkuYylyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBlOG4oZSl7dmFyIHQsbjtpZihlLms9PShabigpLEFhKSl7Zm9yKG49bmV3IGhyKGRyKHNwKGUpLmEuS2MoKSxuZXcgaikpO2pyKG4pOylpZih0PWwoeHIobiksMTgpLCFEbyh0KSYmdC5jLmkuYz09dC5kLmkuYylyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB0OG4oZSx0KXt2YXIgbixyLGEsbyxmO2lmKHQpZm9yKGE9dC5hLmxlbmd0aCxuPW5ldyBEbShhKSxmPShuLmItbi5hKSpuLmM8MD8oc2IoKSx0bSk6bmV3IGNiKG4pO2YuT2IoKTspbz1sKGYuUGIoKSwxNykscj1Kayh0LG8uYSksciYmUjJ0KGUscil9ZnVuY3Rpb24gbjhuKCl7eDNlKCk7dmFyIGUsdDtmb3IoSEluKChsYigpLFZuKSksT0luKFZuKSx5dWUoVm4pLExQZT0oVG4oKSx0ZCksdD1uZXcgRyhSUGUpO3QuYTx0LmMuYy5sZW5ndGg7KWU9bChyZSh0KSwyNDgpLFpFKGUsdGQsbnVsbCk7cmV0dXJuITB9ZnVuY3Rpb24gYnhlKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRTtyZXR1cm4gdz1lLmg+PjE5LEU9dC5oPj4xOSx3IT1FP0UtdzooYT1lLmgsZz10LmgsYSE9Zz9hLWc6KHI9ZS5tLGY9dC5tLHIhPWY/ci1mOihuPWUubCxvPXQubCxuLW8pKSl9ZnVuY3Rpb24gZFUoKXtkVT1VLERfZT0oUFUoKSx6MGUpLE1fZT1uZXcgcG4ocEVlLERfZSksTF9lPShhVigpLCQwZSksQV9lPW5ldyBwbihiRWUsTF9lKSxfX2U9KFpWKCksajBlKSxTX2U9bmV3IHBuKG1FZSxfX2UpLENfZT1uZXcgcG4odkVlLChIbigpLCEwKSl9ZnVuY3Rpb24gRkEoZSx0LG4pe3ZhciByLGE7cj10Km4sRGUoZS5nLDE1NCk/KGE9aXgoZSksYS5mLmQ/YS5mLmF8fChlLmQuYSs9citIMSk6KGUuZC5kLT1yK0gxLGUuZC5hKz1yK0gxKSk6RGUoZS5nLDEwKSYmKGUuZC5kLT1yLGUuZC5hKz0yKnIpfWZ1bmN0aW9uIGhndChlLHQsbil7dmFyIHIsYSxvLGYsZztmb3IoYT1lW24uZ10sZz1uZXcgRyh0LmQpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxMDUpLG89Zi5pLG8mJm8uaT09biYmKHI9Zi5kW24uZ10sYVtyXT1iLk1hdGgubWF4KGFbcl0sby5qLmIpKX1mdW5jdGlvbiByOG4oZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihyPTAsYT0wLG49MCxmPW5ldyBHKHQuZCk7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDMxNSksbFUobykscj1iLk1hdGgubWF4KHIsby5iKSxhKz1vLmQrKG4+MD9lLmI6MCksKytuO3QuYj1yLHQuZT1hfWZ1bmN0aW9uIGZndChlKXt2YXIgdCxuLHI7aWYocj1lLmIsdGV0KGUuaSxyLmxlbmd0aCkpe2ZvcihuPXIubGVuZ3RoKjIsZS5iPVdlKGswZSxUUCwzMDMsbiwwLDEpLGUuYz1XZShrMGUsVFAsMzAzLG4sMCwxKSxlLmY9bi0xLGUuaT0wLHQ9ZS5hO3Q7dD10LmMpZVAoZSx0LHQpOysrZS5nfX1mdW5jdGlvbiBpOG4oZSx0LG4scil7dmFyIGEsbyxmLGc7Zm9yKGE9MDthPHQubzthKyspZm9yKG89YS10LmorbixmPTA7Zjx0LnA7ZisrKWc9Zi10LmsrcixyNih0LGEsZik/UTZuKGUsbyxnKXx8cDduKGUsbyxnKTpQZHQodCxhLGYpJiYoRGR0KGUsbyxnKXx8YjduKGUsbyxnKSl9ZnVuY3Rpb24gUkEoZSx0KXtyZXR1cm4gZS5iLmE9Yi5NYXRoLm1pbihlLmIuYSx0LmMpLGUuYi5iPWIuTWF0aC5taW4oZS5iLmIsdC5kKSxlLmEuYT1iLk1hdGgubWF4KGUuYS5hLHQuYyksZS5hLmI9Yi5NYXRoLm1heChlLmEuYix0LmQpLCRuKGUuYyx0KSwhMH1mdW5jdGlvbiBzOG4oZSx0LG4pe3ZhciByO3I9dC5jLmksci5rPT0oWm4oKSxBYSk/KHJ0KGUsKGZ0KCksbzEpLGwoUShyLG8xKSwxMikpLHJ0KGUsJGYsbChRKHIsJGYpLDEyKSkpOihydChlLChmdCgpLG8xKSx0LmMpLHJ0KGUsJGYsbi5kKSl9ZnVuY3Rpb24gUkUoZSx0LG4pe2g2KCk7dmFyIHIsYSxvLGYsZyx3O3JldHVybiBmPXQvMixvPW4vMixyPWIuTWF0aC5hYnMoZS5hKSxhPWIuTWF0aC5hYnMoZS5iKSxnPTEsdz0xLHI+ZiYmKGc9Zi9yKSxhPm8mJih3PW8vYSksbWQoZSxiLk1hdGgubWluKGcsdykpLGV9ZnVuY3Rpb24gYThuKCl7elUoKTt2YXIgZSx0O3RyeXtpZih0PWwoU3hlKChpYigpLEdmKSx4VCksMjExMyksdClyZXR1cm4gdH1jYXRjaChuKXtpZihuPWJzKG4pLERlKG4sMTAzKSllPW4scDVlKChKcigpLGUpKTtlbHNlIHRocm93IHVlKG4pfXJldHVybiBuZXcgaWt9ZnVuY3Rpb24gbzhuKCl7elUoKTt2YXIgZSx0O3RyeXtpZih0PWwoU3hlKChpYigpLEdmKSxGZiksMjA0MCksdClyZXR1cm4gdH1jYXRjaChuKXtpZihuPWJzKG4pLERlKG4sMTAzKSllPW4scDVlKChKcigpLGUpKTtlbHNlIHRocm93IHVlKG4pfXJldHVybiBuZXcgZDh9ZnVuY3Rpb24gYzhuKCl7a2x0KCk7dmFyIGUsdDt0cnl7aWYodD1sKFN4ZSgoaWIoKSxHZiksY3YpLDIxMjIpLHQpcmV0dXJuIHR9Y2F0Y2gobil7aWYobj1icyhuKSxEZShuLDEwMykpZT1uLHA1ZSgoSnIoKSxlKSk7ZWxzZSB0aHJvdyB1ZShuKX1yZXR1cm4gbmV3IHVrfWZ1bmN0aW9uIHU4bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gYT1lLmUsZS5lPXQsZS5EYiY0JiYhKGUuRGImMSkmJihyPW5ldyBfYShlLDEsNCxhLHQpLG4/bi5uaihyKTpuPXIpLGEhPXQmJih0P249WkUoZSxTVShlLHQpLG4pOm49WkUoZSxlLmEsbikpLG59ZnVuY3Rpb24gZGd0KCl7UXouY2FsbCh0aGlzKSx0aGlzLmU9LTEsdGhpcy5hPSExLHRoaXMucD1sbyx0aGlzLms9LTEsdGhpcy5jPS0xLHRoaXMuYj0tMSx0aGlzLmc9ITEsdGhpcy5mPS0xLHRoaXMuaj0tMSx0aGlzLm49LTEsdGhpcy5pPS0xLHRoaXMuZD0tMSx0aGlzLm89bG99ZnVuY3Rpb24gbDhuKGUsdCl7dmFyIG4scixhO2lmKHI9ZS5iLmQuZCxlLmF8fChyKz1lLmIuZC5hKSxhPXQuYi5kLmQsdC5hfHwoYSs9dC5iLmQuYSksbj1ZaShyLGEpLG49PTApe2lmKCFlLmEmJnQuYSlyZXR1cm4tMTtpZighdC5hJiZlLmEpcmV0dXJuIDF9cmV0dXJuIG59ZnVuY3Rpb24gaDhuKGUsdCl7dmFyIG4scixhO2lmKHI9ZS5iLmIuZCxlLmF8fChyKz1lLmIuYi5hKSxhPXQuYi5iLmQsdC5hfHwoYSs9dC5iLmIuYSksbj1ZaShyLGEpLG49PTApe2lmKCFlLmEmJnQuYSlyZXR1cm4tMTtpZighdC5hJiZlLmEpcmV0dXJuIDF9cmV0dXJuIG59ZnVuY3Rpb24gZjhuKGUsdCl7dmFyIG4scixhO2lmKHI9ZS5iLmcuZCxlLmF8fChyKz1lLmIuZy5hKSxhPXQuYi5nLmQsdC5hfHwoYSs9dC5iLmcuYSksbj1ZaShyLGEpLG49PTApe2lmKCFlLmEmJnQuYSlyZXR1cm4tMTtpZighdC5hJiZlLmEpcmV0dXJuIDF9cmV0dXJuIG59ZnVuY3Rpb24gbXhlKCl7bXhlPVUsdjh0PXlsKGZpKGZpKGZpKG5ldyBYcywodW8oKSxfdSksKHZvKCksS0FlKSksX3UsV0FlKSxtYyxZQWUpLG1jLEJBZSkseTh0PWZpKGZpKG5ldyBYcyxfdSxMQWUpLF91LEZBZSksdzh0PXlsKG5ldyBYcyxtYyxqQWUpfWZ1bmN0aW9uIGQ4bihlKXt2YXIgdCxuLHIsYSxvO2Zvcih0PWwoUShlLChmdCgpLEtMKSksODUpLG89ZS5uLHI9dC5DYygpLktjKCk7ci5PYigpOyluPWwoci5QYigpLDMxNCksYT1uLmksYS5jKz1vLmEsYS5kKz1vLmIsbi5jP0lidChuKTpPYnQobik7cnQoZSxLTCxudWxsKX1mdW5jdGlvbiBnOG4oZSx0LG4pe3ZhciByLGE7c3dpdGNoKGE9ZS5iLHI9YS5kLHQuZyl7Y2FzZSAxOnJldHVybi1yLmQtbjtjYXNlIDI6cmV0dXJuIGEuby5hK3IuYytuO2Nhc2UgMzpyZXR1cm4gYS5vLmIrci5hK247Y2FzZSA0OnJldHVybi1yLmItbjtkZWZhdWx0OnJldHVybi0xfX1mdW5jdGlvbiBwOG4oZSx0LG4pe3ZhciByLGE7Zm9yKG4uVWcoIkludGVyYWN0aXZlIG5vZGUgcGxhY2VtZW50IiwxKSxlLmE9bChRKHQsKGZ0KCksJDYpKSwzMTIpLGE9bmV3IEcodC5iKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMzApLG9TbihlLHIpO24uVmcoKX1mdW5jdGlvbiBiOG4oZSl7dmFyIHQsbixyLGEsbztpZihyPTAsYT15NixlLmIpZm9yKHQ9MDt0PDM2MDt0Kyspbj10Ki4wMTc0NTMyOTI1MTk5NDMyOTUsZ2tlKGUsZS5kLDAsMCxpdixuKSxvPWUuYi5EZyhlLmQpLG88YSYmKHI9bixhPW8pO2drZShlLGUuZCwwLDAsaXYscil9ZnVuY3Rpb24gbThuKGUsdCl7dmFyIG4scixhLG87Zm9yKG89bmV3IFByLHQuZT1udWxsLHQuZj1udWxsLHI9bmV3IEcodC5pKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNjgpLGE9bChjcihlLmcsbi5hKSw0Miksbi5hPW1IKG4uYiksa2kobyxuLmEsYSk7ZS5nPW99ZnVuY3Rpb24gdjhuKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7Zm9yKGE9dC1lLmUsbz1hL2UuZC5jLmxlbmd0aCxmPTAsdz1uZXcgRyhlLmQpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwzMTUpLHI9ZS5iLWcuYituLEIxdChnLGcuZStmKm8sZy5mKSxlN24oZyxvLHIpLCsrZn1mdW5jdGlvbiBnZ3QoZSl7dmFyIHQ7aWYoZS5mLl9qKCksZS5iIT0tMSl7aWYoKytlLmIsdD1lLmYuZFtlLmFdLGUuYjx0LmkpcmV0dXJuOysrZS5hfWZvcig7ZS5hPGUuZi5kLmxlbmd0aDsrK2UuYSlpZih0PWUuZi5kW2UuYV0sdCYmdC5pIT0wKXtlLmI9MDtyZXR1cm59ZS5iPS0xfWZ1bmN0aW9uIHc4bihlLHQpe3ZhciBuLHIsYTtmb3IoYT10LmMubGVuZ3RoLG49eGtuKGUsYT09MD8iIjooU24oMCx0LmMubGVuZ3RoKSxlaSh0LmNbMF0pKSkscj0xO3I8YSYmbjsrK3Ipbj1sKG4sNTQpLlpoKChTbihyLHQuYy5sZW5ndGgpLGVpKHQuY1tyXSkpKTtyZXR1cm4gbn1mdW5jdGlvbiBwZ3QoZSx0KXt2YXIgbixyO2ZvcihyPW5ldyBHKHQpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxMCksZS5jW24uYy5wXVtuLnBdLmE9WTRlKGUuaSksZS5jW24uYy5wXVtuLnBdLmQ9emUoZS5jW24uYy5wXVtuLnBdLmEpLGUuY1tuLmMucF1bbi5wXS5iPTF9ZnVuY3Rpb24geThuKGUsdCl7dmFyIG4scixhLG87Zm9yKG89MCxyPW5ldyBHKGUpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxNjMpLG8rPWIuTWF0aC5wb3cod2wobikqZ2gobiktdCwyKTtyZXR1cm4gYT1iLk1hdGguc3FydChvLyhlLmMubGVuZ3RoLTEpKSxhfWZ1bmN0aW9uIGJndChlLHQpe3ZhciBuLHIsYSxvO2ZvcihvPTAsYT1sKGwoJGkoZS5yLHQpLDIxKSw4NykuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTE3KSxvPWIuTWF0aC5tYXgobyxyLmUuYStyLmIuTWYoKS5hKTtuPWwoUW8oZS5iLHQpLDEyNyksbi5uLmI9MCxuLmEuYT1vfWZ1bmN0aW9uIG1ndChlLHQpe3ZhciBuLHIsYSxvO2ZvcihuPTAsbz1sKGwoJGkoZS5yLHQpLDIxKSw4NykuS2MoKTtvLk9iKCk7KWE9bChvLlBiKCksMTE3KSxuPWIuTWF0aC5tYXgobixhLmUuYithLmIuTWYoKS5iKTtyPWwoUW8oZS5iLHQpLDEyNyksci5uLmQ9MCxyLmEuYj1ufWZ1bmN0aW9uIHZndChlLHQsbixyKXt2YXIgYSxvLGY7cmV0dXJuIG89bl9uKGUsdCxuLHIpLGY9c2tlKGUsbyksT3VlKGUsdCxuLHIpLFJvZShlLmIpLENuKCksVnMobyxuZXcgSFllKGUpKSxhPXNrZShlLG8pLE91ZShlLG4sdCxyKSxSb2UoZS5iKSxuZXcgY2EocHQoZikscHQoYSkpfWZ1bmN0aW9uIHg4bihlLHQpe3ZhciBuO3QuVWcoIkRlbGF1bmF5IHRyaWFuZ3VsYXRpb24iLDEpLG49bmV3IGJ0LFZ1KGUuaSxuZXcgQ1hlKG4pKSxSdChCdChRKGUsKHBFKCksakwpKSkpLGUuZT9LYShlLmUsZnd0KG4pKTplLmU9Znd0KG4pLHQuVmcoKX1mdW5jdGlvbiBrOG4oZSx0LG4pe3ZhciByLGE7Zm9yKGtPKGUsZS5qK3QsZS5rK24pLGE9bmV3IG9yKCghZS5hJiYoZS5hPW5ldyBZcyhxaCxlLDUpKSxlLmEpKTthLmUhPWEuaS5nYygpOylyPWwoZ3IoYSksMzc3KSxXc2UocixyLmErdCxyLmIrbik7eE8oZSxlLmIrdCxlLmMrbil9ZnVuY3Rpb24gdnhlKGUsdCxuLHIpe3N3aXRjaChuKXtjYXNlIDc6cmV0dXJuIWUuZSYmKGUuZT1uZXcgTG4oanMsZSw3LDQpKSxSdShlLmUsdCxyKTtjYXNlIDg6cmV0dXJuIWUuZCYmKGUuZD1uZXcgTG4oanMsZSw4LDUpKSxSdShlLmQsdCxyKX1yZXR1cm4gTXVlKGUsdCxuLHIpfWZ1bmN0aW9uIHd4ZShlLHQsbixyKXtzd2l0Y2gobil7Y2FzZSA3OnJldHVybiFlLmUmJihlLmU9bmV3IExuKGpzLGUsNyw0KSksVG8oZS5lLHQscik7Y2FzZSA4OnJldHVybiFlLmQmJihlLmQ9bmV3IExuKGpzLGUsOCw1KSksVG8oZS5kLHQscil9cmV0dXJuIGRjZShlLHQsbixyKX1mdW5jdGlvbiBFOG4oZSx0LG4pe3ZhciByLGEsbyxmLGc7aWYobilmb3Iobz1uLmEubGVuZ3RoLHI9bmV3IERtKG8pLGc9KHIuYi1yLmEpKnIuYzwwPyhzYigpLHRtKTpuZXcgY2Iocik7Zy5PYigpOylmPWwoZy5QYigpLDE3KSxhPUprKG4sZi5hKSxhJiZIcHQoZSxhLHQpfWZ1bmN0aW9uIEdOKGUsdCxuKXt2YXIgcixhLG8sZixnO3JldHVybiBlLl9qKCksbz10PT1udWxsPzA6ZXModCksZS5mPjAmJihmPShvJklpKSVlLmQubGVuZ3RoLGE9eTllKGUsZixvLHQpLGEpPyhnPWEubmQobiksZyk6KHI9ZS5jayhvLHQsbiksZS5jLkZjKHIpLG51bGwpfWZ1bmN0aW9uIHl4ZShlLHQpe3ZhciBuLHIsYSxvO3N3aXRjaChvMihlLHQpLktsKCkpe2Nhc2UgMzpjYXNlIDI6e2ZvcihuPWQ2KHQpLGE9MCxvPW4uaTthPG87KythKWlmKHI9bChPZShuLGEpLDM1KSxrdyhpYyhlLHIpKT09NSlyZXR1cm4gcjticmVha319cmV0dXJuIG51bGx9ZnVuY3Rpb24gVDhuKGUpe3ZhciB0LG4scixhLG87aWYodGV0KGUuZixlLmIubGVuZ3RoKSlmb3Iocj1XZShjNnQsVFAsMjI3LGUuYi5sZW5ndGgqMiwwLDEpLGUuYj1yLGE9ci5sZW5ndGgtMSxuPWUuYTtuIT1lO249bi5fZCgpKW89bChuLDIyNyksdD1vLmQmYSxvLmE9clt0XSxyW3RdPW99ZnVuY3Rpb24gQzhuKGUpe3ZhciB0LG47cmV0dXJuIG49bChRKGUsKGZ0KCksTHUpKSwyMSksdD1PcShYRXQpLG4uSGMoKEhvKCksQjYpKSYmRGgodCxaRXQpLG4uSGMoR0wpJiZEaCh0LGVUdCksbi5IYyhSVCkmJkRoKHQsUUV0KSxuLkhjKGpUKSYmRGgodCxKRXQpLHR9ZnVuY3Rpb24geHhlKGUpe2lmKGU8MCl0aHJvdyB1ZShuZXcgWW4oIlRoZSBpbnB1dCBtdXN0IGJlIHBvc2l0aXZlIikpO3JldHVybiBlPFVPZS5sZW5ndGg/Rm0oVU9lW2VdKTpiLk1hdGguc3FydChpdiplKSoodDRuKGUsZSkvbjhlKDIuNzE4MjgxODI4NDU5MDQ1LGUpKX1mdW5jdGlvbiBqRShlLHQpe3ZhciBuO2lmKGUuWWkoKSYmdCE9bnVsbCl7Zm9yKG49MDtuPGUuaTsrK24paWYoUGkodCxlLmdbbl0pKXJldHVybiEwfWVsc2UgZm9yKG49MDtuPGUuaTsrK24paWYocWUoZS5nW25dKT09PXFlKHQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFM4bihlLHQpe2lmKHQ9PW51bGwpe2Zvcig7ZS5hLk9iKCk7KWlmKGwoZS5hLlBiKCksNDQpLm1kKCk9PW51bGwpcmV0dXJuITB9ZWxzZSBmb3IoO2UuYS5PYigpOylpZihQaSh0LGwoZS5hLlBiKCksNDQpLm1kKCkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIF84bihlLHQpe3ZhciBuLHIsYTtyZXR1cm4gdD09PWU/ITA6RGUodCw2NzgpPyhhPWwodCwyMDQ2KSxZMXQoKHI9ZS5nLHJ8fChlLmc9bmV3ICRJKGUpKSksKG49YS5nLG58fChhLmc9bmV3ICRJKGEpKSkpKTohMX1mdW5jdGlvbiBBOG4oZSl7dmFyIHQsbixyLGE7Zm9yKHQ9ImdBIixuPSJ2eiIsYT1iLk1hdGgubWluKGUubGVuZ3RoLDUpLHI9YS0xO3I+PTA7ci0tKWlmKHZuKGVbcl0uZCx0KXx8dm4oZVtyXS5kLG4pKXtlLmxlbmd0aD49cisxJiZlLnNwbGljZSgwLHIrMSk7YnJlYWt9cmV0dXJuIGV9ZnVuY3Rpb24gS04oZSx0KXt2YXIgbjtyZXR1cm4gd2MoZSkmJndjKHQpJiYobj1lL3QsX1A8biYmbjxabSk/bjwwP2IuTWF0aC5jZWlsKG4pOmIuTWF0aC5mbG9vcihuKTptYihOa2Uod2MoZSk/TWYoZSk6ZSx3Yyh0KT9NZih0KTp0LCExKSl9ZnVuY3Rpb24ga3hlKGUsdCl7aWYodD09ZS5jLmkpcmV0dXJuIGUuZC5pO2lmKHQ9PWUuZC5pKXJldHVybiBlLmMuaTt0aHJvdyB1ZShuZXcgWW4oIidub2RlJyBtdXN0IGVpdGhlciBiZSB0aGUgc291cmNlIG5vZGUgb3IgdGFyZ2V0IG5vZGUgb2YgdGhlIGVkZ2UuIikpfWZ1bmN0aW9uIEw4bihlKXt2YXIgdCxuLHIsYTtpZihhPWwoUShlLChmdCgpLFJMZSkpLDM2KSxhKXtmb3Iocj1uZXcgcWEsdD1lbyhlLmMuaSk7dCE9YTspbj10LmUsdD1lbyhuKSxkdyhPaShPaShyLG4ubiksdC5jKSx0LmQuYix0LmQuZCk7cmV0dXJuIHJ9cmV0dXJuIFI4dH1mdW5jdGlvbiBNOG4oZSl7dmFyIHQ7dD1sKFEoZSwoZnQoKSxoMykpLDMzNyksSXMoRGMobmV3IGJuKG51bGwsbmV3IGtuKHQuZCwxNikpLG5ldyB6WiksbmV3IHJZZShlKSksSXMoRmkobmV3IGJuKG51bGwsbmV3IGtuKHQuZCwxNikpLG5ldyBxWiksbmV3IHNZZShlKSl9ZnVuY3Rpb24gVHVlKGUsdCl7dmFyIG4scixhLG87Zm9yKGE9dD9xcyhlKTprYShlKSxyPW5ldyBocihkcihhLmEuS2MoKSxuZXcgaikpO2pyKHIpOylpZihuPWwoeHIociksMTgpLG89a3hlKG4sZSksby5rPT0oWm4oKSxBYSkmJm8uYyE9ZS5jKXJldHVybiBvO3JldHVybiBudWxsfWZ1bmN0aW9uIEQ4bihlKXt2YXIgdCxuLHI7Zm9yKG49bmV3IEcoZS5wKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTApLHQuaz09KFpuKCksUHMpJiYocj10Lm8uYixlLmk9Yi5NYXRoLm1pbihlLmksciksZS5nPWIuTWF0aC5tYXgoZS5nLHIpKX1mdW5jdGlvbiB3Z3QoZSx0LG4pe3ZhciByLGEsbztmb3Iobz1uZXcgRyh0KTtvLmE8by5jLmMubGVuZ3RoOylyPWwocmUobyksMTApLGUuY1tyLmMucF1bci5wXS5lPSExO2ZvcihhPW5ldyBHKHQpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxMCksJGtlKGUscixuKX1mdW5jdGlvbiBDdWUoZSx0LG4pe3ZhciByLGE7cj1lNih0Lmosbi5zLG4uYykrZTYobi5lLHQucyx0LmMpLGE9ZTYobi5qLHQucyx0LmMpK2U2KHQuZSxuLnMsbi5jKSxyPT1hP3I+MCYmKGUuYis9MixlLmErPXIpOihlLmIrPTEsZS5hKz1iLk1hdGgubWluKHIsYSkpfWZ1bmN0aW9uIHlndChlKXt2YXIgdDt0PWwoUShsKGZmKGUuYiwwKSw0MCksKEhjKCksZ0llKSksMTA3KSxydChlLChRaSgpLFFUKSxuZXcgbHQoMCwwKSksaG10KG5ldyBuTixlLHQuYit0LmMtemUoR2UoUShlLEJkZSkpKSx0LmQrdC5hLXplKEdlKFEoZSxGZGUpKSkpfWZ1bmN0aW9uIHhndChlLHQpe3ZhciBuLHI7aWYocj0hMSxJYSh0KSYmKHI9ITAsSjgoZSxuZXcgeXkoZWkodCkpKSkscnx8RGUodCwyNDIpJiYocj0hMCxKOChlLChuPWc0ZShsKHQsMjQyKSksbmV3IHZrKG4pKSkpLCFyKXRocm93IHVlKG5ldyBRaWUobVNlKSl9ZnVuY3Rpb24gSThuKGUsdCxuLHIpe3ZhciBhLG8sZjtyZXR1cm4gYT1uZXcgWmcoZS5lLDEsMTAsKGY9dC5jLERlKGYsOTApP2woZiwyOSk6KFRuKCksS2YpKSwobz1uLmMsRGUobyw5MCk/bChvLDI5KTooVG4oKSxLZikpLGYyKGUsdCksITEpLHI/ci5uaihhKTpyPWEscn1mdW5jdGlvbiBFeGUoZSl7dmFyIHQsbjtzd2l0Y2gobChRKGVvKGUpLChOdCgpLGpNZSkpLDQyOSkuZyl7Y2FzZSAwOnJldHVybiB0PWUubixuPWUubyxuZXcgbHQodC5hK24uYS8yLHQuYituLmIvMik7Y2FzZSAxOnJldHVybiBuZXcgRW8oZS5uKTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBXTigpe1dOPVUsWks9bmV3IENfKElkLDApLFRMZT1uZXcgQ18oIkxFRlRVUCIsMSksU0xlPW5ldyBDXygiUklHSFRVUCIsMiksRUxlPW5ldyBDXygiTEVGVERPV04iLDMpLENMZT1uZXcgQ18oIlJJR0hURE9XTiIsNCksQjFlPW5ldyBDXygiQkFMQU5DRUQiLDUpfWZ1bmN0aW9uIE84bihlLHQsbil7dmFyIHIsYSxvO2lmKHI9WWkoZS5hW3QucF0sZS5hW24ucF0pLHI9PTApe2lmKGE9bChRKHQsKGZ0KCksV3gpKSwxNSksbz1sKFEobixXeCksMTUpLGEuSGMobikpcmV0dXJuLTE7aWYoby5IYyh0KSlyZXR1cm4gMX1yZXR1cm4gcn1mdW5jdGlvbiBOOG4oZSl7c3dpdGNoKGUuZyl7Y2FzZSAxOnJldHVybiBuZXcgdm5lO2Nhc2UgMjpyZXR1cm4gbmV3IHduZTtjYXNlIDM6cmV0dXJuIG5ldyBtbmU7Y2FzZSAwOnJldHVybiBudWxsO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKEVmZSsoZS5mIT1udWxsP2UuZjoiIitlLmcpKSl9fWZ1bmN0aW9uIFR4ZShlLHQsbil7c3dpdGNoKHQpe2Nhc2UgMTohZS5uJiYoZS5uPW5ldyBudChlYyxlLDEsNykpLCRyKGUubiksIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxBcyhlLm4sbChuLDE2KSk7cmV0dXJuO2Nhc2UgMjpmRShlLGVpKG4pKTtyZXR1cm59VjdlKGUsdCxuKX1mdW5jdGlvbiBDeGUoZSx0LG4pe3N3aXRjaCh0KXtjYXNlIDM6TXcoZSx6ZShHZShuKSkpO3JldHVybjtjYXNlIDQ6RHcoZSx6ZShHZShuKSkpO3JldHVybjtjYXNlIDU6VXUoZSx6ZShHZShuKSkpO3JldHVybjtjYXNlIDY6R3UoZSx6ZShHZShuKSkpO3JldHVybn1UeGUoZSx0LG4pfWZ1bmN0aW9uIGdVKGUsdCxuKXt2YXIgcixhLG87bz0ocj1uZXcgSGllLHIpLGE9JDEobyx0LG51bGwpLGEmJmEub2ooKSxGdShvLG4pLHFyKCghZS5jJiYoZS5jPW5ldyBudChrMyxlLDEyLDEwKSksZS5jKSxvKSxpMihvLDApLE15KG8sMSksdTIobywhMCksYzIobywhMCl9ZnVuY3Rpb24gU3hlKGUsdCl7dmFyIG4scixhO3JldHVybiBuPXlfKGUuaSx0KSxEZShuLDI0MSk/KGE9bChuLDI0MSksYS56aSgpPT1udWxsLGEud2koKSk6RGUobiw1MDcpPyhyPWwobiwyMDM3KSxhPXIuYixhKTpudWxsfWZ1bmN0aW9uIFA4bihlLHQsbixyKXt2YXIgYSxvO3JldHVybiBYcih0KSxYcihuKSxvPWwoSF8oZS5kLHQpLDE3KSxXbHQoISFvLCJSb3cgJXMgbm90IGluICVzIix0LGUuZSksYT1sKEhfKGUuYixuKSwxNyksV2x0KCEhYSwiQ29sdW1uICVzIG5vdCBpbiAlcyIsbixlLmMpLHMwdChlLG8uYSxhLmEscil9ZnVuY3Rpb24ga2d0KGUsdCxuLHIsYSxvLGYpe3ZhciBnLHcsRSxDLEw7aWYoQz1hW29dLEU9bz09Zi0xLGc9RT9yOjAsTD16ZHQoZyxDKSxyIT0xMCYmaGUobGUoZSxmLW8pLHRbb10sbltvXSxnLEwpLCFFKWZvcigrK28sdz0wO3c8QzsrK3cpTFt3XT1rZ3QoZSx0LG4scixhLG8sZik7cmV0dXJuIEx9ZnVuY3Rpb24gakEoZSl7aWYoZS5nPT0tMSl0aHJvdyB1ZShuZXcgcGwpO2UuWGooKTt0cnl7ZS5pLmdkKGUuZyksZS5mPWUuaS5qLGUuZzxlLmUmJi0tZS5lLGUuZz0tMX1jYXRjaCh0KXt0aHJvdyB0PWJzKHQpLERlKHQsNzcpP3VlKG5ldyBYaCk6dWUodCl9fWZ1bmN0aW9uIEI4bihlKXt2YXIgdCxuLHIsYTtmb3IoYT0tMSxyPTAsbj1uZXcgRyhlKTtuLmE8bi5jLmMubGVuZ3RoOyl7aWYodD1sKHJlKG4pLDI0OSksdC5jPT0ocW8oKSwkbCkpe2E9cj09MD8wOnItMTticmVha31lbHNlIHI9PWUuYy5sZW5ndGgtMSYmKGE9cik7cis9MX1yZXR1cm4gYX1mdW5jdGlvbiBGOG4oZSl7dmFyIHQsbixyLGE7Zm9yKGE9MCx0PTAscj1uZXcgRyhlLmMpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwyNyksVXUobixlLmUrYSksR3UobixlLmYpLGErPW4uZytlLmIsdD1iLk1hdGgubWF4KHQsbi5mK2UuYik7ZS5kPWEtZS5iLGUuYT10LWUuYn1mdW5jdGlvbiBzNihlKXt2YXIgdCxuLHI7Zm9yKG49bmV3IEcoZS5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSw2MCkscj10LmQuYyx0LmQuYz10LmQuZCx0LmQuZD1yLHI9dC5kLmIsdC5kLmI9dC5kLmEsdC5kLmE9cixyPXQuYi5hLHQuYi5hPXQuYi5iLHQuYi5iPXI7VjllKGUpfWZ1bmN0aW9uIGE2KGUpe3ZhciB0LG4scjtmb3Iobj1uZXcgRyhlLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDg2KSxyPXQuZy5jLHQuZy5jPXQuZy5kLHQuZy5kPXIscj10LmcuYix0LmcuYj10LmcuYSx0LmcuYT1yLHI9dC5lLmEsdC5lLmE9dC5lLmIsdC5lLmI9cjtNVShlKX1mdW5jdGlvbiBSOG4oZSl7dmFyIHQsbixyLGEsbztmb3Iobz1XOChlLmspLG49KEN0KCksaGUobGUoT28sMSksYXUsNjQsMCxbUGMsUW4sYXIsRHIsZXJdKSkscj0wLGE9bi5sZW5ndGg7cjxhOysrcilpZih0PW5bcl0sdCE9UGMmJiFvLkhjKHQpKXJldHVybiB0O3JldHVybiBudWxsfWZ1bmN0aW9uIFN1ZShlLHQpe3ZhciBuLHI7cmV0dXJuIHI9bChSaG4oa0UoRmkobmV3IGJuKG51bGwsbmV3IGtuKHQuaiwxNikpLG5ldyBNZWUpKSksMTIpLHImJihuPWwoanQoci5lLDApLDE4KSxuKT9sKFEobiwoZnQoKSxLaSkpLDE3KS5hOld2bihlLmIpfWZ1bmN0aW9uIGo4bihlLHQpe3ZhciBuLHIsYSxvO2ZvcihvPW5ldyBHKHQuYSk7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSwxMCksdV8oZS5kKSxyPW5ldyBocihkcihxcyhhKS5hLktjKCksbmV3IGopKTtqcihyKTspbj1sKHhyKHIpLDE4KSx3MnQoZSxhLG4uZC5pKX1mdW5jdGlvbiAkOG4oZSx0KXt2YXIgbixyO2ZvcihhbChlLmIsdCkscj1uZXcgRyhlLm4pO3IuYTxyLmMuYy5sZW5ndGg7KWlmKG49bChyZShyKSwyMDkpLGdjKG4uYyx0LDApIT0tMSl7YWwobi5jLHQpLEY4bihuKSxuLmMuYy5sZW5ndGg9PTAmJmFsKGUubixuKTticmVha31abXQoZSl9ZnVuY3Rpb24gRWd0KGUsdCl7dmFyIG4scixhLG8sZjtmb3IoZj1lLmYsYT0wLG89MCxyPW5ldyBHKGUuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDE3MikscU4obixlLmUsZiksYU4obix0KSxvPWIuTWF0aC5tYXgobyxuLnIpLGYrPW4uZCtlLmMsYT1mO2UuZD1vLGUuYj1hfWZ1bmN0aW9uIFRndChlKXt2YXIgdCxuO3JldHVybiBuPXNQKGUpLFprKG4pP251bGw6KHQ9KFhyKG4pLGwoTWR0KG5ldyBocihkcihuLmEuS2MoKSxuZXcgaikpKSw3NCkpLGJjKGwoT2UoKCF0LmImJih0LmI9bmV3IExuKF9yLHQsNCw3KSksdC5iKSwwKSw4NCkpKX1mdW5jdGlvbiBwVShlKXt2YXIgdDtyZXR1cm4gZS5vfHwodD1lLnVrKCksdD9lLm89bmV3IHg1ZShlLGUsbnVsbCk6ZS5hbCgpP2Uubz1uZXcgSnllKGUsbnVsbCk6a3coaWMoKEVsKCksaW8pLGUpKT09MT9lLm89bmV3IFdjdChlKTplLm89bmV3IGxhZShlLG51bGwpKSxlLm99ZnVuY3Rpb24gejhuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7bi5YaCh0KSYmKGE9KGY9dCxmP2wociw1NCkuZ2koZik6bnVsbCksYSYmKHc9bi5NaCh0KSxnPXQudCxnPjF8fGc9PS0xPyhvPWwodywxNSksYS5XYih2NW4oZSxvKSkpOmEuV2IoY2xlKGUsbCh3LDU4KSkpKSl9ZnVuY3Rpb24gcThuKGUsdCxuLHIpe01aZSgpO3ZhciBhPW0wZTtmdW5jdGlvbiBvKCl7Zm9yKHZhciBmPTA7ZjxhLmxlbmd0aDtmKyspYVtmXSgpfWlmKGUpdHJ5e01BdChvKSgpfWNhdGNoKGYpe2UodCxmKX1lbHNlIE1BdChvKSgpfWZ1bmN0aW9uIEg4bihlLHQpe3ZhciBuLHIsYSxvO2ZvcihhPShvPW5ldyBicihlLmIpLmEudmMoKS5LYygpLG5ldyBNaShvKSk7YS5hLk9iKCk7KWlmKHI9KG49bChhLmEuUGIoKSw0NCksbChuLmxkKCksMzQpKSxheWUodCxsKHIsMTcpKTwwKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFY4bihlLHQpe3ZhciBuLHIsYSxvO2ZvcihhPShvPW5ldyBicihlLmIpLmEudmMoKS5LYygpLG5ldyBNaShvKSk7YS5hLk9iKCk7KWlmKHI9KG49bChhLmEuUGIoKSw0NCksbChuLmxkKCksMzQpKSxheWUodCxsKHIsMTcpKT4wKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFU4bihlKXt2YXIgdCxuLHIsYSxvO2ZvcihyPW5ldyBxbShuZXcgU3IoZS5iKS5hKTtyLmI7KW49TncociksdD1sKG4ubGQoKSwxMCksbz1sKGwobi5tZCgpLDQyKS5hLDEwKSxhPWwobChuLm1kKCksNDIpLmIsOCksT2koWTAodC5uKSxPaShKYShvLm4pLGEpKX1mdW5jdGlvbiBHOG4oZSl7c3dpdGNoKGwoUShlLmIsKE50KCksSU1lKSksMzg3KS5nKXtjYXNlIDE6SXMoZmMoRGMobmV3IGJuKG51bGwsbmV3IGtuKGUuZCwxNikpLG5ldyBkSSksbmV3IGc1KSxuZXcgd2VlKTticmVhaztjYXNlIDI6elNuKGUpO2JyZWFrO2Nhc2UgMDp3a24oZSl9fWZ1bmN0aW9uIEs4bihlLHQsbil7dmFyIHIsYSxvO2ZvcihyPW4sIXImJihyPW5ldyBMOCksci5VZygiTGF5b3V0IixlLmEuYy5sZW5ndGgpLG89bmV3IEcoZS5hKTtvLmE8by5jLmMubGVuZ3RoOyl7aWYoYT1sKHJlKG8pLDQ3KSxyLiRnKCkpcmV0dXJuO2EuS2YodCxyLmVoKDEpKX1yLlZnKCl9ZnVuY3Rpb24gWW0oKXtZbT1VLExnZT1uZXcgQV8oIlZfVE9QIiwwKSxTTT1uZXcgQV8oIlZfQ0VOVEVSIiwxKSxDTT1uZXcgQV8oIlZfQk9UVE9NIiwyKSxBZ2U9bmV3IEFfKCJIX0xFRlQiLDMpLEVNPW5ldyBBXygiSF9DRU5URVIiLDQpLFRNPW5ldyBBXygiSF9SSUdIVCIsNSl9ZnVuY3Rpb24gX3hlKGUpe3ZhciB0O3JldHVybiBlLkRiJjY0P1VWKGUpOih0PW5ldyBBZihVVihlKSksdC5hKz0iIChhYnN0cmFjdDogIixHcCh0LChlLkJiJjI1NikhPTApLHQuYSs9IiwgaW50ZXJmYWNlOiAiLEdwKHQsKGUuQmImNTEyKSE9MCksdC5hKz0iKSIsdC5hKX1mdW5jdGlvbiBXOG4oZSl7dmFyIHQ7ZS5jPT1udWxsJiYodD1xZShlLmIpPT09cWUoVVNlKT9udWxsOmUuYixlLmQ9dD09bnVsbD91bDpUc3QodCk/TWhuKEJhdCh0KSk6SWEodCk/bkVlOl9tKGJoKHQpKSxlLmE9ZS5hKyI6ICIrKFRzdCh0KT9BZm4oQmF0KHQpKTp0KyIiKSxlLmM9IigiK2UuZCsiKSAiK2UuYSl9ZnVuY3Rpb24gWThuKCl7ZnVuY3Rpb24gZSgpe3RyeXtyZXR1cm4gbmV3IE1hcCgpLmVudHJpZXMoKS5uZXh0KCkuZG9uZX1jYXRjaHtyZXR1cm4hMX19cmV0dXJuIHR5cGVvZiBNYXA9PT1PbGUmJk1hcC5wcm90b3R5cGUuZW50cmllcyYmZSgpP01hcDpQRG4oKX1mdW5jdGlvbiBYOG4oZSx0KXt2YXIgbixyLGEsbztmb3Iobz1uZXcgVWEoZS5lLDApLG49MDtvLmI8by5kLmdjKCk7KXtpZihyPXplKChtcihvLmI8by5kLmdjKCkpLEdlKG8uZC5YYihvLmM9by5iKyspKSkpLGE9ci10LGE+d2ZlKXJldHVybiBuO2E+LTFlLTYmJisrbn1yZXR1cm4gbn1mdW5jdGlvbiBBeGUoZSx0KXt2YXIgbjt0IT1lLmI/KG49bnVsbCxlLmImJihuPUlIKGUuYixlLC00LG4pKSx0JiYobj1teCh0LGUsLTQsbikpLG49SjB0KGUsdCxuKSxuJiZuLm9qKCkpOmUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMyx0LHQpKX1mdW5jdGlvbiBDZ3QoZSx0KXt2YXIgbjt0IT1lLmY/KG49bnVsbCxlLmYmJihuPUlIKGUuZixlLC0xLG4pKSx0JiYobj1teCh0LGUsLTEsbikpLG49UTB0KGUsdCxuKSxuJiZuLm9qKCkpOmUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMCx0LHQpKX1mdW5jdGlvbiBROG4oZSx0LG4scil7dmFyIGEsbyxmLGc7cmV0dXJuIGhoKGUuZSkmJihhPXQuTGsoKSxnPXQubWQoKSxvPW4ubWQoKSxmPWRiKGUsMSxhLGcsbyxhLkprKCk/WEUoZSxhLG8sRGUoYSwxMDIpJiYobChhLDE5KS5CYiZJbykhPTApOi0xLCEwKSxyP3IubmooZik6cj1mKSxyfWZ1bmN0aW9uIFNndChlKXt2YXIgdCxuLHI7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtpZihuPWwoZSwxNSksbi5kYygpKXJldHVybiIiO2ZvcihyPW5ldyBVcCx0PW4uS2MoKTt0Lk9iKCk7KVhvKHIsKEdpKCksZWkodC5QYigpKSkpLHIuYSs9IiAiO3JldHVybiBHc2UocixyLmEubGVuZ3RoLTEpfWZ1bmN0aW9uIF9ndChlKXt2YXIgdCxuLHI7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtpZihuPWwoZSwxNSksbi5kYygpKXJldHVybiIiO2ZvcihyPW5ldyBVcCx0PW4uS2MoKTt0Lk9iKCk7KVhvKHIsKEdpKCksZWkodC5QYigpKSkpLHIuYSs9IiAiO3JldHVybiBHc2UocixyLmEubGVuZ3RoLTEpfWZ1bmN0aW9uIEo4bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gcj1lLmNbdC5jLnBdW3QucF0sYT1lLmNbbi5jLnBdW24ucF0sci5hIT1udWxsJiZhLmEhPW51bGw/TmFlKHIuYSxhLmEpOnIuYSE9bnVsbD8tMTphLmEhPW51bGw/MTowfWZ1bmN0aW9uIFo4bihlLHQsbil7cmV0dXJuIG4uVWcoIlRyZWUgbGF5b3V0IiwxKSxxTyhlLmIpLFgwKGUuYiwod3goKSxOVyksTlcpLFgwKGUuYixsTSxsTSksWDAoZS5iLGhNLGhNKSxYMChlLmIsZk0sZk0pLGUuYT1iUChlLmIsdCksSzhuKGUsdCxuLmVoKDEpKSxuLlZnKCksdH1mdW5jdGlvbiBleG4oZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYodClmb3Iobz10LmEubGVuZ3RoLG49bmV3IERtKG8pLGc9KG4uYi1uLmEpKm4uYzwwPyhzYigpLHRtKTpuZXcgY2Iobik7Zy5PYigpOylmPWwoZy5QYigpLDE3KSxhPUprKHQsZi5hKSxyPW5ldyBHWGUoZSksY3BuKHIuYSxhKX1mdW5jdGlvbiB0eG4oZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYodClmb3Iobz10LmEubGVuZ3RoLG49bmV3IERtKG8pLGc9KG4uYi1uLmEpKm4uYzwwPyhzYigpLHRtKTpuZXcgY2Iobik7Zy5PYigpOylmPWwoZy5QYigpLDE3KSxhPUprKHQsZi5hKSxyPW5ldyBGWGUoZSksb3BuKHIuYSxhKX1mdW5jdGlvbiBueG4oZSl7dmFyIHQ7aWYoZSE9bnVsbCYmZS5sZW5ndGg+MCYmY28oZSxlLmxlbmd0aC0xKT09MzMpdHJ5e3JldHVybiB0PVAydCh0ZihlLDAsZS5sZW5ndGgtMSkpLHQuZT09bnVsbH1jYXRjaChuKXtpZihuPWJzKG4pLCFEZShuLDMzKSl0aHJvdyB1ZShuKX1yZXR1cm4hMX1mdW5jdGlvbiByeG4oZSx0LG4pe3ZhciByLGEsbztzd2l0Y2gocj1lbyh0KSxhPXpWKHIpLG89bmV3IGd1LE1jKG8sdCksbi5nKXtjYXNlIDE6bGEobyxCTihneChhKSkpO2JyZWFrO2Nhc2UgMjpsYShvLGd4KGEpKX1yZXR1cm4gcnQobywoTnQoKSxtNCksR2UoUShlLG00KSkpLG99ZnVuY3Rpb24gTHhlKGUpe3ZhciB0LG47cmV0dXJuIHQ9bCh4cihuZXcgaHIoZHIoa2EoZS5hKS5hLktjKCksbmV3IGopKSksMTgpLG49bCh4cihuZXcgaHIoZHIocXMoZS5hKS5hLktjKCksbmV3IGopKSksMTgpLFJ0KEJ0KFEodCwoZnQoKSxXMSkpKSl8fFJ0KEJ0KFEobixXMSkpKX1mdW5jdGlvbiBSeSgpe1J5PVUsYkI9bmV3IGNPKCJPTkVfU0lERSIsMCksS0s9bmV3IGNPKCJUV09fU0lERVNfQ09STkVSIiwxKSxXSz1uZXcgY08oIlRXT19TSURFU19PUFBPU0lORyIsMiksR0s9bmV3IGNPKCJUSFJFRV9TSURFUyIsMyksVUs9bmV3IGNPKCJGT1VSX1NJREVTIiw0KX1mdW5jdGlvbiBBZ3QoZSx0KXt2YXIgbixyLGEsbztmb3Iobz1uZXcgYnQsYT0wLHI9dC5LYygpO3IuT2IoKTspe2ZvcihuPXB0KGwoci5QYigpLDE3KS5hK2EpO24uYTxlLmYmJiFLZG4oZSxuLmEpOyluPXB0KG4uYSsxKSwrK2E7aWYobi5hPj1lLmYpYnJlYWs7JG4oby5jLG4pfXJldHVybiBvfWZ1bmN0aW9uIGl4bihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKG89bmV3IEcodC5hKTtvLmE8by5jLmMubGVuZ3RoOylmb3IoYT1sKHJlKG8pLDEwKSxyPW5ldyBocihkcihrYShhKS5hLktjKCksbmV3IGopKTtqcihyKTspbj1sKHhyKHIpLDE4KSxmPW4uYy5pLnAsZS5uW2ZdPWUubltmXS0xfWZ1bmN0aW9uIHN4bihlKXt2YXIgdCxuO2ZvcihuPW5ldyBHKGUuZS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMzApLGVEbihlLHQpO0lzKEZpKERjKERjKG5ldyBibihudWxsLG5ldyBrbihlLmUuYiwxNikpLG5ldyBydGUpLG5ldyBvdGUpLG5ldyBjdGUpLG5ldyByWGUoZSkpfWZ1bmN0aW9uIE14ZShlLHQpe3JldHVybiB0P2UubWoodCk/ITE6ZS5pP2UuaS5uaih0KTpEZSh0LDE1Mik/KGUuaT1sKHQsMTUyKSwhMCk6KGUuaT1uZXcgQyQsZS5pLm5qKHQpKTohMX1mdW5jdGlvbiBMZ3QoZSx0LG4pe3ZhciByLGEsbztyZXR1cm4gcj10LkxrKCksbz10Lm1kKCksYT1yLkprKCk/ZGIoZSwzLHIsbnVsbCxvLFhFKGUscixvLERlKHIsMTAyKSYmKGwociwxOSkuQmImSW8pIT0wKSwhMCk6ZGIoZSwxLHIsci5paygpLG8sLTEsITApLG4/bi5uaihhKTpuPWEsbn1mdW5jdGlvbiBheG4oZSl7aWYoZT1UdShlLCEwKSx2bih3VCxlKXx8dm4oIjEiLGUpKXJldHVybiBIbigpLFNUO2lmKHZuKEZmZSxlKXx8dm4oIjAiLGUpKXJldHVybiBIbigpLFBiO3Rocm93IHVlKG5ldyBKaWUoIkludmFsaWQgYm9vbGVhbiB2YWx1ZTogJyIrZSsiJyIpKX1mdW5jdGlvbiBEeGUoZSx0LG4pe3ZhciByLGEsbztmb3IoYT1lLnZjKCkuS2MoKTthLk9iKCk7KWlmKHI9bChhLlBiKCksNDQpLG89ci5sZCgpLHFlKHQpPT09cWUobyl8fHQhPW51bGwmJlBpKHQsbykpcmV0dXJuIG4mJihyPW5ldyBjcShyLmxkKCksci5tZCgpKSxhLlFiKCkpLHI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gb3huKGUpe3B5KCk7dmFyIHQsbixyO2UuQi5IYygoWmwoKSx1WSkpJiYocj1lLmYuaSx0PW5ldyBNSChlLmEuYyksbj1uZXcgQTgsbi5iPXQuYy1yLmMsbi5kPXQuZC1yLmQsbi5jPXIuYytyLmItKHQuYyt0LmIpLG4uYT1yLmQrci5hLSh0LmQrdC5hKSxlLmUuJGYobikpfWZ1bmN0aW9uIE1ndChlLHQsbixyKXt2YXIgYSxvLGY7Zm9yKGY9Yi5NYXRoLm1pbihuLHptdChsKGUuYiw2OCksdCxuLHIpKSxvPW5ldyBHKGUuYSk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDIyNSksYSE9dCYmKGY9Yi5NYXRoLm1pbihmLE1ndChhLHQsZixyKSkpO3JldHVybiBmfWZ1bmN0aW9uIEl4ZShlKXt2YXIgdCxuLHIsYTtmb3IoYT1XZSh3ZyxkdCwxOTksZS5iLmMubGVuZ3RoLDAsMikscj1uZXcgVWEoZS5iLDApO3IuYjxyLmQuZ2MoKTspdD0obXIoci5iPHIuZC5nYygpKSxsKHIuZC5YYihyLmM9ci5iKyspLDMwKSksbj1yLmItMSxhW25dPUpPKHQuYSk7cmV0dXJuIGF9ZnVuY3Rpb24gT3hlKGUsdCxuKXt2YXIgcixhLG87cj1sKEIxKGUuYSxuKSwzNCksciE9bnVsbCYmKG89bChCMShlLmIsciksNjcpLE55KG8sbiwhMCkpLGE9bChCMShlLmIsdCksNjcpLGF8fChhPW5ldyBvcyxoMihlLmIsdCxhKSksQ3MoYSxuLGEuYy5iLGEuYyksaDIoZS5hLG4sdCl9ZnVuY3Rpb24gX3VlKGUsdCxuLHIsYSl7dmFyIG8sZixnLHc7Zm9yKGY9Q3VuKGkzZSh5NGUoSTZuKG4pKSxyKSxIN24oZSxuLGEpKSx3PWQyKGUsbikuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTIpLHRbZy5wXSYmKG89dFtnLnBdLmksdnQoZi5kLG5ldyBEYWUobyxoOGUoZixvKSkpKTtNOGUoZil9ZnVuY3Rpb24gTnhlKGUsdCl7dGhpcy5mPW5ldyBQcix0aGlzLmI9bmV3IFByLHRoaXMuaj1uZXcgUHIsdGhpcy5hPWUsdGhpcy5jPXQsdGhpcy5jPjAmJkpkdCh0aGlzLHRoaXMuYy0xLChDdCgpLGFyKSksdGhpcy5jPHRoaXMuYS5sZW5ndGgtMSYmSmR0KHRoaXMsdGhpcy5jKzEsKEN0KCksZXIpKX1mdW5jdGlvbiBjeG4oZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihvPW5ldyBHKHQuZCk7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSwxMDUpLGY9bChjcihlLmMsYSksMTE4KS5vLHI9bmV3IFA4KGEuYik7ci5hPHIuYy5hLmxlbmd0aDspbj1sKGNBKHIpLDY0KSxCNmUoYSxuLGYpfWZ1bmN0aW9uIFB4ZShlKXtlLmxlbmd0aD4wJiZlWzBdLmxlbmd0aD4wJiYodGhpcy5jPVJ0KEJ0KFEoZW8oZVswXVswXSksKGZ0KCksekxlKSkpKSksdGhpcy5hPVdlKGtFdCxkdCwyMTE3LGUubGVuZ3RoLDAsMiksdGhpcy5iPVdlKEVFdCxkdCwyMTE4LGUubGVuZ3RoLDAsMiksdGhpcy5kPW5ldyBHMHR9ZnVuY3Rpb24gdXhuKGUpe3JldHVybiBlLmMubGVuZ3RoPT0wPyExOihTbigwLGUuYy5sZW5ndGgpLGwoZS5jWzBdLDE4KSkuYy5pLms9PShabigpLEFhKT8hMDpXNShmYyhuZXcgYm4obnVsbCxuZXcga24oZSwxNikpLG5ldyBXZWUpLG5ldyBZZWUpfWZ1bmN0aW9uIERndChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihnPUh5KHQpLG89dC5mLHc9dC5nLGY9Yi5NYXRoLnNxcnQobypvK3cqdyksYT0wLHI9bmV3IEcoZyk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDI3KSxhKz1EZ3QoZSxuKTtyZXR1cm4gYi5NYXRoLm1heChhLGYpfWZ1bmN0aW9uIFJhKCl7UmE9VSxXYj1uZXcgTV8oY0wsMCksWjE9bmV3IE1fKCJGUkVFIiwxKSxzQz1uZXcgTV8oIkZJWEVEX1NJREUiLDIpLFR2PW5ldyBNXygiRklYRURfT1JERVIiLDMpLFRnPW5ldyBNXygiRklYRURfUkFUSU8iLDQpLE11PW5ldyBNXygiRklYRURfUE9TIiw1KX1mdW5jdGlvbiBseG4oZSx0KXt2YXIgbixyLGE7aWYobj10LnFpKGUuYSksbil7Zm9yKGE9ZWkobjEoKCFuLmImJihuLmI9bmV3IGRoKChUbigpLE5vKSxZYyxuKSksbi5iKSxSZikpLHI9MTtyPChFbCgpLHFQZSkubGVuZ3RoOysrcilpZih2bihxUGVbcl0sYSkpcmV0dXJuIHJ9cmV0dXJuIDB9ZnVuY3Rpb24gaHhuKGUpe3ZhciB0LG4scixhLG87aWYoZT09bnVsbClyZXR1cm4gdWw7Zm9yKG89bmV3IEhtKENvLCJbIiwiXSIpLG49ZSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKXQ9bltyXSxKZyhvLCIiK3QpO3JldHVybiBvLmE/by5lLmxlbmd0aD09MD9vLmEuYTpvLmEuYSsoIiIrby5lKTpvLmN9ZnVuY3Rpb24gZnhuKGUpe3ZhciB0LG4scixhLG87aWYoZT09bnVsbClyZXR1cm4gdWw7Zm9yKG89bmV3IEhtKENvLCJbIiwiXSIpLG49ZSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKXQ9bltyXSxKZyhvLCIiK3QpO3JldHVybiBvLmE/by5lLmxlbmd0aD09MD9vLmEuYTpvLmEuYSsoIiIrby5lKTpvLmN9ZnVuY3Rpb24gSWd0KGUpe3ZhciB0LG4scjtmb3Iocj1uZXcgSG0oQ28sInsiLCJ9Iiksbj1lLnZjKCkuS2MoKTtuLk9iKCk7KXQ9bChuLlBiKCksNDQpLEpnKHIsamN0KGUsdC5sZCgpKSsiPSIramN0KGUsdC5tZCgpKSk7cmV0dXJuIHIuYT9yLmUubGVuZ3RoPT0wP3IuYS5hOnIuYS5hKygiIityLmUpOnIuY31mdW5jdGlvbiBkeG4oZSl7Zm9yKHZhciB0LG4scixhOyFsXyhlLm8pOyluPWwoWDgoZS5vKSw0Mikscj1sKG4uYSwxMjUpLHQ9bChuLmIsMjE4KSxhPUhWKHQsciksdC5lPT1yPygkcShhLmcsdCksci5lPWEuZSt0LmEpOigkcShhLmIsdCksci5lPWEuZS10LmEpLHZ0KGUuZS5hLHIpfWZ1bmN0aW9uIEJ4ZShlLHQpe3ZhciBuLHIsYTtmb3Iobj1udWxsLGE9bCh0LktiKGUpLDIwKS5LYygpO2EuT2IoKTspaWYocj1sKGEuUGIoKSwxOCksIW4pbj1yLmMuaT09ZT9yLmQuaTpyLmMuaTtlbHNlIGlmKChyLmMuaT09ZT9yLmQuaTpyLmMuaSkhPW4pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gT2d0KGUsdCl7dmFyIG4scixhLG8sZjtmb3Iobj1YMnQoZSwhMSx0KSxhPW5ldyBHKG4pO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxMzIpLHIuZD09MD8oZG9lKHIsbnVsbCksZ29lKHIsbnVsbCkpOihvPXIuYSxmPXIuYixkb2UocixmKSxnb2UocixvKSl9ZnVuY3Rpb24gZ3huKGUpe3ZhciB0LG47cmV0dXJuIHQ9bmV3IFhzLERoKHQsclR0KSxuPWwoUShlLChmdCgpLEx1KSksMjEpLG4uSGMoKEhvKCksR0wpKSYmRGgodCxvVHQpLG4uSGMoUlQpJiZEaCh0LGlUdCksbi5IYyhCNikmJkRoKHQsYVR0KSxuLkhjKGpUKSYmRGgodCxzVHQpLHR9ZnVuY3Rpb24gRnhlKGUsdCxuKXt2YXIgcixhLG8sZixnO2ZvcihsNW4oZSksYT0oZS5rPT1udWxsJiYoZS5rPVdlKFQwZSxkdCw4MiwwLDAsMSkpLGUuayksbz0wLGY9YS5sZW5ndGg7bzxmOysrbylyPWFbb10sRnhlKHIpO2c9ZS5mLGcmJkZ4ZShnKX1mdW5jdGlvbiBweG4oZSl7dmFyIHQsbixyLGE7Zm9yKG5NbihlKSxuPW5ldyBocihkcihzcChlKS5hLktjKCksbmV3IGopKTtqcihuKTspdD1sKHhyKG4pLDE4KSxyPXQuYy5pPT1lLGE9cj90LmQ6dC5jLHI/RmEodCxudWxsKTpwbyh0LG51bGwpLHJ0KHQsKGZ0KCksVUxlKSxhKSxMRW4oZSxhLmkpfWZ1bmN0aW9uIGJ4bihlLHQsbixyKXt2YXIgYSxvO3N3aXRjaChvPXQuaSxhPW5bby5nXVtlLmRbby5nXV0sby5nKXtjYXNlIDE6YS09cit0LmouYix0LmcuYj1hO2JyZWFrO2Nhc2UgMzphKz1yLHQuZy5iPWE7YnJlYWs7Y2FzZSA0OmEtPXIrdC5qLmEsdC5nLmE9YTticmVhaztjYXNlIDI6YSs9cix0LmcuYT1hfX1mdW5jdGlvbiBteG4oZSl7dmFyIHQsbixyO2ZvcihuPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpO24uZSE9bi5pLmdjKCk7KWlmKHQ9bChncihuKSwyNykscj1zUCh0KSwhanIobmV3IGhyKGRyKHIuYS5LYygpLG5ldyBqKSkpKXJldHVybiB0O3JldHVybiBudWxsfWZ1bmN0aW9uIGJVKCl7YlU9VSxZZGU9bmV3IGRPKCJPVkVSTEFQX1JFTU9WQUwiLDApLEdkZT1uZXcgZE8odnl0LDEpLFhkZT1uZXcgZE8oIlJPVEFUSU9OIiwyKSxLZGU9bmV3IGRPKCJHUkFQSF9TSVpFX0NBTENVTEFUSU9OIiwzKSxXZGU9bmV3IGRPKCJPVVRHT0lOR19FREdFX0FOR0xFUyIsNCl9ZnVuY3Rpb24gdnhuKCl7dmFyIGU7cmV0dXJuIF9fdD9sKFZFKChpYigpLEdmKSx4VCksMjExNSk6KGU9bChEZSh4dSgoaWIoKSxHZikseFQpLDU2OSk/eHUoR2YseFQpOm5ldyBrMnQsNTY5KSxfX3Q9ITAsJE1uKGUpLHJPbihlKSx5dWUoZSkscmMoR2YseFQsZSksZSl9ZnVuY3Rpb24gQXVlKGUsdCxuKXt2YXIgcixhO2lmKGUuaj09MClyZXR1cm4gbjtpZihhPWwoSGh0KGUsdCxuKSw3Nikscj1uLkxrKCksIXIucmsoKXx8IWUuYS5hbShyKSl0aHJvdyB1ZShuZXcgQWMoIkludmFsaWQgZW50cnkgZmVhdHVyZSAnIityLnFrKCkuemIrIi4iK3IueGUoKSsiJyIpKTtyZXR1cm4gYX1mdW5jdGlvbiB3eG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2ZvcihnPWUuYSx3PTAsRT1nLmxlbmd0aDt3PEU7Kyt3KWZvcihmPWdbd10scj1mLGE9MCxvPXIubGVuZ3RoO2E8bzsrK2EpaWYobj1yW2FdLHFlKHQpPT09cWUobil8fHQhPW51bGwmJlBpKHQsbikpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24geXhuKGUpe3ZhciB0LG4scjtyZXR1cm4gaXUoZSwwKT49MD8obj1LTihlLEpVKSxyPVJOKGUsSlUpKToodD11YihlLDEpLG49S04odCw1ZTgpLHI9Uk4odCw1ZTgpLHI9Ym8obDAociwxKSx2YShlLDEpKSksUTAobDAociwzMiksdmEobixWbykpfWZ1bmN0aW9uIE5ndChlLHQsbil7dmFyIHIsYTtzd2l0Y2gocj0obXIodC5iIT0wKSxsKGFmKHQsdC5hLmEpLDgpKSxuLmcpe2Nhc2UgMDpyLmI9MDticmVhaztjYXNlIDI6ci5iPWUuZjticmVhaztjYXNlIDM6ci5hPTA7YnJlYWs7ZGVmYXVsdDpyLmE9ZS5nfXJldHVybiBhPVJyKHQsMCksek8oYSxyKSx0fWZ1bmN0aW9uIFBndChlLHQsbixyKXt2YXIgYSxvLGYsZyx3O3N3aXRjaCh3PWUuYixvPXQuZCxmPW8uaixnPUc4ZShmLHcuZFtmLmddLG4pLGE9T2koSmEoby5uKSxvLmEpLG8uai5nKXtjYXNlIDE6Y2FzZSAzOmcuYSs9YS5hO2JyZWFrO2Nhc2UgMjpjYXNlIDQ6Zy5iKz1hLmJ9Q3MocixnLHIuYy5iLHIuYyl9ZnVuY3Rpb24geHhuKGUsdCxuKXt2YXIgcixhLG8sZjtmb3IoZj1nYyhlLmUsdCwwKSxvPW5ldyBQd2Usby5iPW4scj1uZXcgVWEoZS5lLGYpO3IuYjxyLmQuZ2MoKTspYT0obXIoci5iPHIuZC5nYygpKSxsKHIuZC5YYihyLmM9ci5iKyspLDEwKSksYS5wPW4sdnQoby5lLGEpLHBoKHIpO3JldHVybiBvfWZ1bmN0aW9uIGt4bihlLHQsbixyKXt2YXIgYSxvLGYsZyx3O2ZvcihhPW51bGwsbz0wLGc9bmV3IEcodCk7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDI3KSx3PWYuaStmLmcsZTxmLmorZi5mK3ImJihhP24uaS13PG4uaS1vJiYoYT1mKTphPWYsbz1hLmkrYS5nKTtyZXR1cm4gYT9vK3I6MH1mdW5jdGlvbiBFeG4oZSx0LG4scil7dmFyIGEsbyxmLGcsdztmb3Iobz1udWxsLGE9MCxnPW5ldyBHKHQpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwyNyksdz1mLmorZi5mLGU8Zi5pK2YuZytyJiYobz9uLmotdzxuLmotYSYmKG89Zik6bz1mLGE9by5qK28uZik7cmV0dXJuIG8/YStyOjB9ZnVuY3Rpb24gVHhuKGUpe3ZhciB0LG4scjtmb3IodD0hMSxyPWUuYi5jLmxlbmd0aCxuPTA7bjxyO24rKyl6N2UobChqdChlLmIsbiksNDQzKSk/IXQmJm4rMTxyJiZ6N2UobChqdChlLmIsbisxKSw0NDMpKSYmKHQ9ITAsbChqdChlLmIsbiksNDQzKS5hPSEwKTp0PSExfWZ1bmN0aW9uIEN4bihlLHQsbixyLGEpe3ZhciBvLGY7Zm9yKG89MCxmPTA7ZjxhO2YrKylvPWJvKG8sRGYodmEodFtmXSxWbyksdmEocltmXSxWbykpKSxlW2ZdPVlyKG8pLG89YncobywzMik7Zm9yKDtmPG47ZisrKW89Ym8obyx2YSh0W2ZdLFZvKSksZVtmXT1ZcihvKSxvPWJ3KG8sMzIpfWZ1bmN0aW9uIFN4bihlLHQpe0dFKCk7dmFyIG4scjtmb3Iocj0oQ2QoKSx1Syksbj1lO3Q+MTt0Pj49MSl0JjEmJihyPUs1KHIsbikpLG4uZD09MT9uPUs1KG4sbik6bj1uZXcgUTF0KG1tdChuLmEsbi5kLFdlKFZyLGRpLDI4LG4uZDw8MSwxNSwxKSkpO3JldHVybiByPUs1KHIsbikscn1mdW5jdGlvbiBSeGUoKXtSeGU9VTt2YXIgZSx0LG4scjtmb3IobV9lPVdlKE5hLFpvLDI4LDI1LDE1LDEpLHZfZT1XZShOYSxabywyOCwzMywxNSwxKSxyPTE1MjU4Nzg5MDYyNWUtMTYsdD0zMjt0Pj0wO3QtLSl2X2VbdF09cixyKj0uNTtmb3Iobj0xLGU9MjQ7ZT49MDtlLS0pbV9lW2VdPW4sbio9LjV9ZnVuY3Rpb24gX3huKGUpe3ZhciB0LG47aWYoUnQoQnQoYXQoZSwoTnQoKSxiNCkpKSkpe2ZvcihuPW5ldyBocihkcihjcChlKS5hLktjKCksbmV3IGopKTtqcihuKTspaWYodD1sKHhyKG4pLDc0KSxxdyh0KSYmUnQoQnQoYXQodCxndikpKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBCZ3QoZSx0KXt2YXIgbixyLGE7bmEoZS5mLHQpJiYodC5iPWUscj10LmMsZ2MoZS5qLHIsMCkhPS0xfHx2dChlLmosciksYT10LmQsZ2MoZS5qLGEsMCkhPS0xfHx2dChlLmosYSksbj10LmEuYixuLmMubGVuZ3RoIT0wJiYoIWUuaSYmKGUuaT1uZXcgcmR0KGUpKSxJM24oZS5pLG4pKSl9ZnVuY3Rpb24gQXhuKGUpe3ZhciB0LG4scixhLG87cmV0dXJuIG49ZS5jLmQscj1uLmosYT1lLmQuZCxvPWEuaixyPT1vP24ucDxhLnA/MDoxOiRWKHIpPT1vPzA6ZjhlKHIpPT1vPzE6KHQ9ZS5iLHZsKHQuYiwkVihyKSk/MDoxKX1mdW5jdGlvbiBYbShlKXt2YXIgdDt0aGlzLmQ9bmV3IFByLHRoaXMuYz1lLmMsdGhpcy5lPWUuZCx0aGlzLmI9ZS5iLHRoaXMuZj1uZXcgbHN0KGUuZSksdGhpcy5hPWUuYSxlLmY/dGhpcy5nPWUuZjp0aGlzLmc9KHQ9bChLMCh4WSksOSksbmV3IFpoKHQsbChjMCh0LHQubGVuZ3RoKSw5KSwwKSl9ZnVuY3Rpb24gbVUoZSx0KXt2YXIgbixyLGEsbyxmLGc7YT1lLGY9YUEoYSwibGF5b3V0T3B0aW9ucyIpLCFmJiYoZj1hQShhLHA0dCkpLGYmJihnPWYscj1udWxsLGcmJihyPShvPWFjZShnLFdlKHp0LGR0LDIsMCw2LDEpKSxuZXcgYXNlKGcsbykpKSxyJiYobj1uZXcgRXR0KGcsdCksdG8ocixuKSkpfWZ1bmN0aW9uIGJjKGUpe2lmKERlKGUsMjA3KSlyZXR1cm4gbChlLDI3KTtpZihEZShlLDE5MykpcmV0dXJuIE0xKGwoZSwxMjMpKTt0aHJvdyB1ZShlP25ldyBIcCgiT25seSBzdXBwb3J0IG5vZGVzIGFuZCBwb3J0cy4iKTpuZXcgRDgoVDR0KSl9ZnVuY3Rpb24gTHhuKGUsdCxuLHIpe3JldHVybih0Pj0wJiZ2bihlLnN1YnN0cih0LDMpLCJHTVQiKXx8dD49MCYmdm4oZS5zdWJzdHIodCwzKSwiVVRDIikpJiYoblswXT10KzMpLG1rZShlLG4scil9ZnVuY3Rpb24gTXhuKGUsdCl7dmFyIG4scixhLG8sZjtmb3Iobz1lLmcuYSxmPWUuZy5iLHI9bmV3IEcoZS5kKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNzIpLGE9bi5uLGEuYT1vLGUuaT09KEN0KCksUW4pP2EuYj1mK2Uuai5iLW4uby5iOmEuYj1mLE9pKGEsdCksbys9bi5vLmErZS5lfWZ1bmN0aW9uIEZndChlLHQsbil7aWYoZS5iKXRocm93IHVlKG5ldyBuYygiVGhlIHRhc2sgaXMgYWxyZWFkeSBkb25lLiIpKTtyZXR1cm4gZS5wIT1udWxsPyExOihlLnA9dCxlLnI9bixlLmsmJihlLm89KFZnKCksbW8oWmMoRGF0ZS5ub3coKSksYjIpKSksITApfWZ1bmN0aW9uIGp4ZShlKXt2YXIgdCxuLHIsYSxvLGYsZztyZXR1cm4gZz1uZXcgTTgsbj1lLlBnKCksYT1uIT1udWxsLGEmJnprKGcsUGQsZS5QZygpKSxyPWUueGUoKSxvPXIhPW51bGwsbyYmemsoZyxfaSxlLnhlKCkpLHQ9ZS5PZygpLGY9dCE9bnVsbCxmJiZ6ayhnLCJkZXNjcmlwdGlvbiIsZS5PZygpKSxnfWZ1bmN0aW9uIFJndChlLHQsbil7dmFyIHIsYSxvO3JldHVybiBvPWUucSxlLnE9dCxlLkRiJjQmJiEoZS5EYiYxKSYmKGE9bmV3IF9hKGUsMSw5LG8sdCksbj9uLm5qKGEpOm49YSksdD8ocj10LmMsciE9ZS5yJiYobj1lLllrKHIsbikpKTplLnImJihuPWUuWWsobnVsbCxuKSksbn1mdW5jdGlvbiBEeG4oZSx0LG4pe3ZhciByLGEsbyxmLGc7Zm9yKG49KGc9dCxteChnLGUuZSwtMS1lLmMsbikpLGY9QzVlKGUuYSksbz0ocj1uZXcgcW0obmV3IFNyKGYuYSkuYSksbmV3IEJ6KHIpKTtvLmEuYjspYT1sKE53KG8uYSkubGQoKSw4OSksbj1aRShhLFNVKGEsZS5hKSxuKTtyZXR1cm4gbn1mdW5jdGlvbiBJeG4oZSx0LG4pe3ZhciByLGEsbyxmLGc7Zm9yKG49KGc9dCxJSChnLGUuZSwtMS1lLmMsbikpLGY9QzVlKGUuYSksbz0ocj1uZXcgcW0obmV3IFNyKGYuYSkuYSksbmV3IEJ6KHIpKTtvLmEuYjspYT1sKE53KG8uYSkubGQoKSw4OSksbj1aRShhLFNVKGEsZS5hKSxuKTtyZXR1cm4gbn1mdW5jdGlvbiBPeG4oZSx0LG4scil7dmFyIGEsbyxmO2lmKHI9PTApcHUodCwwLGUsbixlLmxlbmd0aC1uKTtlbHNlIGZvcihmPTMyLXIsZVtlLmxlbmd0aC0xXT0wLG89ZS5sZW5ndGgtMTtvPm47by0tKWVbb118PXRbby1uLTFdPj4+ZixlW28tMV09dFtvLW4tMV08PHI7Zm9yKGE9MDthPG47YSsrKWVbYV09MH1mdW5jdGlvbiBOeG4oZSl7dmFyIHQsbixyLGEsbztmb3IodD0wLG49MCxvPWUuS2MoKTtvLk9iKCk7KXI9bChvLlBiKCksMTE3KSx0PWIuTWF0aC5tYXgodCxyLmQuYiksbj1iLk1hdGgubWF4KG4sci5kLmMpO2ZvcihhPWUuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTE3KSxyLmQuYj10LHIuZC5jPW59ZnVuY3Rpb24gUHhuKGUpe3ZhciB0LG4scixhLG87Zm9yKG49MCx0PTAsbz1lLktjKCk7by5PYigpOylyPWwoby5QYigpLDExNyksbj1iLk1hdGgubWF4KG4sci5kLmQpLHQ9Yi5NYXRoLm1heCh0LHIuZC5hKTtmb3IoYT1lLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDExNyksci5kLmQ9bixyLmQuYT10fWZ1bmN0aW9uIEx1ZShlLHQsbixyLGEpe3ZhciBvLGY7bz1sKHljKEZpKHQuT2MoKSxuZXcgamopLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxFYyldKSkpLDE1KSxKTihvKSxmPWwoem0oZS5iLG4sciksMTUpLGE9PTA/Zi5jZCgwLG8pOmYuR2Mobyl9ZnVuY3Rpb24gQnhuKGUsdCxuKXtuLlVnKCJHcm93IFRyZWUiLDEpLGUuYj10LmYsUnQoQnQoUSh0LChwRSgpLGpMKSkpKT8oZS5jPW5ldyBPdCxEb3QoZSxudWxsKSk6ZS5jPW5ldyBPdCxlLmE9ITEsc2J0KGUsdC5mKSxydCh0LFZfZSwoSG4oKSwhIWUuYSkpLG4uVmcoKX1mdW5jdGlvbiAkeGUoZSl7dmFyIHQsbixyLGE7Zm9yKHQ9bnVsbCxhPW5ldyBHKGUuUmYoKSk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE4Nyksbj1uZXcgZWYoci5MZigpLmEsci5MZigpLmIsci5NZigpLmEsci5NZigpLmIpLHQ/JEEodCxuKTp0PW47cmV0dXJuIXQmJih0PW5ldyAkOCksdH1mdW5jdGlvbiBNdWUoZSx0LG4scil7dmFyIGEsbztyZXR1cm4gbj09MT8oIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxSdShlLm4sdCxyKSk6KG89bChNbigoYT1sKEtuKGUsMTYpLDI5KSxhfHxlLmlpKCkpLG4pLDY5KSxvLndrKCkuemsoZSxLdShlKSxuLXlyKGUuaWkoKSksdCxyKSl9ZnVuY3Rpb24gRHVlKGUsdCxuKXt2YXIgcixhLG8sZixnO2ZvcihyPW4uZ2MoKSxlLl9pKGUuaStyKSxnPWUuaS10LGc+MCYmcHUoZS5nLHQsZS5nLHQrcixnKSxmPW4uS2MoKSxlLmkrPXIsYT0wO2E8cjsrK2Epbz1mLlBiKCksUl8oZSx0LGUuWmkodCxvKSksZS5NaSh0LG8pLGUuTmkoKSwrK3Q7cmV0dXJuIHIhPTB9ZnVuY3Rpb24gJDEoZSx0LG4pe3ZhciByO3JldHVybiB0IT1lLnE/KGUucSYmKG49SUgoZS5xLGUsLTEwLG4pKSx0JiYobj1teCh0LGUsLTEwLG4pKSxuPVJndChlLHQsbikpOmUuRGImNCYmIShlLkRiJjEpJiYocj1uZXcgX2EoZSwxLDksdCx0KSxuP24ubmoocik6bj1yKSxufWZ1bmN0aW9uIEl1ZShlLHQsbixyKXtyZXR1cm4gYjRlKChuJl9kKT09MCwiZmxhdE1hcCBkb2VzIG5vdCBzdXBwb3J0IFNVQlNJWkVEIGNoYXJhY3RlcmlzdGljIiksYjRlKChuJjQpPT0wLCJmbGF0TWFwIGRvZXMgbm90IHN1cHBvcnQgU09SVEVEIGNoYXJhY3RlcmlzdGljIiksWHIoZSksWHIodCksbmV3IENjdChlLHQsbixyKX1mdW5jdGlvbiBGeG4oZSx0KXtkNWUodCwiQ2Fubm90IHN1cHByZXNzIGEgbnVsbCBleGNlcHRpb24uIiksQk8odCE9ZSwiRXhjZXB0aW9uIGNhbiBub3Qgc3VwcHJlc3MgaXRzZWxmLiIpLCFlLmkmJihlLms9PW51bGw/ZS5rPWhlKGxlKFQwZSwxKSxkdCw4MiwwLFt0XSk6ZS5rW2Uuay5sZW5ndGhdPXQpfWZ1bmN0aW9uIFJ4bihlLHQpe3ZhciBuO2lmKG49dG50KGUuYi5hZygpLHQuYi5hZygpKSxuIT0wKXJldHVybiBuO3N3aXRjaChlLmIuYWcoKS5nKXtjYXNlIDE6Y2FzZSAyOnJldHVybiBydShlLmIuTmYoKSx0LmIuTmYoKSk7Y2FzZSAzOmNhc2UgNDpyZXR1cm4gcnUodC5iLk5mKCksZS5iLk5mKCkpfXJldHVybiAwfWZ1bmN0aW9uIGp4bihlKXt2YXIgdCxuLHI7Zm9yKHI9ZS5lLmMubGVuZ3RoLGUuYT1MbShWcixbZHQsZGldLFs1MywyOF0sMTUsW3Iscl0sMiksbj1uZXcgRyhlLmMpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwyOTApLGUuYVt0LmMuYV1bdC5kLmFdKz1sKFEodCwoYjAoKSxxeCkpLDE3KS5hfWZ1bmN0aW9uICR4bihlLHQpe3ZhciBuLHIsYSxvLGY7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtmb3IoZj1XZShrZixBZCwyOCwyKnQsMTUsMSkscj0wLGE9MDtyPHQ7KytyKW49ZVtyXT4+NCYxNSxvPWVbcl0mMTUsZlthKytdPWJQZVtuXSxmW2ErK109YlBlW29dO3JldHVybiBJZihmLDAsZi5sZW5ndGgpfWZ1bmN0aW9uIGNsKGUpe3ZhciB0LG47cmV0dXJuIGU+PUlvPyh0PUFQKyhlLUlvPj4xMCYxMDIzKSZacyxuPTU2MzIwKyhlLUlvJjEwMjMpJlpzLFN0cmluZy5mcm9tQ2hhckNvZGUodCkrKCIiK1N0cmluZy5mcm9tQ2hhckNvZGUobikpKTpTdHJpbmcuZnJvbUNoYXJDb2RlKGUmWnMpfWZ1bmN0aW9uIHp4bihlLHQpe3B5KCk7dmFyIG4scixhLG87cmV0dXJuIGE9bChsKCRpKGUucix0KSwyMSksODcpLGEuZ2MoKT49Mj8ocj1sKGEuS2MoKS5QYigpLDExNyksbj1lLnUuSGMoKFJsKCksUE0pKSxvPWUudS5IYyhhOSksIXIuYSYmIW4mJihhLmdjKCk9PTJ8fG8pKTohMX1mdW5jdGlvbiBqZ3QoZSx0LG4scixhKXt2YXIgbyxmLGc7Zm9yKG89VGJ0KGUsdCxuLHIsYSksZz0hMTshbzspVFUoZSxhLCEwKSxnPSEwLG89VGJ0KGUsdCxuLHIsYSk7ZyYmVFUoZSxhLCExKSxmPWJjZShhKSxmLmMubGVuZ3RoIT0wJiYoZS5kJiZlLmQuR2coZiksamd0KGUsYSxuLHIsZikpfWZ1bmN0aW9uIHZVKCl7dlU9VSxVZ2U9bmV3IExfKElkLDApLCROZT1uZXcgTF8oIkRJUkVDVEVEIiwxKSxxTmU9bmV3IExfKCJVTkRJUkVDVEVEIiwyKSxSTmU9bmV3IExfKCJBU1NPQ0lBVElPTiIsMyksek5lPW5ldyBMXygiR0VORVJBTElaQVRJT04iLDQpLGpOZT1uZXcgTF8oIkRFUEVOREVOQ1kiLDUpfWZ1bmN0aW9uIHF4bihlLHQpe3ZhciBuO2lmKCFNMShlKSl0aHJvdyB1ZShuZXcgbmModDR0KSk7c3dpdGNoKG49TTEoZSksdC5nKXtjYXNlIDE6cmV0dXJuLShlLmorZS5mKTtjYXNlIDI6cmV0dXJuIGUuaS1uLmc7Y2FzZSAzOnJldHVybiBlLmotbi5mO2Nhc2UgNDpyZXR1cm4tKGUuaStlLmcpfXJldHVybiAwfWZ1bmN0aW9uIEh4bihlLHQsbil7dmFyIHIsYSxvO3JldHVybiByPXQuTGsoKSxvPXQubWQoKSxhPXIuSmsoKT9kYihlLDQscixvLG51bGwsWEUoZSxyLG8sRGUociwxMDIpJiYobChyLDE5KS5CYiZJbykhPTApLCEwKTpkYihlLHIudGsoKT8yOjEscixvLHIuaWsoKSwtMSwhMCksbj9uLm5qKGEpOm49YSxufWZ1bmN0aW9uICRFKGUsdCl7dmFyIG4scjtmb3IobnIodCkscj1lLmIuYy5sZW5ndGgsdnQoZS5iLHQpO3I+MDspe2lmKG49cixyPShyLTEpLzJ8MCxlLmEuTmUoanQoZS5iLHIpLHQpPD0wKXJldHVybiByZihlLmIsbix0KSwhMDtyZihlLmIsbixqdChlLmIscikpfXJldHVybiByZihlLmIscix0KSwhMH1mdW5jdGlvbiB6eGUoZSx0LG4scil7dmFyIGEsbztpZihhPTAsbilhPUJWKGUuYVtuLmddW3QuZ10scik7ZWxzZSBmb3Iobz0wO288Z0s7bysrKWE9Yi5NYXRoLm1heChhLEJWKGUuYVtvXVt0LmddLHIpKTtyZXR1cm4gdD09KHQxKCksJHUpJiZlLmImJihhPWIuTWF0aC5tYXgoYSxlLmIuYSkpLGF9ZnVuY3Rpb24gVnhuKGUsdCl7dmFyIG4scixhLG8sZixnO3JldHVybiBhPWUuaSxvPXQuaSwhYXx8IW98fGEuaSE9by5pfHxhLmk9PShDdCgpLGFyKXx8YS5pPT0oQ3QoKSxlcik/ITE6KGY9YS5nLmEsbj1mK2Euai5hLGc9by5nLmEscj1nK28uai5hLGY8PXImJm4+PWcpfWZ1bmN0aW9uICRndChlKXtzd2l0Y2goZS5nKXtjYXNlIDA6cmV0dXJuIG5ldyBTbmU7Y2FzZSAxOnJldHVybiBuZXcgX25lO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKCJObyBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgZm9yIHRoZSB3aWR0aCBhcHByb3hpbWF0b3IgIisoZS5mIT1udWxsP2UuZjoiIitlLmcpKSl9fWZ1bmN0aW9uIHF4ZShlLHQsbixyKXt2YXIgYTtpZihhPSExLElhKHIpJiYoYT0hMCx6ayh0LG4sZWkocikpKSxhfHxoeShyKSYmKGE9ITAscXhlKGUsdCxuLHIpKSxhfHxEZShyLDI0MikmJihhPSEwLE5tKHQsbixsKHIsMjQyKSkpLCFhKXRocm93IHVlKG5ldyBRaWUobVNlKSl9ZnVuY3Rpb24gVXhuKGUsdCl7dmFyIG4scixhO2lmKG49dC5xaShlLmEpLG4mJihhPW4xKCghbi5iJiYobi5iPW5ldyBkaCgoVG4oKSxObyksWWMsbikpLG4uYiksQmYpLGEhPW51bGwpKXtmb3Iocj0xO3I8KEVsKCksJFBlKS5sZW5ndGg7KytyKWlmKHZuKCRQZVtyXSxhKSlyZXR1cm4gcn1yZXR1cm4gMH1mdW5jdGlvbiBHeG4oZSx0KXt2YXIgbixyLGE7aWYobj10LnFpKGUuYSksbiYmKGE9bjEoKCFuLmImJihuLmI9bmV3IGRoKChUbigpLE5vKSxZYyxuKSksbi5iKSxCZiksYSE9bnVsbCkpe2ZvcihyPTE7cjwoRWwoKSx6UGUpLmxlbmd0aDsrK3IpaWYodm4oelBlW3JdLGEpKXJldHVybiByfXJldHVybiAwfWZ1bmN0aW9uIHpndChlLHQpe3ZhciBuLHIsYSxvO2lmKG5yKHQpLG89ZS5hLmdjKCksbzx0LmdjKCkpZm9yKG49ZS5hLmVjKCkuS2MoKTtuLk9iKCk7KXI9bi5QYigpLHQuSGMocikmJm4uUWIoKTtlbHNlIGZvcihhPXQuS2MoKTthLk9iKCk7KXI9YS5QYigpLGUuYS5CYyhyKSE9bnVsbDtyZXR1cm4gbyE9ZS5hLmdjKCl9ZnVuY3Rpb24gcWd0KGUpe3ZhciB0LG47c3dpdGNoKG49SmEoSWMoaGUobGUoRWEsMSksZHQsOCwwLFtlLmkubixlLm4sZS5hXSkpKSx0PWUuaS5kLGUuai5nKXtjYXNlIDE6bi5iLT10LmQ7YnJlYWs7Y2FzZSAyOm4uYSs9dC5jO2JyZWFrO2Nhc2UgMzpuLmIrPXQuYTticmVhaztjYXNlIDQ6bi5hLT10LmJ9cmV0dXJuIG59ZnVuY3Rpb24gS3huKGUpe3ZhciB0O2Zvcih0PShseCgpLGwoeHIobmV3IGhyKGRyKGthKGUpLmEuS2MoKSxuZXcgaikpKSwxOCkuYy5pKTt0Lms9PShabigpLEFhKTspcnQodCwoZnQoKSxrQiksKEhuKCksITApKSx0PWwoeHIobmV3IGhyKGRyKGthKHQpLmEuS2MoKSxuZXcgaikpKSwxOCkuYy5pfWZ1bmN0aW9uIE91ZShlLHQsbixyKXt2YXIgYSxvLGYsZztmb3IoZz1UQSh0LHIpLGY9Zy5LYygpO2YuT2IoKTspYT1sKGYuUGIoKSwxMiksZS5kW2EucF09ZS5kW2EucF0rZS5jW24ucF07Zm9yKGc9VEEobixyKSxvPWcuS2MoKTtvLk9iKCk7KWE9bChvLlBiKCksMTIpLGUuZFthLnBdPWUuZFthLnBdLWUuY1t0LnBdfWZ1bmN0aW9uIEh4ZShlLHQsbil7dmFyIHIsYTtmb3IoYT1uZXcgb3IoKCFlLmEmJihlLmE9bmV3IG50KEFpLGUsMTAsMTEpKSxlLmEpKTthLmUhPWEuaS5nYygpOylyPWwoZ3IoYSksMjcpLFFoKHIsci5pK3Qsci5qK24pO3RvKCghZS5iJiYoZS5iPW5ldyBudChqcyxlLDEyLDMpKSxlLmIpLG5ldyBmdHQodCxuKSl9ZnVuY3Rpb24gV3huKGUsdCxuLHIpe3ZhciBhLG87Zm9yKG89dCxhPW8uZD09bnVsbHx8ZS5hLk5lKG4uZCxvLmQpPjA/MTowO28uYVthXSE9bjspbz1vLmFbYV0sYT1lLmEuTmUobi5kLG8uZCk+MD8xOjA7by5hW2FdPXIsci5iPW4uYixyLmFbMF09bi5hWzBdLHIuYVsxXT1uLmFbMV0sbi5hWzBdPW51bGwsbi5hWzFdPW51bGx9ZnVuY3Rpb24gWXhuKGUpe3ZhciB0LG4scixhO2Zvcih0PW5ldyBidCxuPVdlKGloLHBnLDI4LGUuYS5jLmxlbmd0aCwxNiwxKSxsNWUobixuLmxlbmd0aCksYT1uZXcgRyhlLmEpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxMjUpLG5bci5kXXx8KCRuKHQuYyxyKSxjZHQoZSxyLG4pKTtyZXR1cm4gdH1mdW5jdGlvbiBIZ3QoZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihhPXQ9PTE/czFlOmkxZSxyPWEuYS5lYygpLktjKCk7ci5PYigpOylmb3Iobj1sKHIuUGIoKSw4OCksZj1sKCRpKGUuZi5jLG4pLDIxKS5LYygpO2YuT2IoKTspbz1sKGYuUGIoKSw0MiksYWwoZS5iLmIsby5iKSxhbChlLmIuYSxsKG8uYiw4NikuZCl9ZnVuY3Rpb24gWHhuKGUsdCl7dmFyIG47dC5VZygiSGllcmFyY2hpY2FsIHBvcnQgcG9zaXRpb24gcHJvY2Vzc2luZyIsMSksbj1lLmIsbi5jLmxlbmd0aD4wJiZkbXQoKFNuKDAsbi5jLmxlbmd0aCksbChuLmNbMF0sMzApKSxlKSxuLmMubGVuZ3RoPjEmJmRtdChsKGp0KG4sbi5jLmxlbmd0aC0xKSwzMCksZSksdC5WZygpfWZ1bmN0aW9uIFF4bihlKXtSbCgpO3ZhciB0LG47cmV0dXJuIHQ9cnModnAsaGUobGUoY1ksMSksaXQsMjc5LDAsW1liXSkpLCEoeU4oTkgodCxlKSk+MXx8KG49cnMoUE0saGUobGUoY1ksMSksaXQsMjc5LDAsW05NLGE5XSkpLHlOKE5IKG4sZSkpPjEpKX1mdW5jdGlvbiBWeGUoZSx0KXt2YXIgbjtuPXh1KChpYigpLEdmKSxlKSxEZShuLDUwNyk/cmMoR2YsZSxuZXcgT3R0KHRoaXMsdCkpOnJjKEdmLGUsdGhpcyksTnVlKHRoaXMsdCksdD09KFNrKCksQVBlKT8odGhpcy53Yj1sKHRoaXMsMjAzOCksbCh0LDIwNDApKTp0aGlzLndiPShsYigpLFZuKX1mdW5jdGlvbiBKeG4oZSl7dmFyIHQsbixyO2lmKGU9PW51bGwpcmV0dXJuIG51bGw7Zm9yKHQ9bnVsbCxuPTA7bjxqTS5sZW5ndGg7KytuKXRyeXtyZXR1cm4gZ2V0KGpNW25dLGUpfWNhdGNoKGEpe2lmKGE9YnMoYSksRGUoYSwzMykpcj1hLHQ9cjtlbHNlIHRocm93IHVlKGEpfXRocm93IHVlKG5ldyBuVih0KSl9ZnVuY3Rpb24gVmd0KCl7Vmd0PVUsRTZ0PWhlKGxlKHp0LDEpLGR0LDIsNixbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdKSxUNnQ9aGUobGUoenQsMSksZHQsMiw2LFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIixfeCwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0pfWZ1bmN0aW9uIFVndChlKXt2YXIgdCxuLHI7dD12bih0eXBlb2YgdCxnaGUpP251bGw6bmV3IG9vLHQmJihEaygpLG49KHI9OTAwLHI+PWIyPyJlcnJvciI6cj49OTAwPyJ3YXJuIjpyPj04MDA/ImluZm8iOiJsb2ciKSxlYXQobixlLmEpLGUuYiYmRzllKHQsbixlLmIsIkV4Y2VwdGlvbjogIiwhMCkpfWZ1bmN0aW9uIFEoZSx0KXt2YXIgbixyO3JldHVybiByPSghZS5xJiYoZS5xPW5ldyBQciksY3IoZS5xLHQpKSxyPz8obj10LlNnKCksRGUobiw0KSYmKG49PW51bGw/KCFlLnEmJihlLnE9bmV3IFByKSxheChlLnEsdCkpOighZS5xJiYoZS5xPW5ldyBQciksa2koZS5xLHQsbikpKSxuKX1mdW5jdGlvbiB1bygpe3VvPVUseTA9bmV3IG9PKCJQMV9DWUNMRV9CUkVBS0lORyIsMCksdmc9bmV3IG9PKCJQMl9MQVlFUklORyIsMSksYnU9bmV3IG9PKCJQM19OT0RFX09SREVSSU5HIiwyKSxfdT1uZXcgb08oIlA0X05PREVfUExBQ0VNRU5UIiwzKSxtYz1uZXcgb08oIlA1X0VER0VfUk9VVElORyIsNCl9ZnVuY3Rpb24gWnhuKGUsdCl7aEEoKTt2YXIgbjtpZihlLmM9PXQuYyl7aWYoZS5iPT10LmJ8fGEzbihlLmIsdC5iKSl7aWYobj1EbG4oZS5iKT8xOi0xLGUuYSYmIXQuYSlyZXR1cm4gbjtpZighZS5hJiZ0LmEpcmV0dXJuLW59cmV0dXJuIHJ1KGUuYi5nLHQuYi5nKX1lbHNlIHJldHVybiBZaShlLmMsdC5jKX1mdW5jdGlvbiBHZ3QoZSx0KXt2YXIgbixyLGE7aWYoR3hlKGUsdCkpcmV0dXJuITA7Zm9yKHI9bmV3IEcodCk7ci5hPHIuYy5jLmxlbmd0aDspaWYobj1sKHJlKHIpLDI3KSxhPVRndChuKSxOVShlLG4sYSl8fFcwdChlLG4pLWUuZzw9ZS5hKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFlOKCl7WU49VSxKVz0odGxlKCksUE9lKSxFZ2U9Y1N0LGtnZT1vU3QsQU9lPWlTdCx4Z2U9YVN0LF9PZT1uZXcgbHcoOCksUUN0PW5ldyBIYSgocGkoKSxfMiksX09lKSxKQ3Q9bmV3IEhhKEV2LDgpLFpDdD1PT2UsQ09lPWVTdCxTT2U9dFN0LFhDdD1uZXcgSGEoR0IsKEhuKCksITEpKX1mdW5jdGlvbiB3VSgpe3dVPVUsSk9lPW5ldyBsdygxNSksQ1N0PW5ldyBIYSgocGkoKSxfMiksSk9lKSxTU3Q9bmV3IEhhKEV2LDE1KSxaT2U9bmV3IEhhKFhCLHB0KDApKSxZT2U9SVN0LEVTdD1rdixUU3Q9VWIsV09lPW5ldyBIYShaNixQeXQpLFhPZT1XQixRT2U9aTcsX2dlPU1TdCxrU3Q9VUJ9ZnVuY3Rpb24gY2coZSl7aWYoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKS5pIT0xfHwoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMpLmkhPTEpdGhyb3cgdWUobmV3IFluKFhmZSkpO3JldHVybiBiYyhsKE9lKCghZS5iJiYoZS5iPW5ldyBMbihfcixlLDQsNykpLGUuYiksMCksODQpKX1mdW5jdGlvbiBLZ3QoZSl7aWYoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKS5pIT0xfHwoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMpLmkhPTEpdGhyb3cgdWUobmV3IFluKFhmZSkpO3JldHVybiBUTihsKE9lKCghZS5iJiYoZS5iPW5ldyBMbihfcixlLDQsNykpLGUuYiksMCksODQpKX1mdW5jdGlvbiBXZ3QoZSl7aWYoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKS5pIT0xfHwoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMpLmkhPTEpdGhyb3cgdWUobmV3IFluKFhmZSkpO3JldHVybiBUTihsKE9lKCghZS5jJiYoZS5jPW5ldyBMbihfcixlLDUsOCkpLGUuYyksMCksODQpKX1mdW5jdGlvbiBFYihlKXtpZigoIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmIpLmkhPTF8fCghZS5jJiYoZS5jPW5ldyBMbihfcixlLDUsOCkpLGUuYykuaSE9MSl0aHJvdyB1ZShuZXcgWW4oWGZlKSk7cmV0dXJuIGJjKGwoT2UoKCFlLmMmJihlLmM9bmV3IExuKF9yLGUsNSw4KSksZS5jKSwwKSw4NCkpfWZ1bmN0aW9uIFV4ZShlLHQsbil7dmFyIHIsYSxvO2lmKCsrZS5qLGE9ZS5FaigpLHQ+PWF8fHQ8MCl0aHJvdyB1ZShuZXcgdGMoUWZlK3QrYXYrYSkpO2lmKG4+PWF8fG48MCl0aHJvdyB1ZShuZXcgdGMoSmZlK24rYXYrYSkpO3JldHVybiB0IT1uP3I9KG89ZS5DaihuKSxlLnFqKHQsbyksbyk6cj1lLnhqKG4pLHJ9ZnVuY3Rpb24gWWd0KGUpe3ZhciB0LG4scjtpZihyPWUsZSlmb3IodD0wLG49ZS5FaCgpO247bj1uLkVoKCkpe2lmKCsrdD5vaGUpcmV0dXJuIFlndChuKTtpZihyPW4sbj09ZSl0aHJvdyB1ZShuZXcgbmMoIlRoZXJlIGlzIGEgY3ljbGUgaW4gdGhlIGNvbnRhaW5tZW50IGhpZXJhcmNoeSBvZiAiK2UpKX1yZXR1cm4gcn1mdW5jdGlvbiBUYihlKXt2YXIgdCxuLHI7Zm9yKHI9bmV3IEhtKENvLCJbIiwiXSIpLG49ZS5LYygpO24uT2IoKTspdD1uLlBiKCksSmcocixxZSh0KT09PXFlKGUpPyIodGhpcyBDb2xsZWN0aW9uKSI6dD09bnVsbD91bDp4Yyh0KSk7cmV0dXJuIHIuYT9yLmUubGVuZ3RoPT0wP3IuYS5hOnIuYS5hKygiIityLmUpOnIuY31mdW5jdGlvbiBHeGUoZSx0KXt2YXIgbixyO2lmKHI9ITEsdC5nYygpPDIpcmV0dXJuITE7Zm9yKG49MDtuPHQuZ2MoKTtuKyspbjx0LmdjKCktMT9yPXJ8TlUoZSxsKHQuWGIobiksMjcpLGwodC5YYihuKzEpLDI3KSk6cj1yfE5VKGUsbCh0LlhiKG4pLDI3KSxsKHQuWGIoMCksMjcpKTtyZXR1cm4gcn1mdW5jdGlvbiBYZ3QoZSx0KXt2YXIgbjt0IT1lLmE/KG49bnVsbCxlLmEmJihuPWwoZS5hLDU0KS5UaChlLDQsdTEsbikpLHQmJihuPWwodCw1NCkuUmgoZSw0LHUxLG4pKSxuPXI4ZShlLHQsbiksbiYmbi5vaigpKTplLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgX2EoZSwxLDEsdCx0KSl9ZnVuY3Rpb24gS3hlKGUsdCl7dmFyIG47dCE9ZS5lPyhlLmUmJlJ1dChDNWUoZS5lKSxlKSx0JiYoIXQuYiYmKHQuYj1uZXcgUHoobmV3IFZpZSkpLFdydCh0LmIsZSkpLG49dThuKGUsdCxudWxsKSxuJiZuLm9qKCkpOmUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsNCx0LHQpKX1mdW5jdGlvbiBlOW4oZSx0KXt2YXIgbjtuPXQubyxVZyhlLmYpPyhlLmouYT1iLk1hdGgubWF4KGUuai5hLG4uYSksZS5qLmIrPW4uYixlLmQuYy5sZW5ndGg+MSYmKGUuai5iKz1lLmUpKTooZS5qLmErPW4uYSxlLmouYj1iLk1hdGgubWF4KGUuai5iLG4uYiksZS5kLmMubGVuZ3RoPjEmJihlLmouYSs9ZS5lKSl9ZnVuY3Rpb24gQ2IoKXtDYj1VLGF4dD1oZShsZShPbywxKSxhdSw2NCwwLFsoQ3QoKSxRbiksYXIsRHJdKSxzeHQ9aGUobGUoT28sMSksYXUsNjQsMCxbYXIsRHIsZXJdKSxveHQ9aGUobGUoT28sMSksYXUsNjQsMCxbRHIsZXIsUW5dKSxjeHQ9aGUobGUoT28sMSksYXUsNjQsMCxbZXIsUW4sYXJdKX1mdW5jdGlvbiB0OW4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEM7aWYoZj1lLmMuZCxnPWUuZC5kLGYuaiE9Zy5qKWZvcihDPWUuYixhPWYuaix3PW51bGw7YSE9Zy5qOyl3PXQ9PTA/JFYoYSk6ZjhlKGEpLG89RzhlKGEsQy5kW2EuZ10sbiksRT1HOGUodyxDLmRbdy5nXSxuKSx1aShyLE9pKG8sRSkpLGE9d31mdW5jdGlvbiBuOW4oZSx0LG4scil7dmFyIGEsbyxmLGcsdztyZXR1cm4gZj1aZHQoZS5hLHQsbiksZz1sKGYuYSwxNykuYSxvPWwoZi5iLDE3KS5hLHImJih3PWwoUSh0LChmdCgpLGpsKSksMTApLGE9bChRKG4samwpLDEwKSx3JiZhJiYoJGN0KGUuYix3LGEpLGcrPWUuYi5pLG8rPWUuYi5lKSksZz5vfWZ1bmN0aW9uIFFndChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEU7Zm9yKHRoaXMuYT15ZHQoZSksdGhpcy5iPW5ldyBidCxuPWUscj0wLGE9bi5sZW5ndGg7cjxhOysrcilmb3IodD1uW3JdLG89bmV3IGJ0LHZ0KHRoaXMuYixvKSxnPXQsdz0wLEU9Zy5sZW5ndGg7dzxFOysrdylmPWdbd10sdnQobyxuZXcgT2woZi5qKSl9ZnVuY3Rpb24gcjluKGUsdCxuKXt2YXIgcixhLG87cmV0dXJuIG89MCxyPW5bdF0sdDxuLmxlbmd0aC0xJiYoYT1uW3QrMV0sZS5iW3RdPyhvPWVPbihlLmQscixhKSxvKz1ZYWUoZS5hLHIsKEN0KCksYXIpKSxvKz1ZYWUoZS5hLGEsZXIpKTpvPVB2bihlLmEscixhKSksZS5jW3RdJiYobys9YXZuKGUuYSxyKSksb31mdW5jdGlvbiBpOW4oZSx0LG4scixhKXt2YXIgbyxmLGcsdztmb3Iodz1udWxsLGc9bmV3IEcocik7Zy5hPGcuYy5jLmxlbmd0aDspaWYoZj1sKHJlKGcpLDQ1MyksZiE9biYmZ2MoZi5lLGEsMCkhPS0xKXt3PWY7YnJlYWt9bz1Bb2UoYSkscG8obyxuLmIpLEZhKG8sdy5iKSx4bihlLmEsYSxuZXcgS3Eobyx0LG4uZikpfWZ1bmN0aW9uIHM5bihlKXt2YXIgdCxuLHIsYTtpZihCNShsKFEoZS5iLChOdCgpLFJoKSksODgpKSlyZXR1cm4gMDtmb3IodD0wLHI9bmV3IEcoZS5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTApLG4uaz09KFpuKCksUHMpJiYoYT1uLm8uYSx0PWIuTWF0aC5tYXgodCxhKSk7cmV0dXJuIHR9ZnVuY3Rpb24gSmd0KGUpe2Zvcig7ZS5nLmMhPTAmJmUuZC5jIT0wOyl1YWUoZS5nKS5jPnVhZShlLmQpLmM/KGUuaSs9ZS5nLmMsWWNlKGUuZCkpOnVhZShlLmQpLmM+dWFlKGUuZykuYz8oZS5lKz1lLmQuYyxZY2UoZS5nKSk6KGUuaSs9Y3N0KGUuZyksZS5lKz1jc3QoZS5kKSxZY2UoZS5nKSxZY2UoZS5kKSl9ZnVuY3Rpb24gYTluKGUsdCxuKXt2YXIgcixhLG8sZjtmb3Iobz10LnEsZj10LnIsbmV3IFBtKChKMCgpLHFiKSx0LG8sMSksbmV3IFBtKHFiLG8sZiwxKSxhPW5ldyBHKG4pO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxMTgpLHIhPW8mJnIhPXQmJnIhPWYmJihEa2UoZS5hLHIsdCksRGtlKGUuYSxyLGYpKX1mdW5jdGlvbiBaZ3QoZSx0LG4scil7ZS5hLmQ9Yi5NYXRoLm1pbih0LG4pLGUuYS5hPWIuTWF0aC5tYXgodCxyKS1lLmEuZCx0PG4/KGUuYj0uNSoodCtuKSxlLmc9eWZlKmUuYisuOSp0LGUuZj15ZmUqZS5iKy45Km4pOihlLmI9LjUqKHQrciksZS5nPXlmZSplLmIrLjkqcixlLmY9eWZlKmUuYisuOSp0KX1mdW5jdGlvbiBvOW4oZSl7dmFyIHQsbixyLGE7aWYoZS5iIT0wKXtmb3IodD1uZXcgb3MsYT1ScihlLDApO2EuYiE9YS5kLmM7KXI9bChCcihhKSw0MCksS2EodCxwY2UocikpLG49ci5lLG4uYT1sKFEociwoUWkoKSxQQikpLDE3KS5hLG4uYj1sKFEocixCQiksMTcpLmE7cmV0dXJuIHR9cmV0dXJuIG5ldyBvc31mdW5jdGlvbiBjOW4oZSl7c3dpdGNoKGwoUShlLChOdCgpLFF1KSksMTcxKS5nKXtjYXNlIDE6cnQoZSxRdSwoaGYoKSxYTCkpO2JyZWFrO2Nhc2UgMjpydChlLFF1LChoZigpLGQ0KSk7YnJlYWs7Y2FzZSAzOnJ0KGUsUXUsKGhmKCksWUwpKTticmVhaztjYXNlIDQ6cnQoZSxRdSwoaGYoKSwkYikpfX1mdW5jdGlvbiB1OW4oZSx0LG4pe3ZhciByO24uVWcoIlNlbGYtTG9vcCByb3V0aW5nIiwxKSxyPUY0bih0KSxNcShRKHQsKFFIKCksa00pKSksSXMoZmMoRmkoRmkoRGMobmV3IGJuKG51bGwsbmV3IGtuKHQuYiwxNikpLG5ldyBWWiksbmV3IFk5KSxuZXcgcjgpLG5ldyBtUyksbmV3IEFldChlLHIpKSxuLlZnKCl9ZnVuY3Rpb24gekUoKXt6RT1VLFZMPW5ldyBTXyhJZCwwKSxMTGU9bmV3IFNfKE14LDEpLElMZT1uZXcgU18oRHgsMiksRExlPW5ldyBTXygiTEVGVF9SSUdIVF9DT05TVFJBSU5UX0xPQ0tJTkciLDMpLE1MZT1uZXcgU18oIkxFRlRfUklHSFRfQ09OTkVDVElPTl9MT0NLSU5HIiw0KSxBTGU9bmV3IFNfKFkzdCw1KX1mdW5jdGlvbiBlcHQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFO2c9bi5hLzIsbz1uLmIvMixyPWIuTWF0aC5hYnModC5hLWUuYSksYT1iLk1hdGguYWJzKHQuYi1lLmIpLHc9MSxFPTEscj5nJiYodz1nL3IpLGE+byYmKEU9by9hKSxmPWIuTWF0aC5taW4odyxFKSxlLmErPWYqKHQuYS1lLmEpLGUuYis9ZioodC5iLWUuYil9ZnVuY3Rpb24gbDluKGUsdCxuLHIsYSl7dmFyIG8sZjtmb3IoZj0hMSxvPWwoanQobi5iLDApLDI3KTtqQW4oZSx0LG8scixhKSYmKGY9ITAsJDhuKG4sbyksbi5iLmMubGVuZ3RoIT0wKTspbz1sKGp0KG4uYiwwKSwyNyk7cmV0dXJuIG4uYi5jLmxlbmd0aD09MCYmVU4obi5qLG4pLGYmJmxVKHQucSksZn1mdW5jdGlvbiBoOW4oZSx0KXtoNigpO3ZhciBuLHIsYSxvO2lmKHQuYjwyKXJldHVybiExO2ZvcihvPVJyKHQsMCksbj1sKEJyKG8pLDgpLHI9bjtvLmIhPW8uZC5jOyl7aWYoYT1sKEJyKG8pLDgpLFh1ZShlLHIsYSkpcmV0dXJuITA7cj1hfXJldHVybiEhWHVlKGUscixuKX1mdW5jdGlvbiBXeGUoZSx0LG4scil7dmFyIGEsbztyZXR1cm4gbj09MD8oIWUubyYmKGUubz1uZXcgeGwoKHN1KCksQ2cpLEwyLGUsMCkpLFVxKGUubyx0LHIpKToobz1sKE1uKChhPWwoS24oZSwxNiksMjkpLGF8fGUuaWkoKSksbiksNjkpLG8ud2soKS5BayhlLEt1KGUpLG4teXIoZS5paSgpKSx0LHIpKX1mdW5jdGlvbiBOdWUoZSx0KXt2YXIgbjt0IT1lLnNiPyhuPW51bGwsZS5zYiYmKG49bChlLnNiLDU0KS5UaChlLDEsUk0sbikpLHQmJihuPWwodCw1NCkuUmgoZSwxLFJNLG4pKSxuPWE4ZShlLHQsbiksbiYmbi5vaigpKTplLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgX2EoZSwxLDQsdCx0KSl9ZnVuY3Rpb24gZjluKGUsdCl7dmFyIG4scixhLG87aWYodClhPW5wKHQsIngiKSxuPW5ldyBIWGUoZSksYUUobi5hLChucihhKSxhKSksbz1ucCh0LCJ5Iikscj1uZXcgVlhlKGUpLGNFKHIuYSwobnIobyksbykpO2Vsc2UgdGhyb3cgdWUobmV3IGRkKCJBbGwgZWRnZSBzZWN0aW9ucyBuZWVkIGFuIGVuZCBwb2ludC4iKSl9ZnVuY3Rpb24gZDluKGUsdCl7dmFyIG4scixhLG87aWYodClhPW5wKHQsIngiKSxuPW5ldyAkWGUoZSksb0Uobi5hLChucihhKSxhKSksbz1ucCh0LCJ5Iikscj1uZXcgelhlKGUpLHVFKHIuYSwobnIobyksbykpO2Vsc2UgdGhyb3cgdWUobmV3IGRkKCJBbGwgZWRnZSBzZWN0aW9ucyBuZWVkIGEgc3RhcnQgcG9pbnQuIikpfWZ1bmN0aW9uIGc5bihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihyPV8wdChlKSxvPTAsZz1yLmxlbmd0aDtvPGc7KytvKVVndCh0KTtmb3Iodz0hRzEmJmUuZT9HMT9udWxsOmUuZDpudWxsO3c7KXtmb3Iobj1fMHQodyksYT0wLGY9bi5sZW5ndGg7YTxmOysrYSlVZ3QodCk7dz0hRzEmJncuZT9HMT9udWxsOncuZDpudWxsfX1mdW5jdGlvbiB0cHQoZSx0KXt2YXIgbixyO3I9bChRKHQsKE50KCksTXMpKSwxMDEpLHJ0KHQsKGZ0KCksR0xlKSxyKSxuPXQuZSxuJiYoSXMobmV3IGJuKG51bGwsbmV3IGtuKG4uYSwxNikpLG5ldyBxcChlKSksSXMoRGMobmV3IGJuKG51bGwsbmV3IGtuKG4uYiwxNikpLG5ldyB1NSksbmV3IG5fKGUpKSl9ZnVuY3Rpb24gWm4oKXtabj1VLFBzPW5ldyBrXygiTk9STUFMIiwwKSxBYT1uZXcga18oIkxPTkdfRURHRSIsMSksVXM9bmV3IGtfKCJFWFRFUk5BTF9QT1JUIiwyKSxBdT1uZXcga18oIk5PUlRIX1NPVVRIX1BPUlQiLDMpLGN1PW5ldyBrXygiTEFCRUwiLDQpLEsxPW5ldyBrXygiQlJFQUtJTkdfUE9JTlQiLDUpfWZ1bmN0aW9uIHA5bihlKXt2YXIgdCxuLHIsYTtpZih0PSExLG5zKGUsKGZ0KCksS0wpKSlmb3Iobj1sKFEoZSxLTCksODUpLGE9bmV3IEcoZS5qKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTIpLFRUbihyKSYmKHR8fChGa24oZW8oZSkpLHQ9ITApLE01bihsKG4ueGMociksMzE0KSkpfWZ1bmN0aW9uIGI5bihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEU7cmV0dXJuIEU9anhlKGUpLG49ZS5lLG89biE9bnVsbCxvJiZ6ayhFLHpHLGUuZSksZz1lLmssZj0hIWcsZiYmemsoRSwidHlwZSIsYWFlKGUuaykpLHI9WkkoZS5qKSxhPSFyLGEmJih3PW5ldyAkcCxlMShFLFlmZSx3KSx0PW5ldyBsUWUodyksdG8oZS5qLHQpKSxFfWZ1bmN0aW9uIG05bihlKXt2YXIgdCxuLHIsYTtmb3IoYT1oYigoTWgoZS5nYygpLCJzaXplIiksbmV3IFM1KSwxMjMpLHI9ITAsbj1NbShlKS5LYygpO24uT2IoKTspdD1sKG4uUGIoKSw0NCkscnx8KGEuYSs9Q28pLHI9ITEsd3UoaGIod3UoYSx0LmxkKCkpLDYxKSx0Lm1kKCkpO3JldHVybihhLmErPSJ9IixhKS5hfWZ1bmN0aW9uIG5wdChlLHQpe3ZhciBuLHIsYTtyZXR1cm4gdCY9NjMsdDwyMj8obj1lLmw8PHQscj1lLm08PHR8ZS5sPj4yMi10LGE9ZS5oPDx0fGUubT4+MjItdCk6dDw0ND8obj0wLHI9ZS5sPDx0LTIyLGE9ZS5tPDx0LTIyfGUubD4+NDQtdCk6KG49MCxyPTAsYT1lLmw8PHQtNDQpLHF1KG4mZWgsciZlaCxhJmhwKX1mdW5jdGlvbiBqeShlKXtpZihRU2U9PW51bGwmJihRU2U9bmV3IFJlZ0V4cCgiXlxccypbKy1dPyhOYU58SW5maW5pdHl8KChcXGQrXFwuP1xcZCopfChcXC5cXGQrKSkoW2VFXVsrLV0/XFxkKyk/W2REZkZdPylcXHMqJCIpKSwhUVNlLnRlc3QoZSkpdGhyb3cgdWUobmV3IGdkKFl3K2UrJyInKSk7cmV0dXJuIHBhcnNlRmxvYXQoZSl9ZnVuY3Rpb24gcnB0KGUsdCl7dmFyIG4scixhLG8sZjtmb3IoYT10PT0xP3MxZTppMWUscj1hLmEuZWMoKS5LYygpO3IuT2IoKTspZm9yKG49bChyLlBiKCksODgpLGY9bCgkaShlLmYuYyxuKSwyMSkuS2MoKTtmLk9iKCk7KW89bChmLlBiKCksNDIpLHZ0KGUuYi5iLGwoby5iLDg2KSksdnQoZS5iLmEsbChvLmIsODYpLmQpfWZ1bmN0aW9uIHY5bihlLHQpe3ZhciBuLHIsYSxvO2ZvcihvPXQuYi5qLGUuYT1XZShWcixkaSwyOCxvLmMubGVuZ3RoLDE1LDEpLGE9MCxyPTA7cjxvLmMubGVuZ3RoO3IrKyluPShTbihyLG8uYy5sZW5ndGgpLGwoby5jW3JdLDEyKSksbi5lLmMubGVuZ3RoPT0wJiZuLmcuYy5sZW5ndGg9PTA/YSs9MTphKz0zLGUuYVtyXT1hfWZ1bmN0aW9uIHlVKCl7eVU9VSxJMWU9bmV3IFRfKCJBTFdBWVNfVVAiLDApLEQxZT1uZXcgVF8oIkFMV0FZU19ET1dOIiwxKSxOMWU9bmV3IFRfKCJESVJFQ1RJT05fVVAiLDIpLE8xZT1uZXcgVF8oIkRJUkVDVElPTl9ET1dOIiwzKSxQMWU9bmV3IFRfKCJTTUFSVF9VUCIsNCksUUs9bmV3IFRfKCJTTUFSVF9ET1dOIiw1KX1mdW5jdGlvbiB3OW4oZSx0KXtpZihlPDB8fHQ8MCl0aHJvdyB1ZShuZXcgWW4oImsgYW5kIG4gbXVzdCBiZSBwb3NpdGl2ZSIpKTtpZih0PmUpdGhyb3cgdWUobmV3IFluKCJrIG11c3QgYmUgc21hbGxlciB0aGFuIG4iKSk7cmV0dXJuIHQ9PTB8fHQ9PWU/MTplPT0wPzA6eHhlKGUpLyh4eGUodCkqeHhlKGUtdCkpfWZ1bmN0aW9uIFl4ZShlLHQpe3ZhciBuLHIsYSxvO2ZvcihuPW5ldyBoeWUoZSk7bi5nPT1udWxsJiYhbi5jP0g1ZShuKTpuLmc9PW51bGx8fG4uaSE9MCYmbChuLmdbbi5pLTFdLDUxKS5PYigpOylpZihvPWwoQ1UobiksNTgpLERlKG8sMTY3KSlmb3Iocj1sKG8sMTY3KSxhPTA7YTx0Lmxlbmd0aDthKyspdFthXS5LZyhyKX1mdW5jdGlvbiBQdWUoZSl7dmFyIHQ7cmV0dXJuIGUuRGImNjQ/amNlKGUpOih0PW5ldyBBZihqY2UoZSkpLHQuYSs9IiAoaGVpZ2h0OiAiLF81KHQsZS5mKSx0LmErPSIsIHdpZHRoOiAiLF81KHQsZS5nKSx0LmErPSIsIHg6ICIsXzUodCxlLmkpLHQuYSs9IiwgeTogIixfNSh0LGUuaiksdC5hKz0iKSIsdC5hKX1mdW5jdGlvbiB5OW4oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKHQ9bmV3IGUyLHI9ZSxhPTAsbz1yLmxlbmd0aDthPG87KythKWlmKG49clthXSxmPVhyKG4ubGQoKSksZz1oMih0LGYsWHIobi5tZCgpKSksZyE9bnVsbCl0aHJvdyB1ZShuZXcgWW4oImR1cGxpY2F0ZSBrZXk6ICIrZikpO3RoaXMuYj0oQ24oKSxuZXcgdHIodCkpfWZ1bmN0aW9uIHg5bihlKXt2YXIgdCxuLHIsYSxvO2lmKGU9PW51bGwpcmV0dXJuIHVsO2ZvcihvPW5ldyBIbShDbywiWyIsIl0iKSxuPWUscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0sSmcobyxTdHJpbmcuZnJvbUNoYXJDb2RlKHQpKTtyZXR1cm4gby5hP28uZS5sZW5ndGg9PTA/by5hLmE6by5hLmErKCIiK28uZSk6by5jfWZ1bmN0aW9uIFh4ZSgpe1h4ZT1VLFFfZT0ob1YoKSx5Syksajd0PW5ldyBwbihhRyxRX2UpLHB0KDEpLFI3dD1uZXcgcG4oSUVlLHB0KDMwMCkpLHB0KDApLHE3dD1uZXcgcG4oT0VlLHB0KDApKSxIN3Q9bmV3IHBuKERoZSxEZCksJDd0PW5ldyBwbihJaGUsNSksVjd0PXlLLHo3dD1RMGV9ZnVuY3Rpb24gazluKGUsdCl7dmFyIG47aWYodCE9bnVsbCYmIWUuYy5IaygpLmZrKHQpKXRocm93IG49RGUodCw1OCk/bCh0LDU4KS5EaCgpLnpiOl9tKGJoKHQpKSx1ZShuZXcga2soT2IrZS5jLnhlKCkrIidzIHR5cGUgJyIrZS5jLkhrKCkueGUoKSsiJyBkb2VzIG5vdCBwZXJtaXQgYSB2YWx1ZSBvZiB0eXBlICciK24rIiciKSl9ZnVuY3Rpb24gRTluKGUsdCxuKXt2YXIgcixhO2ZvcihhPW5ldyBVYShlLmIsMCk7YS5iPGEuZC5nYygpOylyPShtcihhLmI8YS5kLmdjKCkpLGwoYS5kLlhiKGEuYz1hLmIrKyksNzIpKSxxZShRKHIsKGZ0KCksVkxlKSkpPT09cWUodCkmJihuOWUoci5uLGVvKGUuYy5pKSxuKSxwaChhKSx2dCh0LmIscikpfWZ1bmN0aW9uIGlwdChlKXt2YXIgdCxuO3JldHVybiBuPWIuTWF0aC5zcXJ0KChlLms9PW51bGwmJihlLms9eDdlKGUsbmV3IEJlZSkpLHplKGUuaykvKGUuYiooZS5nPT1udWxsJiYoZS5nPUVmdChlLG5ldyBLaikpLHplKGUuZykpKSkpLHQ9WXIoWmMoYi5NYXRoLnJvdW5kKG4pKSksdD1iLk1hdGgubWluKHQsZS5mKSx0fWZ1bmN0aW9uIFQ5bigpe3ZhciBlLHQsbjtmb3IodD0wLGU9MDtlPDE7ZSsrKXtpZihuPUM5ZSgoWG4oZSwxKSwiWCIuY2hhckNvZGVBdChlKSkpLG49PTApdGhyb3cgdWUobmV3IHJpKChYbihlLDErMSksIlVua25vd24gT3B0aW9uOiAiKyJYIi5zdWJzdHIoZSkpKSk7dHw9bn1yZXR1cm4gdH1mdW5jdGlvbiBndSgpe2tsKCkscjRlLmNhbGwodGhpcyksdGhpcy5qPShDdCgpLFBjKSx0aGlzLmE9bmV3IHFhLG5ldyAkaWUsdGhpcy5mPShNaCgyLFl5KSxuZXcgQnUoMikpLHRoaXMuZT0oTWgoNCxZeSksbmV3IEJ1KDQpKSx0aGlzLmc9KE1oKDQsWXkpLG5ldyBCdSg0KSksdGhpcy5iPW5ldyBNZXQodGhpcy5lLHRoaXMuZyl9ZnVuY3Rpb24gQzluKGUsdCl7dmFyIG4scjtyZXR1cm4hKFJ0KEJ0KFEodCwoZnQoKSxXMSkpKSl8fChyPXQuYy5pLGU9PShoZigpLFlMKSYmci5rPT0oWm4oKSxjdSkpfHwobj1sKFEociwoTnQoKSxRdSkpLDE3MSksbj09JGIpKX1mdW5jdGlvbiBTOW4oZSx0KXt2YXIgbixyO3JldHVybiEoUnQoQnQoUSh0LChmdCgpLFcxKSkpKXx8KHI9dC5kLmksZT09KGhmKCksWEwpJiZyLms9PShabigpLGN1KSl8fChuPWwoUShyLChOdCgpLFF1KSksMTcxKSxuPT1kNCkpfWZ1bmN0aW9uIF85bihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihmPWUuZCx3PWUubyxnPW5ldyBlZigtZi5iLC1mLmQsZi5iK3cuYStmLmMsZi5kK3cuYitmLmEpLHI9dCxhPTAsbz1yLmxlbmd0aDthPG87KythKW49clthXSxuJiYkQShnLG4uaSk7Zi5iPS1nLmMsZi5kPS1nLmQsZi5jPWcuYi1mLmItdy5hLGYuYT1nLmEtZi5kLXcuYn1mdW5jdGlvbiBBOW4oZSx0KXtpZih0LmEpc3dpdGNoKGwoUSh0LmIsKGZ0KCksR0xlKSksMTAxKS5nKXtjYXNlIDA6Y2FzZSAxOkc4bih0KTtjYXNlIDI6SXMobmV3IGJuKG51bGwsbmV3IGtuKHQuZCwxNikpLG5ldyBraiksTUVuKGUuYSx0KX1lbHNlIElzKG5ldyBibihudWxsLG5ldyBrbih0LmQsMTYpKSxuZXcga2opfWZ1bmN0aW9uIFhOKCl7WE49VSx4T2U9bmV3IHBPKCJDRU5URVJfRElTVEFOQ0UiLDApLHdnZT1uZXcgcE8oIkNJUkNMRV9VTkRFUkxBUCIsMSksRU9lPW5ldyBwTygiUkVDVEFOR0xFX1VOREVSTEFQIiwyKSx5Z2U9bmV3IHBPKCJJTlZFUlRFRF9PVkVSTEFQIiwzKSxrT2U9bmV3IHBPKCJNSU5JTVVNX1JPT1RfRElTVEFOQ0UiLDQpfWZ1bmN0aW9uIEw5bihlKXtaOWUoKTt2YXIgdCxuLHIsYSxvO2lmKGU9PW51bGwpcmV0dXJuIG51bGw7Zm9yKHI9ZS5sZW5ndGgsYT1yKjIsdD1XZShrZixBZCwyOCxhLDE1LDEpLG49MDtuPHI7bisrKW89ZVtuXSxvPDAmJihvKz0yNTYpLHRbbioyXT1MWVtvPj40XSx0W24qMisxXT1MWVtvJjE1XTtyZXR1cm4gSWYodCwwLHQubGVuZ3RoKX1mdW5jdGlvbiBNOW4oZSl7a0goKTt2YXIgdCxuLHI7c3dpdGNoKHI9ZS5jLmxlbmd0aCxyKXtjYXNlIDA6cmV0dXJuIGk2dDtjYXNlIDE6cmV0dXJuIHQ9bChScHQobmV3IEcoZSkpLDQ0KSxFZG4odC5sZCgpLHQubWQoKSk7ZGVmYXVsdDpyZXR1cm4gbj1sKGoxKGUsV2UodXYsWFUsNDQsZS5jLmxlbmd0aCwwLDEpKSwxNzMpLG5ldyBXd2Uobil9fWZ1bmN0aW9uIEQ5bihlKXt2YXIgdCxuLHIsYSxvLGY7Zm9yKHQ9bmV3IHo1LG49bmV3IHo1LGdiKHQsZSksZ2IobixlKTtuLmIhPW4uYzspZm9yKGE9bChYOChuKSwzNiksZj1uZXcgRyhhLmEpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxMCksby5lJiYocj1vLmUsZ2IodCxyKSxnYihuLHIpKTtyZXR1cm4gdH1mdW5jdGlvbiBkMihlLHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMTpyZXR1cm4gRzgoZS5qLChrbCgpLGtBZSkpO2Nhc2UgMjpyZXR1cm4gRzgoZS5qLChrbCgpLHlBZSkpO2Nhc2UgMzpyZXR1cm4gRzgoZS5qLChrbCgpLFRBZSkpO2Nhc2UgNDpyZXR1cm4gRzgoZS5qLChrbCgpLENBZSkpO2RlZmF1bHQ6cmV0dXJuIENuKCksQ24oKSxfb319ZnVuY3Rpb24gSTluKGUsdCl7dmFyIG4scixhO249YmRuKHQsZS5lKSxyPWwoY3IoZS5nLmYsbiksMTcpLmEsYT1lLmEuYy5sZW5ndGgtMSxlLmEuYy5sZW5ndGghPTAmJmwoanQoZS5hLGEpLDI5NCkuYz09cj8oKytsKGp0KGUuYSxhKSwyOTQpLmEsKytsKGp0KGUuYSxhKSwyOTQpLmIpOnZ0KGUuYSxuZXcgbHJ0KHIpKX1mdW5jdGlvbiBPOW4oZSx0LG4pe3ZhciByLGE7cmV0dXJuIHI9WVNuKGUsdCxuKSxyIT0wP3I6bnModCwoZnQoKSxLaSkpJiZucyhuLEtpKT8oYT1ydShsKFEodCxLaSksMTcpLmEsbChRKG4sS2kpLDE3KS5hKSxhPDA/bFAoZSx0LG4pOmE+MCYmbFAoZSxuLHQpLGEpOndFbihlLHQsbil9ZnVuY3Rpb24gU2IoKXtTYj1VLHVDdD0ocGkoKSxuOSksbEN0PUV2LHNDdD1rdixhQ3Q9aTcsb0N0PVViLGlDdD1yNyxOSWU9WUIsY0N0PVM0LEpkZT0odWtlKCksS1R0KSxaZGU9V1R0LEJJZT1KVHQsZWdlPXRDdCxGSWU9WlR0LFJJZT1lQ3QsUEllPVlUdCxxVz1YVHQsSFc9UVR0LEZCPW5DdCxqSWU9ckN0LE9JZT1HVHR9ZnVuY3Rpb24gc3B0KGUsdCl7dmFyIG4scixhLG8sZjtpZihlLmU8PXR8fHRibihlLGUuZyx0KSlyZXR1cm4gZS5nO2ZvcihvPWUucixyPWUuZyxmPWUucixhPShvLXIpLzIrcjtyKzE8bzspbj1aQShlLGEsITEpLG4uYjw9YSYmbi5hPD10PyhmPWEsbz1hKTpyPWEsYT0oby1yKS8yK3I7cmV0dXJuIGZ9ZnVuY3Rpb24gTjluKGUsdCxuKXt2YXIgcjtyPVNidChlLHQsITApLEZndChuLCJSZWN1cnNpdmUgR3JhcGggTGF5b3V0IixyKSxZeGUodCxoZShsZShIT2UsMSksUm4sNTM2LDAsW25ldyBoaWVdKSksUDEodCwocGkoKSxhNykpfHxZeGUodCxoZShsZShIT2UsMSksUm4sNTM2LDAsW25ldyBmJF0pKSxYa2UoZSx0LG51bGwsbiksYXB0KG4pfWZ1bmN0aW9uIGFwdChlKXt2YXIgdDtpZihlLnA9PW51bGwpdGhyb3cgdWUobmV3IG5jKCJUaGUgdGFzayBoYXMgbm90IGJlZ3VuIHlldC4iKSk7ZS5ifHwoZS5rJiYodD0oVmcoKSxtbyhaYyhEYXRlLm5vdygpKSxiMikpLGUucT1GbShEZih0LGUubykpKjFlLTkpLGUuYzxlLnImJmM3ZShlLGUuci1lLmMpLGUuYj0hMCl9ZnVuY3Rpb24gUU4oZSl7dmFyIHQsbixyO2ZvcihyPW5ldyBibCx1aShyLG5ldyBsdChlLmosZS5rKSksbj1uZXcgb3IoKCFlLmEmJihlLmE9bmV3IFlzKHFoLGUsNSkpLGUuYSkpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwzNzcpLHVpKHIsbmV3IGx0KHQuYSx0LmIpKTtyZXR1cm4gdWkocixuZXcgbHQoZS5iLGUuYykpLHJ9ZnVuY3Rpb24gUDluKGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDO2lmKGEpZm9yKHc9YS5hLmxlbmd0aCxvPW5ldyBEbSh3KSxDPShvLmItby5hKSpvLmM8MD8oc2IoKSx0bSk6bmV3IGNiKG8pO0MuT2IoKTspRT1sKEMuUGIoKSwxNyksZz1KayhhLEUuYSksZj1uZXcgRGF0KGUsdCxuLHIpLHJBbihmLmEsZi5iLGYuYyxmLmQsZyl9ZnVuY3Rpb24gUXhlKGUsdCl7dmFyIG47aWYocWUoZSk9PT1xZSh0KSlyZXR1cm4hMDtpZihEZSh0LDIxKSl7bj1sKHQsMjEpO3RyeXtyZXR1cm4gZS5nYygpPT1uLmdjKCkmJmUuSWMobil9Y2F0Y2gocil7aWYocj1icyhyKSxEZShyLDE2OSl8fERlKHIsMjEyKSlyZXR1cm4hMTt0aHJvdyB1ZShyKX19cmV0dXJuITF9ZnVuY3Rpb24gQnVlKGUsdCxuLHIsYSxvKXtzd2l0Y2godGhpcy5jPWUsdC5nKXtjYXNlIDI6aWYoZS5hLk5lKGEsbik8MCl0aHJvdyB1ZShuZXcgWW4obEVlK2ErWXd0K24pKTticmVhaztjYXNlIDE6ZS5hLk5lKGEsYSk7YnJlYWs7Y2FzZSAzOmUuYS5OZShuLG4pfXRoaXMuZj10LHRoaXMuYj1uLHRoaXMuYT1yLHRoaXMuZT1hLHRoaXMuZD1vfWZ1bmN0aW9uIEp4ZShlLHQpe3ZhciBuO3Z0KGUuZCx0KSxuPXQuTWYoKSxlLmM/KGUuZS5hPWIuTWF0aC5tYXgoZS5lLmEsbi5hKSxlLmUuYis9bi5iLGUuZC5jLmxlbmd0aD4xJiYoZS5lLmIrPWUuYSkpOihlLmUuYSs9bi5hLGUuZS5iPWIuTWF0aC5tYXgoZS5lLmIsbi5iKSxlLmQuYy5sZW5ndGg+MSYmKGUuZS5hKz1lLmEpKX1mdW5jdGlvbiBCOW4oZSl7dmFyIHQsbixyLGE7c3dpdGNoKGE9ZS5pLHQ9YS5iLHI9YS5qLG49YS5nLGEuYS5nKXtjYXNlIDA6bi5hPShlLmcuYi5vLmEtci5hKS8yO2JyZWFrO2Nhc2UgMTpuLmE9dC5kLm4uYSt0LmQuYS5hO2JyZWFrO2Nhc2UgMjpuLmE9dC5kLm4uYSt0LmQuYS5hLXIuYTticmVhaztjYXNlIDM6bi5iPXQuZC5uLmIrdC5kLmEuYn19ZnVuY3Rpb24gRjluKGUsdCxuKXt2YXIgcixhLG87Zm9yKGE9bmV3IGhyKGRyKHNwKG4pLmEuS2MoKSxuZXcgaikpO2pyKGEpOylyPWwoeHIoYSksMTgpLCFEbyhyKSYmISghRG8ocikmJnIuYy5pLmM9PXIuZC5pLmMpJiYobz1ZMnQoZSxyLG4sbmV3IFFRZSksby5jLmxlbmd0aD4xJiYkbih0LmMsbykpfWZ1bmN0aW9uIG9wdChlLHQsbixyLGEpe2lmKHI8dHx8YTxuKXRocm93IHVlKG5ldyBZbigiVGhlIGhpZ2h4IG11c3QgYmUgYmlnZ2VyIHRoZW4gbG93eCBhbmQgdGhlIGhpZ2h5IG11c3QgYmUgYmlnZ2VyIHRoZW4gbG93eSIpKTtyZXR1cm4gZS5hPHQ/ZS5hPXQ6ZS5hPnImJihlLmE9ciksZS5iPG4/ZS5iPW46ZS5iPmEmJihlLmI9YSksZX1mdW5jdGlvbiBSOW4oZSl7aWYoRGUoZSwxNDMpKXJldHVybiBwQ24obChlLDE0MykpO2lmKERlKGUsMjMzKSlyZXR1cm4gczVuKGwoZSwyMzMpKTtpZihEZShlLDIzKSlyZXR1cm4gYjluKGwoZSwyMykpO3Rocm93IHVlKG5ldyBZbih2U2UrVGIobmV3IElsKGhlKGxlKHdhLDEpLFJuLDEsNSxbZV0pKSkpKX1mdW5jdGlvbiBqOW4oZSx0LG4scixhKXt2YXIgbyxmLGc7Zm9yKG89ITAsZj0wO2Y8cjtmKyspbz1vJm5bZl09PTA7aWYoYT09MClwdShuLHIsZSwwLHQpLGY9dDtlbHNle2ZvcihnPTMyLWEsbz1vJm5bZl08PGc9PTAsZj0wO2Y8dC0xO2YrKyllW2ZdPW5bZityXT4+PmF8bltmK3IrMV08PGc7ZVtmXT1uW2Yrcl0+Pj5hLCsrZn1yZXR1cm4gb31mdW5jdGlvbiBaeGUoZSx0LG4scil7dmFyIGEsbyxmO2lmKHQuaz09KFpuKCksQWEpKXtmb3Iobz1uZXcgaHIoZHIoa2EodCkuYS5LYygpLG5ldyBqKSk7anIobyk7KWlmKGE9bCh4cihvKSwxOCksZj1hLmMuaS5rLGY9PUFhJiZlLmMuYVthLmMuaS5jLnBdPT1yJiZlLmMuYVt0LmMucF09PW4pcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gJDluKGUsdCl7dmFyIG4scixhLG87cmV0dXJuIHQmPTYzLG49ZS5oJmhwLHQ8MjI/KG89bj4+PnQsYT1lLm0+PnR8bjw8MjItdCxyPWUubD4+dHxlLm08PDIyLXQpOnQ8NDQ/KG89MCxhPW4+Pj50LTIyLHI9ZS5tPj50LTIyfGUuaDw8NDQtdCk6KG89MCxhPTAscj1uPj4+dC00NCkscXUociZlaCxhJmVoLG8maHApfWZ1bmN0aW9uIGNwdChlLHQsbixyKXt2YXIgYTt0aGlzLmI9cix0aGlzLmU9ZT09KEl3KCksb00pLGE9dFtuXSx0aGlzLmQ9TG0oaWgsW2R0LHBnXSxbMTgzLDI4XSwxNixbYS5sZW5ndGgsYS5sZW5ndGhdLDIpLHRoaXMuYT1MbShWcixbZHQsZGldLFs1MywyOF0sMTUsW2EubGVuZ3RoLGEubGVuZ3RoXSwyKSx0aGlzLmM9bmV3IE54ZSh0LG4pfWZ1bmN0aW9uIHo5bihlKXt2YXIgdCxuLHI7Zm9yKGUuaz1uZXcgRzVlKChDdCgpLGhlKGxlKE9vLDEpLGF1LDY0LDAsW1BjLFFuLGFyLERyLGVyXSkpLmxlbmd0aCxlLmouYy5sZW5ndGgpLHI9bmV3IEcoZS5qKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTEzKSx0PW4uZC5qLHhuKGUuayx0LG4pO2UuZT10Q24oVzgoZS5rKSl9ZnVuY3Rpb24gdXB0KGUsdCl7dmFyIG4scixhO25hKGUuZCx0KSxuPW5ldyBBdGUsa2koZS5jLHQsbiksbi5mPU5jZSh0LmMpLG4uYT1OY2UodC5kKSxuLmQ9KEdBKCksYT10LmMuaS5rLGE9PShabigpLFBzKXx8YT09SzEpLG4uZT0ocj10LmQuaS5rLHI9PVBzfHxyPT1LMSksbi5iPXQuYy5qPT0oQ3QoKSxlciksbi5jPXQuZC5qPT1hcn1mdW5jdGlvbiBxOW4oZSl7dmFyIHQsbixyLGEsbztmb3Iobz1JaSxhPUlpLHI9bmV3IEcoWjUoZSkpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwyMTgpLHQ9bi5lLmUtbi5kLmUsbi5lPT1lJiZ0PGE/YT10OnQ8byYmKG89dCk7cmV0dXJuIGE9PUlpJiYoYT0tMSksbz09SWkmJihvPS0xKSxuZXcgY2EocHQoYSkscHQobykpfWZ1bmN0aW9uIEg5bihlLHQpe3ZhciBuLHIsYTtyZXR1cm4gYT15NixyPShOQSgpLHVCKSxhPWIuTWF0aC5hYnMoZS5iKSxuPWIuTWF0aC5hYnModC5mLWUuYiksbjxhJiYoYT1uLHI9bUspLG49Yi5NYXRoLmFicyhlLmEpLG48YSYmKGE9bixyPWxCKSxuPWIuTWF0aC5hYnModC5nLWUuYSksbjxhJiYoYT1uLHI9YkspLHJ9ZnVuY3Rpb24gVjluKGUsdCl7dmFyIG4scixhLG87Zm9yKG49dC5hLm8uYSxvPW5ldyBacChlbyh0LmEpLmIsdC5jLHQuZisxKSxhPW5ldyBrcihvKTthLmI8YS5kLmdjKCk7KWlmKHI9KG1yKGEuYjxhLmQuZ2MoKSksbChhLmQuWGIoYS5jPWEuYisrKSwzMCkpLHIuYy5hPj1uKXJldHVybiBxRShlLHQsci5wKSwhMDtyZXR1cm4hMX1mdW5jdGlvbiBvNihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEU7Zm9yKGY9bi5sZW5ndGgsbz0wLGE9LTEsRT10aHQoKFhuKHQsZS5sZW5ndGgrMSksZS5zdWJzdHIodCkpLChnYWUoKSxwX2UpKSxnPTA7ZzxmOysrZyl3PW5bZ10ubGVuZ3RoLHc+byYmZ2duKEUsdGh0KG5bZ10scF9lKSkmJihhPWcsbz13KTtyZXR1cm4gYT49MCYmKHJbMF09dCtvKSxhfWZ1bmN0aW9uIGxwdChlKXt2YXIgdDtyZXR1cm4gZS5EYiY2ND9QdWUoZSk6KHQ9bmV3IFRoKG9TZSksIWUuYXx8aGkoaGkoKHQuYSs9JyAiJyx0KSxlLmEpLCciJyksaGkocncoaGkocncoaGkocncoaGkocncoKHQuYSs9IiAoIix0KSxlLmkpLCIsIiksZS5qKSwiIHwgIiksZS5nKSwiLCIpLGUuZiksIikiKSx0LmEpfWZ1bmN0aW9uIGhwdChlLHQsbil7dmFyIHIsYSxvLGYsZztmb3IoZz1XdShlLmUuRGgoKSx0KSxhPWwoZS5nLDEyNCkscj0wLGY9MDtmPGUuaTsrK2YpaWYobz1hW2ZdLGcuYW0oby5MaygpKSl7aWYocj09bilyZXR1cm4gVnkoZSxmKSxGbygpLGwodCw2OSkueGsoKT9vOm8ubWQoKTsrK3J9dGhyb3cgdWUobmV3IHRjKENMK24rYXYrcikpfWZ1bmN0aW9uIGZwdChlKXt2YXIgdCxuLHI7aWYodD1lLmMsdD09Mnx8dD09N3x8dD09MSlyZXR1cm4gRGkoKSxEaSgpLFdNO2ZvcihyPUdrZShlKSxuPW51bGw7KHQ9ZS5jKSE9MiYmdCE9NyYmdCE9MTspbnx8KG49KERpKCksRGkoKSxuZXcgQl8oMSkpLFFtKG4scikscj1uKSxRbShuLEdrZShlKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gVTluKGUsdCxuKXtyZXR1cm4gZTwwfHxlPm4/dTllKGUsbiwic3RhcnQgaW5kZXgiKTp0PDB8fHQ+bj91OWUodCxuLCJlbmQgaW5kZXgiKTpLQSgiZW5kIGluZGV4ICglcykgbXVzdCBub3QgYmUgbGVzcyB0aGFuIHN0YXJ0IGluZGV4ICglcykiLGhlKGxlKHdhLDEpLFJuLDEsNSxbcHQodCkscHQoZSldKSl9ZnVuY3Rpb24gZHB0KGUsdCl7dmFyIG4scixhLG87Zm9yKHI9MCxhPWUubGVuZ3RoO3I8YTtyKyspe289ZVtyXTt0cnl7b1sxXT9vWzBdLlVtKCkmJih0PVhkbih0LG8pKTpvWzBdLlVtKCl9Y2F0Y2goZil7aWYoZj1icyhmKSxEZShmLDgyKSluPWYsSHooKSxScG4oRGUobiw0ODYpP2wobiw0ODYpLmtlKCk6bik7ZWxzZSB0aHJvdyB1ZShmKX19cmV0dXJuIHR9ZnVuY3Rpb24gcUUoZSx0LG4pe3ZhciByLGEsbztmb3IobiE9dC5jK3QuYi5nYygpJiZoTG4odC5hLF8zbih0LG4tdC5jKSksbz10LmEuYy5wLGUuYVtvXT1iLk1hdGgubWF4KGUuYVtvXSx0LmEuby5hKSxhPWwoUSh0LmEsKGZ0KCksV0wpKSwxNSkuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksNzIpLHJ0KHIsZzFlLChIbigpLCEwKSl9ZnVuY3Rpb24gRzluKGUsdCl7dmFyIG4scixhO2E9RUNuKHQpLHJ0KHQsKGZ0KCksVTFlKSxhKSxhJiYocj1JaSx6byhlLmYsYSkmJihyPWwoaGMoem8oZS5mLGEpKSwxNykuYSksbj1sKGp0KHQuZywwKSwxOCksUnQoQnQoUShuLFcxKSkpfHxraShlLGEscHQoYi5NYXRoLm1pbihsKFEobixLaSksMTcpLmEscikpKSl9ZnVuY3Rpb24gZ3B0KGUsdCxuKXt2YXIgcixhLG8sZixnO2Zvcih0LnA9LTEsZz1Sdyh0LChxbygpLHp1KSkuS2MoKTtnLk9iKCk7KWZvcihmPWwoZy5QYigpLDEyKSxhPW5ldyBHKGYuZyk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE4KSxvPXIuZC5pLHQhPW8mJihvLnA8MD9uLkZjKHIpOm8ucD4wJiZncHQoZSxvLG4pKTt0LnA9MH1mdW5jdGlvbiBYdChlKXt2YXIgdDt0aGlzLmM9bmV3IG9zLHRoaXMuZj1lLmUsdGhpcy5lPWUuZCx0aGlzLmk9ZS5nLHRoaXMuZD1lLmMsdGhpcy5iPWUuYix0aGlzLms9ZS5qLHRoaXMuYT1lLmEsZS5pP3RoaXMuaj1lLmk6dGhpcy5qPSh0PWwoSzAoeGcpLDkpLG5ldyBaaCh0LGwoYzAodCx0Lmxlbmd0aCksOSksMCkpLHRoaXMuZz1lLmZ9ZnVuY3Rpb24gSzluKGUpe3ZhciB0LG4scixhO2Zvcih0PWhiKGhpKG5ldyBUaCgiUHJlZGljYXRlcy4iKSwiYW5kIiksNDApLG49ITAsYT1uZXcga3IoZSk7YS5iPGEuZC5nYygpOylyPShtcihhLmI8YS5kLmdjKCkpLGEuZC5YYihhLmM9YS5iKyspKSxufHwodC5hKz0iLCIpLHQuYSs9IiIrcixuPSExO3JldHVybih0LmErPSIpIix0KS5hfWZ1bmN0aW9uIHBwdChlLHQsbil7dmFyIHIsYSxvO2lmKCEobjw9dCsyKSlmb3IoYT0obi10KS8yfDAscj0wO3I8YTsrK3Ipbz0oU24odCtyLGUuYy5sZW5ndGgpLGwoZS5jW3Qrcl0sMTIpKSxyZihlLHQrciwoU24obi1yLTEsZS5jLmxlbmd0aCksbChlLmNbbi1yLTFdLDEyKSkpLFNuKG4tci0xLGUuYy5sZW5ndGgpLGUuY1tuLXItMV09b31mdW5jdGlvbiBXOW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7bz1lLmQucCxnPW8uZSx3PW8ucixlLmc9bmV3IElPKHcpLGY9ZS5kLm8uYy5wLHI9Zj4wP2dbZi0xXTpXZSh3ZyxtMiwxMCwwLDAsMSksYT1nW2ZdLEU9ZjxnLmxlbmd0aC0xP2dbZisxXTpXZSh3ZyxtMiwxMCwwLDAsMSksQz10PT1uLTEsQz9sb2UoZS5nLGEsRSk6bG9lKGUuZyxyLGEpfWZ1bmN0aW9uIGJwdChlKXt2YXIgdDt0aGlzLmo9bmV3IGJ0LHRoaXMuZj1uZXcgS3MsdGhpcy5iPSh0PWwoSzAoT28pLDkpLG5ldyBaaCh0LGwoYzAodCx0Lmxlbmd0aCksOSksMCkpLHRoaXMuZD1XZShWcixkaSwyOCwoQ3QoKSxoZShsZShPbywxKSxhdSw2NCwwLFtQYyxRbixhcixEcixlcl0pKS5sZW5ndGgsMTUsMSksdGhpcy5nPWV9ZnVuY3Rpb24gbXB0KGUsdCl7dmFyIG4scixhO2lmKHQuYy5sZW5ndGghPTApe2ZvcihuPUdndChlLHQpLGE9ITE7IW47KVRVKGUsdCwhMCksYT0hMCxuPUdndChlLHQpO2EmJlRVKGUsdCwhMSkscj1iY2UodCksZS5iJiZlLmIuR2cociksZS5hPVcwdChlLChTbigwLHQuYy5sZW5ndGgpLGwodC5jWzBdLDI3KSkpLG1wdChlLHIpfX1mdW5jdGlvbiBGdWUoZSx0KXt2YXIgbixyLGE7aWYocj1NbihlLkRoKCksdCksbj10LWUuamkoKSxuPDApaWYocilpZihyLnJrKCkpYT1lLkloKHIpLGE+PTA/ZS5raShhKTpkOWUoZSxyKTtlbHNlIHRocm93IHVlKG5ldyBZbihPYityLnhlKCkra0wpKTtlbHNlIHRocm93IHVlKG5ldyBZbihmNHQrdCtkNHQpKTtlbHNlIGNmKGUsbixyKX1mdW5jdGlvbiBlOWUoZSl7dmFyIHQsbjtpZihuPW51bGwsdD0hMSxEZShlLDIxMSkmJih0PSEwLG49bChlLDIxMSkuYSksdHx8RGUoZSwyNjMpJiYodD0hMCxuPSIiK2woZSwyNjMpLmEpLHR8fERlKGUsNDkzKSYmKHQ9ITAsbj0iIitsKGUsNDkzKS5hKSwhdCl0aHJvdyB1ZShuZXcgUWllKG1TZSkpO3JldHVybiBufWZ1bmN0aW9uIHQ5ZShlLHQsbil7dmFyIHIsYSxvLGYsZyx3O2Zvcih3PVd1KGUuZS5EaCgpLHQpLHI9MCxnPWUuaSxhPWwoZS5nLDEyNCksZj0wO2Y8ZS5pOysrZilpZihvPWFbZl0sdy5hbShvLkxrKCkpKXtpZihuPT1yKXJldHVybiBmOysrcixnPWYrMX1pZihuPT1yKXJldHVybiBnO3Rocm93IHVlKG5ldyB0YyhDTCtuK2F2K3IpKX1mdW5jdGlvbiBZOW4oZSx0KXt2YXIgbixyLGEsbztpZihlLmYuYy5sZW5ndGg9PTApcmV0dXJuIG51bGw7Zm9yKG89bmV3ICQ4LHI9bmV3IEcoZS5mKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNzIpLGE9bi5vLG8uYj1iLk1hdGgubWF4KG8uYixhLmEpLG8uYSs9YS5iO3JldHVybiBvLmErPShlLmYuYy5sZW5ndGgtMSkqdCxvfWZ1bmN0aW9uIFg5bihlKXt2YXIgdCxuLHIsYTtmb3Iobj1uZXcgb3MsS2EobixlLm8pLHI9bmV3IEZ3ZTtuLmIhPTA7KXQ9bChuLmI9PTA/bnVsbDoobXIobi5iIT0wKSxhZihuLG4uYS5hKSksNTE1KSxhPXR3dChlLHQsITApLGEmJnZ0KHIuYSx0KTtmb3IoO3IuYS5jLmxlbmd0aCE9MDspdD1sKFAwdChyKSw1MTUpLHR3dChlLHQsITEpfWZ1bmN0aW9uIGcyKCl7ZzI9VSxWT2U9bmV3IEY4KGNMLDApLHlhPW5ldyBGOCgiQk9PTEVBTiIsMSksVGM9bmV3IEY4KCJJTlQiLDIpLEo2PW5ldyBGOCgiU1RSSU5HIiwzKSxmbz1uZXcgRjgoIkRPVUJMRSIsNCkscHM9bmV3IEY4KCJFTlVNIiw1KSx0OT1uZXcgRjgoIkVOVU1TRVQiLDYpLFgxPW5ldyBGOCgiT0JKRUNUIiw3KX1mdW5jdGlvbiAkQShlLHQpe3ZhciBuLHIsYSxvLGY7cj1iLk1hdGgubWluKGUuYyx0LmMpLG89Yi5NYXRoLm1pbihlLmQsdC5kKSxhPWIuTWF0aC5tYXgoZS5jK2UuYix0LmMrdC5iKSxmPWIuTWF0aC5tYXgoZS5kK2UuYSx0LmQrdC5hKSxhPHImJihuPXIscj1hLGE9biksZjxvJiYobj1vLG89ZixmPW4pLElpdChlLHIsbyxhLXIsZi1vKX1mdW5jdGlvbiB2cHQoZSx0KXt2YXIgbixyO2lmKGUuZil7Zm9yKDt0Lk9iKCk7KWlmKG49bCh0LlBiKCksNzYpLHI9bi5MaygpLERlKHIsMTAyKSYmbChyLDE5KS5CYiZldSYmKCFlLmV8fHIucGsoKSE9b0N8fHIuTGooKSE9MCkmJm4ubWQoKSE9bnVsbClyZXR1cm4gdC5VYigpLCEwO3JldHVybiExfWVsc2UgcmV0dXJuIHQuT2IoKX1mdW5jdGlvbiB3cHQoZSx0KXt2YXIgbixyO2lmKGUuZil7Zm9yKDt0LlNiKCk7KWlmKG49bCh0LlViKCksNzYpLHI9bi5MaygpLERlKHIsMTAyKSYmbChyLDE5KS5CYiZldSYmKCFlLmV8fHIucGsoKSE9b0N8fHIuTGooKSE9MCkmJm4ubWQoKSE9bnVsbClyZXR1cm4gdC5QYigpLCEwO3JldHVybiExfWVsc2UgcmV0dXJuIHQuU2IoKX1mdW5jdGlvbiBFbCgpe0VsPVUselBlPWhlKGxlKHp0LDEpLGR0LDIsNixbSVNlLFFQLFpHLEw1dCxlSyxhMGUsekddKSwkUGU9aGUobGUoenQsMSksZHQsMiw2LFtJU2UsImVtcHR5IixRUCxYUCwiZWxlbWVudE9ubHkiXSkscVBlPWhlKGxlKHp0LDEpLGR0LDIsNixbSVNlLCJwcmVzZXJ2ZSIsInJlcGxhY2UiLHMxXSksaW89bmV3IE5pdH1mdW5jdGlvbiBuOWUoZSx0LG4pe3ZhciByLGEsbztpZih0IT1uKXtyPXQ7ZG8gT2koZSxyLmMpLGE9ci5lLGEmJihvPXIuZCxkdyhlLG8uYixvLmQpLE9pKGUsYS5uKSxyPWVvKGEpKTt3aGlsZShhKTtyPW47ZG8gbWEoZSxyLmMpLGE9ci5lLGEmJihvPXIuZCx6XyhlLG8uYixvLmQpLG1hKGUsYS5uKSxyPWVvKGEpKTt3aGlsZShhKX19ZnVuY3Rpb24gUnVlKGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7aWYoci5mLmMrci5pLmM9PTApZm9yKGY9ZS5hW2UuY10sZz0wLHc9Zi5sZW5ndGg7Zzx3OysrZylvPWZbZ10sa2kocixvLG5ldyBEZnQoZSxvLG4pKTtyZXR1cm4gYT1sKGhjKHpvKHIuZix0KSksNjc3KSxhLmI9MCxhLmM9YS5mLGEuYz09MHx8RXIobChqdChhLmEsYS5iKSwyOTQpKSxhfWZ1bmN0aW9uIHl4KCl7eXg9VSxPVD1uZXcgRV8oIk1FRElBTl9MQVlFUiIsMCkscUw9bmV3IEVfKCJUQUlMX0xBWUVSIiwxKSxJVD1uZXcgRV8oIkhFQURfTEFZRVIiLDIpLGg0PW5ldyBFXygiU1BBQ0VfRUZGSUNJRU5UX0xBWUVSIiwzKSxONj1uZXcgRV8oIldJREVTVF9MQVlFUiIsNCksTzY9bmV3IEVfKCJDRU5URVJfTEFZRVIiLDUpfWZ1bmN0aW9uIHI5ZShlKXt2YXIgdCxuLHIsYTtmb3IoZS5lPTAsYT1ScihlLmYsMCk7YS5iIT1hLmQuYzspcj1sKEJyKGEpLDEwKSxyLnA+PWUuZC5iLmMubGVuZ3RoJiYodD1uZXcgeXUoZS5kKSx0LnA9ci5wLTEsdnQoZS5kLmIsdCksbj1uZXcgeXUoZS5kKSxuLnA9ci5wLHZ0KGUuZC5iLG4pKSxWYShyLGwoanQoZS5kLmIsci5wKSwzMCkpfWZ1bmN0aW9uIGk5ZShlLHQsbil7dmFyIHIsYSxvO2lmKCFlLmJbdC5nXSl7Zm9yKGUuYlt0LmddPSEwLHI9biwhciYmKHI9bmV3IG5OKSx1aShyLmIsdCksbz1lLmFbdC5nXS5LYygpO28uT2IoKTspYT1sKG8uUGIoKSw2NSksYS5iIT10JiZpOWUoZSxhLmIsciksYS5jIT10JiZpOWUoZSxhLmMsciksdWkoci5hLGEpO3JldHVybiByfXJldHVybiBudWxsfWZ1bmN0aW9uIFE5bihlKXtzd2l0Y2goZS5nKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpyZXR1cm4gQ3QoKSxRbjtjYXNlIDM6Y2FzZSA0OmNhc2UgNTpyZXR1cm4gQ3QoKSxEcjtjYXNlIDY6Y2FzZSA3OmNhc2UgODpyZXR1cm4gQ3QoKSxlcjtjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOnJldHVybiBDdCgpLGFyO2RlZmF1bHQ6cmV0dXJuIEN0KCksUGN9fWZ1bmN0aW9uIEo5bihlLHQpe3ZhciBuO3JldHVybiBlLmMubGVuZ3RoPT0wPyExOihuPUkxdCgoU24oMCxlLmMubGVuZ3RoKSxsKGUuY1swXSwxOCkpLmMuaSksU2goKSxuPT0oQnkoKSxHNil8fG49PVU2PyEwOlc1KGZjKG5ldyBibihudWxsLG5ldyBrbihlLDE2KSksbmV3IFhlZSksbmV3IFhZZSh0KSkpfWZ1bmN0aW9uIGp1ZShlLHQpe2lmKERlKHQsMjA3KSlyZXR1cm4gR2xuKGUsbCh0LDI3KSk7aWYoRGUodCwxOTMpKXJldHVybiBLbG4oZSxsKHQsMTIzKSk7aWYoRGUodCw0NTIpKXJldHVybiBVbG4oZSxsKHQsMTY2KSk7dGhyb3cgdWUobmV3IFluKHZTZStUYihuZXcgSWwoaGUobGUod2EsMSksUm4sMSw1LFt0XSkpKSkpfWZ1bmN0aW9uIHlwdChlLHQsbil7dmFyIHIsYTtpZih0aGlzLmY9ZSxyPWwoY3IoZS5iLHQpLDI2MCksYT1yP3IuYTowLGs2ZShuLGEpLG4+PShhLzJ8MCkpZm9yKHRoaXMuZT1yP3IuYzpudWxsLHRoaXMuZD1hO24rKzxhOyluaHQodGhpcyk7ZWxzZSBmb3IodGhpcy5jPXI/ci5iOm51bGw7bi0tID4wOylHNmUodGhpcyk7dGhpcy5iPXQsdGhpcy5hPW51bGx9ZnVuY3Rpb24gWjluKGUsdCl7dmFyIG4scjt0LmE/T0NuKGUsdCk6KG49bChjc2UoZS5iLHQuYiksNjApLG4mJm49PWUuYVt0LmIuZl0mJm4uYSYmbi5hIT10LmIuYSYmbi5jLkZjKHQuYikscj1sKG9zZShlLmIsdC5iKSw2MCksciYmZS5hW3IuZl09PXQuYiYmci5hJiZyLmEhPXQuYi5hJiZ0LmIuYy5GYyhyKSx0YWUoZS5iLHQuYikpfWZ1bmN0aW9uIHhwdChlLHQpe3ZhciBuLHI7aWYobj1sKFFvKGUuYix0KSwxMjcpLGwobCgkaShlLnIsdCksMjEpLDg3KS5kYygpKXtuLm4uYj0wLG4ubi5jPTA7cmV0dXJufW4ubi5iPWUuQy5iLG4ubi5jPWUuQy5jLGUuQS5IYygobWgoKSxDdikpJiZLYnQoZSx0KSxyPV82bihlLHQpLEp1ZShlLHQpPT0odDYoKSxLYikmJihyKz0yKmUudyksbi5hLmE9cn1mdW5jdGlvbiBrcHQoZSx0KXt2YXIgbixyO2lmKG49bChRbyhlLmIsdCksMTI3KSxsKGwoJGkoZS5yLHQpLDIxKSw4NykuZGMoKSl7bi5uLmQ9MCxuLm4uYT0wO3JldHVybn1uLm4uZD1lLkMuZCxuLm4uYT1lLkMuYSxlLkEuSGMoKG1oKCksQ3YpKSYmV2J0KGUsdCkscj1TNm4oZSx0KSxKdWUoZSx0KT09KHQ2KCksS2IpJiYocis9MiplLncpLG4uYS5iPXJ9ZnVuY3Rpb24gZWtuKGUsdCl7dmFyIG4scixhLG87Zm9yKG89bmV3IGJ0LHI9bmV3IEcodCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDY4KSx2dChvLG5ldyBNM2UobiwhMCkpLHZ0KG8sbmV3IE0zZShuLCExKSk7YT1uZXcgWGF0KGUpLGEuYS5hLiRiKCksaGN0KG8sZS5iLG5ldyBJbChoZShsZShGNnQsMSksUm4sNjkzLDAsW2FdKSkpfWZ1bmN0aW9uIEVwdChlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGU7cmV0dXJuIHc9ZS5hLHo9ZS5iLEU9dC5hLFY9dC5iLEM9bi5hLEo9bi5iLEw9ci5hLHRlPXIuYixvPXcqVi16KkUsZj1DKnRlLUoqTCxhPSh3LUUpKihKLXRlKS0oei1WKSooQy1MKSxnPShvKihDLUwpLWYqKHctRSkpL2EsQj0obyooSi10ZSktZiooei1WKSkvYSxuZXcgbHQoZyxCKX1mdW5jdGlvbiB0a24oZSx0KXt2YXIgbixyLGE7dC5VZygiRW5kIGxhYmVsIHByZS1wcm9jZXNzaW5nIiwxKSxuPXplKEdlKFEoZSwoTnQoKSxINikpKSkscj16ZShHZShRKGUseTQpKSksYT1CNShsKFEoZSxSaCksODgpKSxJcyhEYyhuZXcgYm4obnVsbCxuZXcga24oZS5iLDE2KSksbmV3IHJJKSxuZXcgbWl0KG4scixhKSksdC5WZygpfWZ1bmN0aW9uIHM5ZShlLHQpe3ZhciBuLHIsYTtpZighZS5kW3QucF0pe2ZvcihlLmRbdC5wXT0hMCxlLmFbdC5wXT0hMCxyPW5ldyBocihkcihxcyh0KS5hLktjKCksbmV3IGopKTtqcihyKTspbj1sKHhyKHIpLDE4KSwhRG8obikmJihhPW4uZC5pLGUuYVthLnBdP3Z0KGUuYixuKTpzOWUoZSxhKSk7ZS5hW3QucF09ITF9fWZ1bmN0aW9uIFRwdChlLHQsbil7dmFyIHI7c3dpdGNoKHI9MCxsKFEodCwoTnQoKSxRdSkpLDE3MSkuZyl7Y2FzZSAyOnI9MiotbitlLmEsKytlLmE7YnJlYWs7Y2FzZSAxOnI9LW47YnJlYWs7Y2FzZSAzOnI9bjticmVhaztjYXNlIDQ6cj0yKm4rZS5iLCsrZS5ifXJldHVybiBucyh0LChmdCgpLEtpKSkmJihyKz1sKFEodCxLaSksMTcpLmEpLHJ9ZnVuY3Rpb24gQ3B0KGUsdCxuKXt2YXIgcixhLG87Zm9yKG4uemModCxlKSx2dChlLm4sdCksbz1lLnAuemcodCksdC5qPT1lLnAuQWcoKT95MXQoZS5lLG8pOnkxdChlLmosbyksd0goZSksYT1yZyhMaChoZShsZShGaCwxKSxSbiwyMCwwLFtuZXcgVDUodCksbmV3IEM4KHQpXSkpKTtqcihhKTspcj1sKHhyKGEpLDEyKSxuLl9iKHIpfHxDcHQoZSxyLG4pfWZ1bmN0aW9uIG5rbihlLHQsbil7dmFyIHIsYSxvO2ZvcihuLlVnKCJQcm9jZXNzb3Igc2V0IG5laWdoYm9ycyIsMSksZS5hPXQuYi5iPT0wPzE6dC5iLmIsYT1udWxsLHI9UnIodC5iLDApOyFhJiZyLmIhPXIuZC5jOylvPWwoQnIociksNDApLFJ0KEJ0KFEobywoUWkoKSxWYikpKSkmJihhPW8pO2EmJkxidChlLG5ldyBIZyhhKSxuKSxuLlZnKCl9ZnVuY3Rpb24gYTllKGUpe3ZhciB0LG4scjtyZXR1cm4gbj1sKGF0KGUsKHBpKCksa3YpKSwyMSksbi5IYygobWgoKSxBNCkpPyhyPWwoYXQoZSxVYiksMjEpLHQ9bmV3IEVvKGwoYXQoZSxpNyksOCkpLHIuSGMoKFpsKCksYUMpKSYmKHQuYTw9MCYmKHQuYT0yMCksdC5iPD0wJiYodC5iPTIwKSksdCk6bmV3IHFhfWZ1bmN0aW9uIG85ZShlKXt2YXIgdCxuLHI7aWYoIWUuYil7Zm9yKHI9bmV3IFpuZSxuPW5ldyBIOChKQShlKSk7bi5lIT1uLmkuZ2MoKTspdD1sKHJ1ZShuKSwxOSksdC5CYiZldSYmcXIocix0KTtJeShyKSxlLmI9bmV3IE41KChsKE9lKHR0KChsYigpLFZuKS5vKSw4KSwxOSksci5pKSxyLmcpLFlsKGUpLmImPS05fXJldHVybiBlLmJ9ZnVuY3Rpb24gJHkoZSl7dmFyIHQsbixyO2ZvcihuPWUubGVuZ3RoLHI9MDtyPG4mJihYbihyLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQocik8PTMyKTspKytyO2Zvcih0PW47dD5yJiYoWG4odC0xLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQodC0xKTw9MzIpOyktLXQ7cmV0dXJuIHI+MHx8dDxuPyhHYShyLHQsZS5sZW5ndGgpLGUuc3Vic3RyKHIsdC1yKSk6ZX1mdW5jdGlvbiBya24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO3c9bChQQShXOCh0LmspLFdlKE9vLGF1LDY0LDIsMCwxKSksMTI2KSxFPXQuZyxuPU5jdCh0LHdbMF0pLGE9T2N0KHQsd1sxXSkscj12dWUoZSxFLG4sYSksbz1OY3QodCx3WzFdKSxnPU9jdCh0LHdbMF0pLGY9dnVlKGUsRSxvLGcpLHI8PWY/KHQuYT1uLHQuYz1hKToodC5hPW8sdC5jPWcpfWZ1bmN0aW9uIEpOKGUpe3ZhciB0O0NuKCk7dmFyIG4scixhLG8sZixnO2lmKERlKGUsNTkpKWZvcihvPTAsYT1lLmdjKCktMTtvPGE7KytvLC0tYSl0PWUuWGIobyksZS5oZChvLGUuWGIoYSkpLGUuaGQoYSx0KTtlbHNlIGZvcihuPWUuZWQoKSxmPWUuZmQoZS5nYygpKTtuLlRiKCk8Zi5WYigpOylyPW4uUGIoKSxnPWYuVWIoKSxuLldiKGcpLGYuV2Iocil9ZnVuY3Rpb24geFUoZSx0KXt2YXIgbixyLGEsbyxmLGc7Zm9yKGc9MCxvPW5ldyB6NSxnYihvLHQpO28uYiE9by5jOylmb3IoZj1sKFg4KG8pLDIxOSksZys9V2R0KGYuZCxmLmUpLGE9bmV3IEcoZi5iKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMzYpLG49bChqdChlLmIsci5wKSwyMTkpLG4uc3x8KGcrPXhVKGUsbikpO3JldHVybiBnfWZ1bmN0aW9uIFNwdChlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEU7aWYodClmb3IoZz10LktjKCk7Zy5PYigpOylmb3IoZj1sKGcuUGIoKSwxMCksRT1ya2UoZiwocW8oKSx6dSksbikuS2MoKTtFLk9iKCk7KXc9bChFLlBiKCksMTIpLG89bChoYyh6byhhLmYsdykpLDExOCksb3x8KG89bmV3IHhOKGUuZCksJG4oci5jLG8pLENwdChvLHcsYSkpfWZ1bmN0aW9uIF9wdChlLHQsbil7dmFyIHIsYTtHZnQodGhpcyksdD09KFN3KCksSGIpP25hKHRoaXMucixlLmMpOm5hKHRoaXMudyxlLmMpLG49PUhiP25hKHRoaXMucixlLmQpOm5hKHRoaXMudyxlLmQpLHVwdCh0aGlzLGUpLHI9TmNlKGUuYyksYT1OY2UoZS5kKSxaZ3QodGhpcyxyLGEsYSksdGhpcy5vPShHQSgpLGIuTWF0aC5hYnMoci1hKTwuMil9ZnVuY3Rpb24gQXB0KGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYoZz1sKEtuKGUuYSw4KSwyMDM1KSxnIT1udWxsKWZvcihhPWcsbz0wLGY9YS5sZW5ndGg7bzxmOysrbyludWxsLlVtKCk7cj1uLGUuYS5EYiYxfHwodz1uZXcgbmF0KGUsbix0KSxyLmRqKHcpKSxEZShyLDY4Nik/bChyLDY4NikuZmooZS5hKTpyLmNqKCk9PWUuYSYmci5laihudWxsKX1mdW5jdGlvbiBpa24oKXt2YXIgZTtyZXR1cm4geUF0P2woVkUoKGliKCksR2YpLGN2KSwyMDQ0KTooTkRuKCksZT1sKERlKHh1KChpYigpLEdmKSxjdiksNTk0KT94dShHZixjdik6bmV3IGRhdCw1OTQpLHlBdD0hMCx5SW4oZSksdE9uKGUpLGtpKCh5M2UoKSxfUGUpLGUsbmV3IGxrKSx5dWUoZSkscmMoR2YsY3YsZSksZSl9ZnVuY3Rpb24gc2tuKGUsdCxuLHIpe3ZhciBhO3JldHVybiBhPW82KGUsbixoZShsZSh6dCwxKSxkdCwyLDYsW1FsZSxKbGUsWmxlLGVoZSx0aGUsbmhlLHJoZV0pLHQpLGE8MCYmKGE9bzYoZSxuLGhlKGxlKHp0LDEpLGR0LDIsNixbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdKSx0KSksYTwwPyExOihyLmQ9YSwhMCl9ZnVuY3Rpb24gYWtuKGUsdCxuLHIpe3ZhciBhO3JldHVybiBhPW82KGUsbixoZShsZSh6dCwxKSxkdCwyLDYsW1FsZSxKbGUsWmxlLGVoZSx0aGUsbmhlLHJoZV0pLHQpLGE8MCYmKGE9bzYoZSxuLGhlKGxlKHp0LDEpLGR0LDIsNixbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdKSx0KSksYTwwPyExOihyLmQ9YSwhMCl9ZnVuY3Rpb24ganUoZSx0LG4pe3ZhciByLGEsbyxmO2lmKGY9ZS5iLkNlKHQpLGE9KHI9ZS5hLmdldChmKSxyPz9XZSh3YSxSbiwxLDAsNSwxKSksYS5sZW5ndGg9PTApZS5hLnNldChmLGEpO2Vsc2UgaWYobz1SMHQoZSx0LGEpLG8pcmV0dXJuIG8ubmQobik7cmV0dXJuIFRzKGEsYS5sZW5ndGgsbmV3IGNxKHQsbikpLCsrZS5jLCsrZS5iLmcsbnVsbH1mdW5jdGlvbiBva24oZSl7dmFyIHQsbixyO2Zvcih3VG4oZSkscj1uZXcgYnQsbj1uZXcgRyhlLmEuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksODYpLHZ0KHIsbmV3IE8zZSh0LCEwKSksdnQocixuZXcgTzNlKHQsITEpKTtXNm4oZS5jKSxRTyhyLGUuYixuZXcgSWwoaGUobGUoZkIsMSksUm4sMzgyLDAsW2UuY10pKSksSUVuKGUpfWZ1bmN0aW9uIFpOKGUsdCl7dmFyIG4scixhO2ZvcihhPW5ldyBidCxyPW5ldyBHKGUuYy5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSw2MCksdC5MYihuKSYmKHZ0KGEsbmV3IFMzZShuLCEwKSksdnQoYSxuZXcgUzNlKG4sITEpKSk7SzZuKGUuZSksaGN0KGEsZS5kLG5ldyBJbChoZShsZShGNnQsMSksUm4sNjkzLDAsW2UuZV0pKSl9ZnVuY3Rpb24gY2tuKGUpe3ZhciB0LG4scixhO2ZvcihuPW5ldyBQcixhPW5ldyBHKGUuZCk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE4NyksdD1sKHIub2YoKGZ0KCksS3gpKSwxOCksem8obi5mLHQpfHxraShuLHQsbmV3IEhhdCh0KSksdnQobChoYyh6byhuLmYsdCkpLDQ2NikuYixyKTtyZXR1cm4gbmV3IE9sKG5ldyBnaShuKSl9ZnVuY3Rpb24gdWtuKGUsdCl7dmFyIG4scixhLG8sZjtmb3Iocj1uZXcgZGN0KGUuai5jLmxlbmd0aCksbj1udWxsLG89bmV3IEcoZS5qKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTIpLGEuaiE9biYmKHIuYj09ci5jfHxIMnQocixuLHQpLGw2ZShyKSxuPWEuaiksZj1DMnQoYSksZiYmaTZlKHIsZik7ci5iPT1yLmN8fEgydChyLG4sdCl9ZnVuY3Rpb24gbGtuKGUsdCl7dmFyIG4scixhO2ZvcihyPW5ldyBVYShlLmIsMCk7ci5iPHIuZC5nYygpOyluPShtcihyLmI8ci5kLmdjKCkpLGwoci5kLlhiKHIuYz1yLmIrKyksNzIpKSxhPWwoUShuLChOdCgpLGpkKSksMjc4KSxhPT0oRjEoKSxfNCkmJihwaChyKSx2dCh0LmIsbiksbnMobiwoZnQoKSxLeCkpfHxydChuLEt4LGUpKX1mdW5jdGlvbiBoa24oZSl7dmFyIHQsbixyLGEsbztmb3IodD1YZyhuZXcgaHIoZHIocXMoZSkuYS5LYygpLG5ldyBqKSkpLGE9bmV3IGhyKGRyKGthKGUpLmEuS2MoKSxuZXcgaikpO2pyKGEpOylyPWwoeHIoYSksMTgpLG49ci5jLmksbz1YZyhuZXcgaHIoZHIocXMobikuYS5LYygpLG5ldyBqKSkpLHQ9Yi5NYXRoLm1heCh0LG8pO3JldHVybiBwdCh0KX1mdW5jdGlvbiBjOWUoZSx0LG4pe3ZhciByLGEsbztyPWwoYXQoZSwocGkoKSxVQikpLDIxKSxhPTAsbz0wLHQuYT5uLmEmJihyLkhjKChZbSgpLEVNKSk/YT0odC5hLW4uYSkvMjpyLkhjKFRNKSYmKGE9dC5hLW4uYSkpLHQuYj5uLmImJihyLkhjKChZbSgpLFNNKSk/bz0odC5iLW4uYikvMjpyLkhjKENNKSYmKG89dC5iLW4uYikpLEh4ZShlLGEsbyl9ZnVuY3Rpb24gTHB0KGUsdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIpe0RlKGUuQ2IsOTApJiZ6eShZbChsKGUuQ2IsOTApKSw0KSxGdShlLG4pLGUuZj1mLExFKGUsZyksREUoZSx3KSxBRShlLEUpLE1FKGUsQyksdTIoZSxMKSxJRShlLEIpLGMyKGUsITApLGkyKGUsYSksZS5aayhvKSxHbShlLHQpLHIhPW51bGwmJihlLmk9bnVsbCx4VihlLHIpKX1mdW5jdGlvbiB1OWUoZSx0LG4pe2lmKGU8MClyZXR1cm4gS0EoU3d0LGhlKGxlKHdhLDEpLFJuLDEsNSxbbixwdChlKV0pKTtpZih0PDApdGhyb3cgdWUobmV3IFluKF93dCt0KSk7cmV0dXJuIEtBKCIlcyAoJXMpIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBzaXplICglcykiLGhlKGxlKHdhLDEpLFJuLDEsNSxbbixwdChlKSxwdCh0KV0pKX1mdW5jdGlvbiBsOWUoZSx0LG4scixhLG8pe3ZhciBmLGcsdyxFO2lmKGY9ci1uLGY8Nyl7VzRuKHQsbixyLG8pO3JldHVybn1pZih3PW4rYSxnPXIrYSxFPXcrKGctdz4+MSksbDllKHQsZSx3LEUsLWEsbyksbDllKHQsZSxFLGcsLWEsbyksby5OZShlW0UtMV0sZVtFXSk8PTApe2Zvcig7bjxyOylUcyh0LG4rKyxlW3crK10pO3JldHVybn1uNG4oZSx3LEUsZyx0LG4scixvKX1mdW5jdGlvbiBma24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztmb3Iodz10LmQsYT10LmIuaixnPW5ldyBHKHcpO2cuYTxnLmMuYy5sZW5ndGg7KWZvcihmPWwocmUoZyksMTA1KSxvPVdlKGloLHBnLDI4LGEuYy5sZW5ndGgsMTYsMSksa2koZS5iLGYsbyksbj1mLmEuZC5wLTEscj1mLmMuZC5wO24hPXI7KW49KG4rMSklYS5jLmxlbmd0aCxvW25dPSEwfWZ1bmN0aW9uIGRrbihlLHQpe2lmKHM3ZSgpLG5zKGUsKGZ0KCksS2kpKSYmbnModCxLaSkpcmV0dXJuIHJ1KGwoUShlLEtpKSwxNykuYSxsKFEodCxLaSksMTcpLmEpO3Rocm93IHVlKG5ldyBJOCgiVGhlIEJGIG1vZGVsIG9yZGVyIGxheWVyIGFzc2lnbmVyIHJlcXVpcmVzIGFsbCByZWFsIG5vZGVzIHRvIGhhdmUgYSBtb2RlbCBvcmRlci4iKSl9ZnVuY3Rpb24gZ2tuKGUsdCl7aWYoYTdlKCksbnMoZSwoZnQoKSxLaSkpJiZucyh0LEtpKSlyZXR1cm4gcnUobChRKGUsS2kpLDE3KS5hLGwoUSh0LEtpKSwxNykuYSk7dGhyb3cgdWUobmV3IEk4KCJUaGUgREYgbW9kZWwgb3JkZXIgbGF5ZXIgYXNzaWduZXIgcmVxdWlyZXMgYWxsIHJlYWwgbm9kZXMgdG8gaGF2ZSBhIG1vZGVsIG9yZGVyLiIpKX1mdW5jdGlvbiBwa24oZSx0KXtmb3IoZS5yPW5ldyB4TihlLnApLFooZS5yLGUpLEthKGUuci5qLGUuaiksQ2goZS5qKSx1aShlLmosdCksdWkoZS5yLmUsdCksd0goZSksd0goZS5yKTtlLmYuYy5sZW5ndGghPTA7KVRudChsKGp0KGUuZiwwKSwxMzIpKTtmb3IoO2Uuay5jLmxlbmd0aCE9MDspVG50KGwoanQoZS5rLDApLDEzMikpO3JldHVybiBlLnJ9ZnVuY3Rpb24gJHVlKGUsdCxuKXt2YXIgcixhLG87aWYoYT1NbihlLkRoKCksdCkscj10LWUuamkoKSxyPDApaWYoYSlpZihhLnJrKCkpbz1lLkloKGEpLG8+PTA/ZS5iaShvLG4pOiQ5ZShlLGEsbik7ZWxzZSB0aHJvdyB1ZShuZXcgWW4oT2IrYS54ZSgpK2tMKSk7ZWxzZSB0aHJvdyB1ZShuZXcgWW4oZjR0K3QrZDR0KSk7ZWxzZSB1ZihlLHIsYSxuKX1mdW5jdGlvbiBNcHQoZSl7dmFyIHQsbjtpZihlLmYpe2Zvcig7ZS5uPjA7KXtpZih0PWwoZS5rLlhiKGUubi0xKSw3Niksbj10LkxrKCksRGUobiwxMDIpJiZsKG4sMTkpLkJiJmV1JiYoIWUuZXx8bi5waygpIT1vQ3x8bi5MaigpIT0wKSYmdC5tZCgpIT1udWxsKXJldHVybiEwOy0tZS5ufXJldHVybiExfWVsc2UgcmV0dXJuIGUubj4wfWZ1bmN0aW9uIERwdChlKXt2YXIgdCxuLHIsYTtpZihuPWwoZSw1NCkuX2goKSxuKXRyeXtpZihyPW51bGwsdD1WRSgoaWIoKSxHZiksYm10KGE1bihuKSkpLHQmJihhPXQuYWkoKSxhJiYocj1hLkZsKG91bihuLmUpKSkpLHImJnIhPWUpcmV0dXJuIERwdChyKX1jYXRjaChvKXtpZihvPWJzKG8pLCFEZShvLDYzKSl0aHJvdyB1ZShvKX1yZXR1cm4gZX1mdW5jdGlvbiBia24oZSx0LG4pe3ZhciByLGEsbztuLlVnKCJSZW1vdmUgb3ZlcmxhcHMiLDEpLG4uZGgodCx5Q2UpLHI9bChhdCh0LChINSgpLFk2KSksMjcpLGUuZj1yLGUuYT1zdWUobChhdCh0LChTYigpLEZCKSksMzAwKSksYT1HZShhdCh0LChwaSgpLEV2KSkpLF9lKGUsKG5yKGEpLGEpKSxvPUh5KHIpLFJ2dChlLHQsbyxuKSxuLmRoKHQsT0cpfWZ1bmN0aW9uIG1rbihlKXt2YXIgdCxuLHI7aWYoUnQoQnQoYXQoZSwocGkoKSxLQikpKSkpe2ZvcihyPW5ldyBidCxuPW5ldyBocihkcihjcChlKS5hLktjKCksbmV3IGopKTtqcihuKTspdD1sKHhyKG4pLDc0KSxxdyh0KSYmUnQoQnQoYXQodCxPZ2UpKSkmJiRuKHIuYyx0KTtyZXR1cm4gcn1lbHNlIHJldHVybiBDbigpLENuKCksX299ZnVuY3Rpb24gSXB0KGUpe2lmKCFlKXJldHVybiBNSmUoKSxkNnQ7dmFyIHQ9ZS52YWx1ZU9mP2UudmFsdWVPZigpOmU7aWYodCE9PWUpe3ZhciBuPV8wZVt0eXBlb2YgdF07cmV0dXJuIG4/bih0KTpaN2UodHlwZW9mIHQpfWVsc2UgcmV0dXJuIGUgaW5zdGFuY2VvZiBBcnJheXx8ZSBpbnN0YW5jZW9mIGIuQXJyYXk/bmV3IFN6KGUpOm5ldyB3ayhlKX1mdW5jdGlvbiBPcHQoZSx0LG4pe3ZhciByLGEsbztzd2l0Y2gobz1lLm8scj1sKFFvKGUucCxuKSwyNTIpLGE9ci5pLGEuYj1uUChyKSxhLmE9dFAociksYS5iPWIuTWF0aC5tYXgoYS5iLG8uYSksYS5iPm8uYSYmIXQmJihhLmI9by5hKSxhLmM9LShhLmItby5hKS8yLG4uZyl7Y2FzZSAxOmEuZD0tYS5hO2JyZWFrO2Nhc2UgMzphLmQ9by5ifWhsZShyKSxmbGUocil9ZnVuY3Rpb24gTnB0KGUsdCxuKXt2YXIgcixhLG87c3dpdGNoKG89ZS5vLHI9bChRbyhlLnAsbiksMjUyKSxhPXIuaSxhLmI9blAociksYS5hPXRQKHIpLGEuYT1iLk1hdGgubWF4KGEuYSxvLmIpLGEuYT5vLmImJiF0JiYoYS5hPW8uYiksYS5kPS0oYS5hLW8uYikvMixuLmcpe2Nhc2UgNDphLmM9LWEuYjticmVhaztjYXNlIDI6YS5jPW8uYX1obGUociksZmxlKHIpfWZ1bmN0aW9uIHZrbihlLHQpe3ZhciBuLHIsYSxvLGY7aWYoIXQuZGMoKSl7aWYoYT1sKHQuWGIoMCksMTMxKSx0LmdjKCk9PTEpe2hidChlLGEsYSwxLDAsdCk7cmV0dXJufWZvcihuPTE7bjx0LmdjKCk7KShhLmp8fCFhLm8pJiYobz1UN24odCxuKSxvJiYocj1sKG8uYSwxNykuYSxmPWwoby5iLDEzMSksaGJ0KGUsYSxmLG4scix0KSxuPXIrMSxhPWYpKX19ZnVuY3Rpb24gd2tuKGUpe3ZhciB0LG4scixhLG8sZjtmb3IoZj1uZXcgT2woZS5kKSxWcyhmLG5ldyBpOCksdD0oT1UoKSxoZShsZSh1TGUsMSksaXQsMjc2LDAsW3cxZSxrMWUsdjFlLEMxZSx4MWUseTFlLFQxZSxFMWVdKSksbj0wLG89bmV3IEcoZik7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDEwNSkscj10W24ldC5sZW5ndGhdLHZFbihhLHIpLCsrbn1mdW5jdGlvbiB5a24oZSx0KXtoNigpO3ZhciBuLHIsYSxvO2lmKHQuYjwyKXJldHVybiExO2ZvcihvPVJyKHQsMCksbj1sKEJyKG8pLDgpLHI9bjtvLmIhPW8uZC5jOyl7aWYoYT1sKEJyKG8pLDgpLCEoZ0UoZSxyKSYmZ0UoZSxhKSkpcmV0dXJuITE7cj1hfXJldHVybiEhKGdFKGUscikmJmdFKGUsbikpfWZ1bmN0aW9uIGg5ZShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMO3JldHVybiBDPW51bGwsTD1lLGY9bnAoTCwieCIpLG49bmV3IFdYZSh0KSxKdm4obi5hLGYpLGc9bnAoTCwieSIpLHI9bmV3IFlYZSh0KSxadm4oci5hLGcpLHc9bnAoTCxVZmUpLGE9bmV3IFhYZSh0KSxld24oYS5hLHcpLEU9bnAoTCxWZmUpLG89bmV3IFFYZSh0KSxDPSh0d24oby5hLEUpLEUpLEN9ZnVuY3Rpb24genkoZSx0KXtWYnQoZSx0KSxlLmImMSYmKGUuYS5hPW51bGwpLGUuYiYyJiYoZS5hLmY9bnVsbCksZS5iJjQmJihlLmEuZz1udWxsLGUuYS5pPW51bGwpLGUuYiYxNiYmKGUuYS5kPW51bGwsZS5hLmU9bnVsbCksZS5iJjgmJihlLmEuYj1udWxsKSxlLmImMzImJihlLmEuaj1udWxsLGUuYS5jPW51bGwpfWZ1bmN0aW9uIHhrbihlLHQpe3ZhciBuLHIsYTtpZihhPTAsdC5sZW5ndGg+MCl0cnl7YT1PaCh0LGxvLElpKX1jYXRjaChvKXt0aHJvdyBvPWJzKG8pLERlKG8sMTMwKT8ocj1vLHVlKG5ldyBuVihyKSkpOnVlKG8pfXJldHVybiBuPSghZS5hJiYoZS5hPW5ldyBQaWUoZSkpLGUuYSksYTxuLmkmJmE+PTA/bChPZShuLGEpLDU4KTpudWxsfWZ1bmN0aW9uIGtrbihlLHQpe2lmKGU8MClyZXR1cm4gS0EoU3d0LGhlKGxlKHdhLDEpLFJuLDEsNSxbImluZGV4IixwdChlKV0pKTtpZih0PDApdGhyb3cgdWUobmV3IFluKF93dCt0KSk7cmV0dXJuIEtBKCIlcyAoJXMpIG11c3QgYmUgbGVzcyB0aGFuIHNpemUgKCVzKSIsaGUobGUod2EsMSksUm4sMSw1LFsiaW5kZXgiLHB0KGUpLHB0KHQpXSkpfWZ1bmN0aW9uIEVrbihlKXt2YXIgdCxuLHIsYSxvO2lmKGU9PW51bGwpcmV0dXJuIHVsO2ZvcihvPW5ldyBIbShDbywiWyIsIl0iKSxuPWUscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0sby5hP2hpKG8uYSxvLmIpOm8uYT1uZXcgVGgoby5kKSxOXyhvLmEsIiIrdCk7cmV0dXJuIG8uYT9vLmUubGVuZ3RoPT0wP28uYS5hOm8uYS5hKygiIitvLmUpOm8uY31mdW5jdGlvbiBUa24oZSl7dmFyIHQsbixyLGEsbztpZihlPT1udWxsKXJldHVybiB1bDtmb3Iobz1uZXcgSG0oQ28sIlsiLCJdIiksbj1lLHI9MCxhPW4ubGVuZ3RoO3I8YTsrK3IpdD1uW3JdLG8uYT9oaShvLmEsby5iKTpvLmE9bmV3IFRoKG8uZCksTl8oby5hLCIiK3QpO3JldHVybiBvLmE/by5lLmxlbmd0aD09MD9vLmEuYTpvLmEuYSsoIiIrby5lKTpvLmN9ZnVuY3Rpb24gQ2tuKGUpe3ZhciB0LG4scixhLG87aWYoZT09bnVsbClyZXR1cm4gdWw7Zm9yKG89bmV3IEhtKENvLCJbIiwiXSIpLG49ZSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKXQ9bltyXSxvLmE/aGkoby5hLG8uYik6by5hPW5ldyBUaChvLmQpLE5fKG8uYSwiIit0KTtyZXR1cm4gby5hP28uZS5sZW5ndGg9PTA/by5hLmE6by5hLmErKCIiK28uZSk6by5jfWZ1bmN0aW9uIFNrbihlKXt2YXIgdCxuLHIsYSxvO2lmKGU9PW51bGwpcmV0dXJuIHVsO2ZvcihvPW5ldyBIbShDbywiWyIsIl0iKSxuPWUscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0sby5hP2hpKG8uYSxvLmIpOm8uYT1uZXcgVGgoby5kKSxOXyhvLmEsIiIrdCk7cmV0dXJuIG8uYT9vLmUubGVuZ3RoPT0wP28uYS5hOm8uYS5hKygiIitvLmUpOm8uY31mdW5jdGlvbiBQcHQoZSx0KXt2YXIgbixyLGEsbyxmLGc7Zm9yKG49ZS5iLmMubGVuZ3RoLGE9anQoZS5iLHQpO3QqMisxPG4mJihyPShvPTIqdCsxLGY9bysxLGc9byxmPG4mJmUuYS5OZShqdChlLmIsZiksanQoZS5iLG8pKTwwJiYoZz1mKSxnKSwhKGUuYS5OZShhLGp0KGUuYixyKSk8MCkpOylyZihlLmIsdCxqdChlLmIscikpLHQ9cjtyZihlLmIsdCxhKX1mdW5jdGlvbiB6dWUoZSx0LG4pe3ZhciByLGE7cmV0dXJuIHI9bi5kLGE9bi5lLGUuZ1tyLmRdPD1lLmlbdC5kXSYmZS5pW3QuZF08PWUuaVtyLmRdJiZlLmdbYS5kXTw9ZS5pW3QuZF0mJmUuaVt0LmRdPD1lLmlbYS5kXT8hKGUuaVtyLmRdPGUuaVthLmRdKTplLmlbci5kXTxlLmlbYS5kXX1mdW5jdGlvbiBfa24oZSx0KXt2YXIgbjtpZihuPWwoUSh0LChOdCgpLEpMKSksMzIyKSxuIT1lKXRocm93IHVlKG5ldyBJOCgiVGhlIGhpZXJhcmNoeSBhd2FyZSBwcm9jZXNzb3IgIituKyIgaW4gY2hpbGQgbm9kZSAiK3QrIiBpcyBvbmx5IGFsbG93ZWQgaWYgdGhlIHJvb3Qgbm9kZSBzcGVjaWZpZXMgdGhlIHNhbWUgaGllcmFyY2hpY2FsIHByb2Nlc3Nvci4iKSl9ZnVuY3Rpb24gQWtuKGUsdCl7dmFyIG4scixhLG8sZjtmb3Iocj0oIXQucyYmKHQucz1uZXcgbnQoZGwsdCwyMSwxNykpLHQucyksbz1udWxsLGE9MCxmPXIuaTthPGY7KythKXN3aXRjaChuPWwoT2UocixhKSwxNzkpLGt3KGljKGUsbikpKXtjYXNlIDI6Y2FzZSAzOiFvJiYobz1uZXcgYnQpLCRuKG8uYyxuKX1yZXR1cm4gb3x8KENuKCksQ24oKSxfbyl9ZnVuY3Rpb24gQnB0KGUsdCxuKXt2YXIgcixhLG8sZixnLHc7Zm9yKHc9Z3Msbz1uZXcgRyhlYnQoZS5iKSk7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSwxNzcpLGc9bmV3IEcoZWJ0KHQuYikpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxNzcpLHI9UTNuKGEuYSxhLmIsZi5hLGYuYixuKSx3PWIuTWF0aC5taW4odyxyKTtyZXR1cm4gd31mdW5jdGlvbiBsYShlLHQpe2lmKCF0KXRocm93IHVlKG5ldyBTOCk7aWYoZS5qPXQsIWUuZClzd2l0Y2goZS5qLmcpe2Nhc2UgMTplLmEuYT1lLm8uYS8yLGUuYS5iPTA7YnJlYWs7Y2FzZSAyOmUuYS5hPWUuby5hLGUuYS5iPWUuby5iLzI7YnJlYWs7Y2FzZSAzOmUuYS5hPWUuby5hLzIsZS5hLmI9ZS5vLmI7YnJlYWs7Y2FzZSA0OmUuYS5hPTAsZS5hLmI9ZS5vLmIvMn19ZnVuY3Rpb24gTGtuKGUsdCl7dmFyIG4scixhO3JldHVybiBEZSh0LmcsMTApJiZsKHQuZywxMCkuaz09KFpuKCksVXMpP2dzOihhPWl4KHQpLGE/Yi5NYXRoLm1heCgwLGUuYi8yLS41KToobj1HNSh0KSxuPyhyPXplKEdlKFB5KG4sKE50KCksbTMpKSkpLGIuTWF0aC5tYXgoMCxyLzItLjUpKTpncykpfWZ1bmN0aW9uIE1rbihlLHQpe3ZhciBuLHIsYTtyZXR1cm4gRGUodC5nLDEwKSYmbCh0LmcsMTApLms9PShabigpLFVzKT9nczooYT1peCh0KSxhP2IuTWF0aC5tYXgoMCxlLmIvMi0uNSk6KG49RzUodCksbj8ocj16ZShHZShQeShuLChOdCgpLG0zKSkpKSxiLk1hdGgubWF4KDAsci8yLS41KSk6Z3MpKX1mdW5jdGlvbiBEa24oZSx0KXt1MCgpO3ZhciBuLHIsYSxvLGYsZztmb3Iobj1udWxsLGY9dC5LYygpO2YuT2IoKTspbz1sKGYuUGIoKSwxMzEpLCFvLm8mJihyPWhobihvLmEpLGE9bWRuKG8uYSksZz1uZXcgUUEocixhLG51bGwsbChvLmQuYS5lYygpLktjKCkuUGIoKSwxOCkpLHZ0KGcuYyxvLmEpLCRuKGUuYyxnKSxuJiZ2dChuLmQsZyksbj1nKX1mdW5jdGlvbiBJa24oZSl7dmFyIHQsbixyLGEsbyxmO2ZvcihmPVRBKGUuZCxlLmUpLG89Zi5LYygpO28uT2IoKTspZm9yKGE9bChvLlBiKCksMTIpLHI9ZS5lPT0oQ3QoKSxlcik/YS5lOmEuZyxuPW5ldyBHKHIpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxOCksIURvKHQpJiZ0LmMuaS5jIT10LmQuaS5jJiYoSTluKGUsdCksKytlLmYsKytlLmMpfWZ1bmN0aW9uIEZwdChlLHQpe3ZhciBuLHI7aWYodC5kYygpKXJldHVybiBDbigpLENuKCksX287Zm9yKHI9bmV3IGJ0LHZ0KHIscHQobG8pKSxuPTE7bjxlLmY7KytuKWUuYT09bnVsbCYmSGJ0KGUpLGUuYVtuXSYmdnQocixwdChuKSk7cmV0dXJuIHIuYy5sZW5ndGg9PTE/KENuKCksQ24oKSxfbyk6KHZ0KHIscHQoSWkpKSxxQW4odCxyKSl9ZnVuY3Rpb24gT2tuKGUsdCl7dmFyIG4scixhLG8sZixnLHc7Zj10LmMuaS5rIT0oWm4oKSxQcyksdz1mP3QuZDp0LmMsbj1xN24odCx3KS5pLGE9bChjcihlLmssdyksMTI1KSxyPWUuaVtuLnBdLmEsbml0KHcuaSk8KG4uYz9nYyhuLmMuYSxuLDApOi0xKT8obz1hLGc9cik6KG89cixnPWEpLHAwKHMwKGkwKGEwKHIwKG5ldyBfZiwwKSw0KSxvKSxnKSl9ZnVuY3Rpb24gTmtuKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYobilmb3IoYT1uLmEubGVuZ3RoLHI9bmV3IERtKGEpLGc9KHIuYi1yLmEpKnIuYzwwPyhzYigpLHRtKTpuZXcgY2Iocik7Zy5PYigpOylmPWwoZy5QYigpLDE3KSx3PXB1ZShlLHh4KF95KG4sZi5hKSkpLHcmJihvPSghdC5iJiYodC5iPW5ldyBMbihfcix0LDQsNykpLHQuYikscXIobyx3KSl9ZnVuY3Rpb24gUGtuKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYobilmb3IoYT1uLmEubGVuZ3RoLHI9bmV3IERtKGEpLGc9KHIuYi1yLmEpKnIuYzwwPyhzYigpLHRtKTpuZXcgY2Iocik7Zy5PYigpOylmPWwoZy5QYigpLDE3KSx3PXB1ZShlLHh4KF95KG4sZi5hKSkpLHcmJihvPSghdC5jJiYodC5jPW5ldyBMbihfcix0LDUsOCkpLHQuYykscXIobyx3KSl9ZnVuY3Rpb24gZVAoZSx0LG4pe3ZhciByLGE7cj10LmEmZS5mLHQuYj1lLmJbcl0sZS5iW3JdPXQsYT10LmYmZS5mLHQuZD1lLmNbYV0sZS5jW2FdPXQsbj8odC5lPW4uZSx0LmU/dC5lLmM9dDplLmE9dCx0LmM9bi5jLHQuYz90LmMuZT10OmUuZT10KToodC5lPWUuZSx0LmM9bnVsbCxlLmU/ZS5lLmM9dDplLmE9dCxlLmU9dCksKytlLmksKytlLmd9ZnVuY3Rpb24gUnB0KGUpe3ZhciB0LG4scjtpZih0PWUuUGIoKSwhZS5PYigpKXJldHVybiB0O2ZvcihyPXd1KGhpKG5ldyB0YiwiZXhwZWN0ZWQgb25lIGVsZW1lbnQgYnV0IHdhczogPCIpLHQpLG49MDtuPDQmJmUuT2IoKTtuKyspd3UoKHIuYSs9Q28sciksZS5QYigpKTt0aHJvdyBlLk9iKCkmJihyLmErPSIsIC4uLiIpLHIuYSs9Ij4iLHVlKG5ldyBZbihyLmEpKX1mdW5jdGlvbiBCa24oZSl7dmFyIHQsbjtyZXR1cm4gbj0tZS5hLHQ9aGUobGUoa2YsMSksQWQsMjgsMTUsWzQzLDQ4LDQ4LDQ4LDQ4XSksbjwwJiYodFswXT00NSxuPS1uKSx0WzFdPXRbMV0rKChuLzYwfDApLzEwfDApJlpzLHRbMl09dFsyXSsobi82MHwwKSUxMCZacyx0WzNdPXRbM10rKG4lNjAvMTB8MCkmWnMsdFs0XT10WzRdK24lMTAmWnMsSWYodCwwLHQubGVuZ3RoKX1mdW5jdGlvbiBmOWUoZSl7dmFyIHQsbixyLGE7Zm9yKGUuZz1uZXcgTEEobChYcihPbyksMjk3KSkscj0wLG49KEN0KCksUW4pLHQ9MDt0PGUuai5jLmxlbmd0aDt0KyspYT1sKGp0KGUuaix0KSwxMiksYS5qIT1uJiYociE9dCYmUTgoZS5nLG4sbmV3IGNhKHB0KHIpLHB0KHQpKSksbj1hLmoscj10KTtROChlLmcsbixuZXcgY2EocHQocikscHQodCkpKX1mdW5jdGlvbiBGa24oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKHI9MCxuPW5ldyBHKGUuYik7bi5hPG4uYy5jLmxlbmd0aDspZm9yKHQ9bChyZShuKSwzMCksbz1uZXcgRyh0LmEpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihhPWwocmUobyksMTApLGEucD1yKyssZz1uZXcgRyhhLmopO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxMiksZi5wPXIrK31mdW5jdGlvbiBkOWUoZSx0KXt2YXIgbixyLGE7aWYoYT1nNigoRWwoKSxpbyksZS5EaCgpLHQpLGEpRm8oKSxsKGEsNjkpLnhrKCl8fChhPXJ4KGljKGlvLGEpKSkscj0obj1lLkloKGEpLGwobj49MD9lLkxoKG4sITAsITApOkh3KGUsYSwhMCksMTYwKSksbChyLDIyMCkuWmwodCk7ZWxzZSB0aHJvdyB1ZShuZXcgWW4oT2IrdC54ZSgpK2tMKSl9ZnVuY3Rpb24gZzllKGUpe3ZhciB0LG47cmV0dXJuIGU+LTB4ODAwMDAwMDAwMDAwJiZlPDB4ODAwMDAwMDAwMDAwP2U9PTA/MDoodD1lPDAsdCYmKGU9LWUpLG49dWEoYi5NYXRoLmZsb29yKGIuTWF0aC5sb2coZSkvLjY5MzE0NzE4MDU1OTk0NTMpKSwoIXR8fGUhPWIuTWF0aC5wb3coMixuKSkmJisrbixuKTpRZnQoWmMoZSkpfWZ1bmN0aW9uIFJrbihlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3Iobz1uZXcgYmQsbj1uZXcgRyhlKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTMyKSxmPXQuYSxnPXQuYiwhKG8uYS5fYihmKXx8by5hLl9iKGcpKSYmKGE9ZixyPWcsZi5lLmIrZi5qLmI+MiYmZy5lLmIrZy5qLmI8PTImJihhPWcscj1mKSxvLmEuemMoYSxvKSxhLnE9cik7cmV0dXJuIG99ZnVuY3Rpb24gamtuKGUsdCxuKXtuLlVnKCJFYWRlcyByYWRpYWwiLDEpLG4uZGgodCxPRyksZS5kPWwoYXQodCwoSDUoKSxZNikpLDI3KSxlLmM9emUoR2UoYXQodCwoU2IoKSxIVykpKSksZS5lPXN1ZShsKGF0KHQsRkIpLDMwMCkpLGUuYT1nNW4obChhdCh0LGpJZSksNDM0KSksZS5iPU44bihsKGF0KHQsUEllKSwzNTQpKSxiOG4oZSksbi5kaCh0LE9HKX1mdW5jdGlvbiAka24oZSx0KXtpZih0LlVnKCJUYXJnZXQgV2lkdGggU2V0dGVyIiwxKSxQMShlLCh6MSgpLGZnZSkpKUhpKGUsKHVnKCksVDQpLEdlKGF0KGUsZmdlKSkpO2Vsc2UgdGhyb3cgdWUobmV3IFZwKCJBIHRhcmdldCB3aWR0aCBoYXMgdG8gYmUgc2V0IGlmIHRoZSBUYXJnZXRXaWR0aFdpZHRoQXBwcm94aW1hdG9yIHNob3VsZCBiZSB1c2VkLiIpKTt0LlZnKCl9ZnVuY3Rpb24ganB0KGUsdCl7dmFyIG4scixhO3JldHVybiByPW5ldyBvcChlKSxwYyhyLHQpLHJ0KHIsKGZ0KCksYVcpLHQpLHJ0KHIsKE50KCksTXMpLChSYSgpLE11KSkscnQocixSZCwob2coKSx0WSkpLHgociwoWm4oKSxVcykpLG49bmV3IGd1LE1jKG4sciksbGEobiwoQ3QoKSxlcikpLGE9bmV3IGd1LE1jKGEsciksbGEoYSxhcikscn1mdW5jdGlvbiAkcHQoZSl7c3dpdGNoKGUuZyl7Y2FzZSAwOnJldHVybiBuZXcgV2llKChJdygpLERCKSk7Y2FzZSAxOnJldHVybiBuZXcgUXJlO2Nhc2UgMjpyZXR1cm4gbmV3IEpyZTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbigiTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgY3Jvc3NpbmcgbWluaW1pemVyICIrKGUuZiE9bnVsbD9lLmY6IiIrZS5nKSkpfX1mdW5jdGlvbiB6cHQoZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihlLmNbdC5wXT0hMCx2dChlLmEsdCksZj1uZXcgRyh0LmopO2YuYTxmLmMuYy5sZW5ndGg7KWZvcihvPWwocmUoZiksMTIpLHI9bmV3IE4xKG8uYik7TGMoci5hKXx8TGMoci5iKTspbj1sKExjKHIuYSk/cmUoci5hKTpyZShyLmIpLDE4KSxhPSQ1bihvLG4pLmksZS5jW2EucF18fHpwdChlLGEpfWZ1bmN0aW9uIHFwdChlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3IoZj0wLG49bmV3IG9yKCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSk7bi5lIT1uLmkuZ2MoKTspdD1sKGdyKG4pLDI3KSxnPXQuZyxhPXQuZixyPWIuTWF0aC5zcXJ0KGcqZythKmEpLGY9Yi5NYXRoLm1heChyLGYpLG89cXB0KHQpLGY9Yi5NYXRoLm1heChvLGYpO3JldHVybiBmfWZ1bmN0aW9uIFJsKCl7Umw9VSxZYj1uZXcgRF8oIk9VVFNJREUiLDApLHZwPW5ldyBEXygiSU5TSURFIiwxKSxuRj1uZXcgRF8oIk5FWFRfVE9fUE9SVF9JRl9QT1NTSUJMRSIsMiksUE09bmV3IERfKCJBTFdBWVNfU0FNRV9TSURFIiwzKSxOTT1uZXcgRF8oIkFMV0FZU19PVEhFUl9TQU1FX1NJREUiLDQpLGE5PW5ldyBEXygiU1BBQ0VfRUZGSUNJRU5UIiw1KX1mdW5jdGlvbiBIcHQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdztyZXR1cm4gcj1IYm4oZSwoYT0ocmIoKSxvPW5ldyBhXyxvKSxuJiZMVShhLG4pLGEpLHQpLGZFKHIsWWcodCxQZCkpLG1VKHQsciksZVRuKHQsciksaDllKHQsciksZj10LGc9QXcoZiwicG9ydHMiKSx3PW5ldyBTdHQoZSxyKSxSVG4ody5hLHcuYixnKSx3Y2UoZSx0LHIpLEczbihlLHQscikscn1mdW5jdGlvbiB6a24oZSl7dmFyIHQsbjtyZXR1cm4gbj0tZS5hLHQ9aGUobGUoa2YsMSksQWQsMjgsMTUsWzQzLDQ4LDQ4LDU4LDQ4LDQ4XSksbjwwJiYodFswXT00NSxuPS1uKSx0WzFdPXRbMV0rKChuLzYwfDApLzEwfDApJlpzLHRbMl09dFsyXSsobi82MHwwKSUxMCZacyx0WzRdPXRbNF0rKG4lNjAvMTB8MCkmWnMsdFs1XT10WzVdK24lMTAmWnMsSWYodCwwLHQubGVuZ3RoKX1mdW5jdGlvbiBxa24oZSl7dmFyIHQ7cmV0dXJuIHQ9aGUobGUoa2YsMSksQWQsMjgsMTUsWzcxLDc3LDg0LDQ1LDQ4LDQ4LDU4LDQ4LDQ4XSksZTw9MCYmKHRbM109NDMsZT0tZSksdFs0XT10WzRdKygoZS82MHwwKS8xMHwwKSZacyx0WzVdPXRbNV0rKGUvNjB8MCklMTAmWnMsdFs3XT10WzddKyhlJTYwLzEwfDApJlpzLHRbOF09dFs4XStlJTEwJlpzLElmKHQsMCx0Lmxlbmd0aCl9ZnVuY3Rpb24gSGtuKGUpe3ZhciB0LG4scixhLG87aWYoZT09bnVsbClyZXR1cm4gdWw7Zm9yKG89bmV3IEhtKENvLCJbIiwiXSIpLG49ZSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKXQ9bltyXSxvLmE/aGkoby5hLG8uYik6by5hPW5ldyBUaChvLmQpLE5fKG8uYSwiIitZXyh0KSk7cmV0dXJuIG8uYT9vLmUubGVuZ3RoPT0wP28uYS5hOm8uYS5hKygiIitvLmUpOm8uY31mdW5jdGlvbiBwOWUoZSx0KXt2YXIgbixyLGE7Zm9yKGE9SWkscj1uZXcgRyhaNSh0KSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDIxOCksbi5mJiYhZS5jW24uY10mJihlLmNbbi5jXT0hMCxhPWIuTWF0aC5taW4oYSxwOWUoZSxIVihuLHQpKSkpO3JldHVybiBlLmlbdC5kXT1lLmosZS5nW3QuZF09Yi5NYXRoLm1pbihhLGUuaisrKSxlLmdbdC5kXX1mdW5jdGlvbiBWcHQoZSx0KXt2YXIgbixyLGE7Zm9yKGE9bChsKCRpKGUucix0KSwyMSksODcpLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDExNyksci5lLmI9KG49ci5iLG4ucGYoKHBpKCkscmgpKT9uLmFnKCk9PShDdCgpLFFuKT8tbi5NZigpLmItemUoR2Uobi5vZihyaCkpKTp6ZShHZShuLm9mKHJoKSkpOm4uYWcoKT09KEN0KCksUW4pPy1uLk1mKCkuYjowKX1mdW5jdGlvbiBWa24oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKG49ZHllKGUuZSksbz1tZCh6XyhKYShmeWUoZS5lKSksZS5kKmUuYSxlLmMqZS5iKSwtLjUpLHQ9bi5hLW8uYSxhPW4uYi1vLmIsZz0wO2c8ZS5jO2crKyl7Zm9yKHI9dCxmPTA7ZjxlLmQ7ZisrKWk1bihlLmUsbmV3IGVmKHIsYSxlLmEsZS5iKSkmJkZVKGUsZixnLCExLCEwKSxyKz1lLmE7YSs9ZS5ifX1mdW5jdGlvbiBiOWUoZSl7dmFyIHQsbixyLGEsbzt0PWUuYSxuPWUuYixhPWUuYyxyPW5ldyBsdChuLmUuYStuLmYuYS8yLG4uZS5iK24uZi5iLzIpLG89bmV3IGx0KGEuZS5hK2EuZi5hLzIsYS5lLmIrYS5mLmIvMiksQ3ModCxyLHQuYSx0LmEuYSksQ3ModCxvLHQuYy5iLHQuYyksZXB0KHIsbChmZih0LDEpLDgpLGUuYi5mKSxlcHQobyxsKGZmKHQsdC5iLTIpLDgpLGUuYy5mKX1mdW5jdGlvbiB4eChlKXt2YXIgdCxuO2lmKG49ITEsRGUoZSwyMTEpKXJldHVybiBuPSEwLGwoZSwyMTEpLmE7aWYoIW4mJkRlKGUsMjYzKSYmKHQ9bChlLDI2MykuYSUxPT0wLHQpKXJldHVybiBuPSEwLHB0KF9sbihsKGUsMjYzKS5hKSk7dGhyb3cgdWUobmV3IGRkKCJJZCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIGludGVnZXI6ICciK2UrIicuIikpfWZ1bmN0aW9uIFVrbihlLHQpe3ZhciBuLHIsYSxvLGYsZztmb3Iobz1udWxsLGE9bmV3IElzdCgoIWUuYSYmKGUuYT1uZXcgUGllKGUpKSxlLmEpKTt4OWUoYSk7KWlmKG49bChDVShhKSw1OCkscj0oZj1uLkRoKCksZz0oZDYoZiksZi5vKSwhZ3x8IW4uWGgoZyk/bnVsbDp1NGUoZ2NlKGcpLG4uTWgoZykpKSxyIT1udWxsJiZ2bihyLHQpKXtvPW47YnJlYWt9cmV0dXJuIG99ZnVuY3Rpb24gVXB0KGUsdCxuKXt2YXIgcixhLG8sZixnO2lmKE1oKG4sIm9jY3VycmVuY2VzIiksbj09MClyZXR1cm4gZz1sKE95KGV4KGUuYSksdCksMTYpLGc/Zy5nYygpOjA7aWYoZj1sKE95KGV4KGUuYSksdCksMTYpLCFmKXJldHVybiAwO2lmKG89Zi5nYygpLG4+PW8pZi4kYigpO2Vsc2UgZm9yKGE9Zi5LYygpLHI9MDtyPG47cisrKWEuUGIoKSxhLlFiKCk7cmV0dXJuIG99ZnVuY3Rpb24gR2tuKGUsdCxuKXt2YXIgcixhLG8sZjtyZXR1cm4gTWgobiwib2xkQ291bnQiKSxNaCgwLCJuZXdDb3VudCIpLHI9bChPeShleChlLmEpLHQpLDE2KSwocj9yLmdjKCk6MCk9PW4/KE1oKDAsImNvdW50IiksYT0obz1sKE95KGV4KGUuYSksdCksMTYpLG8/by5nYygpOjApLGY9LWEsZj4wP1p3ZSgpOmY8MCYmVXB0KGUsdCwtZiksITApOiExfWZ1bmN0aW9uIHRQKGUpe3ZhciB0LG4scixhLG8sZixnO2lmKGc9MCxlLmI9PTApe2ZvcihmPV9kdChlLCEwKSx0PTAscj1mLGE9MCxvPXIubGVuZ3RoO2E8bzsrK2Epbj1yW2FdLG4+MCYmKGcrPW4sKyt0KTt0PjEmJihnKz1lLmMqKHQtMSkpfWVsc2UgZz1xSmUoY2NlKHh5KEZpKGM1ZShlLmEpLG5ldyBqYSksbmV3IE91KSkpO3JldHVybiBnPjA/ZytlLm4uZCtlLm4uYTowfWZ1bmN0aW9uIG5QKGUpe3ZhciB0LG4scixhLG8sZixnO2lmKGc9MCxlLmI9PTApZz1xSmUoY2NlKHh5KEZpKGM1ZShlLmEpLG5ldyBYYyksbmV3IEJjKSkpO2Vsc2V7Zm9yKGY9QWR0KGUsITApLHQ9MCxyPWYsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sbj4wJiYoZys9biwrK3QpO3Q+MSYmKGcrPWUuYyoodC0xKSl9cmV0dXJuIGc+MD9nK2Uubi5iK2Uubi5jOjB9ZnVuY3Rpb24gS2tuKGUpe3ZhciB0LG47aWYoZS5jLmxlbmd0aCE9Mil0aHJvdyB1ZShuZXcgbmMoIk9yZGVyIG9ubHkgYWxsb3dlZCBmb3IgdHdvIHBhdGhzLiIpKTt0PShTbigwLGUuYy5sZW5ndGgpLGwoZS5jWzBdLDE4KSksbj0oU24oMSxlLmMubGVuZ3RoKSxsKGUuY1sxXSwxOCkpLHQuZC5pIT1uLmMuaSYmKGUuYy5sZW5ndGg9MCwkbihlLmMsbiksJG4oZS5jLHQpKX1mdW5jdGlvbiBHcHQoZSx0LG4pe3ZhciByO2ZvcihGNShuLHQuZyx0LmYpLFFoKG4sdC5pLHQuaikscj0wO3I8KCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpLmk7cisrKUdwdChlLGwoT2UoKCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpLHIpLDI3KSxsKE9lKCghbi5hJiYobi5hPW5ldyBudChBaSxuLDEwLDExKSksbi5hKSxyKSwyNykpfWZ1bmN0aW9uIFdrbihlLHQpe3ZhciBuLHIsYSxvO2ZvcihvPWwoUW8oZS5iLHQpLDEyNyksbj1vLmEsYT1sKGwoJGkoZS5yLHQpLDIxKSw4NykuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTE3KSxyLmMmJihuLmE9Yi5NYXRoLm1heChuLmEsajRlKHIuYykpKTtpZihuLmE+MClzd2l0Y2godC5nKXtjYXNlIDI6by5uLmM9ZS5zO2JyZWFrO2Nhc2UgNDpvLm4uYj1lLnN9fWZ1bmN0aW9uIFlrbihlLHQpe3ZhciBuLHIsYTtyZXR1cm4gbj1sKFEodCwoYjAoKSxxeCkpLDE3KS5hLWwoUShlLHF4KSwxNykuYSxuPT0wPyhyPW1hKEphKGwoUShlLChiYigpLGhCKSksOCkpLGwoUShlLCRMKSw4KSksYT1tYShKYShsKFEodCxoQiksOCkpLGwoUSh0LCRMKSw4KSksWWkoci5hKnIuYixhLmEqYS5iKSk6bn1mdW5jdGlvbiBYa24oZSx0KXt2YXIgbixyLGE7cmV0dXJuIG49bChRKHQsKEhjKCksUlcpKSwxNykuYS1sKFEoZSxSVyksMTcpLmEsbj09MD8ocj1tYShKYShsKFEoZSwoUWkoKSxOQikpLDgpKSxsKFEoZSxRVCksOCkpLGE9bWEoSmEobChRKHQsTkIpLDgpKSxsKFEodCxRVCksOCkpLFlpKHIuYSpyLmIsYS5hKmEuYikpOm59ZnVuY3Rpb24gS3B0KGUpe3ZhciB0LG47cmV0dXJuIG49bmV3IHRiLG4uYSs9ImVfIix0PUgzbihlKSx0IT1udWxsJiYobi5hKz0iIit0KSxlLmMmJmUuZCYmKGhpKChuLmErPSIgIixuKSxmVShlLmMpKSxoaSh3dSgobi5hKz0iWyIsbiksZS5jLmkpLCJdIiksaGkoKG4uYSs9UGhlLG4pLGZVKGUuZCkpLGhpKHd1KChuLmErPSJbIixuKSxlLmQuaSksIl0iKSksbi5hfWZ1bmN0aW9uIFdwdChlKXtzd2l0Y2goZS5nKXtjYXNlIDA6cmV0dXJuIG5ldyBhaWU7Y2FzZSAxOnJldHVybiBuZXcgZGs7Y2FzZSAyOnJldHVybiBuZXcgc2llO2Nhc2UgMzpyZXR1cm4gbmV3IGlpZTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbigiTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbGF5b3V0IHBoYXNlICIrKGUuZiE9bnVsbD9lLmY6IiIrZS5nKSkpfX1mdW5jdGlvbiBtOWUoZSx0LG4scixhKXt2YXIgbztzd2l0Y2gobz0wLGEuZyl7Y2FzZSAxOm89Yi5NYXRoLm1heCgwLHQuYitlLmItKG4uYityKSk7YnJlYWs7Y2FzZSAzOm89Yi5NYXRoLm1heCgwLC1lLmItcik7YnJlYWs7Y2FzZSAyOm89Yi5NYXRoLm1heCgwLC1lLmEtcik7YnJlYWs7Y2FzZSA0Om89Yi5NYXRoLm1heCgwLHQuYStlLmEtKG4uYStyKSl9cmV0dXJuIG99ZnVuY3Rpb24gUWtuKGUsdCxuKXt2YXIgcixhLG8sZixnO2lmKG4pZm9yKGE9bi5hLmxlbmd0aCxyPW5ldyBEbShhKSxnPShyLmItci5hKSpyLmM8MD8oc2IoKSx0bSk6bmV3IGNiKHIpO2cuT2IoKTspZj1sKGcuUGIoKSwxNyksbz1KayhuLGYuYSksaFNlIGluIG8uYXx8WWZlIGluIG8uYT9oX24oZSxvLHQpOk1JbihlLG8sdCksTGhuKGwoY3IoZS5iLE5FKG8pKSw3NCkpfWZ1bmN0aW9uIHY5ZShlKXt2YXIgdCxuO3N3aXRjaChlLmIpe2Nhc2UtMTpyZXR1cm4hMDtjYXNlIDA6cmV0dXJuIG49ZS50LG4+MXx8bj09LTE/KGUuYj0tMSwhMCk6KHQ9T2YoZSksdCYmKEZvKCksdC5saygpPT1nNXQpPyhlLmI9LTEsITApOihlLmI9MSwhMSkpO2RlZmF1bHQ6Y2FzZSAxOnJldHVybiExfX1mdW5jdGlvbiB3OWUoZSx0KXt2YXIgbixyLGEsbztpZihMaShlKSxlLmMhPTB8fGUuYSE9MTIzKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxCNHQpKSkpO2lmKG89dD09MTEyLHI9ZS5kLG49TmsoZS5pLDEyNSxyKSxuPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLEY0dCkpKSk7cmV0dXJuIGE9dGYoZS5pLHIsbiksZS5kPW4rMSx2bHQoYSxvLChlLmUmNTEyKT09NTEyKX1mdW5jdGlvbiBZcHQoZSl7dmFyIHQsbixyLGEsbyxmLGc7aWYocj1lLmEuYy5sZW5ndGgscj4wKWZvcihmPWUuYy5kLGc9ZS5kLmQsYT1tZChtYShuZXcgbHQoZy5hLGcuYiksZiksMS8ocisxKSksbz1uZXcgbHQoZi5hLGYuYiksbj1uZXcgRyhlLmEpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwyNTApLHQuZC5hPW8uYSthLmEsdC5kLmI9by5iK2EuYixPaShvLGEpfWZ1bmN0aW9uIEprbihlLHQpe3ZhciBuLHIsYTtpZighdCllY2UoZSxudWxsKSxsRShlLG51bGwpO2Vsc2UgaWYodC5pJjQpZm9yKHI9IltdIixuPXQuYzs7bj1uLmMpe2lmKCEobi5pJjQpKXthPVF3ZSgoR2cobiksbi5vK3IpKSxlY2UoZSxhKSxsRShlLGEpO2JyZWFrfXIrPSJbXSJ9ZWxzZSBhPVF3ZSgoR2codCksdC5vKSksZWNlKGUsYSksbEUoZSxhKTtlLmhsKHQpfWZ1bmN0aW9uIHpBKGUsdCxuLHIsYSl7dmFyIG8sZixnLHc7cmV0dXJuIHc9Y2FlKGUsbChhLDU4KSkscWUodykhPT1xZShhKT8oZz1sKGUuZ1tuXSw3Niksbz1zZyh0LHcpLFJfKGUsbixBdWUoZSxuLG8pKSxoaChlLmUpJiYoZj1kYihlLDksby5MaygpLGEsdyxyLCExKSxNeGUoZixuZXcgWmcoZS5lLDksZS5jLGcsbyxyLCExKSkscW9lKGYpKSx3KTphfWZ1bmN0aW9uIFprbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3O2ZvcihyPWwoJGkoZS5jLHQpLDE1KSxhPWwoJGkoZS5jLG4pLDE1KSxvPXIuZmQoci5nYygpKSxmPWEuZmQoYS5nYygpKTtvLlNiKCkmJmYuU2IoKTspaWYoZz1sKG8uVWIoKSwxNyksdz1sKGYuVWIoKSwxNyksZyE9dylyZXR1cm4gcnUoZy5hLHcuYSk7cmV0dXJuIW8uT2IoKSYmIWYuT2IoKT8wOm8uT2IoKT8xOi0xfWZ1bmN0aW9uIGVFbihlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3IoZz1lZyhlLmMubGVuZ3RoKSxhPW5ldyBHKGUpO2EuYTxhLmMuYy5sZW5ndGg7KXtmb3Iocj1sKHJlKGEpLDEwKSxmPW5ldyBLcyxvPXFzKHIpLG49bmV3IGhyKGRyKG8uYS5LYygpLG5ldyBqKSk7anIobik7KXQ9bCh4cihuKSwxOCksdC5jLmk9PXQuZC5pfHxuYShmLHQuZC5pKTskbihnLmMsZil9cmV0dXJuIGd9ZnVuY3Rpb24gWHB0KGUsdCl7dmFyIG4scixhO3RyeXtyZXR1cm4gYT1mYm4oZS5hLHQpLGF9Y2F0Y2gobyl7aWYobz1icyhvKSxEZShvLDMzKSl7dHJ5e2lmKHI9T2godCxsbyxJaSksbj1LMChlLmEpLHI+PTAmJnI8bi5sZW5ndGgpcmV0dXJuIG5bcl19Y2F0Y2goZil7aWYoZj1icyhmKSwhRGUoZiwxMzApKXRocm93IHVlKGYpfXJldHVybiBudWxsfWVsc2UgdGhyb3cgdWUobyl9fWZ1bmN0aW9uIHF1ZShlLHQpe3ZhciBuLHIsYTtpZihhPWc2KChFbCgpLGlvKSxlLkRoKCksdCksYSlyZXR1cm4gRm8oKSxsKGEsNjkpLnhrKCl8fChhPXJ4KGljKGlvLGEpKSkscj0obj1lLkloKGEpLGwobj49MD9lLkxoKG4sITAsITApOkh3KGUsYSwhMCksMTYwKSksbChyLDIyMCkuV2wodCk7dGhyb3cgdWUobmV3IFluKE9iK3QueGUoKSskZmUpKX1mdW5jdGlvbiB0RW4oKXt4M2UoKTt2YXIgZTtyZXR1cm4gSl90P2woVkUoKGliKCksR2YpLEZmKSwyMDM4KTood2kodXYsbmV3IE9JKSxYTW4oKSxlPWwoRGUoeHUoKGliKCksR2YpLEZmKSw1NjApP3h1KEdmLEZmKTpuZXcgZmF0LDU2MCksSl90PSEwLFFJbihlKSxpT24oZSksa2koKHkzZSgpLF9QZSksZSxuZXcgazEpLHJjKEdmLEZmLGUpLGUpfWZ1bmN0aW9uIG5FbihlLHQpe3ZhciBuLHIsYSxvO2Uuaj0tMSxoaChlLmUpPyhuPWUuaSxvPWUuaSE9MCx0TihlLHQpLHI9bmV3IFpnKGUuZSwzLGUuYyxudWxsLHQsbixvKSxhPXQuemwoZS5lLGUuYyxudWxsKSxhPUxndChlLHQsYSksYT8oYS5uaihyKSxhLm9qKCkpOk5pKGUuZSxyKSk6KHROKGUsdCksYT10LnpsKGUuZSxlLmMsbnVsbCksYSYmYS5vaigpKX1mdW5jdGlvbiBrVShlLHQpe3ZhciBuLHIsYTtpZihhPTAscj10WzBdLHI+PWUubGVuZ3RoKXJldHVybi0xO2ZvcihuPShYbihyLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQocikpO24+PTQ4JiZuPD01NyYmKGE9YSoxMCsobi00OCksKytyLCEocj49ZS5sZW5ndGgpKTspbj0oWG4ocixlLmxlbmd0aCksZS5jaGFyQ29kZUF0KHIpKTtyZXR1cm4gcj50WzBdP3RbMF09cjphPS0xLGF9ZnVuY3Rpb24gckVuKGUpe3ZhciB0LG4scixhLG87cmV0dXJuIGE9bChlLmEsMTcpLmEsbz1sKGUuYiwxNykuYSxuPWEscj1vLHQ9Yi5NYXRoLm1heChiLk1hdGguYWJzKGEpLGIuTWF0aC5hYnMobykpLGE8PTAmJmE9PW8/KG49MCxyPW8tMSk6YT09LXQmJm8hPXQ/KG49byxyPWEsbz49MCYmKytuKToobj0tbyxyPWEpLG5ldyBjYShwdChuKSxwdChyKSl9ZnVuY3Rpb24gaUVuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRTtmb3IoYT0wO2E8dC5vO2ErKylmb3Iobz1hLXQuaituLGY9MDtmPHQucDtmKyspaWYoZz1mLXQuaytyLHc9byxFPWcsdys9ZS5qLEUrPWUuayx3Pj0wJiZFPj0wJiZ3PGUubyYmRTxlLnAmJighTmR0KHQsYSxmKSYmRGR0KGUsbyxnKXx8cjYodCxhLGYpJiYhWDZuKGUsbyxnKSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gc0VuKGUsdCxuKXt2YXIgcixhLG8sZixnO2Y9ZS5jLGc9ZS5kLG89SWMoaGUobGUoRWEsMSksZHQsOCwwLFtmLmkubixmLm4sZi5hXSkpLmIsYT0obytJYyhoZShsZShFYSwxKSxkdCw4LDAsW2cuaS5uLGcubixnLmFdKSkuYikvMixyPW51bGwsZi5qPT0oQ3QoKSxhcik/cj1uZXcgbHQodCtmLmkuYy5jLmErbixhKTpyPW5ldyBsdCh0LW4sYSksUGsoZS5hLDAscil9ZnVuY3Rpb24gcXcoZSl7dmFyIHQsbixyLGE7Zm9yKHQ9bnVsbCxyPXJnKExoKGhlKGxlKEZoLDEpLFJuLDIwLDAsWyghZS5iJiYoZS5iPW5ldyBMbihfcixlLDQsNykpLGUuYiksKCFlLmMmJihlLmM9bmV3IExuKF9yLGUsNSw4KSksZS5jKV0pKSk7anIocik7KWlmKG49bCh4cihyKSw4NCksYT1iYyhuKSwhdCl0PWE7ZWxzZSBpZih0IT1hKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEh1ZShlLHQsbil7dmFyIHI7aWYoKytlLmosdD49ZS5pKXRocm93IHVlKG5ldyB0YyhRZmUrdCthditlLmkpKTtpZihuPj1lLmkpdGhyb3cgdWUobmV3IHRjKEpmZStuK2F2K2UuaSkpO3JldHVybiByPWUuZ1tuXSx0IT1uJiYodDxuP3B1KGUuZyx0LGUuZyx0KzEsbi10KTpwdShlLmcsbisxLGUuZyxuLHQtbiksVHMoZS5nLHQsciksZS5QaSh0LHIsbiksZS5OaSgpKSxyfWZ1bmN0aW9uIHhuKGUsdCxuKXt2YXIgcjtpZihyPWwoZS5jLnhjKHQpLDE2KSxyKXJldHVybiByLkZjKG4pPygrK2UuZCwhMCk6ITE7aWYocj1lLmljKHQpLHIuRmMobikpcmV0dXJuKytlLmQsZS5jLnpjKHQsciksITA7dGhyb3cgdWUobmV3IHc2ZSgiTmV3IENvbGxlY3Rpb24gdmlvbGF0ZWQgdGhlIENvbGxlY3Rpb24gc3BlYyIpKX1mdW5jdGlvbiByUChlKXt2YXIgdCxuLHI7cmV0dXJuIGU8MD8wOmU9PTA/MzI6KHI9LShlPj4xNiksdD1yPj4xNiYxNixuPTE2LXQsZT1lPj50LHI9ZS0yNTYsdD1yPj4xNiY4LG4rPXQsZTw8PXQscj1lLVh5LHQ9cj4+MTYmNCxuKz10LGU8PD10LHI9ZS1fZCx0PXI+PjE2JjIsbis9dCxlPDw9dCxyPWU+PjE0LHQ9ciZ+KHI+PjEpLG4rMi10KX1mdW5jdGlvbiBhRW4oZSl7dHgoKTt2YXIgdCxuLHIsYTtmb3Iod0s9bmV3IGJ0LFgwZT1uZXcgUHIsWTBlPW5ldyBidCx0PSghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSxYRG4odCksYT1uZXcgb3IodCk7YS5lIT1hLmkuZ2MoKTspcj1sKGdyKGEpLDI3KSxnYyh3SyxyLDApPT0tMSYmKG49bmV3IGJ0LHZ0KFkwZSxuKSxaMXQocixuKSk7cmV0dXJuIFkwZX1mdW5jdGlvbiBvRW4oZSx0LG4pe3ZhciByLGEsbyxmO2UuYT1uLmIuZCxEZSh0LDMyNik/KGE9bDYobCh0LDc0KSwhMSwhMSksbz1RTihhKSxyPW5ldyB0XyhlKSx0byhvLHIpLGRQKG8sYSksdC5vZigocGkoKSx4MykpIT1udWxsJiZ0byhsKHQub2YoeDMpLDc1KSxyKSk6KGY9bCh0LDQyMiksZi5yaChmLm5oKCkrZS5hLmEpLGYuc2goZi5vaCgpK2UuYS5iKSl9ZnVuY3Rpb24gY0VuKGUsdCl7dmFyIG4scixhO2ZvcihhPW5ldyBidCxyPVJyKHQuYSwwKTtyLmIhPXIuZC5jOyluPWwoQnIociksNjUpLG4uYy5nPT1lLmcmJnFlKFEobi5iLChIYygpLCRkKSkpIT09cWUoUShuLmMsJGQpKSYmIVc1KG5ldyBibihudWxsLG5ldyBrbihhLDE2KSksbmV3IGNYZShuKSkmJiRuKGEuYyxuKTtyZXR1cm4gVnMoYSxuZXcgTXRlKSxhfWZ1bmN0aW9uIFFwdChlLHQsbil7dmFyIHIsYSxvLGY7cmV0dXJuIERlKHQsMTUzKSYmRGUobiwxNTMpPyhvPWwodCwxNTMpLGY9bChuLDE1MyksZS5hW28uYV1bZi5hXStlLmFbZi5hXVtvLmFdKTpEZSh0LDI1MCkmJkRlKG4sMjUwKSYmKHI9bCh0LDI1MCksYT1sKG4sMjUwKSxyLmE9PWEuYSk/bChRKGEuYSwoYjAoKSxxeCkpLDE3KS5hOjB9ZnVuY3Rpb24gSnB0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRTtmb3IoRT16ZShHZShRKHQsKE50KCksdE0pKSkpLHc9ZVswXS5uLmErZVswXS5vLmErZVswXS5kLmMrRSxnPTE7ZzxlLmxlbmd0aDtnKyspcj1lW2ddLm4sYT1lW2ddLm8sbj1lW2ddLmQsbz1yLmEtbi5iLXcsbzwwJiYoci5hLT1vKSxmPXQuZixmLmE9Yi5NYXRoLm1heChmLmEsci5hK2EuYSksdz1yLmErYS5hK24uYytFfWZ1bmN0aW9uIHVFbihlLHQpe3ZhciBuLHIsYSxvLGYsZztyZXR1cm4gcj1sKGwoY3IoZS5nLHQuYSksNDIpLmEsNjgpLGE9bChsKGNyKGUuZyx0LmIpLDQyKS5hLDY4KSxvPXIuYixmPWEuYixuPVBMbihvLGYpLG4+PTA/bjooZz1lQShtYShuZXcgbHQoZi5jK2YuYi8yLGYuZCtmLmEvMiksbmV3IGx0KG8uYytvLmIvMixvLmQrby5hLzIpKSksLShUbXQobyxmKS0xKSpnKX1mdW5jdGlvbiBsRW4oZSx0LG4pe3ZhciByO0lzKG5ldyBibihudWxsLCghbi5hJiYobi5hPW5ldyBudChjcyxuLDYsNikpLG5ldyBrbihuLmEsMTYpKSksbmV3IGR0dChlLHQpKSxJcyhuZXcgYm4obnVsbCwoIW4ubiYmKG4ubj1uZXcgbnQoZWMsbiwxLDcpKSxuZXcga24obi5uLDE2KSkpLG5ldyBndHQoZSx0KSkscj1sKGF0KG4sKHBpKCkseDMpKSw3NSksciYmazdlKHIsZSx0KX1mdW5jdGlvbiBIdyhlLHQsbil7dmFyIHIsYSxvO2lmKG89ZzYoKEVsKCksaW8pLGUuRGgoKSx0KSxvKXJldHVybiBGbygpLGwobyw2OSkueGsoKXx8KG89cngoaWMoaW8sbykpKSxhPShyPWUuSWgobyksbChyPj0wP2UuTGgociwhMCwhMCk6SHcoZSxvLCEwKSwxNjApKSxsKGEsMjIwKS5TbCh0LG4pO3Rocm93IHVlKG5ldyBZbihPYit0LnhlKCkrJGZlKSl9ZnVuY3Rpb24geTllKGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7aWYoYT1lLmRbdF0sYSl7aWYobz1hLmcsdz1hLmksciE9bnVsbCl7Zm9yKGc9MDtnPHc7KytnKWlmKGY9bChvW2ddLDEzNiksZi5CaSgpPT1uJiZQaShyLGYubGQoKSkpcmV0dXJuIGZ9ZWxzZSBmb3IoZz0wO2c8dzsrK2cpaWYoZj1sKG9bZ10sMTM2KSxxZShmLmxkKCkpPT09cWUocikpcmV0dXJuIGZ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gaEVuKGUsdCl7dmFyIG4scixhLG8sZjtmb3Iocj0oIXQucyYmKHQucz1uZXcgbnQoZGwsdCwyMSwxNykpLHQucyksbz1udWxsLGE9MCxmPXIuaTthPGY7KythKXN3aXRjaChuPWwoT2UocixhKSwxNzkpLGt3KGljKGUsbikpKXtjYXNlIDQ6Y2FzZSA1OmNhc2UgNjp7IW8mJihvPW5ldyBidCksJG4oby5jLG4pO2JyZWFrfX1yZXR1cm4gb3x8KENuKCksQ24oKSxfbyl9ZnVuY3Rpb24gaVAoZSx0KXt2YXIgbjtpZih0PDApdGhyb3cgdWUobmV3IHF6KCJOZWdhdGl2ZSBleHBvbmVudCIpKTtpZih0PT0wKXJldHVybiB1SztpZih0PT0xfHxDOGUoZSx1Syl8fEM4ZShlLEJMKSlyZXR1cm4gZTtpZighVDJ0KGUsMCkpe2ZvcihuPTE7IVQydChlLG4pOykrK247cmV0dXJuIEs1KHk1bihuKnQpLGlQKHY2ZShlLG4pLHQpKX1yZXR1cm4gU3huKGUsdCl9ZnVuY3Rpb24gZkVuKGUsdCl7dmFyIG4scixhO2lmKHFlKGUpPT09cWUodCkpcmV0dXJuITA7aWYoZT09bnVsbHx8dD09bnVsbHx8ZS5sZW5ndGghPXQubGVuZ3RoKXJldHVybiExO2ZvcihuPTA7bjxlLmxlbmd0aDsrK24paWYocj1lW25dLGE9dFtuXSwhKHFlKHIpPT09cWUoYSl8fHIhPW51bGwmJlBpKHIsYSkpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFpwdChlKXt2M2UoKTt2YXIgdCxuLHI7Zm9yKHRoaXMuYj1UOHQsdGhpcy5jPShKcygpLEoxKSx0aGlzLmY9KGNldCgpLEU4dCksdGhpcy5hPWUsczNlKHRoaXMsbmV3IFg3KSxNVSh0aGlzKSxyPW5ldyBHKGUuYik7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDg2KSxuLmR8fCh0PW5ldyBRY2UoaGUobGUocjFlLDEpLFJuLDg2LDAsW25dKSksdnQoZS5hLHQpKX1mdW5jdGlvbiBkRW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdztpZighZXx8ZS5jLmxlbmd0aD09MClyZXR1cm4gbnVsbDtmb3Iobz1uZXcgbm90KHQsIW4pLGE9bmV3IEcoZSk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDcyKSxKeGUobywoZ18oKSxuZXcgWmQocikpKTtyZXR1cm4gZj1vLmksZi5hPSh3PW8ubixvLmUuYit3LmQrdy5hKSxmLmI9KGc9by5uLG8uZS5hK2cuYitnLmMpLG99ZnVuY3Rpb24gZTJ0KGUpe3ZhciB0LG4scixhLG8sZixnO2ZvcihnPUpPKGUuYSksY3llKGcsbmV3IHQwKSxuPW51bGwsYT1nLG89MCxmPWEubGVuZ3RoO288ZiYmKHI9YVtvXSxyLms9PShabigpLFVzKSk7KytvKXQ9bChRKHIsKGZ0KCksV2MpKSw2NCksISh0IT0oQ3QoKSxlcikmJnQhPWFyKSYmKG4mJmwoUShuLFd4KSwxNSkuRmMociksbj1yKX1mdW5jdGlvbiBnRW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFO3c9KFNuKHQsZS5jLmxlbmd0aCksbChlLmNbdF0sMzM5KSksdDIoZSx0KSx3LmIvMj49biYmKHI9dCxFPSh3LmMrdy5hKS8yLGY9RS1uLHcuYzw9RS1uJiYoYT1uZXcgdmFlKHcuYyxmKSxwdyhlLHIrKyxhKSksZz1FK24sZzw9dy5hJiYobz1uZXcgdmFlKGcsdy5hKSxFeShyLGUuYy5sZW5ndGgpLHhfKGUuYyxyLG8pKSl9ZnVuY3Rpb24gdDJ0KGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYoIXQuZGMoKSl7Zm9yKGE9bmV3IG9zLHc9dC5LYygpO3cuT2IoKTspZm9yKGc9bCh3LlBiKCksNDApLGtpKGUuYSxwdChnLmcpLHB0KG4pKSxmPShyPVJyKG5ldyBIZyhnKS5hLmQsMCksbmV3IEM1KHIpKTtRSShmLmEpOylvPWwoQnIoZi5hKSw2NSkuYyxDcyhhLG8sYS5jLmIsYS5jKTt0MnQoZSxhLG4rMSl9fWZ1bmN0aW9uIHg5ZShlKXt2YXIgdDtpZighZS5jJiZlLmc9PW51bGwpZS5kPWUuYmooZS5mKSxxcihlLGUuZCksdD1lLmQ7ZWxzZXtpZihlLmc9PW51bGwpcmV0dXJuITA7aWYoZS5pPT0wKXJldHVybiExO3Q9bChlLmdbZS5pLTFdLDUxKX1yZXR1cm4gdD09ZS5iJiZudWxsLlZtPj1udWxsLlVtKCk/KENVKGUpLHg5ZShlKSk6dC5PYigpfWZ1bmN0aW9uIG4ydChlKXtpZih0aGlzLmE9ZSxlLmMuaS5rPT0oWm4oKSxVcykpdGhpcy5jPWUuYyx0aGlzLmQ9bChRKGUuYy5pLChmdCgpLFdjKSksNjQpO2Vsc2UgaWYoZS5kLmkuaz09VXMpdGhpcy5jPWUuZCx0aGlzLmQ9bChRKGUuZC5pLChmdCgpLFdjKSksNjQpO2Vsc2UgdGhyb3cgdWUobmV3IFluKCJFZGdlICIrZSsiIGlzIG5vdCBhbiBleHRlcm5hbCBlZGdlLiIpKX1mdW5jdGlvbiByMnQoZSx0KXt2YXIgbixyLGE7YT1lLmIsZS5iPXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSwzLGEsZS5iKSksdD90IT1lJiYoRnUoZSx0LnpiKSxRb2UoZSx0LmQpLG49KHI9dC5jLHI/P3QuemIpLFpvZShlLG49PW51bGx8fHZuKG4sdC56Yik/bnVsbDpuKSk6KEZ1KGUsbnVsbCksUW9lKGUsMCksWm9lKGUsbnVsbCkpfWZ1bmN0aW9uIGkydChlLHQpe3ZhciBuO3RoaXMuZT0od3coKSxYcihlKSx3dygpLFA4ZShlKSksdGhpcy5jPShYcih0KSxQOGUodCkpLFR5ZSh0aGlzLmUuUmQoKS5kYygpPT10aGlzLmMuUmQoKS5kYygpKSx0aGlzLmQ9dzF0KHRoaXMuZSksdGhpcy5iPXcxdCh0aGlzLmMpLG49TG0od2EsW2R0LFJuXSxbNSwxXSw1LFt0aGlzLmUuUmQoKS5nYygpLHRoaXMuYy5SZCgpLmdjKCldLDIpLHRoaXMuYT1uLGp3bih0aGlzKX1mdW5jdGlvbiBzMnQoZSl7IUMwZSYmKEMwZT1jSW4oKSk7dmFyIHQ9ZS5yZXBsYWNlKC9bXHgwMC1ceDFmXHhhZFx1MDYwMC1cdTA2MDNcdTA2ZGRcdTA3MGZcdTE3YjRcdTE3YjVcdTIwMGItXHUyMDBmXHUyMDI4LVx1MjAyZVx1MjA2MC1cdTIwNjRcdTIwNmEtXHUyMDZmXHVmZWZmXHVmZmY5LVx1ZmZmYiJcXF0vZyxmdW5jdGlvbihuKXtyZXR1cm4gZjJuKG4pfSk7cmV0dXJuJyInK3QrJyInfWZ1bmN0aW9uIGs5ZShlLHQsbixyLGEsbyl7dmFyIGYsZyx3LEUsQztpZihhIT0wKWZvcihxZShlKT09PXFlKG4pJiYoZT1lLnNsaWNlKHQsdCthKSx0PTApLHc9bixnPXQsRT10K2E7ZzxFOylmPWIuTWF0aC5taW4oZysxZTQsRSksYT1mLWcsQz1lLnNsaWNlKGcsZiksQy5zcGxpY2UoMCwwLHIsbz9hOjApLEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkodyxDKSxnPWYscis9YX1mdW5jdGlvbiBhMnQoZSl7UDVlKCk7dmFyIHQsbjtmb3IodGhpcy5iPWo2dCx0aGlzLmM9ejZ0LHRoaXMuZz0ob2V0KCksUjZ0KSx0aGlzLmQ9KEpzKCksSjEpLHRoaXMuYT1lLFY5ZSh0aGlzKSxuPW5ldyBHKGUuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDYwKSwhdC5hJiZlcnQoR2h0KG5ldyBJd2UsaGUobGUoZEssMSksUm4sNjAsMCxbdF0pKSxlKSx0LmU9bmV3IE1IKHQuZCl9ZnVuY3Rpb24gcEVuKGUpe3ZhciB0LG4scixhLG8sZjtmb3IoYT1lLmUuYy5sZW5ndGgscj1XZShtZixReSwxNSxhLDAsMSksZj1uZXcgRyhlLmUpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxNTMpLHJbby5hXT1uZXcgb3M7Zm9yKG49bmV3IEcoZS5jKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMjkwKSxyW3QuYy5hXS5GYyh0KSxyW3QuZC5hXS5GYyh0KTtyZXR1cm4gcn1mdW5jdGlvbiBiRW4oZSx0KXt2YXIgbixyLGEsbyxmO2lmKG49bChLbihlLmEsNCksMTI5KSxmPW49PW51bGw/MDpuLmxlbmd0aCx0Pj1mKXRocm93IHVlKG5ldyBteSh0LGYpKTtyZXR1cm4gYT1uW3RdLGY9PTE/cj1udWxsOihyPVdlKGVwZSxyMGUsNDI0LGYtMSwwLDEpLHB1KG4sMCxyLDAsdCksbz1mLXQtMSxvPjAmJnB1KG4sdCsxLHIsdCxvKSksUEUoZSxyKSxBcHQoZSx0LGEpLGF9ZnVuY3Rpb24gbzJ0KGUpe3ZhciB0LG47aWYoZS5mKXtmb3IoO2UubjxlLm87KXtpZih0PWwoZS5qP2Uuai4kaShlLm4pOmUuay5YYihlLm4pLDc2KSxuPXQuTGsoKSxEZShuLDEwMikmJmwobiwxOSkuQmImZXUmJighZS5lfHxuLnBrKCkhPW9DfHxuLkxqKCkhPTApJiZ0Lm1kKCkhPW51bGwpcmV0dXJuITA7KytlLm59cmV0dXJuITF9ZWxzZSByZXR1cm4gZS5uPGUub31mdW5jdGlvbiBreCgpe2t4PVUsdTk9bChPZSh0dCgodTNlKCksdHUpLnFiKSw2KSwzNSksYzk9bChPZSh0dCh0dS5xYiksMyksMzUpLGFwZT1sKE9lKHR0KHR1LnFiKSw0KSwzNSksb3BlPWwoT2UodHQodHUucWIpLDUpLDE5KSxwVSh1OSkscFUoYzkpLHBVKGFwZSkscFUob3BlKSxuQXQ9bmV3IElsKGhlKGxlKGRsLDEpLFM2LDE3OSwwLFt1OSxjOV0pKX1mdW5jdGlvbiBjMnQoZSx0KXt2YXIgbjt0aGlzLmQ9bmV3IHNfLHRoaXMuYj10LHRoaXMuZT1uZXcgRW8odC5MZigpKSxuPWUudS5IYygoUmwoKSxuRikpLGUudS5IYyh2cCk/ZS5EP3RoaXMuYT1uJiYhdC5iZygpOnRoaXMuYT0hMDplLnUuSGMoWWIpP24/dGhpcy5hPSEodC5VZigpLktjKCkuT2IoKXx8dC5XZigpLktjKCkuT2IoKSk6dGhpcy5hPSExOnRoaXMuYT0hMX1mdW5jdGlvbiB1MnQoZSx0KXt2YXIgbixyLGEsbztmb3Iobj1lLm8uYSxvPWwobCgkaShlLnIsdCksMjEpLDg3KS5LYygpO28uT2IoKTspYT1sKG8uUGIoKSwxMTcpLGEuZS5hPShyPWEuYixyLnBmKChwaSgpLHJoKSk/ci5hZygpPT0oQ3QoKSxlcik/LXIuTWYoKS5hLXplKEdlKHIub2YocmgpKSk6bit6ZShHZShyLm9mKHJoKSkpOnIuYWcoKT09KEN0KCksZXIpPy1yLk1mKCkuYTpuKX1mdW5jdGlvbiBsMnQoZSx0KXt2YXIgbixyLGEsbztuPWwoUShlLChOdCgpLFJoKSksODgpLG89bChhdCh0LFZUKSw2NCksYT1sKFEoZSxNcyksMTAxKSxhIT0oUmEoKSxaMSkmJmEhPVdiP289PShDdCgpLFBjKSYmKG89RWtlKHQsbiksbz09UGMmJihvPWd4KG4pKSk6KHI9bHZ0KHQpLHI+MD9vPWd4KG4pOm89Qk4oZ3gobikpKSxIaSh0LFZULG8pfWZ1bmN0aW9uIG1FbihlLHQpe3ZhciBuO3QuVWcoIlBhcnRpdGlvbiBwcmVwcm9jZXNzaW5nIiwxKSxuPWwoeWMoRmkoRGMoRmkobmV3IGJuKG51bGwsbmV3IGtuKGUuYSwxNikpLG5ldyBBWiksbmV3IExaKSxuZXcgd2opLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxFYyldKSkpLDE1KSxJcyhuLk9jKCksbmV3IHQ4KSx0LlZnKCl9ZnVuY3Rpb24gdkVuKGUsdCl7dmFyIG4scixhLG8sZjtmb3IoZj1lLmosdC5hIT10LmImJlZzKGYsbmV3IGtTKSxhPWYuYy5sZW5ndGgvMnwwLHI9MDtyPGE7cisrKW89KFNuKHIsZi5jLmxlbmd0aCksbChmLmNbcl0sMTEzKSksby5jJiZsYShvLmQsdC5hKTtmb3Iobj1hO248Zi5jLmxlbmd0aDtuKyspbz0oU24obixmLmMubGVuZ3RoKSxsKGYuY1tuXSwxMTMpKSxvLmMmJmxhKG8uZCx0LmIpfWZ1bmN0aW9uIHdFbihlLHQsbil7dmFyIHIsYSxvO3JldHVybiByPWUuY1t0LmMucF1bdC5wXSxhPWUuY1tuLmMucF1bbi5wXSxyLmEhPW51bGwmJmEuYSE9bnVsbD8obz1OYWUoci5hLGEuYSksbzwwP2xQKGUsdCxuKTpvPjAmJmxQKGUsbix0KSxvKTpyLmEhPW51bGw/KGxQKGUsdCxuKSwtMSk6YS5hIT1udWxsPyhsUChlLG4sdCksMSk6MH1mdW5jdGlvbiB5RW4oZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihhPXQuYi5iLGUuYT1XZShtZixReSwxNSxhLDAsMSksZS5iPVdlKGloLHBnLDI4LGEsMTYsMSksZj1Scih0LmIsMCk7Zi5iIT1mLmQuYzspbz1sKEJyKGYpLDQwKSxlLmFbby5nXT1uZXcgb3M7Zm9yKHI9UnIodC5hLDApO3IuYiE9ci5kLmM7KW49bChCcihyKSw2NSksZS5hW24uYi5nXS5GYyhuKSxlLmFbbi5jLmddLkZjKG4pfWZ1bmN0aW9uIGgydChlLHQpe3ZhciBuLHIsYSxvO2UuUGooKT8obj1lLkVqKCksbz1lLlFqKCksKytlLmosZS5xaihuLGUuWmkobix0KSkscj1lLklqKDMsbnVsbCx0LG4sbyksZS5NaigpPyhhPWUuTmoodCxudWxsKSxhPyhhLm5qKHIpLGEub2ooKSk6ZS5KaihyKSk6ZS5KaihyKSk6KHRhdChlLHQpLGUuTWooKSYmKGE9ZS5Oaih0LG51bGwpLGEmJmEub2ooKSkpfWZ1bmN0aW9uIEU5ZShlLHQsbil7dmFyIHIsYSxvO2UuUGooKT8obz1lLlFqKCksSU4oZSx0LG4pLHI9ZS5JaigzLG51bGwsbix0LG8pLGUuTWooKT8oYT1lLk5qKG4sbnVsbCksZS5UaigpJiYoYT1lLlVqKG4sYSkpLGE/KGEubmoociksYS5vaigpKTplLkpqKHIpKTplLkpqKHIpKTooSU4oZSx0LG4pLGUuTWooKSYmKGE9ZS5OaihuLG51bGwpLGEmJmEub2ooKSkpfWZ1bmN0aW9uIEVVKGUsdCl7dmFyIG4scixhLG8sZjtmb3IoZj1XdShlLmUuRGgoKSx0KSxhPW5ldyBYMixuPWwoZS5nLDEyNCksbz1lLmk7LS1vPj0wOylyPW5bb10sZi5hbShyLkxrKCkpJiZxcihhLHIpOyFhd3QoZSxhKSYmaGgoZS5lKSYmeGsoZSx0LkprKCk/ZGIoZSw2LHQsKENuKCksX28pLG51bGwsLTEsITEpOmRiKGUsdC50aygpPzI6MSx0LG51bGwsbnVsbCwtMSwhMSkpfWZ1bmN0aW9uIHhFbihlLHQpe3ZhciBuLHIsYSxvLGY7cmV0dXJuIGUuYT09KHpFKCksVkwpPyEwOihvPXQuYS5jLG49dC5hLmMrdC5hLmIsISh0LmomJihyPXQuQSxmPXIuYy5jLmEtci5vLmEvMixhPW8tKHIubi5hK3Iuby5hKSxhPmYpfHx0LnEmJihyPXQuQyxmPXIuYy5jLmEtci5vLmEvMixhPXIubi5hLW4sYT5mKSkpfWZ1bmN0aW9uIGYydChlKXtmb2UoKTt2YXIgdCxuLHIsYSxvLGYsZztmb3Iobj1uZXcgZTIsYT1uZXcgRyhlLmUuYik7YS5hPGEuYy5jLmxlbmd0aDspZm9yKHI9bChyZShhKSwzMCksZj1uZXcgRyhyLmEpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxMCksZz1lLmdbby5wXSx0PWwoQjEobixnKSwxNSksdHx8KHQ9bmV3IGJ0LGgyKG4sZyx0KSksdC5GYyhvKTtyZXR1cm4gbn1mdW5jdGlvbiBkMnQoZSl7dmFyIHQ7cmV0dXJuIGUuRGImNjQ/ZzAoZSk6KHQ9bmV3IEFmKGcwKGUpKSx0LmErPSIgKHN0YXJ0WDogIixfNSh0LGUuaiksdC5hKz0iLCBzdGFydFk6ICIsXzUodCxlLmspLHQuYSs9IiwgZW5kWDogIixfNSh0LGUuYiksdC5hKz0iLCBlbmRZOiAiLF81KHQsZS5jKSx0LmErPSIsIGlkZW50aWZpZXI6ICIsWG8odCxlLmQpLHQuYSs9IikiLHQuYSl9ZnVuY3Rpb24gVDllKGUpe3ZhciB0O3JldHVybiBlLkRiJjY0P0NBKGUpOih0PW5ldyBBZihDQShlKSksdC5hKz0iIChvcmRlcmVkOiAiLEdwKHQsKGUuQmImMjU2KSE9MCksdC5hKz0iLCB1bmlxdWU6ICIsR3AodCwoZS5CYiY1MTIpIT0wKSx0LmErPSIsIGxvd2VyQm91bmQ6ICIsaXNlKHQsZS5zKSx0LmErPSIsIHVwcGVyQm91bmQ6ICIsaXNlKHQsZS50KSx0LmErPSIpIix0LmEpfWZ1bmN0aW9uIGcydChlLHQsbixyLGEsbyxmLGcpe3ZhciB3O3JldHVybiBEZShlLkNiLDkwKSYmenkoWWwobChlLkNiLDkwKSksNCksRnUoZSxuKSxlLmY9cixMRShlLGEpLERFKGUsbyksQUUoZSxmKSxNRShlLCExKSx1MihlLCEwKSxJRShlLGcpLGMyKGUsITApLGkyKGUsMCksZS5iPTAsTXkoZSwxKSx3PSQxKGUsdCxudWxsKSx3JiZ3Lm9qKCksJGNlKGUsITEpLGV9ZnVuY3Rpb24gcDJ0KGUsdCl7dmFyIG4scixhLG87cmV0dXJuIG49bCh4dShlLmEsdCksNTI1KSxufHwocj1uZXcgU29lKHQpLGE9KFVIKCksRzE/bnVsbDpyLmMpLG89dGYoYSwwLGIuTWF0aC5tYXgoMCxScShhLGNsKDQ2KSkpKSxKZm4ocixwMnQoZSxvKSksKEcxP251bGw6ci5jKS5sZW5ndGg9PTAmJlNydChyLG5ldyBEdCkscmMoZS5hLEcxP251bGw6ci5jLHIpLHIpfWZ1bmN0aW9uIGtFbihlLHQpe3ZhciBuO2UuYj10LGUuZz1uZXcgYnQsbj1TRW4oZS5iKSxlLmU9bixlLmY9bixlLmM9UnQoQnQoUShlLmIsKGRVKCksQ19lKSkpKSxlLmE9R2UoUShlLmIsKHBpKCksWjYpKSksZS5hPT1udWxsJiYoZS5hPTEpLHplKGUuYSk+MT9lLmUqPXplKGUuYSk6ZS5mLz16ZShlLmEpLEh5bihlKSxZNW4oZSksR1NuKGUpLHJ0KGUuYiwoSUEoKSx2SyksZS5nKX1mdW5jdGlvbiBiMnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdztmb3Iocj0wLHc9bix0fHwocj1uKihlLmMubGVuZ3RoLTEpLHcqPS0xKSxvPW5ldyBHKGUpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3IoYT1sKHJlKG8pLDEwKSxydChhLChOdCgpLFJkKSwob2coKSx0WSkpLGEuby5hPXIsZz1kMihhLChDdCgpLGFyKSkuS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMTIpLGYubi5hPXI7cis9d319ZnVuY3Rpb24gRXgoZSx0LG4pe3ZhciByLGEsbyxmLGcsdztyZXR1cm4gZz1lLnBsKG4pLGchPW4/KGY9ZS5nW3RdLHc9ZyxSXyhlLHQsZS5aaSh0LHcpKSxvPWYsZS5SaSh0LHcsbyksZS5hbCgpJiYocj1uLGE9ZS5PaihyLG51bGwpLCFsKGcsNTQpLlBoKCkmJihhPWUuTmoodyxhKSksYSYmYS5vaigpKSxoaChlLmUpJiZ4ayhlLGUuSWooOSxuLGcsdCwhMSkpLGcpOm59ZnVuY3Rpb24gRUVuKGUsdCl7dmFyIG4scixhLG87Zm9yKHI9bmV3IEcoZS5hLmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxOTQpLG4uZz0hMDtmb3Iobz1uZXcgRyhlLmEuYik7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDg2KSxhLms9UnQoQnQoZS5lLktiKG5ldyBjYShhLHQpKSkpLGEuZC5nPWEuZC5nJlJ0KEJ0KGUuZS5LYihuZXcgY2EoYSx0KSkpKTtyZXR1cm4gZX1mdW5jdGlvbiBtMnQoZSx0KXt2YXIgbixyO2lmKGUuYy5sZW5ndGghPTApe2lmKGUuYy5sZW5ndGg9PTIpVHgoKFNuKDAsZS5jLmxlbmd0aCksbChlLmNbMF0sMTApKSwoSWgoKSxrZykpLFR4KChTbigxLGUuYy5sZW5ndGgpLGwoZS5jWzFdLDEwKSksR2IpO2Vsc2UgZm9yKHI9bmV3IEcoZSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDEwKSxUeChuLHQpO2UuYy5sZW5ndGg9MH19ZnVuY3Rpb24gdjJ0KGUpe3ZhciB0LG4scixhLG87aWYobj0odD1sKEswKE9vKSw5KSxuZXcgWmgodCxsKGMwKHQsdC5sZW5ndGgpLDkpLDApKSxvPWwoUShlLChmdCgpLGpsKSksMTApLG8pZm9yKGE9bmV3IEcoby5qKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTIpLHFlKFEocix6aSkpPT09cWUoZSkmJiRfKG5ldyBOMShyLmIpKSYmZDAobixyLmopO3JldHVybiBufWZ1bmN0aW9uIHcydChlLHQsbil7dmFyIHIsYSxvLGYsZztpZighZS5kW24ucF0pe2ZvcihhPW5ldyBocihkcihxcyhuKS5hLktjKCksbmV3IGopKTtqcihhKTspe2ZvcihyPWwoeHIoYSksMTgpLGc9ci5kLmksZj1uZXcgaHIoZHIoa2EoZykuYS5LYygpLG5ldyBqKSk7anIoZik7KW89bCh4cihmKSwxOCksby5jLmk9PXQmJihlLmFbby5wXT0hMCk7dzJ0KGUsdCxnKX1lLmRbbi5wXT0hMH19ZnVuY3Rpb24gVEVuKGUsdCl7dmFyIG4scixhLG8sZixnLHc7aWYocj1kMXQoZS5EYiYyNTQpLHI9PTEpZS5FYj1udWxsO2Vsc2UgaWYobz1qbShlLkViKSxyPT0yKWE9bXVlKGUsdCksZS5FYj1vW2E9PTA/MTowXTtlbHNle2ZvcihmPVdlKHdhLFJuLDEsci0xLDUsMSksbj0yLGc9MCx3PTA7bjw9MTI4O248PD0xKW49PXQ/KytnOmUuRGImbiYmKGZbdysrXT1vW2crK10pO2UuRWI9Zn1lLkRiJj1+dH1mdW5jdGlvbiBDOWUoZSl7dmFyIHQ7c3dpdGNoKHQ9MCxlKXtjYXNlIDEwNTp0PTI7YnJlYWs7Y2FzZSAxMDk6dD04O2JyZWFrO2Nhc2UgMTE1OnQ9NDticmVhaztjYXNlIDEyMDp0PTE2O2JyZWFrO2Nhc2UgMTE3OnQ9MzI7YnJlYWs7Y2FzZSAxMTk6dD02NDticmVhaztjYXNlIDcwOnQ9MjU2O2JyZWFrO2Nhc2UgNzI6dD0xMjg7YnJlYWs7Y2FzZSA4ODp0PTUxMjticmVhaztjYXNlIDQ0OnQ9bTB9cmV0dXJuIHR9ZnVuY3Rpb24gQ0VuKGUsdCxuLHIsYSl7dmFyIG8sZixnLHc7aWYocWUoZSk9PT1xZSh0KSYmcj09YSl7bW10KGUscixuKTtyZXR1cm59Zm9yKGc9MDtnPHI7ZysrKXtmb3IoZj0wLG89ZVtnXSx3PTA7dzxhO3crKylmPWJvKGJvKG1vKHZhKG8sVm8pLHZhKHRbd10sVm8pKSx2YShuW2crd10sVm8pKSx2YShZcihmKSxWbykpLG5bZyt3XT1ZcihmKSxmPXViKGYsMzIpO25bZythXT1ZcihmKX19ZnVuY3Rpb24gU0VuKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEw7Zm9yKEM9MCxFPTAsYT1lLmEsZz1hLmEuZ2MoKSxyPWEuYS5lYygpLktjKCk7ci5PYigpOyluPWwoci5QYigpLDU2NyksdD0obi5iJiZnbGUobiksbi5hKSxMPXQuYSxmPXQuYixDKz1MK2YsRSs9TCpmO3JldHVybiB3PWIuTWF0aC5zcXJ0KDQwMCpnKkUtNCpFK0MqQykrQyxvPTIqKDEwMCpnLTEpLG89PTA/dzp3L299ZnVuY3Rpb24geTJ0KGUsdCl7dC5iIT0wJiYoaXNOYU4oZS5zKT9lLnM9emUoKG1yKHQuYiE9MCksR2UodC5hLmEuYykpKTplLnM9Yi5NYXRoLm1pbihlLnMsemUoKG1yKHQuYiE9MCksR2UodC5hLmEuYykpKSksaXNOYU4oZS5jKT9lLmM9emUoKG1yKHQuYiE9MCksR2UodC5jLmIuYykpKTplLmM9Yi5NYXRoLm1heChlLmMsemUoKG1yKHQuYiE9MCksR2UodC5jLmIuYykpKSkpfWZ1bmN0aW9uIHFBKGUpe3ZhciB0LG4scixhO2Zvcih0PW51bGwscj1yZyhMaChoZShsZShGaCwxKSxSbiwyMCwwLFsoIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmIpLCghZS5jJiYoZS5jPW5ldyBMbihfcixlLDUsOCkpLGUuYyldKSkpO2pyKHIpOylpZihuPWwoeHIociksODQpLGE9YmMobiksIXQpdD1kcyhhKTtlbHNlIGlmKHQhPWRzKGEpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFZ1ZShlLHQpe3ZhciBuLHIsYSxvO2UuUGooKT8obj1lLmksbz1lLlFqKCksdE4oZSx0KSxyPWUuSWooMyxudWxsLHQsbixvKSxlLk1qKCk/KGE9ZS5Oaih0LG51bGwpLGUuVGooKSYmKGE9ZS5Vaih0LGEpKSxhPyhhLm5qKHIpLGEub2ooKSk6ZS5KaihyKSk6ZS5KaihyKSk6KHROKGUsdCksZS5NaigpJiYoYT1lLk5qKHQsbnVsbCksYSYmYS5vaigpKSl9ZnVuY3Rpb24gX0VuKGUsdCl7dmFyIG4scixhLG87aWYobz1qTyhlLmEsdC5iKSwhbyl0aHJvdyB1ZShuZXcgbmMoIkludmFsaWQgaGl0Ym94ZXMgZm9yIHNjYW5saW5lIG92ZXJsYXAgY2FsY3VsYXRpb24uIikpO2ZvcihhPSExLHI9ZS5hLmEuZWMoKS5LYygpO3IuT2IoKTspaWYobj1sKHIuUGIoKSw2OCksc3luKHQuYixuKSlCdW4oZS5iLmEsdC5iLG4pLGE9ITA7ZWxzZSBpZihhKWJyZWFrfWZ1bmN0aW9uIEFFbihlKXt2YXIgdDtpZighZS5hKXRocm93IHVlKG5ldyBuYygiSURhdGFUeXBlIGNsYXNzIGV4cGVjdGVkIGZvciBsYXlvdXQgb3B0aW9uICIrZS5mKSk7aWYodD1kbW4oZS5hKSx0PT1udWxsKXRocm93IHVlKG5ldyBuYygiQ291bGRuJ3QgY3JlYXRlIG5ldyBpbnN0YW5jZSBvZiBwcm9wZXJ0eSAnIitlLmYrIicuICIrT3l0KyhHZyhoRiksaEYuaykrSkNlKSk7cmV0dXJuIGwodCw0MjMpfWZ1bmN0aW9uIFV1ZShlKXt2YXIgdCxuLHIsYSxvO3JldHVybiBvPWUuUGgoKSxvJiZvLlZoKCkmJihhPXliKGUsbyksYSE9byk/KG49ZS5GaCgpLHI9KHQ9ZS5GaCgpLHQ+PTA/ZS5BaChudWxsKTplLlBoKCkuVGgoZSwtMS10LG51bGwsbnVsbCkpLGUuQmgobChhLDU0KSxuKSxyJiZyLm9qKCksZS52aCgpJiZlLndoKCkmJm4+LTEmJk5pKGUsbmV3IF9hKGUsOSxuLG8sYSkpLGEpOm99ZnVuY3Rpb24gUzllKGUsdCl7dmFyIG4scixhLG8sZjtmb3Iobz1lLmIuQ2UodCkscj0obj1lLmEuZ2V0KG8pLG4/P1dlKHdhLFJuLDEsMCw1LDEpKSxmPTA7ZjxyLmxlbmd0aDtmKyspaWYoYT1yW2ZdLGUuYi5CZSh0LGEubGQoKSkpcmV0dXJuIHIubGVuZ3RoPT0xPyhyLmxlbmd0aD0wLE1mbihlLmEsbykpOnIuc3BsaWNlKGYsMSksLS1lLmMsKytlLmIuZyxhLm1kKCk7cmV0dXJuIG51bGx9ZnVuY3Rpb24geDJ0KGUpe3ZhciB0LG4scixhLG8sZixnLHc7Zm9yKGY9MCxvPWUuZi5lLHI9MDtyPG8uYy5sZW5ndGg7KytyKWZvcihnPShTbihyLG8uYy5sZW5ndGgpLGwoby5jW3JdLDE1MykpLGE9cisxO2E8by5jLmxlbmd0aDsrK2Epdz0oU24oYSxvLmMubGVuZ3RoKSxsKG8uY1thXSwxNTMpKSxuPXBiKGcuZCx3LmQpLHQ9bi1lLmFbZy5hXVt3LmFdLGYrPWUuaVtnLmFdW3cuYV0qdCp0O3JldHVybiBmfWZ1bmN0aW9uIExFbihlLHQpe3ZhciBuO2lmKCFucyh0LChOdCgpLFF1KSkmJihuPVg3bihsKFEodCxzTGUpLDM3MSksbChRKGUsUXUpLDE3MSkpLHJ0KHQsc0xlLG4pLCFqcihuZXcgaHIoZHIoc3AodCkuYS5LYygpLG5ldyBqKSkpKSlzd2l0Y2gobi5nKXtjYXNlIDE6cnQodCxRdSwoaGYoKSxZTCkpO2JyZWFrO2Nhc2UgMjpydCh0LFF1LChoZigpLFhMKSl9fWZ1bmN0aW9uIE1FbihlLHQpe3ZhciBuO0hTbihlKSxlLmE9KG49bmV3IG5zZSxJcyhuZXcgYm4obnVsbCxuZXcga24odC5kLDE2KSksbmV3IEVZZShuKSksbiksc19uKGUsbChRKHQuYiwoTnQoKSxuZGUpKSwzNDkpKSxGNm4oZSksRkVuKGUpLEo3bihlKSxSNm4oZSksUUxuKGUsdCksSXMoRGMobmV3IGJuKG51bGwsb2N0KE5nbihlLmIpLmEpKSxuZXcgeFMpLG5ldyBtZWUpLHQuYT0hMSxlLmE9bnVsbH1mdW5jdGlvbiBfOWUoKXtfOWU9VSxnVHQ9bmV3IHBuKGZDZSwoSG4oKSwhMSkpLHBUdD1uZXcgcG4oZENlLDcpLHB0KDApLHdUdD1uZXcgcG4oZ0NlLHB0KDApKSxtVHQ9bmV3IHBuKHBDZSxwdCgtMSkpLGNJZT0oa0EoKSxWZGUpLHlUdD1uZXcgcG4oYkNlLGNJZSksYUllPSh4QSgpLE9CKSxiVHQ9bmV3IHBuKG1DZSxhSWUpLG9JZT0oUkgoKSxVZGUpLHZUdD1uZXcgcG4odkNlLG9JZSl9ZnVuY3Rpb24gazJ0KCl7VnhlLmNhbGwodGhpcyx4VCwocmIoKSx3X3QpKSx0aGlzLnA9bnVsbCx0aGlzLmE9bnVsbCx0aGlzLmY9bnVsbCx0aGlzLm49bnVsbCx0aGlzLmc9bnVsbCx0aGlzLmM9bnVsbCx0aGlzLmk9bnVsbCx0aGlzLmo9bnVsbCx0aGlzLmQ9bnVsbCx0aGlzLmI9bnVsbCx0aGlzLmU9bnVsbCx0aGlzLms9bnVsbCx0aGlzLm89bnVsbCx0aGlzLnM9bnVsbCx0aGlzLnE9ITEsdGhpcy5yPSExfWZ1bmN0aW9uIEhFKCl7SEU9VSxKZ2U9bmV3IFI4KFgzdCwwKSx3WT1uZXcgUjgoIklOU0lERV9TRUxGX0xPT1BTIiwxKSx5WT1uZXcgUjgoIk1VTFRJX0VER0VTIiwyKSx2WT1uZXcgUjgoIkVER0VfTEFCRUxTIiwzKSxRZ2U9bmV3IFI4KCJQT1JUUyIsNCksbVk9bmV3IFI4KCJDT01QT1VORCIsNSksYlk9bmV3IFI4KCJDTFVTVEVSUyIsNiksWGdlPW5ldyBSOCgiRElTQ09OTkVDVEVEIiw3KX1mdW5jdGlvbiBFMnQoZSx0LG4pe3ZhciByLGEsbztlLlBqKCk/KG89ZS5RaigpLCsrZS5qLGUucWoodCxlLlppKHQsbikpLHI9ZS5JaigzLG51bGwsbix0LG8pLGUuTWooKT8oYT1lLk5qKG4sbnVsbCksYT8oYS5uaihyKSxhLm9qKCkpOmUuSmoocikpOmUuSmoocikpOigrK2UuaixlLnFqKHQsZS5aaSh0LG4pKSxlLk1qKCkmJihhPWUuTmoobixudWxsKSxhJiZhLm9qKCkpKX1mdW5jdGlvbiBUMnQoZSx0KXt2YXIgbixyLGE7aWYodD09MClyZXR1cm4oZS5hWzBdJjEpIT0wO2lmKHQ8MCl0aHJvdyB1ZShuZXcgcXooIk5lZ2F0aXZlIGJpdCBhZGRyZXNzIikpO2lmKGE9dD4+NSxhPj1lLmQpcmV0dXJuIGUuZTwwO2lmKG49ZS5hW2FdLHQ9MTw8KHQmMzEpLGUuZTwwKXtpZihyPU1mdChlKSxhPHIpcmV0dXJuITE7cj09YT9uPS1uOm49fm59cmV0dXJuKG4mdCkhPTB9ZnVuY3Rpb24gREVuKGUsdCxuLHIpe3ZhciBhO2wobi5iLDY4KSxsKG4uYiw2OCksbChyLmIsNjgpLGwoci5iLDY4KSxhPW1hKEphKGwobi5iLDY4KS5jKSxsKHIuYiw2OCkuYyksUXEoYSxCcHQobChuLmIsNjgpLGwoci5iLDY4KSxhKSksbChyLmIsNjgpLGwoci5iLDY4KSxsKHIuYiw2OCkuYy5hK2EuYSxsKHIuYiw2OCkuYy5iK2EuYixsKHIuYiw2OCksVnUoci5hLG5ldyBrNGUoZSx0LHIpKX1mdW5jdGlvbiBBOWUoZSx0KXt2YXIgbixyLGEsbyxmLGcsdztpZihvPXQuZSxvKXtmb3Iobj1VdWUobykscj1sKGUuZyw2ODkpLGY9MDtmPGUuaTsrK2YpaWYodz1yW2ZdLGh1ZSh3KT09biYmKGE9KCF3LmQmJih3LmQ9bmV3IFlzKFdvLHcsMSkpLHcuZCksZz1sKG4uTWgoc2xlKG8sby5DYixvLkRiPj4xNikpLDE1KS5kZChvKSxnPGEuaSkpcmV0dXJuIEE5ZShlLGwoT2UoYSxnKSw4OSkpfXJldHVybiB0fWZ1bmN0aW9uIEQoZSx0LG4pe3ZhciByPXNLLGEsbz1yW2VdLGY9byBpbnN0YW5jZW9mIEFycmF5P29bMF06bnVsbDtvJiYhZj9oPW86KGg9KGE9dCYmdC5wcm90b3R5cGUsIWEmJihhPXNLW3RdKSxtMm4oYSkpLGguU209biwhdCYmKGguVG09eGUpLHJbZV09aCk7Zm9yKHZhciBnPTM7Zzxhcmd1bWVudHMubGVuZ3RoOysrZylhcmd1bWVudHNbZ10ucHJvdG90eXBlPWg7ZiYmKGguUm09Zil9ZnVuY3Rpb24ganIoZSl7Zm9yKHZhciB0OyFsKFhyKGUuYSksNTEpLk9iKCk7KXtpZihlLmQ9a3luKGUpLCFlLmQpcmV0dXJuITE7aWYoZS5hPWwoZS5kLlBiKCksNTEpLERlKGUuYSwzOCkpe2lmKHQ9bChlLmEsMzgpLGUuYT10LmEsIWUuYiYmKGUuYj1uZXcgejUpLGdiKGUuYixlLmQpLHQuYilmb3IoOyFsXyh0LmIpOylnYihlLmIsbChiZ24odC5iKSw1MSkpO2UuZD10LmR9fXJldHVybiEwfWZ1bmN0aW9uIEw5ZShlLHQpe3ZhciBuLHIsYSxvO2ZvcihhPTEsdC5qPSEwLG89bnVsbCxyPW5ldyBHKFo1KHQpKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMjE4KSxlLmNbbi5jXXx8KGUuY1tuLmNdPSEwLG89SFYobix0KSxuLmY/YSs9TDllKGUsbyk6IW8uaiYmbi5hPT1uLmUuZS1uLmQuZSYmKG4uZj0hMCxuYShlLnAsbiksYSs9TDllKGUsbykpKTtyZXR1cm4gYX1mdW5jdGlvbiBJRW4oZSl7dmFyIHQsbixyO2ZvcihuPW5ldyBHKGUuYS5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSw4Nikscj0obnIoMCksMCkscj4wJiYoIShVZyhlLmEuYykmJnQubi5kKSYmIShCNShlLmEuYykmJnQubi5iKSYmKHQuZy5kKz1iLk1hdGgubWF4KDAsci8yLS41KSksIShVZyhlLmEuYykmJnQubi5hKSYmIShCNShlLmEuYykmJnQubi5jKSYmKHQuZy5hLT1yLTEpKX1mdW5jdGlvbiBDMnQoZSl7dmFyIHQsbixyLGEsbztpZihhPW5ldyBidCxvPXltdChlLGEpLHQ9bChRKGUsKGZ0KCksamwpKSwxMCksdClmb3Iocj1uZXcgRyh0LmopO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxMikscWUoUShuLHppKSk9PT1xZShlKSYmKG89Yi5NYXRoLm1heChvLHltdChuLGEpKSk7cmV0dXJuIGEuYy5sZW5ndGg9PTB8fHJ0KGUsUjYsbyksbyE9LTE/YTpudWxsfWZ1bmN0aW9uIFMydChlLHQsbil7dmFyIHIsYSxvLGYsZyx3O289bChqdCh0LmUsMCksMTgpLmMscj1vLmksYT1yLmssdz1sKGp0KG4uZywwKSwxOCkuZCxmPXcuaSxnPWYuayxhPT0oWm4oKSxBYSk/cnQoZSwoZnQoKSxvMSksbChRKHIsbzEpLDEyKSk6cnQoZSwoZnQoKSxvMSksbyksZz09QWE/cnQoZSwoZnQoKSwkZiksbChRKGYsJGYpLDEyKSk6cnQoZSwoZnQoKSwkZiksdyl9ZnVuY3Rpb24gTTllKGUpe3ZhciB0LG4scjt0aGlzLmM9ZSxyPWwoUShlLChOdCgpLFJoKSksODgpLHQ9emUoR2UoUShlLGNXKSkpLG49emUoR2UoUShlLGlEZSkpKSxyPT0oSnMoKSx1Yyl8fHI9PXZjfHxyPT1KMT90aGlzLmI9dCpuOnRoaXMuYj0xLyh0Km4pLHRoaXMuaj16ZShHZShRKGUsVjYpKSksdGhpcy5lPXplKEdlKFEoZSxtMykpKSx0aGlzLmY9ZS5iLmMubGVuZ3RofWZ1bmN0aW9uIEQ5ZShlLHQpe3ZhciBuLHIsYSxvLGY7cmV0dXJuIHQmPTYzLG49ZS5oLHI9KG4mU1ApIT0wLHImJihufD0tMTA0ODU3NiksdDwyMj8oZj1uPj50LG89ZS5tPj50fG48PDIyLXQsYT1lLmw+PnR8ZS5tPDwyMi10KTp0PDQ0PyhmPXI/aHA6MCxvPW4+PnQtMjIsYT1lLm0+PnQtMjJ8bjw8NDQtdCk6KGY9cj9ocDowLG89cj9laDowLGE9bj4+dC00NCkscXUoYSZlaCxvJmVoLGYmaHApfWZ1bmN0aW9uIEd1ZShlKXt2YXIgdCxuLHIsYSxvLGY7Zm9yKHRoaXMuYz1uZXcgYnQsdGhpcy5kPWUscj1ncyxhPWdzLHQ9aWEsbj1pYSxmPVJyKGUsMCk7Zi5iIT1mLmQuYzspbz1sKEJyKGYpLDgpLHI9Yi5NYXRoLm1pbihyLG8uYSksYT1iLk1hdGgubWluKGEsby5iKSx0PWIuTWF0aC5tYXgodCxvLmEpLG49Yi5NYXRoLm1heChuLG8uYik7dGhpcy5hPW5ldyBlZihyLGEsdC1yLG4tYSl9ZnVuY3Rpb24gXzJ0KGUsdCl7dmFyIG4scixhLG8sZixnO2ZvcihvPW5ldyBHKGUuYik7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSwzMCksZz1uZXcgRyhhLmEpO2cuYTxnLmMuYy5sZW5ndGg7KWZvcihmPWwocmUoZyksMTApLGYuaz09KFpuKCksY3UpJiZUeChmLHQpLHI9bmV3IGhyKGRyKHFzKGYpLmEuS2MoKSxuZXcgaikpO2pyKHIpOyluPWwoeHIociksMTgpLHQwdChuLHQpfWZ1bmN0aW9uIE9FbihlLHQpe3ZhciBuLHIsYTtmb3IodC5VZygiTGF5ZXIgY29uc3RyYWludCBwcmVwcm9jZXNzaW5nIiwxKSxuPW5ldyBidCxhPW5ldyBVYShlLmEsMCk7YS5iPGEuZC5nYygpOylyPShtcihhLmI8YS5kLmdjKCkpLGwoYS5kLlhiKGEuYz1hLmIrKyksMTApKSxheW4ocikmJihweG4ociksJG4obi5jLHIpLHBoKGEpKTtuLmMubGVuZ3RoPT0wfHxydChlLChmdCgpLEgxZSksbiksdC5WZygpfWZ1bmN0aW9uIE5FbihlKXt2YXIgdCxuO2ZvcihlLmU9V2UoVnIsZGksMjgsZS5wLmMubGVuZ3RoLDE1LDEpLGUuaz1XZShWcixkaSwyOCxlLnAuYy5sZW5ndGgsMTUsMSksbj1uZXcgRyhlLnApO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxMCksZS5lW3QucF09WGcobmV3IGhyKGRyKGthKHQpLmEuS2MoKSxuZXcgaikpKSxlLmtbdC5wXT1YZyhuZXcgaHIoZHIocXModCkuYS5LYygpLG5ldyBqKSkpfWZ1bmN0aW9uIFBFbihlKXt2YXIgdCxuLHIsYSxvLGY7Zm9yKGE9MCxlLnE9bmV3IGJ0LHQ9bmV3IEtzLGY9bmV3IEcoZS5wKTtmLmE8Zi5jLmMubGVuZ3RoOyl7Zm9yKG89bChyZShmKSwxMCksby5wPWEscj1uZXcgaHIoZHIocXMobykuYS5LYygpLG5ldyBqKSk7anIocik7KW49bCh4cihyKSwxOCksbmEodCxuLmQuaSk7dC5hLkJjKG8pIT1udWxsLHZ0KGUucSxuZXcgVV8odCkpLHQuYS4kYigpLCsrYX19ZnVuY3Rpb24gQTJ0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2lmKGUuYS5mPjAmJkRlKHQsNDQpJiYoZS5hLl9qKCksRT1sKHQsNDQpLHc9RS5sZCgpLG89dz09bnVsbD8wOmVzKHcpLGY9UXllKGUuYSxvKSxuPWUuYS5kW2ZdLG4pKXtmb3Iocj1sKG4uZywzNzkpLEM9bi5pLGc9MDtnPEM7KytnKWlmKGE9cltnXSxhLkJpKCk9PW8mJmEuRmIoRSkpcmV0dXJuIEEydChlLEUpLCEwfXJldHVybiExfWZ1bmN0aW9uIEJFbihlKXt2YXIgdCxuLHIsYSxvLGYsZztpZih0PWUucWkoRmYpLHQmJihnPWVpKG4xKCghdC5iJiYodC5iPW5ldyBkaCgoVG4oKSxObyksWWMsdCkpLHQuYiksInNldHRpbmdEZWxlZ2F0ZXMiKSksZyE9bnVsbCkpe2ZvcihuPW5ldyBidCxhPUd5KGcsIlxcdysiKSxvPTAsZj1hLmxlbmd0aDtvPGY7KytvKXI9YVtvXSwkbihuLmMscik7cmV0dXJuIG59cmV0dXJuIENuKCksQ24oKSxfb31mdW5jdGlvbiBGRW4oZSl7dmFyIHQsbixyLGE7Zm9yKGE9bCgkaShlLmEsKFJ5KCksR0spKSwxNSkuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTA1KSxuPSh0PVc4KHIuayksdC5IYygoQ3QoKSxRbikpP3QuSGMoYXIpP3QuSGMoRHIpP3QuSGMoZXIpP251bGw6YXh0OmN4dDpveHQ6c3h0KSxWayhlLHIsblswXSwoT3coKSxhMyksMCksVmsoZSxyLG5bMV0sUmIsMSksVmsoZSxyLG5bMl0sbzMsMSl9ZnVuY3Rpb24gUkVuKGUsdCl7dmFyIG4scjtuPXZfbih0KSxzU24oZSx0LG4pLE9ndChlLmEsbChRKGVvKHQuYiksKGZ0KCksWHgpKSwyMzQpKSwkX24oZSksY3huKGUsdCkscj1XZShWcixkaSwyOCx0LmIuai5jLmxlbmd0aCwxNSwxKSxTbGUoZSx0LChDdCgpLFFuKSxyLG4pLFNsZShlLHQsYXIscixuKSxTbGUoZSx0LERyLHIsbiksU2xlKGUsdCxlcixyLG4pLGUuYT1udWxsLGUuYz1udWxsLGUuYj1udWxsfWZ1bmN0aW9uIEk5ZShlLHQsbil7c3dpdGNoKHQpe2Nhc2UgNzohZS5lJiYoZS5lPW5ldyBMbihqcyxlLDcsNCkpLCRyKGUuZSksIWUuZSYmKGUuZT1uZXcgTG4oanMsZSw3LDQpKSxBcyhlLmUsbChuLDE2KSk7cmV0dXJuO2Nhc2UgODohZS5kJiYoZS5kPW5ldyBMbihqcyxlLDgsNSkpLCRyKGUuZCksIWUuZCYmKGUuZD1uZXcgTG4oanMsZSw4LDUpKSxBcyhlLmQsbChuLDE2KSk7cmV0dXJufUN4ZShlLHQsbil9ZnVuY3Rpb24gTzllKGUsdCl7dmFyIG4scixhLG8sZjtpZihxZSh0KT09PXFlKGUpKXJldHVybiEwO2lmKCFEZSh0LDE1KXx8KGY9bCh0LDE1KSxlLmdjKCkhPWYuZ2MoKSkpcmV0dXJuITE7Zm9yKG89Zi5LYygpLHI9ZS5LYygpO3IuT2IoKTspaWYobj1yLlBiKCksYT1vLlBiKCksIShxZShuKT09PXFlKGEpfHxuIT1udWxsJiZQaShuLGEpKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBqRW4oZSx0KXt2YXIgbixyLGEsbztmb3Iobz1sKHljKERjKERjKG5ldyBibihudWxsLG5ldyBrbih0LmIsMTYpKSxuZXcgZlMpLG5ldyBkUyksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsWyhGbCgpLEVjKV0pKSksMTUpLG8uSmMobmV3IGdqKSxuPTAsYT1vLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDEyKSxyLnA9PS0xJiZOOWUoZSxyLG4rKyl9ZnVuY3Rpb24gTDJ0KGUpe3N3aXRjaChlLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IHRpZTtjYXNlIDE6cmV0dXJuIG5ldyBacmU7Y2FzZSAyOnJldHVybiBuZXcgZWllO2Nhc2UgMzpyZXR1cm4gbmV3IFhldDtjYXNlIDQ6cmV0dXJuIG5ldyBic3Q7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWW4oIk5vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIG5vZGUgcGxhY2VyICIrKGUuZiE9bnVsbD9lLmY6IiIrZS5nKSkpfX1mdW5jdGlvbiBNMnQoZSl7c3dpdGNoKGUuZyl7Y2FzZSAwOnJldHVybiBuZXcgUTRlO2Nhc2UgMTpyZXR1cm4gbmV3IFVyZTtjYXNlIDI6cmV0dXJuIG5ldyBvejtjYXNlIDM6cmV0dXJuIG5ldyBtODtjYXNlIDQ6cmV0dXJuIG5ldyAkdHQ7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWW4oIk5vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGN5Y2xlIGJyZWFrZXIgIisoZS5mIT1udWxsP2UuZjoiIitlLmcpKSl9fWZ1bmN0aW9uICRFbihlLHQpe3ZhciBuLHIsYSxvLGY7cj1uZXcgb3MsQ3Mocix0LHIuYy5iLHIuYyk7ZG8gZm9yKG49KG1yKHIuYiE9MCksbChhZihyLHIuYS5hKSw0MCkpLGUuYltuLmddPTEsbz1ScihuLmQsMCk7by5iIT1vLmQuYzspYT1sKEJyKG8pLDY1KSxmPWEuYyxlLmJbZi5nXT09MT91aShlLmEsYSk6ZS5iW2YuZ109PTI/ZS5iW2YuZ109MTpDcyhyLGYsci5jLmIsci5jKTt3aGlsZShyLmIhPTApfWZ1bmN0aW9uIHpFbihlLHQsbil7dmFyIHI7cj1udWxsLHQmJihyPXQuZCksUkEoZSxuZXcgSWsodC5uLmEtci5iK24uYSx0Lm4uYi1yLmQrbi5iKSksUkEoZSxuZXcgSWsodC5uLmEtci5iK24uYSx0Lm4uYit0Lm8uYityLmErbi5iKSksUkEoZSxuZXcgSWsodC5uLmErdC5vLmErci5jK24uYSx0Lm4uYi1yLmQrbi5iKSksUkEoZSxuZXcgSWsodC5uLmErdC5vLmErci5jK24uYSx0Lm4uYit0Lm8uYityLmErbi5iKSl9ZnVuY3Rpb24gTjllKGUsdCxuKXt2YXIgcixhLG87Zm9yKHQucD1uLG89cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbbmV3IFQ1KHQpLG5ldyBDOCh0KV0pKSk7anIobyk7KXI9bCh4cihvKSwxMiksci5wPT0tMSYmTjllKGUscixuKTtpZih0Lmkuaz09KFpuKCksQWEpKWZvcihhPW5ldyBHKHQuaS5qKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTIpLHIhPXQmJnIucD09LTEmJk45ZShlLHIsbil9ZnVuY3Rpb24gcUVuKGUsdCl7dmFyIG4scixhLG8sZixnO2ZvcihyPW5ldyBlMixmPUhIKG5ldyBJbChlLmcpKSxvPWYuYS5lYygpLktjKCk7by5PYigpOyl7aWYoYT1sKG8uUGIoKSwxMCksIWEpe3QuYmgoIlRoZXJlIGFyZSBubyBjbGFzc2VzIGluIGEgYmFsYW5jZWQgbGF5b3V0LiIpO2JyZWFrfWc9ZS5qW2EucF0sbj1sKEIxKHIsZyksMTUpLG58fChuPW5ldyBidCxoMihyLGcsbikpLG4uRmMoYSl9cmV0dXJuIHJ9ZnVuY3Rpb24gRDJ0KGUpe3ZhciB0LG4scixhLG87aWYoYT1sKHljKFY1ZShLNWUoZSkpLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxFYyldKSkpLDE1KSxyPXk2LGEuZ2MoKT49Milmb3Iobj1hLktjKCksdD1HZShuLlBiKCkpO24uT2IoKTspbz10LHQ9R2Uobi5QYigpKSxyPWIuTWF0aC5taW4ociwobnIodCksdC0obnIobyksbykpKTtyZXR1cm4gcn1mdW5jdGlvbiBIRW4oZSx0KXt2YXIgbixyLGE7Zm9yKGE9bmV3IGJ0LHI9UnIodC5hLDApO3IuYiE9ci5kLmM7KW49bChCcihyKSw2NSksbi5iLmc9PWUuZyYmIXZuKG4uYi5jLERHKSYmcWUoUShuLmIsKEhjKCksJGQpKSkhPT1xZShRKG4uYywkZCkpJiYhVzUobmV3IGJuKG51bGwsbmV3IGtuKGEsMTYpKSxuZXcgdVhlKG4pKSYmJG4oYS5jLG4pO3JldHVybiBWcyhhLG5ldyBOdGUpLGF9ZnVuY3Rpb24gVkVuKGUsdCl7dmFyIG4scixhO2lmKHFlKHQpPT09cWUoWHIoZSkpKXJldHVybiEwO2lmKCFEZSh0LDE1KXx8KHI9bCh0LDE1KSxhPWUuZ2MoKSxhIT1yLmdjKCkpKXJldHVybiExO2lmKERlKHIsNTkpKXtmb3Iobj0wO248YTtuKyspaWYoIXlkKGUuWGIobiksci5YYihuKSkpcmV0dXJuITE7cmV0dXJuITB9ZWxzZSByZXR1cm4gVTZuKGUuS2MoKSxyLktjKCkpfWZ1bmN0aW9uIFVFbihlLHQsbixyLGEsbyl7dmFyIGYsZyx3LEU7Zm9yKGc9IV9rKEZpKGUuT2MoKSxuZXcgV2wobmV3IFV2KSkpLkJkKChBbSgpLHp4KSksZj1lLG89PShKcygpLHdmKSYmKGY9bGYoZikpLEU9Zi5LYygpO0UuT2IoKTspdz1sKEUuUGIoKSw3Miksdy5uLmE9dC5hLGc/dy5uLmI9dC5iKyhyLmItdy5vLmIpLzI6YT93Lm4uYj10LmI6dy5uLmI9dC5iK3IuYi13Lm8uYix0LmErPXcuby5hK259ZnVuY3Rpb24gR0VuKGUsdCl7dmFyIG4scixhLG8sZjtmb3IodC5VZygiUG9ydCBzaWRlIHByb2Nlc3NpbmciLDEpLGY9bmV3IEcoZS5hKTtmLmE8Zi5jLmMubGVuZ3RoOylhPWwocmUoZiksMTApLFVtdChhKTtmb3Iocj1uZXcgRyhlLmIpO3IuYTxyLmMuYy5sZW5ndGg7KWZvcihuPWwocmUociksMzApLG89bmV3IEcobi5hKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTApLFVtdChhKTt0LlZnKCl9ZnVuY3Rpb24gS0VuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRTtpZihuKWZvcihvPW4uYS5sZW5ndGgscj1uZXcgRG0obyksZz0oci5iLXIuYSkqci5jPDA/KHNiKCksdG0pOm5ldyBjYihyKTtnLk9iKCk7KWY9bChnLlBiKCksMTcpLHc9SmsobixmLmEpLHcmJihFPU93bihZZyh3LEtmZSksdCksa2koZS5mLEUsdyksYT1QZCBpbiB3LmEsYSYmZkUoRSxZZyh3LFBkKSksbVUodyxFKSxoOWUodyxFKSl9ZnVuY3Rpb24gV0VuKGUsdCxuKXt2YXIgcixhLG8sZixnO2lmKGc9biwhZyYmKGc9QjRlKG5ldyBMOCwwKSksZy5VZyhMM3QsMSksX3Z0KGUuYyx0KSxmPUpNbihlLmEsdCksZi5nYygpPT0xKWN2dChsKGYuWGIoMCksMzYpLGcpO2Vsc2UgZm9yKG89MS9mLmdjKCksYT1mLktjKCk7YS5PYigpOyl7aWYocj1sKGEuUGIoKSwzNiksbi4kZygpKXJldHVybjtjdnQocixnLmVoKG8pKX1sdW4oZS5hLGYsdCksU1NuKHQpLGcuVmcoKX1mdW5jdGlvbiBJMnQoZSx0LG4pe3ZhciByLGEsbyxmLGc7aWYoYT1lLmYsIWEmJihhPWwoZS5hLmEuZWMoKS5LYygpLlBiKCksNjApKSxGQShhLHQsbiksZS5hLmEuZ2MoKSE9MSlmb3Iocj10Km4sZj1lLmEuYS5lYygpLktjKCk7Zi5PYigpOylvPWwoZi5QYigpLDYwKSxvIT1hJiYoZz1peChvKSxnLmYuZD8oby5kLmQrPXIrSDEsby5kLmEtPXIrSDEpOmcuZi5hJiYoby5kLmEtPXIrSDEpKX1mdW5jdGlvbiBLdWUoZSx0LG4scixhKXt2YXIgbyxmLGcsdyxFLEMsTCxCLHo7cmV0dXJuIGY9bi1lLGc9ci10LG89Yi5NYXRoLmF0YW4yKGYsZyksdz1vK0xoZSxFPW8tTGhlLEM9YSpiLk1hdGguc2luKHcpK2UsQj1hKmIuTWF0aC5jb3ModykrdCxMPWEqYi5NYXRoLnNpbihFKStlLHo9YSpiLk1hdGguY29zKEUpK3QsTzEoaGUobGUoRWEsMSksZHQsOCwwLFtuZXcgbHQoQyxCKSxuZXcgbHQoTCx6KV0pKX1mdW5jdGlvbiBZRW4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTDthPW4sQz10LG89QztkbyBvPWUuYVtvLnBdLGc9KEw9ZS5nW28ucF0semUoZS5wW0wucF0pK3plKGUuZFtvLnBdKS1vLmQuZCksdz1Zd24obyxyKSx3JiYoZj0oRT1lLmdbdy5wXSx6ZShlLnBbRS5wXSkremUoZS5kW3cucF0pK3cuby5iK3cuZC5hKSxhPWIuTWF0aC5taW4oYSxnLShmK2o1KGUuayxvLHcpKSkpO3doaWxlKEMhPW8pO3JldHVybiBhfWZ1bmN0aW9uIFhFbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMO2E9bixDPXQsbz1DO2RvIG89ZS5hW28ucF0sZj0oTD1lLmdbby5wXSx6ZShlLnBbTC5wXSkremUoZS5kW28ucF0pK28uby5iK28uZC5hKSx3PXR5bihvLHIpLHcmJihnPShFPWUuZ1t3LnBdLHplKGUucFtFLnBdKSt6ZShlLmRbdy5wXSktdy5kLmQpLGE9Yi5NYXRoLm1pbihhLGctKGYrajUoZS5rLG8sdykpKSk7d2hpbGUoQyE9byk7cmV0dXJuIGF9ZnVuY3Rpb24gTzJ0KGUsdCl7dmFyIG47aWYodC5VZygiRXF1YWwgV2hpdGVzcGFjZSBFbGltaW5hdG9yIiwxKSxQMShlLCh1ZygpLEdXKSkpaTRuKGwoYXQoZSxHVyksMTUpLHplKEdlKGF0KGUsWngpKSksKG49emUoR2UoYXQoZSxiTSkpKSx6ZShHZShhdChlLCh6MSgpLHdNKSkpKSxuKSk7ZWxzZSB0aHJvdyB1ZShuZXcgVnAoIlRoZSBncmFwaCBkb2VzIG5vdCBjb250YWluIHJvd3MuIikpO3QuVmcoKX1mdW5jdGlvbiBhdChlLHQpe3ZhciBuLHI7cmV0dXJuIHI9KCFlLm8mJihlLm89bmV3IHhsKChzdSgpLENnKSxMMixlLDApKSxuMShlLm8sdCkpLHI/PyhuPXQuU2coKSxEZShuLDQpJiYobj09bnVsbD8oIWUubyYmKGUubz1uZXcgeGwoKHN1KCksQ2cpLEwyLGUsMCkpLFlWKGUubyx0KSk6KCFlLm8mJihlLm89bmV3IHhsKChzdSgpLENnKSxMMixlLDApKSxHTihlLm8sdCxuKSkpLG4pfWZ1bmN0aW9uIHF5KCl7cXk9VSxFMD1uZXcgRDUoIkhfTEVGVCIsMCksbXA9bmV3IEQ1KCJIX0NFTlRFUiIsMSksVDA9bmV3IEQ1KCJIX1JJR0hUIiwyKSxTMD1uZXcgRDUoIlZfVE9QIiwzKSxFZz1uZXcgRDUoIlZfQ0VOVEVSIiw0KSxxZj1uZXcgRDUoIlZfQk9UVE9NIiw1KSxqaD1uZXcgRDUoIklOU0lERSIsNiksQzA9bmV3IEQ1KCJPVVRTSURFIiw3KSx6Zj1uZXcgRDUoIkhfUFJJT1JJVFkiLDgpfWZ1bmN0aW9uIFFFbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2lmKCF0LmYpdGhyb3cgdWUobmV3IFluKCJUaGUgaW5wdXQgZWRnZSBpcyBub3QgYSB0cmVlIGVkZ2UuIikpO2ZvcihvPW51bGwsYT1JaSxyPW5ldyBHKGUuZCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDIxOCksZz1uLmQsdz1uLmUsenVlKGUsZyx0KSYmIXp1ZShlLHcsdCkmJihmPXcuZS1nLmUtbi5hLGY8YSYmKGE9ZixvPW4pKTtyZXR1cm4gb31mdW5jdGlvbiBKRW4oZSl7dmFyIHQsbixyLGEsbyxmO2lmKCEoZS5mLmUuYy5sZW5ndGg8PTEpKXt0PTAsYT14MnQoZSksbj1ncztkb3tmb3IodD4wJiYoYT1uKSxmPW5ldyBHKGUuZi5lKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTUzKSwhUnQoQnQoUShvLChWTigpLHVBZSkpKSkmJihyPWhBbihlLG8pLE9pKFkwKG8uZCkscikpO249eDJ0KGUpfXdoaWxlKCFCZ24oZSx0KyssYSxuKSl9fWZ1bmN0aW9uIFpFbihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKG89ZS5nLmEsZj1lLmcuYixyPW5ldyBHKGUuZCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDcyKSxhPW4ubixlLmE9PShSMSgpLE1UKXx8ZS5pPT0oQ3QoKSxhcik/YS5hPW86ZS5hPT1EVHx8ZS5pPT0oQ3QoKSxlcik/YS5hPW8rZS5qLmEtbi5vLmE6YS5hPW8rKGUuai5hLW4uby5hKS8yLGEuYj1mLE9pKGEsdCksZis9bi5vLmIrZS5lfWZ1bmN0aW9uIGVUbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMO0U9ZSx3PWFBKEUsImluZGl2aWR1YWxTcGFjaW5ncyIpLHcmJihyPVAxKHQsKHBpKCkscjkpKSxmPSFyLGYmJihhPW5ldyBFSSxIaSh0LHI5LGEpKSxnPWwoYXQodCxyOSksMzg1KSxMPXcsbz1udWxsLEwmJihvPShDPWFjZShMLFdlKHp0LGR0LDIsMCw2LDEpKSxuZXcgYXNlKEwsQykpKSxvJiYobj1uZXcgVHR0KEwsZyksdG8obyxuKSkpfWZ1bmN0aW9uIHRUbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEI7cmV0dXJuIHc9bnVsbCxMPWUsQz1udWxsLChrNHQgaW4gTC5hfHxFNHQgaW4gTC5hfHwkRyBpbiBMLmEpJiYoRT1udWxsLEI9RDdlKHQpLGY9YUEoTCxrNHQpLG49bmV3IEtYZShCKSxiNW4obi5hLGYpLGc9YUEoTCxFNHQpLHI9bmV3IHJRZShCKSxtNW4oci5hLGcpLG89QXcoTCwkRyksYT1uZXcgYVFlKEIpLEU9KHR4bihhLmEsbyksbyksQz1FKSx3PUMsd31mdW5jdGlvbiBuVG4oZSx0KXt2YXIgbixyLGE7aWYodD09PWUpcmV0dXJuITA7aWYoRGUodCw1NTIpKXtpZihhPWwodCw4NDkpLGUuYS5kIT1hLmEuZHx8VjUoZSkuZ2MoKSE9VjUoYSkuZ2MoKSlyZXR1cm4hMTtmb3Iocj1WNShhKS5LYygpO3IuT2IoKTspaWYobj1sKHIuUGIoKSw0MjUpLFBvdChlLG4uYS5sZCgpKSE9bChuLmEubWQoKSwxNikuZ2MoKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiByVG4oZSl7dmFyIHQsbixyLGE7cmV0dXJuIHI9bChlLmEsMTcpLmEsYT1sKGUuYiwxNykuYSx0PXIsbj1hLHI9PTAmJmE9PTA/bi09MTpyPT0tMSYmYTw9MD8odD0wLG4tPTIpOnI8PTAmJmE+MD8odC09MSxuLT0xKTpyPj0wJiZhPDA/KHQrPTEsbis9MSk6cj4wJiZhPj0wPyh0LT0xLG4rPTEpOih0Kz0xLG4tPTEpLG5ldyBjYShwdCh0KSxwdChuKSl9ZnVuY3Rpb24gaVRuKGUsdCl7cmV0dXJuIGUuYzx0LmM/LTE6ZS5jPnQuYz8xOmUuYjx0LmI/LTE6ZS5iPnQuYj8xOmUuYSE9dC5hP2VzKGUuYSktZXModC5hKTplLmQ9PShvQSgpLHVNKSYmdC5kPT1jTT8tMTplLmQ9PWNNJiZ0LmQ9PXVNPzE6MH1mdW5jdGlvbiBOMnQoZSx0KXt2YXIgbixyLGEsbyxmO3JldHVybiBvPXQuYSxvLmMuaT09dC5iP2Y9by5kOmY9by5jLG8uYy5pPT10LmI/cj1vLmM6cj1vLmQsYT1TNW4oZS5hLGYsciksYT4wJiZhPHk2PyhuPVlFbihlLmEsci5pLGEsZS5jKSxMaHQoZS5hLHIuaSwtbiksbj4wKTphPDAmJi1hPHk2PyhuPVhFbihlLmEsci5pLC1hLGUuYyksTGh0KGUuYSxyLmksbiksbj4wKTohMX1mdW5jdGlvbiBzVG4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTDtmb3IoYT0odC1lLmQpL2UuYy5jLmxlbmd0aCxvPTAsZS5hKz1uLGUuZD10LEw9bmV3IEcoZS5jKTtMLmE8TC5jLmMubGVuZ3RoOylDPWwocmUoTCksMjcpLEU9Qy5nLHc9Qy5mLFV1KEMsQy5pK28qYSksR3UoQyxDLmorcipuKSxEdyhDLEMuZythKSxNdyhDLGUuYSksKytvLGc9Qy5nLGY9Qy5mLGM5ZShDLG5ldyBsdChnLGYpLG5ldyBsdChFLHcpKX1mdW5jdGlvbiBhVG4oZSl7dmFyIHQsbixyLGEsbyxmLGc7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtmb3IoZz1lLmxlbmd0aCxhPShnKzEpLzJ8MCxmPVdlKEFsLEM2LDI4LGEsMTUsMSksZyUyIT0wJiYoZlstLWFdPW5rZSgoWG4oZy0xLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoZy0xKSkpKSxuPTAscj0wO248YTsrK24pdD1ua2UoY28oZSxyKyspKSxvPW5rZShjbyhlLHIrKykpLGZbbl09KHQ8PDR8byk8PDI0Pj4yNDtyZXR1cm4gZn1mdW5jdGlvbiBvVG4oZSl7aWYoZS56ZSgpKXt2YXIgdD1lLmM7dC5BZSgpP2Uubz0iWyIrdC5uOnQuemUoKT9lLm89IlsiK3QueGUoKTplLm89IltMIit0LnhlKCkrIjsiLGUuYj10LndlKCkrIltdIixlLms9dC55ZSgpKyJbXSI7cmV0dXJufXZhciBuPWUuaixyPWUuZDtyPXIuc3BsaXQoIi8iKSxlLm89WGNlKCIuIixbbixYY2UoIiQiLHIpXSksZS5iPVhjZSgiLiIsW24sWGNlKCIuIixyKV0pLGUuaz1yW3IubGVuZ3RoLTFdfWZ1bmN0aW9uIGNUbihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKGY9bnVsbCxvPW5ldyBHKGUuZS5hKTtvLmE8by5jLmMubGVuZ3RoOylpZihhPWwocmUobyksMTI1KSxhLmIuYS5jLmxlbmd0aD09YS5nLmEuYy5sZW5ndGgpe2ZvcihyPWEuZSxmPXE5bihhKSxuPWEuZS1sKGYuYSwxNykuYSsxO248YS5lK2woZi5iLDE3KS5hO24rKyl0W25dPHRbcl0mJihyPW4pO3Rbcl08dFthLmVdJiYoLS10W2EuZV0sKyt0W3JdLGEuZT1yKX19ZnVuY3Rpb24gV3VlKGUpe3ZhciB0LG4scixhLG8sZixnLHc7Zm9yKGE9Z3Mscj1pYSxuPW5ldyBHKGUuZS5iKTtuLmE8bi5jLmMubGVuZ3RoOylmb3IodD1sKHJlKG4pLDMwKSxmPW5ldyBHKHQuYSk7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDEwKSx3PXplKGUucFtvLnBdKSxnPXcremUoZS5iW2UuZ1tvLnBdLnBdKSxhPWIuTWF0aC5taW4oYSx3KSxyPWIuTWF0aC5tYXgocixnKTtyZXR1cm4gci1hfWZ1bmN0aW9uIFAydChlKXtrbGUoKTt2YXIgdCxuLHIsYTtyZXR1cm4gcj1wZChlLGNsKDM1KSksdD1yPT0tMT9lOihHYSgwLHIsZS5sZW5ndGgpLGUuc3Vic3RyKDAscikpLG49cj09LTE/bnVsbDooWG4ocisxLGUubGVuZ3RoKzEpLGUuc3Vic3RyKHIrMSkpLGE9VG1uKFNQZSx0KSxhP24hPW51bGwmJihhPU0wdChhLChucihuKSxuKSkpOihhPVVJbih0KSxGbW4oU1BlLHQsYSksbiE9bnVsbCYmKGE9TTB0KGEsbikpKSxhfWZ1bmN0aW9uIFA5ZShlLHQsbixyKXt2YXIgYSxvLGYsZyx3O2ZvcihhPWhrZShlLHQpLGc9MCx3PWEuZ2MoKTtnPHc7KytnKWlmKG89bChhLlhiKGcpLDE3OSksdm4ocixXayhpYyhlLG8pKSkpe2lmKGY9SE8oaWMoZSxvKSksbj09bnVsbCl7aWYoZj09bnVsbClyZXR1cm4gb31lbHNlIGlmKHZuKG4sZikpcmV0dXJuIG99cmV0dXJuIG51bGx9ZnVuY3Rpb24gQjllKGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7Zm9yKGE9YWxlKGUsdCksZz0wLHc9YS5nYygpO2c8dzsrK2cpaWYobz1sKGEuWGIoZyksMTc5KSx2bihyLFdrKGljKGUsbykpKSl7aWYoZj1ITyhpYyhlLG8pKSxuPT1udWxsKXtpZihmPT1udWxsKXJldHVybiBvfWVsc2UgaWYodm4obixmKSlyZXR1cm4gb31yZXR1cm4gbnVsbH1mdW5jdGlvbiB1VG4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdztpZihmPW5ldyBYMixnPVd1KGUuZS5EaCgpLHQpLHI9bChlLmcsMTI0KSxGbygpLGwodCw2OSkueGsoKSlmb3Iobz0wO288ZS5pOysrbylhPXJbb10sZy5hbShhLkxrKCkpJiZxcihmLGEpO2Vsc2UgZm9yKG89MDtvPGUuaTsrK28pYT1yW29dLGcuYW0oYS5MaygpKSYmKHc9YS5tZCgpLHFyKGYsbj96QShlLHQsbyxmLmksdyk6dykpO3JldHVybiBhNmUoZil9ZnVuY3Rpb24gQjJ0KGUpe3ZhciB0LG4scixhLG8sZixnO2lmKGUmJih0PWUucWkoRmYpLHQmJihmPWVpKG4xKCghdC5iJiYodC5iPW5ldyBkaCgoVG4oKSxObyksWWMsdCkpLHQuYiksImNvbnZlcnNpb25EZWxlZ2F0ZXMiKSksZiE9bnVsbCkpKXtmb3IoZz1uZXcgYnQscj1HeShmLCJcXHcrIiksYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sJG4oZy5jLG4pO3JldHVybiBnfXJldHVybiBDbigpLENuKCksX299ZnVuY3Rpb24gRjJ0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRTtmb3IoZj10PT0xP3MxZTppMWUsbz1mLmEuZWMoKS5LYygpO28uT2IoKTspZm9yKGE9bChvLlBiKCksODgpLHc9bCgkaShlLmYuYyxhKSwyMSkuS2MoKTt3Lk9iKCk7KXN3aXRjaChnPWwody5QYigpLDQyKSxyPWwoZy5iLDg2KSxFPWwoZy5hLDE5NCksbj1FLmMsYS5nKXtjYXNlIDI6Y2FzZSAxOnIuZy5kKz1uO2JyZWFrO2Nhc2UgNDpjYXNlIDM6ci5nLmMrPW59fWZ1bmN0aW9uIGxUbihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKG49bmV3IExBKE5UKSxhPSh5eCgpLGhlKGxlKE5ULDEpLGl0LDIzMiwwLFtPVCxxTCxJVCxoNCxONixPNl0pKSxvPTAsZj1hLmxlbmd0aDtvPGY7KytvKXI9YVtvXSx0NGUobixyLG5ldyBidCk7cmV0dXJuIElzKGZjKEZpKERjKG5ldyBibihudWxsLG5ldyBrbihlLmIsMTYpKSxuZXcgVFopLG5ldyBnUyksbmV3IHRZZSh0KSksbmV3IG5ZZShuKSksbn1mdW5jdGlvbiBUVShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKG89dC5LYygpO28uT2IoKTspYT1sKG8uUGIoKSwyNyksQz1hLmkrYS5nLzIsQj1hLmorYS5mLzIsdz1lLmYsZj13Lmkrdy5nLzIsZz13Lmordy5mLzIsRT1DLWYsTD1CLWcscj1iLk1hdGguc3FydChFKkUrTCpMKSxFKj1lLmUvcixMKj1lLmUvcixuPyhDLT1FLEItPUwpOihDKz1FLEIrPUwpLFV1KGEsQy1hLmcvMiksR3UoYSxCLWEuZi8yKX1mdW5jdGlvbiBjNihlKXt2YXIgdCxuLHI7aWYoIWUuYyYmZS5iIT1udWxsKXtmb3IodD1lLmIubGVuZ3RoLTQ7dD49MDt0LT0yKWZvcihuPTA7bjw9dDtuKz0yKShlLmJbbl0+ZS5iW24rMl18fGUuYltuXT09PWUuYltuKzJdJiZlLmJbbisxXT5lLmJbbiszXSkmJihyPWUuYltuKzJdLGUuYltuKzJdPWUuYltuXSxlLmJbbl09cixyPWUuYltuKzNdLGUuYltuKzNdPWUuYltuKzFdLGUuYltuKzFdPXIpO2UuYz0hMH19ZnVuY3Rpb24gaFRuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2ZvcihFPS0xLEM9MCxmPWUsZz0wLHc9Zi5sZW5ndGg7Zzx3OysrZyl7Zm9yKG89ZltnXSxuPW5ldyBPaXQoRT09LTE/ZVswXTplW0VdLHQsKEVBKCksU1cpKSxyPTA7cjxvLmxlbmd0aDtyKyspZm9yKGE9cisxO2E8by5sZW5ndGg7YSsrKW5zKG9bcl0sKGZ0KCksS2kpKSYmbnMob1thXSxLaSkmJmR3dChuLG9bcl0sb1thXSk+MCYmKytDOysrRX1yZXR1cm4gQ31mdW5jdGlvbiBnMChlKXt2YXIgdCxuO3JldHVybiBuPW5ldyBUaChfbShlLlJtKSksbi5hKz0iQCIsaGkobiwodD1lcyhlKT4+PjAsdC50b1N0cmluZygxNikpKSxlLlZoKCk/KG4uYSs9IiAoZVByb3h5VVJJOiAiLHd1KG4sZS5faCgpKSxlLktoKCkmJihuLmErPSIgZUNsYXNzOiAiLHd1KG4sZS5LaCgpKSksbi5hKz0iKSIpOmUuS2goKSYmKG4uYSs9IiAoZUNsYXNzOiAiLHd1KG4sZS5LaCgpKSxuLmErPSIpIiksbi5hfWZ1bmN0aW9uIEhBKGUpe3ZhciB0LG4scixhO2lmKGUuZSl0aHJvdyB1ZShuZXcgbmMoKEdnKFIwZSkscGhlK1IwZS5rK2JoZSkpKTtmb3IoZS5kPT0oSnMoKSxKMSkmJlVVKGUsdWMpLG49bmV3IEcoZS5hLmEpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwzMTYpLHQuZz10Lmk7Zm9yKGE9bmV3IEcoZS5hLmIpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSw2MCksci5pPWlhO3JldHVybiBlLmIuY2YoZSksZX1mdW5jdGlvbiBmVG4oZSx0KXt2YXIgbixyLGEsbyxmO2lmKHQ8MiplLmIpdGhyb3cgdWUobmV3IFluKCJUaGUga25vdCB2ZWN0b3IgbXVzdCBoYXZlIGF0IGxlYXN0IHR3byB0aW1lIHRoZSBkaW1lbnNpb24gZWxlbWVudHMuIikpO2ZvcihlLmY9MSxhPTA7YTxlLmI7YSsrKXZ0KGUuZSwwKTtmb3IoZj10KzEtMiplLmIsbj1mLG89MTtvPGY7bysrKXZ0KGUuZSxvL24pO2lmKGUuZClmb3Iocj0wO3I8ZS5iO3IrKyl2dChlLmUsMSl9ZnVuY3Rpb24gUjJ0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2lmKEU9dCxDPWwodlYoVWFlKGUuaSksRSksMjcpLCFDKXRocm93IGE9WWcoRSxQZCksZz0iVW5hYmxlIHRvIGZpbmQgZWxrIG5vZGUgZm9yIGpzb24gb2JqZWN0ICciK2Esdz1nKyInIFBhbmljISIsdWUobmV3IGRkKHcpKTtvPUF3KEUsImVkZ2VzIiksbj1uZXcgYnR0KGUsQyksUWtuKG4uYSxuLmIsbyksZj1BdyhFLFdmZSkscj1uZXcgalhlKGUpLHQ4bihyLmEsZil9ZnVuY3Rpb24gajJ0KGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7aWYociE9bnVsbCl7aWYoYT1lLmRbdF0sYSl7Zm9yKG89YS5nLHc9YS5pLGc9MDtnPHc7KytnKWlmKGY9bChvW2ddLDEzNiksZi5CaSgpPT1uJiZQaShyLGYubGQoKSkpcmV0dXJuIGd9fWVsc2UgaWYoYT1lLmRbdF0sYSl7Zm9yKG89YS5nLHc9YS5pLGc9MDtnPHc7KytnKWlmKGY9bChvW2ddLDEzNikscWUoZi5sZCgpKT09PXFlKHIpKXJldHVybiBnfXJldHVybi0xfWZ1bmN0aW9uIFZFKGUsdCl7dmFyIG4scixhO3JldHVybiBuPXQ9PW51bGw/aGMoem8oZS5mLG51bGwpKTp5XyhlLmksdCksRGUobiwyNDEpPyhhPWwobiwyNDEpLGEuemkoKT09bnVsbCxhKTpEZShuLDUwNyk/KHI9bChuLDIwMzcpLGE9ci5hLGEmJihhLnliPT1udWxsfHwodD09bnVsbD9qdShlLmYsbnVsbCxhKTpCdyhlLmksdCxhKSkpLGEpOm51bGx9ZnVuY3Rpb24gZFRuKGUpe1o5ZSgpO3ZhciB0LG4scixhLG8sZixnO2lmKGU9PW51bGx8fChhPWUubGVuZ3RoLGElMiE9MCkpcmV0dXJuIG51bGw7Zm9yKHQ9aVYoZSksbz1hLzJ8MCxuPVdlKEFsLEM2LDI4LG8sMTUsMSkscj0wO3I8bztyKyspe2lmKGY9R01bdFtyKjJdXSxmPT0tMXx8KGc9R01bdFtyKjIrMV1dLGc9PS0xKSlyZXR1cm4gbnVsbDtuW3JdPShmPDw0fGcpPDwyND4+MjR9cmV0dXJuIG59ZnVuY3Rpb24gZ1RuKGUsdCxuKXt2YXIgcixhLG87aWYoYT1sKFFvKGUuaSx0KSwzMTQpLCFhKWlmKGE9bmV3IHlodChlLmQsdCxuKSxROChlLmksdCxhKSwkOGUodCkpdmhuKGUuYSx0LmMsdC5iLGEpO2Vsc2Ugc3dpdGNoKG89UTluKHQpLHI9bChRbyhlLnAsbyksMjUyKSxvLmcpe2Nhc2UgMTpjYXNlIDM6YS5qPSEwLFhpZShyLHQuYixhKTticmVhaztjYXNlIDQ6Y2FzZSAyOmEuaz0hMCxYaWUocix0LmMsYSl9cmV0dXJuIGF9ZnVuY3Rpb24gcFRuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2Zvcih3PWVnKGUuYy1lLmImZS5hLmxlbmd0aC0xKSxFPW51bGwsQz1udWxsLG89bmV3IG5BKGUpO28uYSE9by5iOylhPWwoRlYobyksMTApLG49KGc9bChRKGEsKGZ0KCksbzEpKSwxMiksZz9nLmk6bnVsbCkscj0oZj1sKFEoYSwkZiksMTIpLGY/Zi5pOm51bGwpLChFIT1ufHxDIT1yKSYmKG0ydCh3LHQpLEU9bixDPXIpLCRuKHcuYyxhKTttMnQodyx0KX1mdW5jdGlvbiBiVG4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFO2lmKGc9bmV3IFgyLHc9V3UoZS5lLkRoKCksdCksYT1sKGUuZywxMjQpLEZvKCksbCh0LDY5KS54aygpKWZvcihmPTA7ZjxlLmk7KytmKW89YVtmXSx3LmFtKG8uTGsoKSkmJnFyKGcsbyk7ZWxzZSBmb3IoZj0wO2Y8ZS5pOysrZilvPWFbZl0sdy5hbShvLkxrKCkpJiYoRT1vLm1kKCkscXIoZyxyP3pBKGUsdCxmLGcuaSxFKTpFKSk7cmV0dXJuIE84ZShnLG4pfWZ1bmN0aW9uICQydChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7aWYoYT1lLmJbdC5wXSxhPj0wKXJldHVybiBhO2ZvcihvPTEsZz1uZXcgRyh0LmopO2cuYTxnLmMuYy5sZW5ndGg7KWZvcihmPWwocmUoZyksMTIpLHI9bmV3IEcoZi5nKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTgpLEU9bi5kLmksdCE9RSYmKHc9JDJ0KGUsRSksbz1iLk1hdGgubWF4KG8sdysxKSk7cmV0dXJuIGg1bihlLHQsbyksb31mdW5jdGlvbiB6MnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2lmKGE9ZS5iW3QucF0sYT49MClyZXR1cm4gYTtmb3Iobz0xLGc9bmV3IEcodC5qKTtnLmE8Zy5jLmMubGVuZ3RoOylmb3IoZj1sKHJlKGcpLDEyKSxyPW5ldyBHKGYuZSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDE4KSxFPW4uYy5pLHQhPUUmJih3PXoydChlLEUpLG89Yi5NYXRoLm1heChvLHcrMSkpO3JldHVybiBxNm4oZSx0LG8pLG99ZnVuY3Rpb24gcTJ0KGUsdCxuKXt2YXIgcixhLG87Zm9yKHI9MTtyPGUuYy5sZW5ndGg7cisrKXtmb3Iobz0oU24ocixlLmMubGVuZ3RoKSxsKGUuY1tyXSwxMCkpLGE9cjthPjAmJnQuTmUoKFNuKGEtMSxlLmMubGVuZ3RoKSxsKGUuY1thLTFdLDEwKSksbyk+MDspcmYoZSxhLChTbihhLTEsZS5jLmxlbmd0aCksbChlLmNbYS0xXSwxMCkpKSwtLWE7U24oYSxlLmMubGVuZ3RoKSxlLmNbYV09b31uLmE9bmV3IFByLG4uYj1uZXcgUHJ9ZnVuY3Rpb24gbVRuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDO2ZvcihDPShyPWwodC5lJiZ0LmUoKSw5KSxuZXcgWmgocixsKGMwKHIsci5sZW5ndGgpLDkpLDApKSx3PUd5KG4sIltcXFtcXF1cXHMsXSsiKSxvPXcsZj0wLGc9by5sZW5ndGg7ZjxnOysrZilpZihhPW9bZl0sJHkoYSkubGVuZ3RoIT0wKXtpZihFPVhwdChlLGEpLEU9PW51bGwpcmV0dXJuIG51bGw7ZDAoQyxsKEUsMjIpKX1yZXR1cm4gQ31mdW5jdGlvbiB2VG4oZSl7dmFyIHQsbixyLGE7Zm9yKGE9ZS5sZW5ndGgsdD1udWxsLHI9MDtyPGE7cisrKW49KFhuKHIsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChyKSkscGQoIi4qKz97WygpfFxcXiQiLGNsKG4pKT49MD8odHx8KHQ9bmV3IGhfLHI+MCYmWG8odCwoR2EoMCxyLGUubGVuZ3RoKSxlLnN1YnN0cigwLHIpKSkpLHQuYSs9IlxcIixVayh0LG4mWnMpKTp0JiZVayh0LG4mWnMpO3JldHVybiB0P3QuYTplfWZ1bmN0aW9uIHdUbihlKXt2YXIgdCxuLHI7Zm9yKG49bmV3IEcoZS5hLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDg2KSxyPShucigwKSwwKSxyPjAmJighKFVnKGUuYS5jKSYmdC5uLmQpJiYhKEI1KGUuYS5jKSYmdC5uLmIpJiYodC5nLmQtPWIuTWF0aC5tYXgoMCxyLzItLjUpKSwhKFVnKGUuYS5jKSYmdC5uLmEpJiYhKEI1KGUuYS5jKSYmdC5uLmMpJiYodC5nLmErPWIuTWF0aC5tYXgoMCxyLTEpKSl9ZnVuY3Rpb24gSDJ0KGUsdCxuKXt2YXIgcixhO2lmKChlLmMtZS5iJmUuYS5sZW5ndGgtMSk9PTIpdD09KEN0KCksUW4pfHx0PT1hcj8odVYobCh3QShlKSwxNSksKEloKCksa2cpKSx1VihsKHdBKGUpLDE1KSxHYikpOih1VihsKHdBKGUpLDE1KSwoSWgoKSxHYikpLHVWKGwod0EoZSksMTUpLGtnKSk7ZWxzZSBmb3IoYT1uZXcgbkEoZSk7YS5hIT1hLmI7KXI9bChGVihhKSwxNSksdVYocixuKX1mdW5jdGlvbiB5VG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztmb3IoYT0kayhuZXcgeXdlKGUpKSxnPW5ldyBVYShhLGEuYy5sZW5ndGgpLG89JGsobmV3IHl3ZSh0KSksdz1uZXcgVWEobyxvLmMubGVuZ3RoKSxmPW51bGw7Zy5iPjAmJncuYj4wJiYobj0obXIoZy5iPjApLGwoZy5hLlhiKGcuYz0tLWcuYiksMjcpKSxyPShtcih3LmI+MCksbCh3LmEuWGIody5jPS0tdy5iKSwyNykpLG49PXIpOylmPW47cmV0dXJuIGZ9ZnVuY3Rpb24gVjJ0KGUsdCxuKXt2YXIgcixhLG8sZjtVb3QoZSx0KT5Vb3QoZSxuKT8ocj1PYyhuLChDdCgpLGFyKSksZS5kPXIuZGMoKT8wOlRhZShsKHIuWGIoMCksMTIpKSxmPU9jKHQsZXIpLGUuYj1mLmRjKCk/MDpUYWUobChmLlhiKDApLDEyKSkpOihhPU9jKG4sKEN0KCksZXIpKSxlLmQ9YS5kYygpPzA6VGFlKGwoYS5YYigwKSwxMikpLG89T2ModCxhciksZS5iPW8uZGMoKT8wOlRhZShsKG8uWGIoMCksMTIpKSl9ZnVuY3Rpb24gVTJ0KGUsdCl7dmFyIG4scixhLG87Zm9yKG49ZS5vLmEsbz1sKGwoJGkoZS5yLHQpLDIxKSw4NykuS2MoKTtvLk9iKCk7KWE9bChvLlBiKCksMTE3KSxhLmUuYT1uKnplKEdlKGEuYi5vZihwSykpKSxhLmUuYj0ocj1hLmIsci5wZigocGkoKSxyaCkpP3IuYWcoKT09KEN0KCksUW4pPy1yLk1mKCkuYi16ZShHZShyLm9mKHJoKSkpOnplKEdlKHIub2YocmgpKSk6ci5hZygpPT0oQ3QoKSxRbik/LXIuTWYoKS5iOjApfWZ1bmN0aW9uIHhUbihlLHQpe3ZhciBuLHIsYSxvO2Zvcih0LlVnKCJTZWxmLUxvb3AgcHJlLXByb2Nlc3NpbmciLDEpLHI9bmV3IEcoZS5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTApLG81bihuKSYmKGE9KG89bmV3IGlkdChuKSxydChuLChmdCgpLGgzKSxvKSxVX24obyksbyksSXMoZmMoRGMobmV3IGJuKG51bGwsbmV3IGtuKGEuZCwxNikpLG5ldyBDaiksbmV3IFNqKSxuZXcgSFopLFJDbihhKSk7dC5WZygpfWZ1bmN0aW9uIGtUbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O3Q9ITAsYT1udWxsLG89bnVsbDtlOmZvcih3PW5ldyBHKGUuYSk7dy5hPHcuYy5jLmxlbmd0aDspZm9yKGc9bChyZSh3KSwxMCkscj1uZXcgaHIoZHIoa2EoZykuYS5LYygpLG5ldyBqKSk7anIocik7KXtpZihuPWwoeHIociksMTgpLGEmJmEhPWcpe3Q9ITE7YnJlYWsgZX1pZihhPWcsZj1uLmMuaSxvJiZvIT1mKXt0PSExO2JyZWFrIGV9bz1mfXJldHVybiB0fWZ1bmN0aW9uIEVUbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3O2ZvcihvPS0xLGc9LTEsZj0wO2Y8dC5jLmxlbmd0aCYmKGE9KFNuKGYsdC5jLmxlbmd0aCksbCh0LmNbZl0sMzM5KSksIShhLmM+ZS5jKSk7ZisrKWEuYT49ZS5zJiYobzwwJiYobz1mKSxnPWYpO3JldHVybiB3PShlLnMrZS5jKS8yLG8+PTAmJihyPXVfbihlLHQsbyxnKSx3PW9sbigoU24ocix0LmMubGVuZ3RoKSxsKHQuY1tyXSwzMzkpKSksZ0VuKHQscixuKSksd31mdW5jdGlvbiBXcihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEU7Zm9yKGY9KG89bmV3IENJLG8pLGc3ZShmLChucih0KSx0KSksRT0oIWYuYiYmKGYuYj1uZXcgZGgoKFRuKCksTm8pLFljLGYpKSxmLmIpLHc9MTt3PG4ubGVuZ3RoO3crPTIpR04oRSxuW3ctMV0sblt3XSk7Zm9yKHI9KCFlLkFiJiYoZS5BYj1uZXcgbnQobWksZSwwLDMpKSxlLkFiKSxnPTA7ZzwwOysrZylhPWpnbihsKE9lKHIsci5pLTEpLDU5OCkpLHI9YTtxcihyLGYpfWZ1bmN0aW9uIEcydChlLHQsbil7dmFyIHIsYSxvO2ZvcihUZm4uY2FsbCh0aGlzLG5ldyBidCksdGhpcy5hPXQsdGhpcy5iPW4sdGhpcy5lPWUscj0oZS5iJiZnbGUoZSksZS5hKSx0aGlzLmQ9RWF0KHIuYSx0aGlzLmEpLHRoaXMuYz1FYXQoci5iLHRoaXMuYiksdjRuKHRoaXMsdGhpcy5kLHRoaXMuYyksVmtuKHRoaXMpLG89dGhpcy5lLmUuYS5lYygpLktjKCk7by5PYigpOylhPWwoby5QYigpLDI3MiksYS5jLmMubGVuZ3RoPjAmJnNNbih0aGlzLGEpfWZ1bmN0aW9uIEY5ZShlLHQsbixyLGEsbyl7dmFyIGYsZyx3O2lmKCFhW3QuYV0pe2ZvcihhW3QuYV09ITAsZj1yLCFmJiYoZj1uZXcgS0gpLHZ0KGYuZSx0KSx3PW9bdC5hXS5LYygpO3cuT2IoKTspZz1sKHcuUGIoKSwyOTApLCEoZy5kPT1ufHxnLmM9PW4pJiYoZy5jIT10JiZGOWUoZSxnLmMsdCxmLGEsbyksZy5kIT10JiZGOWUoZSxnLmQsdCxmLGEsbyksdnQoZi5jLGcpLHJhKGYuZCxnLmIpKTtyZXR1cm4gZn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBUVG4oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKHQ9MCxhPW5ldyBHKGUuZSk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE4KSxuPVc1KG5ldyBibihudWxsLG5ldyBrbihyLmIsMTYpKSxuZXcgb1opLG4mJisrdDtmb3IoZj1uZXcgRyhlLmcpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxOCksZz1XNShuZXcgYm4obnVsbCxuZXcga24oby5iLDE2KSksbmV3IGNaKSxnJiYrK3Q7cmV0dXJuIHQ+PTJ9ZnVuY3Rpb24gQ1RuKGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDO2ZvcihvPWUuYy5kLmosZj1sKGZmKG4sMCksOCksQz0xO0M8bi5iO0MrKylFPWwoZmYobixDKSw4KSxDcyhyLGYsci5jLmIsci5jKSxnPW1kKE9pKG5ldyBFbyhmKSxFKSwuNSksdz1tZChuZXcgYm9lKFU3ZShvKSksYSksT2koZyx3KSxDcyhyLGcsci5jLmIsci5jKSxmPUUsbz10PT0wPyRWKG8pOmY4ZShvKTt1aShyLChtcihuLmIhPTApLGwobi5jLmIuYyw4KSkpfWZ1bmN0aW9uIFNUbihlKXtxeSgpO3ZhciB0LG4scjtyZXR1cm4gbj1ycyhqaCxoZShsZShLbywxKSxpdCw5NSwwLFtDMF0pKSwhKHlOKE5IKG4sZSkpPjF8fCh0PXJzKEUwLGhlKGxlKEtvLDEpLGl0LDk1LDAsW21wLFQwXSkpLHlOKE5IKHQsZSkpPjEpfHwocj1ycyhTMCxoZShsZShLbywxKSxpdCw5NSwwLFtFZyxxZl0pKSx5TihOSChyLGUpKT4xKSl9ZnVuY3Rpb24gUjllKGUsdCxuKXt2YXIgcixhLG87Zm9yKG89bmV3IEcoZS50KTtvLmE8by5jLmMubGVuZ3RoOylyPWwocmUobyksMjc0KSxyLmIuczwwJiZyLmM+MCYmKHIuYi5uLT1yLmMsci5iLm48PTAmJnIuYi51PjAmJnVpKHQsci5iKSk7Zm9yKGE9bmV3IEcoZS5pKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMjc0KSxyLmEuczwwJiZyLmM+MCYmKHIuYS51LT1yLmMsci5hLnU8PTAmJnIuYS5uPjAmJnVpKG4sci5hKSl9ZnVuY3Rpb24gQ1UoZSl7dmFyIHQsbixyLGEsbztpZihlLmc9PW51bGwmJihlLmQ9ZS5iaihlLmYpLHFyKGUsZS5kKSxlLmMpKXJldHVybiBvPWUuZixvO2lmKHQ9bChlLmdbZS5pLTFdLDUxKSxhPXQuUGIoKSxlLmU9dCxuPWUuYmooYSksbi5PYigpKWUuZD1uLHFyKGUsbik7ZWxzZSBmb3IoZS5kPW51bGw7IXQuT2IoKSYmKFRzKGUuZywtLWUuaSxudWxsKSxlLmkhPTApOylyPWwoZS5nW2UuaS0xXSw1MSksdD1yO3JldHVybiBhfWZ1bmN0aW9uIF9UbihlLHQpe3ZhciBuLHIsYSxvLGYsZztpZihyPXQsYT1yLkxrKCksdXAoZS5lLGEpKXtpZihhLlNpKCkmJnFIKGUsYSxyLm1kKCkpKXJldHVybiExfWVsc2UgZm9yKGc9V3UoZS5lLkRoKCksYSksbj1sKGUuZywxMjQpLG89MDtvPGUuaTsrK28paWYoZj1uW29dLGcuYW0oZi5MaygpKSlyZXR1cm4gUGkoZixyKT8hMToobChuNihlLG8sdCksNzYpLCEwKTtyZXR1cm4gcXIoZSx0KX1mdW5jdGlvbiBBVG4oZSx0LG4scil7dmFyIGEsbyxmLGc7Zm9yKGE9bmV3IG9wKGUpLHgoYSwoWm4oKSxjdSkpLHJ0KGEsKGZ0KCksemkpLHQpLHJ0KGEsV0wscikscnQoYSwoTnQoKSxNcyksKFJhKCksTXUpKSxydChhLG8xLHQuYykscnQoYSwkZix0LmQpLHlidCh0LGEpLGc9Yi5NYXRoLmZsb29yKG4vMiksZj1uZXcgRyhhLmopO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxMiksby5uLmI9ZztyZXR1cm4gYX1mdW5jdGlvbiBLMnQoZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKHQ9MCxyPW5ldyBHKGUuYSk7ci5hPHIuYy5jLmxlbmd0aDspZm9yKG49bChyZShyKSwxMCksbz1uZXcgaHIoZHIocXMobikuYS5LYygpLG5ldyBqKSk7anIobyk7KWE9bCh4cihvKSwxOCksZT09YS5kLmkuYyYmYS5jLmo9PShDdCgpLGVyKSYmKGY9STEoYS5jKS5iLGc9STEoYS5kKS5iLHQ9Yi5NYXRoLm1heCh0LGIuTWF0aC5hYnMoZy1mKSkpO3JldHVybiB0fWZ1bmN0aW9uIFcydChlLHQsbil7dmFyIHIsYSxvLGYsZztmb3Iobi5VZygiRUxLIEZvcmNlIiwxKSxSdChCdChhdCh0LChiMCgpLHRBZSkpKSl8fEtPKChyPW5ldyBZdigoYXcoKSxuZXcgSnYodCkpKSxyKSksZz11MHQodCksVzduKGcpLGJ5bihlLGwoUShnLGVBZSksNDMyKSksZj0kbXQoZS5hLGcpLG89Zi5LYygpO28uT2IoKTspYT1sKG8uUGIoKSwyMzUpLHdBbihlLmIsYSxuLmVoKDEvZi5nYygpKSk7Zz1ld3QoZiksbHd0KGcpLG4uVmcoKX1mdW5jdGlvbiBqOWUoZSx0LG4pe3N3aXRjaChuLmcpe2Nhc2UgMTpyZXR1cm4gbmV3IGx0KHQuYSxiLk1hdGgubWluKGUuZC5iLHQuYikpO2Nhc2UgMjpyZXR1cm4gbmV3IGx0KGIuTWF0aC5tYXgoZS5jLmEsdC5hKSx0LmIpO2Nhc2UgMzpyZXR1cm4gbmV3IGx0KHQuYSxiLk1hdGgubWF4KGUuYy5iLHQuYikpO2Nhc2UgNDpyZXR1cm4gbmV3IGx0KGIuTWF0aC5taW4odC5hLGUuZC5hKSx0LmIpfXJldHVybiBuZXcgbHQodC5hLHQuYil9ZnVuY3Rpb24gc1AoZSl7dmFyIHQsbixyO2Zvcih0PWVnKDErKCFlLmMmJihlLmM9bmV3IG50KEhsLGUsOSw5KSksZS5jKS5pKSx2dCh0LCghZS5kJiYoZS5kPW5ldyBMbihqcyxlLDgsNSkpLGUuZCkpLHI9bmV3IG9yKCghZS5jJiYoZS5jPW5ldyBudChIbCxlLDksOSkpLGUuYykpO3IuZSE9ci5pLmdjKCk7KW49bChncihyKSwxMjMpLHZ0KHQsKCFuLmQmJihuLmQ9bmV3IExuKGpzLG4sOCw1KSksbi5kKSk7cmV0dXJuIFhyKHQpLG5ldyBQXyh0KX1mdW5jdGlvbiBjcChlKXt2YXIgdCxuLHI7Zm9yKHQ9ZWcoMSsoIWUuYyYmKGUuYz1uZXcgbnQoSGwsZSw5LDkpKSxlLmMpLmkpLHZ0KHQsKCFlLmUmJihlLmU9bmV3IExuKGpzLGUsNyw0KSksZS5lKSkscj1uZXcgb3IoKCFlLmMmJihlLmM9bmV3IG50KEhsLGUsOSw5KSksZS5jKSk7ci5lIT1yLmkuZ2MoKTspbj1sKGdyKHIpLDEyMyksdnQodCwoIW4uZSYmKG4uZT1uZXcgTG4oanMsbiw3LDQpKSxuLmUpKTtyZXR1cm4gWHIodCksbmV3IFBfKHQpfWZ1bmN0aW9uIExUbihlKXt2YXIgdCxuLHIsYTtpZihlPT1udWxsKXJldHVybiBudWxsO2lmKHI9VHUoZSwhMCksYT1lQi5sZW5ndGgsdm4oci5zdWJzdHIoci5sZW5ndGgtYSxhKSxlQikpe2lmKG49ci5sZW5ndGgsbj09NCl7aWYodD0oWG4oMCxyLmxlbmd0aCksci5jaGFyQ29kZUF0KDApKSx0PT00MylyZXR1cm4gR1BlO2lmKHQ9PTQ1KXJldHVybiB2QXR9ZWxzZSBpZihuPT0zKXJldHVybiBHUGV9cmV0dXJuIGp5KHIpfWZ1bmN0aW9uIE1UbihlLHQpe3ZhciBuLHIsYSxvLGY7aWYodC5VZygiQnJlYWtpbmcgUG9pbnQgUHJvY2Vzc29yIiwxKSxkRG4oZSksUnQoQnQoUShlLChOdCgpLHVEZSkpKSkpe2ZvcihhPW5ldyBHKGUuYik7YS5hPGEuYy5jLmxlbmd0aDspZm9yKHI9bChyZShhKSwzMCksbj0wLGY9bmV3IEcoci5hKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTApLG8ucD1uKys7Y0xuKGUpLGZidChlLCEwKSxmYnQoZSwhMSl9dC5WZygpfWZ1bmN0aW9uIERUbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKEw9cj8oQ3QoKSxlcik6KEN0KCksYXIpLGE9ITEsdz10W25dLEU9MCxDPXcubGVuZ3RoO0U8QzsrK0UpZz13W0VdLCFVOChsKFEoZywoTnQoKSxNcykpLDEwMSkpJiYoZj1nLmUsQj0hT2MoZyxMKS5kYygpJiYhIWYsQiYmKG89SXhlKGYpLGUuYj1uZXcgTnhlKG8scj8wOm8ubGVuZ3RoLTEpKSxhPWF8dlNuKGUsZyxMLEIpKTtyZXR1cm4gYX1mdW5jdGlvbiBZMnQoZSx0LG4scil7dmFyIGEsbyxmO2lmKGY9a3hlKHQsbiksJG4oci5jLHQpLGUualtmLnBdPT0tMXx8ZS5qW2YucF09PTJ8fGUuYVt0LnBdKXJldHVybiByO2ZvcihlLmpbZi5wXT0tMSxvPW5ldyBocihkcihzcChmKS5hLktjKCksbmV3IGopKTtqcihvKTspaWYoYT1sKHhyKG8pLDE4KSwhKCEoIURvKGEpJiYhKCFEbyhhKSYmYS5jLmkuYz09YS5kLmkuYykpfHxhPT10KSlyZXR1cm4gWTJ0KGUsYSxmLHIpO3JldHVybiByfWZ1bmN0aW9uIElUbihlKXt2YXIgdCxuLHIsYTtmb3IodD0wLG49MCxhPW5ldyBHKGUuaik7YS5hPGEuYy5jLmxlbmd0aDspaWYocj1sKHJlKGEpLDEyKSx0PVlyKGJvKHQsanV0KEZpKG5ldyBibihudWxsLG5ldyBrbihyLmUsMTYpKSxuZXcgczgpKSkpLG49WXIoYm8obixqdXQoRmkobmV3IGJuKG51bGwsbmV3IGtuKHIuZywxNikpLG5ldyBRaikpKSksdD4xfHxuPjEpcmV0dXJuIDI7cmV0dXJuIHQrbj09MT8yOjB9ZnVuY3Rpb24gSmwoZSx0KXt2YXIgbixyLGEsbyxmLGc7cmV0dXJuIG89ZS5hKmhoZStlLmIqMTUwMixnPWUuYipoaGUrMTEsbj1iLk1hdGguZmxvb3IoZypNUCksbys9bixnLT1uKmNFZSxvJT1jRWUsZS5hPW8sZS5iPWcsdDw9MjQ/Yi5NYXRoLmZsb29yKGUuYSptX2VbdF0pOihhPWUuYSooMTw8dC0yNCksZj1iLk1hdGguZmxvb3IoZS5iKnZfZVt0XSkscj1hK2Yscj49MjE0NzQ4MzY0OCYmKHItPTQyOTQ5NjcyOTYpLHIpfWZ1bmN0aW9uIFgydChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEU7Zm9yKG89bmV3IGJ0LEU9bmV3IG9zLGY9bmV3IG9zLFlBbihlLEUsZix0KSxfTW4oZSxFLGYsdCxuKSx3PW5ldyBHKGUpO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihnPWwocmUodyksMTE4KSxhPW5ldyBHKGcuayk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDEzMiksKCF0fHxyLmM9PShKMCgpLHFiKSkmJmcuZz5yLmIuZyYmJG4oby5jLHIpO3JldHVybiBvfWZ1bmN0aW9uIE9UbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3O2ZvcihnPWUuYyxmPShuLnE/bi5xOihDbigpLENuKCksbWcpKS52YygpLktjKCk7Zi5PYigpOylvPWwoZi5QYigpLDQ0KSxyPSFfayhGaShuZXcgYm4obnVsbCxuZXcga24oZywxNikpLG5ldyBXbChuZXcgYXR0KHQsbykpKSkuQmQoKEFtKCksengpKSxyJiYodz1vLm1kKCksRGUodyw0KSYmKGE9SDhlKHcpLGEhPW51bGwmJih3PWEpKSx0LnFmKGwoby5sZCgpLDE0OSksdykpfWZ1bmN0aW9uIE5UbihlLHQsbil7dmFyIHIsYTtpZihxTyhlLmIpLFgwKGUuYiwoUE4oKSxXVyksKGJfKCkscUIpKSxYMChlLmIsWVcsdC5nKSxYMChlLmIsWFcsdC5hKSxlLmE9YlAoZS5iLHQpLG4uVWcoIkNvbXBhY3Rpb24gYnkgc2hyaW5raW5nIGEgdHJlZSIsZS5hLmMubGVuZ3RoKSx0LmkuYy5sZW5ndGg+MSlmb3IoYT1uZXcgRyhlLmEpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSw0Nyksci5LZih0LG4uZWgoMSkpO24uVmcoKX1mdW5jdGlvbiAkOWUoZSx0LG4pe3ZhciByLGEsbztpZihvPWc2KChFbCgpLGlvKSxlLkRoKCksdCksbyl7aWYoRm8oKSwhbChvLDY5KS54aygpJiYobz1yeChpYyhpbyxvKSksIW8pKXRocm93IHVlKG5ldyBZbihPYit0LnhlKCkra0wpKTthPShyPWUuSWgobyksbChyPj0wP2UuTGgociwhMCwhMCk6SHcoZSxvLCEwKSwxNjApKSxsKGEsMjIwKS5YbCh0LG4pfWVsc2UgdGhyb3cgdWUobmV3IFluKE9iK3QueGUoKStrTCkpfWZ1bmN0aW9uIFNVKGUsdCl7dmFyIG4scixhLG8sZjtpZih0KXtmb3Iobz1EZShlLkNiLDkwKXx8RGUoZS5DYiwxMDIpLGY9IW8mJkRlKGUuQ2IsMzMxKSxyPW5ldyBvcigoIXQuYSYmKHQuYT1uZXcgR18odCxXbyx0KSksdC5hKSk7ci5lIT1yLmkuZ2MoKTspaWYobj1sKGdyKHIpLDg5KSxhPWpVKG4pLG8/RGUoYSw5MCk6Zj9EZShhLDE1Nik6YSlyZXR1cm4gYTtyZXR1cm4gbz8oVG4oKSxLZik6KFRuKCksdGQpfWVsc2UgcmV0dXJuIG51bGx9ZnVuY3Rpb24gUFRuKGUsdCl7dmFyIG4scixhLG87Zm9yKHQuVWcoIlJlc2l6ZSBjaGlsZCBncmFwaCB0byBmaXQgcGFyZW50LiIsMSkscj1uZXcgRyhlLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwzMCkscmEoZS5hLG4uYSksbi5hLmMubGVuZ3RoPTA7Zm9yKG89bmV3IEcoZS5hKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTApLFZhKGEsbnVsbCk7ZS5iLmMubGVuZ3RoPTAsdFNuKGUpLGUuZSYmSl9uKGUuZSxlKSx0LlZnKCl9ZnVuY3Rpb24gQlRuKGUsdCl7dmFyIG4scixhLG8sZjtmb3IodC5VZygiRWRnZSBqb2luaW5nIiwxKSxuPVJ0KEJ0KFEoZSwoTnQoKSxsZGUpKSkpLGE9bmV3IEcoZS5iKTthLmE8YS5jLmMubGVuZ3RoOylmb3Iocj1sKHJlKGEpLDMwKSxmPW5ldyBVYShyLmEsMCk7Zi5iPGYuZC5nYygpOylvPShtcihmLmI8Zi5kLmdjKCkpLGwoZi5kLlhiKGYuYz1mLmIrKyksMTApKSxvLms9PShabigpLEFhKSYmKENsZShvLG4pLHBoKGYpKTt0LlZnKCl9ZnVuY3Rpb24gRlRuKGUsdCl7dmFyIG4scixhLG8sZjtmb3Iobj1uZXcgYnQsYT1EYyhuZXcgYm4obnVsbCxuZXcga24oZSwxNikpLG5ldyB4dGUpLG89RGMobmV3IGJuKG51bGwsbmV3IGtuKGUsMTYpKSxuZXcga3RlKSxmPUt2bihodm4oeHkoYkNuKGhlKGxlKHBPbiwxKSxSbiw4NDgsMCxbYSxvXSkpLG5ldyBFdGUpKSkscj0xO3I8Zi5sZW5ndGg7cisrKWZbcl0tZltyLTFdPj0yKnQmJnZ0KG4sbmV3IHZhZShmW3ItMV0rdCxmW3JdLXQpKTtyZXR1cm4gbn1mdW5jdGlvbiBSVG4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7aWYobilmb3Iobz1uLmEubGVuZ3RoLHI9bmV3IERtKG8pLGc9KHIuYi1yLmEpKnIuYzwwPyhzYigpLHRtKTpuZXcgY2Iocik7Zy5PYigpOylmPWwoZy5QYigpLDE3KSxhPUprKG4sZi5hKSxhJiYodz1nbW4oZSwoRT0ocmIoKSxDPW5ldyBqd2UsQyksdCYmejllKEUsdCksRSksYSksZkUodyxZZyhhLFBkKSksbVUoYSx3KSxoOWUoYSx3KSx3Y2UoZSxhLHcpKX1mdW5jdGlvbiBfVShlKXt2YXIgdCxuLHIsYSxvLGY7aWYoIWUuail7aWYoZj1uZXcgSVMsdD1xTSxvPXQuYS56YyhlLHQpLG89PW51bGwpe2ZvcihyPW5ldyBvcihkYyhlKSk7ci5lIT1yLmkuZ2MoKTspbj1sKGdyKHIpLDI5KSxhPV9VKG4pLEFzKGYsYSkscXIoZixuKTt0LmEuQmMoZSkhPW51bGx9SXkoZiksZS5qPW5ldyBONSgobChPZSh0dCgobGIoKSxWbikubyksMTEpLDE5KSxmLmkpLGYuZyksWWwoZSkuYiY9LTMzfXJldHVybiBlLmp9ZnVuY3Rpb24galRuKGUpe3ZhciB0LG4scixhO2lmKGU9PW51bGwpcmV0dXJuIG51bGw7aWYocj1UdShlLCEwKSxhPWVCLmxlbmd0aCx2bihyLnN1YnN0cihyLmxlbmd0aC1hLGEpLGVCKSl7aWYobj1yLmxlbmd0aCxuPT00KXtpZih0PShYbigwLHIubGVuZ3RoKSxyLmNoYXJDb2RlQXQoMCkpLHQ9PTQzKXJldHVybiBLUGU7aWYodD09NDUpcmV0dXJuIHdBdH1lbHNlIGlmKG49PTMpcmV0dXJuIEtQZX1yZXR1cm4gbmV3IEF3ZShyKX1mdW5jdGlvbiAkVG4oZSl7dmFyIHQsbixyO3JldHVybiBuPWUubCxuJm4tMXx8KHI9ZS5tLHImci0xKXx8KHQ9ZS5oLHQmdC0xKXx8dD09MCYmcj09MCYmbj09MD8tMTp0PT0wJiZyPT0wJiZuIT0wP2k3ZShuKTp0PT0wJiZyIT0wJiZuPT0wP2k3ZShyKSsyMjp0IT0wJiZyPT0wJiZuPT0wP2k3ZSh0KSs0NDotMX1mdW5jdGlvbiB1NihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKGE9dC5hJmUuZixvPW51bGwscj1lLmJbYV07O3I9ci5iKXtpZihyPT10KXtvP28uYj10LmI6ZS5iW2FdPXQuYjticmVha31vPXJ9Zm9yKGY9dC5mJmUuZixvPW51bGwsbj1lLmNbZl07O249bi5kKXtpZihuPT10KXtvP28uZD10LmQ6ZS5jW2ZdPXQuZDticmVha31vPW59dC5lP3QuZS5jPXQuYzplLmE9dC5jLHQuYz90LmMuZT10LmU6ZS5lPXQuZSwtLWUuaSwrK2UuZ31mdW5jdGlvbiB6VG4oZSx0KXt2YXIgbjt0LmQ/dC5kLmI9dC5iOmUuYT10LmIsdC5iP3QuYi5kPXQuZDplLmU9dC5kLCF0LmUmJiF0LmM/KG49bChMZihsKGF4KGUuYix0LmEpLDI2MCkpLDI2MCksbi5hPTAsKytlLmMpOihuPWwoTGYobChjcihlLmIsdC5hKSwyNjApKSwyNjApLC0tbi5hLHQuZT90LmUuYz10LmM6bi5iPWwoTGYodC5jKSw1MTEpLHQuYz90LmMuZT10LmU6bi5jPWwoTGYodC5lKSw1MTEpKSwtLWUuZH1mdW5jdGlvbiBxVG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEM7Zm9yKG49ZS5vLHQ9ZS5wLGY9SWksYT1sbyxnPUlpLG89bG8sRT0wO0U8bjsrK0UpZm9yKEM9MDtDPHQ7KytDKXI2KGUsRSxDKSYmKGY9Yi5NYXRoLm1pbihmLEUpLGE9Yi5NYXRoLm1heChhLEUpLGc9Yi5NYXRoLm1pbihnLEMpLG89Yi5NYXRoLm1heChvLEMpKTtyZXR1cm4gdz1hLWYrMSxyPW8tZysxLG5ldyBTYXQocHQoZikscHQoZykscHQodykscHQocikpfWZ1bmN0aW9uIFl1ZShlLHQpe3ZhciBuLHIsYSxvO2ZvcihvPW5ldyBVYShlLDApLG49KG1yKG8uYjxvLmQuZ2MoKSksbChvLmQuWGIoby5jPW8uYisrKSwxNDgpKTtvLmI8by5kLmdjKCk7KXI9KG1yKG8uYjxvLmQuZ2MoKSksbChvLmQuWGIoby5jPW8uYisrKSwxNDgpKSxhPW5ldyBMNGUoci5jLG4uZCx0KSxtcihvLmI+MCksby5hLlhiKG8uYz0tLW8uYiksYnkobyxhKSxtcihvLmI8by5kLmdjKCkpLG8uZC5YYihvLmM9by5iKyspLGEuYT0hMSxuPXJ9ZnVuY3Rpb24gUTJ0KGUpe3ZhciB0LG4scixhLG8sZjtmb3IoYT1sKFEoZSwoZnQoKSxyVykpLDEyKSxmPW5ldyBHKGUuaik7Zi5hPGYuYy5jLmxlbmd0aDspe2ZvcihvPWwocmUoZiksMTIpLHI9bmV3IEcoby5nKTtyLmE8ci5jLmMubGVuZ3RoOylyZXR1cm4gdD1sKHJlKHIpLDE4KSxGYSh0LGEpLG87Zm9yKG49bmV3IEcoby5lKTtuLmE8bi5jLmMubGVuZ3RoOylyZXR1cm4gdD1sKHJlKG4pLDE4KSxwbyh0LGEpLG99cmV0dXJuIG51bGx9ZnVuY3Rpb24gSjJ0KGUsdCxuKXt2YXIgcixhLG8sZixnLHc7Zm9yKHc9bChkeShlLmEsdCksMTcpLmEsbj9PeGUoZS5hLHB0KHcrMSksdCk6T3hlKGUuYSxwdCh3LTEpLHQpLGY9bmV3IGJkLGE9bmV3IGhyKGRyKChuP3FzKHQpOmthKHQpKS5hLktjKCksbmV3IGopKTtqcihhKTspcj1sKHhyKGEpLDE4KSxuP289ci5kLmk6bz1yLmMuaSxxZShkeShlLmEsbykpPT09cWUoZHkoZS5hLHQpKSYmKGc9Zi5hLnpjKG8sZiksZz09bnVsbCk7cmV0dXJuIGZ9ZnVuY3Rpb24gSFRuKGUsdCxuKXt2YXIgcixhO3I9WmMobi5xLmdldFRpbWUoKSksaXUociwwKTwwPyhhPWIyLVlyKFJOKHIyKHIpLGIyKSksYT09YjImJihhPTApKTphPVlyKFJOKHIsYjIpKSx0PT0xPyhhPWIuTWF0aC5taW4oKGErNTApLzEwMHwwLDkpLGhiKGUsNDgrYSZacykpOnQ9PTI/KGE9Yi5NYXRoLm1pbigoYSs1KS8xMHwwLDk5KSxhZyhlLGEsMikpOihhZyhlLGEsMyksdD4zJiZhZyhlLDAsdC0zKSl9ZnVuY3Rpb24gVlRuKGUpe3ZhciB0LG4scixhO3JldHVybiBxZShRKGUsKE50KCkscDQpKSk9PT1xZSgocnAoKSxBMikpPyFlLmUmJnFlKFEoZSxUQikpIT09cWUoKHZFKCksdkIpKToocj1sKFEoZSxaMWUpLDI5OSksYT1SdChCdChRKGUsZWRlKSkpfHxxZShRKGUsSkwpKT09PXFlKChkQSgpLG1CKSksdD1sKFEoZSxTTWUpLDE3KS5hLG49ZS5hLmMubGVuZ3RoLCFhJiZyIT0odkUoKSx2QikmJih0PT0wfHx0Pm4pKX1mdW5jdGlvbiBVVG4oZSl7dmFyIHQsbjtmb3Iobj0wO248ZS5jLmxlbmd0aCYmIShWaXQoKFNuKG4sZS5jLmxlbmd0aCksbChlLmNbbl0sMTEzKSkpPjApO24rKyk7aWYobj4wJiZuPGUuYy5sZW5ndGgtMSlyZXR1cm4gbjtmb3IodD0wO3Q8ZS5jLmxlbmd0aCYmIShWaXQoKFNuKHQsZS5jLmxlbmd0aCksbChlLmNbdF0sMTEzKSkpPjApO3QrKyk7cmV0dXJuIHQ+MCYmbjxlLmMubGVuZ3RoLTE/dDplLmMubGVuZ3RoLzJ8MH1mdW5jdGlvbiBaMnQoZSx0KXt2YXIgbixyO2lmKHQhPWUuQ2J8fGUuRGI+PjE2IT02JiZ0KXtpZihGRShlLHQpKXRocm93IHVlKG5ldyBZbihFTCtkMnQoZSkpKTtyPW51bGwsZS5DYiYmKHI9KG49ZS5EYj4+MTYsbj49MD9seGUoZSxyKTplLkNiLlRoKGUsLTEtbixudWxsLHIpKSksdCYmKHI9bXgodCxlLDYscikpLHI9V3llKGUsdCxyKSxyJiZyLm9qKCl9ZWxzZSBlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgX2EoZSwxLDYsdCx0KSl9ZnVuY3Rpb24gQVUoZSx0KXt2YXIgbixyO2lmKHQhPWUuQ2J8fGUuRGI+PjE2IT0zJiZ0KXtpZihGRShlLHQpKXRocm93IHVlKG5ldyBZbihFTCtldnQoZSkpKTtyPW51bGwsZS5DYiYmKHI9KG49ZS5EYj4+MTYsbj49MD9neGUoZSxyKTplLkNiLlRoKGUsLTEtbixudWxsLHIpKSksdCYmKHI9bXgodCxlLDEyLHIpKSxyPVl5ZShlLHQsciksciYmci5vaigpfWVsc2UgZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSwzLHQsdCkpfWZ1bmN0aW9uIHo5ZShlLHQpe3ZhciBuLHI7aWYodCE9ZS5DYnx8ZS5EYj4+MTYhPTkmJnQpe2lmKEZFKGUsdCkpdGhyb3cgdWUobmV3IFluKEVMK0pidChlKSkpO3I9bnVsbCxlLkNiJiYocj0obj1lLkRiPj4xNixuPj0wP2Z4ZShlLHIpOmUuQ2IuVGgoZSwtMS1uLG51bGwscikpKSx0JiYocj1teCh0LGUsOSxyKSkscj1YeWUoZSx0LHIpLHImJnIub2ooKX1lbHNlIGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsOSx0LHQpKX1mdW5jdGlvbiBVRShlKXt2YXIgdCxuLHIsYSxvO2lmKHI9T2YoZSksbz1lLmosbz09bnVsbCYmcilyZXR1cm4gZS5KaygpP251bGw6ci5paygpO2lmKERlKHIsMTU2KSl7aWYobj1yLmprKCksbiYmKGE9bi53aSgpLGEhPWUuaSkpe2lmKHQ9bChyLDE1NiksdC5uaygpKXRyeXtlLmc9YS50aSh0LG8pfWNhdGNoKGYpe2lmKGY9YnMoZiksRGUoZiw4MikpZS5nPW51bGw7ZWxzZSB0aHJvdyB1ZShmKX1lLmk9YX1yZXR1cm4gZS5nfXJldHVybiBudWxsfWZ1bmN0aW9uIGVidChlKXt2YXIgdDtyZXR1cm4gdD1uZXcgYnQsdnQodCxuZXcgQjgobmV3IGx0KGUuYyxlLmQpLG5ldyBsdChlLmMrZS5iLGUuZCkpKSx2dCh0LG5ldyBCOChuZXcgbHQoZS5jLGUuZCksbmV3IGx0KGUuYyxlLmQrZS5hKSkpLHZ0KHQsbmV3IEI4KG5ldyBsdChlLmMrZS5iLGUuZCtlLmEpLG5ldyBsdChlLmMrZS5iLGUuZCkpKSx2dCh0LG5ldyBCOChuZXcgbHQoZS5jK2UuYixlLmQrZS5hKSxuZXcgbHQoZS5jLGUuZCtlLmEpKSksdH1mdW5jdGlvbiBHVG4oZSl7dmFyIHQsbixyO2lmKGU9PW51bGwpcmV0dXJuIHVsO3RyeXtyZXR1cm4geGMoZSl9Y2F0Y2goYSl7aWYoYT1icyhhKSxEZShhLDEwMykpcmV0dXJuIHQ9YSxyPV9tKGJoKGUpKSsiQCIrKG49KFZnKCkscThlKGUpPj4+MCksbi50b1N0cmluZygxNikpLGE2bihVM24oKSwoRGsoKSwiRXhjZXB0aW9uIGR1cmluZyBsZW5pZW50Rm9ybWF0IGZvciAiK3IpLHQpLCI8IityKyIgdGhyZXcgIitfbSh0LlJtKSsiPiI7dGhyb3cgdWUoYSl9fWZ1bmN0aW9uIEtUbihlLHQsbil7dmFyIHIsYSxvO2ZvcihvPXQuYS5lYygpLktjKCk7by5PYigpOylhPWwoby5QYigpLDc0KSxyPWwoY3IoZS5iLGEpLDI3MiksIXImJihkcyhjZyhhKSk9PWRzKEViKGEpKT9OQ24oZSxhLG4pOmNnKGEpPT1kcyhFYihhKSk/Y3IoZS5jLGEpPT1udWxsJiZjcihlLmIsRWIoYSkpIT1udWxsJiZJdnQoZSxhLG4sITEpOmNyKGUuZCxhKT09bnVsbCYmY3IoZS5iLGNnKGEpKSE9bnVsbCYmSXZ0KGUsYSxuLCEwKSl9ZnVuY3Rpb24gV1RuKGUsdCl7dmFyIG4scixhLG8sZixnLHc7Zm9yKGE9ZS5LYygpO2EuT2IoKTspZm9yKHI9bChhLlBiKCksMTApLGc9bmV3IGd1LE1jKGcsciksbGEoZywoQ3QoKSxhcikpLHJ0KGcsKGZ0KCksb1cpLChIbigpLCEwKSksZj10LktjKCk7Zi5PYigpOylvPWwoZi5QYigpLDEwKSx3PW5ldyBndSxNYyh3LG8pLGxhKHcsZXIpLHJ0KHcsb1csITApLG49bmV3IFR3LHJ0KG4sb1csITApLHBvKG4sZyksRmEobix3KX1mdW5jdGlvbiBZVG4oZSx0LG4scil7dmFyIGEsbyxmLGc7YT1SMXQoZSx0LG4pLG89UjF0KGUsbix0KSxmPWwoY3IoZS5jLHQpLDExOCksZz1sKGNyKGUuYyxuKSwxMTgpLGE8bz9uZXcgUG0oKEowKCksRTQpLGYsZyxvLWEpOm88YT9uZXcgUG0oKEowKCksRTQpLGcsZixhLW8pOihhIT0wfHwhKCF0Lml8fCFuLmkpJiZyW3QuaS5jXVtuLmkuY10pJiYobmV3IFBtKChKMCgpLEU0KSxmLGcsMCksbmV3IFBtKEU0LGcsZiwwKSl9ZnVuY3Rpb24gdGJ0KGUsdCl7dmFyIG4scixhLG8sZixnLHc7Zm9yKGE9MCxmPW5ldyBHKHQuYSk7Zi5hPGYuYy5jLmxlbmd0aDspZm9yKG89bChyZShmKSwxMCksYSs9by5vLmIrby5kLmErby5kLmQrZS5lLHI9bmV3IGhyKGRyKGthKG8pLmEuS2MoKSxuZXcgaikpO2pyKHIpOyluPWwoeHIociksMTgpLG4uYy5pLms9PShabigpLEF1KSYmKHc9bi5jLmksZz1sKFEodywoZnQoKSx6aSkpLDEwKSxhKz1nLm8uYitnLmQuYStnLmQuZCk7cmV0dXJuIGF9ZnVuY3Rpb24gVkEoKXtWQT1VLFE2PW5ldyBnTygiQ0FORElEQVRFX1BPU0lUSU9OX0xBU1RfUExBQ0VEX1JJR0hUIiwwKSxlOT1uZXcgZ08oIkNBTkRJREFURV9QT1NJVElPTl9MQVNUX1BMQUNFRF9CRUxPVyIsMSkseE09bmV3IGdPKCJDQU5ESURBVEVfUE9TSVRJT05fV0hPTEVfRFJBV0lOR19SSUdIVCIsMikseU09bmV3IGdPKCJDQU5ESURBVEVfUE9TSVRJT05fV0hPTEVfRFJBV0lOR19CRUxPVyIsMyksekI9bmV3IGdPKCJXSE9MRV9EUkFXSU5HIiw0KX1mdW5jdGlvbiBYVG4oZSx0KXtpZihEZSh0LDIwNykpcmV0dXJuIHk0bihlLGwodCwyNykpO2lmKERlKHQsMTkzKSlyZXR1cm4gXzRuKGUsbCh0LDEyMykpO2lmKERlKHQsMzY2KSlyZXR1cm4gbXBuKGUsbCh0LDEzNSkpO2lmKERlKHQsMzI2KSlyZXR1cm4gTkFuKGUsbCh0LDc0KSk7aWYodClyZXR1cm4gbnVsbDt0aHJvdyB1ZShuZXcgWW4odlNlK1RiKG5ldyBJbChoZShsZSh3YSwxKSxSbiwxLDUsW3RdKSkpKSl9ZnVuY3Rpb24gUVRuKGUpe3ZhciB0LG4scixhLG8sZixnO2ZvcihvPW5ldyBvcyxhPW5ldyBHKGUuZC5hKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTI1KSxyLmIuYS5jLmxlbmd0aD09MCYmQ3MobyxyLG8uYy5iLG8uYyk7aWYoby5iPjEpZm9yKHQ9aHcoKG49bmV3IFNtLCsrZS5iLG4pLGUuZCksZz1ScihvLDApO2cuYiE9Zy5kLmM7KWY9bChCcihnKSwxMjUpLHAwKHMwKGkwKGEwKHIwKG5ldyBfZiwxKSwwKSx0KSxmKSl9ZnVuY3Rpb24gSlRuKGUsdCxuKXt2YXIgcixhLG8sZixnO2ZvcihuLlVnKCJCcmVha2luZyBQb2ludCBSZW1vdmluZyIsMSksZS5hPWwoUSh0LChOdCgpLGJwKSksMjIzKSxvPW5ldyBHKHQuYik7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSwzMCksZz1uZXcgRyhfdyhhLmEpKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksMTApLGlodChmKSYmKHI9bChRKGYsKGZ0KCksYzMpKSwzMTMpLCFyLmQmJlV2dChlLHIpKTtuLlZnKCl9ZnVuY3Rpb24gTFUoZSx0KXt2YXIgbixyO2lmKHQhPWUuQ2J8fGUuRGI+PjE2IT0xMSYmdCl7aWYoRkUoZSx0KSl0aHJvdyB1ZShuZXcgWW4oRUwrb2tlKGUpKSk7cj1udWxsLGUuQ2ImJihyPShuPWUuRGI+PjE2LG4+PTA/cHhlKGUscik6ZS5DYi5UaChlLC0xLW4sbnVsbCxyKSkpLHQmJihyPW14KHQsZSwxMCxyKSkscj1zNGUoZSx0LHIpLHImJnIub2ooKX1lbHNlIGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMTEsdCx0KSl9ZnVuY3Rpb24gWlRuKGUpe3ZhciB0LG4scixhO2ZvcihyPW5ldyBxbShuZXcgU3IoZS5iKS5hKTtyLmI7KW49TncociksYT1sKG4ubGQoKSwxMiksdD1sKG4ubWQoKSwxMCkscnQodCwoZnQoKSx6aSksYSkscnQoYSxqbCx0KSxydChhLHhCLChIbigpLCEwKSksbGEoYSxsKFEodCxXYyksNjQpKSxRKHQsV2MpLHJ0KGEuaSwoTnQoKSxNcyksKFJhKCksc0MpKSxsKFEoZW8oYS5pKSxMdSksMjEpLkZjKChIbygpLCRUKSl9ZnVuY3Rpb24gZUNuKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYobz0wLGY9MCxlLmMpZm9yKHc9bmV3IEcoZS5kLmkuaik7dy5hPHcuYy5jLmxlbmd0aDspZz1sKHJlKHcpLDEyKSxvKz1nLmUuYy5sZW5ndGg7ZWxzZSBvPTE7aWYoZS5kKWZvcih3PW5ldyBHKGUuYy5pLmopO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxMiksZis9Zy5nLmMubGVuZ3RoO2Vsc2UgZj0xO3JldHVybiBhPXVhKFJPKGYtbykpLHI9KG4rdCkvMisobi10KSooLjQqYSkscn1mdW5jdGlvbiB0Q24oZSl7UnkoKTt2YXIgdCxuO2lmKGUuSGMoKEN0KCksUGMpKSl0aHJvdyB1ZShuZXcgWW4oIlBvcnQgc2lkZXMgbXVzdCBub3QgY29udGFpbiBVTkRFRklORUQiKSk7c3dpdGNoKGUuZ2MoKSl7Y2FzZSAxOnJldHVybiBiQjtjYXNlIDI6cmV0dXJuIHQ9ZS5IYyhhcikmJmUuSGMoZXIpLG49ZS5IYyhRbikmJmUuSGMoRHIpLHR8fG4/V0s6S0s7Y2FzZSAzOnJldHVybiBHSztjYXNlIDQ6cmV0dXJuIFVLO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIFh1ZShlLHQsbil7cmV0dXJuIGg2KCksZ0UoZSx0KSYmZ0UoZSxuKT8hMTpfbGUobmV3IGx0KGUuYyxlLmQpLG5ldyBsdChlLmMrZS5iLGUuZCksdCxuKXx8X2xlKG5ldyBsdChlLmMrZS5iLGUuZCksbmV3IGx0KGUuYytlLmIsZS5kK2UuYSksdCxuKXx8X2xlKG5ldyBsdChlLmMrZS5iLGUuZCtlLmEpLG5ldyBsdChlLmMsZS5kK2UuYSksdCxuKXx8X2xlKG5ldyBsdChlLmMsZS5kK2UuYSksbmV3IGx0KGUuYyxlLmQpLHQsbil9ZnVuY3Rpb24gcTllKGUsdCl7dmFyIG4scixhLG87aWYoIWUuZGMoKSl7Zm9yKG49MCxyPWUuZ2MoKTtuPHI7KytuKWlmKG89ZWkoZS5YYihuKSksbz09bnVsbD90PT1udWxsOnZuKG8uc3Vic3RyKDAsMyksIiEjIyIpP3QhPW51bGwmJihhPXQubGVuZ3RoLCF2bihvLnN1YnN0cihvLmxlbmd0aC1hLGEpLHQpfHxvLmxlbmd0aCE9dC5sZW5ndGgrMykmJiF2bihjdix0KTp2bihvLGMwZSkmJiF2bihjdix0KXx8dm4obyx0KSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBuQ24oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFO2ZvcihmPWUuai5jLmxlbmd0aCx3PVdlKHZPbix3RWUsMzE0LGYsMCwxKSxnPTA7ZzxmO2crKylvPWwoanQoZS5qLGcpLDEyKSxvLnA9Zyx3W2ddPWRFbihDMnQobyksbixyKTtmb3IoX0NuKGUsdyxuLHQsciksRT1uZXcgUHIsYT0wO2E8dy5sZW5ndGg7YSsrKXdbYV0mJmtpKEUsbChqdChlLmosYSksMTIpLHdbYV0pO0UuZi5jK0UuaS5jIT0wJiYocnQoZSwoZnQoKSxLTCksRSksXzluKGUsdykpfWZ1bmN0aW9uIHJDbihlLHQpe3ZhciBuLHIsYSxvLGYsZztmb3IodC5VZygiUGFydGl0aW9uIHBvc3Rwcm9jZXNzaW5nIiwxKSxyPW5ldyBHKGUuYik7ci5hPHIuYy5jLmxlbmd0aDspZm9yKG49bChyZShyKSwzMCksbz1uZXcgRyhuLmEpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihhPWwocmUobyksMTApLGc9bmV3IEcoYS5qKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksMTIpLFJ0KEJ0KFEoZiwoZnQoKSxvVykpKSkmJlFfKGcpO3QuVmcoKX1mdW5jdGlvbiBpQ24oZSx0LG4pe3ZhciByLGEsbztmb3IoYT1uZXcgRyhlLmEuYik7YS5hPGEuYy5jLmxlbmd0aDspaWYocj1sKHJlKGEpLDYwKSxvPUc1KHIpLG8mJm8uaz09KFpuKCksVXMpKXN3aXRjaChsKFEobywoZnQoKSxXYykpLDY0KS5nKXtjYXNlIDQ6by5uLmE9dC5hO2JyZWFrO2Nhc2UgMjpvLm4uYT1uLmEtKG8uby5hK28uZC5jKTticmVhaztjYXNlIDE6by5uLmI9dC5iO2JyZWFrO2Nhc2UgMzpvLm4uYj1uLmItKG8uby5iK28uZC5hKX19ZnVuY3Rpb24gc0NuKGUsdCxuKXt2YXIgcixhLG87Zm9yKG4uVWcoIlByb2Nlc3NvciBkZXRlcm1pbmUgdGhlIGhlaWdodCBmb3IgZWFjaCBsZXZlbCIsMSksZS5hPXQuYi5iPT0wPzE6dC5iLmIsYT1udWxsLHI9UnIodC5iLDApOyFhJiZyLmIhPXIuZC5jOylvPWwoQnIociksNDApLFJ0KEJ0KFEobywoUWkoKSxWYikpKSkmJihhPW8pO2EmJlZtdChlLE8xKGhlKGxlKFBXLDEpLElHLDQwLDAsW2FdKSksbixsKFEodCwoSGMoKSx5MykpLDg4KSksbi5WZygpfWZ1bmN0aW9uIGFDbihlKXt2YXIgdCxuLHIsYSxvLGY7Zm9yKHI9KHJiKCksbz1uZXcgYV8sbyksYVAocixlKSxuPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwyNyksZj0oYT1uZXcgYV8sYSksTFUoZixyKSxGNShmLHQuZyx0LmYpLGZFKGYsdC5rKSxRaChmLHQuaSx0LmopLHFyKCghci5hJiYoci5hPW5ldyBudChBaSxyLDEwLDExKSksci5hKSxmKSxhUChmLHQpO3JldHVybiByfWZ1bmN0aW9uIG9DbihlLHQsbil7dmFyIHIsYSxvLGYsZztyZXR1cm4gYT1sKGF0KHQsKHdVKCksWk9lKSksMTcpLCFhJiYoYT1wdCgwKSksbz1sKGF0KG4sWk9lKSwxNyksIW8mJihvPXB0KDApKSxhLmE+by5hPy0xOmEuYTxvLmE/MTplLmEmJihyPVlpKHQuaixuLmopLHIhPTB8fChyPVlpKHQuaSxuLmkpLHIhPTApKT9yOihmPXQuZyp0LmYsZz1uLmcqbi5mLFlpKGYsZykpfWZ1bmN0aW9uIGNDbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMO2lmKCsrZS5lLHc9ZS5kPT1udWxsPzA6ZS5kLmxlbmd0aCx0Pncpe2ZvcihDPWUuZCxlLmQ9V2UodlBlLF9TZSw2NiwyKncrNCwwLDEpLG89MDtvPHc7KytvKWlmKEU9Q1tvXSxFKWZvcihyPUUuZyxMPUUuaSxnPTA7ZzxMOysrZylhPWwocltnXSwxMzYpLGY9UXllKGUsYS5CaSgpKSxuPWUuZFtmXSwhbiYmKG49ZS5kW2ZdPWUuZGsoKSksbi5GYyhhKTtyZXR1cm4hMH1lbHNlIHJldHVybiExfWZ1bmN0aW9uIHVDbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3O2lmKGE9bixvPWEuTGsoKSx1cChlLmUsbykpe2lmKG8uU2koKSl7Zm9yKHI9bChlLmcsMTI0KSxmPTA7ZjxlLmk7KytmKWlmKGc9cltmXSxQaShnLGEpJiZmIT10KXRocm93IHVlKG5ldyBZbihXUCkpfX1lbHNlIGZvcih3PVd1KGUuZS5EaCgpLG8pLHI9bChlLmcsMTI0KSxmPTA7ZjxlLmk7KytmKWlmKGc9cltmXSx3LmFtKGcuTGsoKSkpdGhyb3cgdWUobmV3IFluKFpQKSk7X0EoZSx0LG4pfWZ1bmN0aW9uIG5idChlLHQpe3ZhciBuLHIsYSxvLGYsZztmb3Iobj1sKFEodCwoZnQoKSxwcCkpLDIxKSxmPWwoJGkoKE1sZSgpLFhpKSxuKSwyMSksZz1sKCRpKGJpLG4pLDIxKSxvPWYuS2MoKTtvLk9iKCk7KWlmKHI9bChvLlBiKCksMjEpLCFsKCRpKGUuYixyKSwxNSkuZGMoKSlyZXR1cm4hMTtmb3IoYT1nLktjKCk7YS5PYigpOylpZihyPWwoYS5QYigpLDIxKSwhbCgkaShlLmIsciksMTUpLmRjKCkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gSDllKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2lmKGUuYS5jLmxlbmd0aD09MSlyZXR1cm4gc3B0KGwoanQoZS5hLDApLDE3MiksdCk7Zm9yKGY9czRuKGUpLHc9MCxFPWUuZCxvPWYsQz1lLmQsZz0oRS1vKS8yK287bysxPEU7KXtmb3Iodz0wLHI9bmV3IEcoZS5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTcyKSx3Kz0oYT1aQShuLGcsITEpLGEuYSk7dzx0PyhDPWcsRT1nKTpvPWcsZz0oRS1vKS8yK299cmV0dXJuIEN9ZnVuY3Rpb24gYVAoZSx0KXt2YXIgbixyLGEsbyxmO2lmKCF0KXJldHVybiBlO2lmKERlKHQsMzQyKSlmb3IoYT1sKHQsMzQyKSxvPSghZS5vJiYoZS5vPW5ldyB4bCgoc3UoKSxDZyksTDIsZSwwKSksZS5vKSxyPWEuZ2goKS5jLktjKCk7ci5lIT1yLmkuZ2MoKTspbj1sKHIuWWooKSw0NCksZj1uLm1kKCksR04obyxsKG4ubGQoKSwxNDkpLGYpO2Vsc2UhZS5vJiYoZS5vPW5ldyB4bCgoc3UoKSxDZyksTDIsZSwwKSksbGZ0KGUubyx0Lm5mKCkpO3JldHVybiBlfWZ1bmN0aW9uIGxDbihlKXt2YXIgdCxuLHIsYSxvO3JldHVybiBpc05hTihlKT8oaUUoKSxYU2UpOmU8LTkyMjMzNzIwMzY4NTQ3NzZlMz8oaUUoKSxnNnQpOmU+PTkyMjMzNzIwMzY4NTQ3NzZlMz8oaUUoKSxXU2UpOihhPSExLGU8MCYmKGE9ITAsZT0tZSkscj0wLGU+PVptJiYocj11YShlL1ptKSxlLT1yKlptKSxuPTAsZT49THgmJihuPXVhKGUvTHgpLGUtPW4qTHgpLHQ9dWEoZSksbz1xdSh0LG4sciksYSYmeWNlKG8pLG8pfWZ1bmN0aW9uIGhDbihlKXt2YXIgdCxuLHIsYSxvO2lmKG89bmV3IGJ0LFZ1KGUuYixuZXcgSmQobykpLGUuYi5jLmxlbmd0aD0wLG8uYy5sZW5ndGghPTApe2Zvcih0PShTbigwLG8uYy5sZW5ndGgpLGwoby5jWzBdLDgyKSksbj0xLHI9by5jLmxlbmd0aDtuPHI7KytuKWE9KFNuKG4sby5jLmxlbmd0aCksbChvLmNbbl0sODIpKSxhIT10JiZGeG4odCxhKTtpZihEZSh0LDYzKSl0aHJvdyB1ZShsKHQsNjMpKTtpZihEZSh0LDI5NikpdGhyb3cgdWUobCh0LDI5NikpfX1mdW5jdGlvbiBmQ24oZSx0KXt2YXIgbixyLGEsbztmb3Iobj0hdHx8IWUudS5IYygoUmwoKSx2cCkpLG89MCxhPW5ldyBHKGUuZS5YZigpKTthLmE8YS5jLmMubGVuZ3RoOyl7aWYocj1sKHJlKGEpLDg1Miksci5hZygpPT0oQ3QoKSxQYykpdGhyb3cgdWUobmV3IFluKCJMYWJlbCBhbmQgbm9kZSBzaXplIGNhbGN1bGF0b3IgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHBvcnRzIHRoYXQgaGF2ZSBwb3J0IHNpZGVzIGFzc2lnbmVkLiIpKTtyLlFmKG8rKyksZTRuKGUscixuKX19ZnVuY3Rpb24gVjllKGUpe3ZhciB0LG4scixhLG87Zm9yKG49bmV3IEcoZS5hLmEpO24uYTxuLmMuYy5sZW5ndGg7KXtmb3IodD1sKHJlKG4pLDMxNiksdC5qPW51bGwsbz10LmEuYS5lYygpLktjKCk7by5PYigpOylyPWwoby5QYigpLDYwKSxZMChyLmIpLCghdC5qfHxyLmQuYzx0LmouZC5jKSYmKHQuaj1yKTtmb3IoYT10LmEuYS5lYygpLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDYwKSxyLmIuYT1yLmQuYy10LmouZC5jLHIuYi5iPXIuZC5kLXQuai5kLmR9cmV0dXJuIGV9ZnVuY3Rpb24gTVUoZSl7dmFyIHQsbixyLGEsbztmb3Iobj1uZXcgRyhlLmEuYSk7bi5hPG4uYy5jLmxlbmd0aDspe2Zvcih0PWwocmUobiksMTk0KSx0LmY9bnVsbCxvPXQuYS5hLmVjKCkuS2MoKTtvLk9iKCk7KXI9bChvLlBiKCksODYpLFkwKHIuZSksKCF0LmZ8fHIuZy5jPHQuZi5nLmMpJiYodC5mPXIpO2ZvcihhPXQuYS5hLmVjKCkuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksODYpLHIuZS5hPXIuZy5jLXQuZi5nLmMsci5lLmI9ci5nLmQtdC5mLmcuZH1yZXR1cm4gZX1mdW5jdGlvbiBkQ24oZSl7dmFyIHQsbixyO3JldHVybiBuPWwoZS5hLDE3KS5hLHI9bChlLmIsMTcpLmEsdD1iLk1hdGgubWF4KGIuTWF0aC5hYnMobiksYi5NYXRoLmFicyhyKSksbjx0JiZyPT0tdD9uZXcgY2EocHQobisxKSxwdChyKSk6bj09dCYmcjx0P25ldyBjYShwdChuKSxwdChyKzEpKTpuPj0tdCYmcj09dD9uZXcgY2EocHQobi0xKSxwdChyKSk6bmV3IGNhKHB0KG4pLHB0KHItMSkpfWZ1bmN0aW9uIHJidCgpe3JldHVybiB2bygpLGhlKGxlKEVPbiwxKSxpdCw4MSwwLFtQQWUsSUFlLEQ2LGYxZSxlTGUsREssekssbDQsSkFlLEhBZSxYQWUsdTQsWkFlLCRBZSx0TGUsU0FlLFBLLGQxZSxMSyxSSyxyTGUsRkssX0FlLFFBZSxpTGUsakssbkxlLE1LLEZBZSxXQWUsS0FlLHFLLE1BZSxBSyxPSyxMQWUsTFQsVUFlLHpBZSxZQWUsekwsT0FlLERBZSxHQWUscUFlLE5LLCRLLEFBZSxCSyxWQWUsSUssUkFlLEJBZSxnQixfSyxqQWUsTkFlXSl9ZnVuY3Rpb24gZ0NuKGUsdCxuKXtlLmQ9MCxlLmI9MCx0Lms9PShabigpLEF1KSYmbi5rPT1BdSYmbChRKHQsKGZ0KCksemkpKSwxMCk9PWwoUShuLHppKSwxMCkmJigkb2UodCkuaj09KEN0KCksUW4pP1YydChlLHQsbik6VjJ0KGUsbix0KSksdC5rPT1BdSYmbi5rPT1BYT8kb2UodCkuaj09KEN0KCksUW4pP2UuZD0xOmUuYj0xOm4uaz09QXUmJnQuaz09QWEmJigkb2Uobikuaj09KEN0KCksUW4pP2UuYj0xOmUuZD0xKSxKNm4oZSx0LG4pfWZ1bmN0aW9uIHBDbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMO3JldHVybiBMPWp4ZShlKSx0PWUuYSx3PXQhPW51bGwsdyYmemsoTCwiY2F0ZWdvcnkiLGUuYSksYT1aSShuZXcgYnIoZS5kKSksZj0hYSxmJiYoRT1uZXcgJHAsZTEoTCwia25vd25PcHRpb25zIixFKSxuPW5ldyBvUWUoRSksdG8obmV3IGJyKGUuZCksbikpLG89WkkoZS5nKSxnPSFvLGcmJihDPW5ldyAkcCxlMShMLCJzdXBwb3J0ZWRGZWF0dXJlcyIsQykscj1uZXcgY1FlKEMpLHRvKGUuZyxyKSksTH1mdW5jdGlvbiBiQ24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFO2ZvcihyPSExLHQ9MzM2LG49MCxvPW5ldyBHcnQoZS5sZW5ndGgpLGc9ZSx3PTAsRT1nLmxlbmd0aDt3PEU7Kyt3KWY9Z1t3XSxyPXJ8KHhiKGYpLCExKSxhPShmYihmKSxmLmEpLHZ0KG8uYSxYcihhKSksdCY9YS55ZCgpLG49TnluKG4sYS56ZCgpKTtyZXR1cm4gbChsKHpzdChuZXcgYm4obnVsbCxJdWUobmV3IGtuKCh3dygpLFA4ZShvLmEpKSwxNiksbmV3IGJlLHQsbikpLG5ldyBDeihlKSksNjg3KSw4NDgpfWZ1bmN0aW9uIG1DbihlLHQpe3ZhciBuO2UuZCYmKHQuYyE9ZS5lLmN8fG8zbihlLmUuYix0LmIpKSYmKHZ0KGUuZixlLmQpLGUuYT1lLmQuYytlLmQuYixlLmQ9bnVsbCxlLmU9bnVsbCksSWxuKHQuYik/ZS5jPXQ6ZS5iPXQsKHQuYj09KHdFKCksczMpJiYhdC5hfHx0LmI9PWE0JiZ0LmF8fHQuYj09TTYmJnQuYXx8dC5iPT1vNCYmIXQuYSkmJmUuYyYmZS5iJiYobj1uZXcgZWYoZS5hLGUuYy5kLHQuYy1lLmEsZS5iLmQtZS5jLmQpLGUuZD1uLGUuZT10KX1mdW5jdGlvbiBVQShlKXt2YXIgdDtpZihtSmUuY2FsbCh0aGlzKSx0aGlzLmk9bmV3IHlJLHRoaXMuZz1lLHRoaXMuZj1sKGUuZSYmZS5lKCksOSkubGVuZ3RoLHRoaXMuZj09MCl0aHJvdyB1ZShuZXcgWW4oIlRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIHBoYXNlIGluIHRoZSBwaGFzZSBlbnVtZXJhdGlvbi4iKSk7dGhpcy5jPSh0PWwoSzAodGhpcy5nKSw5KSxuZXcgWmgodCxsKGMwKHQsdC5sZW5ndGgpLDkpLDApKSx0aGlzLmE9bmV3IFhzLHRoaXMuYj1uZXcgUHJ9ZnVuY3Rpb24gVTllKGUsdCl7dmFyIG4scjtpZih0IT1lLkNifHxlLkRiPj4xNiE9NyYmdCl7aWYoRkUoZSx0KSl0aHJvdyB1ZShuZXcgWW4oRUwrbHB0KGUpKSk7cj1udWxsLGUuQ2ImJihyPShuPWUuRGI+PjE2LG4+PTA/aHhlKGUscik6ZS5DYi5UaChlLC0xLW4sbnVsbCxyKSkpLHQmJihyPWwodCw1NCkuUmgoZSwxLG9GLHIpKSxyPUo0ZShlLHQsciksciYmci5vaigpfWVsc2UgZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSw3LHQsdCkpfWZ1bmN0aW9uIGlidChlLHQpe3ZhciBuLHI7aWYodCE9ZS5DYnx8ZS5EYj4+MTYhPTMmJnQpe2lmKEZFKGUsdCkpdGhyb3cgdWUobmV3IFluKEVMK2MxdChlKSkpO3I9bnVsbCxlLkNiJiYocj0obj1lLkRiPj4xNixuPj0wP2R4ZShlLHIpOmUuQ2IuVGgoZSwtMS1uLG51bGwscikpKSx0JiYocj1sKHQsNTQpLlJoKGUsMCx1RixyKSkscj1aNGUoZSx0LHIpLHImJnIub2ooKX1lbHNlIGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMyx0LHQpKX1mdW5jdGlvbiBRdWUoZSx0KXtHRSgpO3ZhciBuLHIsYSxvLGYsZyx3LEUsQztyZXR1cm4gdC5kPmUuZCYmKGc9ZSxlPXQsdD1nKSx0LmQ8NjM/aVNuKGUsdCk6KGY9KGUuZCYtMik8PDQsRT12NmUoZSxmKSxDPXY2ZSh0LGYpLHI9bWxlKGUsc3goRSxmKSksYT1tbGUodCxzeChDLGYpKSx3PVF1ZShFLEMpLG49UXVlKHIsYSksbz1RdWUobWxlKEUsciksbWxlKGEsQykpLG89VGxlKFRsZShvLHcpLG4pLG89c3gobyxmKSx3PXN4KHcsZjw8MSksVGxlKFRsZSh3LG8pLG4pKX1mdW5jdGlvbiBwMigpe3AyPVUsZ2RlPW5ldyBNNShjeXQsMCksZkRlPW5ldyBNNSgiTE9OR0VTVF9QQVRIIiwxKSxkRGU9bmV3IE01KCJMT05HRVNUX1BBVEhfU09VUkNFIiwyKSxkZGU9bmV3IE01KCJDT0ZGTUFOX0dSQUhBTSIsMyksaERlPW5ldyBNNSgkaGUsNCksZ0RlPW5ldyBNNSgiU1RSRVRDSF9XSURUSCIsNSksQ1c9bmV3IE01KCJNSU5fV0lEVEgiLDYpLFdUPW5ldyBNNSgiQkZfTU9ERUxfT1JERVIiLDcpLFlUPW5ldyBNNSgiREZfTU9ERUxfT1JERVIiLDgpfWZ1bmN0aW9uIHZDbihlLHQsbil7dmFyIHIsYSxvLGYsZztmb3IoZj1UQShlLG4pLGc9V2Uod2csbTIsMTAsdC5sZW5ndGgsMCwxKSxyPTAsbz1mLktjKCk7by5PYigpOylhPWwoby5QYigpLDEyKSxSdChCdChRKGEsKGZ0KCkseEIpKSkpJiYoZ1tyKytdPWwoUShhLGpsKSwxMCkpO2lmKHI8dC5sZW5ndGgpdGhyb3cgdWUobmV3IG5jKCJFeHBlY3RlZCAiK3QubGVuZ3RoKyIgaGllcmFyY2hpY2FsIHBvcnRzLCBidXQgZm91bmQgb25seSAiK3IrIi4iKSk7cmV0dXJuIGd9ZnVuY3Rpb24gd0NuKGUsdCl7dmFyIG4scixhLG8sZixnO2lmKCFlLnRiKXtmb3Iobz0oIWUucmImJihlLnJiPW5ldyB3eShlLGwxLGUpKSxlLnJiKSxnPW5ldyBOOChvLmkpLGE9bmV3IG9yKG8pO2EuZSE9YS5pLmdjKCk7KXI9bChncihhKSwxNDIpLGY9ci54ZSgpLG49bChmPT1udWxsP2p1KGcuZixudWxsLHIpOkJ3KGcuaSxmLHIpLDE0MiksbiYmKGY9PW51bGw/anUoZy5mLG51bGwsbik6QncoZy5pLGYsbikpO2UudGI9Z31yZXR1cm4gbCh4dShlLnRiLHQpLDE0Mil9ZnVuY3Rpb24gb1AoZSx0KXt2YXIgbixyLGEsbyxmO2lmKChlLmk9PW51bGwmJlNkKGUpLGUuaSkubGVuZ3RoLCFlLnApe2ZvcihmPW5ldyBOOCgoMyplLmcuaS8yfDApKzEpLGE9bmV3IEg4KGUuZyk7YS5lIT1hLmkuZ2MoKTspcj1sKHJ1ZShhKSwxNzkpLG89ci54ZSgpLG49bChvPT1udWxsP2p1KGYuZixudWxsLHIpOkJ3KGYuaSxvLHIpLDE3OSksbiYmKG89PW51bGw/anUoZi5mLG51bGwsbik6QncoZi5pLG8sbikpO2UucD1mfXJldHVybiBsKHh1KGUucCx0KSwxNzkpfWZ1bmN0aW9uIEc5ZShlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEU7Zm9yKEs1bihyK0RIKG4sbi5pZSgpKSxhKSxlYXQodCxkNW4obikpLG89bi5mLG8mJkc5ZShlLHQsbywiQ2F1c2VkIGJ5OiAiLCExKSxnPShuLms9PW51bGwmJihuLms9V2UoVDBlLGR0LDgyLDAsMCwxKSksbi5rKSx3PTAsRT1nLmxlbmd0aDt3PEU7Kyt3KWY9Z1t3XSxHOWUoZSx0LGYsIlN1cHByZXNzZWQ6ICIsITEpO2NvbnNvbGUuZ3JvdXBFbmQhPW51bGwmJmNvbnNvbGUuZ3JvdXBFbmQuY2FsbChjb25zb2xlKX1mdW5jdGlvbiBjUChlLHQsbixyKXt2YXIgYSxvLGYsZyx3O2Zvcih3PXQuZSxnPXcubGVuZ3RoLGY9dC5xLnVnKHcsbj8wOmctMSxuKSxhPXdbbj8wOmctMV0sZj1mfFVidChlLGEsbixyKSxvPW4/MTpnLTI7bj9vPGc6bz49MDtvKz1uPzE6LTEpZj1mfHQuYy5sZyh3LG8sbixyJiYhUnQoQnQoUSh0LmosKGZ0KCksamIpKSkpJiYhUnQoQnQoUSh0LmosKGZ0KCksajYpKSkpKSxmPWZ8dC5xLnVnKHcsbyxuKSxmPWZ8VWJ0KGUsd1tvXSxuLHIpO3JldHVybiBuYShlLmMsdCksZn1mdW5jdGlvbiBEVShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKEM9VGN0KGUuaiksTD0wLEI9Qy5sZW5ndGg7TDxCOysrTCl7aWYoRT1DW0xdLG49PShxbygpLCRsKXx8bj09c00pZm9yKHc9a2QoRS5nKSxhPXcsbz0wLGY9YS5sZW5ndGg7bzxmOysrbylyPWFbb10sUzluKHQscikmJlV3KHIsITApO2lmKG49PXp1fHxuPT1zTSlmb3IoZz1rZChFLmUpLGE9ZyxvPTAsZj1hLmxlbmd0aDtvPGY7KytvKXI9YVtvXSxDOW4odCxyKSYmVXcociwhMCl9fWZ1bmN0aW9uIHlDbihlKXt2YXIgdCxuO3N3aXRjaCh0PW51bGwsbj1udWxsLFI4bihlKS5nKXtjYXNlIDE6dD0oQ3QoKSxhciksbj1lcjticmVhaztjYXNlIDI6dD0oQ3QoKSxEciksbj1RbjticmVhaztjYXNlIDM6dD0oQ3QoKSxlciksbj1hcjticmVhaztjYXNlIDQ6dD0oQ3QoKSxRbiksbj1Ecn1TKGUsbChmaChZOChsKCRpKGUuayx0KSwxNSkuT2MoKSxJNikpLDExMykpLGsoZSxsKGZoKHZ5KGwoJGkoZS5rLG4pLDE1KS5PYygpLEk2KSksMTEzKSl9ZnVuY3Rpb24geENuKGUpe3ZhciB0LG4scixhLG8sZjtpZihhPWwoanQoZS5qLDApLDEyKSxhLmUuYy5sZW5ndGgrYS5nLmMubGVuZ3RoPT0wKWUubi5hPTA7ZWxzZXtmb3IoZj0wLHI9cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbbmV3IFQ1KGEpLG5ldyBDOChhKV0pKSk7anIocik7KW49bCh4cihyKSwxMiksZis9bi5pLm4uYStuLm4uYStuLmEuYTt0PWwoUShlLChOdCgpLHAzKSksOCksbz10P3QuYTowLGUubi5hPWYvKGEuZS5jLmxlbmd0aCthLmcuYy5sZW5ndGgpLW99fWZ1bmN0aW9uIHNidChlLHQpe3ZhciBuLHIsYTtmb3Iocj1uZXcgRyh0LmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwyMjUpLE1hZShsKG4uYiw2OCksbWEoSmEobCh0LmIsNjgpLmMpLGwodC5iLDY4KS5hKSksYT1UbXQobCh0LmIsNjgpLmIsbChuLmIsNjgpLmIpLGE+MSYmKGUuYT0hMCksUWRuKGwobi5iLDY4KSxPaShKYShsKHQuYiw2OCkuYyksbWQobWEoSmEobChuLmIsNjgpLmEpLGwodC5iLDY4KS5hKSxhKSkpLERvdChlLHQpLHNidChlLG4pfWZ1bmN0aW9uIGFidChlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3Iobz1uZXcgRyhlLmEuYSk7by5hPG8uYy5jLmxlbmd0aDspcj1sKHJlKG8pLDE5NCksci5lPTAsci5kLmEuJGIoKTtmb3IoYT1uZXcgRyhlLmEuYSk7YS5hPGEuYy5jLmxlbmd0aDspZm9yKHI9bChyZShhKSwxOTQpLG49ci5hLmEuZWMoKS5LYygpO24uT2IoKTspZm9yKHQ9bChuLlBiKCksODYpLGc9dC5mLktjKCk7Zy5PYigpOylmPWwoZy5QYigpLDg2KSxmLmQhPXImJihuYShyLmQsZiksKytmLmQuZSl9ZnVuY3Rpb24ga0NuKGUpe3ZhciB0LG4scixhLG8sZixnLHc7Zm9yKHc9ZS5qLmMubGVuZ3RoLG49MCx0PXcsYT0yKncsZz1uZXcgRyhlLmopO2cuYTxnLmMuYy5sZW5ndGg7KXN3aXRjaChmPWwocmUoZyksMTIpLGYuai5nKXtjYXNlIDI6Y2FzZSA0OmYucD0tMTticmVhaztjYXNlIDE6Y2FzZSAzOnI9Zi5lLmMubGVuZ3RoLG89Zi5nLmMubGVuZ3RoLHI+MCYmbz4wP2YucD10Kys6cj4wP2YucD1uKys6bz4wP2YucD1hKys6Zi5wPW4rK31DbigpLFZzKGUuaixuZXcgVzkpfWZ1bmN0aW9uIEVDbihlKXt2YXIgdCxuO249bnVsbCx0PWwoanQoZS5nLDApLDE4KTtkb3tpZihuPXQuZC5pLG5zKG4sKGZ0KCksJGYpKSlyZXR1cm4gbChRKG4sJGYpLDEyKS5pO2lmKG4uayE9KFpuKCksUHMpJiZqcihuZXcgaHIoZHIocXMobikuYS5LYygpLG5ldyBqKSkpKXQ9bCh4cihuZXcgaHIoZHIocXMobikuYS5LYygpLG5ldyBqKSkpLDE4KTtlbHNlIGlmKG4uayE9UHMpcmV0dXJuIG51bGx9d2hpbGUobiYmbi5rIT0oWm4oKSxQcykpO3JldHVybiBufWZ1bmN0aW9uIFRDbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQztmb3IoZz10LmosZj10Lmcsdz1sKGp0KGcsZy5jLmxlbmd0aC0xKSwxMTMpLEM9KFNuKDAsZy5jLmxlbmd0aCksbChnLmNbMF0sMTEzKSksRT12dWUoZSxmLHcsQyksbz0xO288Zy5jLmxlbmd0aDtvKyspbj0oU24oby0xLGcuYy5sZW5ndGgpLGwoZy5jW28tMV0sMTEzKSksYT0oU24obyxnLmMubGVuZ3RoKSxsKGcuY1tvXSwxMTMpKSxyPXZ1ZShlLGYsbixhKSxyPkUmJih3PW4sQz1hLEU9cik7dC5hPUMsdC5jPXd9ZnVuY3Rpb24gQ0NuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRTtmb3IoRT1uZXcgS3AobmV3IFVZZShlKSksZj1oZShsZShGOHQsMSksSTN0LDEyLDAsW3Qsbl0pLGc9MCx3PWYubGVuZ3RoO2c8dzsrK2cpZm9yKG89ZltnXSxFLmEuemMobywoSG4oKSxQYikpPT1udWxsLGE9bmV3IE4xKG8uYik7TGMoYS5hKXx8TGMoYS5iKTspcj1sKExjKGEuYSk/cmUoYS5hKTpyZShhLmIpLDE4KSxyLmM9PXIuZHx8ak8oRSxvPT1yLmM/ci5kOnIuYyk7cmV0dXJuIFhyKEUpLG5ldyBPbChFKX1mdW5jdGlvbiBwMChlKXtpZighZS5hLmR8fCFlLmEuZSl0aHJvdyB1ZShuZXcgbmMoKEdnKFU2dCksVTZ0LmsrIiBtdXN0IGhhdmUgYSBzb3VyY2UgYW5kIHRhcmdldCAiKyhHZyh6X2UpLHpfZS5rKSsiIHNwZWNpZmllZC4iKSkpO2lmKGUuYS5kPT1lLmEuZSl0aHJvdyB1ZShuZXcgbmMoIk5ldHdvcmsgc2ltcGxleCBkb2VzIG5vdCBzdXBwb3J0IHNlbGYtbG9vcHM6ICIrZS5hKyIgIitlLmEuZCsiICIrZS5hLmUpKTtyZXR1cm4gJHEoZS5hLmQuZyxlLmEpLCRxKGUuYS5lLmIsZS5hKSxlLmF9ZnVuY3Rpb24gU0NuKGUsdCl7dmFyIG4scixhLG8sZixnLHc7Zm9yKHQuVWcoIkNvbnN0cmFpbnRzIFBvc3Rwcm9jZXNzb3IiLDEpLGY9MCxvPW5ldyBHKGUuYik7by5hPG8uYy5jLmxlbmd0aDspe2ZvcihhPWwocmUobyksMzApLHc9MCxnPSExLHI9bmV3IEcoYS5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTApLG4uaz09KFpuKCksUHMpJiYoZz0hMCxydChuLChOdCgpLG1XKSxwdChmKSkscnQobixkVyxwdCh3KSksKyt3KTtnJiYrK2Z9dC5WZygpfWZ1bmN0aW9uIG9idChlLHQsbil7dmFyIHIsYSxvLGYsZyx3O2lmKHI9MCx0LmIhPTAmJm4uYiE9MCl7bz1Scih0LDApLGY9UnIobiwwKSxnPXplKEdlKEJyKG8pKSksdz16ZShHZShCcihmKSkpLGE9ITA7ZG97aWYoZz53LWUuYiYmZzx3K2UuYilyZXR1cm4tMTtnPnctZS5hJiZnPHcrZS5hJiYrK3IsZzw9dyYmby5iIT1vLmQuYz9nPXplKEdlKEJyKG8pKSk6dzw9ZyYmZi5iIT1mLmQuYz93PXplKEdlKEJyKGYpKSk6YT0hMX13aGlsZShhKX1yZXR1cm4gcn1mdW5jdGlvbiBjYnQoZSx0KXt2YXIgbixyO3JldHVybiBxTyhlLmEpLFgwKGUuYSwoa1YoKSwkVyksJFcpLFgwKGUuYSxYNixYNikscj1uZXcgWHMsZmkocixYNiwoYlUoKSxZZGUpKSxxZShhdCh0LChTYigpLFpkZSkpKSE9PXFlKChMTigpLHpXKSkmJmZpKHIsWDYsR2RlKSxSdChCdChhdCh0LEJJZSkpKSYmZmkocixYNixYZGUpLGZpKHIsWDYsS2RlKSxSdChCdChhdCh0LFJJZSkpKSYmeWwocixYNixXZGUpLHV5ZShlLmEsciksbj1iUChlLmEsdCksbn1mdW5jdGlvbiBfQ24oZSx0LG4scixhKXt2YXIgbyxmLGcsdztmb3Iodz0obz1sKEswKE9vKSw5KSxuZXcgWmgobyxsKGMwKG8sby5sZW5ndGgpLDkpLDApKSxnPW5ldyBHKGUuaik7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDEyKSx0W2YucF0mJihaRG4oZix0W2YucF0sciksZDAodyxmLmopKTthPyhfdWUoZSx0LChDdCgpLGFyKSwyKm4sciksX3VlKGUsdCxlciwyKm4scikpOihfdWUoZSx0LChDdCgpLFFuKSwyKm4sciksX3VlKGUsdCxEciwyKm4scikpfWZ1bmN0aW9uIEFDbihlKXt2YXIgdCxuO2ZvcihuPW5ldyBocihkcihxcyhlKS5hLktjKCksbmV3IGopKTtqcihuKTspaWYodD1sKHhyKG4pLDE4KSx0LmQuaS5rIT0oWm4oKSxjdSkpdGhyb3cgdWUobmV3IFZwKGpoZStITihlKSsiJyBoYXMgaXRzIGxheWVyIGNvbnN0cmFpbnQgc2V0IHRvIExBU1QsIGJ1dCBoYXMgYXQgbGVhc3Qgb25lIG91dGdvaW5nIGVkZ2UgdGhhdCAgZG9lcyBub3QgZ28gdG8gYSBMQVNUX1NFUEFSQVRFIG5vZGUuIFRoYXQgbXVzdCBub3QgaGFwcGVuLiIpKX1mdW5jdGlvbiBMQ24oZSx0LG4pe3ZhciByLGEsbyxmLGc7Zm9yKG4uVWcoIkxvbmdlc3QgcGF0aCBsYXllcmluZyIsMSksZS5hPXQsZz1lLmEuYSxlLmI9V2UoVnIsZGksMjgsZy5jLmxlbmd0aCwxNSwxKSxyPTAsZj1uZXcgRyhnKTtmLmE8Zi5jLmMubGVuZ3RoOylhPWwocmUoZiksMTApLGEucD1yLGUuYltyXT0tMSwrK3I7Zm9yKG89bmV3IEcoZyk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDEwKSwkMnQoZSxhKTtnLmMubGVuZ3RoPTAsZS5hPW51bGwsZS5iPW51bGwsbi5WZygpfWZ1bmN0aW9uIE1DbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKHc9MCxDPW5ldyBHKGUuYSk7Qy5hPEMuYy5jLmxlbmd0aDspe2ZvcihFPWwocmUoQyksMTApLGc9MCxvPW5ldyBocihkcihrYShFKS5hLktjKCksbmV3IGopKTtqcihvKTspYT1sKHhyKG8pLDE4KSxMPUkxKGEuYykuYixCPUkxKGEuZCkuYixnPWIuTWF0aC5tYXgoZyxiLk1hdGguYWJzKEItTCkpO3c9Yi5NYXRoLm1heCh3LGcpfXJldHVybiBmPXIqYi5NYXRoLm1pbigxLHQvbikqdyxmfWZ1bmN0aW9uIERDbihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKGY9bChRKHQsKEhjKCksYkllKSksNDMzKSxvPVJyKHQuYiwwKTtvLmIhPW8uZC5jOylpZihhPWwoQnIobyksNDApLGUuYlthLmddPT0wKXtzd2l0Y2goZi5nKXtjYXNlIDA6Q2R0KGUsYSk7YnJlYWs7Y2FzZSAxOiRFbihlLGEpfWUuYlthLmddPTJ9Zm9yKHI9UnIoZS5hLDApO3IuYiE9ci5kLmM7KW49bChCcihyKSw2NSksTnkobi5iLmQsbiwhMCksTnkobi5jLmIsbiwhMCk7cnQodCwoUWkoKSxzSWUpLGUuYSl9ZnVuY3Rpb24gSzllKGUpe3ZhciB0O3JldHVybiB0PW5ldyBoXyxlJjI1NiYmKHQuYSs9IkYiKSxlJjEyOCYmKHQuYSs9IkgiKSxlJjUxMiYmKHQuYSs9IlgiKSxlJjImJih0LmErPSJpIiksZSY4JiYodC5hKz0ibSIpLGUmNCYmKHQuYSs9InMiKSxlJjMyJiYodC5hKz0idSIpLGUmNjQmJih0LmErPSJ3IiksZSYxNiYmKHQuYSs9IngiKSxlJm0wJiYodC5hKz0iLCIpLFF3ZSh0LmEpfWZ1bmN0aW9uIElDbihlLHQpe3ZhciBuLHIsYSxvLGYsZzt0LlVnKEF5dCwxKSxhPWwoYXQoZSwoejEoKSx2TSkpLDEwNyksbz0oIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSksZj1SN24obyksZz1iLk1hdGgubWF4KGYuYSx6ZShHZShhdChlLCh1ZygpLG1NKSkpKS0oYS5iK2EuYykpLHI9Yi5NYXRoLm1heChmLmIsemUoR2UoYXQoZSxVVykpKS0oYS5kK2EuYSkpLG49ci1mLmIsSGkoZSxiTSxuKSxIaShlLFp4LGcpLEhpKGUsWlQscituKSx0LlZnKCl9ZnVuY3Rpb24gV3UoZSx0KXtGbygpO3ZhciBuLHIsYSxvO3JldHVybiB0P3Q9PShHaSgpLG1BdCl8fCh0PT1zQXR8fHQ9PVN2fHx0PT1pQXQpJiZlIT1VUGU/bmV3IHFrZShlLHQpOihyPWwodCw2OTIpLG49ci4kaygpLG58fChXayhpYygoRWwoKSxpbyksdCkpLG49ci4kaygpKSxvPSghbi5pJiYobi5pPW5ldyBQciksbi5pKSxhPWwoaGMoem8oby5mLGUpKSwyMDQxKSwhYSYma2kobyxlLGE9bmV3IHFrZShlLHQpKSxhKTp0QXR9ZnVuY3Rpb24gT0NuKGUsdCl7dmFyIG4scjtpZihyPWpPKGUuYix0LmIpLCFyKXRocm93IHVlKG5ldyBuYygiSW52YWxpZCBoaXRib3hlcyBmb3Igc2NhbmxpbmUgY29uc3RyYWludCBjYWxjdWxhdGlvbi4iKSk7KGUwdCh0LmIsbChLdW4oZS5iLHQuYiksNjApKXx8ZTB0KHQuYixsKEd1bihlLmIsdC5iKSw2MCkpKSYmKFZnKCksU3RyaW5nLmZyb21DaGFyQ29kZSgxMCkpLGUuYVt0LmIuZl09bChjc2UoZS5iLHQuYiksNjApLG49bChvc2UoZS5iLHQuYiksNjApLG4mJihlLmFbbi5mXT10LmIpfWZ1bmN0aW9uIE5DbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMO2ZvcihvPWw2KHQsITEsITEpLEU9UU4obyksTD16ZShHZShhdCh0LChJQSgpLFcwZSkpKSksYT12d3QoRSxMK2UuYSksQz1uZXcgR3VlKGEpLHBjKEMsdCksa2koZS5iLHQsQyksJG4obi5jLEMpLHc9KCF0Lm4mJih0Lm49bmV3IG50KGVjLHQsMSw3KSksdC5uKSxnPW5ldyBvcih3KTtnLmUhPWcuaS5nYygpOylmPWwoZ3IoZyksMTM1KSxyPXVQKGUsZiwhMCwwLDApLCRuKG4uYyxyKTtyZXR1cm4gQ31mdW5jdGlvbiBQQ24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztmb3IoYT1uZXcgYnQsbj0wO248PWUuajtuKyspcj1uZXcgeXUodCksci5wPWUuai1uLCRuKGEuYyxyKTtmb3IoZz1uZXcgRyhlLnApO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxMCksVmEoZixsKGp0KGEsZS5qLWUuZ1tmLnBdKSwzMCkpO2ZvcihvPW5ldyBHKGEpO28uYTxvLmMuYy5sZW5ndGg7KXc9bChyZShvKSwzMCksdy5hLmMubGVuZ3RoPT0wJiZRXyhvKTt0LmIuYy5sZW5ndGg9MCxyYSh0LmIsYSl9ZnVuY3Rpb24gQkNuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2Zvcih3PWwoUShlLChmdCgpLHppKSksMTIpLEU9SWMoaGUobGUoRWEsMSksZHQsOCwwLFt3Lmkubix3Lm4sdy5hXSkpLmEsQz1lLmkubi5iLG49a2QoZS5lKSxhPW4sbz0wLGY9YS5sZW5ndGg7bzxmOysrbylyPWFbb10sRmEocix3KSxrbyhyLmEsbmV3IGx0KEUsQykpLHQmJihnPWwoUShyLChOdCgpLGNjKSksNzUpLGd8fChnPW5ldyBibCxydChyLGNjLGcpKSx1aShnLG5ldyBsdChFLEMpKSl9ZnVuY3Rpb24gRkNuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2ZvcihhPWwoUShlLChmdCgpLHppKSksMTIpLEU9SWMoaGUobGUoRWEsMSksZHQsOCwwLFthLmkubixhLm4sYS5hXSkpLmEsQz1lLmkubi5iLG49a2QoZS5nKSxmPW4sZz0wLHc9Zi5sZW5ndGg7Zzx3OysrZylvPWZbZ10scG8obyxhKSxPNShvLmEsbmV3IGx0KEUsQykpLHQmJihyPWwoUShvLChOdCgpLGNjKSksNzUpLHJ8fChyPW5ldyBibCxydChvLGNjLHIpKSx1aShyLG5ldyBsdChFLEMpKSl9ZnVuY3Rpb24gUkNuKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRTtpZihyPWUuYixvPXIuZSxmPVU4KGwoUShyLChOdCgpLE1zKSksMTAxKSksbj0hIW8mJmwoUShvLChmdCgpLEx1KSksMjEpLkhjKChIbygpLHZmKSksIShmfHxuKSlmb3IoRT0oZz1uZXcgZ2koZS5lKS5hLnZjKCkuS2MoKSxuZXcgZnMoZykpO0UuYS5PYigpOyl3PSh0PWwoRS5hLlBiKCksNDQpLGwodC5tZCgpLDExMykpLHcuYSYmKGE9dy5kLE1jKGEsbnVsbCksdy5jPSEwLGUuYT0hMCl9ZnVuY3Rpb24gakNuKGUsdCl7dmFyIG4scixhLG87Zm9yKHQuVWcoIlNlbWktSW50ZXJhY3RpdmUgQ3Jvc3NpbmcgTWluaW1pemF0aW9uIFByb2Nlc3NvciIsMSksbj0hMSxhPW5ldyBHKGUuYik7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDMwKSxvPU9OKGxWKEZpKEZpKG5ldyBibihudWxsLG5ldyBrbihyLmEsMTYpKSxuZXcgaEkpLG5ldyB2UyksbmV3IGZJKSxuZXcgX2opLG49bnxvLmEhPW51bGw7biYmcnQoZSwoZnQoKSx6TGUpLChIbigpLCEwKSksdC5WZygpfWZ1bmN0aW9uICRDbihlLHQpe3ZhciBuLHIsYSxvLGYsZztmb3IoZS5iPW5ldyBidCxlLmQ9bChRKHQsKGZ0KCksWHgpKSwyMzQpLGUuZT1FYm4oZS5kKSxvPW5ldyBvcyxhPU8xKGhlKGxlKE44dCwxKSxNM3QsMzYsMCxbdF0pKSxmPTA7ZjxhLmMubGVuZ3RoOylyPShTbihmLGEuYy5sZW5ndGgpLGwoYS5jW2ZdLDM2KSksci5wPWYrKyxuPW5ldyBFdnQocixlLmEsZS5iKSxyYShhLG4uYiksdnQoZS5iLG4pLG4ucyYmKGc9UnIobywwKSx6TyhnLG4pKTtyZXR1cm4gZS5jPW5ldyBLcyxvfWZ1bmN0aW9uIHpDbihlLHQpe3ZhciBuLHIsYSxvLGYsZztmb3IoZj1sKGwoJGkoZS5yLHQpLDIxKSw4NykuS2MoKTtmLk9iKCk7KW89bChmLlBiKCksMTE3KSxuPW8uYz9qNGUoby5jKTowLG4+MD9vLmE/KGc9by5iLk1mKCkuYSxuPmcmJihhPShuLWcpLzIsby5kLmI9YSxvLmQuYz1hKSk6by5kLmM9ZS5zK246V18oZS51KSYmKHI9JHhlKG8uYiksci5jPDAmJihvLmQuYj0tci5jKSxyLmMrci5iPm8uYi5NZigpLmEmJihvLmQuYz1yLmMrci5iLW8uYi5NZigpLmEpKX1mdW5jdGlvbiBxQ24oZSx0KXt2YXIgbixyLGEsbyxmO2Y9bmV3IGJ0LG49dDtkbyBvPWwoY3IoZS5iLG4pLDEzMSksby5CPW4uYyxvLkQ9bi5kLCRuKGYuYyxvKSxuPWwoY3IoZS5rLG4pLDE4KTt3aGlsZShuKTtyZXR1cm4gcj0oU24oMCxmLmMubGVuZ3RoKSxsKGYuY1swXSwxMzEpKSxyLmo9ITAsci5BPWwoci5kLmEuZWMoKS5LYygpLlBiKCksMTgpLmMuaSxhPWwoanQoZixmLmMubGVuZ3RoLTEpLDEzMSksYS5xPSEwLGEuQz1sKGEuZC5hLmVjKCkuS2MoKS5QYigpLDE4KS5kLmksZn1mdW5jdGlvbiBIQ24oZSl7dmFyIHQsbjtpZih0PWwoZS5hLDE3KS5hLG49bChlLmIsMTcpLmEsdD49MCl7aWYodD09bilyZXR1cm4gbmV3IGNhKHB0KC10LTEpLHB0KC10LTEpKTtpZih0PT0tbilyZXR1cm4gbmV3IGNhKHB0KC10KSxwdChuKzEpKX1yZXR1cm4gYi5NYXRoLmFicyh0KT5iLk1hdGguYWJzKG4pP3Q8MD9uZXcgY2EocHQoLXQpLHB0KG4pKTpuZXcgY2EocHQoLXQpLHB0KG4rMSkpOm5ldyBjYShwdCh0KzEpLHB0KG4pKX1mdW5jdGlvbiBWQ24oZSl7dmFyIHQsbjtuPWwoUShlLChOdCgpLFF1KSksMTcxKSx0PWwoUShlLChmdCgpLGh2KSksMzExKSxuPT0oaGYoKSwkYik/KHJ0KGUsUXUsRUIpLHJ0KGUsaHYsKGVwKCksRjYpKSk6bj09ZDQ/KHJ0KGUsUXUsRUIpLHJ0KGUsaHYsKGVwKCksVXgpKSk6dD09KGVwKCksRjYpPyhydChlLFF1LCRiKSxydChlLGh2LHdCKSk6dD09VXgmJihydChlLFF1LGQ0KSxydChlLGh2LHdCKSl9ZnVuY3Rpb24gSVUoKXtJVT1VLElCPW5ldyBwdGUsWEV0PWZpKG5ldyBYcywodW8oKSxidSksKHZvKCksTEspKSxaRXQ9eWwoZmkobmV3IFhzLGJ1LEZLKSxtYyxCSyksZVR0PVRkKFRkKHZfKHlsKGZpKG5ldyBYcyx5MCx6SyksbWMsJEspLF91KSxqSykscUspLFFFdD15bChmaShmaShmaShuZXcgWHMsdmcsREspLF91LE9LKSxfdSxMVCksbWMsSUspLEpFdD15bChmaShmaShuZXcgWHMsX3UsTFQpLF91LEFLKSxtYyxfSyl9ZnVuY3Rpb24gR0EoKXtHQT1VLHJUdD1maSh5bChuZXcgWHMsKHVvKCksbWMpLCh2bygpLFJBZSkpLGJ1LExLKSxvVHQ9VGQoVGQodl8oeWwoZmkobmV3IFhzLHkwLHpLKSxtYywkSyksX3UpLGpLKSxxSyksaVR0PXlsKGZpKGZpKGZpKG5ldyBYcyx2ZyxESyksX3UsT0spLF91LExUKSxtYyxJSyksYVR0PWZpKGZpKG5ldyBYcyxidSxGSyksbWMsQkspLHNUdD15bChmaShmaShuZXcgWHMsX3UsTFQpLF91LEFLKSxtYyxfSyl9ZnVuY3Rpb24gVUNuKGUsdCxuLHIsYSl7dmFyIG8sZjsoIURvKHQpJiZ0LmMuaS5jPT10LmQuaS5jfHwhdWZ0KEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbYS5pLm4sYS5uLGEuYV0pKSxuKSkmJiFEbyh0KSYmKHQuYz09YT9Qayh0LmEsMCxuZXcgRW8obikpOnVpKHQuYSxuZXcgRW8obikpLHImJiFXMChlLmEsbikmJihmPWwoUSh0LChOdCgpLGNjKSksNzUpLGZ8fChmPW5ldyBibCxydCh0LGNjLGYpKSxvPW5ldyBFbyhuKSxDcyhmLG8sZi5jLmIsZi5jKSxuYShlLmEsbykpKX1mdW5jdGlvbiB1YnQoZSx0KXt2YXIgbixyLGEsbztmb3Iobz1ZcihtbyhmZyxpZyhZcihtbyh0PT1udWxsPzA6ZXModCksZGcpKSwxNSkpKSxuPW8mZS5iLmxlbmd0aC0xLGE9bnVsbCxyPWUuYltuXTtyO2E9cixyPXIuYSlpZihyLmQ9PW8mJnlkKHIuaSx0KSlyZXR1cm4gYT9hLmE9ci5hOmUuYltuXT1yLmEsUkplKGwoTGYoci5jKSw2MDQpLGwoTGYoci5mKSw2MDQpKSxXSShsKExmKHIuYiksMjI3KSxsKExmKHIuZSksMjI3KSksLS1lLmYsKytlLmUsITA7cmV0dXJuITF9ZnVuY3Rpb24gR0NuKGUpe3ZhciB0LG47Zm9yKG49bmV3IGhyKGRyKGthKGUpLmEuS2MoKSxuZXcgaikpO2pyKG4pOylpZih0PWwoeHIobiksMTgpLHQuYy5pLmshPShabigpLGN1KSl0aHJvdyB1ZShuZXcgVnAoamhlK0hOKGUpKyInIGhhcyBpdHMgbGF5ZXIgY29uc3RyYWludCBzZXQgdG8gRklSU1QsIGJ1dCBoYXMgYXQgbGVhc3Qgb25lIGluY29taW5nIGVkZ2UgdGhhdCAgZG9lcyBub3QgY29tZSBmcm9tIGEgRklSU1RfU0VQQVJBVEUgbm9kZS4gVGhhdCBtdXN0IG5vdCBoYXBwZW4uIikpfWZ1bmN0aW9uIEtDbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEU7aWYoYT1kMXQoZS5EYiYyNTQpLGE9PTApZS5FYj1uO2Vsc2V7aWYoYT09MSlnPVdlKHdhLFJuLDEsMiw1LDEpLG89bXVlKGUsdCksbz09MD8oZ1swXT1uLGdbMV09ZS5FYik6KGdbMF09ZS5FYixnWzFdPW4pO2Vsc2UgZm9yKGc9V2Uod2EsUm4sMSxhKzEsNSwxKSxmPWptKGUuRWIpLHI9Mix3PTAsRT0wO3I8PTEyODtyPDw9MSlyPT10P2dbRSsrXT1uOmUuRGImciYmKGdbRSsrXT1mW3crK10pO2UuRWI9Z31lLkRifD10fWZ1bmN0aW9uIGxidChlLHQsbil7dmFyIHIsYSxvLGY7Zm9yKHRoaXMuYj1uZXcgYnQsYT0wLHI9MCxmPW5ldyBHKGUpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxNzYpLG4mJmVMbihvKSx2dCh0aGlzLmIsbyksYSs9by5vLHIrPW8ucDt0aGlzLmIuYy5sZW5ndGg+MCYmKG89bChqdCh0aGlzLmIsMCksMTc2KSxhKz1vLm8scis9by5wKSxhKj0yLHIqPTIsdD4xP2E9dWEoYi5NYXRoLmNlaWwoYSp0KSk6cj11YShiLk1hdGguY2VpbChyL3QpKSx0aGlzLmE9bmV3IEk4ZShhLHIpfWZ1bmN0aW9uIGhidChlLHQsbixyLGEsbyl7dmFyIGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmU7Zm9yKEM9cix0LmomJnQubz8oej1sKGNyKGUuZix0LkEpLDYwKSxKPXouZC5jK3ouZC5iLC0tQyk6Sj10LmEuYyt0LmEuYixMPWEsbi5xJiZuLm8/KHo9bChjcihlLmYsbi5DKSw2MCksRT16LmQuYywrK0wpOkU9bi5hLmMsdGU9RS1KLHc9Yi5NYXRoLm1heCgyLEwtQyksZz10ZS93LFY9SitnLEI9QztCPEw7KytCKWY9bChvLlhiKEIpLDEzMSksZmU9Zi5hLmIsZi5hLmM9Vi1mZS8yLFYrPWd9ZnVuY3Rpb24gZmJ0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQjthPXQ/bmV3IEllZTpuZXcgT2VlLG89ITE7ZG8gZm9yKG89ITEsRT10P2xmKGUuYik6ZS5iLHc9RS5LYygpO3cuT2IoKTspZm9yKGc9bCh3LlBiKCksMzApLEI9X3coZy5hKSx0fHxsZihCKSxMPW5ldyBHKEIpO0wuYTxMLmMuYy5sZW5ndGg7KUM9bChyZShMKSwxMCksYS5NYihDKSYmKHI9QyxuPWwoUShDLChmdCgpLGMzKSksMzEzKSxmPXQ/bi5iOm4uayxvPVJidChyLGYsdCwhMSkpO3doaWxlKG8pfWZ1bmN0aW9uIFc5ZShlLHQsbixyLGEsbyl7dmFyIGYsZyx3LEUsQyxMO2ZvcihFPW4uYy5sZW5ndGgsbyYmKGUuYz1XZShWcixkaSwyOCx0Lmxlbmd0aCwxNSwxKSksZj1hPzA6dC5sZW5ndGgtMTthP2Y8dC5sZW5ndGg6Zj49MDtmKz1hPzE6LTEpe2ZvcihnPXRbZl0sdz1yPT0oQ3QoKSxhcik/YT9PYyhnLHIpOmxmKE9jKGcscikpOmE/bGYoT2MoZyxyKSk6T2MoZyxyKSxvJiYoZS5jW2cucF09dy5nYygpKSxMPXcuS2MoKTtMLk9iKCk7KUM9bChMLlBiKCksMTIpLGUuZFtDLnBdPUUrKztyYShuLHcpfX1mdW5jdGlvbiBkYnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7Zm9yKG89emUoR2UoZS5iLktjKCkuUGIoKSkpLEU9emUoR2UoVjNuKHQuYikpKSxyPW1kKEphKGUuYSksRS1uKSxhPW1kKEphKHQuYSksbi1vKSxDPU9pKHIsYSksbWQoQywxLyhFLW8pKSx0aGlzLmE9Qyx0aGlzLmI9bmV3IGJ0LGc9ITAsZj1lLmIuS2MoKSxmLlBiKCk7Zi5PYigpOyl3PXplKEdlKGYuUGIoKSkpLGcmJnctbj53ZmUmJih0aGlzLmIuRmMobiksZz0hMSksdGhpcy5iLkZjKHcpO2cmJnRoaXMuYi5GYyhuKX1mdW5jdGlvbiBXQ24oZSl7dmFyIHQsbixyLGE7aWYoZl9uKGUsZS5uKSxlLmQuYy5sZW5ndGg+MCl7Zm9yKHVfKGUuYyk7TDllKGUsbChyZShuZXcgRyhlLmUuYSkpLDEyNSkpPGUuZS5hLmMubGVuZ3RoOyl7Zm9yKHQ9UDduKGUpLGE9dC5lLmUtdC5kLmUtdC5hLHQuZS5qJiYoYT0tYSkscj1uZXcgRyhlLmUuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDEyNSksbi5qJiYobi5lKz1hKTt1XyhlLmMpfXVfKGUuYykscDllKGUsbChyZShuZXcgRyhlLmUuYSkpLDEyNSkpLG12dChlKX19ZnVuY3Rpb24gWUNuKGUsdCl7aHgoKTt2YXIgbixyO2lmKG49X29lKGhFKCksdC5QZygpKSxuKXtpZihyPW4uaixEZShlLDIwNykpcmV0dXJuIGsybihsKGUsMjcpKT92bChyLChyMSgpLGhhKSl8fHZsKHIsUG4pOnZsKHIsKHIxKCksaGEpKTtpZihEZShlLDMyNikpcmV0dXJuIHZsKHIsKHIxKCksemQpKTtpZihEZShlLDE5MykpcmV0dXJuIHZsKHIsKHIxKCkseXYpKTtpZihEZShlLDM2NikpcmV0dXJuIHZsKHIsKHIxKCksUzIpKX1yZXR1cm4hMH1mdW5jdGlvbiBYQ24oZSx0LG4pe3ZhciByLGEsbyxmLGcsdztpZihhPW4sbz1hLkxrKCksdXAoZS5lLG8pKXtpZihvLlNpKCkpe2ZvcihyPWwoZS5nLDEyNCksZj0wO2Y8ZS5pOysrZilpZihnPXJbZl0sUGkoZyxhKSYmZiE9dCl0aHJvdyB1ZShuZXcgWW4oV1ApKX19ZWxzZSBmb3Iodz1XdShlLmUuRGgoKSxvKSxyPWwoZS5nLDEyNCksZj0wO2Y8ZS5pOysrZilpZihnPXJbZl0sdy5hbShnLkxrKCkpJiZmIT10KXRocm93IHVlKG5ldyBZbihaUCkpO3JldHVybiBsKG42KGUsdCxuKSw3Nil9ZnVuY3Rpb24gZ2J0KGUsdCl7aWYodCBpbnN0YW5jZW9mIE9iamVjdCl0cnl7aWYodC5fX2phdmEkZXhjZXB0aW9uPWUsbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIm1zaWUiKSE9LTEmJiRkb2MuZG9jdW1lbnRNb2RlPDkpcmV0dXJuO3ZhciBuPWU7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCx7Y2F1c2U6e2dldDpmdW5jdGlvbigpe3ZhciByPW4uaGUoKTtyZXR1cm4gciYmci5mZSgpfX0sc3VwcHJlc3NlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uZ2UoKX19fSl9Y2F0Y2h7fX1mdW5jdGlvbiBwYnQoZSx0KXt2YXIgbixyLGEsbyxmO2lmKHI9dD4+NSx0Jj0zMSxyPj1lLmQpcmV0dXJuIGUuZTwwPyhDZCgpLHc2dCk6KENkKCksQkwpO2lmKG89ZS5kLXIsYT1XZShWcixkaSwyOCxvKzEsMTUsMSksajluKGEsbyxlLmEscix0KSxlLmU8MCl7Zm9yKG49MDtuPHImJmUuYVtuXT09MDtuKyspO2lmKG48cnx8dD4wJiZlLmFbbl08PDMyLXQpe2ZvcihuPTA7bjxvJiZhW25dPT0tMTtuKyspYVtuXT0wO249PW8mJisrbywrK2Fbbl19fXJldHVybiBmPW5ldyBJbShlLmUsbyxhKSxpQShmKSxmfWZ1bmN0aW9uIGJidChlKXt2YXIgdCxuLHIsYTtyZXR1cm4gYT1NMShlKSxuPW5ldyB5ayhhKSxyPW5ldyBVSShhKSx0PW5ldyBidCxyYSh0LCghZS5kJiYoZS5kPW5ldyBMbihqcyxlLDgsNSkpLGUuZCkpLHJhKHQsKCFlLmUmJihlLmU9bmV3IExuKGpzLGUsNyw0KSksZS5lKSksbCh5YyhmYyhGaShuZXcgYm4obnVsbCxuZXcga24odCwxNikpLG4pLHIpLFN5KG5ldyB5dCxuZXcgamksbmV3IHFuLG5ldyBVbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksaTQpLEVjXSkpKSwyMSl9ZnVuY3Rpb24gUUNuKGUsdCl7dmFyIG47c3dpdGNoKG49bChRKGUsKE50KCkscFcpKSwyODMpLHQuVWcoIkxhYmVsIHNpZGUgc2VsZWN0aW9uICgiK24rIikiLDEpLG4uZyl7Y2FzZSAwOl8ydChlLChJaCgpLGtnKSk7YnJlYWs7Y2FzZSAxOl8ydChlLChJaCgpLEdiKSk7YnJlYWs7Y2FzZSAyOkdtdChlLChJaCgpLGtnKSk7YnJlYWs7Y2FzZSAzOkdtdChlLChJaCgpLEdiKSk7YnJlYWs7Y2FzZSA0OkNidChlLChJaCgpLGtnKSk7YnJlYWs7Y2FzZSA1OkNidChlLChJaCgpLEdiKSl9dC5WZygpfWZ1bmN0aW9uIHVwKGUsdCl7Rm8oKTt2YXIgbixyLGE7cmV0dXJuIHQuSmsoKT8hMDp0LklrKCk9PS0yP3Q9PShreCgpLHU5KXx8dD09Yzl8fHQ9PWFwZXx8dD09b3BlPyEwOihhPWUuRGgoKSxtcyhhLHQpPj0wPyExOihuPWc2KChFbCgpLGlvKSxhLHQpLG4/KHI9bi5JaygpLChyPjF8fHI9PS0xKSYma3coaWMoaW8sbikpIT0zKTohMCkpOiExfWZ1bmN0aW9uIEpDbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3O3JldHVybiBnPWJjKGwoT2UoKCF0LmImJih0LmI9bmV3IExuKF9yLHQsNCw3KSksdC5iKSwwKSw4NCkpLHc9YmMobChPZSgoIXQuYyYmKHQuYz1uZXcgTG4oX3IsdCw1LDgpKSx0LmMpLDApLDg0KSksZHMoZyk9PWRzKHcpfHxMeSh3LGcpP251bGw6KGY9V08odCksZj09bj9yOihvPWwoY3IoZS5hLGYpLDEwKSxvJiYoYT1vLmUsYSk/YTpudWxsKSl9ZnVuY3Rpb24gWkNuKGUsdCxuKXt2YXIgcixhLG8sZixnO2ZvcihuLlVnKCJMb25nZXN0IHBhdGggdG8gc291cmNlIGxheWVyaW5nIiwxKSxlLmE9dCxnPWUuYS5hLGUuYj1XZShWcixkaSwyOCxnLmMubGVuZ3RoLDE1LDEpLHI9MCxmPW5ldyBHKGcpO2YuYTxmLmMuYy5sZW5ndGg7KWE9bChyZShmKSwxMCksYS5wPXIsZS5iW3JdPS0xLCsrcjtmb3Iobz1uZXcgRyhnKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTApLHoydChlLGEpO2cuYy5sZW5ndGg9MCxlLmE9bnVsbCxlLmI9bnVsbCxuLlZnKCl9ZnVuY3Rpb24gWTllKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYocj1EdW4obixlLmxlbmd0aCksZj1lW3JdLG89VUplKG4sZi5sZW5ndGgpLGZbb10uaz09KFpuKCksVXMpKWZvcih3PXQuaixhPTA7YTx3LmMubGVuZ3RoO2ErKylnPShTbihhLHcuYy5sZW5ndGgpLGwody5jW2FdLDEyKSksKG4/Zy5qPT0oQ3QoKSxhcik6Zy5qPT0oQ3QoKSxlcikpJiZSdChCdChRKGcsKGZ0KCkseEIpKSkpJiYocmYodyxhLGwoUShmW29dLChmdCgpLHppKSksMTIpKSxvKz1uPzE6LTEpfWZ1bmN0aW9uIGVTbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7dC5VZygiR3JlZWR5IFdpZHRoIEFwcHJveGltYXRvciIsMSksbj16ZShHZShhdChlLCh6MSgpLEtXKSkpKSx3PWwoYXQoZSx2TSksMTA3KSxvPWwoYXQoZSxjT2UpLDM5NCksZj1SdChCdChhdChlLG9PZSkpKSxnPXplKEdlKGF0KGUsd00pKSksRT0oIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSksdjdlKEUpLGE9bmV3IHdpdChuLG8sZikscj1sX24oYSxFLGcsdyksSGkoZSwodWcoKSxUNCksci5jKSx0LlZnKCl9ZnVuY3Rpb24gbWJ0KGUpe2lmKGUuZz09bnVsbClzd2l0Y2goZS5wKXtjYXNlIDA6ZS5nPUUybihlKT8oSG4oKSxTVCk6KEhuKCksUGIpO2JyZWFrO2Nhc2UgMTplLmc9Zk4oYm1uKGUpKTticmVhaztjYXNlIDI6ZS5nPXdOKGdibihlKSk7YnJlYWs7Y2FzZSAzOmUuZz1ZZ24oZSk7YnJlYWs7Y2FzZSA0OmUuZz1uZXcgcGEoV2duKGUpKTticmVhaztjYXNlIDY6ZS5nPWFwKEpnbihlKSk7YnJlYWs7Y2FzZSA1OmUuZz1wdChvMm4oZSkpO2JyZWFrO2Nhc2UgNzplLmc9X0Uod21uKGUpKX1yZXR1cm4gZS5nfWZ1bmN0aW9uIFg5ZShlKXtpZihlLm49PW51bGwpc3dpdGNoKGUucCl7Y2FzZSAwOmUubj1UMm4oZSk/KEhuKCksU1QpOihIbigpLFBiKTticmVhaztjYXNlIDE6ZS5uPWZOKG1tbihlKSk7YnJlYWs7Y2FzZSAyOmUubj13TihwYm4oZSkpO2JyZWFrO2Nhc2UgMzplLm49WGduKGUpO2JyZWFrO2Nhc2UgNDplLm49bmV3IHBhKFFnbihlKSk7YnJlYWs7Y2FzZSA2OmUubj1hcChaZ24oZSkpO2JyZWFrO2Nhc2UgNTplLm49cHQoYzJuKGUpKTticmVhaztjYXNlIDc6ZS5uPV9FKHZtbihlKSl9cmV0dXJuIGUubn1mdW5jdGlvbiB2YnQoZSx0LG4scil7dmFyIGEsbyxmLGcsdztpZihnPShGbygpLGwodCw2OSkueGsoKSksdXAoZS5lLHQpKXtpZih0LlNpKCkmJiRVKGUsdCxyLERlKHQsMTAyKSYmKGwodCwxOSkuQmImSW8pIT0wKSl0aHJvdyB1ZShuZXcgWW4oV1ApKX1lbHNlIGZvcih3PVd1KGUuZS5EaCgpLHQpLGE9bChlLmcsMTI0KSxmPTA7ZjxlLmk7KytmKWlmKG89YVtmXSx3LmFtKG8uTGsoKSkpdGhyb3cgdWUobmV3IFluKFpQKSk7X0EoZSx0OWUoZSx0LG4pLGc/bChyLDc2KTpzZyh0LHIpKX1mdW5jdGlvbiB3YnQoZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKG89bmV3IEcoZS5hLmEpO28uYTxvLmMuYy5sZW5ndGg7KXI9bChyZShvKSwzMTYpLHIuZz0wLHIuaT0wLHIuZS5hLiRiKCk7Zm9yKGE9bmV3IEcoZS5hLmEpO2EuYTxhLmMuYy5sZW5ndGg7KWZvcihyPWwocmUoYSksMzE2KSxuPXIuYS5hLmVjKCkuS2MoKTtuLk9iKCk7KWZvcih0PWwobi5QYigpLDYwKSxnPXQuYy5LYygpO2cuT2IoKTspZj1sKGcuUGIoKSw2MCksZi5hIT1yJiYobmEoci5lLGYpLCsrZi5hLmcsKytmLmEuaSl9ZnVuY3Rpb24gdFNuKGUpe3ZhciB0LG4scixhLG87YT1sKFEoZSwoTnQoKSxidikpLDIxKSxvPWwoUShlLHhXKSwyMSksbj1uZXcgbHQoZS5mLmErZS5kLmIrZS5kLmMsZS5mLmIrZS5kLmQrZS5kLmEpLHQ9bmV3IEVvKG4pLGEuSGMoKG1oKCksQTQpKSYmKHI9bChRKGUscVQpLDgpLG8uSGMoKFpsKCksYUMpKSYmKHIuYTw9MCYmKHIuYT0yMCksci5iPD0wJiYoci5iPTIwKSksdC5hPWIuTWF0aC5tYXgobi5hLHIuYSksdC5iPWIuTWF0aC5tYXgobi5iLHIuYikpLHJMbihlLG4sdCl9ZnVuY3Rpb24gblNuKGUsdCl7dmFyIG4scixhO3QuYT8oak8oZS5iLHQuYiksZS5hW3QuYi5pXT1sKGNzZShlLmIsdC5iKSw4Niksbj1sKG9zZShlLmIsdC5iKSw4NiksbiYmKGUuYVtuLmldPXQuYikpOihyPWwoY3NlKGUuYix0LmIpLDg2KSxyJiZyPT1lLmFbdC5iLmldJiZyLmQmJnIuZCE9dC5iLmQmJnIuZi5GYyh0LmIpLGE9bChvc2UoZS5iLHQuYiksODYpLGEmJmUuYVthLmldPT10LmImJmEuZCYmYS5kIT10LmIuZCYmdC5iLmYuRmMoYSksdGFlKGUuYix0LmIpKX1mdW5jdGlvbiB5YnQoZSx0KXt2YXIgbixyLGEsbyxmLGc7cmV0dXJuIG89ZS5kLGc9emUoR2UoUShlLChOdCgpLHgyKSkpKSxnPDAmJihnPTAscnQoZSx4MixnKSksdC5vLmI9ZyxmPWIuTWF0aC5mbG9vcihnLzIpLHI9bmV3IGd1LGxhKHIsKEN0KCksZXIpKSxNYyhyLHQpLHIubi5iPWYsYT1uZXcgZ3UsbGEoYSxhciksTWMoYSx0KSxhLm4uYj1mLEZhKGUsciksbj1uZXcgVHcscGMobixlKSxydChuLGNjLG51bGwpLHBvKG4sYSksRmEobixvKSxiQW4odCxlLG4pLGxrbihlLG4pLG59ZnVuY3Rpb24gclNuKGUpe3ZhciB0LG47cmV0dXJuIG49bChRKGUsKGZ0KCksTHUpKSwyMSksdD1uZXcgWHMsbi5IYygoSG8oKSxVTCkpJiYoRGgodCxHRXQpLERoKHQsekRlKSksKG4uSGMoJFQpfHxSdChCdChRKGUsKE50KCksaWRlKSkpKSkmJihEaCh0LHpEZSksbi5IYyhCNikmJkRoKHQsV0V0KSksbi5IYyh2ZikmJkRoKHQsVUV0KSxuLkhjKEdMKSYmRGgodCxZRXQpLG4uSGModFcpJiZEaCh0LEtFdCksbi5IYyhSVCkmJkRoKHQsSEV0KSxuLkhjKGpUKSYmRGgodCxWRXQpLHR9ZnVuY3Rpb24gaVNuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQjtyZXR1cm4gcj1lLmQsbz10LmQsZz1yK28sdz1lLmUhPXQuZT8tMToxLGc9PTI/KEM9bW8odmEoZS5hWzBdLFZvKSx2YSh0LmFbMF0sVm8pKSxCPVlyKEMpLEw9WXIodWIoQywzMikpLEw9PTA/bmV3IFFnKHcsQik6bmV3IEltKHcsMixoZShsZShWciwxKSxkaSwyOCwxNSxbQixMXSkpKToobj1lLmEsYT10LmEsZj1XZShWcixkaSwyOCxnLDE1LDEpLHI0bihuLHIsYSxvLGYpLEU9bmV3IEltKHcsZyxmKSxpQShFKSxFKX1mdW5jdGlvbiB4YnQoZSx0LG4scil7dmFyIGEsbztpZih0KXtpZihhPWUuYS5OZShuLmQsdC5kKSxhPT0wKXJldHVybiByLmQ9WnllKHQsbi5lKSxyLmI9ITAsdDtvPWE8MD8wOjEsdC5hW29dPXhidChlLHQuYVtvXSxuLHIpLG95KHQuYVtvXSkmJihveSh0LmFbMS1vXSk/KHQuYj0hMCx0LmFbMF0uYj0hMSx0LmFbMV0uYj0hMSk6b3kodC5hW29dLmFbb10pP3Q9RVYodCwxLW8pOm95KHQuYVtvXS5hWzEtb10pJiYodD11Y3QodCwxLW8pKSl9ZWxzZSByZXR1cm4gbjtyZXR1cm4gdH1mdW5jdGlvbiBrYnQoZSx0LG4pe3ZhciByLGEsbyxmO2E9ZS5pLHI9ZS5uLHk2ZShlLCh0MSgpLEdjKSxhLmMrci5iLG4pLHk2ZShlLEtjLGEuYythLmItci5jLW5bMl0sbiksZj1hLmItci5iLXIuYyxuWzBdPjAmJihuWzBdKz1lLmQsZi09blswXSksblsyXT4wJiYoblsyXSs9ZS5kLGYtPW5bMl0pLG89Yi5NYXRoLm1heCgwLGYpLG5bMV09Yi5NYXRoLm1heChuWzFdLGYpLHk2ZShlLCR1LGEuYytyLmIrblswXS0oblsxXS1mKS8yLG4pLHQ9PSR1JiYoZS5jLmI9byxlLmMuYz1hLmMrci5iKyhvLWYpLzIpfWZ1bmN0aW9uIEVidCgpe3RoaXMuYz1XZShOYSxabywyOCwoQ3QoKSxoZShsZShPbywxKSxhdSw2NCwwLFtQYyxRbixhcixEcixlcl0pKS5sZW5ndGgsMTUsMSksdGhpcy5iPVdlKE5hLFpvLDI4LGhlKGxlKE9vLDEpLGF1LDY0LDAsW1BjLFFuLGFyLERyLGVyXSkubGVuZ3RoLDE1LDEpLHRoaXMuYT1XZShOYSxabywyOCxoZShsZShPbywxKSxhdSw2NCwwLFtQYyxRbixhcixEcixlcl0pLmxlbmd0aCwxNSwxKSxFM2UodGhpcy5jLGdzKSxFM2UodGhpcy5iLGlhKSxFM2UodGhpcy5hLGlhKX1mdW5jdGlvbiBFdShlLHQsbil7dmFyIHIsYSxvLGY7aWYodDw9bj8oYT10LG89bik6KGE9bixvPXQpLHI9MCxlLmI9PW51bGwpZS5iPVdlKFZyLGRpLDI4LDIsMTUsMSksZS5iWzBdPWEsZS5iWzFdPW8sZS5jPSEwO2Vsc2V7aWYocj1lLmIubGVuZ3RoLGUuYltyLTFdKzE9PWEpe2UuYltyLTFdPW87cmV0dXJufWY9V2UoVnIsZGksMjgscisyLDE1LDEpLHB1KGUuYiwwLGYsMCxyKSxlLmI9ZixlLmJbci0xXT49YSYmKGUuYz0hMSxlLmE9ITEpLGUuYltyKytdPWEsZS5iW3JdPW8sZS5jfHxjNihlKX19ZnVuY3Rpb24gc1NuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRTtmb3IoRT10LmQsZS5hPW5ldyBCdShFLmMubGVuZ3RoKSxlLmM9bmV3IFByLGc9bmV3IEcoRSk7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDEwNSksbz1uZXcgeE4obnVsbCksdnQoZS5hLG8pLGtpKGUuYyxmLG8pO2ZvcihlLmI9bmV3IFByLGZrbihlLHQpLHI9MDtyPEUuYy5sZW5ndGgtMTtyKyspZm9yKHc9bChqdCh0LmQsciksMTA1KSxhPXIrMTthPEUuYy5sZW5ndGg7YSsrKVlUbihlLHcsbChqdCh0LmQsYSksMTA1KSxuKX1mdW5jdGlvbiBIeShlKXt2YXIgdCxuLHIsYSxvO2ZvcihhPW5ldyBidCx0PW5ldyBVXygoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpLHI9bmV3IGhyKGRyKGNwKGUpLmEuS2MoKSxuZXcgaikpO2pyKHIpOyluPWwoeHIociksNzQpLERlKE9lKCghbi5iJiYobi5iPW5ldyBMbihfcixuLDQsNykpLG4uYiksMCksMTkzKXx8KG89YmMobChPZSgoIW4uYyYmKG4uYz1uZXcgTG4oX3Isbiw1LDgpKSxuLmMpLDApLDg0KSksdC5hLl9iKG8pfHwkbihhLmMsbykpO3JldHVybiBhfWZ1bmN0aW9uIGFTbihlLHQsbil7dmFyIHIsYSxvO2lmKGUuZT1uLGUuZD0wLGUuYj0wLGUuZj0xLGUuaT10LChlLmUmMTYpPT0xNiYmKGUuaT1iX24oZS5pKSksZS5qPWUuaS5sZW5ndGgsTGkoZSksbz1qdyhlKSxlLmQhPWUuail0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksXzR0KSkpKTtpZihlLmcpe2ZvcihyPTA7cjxlLmcuYS5jLmxlbmd0aDtyKyspaWYoYT1sKHh3KGUuZyxyKSw1OTIpLGUuZjw9YS5hKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxBNHQpKSkpO2UuZy5hLmMubGVuZ3RoPTB9cmV0dXJuIG99ZnVuY3Rpb24gb1NuKGUsdCl7dmFyIG4scixhLG8sZixnLHc7Zm9yKG49aWEsZz0oWm4oKSxQcyksYT1uZXcgRyh0LmEpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxMCksbz1yLmssbyE9UHMmJihmPUdlKFEociwoZnQoKSxITGUpKSksZj09bnVsbD8obj1iLk1hdGgubWF4KG4sMCksci5uLmI9bitPeWUoZS5hLG8sZykpOnIubi5iPShucihmKSxmKSksdz1PeWUoZS5hLG8sZyksci5uLmI8bit3K3IuZC5kJiYoci5uLmI9bit3K3IuZC5kKSxuPXIubi5iK3Iuby5iK3IuZC5hLGc9b31mdW5jdGlvbiBUYnQoZSx0LG4scixhKXt2YXIgbyxmLGcsdyxFLEM7aWYoZS5kJiZlLmQuR2coYSksbz1sKGEuWGIoMCksMjcpLFNkdChlLG4sbywhMSl8fChmPWwoYS5YYihhLmdjKCktMSksMjcpLFNkdChlLHIsZiwhMCkpfHxHeGUoZSxhKSlyZXR1cm4hMDtmb3IoQz1hLktjKCk7Qy5PYigpOylmb3IoRT1sKEMuUGIoKSwyNyksdz10LktjKCk7dy5PYigpOylpZihnPWwody5QYigpLDI3KSxOVShlLEUsZykpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gY1NuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQjtCPXQuYy5sZW5ndGgsTD0oRT1lLkloKG4pLGwoRT49MD9lLkxoKEUsITEsITApOkh3KGUsbiwhMSksNjEpKTtlOmZvcihvPUwuS2MoKTtvLk9iKCk7KXtmb3IoYT1sKG8uUGIoKSw1OCksQz0wO0M8QjsrK0MpaWYoZj0oU24oQyx0LmMubGVuZ3RoKSxsKHQuY1tDXSw3NikpLHc9Zi5tZCgpLGc9Zi5MaygpLHI9YS5OaChnLCExKSx3PT1udWxsP3IhPW51bGw6IVBpKHcscikpY29udGludWUgZTtyZXR1cm4gYX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB1U24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztmb3IodC5VZygiQ29tbWVudCBwb3N0LXByb2Nlc3NpbmciLDEpLG89bmV3IEcoZS5iKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKGE9bChyZShvKSwzMCkscj1uZXcgYnQsZz1uZXcgRyhhLmEpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxMCksdz1sKFEoZiwoZnQoKSxReCkpLDE1KSxuPWwoUShmLEd4KSwxNSksKHd8fG4pJiYoU0RuKGYsdyxuKSx3JiZyYShyLHcpLG4mJnJhKHIsbikpO3JhKGEuYSxyKX10LlZnKCl9ZnVuY3Rpb24gbFNuKGUsdCxuLHIpe3ZhciBhLG8sZixnO2ZvcihhPWwoZDIodCwoQ3QoKSxlcikpLktjKCkuUGIoKSwxMiksbz1sKGQyKHQsYXIpLktjKCkuUGIoKSwxMiksZz1uZXcgRyhlLmopO2cuYTxnLmMuYy5sZW5ndGg7KXtmb3IoZj1sKHJlKGcpLDEyKTtmLmUuYy5sZW5ndGghPTA7KUZhKGwoanQoZi5lLDApLDE4KSxhKTtmb3IoO2YuZy5jLmxlbmd0aCE9MDspcG8obChqdChmLmcsMCksMTgpLG8pfW58fHJ0KHQsKGZ0KCksbzEpLG51bGwpLHJ8fHJ0KHQsKGZ0KCksJGYpLG51bGwpfWZ1bmN0aW9uIGw2KGUsdCxuKXt2YXIgcixhO2lmKCghZS5hJiYoZS5hPW5ldyBudChjcyxlLDYsNikpLGUuYSkuaT09MClyZXR1cm4gRDdlKGUpO2lmKHI9bChPZSgoIWUuYSYmKGUuYT1uZXcgbnQoY3MsZSw2LDYpKSxlLmEpLDApLDE2NiksdCYmKCRyKCghci5hJiYoci5hPW5ldyBZcyhxaCxyLDUpKSxyLmEpKSxvRShyLDApLHVFKHIsMCksYUUociwwKSxjRShyLDApKSxuKWZvcihhPSghZS5hJiYoZS5hPW5ldyBudChjcyxlLDYsNikpLGUuYSk7YS5pPjE7KVZ5KGEsYS5pLTEpO3JldHVybiByfWZ1bmN0aW9uIENidChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihuPW5ldyB6NSxvPW5ldyBHKGUuYik7by5hPG8uYy5jLmxlbmd0aDspe2ZvcihhPWwocmUobyksMzApLHc9ITAscj0wLGc9bmV3IEcoYS5hKTtnLmE8Zy5jLmMubGVuZ3RoOylzd2l0Y2goZj1sKHJlKGcpLDEwKSxmLmsuZyl7Y2FzZSA0OisrcjtjYXNlIDE6aTZlKG4sZik7YnJlYWs7Y2FzZSAwOnVrbihmLHQpO2RlZmF1bHQ6bi5iPT1uLmN8fHBtdChuLHIsdywhMSx0KSx3PSExLHI9MH1uLmI9PW4uY3x8cG10KG4scix3LCEwLHQpfX1mdW5jdGlvbiBROWUoZSx0KXt2YXIgbixyLGEsbyxmLGc7Zm9yKG49MCxnPW5ldyBHKHQpO2cuYTxnLmMuYy5sZW5ndGg7KXtmb3IoZj1sKHJlKGcpLDEyKSxZN2UoZS5iLGUuZFtmLnBdKSxhPW5ldyBOMShmLmIpO0xjKGEuYSl8fExjKGEuYik7KXI9bChMYyhhLmEpP3JlKGEuYSk6cmUoYS5iKSwxOCksbz1mM2UoZSxmPT1yLmM/ci5kOnIuYyksbz5lLmRbZi5wXSYmKG4rPWY2ZShlLmIsbyksZ2IoZS5hLHB0KG8pKSk7Zm9yKDshbF8oZS5hKTspVTZlKGUuYixsKFg4KGUuYSksMTcpLmEpfXJldHVybiBufWZ1bmN0aW9uIGhTbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEU7Zm9yKGUuYT1uZXcgaTRlLEU9MCxhPTAscj1uZXcgRyhlLmkuYik7ci5hPHIuYy5jLmxlbmd0aDspe2Zvcih0PWwocmUociksMzApLHQucD1hLHc9bmV3IEcodC5hKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMTApLGcucD1FLCsrRTsrK2F9Zm9yKG89ZS5yPT0oTmYoKSx2MyksZj1vP0s4dDpHOHQsbj1uZXcgRyhlLmkuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDMwKSxWcyh0LmEsZiksbHduKGUuYSxwdCh0LnApLHQuYSl9ZnVuY3Rpb24gU2J0KGUsdCxuKXt2YXIgcixhLG8sZjtmb3Iobz0oIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkuaSxhPW5ldyBvcigoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkpO2EuZSE9YS5pLmdjKCk7KXI9bChncihhKSwyNyksKCFyLmEmJihyLmE9bmV3IG50KEFpLHIsMTAsMTEpKSxyLmEpLmk9PTB8fChvKz1TYnQoZSxyLCExKSk7aWYobilmb3IoZj1kcyh0KTtmOylvKz0oIWYuYSYmKGYuYT1uZXcgbnQoQWksZiwxMCwxMSkpLGYuYSkuaSxmPWRzKGYpO3JldHVybiBvfWZ1bmN0aW9uIFZ5KGUsdCl7dmFyIG4scixhLG87cmV0dXJuIGUuUGooKT8ocj1udWxsLGE9ZS5RaigpLGUuVGooKSYmKHI9ZS5WaihlLiRpKHQpLG51bGwpKSxuPWUuSWooNCxvPXZ4KGUsdCksbnVsbCx0LGEpLGUuTWooKSYmbyE9bnVsbCYmKHI9ZS5PaihvLHIpKSxyPyhyLm5qKG4pLHIub2ooKSk6ZS5KaihuKSxvKToobz12eChlLHQpLGUuTWooKSYmbyE9bnVsbCYmKHI9ZS5PaihvLG51bGwpLHImJnIub2ooKSksbyl9ZnVuY3Rpb24gZlNuKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDO2ZvcihFPWUuYSx0PW5ldyBLcyx3PTAscj1uZXcgRyhlLmQpO3IuYTxyLmMuYy5sZW5ndGg7KXtmb3Iobj1sKHJlKHIpLDIyNiksQz0wLCRtKG4uYixuZXcgbHUpLGY9UnIobi5iLDApO2YuYiE9Zi5kLmM7KW89bChCcihmKSwyMjYpLHQuYS5fYihvKSYmKGE9bi5jLGc9by5jLEM8Zy5kK2cuYStFJiZDK2EuYStFPmcuZCYmKEM9Zy5kK2cuYStFKSk7bi5jLmQ9Qyx0LmEuemMobix0KSx3PWIuTWF0aC5tYXgodyxuLmMuZCtuLmMuYSl9cmV0dXJuIHd9ZnVuY3Rpb24gSG8oKXtIbz1VLGVXPW5ldyB1eSgiQ09NTUVOVFMiLDApLHZmPW5ldyB1eSgiRVhURVJOQUxfUE9SVFMiLDEpLFVMPW5ldyB1eSgiSFlQRVJFREdFUyIsMiksdFc9bmV3IHV5KCJIWVBFUk5PREVTIiwzKSwkVD1uZXcgdXkoIk5PTl9GUkVFX1BPUlRTIiw0KSxCNj1uZXcgdXkoIk5PUlRIX1NPVVRIX1BPUlRTIiw1KSxHTD1uZXcgdXkoWDN0LDYpLFJUPW5ldyB1eSgiQ0VOVEVSX0xBQkVMUyIsNyksalQ9bmV3IHV5KCJFTkRfTEFCRUxTIiw4KSxuVz1uZXcgdXkoIlBBUlRJVElPTlMiLDkpfWZ1bmN0aW9uIGRTbihlLHQsbixyLGEpe3JldHVybiByPDA/KHI9bzYoZSxhLGhlKGxlKHp0LDEpLGR0LDIsNixbJGxlLHpsZSxxbGUsSGxlLF94LFZsZSxVbGUsR2xlLEtsZSxXbGUsWWxlLFhsZV0pLHQpLHI8MCYmKHI9bzYoZSxhLGhlKGxlKHp0LDEpLGR0LDIsNixbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsX3gsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdKSx0KSkscjwwPyExOihuLms9ciwhMCkpOnI+MD8obi5rPXItMSwhMCk6ITF9ZnVuY3Rpb24gZ1NuKGUsdCxuLHIsYSl7cmV0dXJuIHI8MD8ocj1vNihlLGEsaGUobGUoenQsMSksZHQsMiw2LFskbGUsemxlLHFsZSxIbGUsX3gsVmxlLFVsZSxHbGUsS2xlLFdsZSxZbGUsWGxlXSksdCkscjwwJiYocj1vNihlLGEsaGUobGUoenQsMSksZHQsMiw2LFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIixfeCwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0pLHQpKSxyPDA/ITE6KG4uaz1yLCEwKSk6cj4wPyhuLms9ci0xLCEwKTohMX1mdW5jdGlvbiBwU24oZSx0LG4scixhLG8pe3ZhciBmLGcsdyxFO2lmKGc9MzIscjwwKXtpZih0WzBdPj1lLmxlbmd0aHx8KGc9Y28oZSx0WzBdKSxnIT00MyYmZyE9NDUpfHwoKyt0WzBdLHI9a1UoZSx0KSxyPDApKXJldHVybiExO2c9PTQ1JiYocj0tcil9cmV0dXJuIGc9PTMyJiZ0WzBdLW49PTImJmEuYj09MiYmKHc9bmV3IFF6LEU9dy5xLmdldEZ1bGxZZWFyKCktTGIrTGItODAsZj1FJTEwMCxvLmE9cj09ZixyKz0oRS8xMDB8MCkqMTAwKyhyPGY/MTAwOjApKSxvLnA9ciwhMH1mdW5jdGlvbiBfYnQoZSx0KXt2YXIgbixyLGEsbyxmO2RzKGUpJiYoZj1sKFEodCwoTnQoKSxidikpLDE4MSkscWUoYXQoZSxNcykpPT09cWUoKFJhKCksV2IpKSYmSGkoZSxNcyxaMSkscj0oYXcoKSxuZXcgSnYoZHMoZSkpKSxvPW5ldyByYWUoZHMoZSk/bmV3IEp2KGRzKGUpKTpudWxsLGUpLGE9cXZ0KHIsbywhMSwhMCksZDAoZiwobWgoKSxBNCkpLG49bChRKHQscVQpLDgpLG4uYT1iLk1hdGgubWF4KGEuYSxuLmEpLG4uYj1iLk1hdGgubWF4KGEuYixuLmIpKX1mdW5jdGlvbiBiU24oZSx0LG4pe3ZhciByLGEsbyxmLGcsdztmb3IoZj1sKFEoZSwoZnQoKSxIMWUpKSwxNSkuS2MoKTtmLk9iKCk7KXtzd2l0Y2gobz1sKGYuUGIoKSwxMCksbChRKG8sKE50KCksUXUpKSwxNzEpLmcpe2Nhc2UgMjpWYShvLHQpO2JyZWFrO2Nhc2UgNDpWYShvLG4pfWZvcihhPW5ldyBocihkcihzcChvKS5hLktjKCksbmV3IGopKTtqcihhKTspcj1sKHhyKGEpLDE4KSwhKHIuYyYmci5kKSYmKGc9IXIuZCx3PWwoUShyLFVMZSksMTIpLGc/RmEocix3KTpwbyhyLHcpKX19ZnVuY3Rpb24gT1UoKXtPVT1VLHcxZT1uZXcgWjgobkcsMCwoQ3QoKSxRbiksUW4pLGsxZT1uZXcgWjgoeGhlLDEsRHIsRHIpLHYxZT1uZXcgWjgoeWhlLDIsYXIsYXIpLEMxZT1uZXcgWjgoa2hlLDMsZXIsZXIpLHgxZT1uZXcgWjgoIk5PUlRIX1dFU1RfQ09STkVSIiw0LGVyLFFuKSx5MWU9bmV3IFo4KCJOT1JUSF9FQVNUX0NPUk5FUiIsNSxRbixhciksVDFlPW5ldyBaOCgiU09VVEhfV0VTVF9DT1JORVIiLDYsRHIsZXIpLEUxZT1uZXcgWjgoIlNPVVRIX0VBU1RfQ09STkVSIiw3LGFyLERyKX1mdW5jdGlvbiBtU24oZSl7dmFyIHQsbixyLGEsbyxmO2ZvcihvPW5ldyBLcyx0PW5ldyBVXygoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpLGE9bmV3IGhyKGRyKGNwKGUpLmEuS2MoKSxuZXcgaikpO2pyKGEpOylyPWwoeHIoYSksNzQpLERlKE9lKCghci5iJiYoci5iPW5ldyBMbihfcixyLDQsNykpLHIuYiksMCksMTkzKXx8KGY9YmMobChPZSgoIXIuYyYmKHIuYz1uZXcgTG4oX3Isciw1LDgpKSxyLmMpLDApLDg0KSksdC5hLl9iKGYpfHwobj1vLmEuemMoZixvKSxuPT1udWxsKSk7cmV0dXJuIG99ZnVuY3Rpb24gaDYoKXtoNj1VLFVPZT1oZShsZShubSwxKSxhaGUsMjgsMTQsWzEsMSwyLDYsMjQsMTIwLDcyMCw1MDQwLDQwMzIwLDM2Mjg4MCwzNjI4ODAwLDM5OTE2ODAwLDQ3OTAwMTYwMCw2MjI3MDIwODAwLDg3MTc4MjkxMjAwLDEzMDc2NzQzNjhlMyx7bDozNTA2MTc2LG06Nzk0MDc3LGg6MX0se2w6ODg0NzM2LG06OTE2NDExLGg6MjB9LHtsOjMzNDIzMzYsbTozOTEyNDg5LGg6MzYzfSx7bDo1ODk4MjQsbTozMDM0MTM4LGg6NjkxNH0se2w6MzQwNzg3MixtOjE5NjI1MDYsaDoxMzgyOTR9XSksYi5NYXRoLnBvdygyLC02NSl9ZnVuY3Rpb24gR0UoKXtHRT1VO3ZhciBlLHQ7Zm9yKCR4PVdlKEE2LGR0LDkyLDMyLDAsMSksRkw9V2UoQTYsZHQsOTIsMzIsMCwxKSxlPTEsdD0wO3Q8PTE4O3QrKykkeFt0XT0oQ2QoKSxpdShlLDApPj0wP2tiKGUpOkpfKGtiKHIyKGUpKSkpLEZMW3RdPUFxKGwwKGUsdCksMCk/a2IobDAoZSx0KSk6Sl8oa2IocjIobDAoZSx0KSkpKSxlPW1vKGUsNSk7Zm9yKDt0PEZMLmxlbmd0aDt0KyspJHhbdF09SzUoJHhbdC0xXSwkeFsxXSksRkxbdF09SzUoRkxbdC0xXSwoQ2QoKSxNMGUpKX1mdW5jdGlvbiBBYnQoZSx0KXt2YXIgbixyLGEsbyxmO2lmKGUuYy5sZW5ndGg9PTApcmV0dXJuIG5ldyBjYShwdCgwKSxwdCgwKSk7Zm9yKG49KFNuKDAsZS5jLmxlbmd0aCksbChlLmNbMF0sMTIpKS5qLGY9MCxvPXQuZyxyPXQuZysxO2Y8ZS5jLmxlbmd0aC0xJiZuLmc8bzspKytmLG49KFNuKGYsZS5jLmxlbmd0aCksbChlLmNbZl0sMTIpKS5qO2ZvcihhPWY7YTxlLmMubGVuZ3RoLTEmJm4uZzxyOykrK2Esbj0oU24oZixlLmMubGVuZ3RoKSxsKGUuY1tmXSwxMikpLmo7cmV0dXJuIG5ldyBjYShwdChmKSxwdChhKSl9ZnVuY3Rpb24gdlNuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDO3c9T2ModCxuKSwobj09KEN0KCksRHIpfHxuPT1lcikmJih3PWxmKHcpKSxmPSExO2RvIGZvcihhPSExLG89MDtvPHcuZ2MoKS0xO28rKylFPWwody5YYihvKSwxMiksZz1sKHcuWGIobysxKSwxMiksbjluKGUsRSxnLHIpJiYoZj0hMCx2b2UoZS5hLGwody5YYihvKSwxMiksbCh3LlhiKG8rMSksMTIpKSxDPWwody5YYihvKzEpLDEyKSx3LmhkKG8rMSxsKHcuWGIobyksMTIpKSx3LmhkKG8sQyksYT0hMCk7d2hpbGUoYSk7cmV0dXJuIGZ9ZnVuY3Rpb24gd1NuKGUsdCxuKXt2YXIgcixhLG8sZjtmb3Iobi5VZyhmeXQsMSksYT1sKHljKEZpKG5ldyBibihudWxsLG5ldyBrbih0LmIsMTYpKSxuZXcgR3RlKSxQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksRWMpXSkpKSwxNSksdDJ0KGUsYSwwKSxmPVJyKHQuYiwwKTtmLmIhPWYuZC5jOylvPWwoQnIoZiksNDApLHI9Y3IoZS5hLHB0KG8uZykpIT1udWxsP2woY3IoZS5hLHB0KG8uZykpLDE3KS5hOjAscnQobywoSGMoKSwkZCkscHQocikpO24uVmcoKX1mdW5jdGlvbiBOVShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztyZXR1cm4gZz10LmktZS5nLzIsdz1uLmktZS5nLzIsRT10LmotZS5nLzIsQz1uLmotZS5nLzIsbz10LmcrZS5nLGY9bi5nK2UuZyxyPXQuZitlLmcsYT1uLmYrZS5nLGc8dytmJiZ3PGcmJkU8QythJiZDPEV8fHc8ZytvJiZnPHcmJkM8RStyJiZFPEN8fGc8dytmJiZ3PGcmJkU8QyYmQzxFK3I/ITA6dzxnK28mJmc8dyYmRTxDK2EmJkM8RX1mdW5jdGlvbiB5U24oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihvPXQuYy5sZW5ndGgsZj0oU24obix0LmMubGVuZ3RoKSxsKHQuY1tuXSwyOTMpKSxnPWYuYS5vLmEsTD1mLmMsQj0wLEU9Zi5jO0U8PWYuZjtFKyspe2lmKGc8PWUuYVtFXSlyZXR1cm4gRTtmb3IoQz1lLmFbRV0sdz1udWxsLGE9bisxO2E8bzthKyspcj0oU24oYSx0LmMubGVuZ3RoKSxsKHQuY1thXSwyOTMpKSxyLmM8PUUmJnIuZj49RSYmKHc9cik7dyYmKEM9Yi5NYXRoLm1heChDLHcuYS5vLmEpKSxDPkImJihMPUUsQj1DKX1yZXR1cm4gTH1mdW5jdGlvbiB4U24oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKG89bmV3IEtwKGwoWHIobmV3IFdoKSw1MCkpLGc9aWEsbj1uZXcgRyhlLmQpO24uYTxuLmMuYy5sZW5ndGg7KXtmb3IodD1sKHJlKG4pLDIyNiksZz10LmMuYztvLmEuZ2MoKSE9MCYmKGY9bChvLmEuVGMoKSwyMjYpLGYuYy5jK2YuYy5iPGcpOylvLmEuQmMoZikhPW51bGw7Zm9yKGE9by5hLmVjKCkuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMjI2KSx1aShyLmIsdCksdWkodC5iLHIpO28uYS56Yyh0LChIbigpLFBiKSk9PW51bGx9fWZ1bmN0aW9uIExidChlLHQsbil7dmFyIHIsYSxvLGYsZztpZighWmsodCkpe2ZvcihnPW4uZWgoKERlKHQsMTYpP2wodCwxNikuZ2MoKTpYZyh0LktjKCkpKS9lLmF8MCksZy5VZyhkeXQsMSksZj1uZXcgciQsbz1udWxsLGE9dC5LYygpO2EuT2IoKTspcj1sKGEuUGIoKSw0MCksZj1MaChoZShsZShGaCwxKSxSbiwyMCwwLFtmLG5ldyBIZyhyKV0pKSxvJiYocnQobywoUWkoKSxkVHQpLHIpLHJ0KHIsUmRlLG8pLElvZShyKT09SW9lKG8pJiYocnQobyxqZGUscikscnQocixCVyxvKSkpLG89cjtnLlZnKCksTGJ0KGUsZixuKX19ZnVuY3Rpb24ga1NuKGUsdCl7dmFyIG4scixhO2lmKHQ9PW51bGwpe2ZvcihyPSghZS5hJiYoZS5hPW5ldyBudCh3cCxlLDksNSkpLG5ldyBvcihlLmEpKTtyLmUhPXIuaS5nYygpOylpZihuPWwoZ3IociksNjk0KSxhPW4uYywoYT8/bi56Yik9PW51bGwpcmV0dXJuIG59ZWxzZSBmb3Iocj0oIWUuYSYmKGUuYT1uZXcgbnQod3AsZSw5LDUpKSxuZXcgb3IoZS5hKSk7ci5lIT1yLmkuZ2MoKTspaWYobj1sKGdyKHIpLDY5NCksdm4odCwoYT1uLmMsYT8/bi56YikpKXJldHVybiBuO3JldHVybiBudWxsfWZ1bmN0aW9uIEp1ZShlLHQpe3ZhciBuO3N3aXRjaChuPW51bGwsdC5nKXtjYXNlIDE6ZS5lLnBmKChwaSgpLEJnZSkpJiYobj1sKGUuZS5vZihCZ2UpLDI1NikpO2JyZWFrO2Nhc2UgMzplLmUucGYoKHBpKCksRmdlKSkmJihuPWwoZS5lLm9mKEZnZSksMjU2KSk7YnJlYWs7Y2FzZSAyOmUuZS5wZigocGkoKSxQZ2UpKSYmKG49bChlLmUub2YoUGdlKSwyNTYpKTticmVhaztjYXNlIDQ6ZS5lLnBmKChwaSgpLFJnZSkpJiYobj1sKGUuZS5vZihSZ2UpLDI1NikpfXJldHVybiFuJiYobj1sKGUuZS5vZigocGkoKSx5TmUpKSwyNTYpKSxufWZ1bmN0aW9uIE1idChlLHQsbil7dmFyIHIsYSxvLGYsZyx3O2ZvcihhPW4sbz0wLGc9bmV3IEcodCk7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDI3KSxIaShmLChTYigpLHFXKSxwdChhKyspKSx3PUh5KGYpLHI9Yi5NYXRoLmF0YW4yKGYuaitmLmYvMixmLmkrZi5nLzIpLHIrPXI8MD9pdjowLHI8Ljc4NTM5ODE2MzM5NzQ0ODN8fHI+a3l0P1ZzKHcsZS5iKTpyPD1reXQmJnI+RXl0P1ZzKHcsZS5kKTpyPD1FeXQmJnI+VHl0P1ZzKHcsZS5jKTpyPD1UeXQmJlZzKHcsZS5hKSxvPU1idChlLHcsbyk7cmV0dXJuIGF9ZnVuY3Rpb24gRGJ0KGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRTtmb3IoYT0oci5jK3IuYSkvMixDaCh0LmopLHVpKHQuaixhKSxDaChuLmUpLHVpKG4uZSxhKSxFPW5ldyBRSmUsZz1uZXcgRyhlLmYpO2cuYTxnLmMuYy5sZW5ndGg7KW89bChyZShnKSwxMzIpLHc9by5hLEN1ZShFLHQsdyksQ3VlKEUsbix3KTtmb3IoZj1uZXcgRyhlLmspO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxMzIpLHc9by5iLEN1ZShFLHQsdyksQ3VlKEUsbix3KTtyZXR1cm4gRS5iKz0yLEUuYSs9amF0KHQsZS5xKSxFLmErPWphdChlLnEsbiksRX1mdW5jdGlvbiBFU24oZSx0LG4pe3ZhciByO24uVWcoIlByb2Nlc3NvciBhcnJhbmdlIG5vZGUiLDEpLFJ0KEJ0KFEodCwoSGMoKSxsSWUpKSkpLHI9bChmaChrRShGaShuZXcgYm4obnVsbCxuZXcga24odC5iLDE2KSksbmV3IGFuZSkpKSw0MCksZS5hPWwoUSh0LHdJZSksMzUzKSxlLmE9PShrQSgpLEhkZSl8fGUuYT09alc/SHZ0KGUsbmV3IElsKGhlKGxlKFBXLDEpLElHLDQwLDAsW3JdKSksbi5laCgxKSk6ZS5hPT1xZGUmJm13dChlLG5ldyBJbChoZShsZShQVywxKSxJRyw0MCwwLFtyXSkpLG4uZWgoMSkpLG4uVmcoKX1mdW5jdGlvbiB6MSgpe3oxPVUsS1c9bmV3IEhhKChwaSgpLFo2KSwxLjMpLFBDdD1uZXcgSGEoQzQsKEhuKCksITEpKSxpT2U9bmV3IGx3KDE1KSx2TT1uZXcgSGEoXzIsaU9lKSx3TT1uZXcgSGEoRXYsMTUpLERDdD1VQixOQ3Q9a3YsQkN0PWk3LEZDdD1VYixPQ3Q9cjcsbGdlPVlCLFJDdD1TNCxjT2U9KGxrZSgpLEFDdCksb09lPV9DdCxmZ2U9TUN0LHVPZT1MQ3Qsck9lPVRDdCxoZ2U9RUN0LG5PZT1rQ3QsYU9lPVNDdCx0T2U9V0IsSUN0PU5nZSxqQj15Q3QsZU9lPXdDdCwkQj14Q3Qsc09lPUNDdH1mdW5jdGlvbiBJYnQoZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKG49ZS5pLHQ9ZS5uLGc9bi5kLGUuZj09KG9sKCksRmIpP2crPShuLmEtZS5lLmIpLzI6ZS5mPT13MCYmKGcrPW4uYS1lLmUuYiksYT1uZXcgRyhlLmQpO2EuYTxhLmMuYy5sZW5ndGg7KXtzd2l0Y2gocj1sKHJlKGEpLDE4NyksZj1yLk1mKCksbz1uZXcgcWEsby5iPWcsZys9Zi5iK2UuYSxlLmIuZyl7Y2FzZSAwOm8uYT1uLmMrdC5iO2JyZWFrO2Nhc2UgMTpvLmE9bi5jK3QuYisobi5iLWYuYSkvMjticmVhaztjYXNlIDI6by5hPW4uYytuLmItdC5jLWYuYX1yLk9mKG8pfX1mdW5jdGlvbiBPYnQoZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKG49ZS5pLHQ9ZS5uLGc9bi5jLGUuYj09KEJsKCksQmIpP2crPShuLmItZS5lLmEpLzI6ZS5iPT12MCYmKGcrPW4uYi1lLmUuYSksYT1uZXcgRyhlLmQpO2EuYTxhLmMuYy5sZW5ndGg7KXtzd2l0Y2gocj1sKHJlKGEpLDE4NyksZj1yLk1mKCksbz1uZXcgcWEsby5hPWcsZys9Zi5hK2UuYSxlLmYuZyl7Y2FzZSAwOm8uYj1uLmQrdC5kO2JyZWFrO2Nhc2UgMTpvLmI9bi5kK3QuZCsobi5hLWYuYikvMjticmVhaztjYXNlIDI6by5iPW4uZCtuLmEtdC5hLWYuYn1yLk9mKG8pfX1mdW5jdGlvbiBUU24oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtDPW4uYS5jLGY9bi5hLmMrbi5hLmIsbz1sKGNyKG4uYyx0KSw0NjgpLHo9by5mLFY9by5hLHc9bmV3IGx0KEMseiksTD1uZXcgbHQoZixWKSxhPUMsbi5wfHwoYSs9ZS5jKSxhKz1uLkYrbi52KmUuYixFPW5ldyBsdChhLHopLEI9bmV3IGx0KGEsViksZkEodC5hLGhlKGxlKEVhLDEpLGR0LDgsMCxbdyxFXSkpLGc9bi5kLmEuZ2MoKT4xLGcmJihyPW5ldyBsdChhLG4uYiksdWkodC5hLHIpKSxmQSh0LmEsaGUobGUoRWEsMSksZHQsOCwwLFtCLExdKSl9ZnVuY3Rpb24gSjllKGUsdCxuKXt2YXIgcixhO2Zvcih0PGUuZC5iLmMubGVuZ3RoPyhlLmI9bChqdChlLmQuYix0KSwzMCksZS5hPWwoanQoZS5kLmIsdC0xKSwzMCksZS5jPXQpOihlLmE9bmV3IHl1KGUuZCksZS5hLnA9dC0xLHZ0KGUuZC5iLGUuYSksZS5iPW5ldyB5dShlLmQpLGUuYi5wPXQsdnQoZS5kLmIsZS5iKSxlLmM9dCksVmEobixlLmIpLGE9bmV3IGhyKGRyKGthKG4pLmEuS2MoKSxuZXcgaikpO2pyKGEpOylyPWwoeHIoYSksMTgpLCFyLmMuaS5jJiZyLmMuaS5rPT0oWm4oKSxjdSkmJlZhKHIuYy5pLGUuYSl9ZnVuY3Rpb24gTmJ0KGUpe3N3KGUsbmV3IFhtKG53KFp2KHR3KGV3KG5ldyB4MSxqRyksIkVMSyBSYW5kb21pemVyIiksJ0Rpc3RyaWJ1dGVzIHRoZSBub2RlcyByYW5kb21seSBvbiB0aGUgcGxhbmUsIGxlYWRpbmcgdG8gdmVyeSBvYmZ1c2NhdGluZyBsYXlvdXRzLiBDYW4gYmUgdXNlZnVsIHRvIGRlbW9uc3RyYXRlIHRoZSBwb3dlciBvZiAicmVhbCIgbGF5b3V0IGFsZ29yaXRobXMuJyksbmV3IHckKSkpLGd0KGUsakcsWHcsWk5lKSxndChlLGpHLEp5LDE1KSxndChlLGpHLG9HLHB0KDApKSxndChlLGpHLE94LGxUKX1mdW5jdGlvbiBaOWUoKXtaOWU9VTt2YXIgZSx0LG4scixhLG87Zm9yKEdNPVdlKEFsLEM2LDI4LDI1NSwxNSwxKSxMWT1XZShrZixBZCwyOCwxNiwxNSwxKSx0PTA7dDwyNTU7dCsrKUdNW3RdPS0xO2ZvcihuPTU3O24+PTQ4O24tLSlHTVtuXT1uLTQ4PDwyND4+MjQ7Zm9yKHI9NzA7cj49NjU7ci0tKUdNW3JdPXItNjUrMTA8PDI0Pj4yNDtmb3IoYT0xMDI7YT49OTc7YS0tKUdNW2FdPWEtOTcrMTA8PDI0Pj4yNDtmb3Iobz0wO288MTA7bysrKUxZW29dPTQ4K28mWnM7Zm9yKGU9MTA7ZTw9MTU7ZSsrKUxZW2VdPTY1K2UtMTAmWnN9ZnVuY3Rpb24gQ1NuKGUsdCl7dC5VZygiUHJvY2VzcyBncmFwaCBib3VuZHMiLDEpLHJ0KGUsKFFpKCksQmRlKSxmTyh1Y2UoeHkobmV3IGJuKG51bGwsbmV3IGtuKGUuYiwxNikpLG5ldyB6dGUpKSkpLHJ0KGUsRmRlLGZPKHVjZSh4eShuZXcgYm4obnVsbCxuZXcga24oZS5iLDE2KSksbmV3IHF0ZSkpKSkscnQoZSxySWUsZk8oY2NlKHh5KG5ldyBibihudWxsLG5ldyBrbihlLmIsMTYpKSxuZXcgSHRlKSkpKSxydChlLGlJZSxmTyhjY2UoeHkobmV3IGJuKG51bGwsbmV3IGtuKGUuYiwxNikpLG5ldyBWdGUpKSkpLHQuVmcoKX1mdW5jdGlvbiBTU24oZSl7dmFyIHQsbixyLGEsbzthPWwoUShlLChOdCgpLGJ2KSksMjEpLG89bChRKGUseFcpLDIxKSxuPW5ldyBsdChlLmYuYStlLmQuYitlLmQuYyxlLmYuYitlLmQuZCtlLmQuYSksdD1uZXcgRW8obiksYS5IYygobWgoKSxBNCkpJiYocj1sKFEoZSxxVCksOCksby5IYygoWmwoKSxhQykpJiYoci5hPD0wJiYoci5hPTIwKSxyLmI8PTAmJihyLmI9MjApKSx0LmE9Yi5NYXRoLm1heChuLmEsci5hKSx0LmI9Yi5NYXRoLm1heChuLmIsci5iKSksUnQoQnQoUShlLGFkZSkpKXx8bkxuKGUsbix0KX1mdW5jdGlvbiBfU24oZSx0KXt2YXIgbixyLGEsbztmb3Iobz1PYyh0LChDdCgpLERyKSkuS2MoKTtvLk9iKCk7KXI9bChvLlBiKCksMTIpLG49bChRKHIsKGZ0KCksamwpKSwxMCksbiYmcDAoczAoaTAoYTAocjAobmV3IF9mLDApLC4xKSxlLmlbdC5wXS5kKSxlLmlbbi5wXS5hKSk7Zm9yKGE9T2ModCxRbikuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTIpLG49bChRKHIsKGZ0KCksamwpKSwxMCksbiYmcDAoczAoaTAoYTAocjAobmV3IF9mLDApLC4xKSxlLmlbbi5wXS5kKSxlLmlbdC5wXS5hKSl9ZnVuY3Rpb24gWnVlKGUpe3ZhciB0LG4scixhLG8sZjtpZighZS5jKXtpZihmPW5ldyBRYyx0PXFNLG89dC5hLnpjKGUsdCksbz09bnVsbCl7Zm9yKHI9bmV3IG9yKGR1KGUpKTtyLmUhPXIuaS5nYygpOyluPWwoZ3IociksODkpLGE9alUobiksRGUoYSw5MCkmJkFzKGYsWnVlKGwoYSwyOSkpKSxxcihmLG4pO3QuYS5CYyhlKSE9bnVsbCx0LmEuZ2MoKT09MH1rNW4oZiksSXkoZiksZS5jPW5ldyBONSgobChPZSh0dCgobGIoKSxWbikubyksMTUpLDE5KSxmLmkpLGYuZyksWWwoZSkuYiY9LTMzfXJldHVybiBlLmN9ZnVuY3Rpb24gZWtlKGUpe3ZhciB0O2lmKGUuYyE9MTApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLFZHKSkpKTtzd2l0Y2godD1lLmEsdCl7Y2FzZSAxMTA6dD0xMDticmVhaztjYXNlIDExNDp0PTEzO2JyZWFrO2Nhc2UgMTE2OnQ9OTticmVhaztjYXNlIDkyOmNhc2UgMTI0OmNhc2UgNDY6Y2FzZSA5NDpjYXNlIDQ1OmNhc2UgNjM6Y2FzZSA0MjpjYXNlIDQzOmNhc2UgMTIzOmNhc2UgMTI1OmNhc2UgNDA6Y2FzZSA0MTpjYXNlIDkxOmNhc2UgOTM6YnJlYWs7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfXJldHVybiB0fWZ1bmN0aW9uIFBidChlKXt2YXIgdCxuLHIsYSxvO2lmKGUubD09MCYmZS5tPT0wJiZlLmg9PTApcmV0dXJuIjAiO2lmKGUuaD09U1AmJmUubT09MCYmZS5sPT0wKXJldHVybiItOTIyMzM3MjAzNjg1NDc3NTgwOCI7aWYoZS5oPj4xOSlyZXR1cm4iLSIrUGJ0KHhFKGUpKTtmb3Iobj1lLHI9IiI7IShuLmw9PTAmJm4ubT09MCYmbi5oPT0wKTspe2lmKGE9TG9lKEpVKSxuPU5rZShuLGEsITApLHQ9IiIrclplKE5iKSwhKG4ubD09MCYmbi5tPT0wJiZuLmg9PTApKWZvcihvPTktdC5sZW5ndGg7bz4wO28tLSl0PSIwIit0O3I9dCtyfXJldHVybiByfWZ1bmN0aW9uIEFTbihlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3IodD0hMSxuPTAsYT1uZXcgRyhlLmQuYik7YS5hPGEuYy5jLmxlbmd0aDspZm9yKHI9bChyZShhKSwzMCksci5wPW4rKyxmPW5ldyBHKHIuYSk7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDEwKSwhdCYmIVprKHNwKG8pKSYmKHQ9ITApO2c9cnMoKEpzKCksSjEpLGhlKGxlKExNLDEpLGl0LDg4LDAsW3VjLHZjXSkpLHR8fChkMChnLHdmKSxkMChnLFExKSksZS5hPW5ldyB2aHQoZyksTmwoZS5mKSxObChlLmIpLE5sKGUuZSksTmwoZS5nKX1mdW5jdGlvbiBMU24oKXtpZighT2JqZWN0LmNyZWF0ZXx8IU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKXJldHVybiExO3ZhciBlPSJfX3Byb3RvX18iLHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtpZih0W2VdIT09dm9pZCAwKXJldHVybiExO3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpO3JldHVybiEobi5sZW5ndGghPTB8fCh0W2VdPTQyLHRbZV0hPT00Mil8fE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmxlbmd0aD09MCl9ZnVuY3Rpb24gTVNuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEw7Zm9yKHI9bi5jLGE9bi5kLGc9STEodC5jKSx3PUkxKHQuZCkscj09dC5jPyhnPWo5ZShlLGcsYSksdz1xZ3QodC5kKSk6KGc9cWd0KHQuYyksdz1qOWUoZSx3LGEpKSxFPW5ldyBHeih0LmEpLENzKEUsZyxFLmEsRS5hLmEpLENzKEUsdyxFLmMuYixFLmMpLGY9dC5jPT1yLEw9bmV3IGpRZSxvPTA7bzxFLmItMTsrK28pQz1uZXcgY2EobChmZihFLG8pLDgpLGwoZmYoRSxvKzEpLDgpKSxmJiZvPT0wfHwhZiYmbz09RS5iLTI/TC5iPUM6dnQoTC5hLEMpO3JldHVybiBMfWZ1bmN0aW9uIERTbihlLHQpe3ZhciBuLHIsYSxvO2lmKG89ZS5qLmctdC5qLmcsbyE9MClyZXR1cm4gbztpZihuPWwoUShlLChOdCgpLGsyKSksMTcpLHI9bChRKHQsazIpLDE3KSxuJiZyJiYoYT1uLmEtci5hLGEhPTApKXJldHVybiBhO3N3aXRjaChlLmouZyl7Y2FzZSAxOnJldHVybiBZaShlLm4uYSx0Lm4uYSk7Y2FzZSAyOnJldHVybiBZaShlLm4uYix0Lm4uYik7Y2FzZSAzOnJldHVybiBZaSh0Lm4uYSxlLm4uYSk7Y2FzZSA0OnJldHVybiBZaSh0Lm4uYixlLm4uYik7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgbmMoekVlKSl9fWZ1bmN0aW9uIHRrZShlLHQsbixyKXt2YXIgYSxvLGYsZyx3O2lmKFhnKChPTygpLG5ldyBocihkcihzcCh0KS5hLktjKCksbmV3IGopKSkpPj1lLmF8fCFCeGUodCxuKSlyZXR1cm4tMTtpZihaayhsKHIuS2IodCksMjApKSlyZXR1cm4gMTtmb3IoYT0wLGY9bChyLktiKHQpLDIwKS5LYygpO2YuT2IoKTspaWYobz1sKGYuUGIoKSwxOCksdz1vLmMuaT09dD9vLmQuaTpvLmMuaSxnPXRrZShlLHcsbixyKSxnPT0tMXx8KGE9Yi5NYXRoLm1heChhLGcpLGE+ZS5jLTEpKXJldHVybi0xO3JldHVybiBhKzF9ZnVuY3Rpb24gQmJ0KGUsdCl7dmFyIG4scixhLG8sZixnO2lmKHFlKHQpPT09cWUoZSkpcmV0dXJuITA7aWYoIURlKHQsMTUpfHwocj1sKHQsMTUpLGc9ZS5nYygpLHIuZ2MoKSE9ZykpcmV0dXJuITE7aWYoZj1yLktjKCksZS5ZaSgpKXtmb3Iobj0wO248ZzsrK24paWYoYT1lLlZpKG4pLG89Zi5QYigpLGE9PW51bGw/byE9bnVsbDohUGkoYSxvKSlyZXR1cm4hMX1lbHNlIGZvcihuPTA7bjxnOysrbilpZihhPWUuVmkobiksbz1mLlBiKCkscWUoYSkhPT1xZShvKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBGYnQoZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYoZS5mPjApe2lmKGUuX2ooKSx0IT1udWxsKXtmb3Iobz0wO288ZS5kLmxlbmd0aDsrK28paWYobj1lLmRbb10sbil7Zm9yKHI9bChuLmcsMzc5KSxnPW4uaSxmPTA7ZjxnOysrZilpZihhPXJbZl0sUGkodCxhLm1kKCkpKXJldHVybiEwfX1lbHNlIGZvcihvPTA7bzxlLmQubGVuZ3RoOysrbylpZihuPWUuZFtvXSxuKXtmb3Iocj1sKG4uZywzNzkpLGc9bi5pLGY9MDtmPGc7KytmKWlmKGE9cltmXSxxZSh0KT09PXFlKGEubWQoKSkpcmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIElTbihlLHQpe3ZhciBuLHIsYTtyZXR1cm4gbj10LnFpKGUuYSksbiYmKGE9ZWkobjEoKCFuLmImJihuLmI9bmV3IGRoKChUbigpLE5vKSxZYyxuKSksbi5iKSwiYWZmaWxpYXRpb24iKSksYSE9bnVsbCk/KHI9UnEoYSxjbCgzNSkpLHI9PS0xP0JjZShlLEtfKGUsQWgodC5xaygpKSksYSk6cj09MD9CY2UoZSxudWxsLChYbigxLGEubGVuZ3RoKzEpLGEuc3Vic3RyKDEpKSk6QmNlKGUsKEdhKDAscixhLmxlbmd0aCksYS5zdWJzdHIoMCxyKSksKFhuKHIrMSxhLmxlbmd0aCsxKSxhLnN1YnN0cihyKzEpKSkpOm51bGx9ZnVuY3Rpb24gT1NuKGUsdCxuKXt2YXIgcixhLG8sZjtuLlVnKCJPcnRob2dvbmFsbHkgcm91dGluZyBoaWVyYXJjaGljYWwgcG9ydCBlZGdlcyIsMSksZS5hPTAscj1BTG4odCksT01uKHQsciksbU1uKGUsdCxyKSxPRG4odCksYT1sKFEodCwoTnQoKSxNcykpLDEwMSksbz10LmIsanZ0KChTbigwLG8uYy5sZW5ndGgpLGwoby5jWzBdLDMwKSksYSx0KSxqdnQobChqdChvLG8uYy5sZW5ndGgtMSksMzApLGEsdCksZj10LmIsWW10KChTbigwLGYuYy5sZW5ndGgpLGwoZi5jWzBdLDMwKSkpLFltdChsKGp0KGYsZi5jLmxlbmd0aC0xKSwzMCkpLG4uVmcoKX1mdW5jdGlvbiBua2UoZSl7c3dpdGNoKGUpe2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6cmV0dXJuIGUtNDg8PDI0Pj4yNDtjYXNlIDk3OmNhc2UgOTg6Y2FzZSA5OTpjYXNlIDEwMDpjYXNlIDEwMTpjYXNlIDEwMjpyZXR1cm4gZS05NysxMDw8MjQ+PjI0O2Nhc2UgNjU6Y2FzZSA2NjpjYXNlIDY3OmNhc2UgNjg6Y2FzZSA2OTpjYXNlIDcwOnJldHVybiBlLTY1KzEwPDwyND4+MjQ7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgZ2QoIkludmFsaWQgaGV4YWRlY2ltYWwiKSl9fWZ1bmN0aW9uIFBVKCl7UFU9VSxqX2U9bmV3IEw1KCJTUElSQUwiLDApLFBfZT1uZXcgTDUoIkxJTkVfQllfTElORSIsMSksQl9lPW5ldyBMNSgiTUFOSEFUVEFOIiwyKSxOX2U9bmV3IEw1KCJKSVRURVIiLDMpLHowZT1uZXcgTDUoIlFVQURSQU5UU19MSU5FX0JZX0xJTkUiLDQpLFJfZT1uZXcgTDUoIlFVQURSQU5UU19NQU5IQVRUQU4iLDUpLEZfZT1uZXcgTDUoIlFVQURSQU5UU19KSVRURVIiLDYpLE9fZT1uZXcgTDUoIkNPTUJJTkVfTElORV9CWV9MSU5FX01BTkhBVFRBTiIsNyksSV9lPW5ldyBMNSgiQ09NQklORV9KSVRURVJfTUFOSEFUVEFOIiw4KX1mdW5jdGlvbiBSYnQoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFO2Zvcih3PVR1ZShlLG4pLEU9VHVlKHQsbiksYT0hMTt3JiZFJiYocnx8QzduKHcsRSxuKSk7KWY9VHVlKHcsbiksZz1UdWUoRSxuKSx1Tih0KSx1TihlKSxvPXcuYyxDbGUodywhMSksQ2xlKEUsITEpLG4/KEZ5KHQsRS5wLG8pLHQucD1FLnAsRnkoZSx3LnArMSxvKSxlLnA9dy5wKTooRnkoZSx3LnAsbyksZS5wPXcucCxGeSh0LEUucCsxLG8pLHQucD1FLnApLFZhKHcsbnVsbCksVmEoRSxudWxsKSx3PWYsRT1nLGE9ITA7cmV0dXJuIGF9ZnVuY3Rpb24gamJ0KGUpe3N3aXRjaChlLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IEdyZTtjYXNlIDE6cmV0dXJuIG5ldyBYUztjYXNlIDM6cmV0dXJuIG5ldyBmZXQ7Y2FzZSA0OnJldHVybiBuZXcgemVlO2Nhc2UgNTpyZXR1cm4gbmV3IHpydDtjYXNlIDY6cmV0dXJuIG5ldyBqSTtjYXNlIDI6cmV0dXJuIG5ldyBZUztjYXNlIDc6cmV0dXJuIG5ldyBhejtjYXNlIDg6cmV0dXJuIG5ldyBSSTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbigiTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbGF5ZXJlciAiKyhlLmYhPW51bGw/ZS5mOiIiK2UuZykpKX19ZnVuY3Rpb24gTlNuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7Zm9yKGE9ITEsbz0hMSxnPW5ldyBHKHIuaik7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDEyKSxxZShRKGYsKGZ0KCksemkpKSk9PT1xZShuKSYmKGYuZy5jLmxlbmd0aD09MD9mLmUuYy5sZW5ndGg9PTB8fChhPSEwKTpvPSEwKTtyZXR1cm4gdz0wLGEmJmFebz93PW4uaj09KEN0KCksUW4pPy1lLmVbci5jLnBdW3IucF06dC1lLmVbci5jLnBdW3IucF06byYmYV5vP3c9ZS5lW3IuYy5wXVtyLnBdKzE6YSYmbyYmKHc9bi5qPT0oQ3QoKSxRbik/MDp0LzIpLHd9ZnVuY3Rpb24gZWxlKGUsdCxuLHIsYSxvLGYsZyl7dmFyIHcsRSxDO2Zvcih3PTAsdCE9bnVsbCYmKHdePXMyKHQudG9Mb3dlckNhc2UoKSkpLG4hPW51bGwmJih3Xj1zMihuKSksciE9bnVsbCYmKHdePXMyKHIpKSxmIT1udWxsJiYod149czIoZikpLGchPW51bGwmJih3Xj1zMihnKSksRT0wLEM9by5sZW5ndGg7RTxDO0UrKyl3Xj1zMihvW0VdKTtlP3d8PTI1Njp3Jj0tMjU3LGE/d3w9MTY6dyY9LTE3LHRoaXMuZj13LHRoaXMuaT10PT1udWxsP251bGw6KG5yKHQpLHQpLHRoaXMuYT1uLHRoaXMuZD1yLHRoaXMuaj1vLHRoaXMuZz1mLHRoaXMuZT1nfWZ1bmN0aW9uIHJrZShlLHQsbil7dmFyIHIsYTtzd2l0Y2goYT1udWxsLHQuZyl7Y2FzZSAxOmE9KGtsKCkseEFlKTticmVhaztjYXNlIDI6YT0oa2woKSxFQWUpfXN3aXRjaChyPW51bGwsbi5nKXtjYXNlIDE6cj0oa2woKSxrQWUpO2JyZWFrO2Nhc2UgMjpyPShrbCgpLHlBZSk7YnJlYWs7Y2FzZSAzOnI9KGtsKCksVEFlKTticmVhaztjYXNlIDQ6cj0oa2woKSxDQWUpfXJldHVybiBhJiZyP0c4KGUuaixuZXcgZ3oobmV3IElsKGhlKGxlKG9PbiwxKSxSbiwxNzgsMCxbbChYcihhKSwxNzgpLGwoWHIociksMTc4KV0pKSkpOihDbigpLENuKCksX28pfWZ1bmN0aW9uIFBTbihlKXt2YXIgdCxuLHI7c3dpdGNoKHQ9bChRKGUsKE50KCkscVQpKSw4KSxydChlLHFULG5ldyBsdCh0LmIsdC5hKSksbChRKGUsUmQpLDI1NSkuZyl7Y2FzZSAxOnJ0KGUsUmQsKG9nKCksblkpKTticmVhaztjYXNlIDI6cnQoZSxSZCwob2coKSxlWSkpO2JyZWFrO2Nhc2UgMzpydChlLFJkLChvZygpLEhCKSk7YnJlYWs7Y2FzZSA0OnJ0KGUsUmQsKG9nKCksVkIpKX0oZS5xP2UucTooQ24oKSxDbigpLG1nKSkuX2IodzQpJiYobj1sKFEoZSx3NCksOCkscj1uLmEsbi5hPW4uYixuLmI9cil9ZnVuY3Rpb24gJGJ0KGUsdCxuLHIsYSxvKXtpZih0aGlzLmI9bix0aGlzLmQ9YSxlPj10Lmxlbmd0aCl0aHJvdyB1ZShuZXcgdGMoIkdyZWVkeSBTd2l0Y2hEZWNpZGVyOiBGcmVlIGxheWVyIG5vdCBpbiBncmFwaC4iKSk7dGhpcy5jPXRbZV0sdGhpcy5lPW5ldyBJTyhyKSxpY2UodGhpcy5lLHRoaXMuYywoQ3QoKSxlcikpLHRoaXMuaT1uZXcgSU8ociksaWNlKHRoaXMuaSx0aGlzLmMsYXIpLHRoaXMuZj1uZXcgaXN0KHRoaXMuYyksdGhpcy5hPSFvJiZhLmkmJiFhLnMmJnRoaXMuY1swXS5rPT0oWm4oKSxVcyksdGhpcy5hJiZXOW4odGhpcyxlLHQubGVuZ3RoKX1mdW5jdGlvbiB6YnQoZSx0KXt2YXIgbixyLGEsbyxmLGc7bz0hZS5CLkhjKChabCgpLHNGKSksZj1lLkIuSGMoR2dlKSxlLmE9bmV3IF8xdChmLG8sZS5jKSxlLm4mJk81ZShlLmEubixlLm4pLFhpZShlLmcsKHQxKCksJHUpLGUuYSksdHx8KHI9bmV3IERBKDEsbyxlLmMpLHIubi5hPWUuayxROChlLnAsKEN0KCksUW4pLHIpLGE9bmV3IERBKDEsbyxlLmMpLGEubi5kPWUuayxROChlLnAsRHIsYSksZz1uZXcgREEoMCxvLGUuYyksZy5uLmM9ZS5rLFE4KGUucCxlcixnKSxuPW5ldyBEQSgwLG8sZS5jKSxuLm4uYj1lLmssUTgoZS5wLGFyLG4pKX1mdW5jdGlvbiBCU24oZSl7dmFyIHQsbixyO3N3aXRjaCh0PWwoUShlLmQsKE50KCksYnApKSwyMjMpLHQuZyl7Y2FzZSAyOm49VEluKGUpO2JyZWFrO2Nhc2UgMzpuPShyPW5ldyBidCxJcyhGaShmYyhEYyhEYyhuZXcgYm4obnVsbCxuZXcga24oZS5kLmIsMTYpKSxuZXcgZGVlKSxuZXcgZ2VlKSxuZXcgcGVlKSxuZXcgd1MpLG5ldyB4WWUocikpLHIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgdWUobmV3IG5jKCJDb21wYWN0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yICIrdCsiIGVkZ2VzLiIpKX1HTG4oZSxuKSx0byhuZXcgYnIoZS5nKSxuZXcgd1llKGUpKX1mdW5jdGlvbiBGU24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztpZih0LlVnKCJQcm9jZXNzIGRpcmVjdGlvbnMiLDEpLG49bChRKGUsKEhjKCkseTMpKSw4OCksbiE9KEpzKCksUTEpKWZvcihhPVJyKGUuYiwwKTthLmIhPWEuZC5jOyl7c3dpdGNoKHI9bChCcihhKSw0MCksZz1sKFEociwoUWkoKSxQQikpLDE3KS5hLHc9bChRKHIsQkIpLDE3KS5hLG4uZyl7Y2FzZSA0OncqPS0xO2JyZWFrO2Nhc2UgMTpvPWcsZz13LHc9bzticmVhaztjYXNlIDI6Zj1nLGc9LXcsdz1mfXJ0KHIsUEIscHQoZykpLHJ0KHIsQkIscHQodykpfXQuVmcoKX1mdW5jdGlvbiBSU24oZSx0KXt2YXIgbjtyZXR1cm4gbj1uZXcgQnMsdCYmcGMobixsKGNyKGUuYSxvRiksOTYpKSxEZSh0LDQyMikmJnBjKG4sbChjcihlLmEsY0YpLDk2KSksRGUodCwzNjYpPyhwYyhuLGwoY3IoZS5hLGVjKSw5NikpLG4pOihEZSh0LDg0KSYmcGMobixsKGNyKGUuYSxfciksOTYpKSxEZSh0LDIwNyk/KHBjKG4sbChjcihlLmEsQWkpLDk2KSksbik6RGUodCwxOTMpPyhwYyhuLGwoY3IoZS5hLEhsKSw5NikpLG4pOihEZSh0LDMyNikmJnBjKG4sbChjcihlLmEsanMpLDk2KSksbikpfWZ1bmN0aW9uIGpTbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O2Zvcih3PW5ldyB4dXQsZz1uZXcgRyhlLmEpO2cuYTxnLmMuYy5sZW5ndGg7KWlmKGY9bChyZShnKSwxMCksZi5rIT0oWm4oKSxVcykpe2Zvcih6RW4odyxmLG5ldyBxYSksbz1uZXcgaHIoZHIocXMoZikuYS5LYygpLG5ldyBqKSk7anIobyk7KWlmKGE9bCh4cihvKSwxOCksIShhLmMuaS5rPT1Vc3x8YS5kLmkuaz09VXMpKWZvcihyPVJyKGEuYSwwKTtyLmIhPXIuZC5jOyluPWwoQnIociksOCksdD1uLFJBKHcsbmV3IElrKHQuYSx0LmIpKX1yZXR1cm4gd31mdW5jdGlvbiB0bGUoKXt0bGU9VSxQT2U9bmV3IFVpKE1mZSksTk9lPShiXygpLHFCKSxPT2U9bmV3IHBuKE9mZSxOT2UpLElPZT0oQ04oKSxaVyksY1N0PW5ldyBwbihHQ2UsSU9lKSxET2U9KFhOKCksd2dlKSxvU3Q9bmV3IHBuKEtDZSxET2UpLGlTdD1uZXcgcG4oRGZlLG51bGwpLE1PZT0ock4oKSxRVyksYVN0PW5ldyBwbihJZmUsTU9lKSxMT2U9KG5xKCksYmdlKSxlU3Q9bmV3IHBuKFdDZSxMT2UpLHRTdD1uZXcgcG4oWUNlLChIbigpLCExKSksblN0PW5ldyBwbihYQ2UscHQoNjQpKSxyU3Q9bmV3IHBuKFFDZSwhMCksc1N0PXZnZX1mdW5jdGlvbiBxYnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtmb3IoZS5wPTEsYT1lLmMsTD1uZXcgYmQsQz1SdyhlLChxbygpLHp1KSkuS2MoKTtDLk9iKCk7KWZvcihFPWwoQy5QYigpLDEyKSxyPW5ldyBHKEUuZyk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDE4KSx3PW4uZC5pLGUhPXcmJihvPXcuYyxvLnA8PWEucCYmKGY9YS5wKzEsZj09dC5iLmMubGVuZ3RoPyhnPW5ldyB5dSh0KSxnLnA9Zix2dCh0LmIsZyksVmEodyxnKSk6KGc9bChqdCh0LmIsZiksMzApLFZhKHcsZykpLEwuYS56Yyh3LEwpKSk7cmV0dXJuIEx9ZnVuY3Rpb24gJFNuKGUsdCl7dmFyIG4scjtpZihuPWwoUShlLChRaSgpLE9kZSkpLDE1KSwhbnx8bi5nYygpPDEpcmV0dXJuIG51bGw7aWYobi5nYygpPT0xKXJldHVybiBsKG4uWGIoMCksNDApO3N3aXRjaChyPW51bGwsdC5nKXtjYXNlIDI6cj1sKGZoKFk4KG4uT2MoKSxuZXcgUnRlKSksNDApO2JyZWFrO2Nhc2UgMTpyPWwoZmgodnkobi5PYygpLG5ldyBvOCkpLDQwKTticmVhaztjYXNlIDQ6cj1sKGZoKFk4KG4uT2MoKSxuZXcgWmopKSw0MCk7YnJlYWs7Y2FzZSAzOnI9bChmaCh2eShuLk9jKCksbmV3IEZ0ZSkpLDQwKX1yZXR1cm4gcn1mdW5jdGlvbiBIYnQoZSl7dmFyIHQsbixyLGEsbyxmO2lmKGUuYT09bnVsbClpZihlLmE9V2UoaWgscGcsMjgsZS5jLmIuYy5sZW5ndGgsMTYsMSksZS5hWzBdPSExLG5zKGUuYywoTnQoKSxmZGUpKSlmb3Iocj1sKFEoZS5jLGZkZSksMTUpLG49ci5LYygpO24uT2IoKTspdD1sKG4uUGIoKSwxNykuYSx0PjAmJnQ8ZS5hLmxlbmd0aCYmKGUuYVt0XT0hMSk7ZWxzZSBmb3IoZj1uZXcgRyhlLmMuYiksZi5hPGYuYy5jLmxlbmd0aCYmcmUoZiksYT0xO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwzMCksZS5hW2ErK109a1RuKG8pfWZ1bmN0aW9uIHVnKCl7dWc9VSxiTT1uZXcgVWkoImFkZGl0aW9uYWxIZWlnaHQiKSxaVD1uZXcgVWkoImRyYXdpbmdIZWlnaHQiKSxaeD1uZXcgVWkoImRyYXdpbmdXaWR0aCIpLFVXPW5ldyBVaSgibWluSGVpZ2h0IiksbU09bmV3IFVpKCJtaW5XaWR0aCIpLEdXPW5ldyBVaSgicm93cyIpLFQ0PW5ldyBVaSgidGFyZ2V0V2lkdGgiKSxjZ2U9bmV3IHZzKCJtaW5Sb3dJbmNyZWFzZSIsMCksbUN0PW5ldyB2cygibWF4Um93SW5jcmVhc2UiLDApLG9nZT1uZXcgdnMoIm1pblJvd0RlY3JlYXNlIiwwKSxiQ3Q9bmV3IHZzKCJtYXhSb3dEZWNyZWFzZSIsMCl9ZnVuY3Rpb24gVmJ0KGUsdCl7dmFyIG4scixhLG87c3dpdGNoKGE9ZS5iLHQpe2Nhc2UgMTp7ZS5ifD0xLGUuYnw9NCxlLmJ8PTg7YnJlYWt9Y2FzZSAyOntlLmJ8PTIsZS5ifD00LGUuYnw9ODticmVha31jYXNlIDQ6e2UuYnw9MSxlLmJ8PTIsZS5ifD00LGUuYnw9ODticmVha31jYXNlIDM6e2UuYnw9MTYsZS5ifD04O2JyZWFrfWNhc2UgMDp7ZS5ifD0zMixlLmJ8PTE2LGUuYnw9OCxlLmJ8PTEsZS5ifD0yLGUuYnw9NDticmVha319aWYoZS5iIT1hJiZlLmMpZm9yKHI9bmV3IG9yKGUuYyk7ci5lIT1yLmkuZ2MoKTspbz1sKGdyKHIpLDQ4Miksbj1ZbChvKSx6eShuLHQpfWZ1bmN0aW9uIFVidChlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWO2ZvcihhPSExLGY9dCxnPTAsdz1mLmxlbmd0aDtnPHc7KytnKW89ZltnXSxSdCgoSG4oKSwhIW8uZSkpJiYhbChqdChlLmIsby5lLnApLDIxOSkucyYmKGE9YXwoRT1vLmUsQz1sKGp0KGUuYixFLnApLDIxOSksTD1DLmUsQj1VSmUobixMLmxlbmd0aCksej1MW0JdWzBdLHouaz09KFpuKCksVXMpP0xbQl09dkNuKG8sTFtCXSxuPyhDdCgpLGVyKTooQ3QoKSxhcikpOkMuYy5tZyhMLG4pLFY9Y1AoZSxDLG4sciksWTllKEMuZSxDLm8sbiksVikpO3JldHVybiBhfWZ1bmN0aW9uIEdidChlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKG89KCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpLmksYT1uZXcgb3IoKCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpKTthLmUhPWEuaS5nYygpOylyPWwoZ3IoYSksMjcpLHFlKGF0KHIsKHBpKCksbjcpKSkhPT1xZSgocnAoKSxETSkpJiYoZj1sKGF0KHQsYTcpLDE0Myksbj1sKGF0KHIsYTcpLDE0MyksKGY9PW58fGYmJmc2ZShmLG4pKSYmKCFyLmEmJihyLmE9bmV3IG50KEFpLHIsMTAsMTEpKSxyLmEpLmkhPTAmJihvKz1HYnQoZSxyKSkpO3JldHVybiBvfWZ1bmN0aW9uIHpTbihlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3Iocj0wLGc9MCxmPW5ldyBHKGUuZCk7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDEwNSksYT1sKHljKEZpKG5ldyBibihudWxsLG5ldyBrbihvLmosMTYpKSxuZXcgVmopLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxFYyldKSkpLDE1KSxuPW51bGwscjw9Zz8obj0oQ3QoKSxRbikscis9YS5nYygpKTpnPHImJihuPShDdCgpLERyKSxnKz1hLmdjKCkpLHQ9bixJcyhmYyhhLk9jKCksbmV3IHllZSksbmV3IFRZZSh0KSl9ZnVuY3Rpb24gcVNuKGUpe3ZhciB0LG4scixhLG87Zm9yKG89bmV3IEJ1KGUuYS5jLmxlbmd0aCksYT1uZXcgRyhlLmEpO2EuYTxhLmMuYy5sZW5ndGg7KXtzd2l0Y2gocj1sKHJlKGEpLDEwKSxuPWwoUShyLChOdCgpLFF1KSksMTcxKSx0PW51bGwsbi5nKXtjYXNlIDE6Y2FzZSAyOnQ9KFZtKCksUDYpO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6dD0oVm0oKSxGVCl9dD8ocnQociwoZnQoKSxzVyksKFZtKCksUDYpKSx0PT1GVD9EVShyLG4sKHFvKCksJGwpKTp0PT1QNiYmRFUocixuLChxbygpLHp1KSkpOiRuKG8uYyxyKX1yZXR1cm4gb31mdW5jdGlvbiBIU24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdztmb3IoZS5iPW5ldyBpMnQobmV3IElsKChDdCgpLGhlKGxlKE9vLDEpLGF1LDY0LDAsW1BjLFFuLGFyLERyLGVyXSkpKSxuZXcgSWwoKE93KCksaGUobGUobTFlLDEpLGl0LDM3MiwwLFtvMyxSYixhM10pKSkpLGY9aGUobGUoT28sMSksYXUsNjQsMCxbUGMsUW4sYXIsRHIsZXJdKSxnPTAsdz1mLmxlbmd0aDtnPHc7KytnKWZvcihvPWZbZ10sbj1oZShsZShtMWUsMSksaXQsMzcyLDAsW28zLFJiLGEzXSkscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0sUDhuKGUuYixvLHQsbmV3IGJ0KX1mdW5jdGlvbiBLYnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtpZihmPWwobCgkaShlLnIsdCksMjEpLDg3KSxnPWUudS5IYygoUmwoKSxZYikpLG49ZS51LkhjKFBNKSxyPWUudS5IYyhOTSksRT1lLnUuSGMoYTkpLEw9ZS5CLkhjKChabCgpLGZZKSksQz0hbiYmIXImJihFfHxmLmdjKCk9PTIpLHpDbihlLHQpLGE9bnVsbCx3PW51bGwsZyl7Zm9yKG89Zi5LYygpLGE9bChvLlBiKCksMTE3KSx3PWE7by5PYigpOyl3PWwoby5QYigpLDExNyk7YS5kLmI9MCx3LmQuYz0wLEMmJiFhLmEmJihhLmQuYz0wKX1MJiYoTnhuKGYpLGcmJihhLmQuYj0wLHcuZC5jPTApKX1mdW5jdGlvbiBXYnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtpZihmPWwobCgkaShlLnIsdCksMjEpLDg3KSxnPWUudS5IYygoUmwoKSxZYikpLG49ZS51LkhjKFBNKSxyPWUudS5IYyhOTSksdz1lLnUuSGMoYTkpLEw9ZS5CLkhjKChabCgpLGZZKSksRT0hbiYmIXImJih3fHxmLmdjKCk9PTIpLHVBbihlLHQpLEM9bnVsbCxhPW51bGwsZyl7Zm9yKG89Zi5LYygpLEM9bChvLlBiKCksMTE3KSxhPUM7by5PYigpOylhPWwoby5QYigpLDExNyk7Qy5kLmQ9MCxhLmQuYT0wLEUmJiFDLmEmJihDLmQuYT0wKX1MJiYoUHhuKGYpLGcmJihDLmQuZD0wLGEuZC5hPTApKX1mdW5jdGlvbiBZYnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7aWYoYT10LmssdC5wPj0wKXJldHVybiExO2lmKHQucD1uLmIsdnQobi5lLHQpLGE9PShabigpLEFhKXx8YT09QXUpe2ZvcihmPW5ldyBHKHQuaik7Zi5hPGYuYy5jLmxlbmd0aDspZm9yKG89bChyZShmKSwxMiksQz0ocj1uZXcgRyhuZXcgQzgobykuYS5nKSxuZXcgdndlKHIpKTtMYyhDLmEpOylpZihFPWwocmUoQy5hKSwxOCkuZCxnPUUuaSx3PWcuayx0LmMhPWcuYyYmKHc9PUFhfHx3PT1BdSkmJllidChlLGcsbikpcmV0dXJuITB9cmV0dXJuITB9ZnVuY3Rpb24gQlUoZSl7dmFyIHQ7cmV0dXJuIGUuRGImNjQ/VDllKGUpOih0PW5ldyBBZihUOWUoZSkpLHQuYSs9IiAoY2hhbmdlYWJsZTogIixHcCh0LChlLkJiJm0wKSE9MCksdC5hKz0iLCB2b2xhdGlsZTogIixHcCh0LChlLkJiJnI0KSE9MCksdC5hKz0iLCB0cmFuc2llbnQ6ICIsR3AodCwoZS5CYiZYeSkhPTApLHQuYSs9IiwgZGVmYXVsdFZhbHVlTGl0ZXJhbDogIixYbyh0LGUuaiksdC5hKz0iLCB1bnNldHRhYmxlOiAiLEdwKHQsKGUuQmImU2wpIT0wKSx0LmErPSIsIGRlcml2ZWQ6ICIsR3AodCwoZS5CYiZfZCkhPTApLHQuYSs9IikiLHQuYSl9ZnVuY3Rpb24gVlNuKGUsdCl7dmFyIG4scixhLG8sZjtyZXR1cm4gYT10LnFpKGUuYSksYSYmKHI9KCFhLmImJihhLmI9bmV3IGRoKChUbigpLE5vKSxZYyxhKSksYS5iKSxuPWVpKG4xKHIsaG8pKSxuIT1udWxsJiYobz1uLmxhc3RJbmRleE9mKCIjIiksZj1vPT0tMT96eWUoZSx0LmprKCksbik6bz09MD9vTihlLG51bGwsKFhuKDEsbi5sZW5ndGgrMSksbi5zdWJzdHIoMSkpKTpvTihlLChHYSgwLG8sbi5sZW5ndGgpLG4uc3Vic3RyKDAsbykpLChYbihvKzEsbi5sZW5ndGgrMSksbi5zdWJzdHIobysxKSkpLERlKGYsMTU2KSkpP2woZiwxNTYpOm51bGx9ZnVuY3Rpb24gVVNuKGUsdCl7dmFyIG4scixhLG8sZjtyZXR1cm4gcj10LnFpKGUuYSksciYmKG49KCFyLmImJihyLmI9bmV3IGRoKChUbigpLE5vKSxZYyxyKSksci5iKSxvPWVpKG4xKG4sbzBlKSksbyE9bnVsbCYmKGE9by5sYXN0SW5kZXhPZigiIyIpLGY9YT09LTE/enllKGUsdC5qaygpLG8pOmE9PTA/b04oZSxudWxsLChYbigxLG8ubGVuZ3RoKzEpLG8uc3Vic3RyKDEpKSk6b04oZSwoR2EoMCxhLG8ubGVuZ3RoKSxvLnN1YnN0cigwLGEpKSwoWG4oYSsxLG8ubGVuZ3RoKzEpLG8uc3Vic3RyKGErMSkpKSxEZShmLDE1NikpKT9sKGYsMTU2KTpudWxsfWZ1bmN0aW9uIEdTbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKGE9cVRuKGUuZCksZj1sKFEoZS5iLChJQSgpLFlfZSkpLDEwNyksZz1mLmIrZi5jLHc9Zi5kK2YuYSxDPWEuZC5hKmUuZStnLEU9YS5iLmEqZS5mK3csX2llKGUuYixuZXcgbHQoQyxFKSksQj1uZXcgRyhlLmcpO0IuYTxCLmMuYy5sZW5ndGg7KUw9bChyZShCKSw1NjgpLHQ9TC5nLWEuYS5hLG49TC5pLWEuYy5hLHI9T2koc2ZuKG5ldyBsdCh0LG4pLEwuYSxMLmIpLG1kKHpfKEphKGZ5ZShMLmUpKSxMLmQqTC5hLEwuYypMLmIpLC0uNSkpLG89ZHllKEwuZSksX3VuKEwuZSxtYShyLG8pKX1mdW5jdGlvbiBLU24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCO2Zvcih0LlVnKCJSZXN0b3JpbmcgcmV2ZXJzZWQgZWRnZXMiLDEpLHc9bmV3IEcoZS5iKTt3LmE8dy5jLmMubGVuZ3RoOylmb3IoZz1sKHJlKHcpLDMwKSxDPW5ldyBHKGcuYSk7Qy5hPEMuYy5jLmxlbmd0aDspZm9yKEU9bChyZShDKSwxMCksQj1uZXcgRyhFLmopO0IuYTxCLmMuYy5sZW5ndGg7KWZvcihMPWwocmUoQiksMTIpLGY9a2QoTC5nKSxyPWYsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sUnQoQnQoUShuLChmdCgpLFcxKSkpKSYmVXcobiwhMSk7dC5WZygpfWZ1bmN0aW9uIFdTbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3O2Zvcih3PVdlKE5hLGR0LDEwOSwoQ3QoKSxoZShsZShPbywxKSxhdSw2NCwwLFtQYyxRbixhcixEcixlcl0pKS5sZW5ndGgsMCwyKSxvPWhlKGxlKE9vLDEpLGF1LDY0LDAsW1BjLFFuLGFyLERyLGVyXSksZj0wLGc9by5sZW5ndGg7ZjxnOysrZilhPW9bZl0sd1thLmddPVdlKE5hLFpvLDI4LGUuY1thLmddLDE1LDEpO3JldHVybiBoZ3QodyxlLFFuKSxoZ3QodyxlLERyKSxidWUodyxlLFFuLHQsbixyKSxidWUodyxlLGFyLHQsbixyKSxidWUodyxlLERyLHQsbixyKSxidWUodyxlLGVyLHQsbixyKSx3fWZ1bmN0aW9uIFlTbihlLHQsbil7aWYoSHUoZS5hLHQpKXtpZihXMChsKGNyKGUuYSx0KSw0OSksbikpcmV0dXJuIDF9ZWxzZSBraShlLmEsdCxuZXcgS3MpO2lmKEh1KGUuYSxuKSl7aWYoVzAobChjcihlLmEsbiksNDkpLHQpKXJldHVybi0xfWVsc2Uga2koZS5hLG4sbmV3IEtzKTtpZihIdShlLmIsdCkpe2lmKFcwKGwoY3IoZS5iLHQpLDQ5KSxuKSlyZXR1cm4tMX1lbHNlIGtpKGUuYix0LG5ldyBLcyk7aWYoSHUoZS5iLG4pKXtpZihXMChsKGNyKGUuYixuKSw0OSksdCkpcmV0dXJuIDF9ZWxzZSBraShlLmIsbixuZXcgS3MpO3JldHVybiAwfWZ1bmN0aW9uIFhTbihlKXt2YXIgdCxuLHIsYSxvLGY7ZS5xPT0oUmEoKSxUZyl8fGUucT09TXV8fChhPWUuZi5uLmQrdEgobChRbyhlLmIsKEN0KCksUW4pKSwxMjcpKStlLmMsdD1lLmYubi5hK3RIKGwoUW8oZS5iLERyKSwxMjcpKStlLmMscj1sKFFvKGUuYixhciksMTI3KSxmPWwoUW8oZS5iLGVyKSwxMjcpLG89Yi5NYXRoLm1heCgwLHIubi5kLWEpLG89Yi5NYXRoLm1heChvLGYubi5kLWEpLG49Yi5NYXRoLm1heCgwLHIubi5hLXQpLG49Yi5NYXRoLm1heChuLGYubi5hLXQpLHIubi5kPW8sZi5uLmQ9byxyLm4uYT1uLGYubi5hPW4pfWZ1bmN0aW9uIGlrZShlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEU7aWYobj09bnVsbCl7Zm9yKGE9bChlLmcsMTI0KSxnPTA7ZzxlLmk7KytnKWlmKGY9YVtnXSxmLkxrKCk9PXQpcmV0dXJuIFRvKGUsZixyKX1yZXR1cm4gbz0oRm8oKSxsKHQsNjkpLnhrKCk/bChuLDc2KTpzZyh0LG4pKSxoaChlLmUpPyhFPSFGTihlLHQpLHI9UnUoZSxvLHIpLHc9dC5KaygpP2RiKGUsMyx0LG51bGwsbixYRShlLHQsbixEZSh0LDEwMikmJihsKHQsMTkpLkJiJklvKSE9MCksRSk6ZGIoZSwxLHQsdC5paygpLG4sLTEsRSkscj9yLm5qKHcpOnI9dyk6cj1SdShlLG8scikscn1mdW5jdGlvbiBYYnQoKXt0aGlzLmI9bmV3IGUyLHRoaXMuZD1uZXcgZTIsdGhpcy5lPW5ldyBlMix0aGlzLmM9bmV3IGUyLHRoaXMuYT1uZXcgUHIsdGhpcy5mPW5ldyBQcixVNShFYSxuZXcgUG5lLG5ldyB4SSksVTUoR09lLG5ldyBiNSxuZXcgWjkpLFU1KHZBZSxuZXcgX1MsbmV3IGtJKSxVNSh3QWUsbmV3IEZuZSxuZXcgUm5lKSxVNShnX3QsbmV3IGIkLG5ldyBtJCksVTUoY09uLG5ldyBsOCxuZXcgVzIpLFU1KGhPbixuZXcgZCQsbmV3IGckKSxVNSh1T24sbmV3IHAkLG5ldyBCbmUpLFU1KGxPbixuZXcgaDgsbmV3IHJ5KSxVNShnT24sbmV3IGpwLG5ldyBZMil9ZnVuY3Rpb24gS0EoZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihlPWU9PW51bGw/dWw6KG5yKGUpLGUpLGE9MDthPHQubGVuZ3RoO2ErKyl0W2FdPUdUbih0W2FdKTtmb3Iobj1uZXcgUzUsZj0wLHI9MDtyPHQubGVuZ3RoJiYobz1lLmluZGV4T2YoIiVzIixmKSxvIT0tMSk7KW4uYSs9IiIrdGYoZT09bnVsbD91bDoobnIoZSksZSksZixvKSx3dShuLHRbcisrXSksZj1vKzI7aWYoZmN0KG4sZSxmLGUubGVuZ3RoKSxyPHQubGVuZ3RoKXtmb3Iobi5hKz0iIFsiLHd1KG4sdFtyKytdKTtyPHQubGVuZ3RoOyluLmErPUNvLHd1KG4sdFtyKytdKTtuLmErPSJdIn1yZXR1cm4gbi5hfWZ1bmN0aW9uIHNrZShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihuPTAsdz1uZXcgRyh0KTt3LmE8dy5jLmMubGVuZ3RoOyl7Zm9yKGc9bChyZSh3KSwxMiksWTdlKGUuYixlLmRbZy5wXSksZj0wLGE9bmV3IE4xKGcuYik7TGMoYS5hKXx8TGMoYS5iKTspcj1sKExjKGEuYSk/cmUoYS5hKTpyZShhLmIpLDE4KSx1YXQocik/KG89ZjNlKGUsZz09ci5jP3IuZDpyLmMpLG8+ZS5kW2cucF0mJihuKz1mNmUoZS5iLG8pLGdiKGUuYSxwdChvKSkpKTorK2Y7Zm9yKG4rPWUuYi5kKmY7IWxfKGUuYSk7KVU2ZShlLmIsbChYOChlLmEpLDE3KS5hKX1yZXR1cm4gbn1mdW5jdGlvbiBRYnQoZSl7dmFyIHQsbixyLGEsbyxmO3JldHVybiBvPTAsdD1PZihlKSx0LmtrKCkmJihvfD00KSxlLkJiJlNsJiYob3w9MiksRGUoZSwxMDIpPyhuPWwoZSwxOSksYT1SbyhuKSxuLkJiJmV1JiYob3w9MzIpLGEmJih5cihreShhKSksb3w9OCxmPWEudCwoZj4xfHxmPT0tMSkmJihvfD0xNiksYS5CYiZldSYmKG98PTY0KSksbi5CYiZJbyYmKG98PXI0KSxvfD1tMCk6RGUodCw0NjkpP298PTUxMjoocj10LmtrKCksciYmci5pJjEmJihvfD0yNTYpKSxlLkJiJjUxMiYmKG98PTEyOCksb31mdW5jdGlvbiBRU24oZSx0KXt2YXIgbjtyZXR1cm4gZS5mPT1zcGU/KG49a3coaWMoKEVsKCksaW8pLHQpKSxlLmU/bj09NCYmdCE9KGt4KCksdTkpJiZ0IT0oa3goKSxjOSkmJnQhPShreCgpLGFwZSkmJnQhPShreCgpLG9wZSk6bj09Mik6ZS5kJiYoZS5kLkhjKHQpfHxlLmQuSGMocngoaWMoKEVsKCksaW8pLHQpKSl8fGUuZC5IYyhnNigoRWwoKSxpbyksZS5iLHQpKSk/ITA6ZS5mJiZxOWUoKEVsKCksZS5mKSxITyhpYyhpbyx0KSkpPyhuPWt3KGljKGlvLHQpKSxlLmU/bj09NDpuPT0yKTohMX1mdW5jdGlvbiBKU24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHo7Zm9yKEI9LTEsej0wLEU9ZSxDPTAsTD1FLmxlbmd0aDtDPEw7KytDKXtmb3Iodz1FW0NdLG89dyxmPTAsZz1vLmxlbmd0aDtmPGc7KytmKWZvcihhPW9bZl0sdD1uZXcgU2N0KEI9PS0xP2VbMF06ZVtCXSxsKFEoZW8oYSksKE50KCkseWcpKSwyODQpLGlndChhKSxSdChCdChRKGVvKGEpLFExZSkpKSksbj0wO248YS5qLmMubGVuZ3RoO24rKylmb3Iocj1uKzE7cjxhLmouYy5sZW5ndGg7cisrKUFzdCh0LGwoanQoYS5qLG4pLDEyKSxsKGp0KGEuaixyKSwxMikpPjAmJisrejsrK0J9cmV0dXJuIHp9ZnVuY3Rpb24gWlNuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEw7cmV0dXJuIGY9bChhdChuLChwaSgpLG45KSksOCksdz1mLmEsQz1mLmIrZSxhPWIuTWF0aC5hdGFuMihDLHcpLGE8MCYmKGErPWl2KSxhKz10LGE+aXYmJihhLT1pdiksZz1sKGF0KHIsbjkpLDgpLEU9Zy5hLEw9Zy5iK2Usbz1iLk1hdGguYXRhbjIoTCxFKSxvPDAmJihvKz1pdiksbys9dCxvPml2JiYoby09aXYpLEExKCksZjAoMWUtMTApLGIuTWF0aC5hYnMoYS1vKTw9MWUtMTB8fGE9PW98fGlzTmFOKGEpJiZpc05hTihvKT8wOmE8bz8tMTphPm8/MTp1dyhpc05hTihhKSxpc05hTihvKSl9ZnVuY3Rpb24gbmxlKGUpe3ZhciB0LG4scixhLG8sZixnO2ZvcihnPW5ldyBQcixyPW5ldyBHKGUuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyl0PWwocmUociksNjApLGtpKGcsdCxuZXcgYnQpO2ZvcihhPW5ldyBHKGUuYS5iKTthLmE8YS5jLmMubGVuZ3RoOylmb3IodD1sKHJlKGEpLDYwKSx0Lmk9aWEsZj10LmMuS2MoKTtmLk9iKCk7KW89bChmLlBiKCksNjApLGwoaGMoem8oZy5mLG8pKSwxNSkuRmModCk7Zm9yKG49bmV3IEcoZS5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSw2MCksdC5jLiRiKCksdC5jPWwoaGMoem8oZy5mLHQpKSwxNSk7d2J0KGUpfWZ1bmN0aW9uIHJsZShlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3IoZz1uZXcgUHIscj1uZXcgRyhlLmEuYik7ci5hPHIuYy5jLmxlbmd0aDspdD1sKHJlKHIpLDg2KSxraShnLHQsbmV3IGJ0KTtmb3IoYT1uZXcgRyhlLmEuYik7YS5hPGEuYy5jLmxlbmd0aDspZm9yKHQ9bChyZShhKSw4NiksdC5vPWlhLGY9dC5mLktjKCk7Zi5PYigpOylvPWwoZi5QYigpLDg2KSxsKGhjKHpvKGcuZixvKSksMTUpLkZjKHQpO2ZvcihuPW5ldyBHKGUuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksODYpLHQuZi4kYigpLHQuZj1sKGhjKHpvKGcuZix0KSksMTUpO2FidChlKX1mdW5jdGlvbiBlX24oZSx0LG4scil7dmFyIGEsbztmb3IoaThuKGUsdCxuLHIpLGJ3ZSh0LGUuai10LmorbiksQXoodCxlLmstdC5rK3IpLG89bmV3IEcodC5mKTtvLmE8by5jLmMubGVuZ3RoOylzd2l0Y2goYT1sKHJlKG8pLDMzNCksYS5hLmcpe2Nhc2UgMDp5RShlLHQuZythLmIuYSwwLHQuZythLmMuYSx0LmktMSk7YnJlYWs7Y2FzZSAxOnlFKGUsdC5nK3Qubyx0LmkrYS5iLmEsZS5vLTEsdC5pK2EuYy5hKTticmVhaztjYXNlIDI6eUUoZSx0LmcrYS5iLmEsdC5pK3QucCx0LmcrYS5jLmEsZS5wLTEpO2JyZWFrO2RlZmF1bHQ6eUUoZSwwLHQuaSthLmIuYSx0LmctMSx0LmkrYS5jLmEpfX1mdW5jdGlvbiB0X24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2ZvcihvPW5ldyBidCx0LmIuYy5sZW5ndGg9MCxuPWwoeWMoSzVlKG5ldyBibihudWxsLG5ldyBrbihuZXcgYnIoZS5hLmIpLDEpKSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsWyhGbCgpLEVjKV0pKSksMTUpLGE9bi5LYygpO2EuT2IoKTspaWYocj1sKGEuUGIoKSwxNyksZj1zNmUoZS5hLHIpLGYuYiE9MClmb3IoZz1uZXcgeXUodCksJG4oby5jLGcpLGcucD1yLmEsRT1ScihmLDApO0UuYiE9RS5kLmM7KXc9bChCcihFKSwxMCksVmEodyxnKTtyYSh0LmIsbyl9ZnVuY3Rpb24gRlUoZSx0LG4scixhKXt2YXIgbyxmLGc7dHJ5e2lmKHQ+PWUubyl0aHJvdyB1ZShuZXcgQndlKTtnPXQ+PjUsZj10JjMxLG89bDAoMSxZcihsMChmLDEpKSksYT9lLm5bbl1bZ109UTAoZS5uW25dW2ddLG8pOmUubltuXVtnXT12YShlLm5bbl1bZ10sTzRlKG8pKSxvPWwwKG8sMSkscj9lLm5bbl1bZ109UTAoZS5uW25dW2ddLG8pOmUubltuXVtnXT12YShlLm5bbl1bZ10sTzRlKG8pKX1jYXRjaCh3KXt0aHJvdyB3PWJzKHcpLERlKHcsMzMzKT91ZShuZXcgdGMoRWhlK2UubysiKiIrZS5wK1RoZSt0K0NvK24rQ2hlKSk6dWUodyl9fWZ1bmN0aW9uIG5fbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKEI9bmV3IEtwKG5ldyBWWWUoZSkpLGc9aGUobGUod2csMSksbTIsMTAsMCxbdCxuXSksdz0wLEU9Zy5sZW5ndGg7dzxFOysrdylmb3IoZj1nW3ddLEw9VEEoZixyKS5LYygpO0wuT2IoKTspZm9yKEM9bChMLlBiKCksMTIpLG89bmV3IE4xKEMuYik7TGMoby5hKXx8TGMoby5iKTspYT1sKExjKG8uYSk/cmUoby5hKTpyZShvLmIpLDE4KSxEbyhhKXx8KEIuYS56YyhDLChIbigpLFBiKSk9PW51bGwsdWF0KGEpJiZqTyhCLEM9PWEuYz9hLmQ6YS5jKSk7cmV0dXJuIFhyKEIpLG5ldyBPbChCKX1mdW5jdGlvbiBha2UoZSx0LG4scil7dmFyIGEsbyxmO3QmJihvPXplKEdlKFEodCwoUWkoKSxDMikpKSkrcixmPW4remUoR2UoUSh0LEZXKSkpLzIscnQodCxQQixwdChZcihaYyhiLk1hdGgucm91bmQobykpKSkpLHJ0KHQsQkIscHQoWXIoWmMoYi5NYXRoLnJvdW5kKGYpKSkpKSx0LmQuYj09MHx8YWtlKGUsbChQcSgoYT1ScihuZXcgSGcodCkuYS5kLDApLG5ldyBDNShhKSkpLDQwKSxuK3plKEdlKFEodCxGVykpKStlLmIscit6ZShHZShRKHQsSlQpKSkpLFEodCxqZGUpIT1udWxsJiZha2UoZSxsKFEodCxqZGUpLDQwKSxuLHIpKX1mdW5jdGlvbiByX24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCO2Zvcih3PWVvKHQuYSksYT16ZShHZShRKHcsKE50KCksdnYpKSkpKjIsQz16ZShHZShRKHcsVjYpKSksRT1iLk1hdGgubWF4KGEsQyksbz1XZShOYSxabywyOCx0LmYtdC5jKzEsMTUsMSkscj0tRSxuPTAsZz10LmIuS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMTApLHIrPWUuYVtmLmMucF0rRSxvW24rK109cjtmb3Iocis9ZS5hW3QuYS5jLnBdK0Usb1tuKytdPXIsQj1uZXcgRyh0LmUpO0IuYTxCLmMuYy5sZW5ndGg7KUw9bChyZShCKSwxMCkscis9ZS5hW0wuYy5wXStFLG9bbisrXT1yO3JldHVybiBvfWZ1bmN0aW9uIGlfbihlLHQpe3ZhciBuLHIsYSxvO2lmKG89bChhdChlLChwaSgpLHM3KSksNjQpLmctbChhdCh0LHM3KSw2NCkuZyxvIT0wKXJldHVybiBvO2lmKG49bChhdChlLGpnZSksMTcpLHI9bChhdCh0LGpnZSksMTcpLG4mJnImJihhPW4uYS1yLmEsYSE9MCkpcmV0dXJuIGE7c3dpdGNoKGwoYXQoZSxzNyksNjQpLmcpe2Nhc2UgMTpyZXR1cm4gWWkoZS5pLHQuaSk7Y2FzZSAyOnJldHVybiBZaShlLmosdC5qKTtjYXNlIDM6cmV0dXJuIFlpKHQuaSxlLmkpO2Nhc2UgNDpyZXR1cm4gWWkodC5qLGUuaik7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgbmMoekVlKSl9fWZ1bmN0aW9uIG9rZShlKXt2YXIgdCxuLHI7cmV0dXJuIGUuRGImNjQ/UHVlKGUpOih0PW5ldyBUaChjU2UpLG49ZS5rLG4/aGkoaGkoKHQuYSs9JyAiJyx0KSxuKSwnIicpOighZS5uJiYoZS5uPW5ldyBudChlYyxlLDEsNykpLGUubi5pPjAmJihyPSghZS5uJiYoZS5uPW5ldyBudChlYyxlLDEsNykpLGwoT2UoZS5uLDApLDEzNSkpLmEsIXJ8fGhpKGhpKCh0LmErPScgIicsdCksciksJyInKSkpLGhpKHJ3KGhpKHJ3KGhpKHJ3KGhpKHJ3KCh0LmErPSIgKCIsdCksZS5pKSwiLCIpLGUuaiksIiB8ICIpLGUuZyksIiwiKSxlLmYpLCIpIiksdC5hKX1mdW5jdGlvbiBKYnQoZSl7dmFyIHQsbixyO3JldHVybiBlLkRiJjY0P1B1ZShlKToodD1uZXcgVGgodVNlKSxuPWUuayxuP2hpKGhpKCh0LmErPScgIicsdCksbiksJyInKTooIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxlLm4uaT4wJiYocj0oIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxsKE9lKGUubiwwKSwxMzUpKS5hLCFyfHxoaShoaSgodC5hKz0nICInLHQpLHIpLCciJykpKSxoaShydyhoaShydyhoaShydyhoaShydygodC5hKz0iICgiLHQpLGUuaSksIiwiKSxlLmopLCIgfCAiKSxlLmcpLCIsIiksZS5mKSwiKSIpLHQuYSl9ZnVuY3Rpb24gc19uKGUsdCl7dmFyIG4scixhLG8sZjtmb3IodD09KHlBKCksQ2RlKSYmSk4obCgkaShlLmEsKFJ5KCksYkIpKSwxNSkpLGE9bCgkaShlLmEsKFJ5KCksYkIpKSwxNSkuS2MoKTthLk9iKCk7KXN3aXRjaChyPWwoYS5QYigpLDEwNSksbj1sKGp0KHIuaiwwKSwxMTMpLmQuaixvPW5ldyBPbChyLmopLFZzKG8sbmV3IFJqKSx0Lmcpe2Nhc2UgMjpMdWUoZSxvLG4sKE93KCksUmIpLDEpO2JyZWFrO2Nhc2UgMTpjYXNlIDA6Zj1VVG4obyksTHVlKGUsbmV3IFpwKG8sMCxmKSxuLChPdygpLFJiKSwwKSxMdWUoZSxuZXcgWnAobyxmLG8uYy5sZW5ndGgpLG4sUmIsMSl9fWZ1bmN0aW9uIGlsZShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2lmKHQ9PW51bGx8fHQubGVuZ3RoPT0wKXJldHVybiBudWxsO2lmKGE9bCh4dShlLmEsdCksMTQzKSwhYSl7Zm9yKHI9KGc9bmV3IGdpKGUuYikuYS52YygpLktjKCksbmV3IGZzKGcpKTtyLmEuT2IoKTspaWYobj0obz1sKHIuYS5QYigpLDQ0KSxsKG8ubWQoKSwxNDMpKSxmPW4uYyx3PXQubGVuZ3RoLHZuKGYuc3Vic3RyKGYubGVuZ3RoLXcsdyksdCkmJih0Lmxlbmd0aD09Zi5sZW5ndGh8fGNvKGYsZi5sZW5ndGgtdC5sZW5ndGgtMSk9PTQ2KSl7aWYoYSlyZXR1cm4gbnVsbDthPW59YSYmcmMoZS5hLHQsYSl9cmV0dXJuIGF9ZnVuY3Rpb24gYV9uKGUsdCl7dmFyIG4scixhLG87cmV0dXJuIG49bmV3IGFzLHI9bCh5YyhmYyhuZXcgYm4obnVsbCxuZXcga24oZS5mLDE2KSksbiksU3kobmV3IHl0LG5ldyBqaSxuZXcgcW4sbmV3IFVuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxpNCksRWNdKSkpLDIxKSxhPXIuZ2MoKSxyPWwoeWMoZmMobmV3IGJuKG51bGwsbmV3IGtuKHQuZiwxNikpLG4pLFN5KG5ldyB5dCxuZXcgamksbmV3IHFuLG5ldyBVbixoZShsZShvYywxKSxpdCwxMDgsMCxbaTQsRWNdKSkpLDIxKSxvPXIuZ2MoKSxhPG8/LTE6YT09bz8wOjF9ZnVuY3Rpb24gWmJ0KGUpe3ZhciB0LG4scjtucyhlLChOdCgpLGQzKSkmJihyPWwoUShlLGQzKSwyMSksIXIuZGMoKSYmKG49KHQ9bChLMChLbyksOSksbmV3IFpoKHQsbChjMCh0LHQubGVuZ3RoKSw5KSwwKSksci5IYygocXkoKSxqaCkpP2QwKG4samgpOmQwKG4sQzApLHIuSGMoemYpfHxkMChuLHpmKSxyLkhjKEUwKT9kMChuLFMwKTpyLkhjKG1wKT9kMChuLEVnKTpyLkhjKFQwKSYmZDAobixxZiksci5IYyhTMCk/ZDAobixFMCk6ci5IYyhFZyk/ZDAobixtcCk6ci5IYyhxZikmJmQwKG4sVDApLHJ0KGUsZDMsbikpKX1mdW5jdGlvbiBvX24oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKGE9bChRKGUsKGZ0KCksdTMpKSwxMCkscj1lLmosbj0oU24oMCxyLmMubGVuZ3RoKSxsKHIuY1swXSwxMikpLGY9bmV3IEcoYS5qKTtmLmE8Zi5jLmMubGVuZ3RoOylpZihvPWwocmUoZiksMTIpLHFlKG8pPT09cWUoUShuLHppKSkpe28uaj09KEN0KCksUW4pJiZlLnA+YS5wPyhsYShvLERyKSxvLmQmJihnPW8uby5iLHQ9by5hLmIsby5hLmI9Zy10KSk6by5qPT1EciYmYS5wPmUucCYmKGxhKG8sUW4pLG8uZCYmKGc9by5vLmIsdD1vLmEuYixvLmEuYj0tKGctdCkpKTticmVha31yZXR1cm4gYX1mdW5jdGlvbiB1UChlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMO2lmKCEoRGUodCwyMDcpfHxEZSh0LDM2Nil8fERlKHQsMTkzKSkpdGhyb3cgdWUobmV3IFluKCJNZXRob2Qgb25seSB3b3JrcyBmb3IgRWxrTm9kZS0sIEVsa0xhYmVsIGFuZCBFbGtQb3J0LW9iamVjdHMuIikpO3JldHVybiBmPWUuYS8yLHc9dC5pK3ItZixDPXQuaithLWYsRT13K3QuZytlLmEsTD1DK3QuZitlLmEsbz1uZXcgYmwsdWkobyxuZXcgbHQodyxDKSksdWkobyxuZXcgbHQodyxMKSksdWkobyxuZXcgbHQoRSxMKSksdWkobyxuZXcgbHQoRSxDKSksZz1uZXcgR3VlKG8pLHBjKGcsdCksbiYma2koZS5iLHQsZyksZ31mdW5jdGlvbiBLRShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKG89bmV3IGx0KHQsbiksQz1uZXcgRyhlLmEpO0MuYTxDLmMuYy5sZW5ndGg7KWZvcihFPWwocmUoQyksMTApLE9pKEUubixvKSxCPW5ldyBHKEUuaik7Qi5hPEIuYy5jLmxlbmd0aDspZm9yKEw9bChyZShCKSwxMiksYT1uZXcgRyhMLmcpO2EuYTxhLmMuYy5sZW5ndGg7KWZvcihyPWwocmUoYSksMTgpLER5KHIuYSxvKSxmPWwoUShyLChOdCgpLGNjKSksNzUpLGYmJkR5KGYsbyksdz1uZXcgRyhyLmIpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSw3MiksT2koZy5uLG8pfWZ1bmN0aW9uIGNfbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKG89bmV3IGx0KHQsbiksQz1uZXcgRyhlLmEpO0MuYTxDLmMuYy5sZW5ndGg7KWZvcihFPWwocmUoQyksMTApLE9pKEUubixvKSxCPW5ldyBHKEUuaik7Qi5hPEIuYy5jLmxlbmd0aDspZm9yKEw9bChyZShCKSwxMiksYT1uZXcgRyhMLmcpO2EuYTxhLmMuYy5sZW5ndGg7KWZvcihyPWwocmUoYSksMTgpLER5KHIuYSxvKSxmPWwoUShyLChOdCgpLGNjKSksNzUpLGYmJkR5KGYsbyksdz1uZXcgRyhyLmIpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSw3MiksT2koZy5uLG8pfWZ1bmN0aW9uIGVtdChlKXtpZigoIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmIpLmk9PTApdGhyb3cgdWUobmV3IEk4KCJFZGdlcyBtdXN0IGhhdmUgYSBzb3VyY2UuIikpO2lmKCghZS5jJiYoZS5jPW5ldyBMbihfcixlLDUsOCkpLGUuYykuaT09MCl0aHJvdyB1ZShuZXcgSTgoIkVkZ2VzIG11c3QgaGF2ZSBhIHRhcmdldC4iKSk7aWYoIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSwhKGUuYi5pPD0xJiYoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMuaTw9MSkpKXRocm93IHVlKG5ldyBJOCgiSHlwZXJlZGdlcyBhcmUgbm90IHN1cHBvcnRlZC4iKSl9ZnVuY3Rpb24gY2tlKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7Zm9yKEw9MCxvPW5ldyB6NSxnYihvLHQpO28uYiE9by5jOylmb3Iodz1sKFg4KG8pLDIxOSksRT0wLEM9bChRKHQuaiwoTnQoKSx5ZykpLDI4NCksZj16ZShHZShRKHQuaixoVykpKSxnPXplKEdlKFEodC5qLFRNZSkpKSxDIT0oRWQoKSxFMikmJihFKz1mKmhUbih3LmUsQyksRSs9ZypKU24ody5lKSksTCs9V2R0KHcuZCx3LmUpK0UsYT1uZXcgRyh3LmIpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwzNiksbj1sKGp0KGUuYixyLnApLDIxOSksbi5zfHwoTCs9eFUoZSxuKSk7cmV0dXJuIEx9ZnVuY3Rpb24gQ2QoKXtDZD1VO3ZhciBlO2Zvcih1Sz1uZXcgUWcoMSwxKSxNMGU9bmV3IFFnKDEsMTApLEJMPW5ldyBRZygwLDApLHc2dD1uZXcgUWcoLTEsMSkseTZ0PWhlKGxlKEE2LDEpLGR0LDkyLDAsW0JMLHVLLG5ldyBRZygxLDIpLG5ldyBRZygxLDMpLG5ldyBRZygxLDQpLG5ldyBRZygxLDUpLG5ldyBRZygxLDYpLG5ldyBRZygxLDcpLG5ldyBRZygxLDgpLG5ldyBRZygxLDkpLE0wZV0pLGxLPVdlKEE2LGR0LDkyLDMyLDAsMSksZT0wO2U8bEsubGVuZ3RoO2UrKylsS1tlXT1BcShsMCgxLGUpLDApP2tiKGwwKDEsZSkpOkpfKGtiKHIyKGwwKDEsZSkpKSl9ZnVuY3Rpb24gdG10KGUsdCxuLHIsYSxvLGYpe2lmKGUuYz1yLkxmKCkuYSxlLmQ9ci5MZigpLmIsYSYmKGUuYys9YS5MZigpLmEsZS5kKz1hLkxmKCkuYiksZS5iPXQuTWYoKS5hLGUuYT10Lk1mKCkuYiwhYSluP2UuYy09Zit0Lk1mKCkuYTplLmMrPXIuTWYoKS5hK2Y7ZWxzZSBzd2l0Y2goYS5hZygpLmcpe2Nhc2UgMDpjYXNlIDI6ZS5jKz1hLk1mKCkuYStmK28uYStmO2JyZWFrO2Nhc2UgNDplLmMtPWYrby5hK2YrdC5NZigpLmE7YnJlYWs7Y2FzZSAxOmUuYys9YS5NZigpLmErZixlLmQtPWYrby5iK2YrdC5NZigpLmI7YnJlYWs7Y2FzZSAzOmUuYys9YS5NZigpLmErZixlLmQrPWEuTWYoKS5iK2Yrby5iK2Z9fWZ1bmN0aW9uIG5tdChlLHQpe3ZhciBuLHI7Zm9yKHRoaXMuYj1uZXcgYnQsdGhpcy5lPW5ldyBidCx0aGlzLmE9ZSx0aGlzLmQ9dCxDNm4odGhpcyksRDVuKHRoaXMpLHRoaXMuYi5kYygpP3RoaXMuYz1lLmMucDp0aGlzLmM9bCh0aGlzLmIuWGIoMCksMTApLmMucCx0aGlzLmUuYy5sZW5ndGg9PTA/dGhpcy5mPWUuYy5wOnRoaXMuZj1sKGp0KHRoaXMuZSx0aGlzLmUuYy5sZW5ndGgtMSksMTApLmMucCxyPWwoUShlLChmdCgpLFdMKSksMTUpLktjKCk7ci5PYigpOylpZihuPWwoci5QYigpLDcyKSxucyhuLChOdCgpLGdXKSkpe3RoaXMuZD1sKFEobixnVyksMjMyKTticmVha319ZnVuY3Rpb24gV0UoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7Zm9yKHI9bChjcihlLmEsdCksNDkpLG89bChjcihlLmEsbiksNDkpLGE9bChjcihlLmUsdCksNDkpLGY9bChjcihlLmUsbiksNDkpLHIuYS56YyhuLHIpLGYuYS56Yyh0LGYpLEM9by5hLmVjKCkuS2MoKTtDLk9iKCk7KUU9bChDLlBiKCksMTApLHIuYS56YyhFLHIpLG5hKGwoY3IoZS5lLEUpLDQ5KSx0KSxLYShsKGNyKGUuZSxFKSw0OSksYSk7Zm9yKHc9YS5hLmVjKCkuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTApLGYuYS56YyhnLGYpLG5hKGwoY3IoZS5hLGcpLDQ5KSxuKSxLYShsKGNyKGUuYSxnKSw0OSksbyl9ZnVuY3Rpb24gbFAoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7Zm9yKHI9bChjcihlLmEsdCksNDkpLG89bChjcihlLmEsbiksNDkpLGE9bChjcihlLmIsdCksNDkpLGY9bChjcihlLmIsbiksNDkpLHIuYS56YyhuLHIpLGYuYS56Yyh0LGYpLEM9by5hLmVjKCkuS2MoKTtDLk9iKCk7KUU9bChDLlBiKCksMTApLHIuYS56YyhFLHIpLG5hKGwoY3IoZS5iLEUpLDQ5KSx0KSxLYShsKGNyKGUuYixFKSw0OSksYSk7Zm9yKHc9YS5hLmVjKCkuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTApLGYuYS56YyhnLGYpLG5hKGwoY3IoZS5hLGcpLDQ5KSxuKSxLYShsKGNyKGUuYSxnKSw0OSksbyl9ZnVuY3Rpb24gZGYoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7Zm9yKHI9bChjcihlLmEsdCksNDkpLG89bChjcihlLmEsbiksNDkpLGE9bChjcihlLmQsdCksNDkpLGY9bChjcihlLmQsbiksNDkpLHIuYS56YyhuLHIpLGYuYS56Yyh0LGYpLEM9by5hLmVjKCkuS2MoKTtDLk9iKCk7KUU9bChDLlBiKCksMTIpLHIuYS56YyhFLHIpLG5hKGwoY3IoZS5kLEUpLDQ5KSx0KSxLYShsKGNyKGUuZCxFKSw0OSksYSk7Zm9yKHc9YS5hLmVjKCkuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTIpLGYuYS56YyhnLGYpLG5hKGwoY3IoZS5hLGcpLDQ5KSxuKSxLYShsKGNyKGUuYSxnKSw0OSksbyl9ZnVuY3Rpb24gdV9uKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQix6LFY7aWYobz1uLG48cilmb3IoQj0oej1uZXcgeE4oZS5wKSxWPW5ldyB4TihlLnApLEthKHouZSxlLmUpLHoucT1lLnEsei5yPVYsd0goeiksS2EoVi5qLGUuaiksVi5yPXosd0goViksbmV3IGNhKHosVikpLEw9bChCLmEsMTE4KSxDPWwoQi5iLDExOCksYT0oU24obyx0LmMubGVuZ3RoKSxsKHQuY1tvXSwzMzkpKSxmPURidChlLEwsQyxhKSxFPW4rMTtFPD1yO0UrKylnPShTbihFLHQuYy5sZW5ndGgpLGwodC5jW0VdLDMzOSkpLHc9RGJ0KGUsTCxDLGcpLFQ2bihnLHcsYSxmKSYmKGE9ZyxmPXcsbz1FKTtyZXR1cm4gb31mdW5jdGlvbiBsX24oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVjtmb3IoZj1sKE9lKHQsMCksMjcpLFV1KGYsMCksR3UoZiwwKSxCPW5ldyBidCwkbihCLmMsZiksZz1mLG89bmV3IHo0ZShlLmEsZi5nLGYuZiwoVkEoKSx6QikpLHo9MTt6PHQuaTt6KyspVj1sKE9lKHQseiksMjcpLHc9cGxlKGUsUTYsVixnLG8sQixuKSxFPXBsZShlLGU5LFYsZyxvLEIsbiksQz1wbGUoZSx4TSxWLGcsbyxCLG4pLEw9cGxlKGUseU0sVixnLG8sQixuKSxhPWpMbihlLHcsRSxDLEwsVixnLHIpLFV1KFYsYS5kKSxHdShWLGEuZSksUmUoYSx6Qiksbz1hLGc9ViwkbihCLmMsVik7cmV0dXJuIG99ZnVuY3Rpb24gaF9uKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQjtpZihDPW51bGwsQj10LEw9VWN0KGUsUGN0KG4pLEIpLGZFKEwsWWcoQixQZCkpLGY9QXcoQixoU2UpLHI9bmV3IG10dChlLEwpLE5rbihyLmEsci5iLGYpLGc9QXcoQixZZmUpLGE9bmV3IHZ0dChlLEwpLFBrbihhLmEsYS5iLGcpLCghTC5iJiYoTC5iPW5ldyBMbihfcixMLDQsNykpLEwuYikuaT09MHx8KCFMLmMmJihMLmM9bmV3IExuKF9yLEwsNSw4KSksTC5jKS5pPT0wKXRocm93IG89WWcoQixQZCksdz13NHQrbyxFPXcra1QsdWUobmV3IGRkKEUpKTtyZXR1cm4gbVUoQixMKSxwSW4oZSxCLEwpLEM9d2NlKGUsQixMKSxDfWZ1bmN0aW9uIGZfbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihhPVdlKFZyLGRpLDI4LGUuZS5hLmMubGVuZ3RoLDE1LDEpLGY9bmV3IEcoZS5lLmEpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxMjUpLGFbby5kXSs9by5iLmEuYy5sZW5ndGg7Zm9yKGc9UE8odCk7Zy5iIT0wOylmb3Iobz1sKGcuYj09MD9udWxsOihtcihnLmIhPTApLGFmKGcsZy5hLmEpKSwxMjUpLHI9Y3gobmV3IEcoby5nLmEpKTtyLk9iKCk7KW49bChyLlBiKCksMjE4KSx3PW4uZSx3LmU9Yi5NYXRoLm1heCh3LmUsby5lK24uYSksLS1hW3cuZF0sYVt3LmRdPT0wJiZDcyhnLHcsZy5jLmIsZy5jKX1mdW5jdGlvbiBybXQoZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTDtmb3Iobj1sbyxhPUlpLGc9bmV3IEcoZS5lLmEpO2cuYTxnLmMuYy5sZW5ndGg7KW89bChyZShnKSwxMjUpLGE9Yi5NYXRoLm1pbihhLG8uZSksbj1iLk1hdGgubWF4KG4sby5lKTtmb3IodD1XZShWcixkaSwyOCxuLWErMSwxNSwxKSxmPW5ldyBHKGUuZS5hKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTI1KSxvLmUtPWEsKyt0W28uZV07aWYocj0wLGUuayE9bnVsbClmb3IoRT1lLmssQz0wLEw9RS5sZW5ndGg7QzxMJiYodz1FW0NdLHRbcisrXSs9dyx0Lmxlbmd0aCE9cik7KytDKTtyZXR1cm4gdH1mdW5jdGlvbiBkX24oZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYodC5VZygiRWRnZSByb3V0aW5nIiwxKSxhPWwoUShlLChIYygpLCRkZSkpLDM5MiksYT09KHhBKCksSWRlKSlJdm4oZSk7ZWxzZSBpZihhPT1PQilmb3IobChmaChrRShGaShuZXcgYm4obnVsbCxuZXcga24oZS5iLDE2KSksbmV3IE90ZSkpKSw0MCksbz16ZShHZShRKGUsbUllKSkpLGY9emUoR2UoUShlLGZJZSkpKSxnPWwoUShlLHkzKSw4OCksdkluKGUsZyxvKSxZSW4oZSxnLG8sZiksWkluKGUsZyxvLGYpLHI9UnIoZS5hLDApO3IuYiE9ci5kLmM7KW49bChCcihyKSw2NSksbi5hLmI8MiYmYjllKG4pO3QuVmcoKX1mdW5jdGlvbiBpbXQoZSl7c3dpdGNoKGUuZCl7Y2FzZSA5OmNhc2UgODpyZXR1cm4hMDtjYXNlIDM6Y2FzZSA1OmNhc2UgNDpjYXNlIDY6cmV0dXJuITE7Y2FzZSA3OnJldHVybiBsKFg5ZShlKSwxNykuYT09ZS5vO2Nhc2UgMTpjYXNlIDI6e2lmKGUubz09LTIpcmV0dXJuITE7c3dpdGNoKGUucCl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6Y2FzZSA2OmNhc2UgNTpjYXNlIDc6cmV0dXJuIGN3KGUuayxlLmYpO2Nhc2UgMzpjYXNlIDQ6cmV0dXJuIGUuaj09ZS5lO2RlZmF1bHQ6cmV0dXJuIGUubj09bnVsbD9lLmc9PW51bGw6UGkoZS5uLGUuZyl9fWRlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIGdfbihlLHQpe3ZhciBuLHIsYTtzd2l0Y2godC5VZygiQnJlYWtpbmcgUG9pbnQgSW5zZXJ0aW9uIiwxKSxyPW5ldyBNOWUoZSksbChRKGUsKE50KCksaGRlKSksMzUxKS5nKXtjYXNlIDI6YT1uZXcgV2o7YnJlYWs7Y2FzZSAwOmE9bmV3IEVTO2JyZWFrO2RlZmF1bHQ6YT1uZXcgWWp9aWYobj1hLm9nKGUsciksUnQoQnQoUShlLGNEZSkpKSYmKG49ck1uKGUsbikpLCFhLnBnKCkmJm5zKGUsRVcpKXN3aXRjaChsKFEoZSxFVyksMzUyKS5nKXtjYXNlIDI6bj1GcHQocixuKTticmVhaztjYXNlIDE6bj1BZ3QocixuKX1pZihuLmRjKCkpe3QuVmcoKTtyZXR1cm59RUluKGUsbiksdC5WZygpfWZ1bmN0aW9uIHNtdChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMO2ZvcihvPW5ldyBCdSh0LmMubGVuZ3RoKSxFPW5ldyBHKHQpO0UuYTxFLmMuYy5sZW5ndGg7KWY9bChyZShFKSwxMCksdnQobyxlLmJbZi5jLnBdW2YucF0pO2ZvcihKTG4oZSxvLG4pLEw9bnVsbDtMPUhNbihvKTspSUFuKGUsbChMLmEsMjM5KSxsKEwuYiwyMzkpLG8pO2Zvcih0LmMubGVuZ3RoPTAsYT1uZXcgRyhvKTthLmE8YS5jLmMubGVuZ3RoOylmb3Iocj1sKHJlKGEpLDIzOSksZz1yLmQsdz0wLEM9Zy5sZW5ndGg7dzxDOysrdylmPWdbd10sJG4odC5jLGYpLGUuYVtmLmMucF1bZi5wXS5hPUwxKHIuZyxyLmRbMF0pLmF9ZnVuY3Rpb24gYW10KGUpe3N3KGUsbmV3IFhtKG53KFp2KHR3KGV3KG5ldyB4MSx5TCksIkVMSyBGaXhlZCIpLCJLZWVwcyB0aGUgY3VycmVudCBsYXlvdXQgYXMgaXQgaXMsIHdpdGhvdXQgYW55IGF1dG9tYXRpYyBtb2RpZmljYXRpb24uIE9wdGlvbmFsIGNvb3JkaW5hdGVzIGNhbiBiZSBnaXZlbiBmb3Igbm9kZXMgYW5kIGVkZ2UgYmVuZCBwb2ludHMuIiksbmV3IHYkKSkpLGd0KGUseUwsWHcsV05lKSxndChlLHlMLF9HLEl0KE1NKSksZ3QoZSx5TCx0U2UsSXQoVk5lKSksZ3QoZSx5TCx4NixJdChVTmUpKSxndChlLHlMLFB4LEl0KEtOZSkpLGd0KGUseUwsaFQsSXQoR05lKSl9ZnVuY3Rpb24gUlUoZSx0LG4pe3ZhciByLGEsbyxmLGc7aWYocj1ZcihtbyhmZyxpZyhZcihtbyh0PT1udWxsPzA6ZXModCksZGcpKSwxNSkpKSxnPVlyKG1vKGZnLGlnKFlyKG1vKG49PW51bGw/MDplcyhuKSxkZykpLDE1KSkpLG89Z0EoZSx0LHIpLG8mJmc9PW8uZiYmeWQobixvLmkpKXJldHVybiBuO2lmKGY9cEEoZSxuLGcpLGYpdGhyb3cgdWUobmV3IFluKCJ2YWx1ZSBhbHJlYWR5IHByZXNlbnQ6ICIrbikpO3JldHVybiBhPW5ldyB4SCh0LHIsbixnKSxvPyh1NihlLG8pLGVQKGUsYSxvKSxvLmU9bnVsbCxvLmM9bnVsbCxvLmkpOihlUChlLGEsbnVsbCksZmd0KGUpLG51bGwpfWZ1bmN0aW9uIHBfbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO0M9bi5hLmMsZj1uLmEuYytuLmEuYixvPWwoY3Iobi5jLHQpLDQ2OCksej1vLmYsVj1vLmEsby5iP3c9bmV3IGx0KGYseik6dz1uZXcgbHQoQyx6KSxvLmM/TD1uZXcgbHQoQyxWKTpMPW5ldyBsdChmLFYpLGE9QyxuLnB8fChhKz1lLmMpLGErPW4uRituLnYqZS5iLEU9bmV3IGx0KGEseiksQj1uZXcgbHQoYSxWKSxmQSh0LmEsaGUobGUoRWEsMSksZHQsOCwwLFt3LEVdKSksZz1uLmQuYS5nYygpPjEsZyYmKHI9bmV3IGx0KGEsbi5iKSx1aSh0LmEscikpLGZBKHQuYSxoZShsZShFYSwxKSxkdCw4LDAsW0IsTF0pKX1mdW5jdGlvbiBOZigpe05mPVUsQVc9bmV3IGx5KElkLDApLEFCPW5ldyBseSgiTklLT0xPViIsMSksTEI9bmV3IGx5KCJOSUtPTE9WX1BJWEVMIiwyKSx4RGU9bmV3IGx5KCJOSUtPTE9WX0lNUFJPVkVEIiwzKSxrRGU9bmV3IGx5KCJOSUtPTE9WX0lNUFJPVkVEX1BJWEVMIiw0KSx5RGU9bmV3IGx5KCJEVU1NWU5PREVfUEVSQ0VOVEFHRSIsNSksRURlPW5ldyBseSgiTk9ERUNPVU5UX1BFUkNFTlRBR0UiLDYpLExXPW5ldyBseSgiTk9fQk9VTkRBUlkiLDcpLHYzPW5ldyBseSgiTU9ERUxfT1JERVJfTEVGVF9UT19SSUdIVCIsOCkseDQ9bmV3IGx5KCJNT0RFTF9PUkRFUl9SSUdIVF9UT19MRUZUIiw5KX1mdW5jdGlvbiBiX24oZSl7dmFyIHQsbixyLGEsbztmb3Iocj1lLmxlbmd0aCx0PW5ldyBoXyxvPTA7bzxyOylpZihuPWNvKGUsbysrKSwhKG49PTl8fG49PTEwfHxuPT0xMnx8bj09MTN8fG49PTMyKSl7aWYobj09MzUpe2Zvcig7bzxyJiYobj1jbyhlLG8rKyksIShuPT0xM3x8bj09MTApKTspO2NvbnRpbnVlfW49PTkyJiZvPHI/KGE9KFhuKG8sZS5sZW5ndGgpLGUuY2hhckNvZGVBdChvKSkpPT0zNXx8YT09OXx8YT09MTB8fGE9PTEyfHxhPT0xM3x8YT09MzI/KFVrKHQsYSZacyksKytvKToodC5hKz0iXFwiLFVrKHQsYSZacyksKytvKTpVayh0LG4mWnMpfXJldHVybiB0LmF9ZnVuY3Rpb24gdWtlKCl7dWtlPVUsR1R0PW5ldyBwbihUQ2UsKEhuKCksITEpKSxYVHQ9bmV3IHBuKENDZSxwdCgwKSksUVR0PW5ldyBwbihTQ2UsMCksSlR0PW5ldyBwbihORywhMSksTEllPShMTigpLHpXKSxXVHQ9bmV3IHBuKFRmZSxMSWUpLHB0KDApLEtUdD1uZXcgcG4oQ2ZlLHB0KDEpKSxESWU9KEFWKCksbmdlKSxuQ3Q9bmV3IHBuKF9DZSxESWUpLElJZT0oZVYoKSxRZGUpLHJDdD1uZXcgcG4oQUNlLElJZSksTUllPSh1VSgpLHRnZSksWVR0PW5ldyBwbihMQ2UsTUllKSx0Q3Q9bmV3IHBuKFNmZSwwKSxaVHQ9bmV3IHBuKF9mZSwhMSksZUN0PW5ldyBwbihNQ2UsITEpfWZ1bmN0aW9uIG1fbihlLHQpe3ZhciBuLHIsYTtmb3Iocj1uZXcgRyh0KTtyLmE8ci5jLmMubGVuZ3RoOylpZihuPWwocmUociksMjcpLHhuKGUuYSxuLG4pLHhuKGUuYixuLG4pLGE9SHkobiksYS5jLmxlbmd0aCE9MClmb3IoZS5kJiZlLmQuR2coYSkseG4oZS5hLG4sKFNuKDAsYS5jLmxlbmd0aCksbChhLmNbMF0sMjcpKSkseG4oZS5iLG4sbChqdChhLGEuYy5sZW5ndGgtMSksMjcpKTtiY2UoYSkuYy5sZW5ndGghPTA7KWE9YmNlKGEpLGUuZCYmZS5kLkdnKGEpLHhuKGUuYSxuLChTbigwLGEuYy5sZW5ndGgpLGwoYS5jWzBdLDI3KSkpLHhuKGUuYixuLGwoanQoYSxhLmMubGVuZ3RoLTEpLDI3KSl9ZnVuY3Rpb24gc2xlKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYodClpZihuPD0tMSl7aWYocj1Nbih0LkRoKCksLTEtbiksRGUociwxMDIpKXJldHVybiBsKHIsMTkpO2ZvcihmPWwodC5NaChyKSwxNjApLGc9MCx3PWYuZ2MoKTtnPHc7KytnKWlmKHFlKGYuVWwoZykpPT09cWUoZSkmJihhPWYuVGwoZyksRGUoYSwxMDIpJiYobz1sKGEsMTkpLG8uQmImZXUpKSlyZXR1cm4gbzt0aHJvdyB1ZShuZXcgbmMoIlRoZSBjb250YWlubWVudCBmZWF0dXJlIGNvdWxkIG5vdCBiZSBsb2NhdGVkIikpfWVsc2UgcmV0dXJuIFJvKGwoTW4oZS5EaCgpLG4pLDE5KSk7ZWxzZSByZXR1cm4gbnVsbH1mdW5jdGlvbiB2X24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEM7Zm9yKG49MCxnPW5ldyBHKGUuZCk7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDEwNSksZi5pJiYoZi5pLmM9bisrKTtmb3IodD1MbShpaCxbZHQscGddLFsxODMsMjhdLDE2LFtuLG5dLDIpLEM9ZS5kLGE9MDthPEMuYy5sZW5ndGg7YSsrKWlmKHc9KFNuKGEsQy5jLmxlbmd0aCksbChDLmNbYV0sMTA1KSksdy5pKWZvcihvPWErMTtvPEMuYy5sZW5ndGg7bysrKUU9KFNuKG8sQy5jLmxlbmd0aCksbChDLmNbb10sMTA1KSksRS5pJiYocj1WeG4odyxFKSx0W3cuaS5jXVtFLmkuY109cix0W0UuaS5jXVt3LmkuY109cik7cmV0dXJuIHR9ZnVuY3Rpb24gbGtlKCl7bGtlPVUsQ0N0PW5ldyBwbihPQ2UsKEhuKCksITEpKSxwdCgtMSksd0N0PW5ldyBwbihOQ2UscHQoLTEpKSxwdCgtMSkseUN0PW5ldyBwbihQQ2UscHQoLTEpKSx4Q3Q9bmV3IHBuKEJDZSwhMSksWkllPShHSCgpLGRnZSksTEN0PW5ldyBwbihGQ2UsWkllKSxNQ3Q9bmV3IHBuKFJDZSwtMSksSkllPShxVigpLHVnZSksQUN0PW5ldyBwbihqQ2UsSkllKSxfQ3Q9bmV3IHBuKCRDZSwhMCksUUllPSh0VigpLGdnZSksVEN0PW5ldyBwbih6Q2UsUUllKSxFQ3Q9bmV3IHBuKHFDZSwhMSkscHQoMSksa0N0PW5ldyBwbihIQ2UscHQoMSkpLFNDdD1uZXcgVWkoVkNlKX1mdW5jdGlvbiBXQSgpe1dBPVUsRGRlPW5ldyBvdygiUk9PVF9QUk9DIiwwKSxHRGU9bmV3IG93KCJGQU5fUFJPQyIsMSksWERlPW5ldyBvdygiTEVWRUxfUFJPQyIsMiksUURlPW5ldyBvdygiTkVJR0hCT1JTX1BST0MiLDMpLFlEZT1uZXcgb3coIkxFVkVMX0hFSUdIVCIsNCksVURlPW5ldyBvdygiRElSRUNUSU9OX1BST0MiLDUpLEpEZT1uZXcgb3coIk5PREVfUE9TSVRJT05fUFJPQyIsNiksSERlPW5ldyBvdygiQ09NUEFDVElPTl9QUk9DIiw3KSxXRGU9bmV3IG93KCJMRVZFTF9DT09SRFMiLDgpLEtEZT1uZXcgb3coIkdSQVBIX0JPVU5EU19QUk9DIiw5KSxWRGU9bmV3IG93KCJERVRSRUVJRllJTkdfUFJPQyIsMTApfWZ1bmN0aW9uIGhrZShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMO2ZvcihMPWRjKHQpLEU9bnVsbCxhPSExLGc9MCxDPWR1KEwuYSkuaTtnPEM7KytnKWY9bChtUChMLGcsKG89bChPZShkdShMLmEpLGcpLDg5KSx3PW8uYyxEZSh3LDkwKT9sKHcsMjkpOihUbigpLEtmKSkpLDI5KSxuPWhrZShlLGYpLG4uZGMoKXx8KEU/KGF8fChhPSEwLEU9bmV3IHVIKEUpKSxFLkdjKG4pKTpFPW4pO3JldHVybiByPUFrbihlLHQpLHIuZGMoKT9FfHwoQ24oKSxDbigpLF9vKTpFPyhhfHwoRT1uZXcgdUgoRSkpLEUuR2MociksRSk6cn1mdW5jdGlvbiBhbGUoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtmb3IoTD1kYyh0KSxFPW51bGwscj0hMSxnPTAsQz1kdShMLmEpLmk7ZzxDOysrZylvPWwobVAoTCxnLChhPWwoT2UoZHUoTC5hKSxnKSw4OSksdz1hLmMsRGUodyw5MCk/bCh3LDI5KTooVG4oKSxLZikpKSwyOSksbj1hbGUoZSxvKSxuLmRjKCl8fChFPyhyfHwocj0hMCxFPW5ldyB1SChFKSksRS5HYyhuKSk6RT1uKTtyZXR1cm4gZj1oRW4oZSx0KSxmLmRjKCk/RXx8KENuKCksQ24oKSxfbyk6RT8ocnx8KEU9bmV3IHVIKEUpKSxFLkdjKGYpLEUpOmZ9ZnVuY3Rpb24gd19uKGUpe3ZhciB0LG4scixhO3I9ZS5vLHB5KCksZS5BLmRjKCl8fFBpKGUuQSxxX2UpP2E9ci5hOihhPW5QKGUuZiksZS5BLkhjKChtaCgpLHJGKSkmJiFlLkIuSGMoKFpsKCksRk0pKSYmKGE9Yi5NYXRoLm1heChhLG5QKGwoUW8oZS5wLChDdCgpLFFuKSksMjUyKSkpLGE9Yi5NYXRoLm1heChhLG5QKGwoUW8oZS5wLERyKSwyNTIpKSkpLHQ9UmZ0KGUpLHQmJihhPWIuTWF0aC5tYXgoYSx0LmEpKSksUnQoQnQoZS5lLlRmKCkub2YoKHBpKCksQzQpKSkpP3IuYT1iLk1hdGgubWF4KHIuYSxhKTpyLmE9YSxuPWUuZi5pLG4uYz0wLG4uYj1hLGhsZShlLmYpfWZ1bmN0aW9uIGhQKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYoRGUodCw3NikpcmV0dXJuIFRvKGUsdCxuKTtmb3IoZz1udWxsLG89bnVsbCxyPWwoZS5nLDEyNCksZj0wO2Y8ZS5pOysrZilpZihhPXJbZl0sUGkodCxhLm1kKCkpJiYobz1hLkxrKCksRGUobywxMDIpJiZsKG8sMTkpLkJiJmV1KSl7Zz1hO2JyZWFrfXJldHVybiBnJiYoaGgoZS5lKSYmKHc9by5KaygpP2RiKGUsNCxvLHQsbnVsbCxYRShlLG8sdCxEZShvLDEwMikmJihsKG8sMTkpLkJiJklvKSE9MCksITApOmRiKGUsby50aygpPzI6MSxvLHQsby5paygpLC0xLCEwKSxuP24ubmoodyk6bj13KSxuPWhQKGUsZyxuKSksbn1mdW5jdGlvbiB5X24oZSx0LG4pe3ZhciByLGEsbyxmO2lmKGY9V3UoZS5lLkRoKCksdCkscj1sKGUuZywxMjQpLEZvKCksbCh0LDY5KS54aygpKXtmb3Iobz0wO288ZS5pOysrbylpZihhPXJbb10sZi5hbShhLkxrKCkpJiZQaShhLG4pKXJldHVybiBWeShlLG8pLCEwfWVsc2UgaWYobiE9bnVsbCl7Zm9yKG89MDtvPGUuaTsrK28paWYoYT1yW29dLGYuYW0oYS5MaygpKSYmUGkobixhLm1kKCkpKXJldHVybiBWeShlLG8pLCEwfWVsc2UgZm9yKG89MDtvPGUuaTsrK28paWYoYT1yW29dLGYuYW0oYS5MaygpKSYmYS5tZCgpPT1udWxsKXJldHVybiBWeShlLG8pLCEwO3JldHVybiExfWZ1bmN0aW9uIHhfbihlLHQpe3ZhciBuLHIsYSxvLGY7aWYodC5VZygiTm9kZSBhbmQgUG9ydCBMYWJlbCBQbGFjZW1lbnQgYW5kIE5vZGUgU2l6aW5nIiwxKSxkbnQoKGdfKCksbmV3IEphZShlLCEwLCEwLG5ldyBrWikpKSxsKFEoZSwoZnQoKSxMdSkpLDIxKS5IYygoSG8oKSx2ZikpKWZvcihvPWwoUShlLChOdCgpLHY0KSksMjEpLGE9by5IYygoUmwoKSxuRikpLGY9UnQoQnQoUShlLEpNZSkpKSxyPW5ldyBHKGUuYik7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDMwKSxJcyhGaShuZXcgYm4obnVsbCxuZXcga24obi5hLDE2KSksbmV3IEVaKSxuZXcgdml0KG8sYSxmKSk7dC5WZygpfWZ1bmN0aW9uIGtfbihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKGUuYz09bnVsbHx8ZS5jLmxlbmd0aDx0LmMubGVuZ3RoP2UuYz1XZShpaCxwZywyOCx0LmMubGVuZ3RoLDE2LDEpOnVfKGUuYyksZS5hPW5ldyBidCxyPTAsZj1uZXcgRyh0KTtmLmE8Zi5jLmMubGVuZ3RoOylhPWwocmUoZiksMTApLGEucD1yKys7Zm9yKG49bmV3IG9zLG89bmV3IEcodCk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDEwKSxlLmNbYS5wXXx8KHpwdChlLGEpLG4uYj09MHx8KG1yKG4uYiE9MCksbChuLmEuYS5jLDE1KSkuZ2MoKTxlLmEuYy5sZW5ndGg/TzUobixlLmEpOmtvKG4sZS5hKSxlLmE9bmV3IGJ0KTtyZXR1cm4gbn1mdW5jdGlvbiBvbXQoZSl7c3coZSxuZXcgWG0obncoWnYodHcoZXcobmV3IHgxLG1UKSwiRUxLIFNQT3JFIE92ZXJsYXAgUmVtb3ZhbCIpLCdBIG5vZGUgb3ZlcmxhcCByZW1vdmFsIGFsZ29yaXRobSBwcm9wb3NlZCBieSBOYWNobWFuc29uIGV0IGFsLiBpbiAiTm9kZSBvdmVybGFwIHJlbW92YWwgYnkgZ3Jvd2luZyBhIHRyZWUiLicpLG5ldyB1aCkpKSxndChlLG1ULE1mZSxJdChqT2UpKSxndChlLG1ULFh3LFJPZSksZ3QoZSxtVCxKeSw4KSxndChlLG1ULE9mZSxJdChsU3QpKSxndChlLG1ULFhDZSxJdChCT2UpKSxndChlLG1ULFFDZSxJdChGT2UpKSxndChlLG1ULFZQLChIbigpLCExKSl9ZnVuY3Rpb24gRV9uKGUsdCl7dmFyIG4scixhLG8sZixnLHc7aWYobj10LnFpKGUuYSksbiYmKHc9ZWkobjEoKCFuLmImJihuLmI9bmV3IGRoKChUbigpLE5vKSxZYyxuKSksbi5iKSxPU2UpKSx3IT1udWxsKSl7Zm9yKHI9bmV3IGJ0LG89R3kodywiXFx3IiksZj0wLGc9by5sZW5ndGg7ZjxnOysrZilhPW9bZl0sdm4oYSwiIyNvdGhlciIpP3Z0KHIsIiEjIyIrS18oZSxBaCh0LnFrKCkpKSk6dm4oYSwiIyNsb2NhbCIpP3IuYy5wdXNoKG51bGwpOnZuKGEsSlApP3Z0KHIsS18oZSxBaCh0LnFrKCkpKSk6JG4oci5jLGEpO3JldHVybiByfXJldHVybiBDbigpLENuKCksX299ZnVuY3Rpb24gY210KGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQix6O2ZvcihmPWR3KHQuYyxuLHIpLEw9bmV3IEcodC5hKTtMLmE8TC5jLmMubGVuZ3RoOyl7Zm9yKEM9bChyZShMKSwxMCksT2koQy5uLGYpLHo9bmV3IEcoQy5qKTt6LmE8ei5jLmMubGVuZ3RoOylmb3IoQj1sKHJlKHopLDEyKSxvPW5ldyBHKEIuZyk7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSwxOCksRHkoYS5hLGYpLGc9bChRKGEsKE50KCksY2MpKSw3NSksZyYmRHkoZyxmKSxFPW5ldyBHKGEuYik7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDcyKSxPaSh3Lm4sZik7dnQoZS5hLEMpLEMuYT1lfX1mdW5jdGlvbiBmUChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O2lmKGUuZCl0aHJvdyB1ZShuZXcgbmMoKEdnKGExZSkscGhlK2ExZS5rK2JoZSkpKTtmb3IoZS5jPT0oSnMoKSxKMSkmJnA2KGUsdWMpLG49bmV3IEcoZS5hLmEpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxOTQpLHQuZT0wO2ZvcihmPW5ldyBHKGUuYS5iKTtmLmE8Zi5jLmMubGVuZ3RoOylmb3Iobz1sKHJlKGYpLDg2KSxvLm89aWEsYT1vLmYuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksODYpLCsrci5kLmU7Zm9yKGtEbihlKSx3PW5ldyBHKGUuYS5iKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksODYpLGcuaz0hMDtyZXR1cm4gZX1mdW5jdGlvbiBUX24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2ZvcihnPW5ldyBicHQoZSksbj1uZXcgb3MsQ3Mobix0LG4uYy5iLG4uYyk7bi5iIT0wOyl7Zm9yKHI9bChuLmI9PTA/bnVsbDoobXIobi5iIT0wKSxhZihuLG4uYS5hKSksMTEzKSxyLmQucD0xLGY9bmV3IEcoci5lKTtmLmE8Zi5jLmMubGVuZ3RoOylhPWwocmUoZiksMzQwKSxCZ3QoZyxhKSxFPWEuZCxFLmQucD09MCYmQ3MobixFLG4uYy5iLG4uYyk7Zm9yKG89bmV3IEcoci5iKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMzQwKSxCZ3QoZyxhKSx3PWEuYyx3LmQucD09MCYmQ3Mobix3LG4uYy5iLG4uYyl9cmV0dXJuIGd9ZnVuY3Rpb24gdW10KGUpe3ZhciB0LG4scixhLG87aWYocj16ZShHZShhdChlLChwaSgpLEZTdCkpKSksciE9MSlmb3IoRjUoZSxyKmUuZyxyKmUuZiksbj1TbG4oc2RuKCghZS5jJiYoZS5jPW5ldyBudChIbCxlLDksOSkpLGUuYyksbmV3IFZuZSkpLG89cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbKCFlLm4mJihlLm49bmV3IG50KGVjLGUsMSw3KSksZS5uKSwoIWUuYyYmKGUuYz1uZXcgbnQoSGwsZSw5LDkpKSxlLmMpLG5dKSkpO2pyKG8pOylhPWwoeHIobyksNDIyKSxhLnFoKHIqYS5uaCgpLHIqYS5vaCgpKSxhLnBoKHIqYS5taCgpLHIqYS5saCgpKSx0PWwoYS5vZihrTmUpLDgpLHQmJih0LmEqPXIsdC5iKj1yKX1mdW5jdGlvbiBma2UoZSx0LG4pe3ZhciByLGEsbyxmLGc7aWYoZj0oRm8oKSxsKHQsNjkpLnhrKCkpLHVwKGUuZSx0KSl7aWYodC5TaSgpJiYkVShlLHQsbixEZSh0LDEwMikmJihsKHQsMTkpLkJiJklvKSE9MCkpcmV0dXJuITF9ZWxzZSBmb3IoZz1XdShlLmUuRGgoKSx0KSxyPWwoZS5nLDEyNCksbz0wO288ZS5pOysrbylpZihhPXJbb10sZy5hbShhLkxrKCkpKXJldHVybihmP1BpKGEsbik6bj09bnVsbD9hLm1kKCk9PW51bGw6UGkobixhLm1kKCkpKT8hMToobChuNihlLG8sZj9sKG4sNzYpOnNnKHQsbikpLDc2KSwhMCk7cmV0dXJuIHFyKGUsZj9sKG4sNzYpOnNnKHQsbikpfWZ1bmN0aW9uIENfbihlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMLEI7Zm9yKGY9bmV3IEcoZS5iKTtmLmE8Zi5jLmMubGVuZ3RoOylmb3Iobz1sKHJlKGYpLDMwKSxCPUpPKG8uYSksRT1CLEM9MCxMPUUubGVuZ3RoO0M8TDsrK0Mpc3dpdGNoKHc9RVtDXSxsKFEodywoTnQoKSxRdSkpLDE3MSkuZyl7Y2FzZSAxOkdDbih3KSxWYSh3LHQpLEVkdCh3LCEwLHIpO2JyZWFrO2Nhc2UgMzpBQ24odyksVmEodyxuKSxFZHQodywhMSxhKX1mb3IoZz1uZXcgVWEoZS5iLDApO2cuYjxnLmQuZ2MoKTspKG1yKGcuYjxnLmQuZ2MoKSksbChnLmQuWGIoZy5jPWcuYisrKSwzMCkpLmEuYy5sZW5ndGg9PTAmJnBoKGcpfWZ1bmN0aW9uIFNfbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGU7Zm9yKHo9dC5sZW5ndGgsdz16LFhuKDAsdC5sZW5ndGgpLHQuY2hhckNvZGVBdCgwKT09NDU/KEw9LTEsQj0xLC0teik6KEw9MSxCPTApLG89KGJsZSgpLGs2dClbMTBdLGE9ei9vfDAsdGU9eiVvLHRlIT0wJiYrK2EsZz1XZShWcixkaSwyOCxhLDE1LDEpLG49eDZ0WzhdLGY9MCxWPUIrKHRlPT0wP286dGUpLEo9QjtKPHc7Sj1WLFY9SitvKXI9T2goKEdhKEosVix0Lmxlbmd0aCksdC5zdWJzdHIoSixWLUopKSxsbyxJaSksRT0oR0UoKSxZOGUoZyxnLGYsbikpLEUrPV81bihnLGYsciksZ1tmKytdPUU7Qz1mLGUuZT1MLGUuZD1DLGUuYT1nLGlBKGUpfWZ1bmN0aW9uIF9fbihlLHQpe3ZhciBuLHIsYSxvO3JldHVybiBuPW5ldyB2dSxyPWwoeWMoZmMobmV3IGJuKG51bGwsbmV3IGtuKGUuZiwxNikpLG4pLFN5KG5ldyB5dCxuZXcgamksbmV3IHFuLG5ldyBVbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksaTQpLEVjXSkpKSwyMSksYT1yLmdjKCkscj1sKHljKGZjKG5ldyBibihudWxsLG5ldyBrbih0LmYsMTYpKSxuKSxTeShuZXcgeXQsbmV3IGppLG5ldyBxbixuZXcgVW4saGUobGUob2MsMSksaXQsMTA4LDAsW2k0LEVjXSkpKSwyMSksbz1yLmdjKCksYT1hPT0xPzE6MCxvPW89PTE/MTowLGE8bz8tMTphPT1vPzA6MX1mdW5jdGlvbiBBX24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihnPWUuaSxhPVJ0KEJ0KFEoZywoTnQoKSxiNCkpKSksQz0wLHI9MCxFPW5ldyBHKGUuZyk7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDE4KSxmPURvKHcpLG89ZiYmYSYmUnQoQnQoUSh3LGd2KSkpLEI9dy5kLmksZiYmbz8rK3I6ZiYmIW8/KytDOmVvKEIpLmU9PWc/KytyOisrQztmb3Iobj1uZXcgRyhlLmUpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxOCksZj1Ebyh0KSxvPWYmJmEmJlJ0KEJ0KFEodCxndikpKSxMPXQuYy5pLGYmJm8/KytDOmYmJiFvPysrcjplbyhMKS5lPT1nPysrQzorK3I7cmV0dXJuIEMtcn1mdW5jdGlvbiBmNihlLHQsbixyKXt0aGlzLmU9ZSx0aGlzLms9bChRKGUsKGZ0KCksJDYpKSwzMTIpLHRoaXMuZz1XZSh3ZyxtMiwxMCx0LDAsMSksdGhpcy5iPVdlKHRhLGR0LDM0NSx0LDcsMSksdGhpcy5hPVdlKHdnLG0yLDEwLHQsMCwxKSx0aGlzLmQ9V2UodGEsZHQsMzQ1LHQsNywxKSx0aGlzLmo9V2Uod2csbTIsMTAsdCwwLDEpLHRoaXMuaT1XZSh0YSxkdCwzNDUsdCw3LDEpLHRoaXMucD1XZSh0YSxkdCwzNDUsdCw3LDEpLHRoaXMubj1XZShOcyxkdCw0ODUsdCw4LDEpLGFPKHRoaXMubiwoSG4oKSwhMSkpLHRoaXMuZj1XZShOcyxkdCw0ODUsdCw4LDEpLGFPKHRoaXMuZiwhMCksdGhpcy5vPW4sdGhpcy5jPXJ9ZnVuY3Rpb24gbG10KGUsdCl7dmFyIG4scixhLG8sZixnO2lmKCF0LmRjKCkpaWYobCh0LlhiKDApLDI5MykuZD09KHl4KCksaDQpKVE3bihlLHQpO2Vsc2UgZm9yKHI9dC5LYygpO3IuT2IoKTspe3N3aXRjaChuPWwoci5QYigpLDI5Myksbi5kLmcpe2Nhc2UgNTpxRShlLG4sbjVuKGUsbikpO2JyZWFrO2Nhc2UgMDpxRShlLG4sKGY9bi5mLW4uYysxLGc9KGYtMSkvMnwwLG4uYytnKSk7YnJlYWs7Y2FzZSA0OnFFKGUsbix1d24oZSxuKSk7YnJlYWs7Y2FzZSAyOkExdChuKSxxRShlLG4sKG89THhlKG4pLG8/bi5jOm4uZikpO2JyZWFrO2Nhc2UgMTpBMXQobikscUUoZSxuLChhPUx4ZShuKSxhP24uZjpuLmMpKX1LeG4obi5hKX19ZnVuY3Rpb24gZGtlKGUsdCxuLHIpe3ZhciBhLG8sZjtyZXR1cm4gZj1uZXcgSFplKHQsbiksZS5hP3I/KGE9bChMZihsKGNyKGUuYix0KSwyNjApKSwyNjApLCsrYS5hLGYuZD1yLmQsZi5lPXIuZSxmLmI9cixmLmM9cixyLmU/ci5lLmM9ZjphLmI9ZixyLmQ/ci5kLmI9ZjplLmE9ZixyLmQ9ZixyLmU9Zik6KGwoTGYoZS5lKSw1MTEpLmI9ZixmLmQ9ZS5lLGUuZT1mLGE9bChjcihlLmIsdCksMjYwKSxhPygrK2EuYSxvPWEuYyxvLmM9ZixmLmU9byxhLmM9Zik6KGtpKGUuYix0LGE9bmV3IEI1ZShmKSksKytlLmMpKTooZS5hPWUuZT1mLGtpKGUuYix0LG5ldyBCNWUoZikpLCsrZS5jKSwrK2UuZCxmfWZ1bmN0aW9uIG9sZShlLHQpe3ZhciBuLHIsYSxvLGY7aWYodC5VZygiTmV0d29yayBzaW1wbGV4IiwxKSxlLmUuYS5jLmxlbmd0aDwxKXt0LlZnKCk7cmV0dXJufWZvcihvPW5ldyBHKGUuZS5hKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTI1KSxhLmU9MDtmb3IoZj1lLmUuYS5jLmxlbmd0aD49NDAsZiYmbUFuKGUpLFNMbihlKSxXQ24oZSksbj1tMXQoZSkscj0wO24mJnI8ZS5mOylPX24oZSxuLFFFbihlLG4pKSxuPW0xdChlKSwrK3I7ZiYmZHhuKGUpLGUuYT9jVG4oZSxybXQoZSkpOnJtdChlKSxlLmI9bnVsbCxlLmQ9bnVsbCxlLnA9bnVsbCxlLmM9bnVsbCxlLmc9bnVsbCxlLmk9bnVsbCxlLm49bnVsbCxlLm89bnVsbCx0LlZnKCl9ZnVuY3Rpb24gTF9uKGUsdCl7dmFyIG4scixhLG8sZixnLHc7aWYoIXQuZSl7Zm9yKHQuZT0hMCxyPXQuZC5hLmVjKCkuS2MoKTtyLk9iKCk7KXtpZihuPWwoci5QYigpLDE4KSx0Lm8mJnQuZC5hLmdjKCk8PTEpe2Y9dC5hLmMsZz10LmEuYyt0LmEuYix3PW5ldyBsdChmKyhnLWYpLzIsdC5iKSx1aShsKHQuZC5hLmVjKCkuS2MoKS5QYigpLDE4KS5hLHcpO2NvbnRpbnVlfWlmKGE9bChjcih0LmMsbiksNDY4KSxhLmJ8fGEuYyl7cF9uKGUsbix0KTtjb250aW51ZX1vPWUuZD09KFNFKCksYU0pJiYoYS5kfHxhLmUpJiZ4RW4oZSx0KSYmdC5kLmEuZ2MoKTw9MSxvP25EbihuLHQpOlRTbihlLG4sdCl9dC5rJiZ0byh0LmQsbmV3IGg1KX19ZnVuY3Rpb24gZ2tlKGUsdCxuLHIsYSxvKXt2YXIgZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZTtmb3IoQj1vLGc9KHIrYSkvMitCLHRlPW4qYi5NYXRoLmNvcyhnKSxmZT1uKmIuTWF0aC5zaW4oZyksVGU9dGUtdC5nLzIsTWU9ZmUtdC5mLzIsVXUodCxUZSksR3UodCxNZSksTD1lLmEuRWcodCksSj0yKmIuTWF0aC5hY29zKG4vbitlLmMpLEo8YS1yPyh6PUovTCxmPShyK2EtSikvMik6KHo9KGEtcikvTCxmPXIpLFY9SHkodCksZS5lJiYoZS5lLkZnKGUuZCksZS5lLkdnKFYpKSxFPW5ldyBHKFYpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwyNyksQz1lLmEuRWcodyksZ2tlKGUsdyxuK2UuYyxmLGYreipDLG8pLGYrPXoqQ31mdW5jdGlvbiBNX24oZSx0LG4pe3ZhciByO3N3aXRjaChyPW4ucS5nZXRNb250aCgpLHQpe2Nhc2UgNTpoaShlLGhlKGxlKHp0LDEpLGR0LDIsNixbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdKVtyXSk7YnJlYWs7Y2FzZSA0OmhpKGUsaGUobGUoenQsMSksZHQsMiw2LFskbGUsemxlLHFsZSxIbGUsX3gsVmxlLFVsZSxHbGUsS2xlLFdsZSxZbGUsWGxlXSlbcl0pO2JyZWFrO2Nhc2UgMzpoaShlLGhlKGxlKHp0LDEpLGR0LDIsNixbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsX3gsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdKVtyXSk7YnJlYWs7ZGVmYXVsdDphZyhlLHIrMSx0KX19ZnVuY3Rpb24gRF9uKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQjtmb3Iodz1uZXcgbHQobixyKSxtYSh3LGwoUSh0LChiYigpLCRMKSksOCkpLEI9bmV3IEcodC5lKTtCLmE8Qi5jLmMubGVuZ3RoOylMPWwocmUoQiksMTUzKSxPaShMLmQsdyksdnQoZS5lLEwpO2ZvcihnPW5ldyBHKHQuYyk7Zy5hPGcuYy5jLmxlbmd0aDspe2ZvcihmPWwocmUoZyksMjkwKSxvPW5ldyBHKGYuYSk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDI1MCksT2koYS5kLHcpO3Z0KGUuYyxmKX1mb3IoQz1uZXcgRyh0LmQpO0MuYTxDLmMuYy5sZW5ndGg7KUU9bChyZShDKSw0NTQpLE9pKEUuZCx3KSx2dChlLmQsRSl9ZnVuY3Rpb24gcGtlKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRTtmb3Iodz1uZXcgRyh0LmopO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihnPWwocmUodyksMTIpLGE9bmV3IE4xKGcuYik7TGMoYS5hKXx8TGMoYS5iKTspcj1sKExjKGEuYSk/cmUoYS5hKTpyZShhLmIpLDE4KSxuPXIuYz09Zz9yLmQ6ci5jLG89bi5pLHQhPW8mJihFPWwoUShyLChOdCgpLFVUKSksMTcpLmEsRTwwJiYoRT0wKSxmPW8ucCxlLmJbZl09PTAmJihyLmQ9PW4/KGUuYVtmXS09RSsxLGUuYVtmXTw9MCYmZS5jW2ZdPjAmJnVpKGUuZixvKSk6KGUuY1tmXS09RSsxLGUuY1tmXTw9MCYmZS5hW2ZdPjAmJnVpKGUuZSxvKSkpKX1mdW5jdGlvbiBobXQoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEM7Zm9yKHc9bmV3IGx0KG4sciksbWEodyxsKFEodCwoUWkoKSxRVCkpLDgpKSxDPVJyKHQuYiwwKTtDLmIhPUMuZC5jOylFPWwoQnIoQyksNDApLE9pKEUuZSx3KSx1aShlLmIsRSk7Zm9yKGc9bCh5YyhWNWUobmV3IGJuKG51bGwsbmV3IGtuKHQuYSwxNikpKSxQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksRWMpXSkpKSwxNSkuS2MoKTtnLk9iKCk7KXtmb3IoZj1sKGcuUGIoKSw2NSksbz1ScihmLmEsMCk7by5iIT1vLmQuYzspYT1sKEJyKG8pLDgpLGEuYSs9dy5hLGEuYis9dy5iO3VpKGUuYSxmKX19ZnVuY3Rpb24gYmtlKGUsdCl7dmFyIG4scixhLG87aWYoMDwoRGUoZSwxNik/bChlLDE2KS5nYygpOlhnKGUuS2MoKSkpKXtpZihhPXQsMTxhKXtmb3IoLS1hLG89bmV3IER0ZSxyPWUuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksNDApLG89TGgoaGUobGUoRmgsMSksUm4sMjAsMCxbbyxuZXcgSGcobildKSk7cmV0dXJuIGJrZShvLGEpfWlmKGE8MCl7Zm9yKG89bmV3IEl0ZSxyPWUuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksNDApLG89TGgoaGUobGUoRmgsMSksUm4sMjAsMCxbbyxuZXcgSGcobildKSk7aWYoMDwoRGUobywxNik/bChvLDE2KS5nYygpOlhnKG8uS2MoKSkpKXJldHVybiBia2UobyxhKX19cmV0dXJuIGwoUHEoZS5LYygpKSw0MCl9ZnVuY3Rpb24gSV9uKGUsdCxuKXt2YXIgcixhLG8sZjtmb3Iobi5VZygiUHJvY2Vzc29yIG9yZGVyIG5vZGVzIiwyKSxlLmI9emUoR2UoUSh0LChIYygpLHpkZSkpKSksZS5hPWwoUSh0LHkzKSw4OCksZS5hPT0oSnMoKSxKMSkmJihlLmE9UTEscnQodCx5MyxlLmEpKSxhPW5ldyBvcyxmPVJyKHQuYiwwKTtmLmIhPWYuZC5jOylvPWwoQnIoZiksNDApLFJ0KEJ0KFEobywoUWkoKSxWYikpKSkmJkNzKGEsbyxhLmMuYixhLmMpO3I9KG1yKGEuYiE9MCksbChhLmEuYS5jLDQwKSksb3Z0KGUsciksbi5maCgxKSxha2UoZSxyLDAtemUoR2UoUShyLChRaSgpLEZXKSkpKS8yLDApLG4uZmgoMSksbi5WZygpfWZ1bmN0aW9uIFpsKCl7Wmw9VSxhQz1uZXcgSTUoIkRFRkFVTFRfTUlOSU1VTV9TSVpFIiwwKSxhRj1uZXcgSTUoIk1JTklNVU1fU0laRV9BQ0NPVU5UU19GT1JfUEFERElORyIsMSksdVk9bmV3IEk1KCJDT01QVVRFX1BBRERJTkciLDIpLEZNPW5ldyBJNSgiT1VUU0lERV9OT0RFX0xBQkVMU19PVkVSSEFORyIsMyksbFk9bmV3IEk1KCJQT1JUU19PVkVSSEFORyIsNCksZlk9bmV3IEk1KCJVTklGT1JNX1BPUlRfU1BBQ0lORyIsNSksaFk9bmV3IEk1KCJTUEFDRV9FRkZJQ0lFTlRfUE9SVF9MQUJFTFMiLDYpLEdnZT1uZXcgSTUoIkZPUkNFX1RBQlVMQVJfTk9ERV9MQUJFTFMiLDcpLHNGPW5ldyBJNSgiQVNZTU1FVFJJQ0FMIiw4KX1mdW5jdGlvbiBjbGUoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2lmKHQpe2lmKG49KG89dC5EaCgpLG8/QWgobykud2koKS5zaShvKTpudWxsKSxuKXtmb3IoaDIoZSx0LG4pLGE9dC5EaCgpLHc9MCxFPShhLmk9PW51bGwmJlNkKGEpLGEuaSkubGVuZ3RoO3c8RTsrK3cpZz0ocj0oYS5pPT1udWxsJiZTZChhKSxhLmkpLHc+PTAmJnc8ci5sZW5ndGg/clt3XTpudWxsKSxnLnJrKCkmJiFnLnNrKCkmJihEZShnLDMzMSk/TTZuKGUsbChnLDM1KSx0LG4pOihmPWwoZywxOSksZi5CYiZldSYmejhuKGUsZix0LG4pKSk7dC5WaCgpJiZsKG4sNTQpLmVpKGwodCw1NCkuX2goKSl9cmV0dXJuIG59ZWxzZSByZXR1cm4gbnVsbH1mdW5jdGlvbiBPX24oZSx0LG4pe3ZhciByLGEsbztpZighdC5mKXRocm93IHVlKG5ldyBZbigiR2l2ZW4gbGVhdmUgZWRnZSBpcyBubyB0cmVlIGVkZ2UuIikpO2lmKG4uZil0aHJvdyB1ZShuZXcgWW4oIkdpdmVuIGVudGVyIGVkZ2UgaXMgYSB0cmVlIGVkZ2UgYWxyZWFkeS4iKSk7Zm9yKHQuZj0hMSx3eWUoZS5wLHQpLG4uZj0hMCxuYShlLnAsbikscj1uLmUuZS1uLmQuZS1uLmEsenVlKGUsbi5lLHQpfHwocj0tciksbz1uZXcgRyhlLmUuYSk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDEyNSksenVlKGUsYSx0KXx8KGEuZSs9cik7ZS5qPTEsdV8oZS5jKSxwOWUoZSxsKHJlKG5ldyBHKGUuZS5hKSksMTI1KSksbXZ0KGUpfWZ1bmN0aW9uIGZtdChlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIsejtpZihUd24oZSx0LG4pLG89dFtuXSx6PXI/KEN0KCksZXIpOihDdCgpLGFyKSxfaG4odC5sZW5ndGgsbixyKSl7Zm9yKGE9dFtyP24tMTpuKzFdLFM2ZShlLGEscj8ocW8oKSx6dSk6KHFvKCksJGwpKSx3PW8sQz0wLEI9dy5sZW5ndGg7QzxCOysrQylmPXdbQ10sWjhlKGUsZix6KTtmb3IoUzZlKGUsbyxyPyhxbygpLCRsKToocW8oKSx6dSkpLGc9YSxFPTAsTD1nLmxlbmd0aDtFPEw7KytFKWY9Z1tFXSxmLmV8fFo4ZShlLGYsQk4oeikpfWVsc2UgZm9yKGc9byxFPTAsTD1nLmxlbmd0aDtFPEw7KytFKWY9Z1tFXSxaOGUoZSxmLHopO3JldHVybiExfWZ1bmN0aW9uIE5fbihlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMO2ZvcihDbigpLFZzKGUsbmV3IHkkKSxnPW5ldyBVYShlLDApLEw9bmV3IGJ0LG89MDtnLmI8Zy5kLmdjKCk7KWY9KG1yKGcuYjxnLmQuZ2MoKSksbChnLmQuWGIoZy5jPWcuYisrKSwxNjMpKSxMLmMubGVuZ3RoIT0wJiZ3bChmKSpnaChmKT5vKjI/KEM9bmV3IGhWKEwpLEU9d2woZikvZ2goZiksdz1MbGUoQyx0LG5ldyBBOCxuLHIsYSxFKSxPaShZMChDLmUpLHcpLEwuYy5sZW5ndGg9MCxvPTAsJG4oTC5jLEMpLCRuKEwuYyxmKSxvPXdsKEMpKmdoKEMpK3dsKGYpKmdoKGYpKTooJG4oTC5jLGYpLG8rPXdsKGYpKmdoKGYpKTtyZXR1cm4gTH1mdW5jdGlvbiBkbXQoZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYoZz1sKFEodCwoTnQoKSxNcykpLDEwMSksZz09KFJhKCksVGcpfHxnPT1NdSlmb3IoYT1uZXcgbHQodC5mLmErdC5kLmIrdC5kLmMsdC5mLmIrdC5kLmQrdC5kLmEpLmIsZj1uZXcgRyhlLmEpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxMCksby5rPT0oWm4oKSxVcykmJihuPWwoUShvLChmdCgpLFdjKSksNjQpLCEobiE9KEN0KCksYXIpJiZuIT1lcikmJihyPXplKEdlKFEobyxsMykpKSxnPT1UZyYmKHIqPWEpLG8ubi5iPXItbChRKG8scDMpLDgpLmIsRFYobywhMSwhMCkpKX1mdW5jdGlvbiBQX24oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtpZihoaChlLmUpKXtpZih0IT1uJiYoYT1sKGUuZywxMjQpLHo9YVtuXSxmPXouTGsoKSx1cChlLmUsZikpKXtmb3IoVj1XdShlLmUuRGgoKSxmKSx3PS0xLGc9LTEscj0wLEU9MCxMPXQ+bj90Om47RTw9TDsrK0UpRT09bj9nPXIrKzoobz1hW0VdLEM9Vi5hbShvLkxrKCkpLEU9PXQmJih3PUU9PUwmJiFDP3ItMTpyKSxDJiYrK3IpO3JldHVybiBCPWwoQUEoZSx0LG4pLDc2KSxnIT13JiZ4ayhlLG5ldyBzTihlLmUsNyxmLHB0KGcpLHoubWQoKSx3KSksQn19ZWxzZSByZXR1cm4gbChIdWUoZSx0LG4pLDc2KTtyZXR1cm4gbChBQShlLHQsbiksNzYpfWZ1bmN0aW9uIEJfbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2Zvcih0LlVnKCJQb3J0IG9yZGVyIHByb2Nlc3NpbmciLDEpLHc9bChRKGUsKE50KCksWk1lKSksNDMwKSxyPW5ldyBHKGUuYik7ci5hPHIuYy5jLmxlbmd0aDspZm9yKG49bChyZShyKSwzMCksbz1uZXcgRyhuLmEpO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSwxMCksZj1sKFEoYSxNcyksMTAxKSxnPWEuaixmPT0oUmEoKSxUdil8fGY9PVRnfHxmPT1NdT8oQ24oKSxWcyhnLGFMZSkpOmYhPVoxJiZmIT1XYiYmKENuKCksVnMoZyxYOHQpLHo2bihnKSx3PT0oZE4oKSxFZGUpJiZWcyhnLFk4dCkpLGEuaT0hMCxmOWUoYSk7dC5WZygpfWZ1bmN0aW9uIEZfbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O2Zvcih3PW5ldyBQcix0PW5ldyBqaWUsZj1lLktjKCk7Zi5PYigpOylhPWwoZi5QYigpLDEwKSxnPWh3KHJPKG5ldyBTbSxhKSx0KSxqdSh3LmYsYSxnKTtmb3Iobz1lLktjKCk7by5PYigpOylmb3IoYT1sKG8uUGIoKSwxMCkscj1uZXcgaHIoZHIocXMoYSkuYS5LYygpLG5ldyBqKSk7anIocik7KW49bCh4cihyKSwxOCksIURvKG4pJiZwMChzMChpMChyMChhMChuZXcgX2YsYi5NYXRoLm1heCgxLGwoUShuLChOdCgpLGVEZSkpLDE3KS5hKSksMSksbChjcih3LG4uYy5pKSwxMjUpKSxsKGNyKHcsbi5kLmkpLDEyNSkpKTtyZXR1cm4gdH1mdW5jdGlvbiBnbXQoKXtnbXQ9VSxHRXQ9ZmkobmV3IFhzLCh1bygpLF91KSwodm8oKSxVQWUpKSx6RGU9ZmkobmV3IFhzLGJ1LExLKSxXRXQ9eWwoZmkobmV3IFhzLGJ1LEZLKSxtYyxCSyksVUV0PXlsKGZpKGZpKG5ldyBYcyxidSwkQWUpLF91LHpBZSksbWMscUFlKSxZRXQ9VGQoVGQodl8oeWwoZmkobmV3IFhzLHkwLHpLKSxtYywkSyksX3UpLGpLKSxxSyksS0V0PXlsKG5ldyBYcyxtYyxHQWUpLEhFdD15bChmaShmaShmaShuZXcgWHMsdmcsREspLF91LE9LKSxfdSxMVCksbWMsSUspLFZFdD15bChmaShmaShuZXcgWHMsX3UsTFQpLF91LEFLKSxtYyxfSyl9ZnVuY3Rpb24gUl9uKGUsdCxuLHIsYSxvKXt2YXIgZixnLHcsRSxDLEwsQjtmb3IoRT1tMHQodCktbTB0KGUpLGY9bnB0KHQsRSksdz1xdSgwLDAsMCk7RT49MCYmKGc9TTduKGUsZiksIShnJiYoRTwyMj93Lmx8PTE8PEU6RTw0ND93Lm18PTE8PEUtMjI6dy5ofD0xPDxFLTQ0LGUubD09MCYmZS5tPT0wJiZlLmg9PTApKSk7KUM9Zi5tLEw9Zi5oLEI9Zi5sLGYuaD1MPj4+MSxmLm09Qz4+PjF8KEwmMSk8PDIxLGYubD1CPj4+MXwoQyYxKTw8MjEsLS1FO3JldHVybiBuJiZ5Y2UodyksbyYmKHI/KE5iPXhFKGUpLGEmJihOYj1KZnQoTmIsKGlFKCksWVNlKSkpKTpOYj1xdShlLmwsZS5tLGUuaCkpLHd9ZnVuY3Rpb24gal9uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7Zm9yKEU9ZS5lW3QuYy5wXVt0LnBdKzEsdz10LmMuYS5jLmxlbmd0aCsxLGc9bmV3IEcoZS5hKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zm9yKGY9bChyZShnKSwxMiksTD0wLG89MCxhPXJnKExoKGhlKGxlKEZoLDEpLFJuLDIwLDAsW25ldyBUNShmKSxuZXcgQzgoZildKSkpO2pyKGEpOylyPWwoeHIoYSksMTIpLHIuaS5jPT10LmMmJihMKz13aG4oZSxyLmkpKzEsKytvKTtuPUwvbyxDPWYuaixDPT0oQ3QoKSxhcik/bjxFP2UuZltmLnBdPWUuYy1uOmUuZltmLnBdPWUuYisody1uKTpDPT1lciYmKG48RT9lLmZbZi5wXT1lLmIrbjplLmZbZi5wXT1lLmMtKHctbikpfX1mdW5jdGlvbiBPaChlLHQsbil7dmFyIHIsYSxvLGYsZztpZihlPT1udWxsKXRocm93IHVlKG5ldyBnZCh1bCkpO2ZvcihvPWUubGVuZ3RoLGY9bz4wJiYoWG4oMCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KDApPT00NXx8KFhuKDAsZS5sZW5ndGgpLGUuY2hhckNvZGVBdCgwKT09NDMpKT8xOjAscj1mO3I8bztyKyspaWYoVzF0KChYbihyLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQocikpKT09LTEpdGhyb3cgdWUobmV3IGdkKFl3K2UrJyInKSk7aWYoZz1wYXJzZUludChlLDEwKSxhPWc8dCxpc05hTihnKSl0aHJvdyB1ZShuZXcgZ2QoWXcrZSsnIicpKTtpZihhfHxnPm4pdGhyb3cgdWUobmV3IGdkKFl3K2UrJyInKSk7cmV0dXJuIGd9ZnVuY3Rpb24gJF9uKGUpe3ZhciB0LG4scixhLG8sZixnO2ZvcihmPW5ldyBvcyxvPW5ldyBHKGUuYSk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDExOCksSChhLGEuZi5jLmxlbmd0aCkscShhLGEuay5jLmxlbmd0aCksYS5pPT0wJiYoYS5vPTAsQ3MoZixhLGYuYy5iLGYuYykpO2Zvcig7Zi5iIT0wOylmb3IoYT1sKGYuYj09MD9udWxsOihtcihmLmIhPTApLGFmKGYsZi5hLmEpKSwxMTgpLHI9YS5vKzEsbj1uZXcgRyhhLmYpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxMzIpLGc9dC5hLFkoZyxiLk1hdGgubWF4KGcubyxyKSkscShnLGcuaS0xKSxnLmk9PTAmJkNzKGYsZyxmLmMuYixmLmMpfWZ1bmN0aW9uIHpfbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O2ZvcihmPW5ldyBHKGUpO2YuYTxmLmMuYy5sZW5ndGg7KXtmb3Iobz1sKHJlKGYpLDc0KSxyPWJjKGwoT2UoKCFvLmImJihvLmI9bmV3IExuKF9yLG8sNCw3KSksby5iKSwwKSw4NCkpLGc9ci5pLHc9ci5qLGE9bChPZSgoIW8uYSYmKG8uYT1uZXcgbnQoY3Msbyw2LDYpKSxvLmEpLDApLDE2Niksa08oYSxhLmorZyxhLmsrdykseE8oYSxhLmIrZyxhLmMrdyksbj1uZXcgb3IoKCFhLmEmJihhLmE9bmV3IFlzKHFoLGEsNSkpLGEuYSkpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwzNzcpLFdzZSh0LHQuYStnLHQuYit3KTtrN2UobChhdChvLChwaSgpLHgzKSksNzUpLGcsdyl9fWZ1bmN0aW9uIFlFKGUpe3ZhciB0O3N3aXRjaChlKXtjYXNlIDEwMDpyZXR1cm4gYjYoT0wsITApO2Nhc2UgNjg6cmV0dXJuIGI2KE9MLCExKTtjYXNlIDExOTpyZXR1cm4gYjYoaDBlLCEwKTtjYXNlIDg3OnJldHVybiBiNihoMGUsITEpO2Nhc2UgMTE1OnJldHVybiBiNihmMGUsITApO2Nhc2UgODM6cmV0dXJuIGI2KGYwZSwhMSk7Y2FzZSA5OTpyZXR1cm4gYjYoZDBlLCEwKTtjYXNlIDY3OnJldHVybiBiNihkMGUsITEpO2Nhc2UgMTA1OnJldHVybiBiNihnMGUsITApO2Nhc2UgNzM6cmV0dXJuIGI2KGcwZSwhMSk7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgQWMoKHQ9ZSxHNXQrdC50b1N0cmluZygxNikpKSl9fWZ1bmN0aW9uIHFfbihlKXt2YXIgdCxuLHIsYSxvO3N3aXRjaChhPWwoanQoZS5hLDApLDEwKSx0PW5ldyBvcChlKSx2dChlLmEsdCksdC5vLmE9Yi5NYXRoLm1heCgxLGEuby5hKSx0Lm8uYj1iLk1hdGgubWF4KDEsYS5vLmIpLHQubi5hPWEubi5hLHQubi5iPWEubi5iLGwoUShhLChmdCgpLFdjKSksNjQpLmcpe2Nhc2UgNDp0Lm4uYSs9MjticmVhaztjYXNlIDE6dC5uLmIrPTI7YnJlYWs7Y2FzZSAyOnQubi5hLT0yO2JyZWFrO2Nhc2UgMzp0Lm4uYi09Mn1yZXR1cm4gcj1uZXcgZ3UsTWMocix0KSxuPW5ldyBUdyxvPWwoanQoYS5qLDApLDEyKSxwbyhuLG8pLEZhKG4sciksT2koWTAoci5uKSxvLm4pLE9pKFkwKHIuYSksby5hKSx0fWZ1bmN0aW9uIHBtdChlLHQsbixyLGEpe24mJighcnx8KGUuYy1lLmImZS5hLmxlbmd0aC0xKT4xKSYmdD09MSYmbChlLmFbZS5iXSwxMCkuaz09KFpuKCksY3UpP1R4KGwoZS5hW2UuYl0sMTApLChJaCgpLGtnKSk6ciYmKCFufHwoZS5jLWUuYiZlLmEubGVuZ3RoLTEpPjEpJiZ0PT0xJiZsKGUuYVtlLmMtMSZlLmEubGVuZ3RoLTFdLDEwKS5rPT0oWm4oKSxjdSk/VHgobChlLmFbZS5jLTEmZS5hLmxlbmd0aC0xXSwxMCksKEloKCksR2IpKTooZS5jLWUuYiZlLmEubGVuZ3RoLTEpPT0yPyhUeChsKHdBKGUpLDEwKSwoSWgoKSxrZykpLFR4KGwod0EoZSksMTApLEdiKSk6cFRuKGUsYSksbDZlKGUpfWZ1bmN0aW9uIEhfbihlLHQsbil7dmFyIHIsYSxvLGYsZztmb3Iobz0wLGE9bmV3IG9yKCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSk7YS5lIT1hLmkuZ2MoKTspcj1sKGdyKGEpLDI3KSxmPSIiLCghci5uJiYoci5uPW5ldyBudChlYyxyLDEsNykpLHIubikuaT09MHx8KGY9bChPZSgoIXIubiYmKHIubj1uZXcgbnQoZWMsciwxLDcpKSxyLm4pLDApLDEzNSkuYSksZz1uZXcgeGNlKG8rKyx0LGYpLHBjKGcscikscnQoZywoUWkoKSxnTSksciksZy5lLmI9ci5qK3IuZi8yLGcuZi5hPWIuTWF0aC5tYXgoci5nLDEpLGcuZS5hPXIuaStyLmcvMixnLmYuYj1iLk1hdGgubWF4KHIuZiwxKSx1aSh0LmIsZyksanUobi5mLHIsZyl9ZnVuY3Rpb24gVl9uKGUpe3ZhciB0LG4scixhLG87cj1sKFEoZSwoZnQoKSx6aSkpLDI3KSxvPWwoYXQociwoTnQoKSxidikpLDE4MSkuSGMoKG1oKCksQ3YpKSxlLmV8fChhPWwoUShlLEx1KSwyMSksdD1uZXcgbHQoZS5mLmErZS5kLmIrZS5kLmMsZS5mLmIrZS5kLmQrZS5kLmEpLGEuSGMoKEhvKCksdmYpKT8oSGkocixNcywoUmEoKSxNdSkpLEd3KHIsdC5hLHQuYiwhMSwhMCkpOlJ0KEJ0KGF0KHIsYWRlKSkpfHxHdyhyLHQuYSx0LmIsITAsITApKSxvP0hpKHIsYnYsdW4oQ3YpKTpIaShyLGJ2LChuPWwoSzAoQk0pLDkpLG5ldyBaaChuLGwoYzAobixuLmxlbmd0aCksOSksMCkpKX1mdW5jdGlvbiBta2UoZSx0LG4pe3ZhciByLGEsbyxmO2lmKHRbMF0+PWUubGVuZ3RoKXJldHVybiBuLm89MCwhMDtzd2l0Y2goY28oZSx0WzBdKSl7Y2FzZSA0MzphPTE7YnJlYWs7Y2FzZSA0NTphPS0xO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG4ubz0wLCEwfWlmKCsrdFswXSxvPXRbMF0sZj1rVShlLHQpLGY9PTAmJnRbMF09PW8pcmV0dXJuITE7aWYodFswXTxlLmxlbmd0aCYmY28oZSx0WzBdKT09NTgpe2lmKHI9Zio2MCwrK3RbMF0sbz10WzBdLGY9a1UoZSx0KSxmPT0wJiZ0WzBdPT1vKXJldHVybiExO3IrPWZ9ZWxzZSByPWYscjwyNCYmdFswXS1vPD0yP3IqPTYwOnI9ciUxMDArKHIvMTAwfDApKjYwO3JldHVybiByKj1hLG4ubz0tciwhMH1mdW5jdGlvbiBVX24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFO2ZvcihmPW5ldyBidCxyPW5ldyBocihkcihxcyhlLmIpLmEuS2MoKSxuZXcgaikpO2pyKHIpOyluPWwoeHIociksMTgpLERvKG4pJiZ2dChmLG5ldyBCdXQobix3bHQoZSxuLmMpLHdsdChlLG4uZCkpKTtmb3IoRT0obz1uZXcgZ2koZS5lKS5hLnZjKCkuS2MoKSxuZXcgZnMobykpO0UuYS5PYigpOylnPSh0PWwoRS5hLlBiKCksNDQpLGwodC5tZCgpLDExMykpLGcuZC5wPTA7Zm9yKHc9KGE9bmV3IGdpKGUuZSkuYS52YygpLktjKCksbmV3IGZzKGEpKTt3LmEuT2IoKTspZz0odD1sKHcuYS5QYigpLDQ0KSxsKHQubWQoKSwxMTMpKSxnLmQucD09MCYmdnQoZS5kLFRfbihlLGcpKX1mdW5jdGlvbiBHX24oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKG89TTEoZSksYT1uZXcgb3IoKCFlLmUmJihlLmU9bmV3IExuKGpzLGUsNyw0KSksZS5lKSk7YS5lIT1hLmkuZ2MoKTspaWYocj1sKGdyKGEpLDc0KSxnPWJjKGwoT2UoKCFyLmMmJihyLmM9bmV3IExuKF9yLHIsNSw4KSksci5jKSwwKSw4NCkpLCFMeShnLG8pKXJldHVybiEwO2ZvcihuPW5ldyBvcigoIWUuZCYmKGUuZD1uZXcgTG4oanMsZSw4LDUpKSxlLmQpKTtuLmUhPW4uaS5nYygpOylpZih0PWwoZ3IobiksNzQpLGY9YmMobChPZSgoIXQuYiYmKHQuYj1uZXcgTG4oX3IsdCw0LDcpKSx0LmIpLDApLDg0KSksIUx5KGYsbykpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gS19uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2ZvcihmPW5ldyBHKHQuYik7Zi5hPGYuYy5jLmxlbmd0aDspZm9yKG89bChyZShmKSwzMCksRT1uZXcgRyhvLmEpO0UuYTxFLmMuYy5sZW5ndGg7KXtmb3Iodz1sKHJlKEUpLDEwKSxDPW5ldyBidCxnPTAscj1uZXcgaHIoZHIoa2EodykuYS5LYygpLG5ldyBqKSk7anIocik7KW49bCh4cihyKSwxOCksIShEbyhuKXx8IURvKG4pJiZuLmMuaS5jPT1uLmQuaS5jKSYmKGE9bChRKG4sKE50KCksSngpKSwxNykuYSxhPmcmJihnPWEsQy5jLmxlbmd0aD0wKSxhPT1nJiZ2dChDLG5ldyBjYShuLmMuaSxuKSkpO0NuKCksVnMoQyxlLmMpLHB3KGUuYix3LnAsQyl9fWZ1bmN0aW9uIFdfbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQztmb3IoZj1uZXcgRyh0LmIpO2YuYTxmLmMuYy5sZW5ndGg7KWZvcihvPWwocmUoZiksMzApLEU9bmV3IEcoby5hKTtFLmE8RS5jLmMubGVuZ3RoOyl7Zm9yKHc9bChyZShFKSwxMCksQz1uZXcgYnQsZz0wLHI9bmV3IGhyKGRyKHFzKHcpLmEuS2MoKSxuZXcgaikpO2pyKHIpOyluPWwoeHIociksMTgpLCEoRG8obil8fCFEbyhuKSYmbi5jLmkuYz09bi5kLmkuYykmJihhPWwoUShuLChOdCgpLEp4KSksMTcpLmEsYT5nJiYoZz1hLEMuYy5sZW5ndGg9MCksYT09ZyYmdnQoQyxuZXcgY2Eobi5kLmksbikpKTtDbigpLFZzKEMsZS5jKSxwdyhlLmYsdy5wLEMpfX1mdW5jdGlvbiBZX24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2lmKEU9QnQoUSh0LChIYygpLE1UdCkpKSxFPT1udWxsfHwobnIoRSksRSkpe2Zvcih5RW4oZSx0KSxhPW5ldyBidCx3PVJyKHQuYiwwKTt3LmIhPXcuZC5jOylmPWwoQnIodyksNDApLG49aTllKGUsZixudWxsKSxuJiYocGMobix0KSwkbihhLmMsbikpO2lmKGUuYT1udWxsLGUuYj1udWxsLGEuYy5sZW5ndGg+MSlmb3Iocj1uZXcgRyhhKTtyLmE8ci5jLmMubGVuZ3RoOylmb3Iobj1sKHJlKHIpLDEyMSksbz0wLGc9UnIobi5iLDApO2cuYiE9Zy5kLmM7KWY9bChCcihnKSw0MCksZi5nPW8rKztyZXR1cm4gYX1yZXR1cm4gTzEoaGUobGUoX09uLDEpLGszdCwxMjEsMCxbdF0pKX1mdW5jdGlvbiBYX24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdztmb3Iodz1uZXcgYmwsdD1ScihlLDApLGc9bnVsbCxuPWwoQnIodCksOCksYT1sKEJyKHQpLDgpO3QuYiE9dC5kLmM7KWc9bixuPWEsYT1sKEJyKHQpLDgpLG89RWh0KG1hKG5ldyBsdChnLmEsZy5iKSxuKSksZj1FaHQobWEobmV3IGx0KGEuYSxhLmIpLG4pKSxyPTEwLHI9Yi5NYXRoLm1pbihyLGIuTWF0aC5hYnMoby5hK28uYikvMikscj1iLk1hdGgubWluKHIsYi5NYXRoLmFicyhmLmErZi5iKS8yKSxvLmE9Uk8oby5hKSpyLG8uYj1STyhvLmIpKnIsZi5hPVJPKGYuYSkqcixmLmI9Uk8oZi5iKSpyLHVpKHcsT2kobyxuKSksdWkodyxPaShmLG4pKTtyZXR1cm4gd31mdW5jdGlvbiBRX24oZSx0LG4pe3ZhciByLGEsbyxmLGcsdztpZihuLlVnKCJNaW5pbWl6ZSBDcm9zc2luZ3MgIitlLmEsMSkscj10LmIuYy5sZW5ndGg9PTB8fCFfayhGaShuZXcgYm4obnVsbCxuZXcga24odC5iLDE2KSksbmV3IFdsKG5ldyBWZWUpKSkuQmQoKEFtKCksengpKSx3PXQuYi5jLmxlbmd0aD09MSYmbChqdCh0LmIsMCksMzApLmEuYy5sZW5ndGg9PTEsbz1xZShRKHQsKE50KCkscDQpKSk9PT1xZSgocnAoKSxBMikpLHJ8fHcmJiFvKXtuLlZnKCk7cmV0dXJufWE9JENuKGUsdCksZj0oZz1sKGZmKGEsMCksMjE5KSxnLmMua2coKT9nLmMuZWcoKT9uZXcgalllKGUpOm5ldyAkWWUoZSk6bmV3IFJZZShlKSksQXluKGEsZiksYTRuKGUpLG4uVmcoKX1mdW5jdGlvbiBOaChlLHQsbixyKXt2YXIgYSxvLGYsZyx3O3JldHVybiBmPWUuUGgoKSx3PWUuSmgoKSxhPW51bGwsdz90JiYhKHNsZShlLHQsbikuQmImSW8pPyhyPVRvKHcuRWwoKSxlLHIpLGUuZGkobnVsbCksYT10LlFoKCkpOnc9bnVsbDooZiYmKHc9Zi5RaCgpKSx0JiYoYT10LlFoKCkpKSx3IT1hJiZ3JiZ3LklsKGUpLGc9ZS5GaCgpLGUuQmgodCxuKSx3IT1hJiZhJiZhLkhsKGUpLGUudmgoKSYmZS53aCgpJiYoZiYmZz49MCYmZyE9biYmKG89bmV3IF9hKGUsMSxnLGYsbnVsbCkscj9yLm5qKG8pOnI9byksbj49MCYmKG89bmV3IF9hKGUsMSxuLGc9PW4/ZjpudWxsLHQpLHI/ci5uaihvKTpyPW8pKSxyfWZ1bmN0aW9uIGJtdChlKXt2YXIgdCxuLHI7aWYoZS5iPT1udWxsKXtpZihyPW5ldyBVcCxlLmkhPW51bGwmJihYbyhyLGUuaSksci5hKz0iOiIpLGUuZiYyNTYpe2ZvcihlLmYmMjU2JiZlLmEhPW51bGwmJihkcG4oZS5pKXx8KHIuYSs9Ii8vIiksWG8ocixlLmEpKSxlLmQhPW51bGwmJihyLmErPSIvIixYbyhyLGUuZCkpLGUuZiYxNiYmKHIuYSs9Ii8iKSx0PTAsbj1lLmoubGVuZ3RoO3Q8bjt0KyspdCE9MCYmKHIuYSs9Ii8iKSxYbyhyLGUualt0XSk7ZS5nIT1udWxsJiYoci5hKz0iPyIsWG8ocixlLmcpKX1lbHNlIFhvKHIsZS5hKTtlLmUhPW51bGwmJihyLmErPSIjIixYbyhyLGUuZSkpLGUuYj1yLmF9cmV0dXJuIGUuYn1mdW5jdGlvbiBKX24oZSx0KXt2YXIgbixyLGEsbyxmLGc7Zm9yKGE9bmV3IEcodC5hKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTApLG89UShyLChmdCgpLHppKSksRGUobywxMikmJihmPWwobywxMiksZz1ObXQodCxyLGYuby5hLGYuby5iKSxmLm4uYT1nLmEsZi5uLmI9Zy5iLGxhKGYsbChRKHIsV2MpLDY0KSkpO249bmV3IGx0KHQuZi5hK3QuZC5iK3QuZC5jLHQuZi5iK3QuZC5kK3QuZC5hKSxsKFEodCwoZnQoKSxMdSkpLDIxKS5IYygoSG8oKSx2ZikpPyhydChlLChOdCgpLE1zKSwoUmEoKSxNdSkpLGwoUShlbyhlKSxMdSksMjEpLkZjKCRUKSxrdnQoZSxuLCExKSk6a3Z0KGUsbiwhMCl9ZnVuY3Rpb24gWl9uKGUsdCxuLHIsYSl7dmFyIG8sZixnLHc7bz1uZXcgb3AoZSkseChvLChabigpLEF1KSkscnQobywoTnQoKSxNcyksKFJhKCksTXUpKSxydChvLChmdCgpLHppKSx0LmMuaSksZj1uZXcgZ3UscnQoZix6aSx0LmMpLGxhKGYsYSksTWMoZixvKSxydCh0LmMsamwsbyksZz1uZXcgb3AoZSkseChnLEF1KSxydChnLE1zLE11KSxydChnLHppLHQuZC5pKSx3PW5ldyBndSxydCh3LHppLHQuZCksbGEodyxhKSxNYyh3LGcpLHJ0KHQuZCxqbCxnKSxwbyh0LGYpLEZhKHQsdyksRXkoMCxuLmMubGVuZ3RoKSx4XyhuLmMsMCxvKSwkbihyLmMsZykscnQobyxpVyxwdCgxKSkscnQoZyxpVyxwdCgxKSl9ZnVuY3Rpb24gZUFuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7aWYodz1ZcihtbyhmZyxpZyhZcihtbyh0PT1udWxsPzA6ZXModCksZGcpKSwxNSkpKSxhPVlyKG1vKGZnLGlnKFlyKG1vKG49PW51bGw/MDplcyhuKSxkZykpLDE1KSkpLGc9cEEoZSx0LHcpLGY9Z0EoZSxuLGEpLGcmJmE9PWcuYSYmeWQobixnLmcpKXJldHVybiBuO2lmKGYmJiFyKXRocm93IHVlKG5ldyBZbigia2V5IGFscmVhZHkgcHJlc2VudDogIituKSk7cmV0dXJuIGcmJnU2KGUsZyksZiYmdTYoZSxmKSxvPW5ldyB4SChuLGEsdCx3KSxlUChlLG8sZiksZiYmKGYuZT1udWxsLGYuYz1udWxsKSxnJiYoZy5lPW51bGwsZy5jPW51bGwpLGZndChlKSxnP2cuZzpudWxsfWZ1bmN0aW9uIG1tdChlLHQsbil7dmFyIHIsYSxvLGYsZztmb3Iobz0wO288dDtvKyspe2ZvcihyPTAsZz1vKzE7Zzx0O2crKylyPWJvKGJvKG1vKHZhKGVbb10sVm8pLHZhKGVbZ10sVm8pKSx2YShuW28rZ10sVm8pKSx2YShZcihyKSxWbykpLG5bbytnXT1ZcihyKSxyPXViKHIsMzIpO25bbyt0XT1ZcihyKX1mb3IoZjNuKG4sbix0PDwxKSxyPTAsYT0wLGY9MDthPHQ7KythLGYrKylyPWJvKGJvKG1vKHZhKGVbYV0sVm8pLHZhKGVbYV0sVm8pKSx2YShuW2ZdLFZvKSksdmEoWXIociksVm8pKSxuW2ZdPVlyKHIpLHI9dWIociwzMiksKytmLHI9Ym8ocix2YShuW2ZdLFZvKSksbltmXT1ZcihyKSxyPXViKHIsMzIpO3JldHVybiBufWZ1bmN0aW9uIHZtdChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztpZighWmsodCkpe2Zvcih3PXplKEdlKFB5KG4uYywoTnQoKSx0TSkpKSksRT1sKFB5KG4uYyxfQiksMTQwKSwhRSYmKEU9bmV3IHNfKSxyPW4uYSxhPW51bGwsZz10LktjKCk7Zy5PYigpOylmPWwoZy5QYigpLDEyKSxDPTAsYT8oQz13LEMrPWEuby5iKTpDPUUuZCxvPWh3KHJPKG5ldyBTbSxmKSxlLmYpLGtpKGUuayxmLG8pLHAwKHMwKGkwKHIwKGEwKG5ldyBfZiwwKSx1YShiLk1hdGguY2VpbChDKSkpLHIpLG8pKSxhPWYscj1vO3AwKHMwKGkwKHIwKGEwKG5ldyBfZiwwKSx1YShiLk1hdGguY2VpbChFLmErYS5vLmIpKSksciksbi5kKSl9fWZ1bmN0aW9uIHRBbihlLHQsbixyLGEsbyxmLGcpe3ZhciB3LEUsQyxMLEIsejtyZXR1cm4gej0hMSxCPW8tbi5zLEM9bi50LXQuZisoRT1aQShuLEIsITEpLEUuYSksci5nK2c+Qj8hMTooTD0odz1aQShyLEIsITEpLHcuYSksQytnK0w8PXQuYiYmKGFOKG4sby1uLnMpLG4uYz0hMCxhTihyLG8tbi5zKSxxTihyLG4ucyxuLnQrbi5kK2cpLHIuaz0hMCxDN2Uobi5xLHIpLHo9ITAsYSYmKGJWKHQsciksci5qPXQsZS5jLmxlbmd0aD5mJiYoVU4oKFNuKGYsZS5jLmxlbmd0aCksbChlLmNbZl0sMTg2KSksciksKFNuKGYsZS5jLmxlbmd0aCksbChlLmNbZl0sMTg2KSkuYS5jLmxlbmd0aD09MCYmdDIoZSxmKSkpKSx6KX1mdW5jdGlvbiBuQW4oZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYodC5VZygiUGFydGl0aW9uIG1pZHByb2Nlc3NpbmciLDEpLGE9bmV3IEN3LElzKEZpKG5ldyBibihudWxsLG5ldyBrbihlLmEsMTYpKSxuZXcgdmopLG5ldyBjWWUoYSkpLGEuZCE9MCl7Zm9yKGc9bCh5YyhLNWUoKG89YS5pLG5ldyBibihudWxsLChvfHwoYS5pPW5ldyBxNShhLGEuYykpKS5OYygpKSkpLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxFYyldKSkpLDE1KSxyPWcuS2MoKSxuPWwoci5QYigpLDE3KTtyLk9iKCk7KWY9bChyLlBiKCksMTcpLFdUbihsKCRpKGEsbiksMjEpLGwoJGkoYSxmKSwyMSkpLG49Zjt0LlZnKCl9fWZ1bmN0aW9uIHdtdChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztpZih0LnA9PTApe2Zvcih0LnA9MSxmPW4sZnx8KGE9bmV3IGJ0LG89KHI9bChLMChPbyksOSksbmV3IFpoKHIsbChjMChyLHIubGVuZ3RoKSw5KSwwKSksZj1uZXcgY2EoYSxvKSksbChmLmEsMTUpLkZjKHQpLHQuaz09KFpuKCksVXMpJiZsKGYuYiwyMSkuRmMobChRKHQsKGZ0KCksV2MpKSw2NCkpLHc9bmV3IEcodC5qKTt3LmE8dy5jLmMubGVuZ3RoOylmb3IoZz1sKHJlKHcpLDEyKSxDPXJnKExoKGhlKGxlKEZoLDEpLFJuLDIwLDAsW25ldyBUNShnKSxuZXcgQzgoZyldKSkpO2pyKEMpOylFPWwoeHIoQyksMTIpLHdtdChlLEUuaSxmKTtyZXR1cm4gZn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBZQShlLHQpe3ZhciBuLHIsYSxvLGY7aWYoZS5BYil7aWYoZS5BYil7aWYoZj1lLkFiLmksZj4wKXtpZihhPWwoZS5BYi5nLDIwMzMpLHQ9PW51bGwpe2ZvcihvPTA7bzxmOysrbylpZihuPWFbb10sbi5kPT1udWxsKXJldHVybiBufWVsc2UgZm9yKG89MDtvPGY7KytvKWlmKG49YVtvXSx2bih0LG4uZCkpcmV0dXJuIG59fWVsc2UgaWYodD09bnVsbCl7Zm9yKHI9bmV3IG9yKGUuQWIpO3IuZSE9ci5pLmdjKCk7KWlmKG49bChncihyKSw1OTgpLG4uZD09bnVsbClyZXR1cm4gbn1lbHNlIGZvcihyPW5ldyBvcihlLkFiKTtyLmUhPXIuaS5nYygpOylpZihuPWwoZ3IociksNTk4KSx2bih0LG4uZCkpcmV0dXJuIG59cmV0dXJuIG51bGx9ZnVuY3Rpb24gckFuKGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZTt6PXBtbihlLEQ3ZSh0KSxhKSxwN2UoeixZZyhhLFBkKSkseT1udWxsLFY9YSxKPWFBKFYsdjR0KSx0ZT1uZXcgUlhlKHopLGQ5bih0ZS5hLEopLGZlPWFBKFYsImVuZFBvaW50IiksVGU9bmV3IHFYZSh6KSxmOW4oVGUuYSxmZSksTWU9QXcoViwkRyksJGU9bmV3IFVYZSh6KSxleG4oJGUuYSxNZSksTD1ZZyhhLGdTZSksbz1uZXcgd3R0KGUseiksamZuKG8uYSxvLmIsTCksQj1ZZyhhLGRTZSksZj1uZXcgeXR0KGUseiksJGZuKGYuYSxmLmIsQiksRT1BdyhhLGJTZSksZz1uZXcgeHR0KG4seiksQjduKGcuYixnLmEsRSksQz1BdyhhLHBTZSksdz1uZXcga3R0KHIseiksRjduKHcuYix3LmEsQyl9ZnVuY3Rpb24gdmtlKGUsdCxuKXt2YXIgcixhLG8sZixnO3N3aXRjaChnPW51bGwsdC5nKXtjYXNlIDE6Zm9yKGE9bmV3IEcoZS5qKTthLmE8YS5jLmMubGVuZ3RoOylpZihyPWwocmUoYSksMTIpLFJ0KEJ0KFEociwoZnQoKSxWMWUpKSkpKXJldHVybiByO2c9bmV3IGd1LHJ0KGcsKGZ0KCksVjFlKSwoSG4oKSwhMCkpO2JyZWFrO2Nhc2UgMjpmb3IoZj1uZXcgRyhlLmopO2YuYTxmLmMuYy5sZW5ndGg7KWlmKG89bChyZShmKSwxMiksUnQoQnQoUShvLChmdCgpLEcxZSkpKSkpcmV0dXJuIG87Zz1uZXcgZ3UscnQoZywoZnQoKSxHMWUpLChIbigpLCEwKSl9cmV0dXJuIGcmJihNYyhnLGUpLGxhKGcsbiksajZuKGcubixlLm8sbikpLGd9ZnVuY3Rpb24geW10KGUsdCl7dmFyIG4scixhLG8sZixnO2ZvcihnPS0xLGY9bmV3IG9zLHI9bmV3IE4xKGUuYik7TGMoci5hKXx8TGMoci5iKTspe2ZvcihuPWwoTGMoci5hKT9yZShyLmEpOnJlKHIuYiksMTgpLGc9Yi5NYXRoLm1heChnLHplKEdlKFEobiwoTnQoKSx4MikpKSkpLG4uYz09ZT9JcyhGaShuZXcgYm4obnVsbCxuZXcga24obi5iLDE2KSksbmV3IGlaKSxuZXcgV1dlKGYpKTpJcyhGaShuZXcgYm4obnVsbCxuZXcga24obi5iLDE2KSksbmV3IHNaKSxuZXcgWVdlKGYpKSxvPVJyKGYsMCk7by5iIT1vLmQuYzspYT1sKEJyKG8pLDcyKSxucyhhLChmdCgpLEt4KSl8fHJ0KGEsS3gsbik7cmEodCxmKSxDaChmKX1yZXR1cm4gZ31mdW5jdGlvbiBWdyhlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEU7Zz1hP3IuYjpyLmEsIVcwKGUuYSxyKSYmKEU9Zz5uLnMmJmc8bi5jLHc9ITEsbi5lLmIhPTAmJm4uai5iIT0wJiYodz13fChiLk1hdGguYWJzKGctemUoR2UoQmsobi5lKSkpKTxEZCYmYi5NYXRoLmFicyhnLXplKEdlKEJrKG4uaikpKSk8RGQpLHc9d3woYi5NYXRoLmFicyhnLXplKEdlKG8wKG4uZSkpKSk8RGQmJmIuTWF0aC5hYnMoZy16ZShHZShvMChuLmopKSkpPERkKSksKEV8fHcpJiYoZj1sKFEodCwoTnQoKSxjYykpLDc1KSxmfHwoZj1uZXcgYmwscnQodCxjYyxmKSksbz1uZXcgRW8ociksQ3MoZixvLGYuYy5iLGYuYyksbmEoZS5hLG8pKSl9ZnVuY3Rpb24gaUFuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDO2lmKGlFbihlLHQsbixyKSlyZXR1cm4hMDtmb3IoZj1uZXcgRyh0LmYpO2YuYTxmLmMuYy5sZW5ndGg7KXtzd2l0Y2gobz1sKHJlKGYpLDMzNCksZz0hMSx3PWUuai10LmorbixFPXcrdC5vLEM9ZS5rLXQuaytyLGE9Qyt0LnAsby5hLmcpe2Nhc2UgMDpnPUNjZShlLHcrby5iLmEsMCx3K28uYy5hLEMtMSk7YnJlYWs7Y2FzZSAxOmc9Q2NlKGUsRSxDK28uYi5hLGUuby0xLEMrby5jLmEpO2JyZWFrO2Nhc2UgMjpnPUNjZShlLHcrby5iLmEsYSx3K28uYy5hLGUucC0xKTticmVhaztkZWZhdWx0Omc9Q2NlKGUsMCxDK28uYi5hLHctMSxDK28uYy5hKX1pZihnKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHNBbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMO2ZvcihuLlVnKCJQcm9jZXNzb3Igc2V0IGNvb3JkaW5hdGVzIiwxKSxlLmE9dC5iLmI9PTA/MTp0LmIuYixFPW51bGwscj1Scih0LmIsMCk7IUUmJnIuYiE9ci5kLmM7KUw9bChCcihyKSw0MCksUnQoQnQoUShMLChRaSgpLFZiKSkpKSYmKEU9TCx3PUwuZSx3LmE9bChRKEwsUEIpLDE3KS5hLHcuYj1sKFEoTCxCQiksMTcpLmEpO2c9cGNlKEUpLEM9MTtkbyBnPW85bigoYT1nLG4uZWgoQyksYSkpLEM9Zy5iL2UuYXwwO3doaWxlKGcuYiE9MCk7Zm9yKGY9UnIodC5iLDApO2YuYiE9Zi5kLmM7KW89bChCcihmKSw0MCksbWEoby5lLG5ldyBsdChvLmYuYS8yLG8uZi5iLzIpKTtuLlZnKCl9ZnVuY3Rpb24gYUFuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDO2ZvcihuLlVnKGZ5dCwxKSxObChlLmIpLE5sKGUuYSksZz1udWxsLG89UnIodC5iLDApOyFnJiZvLmIhPW8uZC5jOylFPWwoQnIobyksNDApLFJ0KEJ0KFEoRSwoUWkoKSxWYikpKSkmJihnPUUpO2Zvcih3PW5ldyBvcyxDcyh3LGcsdy5jLmIsdy5jKSxYdnQoZSx3KSxDPVJyKHQuYiwwKTtDLmIhPUMuZC5jOylFPWwoQnIoQyksNDApLGY9ZWkoUShFLChRaSgpLGRNKSkpLGE9eHUoZS5iLGYpIT1udWxsP2woeHUoZS5iLGYpLDE3KS5hOjAscnQoRSxQZGUscHQoYSkpLHI9MSsoeHUoZS5hLGYpIT1udWxsP2woeHUoZS5hLGYpLDE3KS5hOjApLHJ0KEUsbkllLHB0KHIpKTtuLlZnKCl9ZnVuY3Rpb24geG10KGUpe3N3KGUsbmV3IFhtKG53KFp2KHR3KGV3KG5ldyB4MSxlMyksIkVMSyBCb3giKSwiQWxnb3JpdGhtIGZvciBwYWNraW5nIG9mIHVuY29ubmVjdGVkIGJveGVzLCBpLmUuIGdyYXBocyB3aXRob3V0IGVkZ2VzLiIpLG5ldyBlaykpKSxndChlLGUzLFh3LEpPZSksZ3QoZSxlMyxKeSwxNSksZ3QoZSxlMyxOUCxwdCgwKSksZ3QoZSxlMyxaQ2UsSXQoWU9lKSksZ3QoZSxlMyx4NixJdChFU3QpKSxndChlLGUzLE54LEl0KFRTdCkpLGd0KGUsZTMsT3gsUHl0KSxndChlLGUzLGhMLEl0KFhPZSkpLGd0KGUsZTMsUHgsSXQoUU9lKSksZ3QoZSxlMyxlU2UsSXQoX2dlKSksZ3QoZSxlMyxTRyxJdChrU3QpKX1mdW5jdGlvbiBrbXQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYoYT1lLmksZj1hLm8uYSxvPWEuby5iLGY8PTAmJm88PTApcmV0dXJuIEN0KCksUGM7c3dpdGNoKEU9ZS5uLmEsQz1lLm4uYixnPWUuby5hLG49ZS5vLmIsdC5nKXtjYXNlIDI6Y2FzZSAxOmlmKEU8MClyZXR1cm4gQ3QoKSxlcjtpZihFK2c+ZilyZXR1cm4gQ3QoKSxhcjticmVhaztjYXNlIDQ6Y2FzZSAzOmlmKEM8MClyZXR1cm4gQ3QoKSxRbjtpZihDK24+bylyZXR1cm4gQ3QoKSxEcn1yZXR1cm4gdz0oRStnLzIpL2Yscj0oQytuLzIpL28sdytyPD0xJiZ3LXI8PTA/KEN0KCksZXIpOncrcj49MSYmdy1yPj0wPyhDdCgpLGFyKTpyPC41PyhDdCgpLFFuKTooQ3QoKSxEcil9ZnVuY3Rpb24gb0FuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtmb3Iobj0hMSxDPXplKEdlKFEodCwoTnQoKSxtMykpKSksVj1BYipDLGE9bmV3IEcodC5iKTthLmE8YS5jLmMubGVuZ3RoOylmb3Iocj1sKHJlKGEpLDMwKSxFPW5ldyBHKHIuYSksbz1sKHJlKEUpLDEwKSxMPXM1ZShlLmFbby5wXSk7RS5hPEUuYy5jLmxlbmd0aDspZz1sKHJlKEUpLDEwKSxCPXM1ZShlLmFbZy5wXSksTCE9QiYmKHo9ajUoZS5iLG8sZyksZj1vLm4uYitvLm8uYitvLmQuYStMLmEreix3PWcubi5iLWcuZC5kK0IuYSxmPncrViYmKEo9TC5nK0IuZyxCLmE9KEIuZypCLmErTC5nKkwuYSkvSixCLmc9SixMLmY9QixuPSEwKSksbz1nLEw9QjtyZXR1cm4gbn1mdW5jdGlvbiBFbXQoZSx0LG4scixhLG8sZil7dmFyIGcsdyxFLEMsTCxCO2ZvcihCPW5ldyAkOCxFPXQuS2MoKTtFLk9iKCk7KWZvcihnPWwoRS5QYigpLDg1MyksTD1uZXcgRyhnLlJmKCkpO0wuYTxMLmMuYy5sZW5ndGg7KUM9bChyZShMKSwxODcpLHFlKEMub2YoKHBpKCksSWdlKSkpPT09cWUoKEYxKCksckMpKSYmKHRtdChCLEMsITEscixhLG8sZiksJEEoZSxCKSk7Zm9yKHc9bi5LYygpO3cuT2IoKTspZm9yKGc9bCh3LlBiKCksODUzKSxMPW5ldyBHKGcuUmYoKSk7TC5hPEwuYy5jLmxlbmd0aDspQz1sKHJlKEwpLDE4NykscWUoQy5vZigocGkoKSxJZ2UpKSk9PT1xZSgoRjEoKSxfNCkpJiYodG10KEIsQywhMCxyLGEsbyxmKSwkQShlLEIpKX1mdW5jdGlvbiBjQW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFO2ZvcihmPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpO2YuZSE9Zi5pLmdjKCk7KWZvcihvPWwoZ3IoZiksMjcpLGE9bmV3IGhyKGRyKGNwKG8pLmEuS2MoKSxuZXcgaikpO2pyKGEpOylyPWwoeHIoYSksNzQpLCFxQShyKSYmIXFBKHIpJiYhcXcocikmJih3PWwoaGMoem8obi5mLG8pKSw0MCksRT1sKGNyKG4sYmMobChPZSgoIXIuYyYmKHIuYz1uZXcgTG4oX3Isciw1LDgpKSxyLmMpLDApLDg0KSkpLDQwKSx3JiZFJiYoZz1uZXcgTjVlKHcsRSkscnQoZywoUWkoKSxnTSkscikscGMoZyxyKSx1aSh3LmQsZyksdWkoRS5iLGcpLHVpKHQuYSxnKSkpfWZ1bmN0aW9uIHVBbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7Zm9yKHc9bChsKCRpKGUucix0KSwyMSksODcpLktjKCk7dy5PYigpOylnPWwody5QYigpLDExNyksYT1nLmM/SGl0KGcuYyk6MCxhPjA/Zy5hPyhFPWcuYi5NZigpLmIsYT5FJiYoZS52fHxnLmMuZC5jLmxlbmd0aD09MT8oZj0oYS1FKS8yLGcuZC5kPWYsZy5kLmE9Zik6KG49bChqdChnLmMuZCwwKSwxODcpLk1mKCkuYixyPShuLUUpLzIsZy5kLmQ9Yi5NYXRoLm1heCgwLHIpLGcuZC5hPWEtci1FKSkpOmcuZC5hPWUudCthOldfKGUudSkmJihvPSR4ZShnLmIpLG8uZDwwJiYoZy5kLmQ9LW8uZCksby5kK28uYT5nLmIuTWYoKS5iJiYoZy5kLmE9by5kK28uYS1nLmIuTWYoKS5iKSl9ZnVuY3Rpb24gYjAoKXtiMD1VLHF4PW5ldyBIYSgocGkoKSxYQikscHQoMSkpLGtLPW5ldyBIYShFdiw4MCksbjh0PW5ldyBIYShBTmUsNSksRzd0PW5ldyBIYShaNixsVCksZTh0PW5ldyBIYSh6Z2UscHQoMSkpLHQ4dD1uZXcgSGEocWdlLChIbigpLCEwKSksbkFlPW5ldyBsdyg1MCksSjd0PW5ldyBIYShfMixuQWUpLFpfZT1XQixyQWU9X00sSzd0PW5ldyBIYShEZ2UsITEpLHRBZT1ZQixYN3Q9QzQsUTd0PVViLFk3dD1rdixXN3Q9cjcsWjd0PVM0LGVBZT0oWHhlKCksajd0KSxaMGU9SDd0LHhLPVI3dCxKMGU9JDd0LGlBZT1xN3Qsczh0PUFNLGE4dD1hWSxpOHQ9UUIscjh0PXNZLHNBZT0oZHgoKSxMNCksbmV3IEhhKGk5LHNBZSl9ZnVuY3Rpb24gbEFuKGUsdCl7dmFyIG47c3dpdGNoKGdOKGUpKXtjYXNlIDY6cmV0dXJuIElhKHQpO2Nhc2UgNzpyZXR1cm4gZnkodCk7Y2FzZSA4OnJldHVybiBoeSh0KTtjYXNlIDM6cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJihuPWdOKHQpLCEobj49MTQmJm48PTE2KSk7Y2FzZSAxMTpyZXR1cm4gdCE9bnVsbCYmdHlwZW9mIHQ9PT1PbGU7Y2FzZSAxMjpyZXR1cm4gdCE9bnVsbCYmKHR5cGVvZiB0PT09d1B8fHR5cGVvZiB0PT1PbGUpO2Nhc2UgMDpyZXR1cm4gaXVlKHQsZS5fX2VsZW1lbnRUeXBlSWQkKTtjYXNlIDI6cmV0dXJuIFJhZSh0KSYmdC5UbSE9PXhlO2Nhc2UgMTpyZXR1cm4gUmFlKHQpJiZ0LlRtIT09eGV8fGl1ZSh0LGUuX19lbGVtZW50VHlwZUlkJCk7ZGVmYXVsdDpyZXR1cm4hMH19ZnVuY3Rpb24gVG10KGUsdCl7dmFyIG4scixhLG87cmV0dXJuIHI9Yi5NYXRoLm1pbihiLk1hdGguYWJzKGUuYy0odC5jK3QuYikpLGIuTWF0aC5hYnMoZS5jK2UuYi10LmMpKSxvPWIuTWF0aC5taW4oYi5NYXRoLmFicyhlLmQtKHQuZCt0LmEpKSxiLk1hdGguYWJzKGUuZCtlLmEtdC5kKSksbj1iLk1hdGguYWJzKGUuYytlLmIvMi0odC5jK3QuYi8yKSksbj5lLmIvMit0LmIvMnx8KGE9Yi5NYXRoLmFicyhlLmQrZS5hLzItKHQuZCt0LmEvMikpLGE+ZS5hLzIrdC5hLzIpPzE6bj09MCYmYT09MD8wOm49PTA/by9hKzE6YT09MD9yL24rMTpiLk1hdGgubWluKHIvbixvL2EpKzF9ZnVuY3Rpb24gaEFuKGUsdCl7dmFyIG4scixhLG8sZixnLHc7Zm9yKG89MCxnPTAsdz0wLGE9bmV3IEcoZS5mLmUpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxNTMpLHQhPXImJihmPWUuaVt0LmFdW3IuYV0sbys9ZixuPXBiKHQuZCxyLmQpLG4+MCYmZS5kIT0obEEoKSxuMWUpJiYoZys9Ziooci5kLmErZS5hW3QuYV1bci5hXSoodC5kLmEtci5kLmEpL24pKSxuPjAmJmUuZCE9KGxBKCksZTFlKSYmKHcrPWYqKHIuZC5iK2UuYVt0LmFdW3IuYV0qKHQuZC5iLXIuZC5iKS9uKSkpO3N3aXRjaChlLmQuZyl7Y2FzZSAxOnJldHVybiBuZXcgbHQoZy9vLHQuZC5iKTtjYXNlIDI6cmV0dXJuIG5ldyBsdCh0LmQuYSx3L28pO2RlZmF1bHQ6cmV0dXJuIG5ldyBsdChnL28sdy9vKX19ZnVuY3Rpb24gQ210KGUpe3ZhciB0LG4scixhLG8sZjtmb3Iobj0oIWUuYSYmKGUuYT1uZXcgWXMocWgsZSw1KSksZS5hKS5pKzIsZj1uZXcgQnUobiksdnQoZixuZXcgbHQoZS5qLGUuaykpLElzKG5ldyBibihudWxsLCghZS5hJiYoZS5hPW5ldyBZcyhxaCxlLDUpKSxuZXcga24oZS5hLDE2KSkpLG5ldyBOWGUoZikpLHZ0KGYsbmV3IGx0KGUuYixlLmMpKSx0PTE7dDxmLmMubGVuZ3RoLTE7KXI9KFNuKHQtMSxmLmMubGVuZ3RoKSxsKGYuY1t0LTFdLDgpKSxhPShTbih0LGYuYy5sZW5ndGgpLGwoZi5jW3RdLDgpKSxvPShTbih0KzEsZi5jLmxlbmd0aCksbChmLmNbdCsxXSw4KSksci5hPT1hLmEmJmEuYT09by5hfHxyLmI9PWEuYiYmYS5iPT1vLmI/dDIoZix0KTorK3Q7cmV0dXJuIGZ9ZnVuY3Rpb24gU210KGUsdCl7VEUoKTt2YXIgbixyLGEsbyxmO2lmKGY9bChRKGUuaSwoTnQoKSxNcykpLDEwMSksbz1lLmouZy10LmouZyxvIT0wfHwhKGY9PShSYSgpLFR2KXx8Zj09VGd8fGY9PU11KSlyZXR1cm4gMDtpZihmPT0oUmEoKSxUdikmJihuPWwoUShlLGsyKSwxNykscj1sKFEodCxrMiksMTcpLG4mJnImJihhPW4uYS1yLmEsYSE9MCkpKXJldHVybiBhO3N3aXRjaChlLmouZyl7Y2FzZSAxOnJldHVybiBZaShlLm4uYSx0Lm4uYSk7Y2FzZSAyOnJldHVybiBZaShlLm4uYix0Lm4uYik7Y2FzZSAzOnJldHVybiBZaSh0Lm4uYSxlLm4uYSk7Y2FzZSA0OnJldHVybiBZaSh0Lm4uYixlLm4uYik7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgbmMoekVlKSl9fWZ1bmN0aW9uIF9tdChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihuPXRydChhZXQoaWV0KHNldChuZXcgT3dlLHQpLG5ldyBNSCh0LmUpKSxaOHQpLGUuYSksdC5qLmMubGVuZ3RoPT0wfHxQbHQobChqdCh0LmosMCksNjApLmEsbiksdz1uZXcgQmllLGtpKGUuZSxuLHcpLGY9bmV3IEtzLGc9bmV3IEtzLG89bmV3IEcodC5rKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTgpLG5hKGYsYS5jKSxuYShnLGEuZCk7cj1mLmEuZ2MoKS1nLmEuZ2MoKSxyPDA/KFNOKHcsITAsKEpzKCksdWMpKSxTTih3LCExLHZjKSk6cj4wJiYoU04odywhMSwoSnMoKSx1YykpLFNOKHcsITAsdmMpKSxWdSh0LmcsbmV3IGpldChlLG4pKSxraShlLmcsdCxuKX1mdW5jdGlvbiBBbXQoKXtBbXQ9VTt2YXIgZTtmb3Iocl9lPWhlKGxlKFZyLDEpLGRpLDI4LDE1LFstMSwtMSwzMCwxOSwxNSwxMywxMSwxMSwxMCw5LDksOCw4LDgsOCw3LDcsNyw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw1XSksQTBlPVdlKFZyLGRpLDI4LDM3LDE1LDEpLGI2dD1oZShsZShWciwxKSxkaSwyOCwxNSxbLTEsLTEsNjMsNDAsMzIsMjgsMjUsMjMsMjEsMjAsMTksMTksMTgsMTgsMTcsMTcsMTYsMTYsMTYsMTUsMTUsMTUsMTUsMTQsMTQsMTQsMTQsMTQsMTQsMTMsMTMsMTMsMTMsMTMsMTMsMTMsMTNdKSxpX2U9V2Uobm0sYWhlLDI4LDM3LDE0LDEpLGU9MjtlPD0zNjtlKyspQTBlW2VdPXVhKGIuTWF0aC5wb3coZSxyX2VbZV0pKSxpX2VbZV09S04oRVAsQTBlW2VdKX1mdW5jdGlvbiBmQW4oZSl7dmFyIHQ7aWYoKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKS5pIT0xKXRocm93IHVlKG5ldyBZbihuNHQrKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKS5pKSk7cmV0dXJuIHQ9bmV3IGJsLFROKGwoT2UoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKSwwKSw4NCkpJiZLYSh0LGJ3dChlLFROKGwoT2UoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKSwwKSw4NCkpLCExKSksVE4obChPZSgoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMpLDApLDg0KSkmJkthKHQsYnd0KGUsVE4obChPZSgoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMpLDApLDg0KSksITApKSx0fWZ1bmN0aW9uIExtdChlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKHQuZD9hPWUuYS5jPT0oeGQoKSx3Myk/a2EodC5iKTpxcyh0LmIpOmE9ZS5hLmM9PSh4ZCgpLFQyKT9rYSh0LmIpOnFzKHQuYiksbz0hMSxyPW5ldyBocihkcihhLmEuS2MoKSxuZXcgaikpO2pyKHIpOylpZihuPWwoeHIociksMTgpLGY9UnQoZS5hLmZbZS5hLmdbdC5iLnBdLnBdKSwhKCFmJiYhRG8obikmJm4uYy5pLmM9PW4uZC5pLmMpJiYhKFJ0KGUuYS5uW2UuYS5nW3QuYi5wXS5wXSl8fFJ0KGUuYS5uW2UuYS5nW3QuYi5wXS5wXSkpJiYobz0hMCxXMChlLmIsZS5hLmdbZjduKG4sdC5iKS5wXSkpKXJldHVybiB0LmM9ITAsdC5hPW4sdDtyZXR1cm4gdC5jPW8sdC5hPW51bGwsdH1mdW5jdGlvbiB3a2UoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFO2lmKHI9bi5nYygpLHI9PTApcmV0dXJuITE7aWYoZS5QaigpKWlmKHc9ZS5RaigpLEE4ZShlLHQsbiksZj1yPT0xP2UuSWooMyxudWxsLG4uS2MoKS5QYigpLHQsdyk6ZS5Jaig1LG51bGwsbix0LHcpLGUuTWooKSl7Zm9yKGc9cjwxMDA/bnVsbDpuZXcgbmIociksbz10K3IsYT10O2E8bzsrK2EpRT1lLnhqKGEpLGc9ZS5OaihFLGcpLGc9ZztnPyhnLm5qKGYpLGcub2ooKSk6ZS5KaihmKX1lbHNlIGUuSmooZik7ZWxzZSBpZihBOGUoZSx0LG4pLGUuTWooKSl7Zm9yKGc9cjwxMDA/bnVsbDpuZXcgbmIociksbz10K3IsYT10O2E8bzsrK2EpZz1lLk5qKGUueGooYSksZyk7ZyYmZy5vaigpfXJldHVybiEwfWZ1bmN0aW9uIE1tdChlLHQsbil7dmFyIHIsYSxvLGYsZztyZXR1cm4gZS5QaigpPyhhPW51bGwsbz1lLlFqKCkscj1lLklqKDEsZz0oZj1lLkRqKHQsZS5aaSh0LG4pKSxmKSxuLHQsbyksZS5NaigpJiYhKGUuWWkoKSYmZz9QaShnLG4pOnFlKGcpPT09cWUobikpJiYoZyYmKGE9ZS5PaihnLGEpKSxhPWUuTmoobixhKSksYT8oYS5uaihyKSxhLm9qKCkpOmUuSmoociksZyk6KGc9KGY9ZS5Eaih0LGUuWmkodCxuKSksZiksZS5NaigpJiYhKGUuWWkoKSYmZz9QaShnLG4pOnFlKGcpPT09cWUobikpJiYoYT1udWxsLGcmJihhPWUuT2ooZyxudWxsKSksYT1lLk5qKG4sYSksYSYmYS5vaigpKSxnKX1mdW5jdGlvbiB5a2UoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYoZS5lPXQsZS5mPWwoUSh0LChiYigpLEVLKSksMjM0KSxqeG4odCksZS5kPWIuTWF0aC5tYXgodC5lLmMubGVuZ3RoKjE2K3QuYy5jLmxlbmd0aCwyNTYpLCFSdChCdChRKHQsKGIwKCksWl9lKSkpKSlmb3IoQz1lLmUuZS5jLmxlbmd0aCx3PW5ldyBHKHQuZSk7dy5hPHcuYy5jLmxlbmd0aDspZz1sKHJlKHcpLDE1MyksRT1nLmQsRS5hPVk0ZShlLmYpKkMsRS5iPVk0ZShlLmYpKkM7Zm9yKG49dC5iLG89bmV3IEcodC5jKTtvLmE8by5jLmMubGVuZ3RoOylpZihhPWwocmUobyksMjkwKSxyPWwoUShhLGlBZSksMTcpLmEscj4wKXtmb3IoZj0wO2Y8cjtmKyspdnQobixuZXcgVnN0KGEpKTtZcHQoYSl9fWZ1bmN0aW9uIERtdChlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWO2lmKEI9bmV3IHl5KGUuWmcoKSksZTEodCxfaSxCKSxuJiYhZS5YZygpLmEuZGMoKSlmb3IoQz1uZXcgJHAsZTEodCwibG9ncyIsQyksZz0wLFY9bmV3IHlvKGUuWGcoKS5iLktjKCkpO1YuYi5PYigpOyl6PWVpKFYuYi5QYigpKSxMPW5ldyB5eSh6KSxfeShDLGcpLHhvZShDLGcsTCksKytnO2lmKHImJihFPW5ldyB2ayhlLldnKCkpLGUxKHQsImV4ZWN1dGlvblRpbWUiLEUpKSwhZS5ZZygpLmEuZGMoKSlmb3IoZj1uZXcgJHAsZTEodCxXZmUsZiksZz0wLG89bmV3IHlvKGUuWWcoKS5iLktjKCkpO28uYi5PYigpOylhPWwoby5iLlBiKCksODcxKSx3PW5ldyBNOCxfeShmLGcpLHhvZShmLGcsdyksRG10KGEsdyxuLHIpLCsrZ31mdW5jdGlvbiB4a2UoKXt4a2U9VSx1c2UoKSxMQXQ9bmV3IGttLGhlKGxlKG85LDIpLGR0LDM4MSwwLFtoZShsZShvOSwxKSxpSyw2MDAsMCxbbmV3IEpJKEI1dCldKV0pLGhlKGxlKG85LDIpLGR0LDM4MSwwLFtoZShsZShvOSwxKSxpSyw2MDAsMCxbbmV3IEpJKEZTZSldKV0pLGhlKGxlKG85LDIpLGR0LDM4MSwwLFtoZShsZShvOSwxKSxpSyw2MDAsMCxbbmV3IEpJKEY1dCldKSxoZShsZShvOSwxKSxpSyw2MDAsMCxbbmV3IEpJKEZTZSldKV0pLG5ldyBvYigiLTEiKSxoZShsZShvOSwyKSxkdCwzODEsMCxbaGUobGUobzksMSksaUssNjAwLDAsW25ldyBKSSgiXFxjKyIpXSldKSxuZXcgb2IoIjAiKSxuZXcgb2IoIjAiKSxuZXcgb2IoIjEiKSxuZXcgb2IoIjAiKSxuZXcgb2IoSDV0KX1mdW5jdGlvbiBkQW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtmb3IodC5VZygiSHlwZXJub2RlcyBwcm9jZXNzaW5nIiwxKSxhPW5ldyBHKGUuYik7YS5hPGEuYy5jLmxlbmd0aDspZm9yKHI9bChyZShhKSwzMCksZz1uZXcgRyhyLmEpO2cuYTxnLmMuYy5sZW5ndGg7KWlmKGY9bChyZShnKSwxMCksUnQoQnQoUShmLChOdCgpLGJXKSkpKSYmZi5qLmMubGVuZ3RoPD0yKXtmb3IoTD0wLEM9MCxuPTAsbz0wLEU9bmV3IEcoZi5qKTtFLmE8RS5jLmMubGVuZ3RoOylzd2l0Y2godz1sKHJlKEUpLDEyKSx3LmouZyl7Y2FzZSAxOisrTDticmVhaztjYXNlIDI6KytDO2JyZWFrO2Nhc2UgMzorK247YnJlYWs7Y2FzZSA0Oisrb31MPT0wJiZuPT0wJiZtSW4oZSxmLG88PUMpfXQuVmcoKX1mdW5jdGlvbiBnQW4oZSx0LG4scixhKXt2YXIgbyxmLGcsdyxFLEMsTDtmb3IoZj1uZXcgRyh0KTtmLmE8Zi5jLmMubGVuZ3RoOyl7aWYobz1sKHJlKGYpLDE4KSx3PW8uYyxuLmEuX2IodykpRT0oU3coKSxIYik7ZWxzZSBpZihyLmEuX2IodykpRT0oU3coKSxLNik7ZWxzZSB0aHJvdyB1ZShuZXcgWW4oIlNvdXJjZSBwb3J0IG11c3QgYmUgaW4gb25lIG9mIHRoZSBwb3J0IHNldHMuIikpO2lmKEM9by5kLG4uYS5fYihDKSlMPShTdygpLEhiKTtlbHNlIGlmKHIuYS5fYihDKSlMPShTdygpLEs2KTtlbHNlIHRocm93IHVlKG5ldyBZbigiVGFyZ2V0IHBvcnQgbXVzdCBiZSBpbiBvbmUgb2YgdGhlIHBvcnQgc2V0cy4iKSk7Zz1uZXcgX3B0KG8sRSxMKSxraShlLmIsbyxnKSwkbihhLmMsZyl9fWZ1bmN0aW9uIGpVKGUpe3ZhciB0LG47cmV0dXJuIGUuYyYmZS5jLlZoKCkmJihuPWwoZS5jLDU0KSxlLmM9bCh5YihlLG4pLDE0MiksZS5jIT1uJiYoZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsOSwyLG4sZS5jKSksRGUoZS5DYiw0MTEpP2UuRGI+PjE2PT0tMTUmJmUuQ2IuWWgoKSYmcW9lKG5ldyBGb2UoZS5DYiw5LDEzLG4sZS5jLGYyKFhsKGwoZS5DYiw2MikpLGUpKSk6RGUoZS5DYiw5MCkmJmUuRGI+PjE2PT0tMjMmJmUuQ2IuWWgoKSYmKHQ9ZS5jLERlKHQsOTApfHwodD0oVG4oKSxLZikpLERlKG4sOTApfHwobj0oVG4oKSxLZikpLHFvZShuZXcgRm9lKGUuQ2IsOSwxMCxuLHQsZjIoZHUobChlLkNiLDI5KSksZSkpKSkpKSxlLmN9ZnVuY3Rpb24gcEFuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEw7Zm9yKG4uVWcoIkh5cGVyZWRnZSBtZXJnaW5nIiwxKSxqRW4oZSx0KSx3PW5ldyBVYSh0LmIsMCk7dy5iPHcuZC5nYygpOylpZihnPShtcih3LmI8dy5kLmdjKCkpLGwody5kLlhiKHcuYz13LmIrKyksMzApKSxDPWcuYSxDLmMubGVuZ3RoIT0wKWZvcihyPW51bGwsYT1udWxsLG89bnVsbCxmPW51bGwsRT0wO0U8Qy5jLmxlbmd0aDtFKyspcj0oU24oRSxDLmMubGVuZ3RoKSxsKEMuY1tFXSwxMCkpLGE9ci5rLGE9PShabigpLEFhKSYmZj09QWEmJihMPWxMbihyLG8pLEwuYSYmKGxTbihyLG8sTC5iLEwuYyksU24oRSxDLmMubGVuZ3RoKSxkM2UoQy5jLEUsMSksLS1FLHI9byxhPWYpKSxvPXIsZj1hO24uVmcoKX1mdW5jdGlvbiBJbXQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtpZih0PT1uKXJldHVybiEwO2lmKHQ9QTllKGUsdCksbj1BOWUoZSxuKSxyPWh1ZSh0KSxyKXtpZihDPWh1ZShuKSxDIT1yKXJldHVybiBDPyh3PXIubWsoKSxWPUMubWsoKSx3PT1WJiZ3IT1udWxsKTohMTtpZihmPSghdC5kJiYodC5kPW5ldyBZcyhXbyx0LDEpKSx0LmQpLG89Zi5pLEI9KCFuLmQmJihuLmQ9bmV3IFlzKFdvLG4sMSkpLG4uZCksbz09Qi5pKXtmb3IoRT0wO0U8bzsrK0UpaWYoYT1sKE9lKGYsRSksODkpLEw9bChPZShCLEUpLDg5KSwhSW10KGUsYSxMKSlyZXR1cm4hMX1yZXR1cm4hMH1lbHNlIHJldHVybiBnPXQuZSx6PW4uZSxnPT16fWZ1bmN0aW9uIE9tdChlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMO2lmKHVwKGUuZSx0KSl7Zm9yKEw9V3UoZS5lLkRoKCksdCksbz1sKGUuZywxMjQpLEM9bnVsbCx3PS0xLGc9LTEsYT0wLEU9MDtFPGUuaTsrK0UpZj1vW0VdLEwuYW0oZi5MaygpKSYmKGE9PW4mJih3PUUpLGE9PXImJihnPUUsQz1mLm1kKCkpLCsrYSk7aWYodz09LTEpdGhyb3cgdWUobmV3IHRjKFFmZStuK2F2K2EpKTtpZihnPT0tMSl0aHJvdyB1ZShuZXcgdGMoSmZlK3IrYXYrYSkpO3JldHVybiBBQShlLHcsZyksaGgoZS5lKSYmeGsoZSxkYihlLDcsdCxwdChyKSxDLG4sITApKSxDfWVsc2UgdGhyb3cgdWUobmV3IFluKCJUaGUgZmVhdHVyZSBtdXN0IGJlIG1hbnktdmFsdWVkIHRvIHN1cHBvcnQgbW92ZSIpKX1mdW5jdGlvbiBObXQoZSx0LG4scil7dmFyIGEsbyxmLGcsdztzd2l0Y2godz1uZXcgRW8odC5uKSx3LmErPXQuby5hLzIsdy5iKz10Lm8uYi8yLGc9emUoR2UoUSh0LChOdCgpLG00KSkpKSxvPWUuZixmPWUuZCxhPWUuYyxsKFEodCwoZnQoKSxXYykpLDY0KS5nKXtjYXNlIDE6dy5hKz1mLmIrYS5hLW4vMix3LmI9LXItZyx0Lm4uYj0tKGYuZCtnK2EuYik7YnJlYWs7Y2FzZSAyOncuYT1vLmErZi5iK2YuYytnLHcuYis9Zi5kK2EuYi1yLzIsdC5uLmE9by5hK2YuYytnLWEuYTticmVhaztjYXNlIDM6dy5hKz1mLmIrYS5hLW4vMix3LmI9by5iK2YuZCtmLmErZyx0Lm4uYj1vLmIrZi5hK2ctYS5iO2JyZWFrO2Nhc2UgNDp3LmE9LW4tZyx3LmIrPWYuZCthLmItci8yLHQubi5hPS0oZi5iK2crYS5hKX1yZXR1cm4gd31mdW5jdGlvbiBQbXQoZSl7dmFyIHQsbixyLGEsbyxmO3JldHVybiByPW5ldyBvN2UscGMocixlKSxxZShRKHIsKE50KCksUmgpKSk9PT1xZSgoSnMoKSxKMSkpJiZydChyLFJoLHpWKHIpKSxRKHIsKFFIKCksa00pKT09bnVsbCYmKGY9bChZZ3QoZSksMTY3KSxydChyLGtNLE1xKGYub2Yoa00pKSkpLHJ0KHIsKGZ0KCksemkpLGUpLHJ0KHIsTHUsKHQ9bChLMChGMWUpLDkpLG5ldyBaaCh0LGwoYzAodCx0Lmxlbmd0aCksOSksMCkpKSxhPWdEbigoZHMoZSkmJihhdygpLG5ldyBKdihkcyhlKSkpLGF3KCksbmV3IHJhZShkcyhlKT9uZXcgSnYoZHMoZSkpOm51bGwsZSkpLHZjKSxvPWwoUShyLFdNZSksMTA3KSxuPXIuZCxkb3QobixvKSxkb3QobixhKSxyfWZ1bmN0aW9uIGJBbihlLHQsbil7dmFyIHIsYTtyPXQuYy5pLGE9bi5kLmksci5rPT0oWm4oKSxBYSk/KHJ0KGUsKGZ0KCksbzEpLGwoUShyLG8xKSwxMikpLHJ0KGUsJGYsbChRKHIsJGYpLDEyKSkscnQoZSxmNCxCdChRKHIsZjQpKSkpOnIuaz09Y3U/KHJ0KGUsKGZ0KCksbzEpLGwoUShyLG8xKSwxMikpLHJ0KGUsJGYsbChRKHIsJGYpLDEyKSkscnQoZSxmNCwoSG4oKSwhMCkpKTphLms9PWN1PyhydChlLChmdCgpLG8xKSxsKFEoYSxvMSksMTIpKSxydChlLCRmLGwoUShhLCRmKSwxMikpLHJ0KGUsZjQsKEhuKCksITApKSk6KHJ0KGUsKGZ0KCksbzEpLHQuYykscnQoZSwkZixuLmQpKX1mdW5jdGlvbiBtQW4oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKGUubz1uZXcgejUscj1uZXcgb3MsZj1uZXcgRyhlLmUuYSk7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDEyNSksWjUobykuYy5sZW5ndGg9PTEmJkNzKHIsbyxyLmMuYixyLmMpO2Zvcig7ci5iIT0wOylvPWwoci5iPT0wP251bGw6KG1yKHIuYiE9MCksYWYocixyLmEuYSkpLDEyNSksWjUobykuYy5sZW5ndGghPTAmJih0PWwoanQoWjUobyksMCksMjE4KSxuPW8uZy5hLmMubGVuZ3RoPjAsZz1IVih0LG8pLEl5ZShuP2cuYjpnLmcsdCksWjUoZykuYy5sZW5ndGg9PTEmJkNzKHIsZyxyLmMuYixyLmMpLGE9bmV3IGNhKG8sdCksZ2IoZS5vLGEpLGFsKGUuZS5hLG8pKX1mdW5jdGlvbiBCbXQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdztyZXR1cm4gcj1iLk1hdGguYWJzKG1IKGUuYikuYS1tSCh0LmIpLmEpLGc9Yi5NYXRoLmFicyhtSChlLmIpLmItbUgodC5iKS5iKSxhPTAsdz0wLG49MSxmPTEscj5lLmIuYi8yK3QuYi5iLzImJihhPWIuTWF0aC5taW4oYi5NYXRoLmFicyhlLmIuYy0odC5iLmMrdC5iLmIpKSxiLk1hdGguYWJzKGUuYi5jK2UuYi5iLXQuYi5jKSksbj0xLWEvciksZz5lLmIuYS8yK3QuYi5hLzImJih3PWIuTWF0aC5taW4oYi5NYXRoLmFicyhlLmIuZC0odC5iLmQrdC5iLmEpKSxiLk1hdGguYWJzKGUuYi5kK2UuYi5hLXQuYi5kKSksZj0xLXcvZyksbz1iLk1hdGgubWluKG4sZiksKDEtbykqYi5NYXRoLnNxcnQocipyK2cqZyl9ZnVuY3Rpb24gdkFuKGUpe3ZhciB0LG4scixhO2ZvcihBbGUoZSxlLmUsZS5mLChTdygpLEhiKSwhMCxlLmMsZS5pKSxBbGUoZSxlLmUsZS5mLEhiLCExLGUuYyxlLmkpLEFsZShlLGUuZSxlLmYsSzYsITAsZS5jLGUuaSksQWxlKGUsZS5lLGUuZixLNiwhMSxlLmMsZS5pKSxnQW4oZSxlLmMsZS5lLGUuZixlLmkpLHI9bmV3IFVhKGUuaSwwKTtyLmI8ci5kLmdjKCk7KWZvcih0PShtcihyLmI8ci5kLmdjKCkpLGwoci5kLlhiKHIuYz1yLmIrKyksMTMxKSksYT1uZXcgVWEoZS5pLHIuYik7YS5iPGEuZC5nYygpOyluPShtcihhLmI8YS5kLmdjKCkpLGwoYS5kLlhiKGEuYz1hLmIrKyksMTMxKSksaU1uKHQsbik7X0luKGUuaSxsKFEoZS5kLChmdCgpLFh4KSksMjM0KSksek1uKGUuaSl9ZnVuY3Rpb24gdWxlKGUsdCl7dmFyIG4scjtpZih0IT1udWxsKXtpZihyPXp3KGUpLHIpaWYoci5pJjEpe2lmKHI9PWloKXJldHVybiBoeSh0KTtpZihyPT1WcilyZXR1cm4gRGUodCwxNyk7aWYocj09QjQpcmV0dXJuIERlKHQsMTYxKTtpZihyPT1BbClyZXR1cm4gRGUodCwyMjIpO2lmKHI9PWtmKXJldHVybiBEZSh0LDE4MCk7aWYocj09TmEpcmV0dXJuIGZ5KHQpO2lmKHI9PWg3KXJldHVybiBEZSh0LDE5MSk7aWYocj09bm0pcmV0dXJuIERlKHQsMTY4KX1lbHNlIHJldHVybiBpcSgpLG49bChjcihrWSxyKSw1NyksIW58fG4uZmsodCk7ZWxzZSBpZihEZSh0LDU4KSlyZXR1cm4gZS5kbChsKHQsNTgpKX1yZXR1cm4hMX1mdW5jdGlvbiBra2UoKXtra2U9VTt2YXIgZSx0LG4scixhLG8sZixnLHc7Zm9yKG5kPVdlKEFsLEM2LDI4LDI1NSwxNSwxKSxOMj1XZShrZixBZCwyOCw2NCwxNSwxKSx0PTA7dDwyNTU7dCsrKW5kW3RdPS0xO2ZvcihuPTkwO24+PTY1O24tLSluZFtuXT1uLTY1PDwyND4+MjQ7Zm9yKHI9MTIyO3I+PTk3O3ItLSluZFtyXT1yLTk3KzI2PDwyND4+MjQ7Zm9yKGE9NTc7YT49NDg7YS0tKW5kW2FdPWEtNDgrNTI8PDI0Pj4yNDtmb3IobmRbNDNdPTYyLG5kWzQ3XT02MyxvPTA7bzw9MjU7bysrKU4yW29dPTY1K28mWnM7Zm9yKGY9MjYsdz0wO2Y8PTUxOysrZix3KyspTjJbZl09OTcrdyZacztmb3IoZT01MixnPTA7ZTw9NjE7KytlLGcrKylOMltlXT00OCtnJlpzO04yWzYyXT00MyxOMls2M109NDd9ZnVuY3Rpb24gRm10KGUsdCl7dmFyIG4scixhLG8sZixnO3JldHVybiBhPXk3ZShlKSxnPXk3ZSh0KSxhPT1nP2UuZT09dC5lJiZlLmE8NTQmJnQuYTw1ND9lLmY8dC5mPy0xOmUuZj50LmY/MTowOihyPWUuZS10LmUsbj0oZS5kPjA/ZS5kOmIuTWF0aC5mbG9vcigoZS5hLTEpKlZ3dCkrMSktKHQuZD4wP3QuZDpiLk1hdGguZmxvb3IoKHQuYS0xKSpWd3QpKzEpLG4+cisxP2E6bjxyLTE/LWE6KG89KCFlLmMmJihlLmM9WE8oWmMoZS5mKSkpLGUuYyksZj0oIXQuYyYmKHQuYz1YTyhaYyh0LmYpKSksdC5jKSxyPDA/bz1LNShvLFdtdCgtcikpOnI+MCYmKGY9SzUoZixXbXQocikpKSxLMXQobyxmKSkpOmE8Zz8tMToxfWZ1bmN0aW9uIHdBbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztmb3Iobi5VZyhUM3QsMSksZS52Zih0KSxvPTA7ZS54ZihvKSYmIW4uJGcoKTspe2ZvcihlLndmKCksQz1yZyhMaChoZShsZShGaCwxKSxSbiwyMCwwLFt0LmUsdC5kLHQuYl0pKSk7anIoQyk7KWZvcih3PWwoeHIoQyksMzA5KSxnPXJnKExoKGhlKGxlKEZoLDEpLFJuLDIwLDAsW3QuZSx0LmQsdC5iXSkpKTtqcihnKTspZj1sKHhyKGcpLDMwOSksZiE9dyYmKGE9ZS51ZihmLHcpLGEmJk9pKHcuYyxhKSk7Zm9yKEU9cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbdC5lLHQuZCx0LmJdKSkpO2pyKEUpOyl3PWwoeHIoRSksMzA5KSxyPXcuYyxvcHQociwtZS5kLC1lLmQsZS5kLGUuZCksT2kody5kLHIpLHIuYT0wLHIuYj0wOysrb31uLlZnKCl9ZnVuY3Rpb24geUFuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6O2lmKGUuZGMoKSlyZXR1cm4gbmV3IHFhO2ZvcihFPTAsTD0wLGE9ZS5LYygpO2EuT2IoKTspcj1sKGEuUGIoKSwzNiksbz1yLmYsRT1iLk1hdGgubWF4KEUsby5hKSxMKz1vLmEqby5iO2ZvcihFPWIuTWF0aC5tYXgoRSxiLk1hdGguc3FydChMKSp6ZShHZShRKGwoZS5LYygpLlBiKCksMzYpLChOdCgpLGNXKSkpKSksQj0wLHo9MCx3PTAsbj10LGc9ZS5LYygpO2cuT2IoKTspZj1sKGcuUGIoKSwzNiksQz1mLmYsQitDLmE+RSYmKEI9MCx6Kz13K3Qsdz0wKSxLRShmLEIseiksbj1iLk1hdGgubWF4KG4sQitDLmEpLHc9Yi5NYXRoLm1heCh3LEMuYiksQis9Qy5hK3Q7cmV0dXJuIG5ldyBsdChuK3Qseit3K3QpfWZ1bmN0aW9uIEVrZShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2lmKCFNMShlKSl0aHJvdyB1ZShuZXcgbmModDR0KSk7aWYocj1NMShlKSxvPXIuZyxhPXIuZixvPD0wJiZhPD0wKXJldHVybiBDdCgpLFBjO3N3aXRjaChnPWUuaSx3PWUuaix0Lmcpe2Nhc2UgMjpjYXNlIDE6aWYoZzwwKXJldHVybiBDdCgpLGVyO2lmKGcrZS5nPm8pcmV0dXJuIEN0KCksYXI7YnJlYWs7Y2FzZSA0OmNhc2UgMzppZih3PDApcmV0dXJuIEN0KCksUW47aWYodytlLmY+YSlyZXR1cm4gQ3QoKSxEcn1yZXR1cm4gZj0oZytlLmcvMikvbyxuPSh3K2UuZi8yKS9hLGYrbjw9MSYmZi1uPD0wPyhDdCgpLGVyKTpmK24+PTEmJmYtbj49MD8oQ3QoKSxhcik6bjwuNT8oQ3QoKSxRbik6KEN0KCksRHIpfWZ1bmN0aW9uIHhBbihlLHQsbixyLGEpe3ZhciBvLGY7aWYobz1ibyh2YSh0WzBdLFZvKSx2YShyWzBdLFZvKSksZVswXT1ZcihvKSxvPWJ3KG8sMzIpLG4+PWEpe2ZvcihmPTE7ZjxhO2YrKylvPWJvKG8sYm8odmEodFtmXSxWbyksdmEocltmXSxWbykpKSxlW2ZdPVlyKG8pLG89YncobywzMik7Zm9yKDtmPG47ZisrKW89Ym8obyx2YSh0W2ZdLFZvKSksZVtmXT1ZcihvKSxvPWJ3KG8sMzIpfWVsc2V7Zm9yKGY9MTtmPG47ZisrKW89Ym8obyxibyh2YSh0W2ZdLFZvKSx2YShyW2ZdLFZvKSkpLGVbZl09WXIobyksbz1idyhvLDMyKTtmb3IoO2Y8YTtmKyspbz1ibyhvLHZhKHJbZl0sVm8pKSxlW2ZdPVlyKG8pLG89YncobywzMil9aXUobywwKSE9MCYmKGVbZl09WXIobykpfWZ1bmN0aW9uIFV5KGUpe0RpKCk7dmFyIHQsbixyLGEsbyxmO2lmKGUuZSE9NCYmZS5lIT01KXRocm93IHVlKG5ldyBZbigiVG9rZW4jY29tcGxlbWVudFJhbmdlcygpOiBtdXN0IGJlIFJBTkdFOiAiK2UuZSkpO2ZvcihvPWUsYzYobyksZUwobykscj1vLmIubGVuZ3RoKzIsby5iWzBdPT0wJiYoci09Miksbj1vLmJbby5iLmxlbmd0aC0xXSxuPT1UVCYmKHItPTIpLGE9bmV3IF9oKDQpLGEuYj1XZShWcixkaSwyOCxyLDE1LDEpLGY9MCxvLmJbMF0+MCYmKGEuYltmKytdPTAsYS5iW2YrK109by5iWzBdLTEpLHQ9MTt0PG8uYi5sZW5ndGgtMjt0Kz0yKWEuYltmKytdPW8uYlt0XSsxLGEuYltmKytdPW8uYlt0KzFdLTE7cmV0dXJuIG4hPVRUJiYoYS5iW2YrK109bisxLGEuYltmXT1UVCksYS5hPSEwLGF9ZnVuY3Rpb24ga0FuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2Zvcih0LlVnKCJMYXllciBjb25zdHJhaW50IGVkZ2UgcmV2ZXJzYWwiLDEpLGY9bmV3IEcoZS5iKTtmLmE8Zi5jLmMubGVuZ3RoOyl7Zm9yKG89bChyZShmKSwzMCksQz0tMSxuPW5ldyBidCxFPUpPKG8uYSksYT0wO2E8RS5sZW5ndGg7YSsrKXI9bChRKEVbYV0sKGZ0KCksaHYpKSwzMTEpLEM9PS0xP3IhPShlcCgpLEY2KSYmKEM9YSk6cj09KGVwKCksRjYpJiYoVmEoRVthXSxudWxsKSxGeShFW2FdLEMrKyxvKSkscj09KGVwKCksVXgpJiYkbihuLmMsRVthXSk7Zm9yKHc9bmV3IEcobik7dy5hPHcuYy5jLmxlbmd0aDspZz1sKHJlKHcpLDEwKSxWYShnLG51bGwpLFZhKGcsbyl9dC5WZygpfWZ1bmN0aW9uIGxsZShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztpZihyPW4uZ2MoKSxyPT0wKXJldHVybiExO2lmKGUuUGooKSlpZihFPWUuUWooKSxEdWUoZSx0LG4pLGY9cj09MT9lLklqKDMsbnVsbCxuLktjKCkuUGIoKSx0LEUpOmUuSWooNSxudWxsLG4sdCxFKSxlLk1qKCkpe2ZvcihnPXI8MTAwP251bGw6bmV3IG5iKHIpLG89dCtyLGE9dDthPG87KythKUM9ZS5nW2FdLGc9ZS5OaihDLGcpLGc9ZS5VaihDLGcpO2c/KGcubmooZiksZy5vaigpKTplLkpqKGYpfWVsc2UgZS5KaihmKTtlbHNlIGlmKER1ZShlLHQsbiksZS5NaigpKXtmb3IoZz1yPDEwMD9udWxsOm5ldyBuYihyKSxvPXQrcixhPXQ7YTxvOysrYSl3PWUuZ1thXSxnPWUuTmoodyxnKTtnJiZnLm9qKCl9cmV0dXJuITB9ZnVuY3Rpb24gRUFuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2Zvcih0LlVnKCJIaWVyYXJjaGljYWwgcG9ydCBkdW1teSBzaXplIHByb2Nlc3NpbmciLDEpLHc9bmV3IGJ0LEM9bmV3IGJ0LHI9emUoR2UoUShlLChOdCgpLHE2KSkpKSxuPXIqMixvPW5ldyBHKGUuYik7by5hPG8uYy5jLmxlbmd0aDspe2ZvcihhPWwocmUobyksMzApLHcuYy5sZW5ndGg9MCxDLmMubGVuZ3RoPTAsZz1uZXcgRyhhLmEpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxMCksZi5rPT0oWm4oKSxVcykmJihFPWwoUShmLChmdCgpLFdjKSksNjQpLEU9PShDdCgpLFFuKT8kbih3LmMsZik6RT09RHImJiRuKEMuYyxmKSk7YjJ0KHcsITAsbiksYjJ0KEMsITEsbil9dC5WZygpfWZ1bmN0aW9uIFRrZShlLHQsbixyKXt2YXIgYSxvLGYsZyx3O2ZvcihmPW5ldyBHKGUuayk7Zi5hPGYuYy5jLmxlbmd0aDspYT1sKHJlKGYpLDEzMiksKCFyfHxhLmM9PShKMCgpLHFiKSkmJih3PWEuYix3Lmc8MCYmYS5kPjAmJihIKHcsdy5kLWEuZCksYS5jPT0oSjAoKSxxYikmJk4odyx3LmEtYS5kKSx3LmQ8PTAmJncuaT4wJiZDcyh0LHcsdC5jLmIsdC5jKSkpO2ZvcihvPW5ldyBHKGUuZik7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDEzMiksKCFyfHxhLmM9PShKMCgpLHFiKSkmJihnPWEuYSxnLmc8MCYmYS5kPjAmJihxKGcsZy5pLWEuZCksYS5jPT0oSjAoKSxxYikmJiQoZyxnLmItYS5kKSxnLmk8PTAmJmcuZD4wJiZDcyhuLGcsbi5jLmIsbi5jKSkpfWZ1bmN0aW9uIFRBbihlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMLEIsejtmb3IoQ24oKSxWcyhlLG5ldyB0ayksZj1QTyhlKSx6PW5ldyBidCxCPW5ldyBidCxnPW51bGwsdz0wO2YuYiE9MDspbz1sKGYuYj09MD9udWxsOihtcihmLmIhPTApLGFmKGYsZi5hLmEpKSwxNjMpLCFnfHx3bChnKSpnaChnKS8yPHdsKG8pKmdoKG8pPyhnPW8sJG4oei5jLG8pKToodys9d2wobykqZ2gobyksJG4oQi5jLG8pLEIuYy5sZW5ndGg+MSYmKHc+d2woZykqZ2goZykvMnx8Zi5iPT0wKSYmKEw9bmV3IGhWKEIpLEM9d2woZykvZ2goZyksRT1MbGUoTCx0LG5ldyBBOCxuLHIsYSxDKSxPaShZMChMLmUpLEUpLGc9TCwkbih6LmMsTCksdz0wLEIuYy5sZW5ndGg9MCkpO3JldHVybiByYSh6LEIpLHp9ZnVuY3Rpb24gcHUoZSx0LG4scixhKXtWZygpO3ZhciBvLGYsZyx3LEUsQyxMO2lmKGQ1ZShlLCJzcmMiKSxkNWUobiwiZGVzdCIpLEw9YmgoZSksdz1iaChuKSxJNGUoKEwuaSY0KSE9MCwic3JjVHlwZSBpcyBub3QgYW4gYXJyYXkiKSxJNGUoKHcuaSY0KSE9MCwiZGVzdFR5cGUgaXMgbm90IGFuIGFycmF5IiksQz1MLmMsZj13LmMsSTRlKEMuaSYxP0M9PWY6KGYuaSYxKT09MCwiQXJyYXkgdHlwZXMgZG9uJ3QgbWF0Y2giKSxseW4oZSx0LG4scixhKSwhKEMuaSYxKSYmTCE9dylpZihFPWptKGUpLG89am0obikscWUoZSk9PT1xZShuKSYmdDxyKWZvcih0Kz1hLGc9cithO2ctLSA+cjspVHMobyxnLEVbLS10XSk7ZWxzZSBmb3IoZz1yK2E7cjxnOylUcyhvLHIrKyxFW3QrK10pO2Vsc2UgazllKGUsdCxuLHIsYSwhMCl9ZnVuY3Rpb24gUm10KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO3N3aXRjaCh0LlVnKCJCb3ggbGF5b3V0IiwyKSxhPVhJKEdlKGF0KGUsKHdVKCksU1N0KSkpKSxvPWwoYXQoZSxDU3QpLDEwNyksbj1SdChCdChhdChlLFlPZSkpKSxyPVJ0KEJ0KGF0KGUsWE9lKSkpLGwoYXQoZSxfZ2UpLDMyMCkuZyl7Y2FzZSAwOmY9KEM9bmV3IE9sKCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSksQ24oKSxWcyhDLG5ldyBEWGUocikpLEMpLGc9YTllKGUpLHc9R2UoYXQoZSxXT2UpKSwodz09bnVsbHx8KG5yKHcpLHc8PTApKSYmKHc9MS4zKSxFPW5JbihmLGEsbyxnLmEsZy5iLG4sKG5yKHcpLHcpKSxHdyhlLEUuYSxFLmIsITEsITApO2JyZWFrO2RlZmF1bHQ6V0xuKGUsYSxvLG4pfXQuVmcoKX1mdW5jdGlvbiBDQW4oZSx0LG4scixhKXt2YXIgbyxmLGcsdyxFLEMsTCxCLHosVjtmb3IoQj1YOG4oZSxuKSx3PTA7dzx0O3crKyl7Zm9yKGJ5KGEsbiksej1uZXcgYnQsVj0obXIoci5iPHIuZC5nYygpKSxsKHIuZC5YYihyLmM9ci5iKyspLDQxOCkpLEM9Qit3O0M8ZS5iO0MrKylnPVYsVj0obXIoci5iPHIuZC5nYygpKSxsKHIuZC5YYihyLmM9ci5iKyspLDQxOCkpLHZ0KHosbmV3IGRidChnLFYsbikpO2ZvcihMPUIrdztMPGUuYjtMKyspbXIoci5iPjApLHIuYS5YYihyLmM9LS1yLmIpLEw+Qit3JiZwaChyKTtmb3IoZj1uZXcgRyh6KTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksNDE4KSxieShyLG8pO2lmKHc8dC0xKWZvcihFPUIrdztFPGUuYjtFKyspbXIoci5iPjApLHIuYS5YYihyLmM9LS1yLmIpfX1mdW5jdGlvbiBTQW4oKXtEaSgpO3ZhciBlLHQsbixyLGEsbztpZih1cGUpcmV0dXJuIHVwZTtmb3IoZT1uZXcgX2goNCksS3koZSxfYihwMGUsITApKSxuTChlLF9iKCJNIiwhMCkpLG5MKGUsX2IoIkMiLCEwKSksbz1uZXcgX2goNCkscj0wO3I8MTE7cisrKUV1KG8scixyKTtyZXR1cm4gdD1uZXcgX2goNCksS3kodCxfYigiTSIsITApKSxFdSh0LDQ0NDgsNDYwNyksRXUodCw2NTQzOCw2NTQzOSksYT1uZXcgQl8oMiksUW0oYSxlKSxRbShhLFdNKSxuPW5ldyBCXygyKSxuLkptKG9IKG8sX2IoIkwiLCEwKSkpLG4uSm0odCksbj1uZXcgVHkoMyxuKSxuPW5ldyBmNWUoYSxuKSx1cGU9bix1cGV9ZnVuY3Rpb24gR3koZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2ZvcihuPW5ldyBSZWdFeHAodCwiZyIpLHc9V2UoenQsZHQsMiwwLDYsMSkscj0wLEU9ZSxvPW51bGw7OylpZihnPW4uZXhlYyhFKSxnPT1udWxsfHxFPT0iIil7d1tyXT1FO2JyZWFrfWVsc2UgZj1nLmluZGV4LHdbcl09KEdhKDAsZixFLmxlbmd0aCksRS5zdWJzdHIoMCxmKSksRT10ZihFLGYrZ1swXS5sZW5ndGgsRS5sZW5ndGgpLG4ubGFzdEluZGV4PTAsbz09RSYmKHdbcl09KEdhKDAsMSxFLmxlbmd0aCksRS5zdWJzdHIoMCwxKSksRT0oWG4oMSxFLmxlbmd0aCsxKSxFLnN1YnN0cigxKSkpLG89RSwrK3I7aWYoZS5sZW5ndGg+MCl7Zm9yKGE9dy5sZW5ndGg7YT4wJiZ3W2EtMV09PSIiOyktLWE7YTx3Lmxlbmd0aCYmKHcubGVuZ3RoPWEpfXJldHVybiB3fWZ1bmN0aW9uIEhjKCl7SGM9VSxwSWU9bmV3IGx3KDIwKSxnSWU9bmV3IEhhKChwaSgpLF8yKSxwSWUpLHpkZT1uZXcgSGEoRXYsMjApLG1JZT1uZXcgSGEoTE5lLDMpLHhUdD1uZXcgSGEoWjYsbFQpLFJXPW5ldyBIYShYQixwdCgxKSksTVR0PW5ldyBIYShxZ2UsKEhuKCksITApKSxsSWU9R0IsaEllPShKcygpLEoxKSx5Mz1uZXcgSGEoeHYsaEllKSxrVHQ9V0IsRVR0PU5nZSxDVHQ9a3YsU1R0PUM0LF9UdD1pNyxBVHQ9VWIsVFR0PXI3LGRJZT1ZQixMVHQ9UzQsd0llPShfOWUoKSx5VHQpLGJJZT12VHQsT1R0PUFNLE5UdD1hWSxJVHQ9UUIsRFR0PXNZLHZJZT0oZHgoKSxMNCksbmV3IEhhKGk5LHZJZSksVzY9bVR0LCRkZT1iVHQsJGQ9d1R0LHVJZT1nVHQsZkllPXBUdH1mdW5jdGlvbiBfQW4oZSl7dmFyIHQsbjtpZih0PWVpKGF0KGUsKHBpKCksZUMpKSksIUZmdCh0LGUpJiYhUDEoZSxhNykmJigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkuaSE9MHx8UnQoQnQoYXQoZSxLQikpKSkpaWYodD09bnVsbHx8JHkodCkubGVuZ3RoPT0wKXtpZighRmZ0KHNyLGUpKXRocm93IG49aGkoaGkobmV3IFRoKCJVbmFibGUgdG8gbG9hZCBkZWZhdWx0IGxheW91dCBhbGdvcml0aG0gIiksc3IpLCIgZm9yIHVuY29uZmlndXJlZCBub2RlICIpLEdVKGUsbiksdWUobmV3IFZwKG4uYSkpfWVsc2UgdGhyb3cgbj1oaShoaShuZXcgVGgoIkxheW91dCBhbGdvcml0aG0gJyIpLHQpLCInIG5vdCBmb3VuZCBmb3IgIiksR1UoZSxuKSx1ZShuZXcgVnAobi5hKSl9ZnVuY3Rpb24gaGxlKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6O2lmKG49ZS5pLHQ9ZS5uLGUuYj09MClmb3Ioej1uLmMrdC5iLEI9bi5iLXQuYi10LmMsZj1lLmEsdz0wLEM9Zi5sZW5ndGg7dzxDOysrdylhPWZbd10saEgoYSx6LEIpO2Vsc2Ugcj1BZHQoZSwhMSksaEgoZS5hWzBdLG4uYyt0LmIsclswXSksaEgoZS5hWzJdLG4uYytuLmItdC5jLXJbMl0sclsyXSksTD1uLmItdC5iLXQuYyxyWzBdPjAmJihMLT1yWzBdK2UuYyxyWzBdKz1lLmMpLHJbMl0+MCYmKEwtPXJbMl0rZS5jKSxyWzFdPWIuTWF0aC5tYXgoclsxXSxMKSxoSChlLmFbMV0sbi5jK3QuYityWzBdLShyWzFdLUwpLzIsclsxXSk7Zm9yKG89ZS5hLGc9MCxFPW8ubGVuZ3RoO2c8RTsrK2cpYT1vW2ddLERlKGEsMzM2KSYmbChhLDMzNikubGYoKX1mdW5jdGlvbiBBQW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTDtmb3IoTD1uZXcgZnRlLEwuZD0wLGY9bmV3IEcoZS5iKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMzApLEwuZCs9by5hLmMubGVuZ3RoO2ZvcihyPTAsYT0wLEwuYT1XZShWcixkaSwyOCxlLmIuYy5sZW5ndGgsMTUsMSksRT0wLEM9MCxMLmU9V2UoVnIsZGksMjgsTC5kLDE1LDEpLG49bmV3IEcoZS5iKTtuLmE8bi5jLmMubGVuZ3RoOylmb3IodD1sKHJlKG4pLDMwKSx0LnA9cisrLEwuYVt0LnBdPWErKyxDPTAsdz1uZXcgRyh0LmEpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxMCksZy5wPUUrKyxMLmVbZy5wXT1DKys7cmV0dXJuIEwuYz1uZXcgaVhlKEwpLEwuYj1lZyhMLmQpLEtfbihMLGUpLEwuZj1lZyhMLmQpLFdfbihMLGUpLEx9ZnVuY3Rpb24gam10KGUsdCl7dmFyIG4scixhLG87Zm9yKG89bChqdChlLm4sZS5uLmMubGVuZ3RoLTEpLDIwOSkuZCxlLnA9Yi5NYXRoLm1pbihlLnAsdC5nKSxlLnI9Yi5NYXRoLm1heChlLnIsbyksZS5nPWIuTWF0aC5tYXgoZS5nLHQuZysoZS5iLmMubGVuZ3RoPT0xPzA6ZS5pKSksZS5vPWIuTWF0aC5taW4oZS5vLHQuZiksZS5lKz10LmYrKGUuYi5jLmxlbmd0aD09MT8wOmUuaSksZS5mPWIuTWF0aC5tYXgoZS5mLHQuZiksYT1lLm4uYy5sZW5ndGg+MD8oZS5uLmMubGVuZ3RoLTEpKmUuaTowLHI9bmV3IEcoZS5uKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMjA5KSxhKz1uLmE7ZS5kPWEsZS5hPWUuZS9lLmIuYy5sZW5ndGgtZS5pKigoZS5iLmMubGVuZ3RoLTEpL2UuYi5jLmxlbmd0aCksaXhlKGUuail9ZnVuY3Rpb24gJG10KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7aWYoQz1CdChRKHQsKGIwKCksdDh0KSkpLEM9PW51bGx8fChucihDKSxDKSl7Zm9yKEw9V2UoaWgscGcsMjgsdC5lLmMubGVuZ3RoLDE2LDEpLGY9cEVuKHQpLGE9bmV3IG9zLEU9bmV3IEcodC5lKTtFLmE8RS5jLmMubGVuZ3RoOylnPWwocmUoRSksMTUzKSxuPUY5ZShlLGcsbnVsbCxudWxsLEwsZiksbiYmKHBjKG4sdCksQ3MoYSxuLGEuYy5iLGEuYykpO2lmKGEuYj4xKWZvcihyPVJyKGEsMCk7ci5iIT1yLmQuYzspZm9yKG49bChCcihyKSwyMzUpLG89MCx3PW5ldyBHKG4uZSk7dy5hPHcuYy5jLmxlbmd0aDspZz1sKHJlKHcpLDE1MyksZy5hPW8rKztyZXR1cm4gYX1yZXR1cm4gTzEoaGUobGUoeU9uLDEpLGszdCwyMzUsMCxbdF0pKX1mdW5jdGlvbiBTZChlKXt2YXIgdCxuLHIsYSxvLGYsZztpZighZS5nKXtpZihnPW5ldyBTSSx0PXFNLGY9dC5hLnpjKGUsdCksZj09bnVsbCl7Zm9yKHI9bmV3IG9yKGRjKGUpKTtyLmUhPXIuaS5nYygpOyluPWwoZ3IociksMjkpLEFzKGcsU2QobikpO3QuYS5CYyhlKSE9bnVsbCx0LmEuZ2MoKT09MH1mb3IoYT1nLmksbz0oIWUucyYmKGUucz1uZXcgbnQoZGwsZSwyMSwxNykpLG5ldyBvcihlLnMpKTtvLmUhPW8uaS5nYygpOysrYSlzdChsKGdyKG8pLDQ2MiksYSk7QXMoZywoIWUucyYmKGUucz1uZXcgbnQoZGwsZSwyMSwxNykpLGUucykpLEl5KGcpLGUuZz1uZXcgZzB0KGUsZyksZS5pPWwoZy5nLDI1NCksZS5pPT1udWxsJiYoZS5pPW5wZSksZS5wPW51bGwsWWwoZSkuYiY9LTV9cmV0dXJuIGUuZ31mdW5jdGlvbiBMQW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYobj10LnFpKGUuYSksbiYmKHc9ZWkobjEoKCFuLmImJihuLmI9bmV3IGRoKChUbigpLE5vKSxZYyxuKSksbi5iKSwibWVtYmVyVHlwZXMiKSksdyE9bnVsbCkpe2ZvcihFPW5ldyBidCxvPUd5KHcsIlxcdyIpLGY9MCxnPW8ubGVuZ3RoO2Y8ZzsrK2YpYT1vW2ZdLHI9YS5sYXN0SW5kZXhPZigiIyIpLEM9cj09LTE/enllKGUsdC5qaygpLGEpOnI9PTA/b04oZSxudWxsLChYbigxLGEubGVuZ3RoKzEpLGEuc3Vic3RyKDEpKSk6b04oZSwoR2EoMCxyLGEubGVuZ3RoKSxhLnN1YnN0cigwLHIpKSwoWG4ocisxLGEubGVuZ3RoKzEpLGEuc3Vic3RyKHIrMSkpKSxEZShDLDE1NikmJnZ0KEUsbChDLDE1NikpO3JldHVybiBFfXJldHVybiBDbigpLENuKCksX299ZnVuY3Rpb24gZmxlKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6LFY7aWYocj1lLmksbj1lLm4sZS5iPT0wKXQ9X2R0KGUsITEpLGZIKGUuYVswXSxyLmQrbi5kLHRbMF0pLGZIKGUuYVsyXSxyLmQrci5hLW4uYS10WzJdLHRbMl0pLEI9ci5hLW4uZC1uLmEsTD1CLHRbMF0+MCYmKHRbMF0rPWUuYyxMLT10WzBdKSx0WzJdPjAmJihMLT10WzJdK2UuYyksdFsxXT1iLk1hdGgubWF4KHRbMV0sTCksZkgoZS5hWzFdLHIuZCtuLmQrdFswXS0odFsxXS1MKS8yLHRbMV0pO2Vsc2UgZm9yKFY9ci5kK24uZCx6PXIuYS1uLmQtbi5hLGY9ZS5hLHc9MCxDPWYubGVuZ3RoO3c8QzsrK3cpYT1mW3ddLGZIKGEsVix6KTtmb3Iobz1lLmEsZz0wLEU9by5sZW5ndGg7ZzxFOysrZylhPW9bZ10sRGUoYSwzMzYpJiZsKGEsMzM2KS5tZigpfWZ1bmN0aW9uIE1BbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQztmb3IoQz1XZShWcixkaSwyOCxlLmIuYy5sZW5ndGgrMSwxNSwxKSxFPW5ldyBLcyxyPTAsbz1uZXcgRyhlLmIpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3IoYT1sKHJlKG8pLDMwKSxDW3IrK109RS5hLmdjKCksdz1uZXcgRyhhLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihmPWwocmUodyksMTApLG49bmV3IGhyKGRyKHFzKGYpLmEuS2MoKSxuZXcgaikpO2pyKG4pOyl0PWwoeHIobiksMTgpLEUuYS56Yyh0LEUpO2ZvcihnPW5ldyBHKGEuYSk7Zy5hPGcuYy5jLmxlbmd0aDspZm9yKGY9bChyZShnKSwxMCksbj1uZXcgaHIoZHIoa2EoZikuYS5LYygpLG5ldyBqKSk7anIobik7KXQ9bCh4cihuKSwxOCksRS5hLkJjKHQpIT1udWxsfXJldHVybiBDfWZ1bmN0aW9uICRVKGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7aWYodz1XdShlLmUuRGgoKSx0KSxhPWwoZS5nLDEyNCksRm8oKSxsKHQsNjkpLnhrKCkpe2ZvcihmPTA7ZjxlLmk7KytmKWlmKG89YVtmXSx3LmFtKG8uTGsoKSkmJlBpKG8sbikpcmV0dXJuITB9ZWxzZSBpZihuIT1udWxsKXtmb3IoZz0wO2c8ZS5pOysrZylpZihvPWFbZ10sdy5hbShvLkxrKCkpJiZQaShuLG8ubWQoKSkpcmV0dXJuITA7aWYocil7Zm9yKGY9MDtmPGUuaTsrK2YpaWYobz1hW2ZdLHcuYW0oby5MaygpKSYmcWUobik9PT1xZShjYWUoZSxsKG8ubWQoKSw1OCkpKSlyZXR1cm4hMH19ZWxzZSBmb3IoZj0wO2Y8ZS5pOysrZilpZihvPWFbZl0sdy5hbShvLkxrKCkpJiZvLm1kKCk9PW51bGwpcmV0dXJuITE7cmV0dXJuITF9ZnVuY3Rpb24gREFuKGUsdCl7dmFyIG4scixhLG8sZixnO2lmKG49dC5xaShlLmEpLG4mJihnPWVpKG4xKCghbi5iJiYobi5iPW5ldyBkaCgoVG4oKSxObyksWWMsbikpLG4uYiksekcpKSxnIT1udWxsKSlzd2l0Y2goYT1ScShnLGNsKDM1KSkscj10LnFrKCksYT09LTE/KGY9S18oZSxBaChyKSksbz1nKTphPT0wPyhmPW51bGwsbz0oWG4oMSxnLmxlbmd0aCsxKSxnLnN1YnN0cigxKSkpOihmPShHYSgwLGEsZy5sZW5ndGgpLGcuc3Vic3RyKDAsYSkpLG89KFhuKGErMSxnLmxlbmd0aCsxKSxnLnN1YnN0cihhKzEpKSksa3coaWMoZSx0KSkpe2Nhc2UgMjpjYXNlIDM6cmV0dXJuIGh5bihlLHIsZixvKTtjYXNlIDA6Y2FzZSA0OmNhc2UgNTpjYXNlIDY6cmV0dXJuIGZ5bihlLHIsZixvKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB6bXQoZSx0LG4scil7dmFyIGEsbyxmLGc7Zm9yKGc9bixmPW5ldyBHKHQuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2lmKG89bChyZShmKSwyMjUpLGE9bChvLmIsNjgpLEZ3KGUuYi5jLGEuYi5jK2EuYi5iKTw9MCYmRncoYS5iLmMsZS5iLmMrZS5iLmIpPD0wJiZGdyhlLmIuZCxhLmIuZCthLmIuYSk8PTAmJkZ3KGEuYi5kLGUuYi5kK2UuYi5hKTw9MCl7aWYoRncoYS5iLmMsZS5iLmMrZS5iLmIpPT0wJiZyLmE8MHx8RncoYS5iLmMrYS5iLmIsZS5iLmMpPT0wJiZyLmE+MHx8RncoYS5iLmQsZS5iLmQrZS5iLmEpPT0wJiZyLmI8MHx8RncoYS5iLmQrYS5iLmEsZS5iLmQpPT0wJiZyLmI+MCl7Zz0wO2JyZWFrfX1lbHNlIGc9Yi5NYXRoLm1pbihnLEJwdChlLGEscikpO2c9Yi5NYXRoLm1pbihnLHptdChlLG8sZyxyKSl9cmV0dXJuIGd9ZnVuY3Rpb24gZFAoZSx0KXt2YXIgbixyLGEsbyxmLGcsdztpZihlLmI8Mil0aHJvdyB1ZShuZXcgWW4oIlRoZSB2ZWN0b3IgY2hhaW4gbXVzdCBjb250YWluIGF0IGxlYXN0IGEgc291cmNlIGFuZCBhIHRhcmdldCBwb2ludC4iKSk7Zm9yKGE9KG1yKGUuYiE9MCksbChlLmEuYS5jLDgpKSxrTyh0LGEuYSxhLmIpLHc9bmV3IHE4KCghdC5hJiYodC5hPW5ldyBZcyhxaCx0LDUpKSx0LmEpKSxmPVJyKGUsMSk7Zi5hPGUuYi0xOylnPWwoQnIoZiksOCksdy5lIT13LmkuZ2MoKT9uPWwoZ3IodyksMzc3KToobj0ocmIoKSxyPW5ldyBBUyxyKSxEMXQodyxuKSksV3NlKG4sZy5hLGcuYik7Zm9yKDt3LmUhPXcuaS5nYygpOylncih3KSxqQSh3KTtvPShtcihlLmIhPTApLGwoZS5jLmIuYyw4KSkseE8odCxvLmEsby5iKX1mdW5jdGlvbiBxbXQoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFO2lmKEU9V3UoZS5lLkRoKCksdCksZj1sKGUuZywxMjQpLHVwKGUuZSx0KSl7aWYodC5TaSgpJiYobz1YRShlLHQscixEZSh0LDEwMikmJihsKHQsMTkpLkJiJklvKSE9MCksbz49MCYmbyE9bikpdGhyb3cgdWUobmV3IFluKFdQKSk7Zm9yKGE9MCx3PTA7dzxlLmk7Kyt3KWlmKGc9Zlt3XSxFLmFtKGcuTGsoKSkpe2lmKGE9PW4pcmV0dXJuIGwobjYoZSx3LChGbygpLGwodCw2OSkueGsoKT9sKHIsNzYpOnNnKHQscikpKSw3Nik7KythfXRocm93IHVlKG5ldyB0YyhDTCtuK2F2K2EpKX1lbHNle2Zvcih3PTA7dzxlLmk7Kyt3KWlmKGc9Zlt3XSxFLmFtKGcuTGsoKSkpcmV0dXJuIEZvKCksbCh0LDY5KS54aygpP2c6Zy5tZCgpO3JldHVybiBudWxsfX1mdW5jdGlvbiBIbXQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7Zm9yKG49MCxhPW5ldyBHKChTbigwLGUuYy5sZW5ndGgpLGwoZS5jWzBdLDEwNSkpLmcuYi5qKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTIpLHIucD1uKys7Zm9yKHQ9PShDdCgpLFFuKT9WcyhlLG5ldyB4ZWUpOlZzKGUsbmV3IGtlZSksZz0wLEM9ZS5jLmxlbmd0aC0xO2c8QzspZj0oU24oZyxlLmMubGVuZ3RoKSxsKGUuY1tnXSwxMDUpKSxFPShTbihDLGUuYy5sZW5ndGgpLGwoZS5jW0NdLDEwNSkpLG89dD09UW4/Zi5jOmYuYSx3PXQ9PVFuP0UuYTpFLmMsUXAoZix0LChSMSgpLERUKSxvKSxRcChFLHQsTVQsdyksKytnLC0tQztnPT1DJiZRcCgoU24oZyxlLmMubGVuZ3RoKSxsKGUuY1tnXSwxMDUpKSx0LChSMSgpLFZ4KSxudWxsKX1mdW5jdGlvbiBJQW4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFO2ZvcihmPW5ldyB5dnQoZSx0LG4pLHc9bmV3IFVhKHIsMCksYT0hMTt3LmI8dy5kLmdjKCk7KWc9KG1yKHcuYjx3LmQuZ2MoKSksbCh3LmQuWGIody5jPXcuYisrKSwyMzkpKSxnPT10fHxnPT1uP3BoKHcpOiFhJiZ6ZShMMShnLmcsZy5kWzBdKS5hKT56ZShMMShmLmcsZi5kWzBdKS5hKT8obXIody5iPjApLHcuYS5YYih3LmM9LS13LmIpLGJ5KHcsZiksYT0hMCk6Zy5lJiZnLmUuZ2MoKT4wJiYobz0oIWcuZSYmKGcuZT1uZXcgYnQpLGcuZSkuTWModCksRT0oIWcuZSYmKGcuZT1uZXcgYnQpLGcuZSkuTWMobiksKG98fEUpJiYoKCFnLmUmJihnLmU9bmV3IGJ0KSxnLmUpLkZjKGYpLCsrZi5jKSk7YXx8JG4oci5jLGYpfWZ1bmN0aW9uIE9BbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmU7cmV0dXJuIEw9ZS5hLmkrZS5hLmcvMixCPWUuYS5pK2UuYS5nLzIsVj10LmkrdC5nLzIsdGU9dC5qK3QuZi8yLGc9bmV3IGx0KFYsdGUpLEU9bChhdCh0LChwaSgpLG45KSksOCksRS5hPUUuYStMLEUuYj1FLmIrQixvPShnLmItRS5iKS8oZy5hLUUuYSkscj1nLmItbypnLmEsSj1uLmkrbi5nLzIsZmU9bi5qK24uZi8yLHc9bmV3IGx0KEosZmUpLEM9bChhdChuLG45KSw4KSxDLmE9Qy5hK0wsQy5iPUMuYitCLGY9KHcuYi1DLmIpLyh3LmEtQy5hKSxhPXcuYi1mKncuYSx6PShyLWEpLyhmLW8pLEUuYTx6JiZnLmE8enx8ejxFLmEmJno8Zy5hPyExOiEoQy5hPHomJncuYTx6fHx6PEMuYSYmejx3LmEpfWZ1bmN0aW9uIE5BbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIsejtpZihCPWwoY3IoZS5jLHQpLDE5MCksIUIpdGhyb3cgdWUobmV3IGRkKCJFZGdlIGRpZCBub3QgZXhpc3QgaW4gaW5wdXQuIikpO3JldHVybiBFPU5FKEIpLG89WkkoKCF0LmEmJih0LmE9bmV3IG50KGNzLHQsNiw2KSksdC5hKSksZz0hbyxnJiYoej1uZXcgJHAsbj1uZXcgeWl0KGUsRSx6KSxFbG4oKCF0LmEmJih0LmE9bmV3IG50KGNzLHQsNiw2KSksdC5hKSxuKSxlMShCLGZTZSx6KSksYT1QMSh0LChwaSgpLHgzKSksYSYmKEM9bChhdCh0LHgzKSw3NSksZj0hQ3x8b2F0KEMpLHc9IWYsdyYmKEw9bmV3ICRwLHI9bmV3IHRRZShMKSx0byhDLHIpLGUxKEIsImp1bmN0aW9uUG9pbnRzIixMKSkpLHprKEIsImNvbnRhaW5lciIsV08odCkuayksbnVsbH1mdW5jdGlvbiBWbXQoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFO2lmKCFaayh0KSl7aWYoRT1uLmVoKChEZSh0LDE2KT9sKHQsMTYpLmdjKCk6WGcodC5LYygpKSkvZS5hfDApLEUuVWcoZHl0LDEpLHc9bmV3IHQkLGc9MCxyPT0oSnMoKSx1Yyl8fHI9PXZjKWZvcihmPXQuS2MoKTtmLk9iKCk7KWE9bChmLlBiKCksNDApLHc9TGgoaGUobGUoRmgsMSksUm4sMjAsMCxbdyxuZXcgSGcoYSldKSksZzxhLmYuYSYmKGc9YS5mLmEpO2Vsc2UgZm9yKGY9dC5LYygpO2YuT2IoKTspYT1sKGYuUGIoKSw0MCksdz1MaChoZShsZShGaCwxKSxSbiwyMCwwLFt3LG5ldyBIZyhhKV0pKSxnPGEuZi5iJiYoZz1hLmYuYik7Zm9yKG89dC5LYygpO28uT2IoKTspYT1sKG8uUGIoKSw0MCkscnQoYSwoUWkoKSxGVyksZyk7RS5WZygpLFZtdChlLHcsbixyKX19ZnVuY3Rpb24gQ2tlKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDO3RoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1uLHRoaXMuZT1PMShoZShsZShtT24sMSksUm4sMTc3LDAsW25ldyBCOChlLHQpLG5ldyBCOCh0LG4pLG5ldyBCOChuLGUpXSkpLHRoaXMuZj1PMShoZShsZShFYSwxKSxkdCw4LDAsW2UsdCxuXSkpLHRoaXMuZD0ocj1tYShKYSh0aGlzLmIpLHRoaXMuYSksYT1tYShKYSh0aGlzLmMpLHRoaXMuYSksbz1tYShKYSh0aGlzLmMpLHRoaXMuYiksZj1yLmEqKHRoaXMuYS5hK3RoaXMuYi5hKStyLmIqKHRoaXMuYS5iK3RoaXMuYi5iKSxnPWEuYSoodGhpcy5hLmErdGhpcy5jLmEpK2EuYioodGhpcy5hLmIrdGhpcy5jLmIpLHc9Miooci5hKm8uYi1yLmIqby5hKSxFPShhLmIqZi1yLmIqZykvdyxDPShyLmEqZy1hLmEqZikvdyxuZXcgbHQoRSxDKSl9ZnVuY3Rpb24gVXcoZSx0KXt2YXIgbixyLGEsbyxmLGc7Zm9yKG89ZS5jLGY9ZS5kLHBvKGUsbnVsbCksRmEoZSxudWxsKSx0JiZSdChCdChRKGYsKGZ0KCksVjFlKSkpKT9wbyhlLHZrZShmLmksKHFvKCksenUpLChDdCgpLGFyKSkpOnBvKGUsZiksdCYmUnQoQnQoUShvLChmdCgpLEcxZSkpKSk/RmEoZSx2a2Uoby5pLChxbygpLCRsKSwoQ3QoKSxlcikpKTpGYShlLG8pLHI9bmV3IEcoZS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNzIpLGE9bChRKG4sKE50KCksamQpKSwyNzgpLGE9PShGMSgpLHJDKT9ydChuLGpkLF80KTphPT1fNCYmcnQobixqZCxyQyk7Zz1SdChCdChRKGUsKGZ0KCksVzEpKSkpLHJ0KGUsVzEsKEhuKCksIWcpKSxlLmE9QU4oZS5hKX1mdW5jdGlvbiBQQW4oZSx0KXt2YXIgbixyLGEsbyxmO3JldHVybiBuPUJFKGwoUSh0LChIYygpLHkzKSksODgpKSxlLmIuYj09MD9udWxsOihmPWwoeWMoZmMobmV3IGJuKG51bGwsbmV3IGtuKGUuYiwxNikpLG5ldyBQdGUpLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxFYyldKSkpLDE1KSxvPWwoeWMoRmkobmV3IGJuKG51bGwsbmV3IGtuKHQuYiwxNikpLG5ldyBhWGUoZikpLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFtFY10pKSksMTUpLGE9R2UoZmgodnkoZmMoby5PYygpLG5ldyBvWGUobikpLChFdygpLEV3KCksRDBlKSkpKSxyPWwoZmgoa0UoRmkoby5PYygpLG5ldyBldHQobixhKSkpKSw0MCkscil9ZnVuY3Rpb24gQkFuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZTtuPWh3KG5ldyBTbSxlLmYpLEU9ZS5pW3QuYy5pLnBdLHo9ZS5pW3QuZC5pLnBdLHc9dC5jLEI9dC5kLGc9dy5hLmIsTD1CLmEuYixFLmJ8fChnKz13Lm4uYiksei5ifHwoTCs9Qi5uLmIpLEM9dWEoYi5NYXRoLm1heCgwLGctTCkpLGY9dWEoYi5NYXRoLm1heCgwLEwtZykpLFY9KEo9Yi5NYXRoLm1heCgxLGwoUSh0LChOdCgpLEp4KSksMTcpLmEpLHRlPXU2ZSh0LmMuaS5rLHQuZC5pLmspLEoqdGUpLGE9cDAoczAoaTAocjAoYTAobmV3IF9mLFYpLGYpLG4pLGwoY3IoZS5rLHQuYyksMTI1KSkpLG89cDAoczAoaTAocjAoYTAobmV3IF9mLFYpLEMpLG4pLGwoY3IoZS5rLHQuZCksMTI1KSkpLHI9bmV3IEhldChhLG8pLGUuY1t0LnBdPXJ9ZnVuY3Rpb24gRkFuKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7Zm9yKHI9MCxvPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpO28uZSE9by5pLmdjKCk7KWE9bChncihvKSwyNyksZj0iIiwoIWEubiYmKGEubj1uZXcgbnQoZWMsYSwxLDcpKSxhLm4pLmk9PTB8fChmPWwoT2UoKCFhLm4mJihhLm49bmV3IG50KGVjLGEsMSw3KSksYS5uKSwwKSwxMzUpLmEpLGc9bmV3IHdudChmKSxwYyhnLGEpLHJ0KGcsKGJiKCksSHgpLGEpLGcuYT1yKyssZy5kLmE9YS5pK2EuZy8yLGcuZC5iPWEuaithLmYvMixnLmUuYT1iLk1hdGgubWF4KGEuZywxKSxnLmUuYj1iLk1hdGgubWF4KGEuZiwxKSx2dCh0LmUsZyksanUobi5mLGEsZyksdz1sKGF0KGEsKGIwKCksckFlKSksMTAxKSx3PT0oUmEoKSxXYikmJih3PVoxKX1mdW5jdGlvbiBSQW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdzt0LlVnKCJMYXllciBjb25zdHJhaW50IHBvc3Rwcm9jZXNzaW5nIiwxKSx3PWUuYix3LmMubGVuZ3RoIT0wJiYocj0oU24oMCx3LmMubGVuZ3RoKSxsKHcuY1swXSwzMCkpLGY9bChqdCh3LHcuYy5sZW5ndGgtMSksMzApLG49bmV3IHl1KGUpLG89bmV3IHl1KGUpLENfbihlLHIsZixuLG8pLG4uYS5jLmxlbmd0aD09MHx8KEV5KDAsdy5jLmxlbmd0aCkseF8ody5jLDAsbikpLG8uYS5jLmxlbmd0aD09MHx8JG4ody5jLG8pKSxucyhlLChmdCgpLEgxZSkpJiYoYT1uZXcgeXUoZSksZz1uZXcgeXUoZSksYlNuKGUsYSxnKSxhLmEuYy5sZW5ndGg9PTB8fChFeSgwLHcuYy5sZW5ndGgpLHhfKHcuYywwLGEpKSxnLmEuYy5sZW5ndGg9PTB8fCRuKHcuYyxnKSksdC5WZygpfWZ1bmN0aW9uIGdQKGUpe3ZhciB0LG4scjtzd2l0Y2goZSl7Y2FzZSA5MTpjYXNlIDkzOmNhc2UgNDU6Y2FzZSA5NDpjYXNlIDQ0OmNhc2UgOTI6cj0iXFwiK1N0cmluZy5mcm9tQ2hhckNvZGUoZSZacyk7YnJlYWs7Y2FzZSAxMjpyPSJcXGYiO2JyZWFrO2Nhc2UgMTA6cj0iXFxuIjticmVhaztjYXNlIDEzOnI9IlxcciI7YnJlYWs7Y2FzZSA5OnI9IlxcdCI7YnJlYWs7Y2FzZSAyNzpyPSJcXGUiO2JyZWFrO2RlZmF1bHQ6ZTwzMj8obj0odD1lPj4+MCwiMCIrdC50b1N0cmluZygxNikpLHI9IlxceCIrdGYobixuLmxlbmd0aC0yLG4ubGVuZ3RoKSk6ZT49SW8/KG49KHQ9ZT4+PjAsIjAiK3QudG9TdHJpbmcoMTYpKSxyPSJcXHYiK3RmKG4sbi5sZW5ndGgtNixuLmxlbmd0aCkpOnI9IiIrU3RyaW5nLmZyb21DaGFyQ29kZShlJlpzKX1yZXR1cm4gcn1mdW5jdGlvbiBVbXQoZSl7dmFyIHQsbixyO2lmKFA1KGwoUShlLChOdCgpLE1zKSksMTAxKSkpZm9yKG49bmV3IEcoZS5qKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTIpLHQuaj09KEN0KCksUGMpJiYocj1sKFEodCwoZnQoKSxqbCkpLDEwKSxyP2xhKHQsbChRKHIsV2MpLDY0KSk6dC5lLmMubGVuZ3RoLXQuZy5jLmxlbmd0aDwwP2xhKHQsYXIpOmxhKHQsZXIpKTtlbHNle2ZvcihuPW5ldyBHKGUuaik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDEyKSxyPWwoUSh0LChmdCgpLGpsKSksMTApLHI/bGEodCxsKFEocixXYyksNjQpKTp0LmUuYy5sZW5ndGgtdC5nLmMubGVuZ3RoPDA/bGEodCwoQ3QoKSxhcikpOmxhKHQsKEN0KCksZXIpKTtydChlLE1zLChSYSgpLHNDKSl9fWZ1bmN0aW9uIFNrZShlKXt2YXIgdCxuLHIsYSxvLGY7Zm9yKHRoaXMuZT1uZXcgYnQsdGhpcy5hPW5ldyBidCxuPWUuYi0xO248MztuKyspUGsoZSwwLGwoZmYoZSwwKSw4KSk7aWYoZS5iPDQpdGhyb3cgdWUobmV3IFluKCJBdCAobGVhc3QgZGltZW5zaW9uICsgMSkgY29udHJvbCBwb2ludHMgYXJlIG5lY2Vzc2FyeSEiKSk7Zm9yKHRoaXMuYj0zLHRoaXMuZD0hMCx0aGlzLmM9ITEsZlRuKHRoaXMsZS5iK3RoaXMuYi0xKSxmPW5ldyBidCxvPW5ldyBHKHRoaXMuZSksdD0wO3Q8dGhpcy5iLTE7dCsrKXZ0KGYsR2UocmUobykpKTtmb3IoYT1ScihlLDApO2EuYiE9YS5kLmM7KXI9bChCcihhKSw4KSx2dChmLEdlKHJlKG8pKSksdnQodGhpcy5hLG5ldyByb3QocixmKSksU24oMCxmLmMubGVuZ3RoKSxmLmMuc3BsaWNlKDAsMSl9ZnVuY3Rpb24gR210KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2ZvcihvPW5ldyBHKGUuYik7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSwzMCksZz1uZXcgRyhhLmEpO2cuYTxnLmMuYy5sZW5ndGg7KWZvcihmPWwocmUoZyksMTApLGYuaz09KFpuKCksY3UpJiYodz0oRT1sKHhyKG5ldyBocihkcihrYShmKS5hLktjKCksbmV3IGopKSksMTgpLEM9bCh4cihuZXcgaHIoZHIocXMoZikuYS5LYygpLG5ldyBqKSkpLDE4KSwhUnQoQnQoUShFLChmdCgpLFcxKSkpKXx8IVJ0KEJ0KFEoQyxXMSkpKT90OmMwdCh0KSksVHgoZix3KSkscj1uZXcgaHIoZHIocXMoZikuYS5LYygpLG5ldyBqKSk7anIocik7KW49bCh4cihyKSwxOCksdz1SdChCdChRKG4sKGZ0KCksVzEpKSkpP2MwdCh0KTp0LHQwdChuLHcpfWZ1bmN0aW9uIGpBbihlLHQsbixyLGEpe3ZhciBvLGYsZztpZihuLmY+PXQubyYmbi5mPD10LmZ8fHQuYSouNTw9bi5mJiZ0LmEqMS41Pj1uLmYpe2lmKGY9bChqdCh0Lm4sdC5uLmMubGVuZ3RoLTEpLDIwOSksZi5lK2YuZCtuLmcrYTw9ciYmKG89bChqdCh0Lm4sdC5uLmMubGVuZ3RoLTEpLDIwOSksby5mLWUuZituLmY8PWUuYnx8ZS5hLmMubGVuZ3RoPT0xKSlyZXR1cm4geThlKHQsbiksITA7aWYodC5zK24uZzw9ciYmKHQudCt0LmQrbi5mK2E8PWUuYnx8ZS5hLmMubGVuZ3RoPT0xKSlyZXR1cm4gdnQodC5iLG4pLGc9bChqdCh0Lm4sdC5uLmMubGVuZ3RoLTEpLDIwOSksdnQodC5uLG5ldyBQSCh0LnMsZy5mK2cuYSt0LmksdC5pKSksZXhlKGwoanQodC5uLHQubi5jLmxlbmd0aC0xKSwyMDkpLG4pLGptdCh0LG4pLCEwfXJldHVybiExfWZ1bmN0aW9uIEttdChlLHQsbil7dmFyIHIsYSxvLGY7cmV0dXJuIGUuUGooKT8oYT1udWxsLG89ZS5RaigpLHI9ZS5JaigxLGY9VW9lKGUsdCxuKSxuLHQsbyksZS5NaigpJiYhKGUuWWkoKSYmZiE9bnVsbD9QaShmLG4pOnFlKGYpPT09cWUobikpPyhmIT1udWxsJiYoYT1lLk9qKGYsYSkpLGE9ZS5OaihuLGEpLGUuVGooKSYmKGE9ZS5XaihmLG4sYSkpLGE/KGEubmoociksYS5vaigpKTplLkpqKHIpKTooZS5UaigpJiYoYT1lLldqKGYsbixhKSksYT8oYS5uaihyKSxhLm9qKCkpOmUuSmoocikpLGYpOihmPVVvZShlLHQsbiksZS5NaigpJiYhKGUuWWkoKSYmZiE9bnVsbD9QaShmLG4pOnFlKGYpPT09cWUobikpJiYoYT1udWxsLGYhPW51bGwmJihhPWUuT2ooZixudWxsKSksYT1lLk5qKG4sYSksYSYmYS5vaigpKSxmKX1mdW5jdGlvbiAkQW4oZSx0KXt2YXIgbixyLGEsbyxmO2lmKHQuVWcoIlBhdGgtTGlrZSBHcmFwaCBXcmFwcGluZyIsMSksZS5iLmMubGVuZ3RoPT0wKXt0LlZnKCk7cmV0dXJufWlmKGE9bmV3IE05ZShlKSxmPShhLmk9PW51bGwmJihhLmk9eDdlKGEsbmV3IEdqKSksemUoYS5pKSphLmYpLG49Zi8oYS5pPT1udWxsJiYoYS5pPXg3ZShhLG5ldyBHaikpLHplKGEuaSkpLGEuYj5uKXt0LlZnKCk7cmV0dXJufXN3aXRjaChsKFEoZSwoTnQoKSxoZGUpKSwzNTEpLmcpe2Nhc2UgMjpvPW5ldyBXajticmVhaztjYXNlIDA6bz1uZXcgRVM7YnJlYWs7ZGVmYXVsdDpvPW5ldyBZan1pZihyPW8ub2coZSxhKSwhby5wZygpKXN3aXRjaChsKFEoZSxFVyksMzUyKS5nKXtjYXNlIDI6cj1GcHQoYSxyKTticmVhaztjYXNlIDE6cj1BZ3QoYSxyKX1CTG4oZSxhLHIpLHQuVmcoKX1mdW5jdGlvbiBYQShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7dCU9MjQsZS5xLmdldEhvdXJzKCkhPXQmJihyPW5ldyBiLkRhdGUoZS5xLmdldFRpbWUoKSksci5zZXREYXRlKHIuZ2V0RGF0ZSgpKzEpLGc9ZS5xLmdldFRpbWV6b25lT2Zmc2V0KCktci5nZXRUaW1lem9uZU9mZnNldCgpLGc+MCYmKHc9Zy82MHwwLEU9ZyU2MCxhPWUucS5nZXREYXRlKCksbj1lLnEuZ2V0SG91cnMoKSxuK3c+PTI0JiYrK2Esbz1uZXcgYi5EYXRlKGUucS5nZXRGdWxsWWVhcigpLGUucS5nZXRNb250aCgpLGEsdCt3LGUucS5nZXRNaW51dGVzKCkrRSxlLnEuZ2V0U2Vjb25kcygpLGUucS5nZXRNaWxsaXNlY29uZHMoKSksZS5xLnNldFRpbWUoby5nZXRUaW1lKCkpKSksZj1lLnEuZ2V0VGltZSgpLGUucS5zZXRUaW1lKGYrMzZlNSksZS5xLmdldEhvdXJzKCkhPXQmJmUucS5zZXRUaW1lKGYpfWZ1bmN0aW9uIHpBbihlLHQpe3ZhciBuLHIsYSxvO2lmKGVibihlLmQsZS5lKSxlLmMuYS4kYigpLHplKEdlKFEodC5qLChOdCgpLGhXKSkpKSE9MHx8emUoR2UoUSh0LmosaFcpKSkhPTApZm9yKG49eTYscWUoUSh0LmoseWcpKSE9PXFlKChFZCgpLEUyKSkmJnJ0KHQuaiwoZnQoKSxqYiksKEhuKCksITApKSxvPWwoUSh0Lmosbk0pLDE3KS5hLGE9MDthPG8mJihyPXRMbihlLHQpLCEocjxuJiYobj1yLHZmdChlKSxuPT0wKSkpO2ErKyk7ZWxzZSBmb3Iobj1JaSxxZShRKHQuaix5ZykpIT09cWUoKEVkKCksRTIpKSYmcnQodC5qLChmdCgpLGpiKSwoSG4oKSwhMCkpLG89bChRKHQuaixuTSksMTcpLmEsYT0wO2E8byYmKHI9Sm10KGUsdCksIShyPG4mJihuPXIsdmZ0KGUpLG49PTApKSk7YSsrKTt9ZnVuY3Rpb24gcUFuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRTtmb3IoZj1uZXcgYnQsZz0wLG49MCx3PTA7Zzx0LmMubGVuZ3RoLTEmJm48ZS5nYygpOyl7Zm9yKHI9bChlLlhiKG4pLDE3KS5hK3c7KFNuKGcrMSx0LmMubGVuZ3RoKSxsKHQuY1tnKzFdLDE3KSkuYTxyOykrK2c7Zm9yKEU9MCxvPXItKFNuKGcsdC5jLmxlbmd0aCksbCh0LmNbZ10sMTcpKS5hLGE9KFNuKGcrMSx0LmMubGVuZ3RoKSxsKHQuY1tnKzFdLDE3KSkuYS1yLG8+YSYmKytFLHZ0KGYsKFNuKGcrRSx0LmMubGVuZ3RoKSxsKHQuY1tnK0VdLDE3KSkpLHcrPShTbihnK0UsdC5jLmxlbmd0aCksbCh0LmNbZytFXSwxNykpLmEtciwrK247bjxlLmdjKCkmJmwoZS5YYihuKSwxNykuYSt3PD0oU24oZytFLHQuYy5sZW5ndGgpLGwodC5jW2crRV0sMTcpKS5hOykrK247Zys9MStFfXJldHVybiBmfWZ1bmN0aW9uIEhBbihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKGY9bmV3IGhyKGRyKGthKHQpLmEuS2MoKSxuZXcgaikpO2pyKGYpOylpZihvPWwoeHIoZiksMTgpLGUuZi5iPT0wPyhhPW8uYy5pLms9PShabigpLFBzKSYmISFvLmMuaS5jJiZvLmMuaS5jLnA9PWUuYyxqcihuZXcgaHIoZHIoa2Eoby5jLmkpLmEuS2MoKSxuZXcgaikpKT8obj1sKHhyKG5ldyBocihkcihrYShvLmMuaSkuYS5LYygpLG5ldyBqKSkpLDE4KS5jLmkuYyxyPW8uYy5pLms9PWN1JiYhIW4mJm4ucD09ZS5jKTpyPSExKTooYT1vLmMuaS5rPT0oWm4oKSxQcykmJm8uYy5pLnA9PWUuYyxyPW8uYy5pLms9PWN1JiZsKHhyKG5ldyBocihkcihrYShvLmMuaSkuYS5LYygpLG5ldyBqKSkpLDE4KS5jLmkucD09ZS5jKSxhfHxyKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFZBbihlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKEI9bmV3IGJ0LGZlPUhIKHIpLHRlPXQqZS5hLEw9MCxWPTAsbz1uZXcgS3MsZj1uZXcgS3MsZz1uZXcgYnQsVGU9MCxNZT0wLHo9MCxKPTAsRT0wLEM9MDtmZS5hLmdjKCkhPTA7KXc9UjRuKGZlLGEsZiksdyYmKGZlLmEuQmModykhPW51bGwsJG4oZy5jLHcpLG8uYS56Yyh3LG8pLFY9ZS5mW3cucF0sVGUrPWUuZVt3LnBdLVYqZS5iLEw9ZS5jW3cucF0sTWUrPUwqZS5iLEMrPVYqZS5iLEorPWUuZVt3LnBdKSwoIXd8fGZlLmEuZ2MoKT09MHx8VGU+PXRlJiZlLmVbdy5wXT5WKmUuYnx8TWU+PW4qdGUpJiYoJG4oQi5jLGcpLGc9bmV3IGJ0LEthKGYsbyksby5hLiRiKCksRS09Qyx6PWIuTWF0aC5tYXgoeixFKmUuYitKKSxFKz1NZSxUZT1NZSxNZT0wLEM9MCxKPTApO3JldHVybiBuZXcgY2EoeixCKX1mdW5jdGlvbiBkbGUoZSl7dmFyIHQsbixyLGEsbyxmLGc7aWYoIWUuZCl7aWYoZz1uZXcgSm5lLHQ9cU0sbz10LmEuemMoZSx0KSxvPT1udWxsKXtmb3Iocj1uZXcgb3IoZGMoZSkpO3IuZSE9ci5pLmdjKCk7KW49bChncihyKSwyOSksQXMoZyxkbGUobikpO3QuYS5CYyhlKSE9bnVsbCx0LmEuZ2MoKT09MH1mb3IoZj1nLmksYT0oIWUucSYmKGUucT1uZXcgbnQoVWYsZSwxMSwxMCkpLG5ldyBvcihlLnEpKTthLmUhPWEuaS5nYygpOysrZilsKGdyKGEpLDQxMSk7QXMoZywoIWUucSYmKGUucT1uZXcgbnQoVWYsZSwxMSwxMCkpLGUucSkpLEl5KGcpLGUuZD1uZXcgTjUoKGwoT2UodHQoKGxiKCksVm4pLm8pLDkpLDE5KSxnLmkpLGcuZyksZS5lPWwoZy5nLDY4OCksZS5lPT1udWxsJiYoZS5lPVhfdCksWWwoZSkuYiY9LTE3fXJldHVybiBlLmR9ZnVuY3Rpb24gWEUoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFO2lmKEU9V3UoZS5lLkRoKCksdCksdz0wLGE9bChlLmcsMTI0KSxGbygpLGwodCw2OSkueGsoKSl7Zm9yKGY9MDtmPGUuaTsrK2YpaWYobz1hW2ZdLEUuYW0oby5MaygpKSl7aWYoUGkobyxuKSlyZXR1cm4gdzsrK3d9fWVsc2UgaWYobiE9bnVsbCl7Zm9yKGc9MDtnPGUuaTsrK2cpaWYobz1hW2ddLEUuYW0oby5MaygpKSl7aWYoUGkobixvLm1kKCkpKXJldHVybiB3Oysrd31pZihyKXtmb3Iodz0wLGY9MDtmPGUuaTsrK2YpaWYobz1hW2ZdLEUuYW0oby5MaygpKSl7aWYocWUobik9PT1xZShjYWUoZSxsKG8ubWQoKSw1OCkpKSlyZXR1cm4gdzsrK3d9fX1lbHNlIGZvcihmPTA7ZjxlLmk7KytmKWlmKG89YVtmXSxFLmFtKG8uTGsoKSkpe2lmKG8ubWQoKT09bnVsbClyZXR1cm4gdzsrK3d9cmV0dXJuLTF9ZnVuY3Rpb24gVUFuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtpZihuLlhoKHQpJiYoQz0oej10LHo/bChyLDU0KS5naSh6KTpudWxsKSxDKSlpZihKPW4uTmgodCxlLmEpLFY9dC50LFY+MXx8Vj09LTEpaWYoTD1sKEosNzEpLEI9bChDLDcxKSxMLmRjKCkpQi4kYigpO2Vsc2UgZm9yKGY9ISFSbyh0KSxvPTAsZz1lLmE/TC5LYygpOkwuSWkoKTtnLk9iKCk7KUU9bChnLlBiKCksNTgpLGE9bChCMShlLEUpLDU4KSxhPyhmPyh3PUIuZGQoYSksdz09LTE/Qi5HaShvLGEpOm8hPXcmJkIuVWkobyxhKSk6Qi5HaShvLGEpLCsrbyk6ZS5iJiYhZiYmKEIuR2kobyxFKSwrK28pO2Vsc2UgSj09bnVsbD9DLldiKG51bGwpOihhPUIxKGUsSiksYT09bnVsbD9lLmImJiFSbyh0KSYmQy5XYihKKTpDLldiKGEpKX1mdW5jdGlvbiBHQW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2ZvcihuPW5ldyBnWixhPW5ldyBocihkcihrYSh0KS5hLktjKCksbmV3IGopKTtqcihhKTspaWYocj1sKHhyKGEpLDE4KSwhRG8ocikmJihnPXIuYy5pLEJ4ZShnLFNLKSkpe2lmKEU9dGtlKGUsZyxTSyxDSyksRT09LTEpY29udGludWU7bi5iPWIuTWF0aC5tYXgobi5iLEUpLCFuLmEmJihuLmE9bmV3IGJ0KSx2dChuLmEsZyl9Zm9yKGY9bmV3IGhyKGRyKHFzKHQpLmEuS2MoKSxuZXcgaikpO2pyKGYpOylpZihvPWwoeHIoZiksMTgpLCFEbyhvKSYmKHc9by5kLmksQnhlKHcsQ0spKSl7aWYoRT10a2UoZSx3LENLLFNLKSxFPT0tMSljb250aW51ZTtuLmQ9Yi5NYXRoLm1heChuLmQsRSksIW4uYyYmKG4uYz1uZXcgYnQpLHZ0KG4uYyx3KX1yZXR1cm4gbn1mdW5jdGlvbiBLQW4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEM7aWYobi5kLmkhPXQuaSl7Zm9yKGE9bmV3IG9wKGUpLHgoYSwoWm4oKSxBYSkpLHJ0KGEsKGZ0KCksemkpLG4pLHJ0KGEsKE50KCksTXMpLChSYSgpLE11KSksJG4oci5jLGEpLGY9bmV3IGd1LE1jKGYsYSksbGEoZiwoQ3QoKSxlcikpLGc9bmV3IGd1LE1jKGcsYSksbGEoZyxhciksQz1uLmQsRmEobixmKSxvPW5ldyBUdyxwYyhvLG4pLHJ0KG8sY2MsbnVsbCkscG8obyxnKSxGYShvLEMpLEU9bmV3IFVhKG4uYiwwKTtFLmI8RS5kLmdjKCk7KXc9KG1yKEUuYjxFLmQuZ2MoKSksbChFLmQuWGIoRS5jPUUuYisrKSw3MikpLHFlKFEodyxqZCkpPT09cWUoKEYxKCksXzQpKSYmKHJ0KHcsS3gsbikscGgoRSksdnQoby5iLHcpKTtTMnQoYSxmLGcpfX1mdW5jdGlvbiBXQW4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEM7aWYobi5jLmkhPXQuaSlmb3IoYT1uZXcgb3AoZSkseChhLChabigpLEFhKSkscnQoYSwoZnQoKSx6aSksbikscnQoYSwoTnQoKSxNcyksKFJhKCksTXUpKSwkbihyLmMsYSksZj1uZXcgZ3UsTWMoZixhKSxsYShmLChDdCgpLGVyKSksZz1uZXcgZ3UsTWMoZyxhKSxsYShnLGFyKSxGYShuLGYpLG89bmV3IFR3LHBjKG8sbikscnQobyxjYyxudWxsKSxwbyhvLGcpLEZhKG8sdCksUzJ0KGEsZixnKSxFPW5ldyBVYShuLmIsMCk7RS5iPEUuZC5nYygpOyl3PShtcihFLmI8RS5kLmdjKCkpLGwoRS5kLlhiKEUuYz1FLmIrKyksNzIpKSxDPWwoUSh3LGpkKSwyNzgpLEM9PShGMSgpLF80KSYmKG5zKHcsS3gpfHxydCh3LEt4LG4pLHBoKEUpLHZ0KG8uYix3KSl9ZnVuY3Rpb24gV210KGUpe0dFKCk7dmFyIHQsbixyLGE7aWYodD11YShlKSxlPEZMLmxlbmd0aClyZXR1cm4gRkxbdF07aWYoZTw9NTApcmV0dXJuIGlQKChDZCgpLE0wZSksdCk7aWYoZTw9YjIpcmV0dXJuIHN4KGlQKCR4WzFdLHQpLHQpO2lmKGU+MWU2KXRocm93IHVlKG5ldyBxeigicG93ZXIgb2YgdGVuIHRvbyBiaWciKSk7aWYoZTw9SWkpcmV0dXJuIHN4KGlQKCR4WzFdLHQpLHQpO2ZvcihyPWlQKCR4WzFdLElpKSxhPXIsbj1aYyhlLUlpKSx0PXVhKGUlSWkpO2l1KG4sSWkpPjA7KWE9SzUoYSxyKSxuPURmKG4sSWkpO2ZvcihhPUs1KGEsaVAoJHhbMV0sdCkpLGE9c3goYSxJaSksbj1aYyhlLUlpKTtpdShuLElpKT4wOylhPXN4KGEsSWkpLG49RGYobixJaSk7cmV0dXJuIGE9c3goYSx0KSxhfWZ1bmN0aW9uIFltdChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQztmb3Iodz1uZXcgRyhlLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWlmKGc9bChyZSh3KSwxMCksZy5rPT0oWm4oKSxVcykmJihhPWwoUShnLChmdCgpLFdjKSksNjQpLGE9PShDdCgpLGFyKXx8YT09ZXIpKWZvcihyPW5ldyBocihkcihzcChnKS5hLktjKCksbmV3IGopKTtqcihyKTspbj1sKHhyKHIpLDE4KSx0PW4uYSx0LmIhPTAmJihFPW4uYyxFLmk9PWcmJihvPShtcih0LmIhPTApLGwodC5hLmEuYyw4KSksby5iPUljKGhlKGxlKEVhLDEpLGR0LDgsMCxbRS5pLm4sRS5uLEUuYV0pKS5iKSxDPW4uZCxDLmk9PWcmJihmPShtcih0LmIhPTApLGwodC5jLmIuYyw4KSksZi5iPUljKGhlKGxlKEVhLDEpLGR0LDgsMCxbQy5pLm4sQy5uLEMuYV0pKS5iKSl9ZnVuY3Rpb24gUUEoZSx0LG4scil7dmFyIGEsbyxmO2lmKHRoaXMuaj1uZXcgYnQsdGhpcy5rPW5ldyBidCx0aGlzLmI9bmV3IGJ0LHRoaXMuYz1uZXcgYnQsdGhpcy5lPW5ldyAkOCx0aGlzLmk9bmV3IGJsLHRoaXMuZj1uZXcgQmllLHRoaXMuZD1uZXcgYnQsdGhpcy5nPW5ldyBidCx2dCh0aGlzLmIsZSksdnQodGhpcy5iLHQpLHRoaXMuZS5jPWIuTWF0aC5taW4oZS5hLHQuYSksdGhpcy5lLmQ9Yi5NYXRoLm1pbihlLmIsdC5iKSx0aGlzLmUuYj1iLk1hdGguYWJzKGUuYS10LmEpLHRoaXMuZS5hPWIuTWF0aC5hYnMoZS5iLXQuYiksYT1sKFEociwoTnQoKSxjYykpLDc1KSxhKWZvcihmPVJyKGEsMCk7Zi5iIT1mLmQuYzspbz1sKEJyKGYpLDgpLFg2ZShvLmEsZS5hKSYmdWkodGhpcy5pLG8pO24mJnZ0KHRoaXMuaixuKSx2dCh0aGlzLmsscil9ZnVuY3Rpb24gWUFuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDO2ZvcihnPS0xLEM9bmV3IEcoZSk7Qy5hPEMuYy5jLmxlbmd0aDspRT1sKHJlKEMpLDExOCksRS5nPWctLSxhPVlyKGpIKFRIKEZpKG5ldyBibihudWxsLG5ldyBrbihFLmYsMTYpKSxuZXcgYnRlKSxuZXcgbXRlKSkuZCksbz1ZcihqSChUSChGaShuZXcgYm4obnVsbCxuZXcga24oRS5rLDE2KSksbmV3IHZ0ZSksbmV3IHd0ZSkpLmQpLGY9YSx3PW8scnx8KGY9WXIoakgoVEgobmV3IGJuKG51bGwsbmV3IGtuKEUuZiwxNikpLG5ldyB5dGUpKS5kKSx3PVlyKGpIKFRIKG5ldyBibihudWxsLG5ldyBrbihFLmssMTYpKSxuZXcgZ3RlKSkuZCkpLEUuZD1mLEUuYT1hLEUuaT13LEUuYj1vLHc9PTA/Q3MobixFLG4uYy5iLG4uYyk6Zj09MCYmQ3ModCxFLHQuYy5iLHQuYyl9ZnVuY3Rpb24gVHgoZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYoZS5rPT0oWm4oKSxjdSkmJihuPWUuaz09Y3UmJiFfayhGaShsKFEoZSwoZnQoKSxXTCkpLDE1KS5PYygpLG5ldyBXbChuZXcgdWopKSkuQmQoKEFtKCksengpKT8oSWgoKSxaQik6dCxydChlLChmdCgpLFl4KSxuKSxuIT0oSWgoKSxHYikpKWZvcihyPWwoUShlLHppKSwxOCksZz16ZShHZShRKHIsKE50KCkseDIpKSkpLGY9MCxuPT1rZz9mPWUuby5iLWIuTWF0aC5jZWlsKGcvMik6bj09WkImJihmPWIuTWF0aC5jZWlsKGUuby5iLXplKEdlKFEoZW8oZSksSDYpKSktZykvMixlLm8uYi09emUoR2UoUShlbyhlKSxINikpKSxlLm8uYi09Zyksbz1uZXcgRyhlLmopO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSwxMiksYS5uLmI9Zn1mdW5jdGlvbiBYbXQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTDtmb3IoYT0hMCxmPW5ldyBHKGUuYik7Zi5hPGYuYy5jLmxlbmd0aDspe2ZvcihvPWwocmUoZiksMzApLEU9aWEsQz1udWxsLHc9bmV3IEcoby5hKTt3LmE8dy5jLmMubGVuZ3RoOylpZihnPWwocmUodyksMTApLEw9emUodC5wW2cucF0pK3plKHQuZFtnLnBdKS1nLmQuZCxyPXplKHQucFtnLnBdKSt6ZSh0LmRbZy5wXSkrZy5vLmIrZy5kLmEsTD5FJiZyPkUpQz1nLEU9emUodC5wW2cucF0pK3plKHQuZFtnLnBdKStnLm8uYitnLmQuYTtlbHNle2E9ITEsbi5fZygpJiZuLmJoKCJiayBub2RlIHBsYWNlbWVudCBicmVha3Mgb24gIitnKyIgd2hpY2ggc2hvdWxkIGhhdmUgYmVlbiBhZnRlciAiK0MpO2JyZWFrfWlmKCFhKWJyZWFrfXJldHVybiBuLl9nKCkmJm4uYmgodCsiIGlzIGZlYXNpYmxlOiAiK2EpLGF9ZnVuY3Rpb24gX2tlKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQjtpZihvPW5ldyBvcChlKSx4KG8sKFpuKCksQXUpKSxydChvLChOdCgpLE1zKSwoUmEoKSxNdSkpLGE9MCx0KXtmb3IoZj1uZXcgZ3UscnQoZiwoZnQoKSx6aSksdCkscnQobyx6aSx0LmkpLGxhKGYsKEN0KCksZXIpKSxNYyhmLG8pLEI9a2QodC5lKSxFPUIsQz0wLEw9RS5sZW5ndGg7QzxMOysrQyl3PUVbQ10sRmEodyxmKTtydCh0LGpsLG8pLCsrYX1pZihuKXtmb3IoZz1uZXcgZ3UscnQobywoZnQoKSx6aSksbi5pKSxydChnLHppLG4pLGxhKGcsKEN0KCksYXIpKSxNYyhnLG8pLEI9a2Qobi5nKSxFPUIsQz0wLEw9RS5sZW5ndGg7QzxMOysrQyl3PUVbQ10scG8odyxnKTtydChuLGpsLG8pLCsrYX1yZXR1cm4gcnQobywoZnQoKSxpVykscHQoYSkpLCRuKHIuYyxvKSxvfWZ1bmN0aW9uIFhBbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIsejtmb3Iobj0oRT1uZXcgZ2koZS5jLmIpLmEudmMoKS5LYygpLG5ldyBmcyhFKSk7bi5hLk9iKCk7KXQ9KGc9bChuLmEuUGIoKSw0NCksbChnLm1kKCksMTQzKSksYT10LmEsYT09bnVsbCYmKGE9IiIpLHI9a2ZuKGUuYyxhKSwhciYmYS5sZW5ndGg9PTAmJihyPWw0bihlKSksciYmIU55KHIuYyx0LCExKSYmdWkoci5jLHQpO2ZvcihmPVJyKGUuYSwwKTtmLmIhPWYuZC5jOylvPWwoQnIoZiksNDg3KSxDPV9vZShlLmMsby5hKSx6PV9vZShlLmMsby5iKSxDJiZ6JiZ1aShDLmMsbmV3IGNhKHosby5jKSk7Zm9yKENoKGUuYSksQj1ScihlLmIsMCk7Qi5iIT1CLmQuYzspTD1sKEJyKEIpLDQ4NyksdD14Zm4oZS5jLEwuYSksdz1fb2UoZS5jLEwuYiksdCYmdyYmZWxuKHQsdyxMLmMpO0NoKGUuYil9ZnVuY3Rpb24gUUFuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6O289bmV3IHdrKGUpLGY9bmV3IGNndCxhPShlTihmLmcpLGVOKGYuaiksTmwoZi5iKSxlTihmLmQpLGVOKGYuaSksTmwoZi5rKSxObChmLmMpLE5sKGYuZSksej1IcHQoZixvLG51bGwpLFIydChmLG8pLHopLHQmJihFPW5ldyB3ayh0KSxnPWFMbihFKSxZeGUoYSxoZShsZShIT2UsMSksUm4sNTM2LDAsW2ddKSkpLEI9ITEsTD0hMSxuJiYoRT1uZXcgd2sobiksSEcgaW4gRS5hJiYoQj1XZyhFLEhHKS5xZSgpLmEpLFM0dCBpbiBFLmEmJihMPVdnKEUsUzR0KS5xZSgpLmEpKSxDPVpKZShWaHQobmV3IEw4LEIpLEwpLE45bihuZXcgdHksYSxDKSxIRyBpbiBvLmEmJmUxKG8sSEcsbnVsbCksKEJ8fEwpJiYodz1uZXcgTTgsRG10KEMsdyxCLEwpLGUxKG8sSEcsdykpLHI9bmV3IEpYZShmKSx2eW4obmV3IGh5ZShhKSxyKX1mdW5jdGlvbiBKQW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTDtmb3IoZj1uZXcgZGd0LEU9aGUobGUoVnIsMSksZGksMjgsMTUsWzBdKSxhPS0xLG89MCxyPTAsdz0wO3c8ZS5iLmMubGVuZ3RoOysrdylpZihDPWwoanQoZS5iLHcpLDQ0MyksQy5iPjApe2lmKGE8MCYmQy5hJiYoYT13LG89RVswXSxyPTApLGE+PTApe2lmKGc9Qy5iLHc9PWEmJihnLT1yKyssZz09MCkpcmV0dXJuIDA7aWYoIVp2dCh0LEUsQyxnLGYpKXt3PWEtMSxFWzBdPW87Y29udGludWV9fWVsc2UgaWYoYT0tMSwhWnZ0KHQsRSxDLDAsZikpcmV0dXJuIDB9ZWxzZXtpZihhPS0xLGNvKEMuYywwKT09MzIpe2lmKEw9RVswXSxlaHQodCxFKSxFWzBdPkwpY29udGludWV9ZWxzZSBpZihQcG4odCxDLmMsRVswXSkpe0VbMF0rPUMuYy5sZW5ndGg7Y29udGludWV9cmV0dXJuIDB9cmV0dXJuIEZEbihmLG4pP0VbMF06MH1mdW5jdGlvbiBaQW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihDPW5ldyBnSChuZXcgRHoobikpLGc9V2UoaWgscGcsMjgsZS5mLmUuYy5sZW5ndGgsMTYsMSksbDVlKGcsZy5sZW5ndGgpLG5bdC5hXT0wLEU9bmV3IEcoZS5mLmUpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwxNTMpLHcuYSE9dC5hJiYoblt3LmFdPUlpKSxLOCgkRShDLHcpLGFUKTtmb3IoO0MuYi5jLmxlbmd0aCE9MDspZm9yKEw9bChLb2UoQyksMTUzKSxnW0wuYV09ITAsbz1ZbnQobmV3IHNzZShlLmIsTCksMCk7by5jOylhPWwoRzZlKG8pLDI5MCksQj1oN24oYSxMKSwhZ1tCLmFdJiYobnMoYSwoVk4oKSxUSykpP2Y9emUoR2UoUShhLFRLKSkpOmY9ZS5jLHI9bltMLmFdK2YscjxuW0IuYV0mJihuW0IuYV09cixoZnQoQyxCKSxLOCgkRShDLEIpLGFUKSkpfWZ1bmN0aW9uIGVMbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2ZvcihmPWUubyxyPVdlKFZyLGRpLDI4LGYsMTUsMSksYT1XZShWcixkaSwyOCxmLDE1LDEpLG49ZS5wLHQ9V2UoVnIsZGksMjgsbiwxNSwxKSxvPVdlKFZyLGRpLDI4LG4sMTUsMSksRT0wO0U8ZjtFKyspe2ZvcihMPTA7TDxuJiYhcjYoZSxFLEwpOykrK0w7cltFXT1MfWZvcihDPTA7QzxmO0MrKyl7Zm9yKEw9bi0xO0w+PTAmJiFyNihlLEMsTCk7KS0tTDthW0NdPUx9Zm9yKHo9MDt6PG47eisrKXtmb3IoZz0wO2c8ZiYmIXI2KGUsZyx6KTspKytnO3Rbel09Z31mb3IoVj0wO1Y8bjtWKyspe2ZvcihnPWYtMTtnPj0wJiYhcjYoZSxnLFYpOyktLWc7b1tWXT1nfWZvcih3PTA7dzxmO3crKylmb3IoQj0wO0I8bjtCKyspdzxvW0JdJiZ3PnRbQl0mJkI8YVt3XSYmQj5yW3ddJiZGVShlLHcsQiwhMSwhMCl9ZnVuY3Rpb24gQWtlKGUpe3ZhciB0LG4scixhLG8sZixnLHc7bj1SdChCdChRKGUsKGIwKCksSzd0KSkpKSxvPWUuYS5jLmQsZz1lLmEuZC5kLG4/KGY9bWQobWEobmV3IGx0KGcuYSxnLmIpLG8pLC41KSx3PW1kKEphKGUuZSksLjUpLHQ9bWEoT2kobmV3IGx0KG8uYSxvLmIpLGYpLHcpLEZ5ZShlLmQsdCkpOihhPXplKEdlKFEoZS5hLG44dCkpKSxyPWUuZCxvLmE+PWcuYT9vLmI+PWcuYj8oci5hPWcuYSsoby5hLWcuYSkvMithLHIuYj1nLmIrKG8uYi1nLmIpLzItYS1lLmUuYik6KHIuYT1nLmErKG8uYS1nLmEpLzIrYSxyLmI9by5iKyhnLmItby5iKS8yK2EpOm8uYj49Zy5iPyhyLmE9by5hKyhnLmEtby5hKS8yK2Esci5iPWcuYisoby5iLWcuYikvMithKTooci5hPW8uYSsoZy5hLW8uYSkvMithLHIuYj1vLmIrKGcuYi1vLmIpLzItYS1lLmUuYikpfWZ1bmN0aW9uIEpBKGUpe3ZhciB0LG4scixhLG8sZixnLHc7aWYoIWUuZil7aWYodz1uZXcgX0ksZz1uZXcgX0ksdD1xTSxmPXQuYS56YyhlLHQpLGY9PW51bGwpe2ZvcihvPW5ldyBvcihkYyhlKSk7by5lIT1vLmkuZ2MoKTspYT1sKGdyKG8pLDI5KSxBcyh3LEpBKGEpKTt0LmEuQmMoZSkhPW51bGwsdC5hLmdjKCk9PTB9Zm9yKHI9KCFlLnMmJihlLnM9bmV3IG50KGRsLGUsMjEsMTcpKSxuZXcgb3IoZS5zKSk7ci5lIT1yLmkuZ2MoKTspbj1sKGdyKHIpLDE3OSksRGUobiwxMDIpJiZxcihnLGwobiwxOSkpO0l5KGcpLGUucj1uZXcgeml0KGUsKGwoT2UodHQoKGxiKCksVm4pLm8pLDYpLDE5KSxnLmkpLGcuZyksQXModyxlLnIpLEl5KHcpLGUuZj1uZXcgTjUoKGwoT2UodHQoVm4ubyksNSksMTkpLHcuaSksdy5nKSxZbChlKS5iJj0tM31yZXR1cm4gZS5mfWZ1bmN0aW9uIFFtdChlKXtzdyhlLG5ldyBYbShudyhadih0dyhldyhuZXcgeDEsbnYpLCJFTEsgRGlzQ28iKSwiTGF5b3V0ZXIgZm9yIGFycmFuZ2luZyB1bmNvbm5lY3RlZCBzdWJncmFwaHMuIFRoZSBzdWJncmFwaHMgdGhlbXNlbHZlcyBhcmUsIGJ5IGRlZmF1bHQsIG5vdCBsYWlkIG91dC4iKSxuZXcgejApKSksZ3QoZSxudixfaGUsSXQoWF9lKSksZ3QoZSxudixBaGUsSXQoVzBlKSksZ3QoZSxudixPeCxJdChJN3QpKSxndChlLG52LFh3LEl0KFlfZSkpLGd0KGUsbnYsYkVlLEl0KEI3dCkpLGd0KGUsbnYsbUVlLEl0KFA3dCkpLGd0KGUsbnYscEVlLEl0KEY3dCkpLGd0KGUsbnYsdkVlLEl0KE43dCkpLGd0KGUsbnYsQ0VlLEl0KE83dCkpLGd0KGUsbnYsU0VlLEl0KEswZSkpLGd0KGUsbnYsX0VlLEl0KFdfZSkpLGd0KGUsbnYsQUVlLEl0KHZLKSl9ZnVuY3Rpb24gelUoKXt6VT1VLGJQZT1oZShsZShrZiwxKSxBZCwyOCwxNSxbNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjUsNjYsNjcsNjgsNjksNzBdKSxTX3Q9bmV3IFJlZ0V4cChgWyAJClxyXGZdK2ApO3RyeXtqTT1oZShsZShQT24sMSksUm4sMjExNCwwLFtuZXcgS0koKGl5ZSgpLEtWKCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MnLidTU1NaIixNTygoenooKSx6eigpLE5MKSkpKSksbmV3IEtJKEtWKCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MnLidTU1MiLE1PKE5MKSkpLG5ldyBLSShLVigieXl5eS1NTS1kZCdUJ0hIOm1tOnNzIixNTyhOTCkpKSxuZXcgS0koS1YoInl5eXktTU0tZGQnVCdISDptbSIsTU8oTkwpKSksbmV3IEtJKEtWKCJ5eXl5LU1NLWRkIixNTyhOTCkpKV0pfWNhdGNoKGUpe2lmKGU9YnMoZSksIURlKGUsODIpKXRocm93IHVlKGUpfX1mdW5jdGlvbiB0TG4oZSx0KXt2YXIgbixyLGEsbztpZihhPUpsKGUuZCwxKSE9MCxyPWNrZShlLHQpLHI9PTAmJlJ0KEJ0KFEodC5qLChmdCgpLGpiKSkpKSlyZXR1cm4gMDshUnQoQnQoUSh0LmosKGZ0KCksamIpKSkpJiYhUnQoQnQoUSh0LmosajYpKSl8fHFlKFEodC5qLChOdCgpLHlnKSkpPT09cWUoKEVkKCksRTIpKT90LmMubWcodC5lLGEpOmE9UnQoQnQoUSh0LmosamIpKSksY1AoZSx0LGEsITApLFJ0KEJ0KFEodC5qLGo2KSkpJiZydCh0LmosajYsKEhuKCksITEpKSxSdChCdChRKHQuaixqYikpKSYmKHJ0KHQuaixqYiwoSG4oKSwhMSkpLHJ0KHQuaixqNiwhMCkpLG49Y2tlKGUsdCk7ZG97aWYodzdlKGUpLG49PTApcmV0dXJuIDA7YT0hYSxvPW4sY1AoZSx0LGEsITEpLG49Y2tlKGUsdCl9d2hpbGUobz5uKTtyZXR1cm4gb31mdW5jdGlvbiBKbXQoZSx0KXt2YXIgbixyLGEsbztpZihhPUpsKGUuZCwxKSE9MCxyPXhVKGUsdCkscj09MCYmUnQoQnQoUSh0LmosKGZ0KCksamIpKSkpKXJldHVybiAwOyFSdChCdChRKHQuaiwoZnQoKSxqYikpKSkmJiFSdChCdChRKHQuaixqNikpKXx8cWUoUSh0LmosKE50KCkseWcpKSk9PT1xZSgoRWQoKSxFMikpP3QuYy5tZyh0LmUsYSk6YT1SdChCdChRKHQuaixqYikpKSxjUChlLHQsYSwhMCksUnQoQnQoUSh0LmosajYpKSkmJnJ0KHQuaixqNiwoSG4oKSwhMSkpLFJ0KEJ0KFEodC5qLGpiKSkpJiYocnQodC5qLGpiLChIbigpLCExKSkscnQodC5qLGo2LCEwKSksbj14VShlLHQpO2Rve2lmKHc3ZShlKSxuPT0wKXJldHVybiAwO2E9IWEsbz1uLGNQKGUsdCxhLCExKSxuPXhVKGUsdCl9d2hpbGUobz5uKTtyZXR1cm4gb31mdW5jdGlvbiBMa2UoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCO3JldHVybiB3PW1hKG5ldyBsdChuLmEsbi5iKSxlKSxFPXcuYSp0LmItdy5iKnQuYSxDPXQuYSpyLmItdC5iKnIuYSxMPSh3LmEqci5iLXcuYipyLmEpL0MsQj1FL0MsQz09MD9FPT0wPyhhPU9pKG5ldyBsdChuLmEsbi5iKSxtZChuZXcgbHQoci5hLHIuYiksLjUpKSxvPXBiKGUsYSksZj1wYihPaShuZXcgbHQoZS5hLGUuYiksdCksYSksZz1iLk1hdGguc3FydChyLmEqci5hK3IuYipyLmIpKi41LG88ZiYmbzw9Zz9uZXcgbHQoZS5hLGUuYik6Zjw9Zz9PaShuZXcgbHQoZS5hLGUuYiksdCk6bnVsbCk6bnVsbDpMPj0wJiZMPD0xJiZCPj0wJiZCPD0xP09pKG5ldyBsdChlLmEsZS5iKSxtZChuZXcgbHQodC5hLHQuYiksTCkpOm51bGx9ZnVuY3Rpb24gbkxuKGUsdCxuKXt2YXIgcixhLG8sZixnO2lmKHI9bChRKGUsKE50KCksSjFlKSksMjEpLG4uYT50LmEmJihyLkhjKChZbSgpLEVNKSk/ZS5jLmErPShuLmEtdC5hKS8yOnIuSGMoVE0pJiYoZS5jLmErPW4uYS10LmEpKSxuLmI+dC5iJiYoci5IYygoWW0oKSxTTSkpP2UuYy5iKz0obi5iLXQuYikvMjpyLkhjKENNKSYmKGUuYy5iKz1uLmItdC5iKSksbChRKGUsKGZ0KCksTHUpKSwyMSkuSGMoKEhvKCksdmYpKSYmKG4uYT50LmF8fG4uYj50LmIpKWZvcihnPW5ldyBHKGUuYSk7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDEwKSxmLms9PShabigpLFVzKSYmKGE9bChRKGYsV2MpLDY0KSxhPT0oQ3QoKSxhcik/Zi5uLmErPW4uYS10LmE6YT09RHImJihmLm4uYis9bi5iLXQuYikpO289ZS5kLGUuZi5hPW4uYS1vLmItby5jLGUuZi5iPW4uYi1vLmQtby5hfWZ1bmN0aW9uIHJMbihlLHQsbil7dmFyIHIsYSxvLGYsZztpZihyPWwoUShlLChOdCgpLEoxZSkpLDIxKSxuLmE+dC5hJiYoci5IYygoWW0oKSxFTSkpP2UuYy5hKz0obi5hLXQuYSkvMjpyLkhjKFRNKSYmKGUuYy5hKz1uLmEtdC5hKSksbi5iPnQuYiYmKHIuSGMoKFltKCksU00pKT9lLmMuYis9KG4uYi10LmIpLzI6ci5IYyhDTSkmJihlLmMuYis9bi5iLXQuYikpLGwoUShlLChmdCgpLEx1KSksMjEpLkhjKChIbygpLHZmKSkmJihuLmE+dC5hfHxuLmI+dC5iKSlmb3IoZj1uZXcgRyhlLmEpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxMCksby5rPT0oWm4oKSxVcykmJihhPWwoUShvLFdjKSw2NCksYT09KEN0KCksYXIpP28ubi5hKz1uLmEtdC5hOmE9PURyJiYoby5uLmIrPW4uYi10LmIpKTtnPWUuZCxlLmYuYT1uLmEtZy5iLWcuYyxlLmYuYj1uLmItZy5kLWcuYX1mdW5jdGlvbiBpTG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCO2Zvcih0PWYydChlKSxDPShnPW5ldyBicih0KS5hLnZjKCkuS2MoKSxuZXcgTWkoZykpO0MuYS5PYigpOyl7Zm9yKEU9KGE9bChDLmEuUGIoKSw0NCksbChhLmxkKCksMTApKSxMPTAsQj0wLEw9RS5kLmQsQj1FLm8uYitFLmQuYSxlLmRbRS5wXT0wLG49RTsobz1lLmFbbi5wXSkhPUU7KXI9WjVuKG4sbyksdz0wLGUuYz09KHhkKCksVDIpP3c9ci5kLm4uYityLmQuYS5iLXIuYy5uLmItci5jLmEuYjp3PXIuYy5uLmIrci5jLmEuYi1yLmQubi5iLXIuZC5hLmIsZj16ZShlLmRbbi5wXSkrdyxlLmRbby5wXT1mLEw9Yi5NYXRoLm1heChMLG8uZC5kLWYpLEI9Yi5NYXRoLm1heChCLGYrby5vLmIrby5kLmEpLG49bztuPUU7ZG8gZS5kW24ucF09emUoZS5kW24ucF0pK0wsbj1lLmFbbi5wXTt3aGlsZShuIT1FKTtlLmJbRS5wXT1MK0J9fWZ1bmN0aW9uIFpBKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQjtmb3Iobz0wLGY9ZS50LGE9MCxyPTAsdz0wLEI9MCxMPTAsbiYmKGUubi5jLmxlbmd0aD0wLHZ0KGUubixuZXcgUEgoZS5zLGUudCxlLmkpKSksZz0wLEM9bmV3IEcoZS5iKTtDLmE8Qy5jLmMubGVuZ3RoOylFPWwocmUoQyksMjcpLG8rRS5nKyhnPjA/ZS5pOjApPnQmJnc+MCYmKG89MCxmKz13K2UuaSxhPWIuTWF0aC5tYXgoYSxCKSxyKz13K2UuaSx3PTAsQj0wLG4mJigrK0wsdnQoZS5uLG5ldyBQSChlLnMsZixlLmkpKSksZz0wKSxCKz1FLmcrKGc+MD9lLmk6MCksdz1iLk1hdGgubWF4KHcsRS5mKSxuJiZleGUobChqdChlLm4sTCksMjA5KSxFKSxvKz1FLmcrKGc+MD9lLmk6MCksKytnO3JldHVybiBhPWIuTWF0aC5tYXgoYSxCKSxyKz13LG4mJihlLnI9YSxlLmQ9cixpeGUoZS5qKSksbmV3IGVmKGUucyxlLnQsYSxyKX1mdW5jdGlvbiBnbGUoZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihlLmI9ITEsTD1ncyx3PWlhLEI9Z3MsRT1pYSxyPWUuZS5hLmVjKCkuS2MoKTtyLk9iKCk7KWZvcihuPWwoci5QYigpLDI3MiksYT1uLmEsTD1iLk1hdGgubWluKEwsYS5jKSx3PWIuTWF0aC5tYXgodyxhLmMrYS5iKSxCPWIuTWF0aC5taW4oQixhLmQpLEU9Yi5NYXRoLm1heChFLGEuZCthLmEpLGY9bmV3IEcobi5jKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksNDA3KSx0PW8uYSx0LmE/KEM9YS5kK28uYi5iLGc9QytvLmMsQj1iLk1hdGgubWluKEIsQyksRT1iLk1hdGgubWF4KEUsZykpOihDPWEuYytvLmIuYSxnPUMrby5jLEw9Yi5NYXRoLm1pbihMLEMpLHc9Yi5NYXRoLm1heCh3LGcpKTtlLmE9bmV3IGx0KHctTCxFLUIpLGUuYz1uZXcgbHQoTCtlLmQuYSxCK2UuZC5iKX1mdW5jdGlvbiBkNihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O2lmKCFlLmEpe2lmKGUubz1udWxsLHc9bmV3IG1RZShlKSx0PW5ldyBEUyxuPXFNLGc9bi5hLnpjKGUsbiksZz09bnVsbCl7Zm9yKGY9bmV3IG9yKGRjKGUpKTtmLmUhPWYuaS5nYygpOylvPWwoZ3IoZiksMjkpLEFzKHcsZDYobykpO24uYS5CYyhlKSE9bnVsbCxuLmEuZ2MoKT09MH1mb3IoYT0oIWUucyYmKGUucz1uZXcgbnQoZGwsZSwyMSwxNykpLG5ldyBvcihlLnMpKTthLmUhPWEuaS5nYygpOylyPWwoZ3IoYSksMTc5KSxEZShyLDMzMSkmJnFyKHQsbChyLDM1KSk7SXkodCksZS5rPW5ldyBxaXQoZSwobChPZSh0dCgobGIoKSxWbikubyksNyksMTkpLHQuaSksdC5nKSxBcyh3LGUuayksSXkodyksZS5hPW5ldyBONSgobChPZSh0dChWbi5vKSw0KSwxOSksdy5pKSx3LmcpLFlsKGUpLmImPS0yfXJldHVybiBlLmF9ZnVuY3Rpb24gTWtlKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDO2lmKEM9V3UoZS5lLkRoKCksdCksYT0wLG89bChlLmcsMTI0KSx3PW51bGwsRm8oKSxsKHQsNjkpLnhrKCkpe2ZvcihnPTA7ZzxlLmk7KytnKWlmKGY9b1tnXSxDLmFtKGYuTGsoKSkpe2lmKFBpKGYsbikpe3c9ZjticmVha30rK2F9fWVsc2UgaWYobiE9bnVsbCl7Zm9yKGc9MDtnPGUuaTsrK2cpaWYoZj1vW2ddLEMuYW0oZi5MaygpKSl7aWYoUGkobixmLm1kKCkpKXt3PWY7YnJlYWt9KythfX1lbHNlIGZvcihnPTA7ZzxlLmk7KytnKWlmKGY9b1tnXSxDLmFtKGYuTGsoKSkpe2lmKGYubWQoKT09bnVsbCl7dz1mO2JyZWFrfSsrYX1yZXR1cm4gdyYmKGhoKGUuZSkmJihFPXQuSmsoKT9uZXcgRW9lKGUuZSw0LHQsbixudWxsLGEsITApOmRiKGUsdC50aygpPzI6MSx0LG4sdC5paygpLC0xLCEwKSxyP3IubmooRSk6cj1FKSxyPWhQKGUsdyxyKSkscn1mdW5jdGlvbiBwbGUoZSx0LG4scixhLG8sZil7dmFyIGcsdyxFLEMsTCxCLHosVixKO3N3aXRjaChWPTAsSj0wLHc9YS5jLGc9YS5iLEM9bi5mLHo9bi5nLHQuZyl7Y2FzZSAwOlY9ci5pK3IuZytmLGUuYz9KPUV4bihWLG8scixmKTpKPXIuaixCPWIuTWF0aC5tYXgodyxWK3opLEU9Yi5NYXRoLm1heChnLEorQyk7YnJlYWs7Y2FzZSAxOko9ci5qK3IuZitmLGUuYz9WPWt4bihKLG8scixmKTpWPXIuaSxCPWIuTWF0aC5tYXgodyxWK3opLEU9Yi5NYXRoLm1heChnLEorQyk7YnJlYWs7Y2FzZSAyOlY9dytmLEo9MCxCPXcrZit6LEU9Yi5NYXRoLm1heChnLEMpO2JyZWFrO2Nhc2UgMzpWPTAsSj1nK2YsQj1iLk1hdGgubWF4KHcseiksRT1nK2YrQzticmVhaztkZWZhdWx0OnRocm93IHVlKG5ldyBZbigiSWxsZWdhbFBsYWNlbWVudE9wdGlvbi4iKSl9cmV0dXJuIEw9bmV3IHo4ZShlLmEsQixFLHQsVixKKSxMfWZ1bmN0aW9uIHNMbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEI7aWYoZz1lLmQsTD1sKFEoZSwoZnQoKSxReCkpLDE1KSx0PWwoUShlLEd4KSwxNSksISghTCYmIXQpKXtpZihvPXplKEdlKFB5KGUsKE50KCksb2RlKSkpKSxmPXplKEdlKFB5KGUsdERlKSkpLEI9MCxMKXtmb3IoRT0wLGE9TC5LYygpO2EuT2IoKTspcj1sKGEuUGIoKSwxMCksRT1iLk1hdGgubWF4KEUsci5vLmIpLEIrPXIuby5hO0IrPW8qKEwuZ2MoKS0xKSxnLmQrPUUrZn1pZihuPTAsdCl7Zm9yKEU9MCxhPXQuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTApLEU9Yi5NYXRoLm1heChFLHIuby5iKSxuKz1yLm8uYTtuKz1vKih0LmdjKCktMSksZy5hKz1FK2Z9dz1iLk1hdGgubWF4KEIsbiksdz5lLm8uYSYmKEM9KHctZS5vLmEpLzIsZy5iPWIuTWF0aC5tYXgoZy5iLEMpLGcuYz1iLk1hdGgubWF4KGcuYyxDKSl9fWZ1bmN0aW9uIGFMbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O2ZvcihvPW5ldyBLb3QsRmxuKG8sKGh4KCksZFN0KSkscj0oYT1hY2UoZSxXZSh6dCxkdCwyLDAsNiwxKSksbmV3IGtyKG5ldyBJbChuZXcgYXNlKGUsYSkuYikpKTtyLmI8ci5kLmdjKCk7KW49KG1yKHIuYjxyLmQuZ2MoKSksZWkoci5kLlhiKHIuYz1yLmIrKykpKSxmPUZrZShRYixuKSxmJiYodD1XZyhlLG4pLHQudGUoKT9nPXQudGUoKS5hOnQucWUoKT9nPSIiK3QucWUoKS5hOnQucmUoKT9nPSIiK3QucmUoKS5hOmc9dC5JYigpLHc9UGtlKGYsZyksdyE9bnVsbCYmKCh2bChmLmosKHIxKCksaGEpKXx8dmwoZi5qLFBuKSkmJl9OKFdvZShvLEFpKSxmLHcpLHZsKGYuaix6ZCkmJl9OKFdvZShvLGpzKSxmLHcpLHZsKGYuaix5dikmJl9OKFdvZShvLEhsKSxmLHcpLHZsKGYuaixTMikmJl9OKFdvZShvLGVjKSxmLHcpKSk7cmV0dXJuIG99ZnVuY3Rpb24gcFAoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7aWYoYT1sKGUuZywxMjQpLHVwKGUuZSx0KSlyZXR1cm4gRm8oKSxsKHQsNjkpLnhrKCk/bmV3IG5IKHQsZSk6bmV3IHlPKHQsZSk7Zm9yKEU9V3UoZS5lLkRoKCksdCkscj0wLGc9MDtnPGUuaTsrK2cpe2lmKG89YVtnXSxmPW8uTGsoKSxFLmFtKGYpKXtpZihGbygpLGwodCw2OSkueGsoKSlyZXR1cm4gbztpZihmPT0oa3goKSx1OSl8fGY9PWM5KXtmb3Iodz1uZXcgVGgoeGMoby5tZCgpKSk7KytnPGUuaTspbz1hW2ddLGY9by5MaygpLChmPT11OXx8Zj09YzkpJiZoaSh3LHhjKG8ubWQoKSkpO3JldHVybiBsNGUobCh0LkhrKCksMTU2KSx3LmEpfWVsc2UgcmV0dXJuIEM9by5tZCgpLEMhPW51bGwmJm4mJkRlKHQsMTAyKSYmbCh0LDE5KS5CYiZJbyYmKEM9ekEoZSx0LGcscixDKSksQ30rK3J9cmV0dXJuIHQuaWsoKX1mdW5jdGlvbiBxVShlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEU7aWYodz1XdShlLmUuRGgoKSx0KSxvPWwoZS5nLDEyNCksdXAoZS5lLHQpKXtmb3IoYT0wLGc9MDtnPGUuaTsrK2cpaWYoZj1vW2ddLHcuYW0oZi5MaygpKSl7aWYoYT09bilyZXR1cm4gRm8oKSxsKHQsNjkpLnhrKCk/ZjooRT1mLm1kKCksRSE9bnVsbCYmciYmRGUodCwxMDIpJiZsKHQsMTkpLkJiJklvJiYoRT16QShlLHQsZyxhLEUpKSxFKTsrK2F9dGhyb3cgdWUobmV3IHRjKENMK24rYXYrYSkpfWVsc2V7Zm9yKGE9MCxnPTA7ZzxlLmk7KytnKXtpZihmPW9bZ10sdy5hbShmLkxrKCkpKXJldHVybiBGbygpLGwodCw2OSkueGsoKT9mOihFPWYubWQoKSxFIT1udWxsJiZyJiZEZSh0LDEwMikmJmwodCwxOSkuQmImSW8mJihFPXpBKGUsdCxnLGEsRSkpLEUpOysrYX1yZXR1cm4gdC5paygpfX1mdW5jdGlvbiBibGUoKXtibGU9VSx4NnQ9aGUobGUoVnIsMSksZGksMjgsMTUsW2xvLDExNjIyNjE0NjcsckwsMTIyMDcwMzEyNSwzNjI3OTcwNTYsMTk3NzMyNjc0MyxyTCwzODc0MjA0ODksSlUsMjE0MzU4ODgxLDQyOTk4MTY5Niw4MTU3MzA3MjEsMTQ3NTc4OTA1NiwxNzA4NTkzNzUsMjY4NDM1NDU2LDQxMDMzODY3Myw2MTIyMjAwMzIsODkzODcxNzM5LDEyOGU3LDE4MDEwODg1NDEsMTEzMzc5OTA0LDE0ODAzNTg4OSwxOTExMDI5NzYsMjQ0MTQwNjI1LDMwODkxNTc3NiwzODc0MjA0ODksNDgxODkwMzA0LDU5NDgyMzMyMSw3MjllNiw4ODc1MDM2ODEsckwsMTI5MTQ2Nzk2OSwxNTQ0ODA0NDE2LDE4MzgyNjU2MjUsNjA0NjYxNzZdKSxrNnQ9aGUobGUoVnIsMSksZGksMjgsMTUsWy0xLC0xLDMxLDE5LDE1LDEzLDExLDExLDEwLDksOSw4LDgsOCw4LDcsNyw3LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDVdKX1mdW5jdGlvbiBtbGUoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtpZihmPWUuZSx3PXQuZSx3PT0wKXJldHVybiBlO2lmKGY9PTApcmV0dXJuIHQuZT09MD90Om5ldyBJbSgtdC5lLHQuZCx0LmEpO2lmKG89ZS5kLGc9dC5kLG8rZz09MilyZXR1cm4gbj12YShlLmFbMF0sVm8pLHI9dmEodC5hWzBdLFZvKSxmPDAmJihuPXIyKG4pKSx3PDAmJihyPXIyKHIpKSxDZCgpLEFxKERmKG4sciksMCk/a2IoRGYobixyKSk6Sl8oa2IocjIoRGYobixyKSkpKTtpZihhPW8hPWc/bz5nPzE6LTE6VzdlKGUuYSx0LmEsbyksYT09LTEpTD0tdyxDPWY9PXc/RG9lKHQuYSxnLGUuYSxvKTpPb2UodC5hLGcsZS5hLG8pO2Vsc2UgaWYoTD1mLGY9PXcpe2lmKGE9PTApcmV0dXJuIENkKCksQkw7Qz1Eb2UoZS5hLG8sdC5hLGcpfWVsc2UgQz1Pb2UoZS5hLG8sdC5hLGcpO3JldHVybiBFPW5ldyBJbShMLEMubGVuZ3RoLEMpLGlBKEUpLEV9ZnVuY3Rpb24gb0xuKGUsdCl7dmFyIG4scixhLG87aWYobz1QbXQodCksIXQuYyYmKHQuYz1uZXcgbnQoSGwsdCw5LDkpKSxJcyhuZXcgYm4obnVsbCwoIXQuYyYmKHQuYz1uZXcgbnQoSGwsdCw5LDkpKSxuZXcga24odC5jLDE2KSkpLG5ldyAkV2UobykpLGE9bChRKG8sKGZ0KCksTHUpKSwyMSksWk1uKHQsYSksYS5IYygoSG8oKSx2ZikpKWZvcihyPW5ldyBvcigoIXQuYyYmKHQuYz1uZXcgbnQoSGwsdCw5LDkpKSx0LmMpKTtyLmUhPXIuaS5nYygpOyluPWwoZ3IociksMTIzKSxBRG4oZSx0LG8sbik7cmV0dXJuIGwoYXQodCwoTnQoKSxidikpLDE4MSkuZ2MoKSE9MCYmX2J0KHQsbyksUnQoQnQoUShvLFhNZSkpKSYmYS5GYyhuVyksbnMobyxDQikmJk5KZShuZXcgRDhlKHplKEdlKFEobyxDQikpKSksbykscWUoYXQodCxwNCkpPT09cWUoKHJwKCksQTIpKT9KSW4oZSx0LG8pOkJJbihlLHQsbyksb31mdW5jdGlvbiBjTG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdztmb3IoYT1uZXcgRyhlLmIpO2EuYTxhLmMuYy5sZW5ndGg7KWZvcihyPWwocmUoYSksMzApLGY9bmV3IEcoX3coci5hKSk7Zi5hPGYuYy5jLmxlbmd0aDspaWYobz1sKHJlKGYpLDEwKSxzaHQobykmJihuPWwoUShvLChmdCgpLGMzKSksMzEzKSwhbi5nJiZuLmQpKWZvcih0PW4sdz1uLmQ7dzspUmJ0KHcuaSx3LmssITEsITApLHVOKHQuYSksdU4ody5pKSx1Tih3LmspLHVOKHcuYiksRmEody5jLHQuYy5kKSxGYSh0LmMsbnVsbCksVmEodC5hLG51bGwpLFZhKHcuaSxudWxsKSxWYSh3LmssbnVsbCksVmEody5iLG51bGwpLGc9bmV3IG82ZSh0Lmksdy5hLHQuZSx3Lmosdy5mKSxnLms9dC5rLGcubj10Lm4sZy5iPXQuYixnLmM9dy5jLGcuZz10LmcsZy5kPXcuZCxydCh0LmksYzMsZykscnQody5hLGMzLGcpLHc9dy5kLHQ9Z31mdW5jdGlvbiBUdShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2lmKGU9PW51bGwpcmV0dXJuIG51bGw7aWYobz1lLmxlbmd0aCxvPT0wKXJldHVybiIiO2Zvcih3PVdlKGtmLEFkLDI4LG8sMTUsMSksR2EoMCxvLGUubGVuZ3RoKSxHYSgwLG8sdy5sZW5ndGgpLEhzdChlLDAsbyx3LDApLG49bnVsbCxnPXQsYT0wLGY9MDthPG87YSsrKXI9d1thXSxDd3QoKSxyPD0zMiYmeWVbcl0mMj9nPyghbiYmKG49bmV3IEFmKGUpKSxLaG4obixhLWYrKykpOihnPXQsciE9MzImJighbiYmKG49bmV3IEFmKGUpKSxoY2UobixhLWYsYS1mKzEsU3RyaW5nLmZyb21DaGFyQ29kZSgzMikpKSk6Zz0hMTtyZXR1cm4gZz9uPyhvPW4uYS5sZW5ndGgsbz4wP3RmKG4uYSwwLG8tMSk6IiIpOihHYSgwLG8tMSxlLmxlbmd0aCksZS5zdWJzdHIoMCxvLTEpKTpuP24uYTplfWZ1bmN0aW9uIHVMbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2Zvcih0LlVnKCJTb3J0IEJ5IElucHV0IE1vZGVsICIrUShlLChOdCgpLHlnKSksMSksYT0wLHI9bmV3IEcoZS5iKTtyLmE8ci5jLmMubGVuZ3RoOyl7Zm9yKG49bChyZShyKSwzMCksdz1hPT0wPzA6YS0xLGc9bChqdChlLmIsdyksMzApLGY9bmV3IEcobi5hKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTApLHFlKFEobyxNcykpIT09cWUoKFJhKCksVHYpKSYmcWUoUShvLE1zKSkhPT1xZShNdSkmJihDbigpLFZzKG8uaixuZXcgVjB0KGcsbChRKGUseWcpLDI4NCksaWd0KG8pLFJ0KEJ0KFEoZSxRMWUpKSkpKSx0LmJoKCJOb2RlICIrbysiIHBvcnRzOiAiK28uaikpO0NuKCksVnMobi5hLG5ldyBwZnQoZyxsKFEoZSx5ZyksMjg0KSxsKFEoZSxDTWUpLDM5MCkpKSx0LmJoKCJMYXllciAiK2ErIjogIituKSwrK2F9dC5WZygpfWZ1bmN0aW9uIEt5KGUsdCl7dmFyIG4scixhLG8sZjtpZihmPWwodCwxMzgpLGM2KGUpLGM2KGYpLGYuYiE9bnVsbCl7aWYoZS5jPSEwLGUuYj09bnVsbCl7ZS5iPVdlKFZyLGRpLDI4LGYuYi5sZW5ndGgsMTUsMSkscHUoZi5iLDAsZS5iLDAsZi5iLmxlbmd0aCk7cmV0dXJufWZvcihvPVdlKFZyLGRpLDI4LGUuYi5sZW5ndGgrZi5iLmxlbmd0aCwxNSwxKSxuPTAscj0wLGE9MDtuPGUuYi5sZW5ndGh8fHI8Zi5iLmxlbmd0aDspbj49ZS5iLmxlbmd0aD8ob1thKytdPWYuYltyKytdLG9bYSsrXT1mLmJbcisrXSk6cj49Zi5iLmxlbmd0aD8ob1thKytdPWUuYltuKytdLG9bYSsrXT1lLmJbbisrXSk6Zi5iW3JdPGUuYltuXXx8Zi5iW3JdPT09ZS5iW25dJiZmLmJbcisxXTxlLmJbbisxXT8ob1thKytdPWYuYltyKytdLG9bYSsrXT1mLmJbcisrXSk6KG9bYSsrXT1lLmJbbisrXSxvW2ErK109ZS5iW24rK10pO2UuYj1vfX1mdW5jdGlvbiBsTG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtyZXR1cm4gbj1SdChCdChRKGUsKGZ0KCksZjQpKSkpLGc9UnQoQnQoUSh0LGY0KSkpLHI9bChRKGUsbzEpLDEyKSx3PWwoUSh0LG8xKSwxMiksYT1sKFEoZSwkZiksMTIpLEU9bChRKHQsJGYpLDEyKSxDPSEhciYmcj09dyxMPSEhYSYmYT09RSwhbiYmIWc/bmV3IHc0ZShsKHJlKG5ldyBHKGUuaikpLDEyKS5wPT1sKHJlKG5ldyBHKHQuaikpLDEyKS5wLEMsTCk6KG89KCFSdChCdChRKGUsZjQpKSl8fFJ0KEJ0KFEoZSxrQikpKSkmJighUnQoQnQoUSh0LGY0KSkpfHxSdChCdChRKHQsa0IpKSkpLGY9KCFSdChCdChRKGUsZjQpKSl8fCFSdChCdChRKGUsa0IpKSkpJiYoIVJ0KEJ0KFEodCxmNCkpKXx8IVJ0KEJ0KFEodCxrQikpKSksbmV3IHc0ZShDJiZvfHxMJiZmLEMsTCkpfWZ1bmN0aW9uIFptdChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O2ZvcihyPTAsbj0wLHc9bmV3IG9zLHQ9MCxnPW5ldyBHKGUubik7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDIwOSksZi5jLmMubGVuZ3RoPT0wP0NzKHcsZix3LmMuYix3LmMpOihyPWIuTWF0aC5tYXgocixmLmQpLG4rPWYuYSsodD4wP2UuaTowKSksKyt0O2ZvcihnOGUoZS5uLHcpLGUuZD1uLGUucj1yLGUuZz0wLGUuZj0wLGUuZT0wLGUubz1ncyxlLnA9Z3Msbz1uZXcgRyhlLmIpO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSwyNyksZS5wPWIuTWF0aC5taW4oZS5wLGEuZyksZS5nPWIuTWF0aC5tYXgoZS5nLGEuZyksZS5mPWIuTWF0aC5tYXgoZS5mLGEuZiksZS5vPWIuTWF0aC5taW4oZS5vLGEuZiksZS5lKz1hLmYrZS5pO2UuYT1lLmUvZS5iLmMubGVuZ3RoLWUuaSooKGUuYi5jLmxlbmd0aC0xKS9lLmIuYy5sZW5ndGgpLGl4ZShlLmopfWZ1bmN0aW9uIGV2dChlKXt2YXIgdCxuLHIsYTtyZXR1cm4gZS5EYiY2ND9qY2UoZSk6KHQ9bmV3IFRoKGFTZSkscj1lLmsscj9oaShoaSgodC5hKz0nICInLHQpLHIpLCciJyk6KCFlLm4mJihlLm49bmV3IG50KGVjLGUsMSw3KSksZS5uLmk+MCYmKGE9KCFlLm4mJihlLm49bmV3IG50KGVjLGUsMSw3KSksbChPZShlLm4sMCksMTM1KSkuYSwhYXx8aGkoaGkoKHQuYSs9JyAiJyx0KSxhKSwnIicpKSksbj0oIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSwhKGUuYi5pPD0xJiYoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMuaTw9MSkpKSxuP3QuYSs9IiBbIjp0LmErPSIgIixoaSh0LEV5ZShuZXcgWmllLG5ldyBvcihlLmIpKSksbiYmKHQuYSs9Il0iKSx0LmErPVBoZSxuJiYodC5hKz0iWyIpLGhpKHQsRXllKG5ldyBaaWUsbmV3IG9yKGUuYykpKSxuJiYodC5hKz0iXSIpLHQuYSl9ZnVuY3Rpb24gaExuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbjtmb3IoWmU9ZS5jLG90PXQuYyxuPWdjKFplLmEsZSwwKSxyPWdjKG90LmEsdCwwKSxNZT1sKFJ3KGUsKHFvKCksJGwpKS5LYygpLlBiKCksMTIpLGFuPWwoUncoZSx6dSkuS2MoKS5QYigpLDEyKSwkZT1sKFJ3KHQsJGwpLktjKCkuUGIoKSwxMiksQm49bChSdyh0LHp1KS5LYygpLlBiKCksMTIpLGZlPWtkKE1lLmUpLFN0PWtkKGFuLmcpLFRlPWtkKCRlLmUpLGNuPWtkKEJuLmcpLEZ5KGUscixvdCksZj1UZSxDPTAsVj1mLmxlbmd0aDtDPFY7KytDKWE9ZltDXSxGYShhLE1lKTtmb3IoZz1jbixMPTAsSj1nLmxlbmd0aDtMPEo7KytMKWE9Z1tMXSxwbyhhLGFuKTtmb3IoRnkodCxuLFplKSx3PWZlLEI9MCx0ZT13Lmxlbmd0aDtCPHRlOysrQilhPXdbQl0sRmEoYSwkZSk7Zm9yKG89U3QsRT0wLHo9by5sZW5ndGg7RTx6OysrRSlhPW9bRV0scG8oYSxCbil9ZnVuY3Rpb24gZkxuKGUpe3ZhciB0LG4scixhLG8sZixnO2ZvcihmPWwoYXQoZSwoSDUoKSxZNikpLDI3KSxyPW5ldyBvcigoIWYuZSYmKGYuZT1uZXcgTG4oanMsZiw3LDQpKSxmLmUpKTtyLmUhPXIuaS5nYygpOyluPWwoZ3IociksNzQpLGc9bmV3IGx0KGwoT2UoKCFuLmEmJihuLmE9bmV3IG50KGNzLG4sNiw2KSksbi5hKSwwKSwxNjYpLmosbChPZSgoIW4uYSYmKG4uYT1uZXcgbnQoY3Msbiw2LDYpKSxuLmEpLDApLDE2Nikuayksbz1uZXcgbHQobChPZSgoIW4uYSYmKG4uYT1uZXcgbnQoY3Msbiw2LDYpKSxuLmEpLDApLDE2NikuYixsKE9lKCghbi5hJiYobi5hPW5ldyBudChjcyxuLDYsNikpLG4uYSksMCksMTY2KS5jKSxhPW5ldyBsdChvLmEtZy5hLG8uYi1nLmIpLHQ9Yi5NYXRoLmF0YW4yKGEuYixhLmEpLGwoT2UoKCFuLmMmJihuLmM9bmV3IExuKF9yLG4sNSw4KSksbi5jKSwwKSw4NCkucWYoKFNiKCksZWdlKSx0KX1mdW5jdGlvbiBkTG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7Zm9yKHQuVWcoIkludGVyYWN0aXZlIE5vZGUgUmVvcmRlcmVyIiwxKSxDPSghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSxnPW5ldyBidCxhPW5ldyBvcihDKTthLmUhPWEuaS5nYygpOyluPWwoZ3IoYSksMjcpLFAxKG4sKHoxKCksakIpKSYmJG4oZy5jLG4pO2ZvcihvPW5ldyBHKGcpO28uYTxvLmMuYy5sZW5ndGg7KW49bChyZShvKSwyNyksc1YoQyxuKTtmb3IoQ24oKSxWcyhnLG5ldyBFbmUpLGY9bmV3IEcoZyk7Zi5hPGYuYy5jLmxlbmd0aDspbj1sKHJlKGYpLDI3KSxFPWwoYXQobiwoejEoKSxqQikpLDE3KS5hLEU9Yi5NYXRoLm1pbihFLEMuaSksX0EoQyxFLG4pO2Zvcih3PTAscj1uZXcgb3IoQyk7ci5lIT1yLmkuZ2MoKTspbj1sKGdyKHIpLDI3KSxIaShuLCh6MSgpLGVPZSkscHQodykpLCsrdzt0LlZnKCl9ZnVuY3Rpb24gRGtlKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDO3JldHVybiBiLk1hdGguYWJzKHQucy10LmMpPERkfHxiLk1hdGguYWJzKG4ucy1uLmMpPERkPzA6KHI9b2J0KGUsdC5qLG4uZSksYT1vYnQoZSxuLmosdC5lKSxvPXI9PS0xfHxhPT0tMSxmPTAsbz8ocj09LTEmJihuZXcgUG0oKEowKCkscWIpLG4sdCwxKSwrK2YpLGE9PS0xJiYobmV3IFBtKChKMCgpLHFiKSx0LG4sMSksKytmKSk6KGc9ZTYodC5qLG4ucyxuLmMpLGcrPWU2KG4uZSx0LnMsdC5jKSx3PWU2KG4uaix0LnMsdC5jKSx3Kz1lNih0LmUsbi5zLG4uYyksRT1yKzE2KmcsQz1hKzE2KncsRTxDP25ldyBQbSgoSjAoKSxFNCksdCxuLEMtRSk6RT5DP25ldyBQbSgoSjAoKSxFNCksbix0LEUtQyk6RT4wJiZDPjAmJihuZXcgUG0oKEowKCksRTQpLHQsbiwwKSxuZXcgUG0oRTQsbix0LDApKSksZil9ZnVuY3Rpb24gZ0xuKGUsdCxuKXt2YXIgcixhLG87Zm9yKGUuYT1uZXcgYnQsbz1Scih0LmIsMCk7by5iIT1vLmQuYzspe2ZvcihhPWwoQnIobyksNDApO2woUShhLChIYygpLCRkKSksMTcpLmE+ZS5hLmMubGVuZ3RoLTE7KXZ0KGUuYSxuZXcgY2EoeTYsaENlKSk7cj1sKFEoYSwkZCksMTcpLmEsbj09KEpzKCksdWMpfHxuPT12Yz8oYS5lLmE8emUoR2UobChqdChlLmEsciksNDIpLmEpKSYmVmUobChqdChlLmEsciksNDIpLGEuZS5hKSxhLmUuYSthLmYuYT56ZShHZShsKGp0KGUuYSxyKSw0MikuYikpJiZjdChsKGp0KGUuYSxyKSw0MiksYS5lLmErYS5mLmEpKTooYS5lLmI8emUoR2UobChqdChlLmEsciksNDIpLmEpKSYmVmUobChqdChlLmEsciksNDIpLGEuZS5iKSxhLmUuYithLmYuYj56ZShHZShsKGp0KGUuYSxyKSw0MikuYikpJiZjdChsKGp0KGUuYSxyKSw0MiksYS5lLmIrYS5mLmIpKX19ZnVuY3Rpb24gdHZ0KGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDO2lmKG89elYociksZz1SdChCdChRKHIsKE50KCksVk1lKSkpKSwoZ3x8UnQoQnQoUShlLGJXKSkpKSYmIVA1KGwoUShlLE1zKSwxMDEpKSlhPWd4KG8pLHc9dmtlKGUsbixuPT0ocW8oKSx6dSk/YTpCTihhKSk7ZWxzZSBzd2l0Y2godz1uZXcgZ3UsTWModyxlKSx0PyhDPXcubixDLmE9dC5hLWUubi5hLEMuYj10LmItZS5uLmIsb3B0KEMsMCwwLGUuby5hLGUuby5iKSxsYSh3LGttdCh3LG8pKSk6KGE9Z3gobyksbGEodyxuPT0ocW8oKSx6dSk/YTpCTihhKSkpLGY9bChRKHIsKGZ0KCksTHUpKSwyMSksRT13Lmosby5nKXtjYXNlIDI6Y2FzZSAxOihFPT0oQ3QoKSxRbil8fEU9PURyKSYmZi5GYygoSG8oKSxCNikpO2JyZWFrO2Nhc2UgNDpjYXNlIDM6KEU9PShDdCgpLGFyKXx8RT09ZXIpJiZmLkZjKChIbygpLEI2KSl9cmV0dXJuIHd9ZnVuY3Rpb24gbnZ0KGUsdCl7dmFyIG4scixhLG8sZixnO2ZvcihmPW5ldyBxbShuZXcgU3IoZS5mLmIpLmEpO2YuYjspe2lmKG89TncoZiksYT1sKG8ubGQoKSw2MDIpLHQ9PTEpe2lmKGEuQWYoKSE9KEpzKCksd2YpJiZhLkFmKCkhPVExKWNvbnRpbnVlfWVsc2UgaWYoYS5BZigpIT0oSnMoKSx1YykmJmEuQWYoKSE9dmMpY29udGludWU7c3dpdGNoKHI9bChsKG8ubWQoKSw0MikuYiw4NiksZz1sKGwoby5tZCgpLDQyKS5hLDE5NCksbj1nLmMsYS5BZigpLmcpe2Nhc2UgMjpyLmcuYz1lLmUuYSxyLmcuYj1iLk1hdGgubWF4KDEsci5nLmIrbik7YnJlYWs7Y2FzZSAxOnIuZy5jPXIuZy5jK24sci5nLmI9Yi5NYXRoLm1heCgxLHIuZy5iLW4pO2JyZWFrO2Nhc2UgNDpyLmcuZD1lLmUuYixyLmcuYT1iLk1hdGgubWF4KDEsci5nLmErbik7YnJlYWs7Y2FzZSAzOnIuZy5kPXIuZy5kK24sci5nLmE9Yi5NYXRoLm1heCgxLHIuZy5hLW4pfX19ZnVuY3Rpb24gcExuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtmb3IoZz1XZShWcixkaSwyOCx0LmIuYy5sZW5ndGgsMTUsMSksRT1XZShsMWUsaXQsMjczLHQuYi5jLmxlbmd0aCwwLDEpLHc9V2Uod2csbTIsMTAsdC5iLmMubGVuZ3RoLDAsMSksTD1lLmEsQj0wLHo9TC5sZW5ndGg7Qjx6OysrQil7Zm9yKEM9TFtCXSxKPTAsZj1uZXcgRyhDLmUpO2YuYTxmLmMuYy5sZW5ndGg7KWE9bChyZShmKSwxMCkscj1veWUoYS5jKSwrK2dbcl0sVj16ZShHZShRKHQsKE50KCkseDApKSkpLGdbcl0+MCYmd1tyXSYmKFY9ajUoZS5iLHdbcl0sYSkpLEo9Yi5NYXRoLm1heChKLGEuYy5jLmIrVik7Zm9yKG89bmV3IEcoQy5lKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTApLGEubi5iPUorYS5kLmQsbj1hLmMsbi5jLmI9SithLmQuZCthLm8uYithLmQuYSxFW2djKG4uYi5iLG4sMCldPWEuayx3W2djKG4uYi5iLG4sMCldPWF9fWZ1bmN0aW9uIHJ2dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKHI9bmV3IGhyKGRyKGNwKHQpLmEuS2MoKSxuZXcgaikpO2pyKHIpOyluPWwoeHIociksNzQpLERlKE9lKCghbi5iJiYobi5iPW5ldyBMbihfcixuLDQsNykpLG4uYiksMCksMTkzKXx8KHc9YmMobChPZSgoIW4uYyYmKG4uYz1uZXcgTG4oX3Isbiw1LDgpKSxuLmMpLDApLDg0KSkscUEobil8fChmPXQuaSt0LmcvMixnPXQuait0LmYvMixDPXcuaSt3LmcvMixMPXcuait3LmYvMixCPW5ldyBxYSxCLmE9Qy1mLEIuYj1MLWcsbz1uZXcgbHQoQi5hLEIuYiksUkUobyx0LmcsdC5mKSxCLmEtPW8uYSxCLmItPW8uYixmPUMtQi5hLGc9TC1CLmIsRT1uZXcgbHQoQi5hLEIuYiksUkUoRSx3Lmcsdy5mKSxCLmEtPUUuYSxCLmItPUUuYixDPWYrQi5hLEw9ZytCLmIsYT1sNihuLCEwLCEwKSxvRShhLGYpLHVFKGEsZyksYUUoYSxDKSxjRShhLEwpLHJ2dChlLHcpKSl9ZnVuY3Rpb24gaXZ0KGUpe3N3KGUsbmV3IFhtKG53KFp2KHR3KGV3KG5ldyB4MSxKdyksIkVMSyBTUE9yRSBDb21wYWN0aW9uIiksIlNocmlua1RyZWUgaXMgYSBjb21wYWN0aW9uIGFsZ29yaXRobSB0aGF0IG1haW50YWlucyB0aGUgdG9wb2xvZ3kgb2YgYSBsYXlvdXQuIFRoZSByZWxvY2F0aW9uIG9mIGRpYWdyYW0gZWxlbWVudHMgaXMgYmFzZWQgb24gY29udHJhY3RpbmcgYSBzcGFubmluZyB0cmVlLiIpLG5ldyBJbmUpKSksZ3QoZSxKdyxNZmUsSXQoSlcpKSxndChlLEp3LEdDZSxJdChFZ2UpKSxndChlLEp3LEtDZSxJdChrZ2UpKSxndChlLEp3LERmZSxJdChBT2UpKSxndChlLEp3LElmZSxJdCh4Z2UpKSxndChlLEp3LFh3LF9PZSksZ3QoZSxKdyxKeSw4KSxndChlLEp3LE9mZSxJdChaQ3QpKSxndChlLEp3LFdDZSxJdChDT2UpKSxndChlLEp3LFlDZSxJdChTT2UpKSxndChlLEp3LFZQLChIbigpLCExKSl9ZnVuY3Rpb24gYkxuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7Zm9yKHQuVWcoIlNpbXBsZSBub2RlIHBsYWNlbWVudCIsMSksTD1sKFEoZSwoZnQoKSwkNikpLDMxMiksZz0wLG89bmV3IEcoZS5iKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKHI9bChyZShvKSwzMCksZj1yLmMsZi5iPTAsbj1udWxsLEU9bmV3IEcoci5hKTtFLmE8RS5jLmMubGVuZ3RoOyl3PWwocmUoRSksMTApLG4mJihmLmIrPVI4ZSh3LG4sTC5jKSksZi5iKz13LmQuZCt3Lm8uYit3LmQuYSxuPXc7Zz1iLk1hdGgubWF4KGcsZi5iKX1mb3IoYT1uZXcgRyhlLmIpO2EuYTxhLmMuYy5sZW5ndGg7KWZvcihyPWwocmUoYSksMzApLGY9ci5jLEM9KGctZi5iKS8yLG49bnVsbCxFPW5ldyBHKHIuYSk7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDEwKSxuJiYoQys9UjhlKHcsbixMLmMpKSxDKz13LmQuZCx3Lm4uYj1DLEMrPXcuby5iK3cuZC5hLG49dzt0LlZnKCl9ZnVuY3Rpb24gbUxuKGUsdCl7dmFyIG4scixhLG87Zm9yKEN3bih0LmIuaiksSXMoZmMobmV3IGJuKG51bGwsbmV3IGtuKHQuZCwxNikpLG5ldyBTZWUpLG5ldyBfZWUpLG89bmV3IEcodC5kKTtvLmE8by5jLmMubGVuZ3RoOyl7c3dpdGNoKGE9bChyZShvKSwxMDUpLGEuZS5nKXtjYXNlIDA6bj1sKGp0KGEuaiwwKSwxMTMpLmQuaixTKGEsbChmaChZOChsKCRpKGEuayxuKSwxNSkuT2MoKSxJNikpLDExMykpLGsoYSxsKGZoKHZ5KGwoJGkoYS5rLG4pLDE1KS5PYygpLEk2KSksMTEzKSk7YnJlYWs7Y2FzZSAxOnI9b3hlKGEpLFMoYSxsKGZoKFk4KGwoJGkoYS5rLHJbMF0pLDE1KS5PYygpLEk2KSksMTEzKSksayhhLGwoZmgodnkobCgkaShhLmssclsxXSksMTUpLk9jKCksSTYpKSwxMTMpKTticmVhaztjYXNlIDI6cmtuKGUsYSk7YnJlYWs7Y2FzZSAzOnlDbihhKTticmVhaztjYXNlIDQ6VENuKGUsYSl9U3duKGEpfWUuYT1udWxsfWZ1bmN0aW9uIHZsZShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztyZXR1cm4gcj1lLmEubz09KEQxKCksWTEpP2dzOmlhLGc9TG10KGUsbmV3IFFldCh0LG4pKSwhZy5hJiZnLmM/KHVpKGUuZCxnKSxyKTpnLmE/KGE9Zy5hLmMsdz1nLmEuZCxuPyhFPWUuYS5jPT0oeGQoKSx3Myk/dzphLG89ZS5hLmM9PXczP2E6dyxmPWUuYS5nW28uaS5wXSxDPXplKGUuYS5wW2YucF0pK3plKGUuYS5kW28uaS5wXSkrby5uLmIrby5hLmItemUoZS5hLmRbRS5pLnBdKS1FLm4uYi1FLmEuYik6KEU9ZS5hLmM9PSh4ZCgpLFQyKT93OmEsbz1lLmEuYz09VDI/YTp3LEM9emUoZS5hLnBbZS5hLmdbby5pLnBdLnBdKSt6ZShlLmEuZFtvLmkucF0pK28ubi5iK28uYS5iLXplKGUuYS5kW0UuaS5wXSktRS5uLmItRS5hLmIpLGUuYS5uW2UuYS5nW2EuaS5wXS5wXT0oSG4oKSwhMCksZS5hLm5bZS5hLmdbdy5pLnBdLnBdPSEwLEMpOnJ9ZnVuY3Rpb24gdkxuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEw7aWYoci5nYygpPT0wKXJldHVybiExO2lmKHc9KEZvKCksbCh0LDY5KS54aygpKSxmPXc/cjpuZXcgTHcoci5nYygpKSx1cChlLmUsdCkpe2lmKHQuU2koKSlmb3IoQz1yLktjKCk7Qy5PYigpOylFPUMuUGIoKSwkVShlLHQsRSxEZSh0LDEwMikmJihsKHQsMTkpLkJiJklvKSE9MCl8fChvPXNnKHQsRSksZi5GYyhvKSk7ZWxzZSBpZighdylmb3IoQz1yLktjKCk7Qy5PYigpOylFPUMuUGIoKSxvPXNnKHQsRSksZi5GYyhvKX1lbHNle2ZvcihMPVd1KGUuZS5EaCgpLHQpLGE9bChlLmcsMTI0KSxnPTA7ZzxlLmk7KytnKWlmKG89YVtnXSxMLmFtKG8uTGsoKSkpdGhyb3cgdWUobmV3IFluKFpQKSk7aWYoci5nYygpPjEpdGhyb3cgdWUobmV3IFluKFpQKSk7d3x8KG89c2codCxyLktjKCkuUGIoKSksZi5GYyhvKSl9cmV0dXJuIE43ZShlLHQ5ZShlLHQsbiksZil9ZnVuY3Rpb24gSFUoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7aWYodXAoZS5lLHQpKXc9KEZvKCksbCh0LDY5KS54aygpP25ldyBuSCh0LGUpOm5ldyB5Tyh0LGUpKSxFVSh3LmMsdy5iKSxGXyh3LGwobiwxNikpO2Vsc2V7Zm9yKEM9V3UoZS5lLkRoKCksdCkscj1sKGUuZywxMjQpLGY9MDtmPGUuaTsrK2YpaWYoYT1yW2ZdLG89YS5MaygpLEMuYW0obykpe2lmKG89PShreCgpLHU5KXx8bz09Yzkpe2ZvcihFPVE4ZShlLHQsbiksZz1mLEU/VnkoZSxmKTorK2Y7ZjxlLmk7KWE9cltmXSxvPWEuTGsoKSxvPT11OXx8bz09Yzk/VnkoZSxmKTorK2Y7RXx8bChuNihlLGcsc2codCxuKSksNzYpfWVsc2UgUThlKGUsdCxuKT9WeShlLGYpOmwobjYoZSxmLChGbygpLGwodCw2OSkueGsoKT9sKG4sNzYpOnNnKHQsbikpKSw3Nik7cmV0dXJufVE4ZShlLHQsbil8fHFyKGUsKEZvKCksbCh0LDY5KS54aygpP2wobiw3Nik6c2codCxuKSkpfX1mdW5jdGlvbiBzdnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7cmV0dXJuIFBpKG4sZS5iKXx8KGUuYj1uLG89bmV3IFdpLGY9bCh5YyhmYyhuZXcgYm4obnVsbCxuZXcga24obi5mLDE2KSksbyksU3kobmV3IHl0LG5ldyBqaSxuZXcgcW4sbmV3IFVuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxpNCksRWNdKSkpLDIxKSxlLmU9ITAsZS5mPSEwLGUuYz0hMCxlLmQ9ITAsYT1mLkhjKChieCgpLGFCKSkscj1mLkhjKG9CKSxhJiYhciYmKGUuZj0hMSksIWEmJnImJihlLmQ9ITEpLGE9Zi5IYyhzQikscj1mLkhjKGNCKSxhJiYhciYmKGUuYz0hMSksIWEmJnImJihlLmU9ITEpKSxDPWwoZS5hLlZlKHQsbiksNDIpLHc9bChDLmEsMTcpLmEsRT1sKEMuYiwxNykuYSxnPSExLHc8MD9lLmN8fChnPSEwKTplLmV8fChnPSEwKSxFPDA/ZS5kfHwoZz0hMCk6ZS5mfHwoZz0hMCksZz9zdnQoZSxDLG4pOkN9ZnVuY3Rpb24gd0xuKGUpe3ZhciB0LG4scixhO2E9ZS5vLHB5KCksZS5BLmRjKCl8fFBpKGUuQSxxX2UpP3Q9YS5iOih0PXRQKGUuZiksZS5BLkhjKChtaCgpLHJGKSkmJiFlLkIuSGMoKFpsKCksRk0pKSYmKHQ9Yi5NYXRoLm1heCh0LHRQKGwoUW8oZS5wLChDdCgpLGFyKSksMjUyKSkpLHQ9Yi5NYXRoLm1heCh0LHRQKGwoUW8oZS5wLGVyKSwyNTIpKSkpLG49UmZ0KGUpLG4mJih0PWIuTWF0aC5tYXgodCxuLmIpKSxlLkEuSGMoaUYpJiYoZS5xPT0oUmEoKSxUZyl8fGUucT09TXUpJiYodD1iLk1hdGgubWF4KHQsdEgobChRbyhlLmIsKEN0KCksYXIpKSwxMjcpKSksdD1iLk1hdGgubWF4KHQsdEgobChRbyhlLmIsZXIpLDEyNykpKSkpLFJ0KEJ0KGUuZS5UZigpLm9mKChwaSgpLEM0KSkpKT9hLmI9Yi5NYXRoLm1heChhLmIsdCk6YS5iPXQscj1lLmYuaSxyLmQ9MCxyLmE9dCxmbGUoZS5mKX1mdW5jdGlvbiBhdnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKO2ZvcihMPTA7TDx0Lmxlbmd0aDtMKyspe2ZvcihnPWUuS2MoKTtnLk9iKCk7KW89bChnLlBiKCksMjMwKSxvLmhnKEwsdCk7Zm9yKEI9MDtCPHRbTF0ubGVuZ3RoO0IrKyl7Zm9yKHc9ZS5LYygpO3cuT2IoKTspbz1sKHcuUGIoKSwyMzApLG8uaWcoTCxCLHQpO2ZvcihKPXRbTF1bQl0uaix6PTA7ejxKLmMubGVuZ3RoO3orKyl7Zm9yKEU9ZS5LYygpO0UuT2IoKTspbz1sKEUuUGIoKSwyMzApLG8uamcoTCxCLHosdCk7Zm9yKFY9KFNuKHosSi5jLmxlbmd0aCksbChKLmNbel0sMTIpKSxuPTAsYT1uZXcgTjEoVi5iKTtMYyhhLmEpfHxMYyhhLmIpOylmb3Iocj1sKExjKGEuYSk/cmUoYS5hKTpyZShhLmIpLDE4KSxDPWUuS2MoKTtDLk9iKCk7KW89bChDLlBiKCksMjMwKSxvLmdnKEwsQix6LG4rKyxyLHQpfX19Zm9yKGY9ZS5LYygpO2YuT2IoKTspbz1sKGYuUGIoKSwyMzApLG8uZmcoKX1mdW5jdGlvbiB5TG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztmb3IoZS5iPXplKEdlKFEodCwoTnQoKSxxNikpKSksZS5jPXplKEdlKFEodCx2dikpKSxlLmQ9bChRKHQscmRlKSwzNTApLGUuYT1sKFEodCxsVyksMjgyKSxhN24odCksZz1sKHljKEZpKEZpKERjKERjKG5ldyBibihudWxsLG5ldyBrbih0LmIsMTYpKSxuZXcgbFopLG5ldyBoUyksbmV3IGlJKSxuZXcgZmopLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxFYyldKSkpLDE1KSxhPWcuS2MoKTthLk9iKCk7KW49bChhLlBiKCksMTgpLGY9bChRKG4sKGZ0KCksZnYpKSwxNSksZi5KYyhuZXcgWFdlKGUpKSxydChuLGZ2LG51bGwpO2ZvcihyPWcuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksMTgpLHc9bChRKG4sKGZ0KCksS0xlKSksMTgpLG89bChRKG4sejYpLDE1KSxOSW4oZSxvLHcpLHJ0KG4sejYsbnVsbCl9ZnVuY3Rpb24gd2xlKGUsdCl7dmFyIG4scixhLG8sZixnLHc7aWYoZS5hKXtpZihnPWUuYS54ZSgpLHc9bnVsbCxnIT1udWxsP3QuYSs9IiIrZzooZj1lLmEubWsoKSxmIT1udWxsJiYobz1wZChmLGNsKDkxKSksbyE9LTE/KHc9KFhuKG8sZi5sZW5ndGgrMSksZi5zdWJzdHIobykpLHQuYSs9IiIrdGYoZj09bnVsbD91bDoobnIoZiksZiksMCxvKSk6dC5hKz0iIitmKSksZS5kJiZlLmQuaSE9MCl7Zm9yKGE9ITAsdC5hKz0iPCIscj1uZXcgb3IoZS5kKTtyLmUhPXIuaS5nYygpOyluPWwoZ3IociksODkpLGE/YT0hMTp0LmErPUNvLHdsZShuLHQpO3QuYSs9Ij4ifXchPW51bGwmJih0LmErPSIiK3cpfWVsc2UgZS5lPyhnPWUuZS56YixnIT1udWxsJiYodC5hKz0iIitnKSk6KHQuYSs9Ij8iLGUuYj8odC5hKz0iIHN1cGVyICIsd2xlKGUuYix0KSk6ZS5mJiYodC5hKz0iIGV4dGVuZHMgIix3bGUoZS5mLHQpKSl9ZnVuY3Rpb24geExuKGUpe2UuYj1udWxsLGUuYT1udWxsLGUubz1udWxsLGUucT1udWxsLGUudj1udWxsLGUudz1udWxsLGUuQj1udWxsLGUucD1udWxsLGUuUT1udWxsLGUuUj1udWxsLGUuUz1udWxsLGUuVD1udWxsLGUuVT1udWxsLGUuVj1udWxsLGUuVz1udWxsLGUuYmI9bnVsbCxlLmViPW51bGwsZS5hYj1udWxsLGUuSD1udWxsLGUuZGI9bnVsbCxlLmM9bnVsbCxlLmQ9bnVsbCxlLmY9bnVsbCxlLm49bnVsbCxlLnI9bnVsbCxlLnM9bnVsbCxlLnU9bnVsbCxlLkc9bnVsbCxlLko9bnVsbCxlLmU9bnVsbCxlLmo9bnVsbCxlLmk9bnVsbCxlLmc9bnVsbCxlLms9bnVsbCxlLnQ9bnVsbCxlLkY9bnVsbCxlLkk9bnVsbCxlLkw9bnVsbCxlLk09bnVsbCxlLk89bnVsbCxlLlA9bnVsbCxlLiQ9bnVsbCxlLk49bnVsbCxlLlo9bnVsbCxlLmNiPW51bGwsZS5LPW51bGwsZS5EPW51bGwsZS5BPW51bGwsZS5DPW51bGwsZS5fPW51bGwsZS5mYj1udWxsLGUuWD1udWxsLGUuWT1udWxsLGUuZ2I9ITEsZS5oYj0hMX1mdW5jdGlvbiBrTG4oZSl7dmFyIHQsbixyLGE7aWYocj1EbGUoKCFlLmMmJihlLmM9WE8oWmMoZS5mKSkpLGUuYyksMCksZS5lPT0wfHxlLmE9PTAmJmUuZiE9LTEmJmUuZTwwKXJldHVybiByO2lmKHQ9eTdlKGUpPDA/MTowLG49ZS5lLGE9KHIubGVuZ3RoKzErYi5NYXRoLmFicyh1YShlLmUpKSxuZXcgUzUpLHQ9PTEmJihhLmErPSItIiksZS5lPjApaWYobi09ci5sZW5ndGgtdCxuPj0wKXtmb3IoYS5hKz0iMC4iO24+bHYubGVuZ3RoO24tPWx2Lmxlbmd0aClRaXQoYSxsdik7UHJ0KGEsbHYsdWEobikpLGhpKGEsKFhuKHQsci5sZW5ndGgrMSksci5zdWJzdHIodCkpKX1lbHNlIG49dC1uLGhpKGEsdGYocix0LHVhKG4pKSksYS5hKz0iLiIsaGkoYSx3NWUocix1YShuKSkpO2Vsc2V7Zm9yKGhpKGEsKFhuKHQsci5sZW5ndGgrMSksci5zdWJzdHIodCkpKTtuPC1sdi5sZW5ndGg7bis9bHYubGVuZ3RoKVFpdChhLGx2KTtQcnQoYSxsdix1YSgtbikpfXJldHVybiBhLmF9ZnVuY3Rpb24geWxlKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRTtyZXR1cm4hKGUuayE9KFpuKCksUHMpfHxlLmouYy5sZW5ndGg8PTF8fChvPWwoUShlLChOdCgpLE1zKSksMTAxKSxvPT0oUmEoKSxNdSkpfHwoYT0oQnkoKSwoZS5xP2UucTooQ24oKSxDbigpLG1nKSkuX2IoZzMpP3I9bChRKGUsZzMpLDIwMyk6cj1sKFEoZW8oZSksZU0pLDIwMyksciksYT09X1cpfHwhKGE9PUc2fHxhPT1VNikmJihmPXplKEdlKFB5KGUsdE0pKSksdD1sKFEoZSxfQiksMTQwKSwhdCYmKHQ9bmV3IG40ZShmLGYsZixmKSksRT1PYyhlLChDdCgpLGVyKSksdz10LmQrdC5hKyhFLmdjKCktMSkqZix3PmUuby5ifHwobj1PYyhlLGFyKSxnPXQuZCt0LmErKG4uZ2MoKS0xKSpmLGc+ZS5vLmIpKSl9ZnVuY3Rpb24gRUxuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZTt0LlVnKCJPcnRob2dvbmFsIGVkZ2Ugcm91dGluZyIsMSksRT16ZShHZShRKGUsKE50KCksVjYpKSkpLG49emUoR2UoUShlLHE2KSkpLHI9emUoR2UoUShlLHZ2KSkpLEI9bmV3IEhhZSgwLG4pLHRlPTAsZj1uZXcgVWEoZS5iLDApLGc9bnVsbCxDPW51bGwsdz1udWxsLEw9bnVsbDtkbyBDPWYuYjxmLmQuZ2MoKT8obXIoZi5iPGYuZC5nYygpKSxsKGYuZC5YYihmLmM9Zi5iKyspLDMwKSk6bnVsbCxMPUM/Qy5hOm51bGwsZyYmKE9rZShnLHRlKSx0ZSs9Zy5jLmEpLEo9Zz90ZStyOnRlLFY9UmtlKEIsZSx3LEwsSiksYT0hZ3x8THEodywoSVUoKSxJQikpLG89IUN8fExxKEwsKElVKCksSUIpKSxWPjA/KHo9KFYtMSkqbixnJiYoeis9ciksQyYmKHorPXIpLHo8RSYmIWEmJiFvJiYoej1FKSx0ZSs9eik6IWEmJiFvJiYodGUrPUUpLGc9Qyx3PUw7d2hpbGUoQyk7ZS5mLmE9dGUsdC5WZygpfWZ1bmN0aW9uIFZVKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7aWYoQz1udWxsLGUuZCYmKEM9bCh4dShlLmQsdCksMTQyKSksIUMpe2lmKG89ZS5hLnZpKCksTD1vLmksIWUuZHx8ZF8oZS5kKSE9TCl7Zm9yKHc9bmV3IFByLGUuZCYmYkEodyxlLmQpLEU9dy5mLmMrdy5pLmMsZz1FO2c8TDsrK2cpcj1sKE9lKG8sZyksMTQyKSxhPW8yKGUuZSxyKS54ZSgpLG49bChhPT1udWxsP2p1KHcuZixudWxsLHIpOkJ3KHcuaSxhLHIpLDE0MiksbiYmbiE9ciYmKGE9PW51bGw/anUody5mLG51bGwsbik6Qncody5pLGEsbikpO2lmKHcuZi5jK3cuaS5jIT1MKWZvcihmPTA7ZjxFOysrZilyPWwoT2UobyxmKSwxNDIpLGE9bzIoZS5lLHIpLnhlKCksbj1sKGE9PW51bGw/anUody5mLG51bGwscik6Qncody5pLGEsciksMTQyKSxuJiZuIT1yJiYoYT09bnVsbD9qdSh3LmYsbnVsbCxuKTpCdyh3LmksYSxuKSk7ZS5kPXd9Qz1sKHh1KGUuZCx0KSwxNDIpfXJldHVybiBDfWZ1bmN0aW9uIHhsZShlLHQsbixyLGEsbyxmKXt2YXIgZyx3LEUsQyxMLEIsejtyZXR1cm4gTD1SdChCdChRKHQsKE50KCksVU1lKSkpKSxCPW51bGwsbz09KHFvKCksJGwpJiZyLmMuaT09bj9CPXIuYzpvPT16dSYmci5kLmk9PW4mJihCPXIuZCksRT1mLCFFfHwhTHx8Qj8oQz0oQ3QoKSxQYyksQj9DPUIuajpQNShsKFEobixNcyksMTAxKSkmJihDPW89PSRsP2VyOmFyKSx3PVRMbihlLHQsbixvLEMsciksZz1Bb2UoKGVvKG4pLHIpKSxvPT0kbD8ocG8oZyxsKGp0KHcuaiwwKSwxMikpLEZhKGcsYSkpOihwbyhnLGEpLEZhKGcsbChqdCh3LmosMCksMTIpKSksRT1uZXcgZjF0KHIsZyx3LGwoUSh3LChmdCgpLHppKSksMTIpLG8sIUIpKToodnQoRS5lLHIpLHo9Yi5NYXRoLm1heCh6ZShHZShRKEUuZCx4MikpKSx6ZShHZShRKHIseDIpKSkpLHJ0KEUuZCx4Mix6KSkseG4oZS5hLHIsbmV3IEtxKEUuZCx0LG8pKSxFfWZ1bmN0aW9uIGtsZSgpe2tsZT1VO3ZhciBlO1NQZT1uZXcgYUplLFBfdD1XZSh6dCxkdCwyLDAsNiwxKSxPX3Q9UTAoZngoMzMsNTgpLGZ4KDEsMjYpKSxOX3Q9UTAoZngoOTcsMTIyKSxmeCg2NSw5MCkpLHhQZT1meCg0OCw1NyksRF90PVEwKE9fdCwwKSxJX3Q9UTAoTl90LHhQZSksa1BlPVEwKFEwKDAsZngoMSw2KSksZngoMzMsMzgpKSxFUGU9UTAoUTAoeFBlLGZ4KDY1LDcwKSksZngoOTcsMTAyKSksQl90PVEwKERfdCxlVSgiLV8uIX4qJygpIikpLEZfdD1RMChJX3QsR1YoIi1fLiF+KicoKSIpKSxlVSh0NXQpLEdWKHQ1dCksUTAoQl90LGVVKCI7OkAmPSskLCIpKSxRMChGX3QsR1YoIjs6QCY9KyQsIikpLFRQZT1lVSgiOi8/IyIpLENQZT1HVigiOi8/IyIpLCRNPWVVKCIvPyMiKSx6TT1HVigiLz8jIiksZT1uZXcgS3MsZS5hLnpjKCJqYXIiLGUpLGUuYS56YygiemlwIixlKSxlLmEuemMoImFyY2hpdmUiLGUpLEVZPShDbigpLG5ldyBFayhlKSl9ZnVuY3Rpb24gVExuKGUsdCxuLHIsYSxvKXt2YXIgZixnLHcsRSxDLEw7cmV0dXJuIGY9bnVsbCxFPXI9PShxbygpLCRsKT9vLmM6by5kLHc9elYodCksRS5pPT1uPyhmPWwoY3IoZS5iLEUpLDEwKSxmfHwoZj12UChFLGwoUShuLChOdCgpLE1zKSksMTAxKSxhLEFfbihFKSxudWxsLEUubixFLm8sdyx0KSxydChmLChmdCgpLHppKSxFKSxraShlLmIsRSxmKSkpOihmPXZQKChDPW5ldyBCcyxMPXplKEdlKFEodCwoTnQoKSx4MCkpKSkvMixfTihDLG00LEwpLEMpLGwoUShuLE1zKSwxMDEpLGEscj09JGw/LTE6MSxudWxsLG5ldyBxYSxuZXcgbHQoMCwwKSx3LHQpLGc9cnhuKGYsbixyKSxydChmLChmdCgpLHppKSxnKSxraShlLmIsZyxmKSksbChRKHQsKGZ0KCksTHUpKSwyMSkuRmMoKEhvKCksdmYpKSxQNShsKFEodCwoTnQoKSxNcykpLDEwMSkpP3J0KHQsTXMsKFJhKCksc0MpKTpydCh0LE1zLChSYSgpLFoxKSksZn1mdW5jdGlvbiBRRShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2c9MCxWPTAsdz1PSChlLmcsZS5nLmxlbmd0aCksbz1lLmUsZj1lLmoscj1lLmIsYT1lLmM7ZG97Zm9yKHo9MCxDPW5ldyBHKGUucSk7Qy5hPEMuYy5jLmxlbmd0aDspRT1sKHJlKEMpLDEwKSxCPVN2dChlLEUpLG49ITAsKGUucj09KE5mKCksQUIpfHxlLnI9PUxCKSYmKG49UnQoQnQoQi5iKSkpLGwoQi5hLDE3KS5hPDAmJm4/KCsreix3PU9IKGUuZyxlLmcubGVuZ3RoKSxlLmU9ZS5lK2woQi5hLDE3KS5hLFYrPW8tZS5lLG89ZS5lK2woQi5hLDE3KS5hLGY9ZS5qLHI9X3coZS5iKSxhPV93KGUuYykpOihlLmc9T0godyx3Lmxlbmd0aCksZS5lPW8sZS5iPShYcihyKSxyP25ldyBPbChyKTokayhuZXcgRyhyKSkpLGUuYz0oWHIoYSksYT9uZXcgT2woYSk6JGsobmV3IEcoYSkpKSxlLmo9Zik7KytnLEw9eiE9MCYmUnQoQnQodC5LYihuZXcgY2EocHQoVikscHQoZykpKSkpfXdoaWxlKEwpfWZ1bmN0aW9uIENMbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW47cmV0dXJuIGY9ZS5mLEI9dC5mLGc9Zj09KFZBKCksZTkpfHxmPT15TSx6PUI9PWU5fHxCPT15TSx3PWY9PVE2fHxmPT14TSxWPUI9PVE2fHxCPT14TSxFPWY9PVE2fHxmPT1lOSxKPUI9PVE2fHxCPT1lOSxnJiZ6P2UuZj09eU0/ZTp0OncmJlY/ZS5mPT14TT9lOnQ6RSYmSj8oZj09UTY/KEw9ZSxDPXQpOihMPXQsQz1lKSxvPSh0ZT1uLmorbi5mLGZlPUwuZStyLmYsVGU9Yi5NYXRoLm1heCh0ZSxmZSksTWU9VGUtYi5NYXRoLm1pbihuLmosTC5lKSwkZT1MLmQrci5nLW4uaSwkZSpNZSksYT0oWmU9bi5pK24uZyxvdD1DLmQrci5nLFN0PWIuTWF0aC5tYXgoWmUsb3QpLGNuPVN0LWIuTWF0aC5taW4obi5pLEMuZCksYW49Qy5lK3IuZi1uLmosY24qYW4pLG88PWE/ZS5mPT1RNj9lOnQ6ZS5mPT1lOT9lOnQpOmV9ZnVuY3Rpb24gb3Z0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7aWYocnQodCwoUWkoKSxKVCksMCksdz1sKFEodCxCVyksNDApLHQuZC5iPT0wKXc/KEM9emUoR2UoUSh3LEMyKSkpK2UuYitwOGUoZSx3LHQpLHJ0KHQsQzIsQykpOnJ0KHQsQzIsMCk7ZWxzZXtmb3Iocj0obz1ScihuZXcgSGcodCkuYS5kLDApLG5ldyBDNShvKSk7UUkoci5hKTspbj1sKEJyKHIuYSksNjUpLmMsb3Z0KGUsbik7Zz1sKFBxKChmPVJyKG5ldyBIZyh0KS5hLmQsMCksbmV3IEM1KGYpKSksNDApLEw9bChJaG4oKGE9UnIobmV3IEhnKHQpLmEuZCwwKSxuZXcgQzUoYSkpKSw0MCksRT0oemUoR2UoUShMLEMyKSkpK3plKEdlKFEoZyxDMikpKSkvMix3PyhDPXplKEdlKFEodyxDMikpKStlLmIrcDhlKGUsdyx0KSxydCh0LEMyLEMpLHJ0KHQsSlQsemUoR2UoUSh0LEMyKSkpLUUpLEZNbihlLHQpKTpydCh0LEMyLEUpfX1mdW5jdGlvbiBTTG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTDtmb3IoQz1lLmUuYS5jLmxlbmd0aCxmPW5ldyBHKGUuZS5hKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTI1KSxvLmo9ITE7Zm9yKGUuaT1XZShWcixkaSwyOCxDLDE1LDEpLGUuZz1XZShWcixkaSwyOCxDLDE1LDEpLGUubj1uZXcgYnQsYT0wLEw9bmV3IGJ0LHc9bmV3IEcoZS5lLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxMjUpLGcuZD1hKyssZy5iLmEuYy5sZW5ndGg9PTAmJnZ0KGUubixnKSxyYShMLGcuZyk7Zm9yKHQ9MCxyPW5ldyBHKEwpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwyMTgpLG4uYz10Kyssbi5mPSExO0U9TC5jLmxlbmd0aCxlLmI9PW51bGx8fGUuYi5sZW5ndGg8RT8oZS5iPVdlKE5hLFpvLDI4LEUsMTUsMSksZS5jPVdlKGloLHBnLDI4LEUsMTYsMSkpOnVfKGUuYyksZS5kPUwsZS5wPW5ldyBuYWUoQXkoZS5kLmMubGVuZ3RoKSksZS5qPTF9ZnVuY3Rpb24gX0xuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2lmKCEodC5lLmMubGVuZ3RoPD0xKSl7Zm9yKGUuZj10LGUuZD1sKFEoZS5mLChWTigpLG9BZSkpLDM5MSksZS5nPWwoUShlLmYsaEFlKSwxNykuYSxlLmU9emUoR2UoUShlLmYsY0FlKSkpLGUuYz16ZShHZShRKGUuZixUSykpKSxqc3QoZS5iKSxhPW5ldyBHKGUuZi5jKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMjkwKSxka2UoZS5iLHIuYyxyLG51bGwpLGRrZShlLmIsci5kLHIsbnVsbCk7Zm9yKGc9ZS5mLmUuYy5sZW5ndGgsZS5hPUxtKE5hLFtkdCxab10sWzEwOSwyOF0sMTUsW2csZ10sMiksRT1uZXcgRyhlLmYuZSk7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDE1MyksWkFuKGUsdyxlLmFbdy5hXSk7Zm9yKGUuaT1MbShOYSxbZHQsWm9dLFsxMDksMjhdLDE1LFtnLGddLDIpLG89MDtvPGc7KytvKWZvcihmPTA7ZjxnOysrZiluPWUuYVtvXVtmXSxDPTEvKG4qbiksZS5pW29dW2ZdPUN9fWZ1bmN0aW9uIGN2dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIsejtpZihnPXQuYWgoKSxnfHx0LlVnKFQzdCwxKSxuPWwoUShlLChmdCgpLEsxZSkpLDE1KSxmPTEvbi5nYygpLHQuX2coKSlmb3IodC5iaCgiRUxLIExheWVyZWQgdXNlcyB0aGUgZm9sbG93aW5nICIrbi5nYygpKyIgbW9kdWxlczoiKSx6PTAsQj1uLktjKCk7Qi5PYigpOylDPWwoQi5QYigpLDQ3KSxyPSh6PDEwPyIwIjoiIikreisrLHQuYmgoIiAgIFNsb3QgIityKyI6ICIrX20oYmgoQykpKTtmb3IoTD1uLktjKCk7TC5PYigpOyl7aWYoQz1sKEwuUGIoKSw0NyksdC4kZygpKXJldHVybjtDLktmKGUsdC5laChmKSl9Zm9yKG89bmV3IEcoZS5iKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMzApLHJhKGUuYSxhLmEpLGEuYS5jLmxlbmd0aD0wO2ZvcihFPW5ldyBHKGUuYSk7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDEwKSxWYSh3LG51bGwpO2UuYi5jLmxlbmd0aD0wLGd8fHQuVmcoKX1mdW5jdGlvbiBBTG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHo7aWYoRT1uZXcgYnQsIW5zKGUsKGZ0KCkscTFlKSkpcmV0dXJuIEU7Zm9yKHI9bChRKGUscTFlKSwxNSkuS2MoKTtyLk9iKCk7KXQ9bChyLlBiKCksMTApLFVMbih0LGUpLCRuKEUuYyx0KTtmb3Iobz1uZXcgRyhlLmIpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihhPWwocmUobyksMzApLGc9bmV3IEcoYS5hKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksMTApLGYuaz09KFpuKCksVXMpJiYodz1sKFEoZixhVyksMTApLHcmJihDPW5ldyBndSxNYyhDLGYpLEw9bChRKGYsV2MpLDY0KSxsYShDLEwpLEI9bChqdCh3LmosMCksMTIpLHo9bmV3IFR3LHBvKHosQyksRmEoeixCKSkpO2ZvcihuPW5ldyBHKEUpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxMCksVmEodCxsKGp0KGUuYixlLmIuYy5sZW5ndGgtMSksMzApKTtyZXR1cm4gRX1mdW5jdGlvbiB1dnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTDtmb3IoTD1uZXcgYnQsQz1uZXcgUTVlKDAsbiksbz0wLGJWKEMsbmV3IGtjZSgwLDAsQyxuKSksYT0wLEU9bmV3IG9yKGUpO0UuZSE9RS5pLmdjKCk7KXc9bChncihFKSwyNykscj1sKGp0KEMuYSxDLmEuYy5sZW5ndGgtMSksMTcyKSxnPWErdy5nKyhsKGp0KEMuYSwwKSwxNzIpLmIuYy5sZW5ndGg9PTA/MDpuKSwoZz50fHxSdChCdChhdCh3LCh6MSgpLCRCKSkpKSkmJihhPTAsbys9Qy5iK24sJG4oTC5jLEMpLEM9bmV3IFE1ZShvLG4pLHI9bmV3IGtjZSgwLEMuZixDLG4pLGJWKEMsciksYT0wKSxyLmIuYy5sZW5ndGg9PTB8fCFSdChCdChhdChkcyh3KSwoejEoKSxoZ2UpKSkpJiYody5mPj1yLm8mJncuZjw9ci5mfHxyLmEqLjU8PXcuZiYmci5hKjEuNT49dy5mKT95OGUocix3KTooZj1uZXcga2NlKHIucytyLnIrbixDLmYsQyxuKSxiVihDLGYpLHk4ZShmLHcpKSxhPXcuaSt3Lmc7cmV0dXJuICRuKEwuYyxDKSxMfWZ1bmN0aW9uIGVMKGUpe3ZhciB0LG4scixhO2lmKCEoZS5iPT1udWxsfHxlLmIubGVuZ3RoPD0yKSYmIWUuYSl7Zm9yKHQ9MCxhPTA7YTxlLmIubGVuZ3RoOyl7Zm9yKHQhPWE/KGUuYlt0XT1lLmJbYSsrXSxlLmJbdCsxXT1lLmJbYSsrXSk6YSs9MixuPWUuYlt0KzFdO2E8ZS5iLmxlbmd0aCYmIShuKzE8ZS5iW2FdKTspaWYobisxPT1lLmJbYV0pZS5iW3QrMV09ZS5iW2ErMV0sbj1lLmJbdCsxXSxhKz0yO2Vsc2UgaWYobj49ZS5iW2ErMV0pYSs9MjtlbHNlIGlmKG48ZS5iW2ErMV0pZS5iW3QrMV09ZS5iW2ErMV0sbj1lLmJbdCsxXSxhKz0yO2Vsc2UgdGhyb3cgdWUobmV3IEFjKCJUb2tlbiNjb21wYWN0UmFuZ2VzKCk6IEludGVybmVsIEVycm9yOiBbIitlLmJbdF0rIiwiK2UuYlt0KzFdKyJdIFsiK2UuYlthXSsiLCIrZS5iW2ErMV0rIl0iKSk7dCs9Mn10IT1lLmIubGVuZ3RoJiYocj1XZShWcixkaSwyOCx0LDE1LDEpLHB1KGUuYiwwLHIsMCx0KSxlLmI9ciksZS5hPSEwfX1mdW5jdGlvbiBMTG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztmb3IoZj1XOChlLmEpLktjKCk7Zi5PYigpOyl7aWYobz1sKGYuUGIoKSwxOCksby5iLmMubGVuZ3RoPjApZm9yKHI9bmV3IE9sKGwoJGkoZS5hLG8pLDIxKSksQ24oKSxWcyhyLG5ldyBHSSh0KSksYT1uZXcgVWEoby5iLDApO2EuYjxhLmQuZ2MoKTspe3N3aXRjaChuPShtcihhLmI8YS5kLmdjKCkpLGwoYS5kLlhiKGEuYz1hLmIrKyksNzIpKSxnPS0xLGwoUShuLChOdCgpLGpkKSksMjc4KS5nKXtjYXNlIDE6Zz1yLmMubGVuZ3RoLTE7YnJlYWs7Y2FzZSAwOmc9QjhuKHIpO2JyZWFrO2Nhc2UgMjpnPTB9ZyE9LTEmJih3PShTbihnLHIuYy5sZW5ndGgpLGwoci5jW2ddLDI0OSkpLHZ0KHcuYi5iLG4pLGwoUShlbyh3LmIuYy5pKSwoZnQoKSxMdSkpLDIxKS5GYygoSG8oKSxqVCkpLGwoUShlbyh3LmIuYy5pKSxMdSksMjEpLkZjKFJUKSxwaChhKSxydChuLFZMZSxvKSl9cG8obyxudWxsKSxGYShvLG51bGwpfX1mdW5jdGlvbiBNTG4oZSx0KXt2YXIgbixyLGEsbztyZXR1cm4gbj1uZXcgR2Qscj1sKHljKGZjKG5ldyBibihudWxsLG5ldyBrbihlLmYsMTYpKSxuKSxTeShuZXcgeXQsbmV3IGppLG5ldyBxbixuZXcgVW4saGUobGUob2MsMSksaXQsMTA4LDAsWyhGbCgpLGk0KSxFY10pKSksMjEpLGE9ci5nYygpLGE9YT09Mj8xOjAsYT09MSYmY3coUk4obCh5YyhGaShyLkxjKCksbmV3IGNkKSxJZnQoYXAoMCksbmV3IFRyKSksMTY4KS5hLDIpLDApJiYoYT0wKSxyPWwoeWMoZmMobmV3IGJuKG51bGwsbmV3IGtuKHQuZiwxNikpLG4pLFN5KG5ldyB5dCxuZXcgamksbmV3IHFuLG5ldyBVbixoZShsZShvYywxKSxpdCwxMDgsMCxbaTQsRWNdKSkpLDIxKSxvPXIuZ2MoKSxvPW89PTI/MTowLG89PTEmJmN3KFJOKGwoeWMoRmkoci5MYygpLG5ldyBLZCksSWZ0KGFwKDApLG5ldyBUcikpLDE2OCkuYSwyKSwwKSYmKG89MCksYTxvPy0xOmE9PW8/MDoxfWZ1bmN0aW9uIGx2dChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKHQ9TTEoZSksbz1SdChCdChhdCh0LChOdCgpLGI0KSkpKSxDPTAsYT0wLEU9bmV3IG9yKCghZS5lJiYoZS5lPW5ldyBMbihqcyxlLDcsNCkpLGUuZSkpO0UuZSE9RS5pLmdjKCk7KXc9bChncihFKSw3NCksZz1xdyh3KSxmPWcmJm8mJlJ0KEJ0KGF0KHcsZ3YpKSksQj1iYyhsKE9lKCghdy5jJiYody5jPW5ldyBMbihfcix3LDUsOCkpLHcuYyksMCksODQpKSxnJiZmPysrYTpnJiYhZj8rK0M6ZHMoQik9PXR8fEI9PXQ/KythOisrQztmb3Iocj1uZXcgb3IoKCFlLmQmJihlLmQ9bmV3IExuKGpzLGUsOCw1KSksZS5kKSk7ci5lIT1yLmkuZ2MoKTspbj1sKGdyKHIpLDc0KSxnPXF3KG4pLGY9ZyYmbyYmUnQoQnQoYXQobixndikpKSxMPWJjKGwoT2UoKCFuLmImJihuLmI9bmV3IExuKF9yLG4sNCw3KSksbi5iKSwwKSw4NCkpLGcmJmY/KytDOmcmJiFmPysrYTpkcyhMKT09dHx8TD09dD8rK0M6KythO3JldHVybiBDLWF9ZnVuY3Rpb24gRExuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6O2lmKHQuVWcoIkVkZ2Ugc3BsaXR0aW5nIiwxKSxlLmIuYy5sZW5ndGg8PTIpe3QuVmcoKTtyZXR1cm59Zm9yKG89bmV3IFVhKGUuYiwwKSxmPShtcihvLmI8by5kLmdjKCkpLGwoby5kLlhiKG8uYz1vLmIrKyksMzApKTtvLmI8by5kLmdjKCk7KWZvcihhPWYsZj0obXIoby5iPG8uZC5nYygpKSxsKG8uZC5YYihvLmM9by5iKyspLDMwKSksdz1uZXcgRyhhLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihnPWwocmUodyksMTApLEM9bmV3IEcoZy5qKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3IoRT1sKHJlKEMpLDEyKSxyPW5ldyBHKEUuZyk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDE4KSxCPW4uZCxMPUIuaS5jLEwhPWEmJkwhPWYmJnlidChuLCh6PW5ldyBvcChlKSx4KHosKFpuKCksQWEpKSxydCh6LChmdCgpLHppKSxuKSxydCh6LChOdCgpLE1zKSwoUmEoKSxNdSkpLFZhKHosZikseikpO3QuVmcoKX1mdW5jdGlvbiBJTG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihDPW5ldyBidCxCPW5ldyBLcyxmPXQuYixhPTA7YTxmLmMubGVuZ3RoO2ErKyl7Zm9yKEU9KFNuKGEsZi5jLmxlbmd0aCksbChmLmNbYV0sMzApKS5hLEMuYy5sZW5ndGg9MCxvPTA7bzxFLmMubGVuZ3RoO28rKylnPWUuYVthXVtvXSxnLnA9byxnLms9PShabigpLEF1KSYmJG4oQy5jLGcpLHJmKGwoanQodC5iLGEpLDMwKS5hLG8sZyksZy5qLmMubGVuZ3RoPTAscmEoZy5qLGwobChqdChlLmIsYSksMTUpLlhiKG8pLDE2KSksVTgobChRKGcsKE50KCksTXMpKSwxMDEpKXx8cnQoZyxNcywoUmEoKSxUdikpO2ZvcihyPW5ldyBHKEMpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxMCksTD1vX24obiksQi5hLnpjKEwsQiksQi5hLnpjKG4sQil9Zm9yKHc9Qi5hLmVjKCkuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTApLENuKCksVnMoZy5qLChURSgpLGFMZSkpLGcuaT0hMCxmOWUoZyl9ZnVuY3Rpb24gaHZ0KGUpe3ZhciB0LG4scixhLG87cmV0dXJuIGUuZyE9bnVsbD9lLmc6ZS5hPDMyPyhlLmc9UURuKFpjKGUuZiksdWEoZS5lKSksZS5nKTooYT1EbGUoKCFlLmMmJihlLmM9WE8oWmMoZS5mKSkpLGUuYyksMCksZS5lPT0wP2E6KHQ9KCFlLmMmJihlLmM9WE8oWmMoZS5mKSkpLGUuYykuZTwwPzI6MSxuPWEubGVuZ3RoLHI9LWUuZStuLXQsbz1uZXcgdGIsby5hKz0iIithLGUuZT4wJiZyPj0tNj9yPj0wP0VPKG8sbi11YShlLmUpLFN0cmluZy5mcm9tQ2hhckNvZGUoNDYpKTooaGNlKG8sdC0xLHQtMSwiMC4iKSxFTyhvLHQrMSxJZihsdiwwLC11YShyKS0xKSkpOihuLXQ+PTEmJihFTyhvLHQsU3RyaW5nLmZyb21DaGFyQ29kZSg0NikpLCsrbiksRU8obyxuLFN0cmluZy5mcm9tQ2hhckNvZGUoNjkpKSxyPjAmJkVPKG8sKytuLFN0cmluZy5mcm9tQ2hhckNvZGUoNDMpKSxFTyhvLCsrbiwiIitZXyhaYyhyKSkpKSxlLmc9by5hLGUuZykpfWZ1bmN0aW9uIE9MbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3Q7cj16ZShHZShRKHQsKE50KCksS01lKSkpKSxaZT1sKFEodCxuTSksMTcpLmEsQj00LGE9MyxvdD0yMC9aZSx6PSExLHc9MCxmPUlpO2Rve2ZvcihvPXchPTEsTD13IT0wLFN0PTAsdGU9ZS5hLFRlPTAsJGU9dGUubGVuZ3RoO1RlPCRlOysrVGUpVj10ZVtUZV0sVi5mPW51bGwseURuKGUsVixvLEwsciksU3QrPWIuTWF0aC5hYnMoVi5hKTtkbyBnPW9BbihlLHQpO3doaWxlKGcpO2ZvcihKPWUuYSxmZT0wLE1lPUoubGVuZ3RoO2ZlPE1lOysrZmUpaWYoVj1KW2ZlXSxuPXM1ZShWKS5hLG4hPTApZm9yKEM9bmV3IEcoVi5lKTtDLmE8Qy5jLmMubGVuZ3RoOylFPWwocmUoQyksMTApLEUubi5iKz1uO3c9PTB8fHc9PTE/KC0tQixCPD0wJiYoU3Q8Znx8LUI+WmUpPyh3PTIsZj1JaSk6dz09MD8odz0xLGY9U3QpOih3PTAsZj1TdCkpOih6PVN0Pj1mfHxmLVN0PG90LGY9U3QseiYmLS1hKX13aGlsZSghKHomJmE8PTApKX1mdW5jdGlvbiBFbGUoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtmb3IoVj1uZXcgUHIsbz1lLmEuZWMoKS5LYygpO28uT2IoKTspcj1sKG8uUGIoKSwxNzcpLGtpKFYscixuLmFmKHIpKTtmb3IoZj0oWHIoZSksZT9uZXcgT2woZSk6JGsoZS5hLmVjKCkuS2MoKSkpLFZzKGYsbmV3IEx6KFYpKSxnPUhIKGYpLHc9bmV3IE5xKHQpLHo9bmV3IFByLGp1KHouZix0LHcpO2cuYS5nYygpIT0wOyl7Zm9yKEU9bnVsbCxDPW51bGwsTD1udWxsLGE9Zy5hLmVjKCkuS2MoKTthLk9iKCk7KWlmKHI9bChhLlBiKCksMTc3KSx6ZShHZShoYyh6byhWLmYscikpKSk8PWdzKXtpZihIdSh6LHIuYSkmJiFIdSh6LHIuYikpe0M9ci5iLEw9ci5hLEU9cjticmVha31pZihIdSh6LHIuYikmJiFIdSh6LHIuYSkpe0M9ci5hLEw9ci5iLEU9cjticmVha319aWYoIUUpYnJlYWs7Qj1uZXcgTnEoQyksdnQobChoYyh6byh6LmYsTCkpLDIyNSkuYSxCKSxqdSh6LmYsQyxCKSxnLmEuQmMoRSkhPW51bGx9cmV0dXJuIHd9ZnVuY3Rpb24gTkxuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6O2ZvcihuLlVnKCJEZXB0aC1maXJzdCBjeWNsZSByZW1vdmFsIiwxKSxMPXQuYSxDPUwuYy5sZW5ndGgsZS5jPW5ldyBidCxlLmQ9V2UoaWgscGcsMjgsQywxNiwxKSxlLmE9V2UoaWgscGcsMjgsQywxNiwxKSxlLmI9bmV3IGJ0LGY9MCxFPW5ldyBHKEwpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwxMCksdy5wPWYsWmsoa2EodykpJiZ2dChlLmMsdyksKytmO2Zvcih6PW5ldyBHKGUuYyk7ei5hPHouYy5jLmxlbmd0aDspQj1sKHJlKHopLDEwKSxzOWUoZSxCKTtmb3Iobz0wO288QztvKyspZS5kW29dfHwoZz0oU24obyxMLmMubGVuZ3RoKSxsKEwuY1tvXSwxMCkpLHM5ZShlLGcpKTtmb3IoYT1uZXcgRyhlLmIpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxOCksVXcociwhMCkscnQodCwoZnQoKSx5QiksKEhuKCksITApKTtlLmM9bnVsbCxlLmQ9bnVsbCxlLmE9bnVsbCxlLmI9bnVsbCxuLlZnKCl9ZnVuY3Rpb24gUExuKGUsdCl7aDYoKTt2YXIgbixyLGEsbyxmLGc7cmV0dXJuIG89dC5jLShlLmMrZS5iKSxhPWUuYy0odC5jK3QuYiksZj1lLmQtKHQuZCt0LmEpLG49dC5kLShlLmQrZS5hKSxyPWIuTWF0aC5tYXgoYSxvKSxnPWIuTWF0aC5tYXgoZixuKSxBMSgpLGYwKE5kKSwoYi5NYXRoLmFicyhyKTw9TmR8fHI9PTB8fGlzTmFOKHIpJiZpc05hTigwKT8wOnI8MD8tMTpyPjA/MTp1dyhpc05hTihyKSxpc05hTigwKSkpPj0wXihmMChOZCksKGIuTWF0aC5hYnMoZyk8PU5kfHxnPT0wfHxpc05hTihnKSYmaXNOYU4oMCk/MDpnPDA/LTE6Zz4wPzE6dXcoaXNOYU4oZyksaXNOYU4oMCkpKT49MCk/Yi5NYXRoLm1heChnLHIpOihmMChOZCksKGIuTWF0aC5hYnMocik8PU5kfHxyPT0wfHxpc05hTihyKSYmaXNOYU4oMCk/MDpyPDA/LTE6cj4wPzE6dXcoaXNOYU4ociksaXNOYU4oMCkpKT4wP2IuTWF0aC5zcXJ0KGcqZytyKnIpOi1iLk1hdGguc3FydChnKmcrcipyKSl9ZnVuY3Rpb24gUW0oZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYodCl7aWYoIWUuYSYmKGUuYT1uZXcganopLGUuZT09Mil7UnooZS5hLHQpO3JldHVybn1pZih0LmU9PTEpe2ZvcihhPTA7YTx0LlBtKCk7YSsrKVFtKGUsdC5MbShhKSk7cmV0dXJufWlmKGc9ZS5hLmEuYy5sZW5ndGgsZz09MCl7UnooZS5hLHQpO3JldHVybn1pZihmPWwoeHcoZS5hLGctMSksMTIyKSwhKChmLmU9PTB8fGYuZT09MTApJiYodC5lPT0wfHx0LmU9PTEwKSkpe1J6KGUuYSx0KTtyZXR1cm59bz10LmU9PTA/Mjp0Lk1tKCkubGVuZ3RoLGYuZT09MD8obj1uZXcgaF8scj1mLkttKCkscj49SW8/WG8obix3OGUocikpOlVrKG4sciZacyksZj1uZXcgY29lKDEwLG51bGwsMCksbWduKGUuYSxmLGctMSkpOihuPShmLk1tKCkubGVuZ3RoK28sbmV3IGhfKSxYbyhuLGYuTW0oKSkpLHQuZT09MD8ocj10LkttKCkscj49SW8/WG8obix3OGUocikpOlVrKG4sciZacykpOlhvKG4sdC5NbSgpKSxsKGYsNTMwKS5iPW4uYX19ZnVuY3Rpb24gQkxuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZTtpZighbi5kYygpKXtmb3IoZz0wLEI9MCxyPW4uS2MoKSxWPWwoci5QYigpLDE3KS5hO2c8dC5mOyl7aWYoZz09ViYmKEI9MCxyLk9iKCk/Vj1sKHIuUGIoKSwxNykuYTpWPXQuZisxKSxnIT1CKXtmb3IodGU9bChqdChlLmIsZyksMzApLHo9bChqdChlLmIsQiksMzApLEo9X3codGUuYSksTD1uZXcgRyhKKTtMLmE8TC5jLmMubGVuZ3RoOylpZihDPWwocmUoTCksMTApLEZ5KEMsei5hLmMubGVuZ3RoLHopLEI9PTApZm9yKGY9X3coa2EoQykpLG89bmV3IEcoZik7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDE4KSxVdyhhLCEwKSxydChlLChmdCgpLHlCKSwoSG4oKSwhMCkpLGJ2dChlLGEsMSl9KytCLCsrZ31mb3Iodz1uZXcgVWEoZS5iLDApO3cuYjx3LmQuZ2MoKTspRT0obXIody5iPHcuZC5nYygpKSxsKHcuZC5YYih3LmM9dy5iKyspLDMwKSksRS5hLmMubGVuZ3RoPT0wJiZwaCh3KX19ZnVuY3Rpb24gRkxuKGUsdCxuKXt2YXIgcixhLG87aWYoYT1sKFEodCwoTnQoKSxsVykpLDI4MiksYSE9KHpFKCksVkwpKXtzd2l0Y2gobi5VZygiSG9yaXpvbnRhbCBDb21wYWN0aW9uIiwxKSxlLmE9dCxvPW5ldyBHbHQscj1uZXcgYTJ0KChvLmQ9dCxvLmM9bChRKG8uZCxicCksMjIzKSxBU24obyksUE1uKG8pLEJTbihvKSxvLmEpKSxFdW4ocixlLmIpLGwoUSh0LEVNZSksNDMxKS5nKXtjYXNlIDE6SEplKHIsbmV3IG1mdChlLmEpKTticmVhaztkZWZhdWx0OkhKZShyLChQNWUoKSwkNnQpKX1zd2l0Y2goYS5nKXtjYXNlIDE6SEEocik7YnJlYWs7Y2FzZSAyOkhBKFVVKHIsKEpzKCksdmMpKSk7YnJlYWs7Y2FzZSAzOkhBKFZKZShVVShIQShyKSwoSnMoKSx2YykpLG5ldyBJaikpO2JyZWFrO2Nhc2UgNDpIQShWSmUoVVUoSEEociksKEpzKCksdmMpKSxuZXcgZ1llKG8pKSk7YnJlYWs7Y2FzZSA1OkhBKGt1bihyLFE4dCkpfVVVKHIsKEpzKCksdWMpKSxyLmU9ITAsbERuKG8pLG4uVmcoKX19ZnVuY3Rpb24gUkxuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZTtmb3IoZj10LmIsQz1mLm8sdz1mLmQscj16ZShHZSh0VShmLChOdCgpLHgwKSkpKSxhPXplKEdlKHRVKGYsSDYpKSksRT16ZShHZSh0VShmLHVkZSkpKSxnPW5ldyAkaWUsRDRlKGcsdy5kLHcuYyx3LmEsdy5iKSxCPVdTbih0LHIsYSxFKSxmZT1uZXcgRyh0LmQpO2ZlLmE8ZmUuYy5jLmxlbmd0aDspe2Zvcih0ZT1sKHJlKGZlKSwxMDUpLFY9dGUuZi5hLmVjKCkuS2MoKTtWLk9iKCk7KXo9bChWLlBiKCksMzQwKSxvPXouYSxMPUF4bih6KSxuPShUZT1uZXcgYmwsUGd0KHosei5jLEIsVGUpLHQ5bih6LEwsQixUZSksUGd0KHosei5kLEIsVGUpLFRlKSxuPWUubmcoeixMLG4pLENoKG8uYSksS2Eoby5hLG4pLElzKG5ldyBibihudWxsLG5ldyBrbihuLDE2KSksbmV3ICRldChDLGcpKTtKPXRlLmksSiYmKGJ4bih0ZSxKLEIsYSksTWU9bmV3IEVvKEouZyksVjhlKEMsZyxNZSksT2koTWUsSi5qKSxWOGUoQyxnLE1lKSl9RDRlKHcsZy5kLGcuYyxnLmEsZy5iKX1mdW5jdGlvbiBqTG4oZSx0LG4scixhLG8sZixnKXt2YXIgdyxFLEMsTDtzd2l0Y2godz1PMShoZShsZShNT24sMSksUm4sMjM4LDAsW3QsbixyLGFdKSksTD1udWxsLGUuYi5nKXtjYXNlIDE6TD1PMShoZShsZShsT2UsMSksUm4sNTM1LDAsW25ldyB2SSxuZXcgeW0sbmV3IFE5XSkpO2JyZWFrO2Nhc2UgMDpMPU8xKGhlKGxlKGxPZSwxKSxSbiw1MzUsMCxbbmV3IFE5LG5ldyB5bSxuZXcgdkldKSk7YnJlYWs7Y2FzZSAyOkw9TzEoaGUobGUobE9lLDEpLFJuLDUzNSwwLFtuZXcgeW0sbmV3IHZJLG5ldyBROV0pKX1mb3IoQz1uZXcgRyhMKTtDLmE8Qy5jLmMubGVuZ3RoOylFPWwocmUoQyksNTM1KSx3LmMubGVuZ3RoPjEmJih3PUUuSGcodyxlLmEsZykpO3JldHVybiB3LmMubGVuZ3RoPT0xP2woanQodyx3LmMubGVuZ3RoLTEpLDIzOCk6dy5jLmxlbmd0aD09Mj9DTG4oKFNuKDAsdy5jLmxlbmd0aCksbCh3LmNbMF0sMjM4KSksKFNuKDEsdy5jLmxlbmd0aCksbCh3LmNbMV0sMjM4KSksZixvKTpudWxsfWZ1bmN0aW9uICRMbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEU7Zm9yKG4uVWcoIkZpbmQgcm9vdHMiLDEpLGUuYS5jLmxlbmd0aD0wLGE9UnIodC5iLDApO2EuYiE9YS5kLmM7KXI9bChCcihhKSw0MCksci5iLmI9PTAmJihydChyLChRaSgpLFZiKSwoSG4oKSwhMCkpLHZ0KGUuYSxyKSk7c3dpdGNoKGUuYS5jLmxlbmd0aCl7Y2FzZSAwOm89bmV3IHhjZSgwLHQsIkRVTU1ZX1JPT1QiKSxydChvLChRaSgpLFZiKSwoSG4oKSwhMCkpLHJ0KG8sTmRlLCEwKSx1aSh0LmIsbyk7YnJlYWs7Y2FzZSAxOmJyZWFrO2RlZmF1bHQ6Zm9yKGY9bmV3IHhjZSgwLHQsREcpLHc9bmV3IEcoZS5hKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksNDApLEU9bmV3IE41ZShmLGcpLHJ0KEUsKFFpKCksTmRlKSwoSG4oKSwhMCkpLHVpKGYuYS5hLEUpLHVpKGYuZCxFKSx1aShnLmIsRSkscnQoZyxWYiwhMSk7cnQoZiwoUWkoKSxWYiksKEhuKCksITApKSxydChmLE5kZSwhMCksdWkodC5iLGYpfW4uVmcoKX1mdW5jdGlvbiBmdnQoZSl7dmFyIHQsbixyLGEsbyxmO2ZvcihWdShlLmEsbmV3IFFhKSxuPW5ldyBHKGUuYSk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDIyNSkscj1tYShKYShsKGUuYiw2OCkuYyksbCh0LmIsNjgpLmMpLEM3dD8oZj1sKGUuYiw2OCkuYixvPWwodC5iLDY4KS5iLGIuTWF0aC5hYnMoci5hKT49Yi5NYXRoLmFicyhyLmIpPyhyLmI9MCxvLmQrby5hPmYuZCYmby5kPGYuZCtmLmEmJlFxKHIsYi5NYXRoLm1heChmLmMtKG8uYytvLmIpLG8uYy0oZi5jK2YuYikpKSk6KHIuYT0wLG8uYytvLmI+Zi5jJiZvLmM8Zi5jK2YuYiYmUXEocixiLk1hdGgubWF4KGYuZC0oby5kK28uYSksby5kLShmLmQrZi5hKSkpKSk6UXEocixCbXQobChlLmIsNjgpLGwodC5iLDY4KSkpLGE9Yi5NYXRoLnNxcnQoci5hKnIuYStyLmIqci5iKSxhPU1ndChSTCx0LGEsciksUXEocixhKSxNYWUobCh0LmIsNjgpLHIpLFZ1KHQuYSxuZXcgTXoocikpLGwoUkwuYiw2OCksRDZlKFJMLEhfZSx0KX1mdW5jdGlvbiB6TG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtmb3IoZS5mPW5ldyBqaWUsRT0wLGE9MCxmPW5ldyBHKGUuZS5iKTtmLmE8Zi5jLmMubGVuZ3RoOylmb3Iobz1sKHJlKGYpLDMwKSx3PW5ldyBHKG8uYSk7dy5hPHcuYy5jLmxlbmd0aDspe2ZvcihnPWwocmUodyksMTApLGcucD1FKysscj1uZXcgaHIoZHIocXMoZykuYS5LYygpLG5ldyBqKSk7anIocik7KW49bCh4cihyKSwxOCksbi5wPWErKztmb3IodD15bGUoZyksQj1uZXcgRyhnLmopO0IuYTxCLmMuYy5sZW5ndGg7KUw9bChyZShCKSwxMiksdCYmKFY9TC5hLmIsViE9Yi5NYXRoLmZsb29yKFYpJiYoQz1WLUZtKFpjKGIuTWF0aC5yb3VuZChWKSkpLEwuYS5iLT1DKSksej1MLm4uYitMLmEuYix6IT1iLk1hdGguZmxvb3IoeikmJihDPXotRm0oWmMoYi5NYXRoLnJvdW5kKHopKSksTC5uLmItPUMpfWUuZz1FLGUuYj1hLGUuaT1XZShTT24sUm4sNDEyLEUsMCwxKSxlLmM9V2UoQ09uLFJuLDY1NSxhLDAsMSksZS5kLmEuJGIoKX1mdW5jdGlvbiAkcihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEU7aWYoZS5QaigpKWlmKHc9ZS5RaigpLGUuaT4wKXtpZih0PW5ldyBleWUoZS5pLGUuZyksbj1lLmksbz1uPDEwMD9udWxsOm5ldyBuYihuKSxlLlRqKCkpZm9yKHI9MDtyPGUuaTsrK3IpZj1lLmdbcl0sbz1lLlZqKGYsbyk7aWYodUEoZSksYT1uPT0xP2UuSWooNCxPZSh0LDApLG51bGwsMCx3KTplLklqKDYsdCxudWxsLC0xLHcpLGUuTWooKSl7Zm9yKHI9bmV3IEg4KHQpO3IuZSE9ci5pLmdjKCk7KW89ZS5PaihydWUociksbyk7bz8oby5uaihhKSxvLm9qKCkpOmUuSmooYSl9ZWxzZSBvPyhvLm5qKGEpLG8ub2ooKSk6ZS5KaihhKX1lbHNlIHVBKGUpLGUuSmooZS5Jaig2LChDbigpLF9vKSxudWxsLC0xLHcpKTtlbHNlIGlmKGUuTWooKSlpZihlLmk+MCl7Zm9yKGc9ZS5nLEU9ZS5pLHVBKGUpLG89RTwxMDA/bnVsbDpuZXcgbmIoRSkscj0wO3I8RTsrK3IpZj1nW3JdLG89ZS5PaihmLG8pO28mJm8ub2ooKX1lbHNlIHVBKGUpO2Vsc2UgdUEoZSl9ZnVuY3Rpb24gSWtlKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQjtmb3IoR2Z0KHRoaXMpLG49PShTdygpLEhiKT9uYSh0aGlzLnIsZSk6bmEodGhpcy53LGUpLEM9Z3MsRT1pYSxmPXQuYS5lYygpLktjKCk7Zi5PYigpOylhPWwoZi5QYigpLDQyKSxnPWwoYS5hLDQ2NSkscj1sKGEuYiwxOCksdz1yLmMsdz09ZSYmKHc9ci5kKSxnPT1IYj9uYSh0aGlzLnIsdyk6bmEodGhpcy53LHcpLEI9KEN0KCksaGwpLkhjKHcuaik/emUoR2UoUSh3LChmdCgpLHpUKSkpKTpJYyhoZShsZShFYSwxKSxkdCw4LDAsW3cuaS5uLHcubix3LmFdKSkuYixDPWIuTWF0aC5taW4oQyxCKSxFPWIuTWF0aC5tYXgoRSxCKTtmb3IoTD0oQ3QoKSxobCkuSGMoZS5qKT96ZShHZShRKGUsKGZ0KCkselQpKSkpOkljKGhlKGxlKEVhLDEpLGR0LDgsMCxbZS5pLm4sZS5uLGUuYV0pKS5iLFpndCh0aGlzLEwsQyxFKSxvPXQuYS5lYygpLktjKCk7by5PYigpOylhPWwoby5QYigpLDQyKSx1cHQodGhpcyxsKGEuYiwxOCkpO3RoaXMubz0hMX1mdW5jdGlvbiBxTG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyO3JldHVybiBuPWUubCY4MTkxLHI9ZS5sPj4xM3woZS5tJjE1KTw8OSxhPWUubT4+NCY4MTkxLG89ZS5tPj4xN3woZS5oJjI1NSk8PDUsZj0oZS5oJjEwNDgzMjApPj44LGc9dC5sJjgxOTEsdz10Lmw+PjEzfCh0Lm0mMTUpPDw5LEU9dC5tPj40JjgxOTEsQz10Lm0+PjE3fCh0LmgmMjU1KTw8NSxMPSh0LmgmMTA0ODMyMCk+PjgsY249bipnLGFuPXIqZyxCbj1hKmcsam49bypnLHVyPWYqZyx3IT0wJiYoYW4rPW4qdyxCbis9cip3LGpuKz1hKncsdXIrPW8qdyksRSE9MCYmKEJuKz1uKkUsam4rPXIqRSx1cis9YSpFKSxDIT0wJiYoam4rPW4qQyx1cis9cipDKSxMIT0wJiYodXIrPW4qTCksej1jbiZlaCxWPShhbiY1MTEpPDwxMyxCPXorVix0ZT1jbj4+MjIsZmU9YW4+PjksVGU9KEJuJjI2MjE0Myk8PDQsTWU9KGpuJjMxKTw8MTcsSj10ZStmZStUZStNZSxaZT1Cbj4+MTgsb3Q9am4+PjUsU3Q9KHVyJjQwOTUpPDw4LCRlPVplK290K1N0LEorPUI+PjIyLEImPWVoLCRlKz1KPj4yMixKJj1laCwkZSY9aHAscXUoQixKLCRlKX1mdW5jdGlvbiBkdnQoZSl7dmFyIHQsbixyLGEsbyxmLGc7aWYoZz1sKGp0KGUuaiwwKSwxMiksZy5nLmMubGVuZ3RoIT0wJiZnLmUuYy5sZW5ndGghPTApdGhyb3cgdWUobmV3IG5jKCJJbnRlcmFjdGl2ZSBsYXlvdXQgZG9lcyBub3Qgc3VwcG9ydCBOT1JUSC9TT1VUSCBwb3J0cyB3aXRoIGluY29taW5nIF9hbmRfIG91dGdvaW5nIGVkZ2VzLiIpKTtpZihnLmcuYy5sZW5ndGghPTApe2ZvcihvPWdzLG49bmV3IEcoZy5nKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTgpLGY9dC5kLmkscj1sKFEoZiwoTnQoKSx2VykpLDE0MCksbz1iLk1hdGgubWluKG8sZi5uLmEtci5iKTtyZXR1cm4gbmV3IEpTKFhyKG8pKX1pZihnLmUuYy5sZW5ndGghPTApe2ZvcihhPWlhLG49bmV3IEcoZy5lKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTgpLGY9dC5jLmkscj1sKFEoZiwoTnQoKSx2VykpLDE0MCksYT1iLk1hdGgubWF4KGEsZi5uLmErZi5vLmErci5jKTtyZXR1cm4gbmV3IEpTKFhyKGEpKX1yZXR1cm4gb18oKSxvXygpLHYwZX1mdW5jdGlvbiBndnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdztpZihlLm9sKCkpe2lmKGUuaT40KWlmKGUuZmsodCkpe2lmKGUuYWwoKSl7aWYoYT1sKHQsNTQpLHI9YS5FaCgpLHc9cj09ZS5lJiYoZS5tbCgpP2EueWgoYS5GaCgpLGUuaWwoKSk9PWUuamwoKTotMS1hLkZoKCk9PWUuTGooKSksZS5ubCgpJiYhdyYmIXImJmEuSmgoKSl7Zm9yKG89MDtvPGUuaTsrK28paWYobj1lLnBsKGwoZS5nW29dLDU4KSkscWUobik9PT1xZSh0KSlyZXR1cm4hMH1yZXR1cm4gd31lbHNlIGlmKGUubWwoKSYmIWUubGwoKSl7aWYoZj1sKHQsNTgpLk1oKFJvKGwoZS5MaygpLDE5KSkpLHFlKGYpPT09cWUoZS5lKSlyZXR1cm4hMDtpZihmPT1udWxsfHwhbChmLDU4KS5WaCgpKXJldHVybiExfX1lbHNlIHJldHVybiExO2lmKGc9akUoZSx0KSxlLm5sKCkmJiFnKXtmb3Iobz0wO288ZS5pOysrbylpZihhPWUucGwobChlLmdbb10sNTgpKSxxZShhKT09PXFlKHQpKXJldHVybiEwfXJldHVybiBnfWVsc2UgcmV0dXJuIGpFKGUsdCl9ZnVuY3Rpb24gSExuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZTtmb3Iobi5VZygiSW50ZXJhY3RpdmUgY3ljbGUgYnJlYWtpbmciLDEpLEw9bmV3IGJ0LHo9bmV3IEcodC5hKTt6LmE8ei5jLmMubGVuZ3RoOylmb3IoQj1sKHJlKHopLDEwKSxCLnA9MSxWPUV4ZShCKS5hLEM9UncoQiwocW8oKSx6dSkpLktjKCk7Qy5PYigpOylmb3IoRT1sKEMuUGIoKSwxMiksbz1uZXcgRyhFLmcpO28uYTxvLmMuYy5sZW5ndGg7KXI9bChyZShvKSwxOCksSj1yLmQuaSxKIT1CJiYodGU9RXhlKEopLmEsdGU8ViYmJG4oTC5jLHIpKTtmb3IoZj1uZXcgRyhMKTtmLmE8Zi5jLmMubGVuZ3RoOylyPWwocmUoZiksMTgpLFV3KHIsITApO2ZvcihMLmMubGVuZ3RoPTAsdz1uZXcgRyh0LmEpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxMCksZy5wPjAmJmdwdChlLGcsTCk7Zm9yKGE9bmV3IEcoTCk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE4KSxVdyhyLCEwKTtMLmMubGVuZ3RoPTAsbi5WZygpfWZ1bmN0aW9uIFZMbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQztmb3Iobj0wLEM9bmV3IGJ0LGc9bmV3IEcodCk7Zy5hPGcuYy5jLmxlbmd0aDspe3N3aXRjaChmPWwocmUoZyksMTIpLFk3ZShlLmIsZS5kW2YucF0pLEMuYy5sZW5ndGg9MCxmLmkuay5nKXtjYXNlIDA6cj1sKFEoZiwoZnQoKSxqbCkpLDEwKSxWdShyLmosbmV3IEdZZShDKSk7YnJlYWs7Y2FzZSAxOmlobihrRShGaShuZXcgYm4obnVsbCxuZXcga24oZi5pLmosMTYpKSxuZXcgS1llKGYpKSksbmV3IFdZZShDKSk7YnJlYWs7Y2FzZSAzOmE9bChRKGYsKGZ0KCksemkpKSwxMiksdnQoQyxuZXcgY2EoYSxwdChmLmUuYy5sZW5ndGgrZi5nLmMubGVuZ3RoKSkpfWZvcihFPW5ldyBHKEMpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSw0Miksbz1mM2UoZSxsKHcuYSwxMikpLG8+ZS5kW2YucF0mJihuKz1mNmUoZS5iLG8pKmwody5iLDE3KS5hLGdiKGUuYSxwdChvKSkpO2Zvcig7IWxfKGUuYSk7KVU2ZShlLmIsbChYOChlLmEpLDE3KS5hKX1yZXR1cm4gbn1mdW5jdGlvbiBVTG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtpZihDPWwoUShlLChmdCgpLFdjKSksNjQpLHI9bChqdChlLmosMCksMTIpLEM9PShDdCgpLFFuKT9sYShyLERyKTpDPT1EciYmbGEocixRbiksbChRKHQsKE50KCksYnYpKSwxODEpLkhjKChtaCgpLEN2KSkpe2lmKHc9emUoR2UoUShlLEdUKSkpLEU9emUoR2UoUShlLEtUKSkpLGY9emUoR2UoUShlLHk0KSkpLGc9bChRKHQsdjQpLDIxKSxnLkhjKChSbCgpLHZwKSkpZm9yKG49RSxMPWUuby5hLzItci5uLmEsbz1uZXcgRyhyLmYpO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSw3MiksYS5uLmI9bixhLm4uYT1MLWEuby5hLzIsbis9YS5vLmIrZjtlbHNlIGlmKGcuSGMoWWIpKWZvcihvPW5ldyBHKHIuZik7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDcyKSxhLm4uYT13K2Uuby5hLXIubi5hO21ibihuZXcgZV8oKGdfKCksbmV3IEphZSh0LCExLCExLG5ldyBjUykpKSxuZXcgV3EobnVsbCxlLCExKSl9fWZ1bmN0aW9uIEdMbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQztpZih0LmMubGVuZ3RoIT0wKXtmb3IoQ24oKSxMYWUodC5jLHQuYy5sZW5ndGgsbnVsbCksYT1uZXcgRyh0KSxyPWwocmUoYSksMTU0KTthLmE8YS5jLmMubGVuZ3RoOyluPWwocmUoYSksMTU0KSxYNmUoci5lLmMsbi5lLmMpJiYhKGo4ZShfcnQoci5lKS5iLG4uZS5kKXx8ajhlKF9ydChuLmUpLmIsci5lLmQpKT9yPShyYShyLmssbi5rKSxyYShyLmIsbi5iKSxyYShyLmMsbi5jKSxLYShyLmksbi5pKSxyYShyLmQsbi5kKSxyYShyLmosbi5qKSxvPWIuTWF0aC5taW4oci5lLmMsbi5lLmMpLGY9Yi5NYXRoLm1pbihyLmUuZCxuLmUuZCksZz1iLk1hdGgubWF4KHIuZS5jK3IuZS5iLG4uZS5jK24uZS5iKSx3PWctbyxFPWIuTWF0aC5tYXgoci5lLmQrci5lLmEsbi5lLmQrbi5lLmEpLEM9RS1mLElpdChyLmUsbyxmLHcsQyksYmJuKHIuZixuLmYpLCFyLmEmJihyLmE9bi5hKSxyYShyLmcsbi5nKSx2dChyLmcsbikscik6KF9tdChlLHIpLHI9bik7X210KGUscil9fWZ1bmN0aW9uIEtMbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmU7Zm9yKHc9bmV3IGJ0LG89bmV3IEcodC5hKTtvLmE8by5jLmMubGVuZ3RoOylmb3IoYT1sKHJlKG8pLDEwKSxnPW5ldyBHKGEuaik7Zy5hPGcuYy5jLmxlbmd0aDspe2ZvcihmPWwocmUoZyksMTIpLEM9bnVsbCxNZT1rZChmLmcpLCRlPTAsWmU9TWUubGVuZ3RoOyRlPFplOysrJGUpVGU9TWVbJGVdLGJFKFRlLmQuaSxuKXx8KGZlPXhsZShlLHQsbixUZSxUZS5jLChxbygpLHp1KSxDKSxmZSE9QyYmJG4ody5jLGZlKSxmZS5jJiYoQz1mZSkpO2ZvcihFPW51bGwsVj1rZChmLmUpLEo9MCx0ZT1WLmxlbmd0aDtKPHRlOysrSil6PVZbSl0sYkUoei5jLmksbil8fChmZT14bGUoZSx0LG4seix6LmQsKHFvKCksJGwpLEUpLGZlIT1FJiYkbih3LmMsZmUpLGZlLmMmJihFPWZlKSl9Zm9yKEI9bmV3IEcodyk7Qi5hPEIuYy5jLmxlbmd0aDspTD1sKHJlKEIpLDQ1MyksZ2ModC5hLEwuYSwwKSE9LTF8fHZ0KHQuYSxMLmEpLEwuYyYmJG4oci5jLEwpfWZ1bmN0aW9uIFdMbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGU7Zm9yKEw9bmV3IEVvKGwoYXQoZSwod1UoKSxRT2UpKSw4KSksTC5hPWIuTWF0aC5tYXgoTC5hLW4uYi1uLmMsMCksTC5iPWIuTWF0aC5tYXgoTC5iLW4uZC1uLmEsMCksYT1HZShhdChlLFdPZSkpLChhPT1udWxsfHwobnIoYSksYTw9MCkpJiYoYT0xLjMpLGc9bmV3IGJ0LFY9bmV3IG9yKCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSk7Vi5lIT1WLmkuZ2MoKTspej1sKGdyKFYpLDI3KSxmPW5ldyB2cnQoeiksJG4oZy5jLGYpO3N3aXRjaChCPWwoYXQoZSxfZ2UpLDMyMCksQi5nKXtjYXNlIDM6dGU9Tl9uKGcsdCxMLmEsTC5iLChFPXIsbnIoYSksRSkpO2JyZWFrO2Nhc2UgMTp0ZT1UQW4oZyx0LEwuYSxMLmIsKEM9cixucihhKSxDKSk7YnJlYWs7ZGVmYXVsdDp0ZT1YTG4oZyx0LEwuYSxMLmIsKHc9cixucihhKSx3KSl9bz1uZXcgaFYodGUpLEo9TGxlKG8sdCxuLEwuYSxMLmIsciwobnIoYSksYSkpLEd3KGUsSi5hLEouYiwhMSwhMCl9ZnVuY3Rpb24gWUxuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRTtpZihnPWUuaixnPT0oQ3QoKSxQYykmJnQhPShSYSgpLFoxKSYmdCE9KFJhKCksV2IpJiYoZz1rbXQoZSxuKSxsYShlLGcpLCEoZS5xP2UucTooQ24oKSxDbigpLG1nKSkuX2IoKE50KCksbTQpKSYmZyE9UGMmJihlLm4uYSE9MHx8ZS5uLmIhPTApJiZydChlLG00LFk3bihlLGcpKSksdD09KFJhKCksVGcpKXtzd2l0Y2goRT0wLGcuZyl7Y2FzZSAxOmNhc2UgMzpvPWUuaS5vLmEsbz4wJiYoRT1lLm4uYS9vKTticmVhaztjYXNlIDI6Y2FzZSA0OmE9ZS5pLm8uYixhPjAmJihFPWUubi5iL2EpfXJ0KGUsKGZ0KCksbDMpLEUpfWlmKHc9ZS5vLGY9ZS5hLHIpZi5hPXIuYSxmLmI9ci5iLGUuZD0hMDtlbHNlIGlmKHQhPVoxJiZ0IT1XYiYmZyE9UGMpc3dpdGNoKGcuZyl7Y2FzZSAxOmYuYT13LmEvMjticmVhaztjYXNlIDI6Zi5hPXcuYSxmLmI9dy5iLzI7YnJlYWs7Y2FzZSAzOmYuYT13LmEvMixmLmI9dy5iO2JyZWFrO2Nhc2UgNDpmLmI9dy5iLzJ9ZWxzZSBmLmE9dy5hLzIsZi5iPXcuYi8yfWZ1bmN0aW9uIHRMKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDO2lmKGUuUGooKSlpZihDPWUuRWooKSx3PWUuUWooKSxDPjApaWYodD1uZXcgVDdlKGUucGooKSksbj1DLG89bjwxMDA/bnVsbDpuZXcgbmIobiksQU8oZSxuLHQuZyksYT1uPT0xP2UuSWooNCxPZSh0LDApLG51bGwsMCx3KTplLklqKDYsdCxudWxsLC0xLHcpLGUuTWooKSl7Zm9yKHI9bmV3IG9yKHQpO3IuZSE9ci5pLmdjKCk7KW89ZS5PaihncihyKSxvKTtvPyhvLm5qKGEpLG8ub2ooKSk6ZS5KaihhKX1lbHNlIG8/KG8ubmooYSksby5vaigpKTplLkpqKGEpO2Vsc2UgQU8oZSxlLkVqKCksZS5GaigpKSxlLkpqKGUuSWooNiwoQ24oKSxfbyksbnVsbCwtMSx3KSk7ZWxzZSBpZihlLk1qKCkpaWYoQz1lLkVqKCksQz4wKXtmb3IoZz1lLkZqKCksRT1DLEFPKGUsQyxnKSxvPUU8MTAwP251bGw6bmV3IG5iKEUpLHI9MDtyPEU7KytyKWY9Z1tyXSxvPWUuT2ooZixvKTtvJiZvLm9qKCl9ZWxzZSBBTyhlLGUuRWooKSxlLkZqKCkpO2Vsc2UgQU8oZSxlLkVqKCksZS5GaigpKX1mdW5jdGlvbiBYTG4oZSx0LG4scixhKXt2YXIgbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2ZvcihnPVdlKE5hLFpvLDI4LGUuYy5sZW5ndGgsMTUsMSksQj1uZXcgZ0gobmV3IG5rKSxjeGUoQixlKSxFPTAsSj1uZXcgYnQ7Qi5iLmMubGVuZ3RoIT0wOylpZihmPWwoQi5iLmMubGVuZ3RoPT0wP251bGw6anQoQi5iLDApLDE2MyksRT4xJiZ3bChmKSpnaChmKS8yPmdbMF0pe2ZvcihvPTA7bzxKLmMubGVuZ3RoLTEmJndsKGYpKmdoKGYpLzI+Z1tvXTspKytvO1Y9bmV3IFpwKEosMCxvKzEpLEw9bmV3IGhWKFYpLEM9d2woZikvZ2goZiksdz1MbGUoTCx0LG5ldyBBOCxuLHIsYSxDKSxPaShZMChMLmUpLHcpLEs4KCRFKEIsTCksYVQpLHo9bmV3IFpwKEosbysxLEouYy5sZW5ndGgpLGN4ZShCLHopLEouYy5sZW5ndGg9MCxFPTAsZ3N0KGcsZy5sZW5ndGgsMCl9ZWxzZSB0ZT1CLmIuYy5sZW5ndGg9PTA/bnVsbDpqdChCLmIsMCksdGUhPW51bGwmJnJjZShCLDApLEU+MCYmKGdbRV09Z1tFLTFdKSxnW0VdKz13bChmKSpnaChmKSwrK0UsJG4oSi5jLGYpO3JldHVybiBKfWZ1bmN0aW9uIFFMbihlLHQpe3ZhciBuLHIsYSxvO249dC5iLG89bmV3IE9sKG4uaiksYT0wLHI9bi5qLHIuYy5sZW5ndGg9MCxtdyhsKHptKGUuYiwoQ3QoKSxRbiksKE93KCksbzMpKSwxNSksbiksYT16TihvLGEsbmV3IEd2LHIpLG13KGwoem0oZS5iLFFuLFJiKSwxNSksbiksYT16TihvLGEsbmV3IGJlZSxyKSxtdyhsKHptKGUuYixRbixhMyksMTUpLG4pLG13KGwoem0oZS5iLGFyLG8zKSwxNSksbiksbXcobCh6bShlLmIsYXIsUmIpLDE1KSxuKSxhPXpOKG8sYSxuZXcgJGosciksbXcobCh6bShlLmIsYXIsYTMpLDE1KSxuKSxtdyhsKHptKGUuYixEcixvMyksMTUpLG4pLGE9ek4obyxhLG5ldyB6aixyKSxtdyhsKHptKGUuYixEcixSYiksMTUpLG4pLGE9ek4obyxhLG5ldyBxaixyKSxtdyhsKHptKGUuYixEcixhMyksMTUpLG4pLG13KGwoem0oZS5iLGVyLG8zKSwxNSksbiksYT16TihvLGEsbmV3IEJqLHIpLG13KGwoem0oZS5iLGVyLFJiKSwxNSksbiksbXcobCh6bShlLmIsZXIsYTMpLDE1KSxuKX1mdW5jdGlvbiBKTG4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHo7Zm9yKGc9bmV3IEcodCk7Zy5hPGcuYy5jLmxlbmd0aDspbz1sKHJlKGcpLDIzOSksby5lPW51bGwsby5jPTA7Zm9yKHc9bnVsbCxmPW5ldyBHKHQpO2YuYTxmLmMuYy5sZW5ndGg7KWlmKG89bChyZShmKSwyMzkpLEw9by5kWzBdLCEobiYmTC5rIT0oWm4oKSxQcykpKXtmb3Ioej1sKFEoTCwoZnQoKSxXeCkpLDE1KS5LYygpO3ouT2IoKTspQj1sKHouUGIoKSwxMCksKCFufHxCLms9PShabigpLFBzKSkmJigoIW8uZSYmKG8uZT1uZXcgYnQpLG8uZSkuRmMoZS5iW0IuYy5wXVtCLnBdKSwrK2UuYltCLmMucF1bQi5wXS5jKTtpZighbiYmTC5rPT0oWm4oKSxQcykpe2lmKHcpZm9yKEM9bCgkaShlLmQsdyksMjEpLktjKCk7Qy5PYigpOylmb3IoRT1sKEMuUGIoKSwxMCksYT1sKCRpKGUuZCxMKSwyMSkuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTApLHJkbihlLmJbRS5jLnBdW0UucF0pLkZjKGUuYltyLmMucF1bci5wXSksKytlLmJbci5jLnBdW3IucF0uYzt3PUx9fX1mdW5jdGlvbiBaTG4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2ZvcihuLlVnKCJNb2RlbCBvcmRlciBjeWNsZSBicmVha2luZyIsMSksZS5hPTAsZS5iPTAsej1uZXcgYnQsQz10LmEuYy5sZW5ndGgsRT1uZXcgRyh0LmEpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwxMCksbnModywoZnQoKSxLaSkpJiYoQz1iLk1hdGgubWF4KEMsbChRKHcsS2kpLDE3KS5hKzEpKTtmb3IoSj1uZXcgRyh0LmEpO0ouYTxKLmMuYy5sZW5ndGg7KWZvcihWPWwocmUoSiksMTApLGY9VHB0KGUsVixDKSxCPVJ3KFYsKHFvKCksenUpKS5LYygpO0IuT2IoKTspZm9yKEw9bChCLlBiKCksMTIpLG89bmV3IEcoTC5nKTtvLmE8by5jLmMubGVuZ3RoOylyPWwocmUobyksMTgpLHRlPXIuZC5pLGc9VHB0KGUsdGUsQyksZzxmJiYkbih6LmMscik7Zm9yKGE9bmV3IEcoeik7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE4KSxVdyhyLCEwKSxydCh0LChmdCgpLHlCKSwoSG4oKSwhMCkpO3ouYy5sZW5ndGg9MCxuLlZnKCl9ZnVuY3Rpb24gcHZ0KGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQjtmb3IoZj10LmQsZz1uLmQ7Zi5hLWcuYT09MCYmZi5iLWcuYj09MDspdz0hMSxEZSh0LDI1MCkmJkRlKG4sMjUwKSYmIXc/KEU9bCh0LDI1MCkuYSxDPW1hKG5ldyBFbyhyN2UoRSkpLG43ZShFKSkscj0yLGE9bmV3IGx0KEMuYS9iLk1hdGguc3FydChDLmEqQy5hK0MuYipDLmIpKnIsLUMuYi9iLk1hdGguc3FydChDLmEqQy5hK0MuYipDLmIpKnIpLE9pKGYsYSksTD1sKG4sMjUwKS5hLEI9bWEobmV3IEVvKHI3ZShMKSksbjdlKEwpKSxyPUM9PUI/LTI6MixvPW5ldyBsdChCLmEvYi5NYXRoLnNxcnQoQi5hKkIuYStCLmIqQi5iKSpyLC0oQi5iL2IuTWF0aC5zcXJ0KEIuYSpCLmErQi5iKkIuYikpKnIpLE9pKGYsbyksdz0hMCk6KGYuYSs9SmwoZSwyNikqaUwrSmwoZSwyNykqc0wtLjUsZi5iKz1KbChlLDI2KSppTCtKbChlLDI3KSpzTC0uNSxnLmErPUpsKGUsMjYpKmlMK0psKGUsMjcpKnNMLS41LGcuYis9SmwoZSwyNikqaUwrSmwoZSwyNykqc0wtLjUpfWZ1bmN0aW9uIGVNbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGU7Zm9yKEU9RDluKHQpLEo9bChRKHQsKE50KCksSkwpKSwzMjIpLHRvKEUsbmV3IEl6KEopKSx0ZT1sKFEodCxUQiksMjk5KSx0byhFLG5ldyBPaWUodGUpKSxWPTAsQz1uZXcgYnQsbz1uZXcgbkEoRSk7by5hIT1vLmI7KWE9bChGVihvKSwzNiksX3Z0KGUuYyxhKSxCPWwoUShhLChmdCgpLEsxZSkpLDE1KSxWKz1CLmdjKCkscj1CLktjKCksdnQoQyxuZXcgY2EoYSxyKSk7Zm9yKG4uVWcoIlJlY3Vyc2l2ZSBoaWVyYXJjaGljYWwgbGF5b3V0IixWKSx6PWwobChqdChDLEMuYy5sZW5ndGgtMSksNDIpLmIsNTEpO3ouT2IoKTspZm9yKHc9bmV3IEcoQyk7dy5hPHcuYy5jLmxlbmd0aDspZm9yKGc9bChyZSh3KSw0MiksQj1sKGcuYiw1MSksZj1sKGcuYSwzNik7Qi5PYigpOylpZihMPWwoQi5QYigpLDQ3KSxEZShMLDUxNCkpe2lmKGYuZSlicmVhaztMLktmKGYsbi5laCgxKSk7YnJlYWt9ZWxzZSBMLktmKGYsbi5laCgxKSk7bi5WZygpfWZ1bmN0aW9uIHRNbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEo7Zm9yKHQuVWcoIkxheWVyIHNpemUgY2FsY3VsYXRpb24iLDEpLEM9Z3MsRT1pYSxhPSExLGc9bmV3IEcoZS5iKTtnLmE8Zy5jLmMubGVuZ3RoOylpZihmPWwocmUoZyksMzApLHc9Zi5jLHcuYT0wLHcuYj0wLGYuYS5jLmxlbmd0aCE9MCl7Zm9yKGE9ITAsQj1uZXcgRyhmLmEpO0IuYTxCLmMuYy5sZW5ndGg7KUw9bChyZShCKSwxMCksVj1MLm8sej1MLmQsdy5hPWIuTWF0aC5tYXgody5hLFYuYSt6LmIrei5jKTtyPWwoanQoZi5hLDApLDEwKSxKPXIubi5iLXIuZC5kLHIuaz09KFpuKCksVXMpJiYoSi09bChRKGUsKE50KCksX0IpKSwxNDApLmQpLG89bChqdChmLmEsZi5hLmMubGVuZ3RoLTEpLDEwKSxuPW8ubi5iK28uby5iK28uZC5hLG8uaz09VXMmJihuKz1sKFEoZSwoTnQoKSxfQikpLDE0MCkuYSksdy5iPW4tSixDPWIuTWF0aC5taW4oQyxKKSxFPWIuTWF0aC5tYXgoRSxuKX1hfHwoQz0wLEU9MCksZS5mLmI9RS1DLGUuYy5iLT1DLHQuVmcoKX1mdW5jdGlvbiBPa2UoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO2ZvcihvPTAsZj0wLEU9bmV3IEcoZS5hKTtFLmE8RS5jLmMubGVuZ3RoOylnPWwocmUoRSksMTApLG89Yi5NYXRoLm1heChvLGcuZC5iKSxmPWIuTWF0aC5tYXgoZixnLmQuYyk7Zm9yKHc9bmV3IEcoZS5hKTt3LmE8dy5jLmMubGVuZ3RoOyl7c3dpdGNoKGc9bChyZSh3KSwxMCksbj1sKFEoZywoTnQoKSxSZCkpLDI1NSksbi5nKXtjYXNlIDE6Vj0wO2JyZWFrO2Nhc2UgMjpWPTE7YnJlYWs7Y2FzZSA1OlY9LjU7YnJlYWs7ZGVmYXVsdDpmb3Iocj0wLEw9MCx6PW5ldyBHKGcuaik7ei5hPHouYy5jLmxlbmd0aDspQj1sKHJlKHopLDEyKSxCLmUuYy5sZW5ndGg9PTB8fCsrcixCLmcuYy5sZW5ndGg9PTB8fCsrTDtyK0w9PTA/Vj0uNTpWPUwvKHIrTCl9dGU9ZS5jLEM9Zy5vLmEsZmU9KHRlLmEtQykqVixWPi41P2ZlLT1mKjIqKFYtLjUpOlY8LjUmJihmZSs9byoyKiguNS1WKSksYT1nLmQuYixmZTxhJiYoZmU9YSksSj1nLmQuYyxmZT50ZS5hLUotQyYmKGZlPXRlLmEtSi1DKSxnLm4uYT10K2ZlfX1mdW5jdGlvbiBuTW4oZSl7dmFyIHQsbixyLGEsbztpZihyPWwoUShlLChOdCgpLFF1KSksMTcxKSxyPT0oaGYoKSwkYikpe2ZvcihuPW5ldyBocihkcihrYShlKS5hLktjKCksbmV3IGopKTtqcihuKTspaWYodD1sKHhyKG4pLDE4KSwhQXV0KHQpKXRocm93IHVlKG5ldyBWcChqaGUrSE4oZSkrIicgaGFzIGl0cyBsYXllciBjb25zdHJhaW50IHNldCB0byBGSVJTVF9TRVBBUkFURSwgYnV0IGhhcyBhdCBsZWFzdCBvbmUgaW5jb21pbmcgZWRnZS4gRklSU1RfU0VQQVJBVEUgbm9kZXMgbXVzdCBub3QgaGF2ZSBpbmNvbWluZyBlZGdlcy4iKSl9ZWxzZSBpZihyPT1kNCl7Zm9yKG89bmV3IGhyKGRyKHFzKGUpLmEuS2MoKSxuZXcgaikpO2pyKG8pOylpZihhPWwoeHIobyksMTgpLCFBdXQoYSkpdGhyb3cgdWUobmV3IFZwKGpoZStITihlKSsiJyBoYXMgaXRzIGxheWVyIGNvbnN0cmFpbnQgc2V0IHRvIExBU1RfU0VQQVJBVEUsIGJ1dCBoYXMgYXQgbGVhc3Qgb25lIG91dGdvaW5nIGVkZ2UuIExBU1RfU0VQQVJBVEUgbm9kZXMgbXVzdCBub3QgaGF2ZSBvdXRnb2luZyBlZGdlcy4iKSl9fWZ1bmN0aW9uIGJQKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFY7aWYoZS5lJiZlLmMuYzxlLmYpdGhyb3cgdWUobmV3IG5jKCJFeHBlY3RlZCAiK2UuZisiIHBoYXNlcyB0byBiZSBjb25maWd1cmVkOyBvbmx5IGZvdW5kICIrZS5jLmMpKTtmb3IoQz1sKEswKGUuZyksOSksej1lZyhlLmYpLG89QyxnPTAsRT1vLmxlbmd0aDtnPEU7KytnKXI9b1tnXSxMPWwoaE4oZSxyLmcpLDE4OCksTD92dCh6LGwoazF0KGUsTCksMTA2KSk6ei5jLnB1c2gobnVsbCk7Zm9yKFY9bmV3IFhzLElzKEZpKGZjKEZpKG5ldyBibihudWxsLG5ldyBrbih6LDE2KSksbmV3IFJwKSxuZXcgQVhlKHQpKSxuZXcgdTgpLG5ldyBMWGUoVikpLERoKFYsZS5hKSxuPW5ldyBidCxhPUMsZj0wLHc9YS5sZW5ndGg7Zjx3OysrZilyPWFbZl0scmEobixyMHQoZSxMSChsKGhOKFYsci5nKSwyMCkpKSksQj1sKGp0KHosci5nKSwxMDYpLEImJiRuKG4uYyxCKTtyZXR1cm4gcmEobixyMHQoZSxMSChsKGhOKFYsQ1tDLmxlbmd0aC0xXS5nKzEpLDIwKSkpKSxufWZ1bmN0aW9uIHJNbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGU7Zm9yKEI9bmV3IGJ0LGE9bmV3IGJ0LEo9bnVsbCxnPXQuS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMTcpLG89bmV3IEJZZShmLmEpLCRuKGEuYyxvKSxKJiYoby5kPUosSi5lPW8pLEo9bztmb3IoTWU9TUFuKGUpLEM9MDtDPGEuYy5sZW5ndGg7KytDKXtmb3Ioej1udWxsLHRlPV82ZSgoU24oMCxhLmMubGVuZ3RoKSxsKGEuY1swXSw2NjEpKSksbj1udWxsLHI9Z3MsTD0xO0w8ZS5iLmMubGVuZ3RoOysrTClmZT10ZT9iLk1hdGguYWJzKHRlLmItTCk6Yi5NYXRoLmFicyhMLXouYikrMSxWPXo/Yi5NYXRoLmFicyhMLXouYik6ZmUrMSxWPGZlPyhFPXosdz1WKTooRT10ZSx3PWZlKSxUZT0oJGU9emUoR2UoUShlLChOdCgpLG9EZSkpKSksTWVbTF0rYi5NYXRoLnBvdyh3LCRlKSksVGU8ciYmKHI9VGUsbj1FLG4uYz1MKSx0ZSYmTD09dGUuYiYmKHo9dGUsdGU9ZmduKHRlKSk7biYmKHZ0KEIscHQobi5jKSksbi5hPSEwLFM0bihuKSl9cmV0dXJuIENuKCksTGFlKEIuYyxCLmMubGVuZ3RoLG51bGwpLEJ9ZnVuY3Rpb24gTmtlKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYodC5sPT0wJiZ0Lm09PTAmJnQuaD09MCl0aHJvdyB1ZShuZXcgcXooImRpdmlkZSBieSB6ZXJvIikpO2lmKGUubD09MCYmZS5tPT0wJiZlLmg9PTApcmV0dXJuIG4mJihOYj1xdSgwLDAsMCkpLHF1KDAsMCwwKTtpZih0Lmg9PVNQJiZ0Lm09PTAmJnQubD09MClyZXR1cm4gUTRuKGUsbik7aWYodz0hMSx0Lmg+PjE5JiYodD14RSh0KSx3PSF3KSxmPSRUbih0KSxvPSExLGE9ITEscj0hMSxlLmg9PVNQJiZlLm09PTAmJmUubD09MClpZihhPSEwLG89ITAsZj09LTEpZT1lbnQoKGlFKCksV1NlKSkscj0hMCx3PSF3O2Vsc2UgcmV0dXJuIGc9RDllKGUsZiksdyYmeWNlKGcpLG4mJihOYj1xdSgwLDAsMCkpLGc7ZWxzZSBlLmg+PjE5JiYobz0hMCxlPXhFKGUpLHI9ITAsdz0hdyk7cmV0dXJuIGYhPS0xP3B5bihlLGYsdyxvLG4pOmJ4ZShlLHQpPDA/KG4mJihvP05iPXhFKGUpOk5iPXF1KGUubCxlLm0sZS5oKSkscXUoMCwwLDApKTpSX24ocj9lOnF1KGUubCxlLm0sZS5oKSx0LHcsbyxhLG4pfWZ1bmN0aW9uIFRsZShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2lmKGY9ZS5lLHc9dC5lLGY9PTApcmV0dXJuIHQ7aWYodz09MClyZXR1cm4gZTtpZihvPWUuZCxnPXQuZCxvK2c9PTIpcmV0dXJuIG49dmEoZS5hWzBdLFZvKSxyPXZhKHQuYVswXSxWbyksZj09dz8oQz1ibyhuLHIpLFY9WXIoQyksej1Zcih1YihDLDMyKSksej09MD9uZXcgUWcoZixWKTpuZXcgSW0oZiwyLGhlKGxlKFZyLDEpLGRpLDI4LDE1LFtWLHpdKSkpOihDZCgpLEFxKGY8MD9EZihyLG4pOkRmKG4sciksMCk/a2IoZjwwP0RmKHIsbik6RGYobixyKSk6Sl8oa2IocjIoZjwwP0RmKHIsbik6RGYobixyKSkpKSk7aWYoZj09dylCPWYsTD1vPj1nP09vZShlLmEsbyx0LmEsZyk6T29lKHQuYSxnLGUuYSxvKTtlbHNle2lmKGE9byE9Zz9vPmc/MTotMTpXN2UoZS5hLHQuYSxvKSxhPT0wKXJldHVybiBDZCgpLEJMO2E9PTE/KEI9ZixMPURvZShlLmEsbyx0LmEsZykpOihCPXcsTD1Eb2UodC5hLGcsZS5hLG8pKX1yZXR1cm4gRT1uZXcgSW0oQixMLmxlbmd0aCxMKSxpQShFKSxFfWZ1bmN0aW9uIGlNbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2lmKCEoZS5nPnQuZnx8dC5nPmUuZikpe2ZvcihuPTAscj0wLGY9ZS53LmEuZWMoKS5LYygpO2YuT2IoKTspYT1sKGYuUGIoKSwxMiksSWNlKEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbYS5pLm4sYS5uLGEuYV0pKS5iLHQuZyx0LmYpJiYrK247Zm9yKGc9ZS5yLmEuZWMoKS5LYygpO2cuT2IoKTspYT1sKGcuUGIoKSwxMiksSWNlKEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbYS5pLm4sYS5uLGEuYV0pKS5iLHQuZyx0LmYpJiYtLW47Zm9yKHc9dC53LmEuZWMoKS5LYygpO3cuT2IoKTspYT1sKHcuUGIoKSwxMiksSWNlKEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbYS5pLm4sYS5uLGEuYV0pKS5iLGUuZyxlLmYpJiYrK3I7Zm9yKG89dC5yLmEuZWMoKS5LYygpO28uT2IoKTspYT1sKG8uUGIoKSwxMiksSWNlKEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbYS5pLm4sYS5uLGEuYV0pKS5iLGUuZyxlLmYpJiYtLXI7bjxyP25ldyBXSChlLHQsci1uKTpyPG4/bmV3IFdIKHQsZSxuLXIpOihuZXcgV0godCxlLDApLG5ldyBXSChlLHQsMCkpfX1mdW5jdGlvbiBzTW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlO2ZvcihFPXQuYyxhPWR5ZShlLmUpLEw9bWQoel8oSmEoZnllKGUuZSkpLGUuZCplLmEsZS5jKmUuYiksLS41KSxuPWEuYS1MLmEscj1hLmItTC5iLGY9dC5hLG49Zi5jLW4scj1mLmQtcix3PW5ldyBHKEUpO3cuYTx3LmMuYy5sZW5ndGg7KXtzd2l0Y2goZz1sKHJlKHcpLDQwNyksQj1nLmIsej1uK0IuYSx0ZT1yK0IuYixWPXVhKHovZS5hKSxmZT11YSh0ZS9lLmIpLG89Zy5hLG8uZyl7Y2FzZSAwOkM9KGJ4KCksYUIpO2JyZWFrO2Nhc2UgMTpDPShieCgpLHNCKTticmVhaztjYXNlIDI6Qz0oYngoKSxvQik7YnJlYWs7ZGVmYXVsdDpDPShieCgpLGNCKX1vLmE/KFRlPXVhKCh0ZStnLmMpL2UuYiksdnQoZS5mLG5ldyBtNGUoQyxwdChmZSkscHQoVGUpKSksbz09KE5BKCksbEIpP3lFKGUsMCxmZSxWLFRlKTp5RShlLFYsZmUsZS5kLTEsVGUpKTooSj11YSgoeitnLmMpL2UuYSksdnQoZS5mLG5ldyBtNGUoQyxwdChWKSxwdChKKSkpLG89PShOQSgpLHVCKT95RShlLFYsMCxKLGZlKTp5RShlLFYsZmUsSixlLmMtMSkpfX1mdW5jdGlvbiBhTW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEM7Zm9yKHQ9bmV3IFNJLG49bmV3IFNJLEU9dm4oWFAsKGE9WUEoZS5iLGxpKSxhP2VpKG4xKCghYS5iJiYoYS5iPW5ldyBkaCgoVG4oKSxObyksWWMsYSkpLGEuYiksQmYpKTpudWxsKSksdz0wO3c8ZS5pOysrdylnPWwoZS5nW3ddLDE3OSksRGUoZywxMDIpPyhmPWwoZywxOSksZi5CYiZldT8oIShmLkJiJl9kKXx8IUUmJihvPVlBKGYsbGkpLChvP2VpKG4xKCghby5iJiYoby5iPW5ldyBkaCgoVG4oKSxObyksWWMsbykpLG8uYiksekcpKTpudWxsKT09bnVsbCkpJiZxcih0LGYpOihDPVJvKGYpLEMmJkMuQmImZXV8fCghKGYuQmImX2QpfHwhRSYmKHI9WUEoZixsaSksKHI/ZWkobjEoKCFyLmImJihyLmI9bmV3IGRoKChUbigpLE5vKSxZYyxyKSksci5iKSx6RykpOm51bGwpPT1udWxsKSkmJnFyKG4sZikpKTooRm8oKSxsKGcsNjkpLnhrKCkmJihnLnNrKCl8fChxcih0LGcpLHFyKG4sZykpKSk7SXkodCksSXkobiksZS5hPWwodC5nLDI1NCksbChuLmcsMjU0KX1mdW5jdGlvbiBnNihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMO2lmKG1zKHQsbik+PTApcmV0dXJuIG47c3dpdGNoKGt3KGljKGUsbikpKXtjYXNlIDI6e2lmKHZuKCIiLG8yKGUsbi5xaygpKS54ZSgpKSl7aWYodz1ITyhpYyhlLG4pKSxnPVdrKGljKGUsbikpLEM9UDllKGUsdCx3LGcpLEMpcmV0dXJuIEM7Zm9yKGE9aGtlKGUsdCksZj0wLEw9YS5nYygpO2Y8TDsrK2YpaWYoQz1sKGEuWGIoZiksMTc5KSxxOWUoJGFlKGljKGUsQykpLHcpKXJldHVybiBDfXJldHVybiBudWxsfWNhc2UgNDp7aWYodm4oIiIsbzIoZSxuLnFrKCkpLnhlKCkpKXtmb3Iocj1uO3I7cj12Ym4oaWMoZSxyKSkpaWYoRT1ITyhpYyhlLHIpKSxnPVdrKGljKGUscikpLEM9QjllKGUsdCxFLGcpLEMpcmV0dXJuIEM7aWYodz1ITyhpYyhlLG4pKSx2bihjdix3KSlyZXR1cm4geXhlKGUsdCk7Zm9yKG89YWxlKGUsdCksZj0wLEw9by5nYygpO2Y8TDsrK2YpaWYoQz1sKG8uWGIoZiksMTc5KSxxOWUoJGFlKGljKGUsQykpLHcpKXJldHVybiBDfXJldHVybiBudWxsfWRlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIG9NbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztpZihuLmdjKCk9PTApcmV0dXJuITE7aWYoZz0oRm8oKSxsKHQsNjkpLnhrKCkpLG89Zz9uOm5ldyBMdyhuLmdjKCkpLHVwKGUuZSx0KSl7aWYodC5TaSgpKWZvcihFPW4uS2MoKTtFLk9iKCk7KXc9RS5QYigpLCRVKGUsdCx3LERlKHQsMTAyKSYmKGwodCwxOSkuQmImSW8pIT0wKXx8KGE9c2codCx3KSxvLkhjKGEpfHxvLkZjKGEpKTtlbHNlIGlmKCFnKWZvcihFPW4uS2MoKTtFLk9iKCk7KXc9RS5QYigpLGE9c2codCx3KSxvLkZjKGEpfWVsc2V7aWYobi5nYygpPjEpdGhyb3cgdWUobmV3IFluKFpQKSk7Zm9yKEM9V3UoZS5lLkRoKCksdCkscj1sKGUuZywxMjQpLGY9MDtmPGUuaTsrK2YpaWYoYT1yW2ZdLEMuYW0oYS5MaygpKSl7aWYobi5IYyhnP2E6YS5tZCgpKSlyZXR1cm4hMTtmb3IoRT1uLktjKCk7RS5PYigpOyl3PUUuUGIoKSxsKG42KGUsZixnP2wodyw3Nik6c2codCx3KSksNzYpO3JldHVybiEwfWd8fChhPXNnKHQsbi5LYygpLlBiKCkpLG8uRmMoYSkpfXJldHVybiBBcyhlLG8pfWZ1bmN0aW9uIGNNbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQztmb3IoQz1uZXcgb3MsZz0oRT1uZXcgZ2koZS5jKS5hLnZjKCkuS2MoKSxuZXcgZnMoRSkpO2cuYS5PYigpOylvPShhPWwoZy5hLlBiKCksNDQpLGwoYS5tZCgpLDQ2NykpLG8uYj09MCYmQ3MoQyxvLEMuYy5iLEMuYyk7Zm9yKDtDLmIhPTA7KWZvcihvPWwoQy5iPT0wP251bGw6KG1yKEMuYiE9MCksYWYoQyxDLmEuYSkpLDQ2Nyksby5hPT1udWxsJiYoby5hPTApLHI9bmV3IEcoby5kKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNjYzKSxuLmIuYT09bnVsbD9uLmIuYT16ZShvLmEpK24uYTp0Lm89PShEMSgpLHd2KT9uLmIuYT1iLk1hdGgubWluKHplKG4uYi5hKSx6ZShvLmEpK24uYSk6bi5iLmE9Yi5NYXRoLm1heCh6ZShuLmIuYSksemUoby5hKStuLmEpLC0tbi5iLmIsbi5iLmI9PTAmJnVpKEMsbi5iKTtmb3IoZj0odz1uZXcgZ2koZS5jKS5hLnZjKCkuS2MoKSxuZXcgZnModykpO2YuYS5PYigpOylvPShhPWwoZi5hLlBiKCksNDQpLGwoYS5tZCgpLDQ2NykpLHQuaVtvLmMucF09by5hfWZ1bmN0aW9uIHVNbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWO2ZvcihDPW4rdC5jLmMuYSx6PW5ldyBHKHQuaik7ei5hPHouYy5jLmxlbmd0aDspe2lmKEI9bChyZSh6KSwxMiksYT1JYyhoZShsZShFYSwxKSxkdCw4LDAsW0IuaS5uLEIubixCLmFdKSksdC5rPT0oWm4oKSxBdSkmJihnPWwoUShCLChmdCgpLHppKSksMTIpLGEuYT1JYyhoZShsZShFYSwxKSxkdCw4LDAsW2cuaS5uLGcubixnLmFdKSkuYSx0Lm4uYT1hLmEpLGY9bmV3IGx0KDAsYS5iKSxCLmo9PShDdCgpLGFyKSlmLmE9QztlbHNlIGlmKEIuaj09ZXIpZi5hPW47ZWxzZSBjb250aW51ZTtpZihWPWIuTWF0aC5hYnMoYS5hLWYuYSksIShWPD1yJiYhZThuKHQpKSlmb3Iobz1CLmcuYy5sZW5ndGgrQi5lLmMubGVuZ3RoPjEsRT1uZXcgTjEoQi5iKTtMYyhFLmEpfHxMYyhFLmIpOyl3PWwoTGMoRS5hKT9yZShFLmEpOnJlKEUuYiksMTgpLEw9dy5jPT1CP3cuZDp3LmMsYi5NYXRoLmFicyhJYyhoZShsZShFYSwxKSxkdCw4LDAsW0wuaS5uLEwubixMLmFdKSkuYi1mLmIpPjEmJlVDbihlLHcsZixvLEIpfX1mdW5jdGlvbiBsTW4oZSl7dmFyIHQsbixyLGEsbyxmO2lmKGE9bmV3IFVhKGUuZSwwKSxyPW5ldyBVYShlLmEsMCksZS5kKWZvcihuPTA7bjxlLmI7bisrKW1yKGEuYjxhLmQuZ2MoKSksYS5kLlhiKGEuYz1hLmIrKyk7ZWxzZSBmb3Iobj0wO248ZS5iLTE7bisrKW1yKGEuYjxhLmQuZ2MoKSksYS5kLlhiKGEuYz1hLmIrKykscGgoYSk7Zm9yKHQ9emUoKG1yKGEuYjxhLmQuZ2MoKSksR2UoYS5kLlhiKGEuYz1hLmIrKykpKSk7ZS5mLXQ+d2ZlOyl7Zm9yKG89dCxmPTA7Yi5NYXRoLmFicyh0LW8pPHdmZTspKytmLHQ9emUoKG1yKGEuYjxhLmQuZ2MoKSksR2UoYS5kLlhiKGEuYz1hLmIrKykpKSksbXIoci5iPHIuZC5nYygpKSxyLmQuWGIoci5jPXIuYisrKTtmPGUuYiYmKG1yKGEuYj4wKSxhLmEuWGIoYS5jPS0tYS5iKSxDQW4oZSxlLmItZixvLHIsYSksbXIoYS5iPGEuZC5nYygpKSxhLmQuWGIoYS5jPWEuYisrKSksbXIoci5iPjApLHIuYS5YYihyLmM9LS1yLmIpfWlmKCFlLmQpZm9yKG49MDtuPGUuYi0xO24rKyltcihhLmI8YS5kLmdjKCkpLGEuZC5YYihhLmM9YS5iKyspLHBoKGEpO2UuZD0hMCxlLmM9ITB9ZnVuY3Rpb24gR2koKXtHaT1VLFVQZT0odTNlKCksdHUpLmIsc0F0PWwoT2UodHQodHUuYiksMCksMzUpLFN2PWwoT2UodHQodHUuYiksMSksMzUpLGlBdD1sKE9lKHR0KHR1LmIpLDIpLDM1KSxjNz10dS5iYixsKE9lKHR0KHR1LmJiKSwwKSwzNSksbChPZSh0dCh0dS5iYiksMSksMzUpLHU3PXR1LmZiLEhNPWwoT2UodHQodHUuZmIpLDApLDM1KSxsKE9lKHR0KHR1LmZiKSwxKSwzNSksbChPZSh0dCh0dS5mYiksMiksMTkpLEMzPXR1LnFiLG1BdD1sKE9lKHR0KHR1LnFiKSwwKSwzNSksbChPZSh0dCh0dS5xYiksMSksMTkpLGwoT2UodHQodHUucWIpLDIpLDE5KSxiRj1sKE9lKHR0KHR1LnFiKSwzKSwzNSksbUY9bChPZSh0dCh0dS5xYiksNCksMzUpLFVNPWwoT2UodHQodHUucWIpLDYpLDM1KSxWTT1sKE9lKHR0KHR1LnFiKSw1KSwxOSksYUF0PXR1Lmosb0F0PXR1LmssY0F0PXR1LnEsdUF0PXR1LncsbEF0PXR1LkIsaEF0PXR1LkEsZkF0PXR1LkMsZEF0PXR1LkQsZ0F0PXR1Ll8scEF0PXR1LmNiLGJBdD10dS5oYn1mdW5jdGlvbiBoTW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHo7ZS5jPTAsZS5iPTAscj0yKnQuYy5hLmMubGVuZ3RoKzE7ZTpmb3IoTD1uLktjKCk7TC5PYigpOyl7aWYoQz1sKEwuUGIoKSwxMiksZz1DLmo9PShDdCgpLFFuKXx8Qy5qPT1Ecix6PTAsZyl7aWYoQj1sKFEoQywoZnQoKSxqbCkpLDEwKSwhQiljb250aW51ZTt6Kz1OU24oZSxyLEMsQil9ZWxzZXtmb3IoRT1uZXcgRyhDLmcpO0UuYTxFLmMuYy5sZW5ndGg7KWlmKHc9bChyZShFKSwxOCksYT13LmQsYS5pLmM9PXQuYyl7dnQoZS5hLEMpO2NvbnRpbnVlIGV9ZWxzZSB6Kz1lLmdbYS5wXTtmb3IoZj1uZXcgRyhDLmUpO2YuYTxmLmMuYy5sZW5ndGg7KWlmKG89bChyZShmKSwxOCksYT1vLmMsYS5pLmM9PXQuYyl7dnQoZS5hLEMpO2NvbnRpbnVlIGV9ZWxzZSB6LT1lLmdbYS5wXX1DLmUuYy5sZW5ndGgrQy5nLmMubGVuZ3RoPjA/KGUuZltDLnBdPXovKEMuZS5jLmxlbmd0aCtDLmcuYy5sZW5ndGgpLGUuYz1iLk1hdGgubWluKGUuYyxlLmZbQy5wXSksZS5iPWIuTWF0aC5tYXgoZS5iLGUuZltDLnBdKSk6ZyYmKGUuZltDLnBdPXopfX1mdW5jdGlvbiBmTW4oZSl7ZS5iPW51bGwsZS5iYj1udWxsLGUuZmI9bnVsbCxlLnFiPW51bGwsZS5hPW51bGwsZS5jPW51bGwsZS5kPW51bGwsZS5lPW51bGwsZS5mPW51bGwsZS5uPW51bGwsZS5NPW51bGwsZS5MPW51bGwsZS5RPW51bGwsZS5SPW51bGwsZS5LPW51bGwsZS5kYj1udWxsLGUuZWI9bnVsbCxlLmc9bnVsbCxlLmk9bnVsbCxlLmo9bnVsbCxlLms9bnVsbCxlLmdiPW51bGwsZS5vPW51bGwsZS5wPW51bGwsZS5xPW51bGwsZS5yPW51bGwsZS4kPW51bGwsZS5pYj1udWxsLGUuUz1udWxsLGUuVD1udWxsLGUudD1udWxsLGUucz1udWxsLGUudT1udWxsLGUudj1udWxsLGUudz1udWxsLGUuQj1udWxsLGUuQT1udWxsLGUuQz1udWxsLGUuRD1udWxsLGUuRj1udWxsLGUuRz1udWxsLGUuSD1udWxsLGUuST1udWxsLGUuSj1udWxsLGUuUD1udWxsLGUuWj1udWxsLGUuVT1udWxsLGUuVj1udWxsLGUuVz1udWxsLGUuWD1udWxsLGUuWT1udWxsLGUuXz1udWxsLGUuYWI9bnVsbCxlLmNiPW51bGwsZS5oYj1udWxsLGUubmI9bnVsbCxlLmxiPW51bGwsZS5tYj1udWxsLGUub2I9bnVsbCxlLnBiPW51bGwsZS5qYj1udWxsLGUua2I9bnVsbCxlLk49ITEsZS5PPSExfWZ1bmN0aW9uIGRNbihlLHQsbil7dmFyIHIsYSxvLGY7Zm9yKG4uVWcoIkdyYXBoIHRyYW5zZm9ybWF0aW9uICgiK2UuYSsiKSIsMSksZj1fdyh0LmEpLG89bmV3IEcodC5iKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMzApLHJhKGYsYS5hKTtpZihyPWwoUSh0LChOdCgpLEFNZSkpLDQyOCkscj09KHBOKCksWEspKXN3aXRjaChsKFEodCxSaCksODgpLmcpe2Nhc2UgMjpzQSh0LGYpO2JyZWFrO2Nhc2UgMzpNQSh0LGYpO2JyZWFrO2Nhc2UgNDplLmE9PShkRSgpLGRCKT8oTUEodCxmKSx5b2UodCxmKSk6KHlvZSh0LGYpLE1BKHQsZikpfWVsc2UgaWYoZS5hPT0oZEUoKSxkQikpc3dpdGNoKGwoUSh0LFJoKSw4OCkuZyl7Y2FzZSAyOnNBKHQsZikseW9lKHQsZik7YnJlYWs7Y2FzZSAzOk1BKHQsZiksc0EodCxmKTticmVhaztjYXNlIDQ6c0EodCxmKSxNQSh0LGYpfWVsc2Ugc3dpdGNoKGwoUSh0LFJoKSw4OCkuZyl7Y2FzZSAyOnNBKHQsZikseW9lKHQsZik7YnJlYWs7Y2FzZSAzOnNBKHQsZiksTUEodCxmKTticmVhaztjYXNlIDQ6TUEodCxmKSxzQSh0LGYpfW4uVmcoKX1mdW5jdGlvbiBnTW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdztmb3Iobz1uZXcgRyhlLmEuYik7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDg2KSxhLmIuYz1hLmcuYyxhLmIuZD1hLmcuZDtmb3Iodz1uZXcgbHQoZ3MsZ3MpLHQ9bmV3IGx0KGlhLGlhKSxyPW5ldyBHKGUuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksODYpLHcuYT1iLk1hdGgubWluKHcuYSxuLmcuYyksdy5iPWIuTWF0aC5taW4ody5iLG4uZy5kKSx0LmE9Yi5NYXRoLm1heCh0LmEsbi5nLmMrbi5nLmIpLHQuYj1iLk1hdGgubWF4KHQuYixuLmcuZCtuLmcuYSk7Zm9yKGc9dkgoZS5jKS5hLm5jKCk7Zy5PYigpOylmPWwoZy5QYigpLDQyKSxuPWwoZi5iLDg2KSx3LmE9Yi5NYXRoLm1pbih3LmEsbi5nLmMpLHcuYj1iLk1hdGgubWluKHcuYixuLmcuZCksdC5hPWIuTWF0aC5tYXgodC5hLG4uZy5jK24uZy5iKSx0LmI9Yi5NYXRoLm1heCh0LmIsbi5nLmQrbi5nLmEpO2UuZD1IcShuZXcgbHQody5hLHcuYikpLGUuZT1tYShuZXcgbHQodC5hLHQuYiksdyksZS5hLmEuYy5sZW5ndGg9MCxlLmEuYi5jLmxlbmd0aD0wfWZ1bmN0aW9uIHBNbihlKXtoQSgpO3ZhciB0LG4scixhLG8sZixnO2ZvcihnPW5ldyAkUWUsbj1uZXcgRyhlKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTQ4KSwoIWcuYnx8dC5jPj1nLmIuYykmJihnLmI9dCksKCFnLmN8fHQuYzw9Zy5jLmMpJiYoZy5kPWcuYyxnLmM9dCksKCFnLmV8fHQuZD49Zy5lLmQpJiYoZy5lPXQpLCghZy5mfHx0LmQ8PWcuZi5kKSYmKGcuZj10KTtyZXR1cm4gcj1uZXcgblUoKHdFKCksczMpKSxRTyhlLE04dCxuZXcgSWwoaGUobGUoZkIsMSksUm4sMzgyLDAsW3JdKSkpLGY9bmV3IG5VKG80KSxRTyhlLEw4dCxuZXcgSWwoaGUobGUoZkIsMSksUm4sMzgyLDAsW2ZdKSkpLGE9bmV3IG5VKGE0KSxRTyhlLEE4dCxuZXcgSWwoaGUobGUoZkIsMSksUm4sMzgyLDAsW2FdKSkpLG89bmV3IG5VKE02KSxRTyhlLF84dCxuZXcgSWwoaGUobGUoZkIsMSksUm4sMzgyLDAsW29dKSkpLFl1ZShyLmMsczMpLFl1ZShhLmMsYTQpLFl1ZShvLmMsTTYpLFl1ZShmLmMsbzQpLGcuYS5jLmxlbmd0aD0wLHJhKGcuYSxyLmMpLHJhKGcuYSxsZihhLmMpKSxyYShnLmEsby5jKSxyYShnLmEsbGYoZi5jKSksZ31mdW5jdGlvbiBiTW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtmb3IodC5VZyhBeXQsMSksej16ZShHZShhdChlLCh1ZygpLFQ0KSkpKSxmPXplKEdlKGF0KGUsKHoxKCksd00pKSkpLGc9bChhdChlLHZNKSwxMDcpLHY3ZSgoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpLEM9dXZ0KCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSx6LGYpLCFlLmEmJihlLmE9bmV3IG50KEFpLGUsMTAsMTEpKSxFPW5ldyBHKEMpO0UuYTxFLmMuYy5sZW5ndGg7KWZvcih3PWwocmUoRSksMTg2KSxhPW5ldyBHKHcuYSk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE3MiksQj1uZXcgejVlKHIucyxyLnQsemUoR2UoYXQoZSx3TSkpKSksQzdlKEIsciksdnQody5kLEIpO0w9c2d0KEMsZiksVj1iLk1hdGgubWF4KEwuYSx6ZShHZShhdChlLG1NKSkpLShnLmIrZy5jKSksbz1iLk1hdGgubWF4KEwuYix6ZShHZShhdChlLFVXKSkpLShnLmQrZy5hKSksbj1vLUwuYixIaShlLGJNLG4pLEhpKGUsWngsViksSGkoZSxaVCxvK24pLEhpKGUsR1csQyksdC5WZygpfWZ1bmN0aW9uIG1NbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEo7Zm9yKEU9bmV3IGJkLEM9bmV3IGJkLFY9bmV3IGJkLEo9bmV3IGJkLHc9emUoR2UoUSh0LChOdCgpLG0zKSkpKSxvPXplKEdlKFEodCx4MCkpKSxnPW5ldyBHKG4pO2cuYTxnLmMuYy5sZW5ndGg7KWlmKGY9bChyZShnKSwxMCksTD1sKFEoZiwoZnQoKSxXYykpLDY0KSxMPT0oQ3QoKSxRbikpZm9yKEMuYS56YyhmLEMpLGE9bmV3IGhyKGRyKGthKGYpLmEuS2MoKSxuZXcgaikpO2pyKGEpOylyPWwoeHIoYSksMTgpLG5hKEUsci5jLmkpO2Vsc2UgaWYoTD09RHIpZm9yKEouYS56YyhmLEopLGE9bmV3IGhyKGRyKGthKGYpLmEuS2MoKSxuZXcgaikpO2pyKGEpOylyPWwoeHIoYSksMTgpLG5hKFYsci5jLmkpO0UuYS5nYygpIT0wJiYoQj1uZXcgSGFlKDIsbyksej1Sa2UoQix0LEUsQywtdy10LmMuYiksej4wJiYoZS5hPXcrKHotMSkqbyx0LmMuYis9ZS5hLHQuZi5iKz1lLmEpKSxWLmEuZ2MoKSE9MCYmKEI9bmV3IEhhZSgxLG8pLHo9UmtlKEIsdCxWLEosdC5mLmIrdy10LmMuYiksej4wJiYodC5mLmIrPXcrKHotMSkqbykpfWZ1bmN0aW9uIGJ2dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGU7Zm9yKEM9emUoR2UoUShlLChOdCgpLGIzKSkpKSxyPXplKEdlKFEoZSxyRGUpKSksQj1uZXcgRUkscnQoQixiMyxDK3IpLEU9dCxmZT1FLmQsSj1FLmMuaSxUZT1FLmQuaSx0ZT1veWUoSi5jKSxNZT1veWUoVGUuYyksYT1uZXcgYnQsTD10ZTtMPD1NZTtMKyspZz1uZXcgb3AoZSkseChnLChabigpLEFhKSkscnQoZywoZnQoKSx6aSksRSkscnQoZyxNcywoUmEoKSxNdSkpLHJ0KGcsa1csQiksej1sKGp0KGUuYixMKSwzMCksTD09dGU/RnkoZyx6LmEuYy5sZW5ndGgtbix6KTpWYShnLHopLCRlPXplKEdlKFEoRSx4MikpKSwkZTwwJiYoJGU9MCxydChFLHgyLCRlKSksZy5vLmI9JGUsVj1iLk1hdGguZmxvb3IoJGUvMiksZj1uZXcgZ3UsbGEoZiwoQ3QoKSxlcikpLE1jKGYsZyksZi5uLmI9Vix3PW5ldyBndSxsYSh3LGFyKSxNYyh3LGcpLHcubi5iPVYsRmEoRSxmKSxvPW5ldyBUdyxwYyhvLEUpLHJ0KG8sY2MsbnVsbCkscG8obyx3KSxGYShvLGZlKSxzOG4oZyxFLG8pLCRuKGEuYyxvKSxFPW87cmV0dXJuIGF9ZnVuY3Rpb24gQ2xlKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZTtmb3Iodz1sKGQyKGUsKEN0KCksZXIpKS5LYygpLlBiKCksMTIpLmUsej1sKGQyKGUsYXIpLktjKCkuUGIoKSwxMikuZyxnPXcuYy5sZW5ndGgsTWU9STEobChqdChlLmosMCksMTIpKTtnLS0gPjA7KXtmb3IoSj0oU24oMCx3LmMubGVuZ3RoKSxsKHcuY1swXSwxOCkpLGE9KFNuKDAsei5jLmxlbmd0aCksbCh6LmNbMF0sMTgpKSxUZT1hLmQuZSxvPWdjKFRlLGEsMCksJGJuKEosYS5kLG8pLHBvKGEsbnVsbCksRmEoYSxudWxsKSxWPUouYSx0JiZ1aShWLG5ldyBFbyhNZSkpLHI9UnIoYS5hLDApO3IuYiE9ci5kLmM7KW49bChCcihyKSw4KSx1aShWLG5ldyBFbyhuKSk7Zm9yKGZlPUouYixCPW5ldyBHKGEuYik7Qi5hPEIuYy5jLmxlbmd0aDspTD1sKHJlKEIpLDcyKSwkbihmZS5jLEwpO2lmKHRlPWwoUShKLChOdCgpLGNjKSksNzUpLGY9bChRKGEsY2MpLDc1KSxmKWZvcih0ZXx8KHRlPW5ldyBibCxydChKLGNjLHRlKSksQz1ScihmLDApO0MuYiE9Qy5kLmM7KUU9bChCcihDKSw4KSx1aSh0ZSxuZXcgRW8oRSkpfX1mdW5jdGlvbiB2TW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lO2lmKEo9dC5iLmMubGVuZ3RoLCEoSjwzKSl7Zm9yKHo9V2UoVnIsZGksMjgsSiwxNSwxKSxMPTAsQz1uZXcgRyh0LmIpO0MuYTxDLmMuYy5sZW5ndGg7KUU9bChyZShDKSwzMCkseltMKytdPUUuYS5jLmxlbmd0aDtmb3IoQj1uZXcgVWEodC5iLDIpLHI9MTtyPEotMTtyKyspZm9yKG49KG1yKEIuYjxCLmQuZ2MoKSksbChCLmQuWGIoQi5jPUIuYisrKSwzMCkpLFY9bmV3IEcobi5hKSxvPTAsZz0wLHc9MDt3PHpbcisxXTt3KyspaWYoTWU9bChyZShWKSwxMCksdz09eltyKzFdLTF8fFp4ZShlLE1lLHIrMSxyKSl7Zm9yKGY9eltyXS0xLFp4ZShlLE1lLHIrMSxyKSYmKGY9ZS5jLmVbbChsKGwoanQoZS5jLmIsTWUucCksMTUpLlhiKDApLDQyKS5hLDEwKS5wXSk7Zzw9dzspe2lmKFRlPWwoanQobi5hLGcpLDEwKSwhWnhlKGUsVGUscisxLHIpKWZvcihmZT1sKGp0KGUuYy5iLFRlLnApLDE1KS5LYygpO2ZlLk9iKCk7KXRlPWwoZmUuUGIoKSw0MiksYT1lLmMuZVtsKHRlLmEsMTApLnBdLChhPG98fGE+ZikmJm5hKGUuYixsKHRlLmIsMTgpKTsrK2d9bz1mfX19ZnVuY3Rpb24gUGtlKGUsdCl7dmFyIG47aWYodD09bnVsbHx8dm4odCx1bCl8fHQubGVuZ3RoPT0wJiZlLmshPShnMigpLHQ5KSlyZXR1cm4gbnVsbDtzd2l0Y2goZS5rLmcpe2Nhc2UgMTpyZXR1cm4gUVYodCx3VCk/KEhuKCksU1QpOlFWKHQsRmZlKT8oSG4oKSxQYik6bnVsbDtjYXNlIDI6dHJ5e3JldHVybiBwdChPaCh0LGxvLElpKSl9Y2F0Y2gocil7aWYocj1icyhyKSxEZShyLDEzMCkpcmV0dXJuIG51bGw7dGhyb3cgdWUocil9Y2FzZSA0OnRyeXtyZXR1cm4gankodCl9Y2F0Y2gocil7aWYocj1icyhyKSxEZShyLDEzMCkpcmV0dXJuIG51bGw7dGhyb3cgdWUocil9Y2FzZSAzOnJldHVybiB0O2Nhc2UgNTpyZXR1cm4gRjB0KGUpLFhwdChlLHQpO2Nhc2UgNjpyZXR1cm4gRjB0KGUpLG1UbihlLGUuYSx0KTtjYXNlIDc6dHJ5e3JldHVybiBuPUFFbihlKSxuLmNnKHQpLG59Y2F0Y2gocil7aWYocj1icyhyKSxEZShyLDMzKSlyZXR1cm4gbnVsbDt0aHJvdyB1ZShyKX1kZWZhdWx0OnRocm93IHVlKG5ldyBuYygiSW52YWxpZCB0eXBlIHNldCBmb3IgdGhpcyBsYXlvdXQgb3B0aW9uLiIpKX19ZnVuY3Rpb24gQmtlKGUpe3ZhciB0O3N3aXRjaChlLmQpe2Nhc2UgMTp7aWYoZS5TaigpKXJldHVybiBlLm8hPS0yO2JyZWFrfWNhc2UgMjp7aWYoZS5TaigpKXJldHVybiBlLm89PS0yO2JyZWFrfWNhc2UgMzpjYXNlIDU6Y2FzZSA0OmNhc2UgNjpjYXNlIDc6cmV0dXJuIGUubz4tMjtkZWZhdWx0OnJldHVybiExfXN3aXRjaCh0PWUuUmooKSxlLnApe2Nhc2UgMDpyZXR1cm4gdCE9bnVsbCYmUnQoQnQodCkpIT1JXyhlLmssMCk7Y2FzZSAxOnJldHVybiB0IT1udWxsJiZsKHQsMjIyKS5hIT1ZcihlLmspPDwyND4+MjQ7Y2FzZSAyOnJldHVybiB0IT1udWxsJiZsKHQsMTgwKS5hIT0oWXIoZS5rKSZacyk7Y2FzZSA2OnJldHVybiB0IT1udWxsJiZJXyhsKHQsMTY4KS5hLGUuayk7Y2FzZSA1OnJldHVybiB0IT1udWxsJiZsKHQsMTcpLmEhPVlyKGUuayk7Y2FzZSA3OnJldHVybiB0IT1udWxsJiZsKHQsMTkxKS5hIT1ZcihlLmspPDwxNj4+MTY7Y2FzZSAzOnJldHVybiB0IT1udWxsJiZ6ZShHZSh0KSkhPWUuajtjYXNlIDQ6cmV0dXJuIHQhPW51bGwmJmwodCwxNjEpLmEhPWUuajtkZWZhdWx0OnJldHVybiB0PT1udWxsP2UubiE9bnVsbDohUGkodCxlLm4pfX1mdW5jdGlvbiBtUChlLHQsbil7dmFyIHIsYSxvLGY7cmV0dXJuIGUub2woKSYmZS5ubCgpJiYoZj1GYWUoZSxsKG4sNTgpKSxxZShmKSE9PXFlKG4pKT8oZS54aih0KSxlLkRqKHQseWx0KGUsdCxmKSksZS5hbCgpJiYobz0oYT1sKG4sNTQpLGUubWwoKT9lLmtsKCk/YS5UaChlLmIsUm8obChNbihzbChlLmIpLGUuTGooKSksMTkpKS5uLGwoTW4oc2woZS5iKSxlLkxqKCkpLkhrKCksMjkpLmtrKCksbnVsbCk6YS5UaChlLmIsbXMoYS5EaCgpLFJvKGwoTW4oc2woZS5iKSxlLkxqKCkpLDE5KSkpLG51bGwsbnVsbCk6YS5UaChlLmIsLTEtZS5MaigpLG51bGwsbnVsbCkpLCFsKGYsNTQpLlBoKCkmJihvPShyPWwoZiw1NCksZS5tbCgpP2Uua2woKT9yLlJoKGUuYixSbyhsKE1uKHNsKGUuYiksZS5MaigpKSwxOSkpLm4sbChNbihzbChlLmIpLGUuTGooKSkuSGsoKSwyOSkua2soKSxvKTpyLlJoKGUuYixtcyhyLkRoKCksUm8obChNbihzbChlLmIpLGUuTGooKSksMTkpKSksbnVsbCxvKTpyLlJoKGUuYiwtMS1lLkxqKCksbnVsbCxvKSkpLG8mJm8ub2ooKSksaGgoZS5iKSYmZS5KaihlLklqKDksbixmLHQsITEpKSxmKTpufWZ1bmN0aW9uIG12dChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQztmb3Iocj1uZXcgYnQsZj1uZXcgRyhlLmUuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2ZvcihhPWwocmUoZiksMTI1KSxDPTAsYS5rLmMubGVuZ3RoPTAsbj1uZXcgRyhaNShhKSk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDIxOCksdC5mJiYodnQoYS5rLHQpLCsrQyk7Qz09MSYmJG4oci5jLGEpfWZvcihvPW5ldyBHKHIpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihhPWwocmUobyksMTI1KTthLmsuYy5sZW5ndGg9PTE7KXtmb3IoRT1sKHJlKG5ldyBHKGEuaykpLDIxOCksZS5iW0UuY109RS5nLGc9RS5kLHc9RS5lLG49bmV3IEcoWjUoYSkpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwyMTgpLFBpKHQsRSl8fCh0LmY/Zz09dC5kfHx3PT10LmU/ZS5iW0UuY10tPWUuYlt0LmNdLXQuZzplLmJbRS5jXSs9ZS5iW3QuY10tdC5nOmE9PWc/dC5kPT1hP2UuYltFLmNdKz10Lmc6ZS5iW0UuY10tPXQuZzp0LmQ9PWE/ZS5iW0UuY10tPXQuZzplLmJbRS5jXSs9dC5nKTthbChnLmssRSksYWwody5rLEUpLGc9PWE/YT1FLmU6YT1FLmR9fWZ1bmN0aW9uIHZ2dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIsejtpZihuPWwoUW8oZS5iLHQpLDEyNyksdz1sKGwoJGkoZS5yLHQpLDIxKSw4Nyksdy5kYygpKXtuLm4uYj0wLG4ubi5jPTA7cmV0dXJufWZvcihFPWUudS5IYygoUmwoKSx2cCkpLGY9MCxnPXcuS2MoKSxDPW51bGwsTD0wLEI9MDtnLk9iKCk7KXI9bChnLlBiKCksMTE3KSxhPXplKEdlKHIuYi5vZigoenEoKSxwSykpKSksbz1yLmIuTWYoKS5hLGUuQS5IYygobWgoKSxDdikpJiZLYnQoZSx0KSxDPyh6PUIrQy5kLmMrZS53K3IuZC5iLGY9Yi5NYXRoLm1heChmLChBMSgpLGYwKEgxKSxiLk1hdGguYWJzKEwtYSk8PUgxfHxMPT1hfHxpc05hTihMKSYmaXNOYU4oYSk/MDp6LyhhLUwpKSkpOmUuQyYmZS5DLmI+MCYmKGY9Yi5NYXRoLm1heChmLGtmdChlLkMuYityLmQuYixhKSkpLEM9cixMPWEsQj1vO2UuQyYmZS5DLmM+MCYmKHo9QitlLkMuYyxFJiYoeis9Qy5kLmMpLGY9Yi5NYXRoLm1heChmLChBMSgpLGYwKEgxKSxiLk1hdGguYWJzKEwtMSk8PUgxfHxMPT0xfHxpc05hTihMKSYmaXNOYU4oMSk/MDp6LygxLUwpKSkpLG4ubi5iPTAsbi5hLmE9Zn1mdW5jdGlvbiB3dnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHo7aWYobj1sKFFvKGUuYix0KSwxMjcpLHc9bChsKCRpKGUucix0KSwyMSksODcpLHcuZGMoKSl7bi5uLmQ9MCxuLm4uYT0wO3JldHVybn1mb3IoRT1lLnUuSGMoKFJsKCksdnApKSxmPTAsZS5BLkhjKChtaCgpLEN2KSkmJldidChlLHQpLGc9dy5LYygpLEM9bnVsbCxCPTAsTD0wO2cuT2IoKTspcj1sKGcuUGIoKSwxMTcpLG89emUoR2Uoci5iLm9mKCh6cSgpLHBLKSkpKSxhPXIuYi5NZigpLmIsQz8oej1MK0MuZC5hK2UudytyLmQuZCxmPWIuTWF0aC5tYXgoZiwoQTEoKSxmMChIMSksYi5NYXRoLmFicyhCLW8pPD1IMXx8Qj09b3x8aXNOYU4oQikmJmlzTmFOKG8pPzA6ei8oby1CKSkpKTplLkMmJmUuQy5kPjAmJihmPWIuTWF0aC5tYXgoZixrZnQoZS5DLmQrci5kLmQsbykpKSxDPXIsQj1vLEw9YTtlLkMmJmUuQy5hPjAmJih6PUwrZS5DLmEsRSYmKHorPUMuZC5hKSxmPWIuTWF0aC5tYXgoZiwoQTEoKSxmMChIMSksYi5NYXRoLmFicyhCLTEpPD1IMXx8Qj09MXx8aXNOYU4oQikmJmlzTmFOKDEpPzA6ei8oMS1CKSkpKSxuLm4uZD0wLG4uYS5iPWZ9ZnVuY3Rpb24gd01uKGUsdCxuLHIsYSxvLGYsZyl7dmFyIHcsRSxDLEwsQix6LFYsSix0ZSxmZTtpZihWPSExLEU9SDllKG4ucSx0LmYrdC5iLW4ucS5mKSx6PXIuZj50LmImJmcsZmU9YS0obi5xLmUrRS1mKSxMPSh3PVpBKHIsZmUsITEpLHcuYSkseiYmTD5yLmYpcmV0dXJuITE7aWYoeil7Zm9yKEI9MCx0ZT1uZXcgRyh0LmQpO3RlLmE8dGUuYy5jLmxlbmd0aDspSj1sKHJlKHRlKSwzMTUpLEIrPUg5ZShKLHIuZikrZjtmZT1hLUJ9cmV0dXJuIGZlPHIuZ3x8KEM9bz09ZS5jLmxlbmd0aC0xJiZmZT49KFNuKG8sZS5jLmxlbmd0aCksbChlLmNbb10sMTg2KSkuZSwheiYmTD50LmImJiFDKT8hMTooKEN8fHp8fEw8PXQuYikmJihDJiZMPnQuYj8obi5kPUwsYU4obixzcHQobixMKSkpOihFZ3Qobi5xLEUpLG4uYz0hMCksYU4ocixhLShuLnMrbi5yKSkscU4ocixuLnEuZStuLnEuZCx0LmYpLGJWKHQsciksZS5jLmxlbmd0aD5vJiYoVU4oKFNuKG8sZS5jLmxlbmd0aCksbChlLmNbb10sMTg2KSksciksKFNuKG8sZS5jLmxlbmd0aCksbChlLmNbb10sMTg2KSkuYS5jLmxlbmd0aD09MCYmdDIoZSxvKSksVj0hMCksVil9ZnVuY3Rpb24geXZ0KGUsdCxuKXt2YXIgcixhLG8sZixnLHc7Zm9yKHRoaXMuZz1lLGc9dC5kLmxlbmd0aCx3PW4uZC5sZW5ndGgsdGhpcy5kPVdlKHdnLG0yLDEwLGcrdywwLDEpLGY9MDtmPGc7ZisrKXRoaXMuZFtmXT10LmRbZl07Zm9yKG89MDtvPHc7bysrKXRoaXMuZFtnK29dPW4uZFtvXTtpZih0LmUpe2lmKHRoaXMuZT1QTyh0LmUpLHRoaXMuZS5NYyhuKSxuLmUpZm9yKGE9bi5lLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDIzOSksciE9dCYmKHRoaXMuZS5IYyhyKT8tLXIuYzp0aGlzLmUuRmMocikpfWVsc2Ugbi5lJiYodGhpcy5lPVBPKG4uZSksdGhpcy5lLk1jKHQpKTt0aGlzLmY9dC5mK24uZix0aGlzLmE9dC5hK24uYSx0aGlzLmE+MD9Yb2UodGhpcyx0aGlzLmYvdGhpcy5hKTpMMSh0LmcsdC5kWzBdKS5hIT1udWxsJiZMMShuLmcsbi5kWzBdKS5hIT1udWxsP1hvZSh0aGlzLCh6ZShMMSh0LmcsdC5kWzBdKS5hKSt6ZShMMShuLmcsbi5kWzBdKS5hKSkvMik6TDEodC5nLHQuZFswXSkuYSE9bnVsbD9Yb2UodGhpcyxMMSh0LmcsdC5kWzBdKS5hKTpMMShuLmcsbi5kWzBdKS5hIT1udWxsJiZYb2UodGhpcyxMMShuLmcsbi5kWzBdKS5hKX1mdW5jdGlvbiB5TW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtmb3IoZS5hPW5ldyBac3QobnluKExNKSkscj1uZXcgRyh0LmEpO3IuYTxyLmMuYy5sZW5ndGg7KXtmb3Iobj1sKHJlKHIpLDg1NSksZz1uZXcgUWNlKGhlKGxlKHIxZSwxKSxSbiw4NiwwLFtdKSksdnQoZS5hLmEsZyksRT1uZXcgRyhuLmQpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwxMTYpLEM9bmV3IFB5ZShlLHcpLGprZShDLGwoUShuLmMsKGZ0KCkscHApKSwyMSkpLEh1KGUuZyxuKXx8KGtpKGUuZyxuLG5ldyBsdCh3LmMsdy5kKSksa2koZS5mLG4sQykpLHZ0KGUuYS5iLEMpLHdvZShnLEMpO2ZvcihmPW5ldyBHKG4uYik7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDYwMiksQz1uZXcgUHllKGUsby5EZigpKSxraShlLmIsbyxuZXcgY2EoZyxDKSksamtlKEMsbChRKG4uYywoZnQoKSxwcCkpLDIxKSksby5CZigpJiYoTD1uZXcgVThlKGUsby5CZigpLDEpLGprZShMLGwoUShuLmMscHApLDIxKSksYT1uZXcgUWNlKGhlKGxlKHIxZSwxKSxSbiw4NiwwLFtdKSksd29lKGEsTCkseG4oZS5jLG8uQWYoKSxuZXcgY2EoZyxMKSkpfXJldHVybiBlLmF9ZnVuY3Rpb24geHZ0KGUpe3ZhciB0O3RoaXMuYT1lLHQ9KFpuKCksaGUobGUobDFlLDEpLGl0LDI3MywwLFtQcyxBYSxVcyxBdSxjdSxLMV0pKS5sZW5ndGgsdGhpcy5iPUxtKENnZSxbZHQsb0NlXSxbNjAxLDE0OV0sMCxbdCx0XSwyKSx0aGlzLmM9TG0oQ2dlLFtkdCxvQ2VdLFs2MDEsMTQ5XSwwLFt0LHRdLDIpLGFvZSh0aGlzLFBzLChOdCgpLG0zKSxWNiksdkEodGhpcyxQcyxBYSxiMyx2diksVk8odGhpcyxQcyxBdSxiMyksVk8odGhpcyxQcyxVcyxiMyksdkEodGhpcyxQcyxjdSxtMyxWNiksYW9lKHRoaXMsQWEseDAscTYpLFZPKHRoaXMsQWEsQXUseDApLFZPKHRoaXMsQWEsVXMseDApLHZBKHRoaXMsQWEsY3UsYjMsdnYpLGZudCh0aGlzLEF1LHgwKSxWTyh0aGlzLEF1LFVzLHgwKSxWTyh0aGlzLEF1LGN1LGNkZSksZm50KHRoaXMsVXMsdE0pLHZBKHRoaXMsVXMsY3UsS1QsR1QpLGFvZSh0aGlzLGN1LHgwLHgwKSxhb2UodGhpcyxLMSx4MCxxNiksdkEodGhpcyxLMSxQcyxiMyx2diksdkEodGhpcyxLMSxjdSxiMyx2diksdkEodGhpcyxLMSxBYSxiMyx2dil9ZnVuY3Rpb24geE1uKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZTtpZihmPW4uTGsoKSxEZShmLDEwMikmJmwoZiwxOSkuQmImSW8mJihCPWwobi5tZCgpLDU0KSxKPXliKGUuZSxCKSxKIT1CKSl7aWYoQz1zZyhmLEopLFJfKGUsdCxBdWUoZSx0LEMpKSxMPW51bGwsaGgoZS5lKSYmKHI9ZzYoKEVsKCksaW8pLGUuZS5EaCgpLGYpLHIhPU1uKGUuZS5EaCgpLGUuYykpKXtmb3IodGU9V3UoZS5lLkRoKCksZiksZz0wLG89bChlLmcsMTI0KSx3PTA7dzx0OysrdylhPW9bd10sdGUuYW0oYS5MaygpKSYmKytnO0w9bmV3IEVvZShlLmUsOSxyLEIsSixnLCExKSxMLm5qKG5ldyBaZyhlLmUsOSxlLmMsbixDLHQsITEpKX1yZXR1cm4gVj1sKGYsMTkpLHo9Um8oViksej8oTD1CLlRoKGUuZSxtcyhCLkRoKCkseiksbnVsbCxMKSxMPWwoSiw1NCkuUmgoZS5lLG1zKEouRGgoKSx6KSxudWxsLEwpKTpWLkJiJmV1JiYoRT0tMS1tcyhlLmUuRGgoKSxWKSxMPUIuVGgoZS5lLEUsbnVsbCxudWxsKSwhbChKLDU0KS5QaCgpJiYoTD1sKEosNTQpLlJoKGUuZSxFLG51bGwsTCkpKSxMJiZMLm9qKCksQ31yZXR1cm4gbn1mdW5jdGlvbiBrTW4oZSl7dmFyIHQsbixyO2ZvcihRNShRYixoZShsZShMNiwxKSxSbiwxMzQsMCxbbmV3IHV6XSkpLG49bmV3IFN6KGUpLHI9MDtyPG4uYS5sZW5ndGg7KytyKXQ9X3kobixyKS50ZSgpLmEsdm4odCwibGF5ZXJlZCIpP1E1KFFiLGhlKGxlKEw2LDEpLFJuLDEzNCwwLFtuZXcgWXJlXSkpOnZuKHQsImZvcmNlIik/UTUoUWIsaGUobGUoTDYsMSksUm4sMTM0LDAsW25ldyBLU10pKTp2bih0LCJzdHJlc3MiKT9RNShRYixoZShsZShMNiwxKSxSbiwxMzQsMCxbbmV3IHJ6XSkpOnZuKHQsIm1ydHJlZSIpP1E1KFFiLGhlKGxlKEw2LDEpLFJuLDEzNCwwLFtuZXcgcmllXSkpOnZuKHQsInJhZGlhbCIpP1E1KFFiLGhlKGxlKEw2LDEpLFJuLDEzNCwwLFtuZXcgQ2ZdKSk6dm4odCwiZGlzY28iKT9RNShRYixoZShsZShMNiwxKSxSbiwxMzQsMCxbbmV3IGV6LG5ldyB0el0pKTp2bih0LCJzcG9yZU92ZXJsYXAiKXx8dm4odCwic3BvcmVDb21wYWN0aW9uIik/UTUoUWIsaGUobGUoTDYsMSksUm4sMTM0LDAsW25ldyB1aWVdKSk6dm4odCwicmVjdHBhY2tpbmciKSYmUTUoUWIsaGUobGUoTDYsMSksUm4sMTM0LDAsW25ldyBna10pKX1mdW5jdGlvbiBrdnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO2lmKEI9bmV3IEVvKGUubyksZmU9dC5hL0IuYSxnPXQuYi9CLmIsSj10LmEtQi5hLG89dC5iLUIuYixuKWZvcihhPXFlKFEoZSwoTnQoKSxNcykpKT09PXFlKChSYSgpLE11KSksVj1uZXcgRyhlLmopO1YuYTxWLmMuYy5sZW5ndGg7KXN3aXRjaCh6PWwocmUoViksMTIpLHouai5nKXtjYXNlIDE6YXx8KHoubi5hKj1mZSk7YnJlYWs7Y2FzZSAyOnoubi5hKz1KLGF8fCh6Lm4uYio9Zyk7YnJlYWs7Y2FzZSAzOmF8fCh6Lm4uYSo9ZmUpLHoubi5iKz1vO2JyZWFrO2Nhc2UgNDphfHwoei5uLmIqPWcpfWZvcihFPW5ldyBHKGUuYik7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDcyKSxDPXcubi5hK3cuby5hLzIsTD13Lm4uYit3Lm8uYi8yLHRlPUMvQi5hLGY9TC9CLmIsdGUrZj49MSYmKHRlLWY+MCYmTD49MD8ody5uLmErPUosdy5uLmIrPW8qZik6dGUtZjwwJiZDPj0wJiYody5uLmErPUoqdGUsdy5uLmIrPW8pKTtlLm8uYT10LmEsZS5vLmI9dC5iLHJ0KGUsKE50KCksYnYpLChtaCgpLHI9bChLMChCTSksOSksbmV3IFpoKHIsbChjMChyLHIubGVuZ3RoKSw5KSwwKSkpfWZ1bmN0aW9uIEVNbihlLHQsbixyLGEsbyl7dmFyIGY7aWYoISh0PT1udWxsfHwhSGNlKHQsVFBlLENQZSkpKXRocm93IHVlKG5ldyBZbigiaW52YWxpZCBzY2hlbWU6ICIrdCkpO2lmKCFlJiYhKG4hPW51bGwmJnBkKG4sY2woMzUpKT09LTEmJm4ubGVuZ3RoPjAmJihYbigwLG4ubGVuZ3RoKSxuLmNoYXJDb2RlQXQoMCkhPTQ3KSkpdGhyb3cgdWUobmV3IFluKCJpbnZhbGlkIG9wYXF1ZVBhcnQ6ICIrbikpO2lmKGUmJiEodCE9bnVsbCYmbk8oRVksdC50b0xvd2VyQ2FzZSgpKSkmJiEobj09bnVsbHx8IUhjZShuLCRNLHpNKSkpdGhyb3cgdWUobmV3IFluKG41dCtuKSk7aWYoZSYmdCE9bnVsbCYmbk8oRVksdC50b0xvd2VyQ2FzZSgpKSYmIW54bihuKSl0aHJvdyB1ZShuZXcgWW4objV0K24pKTtpZighYzVuKHIpKXRocm93IHVlKG5ldyBZbigiaW52YWxpZCBkZXZpY2U6ICIrcikpO2lmKCFHeW4oYSkpdGhyb3cgZj1hPT1udWxsPyJpbnZhbGlkIHNlZ21lbnRzOiBudWxsIjoiaW52YWxpZCBzZWdtZW50OiAiK3F5bihhKSx1ZShuZXcgWW4oZikpO2lmKCEobz09bnVsbHx8cGQobyxjbCgzNSkpPT0tMSkpdGhyb3cgdWUobmV3IFluKCJpbnZhbGlkIHF1ZXJ5OiAiK28pKX1mdW5jdGlvbiBUTW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO2lmKG4uVWcoIk5ldHdvcmsgc2ltcGxleCBsYXllcmluZyIsMSksZS5iPXQsZmU9bChRKHQsKE50KCksbk0pKSwxNykuYSo0LHRlPWUuYi5hLHRlLmMubGVuZ3RoPDEpe24uVmcoKTtyZXR1cm59Zm9yKG89a19uKGUsdGUpLEo9bnVsbCxhPVJyKG8sMCk7YS5iIT1hLmQuYzspe2ZvcihyPWwoQnIoYSksMTUpLGc9ZmUqdWEoYi5NYXRoLnNxcnQoci5nYygpKSksZj1GX24ociksb2xlKG4zZShUdW4ocjNlKGJhZShmKSxnKSxKKSwhMCksbi5laCgxKSksQj1lLmIuYixWPW5ldyBHKGYuYSk7Vi5hPFYuYy5jLmxlbmd0aDspe2Zvcih6PWwocmUoViksMTI1KTtCLmMubGVuZ3RoPD16LmU7KXB3KEIsQi5jLmxlbmd0aCxuZXcgeXUoZS5iKSk7Qz1sKHouZiwxMCksVmEoQyxsKGp0KEIsei5lKSwzMCkpfWlmKG8uYj4xKWZvcihKPVdlKFZyLGRpLDI4LGUuYi5iLmMubGVuZ3RoLDE1LDEpLEw9MCxFPW5ldyBHKGUuYi5iKTtFLmE8RS5jLmMubGVuZ3RoOyl3PWwocmUoRSksMzApLEpbTCsrXT13LmEuYy5sZW5ndGh9dGUuYy5sZW5ndGg9MCxlLmE9bnVsbCxlLmI9bnVsbCxlLmM9bnVsbCxuLlZnKCl9ZnVuY3Rpb24gQ01uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7Zm9yKEM9bmV3IGJ0LEw9bmV3IHo1LG89bnVsbCxhPTAscj0wO3I8dC5sZW5ndGg7KytyKXN3aXRjaChuPXRbcl0sRHluKG8sbikmJihhPWs4ZShlLEwsQyxEVyxhKSksbnMobiwoZnQoKSx1MykpJiYobz1sKFEobix1MyksMTApKSxuLmsuZyl7Y2FzZSAwOmZvcih3PWx5ZShHOChPYyhuLChDdCgpLFFuKSksbmV3IFhqKSk7dGNlKHcpOylmPWwoejZlKHcpLDEyKSxlLmRbZi5wXT1hKyssJG4oQy5jLGYpO2ZvcihhPWs4ZShlLEwsQyxEVyxhKSxFPWx5ZShHOChPYyhuLERyKSxuZXcgWGopKTt0Y2UoRSk7KWY9bCh6NmUoRSksMTIpLGUuZFtmLnBdPWErKywkbihDLmMsZik7YnJlYWs7Y2FzZSAzOk9jKG4sJERlKS5kYygpfHwoZj1sKE9jKG4sJERlKS5YYigwKSwxMiksZS5kW2YucF09YSsrLCRuKEMuYyxmKSksT2MobixEVykuZGMoKXx8Z2IoTCxuKTticmVhaztjYXNlIDE6Zm9yKGc9T2MobiwoQ3QoKSxlcikpLktjKCk7Zy5PYigpOylmPWwoZy5QYigpLDEyKSxlLmRbZi5wXT1hKyssJG4oQy5jLGYpO09jKG4sYXIpLkpjKG5ldyBxZXQoTCxuKSl9cmV0dXJuIGs4ZShlLEwsQyxEVyxhKSxDfWZ1bmN0aW9uIEZrZShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2lmKHQ9PW51bGx8fHQubGVuZ3RoPT0wKXJldHVybiBudWxsO2lmKG89bCh4dShlLmYsdCksMjMpLCFvKXtmb3IoYT0oej1uZXcgZ2koZS5kKS5hLnZjKCkuS2MoKSxuZXcgZnMoeikpO2EuYS5PYigpOylpZihuPShmPWwoYS5hLlBiKCksNDQpLGwoZi5tZCgpLDIzKSksZz1uLmYsVj10Lmxlbmd0aCx2bihnLnN1YnN0cihnLmxlbmd0aC1WLFYpLHQpJiYodC5sZW5ndGg9PWcubGVuZ3RofHxjbyhnLGcubGVuZ3RoLXQubGVuZ3RoLTEpPT00Nikpe2lmKG8pcmV0dXJuIG51bGw7bz1ufWlmKCFvKXtmb3Iocj0oQj1uZXcgZ2koZS5kKS5hLnZjKCkuS2MoKSxuZXcgZnMoQikpO3IuYS5PYigpOylpZihuPShmPWwoci5hLlBiKCksNDQpLGwoZi5tZCgpLDIzKSksTD1uLmcsTCE9bnVsbCl7Zm9yKHc9TCxFPTAsQz13Lmxlbmd0aDtFPEM7KytFKWlmKGc9d1tFXSxWPXQubGVuZ3RoLHZuKGcuc3Vic3RyKGcubGVuZ3RoLVYsViksdCkmJih0Lmxlbmd0aD09Zy5sZW5ndGh8fGNvKGcsZy5sZW5ndGgtdC5sZW5ndGgtMSk9PTQ2KSl7aWYobylyZXR1cm4gbnVsbDtvPW59fX1vJiZyYyhlLmYsdCxvKX1yZXR1cm4gb31mdW5jdGlvbiBTTW4oZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihuPW5ldyBTNSxmPSExLG89MDtvPHQubGVuZ3RoO28rKyl7aWYocj0oWG4obyx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KG8pKSxyPT0zMil7Zm9yKEpWKGUsbiwwKSxuLmErPSIgIixKVihlLG4sMCk7bysxPHQubGVuZ3RoJiYoWG4obysxLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQobysxKT09MzIpOykrK287Y29udGludWV9aWYoZil7cj09Mzk/bysxPHQubGVuZ3RoJiYoWG4obysxLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQobysxKT09MzkpPyhuLmErPVN0cmluZy5mcm9tQ2hhckNvZGUociksKytvKTpmPSExOm4uYSs9U3RyaW5nLmZyb21DaGFyQ29kZShyKTtjb250aW51ZX1pZihwZCgiR3lNTGRrSG1zU0VjRGFoS3padiIsY2wocikpPjApe0pWKGUsbiwwKSxuLmErPVN0cmluZy5mcm9tQ2hhckNvZGUociksYT1HNW4odCxvKSxKVihlLG4sYSksbys9YS0xO2NvbnRpbnVlfXI9PTM5P28rMTx0Lmxlbmd0aCYmKFhuKG8rMSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KG8rMSk9PTM5KT8obi5hKz0iJyIsKytvKTpmPSEwOm4uYSs9U3RyaW5nLmZyb21DaGFyQ29kZShyKX1KVihlLG4sMCksVHhuKGUpfWZ1bmN0aW9uIF9NbihlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKE1lPV9pdChlKSx3PW5ldyBidCxvPWUuYy5sZW5ndGgsRT1vLTEsQz1vKzE7TWUuYS5nYygpIT0wOyl7Zm9yKDtuLmIhPTA7KWZlPShtcihuLmIhPTApLGwoYWYobixuLmEuYSksMTE4KSksTWUuYS5CYyhmZSkhPW51bGwsZmUuZz1FLS0sVGtlKGZlLHQsbixyKTtmb3IoO3QuYiE9MDspVGU9KG1yKHQuYiE9MCksbChhZih0LHQuYS5hKSwxMTgpKSxNZS5hLkJjKFRlKSE9bnVsbCxUZS5nPUMrKyxUa2UoVGUsdCxuLHIpO2ZvcihnPWxvLEo9TWUuYS5lYygpLktjKCk7Si5PYigpOyl7aWYoVj1sKEouUGIoKSwxMTgpLCFyJiZWLmI+MCYmVi5hPD0wKXt3LmMubGVuZ3RoPTAsJG4ody5jLFYpO2JyZWFrfXo9Vi5pLVYuZCx6Pj1nJiYoej5nJiYody5jLmxlbmd0aD0wLGc9eiksJG4ody5jLFYpKX13LmMubGVuZ3RoIT0wJiYoZj1sKGp0KHcsYVUoYSx3LmMubGVuZ3RoKSksMTE4KSxNZS5hLkJjKGYpIT1udWxsLGYuZz1DKyssVGtlKGYsdCxuLHIpLHcuYy5sZW5ndGg9MCl9Zm9yKHRlPWUuYy5sZW5ndGgrMSxCPW5ldyBHKGUpO0IuYTxCLmMuYy5sZW5ndGg7KUw9bChyZShCKSwxMTgpLEwuZzxvJiYoTC5nPUwuZyt0ZSl9ZnVuY3Rpb24gRXZ0KGUsdCxuKXt2YXIgcixhLG8sZjt0aGlzLmo9ZSx0aGlzLmU9SXhlKGUpLHRoaXMubz10aGlzLmouZSx0aGlzLmk9ISF0aGlzLm8sdGhpcy5wPXRoaXMuaT9sKGp0KG4sZW8odGhpcy5vKS5wKSwyMTkpOm51bGwsYT1sKFEoZSwoZnQoKSxMdSkpLDIxKSx0aGlzLmc9YS5IYygoSG8oKSx2ZikpLHRoaXMuYj1uZXcgYnQsdGhpcy5kPW5ldyBQMXQodGhpcy5lKSxmPWwoUSh0aGlzLmosWHgpLDIzNCksdGhpcy5xPUwzbih0LGYsdGhpcy5lKSx0aGlzLms9bmV3IENvdCh0aGlzKSxvPU8xKGhlKGxlKGV4dCwxKSxSbiwyMzAsMCxbdGhpcyx0aGlzLmQsdGhpcy5rLHRoaXMucV0pKSx0PT0oSXcoKSxEQikmJiFSdChCdChRKGUsKE50KCksZjMpKSkpPyhyPW5ldyBQeGUodGhpcy5lKSwkbihvLmMsciksdGhpcy5jPW5ldyBuNmUocixmLGwodGhpcy5xLDQxMykpKTp0PT1EQiYmUnQoQnQoUShlLChOdCgpLGYzKSkpKT8ocj1uZXcgUHhlKHRoaXMuZSksJG4oby5jLHIpLHRoaXMuYz1uZXcgYmZ0KHIsZixsKHRoaXMucSw0MTMpKSk6dGhpcy5jPW5ldyB6ZXQodCx0aGlzKSx2dChvLHRoaXMuYyksYXZ0KG8sdGhpcy5lKSx0aGlzLnM9Z0luKHRoaXMuayl9ZnVuY3Rpb24gQU1uKGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZTtmb3Iobz1uZXcgYnQsRT1uZXcgRyhyKTtFLmE8RS5jLmMubGVuZ3RoOylpZihnPWwocmUoRSksNDUzKSxmPW51bGwsZy5mPT0ocW8oKSx6dSkpZm9yKFY9bmV3IEcoZy5lKTtWLmE8Vi5jLmMubGVuZ3RoOyl6PWwocmUoViksMTgpLHRlPXouZC5pLGVvKHRlKT09dD9DaHQoZSx0LGcseixnLmIsei5kKTohbnx8YkUodGUsbik/aTluKGUsdCxnLHIseik6KEI9eGxlKGUsdCxuLHosZy5iLHp1LGYpLEIhPWYmJiRuKG8uYyxCKSxCLmMmJihmPUIpKTtlbHNlIGZvcihMPW5ldyBHKGcuZSk7TC5hPEwuYy5jLmxlbmd0aDspaWYoQz1sKHJlKEwpLDE4KSxKPUMuYy5pLGVvKEopPT10KUNodChlLHQsZyxDLEMuYyxnLmIpO2Vsc2V7aWYoIW58fGJFKEosbikpY29udGludWU7Qj14bGUoZSx0LG4sQyxnLmIsJGwsZiksQiE9ZiYmJG4oby5jLEIpLEIuYyYmKGY9Qil9Zm9yKHc9bmV3IEcobyk7dy5hPHcuYy5jLmxlbmd0aDspZz1sKHJlKHcpLDQ1MyksZ2ModC5hLGcuYSwwKSE9LTF8fHZ0KHQuYSxnLmEpLGcuYyYmJG4oYS5jLGcpfWZ1bmN0aW9uIFR2dChlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3IodD0wLG89bmV3IEcoZS5iLmEpO28uYTxvLmMuYy5sZW5ndGg7KXI9bChyZShvKSwxOTQpLHIuYj0wLHIuYz0wO2ZvcihycHQoZSwwKSxWY2UoZSxlLmcpLE1VKGUuYyksSndlKGUuYyksbj0oSnMoKSx1YyksZlAoSXNlKHA2KGZQKElzZShwNihmUChwNihlLmMsbikpLGIxdChuKSkpKSxuKSkpLHA2KGUuYyx1YyksUmNlKGUsZS5nKSxIZ3QoZSwwKSxudnQoZSwwKSxGMnQoZSwxKSxycHQoZSwxKSxWY2UoZSxlLmQpLE1VKGUuYyksZj1uZXcgRyhlLmIuYSk7Zi5hPGYuYy5jLmxlbmd0aDspcj1sKHJlKGYpLDE5NCksdCs9Yi5NYXRoLmFicyhyLmMpO2ZvcihnPW5ldyBHKGUuYi5hKTtnLmE8Zy5jLmMubGVuZ3RoOylyPWwocmUoZyksMTk0KSxyLmI9MCxyLmM9MDtmb3Iobj13ZixmUChJc2UocDYoZlAoSXNlKHA2KGZQKEp3ZShwNihlLmMsbikpKSxiMXQobikpKSksbikpKSxwNihlLmMsdWMpLFJjZShlLGUuZCksSGd0KGUsMSksbnZ0KGUsMSksRjJ0KGUsMCksSndlKGUuYyksYT1uZXcgRyhlLmIuYSk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE5NCksdCs9Yi5NYXRoLmFicyhyLmMpO3JldHVybiB0fWZ1bmN0aW9uIExNbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGU7aWYoUnQoQnQoUShuLChOdCgpLGI0KSkpKSlmb3IoZz1uZXcgRyhuLmopO2cuYTxnLmMuYy5sZW5ndGg7KWZvcihmPWwocmUoZyksMTIpLEI9a2QoZi5nKSxFPUIsQz0wLEw9RS5sZW5ndGg7QzxMOysrQyl3PUVbQ10sbz13LmQuaT09bixhPW8mJlJ0KEJ0KFEodyxndikpKSxhJiYoVj13LmMsej1sKGNyKGUuYixWKSwxMCksenx8KHo9dlAoViwoUmEoKSxaMSksVi5qLC0xLG51bGwsbnVsbCxWLm8sbChRKHQsUmgpLDg4KSx0KSxydCh6LChmdCgpLHppKSxWKSxraShlLmIsVix6KSx2dCh0LmEseikpLHRlPXcuZCxKPWwoY3IoZS5iLHRlKSwxMCksSnx8KEo9dlAodGUsKFJhKCksWjEpLHRlLmosMSxudWxsLG51bGwsdGUubyxsKFEodCxSaCksODgpLHQpLHJ0KEosKGZ0KCksemkpLHRlKSxraShlLmIsdGUsSiksdnQodC5hLEopKSxyPUFvZSh3KSxwbyhyLGwoanQoei5qLDApLDEyKSksRmEocixsKGp0KEouaiwwKSwxMikpLHhuKGUuYSx3LG5ldyBLcShyLHQsKHFvKCksenUpKSksbChRKHQsKGZ0KCksTHUpKSwyMSkuRmMoKEhvKCksdmYpKSl9ZnVuY3Rpb24gTU1uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQjtmb3IoYT1uZXcgRyhlLmEuYik7YS5hPGEuYy5jLmxlbmd0aDspZm9yKG49bChyZShhKSwzMCksdz1uZXcgRyhuLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxMCksdC5qW2cucF09Zyx0LmlbZy5wXT10Lm89PShEMSgpLFkxKT9pYTpncztmb3IoTmwoZS5jKSxmPWUuYS5iLHQuYz09KHhkKCksVDIpJiYoZj1sZihmKSksSWJuKGUuZSx0LGUuYiksYU8odC5wLG51bGwpLG89Zi5LYygpO28uT2IoKTspZm9yKG49bChvLlBiKCksMzApLEU9bi5hLHQubz09KEQxKCksWTEpJiYoRT1sZihFKSksQj1FLktjKCk7Qi5PYigpOylMPWwoQi5QYigpLDEwKSx0LmdbTC5wXT09TCYmb3d0KGUsTCx0KTtmb3IoY01uKGUsdCkscj1mLktjKCk7ci5PYigpOylmb3Iobj1sKHIuUGIoKSwzMCksQj1uZXcgRyhuLmEpO0IuYTxCLmMuYy5sZW5ndGg7KUw9bChyZShCKSwxMCksdC5wW0wucF09dC5wW3QuZ1tMLnBdLnBdLEw9PXQuZ1tMLnBdJiYoQz16ZSh0LmlbdC5qW0wucF0ucF0pLCh0Lm89PShEMSgpLFkxKSYmQz5pYXx8dC5vPT13diYmQzxncykmJih0LnBbTC5wXT16ZSh0LnBbTC5wXSkrQykpO2UuZS54ZygpfWZ1bmN0aW9uIERNbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2ZvcihuLlVnKCJMYWJlbCBkdW1teSBzd2l0Y2hpbmciLDEpLHI9bChRKHQsKE50KCksZ1cpKSwyMzIpLHgzbih0KSxhPWxUbih0LHIpLGUuYT1XZShOYSxabywyOCx0LmIuYy5sZW5ndGgsMTUsMSksZz0oeXgoKSxoZShsZShOVCwxKSxpdCwyMzIsMCxbT1QscUwsSVQsaDQsTjYsTzZdKSksQz0wLHo9Zy5sZW5ndGg7Qzx6OysrQylpZihvPWdbQ10sKG89PU42fHxvPT1PNnx8bz09aDQpJiYhbCh2bChhLmEsbyk/YS5iW28uZ106bnVsbCwxNSkuZGMoKSl7UzNuKGUsdCk7YnJlYWt9Zm9yKHc9aGUobGUoTlQsMSksaXQsMjMyLDAsW09ULHFMLElULGg0LE42LE82XSksTD0wLFY9dy5sZW5ndGg7TDxWOysrTClvPXdbTF0sbz09TjZ8fG89PU82fHxvPT1oNHx8bG10KGUsbCh2bChhLmEsbyk/YS5iW28uZ106bnVsbCwxNSkpO2ZvcihmPWhlKGxlKE5ULDEpLGl0LDIzMiwwLFtPVCxxTCxJVCxoNCxONixPNl0pLEU9MCxCPWYubGVuZ3RoO0U8QjsrK0Upbz1mW0VdLChvPT1ONnx8bz09TzZ8fG89PWg0KSYmbG10KGUsbCh2bChhLmEsbyk/YS5iW28uZ106bnVsbCwxNSkpO2UuYT1udWxsLG4uVmcoKX1mdW5jdGlvbiBDdnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYoRT10LCEoRS5iPT1udWxsfHxlLmI9PW51bGwpKXtmb3IoYzYoZSksZUwoZSksYzYoRSksZUwoRSksbj1XZShWcixkaSwyOCxlLmIubGVuZ3RoK0UuYi5sZW5ndGgsMTUsMSksQz0wLHI9MCxmPTA7cjxlLmIubGVuZ3RoJiZmPEUuYi5sZW5ndGg7KWlmKGE9ZS5iW3JdLG89ZS5iW3IrMV0sZz1FLmJbZl0sdz1FLmJbZisxXSxvPGcpcis9MjtlbHNlIGlmKG8+PWcmJmE8PXcpZzw9YSYmbzw9dz8obltDKytdPWEsbltDKytdPW8scis9Mik6Zzw9YT8obltDKytdPWEsbltDKytdPXcsZS5iW3JdPXcrMSxmKz0yKTpvPD13PyhuW0MrK109ZyxuW0MrK109byxyKz0yKToobltDKytdPWcsbltDKytdPXcsZS5iW3JdPXcrMSk7ZWxzZSBpZih3PGEpZis9MjtlbHNlIHRocm93IHVlKG5ldyBBYygiVG9rZW4jaW50ZXJzZWN0UmFuZ2VzKCk6IEludGVybmFsIEVycm9yOiBbIitlLmJbcl0rIiwiK2UuYltyKzFdKyJdICYgWyIrRS5iW2ZdKyIsIitFLmJbZisxXSsiXSIpKTtmb3IoO3I8ZS5iLmxlbmd0aDspbltDKytdPWUuYltyKytdLG5bQysrXT1lLmJbcisrXTtlLmI9V2UoVnIsZGksMjgsQywxNSwxKSxwdShuLDAsZS5iLDAsQyl9fWZ1bmN0aW9uIElNbihlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3IodD1uZXcgYnQsZS5nPW5ldyBidCxlLmQ9bmV3IGJ0LGY9bmV3IHFtKG5ldyBTcihlLmYuYikuYSk7Zi5iOylvPU53KGYpLHZ0KHQsbChsKG8ubWQoKSw0MikuYiw4NikpLFVnKGwoby5sZCgpLDYwMikuQWYoKSk/dnQoZS5kLGwoby5tZCgpLDQyKSk6dnQoZS5nLGwoby5tZCgpLDQyKSk7Zm9yKFZjZShlLGUuZCksVmNlKGUsZS5nKSxlLmM9bmV3IFpwdChlLmIpLFN1bihlLmMsKG0zZSgpLGs4dCkpLFJjZShlLGUuZCksUmNlKGUsZS5nKSxyYSh0LGUuYy5hLmIpLGUuZT1uZXcgbHQoZ3MsZ3MpLGUuYT1uZXcgbHQoaWEsaWEpLHI9bmV3IEcodCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDg2KSxlLmUuYT1iLk1hdGgubWluKGUuZS5hLG4uZy5jKSxlLmUuYj1iLk1hdGgubWluKGUuZS5iLG4uZy5kKSxlLmEuYT1iLk1hdGgubWF4KGUuYS5hLG4uZy5jK24uZy5iKSxlLmEuYj1iLk1hdGgubWF4KGUuYS5iLG4uZy5kK24uZy5hKTtzM2UoZS5jLG5ldyBWdiksZz0wO2RvIGE9VHZ0KGUpLCsrZzt3aGlsZSgoZzwyfHxhPkFiKSYmZzwxMCk7czNlKGUuYyxuZXcgWTcpLFR2dChlKSx3Z24oZS5jKSxnTW4oZS5mKX1mdW5jdGlvbiBPTW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKO2ZvcihuPWwoUShlLChOdCgpLE1zKSksMTAxKSxmPWUuZixvPWUuZCxnPWYuYStvLmIrby5jLHc9MC1vLmQtZS5jLmIsQz1mLmIrby5kK28uYS1lLmMuYixFPW5ldyBidCxMPW5ldyBidCxhPW5ldyBHKHQpO2EuYTxhLmMuYy5sZW5ndGg7KXtzd2l0Y2gocj1sKHJlKGEpLDEwKSxuLmcpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOnhDbihyKTticmVhaztjYXNlIDQ6Qj1sKFEocixwMyksOCksej1CP0IuYTowLHIubi5hPWcqemUoR2UoUShyLChmdCgpLGwzKSkpKS16LERWKHIsITAsITEpO2JyZWFrO2Nhc2UgNTpWPWwoUShyLHAzKSw4KSxKPVY/Vi5hOjAsci5uLmE9emUoR2UoUShyLChmdCgpLGwzKSkpKS1KLERWKHIsITAsITEpLGYuYT1iLk1hdGgubWF4KGYuYSxyLm4uYStyLm8uYS8yKX1zd2l0Y2gobChRKHIsKGZ0KCksV2MpKSw2NCkuZyl7Y2FzZSAxOnIubi5iPXcsJG4oRS5jLHIpO2JyZWFrO2Nhc2UgMzpyLm4uYj1DLCRuKEwuYyxyKX19c3dpdGNoKG4uZyl7Y2FzZSAxOmNhc2UgMjpzMXQoRSxlKSxzMXQoTCxlKTticmVhaztjYXNlIDM6YTF0KEUsZSksYTF0KEwsZSl9fWZ1bmN0aW9uIE5NbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEI7c3dpdGNoKGUuay5nKXtjYXNlIDE6aWYocj1sKFEoZSwoZnQoKSx6aSkpLDE4KSxuPWwoUShyLHFMZSksNzUpLG4/UnQoQnQoUShyLFcxKSkpJiYobj1BTihuKSk6bj1uZXcgYmwsRT1sKFEoZSxvMSksMTIpLEUpe2lmKEM9SWMoaGUobGUoRWEsMSksZHQsOCwwLFtFLmkubixFLm4sRS5hXSkpLHQ8PUMuYSlyZXR1cm4gQy5iO0NzKG4sQyxuLmEsbi5hLmEpfWlmKEw9bChRKGUsJGYpLDEyKSxMKXtpZihCPUljKGhlKGxlKEVhLDEpLGR0LDgsMCxbTC5pLm4sTC5uLEwuYV0pKSxCLmE8PXQpcmV0dXJuIEIuYjtDcyhuLEIsbi5jLmIsbi5jKX1pZihuLmI+PTIpe2Zvcih3PVJyKG4sMCksZj1sKEJyKHcpLDgpLGc9bChCcih3KSw4KTtnLmE8dCYmdy5iIT13LmQuYzspZj1nLGc9bChCcih3KSw4KTtyZXR1cm4gZi5iKyh0LWYuYSkvKGcuYS1mLmEpKihnLmItZi5iKX1icmVhaztjYXNlIDM6c3dpdGNoKG89bChRKGwoanQoZS5qLDApLDEyKSwoZnQoKSx6aSkpLDEyKSxhPW8uaSxvLmouZyl7Y2FzZSAxOnJldHVybiBhLm4uYjtjYXNlIDM6cmV0dXJuIGEubi5iK2Euby5ifX1yZXR1cm4gRXhlKGUpLmJ9ZnVuY3Rpb24gUE1uKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEw7Zm9yKGY9bmV3IEcoZS5kLmIpO2YuYTxmLmMuYy5sZW5ndGg7KWZvcihvPWwocmUoZiksMzApLHc9bmV3IEcoby5hKTt3LmE8dy5jLmMubGVuZ3RoOyl7aWYoZz1sKHJlKHcpLDEwKSxSdChCdChRKGcsKE50KCksUUwpKSkpJiYhWmsoc3AoZykpKXtyPWwoQXBuKHNwKGcpKSwxOCksQz1yLmMuaSxDPT1nJiYoQz1yLmQuaSksTD1uZXcgY2EoQyxtYShKYShnLm4pLEMubikpLGtpKGUuYixnLEwpO2NvbnRpbnVlfWE9bmV3IGVmKGcubi5hLWcuZC5iLGcubi5iLWcuZC5kLGcuby5hK2cuZC5iK2cuZC5jLGcuby5iK2cuZC5kK2cuZC5hKSx0PXRydChhZXQoaWV0KHNldChuZXcgT3dlLGcpLGEpLEo4dCksZS5hKSxlcnQoSnVuKEdodChuZXcgSXdlLGhlKGxlKGRLLDEpLFJuLDYwLDAsW3RdKSksdCksZS5hKSxFPW5ldyBCaWUsa2koZS5lLHQsRSksbj1YZyhuZXcgaHIoZHIoa2EoZykuYS5LYygpLG5ldyBqKSkpLVhnKG5ldyBocihkcihxcyhnKS5hLktjKCksbmV3IGopKSksbjwwP1NOKEUsITAsKEpzKCksdWMpKTpuPjAmJlNOKEUsITAsKEpzKCksdmMpKSxnLms9PShabigpLFVzKSYmY2F0KEUpLGtpKGUuZixnLHQpfX1mdW5jdGlvbiBCTW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlO2ZvcihhPWwoUShlLChRaSgpLGdNKSksMjcpLEU9SWksQz1JaSxnPWxvLHc9bG8sTWU9UnIoZS5iLDApO01lLmIhPU1lLmQuYzspZmU9bChCcihNZSksNDApLHo9ZmUuZSxWPWZlLmYsRT1iLk1hdGgubWluKEUsei5hLVYuYS8yKSxDPWIuTWF0aC5taW4oQyx6LmItVi5iLzIpLGc9Yi5NYXRoLm1heChnLHouYStWLmEvMiksdz1iLk1hdGgubWF4KHcsei5iK1YuYi8yKTtmb3IoQj1sKGF0KGEsKEhjKCksZ0llKSksMTA3KSxUZT1ScihlLmIsMCk7VGUuYiE9VGUuZC5jOylmZT1sKEJyKFRlKSw0MCksTD1RKGZlLGdNKSxEZShMLDIwNykmJihvPWwoTCwyNyksUWgobyxmZS5lLmEsZmUuZS5iKSxhUChvLGZlKSk7Zm9yKHRlPVJyKGUuYSwwKTt0ZS5iIT10ZS5kLmM7KUo9bChCcih0ZSksNjUpLHI9bChRKEosZ00pLDc0KSxyJiYodD1KLmEsbj1sNihyLCEwLCEwKSxkUCh0LG4pKTskZT1nLUUrKEIuYitCLmMpLGY9dy1DKyhCLmQrQi5hKSxSdChCdChhdChhLChwaSgpLEM0KSkpKXx8R3coYSwkZSxmLCExLCExKSxIaShhLHQ3LCRlLShCLmIrQi5jKSksSGkoYSxlNyxmLShCLmQrQi5hKSl9ZnVuY3Rpb24gU3Z0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7Zm9yKHc9ITAsYT0wLEU9ZS5nW3QucF0sQz10Lm8uYitlLm8sbj1lLmRbdC5wXVsyXSxyZihlLmIsRSxwdChsKGp0KGUuYixFKSwxNykuYS0xK24pKSxyZihlLmMsRSx6ZShHZShqdChlLmMsRSkpKS1DK24qZS5mKSwrK0UsRT49ZS5qPygrK2Uuaix2dChlLmIscHQoMSkpLHZ0KGUuYyxDKSk6KHI9ZS5kW3QucF1bMV0scmYoZS5iLEUscHQobChqdChlLmIsRSksMTcpLmErMS1yKSkscmYoZS5jLEUsemUoR2UoanQoZS5jLEUpKSkrQy1yKmUuZikpLChlLnI9PShOZigpLEFCKSYmKGwoanQoZS5iLEUpLDE3KS5hPmUua3x8bChqdChlLmIsRS0xKSwxNykuYT5lLmspfHxlLnI9PUxCJiYoemUoR2UoanQoZS5jLEUpKSk+ZS5ufHx6ZShHZShqdChlLmMsRS0xKSkpPmUubikpJiYodz0hMSksZj1uZXcgaHIoZHIoa2EodCkuYS5LYygpLG5ldyBqKSk7anIoZik7KW89bCh4cihmKSwxOCksZz1vLmMuaSxlLmdbZy5wXT09RSYmKEw9U3Z0KGUsZyksYT1hK2woTC5hLDE3KS5hLHc9dyYmUnQoQnQoTC5iKSkpO3JldHVybiBlLmdbdC5wXT1FLGE9YStlLmRbdC5wXVswXSxuZXcgY2EocHQoYSksKEhuKCksISF3KSl9ZnVuY3Rpb24gX3Z0KGUsdCl7dmFyIG4scixhLG8sZjtuPXplKEdlKFEodCwoTnQoKSx4MCkpKSksbjwyJiZydCh0LHgwLDIpLHI9bChRKHQsUmgpLDg4KSxyPT0oSnMoKSxKMSkmJnJ0KHQsUmgselYodCkpLGE9bChRKHQsVmt0KSwxNyksYS5hPT0wP3J0KHQsKGZ0KCksWHgpLG5ldyBVY2UpOnJ0KHQsKGZ0KCksWHgpLG5ldyBWSChhLmEpKSxvPUJ0KFEodCxaTCkpLG89PW51bGwmJnJ0KHQsWkwsKEhuKCkscWUoUSh0LGJwKSk9PT1xZSgoaXAoKSxpQykpKSksSXMobmV3IGJuKG51bGwsbmV3IGtuKHQuYSwxNikpLG5ldyBxcChlKSksSXMoRGMobmV3IGJuKG51bGwsbmV3IGtuKHQuYiwxNikpLG5ldyB1NSksbmV3IG5fKGUpKSxmPW5ldyB4dnQodCkscnQodCwoZnQoKSwkNiksZikscU8oZS5hKSxYMChlLmEsKHVvKCkseTApLGwoUSh0LGR2KSwxODgpKSxYMChlLmEsdmcsbChRKHQscHYpLDE4OCkpLFgwKGUuYSxidSxsKFEodCxKTCksMTg4KSksWDAoZS5hLF91LGwoUSh0LHlXKSwxODgpKSxYMChlLmEsbWMsQjNuKGwoUSh0LGJwKSwyMjMpKSksdXllKGUuYSxESW4odCkpLHJ0KHQsSzFlLGJQKGUuYSx0KSl9ZnVuY3Rpb24gUmtlKGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZTtmb3IoTD1uZXcgUHIsZj1uZXcgYnQsU3B0KGUsbixlLmQuQWcoKSxmLEwpLFNwdChlLHIsZS5kLkJnKCksZixMKSxlLmI9LjIqKEo9RDJ0KERjKG5ldyBibihudWxsLG5ldyBrbihmLDE2KSksbmV3IFR0ZSkpLHRlPUQydChEYyhuZXcgYm4obnVsbCxuZXcga24oZiwxNikpLG5ldyBDdGUpKSxiLk1hdGgubWluKEosdGUpKSxvPTAsZz0wO2c8Zi5jLmxlbmd0aC0xO2crKylmb3Iodz0oU24oZyxmLmMubGVuZ3RoKSxsKGYuY1tnXSwxMTgpKSxWPWcrMTtWPGYuYy5sZW5ndGg7VisrKW8rPURrZShlLHcsKFNuKFYsZi5jLmxlbmd0aCksbChmLmNbVl0sMTE4KSkpO2ZvcihCPWwoUSh0LChmdCgpLFh4KSksMjM0KSxvPj0yJiYoZmU9WDJ0KGYsITAsQiksIWUuZSYmKGUuZT1uZXcgc1hlKGUpKSxxNW4oZS5lLGZlLGYsZS5iKSksT2d0KGYsQikscU1uKGYpLHo9LTEsQz1uZXcgRyhmKTtDLmE8Qy5jLmMubGVuZ3RoOylFPWwocmUoQyksMTE4KSwhKGIuTWF0aC5hYnMoRS5zLUUuYyk8RGQpJiYoej1iLk1hdGgubWF4KHosRS5vKSxlLmQueWcoRSxhLGUuYykpO3JldHVybiBlLmQuYS5hLiRiKCkseisxfWZ1bmN0aW9uIEZNbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGU7Zm9yKEw9bChQcSgoZj1ScihuZXcgSGcodCkuYS5kLDApLG5ldyBDNShmKSkpLDQwKSxWPUw/bChRKEwsKFFpKCksUmRlKSksNDApOm51bGwsYT0xO0wmJlY7KXtmb3Iodz0wLCRlPTAsbj1MLHI9VixnPTA7ZzxhO2crKyluPUlvZShuKSxyPUlvZShyKSwkZSs9emUoR2UoUShuLChRaSgpLEpUKSkpKSx3Kz16ZShHZShRKHIsSlQpKSk7aWYoTWU9emUoR2UoUShWLChRaSgpLEMyKSkpKSxUZT16ZShHZShRKEwsQzIpKSksQj1wOGUoZSxMLFYpLHo9TWUrdytlLmIrQi1UZS0kZSwwPHope2ZvcihFPXQsQz0wO0UmJkUhPXI7KSsrQyxFPWwoUShFLEJXKSw0MCk7aWYoRSlmb3IoZmU9ei9DLEU9dDtFIT1yOyl0ZT16ZShHZShRKEUsQzIpKSkreixydChFLEMyLHRlKSxKPXplKEdlKFEoRSxKVCkpKSt6LHJ0KEUsSlQsSiksei09ZmUsRT1sKFEoRSxCVyksNDApO2Vsc2UgcmV0dXJufSsrYSxMLmQuYj09MD9MPWJrZShuZXcgSGcodCksYSk6TD1sKFBxKChvPVJyKG5ldyBIZyhMKS5hLmQsMCksbmV3IEM1KG8pKSksNDApLFY9TD9sKFEoTCxSZGUpLDQwKTpudWxsfX1mdW5jdGlvbiBSTW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90O3JldHVybiBCPWUuY1t0XSx6PWUuY1tuXSxWPWwoUShCLChmdCgpLFd4KSksMTUpLCEhViYmVi5nYygpIT0wJiZWLkhjKHopfHwoSj1CLmshPShabigpLEFhKSYmei5rIT1BYSx0ZT1sKFEoQix1MyksMTApLGZlPWwoUSh6LHUzKSwxMCksVGU9dGUhPWZlLE1lPSEhdGUmJnRlIT1CfHwhIWZlJiZmZSE9eiwkZT1kdWUoQiwoQ3QoKSxRbikpLFplPWR1ZSh6LERyKSxNZT1NZXwoZHVlKEIsRHIpfHxkdWUoeixRbikpLG90PU1lJiZUZXx8JGV8fFplLEomJm90KXx8Qi5rPT0oWm4oKSxBdSkmJnouaz09UHN8fHouaz09KFpuKCksQXUpJiZCLms9PVBzPyExOihDPWUuY1t0XSxvPWUuY1tuXSxhPXZndChlLmUsQyxvLChDdCgpLGVyKSksdz12Z3QoZS5pLEMsbyxhciksZ0NuKGUuZixDLG8pLEU9STB0KGUuYixDLG8pK2woYS5hLDE3KS5hK2wody5hLDE3KS5hK2UuZi5kLGc9STB0KGUuYixvLEMpK2woYS5iLDE3KS5hK2wody5iLDE3KS5hK2UuZi5iLGUuYSYmKEw9bChRKEMsemkpLDEyKSxmPWwoUShvLHppKSwxMikscj1aZHQoZS5nLEwsZiksRSs9bChyLmEsMTcpLmEsZys9bChyLmIsMTcpLmEpLEU+Zyl9ZnVuY3Rpb24gQXZ0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZTtmb3IoRT1ncyxDPWdzLGc9aWEsdz1pYSxCPW5ldyBHKHQuaSk7Qi5hPEIuYy5jLmxlbmd0aDspTD1sKHJlKEIpLDY4KSxhPWwobChjcihlLmcsTC5hKSw0MikuYiwyNyksUWgoYSxMLmIuYyxMLmIuZCksRT1iLk1hdGgubWluKEUsYS5pKSxDPWIuTWF0aC5taW4oQyxhLmopLGc9Yi5NYXRoLm1heChnLGEuaSthLmcpLHc9Yi5NYXRoLm1heCh3LGEuaithLmYpO2Zvcih6PWwoYXQoZS5jLChZTigpLFFDdCkpLDEwNyksR3coZS5jLGctRSsoei5iK3ouYyksdy1DKyh6LmQrei5hKSwhMCwhMCksSHhlKGUuYywtRSt6LmIsLUMrei5kKSxyPW5ldyBvcihQYXQoZS5jKSk7ci5lIT1yLmkuZ2MoKTspbj1sKGdyKHIpLDc0KSxmPWw2KG4sITAsITApLFY9Y2cobiksdGU9RWIobiksSj1uZXcgbHQoVi5pK1YuZy8yLFYuaitWLmYvMiksbz1uZXcgbHQodGUuaSt0ZS5nLzIsdGUuait0ZS5mLzIpLGZlPW1hKG5ldyBsdChvLmEsby5iKSxKKSxSRShmZSxWLmcsVi5mKSxPaShKLGZlKSxUZT1tYShuZXcgbHQoSi5hLEouYiksbyksUkUoVGUsdGUuZyx0ZS5mKSxPaShvLFRlKSxrTyhmLEouYSxKLmIpLHhPKGYsby5hLG8uYil9ZnVuY3Rpb24gak1uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFY7Zm9yKHQuVWcoIkxhYmVsIGR1bW15IHJlbW92YWwiLDEpLHI9emUoR2UoUShlLChOdCgpLEg2KSkpKSxhPXplKEdlKFEoZSx5NCkpKSxFPWwoUShlLFJoKSw4OCksdz1uZXcgRyhlLmIpO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihnPWwocmUodyksMzApLEw9bmV3IFVhKGcuYSwwKTtMLmI8TC5kLmdjKCk7KUM9KG1yKEwuYjxMLmQuZ2MoKSksbChMLmQuWGIoTC5jPUwuYisrKSwxMCkpLEMuaz09KFpuKCksY3UpJiYoQj1sKFEoQywoZnQoKSx6aSkpLDE4KSxWPXplKEdlKFEoQix4MikpKSxmPXFlKFEoQyxZeCkpPT09cWUoKEloKCksR2IpKSxuPW5ldyBFbyhDLm4pLGYmJihuLmIrPVYrciksbz1uZXcgbHQoQy5vLmEsQy5vLmIrKEMuaz09Y3UmJiFfayhGaShsKFEoQyxXTCksMTUpLk9jKCksbmV3IFdsKG5ldyB1aikpKS5CZCgoQW0oKSx6eCkpPzA6LVYtcikpLHo9bChRKEMsV0wpLDE1KSxFPT0oSnMoKSx3Zil8fEU9PVExP1VFbih6LG4sYSxvLGYsRSk6WnluKHosbixhLG8pLHJhKEIuYix6KSxDbGUoQyxxZShRKGUsYnApKT09PXFlKChpcCgpLEpCKSkpLHBoKEwpKTt0LlZnKCl9ZnVuY3Rpb24gJE1uKGUpe2UucXx8KGUucT0hMCxlLnA9cWMoZSwwKSxlLmE9cWMoZSwxKSxpcyhlLmEsMCksZS5mPXFjKGUsMiksaXMoZS5mLDEpLFNzKGUuZiwyKSxlLm49cWMoZSwzKSxTcyhlLm4sMyksU3MoZS5uLDQpLFNzKGUubiw1KSxTcyhlLm4sNiksZS5nPXFjKGUsNCksaXMoZS5nLDcpLFNzKGUuZyw4KSxlLmM9cWMoZSw1KSxpcyhlLmMsNyksaXMoZS5jLDgpLGUuaT1xYyhlLDYpLGlzKGUuaSw5KSxpcyhlLmksMTApLGlzKGUuaSwxMSksaXMoZS5pLDEyKSxTcyhlLmksMTMpLGUuaj1xYyhlLDcpLGlzKGUuaiw5KSxlLmQ9cWMoZSw4KSxpcyhlLmQsMyksaXMoZS5kLDQpLGlzKGUuZCw1KSxpcyhlLmQsNiksU3MoZS5kLDcpLFNzKGUuZCw4KSxTcyhlLmQsOSksU3MoZS5kLDEwKSxlLmI9cWMoZSw5KSxTcyhlLmIsMCksU3MoZS5iLDEpLGUuZT1xYyhlLDEwKSxTcyhlLmUsMSksU3MoZS5lLDIpLFNzKGUuZSwzKSxTcyhlLmUsNCksaXMoZS5lLDUpLGlzKGUuZSw2KSxpcyhlLmUsNyksaXMoZS5lLDgpLGlzKGUuZSw5KSxpcyhlLmUsMTApLFNzKGUuZSwxMSksZS5rPXFjKGUsMTEpLFNzKGUuaywwKSxTcyhlLmssMSksZS5vPVRpKGUsMTIpLGUucz1UaShlLDEzKSl9ZnVuY3Rpb24gamtlKGUsdCl7dC5kYygpJiZ0ZyhlLmosITAsITAsITAsITApLFBpKHQsKEN0KCksXzApKSYmdGcoZS5qLCEwLCEwLCEwLCExKSxQaSh0LHlmKSYmdGcoZS5qLCExLCEwLCEwLCEwKSxQaSh0LCRoKSYmdGcoZS5qLCEwLCEwLCExLCEwKSxQaSh0LEhmKSYmdGcoZS5qLCEwLCExLCEwLCEwKSxQaSh0LHpsKSYmdGcoZS5qLCExLCEwLCEwLCExKSxQaSh0LHhmKSYmdGcoZS5qLCExLCEwLCExLCEwKSxQaSh0LHpoKSYmdGcoZS5qLCEwLCExLCExLCEwKSxQaSh0LEEwKSYmdGcoZS5qLCEwLCExLCEwLCExKSxQaSh0LGhsKSYmdGcoZS5qLCEwLCEwLCEwLCEwKSxQaSh0LEp1KSYmdGcoZS5qLCEwLCEwLCEwLCEwKSxQaSh0LGhsKSYmdGcoZS5qLCEwLCEwLCEwLCEwKSxQaSh0LGxsKSYmdGcoZS5qLCEwLCEwLCEwLCEwKSxQaSh0LGZsKSYmdGcoZS5qLCEwLCEwLCEwLCEwKSxQaSh0LHFsKSYmdGcoZS5qLCEwLCEwLCEwLCEwKSxQaSh0LER1KSYmdGcoZS5qLCEwLCEwLCEwLCEwKX1mdW5jdGlvbiBMdnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTDtpZihlLmEhPXQuamsoKSl0aHJvdyB1ZShuZXcgWW4oeVQrdC54ZSgpK3QzKSk7aWYocj1vMigoRWwoKSxpbyksdCkuSmwoKSxyKXJldHVybiByLmprKCkud2koKS5yaShyLG4pO2lmKGY9bzIoaW8sdCkuTGwoKSxmKXtpZihuPT1udWxsKXJldHVybiBudWxsO2lmKGc9bChuLDE1KSxnLmRjKCkpcmV0dXJuIiI7Zm9yKEw9bmV3IFVwLG89Zy5LYygpO28uT2IoKTspYT1vLlBiKCksWG8oTCxmLmprKCkud2koKS5yaShmLGEpKSxMLmErPSIgIjtyZXR1cm4gR3NlKEwsTC5hLmxlbmd0aC0xKX1pZihDPW8yKGlvLHQpLk1sKCksIUMuZGMoKSl7Zm9yKEU9Qy5LYygpO0UuT2IoKTspaWYodz1sKEUuUGIoKSwxNTYpLHcuZmsobikpdHJ5e2lmKEw9dy5qaygpLndpKCkucmkodyxuKSxMIT1udWxsKXJldHVybiBMfWNhdGNoKEIpe2lmKEI9YnMoQiksIURlKEIsMTAzKSl0aHJvdyB1ZShCKX10aHJvdyB1ZShuZXcgWW4oIkludmFsaWQgdmFsdWU6ICciK24rIicgZm9yIGRhdGF0eXBlIDoiK3QueGUoKSkpfXJldHVybiBsKHQsODQ3KS5vaygpLG49PW51bGw/bnVsbDpEZShuLDE4MCk/IiIrbChuLDE4MCkuYTpiaChuKT09Y0s/Q250KGpNWzBdLGwobiwyMDYpKTp4YyhuKX1mdW5jdGlvbiB6TW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEM7Zm9yKEU9bmV3IG9zLGc9bmV3IG9zLG89bmV3IEcoZSk7by5hPG8uYy5jLmxlbmd0aDspcj1sKHJlKG8pLDEzMSksci52PTAsci5uPXIuaS5jLmxlbmd0aCxyLnU9ci50LmMubGVuZ3RoLHIubj09MCYmQ3MoRSxyLEUuYy5iLEUuYyksci51PT0wJiZyLnIuYS5nYygpPT0wJiZDcyhnLHIsZy5jLmIsZy5jKTtmb3IoZj0tMTtFLmIhPTA7KWZvcihyPWwoa3VlKEUsMCksMTMxKSxuPW5ldyBHKHIudCk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDI3NCksQz10LmIsQy52PWIuTWF0aC5tYXgoQy52LHIudisxKSxmPWIuTWF0aC5tYXgoZixDLnYpLC0tQy5uLEMubj09MCYmQ3MoRSxDLEUuYy5iLEUuYyk7aWYoZj4tMSl7Zm9yKGE9UnIoZywwKTthLmIhPWEuZC5jOylyPWwoQnIoYSksMTMxKSxyLnY9Zjtmb3IoO2cuYiE9MDspZm9yKHI9bChrdWUoZywwKSwxMzEpLG49bmV3IEcoci5pKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMjc0KSx3PXQuYSx3LnIuYS5nYygpPT0wJiYody52PWIuTWF0aC5taW4ody52LHIudi0xKSwtLXcudSx3LnU9PTAmJkNzKGcsdyxnLmMuYixnLmMpKX19ZnVuY3Rpb24gcU1uKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDO2ZvcihFPW5ldyBidCxnPW5ldyBidCxmPW5ldyBHKGUpO2YuYTxmLmMuYy5sZW5ndGg7KWE9bChyZShmKSwxMTgpLEgoYSxhLmYuYy5sZW5ndGgpLHEoYSxhLmsuYy5sZW5ndGgpLGEuZD09MCYmJG4oRS5jLGEpLGEuaT09MCYmYS5lLmI9PTAmJiRuKGcuYyxhKTtmb3Iocj0tMTtFLmMubGVuZ3RoIT0wOylmb3IoYT1sKHQyKEUsMCksMTE4KSxuPW5ldyBHKGEuayk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDEzMiksQz10LmIsWShDLGIuTWF0aC5tYXgoQy5vLGEubysxKSkscj1iLk1hdGgubWF4KHIsQy5vKSxIKEMsQy5kLTEpLEMuZD09MCYmJG4oRS5jLEMpO2lmKHI+LTEpe2ZvcihvPW5ldyBHKGcpO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSwxMTgpLGEubz1yO2Zvcig7Zy5jLmxlbmd0aCE9MDspZm9yKGE9bCh0MihnLDApLDExOCksbj1uZXcgRyhhLmYpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxMzIpLHc9dC5hLCEody5lLmI+MCkmJihZKHcsYi5NYXRoLm1pbih3Lm8sYS5vLTEpKSxxKHcsdy5pLTEpLHcuaT09MCYmJG4oZy5jLHcpKX19ZnVuY3Rpb24gTXZ0KGUsdCxuLHIsYSl7dmFyIG8sZixnLHc7cmV0dXJuIHc9Z3MsZj0hMSxnPUxrZShlLG1hKG5ldyBsdCh0LmEsdC5iKSxlKSxPaShuZXcgbHQobi5hLG4uYiksYSksbWEobmV3IGx0KHIuYSxyLmIpLG4pKSxvPSEhZyYmIShiLk1hdGguYWJzKGcuYS1lLmEpPD1adyYmYi5NYXRoLmFicyhnLmItZS5iKTw9Wnd8fGIuTWF0aC5hYnMoZy5hLXQuYSk8PVp3JiZiLk1hdGguYWJzKGcuYi10LmIpPD1adyksZz1Ma2UoZSxtYShuZXcgbHQodC5hLHQuYiksZSksbixhKSxnJiYoKGIuTWF0aC5hYnMoZy5hLWUuYSk8PVp3JiZiLk1hdGguYWJzKGcuYi1lLmIpPD1adyk9PShiLk1hdGguYWJzKGcuYS10LmEpPD1adyYmYi5NYXRoLmFicyhnLmItdC5iKTw9WncpfHxvP3c9Yi5NYXRoLm1pbih3LGVBKG1hKGcsbikpKTpmPSEwKSxnPUxrZShlLG1hKG5ldyBsdCh0LmEsdC5iKSxlKSxyLGEpLGcmJihmfHwoYi5NYXRoLmFicyhnLmEtZS5hKTw9WncmJmIuTWF0aC5hYnMoZy5iLWUuYik8PVp3KT09KGIuTWF0aC5hYnMoZy5hLXQuYSk8PVp3JiZiLk1hdGguYWJzKGcuYi10LmIpPD1adyl8fG8pJiYodz1iLk1hdGgubWluKHcsZUEobWEoZyxyKSkpKSx3fWZ1bmN0aW9uIER2dChlKXtzdyhlLG5ldyBYbShVeihudyhadih0dyhldyhuZXcgeDEsTWIpLEEzdCksIk1pbmltaXplcyB0aGUgc3RyZXNzIHdpdGhpbiBhIGxheW91dCB1c2luZyBzdHJlc3MgbWFqb3JpemF0aW9uLiBTdHJlc3MgZXhpc3RzIGlmIHRoZSBldWNsaWRlYW4gZGlzdGFuY2UgYmV0d2VlbiBhIHBhaXIgb2Ygbm9kZXMgZG9lc24ndCBtYXRjaCB0aGVpciBncmFwaCB0aGVvcmV0aWMgZGlzdGFuY2UsIHRoYXQgaXMsIHRoZSBzaG9ydGVzdCBwYXRoIGJldHdlZW4gdGhlIHR3byBub2Rlcy4gVGhlIG1ldGhvZCBhbGxvd3MgdG8gc3BlY2lmeSBpbmRpdmlkdWFsIGVkZ2UgbGVuZ3Rocy4iKSxuZXcgeTEpLFl1KSkpLGd0KGUsTWIsaEwsSXQobEFlKSksZ3QoZSxNYixjRywoSG4oKSwhMCkpLGd0KGUsTWIseDYsSXQoZDh0KSksZ3QoZSxNYixQeCxJdChnOHQpKSxndChlLE1iLE54LEl0KHA4dCkpLGd0KGUsTWIsZlQsSXQoZjh0KSksZ3QoZSxNYixmTCxJdChmQWUpKSxndChlLE1iLGRULEl0KGI4dCkpLGd0KGUsTWIsUEVlLEl0KHVBZSkpLGd0KGUsTWIsRkVlLEl0KG9BZSkpLGd0KGUsTWIsUkVlLEl0KGNBZSkpLGd0KGUsTWIsakVlLEl0KGhBZSkpLGd0KGUsTWIsQkVlLEl0KFRLKSl9ZnVuY3Rpb24gSE1uKGUpe3ZhciB0LG4scixhLG8sZixnLHc7Zm9yKHQ9bnVsbCxyPW5ldyBHKGUpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwyMzkpLHplKEwxKG4uZyxuLmRbMF0pLmEpLG4uYj1udWxsLG4uZSYmbi5lLmdjKCk+MCYmbi5jPT0wJiYoIXQmJih0PW5ldyBidCksJG4odC5jLG4pKTtpZih0KWZvcig7dC5jLmxlbmd0aCE9MDspe2lmKG49bCh0Mih0LDApLDIzOSksbi5iJiZuLmIuYy5sZW5ndGg+MCl7Zm9yKG89KCFuLmImJihuLmI9bmV3IGJ0KSxuZXcgRyhuLmIpKTtvLmE8by5jLmMubGVuZ3RoOylpZihhPWwocmUobyksMjM5KSxYSShMMShhLmcsYS5kWzBdKS5hKT09WEkoTDEobi5nLG4uZFswXSkuYSkpe2lmKGdjKGUsYSwwKT5nYyhlLG4sMCkpcmV0dXJuIG5ldyBjYShhLG4pfWVsc2UgaWYoemUoTDEoYS5nLGEuZFswXSkuYSk+emUoTDEobi5nLG4uZFswXSkuYSkpcmV0dXJuIG5ldyBjYShhLG4pfWZvcihnPSghbi5lJiYobi5lPW5ldyBidCksbi5lKS5LYygpO2cuT2IoKTspZj1sKGcuUGIoKSwyMzkpLHc9KCFmLmImJihmLmI9bmV3IGJ0KSxmLmIpLEV5KDAsdy5jLmxlbmd0aCkseF8ody5jLDAsbiksZi5jPT13LmMubGVuZ3RoJiYkbih0LmMsZil9cmV0dXJuIG51bGx9ZnVuY3Rpb24gVk1uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZTtmb3IodC5VZygiSW50ZXJhY3RpdmUgY3Jvc3NpbmcgbWluaW1pemF0aW9uIiwxKSxmPTAsbz1uZXcgRyhlLmIpO28uYTxvLmMuYy5sZW5ndGg7KXI9bChyZShvKSwzMCksci5wPWYrKztmb3IoQj1JeGUoZSksdGU9bmV3IG8zZShCLmxlbmd0aCksYXZ0KG5ldyBJbChoZShsZShleHQsMSksUm4sMjMwLDAsW3RlXSkpLEIpLEo9MCxmPTAsYT1uZXcgRyhlLmIpO2EuYTxhLmMuYy5sZW5ndGg7KXtmb3Iocj1sKHJlKGEpLDMwKSxuPTAsTD0wLEM9bmV3IEcoci5hKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3Iodz1sKHJlKEMpLDEwKSx3Lm4uYT4wJiYobis9dy5uLmErdy5vLmEvMiwrK0wpLFY9bmV3IEcody5qKTtWLmE8Vi5jLmMubGVuZ3RoOyl6PWwocmUoViksMTIpLHoucD1KKys7Zm9yKEw+MCYmKG4vPUwpLGZlPVdlKE5hLFpvLDI4LHIuYS5jLmxlbmd0aCwxNSwxKSxnPTAsRT1uZXcgRyhyLmEpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwxMCksdy5wPWcrKyxmZVt3LnBdPU5Nbih3LG4pLHcuaz09KFpuKCksQWEpJiZydCh3LChmdCgpLEhMZSksZmVbdy5wXSk7Q24oKSxWcyhyLmEsbmV3IEZZZShmZSkpLGZtdCh0ZSxCLGYsITApLCsrZn10LlZnKCl9ZnVuY3Rpb24gbkwoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYodC5lPT01KXtDdnQoZSx0KTtyZXR1cm59aWYoRT10LCEoRS5iPT1udWxsfHxlLmI9PW51bGwpKXtmb3IoYzYoZSksZUwoZSksYzYoRSksZUwoRSksbj1XZShWcixkaSwyOCxlLmIubGVuZ3RoK0UuYi5sZW5ndGgsMTUsMSksQz0wLHI9MCxmPTA7cjxlLmIubGVuZ3RoJiZmPEUuYi5sZW5ndGg7KWlmKGE9ZS5iW3JdLG89ZS5iW3IrMV0sZz1FLmJbZl0sdz1FLmJbZisxXSxvPGcpbltDKytdPWUuYltyKytdLG5bQysrXT1lLmJbcisrXTtlbHNlIGlmKG8+PWcmJmE8PXcpZzw9YSYmbzw9dz9yKz0yOmc8PWE/KGUuYltyXT13KzEsZis9Mik6bzw9dz8obltDKytdPWEsbltDKytdPWctMSxyKz0yKToobltDKytdPWEsbltDKytdPWctMSxlLmJbcl09dysxLGYrPTIpO2Vsc2UgaWYodzxhKWYrPTI7ZWxzZSB0aHJvdyB1ZShuZXcgQWMoIlRva2VuI3N1YnRyYWN0UmFuZ2VzKCk6IEludGVybmFsIEVycm9yOiBbIitlLmJbcl0rIiwiK2UuYltyKzFdKyJdIC0gWyIrRS5iW2ZdKyIsIitFLmJbZisxXSsiXSIpKTtmb3IoO3I8ZS5iLmxlbmd0aDspbltDKytdPWUuYltyKytdLG5bQysrXT1lLmJbcisrXTtlLmI9V2UoVnIsZGksMjgsQywxNSwxKSxwdShuLDAsZS5iLDAsQyl9fWZ1bmN0aW9uIEl2dChlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKGc9bDYodCwhMSwhMSksZmU9UU4oZyksciYmKGZlPUFOKGZlKSksTWU9emUoR2UoYXQodCwoSUEoKSxXMGUpKSkpLHRlPShtcihmZS5iIT0wKSxsKGZlLmEuYS5jLDgpKSxMPWwoZmYoZmUsMSksOCksZmUuYj4yPyhDPW5ldyBidCxyYShDLG5ldyBacChmZSwxLGZlLmIpKSxvPXZ3dChDLE1lK2UuYSksVGU9bmV3IEd1ZShvKSxwYyhUZSx0KSwkbihuLmMsVGUpKTpyP1RlPWwoY3IoZS5iLGNnKHQpKSwyNzIpOlRlPWwoY3IoZS5iLEViKHQpKSwyNzIpLHc9Y2codCksciYmKHc9RWIodCkpLGY9SDluKHRlLHcpLEU9TWUrZS5hLGYuYT8oRSs9Yi5NYXRoLmFicyh0ZS5iLUwuYiksSj1uZXcgbHQoTC5hLChMLmIrdGUuYikvMikpOihFKz1iLk1hdGguYWJzKHRlLmEtTC5hKSxKPW5ldyBsdCgoTC5hK3RlLmEpLzIsTC5iKSkscj9raShlLmQsdCxuZXcgbnhlKFRlLGYsSixFKSk6a2koZS5jLHQsbmV3IG54ZShUZSxmLEosRSkpLGtpKGUuYix0LFRlKSxWPSghdC5uJiYodC5uPW5ldyBudChlYyx0LDEsNykpLHQubiksej1uZXcgb3IoVik7ei5lIT16LmkuZ2MoKTspQj1sKGdyKHopLDEzNSksYT11UChlLEIsITAsMCwwKSwkbihuLmMsYSl9ZnVuY3Rpb24gVU1uKGUpe3ZhciB0LG4scixhLG8sZixnO2lmKCFlLkEuZGMoKSl7aWYoZS5BLkhjKChtaCgpLGlGKSkmJihsKFFvKGUuYiwoQ3QoKSxRbikpLDEyNykuaz0hMCxsKFFvKGUuYixEciksMTI3KS5rPSEwLHQ9ZS5xIT0oUmEoKSxUZykmJmUucSE9TXUsX3oobChRbyhlLmIsYXIpLDEyNyksdCksX3oobChRbyhlLmIsZXIpLDEyNyksdCksX3ooZS5nLHQpLGUuQS5IYyhDdikmJihsKFFvKGUuYixRbiksMTI3KS5qPSEwLGwoUW8oZS5iLERyKSwxMjcpLmo9ITAsbChRbyhlLmIsYXIpLDEyNykuaz0hMCxsKFFvKGUuYixlciksMTI3KS5rPSEwLGUuZy5rPSEwKSksZS5BLkhjKHJGKSlmb3IoZS5hLmo9ITAsZS5hLms9ITAsZS5nLmo9ITAsZS5nLms9ITAsZz1lLkIuSGMoKFpsKCksRk0pKSxhPWV1ZSgpLG89MCxmPWEubGVuZ3RoO288ZjsrK28pcj1hW29dLG49bChRbyhlLmksciksMzE0KSxuJiYoJDhlKHIpPyhuLmo9ITAsbi5rPSEwKToobi5qPSFnLG4uaz0hZykpO2UuQS5IYyhBNCkmJmUuQi5IYygoWmwoKSxhRikpJiYoZS5nLmo9ITAsZS5nLmo9ITAsZS5hLmp8fChlLmEuaj0hMCxlLmEuaz0hMCxlLmEuZT0hMCkpfX1mdW5jdGlvbiBHTW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO2ZvcihyPW5ldyBHKGUuZS5iKTtyLmE8ci5jLmMubGVuZ3RoOylmb3Iobj1sKHJlKHIpLDMwKSxvPW5ldyBHKG4uYSk7by5hPG8uYy5jLmxlbmd0aDspaWYoYT1sKHJlKG8pLDEwKSx6PWUuaVthLnBdLEU9ei5hLmUsdz16LmQuZSxhLm4uYj1FLGZlPXctRS1hLm8uYix0PXlsZShhKSxCPShCeSgpLChhLnE/YS5xOihDbigpLENuKCksbWcpKS5fYigoTnQoKSxnMykpP0w9bChRKGEsZzMpLDIwMyk6TD1sKFEoZW8oYSksZU0pLDIwMyksTCksdCYmKEI9PUc2fHxCPT1VNikmJihhLm8uYis9ZmUpLHQmJihCPT1iZGV8fEI9PUc2fHxCPT1VNikpe2ZvcihKPW5ldyBHKGEuaik7Si5hPEouYy5jLmxlbmd0aDspVj1sKHJlKEopLDEyKSwoQ3QoKSxKdSkuSGMoVi5qKSYmKEM9bChjcihlLmssViksMTI1KSxWLm4uYj1DLmUtRSk7Zm9yKGc9bmV3IEcoYS5iKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksNzIpLHRlPWwoUShhLGQzKSwyMSksdGUuSGMoKHF5KCkscWYpKT9mLm4uYis9ZmU6dGUuSGMoRWcpJiYoZi5uLmIrPWZlLzIpOyhCPT1HNnx8Qj09VTYpJiZPYyhhLChDdCgpLERyKSkuSmMobmV3IFpZZShmZSkpfX1mdW5jdGlvbiBLTW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihFPW5ldyBidCx3PW5ldyBHKHQuYSk7dy5hPHcuYy5jLmxlbmd0aDspZm9yKGY9bChyZSh3KSwxMCksQj1PYyhmLChDdCgpLGFyKSkuS2MoKTtCLk9iKCk7KWZvcihMPWwoQi5QYigpLDEyKSxhPW5ldyBHKEwuZyk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE4KSwhKCFEbyhyKSYmci5jLmkuYz09ci5kLmkuY3x8RG8ocil8fHIuZC5pLmMhPW4pJiYkbihFLmMscik7Zm9yKGc9bGYobi5hKS5LYygpO2cuT2IoKTspZm9yKGY9bChnLlBiKCksMTApLEI9T2MoZiwoQ3QoKSxlcikpLktjKCk7Qi5PYigpOylmb3IoTD1sKEIuUGIoKSwxMiksYT1uZXcgRyhMLmUpO2EuYTxhLmMuYy5sZW5ndGg7KWlmKHI9bChyZShhKSwxOCksISghRG8ocikmJnIuYy5pLmM9PXIuZC5pLmN8fERvKHIpfHxyLmMuaS5jIT10KSYmRS5jLmxlbmd0aCE9MCl7Zm9yKEM9bmV3IFVhKEUsRS5jLmxlbmd0aCksbz0obXIoQy5iPjApLGwoQy5hLlhiKEMuYz0tLUMuYiksMTgpKTtvIT1yJiZDLmI+MDspZS5hW28ucF09ITAsZS5hW3IucF09ITAsbz0obXIoQy5iPjApLGwoQy5hLlhiKEMuYz0tLUMuYiksMTgpKTtDLmI+MCYmcGgoQyl9fWZ1bmN0aW9uIE92dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIsejtpZighZS5iKXJldHVybiExO2ZvcihmPW51bGwsQj1udWxsLHc9bmV3IEJvZShudWxsLG51bGwpLGE9MSx3LmFbMV09ZS5iLEw9dztMLmFbYV07KUU9YSxnPUIsQj1MLEw9TC5hW2FdLHI9ZS5hLk5lKHQsTC5kKSxhPXI8MD8wOjEscj09MCYmKCFuLmN8fEpjKEwuZSxuLmQpKSYmKGY9TCksIShMJiZMLmIpJiYhb3koTC5hW2FdKSYmKG95KEwuYVsxLWFdKT9CPUIuYVtFXT1FVihMLGEpOm95KEwuYVsxLWFdKXx8KHo9Qi5hWzEtRV0seiYmKCFveSh6LmFbMS1FXSkmJiFveSh6LmFbRV0pPyhCLmI9ITEsei5iPSEwLEwuYj0hMCk6KG89Zy5hWzFdPT1CPzE6MCxveSh6LmFbRV0pP2cuYVtvXT11Y3QoQixFKTpveSh6LmFbMS1FXSkmJihnLmFbb109RVYoQixFKSksTC5iPWcuYVtvXS5iPSEwLGcuYVtvXS5hWzBdLmI9ITEsZy5hW29dLmFbMV0uYj0hMSkpKSk7cmV0dXJuIGYmJihuLmI9ITAsbi5kPWYuZSxMIT1mJiYoQz1uZXcgQm9lKEwuZCxMLmUpLFd4bihlLHcsZixDKSxCPT1mJiYoQj1DKSksQi5hW0IuYVsxXT09TD8xOjBdPUwuYVtMLmFbMF0/MDoxXSwtLWUuYyksZS5iPXcuYVsxXSxlLmImJihlLmIuYj0hMSksbi5ifWZ1bmN0aW9uIFdNbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKGE9bmV3IEcoZS5hLmEuYik7YS5hPGEuYy5jLmxlbmd0aDspZm9yKHI9bChyZShhKSw2MCksdz1yLmMuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksNjApLHIuYSE9Zy5hJiYoVWcoZS5hLmQpP0w9ZS5hLmcuZmYocixnKTpMPWUuYS5nLmdmKHIsZyksbz1yLmIuYStyLmQuYitMLWcuYi5hLG89Yi5NYXRoLmNlaWwobyksbz1iLk1hdGgubWF4KDAsbykscTZlKHIsZyk/KGY9aHcobmV3IFNtLGUuZCksRT11YShiLk1hdGguY2VpbChnLmIuYS1yLmIuYSkpLHQ9RS0oZy5iLmEtci5iLmEpLEM9aXgocikuYSxuPXIsQ3x8KEM9aXgoZykuYSx0PS10LG49ZyksQyYmKG4uYi5hLT10LEMubi5hLT10KSxwMChzMChpMChhMChyMChuZXcgX2YsYi5NYXRoLm1heCgwLEUpKSwxKSxmKSxlLmNbci5hLmRdKSkscDAoczAoaTAoYTAocjAobmV3IF9mLGIuTWF0aC5tYXgoMCwtRSkpLDEpLGYpLGUuY1tnLmEuZF0pKSk6KEI9MSwoRGUoci5nLDE1NCkmJkRlKGcuZywxMCl8fERlKGcuZywxNTQpJiZEZShyLmcsMTApKSYmKEI9MikscDAoczAoaTAoYTAocjAobmV3IF9mLHVhKG8pKSxCKSxlLmNbci5hLmRdKSxlLmNbZy5hLmRdKSkpKX1mdW5jdGlvbiBOdnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCO2lmKG4pZm9yKHI9LTEsQz1uZXcgVWEodCwwKTtDLmI8Qy5kLmdjKCk7KXtpZihnPShtcihDLmI8Qy5kLmdjKCkpLGwoQy5kLlhiKEMuYz1DLmIrKyksMTApKSxMPWUuY1tnLmMucF1bZy5wXS5hLEw9PW51bGwpe2ZvcihmPXIrMSxvPW5ldyBVYSh0LEMuYik7by5iPG8uZC5nYygpOylpZihCPXlobihlLChtcihvLmI8by5kLmdjKCkpLGwoby5kLlhiKG8uYz1vLmIrKyksMTApKSkuYSxCIT1udWxsKXtmPShucihCKSxCKTticmVha31MPShyK2YpLzIsZS5jW2cuYy5wXVtnLnBdLmE9TCxlLmNbZy5jLnBdW2cucF0uZD0obnIoTCksTCksZS5jW2cuYy5wXVtnLnBdLmI9MX1yPShucihMKSxMKX1lbHNle2ZvcihhPTAsRT1uZXcgRyh0KTtFLmE8RS5jLmMubGVuZ3RoOylnPWwocmUoRSksMTApLGUuY1tnLmMucF1bZy5wXS5hIT1udWxsJiYoYT1iLk1hdGgubWF4KGEsemUoZS5jW2cuYy5wXVtnLnBdLmEpKSk7Zm9yKGErPTIsdz1uZXcgRyh0KTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMTApLGUuY1tnLmMucF1bZy5wXS5hPT1udWxsJiYoTD1KbChlLmksMjQpKk1QKmEtMSxlLmNbZy5jLnBdW2cucF0uYT1MLGUuY1tnLmMucF1bZy5wXS5kPUwsZS5jW2cuYy5wXVtnLnBdLmI9MSl9fWZ1bmN0aW9uIFlNbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMO2ZvcighbiYmKG49aXluKHQucS5nZXRUaW1lem9uZU9mZnNldCgpKSksYT0odC5xLmdldFRpbWV6b25lT2Zmc2V0KCktbi5hKSo2ZTQsZz1uZXcgS3llKGJvKFpjKHQucS5nZXRUaW1lKCkpLGEpKSx3PWcsZy5xLmdldFRpbWV6b25lT2Zmc2V0KCkhPXQucS5nZXRUaW1lem9uZU9mZnNldCgpJiYoYT4wP2EtPTg2NGU1OmErPTg2NGU1LHc9bmV3IEt5ZShibyhaYyh0LnEuZ2V0VGltZSgpKSxhKSkpLEM9bmV3IFM1LEU9ZS5hLmxlbmd0aCxvPTA7bzxFOylpZihyPWNvKGUuYSxvKSxyPj05NyYmcjw9MTIyfHxyPj02NSYmcjw9OTApe2ZvcihmPW8rMTtmPEUmJmNvKGUuYSxmKT09cjsrK2YpO1dJbihDLHIsZi1vLGcsdyxuKSxvPWZ9ZWxzZSBpZihyPT0zOSl7aWYoKytvLG88RSYmY28oZS5hLG8pPT0zOSl7Qy5hKz0iJyIsKytvO2NvbnRpbnVlfWZvcihMPSExOyFMOyl7Zm9yKGY9bztmPEUmJmNvKGUuYSxmKSE9Mzk7KSsrZjtpZihmPj1FKXRocm93IHVlKG5ldyBZbigiTWlzc2luZyB0cmFpbGluZyAnIikpO2YrMTxFJiZjbyhlLmEsZisxKT09Mzk/KytmOkw9ITAsaGkoQyx0ZihlLmEsbyxmKSksbz1mKzF9fWVsc2UgQy5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLCsrbztyZXR1cm4gQy5hfWZ1bmN0aW9uIFhNbigpe3dpKEQ0LG5ldyBvcmUpLHdpKG1pLG5ldyBocmUpLHdpKFZmLG5ldyBncmUpLHdpKGwxLG5ldyBVMCksd2kodHBlLG5ldyB6Uyksd2koVFksbmV3IFQxKSx3aSh3cCxuZXcgQzEpLHdpKFJNLG5ldyBwcmUpLHdpKHVGLG5ldyBBJCksd2koWWdlLG5ldyBMJCksd2koWGIsbmV3IE0kKSx3aShVZixuZXcgRCQpLHdpKHUxLG5ldyBJJCksd2koazMsbmV3IE8kKSx3aShJNCxuZXcgVjApLHdpKGRsLG5ldyBubCksd2koTTQsbmV3IHNyZSksd2koWWMsbmV3IGFyZSksd2koV28sbmV3IHJsKSx3aShadSxuZXcgQlMpLHdpKE5zLG5ldyBOJCksd2kobGUoQWwsMSksbmV3IFAkKSx3aShqeCxuZXcgZzgpLHdpKFBMLG5ldyBjcmUpLHdpKGNLLG5ldyBhayksd2kobkJlLG5ldyB1cmUpLHdpKHRhLG5ldyBCJCksd2kobVBlLG5ldyBscmUpLHdpKHlQZSxuZXcgRlMpLHdpKEhQZSxuZXcgRiQpLHdpKENZLG5ldyBNSSksd2koX1QsbmV3IFJTKSx3aShybyxuZXcgZnJlKSx3aShxU2UsbmV3IGRyZSksd2kocjMsbmV3IERJKSx3aShIU2UsbmV3IGpTKSx3aShqUGUsbmV3IEUxKSx3aShyQmUsbmV3IG9rKSx3aShpMyxuZXcgY2spLHdpKHp0LG5ldyBJSSksd2kod1BlLG5ldyB4bSksd2koaUJlLG5ldyAkUyl9ZnVuY3Rpb24gUHZ0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2lmKGU9PW51bGwpcmV0dXJuIHVsO2lmKHc9dC5hLnpjKGUsdCksdyE9bnVsbClyZXR1cm4iWy4uLl0iO2ZvcihuPW5ldyBIbShDbywiWyIsIl0iKSxhPWUsbz0wLGY9YS5sZW5ndGg7bzxmOysrbylyPWFbb10sciE9bnVsbCYmYmgocikuaSY0P0FycmF5LmlzQXJyYXkocikmJihDPWdOKHIpLCEoQz49MTQmJkM8PTE2KSk/dC5hLl9iKHIpPyhuLmE/aGkobi5hLG4uYik6bi5hPW5ldyBUaChuLmQpLE5fKG4uYSwiWy4uLl0iKSk6KGc9am0ociksRT1uZXcgVV8odCksSmcobixQdnQoZyxFKSkpOkRlKHIsMTgzKT9KZyhuLFNrbihsKHIsMTgzKSkpOkRlKHIsMTk1KT9KZyhuLGh4bihsKHIsMTk1KSkpOkRlKHIsMjAxKT9KZyhuLHg5bihsKHIsMjAxKSkpOkRlKHIsMjExMSk/SmcobixmeG4obChyLDIxMTEpKSk6RGUociw1Myk/SmcobixDa24obChyLDUzKSkpOkRlKHIsMzc2KT9KZyhuLEhrbihsKHIsMzc2KSkpOkRlKHIsODQ2KT9KZyhuLFRrbihsKHIsODQ2KSkpOkRlKHIsMTA5KSYmSmcobixFa24obChyLDEwOSkpKTpKZyhuLHI9PW51bGw/dWw6eGMocikpO3JldHVybiBuLmE/bi5lLmxlbmd0aD09MD9uLmEuYTpuLmEuYSsoIiIrbi5lKTpuLmN9ZnVuY3Rpb24gSkUoZSx0KXt2YXIgbixyLGEsbztvPWUuRix0PT1udWxsPyhlLkY9bnVsbCxDRShlLG51bGwpKTooZS5GPShucih0KSx0KSxyPXBkKHQsY2woNjApKSxyIT0tMT8oYT0oR2EoMCxyLHQubGVuZ3RoKSx0LnN1YnN0cigwLHIpKSxwZCh0LGNsKDQ2KSk9PS0xJiYhdm4oYSxDeCkmJiF2bihhLFNMKSYmIXZuKGEsR0cpJiYhdm4oYSxfTCkmJiF2bihhLEFMKSYmIXZuKGEsTEwpJiYhdm4oYSxNTCkmJiF2bihhLERMKSYmKGE9cDV0KSxuPVJxKHQsY2woNjIpKSxuIT0tMSYmKGErPSIiKyhYbihuKzEsdC5sZW5ndGgrMSksdC5zdWJzdHIobisxKSkpLENFKGUsYSkpOihhPXQscGQodCxjbCg0NikpPT0tMSYmKHI9cGQodCxjbCg5MSkpLHIhPS0xJiYoYT0oR2EoMCxyLHQubGVuZ3RoKSx0LnN1YnN0cigwLHIpKSksIXZuKGEsQ3gpJiYhdm4oYSxTTCkmJiF2bihhLEdHKSYmIXZuKGEsX0wpJiYhdm4oYSxBTCkmJiF2bihhLExMKSYmIXZuKGEsTUwpJiYhdm4oYSxETCk/KGE9cDV0LHIhPS0xJiYoYSs9IiIrKFhuKHIsdC5sZW5ndGgrMSksdC5zdWJzdHIocikpKSk6YT10KSxDRShlLGEpLGE9PXQmJihlLkY9ZS5EKSkpLGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsNSxvLHQpKX1mdW5jdGlvbiBCdnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtpZih3PXQubGVuZ3RoLTEsZz0oWG4odyx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHcpKSxnPT05Myl7aWYoZj1wZCh0LGNsKDkxKSksZj49MClyZXR1cm4gYT1aNG4oZSwoR2EoMSxmLHQubGVuZ3RoKSx0LnN1YnN0cigxLGYtMSkpKSxDPShHYShmKzEsdyx0Lmxlbmd0aCksdC5zdWJzdHIoZisxLHctKGYrMSkpKSxDSW4oZSxDLGEpfWVsc2V7aWYobj0tMSxaU2U9PW51bGwmJihaU2U9bmV3IFJlZ0V4cCgiXFxkIikpLFpTZS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZykpJiYobj1oNGUodCxjbCg0Niksdy0xKSxuPj0wKSl7cj1sKE1vZShlLFRodChlLChHYSgxLG4sdC5sZW5ndGgpLHQuc3Vic3RyKDEsbi0xKSkpLCExKSw2MSksRT0wO3RyeXtFPU9oKChYbihuKzEsdC5sZW5ndGgrMSksdC5zdWJzdHIobisxKSksbG8sSWkpfWNhdGNoKEIpe3Rocm93IEI9YnMoQiksRGUoQiwxMzApPyhvPUIsdWUobmV3IG5WKG8pKSk6dWUoQil9aWYoRTxyLmdjKCkpcmV0dXJuIEw9ci5YYihFKSxEZShMLDc2KSYmKEw9bChMLDc2KS5tZCgpKSxsKEwsNTgpfWlmKG48MClyZXR1cm4gbChNb2UoZSxUaHQoZSwoWG4oMSx0Lmxlbmd0aCsxKSx0LnN1YnN0cigxKSkpLCExKSw1OCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gUU1uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtmb3IodC5VZygiTGFiZWwgZHVtbXkgaW5zZXJ0aW9ucyIsMSksTD1uZXcgYnQsZj16ZShHZShRKGUsKE50KCksSDYpKSkpLEU9emUoR2UoUShlLHk0KSkpLEM9bChRKGUsUmgpLDg4KSx6PW5ldyBHKGUuYSk7ei5hPHouYy5jLmxlbmd0aDspZm9yKEI9bChyZSh6KSwxMCksbz1uZXcgaHIoZHIocXMoQikuYS5LYygpLG5ldyBqKSk7anIobyk7KWlmKGE9bCh4cihvKSwxOCksYS5jLmkhPWEuZC5pJiZac2UoYS5iLEg4dCkpe2ZvcihKPXZ3bihhKSxWPWVnKGEuYi5jLmxlbmd0aCksbj1BVG4oZSxhLEosViksJG4oTC5jLG4pLHI9bi5vLGc9bmV3IFVhKGEuYiwwKTtnLmI8Zy5kLmdjKCk7KXc9KG1yKGcuYjxnLmQuZ2MoKSksbChnLmQuWGIoZy5jPWcuYisrKSw3MikpLHFlKFEodyxqZCkpPT09cWUoKEYxKCksbkMpKSYmKEM9PShKcygpLHdmKXx8Qz09UTE/KHIuYSs9dy5vLmErRSxyLmI9Yi5NYXRoLm1heChyLmIsdy5vLmIpKTooci5hPWIuTWF0aC5tYXgoci5hLHcuby5hKSxyLmIrPXcuby5iK0UpLCRuKFYuYyx3KSxwaChnKSk7Qz09KEpzKCksd2YpfHxDPT1RMT8oci5hLT1FLHIuYis9ZitKKTpyLmIrPWYtRStKfXJhKGUuYSxMKSx0LlZnKCl9ZnVuY3Rpb24gSk1uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFY7aWYoZS5jPWUuZSxWPUJ0KFEodCwoTnQoKSxVa3QpKSksej1WPT1udWxsfHwobnIoViksViksbz1sKFEodCwoZnQoKSxMdSkpLDIxKS5IYygoSG8oKSx2ZikpLGE9bChRKHQsTXMpLDEwMSksbj0hKGE9PShSYSgpLFR2KXx8YT09VGd8fGE9PU11KSx6JiYobnx8IW8pKXtmb3IoTD1uZXcgRyh0LmEpO0wuYTxMLmMuYy5sZW5ndGg7KUU9bChyZShMKSwxMCksRS5wPTA7Zm9yKEI9bmV3IGJ0LEM9bmV3IEcodC5hKTtDLmE8Qy5jLmMubGVuZ3RoOylpZihFPWwocmUoQyksMTApLHI9d210KGUsRSxudWxsKSxyKXtmb3Iodz1uZXcgbzdlLHBjKHcsdCkscnQodyxwcCxsKHIuYiwyMSkpLE81ZSh3LmQsdC5kKSxydCh3LHFULG51bGwpLGc9bChyLmEsMTUpLktjKCk7Zy5PYigpOylmPWwoZy5QYigpLDEwKSx2dCh3LmEsZiksZi5hPXc7Qi5GYyh3KX1vJiYocWUoUSh0LGc0KSk9PT1xZSgoS20oKSxvMWUpKT9lLmM9ZS5iOnFlKFEodCxnNCkpPT09cWUoYzFlKT9lLmM9ZS5kOmUuYz1lLmEpfWVsc2UgQj1uZXcgSWwoaGUobGUoTjh0LDEpLE0zdCwzNiwwLFt0XSkpO3JldHVybiBxZShRKHQsZzQpKSE9PXFlKChLbSgpLGM0KSkmJihDbigpLEIuamQobmV3IG9qKSksQn1mdW5jdGlvbiBaRShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEU7aWYoRT1lLmMsIXQmJih0PUxQZSksZS5jPXQsZS5EYiY0JiYhKGUuRGImMSkmJih3PW5ldyBfYShlLDEsMixFLGUuYyksbj9uLm5qKHcpOm49dyksRSE9dCl7aWYoRGUoZS5DYiwyOTIpKWUuRGI+PjE2PT0tMTA/bj1sKGUuQ2IsMjkyKS5Zayh0LG4pOmUuRGI+PjE2PT0tMTUmJighdCYmKHQ9KFRuKCksdGQpKSwhRSYmKEU9KFRuKCksdGQpKSxlLkNiLlloKCkmJih3PW5ldyBaZyhlLkNiLDEsMTMsRSx0LGYyKFhsKGwoZS5DYiw2MikpLGUpLCExKSxuP24ubmoodyk6bj13KSk7ZWxzZSBpZihEZShlLkNiLDkwKSllLkRiPj4xNj09LTIzJiYoRGUodCw5MCl8fCh0PShUbigpLEtmKSksRGUoRSw5MCl8fChFPShUbigpLEtmKSksZS5DYi5ZaCgpJiYodz1uZXcgWmcoZS5DYiwxLDEwLEUsdCxmMihkdShsKGUuQ2IsMjkpKSxlKSwhMSksbj9uLm5qKHcpOm49dykpO2Vsc2UgaWYoRGUoZS5DYiw0NTcpKWZvcihnPWwoZS5DYiw4NTApLGY9KCFnLmImJihnLmI9bmV3IFB6KG5ldyBWaWUpKSxnLmIpLG89KHI9bmV3IHFtKG5ldyBTcihmLmEpLmEpLG5ldyBCeihyKSk7by5hLmI7KWE9bChOdyhvLmEpLmxkKCksODkpLG49WkUoYSxTVShhLGcpLG4pfXJldHVybiBufWZ1bmN0aW9uIFpNbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKGY9UnQoQnQoYXQoZSwoTnQoKSxiNCkpKSksQj1sKGF0KGUsdjQpLDIxKSx3PSExLEU9ITEsTD1uZXcgb3IoKCFlLmMmJihlLmM9bmV3IG50KEhsLGUsOSw5KSksZS5jKSk7TC5lIT1MLmkuZ2MoKSYmKCF3fHwhRSk7KXtmb3Iobz1sKGdyKEwpLDEyMyksZz0wLGE9cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbKCFvLmQmJihvLmQ9bmV3IExuKGpzLG8sOCw1KSksby5kKSwoIW8uZSYmKG8uZT1uZXcgTG4oanMsbyw3LDQpKSxvLmUpXSkpKTtqcihhKSYmKHI9bCh4cihhKSw3NCksQz1mJiZxdyhyKSYmUnQoQnQoYXQocixndikpKSxuPWd2dCgoIXIuYiYmKHIuYj1uZXcgTG4oX3Isciw0LDcpKSxyLmIpLG8pP2U9PWRzKGJjKGwoT2UoKCFyLmMmJihyLmM9bmV3IExuKF9yLHIsNSw4KSksci5jKSwwKSw4NCkpKTplPT1kcyhiYyhsKE9lKCghci5iJiYoci5iPW5ldyBMbihfcixyLDQsNykpLHIuYiksMCksODQpKSksISgoQ3x8bikmJigrK2csZz4xKSkpOyk7KGc+MHx8Qi5IYygoUmwoKSx2cCkpJiYoIW8ubiYmKG8ubj1uZXcgbnQoZWMsbywxLDcpKSxvLm4pLmk+MCkmJih3PSEwKSxnPjEmJihFPSEwKX13JiZ0LkZjKChIbygpLHZmKSksRSYmdC5GYygoSG8oKSxVTCkpfWZ1bmN0aW9uIEZ2dChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEI7aWYoQj1sKGF0KGUsKHBpKCksa3YpKSwyMSksQi5kYygpKXJldHVybiBudWxsO2lmKGc9MCxmPTAsQi5IYygobWgoKSxpRikpKXtmb3IoQz1sKGF0KGUsX00pLDEwMSkscj0yLG49MixhPTIsbz0yLHQ9ZHMoZSk/bChhdChkcyhlKSx4diksODgpOmwoYXQoZSx4diksODgpLEU9bmV3IG9yKCghZS5jJiYoZS5jPW5ldyBudChIbCxlLDksOSkpLGUuYykpO0UuZSE9RS5pLmdjKCk7KWlmKHc9bChncihFKSwxMjMpLEw9bChhdCh3LHM3KSw2NCksTD09KEN0KCksUGMpJiYoTD1Fa2Uodyx0KSxIaSh3LHM3LEwpKSxDPT0oUmEoKSxNdSkpc3dpdGNoKEwuZyl7Y2FzZSAxOnI9Yi5NYXRoLm1heChyLHcuaSt3LmcpO2JyZWFrO2Nhc2UgMjpuPWIuTWF0aC5tYXgobix3Lmordy5mKTticmVhaztjYXNlIDM6YT1iLk1hdGgubWF4KGEsdy5pK3cuZyk7YnJlYWs7Y2FzZSA0Om89Yi5NYXRoLm1heChvLHcuait3LmYpfWVsc2Ugc3dpdGNoKEwuZyl7Y2FzZSAxOnIrPXcuZysyO2JyZWFrO2Nhc2UgMjpuKz13LmYrMjticmVhaztjYXNlIDM6YSs9dy5nKzI7YnJlYWs7Y2FzZSA0Om8rPXcuZisyfWc9Yi5NYXRoLm1heChyLGEpLGY9Yi5NYXRoLm1heChuLG8pfXJldHVybiBHdyhlLGcsZiwhMCwhMCl9ZnVuY3Rpb24gU2xlKGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZTtmb3IoVGU9bCh5YyhsVihGaShuZXcgYm4obnVsbCxuZXcga24odC5kLDE2KSksbmV3IENZZShuKSksbmV3IFNZZShuKSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsWyhGbCgpLEVjKV0pKSksMTUpLEw9SWksQz1sbyx3PW5ldyBHKHQuYi5qKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMTIpLGcuaj09biYmKEw9Yi5NYXRoLm1pbihMLGcucCksQz1iLk1hdGgubWF4KEMsZy5wKSk7aWYoTD09SWkpZm9yKGY9MDtmPFRlLmdjKCk7ZisrKUI2ZShsKFRlLlhiKGYpLDEwNSksbixmKTtlbHNlIGZvcihNZT1XZShWcixkaSwyOCxhLmxlbmd0aCwxNSwxKSxZZG4oTWUsTWUubGVuZ3RoKSxmZT1UZS5LYygpO2ZlLk9iKCk7KXtmb3IodGU9bChmZS5QYigpLDEwNSksbz1sKGNyKGUuYix0ZSksMTgzKSxFPTAsSj1MO0o8PUM7SisrKW9bSl0mJihFPWIuTWF0aC5tYXgoRSxyW0pdKSk7aWYodGUuaSl7Zm9yKHo9dGUuaS5jLCRlPW5ldyBLcyxCPTA7QjxhLmxlbmd0aDtCKyspYVt6XVtCXSYmbmEoJGUscHQoTWVbQl0pKTtmb3IoO1cwKCRlLHB0KEUpKTspKytFfWZvcihCNmUodGUsbixFKSxWPUw7Vjw9QztWKyspb1tWXSYmKHJbVl09RSsxKTt0ZS5pJiYoTWVbdGUuaS5jXT1FKX19ZnVuY3Rpb24gZURuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtmb3IoYT1udWxsLHI9bmV3IEcodC5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTApLHlsZShuKT9vPShnPWh3KHJPKG5ldyBTbSxuKSxlLmYpLHc9aHcock8obmV3IFNtLG4pLGUuZiksRT1uZXcgRDVlKG4sITAsZyx3KSxDPW4uby5iLEw9KEJ5KCksKG4ucT9uLnE6KENuKCksQ24oKSxtZykpLl9iKChOdCgpLGczKSk/Qj1sKFEobixnMyksMjAzKTpCPWwoUShlbyhuKSxlTSksMjAzKSxCKSx6PTFlNCxMPT1VNiYmKHo9MSksVj1wMChzMChpMChyMChhMChuZXcgX2YseiksdWEoYi5NYXRoLmNlaWwoQykpKSxnKSx3KSksTD09RzYmJm5hKGUuZCxWKSx2bXQoZSxsZihPYyhuLChDdCgpLGVyKSkpLEUpLHZtdChlLE9jKG4sYXIpLEUpLEUpOm89KEo9aHcock8obmV3IFNtLG4pLGUuZiksSXMoRmkobmV3IGJuKG51bGwsbmV3IGtuKG4uaiwxNikpLG5ldyBRZWUpLG5ldyBWZXQoZSxKKSksbmV3IEQ1ZShuLCExLEosSikpLGUuaVtuLnBdPW8sYSYmKGY9YS5jLmQuYStqNShlLm4sYS5jLG4pK24uZC5kLGEuYnx8KGYrPWEuYy5vLmIpLHAwKHMwKGkwKGEwKHIwKG5ldyBfZix1YShiLk1hdGguY2VpbChmKSkpLDApLGEuZCksby5hKSkpLGE9b31mdW5jdGlvbiB0RG4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHo7Zm9yKG89bmV3IG4ydCh0KSxMPU1TbihlLHQsbyksej1iLk1hdGgubWF4KHplKEdlKFEodCwoTnQoKSx4MikpKSksMSksQz1uZXcgRyhMLmEpO0MuYTxDLmMuYy5sZW5ndGg7KUU9bChyZShDKSw0Miksdz1uZHQobChFLmEsOCksbChFLmIsOCkseikseT0hMCx5PXkmZ3cobixuZXcgbHQody5jLHcuZCkpLHk9eSZndyhuLGR3KG5ldyBsdCh3LmMsdy5kKSx3LmIsMCkpLHk9eSZndyhuLGR3KG5ldyBsdCh3LmMsdy5kKSwwLHcuYSkpLHkmZ3cobixkdyhuZXcgbHQody5jLHcuZCksdy5iLHcuYSkpO3N3aXRjaChCPW8uZCxnPW5kdChsKEwuYi5hLDgpLGwoTC5iLmIsOCkseiksQj09KEN0KCksZXIpfHxCPT1hcj8oci5jW0IuZ109Yi5NYXRoLm1pbihyLmNbQi5nXSxnLmQpLHIuYltCLmddPWIuTWF0aC5tYXgoci5iW0IuZ10sZy5kK2cuYSkpOihyLmNbQi5nXT1iLk1hdGgubWluKHIuY1tCLmddLGcuYyksci5iW0IuZ109Yi5NYXRoLm1heChyLmJbQi5nXSxnLmMrZy5iKSksYT1pYSxmPW8uYy5pLmQsQi5nKXtjYXNlIDQ6YT1mLmM7YnJlYWs7Y2FzZSAyOmE9Zi5iO2JyZWFrO2Nhc2UgMTphPWYuYTticmVhaztjYXNlIDM6YT1mLmR9cmV0dXJuIHIuYVtCLmddPWIuTWF0aC5tYXgoci5hW0IuZ10sYSksb31mdW5jdGlvbiBuRG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuO2c9bChjcih0LmMsZSksNDY4KSxUZT10LmEuYyx3PXQuYS5jK3QuYS5iLGFuPWcuZixCbj1nLmEsZj1hbjxCbixKPW5ldyBsdChUZSxhbiksTWU9bmV3IGx0KHcsQm4pLGE9KFRlK3cpLzIsdGU9bmV3IGx0KGEsYW4pLCRlPW5ldyBsdChhLEJuKSxvPWVDbihlLGFuLEJuKSxvdD1JMSh0LkIpLFN0PW5ldyBsdChhLG8pLGNuPUkxKHQuRCksbj1jeW4oaGUobGUoRWEsMSksZHQsOCwwLFtvdCxTdCxjbl0pKSx6PSExLGZlPXQuQi5pLGZlJiZmZS5jJiZnLmQmJihFPWYmJmZlLnA8ZmUuYy5hLmMubGVuZ3RoLTF8fCFmJiZmZS5wPjAsRT9FJiYoQj1mZS5wLGY/KytCOi0tQixMPWwoanQoZmUuYy5hLEIpLDEwKSxyPW8wdChMKSx6PSEoWHVlKHIsb3QsblswXSl8fERzdChyLG90LG5bMF0pKSk6ej0hMCksVj0hMSxaZT10LkQuaSxaZSYmWmUuYyYmZy5lJiYoQz1mJiZaZS5wPjB8fCFmJiZaZS5wPFplLmMuYS5jLmxlbmd0aC0xLEM/KEI9WmUucCxmPy0tQjorK0IsTD1sKGp0KFplLmMuYSxCKSwxMCkscj1vMHQoTCksVj0hKFh1ZShyLG5bMF0sY24pfHxEc3QocixuWzBdLGNuKSkpOlY9ITApLHomJlYmJnVpKGUuYSxTdCksenx8ZkEoZS5hLGhlKGxlKEVhLDEpLGR0LDgsMCxbSix0ZV0pKSxWfHxmQShlLmEsaGUobGUoRWEsMSksZHQsOCwwLFskZSxNZV0pKX1mdW5jdGlvbiByRG4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlO2Zvcih6PXQuYy5sZW5ndGgsQj0wLEw9bmV3IEcoZS5iKTtMLmE8TC5jLmMubGVuZ3RoOylpZihDPWwocmUoTCksMzApLGZlPUMuYSxmZS5jLmxlbmd0aCE9MCl7Zm9yKHRlPW5ldyBHKGZlKSxFPTAsVGU9bnVsbCxhPWwocmUodGUpLDEwKSxvPW51bGw7YTspe2lmKG89bChqdCh0LGEucCksMjYxKSxvLmM+PTApe2Zvcih3PW51bGwsZz1uZXcgVWEoQy5hLEUrMSk7Zy5iPGcuZC5nYygpJiYoZj0obXIoZy5iPGcuZC5nYygpKSxsKGcuZC5YYihnLmM9Zy5iKyspLDEwKSksdz1sKGp0KHQsZi5wKSwyNjEpLCEody5kPT1vLmQmJncuYzxvLmMpKTspdz1udWxsO3cmJihUZSYmKHJmKHIsYS5wLHB0KGwoanQocixhLnApLDE3KS5hLTEpKSxsKGp0KG4sVGUucCksMTUpLk1jKG8pKSxvPXh4bihvLGEseisrKSwkbih0LmMsbyksdnQobixuZXcgYnQpLFRlPyhsKGp0KG4sVGUucCksMTUpLkZjKG8pLHZ0KHIscHQoMSkpKTp2dChyLHB0KDApKSl9Vj1udWxsLHRlLmE8dGUuYy5jLmxlbmd0aCYmKFY9bChyZSh0ZSksMTApLEo9bChqdCh0LFYucCksMjYxKSxsKGp0KG4sYS5wKSwxNSkuRmMoSikscmYocixWLnAscHQobChqdChyLFYucCksMTcpLmErMSkpKSxvLmQ9QixvLmM9RSsrLFRlPWEsYT1WfSsrQn19ZnVuY3Rpb24gaURuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6O2lmKG89bChRKGUsKGZ0KCksemkpKSw3NCksISFvKXtmb3Iocj1lLmEsYT1uZXcgRW8obiksT2koYSxMOG4oZSkpLGJFKGUuZC5pLGUuYy5pKT8oQj1lLmMsTD1JYyhoZShsZShFYSwxKSxkdCw4LDAsW0IubixCLmFdKSksbWEoTCxuKSk6TD1JMShlLmMpLENzKHIsTCxyLmEsci5hLmEpLHo9STEoZS5kKSxRKGUsWTFlKSE9bnVsbCYmT2koeixsKFEoZSxZMWUpLDgpKSxDcyhyLHosci5jLmIsci5jKSxEeShyLGEpLGY9bDYobywhMCwhMCksd1YoZixsKE9lKCghby5iJiYoby5iPW5ldyBMbihfcixvLDQsNykpLG8uYiksMCksODQpKSx5VihmLGwoT2UoKCFvLmMmJihvLmM9bmV3IExuKF9yLG8sNSw4KSksby5jKSwwKSw4NCkpLGRQKHIsZiksQz1uZXcgRyhlLmIpO0MuYTxDLmMuYy5sZW5ndGg7KUU9bChyZShDKSw3MiksZz1sKFEoRSx6aSksMTM1KSxEdyhnLEUuby5hKSxNdyhnLEUuby5iKSxRaChnLEUubi5hK2EuYSxFLm4uYithLmIpLEhpKGcsKGx4KCksZzFlKSxCdChRKEUsZzFlKSkpO3c9bChRKGUsKE50KCksY2MpKSw3NSksdz8oRHkodyxhKSxIaShvLGNjLHcpKTpIaShvLGNjLG51bGwpLHQ9PShpcCgpLHM5KT9IaShvLGJwLHM5KTpIaShvLGJwLG51bGwpfX1mdW5jdGlvbiBSdnQoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuO2lmKG4uYy5sZW5ndGghPTApe2ZvcihWPW5ldyBidCx6PW5ldyBHKG4pO3ouYTx6LmMuYy5sZW5ndGg7KUI9bChyZSh6KSwyNyksdnQoVixuZXcgbHQoQi5pLEIuaikpO2ZvcihyLmRoKHQsIkJlZm9yZSByZW1vdmluZyBvdmVybGFwcyIpO0d4ZShlLG4pOylUVShlLG4sITEpO2lmKHIuZGgodCwiQWZ0ZXIgcmVtb3Zpbmcgb3ZlcmxhcHMiKSxnPTAsdz0wLGE9bnVsbCxuLmMubGVuZ3RoIT0wJiYoYT0oU24oMCxuLmMubGVuZ3RoKSxsKG4uY1swXSwyNykpLGc9YS5pLShTbigwLFYuYy5sZW5ndGgpLGwoVi5jWzBdLDgpKS5hLHc9YS5qLShTbigwLFYuYy5sZW5ndGgpLGwoVi5jWzBdLDgpKS5iKSxmPWIuTWF0aC5zcXJ0KGcqZyt3KncpLEw9WHluKG4pLG89MSxMLmEuZ2MoKSE9MCl7Zm9yKEM9TC5hLmVjKCkuS2MoKTtDLk9iKCk7KUU9bChDLlBiKCksMjcpLEo9ZS5mLHRlPUouaStKLmcvMixmZT1KLmorSi5mLzIsVGU9RS5pK0UuZy8yLE1lPUUuaitFLmYvMiwkZT1UZS10ZSxaZT1NZS1mZSxvdD1iLk1hdGguc3FydCgkZSokZStaZSpaZSksU3Q9JGUvb3QsY249WmUvb3QsVXUoRSxFLmkrU3QqZiksR3UoRSxFLmorY24qZik7ci5kaCh0LCJDaGlsZCBtb3ZlbWVudCAiK28pLCsrb31lLmEmJmUuYS5HZyhuZXcgT2woTCkpLFJ2dChlLHQsbmV3IE9sKEwpLHIpfX1mdW5jdGlvbiBfbGUoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lO3JldHVybiB3PWUsQz1tYShuZXcgbHQodC5hLHQuYiksZSksRT1uLEw9bWEobmV3IGx0KHIuYSxyLmIpLG4pLEI9dy5hLHRlPXcuYixWPUUuYSxUZT1FLmIsej1DLmEsZmU9Qy5iLEo9TC5hLE1lPUwuYixhPUoqZmUteipNZSxBMSgpLGYwKE5kKSxiLk1hdGguYWJzKDAtYSk8PU5kfHxhPT0wfHxpc05hTigwKSYmaXNOYU4oYSk/ITE6KGY9MS9hKigoQi1WKSpmZS0odGUtVGUpKnopLGc9MS9hKi0oLShCLVYpKk1lKyh0ZS1UZSkqSiksbz0oZjAoTmQpLChiLk1hdGguYWJzKDAtZik8PU5kfHxmPT0wfHxpc05hTigwKSYmaXNOYU4oZik/MDowPGY/LTE6MD5mPzE6dXcoaXNOYU4oMCksaXNOYU4oZikpKTwwJiYoZjAoTmQpLChiLk1hdGguYWJzKGYtMSk8PU5kfHxmPT0xfHxpc05hTihmKSYmaXNOYU4oMSk/MDpmPDE/LTE6Zj4xPzE6dXcoaXNOYU4oZiksaXNOYU4oMSkpKTwwKSYmKGYwKE5kKSwoYi5NYXRoLmFicygwLWcpPD1OZHx8Zz09MHx8aXNOYU4oMCkmJmlzTmFOKGcpPzA6MDxnPy0xOjA+Zz8xOnV3KGlzTmFOKDApLGlzTmFOKGcpKSk8MCkmJihmMChOZCksKGIuTWF0aC5hYnMoZy0xKTw9TmR8fGc9PTF8fGlzTmFOKGcpJiZpc05hTigxKT8wOmc8MT8tMTpnPjE/MTp1dyhpc05hTihnKSxpc05hTigxKSkpPDApKSxvKX1mdW5jdGlvbiBzRG4oZSl7dmFyIHQsbixyLGE7aWYobj1lLkQhPW51bGw/ZS5EOmUuQix0PXBkKG4sY2woOTEpKSx0IT0tMSl7cj0oR2EoMCx0LG4ubGVuZ3RoKSxuLnN1YnN0cigwLHQpKSxhPW5ldyBVcDtkbyBhLmErPSJbIjt3aGlsZSgodD1OayhuLDkxLCsrdCkpIT0tMSk7dm4ocixDeCk/YS5hKz0iWiI6dm4ocixTTCk/YS5hKz0iQiI6dm4ocixHRyk/YS5hKz0iQyI6dm4ocixfTCk/YS5hKz0iRCI6dm4ocixBTCk/YS5hKz0iRiI6dm4ocixMTCk/YS5hKz0iSSI6dm4ocixNTCk/YS5hKz0iSiI6dm4ocixETCk/YS5hKz0iUyI6KGEuYSs9IkwiLGEuYSs9IiIrcixhLmErPSI7Iik7dHJ5e3JldHVybiBudWxsfWNhdGNoKG8pe2lmKG89YnMobyksIURlKG8sNjMpKXRocm93IHVlKG8pfX1lbHNlIGlmKHBkKG4sY2woNDYpKT09LTEpe2lmKHZuKG4sQ3gpKXJldHVybiBpaDtpZih2bihuLFNMKSlyZXR1cm4gQWw7aWYodm4obixHRykpcmV0dXJuIGtmO2lmKHZuKG4sX0wpKXJldHVybiBOYTtpZih2bihuLEFMKSlyZXR1cm4gQjQ7aWYodm4obixMTCkpcmV0dXJuIFZyO2lmKHZuKG4sTUwpKXJldHVybiBubTtpZih2bihuLERMKSlyZXR1cm4gaDd9cmV0dXJuIG51bGx9ZnVuY3Rpb24gYURuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdDtmb3IoZS5lPXQsZz1hRW4odCksb3Q9bmV3IGJ0LHI9bmV3IEcoZyk7ci5hPHIuYy5jLmxlbmd0aDspe2ZvcihuPWwocmUociksMTUpLFN0PW5ldyBidCwkbihvdC5jLFN0KSx3PW5ldyBLcyxWPW4uS2MoKTtWLk9iKCk7KXtmb3Ioej1sKFYuUGIoKSwyNyksbz11UChlLHosITAsMCwwKSwkbihTdC5jLG8pLEo9ei5pLHRlPXouaixCPSghei5uJiYoei5uPW5ldyBudChlYyx6LDEsNykpLHoubiksTD1uZXcgb3IoQik7TC5lIT1MLmkuZ2MoKTspRT1sKGdyKEwpLDEzNSksYT11UChlLEUsITEsSix0ZSksJG4oU3QuYyxhKTtmb3IoWmU9KCF6LmMmJih6LmM9bmV3IG50KEhsLHosOSw5KSksei5jKSxUZT1uZXcgb3IoWmUpO1RlLmUhPVRlLmkuZ2MoKTspZm9yKGZlPWwoZ3IoVGUpLDEyMyksZj11UChlLGZlLCExLEosdGUpLCRuKFN0LmMsZiksTWU9ZmUuaStKLCRlPWZlLmordGUsQj0oIWZlLm4mJihmZS5uPW5ldyBudChlYyxmZSwxLDcpKSxmZS5uKSxDPW5ldyBvcihCKTtDLmUhPUMuaS5nYygpOylFPWwoZ3IoQyksMTM1KSxhPXVQKGUsRSwhMSxNZSwkZSksJG4oU3QuYyxhKTtLYSh3LExIKExoKGhlKGxlKEZoLDEpLFJuLDIwLDAsW2NwKHopLHNQKHopXSkpKSl9S1RuKGUsdyxTdCl9cmV0dXJuIGUuZj1uZXcgR0plKG90KSxwYyhlLmYsdCksZS5mfWZ1bmN0aW9uIG9EbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3Q7Zm9yKEw9bmV3IHk1ZShuZXcgU2MoZSkpO0wuYyE9TC5kLmEuZDspZm9yKEM9WWx0KEwpLGc9bChDLmQsNTgpLHQ9bChDLmUsNTgpLGY9Zy5EaCgpLEo9MCwkZT0oZi5pPT1udWxsJiZTZChmKSxmLmkpLmxlbmd0aDtKPCRlOysrSilpZihFPShvPShmLmk9PW51bGwmJlNkKGYpLGYuaSksSj49MCYmSjxvLmxlbmd0aD9vW0pdOm51bGwpLEUucmsoKSYmIUUuc2soKSl7aWYoRGUoRSwxMDIpKXc9bChFLDE5KSwhKHcuQmImZXUpJiYob3Q9Um8odyksIShvdCYmb3QuQmImZXUpKSYmVUFuKGUsdyxnLHQpO2Vsc2UgaWYoRm8oKSxsKEUsNjkpLnhrKCkmJihuPShaZT1FLGwoWmU/bCh0LDU0KS5naShaZSk6bnVsbCwxNjApKSxuKSlmb3Ioej1sKGcuTWgoRSksMTYwKSxyPW4uZ2MoKSx0ZT0wLFY9ei5nYygpO3RlPFY7Kyt0ZSlpZihCPXouVGwodGUpLERlKEIsMTAyKSl7aWYoTWU9ei5VbCh0ZSksYT1CMShlLE1lKSxhPT1udWxsJiZNZSE9bnVsbCl7aWYoVGU9bChCLDE5KSwhZS5ifHxUZS5CYiZldXx8Um8oVGUpKWNvbnRpbnVlO2E9TWV9aWYoIW4uT2woQixhKSl7Zm9yKGZlPTA7ZmU8cjsrK2ZlKWlmKG4uVGwoZmUpPT1CJiZxZShuLlVsKGZlKSk9PT1xZShhKSl7bi5UaShuLmdjKCktMSxmZSksLS1yO2JyZWFrfX19ZWxzZSBuLk9sKHouVGwodGUpLHouVWwodGUpKX19ZnVuY3Rpb24gY0RuKGUsdCxuKXt2YXIgcjtpZihuLlVnKCJTdHJldGNoV2lkdGggbGF5ZXJpbmciLDEpLHQuYS5jLmxlbmd0aD09MCl7bi5WZygpO3JldHVybn1mb3IoZS5jPXQsZS50PTAsZS51PTAsZS5pPWdzLGUuZz1pYSxlLmQ9emUoR2UoUSh0LChOdCgpLHgwKSkpKSxBNm4oZSksUEVuKGUpLE5FbihlKSxEOG4oZSksSTVuKGUpLGUuaT1iLk1hdGgubWF4KDEsZS5pKSxlLmc9Yi5NYXRoLm1heCgxLGUuZyksZS5kPWUuZC9lLmksZS5mPWUuZy9lLmksZS5zPUg2bihlKSxyPW5ldyB5dShlLmMpLHZ0KGUuYy5iLHIpLGUucj1fdyhlLnApLGUubj1PSChlLmssZS5rLmxlbmd0aCk7ZS5yLmMubGVuZ3RoIT0wOyllLm89UXluKGUpLCFlLm98fGwwdChlKSYmZS5iLmEuZ2MoKSE9MD8oaXhuKGUscikscj1uZXcgeXUoZS5jKSx2dChlLmMuYixyKSxLYShlLmEsZS5iKSxlLmIuYS4kYigpLGUudD1lLnUsZS51PTApOmwwdChlKT8oZS5jLmIuYy5sZW5ndGg9MCxyPW5ldyB5dShlLmMpLHZ0KGUuYy5iLHIpLGUudD0wLGUudT0wLGUuYi5hLiRiKCksZS5hLmEuJGIoKSwrK2UuZixlLnI9X3coZS5wKSxlLm49T0goZS5rLGUuay5sZW5ndGgpKTooVmEoZS5vLHIpLGFsKGUucixlLm8pLG5hKGUuYixlLm8pLGUudD1lLnQtZS5rW2Uuby5wXSplLmQrZS5qW2Uuby5wXSxlLnUrPWUuZVtlLm8ucF0qZS5kKTt0LmEuYy5sZW5ndGg9MCxKTih0LmIpLG4uVmcoKX1mdW5jdGlvbiB1RG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTDtmb3IoZS5qPVdlKFZyLGRpLDI4LGUuZywxNSwxKSxlLm89bmV3IGJ0LElzKERjKG5ldyBibihudWxsLG5ldyBrbihlLmUuYiwxNikpLG5ldyBpdGUpLG5ldyBlWGUoZSkpLGUuYT1XZShpaCxwZywyOCxlLmIsMTYsMSksT04obmV3IGJuKG51bGwsbmV3IGtuKGUuZS5iLDE2KSksbmV3IG5YZShlKSkscj0oTD1uZXcgYnQsSXMoRmkoRGMobmV3IGJuKG51bGwsbmV3IGtuKGUuZS5iLDE2KSksbmV3IGF0ZSksbmV3IHRYZShlKSksbmV3IFVldChlLEwpKSxMKSx3PW5ldyBHKHIpO3cuYTx3LmMuYy5sZW5ndGg7KWlmKGc9bChyZSh3KSw1MTUpLCEoZy5jLmxlbmd0aDw9MSkpe2lmKGcuYy5sZW5ndGg9PTIpe0trbihnKSx5bGUoKFNuKDAsZy5jLmxlbmd0aCksbChnLmNbMF0sMTgpKS5kLmkpfHx2dChlLm8sZyk7Y29udGludWV9aWYoISh1eG4oZyl8fEo5bihnLG5ldyBzdGUpKSlmb3IoRT1uZXcgRyhnKSxhPW51bGw7RS5hPEUuYy5jLmxlbmd0aDspdD1sKHJlKEUpLDE4KSxuPWUuY1t0LnBdLCFhfHxFLmE+PUUuYy5jLmxlbmd0aD9DPXU2ZSgoWm4oKSxQcyksQWEpOkM9dTZlKChabigpLEFhKSxBYSksQyo9MixvPW4uYS5nLG4uYS5nPWIuTWF0aC5tYXgobyxvKyhDLW8pKSxmPW4uYi5nLG4uYi5nPWIuTWF0aC5tYXgoZixmKyhDLWYpKSxhPXR9fWZ1bmN0aW9uIGxEbihlKXt2YXIgdCxuLHIsYTtmb3IoSXMoRmkobmV3IGJuKG51bGwsbmV3IGtuKGUuYS5iLDE2KSksbmV3IE9qKSxuZXcgYWVlKSxVOG4oZSksSXMoRmkobmV3IGJuKG51bGwsbmV3IGtuKGUuYS5iLDE2KSksbmV3IG9lZSksbmV3IGNlZSksZS5jPT0oaXAoKSxzOSkmJihJcyhGaShEYyhuZXcgYm4obnVsbCxuZXcga24obmV3IGJyKGUuZiksMSkpLG5ldyB1ZWUpLG5ldyBsZWUpLG5ldyB2WWUoZSkpLElzKEZpKGZjKERjKERjKG5ldyBibihudWxsLG5ldyBrbihlLmQuYiwxNikpLG5ldyBoZWUpLG5ldyBOaiksbmV3IGZlZSksbmV3IFBqKSxuZXcgeVllKGUpKSksYT1uZXcgbHQoZ3MsZ3MpLHQ9bmV3IGx0KGlhLGlhKSxyPW5ldyBHKGUuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNjApLGEuYT1iLk1hdGgubWluKGEuYSxuLmQuYyksYS5iPWIuTWF0aC5taW4oYS5iLG4uZC5kKSx0LmE9Yi5NYXRoLm1heCh0LmEsbi5kLmMrbi5kLmIpLHQuYj1iLk1hdGgubWF4KHQuYixuLmQuZCtuLmQuYSk7T2koWTAoZS5kLmMpLEhxKG5ldyBsdChhLmEsYS5iKSkpLE9pKFkwKGUuZC5mKSxtYShuZXcgbHQodC5hLHQuYiksYSkpLGlDbihlLGEsdCksTmwoZS5mKSxObChlLmIpLE5sKGUuZyksTmwoZS5lKSxlLmEuYS5jLmxlbmd0aD0wLGUuYS5iLmMubGVuZ3RoPTAsZS5hPW51bGwsZS5kPW51bGx9ZnVuY3Rpb24gVVUoZSx0KXt2YXIgbjtpZihlLmUpdGhyb3cgdWUobmV3IG5jKChHZyhSMGUpLHBoZStSMGUuaytiaGUpKSk7aWYoIXBsbihlLmEsdCkpdGhyb3cgdWUobmV3IEFjKG4zdCt0K3IzdCkpO2lmKHQ9PWUuZClyZXR1cm4gZTtzd2l0Y2gobj1lLmQsZS5kPXQsbi5nKXtjYXNlIDA6c3dpdGNoKHQuZyl7Y2FzZSAyOiR3KGUpO2JyZWFrO2Nhc2UgMTp2YihlKSwkdyhlKTticmVhaztjYXNlIDQ6czYoZSksJHcoZSk7YnJlYWs7Y2FzZSAzOnM2KGUpLHZiKGUpLCR3KGUpfWJyZWFrO2Nhc2UgMjpzd2l0Y2godC5nKXtjYXNlIDE6dmIoZSksbmxlKGUpO2JyZWFrO2Nhc2UgNDpzNihlKSwkdyhlKTticmVhaztjYXNlIDM6czYoZSksdmIoZSksJHcoZSl9YnJlYWs7Y2FzZSAxOnN3aXRjaCh0Lmcpe2Nhc2UgMjp2YihlKSxubGUoZSk7YnJlYWs7Y2FzZSA0OnZiKGUpLHM2KGUpLCR3KGUpO2JyZWFrO2Nhc2UgMzp2YihlKSxzNihlKSx2YihlKSwkdyhlKX1icmVhaztjYXNlIDQ6c3dpdGNoKHQuZyl7Y2FzZSAyOnM2KGUpLCR3KGUpO2JyZWFrO2Nhc2UgMTpzNihlKSx2YihlKSwkdyhlKTticmVhaztjYXNlIDM6dmIoZSksbmxlKGUpfWJyZWFrO2Nhc2UgMzpzd2l0Y2godC5nKXtjYXNlIDI6dmIoZSksczYoZSksJHcoZSk7YnJlYWs7Y2FzZSAxOnZiKGUpLHM2KGUpLHZiKGUpLCR3KGUpO2JyZWFrO2Nhc2UgNDp2YihlKSxubGUoZSl9fXJldHVybiBlfWZ1bmN0aW9uIHA2KGUsdCl7dmFyIG47aWYoZS5kKXRocm93IHVlKG5ldyBuYygoR2coYTFlKSxwaGUrYTFlLmsrYmhlKSkpO2lmKCFnbG4oZS5hLHQpKXRocm93IHVlKG5ldyBBYyhuM3QrdCtyM3QpKTtpZih0PT1lLmMpcmV0dXJuIGU7c3dpdGNoKG49ZS5jLGUuYz10LG4uZyl7Y2FzZSAwOnN3aXRjaCh0Lmcpe2Nhc2UgMjpVbShlKTticmVhaztjYXNlIDE6d2IoZSksVW0oZSk7YnJlYWs7Y2FzZSA0OmE2KGUpLFVtKGUpO2JyZWFrO2Nhc2UgMzphNihlKSx3YihlKSxVbShlKX1icmVhaztjYXNlIDI6c3dpdGNoKHQuZyl7Y2FzZSAxOndiKGUpLHJsZShlKTticmVhaztjYXNlIDQ6YTYoZSksVW0oZSk7YnJlYWs7Y2FzZSAzOmE2KGUpLHdiKGUpLFVtKGUpfWJyZWFrO2Nhc2UgMTpzd2l0Y2godC5nKXtjYXNlIDI6d2IoZSkscmxlKGUpO2JyZWFrO2Nhc2UgNDp3YihlKSxhNihlKSxVbShlKTticmVhaztjYXNlIDM6d2IoZSksYTYoZSksd2IoZSksVW0oZSl9YnJlYWs7Y2FzZSA0OnN3aXRjaCh0Lmcpe2Nhc2UgMjphNihlKSxVbShlKTticmVhaztjYXNlIDE6YTYoZSksd2IoZSksVW0oZSk7YnJlYWs7Y2FzZSAzOndiKGUpLHJsZShlKX1icmVhaztjYXNlIDM6c3dpdGNoKHQuZyl7Y2FzZSAyOndiKGUpLGE2KGUpLFVtKGUpO2JyZWFrO2Nhc2UgMTp3YihlKSxhNihlKSx3YihlKSxVbShlKTticmVhaztjYXNlIDQ6d2IoZSkscmxlKGUpfX1yZXR1cm4gZX1mdW5jdGlvbiBHVShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7aWYoRGUoZS5FaCgpLDE2Nyk/KEdVKGwoZS5FaCgpLDE2NyksdCksdC5hKz0iID4gIik6dC5hKz0iUm9vdCAiLG49ZS5EaCgpLnpiLHZuKG4uc3Vic3RyKDAsMyksIkVsayIpP2hpKHQsKFhuKDMsbi5sZW5ndGgrMSksbi5zdWJzdHIoMykpKTp0LmErPSIiK24sYT1lLmpoKCksYSl7aGkoKHQuYSs9IiAiLHQpLGEpO3JldHVybn1pZihEZShlLDM2NikmJihFPWwoZSwxMzUpLmEsRSkpe2hpKCh0LmErPSIgIix0KSxFKTtyZXR1cm59Zm9yKGY9bmV3IG9yKGUua2goKSk7Zi5lIT1mLmkuZ2MoKTspaWYobz1sKGdyKGYpLDEzNSksRT1vLmEsRSl7aGkoKHQuYSs9IiAiLHQpLEUpO3JldHVybn1pZihEZShlLDMyNikmJihyPWwoZSw3NCksIXIuYiYmKHIuYj1uZXcgTG4oX3Isciw0LDcpKSxyLmIuaSE9MCYmKCFyLmMmJihyLmM9bmV3IExuKF9yLHIsNSw4KSksci5jLmkhPTApKSl7Zm9yKHQuYSs9IiAoIixnPW5ldyBxOCgoIXIuYiYmKHIuYj1uZXcgTG4oX3Isciw0LDcpKSxyLmIpKTtnLmUhPWcuaS5nYygpOylnLmU+MCYmKHQuYSs9Q28pLEdVKGwoZ3IoZyksMTY3KSx0KTtmb3IodC5hKz1QaGUsdz1uZXcgcTgoKCFyLmMmJihyLmM9bmV3IExuKF9yLHIsNSw4KSksci5jKSk7dy5lIT13LmkuZ2MoKTspdy5lPjAmJih0LmErPUNvKSxHVShsKGdyKHcpLDE2NyksdCk7dC5hKz0iKSJ9fWZ1bmN0aW9uIGhEbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztmb3Iodz1uZXcgb3IoKCFlLmEmJihlLmE9bmV3IG50KEFpLGUsMTAsMTEpKSxlLmEpKTt3LmUhPXcuaS5nYygpOylmb3IoZz1sKGdyKHcpLDI3KSxhPW5ldyBocihkcihjcChnKS5hLktjKCksbmV3IGopKTtqcihhKTspe2lmKHI9bCh4cihhKSw3NCksIXIuYiYmKHIuYj1uZXcgTG4oX3Isciw0LDcpKSwhKHIuYi5pPD0xJiYoIXIuYyYmKHIuYz1uZXcgTG4oX3Isciw1LDgpKSxyLmMuaTw9MSkpKXRocm93IHVlKG5ldyBJOCgiR3JhcGggbXVzdCBub3QgY29udGFpbiBoeXBlcmVkZ2VzLiIpKTtpZighcUEocikmJmchPWJjKGwoT2UoKCFyLmMmJihyLmM9bmV3IExuKF9yLHIsNSw4KSksci5jKSwwKSw4NCkpKWZvcihFPW5ldyBqcnQscGMoRSxyKSxydChFLChiYigpLEh4KSxyKSxBaWUoRSxsKGhjKHpvKG4uZixnKSksMTUzKSksazgoRSxsKGNyKG4sYmMobChPZSgoIXIuYyYmKHIuYz1uZXcgTG4oX3Isciw1LDgpKSxyLmMpLDApLDg0KSkpLDE1MykpLHZ0KHQuYyxFKSxmPW5ldyBvcigoIXIubiYmKHIubj1uZXcgbnQoZWMsciwxLDcpKSxyLm4pKTtmLmUhPWYuaS5nYygpOylvPWwoZ3IoZiksMTM1KSxDPW5ldyB6Y3QoRSxvLmEpLHBjKEMsbykscnQoQyxIeCxvKSxDLmUuYT1iLk1hdGgubWF4KG8uZywxKSxDLmUuYj1iLk1hdGgubWF4KG8uZiwxKSxBa2UoQyksdnQodC5kLEMpfX1mdW5jdGlvbiBmRG4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCO3N3aXRjaChuLlVnKCJOb2RlIHByb21vdGlvbiBoZXVyaXN0aWMiLDEpLGUuaT10LGUucj1sKFEodCwoTnQoKSx6YikpLDI0MyksZS5yIT0oTmYoKSx2MykmJmUuciE9eDQ/akRuKGUpOmhTbihlKSxDPWwoUShlLmksSE1lKSwxNykuYSxvPW5ldyBoZCxlLnIuZyl7Y2FzZSAyOmNhc2UgMTpRRShlLG8pO2JyZWFrO2Nhc2UgMzpmb3IoZS5yPUxXLFFFKGUsbyksdz0wLGc9bmV3IEcoZS5iKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksMTcpLHc9Yi5NYXRoLm1heCh3LGYuYSk7dz5lLmsmJihlLnI9QUIsUUUoZSxvKSk7YnJlYWs7Y2FzZSA0OmZvcihlLnI9TFcsUUUoZSxvKSxFPTAsYT1uZXcgRyhlLmMpO2EuYTxhLmMuYy5sZW5ndGg7KXI9R2UocmUoYSkpLEU9Yi5NYXRoLm1heChFLChucihyKSxyKSk7RT5lLm4mJihlLnI9TEIsUUUoZSxvKSk7YnJlYWs7Y2FzZSA2OkI9dWEoYi5NYXRoLmNlaWwoZS5nLmxlbmd0aCpDLzEwMCkpLFFFKGUsbmV3IGFZZShCKSk7YnJlYWs7Y2FzZSA1Okw9dWEoYi5NYXRoLmNlaWwoZS5lKkMvMTAwKSksUUUoZSxuZXcgb1llKEwpKTticmVhaztjYXNlIDg6eHd0KGUsITApO2JyZWFrO2Nhc2UgOTp4d3QoZSwhMSk7YnJlYWs7ZGVmYXVsdDpRRShlLG8pfWUuciE9djMmJmUuciE9eDQ/UENuKGUsdCk6dF9uKGUsdCksbi5WZygpfWZ1bmN0aW9uIGREbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKEw9ZS5iLEM9bmV3IFVhKEwsMCksYnkoQyxuZXcgeXUoZSkpLFRlPSExLGY9MTtDLmI8Qy5kLmdjKCk7KXtmb3IoRT0obXIoQy5iPEMuZC5nYygpKSxsKEMuZC5YYihDLmM9Qy5iKyspLDMwKSksSj0oU24oZixMLmMubGVuZ3RoKSxsKEwuY1tmXSwzMCkpLHRlPV93KEUuYSksZmU9dGUuYy5sZW5ndGgsVj1uZXcgRyh0ZSk7Vi5hPFYuYy5jLmxlbmd0aDspQj1sKHJlKFYpLDEwKSxWYShCLEopO2lmKFRlKXtmb3Ioej1sZih0ZSkuS2MoKTt6Lk9iKCk7KWZvcihCPWwoei5QYigpLDEwKSxvPW5ldyBHKF93KGthKEIpKSk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDE4KSxVdyhhLCEwKSxydChlLChmdCgpLHlCKSwoSG4oKSwhMCkpLHI9YnZ0KGUsYSxmZSksbj1sKFEoQixjMyksMzEzKSxNZT1sKGp0KHIsci5jLmxlbmd0aC0xKSwxOCksbi5rPU1lLmMuaSxuLm49TWUsbi5iPWEuZC5pLG4uYz1hO1RlPSExfWVsc2UgdGUuYy5sZW5ndGghPTAmJih0PShTbigwLHRlLmMubGVuZ3RoKSxsKHRlLmNbMF0sMTApKSx0Lms9PShabigpLEsxKSYmKFRlPSEwLGY9LTEpKTsrK2Z9Zm9yKGc9bmV3IFVhKGUuYiwwKTtnLmI8Zy5kLmdjKCk7KXc9KG1yKGcuYjxnLmQuZ2MoKSksbChnLmQuWGIoZy5jPWcuYisrKSwzMCkpLHcuYS5jLmxlbmd0aD09MCYmcGgoZyl9ZnVuY3Rpb24gZ0RuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZTtmb3IoTD1uZXcgemtlKGUpLGcybihMLCEodD09KEpzKCksd2YpfHx0PT1RMSkpLEM9TC5hLEI9bmV3IEE4LGE9KHQxKCksaGUobGUoczQsMSksaXQsMjM3LDAsW0djLCR1LEtjXSkpLGY9MCx3PWEubGVuZ3RoO2Y8dzsrK2Ypbj1hW2ZdLEU9ZWFlKEMsR2MsbiksRSYmKEIuZD1iLk1hdGgubWF4KEIuZCxFLmpmKCkpKTtmb3Iocj1oZShsZShzNCwxKSxpdCwyMzcsMCxbR2MsJHUsS2NdKSxvPTAsZz1yLmxlbmd0aDtvPGc7KytvKW49cltvXSxFPWVhZShDLEtjLG4pLEUmJihCLmE9Yi5NYXRoLm1heChCLmEsRS5qZigpKSk7Zm9yKEo9aGUobGUoczQsMSksaXQsMjM3LDAsW0djLCR1LEtjXSksZmU9MCxNZT1KLmxlbmd0aDtmZTxNZTsrK2ZlKXo9SltmZV0sRT1lYWUoQyx6LEdjKSxFJiYoQi5iPWIuTWF0aC5tYXgoQi5iLEUua2YoKSkpO2ZvcihWPWhlKGxlKHM0LDEpLGl0LDIzNywwLFtHYywkdSxLY10pLHRlPTAsVGU9Vi5sZW5ndGg7dGU8VGU7Kyt0ZSl6PVZbdGVdLEU9ZWFlKEMseixLYyksRSYmKEIuYz1iLk1hdGgubWF4KEIuYyxFLmtmKCkpKTtyZXR1cm4gQi5kPjAmJihCLmQrPUMubi5kLEIuZCs9Qy5kKSxCLmE+MCYmKEIuYSs9Qy5uLmEsQi5hKz1DLmQpLEIuYj4wJiYoQi5iKz1DLm4uYixCLmIrPUMuZCksQi5jPjAmJihCLmMrPUMubi5jLEIuYys9Qy5kKSxCfWZ1bmN0aW9uIGp2dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2ZvcihCPW4uZCxMPW4uYyxvPW5ldyBsdChuLmYuYStuLmQuYituLmQuYyxuLmYuYituLmQuZCtuLmQuYSksZj1vLmIsRT1uZXcgRyhlLmEpO0UuYTxFLmMuYy5sZW5ndGg7KWlmKGc9bChyZShFKSwxMCksZy5rPT0oWm4oKSxVcykpe3N3aXRjaChyPWwoUShnLChmdCgpLFdjKSksNjQpLGE9bChRKGcsJExlKSw4KSxDPWcubixyLmcpe2Nhc2UgMjpDLmE9bi5mLmErQi5jLUwuYTticmVhaztjYXNlIDQ6Qy5hPS1MLmEtQi5ifXN3aXRjaChWPTAsci5nKXtjYXNlIDI6Y2FzZSA0OnQ9PShSYSgpLFRnKT8oej16ZShHZShRKGcsbDMpKSksQy5iPW8uYip6LWwoUShnLChOdCgpLHAzKSksOCkuYixWPUMuYithLmIsRFYoZywhMSwhMCkpOnQ9PU11JiYoQy5iPXplKEdlKFEoZyxsMykpKS1sKFEoZywoTnQoKSxwMykpLDgpLmIsVj1DLmIrYS5iLERWKGcsITEsITApKX1mPWIuTWF0aC5tYXgoZixWKX1mb3Iobi5mLmIrPWYtby5iLHc9bmV3IEcoZS5hKTt3LmE8dy5jLmMubGVuZ3RoOylpZihnPWwocmUodyksMTApLGcuaz09KFpuKCksVXMpKXN3aXRjaChyPWwoUShnLChmdCgpLFdjKSksNjQpLEM9Zy5uLHIuZyl7Y2FzZSAxOkMuYj0tTC5iLUIuZDticmVhaztjYXNlIDM6Qy5iPW4uZi5iK0IuYS1MLmJ9fWZ1bmN0aW9uIHBEbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmU7aWYoQz1sKGwoJGkoZS5yLHQpLDIxKSw4NyksQy5nYygpPD0yfHx0PT0oQ3QoKSxhcil8fHQ9PShDdCgpLGVyKSl7c3d0KGUsdCk7cmV0dXJufWZvcihKPWUudS5IYygoUmwoKSxhOSkpLG49dD09KEN0KCksUW4pPyhQdygpLGlCKTooUHcoKSxyQiksZmU9dD09UW4/KG9sKCksdzApOihvbCgpLGExKSxyPWkzZSh5NGUobiksZS5zKSx0ZT10PT1Rbj9nczppYSxFPUMuS2MoKTtFLk9iKCk7KWc9bChFLlBiKCksMTE3KSwhKCFnLmN8fGcuYy5kLmMubGVuZ3RoPD0wKSYmKFY9Zy5iLk1mKCksej1nLmUsTD1nLmMsQj1MLmksQi5iPShvPUwubixMLmUuYStvLmIrby5jKSxCLmE9KGY9TC5uLEwuZS5iK2YuZCtmLmEpLEo/KEIuYz16LmEtKGE9TC5uLEwuZS5hK2EuYithLmMpLWUucyxKPSExKTpCLmM9ei5hK1YuYStlLnMsVU8oZmUseUVlKSxMLmY9ZmUsWjAoTCwoQmwoKSx2MCkpLHZ0KHIuZCxuZXcgRGFlKEIsaDhlKHIsQikpKSx0ZT10PT1Rbj9iLk1hdGgubWluKHRlLHouYik6Yi5NYXRoLm1heCh0ZSx6LmIrZy5iLk1mKCkuYikpO2Zvcih0ZSs9dD09UW4/LWUudDplLnQsTThlKChyLmU9dGUscikpLHc9Qy5LYygpO3cuT2IoKTspZz1sKHcuUGIoKSwxMTcpLCEoIWcuY3x8Zy5jLmQuYy5sZW5ndGg8PTApJiYoQj1nLmMuaSxCLmMtPWcuZS5hLEIuZC09Zy5lLmIpfWZ1bmN0aW9uICR2dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKGE9bmV3IGJ0LEo9bmV3IEcodC5hKTtKLmE8Si5jLmMubGVuZ3RoOylpZihWPWwocmUoSiksMTApLHo9Vi5lLHomJihyPSR2dChlLHosVikscmEoYSxyKSxMTW4oZSx6LFYpLGwoUSh6LChmdCgpLEx1KSksMjEpLkhjKChIbygpLHZmKSkpKWZvcihUZT1sKFEoViwoTnQoKSxNcykpLDEwMSksQj1sKFEoVix2NCksMTgxKS5IYygoUmwoKSx2cCkpLGZlPW5ldyBHKFYuaik7ZmUuYTxmZS5jLmMubGVuZ3RoOylmb3IodGU9bChyZShmZSksMTIpLG89bChjcihlLmIsdGUpLDEwKSxvfHwobz12UCh0ZSxUZSx0ZS5qLC0odGUuZS5jLmxlbmd0aC10ZS5nLmMubGVuZ3RoKSxudWxsLG5ldyBxYSx0ZS5vLGwoUSh6LFJoKSw4OCkseikscnQobyx6aSx0ZSksa2koZS5iLHRlLG8pLHZ0KHouYSxvKSksZj1sKGp0KG8uaiwwKSwxMiksQz1uZXcgRyh0ZS5mKTtDLmE8Qy5jLmMubGVuZ3RoOylFPWwocmUoQyksNzIpLGc9bmV3IFhKZSxnLm8uYT1FLm8uYSxnLm8uYj1FLm8uYix2dChmLmYsZyksQnx8KE1lPXRlLmosTD0wLFdfKGwoUShWLHY0KSwyMSkpJiYoTD1tOWUoRS5uLEUubyx0ZS5vLDAsTWUpKSxUZT09KFJhKCksWjEpfHwoQ3QoKSxKdSkuSGMoTWUpP2cuby5hPUw6Zy5vLmI9TCk7cmV0dXJuIHc9bmV3IGJ0LEFNbihlLHQsbixhLHcpLG4mJktMbihlLHQsbix3KSx3fWZ1bmN0aW9uICRrZShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMO2lmKCFlLmNbdC5jLnBdW3QucF0uZSl7Zm9yKGUuY1t0LmMucF1bdC5wXS5lPSEwLGUuY1t0LmMucF1bdC5wXS5iPTAsZS5jW3QuYy5wXVt0LnBdLmQ9MCxlLmNbdC5jLnBdW3QucF0uYT1udWxsLEM9bmV3IEcodC5qKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3IoRT1sKHJlKEMpLDEyKSxMPW4/bmV3IFQ1KEUpOm5ldyBDOChFKSx3PUwuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTIpLGY9Zy5pLGYuYz09dC5jP2YhPXQmJigka2UoZSxmLG4pLGUuY1t0LmMucF1bdC5wXS5iKz1lLmNbZi5jLnBdW2YucF0uYixlLmNbdC5jLnBdW3QucF0uZCs9ZS5jW2YuYy5wXVtmLnBdLmQpOihlLmNbdC5jLnBdW3QucF0uZCs9ZS5nW2cucF0sKytlLmNbdC5jLnBdW3QucF0uYik7aWYobz1sKFEodCwoZnQoKSxCTGUpKSwxNSksbylmb3IoYT1vLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDEwKSx0LmM9PXIuYyYmKCRrZShlLHIsbiksZS5jW3QuYy5wXVt0LnBdLmIrPWUuY1tyLmMucF1bci5wXS5iLGUuY1t0LmMucF1bdC5wXS5kKz1lLmNbci5jLnBdW3IucF0uZCk7ZS5jW3QuYy5wXVt0LnBdLmI+MCYmKGUuY1t0LmMucF1bdC5wXS5kKz1KbChlLmksMjQpKk1QKi4wNzAwMDAwMDAyOTgwMjMyMi0uMDM1MDAwMDAwMTQ5MDExNjEsZS5jW3QuYy5wXVt0LnBdLmE9ZS5jW3QuYy5wXVt0LnBdLmQvZS5jW3QuYy5wXVt0LnBdLmIpfX1mdW5jdGlvbiBiRG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2ZvcihWPW5ldyBHKGUpO1YuYTxWLmMuYy5sZW5ndGg7KXtmb3Ioej1sKHJlKFYpLDEwKSxZcCh6Lm4pLFlwKHoubyksQTZlKHouZiksWmJ0KHopLFBTbih6KSx0ZT1uZXcgRyh6LmopO3RlLmE8dGUuYy5jLmxlbmd0aDspe2ZvcihKPWwocmUodGUpLDEyKSxZcChKLm4pLFlwKEouYSksWXAoSi5vKSxsYShKLElkdChKLmopKSxvPWwoUShKLChOdCgpLGsyKSksMTcpLG8mJnJ0KEosazIscHQoLW8uYSkpLGE9bmV3IEcoSi5nKTthLmE8YS5jLmMubGVuZ3RoOyl7Zm9yKHI9bChyZShhKSwxOCksbj1ScihyLmEsMCk7bi5iIT1uLmQuYzspdD1sKEJyKG4pLDgpLFlwKHQpO2lmKHc9bChRKHIsY2MpLDc1KSx3KWZvcihnPVJyKHcsMCk7Zy5iIT1nLmQuYzspZj1sKEJyKGcpLDgpLFlwKGYpO2ZvcihMPW5ldyBHKHIuYik7TC5hPEwuYy5jLmxlbmd0aDspRT1sKHJlKEwpLDcyKSxZcChFLm4pLFlwKEUubyl9Zm9yKEI9bmV3IEcoSi5mKTtCLmE8Qi5jLmMubGVuZ3RoOylFPWwocmUoQiksNzIpLFlwKEUubiksWXAoRS5vKX1mb3Ioei5rPT0oWm4oKSxVcykmJihydCh6LChmdCgpLFdjKSxJZHQobChRKHosV2MpLDY0KSkpLFZDbih6KSksQz1uZXcgRyh6LmIpO0MuYTxDLmMuYy5sZW5ndGg7KUU9bChyZShDKSw3MiksWmJ0KEUpLFlwKEUubyksWXAoRS5uKX19ZnVuY3Rpb24gbURuKGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbixqbix1cjtCbj1jcihlLmUsciksQm49PW51bGwmJihCbj1uZXcgTTgsej1sKEJuLDE5MCksVGU9dCsiX3MiLE1lPVRlK2EsQj1uZXcgeXkoTWUpLGUxKHosUGQsQikpLGFuPWwoQm4sMTkwKSxKOChuLGFuKSx1cj1uZXcgTTgsTm0odXIsIngiLHIuaiksTm0odXIsInkiLHIuayksZTEoYW4sdjR0LHVyKSxTdD1uZXcgTTgsTm0oU3QsIngiLHIuYiksTm0oU3QsInkiLHIuYyksZTEoYW4sImVuZFBvaW50IixTdCksTD1aSSgoIXIuYSYmKHIuYT1uZXcgWXMocWgsciw1KSksci5hKSksVj0hTCxWJiYob3Q9bmV3ICRwLG89bmV3IFpYZShvdCksdG8oKCFyLmEmJihyLmE9bmV3IFlzKHFoLHIsNSkpLHIuYSksbyksZTEoYW4sJEcsb3QpKSx3PWF1ZShyKSwkZT0hIXcsJGUmJnF4ZShlLmEsYW4sZ1NlLGp1ZShlLGF1ZShyKSkpLGZlPW91ZShyKSxaZT0hIWZlLFplJiZxeGUoZS5hLGFuLGRTZSxqdWUoZSxvdWUocikpKSxFPSghci5lJiYoci5lPW5ldyBMbihjcyxyLDEwLDkpKSxyLmUpLmk9PTAsSj0hRSxKJiYoY249bmV3ICRwLGY9bmV3IF90dChlLGNuKSx0bygoIXIuZSYmKHIuZT1uZXcgTG4oY3MsciwxMCw5KSksci5lKSxmKSxlMShhbixiU2UsY24pKSxDPSghci5nJiYoci5nPW5ldyBMbihjcyxyLDksMTApKSxyLmcpLmk9PTAsdGU9IUMsdGUmJihqbj1uZXcgJHAsZz1uZXcgQXR0KGUsam4pLHRvKCghci5nJiYoci5nPW5ldyBMbihjcyxyLDksMTApKSxyLmcpLGcpLGUxKGFuLHBTZSxqbikpfWZ1bmN0aW9uIHZEbihlKXtweSgpO3ZhciB0LG4scixhLG8sZixnO2ZvcihyPWUuZi5uLGY9YjVlKGUucikuYS5uYygpO2YuT2IoKTspe2lmKG89bChmLlBiKCksMTE3KSxhPTAsby5iLnBmKChwaSgpLHJoKSkmJihhPXplKEdlKG8uYi5vZihyaCkpKSxhPDApKXN3aXRjaChvLmIuYWcoKS5nKXtjYXNlIDE6ci5kPWIuTWF0aC5tYXgoci5kLC1hKTticmVhaztjYXNlIDM6ci5hPWIuTWF0aC5tYXgoci5hLC1hKTticmVhaztjYXNlIDI6ci5jPWIuTWF0aC5tYXgoci5jLC1hKTticmVhaztjYXNlIDQ6ci5iPWIuTWF0aC5tYXgoci5iLC1hKX1pZihXXyhlLnUpKXN3aXRjaCh0PUUzbihvLmIsYSksZz0hbChlLmUub2YoVWIpLDE4MSkuSGMoKFpsKCksc0YpKSxuPSExLG8uYi5hZygpLmcpe2Nhc2UgMTpuPXQ+ci5kLHIuZD1iLk1hdGgubWF4KHIuZCx0KSxnJiZuJiYoci5kPWIuTWF0aC5tYXgoci5kLHIuYSksci5hPXIuZCthKTticmVhaztjYXNlIDM6bj10PnIuYSxyLmE9Yi5NYXRoLm1heChyLmEsdCksZyYmbiYmKHIuYT1iLk1hdGgubWF4KHIuYSxyLmQpLHIuZD1yLmErYSk7YnJlYWs7Y2FzZSAyOm49dD5yLmMsci5jPWIuTWF0aC5tYXgoci5jLHQpLGcmJm4mJihyLmM9Yi5NYXRoLm1heChyLmIsci5jKSxyLmI9ci5jK2EpO2JyZWFrO2Nhc2UgNDpuPXQ+ci5iLHIuYj1iLk1hdGgubWF4KHIuYix0KSxnJiZuJiYoci5iPWIuTWF0aC5tYXgoci5iLHIuYyksci5jPXIuYithKX19fWZ1bmN0aW9uIHp2dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQztyZXR1cm4gRT0iIix0Lmxlbmd0aD09MD9lLm5lKGlFZSxSbGUsLTEsLTEpOihDPSR5KHQpLHZuKEMuc3Vic3RyKDAsMyksImF0ICIpJiYoQz0oWG4oMyxDLmxlbmd0aCsxKSxDLnN1YnN0cigzKSkpLEM9Qy5yZXBsYWNlKC9cWy4qP1xdL2csIiIpLGY9Qy5pbmRleE9mKCIoIiksZj09LTE/KGY9Qy5pbmRleE9mKCJAIiksZj09LTE/KEU9QyxDPSIiKTooRT0keSgoWG4oZisxLEMubGVuZ3RoKzEpLEMuc3Vic3RyKGYrMSkpKSxDPSR5KChHYSgwLGYsQy5sZW5ndGgpLEMuc3Vic3RyKDAsZikpKSkpOihuPUMuaW5kZXhPZigiKSIsZiksRT0oR2EoZisxLG4sQy5sZW5ndGgpLEMuc3Vic3RyKGYrMSxuLShmKzEpKSksQz0keSgoR2EoMCxmLEMubGVuZ3RoKSxDLnN1YnN0cigwLGYpKSkpLGY9cGQoQyxjbCg0NikpLGYhPS0xJiYoQz0oWG4oZisxLEMubGVuZ3RoKzEpLEMuc3Vic3RyKGYrMSkpKSwoQy5sZW5ndGg9PTB8fHZuKEMsIkFub255bW91cyBmdW5jdGlvbiIpKSYmKEM9UmxlKSxnPVJxKEUsY2woNTgpKSxhPWg0ZShFLGNsKDU4KSxnLTEpLHc9LTEscj0tMSxvPWlFZSxnIT0tMSYmYSE9LTEmJihvPShHYSgwLGEsRS5sZW5ndGgpLEUuc3Vic3RyKDAsYSkpLHc9aXJ0KChHYShhKzEsZyxFLmxlbmd0aCksRS5zdWJzdHIoYSsxLGctKGErMSkpKSkscj1pcnQoKFhuKGcrMSxFLmxlbmd0aCsxKSxFLnN1YnN0cihnKzEpKSkpLGUubmUobyxDLHcscikpfWZ1bmN0aW9uIHdEbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMO2ZvcihFPW5ldyBHKGUpO0UuYTxFLmMuYy5sZW5ndGg7KXtzd2l0Y2godz1sKHJlKEUpLDEwKSxmPWwoUSh3LChOdCgpLFF1KSksMTcxKSxvPW51bGwsZi5nKXtjYXNlIDE6Y2FzZSAyOm89KFZtKCksUDYpO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6bz0oVm0oKSxGVCl9aWYobylydCh3LChmdCgpLHNXKSwoVm0oKSxQNikpLG89PUZUP0RVKHcsZiwocW8oKSwkbCkpOm89PVA2JiZEVSh3LGYsKHFvKCksenUpKTtlbHNlIGlmKFA1KGwoUSh3LE1zKSwxMDEpKSYmdy5qLmMubGVuZ3RoIT0wKXtmb3IodD0hMCxMPW5ldyBHKHcuaik7TC5hPEwuYy5jLmxlbmd0aDspe2lmKEM9bChyZShMKSwxMiksIShDLmo9PShDdCgpLGFyKSYmQy5lLmMubGVuZ3RoLUMuZy5jLmxlbmd0aD4wfHxDLmo9PWVyJiZDLmUuYy5sZW5ndGgtQy5nLmMubGVuZ3RoPDApKXt0PSExO2JyZWFrfWZvcihhPW5ldyBHKEMuZyk7YS5hPGEuYy5jLmxlbmd0aDspaWYobj1sKHJlKGEpLDE4KSxnPWwoUShuLmQuaSxRdSksMTcxKSxnPT0oaGYoKSxYTCl8fGc9PWQ0KXt0PSExO2JyZWFrfWZvcihyPW5ldyBHKEMuZSk7ci5hPHIuYy5jLmxlbmd0aDspaWYobj1sKHJlKHIpLDE4KSxnPWwoUShuLmMuaSxRdSksMTcxKSxnPT0oaGYoKSxZTCl8fGc9PSRiKXt0PSExO2JyZWFrfX10JiZEVSh3LGYsKHFvKCksc00pKX19fWZ1bmN0aW9uIHlEbihlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3Q7Zm9yKG90PTAsej0wLEw9bmV3IEcodC5lKTtMLmE8TC5jLmMubGVuZ3RoOyl7Zm9yKEM9bChyZShMKSwxMCksQj0wLGc9MCx3PW4/bChRKEMsSVcpLDE3KS5hOmxvLGZlPXI/bChRKEMsT1cpLDE3KS5hOmxvLEU9Yi5NYXRoLm1heCh3LGZlKSxNZT1uZXcgRyhDLmopO01lLmE8TWUuYy5jLmxlbmd0aDspe2lmKFRlPWwocmUoTWUpLDEyKSwkZT1DLm4uYitUZS5uLmIrVGUuYS5iLHIpZm9yKGY9bmV3IEcoVGUuZyk7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDE4KSxKPW8uZCxWPUouaSx0IT1lLmFbVi5wXSYmKHRlPWIuTWF0aC5tYXgobChRKFYsSVcpLDE3KS5hLGwoUShWLE9XKSwxNykuYSksWmU9bChRKG8sKE50KCksSngpKSwxNykuYSxaZT49RSYmWmU+PXRlJiYoQis9Vi5uLmIrSi5uLmIrSi5hLmItJGUsKytnKSk7aWYobilmb3IoZj1uZXcgRyhUZS5lKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTgpLEo9by5jLFY9Si5pLHQhPWUuYVtWLnBdJiYodGU9Yi5NYXRoLm1heChsKFEoVixJVyksMTcpLmEsbChRKFYsT1cpLDE3KS5hKSxaZT1sKFEobywoTnQoKSxKeCkpLDE3KS5hLFplPj1FJiZaZT49dGUmJihCKz1WLm4uYitKLm4uYitKLmEuYi0kZSwrK2cpKX1nPjAmJihvdCs9Qi9nLCsreil9ej4wPyh0LmE9YSpvdC96LHQuZz16KToodC5hPTAsdC5nPTApfWZ1bmN0aW9uIHhEbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3Q7Zm9yKG89ZS5mLmIsQj1vLmEsQz1vLmIsVj1lLmUuZyx6PWUuZS5mLEY1KGUuZSxvLmEsby5iKSxvdD1CL1YsU3Q9Qy96LEU9bmV3IG9yKEVIKGUuZSkpO0UuZSE9RS5pLmdjKCk7KXc9bChncihFKSwxMzUpLFV1KHcsdy5pKm90KSxHdSh3LHcuaipTdCk7Zm9yKFRlPW5ldyBvcihYYWUoZS5lKSk7VGUuZSE9VGUuaS5nYygpOylmZT1sKGdyKFRlKSwxMjMpLCRlPWZlLmksWmU9ZmUuaiwkZT4wJiZVdShmZSwkZSpvdCksWmU+MCYmR3UoZmUsWmUqU3QpO2ZvcihtQShlLmIsbmV3IHpnKSx0PW5ldyBidCxnPW5ldyBxbShuZXcgU3IoZS5jKS5hKTtnLmI7KWY9TncoZykscj1sKGYubGQoKSw3NCksbj1sKGYubWQoKSw0MDcpLmEsYT1sNihyLCExLCExKSxMPU5ndChjZyhyKSxRTihhKSxuKSxkUChMLGEpLE1lPUtndChyKSxNZSYmZ2ModCxNZSwwKT09LTEmJigkbih0LmMsTWUpLGthdChNZSwobXIoTC5iIT0wKSxsKEwuYS5hLmMsOCkpLG4pKTtmb3IodGU9bmV3IHFtKG5ldyBTcihlLmQpLmEpO3RlLmI7KUo9TncodGUpLHI9bChKLmxkKCksNzQpLG49bChKLm1kKCksNDA3KS5hLGE9bDYociwhMSwhMSksTD1OZ3QoRWIociksQU4oUU4oYSkpLG4pLEw9QU4oTCksZFAoTCxhKSxNZT1XZ3QociksTWUmJmdjKHQsTWUsMCk9PS0xJiYoJG4odC5jLE1lKSxrYXQoTWUsKG1yKEwuYiE9MCksbChMLmMuYi5jLDgpKSxuKSl9ZnVuY3Rpb24gcXZ0KGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7cmV0dXJuIGc9bmV3IHprZSh0KSxmQ24oZyxyKSxhPSEwLGUmJmUucGYoKHBpKCkseHYpKSYmKG89bChlLm9mKChwaSgpLHh2KSksODgpLGE9bz09KEpzKCksSjEpfHxvPT11Y3x8bz09dmMpLHpidChnLCExKSxWdShnLmUuUmYoKSxuZXcgdjRlKGcsITEsYSkpLHVvZShnLGcuZiwodDEoKSxHYyksKEN0KCksUW4pKSx1b2UoZyxnLmYsS2MsRHIpLHVvZShnLGcuZyxHYyxlciksdW9lKGcsZy5nLEtjLGFyKSxiZHQoZyxRbiksYmR0KGcsRHIpLHdhdChnLGFyKSx3YXQoZyxlcikscHkoKSxmPWcuQS5IYygobWgoKSxBNCkpJiZnLkIuSGMoKFpsKCksYUYpKT9OMXQoZyk6bnVsbCxmJiZ4dW4oZy5hLGYpLHZEbihnKSx3N24oZykseTduKGcpLFVNbihnKSx3X24oZyksRzduKGcpLEpjZShnLFFuKSxKY2UoZyxEciksWFNuKGcpLHdMbihnKSxuJiYoZTVuKGcpLEs3bihnKSxKY2UoZyxhciksSmNlKGcsZXIpLHc9Zy5CLkhjKChabCgpLEZNKSksT3B0KGcsdyxRbiksT3B0KGcsdyxEciksTnB0KGcsdyxhciksTnB0KGcsdyxlciksSXMobmV3IGJuKG51bGwsbmV3IGtuKG5ldyBnaShnLmkpLDApKSxuZXcgRmMpLElzKEZpKG5ldyBibihudWxsLGI1ZShnLnIpLmEub2MoKSksbmV3IHhhKSxuZXcgQmEpLG94bihnKSxnLmUuUGYoZy5vKSxJcyhuZXcgYm4obnVsbCxiNWUoZy5yKS5hLm9jKCkpLG5ldyBnYSkpLGcub31mdW5jdGlvbiBrRG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKO2ZvcihFPWdzLHI9bmV3IEcoZS5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KXQ9bChyZShyKSw4NiksRT1iLk1hdGgubWluKEUsdC5kLmYuZy5jK3QuZS5hKTtmb3Ioej1uZXcgb3MsZj1uZXcgRyhlLmEuYSk7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDE5NCksby5pPUUsby5lPT0wJiZDcyh6LG8sei5jLmIsei5jKTtmb3IoO3ouYiE9MDspe2ZvcihvPWwoei5iPT0wP251bGw6KG1yKHouYiE9MCksYWYoeix6LmEuYSkpLDE5NCksYT1vLmYuZy5jLEI9by5hLmEuZWMoKS5LYygpO0IuT2IoKTspQz1sKEIuUGIoKSw4NiksSj1vLmkrQy5lLmEsQy5kLmd8fEMuZy5jPEo/Qy5vPUo6Qy5vPUMuZy5jO2ZvcihhLT1vLmYubyxvLmIrPWEsZS5jPT0oSnMoKSx2Yyl8fGUuYz09UTE/by5jKz1hOm8uYy09YSxMPW8uYS5hLmVjKCkuS2MoKTtMLk9iKCk7KWZvcihDPWwoTC5QYigpLDg2KSx3PUMuZi5LYygpO3cuT2IoKTspZz1sKHcuUGIoKSw4NiksVWcoZS5jKT9WPWUuZi55ZihDLGcpOlY9ZS5mLnpmKEMsZyksZy5kLmk9Yi5NYXRoLm1heChnLmQuaSxDLm8rQy5nLmIrVi1nLmUuYSksZy5rfHwoZy5kLmk9Yi5NYXRoLm1heChnLmQuaSxnLmcuYy1nLmUuYSkpLC0tZy5kLmUsZy5kLmU9PTAmJnVpKHosZy5kKX1mb3Iobj1uZXcgRyhlLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDg2KSx0LmcuYz10Lm99ZnVuY3Rpb24gRURuKGUpe3ZhciB0LG4scixhLG8sZixnLHc7c3dpdGNoKGc9ZS5iLHQ9ZS5hLGwoUShlLChkVSgpLEFfZSkpLDQzNSkuZyl7Y2FzZSAwOlZzKGcsbmV3IFZ0KG5ldyBacikpO2JyZWFrO2Nhc2UgMTpkZWZhdWx0OlZzKGcsbmV3IFZ0KG5ldyBaaSkpfXN3aXRjaChsKFEoZSxTX2UpLDQzNikuZyl7Y2FzZSAxOlZzKGcsbmV3IHduKSxWcyhnLG5ldyBudSksVnMoZyxuZXcgb2QpO2JyZWFrO2Nhc2UgMDpkZWZhdWx0OlZzKGcsbmV3IHduKSxWcyhnLG5ldyAkZyl9c3dpdGNoKGwoUShlLE1fZSksMjU3KS5nKXtjYXNlIDA6dz1uZXcgJDA7YnJlYWs7Y2FzZSAxOnc9bmV3IFloO2JyZWFrO2Nhc2UgMjp3PW5ldyB3MTticmVhaztjYXNlIDM6dz1uZXcgRGw7YnJlYWs7Y2FzZSA1Onc9bmV3IEU1KG5ldyB3MSk7YnJlYWs7Y2FzZSA0Onc9bmV3IEU1KG5ldyBZaCk7YnJlYWs7Y2FzZSA3Onc9bmV3IEwzZShuZXcgRTUobmV3IFloKSxuZXcgRTUobmV3IHcxKSk7YnJlYWs7Y2FzZSA4Onc9bmV3IEwzZShuZXcgRTUobmV3IERsKSxuZXcgRTUobmV3IHcxKSk7YnJlYWs7Y2FzZSA2OmRlZmF1bHQ6dz1uZXcgRTUobmV3IERsKX1mb3IoZj1uZXcgRyhnKTtmLmE8Zi5jLmMubGVuZ3RoOyl7Zm9yKG89bChyZShmKSwxNzYpLHI9MCxhPTAsbj1uZXcgY2EocHQocikscHQoYSkpO2lBbih0LG8scixhKTspbj1sKHcuVmUobixvKSw0Mikscj1sKG4uYSwxNykuYSxhPWwobi5iLDE3KS5hO2Vfbih0LG8scixhKX19ZnVuY3Rpb24gSHZ0KGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdDtmb3Iobi5VZyhteXQsMSksQj0oUWkoKSxQZGUpLGUuYT09KGtBKCksalcpJiYoQj1uSWUpLEM9MCxDbigpLHQuamQobmV3IE5pZShCKSksbz10LmdjKCksZz10LmZkKHQuZ2MoKSksRT0hMDtFJiZnLlNiKCk7KVRlPWwoZy5VYigpLDQwKSxsKFEoVGUsQiksMTcpLmE9PTA/LS1vOkU9ITE7aWYob3Q9dC5rZCgwLG8pLGY9bmV3IGRhZShvdCksb3Q9dC5rZChvLHQuZ2MoKSksdz1uZXcgZGFlKG90KSxmLmI9PTApZm9yKEo9UnIodywwKTtKLmIhPUouZC5jOylWPWwoQnIoSiksNDApLHJ0KFYscE0scHQoQysrKSk7ZWxzZSBmb3IoTD1mLmIsWmU9UnIoZiwwKTtaZS5iIT1aZS5kLmM7KXtmb3IoJGU9bChCcihaZSksNDApLHJ0KCRlLHBNLHB0KEMrKykpLHI9cGNlKCRlKSxIdnQoZSxyLG4uZWgoMS9MfDApKSwkbShyLF81ZShuZXcgTmllKHBNKSkpLHo9bmV3IG9zLE1lPVJyKHIsMCk7TWUuYiE9TWUuZC5jOylmb3IoVGU9bChCcihNZSksNDApLGZlPVJyKCRlLmQsMCk7ZmUuYiE9ZmUuZC5jOyl0ZT1sKEJyKGZlKSw2NSksdGUuYz09VGUmJkNzKHosdGUsei5jLmIsei5jKTtmb3IoQ2goJGUuZCksS2EoJGUuZCx6KSxnPVJyKHcsdy5iKSxhPSRlLmQuYixFPSEwOzA8YSYmRSYmZy5TYigpOylUZT1sKGcuVWIoKSw0MCksbChRKFRlLEIpLDE3KS5hPT0wPyhydChUZSxwTSxwdChDKyspKSwtLWEsZy5RYigpKTpFPSExfW4uVmcoKX1mdW5jdGlvbiBURG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHo7Zm9yKEw9emUoR2UoYXQoZSwoU2IoKSxlZ2UpKSkpLFJ0KEJ0KGF0KGUsRkllKSkpJiYoQz1sKGF0KGUsKEg1KCksWTYpKSwyNyksbz1sKE9lKEE1ZShsKE9lKCghQy5lJiYoQy5lPW5ldyBMbihqcyxDLDcsNCkpLEMuZSksKCFDLmUmJihDLmU9bmV3IExuKGpzLEMsNyw0KSksQy5lKS5pLTEpLDc0KSksMCksMjcpLHI9bChPZShBNWUobChPZSgoIUMuZSYmKEMuZT1uZXcgTG4oanMsQyw3LDQpKSxDLmUpLDApLDc0KSksMCksMjcpLGY9bmV3IGx0KG8uaStvLmcvMixvLmorby5mLzIpLGE9bmV3IGx0KHIuaStyLmcvMixyLmorci5mLzIpLG49TCxuPD0wJiYobis9aXYpLEI9Yi5NYXRoLmFjb3MoKGYuYSphLmErZi5iKmEuYikvKGIuTWF0aC5zcXJ0KGYuYSpmLmErZi5iKmYuYikqYi5NYXRoLnNxcnQoYS5hKmEuYSthLmIqYS5iKSkpLEI8PTAmJihCKz1pdiksdD1iLk1hdGguYXRhbjIoZi5iLGYuYSksdDw9MCYmKHQrPWl2KSxMPWxDZS0odC1uK0IvMikpLHc9bmV3IG9yKCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSk7dy5lIT13LmkuZ2MoKTspZz1sKGdyKHcpLDI3KSxFPW5ldyBsdChnLmkrZy5nLzIsZy5qK2cuZi8yKSx6PUUuYSpiLk1hdGguY29zKEwpLUUuYipiLk1hdGguc2luKEwpLEUuYj1FLmEqYi5NYXRoLnNpbihMKStFLmIqYi5NYXRoLmNvcyhMKSxFLmE9eixRaChnLEUuYS1nLmcvMixFLmItZy5mLzIpfWZ1bmN0aW9uIENEbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKHQuVWcoIkludmVydGVkIHBvcnQgcHJlcHJvY2Vzc2luZyIsMSksQz1lLmIsRT1uZXcgVWEoQywwKSxuPW51bGwsTWU9bmV3IGJ0O0UuYjxFLmQuZ2MoKTspe2ZvcihUZT1uLG49KG1yKEUuYjxFLmQuZ2MoKSksbChFLmQuWGIoRS5jPUUuYisrKSwzMCkpLHo9bmV3IEcoTWUpO3ouYTx6LmMuYy5sZW5ndGg7KUw9bChyZSh6KSwxMCksVmEoTCxUZSk7Zm9yKE1lLmMubGVuZ3RoPTAsVj1uZXcgRyhuLmEpO1YuYTxWLmMuYy5sZW5ndGg7KWlmKEw9bChyZShWKSwxMCksTC5rPT0oWm4oKSxQcykmJlA1KGwoUShMLChOdCgpLE1zKSksMTAxKSkpe2ZvcihmZT1ya2UoTCwocW8oKSwkbCksKEN0KCksYXIpKS5LYygpO2ZlLk9iKCk7KWZvcihKPWwoZmUuUGIoKSwxMiksdz1KLmUsZz1sKGoxKHcsV2UodTFlLEJoZSwxOCx3LmMubGVuZ3RoLDAsMSkpLDQ4MyksYT1nLG89MCxmPWEubGVuZ3RoO288ZjsrK28pcj1hW29dLFdBbihlLEoscixNZSk7Zm9yKHRlPXJrZShMLHp1LGVyKS5LYygpO3RlLk9iKCk7KWZvcihKPWwodGUuUGIoKSwxMiksdz1KLmcsZz1sKGoxKHcsV2UodTFlLEJoZSwxOCx3LmMubGVuZ3RoLDAsMSkpLDQ4MyksYT1nLG89MCxmPWEubGVuZ3RoO288ZjsrK28pcj1hW29dLEtBbihlLEoscixNZSl9fWZvcihCPW5ldyBHKE1lKTtCLmE8Qi5jLmMubGVuZ3RoOylMPWwocmUoQiksMTApLFZhKEwsbik7dC5WZygpfWZ1bmN0aW9uIEFsZShlLHQsbixyLGEsbyxmKXt2YXIgZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKEI9bnVsbCxyPT0oU3coKSxIYik/Qj10OnI9PUs2JiYoQj1uKSxKPUIuYS5lYygpLktjKCk7Si5PYigpOyl7Zm9yKFY9bChKLlBiKCksMTIpLHRlPUljKGhlKGxlKEVhLDEpLGR0LDgsMCxbVi5pLm4sVi5uLFYuYV0pKS5iLE1lPW5ldyBLcyxnPW5ldyBLcyxFPW5ldyBOMShWLmIpO0xjKEUuYSl8fExjKEUuYik7KWlmKHc9bChMYyhFLmEpP3JlKEUuYSk6cmUoRS5iKSwxOCksUnQoQnQoUSh3LChmdCgpLFcxKSkpKT09YSYmZ2Mobyx3LDApIT0tMSl7aWYody5kPT1WP2ZlPXcuYzpmZT13LmQsVGU9SWMoaGUobGUoRWEsMSksZHQsOCwwLFtmZS5pLm4sZmUubixmZS5hXSkpLmIsYi5NYXRoLmFicyhUZS10ZSk8LjIpY29udGludWU7VGU8dGU/dC5hLl9iKGZlKT9uYShNZSxuZXcgY2EoSGIsdykpOm5hKE1lLG5ldyBjYShLNix3KSk6dC5hLl9iKGZlKT9uYShnLG5ldyBjYShIYix3KSk6bmEoZyxuZXcgY2EoSzYsdykpfWlmKE1lLmEuZ2MoKT4xKWZvcih6PW5ldyBJa2UoVixNZSxyKSx0byhNZSxuZXcgSmV0KGUseikpLCRuKGYuYyx6KSxMPU1lLmEuZWMoKS5LYygpO0wuT2IoKTspQz1sKEwuUGIoKSw0MiksYWwobyxDLmIpO2lmKGcuYS5nYygpPjEpZm9yKHo9bmV3IElrZShWLGcsciksdG8oZyxuZXcgWmV0KGUseikpLCRuKGYuYyx6KSxMPWcuYS5lYygpLktjKCk7TC5PYigpOylDPWwoTC5QYigpLDQyKSxhbChvLEMuYil9fWZ1bmN0aW9uIFNEbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmU7aWYoSj1lLm4sdGU9ZS5vLEI9ZS5kLEw9emUoR2UoUHkoZSwoTnQoKSxvZGUpKSkpLHQpe2ZvcihDPUwqKHQuZ2MoKS0xKSx6PTAsdz10LktjKCk7dy5PYigpOylmPWwody5QYigpLDEwKSxDKz1mLm8uYSx6PWIuTWF0aC5tYXgoeixmLm8uYik7Zm9yKGZlPUouYS0oQy10ZS5hKS8yLG89Si5iLUIuZCt6LHI9dGUuYS8odC5nYygpKzEpLGE9cixnPXQuS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMTApLGYubi5hPWZlLGYubi5iPW8tZi5vLmIsZmUrPWYuby5hK0wsRT1RMnQoZiksRS5uLmE9Zi5vLmEvMi1FLmEuYSxFLm4uYj1mLm8uYixWPWwoUShmLChmdCgpLHJXKSksMTIpLFYuZS5jLmxlbmd0aCtWLmcuYy5sZW5ndGg9PTEmJihWLm4uYT1hLVYuYS5hLFYubi5iPTAsTWMoVixlKSksYSs9cn1pZihuKXtmb3IoQz1MKihuLmdjKCktMSksej0wLHc9bi5LYygpO3cuT2IoKTspZj1sKHcuUGIoKSwxMCksQys9Zi5vLmEsej1iLk1hdGgubWF4KHosZi5vLmIpO2ZvcihmZT1KLmEtKEMtdGUuYSkvMixvPUouYit0ZS5iK0IuYS16LHI9dGUuYS8obi5nYygpKzEpLGE9cixnPW4uS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMTApLGYubi5hPWZlLGYubi5iPW8sZmUrPWYuby5hK0wsRT1RMnQoZiksRS5uLmE9Zi5vLmEvMi1FLmEuYSxFLm4uYj0wLFY9bChRKGYsKGZ0KCksclcpKSwxMiksVi5lLmMubGVuZ3RoK1YuZy5jLmxlbmd0aD09MSYmKFYubi5hPWEtVi5hLmEsVi5uLmI9dGUuYixNYyhWLGUpKSxhKz1yfX1mdW5jdGlvbiBfRG4oZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYobChRKHQsKGZ0KCksTHUpKSwyMSkuSGMoKEhvKCksdmYpKSl7Zm9yKGc9bmV3IEcodC5hKTtnLmE8Zy5jLmMubGVuZ3RoOylvPWwocmUoZyksMTApLG8uaz09KFpuKCksUHMpJiYoYT1sKFEobywoTnQoKSx2VykpLDE0MCksZS5jPWIuTWF0aC5taW4oZS5jLG8ubi5hLWEuYiksZS5hPWIuTWF0aC5tYXgoZS5hLG8ubi5hK28uby5hK2EuYyksZS5kPWIuTWF0aC5taW4oZS5kLG8ubi5iLWEuZCksZS5iPWIuTWF0aC5tYXgoZS5iLG8ubi5iK28uby5iK2EuYSkpO2ZvcihmPW5ldyBHKHQuYSk7Zi5hPGYuYy5jLmxlbmd0aDspaWYobz1sKHJlKGYpLDEwKSxvLmshPShabigpLFBzKSlzd2l0Y2goby5rLmcpe2Nhc2UgMjppZihyPWwoUShvLChOdCgpLFF1KSksMTcxKSxyPT0oaGYoKSwkYikpe28ubi5hPWUuYy0xMCxuZ3QobyxuZXcgYmopLkpiKG5ldyBRV2UobykpO2JyZWFrfWlmKHI9PWQ0KXtvLm4uYT1lLmErMTAsbmd0KG8sbmV3IHZaKS5KYihuZXcgSldlKG8pKTticmVha31pZihuPWwoUShvLGh2KSwzMTEpLG49PShlcCgpLEY2KSl7ZHZ0KG8pLkpiKG5ldyBaV2UobykpLG8ubi5iPWUuZC0xMDticmVha31pZihuPT1VeCl7ZHZ0KG8pLkpiKG5ldyBlWWUobykpLG8ubi5iPWUuYisxMDticmVha31icmVhaztkZWZhdWx0OnRocm93IHVlKG5ldyBZbigiVGhlIG5vZGUgdHlwZSAiK28uaysiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlICIra09uKSl9fX1mdW5jdGlvbiBBRG4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2Zvcih3PW5ldyBsdChyLmkrci5nLzIsci5qK3IuZi8yKSx6PWx2dChyKSxWPWwoYXQodCwoTnQoKSxNcykpLDEwMSksdGU9bChhdChyLFZUKSw2NCksTXR0KGZkdChyKSxtNCl8fChyLmk9PTAmJnIuaj09MD9KPTA6Sj1xeG4ocix0ZSksSGkocixtNCxKKSksRT1uZXcgbHQodC5nLHQuZiksYT12UChyLFYsdGUseixFLHcsbmV3IGx0KHIuZyxyLmYpLGwoUShuLFJoKSw4OCksbikscnQoYSwoZnQoKSx6aSksciksbz1sKGp0KGEuaiwwKSwxMiksbShvLEdfbihyKSkscnQoYSx2NCwoUmwoKSx1bihZYikpKSxMPWwoYXQodCx2NCksMTgxKS5IYyh2cCksZz1uZXcgb3IoKCFyLm4mJihyLm49bmV3IG50KGVjLHIsMSw3KSksci5uKSk7Zy5lIT1nLmkuZ2MoKTspaWYoZj1sKGdyKGcpLDEzNSksIVJ0KEJ0KGF0KGYsbXYpKSkmJmYuYSYmKEI9T2NlKGYpLHZ0KG8uZixCKSwhTCkpc3dpdGNoKEM9MCxXXyhsKGF0KHQsdjQpLDIxKSkmJihDPW05ZShuZXcgbHQoZi5pLGYuaiksbmV3IGx0KGYuZyxmLmYpLG5ldyBsdChyLmcsci5mKSwwLHRlKSksdGUuZyl7Y2FzZSAyOmNhc2UgNDpCLm8uYT1DO2JyZWFrO2Nhc2UgMTpjYXNlIDM6Qi5vLmI9Q31ydChhLEdULEdlKGF0KGRzKHQpLEdUKSkpLHJ0KGEsS1QsR2UoYXQoZHModCksS1QpKSkscnQoYSx5NCxHZShhdChkcyh0KSx5NCkpKSx2dChuLmEsYSksa2koZS5hLHIsYSl9ZnVuY3Rpb24gTERuKGUsdCxuLHIsYSxvKXt2YXIgZixnLHcsRSxDLEw7Zm9yKEU9bmV3IGd1LHBjKEUsdCksbGEoRSxsKGF0KHQsKE50KCksVlQpKSw2NCkpLHJ0KEUsKGZ0KCksemkpLHQpLE1jKEUsbiksTD1FLm8sTC5hPXQuZyxMLmI9dC5mLEM9RS5uLEMuYT10LmksQy5iPXQuaixraShlLmEsdCxFKSxmPVc1KGZjKERjKG5ldyBibihudWxsLCghdC5lJiYodC5lPW5ldyBMbihqcyx0LDcsNCkpLG5ldyBrbih0LmUsMTYpKSksbmV3IGxqKSxuZXcgUTcpLG5ldyBxV2UodCkpLGZ8fChmPVc1KGZjKERjKG5ldyBibihudWxsLCghdC5kJiYodC5kPW5ldyBMbihqcyx0LDgsNSkpLG5ldyBrbih0LmQsMTYpKSksbmV3IEg5KSxuZXcgdVMpLG5ldyBIV2UodCkpKSxmfHwoZj1XNShuZXcgYm4obnVsbCwoIXQuZSYmKHQuZT1uZXcgTG4oanMsdCw3LDQpKSxuZXcga24odC5lLDE2KSkpLG5ldyBHSikpLHJ0KEUseEIsKEhuKCksISFmKSksWUxuKEUsbyxhLGwoYXQodCxwMyksOCkpLHc9bmV3IG9yKCghdC5uJiYodC5uPW5ldyBudChlYyx0LDEsNykpLHQubikpO3cuZSE9dy5pLmdjKCk7KWc9bChncih3KSwxMzUpLCFSdChCdChhdChnLG12KSkpJiZnLmEmJnZ0KEUuZixPY2UoZykpO3N3aXRjaChhLmcpe2Nhc2UgMjpjYXNlIDE6KEUuaj09KEN0KCksUW4pfHxFLmo9PURyKSYmci5GYygoSG8oKSxCNikpO2JyZWFrO2Nhc2UgNDpjYXNlIDM6KEUuaj09KEN0KCksYXIpfHxFLmo9PWVyKSYmci5GYygoSG8oKSxCNikpfXJldHVybiBFfWZ1bmN0aW9uIE1EbihlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm47Zm9yKE1lPTAsVj0wLHo9MCxCPTEsVGU9bmV3IG9yKCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSk7VGUuZSE9VGUuaS5nYygpOyl0ZT1sKGdyKFRlKSwyNyksQis9WGcobmV3IGhyKGRyKGNwKHRlKS5hLktjKCksbmV3IGopKSksY249dGUuZyxWPWIuTWF0aC5tYXgoVixjbiksTD10ZS5mLHo9Yi5NYXRoLm1heCh6LEwpLE1lKz1jbipMO2ZvcihKPSghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKS5pLGY9TWUrMipyKnIqQipKLG89Yi5NYXRoLnNxcnQoZiksdz1iLk1hdGgubWF4KG8qbixWKSxnPWIuTWF0aC5tYXgoby9uLHopLGZlPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpO2ZlLmUhPWZlLmkuZ2MoKTspdGU9bChncihmZSksMjcpLGFuPWEuYisoSmwodCwyNikqaUwrSmwodCwyNykqc0wpKih3LXRlLmcpLEJuPWEuYisoSmwodCwyNikqaUwrSmwodCwyNykqc0wpKihnLXRlLmYpLFV1KHRlLGFuKSxHdSh0ZSxCbik7Zm9yKFN0PXcrKGEuYithLmMpLG90PWcrKGEuZCthLmEpLFplPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpO1plLmUhPVplLmkuZ2MoKTspZm9yKCRlPWwoZ3IoWmUpLDI3KSxDPW5ldyBocihkcihjcCgkZSkuYS5LYygpLG5ldyBqKSk7anIoQyk7KUU9bCh4cihDKSw3NCkscUEoRSl8fFBJbihFLHQsU3Qsb3QpO1N0Kz1hLmIrYS5jLG90Kz1hLmQrYS5hLEd3KGUsU3Qsb3QsITEsITApfWZ1bmN0aW9uIHprZShlKXt2YXIgdDtpZih0aGlzLnI9dXBuKG5ldyBTYSxuZXcgUG8pLHRoaXMuYj1uZXcgTEEobChYcihPbyksMjk3KSksdGhpcy5wPW5ldyBMQShsKFhyKE9vKSwyOTcpKSx0aGlzLmk9bmV3IExBKGwoWHIodzd0KSwyOTcpKSx0aGlzLmU9ZSx0aGlzLm89bmV3IEVvKGUuTWYoKSksdGhpcy5EPWUuWWYoKXx8UnQoQnQoZS5vZigocGkoKSxLQikpKSksdGhpcy5BPWwoZS5vZigocGkoKSxrdikpLDIxKSx0aGlzLkI9bChlLm9mKFViKSwyMSksdGhpcy5xPWwoZS5vZihfTSksMTAxKSx0aGlzLnU9bChlLm9mKFM0KSwyMSksIVF4bih0aGlzLnUpKXRocm93IHVlKG5ldyBWcCgiSW52YWxpZCBwb3J0IGxhYmVsIHBsYWNlbWVudDogIit0aGlzLnUpKTtpZih0aGlzLnY9UnQoQnQoZS5vZihDTmUpKSksdGhpcy5qPWwoZS5vZihyNyksMjEpLCFTVG4odGhpcy5qKSl0aHJvdyB1ZShuZXcgVnAoIkludmFsaWQgbm9kZSBsYWJlbCBwbGFjZW1lbnQ6ICIrdGhpcy5qKSk7dGhpcy5uPWwoQkEoZSxmTmUpLDEwNyksdGhpcy5rPXplKEdlKEJBKGUsaVkpKSksdGhpcy5kPXplKEdlKEJBKGUsTU5lKSkpLHRoaXMudz16ZShHZShCQShlLFBOZSkpKSx0aGlzLnM9emUoR2UoQkEoZSxETmUpKSksdGhpcy50PXplKEdlKEJBKGUsSU5lKSkpLHRoaXMuQz1sKEJBKGUsT05lKSwxNDApLHRoaXMuYz0yKnRoaXMuZCx0PSF0aGlzLkIuSGMoKFpsKCksc0YpKSx0aGlzLmY9bmV3IERBKDAsdCwwKSx0aGlzLmc9bmV3IERBKDEsdCwwKSxYaWUodGhpcy5mLCh0MSgpLCR1KSx0aGlzLmcpfWZ1bmN0aW9uIEREbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmU7Zm9yKHQuVWcoIkNvbW1lbnQgcHJlLXByb2Nlc3NpbmciLDEpLG49MCx3PW5ldyBHKGUuYSk7dy5hPHcuYy5jLmxlbmd0aDspaWYoZz1sKHJlKHcpLDEwKSxSdChCdChRKGcsKE50KCksUUwpKSkpKXtmb3IoKytuLGE9MCxyPW51bGwsRT1udWxsLFY9bmV3IEcoZy5qKTtWLmE8Vi5jLmMubGVuZ3RoOylCPWwocmUoViksMTIpLGErPUIuZS5jLmxlbmd0aCtCLmcuYy5sZW5ndGgsQi5lLmMubGVuZ3RoPT0xJiYocj1sKGp0KEIuZSwwKSwxOCksRT1yLmMpLEIuZy5jLmxlbmd0aD09MSYmKHI9bChqdChCLmcsMCksMTgpLEU9ci5kKTtpZihhPT0xJiZFLmUuYy5sZW5ndGgrRS5nLmMubGVuZ3RoPT0xJiYhUnQoQnQoUShFLmksUUwpKSkpdUluKGcscixFLEUuaSksUV8odyk7ZWxzZXtmb3IoZmU9bmV3IGJ0LHo9bmV3IEcoZy5qKTt6LmE8ei5jLmMubGVuZ3RoOyl7Zm9yKEI9bChyZSh6KSwxMiksTD1uZXcgRyhCLmcpO0wuYTxMLmMuYy5sZW5ndGg7KUM9bChyZShMKSwxOCksQy5kLmcuYy5sZW5ndGg9PTB8fCRuKGZlLmMsQyk7Zm9yKGY9bmV3IEcoQi5lKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTgpLG8uYy5lLmMubGVuZ3RoPT0wfHwkbihmZS5jLG8pfWZvcih0ZT1uZXcgRyhmZSk7dGUuYTx0ZS5jLmMubGVuZ3RoOylKPWwocmUodGUpLDE4KSxVdyhKLCEwKX19dC5fZygpJiZ0LmJoKCJGb3VuZCAiK24rIiBjb21tZW50IGJveGVzIiksdC5WZygpfWZ1bmN0aW9uIHFrZShlLHQpe0JpdCgpO3ZhciBuLHIsYSxvLGYsZyx3O2lmKHRoaXMuYT1uZXcgdnllKHRoaXMpLHRoaXMuYj1lLHRoaXMuYz10LHRoaXMuZj0kYWUoaWMoKEVsKCksaW8pLHQpKSx0aGlzLmYuZGMoKSlpZigoZz15eGUoaW8sZSkpPT10KWZvcih0aGlzLmU9ITAsdGhpcy5kPW5ldyBidCx0aGlzLmY9bmV3IEUkLHRoaXMuZi5GYyhjdiksbChWVShsTihpbyxBaChlKSksIiIpLDI5KT09ZSYmdGhpcy5mLkZjKEtfKGlvLEFoKGUpKSksYT1hbGUoaW8sZSkuS2MoKTthLk9iKCk7KXN3aXRjaChyPWwoYS5QYigpLDE3OSksa3coaWMoaW8scikpKXtjYXNlIDQ6e3RoaXMuZC5GYyhyKTticmVha31jYXNlIDU6e3RoaXMuZi5HYygkYWUoaWMoaW8scikpKTticmVha319ZWxzZSBpZihGbygpLGwodCw2OSkueGsoKSlmb3IodGhpcy5lPSEwLHRoaXMuZj1udWxsLHRoaXMuZD1uZXcgYnQsZj0wLHc9KGUuaT09bnVsbCYmU2QoZSksZS5pKS5sZW5ndGg7Zjx3OysrZilmb3Iocj0obj0oZS5pPT1udWxsJiZTZChlKSxlLmkpLGY+PTAmJmY8bi5sZW5ndGg/bltmXTpudWxsKSxvPXJ4KGljKGlvLHIpKTtvO289cngoaWMoaW8sbykpKW89PXQmJnRoaXMuZC5GYyhyKTtlbHNlIGt3KGljKGlvLHQpKT09MSYmZz8odGhpcy5mPW51bGwsdGhpcy5kPShreCgpLG5BdCkpOih0aGlzLmY9bnVsbCx0aGlzLmU9ITAsdGhpcy5kPShDbigpLG5ldyBEYSh0KSkpO2Vsc2UgdGhpcy5lPWt3KGljKGlvLHQpKT09NSx0aGlzLmYuRmIoc3BlKSYmKHRoaXMuZj1zcGUpfWZ1bmN0aW9uIFZ2dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2ZvcihuPTAscj11N24oZSx0KSxCPWUucyx6PWUudCxFPWwobCgkaShlLnIsdCksMjEpLDg3KS5LYygpO0UuT2IoKTspaWYodz1sKEUuUGIoKSwxMTcpLCEoIXcuY3x8dy5jLmQuYy5sZW5ndGg8PTApKXtzd2l0Y2goVj13LmIuTWYoKSxnPXcuYi5wZigocGkoKSxyaCkpP3plKEdlKHcuYi5vZihyaCkpKTowLEM9dy5jLEw9Qy5pLEwuYj0oZj1DLm4sQy5lLmErZi5iK2YuYyksTC5hPShvPUMubixDLmUuYitvLmQrby5hKSx0Lmcpe2Nhc2UgMTpMLmM9dy5hPyhWLmEtTC5iKS8yOlYuYStCLEwuZD1WLmIrZytyLFowKEMsKEJsKCksQmIpKSx2ZChDLChvbCgpLGExKSk7YnJlYWs7Y2FzZSAzOkwuYz13LmE/KFYuYS1MLmIpLzI6Vi5hK0IsTC5kPS1nLXItTC5hLFowKEMsKEJsKCksQmIpKSx2ZChDLChvbCgpLHcwKSk7YnJlYWs7Y2FzZSAyOkwuYz0tZy1yLUwuYix3LmE/KGE9ZS52P0wuYTpsKGp0KEMuZCwwKSwxODcpLk1mKCkuYixMLmQ9KFYuYi1hKS8yKTpMLmQ9Vi5iK3osWjAoQywoQmwoKSx2MCkpLHZkKEMsKG9sKCksRmIpKTticmVhaztjYXNlIDQ6TC5jPVYuYStnK3Isdy5hPyhhPWUudj9MLmE6bChqdChDLmQsMCksMTg3KS5NZigpLmIsTC5kPShWLmItYSkvMik6TC5kPVYuYit6LFowKEMsKEJsKCksRmQpKSx2ZChDLChvbCgpLEZiKSl9KHQ9PShDdCgpLFFuKXx8dD09RHIpJiYobj1iLk1hdGgubWF4KG4sTC5hKSl9bj4wJiYobChRbyhlLmIsdCksMTI3KS5hLmI9bil9ZnVuY3Rpb24gSURuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtpZihCPXplKEdlKFEoZSwoTnQoKSxHVCkpKSksej16ZShHZShRKGUsS1QpKSksTD16ZShHZShRKGUseTQpKSksZz1lLm8sbz1sKGp0KGUuaiwwKSwxMiksZj1vLm4sSj1ZOW4obyxMKSwhIUope2lmKHQuSGMoKFJsKCksdnApKSlzd2l0Y2gobChRKGUsKGZ0KCksV2MpKSw2NCkuZyl7Y2FzZSAxOkouYz0oZy5hLUouYikvMi1mLmEsSi5kPXo7YnJlYWs7Y2FzZSAzOkouYz0oZy5hLUouYikvMi1mLmEsSi5kPS16LUouYTticmVhaztjYXNlIDI6biYmby5lLmMubGVuZ3RoPT0wJiZvLmcuYy5sZW5ndGg9PTA/KEM9cj9KLmE6bChqdChvLmYsMCksNzIpLm8uYixKLmQ9KGcuYi1DKS8yLWYuYik6Si5kPWcuYit6LWYuYixKLmM9LUItSi5iO2JyZWFrO2Nhc2UgNDpuJiZvLmUuYy5sZW5ndGg9PTAmJm8uZy5jLmxlbmd0aD09MD8oQz1yP0ouYTpsKGp0KG8uZiwwKSw3Mikuby5iLEouZD0oZy5iLUMpLzItZi5iKTpKLmQ9Zy5iK3otZi5iLEouYz1CfWVsc2UgaWYodC5IYyhZYikpc3dpdGNoKGwoUShlLChmdCgpLFdjKSksNjQpLmcpe2Nhc2UgMTpjYXNlIDM6Si5jPWYuYStCO2JyZWFrO2Nhc2UgMjpjYXNlIDQ6biYmIW8uYz8oQz1yP0ouYTpsKGp0KG8uZiwwKSw3Mikuby5iLEouZD0oZy5iLUMpLzItZi5iKTpKLmQ9Zi5iK3p9Zm9yKGE9Si5kLEU9bmV3IEcoby5mKTtFLmE8RS5jLmMubGVuZ3RoOyl3PWwocmUoRSksNzIpLFY9dy5uLFYuYT1KLmMsVi5iPWEsYSs9dy5vLmIrTH19ZnVuY3Rpb24gT0RuKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbixqbjtmb3Iob3Q9bmV3IGJ0LFY9bmV3IEcoZS5iKTtWLmE8Vi5jLmMubGVuZ3RoOylmb3Ioej1sKHJlKFYpLDMwKSxmZT1uZXcgRyh6LmEpO2ZlLmE8ZmUuYy5jLmxlbmd0aDspaWYoSj1sKHJlKGZlKSwxMCksSi5rPT0oWm4oKSxVcykmJm5zKEosKGZ0KCksYVcpKSl7Zm9yKFRlPW51bGwsJGU9bnVsbCxNZT1udWxsLGFuPW5ldyBHKEouaik7YW4uYTxhbi5jLmMubGVuZ3RoOylzd2l0Y2goY249bChyZShhbiksMTIpLGNuLmouZyl7Y2FzZSA0OlRlPWNuO2JyZWFrO2Nhc2UgMjokZT1jbjticmVhaztkZWZhdWx0Ok1lPWNufWZvcihaZT1sKGp0KE1lLmcsMCksMTgpLEM9bmV3IEd6KFplLmEpLEU9bmV3IEVvKE1lLm4pLE9pKEUsSi5uKSxMPVJyKEMsMCksek8oTCxFKSxTdD1BTihaZS5hKSxCPW5ldyBFbyhNZS5uKSxPaShCLEoubiksQ3MoU3QsQixTdC5jLmIsU3QuYyksQm49bChRKEosYVcpLDEwKSxqbj1sKGp0KEJuLmosMCksMTIpLHc9bChqMShUZS5lLFdlKHUxZSxCaGUsMTgsMCwwLDEpKSw0ODMpLHI9dyxvPTAsZz1yLmxlbmd0aDtvPGc7KytvKXQ9cltvXSxGYSh0LGpuKSxBY2UodC5hLHQuYS5iLEMpO2Zvcih3PWtkKCRlLmcpLG49dyxhPTAsZj1uLmxlbmd0aDthPGY7KythKXQ9blthXSxwbyh0LGpuKSxBY2UodC5hLDAsU3QpO3BvKFplLG51bGwpLEZhKFplLG51bGwpLCRuKG90LmMsSil9Zm9yKHRlPW5ldyBHKG90KTt0ZS5hPHRlLmMuYy5sZW5ndGg7KUo9bChyZSh0ZSksMTApLFZhKEosbnVsbCl9ZnVuY3Rpb24gTkRuKCl7d2koZ0YsbmV3IHhyZSksd2koQVksbmV3IEgkKSx3aShwRixuZXcgUnJlKSx3aShWUGUsbmV3IFgkKSx3aSh6dCxuZXcgUzEpLHdpKGxlKEFsLDEpLG5ldyBRJCksd2koTnMsbmV3IGhrKSx3aShqeCxuZXcgRkkpLHdpKHp0LG5ldyBxUyksd2koenQsbmV3IG1yZSksd2koenQsbmV3IHZyZSksd2kodGEsbmV3IHA4KSx3aSh6dCxuZXcgUiQpLHdpKG1mLG5ldyBqJCksd2kobWYsbmV3IHdyZSksd2koenQsbmV3ICQkKSx3aShfVCxuZXcgeiQpLHdpKHp0LG5ldyBOSSksd2koenQsbmV3IEhTKSx3aSh6dCxuZXcga3JlKSx3aSh6dCxuZXcgRXJlKSx3aSh6dCxuZXcgVHJlKSx3aShsZShBbCwxKSxuZXcgQ3JlKSx3aSh6dCxuZXcgU3JlKSx3aSh6dCxuZXcgcSQpLHdpKG1mLG5ldyBfcmUpLHdpKG1mLG5ldyBBcmUpLHdpKHp0LG5ldyBMcmUpLHdpKHJvLG5ldyBNcmUpLHdpKHp0LG5ldyBEcmUpLHdpKHIzLG5ldyBWUyksd2koenQsbmV3IElyZSksd2koenQsbmV3IE9yZSksd2koenQsbmV3IE5yZSksd2koenQsbmV3IFByZSksd2kobWYsbmV3IEJyZSksd2kobWYsbmV3IEZyZSksd2koenQsbmV3IFYkKSx3aSh6dCxuZXcgVSQpLHdpKHp0LG5ldyBqcmUpLHdpKHp0LG5ldyBQSSksd2koenQsbmV3ICRyZSksd2koenQsbmV3IEckKSx3aShpMyxuZXcgenJlKSx3aSh6dCxuZXcgSyQpLHdpKHp0LG5ldyBxcmUpLHdpKHp0LG5ldyBXJCksd2koaTMsbmV3IFkkKSx3aShyMyxuZXcgQkkpLHdpKHp0LG5ldyB3NSksd2kocm8sbmV3IFVTKX1mdW5jdGlvbiBVdnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtzd2l0Y2goQz1uZXcgYmwsZS5hLmcpe2Nhc2UgMzpCPWwoUSh0LmUsKGZ0KCksZnYpKSwxNSksej1sKFEodC5qLGZ2KSwxNSksVj1sKFEodC5mLGZ2KSwxNSksbj1sKFEodC5lLHo2KSwxNSkscj1sKFEodC5qLHo2KSwxNSksYT1sKFEodC5mLHo2KSwxNSksZj1uZXcgYnQscmEoZixCKSx6LkpjKG5ldyBQZWUpLHJhKGYsbGYoeikpLHJhKGYsViksbz1uZXcgYnQscmEobyxuKSxyYShvLGxmKHIpKSxyYShvLGEpLHJ0KHQuZixmdixmKSxydCh0LmYsejYsbykscnQodC5mLEtMZSx0LmYpLHJ0KHQuZSxmdixudWxsKSxydCh0LmUsejYsbnVsbCkscnQodC5qLGZ2LG51bGwpLHJ0KHQuaix6NixudWxsKTticmVhaztjYXNlIDE6S2EoQyx0LmUuYSksdWkoQyx0LmkubiksS2EoQyxsZih0LmouYSkpLHVpKEMsdC5hLm4pLEthKEMsdC5mLmEpO2JyZWFrO2RlZmF1bHQ6S2EoQyx0LmUuYSksS2EoQyxsZih0LmouYSkpLEthKEMsdC5mLmEpfUNoKHQuZi5hKSxLYSh0LmYuYSxDKSxwbyh0LmYsdC5lLmMpLGc9bChRKHQuZSwoTnQoKSxjYykpLDc1KSxFPWwoUSh0LmosY2MpLDc1KSx3PWwoUSh0LmYsY2MpLDc1KSwoZ3x8RXx8dykmJihMPW5ldyBibCxnNWUoTCx3KSxnNWUoTCxFKSxnNWUoTCxnKSxydCh0LmYsY2MsTCkpLHBvKHQuaixudWxsKSxGYSh0LmosbnVsbCkscG8odC5lLG51bGwpLEZhKHQuZSxudWxsKSxWYSh0LmEsbnVsbCksVmEodC5pLG51bGwpLHQuZyYmVXZ0KGUsdC5nKX1mdW5jdGlvbiBHdnQoKXtHdnQ9VTt2YXIgZSx0LG47Zm9yKG5ldyBOTigxLDApLG5ldyBOTigxMCwwKSxuZXcgTk4oMCwwKSx2NnQ9V2UoTDBlLGR0LDI0NywxMSwwLDEpLGx2PVdlKGtmLEFkLDI4LDEwMCwxNSwxKSxvX2U9aGUobGUoTmEsMSksWm8sMjgsMTUsWzEsNSwyNSwxMjUsNjI1LDMxMjUsMTU2MjUsNzgxMjUsMzkwNjI1LDE5NTMxMjUsOTc2NTYyNSw0ODgyODEyNSwyNDQxNDA2MjUsMTIyMDcwMzEyNSw2MTAzNTE1NjI1LDMwNTE3NTc4MTI1LDE1MjU4Nzg5MDYyNSw3NjI5Mzk0NTMxMjUsMzgxNDY5NzI2NTYyNSwxOTA3MzQ4NjMyODEyNSw5NTM2NzQzMTY0MDYyNSw0NzY4MzcxNTgyMDMxMjUsMHg4Nzg2NzgzMjZlYWM5XSksY19lPVdlKFZyLGRpLDI4LG9fZS5sZW5ndGgsMTUsMSksdV9lPWhlKGxlKE5hLDEpLFpvLDI4LDE1LFsxLDEwLDEwMCxiMiwxZTQsb2hlLDFlNiwxZTcsMWU4LEpVLDFlMTAsMWUxMSwxZTEyLDFlMTMsMWUxNCwxZTE1LDFlMTZdKSxsX2U9V2UoVnIsZGksMjgsdV9lLmxlbmd0aCwxNSwxKSxoX2U9V2UoTDBlLGR0LDI0NywxMSwwLDEpLGU9MDtlPGhfZS5sZW5ndGg7ZSsrKXY2dFtlXT1uZXcgTk4oZSwwKSxoX2VbZV09bmV3IE5OKDAsZSksbHZbZV09NDg7Zm9yKDtlPGx2Lmxlbmd0aDtlKyspbHZbZV09NDg7Zm9yKG49MDtuPGNfZS5sZW5ndGg7bisrKWNfZVtuXT1nOWUob19lW25dKTtmb3IodD0wO3Q8bF9lLmxlbmd0aDt0KyspbF9lW3RdPWc5ZSh1X2VbdF0pO0dFKCl9ZnVuY3Rpb24gUERuKCl7ZnVuY3Rpb24gZSgpe3RoaXMub2JqPXRoaXMuY3JlYXRlT2JqZWN0KCl9cmV0dXJuIGUucHJvdG90eXBlLmNyZWF0ZU9iamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9ialt0XX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsbil7dGhpcy5vYmpbdF09bn0sZS5wcm90b3R5cGVbbGhlXT1mdW5jdGlvbih0KXtkZWxldGUgdGhpcy5vYmpbdF19LGUucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5vYmopfSxlLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5rZXlzKCksbj10aGlzLHI9MDtyZXR1cm57bmV4dDpmdW5jdGlvbigpe2lmKHI+PXQubGVuZ3RoKXJldHVybntkb25lOiEwfTt2YXIgYT10W3IrK107cmV0dXJue3ZhbHVlOlthLG4uZ2V0KGEpXSxkb25lOiExfX19fSxMU24oKXx8KGUucHJvdG90eXBlLmNyZWF0ZU9iamVjdD1mdW5jdGlvbigpe3JldHVybnt9fSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub2JqWyI6Iit0XX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsbil7dGhpcy5vYmpbIjoiK3RdPW59LGUucHJvdG90eXBlW2xoZV09ZnVuY3Rpb24odCl7ZGVsZXRlIHRoaXMub2JqWyI6Iit0XX0sZS5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiB0aGlzLm9iailuLmNoYXJDb2RlQXQoMCk9PTU4JiZ0LnB1c2gobi5zdWJzdHJpbmcoMSkpO3JldHVybiB0fSksZX1mdW5jdGlvbiBRaSgpe1FpPVUsZ009bmV3IFVpKE5FZSksbmV3IHZzKCJERVBUSCIscHQoMCkpLFBkZT1uZXcgdnMoIkZBTiIscHQoMCkpLG5JZT1uZXcgdnMoZ3l0LHB0KDApKSxWYj1uZXcgdnMoIlJPT1QiLChIbigpLCExKSksUmRlPW5ldyB2cygiTEVGVE5FSUdIQk9SIixudWxsKSxkVHQ9bmV3IHZzKCJSSUdIVE5FSUdIQk9SIixudWxsKSxCVz1uZXcgdnMoIkxFRlRTSUJMSU5HIixudWxsKSxqZGU9bmV3IHZzKCJSSUdIVFNJQkxJTkciLG51bGwpLE5kZT1uZXcgdnMoIkRVTU1ZIiwhMSksbmV3IHZzKCJMRVZFTCIscHQoMCkpLHNJZT1uZXcgdnMoIlJFTU9WQUJMRV9FREdFUyIsbmV3IG9zKSxQQj1uZXcgdnMoIlhDT09SIixwdCgwKSksQkI9bmV3IHZzKCJZQ09PUiIscHQoMCkpLEZXPW5ldyB2cygiTEVWRUxIRUlHSFQiLDApLGMxPW5ldyB2cygiTEVWRUxNSU4iLDApLGswPW5ldyB2cygiTEVWRUxNQVgiLDApLEJkZT1uZXcgdnMoIkdSQVBIX1hNSU4iLDApLEZkZT1uZXcgdnMoIkdSQVBIX1lNSU4iLDApLHJJZT1uZXcgdnMoIkdSQVBIX1hNQVgiLDApLGlJZT1uZXcgdnMoIkdSQVBIX1lNQVgiLDApLHRJZT1uZXcgdnMoIkNPTVBBQ1RfTEVWRUxfQVNDRU5TSU9OIiwhMSksT2RlPW5ldyB2cygiQ09NUEFDVF9DT05TVFJBSU5UUyIsbmV3IGJ0KSxkTT1uZXcgdnMoIklEIiwiIikscE09bmV3IHZzKCJQT1NJVElPTiIscHQoMCkpLEMyPW5ldyB2cygiUFJFTElNIiwwKSxKVD1uZXcgdnMoIk1PRElGSUVSIiwwKSxRVD1uZXcgVWkoUzN0KSxOQj1uZXcgVWkoXzN0KX1mdW5jdGlvbiBCRG4oZSl7a2tlKCk7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2lmKGU9PW51bGwpcmV0dXJuIG51bGw7aWYoTD1lLmxlbmd0aCo4LEw9PTApcmV0dXJuIiI7Zm9yKGc9TCUyNCx6PUwvMjR8MCxCPWchPTA/eisxOnosbz1udWxsLG89V2Uoa2YsQWQsMjgsQio0LDE1LDEpLEU9MCxDPTAsdD0wLG49MCxyPTAsZj0wLGE9MCx3PTA7dzx6O3crKyl0PWVbYSsrXSxuPWVbYSsrXSxyPWVbYSsrXSxDPShuJjE1KTw8MjQ+PjI0LEU9KHQmMyk8PDI0Pj4yNCxWPXQmLTEyOD8odD4+Ml4xOTIpPDwyND4+MjQ6dD4+Mjw8MjQ+PjI0LEo9biYtMTI4PyhuPj40XjI0MCk8PDI0Pj4yNDpuPj40PDwyND4+MjQsdGU9ciYtMTI4PyhyPj42XjI1Mik8PDI0Pj4yNDpyPj42PDwyND4+MjQsb1tmKytdPU4yW1ZdLG9bZisrXT1OMltKfEU8PDRdLG9bZisrXT1OMltDPDwyfHRlXSxvW2YrK109TjJbciY2M107cmV0dXJuIGc9PTg/KHQ9ZVthXSxFPSh0JjMpPDwyND4+MjQsVj10Ji0xMjg/KHQ+PjJeMTkyKTw8MjQ+PjI0OnQ+PjI8PDI0Pj4yNCxvW2YrK109TjJbVl0sb1tmKytdPU4yW0U8PDRdLG9bZisrXT02MSxvW2YrK109NjEpOmc9PTE2JiYodD1lW2FdLG49ZVthKzFdLEM9KG4mMTUpPDwyND4+MjQsRT0odCYzKTw8MjQ+PjI0LFY9dCYtMTI4Pyh0Pj4yXjE5Mik8PDI0Pj4yNDp0Pj4yPDwyND4+MjQsSj1uJi0xMjg/KG4+PjReMjQwKTw8MjQ+PjI0Om4+PjQ8PDI0Pj4yNCxvW2YrK109TjJbVl0sb1tmKytdPU4yW0p8RTw8NF0sb1tmKytdPU4yW0M8PDJdLG9bZisrXT02MSksSWYobywwLG8ubGVuZ3RoKX1mdW5jdGlvbiBGRG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztpZihlLmU9PTAmJmUucD4wJiYoZS5wPS0oZS5wLTEpKSxlLnA+bG8mJmM2ZSh0LGUucC1MYiksZj10LnEuZ2V0RGF0ZSgpLFlPKHQsMSksZS5rPj0wJiZDMm4odCxlLmspLGUuYz49MD9ZTyh0LGUuYyk6ZS5rPj0wPyh3PW5ldyBSN2UodC5xLmdldEZ1bGxZZWFyKCktTGIsdC5xLmdldE1vbnRoKCksMzUpLHI9MzUtdy5xLmdldERhdGUoKSxZTyh0LGIuTWF0aC5taW4ocixmKSkpOllPKHQsZiksZS5mPDAmJihlLmY9dC5xLmdldEhvdXJzKCkpLGUuYj4wJiZlLmY8MTImJihlLmYrPTEyKSxiaG4odCxlLmY9PTI0JiZlLmc/MDplLmYpLGUuaj49MCYmb3ZuKHQsZS5qKSxlLm4+PTAmJnd2bih0LGUubiksZS5pPj0wJiZRdHQodCxibyhtbyhLTihaYyh0LnEuZ2V0VGltZSgpKSxiMiksYjIpLGUuaSkpLGUuYSYmKGE9bmV3IFF6LGM2ZShhLGEucS5nZXRGdWxsWWVhcigpLUxiLTgwKSxmc2UoWmModC5xLmdldFRpbWUoKSksWmMoYS5xLmdldFRpbWUoKSkpJiZjNmUodCxhLnEuZ2V0RnVsbFllYXIoKS1MYisxMDApKSxlLmQ+PTApe2lmKGUuYz09LTEpbj0oNytlLmQtdC5xLmdldERheSgpKSU3LG4+MyYmKG4tPTcpLGc9dC5xLmdldE1vbnRoKCksWU8odCx0LnEuZ2V0RGF0ZSgpK24pLHQucS5nZXRNb250aCgpIT1nJiZZTyh0LHQucS5nZXREYXRlKCkrKG4+MD8tNzo3KSk7ZWxzZSBpZih0LnEuZ2V0RGF5KCkhPWUuZClyZXR1cm4hMX1yZXR1cm4gZS5vPmxvJiYobz10LnEuZ2V0VGltZXpvbmVPZmZzZXQoKSxRdHQodCxibyhaYyh0LnEuZ2V0VGltZSgpKSwoZS5vLW8pKjYwKmIyKSkpLCEwfWZ1bmN0aW9uIEt2dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGU7aWYoYT1RKHQsKGZ0KCksemkpKSwhIURlKGEsMjA3KSl7Zm9yKFY9bChhLDI3KSxKPXQuZSxCPW5ldyBFbyh0LmMpLG89dC5kLEIuYSs9by5iLEIuYis9by5kLCRlPWwoYXQoViwoTnQoKSx4VykpLDE4MSksdmwoJGUsKFpsKCksdVkpKSYmKHo9bChhdChWLFdNZSksMTA3KSxUaWUoeixvLmEpLG13ZSh6LG8uZCksQ2llKHosby5iKSx4OCh6LG8uYykpLG49bmV3IGJ0LEM9bmV3IEcodC5hKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3Iodz1sKHJlKEMpLDEwKSxEZShRKHcsemkpLDIwNyk/SERuKHcsQik6RGUoUSh3LHppKSwxOTMpJiYhSiYmKHI9bChRKHcsemkpLDEyMyksVGU9Tm10KHQsdyxyLmcsci5mKSxRaChyLFRlLmEsVGUuYikpLGZlPW5ldyBHKHcuaik7ZmUuYTxmZS5jLmMubGVuZ3RoOyl0ZT1sKHJlKGZlKSwxMiksSXMoRmkobmV3IGJuKG51bGwsbmV3IGtuKHRlLmcsMTYpKSxuZXcgVldlKHcpKSxuZXcgVVdlKG4pKTtpZihKKWZvcihmZT1uZXcgRyhKLmopO2ZlLmE8ZmUuYy5jLmxlbmd0aDspdGU9bChyZShmZSksMTIpLElzKEZpKG5ldyBibihudWxsLG5ldyBrbih0ZS5nLDE2KSksbmV3IEdXZShKKSksbmV3IEtXZShuKSk7Zm9yKE1lPWwoYXQoVixicCksMjIzKSxnPW5ldyBHKG4pO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxOCksaURuKGYsTWUsQik7Zm9yKFZfbih0KSxFPW5ldyBHKHQuYSk7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDEwKSxMPXcuZSxMJiZLdnQoZSxMKX19ZnVuY3Rpb24gV3Z0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6O2lmKCFsKGwoJGkoZS5yLHQpLDIxKSw4NykuZGMoKSl7aWYoZj1sKFFvKGUuYix0KSwxMjcpLHc9Zi5pLGc9Zi5uLEM9SnVlKGUsdCkscj13LmItZy5iLWcuYyxhPWYuYS5hLG89dy5jK2cuYix6PWUudywoQz09KHQ2KCksS2IpfHxDPT10RikmJmwobCgkaShlLnIsdCksMjEpLDg3KS5nYygpPT0xJiYoYT1DPT1LYj9hLTIqZS53OmEsQz1JTSkscjxhJiYhZS5CLkhjKChabCgpLGxZKSkpQz09S2I/KHorPShyLWEpLyhsKGwoJGkoZS5yLHQpLDIxKSw4NykuZ2MoKSsxKSxvKz16KTp6Kz0oci1hKS8obChsKCRpKGUucix0KSwyMSksODcpLmdjKCktMSk7ZWxzZSBzd2l0Y2gocjxhJiYoYT1DPT1LYj9hLTIqZS53OmEsQz1JTSksQy5nKXtjYXNlIDM6bys9KHItYSkvMjticmVhaztjYXNlIDQ6bys9ci1hO2JyZWFrO2Nhc2UgMDpuPShyLWEpLyhsKGwoJGkoZS5yLHQpLDIxKSw4NykuZ2MoKSsxKSx6Kz1iLk1hdGgubWF4KDAsbiksbys9ejticmVhaztjYXNlIDE6bj0oci1hKS8obChsKCRpKGUucix0KSwyMSksODcpLmdjKCktMSkseis9Yi5NYXRoLm1heCgwLG4pfWZvcihCPWwobCgkaShlLnIsdCksMjEpLDg3KS5LYygpO0IuT2IoKTspTD1sKEIuUGIoKSwxMTcpLEwuZS5hPW8rTC5kLmIsTC5lLmI9KEU9TC5iLEUucGYoKHBpKCkscmgpKT9FLmFnKCk9PShDdCgpLFFuKT8tRS5NZigpLmItemUoR2UoRS5vZihyaCkpKTp6ZShHZShFLm9mKHJoKSkpOkUuYWcoKT09KEN0KCksUW4pPy1FLk1mKCkuYjowKSxvKz1MLmQuYitMLmIuTWYoKS5hK0wuZC5jK3p9fWZ1bmN0aW9uIFl2dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2lmKCFsKGwoJGkoZS5yLHQpLDIxKSw4NykuZGMoKSl7aWYoZj1sKFFvKGUuYix0KSwxMjcpLHc9Zi5pLGc9Zi5uLEw9SnVlKGUsdCkscj13LmEtZy5kLWcuYSxhPWYuYS5iLG89dy5kK2cuZCxWPWUudyxFPWUuby5hLChMPT0odDYoKSxLYil8fEw9PXRGKSYmbChsKCRpKGUucix0KSwyMSksODcpLmdjKCk9PTEmJihhPUw9PUtiP2EtMiplLnc6YSxMPUlNKSxyPGEmJiFlLkIuSGMoKFpsKCksbFkpKSlMPT1LYj8oVis9KHItYSkvKGwobCgkaShlLnIsdCksMjEpLDg3KS5nYygpKzEpLG8rPVYpOlYrPShyLWEpLyhsKGwoJGkoZS5yLHQpLDIxKSw4NykuZ2MoKS0xKTtlbHNlIHN3aXRjaChyPGEmJihhPUw9PUtiP2EtMiplLnc6YSxMPUlNKSxMLmcpe2Nhc2UgMzpvKz0oci1hKS8yO2JyZWFrO2Nhc2UgNDpvKz1yLWE7YnJlYWs7Y2FzZSAwOm49KHItYSkvKGwobCgkaShlLnIsdCksMjEpLDg3KS5nYygpKzEpLFYrPWIuTWF0aC5tYXgoMCxuKSxvKz1WO2JyZWFrO2Nhc2UgMTpuPShyLWEpLyhsKGwoJGkoZS5yLHQpLDIxKSw4NykuZ2MoKS0xKSxWKz1iLk1hdGgubWF4KDAsbil9Zm9yKHo9bChsKCRpKGUucix0KSwyMSksODcpLktjKCk7ei5PYigpOylCPWwoei5QYigpLDExNyksQi5lLmE9KEM9Qi5iLEMucGYoKHBpKCkscmgpKT9DLmFnKCk9PShDdCgpLGVyKT8tQy5NZigpLmEtemUoR2UoQy5vZihyaCkpKTpFK3plKEdlKEMub2YocmgpKSk6Qy5hZygpPT0oQ3QoKSxlcik/LUMuTWYoKS5hOkUpLEIuZS5iPW8rQi5kLmQsbys9Qi5kLmQrQi5iLk1mKCkuYitCLmQuYStWfX1mdW5jdGlvbiBSRG4oZSx0KXt2YXIgbixyLGEsbyxmO2Zvcih0LlVnKCJQcm9jZXNzb3IgZGV0ZXJtaW5lIHRoZSBjb29yZHMgZm9yIGVhY2ggbGV2ZWwiLDEpLHI9bmV3IGJ0LGY9UnIoZS5iLDApO2YuYiE9Zi5kLmM7KXtmb3IoYT1sKEJyKGYpLDQwKTtsKFEoYSwoSGMoKSwkZCkpLDE3KS5hPnIuYy5sZW5ndGgtMTspdnQocixuZXcgY2EoeTYsaENlKSk7bj1sKFEoYSwkZCksMTcpLmEsVWcobChRKGUseTMpLDg4KSk/KGEuZS5hPHplKEdlKChTbihuLHIuYy5sZW5ndGgpLGwoci5jW25dLDQyKSkuYSkpJiZWZSgoU24obixyLmMubGVuZ3RoKSxsKHIuY1tuXSw0MikpLGEuZS5hKSxhLmUuYSthLmYuYT56ZShHZSgoU24obixyLmMubGVuZ3RoKSxsKHIuY1tuXSw0MikpLmIpKSYmY3QoKFNuKG4sci5jLmxlbmd0aCksbChyLmNbbl0sNDIpKSxhLmUuYSthLmYuYSkpOihhLmUuYjx6ZShHZSgoU24obixyLmMubGVuZ3RoKSxsKHIuY1tuXSw0MikpLmEpKSYmVmUoKFNuKG4sci5jLmxlbmd0aCksbChyLmNbbl0sNDIpKSxhLmUuYiksYS5lLmIrYS5mLmI+emUoR2UoKFNuKG4sci5jLmxlbmd0aCksbChyLmNbbl0sNDIpKS5iKSkmJmN0KChTbihuLHIuYy5sZW5ndGgpLGwoci5jW25dLDQyKSksYS5lLmIrYS5mLmIpKX1mb3Iobz1ScihlLmIsMCk7by5iIT1vLmQuYzspYT1sKEJyKG8pLDQwKSxuPWwoUShhLChIYygpLCRkKSksMTcpLmEscnQoYSwoUWkoKSxjMSksR2UoKFNuKG4sci5jLmxlbmd0aCksbChyLmNbbl0sNDIpKS5hKSkscnQoYSxrMCxHZSgoU24obixyLmMubGVuZ3RoKSxsKHIuY1tuXSw0MikpLmIpKTt0LlZnKCl9ZnVuY3Rpb24gakRuKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtmb3IoZS5vPXplKEdlKFEoZS5pLChOdCgpLG0zKSkpKSxlLmY9emUoR2UoUShlLmksdnYpKSksZS5qPWUuaS5iLmMubGVuZ3RoLGc9ZS5qLTEsQj0wLGUuaz0wLGUubj0wLGUuYj1PMShXZShybyxkdCwxNyxlLmosMCwxKSksZS5jPU8xKFdlKHRhLGR0LDM0NSxlLmosNywxKSksZj1uZXcgRyhlLmkuYik7Zi5hPGYuYy5jLmxlbmd0aDspe2ZvcihhPWwocmUoZiksMzApLGEucD1nLEw9bmV3IEcoYS5hKTtMLmE8TC5jLmMubGVuZ3RoOylDPWwocmUoTCksMTApLEMucD1CLCsrQjstLWd9Zm9yKGUuZz1XZShWcixkaSwyOCxCLDE1LDEpLGUuZD1MbShWcixbZHQsZGldLFs1MywyOF0sMTUsW0IsM10sMiksZS5wPW5ldyBidCxlLnE9bmV3IGJ0LHQ9MCxlLmU9MCxvPW5ldyBHKGUuaS5iKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKGE9bChyZShvKSwzMCksZz1hLnAscj0wLEo9MCx3PWEuYS5jLmxlbmd0aCxFPTAsTD1uZXcgRyhhLmEpO0wuYTxMLmMuYy5sZW5ndGg7KUM9bChyZShMKSwxMCksQj1DLnAsZS5nW0JdPUMuYy5wLEUrPUMuby5iK2UubyxuPVhnKG5ldyBocihkcihrYShDKS5hLktjKCksbmV3IGopKSksVj1YZyhuZXcgaHIoZHIocXMoQykuYS5LYygpLG5ldyBqKSkpLGUuZFtCXVswXT1WLW4sZS5kW0JdWzFdPW4sZS5kW0JdWzJdPVYscis9bixKKz1WLG4+MCYmdnQoZS5xLEMpLHZ0KGUucCxDKTt0LT1yLHo9dyt0LEUrPXQqZS5mLHJmKGUuYixnLHB0KHopKSxyZihlLmMsZyxFKSxlLms9Yi5NYXRoLm1heChlLmsseiksZS5uPWIuTWF0aC5tYXgoZS5uLEUpLGUuZSs9dCx0Kz1KfX1mdW5jdGlvbiBDdCgpe0N0PVU7dmFyIGU7UGM9bmV3IHdPKGNMLDApLFFuPW5ldyB3TyhuRywxKSxhcj1uZXcgd08oeWhlLDIpLERyPW5ldyB3Tyh4aGUsMyksZXI9bmV3IHdPKGtoZSw0KSxlZD0oQ24oKSxuZXcgRWsoKGU9bChLMChPbyksOSksbmV3IFpoKGUsbChjMChlLGUubGVuZ3RoKSw5KSwwKSkpKSxfMD1hMihycyhRbixoZShsZShPbywxKSxhdSw2NCwwLFtdKSkpLHlmPWEyKHJzKGFyLGhlKGxlKE9vLDEpLGF1LDY0LDAsW10pKSksJGg9YTIocnMoRHIsaGUobGUoT28sMSksYXUsNjQsMCxbXSkpKSxIZj1hMihycyhlcixoZShsZShPbywxKSxhdSw2NCwwLFtdKSkpLGhsPWEyKHJzKFFuLGhlKGxlKE9vLDEpLGF1LDY0LDAsW0RyXSkpKSxKdT1hMihycyhhcixoZShsZShPbywxKSxhdSw2NCwwLFtlcl0pKSksQTA9YTIocnMoUW4saGUobGUoT28sMSksYXUsNjQsMCxbZXJdKSkpLHpsPWEyKHJzKFFuLGhlKGxlKE9vLDEpLGF1LDY0LDAsW2FyXSkpKSx6aD1hMihycyhEcixoZShsZShPbywxKSxhdSw2NCwwLFtlcl0pKSkseGY9YTIocnMoYXIsaGUobGUoT28sMSksYXUsNjQsMCxbRHJdKSkpLHFsPWEyKHJzKFFuLGhlKGxlKE9vLDEpLGF1LDY0LDAsW2FyLGVyXSkpKSxsbD1hMihycyhhcixoZShsZShPbywxKSxhdSw2NCwwLFtEcixlcl0pKSksZmw9YTIocnMoUW4saGUobGUoT28sMSksYXUsNjQsMCxbRHIsZXJdKSkpLF9sPWEyKHJzKFFuLGhlKGxlKE9vLDEpLGF1LDY0LDAsW2FyLERyXSkpKSxEdT1hMihycyhRbixoZShsZShPbywxKSxhdSw2NCwwLFthcixEcixlcl0pKSl9ZnVuY3Rpb24gJERuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdDtmb3IodC5VZyhLM3QsMSksSj1uZXcgYnQsb3Q9bmV3IGJ0LEU9bmV3IEcoZS5iKTtFLmE8RS5jLmMubGVuZ3RoOylmb3Iodz1sKHJlKEUpLDMwKSxmZT0tMSxWPUpPKHcuYSksTD1WLEI9MCx6PUwubGVuZ3RoO0I8ejsrK0IpaWYoQz1MW0JdLCsrZmUsISEoQy5rPT0oWm4oKSxQcykmJlA1KGwoUShDLChOdCgpLE1zKSksMTAxKSkpKXtmb3IoVTgobChRKEMsKE50KCksTXMpKSwxMDEpKXx8a0NuKEMpLHJ0KEMsKGZ0KCksdTMpLEMpLEouYy5sZW5ndGg9MCxvdC5jLmxlbmd0aD0wLG49bmV3IGJ0LCRlPW5ldyBvcyxzY2UoJGUsZDIoQywoQ3QoKSxRbikpKSx1d3QoZSwkZSxKLG90LG4pLGc9ZmUsU3Q9QyxvPW5ldyBHKEopO28uYTxvLmMuYy5sZW5ndGg7KXI9bChyZShvKSwxMCksRnkocixnLHcpLCsrZmUscnQocix1MyxDKSxmPWwoanQoci5qLDApLDEyKSx0ZT1sKFEoZix6aSksMTIpLFJ0KEJ0KFEodGUsWDFlKSkpfHxsKFEocixXeCksMTUpLkZjKFN0KTtmb3IoQ2goJGUpLE1lPWQyKEMsRHIpLktjKCk7TWUuT2IoKTspVGU9bChNZS5QYigpLDEyKSxDcygkZSxUZSwkZS5hLCRlLmEuYSk7Zm9yKHV3dChlLCRlLG90LG51bGwsbiksWmU9QyxhPW5ldyBHKG90KTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTApLEZ5KHIsKytmZSx3KSxydChyLHUzLEMpLGY9bChqdChyLmosMCksMTIpLHRlPWwoUShmLHppKSwxMiksUnQoQnQoUSh0ZSxYMWUpKSl8fGwoUShaZSxXeCksMTUpLkZjKHIpO24uYy5sZW5ndGg9PTB8fHJ0KEMsQkxlLG4pfXQuVmcoKX1mdW5jdGlvbiBYdnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lO2lmKHQuYiE9MCl7Zm9yKHo9bmV3IG9zLGc9bnVsbCxWPW51bGwscj11YShiLk1hdGguZmxvb3IoYi5NYXRoLmxvZyh0LmIpKmIuTWF0aC5MT0cxMEUpKzEpLHc9MCxNZT1Scih0LDApO01lLmIhPU1lLmQuYzspZm9yKGZlPWwoQnIoTWUpLDQwKSxxZShWKSE9PXFlKFEoZmUsKFFpKCksZE0pKSkmJihWPWVpKFEoZmUsZE0pKSx3PTApLFYhPW51bGw/Zz1WK1ZvdCh3Kysscik6Zz1Wb3QodysrLHIpLHJ0KGZlLGRNLGcpLHRlPShhPVJyKG5ldyBIZyhmZSkuYS5kLDApLG5ldyBDNShhKSk7UUkodGUuYSk7KUo9bChCcih0ZS5hKSw2NSkuYyxDcyh6LEosei5jLmIsei5jKSxydChKLGRNLGcpO2ZvcihCPW5ldyBQcixmPTA7ZjxnLmxlbmd0aC1yO2YrKylmb3IoVGU9UnIodCwwKTtUZS5iIT1UZS5kLmM7KWZlPWwoQnIoVGUpLDQwKSxFPXRmKGVpKFEoZmUsKFFpKCksZE0pKSksMCxmKzEpLG49KEU9PW51bGw/aGMoem8oQi5mLG51bGwpKTp5XyhCLmksRSkpIT1udWxsP2woRT09bnVsbD9oYyh6byhCLmYsbnVsbCkpOnlfKEIuaSxFKSwxNykuYSsxOjEscmMoQixFLHB0KG4pKTtmb3IoTD1uZXcgcW0obmV3IFNyKEIpLmEpO0wuYjspQz1OdyhMKSxvPXB0KGNyKGUuYSxDLmxkKCkpIT1udWxsP2woY3IoZS5hLEMubGQoKSksMTcpLmE6MCkscmMoZS5hLGVpKEMubGQoKSkscHQobChDLm1kKCksMTcpLmErby5hKSksbz1sKGNyKGUuYixDLmxkKCkpLDE3KSwoIW98fG8uYTxsKEMubWQoKSwxNykuYSkmJnJjKGUuYixlaShDLmxkKCkpLGwoQy5tZCgpLDE3KSk7WHZ0KGUseil9fWZ1bmN0aW9uIHpEbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKG49bnVsbCx3PW51bGwsYT1sKFEoZS5iLChOdCgpLG5kZSkpLDM0OSksYT09KHlBKCksTUIpJiYobj1uZXcgYnQsdz1uZXcgYnQpLGc9bmV3IEcoZS5kKTtnLmE8Zy5jLmMubGVuZ3RoOylpZihmPWwocmUoZyksMTA1KSxvPWYuaSwhIW8pc3dpdGNoKGYuZS5nKXtjYXNlIDA6dD1sKGNBKG5ldyBQOChmLmIpKSw2NCksYT09TUImJnQ9PShDdCgpLFFuKT8kbihuLmMsZik6YT09TUImJnQ9PShDdCgpLERyKT8kbih3LmMsZik6ZzduKGYsdCk7YnJlYWs7Y2FzZSAxOkU9Zi5hLmQuaixDPWYuYy5kLmosRT09KEN0KCksUW4pP1FwKGYsUW4sKFIxKCksTVQpLGYuYSk6Qz09UW4/UXAoZixRbiwoUjEoKSxEVCksZi5jKTpFPT1Ecj9RcChmLERyLChSMSgpLERUKSxmLmEpOkM9PURyJiZRcChmLERyLChSMSgpLE1UKSxmLmMpO2JyZWFrO2Nhc2UgMjpjYXNlIDM6cj1mLmIsdmwociwoQ3QoKSxRbikpP3ZsKHIsRHIpP3ZsKHIsZXIpP3ZsKHIsYXIpfHxRcChmLFFuLChSMSgpLERUKSxmLmMpOlFwKGYsUW4sKFIxKCksTVQpLGYuYSk6UXAoZixRbiwoUjEoKSxWeCksbnVsbCk6UXAoZixEciwoUjEoKSxWeCksbnVsbCk7YnJlYWs7Y2FzZSA0Okw9Zi5hLmQuaixCPWYuYS5kLmosTD09KEN0KCksUW4pfHxCPT1Rbj9RcChmLERyLChSMSgpLFZ4KSxudWxsKTpRcChmLFFuLChSMSgpLFZ4KSxudWxsKX1uJiYobi5jLmxlbmd0aD09MHx8SG10KG4sKEN0KCksUW4pKSx3LmMubGVuZ3RoPT0wfHxIbXQodywoQ3QoKSxEcikpKX1mdW5jdGlvbiBxRG4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO2ZvcihuLlVnKCJCcmVhZHRoIGZpcnN0IG1vZGVsIG9yZGVyIGxheWVyaW5nIiwxKSxlLmE9dCx0ZT1uZXcgYnQsSj1uZXcgRyhlLmEuYSk7Si5hPEouYy5jLmxlbmd0aDspej1sKHJlKEopLDEwKSx6Lms9PShabigpLFBzKSYmJG4odGUuYyx6KTtmb3IoQ24oKSxWcyh0ZSxuZXcgamVlKSx3PSEwLGE9bmV3IHl1KGUuYSkscj1udWxsLHZ0KGUuYS5iLGEpLFY9bmV3IEcodGUpO1YuYTxWLmMuYy5sZW5ndGg7KWlmKHo9bChyZShWKSwxMCksdylWYSh6LGEpLHc9ITE7ZWxzZXtmb3IoZz1uZXcgaHIoZHIoa2EoeikuYS5LYygpLG5ldyBqKSk7anIoZyk7KW89bCh4cihnKSwxOCksKG8uYy5pLms9PShabigpLFBzKSYmby5jLmkuYz09YXx8by5jLmkuaz09Y3UmJmwoeHIobmV3IGhyKGRyKGthKG8uYy5pKS5hLktjKCksbmV3IGopKSksMTgpLmMuaS5jPT1hKSYmKHI9bmV3IHl1KGUuYSksdnQoZS5hLmIsciksYT1uZXcgeXUoZS5hKSx2dChlLmEuYixhKSk7Zm9yKGY9bmV3IGhyKGRyKGthKHopLmEuS2MoKSxuZXcgaikpO2pyKGYpOylvPWwoeHIoZiksMTgpLG8uYy5pLms9PShabigpLGN1KSYmIW8uYy5pLmMmJlZhKG8uYy5pLHIpO1ZhKHosYSl9Zm9yKGUuYS5hLmMubGVuZ3RoPTAsZmU9bmV3IGJ0LEw9bmV3IEcoZS5hLmIpO0wuYTxMLmMuYy5sZW5ndGg7KUU9bChyZShMKSwzMCksRS5hLmMubGVuZ3RoPT0wJiYkbihmZS5jLEUpO2ZvcihnOGUoZS5hLmIsZmUpLEI9MCxDPW5ldyBHKGUuYS5iKTtDLmE8Qy5jLmMubGVuZ3RoOylFPWwocmUoQyksMzApLEUucD1CLCsrQjtuLlZnKCl9ZnVuY3Rpb24gSERuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtmb3Iocj1sKFEoZSwoZnQoKSx6aSkpLDI3KSxWPWwoUShlLChOdCgpLGRXKSksMTcpLmEsbz1sKFEoZSxtVyksMTcpLmEsSGkocixkVyxwdChWKSksSGkocixtVyxwdChvKSksVXUocixlLm4uYSt0LmEpLEd1KHIsZS5uLmIrdC5iKSwobChhdChyLGJ2KSwxODEpLmdjKCkhPTB8fGUuZXx8cWUoUShlbyhlKSx5VykpPT09cWUoKE9BKCksaU0pKSYmb250KChCeSgpLChlLnE/ZS5xOihDbigpLENuKCksbWcpKS5fYihnMyk/Qj1sKFEoZSxnMyksMjAzKTpCPWwoUShlbyhlKSxlTSksMjAzKSxCKSkpJiYoRHcocixlLm8uYSksTXcocixlLm8uYikpLEw9bmV3IEcoZS5qKTtMLmE8TC5jLmMubGVuZ3RoOylFPWwocmUoTCksMTIpLEo9UShFLHppKSxEZShKLDE5MykmJihhPWwoSiwxMjMpLFFoKGEsRS5uLmEsRS5uLmIpLEhpKGEsVlQsRS5qKSk7Zm9yKHo9bChRKGUsZDMpLDE4MSkuZ2MoKSE9MCx3PW5ldyBHKGUuYik7dy5hPHcuYy5jLmxlbmd0aDspZj1sKHJlKHcpLDcyKSwoenx8bChRKGYsZDMpLDE4MSkuZ2MoKSE9MCkmJihuPWwoUShmLHppKSwxMzUpLEY1KG4sZi5vLmEsZi5vLmIpLFFoKG4sZi5uLmEsZi5uLmIpKTtpZighV18obChRKGUsdjQpLDIxKSkpZm9yKEM9bmV3IEcoZS5qKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3IoRT1sKHJlKEMpLDEyKSxnPW5ldyBHKEUuZik7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDcyKSxuPWwoUShmLHppKSwxMzUpLER3KG4sZi5vLmEpLE13KG4sZi5vLmIpLFFoKG4sZi5uLmEsZi5uLmIpfWZ1bmN0aW9uIFZEbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW47Zm9yKHQuVWcoIkNhbGN1bGF0ZSBHcmFwaCBTaXplIiwxKSx0LmRoKGUseUNlKSxMPXk2LEI9eTYsRT14Q2UsQz14Q2UsSj1uZXcgb3IoKCFlLmEmJihlLmE9bmV3IG50KEFpLGUsMTAsMTEpKSxlLmEpKTtKLmUhPUouaS5nYygpOyl6PWwoZ3IoSiksMjcpLFRlPXouaSxNZT16LmosYW49ei5nLGc9ei5mLHc9bChhdCh6LChwaSgpLHRDKSksMTQwKSxMPWIuTWF0aC5taW4oTCxUZS13LmIpLEI9Yi5NYXRoLm1pbihCLE1lLXcuZCksRT1iLk1hdGgubWF4KEUsVGUrYW4rdy5jKSxDPWIuTWF0aC5tYXgoQyxNZStnK3cuYSk7Zm9yKGZlPWwoYXQoZSwocGkoKSxfMikpLDEwNyksdGU9bmV3IGx0KEwtZmUuYixCLWZlLmQpLGNuPUUtTCsoZmUuYitmZS5jKSxmPUMtQisoZmUuZCtmZS5hKSxSdChCdChhdChlLChTYigpLE9JZSkpKSkmJigkZT1sKGF0KGUsKEg1KCksWTYpKSwyNyksWmU9bChhdCgkZSx0QyksMTQwKSxvdD0kZS5pKyRlLmcvMisoWmUuYitaZS5jKS8yLXRlLmEsU3Q9JGUuaiskZS5mLzIrKFplLmQrWmUuYSkvMi10ZS5iLGE9Y24tb3Qsbz1mLVN0LGE8Y24vMj8obj1hLW90LGNuKz1uLHRlLmEtPW4pOihuPW90LWEsY24rPW4pLG88Zi8yPyhyPW8tU3QsZis9cix0ZS5iLT1yKToocj1TdC1vLGYrPXIpKSxWPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpO1YuZSE9Vi5pLmdjKCk7KXo9bChncihWKSwyNyksVXUoeix6LmktdGUuYSksR3Uoeix6LmotdGUuYik7UnQoQnQoYXQoZSxDNCkpKXx8KER3KGUsY24pLE13KGUsZikpLEhpKGUsdDcsY24tKGZlLmIrZmUuYykpLEhpKGUsZTcsZi0oZmUuZCtmZS5hKSksdC5kaChlLE9HKX1mdW5jdGlvbiBVRG4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHo7aWYoZS5lLmEuJGIoKSxlLmYuYS4kYigpLGUuYy5jLmxlbmd0aD0wLGUuaS5jLmxlbmd0aD0wLGUuZy5hLiRiKCksdClmb3IoZj1uZXcgRyh0LmEpO2YuYTxmLmMuYy5sZW5ndGg7KWZvcihvPWwocmUoZiksMTApLEw9ZDIobywoQ3QoKSxhcikpLktjKCk7TC5PYigpOylmb3IoQz1sKEwuUGIoKSwxMiksbmEoZS5lLEMpLGE9bmV3IEcoQy5nKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTgpLCFEbyhyKSYmKHZ0KGUuYyxyKSxoZHQoZSxyKSxnPXIuYy5pLmssKGc9PShabigpLFBzKXx8Zz09QXV8fGc9PVVzfHxnPT1LMSkmJnZ0KGUuaixyKSx6PXIuZCxCPXouaS5jLEI9PW4/bmEoZS5mLHopOkI9PXQ/bmEoZS5lLHopOmFsKGUuYyxyKSk7aWYobilmb3IoZj1uZXcgRyhuLmEpO2YuYTxmLmMuYy5sZW5ndGg7KXtmb3Iobz1sKHJlKGYpLDEwKSxFPW5ldyBHKG8uaik7RS5hPEUuYy5jLmxlbmd0aDspZm9yKHc9bChyZShFKSwxMiksYT1uZXcgRyh3LmcpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxOCksRG8ocikmJm5hKGUuZyxyKTtmb3IoTD1kMihvLChDdCgpLGVyKSkuS2MoKTtMLk9iKCk7KWZvcihDPWwoTC5QYigpLDEyKSxuYShlLmYsQyksYT1uZXcgRyhDLmcpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxOCksIURvKHIpJiYodnQoZS5jLHIpLGhkdChlLHIpLGc9ci5jLmkuaywoZz09KFpuKCksUHMpfHxnPT1BdXx8Zz09VXN8fGc9PUsxKSYmdnQoZS5qLHIpLHo9ci5kLEI9ei5pLmMsQj09bj9uYShlLmYseik6Qj09dD9uYShlLmUseik6YWwoZS5jLHIpKX19ZnVuY3Rpb24gR0RuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZTtmb3Iobi5VZygiUG9seWxpbmUgZWRnZSByb3V0aW5nIiwxKSx0ZT16ZShHZShRKHQsKE50KCksRE1lKSkpKSx6PXplKEdlKFEodCxWNikpKSxhPXplKEdlKFEodCxxNikpKSxyPWIuTWF0aC5taW4oMSxhL3opLE1lPTAsdz0wLHQuYi5jLmxlbmd0aCE9MCYmKCRlPUsydChsKGp0KHQuYiwwKSwzMCkpLE1lPS40KnIqJGUpLGc9bmV3IFVhKHQuYiwwKTtnLmI8Zy5kLmdjKCk7KXtmb3IoZj0obXIoZy5iPGcuZC5nYygpKSxsKGcuZC5YYihnLmM9Zy5iKyspLDMwKSksbz1McShmLElCKSxvJiZNZT4wJiYoTWUtPXopLE9rZShmLE1lKSxDPTAsQj1uZXcgRyhmLmEpO0IuYTxCLmMuYy5sZW5ndGg7KXtmb3IoTD1sKHJlKEIpLDEwKSxFPTAsSj1uZXcgaHIoZHIocXMoTCkuYS5LYygpLG5ldyBqKSk7anIoSik7KVY9bCh4cihKKSwxOCksZmU9STEoVi5jKS5iLFRlPUkxKFYuZCkuYixmPT1WLmQuaS5jJiYhRG8oVikmJihzRW4oVixNZSwuNCpyKmIuTWF0aC5hYnMoZmUtVGUpKSxWLmMuaj09KEN0KCksZXIpJiYoZmU9MCxUZT0wKSksRT1iLk1hdGgubWF4KEUsYi5NYXRoLmFicyhUZS1mZSkpO3N3aXRjaChMLmsuZyl7Y2FzZSAwOmNhc2UgNDpjYXNlIDE6Y2FzZSAzOmNhc2UgNTp1TW4oZSxMLE1lLHRlKX1DPWIuTWF0aC5tYXgoQyxFKX1nLmI8Zy5kLmdjKCkmJigkZT1LMnQoKG1yKGcuYjxnLmQuZ2MoKSksbChnLmQuWGIoZy5jPWcuYisrKSwzMCkpKSxDPWIuTWF0aC5tYXgoQywkZSksbXIoZy5iPjApLGcuYS5YYihnLmM9LS1nLmIpKSx3PS40KnIqQywhbyYmZy5iPGcuZC5nYygpJiYodys9eiksTWUrPWYuYy5hK3d9ZS5hLmEuJGIoKSx0LmYuYT1NZSxuLlZnKCl9ZnVuY3Rpb24gS0RuKGUpe3ZhciB0LG4scixhLG87c3dpdGNoKFVPKGUsQzR0KSwoIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmIpLmkrKCFlLmMmJihlLmM9bmV3IExuKF9yLGUsNSw4KSksZS5jKS5pKXtjYXNlIDA6dGhyb3cgdWUobmV3IFluKCJUaGUgZWRnZSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHNvdXJjZSBvciB0YXJnZXQuIikpO2Nhc2UgMTpyZXR1cm4oIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmIpLmk9PTA/ZHMoYmMobChPZSgoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMpLDApLDg0KSkpOmRzKGJjKGwoT2UoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKSwwKSw4NCkpKX1pZigoIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmIpLmk9PTEmJighZS5jJiYoZS5jPW5ldyBMbihfcixlLDUsOCkpLGUuYykuaT09MSl7aWYoYT1iYyhsKE9lKCghZS5iJiYoZS5iPW5ldyBMbihfcixlLDQsNykpLGUuYiksMCksODQpKSxvPWJjKGwoT2UoKCFlLmMmJihlLmM9bmV3IExuKF9yLGUsNSw4KSksZS5jKSwwKSw4NCkpLGRzKGEpPT1kcyhvKSlyZXR1cm4gZHMoYSk7aWYoYT09ZHMobykpcmV0dXJuIGE7aWYobz09ZHMoYSkpcmV0dXJuIG99Zm9yKHI9cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKSwoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMpXSkpKSx0PWJjKGwoeHIociksODQpKTtqcihyKTspaWYobj1iYyhsKHhyKHIpLDg0KSksbiE9dCYmIUx5KG4sdCkpe2lmKGRzKG4pPT1kcyh0KSl0PWRzKG4pO2Vsc2UgaWYodD15VG4odCxuKSwhdClyZXR1cm4gbnVsbH1yZXR1cm4gdH1mdW5jdGlvbiBIa2UoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lO2lmKEI9dC5sZW5ndGgsQj4wJiYodz0oWG4oMCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KDApKSx3IT02NCkpe2lmKHc9PTM3JiYoTD10Lmxhc3RJbmRleE9mKCIlIiksRT0hMSxMIT0wJiYoTD09Qi0xfHwoRT0oWG4oTCsxLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoTCsxKT09NDYpKSkpKXtpZihmPShHYSgxLEwsdC5sZW5ndGgpLHQuc3Vic3RyKDEsTC0xKSksTWU9dm4oIiUiLGYpP251bGw6VmtlKGYpLHI9MCxFKXRyeXtyPU9oKChYbihMKzIsdC5sZW5ndGgrMSksdC5zdWJzdHIoTCsyKSksbG8sSWkpfWNhdGNoKCRlKXt0aHJvdyAkZT1icygkZSksRGUoJGUsMTMwKT8oZz0kZSx1ZShuZXcgblYoZykpKTp1ZSgkZSl9Zm9yKHRlPW03ZShlLkdoKCkpO3RlLk9iKCk7KWlmKFY9TVYodGUpLERlKFYsNTE5KSYmKGE9bChWLDU5OCksVGU9YS5kLChNZT09bnVsbD9UZT09bnVsbDp2bihNZSxUZSkpJiZyLS09PTApKXJldHVybiBhO3JldHVybiBudWxsfWlmKEM9dC5sYXN0SW5kZXhPZigiLiIpLHo9Qz09LTE/dDooR2EoMCxDLHQubGVuZ3RoKSx0LnN1YnN0cigwLEMpKSxuPTAsQyE9LTEpdHJ5e249T2goKFhuKEMrMSx0Lmxlbmd0aCsxKSx0LnN1YnN0cihDKzEpKSxsbyxJaSl9Y2F0Y2goJGUpe2lmKCRlPWJzKCRlKSxEZSgkZSwxMzApKXo9dDtlbHNlIHRocm93IHVlKCRlKX1mb3Ioej12bigiJSIseik/bnVsbDpWa2UoeiksSj1tN2UoZS5HaCgpKTtKLk9iKCk7KWlmKFY9TVYoSiksRGUoViwxOTcpJiYobz1sKFYsMTk3KSxmZT1vLnhlKCksKHo9PW51bGw/ZmU9PW51bGw6dm4oeixmZSkpJiZuLS09PTApKXJldHVybiBvO3JldHVybiBudWxsfXJldHVybiBCdnQoZSx0KX1mdW5jdGlvbiBXRG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlO2ZvcihDPW5ldyBQcix3PW5ldyBDdyxyPW5ldyBHKGUuYS5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KWlmKHQ9bChyZShyKSw2MCksRT1HNSh0KSxFKWp1KEMuZixFLHQpO2Vsc2UgaWYoVGU9aXgodCksVGUpZm9yKG89bmV3IEcoVGUuayk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDE4KSx4bih3LGEsdCk7Zm9yKG49bmV3IEcoZS5hLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspaWYodD1sKHJlKG4pLDYwKSxFPUc1KHQpLEUpe2ZvcihnPW5ldyBocihkcihxcyhFKS5hLktjKCksbmV3IGopKTtqcihnKTspaWYoZj1sKHhyKGcpLDE4KSwhRG8oZikmJihWPWYuYyxmZT1mLmQsISgoQ3QoKSxobCkuSGMoZi5jLmopJiZobC5IYyhmLmQuaikpKSl7aWYoSj1sKGNyKEMsZi5kLmkpLDYwKSxwMChzMChpMChhMChyMChuZXcgX2YsMCksMTAwKSxlLmNbdC5hLmRdKSxlLmNbSi5hLmRdKSksVi5qPT1lciYmTHN0KChrbCgpLFYpKSl7Zm9yKEI9bCgkaSh3LGYpLDIxKS5LYygpO0IuT2IoKTspaWYoTD1sKEIuUGIoKSw2MCksTC5kLmM8dC5kLmMpe2lmKHo9ZS5jW0wuYS5kXSx0ZT1lLmNbdC5hLmRdLHo9PXRlKWNvbnRpbnVlO3AwKHMwKGkwKGEwKHIwKG5ldyBfZiwxKSwxMDApLHopLHRlKSl9fWlmKGZlLmo9PWFyJiZNc3QoKGtsKCksZmUpKSl7Zm9yKEI9bCgkaSh3LGYpLDIxKS5LYygpO0IuT2IoKTspaWYoTD1sKEIuUGIoKSw2MCksTC5kLmM+dC5kLmMpe2lmKHo9ZS5jW3QuYS5kXSx0ZT1lLmNbTC5hLmRdLHo9PXRlKWNvbnRpbnVlO3AwKHMwKGkwKGEwKHIwKG5ldyBfZiwxKSwxMDApLHopLHRlKSl9fX19fWZ1bmN0aW9uIFlEbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3Q7aWYoQj1sKGwoJGkoZS5yLHQpLDIxKSw4NyksdD09KEN0KCksYXIpfHx0PT1lcil7VnZ0KGUsdCk7cmV0dXJufWZvcihvPXQ9PVFuPyhQdygpLHJCKTooUHcoKSxpQiksJGU9dD09UW4/KG9sKCksYTEpOihvbCgpLHcwKSxuPWwoUW8oZS5iLHQpLDEyNykscj1uLmksYT1yLmMrWTUoaGUobGUoTmEsMSksWm8sMjgsMTUsW24ubi5iLGUuQy5iLGUua10pKSxmZT1yLmMrci5iLVk1KGhlKGxlKE5hLDEpLFpvLDI4LDE1LFtuLm4uYyxlLkMuYyxlLmtdKSksZj1pM2UoeTRlKG8pLGUudCksVGU9dD09UW4/aWE6Z3MsTD1CLktjKCk7TC5PYigpOylFPWwoTC5QYigpLDExNyksISghRS5jfHxFLmMuZC5jLmxlbmd0aDw9MCkmJih0ZT1FLmIuTWYoKSxKPUUuZSx6PUUuYyxWPXouaSxWLmI9KHc9ei5uLHouZS5hK3cuYit3LmMpLFYuYT0oZz16Lm4sei5lLmIrZy5kK2cuYSksVU8oJGUseUVlKSx6LmY9JGUsWjAoeiwoQmwoKSx2MCkpLFYuYz1KLmEtKFYuYi10ZS5hKS8yLFplPWIuTWF0aC5taW4oYSxKLmEpLG90PWIuTWF0aC5tYXgoZmUsSi5hK3RlLmEpLFYuYzxaZT9WLmM9WmU6Vi5jK1YuYj5vdCYmKFYuYz1vdC1WLmIpLHZ0KGYuZCxuZXcgRGFlKFYsaDhlKGYsVikpKSxUZT10PT1Rbj9iLk1hdGgubWF4KFRlLEouYitFLmIuTWYoKS5iKTpiLk1hdGgubWluKFRlLEouYikpO2ZvcihUZSs9dD09UW4/ZS50Oi1lLnQsTWU9TThlKChmLmU9VGUsZikpLE1lPjAmJihsKFFvKGUuYix0KSwxMjcpLmEuYj1NZSksQz1CLktjKCk7Qy5PYigpOylFPWwoQy5QYigpLDExNyksISghRS5jfHxFLmMuZC5jLmxlbmd0aDw9MCkmJihWPUUuYy5pLFYuYy09RS5lLmEsVi5kLT1FLmUuYil9ZnVuY3Rpb24gWERuKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6O2Zvcih0PW5ldyBQcix3PW5ldyBvcihlKTt3LmUhPXcuaS5nYygpOyl7Zm9yKGc9bChncih3KSwyNyksbj1uZXcgS3Msa2koWDBlLGcsbiksej1uZXcgQnAsYT1sKHljKG5ldyBibihudWxsLG5ldyB2dyhuZXcgaHIoZHIoc1AoZykuYS5LYygpLG5ldyBqKSkpKSxkc3QoeixQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksRWMpXSkpKSksODUpLEtodChuLGwoYS54YygoSG4oKSwhMCkpLDE2KSxuZXcgWTMpLHI9bCh5YyhGaShsKGEueGMoITEpLDE1KS5MYygpLG5ldyAkOSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsW0VjXSkpKSwxNSksZj1yLktjKCk7Zi5PYigpOylvPWwoZi5QYigpLDc0KSxCPUtndChvKSxCJiYoRT1sKGhjKHpvKHQuZixCKSksMjEpLEV8fChFPWJidChCKSxqdSh0LmYsQixFKSksS2EobixFKSk7Zm9yKGE9bCh5YyhuZXcgYm4obnVsbCxuZXcgdncobmV3IGhyKGRyKGNwKGcpLmEuS2MoKSxuZXcgaikpKSksZHN0KHosUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsW0VjXSkpKSksODUpLEtodChuLGwoYS54YyghMCksMTYpLG5ldyBjNSkscj1sKHljKEZpKGwoYS54YyghMSksMTUpLkxjKCksbmV3IEVoKSxQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbRWNdKSkpLDE1KSxMPXIuS2MoKTtMLk9iKCk7KUM9bChMLlBiKCksNzQpLEI9V2d0KEMpLEImJihFPWwoaGMoem8odC5mLEIpKSwyMSksRXx8KEU9YmJ0KEIpLGp1KHQuZixCLEUpKSxLYShuLEUpKX19ZnVuY3Rpb24gUURuKGUsdCl7YmxlKCk7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtpZih3PWl1KGUsMCk8MCx3JiYoZT1yMihlKSksaXUoZSwwKT09MClzd2l0Y2godCl7Y2FzZSAwOnJldHVybiIwIjtjYXNlIDE6cmV0dXJuIHNUO2Nhc2UgMjpyZXR1cm4iMC4wMCI7Y2FzZSAzOnJldHVybiIwLjAwMCI7Y2FzZSA0OnJldHVybiIwLjAwMDAiO2Nhc2UgNTpyZXR1cm4iMC4wMDAwMCI7Y2FzZSA2OnJldHVybiIwLjAwMDAwMCI7ZGVmYXVsdDpyZXR1cm4gej1uZXcgdGIsdDwwP3ouYSs9IjBFKyI6ei5hKz0iMEUiLHouYSs9dD09bG8/IjIxNDc0ODM2NDgiOiIiKy10LHouYX1DPTE4LEw9V2Uoa2YsQWQsMjgsQysxLDE1LDEpLG49QyxKPWU7ZG8gRT1KLEo9S04oSiwxMCksTFstLW5dPVlyKGJvKDQ4LERmKEUsbW8oSiwxMCkpKSkmWnM7d2hpbGUoaXUoSiwwKSE9MCk7aWYoYT1EZihEZihEZihDLG4pLHQpLDEpLHQ9PTApcmV0dXJuIHcmJihMWy0tbl09NDUpLElmKEwsbixDLW4pO2lmKHQ+MCYmaXUoYSwtNik+PTApe2lmKGl1KGEsMCk+PTApe2ZvcihvPW4rWXIoYSksZz1DLTE7Zz49bztnLS0pTFtnKzFdPUxbZ107cmV0dXJuIExbKytvXT00Nix3JiYoTFstLW5dPTQ1KSxJZihMLG4sQy1uKzEpfWZvcihmPTI7ZnNlKGYsYm8ocjIoYSksMSkpO2YrKylMWy0tbl09NDg7cmV0dXJuIExbLS1uXT00NixMWy0tbl09NDgsdyYmKExbLS1uXT00NSksSWYoTCxuLEMtbil9cmV0dXJuIFY9bisxLHI9QyxCPW5ldyBTNSx3JiYoQi5hKz0iLSIpLHItVj49MT8oaGIoQixMW25dKSxCLmErPSIuIixCLmErPUlmKEwsbisxLEMtbi0xKSk6Qi5hKz1JZihMLG4sQy1uKSxCLmErPSJFIixpdShhLDApPjAmJihCLmErPSIrIiksQi5hKz0iIitZXyhhKSxCLmF9ZnVuY3Rpb24gR3coZSx0LG4scixhKXt2YXIgbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90O2lmKHRlPW5ldyBsdChlLmcsZS5mKSxKPWE5ZShlKSxKLmE9Yi5NYXRoLm1heChKLmEsdCksSi5iPWIuTWF0aC5tYXgoSi5iLG4pLG90PUouYS90ZS5hLEM9Si5iL3RlLmIsJGU9Si5hLXRlLmEsdz1KLmItdGUuYixyKWZvcihmPWRzKGUpP2woYXQoZHMoZSksKHBpKCkseHYpKSw4OCk6bChhdChlLChwaSgpLHh2KSksODgpLGc9cWUoYXQoZSwocGkoKSxfTSkpKT09PXFlKChSYSgpLE11KSksVGU9bmV3IG9yKCghZS5jJiYoZS5jPW5ldyBudChIbCxlLDksOSkpLGUuYykpO1RlLmUhPVRlLmkuZ2MoKTspc3dpdGNoKGZlPWwoZ3IoVGUpLDEyMyksTWU9bChhdChmZSxzNyksNjQpLE1lPT0oQ3QoKSxQYykmJihNZT1Fa2UoZmUsZiksSGkoZmUsczcsTWUpKSxNZS5nKXtjYXNlIDE6Z3x8VXUoZmUsZmUuaSpvdCk7YnJlYWs7Y2FzZSAyOlV1KGZlLGZlLmkrJGUpLGd8fEd1KGZlLGZlLmoqQyk7YnJlYWs7Y2FzZSAzOmd8fFV1KGZlLGZlLmkqb3QpLEd1KGZlLGZlLmordyk7YnJlYWs7Y2FzZSA0Omd8fEd1KGZlLGZlLmoqQyl9aWYoRjUoZSxKLmEsSi5iKSxhKWZvcihCPW5ldyBvcigoIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxlLm4pKTtCLmUhPUIuaS5nYygpOylMPWwoZ3IoQiksMTM1KSx6PUwuaStMLmcvMixWPUwuaitMLmYvMixaZT16L3RlLmEsRT1WL3RlLmIsWmUrRT49MSYmKFplLUU+MCYmVj49MD8oVXUoTCxMLmkrJGUpLEd1KEwsTC5qK3cqRSkpOlplLUU8MCYmej49MCYmKFV1KEwsTC5pKyRlKlplKSxHdShMLEwuait3KSkpO3JldHVybiBIaShlLChwaSgpLGt2KSwobWgoKSxvPWwoSzAoQk0pLDkpLG5ldyBaaChvLGwoYzAobyxvLmxlbmd0aCksOSksMCkpKSxuZXcgbHQob3QsQyl9ZnVuY3Rpb24gUXZ0KGUpe3N3KGUsbmV3IFhtKFV6KG53KFp2KHR3KGV3KG5ldyB4MSxnZiksIkVMSyBSYWRpYWwiKSwnQSByYWRpYWwgbGF5b3V0IHByb3ZpZGVyIHdoaWNoIGlzIGJhc2VkIG9uIHRoZSBhbGdvcml0aG0gb2YgUGV0ZXIgRWFkZXMgcHVibGlzaGVkIGluICJEcmF3aW5nIGZyZWUgdHJlZXMuIiwgcHVibGlzaGVkIGJ5IEludGVybmF0aW9uYWwgSW5zdGl0dXRlIGZvciBBZHZhbmNlZCBTdHVkeSBvZiBTb2NpYWwgSW5mb3JtYXRpb24gU2NpZW5jZSwgRnVqaXRzdSBMaW1pdGVkIGluIDE5OTEuIFRoZSByYWRpYWwgbGF5b3V0ZXIgdGFrZXMgYSB0cmVlIGFuZCBwbGFjZXMgdGhlIG5vZGVzIGluIHJhZGlhbCBvcmRlciBhcm91bmQgdGhlIHJvb3QuIFRoZSBub2RlcyBvZiB0aGUgc2FtZSB0cmVlIGxldmVsIGFyZSBwbGFjZWQgb24gdGhlIHNhbWUgcmFkaXVzLicpLG5ldyBmdSksZ2YpKSksZ3QoZSxnZixfRyxJdCh1Q3QpKSxndChlLGdmLEp5LEl0KGxDdCkpLGd0KGUsZ2YseDYsSXQoc0N0KSksZ3QoZSxnZixQeCxJdChhQ3QpKSxndChlLGdmLE54LEl0KG9DdCkpLGd0KGUsZ2YsZlQsSXQoaUN0KSksZ3QoZSxnZixmTCxJdChOSWUpKSxndChlLGdmLGRULEl0KGNDdCkpLGd0KGUsZ2YsQ2ZlLEl0KEpkZSkpLGd0KGUsZ2YsVGZlLEl0KFpkZSkpLGd0KGUsZ2YsTkcsSXQoQkllKSksZ3QoZSxnZixTZmUsSXQoZWdlKSksZ3QoZSxnZixfZmUsSXQoRkllKSksZ3QoZSxnZixNQ2UsSXQoUkllKSksZ3QoZSxnZixMQ2UsSXQoUEllKSksZ3QoZSxnZixDQ2UsSXQocVcpKSxndChlLGdmLFNDZSxJdChIVykpLGd0KGUsZ2YsX0NlLEl0KEZCKSksZ3QoZSxnZixBQ2UsSXQoakllKSksZ3QoZSxnZixUQ2UsSXQoT0llKSl9ZnVuY3Rpb24gS1UoZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTDtpZihlPT1udWxsKXRocm93IHVlKG5ldyBnZCh1bCkpO2lmKEU9ZSxvPWUubGVuZ3RoLHc9ITEsbz4wJiYodD0oWG4oMCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KDApKSwodD09NDV8fHQ9PTQzKSYmKGU9KFhuKDEsZS5sZW5ndGgrMSksZS5zdWJzdHIoMSkpLC0tbyx3PXQ9PTQ1KSksbz09MCl0aHJvdyB1ZShuZXcgZ2QoWXcrRSsnIicpKTtmb3IoO2UubGVuZ3RoPjAmJihYbigwLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoMCk9PTQ4KTspZT0oWG4oMSxlLmxlbmd0aCsxKSxlLnN1YnN0cigxKSksLS1vO2lmKG8+KEFtdCgpLGI2dClbMTBdKXRocm93IHVlKG5ldyBnZChZdytFKyciJykpO2ZvcihhPTA7YTxvO2ErKylpZihXMXQoKFhuKGEsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChhKSkpPT0tMSl0aHJvdyB1ZShuZXcgZ2QoWXcrRSsnIicpKTtmb3IoTD0wLGY9cl9lWzEwXSxDPUEwZVsxMF0sZz1yMihpX2VbMTBdKSxuPSEwLHI9byVmLHI+MCYmKEw9LXBhcnNlSW50KChHYSgwLHIsZS5sZW5ndGgpLGUuc3Vic3RyKDAscikpLDEwKSxlPShYbihyLGUubGVuZ3RoKzEpLGUuc3Vic3RyKHIpKSxvLT1yLG49ITEpO28+PWY7KXtpZihyPXBhcnNlSW50KChHYSgwLGYsZS5sZW5ndGgpLGUuc3Vic3RyKDAsZikpLDEwKSxlPShYbihmLGUubGVuZ3RoKzEpLGUuc3Vic3RyKGYpKSxvLT1mLG4pbj0hMTtlbHNle2lmKGl1KEwsZyk8MCl0aHJvdyB1ZShuZXcgZ2QoWXcrRSsnIicpKTtMPW1vKEwsQyl9TD1EZihMLHIpfWlmKGl1KEwsMCk+MCl0aHJvdyB1ZShuZXcgZ2QoWXcrRSsnIicpKTtpZighdyYmKEw9cjIoTCksaXUoTCwwKTwwKSl0aHJvdyB1ZShuZXcgZ2QoWXcrRSsnIicpKTtyZXR1cm4gTH1mdW5jdGlvbiBWa2UoZSl7a2xlKCk7dmFyIHQsbixyLGEsbyxmLGcsdztpZihlPT1udWxsKXJldHVybiBudWxsO2lmKGE9cGQoZSxjbCgzNykpLGE8MClyZXR1cm4gZTtmb3Iodz1uZXcgVGgoKEdhKDAsYSxlLmxlbmd0aCksZS5zdWJzdHIoMCxhKSkpLHQ9V2UoQWwsQzYsMjgsNCwxNSwxKSxnPTAscj0wLGY9ZS5sZW5ndGg7YTxmO2ErKylpZihYbihhLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoYSk9PTM3JiZlLmxlbmd0aD5hKzImJm1jZSgoWG4oYSsxLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoYSsxKSksa1BlLEVQZSkmJm1jZSgoWG4oYSsyLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoYSsyKSksa1BlLEVQZSkpaWYobj12ZG4oKFhuKGErMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGErMSkpLChYbihhKzIsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChhKzIpKSksYSs9MixyPjA/KG4mMTkyKT09MTI4P3RbZysrXT1uPDwyND4+MjQ6cj0wOm4+PTEyOCYmKChuJjIyNCk9PTE5Mj8odFtnKytdPW48PDI0Pj4yNCxyPTIpOihuJjI0MCk9PTIyND8odFtnKytdPW48PDI0Pj4yNCxyPTMpOihuJjI0OCk9PTI0MCYmKHRbZysrXT1uPDwyND4+MjQscj00KSkscj4wKXtpZihnPT1yKXtzd2l0Y2goZyl7Y2FzZSAyOntoYih3LCgodFswXSYzMSk8PDZ8dFsxXSY2MykmWnMpO2JyZWFrfWNhc2UgMzp7aGIodywoKHRbMF0mMTUpPDwxMnwodFsxXSY2Myk8PDZ8dFsyXSY2MykmWnMpO2JyZWFrfX1nPTAscj0wfX1lbHNle2ZvcihvPTA7bzxnOysrbyloYih3LHRbb10mWnMpO2c9MCx3LmErPVN0cmluZy5mcm9tQ2hhckNvZGUobil9ZWxzZXtmb3Iobz0wO288ZzsrK28paGIodyx0W29dJlpzKTtnPTAsaGIodywoWG4oYSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGEpKSl9cmV0dXJuIHcuYX1mdW5jdGlvbiBKdnQoZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtpZih6PWRzKGJjKGwoT2UoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKSwwKSw4NCkpKSxWPWRzKGJjKGwoT2UoKCFlLmMmJihlLmM9bmV3IExuKF9yLGUsNSw4KSksZS5jKSwwKSw4NCkpKSxMPXo9PVYsZz1uZXcgcWEsdD1sKGF0KGUsKFBWKCksVk5lKSksNzUpLHQmJnQuYj49Mil7aWYoKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKS5pPT0wKW49KHJiKCksYT1uZXcgcmssYSkscXIoKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKSxuKTtlbHNlIGlmKCghZS5hJiYoZS5hPW5ldyBudChjcyxlLDYsNikpLGUuYSkuaT4xKWZvcihCPW5ldyBxOCgoIWUuYSYmKGUuYT1uZXcgbnQoY3MsZSw2LDYpKSxlLmEpKTtCLmUhPUIuaS5nYygpOylqQShCKTtkUCh0LGwoT2UoKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKSwwKSwxNjYpKX1pZihMKWZvcihyPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoY3MsZSw2LDYpKSxlLmEpKTtyLmUhPXIuaS5nYygpOylmb3Iobj1sKGdyKHIpLDE2NiksRT1uZXcgb3IoKCFuLmEmJihuLmE9bmV3IFlzKHFoLG4sNSkpLG4uYSkpO0UuZSE9RS5pLmdjKCk7KXc9bChncihFKSwzNzcpLGcuYT1iLk1hdGgubWF4KGcuYSx3LmEpLGcuYj1iLk1hdGgubWF4KGcuYix3LmIpO2ZvcihmPW5ldyBvcigoIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxlLm4pKTtmLmUhPWYuaS5nYygpOylvPWwoZ3IoZiksMTM1KSxDPWwoYXQobyxNTSksOCksQyYmUWgobyxDLmEsQy5iKSxMJiYoZy5hPWIuTWF0aC5tYXgoZy5hLG8uaStvLmcpLGcuYj1iLk1hdGgubWF4KGcuYixvLmorby5mKSk7cmV0dXJuIGd9ZnVuY3Rpb24gWnZ0KGUsdCxuLHIsYSl7dmFyIG8sZixnO2lmKGVodChlLHQpLGY9dFswXSxvPWNvKG4uYywwKSxnPS0xLHo3ZShuKSlpZihyPjApe2lmKGYrcj5lLmxlbmd0aClyZXR1cm4hMTtnPWtVKChHYSgwLGYrcixlLmxlbmd0aCksZS5zdWJzdHIoMCxmK3IpKSx0KX1lbHNlIGc9a1UoZSx0KTtzd2l0Y2gobyl7Y2FzZSA3MTpyZXR1cm4gZz1vNihlLGYsaGUobGUoenQsMSksZHQsMiw2LFtSd3Qsand0XSksdCksYS5lPWcsITA7Y2FzZSA3NzpyZXR1cm4gZFNuKGUsdCxhLGcsZik7Y2FzZSA3NjpyZXR1cm4gZ1NuKGUsdCxhLGcsZik7Y2FzZSA2OTpyZXR1cm4gc2tuKGUsdCxmLGEpO2Nhc2UgOTk6cmV0dXJuIGFrbihlLHQsZixhKTtjYXNlIDk3OnJldHVybiBnPW82KGUsZixoZShsZSh6dCwxKSxkdCwyLDYsWyJBTSIsIlBNIl0pLHQpLGEuYj1nLCEwO2Nhc2UgMTIxOnJldHVybiBwU24oZSx0LGYsZyxuLGEpO2Nhc2UgMTAwOnJldHVybiBnPD0wPyExOihhLmM9ZywhMCk7Y2FzZSA4MzpyZXR1cm4gZzwwPyExOng1bihnLGYsdFswXSxhKTtjYXNlIDEwNDpnPT0xMiYmKGc9MCk7Y2FzZSA3NTpjYXNlIDcyOnJldHVybiBnPDA/ITE6KGEuZj1nLGEuZz0hMSwhMCk7Y2FzZSAxMDc6cmV0dXJuIGc8MD8hMTooYS5mPWcsYS5nPSEwLCEwKTtjYXNlIDEwOTpyZXR1cm4gZzwwPyExOihhLmo9ZywhMCk7Y2FzZSAxMTU6cmV0dXJuIGc8MD8hMTooYS5uPWcsITApO2Nhc2UgOTA6aWYoZjxlLmxlbmd0aCYmKFhuKGYsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChmKT09OTApKXJldHVybisrdFswXSxhLm89MCwhMDtjYXNlIDEyMjpjYXNlIDExODpyZXR1cm4gTHhuKGUsZix0LGEpO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIEpEbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY247Zm9yKE1lPXQuYy5sZW5ndGgsYT1uZXcgZjYoZS5hLG4sbnVsbCxudWxsKSxjbj1XZShOYSxabywyOCxNZSwxNSwxKSxKPVdlKE5hLFpvLDI4LE1lLDE1LDEpLFY9V2UoTmEsWm8sMjgsTWUsMTUsMSksdGU9MCxnPTA7ZzxNZTtnKyspSltnXT1JaSxWW2ddPWxvO2Zvcih3PTA7dzxNZTt3KyspZm9yKHI9KFNuKHcsdC5jLmxlbmd0aCksbCh0LmNbd10sMTg1KSksY25bd109V3VlKHIpLGNuW3RlXT5jblt3XSYmKHRlPXcpLEw9bmV3IEcoZS5hLmIpO0wuYTxMLmMuYy5sZW5ndGg7KWZvcihDPWwocmUoTCksMzApLFRlPW5ldyBHKEMuYSk7VGUuYTxUZS5jLmMubGVuZ3RoOylmZT1sKHJlKFRlKSwxMCksb3Q9emUoci5wW2ZlLnBdKSt6ZShyLmRbZmUucF0pLEpbd109Yi5NYXRoLm1pbihKW3ddLG90KSxWW3ddPWIuTWF0aC5tYXgoVlt3XSxvdCtmZS5vLmIpO2ZvcihTdD1XZShOYSxabywyOCxNZSwxNSwxKSxFPTA7RTxNZTtFKyspKFNuKEUsdC5jLmxlbmd0aCksbCh0LmNbRV0sMTg1KSkubz09KEQxKCksd3YpP1N0W0VdPUpbdGVdLUpbRV06U3RbRV09Vlt0ZV0tVltFXTtmb3Iobz1XZShOYSxabywyOCxNZSwxNSwxKSx6PW5ldyBHKGUuYS5iKTt6LmE8ei5jLmMubGVuZ3RoOylmb3IoQj1sKHJlKHopLDMwKSxaZT1uZXcgRyhCLmEpO1plLmE8WmUuYy5jLmxlbmd0aDspe2ZvcigkZT1sKHJlKFplKSwxMCksZj0wO2Y8TWU7ZisrKW9bZl09emUoKFNuKGYsdC5jLmxlbmd0aCksbCh0LmNbZl0sMTg1KSkucFskZS5wXSkremUoKFNuKGYsdC5jLmxlbmd0aCksbCh0LmNbZl0sMTg1KSkuZFskZS5wXSkrU3RbZl07X1FlKG8sTWh0KFBlLnByb3RvdHlwZS5NZSxQZSxbXSkpLGEucFskZS5wXT0ob1sxXStvWzJdKS8yLGEuZFskZS5wXT0wfXJldHVybiBhfWZ1bmN0aW9uIFpEbihlLHQsbil7dmFyIHIsYSxvLGYsZztzd2l0Y2gocj10Lmksbz1lLmkubyxhPWUuaS5kLGc9ZS5uLGY9SWMoaGUobGUoRWEsMSksZHQsOCwwLFtnLGUuYV0pKSxlLmouZyl7Y2FzZSAxOnZkKHQsKG9sKCksdzApKSxyLmQ9LWEuZC1uLXIuYSxsKGwoanQodC5kLDApLDE4Nykub2YoKGZ0KCksWXgpKSwyOTEpPT0oSWgoKSxrZyk/KFowKHQsKEJsKCksdjApKSxyLmM9Zi5hLXplKEdlKFEoZSxSNikpKS1uLXIuYik6KFowKHQsKEJsKCksRmQpKSxyLmM9Zi5hK3plKEdlKFEoZSxSNikpKStuKTticmVhaztjYXNlIDI6WjAodCwoQmwoKSxGZCkpLHIuYz1vLmErYS5jK24sbChsKGp0KHQuZCwwKSwxODcpLm9mKChmdCgpLFl4KSksMjkxKT09KEloKCksa2cpPyh2ZCh0LChvbCgpLHcwKSksci5kPWYuYi16ZShHZShRKGUsUjYpKSktbi1yLmEpOih2ZCh0LChvbCgpLGExKSksci5kPWYuYit6ZShHZShRKGUsUjYpKSkrbik7YnJlYWs7Y2FzZSAzOnZkKHQsKG9sKCksYTEpKSxyLmQ9by5iK2EuYStuLGwobChqdCh0LmQsMCksMTg3KS5vZigoZnQoKSxZeCkpLDI5MSk9PShJaCgpLGtnKT8oWjAodCwoQmwoKSx2MCkpLHIuYz1mLmEtemUoR2UoUShlLFI2KSkpLW4tci5iKTooWjAodCwoQmwoKSxGZCkpLHIuYz1mLmEremUoR2UoUShlLFI2KSkpK24pO2JyZWFrO2Nhc2UgNDpaMCh0LChCbCgpLHYwKSksci5jPS1hLmItbi1yLmIsbChsKGp0KHQuZCwwKSwxODcpLm9mKChmdCgpLFl4KSksMjkxKT09KEloKCksa2cpPyh2ZCh0LChvbCgpLHcwKSksci5kPWYuYi16ZShHZShRKGUsUjYpKSktbi1yLmEpOih2ZCh0LChvbCgpLGExKSksci5kPWYuYit6ZShHZShRKGUsUjYpKSkrbil9fWZ1bmN0aW9uIGVJbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEo7Zm9yKG4uVWcoeXl0LDEpLCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSxyPXplKEdlKGF0KHQsKHoxKCksS1cpKSkpLEM9emUoR2UoYXQodCx3TSkpKSxCPWwoYXQodCx2TSksMTA3KSx6PW5ldyBRM2UocixDKSxvPXd3dCh6LHQsQiksU2h0KHQseiksZz1sKGF0KHQsbk9lKSwxNykuYTtnPjE7KXtpZihhPWFDbih0KSxMPW8uZyxWPWwoYXQodCx2TSksMTA3KSxKPXplKEdlKGF0KHQsS1cpKSksKCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpLmk+MSYmemUoR2UoYXQodCwodWcoKSxjZ2UpKSkpIT1ncyYmKG8uYysoVi5iK1YuYykpLyhvLmIrKFYuZCtWLmEpKTxKP0hpKGEsKHVnKCksVDQpLHplKEdlKGF0KHQsVDQpKSkremUoR2UoYXQodCxjZ2UpKSkpOighdC5hJiYodC5hPW5ldyBudChBaSx0LDEwLDExKSksdC5hKS5pPjEmJnplKEdlKGF0KHQsKHVnKCksb2dlKSkpKSE9Z3MmJihvLmMrKFYuYitWLmMpKS8oby5iKyhWLmQrVi5hKSk+SiYmSGkoYSwodWcoKSxUNCksYi5NYXRoLm1heCh6ZShHZShhdCh0LG1NKSkpLHplKEdlKGF0KGEsVDQpKSktemUoR2UoYXQodCxvZ2UpKSkpKSx6PW5ldyBRM2UocixDKSx3PXd3dCh6LGEsQiksRT13LmcsRT49TCYmRT09RSl7Zm9yKGY9MDtmPCghYS5hJiYoYS5hPW5ldyBudChBaSxhLDEwLDExKSksYS5hKS5pO2YrKylHcHQoZSxsKE9lKCghYS5hJiYoYS5hPW5ldyBudChBaSxhLDEwLDExKSksYS5hKSxmKSwyNyksbChPZSgoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSksZiksMjcpKTtTaHQodCx6KSxsMm4obyx3LmMpLHUybihvLHcuYil9LS1nfUhpKHQsKHVnKCksWlQpLG8uYiksSGkodCxaeCxvLmMpLG4uVmcoKX1mdW5jdGlvbiB0SW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlO2Zvcih0LlVnKCJJbnRlcmFjdGl2ZSBub2RlIGxheWVyaW5nIiwxKSxuPW5ldyBidCxCPW5ldyBHKGUuYSk7Qi5hPEIuYy5jLmxlbmd0aDspe2ZvcihDPWwocmUoQiksMTApLHc9Qy5uLmEsZz13K0Muby5hLGc9Yi5NYXRoLm1heCh3KzEsZyksVGU9bmV3IFVhKG4sMCkscj1udWxsO1RlLmI8VGUuZC5nYygpOylpZih0ZT0obXIoVGUuYjxUZS5kLmdjKCkpLGwoVGUuZC5YYihUZS5jPVRlLmIrKyksNTc4KSksdGUuYz49Zyl7bXIoVGUuYj4wKSxUZS5hLlhiKFRlLmM9LS1UZS5iKTticmVha31lbHNlIHRlLmE+dyYmKHI/KHJhKHIuYix0ZS5iKSxyLmE9Yi5NYXRoLm1heChyLmEsdGUuYSkscGgoVGUpKToodnQodGUuYixDKSx0ZS5jPWIuTWF0aC5taW4odGUuYyx3KSx0ZS5hPWIuTWF0aC5tYXgodGUuYSxnKSxyPXRlKSk7cnx8KHI9bmV3IEdRZSxyLmM9dyxyLmE9ZyxieShUZSxyKSx2dChyLmIsQykpfWZvcihmPWUuYixFPTAsZmU9bmV3IEcobik7ZmUuYTxmZS5jLmMubGVuZ3RoOylmb3IodGU9bChyZShmZSksNTc4KSxhPW5ldyB5dShlKSxhLnA9RSsrLCRuKGYuYyxhKSx6PW5ldyBHKHRlLmIpO3ouYTx6LmMuYy5sZW5ndGg7KUM9bChyZSh6KSwxMCksVmEoQyxhKSxDLnA9MDtmb3IoTD1uZXcgRyhlLmEpO0wuYTxMLmMuYy5sZW5ndGg7KWlmKEM9bChyZShMKSwxMCksQy5wPT0wKWZvcihKPXFidChDLGUpO0ouYS5nYygpIT0wOylWPWwoSi5hLmVjKCkuS2MoKS5QYigpLDEwKSxKLmEuQmMoVikhPW51bGwsS2EoSixxYnQoVixlKSk7Zm9yKG89bmV3IFVhKGYsMCk7by5iPG8uZC5nYygpOykobXIoby5iPG8uZC5nYygpKSxsKG8uZC5YYihvLmM9by5iKyspLDMwKSkuYS5jLmxlbmd0aD09MCYmcGgobyk7ZS5hLmMubGVuZ3RoPTAsdC5WZygpfWZ1bmN0aW9uIG5JbihlLHQsbixyLGEsbyxmKXt2YXIgZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXIsb2ksd3M7Zm9yKHo9MCxCbj0wLHc9bmV3IEcoZSk7dy5hPHcuYy5jLmxlbmd0aDspZz1sKHJlKHcpLDI3KSxGdnQoZyksej1iLk1hdGgubWF4KHosZy5nKSxCbis9Zy5nKmcuZjtmb3IoVj1Cbi9lLmMubGVuZ3RoLGFuPWo3bihlLFYpLEJuKz1lLmMubGVuZ3RoKmFuLHo9Yi5NYXRoLm1heCh6LGIuTWF0aC5zcXJ0KEJuKmYpKStuLmIsb2k9bi5iLHdzPW4uZCxCPTAsQz1uLmIrbi5jLGNuPW5ldyBvcyx1aShjbixwdCgwKSksb3Q9bmV3IG9zLEU9bmV3IFVhKGUsMCk7RS5iPEUuZC5nYygpOylnPShtcihFLmI8RS5kLmdjKCkpLGwoRS5kLlhiKEUuYz1FLmIrKyksMjcpKSx1cj1nLmcsTD1nLmYsb2krdXI+eiYmKG8mJihrbyhvdCxCKSxrbyhjbixwdChFLmItMSkpKSxvaT1uLmIsd3MrPUIrdCxCPTAsQz1iLk1hdGgubWF4KEMsbi5iK24uYyt1cikpLFV1KGcsb2kpLEd1KGcsd3MpLEM9Yi5NYXRoLm1heChDLG9pK3VyK24uYyksQj1iLk1hdGgubWF4KEIsTCksb2krPXVyK3Q7aWYoQz1iLk1hdGgubWF4KEMsciksam49d3MrQituLmEsam48YSYmKEIrPWEtam4sam49YSksbylmb3Iob2k9bi5iLEU9bmV3IFVhKGUsMCksa28oY24scHQoZS5jLmxlbmd0aCkpLFN0PVJyKGNuLDApLGZlPWwoQnIoU3QpLDE3KS5hLGtvKG90LEIpLFplPVJyKG90LDApLCRlPTA7RS5iPEUuZC5nYygpOylFLmI9PWZlJiYob2k9bi5iLCRlPXplKEdlKEJyKFplKSkpLGZlPWwoQnIoU3QpLDE3KS5hKSxnPShtcihFLmI8RS5kLmdjKCkpLGwoRS5kLlhiKEUuYz1FLmIrKyksMjcpKSxUZT1nLmYsTXcoZywkZSksSj0kZSxFLmI9PWZlJiYodGU9Qy1vaS1uLmMsTWU9Zy5nLER3KGcsdGUpLGM5ZShnLG5ldyBsdCh0ZSxKKSxuZXcgbHQoTWUsVGUpKSksb2krPWcuZyt0O3JldHVybiBuZXcgbHQoQyxqbil9ZnVuY3Rpb24gckluKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbjtmb3IodC5VZygiQ29tcG91bmQgZ3JhcGggcG9zdHByb2Nlc3NvciIsMSksbj1SdChCdChRKGUsKE50KCksbGRlKSkpKSxnPWwoUShlLChmdCgpLGpMZSkpLDIyOSksQz1uZXcgS3MsZmU9Zy5lYygpLktjKCk7ZmUuT2IoKTspe2Zvcih0ZT1sKGZlLlBiKCksMTgpLGY9bmV3IE9sKGcuY2ModGUpKSxDbigpLFZzKGYsbmV3IEdJKGUpKSxaZT1kM24oKFNuKDAsZi5jLmxlbmd0aCksbChmLmNbMF0sMjQ5KSkpLFN0PUNmdChsKGp0KGYsZi5jLmxlbmd0aC0xKSwyNDkpKSxNZT1aZS5pLGJFKFN0LmksTWUpP1RlPU1lLmU6VGU9ZW8oTWUpLEw9bTZuKHRlLGYpLENoKHRlLmEpLEI9bnVsbCxvPW5ldyBHKGYpO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSwyNDkpLEo9bmV3IHFhLG45ZShKLGEuYSxUZSksej1hLmIscj1uZXcgYmwsQWNlKHIsMCx6LmEpLER5KHIsSiksJGU9bmV3IEVvKEkxKHouYykpLG90PW5ldyBFbyhJMSh6LmQpKSxPaSgkZSxKKSxPaShvdCxKKSxCJiYoci5iPT0wP1Y9b3Q6Vj0obXIoci5iIT0wKSxsKHIuYS5hLmMsOCkpLGNuPWIuTWF0aC5hYnMoQi5hLVYuYSk+RGQsYW49Yi5NYXRoLmFicyhCLmItVi5iKT5EZCwoIW4mJmNuJiZhbnx8biYmKGNufHxhbikpJiZ1aSh0ZS5hLCRlKSksS2EodGUuYSxyKSxyLmI9PTA/Qj0kZTpCPShtcihyLmIhPTApLGwoci5jLmIuYyw4KSksejNuKHosTCxKKSxDZnQoYSk9PVN0JiYoZW8oU3QuaSkhPWEuYSYmKEo9bmV3IHFhLG45ZShKLGVvKFN0LmkpLFRlKSkscnQodGUsWTFlLEopKSxFOW4oeix0ZSxUZSksQy5hLnpjKHosQyk7cG8odGUsWmUpLEZhKHRlLFN0KX1mb3IoRT1DLmEuZWMoKS5LYygpO0UuT2IoKTspdz1sKEUuUGIoKSwxOCkscG8odyxudWxsKSxGYSh3LG51bGwpO3QuVmcoKX1mdW5jdGlvbiBpSW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihhPWwoUShlLChIYygpLHkzKSksODgpLEM9YT09KEpzKCksdWMpfHxhPT12Yz9RMTp2YyxuPWwoeWMoRmkobmV3IGJuKG51bGwsbmV3IGtuKGUuYiwxNikpLG5ldyBwSSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsWyhGbCgpLEVjKV0pKSksMTUpLHc9bCh5YyhmYyhuLk9jKCksbmV3IGRYZSh0KSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsW0VjXSkpKSwxNSksdy5HYyhsKHljKGZjKG4uT2MoKSxuZXcgZ1hlKHQpKSxQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbRWNdKSkpLDE2KSksdy5qZChuZXcgcFhlKEMpKSxCPW5ldyBLcChuZXcgYlhlKGEpKSxyPW5ldyBQcixnPXcuS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMjQwKSxFPWwoZi5hLDQwKSxSdChCdChmLmMpKT8oQi5hLnpjKEUsKEhuKCksUGIpKT09bnVsbCxuZXcgYmEoQi5hLlpjKEUsITEpKS5hLmdjKCk+MCYma2kocixFLGwobmV3IGJhKEIuYS5aYyhFLCExKSkuYS5WYygpLDQwKSksbmV3IGJhKEIuYS5hZChFLCEwKSkuYS5nYygpPjEmJmtpKHIsTDF0KEIsRSksRSkpOihuZXcgYmEoQi5hLlpjKEUsITEpKS5hLmdjKCk+MCYmKG89bChuZXcgYmEoQi5hLlpjKEUsITEpKS5hLlZjKCksNDApLHFlKG8pPT09cWUoaGMoem8oci5mLEUpKSkmJmwoUShFLChRaSgpLE9kZSkpLDE1KS5GYyhvKSksbmV3IGJhKEIuYS5hZChFLCEwKSkuYS5nYygpPjEmJihMPUwxdChCLEUpLHFlKGhjKHpvKHIuZixMKSkpPT09cWUoRSkmJmwoUShMLChRaSgpLE9kZSkpLDE1KS5GYyhFKSksQi5hLkJjKEUpIT1udWxsKX1mdW5jdGlvbiBld3QoZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlO2lmKGUuZ2MoKT09MSlyZXR1cm4gbChlLlhiKDApLDIzNSk7aWYoZS5nYygpPD0wKXJldHVybiBuZXcgS0g7Zm9yKGE9ZS5LYygpO2EuT2IoKTspe2ZvcihuPWwoYS5QYigpLDIzNSksVj0wLEM9SWksTD1JaSx3PWxvLEU9bG8sej1uZXcgRyhuLmUpO3ouYTx6LmMuYy5sZW5ndGg7KUI9bChyZSh6KSwxNTMpLFYrPWwoUShCLChiMCgpLHF4KSksMTcpLmEsQz1iLk1hdGgubWluKEMsQi5kLmEtQi5lLmEvMiksTD1iLk1hdGgubWluKEwsQi5kLmItQi5lLmIvMiksdz1iLk1hdGgubWF4KHcsQi5kLmErQi5lLmEvMiksRT1iLk1hdGgubWF4KEUsQi5kLmIrQi5lLmIvMik7cnQobiwoYjAoKSxxeCkscHQoVikpLHJ0KG4sKGJiKCksJEwpLG5ldyBsdChDLEwpKSxydChuLGhCLG5ldyBsdCh3LEUpKX1mb3IoQ24oKSxlLmpkKG5ldyB6OSksSj1uZXcgS0gscGMoSixsKGUuWGIoMCksOTYpKSxnPTAsVGU9MCxvPWUuS2MoKTtvLk9iKCk7KW49bChvLlBiKCksMjM1KSx0ZT1tYShKYShsKFEobiwoYmIoKSxoQikpLDgpKSxsKFEobiwkTCksOCkpLGc9Yi5NYXRoLm1heChnLHRlLmEpLFRlKz10ZS5hKnRlLmI7Zm9yKGc9Yi5NYXRoLm1heChnLGIuTWF0aC5zcXJ0KFRlKSp6ZShHZShRKEosKGIwKCksRzd0KSkpKSksZmU9emUoR2UoUShKLGtLKSkpLE1lPTAsJGU9MCxmPTAsdD1mZSxyPWUuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksMjM1KSx0ZT1tYShKYShsKFEobiwoYmIoKSxoQikpLDgpKSxsKFEobiwkTCksOCkpLE1lK3RlLmE+ZyYmKE1lPTAsJGUrPWYrZmUsZj0wKSxEX24oSixuLE1lLCRlKSx0PWIuTWF0aC5tYXgodCxNZSt0ZS5hKSxmPWIuTWF0aC5tYXgoZix0ZS5iKSxNZSs9dGUuYStmZTtyZXR1cm4gSn1mdW5jdGlvbiBzSW4oZSl7a2tlKCk7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2lmKGU9PW51bGx8fChvPWlWKGUpLFY9TzRuKG8pLFYlNCE9MCkpcmV0dXJuIG51bGw7aWYoSj1WLzR8MCxKPT0wKXJldHVybiBXZShBbCxDNiwyOCwwLDE1LDEpO2ZvcihMPW51bGwsdD0wLG49MCxyPTAsYT0wLGY9MCxnPTAsdz0wLEU9MCx6PTAsQj0wLEM9MCxMPVdlKEFsLEM2LDI4LEoqMywxNSwxKTt6PEotMTt6Kyspe2lmKCFlTyhmPW9bQysrXSl8fCFlTyhnPW9bQysrXSl8fCFlTyh3PW9bQysrXSl8fCFlTyhFPW9bQysrXSkpcmV0dXJuIG51bGw7dD1uZFtmXSxuPW5kW2ddLHI9bmRbd10sYT1uZFtFXSxMW0IrK109KHQ8PDJ8bj4+NCk8PDI0Pj4yNCxMW0IrK109KChuJjE1KTw8NHxyPj4yJjE1KTw8MjQ+PjI0LExbQisrXT0ocjw8NnxhKTw8MjQ+PjI0fXJldHVybiFlTyhmPW9bQysrXSl8fCFlTyhnPW9bQysrXSk/bnVsbDoodD1uZFtmXSxuPW5kW2ddLHc9b1tDKytdLEU9b1tDKytdLG5kW3ddPT0tMXx8bmRbRV09PS0xP3c9PTYxJiZFPT02MT9uJjE1P251bGw6KHRlPVdlKEFsLEM2LDI4LHoqMysxLDE1LDEpLHB1KEwsMCx0ZSwwLHoqMyksdGVbQl09KHQ8PDJ8bj4+NCk8PDI0Pj4yNCx0ZSk6dyE9NjEmJkU9PTYxPyhyPW5kW3ddLHImMz9udWxsOih0ZT1XZShBbCxDNiwyOCx6KjMrMiwxNSwxKSxwdShMLDAsdGUsMCx6KjMpLHRlW0IrK109KHQ8PDJ8bj4+NCk8PDI0Pj4yNCx0ZVtCXT0oKG4mMTUpPDw0fHI+PjImMTUpPDwyND4+MjQsdGUpKTpudWxsOihyPW5kW3ddLGE9bmRbRV0sTFtCKytdPSh0PDwyfG4+PjQpPDwyND4+MjQsTFtCKytdPSgobiYxNSk8PDR8cj4+MiYxNSk8PDI0Pj4yNCxMW0IrK109KHI8PDZ8YSk8PDI0Pj4yNCxMKSl9ZnVuY3Rpb24gYUluKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZTtmb3IodC5VZyhLM3QsMSksVj1sKFEoZSwoTnQoKSxicCkpLDIyMyksYT1uZXcgRyhlLmIpO2EuYTxhLmMuYy5sZW5ndGg7KWZvcihyPWwocmUoYSksMzApLEU9Sk8oci5hKSxmPUUsZz0wLHc9Zi5sZW5ndGg7Zzx3OysrZylpZihvPWZbZ10sby5rPT0oWm4oKSxBdSkpe2lmKFY9PShpcCgpLHM5KSlmb3IoTD1uZXcgRyhvLmopO0wuYTxMLmMuYy5sZW5ndGg7KUM9bChyZShMKSwxMiksQy5lLmMubGVuZ3RoPT0wfHxRNW4oQyksQy5nLmMubGVuZ3RoPT0wfHxKNW4oQyk7ZWxzZSBpZihEZShRKG8sKGZ0KCksemkpKSwxOCkpdGU9bChRKG8semkpLDE4KSxmZT1sKGQyKG8sKEN0KCksZXIpKS5LYygpLlBiKCksMTIpLFRlPWwoZDIobyxhcikuS2MoKS5QYigpLDEyKSxNZT1sKFEoZmUsemkpLDEyKSwkZT1sKFEoVGUsemkpLDEyKSxwbyh0ZSwkZSksRmEodGUsTWUpLFplPW5ldyBFbyhUZS5pLm4pLFplLmE9SWMoaGUobGUoRWEsMSksZHQsOCwwLFskZS5pLm4sJGUubiwkZS5hXSkpLmEsdWkodGUuYSxaZSksWmU9bmV3IEVvKGZlLmkubiksWmUuYT1JYyhoZShsZShFYSwxKSxkdCw4LDAsW01lLmkubixNZS5uLE1lLmFdKSkuYSx1aSh0ZS5hLFplKTtlbHNle2lmKG8uai5jLmxlbmd0aD49Mil7Zm9yKEo9ITAsQj1uZXcgRyhvLmopLG49bChyZShCKSwxMiksej1udWxsO0IuYTxCLmMuYy5sZW5ndGg7KWlmKHo9bixuPWwocmUoQiksMTIpLCFQaShRKHosemkpLFEobix6aSkpKXtKPSExO2JyZWFrfX1lbHNlIEo9ITE7Zm9yKEw9bmV3IEcoby5qKTtMLmE8TC5jLmMubGVuZ3RoOylDPWwocmUoTCksMTIpLEMuZS5jLmxlbmd0aD09MHx8QkNuKEMsSiksQy5nLmMubGVuZ3RoPT0wfHxGQ24oQyxKKX1WYShvLG51bGwpfXQuVmcoKX1mdW5jdGlvbiBvSW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplO2ZvcihnPW5ldyBHKGUuYS5iKTtnLmE8Zy5jLmMubGVuZ3RoOylmb3Iobz1sKHJlKGcpLDMwKSxNZT1uZXcgRyhvLmEpO01lLmE8TWUuYy5jLmxlbmd0aDspVGU9bChyZShNZSksMTApLHQuZ1tUZS5wXT1UZSx0LmFbVGUucF09VGUsdC5kW1RlLnBdPTA7Zm9yKHc9ZS5hLmIsdC5jPT0oeGQoKSxUMikmJih3PWxmKHcpKSxmPXcuS2MoKTtmLk9iKCk7KWZvcihvPWwoZi5QYigpLDMwKSx6PS0xLEI9by5hLHQubz09KEQxKCksWTEpJiYoej1JaSxCPWxmKEIpKSxaZT1CLktjKCk7WmUuT2IoKTspaWYoJGU9bChaZS5QYigpLDEwKSxMPW51bGwsdC5jPT1UMj9MPWwoanQoZS5iLmYsJGUucCksMTUpOkw9bChqdChlLmIuYiwkZS5wKSwxNSksTC5nYygpPjApaWYocj1MLmdjKCksRT11YShiLk1hdGguZmxvb3IoKHIrMSkvMikpLTEsYT11YShiLk1hdGguY2VpbCgocisxKS8yKSktMSx0Lm89PVkxKWZvcihDPWE7Qz49RTtDLS0pdC5hWyRlLnBdPT0kZSYmKEo9bChMLlhiKEMpLDQyKSxWPWwoSi5hLDEwKSwhVzAobixKLmIpJiZ6PmUuYi5lW1YucF0mJih0LmFbVi5wXT0kZSx0LmdbJGUucF09dC5nW1YucF0sdC5hWyRlLnBdPXQuZ1skZS5wXSx0LmZbdC5nWyRlLnBdLnBdPShIbigpLCEhKFJ0KHQuZlt0LmdbJGUucF0ucF0pJiRlLms9PShabigpLEFhKSkpLHo9ZS5iLmVbVi5wXSkpO2Vsc2UgZm9yKEM9RTtDPD1hO0MrKyl0LmFbJGUucF09PSRlJiYoZmU9bChMLlhiKEMpLDQyKSx0ZT1sKGZlLmEsMTApLCFXMChuLGZlLmIpJiZ6PGUuYi5lW3RlLnBdJiYodC5hW3RlLnBdPSRlLHQuZ1skZS5wXT10LmdbdGUucF0sdC5hWyRlLnBdPXQuZ1skZS5wXSx0LmZbdC5nWyRlLnBdLnBdPShIbigpLCEhKFJ0KHQuZlt0LmdbJGUucF0ucF0pJiRlLms9PShabigpLEFhKSkpLHo9ZS5iLmVbdGUucF0pKX1mdW5jdGlvbiB0d3QoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuO3JldHVybiBNZT1lLmNbKFNuKDAsdC5jLmxlbmd0aCksbCh0LmNbMF0sMTgpKS5wXSxTdD1lLmNbKFNuKDEsdC5jLmxlbmd0aCksbCh0LmNbMV0sMTgpKS5wXSxNZS5hLmUuZS1NZS5hLmEtKE1lLmIuZS5lLU1lLmIuYSk9PTAmJlN0LmEuZS5lLVN0LmEuYS0oU3QuYi5lLmUtU3QuYi5hKT09MHx8KGZlPU1lLmIuZS5mLCFEZShmZSwxMCkpPyExOih0ZT1sKGZlLDEwKSxaZT1lLmlbdGUucF0sb3Q9dGUuYz9nYyh0ZS5jLmEsdGUsMCk6LTEsbz1ncyxvdD4wJiYoYT1sKGp0KHRlLmMuYSxvdC0xKSwxMCksZj1lLmlbYS5wXSxjbj1iLk1hdGguY2VpbChqNShlLm4sYSx0ZSkpLG89WmUuYS5lLXRlLmQuZC0oZi5hLmUrYS5vLmIrYS5kLmEpLWNuKSxFPWdzLG90PHRlLmMuYS5jLmxlbmd0aC0xJiYodz1sKGp0KHRlLmMuYSxvdCsxKSwxMCksQz1lLmlbdy5wXSxjbj1iLk1hdGguY2VpbChqNShlLm4sdyx0ZSkpLEU9Qy5hLmUtdy5kLmQtKFplLmEuZSt0ZS5vLmIrdGUuZC5hKS1jbiksbiYmKEExKCksZjAoTmQpLGIuTWF0aC5hYnMoby1FKTw9TmR8fG89PUV8fGlzTmFOKG8pJiZpc05hTihFKSk/ITA6KHI9emFlKE1lLmEpLGc9LXphZShNZS5iKSxMPS16YWUoU3QuYSksVGU9emFlKFN0LmIpLEo9TWUuYS5lLmUtTWUuYS5hLShNZS5iLmUuZS1NZS5iLmEpPjAmJlN0LmEuZS5lLVN0LmEuYS0oU3QuYi5lLmUtU3QuYi5hKTwwLFY9TWUuYS5lLmUtTWUuYS5hLShNZS5iLmUuZS1NZS5iLmEpPDAmJlN0LmEuZS5lLVN0LmEuYS0oU3QuYi5lLmUtU3QuYi5hKT4wLHo9TWUuYS5lLmUrTWUuYi5hPFN0LmIuZS5lK1N0LmEuYSxCPU1lLmEuZS5lK01lLmIuYT5TdC5iLmUuZStTdC5hLmEsJGU9MCwhSiYmIVYmJihCP28rTD4wPyRlPUw6RS1yPjAmJigkZT1yKTp6JiYobytnPjA/JGU9ZzpFLVRlPjAmJigkZT1UZSkpKSxaZS5hLmUrPSRlLFplLmImJihaZS5kLmUrPSRlKSwhMSkpfWZ1bmN0aW9uIG53dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEI7aWYocj1uZXcgZWYodC5MZigpLmEsdC5MZigpLmIsdC5NZigpLmEsdC5NZigpLmIpLGE9bmV3ICQ4LGUuYylmb3IoZj1uZXcgRyh0LlJmKCkpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxODcpLGEuYz1vLkxmKCkuYSt0LkxmKCkuYSxhLmQ9by5MZigpLmIrdC5MZigpLmIsYS5iPW8uTWYoKS5hLGEuYT1vLk1mKCkuYiwkQShyLGEpO2ZvcihFPW5ldyBHKHQuWGYoKSk7RS5hPEUuYy5jLmxlbmd0aDspe2lmKHc9bChyZShFKSw4NTIpLEM9dy5MZigpLmErdC5MZigpLmEsTD13LkxmKCkuYit0LkxmKCkuYixlLmUmJihhLmM9QyxhLmQ9TCxhLmI9dy5NZigpLmEsYS5hPXcuTWYoKS5iLCRBKHIsYSkpLGUuZClmb3IoZj1uZXcgRyh3LlJmKCkpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxODcpLGEuYz1vLkxmKCkuYStDLGEuZD1vLkxmKCkuYitMLGEuYj1vLk1mKCkuYSxhLmE9by5NZigpLmIsJEEocixhKTtpZihlLmIpe2lmKEI9bmV3IGx0KC1uLC1uKSxsKHQub2YoKHBpKCksUzQpKSwxODEpLkhjKChSbCgpLFliKSkpZm9yKGY9bmV3IEcody5SZigpKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTg3KSxCLmErPW8uTWYoKS5hK24sQi5iKz1vLk1mKCkuYituO0IuYT1iLk1hdGgubWF4KEIuYSwwKSxCLmI9Yi5NYXRoLm1heChCLmIsMCksRW10KHIsdy5XZigpLHcuVWYoKSx0LHcsQixuKX19ZS5iJiZFbXQocix0LldmKCksdC5VZigpLHQsbnVsbCxudWxsLG4pLGc9bmV3IHhhZSh0LlZmKCkpLGcuZD1iLk1hdGgubWF4KDAsdC5MZigpLmItci5kKSxnLmE9Yi5NYXRoLm1heCgwLHIuZCtyLmEtKHQuTGYoKS5iK3QuTWYoKS5iKSksZy5iPWIuTWF0aC5tYXgoMCx0LkxmKCkuYS1yLmMpLGcuYz1iLk1hdGgubWF4KDAsci5jK3IuYi0odC5MZigpLmErdC5NZigpLmEpKSx0LlpmKGcpfWZ1bmN0aW9uIGNJbigpe3ZhciBlPVsiXFx1MDAwMCIsIlxcdTAwMDEiLCJcXHUwMDAyIiwiXFx1MDAwMyIsIlxcdTAwMDQiLCJcXHUwMDA1IiwiXFx1MDAwNiIsIlxcdTAwMDciLCJcXGIiLCJcXHQiLCJcXG4iLCJcXHUwMDBCIiwiXFxmIiwiXFxyIiwiXFx1MDAwRSIsIlxcdTAwMEYiLCJcXHUwMDEwIiwiXFx1MDAxMSIsIlxcdTAwMTIiLCJcXHUwMDEzIiwiXFx1MDAxNCIsIlxcdTAwMTUiLCJcXHUwMDE2IiwiXFx1MDAxNyIsIlxcdTAwMTgiLCJcXHUwMDE5IiwiXFx1MDAxQSIsIlxcdTAwMUIiLCJcXHUwMDFDIiwiXFx1MDAxRCIsIlxcdTAwMUUiLCJcXHUwMDFGIl07cmV0dXJuIGVbMzRdPSdcXCInLGVbOTJdPSJcXFxcIixlWzE3M109IlxcdTAwYWQiLGVbMTUzNl09IlxcdTA2MDAiLGVbMTUzN109IlxcdTA2MDEiLGVbMTUzOF09IlxcdTA2MDIiLGVbMTUzOV09IlxcdTA2MDMiLGVbMTc1N109IlxcdTA2ZGQiLGVbMTgwN109IlxcdTA3MGYiLGVbNjA2OF09IlxcdTE3YjQiLGVbNjA2OV09IlxcdTE3YjUiLGVbODIwM109IlxcdTIwMGIiLGVbODIwNF09IlxcdTIwMGMiLGVbODIwNV09IlxcdTIwMGQiLGVbODIwNl09IlxcdTIwMGUiLGVbODIwN109IlxcdTIwMGYiLGVbODIzMl09IlxcdTIwMjgiLGVbODIzM109IlxcdTIwMjkiLGVbODIzNF09IlxcdTIwMmEiLGVbODIzNV09IlxcdTIwMmIiLGVbODIzNl09IlxcdTIwMmMiLGVbODIzN109IlxcdTIwMmQiLGVbODIzOF09IlxcdTIwMmUiLGVbODI4OF09IlxcdTIwNjAiLGVbODI4OV09IlxcdTIwNjEiLGVbODI5MF09IlxcdTIwNjIiLGVbODI5MV09IlxcdTIwNjMiLGVbODI5Ml09IlxcdTIwNjQiLGVbODI5OF09IlxcdTIwNmEiLGVbODI5OV09IlxcdTIwNmIiLGVbODMwMF09IlxcdTIwNmMiLGVbODMwMV09IlxcdTIwNmQiLGVbODMwMl09IlxcdTIwNmUiLGVbODMwM109IlxcdTIwNmYiLGVbNjUyNzldPSJcXHVmZWZmIixlWzY1NTI5XT0iXFx1ZmZmOSIsZVs2NTUzMF09IlxcdWZmZmEiLGVbNjU1MzFdPSJcXHVmZmZiIixlfWZ1bmN0aW9uIHJ3dChlKXtzdyhlLG5ldyBYbShhM2UoVXoobncoWnYodHcoZXcobmV3IHgxLFl1KSwiRUxLIEZvcmNlIiksIkZvcmNlLWJhc2VkIGFsZ29yaXRobSBwcm92aWRlZCBieSB0aGUgRWNsaXBzZSBMYXlvdXQgS2VybmVsLiBJbXBsZW1lbnRzIG1ldGhvZHMgdGhhdCBmb2xsb3cgcGh5c2ljYWwgYW5hbG9naWVzIGJ5IHNpbXVsYXRpbmcgZm9yY2VzIHRoYXQgbW92ZSB0aGUgbm9kZXMgaW50byBhIGJhbGFuY2VkIGRpc3RyaWJ1dGlvbi4gQ3VycmVudGx5IHRoZSBvcmlnaW5hbCBFYWRlcyBtb2RlbCBhbmQgdGhlIEZydWNodGVybWFuIC0gUmVpbmdvbGQgbW9kZWwgYXJlIHN1cHBvcnRlZC4iKSxuZXcgbGQpLFl1KSxycygoSEUoKSx5WSksaGUobGUoeFksMSksaXQsMjQ1LDAsW3ZZXSkpKSkpLGd0KGUsWXUsTlAscHQoMSkpLGd0KGUsWXUsSnksODApLGd0KGUsWXUsT2hlLDUpLGd0KGUsWXUsT3gsbFQpLGd0KGUsWXUsb0cscHQoMSkpLGd0KGUsWXUsbEwsKEhuKCksITApKSxndChlLFl1LFh3LG5BZSksZ3QoZSxZdSxoTCxJdChaX2UpKSxndChlLFl1LE5oZSxJdChyQWUpKSxndChlLFl1LGNHLCExKSxndChlLFl1LGZMLEl0KHRBZSkpLGd0KGUsWXUsaFQsSXQoWDd0KSksZ3QoZSxZdSxOeCxJdChRN3QpKSxndChlLFl1LHg2LEl0KFk3dCkpLGd0KGUsWXUsZlQsSXQoVzd0KSksZ3QoZSxZdSxkVCxJdChaN3QpKSxndChlLFl1LGFHLEl0KGVBZSkpLGd0KGUsWXUsRGhlLEl0KFowZSkpLGd0KGUsWXUsSUVlLEl0KHhLKSksZ3QoZSxZdSxJaGUsSXQoSjBlKSksZ3QoZSxZdSxPRWUsSXQoaUFlKSksZ3QoZSxZdSxQUCxJdChzOHQpKSxndChlLFl1LEJQLEl0KGE4dCkpLGd0KGUsWXUsRlAsSXQoaTh0KSksZ3QoZSxZdSxSUCxJdChyOHQpKSxndChlLFl1LFF3LHNBZSl9ZnVuY3Rpb24gX2IoZSx0KXtEaSgpO3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2lmKGRfKHVDKT09MCl7Zm9yKEw9V2UoQk9uLGR0LDEyMix4QXQubGVuZ3RoLDAsMSksZj0wO2Y8TC5sZW5ndGg7ZisrKUxbZl09bmV3IF9oKDQpO2ZvcihyPW5ldyBoXyxvPTA7bzxXUGUubGVuZ3RoO28rKyl7aWYoQz1uZXcgX2goNCksbzw4ND8oZz1vKjIsej0oWG4oZyxiMGUubGVuZ3RoKSxiMGUuY2hhckNvZGVBdChnKSksQj0oWG4oZysxLGIwZS5sZW5ndGgpLGIwZS5jaGFyQ29kZUF0KGcrMSkpLEV1KEMseixCKSk6KGc9KG8tODQpKjIsRXUoQyxZUGVbZ10sWVBlW2crMV0pKSx3PVdQZVtvXSx2bih3LCJTcGVjaWFscyIpJiZFdShDLDY1NTIwLDY1NTMzKSx2bih3LFk1dCkmJihFdShDLDk4MzA0MCwxMDQ4NTczKSxFdShDLDEwNDg1NzYsMTExNDEwOSkpLHJjKHVDLHcsQykscmMoS00sdyxVeShDKSksRT1yLmEubGVuZ3RoLDA8RT9yLmE9dGYoci5hLDAsMCk6MD5FJiYoci5hKz1NbnQoV2Uoa2YsQWQsMjgsLUUsMTUsMSkpKSxyLmErPSJJcyIscGQodyxjbCgzMikpPj0wKWZvcihhPTA7YTx3Lmxlbmd0aDthKyspWG4oYSx3Lmxlbmd0aCksdy5jaGFyQ29kZUF0KGEpIT0zMiYmVWsociwoWG4oYSx3Lmxlbmd0aCksdy5jaGFyQ29kZUF0KGEpKSk7ZWxzZSByLmErPSIiK3c7RjhlKHIuYSx3LCEwKX1GOGUocDBlLCJDbiIsITEpLEY4ZSgkU2UsIkNuIiwhMCksbj1uZXcgX2goNCksRXUobiwwLFRUKSxyYyh1QywiQUxMIixuKSxyYyhLTSwiQUxMIixVeShuKSksIVA0JiYoUDQ9bmV3IFByKSxyYyhQNCxwMGUscDBlKSwhUDQmJihQND1uZXcgUHIpLHJjKFA0LCRTZSwkU2UpLCFQNCYmKFA0PW5ldyBQcikscmMoUDQsIkFMTCIsIkFMTCIpfXJldHVybiBWPWwoeHUodD91QzpLTSxlKSwxMzgpLFZ9ZnVuY3Rpb24gaXd0KGUpe3N3KGUsbmV3IFhtKGEzZShVeihudyhadih0dyhldyhuZXcgeDEsWHUpLCJFTEsgTXIuIFRyZWUiKSwiVHJlZS1iYXNlZCBhbGdvcml0aG0gcHJvdmlkZWQgYnkgdGhlIEVjbGlwc2UgTGF5b3V0IEtlcm5lbC4gQ29tcHV0ZXMgYSBzcGFubmluZyB0cmVlIG9mIHRoZSBpbnB1dCBncmFwaCBhbmQgYXJyYW5nZXMgYWxsIG5vZGVzIGFjY29yZGluZyB0byB0aGUgcmVzdWx0aW5nIHBhcmVudC1jaGlsZHJlbiBoaWVyYXJjaHkuIEkgcGl0eSB0aGUgZm9vbCB3aG8gZG9lc24ndCB1c2UgTXIuIFRyZWUgTGF5b3V0LiIpLG5ldyBXdGUpLGJ5dCksdW4oKEhFKCksWGdlKSkpKSksZ3QoZSxYdSxYdyxwSWUpLGd0KGUsWHUsSnksMjApLGd0KGUsWHUsZGZlLDMpLGd0KGUsWHUsT3gsbFQpLGd0KGUsWHUsTlAscHQoMSkpLGd0KGUsWHUsbEwsKEhuKCksITApKSxndChlLFh1LFZQLEl0KGxJZSkpLGd0KGUsWHUsZ2ZlLGhJZSksZ3QoZSxYdSxoTCxJdChrVHQpKSxndChlLFh1LEFHLEl0KEVUdCkpLGd0KGUsWHUseDYsSXQoQ1R0KSksZ3QoZSxYdSxoVCxJdChTVHQpKSxndChlLFh1LFB4LEl0KF9UdCkpLGd0KGUsWHUsTngsSXQoQVR0KSksZ3QoZSxYdSxmVCxJdChUVHQpKSxndChlLFh1LGZMLEl0KGRJZSkpLGd0KGUsWHUsZFQsSXQoTFR0KSksZ3QoZSxYdSxiQ2UsSXQod0llKSksZ3QoZSxYdSx2Q2UsSXQoYkllKSksZ3QoZSxYdSxQUCxJdChPVHQpKSxndChlLFh1LEJQLEl0KE5UdCkpLGd0KGUsWHUsRlAsSXQoSVR0KSksZ3QoZSxYdSxSUCxJdChEVHQpKSxndChlLFh1LFF3LHZJZSksZ3QoZSxYdSxwQ2UsSXQoVzYpKSxndChlLFh1LG1DZSxJdCgkZGUpKSxndChlLFh1LGdDZSxJdCgkZCkpLGd0KGUsWHUsZkNlLEl0KHVJZSkpLGd0KGUsWHUsZENlLEl0KGZJZSkpfWZ1bmN0aW9uIHN3dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKEU9bChsKCRpKGUucix0KSwyMSksODcpLGY9enhuKGUsdCksbj1lLnUuSGMoKFJsKCksTk0pKSx3PUUuS2MoKTt3Lk9iKCk7KWlmKGc9bCh3LlBiKCksMTE3KSwhKCFnLmN8fGcuYy5kLmMubGVuZ3RoPD0wKSl7c3dpdGNoKEI9Zy5iLk1mKCksQz1nLmMsTD1DLmksTC5iPShvPUMubixDLmUuYStvLmIrby5jKSxMLmE9KGE9Qy5uLEMuZS5iK2EuZCthLmEpLHQuZyl7Y2FzZSAxOmcuYT8oTC5jPShCLmEtTC5iKS8yLFowKEMsKEJsKCksQmIpKSk6Znx8bj8oTC5jPS1MLmItZS5zLFowKEMsKEJsKCksdjApKSk6KEwuYz1CLmErZS5zLFowKEMsKEJsKCksRmQpKSksTC5kPS1MLmEtZS50LHZkKEMsKG9sKCksdzApKTticmVhaztjYXNlIDM6Zy5hPyhMLmM9KEIuYS1MLmIpLzIsWjAoQywoQmwoKSxCYikpKTpmfHxuPyhMLmM9LUwuYi1lLnMsWjAoQywoQmwoKSx2MCkpKTooTC5jPUIuYStlLnMsWjAoQywoQmwoKSxGZCkpKSxMLmQ9Qi5iK2UudCx2ZChDLChvbCgpLGExKSk7YnJlYWs7Y2FzZSAyOmcuYT8ocj1lLnY/TC5hOmwoanQoQy5kLDApLDE4NykuTWYoKS5iLEwuZD0oQi5iLXIpLzIsdmQoQywob2woKSxGYikpKTpmfHxuPyhMLmQ9LUwuYS1lLnQsdmQoQywob2woKSx3MCkpKTooTC5kPUIuYitlLnQsdmQoQywob2woKSxhMSkpKSxMLmM9Qi5hK2UucyxaMChDLChCbCgpLEZkKSk7YnJlYWs7Y2FzZSA0OmcuYT8ocj1lLnY/TC5hOmwoanQoQy5kLDApLDE4NykuTWYoKS5iLEwuZD0oQi5iLXIpLzIsdmQoQywob2woKSxGYikpKTpmfHxuPyhMLmQ9LUwuYS1lLnQsdmQoQywob2woKSx3MCkpKTooTC5kPUIuYitlLnQsdmQoQywob2woKSxhMSkpKSxMLmM9LUwuYi1lLnMsWjAoQywoQmwoKSx2MCkpfWY9ITF9fWZ1bmN0aW9uIHVJbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGU7aWYoQj0hMSxMPSExLFA1KGwoUShyLChOdCgpLE1zKSksMTAxKSkpe2Y9ITEsZz0hMTtlOmZvcihWPW5ldyBHKHIuaik7Vi5hPFYuYy5jLmxlbmd0aDspZm9yKHo9bChyZShWKSwxMiksdGU9cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbbmV3IFQ1KHopLG5ldyBDOCh6KV0pKSk7anIodGUpOylpZihKPWwoeHIodGUpLDEyKSwhUnQoQnQoUShKLmksUUwpKSkpe2lmKHouaj09KEN0KCksUW4pKXtmPSEwO2JyZWFrIGV9aWYoei5qPT1Ecil7Zz0hMDticmVhayBlfX1CPWcmJiFmLEw9ZiYmIWd9aWYoIUImJiFMJiZyLmIuYy5sZW5ndGghPTApe2ZvcihDPTAsRT1uZXcgRyhyLmIpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSw3MiksQys9dy5uLmIrdy5vLmIvMjtDLz1yLmIuYy5sZW5ndGgsVGU9Qz49ci5vLmIvMn1lbHNlIFRlPSFMO1RlPyhmZT1sKFEociwoZnQoKSxReCkpLDE1KSxmZT9CP289ZmU6KGE9bChRKHIsR3gpLDE1KSxhP2ZlLmdjKCk8PWEuZ2MoKT9vPWZlOm89YToobz1uZXcgYnQscnQocixHeCxvKSkpOihvPW5ldyBidCxydChyLFF4LG8pKSk6KGE9bChRKHIsKGZ0KCksR3gpKSwxNSksYT9MP289YTooZmU9bChRKHIsUXgpLDE1KSxmZT9hLmdjKCk8PWZlLmdjKCk/bz1hOm89ZmU6KG89bmV3IGJ0LHJ0KHIsUXgsbykpKToobz1uZXcgYnQscnQocixHeCxvKSkpLG8uRmMoZSkscnQoZSwoZnQoKSxyVyksbiksdC5kPT1uPyhGYSh0LG51bGwpLG4uZS5jLmxlbmd0aCtuLmcuYy5sZW5ndGg9PTAmJk1jKG4sbnVsbCksVHluKG4pKToocG8odCxudWxsKSxuLmUuYy5sZW5ndGgrbi5nLmMubGVuZ3RoPT0wJiZNYyhuLG51bGwpKSxDaCh0LmEpfWZ1bmN0aW9uIGxJbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXIsb2ksd3M7Zm9yKG4uVWcoIk1pbldpZHRoIGxheWVyaW5nIiwxKSx6PXQuYixTdD10LmEsd3M9bChRKHQsKE50KCksek1lKSksMTcpLmEsZz1sKFEodCxxTWUpLDE3KS5hLGUuYj16ZShHZShRKHQseDApKSksZS5kPWdzLCRlPW5ldyBHKFN0KTskZS5hPCRlLmMuYy5sZW5ndGg7KVRlPWwocmUoJGUpLDEwKSxUZS5rPT0oWm4oKSxQcykmJihCbj1UZS5vLmIsZS5kPWIuTWF0aC5taW4oZS5kLEJuKSk7Zm9yKGUuZD1iLk1hdGgubWF4KDEsZS5kKSxjbj1TdC5jLmxlbmd0aCxlLmM9V2UoVnIsZGksMjgsY24sMTUsMSksZS5mPVdlKFZyLGRpLDI4LGNuLDE1LDEpLGUuZT1XZShOYSxabywyOCxjbiwxNSwxKSxFPTAsZS5hPTAsWmU9bmV3IEcoU3QpO1plLmE8WmUuYy5jLmxlbmd0aDspVGU9bChyZShaZSksMTApLFRlLnA9RSsrLGUuY1tUZS5wXT0kMHQoa2EoVGUpKSxlLmZbVGUucF09JDB0KHFzKFRlKSksZS5lW1RlLnBdPVRlLm8uYi9lLmQsZS5hKz1lLmVbVGUucF07Zm9yKGUuYi89ZS5kLGUuYS89Y24sb3Q9ZUVuKFN0KSxWcyhTdCxfNWUobmV3IERZZShlKSkpLEo9Z3MsVj1JaSxmPW51bGwsb2k9d3MsdXI9d3Msbz1nLGE9Zyx3czwwJiYob2k9bChqRGUuYS5JZCgpLDE3KS5hLHVyPWwoakRlLmIuSWQoKSwxNykuYSksZzwwJiYobz1sKFJEZS5hLklkKCksMTcpLmEsYT1sKFJEZS5iLklkKCksMTcpLmEpLGpuPW9pO2puPD11cjtqbisrKWZvcihyPW87cjw9YTtyKyspYW49VkFuKGUsam4scixTdCxvdCksZmU9emUoR2UoYW4uYSkpLEI9bChhbi5iLDE1KSx0ZT1CLmdjKCksKGZlPEp8fGZlPT1KJiZ0ZTxWKSYmKEo9ZmUsVj10ZSxmPUIpO2ZvcihMPWYuS2MoKTtMLk9iKCk7KXtmb3IoQz1sKEwuUGIoKSwxNSksdz1uZXcgeXUodCksTWU9Qy5LYygpO01lLk9iKCk7KVRlPWwoTWUuUGIoKSwxMCksVmEoVGUsdyk7JG4oei5jLHcpfUpOKHopLFN0LmMubGVuZ3RoPTAsbi5WZygpfWZ1bmN0aW9uIGhJbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXI7aWYobi5VZygiU3BsaW5lIGVkZ2Ugcm91dGluZyIsMSksdC5iLmMubGVuZ3RoPT0wKXt0LmYuYT0wLG4uVmcoKTtyZXR1cm59VGU9emUoR2UoUSh0LChOdCgpLFY2KSkpKSxnPXplKEdlKFEodCx2dikpKSxmPXplKEdlKFEodCxxNikpKSxmZT1sKFEodCxyZGUpLDM1MCksY249ZmU9PShTRSgpLGFNKSxTdD16ZShHZShRKHQsT01lKSkpLGUuZD10LGUuai5jLmxlbmd0aD0wLGUuYS5jLmxlbmd0aD0wLE5sKGUuayksdz1sKGp0KHQuYiwwKSwzMCksQz1McSh3LmEsKElVKCksSUIpKSxWPWwoanQodC5iLHQuYi5jLmxlbmd0aC0xKSwzMCksTD1McShWLmEsSUIpLEo9bmV3IEcodC5iKSx0ZT1udWxsLHVyPTA7ZG97Zm9yKE1lPUouYTxKLmMuYy5sZW5ndGg/bChyZShKKSwzMCk6bnVsbCxVRG4oZSx0ZSxNZSksdkFuKGUpLGFuPXZ1bihnM24oVEgoRmkobmV3IGJuKG51bGwsbmV3IGtuKGUuaSwxNikpLG5ldyBTdGUpLG5ldyBfdGUpKSksam49MCwkZT11cixCPSF0ZXx8QyYmdGU9PXcsej0hTWV8fEwmJk1lPT1WLGFuPjA/KEU9MCx0ZSYmKEUrPWcpLEUrPShhbi0xKSpmLE1lJiYoRSs9ZyksY24mJk1lJiYoRT1iLk1hdGgubWF4KEUsTUNuKE1lLGYsVGUsU3QpKSksRTxUZSYmIUImJiF6JiYoam49KFRlLUUpLzIsRT1UZSksJGUrPUUpOiFCJiYheiYmKCRlKz1UZSksTWUmJk9rZShNZSwkZSksb3Q9bmV3IEcoZS5pKTtvdC5hPG90LmMuYy5sZW5ndGg7KVplPWwocmUob3QpLDEzMSksWmUuYS5jPXVyLFplLmEuYj0kZS11cixaZS5GPWpuLFplLnA9IXRlO3JhKGUuYSxlLmkpLHVyPSRlLE1lJiYodXIrPU1lLmMuYSksdGU9TWUsQj16fXdoaWxlKE1lKTtmb3IoYT1uZXcgRyhlLmopO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxOCksbz1yM24oZSxyKSxydChyLChmdCgpLHo2KSxvKSxCbj1xQ24oZSxyKSxydChyLGZ2LEJuKTt0LmYuYT11cixlLmQ9bnVsbCxuLlZnKCl9ZnVuY3Rpb24gZkluKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbjtmb3IoZS5iPXQsZS5hPWwoUSh0LChOdCgpLFBNZSkpLDE3KS5hLGUuYz1sKFEodCxGTWUpLDE3KS5hLGUuYz09MCYmKGUuYz1JaSksdGU9bmV3IFVhKHQuYiwwKTt0ZS5iPHRlLmQuZ2MoKTspe2ZvcihKPShtcih0ZS5iPHRlLmQuZ2MoKSksbCh0ZS5kLlhiKHRlLmM9dGUuYisrKSwzMCkpLGc9bmV3IGJ0LEM9LTEsJGU9LTEsTWU9bmV3IEcoSi5hKTtNZS5hPE1lLmMuYy5sZW5ndGg7KVRlPWwocmUoTWUpLDEwKSxYZygoT08oKSxuZXcgaHIoZHIoc3AoVGUpLmEuS2MoKSxuZXcgaikpKSk+PWUuYSYmKHI9R0FuKGUsVGUpLEM9Yi5NYXRoLm1heChDLHIuYiksJGU9Yi5NYXRoLm1heCgkZSxyLmQpLHZ0KGcsbmV3IGNhKFRlLHIpKSk7Zm9yKGNuPW5ldyBidCxFPTA7RTxDOysrRSlwdyhjbiwwLChtcih0ZS5iPjApLHRlLmEuWGIodGUuYz0tLXRlLmIpLGFuPW5ldyB5dShlLmIpLGJ5KHRlLGFuKSxtcih0ZS5iPHRlLmQuZ2MoKSksdGUuZC5YYih0ZS5jPXRlLmIrKyksYW4pKTtmb3IoZj1uZXcgRyhnKTtmLmE8Zi5jLmMubGVuZ3RoOylpZihhPWwocmUoZiksNDIpLHo9bChhLmIsNTgwKS5hLCEheilmb3IoQj1uZXcgRyh6KTtCLmE8Qi5jLmMubGVuZ3RoOylMPWwocmUoQiksMTApLHV4ZShlLEwsQ0ssY24pO2ZvcihuPW5ldyBidCx3PTA7dzwkZTsrK3cpdnQobiwoQm49bmV3IHl1KGUuYiksYnkodGUsQm4pLEJuKSk7Zm9yKG89bmV3IEcoZyk7by5hPG8uYy5jLmxlbmd0aDspaWYoYT1sKHJlKG8pLDQyKSxTdD1sKGEuYiw1ODApLmMsISFTdClmb3Iob3Q9bmV3IEcoU3QpO290LmE8b3QuYy5jLmxlbmd0aDspWmU9bChyZShvdCksMTApLHV4ZShlLFplLFNLLG4pfWZvcihmZT1uZXcgVWEodC5iLDApO2ZlLmI8ZmUuZC5nYygpOylWPShtcihmZS5iPGZlLmQuZ2MoKSksbChmZS5kLlhiKGZlLmM9ZmUuYisrKSwzMCkpLFYuYS5jLmxlbmd0aD09MCYmcGgoZmUpfWZ1bmN0aW9uIGF3dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGU7aWYoSj1lLmkhPTAsTWU9ITEsZmU9bnVsbCxoaChlLmUpKXtpZihDPXQuZ2MoKSxDPjApe2ZvcihCPUM8MTAwP251bGw6bmV3IG5iKEMpLEU9bmV3IFQ3ZSh0KSxWPUUuZyxmZT1XZShWcixkaSwyOCxDLDE1LDEpLHI9MCwkZT1uZXcgTHcoQyksYT0wO2E8ZS5pOysrYSl7Zz1lLmdbYV0sej1nO2U6Zm9yKFRlPTA7VGU8MjsrK1RlKXtmb3Iodz1DOy0tdz49MDspaWYoeiE9bnVsbD9QaSh6LFZbd10pOnFlKHopPT09cWUoVlt3XSkpe2ZlLmxlbmd0aDw9ciYmKHRlPWZlLGZlPVdlKFZyLGRpLDI4LDIqZmUubGVuZ3RoLDE1LDEpLHB1KHRlLDAsZmUsMCxyKSksZmVbcisrXT1hLHFyKCRlLFZbd10pO2JyZWFrIGV9aWYoej16LHFlKHopPT09cWUoZykpYnJlYWt9fWlmKEU9JGUsVj0kZS5nLEM9cixyPmZlLmxlbmd0aCYmKHRlPWZlLGZlPVdlKFZyLGRpLDI4LHIsMTUsMSkscHUodGUsMCxmZSwwLHIpKSxyPjApe2ZvcihNZT0hMCxvPTA7bzxyOysrbyl6PVZbb10sQj11aXQoZSxsKHosNzYpLEIpO2ZvcihmPXI7LS1mPj0wOyl2eChlLGZlW2ZdKTtpZihyIT1DKXtmb3IoYT1DOy0tYT49cjspdngoRSxhKTt0ZT1mZSxmZT1XZShWcixkaSwyOCxyLDE1LDEpLHB1KHRlLDAsZmUsMCxyKX10PUV9fX1lbHNlIGZvcih0PV83bihlLHQpLGE9ZS5pOy0tYT49MDspdC5IYyhlLmdbYV0pJiYodngoZSxhKSxNZT0hMCk7aWYoTWUpe2lmKGZlIT1udWxsKXtmb3Iobj10LmdjKCksTD1uPT0xP3JBKGUsNCx0LktjKCkuUGIoKSxudWxsLGZlWzBdLEopOnJBKGUsNix0LGZlLGZlWzBdLEopLEI9bjwxMDA/bnVsbDpuZXcgbmIobiksYT10LktjKCk7YS5PYigpOyl6PWEuUGIoKSxCPWQ0ZShlLGwoeiw3NiksQik7Qj8oQi5uaihMKSxCLm9qKCkpOk5pKGUuZSxMKX1lbHNle2ZvcihCPU9mbih0LmdjKCkpLGE9dC5LYygpO2EuT2IoKTspej1hLlBiKCksQj1kNGUoZSxsKHosNzYpLEIpO0ImJkIub2ooKX1yZXR1cm4hMH1lbHNlIHJldHVybiExfWZ1bmN0aW9uIGRJbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKG49bmV3IHhkdCh0KSxuLmF8fHFfbih0KSxFPWpTbih0KSx3PW5ldyBDdyx0ZT1uZXcgRWJ0LEo9bmV3IEcodC5hKTtKLmE8Si5jLmMubGVuZ3RoOylmb3IoVj1sKHJlKEopLDEwKSxhPW5ldyBocihkcihxcyhWKS5hLktjKCksbmV3IGopKTtqcihhKTspcj1sKHhyKGEpLDE4KSwoci5jLmkuaz09KFpuKCksVXMpfHxyLmQuaS5rPT1VcykmJihDPXREbihlLHIsRSx0ZSkseG4odyx0dWUoQy5kKSxDLmEpKTtmb3IoZj1uZXcgYnQsTWU9bChRKG4uYywoZnQoKSxwcCkpLDIxKS5LYygpO01lLk9iKCk7KXtzd2l0Y2goVGU9bChNZS5QYigpLDY0KSx6PXRlLmNbVGUuZ10sQj10ZS5iW1RlLmddLGc9dGUuYVtUZS5nXSxvPW51bGwsZmU9bnVsbCxUZS5nKXtjYXNlIDQ6bz1uZXcgZWYoZS5kLmEseixFLmIuYS1lLmQuYSxCLXopLGZlPW5ldyBlZihlLmQuYSx6LGcsQi16KSxndyhFLG5ldyBsdChvLmMrby5iLG8uZCkpLGd3KEUsbmV3IGx0KG8uYytvLmIsby5kK28uYSkpO2JyZWFrO2Nhc2UgMjpvPW5ldyBlZihFLmEuYSx6LGUuYy5hLUUuYS5hLEIteiksZmU9bmV3IGVmKGUuYy5hLWcseixnLEIteiksZ3coRSxuZXcgbHQoby5jLG8uZCkpLGd3KEUsbmV3IGx0KG8uYyxvLmQrby5hKSk7YnJlYWs7Y2FzZSAxOm89bmV3IGVmKHosZS5kLmIsQi16LEUuYi5iLWUuZC5iKSxmZT1uZXcgZWYoeixlLmQuYixCLXosZyksZ3coRSxuZXcgbHQoby5jLG8uZCtvLmEpKSxndyhFLG5ldyBsdChvLmMrby5iLG8uZCtvLmEpKTticmVhaztjYXNlIDM6bz1uZXcgZWYoeixFLmEuYixCLXosZS5jLmItRS5hLmIpLGZlPW5ldyBlZih6LGUuYy5iLWcsQi16LGcpLGd3KEUsbmV3IGx0KG8uYyxvLmQpKSxndyhFLG5ldyBsdChvLmMrby5iLG8uZCkpfW8mJihMPW5ldyBIUWUsTC5kPVRlLEwuYj1vLEwuYz1mZSxMLmE9TEgobCgkaSh3LHR1ZShUZSkpLDIxKSksJG4oZi5jLEwpKX1yZXR1cm4gcmEobi5iLGYpLG4uZD1WeW4ocE1uKEUpKSxufWZ1bmN0aW9uIG93dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEo7aWYobi5wW3QucF09PW51bGwpe2c9ITAsbi5wW3QucF09MCxmPXQsSj1uLm89PShEMSgpLHd2KT9pYTpncztkbyBhPWUuYi5lW2YucF0sbz1mLmMuYS5jLmxlbmd0aCxuLm89PXd2JiZhPjB8fG4ubz09WTEmJmE8by0xPyh3PW51bGwsRT1udWxsLG4ubz09WTE/dz1sKGp0KGYuYy5hLGErMSksMTApOnc9bChqdChmLmMuYSxhLTEpLDEwKSxFPW4uZ1t3LnBdLG93dChlLEUsbiksSj1lLmUud2coSix0LGYpLG4ualt0LnBdPT10JiYobi5qW3QucF09bi5qW0UucF0pLG4ualt0LnBdPT1uLmpbRS5wXT8oVj1qNShlLmQsZix3KSxuLm89PVkxPyhyPXplKG4ucFt0LnBdKSxMPXplKG4ucFtFLnBdKSt6ZShuLmRbdy5wXSktdy5kLmQtVi1mLmQuYS1mLm8uYi16ZShuLmRbZi5wXSksZz8oZz0hMSxuLnBbdC5wXT1iLk1hdGgubWluKEwsSikpOm4ucFt0LnBdPWIuTWF0aC5taW4ocixiLk1hdGgubWluKEwsSikpKToocj16ZShuLnBbdC5wXSksTD16ZShuLnBbRS5wXSkremUobi5kW3cucF0pK3cuby5iK3cuZC5hK1YrZi5kLmQtemUobi5kW2YucF0pLGc/KGc9ITEsbi5wW3QucF09Yi5NYXRoLm1heChMLEopKTpuLnBbdC5wXT1iLk1hdGgubWF4KHIsYi5NYXRoLm1heChMLEopKSkpOihWPXplKEdlKFEoZS5hLChOdCgpLG0zKSkpKSx6PWRmdChlLG4ualt0LnBdKSxDPWRmdChlLG4ualtFLnBdKSxuLm89PVkxPyhCPXplKG4ucFt0LnBdKSt6ZShuLmRbZi5wXSkrZi5vLmIrZi5kLmErVi0oemUobi5wW0UucF0pK3plKG4uZFt3LnBdKS13LmQuZCksJG90KHosQyxCKSk6KEI9emUobi5wW3QucF0pK3plKG4uZFtmLnBdKS1mLmQuZC16ZShuLnBbRS5wXSktemUobi5kW3cucF0pLXcuby5iLXcuZC5hLVYsJG90KHosQyxCKSkpKTpKPWUuZS53ZyhKLHQsZiksZj1uLmFbZi5wXTt3aGlsZShmIT10KTtVY24oZS5lLHQpfX1mdW5jdGlvbiBnSW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuO2lmKG49emUoR2UoUShlLmEuaiwoTnQoKSxfTWUpKSkpLG48LTF8fCFlLmEuaXx8VTgobChRKGUuYS5vLE1zKSwxMDEpKXx8T2MoZS5hLm8sKEN0KCksYXIpKS5nYygpPDImJk9jKGUuYS5vLGVyKS5nYygpPDIpcmV0dXJuITA7aWYoZS5hLmMua2coKSlyZXR1cm4hMTtmb3IoWmU9MCwkZT0wLE1lPW5ldyBidCx3PWUuYS5lLEU9MCxDPXcubGVuZ3RoO0U8QzsrK0Upe2ZvcihnPXdbRV0sQj1nLHo9MCxKPUIubGVuZ3RoO3o8SjsrK3ope2lmKEw9Qlt6XSxMLms9PShabigpLEF1KSl7JG4oTWUuYyxMKTtjb250aW51ZX1mb3Iocj1lLmJbTC5jLnBdW0wucF0sTC5rPT1Vcz8oci5iPTEsbChRKEwsKGZ0KCksemkpKSwxMikuaj09KEN0KCksYXIpJiYoJGUrPXIuYSkpOihhbj1PYyhMLChDdCgpLGVyKSksYW4uZGMoKXx8IVpzZShhbixuZXcgWDkpP3IuYz0xOihhPU9jKEwsYXIpLChhLmRjKCl8fCFac2UoYSxuZXcgVWVlKSkmJihaZSs9ci5hKSkpLGY9bmV3IGhyKGRyKHFzKEwpLmEuS2MoKSxuZXcgaikpO2pyKGYpOylvPWwoeHIoZiksMTgpLFplKz1yLmMsJGUrPXIuYixjbj1vLmQuaSxQNmUoZSxyLGNuKTtmb3IoZmU9TGgoaGUobGUoRmgsMSksUm4sMjAsMCxbT2MoTCwoQ3QoKSxRbikpLE9jKEwsRHIpXSkpLFN0PW5ldyBocihuZXcgQXllKGZlLmEubGVuZ3RoLGZlLmEpKTtqcihTdCk7KW90PWwoeHIoU3QpLDEyKSxUZT1sKFEob3QsKGZ0KCksamwpKSwxMCksVGUmJihaZSs9ci5jLCRlKz1yLmIsUDZlKGUscixUZSkpfWZvcihWPW5ldyBHKE1lKTtWLmE8Vi5jLmMubGVuZ3RoOylmb3IoTD1sKHJlKFYpLDEwKSxyPWUuYltMLmMucF1bTC5wXSxmPW5ldyBocihkcihxcyhMKS5hLktjKCksbmV3IGopKTtqcihmKTspbz1sKHhyKGYpLDE4KSxaZSs9ci5jLCRlKz1yLmIsY249by5kLmksUDZlKGUscixjbik7TWUuYy5sZW5ndGg9MH1yZXR1cm4gdD1aZSskZSx0ZT10PT0wP2dzOihaZS0kZSkvdCx0ZT49bn1mdW5jdGlvbiBwSW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyO2ZvcihNZT10LFRlPW5ldyBDdywkZT1uZXcgQ3csQz1BdyhNZSxmU2UpLHI9bmV3IE1hdChlLG4sVGUsJGUpLFA5bihyLmEsci5iLHIuYyxyLmQsQyksdz0oU3Q9VGUuaSxTdHx8KFRlLmk9bmV3IHE1KFRlLFRlLmMpKSksYW49dy5LYygpO2FuLk9iKCk7KWZvcihjbj1sKGFuLlBiKCksMTY2KSxhPWwoJGkoVGUsY24pLDIxKSxKPWEuS2MoKTtKLk9iKCk7KWlmKFY9Si5QYigpLFplPWwoWDUoZS5kLFYpLDE2NiksWmUpZz0oIWNuLmUmJihjbi5lPW5ldyBMbihjcyxjbiwxMCw5KSksY24uZSkscXIoZyxaZSk7ZWxzZSB0aHJvdyBmPVlnKE1lLFBkKSxCPXk0dCtWK3g0dCtmLHo9QitrVCx1ZShuZXcgZGQoeikpO2ZvcihFPShvdD0kZS5pLG90fHwoJGUuaT1uZXcgcTUoJGUsJGUuYykpKSxqbj1FLktjKCk7am4uT2IoKTspZm9yKEJuPWwoam4uUGIoKSwxNjYpLG89bCgkaSgkZSxCbiksMjEpLGZlPW8uS2MoKTtmZS5PYigpOylpZih0ZT1mZS5QYigpLFplPWwoWDUoZS5kLHRlKSwxNjYpLFplKUw9KCFCbi5nJiYoQm4uZz1uZXcgTG4oY3MsQm4sOSwxMCkpLEJuLmcpLHFyKEwsWmUpO2Vsc2UgdGhyb3cgZj1ZZyhNZSxQZCksQj15NHQrdGUreDR0K2Ysej1CK2tULHVlKG5ldyBkZCh6KSk7IW4uYiYmKG4uYj1uZXcgTG4oX3Isbiw0LDcpKSxuLmIuaSE9MCYmKCFuLmMmJihuLmM9bmV3IExuKF9yLG4sNSw4KSksbi5jLmkhPTApJiYoIW4uYiYmKG4uYj1uZXcgTG4oX3Isbiw0LDcpKSxuLmIuaTw9MSYmKCFuLmMmJihuLmM9bmV3IExuKF9yLG4sNSw4KSksbi5jLmk8PTEpKSYmKCFuLmEmJihuLmE9bmV3IG50KGNzLG4sNiw2KSksbi5hKS5pPT0xJiYodXI9bChPZSgoIW4uYSYmKG4uYT1uZXcgbnQoY3Msbiw2LDYpKSxuLmEpLDApLDE2NiksIWF1ZSh1cikmJiFvdWUodXIpJiYod1YodXIsbChPZSgoIW4uYiYmKG4uYj1uZXcgTG4oX3Isbiw0LDcpKSxuLmIpLDApLDg0KSkseVYodXIsbChPZSgoIW4uYyYmKG4uYz1uZXcgTG4oX3Isbiw1LDgpKSxuLmMpLDApLDg0KSkpKX1mdW5jdGlvbiBiSW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuO2ZvcihNZT1lLmEsJGU9MCxaZT1NZS5sZW5ndGg7JGU8WmU7KyskZSl7Zm9yKFRlPU1lWyRlXSxFPUlpLEM9SWksVj1uZXcgRyhUZS5lKTtWLmE8Vi5jLmMubGVuZ3RoOylCPWwocmUoViksMTApLGY9Qi5jP2djKEIuYy5hLEIsMCk6LTEsZj4wPyhMPWwoanQoQi5jLmEsZi0xKSwxMCksY249ajUoZS5iLEIsTCksdGU9Qi5uLmItQi5kLmQtKEwubi5iK0wuby5iK0wuZC5hK2NuKSk6dGU9Qi5uLmItQi5kLmQsRT1iLk1hdGgubWluKHRlLEUpLGY8Qi5jLmEuYy5sZW5ndGgtMT8oTD1sKGp0KEIuYy5hLGYrMSksMTApLGNuPWo1KGUuYixCLEwpLGZlPUwubi5iLUwuZC5kLShCLm4uYitCLm8uYitCLmQuYStjbikpOmZlPTIqQi5uLmIsQz1iLk1hdGgubWluKGZlLEMpO2Zvcih3PUlpLG89ITEsYT1sKGp0KFRlLmUsMCksMTApLEJuPW5ldyBHKGEuaik7Qm4uYTxCbi5jLmMubGVuZ3RoOylmb3IoYW49bChyZShCbiksMTIpLEo9YS5uLmIrYW4ubi5iK2FuLmEuYixyPW5ldyBHKGFuLmUpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxOCksb3Q9bi5jLHQ9b3QuaS5uLmIrb3Qubi5iK290LmEuYi1KLGIuTWF0aC5hYnModCk8Yi5NYXRoLmFicyh3KSYmYi5NYXRoLmFicyh0KTwodDwwP0U6QykmJih3PXQsbz0hMCk7Zm9yKGc9bChqdChUZS5lLFRlLmUuYy5sZW5ndGgtMSksMTApLFN0PW5ldyBHKGcuaik7U3QuYTxTdC5jLmMubGVuZ3RoOylmb3Iob3Q9bChyZShTdCksMTIpLEo9Zy5uLmIrb3Qubi5iK290LmEuYixyPW5ldyBHKG90LmcpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxOCksYW49bi5kLHQ9YW4uaS5uLmIrYW4ubi5iK2FuLmEuYi1KLGIuTWF0aC5hYnModCk8Yi5NYXRoLmFicyh3KSYmYi5NYXRoLmFicyh0KTwodDwwP0U6QykmJih3PXQsbz0hMCk7aWYobyYmdyE9MClmb3Ioej1uZXcgRyhUZS5lKTt6LmE8ei5jLmMubGVuZ3RoOylCPWwocmUoeiksMTApLEIubi5iKz13fX1mdW5jdGlvbiBtSW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO2lmKHI9bmV3IGJ0LGE9SWksbz1JaSxmPUlpLG4pZm9yKGE9ZS5mLmEsSj1uZXcgRyh0LmopO0ouYTxKLmMuYy5sZW5ndGg7KWZvcihWPWwocmUoSiksMTIpLHc9bmV3IEcoVi5nKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMTgpLGcuYS5iIT0wJiYoQz1sKEJrKGcuYSksOCksQy5hPGEmJihvPWEtQy5hLGY9SWksci5jLmxlbmd0aD0wLGE9Qy5hKSxDLmE8PWEmJigkbihyLmMsZyksZy5hLmI+MSYmKGY9Yi5NYXRoLm1pbihmLGIuTWF0aC5hYnMobChmZihnLmEsMSksOCkuYi1DLmIpKSkpKTtlbHNlIGZvcihKPW5ldyBHKHQuaik7Si5hPEouYy5jLmxlbmd0aDspZm9yKFY9bChyZShKKSwxMiksdz1uZXcgRyhWLmUpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxOCksZy5hLmIhPTAmJihCPWwobzAoZy5hKSw4KSxCLmE+YSYmKG89Qi5hLWEsZj1JaSxyLmMubGVuZ3RoPTAsYT1CLmEpLEIuYT49YSYmKCRuKHIuYyxnKSxnLmEuYj4xJiYoZj1iLk1hdGgubWluKGYsYi5NYXRoLmFicyhsKGZmKGcuYSxnLmEuYi0yKSw4KS5iLUIuYikpKSkpO2lmKHIuYy5sZW5ndGghPTAmJm8+dC5vLmEvMiYmZj50Lm8uYi8yKXtmb3Ioej1uZXcgZ3UsTWMoeix0KSxsYSh6LChDdCgpLFFuKSksei5uLmE9dC5vLmEvMixmZT1uZXcgZ3UsTWMoZmUsdCksbGEoZmUsRHIpLGZlLm4uYT10Lm8uYS8yLGZlLm4uYj10Lm8uYix3PW5ldyBHKHIpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxOCksbj8oRT1sKGthZShnLmEpLDgpLHRlPWcuYS5iPT0wP0kxKGcuZCk6bChCayhnLmEpLDgpLHRlLmI+PUUuYj9wbyhnLGZlKTpwbyhnLHopKTooRT1sKG9kbihnLmEpLDgpLHRlPWcuYS5iPT0wP0kxKGcuYyk6bChvMChnLmEpLDgpLHRlLmI+PUUuYj9GYShnLGZlKTpGYShnLHopKSxMPWwoUShnLChOdCgpLGNjKSksNzUpLEwmJk55KEwsRSwhMCk7dC5uLmE9YS10Lm8uYS8yfX1mdW5jdGlvbiB2SW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihnPVJyKGUuYiwwKTtnLmIhPWcuZC5jOylpZihmPWwoQnIoZyksNDApLCF2bihmLmMsREcpKWZvcihFPUhFbihmLGUpLHQ9PShKcygpLHVjKXx8dD09dmM/VnMoRSxuZXcgZW5lKTpWcyhFLG5ldyB0bmUpLHc9RS5jLmxlbmd0aCxyPTA7cjx3O3IrKylDPShTbihyLEUuYy5sZW5ndGgpLGwoRS5jW3JdLDY1KSkuYyx2bihDLmMsIm4xMSIpLCEoUnQoQnQoUShmLChRaSgpLHRJZSkpKSkmJiFDMHQoKFNuKHIsRS5jLmxlbmd0aCksbChFLmNbcl0sNjUpKSxlKSkmJihhPXc9PTE/LjU6KHIrMSkvKHcrMSksdD09dWM/KG89emUoR2UoUShmLGMxKSkpLEI9Zi5lLmIrZi5mLmIqYSxPNSgoU24ocixFLmMubGVuZ3RoKSxsKEUuY1tyXSw2NSkpLmEsbmV3IGx0KGIuTWF0aC5taW4obyxmLmUuYS1uKSxCKSksTzUoKFNuKHIsRS5jLmxlbmd0aCksbChFLmNbcl0sNjUpKS5hLG5ldyBsdChmLmUuYSxCKSkpOnQ9PXZjPyhvPXplKEdlKFEoZixrMCkpKStuLEI9Zi5lLmIrZi5mLmIqYSxPNSgoU24ocixFLmMubGVuZ3RoKSxsKEUuY1tyXSw2NSkpLmEsbmV3IGx0KG8sQikpLE81KChTbihyLEUuYy5sZW5ndGgpLGwoRS5jW3JdLDY1KSkuYSxuZXcgbHQoZi5lLmErZi5mLmEsQikpKTp0PT13Zj8obz16ZShHZShRKGYsYzEpKSksTD1mLmUuYStmLmYuYSphLE81KChTbihyLEUuYy5sZW5ndGgpLGwoRS5jW3JdLDY1KSkuYSxuZXcgbHQoTCxiLk1hdGgubWluKGYuZS5iLW4sbykpKSxPNSgoU24ocixFLmMubGVuZ3RoKSxsKEUuY1tyXSw2NSkpLmEsbmV3IGx0KEwsZi5lLmIpKSk6KG89emUoR2UoUShmLGswKSkpK24sTD1mLmUuYStmLmYuYSphLE81KChTbihyLEUuYy5sZW5ndGgpLGwoRS5jW3JdLDY1KSkuYSxuZXcgbHQoTCxvKSksTzUoKFNuKHIsRS5jLmxlbmd0aCksbChFLmNbcl0sNjUpKS5hLG5ldyBsdChMLGYuZS5iK2YuZi5iKSkpKX1mdW5jdGlvbiB2UChlLHQsbixyLGEsbyxmLGcsdyl7dmFyIEUsQyxMLEIseixWLEo7c3dpdGNoKHo9bixDPW5ldyBvcCh3KSx4KEMsKFpuKCksVXMpKSxydChDLChmdCgpLCRMZSksZikscnQoQywoTnQoKSxNcyksKFJhKCksTXUpKSxKPXplKEdlKGUub2YobTQpKSkscnQoQyxtNCxKKSxMPW5ldyBndSxNYyhMLEMpLHQhPVoxJiZ0IT1XYnx8KHI+PTA/ej1neChnKTp6PUJOKGd4KGcpKSxlLnFmKFZULHopKSxFPW5ldyBxYSxCPSExLGUucGYocDMpPyhGeWUoRSxsKGUub2YocDMpLDgpKSxCPSEwKTpBaG4oRSxmLmEvMixmLmIvMiksei5nKXtjYXNlIDQ6cnQoQyxRdSwoaGYoKSwkYikpLHJ0KEMsc1csKFZtKCksUDYpKSxDLm8uYj1mLmIsSjwwJiYoQy5vLmE9LUopLGxhKEwsKEN0KCksYXIpKSxCfHwoRS5hPWYuYSksRS5hLT1mLmE7YnJlYWs7Y2FzZSAyOnJ0KEMsUXUsKGhmKCksZDQpKSxydChDLHNXLChWbSgpLEZUKSksQy5vLmI9Zi5iLEo8MCYmKEMuby5hPS1KKSxsYShMLChDdCgpLGVyKSksQnx8KEUuYT0wKTticmVhaztjYXNlIDE6cnQoQyxodiwoZXAoKSxGNikpLEMuby5hPWYuYSxKPDAmJihDLm8uYj0tSiksbGEoTCwoQ3QoKSxEcikpLEJ8fChFLmI9Zi5iKSxFLmItPWYuYjticmVhaztjYXNlIDM6cnQoQyxodiwoZXAoKSxVeCkpLEMuby5hPWYuYSxKPDAmJihDLm8uYj0tSiksbGEoTCwoQ3QoKSxRbikpLEJ8fChFLmI9MCl9aWYoRnllKEwubixFKSxydChDLHAzLEUpLHQ9PVR2fHx0PT1UZ3x8dD09TXUpe2lmKFY9MCx0PT1UdiYmZS5wZihrMikpc3dpdGNoKHouZyl7Y2FzZSAxOmNhc2UgMjpWPWwoZS5vZihrMiksMTcpLmE7YnJlYWs7Y2FzZSAzOmNhc2UgNDpWPS1sKGUub2YoazIpLDE3KS5hfWVsc2Ugc3dpdGNoKHouZyl7Y2FzZSA0OmNhc2UgMjpWPW8uYix0PT1UZyYmKFYvPWEuYik7YnJlYWs7Y2FzZSAxOmNhc2UgMzpWPW8uYSx0PT1UZyYmKFYvPWEuYSl9cnQoQyxsMyxWKX1yZXR1cm4gcnQoQyxXYyx6KSxDfWZ1bmN0aW9uIHdJbigpe2MzZSgpO2Z1bmN0aW9uIGUocil7dmFyIGE9dGhpczt0aGlzLmRpc3BhdGNoPWZ1bmN0aW9uKG8pe3ZhciBmPW8uZGF0YTtzd2l0Y2goZi5jbWQpe2Nhc2UiYWxnb3JpdGhtcyI6dmFyIGc9TDhlKChDbigpLG5ldyAkYShuZXcgZ2koUWIuYikpKSk7ci5wb3N0TWVzc2FnZSh7aWQ6Zi5pZCxkYXRhOmd9KTticmVhaztjYXNlImNhdGVnb3JpZXMiOnZhciB3PUw4ZSgoQ24oKSxuZXcgJGEobmV3IGdpKFFiLmMpKSkpO3IucG9zdE1lc3NhZ2Uoe2lkOmYuaWQsZGF0YTp3fSk7YnJlYWs7Y2FzZSJvcHRpb25zIjp2YXIgRT1MOGUoKENuKCksbmV3ICRhKG5ldyBnaShRYi5kKSkpKTtyLnBvc3RNZXNzYWdlKHtpZDpmLmlkLGRhdGE6RX0pO2JyZWFrO2Nhc2UicmVnaXN0ZXIiOmtNbihmLmFsZ29yaXRobXMpLHIucG9zdE1lc3NhZ2Uoe2lkOmYuaWR9KTticmVhaztjYXNlImxheW91dCI6UUFuKGYuZ3JhcGgsZi5sYXlvdXRPcHRpb25zfHx7fSxmLm9wdGlvbnN8fHt9KSxyLnBvc3RNZXNzYWdlKHtpZDpmLmlkLGRhdGE6Zi5ncmFwaH0pO2JyZWFrfX0sdGhpcy5zYXZlRGlzcGF0Y2g9ZnVuY3Rpb24obyl7dHJ5e2EuZGlzcGF0Y2gobyl9Y2F0Y2goZil7ci5wb3N0TWVzc2FnZSh7aWQ6by5kYXRhLmlkLGVycm9yOmZ9KX19fWZ1bmN0aW9uIHQocil7dmFyIGE9dGhpczt0aGlzLmRpc3BhdGNoZXI9bmV3IGUoe3Bvc3RNZXNzYWdlOmZ1bmN0aW9uKG8pe2Eub25tZXNzYWdlKHtkYXRhOm99KX19KSx0aGlzLnBvc3RNZXNzYWdlPWZ1bmN0aW9uKG8pe3NldFRpbWVvdXQoZnVuY3Rpb24oKXthLmRpc3BhdGNoZXIuc2F2ZURpc3BhdGNoKHtkYXRhOm99KX0sMCl9fWlmKHR5cGVvZiBkb2N1bWVudD09PWdoZSYmdHlwZW9mIHNlbGYhPT1naGUpe3ZhciBuPW5ldyBlKHNlbGYpO3NlbGYub25tZXNzYWdlPW4uc2F2ZURpc3BhdGNofWVsc2UgdHlwZW9mIGQhPT1naGUmJmQuZXhwb3J0cyYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxkLmV4cG9ydHM9e2RlZmF1bHQ6dCxXb3JrZXI6dH0pfWZ1bmN0aW9uIGN3dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKEM9bmV3IG9wKG4pLHBjKEMsdCkscnQoQywoZnQoKSx6aSksdCksQy5vLmE9dC5nLEMuby5iPXQuZixDLm4uYT10LmksQy5uLmI9dC5qLHZ0KG4uYSxDKSxraShlLmEsdCxDKSwoKCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpLmkhPTB8fFJ0KEJ0KGF0KHQsKE50KCksYjQpKSkpKSYmcnQoQyxGTGUsKEhuKCksITApKSxFPWwoUShuLEx1KSwyMSksTD1sKFEoQywoTnQoKSxNcykpLDEwMSksTD09KFJhKCksV2IpP3J0KEMsTXMsWjEpOkwhPVoxJiZFLkZjKChIbygpLCRUKSksQj0wLHI9bChRKG4sUmgpLDg4KSx3PW5ldyBvcigoIXQuYyYmKHQuYz1uZXcgbnQoSGwsdCw5LDkpKSx0LmMpKTt3LmUhPXcuaS5nYygpOylnPWwoZ3IodyksMTIzKSxhPWRzKHQpLChxZShhdChhLHlnKSkhPT1xZSgoRWQoKSxFMikpfHxxZShhdChhLGR2KSk9PT1xZSgobDIoKSxCVCkpfHxxZShhdChhLGR2KSk9PT1xZSgobDIoKSxQVCkpfHxSdChCdChhdChhLGYzKSkpfHxxZShhdChhLGc0KSkhPT1xZSgoS20oKSxjNCkpfHxxZShhdChhLHpiKSk9PT1xZSgoTmYoKSx2MykpfHxxZShhdChhLHpiKSk9PT1xZSgoTmYoKSx4NCkpfHxxZShhdChhLHB2KSk9PT1xZSgocDIoKSxXVCkpfHxxZShhdChhLHB2KSk9PT1xZSgocDIoKSxZVCkpKSYmIVJ0KEJ0KGF0KHQsZlcpKSkmJkhpKGcsS2kscHQoQisrKSksUnQoQnQoYXQoZyxtdikpKXx8TERuKGUsZyxDLEUscixMKTtmb3IoZj1uZXcgb3IoKCF0Lm4mJih0Lm49bmV3IG50KGVjLHQsMSw3KSksdC5uKSk7Zi5lIT1mLmkuZ2MoKTspbz1sKGdyKGYpLDEzNSksIVJ0KEJ0KGF0KG8sbXYpKSkmJm8uYSYmdnQoQy5iLE9jZShvKSk7cmV0dXJuIFJ0KEJ0KFEoQyxRTCkpKSYmRS5GYygoSG8oKSxlVykpLFJ0KEJ0KFEoQyxiVykpKSYmKEUuRmMoKEhvKCksdFcpKSxFLkZjKFVMKSxydChDLE1zLFoxKSksQ31mdW5jdGlvbiBMbGUoZSx0LG4scixhLG8sZil7dmFyIGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyLG9pLHdzO2ZvcihKPTAsQm49MCxFPW5ldyBHKGUuYik7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDE2Myksdy5jJiZGdnQody5jKSxKPWIuTWF0aC5tYXgoSix3bCh3KSksQm4rPXdsKHcpKmdoKHcpO2Zvcih0ZT1Cbi9lLmIuYy5sZW5ndGgsYW49eThuKGUuYix0ZSksQm4rPWUuYi5jLmxlbmd0aCphbixKPWIuTWF0aC5tYXgoSixiLk1hdGguc3FydChCbipmKSkrbi5iLG9pPW4uYix3cz1uLmQsej0wLEw9bi5iK24uYyxjbj1uZXcgb3MsdWkoY24scHQoMCkpLG90PW5ldyBvcyxDPW5ldyBVYShlLmIsMCksVj1udWxsLGc9bmV3IGJ0O0MuYjxDLmQuZ2MoKTspdz0obXIoQy5iPEMuZC5nYygpKSxsKEMuZC5YYihDLmM9Qy5iKyspLDE2MykpLHVyPXdsKHcpLEI9Z2godyksb2krdXI+SiYmKG8mJihrbyhvdCx6KSxrbyhjbixwdChDLmItMSkpLHZ0KGUuZCxWKSxnLmMubGVuZ3RoPTApLG9pPW4uYix3cys9eit0LHo9MCxMPWIuTWF0aC5tYXgoTCxuLmIrbi5jK3VyKSksJG4oZy5jLHcpLGRkdCh3LG9pLHdzKSxMPWIuTWF0aC5tYXgoTCxvaSt1cituLmMpLHo9Yi5NYXRoLm1heCh6LEIpLG9pKz11cit0LFY9dztpZihyYShlLmEsZyksdnQoZS5kLGwoanQoZyxnLmMubGVuZ3RoLTEpLDE2MykpLEw9Yi5NYXRoLm1heChMLHIpLGpuPXdzK3orbi5hLGpuPGEmJih6Kz1hLWpuLGpuPWEpLG8pZm9yKG9pPW4uYixDPW5ldyBVYShlLmIsMCksa28oY24scHQoZS5iLmMubGVuZ3RoKSksU3Q9UnIoY24sMCksVGU9bChCcihTdCksMTcpLmEsa28ob3QseiksWmU9UnIob3QsMCksJGU9MDtDLmI8Qy5kLmdjKCk7KUMuYj09VGUmJihvaT1uLmIsJGU9emUoR2UoQnIoWmUpKSksVGU9bChCcihTdCksMTcpLmEpLHc9KG1yKEMuYjxDLmQuZ2MoKSksbChDLmQuWGIoQy5jPUMuYisrKSwxNjMpKSxVMXQodywkZSksQy5iPT1UZSYmKGZlPUwtb2ktbi5jLE1lPXdsKHcpLEcxdCh3LGZlKSx2MXQodywoZmUtTWUpLzIsMCkpLG9pKz13bCh3KSt0O3JldHVybiBuZXcgbHQoTCxqbil9ZnVuY3Rpb24geUluKGUpe2UuTnx8KGUuTj0hMCxlLmI9cWMoZSwwKSxTcyhlLmIsMCksU3MoZS5iLDEpLFNzKGUuYiwyKSxlLmJiPXFjKGUsMSksU3MoZS5iYiwwKSxTcyhlLmJiLDEpLGUuZmI9cWMoZSwyKSxTcyhlLmZiLDMpLFNzKGUuZmIsNCksaXMoZS5mYiw1KSxlLnFiPXFjKGUsMyksU3MoZS5xYiwwKSxpcyhlLnFiLDEpLGlzKGUucWIsMiksU3MoZS5xYiwzKSxTcyhlLnFiLDQpLGlzKGUucWIsNSksU3MoZS5xYiw2KSxlLmE9VGkoZSw0KSxlLmM9VGkoZSw1KSxlLmQ9VGkoZSw2KSxlLmU9VGkoZSw3KSxlLmY9VGkoZSw4KSxlLmc9VGkoZSw5KSxlLmk9VGkoZSwxMCksZS5qPVRpKGUsMTEpLGUuaz1UaShlLDEyKSxlLm49VGkoZSwxMyksZS5vPVRpKGUsMTQpLGUucD1UaShlLDE1KSxlLnE9VGkoZSwxNiksZS5zPVRpKGUsMTcpLGUucj1UaShlLDE4KSxlLnQ9VGkoZSwxOSksZS51PVRpKGUsMjApLGUudj1UaShlLDIxKSxlLnc9VGkoZSwyMiksZS5CPVRpKGUsMjMpLGUuQT1UaShlLDI0KSxlLkM9VGkoZSwyNSksZS5EPVRpKGUsMjYpLGUuRj1UaShlLDI3KSxlLkc9VGkoZSwyOCksZS5IPVRpKGUsMjkpLGUuSj1UaShlLDMwKSxlLkk9VGkoZSwzMSksZS5LPVRpKGUsMzIpLGUuTT1UaShlLDMzKSxlLkw9VGkoZSwzNCksZS5QPVRpKGUsMzUpLGUuUT1UaShlLDM2KSxlLlI9VGkoZSwzNyksZS5TPVRpKGUsMzgpLGUuVD1UaShlLDM5KSxlLlU9VGkoZSw0MCksZS5WPVRpKGUsNDEpLGUuWD1UaShlLDQyKSxlLlc9VGkoZSw0MyksZS5ZPVRpKGUsNDQpLGUuWj1UaShlLDQ1KSxlLiQ9VGkoZSw0NiksZS5fPVRpKGUsNDcpLGUuYWI9VGkoZSw0OCksZS5jYj1UaShlLDQ5KSxlLmRiPVRpKGUsNTApLGUuZWI9VGkoZSw1MSksZS5nYj1UaShlLDUyKSxlLmhiPVRpKGUsNTMpLGUuaWI9VGkoZSw1NCksZS5qYj1UaShlLDU1KSxlLmtiPVRpKGUsNTYpLGUubGI9VGkoZSw1NyksZS5tYj1UaShlLDU4KSxlLm5iPVRpKGUsNTkpLGUub2I9VGkoZSw2MCksZS5wYj1UaShlLDYxKSl9ZnVuY3Rpb24geEluKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZTtpZihUZT0wLHQuZi5hPT0wKWZvcih0ZT1uZXcgRyhlKTt0ZS5hPHRlLmMuYy5sZW5ndGg7KVY9bChyZSh0ZSksMTApLFRlPWIuTWF0aC5tYXgoVGUsVi5uLmErVi5vLmErVi5kLmMpO2Vsc2UgVGU9dC5mLmEtdC5jLmE7Zm9yKFRlLT10LmMuYSxKPW5ldyBHKGUpO0ouYTxKLmMuYy5sZW5ndGg7KXtzd2l0Y2goVj1sKHJlKEopLDEwKSxpXyhWLm4sVGUtVi5vLmEpLE40ZShWLmYpLFZkdChWKSwoVi5xP1YucTooQ24oKSxDbigpLG1nKSkuX2IoKE50KCksdzQpKSYmaV8obChRKFYsdzQpLDgpLFRlLVYuby5hKSxsKFEoVixSZCksMjU1KS5nKXtjYXNlIDE6cnQoVixSZCwob2coKSxWQikpO2JyZWFrO2Nhc2UgMjpydChWLFJkLChvZygpLEhCKSl9Zm9yKGZlPVYubywkZT1uZXcgRyhWLmopOyRlLmE8JGUuYy5jLmxlbmd0aDspe2ZvcihNZT1sKHJlKCRlKSwxMiksaV8oTWUubixmZS5hLU1lLm8uYSksaV8oTWUuYSxNZS5vLmEpLGxhKE1lLFNmdChNZS5qKSksZj1sKFEoTWUsazIpLDE3KSxmJiZydChNZSxrMixwdCgtZi5hKSksbz1uZXcgRyhNZS5nKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKGE9bChyZShvKSwxOCkscj1ScihhLmEsMCk7ci5iIT1yLmQuYzspbj1sKEJyKHIpLDgpLG4uYT1UZS1uLmE7aWYoRT1sKFEoYSxjYyksNzUpLEUpZm9yKHc9UnIoRSwwKTt3LmIhPXcuZC5jOylnPWwoQnIodyksOCksZy5hPVRlLWcuYTtmb3IoQj1uZXcgRyhhLmIpO0IuYTxCLmMuYy5sZW5ndGg7KUM9bChyZShCKSw3MiksaV8oQy5uLFRlLUMuby5hKX1mb3Ioej1uZXcgRyhNZS5mKTt6LmE8ei5jLmMubGVuZ3RoOylDPWwocmUoeiksNzIpLGlfKEMubixNZS5vLmEtQy5vLmEpfWZvcihWLms9PShabigpLFVzKSYmKHJ0KFYsKGZ0KCksV2MpLFNmdChsKFEoVixXYyksNjQpKSksYzluKFYpKSxMPW5ldyBHKFYuYik7TC5hPEwuYy5jLmxlbmd0aDspQz1sKHJlKEwpLDcyKSxWZHQoQyksaV8oQy5uLGZlLmEtQy5vLmEpfX1mdW5jdGlvbiBrSW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlO2lmKFRlPTAsdC5mLmI9PTApZm9yKHRlPW5ldyBHKGUpO3RlLmE8dGUuYy5jLmxlbmd0aDspVj1sKHJlKHRlKSwxMCksVGU9Yi5NYXRoLm1heChUZSxWLm4uYitWLm8uYitWLmQuYSk7ZWxzZSBUZT10LmYuYi10LmMuYjtmb3IoVGUtPXQuYy5iLEo9bmV3IEcoZSk7Si5hPEouYy5jLmxlbmd0aDspe3N3aXRjaChWPWwocmUoSiksMTApLHJfKFYubixUZS1WLm8uYiksUDRlKFYuZiksVWR0KFYpLChWLnE/Vi5xOihDbigpLENuKCksbWcpKS5fYigoTnQoKSx3NCkpJiZyXyhsKFEoVix3NCksOCksVGUtVi5vLmIpLGwoUShWLFJkKSwyNTUpLmcpe2Nhc2UgMzpydChWLFJkLChvZygpLGVZKSk7YnJlYWs7Y2FzZSA0OnJ0KFYsUmQsKG9nKCksblkpKX1mb3IoZmU9Vi5vLCRlPW5ldyBHKFYuaik7JGUuYTwkZS5jLmMubGVuZ3RoOyl7Zm9yKE1lPWwocmUoJGUpLDEyKSxyXyhNZS5uLGZlLmItTWUuby5iKSxyXyhNZS5hLE1lLm8uYiksbGEoTWUsX2Z0KE1lLmopKSxmPWwoUShNZSxrMiksMTcpLGYmJnJ0KE1lLGsyLHB0KC1mLmEpKSxvPW5ldyBHKE1lLmcpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3IoYT1sKHJlKG8pLDE4KSxyPVJyKGEuYSwwKTtyLmIhPXIuZC5jOyluPWwoQnIociksOCksbi5iPVRlLW4uYjtpZihFPWwoUShhLGNjKSw3NSksRSlmb3Iodz1ScihFLDApO3cuYiE9dy5kLmM7KWc9bChCcih3KSw4KSxnLmI9VGUtZy5iO2ZvcihCPW5ldyBHKGEuYik7Qi5hPEIuYy5jLmxlbmd0aDspQz1sKHJlKEIpLDcyKSxyXyhDLm4sVGUtQy5vLmIpfWZvcih6PW5ldyBHKE1lLmYpO3ouYTx6LmMuYy5sZW5ndGg7KUM9bChyZSh6KSw3Mikscl8oQy5uLE1lLm8uYi1DLm8uYil9Zm9yKFYuaz09KFpuKCksVXMpJiYocnQoViwoZnQoKSxXYyksX2Z0KGwoUShWLFdjKSw2NCkpKSxFNG4oVikpLEw9bmV3IEcoVi5iKTtMLmE8TC5jLmMubGVuZ3RoOylDPWwocmUoTCksNzIpLFVkdChDKSxyXyhDLm4sZmUuYi1DLm8uYil9fWZ1bmN0aW9uIEVJbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXIsb2k7Zm9yKFRlPW5ldyBVYShlLmIsMCksQz10LktjKCksVj0wLEU9bChDLlBiKCksMTcpLmEsWmU9MCxuPW5ldyBLcyxTdD1uZXcgYmQ7VGUuYjxUZS5kLmdjKCk7KXtmb3IoZmU9KG1yKFRlLmI8VGUuZC5nYygpKSxsKFRlLmQuWGIoVGUuYz1UZS5iKyspLDMwKSksJGU9bmV3IEcoZmUuYSk7JGUuYTwkZS5jLmMubGVuZ3RoOyl7Zm9yKE1lPWwocmUoJGUpLDEwKSx6PW5ldyBocihkcihxcyhNZSkuYS5LYygpLG5ldyBqKSk7anIoeik7KUw9bCh4cih6KSwxOCksU3QuYS56YyhMLFN0KTtmb3IoQj1uZXcgaHIoZHIoa2EoTWUpLmEuS2MoKSxuZXcgaikpO2pyKEIpOylMPWwoeHIoQiksMTgpLFN0LmEuQmMoTCkhPW51bGx9aWYoVisxPT1FKXtmb3IoYT1uZXcgeXUoZSksYnkoVGUsYSksbz1uZXcgeXUoZSksYnkoVGUsbyksYW49U3QuYS5lYygpLktjKCk7YW4uT2IoKTspY249bChhbi5QYigpLDE4KSxuLmEuX2IoY24pfHwoKytaZSxuLmEuemMoY24sbikpLGY9bmV3IG9wKGUpLHJ0KGYsKE50KCksTXMpLChSYSgpLHNDKSksVmEoZixhKSx4KGYsKFpuKCksSzEpKSxKPW5ldyBndSxNYyhKLGYpLGxhKEosKEN0KCksZXIpKSxCbj1uZXcgZ3UsTWMoQm4sZiksbGEoQm4sYXIpLHI9bmV3IG9wKGUpLHJ0KHIsTXMsc0MpLFZhKHIsbykseChyLEsxKSx0ZT1uZXcgZ3UsTWModGUsciksbGEodGUsZXIpLGpuPW5ldyBndSxNYyhqbixyKSxsYShqbixhciksb3Q9bmV3IFR3LHBvKG90LGNuLmMpLEZhKG90LEopLHJ0KG90LChmdCgpLEtpKSxsKFEoY24sS2kpLDE3KSksb2k9bmV3IFR3LHBvKG9pLEJuKSxGYShvaSx0ZSkscnQob2ksS2ksbChRKGNuLEtpKSwxNykpLHBvKGNuLGpuKSxnPW5ldyBvNmUoZixyLG90LG9pLGNuKSxydChmLGMzLGcpLHJ0KHIsYzMsZyksdXI9b3QuYy5pLHVyLms9PUsxJiYodz1sKFEodXIsYzMpLDMxMyksdy5kPWcsZy5nPXcpO2lmKEMuT2IoKSlFPWwoQy5QYigpLDE3KS5hO2Vsc2UgYnJlYWt9KytWfXJldHVybiBwdChaZSl9ZnVuY3Rpb24gVEluKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZTtmb3IoSj1uZXcgYnQsQj1uZXcgRyhlLmQuYik7Qi5hPEIuYy5jLmxlbmd0aDspZm9yKEw9bChyZShCKSwzMCksVj1uZXcgRyhMLmEpO1YuYTxWLmMuYy5sZW5ndGg7KXtmb3Ioej1sKHJlKFYpLDEwKSxhPWwoY3IoZS5mLHopLDYwKSx3PW5ldyBocihkcihxcyh6KS5hLktjKCksbmV3IGopKTtqcih3KTspaWYoZj1sKHhyKHcpLDE4KSxyPVJyKGYuYSwwKSxFPSEwLEM9bnVsbCxyLmIhPXIuZC5jKXtmb3IodD1sKEJyKHIpLDgpLG49bnVsbCxmLmMuaj09KEN0KCksUW4pJiYodGU9bmV3IFFBKHQsbmV3IGx0KHQuYSxhLmQuZCksYSxmKSx0ZS5mLmE9ITAsdGUuYT1mLmMsJG4oSi5jLHRlKSksZi5jLmo9PURyJiYodGU9bmV3IFFBKHQsbmV3IGx0KHQuYSxhLmQuZCthLmQuYSksYSxmKSx0ZS5mLmQ9ITAsdGUuYT1mLmMsJG4oSi5jLHRlKSk7ci5iIT1yLmQuYzspbj1sKEJyKHIpLDgpLFg2ZSh0LmIsbi5iKXx8KEM9bmV3IFFBKHQsbixudWxsLGYpLCRuKEouYyxDKSxFJiYoRT0hMSxuLmI8YS5kLmQ/Qy5mLmE9ITA6bi5iPmEuZC5kK2EuZC5hP0MuZi5kPSEwOihDLmYuZD0hMCxDLmYuYT0hMCkpKSxyLmIhPXIuZC5jJiYodD1uKTtDJiYobz1sKGNyKGUuZixmLmQuaSksNjApLHQuYjxvLmQuZD9DLmYuYT0hMDp0LmI+by5kLmQrby5kLmE/Qy5mLmQ9ITA6KEMuZi5kPSEwLEMuZi5hPSEwKSl9Zm9yKGc9bmV3IGhyKGRyKGthKHopLmEuS2MoKSxuZXcgaikpO2pyKGcpOylmPWwoeHIoZyksMTgpLGYuYS5iIT0wJiYodD1sKG8wKGYuYSksOCksZi5kLmo9PShDdCgpLFFuKSYmKHRlPW5ldyBRQSh0LG5ldyBsdCh0LmEsYS5kLmQpLGEsZiksdGUuZi5hPSEwLHRlLmE9Zi5kLCRuKEouYyx0ZSkpLGYuZC5qPT1EciYmKHRlPW5ldyBRQSh0LG5ldyBsdCh0LmEsYS5kLmQrYS5kLmEpLGEsZiksdGUuZi5kPSEwLHRlLmE9Zi5kLCRuKEouYyx0ZSkpKX1yZXR1cm4gSn1mdW5jdGlvbiBDSW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCO2Zvcih3PW5ldyBidCxMPXQubGVuZ3RoLGY9JDdlKG4pLEU9MDtFPEw7KytFKXtzd2l0Y2goQz1MeWUodCxjbCg2MSksRSkscj14NG4oZiwoR2EoRSxDLHQubGVuZ3RoKSx0LnN1YnN0cihFLEMtRSkpKSxhPWdjZShyKSxvPWEuamsoKS53aSgpLGNvKHQsKytDKSl7Y2FzZSAzOTp7Zz1Oayh0LDM5LCsrQyksdnQodyxuZXcgU3Eocixlb2UoKEdhKEMsZyx0Lmxlbmd0aCksdC5zdWJzdHIoQyxnLUMpKSxvLGEpKSksRT1nKzE7YnJlYWt9Y2FzZSAzNDp7Zz1Oayh0LDM0LCsrQyksdnQodyxuZXcgU3Eocixlb2UoKEdhKEMsZyx0Lmxlbmd0aCksdC5zdWJzdHIoQyxnLUMpKSxvLGEpKSksRT1nKzE7YnJlYWt9Y2FzZSA5MTp7Qj1uZXcgYnQsdnQodyxuZXcgU3EocixCKSk7ZTpmb3IoOzspe3N3aXRjaChjbyh0LCsrQykpe2Nhc2UgMzk6e2c9TmsodCwzOSwrK0MpLHZ0KEIsZW9lKChHYShDLGcsdC5sZW5ndGgpLHQuc3Vic3RyKEMsZy1DKSksbyxhKSksQz1nKzE7YnJlYWt9Y2FzZSAzNDp7Zz1Oayh0LDM0LCsrQyksdnQoQixlb2UoKEdhKEMsZyx0Lmxlbmd0aCksdC5zdWJzdHIoQyxnLUMpKSxvLGEpKSxDPWcrMTticmVha31jYXNlIDExMDp7aWYoKytDLHQuaW5kZXhPZigidWxsIixDKT09QylCLmMucHVzaChudWxsKTtlbHNlIHRocm93IHVlKG5ldyBBYyhoNHQpKTtDKz0zO2JyZWFrfX1pZihDPEwpc3dpdGNoKFhuKEMsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChDKSl7Y2FzZSA0NDpicmVhaztjYXNlIDkzOmJyZWFrIGU7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgQWMoIkV4cGVjdGluZyAsIG9yIF0iKSl9ZWxzZSBicmVha31FPUMrMTticmVha31jYXNlIDExMDp7aWYoKytDLHQuaW5kZXhPZigidWxsIixDKT09Qyl2dCh3LG5ldyBTcShyLG51bGwpKTtlbHNlIHRocm93IHVlKG5ldyBBYyhoNHQpKTtFPUMrMzticmVha319aWYoRTxMKXtpZihYbihFLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoRSkhPTQ0KXRocm93IHVlKG5ldyBBYygiRXhwZWN0aW5nICwiKSl9ZWxzZSBicmVha31yZXR1cm4gY1NuKGUsdyxuKX1mdW5jdGlvbiBTSW4oZSl7dmFyIHQsbixyLGEsbztzd2l0Y2godD1lLmMsbz1udWxsLHQpe2Nhc2UgNjpyZXR1cm4gZS5FbSgpO2Nhc2UgMTM6cmV0dXJuIGUuRm0oKTtjYXNlIDIzOnJldHVybiBlLndtKCk7Y2FzZSAyMjpyZXR1cm4gZS5CbSgpO2Nhc2UgMTg6cmV0dXJuIGUueW0oKTtjYXNlIDg6TGkoZSksbz0oRGkoKSxYUGUpO2JyZWFrO2Nhc2UgOTpyZXR1cm4gZS5lbSghMCk7Y2FzZSAxOTpyZXR1cm4gZS5mbSgpO2Nhc2UgMTA6c3dpdGNoKGUuYSl7Y2FzZSAxMDA6Y2FzZSA2ODpjYXNlIDExOTpjYXNlIDg3OmNhc2UgMTE1OmNhc2UgODM6cmV0dXJuIG89ZS5kbShlLmEpLExpKGUpLG87Y2FzZSAxMDE6Y2FzZSAxMDI6Y2FzZSAxMTA6Y2FzZSAxMTQ6Y2FzZSAxMTY6Y2FzZSAxMTc6Y2FzZSAxMTg6Y2FzZSAxMjA6bj1lLmNtKCksbjxJbz9vPShEaSgpLERpKCksbmV3IG5nKDAsbikpOm89a3N0KHc4ZShuKSk7YnJlYWs7Y2FzZSA5OTpyZXR1cm4gZS5vbSgpO2Nhc2UgNjc6cmV0dXJuIGUuam0oKTtjYXNlIDEwNTpyZXR1cm4gZS5ybSgpO2Nhc2UgNzM6cmV0dXJuIGUua20oKTtjYXNlIDEwMzpyZXR1cm4gZS5wbSgpO2Nhc2UgODg6cmV0dXJuIGUubG0oKTtjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpyZXR1cm4gZS5nbSgpO2Nhc2UgODA6Y2FzZSAxMTI6aWYobz13OWUoZSxlLmEpLCFvKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSx0MGUpKSkpO2JyZWFrO2RlZmF1bHQ6bz1QaXQoZS5hKX1MaShlKTticmVhaztjYXNlIDA6aWYoZS5hPT05M3x8ZS5hPT0xMjN8fGUuYT09MTI1KXRocm93IHVlKG5ldyByaShhaSgoSnIoKSx4U2UpKSkpO289UGl0KGUuYSkscj1lLmEsTGkoZSksKHImNjQ1MTIpPT1BUCYmZS5jPT0wJiYoZS5hJjY0NTEyKT09NTYzMjAmJihhPVdlKGtmLEFkLDI4LDIsMTUsMSksYVswXT1yJlpzLGFbMV09ZS5hJlpzLG89QmFlKGtzdChJZihhLDAsYS5sZW5ndGgpKSwwKSxMaShlKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCkseFNlKSkpKX1yZXR1cm4gb31mdW5jdGlvbiBfSW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuO2Zvcihhbj1uZXcgb3Msb3Q9bmV3IG9zLHRlPS0xLHc9bmV3IEcoZSk7dy5hPHcuYy5jLmxlbmd0aDspe2ZvcihmPWwocmUodyksMTMxKSxmLnM9dGUtLSxDPTAsTWU9MCxvPW5ldyBHKGYudCk7by5hPG8uYy5jLmxlbmd0aDspcj1sKHJlKG8pLDI3NCksTWUrPXIuYztmb3IoYT1uZXcgRyhmLmkpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwyNzQpLEMrPXIuYztmLm49QyxmLnU9TWUsTWU9PTA/Q3Mob3QsZixvdC5jLmIsb3QuYyk6Qz09MCYmQ3MoYW4sZixhbi5jLmIsYW4uYyl9Zm9yKGpuPUhIKGUpLEw9ZS5jLmxlbmd0aCxKPUwrMSxmZT1MLTEsej1uZXcgYnQ7am4uYS5nYygpIT0wOyl7Zm9yKDtvdC5iIT0wOylaZT0obXIob3QuYiE9MCksbChhZihvdCxvdC5hLmEpLDEzMSkpLGpuLmEuQmMoWmUpIT1udWxsLFplLnM9ZmUtLSxSOWUoWmUsYW4sb3QpO2Zvcig7YW4uYiE9MDspU3Q9KG1yKGFuLmIhPTApLGwoYWYoYW4sYW4uYS5hKSwxMzEpKSxqbi5hLkJjKFN0KSE9bnVsbCxTdC5zPUorKyxSOWUoU3QsYW4sb3QpO2ZvcihWPWxvLEU9am4uYS5lYygpLktjKCk7RS5PYigpOylmPWwoRS5QYigpLDEzMSksVGU9Zi51LWYubixUZT49ViYmKFRlPlYmJih6LmMubGVuZ3RoPTAsVj1UZSksJG4oei5jLGYpKTt6LmMubGVuZ3RoIT0wJiYoQj1sKGp0KHosYVUodCx6LmMubGVuZ3RoKSksMTMxKSxqbi5hLkJjKEIpIT1udWxsLEIucz1KKyssUjllKEIsYW4sb3QpLHouYy5sZW5ndGg9MCl9Zm9yKCRlPWUuYy5sZW5ndGgrMSxnPW5ldyBHKGUpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxMzEpLGYuczxMJiYoZi5zKz0kZSk7Zm9yKGNuPW5ldyBHKGUpO2NuLmE8Y24uYy5jLmxlbmd0aDspZm9yKFN0PWwocmUoY24pLDEzMSksbj1uZXcgVWEoU3QudCwwKTtuLmI8bi5kLmdjKCk7KXI9KG1yKG4uYjxuLmQuZ2MoKSksbChuLmQuWGIobi5jPW4uYisrKSwyNzQpKSxCbj1yLmIsU3Qucz5Cbi5zJiYocGgobiksYWwoQm4uaSxyKSxyLmM+MCYmKHIuYT1Cbix2dChCbi50LHIpLHIuYj1TdCx2dChTdC5pLHIpKSl9ZnVuY3Rpb24gdXd0KGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbixqbjtmb3IoSj1uZXcgQnUodC5iKSwkZT1uZXcgQnUodC5iKSxCPW5ldyBCdSh0LmIpLGNuPW5ldyBCdSh0LmIpLHRlPW5ldyBCdSh0LmIpLFN0PVJyKHQsMCk7U3QuYiE9U3QuZC5jOylmb3IoWmU9bChCcihTdCksMTIpLGc9bmV3IEcoWmUuZyk7Zy5hPGcuYy5jLmxlbmd0aDspaWYobz1sKHJlKGcpLDE4KSxvLmMuaT09by5kLmkpe2lmKFplLmo9PW8uZC5qKXskbihjbi5jLG8pO2NvbnRpbnVlfWVsc2UgaWYoWmUuaj09KEN0KCksUW4pJiZvLmQuaj09RHIpeyRuKHRlLmMsbyk7Y29udGludWV9fWZvcih3PW5ldyBHKHRlKTt3LmE8dy5jLmMubGVuZ3RoOylvPWwocmUodyksMTgpLFpfbihlLG8sbixyLChDdCgpLGFyKSk7Zm9yKGY9bmV3IEcoY24pO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxOCksYW49bmV3IG9wKGUpLHgoYW4sKFpuKCksQXUpKSxydChhbiwoTnQoKSxNcyksKFJhKCksTXUpKSxydChhbiwoZnQoKSx6aSksbyksQm49bmV3IGd1LHJ0KEJuLHppLG8uZCksbGEoQm4sKEN0KCksZXIpKSxNYyhCbixhbiksam49bmV3IGd1LHJ0KGpuLHppLG8uYyksbGEoam4sYXIpLE1jKGpuLGFuKSxydChvLmMsamwsYW4pLHJ0KG8uZCxqbCxhbikscG8obyxudWxsKSxGYShvLG51bGwpLCRuKG4uYyxhbikscnQoYW4saVcscHQoMikpO2ZvcihvdD1Scih0LDApO290LmIhPW90LmQuYzspWmU9bChCcihvdCksMTIpLEU9WmUuZS5jLmxlbmd0aD4wLGZlPVplLmcuYy5sZW5ndGg+MCxFJiZmZT8kbihCLmMsWmUpOkU/JG4oSi5jLFplKTpmZSYmJG4oJGUuYyxaZSk7Zm9yKFY9bmV3IEcoSik7Vi5hPFYuYy5jLmxlbmd0aDspej1sKHJlKFYpLDEyKSx2dChhLF9rZShlLHosbnVsbCxuKSk7Zm9yKE1lPW5ldyBHKCRlKTtNZS5hPE1lLmMuYy5sZW5ndGg7KVRlPWwocmUoTWUpLDEyKSx2dChhLF9rZShlLG51bGwsVGUsbikpO2ZvcihMPW5ldyBHKEIpO0wuYTxMLmMuYy5sZW5ndGg7KUM9bChyZShMKSwxMiksdnQoYSxfa2UoZSxDLEMsbikpfWZ1bmN0aW9uIFVrZShlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKEI9Z3Msej1ncyxDPTAsTD0wLHc9bmV3IGJ0LGc9bmV3IG9yKCghZS5iJiYoZS5iPW5ldyBudChqcyxlLDEyLDMpKSxlLmIpKTtnLmUhPWcuaS5nYygpOylvPWwoZ3IoZyksNzQpLHc9TGgoaGUobGUoRmgsMSksUm4sMjAsMCxbdywoIW8ubiYmKG8ubj1uZXcgbnQoZWMsbywxLDcpKSxvLm4pXSkpO2ZvcihNZT1yZyhMaChoZShsZShGaCwxKSxSbiwyMCwwLFsoIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxlLm4pLCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSx3XSkpKTtqcihNZSk7KVRlPWwoeHIoTWUpLDQyMiksRT1sKFRlLm9mKChwaSgpLHRDKSksMTQwKSxCPlRlLm5oKCktRS5iJiYoQj1UZS5uaCgpLUUuYiksej5UZS5vaCgpLUUuZCYmKHo9VGUub2goKS1FLmQpLEM8VGUubmgoKStUZS5taCgpK0UuYyYmKEM9VGUubmgoKStUZS5taCgpK0UuYyksTDxUZS5vaCgpK1RlLmxoKCkrRS5hJiYoTD1UZS5vaCgpK1RlLmxoKCkrRS5hKTtmb3IoZj1uZXcgb3IoKCFlLmImJihlLmI9bmV3IG50KGpzLGUsMTIsMykpLGUuYikpO2YuZSE9Zi5pLmdjKCk7KWZvcihvPWwoZ3IoZiksNzQpLGZlPW5ldyBvcigoIW8uYSYmKG8uYT1uZXcgbnQoY3Msbyw2LDYpKSxvLmEpKTtmZS5lIT1mZS5pLmdjKCk7KWZvcih0ZT1sKGdyKGZlKSwxNjYpLFY9dGUuaixyPXRlLmIsSj10ZS5rLGE9dGUuYyxCPWIuTWF0aC5taW4oQixWKSxCPWIuTWF0aC5taW4oQixyKSxDPWIuTWF0aC5tYXgoQyxWKSxDPWIuTWF0aC5tYXgoQyxyKSx6PWIuTWF0aC5taW4oeixKKSx6PWIuTWF0aC5taW4oeixhKSxMPWIuTWF0aC5tYXgoTCxKKSxMPWIuTWF0aC5tYXgoTCxhKSxuPW5ldyBvcigoIXRlLmEmJih0ZS5hPW5ldyBZcyhxaCx0ZSw1KSksdGUuYSkpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwzNzcpLEI9Yi5NYXRoLm1pbihCLHQuYSksQz1iLk1hdGgubWF4KEMsdC5hKSx6PWIuTWF0aC5taW4oeix0LmIpLEw9Yi5NYXRoLm1heChMLHQuYik7SGkoZSwocGkoKSx0NyksQy1CKSxIaShlLGU3LEwteil9ZnVuY3Rpb24gQUluKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEw7aWYobi5VZygiTmV0d29yayBzaW1wbGV4IG5vZGUgcGxhY2VtZW50IiwxKSxlLmU9dCxlLm49bChRKHQsKGZ0KCksJDYpKSwzMTIpLHpMbihlKSxzeG4oZSksSXMoRGMobmV3IGJuKG51bGwsbmV3IGtuKGUuZS5iLDE2KSksbmV3IEplZSksbmV3IEpZZShlKSksSXMoRmkoRGMoRmkoRGMobmV3IGJuKG51bGwsbmV3IGtuKGUuZS5iLDE2KSksbmV3IHV0ZSksbmV3IEpqKSxuZXcgbHRlKSxuZXcgVFMpLG5ldyBRWWUoZSkpLFJ0KEJ0KFEoZS5lLChOdCgpLFpMKSkpKSYmKGY9bi5laCgxKSxmLlVnKCJTdHJhaWdodCBFZGdlcyBQcmUtUHJvY2Vzc2luZyIsMSksdURuKGUpLGYuVmcoKSksJDZuKGUuZiksbz1sKFEodCxuTSksMTcpLmEqZS5mLmEuYy5sZW5ndGgsb2xlKG4zZShyM2UoYmFlKGUuZiksbyksITEpLG4uZWgoMSkpLGUuZC5hLmdjKCkhPTApe2ZvcihmPW4uZWgoMSksZi5VZygiRmxleGlibGUgV2hlcmUgU3BhY2UgUHJvY2Vzc2luZyIsMSksZz1sKGZoKFk4KGZjKG5ldyBibihudWxsLG5ldyBrbihlLmYuYSwxNikpLG5ldyBaZWUpLG5ldyBHZWUpKSwxNykuYSx3PWwoZmgodnkoZmMobmV3IGJuKG51bGwsbmV3IGtuKGUuZi5hLDE2KSksbmV3IGV0ZSksbmV3IEtlZSkpLDE3KS5hLEU9dy1nLEM9aHcobmV3IFNtLGUuZiksTD1odyhuZXcgU20sZS5mKSxwMChzMChpMChyMChhMChuZXcgX2YsMmU0KSxFKSxDKSxMKSksSXMoRmkoRmkoYzVlKGUuaSksbmV3IHR0ZSksbmV3IG50ZSksbmV3IFRhdChnLEMsRSxMKSksYT1lLmQuYS5lYygpLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDIxOCksci5nPTE7b2xlKG4zZShyM2UoYmFlKGUuZiksbyksITEpLGYuZWgoMSkpLGYuVmcoKX1SdChCdChRKHQsWkwpKSkmJihmPW4uZWgoMSksZi5VZygiU3RyYWlnaHQgRWRnZXMgUG9zdC1Qcm9jZXNzaW5nIiwxKSxYOW4oZSksZi5WZygpKSxHTW4oZSksZS5lPW51bGwsZS5mPW51bGwsZS5pPW51bGwsZS5jPW51bGwsTmwoZS5rKSxlLmo9bnVsbCxlLmE9bnVsbCxlLm89bnVsbCxlLmQuYS4kYigpLG4uVmcoKX1mdW5jdGlvbiBMSW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lO2ZvcihuLlVnKCJEZXB0aCBmaXJzdCBtb2RlbCBvcmRlciBsYXllcmluZyIsMSksZS5kPXQsdGU9bmV3IGJ0LEo9bmV3IEcoZS5kLmEpO0ouYTxKLmMuYy5sZW5ndGg7KXo9bChyZShKKSwxMCksei5rPT0oWm4oKSxQcykmJiRuKHRlLmMseik7Zm9yKENuKCksVnModGUsbmV3ICRlZSksZj0hMCxlLmI9bmV3IHl1KGUuZCksZS5hPW51bGwsdnQoZS5kLmIsZS5iKSxlLmIucD0wLGUuYz0wLGUuZj1uZXcgb3MsVj1uZXcgRyh0ZSk7Vi5hPFYuYy5jLmxlbmd0aDspaWYoej1sKHJlKFYpLDEwKSxmKVZhKHosZS5iKSxmPSExO2Vsc2UgaWYoSEFuKGUseikpaWYoQj1lLmMsQj12ZHQoQix6KSxyPUIrMixDPUItZS5jLGUuZi5iPT0wKUo5ZShlLHIseik7ZWxzZSBpZihDPjApe2ZvcihNZT1ScihlLmYsMCk7TWUuYiE9TWUuZC5jOylUZT1sKEJyKE1lKSwxMCksVGUucCs9Qi1lLmU7cjllKGUpLENoKGUuZiksSjllKGUscix6KX1lbHNle2Zvcih1aShlLmYseiksei5wPXIsZS5lPWIuTWF0aC5tYXgoZS5lLHIpLG89bmV3IGhyKGRyKGthKHopLmEuS2MoKSxuZXcgaikpO2pyKG8pOylhPWwoeHIobyksMTgpLCFhLmMuaS5jJiZhLmMuaS5rPT0oWm4oKSxjdSkmJih1aShlLmYsYS5jLmkpLGEuYy5pLnA9ci0xKTtlLmM9cn1lbHNlIHI5ZShlKSxDaChlLmYpLHI9MCxqcihuZXcgaHIoZHIoa2EoeikuYS5LYygpLG5ldyBqKSkpPyhCPTAsQj12ZHQoQix6KSxyPUIrMixKOWUoZSxyLHopKToodWkoZS5mLHopLHoucD0wLGUuZT1iLk1hdGgubWF4KGUuZSwwKSxlLmI9bChqdChlLmQuYiwwKSwzMCksZS5jPTApO2ZvcihlLmYuYj09MHx8cjllKGUpLGUuZC5hLmMubGVuZ3RoPTAsZmU9bmV3IGJ0LEU9bmV3IEcoZS5kLmIpO0UuYTxFLmMuYy5sZW5ndGg7KWc9bChyZShFKSwzMCksZy5hLmMubGVuZ3RoPT0wJiYkbihmZS5jLGcpO2ZvcihnOGUoZS5kLmIsZmUpLEw9MCx3PW5ldyBHKGUuZC5iKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMzApLGcucD1MLCsrTDtuLlZnKCl9ZnVuY3Rpb24gTUluKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbixqbix1cixvaSx3cyxWbCxsYztpZihCbj1udWxsLHVyPXQsam49VWN0KGUsUGN0KG4pLHVyKSxmRShqbixZZyh1cixQZCkpLG9pPWwoWDUoZS5nLHh4KFdnKHVyLEhmZSkpKSwyNyksQj1XZyh1ciwic291cmNlUG9ydCIpLHI9bnVsbCxCJiYocj14eChCKSksd3M9bChYNShlLmosciksMTIzKSwhb2kpdGhyb3cgZz1ORSh1ciksVj0iQW4gZWRnZSBtdXN0IGhhdmUgYSBzb3VyY2Ugbm9kZSAoZWRnZSBpZDogJyIrZyxKPVYra1QsdWUobmV3IGRkKEopKTtpZih3cyYmIXlkKE0xKHdzKSxvaSkpdGhyb3cgdz1ZZyh1cixQZCksdGU9IlRoZSBzb3VyY2UgcG9ydCBvZiBhbiBlZGdlIG11c3QgYmUgYSBwb3J0IG9mIHRoZSBlZGdlJ3Mgc291cmNlIG5vZGUgKGVkZ2UgaWQ6ICciK3csZmU9dGUra1QsdWUobmV3IGRkKGZlKSk7aWYoY249KCFqbi5iJiYoam4uYj1uZXcgTG4oX3Isam4sNCw3KSksam4uYiksbz1udWxsLHdzP289d3M6bz1vaSxxcihjbixvKSxWbD1sKFg1KGUuZyx4eChXZyh1cix3U2UpKSksMjcpLHo9V2codXIsInRhcmdldFBvcnQiKSxhPW51bGwseiYmKGE9eHgoeikpLGxjPWwoWDUoZS5qLGEpLDEyMyksIVZsKXRocm93IEw9TkUodXIpLFRlPSJBbiBlZGdlIG11c3QgaGF2ZSBhIHRhcmdldCBub2RlIChlZGdlIGlkOiAnIitMLE1lPVRlK2tULHVlKG5ldyBkZChNZSkpO2lmKGxjJiYheWQoTTEobGMpLFZsKSl0aHJvdyBFPVlnKHVyLFBkKSwkZT0iVGhlIHRhcmdldCBwb3J0IG9mIGFuIGVkZ2UgbXVzdCBiZSBhIHBvcnQgb2YgdGhlIGVkZ2UncyB0YXJnZXQgbm9kZSAoZWRnZSBpZDogJyIrRSxaZT0kZStrVCx1ZShuZXcgZGQoWmUpKTtpZihhbj0oIWpuLmMmJihqbi5jPW5ldyBMbihfcixqbiw1LDgpKSxqbi5jKSxmPW51bGwsbGM/Zj1sYzpmPVZsLHFyKGFuLGYpLCgham4uYiYmKGpuLmI9bmV3IExuKF9yLGpuLDQsNykpLGpuLmIpLmk9PTB8fCgham4uYyYmKGpuLmM9bmV3IExuKF9yLGpuLDUsOCkpLGpuLmMpLmk9PTApdGhyb3cgQz1ZZyh1cixQZCksb3Q9dzR0K0MsU3Q9b3Qra1QsdWUobmV3IGRkKFN0KSk7cmV0dXJuIG1VKHVyLGpuKSx0VG4odXIsam4pLEJuPXdjZShlLHVyLGpuKSxCbn1mdW5jdGlvbiBsd3QoZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyLG9pLHdzO2Zvcih6PWwoUShlLChiYigpLEh4KSksMjcpLE1lPUlpLCRlPUlpLGZlPWxvLFRlPWxvLG90PW5ldyBHKGUuZSk7b3QuYTxvdC5jLmMubGVuZ3RoOylaZT1sKHJlKG90KSwxNTMpLGpuPVplLmQsdXI9WmUuZSxNZT1iLk1hdGgubWluKE1lLGpuLmEtdXIuYS8yKSwkZT1iLk1hdGgubWluKCRlLGpuLmItdXIuYi8yKSxmZT1iLk1hdGgubWF4KGZlLGpuLmErdXIuYS8yKSxUZT1iLk1hdGgubWF4KFRlLGpuLmIrdXIuYi8yKTtmb3Iobj1uZXcgRyhlLmIpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwyNTApLGpuPXQuZCx1cj10LmUsTWU9Yi5NYXRoLm1pbihNZSxqbi5hLXVyLmEvMiksJGU9Yi5NYXRoLm1pbigkZSxqbi5iLXVyLmIvMiksZmU9Yi5NYXRoLm1heChmZSxqbi5hK3VyLmEvMiksVGU9Yi5NYXRoLm1heChUZSxqbi5iK3VyLmIvMik7Zm9yKEJuPWwoYXQoeiwoYjAoKSxKN3QpKSwxMDcpLGFuPW5ldyBsdChCbi5iLU1lLEJuLmQtJGUpLEU9bmV3IEcoZS5lKTtFLmE8RS5jLmMubGVuZ3RoOyl3PWwocmUoRSksMTUzKSxjbj1RKHcsSHgpLERlKGNuLDIwNykmJihKPWwoY24sMjcpLFN0PU9pKG5ldyBFbyh3LmQpLGFuKSxRaChKLFN0LmEtSi5nLzIsU3QuYi1KLmYvMikpO2ZvcihvPW5ldyBHKGUuYyk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDI5MCksTD1sKFEoYSxIeCksNzQpLEI9bDYoTCwhMCwhMCksb2k9bmV3IEVvKG43ZShhKSksT2kob2ksYW4pLGtPKEIsb2kuYSxvaS5iKSxWdShhLmEsbmV3IF9ldChhbixCKSkscj1uZXcgRW8ocjdlKGEpKSxPaShyLGFuKSx4TyhCLHIuYSxyLmIpO2ZvcihnPW5ldyBHKGUuZCk7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDQ1NCksVj1sKFEoZixIeCksMTM1KSx0ZT1PaShuZXcgRW8oZi5kKSxhbiksUWgoVix0ZS5hLHRlLmIpO3dzPWZlLU1lKyhCbi5iK0JuLmMpLEM9VGUtJGUrKEJuLmQrQm4uYSksUnQoQnQoYXQoeiwocGkoKSxDNCkpKSl8fEd3KHosd3MsQywhMSwhMCksSGkoeix0Nyx3cy0oQm4uYitCbi5jKSksSGkoeixlNyxDLShCbi5kK0JuLmEpKX1mdW5jdGlvbiBod3QoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuO3JldHVybiBMPXlBbihpbChlLChDdCgpLGVkKSksdCksVj1pNihpbChlLF8wKSx0KSwkZT1pNihpbChlLCRoKSx0KSxjbj1oVShpbChlLEhmKSx0KSxCPWhVKGlsKGUseWYpLHQpLFRlPWk2KGlsKGUsQTApLHQpLEo9aTYoaWwoZSx6bCksdCksb3Q9aTYoaWwoZSx6aCksdCksWmU9aTYoaWwoZSx4ZiksdCksYW49aFUoaWwoZSxKdSksdCksZmU9aTYoaWwoZSxobCksdCksTWU9aTYoaWwoZSxxbCksdCksU3Q9aTYoaWwoZSxsbCksdCksQm49aFUoaWwoZSxmbCksdCksej1oVShpbChlLF9sKSx0KSx0ZT1pNihpbChlLER1KSx0KSxuPVk1KGhlKGxlKE5hLDEpLFpvLDI4LDE1LFtUZS5hLGNuLmEsb3QuYSxCbi5hXSkpLHI9WTUoaGUobGUoTmEsMSksWm8sMjgsMTUsW1YuYSxMLmEsJGUuYSx0ZS5hXSkpLGE9ZmUuYSxvPVk1KGhlKGxlKE5hLDEpLFpvLDI4LDE1LFtKLmEsQi5hLFplLmEsei5hXSkpLEU9WTUoaGUobGUoTmEsMSksWm8sMjgsMTUsW1RlLmIsVi5iLEouYixNZS5iXSkpLHc9WTUoaGUobGUoTmEsMSksWm8sMjgsMTUsW2NuLmIsTC5iLEIuYix0ZS5iXSkpLEM9YW4uYixnPVk1KGhlKGxlKE5hLDEpLFpvLDI4LDE1LFtvdC5iLCRlLmIsWmUuYixTdC5iXSkpLG4yKGlsKGUsZWQpLG4rYSxFK0MpLG4yKGlsKGUsRHUpLG4rYSxFK0MpLG4yKGlsKGUsXzApLG4rYSwwKSxuMihpbChlLCRoKSxuK2EsRStDK3cpLG4yKGlsKGUsSGYpLDAsRStDKSxuMihpbChlLHlmKSxuK2ErcixFK0MpLG4yKGlsKGUsemwpLG4rYStyLDApLG4yKGlsKGUsemgpLDAsRStDK3cpLG4yKGlsKGUseGYpLG4rYStyLEUrQyt3KSxuMihpbChlLEp1KSwwLEUpLG4yKGlsKGUsaGwpLG4sMCksbjIoaWwoZSxsbCksMCxFK0MrdyksbjIoaWwoZSxfbCksbithK3IsMCksZj1uZXcgcWEsZi5hPVk1KGhlKGxlKE5hLDEpLFpvLDI4LDE1LFtuK3IrYStvLGFuLmEsTWUuYSxTdC5hXSkpLGYuYj1ZNShoZShsZShOYSwxKSxabywyOCwxNSxbRSt3K0MrZyxmZS5iLEJuLmIsei5iXSkpLGZ9ZnVuY3Rpb24gZnd0KGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbjtmb3IoVGU9bmV3IGx0KGdzLGdzKSx0PW5ldyBsdChpYSxpYSksY249bmV3IEcoZSk7Y24uYTxjbi5jLmMubGVuZ3RoOylTdD1sKHJlKGNuKSw4KSxUZS5hPWIuTWF0aC5taW4oVGUuYSxTdC5hKSxUZS5iPWIuTWF0aC5taW4oVGUuYixTdC5iKSx0LmE9Yi5NYXRoLm1heCh0LmEsU3QuYSksdC5iPWIuTWF0aC5tYXgodC5iLFN0LmIpO2ZvcihCPW5ldyBsdCh0LmEtVGUuYSx0LmItVGUuYiksRT1uZXcgbHQoVGUuYS01MCxUZS5iLUIuYS01MCksQz1uZXcgbHQoVGUuYS01MCx0LmIrQi5hKzUwKSxMPW5ldyBsdCh0LmErQi5iLzIrNTAsVGUuYitCLmIvMiksej1uZXcgQ2tlKEUsQyxMKSxvdD1uZXcgS3Msbz1uZXcgYnQsbj1uZXcgYnQsb3QuYS56Yyh6LG90KSxCbj1uZXcgRyhlKTtCbi5hPEJuLmMuYy5sZW5ndGg7KXtmb3IoYW49bChyZShCbiksOCksby5jLmxlbmd0aD0wLFplPW90LmEuZWMoKS5LYygpO1plLk9iKCk7KU1lPWwoWmUuUGIoKSwzMTcpLHI9TWUuZCxwYihyLE1lLmEpLEZ3KHBiKE1lLmQsYW4pLHBiKE1lLmQsTWUuYSkpPDAmJiRuKG8uYyxNZSk7Zm9yKG4uYy5sZW5ndGg9MCwkZT1uZXcgRyhvKTskZS5hPCRlLmMuYy5sZW5ndGg7KWZvcihNZT1sKHJlKCRlKSwzMTcpLHRlPW5ldyBHKE1lLmUpO3RlLmE8dGUuYy5jLmxlbmd0aDspe2ZvcihWPWwocmUodGUpLDE3NyksZj0hMCx3PW5ldyBHKG8pO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwzMTcpLGchPU1lJiYoSmMoVixqdChnLmUsMCkpfHxKYyhWLGp0KGcuZSwxKSl8fEpjKFYsanQoZy5lLDIpKSkmJihmPSExKTtmJiYkbihuLmMsVil9Zm9yKHpndChvdCxvKSx0byhvdCxuZXcgam8pLEo9bmV3IEcobik7Si5hPEouYy5jLmxlbmd0aDspVj1sKHJlKEopLDE3NyksbmEob3QsbmV3IENrZShhbixWLmEsVi5iKSl9Zm9yKGZlPW5ldyBLcyx0byhvdCxuZXcgRW0oZmUpKSxhPWZlLmEuZWMoKS5LYygpO2EuT2IoKTspVj1sKGEuUGIoKSwxNzcpLChyVih6LFYuYSl8fHJWKHosVi5iKSkmJmEuUWIoKTtyZXR1cm4gdG8oZmUsbmV3ICRvKSxmZX1mdW5jdGlvbiBzdSgpe3N1PVUsdFplKCksVF90PUxhLmEsbChPZSh0dChMYS5hKSwwKSwxOSksa190PUxhLmYsbChPZSh0dChMYS5mKSwwKSwxOSksbChPZSh0dChMYS5mKSwxKSwzNSksRV90PUxhLm4sbChPZSh0dChMYS5uKSwwKSwzNSksbChPZSh0dChMYS5uKSwxKSwzNSksbChPZSh0dChMYS5uKSwyKSwzNSksbChPZSh0dChMYS5uKSwzKSwzNSksZFBlPUxhLmcsbChPZSh0dChMYS5nKSwwKSwxOSksbChPZSh0dChMYS5nKSwxKSwzNSkseF90PUxhLmMsbChPZSh0dChMYS5jKSwwKSwxOSksbChPZSh0dChMYS5jKSwxKSwxOSksZ1BlPUxhLmksbChPZSh0dChMYS5pKSwwKSwxOSksbChPZSh0dChMYS5pKSwxKSwxOSksbChPZSh0dChMYS5pKSwyKSwxOSksbChPZSh0dChMYS5pKSwzKSwxOSksbChPZSh0dChMYS5pKSw0KSwzNSkscFBlPUxhLmosbChPZSh0dChMYS5qKSwwKSwxOSksZlBlPUxhLmQsbChPZSh0dChMYS5kKSwwKSwxOSksbChPZSh0dChMYS5kKSwxKSwxOSksbChPZSh0dChMYS5kKSwyKSwxOSksbChPZSh0dChMYS5kKSwzKSwxOSksbChPZSh0dChMYS5kKSw0KSwzNSksbChPZSh0dChMYS5kKSw1KSwzNSksbChPZSh0dChMYS5kKSw2KSwzNSksbChPZSh0dChMYS5kKSw3KSwzNSkseV90PUxhLmIsbChPZSh0dChMYS5iKSwwKSwzNSksbChPZSh0dChMYS5iKSwxKSwzNSkscFk9TGEuZSxsKE9lKHR0KExhLmUpLDApLDM1KSxsKE9lKHR0KExhLmUpLDEpLDM1KSxsKE9lKHR0KExhLmUpLDIpLDM1KSxsKE9lKHR0KExhLmUpLDMpLDM1KSxsKE9lKHR0KExhLmUpLDQpLDE5KSxsKE9lKHR0KExhLmUpLDUpLDE5KSxsKE9lKHR0KExhLmUpLDYpLDE5KSxsKE9lKHR0KExhLmUpLDcpLDE5KSxsKE9lKHR0KExhLmUpLDgpLDE5KSxsKE9lKHR0KExhLmUpLDkpLDE5KSxsKE9lKHR0KExhLmUpLDEwKSwzNSksQ2c9TGEuayxsKE9lKHR0KExhLmspLDApLDM1KSxsKE9lKHR0KExhLmspLDEpLDM1KX1mdW5jdGlvbiBHa2UoZSl7dmFyIHQsbixyLGEsbztzd2l0Y2godD1lLmMsdCl7Y2FzZSAxMTpyZXR1cm4gZS52bSgpO2Nhc2UgMTI6cmV0dXJuIGUueG0oKTtjYXNlIDE0OnJldHVybiBlLnptKCk7Y2FzZSAxNTpyZXR1cm4gZS5DbSgpO2Nhc2UgMTY6cmV0dXJuIGUuQW0oKTtjYXNlIDE3OnJldHVybiBlLkRtKCk7Y2FzZSAyMTpyZXR1cm4gTGkoZSksRGkoKSxEaSgpLFdNO2Nhc2UgMTA6c3dpdGNoKGUuYSl7Y2FzZSA2NTpyZXR1cm4gZS5obSgpO2Nhc2UgOTA6cmV0dXJuIGUubW0oKTtjYXNlIDEyMjpyZXR1cm4gZS50bSgpO2Nhc2UgOTg6cmV0dXJuIGUubm0oKTtjYXNlIDY2OnJldHVybiBlLmltKCk7Y2FzZSA2MDpyZXR1cm4gZS5zbSgpO2Nhc2UgNjI6cmV0dXJuIGUucW0oKX19c3dpdGNoKG89U0luKGUpLHQ9ZS5jLHQpe2Nhc2UgMzpyZXR1cm4gZS5JbShvKTtjYXNlIDQ6cmV0dXJuIGUuR20obyk7Y2FzZSA1OnJldHVybiBlLkhtKG8pO2Nhc2UgMDppZihlLmE9PTEyMyYmZS5kPGUuail7aWYoYT1lLmQscj0wLG49LTEsKHQ9Y28oZS5pLGErKykpPj00OCYmdDw9NTcpe2ZvcihyPXQtNDg7YTxlLmomJih0PWNvKGUuaSxhKyspKT49NDgmJnQ8PTU3OylpZihyPXIqMTArdC00OCxyPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLENTZSkpKSl9ZWxzZSB0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksSzR0KSkpKTtpZihuPXIsdD09NDQpe2lmKGE+PWUuail0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksWTR0KSkpKTtpZigodD1jbyhlLmksYSsrKSk+PTQ4JiZ0PD01Nyl7Zm9yKG49dC00ODthPGUuaiYmKHQ9Y28oZS5pLGErKykpPj00OCYmdDw9NTc7KWlmKG49bioxMCt0LTQ4LG48MCl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksQ1NlKSkpKTtpZihyPm4pdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLFg0dCkpKSl9ZWxzZSBuPS0xfWlmKHQhPTEyNSl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksVzR0KSkpKTtlLmJtKGEpPyhvPShEaSgpLERpKCksbmV3IFR5KDksbykpLGUuZD1hKzEpOihvPShEaSgpLERpKCksbmV3IFR5KDMsbykpLGUuZD1hKSxvLk9tKHIpLG8uTm0obiksTGkoZSl9fXJldHVybiBvfWZ1bmN0aW9uIERJbihlKXt2YXIgdCxuLHIsYSxvO3N3aXRjaChuPWwoUShlLChmdCgpLEx1KSksMjEpLHQ9T3Eodjh0KSxhPWwoUShlLChOdCgpLHA0KSksMzQ2KSxhPT0ocnAoKSxBMikmJkRoKHQsdzh0KSxSdChCdChRKGUsaWRlKSkpP2ZpKHQsKHVvKCkseTApLCh2bygpLGQxZSkpOmZpKHQsKHVvKCksYnUpLCh2bygpLGQxZSkpLFEoZSwoUUgoKSxrTSkpIT1udWxsJiZEaCh0LHk4dCksKFJ0KEJ0KFEoZSxSTWUpKSl8fFJ0KEJ0KFEoZSxOTWUpKSkpJiZ5bCh0LCh1bygpLG1jKSwodm8oKSxPQWUpKSxsKFEoZSxSaCksODgpLmcpe2Nhc2UgMjpjYXNlIDM6Y2FzZSA0OnlsKGZpKHQsKHVvKCkseTApLCh2bygpLFBBZSkpLG1jLE5BZSl9c3dpdGNoKG4uSGMoKEhvKCksZVcpKSYmeWwoZmkoZmkodCwodW8oKSx5MCksKHZvKCksSUFlKSksX3UsTUFlKSxtYyxEQWUpLHFlKFEoZSx6YikpIT09cWUoKE5mKCksQVcpKSYmZmkodCwodW8oKSxidSksKHZvKCksWEFlKSksbi5IYyhuVykmJihmaSh0LCh1bygpLHkwKSwodm8oKSxlTGUpKSxmaSh0LHZnLEpBZSksZmkodCxidSxaQWUpKSxxZShRKGUsbFcpKSE9PXFlKCh6RSgpLFZMKSkmJnFlKFEoZSxicCkpIT09cWUoKGlwKCksSkIpKSYmeWwodCwodW8oKSxtYyksKHZvKCksVkFlKSksUnQoQnQoUShlLEJNZSkpKSYmZmkodCwodW8oKSxidSksKHZvKCksSEFlKSksUnQoQnQoUShlLGVkZSkpKSYmZmkodCwodW8oKSxidSksKHZvKCksdExlKSksVlRuKGUpJiYocWUoUShlLHA0KSk9PT1xZShBMik/cj1sKFEoZSxUQiksMjk5KTpyPWwoUShlLFoxZSksMjk5KSxvPXI9PSh2RSgpLFIxZSk/KHZvKCksUUFlKToodm8oKSxpTGUpLGZpKHQsKHVvKCksX3UpLG8pKSxsKFEoZSxsRGUpLDM4OCkuZyl7Y2FzZSAxOmZpKHQsKHVvKCksX3UpLCh2bygpLG5MZSkpO2JyZWFrO2Nhc2UgMjp5bChmaShmaSh0LCh1bygpLGJ1KSwodm8oKSxTQWUpKSxfdSxfQWUpLG1jLEFBZSl9cmV0dXJuIHFlKFEoZSx5ZykpIT09cWUoKEVkKCksRTIpKSYmZmkodCwodW8oKSxidSksKHZvKCksckxlKSksdH1mdW5jdGlvbiBkd3QoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lO2lmKEh1KGUuYSx0KSl7aWYoVzAobChjcihlLmEsdCksNDkpLG4pKXJldHVybiAxfWVsc2Uga2koZS5hLHQsbmV3IEtzKTtpZihIdShlLmEsbikpe2lmKFcwKGwoY3IoZS5hLG4pLDQ5KSx0KSlyZXR1cm4tMX1lbHNlIGtpKGUuYSxuLG5ldyBLcyk7aWYoSHUoZS5lLHQpKXtpZihXMChsKGNyKGUuZSx0KSw0OSksbikpcmV0dXJuLTF9ZWxzZSBraShlLmUsdCxuZXcgS3MpO2lmKEh1KGUuZSxuKSl7aWYoVzAobChjcihlLmEsbiksNDkpLHQpKXJldHVybiAxfWVsc2Uga2koZS5lLG4sbmV3IEtzKTtpZihlLmM9PShFZCgpLHlkZSl8fCFucyh0LChmdCgpLEtpKSl8fCFucyhuLChmdCgpLEtpKSkpe2ZvcihMPW51bGwsRT1uZXcgRyh0LmopO0UuYTxFLmMuYy5sZW5ndGg7KWc9bChyZShFKSwxMiksZy5lLmMubGVuZ3RoPT0wfHxsKGp0KGcuZSwwKSwxOCkuYy5pLmMhPXQuYyYmKEw9bChqdChnLmUsMCksMTgpLmMpO2Zvcih6PW51bGwsdz1uZXcgRyhuLmopO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxMiksZy5lLmMubGVuZ3RoPT0wfHxsKGp0KGcuZSwwKSwxOCkuYy5pLmMhPW4uYyYmKHo9bChqdChnLmUsMCksMTgpLmMpO2lmKEwmJnope2lmKEM9TC5pLEI9ei5pLEMmJkM9PUIpe2ZvcihKPW5ldyBHKEMuaik7Si5hPEouYy5jLmxlbmd0aDspe2lmKFY9bChyZShKKSwxMiksVj09TClyZXR1cm4gV0UoZSxuLHQpLC0xO2lmKFY9PXopcmV0dXJuIFdFKGUsdCxuKSwxfXJldHVybiBydShTdWUoZSx0KSxTdWUoZSxuKSl9Zm9yKGZlPWUuZCxUZT0wLE1lPWZlLmxlbmd0aDtUZTxNZTsrK1RlKXtpZih0ZT1mZVtUZV0sdGU9PUMpcmV0dXJuIFdFKGUsbix0KSwtMTtpZih0ZT09QilyZXR1cm4gV0UoZSx0LG4pLDF9fWlmKCFucyh0LChmdCgpLEtpKSl8fCFucyhuLEtpKSlyZXR1cm4gYT1TdWUoZSx0KSxmPVN1ZShlLG4pLGE+Zj9XRShlLHQsbik6V0UoZSxuLHQpLGE8Zj8tMTphPmY/MTowfXJldHVybiByPWwoUSh0LChmdCgpLEtpKSksMTcpLmEsbz1sKFEobixLaSksMTcpLmEscj5vP1dFKGUsdCxuKTpXRShlLG4sdCkscjxvPy0xOnI+bz8xOjB9ZnVuY3Rpb24gS3coZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2lmKG49PW51bGwpcmV0dXJuIG51bGw7aWYoZS5hIT10LmprKCkpdGhyb3cgdWUobmV3IFluKHlUK3QueGUoKSt0MykpO2lmKERlKHQsNDY5KSl7aWYodGU9a1NuKGwodCw2ODUpLG4pLCF0ZSl0aHJvdyB1ZShuZXcgWW4oemZlK24rIicgaXMgbm90IGEgdmFsaWQgZW51bWVyYXRvciBvZiAnIit0LnhlKCkrIiciKSk7cmV0dXJuIHRlfXN3aXRjaChvMigoRWwoKSxpbyksdCkuTmwoKSl7Y2FzZSAyOntuPVR1KG4sITEpO2JyZWFrfWNhc2UgMzp7bj1UdShuLCEwKTticmVha319aWYocj1vMihpbyx0KS5KbCgpLHIpcmV0dXJuIHIuamsoKS53aSgpLnRpKHIsbik7aWYoQj1vMihpbyx0KS5MbCgpLEIpe2Zvcih0ZT1uZXcgYnQsRT1UY2UobiksQz0wLEw9RS5sZW5ndGg7QzxMOysrQyl3PUVbQ10sdnQodGUsQi5qaygpLndpKCkudGkoQix3KSk7cmV0dXJuIHRlfWlmKEo9bzIoaW8sdCkuTWwoKSwhSi5kYygpKXtmb3IoVj1KLktjKCk7Vi5PYigpOyl7ej1sKFYuUGIoKSwxNTYpO3RyeXtpZih0ZT16LmprKCkud2koKS50aSh6LG4pLHRlIT1udWxsKXJldHVybiB0ZX1jYXRjaChmZSl7aWYoZmU9YnMoZmUpLCFEZShmZSw2MykpdGhyb3cgdWUoZmUpfX10aHJvdyB1ZShuZXcgWW4oemZlK24rIicgZG9lcyBub3QgbWF0Y2ggYW55IG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gZGF0YXR5cGUgJyIrdC54ZSgpKyInIikpfWlmKGwodCw4NDcpLm9rKCksYT1qeW4odC5raygpKSwhYSlyZXR1cm4gbnVsbDtpZihhPT1QTCl7Zj0wO3RyeXtmPU9oKG4sbG8sSWkpJlpzfWNhdGNoKGZlKXtpZihmZT1icyhmZSksRGUoZmUsMTMwKSlvPWlWKG4pLGY9b1swXTtlbHNlIHRocm93IHVlKGZlKX1yZXR1cm4gd04oZil9aWYoYT09Y0spe2ZvcihnPTA7ZzxqTS5sZW5ndGg7KytnKXRyeXtyZXR1cm4gZ2V0KGpNW2ddLG4pfWNhdGNoKGZlKXtpZihmZT1icyhmZSksIURlKGZlLDMzKSl0aHJvdyB1ZShmZSl9dGhyb3cgdWUobmV3IFluKHpmZStuKyInIGlzIG5vdCBhIGRhdGUgZm9ybWF0dGVkIHN0cmluZyBvZiB0aGUgZm9ybSB5eXl5LU1NLWRkJ1QnSEg6bW06c3MnLidTU1NaIG9yIGEgdmFsaWQgc3Vic2V0IHRoZXJlb2YiKSl9dGhyb3cgdWUobmV3IFluKHpmZStuKyInIGlzIGludmFsaWQuICIpKX1mdW5jdGlvbiBNbGUoKXtNbGU9VSxYaT1uZXcgQ3cseG4oWGksKEN0KCksZWQpLER1KSx4bihYaSxIZixEdSkseG4oWGksSGYsZmwpLHhuKFhpLHlmLF9sKSx4bihYaSx5ZixEdSkseG4oWGksXzAsRHUpLHhuKFhpLF8wLHFsKSx4bihYaSwkaCxsbCkseG4oWGksJGgsRHUpLHhuKFhpLGhsLEp1KSx4bihYaSxobCxEdSkseG4oWGksaGwscWwpLHhuKFhpLGhsLGxsKSx4bihYaSxKdSxobCkseG4oWGksSnUsZmwpLHhuKFhpLEp1LF9sKSx4bihYaSxKdSxEdSkseG4oWGksQTAsQTApLHhuKFhpLEEwLHFsKSx4bihYaSxBMCxmbCkseG4oWGksemwsemwpLHhuKFhpLHpsLHFsKSx4bihYaSx6bCxfbCkseG4oWGksemgsemgpLHhuKFhpLHpoLGxsKSx4bihYaSx6aCxmbCkseG4oWGkseGYseGYpLHhuKFhpLHhmLGxsKSx4bihYaSx4ZixfbCkseG4oWGkscWwsXzApLHhuKFhpLHFsLGhsKSx4bihYaSxxbCxBMCkseG4oWGkscWwsemwpLHhuKFhpLHFsLER1KSx4bihYaSxxbCxxbCkseG4oWGkscWwsZmwpLHhuKFhpLHFsLF9sKSx4bihYaSxsbCwkaCkseG4oWGksbGwsaGwpLHhuKFhpLGxsLHpoKSx4bihYaSxsbCx4ZikseG4oWGksbGwsbGwpLHhuKFhpLGxsLGZsKSx4bihYaSxsbCxfbCkseG4oWGksbGwsRHUpLHhuKFhpLGZsLEhmKSx4bihYaSxmbCxKdSkseG4oWGksZmwsQTApLHhuKFhpLGZsLHpoKSx4bihYaSxmbCxxbCkseG4oWGksZmwsbGwpLHhuKFhpLGZsLGZsKSx4bihYaSxmbCxEdSkseG4oWGksX2wseWYpLHhuKFhpLF9sLEp1KSx4bihYaSxfbCx6bCkseG4oWGksX2wseGYpLHhuKFhpLF9sLHFsKSx4bihYaSxfbCxsbCkseG4oWGksX2wsX2wpLHhuKFhpLF9sLER1KSx4bihYaSxEdSxlZCkseG4oWGksRHUsSGYpLHhuKFhpLER1LHlmKSx4bihYaSxEdSxfMCkseG4oWGksRHUsJGgpLHhuKFhpLER1LGhsKSx4bihYaSxEdSxKdSkseG4oWGksRHUscWwpLHhuKFhpLER1LGxsKSx4bihYaSxEdSxmbCkseG4oWGksRHUsX2wpLHhuKFhpLER1LER1KX1mdW5jdGlvbiBLa2UoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuO2ZvcihlLmQ9bmV3IGx0KGdzLGdzKSxlLmM9bmV3IGx0KGlhLGlhKSxCPXQuS2MoKTtCLk9iKCk7KWZvcihDPWwoQi5QYigpLDM2KSxNZT1uZXcgRyhDLmEpO01lLmE8TWUuYy5jLmxlbmd0aDspVGU9bChyZShNZSksMTApLGUuZC5hPWIuTWF0aC5taW4oZS5kLmEsVGUubi5hLVRlLmQuYiksZS5kLmI9Yi5NYXRoLm1pbihlLmQuYixUZS5uLmItVGUuZC5kKSxlLmMuYT1iLk1hdGgubWF4KGUuYy5hLFRlLm4uYStUZS5vLmErVGUuZC5jKSxlLmMuYj1iLk1hdGgubWF4KGUuYy5iLFRlLm4uYitUZS5vLmIrVGUuZC5hKTtmb3IoZz1uZXcgUlFlLEw9dC5LYygpO0wuT2IoKTspQz1sKEwuUGIoKSwzNikscj1kSW4oZSxDKSx2dChnLmEsciksci5hPXIuYXwhbChRKHIuYywoZnQoKSxwcCkpLDIxKS5kYygpO2ZvcihlLmI9KE1jZSgpLGNuPW5ldyBxOSxjbi5mPW5ldyByZnQobiksY24uYj15TW4oY24uZixnKSxjbiksSU1uKChWPWUuYixuZXcgTDgsVikpLGUuZT1uZXcgcWEsZS5hPWUuYi5mLmUsZj1uZXcgRyhnLmEpO2YuYTxmLmMuYy5sZW5ndGg7KWZvcihhPWwocmUoZiksODU1KSwkZT1kMm4oZS5iLGEpLGNfbihhLmMsJGUuYSwkZS5iKSx0ZT1uZXcgRyhhLmMuYSk7dGUuYTx0ZS5jLmMubGVuZ3RoOylKPWwocmUodGUpLDEwKSxKLms9PShabigpLFVzKSYmKGZlPWo5ZShlLEoubixsKFEoSiwoZnQoKSxXYykpLDY0KSksT2koWTAoSi5uKSxmZSkpO2ZvcihvPW5ldyBHKGcuYSk7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSw4NTUpLEU9bmV3IEcoTTRuKGEpKTtFLmE8RS5jLmMubGVuZ3RoOylmb3Iodz1sKHJlKEUpLDE4KSxTdD1uZXcgR3oody5hKSxQayhTdCwwLEkxKHcuYykpLHVpKFN0LEkxKHcuZCkpLHo9bnVsbCxvdD1ScihTdCwwKTtvdC5iIT1vdC5kLmM7KXtpZihaZT1sKEJyKG90KSw4KSwheil7ej1aZTtjb250aW51ZX1XNmUoei5hLFplLmEpPyhlLmUuYT1iLk1hdGgubWluKGUuZS5hLHouYSksZS5hLmE9Yi5NYXRoLm1heChlLmEuYSx6LmEpKTpXNmUoei5iLFplLmIpJiYoZS5lLmI9Yi5NYXRoLm1pbihlLmUuYix6LmIpLGUuYS5iPWIuTWF0aC5tYXgoZS5hLmIsei5iKSksej1aZX1IcShlLmUpLE9pKGUuYSxlLmUpfWZ1bmN0aW9uIElJbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7aWYobj0wLGY9MCxvPXQubGVuZ3RoLGc9bnVsbCxFPW5ldyBTNSxmPG8mJihYbihmLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZik9PTQzKSYmKCsrZiwrK24sZjxvJiYoWG4oZix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGYpPT00M3x8KFhuKGYsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChmKT09NDUpKSkpdGhyb3cgdWUobmV3IGdkKFl3K3QrJyInKSk7Zm9yKDtmPG8mJihYbihmLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZikhPTQ2KSYmKFhuKGYsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChmKSE9MTAxKSYmKFhuKGYsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChmKSE9NjkpOykrK2Y7aWYoRS5hKz0iIit0Zih0PT1udWxsP3VsOihucih0KSx0KSxuLGYpLGY8byYmKFhuKGYsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChmKT09NDYpKXtmb3IoKytmLG49ZjtmPG8mJihYbihmLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZikhPTEwMSkmJihYbihmLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZikhPTY5KTspKytmO2UuZT1mLW4sRS5hKz0iIit0Zih0PT1udWxsP3VsOihucih0KSx0KSxuLGYpfWVsc2UgZS5lPTA7aWYoZjxvJiYoWG4oZix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGYpPT0xMDF8fChYbihmLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZik9PTY5KSkmJigrK2Ysbj1mLGY8byYmKFhuKGYsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChmKT09NDMpJiYoKytmLGY8byYmKFhuKGYsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChmKSE9NDUpJiYrK24pLGc9KEdhKG4sbyx0Lmxlbmd0aCksdC5zdWJzdHIobixvLW4pKSxlLmU9ZS5lLU9oKGcsbG8sSWkpLGUuZSE9dWEoZS5lKSkpdGhyb3cgdWUobmV3IGdkKCJTY2FsZSBvdXQgb2YgcmFuZ2UuIikpO2lmKHc9RS5hLHcubGVuZ3RoPDE2KXtpZihlLmY9KGZfZT09bnVsbCYmKGZfZT1uZXcgUmVnRXhwKCJeWystXT9cXGQqJCIsImkiKSksZl9lLnRlc3Qodyk/cGFyc2VJbnQodywxMCk6TmFOKSxpc05hTihlLmYpKXRocm93IHVlKG5ldyBnZChZdyt0KyciJykpO2UuYT1nOWUoZS5mKX1lbHNlIGc0bihlLG5ldyBvYih3KSk7Zm9yKGUuZD1FLmEubGVuZ3RoLGE9MDthPEUuYS5sZW5ndGgmJihyPWNvKEUuYSxhKSwhKHIhPTQ1JiZyIT00OCkpOysrYSktLWUuZDtlLmQ9PTAmJihlLmQ9MSl9ZnVuY3Rpb24gT0luKGUpe1dyKGUuYixGZixoZShsZSh6dCwxKSxkdCwyLDYsW24zLCJDb25zaXN0ZW50VHJhbnNpZW50Il0pKSxXcihlLmEsRmYsaGUobGUoenQsMSksZHQsMiw2LFtuMywiV2VsbEZvcm1lZFNvdXJjZVVSSSJdKSksV3IoZS5vLEZmLGhlKGxlKHp0LDEpLGR0LDIsNixbbjMsIkludGVyZmFjZUlzQWJzdHJhY3QgQXRNb3N0T25lSUQgVW5pcXVlRmVhdHVyZU5hbWVzIFVuaXF1ZU9wZXJhdGlvblNpZ25hdHVyZXMgTm9DaXJjdWxhclN1cGVyVHlwZXMgV2VsbEZvcm1lZE1hcEVudHJ5Q2xhc3MgQ29uc2lzdGVudFN1cGVyVHlwZXMgRGlzam9pbnRGZWF0dXJlQW5kT3BlcmF0aW9uU2lnbmF0dXJlcyJdKSksV3IoZS5wLEZmLGhlKGxlKHp0LDEpLGR0LDIsNixbbjMsIldlbGxGb3JtZWRJbnN0YW5jZVR5cGVOYW1lIFVuaXF1ZVR5cGVQYXJhbWV0ZXJOYW1lcyJdKSksV3IoZS52LEZmLGhlKGxlKHp0LDEpLGR0LDIsNixbbjMsIlVuaXF1ZUVudW1lcmF0b3JOYW1lcyBVbmlxdWVFbnVtZXJhdG9yTGl0ZXJhbHMiXSkpLFdyKGUuUixGZixoZShsZSh6dCwxKSxkdCwyLDYsW24zLCJXZWxsRm9ybWVkTmFtZSJdKSksV3IoZS5ULEZmLGhlKGxlKHp0LDEpLGR0LDIsNixbbjMsIlVuaXF1ZVBhcmFtZXRlck5hbWVzIFVuaXF1ZVR5cGVQYXJhbWV0ZXJOYW1lcyBOb1JlcGVhdGluZ1ZvaWQiXSkpLFdyKGUuVSxGZixoZShsZSh6dCwxKSxkdCwyLDYsW24zLCJXZWxsRm9ybWVkTnNVUkkgV2VsbEZvcm1lZE5zUHJlZml4IFVuaXF1ZVN1YnBhY2thZ2VOYW1lcyBVbmlxdWVDbGFzc2lmaWVyTmFtZXMgVW5pcXVlTnNVUklzIl0pKSxXcihlLlcsRmYsaGUobGUoenQsMSksZHQsMiw2LFtuMywiQ29uc2lzdGVudE9wcG9zaXRlIFNpbmdsZUNvbnRhaW5lciBDb25zaXN0ZW50S2V5cyBDb25zaXN0ZW50VW5pcXVlIENvbnNpc3RlbnRDb250YWluZXIiXSkpLFdyKGUuYmIsRmYsaGUobGUoenQsMSksZHQsMiw2LFtuMywiVmFsaWREZWZhdWx0VmFsdWVMaXRlcmFsIl0pKSxXcihlLmViLEZmLGhlKGxlKHp0LDEpLGR0LDIsNixbbjMsIlZhbGlkTG93ZXJCb3VuZCBWYWxpZFVwcGVyQm91bmQgQ29uc2lzdGVudEJvdW5kcyBWYWxpZFR5cGUiXSkpLFdyKGUuSCxGZixoZShsZSh6dCwxKSxkdCwyLDYsW24zLCJDb25zaXN0ZW50VHlwZSBDb25zaXN0ZW50Qm91bmRzIENvbnNpc3RlbnRBcmd1bWVudHMiXSkpfWZ1bmN0aW9uIE5JbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW47aWYoIXQuZGMoKSl7aWYoYT1uZXcgYmwsZz1ufHxsKHQuWGIoMCksMTgpLFY9Zy5jLEdBKCksQj1WLmkuaywhKEI9PShabigpLFBzKXx8Qj09QXV8fEI9PVVzfHxCPT1LMSkpdGhyb3cgdWUobmV3IFluKCJUaGUgdGFyZ2V0IG5vZGUgb2YgdGhlIGVkZ2UgbXVzdCBiZSBhIG5vcm1hbCBub2RlIG9yIGEgbm9ydGhTb3V0aFBvcnQuIikpO2ZvcihrbyhhLEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbVi5pLm4sVi5uLFYuYV0pKSksKEN0KCksaGwpLkhjKFYuaikmJih0ZT16ZShHZShRKFYsKGZ0KCkselQpKSkpLEw9bmV3IGx0KEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbVi5pLm4sVi5uLFYuYV0pKS5hLHRlKSxDcyhhLEwsYS5jLmIsYS5jKSksQz1udWxsLHI9ITEsdz10LktjKCk7dy5PYigpOylmPWwody5QYigpLDE4KSxvPWYuYSxvLmIhPTAmJihyPyhFPW1kKE9pKEMsKG1yKG8uYiE9MCksbChvLmEuYS5jLDgpKSksLjUpLENzKGEsRSxhLmMuYixhLmMpLHI9ITEpOnI9ITAsQz1KYSgobXIoby5iIT0wKSxsKG8uYy5iLmMsOCkpKSxLYShhLG8pLENoKG8pKTtKPWcuZCxobC5IYyhKLmopJiYodGU9emUoR2UoUShKLChmdCgpLHpUKSkpKSxMPW5ldyBsdChJYyhoZShsZShFYSwxKSxkdCw4LDAsW0ouaS5uLEoubixKLmFdKSkuYSx0ZSksQ3MoYSxMLGEuYy5iLGEuYykpLGtvKGEsSWMoaGUobGUoRWEsMSksZHQsOCwwLFtKLmkubixKLm4sSi5hXSkpKSxlLmQ9PShTRSgpLF9kZSkmJihmZT0obXIoYS5iIT0wKSxsKGEuYS5hLmMsOCkpLFRlPWwoZmYoYSwxKSw4KSxNZT1uZXcgYm9lKFU3ZShWLmopKSxNZS5hKj01LE1lLmIqPTUsJGU9bWEobmV3IGx0KFRlLmEsVGUuYiksZmUpLFplPW5ldyBsdChob2UoTWUuYSwkZS5hKSxob2UoTWUuYiwkZS5iKSksT2koWmUsZmUpLG90PVJyKGEsMSksek8ob3QsWmUpLFN0PShtcihhLmIhPTApLGwoYS5jLmIuYyw4KSksY249bChmZihhLGEuYi0yKSw4KSxNZT1uZXcgYm9lKFU3ZShKLmopKSxNZS5hKj01LE1lLmIqPTUsJGU9bWEobmV3IGx0KGNuLmEsY24uYiksU3QpLGFuPW5ldyBsdChob2UoTWUuYSwkZS5hKSxob2UoTWUuYiwkZS5iKSksT2koYW4sU3QpLFBrKGEsYS5iLTEsYW4pKSx6PW5ldyBTa2UoYSksS2EoZy5hLExkdCh6KSl9fWZ1bmN0aW9uIFBJbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXIsb2ksd3MsVmwsbGMsSGgsZjcsUDIsTDAsTTA7aWYoTWU9bChPZSgoIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmIpLDApLDg0KSxaZT1NZS5uaCgpLG90PU1lLm9oKCksJGU9TWUubWgoKS8yLEo9TWUubGgoKS8yLERlKE1lLDE5MykmJihUZT1sKE1lLDEyMyksWmUrPU0xKFRlKS5pLFplKz1NMShUZSkuaSksWmUrPSRlLG90Kz1KLGpuPWwoT2UoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKSwwKSw4NCksb2k9am4ubmgoKSx3cz1qbi5vaCgpLHVyPWpuLm1oKCkvMixTdD1qbi5saCgpLzIsRGUoam4sMTkzKSYmKEJuPWwoam4sMTIzKSxvaSs9TTEoQm4pLmksb2krPU0xKEJuKS5pKSxvaSs9dXIsd3MrPVN0LCghZS5hJiYoZS5hPW5ldyBudChjcyxlLDYsNikpLGUuYSkuaT09MClnPShyYigpLEU9bmV3IHJrLEUpLHFyKCghZS5hJiYoZS5hPW5ldyBudChjcyxlLDYsNikpLGUuYSksZyk7ZWxzZSBpZigoIWUuYSYmKGUuYT1uZXcgbnQoY3MsZSw2LDYpKSxlLmEpLmk+MSlmb3IoVj1uZXcgcTgoKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKSk7Vi5lIT1WLmkuZ2MoKTspakEoVik7Zm9yKGY9bChPZSgoIWUuYSYmKGUuYT1uZXcgbnQoY3MsZSw2LDYpKSxlLmEpLDApLDE2NiksdGU9b2ksb2k+WmUrJGU/dGU9WmUrJGU6b2k8WmUtJGUmJih0ZT1aZS0kZSksZmU9d3Msd3M+b3QrSj9mZT1vdCtKOndzPG90LUomJihmZT1vdC1KKSx0ZT5aZS0kZSYmdGU8WmUrJGUmJmZlPm90LUomJmZlPG90K0omJih0ZT1aZSskZSksb0UoZix0ZSksdUUoZixmZSksY249WmUsWmU+b2krdXI/Y249b2krdXI6WmU8b2ktdXImJihjbj1vaS11ciksYW49b3Qsb3Q+d3MrU3Q/YW49d3MrU3Q6b3Q8d3MtU3QmJihhbj13cy1TdCksY24+b2ktdXImJmNuPG9pK3VyJiZhbj53cy1TdCYmYW48d3MrU3QmJihhbj13cytTdCksYUUoZixjbiksY0UoZixhbiksJHIoKCFmLmEmJihmLmE9bmV3IFlzKHFoLGYsNSkpLGYuYSkpLG89YVUodCw1KSxNZT09am4mJisrbyxIaD1jbi10ZSxMMD1hbi1mZSxWbD1iLk1hdGguc3FydChIaCpIaCtMMCpMMCksTD1WbCouMjAwMDAwMDAyOTgwMjMyMjQsZjc9SGgvKG8rMSksTTA9TDAvKG8rMSksbGM9dGUsUDI9ZmUsQz0wO0M8bztDKyspbGMrPWY3LFAyKz1NMCxCPWxjK0psKHQsMjQpKk1QKkwtTC8yLEI8MD9CPTE6Qj5uJiYoQj1uLTEpLHo9UDIrSmwodCwyNCkqTVAqTC1MLzIsejwwP3o9MTp6PnImJih6PXItMSksYT0ocmIoKSx3PW5ldyBBUyx3KSxkVihhLEIpLGZWKGEseikscXIoKCFmLmEmJihmLmE9bmV3IFlzKHFoLGYsNSkpLGYuYSksYSl9ZnVuY3Rpb24gZ3d0KGUpe3N3KGUsbmV3IFhtKG53KFp2KHR3KGV3KG5ldyB4MSx0aCksIkVMSyBSZWN0YW5nbGUgUGFja2luZyIpLCJBbGdvcml0aG0gZm9yIHBhY2tpbmcgb2YgdW5jb25uZWN0ZWQgYm94ZXMsIGkuZS4gZ3JhcGhzIHdpdGhvdXQgZWRnZXMuIFRoZSBnaXZlbiBvcmRlciBvZiB0aGUgYm94ZXMgaXMgYWx3YXlzIHByZXNlcnZlZCBhbmQgdGhlIG1haW4gcmVhZGluZyBkaXJlY3Rpb24gb2YgdGhlIGJveGVzIGlzIGxlZnQgdG8gcmlnaHQuIFRoZSBhbGdvcml0aG0gaXMgZGl2aWRlZCBpbnRvIHR3byBwaGFzZXMuIE9uZSBwaGFzZSBhcHByb3hpbWF0ZXMgdGhlIHdpZHRoIGluIHdoaWNoIHRoZSByZWN0YW5nbGVzIGNhbiBiZSBwbGFjZWQuIFRoZSBuZXh0IHBoYXNlIHBsYWNlcyB0aGUgcmVjdGFuZ2xlcyBpbiByb3dzIHVzaW5nIHRoZSBwcmV2aW91c2x5IGNhbGN1bGF0ZWQgd2lkdGggYXMgYm91bmRpbmcgd2lkdGggYW5kIGJ1bmRsZXMgcmVjdGFuZ2xlcyB3aXRoIGEgc2ltaWxhciBoZWlnaHQgaW4gYmxvY2tzLiBBIGNvbXBhY3Rpb24gc3RlcCByZWR1Y2VzIHRoZSBzaXplIG9mIHRoZSBkcmF3aW5nLiBGaW5hbGx5LCB0aGUgcmVjdGFuZ2xlcyBhcmUgZXhwYW5kZWQgdG8gZmlsbCB0aGVpciBib3VuZGluZyBib3ggYW5kIGVsaW1pbmF0ZSBlbXB0eSB1bnVzZWQgc3BhY2VzLiIpLG5ldyBjOCkpKSxndChlLHRoLE94LDEuMyksZ3QoZSx0aCxoVCwoSG4oKSwhMSkpLGd0KGUsdGgsWHcsaU9lKSxndChlLHRoLEp5LDE1KSxndChlLHRoLFNHLEl0KERDdCkpLGd0KGUsdGgseDYsSXQoTkN0KSksZ3QoZSx0aCxQeCxJdChCQ3QpKSxndChlLHRoLE54LEl0KEZDdCkpLGd0KGUsdGgsZlQsSXQoT0N0KSksZ3QoZSx0aCxmTCxJdChsZ2UpKSxndChlLHRoLGRULEl0KFJDdCkpLGd0KGUsdGgsakNlLEl0KGNPZSkpLGd0KGUsdGgsJENlLEl0KG9PZSkpLGd0KGUsdGgsUkNlLEl0KGZnZSkpLGd0KGUsdGgsRkNlLEl0KHVPZSkpLGd0KGUsdGgsekNlLEl0KHJPZSkpLGd0KGUsdGgscUNlLEl0KGhnZSkpLGd0KGUsdGgsSENlLEl0KG5PZSkpLGd0KGUsdGgsVkNlLEl0KGFPZSkpLGd0KGUsdGgsaEwsSXQodE9lKSksZ3QoZSx0aCxBRyxJdChJQ3QpKSxndChlLHRoLFBDZSxJdChqQikpLGd0KGUsdGgsTkNlLEl0KGVPZSkpLGd0KGUsdGgsQkNlLEl0KCRCKSksZ3QoZSx0aCxPQ2UsSXQoc09lKSl9ZnVuY3Rpb24gRGxlKGUsdCl7YmxlKCk7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbixqbix1cixvaTtpZihjbj1lLmUsVj1lLmQsYT1lLmEsY249PTApc3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4iMCI7Y2FzZSAxOnJldHVybiBzVDtjYXNlIDI6cmV0dXJuIjAuMDAiO2Nhc2UgMzpyZXR1cm4iMC4wMDAiO2Nhc2UgNDpyZXR1cm4iMC4wMDAwIjtjYXNlIDU6cmV0dXJuIjAuMDAwMDAiO2Nhc2UgNjpyZXR1cm4iMC4wMDAwMDAiO2RlZmF1bHQ6cmV0dXJuIG90PW5ldyB0Yix0PDA/b3QuYSs9IjBFKyI6b3QuYSs9IjBFIixvdC5hKz0tdCxvdC5hfWlmKE1lPVYqMTArMSs3LCRlPVdlKGtmLEFkLDI4LE1lKzEsMTUsMSksbj1NZSxWPT0xKWlmKGc9YVswXSxnPDApe29pPXZhKGcsVm8pO2RvIEo9b2ksb2k9S04ob2ksMTApLCRlWy0tbl09NDgrWXIoRGYoSixtbyhvaSwxMCkpKSZaczt3aGlsZShpdShvaSwwKSE9MCl9ZWxzZXtvaT1nO2RvIEo9b2ksb2k9b2kvMTB8MCwkZVstLW5dPTQ4KyhKLW9pKjEwKSZaczt3aGlsZShvaSE9MCl9ZWxzZXtCbj1XZShWcixkaSwyOCxWLDE1LDEpLHVyPVYscHUoYSwwLEJuLDAsdXIpO2U6Zm9yKDs7KXtmb3IoU3Q9MCxFPXVyLTE7RT49MDtFLS0pam49Ym8obDAoU3QsMzIpLHZhKEJuW0VdLFZvKSksZmU9eXhuKGpuKSxCbltFXT1ZcihmZSksU3Q9WXIoYncoZmUsMzIpKTtUZT1ZcihTdCksdGU9bjtkbyAkZVstLW5dPTQ4K1RlJTEwJlpzO3doaWxlKChUZT1UZS8xMHwwKSE9MCYmbiE9MCk7Zm9yKHI9OS10ZStuLHc9MDt3PHImJm4+MDt3KyspJGVbLS1uXT00ODtmb3IoTD11ci0xO0JuW0xdPT0wO0wtLSlpZihMPT0wKWJyZWFrIGU7dXI9TCsxfWZvcig7JGVbbl09PTQ4OykrK259aWYoej1jbjwwLGY9TWUtbi10LTEsdD09MClyZXR1cm4geiYmKCRlWy0tbl09NDUpLElmKCRlLG4sTWUtbik7aWYodD4wJiZmPj0tNil7aWYoZj49MCl7Zm9yKEM9bitmLEI9TWUtMTtCPj1DO0ItLSkkZVtCKzFdPSRlW0JdO3JldHVybiAkZVsrK0NdPTQ2LHomJigkZVstLW5dPTQ1KSxJZigkZSxuLE1lLW4rMSl9Zm9yKEw9MjtMPC1mKzE7TCsrKSRlWy0tbl09NDg7cmV0dXJuICRlWy0tbl09NDYsJGVbLS1uXT00OCx6JiYoJGVbLS1uXT00NSksSWYoJGUsbixNZS1uKX1yZXR1cm4gYW49bisxLG89TWUsWmU9bmV3IFM1LHomJihaZS5hKz0iLSIpLG8tYW4+PTE/KGhiKFplLCRlW25dKSxaZS5hKz0iLiIsWmUuYSs9SWYoJGUsbisxLE1lLW4tMSkpOlplLmErPUlmKCRlLG4sTWUtbiksWmUuYSs9IkUiLGY+MCYmKFplLmErPSIrIiksWmUuYSs9IiIrZixaZS5hfWZ1bmN0aW9uIHB3dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3Q7c3dpdGNoKGUuYz10LGUuZz1uZXcgUHIsbj0oYXcoKSxuZXcgSnYoZS5jKSkscj1uZXcgZV8obiksUzhlKHIpLE1lPWVpKGF0KGUuYywoWU4oKSxBT2UpKSksdz1sKGF0KGUuYyxrZ2UpLDMyNCksWmU9bChhdChlLmMsRWdlKSw0MzcpLGY9bChhdChlLmMsQ09lKSw0OTApLCRlPWwoYXQoZS5jLHhnZSksNDM4KSxlLmo9emUoR2UoYXQoZS5jLEpDdCkpKSxnPWUuYSx3Lmcpe2Nhc2UgMDpnPWUuYTticmVhaztjYXNlIDE6Zz1lLmI7YnJlYWs7Y2FzZSAyOmc9ZS5pO2JyZWFrO2Nhc2UgMzpnPWUuZTticmVhaztjYXNlIDQ6Zz1lLmY7YnJlYWs7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWW4oRkcrKHcuZiE9bnVsbD93LmY6IiIrdy5nKSkpfWlmKGUuZD1uZXcgY290KGcsWmUsZikscnQoZS5kLChwRSgpLGpMKSxCdChhdChlLmMsWEN0KSkpLGUuZC5jPVJ0KEJ0KGF0KGUuYyxTT2UpKSksQUgoZS5jKS5pPT0wKXJldHVybiBlLmQ7Zm9yKEw9bmV3IG9yKEFIKGUuYykpO0wuZSE9TC5pLmdjKCk7KXtmb3IoQz1sKGdyKEwpLDI3KSx6PUMuZy8yLEI9Qy5mLzIsb3Q9bmV3IGx0KEMuaSt6LEMuaitCKTtIdShlLmcsb3QpOylkdyhvdCwoYi5NYXRoLnJhbmRvbSgpLS41KSpEZCwoYi5NYXRoLnJhbmRvbSgpLS41KSpEZCk7Sj1sKGF0KEMsKHBpKCksdEMpKSwxNDApLHRlPW5ldyBrb3Qob3QsbmV3IGVmKG90LmEtei1lLmovMi1KLmIsb3QuYi1CLWUuai8yLUouZCxDLmcrZS5qKyhKLmIrSi5jKSxDLmYrZS5qKyhKLmQrSi5hKSkpLHZ0KGUuZC5pLHRlKSxraShlLmcsb3QsbmV3IGNhKHRlLEMpKX1zd2l0Y2goJGUuZyl7Y2FzZSAwOmlmKE1lPT1udWxsKWUuZC5kPWwoanQoZS5kLmksMCksNjgpO2Vsc2UgZm9yKFRlPW5ldyBHKGUuZC5pKTtUZS5hPFRlLmMuYy5sZW5ndGg7KXRlPWwocmUoVGUpLDY4KSxWPWwobChjcihlLmcsdGUuYSksNDIpLmIsMjcpLmpoKCksViE9bnVsbCYmdm4oVixNZSkmJihlLmQuZD10ZSk7YnJlYWs7Y2FzZSAxOmZvcihhPW5ldyBsdChlLmMuZyxlLmMuZiksYS5hKj0uNSxhLmIqPS41LGR3KGEsZS5jLmksZS5jLmopLG89Z3MsZmU9bmV3IEcoZS5kLmkpO2ZlLmE8ZmUuYy5jLmxlbmd0aDspdGU9bChyZShmZSksNjgpLEU9cGIodGUuYSxhKSxFPG8mJihvPUUsZS5kLmQ9dGUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKEZHKygkZS5mIT1udWxsPyRlLmY6IiIrJGUuZykpKX1yZXR1cm4gZS5kfWZ1bmN0aW9uIEJJbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGU7Zm9yKEI9MCxhPW5ldyBvcigoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkpO2EuZSE9YS5pLmdjKCk7KXI9bChncihhKSwyNyksUnQoQnQoYXQociwoTnQoKSxtdikpKSl8fChDPWRzKHIpLChxZShhdChDLHlnKSkhPT1xZSgoRWQoKSxFMikpfHxxZShhdChDLGR2KSk9PT1xZSgobDIoKSxCVCkpfHxxZShhdChDLGR2KSk9PT1xZSgobDIoKSxQVCkpfHxSdChCdChhdChDLGYzKSkpfHxxZShhdChDLGc0KSkhPT1xZSgoS20oKSxjNCkpfHxxZShhdChDLHpiKSk9PT1xZSgoTmYoKSx2MykpfHxxZShhdChDLHpiKSk9PT1xZSgoTmYoKSx4NCkpfHxxZShhdChDLHB2KSk9PT1xZSgocDIoKSxXVCkpfHxxZShhdChDLHB2KSk9PT1xZSgocDIoKSxZVCkpKSYmIVJ0KEJ0KGF0KHIsZlcpKSkmJihIaShyLChmdCgpLEtpKSxwdChCKSksKytCKSxjd3QoZSxyLG4pKTtmb3IoQj0wLEU9bmV3IG9yKCghdC5iJiYodC5iPW5ldyBudChqcyx0LDEyLDMpKSx0LmIpKTtFLmUhPUUuaS5nYygpOylnPWwoZ3IoRSksNzQpLChxZShhdCh0LChOdCgpLHlnKSkpIT09cWUoKEVkKCksRTIpKXx8cWUoYXQodCxkdikpPT09cWUoKGwyKCksQlQpKXx8cWUoYXQodCxkdikpPT09cWUoKGwyKCksUFQpKXx8UnQoQnQoYXQodCxmMykpKXx8cWUoYXQodCxnNCkpIT09cWUoKEttKCksYzQpKXx8cWUoYXQodCx6YikpPT09cWUoKE5mKCksdjMpKXx8cWUoYXQodCx6YikpPT09cWUoKE5mKCkseDQpKXx8cWUoYXQodCxwdikpPT09cWUoKHAyKCksV1QpKXx8cWUoYXQodCxwdikpPT09cWUoKHAyKCksWVQpKSkmJihIaShnLChmdCgpLEtpKSxwdChCKSksKytCKSxKPWNnKGcpLHRlPUViKGcpLEw9UnQoQnQoYXQoSixiNCkpKSxWPSFSdChCdChhdChnLG12KSkpLHo9TCYmcXcoZykmJlJ0KEJ0KGF0KGcsZ3YpKSksbz1kcyhKKT09dCYmZHMoSik9PWRzKHRlKSxmPShkcyhKKT09dCYmdGU9PXQpXihkcyh0ZSk9PXQmJko9PXQpLFYmJiF6JiYoZnx8bykmJldrZShlLGcsdCxuKTtpZihkcyh0KSlmb3Iodz1uZXcgb3IoUGF0KGRzKHQpKSk7dy5lIT13LmkuZ2MoKTspZz1sKGdyKHcpLDc0KSxKPWNnKGcpLEo9PXQmJnF3KGcpJiYoej1SdChCdChhdChKLChOdCgpLGI0KSkpKSYmUnQoQnQoYXQoZyxndikpKSx6JiZXa2UoZSxnLHQsbikpfWZ1bmN0aW9uIEZJbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXIsb2ksd3MsVmwsbGMsSGg7Zm9yKG4uVWcoIkdyZWVkeSBjeWNsZSByZW1vdmFsIiwxKSxNZT10LmEsSGg9TWUuYy5sZW5ndGgsZS5hPVdlKFZyLGRpLDI4LEhoLDE1LDEpLGUuYz1XZShWcixkaSwyOCxIaCwxNSwxKSxlLmI9V2UoVnIsZGksMjgsSGgsMTUsMSksRT0wLGZlPW5ldyBHKE1lKTtmZS5hPGZlLmMuYy5sZW5ndGg7KXtmb3IoSj1sKHJlKGZlKSwxMCksSi5wPUUsYW49bmV3IEcoSi5qKTthbi5hPGFuLmMuYy5sZW5ndGg7KXtmb3Iob3Q9bChyZShhbiksMTIpLGc9bmV3IEcob3QuZSk7Zy5hPGcuYy5jLmxlbmd0aDspcj1sKHJlKGcpLDE4KSxyLmMuaSE9SiYmKHVyPWwoUShyLChOdCgpLFVUKSksMTcpLmEsZS5hW0VdKz11cj4wP3VyKzE6MSk7Zm9yKGY9bmV3IEcob3QuZyk7Zi5hPGYuYy5jLmxlbmd0aDspcj1sKHJlKGYpLDE4KSxyLmQuaSE9SiYmKHVyPWwoUShyLChOdCgpLFVUKSksMTcpLmEsZS5jW0VdKz11cj4wP3VyKzE6MSl9ZS5jW0VdPT0wP3VpKGUuZSxKKTplLmFbRV09PTAmJnVpKGUuZixKKSwrK0V9Zm9yKFY9LTEsej0xLEw9bmV3IGJ0LGUuZD1sKFEodCwoZnQoKSxYeCkpLDIzNCk7SGg+MDspe2Zvcig7ZS5lLmIhPTA7KXdzPWwoa2FlKGUuZSksMTApLGUuYlt3cy5wXT1WLS0scGtlKGUsd3MpLC0tSGg7Zm9yKDtlLmYuYiE9MDspVmw9bChrYWUoZS5mKSwxMCksZS5iW1ZsLnBdPXorKyxwa2UoZSxWbCksLS1IaDtpZihIaD4wKXtmb3IoQj1sbyxUZT1uZXcgRyhNZSk7VGUuYTxUZS5jLmMubGVuZ3RoOylKPWwocmUoVGUpLDEwKSxlLmJbSi5wXT09MCYmKCRlPWUuY1tKLnBdLWUuYVtKLnBdLCRlPj1CJiYoJGU+QiYmKEwuYy5sZW5ndGg9MCxCPSRlKSwkbihMLmMsSikpKTtDPWUuc2coTCksZS5iW0MucF09eisrLHBrZShlLEMpLC0tSGh9fWZvcihvaT1NZS5jLmxlbmd0aCsxLEU9MDtFPE1lLmMubGVuZ3RoO0UrKyllLmJbRV08MCYmKGUuYltFXSs9b2kpO2Zvcih0ZT1uZXcgRyhNZSk7dGUuYTx0ZS5jLmMubGVuZ3RoOylmb3IoSj1sKHJlKHRlKSwxMCksam49VGN0KEouaiksU3Q9am4sY249MCxCbj1TdC5sZW5ndGg7Y248Qm47Kytjbilmb3Iob3Q9U3RbY25dLFplPWtkKG90LmcpLGE9WmUsbz0wLHc9YS5sZW5ndGg7bzx3OysrbylyPWFbb10sbGM9ci5kLmkucCxlLmJbSi5wXT5lLmJbbGNdJiYoVXcociwhMCkscnQodCx5QiwoSG4oKSwhMCkpKTtlLmE9bnVsbCxlLmM9bnVsbCxlLmI9bnVsbCxDaChlLmYpLENoKGUuZSksbi5WZygpfWZ1bmN0aW9uIGJ3dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3Q7Zm9yKFplPWwoT2UoKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKSwwKSwxNjYpLEM9bmV3IGJsLCRlPW5ldyBQcixvdD1DbXQoWmUpLGp1KCRlLmYsWmUsb3QpLEI9bmV3IFByLHI9bmV3IG9zLFY9cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbKCF0LmQmJih0LmQ9bmV3IExuKGpzLHQsOCw1KSksdC5kKSwoIXQuZSYmKHQuZT1uZXcgTG4oanMsdCw3LDQpKSx0LmUpXSkpKTtqcihWKTspe2lmKHo9bCh4cihWKSw3NCksKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKS5pIT0xKXRocm93IHVlKG5ldyBZbihuNHQrKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKS5pKSk7eiE9ZSYmKHRlPWwoT2UoKCF6LmEmJih6LmE9bmV3IG50KGNzLHosNiw2KSksei5hKSwwKSwxNjYpLENzKHIsdGUsci5jLmIsci5jKSxKPWwoaGMoem8oJGUuZix0ZSkpLDEzKSxKfHwoSj1DbXQodGUpLGp1KCRlLmYsdGUsSikpLEw9bj9tYShuZXcgRW8obChqdChvdCxvdC5jLmxlbmd0aC0xKSw4KSksbChqdChKLEouYy5sZW5ndGgtMSksOCkpOm1hKG5ldyBFbygoU24oMCxvdC5jLmxlbmd0aCksbChvdC5jWzBdLDgpKSksKFNuKDAsSi5jLmxlbmd0aCksbChKLmNbMF0sOCkpKSxqdShCLmYsdGUsTCkpfWlmKHIuYiE9MClmb3IoZmU9bChqdChvdCxuP290LmMubGVuZ3RoLTE6MCksOCksRT0xO0U8b3QuYy5sZW5ndGg7RSsrKXtmb3IoVGU9bChqdChvdCxuP290LmMubGVuZ3RoLTEtRTpFKSw4KSxhPVJyKHIsMCk7YS5iIT1hLmQuYzspdGU9bChCcihhKSwxNjYpLEo9bChoYyh6bygkZS5mLHRlKSksMTMpLEouYy5sZW5ndGg8PUU/WW9lKGEpOihNZT1PaShuZXcgRW8obChqdChKLG4/Si5jLmxlbmd0aC0xLUU6RSksOCkpLGwoaGMoem8oQi5mLHRlKSksOCkpLChUZS5hIT1NZS5hfHxUZS5iIT1NZS5iKSYmKG89VGUuYS1mZS5hLGc9VGUuYi1mZS5iLGY9TWUuYS1mZS5hLHc9TWUuYi1mZS5iLGYqZz09dypvJiYobz09MHx8aXNOYU4obyk/bzpvPDA/LTE6MSk9PShmPT0wfHxpc05hTihmKT9mOmY8MD8tMToxKSYmKGc9PTB8fGlzTmFOKGcpP2c6ZzwwPy0xOjEpPT0odz09MHx8aXNOYU4odyk/dzp3PDA/LTE6MSk/KGIuTWF0aC5hYnMobyk8Yi5NYXRoLmFicyhmKXx8Yi5NYXRoLmFicyhnKTxiLk1hdGguYWJzKHcpKSYmQ3MoQyxUZSxDLmMuYixDLmMpOkU+MSYmQ3MoQyxmZSxDLmMuYixDLmMpLFlvZShhKSkpO2ZlPVRlfXJldHVybiBDfWZ1bmN0aW9uIG13dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm47Zm9yKG4uVWcobXl0LDEpLEJuPWwoeWMoRmkobmV3IGJuKG51bGwsbmV3IGtuKHQsMTYpKSxuZXcgb25lKSxQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksRWMpXSkpKSwxNSksQz1sKHljKEZpKG5ldyBibihudWxsLG5ldyBrbih0LDE2KSksbmV3IHZYZSh0KSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsW0VjXSkpKSwxNSksVj1sKHljKEZpKG5ldyBibihudWxsLG5ldyBrbih0LDE2KSksbmV3IG1YZSh0KSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsW0VjXSkpKSwxNSksSj1XZShQVyxJRyw0MCx0LmdjKCksMCwxKSxmPTA7ZjxDLmdjKCk7ZisrKWE9bChDLlhiKGYpLDQwKSxhbj1sKFEoYSwoSGMoKSxXNikpLDE3KS5hLGFuPj0wJiZhbjxDLmdjKCkmJiFKW2FuXSYmKEpbYW5dPWEsQy5nZChmKSwtLWYpO2ZvcihnPTA7ZzxDLmdjKCk7ZysrKWZvcihhPWwoQy5YYihnKSw0MCksYW49bChRKGEsKEhjKCksVzYpKSwxNykuYSxCPTA7O0IrKyl7aWYoej1hbitCLHo8Si5sZW5ndGgmJno+PTAmJiFKW3pdKXtKW3pdPWEsQy5nZChnKSwtLWc7YnJlYWt9aWYoej1hbi1CLHo8Si5sZW5ndGgmJno+PTAmJiFKW3pdKXtKW3pdPWEsQy5nZChnKSwtLWc7YnJlYWt9fWZvcihWLmpkKG5ldyBjbmUpLHc9Si5sZW5ndGgtMTt3Pj0wO3ctLSkhSlt3XSYmIVYuZGMoKSYmKEpbd109bChWLlhiKDApLDQwKSxWLmdkKDApKTtmb3IoRT0wO0U8Si5sZW5ndGg7RSsrKSFKW0VdJiYhQm4uZGMoKSYmKEpbRV09bChCbi5YYigwKSw0MCksQm4uZ2QoMCkpO2ZvcihvPTA7bzxKLmxlbmd0aDtvKyspcnQoSltvXSwoUWkoKSxwTSkscHQobykpO2ZvcihMPWwoQzVuKEZpKG5ldyBibihudWxsLG5ldyBrbih0LDE2KSksbmV3IHVuZSkpLDUzNCksb3Q9TCxTdD0wLGNuPW90Lmxlbmd0aDtTdDxjbjsrK1N0KXtmb3IoWmU9b3RbU3RdLHI9cGNlKFplKSxtd3QoZSxyLG4uZWgoMS9MLmxlbmd0aHwwKSksQ24oKSwkbShyLG5ldyBOaWUoKFFpKCkscE0pKSksdGU9bmV3IG9zLCRlPVJyKHIsMCk7JGUuYiE9JGUuZC5jOylmb3IoTWU9bChCcigkZSksNDApLFRlPVJyKFplLmQsMCk7VGUuYiE9VGUuZC5jOylmZT1sKEJyKFRlKSw2NSksZmUuYz09TWUmJkNzKHRlLGZlLHRlLmMuYix0ZS5jKTtDaChaZS5kKSxLYShaZS5kLHRlKX1uLlZnKCl9ZnVuY3Rpb24gdnd0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZTtmb3Iocj1uZXcgYnQsZz1uZXcgYnQsdGU9dC8yLHo9ZS5nYygpLGE9bChlLlhiKDApLDgpLGZlPWwoZS5YYigxKSw4KSxWPUt1ZShhLmEsYS5iLGZlLmEsZmUuYix0ZSksdnQociwoU24oMCxWLmMubGVuZ3RoKSxsKFYuY1swXSw4KSkpLHZ0KGcsKFNuKDEsVi5jLmxlbmd0aCksbChWLmNbMV0sOCkpKSxFPTI7RTx6O0UrKylKPWEsYT1mZSxmZT1sKGUuWGIoRSksOCksVj1LdWUoYS5hLGEuYixKLmEsSi5iLHRlKSx2dChyLChTbigxLFYuYy5sZW5ndGgpLGwoVi5jWzFdLDgpKSksdnQoZywoU24oMCxWLmMubGVuZ3RoKSxsKFYuY1swXSw4KSkpLFY9S3VlKGEuYSxhLmIsZmUuYSxmZS5iLHRlKSx2dChyLChTbigwLFYuYy5sZW5ndGgpLGwoVi5jWzBdLDgpKSksdnQoZywoU24oMSxWLmMubGVuZ3RoKSxsKFYuY1sxXSw4KSkpO2ZvcihWPUt1ZShmZS5hLGZlLmIsYS5hLGEuYix0ZSksdnQociwoU24oMSxWLmMubGVuZ3RoKSxsKFYuY1sxXSw4KSkpLHZ0KGcsKFNuKDAsVi5jLmxlbmd0aCksbChWLmNbMF0sOCkpKSxuPW5ldyBibCxmPW5ldyBidCx1aShuLChTbigwLHIuYy5sZW5ndGgpLGwoci5jWzBdLDgpKSksQz0xO0M8ci5jLmxlbmd0aC0yO0MrPTIpbz0oU24oQyxyLmMubGVuZ3RoKSxsKHIuY1tDXSw4KSksQj1FcHQoKFNuKEMtMSxyLmMubGVuZ3RoKSxsKHIuY1tDLTFdLDgpKSxvLChTbihDKzEsci5jLmxlbmd0aCksbChyLmNbQysxXSw4KSksKFNuKEMrMixyLmMubGVuZ3RoKSxsKHIuY1tDKzJdLDgpKSksIWlzRmluaXRlKEIuYSl8fCFpc0Zpbml0ZShCLmIpP0NzKG4sbyxuLmMuYixuLmMpOkNzKG4sQixuLmMuYixuLmMpO2Zvcih1aShuLGwoanQocixyLmMubGVuZ3RoLTEpLDgpKSx2dChmLChTbigwLGcuYy5sZW5ndGgpLGwoZy5jWzBdLDgpKSksTD0xO0w8Zy5jLmxlbmd0aC0yO0wrPTIpbz0oU24oTCxnLmMubGVuZ3RoKSxsKGcuY1tMXSw4KSksQj1FcHQoKFNuKEwtMSxnLmMubGVuZ3RoKSxsKGcuY1tMLTFdLDgpKSxvLChTbihMKzEsZy5jLmxlbmd0aCksbChnLmNbTCsxXSw4KSksKFNuKEwrMixnLmMubGVuZ3RoKSxsKGcuY1tMKzJdLDgpKSksIWlzRmluaXRlKEIuYSl8fCFpc0Zpbml0ZShCLmIpPyRuKGYuYyxvKTokbihmLmMsQik7Zm9yKHZ0KGYsbChqdChnLGcuYy5sZW5ndGgtMSksOCkpLHc9Zi5jLmxlbmd0aC0xO3c+PTA7dy0tKXVpKG4sKFNuKHcsZi5jLmxlbmd0aCksbChmLmNbd10sOCkpKTtyZXR1cm4gbn1mdW5jdGlvbiB3d3QoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlO2ZvcihNZT16ZShHZShhdCh0LCh1ZygpLFQ0KSkpKSx6PXplKEdlKGF0KHQsbU0pKSksQj16ZShHZShhdCh0LFVXKSkpLHY3ZSgoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkpLGZlPXV2dCgoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSksTWUsZS5iKSx0ZT0wO3RlPGZlLmMubGVuZ3RoO3RlKyspaWYodz0oU24odGUsZmUuYy5sZW5ndGgpLGwoZmUuY1t0ZV0sMTg2KSksdGUhPTAmJihWPShTbih0ZS0xLGZlLmMubGVuZ3RoKSxsKGZlLmNbdGUtMV0sMTg2KSksejB0KHcsVi5mK1YuYitlLmIpKSxKPSRJbih0ZSxmZSxNZSxlLmIsUnQoQnQoYXQodCwoejEoKSxoZ2UpKSkpKSxSdChCdChKLmIpKSl7Zm9yKG89bmV3IEcody5hKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTcyKSxhLmM9ITEsYS5rPSExLFptdChhKTt3LmQ9bmV3IGJ0LHcuZT1NZSwtLXRlfWVsc2UgaWYocjhuKGUsdyksdGUrMTxmZS5jLmxlbmd0aCYmKGUuZT1iLk1hdGgubWF4KHcuZStlLmIrbChqdCgoU24odGUrMSxmZS5jLmxlbmd0aCksbChmZS5jW3RlKzFdLDE4NikpLmEsMCksMTcyKS5yLU1lLGUuYyksZS5mPWIuTWF0aC5taW4ody5lK2UuYitsKGp0KChTbih0ZSsxLGZlLmMubGVuZ3RoKSxsKGZlLmNbdGUrMV0sMTg2KSkuYSwwKSwxNzIpLnItTWUsZS5kKSx3LmQuYy5sZW5ndGghPTAmJihlLmM9Yi5NYXRoLm1heChlLmMsbChqdCh3LmQsdy5kLmMubGVuZ3RoLTEpLDMxNSkuZCsody5kLmMubGVuZ3RoPD0xPzA6ZS5iKSksZS5kPWIuTWF0aC5taW4oZS5jLGwoanQody5kLHcuZC5jLmxlbmd0aC0xKSwzMTUpLmQrKHcuZC5jLmxlbmd0aDw9MT8wOmUuYikpKSksZmUuYy5sZW5ndGg9PTEpZm9yKEw9bChqdCh3LmQsdy5kLmMubGVuZ3RoLTEpLDMxNSksQz1sKGp0KEwuYSxMLmEuYy5sZW5ndGgtMSksMTcyKSxnPW5ldyBHKEMubik7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDIwOSksZS5jPWIuTWF0aC5tYXgoZS5jLEMuci1mLmQpLGUuZD1iLk1hdGgubWluKGUuZCxDLnItZi5kKSxlLmU9Yi5NYXRoLm1heChlLmUsZi5kK2UuYiksZS5mPWIuTWF0aC5taW4oZS5mLGYuZCtlLmIpO3JldHVybiBUZT1zZ3QoZmUsZS5iKSwkZT1iLk1hdGgubWF4KFRlLmEsei0obi5iK24uYykpLEU9Yi5NYXRoLm1heChUZS5iLEItKG4uZCtuLmEpKSxyPUUtVGUuYixIaSh0LGJNLHIpLEhpKHQsR1csZmUpLG5ldyB6NGUoZS5hLCRlLFRlLmIrciwoVkEoKSx6QikpfWZ1bmN0aW9uIFJJbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXI7aWYoU3Q9bChRKGUsKE50KCksTXMpKSwxMDEpLFN0IT0oUmEoKSxaMSkmJlN0IT1XYil7Zm9yKFY9ZS5iLHo9Vi5jLmxlbmd0aCxDPW5ldyBCdSgoTWgoeisyLEZsZSksY1YoYm8oYm8oNSx6KzIpLCh6KzIpLzEwfDApKSkpLEo9bmV3IEJ1KChNaCh6KzIsRmxlKSxjVihibyhibyg1LHorMiksKHorMikvMTB8MCkpKSksdnQoQyxuZXcgUHIpLHZ0KEMsbmV3IFByKSx2dChKLG5ldyBidCksdnQoSixuZXcgYnQpLG90PW5ldyBidCx0PTA7dDx6O3QrKylmb3Iobj0oU24odCxWLmMubGVuZ3RoKSxsKFYuY1t0XSwzMCkpLGNuPShTbih0LEMuYy5sZW5ndGgpLGwoQy5jW3RdLDg1KSksdGU9bmV3IFByLCRuKEMuYyx0ZSksQm49KFNuKHQsSi5jLmxlbmd0aCksbChKLmNbdF0sMTUpKSxUZT1uZXcgYnQsJG4oSi5jLFRlKSxhPW5ldyBHKG4uYSk7YS5hPGEuYy5jLmxlbmd0aDspe2lmKHI9bChyZShhKSwxMCksbDhlKHIpKXskbihvdC5jLHIpO2NvbnRpbnVlfWZvcihFPW5ldyBocihkcihrYShyKS5hLktjKCksbmV3IGopKTtqcihFKTspZz1sKHhyKEUpLDE4KSxqbj1nLmMuaSxsOGUoam4pJiYoYW49bChjbi54YyhRKGpuLChmdCgpLHppKSkpLDEwKSxhbnx8KGFuPWpwdChlLGpuKSxjbi56YyhRKGpuLHppKSxhbiksQm4uRmMoYW4pKSxwbyhnLGwoanQoYW4uaiwxKSwxMikpKTtmb3Iodz1uZXcgaHIoZHIocXMocikuYS5LYygpLG5ldyBqKSk7anIodyk7KWc9bCh4cih3KSwxOCksdXI9Zy5kLmksbDhlKHVyKSYmKGZlPWwoY3IodGUsUSh1ciwoZnQoKSx6aSkpKSwxMCksZmV8fChmZT1qcHQoZSx1ciksa2kodGUsUSh1cix6aSksZmUpLCRuKFRlLmMsZmUpKSxGYShnLGwoanQoZmUuaiwwKSwxMikpKX1mb3IoTD0wO0w8Si5jLmxlbmd0aDtMKyspaWYoTWU9KFNuKEwsSi5jLmxlbmd0aCksbChKLmNbTF0sMTUpKSwhTWUuZGMoKSlmb3IoQj1udWxsLEw9PTA/KEI9bmV3IHl1KGUpLEV5KDAsVi5jLmxlbmd0aCkseF8oVi5jLDAsQikpOkw9PUMuYy5sZW5ndGgtMT8oQj1uZXcgeXUoZSksJG4oVi5jLEIpKTpCPShTbihMLTEsVi5jLmxlbmd0aCksbChWLmNbTC0xXSwzMCkpLGY9TWUuS2MoKTtmLk9iKCk7KW89bChmLlBiKCksMTApLFZhKG8sQik7Zm9yKFplPW5ldyBHKG90KTtaZS5hPFplLmMuYy5sZW5ndGg7KSRlPWwocmUoWmUpLDEwKSxWYSgkZSxudWxsKTtydChlLChmdCgpLHExZSksb3QpfX1mdW5jdGlvbiBqSW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyLG9pLHdzLFZsLGxjO2Zvcih3cz1uZXcgYnQsVj1uZXcgRyh0LmIpO1YuYTxWLmMuYy5sZW5ndGg7KWZvcihCPWwocmUoViksMzApLFplPW5ldyBHKEIuYSk7WmUuYTxaZS5jLmMubGVuZ3RoOyl7Zm9yKCRlPWwocmUoWmUpLDEwKSwkZS5wPS0xLEw9bG8sY249bG8sQm49bmV3IEcoJGUuaik7Qm4uYTxCbi5jLmMubGVuZ3RoOyl7Zm9yKGFuPWwocmUoQm4pLDEyKSxhPW5ldyBHKGFuLmUpO2EuYTxhLmMuYy5sZW5ndGg7KW49bChyZShhKSwxOCksam49bChRKG4sKE50KCksSngpKSwxNykuYSxMPWIuTWF0aC5tYXgoTCxqbik7Zm9yKHI9bmV3IEcoYW4uZyk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDE4KSxqbj1sKFEobiwoTnQoKSxKeCkpLDE3KS5hLGNuPWIuTWF0aC5tYXgoY24sam4pfXJ0KCRlLElXLHB0KEwpKSxydCgkZSxPVyxwdChjbikpfWZvcihmZT0wLHo9bmV3IEcodC5iKTt6LmE8ei5jLmMubGVuZ3RoOylmb3IoQj1sKHJlKHopLDMwKSxaZT1uZXcgRyhCLmEpO1plLmE8WmUuYy5jLmxlbmd0aDspJGU9bChyZShaZSksMTApLCRlLnA8MCYmKG9pPW5ldyBQd2Usb2kuYj1mZSsrLFlidChlLCRlLG9pKSwkbih3cy5jLG9pKSk7Zm9yKFN0PWVnKHdzLmMubGVuZ3RoKSxDPWVnKHdzLmMubGVuZ3RoKSxmPTA7Zjx3cy5jLmxlbmd0aDtmKyspdnQoU3QsbmV3IGJ0KSx2dChDLHB0KDApKTtmb3IockRuKHQsd3MsU3QsQyksVmw9bChqMSh3cyxXZShQRXQsbHl0LDI2MSx3cy5jLmxlbmd0aCwwLDEpKSw4NTQpLG90PWwoajEoU3QsV2UobWYsUXksMTUsU3QuYy5sZW5ndGgsMCwxKSksMTk4KSxFPVdlKFZyLGRpLDI4LEMuYy5sZW5ndGgsMTUsMSksZz0wO2c8RS5sZW5ndGg7ZysrKUVbZ109KFNuKGcsQy5jLmxlbmd0aCksbChDLmNbZ10sMTcpKS5hO2ZvcihUZT0wLE1lPW5ldyBidCx3PTA7dzxWbC5sZW5ndGg7dysrKUVbd109PTAmJiRuKE1lLmMsVmxbd10pO2Zvcih0ZT1XZShWcixkaSwyOCxWbC5sZW5ndGgsMTUsMSk7TWUuYy5sZW5ndGghPTA7KWZvcihvaT1sKHQyKE1lLDApLDI2MSksdGVbb2kuYl09VGUrKzshb3Rbb2kuYl0uZGMoKTspbGM9bChvdFtvaS5iXS5nZCgwKSwyNjEpLC0tRVtsYy5iXSxFW2xjLmJdPT0wJiYkbihNZS5jLGxjKTtmb3IoZS5hPVdlKFBFdCxseXQsMjYxLFZsLmxlbmd0aCwwLDEpLG89MDtvPFZsLmxlbmd0aDtvKyspZm9yKEo9Vmxbb10sdXI9dGVbb10sZS5hW3VyXT1KLEouYj11cixaZT1uZXcgRyhKLmUpO1plLmE8WmUuYy5jLmxlbmd0aDspJGU9bChyZShaZSksMTApLCRlLnA9dXI7cmV0dXJuIGUuYX1mdW5jdGlvbiAkSW4oZSx0LG4scixhKXt2YXIgbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO2ZvcihKPSExLHc9ITEsQj1lKzEsVj0oU24oZSx0LmMubGVuZ3RoKSxsKHQuY1tlXSwxODYpKSxnPVYuYSxFPW51bGwsZj0wO2Y8Vi5hLmMubGVuZ3RoO2YrKylpZihvPShTbihmLGcuYy5sZW5ndGgpLGwoZy5jW2ZdLDE3MikpLCFvLmMpe2lmKG8uYi5jLmxlbmd0aD09MCl7VmcoKSxVTihWLG8pLC0tZixKPSEwO2NvbnRpbnVlfWlmKG8ua3x8KEUmJmxVKEUpLEU9bmV3IHo1ZShFP0UuZStFLmQrcjowLFYuZixyKSxxTihvLEUuZStFLmQsVi5mKSx2dChWLmQsRSksQzdlKEUsbyksby5rPSEwKSxDPW51bGwsQz0oZmU9bnVsbCxmPFYuYS5jLmxlbmd0aC0xP2ZlPWwoanQoVi5hLGYrMSksMTcyKTpCPHQuYy5sZW5ndGgmJihTbihCLHQuYy5sZW5ndGgpLGwodC5jW0JdLDE4NikpLmEuYy5sZW5ndGghPTAmJihmZT1sKGp0KChTbihCLHQuYy5sZW5ndGgpLGwodC5jW0JdLDE4NikpLmEsMCksMTcyKSksZmUpLHRlPSExLEMmJih0ZT0hUGkoQy5qLFYpKSxDKXtpZihDLmIuYy5sZW5ndGghPTAmJiFSdChCdChsKGp0KEMuYiwwKSwyNykub2YoKHoxKCksJEIpKSkpKWFOKG8sbi1vLnMpLGxVKG8ucSksSj1KfGw5bihWLG8sQyxuLHIpO2Vsc2V7VU4oVixDKTticmVha31pZihDLmIuYy5sZW5ndGg9PTApZm9yKHQuYy5sZW5ndGg+QiYmVU4oKFNuKEIsdC5jLmxlbmd0aCksbCh0LmNbQl0sMTg2KSksQyksQz1udWxsO3QuYy5sZW5ndGg+QiYmKFNuKEIsdC5jLmxlbmd0aCksbCh0LmNbQl0sMTg2KSkuYS5jLmxlbmd0aD09MDspYWwodCwoU24oQix0LmMubGVuZ3RoKSx0LmNbQl0pKTtpZighQyl7LS1mO2NvbnRpbnVlfWlmKCFSdChCdChsKGp0KEMuYiwwKSwyNykub2YoKHoxKCksJEIpKSkpJiZ0QW4odCxWLG8sQyx0ZSxuLEIscikpe0o9ITA7Y29udGludWV9aWYodGUpe2lmKHo9Vi5iLEw9Qy5mLCFSdChCdChsKGp0KEMuYiwwKSwyNykub2YoJEIpKSkmJndNbih0LFYsbyxDLG4sQixyLGEpKXtpZihKPSEwLHo8TCl7dz0hMCxDLmo9VjticmVha31jb250aW51ZX1lbHNlIGlmKGU4ZShWLG8pKXtvLmM9ITAsSj0hMDtjb250aW51ZX19ZWxzZSBpZihlOGUoVixvKSl7by5jPSEwLEo9ITA7Y29udGludWV9aWYoSiljb250aW51ZX1pZihlOGUoVixvKSl7by5jPSEwLEo9ITAsQyYmKEMuaz0hMSk7Y29udGludWV9ZWxzZSBsVShvLnEpfXJldHVybiBuZXcgY2EoKEhuKCksISFKKSwhIXcpfWZ1bmN0aW9uIE50KCl7TnQ9VSxvZGU9KHBpKCksUlN0KSx0RGU9alN0LFNCPV9OZSx4MD0kU3QsSDY9QU5lLGIzPUxOZSx5ND1NTmUsR1Q9RE5lLEtUPUlOZSxjZGU9aVksbTM9RXYsdWRlPXpTdCx0TT1QTmUsa1c9cjksQ0I9KFlrZSgpLHRrdCkscTY9bmt0LHZ2PXJrdCxWNj1pa3QsSGt0PW5ldyBIYShYQixwdCgwKSksVVQ9Sjl0LGVEZT1aOXQsSng9ZWt0LGxEZT1Ta3QsckRlPW9rdCxpRGU9bGt0LGhkZT1ta3Qsc0RlPWRrdCxhRGU9cGt0LEVXPU1rdCxmZGU9X2t0LGNEZT1ra3Qsb0RlPXlrdCx1RGU9VGt0LGczPUc5dCxlTT1LOXQscmRlPWw5dCxPTWU9Zjl0LFdrdD1BTSxZa3Q9YVksS2t0PVFCLEdrdD1zWSxuRGU9KGR4KCksTDQpLG5ldyBIYShpOSxuRGUpLFlNZT1uZXcgbHcoMTIpLFdNZT1uZXcgSGEoXzIsWU1lKSxNTWU9KGlwKCksaUMpLGJwPW5ldyBIYShzTmUsTU1lKSxtND1uZXcgSGEocmgsMCksVmt0PW5ldyBIYSh6Z2UscHQoMSkpLGNXPW5ldyBIYShaNixsVCksbXY9clksTXM9X00sVlQ9czcsQmt0PUdCLFJkPUFTdCxwND1uNyxVa3Q9bmV3IEhhKHFnZSwoSG4oKSwhMCkpLGI0PUtCLGd2PU9nZSxidj1rdix4Vz1VYixhZGU9QzQsTE1lPShKcygpLEoxKSxSaD1uZXcgSGEoeHYsTE1lKSxkMz1yNyx3Vz1mTmUsdjQ9UzQscWt0PSRnZSxKTWU9Q05lLFFNZT0odDYoKSx0RiksbmV3IEhhKHlOZSxRTWUpLGprdD1CZ2UsJGt0PUZnZSx6a3Q9UmdlLFJrdD1QZ2UsbGRlPWFrdCxwdj1OOXQsemI9Tzl0LG5NPXNrdCxRdT1TOXQsZHY9bjl0LEpMPXQ5dCxmMz0keHQsU01lPXp4dCxaMWU9VXh0LFRCPXF4dCxlZGU9Wnh0LFZNZT1QOXQsVU1lPUI5dCxqTWU9eTl0LHlXPVg5dCxzZGU9ajl0LGlkZT1wOXQsS01lPVY5dCxJTWU9Yzl0LG5kZT11OXQsSjFlPVVCLEdNZT1GOXQsbFc9SXh0LEVNZT1EeHQsdVc9TXh0LEJNZT12OXQsUE1lPW05dCxGTWU9dzl0LHFUPWk3LGNjPXgzLHgyPW9OZSxqZD1JZ2UsdGRlPURnZSxfTWU9S3h0LGsyPWpnZSxRTD1EU3QsYlc9T1N0LHAzPWtOZSxYTWU9TlN0LEhUPVBTdCx6TWU9QTl0LHFNZT1NOXQsdzQ9bjksWDFlPUx4dCxITWU9STl0LHBXPXM5dCxnVz1pOXQsdlc9dEMsJE1lPUU5dCxaTD16OXQsX0I9T05lLEFNZT1yOXQsWk1lPVE5dCxETWU9YTl0LE9rdD1ZeHQsTmt0PVh4dCxGa3Q9Qzl0LFBrdD1ReHQsUk1lPU5nZSxtVz1fOXQsZFc9Snh0LHlnPWp4dCxDTWU9Qnh0LGhXPU54dCxUTWU9UHh0LGZXPUZ4dCxnND1PeHQsUTFlPVJ4dCxOTWU9Yjl0fWZ1bmN0aW9uIExpKGUpe3ZhciB0LG4scjtpZihlLmQ+PWUuail7ZS5hPS0xLGUuYz0xO3JldHVybn1pZih0PWNvKGUuaSxlLmQrKyksZS5hPXQsZS5iPT0xKXtzd2l0Y2godCl7Y2FzZSA5MjppZihyPTEwLGUuZD49ZS5qKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxWRykpKSk7ZS5hPWNvKGUuaSxlLmQrKyk7YnJlYWs7Y2FzZSA0NTooZS5lJjUxMik9PTUxMiYmZS5kPGUuaiYmY28oZS5pLGUuZCk9PTkxPygrK2UuZCxyPTI0KTpyPTA7YnJlYWs7Y2FzZSA5MTppZigoZS5lJjUxMikhPTUxMiYmZS5kPGUuaiYmY28oZS5pLGUuZCk9PTU4KXsrK2UuZCxyPTIwO2JyZWFrfWRlZmF1bHQ6KHQmNjQ1MTIpPT1BUCYmZS5kPGUuaiYmKG49Y28oZS5pLGUuZCksKG4mNjQ1MTIpPT01NjMyMCYmKGUuYT1JbysodC1BUDw8MTApK24tNTYzMjAsKytlLmQpKSxyPTB9ZS5jPXI7cmV0dXJufXN3aXRjaCh0KXtjYXNlIDEyNDpyPTI7YnJlYWs7Y2FzZSA0MjpyPTM7YnJlYWs7Y2FzZSA0MzpyPTQ7YnJlYWs7Y2FzZSA2MzpyPTU7YnJlYWs7Y2FzZSA0MTpyPTc7YnJlYWs7Y2FzZSA0NjpyPTg7YnJlYWs7Y2FzZSA5MTpyPTk7YnJlYWs7Y2FzZSA5NDpyPTExO2JyZWFrO2Nhc2UgMzY6cj0xMjticmVhaztjYXNlIDQwOmlmKHI9NixlLmQ+PWUuanx8Y28oZS5pLGUuZCkhPTYzKWJyZWFrO2lmKCsrZS5kPj1lLmopdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGUwZSkpKSk7c3dpdGNoKHQ9Y28oZS5pLGUuZCsrKSx0KXtjYXNlIDU4OnI9MTM7YnJlYWs7Y2FzZSA2MTpyPTE0O2JyZWFrO2Nhc2UgMzM6cj0xNTticmVhaztjYXNlIDkxOnI9MTk7YnJlYWs7Y2FzZSA2MjpyPTE4O2JyZWFrO2Nhc2UgNjA6aWYoZS5kPj1lLmopdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGUwZSkpKSk7aWYodD1jbyhlLmksZS5kKyspLHQ9PTYxKXI9MTY7ZWxzZSBpZih0PT0zMylyPTE3O2Vsc2UgdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLEw0dCkpKSk7YnJlYWs7Y2FzZSAzNTpmb3IoO2UuZDxlLmomJih0PWNvKGUuaSxlLmQrKyksdCE9NDEpOyk7aWYodCE9NDEpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLE00dCkpKSk7cj0yMTticmVhaztkZWZhdWx0OmlmKHQ9PTQ1fHw5Nzw9dCYmdDw9MTIyfHw2NTw9dCYmdDw9OTApey0tZS5kLHI9MjI7YnJlYWt9ZWxzZSBpZih0PT00MCl7cj0yMzticmVha310aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksZTBlKSkpKX1icmVhaztjYXNlIDkyOmlmKHI9MTAsZS5kPj1lLmopdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLFZHKSkpKTtlLmE9Y28oZS5pLGUuZCsrKTticmVhaztkZWZhdWx0OnI9MH1lLmM9cn1mdW5jdGlvbiB6SW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2lmKG4uVWcoIlByb2Nlc3MgY29tcGFjdGlvbiIsMSksISFSdChCdChRKHQsKEhjKCksdUllKSkpKSl7Zm9yKGE9bChRKHQseTMpLDg4KSx6PXplKEdlKFEodCx6ZGUpKSksZ0xuKGUsdCxhKSxpSW4odCx6LzIvMiksVj10LmIsJG0oVixuZXcgbFhlKGEpKSxFPVJyKFYsMCk7RS5iIT1FLmQuYzspaWYodz1sKEJyKEUpLDQwKSwhUnQoQnQoUSh3LChRaSgpLFZiKSkpKSl7aWYocj0kU24odyxhKSxKPVBBbih3LHQpLEw9MCxCPTAscilzd2l0Y2godGU9ci5lLGEuZyl7Y2FzZSAyOkw9dGUuYS16LXcuZi5hLEouZS5hLXotdy5mLmE8TCYmKEw9Si5lLmEtei13LmYuYSksQj1MK3cuZi5hO2JyZWFrO2Nhc2UgMTpMPXRlLmErci5mLmEreixKLmUuYSt6PkwmJihMPUouZS5hK0ouZi5hK3opLEI9TCt3LmYuYTticmVhaztjYXNlIDQ6TD10ZS5iLXotdy5mLmIsSi5lLmItei13LmYuYjxMJiYoTD1KLmUuYi16LXcuZi5iKSxCPUwrdy5mLmI7YnJlYWs7Y2FzZSAzOkw9dGUuYityLmYuYit6LEouZS5iK3o+TCYmKEw9Si5lLmIrSi5mLmIreiksQj1MK3cuZi5ifWVsc2UgaWYoSilzd2l0Y2goYS5nKXtjYXNlIDI6TD1KLmUuYS16LXcuZi5hLEI9TCt3LmYuYTticmVhaztjYXNlIDE6TD1KLmUuYStKLmYuYSt6LEI9TCt3LmYuYTticmVhaztjYXNlIDQ6TD1KLmUuYi16LXcuZi5iLEI9TCt3LmYuYjticmVhaztjYXNlIDM6TD1KLmUuYitKLmYuYit6LEI9TCt3LmYuYn1xZShRKHQsJGRlKSk9PT1xZSgoeEEoKSxPQikpPyhvPUwsZj1CLGc9a0UoRmkobmV3IGJuKG51bGwsbmV3IGtuKGUuYSwxNikpLG5ldyB0dHQobyxmKSkpLGcuYSE9bnVsbD9hPT0oSnMoKSx1Yyl8fGE9PXZjP3cuZS5hPUw6dy5lLmI9TDooYT09KEpzKCksdWMpfHxhPT13Zj9nPWtFKEZpKERodChuZXcgYm4obnVsbCxuZXcga24oZS5hLDE2KSkpLG5ldyBoWGUobykpKTpnPWtFKEZpKERodChuZXcgYm4obnVsbCxuZXcga24oZS5hLDE2KSkpLG5ldyBmWGUobykpKSxnLmEhPW51bGwmJihhPT11Y3x8YT09dmM/dy5lLmE9emUoR2UoKG1yKGcuYSE9bnVsbCksbChnLmEsNDIpKS5hKSk6dy5lLmI9emUoR2UoKG1yKGcuYSE9bnVsbCksbChnLmEsNDIpKS5hKSkpKSxnLmEhPW51bGwmJihDPWdjKGUuYSwobXIoZy5hIT1udWxsKSxnLmEpLDApLEM+MCYmQyE9bChRKHcsJGQpLDE3KS5hJiYocnQodyx0SWUsKEhuKCksITApKSxydCh3LCRkLHB0KEMpKSkpKTphPT0oSnMoKSx1Yyl8fGE9PXZjP3cuZS5hPUw6dy5lLmI9TH1uLlZnKCl9fWZ1bmN0aW9uIHl3dChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEU7Zm9yKGUuYj0xLExpKGUpLHQ9bnVsbCxlLmM9PTAmJmUuYT09OTQ/KExpKGUpLHQ9KERpKCksRGkoKSxuZXcgX2goNCkpLEV1KHQsMCxUVCksZz1uZXcgX2goNCkpOmc9KERpKCksRGkoKSxuZXcgX2goNCkpLGE9ITA7KEU9ZS5jKSE9MTspe2lmKEU9PTAmJmUuYT09OTMmJiFhKXt0JiYobkwodCxnKSxnPXQpO2JyZWFrfWlmKG49ZS5hLHI9ITEsRT09MTApc3dpdGNoKG4pe2Nhc2UgMTAwOmNhc2UgNjg6Y2FzZSAxMTk6Y2FzZSA4NzpjYXNlIDExNTpjYXNlIDgzOkt5KGcsWUUobikpLHI9ITA7YnJlYWs7Y2FzZSAxMDU6Y2FzZSA3MzpjYXNlIDk5OmNhc2UgNjc6bj0oS3koZyxZRShuKSksLTEpLG48MCYmKHI9ITApO2JyZWFrO2Nhc2UgMTEyOmNhc2UgODA6aWYodz13OWUoZSxuKSwhdyl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksdDBlKSkpKTtLeShnLHcpLHI9ITA7YnJlYWs7ZGVmYXVsdDpuPWVrZShlKX1lbHNlIGlmKEU9PTI0JiYhYSl7aWYodCYmKG5MKHQsZyksZz10KSxvPXl3dChlKSxuTChnLG8pLGUuYyE9MHx8ZS5hIT05Myl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksajR0KSkpKTticmVha31pZihMaShlKSwhcil7aWYoRT09MCl7aWYobj09OTEpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLEVTZSkpKSk7aWYobj09OTMpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLFRTZSkpKSk7aWYobj09NDUmJiFhJiZlLmEhPTkzKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxuMGUpKSkpfWlmKGUuYyE9MHx8ZS5hIT00NXx8bj09NDUmJmEpRXUoZyxuLG4pO2Vsc2V7aWYoTGkoZSksKEU9ZS5jKT09MSl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksVUcpKSkpO2lmKEU9PTAmJmUuYT09OTMpRXUoZyxuLG4pLEV1KGcsNDUsNDUpO2Vsc2V7aWYoRT09MCYmZS5hPT05M3x8RT09MjQpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLG4wZSkpKSk7aWYoZj1lLmEsRT09MCl7aWYoZj09OTEpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLEVTZSkpKSk7aWYoZj09OTMpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLFRTZSkpKSk7aWYoZj09NDUpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLG4wZSkpKSl9ZWxzZSBFPT0xMCYmKGY9ZWtlKGUpKTtpZihMaShlKSxuPmYpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHE0dCkpKSk7RXUoZyxuLGYpfX19YT0hMX1pZihlLmM9PTEpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLFVHKSkpKTtyZXR1cm4gYzYoZyksZUwoZyksZS5iPTAsTGkoZSksZ31mdW5jdGlvbiBxSW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplO2lmKG4uVWcoIkNvZmZtYW4tR3JhaGFtIExheWVyaW5nIiwxKSx0LmEuYy5sZW5ndGg9PTApe24uVmcoKTtyZXR1cm59Zm9yKFplPWwoUSh0LChOdCgpLCRNZSkpLDE3KS5hLHc9MCxmPTAsQj1uZXcgRyh0LmEpO0IuYTxCLmMuYy5sZW5ndGg7KWZvcihMPWwocmUoQiksMTApLEwucD13Kyssbz1uZXcgaHIoZHIocXMoTCkuYS5LYygpLG5ldyBqKSk7anIobyk7KWE9bCh4cihvKSwxOCksYS5wPWYrKztmb3IoZS5kPVdlKGloLHBnLDI4LHcsMTYsMSksZS5hPVdlKGloLHBnLDI4LGYsMTYsMSksZS5iPVdlKFZyLGRpLDI4LHcsMTUsMSksZS5lPVdlKFZyLGRpLDI4LHcsMTUsMSksZS5mPVdlKFZyLGRpLDI4LHcsMTUsMSksbVYoZS5jKSxqOG4oZSx0KSxWPW5ldyBnSChuZXcgTFllKGUpKSwkZT1uZXcgRyh0LmEpOyRlLmE8JGUuYy5jLmxlbmd0aDspe2ZvcihUZT1sKHJlKCRlKSwxMCksbz1uZXcgaHIoZHIoa2EoVGUpLmEuS2MoKSxuZXcgaikpO2pyKG8pOylhPWwoeHIobyksMTgpLGUuYVthLnBdfHwrK2UuYltUZS5wXTtlLmJbVGUucF09PTAmJks4KCRFKFYsVGUpLGFUKX1mb3IoZz0wO1YuYi5jLmxlbmd0aCE9MDspZm9yKFRlPWwoS29lKFYpLDEwKSxlLmZbVGUucF09ZysrLG89bmV3IGhyKGRyKHFzKFRlKS5hLktjKCksbmV3IGopKTtqcihvKTspYT1sKHhyKG8pLDE4KSwhZS5hW2EucF0mJih0ZT1hLmQuaSwtLWUuYlt0ZS5wXSx4bihlLmMsdGUscHQoZS5mW1RlLnBdKSksZS5iW3RlLnBdPT0wJiZLOCgkRShWLHRlKSxhVCkpO2Zvcih6PW5ldyBnSChuZXcgTVllKGUpKSxNZT1uZXcgRyh0LmEpO01lLmE8TWUuYy5jLmxlbmd0aDspe2ZvcihUZT1sKHJlKE1lKSwxMCksbz1uZXcgaHIoZHIocXMoVGUpLmEuS2MoKSxuZXcgaikpO2pyKG8pOylhPWwoeHIobyksMTgpLGUuYVthLnBdfHwrK2UuZVtUZS5wXTtlLmVbVGUucF09PTAmJks4KCRFKHosVGUpLGFUKX1mb3IoQz1uZXcgYnQscj12YXQodCxDKTt6LmIuYy5sZW5ndGghPTA7KWZvcihmZT1sKEtvZSh6KSwxMCksKHIuYS5jLmxlbmd0aD49WmV8fCFCNW4oZmUscikpJiYocj12YXQodCxDKSksVmEoZmUsciksbz1uZXcgaHIoZHIoa2EoZmUpLmEuS2MoKSxuZXcgaikpO2pyKG8pOylhPWwoeHIobyksMTgpLCFlLmFbYS5wXSYmKEo9YS5jLmksLS1lLmVbSi5wXSxlLmVbSi5wXT09MCYmSzgoJEUoeixKKSxhVCkpO2ZvcihFPUMuYy5sZW5ndGgtMTtFPj0wOy0tRSl2dCh0LmIsKFNuKEUsQy5jLmxlbmd0aCksbChDLmNbRV0sMzApKSk7dC5hLmMubGVuZ3RoPTAsbi5WZygpfWZ1bmN0aW9uIHh3dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGU7JGU9ITE7ZG8gZm9yKCRlPSExLG89dD9uZXcgYnIoZS5hLmIpLmEuZ2MoKS0yOjE7dD9vPj0wOm88bmV3IGJyKGUuYS5iKS5hLmdjKCk7bys9dD8tMToxKWZvcihhPXM2ZShlLmEscHQobykpLHo9MDt6PGEuYjt6KyspaWYoTD1sKGZmKGEseiksMTApLCEhbnMoTCwoZnQoKSxLaSkpJiYhKEg4bihlLmEscHQobykpJiZlLnI9PShOZigpLHYzKXx8VjhuKGUuYSxwdChvKSkmJmUucj09KE5mKCkseDQpKSl7Zm9yKE1lPSEwLGZlPTA7ZmU8YS5iO2ZlKyspdGU9bChmZihhLGZlKSwxMCksbnModGUsS2kpJiYodCYmbChRKEwsS2kpLDE3KS5hPGwoUSh0ZSxLaSksMTcpLmF8fCF0JiZsKFEoTCxLaSksMTcpLmE+bChRKHRlLEtpKSwxNykuYSkmJihNZT0hMSk7aWYoTWUpe2Zvcih3PXQ/bysxOm8tMSxnPXM2ZShlLmEscHQodykpLGY9ITEsVGU9ITAscj0hMSxDPVJyKGcsMCk7Qy5iIT1DLmQuYzspRT1sKEJyKEMpLDEwKSxucyhFLEtpKT9FLnAhPUwucCYmKGY9ZnwodD9sKFEoRSxLaSksMTcpLmE8bChRKEwsS2kpLDE3KS5hOmwoUShFLEtpKSwxNykuYT5sKFEoTCxLaSksMTcpLmEpLFRlPSExKTohZiYmVGUmJkUuaz09KFpuKCksY3UpJiYocj0hMCx0P0I9bCh4cihuZXcgaHIoZHIoa2EoRSkuYS5LYygpLG5ldyBqKSkpLDE4KS5jLmk6Qj1sKHhyKG5ldyBocihkcihxcyhFKS5hLktjKCksbmV3IGopKSksMTgpLmQuaSxCPT1MJiYodD9uPWwoeHIobmV3IGhyKGRyKHFzKEUpLmEuS2MoKSxuZXcgaikpKSwxOCkuZC5pOm49bCh4cihuZXcgaHIoZHIoa2EoRSkuYS5LYygpLG5ldyBqKSkpLDE4KS5jLmksKHQ/bChkeShlLmEsbiksMTcpLmEtbChkeShlLmEsQiksMTcpLmE6bChkeShlLmEsQiksMTcpLmEtbChkeShlLmEsbiksMTcpLmEpPD0yJiYoVGU9ITEpKSk7aWYociYmVGUmJih0P249bCh4cihuZXcgaHIoZHIocXMoTCkuYS5LYygpLG5ldyBqKSkpLDE4KS5kLmk6bj1sKHhyKG5ldyBocihkcihrYShMKS5hLktjKCksbmV3IGopKSksMTgpLmMuaSwodD9sKGR5KGUuYSxuKSwxNykuYS1sKGR5KGUuYSxMKSwxNykuYTpsKGR5KGUuYSxMKSwxNykuYS1sKGR5KGUuYSxuKSwxNykuYSk8PTImJm4uaz09KFpuKCksUHMpJiYoVGU9ITEpKSxmfHxUZSl7Zm9yKEo9SjJ0KGUsTCx0KTtKLmEuZ2MoKSE9MDspVj1sKEouYS5lYygpLktjKCkuUGIoKSwxMCksSi5hLkJjKFYpIT1udWxsLEthKEosSjJ0KGUsVix0KSk7LS16LCRlPSEwfX19d2hpbGUoJGUpfWZ1bmN0aW9uIEhJbihlKXtXcihlLmMsbGksaGUobGUoenQsMSksZHQsMiw2LFtobywiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjZGVjaW1hbCJdKSksV3IoZS5kLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2ludGVnZXIiXSkpLFdyKGUuZSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW2hvLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNib29sZWFuIl0pKSxXcihlLmYsbGksaGUobGUoenQsMSksZHQsMiw2LFtobywiRUJvb2xlYW4iLF9pLCJFQm9vbGVhbjpPYmplY3QiXSkpLFdyKGUuaSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW2hvLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNieXRlIl0pKSxXcihlLmcsbGksaGUobGUoenQsMSksZHQsMiw2LFtobywiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjaGV4QmluYXJ5Il0pKSxXcihlLmosbGksaGUobGUoenQsMSksZHQsMiw2LFtobywiRUJ5dGUiLF9pLCJFQnl0ZTpPYmplY3QiXSkpLFdyKGUubixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW2hvLCJFQ2hhciIsX2ksIkVDaGFyOk9iamVjdCJdKSksV3IoZS50LGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2RvdWJsZSJdKSksV3IoZS51LGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sIkVEb3VibGUiLF9pLCJFRG91YmxlOk9iamVjdCJdKSksV3IoZS5GLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2Zsb2F0Il0pKSxXcihlLkcsbGksaGUobGUoenQsMSksZHQsMiw2LFtobywiRUZsb2F0IixfaSwiRUZsb2F0Ok9iamVjdCJdKSksV3IoZS5JLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2ludCJdKSksV3IoZS5KLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sIkVJbnQiLF9pLCJFSW50Ok9iamVjdCJdKSksV3IoZS5OLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2xvbmciXSkpLFdyKGUuTyxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW2hvLCJFTG9uZyIsX2ksIkVMb25nOk9iamVjdCJdKSksV3IoZS5aLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3Nob3J0Il0pKSxXcihlLiQsbGksaGUobGUoenQsMSksZHQsMiw2LFtobywiRVNob3J0IixfaSwiRVNob3J0Ok9iamVjdCJdKSksV3IoZS5fLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyJdKSl9ZnVuY3Rpb24gVkluKGUsdCxuLHIsYSxvLGYpe3ZhciBnLHcsRSxDLEwsQix6LFY7cmV0dXJuIEI9bChyLmEsMTcpLmEsej1sKHIuYiwxNykuYSxMPWUuYixWPWUuYyxnPTAsQz0wLHQ9PShKcygpLHVjKXx8dD09dmM/KEM9Zk8oaDF0KHh5KGZjKG5ldyBibihudWxsLG5ldyBrbihuLmIsMTYpKSxuZXcgbG5lKSxuZXcgWXRlKSkpLEwuZS5iK0wuZi5iLzI+Qz8oRT0rK3osZz16ZShHZShmaCh2eShmYyhuZXcgYm4obnVsbCxuZXcga24obi5iLDE2KSksbmV3IGl0dChhLEUpKSxuZXcgYSQpKSkpKToodz0rK0IsZz16ZShHZShmaChZOChmYyhuZXcgYm4obnVsbCxuZXcga24obi5iLDE2KSksbmV3IHN0dChhLHcpKSxuZXcgWHRlKSkpKSkpOihDPWZPKGgxdCh4eShmYyhuZXcgYm4obnVsbCxuZXcga24obi5iLDE2KSksbmV3IFp0ZSksbmV3IHMkKSkpLEwuZS5hK0wuZi5hLzI+Qz8oRT0rK3osZz16ZShHZShmaCh2eShmYyhuZXcgYm4obnVsbCxuZXcga24obi5iLDE2KSksbmV3IG50dChhLEUpKSxuZXcgUXRlKSkpKSk6KHc9KytCLGc9emUoR2UoZmgoWTgoZmMobmV3IGJuKG51bGwsbmV3IGtuKG4uYiwxNikpLG5ldyBydHQoYSx3KSksbmV3IGJJKSkpKSkpLHQ9PXVjPyhrbyhlLmEsbmV3IGx0KHplKEdlKFEoTCwoUWkoKSxjMSkpKSktYSxnKSksa28oZS5hLG5ldyBsdChWLmUuYStWLmYuYSthK28sZykpLGtvKGUuYSxuZXcgbHQoVi5lLmErVi5mLmErYStvLFYuZS5iK1YuZi5iLzIpKSxrbyhlLmEsbmV3IGx0KFYuZS5hK1YuZi5hLFYuZS5iK1YuZi5iLzIpKSk6dD09dmM/KGtvKGUuYSxuZXcgbHQoemUoR2UoUShMLChRaSgpLGswKSkpKSthLEwuZS5iK0wuZi5iLzIpKSxrbyhlLmEsbmV3IGx0KEwuZS5hK0wuZi5hK2EsZykpLGtvKGUuYSxuZXcgbHQoVi5lLmEtYS1vLGcpKSxrbyhlLmEsbmV3IGx0KFYuZS5hLWEtbyxWLmUuYitWLmYuYi8yKSksa28oZS5hLG5ldyBsdChWLmUuYSxWLmUuYitWLmYuYi8yKSkpOnQ9PXdmPyhrbyhlLmEsbmV3IGx0KGcsemUoR2UoUShMLChRaSgpLGMxKSkpKS1hKSksa28oZS5hLG5ldyBsdChnLFYuZS5iK1YuZi5iK2ErbykpLGtvKGUuYSxuZXcgbHQoVi5lLmErVi5mLmEvMixWLmUuYitWLmYuYithK28pKSxrbyhlLmEsbmV3IGx0KFYuZS5hK1YuZi5hLzIsVi5lLmIrVi5mLmIrYSkpKTooZS5hLmI9PTB8fChsKG8wKGUuYSksOCkuYj16ZShHZShRKEwsKFFpKCksazApKSkpK2EqbChmLmIsMTcpLmEpLGtvKGUuYSxuZXcgbHQoZyx6ZShHZShRKEwsKFFpKCksazApKSkpK2EqbChmLmIsMTcpLmEpKSxrbyhlLmEsbmV3IGx0KGcsVi5lLmItYSpsKGYuYSwxNykuYS1vKSkpLG5ldyBjYShwdChCKSxwdCh6KSl9ZnVuY3Rpb24gVUluKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6O2lmKGY9ITAsTD1udWxsLHI9bnVsbCxhPW51bGwsdD0hMSx6PVBfdCxFPW51bGwsbz1udWxsLGc9MCx3PVpjZShlLGcsVFBlLENQZSksdzxlLmxlbmd0aCYmKFhuKHcsZS5sZW5ndGgpLGUuY2hhckNvZGVBdCh3KT09NTgpJiYoTD0oR2EoZyx3LGUubGVuZ3RoKSxlLnN1YnN0cihnLHctZykpLGc9dysxKSxuPUwhPW51bGwmJm5PKEVZLEwudG9Mb3dlckNhc2UoKSksbil7aWYodz1lLmxhc3RJbmRleE9mKCIhLyIpLHc9PS0xKXRocm93IHVlKG5ldyBZbigibm8gYXJjaGl2ZSBzZXBhcmF0b3IiKSk7Zj0hMCxyPXRmKGUsZywrK3cpLGc9d31lbHNlIGc+PTAmJnZuKGUuc3Vic3RyKGcsMiksIi8vIik/KGcrPTIsdz1aY2UoZSxnLCRNLHpNKSxyPShHYShnLHcsZS5sZW5ndGgpLGUuc3Vic3RyKGcsdy1nKSksZz13KTpMIT1udWxsJiYoZz09ZS5sZW5ndGh8fChYbihnLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoZykhPTQ3KSkmJihmPSExLHc9THllKGUsY2woMzUpLGcpLHc9PS0xJiYodz1lLmxlbmd0aCkscj0oR2EoZyx3LGUubGVuZ3RoKSxlLnN1YnN0cihnLHctZykpLGc9dyk7aWYoIW4mJmc8ZS5sZW5ndGgmJihYbihnLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoZyk9PTQ3KSYmKHc9WmNlKGUsZysxLCRNLHpNKSxDPShHYShnKzEsdyxlLmxlbmd0aCksZS5zdWJzdHIoZysxLHctKGcrMSkpKSxDLmxlbmd0aD4wJiZjbyhDLEMubGVuZ3RoLTEpPT01OCYmKGE9QyxnPXcpKSxnPGUubGVuZ3RoJiYoWG4oZyxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGcpPT00NykmJigrK2csdD0hMCksZzxlLmxlbmd0aCYmKFhuKGcsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChnKSE9NjMpJiYoWG4oZyxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGcpIT0zNSkpe2ZvcihCPW5ldyBidDtnPGUubGVuZ3RoJiYoWG4oZyxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGcpIT02MykmJihYbihnLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoZykhPTM1KTspdz1aY2UoZSxnLCRNLHpNKSx2dChCLChHYShnLHcsZS5sZW5ndGgpLGUuc3Vic3RyKGcsdy1nKSkpLGc9dyxnPGUubGVuZ3RoJiYoWG4oZyxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGcpPT00NykmJihVeW4oZSwrK2cpfHxCLmMucHVzaCgiIikpO3o9V2UoenQsZHQsMixCLmMubGVuZ3RoLDYsMSksajEoQix6KX1yZXR1cm4gZzxlLmxlbmd0aCYmKFhuKGcsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChnKT09NjMpJiYodz1OayhlLDM1LCsrZyksdz09LTEmJih3PWUubGVuZ3RoKSxFPShHYShnLHcsZS5sZW5ndGgpLGUuc3Vic3RyKGcsdy1nKSksZz13KSxnPGUubGVuZ3RoJiYobz13NWUoZSwrK2cpKSxFTW4oZixMLHIsYSx6LEUpLG5ldyBlbGUoZixMLHIsYSx0LHosRSxvKX1mdW5jdGlvbiBrd3QoKXtrd3Q9VSxNbGUoKSxiaT1uZXcgQ3cseG4oYmksKEN0KCksXzApLGVkKSx4bihiaSxIZixlZCkseG4oYmksemwsZWQpLHhuKGJpLEEwLGVkKSx4bihiaSxmbCxlZCkseG4oYmkscWwsZWQpLHhuKGJpLEEwLF8wKSx4bihiaSxlZCx5ZikseG4oYmksXzAseWYpLHhuKGJpLEhmLHlmKSx4bihiaSx6bCx5ZikseG4oYmksaGwseWYpLHhuKGJpLEEwLHlmKSx4bihiaSxmbCx5ZikseG4oYmkscWwseWYpLHhuKGJpLEp1LHlmKSx4bihiaSxlZCwkaCkseG4oYmksXzAsJGgpLHhuKGJpLHlmLCRoKSx4bihiaSxIZiwkaCkseG4oYmksemwsJGgpLHhuKGJpLGhsLCRoKSx4bihiaSxBMCwkaCkseG4oYmksSnUsJGgpLHhuKGJpLHpoLCRoKSx4bihiaSxmbCwkaCkseG4oYmksX2wsJGgpLHhuKGJpLHFsLCRoKSx4bihiaSxfMCxIZikseG4oYmksemwsSGYpLHhuKGJpLEEwLEhmKSx4bihiaSxxbCxIZikseG4oYmksXzAsemwpLHhuKGJpLEhmLHpsKSx4bihiaSxBMCx6bCkseG4oYmksemwsemwpLHhuKGJpLGZsLHpsKSx4bihiaSxlZCx4ZikseG4oYmksXzAseGYpLHhuKGJpLHlmLHhmKSx4bihiaSwkaCx4ZikseG4oYmksSGYseGYpLHhuKGJpLHpsLHhmKSx4bihiaSxobCx4ZikseG4oYmksQTAseGYpLHhuKGJpLHpoLHhmKSx4bihiaSxKdSx4ZikseG4oYmkscWwseGYpLHhuKGJpLGZsLHhmKSx4bihiaSxEdSx4ZikseG4oYmksZWQsemgpLHhuKGJpLF8wLHpoKSx4bihiaSx5Zix6aCkseG4oYmksSGYsemgpLHhuKGJpLHpsLHpoKSx4bihiaSxobCx6aCkseG4oYmksQTAsemgpLHhuKGJpLEp1LHpoKSx4bihiaSxxbCx6aCkseG4oYmksX2wsemgpLHhuKGJpLER1LHpoKSx4bihiaSxfMCxKdSkseG4oYmksSGYsSnUpLHhuKGJpLHpsLEp1KSx4bihiaSxBMCxKdSkseG4oYmksemgsSnUpLHhuKGJpLHFsLEp1KSx4bihiaSxmbCxKdSkseG4oYmksZWQsbGwpLHhuKGJpLF8wLGxsKSx4bihiaSx5ZixsbCkseG4oYmksSGYsbGwpLHhuKGJpLHpsLGxsKSx4bihiaSxobCxsbCkseG4oYmksQTAsbGwpLHhuKGJpLEp1LGxsKSx4bihiaSxxbCxsbCkseG4oYmksXzAsZmwpLHhuKGJpLHlmLGZsKSx4bihiaSwkaCxmbCkseG4oYmksemwsZmwpLHhuKGJpLGVkLF9sKSx4bihiaSxfMCxfbCkseG4oYmksJGgsX2wpLHhuKGJpLEhmLF9sKSx4bihiaSx6bCxfbCkseG4oYmksaGwsX2wpLHhuKGJpLEEwLF9sKSx4bihiaSxBMCxEdSkseG4oYmksemwsRHUpLHhuKGJpLEp1LGVkKSx4bihiaSxKdSxIZikseG4oYmksSnUseWYpLHhuKGJpLGhsLGVkKSx4bihiaSxobCxfMCkseG4oYmksaGwsJGgpfWZ1bmN0aW9uIEdJbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3Q7c3dpdGNoKG4uVWcoIkJyYW5kZXMgJiBLb2VwZiBub2RlIHBsYWNlbWVudCIsMSksZS5hPXQsZS5jPUFBbih0KSxyPWwoUSh0LChOdCgpLHNkZSkpLDI4MSksej1SdChCdChRKHQsWkwpKSksZS5kPXI9PShXTigpLFpLKSYmIXp8fHI9PUIxZSx2TW4oZSx0KSxaZT1udWxsLG90PW51bGwsZmU9bnVsbCxUZT1udWxsLHRlPShNaCg0LFl5KSxuZXcgQnUoNCkpLGwoUSh0LHNkZSksMjgxKS5nKXtjYXNlIDM6ZmU9bmV3IGY2KHQsZS5jLmQsKEQxKCksd3YpLCh4ZCgpLFQyKSksJG4odGUuYyxmZSk7YnJlYWs7Y2FzZSAxOlRlPW5ldyBmNih0LGUuYy5kLChEMSgpLFkxKSwoeGQoKSxUMikpLCRuKHRlLmMsVGUpO2JyZWFrO2Nhc2UgNDpaZT1uZXcgZjYodCxlLmMuZCwoRDEoKSx3diksKHhkKCksdzMpKSwkbih0ZS5jLFplKTticmVhaztjYXNlIDI6b3Q9bmV3IGY2KHQsZS5jLmQsKEQxKCksWTEpLCh4ZCgpLHczKSksJG4odGUuYyxvdCk7YnJlYWs7ZGVmYXVsdDpmZT1uZXcgZjYodCxlLmMuZCwoRDEoKSx3diksKHhkKCksVDIpKSxUZT1uZXcgZjYodCxlLmMuZCxZMSxUMiksWmU9bmV3IGY2KHQsZS5jLmQsd3YsdzMpLG90PW5ldyBmNih0LGUuYy5kLFkxLHczKSwkbih0ZS5jLFplKSwkbih0ZS5jLG90KSwkbih0ZS5jLGZlKSwkbih0ZS5jLFRlKX1mb3IoYT1uZXcgR2V0KHQsZS5jKSxnPW5ldyBHKHRlKTtnLmE8Zy5jLmMubGVuZ3RoOylvPWwocmUoZyksMTg1KSxvSW4oYSxvLGUuYiksaUxuKG8pO2ZvcihCPW5ldyByZ3QodCxlLmMpLHc9bmV3IEcodGUpO3cuYTx3LmMuYy5sZW5ndGg7KW89bChyZSh3KSwxODUpLE1NbihCLG8pO2lmKG4uX2coKSlmb3IoRT1uZXcgRyh0ZSk7RS5hPEUuYy5jLmxlbmd0aDspbz1sKHJlKEUpLDE4NSksbi5iaChvKyIgc2l6ZSBpcyAiK1d1ZShvKSk7aWYoTD1udWxsLGUuZCYmKEM9SkRuKGUsdGUsZS5jLmQpLFhtdCh0LEMsbikmJihMPUMpKSwhTClmb3IoRT1uZXcgRyh0ZSk7RS5hPEUuYy5jLmxlbmd0aDspbz1sKHJlKEUpLDE4NSksWG10KHQsbyxuKSYmKCFMfHxXdWUoTCk+V3VlKG8pKSYmKEw9byk7Zm9yKCFMJiYoTD0oU24oMCx0ZS5jLmxlbmd0aCksbCh0ZS5jWzBdLDE4NSkpKSxKPW5ldyBHKHQuYik7Si5hPEouYy5jLmxlbmd0aDspZm9yKFY9bChyZShKKSwzMCksJGU9bmV3IEcoVi5hKTskZS5hPCRlLmMuYy5sZW5ndGg7KU1lPWwocmUoJGUpLDEwKSxNZS5uLmI9emUoTC5wW01lLnBdKSt6ZShMLmRbTWUucF0pO2ZvcihuLl9nKCkmJihuLmJoKCJDaG9zZW4gbm9kZSBwbGFjZW1lbnQ6ICIrTCksbi5iaCgiQmxvY2tzOiAiK2YydChMKSksbi5iaCgiQ2xhc3NlczogIitxRW4oTCxuKSksbi5iaCgiTWFya2VkIGVkZ2VzOiAiK2UuYikpLGY9bmV3IEcodGUpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxODUpLG8uZz1udWxsLG8uYj1udWxsLG8uYT1udWxsLG8uZD1udWxsLG8uaj1udWxsLG8uaT1udWxsLG8ucD1udWxsO3JtbihlLmMpLGUuYi5hLiRiKCksbi5WZygpfWZ1bmN0aW9uIEtJbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXI7aWYoZS5jLmxlbmd0aD09MSlyZXR1cm4geWd0KChTbigwLGUuYy5sZW5ndGgpLGwoZS5jWzBdLDEyMSkpKSxTbigwLGUuYy5sZW5ndGgpLGwoZS5jWzBdLDEyMSk7aWYoZS5jLmxlbmd0aDw9MClyZXR1cm4gbmV3IG5OO2Zvcih3PW5ldyBHKGUpO3cuYTx3LmMuYy5sZW5ndGg7KXtmb3IoZj1sKHJlKHcpLDEyMSksVGU9MCxWPUlpLEo9SWksQj1sbyx6PWxvLGZlPVJyKGYuYiwwKTtmZS5iIT1mZS5kLmM7KXRlPWwoQnIoZmUpLDQwKSxUZSs9bChRKHRlLChIYygpLFJXKSksMTcpLmEsVj1iLk1hdGgubWluKFYsdGUuZS5hKSxKPWIuTWF0aC5taW4oSix0ZS5lLmIpLEI9Yi5NYXRoLm1heChCLHRlLmUuYSt0ZS5mLmEpLHo9Yi5NYXRoLm1heCh6LHRlLmUuYit0ZS5mLmIpO3J0KGYsKEhjKCksUlcpLHB0KFRlKSkscnQoZiwoUWkoKSxRVCksbmV3IGx0KFYsSikpLHJ0KGYsTkIsbmV3IGx0KEIseikpfWZvcihDbigpLFZzKGUsbmV3IEx0ZSksWmU9bmV3IG5OLHBjKFplLChTbigwLGUuYy5sZW5ndGgpLGwoZS5jWzBdLDk2KSkpLEw9MCxCbj0wLEU9bmV3IEcoZSk7RS5hPEUuYy5jLmxlbmd0aDspZj1sKHJlKEUpLDEyMSksb3Q9bWEoSmEobChRKGYsKFFpKCksTkIpKSw4KSksbChRKGYsUVQpLDgpKSxMPWIuTWF0aC5tYXgoTCxvdC5hKSxCbis9b3QuYSpvdC5iO2ZvcihMPWIuTWF0aC5tYXgoTCxiLk1hdGguc3FydChCbikqemUoR2UoUShaZSwoSGMoKSx4VHQpKSkpKSxTdD16ZShHZShRKFplLHpkZSkpKSxqbj0wLHVyPTAsQz0wLHQ9U3QsZz1uZXcgRyhlKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksMTIxKSxvdD1tYShKYShsKFEoZiwoUWkoKSxOQikpLDgpKSxsKFEoZixRVCksOCkpLGpuK290LmE+TCYmKGpuPTAsdXIrPUMrU3QsQz0wKSxobXQoWmUsZixqbix1ciksdD1iLk1hdGgubWF4KHQsam4rb3QuYSksQz1iLk1hdGgubWF4KEMsb3QuYiksam4rPW90LmErU3Q7Zm9yKCRlPW5ldyBQcixuPW5ldyBQcixhbj1uZXcgRyhlKTthbi5hPGFuLmMuYy5sZW5ndGg7KWZvcihjbj1sKHJlKGFuKSwxMjEpLHI9UnQoQnQoUShjbiwocGkoKSxHQikpKSksTWU9Y24ucT9jbi5xOm1nLG89TWUudmMoKS5LYygpO28uT2IoKTspYT1sKG8uUGIoKSw0NCksSHUoJGUsYS5sZCgpKT9xZShsKGEubGQoKSwxNDkpLlNnKCkpIT09cWUoYS5tZCgpKSYmKHImJkh1KG4sYS5sZCgpKT8oVmcoKSwiIitsKGEubGQoKSwxNDkpLlBnKCkpOihraSgkZSxsKGEubGQoKSwxNDkpLGEubWQoKSkscnQoWmUsbChhLmxkKCksMTQ5KSxhLm1kKCkpLHImJmtpKG4sbChhLmxkKCksMTQ5KSxhLm1kKCkpKSk6KGtpKCRlLGwoYS5sZCgpLDE0OSksYS5tZCgpKSxydChaZSxsKGEubGQoKSwxNDkpLGEubWQoKSkpO3JldHVybiB5Z3QoWmUpLFplfWZ1bmN0aW9uIFdVKGUsdCl7c3dpdGNoKGUuZSl7Y2FzZSAwOmNhc2UgMjpjYXNlIDQ6Y2FzZSA2OmNhc2UgNDI6Y2FzZSA0NDpjYXNlIDQ2OmNhc2UgNDg6Y2FzZSA4OmNhc2UgMTA6Y2FzZSAxMjpjYXNlIDE0OmNhc2UgMTY6Y2FzZSAxODpjYXNlIDIwOmNhc2UgMjI6Y2FzZSAyNDpjYXNlIDI2OmNhc2UgMjg6Y2FzZSAzMDpjYXNlIDMyOmNhc2UgMzQ6Y2FzZSAzNjpjYXNlIDM4OnJldHVybiBuZXcgVmF0KGUuYixlLmEsdCxlLmMpO2Nhc2UgMTpyZXR1cm4gbmV3IEJxKGUuYSx0LG1zKHQuRGgoKSxlLmMpKTtjYXNlIDQzOnJldHVybiBuZXcgQm50KGUuYSx0LG1zKHQuRGgoKSxlLmMpKTtjYXNlIDM6cmV0dXJuIG5ldyBZcyhlLmEsdCxtcyh0LkRoKCksZS5jKSk7Y2FzZSA0NTpyZXR1cm4gbmV3IG1sKGUuYSx0LG1zKHQuRGgoKSxlLmMpKTtjYXNlIDQxOnJldHVybiBuZXcgeGwobChPZihlLmMpLDI5KSxlLmEsdCxtcyh0LkRoKCksZS5jKSk7Y2FzZSA1MDpyZXR1cm4gbmV3IGlmdChsKE9mKGUuYyksMjkpLGUuYSx0LG1zKHQuRGgoKSxlLmMpKTtjYXNlIDU6cmV0dXJuIG5ldyBhNGUoZS5hLHQsbXModC5EaCgpLGUuYyksZS5kLm4pO2Nhc2UgNDc6cmV0dXJuIG5ldyBZcnQoZS5hLHQsbXModC5EaCgpLGUuYyksZS5kLm4pO2Nhc2UgNzpyZXR1cm4gbmV3IG50KGUuYSx0LG1zKHQuRGgoKSxlLmMpLGUuZC5uKTtjYXNlIDQ5OnJldHVybiBuZXcgVjgoZS5hLHQsbXModC5EaCgpLGUuYyksZS5kLm4pO2Nhc2UgOTpyZXR1cm4gbmV3IFBudChlLmEsdCxtcyh0LkRoKCksZS5jKSk7Y2FzZSAxMTpyZXR1cm4gbmV3IE5udChlLmEsdCxtcyh0LkRoKCksZS5jKSk7Y2FzZSAxMzpyZXR1cm4gbmV3IHl5ZShlLmEsdCxtcyh0LkRoKCksZS5jKSk7Y2FzZSAxNTpyZXR1cm4gbmV3IEpxKGUuYSx0LG1zKHQuRGgoKSxlLmMpKTtjYXNlIDE3OnJldHVybiBuZXcgRm50KGUuYSx0LG1zKHQuRGgoKSxlLmMpKTtjYXNlIDE5OnJldHVybiBuZXcgJDUoZS5hLHQsbXModC5EaCgpLGUuYykpO2Nhc2UgMjE6cmV0dXJuIG5ldyB4eWUoZS5hLHQsbXModC5EaCgpLGUuYykpO2Nhc2UgMjM6cmV0dXJuIG5ldyBGTyhlLmEsdCxtcyh0LkRoKCksZS5jKSk7Y2FzZSAyNTpyZXR1cm4gbmV3IEpydChlLmEsdCxtcyh0LkRoKCksZS5jKSxlLmQubik7Y2FzZSAyNzpyZXR1cm4gbmV3IExuKGUuYSx0LG1zKHQuRGgoKSxlLmMpLGUuZC5uKTtjYXNlIDI5OnJldHVybiBuZXcgUXJ0KGUuYSx0LG1zKHQuRGgoKSxlLmMpLGUuZC5uKTtjYXNlIDMxOnJldHVybiBuZXcgWHJ0KGUuYSx0LG1zKHQuRGgoKSxlLmMpLGUuZC5uKTtjYXNlIDMzOnJldHVybiBuZXcgYzRlKGUuYSx0LG1zKHQuRGgoKSxlLmMpLGUuZC5uKTtjYXNlIDM1OnJldHVybiBuZXcgbzRlKGUuYSx0LG1zKHQuRGgoKSxlLmMpLGUuZC5uKTtjYXNlIDM3OnJldHVybiBuZXcgZmFlKGUuYSx0LG1zKHQuRGgoKSxlLmMpLGUuZC5uKTtjYXNlIDM5OnJldHVybiBuZXcgcEgoZS5hLHQsbXModC5EaCgpLGUuYyksZS5kLm4pO2Nhc2UgNDA6cmV0dXJuIG5ldyBMcyh0LG1zKHQuRGgoKSxlLmMpKTtkZWZhdWx0OnRocm93IHVlKG5ldyBBYygiVW5rbm93biBmZWF0dXJlIHN0eWxlOiAiK2UuZSkpfX1mdW5jdGlvbiBFd3QoZSl7dmFyIHQsbixyLGEsbyxmLGcsdztmb3Iobz0wLGE9ZS5hLmIsdz1ScihlLmEsMCk7dy5iIT13LmQuYzspe2lmKGc9bChCcih3KSwyNDApLGY9KG8rMSkvKGErMSksIWUuYyYmIWUuZClyZXR1cm47ZS5jJiYhZS5kPyhlLmc9ITAsZS5iPT0oSnMoKSx1Yyk/KHI9ZS5jLmUuYitlLmMuZi5iK2UuZSoobysxKSx0PW5ldyBsdCh6ZShHZShRKGUuYywoUWkoKSxrMCkpKSkrZS5lLHIpLG49bmV3IGx0KHplKEdlKFEoZS5jLGMxKSkpLWUuZSxyKSk6ZS5iPT12Yz8ocj1lLmMuZS5iK2UuYy5mLmIrZS5lKihvKzEpLHQ9bmV3IGx0KHplKEdlKFEoZS5jLChRaSgpLGMxKSkpKS1lLmUsciksbj1uZXcgbHQoemUoR2UoUShlLmMsazApKSkrZS5lLHIpKTplLmI9PXdmPyhyPWUuYy5lLmErZS5jLmYuYStlLmUqKG8rMSksdD1uZXcgbHQocix6ZShHZShRKGUuYywoUWkoKSxrMCkpKSkrZS5lKSxuPW5ldyBsdChyLHplKEdlKFEoZS5jLGMxKSkpLWUuZSkpOihyPWUuYy5lLmErZS5jLmYuYStlLmUqKG8rMSksdD1uZXcgbHQocix6ZShHZShRKGUuYywoUWkoKSxjMSkpKSktZS5lKSxuPW5ldyBsdChyLHplKEdlKFEoZS5jLGswKSkpK2UuZSkpKTplLmMmJmUuZD9lLmI9PShKcygpLHVjKT8ocj1lLmQuZS5iKmYrKGUuYy5lLmIrZS5jLmYuYikqKDEtZiksdD1uZXcgbHQoemUoR2UoUShlLmMsKFFpKCksazApKSkpK2UuZSxyKSxuPW5ldyBsdCh6ZShHZShRKGUuYyxjMSkpKS1lLmUscikpOmUuYj09dmM/KHI9ZS5kLmUuYipmKyhlLmMuZS5iK2UuYy5mLmIpKigxLWYpLHQ9bmV3IGx0KHplKEdlKFEoZS5jLChRaSgpLGMxKSkpKS1lLmUsciksbj1uZXcgbHQoemUoR2UoUShlLmMsazApKSkrZS5lLHIpKTplLmI9PXdmPyhyPWUuZC5lLmEqZisoZS5jLmUuYStlLmMuZi5hKSooMS1mKSx0PW5ldyBsdChyLHplKEdlKFEoZS5jLChRaSgpLGswKSkpKStlLmUpLG49bmV3IGx0KHIsemUoR2UoUShlLmMsYzEpKSktZS5lKSk6KHI9ZS5kLmUuYSpmKyhlLmMuZS5hK2UuYy5mLmEpKigxLWYpLHQ9bmV3IGx0KHIsemUoR2UoUShlLmMsKFFpKCksYzEpKSkpLWUuZSksbj1uZXcgbHQocix6ZShHZShRKGUuYyxrMCkpKStlLmUpKTooZS5mPSEwLGUuYj09KEpzKCksdWMpPyhyPWUuZC5lLmItZS5lKihvKzEpLHQ9bmV3IGx0KHplKEdlKFEoZS5kLChRaSgpLGswKSkpKStlLmUsciksbj1uZXcgbHQoemUoR2UoUShlLmQsYzEpKSktZS5lLHIpKTplLmI9PXZjPyhyPWUuZC5lLmItZS5lKihvKzEpLHQ9bmV3IGx0KHplKEdlKFEoZS5kLChRaSgpLGMxKSkpKS1lLmUsciksbj1uZXcgbHQoemUoR2UoUShlLmQsazApKSkrZS5lLHIpKTplLmI9PXdmPyhyPWUuZC5lLmEtZS5lKihvKzEpLHQ9bmV3IGx0KHIsemUoR2UoUShlLmQsKFFpKCksazApKSkpK2UuZSksbj1uZXcgbHQocix6ZShHZShRKGUuZCxjMSkpKS1lLmUpKToocj1lLmQuZS5hLWUuZSoobysxKSx0PW5ldyBsdChyLHplKEdlKFEoZS5kLChRaSgpLGMxKSkpKS1lLmUpLG49bmV3IGx0KHIsemUoR2UoUShlLmQsazApKSkrZS5lKSkpLGwoZy5hLDgpLmE9dC5hLGwoZy5hLDgpLmI9dC5iLGcuYi5hPW4uYSxnLmIuYj1uLmIsKytvfX1mdW5jdGlvbiBXSW4oZSx0LG4scixhLG8pe3ZhciBmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO3N3aXRjaCh0KXtjYXNlIDcxOmc9ci5xLmdldEZ1bGxZZWFyKCktTGI+PS0xOTAwPzE6MCxuPj00P2hpKGUsaGUobGUoenQsMSksZHQsMiw2LFtSd3Qsand0XSlbZ10pOmhpKGUsaGUobGUoenQsMSksZHQsMiw2LFsiQkMiLCJBRCJdKVtnXSk7YnJlYWs7Y2FzZSAxMjE6aDZuKGUsbixyKTticmVhaztjYXNlIDc3Ok1fbihlLG4scik7YnJlYWs7Y2FzZSAxMDc6dz1hLnEuZ2V0SG91cnMoKSx3PT0wP2FnKGUsMjQsbik6YWcoZSx3LG4pO2JyZWFrO2Nhc2UgODM6SFRuKGUsbixhKTticmVhaztjYXNlIDY5OkM9ci5xLmdldERheSgpLG49PTU/aGkoZSxoZShsZSh6dCwxKSxkdCwyLDYsWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0pW0NdKTpuPT00P2hpKGUsaGUobGUoenQsMSksZHQsMiw2LFtRbGUsSmxlLFpsZSxlaGUsdGhlLG5oZSxyaGVdKVtDXSk6aGkoZSxoZShsZSh6dCwxKSxkdCwyLDYsWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSlbQ10pO2JyZWFrO2Nhc2UgOTc6YS5xLmdldEhvdXJzKCk+PTEyJiZhLnEuZ2V0SG91cnMoKTwyND9oaShlLGhlKGxlKHp0LDEpLGR0LDIsNixbIkFNIiwiUE0iXSlbMV0pOmhpKGUsaGUobGUoenQsMSksZHQsMiw2LFsiQU0iLCJQTSJdKVswXSk7YnJlYWs7Y2FzZSAxMDQ6TD1hLnEuZ2V0SG91cnMoKSUxMixMPT0wP2FnKGUsMTIsbik6YWcoZSxMLG4pO2JyZWFrO2Nhc2UgNzU6Qj1hLnEuZ2V0SG91cnMoKSUxMixhZyhlLEIsbik7YnJlYWs7Y2FzZSA3Mjp6PWEucS5nZXRIb3VycygpLGFnKGUseixuKTticmVhaztjYXNlIDk5OlY9ci5xLmdldERheSgpLG49PTU/aGkoZSxoZShsZSh6dCwxKSxkdCwyLDYsWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0pW1ZdKTpuPT00P2hpKGUsaGUobGUoenQsMSksZHQsMiw2LFtRbGUsSmxlLFpsZSxlaGUsdGhlLG5oZSxyaGVdKVtWXSk6bj09Mz9oaShlLGhlKGxlKHp0LDEpLGR0LDIsNixbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdKVtWXSk6YWcoZSxWLDEpO2JyZWFrO2Nhc2UgNzY6Sj1yLnEuZ2V0TW9udGgoKSxuPT01P2hpKGUsaGUobGUoenQsMSksZHQsMiw2LFsiSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0pW0pdKTpuPT00P2hpKGUsaGUobGUoenQsMSksZHQsMiw2LFskbGUsemxlLHFsZSxIbGUsX3gsVmxlLFVsZSxHbGUsS2xlLFdsZSxZbGUsWGxlXSlbSl0pOm49PTM/aGkoZSxoZShsZSh6dCwxKSxkdCwyLDYsWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLF94LCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSlbSl0pOmFnKGUsSisxLG4pO2JyZWFrO2Nhc2UgODE6dGU9ci5xLmdldE1vbnRoKCkvM3wwLG48ND9oaShlLGhlKGxlKHp0LDEpLGR0LDIsNixbIlExIiwiUTIiLCJRMyIsIlE0Il0pW3RlXSk6aGkoZSxoZShsZSh6dCwxKSxkdCwyLDYsWyIxc3QgcXVhcnRlciIsIjJuZCBxdWFydGVyIiwiM3JkIHF1YXJ0ZXIiLCI0dGggcXVhcnRlciJdKVt0ZV0pO2JyZWFrO2Nhc2UgMTAwOmZlPXIucS5nZXREYXRlKCksYWcoZSxmZSxuKTticmVhaztjYXNlIDEwOTpFPWEucS5nZXRNaW51dGVzKCksYWcoZSxFLG4pO2JyZWFrO2Nhc2UgMTE1OmY9YS5xLmdldFNlY29uZHMoKSxhZyhlLGYsbik7YnJlYWs7Y2FzZSAxMjI6bjw0P2hpKGUsby5jWzBdKTpoaShlLG8uY1sxXSk7YnJlYWs7Y2FzZSAxMTg6aGkoZSxvLmIpO2JyZWFrO2Nhc2UgOTA6bjwzP2hpKGUsQmtuKG8pKTpuPT0zP2hpKGUsemtuKG8pKTpoaShlLHFrbihvLmEpKTticmVhaztkZWZhdWx0OnJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIFdrZShlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXIsb2k7aWYoZW10KHQpLHc9bChPZSgoIXQuYiYmKHQuYj1uZXcgTG4oX3IsdCw0LDcpKSx0LmIpLDApLDg0KSxDPWwoT2UoKCF0LmMmJih0LmM9bmV3IExuKF9yLHQsNSw4KSksdC5jKSwwKSw4NCksZz1iYyh3KSxFPWJjKEMpLGY9KCF0LmEmJih0LmE9bmV3IG50KGNzLHQsNiw2KSksdC5hKS5pPT0wP251bGw6bChPZSgoIXQuYSYmKHQuYT1uZXcgbnQoY3MsdCw2LDYpKSx0LmEpLDApLDE2NiksU3Q9bChjcihlLmEsZyksMTApLGpuPWwoY3IoZS5hLEUpLDEwKSxjbj1udWxsLHVyPW51bGwsRGUodywxOTMpJiYob3Q9bChjcihlLmEsdyksMzA1KSxEZShvdCwxMik/Y249bChvdCwxMik6RGUob3QsMTApJiYoU3Q9bChvdCwxMCksY249bChqdChTdC5qLDApLDEyKSkpLERlKEMsMTkzKSYmKEJuPWwoY3IoZS5hLEMpLDMwNSksRGUoQm4sMTIpP3VyPWwoQm4sMTIpOkRlKEJuLDEwKSYmKGpuPWwoQm4sMTApLHVyPWwoanQoam4uaiwwKSwxMikpKSwhU3R8fCFqbil0aHJvdyB1ZShuZXcgSTgoIlRoZSBzb3VyY2Ugb3IgdGhlIHRhcmdldCBvZiBlZGdlICIrdCsiIGNvdWxkIG5vdCBiZSBmb3VuZC4gVGhpcyB1c3VhbGx5IGhhcHBlbnMgd2hlbiBhbiBlZGdlIGNvbm5lY3RzIGEgbm9kZSBsYWlkIG91dCBieSBFTEsgTGF5ZXJlZCB0byBhIG5vZGUgaW4gYW5vdGhlciBsZXZlbCBvZiBoaWVyYXJjaHkgbGFpZCBvdXQgYnkgZWl0aGVyIGFub3RoZXIgaW5zdGFuY2Ugb2YgRUxLIExheWVyZWQgb3IgYW5vdGhlciBsYXlvdXQgYWxnb3JpdGhtIGFsbHRvZ2V0aGVyLiBUaGUgZm9ybWVyIGNhbiBiZSBzb2x2ZWQgYnkgc2V0dGluZyB0aGUgaGllcmFyY2h5SGFuZGxpbmcgb3B0aW9uIHRvIElOQ0xVREVfQ0hJTERSRU4uIikpO2ZvcihKPW5ldyBUdyxwYyhKLHQpLHJ0KEosKGZ0KCksemkpLHQpLHJ0KEosKE50KCksY2MpLG51bGwpLHo9bChRKHIsTHUpLDIxKSxTdD09am4mJnouRmMoKEhvKCksR0wpKSxjbnx8KFplPShxbygpLHp1KSxhbj1udWxsLGYmJlA1KGwoUShTdCxNcyksMTAxKSkmJihhbj1uZXcgbHQoZi5qLGYuayksVmN0KGFuLFdPKHQpKSx2dXQoYW4sbiksTHkoRSxnKSYmKFplPSRsLE9pKGFuLFN0Lm4pKSksY249dHZ0KFN0LGFuLFplLHIpKSx1cnx8KFplPShxbygpLCRsKSxvaT1udWxsLGYmJlA1KGwoUShqbixNcyksMTAxKSkmJihvaT1uZXcgbHQoZi5iLGYuYyksVmN0KG9pLFdPKHQpKSx2dXQob2ksbikpLHVyPXR2dChqbixvaSxaZSxlbyhqbikpKSxwbyhKLGNuKSxGYShKLHVyKSwoY24uZS5jLmxlbmd0aD4xfHxjbi5nLmMubGVuZ3RoPjF8fHVyLmUuYy5sZW5ndGg+MXx8dXIuZy5jLmxlbmd0aD4xKSYmei5GYygoSG8oKSxVTCkpLEI9bmV3IG9yKCghdC5uJiYodC5uPW5ldyBudChlYyx0LDEsNykpLHQubikpO0IuZSE9Qi5pLmdjKCk7KWlmKEw9bChncihCKSwxMzUpLCFSdChCdChhdChMLG12KSkpJiZMLmEpc3dpdGNoKHRlPU9jZShMKSx2dChKLmIsdGUpLGwoUSh0ZSxqZCksMjc4KS5nKXtjYXNlIDE6Y2FzZSAyOnouRmMoKEhvKCksalQpKTticmVhaztjYXNlIDA6ei5GYygoSG8oKSxSVCkpLHJ0KHRlLGpkLChGMSgpLG5DKSl9aWYobz1sKFEocixKTCksMzIyKSxmZT1sKFEocix5VyksMzIzKSxhPW89PShkQSgpLG1CKXx8ZmU9PShPQSgpLHZkZSksZiYmKCFmLmEmJihmLmE9bmV3IFlzKHFoLGYsNSkpLGYuYSkuaSE9MCYmYSl7Zm9yKFRlPVFOKGYpLFY9bmV3IGJsLCRlPVJyKFRlLDApOyRlLmIhPSRlLmQuYzspTWU9bChCcigkZSksOCksdWkoVixuZXcgRW8oTWUpKTtydChKLHFMZSxWKX1yZXR1cm4gSn1mdW5jdGlvbiBZSW4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyLG9pLHdzO2Zvcihhbj0wLEJuPTAsU3Q9bmV3IFByLFplPWwoZmgodnkoZmMobmV3IGJuKG51bGwsbmV3IGtuKGUuYiwxNikpLG5ldyBKdGUpLG5ldyBzbmUpKSwxNykuYSsxLGNuPVdlKFZyLGRpLDI4LFplLDE1LDEpLHRlPVdlKFZyLGRpLDI4LFplLDE1LDEpLEo9MDtKPFplO0orKyljbltKXT0wLHRlW0pdPTA7Zm9yKHc9bCh5YyhWNWUobmV3IGJuKG51bGwsbmV3IGtuKGUuYSwxNikpKSxQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksRWMpXSkpKSwxNSksQz13LktjKCk7Qy5PYigpOylpZihFPWwoQy5QYigpLDY1KSx1cj1sKFEoRS5iLChIYygpLCRkKSksMTcpLmEsd3M9bChRKEUuYywkZCksMTcpLmEsJGU9d3MtdXIsJGU+MSlmb3IoZz11cisxO2c8d3M7ZysrKXtpZihMPWcsb3Q9bCh5YyhGaShuZXcgYm4obnVsbCxuZXcga24oZS5iLDE2KSksbmV3IHdYZShMKSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsW0VjXSkpKSwxNSksVj0wLHQ9PShKcygpLHVjKXx8dD09dmMpe2ZvcihvdC5qZChuZXcgcm5lKSxWPTA7VjxvdC5nYygpJiYoZmU9KGctdXIpLyh3cy11ciksIShsKG90LlhiKFYpLDQwKS5lLmI+RS5iLmUuYiooMS1mZSkrRS5jLmUuYipmZSkpO1YrKyk7aWYob3QuZ2MoKT4wJiYob2k9RS5hLmI9PTA/SmEoRS5iLmUpOmwobzAoRS5hKSw4KSxNZT1PaShKYShsKG90LlhiKG90LmdjKCktMSksNDApLmUpLGwob3QuWGIob3QuZ2MoKS0xKSw0MCkuZiksQj1PaShKYShsKG90LlhiKDApLDQwKS5lKSxsKG90LlhiKDApLDQwKS5mKSxWPj1vdC5nYygpLTEmJm9pLmI+TWUuYiYmRS5jLmUuYj5NZS5ifHxWPD0wJiZvaS5iPEIuYSYmRS5jLmUuYjxCLmIpKWNvbnRpbnVlfWVsc2V7Zm9yKG90LmpkKG5ldyBpbmUpLFY9MDtWPG90LmdjKCkmJihmZT0oZy11cikvKHdzLXVyKSwhKGwob3QuWGIoViksNDApLmUuYT5FLmIuZS5hKigxLWZlKStFLmMuZS5hKmZlKSk7VisrKTtpZihvdC5nYygpPjAmJihvaT1FLmEuYj09MD9KYShFLmIuZSk6bChvMChFLmEpLDgpLE1lPU9pKEphKGwob3QuWGIob3QuZ2MoKS0xKSw0MCkuZSksbChvdC5YYihvdC5nYygpLTEpLDQwKS5mKSxCPU9pKEphKGwob3QuWGIoMCksNDApLmUpLGwob3QuWGIoMCksNDApLmYpLFY+PW90LmdjKCktMSYmb2kuYT5NZS5hJiZFLmMuZS5hPk1lLmF8fFY8PTAmJm9pLmE8Qi5hJiZFLmMuZS5hPEIuYSkpY29udGludWV9YT1uZXcgcWEsbz1uZXcgcWEsdWkoRS5hLGEpLHVpKEUuYSxvKSxmPW5ldyB3YWUoYSxvLEUpLFRlPVEwKGwwKGcsMzIpLHZhKFYsVm8pKSxIdShTdCxhcChUZSkpPyh6PWwoY3IoU3QsYXAoVGUpKSw2NzUpLHVpKHouYSxmKSxVZyh6LmIpPyRtKHouYSxuZXcgaG5lKTokbSh6LmEsbmV3IGZuZSksRXd0KHopKTooej1uZXcgRmR0KFY9PTA/bnVsbDpsKG90LlhiKFYtMSksNDApLFY9PW90LmdjKCk/bnVsbDpsKG90LlhiKFYpLDQwKSxmLGUpLGtpKFN0LGFwKFRlKSx6KSksdD09dWN8fHQ9PXZjPyh6LmYmJnouZC5lLmI8PXplKEdlKFEoZSwoUWkoKSxGZGUpKSkpJiYrK2FuLHouZyYmei5jLmUuYit6LmMuZi5iPj16ZShHZShRKGUsKFFpKCksaUllKSkpKSYmKytCbik6KHouZiYmei5kLmUuYTw9emUoR2UoUShlLChRaSgpLEJkZSkpKSkmJisrYW4sei5nJiZ6LmMuZS5hK3ouYy5mLmE+PXplKEdlKFEoZSwoUWkoKSxySWUpKSkpJiYrK0JuKX1lbHNlICRlPT0wP2I5ZShFKTokZTwwJiYoKytjblt1cl0sKyt0ZVt3c10sam49VkluKEUsdCxlLG5ldyBjYShwdChhbikscHQoQm4pKSxuLHIsbmV3IGNhKHB0KHRlW3dzXSkscHQoY25bdXJdKSkpLGFuPWwoam4uYSwxNykuYSxCbj1sKGpuLmIsMTcpLmEpfWZ1bmN0aW9uIFhJbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGU7aWYocj10LHc9bixlLmImJnIuaj09KEN0KCksZXIpJiZ3Lmo9PShDdCgpLGVyKSYmKFRlPXIscj13LHc9VGUpLEh1KGUuYSxyKSl7aWYoVzAobChjcihlLmEsciksNDkpLHcpKXJldHVybiAxfWVsc2Uga2koZS5hLHIsbmV3IEtzKTtpZihIdShlLmEsdykpe2lmKFcwKGwoY3IoZS5hLHcpLDQ5KSxyKSlyZXR1cm4tMX1lbHNlIGtpKGUuYSx3LG5ldyBLcyk7aWYoSHUoZS5kLHIpKXtpZihXMChsKGNyKGUuZCxyKSw0OSksdykpcmV0dXJuLTF9ZWxzZSBraShlLmQscixuZXcgS3MpO2lmKEh1KGUuZCx3KSl7aWYoVzAobChjcihlLmEsdyksNDkpLHIpKXJldHVybiAxfWVsc2Uga2koZS5kLHcsbmV3IEtzKTtpZihyLmohPXcuailyZXR1cm4gZmU9UmxuKHIuaix3LmopLGZlPT0tMT9kZihlLHcscik6ZGYoZSxyLHcpLGZlO2lmKHIuZS5jLmxlbmd0aCE9MCYmdy5lLmMubGVuZ3RoIT0wKXtpZihlLmImJihmZT1qMHQocix3KSxmZSE9MCkpcmV0dXJuIGZlPT0tMT9kZihlLHcscik6ZmU9PTEmJmRmKGUscix3KSxmZTtpZihvPWwoanQoci5lLDApLDE4KS5jLmksQz1sKGp0KHcuZSwwKSwxOCkuYy5pLG89PUMpcmV0dXJuIGE9bChRKGwoanQoci5lLDApLDE4KSwoZnQoKSxLaSkpLDE3KS5hLEU9bChRKGwoanQody5lLDApLDE4KSxLaSksMTcpLmEsYT5FP2RmKGUscix3KTpkZihlLHcsciksYTxFPy0xOmE+RT8xOjA7Zm9yKFY9ZS5jLEo9MCx0ZT1WLmxlbmd0aDtKPHRlOysrSil7aWYoej1WW0pdLHo9PW8pcmV0dXJuIGRmKGUscix3KSwxO2lmKHo9PUMpcmV0dXJuIGRmKGUsdyxyKSwtMX19cmV0dXJuIHIuZy5jLmxlbmd0aCE9MCYmdy5nLmMubGVuZ3RoIT0wPyhnPWwoUShyLChmdCgpLFUxZSkpLDEwKSxCPWwoUSh3LFUxZSksMTApLGUuZT09KEVkKCkseGRlKSYmZyYmQiYmbnMoZyxLaSkmJm5zKEIsS2kpPyhhPWwoUShnLEtpKSwxNykuYSxFPWwoUShCLEtpKSwxNykuYSxhPkU/ZGYoZSxyLHcpOmRmKGUsdyxyKSxhPEU/LTE6YT5FPzE6MCk6ZS5iJiYoZmU9ajB0KHIsdyksZmUhPTApPyhmZT09LTE/ZGYoZSx3LHIpOmZlPT0xJiZkZihlLHIsdyksZmUpOihmPTAsTD0wLG5zKGwoanQoci5nLDApLDE4KSxLaSkmJihmPWwoUShsKGp0KHIuZywwKSwxOCksS2kpLDE3KS5hKSxucyhsKGp0KHcuZywwKSwxOCksS2kpJiYoTD1sKFEobChqdChyLmcsMCksMTgpLEtpKSwxNykuYSksZyYmZz09Qj9SdChCdChRKGwoanQoci5nLDApLDE4KSxXMSkpKSYmIVJ0KEJ0KFEobChqdCh3LmcsMCksMTgpLFcxKSkpPyhkZihlLHIsdyksMSk6IVJ0KEJ0KFEobChqdChyLmcsMCksMTgpLFcxKSkpJiZSdChCdChRKGwoanQody5nLDApLDE4KSxXMSkpKT8oZGYoZSx3LHIpLC0xKTooZj5MP2RmKGUscix3KTpkZihlLHcsciksZjxMPy0xOmY+TD8xOjApOihlLmYmJihlLmYuX2IoZykmJihmPWwoZS5mLnhjKGcpLDE3KS5hKSxlLmYuX2IoQikmJihMPWwoZS5mLnhjKEIpLDE3KS5hKSksZj5MP2RmKGUscix3KTpkZihlLHcsciksZjxMPy0xOmY+TD8xOjApKSk6ci5lLmMubGVuZ3RoIT0wJiZ3LmcuYy5sZW5ndGghPTA/KGRmKGUscix3KSwxKTpyLmcuYy5sZW5ndGghPTAmJncuZS5jLmxlbmd0aCE9MD8oZGYoZSx3LHIpLC0xKTpucyhyLChmdCgpLEtpKSkmJm5zKHcsS2kpPyhhPWwoUShyLEtpKSwxNykuYSxFPWwoUSh3LEtpKSwxNykuYSxhPkU/ZGYoZSxyLHcpOmRmKGUsdyxyKSxhPEU/LTE6YT5FPzE6MCk6KGRmKGUsdyxyKSwtMSl9ZnVuY3Rpb24gUUluKGUpe2UuZ2J8fChlLmdiPSEwLGUuYj1xYyhlLDApLFNzKGUuYiwxOCksaXMoZS5iLDE5KSxlLmE9cWMoZSwxKSxTcyhlLmEsMSksaXMoZS5hLDIpLGlzKGUuYSwzKSxpcyhlLmEsNCksaXMoZS5hLDUpLGUubz1xYyhlLDIpLFNzKGUubyw4KSxTcyhlLm8sOSksaXMoZS5vLDEwKSxpcyhlLm8sMTEpLGlzKGUubywxMiksaXMoZS5vLDEzKSxpcyhlLm8sMTQpLGlzKGUubywxNSksaXMoZS5vLDE2KSxpcyhlLm8sMTcpLGlzKGUubywxOCksaXMoZS5vLDE5KSxpcyhlLm8sMjApLGlzKGUubywyMSksaXMoZS5vLDIyKSxpcyhlLm8sMjMpLHNjKGUubyksc2MoZS5vKSxzYyhlLm8pLHNjKGUubyksc2MoZS5vKSxzYyhlLm8pLHNjKGUubyksc2MoZS5vKSxzYyhlLm8pLHNjKGUubyksZS5wPXFjKGUsMyksU3MoZS5wLDIpLFNzKGUucCwzKSxTcyhlLnAsNCksU3MoZS5wLDUpLGlzKGUucCw2KSxpcyhlLnAsNyksc2MoZS5wKSxzYyhlLnApLGUucT1xYyhlLDQpLFNzKGUucSw4KSxlLnY9cWMoZSw1KSxpcyhlLnYsOSksc2MoZS52KSxzYyhlLnYpLHNjKGUudiksZS53PXFjKGUsNiksU3MoZS53LDIpLFNzKGUudywzKSxTcyhlLncsNCksaXMoZS53LDUpLGUuQj1xYyhlLDcpLGlzKGUuQiwxKSxzYyhlLkIpLHNjKGUuQiksc2MoZS5CKSxlLlE9cWMoZSw4KSxpcyhlLlEsMCksc2MoZS5RKSxlLlI9cWMoZSw5KSxTcyhlLlIsMSksZS5TPXFjKGUsMTApLHNjKGUuUyksc2MoZS5TKSxzYyhlLlMpLHNjKGUuUyksc2MoZS5TKSxzYyhlLlMpLHNjKGUuUyksc2MoZS5TKSxzYyhlLlMpLHNjKGUuUyksc2MoZS5TKSxzYyhlLlMpLHNjKGUuUyksc2MoZS5TKSxzYyhlLlMpLGUuVD1xYyhlLDExKSxpcyhlLlQsMTApLGlzKGUuVCwxMSksaXMoZS5ULDEyKSxpcyhlLlQsMTMpLGlzKGUuVCwxNCksc2MoZS5UKSxzYyhlLlQpLGUuVT1xYyhlLDEyKSxTcyhlLlUsMiksU3MoZS5VLDMpLGlzKGUuVSw0KSxpcyhlLlUsNSksaXMoZS5VLDYpLGlzKGUuVSw3KSxzYyhlLlUpLGUuVj1xYyhlLDEzKSxpcyhlLlYsMTApLGUuVz1xYyhlLDE0KSxTcyhlLlcsMTgpLFNzKGUuVywxOSksU3MoZS5XLDIwKSxpcyhlLlcsMjEpLGlzKGUuVywyMiksaXMoZS5XLDIzKSxlLmJiPXFjKGUsMTUpLFNzKGUuYmIsMTApLFNzKGUuYmIsMTEpLFNzKGUuYmIsMTIpLFNzKGUuYmIsMTMpLFNzKGUuYmIsMTQpLFNzKGUuYmIsMTUpLFNzKGUuYmIsMTYpLGlzKGUuYmIsMTcpLHNjKGUuYmIpLHNjKGUuYmIpLGUuZWI9cWMoZSwxNiksU3MoZS5lYiwyKSxTcyhlLmViLDMpLFNzKGUuZWIsNCksU3MoZS5lYiw1KSxTcyhlLmViLDYpLFNzKGUuZWIsNyksaXMoZS5lYiw4KSxpcyhlLmViLDkpLGUuYWI9cWMoZSwxNyksU3MoZS5hYiwwKSxTcyhlLmFiLDEpLGUuSD1xYyhlLDE4KSxpcyhlLkgsMCksaXMoZS5ILDEpLGlzKGUuSCwyKSxpcyhlLkgsMyksaXMoZS5ILDQpLGlzKGUuSCw1KSxzYyhlLkgpLGUuZGI9cWMoZSwxOSksaXMoZS5kYiwyKSxlLmM9VGkoZSwyMCksZS5kPVRpKGUsMjEpLGUuZT1UaShlLDIyKSxlLmY9VGkoZSwyMyksZS5pPVRpKGUsMjQpLGUuZz1UaShlLDI1KSxlLmo9VGkoZSwyNiksZS5rPVRpKGUsMjcpLGUubj1UaShlLDI4KSxlLnI9VGkoZSwyOSksZS5zPVRpKGUsMzApLGUudD1UaShlLDMxKSxlLnU9VGkoZSwzMiksZS5mYj1UaShlLDMzKSxlLkE9VGkoZSwzNCksZS5DPVRpKGUsMzUpLGUuRD1UaShlLDM2KSxlLkY9VGkoZSwzNyksZS5HPVRpKGUsMzgpLGUuST1UaShlLDM5KSxlLko9VGkoZSw0MCksZS5MPVRpKGUsNDEpLGUuTT1UaShlLDQyKSxlLk49VGkoZSw0MyksZS5PPVRpKGUsNDQpLGUuUD1UaShlLDQ1KSxlLlg9VGkoZSw0NiksZS5ZPVRpKGUsNDcpLGUuWj1UaShlLDQ4KSxlLiQ9VGkoZSw0OSksZS5fPVRpKGUsNTApLGUuY2I9VGkoZSw1MSksZS5LPVRpKGUsNTIpKX1mdW5jdGlvbiBKSW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyO2ZvcihmPW5ldyBvcyxvdD1sKFEobiwoTnQoKSxSaCkpLDg4KSxKPTAsS2EoZiwoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkpO2YuYiE9MDspQz1sKGYuYj09MD9udWxsOihtcihmLmIhPTApLGFmKGYsZi5hLmEpKSwyNyksRT1kcyhDKSwocWUoYXQoRSx5ZykpIT09cWUoKEVkKCksRTIpKXx8cWUoYXQoRSxkdikpPT09cWUoKGwyKCksQlQpKXx8cWUoYXQoRSxkdikpPT09cWUoKGwyKCksUFQpKXx8UnQoQnQoYXQoRSxmMykpKXx8cWUoYXQoRSxnNCkpIT09cWUoKEttKCksYzQpKXx8cWUoYXQoRSx6YikpPT09cWUoKE5mKCksdjMpKXx8cWUoYXQoRSx6YikpPT09cWUoKE5mKCkseDQpKXx8cWUoYXQoRSxwdikpPT09cWUoKHAyKCksV1QpKXx8cWUoYXQoRSxwdikpPT09cWUoKHAyKCksWVQpKSkmJiFSdChCdChhdChDLGZXKSkpJiZIaShDLChmdCgpLEtpKSxwdChKKyspKSxmZT0hUnQoQnQoYXQoQyxtdikpKSxmZSYmKEI9KCFDLmEmJihDLmE9bmV3IG50KEFpLEMsMTAsMTEpKSxDLmEpLmkhPTAsVj1feG4oQyksej1xZShhdChDLHA0KSk9PT1xZSgocnAoKSxBMikpLHVyPSFQMShDLChwaSgpLGVDKSl8fFN1dChlaShhdChDLGVDKSkpLCRlPW51bGwsdXImJnomJihCfHxWKSYmKCRlPVBtdChDKSxydCgkZSxSaCxvdCksbnMoJGUsQ0IpJiZOSmUobmV3IEQ4ZSh6ZShHZShRKCRlLENCKSkpKSwkZSksbChhdChDLGJ2KSwxODEpLmdjKCkhPTAmJihMPSRlLElzKG5ldyBibihudWxsLCghQy5jJiYoQy5jPW5ldyBudChIbCxDLDksOSkpLG5ldyBrbihDLmMsMTYpKSksbmV3IHpXZShMKSksX2J0KEMsJGUpKSksU3Q9bixjbj1sKGNyKGUuYSxkcyhDKSksMTApLGNuJiYoU3Q9Y24uZSksTWU9Y3d0KGUsQyxTdCksJGUmJihNZS5lPSRlLCRlLmU9TWUsS2EoZiwoIUMuYSYmKEMuYT1uZXcgbnQoQWksQywxMCwxMSkpLEMuYSkpKSk7Zm9yKEo9MCxDcyhmLHQsZi5jLmIsZi5jKTtmLmIhPTA7KXtmb3Iobz1sKGYuYj09MD9udWxsOihtcihmLmIhPTApLGFmKGYsZi5hLmEpKSwyNyksdz1uZXcgb3IoKCFvLmImJihvLmI9bmV3IG50KGpzLG8sMTIsMykpLG8uYikpO3cuZSE9dy5pLmdjKCk7KWc9bChncih3KSw3NCksZW10KGcpLChxZShhdCh0LHlnKSkhPT1xZSgoRWQoKSxFMikpfHxxZShhdCh0LGR2KSk9PT1xZSgobDIoKSxCVCkpfHxxZShhdCh0LGR2KSk9PT1xZSgobDIoKSxQVCkpfHxSdChCdChhdCh0LGYzKSkpfHxxZShhdCh0LGc0KSkhPT1xZSgoS20oKSxjNCkpfHxxZShhdCh0LHpiKSk9PT1xZSgoTmYoKSx2MykpfHxxZShhdCh0LHpiKSk9PT1xZSgoTmYoKSx4NCkpfHxxZShhdCh0LHB2KSk9PT1xZSgocDIoKSxXVCkpfHxxZShhdCh0LHB2KSk9PT1xZSgocDIoKSxZVCkpKSYmSGkoZywoZnQoKSxLaSkscHQoSisrKSksQm49YmMobChPZSgoIWcuYiYmKGcuYj1uZXcgTG4oX3IsZyw0LDcpKSxnLmIpLDApLDg0KSksam49YmMobChPZSgoIWcuYyYmKGcuYz1uZXcgTG4oX3IsZyw1LDgpKSxnLmMpLDApLDg0KSksIShSdChCdChhdChnLG12KSkpfHxSdChCdChhdChCbixtdikpKXx8UnQoQnQoYXQoam4sbXYpKSkpJiYodGU9cXcoZykmJlJ0KEJ0KGF0KEJuLGI0KSkpJiZSdChCdChhdChnLGd2KSkpLFplPW8sdGV8fEx5KGpuLEJuKT9aZT1CbjpMeShCbixqbikmJihaZT1qbiksU3Q9bixjbj1sKGNyKGUuYSxaZSksMTApLGNuJiYoU3Q9Y24uZSksVGU9V2tlKGUsZyxaZSxTdCkscnQoVGUsKGZ0KCksUkxlKSxKQ24oZSxnLHQsbikpKTtpZih6PXFlKGF0KG8scDQpKT09PXFlKChycCgpLEEyKSkseilmb3IoYT1uZXcgb3IoKCFvLmEmJihvLmE9bmV3IG50KEFpLG8sMTAsMTEpKSxvLmEpKTthLmUhPWEuaS5nYygpOylyPWwoZ3IoYSksMjcpLHVyPSFQMShyLChwaSgpLGVDKSl8fFN1dChlaShhdChyLGVDKSkpLGFuPXFlKGF0KHIscDQpKT09PXFlKEEyKSx1ciYmYW4mJkNzKGYscixmLmMuYixmLmMpfX1mdW5jdGlvbiBmdCgpe2Z0PVU7dmFyIGUsdDt6aT1uZXcgVWkoTkVlKSxSTGU9bmV3IFVpKCJjb29yZGluYXRlT3JpZ2luIiksSzFlPW5ldyBVaSgicHJvY2Vzc29ycyIpLEZMZT1uZXcgdnMoImNvbXBvdW5kTm9kZSIsKEhuKCksITEpKSx4Qj1uZXcgdnMoImluc2lkZUNvbm5lY3Rpb25zIiwhMSkscUxlPW5ldyBVaSgib3JpZ2luYWxCZW5kcG9pbnRzIiksSExlPW5ldyBVaSgib3JpZ2luYWxEdW1teU5vZGVQb3NpdGlvbiIpLFZMZT1uZXcgVWkoIm9yaWdpbmFsTGFiZWxFZGdlIiksV0w9bmV3IFVpKCJyZXByZXNlbnRlZExhYmVscyIpLEtMPW5ldyBVaSgiZW5kTGFiZWxzIiksS3g9bmV3IFVpKCJlbmRMYWJlbC5vcmlnaW4iKSxZeD1uZXcgdnMoImxhYmVsU2lkZSIsKEloKCksZUYpKSxSNj1uZXcgdnMoIm1heEVkZ2VUaGlja25lc3MiLDApLFcxPW5ldyB2cygicmV2ZXJzZWQiLCExKSxYeD1uZXcgVWkoQzN0KSxvMT1uZXcgdnMoImxvbmdFZGdlU291cmNlIixudWxsKSwkZj1uZXcgdnMoImxvbmdFZGdlVGFyZ2V0IixudWxsKSxmND1uZXcgdnMoImxvbmdFZGdlSGFzTGFiZWxEdW1taWVzIiwhMSksa0I9bmV3IHZzKCJsb25nRWRnZUJlZm9yZUxhYmVsRHVtbXkiLCExKSxzVz1uZXcgdnMoImVkZ2VDb25zdHJhaW50IiwoVm0oKSxNMWUpKSx1Mz1uZXcgVWkoImluTGF5ZXJMYXlvdXRVbml0IiksaHY9bmV3IHZzKCJpbkxheWVyQ29uc3RyYWludCIsKGVwKCksd0IpKSxXeD1uZXcgdnMoImluTGF5ZXJTdWNjZXNzb3JDb25zdHJhaW50IixuZXcgYnQpLHpMZT1uZXcgdnMoImluTGF5ZXJTdWNjZXNzb3JDb25zdHJhaW50QmV0d2Vlbk5vbkR1bW1pZXMiLCExKSxqbD1uZXcgVWkoInBvcnREdW1teSIpLGlXPW5ldyB2cygiY3Jvc3NpbmdIaW50IixwdCgwKSksTHU9bmV3IHZzKCJncmFwaFByb3BlcnRpZXMiLCh0PWwoSzAoRjFlKSw5KSxuZXcgWmgodCxsKGMwKHQsdC5sZW5ndGgpLDkpLDApKSksV2M9bmV3IHZzKCJleHRlcm5hbFBvcnRTaWRlIiwoQ3QoKSxQYykpLCRMZT1uZXcgdnMoImV4dGVybmFsUG9ydFNpemUiLG5ldyBxYSkscTFlPW5ldyBVaSgiZXh0ZXJuYWxQb3J0UmVwbGFjZWREdW1taWVzIiksYVc9bmV3IFVpKCJleHRlcm5hbFBvcnRSZXBsYWNlZER1bW15IikscHA9bmV3IHZzKCJleHRlcm5hbFBvcnRDb25uZWN0aW9ucyIsKGU9bChLMChPbyksOSksbmV3IFpoKGUsbChjMChlLGUubGVuZ3RoKSw5KSwwKSkpLGwzPW5ldyB2cyhiM3QsMCksQkxlPW5ldyBVaSgiYmFyeWNlbnRlckFzc29jaWF0ZXMiKSxReD1uZXcgVWkoIlRvcFNpZGVDb21tZW50cyIpLEd4PW5ldyBVaSgiQm90dG9tU2lkZUNvbW1lbnRzIiksclc9bmV3IFVpKCJDb21tZW50Q29ubmVjdGlvblBvcnQiKSxWMWU9bmV3IHZzKCJpbnB1dENvbGxlY3QiLCExKSxHMWU9bmV3IHZzKCJvdXRwdXRDb2xsZWN0IiwhMSkseUI9bmV3IHZzKCJjeWNsaWMiLCExKSxqTGU9bmV3IFVpKCJjcm9zc0hpZXJhcmNoeU1hcCIpLFkxZT1uZXcgVWkoInRhcmdldE9mZnNldCIpLG5ldyB2cygic3BsaW5lTGFiZWxTaXplIixuZXcgcWEpLCQ2PW5ldyBVaSgic3BhY2luZ3MiKSxvVz1uZXcgdnMoInBhcnRpdGlvbkNvbnN0cmFpbnQiLCExKSxjMz1uZXcgVWkoImJyZWFraW5nUG9pbnQuaW5mbyIpLEtMZT1uZXcgVWkoInNwbGluZXMuc3Vydml2aW5nRWRnZSIpLGZ2PW5ldyBVaSgic3BsaW5lcy5yb3V0ZS5zdGFydCIpLHo2PW5ldyBVaSgic3BsaW5lcy5lZGdlQ2hhaW4iKSxHTGU9bmV3IFVpKCJvcmlnaW5hbFBvcnRDb25zdHJhaW50cyIpLGgzPW5ldyBVaSgic2VsZkxvb3BIb2xkZXIiKSx6VD1uZXcgVWkoInNwbGluZXMubnNQb3J0WSIpLEtpPW5ldyBVaSgibW9kZWxPcmRlciIpLFUxZT1uZXcgVWkoImxvbmdFZGdlVGFyZ2V0Tm9kZSIpLGpiPW5ldyB2cyhRM3QsITEpLGo2PW5ldyB2cyhRM3QsITEpLEgxZT1uZXcgVWkoImxheWVyQ29uc3RyYWludHMuaGlkZGVuTm9kZXMiKSxVTGU9bmV3IFVpKCJsYXllckNvbnN0cmFpbnRzLm9wcG9zaWRlUG9ydCIpLFcxZT1uZXcgVWkoInRhcmdldE5vZGUubW9kZWxPcmRlciIpfWZ1bmN0aW9uIFpJbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWO2ZvcihMPVJyKGUuYiwwKTtMLmIhPUwuZC5jOylpZihDPWwoQnIoTCksNDApLCF2bihDLmMsREcpKWZvcihvPWwoeWMobmV3IGJuKG51bGwsbmV3IGtuKGNFbihDLGUpLDE2KSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsWyhGbCgpLEVjKV0pKSksMTUpLHQ9PShKcygpLHVjKXx8dD09dmM/by5qZChuZXcgbm5lKTpvLmpkKG5ldyBvJCksVj1vLmdjKCksYT0wO2E8VjthKyspZj1WPT0xPy41OigxK2EpLyhWKzEpLHQ9PXVjPyhFPXplKEdlKFEoQywoUWkoKSxrMCkpKSksQy5lLmErQy5mLmErcjxFP2tvKGwoby5YYihhKSw2NSkuYSxuZXcgbHQoRStuLEMuZS5iK0MuZi5iKmYpKTpsKG8uWGIoYSksNjUpLmEuYj4wJiYoZz1sKG8wKGwoby5YYihhKSw2NSkuYSksOCkuYSxCPUMuZS5hK0MuZi5hLzIsdz1sKG8wKGwoby5YYihhKSw2NSkuYSksOCkuYix6PUMuZS5iK0MuZi5iLzIscj4wJiZiLk1hdGguYWJzKHcteikvKGIuTWF0aC5hYnMoZy1CKS80MCk+NTAmJih6Pnc/a28obChvLlhiKGEpLDY1KS5hLG5ldyBsdChDLmUuYStDLmYuYStyLzUuMyxDLmUuYitDLmYuYipmLXIvMikpOmtvKGwoby5YYihhKSw2NSkuYSxuZXcgbHQoQy5lLmErQy5mLmErci81LjMsQy5lLmIrQy5mLmIqZityLzIpKSkpLGtvKGwoby5YYihhKSw2NSkuYSxuZXcgbHQoQy5lLmErQy5mLmEsQy5lLmIrQy5mLmIqZikpKTp0PT12Yz8oRT16ZShHZShRKEMsKFFpKCksYzEpKSkpLEMuZS5hLXI+RT9rbyhsKG8uWGIoYSksNjUpLmEsbmV3IGx0KEUtbixDLmUuYitDLmYuYipmKSk6bChvLlhiKGEpLDY1KS5hLmI+MCYmKGc9bChvMChsKG8uWGIoYSksNjUpLmEpLDgpLmEsQj1DLmUuYStDLmYuYS8yLHc9bChvMChsKG8uWGIoYSksNjUpLmEpLDgpLmIsej1DLmUuYitDLmYuYi8yLHI+MCYmYi5NYXRoLmFicyh3LXopLyhiLk1hdGguYWJzKGctQikvNDApPjUwJiYoej53P2tvKGwoby5YYihhKSw2NSkuYSxuZXcgbHQoQy5lLmEtci81LjMsQy5lLmIrQy5mLmIqZi1yLzIpKTprbyhsKG8uWGIoYSksNjUpLmEsbmV3IGx0KEMuZS5hLXIvNS4zLEMuZS5iK0MuZi5iKmYrci8yKSkpKSxrbyhsKG8uWGIoYSksNjUpLmEsbmV3IGx0KEMuZS5hLEMuZS5iK0MuZi5iKmYpKSk6dD09d2Y/KEU9emUoR2UoUShDLChRaSgpLGswKSkpKSxDLmUuYitDLmYuYityPEU/a28obChvLlhiKGEpLDY1KS5hLG5ldyBsdChDLmUuYStDLmYuYSpmLEUrbikpOmwoby5YYihhKSw2NSkuYS5iPjAmJihnPWwobzAobChvLlhiKGEpLDY1KS5hKSw4KS5hLEI9Qy5lLmErQy5mLmEvMix3PWwobzAobChvLlhiKGEpLDY1KS5hKSw4KS5iLHo9Qy5lLmIrQy5mLmIvMixyPjAmJmIuTWF0aC5hYnMoZy1CKS8oYi5NYXRoLmFicyh3LXopLzQwKT41MCYmKEI+Zz9rbyhsKG8uWGIoYSksNjUpLmEsbmV3IGx0KEMuZS5hK0MuZi5hKmYtci8yLEMuZS5iK3IvNS4zK0MuZi5iKSk6a28obChvLlhiKGEpLDY1KS5hLG5ldyBsdChDLmUuYStDLmYuYSpmK3IvMixDLmUuYityLzUuMytDLmYuYikpKSksa28obChvLlhiKGEpLDY1KS5hLG5ldyBsdChDLmUuYStDLmYuYSpmLEMuZS5iK0MuZi5iKSkpOihFPXplKEdlKFEoQywoUWkoKSxjMSkpKSksQzB0KGwoby5YYihhKSw2NSksZSk/a28obChvLlhiKGEpLDY1KS5hLG5ldyBsdChDLmUuYStDLmYuYSpmLGwobzAobChvLlhiKGEpLDY1KS5hKSw4KS5iKSk6Qy5lLmItcj5FP2tvKGwoby5YYihhKSw2NSkuYSxuZXcgbHQoQy5lLmErQy5mLmEqZixFLW4pKTpsKG8uWGIoYSksNjUpLmEuYj4wJiYoZz1sKG8wKGwoby5YYihhKSw2NSkuYSksOCkuYSxCPUMuZS5hK0MuZi5hLzIsdz1sKG8wKGwoby5YYihhKSw2NSkuYSksOCkuYix6PUMuZS5iK0MuZi5iLzIscj4wJiZiLk1hdGguYWJzKGctQikvKGIuTWF0aC5hYnMody16KS80MCk+NTAmJihCPmc/a28obChvLlhiKGEpLDY1KS5hLG5ldyBsdChDLmUuYStDLmYuYSpmLXIvMixDLmUuYi1yLzUuMykpOmtvKGwoby5YYihhKSw2NSkuYSxuZXcgbHQoQy5lLmErQy5mLmEqZityLzIsQy5lLmItci81LjMpKSkpLGtvKGwoby5YYihhKSw2NSkuYSxuZXcgbHQoQy5lLmErQy5mLmEqZixDLmUuYikpKX1mdW5jdGlvbiBwaSgpe3BpPVU7dmFyIGUsdDtlQz1uZXcgVWkoQnl0KSxhNz1uZXcgVWkoRnl0KSxlTmU9KG9nKCksU2dlKSxBU3Q9bmV3IHBuKHFUZSxlTmUpLFo2PW5ldyBwbihPeCxudWxsKSxMU3Q9bmV3IFVpKHRTZSksbk5lPShZbSgpLHJzKExnZSxoZShsZShNZ2UsMSksaXQsMjk4LDAsW0FnZV0pKSksVUI9bmV3IHBuKFNHLG5OZSksR0I9bmV3IHBuKFZQLChIbigpLCExKSksck5lPShKcygpLEoxKSx4dj1uZXcgcG4oZ2ZlLHJOZSksYU5lPShpcCgpLEhnZSksc05lPW5ldyBwbihIUCxhTmUpLElTdD1uZXcgcG4oWkNlLCExKSx1TmU9KHJwKCksb1kpLG43PW5ldyBwbihDRyx1TmUpLHZOZT1uZXcgbHcoMTIpLF8yPW5ldyBwbihYdyx2TmUpLFdCPW5ldyBwbihoTCwhMSksTmdlPW5ldyBwbihBRywhMSksWUI9bmV3IHBuKGZMLCExKSxFTmU9KFJhKCksV2IpLF9NPW5ldyBwbihOaGUsRU5lKSxuOT1uZXcgVWkoX0cpLFhCPW5ldyBVaShOUCksemdlPW5ldyBVaShvRykscWdlPW5ldyBVaShsTCksbE5lPW5ldyBibCx4Mz1uZXcgcG4oWlRlLGxOZSksRFN0PW5ldyBwbihuQ2UsITEpLE9TdD1uZXcgcG4ockNlLCExKSxoTmU9bmV3IHNfLHRDPW5ldyBwbihzQ2UsaE5lKSxyWT1uZXcgcG4oJFRlLCExKSxGU3Q9bmV3IHBuKFJ5dCwxKSx0Nz1uZXcgVWkoanl0KSxlNz1uZXcgVWkoJHl0KSxBTT1uZXcgcG4oUFAsITEpLG5ldyBwbih6eXQsITApLHB0KDApLG5ldyBwbihxeXQscHQoMTAwKSksbmV3IHBuKEh5dCwhMSkscHQoMCksbmV3IHBuKFZ5dCxwdCg0ZTMpKSxwdCgwKSxuZXcgcG4oVXl0LHB0KDQwMCkpLG5ldyBwbihHeXQsITEpLG5ldyBwbihLeXQsITEpLG5ldyBwbihXeXQsITApLG5ldyBwbihZeXQsITEpLHROZT0oVlYoKSxLZ2UpLE1TdD1uZXcgcG4oZVNlLHROZSksUlN0PW5ldyBwbihMVGUsMTApLGpTdD1uZXcgcG4oTVRlLDEwKSxfTmU9bmV3IHBuKF9oZSwyMCksJFN0PW5ldyBwbihEVGUsMTApLEFOZT1uZXcgcG4oT2hlLDIpLExOZT1uZXcgcG4oZGZlLDEwKSxNTmU9bmV3IHBuKElUZSwwKSxpWT1uZXcgcG4oUFRlLDUpLEROZT1uZXcgcG4oT1RlLDEpLElOZT1uZXcgcG4oTlRlLDEpLEV2PW5ldyBwbihKeSwyMCkselN0PW5ldyBwbihCVGUsMTApLFBOZT1uZXcgcG4oRlRlLDEwKSxyOT1uZXcgVWkoUlRlKSxOTmU9bmV3IG5udCxPTmU9bmV3IHBuKGFDZSxOTmUpLFBTdD1uZXcgVWkoYmZlKSx3TmU9ITEsTlN0PW5ldyBwbihwZmUsd05lKSxkTmU9bmV3IGx3KDUpLGZOZT1uZXcgcG4oVVRlLGROZSksZ05lPShxeSgpLHQ9bChLMChLbyksOSksbmV3IFpoKHQsbChjMCh0LHQubGVuZ3RoKSw5KSwwKSkscjc9bmV3IHBuKGZULGdOZSkseE5lPSh0NigpLEtiKSx5TmU9bmV3IHBuKFdUZSx4TmUpLEJnZT1uZXcgVWkoWVRlKSxGZ2U9bmV3IFVpKFhUZSksUmdlPW5ldyBVaShRVGUpLFBnZT1uZXcgVWkoSlRlKSxwTmU9KGU9bChLMChCTSksOSksbmV3IFpoKGUsbChjMChlLGUubGVuZ3RoKSw5KSwwKSksa3Y9bmV3IHBuKHg2LHBOZSksbU5lPXVuKChabCgpLGFDKSksVWI9bmV3IHBuKE54LG1OZSksYk5lPW5ldyBsdCgwLDApLGk3PW5ldyBwbihQeCxiTmUpLEM0PW5ldyBwbihoVCwhMSksaU5lPShGMSgpLG5DKSxJZ2U9bmV3IHBuKGVDZSxpTmUpLERnZT1uZXcgcG4oY0csITEpLHB0KDEpLG5ldyBwbihYeXQsbnVsbCksa05lPW5ldyBVaShpQ2UpLGpnZT1uZXcgVWkodENlKSxTTmU9KEN0KCksUGMpLHM3PW5ldyBwbih6VGUsU05lKSxyaD1uZXcgVWkoalRlKSxUTmU9KFJsKCksdW4oWWIpKSxTND1uZXcgcG4oZFQsVE5lKSwkZ2U9bmV3IHBuKEdUZSwhMSksQ05lPW5ldyBwbihLVGUsITApLGFZPW5ldyBwbihCUCwxKSxCTmU9bmV3IHBuKG5TZSxudWxsKSxRQj1uZXcgcG4oRlAsMTUwKSxzWT1uZXcgcG4oUlAsMS40MTQpLGk5PW5ldyBwbihRdyxudWxsKSxxU3Q9bmV3IHBuKHJTZSwxKSxLQj1uZXcgcG4oSFRlLCExKSxPZ2U9bmV3IHBuKFZUZSwhMSksb05lPW5ldyBwbihBaGUsMSksY05lPSh2VSgpLFVnZSksbmV3IHBuKFF5dCxjTmUpLEJTdD0hMCxWU3Q9KGR4KCksTDQpLFVTdD1MNCxIU3Q9TDR9ZnVuY3Rpb24gdm8oKXt2bz1VLFBBZT1uZXcgV3MoIkRJUkVDVElPTl9QUkVQUk9DRVNTT1IiLDApLElBZT1uZXcgV3MoIkNPTU1FTlRfUFJFUFJPQ0VTU09SIiwxKSxENj1uZXcgV3MoIkVER0VfQU5EX0xBWUVSX0NPTlNUUkFJTlRfRURHRV9SRVZFUlNFUiIsMiksZjFlPW5ldyBXcygiSU5URVJBQ1RJVkVfRVhURVJOQUxfUE9SVF9QT1NJVElPTkVSIiwzKSxlTGU9bmV3IFdzKCJQQVJUSVRJT05fUFJFUFJPQ0VTU09SIiw0KSxESz1uZXcgV3MoIkxBQkVMX0RVTU1ZX0lOU0VSVEVSIiw1KSx6Sz1uZXcgV3MoIlNFTEZfTE9PUF9QUkVQUk9DRVNTT1IiLDYpLGw0PW5ldyBXcygiTEFZRVJfQ09OU1RSQUlOVF9QUkVQUk9DRVNTT1IiLDcpLEpBZT1uZXcgV3MoIlBBUlRJVElPTl9NSURQUk9DRVNTT1IiLDgpLEhBZT1uZXcgV3MoIkhJR0hfREVHUkVFX05PREVfTEFZRVJfUFJPQ0VTU09SIiw5KSxYQWU9bmV3IFdzKCJOT0RFX1BST01PVElPTiIsMTApLHU0PW5ldyBXcygiTEFZRVJfQ09OU1RSQUlOVF9QT1NUUFJPQ0VTU09SIiwxMSksWkFlPW5ldyBXcygiUEFSVElUSU9OX1BPU1RQUk9DRVNTT1IiLDEyKSwkQWU9bmV3IFdzKCJISUVSQVJDSElDQUxfUE9SVF9DT05TVFJBSU5UX1BST0NFU1NPUiIsMTMpLHRMZT1uZXcgV3MoIlNFTUlfSU5URVJBQ1RJVkVfQ1JPU1NNSU5fUFJPQ0VTU09SIiwxNCksU0FlPW5ldyBXcygiQlJFQUtJTkdfUE9JTlRfSU5TRVJURVIiLDE1KSxQSz1uZXcgV3MoIkxPTkdfRURHRV9TUExJVFRFUiIsMTYpLGQxZT1uZXcgV3MoIlBPUlRfU0lERV9QUk9DRVNTT1IiLDE3KSxMSz1uZXcgV3MoIklOVkVSVEVEX1BPUlRfUFJPQ0VTU09SIiwxOCksUks9bmV3IFdzKCJQT1JUX0xJU1RfU09SVEVSIiwxOSksckxlPW5ldyBXcygiU09SVF9CWV9JTlBVVF9PUkRFUl9PRl9NT0RFTCIsMjApLEZLPW5ldyBXcygiTk9SVEhfU09VVEhfUE9SVF9QUkVQUk9DRVNTT1IiLDIxKSxfQWU9bmV3IFdzKCJCUkVBS0lOR19QT0lOVF9QUk9DRVNTT1IiLDIyKSxRQWU9bmV3IFdzKEgzdCwyMyksaUxlPW5ldyBXcyhWM3QsMjQpLGpLPW5ldyBXcygiU0VMRl9MT09QX1BPUlRfUkVTVE9SRVIiLDI1KSxuTGU9bmV3IFdzKCJTSU5HTEVfRURHRV9HUkFQSF9XUkFQUEVSIiwyNiksTUs9bmV3IFdzKCJJTl9MQVlFUl9DT05TVFJBSU5UX1BST0NFU1NPUiIsMjcpLEZBZT1uZXcgV3MoIkVORF9OT0RFX1BPUlRfTEFCRUxfTUFOQUdFTUVOVF9QUk9DRVNTT1IiLDI4KSxXQWU9bmV3IFdzKCJMQUJFTF9BTkRfTk9ERV9TSVpFX1BST0NFU1NPUiIsMjkpLEtBZT1uZXcgV3MoIklOTkVSTU9TVF9OT0RFX01BUkdJTl9DQUxDVUxBVE9SIiwzMCkscUs9bmV3IFdzKCJTRUxGX0xPT1BfUk9VVEVSIiwzMSksTUFlPW5ldyBXcygiQ09NTUVOVF9OT0RFX01BUkdJTl9DQUxDVUxBVE9SIiwzMiksQUs9bmV3IFdzKCJFTkRfTEFCRUxfUFJFUFJPQ0VTU09SIiwzMyksT0s9bmV3IFdzKCJMQUJFTF9EVU1NWV9TV0lUQ0hFUiIsMzQpLExBZT1uZXcgV3MoIkNFTlRFUl9MQUJFTF9NQU5BR0VNRU5UX1BST0NFU1NPUiIsMzUpLExUPW5ldyBXcygiTEFCRUxfU0lERV9TRUxFQ1RPUiIsMzYpLFVBZT1uZXcgV3MoIkhZUEVSRURHRV9EVU1NWV9NRVJHRVIiLDM3KSx6QWU9bmV3IFdzKCJISUVSQVJDSElDQUxfUE9SVF9EVU1NWV9TSVpFX1BST0NFU1NPUiIsMzgpLFlBZT1uZXcgV3MoIkxBWUVSX1NJWkVfQU5EX0dSQVBIX0hFSUdIVF9DQUxDVUxBVE9SIiwzOSksekw9bmV3IFdzKCJISUVSQVJDSElDQUxfUE9SVF9QT1NJVElPTl9QUk9DRVNTT1IiLDQwKSxPQWU9bmV3IFdzKCJDT05TVFJBSU5UU19QT1NUUFJPQ0VTU09SIiw0MSksREFlPW5ldyBXcygiQ09NTUVOVF9QT1NUUFJPQ0VTU09SIiw0MiksR0FlPW5ldyBXcygiSFlQRVJOT0RFX1BST0NFU1NPUiIsNDMpLHFBZT1uZXcgV3MoIkhJRVJBUkNISUNBTF9QT1JUX09SVEhPR09OQUxfRURHRV9ST1VURVIiLDQ0KSxOSz1uZXcgV3MoIkxPTkdfRURHRV9KT0lORVIiLDQ1KSwkSz1uZXcgV3MoIlNFTEZfTE9PUF9QT1NUUFJPQ0VTU09SIiw0NiksQUFlPW5ldyBXcygiQlJFQUtJTkdfUE9JTlRfUkVNT1ZFUiIsNDcpLEJLPW5ldyBXcygiTk9SVEhfU09VVEhfUE9SVF9QT1NUUFJPQ0VTU09SIiw0OCksVkFlPW5ldyBXcygiSE9SSVpPTlRBTF9DT01QQUNUT1IiLDQ5KSxJSz1uZXcgV3MoIkxBQkVMX0RVTU1ZX1JFTU9WRVIiLDUwKSxSQWU9bmV3IFdzKCJGSU5BTF9TUExJTkVfQkVORFBPSU5UU19DQUxDVUxBVE9SIiw1MSksQkFlPW5ldyBXcygiRU5EX0xBQkVMX1NPUlRFUiIsNTIpLGdCPW5ldyBXcygiUkVWRVJTRURfRURHRV9SRVNUT1JFUiIsNTMpLF9LPW5ldyBXcygiRU5EX0xBQkVMX1BPU1RQUk9DRVNTT1IiLDU0KSxqQWU9bmV3IFdzKCJISUVSQVJDSElDQUxfTk9ERV9SRVNJWkVSIiw1NSksTkFlPW5ldyBXcygiRElSRUNUSU9OX1BPU1RQUk9DRVNTT1IiLDU2KX1mdW5jdGlvbiBZa2UoKXtZa2U9VSxpTWU9KHBOKCksWEspLHI5dD1uZXcgcG4oVkVlLGlNZSkscDl0PW5ldyBwbihVRWUsKEhuKCksITEpKSxsTWU9KHpIKCksejFlKSx5OXQ9bmV3IHBuKGZHLGxNZSksUDl0PW5ldyBwbihHRWUsITEpLEI5dD1uZXcgcG4oS0VlLCEwKSxMeHQ9bmV3IHBuKFdFZSwhMSksdk1lPShkTigpLGtkZSksUTl0PW5ldyBwbihZRWUsdk1lKSxwdCgxKSxza3Q9bmV3IHBuKFhFZSxwdCg3KSksYWt0PW5ldyBwbihRRWUsITEpLGI5dD1uZXcgcG4oSkVlLCExKSxyTWU9KGwyKCksQTFlKSxuOXQ9bmV3IHBuKHpoZSxyTWUpLGRNZT0ocDIoKSxnZGUpLE45dD1uZXcgcG4ocVAsZE1lKSxoTWU9KGhmKCksRUIpLFM5dD1uZXcgcG4oWkVlLGhNZSkscHQoLTEpLEM5dD1uZXcgcG4oZVRlLG51bGwpLHB0KC0xKSxfOXQ9bmV3IHBuKHRUZSxwdCgtMSkpLHB0KC0xKSxBOXQ9bmV3IHBuKHFoZSxwdCg0KSkscHQoLTEpLE05dD1uZXcgcG4oSGhlLHB0KDIpKSxmTWU9KE5mKCksQVcpLE85dD1uZXcgcG4oVmhlLGZNZSkscHQoMCksSTl0PW5ldyBwbihVaGUscHQoMCkpLEU5dD1uZXcgcG4oR2hlLHB0KElpKSksbk1lPShkQSgpLEhMKSx0OXQ9bmV3IHBuKHBMLG5NZSksJHh0PW5ldyBwbihuVGUsITEpLEt4dD1uZXcgcG4oS2hlLC4xKSxaeHQ9bmV3IHBuKFdoZSwhMSksWXh0PW5ldyBwbihyVGUsbnVsbCksWHh0PW5ldyBwbihpVGUsbnVsbCkscHQoLTEpLFF4dD1uZXcgcG4oc1RlLG51bGwpLHB0KC0xKSxKeHQ9bmV3IHBuKGFUZSxwdCgtMSkpLHB0KDApLHp4dD1uZXcgcG4ob1RlLHB0KDQwKSksdE1lPSh2RSgpLGoxZSksVXh0PW5ldyBwbihZaGUsdE1lKSxlTWU9dkIscXh0PW5ldyBwbihkRyxlTWUpLG1NZT0oT0EoKSxyTSksWDl0PW5ldyBwbihrNixtTWUpLHo5dD1uZXcgVWkoZ0cpLGdNZT0oY04oKSxKSyksRjl0PW5ldyBwbihYaGUsZ01lKSxwTWU9KFdOKCksWkspLGo5dD1uZXcgcG4oUWhlLHBNZSksVjl0PW5ldyBwbihKaGUsLjMpLEc5dD1uZXcgVWkoWmhlKSxiTWU9KEJ5KCksX1cpLEs5dD1uZXcgcG4oZWZlLGJNZSksb01lPShMVigpLFRkZSksYzl0PW5ldyBwbihjVGUsb01lKSxjTWU9KHlBKCksU2RlKSx1OXQ9bmV3IHBuKHVUZSxjTWUpLHVNZT0oU0UoKSxhTSksbDl0PW5ldyBwbihwRyx1TWUpLGY5dD1uZXcgcG4oYkcsLjIpLGE5dD1uZXcgcG4odGZlLDIpLHRrdD1uZXcgcG4obFRlLG51bGwpLHJrdD1uZXcgcG4oaFRlLDEwKSxua3Q9bmV3IHBuKGZUZSwxMCksaWt0PW5ldyBwbihkVGUsMjApLHB0KDApLEo5dD1uZXcgcG4oZ1RlLHB0KDApKSxwdCgwKSxaOXQ9bmV3IHBuKHBUZSxwdCgwKSkscHQoMCksZWt0PW5ldyBwbihiVGUscHQoMCkpLE14dD1uZXcgcG4obmZlLCExKSxYTGU9KHpFKCksVkwpLEl4dD1uZXcgcG4obVRlLFhMZSksWUxlPShKSCgpLFMxZSksRHh0PW5ldyBwbih2VGUsWUxlKSx2OXQ9bmV3IHBuKG1HLCExKSxwdCgwKSxtOXQ9bmV3IHBuKHJmZSxwdCgxNikpLHB0KDApLHc5dD1uZXcgcG4oaWZlLHB0KDUpKSx4TWU9KE9WKCksTGRlKSxTa3Q9bmV3IHBuKGZwLHhNZSksb2t0PW5ldyBwbih2RywxMCksbGt0PW5ldyBwbih3RywxKSx5TWU9KHBWKCksWUspLG1rdD1uZXcgcG4oYkwseU1lKSxka3Q9bmV3IFVpKHNmZSksd01lPXB0KDEpLHB0KDApLHBrdD1uZXcgcG4oYWZlLHdNZSksa01lPShnVigpLEFkZSksTWt0PW5ldyBwbih5RyxrTWUpLF9rdD1uZXcgVWkoeEcpLGtrdD1uZXcgcG4oa0csITApLHlrdD1uZXcgcG4oRUcsMiksVGt0PW5ldyBwbihvZmUsITApLGFNZT0oeVUoKSxRSyksczl0PW5ldyBwbih3VGUsYU1lKSxzTWU9KHl4KCksT1QpLGk5dD1uZXcgcG4oeVRlLHNNZSksWkxlPShFZCgpLEUyKSxqeHQ9bmV3IHBuKFRHLFpMZSksUnh0PW5ldyBwbih4VGUsITEpLEZ4dD1uZXcgcG4oa1RlLCExKSxRTGU9KEttKCksYzQpLE94dD1uZXcgcG4oY2ZlLFFMZSksSkxlPShFQSgpLHBkZSksQnh0PW5ldyBwbihFVGUsSkxlKSxOeHQ9bmV3IHBuKHVmZSwwKSxQeHQ9bmV3IHBuKGxmZSwwKSxrOXQ9TDFlLHg5dD1tQixMOXQ9Q1csRDl0PUNXLFQ5dD1kZGUsV3h0PShycCgpLEEyKSxlOXQ9SEwsR3h0PUhMLEh4dD1ITCxWeHQ9QTIscTl0PWlNLEg5dD1yTSxSOXQ9ck0sJDl0PXJNLFU5dD13ZGUsWTl0PWlNLFc5dD1pTSxoOXQ9KGlwKCksczkpLGQ5dD1zOSxnOXQ9YU0sbzl0PUpCLGNrdD1YVCx1a3Q9azQsaGt0PVhULGZrdD1rNCx2a3Q9WFQsd2t0PWs0LGdrdD1fMWUsYmt0PVlLLERrdD1YVCxJa3Q9azQsQWt0PVhULExrdD1rNCxFa3Q9azQseGt0PWs0LENrdD1rNH1mdW5jdGlvbiBlT24oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyLG9pLHdzLFZsLGxjLEhoLGY3LFAyLEwwLE0wLF92LGg5LHJtLGY5LHFkLF9nLFMzLGQ5LGQ3LEhkLEF2LHlwLElBdCxzQmUsXzMsWU0sbHBlLGc5LFhNLEY0LFFNLGhwZSxPQXQ7Zm9yKHNCZT0wLG9pPXQsbGM9MCxQMj1vaS5sZW5ndGg7bGM8UDI7KytsYylmb3Ioam49b2lbbGNdLF9nPW5ldyBHKGpuLmopO19nLmE8X2cuYy5jLmxlbmd0aDspe2ZvcihxZD1sKHJlKF9nKSwxMiksZDk9MCxnPW5ldyBHKHFkLmcpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxOCksam4uYyE9Zi5kLmkuYyYmKytkOTtkOT4wJiYoZS5hW3FkLnBdPXNCZSsrKX1mb3IoWE09MCx3cz1uLEhoPTAsTDA9d3MubGVuZ3RoO0hoPEwwOysrSGgpe2Zvcihqbj13c1tIaF0sTTA9MCxfZz1uZXcgRyhqbi5qKTtfZy5hPF9nLmMuYy5sZW5ndGgmJihxZD1sKHJlKF9nKSwxMikscWQuaj09KEN0KCksUW4pKTspZm9yKGc9bmV3IEcocWQuZSk7Zy5hPGcuYy5jLmxlbmd0aDspaWYoZj1sKHJlKGcpLDE4KSxqbi5jIT1mLmMuaS5jKXsrK00wO2JyZWFrfWZvcihoOT0wLGQ3PW5ldyBVYShqbi5qLGpuLmouYy5sZW5ndGgpO2Q3LmI+MDspe2ZvcihxZD0obXIoZDcuYj4wKSxsKGQ3LmEuWGIoZDcuYz0tLWQ3LmIpLDEyKSksZDk9MCxnPW5ldyBHKHFkLmUpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxOCksam4uYyE9Zi5jLmkuYyYmKytkOTtkOT4wJiYocWQuaj09KEN0KCksUW4pPyhlLmFbcWQucF09WE0sKytYTSk6KGUuYVtxZC5wXT1YTStNMCtoOSwrK2g5KSl9WE0rPWg5fWZvcihTMz1uZXcgUHIsVj1uZXcgYmQsdXI9dCxWbD0wLGY3PXVyLmxlbmd0aDtWbDxmNzsrK1ZsKWZvcihqbj11cltWbF0sbHBlPW5ldyBHKGpuLmopO2xwZS5hPGxwZS5jLmMubGVuZ3RoOylmb3IoWU09bChyZShscGUpLDEyKSxnPW5ldyBHKFlNLmcpO2cuYTxnLmMuYy5sZW5ndGg7KWlmKGY9bChyZShnKSwxOCksUU09Zi5kLGpuLmMhPVFNLmkuYylpZihfMz1sKGhjKHpvKFMzLmYsWU0pKSw0NzgpLEY0PWwoaGMoem8oUzMuZixRTSkpLDQ3OCksIV8zJiYhRjQpej1uZXcgVXJ0LFYuYS56Yyh6LFYpLHZ0KHouYSxmKSx2dCh6LmQsWU0pLGp1KFMzLmYsWU0seiksdnQoei5kLFFNKSxqdShTMy5mLFFNLHopO2Vsc2UgaWYoIV8zKXZ0KEY0LmEsZiksdnQoRjQuZCxZTSksanUoUzMuZixZTSxGNCk7ZWxzZSBpZighRjQpdnQoXzMuYSxmKSx2dChfMy5kLFFNKSxqdShTMy5mLFFNLF8zKTtlbHNlIGlmKF8zPT1GNCl2dChfMy5hLGYpO2Vsc2V7Zm9yKHZ0KF8zLmEsZiksZjk9bmV3IEcoRjQuZCk7ZjkuYTxmOS5jLmMubGVuZ3RoOylybT1sKHJlKGY5KSwxMiksanUoUzMuZixybSxfMyk7cmEoXzMuYSxGNC5hKSxyYShfMy5kLEY0LmQpLFYuYS5CYyhGNCkhPW51bGx9Zm9yKEo9bChQQShWLFdlKFRPbix7MzoxLDQ6MSw1OjEsMjA0NToxfSw0NzgsVi5hLmdjKCksMCwxKSksMjA0NSksQm49dFswXS5jLElBdD1uWzBdLmMsQz1KLEw9MCxCPUMubGVuZ3RoO0w8QjsrK0wpZm9yKEU9Q1tMXSxFLmU9c0JlLEUuZj1YTSxfZz1uZXcgRyhFLmQpO19nLmE8X2cuYy5jLmxlbmd0aDspcWQ9bChyZShfZyksMTIpLEhkPWUuYVtxZC5wXSxxZC5pLmM9PUJuPyhIZDxFLmUmJihFLmU9SGQpLEhkPkUuYiYmKEUuYj1IZCkpOnFkLmkuYz09SUF0JiYoSGQ8RS5mJiYoRS5mPUhkKSxIZD5FLmMmJihFLmM9SGQpKTtmb3IobkUoSiwwLEoubGVuZ3RoLG51bGwpLGc5PVdlKFZyLGRpLDI4LEoubGVuZ3RoLDE1LDEpLHI9V2UoVnIsZGksMjgsWE0rMSwxNSwxKSxmZT0wO2ZlPEoubGVuZ3RoO2ZlKyspZzlbZmVdPUpbZmVdLmYscltnOVtmZV1dPTE7Zm9yKG89MCxUZT0wO1RlPHIubGVuZ3RoO1RlKyspcltUZV09PTE/cltUZV09bzotLW87Zm9yKEF2PTAsTWU9MDtNZTxnOS5sZW5ndGg7TWUrKylnOVtNZV0rPXJbZzlbTWVdXSxBdj1iLk1hdGgubWF4KEF2LGc5W01lXSsxKTtmb3Iodz0xO3c8QXY7KXcqPTI7Zm9yKE9BdD0yKnctMSx3LT0xLGhwZT1XZShWcixkaSwyOCxPQXQsMTUsMSksYT0wLGNuPTA7Y248ZzkubGVuZ3RoO2NuKyspZm9yKFN0PWc5W2NuXSt3LCsraHBlW1N0XTtTdD4wOylTdCUyPjAmJihhKz1ocGVbU3QrMV0pLFN0PShTdC0xKS8yfDAsKytocGVbU3RdO2Zvcihhbj1XZShNRXQsUm4sMzc0LEoubGVuZ3RoKjIsMCwxKSwkZT0wOyRlPEoubGVuZ3RoOyRlKyspYW5bMiokZV09bmV3IENIKEpbJGVdLEpbJGVdLmUsSlskZV0uYiwob0EoKSx1TSkpLGFuWzIqJGUrMV09bmV3IENIKEpbJGVdLEpbJGVdLmIsSlskZV0uZSxjTSk7Zm9yKG5FKGFuLDAsYW4ubGVuZ3RoLG51bGwpLF92PTAsWmU9MDtaZTxhbi5sZW5ndGg7WmUrKylzd2l0Y2goYW5bWmVdLmQuZyl7Y2FzZSAwOisrX3Y7YnJlYWs7Y2FzZSAxOi0tX3YsYSs9X3Z9Zm9yKHlwPVdlKE1FdCxSbiwzNzQsSi5sZW5ndGgqMiwwLDEpLG90PTA7b3Q8Si5sZW5ndGg7b3QrKyl5cFsyKm90XT1uZXcgQ0goSltvdF0sSltvdF0uZixKW290XS5jLChvQSgpLHVNKSkseXBbMipvdCsxXT1uZXcgQ0goSltvdF0sSltvdF0uYyxKW290XS5mLGNNKTtmb3IobkUoeXAsMCx5cC5sZW5ndGgsbnVsbCksX3Y9MCx0ZT0wO3RlPHlwLmxlbmd0aDt0ZSsrKXN3aXRjaCh5cFt0ZV0uZC5nKXtjYXNlIDA6KytfdjticmVhaztjYXNlIDE6LS1fdixhKz1fdn1yZXR1cm4gYX1mdW5jdGlvbiBEaSgpe0RpPVUsV009bmV3IFh2KDcpLFFQZT1uZXcgbmcoOCw5NCksbmV3IG5nKDgsNjQpLEpQZT1uZXcgbmcoOCwzNiksRUF0PW5ldyBuZyg4LDY1KSxUQXQ9bmV3IG5nKDgsMTIyKSxDQXQ9bmV3IG5nKDgsOTApLF9BdD1uZXcgbmcoOCw5OCksa0F0PW5ldyBuZyg4LDY2KSxTQXQ9bmV3IG5nKDgsNjApLEFBdD1uZXcgbmcoOCw2MiksWFBlPW5ldyBYdigxMSksTVk9bmV3IF9oKDQpLEV1KE1ZLDQ4LDU3KSxsQz1uZXcgX2goNCksRXUobEMsNDgsNTcpLEV1KGxDLDY1LDkwKSxFdShsQyw5NSw5NSksRXUobEMsOTcsMTIyKSxsOT1uZXcgX2goNCksRXUobDksOSw5KSxFdShsOSwxMCwxMCksRXUobDksMTIsMTIpLEV1KGw5LDEzLDEzKSxFdShsOSwzMiwzMiksWlBlPVV5KE1ZKSx0QmU9VXkobEMpLGVCZT1VeShsOSksdUM9bmV3IFByLEtNPW5ldyBQcix4QXQ9aGUobGUoenQsMSksZHQsMiw2LFsiQ24iLCJMdSIsIkxsIiwiTHQiLCJMbSIsIkxvIiwiTW4iLCJNZSIsIk1jIiwiTmQiLCJObCIsIk5vIiwiWnMiLCJabCIsIlpwIiwiQ2MiLCJDZiIsbnVsbCwiQ28iLCJDcyIsIlBkIiwiUHMiLCJQZSIsIlBjIiwiUG8iLCJTbSIsIlNjIiwiU2siLCJTbyIsIlBpIiwiUGYiLCJMIiwiTSIsIk4iLCJaIiwiQyIsIlAiLCJTIl0pLFdQZT1oZShsZSh6dCwxKSxkdCwyLDYsWyJCYXNpYyBMYXRpbiIsIkxhdGluLTEgU3VwcGxlbWVudCIsIkxhdGluIEV4dGVuZGVkLUEiLCJMYXRpbiBFeHRlbmRlZC1CIiwiSVBBIEV4dGVuc2lvbnMiLCJTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMiLCJDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MiLCJHcmVlayIsIkN5cmlsbGljIiwiQXJtZW5pYW4iLCJIZWJyZXciLCJBcmFiaWMiLCJTeXJpYWMiLCJUaGFhbmEiLCJEZXZhbmFnYXJpIiwiQmVuZ2FsaSIsIkd1cm11a2hpIiwiR3VqYXJhdGkiLCJPcml5YSIsIlRhbWlsIiwiVGVsdWd1IiwiS2FubmFkYSIsIk1hbGF5YWxhbSIsIlNpbmhhbGEiLCJUaGFpIiwiTGFvIiwiVGliZXRhbiIsIk15YW5tYXIiLCJHZW9yZ2lhbiIsIkhhbmd1bCBKYW1vIiwiRXRoaW9waWMiLCJDaGVyb2tlZSIsIlVuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MiLCJPZ2hhbSIsIlJ1bmljIiwiS2htZXIiLCJNb25nb2xpYW4iLCJMYXRpbiBFeHRlbmRlZCBBZGRpdGlvbmFsIiwiR3JlZWsgRXh0ZW5kZWQiLCJHZW5lcmFsIFB1bmN0dWF0aW9uIiwiU3VwZXJzY3JpcHRzIGFuZCBTdWJzY3JpcHRzIiwiQ3VycmVuY3kgU3ltYm9scyIsIkNvbWJpbmluZyBNYXJrcyBmb3IgU3ltYm9scyIsIkxldHRlcmxpa2UgU3ltYm9scyIsIk51bWJlciBGb3JtcyIsIkFycm93cyIsIk1hdGhlbWF0aWNhbCBPcGVyYXRvcnMiLCJNaXNjZWxsYW5lb3VzIFRlY2huaWNhbCIsIkNvbnRyb2wgUGljdHVyZXMiLCJPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvbiIsIkVuY2xvc2VkIEFscGhhbnVtZXJpY3MiLCJCb3ggRHJhd2luZyIsIkJsb2NrIEVsZW1lbnRzIiwiR2VvbWV0cmljIFNoYXBlcyIsIk1pc2NlbGxhbmVvdXMgU3ltYm9scyIsIkRpbmdiYXRzIiwiQnJhaWxsZSBQYXR0ZXJucyIsIkNKSyBSYWRpY2FscyBTdXBwbGVtZW50IiwiS2FuZ3hpIFJhZGljYWxzIiwiSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycyIsIkNKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiIsIkhpcmFnYW5hIiwiS2F0YWthbmEiLCJCb3BvbW9mbyIsIkhhbmd1bCBDb21wYXRpYmlsaXR5IEphbW8iLCJLYW5idW4iLCJCb3BvbW9mbyBFeHRlbmRlZCIsIkVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMiLCJDSksgQ29tcGF0aWJpbGl0eSIsIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEiLCJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIiwiWWkgU3lsbGFibGVzIiwiWWkgUmFkaWNhbHMiLCJIYW5ndWwgU3lsbGFibGVzIixZNXQsIkNKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMiLCJBbHBoYWJldGljIFByZXNlbnRhdGlvbiBGb3JtcyIsIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSIsIkNvbWJpbmluZyBIYWxmIE1hcmtzIiwiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMiLCJTbWFsbCBGb3JtIFZhcmlhbnRzIiwiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CIiwiU3BlY2lhbHMiLCJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyIsIk9sZCBJdGFsaWMiLCJHb3RoaWMiLCJEZXNlcmV0IiwiQnl6YW50aW5lIE11c2ljYWwgU3ltYm9scyIsIk11c2ljYWwgU3ltYm9scyIsIk1hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3ltYm9scyIsIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEIiLCJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIFN1cHBsZW1lbnQiLCJUYWdzIl0pLFlQZT1oZShsZShWciwxKSxkaSwyOCwxNSxbNjYzMDQsNjYzNTEsNjYzNTIsNjYzODMsNjY1NjAsNjY2MzksMTE4Nzg0LDExOTAzOSwxMTkwNDAsMTE5Mjk1LDExOTgwOCwxMjA4MzEsMTMxMDcyLDE3Mzc4MiwxOTQ1NjAsMTk1MTAzLDkxNzUwNCw5MTc2MzFdKX1mdW5jdGlvbiBZVSgpe1lVPVUsbTd0PW5ldyBvZigiT1VUX1RfTCIsMCwoQmwoKSxGZCksKG9sKCksdzApLCh0MSgpLEdjKSxHYyxoZShsZShqZiwxKSxSbiwyMSwwLFtycygocXkoKSxDMCksaGUobGUoS28sMSksaXQsOTUsMCxbUzAsRTBdKSldKSksYjd0PW5ldyBvZigiT1VUX1RfQyIsMSxCYix3MCxHYywkdSxoZShsZShqZiwxKSxSbiwyMSwwLFtycyhDMCxoZShsZShLbywxKSxpdCw5NSwwLFtTMCxtcF0pKSxycyhDMCxoZShsZShLbywxKSxpdCw5NSwwLFtTMCxtcCx6Zl0pKV0pKSx2N3Q9bmV3IG9mKCJPVVRfVF9SIiwyLHYwLHcwLEdjLEtjLGhlKGxlKGpmLDEpLFJuLDIxLDAsW3JzKEMwLGhlKGxlKEtvLDEpLGl0LDk1LDAsW1MwLFQwXSkpXSkpLGM3dD1uZXcgb2YoIk9VVF9CX0wiLDMsRmQsYTEsS2MsR2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoQzAsaGUobGUoS28sMSksaXQsOTUsMCxbcWYsRTBdKSldKSksbzd0PW5ldyBvZigiT1VUX0JfQyIsNCxCYixhMSxLYywkdSxoZShsZShqZiwxKSxSbiwyMSwwLFtycyhDMCxoZShsZShLbywxKSxpdCw5NSwwLFtxZixtcF0pKSxycyhDMCxoZShsZShLbywxKSxpdCw5NSwwLFtxZixtcCx6Zl0pKV0pKSx1N3Q9bmV3IG9mKCJPVVRfQl9SIiw1LHYwLGExLEtjLEtjLGhlKGxlKGpmLDEpLFJuLDIxLDAsW3JzKEMwLGhlKGxlKEtvLDEpLGl0LDk1LDAsW3FmLFQwXSkpXSkpLGY3dD1uZXcgb2YoIk9VVF9MX1QiLDYsdjAsYTEsR2MsR2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoQzAsaGUobGUoS28sMSksaXQsOTUsMCxbRTAsUzAsemZdKSldKSksaDd0PW5ldyBvZigiT1VUX0xfQyIsNyx2MCxGYiwkdSxHYyxoZShsZShqZiwxKSxSbiwyMSwwLFtycyhDMCxoZShsZShLbywxKSxpdCw5NSwwLFtFMCxFZ10pKSxycyhDMCxoZShsZShLbywxKSxpdCw5NSwwLFtFMCxFZyx6Zl0pKV0pKSxsN3Q9bmV3IG9mKCJPVVRfTF9CIiw4LHYwLHcwLEtjLEdjLGhlKGxlKGpmLDEpLFJuLDIxLDAsW3JzKEMwLGhlKGxlKEtvLDEpLGl0LDk1LDAsW0UwLHFmLHpmXSkpXSkpLHA3dD1uZXcgb2YoIk9VVF9SX1QiLDksRmQsYTEsR2MsS2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoQzAsaGUobGUoS28sMSksaXQsOTUsMCxbVDAsUzAsemZdKSldKSksZzd0PW5ldyBvZigiT1VUX1JfQyIsMTAsRmQsRmIsJHUsS2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoQzAsaGUobGUoS28sMSksaXQsOTUsMCxbVDAsRWddKSkscnMoQzAsaGUobGUoS28sMSksaXQsOTUsMCxbVDAsRWcsemZdKSldKSksZDd0PW5ldyBvZigiT1VUX1JfQiIsMTEsRmQsdzAsS2MsS2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoQzAsaGUobGUoS28sMSksaXQsOTUsMCxbVDAscWYsemZdKSldKSksczd0PW5ldyBvZigiSU5fVF9MIiwxMixGZCxhMSxHYyxHYyxoZShsZShqZiwxKSxSbiwyMSwwLFtycyhqaCxoZShsZShLbywxKSxpdCw5NSwwLFtTMCxFMF0pKSxycyhqaCxoZShsZShLbywxKSxpdCw5NSwwLFtTMCxFMCx6Zl0pKV0pKSxpN3Q9bmV3IG9mKCJJTl9UX0MiLDEzLEJiLGExLEdjLCR1LGhlKGxlKGpmLDEpLFJuLDIxLDAsW3JzKGpoLGhlKGxlKEtvLDEpLGl0LDk1LDAsW1MwLG1wXSkpLHJzKGpoLGhlKGxlKEtvLDEpLGl0LDk1LDAsW1MwLG1wLHpmXSkpXSkpLGE3dD1uZXcgb2YoIklOX1RfUiIsMTQsdjAsYTEsR2MsS2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoamgsaGUobGUoS28sMSksaXQsOTUsMCxbUzAsVDBdKSkscnMoamgsaGUobGUoS28sMSksaXQsOTUsMCxbUzAsVDAsemZdKSldKSksbjd0PW5ldyBvZigiSU5fQ19MIiwxNSxGZCxGYiwkdSxHYyxoZShsZShqZiwxKSxSbiwyMSwwLFtycyhqaCxoZShsZShLbywxKSxpdCw5NSwwLFtFZyxFMF0pKSxycyhqaCxoZShsZShLbywxKSxpdCw5NSwwLFtFZyxFMCx6Zl0pKV0pKSx0N3Q9bmV3IG9mKCJJTl9DX0MiLDE2LEJiLEZiLCR1LCR1LGhlKGxlKGpmLDEpLFJuLDIxLDAsW3JzKGpoLGhlKGxlKEtvLDEpLGl0LDk1LDAsW0VnLG1wXSkpLHJzKGpoLGhlKGxlKEtvLDEpLGl0LDk1LDAsW0VnLG1wLHpmXSkpXSkpLHI3dD1uZXcgb2YoIklOX0NfUiIsMTcsdjAsRmIsJHUsS2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoamgsaGUobGUoS28sMSksaXQsOTUsMCxbRWcsVDBdKSkscnMoamgsaGUobGUoS28sMSksaXQsOTUsMCxbRWcsVDAsemZdKSldKSksWjZ0PW5ldyBvZigiSU5fQl9MIiwxOCxGZCx3MCxLYyxHYyxoZShsZShqZiwxKSxSbiwyMSwwLFtycyhqaCxoZShsZShLbywxKSxpdCw5NSwwLFtxZixFMF0pKSxycyhqaCxoZShsZShLbywxKSxpdCw5NSwwLFtxZixFMCx6Zl0pKV0pKSxKNnQ9bmV3IG9mKCJJTl9CX0MiLDE5LEJiLHcwLEtjLCR1LGhlKGxlKGpmLDEpLFJuLDIxLDAsW3JzKGpoLGhlKGxlKEtvLDEpLGl0LDk1LDAsW3FmLG1wXSkpLHJzKGpoLGhlKGxlKEtvLDEpLGl0LDk1LDAsW3FmLG1wLHpmXSkpXSkpLGU3dD1uZXcgb2YoIklOX0JfUiIsMjAsdjAsdzAsS2MsS2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoamgsaGUobGUoS28sMSksaXQsOTUsMCxbcWYsVDBdKSkscnMoamgsaGUobGUoS28sMSksaXQsOTUsMCxbcWYsVDAsemZdKSldKSksSDBlPW5ldyBvZihjTCwyMSxudWxsLG51bGwsbnVsbCxudWxsLGhlKGxlKGpmLDEpLFJuLDIxLDAsW10pKX1mdW5jdGlvbiBUbigpe1RuPVUsTzQ9KGxiKCksVm4pLmIsbChPZSh0dChWbi5iKSwwKSwzNSksbChPZSh0dChWbi5iKSwxKSwxOSksTTI9Vm4uYSxsKE9lKHR0KFZuLmEpLDApLDM1KSxsKE9lKHR0KFZuLmEpLDEpLDE5KSxsKE9lKHR0KFZuLmEpLDIpLDE5KSxsKE9lKHR0KFZuLmEpLDMpLDE5KSxsKE9lKHR0KFZuLmEpLDQpLDE5KSxKYj1Wbi5vLGwoT2UodHQoVm4ubyksMCksMzUpLGwoT2UodHQoVm4ubyksMSksMzUpLHpfdD1sKE9lKHR0KFZuLm8pLDIpLDE5KSxsKE9lKHR0KFZuLm8pLDMpLDE5KSxsKE9lKHR0KFZuLm8pLDQpLDE5KSxsKE9lKHR0KFZuLm8pLDUpLDE5KSxsKE9lKHR0KFZuLm8pLDYpLDE5KSxsKE9lKHR0KFZuLm8pLDcpLDE5KSxsKE9lKHR0KFZuLm8pLDgpLDE5KSxsKE9lKHR0KFZuLm8pLDkpLDE5KSxsKE9lKHR0KFZuLm8pLDEwKSwxOSksbChPZSh0dChWbi5vKSwxMSksMTkpLGwoT2UodHQoVm4ubyksMTIpLDE5KSxsKE9lKHR0KFZuLm8pLDEzKSwxOSksbChPZSh0dChWbi5vKSwxNCksMTkpLGwoT2UodHQoVm4ubyksMTUpLDE5KSxsKE9lKHFpKFZuLm8pLDApLDYyKSxsKE9lKHFpKFZuLm8pLDEpLDYyKSxsKE9lKHFpKFZuLm8pLDIpLDYyKSxsKE9lKHFpKFZuLm8pLDMpLDYyKSxsKE9lKHFpKFZuLm8pLDQpLDYyKSxsKE9lKHFpKFZuLm8pLDUpLDYyKSxsKE9lKHFpKFZuLm8pLDYpLDYyKSxsKE9lKHFpKFZuLm8pLDcpLDYyKSxsKE9lKHFpKFZuLm8pLDgpLDYyKSxsKE9lKHFpKFZuLm8pLDkpLDYyKSwkX3Q9Vm4ucCxsKE9lKHR0KFZuLnApLDApLDM1KSxsKE9lKHR0KFZuLnApLDEpLDM1KSxsKE9lKHR0KFZuLnApLDIpLDM1KSxsKE9lKHR0KFZuLnApLDMpLDM1KSxsKE9lKHR0KFZuLnApLDQpLDE5KSxsKE9lKHR0KFZuLnApLDUpLDE5KSxsKE9lKHFpKFZuLnApLDApLDYyKSxsKE9lKHFpKFZuLnApLDEpLDYyKSxxX3Q9Vm4ucSxsKE9lKHR0KFZuLnEpLDApLDM1KSxaYj1Wbi52LGwoT2UodHQoVm4udiksMCksMTkpLGwoT2UocWkoVm4udiksMCksNjIpLGwoT2UocWkoVm4udiksMSksNjIpLGwoT2UocWkoVm4udiksMiksNjIpLEQyPVZuLncsbChPZSh0dChWbi53KSwwKSwzNSksbChPZSh0dChWbi53KSwxKSwzNSksbChPZSh0dChWbi53KSwyKSwzNSksbChPZSh0dChWbi53KSwzKSwxOSksZW09Vm4uQixsKE9lKHR0KFZuLkIpLDApLDE5KSxsKE9lKHFpKFZuLkIpLDApLDYyKSxsKE9lKHFpKFZuLkIpLDEpLDYyKSxsKE9lKHFpKFZuLkIpLDIpLDYyKSxIX3Q9Vm4uUSxsKE9lKHR0KFZuLlEpLDApLDE5KSxsKE9lKHFpKFZuLlEpLDApLDYyKSxWX3Q9Vm4uUixsKE9lKHR0KFZuLlIpLDApLDM1KSxLZj1Wbi5TLGwoT2UocWkoVm4uUyksMCksNjIpLGwoT2UocWkoVm4uUyksMSksNjIpLGwoT2UocWkoVm4uUyksMiksNjIpLGwoT2UocWkoVm4uUyksMyksNjIpLGwoT2UocWkoVm4uUyksNCksNjIpLGwoT2UocWkoVm4uUyksNSksNjIpLGwoT2UocWkoVm4uUyksNiksNjIpLGwoT2UocWkoVm4uUyksNyksNjIpLGwoT2UocWkoVm4uUyksOCksNjIpLGwoT2UocWkoVm4uUyksOSksNjIpLGwoT2UocWkoVm4uUyksMTApLDYyKSxsKE9lKHFpKFZuLlMpLDExKSw2MiksbChPZShxaShWbi5TKSwxMiksNjIpLGwoT2UocWkoVm4uUyksMTMpLDYyKSxsKE9lKHFpKFZuLlMpLDE0KSw2MiksSTI9Vm4uVCxsKE9lKHR0KFZuLlQpLDApLDE5KSxsKE9lKHR0KFZuLlQpLDIpLDE5KSxVX3Q9bChPZSh0dChWbi5UKSwzKSwxOSksbChPZSh0dChWbi5UKSw0KSwxOSksbChPZShxaShWbi5UKSwwKSw2MiksbChPZShxaShWbi5UKSwxKSw2MiksbChPZSh0dChWbi5UKSwxKSwxOSksTzI9Vm4uVSxsKE9lKHR0KFZuLlUpLDApLDM1KSxsKE9lKHR0KFZuLlUpLDEpLDM1KSxsKE9lKHR0KFZuLlUpLDIpLDE5KSxsKE9lKHR0KFZuLlUpLDMpLDE5KSxsKE9lKHR0KFZuLlUpLDQpLDE5KSxsKE9lKHR0KFZuLlUpLDUpLDE5KSxsKE9lKHFpKFZuLlUpLDApLDYyKSxOND1Wbi5WLGwoT2UodHQoVm4uViksMCksMTkpLG83PVZuLlcsbChPZSh0dChWbi5XKSwwKSwzNSksbChPZSh0dChWbi5XKSwxKSwzNSksbChPZSh0dChWbi5XKSwyKSwzNSksbChPZSh0dChWbi5XKSwzKSwxOSksbChPZSh0dChWbi5XKSw0KSwxOSksbChPZSh0dChWbi5XKSw1KSwxOSksR190PVZuLmJiLGwoT2UodHQoVm4uYmIpLDApLDM1KSxsKE9lKHR0KFZuLmJiKSwxKSwzNSksbChPZSh0dChWbi5iYiksMiksMzUpLGwoT2UodHQoVm4uYmIpLDMpLDM1KSxsKE9lKHR0KFZuLmJiKSw0KSwzNSksbChPZSh0dChWbi5iYiksNSksMzUpLGwoT2UodHQoVm4uYmIpLDYpLDM1KSxsKE9lKHR0KFZuLmJiKSw3KSwxOSksbChPZShxaShWbi5iYiksMCksNjIpLGwoT2UocWkoVm4uYmIpLDEpLDYyKSxLX3Q9Vm4uZWIsbChPZSh0dChWbi5lYiksMCksMzUpLGwoT2UodHQoVm4uZWIpLDEpLDM1KSxsKE9lKHR0KFZuLmViKSwyKSwzNSksbChPZSh0dChWbi5lYiksMyksMzUpLGwoT2UodHQoVm4uZWIpLDQpLDM1KSxsKE9lKHR0KFZuLmViKSw1KSwzNSksbChPZSh0dChWbi5lYiksNiksMTkpLGwoT2UodHQoVm4uZWIpLDcpLDE5KSxObz1Wbi5hYixsKE9lKHR0KFZuLmFiKSwwKSwzNSksbChPZSh0dChWbi5hYiksMSksMzUpLEUzPVZuLkgsbChPZSh0dChWbi5IKSwwKSwxOSksbChPZSh0dChWbi5IKSwxKSwxOSksbChPZSh0dChWbi5IKSwyKSwxOSksbChPZSh0dChWbi5IKSwzKSwxOSksbChPZSh0dChWbi5IKSw0KSwxOSksbChPZSh0dChWbi5IKSw1KSwxOSksbChPZShxaShWbi5IKSwwKSw2MiksVDM9Vm4uZGIsbChPZSh0dChWbi5kYiksMCksMTkpLHRkPVZuLk19ZnVuY3Rpb24gdE9uKGUpe3ZhciB0O2UuT3x8KGUuTz0hMCxGdShlLCJ0eXBlIiksQ1YoZSwiZWNvcmUueG1sLnR5cGUiKSxTVihlLGN2KSx0PWwoVkUoKGliKCksR2YpLGN2KSwyMDQ0KSxxcihkYyhlLmZiKSxlLmIpLHpjKGUuYixnRiwiQW55VHlwZSIsITEsITEsITApLE9zKGwoT2UodHQoZS5iKSwwKSwzNSksZS53Yi5ELFhQLG51bGwsMCwtMSxnRiwhMSwhMSwhMCwhMSwhMSwhMSksT3MobChPZSh0dChlLmIpLDEpLDM1KSxlLndiLkQsImFueSIsbnVsbCwwLC0xLGdGLCEwLCEwLCEwLCExLCExLCEwKSxPcyhsKE9lKHR0KGUuYiksMiksMzUpLGUud2IuRCwiYW55QXR0cmlidXRlIixudWxsLDAsLTEsZ0YsITEsITEsITAsITEsITEsITEpLHpjKGUuYmIsQVksTTV0LCExLCExLCEwKSxPcyhsKE9lKHR0KGUuYmIpLDApLDM1KSxlLmdiLCJkYXRhIixudWxsLDAsMSxBWSwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLmJiKSwxKSwzNSksZS5nYix3U2UsbnVsbCwxLDEsQVksITEsITEsITAsITEsITAsITEpLHpjKGUuZmIscEYsRDV0LCExLCExLCEwKSxPcyhsKE9lKHR0KGUuZmIpLDApLDM1KSx0LmdiLCJyYXdWYWx1ZSIsbnVsbCwwLDEscEYsITAsITAsITAsITEsITAsITApLE9zKGwoT2UodHQoZS5mYiksMSksMzUpLHQuYSxUTCxudWxsLDAsMSxwRiwhMCwhMCwhMCwhMSwhMCwhMCksc3MobChPZSh0dChlLmZiKSwyKSwxOSksZS53Yi5xLG51bGwsImluc3RhbmNlVHlwZSIsMSwxLHBGLCExLCExLCEwLCExLCExLCExLCExKSx6YyhlLnFiLFZQZSxJNXQsITEsITEsITApLE9zKGwoT2UodHQoZS5xYiksMCksMzUpLGUud2IuRCxYUCxudWxsLDAsLTEsbnVsbCwhMSwhMSwhMCwhMSwhMSwhMSksc3MobChPZSh0dChlLnFiKSwxKSwxOSksZS53Yi5hYixudWxsLCJ4TUxOU1ByZWZpeE1hcCIsMCwtMSxudWxsLCEwLCExLCEwLCEwLCExLCExLCExKSxzcyhsKE9lKHR0KGUucWIpLDIpLDE5KSxlLndiLmFiLG51bGwsInhTSVNjaGVtYUxvY2F0aW9uIiwwLC0xLG51bGwsITAsITEsITAsITAsITEsITEsITEpLE9zKGwoT2UodHQoZS5xYiksMyksMzUpLGUuZ2IsImNEQVRBIixudWxsLDAsLTIsbnVsbCwhMCwhMCwhMCwhMSwhMSwhMCksT3MobChPZSh0dChlLnFiKSw0KSwzNSksZS5nYiwiY29tbWVudCIsbnVsbCwwLC0yLG51bGwsITAsITAsITAsITEsITEsITApLHNzKGwoT2UodHQoZS5xYiksNSksMTkpLGUuYmIsbnVsbCxVNXQsMCwtMixudWxsLCEwLCEwLCEwLCEwLCExLCExLCEwKSxPcyhsKE9lKHR0KGUucWIpLDYpLDM1KSxlLmdiLEtmZSxudWxsLDAsLTIsbnVsbCwhMCwhMCwhMCwhMSwhMSwhMCksRWkoZS5hLHdhLCJBbnlTaW1wbGVUeXBlIiwhMCksRWkoZS5jLHp0LCJBbnlVUkkiLCEwKSxFaShlLmQsbGUoQWwsMSksIkJhc2U2NEJpbmFyeSIsITApLEVpKGUuZSxpaCwiQm9vbGVhbiIsITApLEVpKGUuZixOcywiQm9vbGVhbk9iamVjdCIsITApLEVpKGUuZyxBbCwiQnl0ZSIsITApLEVpKGUuaSxqeCwiQnl0ZU9iamVjdCIsITApLEVpKGUuaix6dCwiRGF0ZSIsITApLEVpKGUuayx6dCwiRGF0ZVRpbWUiLCEwKSxFaShlLm4sTDBlLCJEZWNpbWFsIiwhMCksRWkoZS5vLE5hLCJEb3VibGUiLCEwKSxFaShlLnAsdGEsIkRvdWJsZU9iamVjdCIsITApLEVpKGUucSx6dCwiRHVyYXRpb24iLCEwKSxFaShlLnMsbWYsIkVOVElUSUVTIiwhMCksRWkoZS5yLG1mLCJFTlRJVElFU0Jhc2UiLCEwKSxFaShlLnQsenQsUFNlLCEwKSxFaShlLnUsQjQsIkZsb2F0IiwhMCksRWkoZS52LF9ULCJGbG9hdE9iamVjdCIsITApLEVpKGUudyx6dCwiR0RheSIsITApLEVpKGUuQix6dCwiR01vbnRoIiwhMCksRWkoZS5BLHp0LCJHTW9udGhEYXkiLCEwKSxFaShlLkMsenQsIkdZZWFyIiwhMCksRWkoZS5ELHp0LCJHWWVhck1vbnRoIiwhMCksRWkoZS5GLGxlKEFsLDEpLCJIZXhCaW5hcnkiLCEwKSxFaShlLkcsenQsIklEIiwhMCksRWkoZS5ILHp0LCJJRFJFRiIsITApLEVpKGUuSixtZiwiSURSRUZTIiwhMCksRWkoZS5JLG1mLCJJRFJFRlNCYXNlIiwhMCksRWkoZS5LLFZyLCJJbnQiLCEwKSxFaShlLk0sQTYsIkludGVnZXIiLCEwKSxFaShlLkwscm8sIkludE9iamVjdCIsITApLEVpKGUuUCx6dCwiTGFuZ3VhZ2UiLCEwKSxFaShlLlEsbm0sIkxvbmciLCEwKSxFaShlLlIscjMsIkxvbmdPYmplY3QiLCEwKSxFaShlLlMsenQsIk5hbWUiLCEwKSxFaShlLlQsenQsckssITApLEVpKGUuVSxBNiwiTmVnYXRpdmVJbnRlZ2VyIiwhMCksRWkoZS5WLHp0LFJTZSwhMCksRWkoZS5YLG1mLCJOTVRPS0VOUyIsITApLEVpKGUuVyxtZiwiTk1UT0tFTlNCYXNlIiwhMCksRWkoZS5ZLEE2LCJOb25OZWdhdGl2ZUludGVnZXIiLCEwKSxFaShlLlosQTYsIk5vblBvc2l0aXZlSW50ZWdlciIsITApLEVpKGUuJCx6dCwiTm9ybWFsaXplZFN0cmluZyIsITApLEVpKGUuXyx6dCwiTk9UQVRJT04iLCEwKSxFaShlLmFiLHp0LCJQb3NpdGl2ZUludGVnZXIiLCEwKSxFaShlLmNiLHp0LCJRTmFtZSIsITApLEVpKGUuZGIsaDcsIlNob3J0IiwhMCksRWkoZS5lYixpMywiU2hvcnRPYmplY3QiLCEwKSxFaShlLmdiLHp0LG5FZSwhMCksRWkoZS5oYix6dCwiVGltZSIsITApLEVpKGUuaWIsenQsIlRva2VuIiwhMCksRWkoZS5qYixoNywiVW5zaWduZWRCeXRlIiwhMCksRWkoZS5rYixpMywiVW5zaWduZWRCeXRlT2JqZWN0IiwhMCksRWkoZS5sYixubSwiVW5zaWduZWRJbnQiLCEwKSxFaShlLm1iLHIzLCJVbnNpZ25lZEludE9iamVjdCIsITApLEVpKGUubmIsQTYsIlVuc2lnbmVkTG9uZyIsITApLEVpKGUub2IsVnIsIlVuc2lnbmVkU2hvcnQiLCEwKSxFaShlLnBiLHJvLCJVbnNpZ25lZFNob3J0T2JqZWN0IiwhMCksdDhlKGUsY3YpLG5PbihlKSl9ZnVuY3Rpb24gWGtlKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbixqbix1cixvaSx3cyxWbCxsYyxIaCxmNyxQMixMMCxNMCxfdixoOSxybSxmOSxxZCxfZyxTMyxkOSxkNyxIZCxBdix5cDtpZihyLiRnKCl8fFJ0KEJ0KGF0KHQsKHBpKCksclkpKSkpKXJldHVybiBDbigpLENuKCksX287aWYoU3Q9KCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpLmkhPTAsYW49bWtuKHQpLGNuPSFhbi5kYygpLFN0fHxjbil7aWYoYT1sKGF0KHQsYTcpLDE0MyksIWEpdGhyb3cgdWUobmV3IFZwKCJSZXNvbHZlZCBhbGdvcml0aG0gaXMgbm90IHNldDsgYXBwbHkgYSBMYXlvdXRBbGdvcml0aG1SZXNvbHZlciBiZWZvcmUgY29tcHV0aW5nIGxheW91dC4iKSk7aWYoZDc9SjNlKGEsKEhFKCksd1kpKSx0ZHQodCksIVN0JiZjbiYmIWQ3KXJldHVybiBDbigpLENuKCksX287aWYoTWU9bmV3IGJ0LHFlKGF0KHQsbjcpKT09PXFlKChycCgpLEEyKSkmJihKM2UoYSxtWSl8fEozZShhLGJZKSkpe2lmKFJ0KEJ0KGF0KHQsQU0pKSkpdGhyb3cgdWUobmV3IFZwKCJUb3Bkb3duIGxheW91dCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIGhpZXJhcmNoeSBoYW5kbGluZy4iKSk7Zm9yKGY3PUdidChlLHQpLFAyPW5ldyBvcyxLYShQMiwoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkpO1AyLmIhPTA7KWxjPWwoUDIuYj09MD9udWxsOihtcihQMi5iIT0wKSxhZihQMixQMi5hLmEpKSwyNyksdGR0KGxjKSxkOT1xZShhdChsYyxuNykpPT09cWUoRE0pLGQ5fHxQMShsYyxlQykmJiFnNmUoYSxhdChsYyxhNykpPyh0ZT1Ya2UoZSxsYyxuLHIpLHJhKE1lLHRlKSxIaShsYyxuNyxETSksdW10KGxjKSk6S2EoUDIsKCFsYy5hJiYobGMuYT1uZXcgbnQoQWksbGMsMTAsMTEpKSxsYy5hKSl9ZWxzZXtpZihmNz0oIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkuaSxSdChCdChhdCh0LEFNKSkpKXtpZihIZD1yLmVoKDEpLEhkLlVnKER5dCwxKSxhdCh0LGk5KT09bnVsbCl0aHJvdyB1ZShuZXcgVnAodC5rKyIgaGFzIG5vdCBiZWVuIGFzc2lnbmVkIGEgdG9wLWRvd24gbm9kZSB0eXBlLiIpKTtpZihsKGF0KHQsaTkpLDI4MCk9PShkeCgpLEw0KXx8bChhdCh0LGk5KSwyODApPT1kWSlmb3IoVGU9bmV3IG9yKCghdC5hJiYodC5hPW5ldyBudChBaSx0LDEwLDExKSksdC5hKSk7VGUuZSE9VGUuaS5nYygpOylmZT1sKGdyKFRlKSwyNyksVmw9bChhdChmZSxhNyksMTQzKSwoIWZlLmEmJihmZS5hPW5ldyBudChBaSxmZSwxMCwxMSkpLGZlLmEpLmk+MCYmR08oVmwuZiksYXQoZmUsQk5lKSE9bnVsbCYmKGc9bChhdChmZSxCTmUpLDM0NyksUzM9Zy5UZyhmZSksRjUoZmUsYi5NYXRoLm1heChmZS5nLFMzLmEpLGIuTWF0aC5tYXgoZmUuZixTMy5iKSkpO2lmKEwwPWwoYXQodCxfMiksMTA3KSx6PXQuZy0oTDAuYitMMC5jKSxCPXQuZi0oTDAuZCtMMC5hKSxIZC5iaCgiQXZhaWxhYmxlIENoaWxkIEFyZWE6ICgiK3orInwiK0IrIikiKSxIaSh0LFo2LHovQiksc2R0KHQsYSxyLmVoKGY3KSksbChhdCh0LGk5KSwyODApPT1kWSYmKFVrZSh0KSxGNSh0LEwwLmIremUoR2UoYXQodCx0NykpKStMMC5jLEwwLmQremUoR2UoYXQodCxlNykpKStMMC5hKSksSGQuYmgoIkV4ZWN1dGVkIGxheW91dCBhbGdvcml0aG06ICIrZWkoYXQodCxlQykpKyIgb24gbm9kZSAiK3QuayksbChhdCh0LGk5KSwyODApPT1MNCl7aWYoejwwfHxCPDApdGhyb3cgdWUobmV3IFZwKCJUaGUgc2l6ZSBkZWZpbmVkIGJ5IHRoZSBwYXJlbnQgcGFyYWxsZWwgbm9kZSBpcyB0b28gc21hbGwgZm9yIHRoZSBzcGFjZSBwcm92aWRlZCBieSB0aGUgcGFkZGluZ3Mgb2YgdGhlIGNoaWxkIGhpZXJhcmNoaWNhbCBub2RlLiAiK3QuaykpO2ZvcihQMSh0LHQ3KXx8UDEodCxlNyl8fFVrZSh0KSxKPXplKEdlKGF0KHQsdDcpKSksVj16ZShHZShhdCh0LGU3KSkpLEhkLmJoKCJEZXNpcmVkIENoaWxkIEFyZWE6ICgiK0orInwiK1YrIikiKSxfdj16L0osaDk9Qi9WLE0wPWIuTWF0aC5taW4oX3YsYi5NYXRoLm1pbihoOSx6ZShHZShhdCh0LHFTdCkpKSkpLEhpKHQsYVksTTApLEhkLmJoKHQuaysiIC0tIExvY2FsIFNjYWxlIEZhY3RvciAoWHxZKTogKCIrX3YrInwiK2g5KyIpIiksJGU9bChhdCh0LFVCKSwyMSksbz0wLGY9MCxNMDxfdiYmKCRlLkhjKChZbSgpLEVNKSk/bz0oei8yLUoqTTAvMikvTTA6JGUuSGMoVE0pJiYobz0oei1KKk0wKS9NMCkpLE0wPGg5JiYoJGUuSGMoKFltKCksU00pKT9mPShCLzItVipNMC8yKS9NMDokZS5IYyhDTSkmJihmPShCLVYqTTApL00wKSksQXY9bysoTDAuYi9NMC1MMC5iKSx5cD1mKyhMMC5kL00wLUwwLmQpLEhkLmJoKCJTaGlmdDogKCIrQXYrInwiK3lwKyIpIiksSGg9bmV3IG9yKCghdC5hJiYodC5hPW5ldyBudChBaSx0LDEwLDExKSksdC5hKSk7SGguZSE9SGguaS5nYygpOylsYz1sKGdyKEhoKSwyNyksVXUobGMsbGMuaStBdiksR3UobGMsbGMuait5cCk7Zm9yKG90PW5ldyBvcigoIXQuYiYmKHQuYj1uZXcgbnQoanMsdCwxMiwzKSksdC5iKSk7b3QuZSE9b3QuaS5nYygpOyl7Zm9yKFplPWwoZ3Iob3QpLDc0KSxmOT1uZXcgb3IoKCFaZS5hJiYoWmUuYT1uZXcgbnQoY3MsWmUsNiw2KSksWmUuYSkpO2Y5LmUhPWY5LmkuZ2MoKTspZm9yKHJtPWwoZ3IoZjkpLDE2Niksa08ocm0scm0uaitBdixybS5rK3lwKSx4TyhybSxybS5iK0F2LHJtLmMreXApLEU9bmV3IG9yKCghcm0uYSYmKHJtLmE9bmV3IFlzKHFoLHJtLDUpKSxybS5hKSk7RS5lIT1FLmkuZ2MoKTspdz1sKGdyKEUpLDM3NyksV3NlKHcsdy5hK0F2LHcuYit5cCk7Zm9yKHdzPW5ldyBvcigoIVplLm4mJihaZS5uPW5ldyBudChlYyxaZSwxLDcpKSxaZS5uKSk7d3MuZSE9d3MuaS5nYygpOylvaT1sKGdyKHdzKSwxMzUpLFFoKG9pLG9pLmkrQXYsb2kuait5cCk7Zm9yKHVyPWwoYXQoWmUseDMpLDc1KSxqbj1Scih1ciwwKTtqbi5iIT1qbi5kLmM7KUJuPWwoQnIoam4pLDgpLEJuLmErPUF2LEJuLmIrPXlwO0hpKFplLHgzLHVyKX19SGQuVmcoKX1mb3IoTD1uZXcgb3IoKCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpKTtMLmUhPUwuaS5nYygpOylDPWwoZ3IoTCksMjcpLHRlPVhrZShlLEMsbixyKSxyYShNZSx0ZSksdW10KEMpfWlmKHIuJGcoKSlyZXR1cm4gQ24oKSxDbigpLF9vO2ZvcihfZz1uZXcgRyhNZSk7X2cuYTxfZy5jLmMubGVuZ3RoOylxZD1sKHJlKF9nKSw3NCksSGkocWQsclksKEhuKCksITApKTtyZXR1cm4gUnQoQnQoYXQodCxBTSkpKXx8c2R0KHQsYSxyLmVoKGY3KSksel9uKE1lKSxjbiYmZDc/YW46KENuKCksQ24oKSxfbyl9ZWxzZSByZXR1cm4gQ24oKSxDbigpLF9vfWZ1bmN0aW9uIGI2KGUsdCl7dmFyIG4scjtyZXR1cm4gbDd8fChsNz1uZXcgUHIsY0M9bmV3IFByLHI9KERpKCksRGkoKSxuZXcgX2goNCkpLGpOKHIsYAkKXHJcciAgYCkscmMobDcsZjBlLHIpLHJjKGNDLGYwZSxVeShyKSkscj1uZXcgX2goNCksak4ocixLNXQpLHJjKGw3LE9MLHIpLHJjKGNDLE9MLFV5KHIpKSxyPW5ldyBfaCg0KSxqTihyLEs1dCkscmMobDcsT0wscikscmMoY0MsT0wsVXkocikpLHI9bmV3IF9oKDQpLGpOKHIsVzV0KSxLeShyLGwoeHUobDcsT0wpLDEyMikpLHJjKGw3LGgwZSxyKSxyYyhjQyxoMGUsVXkocikpLHI9bmV3IF9oKDQpLGpOKHIsIi0uMDpBWl9fYXrCt8K3w4DDlsOYw7bDuMSxxLTEvsWBxYjFisW+xoDHg8eNx7DHtMe1x7rIl8mQyqjKu8uBy5DLkcyAzYXNoM2hzobOis6MzozOjs6hzqPPjs+Qz5bPms+az5zPnM+ez57PoM+gz6LPs9CB0IzQjtGP0ZHRnNGe0oHSg9KG0pDThNOH04jTi9OM05DTq9Ou07XTuNO51LHVltWZ1ZnVodaG1pHWodaj1rnWu9a91r/Wv9eB14LXhNeE15DXqtew17LYodi62YDZktmg2anZsNq32rravtuA247bkNuT25XbqNuq263bsNu54KSB4KSD4KSF4KS54KS84KWN4KWR4KWU4KWY4KWj4KWm4KWv4KaB4KaD4KaF4KaM4KaP4KaQ4KaT4Kao4Kaq4Kaw4Kay4Kay4Ka24Ka54Ka84Ka84Ka+4KeE4KeH4KeI4KeL4KeN4KeX4KeX4Kec4Ked4Kef4Kej4Kem4Kex4KiC4KiC4KiF4KiK4KiP4KiQ4KiT4Kio4Kiq4Kiw4Kiy4Kiz4Ki14Ki24Ki44Ki54Ki84Ki84Ki+4KmC4KmH4KmI4KmL4KmN4KmZ4Kmc4Kme4Kme4Kmm4Km04KqB4KqD4KqF4KqL4KqN4KqN4KqP4KqR4KqT4Kqo4Kqq4Kqw4Kqy4Kqz4Kq14Kq54Kq84KuF4KuH4KuJ4KuL4KuN4Kug4Kug4Kum4Kuv4KyB4KyD4KyF4KyM4KyP4KyQ4KyT4Kyo4Kyq4Kyw4Kyy4Kyz4Ky24Ky54Ky84K2D4K2H4K2I4K2L4K2N4K2W4K2X4K2c4K2d4K2f4K2h4K2m4K2v4K6C4K6D4K6F4K6K4K6O4K6Q4K6S4K6V4K6Z4K6a4K6c4K6c4K6e4K6f4K6j4K6k4K6o4K6q4K6u4K614K634K654K6+4K+C4K+G4K+I4K+K4K+N4K+X4K+X4K+n4K+v4LCB4LCD4LCF4LCM4LCO4LCQ4LCS4LCo4LCq4LCz4LC14LC54LC+4LGE4LGG4LGI4LGK4LGN4LGV4LGW4LGg4LGh4LGm4LGv4LKC4LKD4LKF4LKM4LKO4LKQ4LKS4LKo4LKq4LKz4LK14LK54LK+4LOE4LOG4LOI4LOK4LON4LOV4LOW4LOe4LOe4LOg4LOh4LOm4LOv4LSC4LSD4LSF4LSM4LSO4LSQ4LSS4LSo4LSq4LS54LS+4LWD4LWG4LWI4LWK4LWN4LWX4LWX4LWg4LWh4LWm4LWv4LiB4Liu4Liw4Li64LmA4LmO4LmQ4LmZ4LqB4LqC4LqE4LqE4LqH4LqI4LqK4LqK4LqN4LqN4LqU4LqX4LqZ4Lqf4Lqh4Lqj4Lql4Lql4Lqn4Lqn4Lqq4Lqr4Lqt4Lqu4Lqw4Lq54Lq74Lq94LuA4LuE4LuG4LuG4LuI4LuN4LuQ4LuZ4LyY4LyZ4Lyg4Lyp4Ly14Ly14Ly34Ly34Ly54Ly54Ly+4L2H4L2J4L2p4L2x4L6E4L6G4L6L4L6Q4L6V4L6X4L6X4L6Z4L6t4L6x4L634L654L654YKg4YOF4YOQ4YO24YSA4YSA4YSC4YSD4YSF4YSH4YSJ4YSJ4YSL4YSM4YSO4YSS4YS84YS84YS+4YS+4YWA4YWA4YWM4YWM4YWO4YWO4YWQ4YWQ4YWU4YWV4YWZ4YWZ4YWf4YWh4YWj4YWj4YWl4YWl4YWn4YWn4YWp4YWp4YWt4YWu4YWy4YWz4YW14YW14Yae4Yae4Yao4Yao4Yar4Yar4Yau4Yav4Ya34Ya44Ya64Ya64Ya84YeC4Yer4Yer4Yew4Yew4Ye54Ye54biA4bqb4bqg4bu54byA4byV4byY4byd4byg4b2F4b2I4b2N4b2Q4b2X4b2Z4b2Z4b2b4b2b4b2d4b2d4b2f4b294b6A4b604b624b684b6+4b6+4b+C4b+E4b+G4b+M4b+Q4b+T4b+W4b+b4b+g4b+s4b+y4b+04b+24b+84oOQ4oOc4oOh4oOh4oSm4oSm4oSq4oSr4oSu4oSu4oaA4oaC44CF44CF44CH44CH44Ch44Cv44Cx44C144GB44KU44KZ44Ka44Kd44Ke44Kh44O644O844O+44SF44Ss5LiA6b6l6rCA7Z6jIikscmMobDcsZDBlLHIpLHJjKGNDLGQwZSxVeShyKSkscj1uZXcgX2goNCksak4ocixXNXQpLEV1KHIsOTUsOTUpLEV1KHIsNTgsNTgpLHJjKGw3LGcwZSxyKSxyYyhjQyxnMGUsVXkocikpKSxuPWwoeHUodD9sNzpjQyxlKSwxMzgpLG59ZnVuY3Rpb24gVHd0KGUpe3N3KGUsbmV3IFhtKGEzZShVeihudyhadih0dyhldyhuZXcgeDEsc3IpLCJFTEsgTGF5ZXJlZCIpLCJMYXllci1iYXNlZCBhbGdvcml0aG0gcHJvdmlkZWQgYnkgdGhlIEVjbGlwc2UgTGF5b3V0IEtlcm5lbC4gQXJyYW5nZXMgYXMgbWFueSBlZGdlcyBhcyBwb3NzaWJsZSBpbnRvIG9uZSBkaXJlY3Rpb24gYnkgcGxhY2luZyBub2RlcyBpbnRvIHN1YnNlcXVlbnQgbGF5ZXJzLiBUaGlzIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIGRpZmZlcmVudCByb3V0aW5nIHN0eWxlcyAoc3RyYWlnaHQsIG9ydGhvZ29uYWwsIHNwbGluZXMpOyBpZiBvcnRob2dvbmFsIHJvdXRpbmcgaXMgc2VsZWN0ZWQsIGFyYml0cmFyeSBwb3J0IGNvbnN0cmFpbnRzIGFyZSByZXNwZWN0ZWQsIHRodXMgZW5hYmxpbmcgdGhlIGxheW91dCBvZiBibG9jayBkaWFncmFtcyBzdWNoIGFzIGFjdG9yLW9yaWVudGVkIG1vZGVscyBvciBjaXJjdWl0IHNjaGVtYXRpY3MuIEZ1cnRoZXJtb3JlLCBmdWxsIGxheW91dCBvZiBjb21wb3VuZCBncmFwaHMgd2l0aCBjcm9zcy1oaWVyYXJjaHkgZWRnZXMgaXMgc3VwcG9ydGVkIHdoZW4gdGhlIHJlc3BlY3RpdmUgb3B0aW9uIGlzIGFjdGl2YXRlZCBvbiB0aGUgdG9wIGxldmVsLiIpLG5ldyBSZWUpLHNyKSxycygoSEUoKSxKZ2UpLGhlKGxlKHhZLDEpLGl0LDI0NSwwLFt3WSx5WSx2WSxRZ2UsbVksYlldKSkpKSksZ3QoZSxzcixMVGUsSXQob2RlKSksZ3QoZSxzcixNVGUsSXQodERlKSksZ3QoZSxzcixfaGUsSXQoU0IpKSxndChlLHNyLERUZSxJdCh4MCkpLGd0KGUsc3IsT2hlLEl0KEg2KSksZ3QoZSxzcixkZmUsSXQoYjMpKSxndChlLHNyLElUZSxJdCh5NCkpLGd0KGUsc3IsT1RlLEl0KEdUKSksZ3QoZSxzcixOVGUsSXQoS1QpKSxndChlLHNyLFBUZSxJdChjZGUpKSxndChlLHNyLEp5LEl0KG0zKSksZ3QoZSxzcixCVGUsSXQodWRlKSksZ3QoZSxzcixGVGUsSXQodE0pKSxndChlLHNyLFJUZSxJdChrVykpLGd0KGUsc3IsbFRlLEl0KENCKSksZ3QoZSxzcixmVGUsSXQocTYpKSxndChlLHNyLGhUZSxJdCh2dikpLGd0KGUsc3IsZFRlLEl0KFY2KSksZ3QoZSxzcixOUCxwdCgwKSksZ3QoZSxzcixnVGUsSXQoVVQpKSxndChlLHNyLHBUZSxJdChlRGUpKSxndChlLHNyLGJUZSxJdChKeCkpLGd0KGUsc3IsZnAsSXQobERlKSksZ3QoZSxzcix2RyxJdChyRGUpKSxndChlLHNyLHdHLEl0KGlEZSkpLGd0KGUsc3IsYkwsSXQoaGRlKSksZ3QoZSxzcixzZmUsSXQoc0RlKSksZ3QoZSxzcixhZmUsSXQoYURlKSksZ3QoZSxzcix5RyxJdChFVykpLGd0KGUsc3IseEcsSXQoZmRlKSksZ3QoZSxzcixrRyxJdChjRGUpKSxndChlLHNyLEVHLEl0KG9EZSkpLGd0KGUsc3Isb2ZlLEl0KHVEZSkpLGd0KGUsc3IsWmhlLEl0KGczKSksZ3QoZSxzcixlZmUsSXQoZU0pKSxndChlLHNyLHBHLEl0KHJkZSkpLGd0KGUsc3IsYkcsSXQoT01lKSksZ3QoZSxzcixQUCxJdChXa3QpKSxndChlLHNyLEJQLEl0KFlrdCkpLGd0KGUsc3IsRlAsSXQoS2t0KSksZ3QoZSxzcixSUCxJdChHa3QpKSxndChlLHNyLFF3LG5EZSksZ3QoZSxzcixYdyxZTWUpLGd0KGUsc3IsSFAsTU1lKSxndChlLHNyLGpUZSwwKSxndChlLHNyLG9HLHB0KDEpKSxndChlLHNyLE94LGxUKSxndChlLHNyLCRUZSxJdChtdikpLGd0KGUsc3IsTmhlLEl0KE1zKSksZ3QoZSxzcix6VGUsSXQoVlQpKSxndChlLHNyLFZQLEl0KEJrdCkpLGd0KGUsc3IscVRlLEl0KFJkKSksZ3QoZSxzcixDRyxJdChwNCkpLGd0KGUsc3IsbEwsKEhuKCksITApKSxndChlLHNyLEhUZSxJdChiNCkpLGd0KGUsc3IsVlRlLEl0KGd2KSksZ3QoZSxzcix4NixJdChidikpLGd0KGUsc3IsTngsSXQoeFcpKSxndChlLHNyLGhULEl0KGFkZSkpLGd0KGUsc3IsZ2ZlLExNZSksZ3QoZSxzcixmVCxJdChkMykpLGd0KGUsc3IsVVRlLEl0KHdXKSksZ3QoZSxzcixkVCxJdCh2NCkpLGd0KGUsc3IsR1RlLEl0KHFrdCkpLGd0KGUsc3IsS1RlLEl0KEpNZSkpLGd0KGUsc3IsV1RlLFFNZSksZ3QoZSxzcixZVGUsSXQoamt0KSksZ3QoZSxzcixYVGUsSXQoJGt0KSksZ3QoZSxzcixRVGUsSXQoemt0KSksZ3QoZSxzcixKVGUsSXQoUmt0KSksZ3QoZSxzcixRRWUsSXQobGRlKSksZ3QoZSxzcixxUCxJdChwdikpLGd0KGUsc3IsVmhlLEl0KHpiKSksZ3QoZSxzcixYRWUsSXQobk0pKSxndChlLHNyLFpFZSxJdChRdSkpLGd0KGUsc3IsemhlLEl0KGR2KSksZ3QoZSxzcixwTCxJdChKTCkpLGd0KGUsc3IsblRlLEl0KGYzKSksZ3QoZSxzcixvVGUsSXQoU01lKSksZ3QoZSxzcixZaGUsSXQoWjFlKSksZ3QoZSxzcixkRyxJdChUQikpLGd0KGUsc3IsV2hlLEl0KGVkZSkpLGd0KGUsc3IsR0VlLEl0KFZNZSkpLGd0KGUsc3IsS0VlLEl0KFVNZSkpLGd0KGUsc3IsZkcsSXQoak1lKSksZ3QoZSxzcixrNixJdCh5VykpLGd0KGUsc3IsUWhlLEl0KHNkZSkpLGd0KGUsc3IsVUVlLEl0KGlkZSkpLGd0KGUsc3IsSmhlLEl0KEtNZSkpLGd0KGUsc3IsY1RlLEl0KElNZSkpLGd0KGUsc3IsdVRlLEl0KG5kZSkpLGd0KGUsc3IsU0csSXQoSjFlKSksZ3QoZSxzcixYaGUsSXQoR01lKSksZ3QoZSxzcixtVGUsSXQobFcpKSxndChlLHNyLHZUZSxJdChFTWUpKSxndChlLHNyLG5mZSxJdCh1VykpLGd0KGUsc3IsbUcsSXQoQk1lKSksZ3QoZSxzcixyZmUsSXQoUE1lKSksZ3QoZSxzcixpZmUsSXQoRk1lKSksZ3QoZSxzcixQeCxJdChxVCkpLGd0KGUsc3IsWlRlLEl0KGNjKSksZ3QoZSxzcixBaGUsSXQoeDIpKSxndChlLHNyLGVDZSxJdChqZCkpLGd0KGUsc3IsY0csSXQodGRlKSksZ3QoZSxzcixLaGUsSXQoX01lKSksZ3QoZSxzcix0Q2UsSXQoazIpKSxndChlLHNyLG5DZSxJdChRTCkpLGd0KGUsc3IsckNlLEl0KGJXKSksZ3QoZSxzcixpQ2UsSXQocDMpKSxndChlLHNyLHBmZSxJdChYTWUpKSxndChlLHNyLGJmZSxJdChIVCkpLGd0KGUsc3IscWhlLEl0KHpNZSkpLGd0KGUsc3IsSGhlLEl0KHFNZSkpLGd0KGUsc3IsX0csSXQodzQpKSxndChlLHNyLFdFZSxJdChYMWUpKSxndChlLHNyLFVoZSxJdChITWUpKSxndChlLHNyLHdUZSxJdChwVykpLGd0KGUsc3IseVRlLEl0KGdXKSksZ3QoZSxzcixzQ2UsSXQodlcpKSxndChlLHNyLEdoZSxJdCgkTWUpKSxndChlLHNyLGdHLEl0KFpMKSksZ3QoZSxzcixhQ2UsSXQoX0IpKSxndChlLHNyLFZFZSxJdChBTWUpKSxndChlLHNyLFlFZSxJdChaTWUpKSxndChlLHNyLHRmZSxJdChETWUpKSxndChlLHNyLHJUZSxJdChPa3QpKSxndChlLHNyLGlUZSxJdChOa3QpKSxndChlLHNyLGVUZSxJdChGa3QpKSxndChlLHNyLHNUZSxJdChQa3QpKSxndChlLHNyLEFHLEl0KFJNZSkpLGd0KGUsc3IsdFRlLEl0KG1XKSksZ3QoZSxzcixhVGUsSXQoZFcpKSxndChlLHNyLFRHLEl0KHlnKSksZ3QoZSxzcixFVGUsSXQoQ01lKSksZ3QoZSxzcix1ZmUsSXQoaFcpKSxndChlLHNyLGxmZSxJdChUTWUpKSxndChlLHNyLGtUZSxJdChmVykpLGd0KGUsc3IsY2ZlLEl0KGc0KSksZ3QoZSxzcix4VGUsSXQoUTFlKSksZ3QoZSxzcixKRWUsSXQoTk1lKSl9ZnVuY3Rpb24gbk9uKGUpe1dyKGUuYSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJhbnlTaW1wbGVUeXBlIl0pKSxXcihlLmIsbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwiYW55VHlwZSIsQmYsWFBdKSksV3IobChPZSh0dChlLmIpLDApLDM1KSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW0JmLGEwZSxfaSwiOm1peGVkIl0pKSxXcihsKE9lKHR0KGUuYiksMSksMzUpLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbQmYsYTBlLE9TZSxjMGUsX2ksIjoxIixPNXQsImxheCJdKSksV3IobChPZSh0dChlLmIpLDIpLDM1KSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW0JmLEw1dCxPU2UsYzBlLF9pLCI6MiIsTzV0LCJsYXgiXSkpLFdyKGUuYyxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJhbnlVUkkiLFJmLHMxXSkpLFdyKGUuZCxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJiYXNlNjRCaW5hcnkiLFJmLHMxXSkpLFdyKGUuZSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLEN4LFJmLHMxXSkpLFdyKGUuZixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJib29sZWFuOk9iamVjdCIsaG8sQ3hdKSksV3IoZS5nLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksU0xdKSksV3IoZS5pLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksImJ5dGU6T2JqZWN0IixobyxTTF0pKSxXcihlLmosbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwiZGF0ZSIsUmYsczFdKSksV3IoZS5rLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksImRhdGVUaW1lIixSZixzMV0pKSxXcihlLm4sbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwiZGVjaW1hbCIsUmYsczFdKSksV3IoZS5vLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksX0wsUmYsczFdKSksV3IoZS5wLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksImRvdWJsZTpPYmplY3QiLGhvLF9MXSkpLFdyKGUucSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJkdXJhdGlvbiIsUmYsczFdKSksV3IoZS5zLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksIkVOVElUSUVTIixobyxONXQsTlNlLCIxIl0pKSxXcihlLnIsbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSxONXQsbzBlLFBTZV0pKSxXcihlLnQsbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSxQU2UsaG8scktdKSksV3IoZS51LGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksQUwsUmYsczFdKSksV3IoZS52LGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksImZsb2F0Ok9iamVjdCIsaG8sQUxdKSksV3IoZS53LGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksImdEYXkiLFJmLHMxXSkpLFdyKGUuQixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJnTW9udGgiLFJmLHMxXSkpLFdyKGUuQSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJnTW9udGhEYXkiLFJmLHMxXSkpLFdyKGUuQyxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJnWWVhciIsUmYsczFdKSksV3IoZS5ELGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksImdZZWFyTW9udGgiLFJmLHMxXSkpLFdyKGUuRixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJoZXhCaW5hcnkiLFJmLHMxXSkpLFdyKGUuRyxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJJRCIsaG8scktdKSksV3IoZS5ILGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksIklEUkVGIixobyxyS10pKSxXcihlLkosbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwiSURSRUZTIixobyxQNXQsTlNlLCIxIl0pKSxXcihlLkksbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSxQNXQsbzBlLCJJRFJFRiJdKSksV3IoZS5LLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksTExdKSksV3IoZS5NLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksQlNlXSkpLFdyKGUuTCxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJpbnQ6T2JqZWN0IixobyxMTF0pKSxXcihlLlAsbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwibGFuZ3VhZ2UiLGhvLHUwZSxsMGUsQjV0XSkpLFdyKGUuUSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLE1MXSkpLFdyKGUuUixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJsb25nOk9iamVjdCIsaG8sTUxdKSksV3IoZS5TLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksIk5hbWUiLGhvLHUwZSxsMGUsRlNlXSkpLFdyKGUuVCxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLHJLLGhvLCJOYW1lIixsMGUsRjV0XSkpLFdyKGUuVSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJuZWdhdGl2ZUludGVnZXIiLGhvLFI1dCx0QiwiLTEiXSkpLFdyKGUuVixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLFJTZSxobyx1MGUsbDBlLCJcXGMrIl0pKSxXcihlLlgsbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwiTk1UT0tFTlMiLGhvLGo1dCxOU2UsIjEiXSkpLFdyKGUuVyxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLGo1dCxvMGUsUlNlXSkpLFdyKGUuWSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLGpTZSxobyxCU2UsbkIsIjAiXSkpLFdyKGUuWixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLFI1dCxobyxCU2UsdEIsIjAiXSkpLFdyKGUuJCxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCQ1dCxobyxJbGUsUmYsInJlcGxhY2UiXSkpLFdyKGUuXyxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJOT1RBVElPTiIsUmYsczFdKSksV3IoZS5hYixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJwb3NpdGl2ZUludGVnZXIiLGhvLGpTZSxuQiwiMSJdKSksV3IoZS5iYixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25fLl90eXBlIixCZiwiZW1wdHkiXSkpLFdyKGwoT2UodHQoZS5iYiksMCksMzUpLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbQmYsWkcsX2ksImRhdGEiXSkpLFdyKGwoT2UodHQoZS5iYiksMSksMzUpLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbQmYsWkcsX2ksd1NlXSkpLFdyKGUuY2IsbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwiUU5hbWUiLFJmLHMxXSkpLFdyKGUuZGIsbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSxETF0pKSxXcihlLmViLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksInNob3J0Ok9iamVjdCIsaG8sRExdKSksV3IoZS5mYixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJzaW1wbGVBbnlUeXBlIixCZixRUF0pKSxXcihsKE9lKHR0KGUuZmIpLDApLDM1KSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCI6MyIsQmYsUVBdKSksV3IobChPZSh0dChlLmZiKSwxKSwzNSksbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwiOjQiLEJmLFFQXSkpLFdyKGwoT2UodHQoZS5mYiksMiksMTkpLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksIjo1IixCZixRUF0pKSxXcihlLmdiLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksSWxlLFJmLCJwcmVzZXJ2ZSJdKSksV3IoZS5oYixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJ0aW1lIixSZixzMV0pKSxXcihlLmliLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksdTBlLGhvLCQ1dCxSZixzMV0pKSxXcihlLmpiLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksejV0LHRCLCIyNTUiLG5CLCIwIl0pKSxXcihlLmtiLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksInVuc2lnbmVkQnl0ZTpPYmplY3QiLGhvLHo1dF0pKSxXcihlLmxiLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2kscTV0LHRCLCI0Mjk0OTY3Mjk1IixuQiwiMCJdKSksV3IoZS5tYixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJ1bnNpZ25lZEludDpPYmplY3QiLGhvLHE1dF0pKSxXcihlLm5iLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksInVuc2lnbmVkTG9uZyIsaG8salNlLHRCLEg1dCxuQiwiMCJdKSksV3IoZS5vYixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLFY1dCx0QiwiNjU1MzUiLG5CLCIwIl0pKSxXcihlLnBiLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksInVuc2lnbmVkU2hvcnQ6T2JqZWN0IixobyxWNXRdKSksV3IoZS5xYixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCIiLEJmLFhQXSkpLFdyKGwoT2UodHQoZS5xYiksMCksMzUpLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbQmYsYTBlLF9pLCI6bWl4ZWQiXSkpLFdyKGwoT2UodHQoZS5xYiksMSksMTkpLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbQmYsWkcsX2ksInhtbG5zOnByZWZpeCJdKSksV3IobChPZSh0dChlLnFiKSwyKSwxOSksbGksaGUobGUoenQsMSksZHQsMiw2LFtCZixaRyxfaSwieHNpOnNjaGVtYUxvY2F0aW9uIl0pKSxXcihsKE9lKHR0KGUucWIpLDMpLDM1KSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW0JmLGVLLF9pLCJjREFUQSIsdEssSlBdKSksV3IobChPZSh0dChlLnFiKSw0KSwzNSksbGksaGUobGUoenQsMSksZHQsMiw2LFtCZixlSyxfaSwiY29tbWVudCIsdEssSlBdKSksV3IobChPZSh0dChlLnFiKSw1KSwxOSksbGksaGUobGUoenQsMSksZHQsMiw2LFtCZixlSyxfaSxVNXQsdEssSlBdKSksV3IobChPZSh0dChlLnFiKSw2KSwzNSksbGksaGUobGUoenQsMSksZHQsMiw2LFtCZixlSyxfaSxLZmUsdEssSlBdKSl9ZnVuY3Rpb24gYWkoZSl7cmV0dXJuIHZuKCJfVUlfRU1GRGlhZ25vc3RpY19tYXJrZXIiLGUpPyJFTUYgUHJvYmxlbSI6dm4oIl9VSV9DaXJjdWxhckNvbnRhaW5tZW50X2RpYWdub3N0aWMiLGUpPyJBbiBvYmplY3QgbWF5IG5vdCBjaXJjdWxhcmx5IGNvbnRhaW4gaXRzZWxmIjp2bihfNHQsZSk/Ildyb25nIGNoYXJhY3Rlci4iOnZuKEE0dCxlKT8iSW52YWxpZCByZWZlcmVuY2UgbnVtYmVyLiI6dm4oVkcsZSk/IkEgY2hhcmFjdGVyIGlzIHJlcXVpcmVkIGFmdGVyIFxcLiI6dm4oZTBlLGUpPyInPycgaXMgbm90IGV4cGVjdGVkLiAgJyg/Oicgb3IgJyg/PScgb3IgJyg/IScgb3IgJyg/PCcgb3IgJyg/Iycgb3IgJyg/Pic/Ijp2bihMNHQsZSk/IicoPzwnIG9yICcoPzwhJyBpcyBleHBlY3RlZC4iOnZuKE00dCxlKT8iQSBjb21tZW50IGlzIG5vdCB0ZXJtaW5hdGVkLiI6dm4ob3YsZSk/IicpJyBpcyBleHBlY3RlZC4iOnZuKHlTZSxlKT8iVW5leHBlY3RlZCBlbmQgb2YgdGhlIHBhdHRlcm4gaW4gYSBtb2RpZmllciBncm91cC4iOnZuKEQ0dCxlKT8iJzonIGlzIGV4cGVjdGVkLiI6dm4oSTR0LGUpPyJVbmV4cGVjdGVkIGVuZCBvZiB0aGUgcGF0dGVybiBpbiBhIGNvbmRpdGlvbmFsIGdyb3VwLiI6dm4oTzR0LGUpPyJBIGJhY2sgcmVmZXJlbmNlIG9yIGFuIGFuY2hvciBvciBhIGxvb2thaGVhZCBvciBhIGxvb2stYmVoaW5kIGlzIGV4cGVjdGVkIGluIGEgY29uZGl0aW9uYWwgcGF0dGVybi4iOnZuKE40dCxlKT8iVGhlcmUgYXJlIG1vcmUgdGhhbiB0aHJlZSBjaG9pY2VzIGluIGEgY29uZGl0aW9uYWwgZ3JvdXAuIjp2bihQNHQsZSk/IkEgY2hhcmFjdGVyIGluIFUrMDA0MC1VKzAwNWYgbXVzdCBmb2xsb3cgXFxjLiI6dm4oQjR0LGUpPyJBICd7JyBpcyByZXF1aXJlZCBiZWZvcmUgYSBjaGFyYWN0ZXIgY2F0ZWdvcnkuIjp2bihGNHQsZSk/IkEgcHJvcGVydHkgbmFtZSBpcyBub3QgY2xvc2VkIGJ5ICd9Jy4iOnZuKHhTZSxlKT8iVW5leHBlY3RlZCBtZXRhIGNoYXJhY3Rlci4iOnZuKHQwZSxlKT8iVW5rbm93biBwcm9wZXJ0eS4iOnZuKGtTZSxlKT8iQSBQT1NJWCBjaGFyYWN0ZXIgY2xhc3MgbXVzdCBiZSBjbG9zZWQgYnkgJzpdJy4iOnZuKFVHLGUpPyJVbmV4cGVjdGVkIGVuZCBvZiB0aGUgcGF0dGVybiBpbiBhIGNoYXJhY3RlciBjbGFzcy4iOnZuKFI0dCxlKT8iVW5rbm93biBuYW1lIGZvciBhIFBPU0lYIGNoYXJhY3RlciBjbGFzcy4iOnZuKCJwYXJzZXIuY2MuNCIsZSk/IictJyBpcyBpbnZhbGlkIGhlcmUuIjp2bihqNHQsZSk/IiddJyBpcyBleHBlY3RlZC4iOnZuKEVTZSxlKT8iJ1snIGlzIGludmFsaWQgaW4gYSBjaGFyYWN0ZXIgY2xhc3MuICBXcml0ZSAnXFxbJy4iOnZuKFRTZSxlKT8iJ10nIGlzIGludmFsaWQgaW4gYSBjaGFyYWN0ZXIgY2xhc3MuICBXcml0ZSAnXFxdJy4iOnZuKG4wZSxlKT8iJy0nIGlzIGFuIGludmFsaWQgY2hhcmFjdGVyIHJhbmdlLiBXcml0ZSAnXFwtJy4iOnZuKCQ0dCxlKT8iJ1snIGlzIGV4cGVjdGVkLiI6dm4oejR0LGUpPyInKScgb3IgJy1bJyBvciAnK1snIG9yICcmWycgaXMgZXhwZWN0ZWQuIjp2bihxNHQsZSk/IlRoZSByYW5nZSBlbmQgY29kZSBwb2ludCBpcyBsZXNzIHRoYW4gdGhlIHN0YXJ0IGNvZGUgcG9pbnQuIjp2bih3MixlKT8iSW52YWxpZCBVbmljb2RlIGhleCBub3RhdGlvbi4iOnZuKEg0dCxlKT8iT3ZlcmZsb3cgaW4gYSBoZXggbm90YXRpb24uIjp2bihWNHQsZSk/IidcXHh7JyBtdXN0IGJlIGNsb3NlZCBieSAnfScuIjp2bihVNHQsZSk/IkludmFsaWQgVW5pY29kZSBjb2RlIHBvaW50LiI6dm4oRzR0LGUpPyJBbiBhbmNob3IgbXVzdCBub3QgYmUgaGVyZS4iOnZuKGJmLGUpPyJUaGlzIGV4cHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBvcHRpb24gc2V0dGluZy4iOnZuKEs0dCxlKT8iSW52YWxpZCBxdWFudGlmaWVyLiBBIGRpZ2l0IGlzIGV4cGVjdGVkLiI6dm4oVzR0LGUpPyJJbnZhbGlkIHF1YW50aWZpZXIuIEludmFsaWQgcXVhbnRpdHkgb3IgYSAnfScgaXMgbWlzc2luZy4iOnZuKFk0dCxlKT8iSW52YWxpZCBxdWFudGlmaWVyLiBBIGRpZ2l0IG9yICd9JyBpcyBleHBlY3RlZC4iOnZuKFg0dCxlKT8iSW52YWxpZCBxdWFudGlmaWVyLiBBIG1pbiBxdWFudGl0eSBtdXN0IGJlIDw9IGEgbWF4IHF1YW50aXR5LiI6dm4oQ1NlLGUpPyJJbnZhbGlkIHF1YW50aWZpZXIuIEEgcXVhbnRpdHkgdmFsdWUgb3ZlcmZsb3cuIjp2bigiX1VJX1BhY2thZ2VSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsZSk/IkVjb3JlIFBhY2thZ2UgUmVnaXN0cnkgZm9yIEdlbmVyYXRlZCBQYWNrYWdlcyI6dm4oIl9VSV9EeW5hbWljUGFja2FnZVJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50IixlKT8iRWNvcmUgUGFja2FnZSBSZWdpc3RyeSBmb3IgRHluYW1pYyBQYWNrYWdlcyI6dm4oIl9VSV9GYWN0b3J5UmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLGUpPyJFY29yZSBGYWN0b3J5IE92ZXJyaWRlIFJlZ2lzdHJ5Ijp2bigiX1VJX1VSSUV4dGVuc2lvblBhcnNlclJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50IixlKT8iVVJJIEV4dGVuc2lvbiBQYXJzZXIgUmVnaXN0cnkiOnZuKCJfVUlfVVJJUHJvdG9jb2xQYXJzZXJSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsZSk/IlVSSSBQcm90b2NvbCBQYXJzZXIgUmVnaXN0cnkiOnZuKCJfVUlfVVJJQ29udGVudFBhcnNlclJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50IixlKT8iVVJJIENvbnRlbnQgUGFyc2VyIFJlZ2lzdHJ5Ijp2bigiX1VJX0NvbnRlbnRIYW5kbGVyUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLGUpPyJDb250ZW50IEhhbmRsZXIgUmVnaXN0cnkiOnZuKCJfVUlfVVJJTWFwcGluZ1JlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50IixlKT8iVVJJIENvbnZlcnRlciBNYXBwaW5nIFJlZ2lzdHJ5Ijp2bigiX1VJX1BhY2thZ2VSZWdpc3RyeUltcGxlbWVudGF0aW9uX2V4dGVuc2lvbnBvaW50IixlKT8iRWNvcmUgUGFja2FnZSBSZWdpc3RyeSBJbXBsZW1lbnRhdGlvbiI6dm4oIl9VSV9WYWxpZGF0aW9uRGVsZWdhdGVSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsZSk/IlZhbGlkYXRpb24gRGVsZWdhdGUgUmVnaXN0cnkiOnZuKCJfVUlfU2V0dGluZ0RlbGVnYXRlUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLGUpPyJGZWF0dXJlIFNldHRpbmcgRGVsZWdhdGUgRmFjdG9yeSBSZWdpc3RyeSI6dm4oIl9VSV9JbnZvY2F0aW9uRGVsZWdhdGVSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsZSk/Ik9wZXJhdGlvbiBJbnZvY2F0aW9uIERlbGVnYXRlIEZhY3RvcnkgUmVnaXN0cnkiOnZuKCJfVUlfRUNsYXNzSW50ZXJmYWNlTm90QWJzdHJhY3RfZGlhZ25vc3RpYyIsZSk/IkEgY2xhc3MgdGhhdCBpcyBhbiBpbnRlcmZhY2UgbXVzdCBhbHNvIGJlIGFic3RyYWN0Ijp2bigiX1VJX0VDbGFzc05vQ2lyY3VsYXJTdXBlclR5cGVzX2RpYWdub3N0aWMiLGUpPyJBIGNsYXNzIG1heSBub3QgYmUgYSBzdXBlciB0eXBlIG9mIGl0c2VsZiI6dm4oIl9VSV9FQ2xhc3NOb3RXZWxsRm9ybWVkTWFwRW50cnlOb0luc3RhbmNlQ2xhc3NOYW1lX2RpYWdub3N0aWMiLGUpPyJBIGNsYXNzIHRoYXQgaW5oZXJpdHMgZnJvbSBhIG1hcCBlbnRyeSBjbGFzcyBtdXN0IGhhdmUgaW5zdGFuY2UgY2xhc3MgbmFtZSAnamF2YS51dGlsLk1hcCRFbnRyeSciOnZuKCJfVUlfRVJlZmVyZW5jZU9wcG9zaXRlT2ZPcHBvc2l0ZUluY29uc2lzdGVudF9kaWFnbm9zdGljIixlKT8iVGhlIG9wcG9zaXRlIG9mIHRoZSBvcHBvc2l0ZSBtYXkgbm90IGJlIGEgcmVmZXJlbmNlIGRpZmZlcmVudCBmcm9tIHRoaXMgb25lIjp2bigiX1VJX0VSZWZlcmVuY2VPcHBvc2l0ZU5vdEZlYXR1cmVPZlR5cGVfZGlhZ25vc3RpYyIsZSk/IlRoZSBvcHBvc2l0ZSBtdXN0IGJlIGEgZmVhdHVyZSBvZiB0aGUgcmVmZXJlbmNlJ3MgdHlwZSI6dm4oIl9VSV9FUmVmZXJlbmNlVHJhbnNpZW50T3Bwb3NpdGVOb3RUcmFuc2llbnRfZGlhZ25vc3RpYyIsZSk/IlRoZSBvcHBvc2l0ZSBvZiBhIHRyYW5zaWVudCByZWZlcmVuY2UgbXVzdCBiZSB0cmFuc2llbnQgaWYgaXQgaXMgcHJveHkgcmVzb2x2aW5nIjp2bigiX1VJX0VSZWZlcmVuY2VPcHBvc2l0ZUJvdGhDb250YWlubWVudF9kaWFnbm9zdGljIixlKT8iVGhlIG9wcG9zaXRlIG9mIGEgY29udGFpbm1lbnQgcmVmZXJlbmNlIG11c3Qgbm90IGJlIGEgY29udGFpbm1lbnQgcmVmZXJlbmNlIjp2bigiX1VJX0VSZWZlcmVuY2VDb25zaXN0ZW50VW5pcXVlX2RpYWdub3N0aWMiLGUpPyJBIGNvbnRhaW5tZW50IG9yIGJpZGlyZWN0aW9uYWwgcmVmZXJlbmNlIG11c3QgYmUgdW5pcXVlIGlmIGl0cyB1cHBlciBib3VuZCBpcyBkaWZmZXJlbnQgZnJvbSAxIjp2bigiX1VJX0VUeXBlZEVsZW1lbnROb1R5cGVfZGlhZ25vc3RpYyIsZSk/IlRoZSB0eXBlZCBlbGVtZW50IG11c3QgaGF2ZSBhIHR5cGUiOnZuKCJfVUlfRUF0dHJpYnV0ZU5vRGF0YVR5cGVfZGlhZ25vc3RpYyIsZSk/IlRoZSBnZW5lcmljIGF0dHJpYnV0ZSB0eXBlIG11c3Qgbm90IHJlZmVyIHRvIGEgY2xhc3MiOnZuKCJfVUlfRVJlZmVyZW5jZU5vQ2xhc3NfZGlhZ25vc3RpYyIsZSk/IlRoZSBnZW5lcmljIHJlZmVyZW5jZSB0eXBlIG11c3Qgbm90IHJlZmVyIHRvIGEgZGF0YSB0eXBlIjp2bigiX1VJX0VHZW5lcmljVHlwZU5vVHlwZVBhcmFtZXRlckFuZENsYXNzaWZpZXJfZGlhZ25vc3RpYyIsZSk/IkEgZ2VuZXJpYyB0eXBlIGNhbid0IHJlZmVyIHRvIGJvdGggYSB0eXBlIHBhcmFtZXRlciBhbmQgYSBjbGFzc2lmaWVyIjp2bigiX1VJX0VHZW5lcmljVHlwZU5vQ2xhc3NfZGlhZ25vc3RpYyIsZSk/IkEgZ2VuZXJpYyBzdXBlciB0eXBlIG11c3QgcmVmZXIgdG8gYSBjbGFzcyI6dm4oIl9VSV9FR2VuZXJpY1R5cGVOb1R5cGVQYXJhbWV0ZXJPckNsYXNzaWZpZXJfZGlhZ25vc3RpYyIsZSk/IkEgZ2VuZXJpYyB0eXBlIGluIHRoaXMgY29udGV4dCBtdXN0IHJlZmVyIHRvIGEgY2xhc3NpZmllciBvciBhIHR5cGUgcGFyYW1ldGVyIjp2bigiX1VJX0VHZW5lcmljVHlwZUJvdW5kc09ubHlGb3JUeXBlQXJndW1lbnRfZGlhZ25vc3RpYyIsZSk/IkEgZ2VuZXJpYyB0eXBlIG1heSBoYXZlIGJvdW5kcyBvbmx5IHdoZW4gdXNlZCBhcyBhIHR5cGUgYXJndW1lbnQiOnZuKCJfVUlfRUdlbmVyaWNUeXBlTm9VcHBlckFuZExvd2VyQm91bmRfZGlhZ25vc3RpYyIsZSk/IkEgZ2VuZXJpYyB0eXBlIG11c3Qgbm90IGhhdmUgYm90aCBhIGxvd2VyIGFuZCBhbiB1cHBlciBib3VuZCI6dm4oIl9VSV9FR2VuZXJpY1R5cGVOb1R5cGVQYXJhbWV0ZXJPckNsYXNzaWZpZXJBbmRCb3VuZF9kaWFnbm9zdGljIixlKT8iQSBnZW5lcmljIHR5cGUgd2l0aCBib3VuZHMgbXVzdCBub3QgYWxzbyByZWZlciB0byBhIHR5cGUgcGFyYW1ldGVyIG9yIGNsYXNzaWZpZXIiOnZuKCJfVUlfRUdlbmVyaWNUeXBlTm9Bcmd1bWVudHNfZGlhZ25vc3RpYyIsZSk/IkEgZ2VuZXJpYyB0eXBlIG1heSBoYXZlIGFyZ3VtZW50cyBvbmx5IGlmIGl0IHJlZmVycyB0byBhIGNsYXNzaWZpZXIiOnZuKCJfVUlfRUdlbmVyaWNUeXBlT3V0T2ZTY29wZVR5cGVQYXJhbWV0ZXJfZGlhZ25vc3RpYyIsZSk/IkEgZ2VuZXJpYyB0eXBlIG1heSBvbmx5IHJlZmVyIHRvIGEgdHlwZSBwYXJhbWV0ZXIgdGhhdCBpcyBpbiBzY29wZSI6ZX1mdW5jdGlvbiByT24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKO2Uucnx8KGUucj0hMCxGdShlLCJncmFwaCIpLENWKGUsImdyYXBoIiksU1YoZSx4VCksa04oZS5vLCJUIikscXIoZGMoZS5hKSxlLnApLHFyKGRjKGUuZiksZS5hKSxxcihkYyhlLm4pLGUuZikscXIoZGMoZS5nKSxlLm4pLHFyKGRjKGUuYyksZS5uKSxxcihkYyhlLmkpLGUuYykscXIoZGMoZS5qKSxlLmMpLHFyKGRjKGUuZCksZS5mKSxxcihkYyhlLmUpLGUuYSksemMoZS5wLHdPbixtM3QsITAsITAsITEpLFY9SjUoZS5wLGUucCwic2V0UHJvcGVydHkiKSxKPWkwdChWKSxFPUtnKGUubyksQz0obj0ocj1uZXcgUXYsciksbikscXIoKCFFLmQmJihFLmQ9bmV3IFlzKFdvLEUsMSkpLEUuZCksQyksTD10b2UoSiksQXhlKEMsTCksZ1UoVixFLGxTZSksRT10b2UoSiksZ1UoVixFLFRMKSxWPUo1KGUucCxudWxsLCJnZXRQcm9wZXJ0eSIpLEo9aTB0KFYpLEU9S2coZS5vKSxDPXRvZShKKSxxcigoIUUuZCYmKEUuZD1uZXcgWXMoV28sRSwxKSksRS5kKSxDKSxnVShWLEUsbFNlKSxFPXRvZShKKSx6PSQxKFYsRSxudWxsKSx6JiZ6Lm9qKCksVj1KNShlLnAsZS53Yi5lLCJoYXNQcm9wZXJ0eSIpLEU9S2coZS5vKSxDPShhPShvPW5ldyBRdixvKSxhKSxxcigoIUUuZCYmKEUuZD1uZXcgWXMoV28sRSwxKSksRS5kKSxDKSxnVShWLEUsbFNlKSxWPUo1KGUucCxlLnAsImNvcHlQcm9wZXJ0aWVzIiksYWMoVixlLnAsSGZlKSxWPUo1KGUucCxudWxsLCJnZXRBbGxQcm9wZXJ0aWVzIiksRT1LZyhlLndiLlApLEM9S2coZS5vKSxxcigoIUUuZCYmKEUuZD1uZXcgWXMoV28sRSwxKSksRS5kKSxDKSxMPShmPShnPW5ldyBRdixnKSxmKSxxcigoIUMuZCYmKEMuZD1uZXcgWXMoV28sQywxKSksQy5kKSxMKSxDPUtnKGUud2IuTSkscXIoKCFFLmQmJihFLmQ9bmV3IFlzKFdvLEUsMSkpLEUuZCksQyksQj0kMShWLEUsbnVsbCksQiYmQi5vaigpLHpjKGUuYSxvQyxyNHQsITAsITEsITApLHNzKGwoT2UodHQoZS5hKSwwKSwxOSksZS5rLG51bGwscDR0LDAsLTEsb0MsITEsITEsITAsITAsITEsITEsITEpLHpjKGUuZixvRixzNHQsITAsITEsITApLHNzKGwoT2UodHQoZS5mKSwwKSwxOSksZS5nLGwoT2UodHQoZS5nKSwwKSwxOSksImxhYmVscyIsMCwtMSxvRiwhMSwhMSwhMCwhMCwhMSwhMSwhMSksT3MobChPZSh0dChlLmYpLDEpLDM1KSxlLndiLl8sYjR0LG51bGwsMCwxLG9GLCExLCExLCEwLCExLCEwLCExKSx6YyhlLm4sY0YsIkVsa1NoYXBlIiwhMCwhMSwhMCksT3MobChPZSh0dChlLm4pLDApLDM1KSxlLndiLnQsVmZlLHNULDEsMSxjRiwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLm4pLDEpLDM1KSxlLndiLnQsVWZlLHNULDEsMSxjRiwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLm4pLDIpLDM1KSxlLndiLnQsIngiLHNULDEsMSxjRiwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLm4pLDMpLDM1KSxlLndiLnQsInkiLHNULDEsMSxjRiwhMSwhMSwhMCwhMSwhMCwhMSksVj1KNShlLm4sbnVsbCwic2V0RGltZW5zaW9ucyIpLGFjKFYsZS53Yi50LFVmZSksYWMoVixlLndiLnQsVmZlKSxWPUo1KGUubixudWxsLCJzZXRMb2NhdGlvbiIpLGFjKFYsZS53Yi50LCJ4IiksYWMoVixlLndiLnQsInkiKSx6YyhlLmcsZWMsb1NlLCExLCExLCEwKSxzcyhsKE9lKHR0KGUuZyksMCksMTkpLGUuZixsKE9lKHR0KGUuZiksMCksMTkpLEdmZSwwLDEsZWMsITEsITEsITAsITEsITEsITEsITEpLE9zKGwoT2UodHQoZS5nKSwxKSwzNSksZS53Yi5fLEtmZSwiIiwwLDEsZWMsITEsITEsITAsITEsITAsITEpLHpjKGUuYyxfcixhNHQsITAsITEsITApLHNzKGwoT2UodHQoZS5jKSwwKSwxOSksZS5kLGwoT2UodHQoZS5kKSwxKSwxOSksIm91dGdvaW5nRWRnZXMiLDAsLTEsX3IsITEsITEsITAsITEsITAsITEsITEpLHNzKGwoT2UodHQoZS5jKSwxKSwxOSksZS5kLGwoT2UodHQoZS5kKSwyKSwxOSksImluY29taW5nRWRnZXMiLDAsLTEsX3IsITEsITEsITAsITEsITAsITEsITEpLHpjKGUuaSxBaSxjU2UsITEsITEsITApLHNzKGwoT2UodHQoZS5pKSwwKSwxOSksZS5qLGwoT2UodHQoZS5qKSwwKSwxOSksInBvcnRzIiwwLC0xLEFpLCExLCExLCEwLCEwLCExLCExLCExKSxzcyhsKE9lKHR0KGUuaSksMSksMTkpLGUuaSxsKE9lKHR0KGUuaSksMiksMTkpLFdmZSwwLC0xLEFpLCExLCExLCEwLCEwLCExLCExLCExKSxzcyhsKE9lKHR0KGUuaSksMiksMTkpLGUuaSxsKE9lKHR0KGUuaSksMSksMTkpLEdmZSwwLDEsQWksITEsITEsITAsITEsITEsITEsITEpLHNzKGwoT2UodHQoZS5pKSwzKSwxOSksZS5kLGwoT2UodHQoZS5kKSwwKSwxOSksImNvbnRhaW5lZEVkZ2VzIiwwLC0xLEFpLCExLCExLCEwLCEwLCExLCExLCExKSxPcyhsKE9lKHR0KGUuaSksNCksMzUpLGUud2IuZSxtNHQsbnVsbCwwLDEsQWksITAsITAsITEsITEsITAsITApLHpjKGUuaixIbCx1U2UsITEsITEsITApLHNzKGwoT2UodHQoZS5qKSwwKSwxOSksZS5pLGwoT2UodHQoZS5pKSwwKSwxOSksR2ZlLDAsMSxIbCwhMSwhMSwhMCwhMSwhMSwhMSwhMSksemMoZS5kLGpzLGFTZSwhMSwhMSwhMCksc3MobChPZSh0dChlLmQpLDApLDE5KSxlLmksbChPZSh0dChlLmkpLDMpLDE5KSwiY29udGFpbmluZ05vZGUiLDAsMSxqcywhMSwhMSwhMCwhMSwhMSwhMSwhMSksc3MobChPZSh0dChlLmQpLDEpLDE5KSxlLmMsbChPZSh0dChlLmMpLDApLDE5KSxoU2UsMCwtMSxqcywhMSwhMSwhMCwhMSwhMCwhMSwhMSksc3MobChPZSh0dChlLmQpLDIpLDE5KSxlLmMsbChPZSh0dChlLmMpLDEpLDE5KSxZZmUsMCwtMSxqcywhMSwhMSwhMCwhMSwhMCwhMSwhMSksc3MobChPZSh0dChlLmQpLDMpLDE5KSxlLmUsbChPZSh0dChlLmUpLDUpLDE5KSxmU2UsMCwtMSxqcywhMSwhMSwhMCwhMCwhMSwhMSwhMSksT3MobChPZSh0dChlLmQpLDQpLDM1KSxlLndiLmUsImh5cGVyZWRnZSIsbnVsbCwwLDEsanMsITAsITAsITEsITEsITAsITApLE9zKGwoT2UodHQoZS5kKSw1KSwzNSksZS53Yi5lLG00dCxudWxsLDAsMSxqcywhMCwhMCwhMSwhMSwhMCwhMCksT3MobChPZSh0dChlLmQpLDYpLDM1KSxlLndiLmUsInNlbGZsb29wIixudWxsLDAsMSxqcywhMCwhMCwhMSwhMSwhMCwhMCksT3MobChPZSh0dChlLmQpLDcpLDM1KSxlLndiLmUsImNvbm5lY3RlZCIsbnVsbCwwLDEsanMsITAsITAsITEsITEsITAsITApLHpjKGUuYixxaCxpNHQsITEsITEsITApLE9zKGwoT2UodHQoZS5iKSwwKSwzNSksZS53Yi50LCJ4IixzVCwxLDEscWgsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5iKSwxKSwzNSksZS53Yi50LCJ5IixzVCwxLDEscWgsITEsITEsITAsITEsITAsITEpLFY9SjUoZS5iLG51bGwsInNldCIpLGFjKFYsZS53Yi50LCJ4IiksYWMoVixlLndiLnQsInkiKSx6YyhlLmUsY3MsbzR0LCExLCExLCEwKSxPcyhsKE9lKHR0KGUuZSksMCksMzUpLGUud2IudCwic3RhcnRYIixudWxsLDAsMSxjcywhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLmUpLDEpLDM1KSxlLndiLnQsInN0YXJ0WSIsbnVsbCwwLDEsY3MsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5lKSwyKSwzNSksZS53Yi50LCJlbmRYIixudWxsLDAsMSxjcywhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLmUpLDMpLDM1KSxlLndiLnQsImVuZFkiLG51bGwsMCwxLGNzLCExLCExLCEwLCExLCEwLCExKSxzcyhsKE9lKHR0KGUuZSksNCksMTkpLGUuYixudWxsLCRHLDAsLTEsY3MsITEsITEsITAsITAsITEsITEsITEpLHNzKGwoT2UodHQoZS5lKSw1KSwxOSksZS5kLGwoT2UodHQoZS5kKSwzKSwxOSksR2ZlLDAsMSxjcywhMSwhMSwhMCwhMSwhMSwhMSwhMSksc3MobChPZSh0dChlLmUpLDYpLDE5KSxlLmMsbnVsbCxkU2UsMCwxLGNzLCExLCExLCEwLCExLCEwLCExLCExKSxzcyhsKE9lKHR0KGUuZSksNyksMTkpLGUuYyxudWxsLGdTZSwwLDEsY3MsITEsITEsITAsITEsITAsITEsITEpLHNzKGwoT2UodHQoZS5lKSw4KSwxOSksZS5lLGwoT2UodHQoZS5lKSw5KSwxOSkscFNlLDAsLTEsY3MsITEsITEsITAsITEsITAsITEsITEpLHNzKGwoT2UodHQoZS5lKSw5KSwxOSksZS5lLGwoT2UodHQoZS5lKSw4KSwxOSksYlNlLDAsLTEsY3MsITEsITEsITAsITEsITAsITEsITEpLE9zKGwoT2UodHQoZS5lKSwxMCksMzUpLGUud2IuXyxiNHQsbnVsbCwwLDEsY3MsITEsITEsITAsITEsITAsITEpLFY9SjUoZS5lLG51bGwsInNldFN0YXJ0TG9jYXRpb24iKSxhYyhWLGUud2IudCwieCIpLGFjKFYsZS53Yi50LCJ5IiksVj1KNShlLmUsbnVsbCwic2V0RW5kTG9jYXRpb24iKSxhYyhWLGUud2IudCwieCIpLGFjKFYsZS53Yi50LCJ5IiksemMoZS5rLHV2LCJFbGtQcm9wZXJ0eVRvVmFsdWVNYXBFbnRyeSIsITEsITEsITEpLEU9S2coZS5vKSxDPSh3PSh0PW5ldyBRdix0KSx3KSxxcigoIUUuZCYmKEUuZD1uZXcgWXMoV28sRSwxKSksRS5kKSxDKSxnMnQobChPZSh0dChlLmspLDApLDM1KSxFLCJrZXkiLHV2LCExLCExLCEwLCExKSxPcyhsKE9lKHR0KGUuayksMSksMzUpLGUucyxUTCxudWxsLDAsMSx1diwhMSwhMSwhMCwhMSwhMCwhMSksRWkoZS5vLENnZSwiSVByb3BlcnR5IiwhMCksRWkoZS5zLHdhLCJQcm9wZXJ0eVZhbHVlIiwhMCksdDhlKGUseFQpKX1mdW5jdGlvbiBDd3QoKXtDd3Q9VSx5ZT1XZShBbCxDNiwyOCxJbywxNSwxKSx5ZVs5XT0zNSx5ZVsxMF09MTkseWVbMTNdPTE5LHllWzMyXT01MSx5ZVszM109NDkseWVbMzRdPTMzLEhlKHllLDM1LDM4LDQ5KSx5ZVszOF09MSxIZSh5ZSwzOSw0NSw0OSksSGUoeWUsNDUsNDcsLTcxKSx5ZVs0N109NDksSGUoeWUsNDgsNTgsLTcxKSx5ZVs1OF09NjEseWVbNTldPTQ5LHllWzYwXT0xLHllWzYxXT00OSx5ZVs2Ml09MzMsSGUoeWUsNjMsNjUsNDkpLEhlKHllLDY1LDkxLC0zKSxIZSh5ZSw5MSw5MywzMykseWVbOTNdPTEseWVbOTRdPTMzLHllWzk1XT0tMyx5ZVs5Nl09MzMsSGUoeWUsOTcsMTIzLC0zKSxIZSh5ZSwxMjMsMTgzLDMzKSx5ZVsxODNdPS04NyxIZSh5ZSwxODQsMTkyLDMzKSxIZSh5ZSwxOTIsMjE1LC0xOSkseWVbMjE1XT0zMyxIZSh5ZSwyMTYsMjQ3LC0xOSkseWVbMjQ3XT0zMyxIZSh5ZSwyNDgsMzA2LC0xOSksSGUoeWUsMzA2LDMwOCwzMyksSGUoeWUsMzA4LDMxOSwtMTkpLEhlKHllLDMxOSwzMjEsMzMpLEhlKHllLDMyMSwzMjksLTE5KSx5ZVszMjldPTMzLEhlKHllLDMzMCwzODMsLTE5KSx5ZVszODNdPTMzLEhlKHllLDM4NCw0NTIsLTE5KSxIZSh5ZSw0NTIsNDYxLDMzKSxIZSh5ZSw0NjEsNDk3LC0xOSksSGUoeWUsNDk3LDUwMCwzMyksSGUoeWUsNTAwLDUwMiwtMTkpLEhlKHllLDUwMiw1MDYsMzMpLEhlKHllLDUwNiw1MzYsLTE5KSxIZSh5ZSw1MzYsNTkyLDMzKSxIZSh5ZSw1OTIsNjgxLC0xOSksSGUoeWUsNjgxLDY5OSwzMyksSGUoeWUsNjk5LDcwNiwtMTkpLEhlKHllLDcwNiw3MjAsMzMpLEhlKHllLDcyMCw3MjIsLTg3KSxIZSh5ZSw3MjIsNzY4LDMzKSxIZSh5ZSw3NjgsODM4LC04NyksSGUoeWUsODM4LDg2NCwzMyksSGUoeWUsODY0LDg2NiwtODcpLEhlKHllLDg2Niw5MDIsMzMpLHllWzkwMl09LTE5LHllWzkwM109LTg3LEhlKHllLDkwNCw5MDcsLTE5KSx5ZVs5MDddPTMzLHllWzkwOF09LTE5LHllWzkwOV09MzMsSGUoeWUsOTEwLDkzMCwtMTkpLHllWzkzMF09MzMsSGUoeWUsOTMxLDk3NSwtMTkpLHllWzk3NV09MzMsSGUoeWUsOTc2LDk4MywtMTkpLEhlKHllLDk4Myw5ODYsMzMpLHllWzk4Nl09LTE5LHllWzk4N109MzMseWVbOTg4XT0tMTkseWVbOTg5XT0zMyx5ZVs5OTBdPS0xOSx5ZVs5OTFdPTMzLHllWzk5Ml09LTE5LHllWzk5M109MzMsSGUoeWUsOTk0LDEwMTIsLTE5KSxIZSh5ZSwxMDEyLDEwMjUsMzMpLEhlKHllLDEwMjUsMTAzNywtMTkpLHllWzEwMzddPTMzLEhlKHllLDEwMzgsMTEwNCwtMTkpLHllWzExMDRdPTMzLEhlKHllLDExMDUsMTExNywtMTkpLHllWzExMTddPTMzLEhlKHllLDExMTgsMTE1NCwtMTkpLHllWzExNTRdPTMzLEhlKHllLDExNTUsMTE1OSwtODcpLEhlKHllLDExNTksMTE2OCwzMyksSGUoeWUsMTE2OCwxMjIxLC0xOSksSGUoeWUsMTIyMSwxMjIzLDMzKSxIZSh5ZSwxMjIzLDEyMjUsLTE5KSxIZSh5ZSwxMjI1LDEyMjcsMzMpLEhlKHllLDEyMjcsMTIyOSwtMTkpLEhlKHllLDEyMjksMTIzMiwzMyksSGUoeWUsMTIzMiwxMjYwLC0xOSksSGUoeWUsMTI2MCwxMjYyLDMzKSxIZSh5ZSwxMjYyLDEyNzAsLTE5KSxIZSh5ZSwxMjcwLDEyNzIsMzMpLEhlKHllLDEyNzIsMTI3NCwtMTkpLEhlKHllLDEyNzQsMTMyOSwzMyksSGUoeWUsMTMyOSwxMzY3LC0xOSksSGUoeWUsMTM2NywxMzY5LDMzKSx5ZVsxMzY5XT0tMTksSGUoeWUsMTM3MCwxMzc3LDMzKSxIZSh5ZSwxMzc3LDE0MTUsLTE5KSxIZSh5ZSwxNDE1LDE0MjUsMzMpLEhlKHllLDE0MjUsMTQ0MiwtODcpLHllWzE0NDJdPTMzLEhlKHllLDE0NDMsMTQ2NiwtODcpLHllWzE0NjZdPTMzLEhlKHllLDE0NjcsMTQ3MCwtODcpLHllWzE0NzBdPTMzLHllWzE0NzFdPS04Nyx5ZVsxNDcyXT0zMyxIZSh5ZSwxNDczLDE0NzUsLTg3KSx5ZVsxNDc1XT0zMyx5ZVsxNDc2XT0tODcsSGUoeWUsMTQ3NywxNDg4LDMzKSxIZSh5ZSwxNDg4LDE1MTUsLTE5KSxIZSh5ZSwxNTE1LDE1MjAsMzMpLEhlKHllLDE1MjAsMTUyMywtMTkpLEhlKHllLDE1MjMsMTU2OSwzMyksSGUoeWUsMTU2OSwxNTk1LC0xOSksSGUoeWUsMTU5NSwxNjAwLDMzKSx5ZVsxNjAwXT0tODcsSGUoeWUsMTYwMSwxNjExLC0xOSksSGUoeWUsMTYxMSwxNjE5LC04NyksSGUoeWUsMTYxOSwxNjMyLDMzKSxIZSh5ZSwxNjMyLDE2NDIsLTg3KSxIZSh5ZSwxNjQyLDE2NDgsMzMpLHllWzE2NDhdPS04NyxIZSh5ZSwxNjQ5LDE3MjAsLTE5KSxIZSh5ZSwxNzIwLDE3MjIsMzMpLEhlKHllLDE3MjIsMTcyNywtMTkpLHllWzE3MjddPTMzLEhlKHllLDE3MjgsMTc0MywtMTkpLHllWzE3NDNdPTMzLEhlKHllLDE3NDQsMTc0OCwtMTkpLHllWzE3NDhdPTMzLHllWzE3NDldPS0xOSxIZSh5ZSwxNzUwLDE3NjUsLTg3KSxIZSh5ZSwxNzY1LDE3NjcsLTE5KSxIZSh5ZSwxNzY3LDE3NjksLTg3KSx5ZVsxNzY5XT0zMyxIZSh5ZSwxNzcwLDE3NzQsLTg3KSxIZSh5ZSwxNzc0LDE3NzYsMzMpLEhlKHllLDE3NzYsMTc4NiwtODcpLEhlKHllLDE3ODYsMjMwNSwzMyksSGUoeWUsMjMwNSwyMzA4LC04NykseWVbMjMwOF09MzMsSGUoeWUsMjMwOSwyMzYyLC0xOSksSGUoeWUsMjM2MiwyMzY0LDMzKSx5ZVsyMzY0XT0tODcseWVbMjM2NV09LTE5LEhlKHllLDIzNjYsMjM4MiwtODcpLEhlKHllLDIzODIsMjM4NSwzMyksSGUoeWUsMjM4NSwyMzg5LC04NyksSGUoeWUsMjM4OSwyMzkyLDMzKSxIZSh5ZSwyMzkyLDI0MDIsLTE5KSxIZSh5ZSwyNDAyLDI0MDQsLTg3KSxIZSh5ZSwyNDA0LDI0MDYsMzMpLEhlKHllLDI0MDYsMjQxNiwtODcpLEhlKHllLDI0MTYsMjQzMywzMyksSGUoeWUsMjQzMywyNDM2LC04NykseWVbMjQzNl09MzMsSGUoeWUsMjQzNywyNDQ1LC0xOSksSGUoeWUsMjQ0NSwyNDQ3LDMzKSxIZSh5ZSwyNDQ3LDI0NDksLTE5KSxIZSh5ZSwyNDQ5LDI0NTEsMzMpLEhlKHllLDI0NTEsMjQ3MywtMTkpLHllWzI0NzNdPTMzLEhlKHllLDI0NzQsMjQ4MSwtMTkpLHllWzI0ODFdPTMzLHllWzI0ODJdPS0xOSxIZSh5ZSwyNDgzLDI0ODYsMzMpLEhlKHllLDI0ODYsMjQ5MCwtMTkpLEhlKHllLDI0OTAsMjQ5MiwzMykseWVbMjQ5Ml09LTg3LHllWzI0OTNdPTMzLEhlKHllLDI0OTQsMjUwMSwtODcpLEhlKHllLDI1MDEsMjUwMywzMyksSGUoeWUsMjUwMywyNTA1LC04NyksSGUoeWUsMjUwNSwyNTA3LDMzKSxIZSh5ZSwyNTA3LDI1MTAsLTg3KSxIZSh5ZSwyNTEwLDI1MTksMzMpLHllWzI1MTldPS04NyxIZSh5ZSwyNTIwLDI1MjQsMzMpLEhlKHllLDI1MjQsMjUyNiwtMTkpLHllWzI1MjZdPTMzLEhlKHllLDI1MjcsMjUzMCwtMTkpLEhlKHllLDI1MzAsMjUzMiwtODcpLEhlKHllLDI1MzIsMjUzNCwzMyksSGUoeWUsMjUzNCwyNTQ0LC04NyksSGUoeWUsMjU0NCwyNTQ2LC0xOSksSGUoeWUsMjU0NiwyNTYyLDMzKSx5ZVsyNTYyXT0tODcsSGUoeWUsMjU2MywyNTY1LDMzKSxIZSh5ZSwyNTY1LDI1NzEsLTE5KSxIZSh5ZSwyNTcxLDI1NzUsMzMpLEhlKHllLDI1NzUsMjU3NywtMTkpLEhlKHllLDI1NzcsMjU3OSwzMyksSGUoeWUsMjU3OSwyNjAxLC0xOSkseWVbMjYwMV09MzMsSGUoeWUsMjYwMiwyNjA5LC0xOSkseWVbMjYwOV09MzMsSGUoeWUsMjYxMCwyNjEyLC0xOSkseWVbMjYxMl09MzMsSGUoeWUsMjYxMywyNjE1LC0xOSkseWVbMjYxNV09MzMsSGUoeWUsMjYxNiwyNjE4LC0xOSksSGUoeWUsMjYxOCwyNjIwLDMzKSx5ZVsyNjIwXT0tODcseWVbMjYyMV09MzMsSGUoeWUsMjYyMiwyNjI3LC04NyksSGUoeWUsMjYyNywyNjMxLDMzKSxIZSh5ZSwyNjMxLDI2MzMsLTg3KSxIZSh5ZSwyNjMzLDI2MzUsMzMpLEhlKHllLDI2MzUsMjYzOCwtODcpLEhlKHllLDI2MzgsMjY0OSwzMyksSGUoeWUsMjY0OSwyNjUzLC0xOSkseWVbMjY1M109MzMseWVbMjY1NF09LTE5LEhlKHllLDI2NTUsMjY2MiwzMyksSGUoeWUsMjY2MiwyNjc0LC04NyksSGUoeWUsMjY3NCwyNjc3LC0xOSksSGUoeWUsMjY3NywyNjg5LDMzKSxIZSh5ZSwyNjg5LDI2OTIsLTg3KSx5ZVsyNjkyXT0zMyxIZSh5ZSwyNjkzLDI3MDAsLTE5KSx5ZVsyNzAwXT0zMyx5ZVsyNzAxXT0tMTkseWVbMjcwMl09MzMsSGUoeWUsMjcwMywyNzA2LC0xOSkseWVbMjcwNl09MzMsSGUoeWUsMjcwNywyNzI5LC0xOSkseWVbMjcyOV09MzMsSGUoeWUsMjczMCwyNzM3LC0xOSkseWVbMjczN109MzMsSGUoeWUsMjczOCwyNzQwLC0xOSkseWVbMjc0MF09MzMsSGUoeWUsMjc0MSwyNzQ2LC0xOSksSGUoeWUsMjc0NiwyNzQ4LDMzKSx5ZVsyNzQ4XT0tODcseWVbMjc0OV09LTE5LEhlKHllLDI3NTAsMjc1OCwtODcpLHllWzI3NThdPTMzLEhlKHllLDI3NTksMjc2MiwtODcpLHllWzI3NjJdPTMzLEhlKHllLDI3NjMsMjc2NiwtODcpLEhlKHllLDI3NjYsMjc4NCwzMykseWVbMjc4NF09LTE5LEhlKHllLDI3ODUsMjc5MCwzMyksSGUoeWUsMjc5MCwyODAwLC04NyksSGUoeWUsMjgwMCwyODE3LDMzKSxIZSh5ZSwyODE3LDI4MjAsLTg3KSx5ZVsyODIwXT0zMyxIZSh5ZSwyODIxLDI4MjksLTE5KSxIZSh5ZSwyODI5LDI4MzEsMzMpLEhlKHllLDI4MzEsMjgzMywtMTkpLEhlKHllLDI4MzMsMjgzNSwzMyksSGUoeWUsMjgzNSwyODU3LC0xOSkseWVbMjg1N109MzMsSGUoeWUsMjg1OCwyODY1LC0xOSkseWVbMjg2NV09MzMsSGUoeWUsMjg2NiwyODY4LC0xOSksSGUoeWUsMjg2OCwyODcwLDMzKSxIZSh5ZSwyODcwLDI4NzQsLTE5KSxIZSh5ZSwyODc0LDI4NzYsMzMpLHllWzI4NzZdPS04Nyx5ZVsyODc3XT0tMTksSGUoeWUsMjg3OCwyODg0LC04NyksSGUoeWUsMjg4NCwyODg3LDMzKSxIZSh5ZSwyODg3LDI4ODksLTg3KSxIZSh5ZSwyODg5LDI4OTEsMzMpLEhlKHllLDI4OTEsMjg5NCwtODcpLEhlKHllLDI4OTQsMjkwMiwzMyksSGUoeWUsMjkwMiwyOTA0LC04NyksSGUoeWUsMjkwNCwyOTA4LDMzKSxIZSh5ZSwyOTA4LDI5MTAsLTE5KSx5ZVsyOTEwXT0zMyxIZSh5ZSwyOTExLDI5MTQsLTE5KSxIZSh5ZSwyOTE0LDI5MTgsMzMpLEhlKHllLDI5MTgsMjkyOCwtODcpLEhlKHllLDI5MjgsMjk0NiwzMyksSGUoeWUsMjk0NiwyOTQ4LC04NykseWVbMjk0OF09MzMsSGUoeWUsMjk0OSwyOTU1LC0xOSksSGUoeWUsMjk1NSwyOTU4LDMzKSxIZSh5ZSwyOTU4LDI5NjEsLTE5KSx5ZVsyOTYxXT0zMyxIZSh5ZSwyOTYyLDI5NjYsLTE5KSxIZSh5ZSwyOTY2LDI5NjksMzMpLEhlKHllLDI5NjksMjk3MSwtMTkpLHllWzI5NzFdPTMzLHllWzI5NzJdPS0xOSx5ZVsyOTczXT0zMyxIZSh5ZSwyOTc0LDI5NzYsLTE5KSxIZSh5ZSwyOTc2LDI5NzksMzMpLEhlKHllLDI5NzksMjk4MSwtMTkpLEhlKHllLDI5ODEsMjk4NCwzMyksSGUoeWUsMjk4NCwyOTg3LC0xOSksSGUoeWUsMjk4NywyOTkwLDMzKSxIZSh5ZSwyOTkwLDI5OTgsLTE5KSx5ZVsyOTk4XT0zMyxIZSh5ZSwyOTk5LDMwMDIsLTE5KSxIZSh5ZSwzMDAyLDMwMDYsMzMpLEhlKHllLDMwMDYsMzAxMSwtODcpLEhlKHllLDMwMTEsMzAxNCwzMyksSGUoeWUsMzAxNCwzMDE3LC04NykseWVbMzAxN109MzMsSGUoeWUsMzAxOCwzMDIyLC04NyksSGUoeWUsMzAyMiwzMDMxLDMzKSx5ZVszMDMxXT0tODcsSGUoeWUsMzAzMiwzMDQ3LDMzKSxIZSh5ZSwzMDQ3LDMwNTYsLTg3KSxIZSh5ZSwzMDU2LDMwNzMsMzMpLEhlKHllLDMwNzMsMzA3NiwtODcpLHllWzMwNzZdPTMzLEhlKHllLDMwNzcsMzA4NSwtMTkpLHllWzMwODVdPTMzLEhlKHllLDMwODYsMzA4OSwtMTkpLHllWzMwODldPTMzLEhlKHllLDMwOTAsMzExMywtMTkpLHllWzMxMTNdPTMzLEhlKHllLDMxMTQsMzEyNCwtMTkpLHllWzMxMjRdPTMzLEhlKHllLDMxMjUsMzEzMCwtMTkpLEhlKHllLDMxMzAsMzEzNCwzMyksSGUoeWUsMzEzNCwzMTQxLC04NykseWVbMzE0MV09MzMsSGUoeWUsMzE0MiwzMTQ1LC04NykseWVbMzE0NV09MzMsSGUoeWUsMzE0NiwzMTUwLC04NyksSGUoeWUsMzE1MCwzMTU3LDMzKSxIZSh5ZSwzMTU3LDMxNTksLTg3KSxIZSh5ZSwzMTU5LDMxNjgsMzMpLEhlKHllLDMxNjgsMzE3MCwtMTkpLEhlKHllLDMxNzAsMzE3NCwzMyksSGUoeWUsMzE3NCwzMTg0LC04NyksSGUoeWUsMzE4NCwzMjAyLDMzKSxIZSh5ZSwzMjAyLDMyMDQsLTg3KSx5ZVszMjA0XT0zMyxIZSh5ZSwzMjA1LDMyMTMsLTE5KSx5ZVszMjEzXT0zMyxIZSh5ZSwzMjE0LDMyMTcsLTE5KSx5ZVszMjE3XT0zMyxIZSh5ZSwzMjE4LDMyNDEsLTE5KSx5ZVszMjQxXT0zMyxIZSh5ZSwzMjQyLDMyNTIsLTE5KSx5ZVszMjUyXT0zMyxIZSh5ZSwzMjUzLDMyNTgsLTE5KSxIZSh5ZSwzMjU4LDMyNjIsMzMpLEhlKHllLDMyNjIsMzI2OSwtODcpLHllWzMyNjldPTMzLEhlKHllLDMyNzAsMzI3MywtODcpLHllWzMyNzNdPTMzLEhlKHllLDMyNzQsMzI3OCwtODcpLEhlKHllLDMyNzgsMzI4NSwzMyksSGUoeWUsMzI4NSwzMjg3LC04NyksSGUoeWUsMzI4NywzMjk0LDMzKSx5ZVszMjk0XT0tMTkseWVbMzI5NV09MzMsSGUoeWUsMzI5NiwzMjk4LC0xOSksSGUoeWUsMzI5OCwzMzAyLDMzKSxIZSh5ZSwzMzAyLDMzMTIsLTg3KSxIZSh5ZSwzMzEyLDMzMzAsMzMpLEhlKHllLDMzMzAsMzMzMiwtODcpLHllWzMzMzJdPTMzLEhlKHllLDMzMzMsMzM0MSwtMTkpLHllWzMzNDFdPTMzLEhlKHllLDMzNDIsMzM0NSwtMTkpLHllWzMzNDVdPTMzLEhlKHllLDMzNDYsMzM2OSwtMTkpLHllWzMzNjldPTMzLEhlKHllLDMzNzAsMzM4NiwtMTkpLEhlKHllLDMzODYsMzM5MCwzMyksSGUoeWUsMzM5MCwzMzk2LC04NyksSGUoeWUsMzM5NiwzMzk4LDMzKSxIZSh5ZSwzMzk4LDM0MDEsLTg3KSx5ZVszNDAxXT0zMyxIZSh5ZSwzNDAyLDM0MDYsLTg3KSxIZSh5ZSwzNDA2LDM0MTUsMzMpLHllWzM0MTVdPS04NyxIZSh5ZSwzNDE2LDM0MjQsMzMpLEhlKHllLDM0MjQsMzQyNiwtMTkpLEhlKHllLDM0MjYsMzQzMCwzMyksSGUoeWUsMzQzMCwzNDQwLC04NyksSGUoeWUsMzQ0MCwzNTg1LDMzKSxIZSh5ZSwzNTg1LDM2MzEsLTE5KSx5ZVszNjMxXT0zMyx5ZVszNjMyXT0tMTkseWVbMzYzM109LTg3LEhlKHllLDM2MzQsMzYzNiwtMTkpLEhlKHllLDM2MzYsMzY0MywtODcpLEhlKHllLDM2NDMsMzY0OCwzMyksSGUoeWUsMzY0OCwzNjU0LC0xOSksSGUoeWUsMzY1NCwzNjYzLC04NykseWVbMzY2M109MzMsSGUoeWUsMzY2NCwzNjc0LC04NyksSGUoeWUsMzY3NCwzNzEzLDMzKSxIZSh5ZSwzNzEzLDM3MTUsLTE5KSx5ZVszNzE1XT0zMyx5ZVszNzE2XT0tMTksSGUoeWUsMzcxNywzNzE5LDMzKSxIZSh5ZSwzNzE5LDM3MjEsLTE5KSx5ZVszNzIxXT0zMyx5ZVszNzIyXT0tMTksSGUoeWUsMzcyMywzNzI1LDMzKSx5ZVszNzI1XT0tMTksSGUoeWUsMzcyNiwzNzMyLDMzKSxIZSh5ZSwzNzMyLDM3MzYsLTE5KSx5ZVszNzM2XT0zMyxIZSh5ZSwzNzM3LDM3NDQsLTE5KSx5ZVszNzQ0XT0zMyxIZSh5ZSwzNzQ1LDM3NDgsLTE5KSx5ZVszNzQ4XT0zMyx5ZVszNzQ5XT0tMTkseWVbMzc1MF09MzMseWVbMzc1MV09LTE5LEhlKHllLDM3NTIsMzc1NCwzMyksSGUoeWUsMzc1NCwzNzU2LC0xOSkseWVbMzc1Nl09MzMsSGUoeWUsMzc1NywzNzU5LC0xOSkseWVbMzc1OV09MzMseWVbMzc2MF09LTE5LHllWzM3NjFdPS04NyxIZSh5ZSwzNzYyLDM3NjQsLTE5KSxIZSh5ZSwzNzY0LDM3NzAsLTg3KSx5ZVszNzcwXT0zMyxIZSh5ZSwzNzcxLDM3NzMsLTg3KSx5ZVszNzczXT0tMTksSGUoeWUsMzc3NCwzNzc2LDMzKSxIZSh5ZSwzNzc2LDM3ODEsLTE5KSx5ZVszNzgxXT0zMyx5ZVszNzgyXT0tODcseWVbMzc4M109MzMsSGUoeWUsMzc4NCwzNzkwLC04NyksSGUoeWUsMzc5MCwzNzkyLDMzKSxIZSh5ZSwzNzkyLDM4MDIsLTg3KSxIZSh5ZSwzODAyLDM4NjQsMzMpLEhlKHllLDM4NjQsMzg2NiwtODcpLEhlKHllLDM4NjYsMzg3MiwzMyksSGUoeWUsMzg3MiwzODgyLC04NyksSGUoeWUsMzg4MiwzODkzLDMzKSx5ZVszODkzXT0tODcseWVbMzg5NF09MzMseWVbMzg5NV09LTg3LHllWzM4OTZdPTMzLHllWzM4OTddPS04NyxIZSh5ZSwzODk4LDM5MDIsMzMpLEhlKHllLDM5MDIsMzkwNCwtODcpLEhlKHllLDM5MDQsMzkxMiwtMTkpLHllWzM5MTJdPTMzLEhlKHllLDM5MTMsMzk0NiwtMTkpLEhlKHllLDM5NDYsMzk1MywzMyksSGUoeWUsMzk1MywzOTczLC04NykseWVbMzk3M109MzMsSGUoeWUsMzk3NCwzOTgwLC04NyksSGUoeWUsMzk4MCwzOTg0LDMzKSxIZSh5ZSwzOTg0LDM5OTAsLTg3KSx5ZVszOTkwXT0zMyx5ZVszOTkxXT0tODcseWVbMzk5Ml09MzMsSGUoeWUsMzk5Myw0MDE0LC04NyksSGUoeWUsNDAxNCw0MDE3LDMzKSxIZSh5ZSw0MDE3LDQwMjQsLTg3KSx5ZVs0MDI0XT0zMyx5ZVs0MDI1XT0tODcsSGUoeWUsNDAyNiw0MjU2LDMzKSxIZSh5ZSw0MjU2LDQyOTQsLTE5KSxIZSh5ZSw0Mjk0LDQzMDQsMzMpLEhlKHllLDQzMDQsNDM0MywtMTkpLEhlKHllLDQzNDMsNDM1MiwzMykseWVbNDM1Ml09LTE5LHllWzQzNTNdPTMzLEhlKHllLDQzNTQsNDM1NiwtMTkpLHllWzQzNTZdPTMzLEhlKHllLDQzNTcsNDM2MCwtMTkpLHllWzQzNjBdPTMzLHllWzQzNjFdPS0xOSx5ZVs0MzYyXT0zMyxIZSh5ZSw0MzYzLDQzNjUsLTE5KSx5ZVs0MzY1XT0zMyxIZSh5ZSw0MzY2LDQzNzEsLTE5KSxIZSh5ZSw0MzcxLDQ0MTIsMzMpLHllWzQ0MTJdPS0xOSx5ZVs0NDEzXT0zMyx5ZVs0NDE0XT0tMTkseWVbNDQxNV09MzMseWVbNDQxNl09LTE5LEhlKHllLDQ0MTcsNDQyOCwzMykseWVbNDQyOF09LTE5LHllWzQ0MjldPTMzLHllWzQ0MzBdPS0xOSx5ZVs0NDMxXT0zMyx5ZVs0NDMyXT0tMTksSGUoeWUsNDQzMyw0NDM2LDMzKSxIZSh5ZSw0NDM2LDQ0MzgsLTE5KSxIZSh5ZSw0NDM4LDQ0NDEsMzMpLHllWzQ0NDFdPS0xOSxIZSh5ZSw0NDQyLDQ0NDcsMzMpLEhlKHllLDQ0NDcsNDQ1MCwtMTkpLHllWzQ0NTBdPTMzLHllWzQ0NTFdPS0xOSx5ZVs0NDUyXT0zMyx5ZVs0NDUzXT0tMTkseWVbNDQ1NF09MzMseWVbNDQ1NV09LTE5LHllWzQ0NTZdPTMzLHllWzQ0NTddPS0xOSxIZSh5ZSw0NDU4LDQ0NjEsMzMpLEhlKHllLDQ0NjEsNDQ2MywtMTkpLEhlKHllLDQ0NjMsNDQ2NiwzMyksSGUoeWUsNDQ2Niw0NDY4LC0xOSkseWVbNDQ2OF09MzMseWVbNDQ2OV09LTE5LEhlKHllLDQ0NzAsNDUxMCwzMykseWVbNDUxMF09LTE5LEhlKHllLDQ1MTEsNDUyMCwzMykseWVbNDUyMF09LTE5LEhlKHllLDQ1MjEsNDUyMywzMykseWVbNDUyM109LTE5LEhlKHllLDQ1MjQsNDUyNiwzMyksSGUoeWUsNDUyNiw0NTI4LC0xOSksSGUoeWUsNDUyOCw0NTM1LDMzKSxIZSh5ZSw0NTM1LDQ1MzcsLTE5KSx5ZVs0NTM3XT0zMyx5ZVs0NTM4XT0tMTkseWVbNDUzOV09MzMsSGUoeWUsNDU0MCw0NTQ3LC0xOSksSGUoeWUsNDU0Nyw0NTg3LDMzKSx5ZVs0NTg3XT0tMTksSGUoeWUsNDU4OCw0NTkyLDMzKSx5ZVs0NTkyXT0tMTksSGUoeWUsNDU5Myw0NjAxLDMzKSx5ZVs0NjAxXT0tMTksSGUoeWUsNDYwMiw3NjgwLDMzKSxIZSh5ZSw3NjgwLDc4MzYsLTE5KSxIZSh5ZSw3ODM2LDc4NDAsMzMpLEhlKHllLDc4NDAsNzkzMCwtMTkpLEhlKHllLDc5MzAsNzkzNiwzMyksSGUoeWUsNzkzNiw3OTU4LC0xOSksSGUoeWUsNzk1OCw3OTYwLDMzKSxIZSh5ZSw3OTYwLDc5NjYsLTE5KSxIZSh5ZSw3OTY2LDc5NjgsMzMpLEhlKHllLDc5NjgsODAwNiwtMTkpLEhlKHllLDgwMDYsODAwOCwzMyksSGUoeWUsODAwOCw4MDE0LC0xOSksSGUoeWUsODAxNCw4MDE2LDMzKSxIZSh5ZSw4MDE2LDgwMjQsLTE5KSx5ZVs4MDI0XT0zMyx5ZVs4MDI1XT0tMTkseWVbODAyNl09MzMseWVbODAyN109LTE5LHllWzgwMjhdPTMzLHllWzgwMjldPS0xOSx5ZVs4MDMwXT0zMyxIZSh5ZSw4MDMxLDgwNjIsLTE5KSxIZSh5ZSw4MDYyLDgwNjQsMzMpLEhlKHllLDgwNjQsODExNywtMTkpLHllWzgxMTddPTMzLEhlKHllLDgxMTgsODEyNSwtMTkpLHllWzgxMjVdPTMzLHllWzgxMjZdPS0xOSxIZSh5ZSw4MTI3LDgxMzAsMzMpLEhlKHllLDgxMzAsODEzMywtMTkpLHllWzgxMzNdPTMzLEhlKHllLDgxMzQsODE0MSwtMTkpLEhlKHllLDgxNDEsODE0NCwzMyksSGUoeWUsODE0NCw4MTQ4LC0xOSksSGUoeWUsODE0OCw4MTUwLDMzKSxIZSh5ZSw4MTUwLDgxNTYsLTE5KSxIZSh5ZSw4MTU2LDgxNjAsMzMpLEhlKHllLDgxNjAsODE3MywtMTkpLEhlKHllLDgxNzMsODE3OCwzMyksSGUoeWUsODE3OCw4MTgxLC0xOSkseWVbODE4MV09MzMsSGUoeWUsODE4Miw4MTg5LC0xOSksSGUoeWUsODE4OSw4NDAwLDMzKSxIZSh5ZSw4NDAwLDg0MTMsLTg3KSxIZSh5ZSw4NDEzLDg0MTcsMzMpLHllWzg0MTddPS04NyxIZSh5ZSw4NDE4LDg0ODYsMzMpLHllWzg0ODZdPS0xOSxIZSh5ZSw4NDg3LDg0OTAsMzMpLEhlKHllLDg0OTAsODQ5MiwtMTkpLEhlKHllLDg0OTIsODQ5NCwzMykseWVbODQ5NF09LTE5LEhlKHllLDg0OTUsODU3NiwzMyksSGUoeWUsODU3Niw4NTc5LC0xOSksSGUoeWUsODU3OSwxMjI5MywzMykseWVbMTIyOTNdPS04Nyx5ZVsxMjI5NF09MzMseWVbMTIyOTVdPS0xOSxIZSh5ZSwxMjI5NiwxMjMyMSwzMyksSGUoeWUsMTIzMjEsMTIzMzAsLTE5KSxIZSh5ZSwxMjMzMCwxMjMzNiwtODcpLHllWzEyMzM2XT0zMyxIZSh5ZSwxMjMzNywxMjM0MiwtODcpLEhlKHllLDEyMzQyLDEyMzUzLDMzKSxIZSh5ZSwxMjM1MywxMjQzNywtMTkpLEhlKHllLDEyNDM3LDEyNDQxLDMzKSxIZSh5ZSwxMjQ0MSwxMjQ0MywtODcpLEhlKHllLDEyNDQzLDEyNDQ1LDMzKSxIZSh5ZSwxMjQ0NSwxMjQ0NywtODcpLEhlKHllLDEyNDQ3LDEyNDQ5LDMzKSxIZSh5ZSwxMjQ0OSwxMjUzOSwtMTkpLHllWzEyNTM5XT0zMyxIZSh5ZSwxMjU0MCwxMjU0MywtODcpLEhlKHllLDEyNTQzLDEyNTQ5LDMzKSxIZSh5ZSwxMjU0OSwxMjU4OSwtMTkpLEhlKHllLDEyNTg5LDE5OTY4LDMzKSxIZSh5ZSwxOTk2OCw0MDg3MCwtMTkpLEhlKHllLDQwODcwLDQ0MDMyLDMzKSxIZSh5ZSw0NDAzMiw1NTIwNCwtMTkpLEhlKHllLDU1MjA0LEFQLDMzKSxIZSh5ZSw1NzM0NCw2NTUzNCwzMyl9ZnVuY3Rpb24gaU9uKGUpe3ZhciB0LG4scixhLG8sZixnO2UuaGJ8fChlLmhiPSEwLEZ1KGUsImVjb3JlIiksQ1YoZSwiZWNvcmUiKSxTVihlLEZmKSxrTihlLmZiLCJFIiksa04oZS5MLCJUIiksa04oZS5QLCJLIiksa04oZS5QLCJWIiksa04oZS5jYiwiRSIpLHFyKGRjKGUuYiksZS5iYikscXIoZGMoZS5hKSxlLlEpLHFyKGRjKGUubyksZS5wKSxxcihkYyhlLnApLGUuUikscXIoZGMoZS5xKSxlLnApLHFyKGRjKGUudiksZS5xKSxxcihkYyhlLncpLGUuUikscXIoZGMoZS5CKSxlLlEpLHFyKGRjKGUuUiksZS5RKSxxcihkYyhlLlQpLGUuZWIpLHFyKGRjKGUuVSksZS5SKSxxcihkYyhlLlYpLGUuZWIpLHFyKGRjKGUuVyksZS5iYikscXIoZGMoZS5iYiksZS5lYikscXIoZGMoZS5lYiksZS5SKSxxcihkYyhlLmRiKSxlLlIpLHpjKGUuYixENCxhNXQsITEsITEsITApLE9zKGwoT2UodHQoZS5iKSwwKSwzNSksZS5lLCJpRCIsbnVsbCwwLDEsRDQsITEsITEsITAsITEsITAsITEpLHNzKGwoT2UodHQoZS5iKSwxKSwxOSksZS5xLG51bGwsImVBdHRyaWJ1dGVUeXBlIiwxLDEsRDQsITAsITAsITEsITEsITAsITEsITApLHpjKGUuYSxtaSxyNXQsITEsITEsITApLE9zKGwoT2UodHQoZS5hKSwwKSwzNSksZS5fLEhmZSxudWxsLDAsMSxtaSwhMSwhMSwhMCwhMSwhMCwhMSksc3MobChPZSh0dChlLmEpLDEpLDE5KSxlLmFiLG51bGwsImRldGFpbHMiLDAsLTEsbWksITEsITEsITAsITAsITEsITEsITEpLHNzKGwoT2UodHQoZS5hKSwyKSwxOSksZS5RLGwoT2UodHQoZS5RKSwwKSwxOSksImVNb2RlbEVsZW1lbnQiLDAsMSxtaSwhMCwhMSwhMCwhMSwhMSwhMSwhMSksc3MobChPZSh0dChlLmEpLDMpLDE5KSxlLlMsbnVsbCwiY29udGVudHMiLDAsLTEsbWksITEsITEsITAsITAsITEsITEsITEpLHNzKGwoT2UodHQoZS5hKSw0KSwxOSksZS5TLG51bGwsInJlZmVyZW5jZXMiLDAsLTEsbWksITEsITEsITAsITEsITAsITEsITEpLHpjKGUubyxWZiwiRUNsYXNzIiwhMSwhMSwhMCksT3MobChPZSh0dChlLm8pLDApLDM1KSxlLmUsImFic3RyYWN0IixudWxsLDAsMSxWZiwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLm8pLDEpLDM1KSxlLmUsImludGVyZmFjZSIsbnVsbCwwLDEsVmYsITEsITEsITAsITEsITAsITEpLHNzKGwoT2UodHQoZS5vKSwyKSwxOSksZS5vLG51bGwsImVTdXBlclR5cGVzIiwwLC0xLFZmLCExLCExLCEwLCExLCEwLCEwLCExKSxzcyhsKE9lKHR0KGUubyksMyksMTkpLGUuVCxsKE9lKHR0KGUuVCksMCksMTkpLCJlT3BlcmF0aW9ucyIsMCwtMSxWZiwhMSwhMSwhMCwhMCwhMSwhMSwhMSksc3MobChPZSh0dChlLm8pLDQpLDE5KSxlLmIsbnVsbCwiZUFsbEF0dHJpYnV0ZXMiLDAsLTEsVmYsITAsITAsITEsITEsITAsITEsITApLHNzKGwoT2UodHQoZS5vKSw1KSwxOSksZS5XLG51bGwsImVBbGxSZWZlcmVuY2VzIiwwLC0xLFZmLCEwLCEwLCExLCExLCEwLCExLCEwKSxzcyhsKE9lKHR0KGUubyksNiksMTkpLGUuVyxudWxsLCJlUmVmZXJlbmNlcyIsMCwtMSxWZiwhMCwhMCwhMSwhMSwhMCwhMSwhMCksc3MobChPZSh0dChlLm8pLDcpLDE5KSxlLmIsbnVsbCwiZUF0dHJpYnV0ZXMiLDAsLTEsVmYsITAsITAsITEsITEsITAsITEsITApLHNzKGwoT2UodHQoZS5vKSw4KSwxOSksZS5XLG51bGwsImVBbGxDb250YWlubWVudHMiLDAsLTEsVmYsITAsITAsITEsITEsITAsITEsITApLHNzKGwoT2UodHQoZS5vKSw5KSwxOSksZS5ULG51bGwsImVBbGxPcGVyYXRpb25zIiwwLC0xLFZmLCEwLCEwLCExLCExLCEwLCExLCEwKSxzcyhsKE9lKHR0KGUubyksMTApLDE5KSxlLmJiLG51bGwsImVBbGxTdHJ1Y3R1cmFsRmVhdHVyZXMiLDAsLTEsVmYsITAsITAsITEsITEsITAsITEsITApLHNzKGwoT2UodHQoZS5vKSwxMSksMTkpLGUubyxudWxsLCJlQWxsU3VwZXJUeXBlcyIsMCwtMSxWZiwhMCwhMCwhMSwhMSwhMCwhMSwhMCksc3MobChPZSh0dChlLm8pLDEyKSwxOSksZS5iLG51bGwsImVJREF0dHJpYnV0ZSIsMCwxLFZmLCEwLCEwLCExLCExLCExLCExLCEwKSxzcyhsKE9lKHR0KGUubyksMTMpLDE5KSxlLmJiLGwoT2UodHQoZS5iYiksNyksMTkpLCJlU3RydWN0dXJhbEZlYXR1cmVzIiwwLC0xLFZmLCExLCExLCEwLCEwLCExLCExLCExKSxzcyhsKE9lKHR0KGUubyksMTQpLDE5KSxlLkgsbnVsbCwiZUdlbmVyaWNTdXBlclR5cGVzIiwwLC0xLFZmLCExLCExLCEwLCEwLCExLCEwLCExKSxzcyhsKE9lKHR0KGUubyksMTUpLDE5KSxlLkgsbnVsbCwiZUFsbEdlbmVyaWNTdXBlclR5cGVzIiwwLC0xLFZmLCEwLCEwLCExLCExLCEwLCExLCEwKSxnPUpvKGwoT2UocWkoZS5vKSwwKSw2MiksZS5lLCJpc1N1cGVyVHlwZU9mIiksYWMoZyxlLm8sInNvbWVDbGFzcyIpLEpvKGwoT2UocWkoZS5vKSwxKSw2MiksZS5JLCJnZXRGZWF0dXJlQ291bnQiKSxnPUpvKGwoT2UocWkoZS5vKSwyKSw2MiksZS5iYix2NXQpLGFjKGcsZS5JLCJmZWF0dXJlSUQiKSxnPUpvKGwoT2UocWkoZS5vKSwzKSw2MiksZS5JLHc1dCksYWMoZyxlLmJiLElMKSxnPUpvKGwoT2UocWkoZS5vKSw0KSw2MiksZS5iYix2NXQpLGFjKGcsZS5fLCJmZWF0dXJlTmFtZSIpLEpvKGwoT2UocWkoZS5vKSw1KSw2MiksZS5JLCJnZXRPcGVyYXRpb25Db3VudCIpLGc9Sm8obChPZShxaShlLm8pLDYpLDYyKSxlLlQsImdldEVPcGVyYXRpb24iKSxhYyhnLGUuSSwib3BlcmF0aW9uSUQiKSxnPUpvKGwoT2UocWkoZS5vKSw3KSw2MiksZS5JLHk1dCksYWMoZyxlLlQsRFNlKSxnPUpvKGwoT2UocWkoZS5vKSw4KSw2MiksZS5ULCJnZXRPdmVycmlkZSIpLGFjKGcsZS5ULERTZSksZz1KbyhsKE9lKHFpKGUubyksOSksNjIpLGUuSCwiZ2V0RmVhdHVyZVR5cGUiKSxhYyhnLGUuYmIsSUwpLHpjKGUucCxsMSxvNXQsITAsITEsITApLE9zKGwoT2UodHQoZS5wKSwwKSwzNSksZS5fLCJpbnN0YW5jZUNsYXNzTmFtZSIsbnVsbCwwLDEsbDEsITEsITAsITAsITAsITAsITEpLHQ9S2coZS5MKSxuPXQ2ZSgpLHFyKCghdC5kJiYodC5kPW5ldyBZcyhXbyx0LDEpKSx0LmQpLG4pLGcydChsKE9lKHR0KGUucCksMSksMzUpLHQsImluc3RhbmNlQ2xhc3MiLGwxLCEwLCEwLCExLCEwKSxPcyhsKE9lKHR0KGUucCksMiksMzUpLGUuTSx4NXQsbnVsbCwwLDEsbDEsITAsITAsITEsITEsITAsITApLE9zKGwoT2UodHQoZS5wKSwzKSwzNSksZS5fLCJpbnN0YW5jZVR5cGVOYW1lIixudWxsLDAsMSxsMSwhMSwhMCwhMCwhMCwhMCwhMSksc3MobChPZSh0dChlLnApLDQpLDE5KSxlLlUsbChPZSh0dChlLlUpLDMpLDE5KSwiZVBhY2thZ2UiLDAsMSxsMSwhMCwhMSwhMSwhMSwhMCwhMSwhMSksc3MobChPZSh0dChlLnApLDUpLDE5KSxlLmRiLG51bGwsazV0LDAsLTEsbDEsITEsITEsITAsITAsITAsITEsITEpLGc9Sm8obChPZShxaShlLnApLDApLDYyKSxlLmUsRTV0KSxhYyhnLGUuTSx3UCksSm8obChPZShxaShlLnApLDEpLDYyKSxlLkksImdldENsYXNzaWZpZXJJRCIpLHpjKGUucSx0cGUsIkVEYXRhVHlwZSIsITEsITEsITApLE9zKGwoT2UodHQoZS5xKSwwKSwzNSksZS5lLCJzZXJpYWxpemFibGUiLHdULDAsMSx0cGUsITEsITEsITAsITEsITAsITEpLHpjKGUudixUWSwiRUVudW0iLCExLCExLCEwKSxzcyhsKE9lKHR0KGUudiksMCksMTkpLGUudyxsKE9lKHR0KGUudyksMyksMTkpLCJlTGl0ZXJhbHMiLDAsLTEsVFksITEsITEsITAsITAsITEsITEsITEpLGc9Sm8obChPZShxaShlLnYpLDApLDYyKSxlLncsVDV0KSxhYyhnLGUuXyxfaSksZz1KbyhsKE9lKHFpKGUudiksMSksNjIpLGUudyxUNXQpLGFjKGcsZS5JLFRMKSxnPUpvKGwoT2UocWkoZS52KSwyKSw2MiksZS53LCJnZXRFRW51bUxpdGVyYWxCeUxpdGVyYWwiKSxhYyhnLGUuXywibGl0ZXJhbCIpLHpjKGUudyx3cCxjNXQsITEsITEsITApLE9zKGwoT2UodHQoZS53KSwwKSwzNSksZS5JLFRMLG51bGwsMCwxLHdwLCExLCExLCEwLCExLCEwLCExKSxPcyhsKE9lKHR0KGUudyksMSksMzUpLGUuQSwiaW5zdGFuY2UiLG51bGwsMCwxLHdwLCEwLCExLCEwLCExLCEwLCExKSxPcyhsKE9lKHR0KGUudyksMiksMzUpLGUuXywibGl0ZXJhbCIsbnVsbCwwLDEsd3AsITEsITEsITAsITEsITAsITEpLHNzKGwoT2UodHQoZS53KSwzKSwxOSksZS52LGwoT2UodHQoZS52KSwwKSwxOSksImVFbnVtIiwwLDEsd3AsITAsITEsITEsITEsITEsITEsITEpLHpjKGUuQixSTSwiRUZhY3RvcnkiLCExLCExLCEwKSxzcyhsKE9lKHR0KGUuQiksMCksMTkpLGUuVSxsKE9lKHR0KGUuVSksMiksMTkpLCJlUGFja2FnZSIsMSwxLFJNLCEwLCExLCEwLCExLCExLCExLCExKSxnPUpvKGwoT2UocWkoZS5CKSwwKSw2MiksZS5TLCJjcmVhdGUiKSxhYyhnLGUubywiZUNsYXNzIiksZz1KbyhsKE9lKHFpKGUuQiksMSksNjIpLGUuTSwiY3JlYXRlRnJvbVN0cmluZyIpLGFjKGcsZS5xLCJlRGF0YVR5cGUiKSxhYyhnLGUuXywibGl0ZXJhbFZhbHVlIiksZz1KbyhsKE9lKHFpKGUuQiksMiksNjIpLGUuXywiY29udmVydFRvU3RyaW5nIiksYWMoZyxlLnEsImVEYXRhVHlwZSIpLGFjKGcsZS5NLCJpbnN0YW5jZVZhbHVlIiksemMoZS5RLHVGLGM0dCwhMCwhMSwhMCksc3MobChPZSh0dChlLlEpLDApLDE5KSxlLmEsbChPZSh0dChlLmEpLDIpLDE5KSwiZUFubm90YXRpb25zIiwwLC0xLHVGLCExLCExLCEwLCEwLCExLCExLCExKSxnPUpvKGwoT2UocWkoZS5RKSwwKSw2MiksZS5hLCJnZXRFQW5ub3RhdGlvbiIpLGFjKGcsZS5fLEhmZSksemMoZS5SLFlnZSx1NHQsITAsITEsITApLE9zKGwoT2UodHQoZS5SKSwwKSwzNSksZS5fLF9pLG51bGwsMCwxLFlnZSwhMSwhMSwhMCwhMSwhMCwhMSksemMoZS5TLFhiLCJFT2JqZWN0IiwhMSwhMSwhMCksSm8obChPZShxaShlLlMpLDApLDYyKSxlLm8sImVDbGFzcyIpLEpvKGwoT2UocWkoZS5TKSwxKSw2MiksZS5lLCJlSXNQcm94eSIpLEpvKGwoT2UocWkoZS5TKSwyKSw2MiksZS5YLCJlUmVzb3VyY2UiKSxKbyhsKE9lKHFpKGUuUyksMyksNjIpLGUuUywiZUNvbnRhaW5lciIpLEpvKGwoT2UocWkoZS5TKSw0KSw2MiksZS5iYiwiZUNvbnRhaW5pbmdGZWF0dXJlIiksSm8obChPZShxaShlLlMpLDUpLDYyKSxlLlcsImVDb250YWlubWVudEZlYXR1cmUiKSxnPUpvKGwoT2UocWkoZS5TKSw2KSw2MiksbnVsbCwiZUNvbnRlbnRzIiksdD1LZyhlLmZiKSxuPUtnKGUuUykscXIoKCF0LmQmJih0LmQ9bmV3IFlzKFdvLHQsMSkpLHQuZCksbiksYT0kMShnLHQsbnVsbCksYSYmYS5vaigpLGc9Sm8obChPZShxaShlLlMpLDcpLDYyKSxudWxsLCJlQWxsQ29udGVudHMiKSx0PUtnKGUuY2IpLG49S2coZS5TKSxxcigoIXQuZCYmKHQuZD1uZXcgWXMoV28sdCwxKSksdC5kKSxuKSxvPSQxKGcsdCxudWxsKSxvJiZvLm9qKCksZz1KbyhsKE9lKHFpKGUuUyksOCksNjIpLG51bGwsImVDcm9zc1JlZmVyZW5jZXMiKSx0PUtnKGUuZmIpLG49S2coZS5TKSxxcigoIXQuZCYmKHQuZD1uZXcgWXMoV28sdCwxKSksdC5kKSxuKSxmPSQxKGcsdCxudWxsKSxmJiZmLm9qKCksZz1KbyhsKE9lKHFpKGUuUyksOSksNjIpLGUuTSwiZUdldCIpLGFjKGcsZS5iYixJTCksZz1KbyhsKE9lKHFpKGUuUyksMTApLDYyKSxlLk0sImVHZXQiKSxhYyhnLGUuYmIsSUwpLGFjKGcsZS5lLCJyZXNvbHZlIiksZz1KbyhsKE9lKHFpKGUuUyksMTEpLDYyKSxudWxsLCJlU2V0IiksYWMoZyxlLmJiLElMKSxhYyhnLGUuTSwibmV3VmFsdWUiKSxnPUpvKGwoT2UocWkoZS5TKSwxMiksNjIpLGUuZSwiZUlzU2V0IiksYWMoZyxlLmJiLElMKSxnPUpvKGwoT2UocWkoZS5TKSwxMyksNjIpLG51bGwsImVVbnNldCIpLGFjKGcsZS5iYixJTCksZz1KbyhsKE9lKHFpKGUuUyksMTQpLDYyKSxlLk0sImVJbnZva2UiKSxhYyhnLGUuVCxEU2UpLHQ9S2coZS5mYiksbj10NmUoKSxxcigoIXQuZCYmKHQuZD1uZXcgWXMoV28sdCwxKSksdC5kKSxuKSxnVShnLHQsImFyZ3VtZW50cyIpLFZnbihnLGUuSyksemMoZS5ULFVmLGw1dCwhMSwhMSwhMCksc3MobChPZSh0dChlLlQpLDApLDE5KSxlLm8sbChPZSh0dChlLm8pLDMpLDE5KSxDNXQsMCwxLFVmLCEwLCExLCExLCExLCExLCExLCExKSxzcyhsKE9lKHR0KGUuVCksMSksMTkpLGUuZGIsbnVsbCxrNXQsMCwtMSxVZiwhMSwhMSwhMCwhMCwhMCwhMSwhMSksc3MobChPZSh0dChlLlQpLDIpLDE5KSxlLlYsbChPZSh0dChlLlYpLDApLDE5KSwiZVBhcmFtZXRlcnMiLDAsLTEsVWYsITEsITEsITAsITAsITEsITEsITEpLHNzKGwoT2UodHQoZS5UKSwzKSwxOSksZS5wLG51bGwsImVFeGNlcHRpb25zIiwwLC0xLFVmLCExLCExLCEwLCExLCEwLCEwLCExKSxzcyhsKE9lKHR0KGUuVCksNCksMTkpLGUuSCxudWxsLCJlR2VuZXJpY0V4Y2VwdGlvbnMiLDAsLTEsVWYsITEsITEsITAsITAsITEsITAsITEpLEpvKGwoT2UocWkoZS5UKSwwKSw2MiksZS5JLHk1dCksZz1KbyhsKE9lKHFpKGUuVCksMSksNjIpLGUuZSwiaXNPdmVycmlkZU9mIiksYWMoZyxlLlQsInNvbWVPcGVyYXRpb24iKSx6YyhlLlUsdTEsIkVQYWNrYWdlIiwhMSwhMSwhMCksT3MobChPZSh0dChlLlUpLDApLDM1KSxlLl8sIm5zVVJJIixudWxsLDAsMSx1MSwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLlUpLDEpLDM1KSxlLl8sIm5zUHJlZml4IixudWxsLDAsMSx1MSwhMSwhMSwhMCwhMSwhMCwhMSksc3MobChPZSh0dChlLlUpLDIpLDE5KSxlLkIsbChPZSh0dChlLkIpLDApLDE5KSwiZUZhY3RvcnlJbnN0YW5jZSIsMSwxLHUxLCEwLCExLCEwLCExLCExLCExLCExKSxzcyhsKE9lKHR0KGUuVSksMyksMTkpLGUucCxsKE9lKHR0KGUucCksNCksMTkpLCJlQ2xhc3NpZmllcnMiLDAsLTEsdTEsITEsITEsITAsITAsITAsITEsITEpLHNzKGwoT2UodHQoZS5VKSw0KSwxOSksZS5VLGwoT2UodHQoZS5VKSw1KSwxOSksImVTdWJwYWNrYWdlcyIsMCwtMSx1MSwhMSwhMSwhMCwhMCwhMCwhMSwhMSksc3MobChPZSh0dChlLlUpLDUpLDE5KSxlLlUsbChPZSh0dChlLlUpLDQpLDE5KSwiZVN1cGVyUGFja2FnZSIsMCwxLHUxLCEwLCExLCExLCExLCEwLCExLCExKSxnPUpvKGwoT2UocWkoZS5VKSwwKSw2MiksZS5wLCJnZXRFQ2xhc3NpZmllciIpLGFjKGcsZS5fLF9pKSx6YyhlLlYsazMsaDV0LCExLCExLCEwKSxzcyhsKE9lKHR0KGUuViksMCksMTkpLGUuVCxsKE9lKHR0KGUuVCksMiksMTkpLCJlT3BlcmF0aW9uIiwwLDEsazMsITAsITEsITEsITEsITEsITEsITEpLHpjKGUuVyxJNCxmNXQsITEsITEsITApLE9zKGwoT2UodHQoZS5XKSwwKSwzNSksZS5lLCJjb250YWlubWVudCIsbnVsbCwwLDEsSTQsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5XKSwxKSwzNSksZS5lLCJjb250YWluZXIiLG51bGwsMCwxLEk0LCEwLCEwLCExLCExLCEwLCEwKSxPcyhsKE9lKHR0KGUuVyksMiksMzUpLGUuZSwicmVzb2x2ZVByb3hpZXMiLHdULDAsMSxJNCwhMSwhMSwhMCwhMSwhMCwhMSksc3MobChPZSh0dChlLlcpLDMpLDE5KSxlLlcsbnVsbCwiZU9wcG9zaXRlIiwwLDEsSTQsITEsITEsITAsITEsITAsITEsITEpLHNzKGwoT2UodHQoZS5XKSw0KSwxOSksZS5vLG51bGwsImVSZWZlcmVuY2VUeXBlIiwxLDEsSTQsITAsITAsITEsITEsITAsITEsITApLHNzKGwoT2UodHQoZS5XKSw1KSwxOSksZS5iLG51bGwsImVLZXlzIiwwLC0xLEk0LCExLCExLCEwLCExLCEwLCExLCExKSx6YyhlLmJiLGRsLHM1dCwhMCwhMSwhMCksT3MobChPZSh0dChlLmJiKSwwKSwzNSksZS5lLCJjaGFuZ2VhYmxlIix3VCwwLDEsZGwsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5iYiksMSksMzUpLGUuZSwidm9sYXRpbGUiLG51bGwsMCwxLGRsLCExLCExLCEwLCExLCEwLCExKSxPcyhsKE9lKHR0KGUuYmIpLDIpLDM1KSxlLmUsInRyYW5zaWVudCIsbnVsbCwwLDEsZGwsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5iYiksMyksMzUpLGUuXywiZGVmYXVsdFZhbHVlTGl0ZXJhbCIsbnVsbCwwLDEsZGwsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5iYiksNCksMzUpLGUuTSx4NXQsbnVsbCwwLDEsZGwsITAsITAsITEsITEsITAsITApLE9zKGwoT2UodHQoZS5iYiksNSksMzUpLGUuZSwidW5zZXR0YWJsZSIsbnVsbCwwLDEsZGwsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5iYiksNiksMzUpLGUuZSwiZGVyaXZlZCIsbnVsbCwwLDEsZGwsITEsITEsITAsITEsITAsITEpLHNzKGwoT2UodHQoZS5iYiksNyksMTkpLGUubyxsKE9lKHR0KGUubyksMTMpLDE5KSxDNXQsMCwxLGRsLCEwLCExLCExLCExLCExLCExLCExKSxKbyhsKE9lKHFpKGUuYmIpLDApLDYyKSxlLkksdzV0KSxnPUpvKGwoT2UocWkoZS5iYiksMSksNjIpLG51bGwsImdldENvbnRhaW5lckNsYXNzIiksdD1LZyhlLkwpLG49dDZlKCkscXIoKCF0LmQmJih0LmQ9bmV3IFlzKFdvLHQsMSkpLHQuZCksbikscj0kMShnLHQsbnVsbCksciYmci5vaigpLHpjKGUuZWIsTTQsaTV0LCEwLCExLCEwKSxPcyhsKE9lKHR0KGUuZWIpLDApLDM1KSxlLmUsIm9yZGVyZWQiLHdULDAsMSxNNCwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLmViKSwxKSwzNSksZS5lLCJ1bmlxdWUiLHdULDAsMSxNNCwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLmViKSwyKSwzNSksZS5JLCJsb3dlckJvdW5kIixudWxsLDAsMSxNNCwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLmViKSwzKSwzNSksZS5JLCJ1cHBlckJvdW5kIiwiMSIsMCwxLE00LCExLCExLCEwLCExLCEwLCExKSxPcyhsKE9lKHR0KGUuZWIpLDQpLDM1KSxlLmUsIm1hbnkiLG51bGwsMCwxLE00LCEwLCEwLCExLCExLCEwLCEwKSxPcyhsKE9lKHR0KGUuZWIpLDUpLDM1KSxlLmUsInJlcXVpcmVkIixudWxsLDAsMSxNNCwhMCwhMCwhMSwhMSwhMCwhMCksc3MobChPZSh0dChlLmViKSw2KSwxOSksZS5wLG51bGwsImVUeXBlIiwwLDEsTTQsITEsITAsITAsITEsITAsITAsITEpLHNzKGwoT2UodHQoZS5lYiksNyksMTkpLGUuSCxudWxsLCJlR2VuZXJpY1R5cGUiLDAsMSxNNCwhMSwhMCwhMCwhMCwhMSwhMCwhMSksemMoZS5hYix1diwiRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiLCExLCExLCExKSxPcyhsKE9lKHR0KGUuYWIpLDApLDM1KSxlLl8sImtleSIsbnVsbCwwLDEsdXYsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5hYiksMSksMzUpLGUuXyxUTCxudWxsLDAsMSx1diwhMSwhMSwhMCwhMSwhMCwhMSksemMoZS5ILFdvLHU1dCwhMSwhMSwhMCksc3MobChPZSh0dChlLkgpLDApLDE5KSxlLkgsbnVsbCwiZVVwcGVyQm91bmQiLDAsMSxXbywhMSwhMSwhMCwhMCwhMSwhMSwhMSksc3MobChPZSh0dChlLkgpLDEpLDE5KSxlLkgsbnVsbCwiZVR5cGVBcmd1bWVudHMiLDAsLTEsV28sITEsITEsITAsITAsITEsITEsITEpLHNzKGwoT2UodHQoZS5IKSwyKSwxOSksZS5wLG51bGwsImVSYXdUeXBlIiwxLDEsV28sITAsITEsITEsITEsITAsITEsITApLHNzKGwoT2UodHQoZS5IKSwzKSwxOSksZS5ILG51bGwsImVMb3dlckJvdW5kIiwwLDEsV28sITEsITEsITAsITAsITEsITEsITEpLHNzKGwoT2UodHQoZS5IKSw0KSwxOSksZS5kYixudWxsLCJlVHlwZVBhcmFtZXRlciIsMCwxLFdvLCExLCExLCEwLCExLCExLCExLCExKSxzcyhsKE9lKHR0KGUuSCksNSksMTkpLGUucCxudWxsLCJlQ2xhc3NpZmllciIsMCwxLFdvLCExLCExLCEwLCExLCEwLCExLCExKSxnPUpvKGwoT2UocWkoZS5IKSwwKSw2MiksZS5lLEU1dCksYWMoZyxlLk0sd1ApLHpjKGUuZGIsWnUsZDV0LCExLCExLCEwKSxzcyhsKE9lKHR0KGUuZGIpLDApLDE5KSxlLkgsbnVsbCwiZUJvdW5kcyIsMCwtMSxadSwhMSwhMSwhMCwhMCwhMSwhMSwhMSksRWkoZS5jLEwwZSwiRUJpZ0RlY2ltYWwiLCEwKSxFaShlLmQsQTYsIkVCaWdJbnRlZ2VyIiwhMCksRWkoZS5lLGloLCJFQm9vbGVhbiIsITApLEVpKGUuZixOcywiRUJvb2xlYW5PYmplY3QiLCEwKSxFaShlLmksQWwsIkVCeXRlIiwhMCksRWkoZS5nLGxlKEFsLDEpLCJFQnl0ZUFycmF5IiwhMCksRWkoZS5qLGp4LCJFQnl0ZU9iamVjdCIsITApLEVpKGUuayxrZiwiRUNoYXIiLCEwKSxFaShlLm4sUEwsIkVDaGFyYWN0ZXJPYmplY3QiLCEwKSxFaShlLnIsY0ssIkVEYXRlIiwhMCksRWkoZS5zLG5CZSwiRURpYWdub3N0aWNDaGFpbiIsITEpLEVpKGUudCxOYSwiRURvdWJsZSIsITApLEVpKGUudSx0YSwiRURvdWJsZU9iamVjdCIsITApLEVpKGUuZmIsbVBlLCJFRUxpc3QiLCExKSxFaShlLkEseVBlLCJFRW51bWVyYXRvciIsITEpLEVpKGUuQyxIUGUsIkVGZWF0dXJlTWFwIiwhMSksRWkoZS5ELENZLCJFRmVhdHVyZU1hcEVudHJ5IiwhMSksRWkoZS5GLEI0LCJFRmxvYXQiLCEwKSxFaShlLkcsX1QsIkVGbG9hdE9iamVjdCIsITApLEVpKGUuSSxWciwiRUludCIsITApLEVpKGUuSixybywiRUludGVnZXJPYmplY3QiLCEwKSxFaShlLkwscVNlLCJFSmF2YUNsYXNzIiwhMCksRWkoZS5NLHdhLCJFSmF2YU9iamVjdCIsITApLEVpKGUuTixubSwiRUxvbmciLCEwKSxFaShlLk8scjMsIkVMb25nT2JqZWN0IiwhMCksRWkoZS5QLEhTZSwiRU1hcCIsITEpLEVpKGUuWCxqUGUsIkVSZXNvdXJjZSIsITEpLEVpKGUuWSxyQmUsIkVSZXNvdXJjZVNldCIsITEpLEVpKGUuWixoNywiRVNob3J0IiwhMCksRWkoZS4kLGkzLCJFU2hvcnRPYmplY3QiLCEwKSxFaShlLl8senQsIkVTdHJpbmciLCEwKSxFaShlLmNiLHdQZSwiRVRyZWVJdGVyYXRvciIsITEpLEVpKGUuSyxpQmUsIkVJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIiwhMSksdDhlKGUsRmYpKX12YXIgd1A9Im9iamVjdCIsQ3g9ImJvb2xlYW4iLFFrZT0ibnVtYmVyIixJbGU9InN0cmluZyIsT2xlPSJmdW5jdGlvbiIsSWk9MjE0NzQ4MzY0NyxWYz0iamF2YS5sYW5nIix5UD17MzoxfSx4UD0iY29tLmdvb2dsZS5jb21tb24uYmFzZSIsQ289IiwgIixTd3Q9IiVzICglcykgbXVzdCBub3QgYmUgbmVnYXRpdmUiLFJuPXszOjEsNDoxLDU6MX0sX3d0PSJuZWdhdGl2ZSBzaXplOiAiLEprZT0ibm8gY2FsbHMgdG8gbmV4dCgpIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gcmVtb3ZlKCkiLEF3dD0iT3B0aW9uYWwub2YoIix1bD0ibnVsbCIsZVQ9ezIwNDoxLDUxOjF9LGRuPSJjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0Iix0VD17MjA0OjEsNTE6MSwxMjg6MX0sSm09ezIyOToxLDM6MX0sT2E9ezUxOjF9LExyPSJqYXZhLnV0aWwiLFd3PXs4NToxfSxXeT17MjA6MSwzMToxLDE2OjF9LHExPTIwNjMsVGw9ezIwOjEsMzE6MSwxNjoxLDIxOjF9LFprZT17ODU6MSwxMzk6MSwxMzM6MX0sTHd0PXsyMDoxLDMxOjEsMTY6MSwyMToxLDg3OjF9LGVFZT17MjA6MSwzMToxLDE2OjEsMjc3OjEsMjE6MSw4NzoxfSxsZz17NTE6MSwxMjg6MX0sTmxlPXszNTg6MSw0NDoxfSxNd3Q9IkFic3RyYWN0TWFwRW50cnkiLER3dD0iZXhwZWN0ZWRWYWx1ZXNQZXJLZXkiLGR0PXszOjEsNjoxLDQ6MSw1OjF9LF9kPTE2Mzg0LFBoPXsxNTk6MX0sZnI9ezQxOjF9LGtQPXsyMDI6MX0sRVA9e2w6NDE5NDMwMyxtOjQxOTQzMDMsaDo1MjQyODd9LFBsZT17MjUzOjEsMzoxLDM0OjF9LEl3dD0icmFuZ2UgdW5ib3VuZGVkIG9uIHRoaXMgc2lkZSIsaGc9ezIwOjF9LE93dD17MjA6MSwxNjoxfSx0RWU9ezM6MSwyMDoxLDMxOjEsMTY6MX0sblQ9ezMwNzoxLDM6MSwyMDoxLDMxOjEsMTY6MSwxNToxLDU5OjF9LFhVPXszOjEsNDoxLDU6MSwxNzM6MX0sclQ9ezM6MSw4NToxfSxCbGU9ezIwOjEsMTY6MSwyMToxfSxTeD17MzoxLDIwOjEsMzE6MSwxNjoxLDIxOjF9LE53dD17MjA6MSwxNjoxLDIxOjEsODc6MX0sZmc9NDYxODQ1OTA3LGRnPS04NjIwNDg5NDMsVFA9ezM6MSw2OjEsNDoxLDU6MSwxNzM6MX0sUHd0PSJleHBlY3RlZFNpemUiLG0wPTEwMjQsckw9MTA3Mzc0MTgyNCxZeT0iaW5pdGlhbEFycmF5U2l6ZSIsaXQ9ezM6MSw2OjEsNDoxLDk6MSw1OjF9LGlUPXsyMDoxLDMxOjEsNTY6MSwxNjoxLDE1OjF9LEZsZT0iYXJyYXlTaXplIixCd3Q9ezIwOjEsMzE6MSw1NjoxLDE2OjEsMTU6MSw1OToxfSx0aT17NDY6MX0sUVU9ezM4MDoxfSxBYj0xZS00LGxvPS0yMTQ3NDgzNjQ4LEZ3dD0iX19ub2luaXRfXyIsbHA9ezM6MSwxMDM6MSw2MzoxLDgyOjF9LENQPSJjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudC5pbXBsIixuRWU9IlN0cmluZyIsckVlPSJjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudCIsUmxlPSJhbm9ueW1vdXMiLGpsZT0iZm5TdGFjayIsaUVlPSJVbmtub3duIixBZD17MjAxOjEsMzoxLDQ6MX0sYjI9MWUzLFpzPTY1NTM1LCRsZT0iSmFudWFyeSIsemxlPSJGZWJydWFyeSIscWxlPSJNYXJjaCIsSGxlPSJBcHJpbCIsX3g9Ik1heSIsVmxlPSJKdW5lIixVbGU9Ikp1bHkiLEdsZT0iQXVndXN0IixLbGU9IlNlcHRlbWJlciIsV2xlPSJPY3RvYmVyIixZbGU9Ik5vdmVtYmVyIixYbGU9IkRlY2VtYmVyIixMYj0xOTAwLGRpPXs1MzoxLDM6MSw0OjF9LFJ3dD0iQmVmb3JlIENocmlzdCIsand0PSJBbm5vIERvbWluaSIsUWxlPSJTdW5kYXkiLEpsZT0iTW9uZGF5IixabGU9IlR1ZXNkYXkiLGVoZT0iV2VkbmVzZGF5Iix0aGU9IlRodXJzZGF5IixuaGU9IkZyaWRheSIscmhlPSJTYXR1cmRheSIsc0VlPSJjb20uZ29vZ2xlLmd3dC5pMThuLnNoYXJlZCIsJHd0PSJEYXRlVGltZUZvcm1hdCIsaWhlPSJjb20uZ29vZ2xlLmd3dC5pMThuLmNsaWVudCIsend0PSJEZWZhdWx0RGF0ZVRpbWVGb3JtYXRJbmZvIixxd3Q9ezM6MSw0OjEsMzQ6MSwyMDY6MX0sQXg9ImNvbS5nb29nbGUuZ3d0Lmpzb24uY2xpZW50IixlaD00MTk0MzAzLGhwPTEwNDg1NzUsU1A9NTI0Mjg4LEx4PTQxOTQzMDQsWm09MTc1OTIxODYwNDQ0MTYsSlU9MWU5LF9QPS0xNzU5MjE4NjA0NDQxNixhRWU9ImphdmEuaW8iLHNoZT17MzoxLDEwMzoxLDc3OjEsNjM6MSw4MjoxfSxId3Q9ezM6MSwyOTY6MSw4MjoxfSxZdz0nRm9yIGlucHV0IHN0cmluZzogIicsZ3M9MS8wLGlhPS0xLzAsWHk9NDA5NixhaGU9ezM6MSw0OjEsMzc2OjF9LHNyPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZCIsSW89NjU1MzYsQVA9NTUyOTYsWm89ezEwOToxLDM6MSw0OjF9LG9oZT0xZTUsVnd0PS4zMDEwMjk5OTU2NjM5ODEyLFZvPTQyOTQ5NjcyOTUsc1Q9IjAuMCIsY2hlPXs0NDoxfSxhVD0iVW5hYmxlIHRvIGFkZCBlbGVtZW50IHRvIHF1ZXVlIixVd3Q9ezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTM6MSwxNjoxLDE1OjEsNTk6MX0sR3d0PXszOjEsMjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDU5OjF9LEt3dD17MjA6MSwxNjoxLDE1OjF9LHVoZT17MzoxLDUwOjF9LExQPXsxODk6MX0sbTY9ezM6MSw0OjEsODU6MX0sb0VlPXszOjEsNDoxLDIwOjEsMzE6MSwxNjoxLDQ5OjEsMjE6MX0sbGhlPSJkZWxldGUiLGlMPTE0OTAxMTYxMTkzODQ3NjU2ZS0yNCxzTD0xMTEwMjIzMDI0NjI1MTU2NWUtMzIsaGhlPTE1NTI1NDg1LE1QPTU5NjA0NjQ0Nzc1MzkwNjNlLTIzLGNFZT0xNjc3NzIxNixaVT0xNjc3NzIxNSx1RWU9IiwgbGVuZ3RoOiAiLFd3dD17MzoxLDQ6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDE1OjEsNTk6MX0sbEVlPSJzdWJNYXA6ICIsWXd0PSIgbGVzcyB0aGFuICIsZmhlPXszOjEsMzQ6MSwyMjoxLDMwNDoxfSxkaGU9ImphdmEudXRpbC5mdW5jdGlvbiIsYUw9ImphdmEudXRpbC5sb2dnaW5nIixYd3Q9ezM6MSw0OjEsNToxLDg1NjoxfSxnaGU9InVuZGVmaW5lZCIsc2E9ImphdmEudXRpbC5zdHJlYW0iLGhFZT17NTMzOjEsNjg3OjF9LGVHPSJmcm9tSW5kZXg6ICIsUXd0PSIgPiB0b0luZGV4OiAiLGZFZT0iLCB0b0luZGV4OiAiLGRFZT0iSW5kZXg6ICIsZ0VlPSIsIFNpemU6ICIsb1Q9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uIixpaT17NTA6MX0sSnd0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5jb21wYWN0aW9uIixad3Q9IlNjYW5saW5lL0V2ZW50SGFuZGxlciIsZ2c9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLmNvbXBhY3Rpb24ub25lZCIsZTN0PSJDTm9kZSBiZWxvbmdzIHRvIGFub3RoZXIgQ0dyb3VwLiIsdDN0PSJJU3BhY2luZ3NIYW5kbGVyLzEiLHBoZT0iVGhlICIsYmhlPSIgaW5zdGFuY2UgaGFzIGJlZW4gZmluaXNoZWQgYWxyZWFkeS4iLG4zdD0iVGhlIGRpcmVjdGlvbiAiLHIzdD0iIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIENHcmFwaCBpbnN0YW5jZS4iLGkzdD0iT25lRGltZW5zaW9uYWxDb21wYWN0b3IiLHMzdD0iT25lRGltZW5zaW9uYWxDb21wYWN0b3IvbGFtYmRhJDAkVHlwZSIsYTN0PSJRdWFkcnVwbGV0IixvM3Q9IlNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IiLGMzdD0iU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRvci9Db25zdHJhaW50c1NjYW5saW5lSGFuZGxlciIsdTN0PSJTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdG9yL0NvbnN0cmFpbnRzU2NhbmxpbmVIYW5kbGVyL2xhbWJkYSQwJFR5cGUiLGwzdD0iU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRvci9UaW1lc3RhbXAiLGgzdD0iU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRvci9sYW1iZGEkMCRUeXBlIixMZD17MTc4OjEsNDY6MX0sbWhlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5jb21wYWN0aW9uLm9wdGlvbnMiLE5jPSJvcmcuZWNsaXBzZS5lbGsuY29yZS5kYXRhIixwRWU9Im9yZy5lY2xpcHNlLmVsay5wb2x5b21pbm8udHJhdmVyc2FsU3RyYXRlZ3kiLGJFZT0ib3JnLmVjbGlwc2UuZWxrLnBvbHlvbWluby5sb3dMZXZlbFNvcnQiLG1FZT0ib3JnLmVjbGlwc2UuZWxrLnBvbHlvbWluby5oaWdoTGV2ZWxTb3J0Iix2RWU9Im9yZy5lY2xpcHNlLmVsay5wb2x5b21pbm8uZmlsbCIsUGY9ezEzNDoxfSx2aGU9InBvbHlvbWlubyIsb0w9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLm5ldHdvcmtzaW1wbGV4IixwZz17MTgzOjEsMzoxLDQ6MX0sZjN0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5ub2Rlc3BhY2luZyIsZXY9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLm5vZGVzcGFjaW5nLmNlbGxzeXN0ZW0iLGNUPSJDRU5URVIiLGQzdD17MjE3OjEsMzM2OjF9LHdFZT17MzoxLDQ6MSw1OjEsNjAzOjF9LE14PSJMRUZUIixEeD0iUklHSFQiLHlFZT0iVmVydGljYWwgYWxpZ25tZW50IGNhbm5vdCBiZSBudWxsIix4RWU9IkJPVFRPTSIsdEc9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLm5vZGVzcGFjaW5nLmludGVybmFsIixjTD0iVU5ERUZJTkVEIixIMT0uMDEsRFA9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLm5vZGVzcGFjaW5nLmludGVybmFsLmFsZ29yaXRobSIsZzN0PSJMYWJlbFBsYWNlci9sYW1iZGEkMCRUeXBlIixwM3Q9IkxhYmVsUGxhY2VyL2xhbWJkYSQxJFR5cGUiLGIzdD0icG9ydFJhdGlvT3JQb3NpdGlvbiIsdVQ9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLm92ZXJsYXBzIix3aGU9IkRPV04iLE1kPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5wb2x5b21pbm8iLG5HPSJOT1JUSCIseWhlPSJFQVNUIix4aGU9IlNPVVRIIixraGU9IldFU1QiLHJHPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5wb2x5b21pbm8uc3RydWN0dXJlcyIsa0VlPSJEaXJlY3Rpb24iLEVoZT0iR3JpZCBpcyBvbmx5IG9mIHNpemUgIixUaGU9Ii4gUmVxdWVzdGVkIHBvaW50ICgiLENoZT0iKSBpcyBvdXQgb2YgYm91bmRzLiIsaUc9IiBHaXZlbiBjZW50ZXIgYmFzZWQgY29vcmRpbmF0ZXMgd2VyZSAoIixJUD0ib3JnLmVjbGlwc2UuZWxrLmdyYXBoLnByb3BlcnRpZXMiLG0zdD0iSVByb3BlcnR5SG9sZGVyIixFRWU9ezM6MSw5NjoxLDEzNzoxfSxJeD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24uc3BvcmUiLHYzdD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24udXRpbHMiLHR2PXsyMDU6MX0sdjY9Im9yZy5lY2xpcHNlLmVsay5jb3JlIix3M3Q9IkNvbm5lY3RlZCBDb21wb25lbnRzIENvbXBhY3Rpb24iLHkzdD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5kaXNjbyIsc0c9Im9yZy5lY2xpcHNlLmVsay5hbGcuZGlzY28uZ3JhcGgiLFNoZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5kaXNjby5vcHRpb25zIixURWU9IkNvbXBhY3Rpb25TdHJhdGVneSIsQ0VlPSJvcmcuZWNsaXBzZS5lbGsuZGlzY28uY29tcG9uZW50Q29tcGFjdGlvbi5zdHJhdGVneSIsU0VlPSJvcmcuZWNsaXBzZS5lbGsuZGlzY28uY29tcG9uZW50Q29tcGFjdGlvbi5jb21wb25lbnRMYXlvdXRBbGdvcml0aG0iLF9FZT0ib3JnLmVjbGlwc2UuZWxrLmRpc2NvLmRlYnVnLmRpc2NvR3JhcGgiLEFFZT0ib3JnLmVjbGlwc2UuZWxrLmRpc2NvLmRlYnVnLmRpc2NvUG9seXMiLHgzdD0iY29tcG9uZW50Q29tcGFjdGlvbiIsbnY9Im9yZy5lY2xpcHNlLmVsay5kaXNjbyIsX2hlPSJvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5jb21wb25lbnRDb21wb25lbnQiLEFoZT0ib3JnLmVjbGlwc2UuZWxrLmVkZ2UudGhpY2tuZXNzIixPeD0ib3JnLmVjbGlwc2UuZWxrLmFzcGVjdFJhdGlvIixYdz0ib3JnLmVjbGlwc2UuZWxrLnBhZGRpbmciLHc2PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmRpc2NvLnRyYW5zZm9ybSIsTGhlPTEuNTcwNzk2MzI2Nzk0ODk2Nix5Nj0xNzk3NjkzMTM0ODYyMzE1N2UyOTIsUXk9ezM6MSw0OjEsNToxLDE5ODoxfSxrM3Q9ezM6MSw2OjEsNDoxLDU6MSwxMDA6MSwxMTU6MX0sTWhlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmZvcmNlIixMRWU9IkNvbXBvbmVudHNQcm9jZXNzb3IiLEUzdD0iQ29tcG9uZW50c1Byb2Nlc3Nvci8xIixNRWU9IkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDAkVHlwZSIsT1A9Im9yZy5lY2xpcHNlLmVsay5hbGcuZm9yY2UuZ3JhcGgiLFQzdD0iQ29tcG9uZW50IExheW91dCIsREVlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmZvcmNlLm1vZGVsIixhRz0ib3JnLmVjbGlwc2UuZWxrLmZvcmNlLm1vZGVsIixJRWU9Im9yZy5lY2xpcHNlLmVsay5mb3JjZS5pdGVyYXRpb25zIixPRWU9Im9yZy5lY2xpcHNlLmVsay5mb3JjZS5yZXB1bHNpdmVQb3dlciIsRGhlPSJvcmcuZWNsaXBzZS5lbGsuZm9yY2UudGVtcGVyYXR1cmUiLERkPS4wMDEsSWhlPSJvcmcuZWNsaXBzZS5lbGsuZm9yY2UucmVwdWxzaW9uIix1TD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5mb3JjZS5vcHRpb25zIixsVD0xLjYwMDAwMDAyMzg0MTg1OCxZdT0ib3JnLmVjbGlwc2UuZWxrLmZvcmNlIixOUD0ib3JnLmVjbGlwc2UuZWxrLnByaW9yaXR5IixKeT0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcubm9kZU5vZGUiLE9oZT0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuZWRnZUxhYmVsIixvRz0ib3JnLmVjbGlwc2UuZWxrLnJhbmRvbVNlZWQiLGxMPSJvcmcuZWNsaXBzZS5lbGsuc2VwYXJhdGVDb25uZWN0ZWRDb21wb25lbnRzIixoTD0ib3JnLmVjbGlwc2UuZWxrLmludGVyYWN0aXZlIixOaGU9Im9yZy5lY2xpcHNlLmVsay5wb3J0Q29uc3RyYWludHMiLGNHPSJvcmcuZWNsaXBzZS5lbGsuZWRnZUxhYmVscy5pbmxpbmUiLGZMPSJvcmcuZWNsaXBzZS5lbGsub21pdE5vZGVNaWNyb0xheW91dCIsaFQ9Im9yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5maXhlZEdyYXBoU2l6ZSIsTng9Im9yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5vcHRpb25zIix4Nj0ib3JnLmVjbGlwc2UuZWxrLm5vZGVTaXplLmNvbnN0cmFpbnRzIixmVD0ib3JnLmVjbGlwc2UuZWxrLm5vZGVMYWJlbHMucGxhY2VtZW50IixkVD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMucGxhY2VtZW50IixQUD0ib3JnLmVjbGlwc2UuZWxrLnRvcGRvd25MYXlvdXQiLEJQPSJvcmcuZWNsaXBzZS5lbGsudG9wZG93bi5zY2FsZUZhY3RvciIsRlA9Im9yZy5lY2xpcHNlLmVsay50b3Bkb3duLmhpZXJhcmNoaWNhbE5vZGVXaWR0aCIsUlA9Im9yZy5lY2xpcHNlLmVsay50b3Bkb3duLmhpZXJhcmNoaWNhbE5vZGVBc3BlY3RSYXRpbyIsUXc9Im9yZy5lY2xpcHNlLmVsay50b3Bkb3duLm5vZGVUeXBlIixORWU9Im9yaWdpbiIsQzN0PSJyYW5kb20iLFMzdD0iYm91bmRpbmdCb3gudXBMZWZ0IixfM3Q9ImJvdW5kaW5nQm94Lmxvd1JpZ2h0IixQRWU9Im9yZy5lY2xpcHNlLmVsay5zdHJlc3MuZml4ZWQiLEJFZT0ib3JnLmVjbGlwc2UuZWxrLnN0cmVzcy5kZXNpcmVkRWRnZUxlbmd0aCIsRkVlPSJvcmcuZWNsaXBzZS5lbGsuc3RyZXNzLmRpbWVuc2lvbiIsUkVlPSJvcmcuZWNsaXBzZS5lbGsuc3RyZXNzLmVwc2lsb24iLGpFZT0ib3JnLmVjbGlwc2UuZWxrLnN0cmVzcy5pdGVyYXRpb25MaW1pdCIsTWI9Im9yZy5lY2xpcHNlLmVsay5zdHJlc3MiLEEzdD0iRUxLIFN0cmVzcyIsUHg9Im9yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5taW5pbXVtIix1Rz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5mb3JjZS5zdHJlc3MiLEwzdD0iTGF5ZXJlZCBsYXlvdXQiLEJ4PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQiLGpQPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuY29tcGFjdGlvbi5jb21wb25lbnRzIixkTD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmNvbXBhY3Rpb24ub25lZCIsbEc9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5jb21wYWN0aW9uLm9uZWQuYWxncyIscnY9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5jb21wYWN0aW9uLnJlY3RodWxsIixWMT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmNvbXBvbmVudHMiLElkPSJOT05FIiwkRWU9Ik1PREVMX09SREVSIixhdT17MzoxLDY6MSw0OjEsOToxLDU6MSwxMjY6MX0sTTN0PXszOjEsNjoxLDQ6MSw1OjEsMTUwOjEsMTAwOjEsMTE1OjF9LGhHPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuY29tcG91bmQiLHRzPXs0NzoxfSxDdT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmdyYXBoIixQaGU9IiAtPiAiLEQzdD0iTm90IHN1cHBvcnRlZCBieSBMR3JhcGgiLHpFZT0iUG9ydCBzaWRlIGlzIHVuZGVmaW5lZCIsQmhlPXszOjEsNjoxLDQ6MSw1OjEsNDgzOjEsMTUwOjEsMTAwOjEsMTE1OjF9LG0yPXszOjEsNjoxLDQ6MSw1OjEsMTUwOjEsMTk5OjEsMjEwOjEsMTAwOjEsMTE1OjF9LEkzdD17MzoxLDY6MSw0OjEsNToxLDE1MDoxLDIwNDI6MSwyMTA6MSwxMDA6MSwxMTU6MX0sTzN0PWAoW3siJyAJXHIKYCxOM3Q9YCldfSInIAlccgpgLFAzdD0iVGhlIGdpdmVuIHN0cmluZyBjb250YWlucyBwYXJ0cyB0aGF0IGNhbm5vdCBiZSBwYXJzZWQgYXMgbnVtYmVycy4iLCRQPSJvcmcuZWNsaXBzZS5lbGsuY29yZS5tYXRoIixCM3Q9ezM6MSw0OjEsMTQwOjEsMjE0OjEsNDIzOjF9LEYzdD17MzoxLDQ6MSwxMDc6MSwyMTQ6MSw0MjM6MX0sdjI9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5ncmFwaC50cmFuc2Zvcm0iLFIzdD0iRWxrR3JhcGhJbXBvcnRlciIsajN0PSJFbGtHcmFwaEltcG9ydGVyL2xhbWJkYSQxJFR5cGUiLCQzdD0iRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkMiRUeXBlIix6M3Q9IkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDQkVHlwZSIscnI9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5pbnRlcm1lZGlhdGUiLHEzdD0iTm9kZSBtYXJnaW4gY2FsY3VsYXRpb24iLEgzdD0iT05FX1NJREVEX0dSRUVEWV9TV0lUQ0giLFYzdD0iVFdPX1NJREVEX0dSRUVEWV9TV0lUQ0giLEZoZT0iTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbGF5b3V0IHByb2Nlc3NvciAiLFJoZT0iSW50ZXJtZWRpYXRlUHJvY2Vzc29yU3RyYXRlZ3kiLGpoZT0iTm9kZSAnIixVM3Q9IkZJUlNUX1NFUEFSQVRFIixHM3Q9IkxBU1RfU0VQQVJBVEUiLEszdD0iT2RkIHBvcnQgc2lkZSBwcm9jZXNzaW5nIixhYT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5jb21wYWN0aW9uIixnTD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5ncmVlZHlzd2l0Y2giLGJnPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDNvcmRlci5jb3VudGluZyIselA9ezIzMDoxfSxGeD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5sb29wcyIsQmg9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5pbnRlcm1lZGlhdGUubG9vcHMub3JkZXJpbmciLERiPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuaW50ZXJtZWRpYXRlLmxvb3BzLnJvdXRpbmciLHFFZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5wcmVzZXJ2ZW9yZGVyIixPZD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS53cmFwcGluZyIsb3U9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5vcHRpb25zIiwkaGU9IklOVEVSQUNUSVZFIixIRWU9IkdSRUVEWSIsVzN0PSJERVBUSF9GSVJTVCIsWTN0PSJFREdFX0xFTkdUSCIsWDN0PSJTRUxGX0xPT1BTIixRM3Q9ImZpcnN0VHJ5V2l0aEluaXRpYWxPcmRlciIsVkVlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5kaXJlY3Rpb25Db25ncnVlbmN5IixVRWU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmZlZWRiYWNrRWRnZXMiLGZHPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5pbnRlcmFjdGl2ZVJlZmVyZW5jZVBvaW50IixHRWU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm1lcmdlRWRnZXMiLEtFZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubWVyZ2VIaWVyYXJjaHlFZGdlcyIsV0VlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5hbGxvd05vbkZsb3dQb3J0c1RvU3dpdGNoU2lkZXMiLFlFZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQucG9ydFNvcnRpbmdTdHJhdGVneSIsWEVlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC50aG9yb3VnaG5lc3MiLFFFZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQudW5uZWNlc3NhcnlCZW5kcG9pbnRzIixKRWU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmdlbmVyYXRlUG9zaXRpb25BbmRMYXllcklkcyIsemhlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jeWNsZUJyZWFraW5nLnN0cmF0ZWd5IixxUD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcuc3RyYXRlZ3kiLFpFZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcubGF5ZXJDb25zdHJhaW50IixlVGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLmxheWVyQ2hvaWNlQ29uc3RyYWludCIsdFRlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5sYXllcklkIixxaGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLm1pbldpZHRoLnVwcGVyQm91bmRPbldpZHRoIixIaGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLm1pbldpZHRoLnVwcGVyTGF5ZXJFc3RpbWF0aW9uU2NhbGluZ0ZhY3RvciIsVmhlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5ub2RlUHJvbW90aW9uLnN0cmF0ZWd5IixVaGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLm5vZGVQcm9tb3Rpb24ubWF4SXRlcmF0aW9ucyIsR2hlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5jb2ZmbWFuR3JhaGFtLmxheWVyQm91bmQiLHBMPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5zdHJhdGVneSIsblRlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5mb3JjZU5vZGVNb2RlbE9yZGVyIixLaGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLmhpZXJhcmNoaWNhbFN3ZWVwaW5lc3MiLFdoZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uc2VtaUludGVyYWN0aXZlIixyVGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLmluTGF5ZXJQcmVkT2YiLGlUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uaW5MYXllclN1Y2NPZiIsc1RlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5wb3NpdGlvbkNob2ljZUNvbnN0cmFpbnQiLGFUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24ucG9zaXRpb25JZCIsb1RlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5ncmVlZHlTd2l0Y2guYWN0aXZhdGlvblRocmVzaG9sZCIsWWhlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5ncmVlZHlTd2l0Y2gudHlwZSIsZEc9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLmdyZWVkeVN3aXRjaEhpZXJhcmNoaWNhbC50eXBlIixrNj0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5zdHJhdGVneSIsZ0c9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vZGVQbGFjZW1lbnQuZmF2b3JTdHJhaWdodEVkZ2VzIixYaGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vZGVQbGFjZW1lbnQuYmsuZWRnZVN0cmFpZ2h0ZW5pbmciLFFoZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5iay5maXhlZEFsaWdubWVudCIsSmhlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5ub2RlUGxhY2VtZW50LmxpbmVhclNlZ21lbnRzLmRlZmxlY3Rpb25EYW1wZW5pbmciLFpoZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleC5ub2RlRmxleGliaWxpdHkiLGVmZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleC5ub2RlRmxleGliaWxpdHkuZGVmYXVsdCIsY1RlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlUm91dGluZy5zZWxmTG9vcERpc3RyaWJ1dGlvbiIsdVRlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlUm91dGluZy5zZWxmTG9vcE9yZGVyaW5nIixwRz0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZWRnZVJvdXRpbmcuc3BsaW5lcy5tb2RlIixiRz0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZWRnZVJvdXRpbmcuc3BsaW5lcy5zbG9wcHkubGF5ZXJTcGFjaW5nRmFjdG9yIix0ZmU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmVkZ2VSb3V0aW5nLnBvbHlsaW5lLnNsb3BlZEVkZ2Vab25lV2lkdGgiLGxUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5iYXNlVmFsdWUiLGhUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5lZGdlTm9kZUJldHdlZW5MYXllcnMiLGZUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5lZGdlRWRnZUJldHdlZW5MYXllcnMiLGRUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5ub2RlTm9kZUJldHdlZW5MYXllcnMiLGdUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQucHJpb3JpdHkuZGlyZWN0aW9uIixwVGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLnByaW9yaXR5LnNob3J0bmVzcyIsYlRlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5wcmlvcml0eS5zdHJhaWdodG5lc3MiLG5mZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29tcGFjdGlvbi5jb25uZWN0ZWRDb21wb25lbnRzIixtVGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNvbXBhY3Rpb24ucG9zdENvbXBhY3Rpb24uc3RyYXRlZ3kiLHZUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29tcGFjdGlvbi5wb3N0Q29tcGFjdGlvbi5jb25zdHJhaW50cyIsbUc9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmhpZ2hEZWdyZWVOb2Rlcy50cmVhdG1lbnQiLHJmZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuaGlnaERlZ3JlZU5vZGVzLnRocmVzaG9sZCIsaWZlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5oaWdoRGVncmVlTm9kZXMudHJlZUhlaWdodCIsZnA9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLnN0cmF0ZWd5Iix2Rz0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuYWRkaXRpb25hbEVkZ2VTcGFjaW5nIix3Rz0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuY29ycmVjdGlvbkZhY3RvciIsYkw9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLmN1dHRpbmcuc3RyYXRlZ3kiLHNmZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuY3V0dGluZy5jdXRzIixhZmU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLmN1dHRpbmcubXNkLmZyZWVkb20iLHlHPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy52YWxpZGlmeS5zdHJhdGVneSIseEc9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLnZhbGlkaWZ5LmZvcmJpZGRlbkluZGljZXMiLGtHPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5tdWx0aUVkZ2UuaW1wcm92ZUN1dHMiLEVHPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5tdWx0aUVkZ2UuZGlzdGFuY2VQZW5hbHR5IixvZmU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLm11bHRpRWRnZS5pbXByb3ZlV3JhcHBlZEVkZ2VzIix3VGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmVkZ2VMYWJlbHMuc2lkZVNlbGVjdGlvbiIseVRlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlTGFiZWxzLmNlbnRlckxhYmVsUGxhY2VtZW50U3RyYXRlZ3kiLFRHPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuc3RyYXRlZ3kiLHhUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLnBvcnRNb2RlbE9yZGVyIixrVGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNvbnNpZGVyTW9kZWxPcmRlci5ub01vZGVsT3JkZXIiLGNmZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLmNvbXBvbmVudHMiLEVUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLmxvbmdFZGdlU3RyYXRlZ3kiLHVmZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLmNyb3NzaW5nQ291bnRlck5vZGVJbmZsdWVuY2UiLGxmZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLmNyb3NzaW5nQ291bnRlclBvcnRJbmZsdWVuY2UiLGhmZT0ibGF5ZXJpbmciLEozdD0ibGF5ZXJpbmcubWluV2lkdGgiLFozdD0ibGF5ZXJpbmcubm9kZVByb21vdGlvbiIsZ1Q9ImNyb3NzaW5nTWluaW1pemF0aW9uIixDRz0ib3JnLmVjbGlwc2UuZWxrLmhpZXJhcmNoeUhhbmRsaW5nIixleXQ9ImNyb3NzaW5nTWluaW1pemF0aW9uLmdyZWVkeVN3aXRjaCIsdHl0PSJub2RlUGxhY2VtZW50IixueXQ9Im5vZGVQbGFjZW1lbnQuYmsiLHJ5dD0iZWRnZVJvdXRpbmciLEhQPSJvcmcuZWNsaXBzZS5lbGsuZWRnZVJvdXRpbmciLFUxPSJzcGFjaW5nIixUVGU9InByaW9yaXR5IixDVGU9ImNvbXBhY3Rpb24iLGl5dD0iY29tcGFjdGlvbi5wb3N0Q29tcGFjdGlvbiIsc3l0PSJTcGVjaWZpZXMgd2hldGhlciBhbmQgaG93IHBvc3QtcHJvY2VzcyBjb21wYWN0aW9uIGlzIGFwcGxpZWQuIixTVGU9ImhpZ2hEZWdyZWVOb2RlcyIsX1RlPSJ3cmFwcGluZyIsYXl0PSJ3cmFwcGluZy5jdXR0aW5nIixveXQ9IndyYXBwaW5nLnZhbGlkaWZ5IixBVGU9IndyYXBwaW5nLm11bHRpRWRnZSIsZmZlPSJlZGdlTGFiZWxzIixtTD0iY29uc2lkZXJNb2RlbE9yZGVyIixMVGU9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmNvbW1lbnRDb21tZW50IixNVGU9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmNvbW1lbnROb2RlIixEVGU9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmVkZ2VFZGdlIixkZmU9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmVkZ2VOb2RlIixJVGU9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmxhYmVsTGFiZWwiLE9UZT0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcubGFiZWxQb3J0SG9yaXpvbnRhbCIsTlRlPSJvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5sYWJlbFBvcnRWZXJ0aWNhbCIsUFRlPSJvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5sYWJlbE5vZGUiLEJUZT0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcubm9kZVNlbGZMb29wIixGVGU9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLnBvcnRQb3J0IixSVGU9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmluZGl2aWR1YWwiLGpUZT0ib3JnLmVjbGlwc2UuZWxrLnBvcnQuYm9yZGVyT2Zmc2V0IiwkVGU9Im9yZy5lY2xpcHNlLmVsay5ub0xheW91dCIselRlPSJvcmcuZWNsaXBzZS5lbGsucG9ydC5zaWRlIixWUD0ib3JnLmVjbGlwc2UuZWxrLmRlYnVnTW9kZSIscVRlPSJvcmcuZWNsaXBzZS5lbGsuYWxpZ25tZW50IixIVGU9Im9yZy5lY2xpcHNlLmVsay5pbnNpZGVTZWxmTG9vcHMuYWN0aXZhdGUiLFZUZT0ib3JnLmVjbGlwc2UuZWxrLmluc2lkZVNlbGZMb29wcy55byIsZ2ZlPSJvcmcuZWNsaXBzZS5lbGsuZGlyZWN0aW9uIixVVGU9Im9yZy5lY2xpcHNlLmVsay5ub2RlTGFiZWxzLnBhZGRpbmciLEdUZT0ib3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMubmV4dFRvUG9ydElmUG9zc2libGUiLEtUZT0ib3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMudHJlYXRBc0dyb3VwIixXVGU9Im9yZy5lY2xpcHNlLmVsay5wb3J0QWxpZ25tZW50LmRlZmF1bHQiLFlUZT0ib3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQubm9ydGgiLFhUZT0ib3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQuc291dGgiLFFUZT0ib3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQud2VzdCIsSlRlPSJvcmcuZWNsaXBzZS5lbGsucG9ydEFsaWdubWVudC5lYXN0IixTRz0ib3JnLmVjbGlwc2UuZWxrLmNvbnRlbnRBbGlnbm1lbnQiLFpUZT0ib3JnLmVjbGlwc2UuZWxrLmp1bmN0aW9uUG9pbnRzIixlQ2U9Im9yZy5lY2xpcHNlLmVsay5lZGdlTGFiZWxzLnBsYWNlbWVudCIsdENlPSJvcmcuZWNsaXBzZS5lbGsucG9ydC5pbmRleCIsbkNlPSJvcmcuZWNsaXBzZS5lbGsuY29tbWVudEJveCIsckNlPSJvcmcuZWNsaXBzZS5lbGsuaHlwZXJub2RlIixpQ2U9Im9yZy5lY2xpcHNlLmVsay5wb3J0LmFuY2hvciIscGZlPSJvcmcuZWNsaXBzZS5lbGsucGFydGl0aW9uaW5nLmFjdGl2YXRlIixiZmU9Im9yZy5lY2xpcHNlLmVsay5wYXJ0aXRpb25pbmcucGFydGl0aW9uIixfRz0ib3JnLmVjbGlwc2UuZWxrLnBvc2l0aW9uIixzQ2U9Im9yZy5lY2xpcHNlLmVsay5tYXJnaW5zIixhQ2U9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLnBvcnRzU3Vycm91bmRpbmciLEFHPSJvcmcuZWNsaXBzZS5lbGsuaW50ZXJhY3RpdmVMYXlvdXQiLFVjPSJvcmcuZWNsaXBzZS5lbGsuY29yZS51dGlsIixvQ2U9ezM6MSw0OjEsNToxLDYwMToxfSxjeXQ9Ik5FVFdPUktfU0lNUExFWCIsY0NlPSJTSU1QTEUiLFVvPXsxMDY6MSw0NzoxfSxMRz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnAxY3ljbGVzIixkcD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnAybGF5ZXJzIix1Q2U9ezQxMzoxLDIzMDoxfSx1eXQ9ezg0NjoxLDM6MSw0OjF9LENsPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDNvcmRlciIsR289Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5wNG5vZGVzIixseXQ9ezM6MSw0OjEsNToxLDg1NDoxfSxOZD0xZS01LEliPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDRub2Rlcy5iayIsbWZlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDVlZGdlcyIsaTE9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5wNWVkZ2VzLm9ydGhvZ29uYWwiLHZmZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnA1ZWRnZXMub3J0aG9nb25hbC5kaXJlY3Rpb24iLHdmZT0xZS02LFp5PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDVlZGdlcy5zcGxpbmVzIix5ZmU9LjA5OTk5OTk5OTk5OTk5OTk4LE1HPTFlLTgsaHl0PTQuNzEyMzg4OTgwMzg0NjksbENlPTMuMTQxNTkyNjUzNTg5NzkzLGdwPSJvcmcuZWNsaXBzZS5lbGsuYWxnLm1ydHJlZSIseGZlPS4xMDAwMDAwMDE0OTAxMTYxMixERz0iU1VQRVJfUk9PVCIsdkw9Im9yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLmdyYXBoIixoQ2U9LTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MixTdT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUuaW50ZXJtZWRpYXRlIixmeXQ9IlByb2Nlc3NvciBjb21wdXRlIGZhbm91dCIsSUc9ezM6MSw2OjEsNDoxLDU6MSw1MzQ6MSwxMDA6MSwxMTU6MX0sZHl0PSJTZXQgbmVpZ2hib3JzIGluIGxldmVsIixVUD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUub3B0aW9ucyIsZ3l0PSJERVNDRU5EQU5UUyIsZkNlPSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlLmNvbXBhY3Rpb24iLGRDZT0ib3JnLmVjbGlwc2UuZWxrLm1ydHJlZS5lZGdlRW5kVGV4dHVyZUxlbmd0aCIsZ0NlPSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlLnRyZWVMZXZlbCIscENlPSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlLnBvc2l0aW9uQ29uc3RyYWludCIsYkNlPSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlLndlaWdodGluZyIsbUNlPSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlLmVkZ2VSb3V0aW5nTW9kZSIsdkNlPSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlLnNlYXJjaE9yZGVyIixweXQ9IlBvc2l0aW9uIENvbnN0cmFpbnQiLFh1PSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlIixieXQ9Im9yZy5lY2xpcHNlLmVsay50cmVlIixteXQ9IlByb2Nlc3NvciBhcnJhbmdlIGxldmVsIixwVD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUucDJvcmRlciIsdmg9Im9yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLnA0cm91dGUiLHdDZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwiLGl2PTYuMjgzMTg1MzA3MTc5NTg2LHlDZT0iQmVmb3JlIix4Q2U9NWUtMzI0LE9HPSJBZnRlciIsa0NlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5pbnRlcm1lZGlhdGUiLHZ5dD0iQ09NUEFDVElPTiIsa2ZlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5pbnRlcm1lZGlhdGUuY29tcGFjdGlvbiIsd3l0PXszOjEsNDoxLDU6MSwxMDA6MX0sRUNlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5pbnRlcm1lZGlhdGUub3B0aW1pemF0aW9uIixFZmU9Ik5vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGxheW91dCBvcHRpb24gIix3TD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwub3B0aW9ucyIsVENlPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLmNlbnRlck9uUm9vdCIsQ0NlPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLm9yZGVySWQiLFNDZT0ib3JnLmVjbGlwc2UuZWxrLnJhZGlhbC5yYWRpdXMiLE5HPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLnJvdGF0ZSIsVGZlPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLmNvbXBhY3RvciIsQ2ZlPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLmNvbXBhY3Rpb25TdGVwU2l6ZSIsX0NlPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLnNvcnRlciIsQUNlPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLndlZGdlQ3JpdGVyaWEiLExDZT0ib3JnLmVjbGlwc2UuZWxrLnJhZGlhbC5vcHRpbWl6YXRpb25Dcml0ZXJpYSIsU2ZlPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLnJvdGF0aW9uLnRhcmdldEFuZ2xlIixfZmU9Im9yZy5lY2xpcHNlLmVsay5yYWRpYWwucm90YXRpb24uY29tcHV0ZUFkZGl0aW9uYWxXZWRnZVNwYWNlIixNQ2U9Im9yZy5lY2xpcHNlLmVsay5yYWRpYWwucm90YXRpb24ub3V0Z29pbmdFZGdlQW5nbGVzIix5eXQ9IkNvbXBhY3Rpb24iLERDZT0icm90YXRpb24iLGdmPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsIix4eXQ9Im9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLnAxcG9zaXRpb24ud2VkZ2UiLElDZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwuc29ydGluZyIsa3l0PTUuNDk3Nzg3MTQzNzgyMTM4LEV5dD0zLjkyNjk5MDgxNjk4NzI0MTQsVHl0PTIuMzU2MTk0NDkwMTkyMzQ1LEN5dD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yZWN0cGFja2luZyIsUEc9Im9yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcuaW50ZXJtZWRpYXRlIixBZmU9Im9yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcub3B0aW9ucyIsT0NlPSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcudHJ5Ym94IixOQ2U9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5jdXJyZW50UG9zaXRpb24iLFBDZT0ib3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLmRlc2lyZWRQb3NpdGlvbiIsQkNlPSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcuaW5OZXdSb3ciLEZDZT0ib3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLndpZHRoQXBwcm94aW1hdGlvbi5zdHJhdGVneSIsUkNlPSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcud2lkdGhBcHByb3hpbWF0aW9uLnRhcmdldFdpZHRoIixqQ2U9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy53aWR0aEFwcHJveGltYXRpb24ub3B0aW1pemF0aW9uR29hbCIsJENlPSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcud2lkdGhBcHByb3hpbWF0aW9uLmxhc3RQbGFjZVNoaWZ0Iix6Q2U9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5wYWNraW5nLnN0cmF0ZWd5IixxQ2U9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5wYWNraW5nLmNvbXBhY3Rpb24ucm93SGVpZ2h0UmVldmFsdWF0aW9uIixIQ2U9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5wYWNraW5nLmNvbXBhY3Rpb24uaXRlcmF0aW9ucyIsVkNlPSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcud2hpdGVTcGFjZUVsaW1pbmF0aW9uLnN0cmF0ZWd5IixMZmU9IndpZHRoQXBwcm94aW1hdGlvbiIsU3l0PSJDb21wYWN0aW9uIFN0cmF0ZWd5IixfeXQ9InBhY2tpbmcuY29tcGFjdGlvbiIsdGg9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZyIsYlQ9Im9yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcucDF3aWR0aGFwcHJveGltYXRpb24iLEJHPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJlY3RwYWNraW5nLnAycGFja2luZyIsQXl0PSJObyBDb21wYWN0aW9uIixVQ2U9Im9yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcucDN3aGl0ZXNwYWNlZWxpbWluYXRpb24iLEdQPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJlY3RwYWNraW5nLnV0aWwiLEZHPSJObyBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgZm9yICIsZTQ9Im9yZy5lY2xpcHNlLmVsay5hbGcuc3BvcmUiLHQ0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLnNwb3JlLm9wdGlvbnMiLEp3PSJvcmcuZWNsaXBzZS5lbGsuc3BvcmVDb21wYWN0aW9uIixNZmU9Im9yZy5lY2xpcHNlLmVsay51bmRlcmx5aW5nTGF5b3V0QWxnb3JpdGhtIixHQ2U9Im9yZy5lY2xpcHNlLmVsay5wcm9jZXNzaW5nT3JkZXIudHJlZUNvbnN0cnVjdGlvbiIsS0NlPSJvcmcuZWNsaXBzZS5lbGsucHJvY2Vzc2luZ09yZGVyLnNwYW5uaW5nVHJlZUNvc3RGdW5jdGlvbiIsRGZlPSJvcmcuZWNsaXBzZS5lbGsucHJvY2Vzc2luZ09yZGVyLnByZWZlcnJlZFJvb3QiLElmZT0ib3JnLmVjbGlwc2UuZWxrLnByb2Nlc3NpbmdPcmRlci5yb290U2VsZWN0aW9uIixPZmU9Im9yZy5lY2xpcHNlLmVsay5zdHJ1Y3R1cmUuc3RydWN0dXJlRXh0cmFjdGlvblN0cmF0ZWd5IixXQ2U9Im9yZy5lY2xpcHNlLmVsay5jb21wYWN0aW9uLmNvbXBhY3Rpb25TdHJhdGVneSIsWUNlPSJvcmcuZWNsaXBzZS5lbGsuY29tcGFjdGlvbi5vcnRob2dvbmFsIixYQ2U9Im9yZy5lY2xpcHNlLmVsay5vdmVybGFwUmVtb3ZhbC5tYXhJdGVyYXRpb25zIixRQ2U9Im9yZy5lY2xpcHNlLmVsay5vdmVybGFwUmVtb3ZhbC5ydW5TY2FubGluZSIsTmZlPSJwcm9jZXNzaW5nT3JkZXIiLEx5dD0ib3ZlcmxhcFJlbW92YWwiLG1UPSJvcmcuZWNsaXBzZS5lbGsuc3BvcmVPdmVybGFwIixNeXQ9Im9yZy5lY2xpcHNlLmVsay5hbGcuc3BvcmUucDFzdHJ1Y3R1cmUiLFBmZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5zcG9yZS5wMnByb2Nlc3NpbmdvcmRlciIsQmZlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnNwb3JlLnAzZXhlY3V0aW9uIixEeXQ9IlRvcGRvd24gTGF5b3V0IixJeXQ9IkludmFsaWQgaW5kZXg6ICIsdlQ9Im9yZy5lY2xpcHNlLmVsay5jb3JlLmFsZyIsRTY9ezM0MToxfSxuND17Mjk1OjF9LE95dD0iTWFrZSBzdXJlIGl0cyB0eXBlIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgIixKQ2U9IiB1dGlsaXR5IGNsYXNzLiIsd1Q9InRydWUiLEZmZT0iZmFsc2UiLE55dD0iQ291bGRuJ3QgY2xvbmUgcHJvcGVydHkgJyIsWnc9LjA1LG5oPSJvcmcuZWNsaXBzZS5lbGsuY29yZS5vcHRpb25zIixQeXQ9MS4yOTk5OTk5NTIzMTYyODQyLGUzPSJvcmcuZWNsaXBzZS5lbGsuYm94IixaQ2U9Im9yZy5lY2xpcHNlLmVsay5leHBhbmROb2RlcyIsZVNlPSJvcmcuZWNsaXBzZS5lbGsuYm94LnBhY2tpbmdNb2RlIixCeXQ9Im9yZy5lY2xpcHNlLmVsay5hbGdvcml0aG0iLEZ5dD0ib3JnLmVjbGlwc2UuZWxrLnJlc29sdmVkQWxnb3JpdGhtIix0U2U9Im9yZy5lY2xpcHNlLmVsay5iZW5kUG9pbnRzIixzT249Im9yZy5lY2xpcHNlLmVsay5sYWJlbE1hbmFnZXIiLFJ5dD0ib3JnLmVjbGlwc2UuZWxrLnNjYWxlRmFjdG9yIixqeXQ9Im9yZy5lY2xpcHNlLmVsay5jaGlsZEFyZWFXaWR0aCIsJHl0PSJvcmcuZWNsaXBzZS5lbGsuY2hpbGRBcmVhSGVpZ2h0Iix6eXQ9Im9yZy5lY2xpcHNlLmVsay5hbmltYXRlIixxeXQ9Im9yZy5lY2xpcHNlLmVsay5hbmltVGltZUZhY3RvciIsSHl0PSJvcmcuZWNsaXBzZS5lbGsubGF5b3V0QW5jZXN0b3JzIixWeXQ9Im9yZy5lY2xpcHNlLmVsay5tYXhBbmltVGltZSIsVXl0PSJvcmcuZWNsaXBzZS5lbGsubWluQW5pbVRpbWUiLEd5dD0ib3JnLmVjbGlwc2UuZWxrLnByb2dyZXNzQmFyIixLeXQ9Im9yZy5lY2xpcHNlLmVsay52YWxpZGF0ZUdyYXBoIixXeXQ9Im9yZy5lY2xpcHNlLmVsay52YWxpZGF0ZU9wdGlvbnMiLFl5dD0ib3JnLmVjbGlwc2UuZWxrLnpvb21Ub0ZpdCIsYU9uPSJvcmcuZWNsaXBzZS5lbGsuZm9udC5uYW1lIixYeXQ9Im9yZy5lY2xpcHNlLmVsay5mb250LnNpemUiLG5TZT0ib3JnLmVjbGlwc2UuZWxrLnRvcGRvd24uc2l6ZUFwcHJveGltYXRvciIsclNlPSJvcmcuZWNsaXBzZS5lbGsudG9wZG93bi5zY2FsZUNhcCIsUXl0PSJvcmcuZWNsaXBzZS5lbGsuZWRnZS50eXBlIixKeXQ9InBhcnRpdGlvbmluZyIsWnl0PSJub2RlTGFiZWxzIixSRz0icG9ydEFsaWdubWVudCIsUmZlPSJub2RlU2l6ZSIsamZlPSJwb3J0IixpU2U9InBvcnRMYWJlbHMiLEtQPSJ0b3Bkb3duIixlNHQ9Imluc2lkZVNlbGZMb29wcyIseUw9Im9yZy5lY2xpcHNlLmVsay5maXhlZCIsakc9Im9yZy5lY2xpcHNlLmVsay5yYW5kb20iLHNTZT17MzoxLDM0OjEsMjI6MSwzNDc6MX0sdDR0PSJwb3J0IG11c3QgaGF2ZSBhIHBhcmVudCBub2RlIHRvIGNhbGN1bGF0ZSB0aGUgcG9ydCBzaWRlIixuNHQ9IlRoZSBlZGdlIG5lZWRzIHRvIGhhdmUgZXhhY3RseSBvbmUgZWRnZSBzZWN0aW9uLiBGb3VuZDogIix4TD0ib3JnLmVjbGlwc2UuZWxrLmNvcmUudXRpbC5hZGFwdGVycyIscGY9Im9yZy5lY2xpcHNlLmVtZi5lY29yZSIsVDY9Im9yZy5lY2xpcHNlLmVsay5ncmFwaCIscjR0PSJFTWFwUHJvcGVydHlIb2xkZXIiLGk0dD0iRWxrQmVuZFBvaW50IixzNHQ9IkVsa0dyYXBoRWxlbWVudCIsYTR0PSJFbGtDb25uZWN0YWJsZVNoYXBlIixhU2U9IkVsa0VkZ2UiLG80dD0iRWxrRWRnZVNlY3Rpb24iLGM0dD0iRU1vZGVsRWxlbWVudCIsdTR0PSJFTmFtZWRFbGVtZW50IixvU2U9IkVsa0xhYmVsIixjU2U9IkVsa05vZGUiLHVTZT0iRWxrUG9ydCIsbDR0PXs5NDoxLDkzOjF9LFJ4PSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsIixPYj0iVGhlIGZlYXR1cmUgJyIsa0w9IicgaXMgbm90IGEgdmFsaWQgY2hhbmdlYWJsZSBmZWF0dXJlIixoNHQ9IkV4cGVjdGluZyBudWxsIiwkZmU9IicgaXMgbm90IGEgdmFsaWQgZmVhdHVyZSIsZjR0PSJUaGUgZmVhdHVyZSBJRCIsZDR0PSIgaXMgbm90IGEgdmFsaWQgZmVhdHVyZSBJRCIsZXU9MzI3NjgsZzR0PXsxMTA6MSw5NDoxLDkzOjEsNTg6MSw1NDoxLDk5OjF9LEduPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbCIsc3Y9Im9yZy5lY2xpcHNlLmVsay5ncmFwaC5pbXBsIixFTD0iUmVjdXJzaXZlIGNvbnRhaW5tZW50IG5vdCBhbGxvd2VkIGZvciAiLHlUPSJUaGUgZGF0YXR5cGUgJyIsdDM9IicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIsemZlPSJUaGUgdmFsdWUgJyIsQzY9ezE5NToxLDM6MSw0OjF9LHFmZT0iVGhlIGNsYXNzICciLHhUPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2Vsay9FbGtHcmFwaCIsbFNlPSJwcm9wZXJ0eSIsVEw9InZhbHVlIixIZmU9InNvdXJjZSIscDR0PSJwcm9wZXJ0aWVzIixiNHQ9ImlkZW50aWZpZXIiLFZmZT0iaGVpZ2h0IixVZmU9IndpZHRoIixHZmU9InBhcmVudCIsS2ZlPSJ0ZXh0IixXZmU9ImNoaWxkcmVuIixtNHQ9ImhpZXJhcmNoaWNhbCIsaFNlPSJzb3VyY2VzIixZZmU9InRhcmdldHMiLGZTZT0ic2VjdGlvbnMiLCRHPSJiZW5kUG9pbnRzIixkU2U9Im91dGdvaW5nU2hhcGUiLGdTZT0iaW5jb21pbmdTaGFwZSIscFNlPSJvdXRnb2luZ1NlY3Rpb25zIixiU2U9ImluY29taW5nU2VjdGlvbnMiLFNvPSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwiLG1TZT0iU2V2ZXJlIGltcGxlbWVudGF0aW9uIGVycm9yIGluIHRoZSBKc29uIHRvIEVsa0dyYXBoIGltcG9ydGVyLiIsUGQ9ImlkIixubz0ib3JnLmVjbGlwc2UuZWxrLmdyYXBoLmpzb24iLHZTZT0iVW5oYW5kbGVkIHBhcmFtZXRlciB0eXBlczogIix2NHQ9InN0YXJ0UG9pbnQiLHc0dD0iQW4gZWRnZSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHNvdXJjZSBhbmQgb25lIHRhcmdldCAoZWRnZSBpZDogJyIsa1Q9IicpLiIseTR0PSJSZWZlcmVuY2VkIGVkZ2Ugc2VjdGlvbiBkb2VzIG5vdCBleGlzdDogIix4NHQ9IiAoZWRnZSBpZDogJyIsd1NlPSJ0YXJnZXQiLGs0dD0ic291cmNlUG9pbnQiLEU0dD0idGFyZ2V0UG9pbnQiLHpHPSJncm91cCIsX2k9Im5hbWUiLFQ0dD0iY29ubmVjdGFibGVTaGFwZSBjYW5ub3QgYmUgbnVsbCIsQzR0PSJlZGdlIGNhbm5vdCBiZSBudWxsIixYZmU9IlBhc3NlZCBlZGdlIGlzIG5vdCAnc2ltcGxlJy4iLHFHPSJvcmcuZWNsaXBzZS5lbGsuZ3JhcGgudXRpbCIsV1A9IlRoZSAnbm8gZHVwbGljYXRlcycgY29uc3RyYWludCBpcyB2aW9sYXRlZCIsUWZlPSJ0YXJnZXRJbmRleD0iLGF2PSIsIHNpemU9IixKZmU9InNvdXJjZUluZGV4PSIsQmQ9ezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDU5OjEsNzA6MSw2NjoxLDYxOjF9LFpmZT17MzoxLDQ6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDUxOjEsMTU6MSw1OToxLDcwOjEsNjY6MSw2MToxLDU5NjoxfSxIRz0ibG9nZ2luZyIsUzR0PSJtZWFzdXJlRXhlY3V0aW9uVGltZSIsXzR0PSJwYXJzZXIucGFyc2UuMSIsQTR0PSJwYXJzZXIucGFyc2UuMiIsVkc9InBhcnNlci5uZXh0LjEiLGUwZT0icGFyc2VyLm5leHQuMiIsTDR0PSJwYXJzZXIubmV4dC4zIixNNHQ9InBhcnNlci5uZXh0LjQiLG92PSJwYXJzZXIuZmFjdG9yLjEiLHlTZT0icGFyc2VyLmZhY3Rvci4yIixENHQ9InBhcnNlci5mYWN0b3IuMyIsSTR0PSJwYXJzZXIuZmFjdG9yLjQiLE80dD0icGFyc2VyLmZhY3Rvci41IixONHQ9InBhcnNlci5mYWN0b3IuNiIsUDR0PSJwYXJzZXIuYXRvbS4xIixCNHQ9InBhcnNlci5hdG9tLjIiLEY0dD0icGFyc2VyLmF0b20uMyIseFNlPSJwYXJzZXIuYXRvbS40Iix0MGU9InBhcnNlci5hdG9tLjUiLGtTZT0icGFyc2VyLmNjLjEiLFVHPSJwYXJzZXIuY2MuMiIsUjR0PSJwYXJzZXIuY2MuMyIsajR0PSJwYXJzZXIuY2MuNSIsRVNlPSJwYXJzZXIuY2MuNiIsVFNlPSJwYXJzZXIuY2MuNyIsbjBlPSJwYXJzZXIuY2MuOCIsJDR0PSJwYXJzZXIub3BlLjEiLHo0dD0icGFyc2VyLm9wZS4yIixxNHQ9InBhcnNlci5vcGUuMyIsdzI9InBhcnNlci5kZXNjYXBlLjEiLEg0dD0icGFyc2VyLmRlc2NhcGUuMiIsVjR0PSJwYXJzZXIuZGVzY2FwZS4zIixVNHQ9InBhcnNlci5kZXNjYXBlLjQiLEc0dD0icGFyc2VyLmRlc2NhcGUuNSIsYmY9InBhcnNlci5wcm9jZXNzLjEiLEs0dD0icGFyc2VyLnF1YW50aWZpZXIuMSIsVzR0PSJwYXJzZXIucXVhbnRpZmllci4yIixZNHQ9InBhcnNlci5xdWFudGlmaWVyLjMiLFg0dD0icGFyc2VyLnF1YW50aWZpZXIuNCIsQ1NlPSJwYXJzZXIucXVhbnRpZmllci41IixRNHQ9Im9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5IixTU2U9ezQyNDoxLDY4NjoxfSxKNHQ9ezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDcwOjEsNjE6MX0sWVA9ezM3ODoxLDE1MjoxfSxDTD0iaW5kZXg9IixyMGU9ezM6MSw0OjEsNToxLDEyOToxfSxaNHQ9ezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDU5OjEsNzA6MSw2MToxfSxfU2U9ezM6MSw2OjEsNDoxLDU6MSwxOTg6MX0sZTV0PXszOjEsNDoxLDU6MSwxNzM6MSwzNzk6MX0sdDV0PSI7Lz86QCY9KyQsIixuNXQ9ImludmFsaWQgYXV0aG9yaXR5OiAiLHI1dD0iRUFubm90YXRpb24iLGk1dD0iRVR5cGVkRWxlbWVudCIsczV0PSJFU3RydWN0dXJhbEZlYXR1cmUiLGE1dD0iRUF0dHJpYnV0ZSIsbzV0PSJFQ2xhc3NpZmllciIsYzV0PSJFRW51bUxpdGVyYWwiLHU1dD0iRUdlbmVyaWNUeXBlIixsNXQ9IkVPcGVyYXRpb24iLGg1dD0iRVBhcmFtZXRlciIsZjV0PSJFUmVmZXJlbmNlIixkNXQ9IkVUeXBlUGFyYW1ldGVyIix1cz0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwiLGkwZT17Nzk6MX0sQVNlPXszOjEsMjA6MSwxNjoxLDE1OjEsNjE6MSw1OTc6MSw3OToxLDcxOjEsOTc6MX0sZzV0PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5GZWF0dXJlTWFwJEVudHJ5IixTbD04MTkyLHI0PTIwNDgsU0w9ImJ5dGUiLEdHPSJjaGFyIixfTD0iZG91YmxlIixBTD0iZmxvYXQiLExMPSJpbnQiLE1MPSJsb25nIixETD0ic2hvcnQiLHA1dD0iamF2YS5sYW5nLk9iamVjdCIsUzY9ezM6MSw0OjEsNToxLDI1NDoxfSxMU2U9ezM6MSw0OjEsNToxLDY4ODoxfSxiNXQ9ezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDU5OjEsNzA6MSw2NjoxLDYxOjEsNzE6MX0sa2M9ezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDU5OjEsNzA6MSw2NjoxLDYxOjEsNzk6MSw3MToxLDk3OjF9LFhQPSJtaXhlZCIsbGk9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSIsQmY9ImtpbmQiLG01dD17MzoxLDQ6MSw1OjEsNjg5OjF9LE1TZT17MzoxLDQ6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDE1OjEsNzA6MSw2MToxLDc5OjEsNzE6MSw5NzoxfSxLRz17MjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDYxOjEsNzE6MX0sV0c9ezUxOjEsMTI4OjEsMjg3OjF9LFlHPXs3NjoxLDM0MzoxfSxYRz0iVGhlIHZhbHVlIG9mIHR5cGUgJyIsUUc9IicgbXVzdCBiZSBvZiB0eXBlICciLF82PTEzNTIsRmY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiLEpHPS0zMjc2OCxuMz0iY29uc3RyYWludHMiLGhvPSJiYXNlVHlwZSIsdjV0PSJnZXRFU3RydWN0dXJhbEZlYXR1cmUiLHc1dD0iZ2V0RmVhdHVyZUlEIixJTD0iZmVhdHVyZSIseTV0PSJnZXRPcGVyYXRpb25JRCIsRFNlPSJvcGVyYXRpb24iLHg1dD0iZGVmYXVsdFZhbHVlIixrNXQ9ImVUeXBlUGFyYW1ldGVycyIsRTV0PSJpc0luc3RhbmNlIixUNXQ9ImdldEVFbnVtTGl0ZXJhbCIsQzV0PSJlQ29udGFpbmluZ0NsYXNzIix5aT17NTc6MX0sUzV0PXszOjEsNDoxLDU6MSwxMjQ6MX0sXzV0PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UiLEE1dD17OTQ6MSw5MzoxLDU5OToxLDIwMzQ6MX0sczBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbCIsSVNlPSJ1bnNwZWNpZmllZCIsUVA9InNpbXBsZSIsWkc9ImF0dHJpYnV0ZSIsTDV0PSJhdHRyaWJ1dGVXaWxkY2FyZCIsZUs9ImVsZW1lbnQiLGEwZT0iZWxlbWVudFdpbGRjYXJkIixzMT0iY29sbGFwc2UiLG8wZT0iaXRlbVR5cGUiLHRLPSJuYW1lc3BhY2UiLEpQPSIjI3RhcmdldE5hbWVzcGFjZSIsUmY9IndoaXRlU3BhY2UiLE9TZT0id2lsZGNhcmRzIixjdj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIixjMGU9IiMjYW55IixFVD0idW5pbml0aWFsaXplZCIsWlA9IlRoZSBtdWx0aXBsaWNpdHkgY29uc3RyYWludCBpcyB2aW9sYXRlZCIsbks9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZSIsTTV0PSJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iLEQ1dD0iU2ltcGxlQW55VHlwZSIsSTV0PSJYTUxUeXBlRG9jdW1lbnRSb290IixlYT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLmltcGwiLGVCPSJJTkYiLE81dD0icHJvY2Vzc2luZyIsTjV0PSJFTlRJVElFU18uX2Jhc2UiLE5TZT0ibWluTGVuZ3RoIixQU2U9IkVOVElUWSIscks9Ik5DTmFtZSIsUDV0PSJJRFJFRlNfLl9iYXNlIixCU2U9ImludGVnZXIiLHUwZT0idG9rZW4iLGwwZT0icGF0dGVybiIsQjV0PSJbYS16QS1aXXsxLDh9KC1bYS16QS1aMC05XXsxLDh9KSoiLEZTZT0iXFxpXFxjKiIsRjV0PSJbXFxpLVs6XV1bXFxjLVs6XV0qIixSNXQ9Im5vblBvc2l0aXZlSW50ZWdlciIsdEI9Im1heEluY2x1c2l2ZSIsUlNlPSJOTVRPS0VOIixqNXQ9Ik5NVE9LRU5TXy5fYmFzZSIsalNlPSJub25OZWdhdGl2ZUludGVnZXIiLG5CPSJtaW5JbmNsdXNpdmUiLCQ1dD0ibm9ybWFsaXplZFN0cmluZyIsejV0PSJ1bnNpZ25lZEJ5dGUiLHE1dD0idW5zaWduZWRJbnQiLEg1dD0iMTg0NDY3NDQwNzM3MDk1NTE2MTUiLFY1dD0idW5zaWduZWRTaG9ydCIsVTV0PSJwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iLHkyPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuaW50ZXJuYWwiLFRUPTExMTQxMTEsRzV0PSJJbnRlcm5hbCBFcnJvcjogc2hvcnRoYW5kczogXFx1IixPTD0ieG1sOmlzRGlnaXQiLGgwZT0ieG1sOmlzV29yZCIsZjBlPSJ4bWw6aXNTcGFjZSIsZDBlPSJ4bWw6aXNOYW1lQ2hhciIsZzBlPSJ4bWw6aXNJbml0aWFsTmFtZUNoYXIiLEs1dD0iMDnZoNmp27DbueClpuClr+CnpuCnr+CppuCpr+CrpuCrr+CtpuCtr+Cvp+Cvr+CxpuCxr+CzpuCzr+C1puC1r+C5kOC5meC7kOC7meC8oOC8qSIsVzV0PSJBWmF6w4DDlsOYw7bDuMSxxLTEvsWBxYjFisW+xoDHg8eNx7DHtMe1x7rIl8mQyqjKu8uBzobOhs6IzorOjM6Mzo7Ooc6jz47PkM+Wz5rPms+cz5zPns+ez6DPoM+iz7PQgdCM0I7Rj9GR0ZzRntKB0pDThNOH04jTi9OM05DTq9Ou07XTuNO51LHVltWZ1ZnVodaG15DXqtew17LYodi62YHZitmx2rfautq+24DbjtuQ25PblduV26XbpuCkheCkueCkveCkveClmOCloeCmheCmjOCmj+CmkOCmk+CmqOCmquCmsOCmsuCmsuCmtuCmueCnnOCnneCnn+CnoeCnsOCnseCoheCoiuCoj+CokOCok+CoqOCoquCosOCosuCos+CoteCotuCouOCoueCpmeCpnOCpnuCpnuCpsuCptOCqheCqi+CqjeCqjeCqj+CqkeCqk+CqqOCqquCqsOCqsuCqs+CqteCqueCqveCqveCroOCroOCsheCsjOCsj+CskOCsk+CsqOCsquCssOCssuCss+CstuCsueCsveCsveCtnOCtneCtn+CtoeCuheCuiuCujuCukOCukuCuleCumeCumuCunOCunOCunuCun+Cuo+CupOCuqOCuquCuruCuteCut+CuueCwheCwjOCwjuCwkOCwkuCwqOCwquCws+CwteCwueCxoOCxoeCyheCyjOCyjuCykOCykuCyqOCyquCys+CyteCyueCznuCznuCzoOCzoeC0heC0jOC0juC0kOC0kuC0qOC0quC0ueC1oOC1oeC4geC4ruC4sOC4sOC4suC4s+C5gOC5heC6geC6guC6hOC6hOC6h+C6iOC6iuC6iuC6jeC6jeC6lOC6l+C6meC6n+C6oeC6o+C6peC6peC6p+C6p+C6quC6q+C6reC6ruC6sOC6sOC6suC6s+C6veC6veC7gOC7hOC9gOC9h+C9ieC9qeGCoOGDheGDkOGDtuGEgOGEgOGEguGEg+GEheGEh+GEieGEieGEi+GEjOGEjuGEkuGEvOGEvOGEvuGEvuGFgOGFgOGFjOGFjOGFjuGFjuGFkOGFkOGFlOGFleGFmeGFmeGFn+GFoeGFo+GFo+GFpeGFpeGFp+GFp+GFqeGFqeGFreGFruGFsuGFs+GFteGFteGGnuGGnuGGqOGGqOGGq+GGq+GGruGGr+GGt+GGuOGGuuGGuuGGvOGHguGHq+GHq+GHsOGHsOGHueGHueG4gOG6m+G6oOG7ueG8gOG8leG8mOG8neG8oOG9heG9iOG9jeG9kOG9l+G9meG9meG9m+G9m+G9neG9neG9n+G9veG+gOG+tOG+tuG+vOG+vuG+vuG/guG/hOG/huG/jOG/kOG/k+G/luG/m+G/oOG/rOG/suG/tOG/tuG/vOKEpuKEpuKEquKEq+KEruKEruKGgOKGguOAh+OAh+OAoeOAqeOBgeOClOOCoeODuuOEheOErOS4gOm+peqwgO2eoyIsWTV0PSJQcml2YXRlIFVzZSIscDBlPSJBU1NJR05FRCIsYjBlPSJcMH/CgMO/xIDFv8aAyY/JkMqvyrDLv8yAza/NsM+/0IDTv9Sw1o/WkNe/2IDbv9yA3Y/egN6/4KSA4KW/4KaA4Ke/4KiA4Km/4KqA4Ku/4KyA4K2/4K6A4K+/4LCA4LG/4LKA4LO/4LSA4LW/4LaA4Le/4LiA4Lm/4LqA4Lu/4LyA4L+/4YCA4YKf4YKg4YO/4YSA4Ye/4YiA4Y2/4Y6g4Y+/4ZCA4Zm/4ZqA4Zqf4Zqg4Zu/4Z6A4Z+/4aCA4aKv4biA4bu/4byA4b+/4oCA4oGv4oGw4oKf4oKg4oOP4oOQ4oO/4oSA4oWP4oWQ4oaP4oaQ4oe/4oiA4ou/4oyA4o+/4pCA4pC/4pGA4pGf4pGg4pO/4pSA4pW/4paA4paf4pag4pe/4piA4pu/4pyA4p6/4qCA4qO/4rqA4ru/4ryA4r+f4r+w4r+/44CA44C/44GA44Kf44Kg44O/44SA44Sv44Sw44aP44aQ44af44ag44a/44iA44u/44yA44+/45CA5La15LiA6b+/6oCA6pKP6pKQ6pOP6rCA7Z6j7oCA76O/76SA76u/76yA762P762Q77e/77ig77iv77iw77mP77mQ77mv77mw77u+XHVGRUZGXHVGRUZG77yA77+vIiwkU2U9IlVOQVNTSUdORUQiLENUPXszOjEsMTIyOjF9LFg1dD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLnV0aWwiLGlLPXszOjEsNDoxLDU6MSwzODE6MX0selNlPSJvcmcuZWNsaXBzZS54dGV4dC54YmFzZS5saWIiLFE1dD0iQ2Fubm90IGFkZCBlbGVtZW50cyB0byBhIFJhbmdlIixKNXQ9IkNhbm5vdCBzZXQgZWxlbWVudHMgaW4gYSBSYW5nZSIsWjV0PSJDYW5ub3QgcmVtb3ZlIGVsZW1lbnRzIGZyb20gYSBSYW5nZSIsZTZ0PSJ1c2VyLmFnZW50IixoLHNLLG0wZTtiLmdvb2c9Yi5nb29nfHx7fSxiLmdvb2cuZ2xvYmFsPWIuZ29vZy5nbG9iYWx8fGIsc0s9e30sRCgxLG51bGwse30sVCksaC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gSnR0KHRoaXMsdCl9LGguR2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SbX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBmdyh0aGlzKX0saC5JYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiBfbShiaCh0aGlzKSkrIkAiKyh0PWVzKHRoaXMpPj4+MCx0LnRvU3RyaW5nKDE2KSl9LGguZXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkZiKGUpfSxoLmhhc2hDb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSGIoKX0saC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkliKCl9O3ZhciB0NnQsbjZ0LHI2dDtEKDI5NywxLHsyOTc6MSwyMTI0OjF9LEI3ZSksaC52ZT1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj1uZXcgQjdlLG4uaT00LHQ+MT9uLmM9eW90KHRoaXMsdC0xKTpuLmM9dGhpcyxufSxoLndlPWZ1bmN0aW9uKCl7cmV0dXJuIEdnKHRoaXMpLHRoaXMuYn0saC54ZT1mdW5jdGlvbigpe3JldHVybiBfbSh0aGlzKX0saC55ZT1mdW5jdGlvbigpe3JldHVybiBHZyh0aGlzKSx0aGlzLmt9LGguemU9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5pJjQpIT0wfSxoLkFlPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuaSYxKSE9MH0saC5JYj1mdW5jdGlvbigpe3JldHVybiBLNmUodGhpcyl9LGguaT0wO3ZhciB3YT1JKFZjLCJPYmplY3QiLDEpLHFTZT1JKFZjLCJDbGFzcyIsMjk3KTtEKDIwOTYsMSx5UCksSSh4UCwiT3B0aW9uYWwiLDIwOTYpLEQoMTE5MSwyMDk2LHlQLF8pLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT10aGlzfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIDIwNDA3MzIzMzJ9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iT3B0aW9uYWwuYWJzZW50KCkifSxoLkpiPWZ1bmN0aW9uKHQpe3JldHVybiBYcih0KSxvXygpLHYwZX07dmFyIHYwZTtJKHhQLCJBYnNlbnQiLDExOTEpLEQoNjM2LDEse30sWmllKSxJKHhQLCJKb2luZXIiLDYzNik7dmFyIG9Pbj1rcyh4UCwiUHJlZGljYXRlIik7RCg1ODksMSx7MTc4OjEsNTg5OjEsMzoxLDQ2OjF9LGd6KSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiB5MHQodGhpcyx0KX0saC5MYj1mdW5jdGlvbih0KXtyZXR1cm4geTB0KHRoaXMsdCl9LGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsNTg5KT8obj1sKHQsNTg5KSxPOWUodGhpcy5hLG4uYSkpOiExfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHE3ZSh0aGlzLmEpKzMwNjY1NDI1Mn0saC5JYj1mdW5jdGlvbigpe3JldHVybiBLOW4odGhpcy5hKX0sSSh4UCwiUHJlZGljYXRlcy9BbmRQcmVkaWNhdGUiLDU4OSksRCg0MTksMjA5Nix7NDE5OjEsMzoxfSxKUyksaC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gRGUodCw0MTkpPyhuPWwodCw0MTkpLFBpKHRoaXMuYSxuLmEpKTohMX0saC5IYj1mdW5jdGlvbigpe3JldHVybiAxNTAyNDc2NTcyK2VzKHRoaXMuYSl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gQXd0K3RoaXMuYSsiKSJ9LGguSmI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBKUyhfSCh0LktiKHRoaXMuYSksInRoZSBGdW5jdGlvbiBwYXNzZWQgdG8gT3B0aW9uYWwudHJhbnNmb3JtKCkgbXVzdCBub3QgcmV0dXJuIG51bGwuIikpfSxJKHhQLCJQcmVzZW50Iiw0MTkpLEQoMjA0LDEsZVQpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5RYj1mdW5jdGlvbigpe2pKZSgpfSxJKGRuLCJVbm1vZGlmaWFibGVJdGVyYXRvciIsMjA0KSxEKDIwNzYsMjA0LHRUKSxoLlFiPWZ1bmN0aW9uKCl7akplKCl9LGguUmI9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5XYj1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxJKGRuLCJVbm1vZGlmaWFibGVMaXN0SXRlcmF0b3IiLDIwNzYpLEQoMzk5LDIwNzYsdFQpLGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jPHRoaXMuZH0saC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmM+MH0saC5QYj1mdW5jdGlvbigpe2lmKHRoaXMuYz49dGhpcy5kKXRocm93IHVlKG5ldyBfYyk7cmV0dXJuIHRoaXMuWGIodGhpcy5jKyspfSxoLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30saC5VYj1mdW5jdGlvbigpe2lmKHRoaXMuYzw9MCl0aHJvdyB1ZShuZXcgX2MpO3JldHVybiB0aGlzLlhiKC0tdGhpcy5jKX0saC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMtMX0saC5jPTAsaC5kPTAsSShkbiwiQWJzdHJhY3RJbmRleGVkTGlzdEl0ZXJhdG9yIiwzOTkpLEQoNzEzLDIwNCxlVCksaC5PYj1mdW5jdGlvbigpe3JldHVybiB0Y2UodGhpcyl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gejZlKHRoaXMpfSxoLmU9MSxJKGRuLCJBYnN0cmFjdEl0ZXJhdG9yIiw3MTMpLEQoMjA4NCwxLHsyMjk6MX0pLGguWmI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmYsdHx8KHRoaXMuZj10aGlzLmFjKCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBFY2UodGhpcyx0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBlcyh0aGlzLlpiKCkpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2MoKT09MH0saC5lYz1mdW5jdGlvbigpe3JldHVybiBXOCh0aGlzKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB4Yyh0aGlzLlpiKCkpfSxJKGRuLCJBYnN0cmFjdE11bHRpbWFwIiwyMDg0KSxEKDc0MiwyMDg0LEptKSxoLiRiPWZ1bmN0aW9uKCl7bVYodGhpcyl9LGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuIGlaZSh0aGlzLHQpfSxoLmFjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBMayh0aGlzLHRoaXMuYyl9LGguaWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGMoKX0saC5iYz1mdW5jdGlvbigpe3JldHVybiBuZXcgcTUodGhpcyx0aGlzLmMpfSxoLmpjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWModGhpcy5oYygpKX0saC5rYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRUplKHRoaXMpfSxoLmxjPWZ1bmN0aW9uKCl7cmV0dXJuIEl1ZSh0aGlzLmMudmMoKS5OYygpLG5ldyBQLDY0LHRoaXMuZCl9LGguY2M9ZnVuY3Rpb24odCl7cmV0dXJuICRpKHRoaXMsdCl9LGguZmM9ZnVuY3Rpb24odCl7cmV0dXJuIEROKHRoaXMsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxoLm1jPWZ1bmN0aW9uKHQpe3JldHVybiBDbigpLG5ldyAkYSh0KX0saC5uYz1mdW5jdGlvbigpe3JldHVybiBuZXcga0plKHRoaXMpfSxoLm9jPWZ1bmN0aW9uKCl7cmV0dXJuIEl1ZSh0aGlzLmMuQ2MoKS5OYygpLG5ldyBBLDY0LHRoaXMuZCl9LGgucGM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3IFlIKHRoaXMsdCxuLG51bGwpfSxoLmQ9MCxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAiLDc0MiksRCgxNjk2LDc0MixKbSksaC5oYz1mdW5jdGlvbigpe3JldHVybiBuZXcgQnUodGhpcy5hKX0saC5qYz1mdW5jdGlvbigpe3JldHVybiBDbigpLENuKCksX299LGguY2M9ZnVuY3Rpb24odCl7cmV0dXJuIGwoJGkodGhpcyx0KSwxNSl9LGguZmM9ZnVuY3Rpb24odCl7cmV0dXJuIGwoRE4odGhpcyx0KSwxNSl9LGguWmI9ZnVuY3Rpb24oKXtyZXR1cm4gZXgodGhpcyl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIEVjZSh0aGlzLHQpfSxoLnFjPWZ1bmN0aW9uKHQpe3JldHVybiBsKCRpKHRoaXMsdCksMTUpfSxoLnJjPWZ1bmN0aW9uKHQpe3JldHVybiBsKEROKHRoaXMsdCksMTUpfSxoLm1jPWZ1bmN0aW9uKHQpe3JldHVybiBpb2UobCh0LDE1KSl9LGgucGM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gX2N0KHRoaXMsdCxsKG4sMTUpLG51bGwpfSxJKGRuLCJBYnN0cmFjdExpc3RNdWx0aW1hcCIsMTY5NiksRCg3NDgsMSxPYSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5PYigpfHx0aGlzLmUuT2IoKX0saC5QYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmUuT2IoKXx8KHQ9bCh0aGlzLmMuUGIoKSw0NCksdGhpcy5iPXQubGQoKSx0aGlzLmE9bCh0Lm1kKCksMTYpLHRoaXMuZT10aGlzLmEuS2MoKSksdGhpcy5zYyh0aGlzLmIsdGhpcy5lLlBiKCkpfSxoLlFiPWZ1bmN0aW9uKCl7dGhpcy5lLlFiKCksbChMZih0aGlzLmEpLDE2KS5kYygpJiZ0aGlzLmMuUWIoKSwtLXRoaXMuZC5kfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvSXRyIiw3NDgpLEQoMTEyOSw3NDgsT2Esa0plKSxoLnNjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG59LEkoZG4sIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC8xIiwxMTI5KSxEKDExMzAsMSx7fSxBKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTYpLk5jKCl9LEkoZG4sIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC8xbWV0aG9kcmVmJHNwbGl0ZXJhdG9yJFR5cGUiLDExMzApLEQoMTEzMSw3NDgsT2EsRUplKSxoLnNjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyBpdyh0LG4pfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvMiIsMTEzMSk7dmFyIEhTZT1rcyhMciwiTWFwIik7RCgyMDY1LDEsV3cpLGgud2M9ZnVuY3Rpb24odCl7bUEodGhpcyx0KX0saC55Yz1mdW5jdGlvbih0LG4scil7cmV0dXJuIHFjZSh0aGlzLHQsbixyKX0saC4kYj1mdW5jdGlvbigpe3RoaXMudmMoKS4kYigpfSxoLnRjPWZ1bmN0aW9uKHQpe3JldHVybiBndWUodGhpcyx0KX0saC5fYj1mdW5jdGlvbih0KXtyZXR1cm4hIUR4ZSh0aGlzLHQsITEpfSxoLnVjPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYTtmb3Iocj10aGlzLnZjKCkuS2MoKTtyLk9iKCk7KWlmKG49bChyLlBiKCksNDQpLGE9bi5tZCgpLHFlKHQpPT09cWUoYSl8fHQhPW51bGwmJlBpKHQsYSkpcmV0dXJuITA7cmV0dXJuITF9LGguRmI9ZnVuY3Rpb24odCl7dmFyIG4scixhO2lmKHQ9PT10aGlzKXJldHVybiEwO2lmKCFEZSh0LDg1KXx8KGE9bCh0LDg1KSx0aGlzLmdjKCkhPWEuZ2MoKSkpcmV0dXJuITE7Zm9yKHI9YS52YygpLktjKCk7ci5PYigpOylpZihuPWwoci5QYigpLDQ0KSwhdGhpcy50YyhuKSlyZXR1cm4hMTtyZXR1cm4hMH0saC54Yz1mdW5jdGlvbih0KXtyZXR1cm4gaGMoRHhlKHRoaXMsdCwhMSkpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEk3ZSh0aGlzLnZjKCkpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2MoKT09MH0saC5lYz1mdW5jdGlvbigpe3JldHVybiBuZXcgYnIodGhpcyl9LGguemM9ZnVuY3Rpb24odCxuKXt0aHJvdyB1ZShuZXcgSHAoIlB1dCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgbWFwIikpfSxoLkFjPWZ1bmN0aW9uKHQpe2JBKHRoaXMsdCl9LGguQmM9ZnVuY3Rpb24odCl7cmV0dXJuIGhjKER4ZSh0aGlzLHQsITApKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZjKCkuZ2MoKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBJZ3QodGhpcyl9LGguQ2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGdpKHRoaXMpfSxJKExyLCJBYnN0cmFjdE1hcCIsMjA2NSksRCgyMDg1LDIwNjUsV3cpLGguYmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFl6KHRoaXMpfSxoLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIEVzdCh0aGlzKX0saC5lYz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuZyx0fHwodGhpcy5nPXRoaXMuYmMoKSl9LGguQ2M9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmksdHx8KHRoaXMuaT1uZXcgV1plKHRoaXMpKX0sSShkbiwiTWFwcy9WaWV3Q2FjaGluZ0Fic3RyYWN0TWFwIiwyMDg1KSxEKDQwMiwyMDg1LFd3LExrKSxoLnhjPWZ1bmN0aW9uKHQpe3JldHVybiBmd24odGhpcyx0KX0saC5CYz1mdW5jdGlvbih0KXtyZXR1cm4gUHluKHRoaXMsdCl9LGguJGI9ZnVuY3Rpb24oKXt0aGlzLmQ9PXRoaXMuZS5jP3RoaXMuZS4kYigpOmlIKG5ldyBWNGUodGhpcykpfSxoLl9iPWZ1bmN0aW9uKHQpe3JldHVybiBpMXQodGhpcy5kLHQpfSxoLkVjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBweih0aGlzKX0saC5EYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkVjKCl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fHxQaSh0aGlzLmQsdCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gZXModGhpcy5kKX0saC5lYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUuZWMoKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmQuZ2MoKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB4Yyh0aGlzLmQpfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvQXNNYXAiLDQwMik7dmFyIEZoPWtzKFZjLCJJdGVyYWJsZSIpO0QoMzEsMSxXeSksaC5KYz1mdW5jdGlvbih0KXt0byh0aGlzLHQpfSxoLkxjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuT2MoKX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcga24odGhpcywwKX0saC5PYz1mdW5jdGlvbigpe3JldHVybiBuZXcgYm4obnVsbCx0aGlzLk5jKCkpfSxoLkZjPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBIcCgiQWRkIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBjb2xsZWN0aW9uIikpfSxoLkdjPWZ1bmN0aW9uKHQpe3JldHVybiBLYSh0aGlzLHQpfSxoLiRiPWZ1bmN0aW9uKCl7TTVlKHRoaXMpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBOeSh0aGlzLHQsITEpfSxoLkljPWZ1bmN0aW9uKHQpe3JldHVybiBFTih0aGlzLHQpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2MoKT09MH0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gTnkodGhpcyx0LCEwKX0saC5QYz1mdW5jdGlvbigpe3JldHVybiBlNWUodGhpcyl9LGguUWM9ZnVuY3Rpb24odCl7cmV0dXJuIFBBKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gVGIodGhpcyl9LEkoTHIsIkFic3RyYWN0Q29sbGVjdGlvbiIsMzEpO3ZhciBqZj1rcyhMciwiU2V0Iik7RChxMSwzMSxUbCksaC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcga24odGhpcywxKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gWTF0KHRoaXMsdCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSTdlKHRoaXMpfSxJKExyLCJBYnN0cmFjdFNldCIscTEpLEQoMjA2OCxxMSxUbCksSShkbiwiU2V0cy9JbXByb3ZlZEFic3RyYWN0U2V0IiwyMDY4KSxEKDIwNjksMjA2OCxUbCksaC4kYj1mdW5jdGlvbigpe3RoaXMuUmMoKS4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBPMXQodGhpcyx0KX0saC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJjKCkuZGMoKX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gdGhpcy5IYyh0KSYmRGUodCw0NCk/KG49bCh0LDQ0KSx0aGlzLlJjKCkuZWMoKS5NYyhuLmxkKCkpKTohMX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJjKCkuZ2MoKX0sSShkbiwiTWFwcy9FbnRyeVNldCIsMjA2OSksRCgxMTI3LDIwNjksVGwscHopLGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIHM4ZSh0aGlzLmEuZC52YygpLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWNGUodGhpcy5hKX0saC5SYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguTWM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHM4ZSh0aGlzLmEuZC52YygpLHQpPyhuPWwoTGYobCh0LDQ0KSksNDQpLGV2bih0aGlzLmEuZSxuLmxkKCkpLCEwKTohMX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBOTyh0aGlzLmEuZC52YygpLk5jKCksbmV3IGJ6KHRoaXMuYSkpfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvQXNNYXAvQXNNYXBFbnRyaWVzIiwxMTI3KSxEKDExMjgsMSx7fSxieiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gQ3V0KHRoaXMuYSxsKHQsNDQpKX0sSShkbiwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL0FzTWFwL0FzTWFwRW50cmllcy8wbWV0aG9kcmVmJHdyYXBFbnRyeSRUeXBlIiwxMTI4KSxEKDc0NiwxLE9hLFY0ZSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlBiPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9bCh0aGlzLmIuUGIoKSw0NCksdGhpcy5hPWwodC5tZCgpLDE2KSxDdXQodGhpcy5jLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5PYigpfSxoLlFiPWZ1bmN0aW9uKCl7UmsoISF0aGlzLmEpLHRoaXMuYi5RYigpLHRoaXMuYy5lLmQtPXRoaXMuYS5nYygpLHRoaXMuYS4kYigpLHRoaXMuYT1udWxsfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvQXNNYXAvQXNNYXBJdGVyYXRvciIsNzQ2KSxEKDU0MiwyMDY4LFRsLFl6KSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5iLiRiKCl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYi5fYih0KX0saC5KYz1mdW5jdGlvbih0KXtYcih0KSx0aGlzLmIud2MobmV3IHh6KHQpKX0saC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuZGMoKX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgY18odGhpcy5iLnZjKCkuS2MoKSl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYi5fYih0KT8odGhpcy5iLkJjKHQpLCEwKTohMX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuZ2MoKX0sSShkbiwiTWFwcy9LZXlTZXQiLDU0MiksRCgzMjcsNTQyLFRsLHE1KSxoLiRiPWZ1bmN0aW9uKCl7dmFyIHQ7aUgoKHQ9dGhpcy5iLnZjKCkuS2MoKSxuZXcgZzNlKHRoaXMsdCkpKX0saC5JYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5iLmVjKCkuSWModCl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fHxQaSh0aGlzLmIuZWMoKSx0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBlcyh0aGlzLmIuZWMoKSl9LGguS2M9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmIudmMoKS5LYygpLG5ldyBnM2UodGhpcyx0KX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbixyO3JldHVybiByPTAsbj1sKHRoaXMuYi5CYyh0KSwxNiksbiYmKHI9bi5nYygpLG4uJGIoKSx0aGlzLmEuZC09cikscj4wfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5lYygpLk5jKCl9LEkoZG4sIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9LZXlTZXQiLDMyNyksRCg3NDcsMSxPYSxnM2UpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuT2IoKX0saC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE9bCh0aGlzLmMuUGIoKSw0NCksdGhpcy5hLmxkKCl9LGguUWI9ZnVuY3Rpb24oKXt2YXIgdDtSayghIXRoaXMuYSksdD1sKHRoaXMuYS5tZCgpLDE2KSx0aGlzLmMuUWIoKSx0aGlzLmIuYS5kLT10LmdjKCksdC4kYigpLHRoaXMuYT1udWxsfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvS2V5U2V0LzEiLDc0NyksRCg1MDMsNDAyLHs4NToxLDEzMzoxfSxfTyksaC5iYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlNjKCl9LGguZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5VYygpfSxoLlNjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0Tyh0aGlzLmMsdGhpcy5XYygpKX0saC5UYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLldjKCkuVGMoKX0saC5VYz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuYix0fHwodGhpcy5iPXRoaXMuU2MoKSl9LGguVmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5XYygpLlZjKCl9LGguV2M9ZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLmQsMTMzKX0sSShkbiwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1NvcnRlZEFzTWFwIiw1MDMpLEQoNDQ2LDUwMyxaa2UscV8pLGguYmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFrKHRoaXMuYSxsKGwodGhpcy5kLDEzMyksMTM5KSl9LGguU2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFrKHRoaXMuYSxsKGwodGhpcy5kLDEzMyksMTM5KSl9LGguZWM9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmIsbCh0fHwodGhpcy5iPW5ldyBBayh0aGlzLmEsbChsKHRoaXMuZCwxMzMpLDEzOSkpKSwyNzcpfSxoLlVjPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9dGhpcy5iLGwodHx8KHRoaXMuYj1uZXcgQWsodGhpcy5hLGwobCh0aGlzLmQsMTMzKSwxMzkpKSksMjc3KX0saC5XYz1mdW5jdGlvbigpe3JldHVybiBsKGwodGhpcy5kLDEzMyksMTM5KX0saC5YYz1mdW5jdGlvbih0KXtyZXR1cm4gbChsKHRoaXMuZCwxMzMpLDEzOSkuWGModCl9LGguWWM9ZnVuY3Rpb24odCl7cmV0dXJuIGwobCh0aGlzLmQsMTMzKSwxMzkpLlljKHQpfSxoLlpjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyBxXyh0aGlzLmEsbChsKHRoaXMuZCwxMzMpLDEzOSkuWmModCxuKSl9LGguJGM9ZnVuY3Rpb24odCl7cmV0dXJuIGwobCh0aGlzLmQsMTMzKSwxMzkpLiRjKHQpfSxoLl9jPWZ1bmN0aW9uKHQpe3JldHVybiBsKGwodGhpcy5kLDEzMyksMTM5KS5fYyh0KX0saC5hZD1mdW5jdGlvbih0LG4pe3JldHVybiBuZXcgcV8odGhpcy5hLGwobCh0aGlzLmQsMTMzKSwxMzkpLmFkKHQsbikpfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvTmF2aWdhYmxlQXNNYXAiLDQ0NiksRCg1MDIsMzI3LEx3dCx0TyksaC5OYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuZWMoKS5OYygpfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvU29ydGVkS2V5U2V0Iiw1MDIpLEQoNDAxLDUwMixlRWUsQWspLEkoZG4sIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9OYXZpZ2FibGVLZXlTZXQiLDQwMSksRCg1NTEsMzEsV3ksWUgpLGguRmM9ZnVuY3Rpb24odCl7dmFyIG4scjtyZXR1cm4gUWwodGhpcykscj10aGlzLmQuZGMoKSxuPXRoaXMuZC5GYyh0KSxuJiYoKyt0aGlzLmYuZCxyJiZETyh0aGlzKSksbn0saC5HYz1mdW5jdGlvbih0KXt2YXIgbixyLGE7cmV0dXJuIHQuZGMoKT8hMTooYT0oUWwodGhpcyksdGhpcy5kLmdjKCkpLG49dGhpcy5kLkdjKHQpLG4mJihyPXRoaXMuZC5nYygpLHRoaXMuZi5kKz1yLWEsYT09MCYmRE8odGhpcykpLG4pfSxoLiRiPWZ1bmN0aW9uKCl7dmFyIHQ7dD0oUWwodGhpcyksdGhpcy5kLmdjKCkpLHQhPTAmJih0aGlzLmQuJGIoKSx0aGlzLmYuZC09dCxsSCh0aGlzKSl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIFFsKHRoaXMpLHRoaXMuZC5IYyh0KX0saC5JYz1mdW5jdGlvbih0KXtyZXR1cm4gUWwodGhpcyksdGhpcy5kLkljKHQpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09dGhpcz8hMDooUWwodGhpcyksUGkodGhpcy5kLHQpKX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBRbCh0aGlzKSxlcyh0aGlzLmQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIFFsKHRoaXMpLG5ldyBfNGUodGhpcyl9LGguTWM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIFFsKHRoaXMpLG49dGhpcy5kLk1jKHQpLG4mJigtLXRoaXMuZi5kLGxIKHRoaXMpKSxufSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIFJ0dCh0aGlzKX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBRbCh0aGlzKSx0aGlzLmQuTmMoKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBRbCh0aGlzKSx4Yyh0aGlzLmQpfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZENvbGxlY3Rpb24iLDU1MSk7dmFyIG1mPWtzKExyLCJMaXN0Iik7RCg3NDQsNTUxLHsyMDoxLDMxOjEsMTY6MSwxNToxfSxyNWUpLGguamQ9ZnVuY3Rpb24odCl7JG0odGhpcyx0KX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBRbCh0aGlzKSx0aGlzLmQuTmMoKX0saC5iZD1mdW5jdGlvbih0LG4pe3ZhciByO1FsKHRoaXMpLHI9dGhpcy5kLmRjKCksbCh0aGlzLmQsMTUpLmJkKHQsbiksKyt0aGlzLmEuZCxyJiZETyh0aGlzKX0saC5jZD1mdW5jdGlvbih0LG4pe3ZhciByLGEsbztyZXR1cm4gbi5kYygpPyExOihvPShRbCh0aGlzKSx0aGlzLmQuZ2MoKSkscj1sKHRoaXMuZCwxNSkuY2QodCxuKSxyJiYoYT10aGlzLmQuZ2MoKSx0aGlzLmEuZCs9YS1vLG89PTAmJkRPKHRoaXMpKSxyKX0saC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gUWwodGhpcyksbCh0aGlzLmQsMTUpLlhiKHQpfSxoLmRkPWZ1bmN0aW9uKHQpe3JldHVybiBRbCh0aGlzKSxsKHRoaXMuZCwxNSkuZGQodCl9LGguZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gUWwodGhpcyksbmV3IGdudCh0aGlzKX0saC5mZD1mdW5jdGlvbih0KXtyZXR1cm4gUWwodGhpcyksbmV3IEZhdCh0aGlzLHQpfSxoLmdkPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBRbCh0aGlzKSxuPWwodGhpcy5kLDE1KS5nZCh0KSwtLXRoaXMuYS5kLGxIKHRoaXMpLG59LGguaGQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gUWwodGhpcyksbCh0aGlzLmQsMTUpLmhkKHQsbil9LGgua2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gUWwodGhpcyksX2N0KHRoaXMuYSx0aGlzLmUsbCh0aGlzLmQsMTUpLmtkKHQsbiksdGhpcy5iP3RoaXMuYjp0aGlzKX0sSShkbiwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1dyYXBwZWRMaXN0Iiw3NDQpLEQoMTEyNiw3NDQsezIwOjEsMzE6MSwxNjoxLDE1OjEsNTk6MX0scnJ0KSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvUmFuZG9tQWNjZXNzV3JhcHBlZExpc3QiLDExMjYpLEQoNjI4LDEsT2EsXzRlKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gWWsodGhpcyksdGhpcy5iLk9iKCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gWWsodGhpcyksdGhpcy5iLlBiKCl9LGguUWI9ZnVuY3Rpb24oKXt6bnQodGhpcyl9LEkoZG4sIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9XcmFwcGVkQ29sbGVjdGlvbi9XcmFwcGVkSXRlcmF0b3IiLDYyOCksRCg3NDUsNjI4LGxnLGdudCxGYXQpLGguUWI9ZnVuY3Rpb24oKXt6bnQodGhpcyl9LGguUmI9ZnVuY3Rpb24odCl7dmFyIG47bj1SdHQodGhpcy5hKT09MCwoWWsodGhpcyksbCh0aGlzLmIsMTI4KSkuUmIodCksKyt0aGlzLmEuYS5kLG4mJkRPKHRoaXMuYSl9LGguU2I9ZnVuY3Rpb24oKXtyZXR1cm4oWWsodGhpcyksbCh0aGlzLmIsMTI4KSkuU2IoKX0saC5UYj1mdW5jdGlvbigpe3JldHVybihZayh0aGlzKSxsKHRoaXMuYiwxMjgpKS5UYigpfSxoLlViPWZ1bmN0aW9uKCl7cmV0dXJuKFlrKHRoaXMpLGwodGhpcy5iLDEyOCkpLlViKCl9LGguVmI9ZnVuY3Rpb24oKXtyZXR1cm4oWWsodGhpcyksbCh0aGlzLmIsMTI4KSkuVmIoKX0saC5XYj1mdW5jdGlvbih0KXsoWWsodGhpcyksbCh0aGlzLmIsMTI4KSkuV2IodCl9LEkoZG4sIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9XcmFwcGVkTGlzdC9XcmFwcGVkTGlzdEl0ZXJhdG9yIiw3NDUpLEQoNzQzLDU1MSxMd3QsR3llKSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIFFsKHRoaXMpLHRoaXMuZC5OYygpfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZFNvcnRlZFNldCIsNzQzKSxEKDExMjUsNzQzLGVFZSx1bnQpLEkoZG4sIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9XcmFwcGVkTmF2aWdhYmxlU2V0IiwxMTI1KSxEKDExMjQsNTUxLFRsLFRydCksaC5OYz1mdW5jdGlvbigpe3JldHVybiBRbCh0aGlzKSx0aGlzLmQuTmMoKX0sSShkbiwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1dyYXBwZWRTZXQiLDExMjQpLEQoMTEzMywxLHt9LFApLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGx2bihsKHQsNDQpKX0sSShkbiwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL2xhbWJkYSQxJFR5cGUiLDExMzMpLEQoMTEzMiwxLHt9LGJpZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGl3KHRoaXMuYSx0KX0sSShkbiwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL2xhbWJkYSQyJFR5cGUiLDExMzIpO3ZhciB1dj1rcyhMciwiTWFwL0VudHJ5Iik7RCgzNTgsMSxObGUpLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsNDQpPyhuPWwodCw0NCkseWQodGhpcy5sZCgpLG4ubGQoKSkmJnlkKHRoaXMubWQoKSxuLm1kKCkpKTohMX0saC5IYj1mdW5jdGlvbigpe3ZhciB0LG47cmV0dXJuIHQ9dGhpcy5sZCgpLG49dGhpcy5tZCgpLCh0PT1udWxsPzA6ZXModCkpXihuPT1udWxsPzA6ZXMobikpfSxoLm5kPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZCgpKyI9Iit0aGlzLm1kKCl9LEkoZG4sTXd0LDM1OCksRCgyMDg2LDMxLFd5KSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5vZCgpLiRiKCl9LGguSGM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsNDQpPyhuPWwodCw0NCksRGJuKHRoaXMub2QoKSxuLmxkKCksbi5tZCgpKSk6ITF9LGguTWM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsNDQpPyhuPWwodCw0NCksY2N0KHRoaXMub2QoKSxuLmxkKCksbi5tZCgpKSk6ITF9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZCgpLmR9LEkoZG4sIk11bHRpbWFwcy9FbnRyaWVzIiwyMDg2KSxEKDc0OSwyMDg2LFd5LHZ6KSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5rYygpfSxoLm9kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5OYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEubGMoKX0sSShkbiwiQWJzdHJhY3RNdWx0aW1hcC9FbnRyaWVzIiw3NDkpLEQoNzUwLDc0OSxUbCxVd2UpLGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmxjKCl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIFF4ZSh0aGlzLHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHdmdCh0aGlzKX0sSShkbiwiQWJzdHJhY3RNdWx0aW1hcC9FbnRyeVNldCIsNzUwKSxEKDc1MSwzMSxXeSxRMiksaC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBMeW4odGhpcy5hLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5uYygpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5vYygpfSxJKGRuLCJBYnN0cmFjdE11bHRpbWFwL1ZhbHVlcyIsNzUxKSxEKDIwODcsMzEsezg0OToxLDIwOjEsMzE6MSwxNjoxfSksaC5KYz1mdW5jdGlvbih0KXtYcih0KSxWNSh0aGlzKS5KYyhuZXcga2llKHQpKX0saC5OYz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PVY1KHRoaXMpLk5jKCksSXVlKHQsbmV3IHBlLDY0fHQueWQoKSYxMjk2LHRoaXMuYS5kKX0saC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gWndlKCksITB9LGguR2M9ZnVuY3Rpb24odCl7cmV0dXJuIFhyKHRoaXMpLFhyKHQpLERlKHQsNTUyKT9OYm4obCh0LDg0OSkpOiF0LmRjKCkmJkdvZSh0aGlzLHQuS2MoKSl9LGguSGM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIG49bChPeShleCh0aGlzLmEpLHQpLDE2KSwobj9uLmdjKCk6MCk+MH0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gblRuKHRoaXMsdCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gZXMoVjUodGhpcykpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIFY1KHRoaXMpLmRjKCl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIFVwdCh0aGlzLHQsMSk+MH0saC5JYj1mdW5jdGlvbigpe3JldHVybiB4YyhWNSh0aGlzKSl9LEkoZG4sIkFic3RyYWN0TXVsdGlzZXQiLDIwODcpLEQoMjA4OSwyMDY4LFRsKSxoLiRiPWZ1bmN0aW9uKCl7bVYodGhpcy5hLmEpfSxoLkhjPWZ1bmN0aW9uKHQpe3ZhciBuLHI7cmV0dXJuIERlKHQsNTA0KT8ocj1sKHQsNDI1KSxsKHIuYS5tZCgpLDE2KS5nYygpPD0wPyExOihuPVBvdCh0aGlzLmEsci5hLmxkKCkpLG49PWwoci5hLm1kKCksMTYpLmdjKCkpKTohMX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbztyZXR1cm4gRGUodCw1MDQpJiYocj1sKHQsNDI1KSxuPXIuYS5sZCgpLGE9bChyLmEubWQoKSwxNikuZ2MoKSxhIT0wKT8obz10aGlzLmEsR2tuKG8sbixhKSk6ITF9LEkoZG4sIk11bHRpc2V0cy9FbnRyeVNldCIsMjA4OSksRCgxMTM5LDIwODksVGwsbWllKSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBSmUoRXN0KGV4KHRoaXMuYS5hKSkuS2MoKSl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gZXgodGhpcy5hLmEpLmdjKCl9LEkoZG4sIkFic3RyYWN0TXVsdGlzZXQvRW50cnlTZXQiLDExMzkpLEQoNjI3LDc0MixKbSksaC5oYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBkKCl9LGguamM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xZCgpfSxoLmNjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJkKHQpfSxoLmZjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNkKHQpfSxoLlpiPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9dGhpcy5mLHR8fCh0aGlzLmY9dGhpcy5hYygpKX0saC5xZD1mdW5jdGlvbigpe3JldHVybiBDbigpLENuKCksaEt9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIEVjZSh0aGlzLHQpfSxoLnJkPWZ1bmN0aW9uKHQpe3JldHVybiBsKCRpKHRoaXMsdCksMjEpfSxoLnNkPWZ1bmN0aW9uKHQpe3JldHVybiBsKEROKHRoaXMsdCksMjEpfSxoLm1jPWZ1bmN0aW9uKHQpe3JldHVybiBDbigpLG5ldyBFayhsKHQsMjEpKX0saC5wYz1mdW5jdGlvbih0LG4pe3JldHVybiBuZXcgVHJ0KHRoaXMsdCxsKG4sMjEpKX0sSShkbiwiQWJzdHJhY3RTZXRNdWx0aW1hcCIsNjI3KSxEKDE3MjMsNjI3LEptKSxoLmhjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBLcCh0aGlzLmIpfSxoLnBkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBLcCh0aGlzLmIpfSxoLmpjPWZ1bmN0aW9uKCl7cmV0dXJuIFQ1ZShuZXcgS3AodGhpcy5iKSl9LGgucWQ9ZnVuY3Rpb24oKXtyZXR1cm4gVDVlKG5ldyBLcCh0aGlzLmIpKX0saC5jYz1mdW5jdGlvbih0KXtyZXR1cm4gbChsKCRpKHRoaXMsdCksMjEpLDg3KX0saC5yZD1mdW5jdGlvbih0KXtyZXR1cm4gbChsKCRpKHRoaXMsdCksMjEpLDg3KX0saC5mYz1mdW5jdGlvbih0KXtyZXR1cm4gbChsKEROKHRoaXMsdCksMjEpLDg3KX0saC5zZD1mdW5jdGlvbih0KXtyZXR1cm4gbChsKEROKHRoaXMsdCksMjEpLDg3KX0saC5tYz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwyNzcpP1Q1ZShsKHQsMjc3KSk6KENuKCksbmV3IER5ZShsKHQsODcpKSl9LGguWmI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmYsdHx8KHRoaXMuZj1EZSh0aGlzLmMsMTM5KT9uZXcgcV8odGhpcyxsKHRoaXMuYywxMzkpKTpEZSh0aGlzLmMsMTMzKT9uZXcgX08odGhpcyxsKHRoaXMuYywxMzMpKTpuZXcgTGsodGhpcyx0aGlzLmMpKX0saC5wYz1mdW5jdGlvbih0LG4pe3JldHVybiBEZShuLDI3Nyk/bmV3IHVudCh0aGlzLHQsbChuLDI3NykpOm5ldyBHeWUodGhpcyx0LGwobiw4NykpfSxJKGRuLCJBYnN0cmFjdFNvcnRlZFNldE11bHRpbWFwIiwxNzIzKSxEKDE3MjQsMTcyMyxKbSksaC5aYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuZixsKGwodHx8KHRoaXMuZj1EZSh0aGlzLmMsMTM5KT9uZXcgcV8odGhpcyxsKHRoaXMuYywxMzkpKTpEZSh0aGlzLmMsMTMzKT9uZXcgX08odGhpcyxsKHRoaXMuYywxMzMpKTpuZXcgTGsodGhpcyx0aGlzLmMpKSwxMzMpLDEzOSl9LGguZWM9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmksbChsKHR8fCh0aGlzLmk9RGUodGhpcy5jLDEzOSk/bmV3IEFrKHRoaXMsbCh0aGlzLmMsMTM5KSk6RGUodGhpcy5jLDEzMyk/bmV3IHRPKHRoaXMsbCh0aGlzLmMsMTMzKSk6bmV3IHE1KHRoaXMsdGhpcy5jKSksODcpLDI3Nyl9LGguYmM9ZnVuY3Rpb24oKXtyZXR1cm4gRGUodGhpcy5jLDEzOSk/bmV3IEFrKHRoaXMsbCh0aGlzLmMsMTM5KSk6RGUodGhpcy5jLDEzMyk/bmV3IHRPKHRoaXMsbCh0aGlzLmMsMTMzKSk6bmV3IHE1KHRoaXMsdGhpcy5jKX0sSShkbiwiQWJzdHJhY3RTb3J0ZWRLZXlTb3J0ZWRTZXRNdWx0aW1hcCIsMTcyNCksRCgyMTA5LDEsezIwNDY6MX0pLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIF84bih0aGlzLHQpfSxoLkhiPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIEk3ZSgodD10aGlzLmcsdHx8KHRoaXMuZz1uZXcgJEkodGhpcykpKSl9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gSWd0KCh0PXRoaXMuZix0fHwodGhpcy5mPW5ldyBfeWUodGhpcykpKSl9LEkoZG4sIkFic3RyYWN0VGFibGUiLDIxMDkpLEQoNjc5LHExLFRsLCRJKSxoLiRiPWZ1bmN0aW9uKCl7JEplKCl9LGguSGM9ZnVuY3Rpb24odCl7dmFyIG4scjtyZXR1cm4gRGUodCw0NzkpPyhuPWwodCw2OTcpLHI9bChPeShLc3QodGhpcy5hKSxhYihuLmMuZSxuLmIpKSw4NSksISFyJiZzOGUoci52YygpLG5ldyBpdyhhYihuLmMuYyxuLmEpLG94KG4uYyxuLmIsbi5hKSkpKTohMX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBEcG4odGhpcy5hKX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbixyO3JldHVybiBEZSh0LDQ3OSk/KG49bCh0LDY5Nykscj1sKE95KEtzdCh0aGlzLmEpLGFiKG4uYy5lLG4uYikpLDg1KSwhIXImJmM0bihyLnZjKCksbmV3IGl3KGFiKG4uYy5jLG4uYSksb3gobi5jLG4uYixuLmEpKSkpOiExfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIFhpdCh0aGlzLmEpfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIEZibih0aGlzLmEpfSxJKGRuLCJBYnN0cmFjdFRhYmxlL0NlbGxTZXQiLDY3OSksRCgyMDI1LDMxLFd5LHdpZSksaC4kYj1mdW5jdGlvbigpeyRKZSgpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB3eG4odGhpcy5hLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIElwbih0aGlzLmEpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIFhpdCh0aGlzLmEpfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG9jdCh0aGlzLmEpfSxJKGRuLCJBYnN0cmFjdFRhYmxlL1ZhbHVlcyIsMjAyNSksRCgxNjk3LDE2OTYsSm0pLEkoZG4sIkFycmF5TGlzdE11bHRpbWFwR3d0U2VyaWFsaXphdGlvbkRlcGVuZGVuY2llcyIsMTY5NyksRCg1MjAsMTY5NyxKbSxuc2UsRzVlKSxoLmhjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBCdSh0aGlzLmEpfSxoLmE9MCxJKGRuLCJBcnJheUxpc3RNdWx0aW1hcCIsNTIwKSxEKDY3OCwyMTA5LHs2Nzg6MSwyMDQ2OjEsMzoxfSxpMnQpLEkoZG4sIkFycmF5VGFibGUiLDY3OCksRCgyMDIxLDM5OSx0VCxxbnQpLGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBGN2UodGhpcy5hLHQpfSxJKGRuLCJBcnJheVRhYmxlLzEiLDIwMjEpLEQoMjAyMiwxLHt9LGdpZSksaC50ZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEY3ZSh0aGlzLmEsdCl9LEkoZG4sIkFycmF5VGFibGUvMW1ldGhvZHJlZiRnZXRDZWxsJFR5cGUiLDIwMjIpLEQoMjExMCwxLHs2OTc6MX0pLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHQ9PT10aGlzPyEwOkRlKHQsNDc5KT8obj1sKHQsNjk3KSx5ZChhYih0aGlzLmMuZSx0aGlzLmIpLGFiKG4uYy5lLG4uYikpJiZ5ZChhYih0aGlzLmMuYyx0aGlzLmEpLGFiKG4uYy5jLG4uYSkpJiZ5ZChveCh0aGlzLmMsdGhpcy5iLHRoaXMuYSksb3gobi5jLG4uYixuLmEpKSk6ITF9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gTU4oaGUobGUod2EsMSksUm4sMSw1LFthYih0aGlzLmMuZSx0aGlzLmIpLGFiKHRoaXMuYy5jLHRoaXMuYSksb3godGhpcy5jLHRoaXMuYix0aGlzLmEpXSkpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIigiK2FiKHRoaXMuYy5lLHRoaXMuYikrIiwiK2FiKHRoaXMuYy5jLHRoaXMuYSkrIik9IitveCh0aGlzLmMsdGhpcy5iLHRoaXMuYSl9LEkoZG4sIlRhYmxlcy9BYnN0cmFjdENlbGwiLDIxMTApLEQoNDc5LDIxMTAsezQ3OToxLDY5NzoxfSxGN2UpLGguYT0wLGguYj0wLGguZD0wLEkoZG4sIkFycmF5VGFibGUvMiIsNDc5KSxEKDIwMjQsMSx7fSxwaWUpLGgudGQ9ZnVuY3Rpb24odCl7cmV0dXJuIElsdCh0aGlzLmEsdCl9LEkoZG4sIkFycmF5VGFibGUvMm1ldGhvZHJlZiRnZXRWYWx1ZSRUeXBlIiwyMDI0KSxEKDIwMjMsMzk5LHRULEhudCksaC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gSWx0KHRoaXMuYSx0KX0sSShkbiwiQXJyYXlUYWJsZS8zIiwyMDIzKSxEKDIwNzcsMjA2NSxXdyksaC4kYj1mdW5jdGlvbigpe2lIKHRoaXMua2MoKSl9LGgudmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHl6KHRoaXMpfSxoLmxjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBfYXQodGhpcy5rYygpLHRoaXMuZ2MoKSl9LEkoZG4sIk1hcHMvSXRlcmF0b3JCYXNlZEFic3RyYWN0TWFwIiwyMDc3KSxEKDg0MiwyMDc3LFd3KSxoLiRiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5fYj1mdW5jdGlvbih0KXtyZXR1cm4gc1plKHRoaXMuYyx0KX0saC5rYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVm50KHRoaXMsdGhpcy5jLmIuYy5nYygpKX0saC5sYz1mdW5jdGlvbigpe3JldHVybiBDYWUodGhpcy5jLmIuYy5nYygpLDE2LG5ldyBteih0aGlzKSl9LGgueGM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIG49bChIXyh0aGlzLmMsdCksMTcpLG4/dGhpcy52ZChuLmEpOm51bGx9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmIuYy5kYygpfSxoLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIE9hZSh0aGlzLmMpfSxoLnpjPWZ1bmN0aW9uKHQsbil7dmFyIHI7aWYocj1sKEhfKHRoaXMuYyx0KSwxNyksIXIpdGhyb3cgdWUobmV3IFluKHRoaXMudWQoKSsiICIrdCsiIG5vdCBpbiAiK09hZSh0aGlzLmMpKSk7cmV0dXJuIHRoaXMud2Qoci5hLG4pfSxoLkJjPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmIuYy5nYygpfSxJKGRuLCJBcnJheVRhYmxlL0FycmF5TWFwIiw4NDIpLEQoMjAyMCwxLHt9LG16KSxoLnRkPWZ1bmN0aW9uKHQpe3JldHVybiBZc3QodGhpcy5hLHQpfSxJKGRuLCJBcnJheVRhYmxlL0FycmF5TWFwLzBtZXRob2RyZWYkZ2V0RW50cnkkVHlwZSIsMjAyMCksRCgyMDE4LDM1OCxObGUsRFplKSxoLmxkPWZ1bmN0aW9uKCl7cmV0dXJuIFVobih0aGlzLmEsdGhpcy5iKX0saC5tZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEudmQodGhpcy5iKX0saC5uZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLndkKHRoaXMuYix0KX0saC5iPTAsSShkbiwiQXJyYXlUYWJsZS9BcnJheU1hcC8xIiwyMDE4KSxEKDIwMTksMzk5LHRULFZudCksaC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gWXN0KHRoaXMuYSx0KX0sSShkbiwiQXJyYXlUYWJsZS9BcnJheU1hcC8yIiwyMDE5KSxEKDIwMTcsODQyLFd3LEJzdCksaC51ZD1mdW5jdGlvbigpe3JldHVybiJDb2x1bW4ifSxoLnZkPWZ1bmN0aW9uKHQpe3JldHVybiBveCh0aGlzLmIsdGhpcy5hLHQpfSxoLndkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHMwdCh0aGlzLmIsdGhpcy5hLHQsbil9LGguYT0wLEkoZG4sIkFycmF5VGFibGUvUm93IiwyMDE3KSxEKDg0Myw4NDIsV3csX3llKSxoLnZkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQnN0KHRoaXMuYSx0KX0saC56Yz1mdW5jdGlvbih0LG4pe3JldHVybiBsKG4sODUpLGZ1bigpfSxoLndkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGwobiw4NSksZHVuKCl9LGgudWQ9ZnVuY3Rpb24oKXtyZXR1cm4iUm93In0sSShkbiwiQXJyYXlUYWJsZS9Sb3dNYXAiLDg0MyksRCgxMTU3LDEsUGgsSVplKSxoLkFkPWZ1bmN0aW9uKHQpe3JldHVybih0aGlzLmEueWQoKSYtMjYyJnQpIT0wfSxoLnlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS55ZCgpJi0yNjJ9LGguemQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLnpkKCl9LGguTmI9ZnVuY3Rpb24odCl7dGhpcy5hLk5iKG5ldyBOWmUodCx0aGlzLmIpKX0saC5CZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLkJkKG5ldyBPWmUodCx0aGlzLmIpKX0sSShkbiwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xIiwxMTU3KSxEKDExNTgsMSxmcixPWmUpLGguQ2Q9ZnVuY3Rpb24odCl7dGhpcy5hLkNkKHRoaXMuYi5LYih0KSl9LEkoZG4sIkNvbGxlY3RTcGxpdGVyYXRvcnMvMS9sYW1iZGEkMCRUeXBlIiwxMTU4KSxEKDExNTksMSxmcixOWmUpLGguQ2Q9ZnVuY3Rpb24odCl7dGhpcy5hLkNkKHRoaXMuYi5LYih0KSl9LEkoZG4sIkNvbGxlY3RTcGxpdGVyYXRvcnMvMS9sYW1iZGEkMSRUeXBlIiwxMTU5KSxEKDExNTQsMSxQaCxzaXQpLGguQWQ9ZnVuY3Rpb24odCl7cmV0dXJuKCgxNjQ2NHx0aGlzLmIpJnQpIT0wfSxoLnlkPWZ1bmN0aW9uKCl7cmV0dXJuIDE2NDY0fHRoaXMuYn0saC56ZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuemQoKX0saC5OYj1mdW5jdGlvbih0KXt0aGlzLmEuUWUobmV3IEJaZSh0LHRoaXMuYykpfSxoLkJkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuUmUobmV3IFBaZSh0LHRoaXMuYykpfSxoLmI9MCxJKGRuLCJDb2xsZWN0U3BsaXRlcmF0b3JzLzFXaXRoQ2hhcmFjdGVyaXN0aWNzIiwxMTU0KSxEKDExNTUsMSxrUCxQWmUpLGguRGQ9ZnVuY3Rpb24odCl7dGhpcy5hLkNkKHRoaXMuYi50ZCh0KSl9LEkoZG4sIkNvbGxlY3RTcGxpdGVyYXRvcnMvMVdpdGhDaGFyYWN0ZXJpc3RpY3MvbGFtYmRhJDAkVHlwZSIsMTE1NSksRCgxMTU2LDEsa1AsQlplKSxoLkRkPWZ1bmN0aW9uKHQpe3RoaXMuYS5DZCh0aGlzLmIudGQodCkpfSxJKGRuLCJDb2xsZWN0U3BsaXRlcmF0b3JzLzFXaXRoQ2hhcmFjdGVyaXN0aWNzL2xhbWJkYSQxJFR5cGUiLDExNTYpLEQoMTE1MCwxLFBoKSxoLkFkPWZ1bmN0aW9uKHQpe3JldHVybih0aGlzLmEmdCkhPTB9LGgueWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLnpkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZSYmKHRoaXMuYj1weWUodGhpcy5iLHRoaXMuZS56ZCgpKSkscHllKHRoaXMuYiwwKX0saC5OYj1mdW5jdGlvbih0KXt0aGlzLmUmJih0aGlzLmUuTmIodCksdGhpcy5lPW51bGwpLHRoaXMuYy5OYihuZXcgRlplKHRoaXMsdCkpLHRoaXMuYj0wfSxoLkJkPWZ1bmN0aW9uKHQpe2Zvcig7Oyl7aWYodGhpcy5lJiZ0aGlzLmUuQmQodCkpcmV0dXJuIElfKHRoaXMuYixFUCkmJih0aGlzLmI9RGYodGhpcy5iLDEpKSwhMDtpZih0aGlzLmU9bnVsbCwhdGhpcy5jLkJkKG5ldyB5aWUodGhpcykpKXJldHVybiExfX0saC5hPTAsaC5iPTAsSShkbiwiQ29sbGVjdFNwbGl0ZXJhdG9ycy9GbGF0TWFwU3BsaXRlcmF0b3IiLDExNTApLEQoMTE1MiwxLGZyLHlpZSksaC5DZD1mdW5jdGlvbih0KXtIZm4odGhpcy5hLHQpfSxJKGRuLCJDb2xsZWN0U3BsaXRlcmF0b3JzL0ZsYXRNYXBTcGxpdGVyYXRvci9sYW1iZGEkMCRUeXBlIiwxMTUyKSxEKDExNTMsMSxmcixGWmUpLGguQ2Q9ZnVuY3Rpb24odCl7Z3BuKHRoaXMuYSx0aGlzLmIsdCl9LEkoZG4sIkNvbGxlY3RTcGxpdGVyYXRvcnMvRmxhdE1hcFNwbGl0ZXJhdG9yL2xhbWJkYSQxJFR5cGUiLDExNTMpLEQoMTE1MSwxMTUwLFBoLENjdCksSShkbiwiQ29sbGVjdFNwbGl0ZXJhdG9ycy9GbGF0TWFwU3BsaXRlcmF0b3JPZk9iamVjdCIsMTE1MSksRCgyNTMsMSxQbGUpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuRWQobCh0LDI1MykpfSxoLkVkPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB0PT0oR2llKCkseTBlKT8xOnQ9PShVaWUoKSx3MGUpPy0xOihuPShacSgpLHZOKHRoaXMuYSx0LmEpKSxuIT0wP246RGUodGhpcyw1MjYpPT1EZSh0LDUyNik/MDpEZSh0aGlzLDUyNik/MTotMSl9LGguSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiByeGUodGhpcyx0KX0sSShkbiwiQ3V0IiwyNTMpLEQoMTgyMywyNTMsUGxlLHhKZSksaC5FZD1mdW5jdGlvbih0KXtyZXR1cm4gdD09dGhpcz8wOjF9LGguR2Q9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFN3ZSl9LGguSGQ9ZnVuY3Rpb24odCl7dC5hKz0iK+KInikifSxoLklkPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IG5jKEl3dCkpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFZnKCkscThlKHRoaXMpfSxoLkpkPWZ1bmN0aW9uKHQpe3JldHVybiExfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIiviiJ4ifTt2YXIgdzBlO0koZG4sIkN1dC9BYm92ZUFsbCIsMTgyMyksRCg1MjYsMjUzLHsyNTM6MSw1MjY6MSwzOjEsMzQ6MX0sWG50KSxoLkdkPWZ1bmN0aW9uKHQpe3d1KCh0LmErPSIoIix0KSx0aGlzLmEpfSxoLkhkPWZ1bmN0aW9uKHQpe2hiKHd1KHQsdGhpcy5hKSw5Myl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm5+ZXModGhpcy5hKX0saC5KZD1mdW5jdGlvbih0KXtyZXR1cm4gWnEoKSx2Tih0aGlzLmEsdCk8MH0saC5JYj1mdW5jdGlvbigpe3JldHVybiIvIit0aGlzLmErIlxcIn0sSShkbiwiQ3V0L0Fib3ZlVmFsdWUiLDUyNiksRCgxODIyLDI1MyxQbGUseUplKSxoLkVkPWZ1bmN0aW9uKHQpe3JldHVybiB0PT10aGlzPzA6LTF9LGguR2Q9ZnVuY3Rpb24odCl7dC5hKz0iKC3iiJ4ifSxoLkhkPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBTd2UpfSxoLklkPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IG5jKEl3dCkpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFZnKCkscThlKHRoaXMpfSxoLkpkPWZ1bmN0aW9uKHQpe3JldHVybiEwfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIi3iiJ4ifTt2YXIgeTBlO0koZG4sIkN1dC9CZWxvd0FsbCIsMTgyMiksRCgxODI0LDI1MyxQbGUsUW50KSxoLkdkPWZ1bmN0aW9uKHQpe3d1KCh0LmErPSJbIix0KSx0aGlzLmEpfSxoLkhkPWZ1bmN0aW9uKHQpe2hiKHd1KHQsdGhpcy5hKSw0MSl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gZXModGhpcy5hKX0saC5KZD1mdW5jdGlvbih0KXtyZXR1cm4gWnEoKSx2Tih0aGlzLmEsdCk8PTB9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iXFwiK3RoaXMuYSsiLyJ9LEkoZG4sIkN1dC9CZWxvd1ZhbHVlIiwxODI0KSxEKDU0NywxLGhnKSxoLkpjPWZ1bmN0aW9uKHQpe3RvKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gTDRuKGwoX0godGhpcywidXNlIE9wdGlvbmFsLm9yTnVsbCgpIGluc3RlYWQgb2YgT3B0aW9uYWwub3IobnVsbCkiKSwyMCkuS2MoKSl9LEkoZG4sIkZsdWVudEl0ZXJhYmxlIiw1NDcpLEQoNDQyLDU0NyxoZyxQXyksaC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgaHIoZHIodGhpcy5hLktjKCksbmV3IGopKX0sSShkbiwiRmx1ZW50SXRlcmFibGUvMiIsNDQyKSxEKDEwNTksNTQ3LGhnLHNudCksaC5LYz1mdW5jdGlvbigpe3JldHVybiByZyh0aGlzKX0sSShkbiwiRmx1ZW50SXRlcmFibGUvMyIsMTA1OSksRCg3MjQsMzk5LHRULEF5ZSksaC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hW3RdLktjKCl9LEkoZG4sIkZsdWVudEl0ZXJhYmxlLzMvMSIsNzI0KSxEKDIwNzAsMSx7fSksaC5JYj1mdW5jdGlvbigpe3JldHVybiB4Yyh0aGlzLktkKCkuYil9LEkoZG4sIkZvcndhcmRpbmdPYmplY3QiLDIwNzApLEQoMjA3MSwyMDcwLE93dCksaC5LZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLkxkKCl9LGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5MYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLk9jKCl9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMCl9LGguT2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJuKG51bGwsdGhpcy5OYygpKX0saC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5MZCgpLG9aZSgpfSxoLkdjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLkxkKCksY1plKCl9LGguJGI9ZnVuY3Rpb24oKXt0aGlzLkxkKCksdVplKCl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuTGQoKS5IYyh0KX0saC5JYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5MZCgpLkljKHQpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTGQoKS5iLmRjKCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5MZCgpLktjKCl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuTGQoKSxsWmUoKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkxkKCkuYi5nYygpfSxoLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTGQoKS5QYygpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLkxkKCkuUWModCl9LEkoZG4sIkZvcndhcmRpbmdDb2xsZWN0aW9uIiwyMDcxKSxEKDIwNzgsMzEsdEVlKSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuT2QoKX0saC5GYz1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLkdjPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguTWQ9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmMsdHx8KHRoaXMuYz10aGlzLk5kKCkpfSxoLiRiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gdCE9bnVsbCYmTnkodGhpcyx0LCExKX0saC5OZD1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLmdjKCkpe2Nhc2UgMDpyZXR1cm4gd3coKSx3dygpLHgwZTtjYXNlIDE6cmV0dXJuIHd3KCksbmV3IFNhZShYcih0aGlzLk9kKCkuUGIoKSkpO2RlZmF1bHQ6cmV0dXJuIG5ldyBvNWUodGhpcyx0aGlzLlBjKCkpfX0saC5NYz1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxJKGRuLCJJbW11dGFibGVDb2xsZWN0aW9uIiwyMDc4KSxEKDcyNywyMDc4LHRFZSxUd2UpLGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gY3godGhpcy5hLktjKCkpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB0IT1udWxsJiZ0aGlzLmEuSGModCl9LGguSWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYS5JYyh0KX0saC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZGMoKX0saC5PZD1mdW5jdGlvbigpe3JldHVybiBjeCh0aGlzLmEuS2MoKSl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9LGguUGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLlBjKCl9LGguUWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYS5RYyh0KX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB4Yyh0aGlzLmEpfSxJKGRuLCJGb3J3YXJkaW5nSW1tdXRhYmxlQ29sbGVjdGlvbiIsNzI3KSxEKDMwNywyMDc4LG5UKSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuT2QoKX0saC5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLlBkKDApfSxoLmZkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLlBkKHQpfSxoLmpkPWZ1bmN0aW9uKHQpeyRtKHRoaXMsdCl9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMTYpfSxoLmtkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMuUWQodCxuKX0saC5iZD1mdW5jdGlvbih0LG4pe3Rocm93IHVlKG5ldyBRcil9LGguY2Q9ZnVuY3Rpb24odCxuKXt0aHJvdyB1ZShuZXcgUXIpfSxoLk1kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIFZFbih0aGlzLHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFIzbih0aGlzKX0saC5kZD1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD8tMTpvN24odGhpcyx0KX0saC5PZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLlBkKDApfSxoLlBkPWZ1bmN0aW9uKHQpe3JldHVybiBpYWUodGhpcyx0KX0saC5nZD1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLmhkPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5RZD1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiBSVigocj1uZXcgS1plKHRoaXMpLG5ldyBacChyLHQsbikpKX07dmFyIHgwZTtJKGRuLCJJbW11dGFibGVMaXN0IiwzMDcpLEQoMjEwNSwzMDcsblQpLGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gY3godGhpcy5SZCgpLktjKCkpfSxoLmtkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFJWKHRoaXMuUmQoKS5rZCh0LG4pKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gdCE9bnVsbCYmdGhpcy5SZCgpLkhjKHQpfSxoLkljPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLlJkKCkuSWModCl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIFBpKHRoaXMuUmQoKSx0KX0saC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gYWIodGhpcyx0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBlcyh0aGlzLlJkKCkpfSxoLmRkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLlJkKCkuZGQodCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SZCgpLmRjKCl9LGguT2Q9ZnVuY3Rpb24oKXtyZXR1cm4gY3godGhpcy5SZCgpLktjKCkpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUmQoKS5nYygpfSxoLlFkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFJWKHRoaXMuUmQoKS5rZCh0LG4pKX0saC5QYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJkKCkuUWMoV2Uod2EsUm4sMSx0aGlzLlJkKCkuZ2MoKSw1LDEpKX0saC5RYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5SZCgpLlFjKHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHhjKHRoaXMuUmQoKSl9LEkoZG4sIkZvcndhcmRpbmdJbW11dGFibGVMaXN0IiwyMTA1KSxEKDcyOSwxLHJUKSxoLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIE1tKHRoaXMpfSxoLndjPWZ1bmN0aW9uKHQpe21BKHRoaXMsdCl9LGguZWM9ZnVuY3Rpb24oKXtyZXR1cm4gT2FlKHRoaXMpfSxoLnljPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gcWNlKHRoaXMsdCxuLHIpfSxoLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuVmQoKX0saC4kYj1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBRcil9LGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueGModCkhPW51bGx9LGgudWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuVmQoKS5IYyh0KX0saC5UZD1mdW5jdGlvbigpe3JldHVybiBuZXcgTFFlKHRoaXMpfSxoLlVkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBNUWUodGhpcyl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIE15bih0aGlzLHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIE1tKHRoaXMpLkhiKCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nYygpPT0wfSxoLnpjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGh1bigpfSxoLkJjPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gbTluKHRoaXMpfSxoLlZkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZT90aGlzLmU6dGhpcy5lPXRoaXMuVWQoKX0saC5jPW51bGwsaC5kPW51bGwsaC5lPW51bGw7dmFyIGk2dDtJKGRuLCJJbW11dGFibGVNYXAiLDcyOSksRCg3MzAsNzI5LHJUKSxoLl9iPWZ1bmN0aW9uKHQpe3JldHVybiBzWmUodGhpcyx0KX0saC51Yz1mdW5jdGlvbih0KXtyZXR1cm4gWlplKHRoaXMuYix0KX0saC5TZD1mdW5jdGlvbigpe3JldHVybiB0MXQobmV3IHZpZSh0aGlzKSl9LGguVGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdDF0KG1hdCh0aGlzLmIpKX0saC5VZD1mdW5jdGlvbigpe3JldHVybiB3ZCgpLG5ldyBUd2UoYmF0KHRoaXMuYikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBlZXQodGhpcy5iLHQpfSxoLnhjPWZ1bmN0aW9uKHQpe3JldHVybiBIXyh0aGlzLHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIGVzKHRoaXMuYi5jKX0saC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuYy5kYygpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5jLmdjKCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4geGModGhpcy5iLmMpfSxJKGRuLCJGb3J3YXJkaW5nSW1tdXRhYmxlTWFwIiw3MzApLEQoMjA3MiwyMDcxLEJsZSksaC5LZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLldkKCl9LGguTGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5XZCgpfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrbih0aGlzLDEpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09dGhpc3x8dGhpcy5XZCgpLkZiKHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuV2QoKS5IYigpfSxJKGRuLCJGb3J3YXJkaW5nU2V0IiwyMDcyKSxEKDEwODUsMjA3MixCbGUsdmllKSxoLktkPWZ1bmN0aW9uKCl7cmV0dXJuIEtrKHRoaXMuYS5iKX0saC5MZD1mdW5jdGlvbigpe3JldHVybiBLayh0aGlzLmEuYil9LGguSGM9ZnVuY3Rpb24odCl7aWYoRGUodCw0NCkmJmwodCw0NCkubGQoKT09bnVsbClyZXR1cm4hMTt0cnl7cmV0dXJuIEpaZShLayh0aGlzLmEuYiksdCl9Y2F0Y2gobil7aWYobj1icyhuKSxEZShuLDIxMikpcmV0dXJuITE7dGhyb3cgdWUobil9fSxoLldkPWZ1bmN0aW9uKCl7cmV0dXJuIEtrKHRoaXMuYS5iKX0saC5RYz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj10b3QoS2sodGhpcy5hLmIpLHQpLEtrKHRoaXMuYS5iKS5iLmdjKCk8bi5sZW5ndGgmJlRzKG4sS2sodGhpcy5hLmIpLmIuZ2MoKSxudWxsKSxufSxJKGRuLCJGb3J3YXJkaW5nSW1tdXRhYmxlTWFwLzEiLDEwODUpLEQoMjA3OSwyMDc4LFN4KSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuT2QoKX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcga24odGhpcywxKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gUXhlKHRoaXMsdCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gd2Z0KHRoaXMpfSxJKGRuLCJJbW11dGFibGVTZXQiLDIwNzkpLEQoNzE5LDIwNzksU3gpLGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gY3gobmV3IHlvKHRoaXMuYS5iLktjKCkpKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gdCE9bnVsbCYmbk8odGhpcy5hLHQpfSxoLkljPWZ1bmN0aW9uKHQpe3JldHVybiBYWmUodGhpcy5hLHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIGVzKHRoaXMuYS5iKX0saC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYi5kYygpfSxoLk9kPWZ1bmN0aW9uKCl7cmV0dXJuIGN4KG5ldyB5byh0aGlzLmEuYi5LYygpKSl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmIuZ2MoKX0saC5QYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYi5QYygpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiBRWmUodGhpcy5hLHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHhjKHRoaXMuYS5iKX0sSShkbiwiRm9yd2FyZGluZ0ltbXV0YWJsZVNldCIsNzE5KSxEKDIwNzMsMjA3MixOd3QpLGguS2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLkxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC5XZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGFxKHRoaXMpfSxJKGRuLCJGb3J3YXJkaW5nU29ydGVkU2V0IiwyMDczKSxEKDU0MywyMDc3LHJULGNVKSxoLkFjPWZ1bmN0aW9uKHQpe2JBKHRoaXMsdCl9LGguQ2M9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmQsbmV3IFFzZSh0fHwodGhpcy5kPW5ldyBKMih0aGlzKSkpfSxoLiRiPWZ1bmN0aW9uKCl7ZU4odGhpcyl9LGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuISFnQSh0aGlzLHQsWXIobW8oZmcsaWcoWXIobW8odD09bnVsbD8wOmVzKHQpLGRnKSksMTUpKSkpfSxoLnVjPWZ1bmN0aW9uKHQpe3JldHVybiBraHQodGhpcyx0KX0saC5rYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVW50KHRoaXMsdGhpcyl9LGgud2M9ZnVuY3Rpb24odCl7cG90KHRoaXMsdCl9LGgueGM9ZnVuY3Rpb24odCl7cmV0dXJuIFg1KHRoaXMsdCl9LGguZWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEpzZSh0aGlzKX0saC56Yz1mdW5jdGlvbih0LG4pe3JldHVybiBSVSh0aGlzLHQsbil9LGguQmM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIG49Z0EodGhpcyx0LFlyKG1vKGZnLGlnKFlyKG1vKHQ9PW51bGw/MDplcyh0KSxkZykpLDE1KSkpKSxuPyh1Nih0aGlzLG4pLG4uZT1udWxsLG4uYz1udWxsLG4uaSk6bnVsbH0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLml9LGgueGQ9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmQsbmV3IFFzZSh0fHwodGhpcy5kPW5ldyBKMih0aGlzKSkpfSxoLmY9MCxoLmc9MCxoLmk9MCxJKGRuLCJIYXNoQmlNYXAiLDU0MyksRCg1NDQsMSxPYSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIEFjdCh0aGlzKX0saC5QYj1mdW5jdGlvbigpe3ZhciB0O2lmKCFBY3QodGhpcykpdGhyb3cgdWUobmV3IF9jKTtyZXR1cm4gdD1sKExmKHRoaXMuYyksMzAzKSx0aGlzLmM9dC5jLHRoaXMuZj10LC0tdGhpcy5kLHRoaXMuWGQodCl9LGguUWI9ZnVuY3Rpb24oKXtpZih0aGlzLmUuZyE9dGhpcy5iKXRocm93IHVlKG5ldyBYaCk7aWYoIXRoaXMuZil0aHJvdyB1ZShuZXcgbmMoSmtlKSk7dTYodGhpcy5lLHRoaXMuZiksdGhpcy5iPXRoaXMuZS5nLHRoaXMuZj1udWxsfSxoLmI9MCxoLmQ9MCxoLmY9bnVsbCxJKGRuLCJIYXNoQmlNYXAvSXRyIiw1NDQpLEQoMTAyMyw1NDQsT2EsVW50KSxoLlhkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUlplKHRoaXMsdCl9LEkoZG4sIkhhc2hCaU1hcC8xIiwxMDIzKSxEKG0wLDM1OCxObGUsUlplKSxoLmxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nfSxoLm1kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5pfSxoLm5kPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYTtyZXR1cm4gcj10aGlzLmEuaSxhPVlyKG1vKGZnLGlnKFlyKG1vKHQ9PW51bGw/MDplcyh0KSxkZykpLDE1KSkpLGE9PXRoaXMuYS5mJiYocWUodCk9PT1xZShyKXx8dCE9bnVsbCYmUGkodCxyKSk/dDoobjB0KCFwQSh0aGlzLmIuYSx0LGEpLHQpLHU2KHRoaXMuYi5hLHRoaXMuYSksbj1uZXcgeEgodGhpcy5hLmcsdGhpcy5hLmEsdCxhKSxlUCh0aGlzLmIuYSxuLHRoaXMuYSksdGhpcy5hLmU9bnVsbCx0aGlzLmEuYz1udWxsLHRoaXMuYi5iPXRoaXMuYi5hLmcsdGhpcy5iLmY9PXRoaXMuYSYmKHRoaXMuYi5mPW4pLHRoaXMuYT1uLHIpfSxJKGRuLCJIYXNoQmlNYXAvMS9NYXBFbnRyeSIsbTApLEQoMjQ2LDM1OCx7MzU4OjEsMjQ2OjEsMzoxLDQ0OjF9LGl3KSxoLmxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ30saC5tZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLml9LGgubmQ9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0sSShkbiwiSW1tdXRhYmxlRW50cnkiLDI0NiksRCgzMDMsMjQ2LHszNTg6MSwzMDM6MSwyNDY6MSwzOjEsNDQ6MX0seEgpLGguYT0wLGguZj0wO3ZhciBrMGU9SShkbiwiSGFzaEJpTWFwL0JpRW50cnkiLDMwMyk7RCg2MTksMjA3NyxyVCxKMiksaC5BYz1mdW5jdGlvbih0KXtiQSh0aGlzLHQpfSxoLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBKc2UodGhpcy5hKX0saC4kYj1mdW5jdGlvbigpe2VOKHRoaXMuYSl9LGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuIGtodCh0aGlzLmEsdCl9LGgua2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEdudCh0aGlzLHRoaXMuYSl9LGgud2M9ZnVuY3Rpb24odCl7WHIodCkscG90KHRoaXMuYSxuZXcgd3oodCkpfSxoLnhjPWZ1bmN0aW9uKHQpe3JldHVybiB2Vih0aGlzLHQpfSxoLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBRc2UodGhpcyl9LGguemM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZUFuKHRoaXMuYSx0LG4sITEpfSxoLkJjPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPXBBKHRoaXMuYSx0LFlyKG1vKGZnLGlnKFlyKG1vKHQ9PW51bGw/MDplcyh0KSxkZykpLDE1KSkpKSxuPyh1Nih0aGlzLmEsbiksbi5lPW51bGwsbi5jPW51bGwsbi5nKTpudWxsfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5pfSxoLnhkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBKc2UodGhpcy5hKX0sSShkbiwiSGFzaEJpTWFwL0ludmVyc2UiLDYxOSksRCgxMDIwLDU0NCxPYSxHbnQpLGguWGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBqWmUodGhpcyx0KX0sSShkbiwiSGFzaEJpTWFwL0ludmVyc2UvMSIsMTAyMCksRCgxMDIxLDM1OCxObGUsalplKSxoLmxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5pfSxoLm1kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nfSxoLm5kPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYTtyZXR1cm4gYT10aGlzLmEuZyxuPVlyKG1vKGZnLGlnKFlyKG1vKHQ9PW51bGw/MDplcyh0KSxkZykpLDE1KSkpLG49PXRoaXMuYS5hJiYocWUodCk9PT1xZShhKXx8dCE9bnVsbCYmUGkodCxhKSk/dDoobjB0KCFnQSh0aGlzLmIuYS5hLHQsbiksdCksdTYodGhpcy5iLmEuYSx0aGlzLmEpLHI9bmV3IHhIKHQsbix0aGlzLmEuaSx0aGlzLmEuZiksdGhpcy5hPXIsZVAodGhpcy5iLmEuYSxyLG51bGwpLHRoaXMuYi5iPXRoaXMuYi5hLmEuZyxhKX0sSShkbiwiSGFzaEJpTWFwL0ludmVyc2UvMS9JbnZlcnNlRW50cnkiLDEwMjEpLEQoNjIwLDU0MixUbCxRc2UpLGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRKZSh0aGlzLmEuYSl9LGguTWM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIG49cEEodGhpcy5hLmEsdCxZcihtbyhmZyxpZyhZcihtbyh0PT1udWxsPzA6ZXModCksZGcpKSwxNSkpKSksbj8odTYodGhpcy5hLmEsbiksITApOiExfSxJKGRuLCJIYXNoQmlNYXAvSW52ZXJzZS9JbnZlcnNlS2V5U2V0Iiw2MjApLEQoMTAxOSw1NDQsT2EsVEplKSxoLlhkPWZ1bmN0aW9uKHQpe3JldHVybiB0Lml9LEkoZG4sIkhhc2hCaU1hcC9JbnZlcnNlL0ludmVyc2VLZXlTZXQvMSIsMTAxOSksRCgxMDIyLDEse30sd3opLGguWWQ9ZnVuY3Rpb24odCxuKXtIY24odGhpcy5hLHQsbil9LEkoZG4sIkhhc2hCaU1hcC9JbnZlcnNlL2xhbWJkYSQwJFR5cGUiLDEwMjIpLEQoNjE4LDU0MixUbCxKc2UpLGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IENKZSh0aGlzLmEpfSxoLk1jPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPWdBKHRoaXMuYSx0LFlyKG1vKGZnLGlnKFlyKG1vKHQ9PW51bGw/MDplcyh0KSxkZykpLDE1KSkpKSxuPyh1Nih0aGlzLmEsbiksbi5lPW51bGwsbi5jPW51bGwsITApOiExfSxJKGRuLCJIYXNoQmlNYXAvS2V5U2V0Iiw2MTgpLEQoMTAxOCw1NDQsT2EsQ0plKSxoLlhkPWZ1bmN0aW9uKHQpe3JldHVybiB0Lmd9LEkoZG4sIkhhc2hCaU1hcC9LZXlTZXQvMSIsMTAxOCksRCgxMTIzLDYyNyxKbSksSShkbiwiSGFzaE11bHRpbWFwR3d0U2VyaWFsaXphdGlvbkRlcGVuZGVuY2llcyIsMTEyMyksRCgyNzEsMTEyMyxKbSxDdyksaC5oYz1mdW5jdGlvbigpe3JldHVybiBuZXcgS3ooQXkodGhpcy5hKSl9LGgucGQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEt6KEF5KHRoaXMuYSkpfSxoLmE9MixJKGRuLCJIYXNoTXVsdGltYXAiLDI3MSksRCgyMDk3LDMwNyxuVCksaC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5aZCgpLkhjKHQpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWmQoKS5kYygpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWmQoKS5nYygpfSxJKGRuLCJJbW11dGFibGVBc0xpc3QiLDIwOTcpLEQoMjAzMCw3MzAsclQpLGguVmQ9ZnVuY3Rpb24oKXtyZXR1cm4gd2QoKSxuZXcgTzgodGhpcy5hKX0saC5DYz1mdW5jdGlvbigpe3JldHVybiB3ZCgpLG5ldyBPOCh0aGlzLmEpfSxoLnhkPWZ1bmN0aW9uKCl7cmV0dXJuIHdkKCksbmV3IE84KHRoaXMuYSl9LEkoZG4sIkltbXV0YWJsZUJpTWFwIiwyMDMwKSxEKDIwNzUsMSx7fSksSShkbiwiSW1tdXRhYmxlQ29sbGVjdGlvbi9CdWlsZGVyIiwyMDc1KSxEKDEwMzUsNzE5LFN4LFNKZSksSShkbiwiSW1tdXRhYmxlRW51bVNldCIsMTAzNSksRCg5ODAsMzk5LHRULHJpdCksaC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLlhiKHQpfSxJKGRuLCJJbW11dGFibGVMaXN0LzEiLDk4MCksRCg5NzksMjA3NSx7fSxHcnQpLEkoZG4sIkltbXV0YWJsZUxpc3QvQnVpbGRlciIsOTc5KSxEKDYyMywyMDQsZVQsYmspLGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLk9iKCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLmEuUGIoKSw0NCkubGQoKX0sSShkbiwiSW1tdXRhYmxlTWFwLzEiLDYyMyksRCgxMDU0LDEse30sUiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDQ0KS5sZCgpfSxJKGRuLCJJbW11dGFibGVNYXAvMm1ldGhvZHJlZiRnZXRLZXkkVHlwZSIsMTA1NCksRCgxMDUzLDEse30sS3J0KSxJKGRuLCJJbW11dGFibGVNYXAvQnVpbGRlciIsMTA1MyksRCgyMDk4LDIwNzksU3gpLGguTWQ9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmIsdHx8KHRoaXMuYj1uZXcgRmllKHRoaXMpKX0saC5OZD1mdW5jdGlvbigpe3JldHVybiBuZXcgbzVlKHRoaXMsUEEodGhpcyxXZSh3YSxSbiwxLHRoaXMuZ2MoKSw1LDEpKSl9LEkoZG4sIkltbXV0YWJsZVNldC9DYWNoaW5nQXNMaXN0IiwyMDk4KSxEKDIwOTksMjA5OCxTeCksaC5LYz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PU1tKHRoaXMuYSkuT2QoKSxuZXcgYmsodCl9LGguTmQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEZpZSh0aGlzKX0saC5KYz1mdW5jdGlvbih0KXt2YXIgbixyO2ZvcihYcih0KSxyPXRoaXMuZ2MoKSxuPTA7bjxyO24rKyl0LkNkKGwoTW0odGhpcy5hKS5NZCgpLlhiKG4pLDQ0KS5sZCgpKX0saC5PZD1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuYixpYWUodHx8KHRoaXMuYj1uZXcgRmllKHRoaXMpKSwwKX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBDYWUodGhpcy5nYygpLDEyOTYsbmV3IHpJKHRoaXMpKX0sSShkbiwiSW5kZXhlZEltbXV0YWJsZVNldCIsMjA5OSksRCgxMjMwLDIwOTksU3gsTFFlKSxoLktjPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9TW0odGhpcy5hKS5PZCgpLG5ldyBiayh0KX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLl9iKHQpfSxoLkpjPWZ1bmN0aW9uKHQpe1hyKHQpLG1BKHRoaXMuYSxuZXcgeTUodCkpfSxoLk9kPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9TW0odGhpcy5hKS5PZCgpLG5ldyBiayh0KX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBOTyhNbSh0aGlzLmEpLk5jKCksbmV3IFIpfSxJKGRuLCJJbW11dGFibGVNYXBLZXlTZXQiLDEyMzApLEQoMTIzMSwxLHt9LHk1KSxoLllkPWZ1bmN0aW9uKHQsbil7d2QoKSx0aGlzLmEuQ2QodCl9LEkoZG4sIkltbXV0YWJsZU1hcEtleVNldC9sYW1iZGEkMCRUeXBlIiwxMjMxKSxEKDEyMjcsMjA3OCx0RWUsTVFlKSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBFYWUodGhpcyl9LGguTWQ9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1NbSh0aGlzLmEpLk1kKCksbmV3IG1udCh0aGlzLHQpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB0IT1udWxsJiZTOG4obmV3IEVhZSh0aGlzKSx0KX0saC5PZD1mdW5jdGlvbigpe3JldHVybiBuZXcgRWFlKHRoaXMpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIE5PKE1tKHRoaXMuYSkuTmMoKSxuZXcgRil9LEkoZG4sIkltbXV0YWJsZU1hcFZhbHVlcyIsMTIyNyksRCgxMjI4LDEse30sRiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDQ0KS5tZCgpfSxJKGRuLCJJbW11dGFibGVNYXBWYWx1ZXMvMG1ldGhvZHJlZiRnZXRWYWx1ZSRUeXBlIiwxMjI4KSxEKDYzNywyMDQsZVQsRWFlKSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5PYigpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcy5hLlBiKCksNDQpLm1kKCl9LEkoZG4sIkltbXV0YWJsZU1hcFZhbHVlcy8xIiw2MzcpLEQoMTIyOSwyMDk3LG5ULG1udCksaC5aZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodGhpcy5iLlhiKHQpLDQ0KS5tZCgpfSxJKGRuLCJJbW11dGFibGVNYXBWYWx1ZXMvMiIsMTIyOSksRCgxMjMyLDEse30sekkpLGgudGQ9ZnVuY3Rpb24odCl7cmV0dXJuIFFzdCh0aGlzLmEsdCl9LEkoZG4sIkluZGV4ZWRJbW11dGFibGVTZXQvMG1ldGhvZHJlZiRnZXQkVHlwZSIsMTIzMiksRCg2MzgsMjA5NyxuVCxGaWUpLGguWmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLlhiPWZ1bmN0aW9uKHQpe3JldHVybiBRc3QodGhpcy5hLHQpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5hLmdjKCl9LEkoZG4sIkluZGV4ZWRJbW11dGFibGVTZXQvMSIsNjM4KSxEKDQzLDEse30saiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDIwKS5LYygpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0sSShkbiwiSXRlcmFibGVzLzEwIiw0MyksRCgxMDU1LDU0NyxoZyxqaXQpLGguSmM9ZnVuY3Rpb24odCl7WHIodCksdGhpcy5iLkpjKG5ldyAkWmUodGhpcy5hLHQpKX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBseWUodGhpcyl9LEkoZG4sIkl0ZXJhYmxlcy80IiwxMDU1KSxEKDEwNTYsMSxmciwkWmUpLGguQ2Q9ZnVuY3Rpb24odCl7bGxuKHRoaXMuYix0aGlzLmEsdCl9LEkoZG4sIkl0ZXJhYmxlcy80L2xhbWJkYSQwJFR5cGUiLDEwNTYpLEQoMTA1Nyw1NDcsaGcsJGl0KSxoLkpjPWZ1bmN0aW9uKHQpe1hyKHQpLHRvKHRoaXMuYSxuZXcgcVplKHQsdGhpcy5iKSl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gZHIobmV3IG9yKHRoaXMuYSksdGhpcy5iKX0sSShkbiwiSXRlcmFibGVzLzUiLDEwNTcpLEQoMTA1OCwxLGZyLHFaZSksaC5DZD1mdW5jdGlvbih0KXt0aGlzLmEuQ2QoYW50KHQpKX0sSShkbiwiSXRlcmFibGVzLzUvbGFtYmRhJDAkVHlwZSIsMTA1OCksRCgxMDg3LDIwNCxlVCx3OCksaC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2IoKX0saC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuUGIoKX0sSShkbiwiSXRlcmF0b3JzLzEiLDEwODcpLEQoMTA4OCw3MTMsZVQselplKSxoLlliPWZ1bmN0aW9uKCl7Zm9yKHZhciB0O3RoaXMuYi5PYigpOylpZih0PXRoaXMuYi5QYigpLHRoaXMuYS5MYih0KSlyZXR1cm4gdDtyZXR1cm4gdGhpcy5lPTIsbnVsbH0sSShkbiwiSXRlcmF0b3JzLzUiLDEwODgpLEQoNDk3LDEsT2EpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuT2IoKX0saC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkKHRoaXMuYi5QYigpKX0saC5RYj1mdW5jdGlvbigpe3RoaXMuYi5RYigpfSxJKGRuLCJUcmFuc2Zvcm1lZEl0ZXJhdG9yIiw0OTcpLEQoMTA4OSw0OTcsT2EsS250KSxoLiRkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuS2IodCl9LEkoZG4sIkl0ZXJhdG9ycy82IiwxMDg5KSxEKDczMiwyMDQsZVQscUkpLGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5hfSxoLlBiPWZ1bmN0aW9uKCl7aWYodGhpcy5hKXRocm93IHVlKG5ldyBfYyk7cmV0dXJuIHRoaXMuYT0hMCx0aGlzLmJ9LGguYT0hMSxJKGRuLCJJdGVyYXRvcnMvOSIsNzMyKSxEKDEwODYsMzk5LHRULGhzdCksaC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hW3RoaXMuYit0XX0saC5iPTA7dmFyIHM2dDtJKGRuLCJJdGVyYXRvcnMvQXJyYXlJdHIiLDEwODYpLEQoMzgsMSx7Mzg6MSw1MToxfSxociksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIGpyKHRoaXMpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHhyKHRoaXMpfSxoLlFiPWZ1bmN0aW9uKCl7aWYoIXRoaXMuYyl0aHJvdyB1ZShuZXcgbmMoSmtlKSk7dGhpcy5jLlFiKCksdGhpcy5jPW51bGx9LEkoZG4sIkl0ZXJhdG9ycy9Db25jYXRlbmF0ZWRJdGVyYXRvciIsMzgpLEQoMjIsMSx7MzoxLDM0OjEsMjI6MX0pLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFBKZSh0aGlzLGwodCwyMikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5IYj1mdW5jdGlvbigpe3JldHVybiBmdyh0aGlzKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBhYWUodGhpcyl9LGguZz0wO3ZhciBIcj1JKFZjLCJFbnVtIiwyMik7RCg1NDksMjIsezU0OToxLDM6MSwzNDoxLDIyOjEsNTE6MX0sQW50KSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5QYj1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBfYyl9LGguUWI9ZnVuY3Rpb24oKXtSayghMSl9O3ZhciBFMGUsYTZ0PUZyKGRuLCJJdGVyYXRvcnMvRW1wdHlNb2RpZmlhYmxlSXRlcmF0b3IiLDU0OSxIcixrZ24sVmhuKSxvNnQ7RCgxOTA3LDYyNyxKbSksSShkbiwiTGlua2VkSGFzaE11bHRpbWFwR3d0U2VyaWFsaXphdGlvbkRlcGVuZGVuY2llcyIsMTkwNyksRCgxOTA4LDE5MDcsSm0sRzB0KSxoLmhjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuYWUoQXkodGhpcy5iKSl9LGguJGI9ZnVuY3Rpb24oKXttVih0aGlzKSxXSSh0aGlzLmEsdGhpcy5hKX0saC5wZD1mdW5jdGlvbigpe3JldHVybiBuZXcgbmFlKEF5KHRoaXMuYikpfSxoLmljPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQTB0KHRoaXMsdCx0aGlzLmIpfSxoLmtjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB2NWUodGhpcyl9LGgubGM9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gbmV3IGtuKCh0PXRoaXMuZyxsKHR8fCh0aGlzLmc9bmV3IFV3ZSh0aGlzKSksMjEpKSwxNyl9LGguZWM9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmksdHx8KHRoaXMuaT1uZXcgcTUodGhpcyx0aGlzLmMpKX0saC5uYz1mdW5jdGlvbigpe3JldHVybiBuZXcgS3dlKG5ldyB2NWUodGhpcykpfSxoLm9jPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIE5PKG5ldyBrbigodD10aGlzLmcsbCh0fHwodGhpcy5nPW5ldyBVd2UodGhpcykpLDIxKSksMTcpLG5ldyBLKX0saC5iPTIsSShkbiwiTGlua2VkSGFzaE11bHRpbWFwIiwxOTA4KSxEKDE5MTEsMSx7fSxLKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsNDQpLm1kKCl9LEkoZG4sIkxpbmtlZEhhc2hNdWx0aW1hcC8wbWV0aG9kcmVmJGdldFZhbHVlJFR5cGUiLDE5MTEpLEQoODM0LDEsT2EsdjVlKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gUDNuKHRoaXMpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSE9dGhpcy5iLmF9LGguUWI9ZnVuY3Rpb24oKXtSayghIXRoaXMuYyksY2N0KHRoaXMuYix0aGlzLmMuZyx0aGlzLmMuaSksdGhpcy5jPW51bGx9LEkoZG4sIkxpbmtlZEhhc2hNdWx0aW1hcC8xIiw4MzQpLEQoMjI3LDI0Nix7MzU4OjEsMjQ2OjEsMjI3OjEsNjA0OjEsMzoxLDQ0OjF9LFM1ZSksaC5fZD1mdW5jdGlvbigpe3JldHVybiBsKExmKHRoaXMuZiksNjA0KX0saC5hZT1mdW5jdGlvbih0KXt0aGlzLmM9dH0saC5iZT1mdW5jdGlvbih0KXt0aGlzLmY9dH0saC5kPTA7dmFyIGM2dD1JKGRuLCJMaW5rZWRIYXNoTXVsdGltYXAvVmFsdWVFbnRyeSIsMjI3KTtEKDE5MDksMjA2OCx7NjA0OjEsMjA6MSwzMToxLDE2OjEsMjE6MX0sQTB0KSxoLkZjPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGY7Zm9yKGY9WXIobW8oZmcsaWcoWXIobW8odD09bnVsbD8wOmVzKHQpLGRnKSksMTUpKSksbj1mJnRoaXMuYi5sZW5ndGgtMSxvPXRoaXMuYltuXSxyPW87cjtyPXIuYSlpZihyLmQ9PWYmJnlkKHIuaSx0KSlyZXR1cm4hMTtyZXR1cm4gYT1uZXcgUzVlKHRoaXMuYyx0LGYsbyksUkplKHRoaXMuZCxhKSxhLmY9dGhpcyx0aGlzLmQ9YSxXSShsKExmKHRoaXMuZy5hLmIpLDIyNyksYSksV0koYSx0aGlzLmcuYSksdGhpcy5iW25dPWEsKyt0aGlzLmYsKyt0aGlzLmUsVDhuKHRoaXMpLCEwfSxoLiRiPWZ1bmN0aW9uKCl7dmFyIHQsbjtmb3IoYU8odGhpcy5iLG51bGwpLHRoaXMuZj0wLHQ9dGhpcy5hO3QhPXRoaXM7dD10Ll9kKCkpbj1sKHQsMjI3KSxXSShsKExmKG4uYiksMjI3KSxsKExmKG4uZSksMjI3KSk7dGhpcy5hPXRoaXMsdGhpcy5kPXRoaXMsKyt0aGlzLmV9LGguSGM9ZnVuY3Rpb24odCl7dmFyIG4scjtmb3Iocj1ZcihtbyhmZyxpZyhZcihtbyh0PT1udWxsPzA6ZXModCksZGcpKSwxNSkpKSxuPXRoaXMuYltyJnRoaXMuYi5sZW5ndGgtMV07bjtuPW4uYSlpZihuLmQ9PXImJnlkKG4uaSx0KSlyZXR1cm4hMDtyZXR1cm4hMX0saC5KYz1mdW5jdGlvbih0KXt2YXIgbjtmb3IoWHIodCksbj10aGlzLmE7biE9dGhpcztuPW4uX2QoKSl0LkNkKGwobiwyMjcpLmkpfSxoLl9kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgcmF0KHRoaXMpfSxoLk1jPWZ1bmN0aW9uKHQpe3JldHVybiB1YnQodGhpcyx0KX0saC5hZT1mdW5jdGlvbih0KXt0aGlzLmQ9dH0saC5iZT1mdW5jdGlvbih0KXt0aGlzLmE9dH0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGguZT0wLGguZj0wLEkoZG4sIkxpbmtlZEhhc2hNdWx0aW1hcC9WYWx1ZVNldCIsMTkwOSksRCgxOTEwLDEsT2EscmF0KSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gcTRlKHRoaXMpLHRoaXMuYiE9dGhpcy5jfSxoLlBiPWZ1bmN0aW9uKCl7dmFyIHQsbjtpZihxNGUodGhpcyksdGhpcy5iPT10aGlzLmMpdGhyb3cgdWUobmV3IF9jKTtyZXR1cm4gdD1sKHRoaXMuYiwyMjcpLG49dC5pLHRoaXMuZD10LHRoaXMuYj1sKExmKHQuZiksNjA0KSxufSxoLlFiPWZ1bmN0aW9uKCl7cTRlKHRoaXMpLFJrKCEhdGhpcy5kKSx1YnQodGhpcy5jLHRoaXMuZC5pKSx0aGlzLmE9dGhpcy5jLmUsdGhpcy5kPW51bGx9LGguYT0wLEkoZG4sIkxpbmtlZEhhc2hNdWx0aW1hcC9WYWx1ZVNldC8xIiwxOTEwKSxEKDc4MCwyMDg0LEptLFV0dCksaC5aYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuZix0fHwodGhpcy5mPW5ldyBDM2UodGhpcykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBFY2UodGhpcyx0KX0saC5jYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHNzZSh0aGlzLHQpfSxoLmZjPWZ1bmN0aW9uKHQpe3JldHVybiBNNmUodGhpcyx0KX0saC4kYj1mdW5jdGlvbigpe2pzdCh0aGlzKX0saC5fYj1mdW5jdGlvbih0KXtyZXR1cm4gWVplKHRoaXMsdCl9LGguYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEMzZSh0aGlzKX0saC5iYz1mdW5jdGlvbigpe3JldHVybiBuZXcgeGllKHRoaXMpfSxoLnFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgc3NlKHRoaXMsdCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5hfSxoLnJjPWZ1bmN0aW9uKHQpe3JldHVybiBNNmUodGhpcyx0KX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGguYz0wLGguZD0wLEkoZG4sIkxpbmtlZExpc3RNdWx0aW1hcCIsNzgwKSxEKDU2LDMxLGlUKSxoLmpkPWZ1bmN0aW9uKHQpeyRtKHRoaXMsdCl9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMTYpfSxoLmJkPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IEhwKCJBZGQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGxpc3QiKSl9LGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYmQodGhpcy5nYygpLHQpLCEwfSxoLmNkPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvO2ZvcihucihuKSxyPSExLG89bi5LYygpO28uT2IoKTspYT1vLlBiKCksdGhpcy5iZCh0KyssYSkscj0hMDtyZXR1cm4gcn0saC4kYj1mdW5jdGlvbigpe3RoaXMuY2UoMCx0aGlzLmdjKCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBPOWUodGhpcyx0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBxN2UodGhpcyl9LGguZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIFhodCh0aGlzLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrcih0aGlzKX0saC5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZkKDApfSxoLmZkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVWEodGhpcyx0KX0saC5nZD1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgSHAoIlJlbW92ZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgbGlzdCIpKX0saC5jZT1mdW5jdGlvbih0LG4pe3ZhciByLGE7Zm9yKGE9dGhpcy5mZCh0KSxyPXQ7cjxuOysrcilhLlBiKCksYS5RYigpfSxoLmhkPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IEhwKCJTZXQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGxpc3QiKSl9LGgua2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3IFpwKHRoaXMsdCxuKX0saC5qPTAsSShMciwiQWJzdHJhY3RMaXN0Iiw1NiksRCgyMDYyLDU2LGlUKSxoLmJkPWZ1bmN0aW9uKHQsbil7UGsodGhpcyx0LG4pfSxoLmNkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEwwdCh0aGlzLHQsbil9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIGZmKHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZCgwKX0saC5nZD1mdW5jdGlvbih0KXtyZXR1cm4ga3VlKHRoaXMsdCl9LGguaGQ9ZnVuY3Rpb24odCxuKXt2YXIgcixhO3I9dGhpcy5mZCh0KTt0cnl7cmV0dXJuIGE9ci5QYigpLHIuV2IobiksYX1jYXRjaChvKXt0aHJvdyBvPWJzKG8pLERlKG8sMTEyKT91ZShuZXcgdGMoIkNhbid0IHNldCBlbGVtZW50ICIrdCkpOnVlKG8pfX0sSShMciwiQWJzdHJhY3RTZXF1ZW50aWFsTGlzdCIsMjA2MiksRCg2NDYsMjA2MixpVCxzc2UpLGguZmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFludCh0aGlzLHQpfSxoLmdjPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9bChjcih0aGlzLmEuYix0aGlzLmIpLDI2MCksdD90LmE6MH0sSShkbiwiTGlua2VkTGlzdE11bHRpbWFwLzEiLDY0NiksRCgxMzE2LDIwNjgsVGwseGllKSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBZWmUodGhpcy5hLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBnZnQodGhpcy5hKX0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4hTTZlKHRoaXMuYSx0KS5hLmRjKCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gZF8odGhpcy5hLmIpfSxJKGRuLCJMaW5rZWRMaXN0TXVsdGltYXAvMUtleVNldEltcGwiLDEzMTYpLEQoMTMxNSwxLE9hLGdmdCksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIEg0ZSh0aGlzKSwhIXRoaXMuY30saC5QYj1mdW5jdGlvbigpe2lmKEg0ZSh0aGlzKSwhdGhpcy5jKXRocm93IHVlKG5ldyBfYyk7dGhpcy5hPXRoaXMuYyxuYSh0aGlzLmQsdGhpcy5hLmEpO2RvIHRoaXMuYz10aGlzLmMuYjt3aGlsZSh0aGlzLmMmJiFuYSh0aGlzLmQsdGhpcy5jLmEpKTtyZXR1cm4gdGhpcy5hLmF9LGguUWI9ZnVuY3Rpb24oKXtINGUodGhpcyksUmsoISF0aGlzLmEpLGlIKG5ldyB6b2UodGhpcy5lLHRoaXMuYS5hKSksdGhpcy5hPW51bGwsdGhpcy5iPXRoaXMuZS5jfSxoLmI9MCxJKGRuLCJMaW5rZWRMaXN0TXVsdGltYXAvRGlzdGluY3RLZXlJdGVyYXRvciIsMTMxNSksRCgyNjAsMSx7MjYwOjF9LEI1ZSksaC5hPTAsSShkbiwiTGlua2VkTGlzdE11bHRpbWFwL0tleUxpc3QiLDI2MCksRCg1MTEsMzU4LHszNTg6MSw1MTE6MSw0NDoxfSxIWmUpLGgubGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLm1kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0saC5uZD1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj10aGlzLmYsdGhpcy5mPXQsbn0sSShkbiwiTGlua2VkTGlzdE11bHRpbWFwL05vZGUiLDUxMSksRCg1NjYsMSxsZyx6b2UseXB0KSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUmI9ZnVuY3Rpb24odCl7dGhpcy5lPWRrZSh0aGlzLmYsdGhpcy5iLHQsdGhpcy5jKSwrK3RoaXMuZCx0aGlzLmE9bnVsbH0saC5PYj1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5jfSxoLlNiPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmV9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gRzZlKHRoaXMpfSxoLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0saC5VYj1mdW5jdGlvbigpe3JldHVybiBuaHQodGhpcyl9LGguVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kLTF9LGguUWI9ZnVuY3Rpb24oKXtSayghIXRoaXMuYSksdGhpcy5hIT10aGlzLmM/KHRoaXMuZT10aGlzLmEuZSwtLXRoaXMuZCk6dGhpcy5jPXRoaXMuYS5jLHpUbih0aGlzLmYsdGhpcy5hKSx0aGlzLmE9bnVsbH0saC5XYj1mdW5jdGlvbih0KXtDeWUoISF0aGlzLmEpLHRoaXMuYS5mPXR9LGguZD0wLEkoZG4sIkxpbmtlZExpc3RNdWx0aW1hcC9WYWx1ZUZvcktleUl0ZXJhdG9yIiw1NjYpLEQoMTAzMSw1NixpVCksaC5iZD1mdW5jdGlvbih0LG4pe3RoaXMuYS5iZCh0LG4pfSxoLmNkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMuYS5jZCh0LG4pfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuSGModCl9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYS5YYih0KX0saC5nZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLmdkKHQpfSxoLmhkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMuYS5oZCh0LG4pfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxJKGRuLCJMaXN0cy9BYnN0cmFjdExpc3RXcmFwcGVyIiwxMDMxKSxEKDEwMzIsMTAzMSxCd3QpLEkoZG4sIkxpc3RzL1JhbmRvbUFjY2Vzc0xpc3RXcmFwcGVyIiwxMDMyKSxEKDEwMzQsMTAzMixCd3QsS1plKSxoLmZkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuZmQodCl9LEkoZG4sIkxpc3RzLzEiLDEwMzQpLEQoNDQxLDU2LHs0NDE6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDE1OjF9LHAzZSksaC5iZD1mdW5jdGlvbih0LG4pe3RoaXMuYS5iZChIayh0aGlzLHQpLG4pfSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLiRiKCl9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYS5YYihtNWUodGhpcyx0KSl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gem90KHRoaXMsMCl9LGguZmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHpvdCh0aGlzLHQpfSxoLmdkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuZ2QobTVlKHRoaXMsdCkpfSxoLmNlPWZ1bmN0aW9uKHQsbil7KG1jdCh0LG4sdGhpcy5hLmdjKCkpLGxmKHRoaXMuYS5rZChIayh0aGlzLG4pLEhrKHRoaXMsdCkpKSkuJGIoKX0saC5oZD1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLmEuaGQobTVlKHRoaXMsdCksbil9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9LGgua2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbWN0KHQsbix0aGlzLmEuZ2MoKSksbGYodGhpcy5hLmtkKEhrKHRoaXMsbiksSGsodGhpcyx0KSkpfSxJKGRuLCJMaXN0cy9SZXZlcnNlTGlzdCIsNDQxKSxEKDEwMzAsNDQxLHs0NDE6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDE1OjEsNTk6MX0sX0plKSxJKGRuLCJMaXN0cy9SYW5kb21BY2Nlc3NSZXZlcnNlTGlzdCIsMTAzMCksRCgxMDMzLDEsbGcsVlplKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUmI9ZnVuY3Rpb24odCl7dGhpcy5jLlJiKHQpLHRoaXMuYy5VYigpLHRoaXMuYT0hMX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuU2IoKX0saC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuT2IoKX0saC5QYj1mdW5jdGlvbigpe2lmKCF0aGlzLmMuU2IoKSl0aHJvdyB1ZShuZXcgX2MpO3JldHVybiB0aGlzLmE9ITAsdGhpcy5jLlViKCl9LGguVGI9ZnVuY3Rpb24oKXtyZXR1cm4gSGsodGhpcy5iLHRoaXMuYy5UYigpKX0saC5VYj1mdW5jdGlvbigpe2lmKCF0aGlzLmMuT2IoKSl0aHJvdyB1ZShuZXcgX2MpO3JldHVybiB0aGlzLmE9ITAsdGhpcy5jLlBiKCl9LGguVmI9ZnVuY3Rpb24oKXtyZXR1cm4gSGsodGhpcy5iLHRoaXMuYy5UYigpKS0xfSxoLlFiPWZ1bmN0aW9uKCl7UmsodGhpcy5hKSx0aGlzLmMuUWIoKSx0aGlzLmE9ITF9LGguV2I9ZnVuY3Rpb24odCl7Q3llKHRoaXMuYSksdGhpcy5jLldiKHQpfSxoLmE9ITEsSShkbiwiTGlzdHMvUmV2ZXJzZUxpc3QvMSIsMTAzMyksRCg0NDAsNDk3LE9hLGNfKSxoLiRkPWZ1bmN0aW9uKHQpe3JldHVybiBzcSh0KX0sSShkbiwiTWFwcy8xIiw0NDApLEQoNzEyLDQ5NyxPYSxLd2UpLGguJGQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCw0NCkubWQoKX0sSShkbiwiTWFwcy8yIiw3MTIpLEQoOTc1LDQ5NyxPYSxXbnQpLGguJGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpdyh0LFp0dCh0aGlzLmEsdCkpfSxJKGRuLCJNYXBzLzMiLDk3NSksRCg5NzIsMjA2OSxUbCx5eiksaC5KYz1mdW5jdGlvbih0KXtXY24odGhpcy5hLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5rYygpfSxoLlJjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5OYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEubGMoKX0sSShkbiwiTWFwcy9JdGVyYXRvckJhc2VkQWJzdHJhY3RNYXAvMSIsOTcyKSxEKDk3MywxLHt9LHh6KSxoLllkPWZ1bmN0aW9uKHQsbil7dGhpcy5hLkNkKHQpfSxJKGRuLCJNYXBzL0tleVNldC9sYW1iZGEkMCRUeXBlIiw5NzMpLEQoOTcxLDMxLFd5LFdaZSksaC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEudWModCl9LGguSmM9ZnVuY3Rpb24odCl7WHIodCksdGhpcy5hLndjKG5ldyBpeSh0KSl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmRjKCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEt3ZSh0aGlzLmEudmMoKS5LYygpKX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbixyO3RyeXtyZXR1cm4gTnkodGhpcyx0LCEwKX1jYXRjaChhKXtpZihhPWJzKGEpLERlKGEsNDgpKXtmb3Iocj10aGlzLmEudmMoKS5LYygpO3IuT2IoKTspaWYobj1sKHIuUGIoKSw0NCkseWQodCxuLm1kKCkpKXJldHVybiB0aGlzLmEuQmMobi5sZCgpKSwhMDtyZXR1cm4hMX1lbHNlIHRocm93IHVlKGEpfX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sSShkbiwiTWFwcy9WYWx1ZXMiLDk3MSksRCg5NzQsMSx7fSxpeSksaC5ZZD1mdW5jdGlvbih0LG4pe3RoaXMuYS5DZChuKX0sSShkbiwiTWFwcy9WYWx1ZXMvbGFtYmRhJDAkVHlwZSIsOTc0KSxEKDc1MiwyMDg1LFd3LEMzZSksaC54Yz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLl9iKHQpP3RoaXMuYS5jYyh0KTpudWxsfSxoLkJjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuX2IodCk/dGhpcy5hLmZjKHQpOm51bGx9LGguJGI9ZnVuY3Rpb24oKXt0aGlzLmEuJGIoKX0saC5fYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLl9iKHQpfSxoLkVjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBISSh0aGlzKX0saC5EYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkVjKCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmRjKCl9LGguZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmVjKCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmVjKCkuZ2MoKX0sSShkbiwiTXVsdGltYXBzL0FzTWFwIiw3NTIpLEQoMTEzNCwyMDY5LFRsLEhJKSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIGRobih0aGlzLmEuYS5lYygpLG5ldyBWSSh0aGlzKSl9LGguUmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLk1jPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBPMXQodGhpcyx0KT8obj1sKExmKGwodCw0NCkpLDQ0KSxydW4odGhpcy5hLG4ubGQoKSksITApOiExfSxJKGRuLCJNdWx0aW1hcHMvQXNNYXAvRW50cnlTZXQiLDExMzQpLEQoMTEzOCwxLHt9LFZJKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBadHQodGhpcyx0KX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LEkoZG4sIk11bHRpbWFwcy9Bc01hcC9FbnRyeVNldC8xIiwxMTM4KSxEKDU1MiwyMDg3LHs1NTI6MSw4NDk6MSwyMDoxLDMxOjEsMTY6MX0sa3opLGguJGI9ZnVuY3Rpb24oKXttVih0aGlzLmEpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBpWmUodGhpcy5hLHQpfSxoLkpjPWZ1bmN0aW9uKHQpe1hyKHQpLHRvKFpfKHRoaXMuYSksbmV3IG1rKHQpKX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgY18oWl8odGhpcy5hKS5hLmtjKCkpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIE5PKFpfKHRoaXMuYSkuTmMoKSxuZXcgZWUpfSxJKGRuLCJNdWx0aW1hcHMvS2V5cyIsNTUyKSxEKDExMzYsMSx7fSxlZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDQ0KS5sZCgpfSxJKGRuLCJNdWx0aW1hcHMvS2V5cy8wbWV0aG9kcmVmJGdldEtleSRUeXBlIiwxMTM2KSxEKDExMzUsNDk3LE9hLEFKZSksaC4kZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHk4KGwodCw0NCkpfSxJKGRuLCJNdWx0aW1hcHMvS2V5cy8xIiwxMTM1KSxEKDIwODgsMSx7NDI1OjF9KSxoLkZiPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBEZSh0LDUwNCk/KG49bCh0LDQyNSksbCh0aGlzLmEubWQoKSwxNikuZ2MoKT09bChuLmEubWQoKSwxNikuZ2MoKSYmeWQodGhpcy5hLmxkKCksbi5hLmxkKCkpKTohMX0saC5IYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuYS5sZCgpLCh0PT1udWxsPzA6ZXModCkpXmwodGhpcy5hLm1kKCksMTYpLmdjKCl9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdCxuO3JldHVybiBuPWpfKHRoaXMuYS5sZCgpKSx0PWwodGhpcy5hLm1kKCksMTYpLmdjKCksdD09MT9uOm4rIiB4ICIrdH0sSShkbiwiTXVsdGlzZXRzL0Fic3RyYWN0RW50cnkiLDIwODgpLEQoNTA0LDIwODgsezUwNDoxLDQyNToxfSx5OCksSShkbiwiTXVsdGltYXBzL0tleXMvMS8xIiw1MDQpLEQoMTEzNywxLGZyLG1rKSxoLkNkPWZ1bmN0aW9uKHQpe3RoaXMuYS5DZChsKHQsNDQpLmxkKCkpfSxJKGRuLCJNdWx0aW1hcHMvS2V5cy9sYW1iZGEkMSRUeXBlIiwxMTM3KSxEKDExNDAsMSxmcixpZSksaC5DZD1mdW5jdGlvbih0KXtCZG4obCh0LDQyNSkpfSxJKGRuLCJNdWx0aXNldC9sYW1iZGEkMCRUeXBlIiwxMTQwKSxEKDc1MywxLGZyLGtpZSksaC5DZD1mdW5jdGlvbih0KXt4d24odGhpcy5hLGwodCw0MjUpKX0sSShkbiwiTXVsdGlzZXQvbGFtYmRhJDEkVHlwZSIsNzUzKSxEKDExNDEsMSx7fSxvZSksSShkbiwiTXVsdGlzZXRzLzBtZXRob2RyZWYkYWRkJFR5cGUiLDExNDEpLEQoNzU0LDEse30scGUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIFZibihsKHQsNDI1KSl9LEkoZG4sIk11bHRpc2V0cy9sYW1iZGEkMSRUeXBlIiw3NTQpLEQoMjEwNiwxLHlQKSxJKGRuLCJSYW5nZUd3dFNlcmlhbGl6YXRpb25EZXBlbmRlbmNpZXMiLDIxMDYpLEQoNTIxLDIxMDYsezE3ODoxLDUyMToxLDM6MSw0NjoxfSxXOGUpLGguTGI9ZnVuY3Rpb24odCl7cmV0dXJuIENzdCh0aGlzLGwodCwzNCkpfSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBDc3QodGhpcyxsKHQsMzQpKX0saC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gRGUodCw1MjEpPyhuPWwodCw1MjEpLHJ4ZSh0aGlzLmEsbi5hKSYmcnhlKHRoaXMuYixuLmIpKTohMX0saC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuSGIoKSozMSt0aGlzLmIuSGIoKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBIY3QodGhpcy5hLHRoaXMuYil9LEkoZG4sIlJhbmdlIiw1MjEpLEQoNjU0LDIwOTcsblQsbzVlKSxoLmZkPWZ1bmN0aW9uKHQpe3JldHVybiBpYWUodGhpcy5iLHQpfSxoLlpkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gYWIodGhpcy5iLHQpfSxoLlBkPWZ1bmN0aW9uKHQpe3JldHVybiBpYWUodGhpcy5iLHQpfSxJKGRuLCJSZWd1bGFySW1tdXRhYmxlQXNMaXN0Iiw2NTQpLEQoNjU2LDIxMDUsblQsb29lKSxoLlJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sSShkbiwiUmVndWxhckltbXV0YWJsZUxpc3QiLDY1NiksRCg1NDgsNzMwLHJULFd3ZSxZd2UpLEkoZG4sIlJlZ3VsYXJJbW11dGFibGVNYXAiLDU0OCksRCg3MzEsNzE5LFN4LGszZSk7dmFyIFZTZTtJKGRuLCJSZWd1bGFySW1tdXRhYmxlU2V0Iiw3MzEpLEQoMjA3NCxxMSxUbCksaC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgTDVlKHRoaXMuYSx0aGlzLmIpfSxoLkZjPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguR2M9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC4kYj1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBRcil9LGguTWM9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0sSShkbiwiU2V0cy9TZXRWaWV3IiwyMDc0KSxEKDk3NiwyMDc0LFRsLEdaZSksaC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgTDVlKHRoaXMuYSx0aGlzLmIpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBBYWUodGhpcy5hLHQpJiZ0aGlzLmIuSGModCl9LGguSWM9ZnVuY3Rpb24odCl7cmV0dXJuIEVOKHRoaXMuYSx0KSYmdGhpcy5iLkljKHQpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIG1kdCh0aGlzLmIsdGhpcy5hKX0saC5MYz1mdW5jdGlvbigpe3JldHVybiBGaShuZXcgYm4obnVsbCxuZXcga24odGhpcy5hLDEpKSxuZXcgVHoodGhpcy5iKSl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4geU4odGhpcyl9LGguT2M9ZnVuY3Rpb24oKXtyZXR1cm4gRmkobmV3IGJuKG51bGwsbmV3IGtuKHRoaXMuYSwxKSksbmV3IEV6KHRoaXMuYikpfSxJKGRuLCJTZXRzLzIiLDk3NiksRCg5NzcsMSx0aSxFeiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLkhjKHQpfSxJKGRuLCJTZXRzLzIvMG1ldGhvZHJlZiRjb250YWlucyRUeXBlIiw5NzcpLEQoNzE0LDcxMyxlVCxMNWUpLGguWWI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ7Z3llKHRoaXMuYSk7KWlmKHQ9Y0EodGhpcy5hKSx0aGlzLmMuSGModCkpcmV0dXJuIHQ7cmV0dXJuIHRoaXMuZT0yLG51bGx9LEkoZG4sIlNldHMvMi8xIiw3MTQpLEQoOTc4LDEsdGksVHopLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYS5IYyh0KX0sSShkbiwiU2V0cy8yLzFtZXRob2RyZWYkY29udGFpbnMkVHlwZSIsOTc4KSxEKDYxNiwyMDczLHs2MTY6MSwzOjEsMjA6MSwxNjoxLDI3NzoxLDIxOjEsODc6MX0sb290KSxoLktkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC5MZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGguV2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLkpjPWZ1bmN0aW9uKHQpe3RoaXMuYS5KYyh0KX0saC5MYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuTGMoKX0saC5PYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2MoKX0sSShkbiwiU2V0cy9Vbm1vZGlmaWFibGVOYXZpZ2FibGVTZXQiLDYxNiksRCgyMDMxLDIwMzAsclQsaGF0KSxoLlZkPWZ1bmN0aW9uKCl7cmV0dXJuIHdkKCksbmV3IE84KHRoaXMuYSl9LGguQ2M9ZnVuY3Rpb24oKXtyZXR1cm4gd2QoKSxuZXcgTzgodGhpcy5hKX0saC54ZD1mdW5jdGlvbigpe3JldHVybiB3ZCgpLG5ldyBPOCh0aGlzLmEpfSxJKGRuLCJTaW5nbGV0b25JbW11dGFibGVCaU1hcCIsMjAzMSksRCg2NTcsMjEwNSxuVCxTYWUpLGguUmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxJKGRuLCJTaW5nbGV0b25JbW11dGFibGVMaXN0Iiw2NTcpLEQoMzYzLDIwNzksU3gsTzgpLGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHFJKHRoaXMuYSl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIFBpKHRoaXMuYSx0KX0saC5PZD1mdW5jdGlvbigpe3JldHVybiBuZXcgcUkodGhpcy5hKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiAxfSxJKGRuLCJTaW5nbGV0b25JbW11dGFibGVTZXQiLDM2MyksRCgxMTQ4LDEse30sYmUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxNTkpfSxJKGRuLCJTdHJlYW1zL2xhbWJkYSQwJFR5cGUiLDExNDgpLEQoMTE0OSwxLFFVLEN6KSxoLmRlPWZ1bmN0aW9uKCl7Wm1uKHRoaXMuYSl9LEkoZG4sIlN0cmVhbXMvbGFtYmRhJDEkVHlwZSIsMTE0OSksRCgxNzI1LDE3MjQsSm0sVWF0KSxoLlpiPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9dGhpcy5mLGwobCh0fHwodGhpcy5mPURlKHRoaXMuYywxMzkpP25ldyBxXyh0aGlzLGwodGhpcy5jLDEzOSkpOkRlKHRoaXMuYywxMzMpP25ldyBfTyh0aGlzLGwodGhpcy5jLDEzMykpOm5ldyBMayh0aGlzLHRoaXMuYykpLDEzMyksMTM5KX0saC5oYz1mdW5jdGlvbigpe3JldHVybiBuZXcgS3AodGhpcy5iKX0saC5wZD1mdW5jdGlvbigpe3JldHVybiBuZXcgS3AodGhpcy5iKX0saC5lYz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuaSxsKGwodHx8KHRoaXMuaT1EZSh0aGlzLmMsMTM5KT9uZXcgQWsodGhpcyxsKHRoaXMuYywxMzkpKTpEZSh0aGlzLmMsMTMzKT9uZXcgdE8odGhpcyxsKHRoaXMuYywxMzMpKTpuZXcgcTUodGhpcyx0aGlzLmMpKSw4NyksMjc3KX0saC5hYz1mdW5jdGlvbigpe3JldHVybiBEZSh0aGlzLmMsMTM5KT9uZXcgcV8odGhpcyxsKHRoaXMuYywxMzkpKTpEZSh0aGlzLmMsMTMzKT9uZXcgX08odGhpcyxsKHRoaXMuYywxMzMpKTpuZXcgTGsodGhpcyx0aGlzLmMpfSxoLmljPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsJiZ0aGlzLmEuTmUodCx0KSxuZXcgS3AodGhpcy5iKX0sSShkbiwiVHJlZU11bHRpbWFwIiwxNzI1KSxEKDgyLDEsezM6MSw4MjoxfSksaC5lZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEVycm9yKHQpfSxoLmZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZX0saC5nZT1mdW5jdGlvbigpe3ZhciB0LG4scjtmb3Iocj0odGhpcy5rPT1udWxsJiYodGhpcy5rPVdlKFQwZSxkdCw4MiwwLDAsMSkpLHRoaXMuayksbj1XZSh3YSxSbiwxLHIubGVuZ3RoLDUsMSksdD0wO3Q8ci5sZW5ndGg7dCsrKW5bdF09clt0XS5lO3JldHVybiBufSxoLmhlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0saC5pZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd9LGguamU9ZnVuY3Rpb24oKXtaY24odGhpcyxPYm4odGhpcy5lZShESCh0aGlzLHRoaXMuZykpKSksRFFlKHRoaXMpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIERIKHRoaXMsdGhpcy5pZSgpKX0saC5lPUZ3dCxoLmk9ITEsaC5uPSEwO3ZhciBUMGU9SShWYywiVGhyb3dhYmxlIiw4Mik7RCgxMDMsODIsezM6MSwxMDM6MSw4MjoxfSksSShWYywiRXhjZXB0aW9uIiwxMDMpLEQoNjMsMTAzLGxwLENtLEFjKSxJKFZjLCJSdW50aW1lRXhjZXB0aW9uIiw2MyksRCg2MDcsNjMsbHApLEkoVmMsIkpzRXhjZXB0aW9uIiw2MDcpLEQoODc1LDYwNyxscCksSShDUCwiSmF2YVNjcmlwdEV4Y2VwdGlvbkJhc2UiLDg3NSksRCg0ODYsODc1LHs0ODY6MSwzOjEsMTAzOjEsNjM6MSw4MjoxfSxVMHQpLGguaWU9ZnVuY3Rpb24oKXtyZXR1cm4gVzhuKHRoaXMpLHRoaXMuY30saC5rZT1mdW5jdGlvbigpe3JldHVybiBxZSh0aGlzLmIpPT09cWUoVVNlKT9udWxsOnRoaXMuYn07dmFyIFVTZTtJKHJFZSwiSmF2YVNjcmlwdEV4Y2VwdGlvbiIsNDg2KTt2YXIgdTZ0PUkockVlLCJKYXZhU2NyaXB0T2JqZWN0JCIsMCksQzBlO0QoMjA0NywxLHt9KSxJKHJFZSwiU2NoZWR1bGVyIiwyMDQ3KTt2YXIgYUs9MCxsNnQ9MCxvSz0tMTtEKDkwMiwyMDQ3LHt9LGFlKTt2YXIgR1NlO0koQ1AsIlNjaGVkdWxlckltcGwiLDkwMik7dmFyIFMwZTtEKDIwNTgsMSx7fSksSShDUCwiU3RhY2tUcmFjZUNyZWF0b3IvQ29sbGVjdG9yIiwyMDU4KSxEKDg3NiwyMDU4LHt9LG5lKSxoLmxlPWZ1bmN0aW9uKHQpe3ZhciBuPXt9LHI9W107dFtqbGVdPXI7Zm9yKHZhciBhPWFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyO2E7KXt2YXIgbz0oWGsoKSxhLm5hbWV8fChhLm5hbWU9TnduKGEudG9TdHJpbmcoKSkpKTtyLnB1c2gobyk7dmFyIGY9IjoiK28sZz1uW2ZdO2lmKGcpe3ZhciB3LEU7Zm9yKHc9MCxFPWcubGVuZ3RoO3c8RTt3KyspaWYoZ1t3XT09PWEpcmV0dXJufShnfHwobltmXT1bXSkpLnB1c2goYSksYT1hLmNhbGxlcn19LGgubWU9ZnVuY3Rpb24odCl7dmFyIG4scixhLG87Zm9yKGE9KFhrKCksdCYmdFtqbGVdP3RbamxlXTpbXSkscj1hLmxlbmd0aCxvPVdlKGFfZSxkdCwzMTksciwwLDEpLG49MDtuPHI7bisrKW9bbl09bmV3IFphZShhW25dLG51bGwsLTEpO3JldHVybiBvfSxJKENQLCJTdGFja1RyYWNlQ3JlYXRvci9Db2xsZWN0b3JMZWdhY3kiLDg3NiksRCgyMDU5LDIwNTgse30pLGgubGU9ZnVuY3Rpb24odCl7fSxoLm5lPWZ1bmN0aW9uKHQsbixyLGEpe3JldHVybiBuZXcgWmFlKG4sdCsiQCIrYSxyPDA/LTE6cil9LGgubWU9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnO2lmKG89eDduKHQpLGY9V2UoYV9lLGR0LDMxOSwwLDAsMSksbj0wLGE9by5sZW5ndGgsYT09MClyZXR1cm4gZjtmb3IoZz16dnQodGhpcyxvWzBdKSx2bihnLmQsUmxlKXx8KGZbbisrXT1nKSxyPTE7cjxhO3IrKylmW24rK109enZ0KHRoaXMsb1tyXSk7cmV0dXJuIGZ9LEkoQ1AsIlN0YWNrVHJhY2VDcmVhdG9yL0NvbGxlY3Rvck1vZGVybiIsMjA1OSksRCg4NzcsMjA1OSx7fSxzZSksaC5uZT1mdW5jdGlvbih0LG4scixhKXtyZXR1cm4gbmV3IFphZShuLHQsLTEpfSxJKENQLCJTdGFja1RyYWNlQ3JlYXRvci9Db2xsZWN0b3JNb2Rlcm5Ob1NvdXJjZU1hcCIsODc3KSxEKDEwNjQsMSx7fSksSShzRWUsJHd0LDEwNjQpLEQoNjI0LDEwNjQsezYyNDoxfSxYc3QpO3ZhciBLU2U7SShpaGUsJHd0LDYyNCksRCgyMTAxLDEse30pLEkoc0VlLHp3dCwyMTAxKSxEKDIxMDIsMjEwMSx7fSksSShpaGUsend0LDIxMDIpLEQoMTEyMCwxLHt9LGRlKTt2YXIgTkw7SShpaGUsIkxvY2FsZUluZm8iLDExMjApLEQoMjAyNywxLHt9LFgpLGguYT0wLEkoaWhlLCJUaW1lWm9uZSIsMjAyNyksRCgxMjkzLDIxMDIse30sZ2UpLEkoImNvbS5nb29nbGUuZ3d0LmkxOG4uY2xpZW50LmltcGwuY2xkciIsIkRhdGVUaW1lRm9ybWF0SW5mb0ltcGwiLDEyOTMpLEQoNDQzLDEsezQ0MzoxfSxBaXQpLGguYT0hMSxoLmI9MCxJKHNFZSwiRGF0ZVRpbWVGb3JtYXQvUGF0dGVyblBhcnQiLDQ0MyksRCgyMDYsMSxxd3QsUXosUjdlLEt5ZSksaC5GZD1mdW5jdGlvbih0KXtyZXR1cm4gQWJuKHRoaXMsbCh0LDIwNikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDIwNikmJmN3KFpjKHRoaXMucS5nZXRUaW1lKCkpLFpjKGwodCwyMDYpLnEuZ2V0VGltZSgpKSl9LGguSGI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1aYyh0aGlzLnEuZ2V0VGltZSgpKSxZcihtb2UodCx1Yih0LDMyKSkpfSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQsbixyO3JldHVybiByPS10aGlzLnEuZ2V0VGltZXpvbmVPZmZzZXQoKSx0PShyPj0wPyIrIjoiIikrKHIvNjB8MCksbj1JcShiLk1hdGguYWJzKHIpJTYwKSwoVmd0KCksRTZ0KVt0aGlzLnEuZ2V0RGF5KCldKyIgIitUNnRbdGhpcy5xLmdldE1vbnRoKCldKyIgIitJcSh0aGlzLnEuZ2V0RGF0ZSgpKSsiICIrSXEodGhpcy5xLmdldEhvdXJzKCkpKyI6IitJcSh0aGlzLnEuZ2V0TWludXRlcygpKSsiOiIrSXEodGhpcy5xLmdldFNlY29uZHMoKSkrIiBHTVQiK3QrbisiICIrdGhpcy5xLmdldEZ1bGxZZWFyKCl9O3ZhciBjSz1JKExyLCJEYXRlIiwyMDYpO0QoMjAxNSwyMDYscXd0LGRndCksaC5hPSExLGguYj0wLGguYz0wLGguZD0wLGguZT0wLGguZj0wLGguZz0hMSxoLmk9MCxoLmo9MCxoLms9MCxoLm49MCxoLm89MCxoLnA9MCxJKCJjb20uZ29vZ2xlLmd3dC5pMThuLnNoYXJlZC5pbXBsIiwiRGF0ZVJlY29yZCIsMjAxNSksRCgyMDY0LDEse30pLGgucGU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC5xZT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLnJlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGguc2U9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC50ZT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxJKEF4LCJKU09OVmFsdWUiLDIwNjQpLEQoMjIxLDIwNjQsezIyMToxfSwkcCxTeiksaC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwyMjEpP1c1ZSh0aGlzLmEsbCh0LDIyMSkuYSk6ITF9LGgub2U9ZnVuY3Rpb24oKXtyZXR1cm4gQmNufSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEY1ZSh0aGlzLmEpfSxoLnBlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdCxuLHI7Zm9yKHI9bmV3IFRoKCJbIiksbj0wLHQ9dGhpcy5hLmxlbmd0aDtuPHQ7bisrKW4+MCYmKHIuYSs9IiwiKSx3dShyLF95KHRoaXMsbikpO3JldHVybiByLmErPSJdIixyLmF9LEkoQXgsIkpTT05BcnJheSIsMjIxKSxEKDQ5MywyMDY0LHs0OTM6MX0samMpLGgub2U9ZnVuY3Rpb24oKXtyZXR1cm4gRmNufSxoLnFlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gSG4oKSwiIit0aGlzLmF9LGguYT0hMTt2YXIgaDZ0LGY2dDtJKEF4LCJKU09OQm9vbGVhbiIsNDkzKSxEKDk5Nyw2MyxscCxMSmUpLEkoQXgsIkpTT05FeGNlcHRpb24iLDk5NyksRCgxMDM2LDIwNjQse30sVyksaC5vZT1mdW5jdGlvbigpe3JldHVybiBSY259LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdWx9O3ZhciBkNnQ7SShBeCwiSlNPTk51bGwiLDEwMzYpLEQoMjYzLDIwNjQsezI2MzoxfSx2ayksaC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwyNjMpP3RoaXMuYT09bCh0LDI2MykuYTohMX0saC5vZT1mdW5jdGlvbigpe3JldHVybiBOY259LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gajgodGhpcy5hKX0saC5yZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSsiIn0saC5hPTAsSShBeCwiSlNPTk51bWJlciIsMjYzKSxEKDE5MCwyMDY0LHsxOTA6MX0sTTgsd2spLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTkwKT9XNWUodGhpcy5hLGwodCwxOTApLmEpOiExfSxoLm9lPWZ1bmN0aW9uKCl7cmV0dXJuIFBjbn0saC5IYj1mdW5jdGlvbigpe3JldHVybiBGNWUodGhpcy5hKX0saC5zZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKGc9bmV3IFRoKCJ7IiksdD0hMCxmPWFjZSh0aGlzLFdlKHp0LGR0LDIsMCw2LDEpKSxyPWYsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sdD90PSExOmcuYSs9Q28saGkoZyxzMnQobikpLGcuYSs9IjoiLHd1KGcsV2codGhpcyxuKSk7cmV0dXJuIGcuYSs9In0iLGcuYX0sSShBeCwiSlNPTk9iamVjdCIsMTkwKSxEKDYwNSxxMSxUbCxhc2UpLGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpJiZtdW4odGhpcy5hLGVpKHQpKX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcga3IobmV3IElsKHRoaXMuYikpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5sZW5ndGh9LEkoQXgsIkpTT05PYmplY3QvMSIsNjA1KTt2YXIgXzBlO0QoMjExLDIwNjQsezIxMToxfSx5eSksaC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwyMTEpP3ZuKHRoaXMuYSxsKHQsMjExKS5hKTohMX0saC5vZT1mdW5jdGlvbigpe3JldHVybiBPY259LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gczIodGhpcy5hKX0saC50ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHMydCh0aGlzLmEpfSxJKEF4LCJKU09OU3RyaW5nIiwyMTEpO3ZhciBOYixXU2UsZzZ0LFlTZSxYU2U7RCgyMDYwLDEsezUzMzoxfSksSShhRWUsIk91dHB1dFN0cmVhbSIsMjA2MCksRCgyMDYxLDIwNjAsezUzMzoxfSksSShhRWUsIkZpbHRlck91dHB1dFN0cmVhbSIsMjA2MSksRCg4NzgsMjA2MSx7NTMzOjF9LEZlKSxJKGFFZSwiUHJpbnRTdHJlYW0iLDg3OCksRCg0MjcsMSx7NDg0OjF9KSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sSShWYywiQWJzdHJhY3RTdHJpbmdCdWlsZGVyIiw0MjcpLEQoNTM4LDYzLGxwLHF6KSxJKFZjLCJBcml0aG1ldGljRXhjZXB0aW9uIiw1MzgpLEQoNzcsNjMsc2hlLF93ZSx0YyksSShWYywiSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiIsNzcpLEQoMzMzLDc3LHszOjEsMzMzOjEsMTAzOjEsNzc6MSw2MzoxLDgyOjF9LEJ3ZSx0M2UpLEkoVmMsIkFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiIsMzMzKSxEKDUzNyw2MyxscCxSaWUsQkplKSxJKFZjLCJBcnJheVN0b3JlRXhjZXB0aW9uIiw1MzcpLEQoMjk2LDgyLEh3dCxRaWUpLEkoVmMsIkVycm9yIiwyOTYpLEQoMjAwLDI5NixId3QsU3dlLHc2ZSksSShWYywiQXNzZXJ0aW9uRXJyb3IiLDIwMCksdDZ0PXszOjEsNDg1OjEsMzQ6MX07dmFyIFBiLFNULE5zPUkoVmMsIkJvb2xlYW4iLDQ4NSk7RCgyNDIsMSx7MzoxLDI0MjoxfSk7dmFyIFFTZTtJKFZjLCJOdW1iZXIiLDI0MiksRCgyMjIsMjQyLHszOjEsMjIyOjEsMzQ6MSwyNDI6MX0sU2kpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGd1bih0aGlzLGwodCwyMjIpKX0saC51ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMjIyKSYmbCh0LDIyMikuYT09dGhpcy5hfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0saC5hPTA7dmFyIGp4PUkoVmMsIkJ5dGUiLDIyMiksSlNlO0QoMTgwLDEsezM6MSwxODA6MSwzNDoxfSx5cyksaC5GZD1mdW5jdGlvbih0KXtyZXR1cm4gcHVuKHRoaXMsbCh0LDE4MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE4MCkmJmwodCwxODApLmE9PXRoaXMuYX0saC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLmEpfSxoLmE9MDt2YXIgWlNlLFBMPUkoVmMsIkNoYXJhY3RlciIsMTgwKSxlX2U7RCgyMTIsNjMsezM6MSwyMTI6MSwxMDM6MSw2MzoxLDgyOjF9LElRZSxrayksSShWYywiQ2xhc3NDYXN0RXhjZXB0aW9uIiwyMTIpLG42dD17MzoxLDM0OjEsMzQ1OjEsMjQyOjF9O3ZhciB0YT1JKFZjLCJEb3VibGUiLDM0NSk7RCgxNjEsMjQyLHszOjEsMzQ6MSwxNjE6MSwyNDI6MX0scGEsQXdlKSxoLkZkPWZ1bmN0aW9uKHQpe3JldHVybiBMbG4odGhpcyxsKHQsMTYxKSl9LGgudWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE2MSkmJmVpdCh0aGlzLmEsbCh0LDE2MSkuYSl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdWEodGhpcy5hKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0saC5hPTA7dmFyIF9UPUkoVmMsIkZsb2F0IiwxNjEpO0QoMzMsNjMsezM6MSwxMDM6MSwzMzoxLDYzOjEsODI6MX0sWUksWW4sTjB0KSxJKFZjLCJJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iLDMzKSxEKDczLDYzLGxwLHBsLG5jKSxJKFZjLCJJbGxlZ2FsU3RhdGVFeGNlcHRpb24iLDczKSxEKDE3LDI0Mix7MzoxLDM0OjEsMTc6MSwyNDI6MX0sQ3IpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGF5ZSh0aGlzLGwodCwxNykpfSxoLnVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNykmJmwodCwxNykuYT09dGhpcy5hfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0saC5hPTA7dmFyIHJvPUkoVmMsIkludGVnZXIiLDE3KSx0X2UscDZ0O0QoMTY4LDI0Mix7MzoxLDM0OjEsMTY4OjEsMjQyOjF9LE9yKSxoLkZkPWZ1bmN0aW9uKHQpe3JldHVybiBBbG4odGhpcyxsKHQsMTY4KSl9LGgudWU9ZnVuY3Rpb24oKXtyZXR1cm4gRm0odGhpcy5hKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNjgpJiZjdyhsKHQsMTY4KS5hLHRoaXMuYSl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gX2ZuKHRoaXMuYSl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iIitZXyh0aGlzLmEpfSxoLmE9MDt2YXIgcjM9SShWYywiTG9uZyIsMTY4KSxuX2U7RCgyMTQwLDEse30pLEQoMTkwNCw2MyxscCxGSmUpLEkoVmMsIk5lZ2F0aXZlQXJyYXlTaXplRXhjZXB0aW9uIiwxOTA0KSxEKDE2OSw2MDcsezM6MSwxMDM6MSwxNjk6MSw2MzoxLDgyOjF9LFM4LEQ4KSxoLmVlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVHlwZUVycm9yKHQpfSxJKFZjLCJOdWxsUG9pbnRlckV4Y2VwdGlvbiIsMTY5KTt2YXIgcl9lLEEwZSxiNnQsaV9lO0QoMTMwLDMzLHszOjEsMTAzOjEsMzM6MSwxMzA6MSw2MzoxLDgyOjF9LGdkKSxJKFZjLCJOdW1iZXJGb3JtYXRFeGNlcHRpb24iLDEzMCksRCgxOTEsMjQyLHszOjEsMzQ6MSwyNDI6MSwxOTE6MX0sV24pLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGJ1bih0aGlzLGwodCwxOTEpKX0saC51ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTkxKSYmbCh0LDE5MSkuYT09dGhpcy5hfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0saC5hPTA7dmFyIGkzPUkoVmMsIlNob3J0IiwxOTEpLHNfZTtEKDMxOSwxLHszOjEsMzE5OjF9LFphZSksaC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gRGUodCwzMTkpPyhuPWwodCwzMTkpLHRoaXMuYz09bi5jJiZ0aGlzLmQ9PW4uZCYmdGhpcy5hPT1uLmEmJnRoaXMuYj09bi5iKTohMX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBNTihoZShsZSh3YSwxKSxSbiwxLDUsW3B0KHRoaXMuYyksdGhpcy5hLHRoaXMuZCx0aGlzLmJdKSl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hKyIuIit0aGlzLmQrIigiKyh0aGlzLmIhPW51bGw/dGhpcy5iOiJVbmtub3duIFNvdXJjZSIpKyh0aGlzLmM+PTA/IjoiK3RoaXMuYzoiIikrIikifSxoLmM9MDt2YXIgYV9lPUkoVmMsIlN0YWNrVHJhY2VFbGVtZW50IiwzMTkpO3I2dD17MzoxLDQ4NDoxLDM0OjEsMjoxfTt2YXIgenQ9SShWYyxuRWUsMik7RCgxMTEsNDI3LHs0ODQ6MX0sVXAsaF8sQWYpLEkoVmMsIlN0cmluZ0J1ZmZlciIsMTExKSxEKDEwNCw0MjcsezQ4NDoxfSx0YixTNSxUaCksSShWYywiU3RyaW5nQnVpbGRlciIsMTA0KSxEKDcwMiw3NyxzaGUsZTNlKSxJKFZjLCJTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIiw3MDIpLEQoMjE0NSwxLHt9KTt2YXIgbTZ0O0QoNDgsNjMsezM6MSwxMDM6MSw2MzoxLDgyOjEsNDg6MX0sUXIsSHApLEkoVmMsIlVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIiw0OCksRCgyNDcsMjQyLHszOjEsMzQ6MSwyNDI6MSwyNDc6MX0sTk4saDNlKSxoLkZkPWZ1bmN0aW9uKHQpe3JldHVybiBGbXQodGhpcyxsKHQsMjQ3KSl9LGgudWU9ZnVuY3Rpb24oKXtyZXR1cm4gankoaHZ0KHRoaXMpKX0saC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gdGhpcz09PXQ/ITA6RGUodCwyNDcpPyhuPWwodCwyNDcpLHRoaXMuZT09bi5lJiZGbXQodGhpcyxuKT09MCk6ITF9LGguSGI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5iIT0wP3RoaXMuYjp0aGlzLmE8NTQ/KHQ9WmModGhpcy5mKSx0aGlzLmI9WXIodmEodCwtMSkpLHRoaXMuYj0zMyp0aGlzLmIrWXIodmEoYncodCwzMiksLTEpKSx0aGlzLmI9MTcqdGhpcy5iK3VhKHRoaXMuZSksdGhpcy5iKToodGhpcy5iPTE3KlgwdCh0aGlzLmMpK3VhKHRoaXMuZSksdGhpcy5iKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBodnQodGhpcyl9LGguYT0wLGguYj0wLGguZD0wLGguZT0wLGguZj0wO3ZhciB2NnQsbHYsb19lLGNfZSx1X2UsbF9lLGhfZSxmX2UsTDBlPUkoImphdmEubWF0aCIsIkJpZ0RlY2ltYWwiLDI0Nyk7RCg5MiwyNDIsezM6MSwzNDoxLDI0MjoxLDkyOjF9LFFnLHFvdCxJbSxRMXQsb2IpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIEsxdCh0aGlzLGwodCw5MikpfSxoLnVlPWZ1bmN0aW9uKCl7cmV0dXJuIGp5KERsZSh0aGlzLDApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gQzhlKHRoaXMsdCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gWDB0KHRoaXMpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIERsZSh0aGlzLDApfSxoLmI9LTIsaC5jPTAsaC5kPTAsaC5lPTA7dmFyIHc2dCx1Syx5NnQsTTBlLGxLLEJMLEE2PUkoImphdmEubWF0aCIsIkJpZ0ludGVnZXIiLDkyKSx4NnQsazZ0LCR4LEZMO0QoNDk4LDIwNjUsV3cpLGguJGI9ZnVuY3Rpb24oKXtObCh0aGlzKX0saC5fYj1mdW5jdGlvbih0KXtyZXR1cm4gSHUodGhpcyx0KX0saC51Yz1mdW5jdGlvbih0KXtyZXR1cm4gRDB0KHRoaXMsdCx0aGlzLmkpfHxEMHQodGhpcyx0LHRoaXMuZil9LGgudmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNyKHRoaXMpfSxoLnhjPWZ1bmN0aW9uKHQpe3JldHVybiBjcih0aGlzLHQpfSxoLnpjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGtpKHRoaXMsdCxuKX0saC5CYz1mdW5jdGlvbih0KXtyZXR1cm4gYXgodGhpcyx0KX0saC5nYz1mdW5jdGlvbigpe3JldHVybiBkXyh0aGlzKX0saC5nPTAsSShMciwiQWJzdHJhY3RIYXNoTWFwIiw0OTgpLEQoMjY3LHExLFRsLFNyKSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLiRiKCl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIHZjdCh0aGlzLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBxbSh0aGlzLmEpfSxoLk1jPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB2Y3QodGhpcyx0KT8obj1sKHQsNDQpLmxkKCksdGhpcy5hLkJjKG4pLCEwKTohMX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sSShMciwiQWJzdHJhY3RIYXNoTWFwL0VudHJ5U2V0IiwyNjcpLEQoMjY4LDEsT2EscW0pLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5QYj1mdW5jdGlvbigpe3JldHVybiBOdyh0aGlzKX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGguUWI9ZnVuY3Rpb24oKXtLbHQodGhpcyl9LGguYj0hMSxoLmQ9MCxJKExyLCJBYnN0cmFjdEhhc2hNYXAvRW50cnlTZXRJdGVyYXRvciIsMjY4KSxEKDQyNiwxLE9hLGtyKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gbHNlKHRoaXMpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIEk1ZSh0aGlzKX0saC5RYj1mdW5jdGlvbigpe3BoKHRoaXMpfSxoLmI9MCxoLmM9LTEsSShMciwiQWJzdHJhY3RMaXN0L0l0ZXJhdG9ySW1wbCIsNDI2KSxEKDk4LDQyNixsZyxVYSksaC5RYj1mdW5jdGlvbigpe3BoKHRoaXMpfSxoLlJiPWZ1bmN0aW9uKHQpe2J5KHRoaXMsdCl9LGguU2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iPjB9LGguVGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLlViPWZ1bmN0aW9uKCl7cmV0dXJuIG1yKHRoaXMuYj4wKSx0aGlzLmEuWGIodGhpcy5jPS0tdGhpcy5iKX0saC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmItMX0saC5XYj1mdW5jdGlvbih0KXtneSh0aGlzLmMhPS0xKSx0aGlzLmEuaGQodGhpcy5jLHQpfSxJKExyLCJBYnN0cmFjdExpc3QvTGlzdEl0ZXJhdG9ySW1wbCIsOTgpLEQoMjQ0LDU2LGlULFpwKSxoLmJkPWZ1bmN0aW9uKHQsbil7RXkodCx0aGlzLmIpLHRoaXMuYy5iZCh0aGlzLmErdCxuKSwrK3RoaXMuYn0saC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gU24odCx0aGlzLmIpLHRoaXMuYy5YYih0aGlzLmErdCl9LGguZ2Q9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIFNuKHQsdGhpcy5iKSxuPXRoaXMuYy5nZCh0aGlzLmErdCksLS10aGlzLmIsbn0saC5oZD1mdW5jdGlvbih0LG4pe3JldHVybiBTbih0LHRoaXMuYiksdGhpcy5jLmhkKHRoaXMuYSt0LG4pfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC5hPTAsaC5iPTAsSShMciwiQWJzdHJhY3RMaXN0L1N1Ykxpc3QiLDI0NCksRCgyNjYscTEsVGwsYnIpLGguJGI9ZnVuY3Rpb24oKXt0aGlzLmEuJGIoKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLl9iKHQpfSxoLktjPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9dGhpcy5hLnZjKCkuS2MoKSxuZXcgTWkodCl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYS5fYih0KT8odGhpcy5hLkJjKHQpLCEwKTohMX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sSShMciwiQWJzdHJhY3RNYXAvMSIsMjY2KSxEKDU0MSwxLE9hLE1pKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLk9iKCl9LGguUGI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1sKHRoaXMuYS5QYigpLDQ0KSx0LmxkKCl9LGguUWI9ZnVuY3Rpb24oKXt0aGlzLmEuUWIoKX0sSShMciwiQWJzdHJhY3RNYXAvMS8xIiw1NDEpLEQoMjMxLDMxLFd5LGdpKSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLiRiKCl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYS51Yyh0KX0saC5LYz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuYS52YygpLktjKCksbmV3IGZzKHQpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxJKExyLCJBYnN0cmFjdE1hcC8yIiwyMzEpLEQoMzAxLDEsT2EsZnMpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2IoKX0saC5QYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PWwodGhpcy5hLlBiKCksNDQpLHQubWQoKX0saC5RYj1mdW5jdGlvbigpe3RoaXMuYS5RYigpfSxJKExyLCJBYnN0cmFjdE1hcC8yLzEiLDMwMSksRCg0OTQsMSx7NDk0OjEsNDQ6MX0pLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsNDQpPyhuPWwodCw0NCksSmModGhpcy5kLG4ubGQoKSkmJkpjKHRoaXMuZSxuLm1kKCkpKTohMX0saC5sZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGgubWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFI1KHRoaXMuZCleUjUodGhpcy5lKX0saC5uZD1mdW5jdGlvbih0KXtyZXR1cm4gWnllKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kKyI9Iit0aGlzLmV9LEkoTHIsIkFic3RyYWN0TWFwL0Fic3RyYWN0RW50cnkiLDQ5NCksRCgzOTcsNDk0LHs0OTQ6MSwzOTc6MSw0NDoxfSxjcSksSShMciwiQWJzdHJhY3RNYXAvU2ltcGxlRW50cnkiLDM5NyksRCgyMDgyLDEsY2hlKSxoLkZiPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBEZSh0LDQ0KT8obj1sKHQsNDQpLEpjKHRoaXMubGQoKSxuLmxkKCkpJiZKYyh0aGlzLm1kKCksbi5tZCgpKSk6ITF9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gUjUodGhpcy5sZCgpKV5SNSh0aGlzLm1kKCkpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGQoKSsiPSIrdGhpcy5tZCgpfSxJKExyLE13dCwyMDgyKSxEKDIwOTAsMjA2NSxaa2UpLGguWGM9ZnVuY3Rpb24odCl7cmV0dXJuIHJzZSh0aGlzLkVlKHQpKX0saC50Yz1mdW5jdGlvbih0KXtyZXR1cm4gVHV0KHRoaXMsdCl9LGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuIGU0ZSh0aGlzLHQpfSxoLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBScyh0aGlzKX0saC5UYz1mdW5jdGlvbigpe3JldHVybiBSc3QodGhpcy5HZSgpKX0saC5ZYz1mdW5jdGlvbih0KXtyZXR1cm4gcnNlKHRoaXMuSGUodCkpfSxoLnhjPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPXQsaGModGhpcy5GZShuKSl9LGguJGM9ZnVuY3Rpb24odCl7cmV0dXJuIHJzZSh0aGlzLkllKHQpKX0saC5lYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRnModGhpcyl9LGguVmM9ZnVuY3Rpb24oKXtyZXR1cm4gUnN0KHRoaXMuSmUoKSl9LGguX2M9ZnVuY3Rpb24odCl7cmV0dXJuIHJzZSh0aGlzLktlKHQpKX0sSShMciwiQWJzdHJhY3ROYXZpZ2FibGVNYXAiLDIwOTApLEQoNjI5LHExLFRsLFJzKSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDQ0KSYmVHV0KHRoaXMuYixsKHQsNDQpKX0saC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuRGUoKX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gRGUodCw0NCk/KG49bCh0LDQ0KSx0aGlzLmIuTGUobikpOiExfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5nYygpfSxJKExyLCJBYnN0cmFjdE5hdmlnYWJsZU1hcC9FbnRyeVNldCIsNjI5KSxEKDExNDYscTEsZUVlLEZzKSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhcSh0aGlzKX0saC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBlNGUodGhpcy5hLHQpfSxoLktjPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9dGhpcy5hLnZjKCkuYi5EZSgpLG5ldyB4cyh0KX0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gZTRlKHRoaXMuYSx0KT8odGhpcy5hLkJjKHQpLCEwKTohMX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sSShMciwiQWJzdHJhY3ROYXZpZ2FibGVNYXAvTmF2aWdhYmxlS2V5U2V0IiwxMTQ2KSxEKDExNDcsMSxPYSx4cyksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIGxzZSh0aGlzLmEuYSl9LGguUGI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1vcnQodGhpcy5hKSx0LmxkKCl9LGguUWI9ZnVuY3Rpb24oKXtkaXQodGhpcy5hKX0sSShMciwiQWJzdHJhY3ROYXZpZ2FibGVNYXAvTmF2aWdhYmxlS2V5U2V0LzEiLDExNDcpLEQoMjEwMywzMSxXeSksaC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gSzgoJEUodGhpcyx0KSxhVCksITB9LGguR2M9ZnVuY3Rpb24odCl7cmV0dXJuIG5yKHQpLEJPKHQhPXRoaXMsIkNhbid0IGFkZCBhIHF1ZXVlIHRvIGl0c2VsZiIpLEthKHRoaXMsdCl9LGguJGI9ZnVuY3Rpb24oKXtmb3IoO0tvZSh0aGlzKSE9bnVsbDspO30sSShMciwiQWJzdHJhY3RRdWV1ZSIsMjEwMyksRCgzMTAsMzEsezQ6MSwyMDoxLDMxOjEsMTY6MX0sejUsZGN0KSxoLkZjPWZ1bmN0aW9uKHQpe3JldHVybiBpNmUodGhpcyx0KSwhMH0saC4kYj1mdW5jdGlvbigpe2w2ZSh0aGlzKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gWmZ0KG5ldyBuQSh0aGlzKSx0KX0saC5kYz1mdW5jdGlvbigpe3JldHVybiBsXyh0aGlzKX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgbkEodGhpcyl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIHcybihuZXcgbkEodGhpcyksdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLXRoaXMuYiZ0aGlzLmEubGVuZ3RoLTF9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMjcyKX0saC5RYz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj10aGlzLmMtdGhpcy5iJnRoaXMuYS5sZW5ndGgtMSx0Lmxlbmd0aDxuJiYodD1WeihuZXcgQXJyYXkobiksdCkpLGZmdCh0aGlzLHQsbiksdC5sZW5ndGg+biYmVHModCxuLG51bGwpLHR9LGguYj0wLGguYz0wLEkoTHIsIkFycmF5RGVxdWUiLDMxMCksRCg0NTksMSxPYSxuQSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSE9dGhpcy5ifSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIEZWKHRoaXMpfSxoLlFiPWZ1bmN0aW9uKCl7WWh0KHRoaXMpfSxoLmE9MCxoLmI9MCxoLmM9LTEsSShMciwiQXJyYXlEZXF1ZS9JdGVyYXRvckltcGwiLDQ1OSksRCgxMyw1NixVd3QsYnQsQnUsT2wpLGguYmQ9ZnVuY3Rpb24odCxuKXtwdyh0aGlzLHQsbil9LGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIHZ0KHRoaXMsdCl9LGguY2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gUTdlKHRoaXMsdCxuKX0saC5HYz1mdW5jdGlvbih0KXtyZXR1cm4gcmEodGhpcyx0KX0saC4kYj1mdW5jdGlvbigpe2F5KHRoaXMuYywwKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gZ2ModGhpcyx0LDApIT0tMX0saC5KYz1mdW5jdGlvbih0KXtWdSh0aGlzLHQpfSxoLlhiPWZ1bmN0aW9uKHQpe3JldHVybiBqdCh0aGlzLHQpfSxoLmRkPWZ1bmN0aW9uKHQpe3JldHVybiBnYyh0aGlzLHQsMCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmxlbmd0aD09MH0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRyh0aGlzKX0saC5nZD1mdW5jdGlvbih0KXtyZXR1cm4gdDIodGhpcyx0KX0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gYWwodGhpcyx0KX0saC5jZT1mdW5jdGlvbih0LG4pe0JvdCh0aGlzLHQsbil9LGguaGQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gcmYodGhpcyx0LG4pfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5sZW5ndGh9LGguamQ9ZnVuY3Rpb24odCl7VnModGhpcyx0KX0saC5QYz1mdW5jdGlvbigpe3JldHVybiBlSCh0aGlzLmMpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiBqMSh0aGlzLHQpfTt2YXIgY09uPUkoTHIsIkFycmF5TGlzdCIsMTMpO0QoNywxLE9hLEcpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiBMYyh0aGlzKX0saC5QYj1mdW5jdGlvbigpe3JldHVybiByZSh0aGlzKX0saC5RYj1mdW5jdGlvbigpe1FfKHRoaXMpfSxoLmE9MCxoLmI9LTEsSShMciwiQXJyYXlMaXN0LzEiLDcpLEQoMjExMixiLkZ1bmN0aW9uLHt9LFBlKSxoLk1lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFlpKHQsbil9LEQoMTUxLDU2LEd3dCxJbCksaC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gWGh0KHRoaXMsdCkhPS0xfSxoLkpjPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvO2Zvcihucih0KSxyPXRoaXMuYSxhPTAsbz1yLmxlbmd0aDthPG87KythKW49clthXSx0LkNkKG4pfSxoLlhiPWZ1bmN0aW9uKHQpe3JldHVybiBKaXQodGhpcyx0KX0saC5oZD1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiByPShTbih0LHRoaXMuYS5sZW5ndGgpLHRoaXMuYVt0XSksVHModGhpcy5hLHQsbikscn0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEubGVuZ3RofSxoLmpkPWZ1bmN0aW9uKHQpe0xhZSh0aGlzLmEsdGhpcy5hLmxlbmd0aCx0KX0saC5QYz1mdW5jdGlvbigpe3JldHVybiBvZHQodGhpcyxXZSh3YSxSbiwxLHRoaXMuYS5sZW5ndGgsNSwxKSl9LGguUWM9ZnVuY3Rpb24odCl7cmV0dXJuIG9kdCh0aGlzLHQpfSxJKExyLCJBcnJheXMvQXJyYXlMaXN0IiwxNTEpO3ZhciBfbyxtZyxoSztEKDk1Myw1NixHd3QsamUpLGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuITF9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIHJ5ZSh0KX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBDbigpLE1rKCksQVR9LGguZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gQ24oKSxNaygpLEFUfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LEkoTHIsIkNvbGxlY3Rpb25zL0VtcHR5TGlzdCIsOTUzKSxEKDk1NCwxLGxnLEllKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUmI9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5PYj1mdW5jdGlvbigpe3JldHVybiExfSxoLlNiPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguUGI9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgX2MpfSxoLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGguVWI9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgX2MpfSxoLlZiPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGguUWI9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcGwpfSxoLldiPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBwbCl9O3ZhciBBVDtJKExyLCJDb2xsZWN0aW9ucy9FbXB0eUxpc3RJdGVyYXRvciIsOTU0KSxEKDk1NiwyMDY1LHJULFNlKSxoLl9iPWZ1bmN0aW9uKHQpe3JldHVybiExfSxoLnVjPWZ1bmN0aW9uKHQpe3JldHVybiExfSxoLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIENuKCksaEt9LGgueGM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LGguZWM9ZnVuY3Rpb24oKXtyZXR1cm4gQ24oKSxoS30saC5nYz1mdW5jdGlvbigpe3JldHVybiAwfSxoLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIENuKCksX299LEkoTHIsIkNvbGxlY3Rpb25zL0VtcHR5TWFwIiw5NTYpLEQoOTU1LHExLFN4LENlKSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiExfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIENuKCksTWsoKSxBVH0saC5nYz1mdW5jdGlvbigpe3JldHVybiAwfSxJKExyLCJDb2xsZWN0aW9ucy9FbXB0eVNldCIsOTU1KSxEKDYwOCw1Nix7MzoxLDIwOjEsMzE6MSw1NjoxLDE2OjEsMTU6MX0sRGEpLGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIEpjKHRoaXMuYSx0KX0saC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gU24odCwxKSx0aGlzLmF9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gMX0sSShMciwiQ29sbGVjdGlvbnMvU2luZ2xldG9uTGlzdCIsNjA4KSxEKDM4NCwxLE93dCwkYSksaC5KYz1mdW5jdGlvbih0KXt0byh0aGlzLHQpfSxoLkxjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBibihudWxsLHRoaXMuTmMoKSl9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMCl9LGguT2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJuKG51bGwsdGhpcy5OYygpKX0saC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gb1plKCl9LGguR2M9ZnVuY3Rpb24odCl7cmV0dXJuIGNaZSgpfSxoLiRiPWZ1bmN0aW9uKCl7dVplKCl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIG5PKHRoaXMsdCl9LGguSWM9ZnVuY3Rpb24odCl7cmV0dXJuIFhaZSh0aGlzLHQpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5kYygpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB5byh0aGlzLmIuS2MoKSl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIGxaZSgpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5nYygpfSxoLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5QYygpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiBRWmUodGhpcyx0KX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB4Yyh0aGlzLmIpfSxJKExyLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVDb2xsZWN0aW9uIiwzODQpLEQoMzgzLDEsT2EseW8pLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuT2IoKX0saC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuUGIoKX0saC5RYj1mdW5jdGlvbigpe2haZSgpfSxJKExyLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVDb2xsZWN0aW9uSXRlcmF0b3IiLDM4MyksRCg1NDAsMzg0LEt3dCxqcSksaC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcga24odGhpcywxNil9LGguYmQ9ZnVuY3Rpb24odCxuKXt0aHJvdyB1ZShuZXcgUXIpfSxoLmNkPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gUGkodGhpcy5hLHQpfSxoLlhiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuWGIodCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gZXModGhpcy5hKX0saC5kZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLmRkKHQpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kYygpfSxoLmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBNeWUodGhpcy5hLmZkKDApKX0saC5mZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE15ZSh0aGlzLmEuZmQodCkpfSxoLmdkPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguaGQ9ZnVuY3Rpb24odCxuKXt0aHJvdyB1ZShuZXcgUXIpfSxoLmpkPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGgua2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3IGpxKHRoaXMuYS5rZCh0LG4pKX0sSShMciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlTGlzdCIsNTQwKSxEKDcwNSwzODMsbGcsTXllKSxoLlFiPWZ1bmN0aW9uKCl7aFplKCl9LGguUmI9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuU2IoKX0saC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuVGIoKX0saC5VYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuVWIoKX0saC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuVmIoKX0saC5XYj1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxJKExyLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVMaXN0SXRlcmF0b3IiLDcwNSksRCg2MDksMSxXdyx0ciksaC53Yz1mdW5jdGlvbih0KXttQSh0aGlzLHQpfSxoLnljPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gcWNlKHRoaXMsdCxuLHIpfSxoLiRiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5fYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jLl9iKHQpfSxoLnVjPWZ1bmN0aW9uKHQpe3JldHVybiBaWmUodGhpcyx0KX0saC52Yz1mdW5jdGlvbigpe3JldHVybiBLayh0aGlzKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gZWV0KHRoaXMsdCl9LGgueGM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYy54Yyh0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBlcyh0aGlzLmMpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5kYygpfSxoLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIG1hdCh0aGlzKX0saC56Yz1mdW5jdGlvbih0LG4pe3Rocm93IHVlKG5ldyBRcil9LGguQmM9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuZ2MoKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB4Yyh0aGlzLmMpfSxoLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIGJhdCh0aGlzKX0sSShMciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlTWFwIiw2MDkpLEQoMzk2LDM4NCxCbGUsRWspLGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIFBpKHRoaXMuYix0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBlcyh0aGlzLmIpfSxJKExyLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVTZXQiLDM5NiksRCg5NTcsMzk2LEJsZSx6SmUpLGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIEpaZSh0aGlzLHQpfSxoLkljPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmIuSWModCl9LGguS2M9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmIuS2MoKSxuZXcgQm8odCl9LGguUGM9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmIuUGMoKSxZY3QodCx0Lmxlbmd0aCksdH0saC5RYz1mdW5jdGlvbih0KXtyZXR1cm4gdG90KHRoaXMsdCl9LEkoTHIsIkNvbGxlY3Rpb25zL1VubW9kaWZpYWJsZU1hcC9Vbm1vZGlmaWFibGVFbnRyeVNldCIsOTU3KSxEKDk1OCwxLE9hLEJvKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGxyKGwodGhpcy5hLlBiKCksNDQpKX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2IoKX0saC5RYj1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBRcil9LEkoTHIsIkNvbGxlY3Rpb25zL1VubW9kaWZpYWJsZU1hcC9Vbm1vZGlmaWFibGVFbnRyeVNldC8xIiw5NTgpLEQoNzAzLDEsY2hlLGxyKSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuRmIodCl9LGgubGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmxkKCl9LGgubWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLm1kKCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLkhiKCl9LGgubmQ9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB4Yyh0aGlzLmEpfSxJKExyLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVNYXAvVW5tb2RpZmlhYmxlRW50cnlTZXQvVW5tb2RpZmlhYmxlRW50cnkiLDcwMyksRCg2MTAsNTQwLHsyMDoxLDE2OjEsMTU6MSw1OToxfSxlc2UpLEkoTHIsIkNvbGxlY3Rpb25zL1VubW9kaWZpYWJsZVJhbmRvbUFjY2Vzc0xpc3QiLDYxMCksRCg3MDQsMzk2LE53dCxEeWUpLGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGFxKHRoaXMpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBQaSh0aGlzLmEsdCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gZXModGhpcy5hKX0sSShMciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlU29ydGVkU2V0Iiw3MDQpLEQoODU4LDEsdWhlLGtlKSxoLk5lPWZ1bmN0aW9uKHQsbil7dmFyIHI7cmV0dXJuIHI9S2N0KGwodCwxMiksbChuLDEyKSksciE9MD9yOlNtdChsKHQsMTIpLGwobiwxMikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoTHIsIkNvbXBhcmF0b3IvbGFtYmRhJDAkVHlwZSIsODU4KTt2YXIgZF9lLEQwZSxnX2U7RCg3NjksMSx1aGUsS2UpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gUmRuKGwodCwzNCksbChuLDM0KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIEV3KCksZ19lfSxJKExyLCJDb21wYXJhdG9ycy9OYXR1cmFsT3JkZXJDb21wYXJhdG9yIiw3NjkpLEQoMTIyNiwxLHVoZSxGdCksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBGZG4obCh0LDM0KSxsKG4sMzQpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gRXcoKSxEMGV9LEkoTHIsIkNvbXBhcmF0b3JzL1JldmVyc2VOYXR1cmFsT3JkZXJDb21wYXJhdG9yIiwxMjI2KSxEKDUyLDEsdWhlLFZ0KSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLmEuTmUobix0KX0saC5PZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LEkoTHIsIkNvbXBhcmF0b3JzL1JldmVyc2VkQ29tcGFyYXRvciIsNTIpLEQoMTc1LDYzLGxwLFhoKSxJKExyLCJDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uIiwxNzUpO3ZhciBFNnQsVDZ0O0QoMTk0OCwxLExQLE5lKSxoLlBlPWZ1bmN0aW9uKHQpe00xdCh0aGlzLHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkRvdWJsZVN1bW1hcnlTdGF0aXN0aWNzW2NvdW50ID0gIitZXyh0aGlzLmEpKyIsIGF2ZyA9ICIrKGhzZSh0aGlzLmEsMCk/VDZlKHRoaXMpL0ZtKHRoaXMuYSk6MCkrIiwgbWluID0gIit0aGlzLmMrIiwgbWF4ID0gIit0aGlzLmIrIiwgc3VtID0gIitUNmUodGhpcykrIl0ifSxoLmE9MCxoLmI9aWEsaC5jPWdzLGguZD0wLGguZT0wLGguZj0wLEkoTHIsIkRvdWJsZVN1bW1hcnlTdGF0aXN0aWNzIiwxOTQ4KSxEKDE4NjgsNjMsbHAsT1FlKSxJKExyLCJFbXB0eVN0YWNrRXhjZXB0aW9uIiwxODY4KSxEKDQ2MSwyMDY1LFd3LExBKSxoLnpjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ0ZSh0aGlzLHQsbil9LGguJGI9ZnVuY3Rpb24oKXtpYXQodGhpcyl9LGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuIHZldCh0aGlzLHQpfSxoLnVjPWZ1bmN0aW9uKHQpe3ZhciBuLHI7Zm9yKHI9bmV3IFA4KHRoaXMuYSk7ci5hPHIuYy5hLmxlbmd0aDspaWYobj1jQShyKSxKYyh0LHRoaXMuYltuLmddKSlyZXR1cm4hMDtyZXR1cm4hMX0saC52Yz1mdW5jdGlvbigpe3JldHVybiBuZXcgSHModGhpcyl9LGgueGM9ZnVuY3Rpb24odCl7cmV0dXJuIFFvKHRoaXMsdCl9LGguQmM9ZnVuY3Rpb24odCl7cmV0dXJuIFk1ZSh0aGlzLHQpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5jfSxJKExyLCJFbnVtTWFwIiw0NjEpLEQoMTM0MCxxMSxUbCxIcyksaC4kYj1mdW5jdGlvbigpe2lhdCh0aGlzLmEpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB3Y3QodGhpcyx0KX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgcnN0KHRoaXMuYSl9LGguTWM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHdjdCh0aGlzLHQpPyhuPWwodCw0NCkubGQoKSxZNWUodGhpcy5hLG4pLCEwKTohMX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYS5jfSxJKExyLCJFbnVtTWFwL0VudHJ5U2V0IiwxMzQwKSxEKDEzNDEsMSxPYSxyc3QpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmI9Y0EodGhpcy5hKSxuZXcgeWV0KHRoaXMuYyx0aGlzLmIpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIGd5ZSh0aGlzLmEpfSxoLlFiPWZ1bmN0aW9uKCl7Z3koISF0aGlzLmIpLFk1ZSh0aGlzLmMsdGhpcy5iKSx0aGlzLmI9bnVsbH0sSShMciwiRW51bU1hcC9FbnRyeVNldEl0ZXJhdG9yIiwxMzQxKSxEKDEzNDIsMjA4MixjaGUseWV0KSxoLmxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5tZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuYlt0aGlzLmEuZ119LGgubmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFI0ZSh0aGlzLmIuYix0aGlzLmEuZyx0KX0sSShMciwiRW51bU1hcC9NYXBFbnRyeSIsMTM0MiksRCgxODEscTEsezIwOjEsMzE6MSwxNjoxLDE4MToxLDIxOjF9KTt2YXIgQzZ0PUkoTHIsIkVudW1TZXQiLDE4MSk7RCgxNjIsMTgxLHsyMDoxLDMxOjEsMTY6MSwxODE6MSwxNjI6MSwyMToxfSxaaCksaC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gZDAodGhpcyxsKHQsMjIpKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gQWFlKHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFA4KHRoaXMpfSxoLk1jPWZ1bmN0aW9uKHQpe3JldHVybiBmc3QodGhpcyx0KX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGguYz0wLEkoTHIsIkVudW1TZXQvRW51bVNldEltcGwiLDE2MiksRCgzNTYsMSxPYSxQOCksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIGNBKHRoaXMpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIGd5ZSh0aGlzKX0saC5RYj1mdW5jdGlvbigpe2d5KHRoaXMuYiE9LTEpLFRzKHRoaXMuYy5iLHRoaXMuYixudWxsKSwtLXRoaXMuYy5jLHRoaXMuYj0tMX0saC5hPS0xLGguYj0tMSxJKExyLCJFbnVtU2V0L0VudW1TZXRJbXBsL0l0ZXJhdG9ySW1wbCIsMzU2KSxEKDQ1LDQ5OCxtNixQcixOOCxqdHQpLGguQmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gcWUodCk9PT1xZShuKXx8dCE9bnVsbCYmUGkodCxuKX0saC5DZT1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gdD09bnVsbD8wOihuPWVzKHQpLG58MCl9LEkoTHIsIkhhc2hNYXAiLDQ1KSxEKDQ5LHExLG9FZSxLcyxLeixVXyksaC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gbmEodGhpcyx0KX0saC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBXMCh0aGlzLHQpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpPT0wfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5lYygpLktjKCl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIHd5ZSh0aGlzLHQpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfTt2YXIgdU9uPUkoTHIsIkhhc2hTZXQiLDQ5KTtEKDE4OTcsMSxrUCxnbiksaC5EZD1mdW5jdGlvbih0KXskZnQodGhpcyx0KX0saC5JYj1mdW5jdGlvbigpe3JldHVybiJJbnRTdW1tYXJ5U3RhdGlzdGljc1tjb3VudCA9ICIrWV8odGhpcy5hKSsiLCBhdmcgPSAiKyhoc2UodGhpcy5hLDApP0ZtKHRoaXMuZCkvRm0odGhpcy5hKTowKSsiLCBtaW4gPSAiK3RoaXMuYysiLCBtYXggPSAiK3RoaXMuYisiLCBzdW0gPSAiK1lfKHRoaXMuZCkrIl0ifSxoLmE9MCxoLmI9bG8saC5jPUlpLGguZD0wLEkoTHIsIkludFN1bW1hcnlTdGF0aXN0aWNzIiwxODk3KSxEKDEwNjIsMSxoZyxybnQpLGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgTzZlKHRoaXMpfSxoLmM9MCxJKExyLCJJbnRlcm5hbEhhc2hDb2RlTWFwIiwxMDYyKSxEKDcyNiwxLE9hLE82ZSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZD10aGlzLmFbdGhpcy5jKytdLHRoaXMuZH0saC5PYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmM8dGhpcy5hLmxlbmd0aD8hMDoodD10aGlzLmIubmV4dCgpLHQuZG9uZT8hMToodGhpcy5hPXQudmFsdWVbMV0sdGhpcy5jPTAsITApKX0saC5RYj1mdW5jdGlvbigpe1M5ZSh0aGlzLmUsdGhpcy5kLmxkKCkpLHRoaXMuYyE9MCYmLS10aGlzLmN9LGguYz0wLGguZD1udWxsLEkoTHIsIkludGVybmFsSGFzaENvZGVNYXAvMSIsNzI2KTt2YXIgUzZ0O0QoMTA2MCwxLGhnLGludCksaC5KYz1mdW5jdGlvbih0KXt0byh0aGlzLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBoNmUodGhpcyl9LGguYz0wLGguZD0wLEkoTHIsIkludGVybmFsU3RyaW5nTWFwIiwxMDYwKSxEKDcyNSwxLE9hLGg2ZSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYz10aGlzLmEsdGhpcy5hPXRoaXMuYi5uZXh0KCksbmV3IGxpdCh0aGlzLmQsdGhpcy5jLHRoaXMuZC5kKX0saC5PYj1mdW5jdGlvbigpe3JldHVybiF0aGlzLmEuZG9uZX0saC5RYj1mdW5jdGlvbigpe1VmdCh0aGlzLmQsdGhpcy5jLnZhbHVlWzBdKX0sSShMciwiSW50ZXJuYWxTdHJpbmdNYXAvMSIsNzI1KSxEKDEwNjEsMjA4MixjaGUsbGl0KSxoLmxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi52YWx1ZVswXX0saC5tZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZCE9dGhpcy5jP3lfKHRoaXMuYSx0aGlzLmIudmFsdWVbMF0pOnRoaXMuYi52YWx1ZVsxXX0saC5uZD1mdW5jdGlvbih0KXtyZXR1cm4gQncodGhpcy5hLHRoaXMuYi52YWx1ZVswXSx0KX0saC5jPTAsSShMciwiSW50ZXJuYWxTdHJpbmdNYXAvMiIsMTA2MSksRCgyMTUsNDUsbTYsZTIsSTZlKSxoLiRiPWZ1bmN0aW9uKCl7QnJ0KHRoaXMpfSxoLl9iPWZ1bmN0aW9uKHQpe3JldHVybiB3ZXQodGhpcyx0KX0saC51Yz1mdW5jdGlvbih0KXt2YXIgbjtmb3Iobj10aGlzLmQuYTtuIT10aGlzLmQ7KXtpZihKYyhuLmUsdCkpcmV0dXJuITA7bj1uLmF9cmV0dXJuITF9LGgudmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNjKHRoaXMpfSxoLnhjPWZ1bmN0aW9uKHQpe3JldHVybiBCMSh0aGlzLHQpfSxoLnpjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGgyKHRoaXMsdCxuKX0saC5CYz1mdW5jdGlvbih0KXtyZXR1cm4gVmx0KHRoaXMsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gZF8odGhpcy5lKX0saC5jPSExLEkoTHIsIkxpbmtlZEhhc2hNYXAiLDIxNSksRCg0MDAsMzk3LHs0OTQ6MSwzOTc6MSw0MDA6MSw0NDoxfSxzcnQsQTRlKSxJKExyLCJMaW5rZWRIYXNoTWFwL0NoYWluRW50cnkiLDQwMCksRCg3MTUscTEsVGwsU2MpLGguJGI9ZnVuY3Rpb24oKXtCcnQodGhpcy5hKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4geWN0KHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHk1ZSh0aGlzKX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4geWN0KHRoaXMsdCk/KG49bCh0LDQ0KS5sZCgpLFZsdCh0aGlzLmEsbiksITApOiExfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIGRfKHRoaXMuYS5lKX0sSShMciwiTGlua2VkSGFzaE1hcC9FbnRyeVNldCIsNzE1KSxEKDcxNiwxLE9hLHk1ZSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIFlsdCh0aGlzKX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMhPXRoaXMuZC5hLmR9LGguUWI9ZnVuY3Rpb24oKXtneSghIXRoaXMuYSkscGFlKHRoaXMuZC5hLmUuZyx0aGlzLmIpLCQ0ZSh0aGlzLmEpLGF4KHRoaXMuZC5hLmUsdGhpcy5hLmQpLHRoaXMuYj10aGlzLmQuYS5lLmcsdGhpcy5hPW51bGx9LGguYj0wLEkoTHIsIkxpbmtlZEhhc2hNYXAvRW50cnlTZXQvRW50cnlJdGVyYXRvciIsNzE2KSxEKDE3NCw0OSxvRWUsYmQsbmFlLEs0ZSk7dmFyIGxPbj1JKExyLCJMaW5rZWRIYXNoU2V0IiwxNzQpO0QoNjcsMjA2Mix7MzoxLDQ6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDY3OjEsMTU6MX0sb3MsZGFlKSxoLkZjPWZ1bmN0aW9uKHQpe3JldHVybiB1aSh0aGlzLHQpfSxoLiRiPWZ1bmN0aW9uKCl7Q2godGhpcyl9LGguZmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFJyKHRoaXMsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLmI9MDt2YXIgaE9uPUkoTHIsIkxpbmtlZExpc3QiLDY3KTtEKDk4MSwxLGxnLGhpdCksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlJiPWZ1bmN0aW9uKHQpe3pPKHRoaXMsdCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gUUkodGhpcyl9LGguU2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmIhPXRoaXMuZC5hfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIEJyKHRoaXMpfSxoLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5VYj1mdW5jdGlvbigpe3JldHVybiBwY3QodGhpcyl9LGguVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLTF9LGguUWI9ZnVuY3Rpb24oKXtZb2UodGhpcyl9LGguV2I9ZnVuY3Rpb24odCl7Z3koISF0aGlzLmMpLHRoaXMuYy5jPXR9LGguYT0wLGguYz1udWxsLEkoTHIsIkxpbmtlZExpc3QvTGlzdEl0ZXJhdG9ySW1wbCIsOTgxKSxEKDYxNywxLHt9LF90KSxJKExyLCJMaW5rZWRMaXN0L05vZGUiLDYxNyksRCgyMDU3LDEse30pO3ZhciBwX2UsXzZ0O0koTHIsIkxvY2FsZSIsMjA1NyksRCg4NzMsMjA1Nyx7fSxFdCksaC5JYj1mdW5jdGlvbigpe3JldHVybiIifSxJKExyLCJMb2NhbGUvMSIsODczKSxEKDg3NCwyMDU3LHt9LEd0KSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuInVua25vd24ifSxJKExyLCJMb2NhbGUvNCIsODc0KSxEKDExMiw2Myx7MzoxLDEwMzoxLDYzOjEsODI6MSwxMTI6MX0sX2MsTGF0KSxJKExyLCJOb1N1Y2hFbGVtZW50RXhjZXB0aW9uIiwxMTIpLEQoNDc1LDEsezQ3NToxfSxLaWUpLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHQ9PT10aGlzPyEwOkRlKHQsNDc1KT8obj1sKHQsNDc1KSxKYyh0aGlzLmEsbi5hKSk6ITF9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gUjUodGhpcy5hKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEhPW51bGw/QXd0K2pfKHRoaXMuYSkrIikiOiJPcHRpb25hbC5lbXB0eSgpIn07dmFyIGJfZTtJKExyLCJPcHRpb25hbCIsNDc1KSxEKDQxNCwxLHs0MTQ6MX0sSHR0LHNhZSksaC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gdD09PXRoaXM/ITA6RGUodCw0MTQpPyhuPWwodCw0MTQpLHRoaXMuYT09bi5hJiZZaSh0aGlzLmIsbi5iKT09MCk6ITF9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hP3VhKHRoaXMuYik6MH0saC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE/Ik9wdGlvbmFsRG91YmxlLm9mKCIrKCIiK3RoaXMuYikrIikiOiJPcHRpb25hbERvdWJsZS5lbXB0eSgpIn0saC5hPSExLGguYj0wO3ZhciBJMGU7SShMciwiT3B0aW9uYWxEb3VibGUiLDQxNCksRCg1MjQsMSx7NTI0OjF9LFZ0dCxhcnQpLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHQ9PT10aGlzPyEwOkRlKHQsNTI0KT8obj1sKHQsNTI0KSx0aGlzLmE9PW4uYSYmcnUodGhpcy5iLG4uYik9PTApOiExfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT90aGlzLmI6MH0saC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE/Ik9wdGlvbmFsSW50Lm9mKCIrKCIiK3RoaXMuYikrIikiOiJPcHRpb25hbEludC5lbXB0eSgpIn0saC5hPSExLGguYj0wO3ZhciBBNnQ7SShMciwiT3B0aW9uYWxJbnQiLDUyNCksRCg1MTAsMjEwMyxXeSxnSCksaC5HYz1mdW5jdGlvbih0KXtyZXR1cm4gY3hlKHRoaXMsdCl9LGguJGI9ZnVuY3Rpb24oKXtheSh0aGlzLmIuYywwKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4odD09bnVsbD8tMTpnYyh0aGlzLmIsdCwwKSkhPS0xfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBKbih0aGlzKX0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gaGZ0KHRoaXMsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmMubGVuZ3RofSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrbih0aGlzLDI1Nil9LGguUGM9ZnVuY3Rpb24oKXtyZXR1cm4gZUgodGhpcy5iLmMpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiBqMSh0aGlzLmIsdCl9LEkoTHIsIlByaW9yaXR5UXVldWUiLDUxMCksRCgxMjk2LDEsT2EsSm4pLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE8dGhpcy5jLmIuYy5sZW5ndGh9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gbXIodGhpcy5hPHRoaXMuYy5iLmMubGVuZ3RoKSx0aGlzLmI9dGhpcy5hKyssanQodGhpcy5jLmIsdGhpcy5iKX0saC5RYj1mdW5jdGlvbigpe2d5KHRoaXMuYiE9LTEpLHJjZSh0aGlzLmMsdGhpcy5hPXRoaXMuYiksdGhpcy5iPS0xfSxoLmE9MCxoLmI9LTEsSShMciwiUHJpb3JpdHlRdWV1ZS8xIiwxMjk2KSxEKDIzNCwxLHsyMzQ6MX0sVWNlLFZIKSxoLmE9MCxoLmI9MDt2YXIgbV9lLHZfZSxmT249MDtJKExyLCJSYW5kb20iLDIzNCksRCgyNSwxLFBoLGtuLHZ3LF9hdCksaC5BZD1mdW5jdGlvbih0KXtyZXR1cm4odGhpcy5hJnQpIT0wfSxoLnlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC56ZD1mdW5jdGlvbigpe3JldHVybiBpNWUodGhpcyksdGhpcy5jfSxoLk5iPWZ1bmN0aW9uKHQpe2k1ZSh0aGlzKSx0aGlzLmQuTmIodCl9LGguQmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHhodCh0aGlzLHQpfSxoLmE9MCxoLmM9MCxJKExyLCJTcGxpdGVyYXRvcnMvSXRlcmF0b3JTcGxpdGVyYXRvciIsMjUpLEQoNDk1LDI1LFBoLGFxKSxJKExyLCJTb3J0ZWRTZXQvMSIsNDk1KSxEKDYxMSwxLExQLGdvKSxoLlBlPWZ1bmN0aW9uKHQpe3RoaXMuYS5DZCh0KX0sSShMciwiU3BsaXRlcmF0b3IvT2ZEb3VibGUvMG1ldGhvZHJlZiRhY2NlcHQkVHlwZSIsNjExKSxEKDYxMiwxLExQLEVzKSxoLlBlPWZ1bmN0aW9uKHQpe3RoaXMuYS5DZCh0KX0sSShMciwiU3BsaXRlcmF0b3IvT2ZEb3VibGUvMW1ldGhvZHJlZiRhY2NlcHQkVHlwZSIsNjEyKSxEKDYxMywxLGtQLCRjKSxoLkRkPWZ1bmN0aW9uKHQpe3RoaXMuYS5DZChwdCh0KSl9LEkoTHIsIlNwbGl0ZXJhdG9yL09mSW50LzJtZXRob2RyZWYkYWNjZXB0JFR5cGUiLDYxMyksRCg2MTQsMSxrUCx6YSksaC5EZD1mdW5jdGlvbih0KXt0aGlzLmEuQ2QocHQodCkpfSxJKExyLCJTcGxpdGVyYXRvci9PZkludC8zbWV0aG9kcmVmJGFjY2VwdCRUeXBlIiw2MTQpLEQoNjI1LDEsUGgpLGguTmI9ZnVuY3Rpb24odCl7bDNlKHRoaXMsdCl9LGguQWQ9ZnVuY3Rpb24odCl7cmV0dXJuKHRoaXMuZCZ0KSE9MH0saC55ZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGguemQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxoLmQ9MCxoLmU9MCxJKExyLCJTcGxpdGVyYXRvcnMvQmFzZVNwbGl0ZXJhdG9yIiw2MjUpLEQoNzM2LDYyNSxQaCksaC5RZT1mdW5jdGlvbih0KXtBNSh0aGlzLHQpfSxoLk5iPWZ1bmN0aW9uKHQpe0RlKHQsMTg5KT9BNSh0aGlzLGwodCwxODkpKTpBNSh0aGlzLG5ldyBFcyh0KSl9LGguQmQ9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTg5KT90aGlzLlJlKGwodCwxODkpKTp0aGlzLlJlKG5ldyBnbyh0KSl9LEkoTHIsIlNwbGl0ZXJhdG9ycy9BYnN0cmFjdERvdWJsZVNwbGl0ZXJhdG9yIiw3MzYpLEQoNzM1LDYyNSxQaCksaC5RZT1mdW5jdGlvbih0KXtBNSh0aGlzLHQpfSxoLk5iPWZ1bmN0aW9uKHQpe0RlKHQsMjAyKT9BNSh0aGlzLGwodCwyMDIpKTpBNSh0aGlzLG5ldyB6YSh0KSl9LGguQmQ9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMjAyKT90aGlzLlJlKGwodCwyMDIpKTp0aGlzLlJlKG5ldyAkYyh0KSl9LEkoTHIsIlNwbGl0ZXJhdG9ycy9BYnN0cmFjdEludFNwbGl0ZXJhdG9yIiw3MzUpLEQoNTAwLDYyNSxQaCksSShMciwiU3BsaXRlcmF0b3JzL0Fic3RyYWN0U3BsaXRlcmF0b3IiLDUwMCksRCg3MDYsMSxQaCksaC5OYj1mdW5jdGlvbih0KXtsM2UodGhpcyx0KX0saC5BZD1mdW5jdGlvbih0KXtyZXR1cm4odGhpcy5iJnQpIT0wfSxoLnlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC56ZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmQtdGhpcy5jfSxoLmI9MCxoLmM9MCxoLmQ9MCxJKExyLCJTcGxpdGVyYXRvcnMvQmFzZUFycmF5U3BsaXRlcmF0b3IiLDcwNiksRCg5NjAsNzA2LFBoLEtpdCksaC5TZT1mdW5jdGlvbih0LG4pe3d1bih0aGlzLGwodCw0MSksbil9LGguTmI9ZnVuY3Rpb24odCl7V2FlKHRoaXMsdCl9LGguQmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFhIKHRoaXMsdCl9LEkoTHIsIlNwbGl0ZXJhdG9ycy9BcnJheVNwbGl0ZXJhdG9yIiw5NjApLEQoNzA3LDcwNixQaCxvaXQpLGguU2U9ZnVuY3Rpb24odCxuKXt5dW4odGhpcyxsKHQsMTg5KSxuKX0saC5RZT1mdW5jdGlvbih0KXtXYWUodGhpcyx0KX0saC5OYj1mdW5jdGlvbih0KXtEZSh0LDE4OSk/V2FlKHRoaXMsbCh0LDE4OSkpOldhZSh0aGlzLG5ldyBFcyh0KSl9LGguUmU9ZnVuY3Rpb24odCl7cmV0dXJuIFhIKHRoaXMsdCl9LGguQmQ9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTg5KT9YSCh0aGlzLGwodCwxODkpKTpYSCh0aGlzLG5ldyBnbyh0KSl9LEkoTHIsIlNwbGl0ZXJhdG9ycy9Eb3VibGVBcnJheVNwbGl0ZXJhdG9yIiw3MDcpLEQoMjA2NiwxLFBoKSxoLk5iPWZ1bmN0aW9uKHQpe2wzZSh0aGlzLHQpfSxoLkFkPWZ1bmN0aW9uKHQpe3JldHVybigxNjQ0OCZ0KSE9MH0saC55ZD1mdW5jdGlvbigpe3JldHVybiAxNjQ0OH0saC56ZD1mdW5jdGlvbigpe3JldHVybiAwfTt2YXIgTDZ0O0koTHIsIlNwbGl0ZXJhdG9ycy9FbXB0eVNwbGl0ZXJhdG9yIiwyMDY2KSxEKDk1OSwyMDY2LFBoLGxuKSxoLlFlPWZ1bmN0aW9uKHQpe24wKHQpfSxoLk5iPWZ1bmN0aW9uKHQpe0RlKHQsMjAyKT9uMChsKHQsMjAyKSk6bjAobmV3IHphKHQpKX0saC5SZT1mdW5jdGlvbih0KXtyZXR1cm4gVDNlKHQpfSxoLkJkPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDIwMik/VDNlKGwodCwyMDIpKTpUM2UobmV3ICRjKHQpKX0sSShMciwiU3BsaXRlcmF0b3JzL0VtcHR5U3BsaXRlcmF0b3IvT2ZJbnQiLDk1OSksRCg1ODgsNTYsV3d0LGp6KSxoLmJkPWZ1bmN0aW9uKHQsbil7cWsodCx0aGlzLmEuYy5sZW5ndGgrMSkscHcodGhpcy5hLHQsbil9LGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIHZ0KHRoaXMuYSx0KX0saC5jZD1mdW5jdGlvbih0LG4pe3JldHVybiBxayh0LHRoaXMuYS5jLmxlbmd0aCsxKSxRN2UodGhpcy5hLHQsbil9LGguR2M9ZnVuY3Rpb24odCl7cmV0dXJuIHJhKHRoaXMuYSx0KX0saC4kYj1mdW5jdGlvbigpe2F5KHRoaXMuYS5jLDApfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBnYyh0aGlzLmEsdCwwKSE9LTF9LGguSWM9ZnVuY3Rpb24odCl7cmV0dXJuIEVOKHRoaXMuYSx0KX0saC5KYz1mdW5jdGlvbih0KXtWdSh0aGlzLmEsdCl9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIHFrKHQsdGhpcy5hLmMubGVuZ3RoKSxqdCh0aGlzLmEsdCl9LGguZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIGdjKHRoaXMuYSx0LDApfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5jLmxlbmd0aD09MH0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRyh0aGlzLmEpfSxoLmdkPWZ1bmN0aW9uKHQpe3JldHVybiBxayh0LHRoaXMuYS5jLmxlbmd0aCksdDIodGhpcy5hLHQpfSxoLmNlPWZ1bmN0aW9uKHQsbil7Qm90KHRoaXMuYSx0LG4pfSxoLmhkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHFrKHQsdGhpcy5hLmMubGVuZ3RoKSxyZih0aGlzLmEsdCxuKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYy5sZW5ndGh9LGguamQ9ZnVuY3Rpb24odCl7VnModGhpcy5hLHQpfSxoLmtkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyBacCh0aGlzLmEsdCxuKX0saC5QYz1mdW5jdGlvbigpe3JldHVybiBlSCh0aGlzLmEuYyl9LGguUWM9ZnVuY3Rpb24odCl7cmV0dXJuIGoxKHRoaXMuYSx0KX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBUYih0aGlzLmEpfSxJKExyLCJWZWN0b3IiLDU4OCksRCg4MjQsNTg4LFd3dCxGd2UpLEkoTHIsIlN0YWNrIiw4MjQpLEQoMjEzLDEsezIxMzoxfSxIbSksaC5JYj1mdW5jdGlvbigpe3JldHVybiBnY3QodGhpcyl9LEkoTHIsIlN0cmluZ0pvaW5lciIsMjEzKSxEKDU1MywyMDkwLHszOjEsODU6MSwxMzk6MSwxMzM6MX0sbmV0LFBhZSksaC4kYj1mdW5jdGlvbigpe09KZSh0aGlzKX0saC5EZT1mdW5jdGlvbigpe3JldHVybiBuZXcgeGN0KHRoaXMpfSxoLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBabnQodGhpcyl9LGguRWU9ZnVuY3Rpb24odCl7cmV0dXJuIE9FKHRoaXMsdCwhMCl9LGguRmU9ZnVuY3Rpb24odCl7cmV0dXJuIFMwdCh0aGlzLHQpfSxoLkdlPWZ1bmN0aW9uKCl7cmV0dXJuIGo2ZSh0aGlzKX0saC5IZT1mdW5jdGlvbih0KXtyZXR1cm4gJE4odGhpcyx0LCEwKX0saC5JZT1mdW5jdGlvbih0KXtyZXR1cm4gT0UodGhpcyx0LCExKX0saC5KZT1mdW5jdGlvbigpe3JldHVybiBObHQodGhpcyl9LGguS2U9ZnVuY3Rpb24odCl7cmV0dXJuICROKHRoaXMsdCwhMSl9LGguWmM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gRm90KHRoaXMsdCxuKX0saC56Yz1mdW5jdGlvbih0LG4pe3JldHVybiBiMHQodGhpcyx0LG4pfSxoLkJjPWZ1bmN0aW9uKHQpe3JldHVybiBhb3QodGhpcyx0KX0saC5MZT1mdW5jdGlvbih0KXtyZXR1cm4gTDZlKHRoaXMsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxoLmFkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFJvdCh0aGlzLHQsbil9LGguYz0wLEkoTHIsIlRyZWVNYXAiLDU1MyksRCg1NTQsMSxPYSx4Y3Qsb2NlKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gb3J0KHRoaXMpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIGxzZSh0aGlzLmEpfSxoLlFiPWZ1bmN0aW9uKCl7ZGl0KHRoaXMpfSxJKExyLCJUcmVlTWFwL0VudHJ5SXRlcmF0b3IiLDU1NCksRCgxMTQyLDYyOSxUbCxabnQpLGguJGI9ZnVuY3Rpb24oKXtPSmUodGhpcy5hKX0sSShMciwiVHJlZU1hcC9FbnRyeVNldCIsMTE0MiksRCg0NDcsMzk3LHs0OTQ6MSwzOTc6MSw0NDoxLDQ0NzoxfSxCb2UpLGguYj0hMTt2YXIgZE9uPUkoTHIsIlRyZWVNYXAvTm9kZSIsNDQ3KTtEKDYzMCwxLHt9LHh0KSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIlN0YXRlOiBtdj0iK3RoaXMuYysiIHZhbHVlPSIrdGhpcy5kKyIgZG9uZT0iK3RoaXMuYSsiIGZvdW5kPSIrdGhpcy5ifSxoLmE9ITEsaC5iPSExLGguYz0hMSxJKExyLCJUcmVlTWFwL1N0YXRlIiw2MzApLEQoNjMxLDIwOTAsWmtlLEJ1ZSksaC5EZT1mdW5jdGlvbigpe3JldHVybiBuZXcgb2NlKHRoaXMuYyx0aGlzLmYsdGhpcy5iLHRoaXMuYSx0aGlzLmUsdGhpcy5kKX0saC52Yz1mdW5jdGlvbigpe3JldHVybiBuZXcgUnModGhpcyl9LGguRWU9ZnVuY3Rpb24odCl7cmV0dXJuIFhxKHRoaXMsT0UodGhpcy5jLHQsITApKX0saC5GZT1mdW5jdGlvbih0KXtyZXR1cm4gWHEodGhpcyxTMHQodGhpcy5jLHQpKX0saC5HZT1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmYuVGUoKT90aGlzLmE/dD1PRSh0aGlzLmMsdGhpcy5iLCEwKTp0PU9FKHRoaXMuYyx0aGlzLmIsITEpOnQ9ajZlKHRoaXMuYyksdCYmeUgodGhpcyx0LmQpP3Q6bnVsbH0saC5IZT1mdW5jdGlvbih0KXtyZXR1cm4gWHEodGhpcywkTih0aGlzLmMsdCwhMCkpfSxoLkllPWZ1bmN0aW9uKHQpe3JldHVybiBYcSh0aGlzLE9FKHRoaXMuYyx0LCExKSl9LGguSmU9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5mLlVlKCk/dGhpcy5kP3Q9JE4odGhpcy5jLHRoaXMuZSwhMCk6dD0kTih0aGlzLmMsdGhpcy5lLCExKTp0PU5sdCh0aGlzLmMpLHQmJnlIKHRoaXMsdC5kKT90Om51bGx9LGguS2U9ZnVuY3Rpb24odCl7cmV0dXJuIFhxKHRoaXMsJE4odGhpcy5jLHQsITEpKX0saC5aYz1mdW5jdGlvbih0LG4pe2lmKHRoaXMuZi5VZSgpJiZ0aGlzLmMuYS5OZSh0LHRoaXMuZSk+MCl0aHJvdyB1ZShuZXcgWW4obEVlK3QrIiBncmVhdGVyIHRoYW4gIit0aGlzLmUpKTtyZXR1cm4gdGhpcy5mLlRlKCk/c290KHRoaXMuYyx0aGlzLmIsdGhpcy5hLHQsbik6Rm90KHRoaXMuYyx0LG4pfSxoLnpjPWZ1bmN0aW9uKHQsbil7aWYoIXh1ZSh0aGlzLmMsdGhpcy5mLHQsdGhpcy5iLHRoaXMuYSx0aGlzLmUsdGhpcy5kKSl0aHJvdyB1ZShuZXcgWW4odCsiIG91dHNpZGUgdGhlIHJhbmdlICIrdGhpcy5iKyIgdG8gIit0aGlzLmUpKTtyZXR1cm4gYjB0KHRoaXMuYyx0LG4pfSxoLkJjPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPXQseHVlKHRoaXMuYyx0aGlzLmYsbix0aGlzLmIsdGhpcy5hLHRoaXMuZSx0aGlzLmQpP2FvdCh0aGlzLmMsbik6bnVsbH0saC5MZT1mdW5jdGlvbih0KXtyZXR1cm4geUgodGhpcyx0LmxkKCkpJiZMNmUodGhpcy5jLHQpfSxoLmdjPWZ1bmN0aW9uKCl7dmFyIHQsbixyO2lmKHRoaXMuZi5UZSgpP3RoaXMuYT9uPU9FKHRoaXMuYyx0aGlzLmIsITApOm49T0UodGhpcy5jLHRoaXMuYiwhMSk6bj1qNmUodGhpcy5jKSwhKG4mJnlIKHRoaXMsbi5kKSYmbikpcmV0dXJuIDA7Zm9yKHQ9MCxyPW5ldyBvY2UodGhpcy5jLHRoaXMuZix0aGlzLmIsdGhpcy5hLHRoaXMuZSx0aGlzLmQpO2xzZShyLmEpO3IuYj1sKEk1ZShyLmEpLDQ0KSkrK3Q7cmV0dXJuIHR9LGguYWQ9ZnVuY3Rpb24odCxuKXtpZih0aGlzLmYuVGUoKSYmdGhpcy5jLmEuTmUodCx0aGlzLmIpPDApdGhyb3cgdWUobmV3IFluKGxFZSt0K1l3dCt0aGlzLmIpKTtyZXR1cm4gdGhpcy5mLlVlKCk/c290KHRoaXMuYyx0LG4sdGhpcy5lLHRoaXMuZCk6Um90KHRoaXMuYyx0LG4pfSxoLmE9ITEsaC5kPSExLEkoTHIsIlRyZWVNYXAvU3ViTWFwIiw2MzEpLEQoMzA0LDIyLGZoZSxvcSksaC5UZT1mdW5jdGlvbigpe3JldHVybiExfSxoLlVlPWZ1bmN0aW9uKCl7cmV0dXJuITF9O3ZhciBPMGUsTjBlLFAwZSxCMGUsZks9RnIoTHIsIlRyZWVNYXAvU3ViTWFwVHlwZSIsMzA0LEhyLEdibixuMG4pO0QoMTE0MywzMDQsZmhlLGhudCksaC5VZT1mdW5jdGlvbigpe3JldHVybiEwfSxGcihMciwiVHJlZU1hcC9TdWJNYXBUeXBlLzEiLDExNDMsZkssbnVsbCxudWxsKSxEKDExNDQsMzA0LGZoZSx5bnQpLGguVGU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5VZT1mdW5jdGlvbigpe3JldHVybiEwfSxGcihMciwiVHJlZU1hcC9TdWJNYXBUeXBlLzIiLDExNDQsZkssbnVsbCxudWxsKSxEKDExNDUsMzA0LGZoZSxsbnQpLGguVGU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRnIoTHIsIlRyZWVNYXAvU3ViTWFwVHlwZS8zIiwxMTQ1LGZLLG51bGwsbnVsbCk7dmFyIE02dDtEKDE1NyxxMSx7MzoxLDIwOjEsMzE6MSwxNjoxLDI3NzoxLDIxOjEsODc6MSwxNTc6MX0sTHdlLEtwLGJhKSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhcSh0aGlzKX0saC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gak8odGhpcyx0KX0saC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuX2IodCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmVjKCkuS2MoKX0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gdGFlKHRoaXMsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9O3ZhciBnT249SShMciwiVHJlZVNldCIsMTU3KTtEKDEwODIsMSx7fSx4byksaC5WZT1mdW5jdGlvbih0LG4pe3JldHVybiB3Zm4odGhpcy5hLHQsbil9LEkoZGhlLCJCaW5hcnlPcGVyYXRvci9sYW1iZGEkMCRUeXBlIiwxMDgyKSxEKDEwODMsMSx7fSxsaCksaC5WZT1mdW5jdGlvbih0LG4pe3JldHVybiB5Zm4odGhpcy5hLHQsbil9LEkoZGhlLCJCaW5hcnlPcGVyYXRvci9sYW1iZGEkMSRUeXBlIiwxMDgzKSxEKDk1MiwxLHt9LFB0KSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxJKGRoZSwiRnVuY3Rpb24vbGFtYmRhJDAkVHlwZSIsOTUyKSxEKDM5NSwxLHRpLFdsKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiF0aGlzLmEuTWIodCl9LEkoZGhlLCJQcmVkaWNhdGUvbGFtYmRhJDIkVHlwZSIsMzk1KSxEKDU4MSwxLHs1ODE6MX0pO3ZhciBENnQ9SShhTCwiSGFuZGxlciIsNTgxKTtEKDIxMDcsMSx5UCksaC54ZT1mdW5jdGlvbigpe3JldHVybiJEVU1NWSJ9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54ZSgpfTt2YXIgd19lO0koYUwsIkxldmVsIiwyMTA3KSxEKDE3MDYsMjEwNyx5UCxRZSksaC54ZT1mdW5jdGlvbigpe3JldHVybiJJTkZPIn0sSShhTCwiTGV2ZWwvTGV2ZWxJbmZvIiwxNzA2KSxEKDE4NDMsMSx7fSxGUWUpO3ZhciBGMGU7SShhTCwiTG9nTWFuYWdlciIsMTg0MyksRCgxODk2LDEseVAsZml0KSxoLmI9bnVsbCxJKGFMLCJMb2dSZWNvcmQiLDE4OTYpLEQoNTI1LDEsezUyNToxfSxTb2UpLGguZT0hMTt2YXIgSTZ0PSExLE82dD0hMSxHMT0hMSxONnQ9ITEsUDZ0PSExO0koYUwsIkxvZ2dlciIsNTI1KSxEKDgzNSw1ODEsezU4MToxfSxEdCksSShhTCwiU2ltcGxlQ29uc29sZUxvZ0hhbmRsZXIiLDgzNSksRCgxMDgsMjIsezM6MSwzNDoxLDIyOjEsMTA4OjF9LGRzZSk7dmFyIHlfZSxFYyxpNCxvYz1GcihzYSwiQ29sbGVjdG9yL0NoYXJhY3RlcmlzdGljcyIsMTA4LEhyLE8ybixyMG4pLEI2dDtEKDc1OCwxLHt9LGg1ZSksSShzYSwiQ29sbGVjdG9ySW1wbCIsNzU4KSxEKDEwNzQsMSx7fSxrdCksaC5WZT1mdW5jdGlvbih0LG4pe3JldHVybiBkNG4obCh0LDIxMyksbChuLDIxMykpfSxJKHNhLCJDb2xsZWN0b3JzLzEwbWV0aG9kcmVmJG1lcmdlJFR5cGUiLDEwNzQpLEQoMTA3NSwxLHt9LE9uKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBnY3QobCh0LDIxMykpfSxJKHNhLCJDb2xsZWN0b3JzLzExbWV0aG9kcmVmJHRvU3RyaW5nJFR5cGUiLDEwNzUpLEQoMTA3NiwxLHt9LFoyKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBIbigpLCEhc3llKHQpfSxJKHNhLCJDb2xsZWN0b3JzLzEybWV0aG9kcmVmJHRlc3QkVHlwZSIsMTA3NiksRCgxNDQsMSx7fSxodCksaC5ZZD1mdW5jdGlvbih0LG4pe2wodCwxNikuRmMobil9LEkoc2EsIkNvbGxlY3RvcnMvMjBtZXRob2RyZWYkYWRkJFR5cGUiLDE0NCksRCgxNDYsMSx7fSx6ciksaC5YZT1mdW5jdGlvbigpe3JldHVybiBuZXcgYnR9LEkoc2EsIkNvbGxlY3RvcnMvMjFtZXRob2RyZWYkY3RvciRUeXBlIiwxNDYpLEQoMzU5LDEse30seXQpLGguWGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEtzfSxJKHNhLCJDb2xsZWN0b3JzLzIzbWV0aG9kcmVmJGN0b3IkVHlwZSIsMzU5KSxEKDM2MCwxLHt9LGppKSxoLllkPWZ1bmN0aW9uKHQsbil7bmEobCh0LDQ5KSxuKX0sSShzYSwiQ29sbGVjdG9ycy8yNG1ldGhvZHJlZiRhZGQkVHlwZSIsMzYwKSxEKDEwNjksMSx7fSx4aSksaC5WZT1mdW5jdGlvbih0LG4pe3JldHVybiByZXQobCh0LDE1KSxsKG4sMTYpKX0sSShzYSwiQ29sbGVjdG9ycy80bWV0aG9kcmVmJGFkZEFsbCRUeXBlIiwxMDY5KSxEKDEwNzMsMSx7fSxNYSksaC5ZZD1mdW5jdGlvbih0LG4pe0pnKGwodCwyMTMpLGwobiw0ODQpKX0sSShzYSwiQ29sbGVjdG9ycy85bWV0aG9kcmVmJGFkZCRUeXBlIiwxMDczKSxEKDEwNzIsMSx7fSxMaXQpLGguWGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEhtKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkMTUkVHlwZSIsMTA3MiksRCgxMDc3LDEse30senMpLGguWGU9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgZTIsaDIodCwoSG4oKSwhMSksbmV3IGJ0KSxoMih0LCEwLG5ldyBidCksdH0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkMjIkVHlwZSIsMTA3NyksRCgxMDc4LDEse30sZWIpLGguWGU9ZnVuY3Rpb24oKXtyZXR1cm4gaGUobGUod2EsMSksUm4sMSw1LFt0aGlzLmFdKX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkMjUkVHlwZSIsMTA3OCksRCgxMDc5LDEse30sRzApLGguWWQ9ZnVuY3Rpb24odCxuKXtqZG4odGhpcy5hLGptKHQpKX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkMjYkVHlwZSIsMTA3OSksRCgxMDgwLDEse30senApLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZGduKHRoaXMuYSxqbSh0KSxqbShuKSl9LEkoc2EsIkNvbGxlY3RvcnMvbGFtYmRhJDI3JFR5cGUiLDEwODApLEQoMTA4MSwxLHt9LGFvKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBqbSh0KVswXX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkMjgkVHlwZSIsMTA4MSksRCg3MjgsMSx7fSxUciksaC5WZT1mdW5jdGlvbih0LG4pe3JldHVybiBVNGUodCxuKX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkNCRUeXBlIiw3MjgpLEQoMTQ1LDEse30sRm4pLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gV3VuKGwodCwxNiksbChuLDE2KSl9LEkoc2EsIkNvbGxlY3RvcnMvbGFtYmRhJDQyJFR5cGUiLDE0NSksRCgzNjEsMSx7fSxxbiksaC5WZT1mdW5jdGlvbih0LG4pe3JldHVybiBZdW4obCh0LDQ5KSxsKG4sNDkpKX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkNTAkVHlwZSIsMzYxKSxEKDM2MiwxLHt9LFVuKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsNDkpfSxJKHNhLCJDb2xsZWN0b3JzL2xhbWJkYSQ1MSRUeXBlIiwzNjIpLEQoMTA2OCwxLHt9LGZkKSxoLllkPWZ1bmN0aW9uKHQsbil7d3luKHRoaXMuYSxsKHQsODUpLG4pfSxJKHNhLCJDb2xsZWN0b3JzL2xhbWJkYSQ3JFR5cGUiLDEwNjgpLEQoMTA3MCwxLHt9LEF0KSxoLlZlPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFkzbihsKHQsODUpLGwobiw4NSksbmV3IHhpKX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkOCRUeXBlIiwxMDcwKSxEKDEwNzEsMSx7fSxXdiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gRzRuKHRoaXMuYSxsKHQsODUpKX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkOSRUeXBlIiwxMDcxKSxEKDU1MCwxLHt9KSxoLiRlPWZ1bmN0aW9uKCl7dEEodGhpcyl9LGguZD0hMSxJKHNhLCJUZXJtaW5hdGFibGVTdHJlYW0iLDU1MCksRCg4MjcsNTUwLGhFZSxWeWUpLGguJGU9ZnVuY3Rpb24oKXt0QSh0aGlzKX0sSShzYSwiRG91YmxlU3RyZWFtSW1wbCIsODI3KSxEKDE4NDcsNzM2LFBoLE1pdCksaC5SZT1mdW5jdGlvbih0KXtyZXR1cm4gWTZuKHRoaXMsbCh0LDE4OSkpfSxoLmE9bnVsbCxJKHNhLCJEb3VibGVTdHJlYW1JbXBsLzIiLDE4NDcpLEQoMTg0OCwxLExQLHN5KSxoLlBlPWZ1bmN0aW9uKHQpe3Fsbih0aGlzLmEsdCl9LEkoc2EsIkRvdWJsZVN0cmVhbUltcGwvMi9sYW1iZGEkMCRUeXBlIiwxODQ4KSxEKDE4NDUsMSxMUCxFOCksaC5QZT1mdW5jdGlvbih0KXt6bG4odGhpcy5hLHQpfSxJKHNhLCJEb3VibGVTdHJlYW1JbXBsL2xhbWJkYSQwJFR5cGUiLDE4NDUpLEQoMTg0NiwxLExQLHg1KSxoLlBlPWZ1bmN0aW9uKHQpe00xdCh0aGlzLmEsdCl9LEkoc2EsIkRvdWJsZVN0cmVhbUltcGwvbGFtYmRhJDIkVHlwZSIsMTg0NiksRCgxMzk3LDczNSxQaCx3dXQpLGguUmU9ZnVuY3Rpb24odCl7cmV0dXJuIFBibih0aGlzLGwodCwyMDIpKX0saC5hPTAsaC5iPTAsaC5jPTAsSShzYSwiSW50U3RyZWFtLzUiLDEzOTcpLEQoODA2LDU1MCxoRWUsVXllKSxoLiRlPWZ1bmN0aW9uKCl7dEEodGhpcyl9LGguX2U9ZnVuY3Rpb24oKXtyZXR1cm4gZmIodGhpcyksdGhpcy5hfSxJKHNhLCJJbnRTdHJlYW1JbXBsIiw4MDYpLEQoODA3LDU1MCxoRWUsYjNlKSxoLiRlPWZ1bmN0aW9uKCl7dEEodGhpcyl9LGguX2U9ZnVuY3Rpb24oKXtyZXR1cm4gZmIodGhpcyksU3llKCksTDZ0fSxJKHNhLCJJbnRTdHJlYW1JbXBsL0VtcHR5Iiw4MDcpLEQoMTY4NywxLGtQLFQ4KSxoLkRkPWZ1bmN0aW9uKHQpeyRmdCh0aGlzLmEsdCl9LEkoc2EsIkludFN0cmVhbUltcGwvbGFtYmRhJDQkVHlwZSIsMTY4Nyk7dmFyIHBPbj1rcyhzYSwiU3RyZWFtIik7RCgyNiw1NTAsezUzMzoxLDY4NzoxLDg0ODoxfSxibiksaC4kZT1mdW5jdGlvbigpe3RBKHRoaXMpfTt2YXIgeng7SShzYSwiU3RyZWFtSW1wbCIsMjYpLEQoMTEwMiw1MDAsUGgsaWl0KSxoLkJkPWZ1bmN0aW9uKHQpe2Zvcig7UnZuKHRoaXMpOyl7aWYodGhpcy5hLkJkKHQpKXJldHVybiEwO3RBKHRoaXMuYiksdGhpcy5iPW51bGwsdGhpcy5hPW51bGx9cmV0dXJuITF9LEkoc2EsIlN0cmVhbUltcGwvMSIsMTEwMiksRCgxMTAzLDEsZnIsWlMpLGguQ2Q9ZnVuY3Rpb24odCl7aGRuKHRoaXMuYSxsKHQsODQ4KSl9LEkoc2EsIlN0cmVhbUltcGwvMS9sYW1iZGEkMCRUeXBlIiwxMTAzKSxEKDExMDQsMSx0aSxrNSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbmEodGhpcy5hLHQpfSxJKHNhLCJTdHJlYW1JbXBsLzFtZXRob2RyZWYkYWRkJFR5cGUiLDExMDQpLEQoMTEwNSw1MDAsUGgsUmF0KSxoLkJkPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB0aGlzLmF8fChuPW5ldyBidCx0aGlzLmIuYS5OYihuZXcgUWQobikpLENuKCksVnMobix0aGlzLmMpLHRoaXMuYT1uZXcga24obiwxNikpLHhodCh0aGlzLmEsdCl9LGguYT1udWxsLEkoc2EsIlN0cmVhbUltcGwvNSIsMTEwNSksRCgxMTA2LDEsZnIsUWQpLGguQ2Q9ZnVuY3Rpb24odCl7dnQodGhpcy5hLHQpfSxJKHNhLCJTdHJlYW1JbXBsLzUvMm1ldGhvZHJlZiRhZGQkVHlwZSIsMTEwNiksRCg3MzcsNTAwLFBoLCQ2ZSksaC5CZD1mdW5jdGlvbih0KXtmb3IodGhpcy5iPSExOyF0aGlzLmImJnRoaXMuYy5CZChuZXcgeGV0KHRoaXMsdCkpOyk7cmV0dXJuIHRoaXMuYn0saC5iPSExLEkoc2EsIlN0cmVhbUltcGwvRmlsdGVyU3BsaXRlcmF0b3IiLDczNyksRCgxMDk2LDEsZnIseGV0KSxoLkNkPWZ1bmN0aW9uKHQpe29nbih0aGlzLmEsdGhpcy5iLHQpfSxJKHNhLCJTdHJlYW1JbXBsL0ZpbHRlclNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUiLDEwOTYpLEQoMTA5MSw3MzYsUGgsTXV0KSxoLlJlPWZ1bmN0aW9uKHQpe3JldHVybiB6Zm4odGhpcyxsKHQsMTg5KSl9LEkoc2EsIlN0cmVhbUltcGwvTWFwVG9Eb3VibGVTcGxpdGVyYXRvciIsMTA5MSksRCgxMDk1LDEsZnIsa2V0KSxoLkNkPWZ1bmN0aW9uKHQpe2hsbih0aGlzLmEsdGhpcy5iLHQpfSxJKHNhLCJTdHJlYW1JbXBsL01hcFRvRG91YmxlU3BsaXRlcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTA5NSksRCgxMDkwLDczNSxQaCxEdXQpLGguUmU9ZnVuY3Rpb24odCl7cmV0dXJuIHFmbih0aGlzLGwodCwyMDIpKX0sSShzYSwiU3RyZWFtSW1wbC9NYXBUb0ludFNwbGl0ZXJhdG9yIiwxMDkwKSxEKDEwOTQsMSxmcixFZXQpLGguQ2Q9ZnVuY3Rpb24odCl7ZmxuKHRoaXMuYSx0aGlzLmIsdCl9LEkoc2EsIlN0cmVhbUltcGwvTWFwVG9JbnRTcGxpdGVyYXRvci9sYW1iZGEkMCRUeXBlIiwxMDk0KSxEKDczNCw1MDAsUGgsQzZlKSxoLkJkPWZ1bmN0aW9uKHQpe3JldHVybiB0aXQodGhpcyx0KX0sSShzYSwiU3RyZWFtSW1wbC9NYXBUb09ialNwbGl0ZXJhdG9yIiw3MzQpLEQoMTA5MywxLGZyLFRldCksaC5DZD1mdW5jdGlvbih0KXtkbG4odGhpcy5hLHRoaXMuYix0KX0sSShzYSwiU3RyZWFtSW1wbC9NYXBUb09ialNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUiLDEwOTMpLEQoMTA5Miw1MDAsUGgsYWZ0KSxoLkJkPWZ1bmN0aW9uKHQpe2Zvcig7aHNlKHRoaXMuYiwwKTspe2lmKCF0aGlzLmEuQmQobmV3IHd0KSlyZXR1cm4hMTt0aGlzLmI9RGYodGhpcy5iLDEpfXJldHVybiB0aGlzLmEuQmQodCl9LGguYj0wLEkoc2EsIlN0cmVhbUltcGwvU2tpcFNwbGl0ZXJhdG9yIiwxMDkyKSxEKDEwOTcsMSxmcix3dCksaC5DZD1mdW5jdGlvbih0KXt9LEkoc2EsIlN0cmVhbUltcGwvU2tpcFNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUiLDEwOTcpLEQoNjI2LDEsZnIsb24pLGguQ2Q9ZnVuY3Rpb24odCl7RWllKHRoaXMsdCl9LEkoc2EsIlN0cmVhbUltcGwvVmFsdWVDb25zdW1lciIsNjI2KSxEKDEwOTgsMSxmcixmbiksaC5DZD1mdW5jdGlvbih0KXtBbSgpfSxJKHNhLCJTdHJlYW1JbXBsL2xhbWJkYSQwJFR5cGUiLDEwOTgpLEQoMTA5OSwxLGZyLEFuKSxoLkNkPWZ1bmN0aW9uKHQpe0FtKCl9LEkoc2EsIlN0cmVhbUltcGwvbGFtYmRhJDEkVHlwZSIsMTA5OSksRCgxMTAwLDEse30sXzEpLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4geTBuKHRoaXMuYSx0LG4pfSxJKHNhLCJTdHJlYW1JbXBsL2xhbWJkYSQ0JFR5cGUiLDExMDApLEQoMTEwMSwxLGZyLENldCksaC5DZD1mdW5jdGlvbih0KXtTZm4odGhpcy5iLHRoaXMuYSx0KX0sSShzYSwiU3RyZWFtSW1wbC9sYW1iZGEkNSRUeXBlIiwxMTAxKSxEKDExMDcsMSxmcixKZCksaC5DZD1mdW5jdGlvbih0KXtGM24odGhpcy5hLGwodCwzODApKX0sSShzYSwiVGVybWluYXRhYmxlU3RyZWFtL2xhbWJkYSQwJFR5cGUiLDExMDcpLEQoMjE0MiwxLHt9KSxEKDIwMTQsMSx7fSxvbyksSSgiamF2YWVtdWwuaW50ZXJuYWwiLCJDb25zb2xlTG9nZ2VyIiwyMDE0KTt2YXIgYk9uPTA7RCgyMTM0LDEse30pLEQoMTgzMCwxLGZyLGpvKSxoLkNkPWZ1bmN0aW9uKHQpe2wodCwzMTcpfSxJKG9ULCJCb3d5ZXJXYXRzb25Ucmlhbmd1bGF0aW9uL2xhbWJkYSQwJFR5cGUiLDE4MzApLEQoMTgzMSwxLGZyLEVtKSxoLkNkPWZ1bmN0aW9uKHQpe0thKHRoaXMuYSxsKHQsMzE3KS5lKX0sSShvVCwiQm93eWVyV2F0c29uVHJpYW5ndWxhdGlvbi9sYW1iZGEkMSRUeXBlIiwxODMxKSxEKDE4MzIsMSxmciwkbyksaC5DZD1mdW5jdGlvbih0KXtsKHQsMTc3KX0sSShvVCwiQm93eWVyV2F0c29uVHJpYW5ndWxhdGlvbi9sYW1iZGEkMiRUeXBlIiwxODMyKSxEKDE4MjcsMSxpaSxMeiksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB5bW4odGhpcy5hLGwodCwxNzcpLGwobiwxNzcpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKG9ULCJOYWl2ZU1pblNUL2xhbWJkYSQwJFR5cGUiLDE4MjcpLEQoNDQ5LDEse30sWXYpLEkob1QsIk5vZGVNaWNyb0xheW91dCIsNDQ5KSxEKDE3NywxLHsxNzc6MX0sQjgpLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsMTc3KT8obj1sKHQsMTc3KSxKYyh0aGlzLmEsbi5hKSYmSmModGhpcy5iLG4uYil8fEpjKHRoaXMuYSxuLmIpJiZKYyh0aGlzLmIsbi5hKSk6ITF9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gUjUodGhpcy5hKStSNSh0aGlzLmIpfTt2YXIgbU9uPUkob1QsIlRFZGdlIiwxNzcpO0QoMzE3LDEsezMxNzoxfSxDa2UpLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsMzE3KT8obj1sKHQsMzE3KSxyVih0aGlzLG4uYSkmJnJWKHRoaXMsbi5iKSYmclYodGhpcyxuLmMpKTohMX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBSNSh0aGlzLmEpK1I1KHRoaXMuYikrUjUodGhpcy5jKX0sSShvVCwiVFRyaWFuZ2xlIiwzMTcpLEQoMjI1LDEsezIyNToxfSxOcSksSShvVCwiVHJlZSIsMjI1KSxEKDEyMTgsMSx7fSxFb3QpLEkoSnd0LCJTY2FubGluZSIsMTIxOCk7dmFyIEY2dD1rcyhKd3QsWnd0KTtEKDE3NTgsMSx7fSx2aHQpLEkoZ2csIkNHcmFwaCIsMTc1OCksRCgzMTYsMSx7MzE2OjF9LFNvdCksaC5iPTAsaC5jPTAsaC5kPTAsaC5nPTAsaC5pPTAsaC5rPWlhLEkoZ2csIkNHcm91cCIsMzE2KSxEKDgzMCwxLHt9LEl3ZSksSShnZywiQ0dyb3VwL0NHcm91cEJ1aWxkZXIiLDgzMCksRCg2MCwxLHs2MDoxfSxScnQpLGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5qP2VpKHRoaXMuai5LYih0aGlzKSk6KEdnKGRLKSxkSy5vKyJAIisodD1mdyh0aGlzKT4+PjAsdC50b1N0cmluZygxNikpKX0saC5mPTAsaC5pPWlhO3ZhciBkSz1JKGdnLCJDTm9kZSIsNjApO0QoODI5LDEse30sT3dlKSxJKGdnLCJDTm9kZS9DTm9kZUJ1aWxkZXIiLDgyOSk7dmFyIFI2dDtEKDE1OTAsMSx7fSxQYSksaC5mZj1mdW5jdGlvbih0LG4pe3JldHVybiAwfSxoLmdmPWZ1bmN0aW9uKHQsbil7cmV0dXJuIDB9LEkoZ2csdDN0LDE1OTApLEQoMTg1MywxLHt9LHdvKSxoLmNmPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGU7Zm9yKEM9Z3MsYT1uZXcgRyh0LmEuYik7YS5hPGEuYy5jLmxlbmd0aDspbj1sKHJlKGEpLDYwKSxDPWIuTWF0aC5taW4oQyxuLmEuai5kLmMrbi5iLmEpO2ZvcihWPW5ldyBvcyxnPW5ldyBHKHQuYS5hKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksMzE2KSxmLms9QyxmLmc9PTAmJkNzKFYsZixWLmMuYixWLmMpO2Zvcig7Vi5iIT0wOyl7Zm9yKGY9bChWLmI9PTA/bnVsbDoobXIoVi5iIT0wKSxhZihWLFYuYS5hKSksMzE2KSxvPWYuai5kLmMsej1mLmEuYS5lYygpLktjKCk7ei5PYigpOylMPWwoei5QYigpLDYwKSx0ZT1mLmsrTC5iLmEsIUp5bih0LGYsdC5kKXx8TC5kLmM8dGU/TC5pPXRlOkwuaT1MLmQuYztmb3Ioby09Zi5qLmksZi5iKz1vLHQuZD09KEpzKCksdmMpfHx0LmQ9PVExP2YuYys9bzpmLmMtPW8sQj1mLmEuYS5lYygpLktjKCk7Qi5PYigpOylmb3IoTD1sKEIuUGIoKSw2MCksRT1MLmMuS2MoKTtFLk9iKCk7KXc9bChFLlBiKCksNjApLFVnKHQuZCk/Sj10LmcuZmYoTCx3KTpKPXQuZy5nZihMLHcpLHcuYS5rPWIuTWF0aC5tYXgody5hLmssTC5pK0wuZC5iK0otdy5iLmEpLEdhdCh0LHcsdC5kKSYmKHcuYS5rPWIuTWF0aC5tYXgody5hLmssdy5kLmMtdy5iLmEpKSwtLXcuYS5nLHcuYS5nPT0wJiZ1aShWLHcuYSl9Zm9yKHI9bmV3IEcodC5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSw2MCksbi5kLmM9bi5pfSxJKGdnLCJMb25nZXN0UGF0aENvbXBhY3Rpb24iLDE4NTMpLEQoMTc1NiwxLHt9LGEydCksaC5lPSExO3ZhciBqNnQsJDZ0LHo2dCxSMGU9SShnZyxpM3QsMTc1Nik7RCgxNzU3LDEsZnIsTGllKSxoLkNkPWZ1bmN0aW9uKHQpe1ozbih0aGlzLmEsbCh0LDQyKSl9LEkoZ2csczN0LDE3NTcpLEQoMTg1NCwxLHt9LF9zKSxoLmRmPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihyPW5ldyBHKHQuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNjApLG4uYy4kYigpO2ZvcihvPW5ldyBHKHQuYS5iKTtvLmE8by5jLmMubGVuZ3RoOylmb3IoYT1sKHJlKG8pLDYwKSxnPW5ldyBHKHQuYS5iKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksNjApLGEhPWYmJihhLmEmJmEuYT09Zi5hfHwoVWcodC5kKT93PXQuZy5nZihhLGYpOnc9dC5nLmZmKGEsZiksKGYuZC5jPmEuZC5jfHxhLmQuYz09Zi5kLmMmJmEuZC5iPGYuZC5iKSYmUjVuKGYuZC5kK2YuZC5hK3csYS5kLmQpJiZqOGUoZi5kLmQsYS5kLmQrYS5kLmErdykmJmEuYy5GYyhmKSkpfSxJKGdnLCJRdWFkcmF0aWNDb25zdHJhaW50Q2FsY3VsYXRpb24iLDE4NTQpLEQoNTI5LDEsezUyOToxfSxCaWUpLGguYT0hMSxoLmI9ITEsaC5jPSExLGguZD0hMSxJKGdnLGEzdCw1MjkpLEQoODE3LDEse30sWDRlKSxoLmRmPWZ1bmN0aW9uKHQpe3RoaXMuYz10LFpOKHRoaXMsbmV3IGowKX0sSShnZyxvM3QsODE3KSxEKDE3ODQsMSx7NjkzOjF9LFdhdCksaC5iZj1mdW5jdGlvbih0KXtaOW4odGhpcyxsKHQsNDczKSl9LEkoZ2csYzN0LDE3ODQpLEQoMTc4NSwxLGlpLHRsKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGxwbihsKHQsNjApLGwobiw2MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoZ2csdTN0LDE3ODUpLEQoNDczLDEsezQ3MzoxfSxTM2UpLGguYT0hMSxJKGdnLGwzdCw0NzMpLEQoMTc4NiwxLGlpLGRhKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGw4bihsKHQsNDczKSxsKG4sNDczKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShnZyxoM3QsMTc4NiksRCgxNzg3LDEsTGQsajApLGguTGI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCw2MCksITB9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsNjApLCEwfSxJKGdnLCJTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdG9yL2xhbWJkYSQxJFR5cGUiLDE3ODcpLEQoNDM2LDIyLHszOjEsMzQ6MSwyMjoxLDQzNjoxfSxfM2UpO3ZhciB4X2UsajBlLGtfZT1GcihtaGUsIkhpZ2hMZXZlbFNvcnRpbmdDcml0ZXJpb24iLDQzNixIcixqcG4saTBuKSxxNnQ7RCg0MzUsMjIsezM6MSwzNDoxLDIyOjEsNDM1OjF9LEEzZSk7dmFyIEVfZSwkMGUsVF9lPUZyKG1oZSwiTG93TGV2ZWxTb3J0aW5nQ3JpdGVyaW9uIiw0MzUsSHIsJHBuLHMwbiksSDZ0LEw2PWtzKE5jLCJJTGF5b3V0TWV0YURhdGFQcm92aWRlciIpO0QoODY0LDEsUGYsZXopLGguaGY9ZnVuY3Rpb24odCl7c24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHBFZSksdmhlKSwiUG9seW9taW5vIFRyYXZlcnNhbCBTdHJhdGVneSIpLCJUcmF2ZXJzYWwgc3RyYXRlZ3kgZm9yIHRyeWluZyBkaWZmZXJlbnQgY2FuZGlkYXRlIHBvc2l0aW9ucyBmb3IgcG9seW9taW5vZXMuIiksRF9lKSwoZzIoKSxwcykpLCRfZSksdW4oKHIxKCksUG4pKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsYkVlKSx2aGUpLCJQb2x5b21pbm8gU2Vjb25kYXJ5IFNvcnRpbmcgQ3JpdGVyaW9uIiksIlBvc3NpYmxlIHNlY29uZGFyeSBzb3J0aW5nIGNyaXRlcmlhIGZvciB0aGUgcHJvY2Vzc2luZyBvcmRlciBvZiBwb2x5b21pbm9lcy4gVGhleSBhcmUgdXNlZCB3aGVuIHBvbHlvbWlub2VzIGFyZSBlcXVhbCBhY2NvcmRpbmcgdG8gdGhlIHByaW1hcnkgc29ydGluZyBjcml0ZXJpb24gSGlnaExldmVsU29ydGluZ0NyaXRlcmlvbi4iKSxMX2UpLHBzKSxUX2UpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsbUVlKSx2aGUpLCJQb2x5b21pbm8gUHJpbWFyeSBTb3J0aW5nIENyaXRlcmlvbiIpLCJQb3NzaWJsZSBwcmltYXJ5IHNvcnRpbmcgY3JpdGVyaWEgZm9yIHRoZSBwcm9jZXNzaW5nIG9yZGVyIG9mIHBvbHlvbWlub2VzLiIpLF9fZSkscHMpLGtfZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCx2RWUpLHZoZSksIkZpbGwgUG9seW9taW5vZXMiKSwiVXNlIHRoZSBQcm9maWxlIEZpbGwgYWxnb3JpdGhtIHRvIGZpbGwgcG9seW9taW5vZXMgdG8gcHJldmVudCBzbWFsbCBwb2x5b21pbm9lcyBmcm9tIGJlaW5nIHBsYWNlZCBpbnNpZGUgb2YgYmlnIHBvbHlvbWlub2VzIHdpdGggbGFyZ2UgaG9sZXMuIE1pZ2h0IGluY3JlYXNlIHBhY2tpbmcgYXJlYS4iKSwoSG4oKSwhMCkpLHlhKSxOcyksdW4oUG4pKSkpfTt2YXIgQ19lLFNfZSxfX2UsQV9lLExfZSxNX2UsRF9lO0kobWhlLCJQb2x5b21pbm9PcHRpb25zIiw4NjQpLEQoMjU3LDIyLHszOjEsMzQ6MSwyMjoxLDI1NzoxfSxMNSk7dmFyIElfZSxPX2UsTl9lLFBfZSxCX2UsRl9lLHowZSxSX2Usal9lLCRfZT1GcihtaGUsIlRyYXZlcnNhbFN0cmF0ZWd5IiwyNTcsSHIsRnduLGEwbiksVjZ0O0QoMjE4LDEsezIxODoxfSxwbSksaC5JYj1mdW5jdGlvbigpe3JldHVybiJORWRnZVtpZD0iK3RoaXMuYisiIHc9Iit0aGlzLmcrIiBkPSIrdGhpcy5hKyJdIn0saC5hPTEsaC5iPTAsaC5jPTAsaC5mPSExLGguZz0wO3ZhciBVNnQ9SShvTCwiTkVkZ2UiLDIxOCk7RCgxODIsMSx7fSxfZiksSShvTCwiTkVkZ2UvTkVkZ2VCdWlsZGVyIiwxODIpLEQoNjYyLDEse30samllKSxJKG9MLCJOR3JhcGgiLDY2MiksRCgxMjUsMSx7MTI1OjF9LE51dCksaC5jPS0xLGguZD0wLGguZT0wLGguaT0tMSxoLmo9ITE7dmFyIHpfZT1JKG9MLCJOTm9kZSIsMTI1KTtEKDgwOCwxLEt3dCxNd2UpLGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5MYz1mdW5jdGlvbigpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24odGhpcywxNikpfSxoLmpkPWZ1bmN0aW9uKHQpeyRtKHRoaXMsdCl9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMTYpfSxoLk9jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbih0aGlzLDE2KSl9LGguYmQ9ZnVuY3Rpb24odCxuKXsrK3RoaXMuYixwdyh0aGlzLmEsdCxuKX0saC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gJHEodGhpcyx0KX0saC5jZD1mdW5jdGlvbih0LG4pe3JldHVybisrdGhpcy5iLFE3ZSh0aGlzLmEsdCxuKX0saC5HYz1mdW5jdGlvbih0KXtyZXR1cm4rK3RoaXMuYixyYSh0aGlzLmEsdCl9LGguJGI9ZnVuY3Rpb24oKXsrK3RoaXMuYixheSh0aGlzLmEuYywwKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gZ2ModGhpcy5hLHQsMCkhPS0xfSxoLkljPWZ1bmN0aW9uKHQpe3JldHVybiBFTih0aGlzLmEsdCl9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIGp0KHRoaXMuYSx0KX0saC5kZD1mdW5jdGlvbih0KXtyZXR1cm4gZ2ModGhpcy5hLHQsMCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmMubGVuZ3RoPT0wfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIGN4KG5ldyBHKHRoaXMuYSkpfSxoLmVkPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5mZD1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLmdkPWZ1bmN0aW9uKHQpe3JldHVybisrdGhpcy5iLHQyKHRoaXMuYSx0KX0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gSXllKHRoaXMsdCl9LGguaGQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4rK3RoaXMuYixyZih0aGlzLmEsdCxuKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYy5sZW5ndGh9LGgua2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3IFpwKHRoaXMuYSx0LG4pfSxoLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIGVIKHRoaXMuYS5jKX0saC5RYz1mdW5jdGlvbih0KXtyZXR1cm4gajEodGhpcy5hLHQpfSxoLmI9MCxJKG9MLCJOTm9kZS9DaGFuZ2VBd2FyZUFycmF5TGlzdCIsODA4KSxEKDI3NSwxLHt9LFNtKSxJKG9MLCJOTm9kZS9OTm9kZUJ1aWxkZXIiLDI3NSksRCgxNjk1LDEse30sTWwpLGguYT0hMSxoLmY9SWksaC5qPTAsSShvTCwiTmV0d29ya1NpbXBsZXgiLDE2OTUpLEQoMTMxNCwxLGZyLE1pZSksaC5DZD1mdW5jdGlvbih0KXtxdnQodGhpcy5hLGwodCw2OTUpLCEwLCExKX0sSShmM3QsIk5vZGVMYWJlbEFuZFNpemVDYWxjdWxhdG9yL2xhbWJkYSQwJFR5cGUiLDEzMTQpLEQoNTY1LDEse30sZV8pLGguYj0hMCxoLmM9ITAsaC5kPSEwLGguZT0hMCxJKGYzdCwiTm9kZU1hcmdpbkNhbGN1bGF0b3IiLDU2NSksRCgyMTcsMSx7MjE3OjF9KSxoLmo9ITEsaC5rPSExO3ZhciBHNnQ9SShldiwiQ2VsbCIsMjE3KTtEKDEyNywyMTcsezEyNzoxLDIxNzoxfSxGcnQpLGguamY9ZnVuY3Rpb24oKXtyZXR1cm4gdEgodGhpcyl9LGgua2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLm4sdGhpcy5hLmErdC5iK3QuY30sSShldiwiQXRvbWljQ2VsbCIsMTI3KSxEKDIzNywyMix7MzoxLDM0OjEsMjI6MSwyMzc6MX0sZ3NlKTt2YXIgR2MsJHUsS2MsczQ9RnIoZXYsIkNvbnRhaW5lckFyZWEiLDIzNyxIcixCMm4sbzBuKSxLNnQ7RCgzMzYsMjE3LGQzdCksSShldiwiQ29udGFpbmVyQ2VsbCIsMzM2KSxEKDE1MzgsMzM2LGQzdCxfMXQpLGguamY9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD0wLHRoaXMuZT90aGlzLmI/dD10aGlzLmIuYjp0aGlzLmFbMV1bMV0mJih0PXRoaXMuYVsxXVsxXS5qZigpKTp0PUU4ZSh0aGlzLEhkdCh0aGlzLCEwKSksdD4wP3QrdGhpcy5uLmQrdGhpcy5uLmE6MH0saC5rZj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG87aWYobz0wLHRoaXMuZSl0aGlzLmI/bz10aGlzLmIuYTp0aGlzLmFbMV1bMV0mJihvPXRoaXMuYVsxXVsxXS5rZigpKTtlbHNlIGlmKHRoaXMuZylvPUU4ZSh0aGlzLEV1ZSh0aGlzLG51bGwsITApKTtlbHNlIGZvcihuPSh0MSgpLGhlKGxlKHM0LDEpLGl0LDIzNywwLFtHYywkdSxLY10pKSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKXQ9bltyXSxvPWIuTWF0aC5tYXgobyxFOGUodGhpcyxFdWUodGhpcyx0LCEwKSkpO3JldHVybiBvPjA/byt0aGlzLm4uYit0aGlzLm4uYzowfSxoLmxmPWZ1bmN0aW9uKCl7dmFyIHQsbixyLGEsbztpZih0aGlzLmcpZm9yKHQ9RXVlKHRoaXMsbnVsbCwhMSkscj0odDEoKSxoZShsZShzNCwxKSxpdCwyMzcsMCxbR2MsJHUsS2NdKSksYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sa2J0KHRoaXMsbix0KTtlbHNlIGZvcihyPSh0MSgpLGhlKGxlKHM0LDEpLGl0LDIzNywwLFtHYywkdSxLY10pKSxhPTAsbz1yLmxlbmd0aDthPG87KythKW49clthXSx0PUV1ZSh0aGlzLG4sITEpLGtidCh0aGlzLG4sdCl9LGgubWY9ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYTtuPXRoaXMuaSx0PXRoaXMubixhPUhkdCh0aGlzLCExKSx4NmUodGhpcywodDEoKSxHYyksbi5kK3QuZCxhKSx4NmUodGhpcyxLYyxuLmQrbi5hLXQuYS1hWzJdLGEpLHI9bi5hLXQuZC10LmEsYVswXT4wJiYoYVswXSs9dGhpcy5kLHItPWFbMF0pLGFbMl0+MCYmKGFbMl0rPXRoaXMuZCxyLT1hWzJdKSx0aGlzLmMuYT1iLk1hdGgubWF4KDAsciksdGhpcy5jLmQ9bi5kK3QuZCsodGhpcy5jLmEtcikvMixhWzFdPWIuTWF0aC5tYXgoYVsxXSxyKSx4NmUodGhpcywkdSxuLmQrdC5kK2FbMF0tKGFbMV0tcikvMixhKX0saC5iPW51bGwsaC5kPTAsaC5lPSExLGguZj0hMSxoLmc9ITE7dmFyIHEwZT0wLGdLPTA7SShldiwiR3JpZENvbnRhaW5lckNlbGwiLDE1MzgpLEQoNDcxLDIyLHszOjEsMzQ6MSwyMjoxLDQ3MToxfSxwc2UpO3ZhciBCYixGZCx2MCxXNnQ9RnIoZXYsIkhvcml6b250YWxMYWJlbEFsaWdubWVudCIsNDcxLEhyLFAybixjMG4pLFk2dDtEKDMxNCwyMTcsezIxNzoxLDMxNDoxfSx1b3QseWh0LG5vdCksaC5qZj1mdW5jdGlvbigpe3JldHVybiBIaXQodGhpcyl9LGgua2Y9ZnVuY3Rpb24oKXtyZXR1cm4gajRlKHRoaXMpfSxoLmE9MCxoLmM9ITE7dmFyIHZPbj1JKGV2LCJMYWJlbENlbGwiLDMxNCk7RCgyNTIsMzM2LHsyMTc6MSwzMzY6MSwyNTI6MX0sREEpLGguamY9ZnVuY3Rpb24oKXtyZXR1cm4gdFAodGhpcyl9LGgua2Y9ZnVuY3Rpb24oKXtyZXR1cm4gblAodGhpcyl9LGgubGY9ZnVuY3Rpb24oKXtobGUodGhpcyl9LGgubWY9ZnVuY3Rpb24oKXtmbGUodGhpcyl9LGguYj0wLGguYz0wLGguZD0hMSxJKGV2LCJTdHJpcENvbnRhaW5lckNlbGwiLDI1MiksRCgxNjkxLDEsdGksWGMpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGN1bihsKHQsMjE3KSl9LEkoZXYsIlN0cmlwQ29udGFpbmVyQ2VsbC9sYW1iZGEkMCRUeXBlIiwxNjkxKSxEKDE2OTIsMSx7fSxCYyksaC5ZZT1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDIxNykua2YoKX0sSShldiwiU3RyaXBDb250YWluZXJDZWxsL2xhbWJkYSQxJFR5cGUiLDE2OTIpLEQoMTY5MywxLHRpLGphKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiB1dW4obCh0LDIxNykpfSxJKGV2LCJTdHJpcENvbnRhaW5lckNlbGwvbGFtYmRhJDIkVHlwZSIsMTY5MyksRCgxNjk0LDEse30sT3UpLGguWWU9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwyMTcpLmpmKCl9LEkoZXYsIlN0cmlwQ29udGFpbmVyQ2VsbC9sYW1iZGEkMyRUeXBlIiwxNjk0KSxEKDQ3MiwyMix7MzoxLDM0OjEsMjI6MSw0NzI6MX0sYnNlKTt2YXIgdzAsRmIsYTEsWDZ0PUZyKGV2LCJWZXJ0aWNhbExhYmVsQWxpZ25tZW50Iiw0NzIsSHIsTjJuLHUwbiksUTZ0O0QoODAwLDEse30semtlKSxoLmM9MCxoLmQ9MCxoLms9MCxoLnM9MCxoLnQ9MCxoLnY9ITEsaC53PTAsaC5EPSExLEkodEcsIk5vZGVDb250ZXh0Iiw4MDApLEQoMTUzNiwxLGlpLFNhKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRudChsKHQsNjQpLGwobiw2NCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodEcsIk5vZGVDb250ZXh0LzBtZXRob2RyZWYkY29tcGFyZVBvcnRTaWRlcyRUeXBlIiwxNTM2KSxEKDE1MzcsMSxpaSxQbyksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBSeG4obCh0LDExNyksbChuLDExNykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodEcsIk5vZGVDb250ZXh0LzFtZXRob2RyZWYkY29tcGFyZVBvcnRDb250ZXh0cyRUeXBlIiwxNTM3KSxEKDE2NCwyMix7MzoxLDM0OjEsMjI6MSwxNjQ6MX0sb2YpO3ZhciBKNnQsWjZ0LGU3dCx0N3Qsbjd0LHI3dCxpN3Qsczd0LGE3dCxvN3QsYzd0LHU3dCxsN3QsaDd0LGY3dCxkN3QsZzd0LHA3dCxiN3QsbTd0LHY3dCxIMGUsdzd0PUZyKHRHLCJOb2RlTGFiZWxMb2NhdGlvbiIsMTY0LEhyLGV1ZSxsMG4pLHk3dDtEKDExNywxLHsxMTc6MX0sYzJ0KSxoLmE9ITEsSSh0RywiUG9ydENvbnRleHQiLDExNyksRCgxNTQxLDEsZnIsRmMpLGguQ2Q9ZnVuY3Rpb24odCl7dlplKGwodCwzMTQpKX0sSShEUCxnM3QsMTU0MSksRCgxNTQyLDEsdGkseGEpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuISFsKHQsMTE3KS5jfSxJKERQLHAzdCwxNTQyKSxEKDE1NDMsMSxmcixCYSksaC5DZD1mdW5jdGlvbih0KXt2WmUobCh0LDExNykuYyl9LEkoRFAsIkxhYmVsUGxhY2VyL2xhbWJkYSQyJFR5cGUiLDE1NDMpO3ZhciBxX2U7RCgxNTQwLDEsZnIsZ2EpLGguQ2Q9ZnVuY3Rpb24odCl7cHkoKSx6Y24obCh0LDExNykpfSxJKERQLCJOb2RlTGFiZWxBbmRTaXplVXRpbGl0aWVzL2xhbWJkYSQwJFR5cGUiLDE1NDApLEQoODAxLDEsZnIsdjRlKSxoLkNkPWZ1bmN0aW9uKHQpe3Rsbih0aGlzLmIsdGhpcy5jLHRoaXMuYSxsKHQsMTg3KSl9LGguYT0hMSxoLmM9ITEsSShEUCwiTm9kZUxhYmVsQ2VsbENyZWF0b3IvbGFtYmRhJDAkVHlwZSIsODAxKSxEKDE1MzksMSxmcixEaWUpLGguQ2Q9ZnVuY3Rpb24odCl7VmNuKHRoaXMuYSxsKHQsMTg3KSl9LEkoRFAsIlBvcnRDb250ZXh0Q3JlYXRvci9sYW1iZGEkMCRUeXBlIiwxNTM5KTt2YXIgcEs7RCgxOTAyLDEse30sa2gpLEkodVQsIkdyZWVkeVJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIiLDE5MDIpLEQoMTkwMywxLGlpLGx1KSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIE9obihsKHQsMjI2KSxsKG4sMjI2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh1VCwiR3JlZWR5UmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci8wbWV0aG9kcmVmJGNvbXBhcmVCeVlDb29yZGluYXRlJFR5cGUiLDE5MDMpLEQoMTg0OSwxLHt9LHpRZSksaC5hPTUsaC5lPTAsSSh1VCwiUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3ZlciIsMTg0OSksRCgxODUwLDEsaWksbzUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gTmhuKGwodCwyMjYpLGwobiwyMjYpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHVULCJSZWN0YW5nbGVTdHJpcE92ZXJsYXBSZW1vdmVyLzBtZXRob2RyZWYkY29tcGFyZUxlZnRSZWN0YW5nbGVCb3JkZXJzJFR5cGUiLDE4NTApLEQoMTg1MiwxLGlpLFdoKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEVnbihsKHQsMjI2KSxsKG4sMjI2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh1VCwiUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci8xbWV0aG9kcmVmJGNvbXBhcmVSaWdodFJlY3RhbmdsZUJvcmRlcnMkVHlwZSIsMTg1MiksRCg0MTcsMjIsezM6MSwzNDoxLDIyOjEsNDE3OjF9LHVxKTt2YXIgckIsVjBlLFUwZSxpQix4N3Q9RnIodVQsIlJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIvT3ZlcmxhcFJlbW92YWxEaXJlY3Rpb24iLDQxNyxIcixZYm4saDBuKSxrN3Q7RCgyMjYsMSx7MjI2OjF9LERhZSksSSh1VCwiUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci9SZWN0YW5nbGVOb2RlIiwyMjYpLEQoMTg1MSwxLGZyLElpZSksaC5DZD1mdW5jdGlvbih0KXtsN24odGhpcy5hLGwodCwyMjYpKX0sSSh1VCwiUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci9sYW1iZGEkMSRUeXBlIiwxODUxKSxEKDEzMjMsMSxpaSxvZCksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBNTG4obCh0LDE3NiksbChuLDE3NikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoTWQsIlBvbHlvbWlub0NvbXBhY3Rvci9Db3JuZXJDYXNlc0dyZWF0ZXJUaGFuUmVzdENvbXBhcmF0b3IiLDEzMjMpLEQoMTMyNiwxLHt9LEdkKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzM0KS5hfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQwJFR5cGUiLDEzMjYpLEQoMTMyNywxLHRpLGNkKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzMyKS5hfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQxJFR5cGUiLDEzMjcpLEQoMTMyOCwxLHRpLEtkKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzMyKS5hfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQyJFR5cGUiLDEzMjgpLEQoMTMyMSwxLGlpLCRnKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGFfbihsKHQsMTc2KSxsKG4sMTc2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShNZCwiUG9seW9taW5vQ29tcGFjdG9yL01pbk51bU9mRXh0ZW5zaW9uRGlyZWN0aW9uc0NvbXBhcmF0b3IiLDEzMjEpLEQoMTMyNCwxLHt9LGFzKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzM0KS5hfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvTWluTnVtT2ZFeHRlbnNpb25EaXJlY3Rpb25zQ29tcGFyYXRvci9sYW1iZGEkMCRUeXBlIiwxMzI0KSxEKDc4MSwxLGlpLHduKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHEzbihsKHQsMTc2KSxsKG4sMTc2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShNZCwiUG9seW9taW5vQ29tcGFjdG9yL01pbk51bU9mRXh0ZW5zaW9uc0NvbXBhcmF0b3IiLDc4MSksRCgxMzE5LDEsaWksWnIpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWHduKGwodCwzMzApLGwobiwzMzApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvTWluUGVyaW1ldGVyQ29tcGFyYXRvciIsMTMxOSksRCgxMzIwLDEsaWksWmkpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gTjZuKGwodCwzMzApLGwobiwzMzApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvTWluUGVyaW1ldGVyQ29tcGFyYXRvcldpdGhTaGFwZSIsMTMyMCksRCgxMzIyLDEsaWksbnUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gX19uKGwodCwxNzYpLGwobiwxNzYpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvU2luZ2xlRXh0ZW5zaW9uU2lkZUdyZWF0ZXJUaGFuUmVzdENvbXBhcmF0b3IiLDEzMjIpLEQoMTMyNSwxLHt9LHZ1KSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzM0KS5hfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvU2luZ2xlRXh0ZW5zaW9uU2lkZUdyZWF0ZXJUaGFuUmVzdENvbXBhcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTMyNSksRCg3ODIsMSx7fSxMM2UpLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gemJuKHRoaXMsbCh0LDQyKSxsKG4sMTc2KSl9LEkoTWQsIlN1Y2Nlc3NvckNvbWJpbmF0aW9uIiw3ODIpLEQoNjQ5LDEse30sRGwpLGguVmU9ZnVuY3Rpb24odCxuKXt2YXIgcjtyZXR1cm4gckVuKChyPWwodCw0MiksbChuLDE3NikscikpfSxJKE1kLCJTdWNjZXNzb3JKaXR0ZXIiLDY0OSksRCg2NDgsMSx7fSxZaCksaC5WZT1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiBIQ24oKHI9bCh0LDQyKSxsKG4sMTc2KSxyKSl9LEkoTWQsIlN1Y2Nlc3NvckxpbmVCeUxpbmUiLDY0OCksRCg1NzMsMSx7fSx3MSksaC5WZT1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiByVG4oKHI9bCh0LDQyKSxsKG4sMTc2KSxyKSl9LEkoTWQsIlN1Y2Nlc3Nvck1hbmhhdHRhbiIsNTczKSxEKDEzNDQsMSx7fSwkMCksaC5WZT1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiBkQ24oKHI9bCh0LDQyKSxsKG4sMTc2KSxyKSl9LEkoTWQsIlN1Y2Nlc3Nvck1heE5vcm1XaW5kaW5nSW5NYXRoUG9zU2Vuc2UiLDEzNDQpLEQoNDA5LDEse30sRTUpLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdTVlKHRoaXMsdCxuKX0saC5jPSExLGguZD0hMSxoLmU9ITEsaC5mPSExLEkoTWQsIlN1Y2Nlc3NvclF1YWRyYW50c0dlbmVyaWMiLDQwOSksRCgxMzQ1LDEse30sV2kpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwzMzQpLmF9LEkoTWQsIlN1Y2Nlc3NvclF1YWRyYW50c0dlbmVyaWMvbGFtYmRhJDAkVHlwZSIsMTM0NSksRCgzMzIsMjIsezM6MSwzNDoxLDIyOjEsMzMyOjF9LGxxKSxoLmE9ITE7dmFyIHNCLGFCLG9CLGNCLEU3dD1GcihyRyxrRWUsMzMyLEhyLEtibixmMG4pLFQ3dDtEKDEzMTcsMSx7fSksaC5JYj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG8sZjtmb3Iocj0iICIsdD1wdCgwKSxvPTA7bzx0aGlzLm87bysrKXIrPSIiK3QuYSx0PXB0KENydCh0LmEpKTtmb3Iocis9YApgLHQ9cHQoMCksZj0wO2Y8dGhpcy5wO2YrKyl7Zm9yKHIrPSIiK3QuYSx0PXB0KENydCh0LmEpKSxhPTA7YTx0aGlzLm87YSsrKW49bmNlKHRoaXMsYSxmKSxpdShuLDApPT0wP3IrPSJfIjppdShuLDEpPT0wP3IrPSJYIjpyKz0iMCI7cis9YApgfXJldHVybiB0ZihyLDAsci5sZW5ndGgtMSl9LGgubz0wLGgucD0wLEkockcsIlR3b0JpdEdyaWQiLDEzMTcpLEQoMzMwLDEzMTcsezMzMDoxfSxJOGUpLGguaj0wLGguaz0wLEkockcsIlBsYW5hckdyaWQiLDMzMCksRCgxNzYsMzMwLHszMzA6MSwxNzY6MX0pLGguZz0wLGguaT0wLEkockcsIlBvbHlvbWlubyIsMTc2KTt2YXIgd09uPWtzKElQLG0zdCk7RCgxMzcsMSxFRWUsQnMpLGgucWY9ZnVuY3Rpb24odCxuKXtyZXR1cm4gX04odGhpcyx0LG4pfSxoLm5mPWZ1bmN0aW9uKCl7cmV0dXJuIG9zdCh0aGlzKX0saC5vZj1mdW5jdGlvbih0KXtyZXR1cm4gUSh0aGlzLHQpfSxoLnBmPWZ1bmN0aW9uKHQpe3JldHVybiBucyh0aGlzLHQpfSxJKElQLCJNYXBQcm9wZXJ0eUhvbGRlciIsMTM3KSxEKDEzMTgsMTM3LEVFZSxsYnQpLEkockcsIlBvbHlvbWlub2VzIiwxMzE4KTt2YXIgQzd0PSExLFJMLEhfZTtEKDE4MjgsMSxmcixRYSksaC5DZD1mdW5jdGlvbih0KXtmdnQobCh0LDIyNSkpfSxJKEl4LCJEZXB0aEZpcnN0Q29tcGFjdGlvbi8wbWV0aG9kcmVmJGNvbXBhY3RUcmVlJFR5cGUiLDE4MjgpLEQoODI1LDEsZnIsTXopLGguQ2Q9ZnVuY3Rpb24odCl7VWduKHRoaXMuYSxsKHQsMjI1KSl9LEkoSXgsIkRlcHRoRmlyc3RDb21wYWN0aW9uL2xhbWJkYSQxJFR5cGUiLDgyNSksRCgxODI5LDEsZnIsYml0KSxoLkNkPWZ1bmN0aW9uKHQpe1c1bih0aGlzLmEsdGhpcy5iLHRoaXMuYyxsKHQsMjI1KSl9LEkoSXgsIkRlcHRoRmlyc3RDb21wYWN0aW9uL2xhbWJkYSQyJFR5cGUiLDE4MjkpO3ZhciBqTCxWX2U7RCg2OCwxLHs2ODoxfSxrb3QpLEkoSXgsIk5vZGUiLDY4KSxEKDEyMTQsMSx7fSx4bnQpLEkoSXgsIlNjYW5saW5lT3ZlcmxhcENoZWNrIiwxMjE0KSxEKDEyMTUsMSx7NjkzOjF9LFhhdCksaC5iZj1mdW5jdGlvbih0KXtFZm4odGhpcyxsKHQsNDUxKSl9LEkoSXgsIlNjYW5saW5lT3ZlcmxhcENoZWNrL092ZXJsYXBzU2NhbmxpbmVIYW5kbGVyIiwxMjE1KSxEKDEyMTYsMSxpaSxCaSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBENG4obCh0LDY4KSxsKG4sNjgpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKEl4LCJTY2FubGluZU92ZXJsYXBDaGVjay9PdmVybGFwc1NjYW5saW5lSGFuZGxlci9sYW1iZGEkMCRUeXBlIiwxMjE2KSxEKDQ1MSwxLHs0NTE6MX0sTTNlKSxoLmE9ITEsSShJeCwiU2NhbmxpbmVPdmVybGFwQ2hlY2svVGltZXN0YW1wIiw0NTEpLEQoMTIxNywxLGlpLE51KSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGg4bihsKHQsNDUxKSxsKG4sNDUxKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShJeCwiU2NhbmxpbmVPdmVybGFwQ2hlY2svbGFtYmRhJDAkVHlwZSIsMTIxNyksRCg1NTcsMSx7fSxPdCksSSh2M3QsIlNWR0ltYWdlIiw1NTcpLEQoMzM0LDEsezMzNDoxfSxtNGUpLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iKCIrdGhpcy5hK0NvK3RoaXMuYitDbyt0aGlzLmMrIikifSxJKHYzdCwiVW5pcXVlVHJpcGxlIiwzMzQpLEQoMjA1LDEsdHYpLEkodjYsIkFic3RyYWN0TGF5b3V0UHJvdmlkZXIiLDIwNSksRCgxMTE0LDIwNSx0dixXMyksaC5yZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmO3N3aXRjaChuLlVnKHczdCwxKSx0aGlzLmE9emUoR2UoYXQodCwoSUEoKSxYX2UpKSkpLFAxKHQsSzBlKSYmKG89ZWkoYXQodCxLMGUpKSxyPWlsZShoRSgpLG8pLHImJihhPWwoR08oci5mKSwyMDUpLGEucmYodCxuLmVoKDEpKSkpLGY9bmV3IHFjdCh0aGlzLmEpLHRoaXMuYj1hRG4oZix0KSxsKGF0KHQsKExjZSgpLEdfZSkpLDQ4OSkuZyl7Y2FzZSAwOmtFbihuZXcgS3QsdGhpcy5iKSxIaSh0LHZLLFEodGhpcy5iLHZLKSk7YnJlYWs7ZGVmYXVsdDpWZygpfXhEbihmKSxIaSh0LFdfZSx0aGlzLmIpLG4uVmcoKX0saC5hPTAsSSh5M3QsIkRpc0NvTGF5b3V0UHJvdmlkZXIiLDExMTQpLEQoMTIwOCwxLHt9LEt0KSxoLmM9ITEsaC5lPTAsaC5mPTAsSSh5M3QsIkRpc0NvUG9seW9taW5vQ29tcGFjdG9yIiwxMjA4KSxEKDU2NywxLHs1Njc6MX0sc3N0KSxoLmI9ITAsSShzRywiRENDb21wb25lbnQiLDU2NyksRCg0MDYsMjIsezM6MSwzNDoxLDIyOjEsNDA2OjF9LGhxKSxoLmE9ITE7dmFyIGJLLHVCLG1LLGxCLFM3dD1GcihzRywiRENEaXJlY3Rpb24iLDQwNixIcixXYm4sZDBuKSxfN3Q7RCgyNzIsMTM3LHszOjEsMjcyOjEsOTY6MSwxMzc6MX0sR3VlKSxJKHNHLCJEQ0VsZW1lbnQiLDI3MiksRCg0MDcsMSx7NDA3OjF9LG54ZSksaC5jPTAsSShzRywiRENFeHRlbnNpb24iLDQwNyksRCg3NjIsMTM3LEVFZSxHSmUpLEkoc0csIkRDR3JhcGgiLDc2MiksRCg0ODksMjIsezM6MSwzNDoxLDIyOjEsNDg5OjF9LGdydCk7dmFyIEcwZSxVX2U9RnIoU2hlLFRFZSw0ODksSHIsbnBuLGcwbiksQTd0O0QoODY1LDEsUGYsdHopLGguaGY9ZnVuY3Rpb24odCl7c24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LENFZSkseDN0KSwiQ29ubmVjdGVkIENvbXBvbmVudHMgQ29tcGFjdGlvbiBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3IgcGFja2luZyBkaWZmZXJlbnQgY29ubmVjdGVkIGNvbXBvbmVudHMgaW4gb3JkZXIgdG8gc2F2ZSBzcGFjZSBhbmQgZW5oYW5jZSByZWFkYWJpbGl0eSBvZiBhIGdyYXBoLiIpLEtfZSksKGcyKCkscHMpKSxVX2UpLHVuKChyMSgpLFBuKSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LFNFZSkseDN0KSwiQ29ubmVjdGVkIENvbXBvbmVudHMgTGF5b3V0IEFsZ29yaXRobSIpLCJBIGxheW91dCBhbGdvcml0aG0gdGhhdCBpcyB0byBiZSBhcHBsaWVkIHRvIGVhY2ggY29ubmVjdGVkIGNvbXBvbmVudCBiZWZvcmUgdGhlIGNvbXBvbmVudHMgdGhlbXNlbHZlcyBhcmUgY29tcGFjdGVkLiBJZiB1bnNwZWNpZmllZCwgdGhlIHBvc2l0aW9ucyBvZiB0aGUgY29tcG9uZW50cycgbm9kZXMgYXJlIG5vdCBhbHRlcmVkLiIpLEo2KSx6dCksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxfRWUpLCJkZWJ1ZyIpLCJEQ0dyYXBoIiksIkFjY2VzcyB0byB0aGUgRENHcmFwaCBpcyBpbnRlbmRlZCBmb3IgdGhlIGRlYnVnIHZpZXcsIiksWDEpLHdhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LEFFZSksImRlYnVnIiksIkxpc3Qgb2YgUG9seW9taW5vZXMiKSwiQWNjZXNzIHRvIHRoZSBwb2x5b21pbm9lcyBpcyBpbnRlbmRlZCBmb3IgdGhlIGRlYnVnIHZpZXcsIiksWDEpLHdhKSx1bihQbikpKSksUW10KChuZXcgbnosdCkpfTt2YXIgTDd0LEdfZSxLX2UsTTd0LEQ3dDtJKFNoZSwiRGlzQ29NZXRhRGF0YVByb3ZpZGVyIiw4NjUpLEQoMTAxMCwxLFBmLG56KSxoLmhmPWZ1bmN0aW9uKHQpe1FtdCh0KX07dmFyIEk3dCxLMGUsTzd0LFdfZSx2SyxXMGUsWV9lLE43dCxQN3QsQjd0LEY3dCxYX2U7SShTaGUsIkRpc0NvT3B0aW9ucyIsMTAxMCksRCgxMDExLDEse30sejApLGguc2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgVzMsdH0saC50Zj1mdW5jdGlvbih0KXt9LEkoU2hlLCJEaXNDb09wdGlvbnMvRGlzY29GYWN0b3J5IiwxMDExKSxEKDU2OCwxNzYsezMzMDoxLDE3NjoxLDU2ODoxfSxHMnQpLGguYT0wLGguYj0wLGguYz0wLGguZD0wLEkoIm9yZy5lY2xpcHNlLmVsay5hbGcuZGlzY28uc3RydWN0dXJlcyIsIkRDUG9seW9taW5vIiw1NjgpO3ZhciBZMGUsWDBlLHdLO0QoMTI4NiwxLHRpLEJwKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBzeWUodCl9LEkodzYsIkVsa0dyYXBoQ29tcG9uZW50c1Byb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxMjg2KSxEKDEyODcsMSx7fSxZMyksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gdHgoKSxjZyhsKHQsNzQpKX0sSSh3NiwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDEyODcpLEQoMTI4OCwxLHRpLCQ5KSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiB4ZG4obCh0LDc0KSl9LEkodzYsIkVsa0dyYXBoQ29tcG9uZW50c1Byb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxMjg4KSxEKDEyODksMSx7fSxjNSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gdHgoKSxFYihsKHQsNzQpKX0sSSh3NiwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQzJFR5cGUiLDEyODkpLEQoMTI5MCwxLHRpLEVoKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBrZG4obCh0LDc0KSl9LEkodzYsIkVsa0dyYXBoQ29tcG9uZW50c1Byb2Nlc3Nvci9sYW1iZGEkNCRUeXBlIiwxMjkwKSxEKDEyOTEsMSx0aSx5ayksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gcDJuKHRoaXMuYSxsKHQsNzQpKX0sSSh3NiwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQ1JFR5cGUiLDEyOTEpLEQoMTI5MiwxLHt9LFVJKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBQZ24odGhpcy5hLGwodCw3NCkpfSxJKHc2LCJFbGtHcmFwaENvbXBvbmVudHNQcm9jZXNzb3IvbGFtYmRhJDYkVHlwZSIsMTI5MiksRCgxMjA1LDEse30scWN0KSxoLmE9MCxJKHc2LCJFbGtHcmFwaFRyYW5zZm9ybWVyIiwxMjA1KSxEKDEyMDYsMSx7fSx6ZyksaC5ZZD1mdW5jdGlvbih0LG4pe29Fbih0aGlzLGwodCwxNjcpLGwobiwyNzIpKX0sSSh3NiwiRWxrR3JhcGhUcmFuc2Zvcm1lci9PZmZzZXRBcHBsaWVyIiwxMjA2KSxEKDEyMDcsMSxmcix0XyksaC5DZD1mdW5jdGlvbih0KXttaG4odGhpcyxsKHQsOCkpfSxJKHc2LCJFbGtHcmFwaFRyYW5zZm9ybWVyL09mZnNldEFwcGxpZXIvT2ZmU2V0VG9DaGFpbkFwcGxpZXIiLDEyMDcpLEQoNzYwLDEse30sYm0pLEkoTWhlLExFZSw3NjApLEQoMTE5NSwxLGlpLHo5KSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFlrbihsKHQsMjM1KSxsKG4sMjM1KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShNaGUsRTN0LDExOTUpLEQoMTE5NiwxLGZyLF9ldCksaC5DZD1mdW5jdGlvbih0KXtaMm4odGhpcy5iLHRoaXMuYSxsKHQsMjUwKSl9LEkoTWhlLE1FZSwxMTk2KSxEKDczOCwyMDUsdHYsRHdlKSxoLnJmPWZ1bmN0aW9uKHQsbil7VzJ0KHRoaXMsdCxuKX0sSShNaGUsIkZvcmNlTGF5b3V0UHJvdmlkZXIiLDczOCksRCgzMDksMTM3LHszOjEsMzA5OjEsOTY6MSwxMzc6MX0pLEkoT1AsIkZQYXJ0aWNsZSIsMzA5KSxEKDI1MCwzMDksezM6MSwyNTA6MSwzMDk6MSw5NjoxLDEzNzoxfSxWc3QpLGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5hPyh0PWdjKHRoaXMuYS5hLHRoaXMsMCksdD49MD8iYiIrdCsiWyIrQ29lKHRoaXMuYSkrIl0iOiJiWyIrQ29lKHRoaXMuYSkrIl0iKToiYl8iK2Z3KHRoaXMpfSxJKE9QLCJGQmVuZHBvaW50IiwyNTApLEQoMjkwLDEzNyx7MzoxLDI5MDoxLDk2OjEsMTM3OjF9LGpydCksaC5JYj1mdW5jdGlvbigpe3JldHVybiBDb2UodGhpcyl9LEkoT1AsIkZFZGdlIiwyOTApLEQoMjM1LDEzNyx7MzoxLDIzNToxLDk2OjEsMTM3OjF9LEtIKTt2YXIgeU9uPUkoT1AsIkZHcmFwaCIsMjM1KTtEKDQ1NCwzMDksezM6MSw0NTQ6MSwzMDk6MSw5NjoxLDEzNzoxfSx6Y3QpLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iPT1udWxsfHx0aGlzLmIubGVuZ3RoPT0wPyJsWyIrQ29lKHRoaXMuYSkrIl0iOiJsXyIrdGhpcy5ifSxJKE9QLCJGTGFiZWwiLDQ1NCksRCgxNTMsMzA5LHszOjEsMTUzOjEsMzA5OjEsOTY6MSwxMzc6MX0sd250KSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFg1ZSh0aGlzKX0saC5hPTAsSShPUCwiRk5vZGUiLDE1MyksRCgyMTAwLDEse30pLGgudmY9ZnVuY3Rpb24odCl7eWtlKHRoaXMsdCl9LGgud2Y9ZnVuY3Rpb24oKXtxZHQodGhpcyl9LGguZD0wLEkoREVlLCJBYnN0cmFjdEZvcmNlTW9kZWwiLDIxMDApLEQoNjQxLDIxMDAsezY0MToxfSxqZnQpLGgudWY9ZnVuY3Rpb24odCxuKXt2YXIgcixhLG8sZixnO3JldHVybiBwdnQodGhpcy5mLHQsbiksbz1tYShKYShuLmQpLHQuZCksZz1iLk1hdGguc3FydChvLmEqby5hK28uYipvLmIpLGE9Yi5NYXRoLm1heCgwLGctZUEodC5lKS8yLWVBKG4uZSkvMikscj1RcHQodGhpcy5lLHQsbikscj4wP2Y9LXlnbihhLHRoaXMuYykqcjpmPVlobihhLHRoaXMuYikqbChRKHQsKGIwKCkscXgpKSwxNykuYSxtZChvLGYvZyksb30saC52Zj1mdW5jdGlvbih0KXt5a2UodGhpcyx0KSx0aGlzLmE9bChRKHQsKGIwKCkseEspKSwxNykuYSx0aGlzLmM9emUoR2UoUSh0LGtLKSkpLHRoaXMuYj16ZShHZShRKHQsSjBlKSkpfSxoLnhmPWZ1bmN0aW9uKHQpe3JldHVybiB0PHRoaXMuYX0saC5hPTAsaC5iPTAsaC5jPTAsSShERWUsIkVhZGVzTW9kZWwiLDY0MSksRCg2NDIsMjEwMCx7NjQyOjF9LFJpdCksaC51Zj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGc7cmV0dXJuIHB2dCh0aGlzLmYsdCxuKSxvPW1hKEphKG4uZCksdC5kKSxnPWIuTWF0aC5zcXJ0KG8uYSpvLmErby5iKm8uYiksYT1iLk1hdGgubWF4KDAsZy1lQSh0LmUpLzItZUEobi5lKS8yKSxmPVhobihhLHRoaXMuYSkqbChRKHQsKGIwKCkscXgpKSwxNykuYSxyPVFwdCh0aGlzLmUsdCxuKSxyPjAmJihmLT1pdW4oYSx0aGlzLmEpKnIpLG1kKG8sZip0aGlzLmIvZyksb30saC52Zj1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdztmb3IoeWtlKHRoaXMsdCksdGhpcy5iPXplKEdlKFEodCwoYjAoKSxaMGUpKSkpLHRoaXMuYz10aGlzLmIvbChRKHQseEspLDE3KS5hLGE9dC5lLmMubGVuZ3RoLGY9MCxvPTAsdz1uZXcgRyh0LmUpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxNTMpLGYrPWcuZS5hLG8rPWcuZS5iO249ZipvLHI9emUoR2UoUSh0LGtLKSkpKkgxLHRoaXMuYT1iLk1hdGguc3FydChuLygyKmEpKSpyfSxoLndmPWZ1bmN0aW9uKCl7cWR0KHRoaXMpLHRoaXMuYi09dGhpcy5jfSxoLnhmPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmI+MH0saC5hPTAsaC5iPTAsaC5jPTAsSShERWUsIkZydWNodGVybWFuUmVpbmdvbGRNb2RlbCIsNjQyKSxEKDg2MCwxLFBmLEtTKSxoLmhmPWZ1bmN0aW9uKHQpe3NuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxhRyksIiIpLCJGb3JjZSBNb2RlbCIpLCJEZXRlcm1pbmVzIHRoZSBtb2RlbCBmb3IgZm9yY2UgY2FsY3VsYXRpb24uIiksUV9lKSwoZzIoKSxwcykpLEpfZSksdW4oKHIxKCksUG4pKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsSUVlKSwiIiksIkl0ZXJhdGlvbnMiKSwiVGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9uIHRoZSBmb3JjZSBtb2RlbC4iKSxwdCgzMDApKSxUYykscm8pLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsT0VlKSwiIiksIlJlcHVsc2l2ZSBQb3dlciIpLCJEZXRlcm1pbmVzIGhvdyBtYW55IGJlbmQgcG9pbnRzIGFyZSBhZGRlZCB0byB0aGUgZWRnZTsgc3VjaCBiZW5kIHBvaW50cyBhcmUgcmVnYXJkZWQgYXMgcmVwZWxsaW5nIHBhcnRpY2xlcyBpbiB0aGUgZm9yY2UgbW9kZWwiKSxwdCgwKSksVGMpLHJvKSx1bih6ZCkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LERoZSksIiIpLCJGUiBUZW1wZXJhdHVyZSIpLCJUaGUgdGVtcGVyYXR1cmUgaXMgdXNlZCBhcyBhIHNjYWxpbmcgZmFjdG9yIGZvciBwYXJ0aWNsZSBkaXNwbGFjZW1lbnRzLiIpLERkKSxmbyksdGEpLHVuKFBuKSkpKSxRcyh0LERoZSxhRyxWN3QpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxJaGUpLCIiKSwiRWFkZXMgUmVwdWxzaW9uIiksIkZhY3RvciBmb3IgcmVwdWxzaXZlIGZvcmNlcyBpbiBFYWRlcycgbW9kZWwuIiksNSksZm8pLHRhKSx1bihQbikpKSksUXModCxJaGUsYUcsejd0KSxyd3QoKG5ldyBXUyx0KSl9O3ZhciBSN3Qsajd0LFFfZSwkN3Qsejd0LHE3dCxIN3QsVjd0O0kodUwsIkZvcmNlTWV0YURhdGFQcm92aWRlciIsODYwKSxEKDQzMiwyMix7MzoxLDM0OjEsMjI6MSw0MzI6MX0sRDNlKTt2YXIgUTBlLHlLLEpfZT1Gcih1TCwiRm9yY2VNb2RlbFN0cmF0ZWd5Iiw0MzIsSHIsenBuLHAwbiksVTd0O0QoYjIsMSxQZixXUyksaC5oZj1mdW5jdGlvbih0KXtyd3QodCl9O3ZhciBHN3QsSzd0LFpfZSx4SyxlQWUsVzd0LFk3dCxYN3QsUTd0LHRBZSxKN3QsbkFlLHJBZSxaN3QscXgsZTh0LEowZSxpQWUsdDh0LG44dCxrSyxaMGUscjh0LGk4dCxzOHQsc0FlLGE4dDtJKHVMLCJGb3JjZU9wdGlvbnMiLGIyKSxEKDEwMDEsMSx7fSxsZCksaC5zZj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PW5ldyBEd2UsdH0saC50Zj1mdW5jdGlvbih0KXt9LEkodUwsIkZvcmNlT3B0aW9ucy9Gb3JjZUZhY3RvcnkiLDEwMDEpO3ZhciBoQiwkTCxIeCxFSztEKDg2MSwxLFBmLHJ6KSxoLmhmPWZ1bmN0aW9uKHQpe3NuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxQRWUpLCIiKSwiRml4ZWQgUG9zaXRpb24iKSwiUHJldmVudCB0aGF0IHRoZSBub2RlIGlzIG1vdmVkIGJ5IHRoZSBsYXlvdXQgYWxnb3JpdGhtLiIpLChIbigpLCExKSksKGcyKCkseWEpKSxOcyksdW4oKHIxKCksaGEpKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsQkVlKSwiIiksIkRlc2lyZWQgRWRnZSBMZW5ndGgiKSwiRWl0aGVyIHNwZWNpZmllZCBmb3IgcGFyZW50IG5vZGVzIG9yIGZvciBpbmRpdmlkdWFsIGVkZ2VzLCB3aGVyZSB0aGUgbGF0dGVyIHRha2VzIGhpZ2hlciBwcmVjZWRlbmNlLiIpLDEwMCksZm8pLHRhKSxycyhQbixoZShsZSh4ZywxKSxpdCwxNzAsMCxbemRdKSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEZFZSksIiIpLCJMYXlvdXQgRGltZW5zaW9uIiksIkRpbWVuc2lvbnMgdGhhdCBhcmUgcGVybWl0dGVkIHRvIGJlIGFsdGVyZWQgZHVyaW5nIGxheW91dC4iKSxhQWUpLHBzKSxkQWUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsUkVlKSwiIiksIlN0cmVzcyBFcHNpbG9uIiksIlRlcm1pbmF0aW9uIGNyaXRlcmlvbiBmb3IgdGhlIGl0ZXJhdGl2ZSBwcm9jZXNzLiIpLERkKSxmbyksdGEpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsakVlKSwiIiksIkl0ZXJhdGlvbiBMaW1pdCIpLCJNYXhpbXVtIG51bWJlciBvZiBwZXJmb3JtZWQgaXRlcmF0aW9ucy4gVGFrZXMgaGlnaGVyIHByZWNlZGVuY2UgdGhhbiAnZXBzaWxvbicuIikscHQoSWkpKSxUYykscm8pLHVuKFBuKSkpKSxEdnQoKG5ldyBpeix0KSl9O3ZhciBvOHQsYzh0LGFBZSx1OHQsbDh0LGg4dDtJKHVMLCJTdHJlc3NNZXRhRGF0YVByb3ZpZGVyIiw4NjEpLEQoMTAwNCwxLFBmLGl6KSxoLmhmPWZ1bmN0aW9uKHQpe0R2dCh0KX07dmFyIFRLLG9BZSxjQWUsdUFlLGxBZSxoQWUsZjh0LGQ4dCxnOHQscDh0LGZBZSxiOHQ7SSh1TCwiU3RyZXNzT3B0aW9ucyIsMTAwNCksRCgxMDA1LDEse30seTEpLGguc2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgJHJ0LHR9LGgudGY9ZnVuY3Rpb24odCl7fSxJKHVMLCJTdHJlc3NPcHRpb25zL1N0cmVzc0ZhY3RvcnkiLDEwMDUpLEQoMTExMCwyMDUsdHYsJHJ0KSxoLnJmPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvLGYsZztmb3Iobi5VZyhBM3QsMSksUnQoQnQoYXQodCwoVk4oKSxsQWUpKSkpP1J0KEJ0KGF0KHQsZkFlKSkpfHxLTygocj1uZXcgWXYoKGF3KCksbmV3IEp2KHQpKSkscikpOlcydChuZXcgRHdlLHQsbi5laCgxKSksbz11MHQodCksYT0kbXQodGhpcy5hLG8pLGc9YS5LYygpO2cuT2IoKTspZj1sKGcuUGIoKSwyMzUpLCEoZi5lLmMubGVuZ3RoPD0xKSYmKF9Mbih0aGlzLmIsZiksSkVuKHRoaXMuYiksVnUoZi5kLG5ldyB1ZCkpO289ZXd0KGEpLGx3dChvKSxuLlZnKCl9LEkodUcsIlN0cmVzc0xheW91dFByb3ZpZGVyIiwxMTEwKSxEKDExMTEsMSxmcix1ZCksaC5DZD1mdW5jdGlvbih0KXtBa2UobCh0LDQ1NCkpfSxJKHVHLCJTdHJlc3NMYXlvdXRQcm92aWRlci9sYW1iZGEkMCRUeXBlIiwxMTExKSxEKDEwMDIsMSx7fSxCUWUpLGguYz0wLGguZT0wLGguZz0wLEkodUcsIlN0cmVzc01ham9yaXphdGlvbiIsMTAwMiksRCgzOTEsMjIsezM6MSwzNDoxLDIyOjEsMzkxOjF9LG1zZSk7dmFyIGUxZSx0MWUsbjFlLGRBZT1Gcih1RywiU3RyZXNzTWFqb3JpemF0aW9uL0RpbWVuc2lvbiIsMzkxLEhyLEYybixiMG4pLG04dDtEKDEwMDMsMSxpaSxEeiksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBWZm4odGhpcy5hLGwodCwxNTMpLGwobiwxNTMpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHVHLCJTdHJlc3NNYWpvcml6YXRpb24vbGFtYmRhJDAkVHlwZSIsMTAwMyksRCgxMTkyLDEse30sR290KSxJKEJ4LCJFbGtMYXllcmVkIiwxMTkyKSxEKDExOTMsMSxmcixJeiksaC5DZD1mdW5jdGlvbih0KXtfa24odGhpcy5hLGwodCwzNikpfSxJKEJ4LCJFbGtMYXllcmVkL2xhbWJkYSQwJFR5cGUiLDExOTMpLEQoMTE5NCwxLGZyLE9pZSksaC5DZD1mdW5jdGlvbih0KXtVZm4odGhpcy5hLGwodCwzNikpfSxJKEJ4LCJFbGtMYXllcmVkL2xhbWJkYSQxJFR5cGUiLDExOTQpLEQoMTI4MSwxLHt9LExudCk7dmFyIHY4dCx3OHQseTh0O0koQngsIkdyYXBoQ29uZmlndXJhdG9yIiwxMjgxKSxEKDc3MCwxLGZyLHFwKSxoLkNkPWZ1bmN0aW9uKHQpe3RwdCh0aGlzLmEsbCh0LDEwKSl9LEkoQngsIkdyYXBoQ29uZmlndXJhdG9yL2xhbWJkYSQwJFR5cGUiLDc3MCksRCg3NzEsMSx7fSx1NSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbXhlKCksbmV3IGJuKG51bGwsbmV3IGtuKGwodCwzMCkuYSwxNikpfSxJKEJ4LCJHcmFwaENvbmZpZ3VyYXRvci9sYW1iZGEkMSRUeXBlIiw3NzEpLEQoNzcyLDEsZnIsbl8pLGguQ2Q9ZnVuY3Rpb24odCl7dHB0KHRoaXMuYSxsKHQsMTApKX0sSShCeCwiR3JhcGhDb25maWd1cmF0b3IvbGFtYmRhJDIkVHlwZSIsNzcyKSxEKDExMDksMjA1LHR2LHFRZSksaC5yZj1mdW5jdGlvbih0LG4pe3ZhciByO3I9b0xuKG5ldyBWUWUsdCkscWUoYXQodCwoTnQoKSxwNCkpKT09PXFlKChycCgpLEEyKSk/ajRuKHRoaXMuYSxyLG4pOldFbih0aGlzLmEscixuKSxuLiRnKCl8fEt2dChuZXcgYjgscil9LEkoQngsIkxheWVyZWRMYXlvdXRQcm92aWRlciIsMTEwOSksRCgzNjcsMjIsezM6MSwzNDoxLDIyOjEsMzY3OjF9LG9PKTt2YXIgeTAsdmcsYnUsX3UsbWMsZ0FlPUZyKEJ4LCJMYXllcmVkUGhhc2VzIiwzNjcsSHIsem1uLG0wbikseDh0O0QoMTcxNywxLHt9LHJmdCksaC5pPTA7dmFyIGs4dDtJKGpQLCJDb21wb25lbnRzVG9DR3JhcGhUcmFuc2Zvcm1lciIsMTcxNyk7dmFyIEU4dDtEKDE3MTgsMSx7fSxtbSksaC55Zj1mdW5jdGlvbih0LG4pe3JldHVybiBiLk1hdGgubWluKHQuYSE9bnVsbD96ZSh0LmEpOnQuYy5pLG4uYSE9bnVsbD96ZShuLmEpOm4uYy5pKX0saC56Zj1mdW5jdGlvbih0LG4pe3JldHVybiBiLk1hdGgubWluKHQuYSE9bnVsbD96ZSh0LmEpOnQuYy5pLG4uYSE9bnVsbD96ZShuLmEpOm4uYy5pKX0sSShqUCwiQ29tcG9uZW50c1RvQ0dyYXBoVHJhbnNmb3JtZXIvMSIsMTcxOCksRCg4NiwxLHs4NjoxfSksaC5pPTAsaC5rPSEwLGgubz1pYTt2YXIgcjFlPUkoZEwsIkNOb2RlIiw4Nik7RCg0NzAsODYsezQ3MDoxLDg2OjF9LFB5ZSxVOGUpLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iIn0sSShqUCwiQ29tcG9uZW50c1RvQ0dyYXBoVHJhbnNmb3JtZXIvQ1JlY3ROb2RlIiw0NzApLEQoMTY4OCwxLHt9LHE5KTt2YXIgaTFlLHMxZTtJKGpQLCJPbmVEaW1lbnNpb25hbENvbXBvbmVudHNDb21wYWN0aW9uIiwxNjg4KSxEKDE2ODksMSx7fSxWdiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gQTJuKGwodCw0MikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0sSShqUCwiT25lRGltZW5zaW9uYWxDb21wb25lbnRzQ29tcGFjdGlvbi9sYW1iZGEkMCRUeXBlIiwxNjg5KSxEKDE2OTAsMSx7fSxZNyksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gejRuKGwodCw0MikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0sSShqUCwiT25lRGltZW5zaW9uYWxDb21wb25lbnRzQ29tcGFjdGlvbi9sYW1iZGEkMSRUeXBlIiwxNjkwKSxEKDE3MjAsMSx7fSxac3QpLEkoZEwsIkNHcmFwaCIsMTcyMCksRCgxOTQsMSx7MTk0OjF9LFFjZSksaC5iPTAsaC5jPTAsaC5lPTAsaC5nPSEwLGguaT1pYSxJKGRMLCJDR3JvdXAiLDE5NCksRCgxNzE5LDEse30sRzIpLGgueWY9ZnVuY3Rpb24odCxuKXtyZXR1cm4gYi5NYXRoLm1heCh0LmEhPW51bGw/emUodC5hKTp0LmMuaSxuLmEhPW51bGw/emUobi5hKTpuLmMuaSl9LGguemY9ZnVuY3Rpb24odCxuKXtyZXR1cm4gYi5NYXRoLm1heCh0LmEhPW51bGw/emUodC5hKTp0LmMuaSxuLmEhPW51bGw/emUobi5hKTpuLmMuaSl9LEkoZEwsdDN0LDE3MTkpLEQoMTcyMSwxLHt9LFpwdCksaC5kPSExO3ZhciBUOHQsYTFlPUkoZEwsaTN0LDE3MjEpO0QoMTcyMiwxLHt9LFg3KSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiB2M2UoKSxIbigpLGwobCh0LDQyKS5hLDg2KS5kLmUhPTB9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxJKGRMLHMzdCwxNzIyKSxEKDgzMywxLHt9LEc0ZSksaC5hPSExLGguYj0hMSxoLmM9ITEsaC5kPSExLEkoZEwsYTN0LDgzMyksRCgxODk4LDEse30scHN0KSxJKGxHLG8zdCwxODk4KTt2YXIgZkI9a3MocnYsWnd0KTtEKDE4OTksMSx7MzgyOjF9LFlhdCksaC5iZj1mdW5jdGlvbih0KXtuU24odGhpcyxsKHQsNDc2KSl9LEkobEcsYzN0LDE4OTkpLEQoTGIsMSxpaSxsNSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBocG4obCh0LDg2KSxsKG4sODYpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKGxHLHUzdCxMYiksRCg0NzYsMSx7NDc2OjF9LE8zZSksaC5hPSExLEkobEcsbDN0LDQ3NiksRCgxOTAxLDEsaWksWDMpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZjhuKGwodCw0NzYpLGwobiw0NzYpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKGxHLGgzdCwxOTAxKSxEKDE0OCwxLHsxNDg6MX0sSWssTDRlKSxoLkZiPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB0PT1udWxsfHx4T24hPWJoKHQpPyExOihuPWwodCwxNDgpLEpjKHRoaXMuYyxuLmMpJiZKYyh0aGlzLmQsbi5kKSl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gTU4oaGUobGUod2EsMSksUm4sMSw1LFt0aGlzLmMsdGhpcy5kXSkpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIigiK3RoaXMuYytDbyt0aGlzLmQrKHRoaXMuYT8iY3giOiIiKSt0aGlzLmIrIikifSxoLmE9ITAsaC5jPTAsaC5kPTA7dmFyIHhPbj1JKHJ2LCJQb2ludCIsMTQ4KTtEKDQxNiwyMix7MzoxLDM0OjEsMjI6MSw0MTY6MX0sZnEpO3ZhciBzMyxhNCxNNixvNCxDOHQ9RnIocnYsIlBvaW50L1F1YWRyYW50Iiw0MTYsSHIsWGJuLHYwbiksUzh0O0QoMTcwOCwxLHt9LCRRZSksaC5iPW51bGwsaC5jPW51bGwsaC5kPW51bGwsaC5lPW51bGwsaC5mPW51bGw7dmFyIF84dCxBOHQsTDh0LE04dCxEOHQ7SShydiwiUmVjdGlsaW5lYXJDb252ZXhIdWxsIiwxNzA4KSxEKDU4MywxLHszODI6MX0sblUpLGguYmY9ZnVuY3Rpb24odCl7JHZuKHRoaXMsbCh0LDE0OCkpfSxoLmI9MDt2YXIgcEFlO0kocnYsIlJlY3RpbGluZWFyQ29udmV4SHVsbC9NYXhpbWFsRWxlbWVudHNFdmVudEhhbmRsZXIiLDU4MyksRCgxNzEwLDEsaWksRnApLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZnBuKEdlKHQpLEdlKG4pKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJ2LCJSZWN0aWxpbmVhckNvbnZleEh1bGwvTWF4aW1hbEVsZW1lbnRzRXZlbnRIYW5kbGVyL2xhbWJkYSQwJFR5cGUiLDE3MTApLEQoMTcwOSwxLHszODI6MX0sd2h0KSxoLmJmPWZ1bmN0aW9uKHQpe21Dbih0aGlzLGwodCwxNDgpKX0saC5hPTAsaC5iPW51bGwsaC5jPW51bGwsaC5kPW51bGwsaC5lPW51bGwsSShydiwiUmVjdGlsaW5lYXJDb252ZXhIdWxsL1JlY3RhbmdsZUV2ZW50SGFuZGxlciIsMTcwOSksRCgxNzExLDEsaWksbkkpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4geWJuKGwodCwxNDgpLGwobiwxNDgpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJ2LCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDAkVHlwZSIsMTcxMSksRCgxNzEyLDEsaWksJEopLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4geGJuKGwodCwxNDgpLGwobiwxNDgpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJ2LCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDEkVHlwZSIsMTcxMiksRCgxNzEzLDEsaWksdm0pLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gd2JuKGwodCwxNDgpLGwobiwxNDgpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJ2LCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDIkVHlwZSIsMTcxMyksRCgxNzE0LDEsaWksaHUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4ga2JuKGwodCwxNDgpLGwobiwxNDgpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJ2LCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDMkVHlwZSIsMTcxNCksRCgxNzE1LDEsaWksekopLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWnhuKGwodCwxNDgpLGwobiwxNDgpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJ2LCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDQkVHlwZSIsMTcxNSksRCgxNzE2LDEse30sVG90KSxJKHJ2LCJTY2FubGluZSIsMTcxNiksRCgyMTA0LDEse30pLEkoVjEsIkFic3RyYWN0R3JhcGhQbGFjZXIiLDIxMDQpLEQoMzM1LDEsezMzNToxfSxocnQpLGguRmY9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuR2YodCk/KHhuKHRoaXMuYixsKFEodCwoZnQoKSxwcCkpLDIxKSx0KSwhMCk6ITF9LGguR2Y9ZnVuY3Rpb24odCl7dmFyIG4scixhLG87Zm9yKG49bChRKHQsKGZ0KCkscHApKSwyMSksbz1sKCRpKFhpLG4pLDIxKSxhPW8uS2MoKTthLk9iKCk7KWlmKHI9bChhLlBiKCksMjEpLCFsKCRpKHRoaXMuYixyKSwxNSkuZGMoKSlyZXR1cm4hMTtyZXR1cm4hMH07dmFyIFhpO0koVjEsIkNvbXBvbmVudEdyb3VwIiwzMzUpLEQoNzc5LDIxMDQse30sTndlKSxoLkhmPWZ1bmN0aW9uKHQpe3ZhciBuLHI7Zm9yKHI9bmV3IEcodGhpcy5hKTtyLmE8ci5jLmMubGVuZ3RoOylpZihuPWwocmUociksMzM1KSxuLkZmKHQpKXJldHVybjt2dCh0aGlzLmEsbmV3IGhydCh0KSl9LGguRWY9ZnVuY3Rpb24odCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtpZih0aGlzLmEuYy5sZW5ndGg9MCxuLmEuYy5sZW5ndGg9MCx0LmRjKCkpe24uZi5hPTAsbi5mLmI9MDtyZXR1cm59Zm9yKGc9bCh0LlhiKDApLDM2KSxwYyhuLGcpLG89dC5LYygpO28uT2IoKTspYT1sKG8uUGIoKSwzNiksdGhpcy5IZihhKTtmb3IoSj1uZXcgcWEsZj16ZShHZShRKGcsKE50KCksU0IpKSkpLEM9bmV3IEcodGhpcy5hKTtDLmE8Qy5jLmMubGVuZ3RoOyl3PWwocmUoQyksMzM1KSxMPWh3dCh3LGYpLG4yKHZIKHcuYiksSi5hLEouYiksSi5hKz1MLmEsSi5iKz1MLmI7aWYobi5mLmE9Si5hLWYsbi5mLmI9Si5iLWYsUnQoQnQoUShnLHVXKSkpJiZxZShRKGcsYnApKT09PXFlKChpcCgpLGlDKSkpe2ZvcihWPXQuS2MoKTtWLk9iKCk7KUI9bChWLlBiKCksMzYpLEtFKEIsQi5jLmEsQi5jLmIpO2ZvcihyPW5ldyBvUyxLa2Uocix0LGYpLHo9dC5LYygpO3ouT2IoKTspQj1sKHouUGIoKSwzNiksT2koWTAoQi5jKSxyLmUpO09pKFkwKG4uZiksci5hKX1mb3IoRT1uZXcgRyh0aGlzLmEpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwzMzUpLEY2ZShuLHZIKHcuYikpfSxJKFYxLCJDb21wb25lbnRHcm91cEdyYXBoUGxhY2VyIiw3NzkpLEQoMTMxMiw3Nzkse30sWlFlKSxoLkhmPWZ1bmN0aW9uKHQpe24xdCh0aGlzLHQpfSxoLkVmPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGU7aWYodGhpcy5hLmMubGVuZ3RoPTAsbi5hLmMubGVuZ3RoPTAsdC5kYygpKXtuLmYuYT0wLG4uZi5iPTA7cmV0dXJufWZvcihnPWwodC5YYigwKSwzNikscGMobixnKSxvPXQuS2MoKTtvLk9iKCk7KWE9bChvLlBiKCksMzYpLG4xdCh0aGlzLGEpO2ZvcigkZT1uZXcgcWEsTWU9bmV3IHFhLHRlPW5ldyBxYSxKPW5ldyBxYSxmPXplKEdlKFEoZywoTnQoKSxTQikpKSksQz1uZXcgRyh0aGlzLmEpO0MuYTxDLmMuYy5sZW5ndGg7KXtpZih3PWwocmUoQyksMzM1KSxVZyhsKFEobiwocGkoKSx4dikpLDg4KSkpe2Zvcih0ZS5hPSRlLmEsVGU9bmV3IGNfKFpfKFZhZSh3LmIpLmEpLmEua2MoKSk7VGUuYi5PYigpOylpZihmZT1sKHNxKFRlLmIuUGIoKSksMjEpLGZlLkhjKChDdCgpLFFuKSkpe3RlLmE9TWUuYTticmVha319ZWxzZSBpZihCNShsKFEobix4diksODgpKSl7Zm9yKHRlLmI9JGUuYixUZT1uZXcgY18oWl8oVmFlKHcuYikuYSkuYS5rYygpKTtUZS5iLk9iKCk7KWlmKGZlPWwoc3EoVGUuYi5QYigpKSwyMSksZmUuSGMoKEN0KCksZXIpKSl7dGUuYj1NZS5iO2JyZWFrfX1pZihMPWh3dChsKHcsNTc5KSxmKSxuMih2SCh3LmIpLHRlLmEsdGUuYiksVWcobChRKG4seHYpLDg4KSkpe2ZvcihNZS5hPXRlLmErTC5hLEouYT1iLk1hdGgubWF4KEouYSxNZS5hKSxUZT1uZXcgY18oWl8oVmFlKHcuYikuYSkuYS5rYygpKTtUZS5iLk9iKCk7KWlmKGZlPWwoc3EoVGUuYi5QYigpKSwyMSksZmUuSGMoKEN0KCksRHIpKSl7JGUuYT10ZS5hK0wuYTticmVha31NZS5iPXRlLmIrTC5iLHRlLmI9TWUuYixKLmI9Yi5NYXRoLm1heChKLmIsdGUuYil9ZWxzZSBpZihCNShsKFEobix4diksODgpKSl7Zm9yKE1lLmI9dGUuYitMLmIsSi5iPWIuTWF0aC5tYXgoSi5iLE1lLmIpLFRlPW5ldyBjXyhaXyhWYWUody5iKS5hKS5hLmtjKCkpO1RlLmIuT2IoKTspaWYoZmU9bChzcShUZS5iLlBiKCkpLDIxKSxmZS5IYygoQ3QoKSxhcikpKXskZS5iPXRlLmIrTC5iO2JyZWFrfU1lLmE9dGUuYStMLmEsdGUuYT1NZS5hLEouYT1iLk1hdGgubWF4KEouYSx0ZS5hKX19aWYobi5mLmE9Si5hLWYsbi5mLmI9Si5iLWYsUnQoQnQoUShnLHVXKSkpJiZxZShRKGcsYnApKT09PXFlKChpcCgpLGlDKSkpe2ZvcihWPXQuS2MoKTtWLk9iKCk7KUI9bChWLlBiKCksMzYpLEtFKEIsQi5jLmEsQi5jLmIpO2ZvcihyPW5ldyBvUyxLa2Uocix0LGYpLHo9dC5LYygpO3ouT2IoKTspQj1sKHouUGIoKSwzNiksT2koWTAoQi5jKSxyLmUpO09pKFkwKG4uZiksci5hKX1mb3IoRT1uZXcgRyh0aGlzLmEpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwzMzUpLEY2ZShuLHZIKHcuYikpfSxJKFYxLCJDb21wb25lbnRHcm91cE1vZGVsT3JkZXJHcmFwaFBsYWNlciIsMTMxMiksRCgzODksMjIsezM6MSwzNDoxLDIyOjEsMzg5OjF9LGRxKTt2YXIgbzFlLGJBZSxjMWUsYzQsbUFlPUZyKFYxLCJDb21wb25lbnRPcmRlcmluZ1N0cmF0ZWd5IiwzODksSHIsVWJuLHcwbiksSTh0O0QoNjU5LDEse30sb1MpLEkoVjEsIkNvbXBvbmVudHNDb21wYWN0b3IiLDY1OSksRCgxNTMzLDEzLFV3dCx4dXQpLGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIFJBKHRoaXMsbCh0LDE0OCkpfSxJKFYxLCJDb21wb25lbnRzQ29tcGFjdG9yL0h1bGxwb2ludHMiLDE1MzMpLEQoMTUzMCwxLHs4NTU6MX0seGR0KSxoLmE9ITEsSShWMSwiQ29tcG9uZW50c0NvbXBhY3Rvci9JbnRlcm5hbENvbXBvbmVudCIsMTUzMCksRCgxNTI5LDEsaGcsUlFlKSxoLkpjPWZ1bmN0aW9uKHQpe3RvKHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEcodGhpcy5hKX0sSShWMSwiQ29tcG9uZW50c0NvbXBhY3Rvci9JbnRlcm5hbENvbm5lY3RlZENvbXBvbmVudHMiLDE1MjkpLEQoMTUzMiwxLHs2MDI6MX0sbjJ0KSxoLkJmPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGguQ2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLkFmPWZ1bmN0aW9uKCl7cmV0dXJuIHR1ZSh0aGlzLmQpfSxoLkRmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sSShWMSwiQ29tcG9uZW50c0NvbXBhY3Rvci9JbnRlcm5hbEV4dGVybmFsRXh0ZW5zaW9uIiwxNTMyKSxEKDE1MzEsMSx7NjAyOjF9LEhRZSksaC5DZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguQWY9ZnVuY3Rpb24oKXtyZXR1cm4gdHVlKHRoaXMuZCl9LGguQmY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxoLkRmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sSShWMSwiQ29tcG9uZW50c0NvbXBhY3Rvci9JbnRlcm5hbFVuaW9uRXh0ZXJuYWxFeHRlbnNpb24iLDE1MzEpLEQoMTUzNSwxLHt9LEVidCksSShWMSwiQ29tcG9uZW50c0NvbXBhY3Rvci9PdXRlclNlZ21lbnRzIiwxNTM1KSxEKDE1MzQsMSx7fSxqUWUpLEkoVjEsIkNvbXBvbmVudHNDb21wYWN0b3IvU2VnbWVudHMiLDE1MzQpLEQoMTI4MiwxLHt9LFB1dCksSShWMSxMRWUsMTI4MiksRCgxMjgzLDEsaWksb2opLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQ2JuKGwodCwzNiksbChuLDM2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShWMSwiQ29tcG9uZW50c1Byb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxMjgzKSxEKDU3OSwzMzUsezMzNToxLDU3OToxfSx5dXQpLGguRmY9ZnVuY3Rpb24odCl7cmV0dXJuIEc3ZSh0aGlzLHQpfSxoLkdmPWZ1bmN0aW9uKHQpe3JldHVybiBuYnQodGhpcyx0KX07dmFyIGJpO0koVjEsIk1vZGVsT3JkZXJDb21wb25lbnRHcm91cCIsNTc5KSxEKDEzMTAsMjEwNCx7fSxxSiksaC5FZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHo7aWYodC5nYygpPT0xKXtCPWwodC5YYigwKSwzNiksQiE9biYmKG4uYS5jLmxlbmd0aD0wLGNtdChuLEIsMCwwKSxwYyhuLEIpLE81ZShuLmQsQi5kKSxuLmYuYT1CLmYuYSxuLmYuYj1CLmYuYik7cmV0dXJufWVsc2UgaWYodC5kYygpKXtuLmEuYy5sZW5ndGg9MCxuLmYuYT0wLG4uZi5iPTA7cmV0dXJufWZvcih0aGlzLkpmKHQsbiksbz1sKHQuWGIoMCksMzYpLG4uYS5jLmxlbmd0aD0wLHBjKG4sbyksQz0wLHo9MCxnPXQuS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMzYpLEw9Zi5mLEM9Yi5NYXRoLm1heChDLEwuYSkseis9TC5hKkwuYjtpZihDPWIuTWF0aC5tYXgoQyxiLk1hdGguc3FydCh6KSp6ZShHZShRKG4sKE50KCksY1cpKSkpKSxhPXplKEdlKFEobixTQikpKSx0aGlzLklmKHQsbixDLGEpLFJ0KEJ0KFEobyx1VykpKSl7Zm9yKHI9bmV3IG9TLEtrZShyLHQsYSksRT10LktjKCk7RS5PYigpOyl3PWwoRS5QYigpLDM2KSxPaShZMCh3LmMpLHIuZSk7T2koWTAobi5mKSxyLmEpfUY2ZShuLHQpfSxoLklmPWZ1bmN0aW9uKHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMLEI7Zm9yKEw9MCxCPTAsdz0wLG89YSxnPXQuS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMzYpLEM9Zi5mLEwrQy5hPnImJihMPTAsQis9dythLHc9MCksRT1mLmMsS0UoZixMK0UuYSxCK0UuYiksWTAoRSksbz1iLk1hdGgubWF4KG8sTCtDLmEpLHc9Yi5NYXRoLm1heCh3LEMuYiksTCs9Qy5hK2E7bi5mLmE9byxuLmYuYj1CK3d9LGguSmY9ZnVuY3Rpb24odCxuKXt2YXIgcixhLG8sZixnO2lmKHFlKFEobiwoTnQoKSxnNCkpKT09PXFlKChLbSgpLGM0KSkpe2ZvcihhPXQuS2MoKTthLk9iKCk7KXtmb3Iocj1sKGEuUGIoKSwzNiksZz0wLGY9bmV3IEcoci5hKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTApLGcrPWwoUShvLEhrdCksMTcpLmE7ci5wPWd9Q24oKSx0LmpkKG5ldyBjail9fSxJKFYxLCJTaW1wbGVSb3dHcmFwaFBsYWNlciIsMTMxMCksRCgxMzEzLDEzMTAse30sY2gpLGguSWY9ZnVuY3Rpb24odCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEwsQix6LFY7Zm9yKHo9MCxWPTAsdz0wLG89YSxFPW51bGwsQj0wLGc9dC5LYygpO2cuT2IoKTspZj1sKGcuUGIoKSwzNiksTD1mLmYsKHorTC5hPnImJiFsKFEoZiwoZnQoKSxwcCkpLDIxKS5IYygoQ3QoKSxRbikpfHxFJiZsKFEoRSwoZnQoKSxwcCkpLDIxKS5IYygoQ3QoKSxhcikpfHxsKFEoZiwoZnQoKSxwcCkpLDIxKS5IYygoQ3QoKSxlcikpKSYmKHo9QixWKz13K2Esdz0wKSxDPWYuYyxsKFEoZiwoZnQoKSxwcCkpLDIxKS5IYygoQ3QoKSxRbikpJiYoej1vK2EpLEtFKGYseitDLmEsVitDLmIpLG89Yi5NYXRoLm1heChvLHorTC5hKSxsKFEoZixwcCksMjEpLkhjKERyKSYmKEI9Yi5NYXRoLm1heChCLHorTC5hK2EpKSxZMChDKSx3PWIuTWF0aC5tYXgodyxMLmIpLHorPUwuYSthLEU9ZjtuLmYuYT1vLG4uZi5iPVYrd30saC5KZj1mdW5jdGlvbih0LG4pe30sSShWMSwiTW9kZWxPcmRlclJvd0dyYXBoUGxhY2VyIiwxMzEzKSxEKDEzMTEsMSxpaSxjaiksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBqM24obCh0LDM2KSxsKG4sMzYpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKFYxLCJTaW1wbGVSb3dHcmFwaFBsYWNlci8xIiwxMzExKTt2YXIgTzh0O0QoMTI4MCwxLExkLHEwKSxoLkxiPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPWwoUShsKHQsMjQ5KS5iLChOdCgpLGNjKSksNzUpLCEhbiYmbi5iIT0wfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5NYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj1sKFEobCh0LDI0OSkuYiwoTnQoKSxjYykpLDc1KSwhIW4mJm4uYiE9MH0sSShoRywiQ29tcG91bmRHcmFwaFBvc3Rwcm9jZXNzb3IvMSIsMTI4MCksRCgxMjc5LDEsdHMsVVFlKSxoLktmPWZ1bmN0aW9uKHQsbil7a2R0KHRoaXMsbCh0LDM2KSxuKX0sSShoRywiQ29tcG91bmRHcmFwaFByZXByb2Nlc3NvciIsMTI3OSksRCg0NTMsMSx7NDUzOjF9LGYxdCksaC5jPSExLEkoaEcsIkNvbXBvdW5kR3JhcGhQcmVwcm9jZXNzb3IvRXh0ZXJuYWxQb3J0Iiw0NTMpLEQoMjQ5LDEsezI0OToxfSxLcSksaC5JYj1mdW5jdGlvbigpe3JldHVybiBhYWUodGhpcy5jKSsiOiIrS3B0KHRoaXMuYil9LEkoaEcsIkNyb3NzSGllcmFyY2h5RWRnZSIsMjQ5KSxEKDc3NywxLGlpLEdJKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuICQ3bih0aGlzLGwodCwyNDkpLGwobiwyNDkpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKGhHLCJDcm9zc0hpZXJhcmNoeUVkZ2VDb21wYXJhdG9yIiw3NzcpLEQoMzA1LDEzNyx7MzoxLDMwNToxLDk2OjEsMTM3OjF9KSxoLnA9MCxJKEN1LCJMR3JhcGhFbGVtZW50IiwzMDUpLEQoMTgsMzA1LHszOjEsMTg6MSwzMDU6MSw5NjoxLDEzNzoxfSxUdyksaC5JYj1mdW5jdGlvbigpe3JldHVybiBLcHQodGhpcyl9O3ZhciB1MWU9SShDdSwiTEVkZ2UiLDE4KTtEKDM2LDMwNSx7MzoxLDIwOjEsMzY6MSwzMDU6MSw5NjoxLDEzNzoxfSxvN2UpLGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRyh0aGlzLmIpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5jLmxlbmd0aD09MD8iRy11bmxheWVyZWQiK1RiKHRoaXMuYSk6dGhpcy5hLmMubGVuZ3RoPT0wPyJHLWxheWVyZWQiK1RiKHRoaXMuYik6IkdbbGF5ZXJsZXNzIitUYih0aGlzLmEpKyIsIGxheWVycyIrVGIodGhpcy5iKSsiXSJ9O3ZhciBOOHQ9SShDdSwiTEdyYXBoIiwzNiksUDh0O0QoNjY2LDEse30pLGguTGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lLm59LGgub2Y9ZnVuY3Rpb24odCl7cmV0dXJuIFEodGhpcy5lLHQpfSxoLk1mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZS5vfSxoLk5mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZS5wfSxoLnBmPWZ1bmN0aW9uKHQpe3JldHVybiBucyh0aGlzLmUsdCl9LGguT2Y9ZnVuY3Rpb24odCl7dGhpcy5lLm4uYT10LmEsdGhpcy5lLm4uYj10LmJ9LGguUGY9ZnVuY3Rpb24odCl7dGhpcy5lLm8uYT10LmEsdGhpcy5lLm8uYj10LmJ9LGguUWY9ZnVuY3Rpb24odCl7dGhpcy5lLnA9dH0sSShDdSwiTEdyYXBoQWRhcHRlcnMvQWJzdHJhY3RMU2hhcGVBZGFwdGVyIiw2NjYpLEQoNDc0LDEsezg1MzoxfSxUbSksaC5SZj1mdW5jdGlvbigpe3ZhciB0LG47aWYoIXRoaXMuYilmb3IodGhpcy5iPWVnKHRoaXMuYS5iLmMubGVuZ3RoKSxuPW5ldyBHKHRoaXMuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksNzIpLHZ0KHRoaXMuYixuZXcgWmQodCkpO3JldHVybiB0aGlzLmJ9LGguYj1udWxsLEkoQ3UsIkxHcmFwaEFkYXB0ZXJzL0xFZGdlQWRhcHRlciIsNDc0KSxEKDY2NSwxLHt9LEphZSksaC5TZj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG8sZjtpZighdGhpcy5iKXtmb3IodGhpcy5iPW5ldyBidCxhPW5ldyBHKHRoaXMuYS5iKTthLmE8YS5jLmMubGVuZ3RoOylmb3Iocj1sKHJlKGEpLDMwKSxmPW5ldyBHKHIuYSk7Zi5hPGYuYy5jLmxlbmd0aDspaWYobz1sKHJlKGYpLDEwKSx0aGlzLmMuTWIobykmJih2dCh0aGlzLmIsbmV3IFdxKHRoaXMsbyx0aGlzLmUpKSx0aGlzLmQpKXtpZihucyhvLChmdCgpLFF4KSkpZm9yKG49bChRKG8sUXgpLDE1KS5LYygpO24uT2IoKTspdD1sKG4uUGIoKSwxMCksdnQodGhpcy5iLG5ldyBXcSh0aGlzLHQsITEpKTtpZihucyhvLEd4KSlmb3Iobj1sKFEobyxHeCksMTUpLktjKCk7bi5PYigpOyl0PWwobi5QYigpLDEwKSx2dCh0aGlzLmIsbmV3IFdxKHRoaXMsdCwhMSkpfX1yZXR1cm4gdGhpcy5ifSxoLkxmPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IEhwKEQzdCkpfSxoLm9mPWZ1bmN0aW9uKHQpe3JldHVybiBRKHRoaXMuYSx0KX0saC5NZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZn0saC5OZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEucH0saC5wZj1mdW5jdGlvbih0KXtyZXR1cm4gbnModGhpcy5hLHQpfSxoLk9mPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBIcChEM3QpKX0saC5QZj1mdW5jdGlvbih0KXt0aGlzLmEuZi5hPXQuYSx0aGlzLmEuZi5iPXQuYn0saC5RZj1mdW5jdGlvbih0KXt0aGlzLmEucD10fSxoLmI9bnVsbCxoLmQ9ITEsaC5lPSExLEkoQ3UsIkxHcmFwaEFkYXB0ZXJzL0xHcmFwaEFkYXB0ZXIiLDY2NSksRCg1ODUsNjY2LHsxODc6MX0sWmQpLEkoQ3UsIkxHcmFwaEFkYXB0ZXJzL0xMYWJlbEFkYXB0ZXIiLDU4NSksRCg1ODQsNjY2LHs2OTU6MX0sV3EpLGguVGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLlVmPWZ1bmN0aW9uKCl7cmV0dXJuIENuKCksQ24oKSxfb30saC5SZj1mdW5jdGlvbigpe3ZhciB0LG47aWYoIXRoaXMuYSlmb3IodGhpcy5hPWVnKGwodGhpcy5lLDEwKS5iLmMubGVuZ3RoKSxuPW5ldyBHKGwodGhpcy5lLDEwKS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksNzIpLHZ0KHRoaXMuYSxuZXcgWmQodCkpO3JldHVybiB0aGlzLmF9LGguVmY9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1sKHRoaXMuZSwxMCkuZCxuZXcgbjRlKHQuZCx0LmMsdC5hLHQuYil9LGguV2Y9ZnVuY3Rpb24oKXtyZXR1cm4gQ24oKSxDbigpLF9vfSxoLlhmPWZ1bmN0aW9uKCl7dmFyIHQsbjtpZighdGhpcy5jKWZvcih0aGlzLmM9ZWcobCh0aGlzLmUsMTApLmouYy5sZW5ndGgpLG49bmV3IEcobCh0aGlzLmUsMTApLmopO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxMiksdnQodGhpcy5jLG5ldyBCZXQodCx0aGlzLmQpKTtyZXR1cm4gdGhpcy5jfSxoLllmPWZ1bmN0aW9uKCl7cmV0dXJuIFJ0KEJ0KFEobCh0aGlzLmUsMTApLChmdCgpLEZMZSkpKSl9LGguWmY9ZnVuY3Rpb24odCl7bCh0aGlzLmUsMTApLmQuYj10LmIsbCh0aGlzLmUsMTApLmQuZD10LmQsbCh0aGlzLmUsMTApLmQuYz10LmMsbCh0aGlzLmUsMTApLmQuYT10LmF9LGguJGY9ZnVuY3Rpb24odCl7bCh0aGlzLmUsMTApLmYuYj10LmIsbCh0aGlzLmUsMTApLmYuZD10LmQsbCh0aGlzLmUsMTApLmYuYz10LmMsbCh0aGlzLmUsMTApLmYuYT10LmF9LGguX2Y9ZnVuY3Rpb24oKXtCd24odGhpcywoZ18oKSxQOHQpKX0saC5hPW51bGwsaC5iPW51bGwsaC5jPW51bGwsaC5kPSExLEkoQ3UsIkxHcmFwaEFkYXB0ZXJzL0xOb2RlQWRhcHRlciIsNTg0KSxEKDE3ODgsNjY2LHs4NTI6MX0sQmV0KSxoLlVmPWZ1bmN0aW9uKCl7dmFyIHQsbixyLGEsbyxmLGcsdztpZih0aGlzLmQmJmwodGhpcy5lLDEyKS5pLms9PShabigpLEF1KSlyZXR1cm4gQ24oKSxDbigpLF9vO2lmKCF0aGlzLmEpe2Zvcih0aGlzLmE9bmV3IGJ0LHI9bmV3IEcobCh0aGlzLmUsMTIpLmUpO3IuYTxyLmMuYy5sZW5ndGg7KXQ9bChyZShyKSwxOCksdnQodGhpcy5hLG5ldyBUbSh0KSk7aWYodGhpcy5kJiYoYT1sKFEobCh0aGlzLmUsMTIpLChmdCgpLGpsKSksMTApLGEpKWZvcihuPW5ldyBocihkcihrYShhKS5hLktjKCksbmV3IGopKTtqcihuKTspdD1sKHhyKG4pLDE4KSx2dCh0aGlzLmEsbmV3IFRtKHQpKTtpZihucyhsKHRoaXMuZSwxMikuaSwoZnQoKSxoMykpJiYoZz1sKFEobCh0aGlzLmUsMTIpLmksaDMpLDMzNyksdz1sKEIxKGcuZSx0aGlzLmUpLDExMyksdykpZm9yKGY9bmV3IEcody5iKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMzQwKSx2dCh0aGlzLmEsbmV3IFRtKG8uYSkpfXJldHVybiB0aGlzLmF9LGguUmY9ZnVuY3Rpb24oKXt2YXIgdCxuO2lmKCF0aGlzLmIpZm9yKHRoaXMuYj1lZyhsKHRoaXMuZSwxMikuZi5jLmxlbmd0aCksbj1uZXcgRyhsKHRoaXMuZSwxMikuZik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDcyKSx2dCh0aGlzLmIsbmV3IFpkKHQpKTtyZXR1cm4gdGhpcy5ifSxoLldmPWZ1bmN0aW9uKCl7dmFyIHQsbixyLGEsbyxmLGcsdztpZih0aGlzLmQmJmwodGhpcy5lLDEyKS5pLms9PShabigpLEF1KSlyZXR1cm4gQ24oKSxDbigpLF9vO2lmKCF0aGlzLmMpe2Zvcih0aGlzLmM9bmV3IGJ0LHI9bmV3IEcobCh0aGlzLmUsMTIpLmcpO3IuYTxyLmMuYy5sZW5ndGg7KXQ9bChyZShyKSwxOCksdnQodGhpcy5jLG5ldyBUbSh0KSk7aWYodGhpcy5kJiYoYT1sKFEobCh0aGlzLmUsMTIpLChmdCgpLGpsKSksMTApLGEpKWZvcihuPW5ldyBocihkcihxcyhhKS5hLktjKCksbmV3IGopKTtqcihuKTspdD1sKHhyKG4pLDE4KSx2dCh0aGlzLmMsbmV3IFRtKHQpKTtpZihucyhsKHRoaXMuZSwxMikuaSwoZnQoKSxoMykpJiYoZz1sKFEobCh0aGlzLmUsMTIpLmksaDMpLDMzNyksdz1sKEIxKGcuZSx0aGlzLmUpLDExMyksdykpZm9yKGY9bmV3IEcody5lKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMzQwKSx2dCh0aGlzLmMsbmV3IFRtKG8uYSkpfXJldHVybiB0aGlzLmN9LGguYWc9ZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLmUsMTIpLmp9LGguYmc9ZnVuY3Rpb24oKXtyZXR1cm4gUnQoQnQoUShsKHRoaXMuZSwxMiksKGZ0KCkseEIpKSkpfSxoLmE9bnVsbCxoLmI9bnVsbCxoLmM9bnVsbCxoLmQ9ITEsSShDdSwiTEdyYXBoQWRhcHRlcnMvTFBvcnRBZGFwdGVyIiwxNzg4KSxEKDE3ODksMSxpaSxRMyksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBEU24obCh0LDEyKSxsKG4sMTIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKEN1LCJMR3JhcGhBZGFwdGVycy9Qb3J0Q29tcGFyYXRvciIsMTc4OSksRCg4MTgsMSx0aSxjUyksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDEwKSxnXygpLCEwfSxJKEN1LCJMR3JhcGhBZGFwdGVycy9sYW1iZGEkMCRUeXBlIiw4MTgpLEQoNDA0LDMwNSx7MzoxLDMwNToxLDQwNDoxLDk2OjEsMTM3OjF9KSxJKEN1LCJMU2hhcGUiLDQwNCksRCg3Miw0MDQsezM6MSwzMDU6MSw3MjoxLDQwNDoxLDk2OjEsMTM3OjF9LFhKZSxieWUpLGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD15ZG4odGhpcyksdD09bnVsbD8ibGFiZWwiOiJsXyIrdH0sSShDdSwiTExhYmVsIiw3MiksRCgyMTQsMSx7MzoxLDQ6MSwyMTQ6MSw0MjM6MX0pLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsMjE0KT8obj1sKHQsMjE0KSx0aGlzLmQ9PW4uZCYmdGhpcy5hPT1uLmEmJnRoaXMuYj09bi5iJiZ0aGlzLmM9PW4uYyk6ITF9LGguSGI9ZnVuY3Rpb24oKXt2YXIgdCxuO3JldHVybiB0PWo4KHRoaXMuYik8PDE2LHR8PWo4KHRoaXMuYSkmWnMsbj1qOCh0aGlzLmMpPDwxNixufD1qOCh0aGlzLmQpJlpzLHRebn0saC5jZz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihmPTA7Zjx0Lmxlbmd0aCYmSDB0KChYbihmLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZikpLE8zdCk7KSsrZjtmb3Iobj10Lmxlbmd0aDtuPjAmJkgwdCgoWG4obi0xLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQobi0xKSksTjN0KTspLS1uO2lmKGY8bil7TD1HeSgoR2EoZixuLHQubGVuZ3RoKSx0LnN1YnN0cihmLG4tZikpLCIsfDsiKTt0cnl7Zm9yKHc9TCxFPTAsQz13Lmxlbmd0aDtFPEM7KytFKXtpZihnPXdbRV0sbz1HeShnLCI9Iiksby5sZW5ndGghPTIpdGhyb3cgdWUobmV3IFluKCJFeHBlY3RpbmcgYSBsaXN0IG9mIGtleS12YWx1ZSBwYWlycy4iKSk7YT0keShvWzBdKSxCPWp5KCR5KG9bMV0pKSx2bihhLCJ0b3AiKT90aGlzLmQ9Qjp2bihhLCJsZWZ0Iik/dGhpcy5iPUI6dm4oYSwiYm90dG9tIik/dGhpcy5hPUI6dm4oYSwicmlnaHQiKSYmKHRoaXMuYz1CKX19Y2F0Y2goeil7dGhyb3cgej1icyh6KSxEZSh6LDEzMCk/KHI9eix1ZShuZXcgWW4oUDN0K3IpKSk6dWUoeil9fX0saC5JYj1mdW5jdGlvbigpe3JldHVybiJbdG9wPSIrdGhpcy5kKyIsbGVmdD0iK3RoaXMuYisiLGJvdHRvbT0iK3RoaXMuYSsiLHJpZ2h0PSIrdGhpcy5jKyJdIn0saC5hPTAsaC5iPTAsaC5jPTAsaC5kPTAsSSgkUCwiU3BhY2luZyIsMjE0KSxEKDE0MCwyMTQsQjN0LHNfLG5udCxuNGUseGFlKTt2YXIgdkFlPUkoJFAsIkVsa01hcmdpbiIsMTQwKTtEKDY2MCwxNDAsQjN0LCRpZSksSShDdSwiTE1hcmdpbiIsNjYwKSxEKDEwLDQwNCx7MzoxLDMwNToxLDEwOjEsNDA0OjEsOTY6MSwxMzc6MX0sb3ApLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gcGR0KHRoaXMpfSxoLmk9ITE7dmFyIHdnPUkoQ3UsIkxOb2RlIiwxMCk7RCgyNzMsMjIsezM6MSwzNDoxLDIyOjEsMjczOjF9LGtfKTt2YXIgSzEsVXMsY3UsQWEsUHMsQXUsbDFlPUZyKEN1LCJMTm9kZS9Ob2RlVHlwZSIsMjczLEhyLFN2bixUMW4pLEI4dDtEKDc3NSwxLHRpLHVqKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBSdChCdChRKGwodCw3MiksKE50KCksdGRlKSkpKX0sSShDdSwiTE5vZGUvbGFtYmRhJDAkVHlwZSIsNzc1KSxEKDEwNywyMTQsRjN0LEE4LGx3LFM0ZSk7dmFyIHdBZT1JKCRQLCJFbGtQYWRkaW5nIiwxMDcpO0QoNzc4LDEwNyxGM3QsUndlKSxJKEN1LCJMUGFkZGluZyIsNzc4KSxEKDEyLDQwNCx7MzoxLDMwNToxLDEyOjEsNDA0OjEsOTY6MSwxMzc6MX0sZ3UpLGguSWI9ZnVuY3Rpb24oKXt2YXIgdCxuLHI7cmV0dXJuIHQ9bmV3IHRiLGhpKCh0LmErPSJwXyIsdCksZlUodGhpcykpLHRoaXMuaSYmaGkod3UoKHQuYSs9IlsiLHQpLHRoaXMuaSksIl0iKSx0aGlzLmUuYy5sZW5ndGg9PTEmJnRoaXMuZy5jLmxlbmd0aD09MCYmbChqdCh0aGlzLmUsMCksMTgpLmMhPXRoaXMmJihuPWwoanQodGhpcy5lLDApLDE4KS5jLGhpKCh0LmErPSIgPDwgIix0KSxmVShuKSksaGkod3UoKHQuYSs9IlsiLHQpLG4uaSksIl0iKSksdGhpcy5lLmMubGVuZ3RoPT0wJiZ0aGlzLmcuYy5sZW5ndGg9PTEmJmwoanQodGhpcy5nLDApLDE4KS5kIT10aGlzJiYocj1sKGp0KHRoaXMuZywwKSwxOCkuZCxoaSgodC5hKz0iID4+ICIsdCksZlUocikpLGhpKHd1KCh0LmErPSJbIix0KSxyLmkpLCJdIikpLHQuYX0saC5jPSEwLGguZD0hMTt2YXIgeUFlLHhBZSxrQWUsRUFlLFRBZSxDQWUsRjh0PUkoQ3UsIkxQb3J0IiwxMik7RCg0MDgsMSxoZyxUNSksaC5KYz1mdW5jdGlvbih0KXt0byh0aGlzLHQpfSxoLktjPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9bmV3IEcodGhpcy5hLmUpLG5ldyBqV2UodCl9LEkoQ3UsIkxQb3J0LzEiLDQwOCksRCgxMzA5LDEsT2EsaldlKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gbChyZSh0aGlzLmEpLDE4KS5jfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIExjKHRoaXMuYSl9LGguUWI9ZnVuY3Rpb24oKXtRXyh0aGlzLmEpfSxJKEN1LCJMUG9ydC8xLzEiLDEzMDkpLEQoMzY5LDEsaGcsQzgpLGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5LYz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PW5ldyBHKHRoaXMuYS5nKSxuZXcgdndlKHQpfSxJKEN1LCJMUG9ydC8yIiwzNjkpLEQoNzc2LDEsT2EsdndlKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gbChyZSh0aGlzLmEpLDE4KS5kfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIExjKHRoaXMuYSl9LGguUWI9ZnVuY3Rpb24oKXtRXyh0aGlzLmEpfSxJKEN1LCJMUG9ydC8yLzEiLDc3NiksRCgxMzAyLDEsaGcsTWV0KSxoLkpjPWZ1bmN0aW9uKHQpe3RvKHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE4xKHRoaXMpfSxJKEN1LCJMUG9ydC9Db21iaW5lSXRlciIsMTMwMiksRCgyMDgsMSxPYSxOMSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlFiPWZ1bmN0aW9uKCl7YVplKCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gJF8odGhpcyl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gTGModGhpcy5hKT9yZSh0aGlzLmEpOnJlKHRoaXMuYil9LEkoQ3UsIkxQb3J0L0NvbWJpbmVJdGVyLzEiLDIwOCksRCgxMzAzLDEsTGQsSzIpLGguTGI9ZnVuY3Rpb24odCl7cmV0dXJuIExzdCh0KX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGtsKCksbCh0LDEyKS5nLmMubGVuZ3RoIT0wfSxJKEN1LCJMUG9ydC9sYW1iZGEkMCRUeXBlIiwxMzAzKSxEKDEzMDQsMSxMZCxKMyksaC5MYj1mdW5jdGlvbih0KXtyZXR1cm4gTXN0KHQpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5NYj1mdW5jdGlvbih0KXtyZXR1cm4ga2woKSxsKHQsMTIpLmUuYy5sZW5ndGghPTB9LEkoQ3UsIkxQb3J0L2xhbWJkYSQxJFR5cGUiLDEzMDQpLEQoMTMwNSwxLExkLEhKKSxoLkxiPWZ1bmN0aW9uKHQpe3JldHVybiBrbCgpLGwodCwxMikuaj09KEN0KCksUW4pfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5NYj1mdW5jdGlvbih0KXtyZXR1cm4ga2woKSxsKHQsMTIpLmo9PShDdCgpLFFuKX0sSShDdSwiTFBvcnQvbGFtYmRhJDIkVHlwZSIsMTMwNSksRCgxMzA2LDEsTGQsd20pLGguTGI9ZnVuY3Rpb24odCl7cmV0dXJuIGtsKCksbCh0LDEyKS5qPT0oQ3QoKSxhcil9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBrbCgpLGwodCwxMikuaj09KEN0KCksYXIpfSxJKEN1LCJMUG9ydC9sYW1iZGEkMyRUeXBlIiwxMzA2KSxEKDEzMDcsMSxMZCxWSiksaC5MYj1mdW5jdGlvbih0KXtyZXR1cm4ga2woKSxsKHQsMTIpLmo9PShDdCgpLERyKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGtsKCksbCh0LDEyKS5qPT0oQ3QoKSxEcil9LEkoQ3UsIkxQb3J0L2xhbWJkYSQ0JFR5cGUiLDEzMDcpLEQoMTMwOCwxLExkLFVKKSxoLkxiPWZ1bmN0aW9uKHQpe3JldHVybiBrbCgpLGwodCwxMikuaj09KEN0KCksZXIpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5NYj1mdW5jdGlvbih0KXtyZXR1cm4ga2woKSxsKHQsMTIpLmo9PShDdCgpLGVyKX0sSShDdSwiTFBvcnQvbGFtYmRhJDUkVHlwZSIsMTMwOCksRCgzMCwzMDUsezM6MSwyMDoxLDMwNToxLDMwOjEsOTY6MSwxMzc6MX0seXUpLGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRyh0aGlzLmEpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkxfIitnYyh0aGlzLmIuYix0aGlzLDApK1RiKHRoaXMuYSl9LEkoQ3UsIkxheWVyIiwzMCksRCgxMzMwLDEse30sVlFlKSxJKHYyLFIzdCwxMzMwKSxEKDEzMzQsMSx7fSxRNyksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gYmMobCh0LDg0KSl9LEkodjIsIkVsa0dyYXBoSW1wb3J0ZXIvMG1ldGhvZHJlZiRjb25uZWN0YWJsZVNoYXBlVG9Ob2RlJFR5cGUiLDEzMzQpLEQoMTMzNywxLHt9LHVTKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBiYyhsKHQsODQpKX0sSSh2MiwiRWxrR3JhcGhJbXBvcnRlci8xbWV0aG9kcmVmJGNvbm5lY3RhYmxlU2hhcGVUb05vZGUkVHlwZSIsMTMzNyksRCgxMzMxLDEsZnIsJFdlKSxoLkNkPWZ1bmN0aW9uKHQpe2wydCh0aGlzLmEsbCh0LDEyMykpfSxJKHYyLE1FZSwxMzMxKSxEKDEzMzIsMSxmcix6V2UpLGguQ2Q9ZnVuY3Rpb24odCl7bDJ0KHRoaXMuYSxsKHQsMTIzKSl9LEkodjIsajN0LDEzMzIpLEQoMTMzMywxLHt9LGxqKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24oQTVlKGwodCw3NCkpLDE2KSl9LEkodjIsJDN0LDEzMzMpLEQoMTMzNSwxLHRpLHFXZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gSGxuKHRoaXMuYSxsKHQsMjcpKX0sSSh2Mix6M3QsMTMzNSksRCgxMzM2LDEse30sSDkpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbihhcG4obCh0LDc0KSksMTYpKX0sSSh2MiwiRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkNSRUeXBlIiwxMzM2KSxEKDEzMzgsMSx0aSxIV2UpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIFZsbih0aGlzLmEsbCh0LDI3KSl9LEkodjIsIkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDckVHlwZSIsMTMzOCksRCgxMzM5LDEsdGksR0opLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIHlwbihsKHQsNzQpKX0sSSh2MiwiRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkOCRUeXBlIiwxMzM5KSxEKDEyOTcsMSx7fSxiOCk7dmFyIFI4dDtJKHYyLCJFbGtHcmFwaExheW91dFRyYW5zZmVycmVyIiwxMjk3KSxEKDEyOTgsMSx0aSxWV2UpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIElmbih0aGlzLmEsbCh0LDE4KSl9LEkodjIsIkVsa0dyYXBoTGF5b3V0VHJhbnNmZXJyZXIvbGFtYmRhJDAkVHlwZSIsMTI5OCksRCgxMjk5LDEsZnIsVVdlKSxoLkNkPWZ1bmN0aW9uKHQpe3NPKCksdnQodGhpcy5hLGwodCwxOCkpfSxJKHYyLCJFbGtHcmFwaExheW91dFRyYW5zZmVycmVyL2xhbWJkYSQxJFR5cGUiLDEyOTkpLEQoMTMwMCwxLHRpLEdXZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbWZuKHRoaXMuYSxsKHQsMTgpKX0sSSh2MiwiRWxrR3JhcGhMYXlvdXRUcmFuc2ZlcnJlci9sYW1iZGEkMiRUeXBlIiwxMzAwKSxEKDEzMDEsMSxmcixLV2UpLGguQ2Q9ZnVuY3Rpb24odCl7c08oKSx2dCh0aGlzLmEsbCh0LDE4KSl9LEkodjIsIkVsa0dyYXBoTGF5b3V0VHJhbnNmZXJyZXIvbGFtYmRhJDMkVHlwZSIsMTMwMSksRCg4MTksMSx7fSxpNGUpLEkocnIsIkJpTGlua2VkSGFzaE11bHRpTWFwIiw4MTkpLEQoMTU1MCwxLHRzLFY5KSxoLktmPWZ1bmN0aW9uKHQsbil7czNuKGwodCwzNiksbil9LEkocnIsIkNvbW1lbnROb2RlTWFyZ2luQ2FsY3VsYXRvciIsMTU1MCksRCgxNTUxLDEse30sS0opLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShyciwiQ29tbWVudE5vZGVNYXJnaW5DYWxjdWxhdG9yL2xhbWJkYSQwJFR5cGUiLDE1NTEpLEQoMTU1MiwxLGZyLFdKKSxoLkNkPWZ1bmN0aW9uKHQpe3NMbihsKHQsMTApKX0sSShyciwiQ29tbWVudE5vZGVNYXJnaW5DYWxjdWxhdG9yL2xhbWJkYSQxJFR5cGUiLDE1NTIpLEQoMTU1MywxLHRzLFlKKSxoLktmPWZ1bmN0aW9uKHQsbil7dVNuKGwodCwzNiksbil9LEkocnIsIkNvbW1lbnRQb3N0cHJvY2Vzc29yIiwxNTUzKSxEKDE1NTQsMSx0cyxYSiksaC5LZj1mdW5jdGlvbih0LG4pe0REbihsKHQsMzYpLG4pfSxJKHJyLCJDb21tZW50UHJlcHJvY2Vzc29yIiwxNTU0KSxEKDE1NTUsMSx0cyxRSiksaC5LZj1mdW5jdGlvbih0LG4pe1NDbihsKHQsMzYpLG4pfSxJKHJyLCJDb25zdHJhaW50c1Bvc3Rwcm9jZXNzb3IiLDE1NTUpLEQoMTU1NiwxLHRzLEpKKSxoLktmPWZ1bmN0aW9uKHQsbil7TzNuKGwodCwzNiksbil9LEkocnIsIkVkZ2VBbmRMYXllckNvbnN0cmFpbnRFZGdlUmV2ZXJzZXIiLDE1NTYpLEQoMTU1NywxLHRzLFpKKSxoLktmPWZ1bmN0aW9uKHQsbil7RTVuKGwodCwzNiksbil9LEkocnIsIkVuZExhYmVsUG9zdHByb2Nlc3NvciIsMTU1NyksRCgxNTU4LDEse30sZVopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShyciwiRW5kTGFiZWxQb3N0cHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE1NTgpLEQoMTU1OSwxLHRpLHRaKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBSbW4obCh0LDEwKSl9LEkocnIsIkVuZExhYmVsUG9zdHByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNTU5KSxEKDE1NjAsMSxmcixuWiksaC5DZD1mdW5jdGlvbih0KXtkOG4obCh0LDEwKSl9LEkocnIsIkVuZExhYmVsUG9zdHByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxNTYwKSxEKDE1NjEsMSx0cyxyWiksaC5LZj1mdW5jdGlvbih0LG4pe3RrbihsKHQsMzYpLG4pfSxJKHJyLCJFbmRMYWJlbFByZXByb2Nlc3NvciIsMTU2MSksRCgxNTYyLDEse30sckkpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShyciwiRW5kTGFiZWxQcmVwcm9jZXNzb3IvbGFtYmRhJDAkVHlwZSIsMTU2MiksRCgxNTYzLDEsZnIsbWl0KSxoLkNkPWZ1bmN0aW9uKHQpe25sbih0aGlzLmEsdGhpcy5iLHRoaXMuYyxsKHQsMTApKX0saC5hPTAsaC5iPTAsaC5jPSExLEkocnIsIkVuZExhYmVsUHJlcHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE1NjMpLEQoMTU2NCwxLHRpLGlaKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBxZShRKGwodCw3MiksKE50KCksamQpKSk9PT1xZSgoRjEoKSxyQykpfSxJKHJyLCJFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxNTY0KSxEKDE1NjUsMSxmcixXV2UpLGguQ2Q9ZnVuY3Rpb24odCl7dWkodGhpcy5hLGwodCw3MikpfSxJKHJyLCJFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkMyRUeXBlIiwxNTY1KSxEKDE1NjYsMSx0aSxzWiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gcWUoUShsKHQsNzIpLChOdCgpLGpkKSkpPT09cWUoKEYxKCksXzQpKX0sSShyciwiRW5kTGFiZWxQcmVwcm9jZXNzb3IvbGFtYmRhJDQkVHlwZSIsMTU2NiksRCgxNTY3LDEsZnIsWVdlKSxoLkNkPWZ1bmN0aW9uKHQpe3VpKHRoaXMuYSxsKHQsNzIpKX0sSShyciwiRW5kTGFiZWxQcmVwcm9jZXNzb3IvbGFtYmRhJDUkVHlwZSIsMTU2NyksRCgxNjE1LDEsdHMsSHJlKSxoLktmPWZ1bmN0aW9uKHQsbil7azRuKGwodCwzNiksbil9O3ZhciBqOHQ7SShyciwiRW5kTGFiZWxTb3J0ZXIiLDE2MTUpLEQoMTYxNiwxLGlpLGxTKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ2bihsKHQsNDY2KSxsKG4sNDY2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShyciwiRW5kTGFiZWxTb3J0ZXIvMSIsMTYxNiksRCg0NjYsMSx7NDY2OjF9LEhhdCksSShyciwiRW5kTGFiZWxTb3J0ZXIvTGFiZWxHcm91cCIsNDY2KSxEKDE2MTcsMSx7fSxoaiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gaU8oKSxuZXcgYm4obnVsbCxuZXcga24obCh0LDMwKS5hLDE2KSl9LEkocnIsIkVuZExhYmVsU29ydGVyL2xhbWJkYSQwJFR5cGUiLDE2MTcpLEQoMTYxOCwxLHRpLEo3KSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBpTygpLGwodCwxMCkuaz09KFpuKCksUHMpfSxJKHJyLCJFbmRMYWJlbFNvcnRlci9sYW1iZGEkMSRUeXBlIiwxNjE4KSxEKDE2MTksMSxmcixhWiksaC5DZD1mdW5jdGlvbih0KXtwOW4obCh0LDEwKSl9LEkocnIsIkVuZExhYmVsU29ydGVyL2xhbWJkYSQyJFR5cGUiLDE2MTkpLEQoMTYyMCwxLHRpLG9aKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBpTygpLHFlKFEobCh0LDcyKSwoTnQoKSxqZCkpKT09PXFlKChGMSgpLF80KSl9LEkocnIsIkVuZExhYmVsU29ydGVyL2xhbWJkYSQzJFR5cGUiLDE2MjApLEQoMTYyMSwxLHRpLGNaKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBpTygpLHFlKFEobCh0LDcyKSwoTnQoKSxqZCkpKT09PXFlKChGMSgpLHJDKSl9LEkocnIsIkVuZExhYmVsU29ydGVyL2xhbWJkYSQ0JFR5cGUiLDE2MjEpLEQoMTU2OCwxLHRzLHVaKSxoLktmPWZ1bmN0aW9uKHQsbil7eUxuKHRoaXMsbCh0LDM2KSl9LGguYj0wLGguYz0wLEkocnIsIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IiLDE1NjgpLEQoMTU2OSwxLHt9LGxaKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24obCh0LDMwKS5hLDE2KSl9LEkocnIsIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDAkVHlwZSIsMTU2OSksRCgxNTcwLDEse30saFMpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyB2dyhuZXcgaHIoZHIocXMobCh0LDEwKSkuYS5LYygpLG5ldyBqKSkpKX0sSShyciwiRmluYWxTcGxpbmVCZW5kcG9pbnRzQ2FsY3VsYXRvci9sYW1iZGEkMSRUeXBlIiwxNTcwKSxEKDE1NzEsMSx0aSxpSSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4hRG8obCh0LDE4KSl9LEkocnIsIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDIkVHlwZSIsMTU3MSksRCgxNTcyLDEsdGksZmopLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIG5zKGwodCwxOCksKGZ0KCksZnYpKX0sSShyciwiRmluYWxTcGxpbmVCZW5kcG9pbnRzQ2FsY3VsYXRvci9sYW1iZGEkMyRUeXBlIiwxNTcyKSxEKDE1NzMsMSxmcixYV2UpLGguQ2Q9ZnVuY3Rpb24odCl7TF9uKHRoaXMuYSxsKHQsMTMxKSl9LEkocnIsIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDQkVHlwZSIsMTU3MyksRCgxNTc0LDEsZnIsaDUpLGguQ2Q9ZnVuY3Rpb24odCl7Sk4obCh0LDE4KS5hKX0sSShyciwiRmluYWxTcGxpbmVCZW5kcG9pbnRzQ2FsY3VsYXRvci9sYW1iZGEkNSRUeXBlIiwxNTc0KSxEKDgwMywxLHRzLHd3ZSksaC5LZj1mdW5jdGlvbih0LG4pe2RNbih0aGlzLGwodCwzNiksbil9LEkocnIsIkdyYXBoVHJhbnNmb3JtZXIiLDgwMyksRCg1MTcsMjIsezM6MSwzNDoxLDIyOjEsNTE3OjF9LEkzZSk7dmFyIGgxZSxkQiwkOHQ9RnIocnIsIkdyYXBoVHJhbnNmb3JtZXIvTW9kZSIsNTE3LEhyLHFwbixFMW4pLHo4dDtEKDE1NzUsMSx0cyxmNSksaC5LZj1mdW5jdGlvbih0LG4pe1BUbihsKHQsMzYpLG4pfSxJKHJyLCJIaWVyYXJjaGljYWxOb2RlUmVzaXppbmdQcm9jZXNzb3IiLDE1NzUpLEQoMTU3NiwxLHRzLGhaKSxoLktmPWZ1bmN0aW9uKHQsbil7ZTNuKGwodCwzNiksbil9LEkocnIsIkhpZXJhcmNoaWNhbFBvcnRDb25zdHJhaW50UHJvY2Vzc29yIiwxNTc2KSxEKDE1NzcsMSxpaSx0MCksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBrNm4obCh0LDEwKSxsKG4sMTApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJyLCJIaWVyYXJjaGljYWxQb3J0Q29uc3RyYWludFByb2Nlc3Nvci9Ob2RlQ29tcGFyYXRvciIsMTU3NyksRCgxNTc4LDEsdHMsWjcpLGguS2Y9ZnVuY3Rpb24odCxuKXtFQW4obCh0LDM2KSxuKX0sSShyciwiSGllcmFyY2hpY2FsUG9ydER1bW15U2l6ZVByb2Nlc3NvciIsMTU3OCksRCgxNTc5LDEsdHMsZlopLGguS2Y9ZnVuY3Rpb24odCxuKXtPU24odGhpcyxsKHQsMzYpLG4pfSxoLmE9MCxJKHJyLCJIaWVyYXJjaGljYWxQb3J0T3J0aG9nb25hbEVkZ2VSb3V0ZXIiLDE1NzkpLEQoMTU4MCwxLGlpLFU5KSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFBobihsKHQsMTApLGwobiwxMCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkocnIsIkhpZXJhcmNoaWNhbFBvcnRPcnRob2dvbmFsRWRnZVJvdXRlci8xIiwxNTgwKSxEKDE1ODEsMSxpaSxXZCksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB6dm4obCh0LDEwKSxsKG4sMTApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJyLCJIaWVyYXJjaGljYWxQb3J0T3J0aG9nb25hbEVkZ2VSb3V0ZXIvMiIsMTU4MSksRCgxNTgyLDEsdHMsZFopLGguS2Y9ZnVuY3Rpb24odCxuKXtYeG4obCh0LDM2KSxuKX0sSShyciwiSGllcmFyY2hpY2FsUG9ydFBvc2l0aW9uUHJvY2Vzc29yIiwxNTgyKSxEKDE1ODMsMSx0cyxLdiksaC5LZj1mdW5jdGlvbih0LG4pe2ZJbih0aGlzLGwodCwzNikpfSxoLmE9MCxoLmM9MDt2YXIgQ0ssU0s7SShyciwiSGlnaERlZ3JlZU5vZGVMYXllcmluZ1Byb2Nlc3NvciIsMTU4MyksRCg1ODAsMSx7NTgwOjF9LGdaKSxoLmI9LTEsaC5kPS0xLEkocnIsIkhpZ2hEZWdyZWVOb2RlTGF5ZXJpbmdQcm9jZXNzb3IvSGlnaERlZ3JlZU5vZGVJbmZvcm1hdGlvbiIsNTgwKSxEKDE1ODQsMSx7fSxwWiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gT08oKSxrYShsKHQsMTApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LEkocnIsIkhpZ2hEZWdyZWVOb2RlTGF5ZXJpbmdQcm9jZXNzb3IvbGFtYmRhJDAkVHlwZSIsMTU4NCksRCgxNTg1LDEse30sZGopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIE9PKCkscXMobCh0LDEwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxJKHJyLCJIaWdoRGVncmVlTm9kZUxheWVyaW5nUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE1ODUpLEQoMTU5MSwxLHRzLGJaKSxoLktmPWZ1bmN0aW9uKHQsbil7cEFuKHRoaXMsbCh0LDM2KSxuKX0sSShyciwiSHlwZXJlZGdlRHVtbXlNZXJnZXIiLDE1OTEpLEQoODA0LDEse30sdzRlKSxoLmE9ITEsaC5iPSExLGguYz0hMSxJKHJyLCJIeXBlcmVkZ2VEdW1teU1lcmdlci9NZXJnZVN0YXRlIiw4MDQpLEQoMTU5MiwxLHt9LGZTKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24obCh0LDMwKS5hLDE2KSl9LEkocnIsIkh5cGVyZWRnZUR1bW15TWVyZ2VyL2xhbWJkYSQwJFR5cGUiLDE1OTIpLEQoMTU5MywxLHt9LGRTKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24obCh0LDEwKS5qLDE2KSl9LEkocnIsIkh5cGVyZWRnZUR1bW15TWVyZ2VyL2xhbWJkYSQxJFR5cGUiLDE1OTMpLEQoMTU5NCwxLGZyLGdqKSxoLkNkPWZ1bmN0aW9uKHQpe2wodCwxMikucD0tMX0sSShyciwiSHlwZXJlZGdlRHVtbXlNZXJnZXIvbGFtYmRhJDIkVHlwZSIsMTU5NCksRCgxNTk1LDEsdHMsc0kpLGguS2Y9ZnVuY3Rpb24odCxuKXtkQW4obCh0LDM2KSxuKX0sSShyciwiSHlwZXJub2Rlc1Byb2Nlc3NvciIsMTU5NSksRCgxNTk2LDEsdHMsZTgpLGguS2Y9ZnVuY3Rpb24odCxuKXtrQW4obCh0LDM2KSxuKX0sSShyciwiSW5MYXllckNvbnN0cmFpbnRQcm9jZXNzb3IiLDE1OTYpLEQoMTU5NywxLHRzLG1aKSxoLktmPWZ1bmN0aW9uKHQsbil7cDNuKGwodCwzNiksbil9LEkocnIsIklubmVybW9zdE5vZGVNYXJnaW5DYWxjdWxhdG9yIiwxNTk3KSxEKDE1OTgsMSx0cyxwaiksaC5LZj1mdW5jdGlvbih0LG4pe19Ebih0aGlzLGwodCwzNikpfSxoLmE9aWEsaC5iPWlhLGguYz1ncyxoLmQ9Z3M7dmFyIGtPbj1JKHJyLCJJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIiLDE1OTgpO0QoMTU5OSwxLHt9LGJqKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTgpLmQuaX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LEkocnIsIkludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lci9sYW1iZGEkMCRUeXBlIiwxNTk5KSxEKDE2MDAsMSx7fSxRV2UpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIEJobih0aGlzLmEsR2UodCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0sSShyciwiSW50ZXJhY3RpdmVFeHRlcm5hbFBvcnRQb3NpdGlvbmVyL2xhbWJkYSQxJFR5cGUiLDE2MDApLEQoMTYwMSwxLHt9LHZaKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTgpLmMuaX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LEkocnIsIkludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lci9sYW1iZGEkMiRUeXBlIiwxNjAxKSxEKDE2MDIsMSx7fSxKV2UpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIEZobih0aGlzLmEsR2UodCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0sSShyciwiSW50ZXJhY3RpdmVFeHRlcm5hbFBvcnRQb3NpdGlvbmVyL2xhbWJkYSQzJFR5cGUiLDE2MDIpLEQoMTYwMywxLHt9LFpXZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gTmZuKHRoaXMuYSxHZSh0KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxJKHJyLCJJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIvbGFtYmRhJDQkVHlwZSIsMTYwMyksRCgxNjA0LDEse30sZVllKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBQZm4odGhpcy5hLEdlKHQpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LEkocnIsIkludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lci9sYW1iZGEkNSRUeXBlIiwxNjA0KSxEKDgxLDIyLHszOjEsMzQ6MSwyMjoxLDgxOjEsMTk2OjF9LFdzKSxoLmRnPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZyl7Y2FzZSAxNTpyZXR1cm4gbmV3IFVqO2Nhc2UgMjI6cmV0dXJuIG5ldyBEZWU7Y2FzZSA0NzpyZXR1cm4gbmV3IE5lZTtjYXNlIDI4OmNhc2UgMzU6cmV0dXJuIG5ldyBDWjtjYXNlIDMyOnJldHVybiBuZXcgVjk7Y2FzZSA0MjpyZXR1cm4gbmV3IFlKO2Nhc2UgMTpyZXR1cm4gbmV3IFhKO2Nhc2UgNDE6cmV0dXJuIG5ldyBRSjtjYXNlIDU2OnJldHVybiBuZXcgd3dlKChkRSgpLGRCKSk7Y2FzZSAwOnJldHVybiBuZXcgd3dlKChkRSgpLGgxZSkpO2Nhc2UgMjpyZXR1cm4gbmV3IEpKO2Nhc2UgNTQ6cmV0dXJuIG5ldyBaSjtjYXNlIDMzOnJldHVybiBuZXcgclo7Y2FzZSA1MTpyZXR1cm4gbmV3IHVaO2Nhc2UgNTU6cmV0dXJuIG5ldyBmNTtjYXNlIDEzOnJldHVybiBuZXcgaFo7Y2FzZSAzODpyZXR1cm4gbmV3IFo3O2Nhc2UgNDQ6cmV0dXJuIG5ldyBmWjtjYXNlIDQwOnJldHVybiBuZXcgZFo7Y2FzZSA5OnJldHVybiBuZXcgS3Y7Y2FzZSA0OTpyZXR1cm4gbmV3IG5ydDtjYXNlIDM3OnJldHVybiBuZXcgYlo7Y2FzZSA0MzpyZXR1cm4gbmV3IHNJO2Nhc2UgMjc6cmV0dXJuIG5ldyBlODtjYXNlIDMwOnJldHVybiBuZXcgbVo7Y2FzZSAzOnJldHVybiBuZXcgcGo7Y2FzZSAxODpyZXR1cm4gbmV3IHlaO2Nhc2UgMjk6cmV0dXJuIG5ldyB4WjtjYXNlIDU6cmV0dXJuIG5ldyBmaztjYXNlIDUwOnJldHVybiBuZXcgd1o7Y2FzZSAzNDpyZXR1cm4gbmV3IHN6O2Nhc2UgMzY6cmV0dXJuIG5ldyBkNTtjYXNlIDUyOnJldHVybiBuZXcgSHJlO2Nhc2UgMTE6cmV0dXJuIG5ldyBHOTtjYXNlIDc6cmV0dXJuIG5ldyBWcmU7Y2FzZSAzOTpyZXR1cm4gbmV3IGFJO2Nhc2UgNDU6cmV0dXJuIG5ldyBaMztjYXNlIDE2OnJldHVybiBuZXcgSzk7Y2FzZSAxMDpyZXR1cm4gbmV3IFdldDtjYXNlIDQ4OnJldHVybiBuZXcgbWo7Y2FzZSAyMTpyZXR1cm4gbmV3IG9JO2Nhc2UgMjM6cmV0dXJuIG5ldyBXaWUoKEl3KCksb00pKTtjYXNlIDg6cmV0dXJuIG5ldyBjSTtjYXNlIDEyOnJldHVybiBuZXcgX1o7Y2FzZSA0OnJldHVybiBuZXcgdUk7Y2FzZSAxOTpyZXR1cm4gbmV3IGN6O2Nhc2UgMTc6cmV0dXJuIG5ldyBJWjtjYXNlIDUzOnJldHVybiBuZXcgT1o7Y2FzZSA2OnJldHVybiBuZXcgVGo7Y2FzZSAyNTpyZXR1cm4gbmV3IEtRZTtjYXNlIDQ2OnJldHVybiBuZXcgRlo7Y2FzZSAzMTpyZXR1cm4gbmV3IFZydDtjYXNlIDE0OnJldHVybiBuZXcgVVo7Y2FzZSAyNjpyZXR1cm4gbmV3IEZlZTtjYXNlIDIwOnJldHVybiBuZXcgQWo7Y2FzZSAyNDpyZXR1cm4gbmV3IFdpZSgoSXcoKSxNVykpO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKEZoZSsodGhpcy5mIT1udWxsP3RoaXMuZjoiIit0aGlzLmcpKSl9fTt2YXIgU0FlLF9BZSxBQWUsTEFlLE1BZSxEQWUsSUFlLE9BZSxOQWUsUEFlLEQ2LF9LLEFLLEJBZSxGQWUsUkFlLGpBZSwkQWUsekFlLHFBZSx6TCxIQWUsVkFlLFVBZSxHQWUsS0FlLGYxZSxMSyxNSyxXQWUsREssSUssT0ssTFQsdTQsbDQsWUFlLE5LLFBLLFhBZSxCSyxGSyxRQWUsSkFlLFpBZSxlTGUsUkssZDFlLGdCLGpLLCRLLHpLLHFLLHRMZSxuTGUsckxlLGlMZSxFT249RnIocnIsUmhlLDgxLEhyLHJidCxrMG4pLHE4dDtEKDE2MDUsMSx0cyx5WiksaC5LZj1mdW5jdGlvbih0LG4pe0NEbihsKHQsMzYpLG4pfSxJKHJyLCJJbnZlcnRlZFBvcnRQcm9jZXNzb3IiLDE2MDUpLEQoMTYwNiwxLHRzLHhaKSxoLktmPWZ1bmN0aW9uKHQsbil7eF9uKGwodCwzNiksbil9LEkocnIsIkxhYmVsQW5kTm9kZVNpemVQcm9jZXNzb3IiLDE2MDYpLEQoMTYwNywxLHRpLGtaKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTApLms9PShabigpLFBzKX0sSShyciwiTGFiZWxBbmROb2RlU2l6ZVByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNjA3KSxEKDE2MDgsMSx0aSxFWiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDEwKS5rPT0oWm4oKSxVcyl9LEkocnIsIkxhYmVsQW5kTm9kZVNpemVQcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTYwOCksRCgxNjA5LDEsZnIsdml0KSxoLkNkPWZ1bmN0aW9uKHQpe3Jsbih0aGlzLmIsdGhpcy5hLHRoaXMuYyxsKHQsMTApKX0saC5hPSExLGguYz0hMSxJKHJyLCJMYWJlbEFuZE5vZGVTaXplUHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUiLDE2MDkpLEQoMTYxMCwxLHRzLGZrKSxoLktmPWZ1bmN0aW9uKHQsbil7UU1uKGwodCwzNiksbil9O3ZhciBIOHQ7SShyciwiTGFiZWxEdW1teUluc2VydGVyIiwxNjEwKSxEKDE2MTEsMSxMZCxZZCksaC5MYj1mdW5jdGlvbih0KXtyZXR1cm4gcWUoUShsKHQsNzIpLChOdCgpLGpkKSkpPT09cWUoKEYxKCksbkMpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIHFlKFEobCh0LDcyKSwoTnQoKSxqZCkpKT09PXFlKChGMSgpLG5DKSl9LEkocnIsIkxhYmVsRHVtbXlJbnNlcnRlci8xIiwxNjExKSxEKDE2MTIsMSx0cyx3WiksaC5LZj1mdW5jdGlvbih0LG4pe2pNbihsKHQsMzYpLG4pfSxJKHJyLCJMYWJlbER1bW15UmVtb3ZlciIsMTYxMiksRCgxNjEzLDEsdGksVXYpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIFJ0KEJ0KFEobCh0LDcyKSwoTnQoKSx0ZGUpKSkpfSxJKHJyLCJMYWJlbER1bW15UmVtb3Zlci9sYW1iZGEkMCRUeXBlIiwxNjEzKSxEKDEzNzgsMSx0cyxzeiksaC5LZj1mdW5jdGlvbih0LG4pe0RNbih0aGlzLGwodCwzNiksbil9LGguYT1udWxsO3ZhciBnMWU7SShyciwiTGFiZWxEdW1teVN3aXRjaGVyIiwxMzc4KSxEKDI5MywxLHsyOTM6MX0sbm10KSxoLmM9MCxoLmQ9bnVsbCxoLmY9MCxJKHJyLCJMYWJlbER1bW15U3dpdGNoZXIvTGFiZWxEdW1teUluZm8iLDI5MyksRCgxMzc5LDEse30sVFopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGx4KCksbmV3IGJuKG51bGwsbmV3IGtuKGwodCwzMCkuYSwxNikpfSxJKHJyLCJMYWJlbER1bW15U3dpdGNoZXIvbGFtYmRhJDAkVHlwZSIsMTM3OSksRCgxMzgwLDEsdGksZ1MpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGx4KCksbCh0LDEwKS5rPT0oWm4oKSxjdSl9LEkocnIsIkxhYmVsRHVtbXlTd2l0Y2hlci9sYW1iZGEkMSRUeXBlIiwxMzgwKSxEKDEzODEsMSx7fSx0WWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIHZmbih0aGlzLmEsbCh0LDEwKSl9LEkocnIsIkxhYmVsRHVtbXlTd2l0Y2hlci9sYW1iZGEkMiRUeXBlIiwxMzgxKSxEKDEzODIsMSxmcixuWWUpLGguQ2Q9ZnVuY3Rpb24odCl7UmduKHRoaXMuYSxsKHQsMjkzKSl9LEkocnIsIkxhYmVsRHVtbXlTd2l0Y2hlci9sYW1iZGEkMyRUeXBlIiwxMzgyKSxEKDEzODMsMSxpaSxwUyksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBjZ24obCh0LDI5MyksbChuLDI5MykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkocnIsIkxhYmVsRHVtbXlTd2l0Y2hlci9sYW1iZGEkNCRUeXBlIiwxMzgzKSxEKDgwMiwxLHRzLENaKSxoLktmPWZ1bmN0aW9uKHQsbil7eXZuKGwodCwzNiksbil9LEkocnIsIkxhYmVsTWFuYWdlbWVudFByb2Nlc3NvciIsODAyKSxEKDE2MTQsMSx0cyxkNSksaC5LZj1mdW5jdGlvbih0LG4pe1FDbihsKHQsMzYpLG4pfSxJKHJyLCJMYWJlbFNpZGVTZWxlY3RvciIsMTYxNCksRCgxNjIyLDEsdHMsRzkpLGguS2Y9ZnVuY3Rpb24odCxuKXtSQW4obCh0LDM2KSxuKX0sSShyciwiTGF5ZXJDb25zdHJhaW50UG9zdHByb2Nlc3NvciIsMTYyMiksRCgxNjIzLDEsdHMsVnJlKSxoLktmPWZ1bmN0aW9uKHQsbil7T0VuKGwodCwzNiksbil9O3ZhciBzTGU7SShyciwiTGF5ZXJDb25zdHJhaW50UHJlcHJvY2Vzc29yIiwxNjIzKSxEKDM3MSwyMix7MzoxLDM0OjEsMjI6MSwzNzE6MX0sZ3EpO3ZhciBwQixISyxWSyxwMWUsVjh0PUZyKHJyLCJMYXllckNvbnN0cmFpbnRQcmVwcm9jZXNzb3IvSGlkZGVuTm9kZUNvbm5lY3Rpb25zIiwzNzEsSHIsSmJuLEUwbiksVTh0O0QoMTYyNCwxLHRzLGFJKSxoLktmPWZ1bmN0aW9uKHQsbil7dE1uKGwodCwzNiksbil9LEkocnIsIkxheWVyU2l6ZUFuZEdyYXBoSGVpZ2h0Q2FsY3VsYXRvciIsMTYyNCksRCgxNjI1LDEsdHMsWjMpLGguS2Y9ZnVuY3Rpb24odCxuKXtCVG4obCh0LDM2KSxuKX0sSShyciwiTG9uZ0VkZ2VKb2luZXIiLDE2MjUpLEQoMTYyNiwxLHRzLEs5KSxoLktmPWZ1bmN0aW9uKHQsbil7RExuKGwodCwzNiksbil9LEkocnIsIkxvbmdFZGdlU3BsaXR0ZXIiLDE2MjYpLEQoMTYyNywxLHRzLFdldCksaC5LZj1mdW5jdGlvbih0LG4pe2ZEbih0aGlzLGwodCwzNiksbil9LGguZT0wLGguZj0wLGguaj0wLGguaz0wLGgubj0wLGgubz0wO3ZhciBHOHQsSzh0O0kocnIsIk5vZGVQcm9tb3Rpb24iLDE2MjcpLEQoMTYyOCwxLGlpLFNaKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEN5bihsKHQsMTApLGwobiwxMCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkocnIsIk5vZGVQcm9tb3Rpb24vMSIsMTYyOCksRCgxNjI5LDEsaWksYlMpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gU3luKGwodCwxMCksbChuLDEwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShyciwiTm9kZVByb21vdGlvbi8yIiwxNjI5KSxEKDE2MzAsMSx7fSxoZCksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDQyKSxZcSgpLEhuKCksITB9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxJKHJyLCJOb2RlUHJvbW90aW9uL2xhbWJkYSQwJFR5cGUiLDE2MzApLEQoMTYzMSwxLHt9LGFZZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4geDJuKHRoaXMuYSxsKHQsNDIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguYT0wLEkocnIsIk5vZGVQcm9tb3Rpb24vbGFtYmRhJDEkVHlwZSIsMTYzMSksRCgxNjMyLDEse30sb1llKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiB5Mm4odGhpcy5hLGwodCw0MikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5hPTAsSShyciwiTm9kZVByb21vdGlvbi9sYW1iZGEkMiRUeXBlIiwxNjMyKSxEKDE2MzMsMSx0cyxtaiksaC5LZj1mdW5jdGlvbih0LG4pe2FJbihsKHQsMzYpLG4pfSxJKHJyLCJOb3J0aFNvdXRoUG9ydFBvc3Rwcm9jZXNzb3IiLDE2MzMpLEQoMTYzNCwxLHRzLG9JKSxoLktmPWZ1bmN0aW9uKHQsbil7JERuKGwodCwzNiksbil9LEkocnIsIk5vcnRoU291dGhQb3J0UHJlcHJvY2Vzc29yIiwxNjM0KSxEKDE2MzUsMSxpaSxXOSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiAkM24obCh0LDEyKSxsKG4sMTIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJyLCJOb3J0aFNvdXRoUG9ydFByZXByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNjM1KSxEKDE2MzYsMSx0cyxjSSksaC5LZj1mdW5jdGlvbih0LG4pe25BbihsKHQsMzYpLG4pfSxJKHJyLCJQYXJ0aXRpb25NaWRwcm9jZXNzb3IiLDE2MzYpLEQoMTYzNywxLHRpLHZqKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBucyhsKHQsMTApLChOdCgpLEhUKSl9LEkocnIsIlBhcnRpdGlvbk1pZHByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNjM3KSxEKDE2MzgsMSxmcixjWWUpLGguQ2Q9ZnVuY3Rpb24odCl7eHBuKHRoaXMuYSxsKHQsMTApKX0sSShyciwiUGFydGl0aW9uTWlkcHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE2MzgpLEQoMTYzOSwxLHRzLF9aKSxoLktmPWZ1bmN0aW9uKHQsbil7ckNuKGwodCwzNiksbil9LEkocnIsIlBhcnRpdGlvblBvc3Rwcm9jZXNzb3IiLDE2MzkpLEQoMTY0MCwxLHRzLHVJKSxoLktmPWZ1bmN0aW9uKHQsbil7bUVuKGwodCwzNiksbil9LEkocnIsIlBhcnRpdGlvblByZXByb2Nlc3NvciIsMTY0MCksRCgxNjQxLDEsdGksQVopLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIG5zKGwodCwxMCksKE50KCksSFQpKX0sSShyciwiUGFydGl0aW9uUHJlcHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE2NDEpLEQoMTY0MiwxLHt9LExaKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYm4obnVsbCxuZXcgdncobmV3IGhyKGRyKHFzKGwodCwxMCkpLmEuS2MoKSxuZXcgaikpKSl9LEkocnIsIlBhcnRpdGlvblByZXByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNjQyKSxEKDE2NDMsMSx0aSx3aiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbzZuKGwodCwxOCkpfSxJKHJyLCJQYXJ0aXRpb25QcmVwcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTY0MyksRCgxNjQ0LDEsZnIsdDgpLGguQ2Q9ZnVuY3Rpb24odCl7cnluKGwodCwxOCkpfSxJKHJyLCJQYXJ0aXRpb25QcmVwcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTY0NCksRCgxNjQ1LDEsdHMsY3opLGguS2Y9ZnVuY3Rpb24odCxuKXtCX24obCh0LDM2KSxuKX07dmFyIGFMZSxXOHQsWTh0LFg4dCxvTGUsY0xlO0kocnIsIlBvcnRMaXN0U29ydGVyIiwxNjQ1KSxEKDE2NDgsMSxpaSx5aiksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBLY3QobCh0LDEyKSxsKG4sMTIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJyLCJQb3J0TGlzdFNvcnRlci9sYW1iZGEkMCRUeXBlIiwxNjQ4KSxEKDE2NTAsMSxpaSxuOCksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBTbXQobCh0LDEyKSxsKG4sMTIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJyLCJQb3J0TGlzdFNvcnRlci9sYW1iZGEkMSRUeXBlIiwxNjUwKSxEKDE2NDYsMSx7fSxNWiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gVEUoKSxsKHQsMTIpLmV9LEkocnIsIlBvcnRMaXN0U29ydGVyL2xhbWJkYSQyJFR5cGUiLDE2NDYpLEQoMTY0NywxLHt9LGxJKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBURSgpLGwodCwxMikuZ30sSShyciwiUG9ydExpc3RTb3J0ZXIvbGFtYmRhJDMkVHlwZSIsMTY0NyksRCgxNjQ5LDEsaWksRFopLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gRDduKGwodCwxMiksbChuLDEyKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShyciwiUG9ydExpc3RTb3J0ZXIvbGFtYmRhJDQkVHlwZSIsMTY0OSksRCgxNjUxLDEsdHMsSVopLGguS2Y9ZnVuY3Rpb24odCxuKXtHRW4obCh0LDM2KSxuKX0sSShyciwiUG9ydFNpZGVQcm9jZXNzb3IiLDE2NTEpLEQoMTY1MiwxLHRzLE9aKSxoLktmPWZ1bmN0aW9uKHQsbil7S1NuKGwodCwzNiksbil9LEkocnIsIlJldmVyc2VkRWRnZVJlc3RvcmVyIiwxNjUyKSxEKDE2NTcsMSx0cyxLUWUpLGguS2Y9ZnVuY3Rpb24odCxuKXtkN24odGhpcyxsKHQsMzYpLG4pfSxJKHJyLCJTZWxmTG9vcFBvcnRSZXN0b3JlciIsMTY1NyksRCgxNjU4LDEse30sTlopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShyciwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDAkVHlwZSIsMTY1OCksRCgxNjU5LDEsdGkseGopLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMCkuaz09KFpuKCksUHMpfSxJKHJyLCJTZWxmTG9vcFBvcnRSZXN0b3Jlci9sYW1iZGEkMSRUeXBlIiwxNjU5KSxEKDE2NjAsMSx0aSxQWiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbnMobCh0LDEwKSwoZnQoKSxoMykpfSxJKHJyLCJTZWxmTG9vcFBvcnRSZXN0b3Jlci9sYW1iZGEkMiRUeXBlIiwxNjYwKSxEKDE2NjEsMSx7fSxCWiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbChRKGwodCwxMCksKGZ0KCksaDMpKSwzMzcpfSxJKHJyLCJTZWxmTG9vcFBvcnRSZXN0b3Jlci9sYW1iZGEkMyRUeXBlIiwxNjYxKSxEKDE2NjIsMSxmcixpWWUpLGguQ2Q9ZnVuY3Rpb24odCl7QTluKHRoaXMuYSxsKHQsMzM3KSl9LEkocnIsIlNlbGZMb29wUG9ydFJlc3RvcmVyL2xhbWJkYSQ0JFR5cGUiLDE2NjIpLEQoODA1LDEsZnIsa2opLGguQ2Q9ZnVuY3Rpb24odCl7ejluKGwodCwxMDUpKX0sSShyciwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDUkVHlwZSIsODA1KSxEKDE2NjMsMSx0cyxGWiksaC5LZj1mdW5jdGlvbih0LG4pe3c2bihsKHQsMzYpLG4pfSxJKHJyLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IiLDE2NjMpLEQoMTY2NCwxLHt9LFJaKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24obCh0LDMwKS5hLDE2KSl9LEkocnIsIlNlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNjY0KSxEKDE2NjUsMSx0aSxqWiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDEwKS5rPT0oWm4oKSxQcyl9LEkocnIsIlNlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNjY1KSxEKDE2NjYsMSx0aSwkWiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbnMobCh0LDEwKSwoZnQoKSxoMykpfSxJKHJyLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTY2NiksRCgxNjY3LDEsZnIsRWopLGguQ2Q9ZnVuY3Rpb24odCl7TThuKGwodCwxMCkpfSxJKHJyLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTY2NyksRCgxNjY4LDEse30selopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbihsKHQsMTA1KS5mLDEpKX0sSShyciwiU2VsZkxvb3BQb3N0UHJvY2Vzc29yL2xhbWJkYSQ0JFR5cGUiLDE2NjgpLEQoMTY2OSwxLGZyLHJZZSksaC5DZD1mdW5jdGlvbih0KXtubW4odGhpcy5hLGwodCwzNDApKX0sSShyciwiU2VsZkxvb3BQb3N0UHJvY2Vzc29yL2xhbWJkYSQ1JFR5cGUiLDE2NjkpLEQoMTY3MCwxLHRpLHFaKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiEhbCh0LDEwNSkuaX0sSShyciwiU2VsZkxvb3BQb3N0UHJvY2Vzc29yL2xhbWJkYSQ2JFR5cGUiLDE2NzApLEQoMTY3MSwxLGZyLHNZZSksaC5DZD1mdW5jdGlvbih0KXtudW4odGhpcy5hLGwodCwxMDUpKX0sSShyciwiU2VsZkxvb3BQb3N0UHJvY2Vzc29yL2xhbWJkYSQ3JFR5cGUiLDE2NzEpLEQoMTY1MywxLHRzLFRqKSxoLktmPWZ1bmN0aW9uKHQsbil7eFRuKGwodCwzNiksbil9LEkocnIsIlNlbGZMb29wUHJlUHJvY2Vzc29yIiwxNjUzKSxEKDE2NTQsMSx7fSxDaiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGJuKG51bGwsbmV3IGtuKGwodCwxMDUpLmYsMSkpfSxJKHJyLCJTZWxmTG9vcFByZVByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNjU0KSxEKDE2NTUsMSx7fSxTaiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDM0MCkuYX0sSShyciwiU2VsZkxvb3BQcmVQcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTY1NSksRCgxNjU2LDEsZnIsSFopLGguQ2Q9ZnVuY3Rpb24odCl7c2huKGwodCwxOCkpfSxJKHJyLCJTZWxmTG9vcFByZVByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxNjU2KSxEKDE2NzIsMSx0cyxWcnQpLGguS2Y9ZnVuY3Rpb24odCxuKXt1OW4odGhpcyxsKHQsMzYpLG4pfSxJKHJyLCJTZWxmTG9vcFJvdXRlciIsMTY3MiksRCgxNjczLDEse30sVlopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShyciwiU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDAkVHlwZSIsMTY3MyksRCgxNjc0LDEsdGksWTkpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMCkuaz09KFpuKCksUHMpfSxJKHJyLCJTZWxmTG9vcFJvdXRlci9sYW1iZGEkMSRUeXBlIiwxNjc0KSxEKDE2NzUsMSx0aSxyOCksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbnMobCh0LDEwKSwoZnQoKSxoMykpfSxJKHJyLCJTZWxmTG9vcFJvdXRlci9sYW1iZGEkMiRUeXBlIiwxNjc1KSxEKDE2NzYsMSx7fSxtUyksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbChRKGwodCwxMCksKGZ0KCksaDMpKSwzMzcpfSxJKHJyLCJTZWxmTG9vcFJvdXRlci9sYW1iZGEkMyRUeXBlIiwxNjc2KSxEKDE2NzcsMSxmcixBZXQpLGguQ2Q9ZnVuY3Rpb24odCl7cHBuKHRoaXMuYSx0aGlzLmIsbCh0LDMzNykpfSxJKHJyLCJTZWxmTG9vcFJvdXRlci9sYW1iZGEkNCRUeXBlIiwxNjc3KSxEKDE2NzgsMSx0cyxVWiksaC5LZj1mdW5jdGlvbih0LG4pe2pDbihsKHQsMzYpLG4pfSxJKHJyLCJTZW1pSW50ZXJhY3RpdmVDcm9zc01pblByb2Nlc3NvciIsMTY3OCksRCgxNjc5LDEsdGksaEkpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMCkuaz09KFpuKCksUHMpfSxJKHJyLCJTZW1pSW50ZXJhY3RpdmVDcm9zc01pblByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNjc5KSxEKDE2ODAsMSx0aSx2UyksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gb3N0KGwodCwxMCkpLl9iKChOdCgpLHc0KSl9LEkocnIsIlNlbWlJbnRlcmFjdGl2ZUNyb3NzTWluUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE2ODApLEQoMTY4MSwxLGlpLGZJKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG4zbihsKHQsMTApLGwobiwxMCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkocnIsIlNlbWlJbnRlcmFjdGl2ZUNyb3NzTWluUHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUiLDE2ODEpLEQoMTY4MiwxLHt9LF9qKSxoLlZlPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGtwbihsKHQsMTApLGwobiwxMCkpfSxJKHJyLCJTZW1pSW50ZXJhY3RpdmVDcm9zc01pblByb2Nlc3Nvci9sYW1iZGEkMyRUeXBlIiwxNjgyKSxEKDE2ODQsMSx0cyxBaiksaC5LZj1mdW5jdGlvbih0LG4pe3VMbihsKHQsMzYpLG4pfSxJKHJyLCJTb3J0QnlJbnB1dE1vZGVsUHJvY2Vzc29yIiwxNjg0KSxEKDE2ODUsMSx0aSxHWiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDEyKS5nLmMubGVuZ3RoIT0wfSxJKHJyLCJTb3J0QnlJbnB1dE1vZGVsUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE2ODUpLEQoMTY4NiwxLGZyLHVZZSksaC5DZD1mdW5jdGlvbih0KXtHOW4odGhpcy5hLGwodCwxMikpfSxJKHJyLCJTb3J0QnlJbnB1dE1vZGVsUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE2ODYpLEQoMTc1OSw4MTcse30sbWZ0KSxoLmRmPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvO3N3aXRjaCh0aGlzLmM9dCx0aGlzLmEuZyl7Y2FzZSAyOm49bmV3IGJ0LElzKEZpKG5ldyBibihudWxsLG5ldyBrbih0aGlzLmMuYS5iLDE2KSksbmV3IHJlZSksbmV3IEZldCh0aGlzLG4pKSxaTih0aGlzLG5ldyBXWiksVnUobixuZXcgTGopLG4uYy5sZW5ndGg9MCxJcyhGaShuZXcgYm4obnVsbCxuZXcga24odGhpcy5jLmEuYiwxNikpLG5ldyBNaiksbmV3IGhZZShuKSksWk4odGhpcyxuZXcgWVopLFZ1KG4sbmV3IFhaKSxuLmMubGVuZ3RoPTAscj12bnQodWNlKHh5KG5ldyBibihudWxsLG5ldyBrbih0aGlzLmMuYS5iLDE2KSksbmV3IGZZZSh0aGlzKSkpLG5ldyBRWiksSXMobmV3IGJuKG51bGwsbmV3IGtuKHRoaXMuYy5hLmEsMTYpKSxuZXcgRGV0KHIsbikpLFpOKHRoaXMsbmV3IFpaKSxWdShuLG5ldyBEaiksbi5jLmxlbmd0aD0wO2JyZWFrO2Nhc2UgMzphPW5ldyBidCxaTih0aGlzLG5ldyBLWiksbz12bnQodWNlKHh5KG5ldyBibihudWxsLG5ldyBrbih0aGlzLmMuYS5iLDE2KSksbmV3IGxZZSh0aGlzKSkpLG5ldyBKWiksSXMoRmkobmV3IGJuKG51bGwsbmV3IGtuKHRoaXMuYy5hLmIsMTYpKSxuZXcgZWVlKSxuZXcgT2V0KG8sYSkpLFpOKHRoaXMsbmV3IHRlZSksVnUoYSxuZXcgbmVlKSxhLmMubGVuZ3RoPTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgTlFlKX19LGguYj0wLEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uIiwxNzU5KSxEKDE3NjAsMSxMZCxLWiksaC5MYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUobCh0LDYwKS5nLDE1NCl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBEZShsKHQsNjApLmcsMTU0KX0sSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDAkVHlwZSIsMTc2MCksRCgxNzYxLDEse30sbFllKSxoLlllPWZ1bmN0aW9uKHQpe3JldHVybiBMa24odGhpcy5hLGwodCw2MCkpfSxJKGFhLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMSRUeXBlIiwxNzYxKSxEKDE3NjksMSxRVSxMZXQpLGguZGU9ZnVuY3Rpb24oKXtGQSh0aGlzLmEsdGhpcy5iLC0xKX0saC5iPTAsSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDEwJFR5cGUiLDE3NjkpLEQoMTc3MSwxLExkLFdaKSxoLkxiPWZ1bmN0aW9uKHQpe3JldHVybiBEZShsKHQsNjApLmcsMTU0KX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIERlKGwodCw2MCkuZywxNTQpfSxJKGFhLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMTEkVHlwZSIsMTc3MSksRCgxNzcyLDEsZnIsTGopLGguQ2Q9ZnVuY3Rpb24odCl7bCh0LDM4MCkuZGUoKX0sSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDEyJFR5cGUiLDE3NzIpLEQoMTc3MywxLHRpLE1qKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBEZShsKHQsNjApLmcsMTApfSxJKGFhLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMTMkVHlwZSIsMTc3MyksRCgxNzc1LDEsZnIsaFllKSxoLkNkPWZ1bmN0aW9uKHQpe1k0bih0aGlzLmEsbCh0LDYwKSl9LEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxNCRUeXBlIiwxNzc1KSxEKDE3NzQsMSxRVSxOZXQpLGguZGU9ZnVuY3Rpb24oKXtGQSh0aGlzLmIsdGhpcy5hLC0xKX0saC5hPTAsSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE1JFR5cGUiLDE3NzQpLEQoMTc3NiwxLExkLFlaKSxoLkxiPWZ1bmN0aW9uKHQpe3JldHVybiBEZShsKHQsNjApLmcsMTApfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUobCh0LDYwKS5nLDEwKX0sSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE2JFR5cGUiLDE3NzYpLEQoMTc3NywxLGZyLFhaKSxoLkNkPWZ1bmN0aW9uKHQpe2wodCwzODApLmRlKCl9LEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxNyRUeXBlIiwxNzc3KSxEKDE3NzgsMSx7fSxmWWUpLGguWWU9ZnVuY3Rpb24odCl7cmV0dXJuIE1rbih0aGlzLmEsbCh0LDYwKSl9LEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxOCRUeXBlIiwxNzc4KSxEKDE3NzksMSx7fSxRWiksaC5XZT1mdW5jdGlvbigpe3JldHVybiAwfSxJKGFhLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMTkkVHlwZSIsMTc3OSksRCgxNzYyLDEse30sSlopLGguV2U9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDIkVHlwZSIsMTc2MiksRCgxNzgxLDEsZnIsRGV0KSxoLkNkPWZ1bmN0aW9uKHQpe2Vnbih0aGlzLmEsdGhpcy5iLGwodCwzMTYpKX0saC5hPTAsSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDIwJFR5cGUiLDE3ODEpLEQoMTc4MCwxLFFVLElldCksaC5kZT1mdW5jdGlvbigpe0kydCh0aGlzLmEsdGhpcy5iLC0xKX0saC5iPTAsSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDIxJFR5cGUiLDE3ODApLEQoMTc4MiwxLExkLFpaKSxoLkxiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsNjApLCEwfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDYwKSwhMH0sSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDIyJFR5cGUiLDE3ODIpLEQoMTc4MywxLGZyLERqKSxoLkNkPWZ1bmN0aW9uKHQpe2wodCwzODApLmRlKCl9LEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQyMyRUeXBlIiwxNzgzKSxEKDE3NjMsMSx0aSxlZWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIERlKGwodCw2MCkuZywxMCl9LEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQzJFR5cGUiLDE3NjMpLEQoMTc2NSwxLGZyLE9ldCksaC5DZD1mdW5jdGlvbih0KXt0Z24odGhpcy5hLHRoaXMuYixsKHQsNjApKX0saC5hPTAsSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDQkVHlwZSIsMTc2NSksRCgxNzY0LDEsUVUsUGV0KSxoLmRlPWZ1bmN0aW9uKCl7RkEodGhpcy5iLHRoaXMuYSwtMSl9LGguYT0wLEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ1JFR5cGUiLDE3NjQpLEQoMTc2NiwxLExkLHRlZSksaC5MYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDYwKSwhMH0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCw2MCksITB9LEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ2JFR5cGUiLDE3NjYpLEQoMTc2NywxLGZyLG5lZSksaC5DZD1mdW5jdGlvbih0KXtsKHQsMzgwKS5kZSgpfSxJKGFhLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkNyRUeXBlIiwxNzY3KSxEKDE3NjgsMSx0aSxyZWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIERlKGwodCw2MCkuZywxNTQpfSxJKGFhLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkOCRUeXBlIiwxNzY4KSxEKDE3NzAsMSxmcixGZXQpLGguQ2Q9ZnVuY3Rpb24odCl7d3duKHRoaXMuYSx0aGlzLmIsbCh0LDYwKSl9LEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ5JFR5cGUiLDE3NzApLEQoMTU4NiwxLHRzLG5ydCksaC5LZj1mdW5jdGlvbih0LG4pe0ZMbih0aGlzLGwodCwzNiksbil9O3ZhciBROHQ7SShhYSwiSG9yaXpvbnRhbEdyYXBoQ29tcGFjdG9yIiwxNTg2KSxEKDE1ODcsMSx7fSxkWWUpLGguZmY9ZnVuY3Rpb24odCxuKXt2YXIgcixhLG87cmV0dXJuIHE2ZSh0LG4pfHwocj1HNSh0KSxhPUc1KG4pLHImJnIuaz09KFpuKCksVXMpfHxhJiZhLms9PShabigpLFVzKSk/MDoobz1sKFEodGhpcy5hLmEsKGZ0KCksJDYpKSwzMTIpLHpobihvLHI/ci5rOihabigpLEFhKSxhP2EuazooWm4oKSxBYSkpKX0saC5nZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbztyZXR1cm4gcTZlKHQsbik/MToocj1HNSh0KSxhPUc1KG4pLG89bChRKHRoaXMuYS5hLChmdCgpLCQ2KSksMzEyKSxPeWUobyxyP3IuazooWm4oKSxBYSksYT9hLms6KFpuKCksQWEpKSl9LEkoYWEsIkhvcml6b250YWxHcmFwaENvbXBhY3Rvci8xIiwxNTg3KSxEKDE1ODgsMSx7fSxJaiksaC5lZj1mdW5jdGlvbih0LG4pe3JldHVybiBwXygpLHQuYS5pPT0wfSxJKGFhLCJIb3Jpem9udGFsR3JhcGhDb21wYWN0b3IvbGFtYmRhJDAkVHlwZSIsMTU4OCksRCgxNTg5LDEse30sZ1llKSxoLmVmPWZ1bmN0aW9uKHQsbil7cmV0dXJuIENwbih0aGlzLmEsdCxuKX0sSShhYSwiSG9yaXpvbnRhbEdyYXBoQ29tcGFjdG9yL2xhbWJkYSQxJFR5cGUiLDE1ODkpLEQoMTczMCwxLHt9LEdsdCk7dmFyIEo4dCxaOHQ7SShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lciIsMTczMCksRCgxNzM4LDEsdGksd1MpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIHQhPW51bGx9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvMG1ldGhvZHJlZiRub25OdWxsJFR5cGUiLDE3MzgpLEQoMTczMSwxLHt9LGllZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gdTAoKSx4YyhRKGwobCh0LDYwKS5nLDEwKSwoZnQoKSx6aSkpKX0sSShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMCRUeXBlIiwxNzMxKSxEKDE3MzIsMSx7fSxzZWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIHUwKCkscjF0KGwobCh0LDYwKS5nLDE1NCkpfSxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxJFR5cGUiLDE3MzIpLEQoMTc0MSwxLHRpLE9qKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiB1MCgpLERlKGwodCw2MCkuZywxMCl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDEwJFR5cGUiLDE3NDEpLEQoMTc0MiwxLGZyLGFlZSksaC5DZD1mdW5jdGlvbih0KXtNcG4obCh0LDYwKSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDExJFR5cGUiLDE3NDIpLEQoMTc0MywxLHRpLG9lZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gdTAoKSxEZShsKHQsNjApLmcsMTU0KX0sSShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTIkVHlwZSIsMTc0MyksRCgxNzQ3LDEsZnIsY2VlKSxoLkNkPWZ1bmN0aW9uKHQpe280bihsKHQsNjApKX0sSShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTMkVHlwZSIsMTc0NyksRCgxNzQ0LDEsZnIscFllKSxoLkNkPWZ1bmN0aW9uKHQpe05sbih0aGlzLmEsbCh0LDgpKX0saC5hPTAsSShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTQkVHlwZSIsMTc0NCksRCgxNzQ1LDEsZnIsYlllKSxoLkNkPWZ1bmN0aW9uKHQpe0Jsbih0aGlzLmEsbCh0LDExNikpfSxoLmE9MCxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxNSRUeXBlIiwxNzQ1KSxEKDE3NDYsMSxmcixtWWUpLGguQ2Q9ZnVuY3Rpb24odCl7UGxuKHRoaXMuYSxsKHQsOCkpfSxoLmE9MCxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxNiRUeXBlIiwxNzQ2KSxEKDE3NDgsMSx7fSx1ZWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIHUwKCksbmV3IGJuKG51bGwsbmV3IHZ3KG5ldyBocihkcihxcyhsKHQsMTApKS5hLktjKCksbmV3IGopKSkpfSxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxNyRUeXBlIiwxNzQ4KSxEKDE3NDksMSx0aSxsZWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIHUwKCksRG8obCh0LDE4KSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDE4JFR5cGUiLDE3NDkpLEQoMTc1MCwxLGZyLHZZZSksaC5DZD1mdW5jdGlvbih0KXtRdm4odGhpcy5hLGwodCwxOCkpfSxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxOSRUeXBlIiwxNzUwKSxEKDE3MzQsMSxmcix3WWUpLGguQ2Q9ZnVuY3Rpb24odCl7VGJuKHRoaXMuYSxsKHQsMTU0KSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDIkVHlwZSIsMTczNCksRCgxNzUxLDEse30saGVlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiB1MCgpLG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMjAkVHlwZSIsMTc1MSksRCgxNzUyLDEse30sTmopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIHUwKCksbmV3IGJuKG51bGwsbmV3IHZ3KG5ldyBocihkcihxcyhsKHQsMTApKS5hLktjKCksbmV3IGopKSkpfSxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyMSRUeXBlIiwxNzUyKSxEKDE3NTMsMSx7fSxmZWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIHUwKCksbChRKGwodCwxOCksKGZ0KCksZnYpKSwxNSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDIyJFR5cGUiLDE3NTMpLEQoMTc1NCwxLHRpLFBqKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBxaG4obCh0LDE1KSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDIzJFR5cGUiLDE3NTQpLEQoMTc1NSwxLGZyLHlZZSksaC5DZD1mdW5jdGlvbih0KXt2a24odGhpcy5hLGwodCwxNSkpfSxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyNCRUeXBlIiwxNzU1KSxEKDE3MzMsMSxmcixSZXQpLGguQ2Q9ZnVuY3Rpb24odCl7eG1uKHRoaXMuYSx0aGlzLmIsbCh0LDE1NCkpfSxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQzJFR5cGUiLDE3MzMpLEQoMTczNSwxLHt9LGRlZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gdTAoKSxuZXcgYm4obnVsbCxuZXcga24obCh0LDMwKS5hLDE2KSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDQkVHlwZSIsMTczNSksRCgxNzM2LDEse30sZ2VlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiB1MCgpLG5ldyBibihudWxsLG5ldyB2dyhuZXcgaHIoZHIocXMobCh0LDEwKSkuYS5LYygpLG5ldyBqKSkpKX0sSShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkNSRUeXBlIiwxNzM2KSxEKDE3MzcsMSx7fSxwZWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIHUwKCksbChRKGwodCwxOCksKGZ0KCksZnYpKSwxNSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDYkVHlwZSIsMTczNyksRCgxNzM5LDEsZnIseFllKSxoLkNkPWZ1bmN0aW9uKHQpe0Rrbih0aGlzLmEsbCh0LDE1KSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDgkVHlwZSIsMTczOSksRCgxNzQwLDEsZnIsamV0KSxoLkNkPWZ1bmN0aW9uKHQpe2Fobih0aGlzLmEsdGhpcy5iLGwodCwxNTQpKX0sSShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkOSRUeXBlIiwxNzQwKSxEKDE3MjksMSx7fSx5UyksaC5jZj1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmO2Zvcih0aGlzLmE9dCx0aGlzLmQ9bmV3IGppZSx0aGlzLmM9V2Uoel9lLFJuLDEyNSx0aGlzLmEuYS5hLmMubGVuZ3RoLDAsMSksdGhpcy5iPTAscj1uZXcgRyh0aGlzLmEuYS5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMzE2KSxuLmQ9dGhpcy5iLGY9aHcock8obmV3IFNtLG4pLHRoaXMuZCksdGhpcy5jW3RoaXMuYl09ZiwrK3RoaXMuYjtmb3IoV01uKHRoaXMpLFdEbih0aGlzKSxRVG4odGhpcyksb2xlKGJhZSh0aGlzLmQpLG5ldyBMOCksbz1uZXcgRyh0aGlzLmEuYS5iKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksNjApLGEuZC5jPXRoaXMuY1thLmEuZF0uZSthLmIuYX0saC5iPTAsSShhYSwiTmV0d29ya1NpbXBsZXhDb21wYWN0aW9uIiwxNzI5KSxEKDE1NCwxLHszNDoxLDE1NDoxfSxRQSksaC5GZD1mdW5jdGlvbih0KXtyZXR1cm4gY3duKHRoaXMsbCh0LDE1NCkpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHIxdCh0aGlzKX0sSShhYSwiVmVydGljYWxTZWdtZW50IiwxNTQpLEQoODQxLDEse30sTnhlKSxoLmM9MCxoLmU9MCxoLmk9MCxJKGdMLCJCZXR3ZWVuTGF5ZXJFZGdlVHdvTm9kZUNyb3NzaW5nc0NvdW50ZXIiLDg0MSksRCg2NzcsMSx7Njc3OjF9LERmdCksaC5JYj1mdW5jdGlvbigpe3JldHVybiJBZGphY2VuY3lMaXN0IFtub2RlPSIrdGhpcy5kKyIsIGFkamFjZW5jaWVzPSAiK3RoaXMuYSsiXSJ9LGguYj0wLGguYz0wLGguZj0wLEkoZ0wsIkJldHdlZW5MYXllckVkZ2VUd29Ob2RlQ3Jvc3NpbmdzQ291bnRlci9BZGphY2VuY3lMaXN0Iiw2NzcpLEQoMjk0LDEsezM0OjEsMjk0OjF9LGxydCksaC5GZD1mdW5jdGlvbih0KXtyZXR1cm4gVGRuKHRoaXMsbCh0LDI5NCkpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkFkamFjZW5jeSBbcG9zaXRpb249Iit0aGlzLmMrIiwgY2FyZGluYWxpdHk9Iit0aGlzLmErIiwgY3VycmVudENhcmRpbmFsaXR5PSIrdGhpcy5iKyJdIn0saC5hPTAsaC5iPTAsaC5jPTAsSShnTCwiQmV0d2VlbkxheWVyRWRnZVR3b05vZGVDcm9zc2luZ3NDb3VudGVyL0FkamFjZW5jeUxpc3QvQWRqYWNlbmN5IiwyOTQpLEQoMjAyNiwxLHt9LGNwdCksaC5iPTAsaC5lPSExLEkoZ0wsIkNyb3NzaW5nTWF0cml4RmlsbGVyIiwyMDI2KTt2YXIgZXh0PWtzKGJnLCJJSW5pdGlhbGl6YWJsZSIpO0QoMTg2NywxLHpQLHpldCksaC5nZz1mdW5jdGlvbih0LG4scixhLG8sZil7fSxoLmlnPWZ1bmN0aW9uKHQsbixyKXt9LGguZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jIT0oSXcoKSxvTSl9LGguZmc9ZnVuY3Rpb24oKXt0aGlzLmU9V2UoVnIsZGksMjgsdGhpcy5kLDE1LDEpfSxoLmhnPWZ1bmN0aW9uKHQsbil7blt0XVswXS5jLnA9dH0saC5qZz1mdW5jdGlvbih0LG4scixhKXsrK3RoaXMuZH0saC5rZz1mdW5jdGlvbigpe3JldHVybiEwfSxoLmxnPWZ1bmN0aW9uKHQsbixyLGEpe3JldHVybiBZMHQodGhpcyx0LG4sciksT21uKHRoaXMsbil9LGgubWc9ZnVuY3Rpb24odCxuKXt2YXIgcjtyZXR1cm4gcj1NdW4obix0Lmxlbmd0aCksWTB0KHRoaXMsdCxyLG4pLGgwdCh0aGlzLHIpfSxoLmQ9MCxJKGdMLCJHcmVlZHlTd2l0Y2hIZXVyaXN0aWMiLDE4NjcpLEQoMjAyOSwxLHt9LGlzdCksaC5iPTAsaC5kPTAsSShnTCwiTm9ydGhTb3V0aEVkZ2VOZWlnaGJvdXJpbmdOb2RlQ3Jvc3NpbmdzQ291bnRlciIsMjAyOSksRCgyMDE2LDEse30sJGJ0KSxoLmE9ITEsSShnTCwiU3dpdGNoRGVjaWRlciIsMjAxNiksRCgxMDUsMSx7MTA1OjF9LGJwdCksaC5hPW51bGwsaC5jPW51bGwsaC5pPW51bGwsSShGeCwiU2VsZkh5cGVyTG9vcCIsMTA1KSxEKDIwMTMsMSx7fSxyZHQpLGguYz0wLGguZT0wLEkoRngsIlNlbGZIeXBlckxvb3BMYWJlbHMiLDIwMTMpLEQoNDIxLDIyLHszOjEsMzQ6MSwyMjoxLDQyMToxfSxwcSk7dmFyIFZ4LE1ULERULGIxZSx0eHQ9RnIoRngsIlNlbGZIeXBlckxvb3BMYWJlbHMvQWxpZ25tZW50Iiw0MjEsSHIsUWJuLFQwbiksbnh0O0QoMzQwLDEsezM0MDoxfSxCdXQpLEkoRngsIlNlbGZMb29wRWRnZSIsMzQwKSxEKDMzNywxLHszMzc6MX0saWR0KSxoLmE9ITEsSShGeCwiU2VsZkxvb3BIb2xkZXIiLDMzNyksRCgxNzkwLDEsdGksSGopLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIERvKGwodCwxOCkpfSxJKEZ4LCJTZWxmTG9vcEhvbGRlci9sYW1iZGEkMCRUeXBlIiwxNzkwKSxEKDExMywxLHsxMTM6MX0sdWR0KSxoLmE9ITEsaC5jPSExLEkoRngsIlNlbGZMb29wUG9ydCIsMTEzKSxEKDE4NTUsMSx0aSx2ZWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIERvKGwodCwxOCkpfSxJKEZ4LCJTZWxmTG9vcFBvcnQvbGFtYmRhJDAkVHlwZSIsMTg1NSksRCgzNzUsMjIsezM6MSwzNDoxLDIyOjEsMzc1OjF9LGNPKTt2YXIgVUssYkIsR0ssS0ssV0sscnh0PUZyKEZ4LCJTZWxmTG9vcFR5cGUiLDM3NSxIcixxbW4sQzBuKSxpeHQ7RCgxNzk4LDEse30sS3JlKTt2YXIgc3h0LGF4dCxveHQsY3h0O0koQmgsIlBvcnRSZXN0b3JlciIsMTc5OCksRCgzNzIsMjIsezM6MSwzNDoxLDIyOjEsMzcyOjF9LHZzZSk7dmFyIGEzLFJiLG8zLG0xZT1GcihCaCwiUG9ydFJlc3RvcmVyL1BvcnRTaWRlQXJlYSIsMzcyLEhyLFIybix4MG4pLHV4dDtEKDE3OTksMSx7fSx4UyksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gQ2IoKSxsKHQsMTUpLk9jKCl9LEkoQmgsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMCRUeXBlIiwxNzk5KSxEKDE4MDAsMSxmcixtZWUpLGguQ2Q9ZnVuY3Rpb24odCl7Q2IoKSxsKHQsMTEzKS5jPSExfSxJKEJoLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDEkVHlwZSIsMTgwMCksRCgxODA5LDEsdGksQmopLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIENiKCksbCh0LDEyKS5qPT0oQ3QoKSxlcil9LEkoQmgsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMTAkVHlwZSIsMTgwOSksRCgxODEwLDEse30sRmopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIENiKCksbCh0LDExMykuZH0sSShCaCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQxMSRUeXBlIiwxODEwKSxEKDE4MTEsMSxmcixrWWUpLGguQ2Q9ZnVuY3Rpb24odCl7UHVuKHRoaXMuYSxsKHQsMTIpKX0sSShCaCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQxMiRUeXBlIiwxODExKSxEKDE4MDEsMSxmcixFWWUpLGguQ2Q9ZnVuY3Rpb24odCl7UWhuKHRoaXMuYSxsKHQsMTA1KSl9LEkoQmgsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMiRUeXBlIiwxODAxKSxEKDE4MDIsMSxpaSxSaiksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBEd24obCh0LDExMyksbChuLDExMykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoQmgsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMyRUeXBlIiwxODAyKSxEKDE4MDMsMSx0aSxqaiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gQ2IoKSxsKHQsMTEzKS5jfSxJKEJoLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDQkVHlwZSIsMTgwMyksRCgxODA0LDEsdGksR3YpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGszbihsKHQsMTIpKX0sSShCaCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQ1JFR5cGUiLDE4MDQpLEQoMTgwNSwxLHRpLGJlZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gQ2IoKSxsKHQsMTIpLmo9PShDdCgpLFFuKX0sSShCaCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQ2JFR5cGUiLDE4MDUpLEQoMTgwNiwxLHRpLCRqKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBDYigpLGwodCwxMikuaj09KEN0KCksYXIpfSxJKEJoLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDckVHlwZSIsMTgwNiksRCgxODA3LDEsdGksemopLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIHRtbihsKHQsMTIpKX0sSShCaCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQ4JFR5cGUiLDE4MDcpLEQoMTgwOCwxLHRpLHFqKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBDYigpLGwodCwxMikuaj09KEN0KCksRHIpfSxJKEJoLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDkkVHlwZSIsMTgwOCksRCgyNzYsMjIsezM6MSwzNDoxLDIyOjEsMjc2OjF9LFo4KTt2YXIgdjFlLHcxZSx5MWUseDFlLGsxZSxFMWUsVDFlLEMxZSx1TGU9RnIoQmgsIlBvcnRTaWRlQXNzaWduZXIvVGFyZ2V0IiwyNzYsSHIsbXduLFMwbiksbHh0O0QoMTc5MSwxLHt9LGRJKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBGaShuZXcgYm4obnVsbCxuZXcga24obCh0LDEwNSkuaiwxNikpLG5ldyBWail9LEkoQmgsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDEkVHlwZSIsMTc5MSksRCgxNzkyLDEse30sZzUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMTMpLmR9LEkoQmgsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDIkVHlwZSIsMTc5MiksRCgxNzkzLDEsZnIsd2VlKSxoLkNkPWZ1bmN0aW9uKHQpe2xhKGwodCwxMiksKEN0KCksUW4pKX0sSShCaCwiUG9ydFNpZGVBc3NpZ25lci9sYW1iZGEkMyRUeXBlIiwxNzkzKSxEKDE3OTQsMSx7fSx5ZWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMTMpLmR9LEkoQmgsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDQkVHlwZSIsMTc5NCksRCgxNzk1LDEsZnIsVFllKSxoLkNkPWZ1bmN0aW9uKHQpe3Fjbih0aGlzLmEsbCh0LDEyKSl9LEkoQmgsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDUkVHlwZSIsMTc5NSksRCgxNzk2LDEsaWksaTgpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gR2duKGwodCwxMDUpLGwobiwxMDUpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKEJoLCJQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQ2JFR5cGUiLDE3OTYpLEQoMTc5NywxLGlpLGtTKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHBkbihsKHQsMTEzKSxsKG4sMTEzKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShCaCwiUG9ydFNpZGVBc3NpZ25lci9sYW1iZGEkNyRUeXBlIiwxNzk3KSxEKDgyMCwxLHRpLFZqKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTEzKS5jfSxJKEJoLCJQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQ4JFR5cGUiLDgyMCksRCgyMTA4LDEse30pLEkoRGIsIkFic3RyYWN0U2VsZkxvb3BSb3V0ZXIiLDIxMDgpLEQoMTgxNiwxLGlpLHhlZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBLZm4obCh0LDEwNSksbChuLDEwNSkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoRGIsZzN0LDE4MTYpLEQoMTgxNywxLGlpLGtlZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBHZm4obCh0LDEwNSksbChuLDEwNSkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoRGIscDN0LDE4MTcpLEQoMTg1NiwyMTA4LHt9LEVlZSksaC5uZz1mdW5jdGlvbih0LG4scil7cmV0dXJuIHJ9LEkoRGIsIk9ydGhvZ29uYWxTZWxmTG9vcFJvdXRlciIsMTg1NiksRCgxODU4LDEsZnIsJGV0KSxoLkNkPWZ1bmN0aW9uKHQpe1Y4ZSh0aGlzLmIsdGhpcy5hLGwodCw4KSl9LEkoRGIsIk9ydGhvZ29uYWxTZWxmTG9vcFJvdXRlci9sYW1iZGEkMCRUeXBlIiwxODU4KSxEKDE4NTcsMTg1Nix7fSxUZWUpLGgubmc9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87cmV0dXJuIGE9dC5jLmQsUGsociwwLE9pKEphKGEubiksYS5hKSksbz10LmQuZCx1aShyLE9pKEphKG8ubiksby5hKSksWF9uKHIpfSxJKERiLCJQb2x5bGluZVNlbGZMb29wUm91dGVyIiwxODU3KSxEKDE4MTIsMSx7fSxXcmUpLGguYT1udWxsO3ZhciBJNjtJKERiLCJSb3V0aW5nRGlyZWN0b3IiLDE4MTIpLEQoMTgxMywxLGlpLENlZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBmZG4obCh0LDExMyksbChuLDExMykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoRGIsIlJvdXRpbmdEaXJlY3Rvci9sYW1iZGEkMCRUeXBlIiwxODEzKSxEKDE4MTQsMSx7fSxTZWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGVxKCksbCh0LDEwNSkuan0sSShEYiwiUm91dGluZ0RpcmVjdG9yL2xhbWJkYSQxJFR5cGUiLDE4MTQpLEQoMTgxNSwxLGZyLF9lZSksaC5DZD1mdW5jdGlvbih0KXtlcSgpLGwodCwxNSkuamQoSTYpfSxJKERiLCJSb3V0aW5nRGlyZWN0b3IvbGFtYmRhJDIkVHlwZSIsMTgxNSksRCgxODE4LDEse30sQWVlKSxJKERiLCJSb3V0aW5nU2xvdEFzc2lnbmVyIiwxODE4KSxEKDE4MTksMSx0aSxDWWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIG1sbih0aGlzLmEsbCh0LDEwNSkpfSxJKERiLCJSb3V0aW5nU2xvdEFzc2lnbmVyL2xhbWJkYSQwJFR5cGUiLDE4MTkpLEQoMTgyMCwxLGlpLFNZZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB6ZG4odGhpcy5hLGwodCwxMDUpLGwobiwxMDUpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKERiLCJSb3V0aW5nU2xvdEFzc2lnbmVyL2xhbWJkYSQxJFR5cGUiLDE4MjApLEQoMTg1OSwxODU2LHt9LExlZSksaC5uZz1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmLGc7cmV0dXJuIGE9emUoR2UodFUodC5iLmcuYiwoTnQoKSxINikpKSksZz1uZXcgZnJ0KGhlKGxlKEVhLDEpLGR0LDgsMCxbKGY9dC5jLmQsT2kobmV3IEVvKGYubiksZi5hKSldKSksQ1RuKHQsbixyLGcsYSksdWkoZywobz10LmQuZCxPaShuZXcgRW8oby5uKSxvLmEpKSksTGR0KG5ldyBTa2UoZykpfSxJKERiLCJTcGxpbmVTZWxmTG9vcFJvdXRlciIsMTg1OSksRCg1ODYsMSxpaSxwZnQsT2l0KSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGR3dCh0aGlzLGwodCwxMCksbChuLDEwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShxRWUsIk1vZGVsT3JkZXJOb2RlQ29tcGFyYXRvciIsNTg2KSxEKDE4MjEsMSx0aSxNZWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMikuZS5jLmxlbmd0aCE9MH0sSShxRWUsIk1vZGVsT3JkZXJOb2RlQ29tcGFyYXRvci9sYW1iZGEkMCRUeXBlIiwxODIxKSxEKDgyMSwxLGlpLFYwdCxTY3QpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQXN0KHRoaXMsdCxuKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxoLmI9ITEsSShxRWUsIk1vZGVsT3JkZXJQb3J0Q29tcGFyYXRvciIsODIxKSxEKDgxNSwxLHt9LEVTKSxoLm9nPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvLGY7Zm9yKG89aXB0KG4pLHI9bmV3IGJ0LGY9bi5mL28sYT0xO2E8bzsrK2EpdnQocixwdChZcihaYyhiLk1hdGgucm91bmQoYSpmKSkpKSk7cmV0dXJuIHJ9LGgucGc9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sSShPZCwiQVJEQ3V0SW5kZXhIZXVyaXN0aWMiLDgxNSksRCgxNTQ0LDEsdHMsVWopLGguS2Y9ZnVuY3Rpb24odCxuKXtnX24obCh0LDM2KSxuKX0sSShPZCwiQnJlYWtpbmdQb2ludEluc2VydGVyIiwxNTQ0KSxEKDMxMywxLHszMTM6MX0sbzZlKSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9bmV3IHRiLHQuYSs9IkJQSW5mb1siLHQuYSs9YAoJc3RhcnQ9YCx3dSh0LHRoaXMuaSksdC5hKz1gCgllbmQ9YCx3dSh0LHRoaXMuYSksdC5hKz1gCglub2RlU3RhcnRFZGdlPWAsd3UodCx0aGlzLmUpLHQuYSs9YAoJc3RhcnRFbmRFZGdlPWAsd3UodCx0aGlzLmopLHQuYSs9YAoJb3JpZ2luYWxFZGdlPWAsd3UodCx0aGlzLmYpLHQuYSs9YAoJc3RhcnRJbkxheWVyRHVtbXk9YCx3dSh0LHRoaXMuayksdC5hKz1gCglzdGFydEluTGF5ZXJFZGdlPWAsd3UodCx0aGlzLm4pLHQuYSs9YAoJZW5kSW5MYXllckR1bW15PWAsd3UodCx0aGlzLmIpLHQuYSs9YAoJZW5kSW5MYXllckVkZ2U9YCx3dSh0LHRoaXMuYyksdC5hfSxJKE9kLCJCcmVha2luZ1BvaW50SW5zZXJ0ZXIvQlBJbmZvIiwzMTMpLEQoNjYxLDEsezY2MToxfSxCWWUpLGguYT0hMSxoLmI9MCxoLmM9MCxJKE9kLCJCcmVha2luZ1BvaW50SW5zZXJ0ZXIvQ3V0Iiw2NjEpLEQoMTU0NSwxLHRzLERlZSksaC5LZj1mdW5jdGlvbih0LG4pe01UbihsKHQsMzYpLG4pfSxJKE9kLCJCcmVha2luZ1BvaW50UHJvY2Vzc29yIiwxNTQ1KSxEKDE1NDYsMSx0aSxJZWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGlodChsKHQsMTApKX0sSShPZCwiQnJlYWtpbmdQb2ludFByb2Nlc3Nvci8wbWV0aG9kcmVmJGlzRW5kJFR5cGUiLDE1NDYpLEQoMTU0NywxLHRpLE9lZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gc2h0KGwodCwxMCkpfSxJKE9kLCJCcmVha2luZ1BvaW50UHJvY2Vzc29yLzFtZXRob2RyZWYkaXNTdGFydCRUeXBlIiwxNTQ3KSxEKDE1NDgsMSx0cyxOZWUpLGguS2Y9ZnVuY3Rpb24odCxuKXtKVG4odGhpcyxsKHQsMzYpLG4pfSxJKE9kLCJCcmVha2luZ1BvaW50UmVtb3ZlciIsMTU0OCksRCgxNTQ5LDEsZnIsUGVlKSxoLkNkPWZ1bmN0aW9uKHQpe2wodCwxMzEpLms9ITB9LEkoT2QsIkJyZWFraW5nUG9pbnRSZW1vdmVyL2xhbWJkYSQwJFR5cGUiLDE1NDkpLEQoODExLDEse30sTTllKSxoLmI9MCxoLmU9MCxoLmY9MCxoLmo9MCxJKE9kLCJHcmFwaFN0YXRzIiw4MTEpLEQoODEyLDEse30sR2opLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gYi5NYXRoLm1heCh6ZShHZSh0KSksemUoR2UobikpKX0sSShPZCwiR3JhcGhTdGF0cy8wbWV0aG9kcmVmJG1heCRUeXBlIiw4MTIpLEQoODEzLDEse30sS2opLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gYi5NYXRoLm1heCh6ZShHZSh0KSksemUoR2UobikpKX0sSShPZCwiR3JhcGhTdGF0cy8ybWV0aG9kcmVmJG1heCRUeXBlIiw4MTMpLEQoMTcyNiwxLHt9LEJlZSksaC5WZT1mdW5jdGlvbih0LG4pe3JldHVybiBaMW4oR2UodCksR2UobikpfSxJKE9kLCJHcmFwaFN0YXRzL2xhbWJkYSQxJFR5cGUiLDE3MjYpLEQoMTcyNywxLHt9LF9ZZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbGR0KHRoaXMuYSxsKHQsMzApKX0sSShPZCwiR3JhcGhTdGF0cy9sYW1iZGEkMiRUeXBlIiwxNzI3KSxEKDE3MjgsMSx7fSxBWWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIHRidCh0aGlzLmEsbCh0LDMwKSl9LEkoT2QsIkdyYXBoU3RhdHMvbGFtYmRhJDYkVHlwZSIsMTcyOCksRCg4MTQsMSx7fSxXaiksaC5vZz1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiByPWwoUSh0LChOdCgpLHNEZSkpLDE1KSxyfHwoQ24oKSxDbigpLF9vKX0saC5wZz1mdW5jdGlvbigpe3JldHVybiExfSxJKE9kLCJJQ3V0SW5kZXhDYWxjdWxhdG9yL01hbnVhbEN1dEluZGV4Q2FsY3VsYXRvciIsODE0KSxEKDgxNiwxLHt9LFlqKSxoLm9nPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmU7Zm9yKFplPShuLm49PW51bGwmJlJkdChuKSxuLm4pLEU9KG4uZD09bnVsbCYmUmR0KG4pLG4uZCksJGU9V2UoTmEsWm8sMjgsWmUubGVuZ3RoLDE1LDEpLCRlWzBdPVplWzBdLFRlPVplWzBdLEM9MTtDPFplLmxlbmd0aDtDKyspJGVbQ109JGVbQy0xXStaZVtDXSxUZSs9WmVbQ107Zm9yKG89aXB0KG4pLTEsZz1sKFEodCwoTnQoKSxhRGUpKSwxNykuYSxhPWlhLHI9bmV3IGJ0LHo9Yi5NYXRoLm1heCgwLG8tZyk7ejw9Yi5NYXRoLm1pbihuLmYtMSxvK2cpO3orKyl7aWYodGU9VGUvKHorMSksZmU9MCxMPTEsZj1uZXcgYnQsTWU9aWEsQj0wLHc9MCxKPUVbMF0sej09MClNZT1UZSx3PShuLmc9PW51bGwmJihuLmc9RWZ0KG4sbmV3IEtqKSksemUobi5nKSk7ZWxzZXtmb3IoO0w8bi5mOykkZVtMLTFdLWZlPj10ZSYmKHZ0KGYscHQoTCkpLE1lPWIuTWF0aC5tYXgoTWUsJGVbTC0xXS1CKSx3Kz1KLGZlKz0kZVtMLTFdLWZlLEI9JGVbTC0xXSxKPUVbTF0pLEo9Yi5NYXRoLm1heChKLEVbTF0pLCsrTDt3Kz1KfVY9Yi5NYXRoLm1pbigxL01lLDEvbi5iL3cpLFY+YSYmKGE9VixyPWYpfXJldHVybiByfSxoLnBnPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoT2QsIk1TREN1dEluZGV4SGV1cmlzdGljIiw4MTYpLEQoMTY4MywxLHRzLEZlZSksaC5LZj1mdW5jdGlvbih0LG4peyRBbihsKHQsMzYpLG4pfSxJKE9kLCJTaW5nbGVFZGdlR3JhcGhXcmFwcGVyIiwxNjgzKSxEKDIzMiwyMix7MzoxLDM0OjEsMjI6MSwyMzI6MX0sRV8pO3ZhciBPNixJVCxPVCxoNCxxTCxONixOVD1GcihvdSwiQ2VudGVyRWRnZUxhYmVsUGxhY2VtZW50U3RyYXRlZ3kiLDIzMixIcixDdm4sXzBuKSxoeHQ7RCg0MzEsMjIsezM6MSwzNDoxLDIyOjEsNDMxOjF9LE4zZSk7dmFyIGxMZSxTMWUsaExlPUZyKG91LCJDb25zdHJhaW50Q2FsY3VsYXRpb25TdHJhdGVneSIsNDMxLEhyLFVwbixBMG4pLGZ4dDtEKDMyMiwyMix7MzoxLDM0OjEsMjI6MSwzMjI6MSwxODg6MSwxOTY6MX0sd3NlKSxoLmRnPWZ1bmN0aW9uKCl7cmV0dXJuICRwdCh0aGlzKX0saC5xZz1mdW5jdGlvbigpe3JldHVybiAkcHQodGhpcyl9O3ZhciBtQixITCxmTGUsZExlPUZyKG91LCJDcm9zc2luZ01pbmltaXphdGlvblN0cmF0ZWd5IiwzMjIsSHIsajJuLEwwbiksZHh0O0QoMzUxLDIyLHszOjEsMzQ6MSwyMjoxLDM1MToxfSx5c2UpO3ZhciBnTGUsXzFlLFlLLHBMZT1GcihvdSwiQ3V0dGluZ1N0cmF0ZWd5IiwzNTEsSHIsJDJuLE0wbiksZ3h0O0QoMzQ4LDIyLHszOjEsMzQ6MSwyMjoxLDM0ODoxLDE4ODoxLDE5NjoxfSx1TyksaC5kZz1mdW5jdGlvbigpe3JldHVybiBNMnQodGhpcyl9LGgucWc9ZnVuY3Rpb24oKXtyZXR1cm4gTTJ0KHRoaXMpfTt2YXIgYkxlLEExZSxQVCxMMWUsQlQsbUxlPUZyKG91LCJDeWNsZUJyZWFraW5nU3RyYXRlZ3kiLDM0OCxIcixIbW4sRDBuKSxweHQ7RCg0MjgsMjIsezM6MSwzNDoxLDIyOjEsNDI4OjF9LFAzZSk7dmFyIFhLLHZMZSx3TGU9RnIob3UsIkRpcmVjdGlvbkNvbmdydWVuY3kiLDQyOCxIcixWcG4sSTBuKSxieHQ7RCg0NjAsMjIsezM6MSwzNDoxLDIyOjEsNDYwOjF9LHhzZSk7dmFyIEZULE0xZSxQNixteHQ9RnIob3UsIkVkZ2VDb25zdHJhaW50Iiw0NjAsSHIsejJuLGowbiksdnh0O0QoMjgzLDIyLHszOjEsMzQ6MSwyMjoxLDI4MzoxfSxUXyk7dmFyIEQxZSxJMWUsTzFlLE4xZSxRSyxQMWUseUxlPUZyKG91LCJFZGdlTGFiZWxTaWRlU2VsZWN0aW9uIiwyODMsSHIsa3ZuLCQwbiksd3h0O0QoNDg4LDIyLHszOjEsMzQ6MSwyMjoxLDQ4ODoxfSxCM2UpO3ZhciBKSyx4TGUsa0xlPUZyKG91LCJFZGdlU3RyYWlnaHRlbmluZ1N0cmF0ZWd5Iiw0ODgsSHIsSnBuLHowbikseXh0O0QoMjgxLDIyLHszOjEsMzQ6MSwyMjoxLDI4MToxfSxDXyk7dmFyIEIxZSxFTGUsVExlLFpLLENMZSxTTGUsX0xlPUZyKG91LCJGaXhlZEFsaWdubWVudCIsMjgxLEhyLEV2bixSMG4pLHh4dDtEKDI4MiwyMix7MzoxLDM0OjEsMjI6MSwyODI6MX0sU18pO3ZhciBBTGUsTExlLE1MZSxETGUsVkwsSUxlLE9MZT1GcihvdSwiR3JhcGhDb21wYWN0aW9uU3RyYXRlZ3kiLDI4MixIcixUdm4sTzBuKSxreHQ7RCgyNTksMjIsezM6MSwzNDoxLDIyOjEsMjU5OjF9LHV5KTt2YXIgUlQsZVcsalQsdmYsVUwsdFcsJFQsQjYsblcsR0wsRjFlPUZyKG91LCJHcmFwaFByb3BlcnRpZXMiLDI1OSxIcixjM24sTjBuKSxFeHQ7RCgyOTksMjIsezM6MSwzNDoxLDIyOjEsMjk5OjF9LGtzZSk7dmFyIHZCLFIxZSxqMWUsJDFlPUZyKG91LCJHcmVlZHlTd2l0Y2hUeXBlIiwyOTksSHIscTJuLFAwbiksVHh0O0QoMzExLDIyLHszOjEsMzQ6MSwyMjoxLDMxMToxfSxFc2UpO3ZhciBVeCx3QixGNixDeHQ9RnIob3UsIkluTGF5ZXJDb25zdHJhaW50IiwzMTEsSHIsSDJuLEIwbiksU3h0O0QoNDI5LDIyLHszOjEsMzQ6MSwyMjoxLDQyOToxfSxGM2UpO3ZhciB6MWUsTkxlLFBMZT1GcihvdSwiSW50ZXJhY3RpdmVSZWZlcmVuY2VQb2ludCIsNDI5LEhyLEhwbixGMG4pLF94dCxCTGUsR3gsYzMsclcsRkxlLFJMZSxpVyxqTGUseUIsc1csS0wsS3gscHAscTFlLGFXLFdjLCRMZSxqYixMdSxIMWUsVjFlLHhCLGh2LHUzLFd4LHpMZSxZeCxrQixmNCxvMSwkZixVMWUsUjYsS2ksemkscUxlLEhMZSxWTGUsVUxlLEdMZSxHMWUsb1csamwsbDMsSzFlLFh4LFdMLFcxLGo2LGgzLCQ2LHo2LHpULGZ2LEtMZSxXMWUsWTFlLFF4O0QoMTcxLDIyLHszOjEsMzQ6MSwyMjoxLDE3MToxfSxsTyk7dmFyIFlMLCRiLFhMLGQ0LEVCLFdMZT1GcihvdSwiTGF5ZXJDb25zdHJhaW50IiwxNzEsSHIsVW1uLHEwbiksQXh0O0QoODU5LDEsUGYsWXJlKSxoLmhmPWZ1bmN0aW9uKHQpe3NuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxWRWUpLCIiKSwiRGlyZWN0aW9uIENvbmdydWVuY3kiKSwiU3BlY2lmaWVzIGhvdyBkcmF3aW5ncyBvZiB0aGUgc2FtZSBncmFwaCB3aXRoIGRpZmZlcmVudCBsYXlvdXQgZGlyZWN0aW9ucyBjb21wYXJlIHRvIGVhY2ggb3RoZXI6IGVpdGhlciBhIG5hdHVyYWwgcmVhZGluZyBkaXJlY3Rpb24gaXMgcHJlc2VydmVkIG9yIHRoZSBkcmF3aW5ncyBhcmUgcm90YXRlZCB2ZXJzaW9ucyBvZiBlYWNoIG90aGVyLiIpLGlNZSksKGcyKCkscHMpKSx3TGUpLHVuKChyMSgpLFBuKSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFVFZSksIiIpLCJGZWVkYmFjayBFZGdlcyIpLCJXaGV0aGVyIGZlZWRiYWNrIGVkZ2VzIHNob3VsZCBiZSBoaWdobGlnaHRlZCBieSByb3V0aW5nIGFyb3VuZCB0aGUgbm9kZXMuIiksKEhuKCksITEpKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsZkcpLCIiKSwiSW50ZXJhY3RpdmUgUmVmZXJlbmNlIFBvaW50IiksIkRldGVybWluZXMgd2hpY2ggcG9pbnQgb2YgYSBub2RlIGlzIGNvbnNpZGVyZWQgYnkgaW50ZXJhY3RpdmUgbGF5b3V0IHBoYXNlcy4iKSxsTWUpLHBzKSxQTGUpLHVuKFBuKSkpKSxRcyh0LGZHLHpoZSxrOXQpLFFzKHQsZkcscEwseDl0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsR0VlKSwiIiksIk1lcmdlIEVkZ2VzIiksIkVkZ2VzIHRoYXQgaGF2ZSBubyBwb3J0cyBhcmUgbWVyZ2VkIHNvIHRoZXkgdG91Y2ggdGhlIGNvbm5lY3RlZCBub2RlcyBhdCB0aGUgc2FtZSBwb2ludHMuIFdoZW4gdGhpcyBvcHRpb24gaXMgZGlzYWJsZWQsIG9uZSBwb3J0IGlzIGNyZWF0ZWQgZm9yIGVhY2ggZWRnZSBkaXJlY3RseSBjb25uZWN0ZWQgdG8gYSBub2RlLiBXaGVuIGl0IGlzIGVuYWJsZWQsIGFsbCBzdWNoIGluY29taW5nIGVkZ2VzIHNoYXJlIGFuIGlucHV0IHBvcnQsIGFuZCBhbGwgb3V0Z29pbmcgZWRnZXMgc2hhcmUgYW4gb3V0cHV0IHBvcnQuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxLRWUpLCIiKSwiTWVyZ2UgSGllcmFyY2h5LUNyb3NzaW5nIEVkZ2VzIiksIklmIGhpZXJhcmNoaWNhbCBsYXlvdXQgaXMgYWN0aXZlLCBoaWVyYXJjaHktY3Jvc3NpbmcgZWRnZXMgdXNlIGFzIGZldyBoaWVyYXJjaGljYWwgcG9ydHMgYXMgcG9zc2libGUuIFRoZXkgYXJlIGJyb2tlbiBieSB0aGUgYWxnb3JpdGhtLCB3aXRoIGhpZXJhcmNoaWNhbCBwb3J0cyBpbnNlcnRlZCBhcyByZXF1aXJlZC4gVXN1YWxseSwgb25lIHN1Y2ggcG9ydCBpcyBjcmVhdGVkIGZvciBlYWNoIGVkZ2UgYXQgZWFjaCBoaWVyYXJjaHkgY3Jvc3NpbmcgcG9pbnQuIFdpdGggdGhpcyBvcHRpb24gc2V0IHRvIHRydWUsIHdlIHRyeSB0byBjcmVhdGUgYXMgZmV3IGhpZXJhcmNoaWNhbCBwb3J0cyBhcyBwb3NzaWJsZSBpbiB0aGUgcHJvY2Vzcy4gSW4gcGFydGljdWxhciwgYWxsIGVkZ2VzIHRoYXQgZm9ybSBhIGh5cGVyZWRnZSBjYW4gc2hhcmUgYSBwb3J0LiIpLCEwKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChOdW4obm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFdFZSksIiIpLCJBbGxvdyBOb24tRmxvdyBQb3J0cyBUbyBTd2l0Y2ggU2lkZXMiKSwiU3BlY2lmaWVzIHdoZXRoZXIgbm9uLWZsb3cgcG9ydHMgbWF5IHN3aXRjaCBzaWRlcyBpZiB0aGVpciBub2RlJ3MgcG9ydCBjb25zdHJhaW50cyBhcmUgZWl0aGVyIEZJWEVEX1NJREUgb3IgRklYRURfT1JERVIuIEEgbm9uLWZsb3cgcG9ydCBpcyBhIHBvcnQgb24gYSBzaWRlIHRoYXQgaXMgbm90IHBhcnQgb2YgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIGxheW91dCBmbG93LiBGb3IgaW5zdGFuY2UsIGdpdmVuIGEgbGVmdC10by1yaWdodCBsYXlvdXQgZGlyZWN0aW9uLCBub3J0aCBhbmQgc291dGggcG9ydHMgd291bGQgYmUgY29uc2lkZXJlZCBub24tZmxvdyBwb3J0cy4gRnVydGhlciBub3RlIHRoYXQgdGhlIHVuZGVybHlpbmcgY3JpdGVyaXVtIHdoZXRoZXIgdG8gc3dpdGNoIHNpZGVzIG9yIG5vdCBzb2xlbHkgcmVsaWVzIG9uIHRoZSBtaW5pbWl6YXRpb24gb2YgZWRnZSBjcm9zc2luZ3MuIEhlbmNlLCBlZGdlIGxlbmd0aCBhbmQgb3RoZXIgYWVzdGhldGljcyBjcml0ZXJpYSBhcmUgbm90IGFkZHJlc3NlZC4iKSwhMSkseWEpLE5zKSx1bih5dikpLGhlKGxlKHp0LDEpLGR0LDIsNixbIm9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vcnRoT3JTb3V0aFBvcnQiXSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFlFZSksIiIpLCJQb3J0IFNvcnRpbmcgU3RyYXRlZ3kiKSwiT25seSByZWxldmFudCBmb3Igbm9kZXMgd2l0aCBGSVhFRF9TSURFIHBvcnQgY29uc3RyYWludHMuIERldGVybWluZXMgdGhlIHdheSBhIG5vZGUncyBwb3J0cyBhcmUgZGlzdHJpYnV0ZWQgb24gdGhlIHNpZGVzIG9mIGEgbm9kZSBpZiB0aGVpciBvcmRlciBpcyBub3QgcHJlc2NyaWJlZC4gVGhlIG9wdGlvbiBpcyBzZXQgb24gcGFyZW50IG5vZGVzLiIpLHZNZSkscHMpLF9EZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxYRWUpLCIiKSwiVGhvcm91Z2huZXNzIiksIkhvdyBtdWNoIGVmZm9ydCBzaG91bGQgYmUgc3BlbnQgdG8gcHJvZHVjZSBhIG5pY2UgbGF5b3V0LiIpLHB0KDcpKSxUYykscm8pLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsUUVlKSwiIiksIkFkZCBVbm5lY2Vzc2FyeSBCZW5kcG9pbnRzIiksIkFkZHMgYmVuZCBwb2ludHMgZXZlbiBpZiBhbiBlZGdlIGRvZXMgbm90IGNoYW5nZSBkaXJlY3Rpb24uIElmIHRydWUsIGVhY2ggbG9uZyBlZGdlIGR1bW15IHdpbGwgY29udHJpYnV0ZSBhIGJlbmQgcG9pbnQgdG8gaXRzIGVkZ2VzIGFuZCBoaWVyYXJjaHktY3Jvc3NpbmcgZWRnZXMgd2lsbCBhbHdheXMgZ2V0IGEgYmVuZCBwb2ludCB3aGVyZSB0aGV5IGNyb3NzIGhpZXJhcmNoeSBib3VuZGFyaWVzLiBCeSBkZWZhdWx0LCBiZW5kIHBvaW50cyBhcmUgb25seSBhZGRlZCB3aGVyZSBhbiBlZGdlIGNoYW5nZXMgZGlyZWN0aW9uLiIpLCExKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsSkVlKSwiIiksIkdlbmVyYXRlIFBvc2l0aW9uIGFuZCBMYXllciBJRHMiKSwiSWYgZW5hYmxlZCBwb3NpdGlvbiBpZCBhbmQgbGF5ZXIgaWQgYXJlIGdlbmVyYXRlZCwgd2hpY2ggYXJlIHVzdWFsbHkgb25seSB1c2VkIGludGVybmFsbHkgd2hlbiBzZXR0aW5nIHRoZSBpbnRlcmFjdGl2ZUxheW91dCBvcHRpb24uIFRoaXMgb3B0aW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgb24gdGhlIHJvb3Qgbm9kZS4iKSwhMSkseWEpLE5zKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHpoZSksImN5Y2xlQnJlYWtpbmciKSwiQ3ljbGUgQnJlYWtpbmcgU3RyYXRlZ3kiKSwiU3RyYXRlZ3kgZm9yIGN5Y2xlIGJyZWFraW5nLiBDeWNsZSBicmVha2luZyBsb29rcyBmb3IgY3ljbGVzIGluIHRoZSBncmFwaCBhbmQgZGV0ZXJtaW5lcyB3aGljaCBlZGdlcyB0byByZXZlcnNlIHRvIGJyZWFrIHRoZSBjeWNsZXMuIFJldmVyc2VkIGVkZ2VzIHdpbGwgZW5kIHVwIHBvaW50aW5nIHRvIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gb2YgcmVndWxhciBlZGdlcyAodGhhdCBpcywgcmV2ZXJzZWQgZWRnZXMgd2lsbCBwb2ludCBsZWZ0IGlmIGVkZ2VzIHVzdWFsbHkgcG9pbnQgcmlnaHQpLiIpLHJNZSkscHMpLG1MZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxxUCksaGZlKSwiTm9kZSBMYXllcmluZyBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3Igbm9kZSBsYXllcmluZy4iKSxkTWUpLHBzKSxwRGUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsWkVlKSxoZmUpLCJMYXllciBDb25zdHJhaW50IiksIkRldGVybWluZXMgYSBjb25zdHJhaW50IG9uIHRoZSBwbGFjZW1lbnQgb2YgdGhlIG5vZGUgcmVnYXJkaW5nIHRoZSBsYXllcmluZy4iKSxoTWUpLHBzKSxXTGUpLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsZVRlKSxoZmUpLCJMYXllciBDaG9pY2UgQ29uc3RyYWludCIpLCJBbGxvd3MgdG8gc2V0IGEgY29uc3RyYWludCByZWdhcmRpbmcgdGhlIGxheWVyIHBsYWNlbWVudCBvZiBhIG5vZGUuIExldCBpIGJlIHRoZSB2YWx1ZSBvZiB0ZWggY29uc3RyYWludC4gQXNzdW1lZCB0aGUgZHJhd2luZyBoYXMgbiBsYXllcnMgYW5kIGkgPCBuLiBJZiBzZXQgdG8gaSwgaXQgZXhwcmVzc2VzIHRoYXQgdGhlIG5vZGUgc2hvdWxkIGJlIHBsYWNlZCBpbiBpLXRoIGxheWVyLiBTaG91bGQgaT49biBiZSB0cnVlIHRoZW4gdGhlIG5vZGUgaXMgcGxhY2VkIGluIHRoZSBsYXN0IGxheWVyIG9mIHRoZSBkcmF3aW5nLiBOb3RlIHRoYXQgdGhpcyBvcHRpb24gaXMgbm90IHBhcnQgb2YgYW55IG9mIEVMSyBMYXllcmVkJ3MgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBidXQgaXMgb25seSBldmFsdWF0ZWQgYXMgcGFydCBvZiB0aGUgYEludGVyYWN0aXZlTGF5ZXJlZEdyYXBoVmlzaXRvcmAsIHdoaWNoIG11c3QgYmUgYXBwbGllZCBtYW51YWxseSBvciB1c2VkIHZpYSB0aGUgYERpYWdyYW1MYXlvdXRFbmdpbmUuIiksbnVsbCksVGMpLHJvKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHRUZSksaGZlKSwiTGF5ZXIgSUQiKSwiTGF5ZXIgaWRlbnRpZmllciB0aGF0IHdhcyBjYWxjdWxhdGVkIGJ5IEVMSyBMYXllcmVkIGZvciBhIG5vZGUuIFRoaXMgaXMgb25seSBnZW5lcmF0ZWQgaWYgaW50ZXJhY3RpdmVMYXlvdCBvciBnZW5lcmF0ZVBvc2l0aW9uQW5kTGF5ZXJJZHMgaXMgc2V0LiIpLHB0KC0xKSksVGMpLHJvKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHFoZSksSjN0KSwiVXBwZXIgQm91bmQgT24gV2lkdGggW01pbldpZHRoIExheWVyZXJdIiksIkRlZmluZXMgYSBsb29zZSB1cHBlciBib3VuZCBvbiB0aGUgd2lkdGggb2YgdGhlIE1pbldpZHRoIGxheWVyZXIuIElmIHNldCB0byAnLTEnIG11bHRpcGxlIHZhbHVlcyBhcmUgdGVzdGVkIGFuZCB0aGUgYmVzdCByZXN1bHQgaXMgc2VsZWN0ZWQuIikscHQoNCkpLFRjKSxybyksdW4oUG4pKSkpLFFzKHQscWhlLHFQLEw5dCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEhoZSksSjN0KSwiVXBwZXIgTGF5ZXIgRXN0aW1hdGlvbiBTY2FsaW5nIEZhY3RvciBbTWluV2lkdGggTGF5ZXJlcl0iKSwiTXVsdGlwbGllZCB3aXRoIFVwcGVyIEJvdW5kIE9uIFdpZHRoIGZvciBkZWZpbmluZyBhbiB1cHBlciBib3VuZCBvbiB0aGUgd2lkdGggb2YgbGF5ZXJzIHdoaWNoIGhhdmVuJ3QgYmVlbiBkZXRlcm1pbmVkIHlldCwgYnV0IHdob3NlIG1heGltdW0gd2lkdGggaGFkIGJlZW4gKHJvdWdobHkpIGVzdGltYXRlZCBieSB0aGUgTWluV2lkdGggYWxnb3JpdGhtLiBDb21wZW5zYXRlcyBmb3IgdG9vIGhpZ2ggZXN0aW1hdGlvbnMuIElmIHNldCB0byAnLTEnIG11bHRpcGxlIHZhbHVlcyBhcmUgdGVzdGVkIGFuZCB0aGUgYmVzdCByZXN1bHQgaXMgc2VsZWN0ZWQuIikscHQoMikpLFRjKSxybyksdW4oUG4pKSkpLFFzKHQsSGhlLHFQLEQ5dCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFZoZSksWjN0KSwiTm9kZSBQcm9tb3Rpb24gU3RyYXRlZ3kiKSwiUmVkdWNlcyBudW1iZXIgb2YgZHVtbXkgbm9kZXMgYWZ0ZXIgbGF5ZXJpbmcgcGhhc2UgKGlmIHBvc3NpYmxlKS4iKSxmTWUpLHBzKSxURGUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsVWhlKSxaM3QpLCJNYXggTm9kZSBQcm9tb3Rpb24gSXRlcmF0aW9ucyIpLCJMaW1pdHMgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIGZvciBub2RlIHByb21vdGlvbi4iKSxwdCgwKSksVGMpLHJvKSx1bihQbikpKSksUXModCxVaGUsVmhlLG51bGwpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxHaGUpLCJsYXllcmluZy5jb2ZmbWFuR3JhaGFtIiksIkxheWVyIEJvdW5kIiksIlRoZSBtYXhpbXVtIG51bWJlciBvZiBub2RlcyBhbGxvd2VkIHBlciBsYXllci4iKSxwdChJaSkpLFRjKSxybyksdW4oUG4pKSkpLFFzKHQsR2hlLHFQLFQ5dCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHBMKSxnVCksIkNyb3NzaW5nIE1pbmltaXphdGlvbiBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3IgY3Jvc3NpbmcgbWluaW1pemF0aW9uLiIpLG5NZSkscHMpLGRMZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxuVGUpLGdUKSwiRm9yY2UgTm9kZSBNb2RlbCBPcmRlciIpLCJUaGUgbm9kZSBvcmRlciBnaXZlbiBieSB0aGUgbW9kZWwgZG9lcyBub3QgY2hhbmdlIHRvIHByb2R1Y2UgYSBiZXR0ZXIgbGF5b3V0LiBFLmcuIGlmIG5vZGUgQSBpcyBiZWZvcmUgbm9kZSBCIGluIHRoZSBtb2RlbCB0aGlzIGlzIG5vdCBjaGFuZ2VkIGR1cmluZyBjcm9zc2luZyBtaW5pbWl6YXRpb24uIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBub2RlIG1vZGVsIG9yZGVyIGlzIGFscmVhZHkgcmVzcGVjdGVkIGJlZm9yZSBjcm9zc2luZyBtaW5pbWl6YXRpb24uIFRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IHNldHRpbmcgY29uc2lkZXJNb2RlbE9yZGVyLnN0cmF0ZWd5IHRvIE5PREVTX0FORF9FREdFUy4iKSwhMSkseWEpLE5zKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEtoZSksZ1QpLCJIaWVyYXJjaGljYWwgU3dlZXBpbmVzcyIpLCJIb3cgbGlrZWx5IGl0IGlzIHRvIHVzZSBjcm9zcy1oaWVyYXJjaHkgKDEpIHZzIGJvdHRvbS11cCAoLTEpLiIpLC4xKSxmbyksdGEpLHVuKFBuKSkpKSxRcyh0LEtoZSxDRyxXeHQpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxXaGUpLGdUKSwiU2VtaS1JbnRlcmFjdGl2ZSBDcm9zc2luZyBNaW5pbWl6YXRpb24iKSwiUHJlc2VydmVzIHRoZSBvcmRlciBvZiBub2RlcyB3aXRoaW4gYSBsYXllciBidXQgc3RpbGwgbWluaW1pemVzIGNyb3NzaW5ncyBiZXR3ZWVuIGVkZ2VzIGNvbm5lY3RpbmcgbG9uZyBlZGdlIGR1bW1pZXMuIERlcml2ZXMgdGhlIGRlc2lyZWQgb3JkZXIgZnJvbSBwb3NpdGlvbnMgc3BlY2lmaWVkIGJ5IHRoZSAnb3JnLmVjbGlwc2UuZWxrLnBvc2l0aW9uJyBsYXlvdXQgb3B0aW9uLiBSZXF1aXJlcyBhIGNyb3NzaW5nIG1pbmltaXphdGlvbiBzdHJhdGVneSB0aGF0IGlzIGFibGUgdG8gcHJvY2VzcyAnaW4tbGF5ZXInIGNvbnN0cmFpbnRzLiIpLCExKSx5YSksTnMpLHVuKFBuKSkpKSxRcyh0LFdoZSxwTCxlOXQpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxyVGUpLGdUKSwiSW4gTGF5ZXIgUHJlZGVjZXNzb3Igb2YiKSwiQWxsb3dzIHRvIHNldCBhIGNvbnN0cmFpbnQgd2hpY2ggc3BlY2lmaWVzIG9mIHdoaWNoIG5vZGUgdGhlIGN1cnJlbnQgbm9kZSBpcyB0aGUgcHJlZGVjZXNzb3IuIElmIHNldCB0byAncycgdGhlbiB0aGUgbm9kZSBpcyB0aGUgcHJlZGVjZXNzb3Igb2YgJ3MnIGFuZCBpcyBpbiB0aGUgc2FtZSBsYXllciIpLG51bGwpLEo2KSx6dCksdW4oaGEpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxpVGUpLGdUKSwiSW4gTGF5ZXIgU3VjY2Vzc29yIG9mIiksIkFsbG93cyB0byBzZXQgYSBjb25zdHJhaW50IHdoaWNoIHNwZWNpZmllcyBvZiB3aGljaCBub2RlIHRoZSBjdXJyZW50IG5vZGUgaXMgdGhlIHN1Y2Nlc3Nvci4gSWYgc2V0IHRvICdzJyB0aGVuIHRoZSBub2RlIGlzIHRoZSBzdWNjZXNzb3Igb2YgJ3MnIGFuZCBpcyBpbiB0aGUgc2FtZSBsYXllciIpLG51bGwpLEo2KSx6dCksdW4oaGEpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxzVGUpLGdUKSwiUG9zaXRpb24gQ2hvaWNlIENvbnN0cmFpbnQiKSwiQWxsb3dzIHRvIHNldCBhIGNvbnN0cmFpbnQgcmVnYXJkaW5nIHRoZSBwb3NpdGlvbiBwbGFjZW1lbnQgb2YgYSBub2RlIGluIGEgbGF5ZXIuIEFzc3VtZWQgdGhlIGxheWVyIGluIHdoaWNoIHRoZSBub2RlIHBsYWNlZCBpbmNsdWRlcyBuIG90aGVyIG5vZGVzIGFuZCBpIDwgbi4gSWYgc2V0IHRvIGksIGl0IGV4cHJlc3NlcyB0aGF0IHRoZSBub2RlIHNob3VsZCBiZSBwbGFjZWQgYXQgdGhlIGktdGggcG9zaXRpb24uIFNob3VsZCBpPj1uIGJlIHRydWUgdGhlbiB0aGUgbm9kZSBpcyBwbGFjZWQgYXQgdGhlIGxhc3QgcG9zaXRpb24gaW4gdGhlIGxheWVyLiBOb3RlIHRoYXQgdGhpcyBvcHRpb24gaXMgbm90IHBhcnQgb2YgYW55IG9mIEVMSyBMYXllcmVkJ3MgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBidXQgaXMgb25seSBldmFsdWF0ZWQgYXMgcGFydCBvZiB0aGUgYEludGVyYWN0aXZlTGF5ZXJlZEdyYXBoVmlzaXRvcmAsIHdoaWNoIG11c3QgYmUgYXBwbGllZCBtYW51YWxseSBvciB1c2VkIHZpYSB0aGUgYERpYWdyYW1MYXlvdXRFbmdpbmUuIiksbnVsbCksVGMpLHJvKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGFUZSksZ1QpLCJQb3NpdGlvbiBJRCIpLCJQb3NpdGlvbiB3aXRoaW4gYSBsYXllciB0aGF0IHdhcyBkZXRlcm1pbmVkIGJ5IEVMSyBMYXllcmVkIGZvciBhIG5vZGUuIFRoaXMgaXMgb25seSBnZW5lcmF0ZWQgaWYgaW50ZXJhY3RpdmVMYXlvdCBvciBnZW5lcmF0ZVBvc2l0aW9uQW5kTGF5ZXJJZHMgaXMgc2V0LiIpLHB0KC0xKSksVGMpLHJvKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LG9UZSksZXl0KSwiR3JlZWR5IFN3aXRjaCBBY3RpdmF0aW9uIFRocmVzaG9sZCIpLCJCeSBkZWZhdWx0IGl0IGlzIGRlY2lkZWQgYXV0b21hdGljYWxseSBpZiB0aGUgZ3JlZWR5IHN3aXRjaCBpcyBhY3RpdmF0ZWQgb3Igbm90LiBUaGUgZGVjaXNpb24gaXMgYmFzZWQgb24gd2hldGhlciB0aGUgc2l6ZSBvZiB0aGUgaW5wdXQgZ3JhcGggKHdpdGhvdXQgZHVtbXkgbm9kZXMpIGlzIHNtYWxsZXIgdGhhbiB0aGUgdmFsdWUgb2YgdGhpcyBvcHRpb24uIEEgJzAnIGVuZm9yY2VzIHRoZSBhY3RpdmF0aW9uLiIpLHB0KDQwKSksVGMpLHJvKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFloZSksZXl0KSwiR3JlZWR5IFN3aXRjaCBDcm9zc2luZyBNaW5pbWl6YXRpb24iKSwiR3JlZWR5IFN3aXRjaCBzdHJhdGVneSBmb3IgY3Jvc3NpbmcgbWluaW1pemF0aW9uLiBUaGUgZ3JlZWR5IHN3aXRjaCBoZXVyaXN0aWMgaXMgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHJlZ3VsYXIgY3Jvc3NpbmcgbWluaW1pemF0aW9uIGFzIGEgcG9zdC1wcm9jZXNzb3IuIE5vdGUgdGhhdCBpZiAnaGllcmFyY2h5SGFuZGxpbmcnIGlzIHNldCB0byAnSU5DTFVERV9DSElMRFJFTicsIHRoZSAnZ3JlZWR5U3dpdGNoSGllcmFyY2hpY2FsLnR5cGUnIG9wdGlvbiBtdXN0IGJlIHVzZWQuIiksdE1lKSxwcyksJDFlKSx1bihQbikpKSksUXModCxZaGUscEwsR3h0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsZEcpLCJjcm9zc2luZ01pbmltaXphdGlvbi5ncmVlZHlTd2l0Y2hIaWVyYXJjaGljYWwiKSwiR3JlZWR5IFN3aXRjaCBDcm9zc2luZyBNaW5pbWl6YXRpb24gKGhpZXJhcmNoaWNhbCkiKSwiQWN0aXZhdGVzIHRoZSBncmVlZHkgc3dpdGNoIGhldXJpc3RpYyBpbiBjYXNlIGhpZXJhcmNoaWNhbCBsYXlvdXQgaXMgdXNlZC4gVGhlIGRpZmZlcmVuY2VzIHRvIHRoZSBub24taGllcmFyY2hpY2FsIGNhc2UgKHNlZSAnZ3JlZWR5U3dpdGNoLnR5cGUnKSBhcmU6IDEpIGdyZWVkeSBzd2l0Y2ggaXMgaW5hY3RpdmUgYnkgZGVmYXVsdCwgMykgb25seSB0aGUgb3B0aW9uIHZhbHVlIHNldCBvbiB0aGUgbm9kZSBhdCB3aGljaCBoaWVyYXJjaGljYWwgbGF5b3V0IHN0YXJ0cyBpcyByZWxldmFudCwgYW5kIDIpIGlmIGl0J3MgYWN0aXZhdGVkIGJ5IHRoZSB1c2VyLCBpdCBwcm9wZXJseSBhZGRyZXNzZXMgaGllcmFyY2h5LWNyb3NzaW5nIGVkZ2VzLiIpLGVNZSkscHMpLCQxZSksdW4oUG4pKSkpLFFzKHQsZEcscEwsSHh0KSxRcyh0LGRHLENHLFZ4dCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGs2KSx0eXQpLCJOb2RlIFBsYWNlbWVudCBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3Igbm9kZSBwbGFjZW1lbnQuIiksbU1lKSxwcyksd0RlKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LGdHKSx0eXQpLCJGYXZvciBTdHJhaWdodCBFZGdlcyBPdmVyIEJhbGFuY2luZyIpLCJGYXZvciBzdHJhaWdodCBlZGdlcyBvdmVyIGEgYmFsYW5jZWQgbm9kZSBwbGFjZW1lbnQuIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIGRldGVybWluZWQgYXV0b21hdGljYWxseSBiYXNlZCBvbiB0aGUgdXNlZCAnZWRnZVJvdXRpbmcnLiBGb3IgYW4gb3J0aG9nb25hbCBzdHlsZSBpdCBpcyBzZXQgdG8gdHJ1ZSwgZm9yIGFsbCBvdGhlciBzdHlsZXMgdG8gZmFsc2UuIikseWEpLE5zKSx1bihQbikpKSksUXModCxnRyxrNixxOXQpLFFzKHQsZ0csazYsSDl0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsWGhlKSxueXQpLCJCSyBFZGdlIFN0cmFpZ2h0ZW5pbmciKSwiU3BlY2lmaWVzIHdoZXRoZXIgdGhlIEJyYW5kZXMgS29lcGYgbm9kZSBwbGFjZXIgdHJpZXMgdG8gaW5jcmVhc2UgdGhlIG51bWJlciBvZiBzdHJhaWdodCBlZGdlcyBhdCB0aGUgZXhwZW5zZSBvZiBkaWFncmFtIHNpemUuIFRoZXJlIGlzIGEgc3VidGxlIGRpZmZlcmVuY2UgdG8gdGhlICdmYXZvclN0cmFpZ2h0RWRnZXMnIG9wdGlvbiwgd2hpY2ggZGVjaWRlcyB3aGV0aGVyIGEgYmFsYW5jZWQgcGxhY2VtZW50IG9mIHRoZSBub2RlcyBpcyBkZXNpcmVkLCBvciBub3QuIEluIGJrIHRlcm1zIHRoaXMgbWVhbnMgY29tYmluaW5nIHRoZSBmb3VyIGFsaWdubWVudHMgaW50byBhIHNpbmdsZSBiYWxhbmNlZCBvbmUsIG9yIG5vdC4gVGhpcyBvcHRpb24gb24gdGhlIG90aGVyIGhhbmQgdHJpZXMgdG8gc3RyYWlnaHRlbiBhZGRpdGlvbmFsIGVkZ2VzIGR1cmluZyB0aGUgY3JlYXRpb24gb2YgZWFjaCBvZiB0aGUgZm91ciBhbGlnbm1lbnRzLiIpLGdNZSkscHMpLGtMZSksdW4oUG4pKSkpLFFzKHQsWGhlLGs2LFI5dCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFFoZSksbnl0KSwiQksgRml4ZWQgQWxpZ25tZW50IiksIlRlbGxzIHRoZSBCSyBub2RlIHBsYWNlciB0byB1c2UgYSBjZXJ0YWluIGFsaWdubWVudCAob3V0IG9mIGl0cyBmb3VyKSBpbnN0ZWFkIG9mIHRoZSBvbmUgcHJvZHVjaW5nIHRoZSBzbWFsbGVzdCBoZWlnaHQsIG9yIHRoZSBjb21iaW5hdGlvbiBvZiBhbGwgZm91ci4iKSxwTWUpLHBzKSxfTGUpLHVuKFBuKSkpKSxRcyh0LFFoZSxrNiwkOXQpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxKaGUpLCJub2RlUGxhY2VtZW50LmxpbmVhclNlZ21lbnRzIiksIkxpbmVhciBTZWdtZW50cyBEZWZsZWN0aW9uIERhbXBlbmluZyIpLCJEYW1wZW5zIHRoZSBtb3ZlbWVudCBvZiBub2RlcyB0byBrZWVwIHRoZSBkaWFncmFtIGZyb20gZ2V0dGluZyB0b28gbGFyZ2UuIiksLjMpLGZvKSx0YSksdW4oUG4pKSkpLFFzKHQsSmhlLGs2LFU5dCksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LFpoZSksIm5vZGVQbGFjZW1lbnQubmV0d29ya1NpbXBsZXgiKSwiTm9kZSBGbGV4aWJpbGl0eSIpLCJBaW1zIGF0IHNob3J0ZXIgYW5kIHN0cmFpZ2h0ZXIgZWRnZXMuIFR3byBjb25maWd1cmF0aW9ucyBhcmUgcG9zc2libGU6IChhKSBhbGxvdyBwb3J0cyB0byBtb3ZlIGZyZWVseSBvbiB0aGUgc2lkZSB0aGV5IGFyZSBhc3NpZ25lZCB0byAodGhlIG9yZGVyIGlzIGFsd2F5cyBkZWZpbmVkIGJlZm9yZWhhbmQpLCAoYikgYWRkaXRpb25hbGx5IGFsbG93IHRvIGVubGFyZ2UgYSBub2RlIHdoZXJldmVyIGl0IGhlbHBzLiBJZiB0aGlzIG9wdGlvbiBpcyBub3QgY29uZmlndXJlZCBmb3IgYSBub2RlLCB0aGUgJ25vZGVGbGV4aWJpbGl0eS5kZWZhdWx0JyB2YWx1ZSBpcyB1c2VkLCB3aGljaCBpcyBzcGVjaWZpZWQgZm9yIHRoZSBub2RlJ3MgcGFyZW50LiIpLHBzKSxtZGUpLHVuKGhhKSkpKSxRcyh0LFpoZSxrNixZOXQpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxlZmUpLCJub2RlUGxhY2VtZW50Lm5ldHdvcmtTaW1wbGV4Lm5vZGVGbGV4aWJpbGl0eSIpLCJOb2RlIEZsZXhpYmlsaXR5IERlZmF1bHQiKSwiRGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ25vZGVGbGV4aWJpbGl0eScgb3B0aW9uIGZvciB0aGUgY2hpbGRyZW4gb2YgYSBoaWVyYXJjaGljYWwgbm9kZS4iKSxiTWUpLHBzKSxtZGUpLHVuKFBuKSkpKSxRcyh0LGVmZSxrNixXOXQpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxjVGUpLHJ5dCksIlNlbGYtTG9vcCBEaXN0cmlidXRpb24iKSwiQWx0ZXIgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgbG9vcHMgYXJvdW5kIHRoZSBub2RlLiBJdCBvbmx5IHRha2VzIGVmZmVjdCBmb3IgUG9ydENvbnN0cmFpbnRzLkZSRUUuIiksb01lKSxwcyksTURlKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHVUZSkscnl0KSwiU2VsZi1Mb29wIE9yZGVyaW5nIiksIkFsdGVyIHRoZSBvcmRlcmluZyBvZiB0aGUgbG9vcHMgdGhleSBjYW4gZWl0aGVyIGJlIHN0YWNrZWQgb3Igc2VxdWVuY2VkLiBJdCBvbmx5IHRha2VzIGVmZmVjdCBmb3IgUG9ydENvbnN0cmFpbnRzLkZSRUUuIiksY01lKSxwcyksRERlKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHBHKSwiZWRnZVJvdXRpbmcuc3BsaW5lcyIpLCJTcGxpbmUgUm91dGluZyBNb2RlIiksIlNwZWNpZmllcyB0aGUgd2F5IGNvbnRyb2wgcG9pbnRzIGFyZSBhc3NlbWJsZWQgZm9yIGVhY2ggaW5kaXZpZHVhbCBlZGdlLiBDT05TRVJWQVRJVkUgZW5zdXJlcyB0aGF0IGVkZ2VzIGFyZSBwcm9wZXJseSByb3V0ZWQgYXJvdW5kIHRoZSBub2RlcyBidXQgZmVlbHMgcmF0aGVyIG9ydGhvZ29uYWwgYXQgdGltZXMuIFNMT1BQWSB1c2VzIGZld2VyIGNvbnRyb2wgcG9pbnRzIHRvIG9idGFpbiBjdXJ2aWVyIGVkZ2Ugcm91dGVzIGJ1dCBtYXkgcmVzdWx0IGluIGVkZ2VzIG92ZXJsYXBwaW5nIG5vZGVzLiIpLHVNZSkscHMpLE9EZSksdW4oUG4pKSkpLFFzKHQscEcsSFAsaDl0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsYkcpLCJlZGdlUm91dGluZy5zcGxpbmVzLnNsb3BweSIpLCJTbG9wcHkgU3BsaW5lIExheWVyIFNwYWNpbmcgRmFjdG9yIiksIlNwYWNpbmcgZmFjdG9yIGZvciByb3V0aW5nIGFyZWEgYmV0d2VlbiBsYXllcnMgd2hlbiB1c2luZyBzbG9wcHkgc3BsaW5lIHJvdXRpbmcuIiksLjIpLGZvKSx0YSksdW4oUG4pKSkpLFFzKHQsYkcsSFAsZDl0KSxRcyh0LGJHLHBHLGc5dCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHRmZSksImVkZ2VSb3V0aW5nLnBvbHlsaW5lIiksIlNsb3BlZCBFZGdlIFpvbmUgV2lkdGgiKSwiV2lkdGggb2YgdGhlIHN0cmlwIHRvIHRoZSBsZWZ0IGFuZCB0byB0aGUgcmlnaHQgb2YgZWFjaCBsYXllciB3aGVyZSB0aGUgcG9seWxpbmUgZWRnZSByb3V0ZXIgaXMgYWxsb3dlZCB0byByZWZyYWluIGZyb20gZW5zdXJpbmcgdGhhdCBlZGdlcyBhcmUgcm91dGVkIGhvcml6b250YWxseS4gVGhpcyBwcmV2ZW50cyBhd2t3YXJkIGJlbmQgcG9pbnRzIGZvciBub2RlcyB0aGF0IGV4dGVudCBhbG1vc3QgdG8gdGhlIGVkZ2Ugb2YgdGhlaXIgbGF5ZXIuIiksMiksZm8pLHRhKSx1bihQbikpKSksUXModCx0ZmUsSFAsbzl0KSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsbFRlKSxVMSksIlNwYWNpbmcgQmFzZSBWYWx1ZSIpLCJBbiBvcHRpb25hbCBiYXNlIHZhbHVlIGZvciBhbGwgb3RoZXIgbGF5b3V0IG9wdGlvbnMgb2YgdGhlICdzcGFjaW5nJyBncm91cC4gSXQgY2FuIGJlIHVzZWQgdG8gY29udmVuaWVudGx5IGFsdGVyIHRoZSBvdmVyYWxsICdzcGFjaW91c25lc3MnIG9mIHRoZSBkcmF3aW5nLiBXaGVuZXZlciBhbiBleHBsaWNpdCB2YWx1ZSBpcyBzZXQgZm9yIHRoZSBvdGhlciBsYXlvdXQgb3B0aW9ucywgdGhpcyBiYXNlIHZhbHVlIHdpbGwgaGF2ZSBubyBlZmZlY3QuIFRoZSBiYXNlIHZhbHVlIGlzIG5vdCBpbmhlcml0ZWQsIGkuZS4gaXQgbXVzdCBiZSBzZXQgZm9yIGVhY2ggaGllcmFyY2hpY2FsIG5vZGUuIiksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGhUZSksVTEpLCJFZGdlIE5vZGUgQmV0d2VlbiBMYXllcnMgU3BhY2luZyIpLCJUaGUgc3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBub2RlcyBhbmQgZWRnZXMgdGhhdCBhcmUgcm91dGVkIG5leHQgdG8gdGhlIG5vZGUncyBsYXllci4gRm9yIHRoZSBzcGFjaW5nIGJldHdlZW4gbm9kZXMgYW5kIGVkZ2VzIHRoYXQgY3Jvc3MgdGhlIG5vZGUncyBsYXllciAnc3BhY2luZy5lZGdlTm9kZScgaXMgdXNlZC4iKSwxMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGZUZSksVTEpLCJFZGdlIEVkZ2UgQmV0d2VlbiBMYXllciBTcGFjaW5nIiksIlNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gcGFpcnMgb2YgZWRnZXMgdGhhdCBhcmUgcm91dGVkIGJldHdlZW4gdGhlIHNhbWUgcGFpciBvZiBsYXllcnMuIE5vdGUgdGhhdCAnc3BhY2luZy5lZGdlRWRnZScgaXMgdXNlZCBmb3IgdGhlIHNwYWNpbmcgYmV0d2VlbiBwYWlycyBvZiBlZGdlcyBjcm9zc2luZyB0aGUgc2FtZSBsYXllci4iKSwxMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGRUZSksVTEpLCJOb2RlIE5vZGUgQmV0d2VlbiBMYXllcnMgU3BhY2luZyIpLCJUaGUgc3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBhbnkgcGFpciBvZiBub2RlcyBvZiB0d28gYWRqYWNlbnQgbGF5ZXJzLiBOb3RlIHRoYXQgJ3NwYWNpbmcubm9kZU5vZGUnIGlzIHVzZWQgZm9yIHRoZSBzcGFjaW5nIGJldHdlZW4gbm9kZXMgd2l0aGluIHRoZSBsYXllciBpdHNlbGYuIiksMjApLGZvKSx0YSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxnVGUpLFRUZSksIkRpcmVjdGlvbiBQcmlvcml0eSIpLCJEZWZpbmVzIGhvdyBpbXBvcnRhbnQgaXQgaXMgdG8gaGF2ZSBhIGNlcnRhaW4gZWRnZSBwb2ludCBpbnRvIHRoZSBkaXJlY3Rpb24gb2YgdGhlIG92ZXJhbGwgbGF5b3V0LiBUaGlzIG9wdGlvbiBpcyBldmFsdWF0ZWQgZHVyaW5nIHRoZSBjeWNsZSBicmVha2luZyBwaGFzZS4iKSxwdCgwKSksVGMpLHJvKSx1bih6ZCkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHBUZSksVFRlKSwiU2hvcnRuZXNzIFByaW9yaXR5IiksIkRlZmluZXMgaG93IGltcG9ydGFudCBpdCBpcyB0byBrZWVwIGFuIGVkZ2UgYXMgc2hvcnQgYXMgcG9zc2libGUuIFRoaXMgb3B0aW9uIGlzIGV2YWx1YXRlZCBkdXJpbmcgdGhlIGxheWVyaW5nIHBoYXNlLiIpLHB0KDApKSxUYykscm8pLHVuKHpkKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsYlRlKSxUVGUpLCJTdHJhaWdodG5lc3MgUHJpb3JpdHkiKSwiRGVmaW5lcyBob3cgaW1wb3J0YW50IGl0IGlzIHRvIGtlZXAgYW4gZWRnZSBzdHJhaWdodCwgaS5lLiBhbGlnbmVkIHdpdGggb25lIG9mIHRoZSB0d28gYXhlcy4gVGhpcyBvcHRpb24gaXMgZXZhbHVhdGVkIGR1cmluZyBub2RlIHBsYWNlbWVudC4iKSxwdCgwKSksVGMpLHJvKSx1bih6ZCkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LG5mZSksQ1RlKSx3M3QpLCJUcmllcyB0byBmdXJ0aGVyIGNvbXBhY3QgY29tcG9uZW50cyAoZGlzY29ubmVjdGVkIHN1Yi1ncmFwaHMpLiIpLCExKSx5YSksTnMpLHVuKFBuKSkpKSxRcyh0LG5mZSxsTCwhMCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LG1UZSksaXl0KSwiUG9zdCBDb21wYWN0aW9uIFN0cmF0ZWd5Iiksc3l0KSxYTGUpLHBzKSxPTGUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsdlRlKSxpeXQpLCJQb3N0IENvbXBhY3Rpb24gQ29uc3RyYWludCBDYWxjdWxhdGlvbiIpLHN5dCksWUxlKSxwcyksaExlKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LG1HKSxTVGUpLCJIaWdoIERlZ3JlZSBOb2RlIFRyZWF0bWVudCIpLCJNYWtlcyByb29tIGFyb3VuZCBoaWdoIGRlZ3JlZSBub2RlcyB0byBwbGFjZSBsZWFmcyBhbmQgdHJlZXMuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxyZmUpLFNUZSksIkhpZ2ggRGVncmVlIE5vZGUgVGhyZXNob2xkIiksIldoZXRoZXIgYSBub2RlIGlzIGNvbnNpZGVyZWQgdG8gaGF2ZSBhIGhpZ2ggZGVncmVlLiIpLHB0KDE2KSksVGMpLHJvKSx1bihQbikpKSksUXModCxyZmUsbUcsITApLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxpZmUpLFNUZSksIkhpZ2ggRGVncmVlIE5vZGUgTWF4aW11bSBUcmVlIEhlaWdodCIpLCJNYXhpbXVtIGhlaWdodCBvZiBhIHN1YnRyZWUgY29ubmVjdGVkIHRvIGEgaGlnaCBkZWdyZWUgbm9kZSB0byBiZSBtb3ZlZCB0byBzZXBhcmF0ZSBsYXllcnMuIikscHQoNSkpLFRjKSxybyksdW4oUG4pKSkpLFFzKHQsaWZlLG1HLCEwKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsZnApLF9UZSksIkdyYXBoIFdyYXBwaW5nIFN0cmF0ZWd5IiksIkZvciBjZXJ0YWluIGdyYXBocyBhbmQgY2VydGFpbiBwcmVzY3JpYmVkIGRyYXdpbmcgYXJlYXMgaXQgbWF5IGJlIGRlc2lyYWJsZSB0byBzcGxpdCB0aGUgbGFpZCBvdXQgZ3JhcGggaW50byBjaHVua3MgdGhhdCBhcmUgcGxhY2VkIHNpZGUgYnkgc2lkZS4gVGhlIGVkZ2VzIHRoYXQgY29ubmVjdCBkaWZmZXJlbnQgY2h1bmtzIGFyZSAnd3JhcHBlZCcgYXJvdW5kIGZyb20gdGhlIGVuZCBvZiBvbmUgY2h1bmsgdG8gdGhlIHN0YXJ0IG9mIHRoZSBvdGhlciBjaHVuay4gVGhlIHBvaW50cyBiZXR3ZWVuIHRoZSBjaHVua3MgYXJlIHJlZmVycmVkIHRvIGFzICdjdXRzJy4iKSx4TWUpLHBzKSxGRGUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsdkcpLF9UZSksIkFkZGl0aW9uYWwgV3JhcHBlZCBFZGdlcyBTcGFjaW5nIiksIlRvIHZpc3VhbGx5IHNlcGFyYXRlIGVkZ2VzIHRoYXQgYXJlIHdyYXBwZWQgZnJvbSByZWd1bGFybHkgcm91dGVkIGVkZ2VzIGFuIGFkZGl0aW9uYWwgc3BhY2luZyB2YWx1ZSBjYW4gYmUgc3BlY2lmaWVkIGluIGZvcm0gb2YgdGhpcyBsYXlvdXQgb3B0aW9uLiBUaGUgc3BhY2luZyBpcyBhZGRlZCB0byB0aGUgcmVndWxhciBlZGdlTm9kZSBzcGFjaW5nLiIpLDEwKSxmbyksdGEpLHVuKFBuKSkpKSxRcyh0LHZHLGZwLGNrdCksUXModCx2RyxmcCx1a3QpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCx3RyksX1RlKSwiQ29ycmVjdGlvbiBGYWN0b3IgZm9yIFdyYXBwaW5nIiksIkF0IHRpbWVzIGFuZCBmb3IgY2VydGFpbiB0eXBlcyBvZiBncmFwaHMgdGhlIGV4ZWN1dGVkIHdyYXBwaW5nIG1heSBwcm9kdWNlIHJlc3VsdHMgdGhhdCBhcmUgY29uc2lzdGVudGx5IGJpYXNlZCBpbiB0aGUgc2FtZSBmYXNoaW9uOiBlaXRoZXIgd3JhcHBpbmcgdG8gb2Z0ZW4gb3IgdG8gcmFyZWx5LiBUaGlzIGZhY3RvciBjYW4gYmUgdXNlZCB0byBjb3JyZWN0IHRoZSBiaWFzLiBJbnRlcm5hbGx5LCBpdCBpcyBzaW1wbHkgbXVsdGlwbGllZCB3aXRoIHRoZSAnYXNwZWN0IHJhdGlvJyBsYXlvdXQgb3B0aW9uLiIpLDEpLGZvKSx0YSksdW4oUG4pKSkpLFFzKHQsd0csZnAsaGt0KSxRcyh0LHdHLGZwLGZrdCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGJMKSxheXQpLCJDdXR0aW5nIFN0cmF0ZWd5IiksIlRoZSBzdHJhdGVneSBieSB3aGljaCB0aGUgbGF5ZXIgaW5kZXhlcyBhcmUgZGV0ZXJtaW5lZCBhdCB3aGljaCB0aGUgbGF5ZXJpbmcgY3J1bWJsZXMgaW50byBjaHVua3MuIikseU1lKSxwcykscExlKSx1bihQbikpKSksUXModCxiTCxmcCx2a3QpLFFzKHQsYkwsZnAsd2t0KSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsc2ZlKSxheXQpLCJNYW51YWxseSBTcGVjaWZpZWQgQ3V0cyIpLCJBbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSBoZXIgb3duIGN1dHMgZm9yIGEgY2VydGFpbiBncmFwaC4iKSxYMSksbWYpLHVuKFBuKSkpKSxRcyh0LHNmZSxiTCxna3QpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxhZmUpLCJ3cmFwcGluZy5jdXR0aW5nLm1zZCIpLCJNU0QgRnJlZWRvbSIpLCJUaGUgTVNEIGN1dHRpbmcgc3RyYXRlZ3kgc3RhcnRzIHdpdGggYW4gaW5pdGlhbCBndWVzcyBvbiB0aGUgbnVtYmVyIG9mIGNodW5rcyB0aGUgZ3JhcGggc2hvdWxkIGJlIHNwbGl0IGludG8uIFRoZSBmcmVlZG9tIHNwZWNpZmllcyBob3cgbXVjaCB0aGUgc3RyYXRlZ3kgbWF5IGRldmlhdGUgZnJvbSB0aGlzIGd1ZXNzLiBFLmcuIGlmIGFuIGluaXRpYWwgbnVtYmVyIG9mIDMgaXMgY29tcHV0ZWQsIGEgZnJlZWRvbSBvZiAxIGFsbG93cyAyLCAzLCBhbmQgNCBjdXRzLiIpLHdNZSksVGMpLHJvKSx1bihQbikpKSksUXModCxhZmUsYkwsYmt0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQseUcpLG95dCksIlZhbGlkaWZpY2F0aW9uIFN0cmF0ZWd5IiksIldoZW4gd3JhcHBpbmcgZ3JhcGhzLCBvbmUgY2FuIHNwZWNpZnkgaW5kaWNlcyB0aGF0IGFyZSBub3QgYWxsb3dlZCBhcyBzcGxpdCBwb2ludHMuIFRoZSB2YWxpZGlmaWNhdGlvbiBzdHJhdGVneSBtYWtlcyBzdXJlIGV2ZXJ5IGNvbXB1dGVkIHNwbGl0IHBvaW50IGlzIGFsbG93ZWQuIiksa01lKSxwcyksQkRlKSx1bihQbikpKSksUXModCx5RyxmcCxEa3QpLFFzKHQseUcsZnAsSWt0KSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQseEcpLG95dCksIlZhbGlkIEluZGljZXMgZm9yIFdyYXBwaW5nIiksbnVsbCksWDEpLG1mKSx1bihQbikpKSksUXModCx4RyxmcCxBa3QpLFFzKHQseEcsZnAsTGt0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsa0cpLEFUZSksIkltcHJvdmUgQ3V0cyIpLCJGb3IgZ2VuZXJhbCBncmFwaHMgaXQgaXMgaW1wb3J0YW50IHRoYXQgbm90IHRvbyBtYW55IGVkZ2VzIHdyYXAgYmFja3dhcmRzLiBUaHVzIGEgY29tcHJvbWlzZSBiZXR3ZWVuIGV2ZW5seS1kaXN0cmlidXRlZCBjdXRzIGFuZCB0aGUgdG90YWwgbnVtYmVyIG9mIGN1dCBlZGdlcyBpcyBzb3VnaHQuIiksITApLHlhKSxOcyksdW4oUG4pKSkpLFFzKHQsa0csZnAsRWt0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsRUcpLEFUZSksIkRpc3RhbmNlIFBlbmFsdHkgV2hlbiBJbXByb3ZpbmcgQ3V0cyIpLG51bGwpLDIpLGZvKSx0YSksdW4oUG4pKSkpLFFzKHQsRUcsZnAseGt0KSxRcyh0LEVHLGtHLCEwKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsb2ZlKSxBVGUpLCJJbXByb3ZlIFdyYXBwZWQgRWRnZXMiKSwiVGhlIGluaXRpYWwgd3JhcHBpbmcgaXMgcGVyZm9ybWVkIGluIGEgdmVyeSBzaW1wbGUgd2F5LiBBcyBhIGNvbnNlcXVlbmNlLCBlZGdlcyB0aGF0IHdyYXAgZnJvbSBvbmUgY2h1bmsgdG8gYW5vdGhlciBtYXkgYmUgdW5uZWNlc3NhcmlseSBsb25nLiBBY3RpdmF0aW5nIHRoaXMgb3B0aW9uIHRyaWVzIHRvIHNob3J0ZW4gc3VjaCBlZGdlcy4iKSwhMCkseWEpLE5zKSx1bihQbikpKSksUXModCxvZmUsZnAsQ2t0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsd1RlKSxmZmUpLCJFZGdlIExhYmVsIFNpZGUgU2VsZWN0aW9uIiksIk1ldGhvZCB0byBkZWNpZGUgb24gZWRnZSBsYWJlbCBzaWRlcy4iKSxhTWUpLHBzKSx5TGUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQseVRlKSxmZmUpLCJFZGdlIENlbnRlciBMYWJlbCBQbGFjZW1lbnQgU3RyYXRlZ3kiKSwiRGV0ZXJtaW5lcyBpbiB3aGljaCBsYXllciBjZW50ZXIgbGFiZWxzIG9mIGxvbmcgZWRnZXMgc2hvdWxkIGJlIHBsYWNlZC4iKSxzTWUpLHBzKSxOVCkscnMoUG4saGUobGUoeGcsMSksaXQsMTcwLDAsW1MyXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxURyksbUwpLCJDb25zaWRlciBNb2RlbCBPcmRlciIpLCJQcmVzZXJ2ZXMgdGhlIG9yZGVyIG9mIG5vZGVzIGFuZCBlZGdlcyBpbiB0aGUgbW9kZWwgZmlsZSBpZiB0aGlzIGRvZXMgbm90IGxlYWQgdG8gYWRkaXRpb25hbCBlZGdlIGNyb3NzaW5ncy4gRGVwZW5kaW5nIG9uIHRoZSBzdHJhdGVneSB0aGlzIGlzIG5vdCBhbHdheXMgcG9zc2libGUgc2luY2UgdGhlIG5vZGUgYW5kIGVkZ2Ugb3JkZXIgbWlnaHQgYmUgY29uZmxpY3RpbmcuIiksWkxlKSxwcyksU0RlKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHhUZSksbUwpLCJDb25zaWRlciBQb3J0IE9yZGVyIiksIklmIGRpc2FibGVkIHRoZSBwb3J0IG9yZGVyIG9mIG91dHB1dCBwb3J0cyBpcyBkZXJpdmVkIGZyb20gdGhlIGVkZ2Ugb3JkZXIgYW5kIGlucHV0IHBvcnRzIGFyZSBvcmRlcmVkIGJ5IHRoZWlyIGluY29taW5nIGNvbm5lY3Rpb25zLiBJZiBlbmFibGVkIGFsbCBwb3J0cyBhcmUgb3JkZXJlZCBieSB0aGUgcG9ydCBtb2RlbCBvcmRlci4iKSwhMSkseWEpLE5zKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGtUZSksbUwpLCJObyBNb2RlbCBPcmRlciIpLCJTZXQgb24gYSBub2RlIHRvIG5vdCBzZXQgYSBtb2RlbCBvcmRlciBmb3IgdGhpcyBub2RlIGV2ZW4gdGhvdWdoIGl0IGlzIGEgcmVhbCBub2RlLiIpLCExKSx5YSksTnMpLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsY2ZlKSxtTCksIkNvbnNpZGVyIE1vZGVsIE9yZGVyIGZvciBDb21wb25lbnRzIiksIklmIHNldCB0byBOT05FIHRoZSB1c3VhbCBvcmRlcmluZyBzdHJhdGVneSAoYnkgY3VtdWxhdGl2ZSBub2RlIHByaW9yaXR5IGFuZCBzaXplIG9mIG5vZGVzKSBpcyB1c2VkLiBJTlNJREVfUE9SVF9TSURFUyBvcmRlcnMgdGhlIGNvbXBvbmVudHMgd2l0aCBleHRlcm5hbCBwb3J0cyBvbmx5IGluc2lkZSB0aGUgZ3JvdXBzIHdpdGggdGhlIHNhbWUgcG9ydCBzaWRlLiBGT1JDRV9NT0RFTF9PUkRFUiBlbmZvcmNlcyB0aGUgbW9kZSBvcmRlciBvbiBjb21wb25lbnRzLiBUaGlzIG9wdGlvbiBtaWdodCBwcm9kdWNlIGJhZCBhbGlnbm1lbnRzIGFuZCBzdWIgb3B0aW1hbCBkcmF3aW5ncyBpbiB0ZXJtcyBvZiB1c2VkIGFyZWEgc2luY2UgdGhlIG9yZGVyaW5nIHNob3VsZCBiZSByZXNwZWN0ZWQuIiksUUxlKSxwcyksbUFlKSx1bihQbikpKSksUXModCxjZmUsbEwsbnVsbCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEVUZSksbUwpLCJMb25nIEVkZ2UgT3JkZXJpbmcgU3RyYXRlZ3kiKSwiSW5kaWNhdGVzIHdoZXRoZXIgbG9uZyBlZGdlcyBhcmUgc29ydGVkIHVuZGVyLCBvdmVyLCBvciBlcXVhbCB0byBub2RlcyB0aGF0IGhhdmUgbm8gY29ubmVjdGlvbiB0byBhIHByZXZpb3VzIGxheWVyIGluIGEgbGVmdC10by1yaWdodCBvciByaWdodC10by1sZWZ0IGxheW91dC4gVW5kZXIgYW5kIG92ZXIgY2hhbmdlcyB0byByaWdodCBhbmQgbGVmdCBpbiBhIHZlcnRpY2FsIGxheW91dC4iKSxKTGUpLHBzKSxtRGUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsdWZlKSxtTCksIkNyb3NzaW5nIENvdW50ZXIgTm9kZSBPcmRlciBJbmZsdWVuY2UiKSwiSW5kaWNhdGVzIHdpdGggd2hhdCBwZXJjZW50YWdlICgxIGZvciAxMDAlKSB2aW9sYXRpb25zIG9mIHRoZSBub2RlIG1vZGVsIG9yZGVyIGFyZSB3ZWlnaHRlZCBhZ2FpbnN0IHRoZSBjcm9zc2luZ3MgZS5nLiBhIHZhbHVlIG9mIDAuNSBtZWFucyB0d28gbW9kZWwgb3JkZXIgdmlvbGF0aW9ucyBhcmUgYXMgaW1wb3J0YW50IGFzIG9uIGVkZ2UgY3Jvc3NpbmcuIFRoaXMgYWxsb3dzIHNvbWUgZWRnZSBjcm9zc2luZ3MgaW4gZmF2b3Igb2YgcHJlc2VydmluZyB0aGUgbW9kZWwgb3JkZXIuIEl0IGlzIGFkdmlzZWQgdG8gc2V0IHRoaXMgdmFsdWUgdG8gYSB2ZXJ5IHNtYWxsIHBvc2l0aXZlIHZhbHVlIChlLmcuIDAuMDAxKSB0byBoYXZlIG1pbmltYWwgY3Jvc3NpbmcgYW5kIGEgb3B0aW1hbCBub2RlIG9yZGVyLiBEZWZhdWx0cyB0byBubyBpbmZsdWVuY2UgKDApLiIpLDApLGZvKSx0YSksdW4oUG4pKSkpLFFzKHQsdWZlLFRHLG51bGwpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxsZmUpLG1MKSwiQ3Jvc3NpbmcgQ291bnRlciBQb3J0IE9yZGVyIEluZmx1ZW5jZSIpLCJJbmRpY2F0ZXMgd2l0aCB3aGF0IHBlcmNlbnRhZ2UgKDEgZm9yIDEwMCUpIHZpb2xhdGlvbnMgb2YgdGhlIHBvcnQgbW9kZWwgb3JkZXIgYXJlIHdlaWdodGVkIGFnYWluc3QgdGhlIGNyb3NzaW5ncyBlLmcuIGEgdmFsdWUgb2YgMC41IG1lYW5zIHR3byBtb2RlbCBvcmRlciB2aW9sYXRpb25zIGFyZSBhcyBpbXBvcnRhbnQgYXMgb24gZWRnZSBjcm9zc2luZy4gVGhpcyBhbGxvd3Mgc29tZSBlZGdlIGNyb3NzaW5ncyBpbiBmYXZvciBvZiBwcmVzZXJ2aW5nIHRoZSBtb2RlbCBvcmRlci4gSXQgaXMgYWR2aXNlZCB0byBzZXQgdGhpcyB2YWx1ZSB0byBhIHZlcnkgc21hbGwgcG9zaXRpdmUgdmFsdWUgKGUuZy4gMC4wMDEpIHRvIGhhdmUgbWluaW1hbCBjcm9zc2luZyBhbmQgYSBvcHRpbWFsIHBvcnQgb3JkZXIuIERlZmF1bHRzIHRvIG5vIGluZmx1ZW5jZSAoMCkuIiksMCksZm8pLHRhKSx1bihQbikpKSksUXModCxsZmUsVEcsbnVsbCksVHd0KChuZXcgWHJlLHQpKX07dmFyIEx4dCxNeHQsRHh0LFlMZSxJeHQsWExlLE94dCxRTGUsTnh0LFB4dCxCeHQsSkxlLEZ4dCxSeHQsanh0LFpMZSwkeHQsenh0LHF4dCxlTWUsSHh0LFZ4dCxVeHQsdE1lLEd4dCxLeHQsV3h0LFl4dCxYeHQsUXh0LEp4dCxaeHQsZTl0LHQ5dCxuTWUsbjl0LHJNZSxyOXQsaU1lLGk5dCxzTWUsczl0LGFNZSxhOXQsbzl0LGM5dCxvTWUsdTl0LGNNZSxsOXQsdU1lLGg5dCxmOXQsZDl0LGc5dCxwOXQsYjl0LG05dCx2OXQsdzl0LHk5dCxsTWUseDl0LGs5dCxFOXQsVDl0LEM5dCxTOXQsaE1lLF85dCxBOXQsTDl0LE05dCxEOXQsSTl0LE85dCxmTWUsTjl0LGRNZSxQOXQsQjl0LEY5dCxnTWUsUjl0LGo5dCxwTWUsJDl0LHo5dCxxOXQsSDl0LFY5dCxVOXQsRzl0LEs5dCxiTWUsVzl0LFk5dCxYOXQsbU1lLFE5dCx2TWUsSjl0LFo5dCxla3QsdGt0LG5rdCxya3QsaWt0LHNrdCxha3Qsb2t0LGNrdCx1a3QsbGt0LGhrdCxma3QsZGt0LGdrdCxwa3Qsd01lLGJrdCxta3QseU1lLHZrdCx3a3QseWt0LHhrdCxra3QsRWt0LFRrdCxDa3QsU2t0LHhNZSxfa3QsQWt0LExrdCxNa3Qsa01lLERrdCxJa3Q7SShvdSwiTGF5ZXJlZE1ldGFEYXRhUHJvdmlkZXIiLDg1OSksRCg5OTgsMSxQZixYcmUpLGguaGY9ZnVuY3Rpb24odCl7VHd0KHQpfTt2YXIgUmQsWDFlLGNXLFFMLHVXLEVNZSxsVyxnNCxoVyxUTWUsQ01lLGZXLFExZSx5ZyxKMWUsZjMsU01lLFRCLFoxZSxfTWUsT2t0LE5rdCxQa3QsZFcsZWRlLEpMLGR2LEJrdCxSaCxBTWUsTE1lLGdXLHRkZSxqZCxwVyxicCxNTWUsRE1lLElNZSxuZGUscmRlLE9NZSx4MixpZGUsTk1lLHA0LFBNZSxCTWUsRk1lLGJXLGI0LGd2LFJNZSxqTWUsY2MsJE1lLEZrdCxRdSxtVyx6TWUscU1lLEhNZSx6Yixwdix2VyxWTWUsVU1lLHdXLGQzLEdNZSxzZGUsWkwsS01lLGczLGVNLHlXLGJ2LGFkZSxxVCx4VyxtdixXTWUsWU1lLFhNZSxIVCxRTWUsUmt0LGprdCwka3Qsemt0LHAzLG00LE1zLGsyLHFrdCx2NCxKTWUsVlQsWk1lLHc0LEhrdCxVVCxlRGUsSngsVmt0LFVrdCxDQixvZGUsdERlLFNCLHgwLHE2LEg2LGIzLHZ2LGtXLHk0LGNkZSxHVCxLVCxtMyxWNix1ZGUsX0IsdE0sbk0sR2t0LEtrdCxXa3QsbkRlLFlrdCxsZGUsckRlLGlEZSxzRGUsYURlLGhkZSxvRGUsY0RlLHVEZSxsRGUsZmRlLEVXO0kob3UsIkxheWVyZWRPcHRpb25zIiw5OTgpLEQoOTk5LDEse30sUmVlKSxoLnNmPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9bmV3IHFRZSx0fSxoLnRmPWZ1bmN0aW9uKHQpe30sSShvdSwiTGF5ZXJlZE9wdGlvbnMvTGF5ZXJlZEZhY3RvcnkiLDk5OSksRCgxMzkxLDEse30pLGguYT0wO3ZhciBYa3Q7SShVYywiRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIiLDEzOTEpLEQoNzkyLDEzOTEse30sRDhlKTt2YXIgVFcsUWt0O0kob3UsIkxheWVyZWRTcGFjaW5ncy9MYXllcmVkU3BhY2luZ3NCdWlsZGVyIiw3OTIpLEQoMjY1LDIyLHszOjEsMzQ6MSwyMjoxLDI2NToxLDE4ODoxLDE5NjoxfSxNNSksaC5kZz1mdW5jdGlvbigpe3JldHVybiBqYnQodGhpcyl9LGgucWc9ZnVuY3Rpb24oKXtyZXR1cm4gamJ0KHRoaXMpfTt2YXIgV1QsZGRlLFlULGhEZSxmRGUsZERlLENXLGdkZSxnRGUscERlPUZyKG91LCJMYXllcmluZ1N0cmF0ZWd5IiwyNjUsSHIsUnduLEgwbiksSmt0O0QoMzkwLDIyLHszOjEsMzQ6MSwyMjoxLDM5MDoxfSxUc2UpO3ZhciBwZGUsYkRlLFNXLG1EZT1GcihvdSwiTG9uZ0VkZ2VPcmRlcmluZ1N0cmF0ZWd5IiwzOTAsSHIsVjJuLFYwbiksWmt0O0QoMjAzLDIyLHszOjEsMzQ6MSwyMjoxLDIwMzoxfSxicSk7dmFyIFU2LEc2LF9XLGJkZSxtZGU9RnIob3UsIk5vZGVGbGV4aWJpbGl0eSIsMjAzLEhyLFpibixVMG4pLGVFdDtEKDMyMywyMix7MzoxLDM0OjEsMjI6MSwzMjM6MSwxODg6MSwxOTY6MX0saE8pLGguZGc9ZnVuY3Rpb24oKXtyZXR1cm4gTDJ0KHRoaXMpfSxoLnFnPWZ1bmN0aW9uKCl7cmV0dXJuIEwydCh0aGlzKX07dmFyIHJNLHZkZSx3ZGUsaU0sdkRlLHdEZT1GcihvdSwiTm9kZVBsYWNlbWVudFN0cmF0ZWd5IiwzMjMsSHIsVm1uLEcwbiksdEV0O0QoMjQzLDIyLHszOjEsMzQ6MSwyMjoxLDI0MzoxfSxseSk7dmFyIHlEZSx2Myx4NCxBQix4RGUsa0RlLExCLEVEZSxBVyxMVyxURGU9RnIob3UsIk5vZGVQcm9tb3Rpb25TdHJhdGVneSIsMjQzLEhyLHUzbixLMG4pLG5FdDtEKDI4NCwyMix7MzoxLDM0OjEsMjI6MSwyODQ6MX0sbXEpO3ZhciBDRGUsRTIseWRlLHhkZSxTRGU9RnIob3UsIk9yZGVyaW5nU3RyYXRlZ3kiLDI4NCxIcixlbW4sVzBuKSxyRXQ7RCg0MzAsMjIsezM6MSwzNDoxLDIyOjEsNDMwOjF9LFIzZSk7dmFyIGtkZSxFZGUsX0RlPUZyKG91LCJQb3J0U29ydGluZ1N0cmF0ZWd5Iiw0MzAsSHIsR3BuLFkwbiksaUV0O0QoNDYzLDIyLHszOjEsMzQ6MSwyMjoxLDQ2MzoxfSxDc2UpO3ZhciAkbCx6dSxzTSxzRXQ9RnIob3UsIlBvcnRUeXBlIiw0NjMsSHIsVTJuLFgwbiksYUV0O0QoMzg3LDIyLHszOjEsMzQ6MSwyMjoxLDM4NzoxfSxTc2UpO3ZhciBBRGUsVGRlLExEZSxNRGU9RnIob3UsIlNlbGZMb29wRGlzdHJpYnV0aW9uU3RyYXRlZ3kiLDM4NyxIcixHMm4sUTBuKSxvRXQ7RCgzNDksMjIsezM6MSwzNDoxLDIyOjEsMzQ5OjF9LF9zZSk7dmFyIENkZSxNQixTZGUsRERlPUZyKG91LCJTZWxmTG9vcE9yZGVyaW5nU3RyYXRlZ3kiLDM0OSxIcixLMm4sSjBuKSxjRXQ7RCgzMTIsMSx7MzEyOjF9LHh2dCksSShvdSwiU3BhY2luZ3MiLDMxMiksRCgzNTAsMjIsezM6MSwzNDoxLDIyOjEsMzUwOjF9LEFzZSk7dmFyIF9kZSxJRGUsYU0sT0RlPUZyKG91LCJTcGxpbmVSb3V0aW5nTW9kZSIsMzUwLEhyLFcybixaMG4pLHVFdDtEKDM1MiwyMix7MzoxLDM0OjEsMjI6MSwzNTI6MX0sTHNlKTt2YXIgQWRlLE5EZSxQRGUsQkRlPUZyKG91LCJWYWxpZGlmeVN0cmF0ZWd5IiwzNTIsSHIsWTJuLGUxbiksbEV0O0QoMzg4LDIyLHszOjEsMzQ6MSwyMjoxLDM4ODoxfSxNc2UpO3ZhciBrNCxMZGUsWFQsRkRlPUZyKG91LCJXcmFwcGluZ1N0cmF0ZWd5IiwzODgsSHIsWDJuLHQxbiksaEV0O0QoMTM5OCwxLFVvLFVyZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDM2KSxmRXR9LGguS2Y9ZnVuY3Rpb24odCxuKXtOTG4odGhpcyxsKHQsMzYpLG4pfTt2YXIgZkV0O0koTEcsIkRlcHRoRmlyc3RDeWNsZUJyZWFrZXIiLDEzOTgpLEQoNzkzLDEsVW8sUTRlKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzYpLGRFdH0saC5LZj1mdW5jdGlvbih0LG4pe0ZJbih0aGlzLGwodCwzNiksbil9LGguc2c9ZnVuY3Rpb24odCl7cmV0dXJuIGwoanQodCxhVSh0aGlzLmQsdC5jLmxlbmd0aCkpLDEwKX07dmFyIGRFdDtJKExHLCJHcmVlZHlDeWNsZUJyZWFrZXIiLDc5MyksRCgxNDAxLDc5MyxVbywkdHQpLGguc2c9ZnVuY3Rpb24odCl7dmFyIG4scixhLG87Zm9yKG89bnVsbCxuPUlpLGE9bmV3IEcodCk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDEwKSxucyhyLChmdCgpLEtpKSkmJmwoUShyLEtpKSwxNykuYTxuJiYobj1sKFEocixLaSksMTcpLmEsbz1yKTtyZXR1cm4gb3x8bChqdCh0LGFVKHRoaXMuZCx0LmMubGVuZ3RoKSksMTApfSxJKExHLCJHcmVlZHlNb2RlbE9yZGVyQ3ljbGVCcmVha2VyIiwxNDAxKSxEKDEzOTksMSxVbyxveiksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDM2KSxnRXR9LGguS2Y9ZnVuY3Rpb24odCxuKXtITG4odGhpcyxsKHQsMzYpLG4pfTt2YXIgZ0V0O0koTEcsIkludGVyYWN0aXZlQ3ljbGVCcmVha2VyIiwxMzk5KSxEKDE0MDAsMSxVbyxtOCksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDM2KSxwRXR9LGguS2Y9ZnVuY3Rpb24odCxuKXtaTG4odGhpcyxsKHQsMzYpLG4pfSxoLmE9MCxoLmI9MDt2YXIgcEV0O0koTEcsIk1vZGVsT3JkZXJDeWNsZUJyZWFrZXIiLDE0MDApLEQoMTQxMywxLFVvLGF6KSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzYpLGJFdH0saC5LZj1mdW5jdGlvbih0LG4pe3FEbih0aGlzLGwodCwzNiksbil9O3ZhciBiRXQ7SShkcCwiQnJlYWR0aEZpcnN0TW9kZWxPcmRlckxheWVyZXIiLDE0MTMpLEQoMTQxNCwxLGlpLGplZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBka24obCh0LDEwKSxsKG4sMTApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKGRwLCJCcmVhZHRoRmlyc3RNb2RlbE9yZGVyTGF5ZXJlci9sYW1iZGEkMCRUeXBlIiwxNDE0KSxEKDE0MDQsMSxVbyxmZXQpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwzNiksbUV0fSxoLktmPWZ1bmN0aW9uKHQsbil7cUluKHRoaXMsbCh0LDM2KSxuKX07dmFyIG1FdDtJKGRwLCJDb2ZmbWFuR3JhaGFtTGF5ZXJlciIsMTQwNCksRCgxNDA1LDEsaWksTFllKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFprbih0aGlzLmEsbCh0LDEwKSxsKG4sMTApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKGRwLCJDb2ZmbWFuR3JhaGFtTGF5ZXJlci8wbWV0aG9kcmVmJGNvbXBhcmVOb2Rlc0luVG9wbyRUeXBlIiwxNDA1KSxEKDE0MDYsMSxpaSxNWWUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWmRuKHRoaXMuYSxsKHQsMTApLGwobiwxMCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoZHAsIkNvZmZtYW5HcmFoYW1MYXllcmVyL2xhbWJkYSQxJFR5cGUiLDE0MDYpLEQoMTQxNSwxLFVvLFJJKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzYpLHZFdH0saC5LZj1mdW5jdGlvbih0LG4pe0xJbih0aGlzLGwodCwzNiksbil9LGguYz0wLGguZT0wO3ZhciB2RXQ7SShkcCwiRGVwdGhGaXJzdE1vZGVsT3JkZXJMYXllcmVyIiwxNDE1KSxEKDE0MTYsMSxpaSwkZWUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZ2tuKGwodCwxMCksbChuLDEwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShkcCwiRGVwdGhGaXJzdE1vZGVsT3JkZXJMYXllcmVyL2xhbWJkYSQwJFR5cGUiLDE0MTYpLEQoMTQwNywxLFVvLHplZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDM2KSxmaShmaShmaShuZXcgWHMsKHVvKCkseTApLCh2bygpLGYxZSkpLHZnLGw0KSxidSx1NCl9LGguS2Y9ZnVuY3Rpb24odCxuKXt0SW4obCh0LDM2KSxuKX0sSShkcCwiSW50ZXJhY3RpdmVMYXllcmVyIiwxNDA3KSxEKDU3OCwxLHs1Nzg6MX0sR1FlKSxoLmE9MCxoLmM9MCxJKGRwLCJJbnRlcmFjdGl2ZUxheWVyZXIvTGF5ZXJTcGFuIiw1NzgpLEQoMTQwMywxLFVvLFhTKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzYpLHdFdH0saC5LZj1mdW5jdGlvbih0LG4pe0xDbih0aGlzLGwodCwzNiksbil9O3ZhciB3RXQ7SShkcCwiTG9uZ2VzdFBhdGhMYXllcmVyIiwxNDAzKSxEKDE0MTIsMSxVbyxZUyksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDM2KSx5RXR9LGguS2Y9ZnVuY3Rpb24odCxuKXtaQ24odGhpcyxsKHQsMzYpLG4pfTt2YXIgeUV0O0koZHAsIkxvbmdlc3RQYXRoU291cmNlTGF5ZXJlciIsMTQxMiksRCgxNDEwLDEsVW8sakkpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwzNiksZmkoZmkoZmkobmV3IFhzLCh1bygpLHkwKSwodm8oKSxENikpLHZnLGw0KSxidSx1NCl9LGguS2Y9ZnVuY3Rpb24odCxuKXtsSW4odGhpcyxsKHQsMzYpLG4pfSxoLmE9MCxoLmI9MCxoLmQ9MDt2YXIgUkRlLGpEZTtJKGRwLCJNaW5XaWR0aExheWVyZXIiLDE0MTApLEQoMTQxMSwxLGlpLERZZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBEM24odGhpcyxsKHQsMTApLGwobiwxMCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoZHAsIk1pbldpZHRoTGF5ZXJlci9NaW5PdXRnb2luZ0VkZ2VzQ29tcGFyYXRvciIsMTQxMSksRCgxNDAyLDEsVW8sR3JlKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzYpLHhFdH0saC5LZj1mdW5jdGlvbih0LG4pe1RNbih0aGlzLGwodCwzNiksbil9O3ZhciB4RXQ7SShkcCwiTmV0d29ya1NpbXBsZXhMYXllcmVyIiwxNDAyKSxEKDE0MDgsMSxVbyx6cnQpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwzNiksZmkoZmkoZmkobmV3IFhzLCh1bygpLHkwKSwodm8oKSxENikpLHZnLGw0KSxidSx1NCl9LGguS2Y9ZnVuY3Rpb24odCxuKXtjRG4odGhpcyxsKHQsMzYpLG4pfSxoLmQ9MCxoLmY9MCxoLmc9MCxoLmk9MCxoLnM9MCxoLnQ9MCxoLnU9MCxJKGRwLCJTdHJldGNoV2lkdGhMYXllcmVyIiwxNDA4KSxEKDE0MDksMSxpaSxxZWUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gY3ZuKGwodCwxMCksbChuLDEwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShkcCwiU3RyZXRjaFdpZHRoTGF5ZXJlci8xIiwxNDA5KSxEKDQxMywxLHVDZSksaC5nZz1mdW5jdGlvbih0LG4scixhLG8sZil7fSxoLnVnPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gZm10KHRoaXMsdCxuLHIpfSxoLmZnPWZ1bmN0aW9uKCl7dGhpcy5nPVdlKEI0LHV5dCwyOCx0aGlzLmQsMTUsMSksdGhpcy5mPVdlKEI0LHV5dCwyOCx0aGlzLmQsMTUsMSl9LGguaGc9ZnVuY3Rpb24odCxuKXt0aGlzLmVbdF09V2UoVnIsZGksMjgsblt0XS5sZW5ndGgsMTUsMSl9LGguaWc9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO2E9clt0XVtuXSxhLnA9bix0aGlzLmVbdF1bbl09bn0saC5qZz1mdW5jdGlvbih0LG4scixhKXtsKGp0KGFbdF1bbl0uaixyKSwxMikucD10aGlzLmQrK30saC5iPTAsaC5jPTAsaC5kPTAsSShDbCwiQWJzdHJhY3RCYXJ5Y2VudGVyUG9ydERpc3RyaWJ1dG9yIiw0MTMpLEQoMTY5OCwxLGlpLElZZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBpNm4odGhpcy5hLGwodCwxMiksbChuLDEyKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShDbCwiQWJzdHJhY3RCYXJ5Y2VudGVyUG9ydERpc3RyaWJ1dG9yL2xhbWJkYSQwJFR5cGUiLDE2OTgpLEQoODMyLDEselAsbjZlKSxoLmdnPWZ1bmN0aW9uKHQsbixyLGEsbyxmKXt9LGguaWc9ZnVuY3Rpb24odCxuLHIpe30saC5qZz1mdW5jdGlvbih0LG4scixhKXt9LGguZWc9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5mZz1mdW5jdGlvbigpe3RoaXMuYz10aGlzLmUuYSx0aGlzLmc9dGhpcy5mLmd9LGguaGc9ZnVuY3Rpb24odCxuKXtuW3RdWzBdLmMucD10fSxoLmtnPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGgudmc9ZnVuY3Rpb24odCxuLHIsYSl7cj9wZ3QodGhpcyx0KTood2d0KHRoaXMsdCxhKSxOdnQodGhpcyx0LG4pKSx0LmMubGVuZ3RoPjEmJihSdChCdChRKGVvKChTbigwLHQuYy5sZW5ndGgpLGwodC5jWzBdLDEwKSkpLChOdCgpLGYzKSkpKT9xMnQodCx0aGlzLmQsbCh0aGlzLDY2OSkpOihDbigpLFZzKHQsdGhpcy5kKSksSGZ0KHRoaXMuZSx0KSl9LGgubGc9ZnVuY3Rpb24odCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEw7Zm9yKG4hPWFzdChyLHQubGVuZ3RoKSYmKGY9dFtuLShyPzE6LTEpXSxTNmUodGhpcy5mLGYscj8ocW8oKSx6dSk6KHFvKCksJGwpKSksbz10W25dWzBdLEw9IWF8fG8uaz09KFpuKCksVXMpLEM9TzEodFtuXSksdGhpcy52ZyhDLEwsITEsciksZz0wLEU9bmV3IEcoQyk7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDEwKSx0W25dW2crK109dztyZXR1cm4hMX0saC5tZz1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGc7Zm9yKGc9YXN0KG4sdC5sZW5ndGgpLGY9TzEodFtnXSksdGhpcy52ZyhmLCExLCEwLG4pLHI9MCxvPW5ldyBHKGYpO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSwxMCksdFtnXVtyKytdPWE7cmV0dXJuITF9LEkoQ2wsIkJhcnljZW50ZXJIZXVyaXN0aWMiLDgzMiksRCg2NjcsMSx7NjY3OjF9LFBZZSksaC5JYj1mdW5jdGlvbigpe3JldHVybiJCYXJ5Y2VudGVyU3RhdGUgW25vZGU9Iit0aGlzLmMrIiwgc3VtbWVkV2VpZ2h0PSIrdGhpcy5kKyIsIGRlZ3JlZT0iK3RoaXMuYisiLCBiYXJ5Y2VudGVyPSIrdGhpcy5hKyIsIHZpc2l0ZWQ9Iit0aGlzLmUrIl0ifSxoLmI9MCxoLmQ9MCxoLmU9ITE7dmFyIGtFdD1JKENsLCJCYXJ5Y2VudGVySGV1cmlzdGljL0JhcnljZW50ZXJTdGF0ZSIsNjY3KTtEKDE4NjUsMSxpaSxPWWUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gSjhuKHRoaXMuYSxsKHQsMTApLGwobiwxMCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoQ2wsIkJhcnljZW50ZXJIZXVyaXN0aWMvbGFtYmRhJDAkVHlwZSIsMTg2NSksRCg4MzEsMSx6UCxQeGUpLGguZmc9ZnVuY3Rpb24oKXt9LGguZ2c9ZnVuY3Rpb24odCxuLHIsYSxvLGYpe30saC5qZz1mdW5jdGlvbih0LG4scixhKXt9LGguaGc9ZnVuY3Rpb24odCxuKXt0aGlzLmFbdF09V2Uoa0V0LHszOjEsNDoxLDU6MSwyMTE3OjF9LDY2NyxuW3RdLmxlbmd0aCwwLDEpLHRoaXMuYlt0XT1XZShFRXQsezM6MSw0OjEsNToxLDIxMTg6MX0sMjM5LG5bdF0ubGVuZ3RoLDAsMSl9LGguaWc9ZnVuY3Rpb24odCxuLHIpe2VkdCh0aGlzLHJbdF1bbl0sITApfSxoLmM9ITEsSShDbCwiRm9yc3RlckNvbnN0cmFpbnRSZXNvbHZlciIsODMxKSxEKDIzOSwxLHsyMzk6MX0sS2F0LHl2dCksaC5JYj1mdW5jdGlvbigpe3ZhciB0LG47Zm9yKG49bmV3IHRiLG4uYSs9IlsiLHQ9MDt0PHRoaXMuZC5sZW5ndGg7dCsrKWhpKG4scGR0KHRoaXMuZFt0XSkpLEwxKHRoaXMuZyx0aGlzLmRbMF0pLmEhPW51bGwmJmhpKGhpKChuLmErPSI8IixuKSxUbG4oTDEodGhpcy5nLHRoaXMuZFswXSkuYSkpLCI+IiksdDx0aGlzLmQubGVuZ3RoLTEmJihuLmErPUNvKTtyZXR1cm4obi5hKz0iXSIsbikuYX0saC5hPTAsaC5jPTAsaC5mPTA7dmFyIEVFdD1JKENsLCJGb3JzdGVyQ29uc3RyYWludFJlc29sdmVyL0NvbnN0cmFpbnRHcm91cCIsMjM5KTtEKDE4NjAsMSxmcixOWWUpLGguQ2Q9ZnVuY3Rpb24odCl7ZWR0KHRoaXMuYSxsKHQsMTApLCExKX0sSShDbCwiRm9yc3RlckNvbnN0cmFpbnRSZXNvbHZlci9sYW1iZGEkMCRUeXBlIiwxODYwKSxEKDIxOSwxLHsyMTk6MSwyMzA6MX0sRXZ0KSxoLmdnPWZ1bmN0aW9uKHQsbixyLGEsbyxmKXt9LGguaGc9ZnVuY3Rpb24odCxuKXt9LGguZmc9ZnVuY3Rpb24oKXt0aGlzLnI9V2UoVnIsZGksMjgsdGhpcy5uLDE1LDEpfSxoLmlnPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvO289clt0XVtuXSxhPW8uZSxhJiZ2dCh0aGlzLmIsYSl9LGguamc9ZnVuY3Rpb24odCxuLHIsYSl7Kyt0aGlzLm59LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gUHZ0KHRoaXMuZSxuZXcgS3MpfSxoLmc9ITEsaC5pPSExLGgubj0wLGgucz0hMSxJKENsLCJHcmFwaEluZm9Ib2xkZXIiLDIxOSksRCgxOTA1LDEselAsSGVlKSxoLmdnPWZ1bmN0aW9uKHQsbixyLGEsbyxmKXt9LGguaGc9ZnVuY3Rpb24odCxuKXt9LGguamc9ZnVuY3Rpb24odCxuLHIsYSl7fSxoLnVnPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gciYmbj4wP2xvZSh0aGlzLmEsdFtuLTFdLHRbbl0pOiFyJiZuPHQubGVuZ3RoLTE/bG9lKHRoaXMuYSx0W25dLHRbbisxXSk6aWNlKHRoaXMuYSx0W25dLHI/KEN0KCksZXIpOihDdCgpLGFyKSksRFRuKHRoaXMsdCxuLHIpfSxoLmZnPWZ1bmN0aW9uKCl7dGhpcy5kPVdlKFZyLGRpLDI4LHRoaXMuYywxNSwxKSx0aGlzLmE9bmV3IElPKHRoaXMuZCl9LGguaWc9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO2E9clt0XVtuXSx0aGlzLmMrPWEuai5jLmxlbmd0aH0saC5jPTAsSShDbCwiR3JlZWR5UG9ydERpc3RyaWJ1dG9yIiwxOTA1KSxEKDE0MjEsMSxVbyxRcmUpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIFl5bihsKHQsMzYpKX0saC5LZj1mdW5jdGlvbih0LG4pe1ZNbihsKHQsMzYpLG4pfTt2YXIgVEV0O0koQ2wsIkludGVyYWN0aXZlQ3Jvc3NpbmdNaW5pbWl6ZXIiLDE0MjEpLEQoMTQyMiwxLGlpLEZZZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBPOG4odGhpcyxsKHQsMTApLGwobiwxMCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoQ2wsIkludGVyYWN0aXZlQ3Jvc3NpbmdNaW5pbWl6ZXIvMSIsMTQyMiksRCg1MTQsMSx7NTE0OjEsMTA2OjEsNDc6MX0sV2llKSxoLnJnPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBsKHQsMzYpLG49T3EoQ0V0KSxmaShuLCh1bygpLGJ1KSwodm8oKSxSSykpLG59LGguS2Y9ZnVuY3Rpb24odCxuKXtRX24odGhpcyxsKHQsMzYpLG4pfSxoLmU9MDt2YXIgQ0V0O0koQ2wsIkxheWVyU3dlZXBDcm9zc2luZ01pbmltaXplciIsNTE0KSxEKDE0MTgsMSxmcixSWWUpLGguQ2Q9ZnVuY3Rpb24odCl7ekFuKHRoaXMuYSxsKHQsMjE5KSl9LEkoQ2wsIkxheWVyU3dlZXBDcm9zc2luZ01pbmltaXplci8wbWV0aG9kcmVmJGNvbXBhcmVEaWZmZXJlbnRSYW5kb21pemVkTGF5b3V0cyRUeXBlIiwxNDE4KSxEKDE0MTksMSxmcixqWWUpLGguQ2Q9ZnVuY3Rpb24odCl7S3luKHRoaXMuYSxsKHQsMjE5KSl9LEkoQ2wsIkxheWVyU3dlZXBDcm9zc2luZ01pbmltaXplci8xbWV0aG9kcmVmJG1pbmltaXplQ3Jvc3NpbmdzTm9Db3VudGVyJFR5cGUiLDE0MTkpLEQoMTQyMCwxLGZyLCRZZSksaC5DZD1mdW5jdGlvbih0KXtKbXQodGhpcy5hLGwodCwyMTkpKX0sSShDbCwiTGF5ZXJTd2VlcENyb3NzaW5nTWluaW1pemVyLzJtZXRob2RyZWYkbWluaW1pemVDcm9zc2luZ3NXaXRoQ291bnRlciRUeXBlIiwxNDIwKSxEKDQ2NCwyMix7MzoxLDM0OjEsMjI6MSw0NjQ6MX0sRHNlKTt2YXIgREIsb00sTVcsU0V0PUZyKENsLCJMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIvQ3Jvc3NNaW5UeXBlIiw0NjQsSHIsUTJuLG4xbiksX0V0O0QoMTQxNywxLHRpLFZlZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gRTdlKCksbCh0LDMwKS5hLmMubGVuZ3RoPT0wfSxJKENsLCJMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIvbGFtYmRhJDAkVHlwZSIsMTQxNyksRCgxODYyLDEselAsQ290KSxoLmZnPWZ1bmN0aW9uKCl7fSxoLmdnPWZ1bmN0aW9uKHQsbixyLGEsbyxmKXt9LGguamc9ZnVuY3Rpb24odCxuLHIsYSl7fSxoLmhnPWZ1bmN0aW9uKHQsbil7blt0XVswXS5jLnA9dCx0aGlzLmJbdF09V2UoQUV0LHszOjEsNDoxLDU6MSwyMDQzOjF9LDY2OCxuW3RdLmxlbmd0aCwwLDEpfSxoLmlnPWZ1bmN0aW9uKHQsbixyKXt2YXIgYTthPXJbdF1bbl0sYS5wPW4sVHModGhpcy5iW3RdLG4sbmV3IGdJKX0sSShDbCwiTGF5ZXJTd2VlcFR5cGVEZWNpZGVyIiwxODYyKSxEKDY2OCwxLHs2Njg6MX0sZ0kpLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iTm9kZUluZm8gW2Nvbm5lY3RlZEVkZ2VzPSIrdGhpcy5hKyIsIGhpZXJhcmNoaWNhbEluZmx1ZW5jZT0iK3RoaXMuYisiLCByYW5kb21JbmZsdWVuY2U9Iit0aGlzLmMrIl0ifSxoLmE9MCxoLmI9MCxoLmM9MDt2YXIgQUV0PUkoQ2wsIkxheWVyU3dlZXBUeXBlRGVjaWRlci9Ob2RlSW5mbyIsNjY4KTtEKDE4NjMsMSxMZCxVZWUpLGguTGI9ZnVuY3Rpb24odCl7cmV0dXJuICRfKG5ldyBOMShsKHQsMTIpLmIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuICRfKG5ldyBOMShsKHQsMTIpLmIpKX0sSShDbCwiTGF5ZXJTd2VlcFR5cGVEZWNpZGVyL2xhbWJkYSQwJFR5cGUiLDE4NjMpLEQoMTg2NCwxLExkLFg5KSxoLkxiPWZ1bmN0aW9uKHQpe3JldHVybiAkXyhuZXcgTjEobCh0LDEyKS5iKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiAkXyhuZXcgTjEobCh0LDEyKS5iKSl9LEkoQ2wsIkxheWVyU3dlZXBUeXBlRGVjaWRlci9sYW1iZGEkMSRUeXBlIiwxODY0KSxEKDE5MDYsNDEzLHVDZSxLSmUpLGgudGc9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQjtzd2l0Y2goQz10aGlzLmcsci5nKXtjYXNlIDE6e2ZvcihhPTAsbz0wLEU9bmV3IEcodC5qKTtFLmE8RS5jLmMubGVuZ3RoOylnPWwocmUoRSksMTIpLGcuZS5jLmxlbmd0aCE9MCYmKCsrYSxnLmo9PShDdCgpLFFuKSYmKytvKTtmb3IoZj1uK28sQj1uK2Esdz1Sdyh0LChxbygpLCRsKSkuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTIpLGcuaj09KEN0KCksUW4pPyhDW2cucF09ZiwtLWYpOihDW2cucF09QiwtLUIpO3JldHVybiBhfWNhc2UgMjp7Zm9yKEw9MCx3PVJ3KHQsKHFvKCksenUpKS5LYygpO3cuT2IoKTspZz1sKHcuUGIoKSwxMiksKytMLENbZy5wXT1uK0w7cmV0dXJuIEx9ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWUkpfX0sSShDbCwiTGF5ZXJUb3RhbFBvcnREaXN0cmlidXRvciIsMTkwNiksRCg2NjksODMyLHs2Njk6MSwyMzA6MX0sYmZ0KSxoLnZnPWZ1bmN0aW9uKHQsbixyLGEpe3I/cGd0KHRoaXMsdCk6KHdndCh0aGlzLHQsYSksTnZ0KHRoaXMsdCxuKSksdC5jLmxlbmd0aD4xJiYoUnQoQnQoUShlbygoU24oMCx0LmMubGVuZ3RoKSxsKHQuY1swXSwxMCkpKSwoTnQoKSxmMykpKSk/cTJ0KHQsdGhpcy5kLHRoaXMpOihDbigpLFZzKHQsdGhpcy5kKSksUnQoQnQoUShlbygoU24oMCx0LmMubGVuZ3RoKSxsKHQuY1swXSwxMCkpKSxmMykpKXx8SGZ0KHRoaXMuZSx0KSl9LEkoQ2wsIk1vZGVsT3JkZXJCYXJ5Y2VudGVySGV1cmlzdGljIiw2NjkpLEQoMTg2NiwxLGlpLHpZZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBPOW4odGhpcy5hLGwodCwxMCksbChuLDEwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShDbCwiTW9kZWxPcmRlckJhcnljZW50ZXJIZXVyaXN0aWMvbGFtYmRhJDAkVHlwZSIsMTg2NiksRCgxNDIzLDEsVW8sSnJlKSxoLnJnPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBsKHQsMzYpLG49T3EoTEV0KSxmaShuLCh1bygpLGJ1KSwodm8oKSxSSykpLG59LGguS2Y9ZnVuY3Rpb24odCxuKXticG4oKGwodCwzNiksbikpfTt2YXIgTEV0O0koQ2wsIk5vQ3Jvc3NpbmdNaW5pbWl6ZXIiLDE0MjMpLEQoODA5LDQxMyx1Q2UsbzNlKSxoLnRnPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWO3N3aXRjaChCPXRoaXMuZyxyLmcpe2Nhc2UgMTp7Zm9yKG89MCxmPTAsTD1uZXcgRyh0LmopO0wuYTxMLmMuYy5sZW5ndGg7KUU9bChyZShMKSwxMiksRS5lLmMubGVuZ3RoIT0wJiYoKytvLEUuaj09KEN0KCksUW4pJiYrK2YpO2ZvcihhPTEvKG8rMSksZz1uK2YqYSxWPW4rMS1hLEM9UncodCwocW8oKSwkbCkpLktjKCk7Qy5PYigpOylFPWwoQy5QYigpLDEyKSxFLmo9PShDdCgpLFFuKT8oQltFLnBdPWcsZy09YSk6KEJbRS5wXT1WLFYtPWEpO2JyZWFrfWNhc2UgMjp7Zm9yKHc9MCxMPW5ldyBHKHQuaik7TC5hPEwuYy5jLmxlbmd0aDspRT1sKHJlKEwpLDEyKSxFLmcuYy5sZW5ndGg9PTB8fCsrdztmb3IoYT0xLyh3KzEpLHo9bithLEM9UncodCwocW8oKSx6dSkpLktjKCk7Qy5PYigpOylFPWwoQy5QYigpLDEyKSxCW0UucF09eix6Kz1hO2JyZWFrfWRlZmF1bHQ6dGhyb3cgdWUobmV3IFluKCJQb3J0IHR5cGUgaXMgdW5kZWZpbmVkIikpfXJldHVybiAxfSxJKENsLCJOb2RlUmVsYXRpdmVQb3J0RGlzdHJpYnV0b3IiLDgwOSksRCg4MjIsMSx7fSxGc3QsUWd0KSxJKENsLCJTd2VlcENvcHkiLDgyMiksRCgxODYxLDEselAsUDF0KSxoLmhnPWZ1bmN0aW9uKHQsbil7fSxoLmZnPWZ1bmN0aW9uKCl7dmFyIHQ7dD1XZShWcixkaSwyOCx0aGlzLmYsMTUsMSksdGhpcy5kPW5ldyBZWWUodCksdGhpcy5hPW5ldyBJTyh0KX0saC5nZz1mdW5jdGlvbih0LG4scixhLG8sZil7dmFyIGc7Zz1sKGp0KGZbdF1bbl0uaixyKSwxMiksby5jPT1nJiZvLmMuaS5jPT1vLmQuaS5jJiYrK3RoaXMuZVt0XX0saC5pZz1mdW5jdGlvbih0LG4scil7dmFyIGE7YT1yW3RdW25dLHRoaXMuY1t0XT10aGlzLmNbdF18YS5rPT0oWm4oKSxBdSl9LGguamc9ZnVuY3Rpb24odCxuLHIsYSl7dmFyIG87bz1sKGp0KGFbdF1bbl0uaixyKSwxMiksby5wPXRoaXMuZisrLG8uZy5jLmxlbmd0aCtvLmUuYy5sZW5ndGg+MSYmKG8uaj09KEN0KCksYXIpP3RoaXMuYlt0XT0hMDpvLmo9PWVyJiZ0PjAmJih0aGlzLmJbdC0xXT0hMCkpfSxoLmY9MCxJKGJnLCJBbGxDcm9zc2luZ3NDb3VudGVyIiwxODYxKSxEKDU5NSwxLHt9LFRWKSxoLmI9MCxoLmQ9MCxJKGJnLCJCaW5hcnlJbmRleGVkVHJlZSIsNTk1KSxEKDUzMiwxLHt9LElPKTt2YXIgJERlLERXO0koYmcsIkNyb3NzaW5nc0NvdW50ZXIiLDUzMiksRCgxOTUwLDEsaWkscVllKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHFkbih0aGlzLmEsbCh0LDEyKSxsKG4sMTIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKGJnLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQwJFR5cGUiLDE5NTApLEQoMTk1MSwxLGlpLEhZZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBIZG4odGhpcy5hLGwodCwxMiksbChuLDEyKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShiZywiQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkMSRUeXBlIiwxOTUxKSxEKDE5NTIsMSxpaSxWWWUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gVmRuKHRoaXMuYSxsKHQsMTIpLGwobiwxMikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoYmcsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDIkVHlwZSIsMTk1MiksRCgxOTUzLDEsaWksVVllKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFVkbih0aGlzLmEsbCh0LDEyKSxsKG4sMTIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKGJnLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQzJFR5cGUiLDE5NTMpLEQoMTk1NCwxLGZyLEdZZSksaC5DZD1mdW5jdGlvbih0KXtVdm4odGhpcy5hLGwodCwxMikpfSxJKGJnLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQ0JFR5cGUiLDE5NTQpLEQoMTk1NSwxLHRpLEtZZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gYmxuKHRoaXMuYSxsKHQsMTIpKX0sSShiZywiQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkNSRUeXBlIiwxOTU1KSxEKDE5NTYsMSxmcixXWWUpLGguQ2Q9ZnVuY3Rpb24odCl7RHR0KHRoaXMsdCl9LEkoYmcsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDYkVHlwZSIsMTk1NiksRCgxOTU3LDEsZnIscWV0KSxoLkNkPWZ1bmN0aW9uKHQpe3ZhciBuO2prKCksZ2IodGhpcy5iLChuPXRoaXMuYSxsKHQsMTIpLG4pKX0sSShiZywiQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkNyRUeXBlIiwxOTU3KSxEKDgzOSwxLExkLFhqKSxoLkxiPWZ1bmN0aW9uKHQpe3JldHVybiBqaygpLG5zKGwodCwxMiksKGZ0KCksamwpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGprKCksbnMobCh0LDEyKSwoZnQoKSxqbCkpfSxJKGJnLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQ4JFR5cGUiLDgzOSksRCgxOTQ5LDEse30sWVllKSxJKGJnLCJIeXBlcmVkZ2VDcm9zc2luZ3NDb3VudGVyIiwxOTQ5KSxEKDQ3OCwxLHszNDoxLDQ3ODoxfSxVcnQpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFY1bih0aGlzLGwodCw0NzgpKX0saC5iPTAsaC5jPTAsaC5lPTAsaC5mPTA7dmFyIFRPbj1JKGJnLCJIeXBlcmVkZ2VDcm9zc2luZ3NDb3VudGVyL0h5cGVyZWRnZSIsNDc4KTtEKDM3NCwxLHszNDoxLDM3NDoxfSxDSCksaC5GZD1mdW5jdGlvbih0KXtyZXR1cm4gaVRuKHRoaXMsbCh0LDM3NCkpfSxoLmI9MCxoLmM9MDt2YXIgTUV0PUkoYmcsIkh5cGVyZWRnZUNyb3NzaW5nc0NvdW50ZXIvSHlwZXJlZGdlQ29ybmVyIiwzNzQpO0QoNTMxLDIyLHszOjEsMzQ6MSwyMjoxLDUzMToxfSxqM2UpO3ZhciBjTSx1TSxERXQ9RnIoYmcsIkh5cGVyZWRnZUNyb3NzaW5nc0NvdW50ZXIvSHlwZXJlZGdlQ29ybmVyL1R5cGUiLDUzMSxIcixLcG4scjFuKSxJRXQ7RCgxNDI1LDEsVW8sWnJlKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKFEobCh0LDM2KSwoZnQoKSxMdSkpLDIxKS5IYygoSG8oKSx2ZikpP09FdDpudWxsfSxoLktmPWZ1bmN0aW9uKHQsbil7cDhuKHRoaXMsbCh0LDM2KSxuKX07dmFyIE9FdDtJKEdvLCJJbnRlcmFjdGl2ZU5vZGVQbGFjZXIiLDE0MjUpLEQoMTQyNiwxLFVvLGVpZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbChRKGwodCwzNiksKGZ0KCksTHUpKSwyMSkuSGMoKEhvKCksdmYpKT9ORXQ6bnVsbH0saC5LZj1mdW5jdGlvbih0LG4pe1o2bih0aGlzLGwodCwzNiksbil9O3ZhciBORXQsSVcsT1c7SShHbywiTGluZWFyU2VnbWVudHNOb2RlUGxhY2VyIiwxNDI2KSxEKDI2MSwxLHszNDoxLDI2MToxfSxQd2UpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIEF1bih0aGlzLGwodCwyNjEpKX0saC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gRGUodCwyNjEpPyhuPWwodCwyNjEpLHRoaXMuYj09bi5iKTohMX0saC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4ibHMiK1RiKHRoaXMuZSl9LGguYT0wLGguYj0wLGguYz0tMSxoLmQ9LTEsaC5nPTA7dmFyIFBFdD1JKEdvLCJMaW5lYXJTZWdtZW50c05vZGVQbGFjZXIvTGluZWFyU2VnbWVudCIsMjYxKTtEKDE0MjgsMSxVbyxic3QpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwoUShsKHQsMzYpLChmdCgpLEx1KSksMjEpLkhjKChIbygpLHZmKSk/QkV0Om51bGx9LGguS2Y9ZnVuY3Rpb24odCxuKXtBSW4odGhpcyxsKHQsMzYpLG4pfSxoLmI9MCxoLmc9MDt2YXIgQkV0O0koR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyIiwxNDI4KSxEKDE0NDcsMSxpaSxHZWUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gcnUobCh0LDE3KS5hLGwobiwxNykuYSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvMG1ldGhvZHJlZiRjb21wYXJlJFR5cGUiLDE0NDcpLEQoMTQ0OSwxLGlpLEtlZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBydShsKHQsMTcpLmEsbChuLDE3KS5hKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci8xbWV0aG9kcmVmJGNvbXBhcmUkVHlwZSIsMTQ0OSksRCg2NTUsMSx7NjU1OjF9LEhldCk7dmFyIENPbj1JKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9FZGdlUmVwIiw2NTUpO0QoNDEyLDEsezQxMjoxfSxENWUpLGguYj0hMTt2YXIgU09uPUkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL05vZGVSZXAiLDQxMik7RCg1MTUsMTMsezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTM6MSwxNjoxLDE1OjEsNTk6MSw1MTU6MX0sUVFlKSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9QYXRoIiw1MTUpLEQoMTQyOSwxLHt9LFdlZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDE4KS5kLmkua30sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvUGF0aC9sYW1iZGEkMCRUeXBlIiwxNDI5KSxEKDE0MzAsMSx0aSxZZWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwyNzMpPT0oWm4oKSxBYSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL1BhdGgvbGFtYmRhJDEkVHlwZSIsMTQzMCksRCgxNDMxLDEse30sWGVlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTgpLmQuaX0sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvUGF0aC9sYW1iZGEkMiRUeXBlIiwxNDMxKSxEKDE0MzIsMSx0aSxYWWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIExydChJMXQobCh0LDEwKSkpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9QYXRoL2xhbWJkYSQzJFR5cGUiLDE0MzIpLEQoMTQzMywxLHRpLFFlZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gU2RuKGwodCwxMikpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMCRUeXBlIiwxNDMzKSxEKDE0MzQsMSxmcixWZXQpLGguQ2Q9ZnVuY3Rpb24odCl7b2huKHRoaXMuYSx0aGlzLmIsbCh0LDEyKSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxJFR5cGUiLDE0MzQpLEQoMTQ0MywxLGZyLFFZZSksaC5DZD1mdW5jdGlvbih0KXtPa24odGhpcy5hLGwodCwxOCkpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTAkVHlwZSIsMTQ0MyksRCgxNDQ0LDEse30sSmVlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDExJFR5cGUiLDE0NDQpLEQoMTQ0NSwxLGZyLEpZZSksaC5DZD1mdW5jdGlvbih0KXtfU24odGhpcy5hLGwodCwxMCkpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTIkVHlwZSIsMTQ0NSksRCgxNDQ2LDEse30sWmVlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLHB0KGwodCwxMjUpLmUpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTMkVHlwZSIsMTQ0NiksRCgxNDQ4LDEse30sZXRlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLHB0KGwodCwxMjUpLmUpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTUkVHlwZSIsMTQ0OCksRCgxNDUwLDEsdGksdHRlKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLGwodCw0MTIpLmMuaz09KFpuKCksUHMpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTckVHlwZSIsMTQ1MCksRCgxNDUxLDEsdGksbnRlKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLGwodCw0MTIpLmMuai5jLmxlbmd0aD4xfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTgkVHlwZSIsMTQ1MSksRCgxNDUyLDEsZnIsVGF0KSxoLkNkPWZ1bmN0aW9uKHQpe2Y1bih0aGlzLmMsdGhpcy5iLHRoaXMuZCx0aGlzLmEsbCh0LDQxMikpfSxoLmM9MCxoLmQ9MCxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTkkVHlwZSIsMTQ1MiksRCgxNDM1LDEse30scnRlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDIkVHlwZSIsMTQzNSksRCgxNDUzLDEsZnIsWlllKSxoLkNkPWZ1bmN0aW9uKHQpe3Vobih0aGlzLmEsbCh0LDEyKSl9LGguYT0wLEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyMCRUeXBlIiwxNDUzKSxEKDE0NTQsMSx7fSxpdGUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIFNoKCksbmV3IGJuKG51bGwsbmV3IGtuKGwodCwzMCkuYSwxNikpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMjEkVHlwZSIsMTQ1NCksRCgxNDU1LDEsZnIsZVhlKSxoLkNkPWZ1bmN0aW9uKHQpe3hobih0aGlzLmEsbCh0LDEwKSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyMiRUeXBlIiwxNDU1KSxEKDE0NTYsMSx0aSxzdGUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIExydCh0KX0sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDIzJFR5cGUiLDE0NTYpLEQoMTQ1NywxLHt9LGF0ZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gU2goKSxuZXcgYm4obnVsbCxuZXcga24obCh0LDMwKS5hLDE2KSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNCRUeXBlIiwxNDU3KSxEKDE0NTgsMSx0aSx0WGUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIE1sbih0aGlzLmEsbCh0LDEwKSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNSRUeXBlIiwxNDU4KSxEKDE0NTksMSxmcixVZXQpLGguQ2Q9ZnVuY3Rpb24odCl7RjluKHRoaXMuYSx0aGlzLmIsbCh0LDEwKSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNiRUeXBlIiwxNDU5KSxEKDE0NjAsMSx0aSxzOCksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gU2goKSwhRG8obCh0LDE4KSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNyRUeXBlIiwxNDYwKSxEKDE0NjEsMSx0aSxRaiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gU2goKSwhRG8obCh0LDE4KSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyOCRUeXBlIiwxNDYxKSxEKDE0NjIsMSx7fSxuWGUpLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gY2huKHRoaXMuYSxsKHQsMzApLGwobiwzMCkpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMjkkVHlwZSIsMTQ2MiksRCgxNDM2LDEse30sb3RlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLG5ldyBibihudWxsLG5ldyB2dyhuZXcgaHIoZHIocXMobCh0LDEwKSkuYS5LYygpLG5ldyBqKSkpKX0sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDMkVHlwZSIsMTQzNiksRCgxNDM3LDEsdGksY3RlKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLFJibihsKHQsMTgpKX0sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDQkVHlwZSIsMTQzNyksRCgxNDM4LDEsZnIsclhlKSxoLkNkPWZ1bmN0aW9uKHQpe0JBbih0aGlzLmEsbCh0LDE4KSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ1JFR5cGUiLDE0MzgpLEQoMTQzOSwxLHt9LHV0ZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gU2goKSxuZXcgYm4obnVsbCxuZXcga24obCh0LDMwKS5hLDE2KSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ2JFR5cGUiLDE0MzkpLEQoMTQ0MCwxLHRpLEpqKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLGwodCwxMCkuaz09KFpuKCksUHMpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkNyRUeXBlIiwxNDQwKSxEKDE0NDEsMSx7fSxsdGUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIFNoKCksbmV3IGJuKG51bGwsbmV3IHZ3KG5ldyBocihkcihzcChsKHQsMTApKS5hLktjKCksbmV3IGopKSkpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkOCRUeXBlIiwxNDQxKSxEKDE0NDIsMSx0aSxUUyksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gU2goKSxDZG4obCh0LDE4KSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ5JFR5cGUiLDE0NDIpLEQoMTQyNCwxLFVvLHRpZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbChRKGwodCwzNiksKGZ0KCksTHUpKSwyMSkuSGMoKEhvKCksdmYpKT9GRXQ6bnVsbH0saC5LZj1mdW5jdGlvbih0LG4pe2JMbihsKHQsMzYpLG4pfTt2YXIgRkV0O0koR28sIlNpbXBsZU5vZGVQbGFjZXIiLDE0MjQpLEQoMTg1LDEsezE4NToxfSxmNiksaC5JYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PSIiLHRoaXMuYz09KHhkKCksdzMpP3QrPUR4OnRoaXMuYz09VDImJih0Kz1NeCksdGhpcy5vPT0oRDEoKSx3dik/dCs9d2hlOnRoaXMubz09WTE/dCs9IlVQIjp0Kz0iQkFMQU5DRUQiLHR9LEkoSWIsIkJLQWxpZ25lZExheW91dCIsMTg1KSxEKDUyMywyMix7MzoxLDM0OjEsMjI6MSw1MjM6MX0sJDNlKTt2YXIgVDIsdzMsUkV0PUZyKEliLCJCS0FsaWduZWRMYXlvdXQvSERpcmVjdGlvbiIsNTIzLEhyLFlwbixpMW4pLGpFdDtEKDUyMiwyMix7MzoxLDM0OjEsMjI6MSw1MjI6MX0sejNlKTt2YXIgd3YsWTEsJEV0PUZyKEliLCJCS0FsaWduZWRMYXlvdXQvVkRpcmVjdGlvbiIsNTIyLEhyLFhwbixzMW4pLHpFdDtEKDE2OTksMSx7fSxHZXQpLEkoSWIsIkJLQWxpZ25lciIsMTY5OSksRCgxNzAyLDEse30scmd0KSxJKEliLCJCS0NvbXBhY3RvciIsMTcwMiksRCg2NjMsMSx7NjYzOjF9LGh0ZSksaC5hPTAsSShJYiwiQktDb21wYWN0b3IvQ2xhc3NFZGdlIiw2NjMpLEQoNDY3LDEsezQ2NzoxfSxXUWUpLGguYT1udWxsLGguYj0wLEkoSWIsIkJLQ29tcGFjdG9yL0NsYXNzTm9kZSIsNDY3KSxEKDE0MjcsMSxVbyxYZXQpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwoUShsKHQsMzYpLChmdCgpLEx1KSksMjEpLkhjKChIbygpLHZmKSk/cUV0Om51bGx9LGguS2Y9ZnVuY3Rpb24odCxuKXtHSW4odGhpcyxsKHQsMzYpLG4pfSxoLmQ9ITE7dmFyIHFFdDtJKEliLCJCS05vZGVQbGFjZXIiLDE0MjcpLEQoMTcwMCwxLHt9LGZ0ZSksaC5kPTAsSShJYiwiTmVpZ2hib3Job29kSW5mb3JtYXRpb24iLDE3MDApLEQoMTcwMSwxLGlpLGlYZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB5d24odGhpcyxsKHQsNDIpLGwobiw0MikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoSWIsIk5laWdoYm9yaG9vZEluZm9ybWF0aW9uL05laWdoYm9yQ29tcGFyYXRvciIsMTcwMSksRCg4MjMsMSx7fSksSShJYiwiVGhyZXNob2xkU3RyYXRlZ3kiLDgyMyksRCgxODI1LDgyMyx7fSxZUWUpLGgud2c9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0aGlzLmEubz09KEQxKCksWTEpP2dzOmlhfSxoLnhnPWZ1bmN0aW9uKCl7fSxJKEliLCJUaHJlc2hvbGRTdHJhdGVneS9OdWxsVGhyZXNob2xkU3RyYXRlZ3kiLDE4MjUpLEQoNTg3LDEsezU4NzoxfSxRZXQpLGguYz0hMSxoLmQ9ITEsSShJYiwiVGhyZXNob2xkU3RyYXRlZ3kvUG9zdHByb2Nlc3NhYmxlIiw1ODcpLEQoMTgyNiw4MjMse30sWFFlKSxoLndnPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvLGY7cmV0dXJuIG89bj09cixhPXRoaXMuYS5hW3IucF09PW4sb3x8YT8oZj10LHRoaXMuYS5jPT0oeGQoKSx3Myk/KG8mJihmPXZsZSh0aGlzLG4sITApKSwhaXNOYU4oZikmJiFpc0Zpbml0ZShmKSYmYSYmKGY9dmxlKHRoaXMsciwhMSkpKToobyYmKGY9dmxlKHRoaXMsbiwhMCkpLCFpc05hTihmKSYmIWlzRmluaXRlKGYpJiZhJiYoZj12bGUodGhpcyxyLCExKSkpLGYpOnR9LGgueGc9ZnVuY3Rpb24oKXtmb3IodmFyIHQsbixyLGEsbzt0aGlzLmQuYiE9MDspbz1sKGgybih0aGlzLmQpLDU4NyksYT1MbXQodGhpcyxvKSxhLmEmJih0PWEuYSxyPVJ0KHRoaXMuYS5mW3RoaXMuYS5nW28uYi5wXS5wXSksISghciYmIURvKHQpJiZ0LmMuaS5jPT10LmQuaS5jKSYmKG49TjJ0KHRoaXMsbyksbnx8T2xuKHRoaXMuZSxvKSkpO2Zvcig7dGhpcy5lLmEuYy5sZW5ndGghPTA7KU4ydCh0aGlzLGwoUDB0KHRoaXMuZSksNTg3KSl9LEkoSWIsIlRocmVzaG9sZFN0cmF0ZWd5L1NpbXBsZVRocmVzaG9sZFN0cmF0ZWd5IiwxODI2KSxEKDY0NSwxLHs2NDU6MSwxODg6MSwxOTY6MX0sZHRlKSxoLmRnPWZ1bmN0aW9uKCl7cmV0dXJuIFZmdCh0aGlzKX0saC5xZz1mdW5jdGlvbigpe3JldHVybiBWZnQodGhpcyl9O3ZhciBNZGU7SShtZmUsIkVkZ2VSb3V0ZXJGYWN0b3J5Iiw2NDUpLEQoMTQ4NSwxLFVvLG5pZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gclNuKGwodCwzNikpfSxoLktmPWZ1bmN0aW9uKHQsbil7RUxuKGwodCwzNiksbil9O3ZhciBIRXQsVkV0LFVFdCxHRXQsS0V0LHpEZSxXRXQsWUV0O0kobWZlLCJPcnRob2dvbmFsRWRnZVJvdXRlciIsMTQ4NSksRCgxNDc4LDEsVW8sWWV0KSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBDOG4obCh0LDM2KSl9LGguS2Y9ZnVuY3Rpb24odCxuKXtHRG4odGhpcyxsKHQsMzYpLG4pfTt2YXIgWEV0LFFFdCxKRXQsWkV0LElCLGVUdDtJKG1mZSwiUG9seWxpbmVFZGdlUm91dGVyIiwxNDc4KSxEKDE0NzksMSxMZCxwdGUpLGguTGI9ZnVuY3Rpb24odCl7cmV0dXJuIEE3ZShsKHQsMTApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIEE3ZShsKHQsMTApKX0sSShtZmUsIlBvbHlsaW5lRWRnZVJvdXRlci8xIiwxNDc5KSxEKDE4NzIsMSx0aSxidGUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMzIpLmM9PShKMCgpLHFiKX0sSShpMSwiSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkMCRUeXBlIiwxODcyKSxEKDE4NzMsMSx7fSxtdGUpLGguWmU9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMzIpLmR9LEkoaTEsIkh5cGVyRWRnZUN5Y2xlRGV0ZWN0b3IvbGFtYmRhJDEkVHlwZSIsMTg3MyksRCgxODc0LDEsdGksdnRlKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTMyKS5jPT0oSjAoKSxxYil9LEkoaTEsIkh5cGVyRWRnZUN5Y2xlRGV0ZWN0b3IvbGFtYmRhJDIkVHlwZSIsMTg3NCksRCgxODc1LDEse30sd3RlKSxoLlplPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTMyKS5kfSxJKGkxLCJIeXBlckVkZ2VDeWNsZURldGVjdG9yL2xhbWJkYSQzJFR5cGUiLDE4NzUpLEQoMTg3NiwxLHt9LHl0ZSksaC5aZT1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDEzMikuZH0sSShpMSwiSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkNCRUeXBlIiwxODc2KSxEKDE4NzcsMSx7fSxndGUpLGguWmU9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMzIpLmR9LEkoaTEsIkh5cGVyRWRnZUN5Y2xlRGV0ZWN0b3IvbGFtYmRhJDUkVHlwZSIsMTg3NyksRCgxMTgsMSx7MzQ6MSwxMTg6MX0seE4pLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIEx1bih0aGlzLGwodCwxMTgpKX0saC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gRGUodCwxMTgpPyhuPWwodCwxMTgpLHRoaXMuZz09bi5nKTohMX0saC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYTtmb3IodD1uZXcgVGgoInsiKSxhPW5ldyBHKHRoaXMubik7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDEyKSxuPUhOKHIuaSksbj09bnVsbCYmKG49Im4iK25pdChyLmkpKSx0LmErPSIiK24sYS5hPGEuYy5jLmxlbmd0aCYmKHQuYSs9IiwiKTtyZXR1cm4gdC5hKz0ifSIsdC5hfSxoLmE9MCxoLmI9MCxoLmM9TmFOLGguZD0wLGguZz0wLGguaT0wLGgubz0wLGgucz1OYU4sSShpMSwiSHlwZXJFZGdlU2VnbWVudCIsMTE4KSxEKDEzMiwxLHsxMzI6MX0sUG0pLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hKyItPiIrdGhpcy5iKyIgKCIrV2huKHRoaXMuYykrIikifSxoLmQ9MCxJKGkxLCJIeXBlckVkZ2VTZWdtZW50RGVwZW5kZW5jeSIsMTMyKSxEKDUyOCwyMix7MzoxLDM0OjEsMjI6MSw1Mjg6MX0scTNlKTt2YXIgcWIsRTQsdFR0PUZyKGkxLCJIeXBlckVkZ2VTZWdtZW50RGVwZW5kZW5jeS9EZXBlbmRlbmN5VHlwZSIsNTI4LEhyLFFwbixhMW4pLG5UdDtEKDE4NzgsMSx7fSxzWGUpLEkoaTEsIkh5cGVyRWRnZVNlZ21lbnRTcGxpdHRlciIsMTg3OCksRCgxODc5LDEse30sUUplKSxoLmE9MCxoLmI9MCxJKGkxLCJIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXIvQXJlYVJhdGluZyIsMTg3OSksRCgzMzksMSx7MzM5OjF9LHZhZSksaC5hPTAsaC5iPTAsaC5jPTAsSShpMSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL0ZyZWVBcmVhIiwzMzkpLEQoMTg4MCwxLGlpLGE4KSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFdmbihsKHQsMTE4KSxsKG4sMTE4KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShpMSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQwJFR5cGUiLDE4ODApLEQoMTg4MSwxLGZyLENhdCksaC5DZD1mdW5jdGlvbih0KXtrbW4odGhpcy5hLHRoaXMuZCx0aGlzLmMsdGhpcy5iLGwodCwxMTgpKX0saC5iPTAsSShpMSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQxJFR5cGUiLDE4ODEpLEQoMTg4MiwxLHt9LHh0ZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGJuKG51bGwsbmV3IGtuKGwodCwxMTgpLmUsMTYpKX0sSShpMSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQyJFR5cGUiLDE4ODIpLEQoMTg4MywxLHt9LGt0ZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGJuKG51bGwsbmV3IGtuKGwodCwxMTgpLmosMTYpKX0sSShpMSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQzJFR5cGUiLDE4ODMpLEQoMTg4NCwxLHt9LEV0ZSksaC5ZZT1mdW5jdGlvbih0KXtyZXR1cm4gemUoR2UodCkpfSxJKGkxLCJIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXIvbGFtYmRhJDQkVHlwZSIsMTg4NCksRCg2NjQsMSx7fSxIYWUpLGguYT0wLGguYj0wLGguYz0wLEkoaTEsIk9ydGhvZ29uYWxSb3V0aW5nR2VuZXJhdG9yIiw2NjQpLEQoMTcwMywxLHt9LFR0ZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGJuKG51bGwsbmV3IGtuKGwodCwxMTgpLmUsMTYpKX0sSShpMSwiT3J0aG9nb25hbFJvdXRpbmdHZW5lcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTcwMyksRCgxNzA0LDEse30sQ3RlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24obCh0LDExOCkuaiwxNikpfSxJKGkxLCJPcnRob2dvbmFsUm91dGluZ0dlbmVyYXRvci9sYW1iZGEkMSRUeXBlIiwxNzA0KSxEKDY3MCwxLHt9KSxJKHZmZSwiQmFzZVJvdXRpbmdEaXJlY3Rpb25TdHJhdGVneSIsNjcwKSxEKDE4NzAsNjcwLHt9LGVKZSksaC55Zz1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2lmKCEodC5yJiYhdC5xKSlmb3IoTD1uK3QubypyLEM9bmV3IEcodC5uKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3IoRT1sKHJlKEMpLDEyKSxCPUljKGhlKGxlKEVhLDEpLGR0LDgsMCxbRS5pLm4sRS5uLEUuYV0pKS5hLHc9bmV3IEcoRS5nKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMTgpLERvKGcpfHwoSj1nLmQsdGU9SWMoaGUobGUoRWEsMSksZHQsOCwwLFtKLmkubixKLm4sSi5hXSkpLmEsYi5NYXRoLmFicyhCLXRlKT5EZCYmKGY9TCxvPXQsYT1uZXcgbHQoQixmKSx1aShnLmEsYSksVncodGhpcyxnLG8sYSwhMSksej10LnIseiYmKFY9emUoR2UoZmYoei5lLDApKSksYT1uZXcgbHQoVixmKSx1aShnLmEsYSksVncodGhpcyxnLG8sYSwhMSksZj1uK3oubypyLG89eixhPW5ldyBsdChWLGYpLHVpKGcuYSxhKSxWdyh0aGlzLGcsbyxhLCExKSksYT1uZXcgbHQodGUsZiksdWkoZy5hLGEpLFZ3KHRoaXMsZyxvLGEsITEpKSl9LGguemc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaS5uLmErdC5uLmErdC5hLmF9LGguQWc9ZnVuY3Rpb24oKXtyZXR1cm4gQ3QoKSxEcn0saC5CZz1mdW5jdGlvbigpe3JldHVybiBDdCgpLFFufSxJKHZmZSwiTm9ydGhUb1NvdXRoUm91dGluZ1N0cmF0ZWd5IiwxODcwKSxEKDE4NzEsNjcwLHt9LHRKZSksaC55Zz1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2lmKCEodC5yJiYhdC5xKSlmb3IoTD1uLXQubypyLEM9bmV3IEcodC5uKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3IoRT1sKHJlKEMpLDEyKSxCPUljKGhlKGxlKEVhLDEpLGR0LDgsMCxbRS5pLm4sRS5uLEUuYV0pKS5hLHc9bmV3IEcoRS5nKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMTgpLERvKGcpfHwoSj1nLmQsdGU9SWMoaGUobGUoRWEsMSksZHQsOCwwLFtKLmkubixKLm4sSi5hXSkpLmEsYi5NYXRoLmFicyhCLXRlKT5EZCYmKGY9TCxvPXQsYT1uZXcgbHQoQixmKSx1aShnLmEsYSksVncodGhpcyxnLG8sYSwhMSksej10LnIseiYmKFY9emUoR2UoZmYoei5lLDApKSksYT1uZXcgbHQoVixmKSx1aShnLmEsYSksVncodGhpcyxnLG8sYSwhMSksZj1uLXoubypyLG89eixhPW5ldyBsdChWLGYpLHVpKGcuYSxhKSxWdyh0aGlzLGcsbyxhLCExKSksYT1uZXcgbHQodGUsZiksdWkoZy5hLGEpLFZ3KHRoaXMsZyxvLGEsITEpKSl9LGguemc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaS5uLmErdC5uLmErdC5hLmF9LGguQWc9ZnVuY3Rpb24oKXtyZXR1cm4gQ3QoKSxRbn0saC5CZz1mdW5jdGlvbigpe3JldHVybiBDdCgpLERyfSxJKHZmZSwiU291dGhUb05vcnRoUm91dGluZ1N0cmF0ZWd5IiwxODcxKSxEKDE4NjksNjcwLHt9LG5KZSksaC55Zz1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2lmKCEodC5yJiYhdC5xKSlmb3IoTD1uK3QubypyLEM9bmV3IEcodC5uKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3IoRT1sKHJlKEMpLDEyKSxCPUljKGhlKGxlKEVhLDEpLGR0LDgsMCxbRS5pLm4sRS5uLEUuYV0pKS5iLHc9bmV3IEcoRS5nKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMTgpLERvKGcpfHwoSj1nLmQsdGU9SWMoaGUobGUoRWEsMSksZHQsOCwwLFtKLmkubixKLm4sSi5hXSkpLmIsYi5NYXRoLmFicyhCLXRlKT5EZCYmKGY9TCxvPXQsYT1uZXcgbHQoZixCKSx1aShnLmEsYSksVncodGhpcyxnLG8sYSwhMCksej10LnIseiYmKFY9emUoR2UoZmYoei5lLDApKSksYT1uZXcgbHQoZixWKSx1aShnLmEsYSksVncodGhpcyxnLG8sYSwhMCksZj1uK3oubypyLG89eixhPW5ldyBsdChmLFYpLHVpKGcuYSxhKSxWdyh0aGlzLGcsbyxhLCEwKSksYT1uZXcgbHQoZix0ZSksdWkoZy5hLGEpLFZ3KHRoaXMsZyxvLGEsITApKSl9LGguemc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaS5uLmIrdC5uLmIrdC5hLmJ9LGguQWc9ZnVuY3Rpb24oKXtyZXR1cm4gQ3QoKSxhcn0saC5CZz1mdW5jdGlvbigpe3JldHVybiBDdCgpLGVyfSxJKHZmZSwiV2VzdFRvRWFzdFJvdXRpbmdTdHJhdGVneSIsMTg2OSksRCg4MjgsMSx7fSxTa2UpLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gVGIodGhpcy5hKX0saC5iPTAsaC5jPSExLGguZD0hMSxoLmY9MCxJKFp5LCJOdWJTcGxpbmUiLDgyOCksRCg0MTgsMSx7NDE4OjF9LGRidCxyb3QpLEkoWnksIk51YlNwbGluZS9Qb2xhckNQIiw0MTgpLEQoMTQ4MCwxLFVvLFlkdCksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gZ3huKGwodCwzNikpfSxoLktmPWZ1bmN0aW9uKHQsbil7aEluKHRoaXMsbCh0LDM2KSxuKX07dmFyIHJUdCxpVHQsc1R0LGFUdCxvVHQ7SShaeSwiU3BsaW5lRWRnZVJvdXRlciIsMTQ4MCksRCgyNzQsMSx7Mjc0OjF9LFdIKSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSsiIC0+KCIrdGhpcy5jKyIpICIrdGhpcy5ifSxoLmM9MCxJKFp5LCJTcGxpbmVFZGdlUm91dGVyL0RlcGVuZGVuY3kiLDI3NCksRCg0NjUsMjIsezM6MSwzNDoxLDIyOjEsNDY1OjF9LEgzZSk7dmFyIEhiLEs2LGNUdD1GcihaeSwiU3BsaW5lRWRnZVJvdXRlci9TaWRlVG9Qcm9jZXNzIiw0NjUsSHIscjJuLG8xbiksdVR0O0QoMTQ4MSwxLHRpLFN0ZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gR0EoKSwhbCh0LDEzMSkub30sSShaeSwiU3BsaW5lRWRnZVJvdXRlci9sYW1iZGEkMCRUeXBlIiwxNDgxKSxEKDE0ODIsMSx7fSxfdGUpLGguWmU9ZnVuY3Rpb24odCl7cmV0dXJuIEdBKCksbCh0LDEzMSkudisxfSxJKFp5LCJTcGxpbmVFZGdlUm91dGVyL2xhbWJkYSQxJFR5cGUiLDE0ODIpLEQoMTQ4MywxLGZyLEpldCksaC5DZD1mdW5jdGlvbih0KXtMZG4odGhpcy5hLHRoaXMuYixsKHQsNDIpKX0sSShaeSwiU3BsaW5lRWRnZVJvdXRlci9sYW1iZGEkMiRUeXBlIiwxNDgzKSxEKDE0ODQsMSxmcixaZXQpLGguQ2Q9ZnVuY3Rpb24odCl7TWRuKHRoaXMuYSx0aGlzLmIsbCh0LDQyKSl9LEkoWnksIlNwbGluZUVkZ2VSb3V0ZXIvbGFtYmRhJDMkVHlwZSIsMTQ4NCksRCgxMzEsMSx7MzQ6MSwxMzE6MX0sX3B0LElrZSksaC5GZD1mdW5jdGlvbih0KXtyZXR1cm4gSXVuKHRoaXMsbCh0LDEzMSkpfSxoLmI9MCxoLmU9ITEsaC5mPTAsaC5nPTAsaC5qPSExLGguaz0hMSxoLm49MCxoLm89ITEsaC5wPSExLGgucT0hMSxoLnM9MCxoLnU9MCxoLnY9MCxoLkY9MCxJKFp5LCJTcGxpbmVTZWdtZW50IiwxMzEpLEQoNDY4LDEsezQ2ODoxfSxBdGUpLGguYT0wLGguYj0hMSxoLmM9ITEsaC5kPSExLGguZT0hMSxoLmY9MCxJKFp5LCJTcGxpbmVTZWdtZW50L0VkZ2VJbmZvcm1hdGlvbiIsNDY4KSxEKDExOTgsMSx7fSxDUyksSShncCxMRWUsMTE5OCksRCgxMTk5LDEsaWksTHRlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFhrbihsKHQsMTIxKSxsKG4sMTIxKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShncCxFM3QsMTE5OSksRCgxMTk3LDEse30sZFplKSxJKGdwLCJNclRyZWUiLDExOTcpLEQoNDA1LDIyLHszOjEsMzQ6MSwyMjoxLDQwNToxLDE4ODoxLDE5NjoxfSx2cSksaC5kZz1mdW5jdGlvbigpe3JldHVybiBXcHQodGhpcyl9LGgucWc9ZnVuY3Rpb24oKXtyZXR1cm4gV3B0KHRoaXMpfTt2YXIgTlcsbE0saE0sZk0scURlPUZyKGdwLCJUcmVlTGF5b3V0UGhhc2VzIiw0MDUsSHIsc21uLGMxbiksbFR0O0QoMTExMiwyMDUsdHYsSHJ0KSxoLnJmPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztmb3IoUnQoQnQoYXQodCwoSGMoKSxkSWUpKSkpfHxLTygocj1uZXcgWXYoKGF3KCksbmV3IEp2KHQpKSkscikpLGc9bi5laCh4ZmUpLGcuVWcoImJ1aWxkIHRHcmFwaCIsMSksdz0oRT1uZXcgbk4scGMoRSx0KSxydChFLChRaSgpLGdNKSx0KSxDPW5ldyBQcixIX24odCxFLEMpLGNBbih0LEUsQyksRSksZy5WZygpLGc9bi5laCh4ZmUpLGcuVWcoIlNwbGl0IGdyYXBoIiwxKSxmPVlfbih0aGlzLmEsdyksZy5WZygpLG89bmV3IEcoZik7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDEyMSksWjhuKHRoaXMuYixhLG4uZWgoLjU5OTk5OTk5NDAzOTUzNTUvZi5jLmxlbmd0aCkpO2c9bi5laCh4ZmUpLGcuVWcoIlBhY2sgY29tcG9uZW50cyIsMSksdz1LSW4oZiksZy5WZygpLGc9bi5laCh4ZmUpLGcuVWcoIkFwcGx5IGxheW91dCByZXN1bHRzIiwxKSxCTW4odyksZy5WZygpfSxJKGdwLCJUcmVlTGF5b3V0UHJvdmlkZXIiLDExMTIpLEQoMTg5NCwxLGhnLER0ZSksaC5KYz1mdW5jdGlvbih0KXt0byh0aGlzLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIENuKCksTWsoKSxBVH0sSShncCwiVHJlZVV0aWwvMSIsMTg5NCksRCgxODk1LDEsaGcsSXRlKSxoLkpjPWZ1bmN0aW9uKHQpe3RvKHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gQ24oKSxNaygpLEFUfSxJKGdwLCJUcmVlVXRpbC8yIiwxODk1KSxEKDE4ODUsMSx0aSxPdGUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIFJ0KEJ0KFEobCh0LDQwKSwoUWkoKSxWYikpKSl9LEkoZ3AsIlRyZWVVdGlsL2xhbWJkYSQwJFR5cGUiLDE4ODUpLEQoMTg5MSwxLHRpLGFYZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLkhjKGwodCw0MCkpfSxJKGdwLCJUcmVlVXRpbC9sYW1iZGEkMTAkVHlwZSIsMTg5MSksRCgxODkyLDEse30sb1hlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBpbW4odGhpcy5hLGwodCw0MCkpfSxJKGdwLCJUcmVlVXRpbC9sYW1iZGEkMTEkVHlwZSIsMTg5MiksRCgxODkzLDEsdGksZXR0KSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBud24odGhpcy5hLHRoaXMuYixsKHQsNDApKX0sSShncCwiVHJlZVV0aWwvbGFtYmRhJDEyJFR5cGUiLDE4OTMpLEQoMTg4NiwxLHRpLGNYZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gcTRuKHRoaXMuYSxsKHQsNjUpKX0sSShncCwiVHJlZVV0aWwvbGFtYmRhJDMkVHlwZSIsMTg4NiksRCgxODg3LDEsaWksTXRlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFlmbihsKHQsNjUpLGwobiw2NSkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoZ3AsIlRyZWVVdGlsL2xhbWJkYSQ0JFR5cGUiLDE4ODcpLEQoMTg4OCwxLHRpLHVYZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gSDRuKHRoaXMuYSxsKHQsNjUpKX0sSShncCwiVHJlZVV0aWwvbGFtYmRhJDckVHlwZSIsMTg4OCksRCgxODg5LDEsaWksTnRlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFhmbihsKHQsNjUpLGwobiw2NSkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoZ3AsIlRyZWVVdGlsL2xhbWJkYSQ4JFR5cGUiLDE4ODkpLEQoMTg5MCwxLHt9LFB0ZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDY1KS5ifSxJKGdwLCJUcmVlVXRpbC9sYW1iZGEkOSRUeXBlIiwxODkwKSxEKDUwOCwxMzcsezM6MSw1MDg6MSw5NjoxLDEzNzoxfSksaC5nPTAsSSh2TCwiVEdyYXBoRWxlbWVudCIsNTA4KSxEKDY1LDUwOCx7MzoxLDY1OjEsNTA4OjEsOTY6MSwxMzc6MX0sTjVlKSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYiYmdGhpcy5jP0JtKHRoaXMuYikrIi0+IitCbSh0aGlzLmMpOiJlXyIrZXModGhpcyl9LEkodkwsIlRFZGdlIiw2NSksRCgxMjEsMTM3LHszOjEsMTIxOjEsOTY6MSwxMzc6MX0sbk4pLGguSWI9ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYSxvO2ZvcihvPW51bGwsYT1Scih0aGlzLmIsMCk7YS5iIT1hLmQuYzspcj1sKEJyKGEpLDQwKSxvKz0oci5jPT1udWxsfHxyLmMubGVuZ3RoPT0wPyJuXyIrci5nOiJuXyIrci5jKStgCmA7Zm9yKG49UnIodGhpcy5hLDApO24uYiE9bi5kLmM7KXQ9bChCcihuKSw2NSksbys9KHQuYiYmdC5jP0JtKHQuYikrIi0+IitCbSh0LmMpOiJlXyIrZXModCkpK2AKYDtyZXR1cm4gb307dmFyIF9Pbj1JKHZMLCJUR3JhcGgiLDEyMSk7RCg2NDMsNTA4LHszOjEsNTA4OjEsNjQzOjEsOTY6MSwxMzc6MX0pLEkodkwsIlRTaGFwZSIsNjQzKSxEKDQwLDY0Myx7MzoxLDUwODoxLDQwOjEsNjQzOjEsOTY6MSwxMzc6MX0seGNlKSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIEJtKHRoaXMpfTt2YXIgUFc9SSh2TCwiVE5vZGUiLDQwKTtEKDIzNiwxLGhnLEhnKSxoLkpjPWZ1bmN0aW9uKHQpe3RvKHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1Scih0aGlzLmEuZCwwKSxuZXcgQzUodCl9LEkodkwsIlROb2RlLzIiLDIzNiksRCgzMjksMSxPYSxDNSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIGwoQnIodGhpcy5hKSw2NSkuY30saC5PYj1mdW5jdGlvbigpe3JldHVybiBRSSh0aGlzLmEpfSxoLlFiPWZ1bmN0aW9uKCl7WW9lKHRoaXMuYSl9LEkodkwsIlROb2RlLzIvMSIsMzI5KSxEKDE5MjMsMSx0cyxCdGUpLGguS2Y9ZnVuY3Rpb24odCxuKXt6SW4odGhpcyxsKHQsMTIxKSxuKX0sSShTdSwiQ29tcGFjdGlvblByb2Nlc3NvciIsMTkyMyksRCgxOTI0LDEsaWksbFhlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEEzbih0aGlzLmEsbCh0LDQwKSxsKG4sNDApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKFN1LCJDb21wYWN0aW9uUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE5MjQpLEQoMTkyNSwxLHRpLHR0dCksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gTnBuKHRoaXMuYix0aGlzLmEsbCh0LDQyKSl9LGguYT0wLGguYj0wLEkoU3UsIkNvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTkyNSksRCgxOTM0LDEsaWksbzgpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQ2duKGwodCw0MCksbChuLDQwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShTdSwiQ29tcGFjdGlvblByb2Nlc3Nvci9sYW1iZGEkMTAkVHlwZSIsMTkzNCksRCgxOTM1LDEsaWksWmopLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gamhuKGwodCw0MCksbChuLDQwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShTdSwiQ29tcGFjdGlvblByb2Nlc3Nvci9sYW1iZGEkMTEkVHlwZSIsMTkzNSksRCgxOTM2LDEsaWksRnRlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFNnbihsKHQsNDApLGwobiw0MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoU3UsIkNvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDEyJFR5cGUiLDE5MzYpLEQoMTkyNiwxLHRpLGhYZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4ga2huKHRoaXMuYSxsKHQsNDIpKX0saC5hPTAsSShTdSwiQ29tcGFjdGlvblByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxOTI2KSxEKDE5MjcsMSx0aSxmWGUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIEVobih0aGlzLmEsbCh0LDQyKSl9LGguYT0wLEkoU3UsIkNvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTkyNyksRCgxOTI4LDEsdGkscEkpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCw0MCkuYy5pbmRleE9mKERHKT09LTF9LEkoU3UsIkNvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDQkVHlwZSIsMTkyOCksRCgxOTI5LDEse30sZFhlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBCYm4odGhpcy5hLGwodCw0MCkpfSxoLmE9MCxJKFN1LCJDb21wYWN0aW9uUHJvY2Vzc29yL2xhbWJkYSQ1JFR5cGUiLDE5MjkpLEQoMTkzMCwxLHt9LGdYZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gVnZuKHRoaXMuYSxsKHQsNDApKX0saC5hPTAsSShTdSwiQ29tcGFjdGlvblByb2Nlc3Nvci9sYW1iZGEkNiRUeXBlIiwxOTMwKSxEKDE5MzEsMSxpaSxwWGUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdHZuKHRoaXMuYSxsKHQsMjQwKSxsKG4sMjQwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShTdSwiQ29tcGFjdGlvblByb2Nlc3Nvci9sYW1iZGEkNyRUeXBlIiwxOTMxKSxEKDE5MzIsMSxpaSxiWGUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbnZuKHRoaXMuYSxsKHQsNDApLGwobiw0MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoU3UsIkNvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDgkVHlwZSIsMTkzMiksRCgxOTMzLDEsaWksUnRlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuICRobihsKHQsNDApLGwobiw0MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoU3UsIkNvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDkkVHlwZSIsMTkzMyksRCgxOTIxLDEsdHMsanRlKSxoLktmPWZ1bmN0aW9uKHQsbil7RlNuKGwodCwxMjEpLG4pfSxJKFN1LCJEaXJlY3Rpb25Qcm9jZXNzb3IiLDE5MjEpLEQoMTkxMywxLHRzLHFydCksaC5LZj1mdW5jdGlvbih0LG4pe2FBbih0aGlzLGwodCwxMjEpLG4pfSxJKFN1LCJGYW5Qcm9jZXNzb3IiLDE5MTMpLEQoMTkzNywxLHRzLCR0ZSksaC5LZj1mdW5jdGlvbih0LG4pe0NTbihsKHQsMTIxKSxuKX0sSShTdSwiR3JhcGhCb3VuZHNQcm9jZXNzb3IiLDE5MzcpLEQoMTkzOCwxLHt9LHp0ZSksaC5ZZT1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDQwKS5lLmF9LEkoU3UsIkdyYXBoQm91bmRzUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE5MzgpLEQoMTkzOSwxLHt9LHF0ZSksaC5ZZT1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDQwKS5lLmJ9LEkoU3UsIkdyYXBoQm91bmRzUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE5MzkpLEQoMTk0MCwxLHt9LEh0ZSksaC5ZZT1mdW5jdGlvbih0KXtyZXR1cm4gc2xuKGwodCw0MCkpfSxJKFN1LCJHcmFwaEJvdW5kc1Byb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxOTQwKSxEKDE5NDEsMSx7fSxWdGUpLGguWWU9ZnVuY3Rpb24odCl7cmV0dXJuIGlsbihsKHQsNDApKX0sSShTdSwiR3JhcGhCb3VuZHNQcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTk0MSksRCgyNjIsMjIsezM6MSwzNDoxLDIyOjEsMjYyOjEsMTk2OjF9LG93KSxoLmRnPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZyl7Y2FzZSAwOnJldHVybiBuZXcgYkplO2Nhc2UgMTpyZXR1cm4gbmV3IHFydDtjYXNlIDI6cmV0dXJuIG5ldyBwSmU7Y2FzZSAzOnJldHVybiBuZXcgbiQ7Y2FzZSA0OnJldHVybiBuZXcgVXRlO2Nhc2UgODpyZXR1cm4gbmV3IGUkO2Nhc2UgNTpyZXR1cm4gbmV3IGp0ZTtjYXNlIDY6cmV0dXJuIG5ldyBpJDtjYXNlIDc6cmV0dXJuIG5ldyBCdGU7Y2FzZSA5OnJldHVybiBuZXcgJHRlO2Nhc2UgMTA6cmV0dXJuIG5ldyBLdGU7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWW4oRmhlKyh0aGlzLmYhPW51bGw/dGhpcy5mOiIiK3RoaXMuZykpKX19O3ZhciBIRGUsVkRlLFVEZSxHRGUsS0RlLFdEZSxZRGUsWERlLFFEZSxKRGUsRGRlLEFPbj1GcihTdSxSaGUsMjYyLEhyLEJmdCx1MW4pLGhUdDtEKDE5MjAsMSx0cyxlJCksaC5LZj1mdW5jdGlvbih0LG4pe1JEbihsKHQsMTIxKSxuKX0sSShTdSwiTGV2ZWxDb29yZGluYXRlc1Byb2Nlc3NvciIsMTkyMCksRCgxOTE4LDEsdHMsVXRlKSxoLktmPWZ1bmN0aW9uKHQsbil7c0NuKHRoaXMsbCh0LDEyMSksbil9LGguYT0wLEkoU3UsIkxldmVsSGVpZ2h0UHJvY2Vzc29yIiwxOTE4KSxEKDE5MTksMSxoZyx0JCksaC5KYz1mdW5jdGlvbih0KXt0byh0aGlzLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIENuKCksTWsoKSxBVH0sSShTdSwiTGV2ZWxIZWlnaHRQcm9jZXNzb3IvMSIsMTkxOSksRCgxOTE0LDEsdHMscEplKSxoLktmPWZ1bmN0aW9uKHQsbil7d1NuKHRoaXMsbCh0LDEyMSksbil9LEkoU3UsIkxldmVsUHJvY2Vzc29yIiwxOTE0KSxEKDE5MTUsMSx0aSxHdGUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIFJ0KEJ0KFEobCh0LDQwKSwoUWkoKSxWYikpKSl9LEkoU3UsIkxldmVsUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE5MTUpLEQoMTkxNiwxLHRzLG4kKSxoLktmPWZ1bmN0aW9uKHQsbil7bmtuKHRoaXMsbCh0LDEyMSksbil9LGguYT0wLEkoU3UsIk5laWdoYm9yc1Byb2Nlc3NvciIsMTkxNiksRCgxOTE3LDEsaGcsciQpLGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBDbigpLE1rKCksQVR9LEkoU3UsIk5laWdoYm9yc1Byb2Nlc3Nvci8xIiwxOTE3KSxEKDE5MjIsMSx0cyxpJCksaC5LZj1mdW5jdGlvbih0LG4pe3NBbih0aGlzLGwodCwxMjEpLG4pfSxoLmE9MCxJKFN1LCJOb2RlUG9zaXRpb25Qcm9jZXNzb3IiLDE5MjIpLEQoMTkxMiwxLHRzLGJKZSksaC5LZj1mdW5jdGlvbih0LG4peyRMbih0aGlzLGwodCwxMjEpLG4pfSxJKFN1LCJSb290UHJvY2Vzc29yIiwxOTEyKSxEKDE5NDIsMSx0cyxLdGUpLGguS2Y9ZnVuY3Rpb24odCxuKXtCNm4obCh0LDEyMSksbil9LEkoU3UsIlVudHJlZWlmeWVyIiwxOTQyKSxEKDM5MiwyMix7MzoxLDM0OjEsMjI6MSwzOTI6MX0sT3NlKTt2YXIgT0IsSWRlLFpEZSxlSWU9RnIoVVAsIkVkZ2VSb3V0aW5nTW9kZSIsMzkyLEhyLEoybixsMW4pLGZUdCxOQixRVCxPZGUsdEllLG5JZSxOZGUsUGRlLHJJZSxCZGUsaUllLEZkZSxkTSxSZGUsQlcsRlcsazAsYzEsSlQsZ00scE0sQzIsc0llLGRUdCxqZGUsVmIsUEIsQkI7RCg4NjIsMSxQZixyaWUpLGguaGY9ZnVuY3Rpb24odCl7c24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGZDZSksIiIpLHB5dCksIlR1cm5zIG9uIFRyZWUgY29tcGFjdGlvbiB3aGljaCBkZWNyZWFzZXMgdGhlIHNpemUgb2YgdGhlIHdob2xlIHRyZWUgYnkgcGxhY2luZyBub2RlcyBvZiBtdWx0aXBsZSBsZXZlbHMgaW4gb25lIGxhcmdlIGxldmVsIiksKEhuKCksITEpKSwoZzIoKSx5YSkpLE5zKSx1bigocjEoKSxQbikpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxkQ2UpLCIiKSwiRWRnZSBFbmQgVGV4dHVyZSBMZW5ndGgiKSwiU2hvdWxkIGJlIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSB0ZXh0dXJlIGF0IHRoZSBlbmQgb2YgYW4gZWRnZS4gVGhpcyB2YWx1ZSBjYW4gYmUgdXNlZCB0byBpbXByb3ZlIHRoZSBFZGdlIFJvdXRpbmcuIiksNyksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGdDZSksIiIpLCJUcmVlIExldmVsIiksIlRoZSBpbmRleCBmb3IgdGhlIHRyZWUgbGV2ZWwgdGhlIG5vZGUgaXMgaW4iKSxwdCgwKSksVGMpLHJvKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHBDZSksIiIpLHB5dCksIldoZW4gc2V0IHRvIGEgcG9zaXRpdmUgbnVtYmVyIHRoaXMgb3B0aW9uIHdpbGwgZm9yY2UgdGhlIGFsZ29yaXRobSB0byBwbGFjZSB0aGUgbm9kZSB0byB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIHdpdGhpbiB0aGUgdHJlZXMgbGF5ZXIgaWYgd2VpZ2h0aW5nIGlzIHNldCB0byBjb25zdHJhaW50IikscHQoLTEpKSxUYykscm8pLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsYkNlKSwiIiksIldlaWdodGluZyBvZiBOb2RlcyIpLCJXaGljaCB3ZWlnaHRpbmcgdG8gdXNlIHdoZW4gY29tcHV0aW5nIGEgbm9kZSBvcmRlci4iKSxjSWUpLHBzKSx5SWUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsbUNlKSwiIiksIkVkZ2UgUm91dGluZyBNb2RlIiksIkNob29zZXMgYW4gRWRnZSBSb3V0aW5nIGFsZ29yaXRobS4iKSxhSWUpLHBzKSxlSWUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsdkNlKSwiIiksIlNlYXJjaCBPcmRlciIpLCJXaGljaCBzZWFyY2ggb3JkZXIgdG8gdXNlIHdoZW4gY29tcHV0aW5nIGEgc3Bhbm5pbmcgdHJlZS4iKSxvSWUpLHBzKSxrSWUpLHVuKFBuKSkpKSxpd3QoKG5ldyB2OCx0KSl9O3ZhciBnVHQscFR0LGJUdCxhSWUsbVR0LHZUdCxvSWUsd1R0LHlUdCxjSWU7SShVUCwiTXJUcmVlTWV0YURhdGFQcm92aWRlciIsODYyKSxEKDEwMDYsMSxQZix2OCksaC5oZj1mdW5jdGlvbih0KXtpd3QodCl9O3ZhciB4VHQsdUllLGxJZSx5MyxoSWUsZkllLCRkZSxrVHQsRVR0LFRUdCxDVHQsU1R0LF9UdCxBVHQsZEllLGdJZSxwSWUsTFR0LFc2LFJXLGJJZSxNVHQsbUllLHpkZSxEVHQsSVR0LE9UdCx2SWUsTlR0LCRkLHdJZTtJKFVQLCJNclRyZWVPcHRpb25zIiwxMDA2KSxEKDEwMDcsMSx7fSxXdGUpLGguc2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgSHJ0LHR9LGgudGY9ZnVuY3Rpb24odCl7fSxJKFVQLCJNclRyZWVPcHRpb25zL01ydHJlZUZhY3RvcnkiLDEwMDcpLEQoMzUzLDIyLHszOjEsMzQ6MSwyMjoxLDM1MzoxfSx3cSk7dmFyIHFkZSxqVyxIZGUsVmRlLHlJZT1GcihVUCwiT3JkZXJXZWlnaHRpbmciLDM1MyxIcixhbW4saDFuKSxQVHQ7RCg0MzMsMjIsezM6MSwzNDoxLDIyOjEsNDMzOjF9LFYzZSk7dmFyIHhJZSxVZGUsa0llPUZyKFVQLCJUcmVlaWZ5aW5nT3JkZXIiLDQzMyxIcix0Mm4sZjFuKSxCVHQ7RCgxNDg2LDEsVW8sYWllKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTIxKSxGVHR9LGguS2Y9ZnVuY3Rpb24odCxuKXtiM24odGhpcyxsKHQsMTIxKSxuKX07dmFyIEZUdDtJKCJvcmcuZWNsaXBzZS5lbGsuYWxnLm1ydHJlZS5wMXRyZWVpZnkiLCJERlNUcmVlaWZ5ZXIiLDE0ODYpLEQoMTQ4NywxLFVvLGRrKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTIxKSxSVHR9LGguS2Y9ZnVuY3Rpb24odCxuKXtFU24odGhpcyxsKHQsMTIxKSxuKX07dmFyIFJUdDtJKHBULCJOb2RlT3JkZXJlciIsMTQ4NyksRCgxNDk0LDEse30scHdlKSxoLnRkPWZ1bmN0aW9uKHQpe3JldHVybiBZaXQodCl9LEkocFQsIk5vZGVPcmRlcmVyLzBtZXRob2RyZWYkbGFtYmRhJDYkVHlwZSIsMTQ5NCksRCgxNDg4LDEsdGksYW5lKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiB1eCgpLFJ0KEJ0KFEobCh0LDQwKSwoUWkoKSxWYikpKSl9LEkocFQsIk5vZGVPcmRlcmVyL2xhbWJkYSQwJFR5cGUiLDE0ODgpLEQoMTQ4OSwxLHRpLG9uZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gdXgoKSxsKFEobCh0LDQwKSwoSGMoKSxXNikpLDE3KS5hPDB9LEkocFQsIk5vZGVPcmRlcmVyL2xhbWJkYSQxJFR5cGUiLDE0ODkpLEQoMTQ5MCwxLHRpLHZYZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gVXduKHRoaXMuYSxsKHQsNDApKX0sSShwVCwiTm9kZU9yZGVyZXIvbGFtYmRhJDIkVHlwZSIsMTQ5MCksRCgxNDkxLDEsdGksbVhlKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBqYm4odGhpcy5hLGwodCw0MCkpfSxJKHBULCJOb2RlT3JkZXJlci9sYW1iZGEkMyRUeXBlIiwxNDkxKSxEKDE0OTIsMSxpaSxjbmUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZ3duKGwodCw0MCksbChuLDQwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShwVCwiTm9kZU9yZGVyZXIvbGFtYmRhJDQkVHlwZSIsMTQ5MiksRCgxNDkzLDEsdGksdW5lKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiB1eCgpLGwoUShsKHQsNDApLChRaSgpLFBkZSkpLDE3KS5hIT0wfSxJKHBULCJOb2RlT3JkZXJlci9sYW1iZGEkNSRUeXBlIiwxNDkzKSxEKDE0OTUsMSxVbyxzaWUpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMjEpLGpUdH0saC5LZj1mdW5jdGlvbih0LG4pe0lfbih0aGlzLGwodCwxMjEpLG4pfSxoLmI9MDt2YXIgalR0O0koIm9yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLnAzcGxhY2UiLCJOb2RlUGxhY2VyIiwxNDk1KSxEKDE0OTYsMSxVbyxpaWUpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMjEpLCRUdH0saC5LZj1mdW5jdGlvbih0LG4pe2RfbihsKHQsMTIxKSxuKX07dmFyICRUdCxMT249SSh2aCwiRWRnZVJvdXRlciIsMTQ5Nik7RCgxNDk4LDEsaWksc25lKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHJ1KGwodCwxNykuYSxsKG4sMTcpLmEpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodmgsIkVkZ2VSb3V0ZXIvMG1ldGhvZHJlZiRjb21wYXJlJFR5cGUiLDE0OTgpLEQoMTUwMywxLHt9LFl0ZSksaC5ZZT1mdW5jdGlvbih0KXtyZXR1cm4gemUoR2UodCkpfSxJKHZoLCJFZGdlUm91dGVyLzFtZXRob2RyZWYkZG91YmxlVmFsdWUkVHlwZSIsMTUwMyksRCgxNTA1LDEsaWksYSQpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWWkoemUoR2UodCkpLHplKEdlKG4pKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh2aCwiRWRnZVJvdXRlci8ybWV0aG9kcmVmJGNvbXBhcmUkVHlwZSIsMTUwNSksRCgxNTA3LDEsaWksWHRlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFlpKHplKEdlKHQpKSx6ZShHZShuKSkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodmgsIkVkZ2VSb3V0ZXIvM21ldGhvZHJlZiRjb21wYXJlJFR5cGUiLDE1MDcpLEQoMTUwOSwxLHt9LHMkKSxoLlllPWZ1bmN0aW9uKHQpe3JldHVybiB6ZShHZSh0KSl9LEkodmgsIkVkZ2VSb3V0ZXIvNG1ldGhvZHJlZiRkb3VibGVWYWx1ZSRUeXBlIiwxNTA5KSxEKDE1MTEsMSxpaSxRdGUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWWkoemUoR2UodCkpLHplKEdlKG4pKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh2aCwiRWRnZVJvdXRlci81bWV0aG9kcmVmJGNvbXBhcmUkVHlwZSIsMTUxMSksRCgxNTEzLDEsaWksYkkpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWWkoemUoR2UodCkpLHplKEdlKG4pKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh2aCwiRWRnZVJvdXRlci82bWV0aG9kcmVmJGNvbXBhcmUkVHlwZSIsMTUxMyksRCgxNDk3LDEse30sSnRlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiB0cCgpLGwoUShsKHQsNDApLChIYygpLCRkKSksMTcpfSxJKHZoLCJFZGdlUm91dGVyL2xhbWJkYSQwJFR5cGUiLDE0OTcpLEQoMTUwOCwxLHt9LFp0ZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gWmhuKGwodCw0MCkpfSxJKHZoLCJFZGdlUm91dGVyL2xhbWJkYSQxMSRUeXBlIiwxNTA4KSxEKDE1MTAsMSx7fSxudHQpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIF9kbih0aGlzLmIsdGhpcy5hLGwodCw0MCkpfSxoLmE9MCxoLmI9MCxJKHZoLCJFZGdlUm91dGVyL2xhbWJkYSQxMyRUeXBlIiwxNTEwKSxEKDE1MTIsMSx7fSxydHQpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGVmbih0aGlzLmIsdGhpcy5hLGwodCw0MCkpfSxoLmE9MCxoLmI9MCxJKHZoLCJFZGdlUm91dGVyL2xhbWJkYSQxNSRUeXBlIiwxNTEyKSxEKDE1MTQsMSxpaSxlbmUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZjZuKGwodCw2NSksbChuLDY1KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh2aCwiRWRnZVJvdXRlci9sYW1iZGEkMTckVHlwZSIsMTUxNCksRCgxNTE1LDEsaWksdG5lKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGQ2bihsKHQsNjUpLGwobiw2NSkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodmgsIkVkZ2VSb3V0ZXIvbGFtYmRhJDE4JFR5cGUiLDE1MTUpLEQoMTUxNiwxLGlpLG5uZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBwNm4obCh0LDY1KSxsKG4sNjUpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHZoLCJFZGdlUm91dGVyL2xhbWJkYSQxOSRUeXBlIiwxNTE2KSxEKDE0OTksMSx0aSx3WGUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGIybih0aGlzLmEsbCh0LDQwKSl9LGguYT0wLEkodmgsIkVkZ2VSb3V0ZXIvbGFtYmRhJDIkVHlwZSIsMTQ5OSksRCgxNTE3LDEsaWksbyQpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZzZuKGwodCw2NSksbChuLDY1KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh2aCwiRWRnZVJvdXRlci9sYW1iZGEkMjAkVHlwZSIsMTUxNyksRCgxNTAwLDEsaWkscm5lKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGRkbihsKHQsNDApLGwobiw0MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodmgsIkVkZ2VSb3V0ZXIvbGFtYmRhJDMkVHlwZSIsMTUwMCksRCgxNTAxLDEsaWksaW5lKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGdkbihsKHQsNDApLGwobiw0MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodmgsIkVkZ2VSb3V0ZXIvbGFtYmRhJDQkVHlwZSIsMTUwMSksRCgxNTAyLDEse30sbG5lKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiB0Zm4obCh0LDQwKSl9LEkodmgsIkVkZ2VSb3V0ZXIvbGFtYmRhJDUkVHlwZSIsMTUwMiksRCgxNTA0LDEse30saXR0KSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBBZG4odGhpcy5iLHRoaXMuYSxsKHQsNDApKX0saC5hPTAsaC5iPTAsSSh2aCwiRWRnZVJvdXRlci9sYW1iZGEkNyRUeXBlIiwxNTA0KSxEKDE1MDYsMSx7fSxzdHQpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5mbih0aGlzLmIsdGhpcy5hLGwodCw0MCkpfSxoLmE9MCxoLmI9MCxJKHZoLCJFZGdlUm91dGVyL2xhbWJkYSQ5JFR5cGUiLDE1MDYpLEQoNjc1LDEsezY3NToxfSxGZHQpLGguZT0wLGguZj0hMSxoLmc9ITEsSSh2aCwiTXVsdGlMZXZlbEVkZ2VOb2RlTm9kZUdhcCIsNjc1KSxEKDE5NDMsMSxpaSxobmUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gUzJuKGwodCwyNDApLGwobiwyNDApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHZoLCJNdWx0aUxldmVsRWRnZU5vZGVOb2RlR2FwL2xhbWJkYSQwJFR5cGUiLDE5NDMpLEQoMTk0NCwxLGlpLGZuZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBfMm4obCh0LDI0MCksbChuLDI0MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodmgsIk11bHRpTGV2ZWxFZGdlTm9kZU5vZGVHYXAvbGFtYmRhJDEkVHlwZSIsMTk0NCk7dmFyIFk2O0QoNTAxLDIyLHszOjEsMzQ6MSwyMjoxLDUwMToxLDE4ODoxLDE5NjoxfSxVM2UpLGguZGc9ZnVuY3Rpb24oKXtyZXR1cm4gRTF0KHRoaXMpfSxoLnFnPWZ1bmN0aW9uKCl7cmV0dXJuIEUxdCh0aGlzKX07dmFyICRXLFg2LEVJZT1Gcih3Q2UsIlJhZGlhbExheW91dFBoYXNlcyIsNTAxLEhyLFdwbixkMW4pLHpUdDtEKDExMTMsMjA1LHR2LGZaZSksaC5yZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGcsdztpZihyPWNidCh0aGlzLHQpLG4uVWcoIlJhZGlhbCBsYXlvdXQiLHIuYy5sZW5ndGgpLFJ0KEJ0KGF0KHQsKFNiKCksTkllKSkpKXx8S08oKGE9bmV3IFl2KChhdygpLG5ldyBKdih0KSkpLGEpKSx3PW14bih0KSxIaSh0LChINSgpLFk2KSx3KSwhdyl0aHJvdyB1ZShuZXcgWW4oIlRoZSBnaXZlbiBncmFwaCBpcyBub3QgYSB0cmVlISIpKTtmb3Iobz16ZShHZShhdCh0LEhXKSkpLG89PTAmJihvPXFwdCh0KSksSGkodCxIVyxvKSxnPW5ldyBHKGNidCh0aGlzLHQpKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksNDcpLGYuS2YodCxuLmVoKDEpKTtuLlZnKCl9LEkod0NlLCJSYWRpYWxMYXlvdXRQcm92aWRlciIsMTExMyksRCg1NTYsMSxpaSxXeiksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBaU24odGhpcy5hLHRoaXMuYixsKHQsMjcpLGwobiwyNykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LGguYT0wLGguYj0wLEkod0NlLCJSYWRpYWxVdGlsL2xhbWJkYSQwJFR5cGUiLDU1NiksRCgxMzk1LDEsdHMsZG5lKSxoLktmPWZ1bmN0aW9uKHQsbil7VkRuKGwodCwyNyksbil9LEkoa0NlLCJDYWxjdWxhdGVHcmFwaFNpemUiLDEzOTUpLEQoMTM5NiwxLHRzLGduZSksaC5LZj1mdW5jdGlvbih0LG4pe2ZMbihsKHQsMjcpKX0sSShrQ2UsIkVkZ2VBbmdsZUNhbGN1bGF0b3IiLDEzOTYpLEQoMzY4LDIyLHszOjEsMzQ6MSwyMjoxLDM2ODoxLDE5NjoxfSxkTyksaC5kZz1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IHluZTtjYXNlIDE6cmV0dXJuIG5ldyBwbmU7Y2FzZSAyOnJldHVybiBuZXcgeG5lO2Nhc2UgMzpyZXR1cm4gbmV3IGRuZTtjYXNlIDQ6cmV0dXJuIG5ldyBnbmU7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWW4oRmhlKyh0aGlzLmYhPW51bGw/dGhpcy5mOiIiK3RoaXMuZykpKX19O3ZhciBHZGUsS2RlLFdkZSxZZGUsWGRlLHFUdD1GcihrQ2UsUmhlLDM2OCxIcixHbW4sZzFuKSxIVHQ7RCg2NTMsMSx7fSksaC5lPTEsaC5nPTAsSShrZmUsIkFic3RyYWN0UmFkaXVzRXh0ZW5zaW9uQ29tcGFjdGlvbiIsNjUzKSxEKDE4MzQsNjUzLHt9LHVydCksaC5DZz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7Zm9yKHRoaXMuYz1sKGF0KHQsKEg1KCksWTYpKSwyNyksTGUodGhpcyx0aGlzLmMpLHRoaXMuZD1zdWUobChhdCh0LChTYigpLEZCKSksMzAwKSksRT1sKGF0KHQsSmRlKSwxNyksRSYmbWUodGhpcyxFLmEpLHc9R2UoYXQodCwocGkoKSxFdikpKSxfZSh0aGlzLChucih3KSx3KSksQz1IeSh0aGlzLmMpLHRoaXMuZCYmdGhpcy5kLkdnKEMpLG1fbih0aGlzLEMpLGc9bmV3IElsKGhlKGxlKEFpLDEpLHd5dCwyNywwLFt0aGlzLmNdKSkscj0wO3I8MjtyKyspZm9yKG49MDtuPEMuYy5sZW5ndGg7bisrKW89bmV3IElsKGhlKGxlKEFpLDEpLHd5dCwyNywwLFsoU24obixDLmMubGVuZ3RoKSxsKEMuY1tuXSwyNykpXSkpLGY9bjxDLmMubGVuZ3RoLTE/KFNuKG4rMSxDLmMubGVuZ3RoKSxsKEMuY1tuKzFdLDI3KSk6KFNuKDAsQy5jLmxlbmd0aCksbChDLmNbMF0sMjcpKSxhPW49PTA/bChqdChDLEMuYy5sZW5ndGgtMSksMjcpOihTbihuLTEsQy5jLmxlbmd0aCksbChDLmNbbi0xXSwyNykpLGpndCh0aGlzLChTbihuLEMuYy5sZW5ndGgpLGwoQy5jW25dLDI3KSxnKSxhLGYsbyl9LEkoa2ZlLCJBbm51bHVzV2VkZ2VDb21wYWN0aW9uIiwxODM0KSxEKDEzOTMsMSx0cyxwbmUpLGguS2Y9ZnVuY3Rpb24odCxuKXtsM24obCh0LDI3KSxuKX0sSShrZmUsIkdlbmVyYWxDb21wYWN0b3IiLDEzOTMpLEQoMTgzMyw2NTMse30sYm5lKSxoLkNnPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvO3I9bChhdCh0LChINSgpLFk2KSksMjcpLHRoaXMuZj1yLHRoaXMuYj1zdWUobChhdCh0LChTYigpLEZCKSksMzAwKSksbz1sKGF0KHQsSmRlKSwxNyksbyYmbWUodGhpcyxvLmEpLGE9R2UoYXQodCwocGkoKSxFdikpKSxfZSh0aGlzLChucihhKSxhKSksbj1IeShyKSx0aGlzLmImJnRoaXMuYi5HZyhuKSxtcHQodGhpcyxuKX0saC5hPTAsSShrZmUsIlJhZGlhbENvbXBhY3Rpb24iLDE4MzMpLEQoMTg0MiwxLHt9LG1uZSksaC5EZz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGc7Zm9yKHRoaXMuYT10LG49MCxnPUh5KHQpLGE9MCxmPW5ldyBHKGcpO2YuYTxmLmMuYy5sZW5ndGg7KWZvcihvPWwocmUoZiksMjcpLCsrYSxyPWE7cjxnLmMubGVuZ3RoO3IrKylPQW4odGhpcyxvLChTbihyLGcuYy5sZW5ndGgpLGwoZy5jW3JdLDI3KSkpJiYobis9MSk7cmV0dXJuIG59LEkoRUNlLCJDcm9zc2luZ01pbmltaXphdGlvblBvc2l0aW9uIiwxODQyKSxEKDE4NDAsMSx7fSx2bmUpLGguRGc9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFY7Zm9yKGE9MCxyPW5ldyBocihkcihjcCh0KS5hLktjKCksbmV3IGopKTtqcihyKTspbj1sKHhyKHIpLDc0KSx3PWJjKGwoT2UoKCFuLmMmJihuLmM9bmV3IExuKF9yLG4sNSw4KSksbi5jKSwwKSw4NCkpLEM9dy5pK3cuZy8yLEw9dy5qK3cuZi8yLG89dC5pK3QuZy8yLGY9dC5qK3QuZi8yLEI9bmV3IHFhLEIuYT1DLW8sQi5iPUwtZixnPW5ldyBsdChCLmEsQi5iKSxSRShnLHQuZyx0LmYpLEIuYS09Zy5hLEIuYi09Zy5iLG89Qy1CLmEsZj1MLUIuYixFPW5ldyBsdChCLmEsQi5iKSxSRShFLHcuZyx3LmYpLEIuYS09RS5hLEIuYi09RS5iLEM9bytCLmEsTD1mK0IuYix6PUMtbyxWPUwtZixhKz1iLk1hdGguc3FydCh6KnorVipWKTtyZXR1cm4gYX0sSShFQ2UsIkVkZ2VMZW5ndGhPcHRpbWl6YXRpb24iLDE4NDApLEQoMTg0MSwxLHt9LHduZSksaC5EZz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihhPTAscj1uZXcgaHIoZHIoY3AodCkuYS5LYygpLG5ldyBqKSk7anIocik7KW49bCh4cihyKSw3NCksdz1iYyhsKE9lKCghbi5jJiYobi5jPW5ldyBMbihfcixuLDUsOCkpLG4uYyksMCksODQpKSxFPXcuaSt3LmcvMixDPXcuait3LmYvMixvPWwoYXQodywocGkoKSxuOSkpLDgpLGY9dC5pK28uYSt0LmcvMixnPXQuaitvLmIrdC5mLEw9RS1mLEI9Qy1nLGErPWIuTWF0aC5zcXJ0KEwqTCtCKkIpO3JldHVybiBhfSxJKEVDZSwiRWRnZUxlbmd0aFBvc2l0aW9uT3B0aW1pemF0aW9uIiwxODQxKSxEKDEzOTIsNjUzLHRzLHluZSksaC5LZj1mdW5jdGlvbih0LG4pe2Jrbih0aGlzLGwodCwyNyksbil9LEkoIm9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLmludGVybWVkaWF0ZS5vdmVybGFwcyIsIlJhZGl1c0V4dGVuc2lvbk92ZXJsYXBSZW1vdmFsIiwxMzkyKSxEKDEzOTQsMSx0cyx4bmUpLGguS2Y9ZnVuY3Rpb24odCxuKXtsZ24obCh0LDI3KSxuKX0sSSgib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwuaW50ZXJtZWRpYXRlLnJvdGF0aW9uIiwiR2VuZXJhbFJvdGF0b3IiLDEzOTQpLEQoNDM0LDIyLHszOjEsMzQ6MSwyMjoxLDQzNDoxfSxHM2UpO3ZhciBUSWUsUWRlLENJZT1Gcih3TCwiQW5udWx1c1dlZGdlQ3JpdGVyaWEiLDQzNCxIcixuMm4sYjFuKSxWVHQ7RCgzOTMsMjIsezM6MSwzNDoxLDIyOjEsMzkzOjF9LE5zZSk7dmFyIHpXLFNJZSxfSWUsQUllPUZyKHdMLFRFZSwzOTMsSHIsYWJuLHAxbiksVVR0O0QoODYzLDEsUGYsQ2YpLGguaGY9ZnVuY3Rpb24odCl7c24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFRDZSksIiIpLCJDZW50ZXIgT24gUm9vdCIpLCJDZW50ZXJzIHRoZSBsYXlvdXQgb24gdGhlIHJvb3Qgb2YgdGhlIHRyZWUgaS5lLiBzbyB0aGF0IHRoZSBjZW50cmFsIG5vZGUgaXMgYWxzbyB0aGUgY2VudGVyIG5vZGUgb2YgdGhlIGZpbmFsIGxheW91dC4gVGhpcyBpbnRyb2R1Y2VzIGFkZGl0aW9uYWwgd2hpdGVzcGFjZS4iKSwoSG4oKSwhMSkpLChnMigpLHlhKSksTnMpLHVuKChyMSgpLFBuKSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LENDZSksIiIpLCJPcmRlciBJRCIpLCJUaGUgaWQgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGFuIG9yZGVyIGZvciBub2RlcyBvZiBvbmUgcmFkaXVzLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHNvcnQgdGhlbSBpbiB0aGUgbGF5ZXIgYWNjb3JkaW5nbHkuIikscHQoMCkpLFRjKSxybyksdW4oaGEpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxTQ2UpLCIiKSwiUmFkaXVzIiksIlRoZSByYWRpdXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgaW5pdGlhbCByYWRpdXMgZm9yIHRoZSByYWRpYWwgbGF5b3V0ZXIuIiksMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LE5HKSwiIiksIlJvdGF0ZSIpLCJUaGUgcm90YXRlIG9wdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgYSByb3RhdGlvbiBvZiB0aGUgbGF5b3V0IHNob3VsZCBiZSBwZXJmb3JtZWQuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxUZmUpLCIiKSx5eXQpLCJXaXRoIHRoZSBjb21wYWN0ZXIgb3B0aW9uIGl0IGNhbiBiZSBkZXRlcm1pbmVkIGhvdyBjb21wYWN0aW9uIG9uIHRoZSBncmFwaCBpcyBkb25lLiBJdCBjYW4gYmUgY2hvc2VuIGJldHdlZW4gbm9uZSwgdGhlIHJhZGlhbCBjb21wYWN0aW9uIG9yIHRoZSBjb21wYWN0aW9uIG9mIHdlZGdlcyBzZXBhcmF0ZWx5LiIpLExJZSkscHMpLEFJZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxDZmUpLCIiKSwiQ29tcGFjdGlvbiBTdGVwIFNpemUiKSwiRGV0ZXJtaW5lIHRoZSBzaXplIG9mIHN0ZXBzIHdpdGggd2hpY2ggdGhlIGNvbXBhY3Rpb24gaXMgZG9uZS4gU3RlcCBzaXplIDEgY29ycmVsYXRlcyB0byBhIGNvbXBhY3Rpb24gb2YgMSBwaXhlbCBwZXIgSXRlcmF0aW9uLiIpLHB0KDEpKSxUYykscm8pLHVuKFBuKSkpKSxRcyh0LENmZSxUZmUsbnVsbCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LF9DZSksIiIpLCJTb3J0ZXIiKSwiU29ydCB0aGUgbm9kZXMgcGVyIHJhZGl1cyBhY2NvcmRpbmcgdG8gdGhlIHNvcnRpbmcgYWxnb3JpdGhtLiBUaGUgc3RyYXRlZ2llcyBhcmUgbm9uZSwgYnkgdGhlIGdpdmVuIG9yZGVyIGlkLCBvciBzb3J0aW5nIHRoZW0gYnkgcG9sYXIgY29vcmRpbmF0ZXMuIiksREllKSxwcyksR0llKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEFDZSksIiIpLCJBbm51bHVzIFdlZGdlIENyaXRlcmlhIiksIkRldGVybWluZSBob3cgdGhlIHdlZGdlIGZvciB0aGUgbm9kZSBwbGFjZW1lbnQgaXMgY2FsY3VsYXRlZC4gSXQgY2FuIGJlIGNob3NlbiBiZXR3ZWVuIHdlZGdlIGRldGVybWluYXRpb24gYnkgdGhlIG51bWJlciBvZiBsZWF2ZXMgb3IgYnkgdGhlIG1heGltdW0gc3VtIG9mIGRpYWdvbmFscy4iKSxJSWUpLHBzKSxDSWUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsTENlKSwiIiksIlRyYW5zbGF0aW9uIE9wdGltaXphdGlvbiIpLCJGaW5kIHRoZSBvcHRpbWFsIHRyYW5zbGF0aW9uIG9mIHRoZSBub2RlcyBvZiB0aGUgZmlyc3QgcmFkaWkgYWNjb3JkaW5nIHRvIHRoaXMgY3JpdGVyaWEuIEZvciBleGFtcGxlIGVkZ2UgY3Jvc3NpbmdzIGNhbiBiZSBtaW5pbWl6ZWQuIiksTUllKSxwcyksSEllKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFNmZSksRENlKSwiVGFyZ2V0IEFuZ2xlIiksIlRoZSBhbmdsZSBpbiByYWRpYW5zIHRoYXQgdGhlIGxheW91dCBzaG91bGQgYmUgcm90YXRlZCB0byBhZnRlciBsYXlvdXQuIiksMCksZm8pLHRhKSx1bihQbikpKSksUXModCxTZmUsTkcsbnVsbCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LF9mZSksRENlKSwiQWRkaXRpb25hbCBXZWRnZSBTcGFjZSIpLCJJZiBzZXQgdG8gdHJ1ZSwgbW9kaWZpZXMgdGhlIHRhcmdldCBhbmdsZSBieSByb3RhdGluZyBmdXJ0aGVyIHN1Y2ggdGhhdCBzcGFjZSBpcyBsZWZ0IGZvciBhbiBlZGdlIHRvIHBhc3MgaW4gYmV0d2VlbiB0aGUgbm9kZXMuIFRoaXMgb3B0aW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0b3AtZG93biBsYXlvdXQuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLFFzKHQsX2ZlLE5HLG51bGwpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxNQ2UpLERDZSksIk91dGdvaW5nIEVkZ2UgQW5nbGVzIiksIkNhbGN1bGF0ZSB0aGUgcmVxdWlyZWQgYW5nbGUgb2YgY29ubmVjdGVkIG5vZGVzIHRvIGxlYXZlIHNwYWNlIGZvciBhbiBpbmNvbWluZyBlZGdlLiBUaGlzIG9wdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdG9wLWRvd24gbGF5b3V0LiIpLCExKSx5YSksTnMpLHVuKFBuKSkpKSxRdnQoKG5ldyBvaWUsdCkpfTt2YXIgR1R0LEtUdCxXVHQsTEllLFlUdCxNSWUsWFR0LFFUdCxKVHQsWlR0LGVDdCx0Q3QsbkN0LERJZSxyQ3QsSUllO0kod0wsIlJhZGlhbE1ldGFEYXRhUHJvdmlkZXIiLDg2MyksRCgxMDA4LDEsUGYsb2llKSxoLmhmPWZ1bmN0aW9uKHQpe1F2dCh0KX07dmFyIE9JZSxKZGUsWmRlLGlDdCxzQ3QsYUN0LG9DdCxOSWUsUEllLHFXLGNDdCx1Q3QsSFcsQkllLEZJZSxSSWUsZWdlLEZCLGxDdCxqSWU7SSh3TCwiUmFkaWFsT3B0aW9ucyIsMTAwOCksRCgxMDA5LDEse30sZnUpLGguc2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgZlplLHR9LGgudGY9ZnVuY3Rpb24odCl7fSxJKHdMLCJSYWRpYWxPcHRpb25zL1JhZGlhbEZhY3RvcnkiLDEwMDkpLEQoMzU0LDIyLHszOjEsMzQ6MSwyMjoxLDM1NDoxfSx5cSk7dmFyICRJZSx6SWUscUllLHRnZSxISWU9RnIod0wsIlJhZGlhbFRyYW5zbGF0aW9uU3RyYXRlZ3kiLDM1NCxIcixvbW4sbTFuKSxoQ3Q7RCgzMDAsMjIsezM6MSwzNDoxLDIyOjEsMzAwOjF9LFBzZSk7dmFyIFZJZSxuZ2UsVUllLEdJZT1Gcih3TCwiU29ydGluZ1N0cmF0ZWd5IiwzMDAsSHIsb2JuLHYxbiksZkN0O0QoMTQ3NiwxLFVvLGtuZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDI3KSxudWxsfSxoLktmPWZ1bmN0aW9uKHQsbil7amtuKHRoaXMsbCh0LDI3KSxuKX0saC5jPTAsSSgib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwucDFwb3NpdGlvbiIsIkVhZGVzUmFkaWFsIiwxNDc2KSxEKDE4MzgsMSx7fSxTUyksaC5FZz1mdW5jdGlvbih0KXtyZXR1cm4gd2R0KHQpfSxJKHh5dCwiQW5udWx1c1dlZGdlQnlMZWFmcyIsMTgzOCksRCgxODM5LDEse30sUmMpLGguRWc9ZnVuY3Rpb24odCl7cmV0dXJuIERndCh0aGlzLHQpfSxJKHh5dCwiQW5udWx1c1dlZGdlQnlOb2RlU3BhY2UiLDE4MzkpLEQoMTQ3NywxLFVvLFB1KSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMjcpLG51bGx9LGguS2Y9ZnVuY3Rpb24odCxuKXtYNG4odGhpcyxsKHQsMjcpLG4pfSxJKCJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5wMnJvdXRpbmciLCJTdHJhaWdodExpbmVFZGdlUm91dGVyIiwxNDc3KSxEKDgyNiwxLHt9LFZ3ZSksaC5GZz1mdW5jdGlvbih0KXt9LGguR2c9ZnVuY3Rpb24odCl7QVFlKHRoaXMsdCl9LEkoSUNlLCJJRFNvcnRlciIsODI2KSxEKDE4MzcsMSxpaSxocyksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBoM24obCh0LDI3KSxsKG4sMjcpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKElDZSwiSURTb3J0ZXIvbGFtYmRhJDAkVHlwZSIsMTgzNyksRCgxODM2LDEse30sVGZ0KSxoLkZnPWZ1bmN0aW9uKHQpe2JjdCh0aGlzLHQpfSxoLkdnPWZ1bmN0aW9uKHQpe3ZhciBuO3QuZGMoKXx8KHRoaXMuZXx8KG49dXN0KGwodC5YYigwKSwyNykpLGJjdCh0aGlzLG4pKSxBUWUodGhpcy5lLHQpKX0sSShJQ2UsIlBvbGFyQ29vcmRpbmF0ZVNvcnRlciIsMTgzNiksRCg0NDUsMjIsezM6MSwzNDoxLDIyOjEsNDQ1OjF9LEJzZSk7dmFyIFJCLFZXLHJnZSxLSWU9RnIoQ3l0LCJSZWN0UGFja2luZ0xheW91dFBoYXNlcyIsNDQ1LEhyLGlibix3MW4pLGRDdDtEKDExMTgsMjA1LHR2LGdaZSksaC5yZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuO2lmKG4uVWcoIlJlY3RhbmdsZSBQYWNraW5nIiwxKSxCPWwoYXQodCwoejEoKSx2TSkpLDEwNyksRT1SdChCdChhdCh0LFBDdCkpKSxMPXplKEdlKGF0KHQsd00pKSksYW49UnQoQnQoYXQodCxzT2UpKSksJGU9KCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpLFJ0KEJ0KGF0KHQsbGdlKSkpfHxLTygobz1uZXcgWXYoKGF3KCksbmV3IEp2KHQpKSksbykpLGNuPSExLGFuJiYkZS5pPj0zKWZvcihvdD1sKE9lKCRlLDApLDI3KSxTdD1sKE9lKCRlLDEpLDI3KSxmPTA7ZisyPCRlLmk7KWlmKFplPW90LG90PVN0LFN0PWwoT2UoJGUsZisyKSwyNyksWmUuZj49b3QuZitTdC5mK0x8fFN0LmY+PVplLmYrb3QuZitMKXtjbj0hMDticmVha31lbHNlKytmO2Vsc2UgY249ITA7aWYoIWNuKXtmb3Ioej0kZS5pLHc9bmV3IG9yKCRlKTt3LmUhPXcuaS5nYygpOylnPWwoZ3IodyksMjcpLEhpKGcsKHBpKCksWEIpLHB0KHopKSwtLXo7Um10KHQsbmV3IEw4KSxuLlZnKCk7cmV0dXJufWZvcihyPShxTyh0aGlzLmEpLFgwKHRoaXMuYSwoV1YoKSxSQiksbChhdCh0LHVPZSksMTg4KSksWDAodGhpcy5hLFZXLGwoYXQodCxyT2UpLDE4OCkpLFgwKHRoaXMuYSxyZ2UsbChhdCh0LGFPZSksMTg4KSksdXllKHRoaXMuYSwoQm49bmV3IFhzLGZpKEJuLFJCLChzVSgpLGFnZSkpLGZpKEJuLFZXLHNnZSksUnQoQnQoYXQodCx0T2UpKSkmJmZpKEJuLFJCLGlnZSksQm4pKSxiUCh0aGlzLmEsdCkpLEM9MS9yLmMubGVuZ3RoLEo9bmV3IEcocik7Si5hPEouYy5jLmxlbmd0aDspe2lmKFY9bChyZShKKSw0Nyksbi4kZygpKXJldHVybjtWLktmKHQsbi5laChDKSl9Zm9yKGZlPTAsdGU9MCxNZT1uZXcgb3IoJGUpO01lLmUhPU1lLmkuZ2MoKTspVGU9bChncihNZSksMjcpLGZlPWIuTWF0aC5tYXgoZmUsVGUuaStUZS5nKSx0ZT1iLk1hdGgubWF4KHRlLFRlLmorVGUuZik7YzllKHQsbmV3IGx0KHplKEdlKGF0KHQsKHVnKCksWngpKSkpLHplKEdlKGF0KHQsWlQpKSkpLG5ldyBsdChmZSx0ZSkpLE4zbigkZSxCKSxFfHxHdyh0LHplKEdlKGF0KHQsWngpKSkrKEIuYitCLmMpLHplKEdlKGF0KHQsWlQpKSkrKEIuZCtCLmEpLCExLCEwKSxSdChCdChhdCh0LGxnZSkpKXx8S08oKGE9bmV3IFl2KChhdygpLG5ldyBKdih0KSkpLGEpKSxuLlZnKCl9LEkoQ3l0LCJSZWN0UGFja2luZ0xheW91dFByb3ZpZGVyIiwxMTE4KSxEKDE1MTgsMSx0cyxtSSksaC5LZj1mdW5jdGlvbih0LG4pe2RMbihsKHQsMjcpLG4pfSxJKFBHLCJJbnRlcmFjdGl2ZU5vZGVSZW9yZGVyZXIiLDE1MTgpLEQoMTUxOSwxLGlpLEVuZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB5eW4obCh0LDI3KSxsKG4sMjcpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKFBHLCJJbnRlcmFjdGl2ZU5vZGVSZW9yZGVyZXIvbGFtYmRhJDAkVHlwZSIsMTUxOSksRCg0NTYsMjIsezM6MSwzNDoxLDIyOjEsNDU2OjEsMTk2OjF9LEZzZSksaC5kZz1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IG1JO2Nhc2UgMTpyZXR1cm4gbmV3IENuZTtjYXNlIDI6cmV0dXJuIG5ldyBUbmV9cmV0dXJuIG51bGx9O3ZhciBpZ2Usc2dlLGFnZSxnQ3Q9RnIoUEcsUmhlLDQ1NixIcixzYm4seTFuKSxwQ3Q7RCgxNTIxLDEsdHMsVG5lKSxoLktmPWZ1bmN0aW9uKHQsbil7TjVuKGwodCwyNyksbil9LEkoUEcsIk1pblNpemVQb3N0UHJvY2Vzc29yIiwxNTIxKSxEKDE1MjAsMSx0cyxDbmUpLGguS2Y9ZnVuY3Rpb24odCxuKXtJeW4obCh0LDI3KSxuKX0sSShQRywiTWluU2l6ZVByZVByb2Nlc3NvciIsMTUyMCk7dmFyIGJNLFpULFp4LGJDdCxtQ3QsVVcsb2dlLGNnZSxtTSxHVyxUNDtEKDM5NCwyMix7MzoxLDM0OjEsMjI6MSwzOTQ6MX0sUnNlKTt2YXIgV0llLFlJZSx1Z2UsWEllPUZyKEFmZSwiT3B0aW1pemF0aW9uR29hbCIsMzk0LEhyLHJibix4MW4pLHZDdDtEKDg2NywxLFBmLGdrKSxoLmhmPWZ1bmN0aW9uKHQpe3NuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxPQ2UpLCIiKSwiVHJ5IGJveCBsYXlvdXQgZmlyc3QiKSwiV2hldGhlciBvbmUgc2hvdWxkIGNoZWNrIHdoZXRoZXIgdGhlIHJlZ2lvbnMgYXJlIHN0YWNrYWJsZSB0byBzZWUgd2hldGhlciBib3ggbGF5b3V0IHdvdWxkIGRvIHRoZSBqb2IuIEZvciBleGFtcGxlLCBub2RlcyB3aXRoIHRoZSBzYW1lIGhlaWdodCBhcmUgbm90IHN0YWNrYWJsZSBpbnNpZGUgYSByb3cuIFRoZXJlZm9yZSwgYm94IGxheW91dCB3aWxsIHBlcmZvcm0gYmV0dGVyIGFuZCBmYXN0ZXIuIiksKEhuKCksITEpKSwoZzIoKSx5YSkpLE5zKSx1bigocjEoKSxQbikpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxOQ2UpLCIiKSwiQ3VycmVudCBwb3NpdGlvbiBvZiBhIG5vZGUgaW4gdGhlIG9yZGVyIG9mIG5vZGVzIiksIlRoZSByZWN0YW5nbGVzIGFyZSBvcmRlcmVkLiBOb3JtYWxseSBhY2NvcmRpbmcgdG8gdGhlaXIgZGVmaW5pdGlvbiB0aGUgdGhlIG1vZGVsLiBUaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgYSBub2RlLiIpLHB0KC0xKSksVGMpLHJvKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFBDZSksIiIpLCJEZXNpcmVkIGluZGV4IG9mIG5vZGUiKSwiVGhlIHJlY3RhbmdsZXMgYXJlIG9yZGVyZWQuIE5vcm1hbGx5IGFjY29yZGluZyB0byB0aGVpciBkZWZpbml0aW9uIHRoZSB0aGUgbW9kZWwuIFRoaXMgb3B0aW9uIGFsbG93cyB0byBzcGVjaWZ5IGEgZGVzaXJlZCBwb3NpdGlvbiB0aGF0IGhhcyBwcmVmZXJlbmNlIG92ZXIgdGhlIG9yaWdpbmFsIHBvc2l0aW9uLiIpLHB0KC0xKSksVGMpLHJvKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEJDZSksIiIpLCJJbiBuZXcgUm93IiksIklmIHNldCB0byB0cnVlIHRoaXMgbm9kZSBiZWdpbnMgaW4gYSBuZXcgcm93LiBDb25zZXF1ZW50bHkgdGhpcyBub2RlIGNhbm5vdCBiZSBtb3ZlZCBpbiBhIHByZXZpb3VzIGxheWVyIGR1cmluZyBjb21wYWN0aW9uLiBXaWR0aCBhcHByb3hpbWF0aW9uIGRvZXMgZG9lcyBub3QgdGFrZSB0aGlzIGludG8gYWNjb3VudC4iKSwhMSkseWEpLE5zKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEZDZSksTGZlKSwiV2lkdGggQXBwcm94aW1hdGlvbiBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3IgZmluZGluZyBhbiBpbml0aWFsIHdpZHRoIG9mIHRoZSBkcmF3aW5nLiIpLFpJZSkscHMpLGZPZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxSQ2UpLExmZSksIlRhcmdldCBXaWR0aCIpLCJPcHRpb24gdG8gcGxhY2UgdGhlIHJlY3RhbmdsZXMgaW4gdGhlIGdpdmVuIHRhcmdldCB3aWR0aCBpbnN0ZWFkIG9mIGFwcHJveGltYXRpbmcgdGhlIHdpZHRoIHVzaW5nIHRoZSBkZXNpcmVkIGFzcGVjdCByYXRpby4gVGhlIHBhZGRpbmcgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMuIE1lYW5pbmcgYSBkcmF3aW5nIHdpbGwgaGF2ZSB3aWR0aCBvZiB0YXJnZXR3aWR0aCArIGhvcml6b250YWwgcGFkZGluZy4iKSwtMSksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGpDZSksTGZlKSwiT3B0aW1pemF0aW9uIEdvYWwiKSwiT3B0aW1pemF0aW9uIGdvYWwgZm9yIGFwcHJveGltYXRpb24gb2YgdGhlIGJvdW5kaW5nIGJveCBnaXZlbiBieSB0aGUgZmlyc3QgaXRlcmF0aW9uLiBEZXRlcm1pbmVzIHdoZXRoZXIgbGF5b3V0IGlzIHNvcnRlZCBieSB0aGUgbWF4aW11bSBzY2FsaW5nLCBhc3BlY3QgcmF0aW8sIG9yIGFyZWEuIERlcGVuZGluZyBvbiB0aGUgc3RyYXRlZ3kgdGhlIGFzcGVjdCByYXRpbyBtaWdodCBiZSBuZWFybHkgaWdub3JlZC4iKSxKSWUpLHBzKSxYSWUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsJENlKSxMZmUpLCJTaGlmdCBMYXN0IFBsYWNlZC4iKSwiV2hlbiBwbGFjaW5nIGEgcmVjdGFuZ2xlIGJlaGluZCBvciBiZWxvdyB0aGUgbGFzdCBwbGFjZWQgcmVjdGFuZ2xlIGluIHRoZSBmaXJzdCBpdGVyYXRpb24sIGl0IGlzIHNvbWV0aW1lcyBwb3NzaWJsZSB0byBzaGlmdCB0aGUgcmVjdGFuZ2xlIGZ1cnRoZXIgdG8gdGhlIGxlZnQgb3IgcmlnaHQsIHJlc3VsdGluZyBpbiBsZXNzIHdoaXRlc3BhY2UuIFRydWUgKGRlZmF1bHQpIGVuYWJsZXMgdGhlIHNoaWZ0IGFuZCBmYWxzZSBkaXNhYmxlcyBpdC4gRGlzYWJsaW5nIHRoZSBzaGlmdCBwcm9kdWNlcyBhIGdyZWF0ZXIgYXBwcm94aW1hdGVkIGFyZWEgYnkgdGhlIGZpcnN0IGl0ZXJhdGlvbiBhbmQgYSBsYXlvdXQsIHdoZW4gdXNpbmcgT05MWSB0aGUgZmlyc3QgaXRlcmF0aW9uIChkZWZhdWx0IG5vdCB0aGUgY2FzZSksIHdoZXJlIGl0IGlzIHNvbWV0aW1lcyBpbXBvc3NpYmxlIHRvIGltcGxlbWVudCBhIHNpemUgdHJhbnNmb3JtYXRpb24gb2YgcmVjdGFuZ2xlcyB0aGF0IHdpbGwgZmlsbCB0aGUgYm91bmRpbmcgYm94IGFuZCBlbGltaW5hdGUgZW1wdHkgc3BhY2VzLiIpLCEwKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsekNlKSwicGFja2luZyIpLFN5dCksIlN0cmF0ZWd5IGZvciBmaW5kaW5nIGFuIGluaXRpYWwgcGxhY2VtZW50IG9uIG5vZGVzLiIpLFFJZSkscHMpLHBPZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxxQ2UpLF95dCksIlJvdyBIZWlnaHQgUmVldmFsdWF0aW9uIiksIkR1cmluZyB0aGUgY29tcGFjdGlvbiBzdGVwIHRoZSBoZWlnaHQgb2YgYSByb3cgaXMgbm9ybWFsbHkgbm90IGNoYW5nZWQuIElmIHRoaXMgb3B0aW9ucyBpcyBzZXQsIHRoZSBibG9ja3Mgb2Ygb3RoZXIgcm93cyBtaWdodCBiZSBhZGRlZCBpZiB0aGV5IGV4Y2VlZCB0aGUgcm93IGhlaWdodC4gSWYgdGhpcyBpcyB0aGUgY2FzZSB0aGUgd2hvbGUgcm93IGhhcyB0byBiZSBwYWNrZWQgYWdhaW4gdG8gYmUgb3B0aW1hbCByZWdhcmRpbmcgdGhlIG5ldyByb3cgaGVpZ2h0LiBUaGlzIG9wdGlvbiBzaG91bGQsIHRoZXJlZm9yZSwgYmUgdXNlZCB3aXRoIGNhcmUgc2luY2UgaXQgbWlnaHQgYmUgY29tcHV0YXRpb24gaGVhdnkuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxIQ2UpLF95dCksIkNvbXBhY3Rpb24gaXRlcmF0aW9ucyIpLCJEZWZpbmVzIHRoZSBudW1iZXIgb2YgY29tcGFjdGlvbiBpdGVyYXRpb25zLiBFLmcuIGlmIHNldCB0byAyIHRoZSB3aWR0aCBpcyBpbml0aWFsbHkgYXBwcm94aW1hdGVkLCB0aGVuIHRoZSBkcmF3aW5nIGlzIGNvbXBhY3RlZCBhbmQgYmFzZWQgb24gdGhlIHJlc3VsdGluZyBkcmF3aW5nIHRoZSB0YXJnZXQgd2lkdGggaXMgZGVjcmVhc2VkIG9yIGluY3JlYXNlZCBhbmQgYSBzZWNvbmQgY29tcGFjdGlvbiBzdGVwIGlzIGV4ZWN1dGVkIGFuZCB0aGUgcmVzdWx0IGNvbXBhcmVkIHRvIHRoZSBmaXJzdCBvbmUuIFRoZSBiZXN0IHJ1biBpcyB1c2VkIGJhc2VkIG9uIHRoZSBzY2FsZSBtZWFzdXJlLiIpLHB0KDEpKSxUYykscm8pLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsVkNlKSwid2hpdGVTcGFjZUVsaW1pbmF0aW9uIiksIldoaXRlIFNwYWNlIEFwcHJveGltYXRpb24gU3RyYXRlZ3kiKSwiU3RyYXRlZ3kgZm9yIGV4cGFuZGluZyBub2RlcyBzdWNoIHRoYXQgd2hpdGVzcGFjZSBpbiB0aGUgcGFyZW50IGlzIGVsaW1pbmF0ZWQuIikscHMpLHZPZSksdW4oUG4pKSkpLGd3dCgobmV3IFFTLHQpKX07dmFyIHdDdCx5Q3QseEN0LGtDdCxFQ3QsVEN0LFFJZSxDQ3QsU0N0LF9DdCxBQ3QsSkllLExDdCxaSWUsTUN0O0koQWZlLCJSZWN0UGFja2luZ01ldGFEYXRhUHJvdmlkZXIiLDg2NyksRCgxMDE2LDEsUGYsUVMpLGguaGY9ZnVuY3Rpb24odCl7Z3d0KHQpfTt2YXIgS1csREN0LGVPZSxqQix0T2UsSUN0LCRCLE9DdCxOQ3QsUEN0LEJDdCxGQ3QsbGdlLG5PZSxoZ2Usck9lLHZNLGlPZSxSQ3Qsd00sc09lLGFPZSxvT2UsY09lLHVPZSxmZ2U7SShBZmUsIlJlY3RQYWNraW5nT3B0aW9ucyIsMTAxNiksRCgxMDE3LDEse30sYzgpLGguc2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgZ1plLHR9LGgudGY9ZnVuY3Rpb24odCl7fSxJKEFmZSwiUmVjdFBhY2tpbmdPcHRpb25zL1JlY3RwYWNraW5nRmFjdG9yeSIsMTAxNyksRCgxNzA1LDEse30sd2l0KSxoLmE9MCxoLmM9ITEsSShiVCwiQXJlYUFwcHJveGltYXRpb24iLDE3MDUpO3ZhciBsT2U9a3MoYlQsIkJlc3RDYW5kaWRhdGVGaWx0ZXIiKTtEKDY3MywxLHs1MzU6MX0seW0pLGguSGc9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZixnLHcsRTtmb3IoRT1uZXcgYnQsZj1ncyx3PW5ldyBHKHQpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwyMzgpLGY9Yi5NYXRoLm1pbihmLChnLmMrKHIuYityLmMpKSooZy5iKyhyLmQrci5hKSkpO2ZvcihvPW5ldyBHKHQpO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSwyMzgpLChhLmMrKHIuYityLmMpKSooYS5iKyhyLmQrci5hKSk9PWYmJiRuKEUuYyxhKTtyZXR1cm4gRX0sSShiVCwiQXJlYUZpbHRlciIsNjczKSxEKDY3NCwxLHs1MzU6MX0sUTkpLGguSGc9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZixnLHcsRTtmb3Iodz1uZXcgYnQsRT1ncyxnPW5ldyBHKHQpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwyMzgpLEU9Yi5NYXRoLm1pbihFLGIuTWF0aC5hYnMoKGYuYysoci5iK3IuYykpLyhmLmIrKHIuZCtyLmEpKS1uKSk7Zm9yKG89bmV3IEcodCk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDIzOCksYi5NYXRoLmFicygoYS5jKyhyLmIrci5jKSkvKGEuYisoci5kK3IuYSkpLW4pPT1FJiYkbih3LmMsYSk7cmV0dXJuIHd9LEkoYlQsIkFzcGVjdFJhdGlvRmlsdGVyIiw2NzQpLEQoMTQ2OSwxLFVvLFNuZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDI3KSxudWxsfSxoLktmPWZ1bmN0aW9uKHQsbil7ZVNuKGwodCwyNyksbil9LEkoYlQsIkdyZWVkeVdpZHRoQXBwcm94aW1hdG9yIiwxNDY5KSxEKDY3MiwxLHs1MzU6MX0sdkkpLGguSGc9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZixnLHcsRTtmb3IoRT1uZXcgYnQsZj1pYSx3PW5ldyBHKHQpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwyMzgpLGY9Yi5NYXRoLm1heChmLGFIKGcuYysoci5iK3IuYyksZy5iKyhyLmQrci5hKSxnLmEpKTtmb3Iobz1uZXcgRyh0KTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMjM4KSxhSChhLmMrKHIuYityLmMpLGEuYisoci5kK3IuYSksYS5hKT09ZiYmJG4oRS5jLGEpO3JldHVybiBFfSxJKGJULCJTY2FsZU1lYXN1cmVGaWx0ZXIiLDY3MiksRCgxNDcwLDEsVW8sX25lKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMjcpLG51bGx9LGguS2Y9ZnVuY3Rpb24odCxuKXska24obCh0LDI3KSxuKX0sSShiVCwiVGFyZ2V0V2lkdGhXaWR0aEFwcHJveGltYXRvciIsMTQ3MCksRCg0OTEsMjIsezM6MSwzNDoxLDIyOjEsNDkxOjEsMTg4OjEsMTk2OjF9LEszZSksaC5kZz1mdW5jdGlvbigpe3JldHVybiAkZ3QodGhpcyl9LGgucWc9ZnVuY3Rpb24oKXtyZXR1cm4gJGd0KHRoaXMpfTt2YXIgZGdlLGhPZSxmT2U9RnIoYlQsIldpZHRoQXBwcm94aW1hdGlvblN0cmF0ZWd5Iiw0OTEsSHIsWnBuLGsxbiksakN0O0QoMTQ3MSwxLFVvLEFuZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDI3KSxudWxsfSxoLktmPWZ1bmN0aW9uKHQsbil7ZUluKHRoaXMsbCh0LDI3KSxuKX0sSShCRywiQ29tcGFjdG9yIiwxNDcxKSxEKDE0NzMsMSxVbyxMbmUpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwyNyksbnVsbH0saC5LZj1mdW5jdGlvbih0LG4pe0lDbihsKHQsMjcpLG4pfSxJKEJHLCJOb1BsYWNlbWVudCIsMTQ3MyksRCg0MzksMjIsezM6MSwzNDoxLDIyOjEsNDM5OjEsMTg4OjEsMTk2OjF9LGpzZSksaC5kZz1mdW5jdGlvbigpe3JldHVybiBlMXQodGhpcyl9LGgucWc9ZnVuY3Rpb24oKXtyZXR1cm4gZTF0KHRoaXMpfTt2YXIgZ2dlLGRPZSxnT2UscE9lPUZyKEJHLCJQYWNraW5nU3RyYXRlZ3kiLDQzOSxIcixuYm4sQzFuKSwkQ3Q7RCg4MTAsMSx7fSxRM2UpLGguYT0wLGguYj0wLGguYz0wLGguZD1ncyxoLmU9MCxoLmY9Z3MsSShCRywiUm93RmlsbGluZ0FuZENvbXBhY3Rpb24iLDgxMCksRCgxNDcyLDEsVW8sYyQpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwyNyksbnVsbH0saC5LZj1mdW5jdGlvbih0LG4pe2JNbihsKHQsMjcpLG4pfSxJKEJHLCJTaW1wbGVQbGFjZW1lbnQiLDE0NzIpLEQoMTQ3NCwxLFVvLE1uZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDI3KSxudWxsfSxoLktmPWZ1bmN0aW9uKHQsbil7dGhpcy5JZyhsKHQsMjcpLG4pfSxoLklnPWZ1bmN0aW9uKHQsbil7TzJ0KHQsbil9LEkoVUNlLCJFcXVhbFdoaXRlc3BhY2VFbGltaW5hdG9yIiwxNDc0KSxEKDE0NzUsMTQ3NCxVbyxEbmUpLGguSWc9ZnVuY3Rpb24odCxuKXt2YXIgcixhLG8sZixnO24uVWcoIlRvIEFzcGVjdCBSYXRpbyBXaGl0ZXNhcGNlIEVsaW1pbmF0b3IiLDEpLGc9emUoR2UoYXQodCwodWcoKSxaeCkpKSksZj16ZShHZShhdCh0LFpUKSkpLG89emUoR2UoYXQodCwoejEoKSxLVykpKSkscj16ZShHZShhdCh0LGJNKSkpLGE9Zy9mLGE8bz8oZz1mKm8sSGkodCxaeCxnKSk6KHIrPWcvby1mLEhpKHQsYk0sciksSGkodCxaVCxmK3IpKSxPMnQodCxuKSxuLlZnKCl9LEkoVUNlLCJUb0FzcGVjdHJhdGlvTm9kZUV4cGFuZGVyIiwxNDc1KSxEKDQ5MiwyMix7MzoxLDM0OjEsMjI6MSw0OTI6MSwxODg6MSwxOTY6MX0sVzNlKSxoLmRnPWZ1bmN0aW9uKCl7cmV0dXJuIEFmdCh0aGlzKX0saC5xZz1mdW5jdGlvbigpe3JldHVybiBBZnQodGhpcyl9O3ZhciBiT2UsbU9lLHZPZT1GcihVQ2UsIldoaXRlU3BhY2VFbGltaW5hdGlvblN0cmF0ZWd5Iiw0OTIsSHIsZTJuLFMxbiksekN0O0QoMTcyLDEsezE3MjoxfSxrY2UpLGguYT0wLGguYz0hMSxoLmQ9MCxoLmU9MCxoLmY9MCxoLmc9MCxoLmk9MCxoLms9ITEsaC5vPWdzLGgucD1ncyxoLnI9MCxoLnM9MCxoLnQ9MCxJKEdQLCJCbG9jayIsMTcyKSxEKDIwOSwxLHsyMDk6MX0sUEgpLGguYT0wLGguYj0wLGguZD0wLGguZT0wLGguZj0wLEkoR1AsIkJsb2NrUm93IiwyMDkpLEQoMzE1LDEsezMxNToxfSx6NWUpLGguYj0wLGguYz0wLGguZD0wLGguZT0wLGguZj0wLEkoR1AsIkJsb2NrU3RhY2siLDMxNSksRCgyMzgsMSx7MjM4OjF9LHo0ZSx6OGUpLGguYT0wLGguYj0wLGguYz0wLGguZD0wLGguZT0wLGguZz0wO3ZhciBNT249SShHUCwiRHJhd2luZ0RhdGEiLDIzOCk7RCgzNzMsMjIsezM6MSwzNDoxLDIyOjEsMzczOjF9LGdPKTt2YXIgZTksUTYseU0seE0sekIscUN0PUZyKEdQLCJEcmF3aW5nRGF0YURlc2NyaXB0b3IiLDM3MyxIcixLbW4sXzFuKSxIQ3Q7RCgxODYsMSx7MTg2OjF9LFE1ZSksaC5iPTAsaC5jPTAsaC5lPTAsaC5mPTAsSShHUCwiUmVjdFJvdyIsMTg2KSxEKDc2MywxLHt9LEo3ZSksaC5qPTAsSShlNCxSM3QsNzYzKSxEKDEyMDksMSx7fSx3SSksaC5hZj1mdW5jdGlvbih0KXtyZXR1cm4gcGIodC5hLHQuYil9LEkoZTQsTUVlLDEyMDkpLEQoMTIxMCwxLHt9LHlYZSksaC5hZj1mdW5jdGlvbih0KXtyZXR1cm4gcnZuKHRoaXMuYSx0KX0sSShlNCxqM3QsMTIxMCksRCgxMjExLDEse30seFhlKSxoLmFmPWZ1bmN0aW9uKHQpe3JldHVybiBFNm4odGhpcy5hLHQpfSxJKGU0LCQzdCwxMjExKSxEKDEyMTIsMSx7fSxrWGUpLGguYWY9ZnVuY3Rpb24odCl7cmV0dXJuIG95bih0aGlzLmEsdCl9LEkoZTQsIkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDMkVHlwZSIsMTIxMiksRCgxMjEzLDEse30sRVhlKSxoLmFmPWZ1bmN0aW9uKHQpe3JldHVybiB1RW4odGhpcy5hLHQpfSxJKGU0LHozdCwxMjEzKSxEKDExMTUsMjA1LHR2LHBaZSksaC5yZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtmb3IoUDEodCwoWU4oKSxKVykpJiYoVj1laShhdCh0LChsdWUoKSxqT2UpKSksZj1pbGUoaEUoKSxWKSxmJiYoZz1sKEdPKGYuZiksMjA1KSxnLnJmKHQsbi5laCgxKSkpKSxIaSh0LHhnZSwock4oKSxRVykpLEhpKHQsa2dlLChYTigpLHlnZSkpLEhpKHQsRWdlLChDTigpLFpXKSksdz1sKGF0KHQsKGx1ZSgpLEJPZSkpLDE3KS5hLG4uVWcoIk92ZXJsYXAgcmVtb3ZhbCIsMSksUnQoQnQoYXQodCx1U3QpKSksRT1uZXcgS3MsQz1uZXcgVFhlKEUpLGE9bmV3IEo3ZSxyPXB3dChhLHQpLEw9ITAsbz0wO288dyYmTDspe2lmKFJ0KEJ0KGF0KHQsRk9lKSkpKXtpZihFLmEuJGIoKSxla24obmV3IHhudChDKSxyLmkpLEUuYS5nYygpPT0wKWJyZWFrO3IuZT1FfWZvcihxTyh0aGlzLmIpLFgwKHRoaXMuYiwoUE4oKSxXVyksKGJfKCkscUIpKSxYMCh0aGlzLmIsWVcsci5nKSxYMCh0aGlzLmIsWFcsKHJxKCksbWdlKSksdGhpcy5hPWJQKHRoaXMuYixyKSx6PW5ldyBHKHRoaXMuYSk7ei5hPHouYy5jLmxlbmd0aDspQj1sKHJlKHopLDQ3KSxCLktmKHIsbi5laCgxKSk7bThuKGEsciksTD1SdChCdChRKHIsKHBFKCksVl9lKSkpKSwrK299QXZ0KGEsciksbi5WZygpfSxJKGU0LCJPdmVybGFwUmVtb3ZhbExheW91dFByb3ZpZGVyIiwxMTE1KSxEKDExMTYsMSx7fSxUWGUpLEkoZTQsIk92ZXJsYXBSZW1vdmFsTGF5b3V0UHJvdmlkZXIvbGFtYmRhJDAkVHlwZSIsMTExNiksRCg0NDQsMjIsezM6MSwzNDoxLDIyOjEsNDQ0OjF9LCRzZSk7dmFyIFdXLFlXLFhXLHBnZT1GcihlNCwiU1BPckVQaGFzZXMiLDQ0NCxIcix1Ym4sTDFuKSxWQ3Q7RCgxMjE5LDEse30sYlplKSxJKGU0LCJTaHJpbmtUcmVlIiwxMjE5KSxEKDExMTcsMjA1LHR2LHZKZSksaC5yZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGc7UDEodCwoWU4oKSxKVykpJiYoZz1laShhdCh0LEpXKSksbz1pbGUoaEUoKSxnKSxvJiYoZj1sKEdPKG8uZiksMjA1KSxmLnJmKHQsbi5laCgxKSkpKSxhPW5ldyBKN2Uscj1wd3QoYSx0KSxOVG4odGhpcy5hLHIsbi5laCgxKSksQXZ0KGEscil9LEkoZTQsIlNocmlua1RyZWVMYXlvdXRQcm92aWRlciIsMTExNyksRCgzMDYsMTM3LHszOjEsMzA2OjEsOTY6MSwxMzc6MX0sY290KSxoLmM9ITEsSSgib3JnLmVjbGlwc2UuZWxrLmFsZy5zcG9yZS5ncmFwaCIsIkdyYXBoIiwzMDYpLEQoNDkwLDIyLHszOjEsMzQ6MSwyMjoxLDQ5MDoxLDE4ODoxLDE5NjoxfSxkZXQpLGguZGc9ZnVuY3Rpb24oKXtyZXR1cm4gRTB0KHRoaXMpfSxoLnFnPWZ1bmN0aW9uKCl7cmV0dXJuIEUwdCh0aGlzKX07dmFyIGJnZSx3T2U9RnIodDQsVEVlLDQ5MCxIcixycG4sQTFuKSxVQ3Q7RCg1NTgsMjIsezM6MSwzNDoxLDIyOjEsNTU4OjEsMTg4OjEsMTk2OjF9LGRydCksaC5kZz1mdW5jdGlvbigpe3JldHVybiBuZXcgdSR9LGgucWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHUkfTt2YXIgbWdlLEdDdD1Gcih0NCwiT3ZlcmxhcFJlbW92YWxTdHJhdGVneSIsNTU4LEhyLGlwbixNMW4pLEtDdDtEKDQzOCwyMix7MzoxLDM0OjEsMjI6MSw0Mzg6MX0sWTNlKTt2YXIgUVcsdmdlLHlPZT1Gcih0NCwiUm9vdFNlbGVjdGlvbiIsNDM4LEhyLGkybixEMW4pLFdDdDtEKDMyNCwyMix7MzoxLDM0OjEsMjI6MSwzMjQ6MX0scE8pO3ZhciB4T2Usd2dlLHlnZSxrT2UsRU9lLFRPZT1Gcih0NCwiU3Bhbm5pbmdUcmVlQ29zdEZ1bmN0aW9uIiwzMjQsSHIsV21uLEkxbiksWUN0O0QoMTAxNCwxLFBmLGNpZSksaC5oZj1mdW5jdGlvbih0KXtpdnQodCl9O3ZhciBDT2UsU09lLFhDdCxRQ3QsX09lLEFPZSx4Z2Usa2dlLEVnZSxKQ3QsWkN0LEpXO0kodDQsIlNwb3JlQ29tcGFjdGlvbk9wdGlvbnMiLDEwMTQpLEQoMTAxNSwxLHt9LEluZSksaC5zZj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PW5ldyB2SmUsdH0saC50Zj1mdW5jdGlvbih0KXt9LEkodDQsIlNwb3JlQ29tcGFjdGlvbk9wdGlvbnMvU3BvcmVDb21wYWN0aW9uRmFjdG9yeSIsMTAxNSksRCg4NjYsMSxQZix1aWUpLGguaGY9ZnVuY3Rpb24odCl7c24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LE1mZSksIiIpLCJVbmRlcmx5aW5nIExheW91dCBBbGdvcml0aG0iKSwiQSBsYXlvdXQgYWxnb3JpdGhtIHRoYXQgaXMgYXBwbGllZCB0byB0aGUgZ3JhcGggYmVmb3JlIGl0IGlzIGNvbXBhY3RlZC4gSWYgdGhpcyBpcyBudWxsLCBub3RoaW5nIGlzIGFwcGxpZWQgYmVmb3JlIGNvbXBhY3Rpb24uIiksKGcyKCksSjYpKSx6dCksdW4oKHIxKCksUG4pKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsT2ZlKSwic3RydWN0dXJlIiksIlN0cnVjdHVyZSBFeHRyYWN0aW9uIFN0cmF0ZWd5IiksIlRoaXMgb3B0aW9uIGRlZmluZXMgd2hhdCBraW5kIG9mIHRyaWFuZ3VsYXRpb24gb3Igb3RoZXIgcGFydGl0aW9uaW5nIG9mIHRoZSBwbGFuZSBpcyBhcHBsaWVkIHRvIHRoZSB2ZXJ0aWNlcy4iKSxOT2UpLHBzKSwkT2UpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsR0NlKSxOZmUpLCJUcmVlIENvbnN0cnVjdGlvbiBTdHJhdGVneSIpLCJXaGV0aGVyIGEgbWluaW11bSBzcGFubmluZyB0cmVlIG9yIGEgbWF4aW11bSBzcGFubmluZyB0cmVlIHNob3VsZCBiZSBjb25zdHJ1Y3RlZC4iKSxJT2UpLHBzKSxxT2UpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsS0NlKSxOZmUpLCJDb3N0IEZ1bmN0aW9uIGZvciBTcGFubmluZyBUcmVlIiksIlRoZSBjb3N0IGZ1bmN0aW9uIGlzIHVzZWQgaW4gdGhlIGNyZWF0aW9uIG9mIHRoZSBzcGFubmluZyB0cmVlLiIpLERPZSkscHMpLFRPZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxEZmUpLE5mZSksIlJvb3Qgbm9kZSBmb3Igc3Bhbm5pbmcgdHJlZSBjb25zdHJ1Y3Rpb24iKSwiVGhlIGlkZW50aWZpZXIgb2YgdGhlIG5vZGUgdGhhdCBpcyBwcmVmZXJyZWQgYXMgdGhlIHJvb3Qgb2YgdGhlIHNwYW5uaW5nIHRyZWUuIElmIHRoaXMgaXMgbnVsbCwgdGhlIGZpcnN0IG5vZGUgaXMgY2hvc2VuLiIpLG51bGwpLEo2KSx6dCksdW4oUG4pKSkpLFFzKHQsRGZlLElmZSxzU3QpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxJZmUpLE5mZSksIlJvb3Qgc2VsZWN0aW9uIGZvciBzcGFubmluZyB0cmVlIiksIlRoaXMgc2V0cyB0aGUgbWV0aG9kIHVzZWQgdG8gc2VsZWN0IGEgcm9vdCBub2RlIGZvciB0aGUgY29uc3RydWN0aW9uIG9mIGEgc3Bhbm5pbmcgdHJlZSIpLE1PZSkscHMpLHlPZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxXQ2UpLENUZSksU3l0KSwiVGhpcyBvcHRpb24gZGVmaW5lcyBob3cgdGhlIGNvbXBhY3Rpb24gaXMgYXBwbGllZC4iKSxMT2UpLHBzKSx3T2UpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsWUNlKSxDVGUpLCJPcnRob2dvbmFsIENvbXBhY3Rpb24iKSwiUmVzdHJpY3RzIHRoZSB0cmFuc2xhdGlvbiBvZiBub2RlcyB0byBvcnRob2dvbmFsIGRpcmVjdGlvbnMgaW4gdGhlIGNvbXBhY3Rpb24gcGhhc2UuIiksKEhuKCksITEpKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsWENlKSxMeXQpLCJVcHBlciBsaW1pdCBmb3IgaXRlcmF0aW9ucyBvZiBvdmVybGFwIHJlbW92YWwiKSxudWxsKSxwdCg2NCkpLFRjKSxybyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxRQ2UpLEx5dCksIldoZXRoZXIgdG8gcnVuIGEgc3VwcGxlbWVudGFyeSBzY2FubGluZSBvdmVybGFwIGNoZWNrLiIpLG51bGwpLCEwKSx5YSksTnMpLHVuKFBuKSkpKSxvbXQoKG5ldyBsaWUsdCkpLGl2dCgobmV3IGNpZSx0KSl9O3ZhciBlU3QsTE9lLHRTdCxuU3QsclN0LGlTdCxzU3QsYVN0LE1PZSxvU3QsRE9lLGNTdCxJT2UsT09lLE5PZSxQT2U7SSh0NCwiU3BvcmVNZXRhRGF0YVByb3ZpZGVyIiw4NjYpLEQoMTAxMiwxLFBmLGxpZSksaC5oZj1mdW5jdGlvbih0KXtvbXQodCl9O3ZhciB1U3QsQk9lLEZPZSxST2UsbFN0LGpPZTtJKHQ0LCJTcG9yZU92ZXJsYXBSZW1vdmFsT3B0aW9ucyIsMTAxMiksRCgxMDEzLDEse30sdWgpLGguc2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgcFplLHR9LGgudGY9ZnVuY3Rpb24odCl7fSxJKHQ0LCJTcG9yZU92ZXJsYXBSZW1vdmFsT3B0aW9ucy9TcG9yZU92ZXJsYXBGYWN0b3J5IiwxMDEzKSxEKDUzOSwyMix7MzoxLDM0OjEsMjI6MSw1Mzk6MSwxODg6MSwxOTY6MX0sZ2F0KSxoLmRnPWZ1bmN0aW9uKCl7cmV0dXJuIFQwdCh0aGlzKX0saC5xZz1mdW5jdGlvbigpe3JldHVybiBUMHQodGhpcyl9O3ZhciBxQiwkT2U9RnIodDQsIlN0cnVjdHVyZUV4dHJhY3Rpb25TdHJhdGVneSIsNTM5LEhyLHNwbixPMW4pLGhTdDtEKDQzNywyMix7MzoxLDM0OjEsMjI6MSw0Mzc6MSwxODg6MSwxOTY6MX0sWDNlKSxoLmRnPWZ1bmN0aW9uKCl7cmV0dXJuIFQxdCh0aGlzKX0saC5xZz1mdW5jdGlvbigpe3JldHVybiBUMXQodGhpcyl9O3ZhciB6T2UsWlcscU9lPUZyKHQ0LCJUcmVlQ29uc3RydWN0aW9uU3RyYXRlZ3kiLDQzNyxIcixzMm4sTjFuKSxmU3Q7RCgxNDYzLDEsVW8sZ2wpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwzMDYpLG5ldyBYc30saC5LZj1mdW5jdGlvbih0LG4pe3g4bihsKHQsMzA2KSxuKX0sSShNeXQsIkRlbGF1bmF5VHJpYW5ndWxhdGlvblBoYXNlIiwxNDYzKSxEKDE0NjQsMSxmcixDWGUpLGguQ2Q9ZnVuY3Rpb24odCl7dnQodGhpcy5hLGwodCw2OCkuYSl9LEkoTXl0LCJEZWxhdW5heVRyaWFuZ3VsYXRpb25QaGFzZS9sYW1iZGEkMCRUeXBlIiwxNDY0KSxEKDc5NCwxLFVvLEh3ZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDMwNiksbmV3IFhzfSxoLktmPWZ1bmN0aW9uKHQsbil7dGhpcy5KZyhsKHQsMzA2KSxuKX0saC5KZz1mdW5jdGlvbih0LG4pe3ZhciByLGEsbztuLlVnKCJNaW5pbXVtIHNwYW5uaW5nIHRyZWUgY29uc3RydWN0aW9uIiwxKSx0LmQ/YT10LmQuYTphPWwoanQodC5pLDApLDY4KS5hLFJ0KEJ0KFEodCwocEUoKSxqTCkpKSk/bz1FbGUodC5lLGEsKHI9dC5iLHIpKTpvPUVsZSh0LmUsYSx0LmIpLGEwdCh0aGlzLG8sdCksbi5WZygpfSxJKFBmZSwiTWluU1RQaGFzZSIsNzk0KSxEKDE0NjYsNzk0LFVvLHJKZSksaC5KZz1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmO24uVWcoIk1heGltdW0gc3Bhbm5pbmcgdHJlZSBjb25zdHJ1Y3Rpb24iLDEpLHI9bmV3IFNYZSh0KSx0LmQ/bz10LmQuYzpvPWwoanQodC5pLDApLDY4KS5jLFJ0KEJ0KFEodCwocEUoKSxqTCkpKSk/Zj1FbGUodC5lLG8sKGE9cixhKSk6Zj1FbGUodC5lLG8sciksYTB0KHRoaXMsZix0KSxuLlZnKCl9LEkoUGZlLCJNYXhTVFBoYXNlIiwxNDY2KSxEKDE0NjcsMSx7fSxTWGUpLGguYWY9ZnVuY3Rpb24odCl7cmV0dXJuIHZsbih0aGlzLmEsdCl9LEkoUGZlLCJNYXhTVFBoYXNlL2xhbWJkYSQwJFR5cGUiLDE0NjcpLEQoMTQ2NSwxLGZyLF9YZSksaC5DZD1mdW5jdGlvbih0KXtsaG4odGhpcy5hLGwodCw2OCkpfSxJKFBmZSwiTWluU1RQaGFzZS9sYW1iZGEkMCRUeXBlIiwxNDY1KSxEKDc5NiwxLFVvLHUkKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzA2KSxuZXcgWHN9LGguS2Y9ZnVuY3Rpb24odCxuKXtCeG4odGhpcyxsKHQsMzA2KSxuKX0saC5hPSExLEkoQmZlLCJHcm93VHJlZVBoYXNlIiw3OTYpLEQoNzk3LDEsZnIseDRlKSxoLkNkPWZ1bmN0aW9uKHQpe0ozbih0aGlzLmEsdGhpcy5iLHRoaXMuYyxsKHQsMjI1KSl9LEkoQmZlLCJHcm93VHJlZVBoYXNlL2xhbWJkYSQwJFR5cGUiLDc5NyksRCgxNDY4LDEsVW8sT25lKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzA2KSxuZXcgWHN9LGguS2Y9ZnVuY3Rpb24odCxuKXtWNm4odGhpcyxsKHQsMzA2KSxuKX0sSShCZmUsIlNocmlua1RyZWVDb21wYWN0aW9uUGhhc2UiLDE0NjgpLEQoNzk1LDEsZnIsazRlKSxoLkNkPWZ1bmN0aW9uKHQpe0RFbih0aGlzLmEsdGhpcy5iLHRoaXMuYyxsKHQsMjI1KSl9LEkoQmZlLCJTaHJpbmtUcmVlQ29tcGFjdGlvblBoYXNlL2xhbWJkYSQwJFR5cGUiLDc5NSk7dmFyIEhPZT1rcyhVYywiSUdyYXBoRWxlbWVudFZpc2l0b3IiKTtEKDg3MiwxLHs1MzY6MX0sS290KSxoLktnPWZ1bmN0aW9uKHQpe3ZhciBuO249UlNuKHRoaXMsdCkscGMobixsKGNyKHRoaXMuYix0KSw5NikpLE9Ubih0aGlzLHQsbil9O3ZhciBkU3QsZ1N0O0kodjYsIkxheW91dENvbmZpZ3VyYXRvciIsODcyKTt2YXIgRE9uPWtzKHY2LCJMYXlvdXRDb25maWd1cmF0b3IvSVByb3BlcnR5SG9sZGVyT3B0aW9uRmlsdGVyIik7RCg5NDQsMSx7MjAzMjoxfSxObmUpLGguTGc9ZnVuY3Rpb24odCxuKXtyZXR1cm4gaHgoKSwhdC5wZihuKX0sSSh2NiwiTGF5b3V0Q29uZmlndXJhdG9yL2xhbWJkYSQwJFR5cGUiLDk0NCksRCg5NDMsMSx7ODQ1OjF9LGV5KSxoLk1nPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGh4KCksIXQucGYobil9LEkodjYsIkxheW91dENvbmZpZ3VyYXRvci9sYW1iZGEkMSRUeXBlIiw5NDMpLEQoOTQ1LDEsezIwMzI6MX0scDUpLGguTGc9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbVplKHQsbil9LEkodjYsIkxheW91dENvbmZpZ3VyYXRvci9sYW1iZGEkMiRUeXBlIiw5NDUpLEQoOTQ2LDEsdGksYXR0KSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBLZ24odGhpcy5hLHRoaXMuYixsKHQsMjAzMikpfSxJKHY2LCJMYXlvdXRDb25maWd1cmF0b3IvbGFtYmRhJDMkVHlwZSIsOTQ2KSxEKDg2OSwxLHt9LHR5KSxJKHY2LCJSZWN1cnNpdmVHcmFwaExheW91dEVuZ2luZSIsODY5KSxEKDIyNCw2MyxscCxOUWUsVnApLEkodjYsIlVuc3VwcG9ydGVkQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiIsMjI0KSxEKDM3MCw2MyxscCxJOCksSSh2NiwiVW5zdXBwb3J0ZWRHcmFwaEV4Y2VwdGlvbiIsMzcwKSxEKDc2MSwxLHt9KSxJKFVjLCJBYnN0cmFjdFJhbmRvbUxpc3RBY2Nlc3NvciIsNzYxKSxEKDQ1MCw3NjEse30sVUEpLGguTmc9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC5kPSEwLGguZT0hMCxoLmY9MCxJKHZULCJBbGdvcml0aG1Bc3NlbWJsZXIiLDQ1MCksRCgxMjAwLDEsdGksUnApLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuISFsKHQsMTA2KX0sSSh2VCwiQWxnb3JpdGhtQXNzZW1ibGVyL2xhbWJkYSQwJFR5cGUiLDEyMDApLEQoMTIwMSwxLHt9LEFYZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gT3VuKHRoaXMuYSxsKHQsMTA2KSl9LEkodlQsIkFsZ29yaXRobUFzc2VtYmxlci9sYW1iZGEkMSRUeXBlIiwxMjAxKSxEKDEyMDIsMSx0aSx1OCksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4hIWwodCw4MCl9LEkodlQsIkFsZ29yaXRobUFzc2VtYmxlci9sYW1iZGEkMiRUeXBlIiwxMjAyKSxEKDEyMDMsMSxmcixMWGUpLGguQ2Q9ZnVuY3Rpb24odCl7RGgodGhpcy5hLGwodCw4MCkpfSxJKHZULCJBbGdvcml0aG1Bc3NlbWJsZXIvbGFtYmRhJDMkVHlwZSIsMTIwMyksRCgxMjA0LDEsZnIsb3R0KSxoLkNkPWZ1bmN0aW9uKHQpe2lmbih0aGlzLmEsdGhpcy5iLGwodCwxOTYpKX0sSSh2VCwiQWxnb3JpdGhtQXNzZW1ibGVyL2xhbWJkYSQ0JFR5cGUiLDEyMDQpLEQoMTM0MywxLGlpLHlJKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIExwbihsKHQsMTk2KSxsKG4sMTk2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh2VCwiRW51bUJhc2VkRmFjdG9yeUNvbXBhcmF0b3IiLDEzNDMpLEQoODAsNzYxLHs4MDoxfSxYcyksaC5OZz1mdW5jdGlvbigpe3JldHVybiBuZXcgS3N9LGguYT0wLEkodlQsIkxheW91dFByb2Nlc3NvckNvbmZpZ3VyYXRpb24iLDgwKSxEKDEwMjUsMSx7NTM2OjF9LGhpZSksaC5LZz1mdW5jdGlvbih0KXttQShiU3QsbmV3IE1YZSh0KSl9O3ZhciBwU3QsYlN0LG1TdDtJKE5jLCJEZXByZWNhdGVkTGF5b3V0T3B0aW9uUmVwbGFjZXIiLDEwMjUpLEQoMTAyNiwxLGZyLGwkKSxoLkNkPWZ1bmN0aW9uKHQpe2p2bihsKHQsMTY3KSl9LEkoTmMsIkRlcHJlY2F0ZWRMYXlvdXRPcHRpb25SZXBsYWNlci9sYW1iZGEkMCRUeXBlIiwxMDI2KSxEKDEwMjcsMSxmcixoJCksaC5DZD1mdW5jdGlvbih0KXtUNW4obCh0LDE2NykpfSxJKE5jLCJEZXByZWNhdGVkTGF5b3V0T3B0aW9uUmVwbGFjZXIvbGFtYmRhJDEkVHlwZSIsMTAyNyksRCgxMDI4LDEse30sTVhlKSxoLllkPWZ1bmN0aW9uKHQsbil7cmZuKHRoaXMuYSxsKHQsMTQ5KSxsKG4sNDEpKX0sSShOYywiRGVwcmVjYXRlZExheW91dE9wdGlvblJlcGxhY2VyL2xhbWJkYSQyJFR5cGUiLDEwMjgpLEQoMTQzLDEsezcwMToxLDE0MzoxfSxYbSksaC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gZzZlKHRoaXMsdCl9LGguT2c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLlBnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30saC54ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gczIodGhpcy5jKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiJMYXlvdXQgQWxnb3JpdGhtOiAiK3RoaXMuY307dmFyIElPbj1JKE5jLCJMYXlvdXRBbGdvcml0aG1EYXRhIiwxNDMpO0QoMjY5LDEse30seDEpLEkoTmMsIkxheW91dEFsZ29yaXRobURhdGEvQnVpbGRlciIsMjY5KSxEKDEwMjksMSx7NTM2OjF9LGYkKSxoLktnPWZ1bmN0aW9uKHQpe0RlKHQsMjA3KSYmIVJ0KEJ0KHQub2YoKHBpKCksclkpKSkpJiZfQW4obCh0LDI3KSl9LEkoTmMsIkxheW91dEFsZ29yaXRobVJlc29sdmVyIiwxMDI5KSxEKDIzMywxLHs3MDE6MSwyMzM6MX0sbngpLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMjMzKT92bih0aGlzLmIsbCh0LDIzMykuYik6ITF9LGguT2c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLlBnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC54ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gczIodGhpcy5iKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiJMYXlvdXQgVHlwZTogIit0aGlzLmJ9LEkoTmMsIkxheW91dENhdGVnb3J5RGF0YSIsMjMzKSxEKDM1NywxLHt9LG55KSxJKE5jLCJMYXlvdXRDYXRlZ29yeURhdGEvQnVpbGRlciIsMzU3KSxEKDg3OSwxLHt9LFhidCk7dmFyIFRnZTtJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UiLDg3OSksRCg4ODAsMSx7fSxKc3QpLEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9SZWdpc3RyeSIsODgwKSxEKDQ4NywxLHs0ODc6MX0sSjkpLEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9SZWdpc3RyeS9UcmlwbGUiLDQ4NyksRCg4ODEsMSxFNixQbmUpLGguUWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHFhfSxJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDAkVHlwZSIsODgxKSxEKDg4MiwxLG40LHhJKSxoLlJnPWZ1bmN0aW9uKHQpe3JldHVybiBKYShsKHQsOCkpfSxJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDEkVHlwZSIsODgyKSxEKDg5MSwxLEU2LGw4KSxoLlFnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBidH0sSShOYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxMCRUeXBlIiw4OTEpLEQoODkyLDEsbjQsVzIpLGguUmc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBPbChsKHQsMTMpKX0sSShOYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxMSRUeXBlIiw4OTIpLEQoODkzLDEsRTYsZCQpLGguUWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG9zfSxJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDEyJFR5cGUiLDg5MyksRCg4OTQsMSxuNCxnJCksaC5SZz1mdW5jdGlvbih0KXtyZXR1cm4gUE8obCh0LDY3KSl9LEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTMkVHlwZSIsODk0KSxEKDg5NSwxLEU2LHAkKSxoLlFnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBLc30sSShOYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxNCRUeXBlIiw4OTUpLEQoODk2LDEsbjQsQm5lKSxoLlJnPWZ1bmN0aW9uKHQpe3JldHVybiBMSChsKHQsNDkpKX0sSShOYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxNSRUeXBlIiw4OTYpLEQoODk3LDEsRTYsaDgpLGguUWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJkfSxJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDE2JFR5cGUiLDg5NyksRCg4OTgsMSxuNCxyeSksaC5SZz1mdW5jdGlvbih0KXtyZXR1cm4gSEgobCh0LDQ5KSl9LEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTckVHlwZSIsODk4KSxEKDg5OSwxLEU2LGpwKSxoLlFnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBMd2V9LEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTgkVHlwZSIsODk5KSxEKDkwMCwxLG40LFkyKSxoLlJnPWZ1bmN0aW9uKHQpe3JldHVybiBfaXQobCh0LDE1NykpfSxJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDE5JFR5cGUiLDkwMCksRCg4ODMsMSxFNixiNSksaC5RZz1mdW5jdGlvbigpe3JldHVybiBuZXcgYmx9LEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMiRUeXBlIiw4ODMpLEQoODg0LDEsbjQsWjkpLGguUmc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBHeihsKHQsNzUpKX0sSShOYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQzJFR5cGUiLDg4NCksRCg4ODUsMSxFNixfUyksaC5RZz1mdW5jdGlvbigpe3JldHVybiBuZXcgc199LEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkNCRUeXBlIiw4ODUpLEQoODg2LDEsbjQsa0kpLGguUmc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB4YWUobCh0LDE0MCkpfSxJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDUkVHlwZSIsODg2KSxEKDg4NywxLEU2LEZuZSksaC5RZz1mdW5jdGlvbigpe3JldHVybiBuZXcgQTh9LEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkNiRUeXBlIiw4ODcpLEQoODg4LDEsbjQsUm5lKSxoLlJnPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUzRlKGwodCwxMDcpKX0sSShOYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQ3JFR5cGUiLDg4OCksRCg4ODksMSxFNixiJCksaC5RZz1mdW5jdGlvbigpe3JldHVybiBuZXcgRUl9LEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkOCRUeXBlIiw4ODkpLEQoODkwLDEsbjQsbSQpLGguUmc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBYbHQobCh0LDM4NSkpfSxJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDkkVHlwZSIsODkwKTt2YXIgQ2dlPWtzKElQLCJJUHJvcGVydHkiKTtEKDIzLDEsezM0OjEsNzAxOjEsMjM6MSwxNDk6MX0sWHQpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFRobih0aGlzLGwodCwxNDkpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwyMyk/dm4odGhpcy5mLGwodCwyMykuZik6RGUodCwxNDkpJiZ2bih0aGlzLmYsbCh0LDE0OSkuUGcoKSl9LGguU2c9ZnVuY3Rpb24oKXt2YXIgdDtpZihEZSh0aGlzLmIsNCkpe2lmKHQ9SDhlKHRoaXMuYiksdD09bnVsbCl0aHJvdyB1ZShuZXcgbmMoTnl0K3RoaXMuZisiJy4gTWFrZSBzdXJlIGl0J3MgdHlwZSBpcyByZWdpc3RlcmVkIHdpdGggdGhlICIrKEdnKGhGKSxoRi5rKStKQ2UpKTtyZXR1cm4gdH1lbHNlIHJldHVybiB0aGlzLmJ9LGguT2c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxoLlBnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0saC54ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLml9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gczIodGhpcy5mKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiJMYXlvdXQgT3B0aW9uOiAiK3RoaXMuZn0sSShOYywiTGF5b3V0T3B0aW9uRGF0YSIsMjMpLEQoMjQsMSx7fSxVdCksSShOYywiTGF5b3V0T3B0aW9uRGF0YS9CdWlsZGVyIiwyNCksRCgxNzAsMjIsezM6MSwzNDoxLDIyOjEsMTcwOjF9LGJPKTt2YXIgemQsUzIsaGEsUG4seXYseGc9RnIoTmMsIkxheW91dE9wdGlvbkRhdGEvVGFyZ2V0IiwxNzAsSHIsWW1uLFAxbiksdlN0O0QoMjg1LDIyLHszOjEsMzQ6MSwyMjoxLDI4NToxfSxGOCk7dmFyIHlhLGZvLHBzLHQ5LFRjLFgxLEo2LFZPZSx3U3Q9RnIoTmMsIkxheW91dE9wdGlvbkRhdGEvVHlwZSIsMjg1LEhyLGJ3bixCMW4pLHlTdCxrTSxVT2U7RCgxMTYsMSx7MTE2OjF9LCQ4LGVmLE1IKSxoLkZiPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB0PT1udWxsfHwhRGUodCwxMTYpPyExOihuPWwodCwxMTYpLEpjKHRoaXMuYyxuLmMpJiZKYyh0aGlzLmQsbi5kKSYmSmModGhpcy5iLG4uYikmJkpjKHRoaXMuYSxuLmEpKX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBNTihoZShsZSh3YSwxKSxSbiwxLDUsW3RoaXMuYyx0aGlzLmQsdGhpcy5iLHRoaXMuYV0pKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiJSZWN0W3g9Iit0aGlzLmMrIix5PSIrdGhpcy5kKyIsdz0iK3RoaXMuYisiLGg9Iit0aGlzLmErIl0ifSxoLmE9MCxoLmI9MCxoLmM9MCxoLmQ9MCxJKCRQLCJFbGtSZWN0YW5nbGUiLDExNiksRCg4LDEsezM6MSw0OjEsODoxLDQyMzoxfSxxYSxib2UsbHQsRW8pLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHVmdCh0aGlzLHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIGo4KHRoaXMuYSkrazduKGo4KHRoaXMuYikpfSxoLmNnPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvO2ZvcihhPTA7YTx0Lmxlbmd0aCYmSzB0KChYbihhLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoYSkpLE8zdCk7KSsrYTtmb3Iobj10Lmxlbmd0aDtuPjAmJkswdCgoWG4obi0xLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQobi0xKSksTjN0KTspLS1uO2lmKGE+PW4pdGhyb3cgdWUobmV3IFluKCJUaGUgZ2l2ZW4gc3RyaW5nIGRvZXMgbm90IGNvbnRhaW4gYW55IG51bWJlcnMuIikpO2lmKG89R3koKEdhKGEsbix0Lmxlbmd0aCksdC5zdWJzdHIoYSxuLWEpKSxgLHw7fFxyfApgKSxvLmxlbmd0aCE9Mil0aHJvdyB1ZShuZXcgWW4oIkV4YWN0bHkgdHdvIG51bWJlcnMgYXJlIGV4cGVjdGVkLCAiK28ubGVuZ3RoKyIgd2VyZSBmb3VuZC4iKSk7dHJ5e3RoaXMuYT1qeSgkeShvWzBdKSksdGhpcy5iPWp5KCR5KG9bMV0pKX1jYXRjaChmKXt0aHJvdyBmPWJzKGYpLERlKGYsMTMwKT8ocj1mLHVlKG5ldyBZbihQM3QrcikpKTp1ZShmKX19LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iKCIrdGhpcy5hKyIsIit0aGlzLmIrIikifSxoLmE9MCxoLmI9MDt2YXIgRWE9SSgkUCwiS1ZlY3RvciIsOCk7RCg3NSw2Nyx7MzoxLDQ6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDY3OjEsMTU6MSw3NToxLDQyMzoxfSxibCxHeixmcnQpLGguUGM9ZnVuY3Rpb24oKXtyZXR1cm4gT3luKHRoaXMpfSxoLmNnPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGYsZzthPUd5KHQsYCx8O3xcXCh8XFwpfFxcW3xcXF18XFx7fFxcfXwgfAl8CmApLENoKHRoaXMpO3RyeXtmb3Iocj0wLGY9MCxvPTAsZz0wO3I8YS5sZW5ndGg7KWFbcl0hPW51bGwmJiR5KGFbcl0pLmxlbmd0aD4wJiYoZiUyPT0wP289ankoYVtyXSk6Zz1qeShhW3JdKSxmPjAmJmYlMiE9MCYmdWkodGhpcyxuZXcgbHQobyxnKSksKytmKSwrK3J9Y2F0Y2godyl7dGhyb3cgdz1icyh3KSxEZSh3LDEzMCk/KG49dyx1ZShuZXcgWW4oIlRoZSBnaXZlbiBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGZvcm1hdCBmb3IgdmVjdG9ycy4iK24pKSk6dWUodyl9fSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQsbixyO2Zvcih0PW5ldyBUaCgiKCIpLG49UnIodGhpcywwKTtuLmIhPW4uZC5jOylyPWwoQnIobiksOCksaGkodCxyLmErIiwiK3IuYiksbi5iIT1uLmQuYyYmKHQuYSs9IjsgIik7cmV0dXJuKHQuYSs9IikiLHQpLmF9O3ZhciBHT2U9SSgkUCwiS1ZlY3RvckNoYWluIiw3NSk7RCgyNTUsMjIsezM6MSwzNDoxLDIyOjEsMjU1OjF9LF9fKTt2YXIgU2dlLGVZLHRZLEhCLFZCLG5ZLEtPZT1GcihuaCwiQWxpZ25tZW50IiwyNTUsSHIsTXZuLEYxbikseFN0O0QoOTkxLDEsUGYsZmllKSxoLmhmPWZ1bmN0aW9uKHQpe3htdCh0KX07dmFyIFdPZSxfZ2Usa1N0LFlPZSxYT2UsRVN0LFFPZSxUU3QsQ1N0LEpPZSxaT2UsU1N0O0kobmgsIkJveExheW91dGVyT3B0aW9ucyIsOTkxKSxEKDk5MiwxLHt9LGVrKSxoLnNmPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9bmV3IGpuZSx0fSxoLnRmPWZ1bmN0aW9uKHQpe30sSShuaCwiQm94TGF5b3V0ZXJPcHRpb25zL0JveEZhY3RvcnkiLDk5MiksRCgyOTgsMjIsezM6MSwzNDoxLDIyOjEsMjk4OjF9LEFfKTt2YXIgRU0sQWdlLFRNLENNLFNNLExnZSxNZ2U9RnIobmgsIkNvbnRlbnRBbGlnbm1lbnQiLDI5OCxIcixEdm4sUjFuKSxfU3Q7RCg2OTksMSxQZix1eiksaC5oZj1mdW5jdGlvbih0KXtzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsQnl0KSwiIiksIkxheW91dCBBbGdvcml0aG0iKSwiU2VsZWN0IGEgc3BlY2lmaWMgbGF5b3V0IGFsZ29yaXRobS4iKSwoZzIoKSxKNikpLHp0KSx1bigocjEoKSxQbikpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxGeXQpLCIiKSwiUmVzb2x2ZWQgTGF5b3V0IEFsZ29yaXRobSIpLCJNZXRhIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZWxlY3RlZCBhbGdvcml0aG0uIiksWDEpLElPbiksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxxVGUpLCIiKSwiQWxpZ25tZW50IiksIkFsaWdubWVudCBvZiB0aGUgc2VsZWN0ZWQgbm9kZSByZWxhdGl2ZSB0byBvdGhlciBub2RlczsgdGhlIGV4YWN0IG1lYW5pbmcgZGVwZW5kcyBvbiB0aGUgdXNlZCBhbGdvcml0aG0uIiksZU5lKSxwcyksS09lKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LE94KSwiIiksIkFzcGVjdCBSYXRpbyIpLCJUaGUgZGVzaXJlZCBhc3BlY3QgcmF0aW8gb2YgdGhlIGRyYXdpbmcsIHRoYXQgaXMgdGhlIHF1b3RpZW50IG9mIHdpZHRoIGJ5IGhlaWdodC4iKSxmbyksdGEpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsdFNlKSwiIiksIkJlbmQgUG9pbnRzIiksIkEgZml4ZWQgbGlzdCBvZiBiZW5kIHBvaW50cyBmb3IgdGhlIGVkZ2UuIFRoaXMgaXMgdXNlZCBieSB0aGUgJ0ZpeGVkIExheW91dCcgYWxnb3JpdGhtIHRvIHNwZWNpZnkgYSBwcmUtZGVmaW5lZCByb3V0aW5nIGZvciBhbiBlZGdlLiBUaGUgdmVjdG9yIGNoYWluIG11c3QgaW5jbHVkZSB0aGUgc291cmNlIHBvaW50LCBhbnkgYmVuZCBwb2ludHMsIGFuZCB0aGUgdGFyZ2V0IHBvaW50LCBzbyBpdCBtdXN0IGhhdmUgYXQgbGVhc3QgdHdvIHBvaW50cy4iKSxYMSksR09lKSx1bih6ZCkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFNHKSwiIiksIkNvbnRlbnQgQWxpZ25tZW50IiksIlNwZWNpZmllcyBob3cgdGhlIGNvbnRlbnQgb2YgYSBub2RlIGFyZSBhbGlnbmVkLiBFYWNoIG5vZGUgY2FuIGluZGl2aWR1YWxseSBjb250cm9sIHRoZSBhbGlnbm1lbnQgb2YgaXRzIGNvbnRlbnRzLiBJLmUuIGlmIGEgbm9kZSBzaG91bGQgYmUgYWxpZ25lZCB0b3AgbGVmdCBpbiBpdHMgcGFyZW50IG5vZGUsIHRoZSBwYXJlbnQgbm9kZSBzaG91bGQgc3BlY2lmeSB0aGF0IG9wdGlvbi4iKSxuTmUpLHQ5KSxNZ2UpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsVlApLCIiKSwiRGVidWcgTW9kZSIpLCJXaGV0aGVyIGFkZGl0aW9uYWwgZGVidWcgaW5mb3JtYXRpb24gc2hhbGwgYmUgZ2VuZXJhdGVkLiIpLChIbigpLCExKSkseWEpLE5zKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGdmZSksIiIpLGtFZSksIk92ZXJhbGwgZGlyZWN0aW9uIG9mIGVkZ2VzOiBob3Jpem9udGFsIChyaWdodCAvIGxlZnQpIG9yIHZlcnRpY2FsIChkb3duIC8gdXApLiIpLHJOZSkscHMpLExNKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEhQKSwiIiksIkVkZ2UgUm91dGluZyIpLCJXaGF0IGtpbmQgb2YgZWRnZSByb3V0aW5nIHN0eWxlIHNob3VsZCBiZSBhcHBsaWVkIGZvciB0aGUgY29udGVudCBvZiBhIHBhcmVudCBub2RlLiBBbGdvcml0aG1zIG1heSBhbHNvIHNldCB0aGlzIG9wdGlvbiB0byBzaW5nbGUgZWRnZXMgaW4gb3JkZXIgdG8gbWFyayB0aGVtIGFzIHNwbGluZXMuIFRoZSBiZW5kIHBvaW50IGxpc3Qgb2YgZWRnZXMgd2l0aCB0aGlzIG9wdGlvbiBzZXQgdG8gU1BMSU5FUyBtdXN0IGJlIGludGVycHJldGVkIGFzIGNvbnRyb2wgcG9pbnRzIGZvciBhIHBpZWNld2lzZSBjdWJpYyBzcGxpbmUuIiksYU5lKSxwcyksVmdlKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFpDZSksIiIpLCJFeHBhbmQgTm9kZXMiKSwiSWYgYWN0aXZlLCBub2RlcyBhcmUgZXhwYW5kZWQgdG8gZmlsbCB0aGUgYXJlYSBvZiB0aGVpciBwYXJlbnQuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxDRyksIiIpLCJIaWVyYXJjaHkgSGFuZGxpbmciKSwiRGV0ZXJtaW5lcyB3aGV0aGVyIHNlcGFyYXRlIGxheW91dCBydW5zIGFyZSB0cmlnZ2VyZWQgZm9yIGRpZmZlcmVudCBjb21wb3VuZCBub2RlcyBpbiBhIGhpZXJhcmNoaWNhbCBncmFwaC4gU2V0dGluZyBhIG5vZGUncyBoaWVyYXJjaHkgaGFuZGxpbmcgdG8gYElOQ0xVREVfQ0hJTERSRU5gIHdpbGwgbGF5IG91dCB0aGF0IG5vZGUgYW5kIGFsbCBvZiBpdHMgZGVzY2VuZGFudHMgaW4gYSBzaW5nbGUgbGF5b3V0IHJ1biwgdW50aWwgYSBkZXNjZW5kYW50IGlzIGVuY291bnRlcmVkIHdoaWNoIGhhcyBpdHMgaGllcmFyY2h5IGhhbmRsaW5nIHNldCB0byBgU0VQQVJBVEVfQ0hJTERSRU5gLiBJbiBnZW5lcmFsLCBgU0VQQVJBVEVfQ0hJTERSRU5gIHdpbGwgZW5zdXJlIHRoYXQgYSBuZXcgbGF5b3V0IHJ1biBpcyB0cmlnZ2VyZWQgZm9yIGEgbm9kZSB3aXRoIHRoYXQgc2V0dGluZy4gSW5jbHVkaW5nIG11bHRpcGxlIGxldmVscyBvZiBoaWVyYXJjaHkgaW4gYSBzaW5nbGUgbGF5b3V0IHJ1biBtYXkgYWxsb3cgY3Jvc3MtaGllcmFyY2hpY2FsIGVkZ2VzIHRvIGJlIGxhaWQgb3V0IHByb3Blcmx5LiBJZiB0aGUgcm9vdCBub2RlIGlzIHNldCB0byBgSU5IRVJJVGAgKG9yIG5vdCBzZXQgYXQgYWxsKSwgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgYFNFUEFSQVRFX0NISUxEUkVOYC4iKSx1TmUpLHBzKSxZTmUpLHJzKFBuLGhlKGxlKHhnLDEpLGl0LDE3MCwwLFtoYV0pKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsWHcpLCIiKSwiUGFkZGluZyIpLCJUaGUgcGFkZGluZyB0byBiZSBsZWZ0IHRvIGEgcGFyZW50IGVsZW1lbnQncyBib3JkZXIgd2hlbiBwbGFjaW5nIGNoaWxkIGVsZW1lbnRzLiBUaGlzIGNhbiBhbHNvIHNlcnZlIGFzIGFuIG91dHB1dCBvcHRpb24gb2YgYSBsYXlvdXQgYWxnb3JpdGhtIGlmIG5vZGUgc2l6ZSBjYWxjdWxhdGlvbiBpcyBzZXR1cCBhcHByb3ByaWF0ZWx5LiIpLHZOZSksWDEpLHdBZSkscnMoUG4saGUobGUoeGcsMSksaXQsMTcwLDAsW2hhXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxoTCksIiIpLCJJbnRlcmFjdGl2ZSIpLCJXaGV0aGVyIHRoZSBhbGdvcml0aG0gc2hvdWxkIGJlIHJ1biBpbiBpbnRlcmFjdGl2ZSBtb2RlIGZvciB0aGUgY29udGVudCBvZiBhIHBhcmVudCBub2RlLiBXaGF0IHRoaXMgbWVhbnMgZXhhY3RseSBkZXBlbmRzIG9uIGhvdyB0aGUgc3BlY2lmaWMgYWxnb3JpdGhtIGludGVycHJldHMgdGhpcyBvcHRpb24uIFVzdWFsbHkgaW4gdGhlIGludGVyYWN0aXZlIG1vZGUgYWxnb3JpdGhtcyB0cnkgdG8gbW9kaWZ5IHRoZSBjdXJyZW50IGxheW91dCBhcyBsaXR0bGUgYXMgcG9zc2libGUuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxBRyksIiIpLCJpbnRlcmFjdGl2ZSBMYXlvdXQiKSwiV2hldGhlciB0aGUgZ3JhcGggc2hvdWxkIGJlIGNoYW5nZWFibGUgaW50ZXJhY3RpdmVseSBhbmQgYnkgc2V0dGluZyBjb25zdHJhaW50cyIpLCExKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsZkwpLCIiKSwiT21pdCBOb2RlIE1pY3JvIExheW91dCIpLCJOb2RlIG1pY3JvIGxheW91dCBjb21wcmlzZXMgdGhlIGNvbXB1dGF0aW9uIG9mIG5vZGUgZGltZW5zaW9ucyAoaWYgcmVxdWVzdGVkKSwgdGhlIHBsYWNlbWVudCBvZiBwb3J0cyBhbmQgdGhlaXIgbGFiZWxzLCBhbmQgdGhlIHBsYWNlbWVudCBvZiBub2RlIGxhYmVscy4gVGhlIGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQgaW5kZXBlbmRlbnQgb2YgYW55IHNwZWNpZmljIGxheW91dCBhbGdvcml0aG0gYW5kIHNob3VsZG4ndCBoYXZlIGFueSBuZWdhdGl2ZSBpbXBhY3Qgb24gdGhlIGxheW91dCBhbGdvcml0aG0ncyBwZXJmb3JtYW5jZSBpdHNlbGYuIFlldCwgaWYgYW55IHVuZm9yZXNlZW4gYmVoYXZpb3Igb2NjdXJzLCB0aGlzIG9wdGlvbiBhbGxvd3MgdG8gZGVhY3RpdmF0ZSB0aGUgbWljcm8gbGF5b3V0LiIpLCExKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsTmhlKSwiIiksIlBvcnQgQ29uc3RyYWludHMiKSwiRGVmaW5lcyBjb25zdHJhaW50cyBvZiB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcnRzIG9mIGEgbm9kZS4iKSxFTmUpLHBzKSxKTmUpLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsX0cpLCIiKSwiUG9zaXRpb24iKSwiVGhlIHBvc2l0aW9uIG9mIGEgbm9kZSwgcG9ydCwgb3IgbGFiZWwuIFRoaXMgaXMgdXNlZCBieSB0aGUgJ0ZpeGVkIExheW91dCcgYWxnb3JpdGhtIHRvIHNwZWNpZnkgYSBwcmUtZGVmaW5lZCBwb3NpdGlvbi4iKSxYMSksRWEpLHJzKGhhLGhlKGxlKHhnLDEpLGl0LDE3MCwwLFt5dixTMl0pKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsTlApLCIiKSwiUHJpb3JpdHkiKSwiRGVmaW5lcyB0aGUgcHJpb3JpdHkgb2YgYW4gb2JqZWN0OyBpdHMgbWVhbmluZyBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpYyBsYXlvdXQgYWxnb3JpdGhtIGFuZCB0aGUgY29udGV4dCB3aGVyZSBpdCBpcyB1c2VkLiIpLFRjKSxybykscnMoaGEsaGUobGUoeGcsMSksaXQsMTcwLDAsW3pkXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxvRyksIiIpLCJSYW5kb21pemF0aW9uIFNlZWQiKSwiU2VlZCB1c2VkIGZvciBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3JzIHRvIGNvbnRyb2wgdGhlIGxheW91dCBhbGdvcml0aG0uIElmIHRoZSB2YWx1ZSBpcyAwLCB0aGUgc2VlZCBzaGFsbCBiZSBkZXRlcm1pbmVkIHBzZXVkby1yYW5kb21seSAoZS5nLiBmcm9tIHRoZSBzeXN0ZW0gdGltZSkuIiksVGMpLHJvKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LGxMKSwiIiksIlNlcGFyYXRlIENvbm5lY3RlZCBDb21wb25lbnRzIiksIldoZXRoZXIgZWFjaCBjb25uZWN0ZWQgY29tcG9uZW50IHNob3VsZCBiZSBwcm9jZXNzZWQgc2VwYXJhdGVseS4iKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsWlRlKSwiIiksIkp1bmN0aW9uIFBvaW50cyIpLCJUaGlzIG9wdGlvbiBpcyBub3QgdXNlZCBhcyBvcHRpb24sIGJ1dCBhcyBvdXRwdXQgb2YgdGhlIGxheW91dCBhbGdvcml0aG1zLiBJdCBpcyBhdHRhY2hlZCB0byBlZGdlcyBhbmQgZGV0ZXJtaW5lcyB0aGUgcG9pbnRzIHdoZXJlIGp1bmN0aW9uIHN5bWJvbHMgc2hvdWxkIGJlIGRyYXduIGluIG9yZGVyIHRvIHJlcHJlc2VudCBoeXBlcmVkZ2VzIHdpdGggb3J0aG9nb25hbCByb3V0aW5nLiBXaGV0aGVyIHN1Y2ggcG9pbnRzIGFyZSBjb21wdXRlZCBkZXBlbmRzIG9uIHRoZSBjaG9zZW4gbGF5b3V0IGFsZ29yaXRobSBhbmQgZWRnZSByb3V0aW5nIHN0eWxlLiBUaGUgcG9pbnRzIGFyZSBwdXQgaW50byB0aGUgdmVjdG9yIGNoYWluIHdpdGggbm8gc3BlY2lmaWMgb3JkZXIuIiksbE5lKSxYMSksR09lKSx1bih6ZCkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LG5DZSksIiIpLCJDb21tZW50IEJveCIpLCJXaGV0aGVyIHRoZSBub2RlIHNob3VsZCBiZSByZWdhcmRlZCBhcyBhIGNvbW1lbnQgYm94IGluc3RlYWQgb2YgYSByZWd1bGFyIG5vZGUuIEluIHRoYXQgY2FzZSBpdHMgcGxhY2VtZW50IHNob3VsZCBiZSBzaW1pbGFyIHRvIGhvdyBsYWJlbHMgYXJlIGhhbmRsZWQuIEFueSBlZGdlcyBpbmNpZGVudCB0byBhIGNvbW1lbnQgYm94IHNwZWNpZnkgdG8gd2hpY2ggZ3JhcGggZWxlbWVudHMgdGhlIGNvbW1lbnQgaXMgcmVsYXRlZC4iKSwhMSkseWEpLE5zKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHJDZSksIiIpLCJIeXBlcm5vZGUiKSwiV2hldGhlciB0aGUgbm9kZSBzaG91bGQgYmUgaGFuZGxlZCBhcyBhIGh5cGVybm9kZS4iKSwhMSkseWEpLE5zKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LHNPbiksIiIpLCJMYWJlbCBNYW5hZ2VyIiksIkxhYmVsIG1hbmFnZXJzIGNhbiBzaG9ydGVuIGxhYmVscyB1cG9uIGEgbGF5b3V0IGFsZ29yaXRobSdzIHJlcXVlc3QuIiksWDEpLEZPbikscnMoUG4saGUobGUoeGcsMSksaXQsMTcwLDAsW1MyXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxzQ2UpLCIiKSwiTWFyZ2lucyIpLCJNYXJnaW5zIGRlZmluZSBhZGRpdGlvbmFsIHNwYWNlIGFyb3VuZCB0aGUgYWN0dWFsIGJvdW5kcyBvZiBhIGdyYXBoIGVsZW1lbnQuIEZvciBpbnN0YW5jZSwgcG9ydHMgb3IgbGFiZWxzIGJlaW5nIHBsYWNlZCBvbiB0aGUgb3V0c2lkZSBvZiBhIG5vZGUncyBib3JkZXIgbWlnaHQgaW50cm9kdWNlIHN1Y2ggYSBtYXJnaW4uIFRoZSBtYXJnaW4gaXMgdXNlZCB0byBndWFyYW50ZWUgbm9uLW92ZXJsYXAgb2Ygb3RoZXIgZ3JhcGggZWxlbWVudHMgd2l0aCB0aG9zZSBwb3J0cyBvciBsYWJlbHMuIiksaE5lKSxYMSksdkFlKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LCRUZSksIiIpLCJObyBMYXlvdXQiKSwiTm8gbGF5b3V0IGlzIGRvbmUgZm9yIHRoZSBhc3NvY2lhdGVkIGVsZW1lbnQuIFRoaXMgaXMgdXNlZCB0byBtYXJrIHBhcnRzIG9mIGEgZGlhZ3JhbSB0byBhdm9pZCB0aGVpciBpbmNsdXNpb24gaW4gdGhlIGxheW91dCBncmFwaCwgb3IgdG8gbWFyayBwYXJ0cyBvZiB0aGUgbGF5b3V0IGdyYXBoIHRvIHByZXZlbnQgbGF5b3V0IGVuZ2luZXMgZnJvbSBwcm9jZXNzaW5nIHRoZW0uIElmIHlvdSB3aXNoIHRvIGV4Y2x1ZGUgdGhlIGNvbnRlbnRzIG9mIGEgY29tcG91bmQgbm9kZSBmcm9tIGF1dG9tYXRpYyBsYXlvdXQsIHdoaWxlIHRoZSBub2RlIGl0c2VsZiBpcyBzdGlsbCBjb25zaWRlcmVkIG9uIGl0cyBvd24gbGF5ZXIsIHVzZSB0aGUgJ0ZpeGVkIExheW91dCcgYWxnb3JpdGhtIGZvciB0aGF0IG5vZGUuIiksITEpLHlhKSxOcykscnMoaGEsaGUobGUoeGcsMSksaXQsMTcwLDAsW3pkLHl2LFMyXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxSeXQpLCIiKSwiU2NhbGUgRmFjdG9yIiksIlRoZSBzY2FsaW5nIGZhY3RvciB0byBiZSBhcHBsaWVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIG5vZGUgaW4gcmVjdXJzaXZlIGxheW91dC4gSXQgY2F1c2VzIHRoZSBjb3JyZXNwb25kaW5nIG5vZGUncyBzaXplIHRvIGJlIGFkanVzdGVkLCBhbmQgaXRzIHBvcnRzIGFuZCBsYWJlbHMgdG8gYmUgc2l6ZWQgYW5kIHBsYWNlZCBhY2NvcmRpbmdseSBhZnRlciB0aGUgbGF5b3V0IG9mIHRoYXQgbm9kZSBoYXMgYmVlbiBkZXRlcm1pbmVkIChhbmQgYmVmb3JlIHRoZSBub2RlIGl0c2VsZiBhbmQgaXRzIHNpYmxpbmdzIGFyZSBhcnJhbmdlZCkuIFRoZSBzY2FsaW5nIGlzIG5vdCByZXZlcnRlZCBhZnRlcndhcmRzLCBzbyB0aGUgcmVzdWx0aW5nIGxheW91dCBncmFwaCBjb250YWlucyB0aGUgYWRqdXN0ZWQgc2l6ZSBhbmQgcG9zaXRpb24gZGF0YS4gVGhpcyBvcHRpb24gaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgaWYgJ0xheW91dCBIaWVyYXJjaHknIGlzIHNldC4iKSwxKSxmbyksdGEpLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsanl0KSwiIiksIkNoaWxkIEFyZWEgV2lkdGgiKSwiVGhlIHdpZHRoIG9mIHRoZSBhcmVhIG9jY3VwaWVkIGJ5IHRoZSBsYWlkIG91dCBjaGlsZHJlbiBvZiBhIG5vZGUuIiksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LCR5dCksIiIpLCJDaGlsZCBBcmVhIEhlaWdodCIpLCJUaGUgaGVpZ2h0IG9mIHRoZSBhcmVhIG9jY3VwaWVkIGJ5IHRoZSBsYWlkIG91dCBjaGlsZHJlbiBvZiBhIG5vZGUuIiksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFBQKSwiIiksRHl0KSwiVHVybnMgdG9wZG93biBsYXlvdXQgb24gYW5kIG9mZi4gSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgaGllcmFyY2hpY2FsIGxheW91dCB3aWxsIGJlIGNvbXB1dGVkIGZpcnN0IGZvciB0aGUgcm9vdCBub2RlIGFuZCB0aGVuIGZvciBpdHMgY2hpbGRyZW4gcmVjdXJzaXZlbHkuIExheW91dHMgYXJlIHRoZW4gc2NhbGVkIGRvd24gdG8gZml0IHRoZSBhcmVhIHByb3ZpZGVkIGJ5IHRoZWlyIHBhcmVudHMuIEdyYXBocyBtdXN0IGZvbGxvdyBhIGNlcnRhaW4gc3RydWN0dXJlIGZvciB0b3Bkb3duIGxheW91dCB0byB3b3JrIHByb3Blcmx5LiB7QGxpbmsgVG9wZG93bk5vZGVUeXBlcy5QQVJBTExFTF9OT0RFfSBub2RlcyBtdXN0IGhhdmUgY2hpbGRyZW4gb2YgdHlwZSB7QGxpbmsgVG9wZG93bk5vZGVUeXBlcy5ISUVSQVJDSElDQUxfTk9ERX0gYW5kIG11c3QgZGVmaW5lIHtAbGluayB0b3Bkb3duLmhpZXJhcmNoaWNhbE5vZGVXaWR0aH0gYW5kIHtAbGluayB0b3Bkb3duLmhpZXJhcmNoaWNhbE5vZGVBc3BlY3RSYXRpb30gZm9yIHRoZWlyIGNoaWxkcmVuLiBGdXJ0aGVybW9yZSB0aGV5IG5lZWQgdG8gYmUgbGFpZCBvdXQgdXNpbmcgYW4gYWxnb3JpdGhtIHRoYXQgaXMgYSB7QGxpbmsgVG9wZG93bkxheW91dFByb3ZpZGVyfS4gSGllcmFyY2hpY2FsIG5vZGVzIGNhbiBhbHNvIGJlIHBhcmVudHMgb2Ygb3RoZXIgaGllcmFyY2hpY2FsIG5vZGVzIGFuZCBjYW4gb3B0aW9uYWxseSB1c2UgYSB7QGxpbmsgVG9wZG93blNpemVBcHByb3hpbWF0b3J9IHRvIGR5bmFtaWNhbGx5IHNldCBzaXplcyBkdXJpbmcgdG9wZG93biBsYXlvdXQuIEluIHRoaXMgY2FzZSB7QGxpbmsgdG9wZG93bi5oaWVyYXJjaGljYWxOb2RlV2lkdGh9IGFuZCB7QGxpbmsgdG9wZG93bi5oaWVyYXJjaGljYWxOb2RlQXNwZWN0UmF0aW99IHNob3VsZCBiZSBzZXQgb24gdGhlIG5vZGUgaXRzZWxmIHJhdGhlciB0aGFuIHRoZSBwYXJlbnQuIFRoZSB2YWx1ZXMgYXJlIHRoZW4gdXNlZCBieSB0aGUgc2l6ZSBhcHByb3hpbWF0b3IgYXMgYmFzZSB2YWx1ZXMuIEhpZXJhcmNoaWNhbCBub2RlcyByZXF1aXJlIHRoZSBsYXlvdXQgb3B0aW9uIHtAbGluayBub2RlU2l6ZS5maXhlZEdyYXBoU2l6ZX0gdG8gYmUgdHJ1ZSB0byBwcmV2ZW50IHRoZSBhbGdvcml0aG0gdXNlZCB0aGVyZSBmcm9tIHJlc2l6aW5nIHRoZSBoaWVyYXJjaGljYWwgbm9kZS4gVGhpcyBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBpZiAnSGllcmFyY2h5IEhhbmRsaW5nJyBpcyBzZXQgdG8gJ0lOQ0xVREVfQ0hJTERSRU4nIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLFFzKHQsUFAsUXcsbnVsbCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHp5dCksIiIpLCJBbmltYXRlIiksIldoZXRoZXIgdGhlIHNoaWZ0IGZyb20gdGhlIG9sZCBsYXlvdXQgdG8gdGhlIG5ldyBjb21wdXRlZCBsYXlvdXQgc2hhbGwgYmUgYW5pbWF0ZWQuIiksITApLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxxeXQpLCIiKSwiQW5pbWF0aW9uIFRpbWUgRmFjdG9yIiksIkZhY3RvciBmb3IgY29tcHV0YXRpb24gb2YgYW5pbWF0aW9uIHRpbWUuIFRoZSBoaWdoZXIgdGhlIHZhbHVlLCB0aGUgbG9uZ2VyIHRoZSBhbmltYXRpb24gdGltZS4gSWYgdGhlIHZhbHVlIGlzIDAsIHRoZSByZXN1bHRpbmcgdGltZSBpcyBhbHdheXMgZXF1YWwgdG8gdGhlIG1pbmltdW0gZGVmaW5lZCBieSAnTWluaW1hbCBBbmltYXRpb24gVGltZScuIikscHQoMTAwKSksVGMpLHJvKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEh5dCksIiIpLCJMYXlvdXQgQW5jZXN0b3JzIiksIldoZXRoZXIgdGhlIGhpZXJhcmNoeSBsZXZlbHMgb24gdGhlIHBhdGggZnJvbSB0aGUgc2VsZWN0ZWQgZWxlbWVudCB0byB0aGUgcm9vdCBvZiB0aGUgZGlhZ3JhbSBzaGFsbCBiZSBpbmNsdWRlZCBpbiB0aGUgbGF5b3V0IHByb2Nlc3MuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxWeXQpLCIiKSwiTWF4aW1hbCBBbmltYXRpb24gVGltZSIpLCJUaGUgbWF4aW1hbCB0aW1lIGZvciBhbmltYXRpb25zLCBpbiBtaWxsaXNlY29uZHMuIikscHQoNGUzKSksVGMpLHJvKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFV5dCksIiIpLCJNaW5pbWFsIEFuaW1hdGlvbiBUaW1lIiksIlRoZSBtaW5pbWFsIHRpbWUgZm9yIGFuaW1hdGlvbnMsIGluIG1pbGxpc2Vjb25kcy4iKSxwdCg0MDApKSxUYykscm8pLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsR3l0KSwiIiksIlByb2dyZXNzIEJhciIpLCJXaGV0aGVyIGEgcHJvZ3Jlc3MgYmFyIHNoYWxsIGJlIGRpc3BsYXllZCBkdXJpbmcgbGF5b3V0IGNvbXB1dGF0aW9ucy4iKSwhMSkseWEpLE5zKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEt5dCksIiIpLCJWYWxpZGF0ZSBHcmFwaCIpLCJXaGV0aGVyIHRoZSBncmFwaCBzaGFsbCBiZSB2YWxpZGF0ZWQgYmVmb3JlIGFueSBsYXlvdXQgYWxnb3JpdGhtIGlzIGFwcGxpZWQuIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYW5kIGF0IGxlYXN0IG9uZSBlcnJvciBpcyBmb3VuZCwgdGhlIGxheW91dCBwcm9jZXNzIGlzIGFib3J0ZWQgYW5kIGEgbWVzc2FnZSBpcyBzaG93biB0byB0aGUgdXNlci4iKSwhMSkseWEpLE5zKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFd5dCksIiIpLCJWYWxpZGF0ZSBPcHRpb25zIiksIldoZXRoZXIgbGF5b3V0IG9wdGlvbnMgc2hhbGwgYmUgdmFsaWRhdGVkIGJlZm9yZSBhbnkgbGF5b3V0IGFsZ29yaXRobSBpcyBhcHBsaWVkLiBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGFuZCBhdCBsZWFzdCBvbmUgZXJyb3IgaXMgZm91bmQsIHRoZSBsYXlvdXQgcHJvY2VzcyBpcyBhYm9ydGVkIGFuZCBhIG1lc3NhZ2UgaXMgc2hvd24gdG8gdGhlIHVzZXIuIiksITApLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxZeXQpLCIiKSwiWm9vbSB0byBGaXQiKSwiV2hldGhlciB0aGUgem9vbSBsZXZlbCBzaGFsbCBiZSBzZXQgdG8gdmlldyB0aGUgd2hvbGUgZGlhZ3JhbSBhZnRlciBsYXlvdXQuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxlU2UpLCJib3giKSwiQm94IExheW91dCBNb2RlIiksIkNvbmZpZ3VyZXMgdGhlIHBhY2tpbmcgbW9kZSB1c2VkIGJ5IHRoZSB7QGxpbmsgQm94TGF5b3V0UHJvdmlkZXJ9LiBJZiBTSU1QTEUgaXMgbm90IHJlcXVpcmVkIChuZWl0aGVyIHByaW9yaXRpZXMgYXJlIHVzZWQgbm9yIHRoZSBpbnRlcmFjdGl2ZSBtb2RlKSwgR1JPVVBfREVDIGNhbiBpbXByb3ZlIHRoZSBwYWNraW5nIGFuZCBkZWNyZWFzZSB0aGUgYXJlYS4gR1JPVVBfTUlYRUQgYW5kIEdST1VQX0lOQyBtYXksIGluIHZlcnkgc3BlY2lmaWMgc2NlbmFyaW9zLCB3b3JrIGJldHRlci4iKSx0TmUpLHBzKSxjUGUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsTFRlKSxVMSksIkNvbW1lbnQgQ29tbWVudCBTcGFjaW5nIiksIlNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYSBjb21tZW50IGJveCBhbmQgb3RoZXIgY29tbWVudCBib3hlcyBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgbm9kZS4gVGhlIHNwYWNlIGxlZnQgYmV0d2VlbiBjb21tZW50IGJveGVzIG9mIGRpZmZlcmVudCBub2RlcyBpcyBjb250cm9sbGVkIGJ5IHRoZSBub2RlLW5vZGUgc3BhY2luZy4iKSwxMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LE1UZSksVTEpLCJDb21tZW50IE5vZGUgU3BhY2luZyIpLCJTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGEgbm9kZSBhbmQgaXRzIGNvbm5lY3RlZCBjb21tZW50IGJveGVzLiBUaGUgc3BhY2UgbGVmdCBiZXR3ZWVuIGEgbm9kZSBhbmQgdGhlIGNvbW1lbnRzIG9mIGFub3RoZXIgbm9kZSBpcyBjb250cm9sbGVkIGJ5IHRoZSBub2RlLW5vZGUgc3BhY2luZy4iKSwxMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LF9oZSksVTEpLCJDb21wb25lbnRzIFNwYWNpbmciKSwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBwYWlycyBvZiBjb25uZWN0ZWQgY29tcG9uZW50cy4gVGhpcyBvcHRpb24gaXMgb25seSByZWxldmFudCBpZiAnc2VwYXJhdGVDb25uZWN0ZWRDb21wb25lbnRzJyBpcyBhY3RpdmF0ZWQuIiksMjApLGZvKSx0YSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxEVGUpLFUxKSwiRWRnZSBTcGFjaW5nIiksIlNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYW55IHR3byBlZGdlcy4gTm90ZSB0aGF0IHdoaWxlIHRoaXMgY2FuIHNvbWV3aGF0IGVhc2lseSBiZSBzYXRpc2ZpZWQgZm9yIHRoZSBzZWdtZW50cyBvZiBvcnRob2dvbmFsbHkgZHJhd24gZWRnZXMsIGl0IGlzIGhhcmRlciBmb3IgZ2VuZXJhbCBwb2x5bGluZXMgb3Igc3BsaW5lcy4iKSwxMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LE9oZSksVTEpLCJFZGdlIExhYmVsIFNwYWNpbmciKSwiVGhlIG1pbmltYWwgZGlzdGFuY2UgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYSBsYWJlbCBhbmQgdGhlIGVkZ2UgaXQgaXMgYXNzb2NpYXRlZCB3aXRoLiBOb3RlIHRoYXQgdGhlIHBsYWNlbWVudCBvZiBhIGxhYmVsIGlzIGluZmx1ZW5jZWQgYnkgdGhlICdlZGdlbGFiZWxzLnBsYWNlbWVudCcgb3B0aW9uLiIpLDIpLGZvKSx0YSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxkZmUpLFUxKSwiRWRnZSBOb2RlIFNwYWNpbmciKSwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBub2RlcyBhbmQgZWRnZXMuIiksMTApLGZvKSx0YSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxJVGUpLFUxKSwiTGFiZWwgU3BhY2luZyIpLCJEZXRlcm1pbmVzIHRoZSBhbW91bnQgb2Ygc3BhY2UgdG8gYmUgbGVmdCBiZXR3ZWVuIHR3byBsYWJlbHMgb2YgdGhlIHNhbWUgZ3JhcGggZWxlbWVudC4iKSwwKSxmbyksdGEpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsUFRlKSxVMSksIkxhYmVsIE5vZGUgU3BhY2luZyIpLCJTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGxhYmVscyBhbmQgdGhlIGJvcmRlciBvZiBub2RlIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aC4gTm90ZSB0aGF0IHRoZSBwbGFjZW1lbnQgb2YgYSBsYWJlbCBpcyBpbmZsdWVuY2VkIGJ5IHRoZSAnbm9kZWxhYmVscy5wbGFjZW1lbnQnIG9wdGlvbi4iKSw1KSxmbyksdGEpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsT1RlKSxVMSksIkhvcml6b250YWwgc3BhY2luZyBiZXR3ZWVuIExhYmVsIGFuZCBQb3J0IiksIkhvcml6b250YWwgc3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBsYWJlbHMgYW5kIHRoZSBwb3J0cyB0aGV5IGFyZSBhc3NvY2lhdGVkIHdpdGguIE5vdGUgdGhhdCB0aGUgcGxhY2VtZW50IG9mIGEgbGFiZWwgaXMgaW5mbHVlbmNlZCBieSB0aGUgJ3BvcnRsYWJlbHMucGxhY2VtZW50JyBvcHRpb24uIiksMSksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LE5UZSksVTEpLCJWZXJ0aWNhbCBzcGFjaW5nIGJldHdlZW4gTGFiZWwgYW5kIFBvcnQiKSwiVmVydGljYWwgc3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBsYWJlbHMgYW5kIHRoZSBwb3J0cyB0aGV5IGFyZSBhc3NvY2lhdGVkIHdpdGguIE5vdGUgdGhhdCB0aGUgcGxhY2VtZW50IG9mIGEgbGFiZWwgaXMgaW5mbHVlbmNlZCBieSB0aGUgJ3BvcnRsYWJlbHMucGxhY2VtZW50JyBvcHRpb24uIiksMSksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEp5KSxVMSksIk5vZGUgU3BhY2luZyIpLCJUaGUgbWluaW1hbCBkaXN0YW5jZSB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBlYWNoIHR3byBub2Rlcy4iKSwyMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEJUZSksVTEpLCJOb2RlIFNlbGYgTG9vcCBTcGFjaW5nIiksIlNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYSBub2RlIGFuZCBpdHMgc2VsZiBsb29wcy4iKSwxMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEZUZSksVTEpLCJQb3J0IFNwYWNpbmciKSwiU3BhY2luZyBiZXR3ZWVuIHBhaXJzIG9mIHBvcnRzIG9mIHRoZSBzYW1lIG5vZGUuIiksMTApLGZvKSx0YSkscnMoUG4saGUobGUoeGcsMSksaXQsMTcwLDAsW2hhXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxSVGUpLFUxKSwiSW5kaXZpZHVhbCBTcGFjaW5nIiksIkFsbG93cyB0byBzcGVjaWZ5IGluZGl2aWR1YWwgc3BhY2luZyB2YWx1ZXMgZm9yIGdyYXBoIGVsZW1lbnRzIHRoYXQgc2hhbGwgYmUgZGlmZmVyZW50IGZyb20gdGhlIHZhbHVlIHNwZWNpZmllZCBmb3IgdGhlIGVsZW1lbnQncyBwYXJlbnQuIiksWDEpLGdfdCkscnMoaGEsaGUobGUoeGcsMSksaXQsMTcwLDAsW3pkLHl2LFMyXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxhQ2UpLFUxKSwiQWRkaXRpb25hbCBQb3J0IFNwYWNlIiksIkFkZGl0aW9uYWwgc3BhY2UgYXJvdW5kIHRoZSBzZXRzIG9mIHBvcnRzIG9uIGVhY2ggbm9kZSBzaWRlLiBGb3IgZWFjaCBzaWRlIG9mIGEgbm9kZSwgdGhpcyBvcHRpb24gY2FuIHJlc2VydmUgYWRkaXRpb25hbCBzcGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb3J0cyBvbiBlYWNoIHNpZGUuIEZvciBleGFtcGxlLCBhIHRvcCBzcGFjaW5nIG9mIDIwIG1ha2VzIHN1cmUgdGhhdCB0aGUgZmlyc3QgcG9ydCBvbiB0aGUgd2VzdGVybiBhbmQgZWFzdGVybiBzaWRlIGlzIDIwIHVuaXRzIGF3YXkgZnJvbSB0aGUgbm9ydGhlcm4gYm9yZGVyLiIpLE5OZSksWDEpLHZBZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxiZmUpLEp5dCksIkxheW91dCBQYXJ0aXRpb24iKSwiUGFydGl0aW9uIHRvIHdoaWNoIHRoZSBub2RlIGJlbG9uZ3MuIFRoaXMgcmVxdWlyZXMgTGF5b3V0IFBhcnRpdGlvbmluZyB0byBiZSBhY3RpdmUuIE5vZGVzIHdpdGggbG93ZXIgcGFydGl0aW9uIElEcyB3aWxsIGFwcGVhciB0byB0aGUgbGVmdCBvZiBub2RlcyB3aXRoIGhpZ2hlciBwYXJ0aXRpb24gSURzIChhc3N1bWluZyBhIGxlZnQtdG8tcmlnaHQgbGF5b3V0IGRpcmVjdGlvbikuIiksVGMpLHJvKSxycyhQbixoZShsZSh4ZywxKSxpdCwxNzAsMCxbaGFdKSkpKSksUXModCxiZmUscGZlLEJTdCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHBmZSksSnl0KSwiTGF5b3V0IFBhcnRpdGlvbmluZyIpLCJXaGV0aGVyIHRvIGFjdGl2YXRlIHBhcnRpdGlvbmVkIGxheW91dC4gVGhpcyB3aWxsIGFsbG93IHRvIGdyb3VwIG5vZGVzIHRocm91Z2ggdGhlIExheW91dCBQYXJ0aXRpb24gb3B0aW9uLiBhIHBhaXIgb2Ygbm9kZXMgd2l0aCBkaWZmZXJlbnQgcGFydGl0aW9uIGluZGljZXMgaXMgdGhlbiBwbGFjZWQgc3VjaCB0aGF0IHRoZSBub2RlIHdpdGggbG93ZXIgaW5kZXggaXMgcGxhY2VkIHRvIHRoZSBsZWZ0IG9mIHRoZSBvdGhlciBub2RlICh3aXRoIGxlZnQtdG8tcmlnaHQgbGF5b3V0IGRpcmVjdGlvbikuIERlcGVuZGluZyBvbiB0aGUgbGF5b3V0IGFsZ29yaXRobSwgdGhpcyBtYXkgb25seSBiZSBndWFyYW50ZWVkIHRvIHdvcmsgaWYgYWxsIG5vZGVzIGhhdmUgYSBsYXlvdXQgcGFydGl0aW9uIGNvbmZpZ3VyZWQsIG9yIGF0IGxlYXN0IGlmIGVkZ2VzIHRoYXQgY3Jvc3MgcGFydGl0aW9ucyBhcmUgbm90IHBhcnQgb2YgYSBwYXJ0aXRpb24tY3Jvc3NpbmcgY3ljbGUuIiksd05lKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsVVRlKSxaeXQpLCJOb2RlIExhYmVsIFBhZGRpbmciKSwiRGVmaW5lIHBhZGRpbmcgZm9yIG5vZGUgbGFiZWxzIHRoYXQgYXJlIHBsYWNlZCBpbnNpZGUgb2YgYSBub2RlLiIpLGROZSksWDEpLHdBZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxmVCksWnl0KSwiTm9kZSBMYWJlbCBQbGFjZW1lbnQiKSwiSGludHMgZm9yIHdoZXJlIG5vZGUgbGFiZWxzIGFyZSB0byBiZSBwbGFjZWQ7IGlmIGVtcHR5LCB0aGUgbm9kZSBsYWJlbCdzIHBvc2l0aW9uIGlzIG5vdCBtb2RpZmllZC4iKSxnTmUpLHQ5KSxLbykscnMoaGEsaGUobGUoeGcsMSksaXQsMTcwLDAsW1MyXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxXVGUpLFJHKSwiUG9ydCBBbGlnbm1lbnQiKSwiRGVmaW5lcyB0aGUgZGVmYXVsdCBwb3J0IGRpc3RyaWJ1dGlvbiBmb3IgYSBub2RlLiBNYXkgYmUgb3ZlcnJpZGRlbiBmb3IgZWFjaCBzaWRlIGluZGl2aWR1YWxseS4iKSx4TmUpLHBzKSxPTSksdW4oaGEpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxZVGUpLFJHKSwiUG9ydCBBbGlnbm1lbnQgKE5vcnRoKSIpLCJEZWZpbmVzIGhvdyBwb3J0cyBvbiB0aGUgbm9ydGhlcm4gc2lkZSBhcmUgcGxhY2VkLCBvdmVycmlkaW5nIHRoZSBub2RlJ3MgZ2VuZXJhbCBwb3J0IGFsaWdubWVudC4iKSxwcyksT00pLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsWFRlKSxSRyksIlBvcnQgQWxpZ25tZW50IChTb3V0aCkiKSwiRGVmaW5lcyBob3cgcG9ydHMgb24gdGhlIHNvdXRoZXJuIHNpZGUgYXJlIHBsYWNlZCwgb3ZlcnJpZGluZyB0aGUgbm9kZSdzIGdlbmVyYWwgcG9ydCBhbGlnbm1lbnQuIikscHMpLE9NKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LFFUZSksUkcpLCJQb3J0IEFsaWdubWVudCAoV2VzdCkiKSwiRGVmaW5lcyBob3cgcG9ydHMgb24gdGhlIHdlc3Rlcm4gc2lkZSBhcmUgcGxhY2VkLCBvdmVycmlkaW5nIHRoZSBub2RlJ3MgZ2VuZXJhbCBwb3J0IGFsaWdubWVudC4iKSxwcyksT00pLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsSlRlKSxSRyksIlBvcnQgQWxpZ25tZW50IChFYXN0KSIpLCJEZWZpbmVzIGhvdyBwb3J0cyBvbiB0aGUgZWFzdGVybiBzaWRlIGFyZSBwbGFjZWQsIG92ZXJyaWRpbmcgdGhlIG5vZGUncyBnZW5lcmFsIHBvcnQgYWxpZ25tZW50LiIpLHBzKSxPTSksdW4oaGEpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCx4NiksUmZlKSwiTm9kZSBTaXplIENvbnN0cmFpbnRzIiksIldoYXQgc2hvdWxkIGJlIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGNhbGN1bGF0aW5nIGEgbm9kZSdzIHNpemUuIEVtcHR5IHNpemUgY29uc3RyYWludHMgc3BlY2lmeSB0aGF0IGEgbm9kZSdzIHNpemUgaXMgYWxyZWFkeSBmaXhlZCBhbmQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiIpLHBOZSksdDkpLEJNKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LE54KSxSZmUpLCJOb2RlIFNpemUgT3B0aW9ucyIpLCJPcHRpb25zIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb2YgdGhlIHNpemUgY29uc3RyYWludHMgc2V0IG9uIGEgbm9kZS4gRWFjaCBtZW1iZXIgb2YgdGhlIHNldCBzcGVjaWZpZXMgc29tZXRoaW5nIHRoYXQgc2hvdWxkIGJlIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGNhbGN1bGF0aW5nIG5vZGUgc2l6ZXMuIFRoZSBlbXB0eSBzZXQgY29ycmVzcG9uZHMgdG8gbm8gZnVydGhlciBtb2RpZmljYXRpb25zLiIpLG1OZSksdDkpLGVQZSksdW4oaGEpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxQeCksUmZlKSwiTm9kZSBTaXplIE1pbmltdW0iKSwiVGhlIG1pbmltYWwgc2l6ZSB0byB3aGljaCBhIG5vZGUgY2FuIGJlIHJlZHVjZWQuIiksYk5lKSxYMSksRWEpLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsaFQpLFJmZSksIkZpeGVkIEdyYXBoIFNpemUiKSwiQnkgZGVmYXVsdCwgdGhlIGZpeGVkIGxheW91dCBwcm92aWRlciB3aWxsIGVubGFyZ2UgYSBncmFwaCB1bnRpbCBpdCBpcyBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBpdHMgY2hpbGRyZW4uIElmIHRoaXMgb3B0aW9uIGlzIHNldCwgaXQgd29uJ3QgZG8gc28uIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxlQ2UpLGZmZSksIkVkZ2UgTGFiZWwgUGxhY2VtZW50IiksIkdpdmVzIGEgaGludCBvbiB3aGVyZSB0byBwdXQgZWRnZSBsYWJlbHMuIiksaU5lKSxwcyksRk5lKSx1bihTMikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGNHKSxmZmUpLCJJbmxpbmUgRWRnZSBMYWJlbHMiKSwiSWYgdHJ1ZSwgYW4gZWRnZSBsYWJlbCBpcyBwbGFjZWQgZGlyZWN0bHkgb24gaXRzIGVkZ2UuIE1heSBvbmx5IGFwcGx5IHRvIGNlbnRlciBlZGdlIGxhYmVscy4gVGhpcyBraW5kIG9mIGxhYmVsIHBsYWNlbWVudCBpcyBvbmx5IGFkdmlzYWJsZSBpZiB0aGUgbGFiZWwncyByZW5kZXJpbmcgaXMgc3VjaCB0aGF0IGl0IGlzIG5vdCBjcm9zc2VkIGJ5IGl0cyBlZGdlIGFuZCB0aHVzIHN0YXlzIGxlZ2libGUuIiksITEpLHlhKSxOcyksdW4oUzIpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxhT24pLCJmb250IiksIkZvbnQgTmFtZSIpLCJGb250IG5hbWUgdXNlZCBmb3IgYSBsYWJlbC4iKSxKNiksenQpLHVuKFMyKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsWHl0KSwiZm9udCIpLCJGb250IFNpemUiKSwiRm9udCBzaXplIHVzZWQgZm9yIGEgbGFiZWwuIiksVGMpLHJvKSx1bihTMikpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LGlDZSksamZlKSwiUG9ydCBBbmNob3IgT2Zmc2V0IiksIlRoZSBvZmZzZXQgdG8gdGhlIHBvcnQgcG9zaXRpb24gd2hlcmUgY29ubmVjdGlvbnMgc2hhbGwgYmUgYXR0YWNoZWQuIiksWDEpLEVhKSx1bih5dikpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LHRDZSksamZlKSwiUG9ydCBJbmRleCIpLCJUaGUgaW5kZXggb2YgYSBwb3J0IGluIHRoZSBmaXhlZCBvcmRlciBhcm91bmQgYSBub2RlLiBUaGUgb3JkZXIgaXMgYXNzdW1lZCBhcyBjbG9ja3dpc2UsIHN0YXJ0aW5nIHdpdGggdGhlIGxlZnRtb3N0IHBvcnQgb24gdGhlIHRvcCBzaWRlLiBUaGlzIG9wdGlvbiBtdXN0IGJlIHNldCBpZiAnUG9ydCBDb25zdHJhaW50cycgaXMgc2V0IHRvIEZJWEVEX09SREVSIGFuZCBubyBzcGVjaWZpYyBwb3NpdGlvbnMgYXJlIGdpdmVuIGZvciB0aGUgcG9ydHMuIEFkZGl0aW9uYWxseSwgdGhlIG9wdGlvbiAnUG9ydCBTaWRlJyBtdXN0IGJlIGRlZmluZWQgaW4gdGhpcyBjYXNlLiIpLFRjKSxybyksdW4oeXYpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCx6VGUpLGpmZSksIlBvcnQgU2lkZSIpLCJUaGUgc2lkZSBvZiBhIG5vZGUgb24gd2hpY2ggYSBwb3J0IGlzIHNpdHVhdGVkLiBUaGlzIG9wdGlvbiBtdXN0IGJlIHNldCBpZiAnUG9ydCBDb25zdHJhaW50cycgaXMgc2V0IHRvIEZJWEVEX1NJREUgb3IgRklYRURfT1JERVIgYW5kIG5vIHNwZWNpZmljIHBvc2l0aW9ucyBhcmUgZ2l2ZW4gZm9yIHRoZSBwb3J0cy4iKSxTTmUpLHBzKSxPbyksdW4oeXYpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxqVGUpLGpmZSksIlBvcnQgQm9yZGVyIE9mZnNldCIpLCJUaGUgb2Zmc2V0IG9mIHBvcnRzIG9uIHRoZSBub2RlIGJvcmRlci4gV2l0aCBhIHBvc2l0aXZlIG9mZnNldCB0aGUgcG9ydCBpcyBtb3ZlZCBvdXRzaWRlIG9mIHRoZSBub2RlLCB3aGlsZSB3aXRoIGEgbmVnYXRpdmUgb2Zmc2V0IHRoZSBwb3J0IGlzIG1vdmVkIHRvd2FyZHMgdGhlIGluc2lkZS4gQW4gb2Zmc2V0IG9mIDAgbWVhbnMgdGhhdCB0aGUgcG9ydCBpcyBwbGFjZWQgZGlyZWN0bHkgb24gdGhlIG5vZGUgYm9yZGVyLCBpLmUuIGlmIHRoZSBwb3J0IHNpZGUgaXMgbm9ydGgsIHRoZSBwb3J0J3Mgc291dGggYm9yZGVyIHRvdWNoZXMgdGhlIG5vZGVzJ3Mgbm9ydGggYm9yZGVyOyBpZiB0aGUgcG9ydCBzaWRlIGlzIGVhc3QsIHRoZSBwb3J0J3Mgd2VzdCBib3JkZXIgdG91Y2hlcyB0aGUgbm9kZXMncyBlYXN0IGJvcmRlcjsgaWYgdGhlIHBvcnQgc2lkZSBpcyBzb3V0aCwgdGhlIHBvcnQncyBub3J0aCBib3JkZXIgdG91Y2hlcyB0aGUgbm9kZSdzIHNvdXRoIGJvcmRlcjsgaWYgdGhlIHBvcnQgc2lkZSBpcyB3ZXN0LCB0aGUgcG9ydCdzIGVhc3QgYm9yZGVyIHRvdWNoZXMgdGhlIG5vZGUncyB3ZXN0IGJvcmRlci4iKSxmbyksdGEpLHVuKHl2KSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsZFQpLGlTZSksIlBvcnQgTGFiZWwgUGxhY2VtZW50IiksIkRlY2lkZXMgb24gYSBwbGFjZW1lbnQgbWV0aG9kIGZvciBwb3J0IGxhYmVsczsgaWYgZW1wdHksIHRoZSBub2RlIGxhYmVsJ3MgcG9zaXRpb24gaXMgbm90IG1vZGlmaWVkLiIpLFROZSksdDkpLGNZKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEdUZSksaVNlKSwiUG9ydCBMYWJlbHMgTmV4dCB0byBQb3J0IiksIlVzZSAncG9ydExhYmVscy5wbGFjZW1lbnQnOiBORVhUX1RPX1BPUlRfT0ZfUE9TU0lCTEUuIiksITEpLHlhKSxOcyksdW4oaGEpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxLVGUpLGlTZSksIlRyZWF0IFBvcnQgTGFiZWxzIGFzIEdyb3VwIiksIklmIHRoaXMgb3B0aW9uIGlzIHRydWUgKGRlZmF1bHQpLCB0aGUgbGFiZWxzIG9mIGEgcG9ydCB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBncm91cCB3aGVuIGl0IGNvbWVzIHRvIGNlbnRlcmluZyB0aGVtIG5leHQgdG8gdGhlaXIgcG9ydC4gSWYgdGhpcyBvcHRpb24gaXMgZmFsc2UsIG9ubHkgdGhlIGZpcnN0IGxhYmVsIHdpbGwgYmUgY2VudGVyZWQgbmV4dCB0byB0aGUgcG9ydCwgd2l0aCB0aGUgb3RoZXJzIGJlaW5nIHBsYWNlZCBiZWxvdy4gVGhpcyBvbmx5IGFwcGxpZXMgdG8gbGFiZWxzIG9mIGVhc3Rlcm4gYW5kIHdlc3Rlcm4gcG9ydHMgYW5kIHdpbGwgaGF2ZSBubyBlZmZlY3QgaWYgbGFiZWxzIGFyZSBub3QgcGxhY2VkIG5leHQgdG8gdGhlaXIgcG9ydC4iKSwhMCkseWEpLE5zKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEJQKSxLUCksIlRvcGRvd24gU2NhbGUgRmFjdG9yIiksIlRoZSBzY2FsaW5nIGZhY3RvciB0byBiZSBhcHBsaWVkIHRvIHRoZSBub2RlcyBsYWlkIG91dCB3aXRoaW4gdGhlIG5vZGUgaW4gcmVjdXJzaXZlIHRvcGRvd24gbGF5b3V0LiBUaGUgZGlmZmVyZW5jZSB0byAnU2NhbGUgRmFjdG9yJyBpcyB0aGF0IHRoZSBub2RlIGl0c2VsZiBpcyBub3Qgc2NhbGVkLiBUaGlzIHZhbHVlIGhhcyB0byBiZSBzZXQgb24gaGllcmFyY2hpY2FsIG5vZGVzLiIpLDEpLGZvKSx0YSksdW4oUG4pKSkpLFFzKHQsQlAsUXcsVlN0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsblNlKSxLUCksIlRvcGRvd24gU2l6ZSBBcHByb3hpbWF0b3IiKSwiVGhlIHNpemUgYXBwcm94aW1hdG9yIHRvIGJlIHVzZWQgdG8gc2V0IHNpemVzIG9mIGhpZXJhcmNoaWNhbCBub2RlcyBkdXJpbmcgdG9wZG93biBsYXlvdXQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIG51bGwsIHdoaWNoIHJlc3VsdHMgaW4gbm9kZXMga2VlcGluZyB3aGF0ZXZlciBzaXplIGlzIGRlZmluZWQgZm9yIHRoZW0gZS5nLiB0aHJvdWdoIHBhcmVudCBwYXJhbGxlbCBub2RlIG9yIGJ5IG1hbnVhbGx5IHNldHRpbmcgdGhlIHNpemUuIiksbnVsbCkscHMpLGdZKSx1bihoYSkpKSksUXModCxuU2UsUXcsVVN0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsRlApLEtQKSwiVG9wZG93biBIaWVyYXJjaGljYWwgTm9kZSBXaWR0aCIpLCJUaGUgZml4ZWQgc2l6ZSBvZiBhIGhpZXJhcmNoaWNhbCBub2RlIHdoZW4gdXNpbmcgdG9wZG93biBsYXlvdXQuIElmIHRoaXMgdmFsdWUgaXMgc2V0IG9uIGEgcGFyYWxsZWwgbm9kZSBpdCBhcHBsaWVzIHRvIGl0cyBjaGlsZHJlbiwgd2hlbiBzZXQgb24gYSBoaWVyYXJjaGljYWwgbm9kZSBpdCBhcHBsaWVzIHRvIHRoZSBub2RlIGl0c2VsZi4iKSwxNTApLGZvKSx0YSkscnMoUG4saGUobGUoeGcsMSksaXQsMTcwLDAsW2hhXSkpKSkpLFFzKHQsRlAsUXcsbnVsbCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFJQKSxLUCksIlRvcGRvd24gSGllcmFyY2hpY2FsIE5vZGUgQXNwZWN0IFJhdGlvIiksIlRoZSBmaXhlZCBhc3BlY3QgcmF0aW8gb2YgYSBoaWVyYXJjaGljYWwgbm9kZSB3aGVuIHVzaW5nIHRvcGRvd24gbGF5b3V0LiBEZWZhdWx0IGlzIDEvc3FydCgyKS4gSWYgdGhpcyB2YWx1ZSBpcyBzZXQgb24gYSBwYXJhbGxlbCBub2RlIGl0IGFwcGxpZXMgdG8gaXRzIGNoaWxkcmVuLCB3aGVuIHNldCBvbiBhIGhpZXJhcmNoaWNhbCBub2RlIGl0IGFwcGxpZXMgdG8gdGhlIG5vZGUgaXRzZWxmLiIpLDEuNDE0KSxmbyksdGEpLHJzKFBuLGhlKGxlKHhnLDEpLGl0LDE3MCwwLFtoYV0pKSkpKSxRcyh0LFJQLFF3LG51bGwpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxRdyksS1ApLCJUb3Bkb3duIE5vZGUgVHlwZSIpLCJUaGUgZGlmZmVyZW50IG5vZGUgdHlwZXMgdXNlZCBmb3IgdG9wZG93biBsYXlvdXQuIElmIHRoZSBub2RlIHR5cGUgaXMgc2V0IHRvIHtAbGluayBUb3Bkb3duTm9kZVR5cGVzLlBBUkFMTEVMX05PREV9IHRoZSBhbGdvcml0aG0gbXVzdCBiZSBzZXQgdG8gYSB7QGxpbmsgVG9wZG93bkxheW91dFByb3ZpZGVyfSBzdWNoIGFzIHtAbGluayBUb3Bkb3duUGFja2luZ30uIFRoZSB7QGxpbmsgbm9kZVNpemUuZml4ZWRHcmFwaFNpemV9IG9wdGlvbiBpcyB0ZWNobmljYWxseSBvbmx5IHJlcXVpcmVkIGZvciBoaWVyYXJjaGljYWwgbm9kZXMuIiksbnVsbCkscHMpLG5QZSksdW4oaGEpKSkpLFFzKHQsUXcsaFQsbnVsbCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHJTZSksS1ApLCJUb3Bkb3duIFNjYWxlIENhcCIpLCJEZXRlcm1pbmVzIHRoZSB1cHBlciBsaW1pdCBmb3IgdGhlIHRvcGRvd24gc2NhbGUgZmFjdG9yLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxLjAgd2hpY2ggZW5zdXJlcyB0aGF0IG5lc3RlZCBjaGlsZHJlbiBuZXZlciBlbmQgdXAgYXBwZWFyaW5nIGxhcmdlciB0aGFuIHRoZWlyIHBhcmVudHMgaW4gdGVybXMgb2YgdW5pdCBzaXplcyBzdWNoIGFzIHRoZSBmb250IHNpemUuIElmIHRoZSBsaW1pdCBpcyBsYXJnZXIsIG5vZGVzIHdpbGwgZnVsbHkgdXRpbGl6ZSB0aGUgYXZhaWxhYmxlIHNwYWNlLCBidXQgaXQgaXMgY291bnRlcmluaXVpdGl2ZSBmb3IgaW5uZXIgbm9kZXMgdG8gaGF2ZSBhIGxhcmdlciBzY2FsZSB0aGFuIG91dGVyIG5vZGVzLiIpLDEpLGZvKSx0YSksdW4oUG4pKSkpLFFzKHQsclNlLFF3LEhTdCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEhUZSksZTR0KSwiQWN0aXZhdGUgSW5zaWRlIFNlbGYgTG9vcHMiKSwiV2hldGhlciB0aGlzIG5vZGUgYWxsb3dzIHRvIHJvdXRlIHNlbGYgbG9vcHMgaW5zaWRlIG9mIGl0IGluc3RlYWQgb2YgYXJvdW5kIGl0LiBJZiBzZXQgdG8gdHJ1ZSwgdGhpcyB3aWxsIG1ha2UgdGhlIG5vZGUgYSBjb21wb3VuZCBub2RlIGlmIGl0IGlzbid0IGFscmVhZHksIGFuZCB3aWxsIHJlcXVpcmUgdGhlIGxheW91dCBhbGdvcml0aG0gdG8gc3VwcG9ydCBjb21wb3VuZCBub2RlcyB3aXRoIGhpZXJhcmNoaWNhbCBwb3J0cy4iKSwhMSkseWEpLE5zKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFZUZSksZTR0KSwiSW5zaWRlIFNlbGYgTG9vcCIpLCJXaGV0aGVyIGEgc2VsZiBsb29wIHNob3VsZCBiZSByb3V0ZWQgaW5zaWRlIGEgbm9kZSBpbnN0ZWFkIG9mIGFyb3VuZCB0aGF0IG5vZGUuIiksITEpLHlhKSxOcyksdW4oemQpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxBaGUpLCJlZGdlIiksIkVkZ2UgVGhpY2tuZXNzIiksIlRoZSB0aGlja25lc3Mgb2YgYW4gZWRnZS4gVGhpcyBpcyBhIGhpbnQgb24gdGhlIGxpbmUgd2lkdGggdXNlZCB0byBkcmF3IGFuIGVkZ2UsIHBvc3NpYmx5IHJlcXVpcmluZyBtb3JlIHNwYWNlIHRvIGJlIHJlc2VydmVkIGZvciBpdC4iKSwxKSxmbyksdGEpLHVuKHpkKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsUXl0KSwiZWRnZSIpLCJFZGdlIFR5cGUiKSwiVGhlIHR5cGUgb2YgYW4gZWRnZS4gVGhpcyBpcyB1c3VhbGx5IHVzZWQgZm9yIFVNTCBjbGFzcyBkaWFncmFtcywgd2hlcmUgYXNzb2NpYXRpb25zIG11c3QgYmUgaGFuZGxlZCBkaWZmZXJlbnRseSBmcm9tIGdlbmVyYWxpemF0aW9ucy4iKSxjTmUpLHBzKSxITmUpLHVuKHpkKSkpKSxtXyh0LG5ldyBueChmXyhDayhUayhuZXcgbnksc3IpLCJMYXllcmVkIiksJ1RoZSBsYXllci1iYXNlZCBtZXRob2Qgd2FzIGludHJvZHVjZWQgYnkgU3VnaXlhbWEsIFRhZ2F3YSBhbmQgVG9kYSBpbiAxOTgxLiBJdCBlbXBoYXNpemVzIHRoZSBkaXJlY3Rpb24gb2YgZWRnZXMgYnkgcG9pbnRpbmcgYXMgbWFueSBlZGdlcyBhcyBwb3NzaWJsZSBpbnRvIHRoZSBzYW1lIGRpcmVjdGlvbi4gVGhlIG5vZGVzIGFyZSBhcnJhbmdlZCBpbiBsYXllcnMsIHdoaWNoIGFyZSBzb21ldGltZXMgY2FsbGVkICJoaWVyYXJjaGllcyIsIGFuZCB0aGVuIHJlb3JkZXJlZCBzdWNoIHRoYXQgdGhlIG51bWJlciBvZiBlZGdlIGNyb3NzaW5ncyBpcyBtaW5pbWl6ZWQuIEFmdGVyd2FyZHMsIGNvbmNyZXRlIGNvb3JkaW5hdGVzIGFyZSBjb21wdXRlZCBmb3IgdGhlIG5vZGVzIGFuZCBlZGdlIGJlbmQgcG9pbnRzLicpKSksbV8odCxuZXcgbngoZl8oQ2soVGsobmV3IG55LCJvcmcuZWNsaXBzZS5lbGsub3J0aG9nb25hbCIpLCJPcnRob2dvbmFsIiksYE9ydGhvZ29uYWwgbWV0aG9kcyB0aGF0IGZvbGxvdyB0aGUgInRvcG9sb2d5LXNoYXBlLW1ldHJpY3MiIGFwcHJvYWNoIGJ5IEJhdGluaSwgTmFyZGVsbGkgYW5kIFRhbWFzc2lhICc4Ni4gVGhlIGZpcnN0IHBoYXNlIGRldGVybWluZXMgdGhlIHRvcG9sb2d5IG9mIHRoZSBkcmF3aW5nIGJ5IGFwcGx5aW5nIGEgcGxhbmFyaXphdGlvbiB0ZWNobmlxdWUsIHdoaWNoIHJlc3VsdHMgaW4gYSBwbGFuYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdyYXBoLiBUaGUgb3J0aG9nb25hbCBzaGFwZSBpcyBjb21wdXRlZCBpbiB0aGUgc2Vjb25kIHBoYXNlLCB3aGljaCBhaW1zIGF0IG1pbmltaXppbmcgdGhlIG51bWJlciBvZiBlZGdlIGJlbmRzLCBhbmQgaXMgY2FsbGVkIG9ydGhvZ29uYWxpemF0aW9uLiBUaGUgdGhpcmQgcGhhc2UgbGVhZHMgdG8gY29uY3JldGUgY29vcmRpbmF0ZXMgZm9yIG5vZGVzIGFuZCBlZGdlIGJlbmQgcG9pbnRzIGJ5IGFwcGx5aW5nIGEgY29tcGFjdGlvbiBtZXRob2QsIHRodXMgZGVmaW5pbmcgdGhlIG1ldHJpY3MuYCkpKSxtXyh0LG5ldyBueChmXyhDayhUayhuZXcgbnksWXUpLCJGb3JjZSIpLCJMYXlvdXQgYWxnb3JpdGhtcyB0aGF0IGZvbGxvdyBwaHlzaWNhbCBhbmFsb2dpZXMgYnkgc2ltdWxhdGluZyBhIHN5c3RlbSBvZiBhdHRyYWN0aXZlIGFuZCByZXB1bHNpdmUgZm9yY2VzLiBUaGUgZmlyc3Qgc3VjY2Vzc2Z1bCBtZXRob2Qgb2YgdGhpcyBraW5kIHdhcyBwcm9wb3NlZCBieSBFYWRlcyBpbiAxOTg0LiIpKSksbV8odCxuZXcgbngoZl8oQ2soVGsobmV3IG55LCJvcmcuZWNsaXBzZS5lbGsuY2lyY2xlIiksIkNpcmNsZSIpLCJDaXJjdWxhciBsYXlvdXQgYWxnb3JpdGhtcyBlbXBoYXNpemUgY3ljbGVzIG9yIGJpY29ubmVjdGVkIGNvbXBvbmVudHMgb2YgYSBncmFwaCBieSBhcnJhbmdpbmcgdGhlbSBpbiBjaXJjbGVzLiBUaGlzIGlzIHVzZWZ1bCBpZiBhIGRyYXdpbmcgaXMgZGVzaXJlZCB3aGVyZSBzdWNoIGNvbXBvbmVudHMgYXJlIGNsZWFybHkgZ3JvdXBlZCwgb3Igd2hlcmUgY3ljbGVzIGFyZSBzaG93biBhcyBwcm9taW5lbnQgT1BUSU9OUyBvZiB0aGUgZ3JhcGguIikpKSxtXyh0LG5ldyBueChmXyhDayhUayhuZXcgbnksYnl0KSwiVHJlZSIpLCJTcGVjaWFsaXplZCBsYXlvdXQgbWV0aG9kcyBmb3IgdHJlZXMsIGkuZS4gYWN5Y2xpYyBncmFwaHMuIFRoZSByZWd1bGFyIHN0cnVjdHVyZSBvZiBncmFwaHMgdGhhdCBoYXZlIG5vIHVuZGlyZWN0ZWQgY3ljbGVzIGNhbiBiZSBlbXBoYXNpemVkIHVzaW5nIGFuIGFsZ29yaXRobSBvZiB0aGlzIHR5cGUuIikpKSxtXyh0LG5ldyBueChmXyhDayhUayhuZXcgbnksIm9yZy5lY2xpcHNlLmVsay5wbGFuYXIiKSwiUGxhbmFyIiksIkFsZ29yaXRobXMgdGhhdCByZXF1aXJlIGEgcGxhbmFyIG9yIHVwd2FyZCBwbGFuYXIgZ3JhcGguIE1vc3Qgb2YgdGhlc2UgYWxnb3JpdGhtcyBhcmUgdGhlb3JldGljYWxseSBpbnRlcmVzdGluZywgYnV0IG5vdCBwcmFjdGljYWxseSB1c2FibGUuIikpKSxtXyh0LG5ldyBueChmXyhDayhUayhuZXcgbnksZ2YpLCJSYWRpYWwiKSwiUmFkaWFsIGxheW91dCBhbGdvcml0aG1zIHVzdWFsbHkgcG9zaXRpb24gdGhlIG5vZGVzIG9mIHRoZSBncmFwaCBvbiBjb25jZW50cmljIGNpcmNsZXMuIikpKSxhbXQoKG5ldyBkaWUsdCkpLHhtdCgobmV3IGZpZSx0KSksTmJ0KChuZXcgbHosdCkpfTt2YXIgZUMsQVN0LGVOZSxaNixMU3QsTVN0LHROZSxlNyx0NyxEU3QsVUIsbk5lLEdCLHh2LHJOZSxEZ2UsSWdlLGlOZSxzTmUsYU5lLG9OZSxjTmUsSVN0LG43LHVOZSxPU3QsS0IsT2dlLFdCLE5nZSx4MyxsTmUsdEMsaE5lLGZOZSxkTmUscjcsZ05lLGt2LHBOZSxDNCxpNyxiTmUsVWIsbU5lLHJZLFlCLF8yLHZOZSxOU3Qsd05lLFBTdCxCU3QseU5lLHhOZSxQZ2UsQmdlLEZnZSxSZ2Usa05lLHJoLF9NLEVOZSxqZ2UsJGdlLFM0LFROZSxDTmUsczcsU05lLG45LFhCLHpnZSxhNyxGU3QscWdlLFJTdCxqU3QsX05lLCRTdCxBTmUsTE5lLHI5LE1OZSxpWSxETmUsSU5lLEV2LHpTdCxPTmUsTk5lLFBOZSxzWSxRQixBTSxpOSxxU3QsSFN0LGFZLFZTdCxCTmUsVVN0O0kobmgsIkNvcmVPcHRpb25zIiw2OTkpLEQoODgsMjIsezM6MSwzNDoxLDIyOjEsODg6MX0sbU8pO3ZhciBRMSx1Yyx2YyxKMSx3ZixMTT1GcihuaCxrRWUsODgsSHIsUG1uLGoxbiksR1N0O0QoMjc4LDIyLHszOjEsMzQ6MSwyMjoxLDI3ODoxfSx6c2UpO3ZhciBuQyxfNCxyQyxGTmU9RnIobmgsIkVkZ2VMYWJlbFBsYWNlbWVudCIsMjc4LEhyLGxibiwkMW4pLEtTdDtEKDIyMywyMix7MzoxLDM0OjEsMjI6MSwyMjM6MX0seHEpO3ZhciBpQyxKQixzOSxIZ2UsVmdlPUZyKG5oLCJFZGdlUm91dGluZyIsMjIzLEhyLGxtbix6MW4pLFdTdDtEKDMyMSwyMix7MzoxLDM0OjEsMjI6MSwzMjE6MX0sTF8pO3ZhciBSTmUsak5lLCROZSx6TmUsVWdlLHFOZSxITmU9RnIobmgsIkVkZ2VUeXBlIiwzMjEsSHIsTHZuLHExbiksWVN0O0QoOTg5LDEsUGYsZGllKSxoLmhmPWZ1bmN0aW9uKHQpe2FtdCh0KX07dmFyIFZOZSxVTmUsR05lLEtOZSxYU3QsV05lLE1NO0kobmgsIkZpeGVkTGF5b3V0ZXJPcHRpb25zIiw5ODkpLEQoOTkwLDEse30sdiQpLGguc2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgVW5lLHR9LGgudGY9ZnVuY3Rpb24odCl7fSxJKG5oLCJGaXhlZExheW91dGVyT3B0aW9ucy9GaXhlZEZhY3RvcnkiLDk5MCksRCgzNDYsMjIsezM6MSwzNDoxLDIyOjEsMzQ2OjF9LHFzZSk7dmFyIEEyLG9ZLERNLFlOZT1GcihuaCwiSGllcmFyY2h5SGFuZGxpbmciLDM0NixIcixjYm4sSDFuKSxRU3Q7RCgyOTEsMjIsezM6MSwzNDoxLDIyOjEsMjkxOjF9LGtxKTt2YXIga2csR2IsWkIsZUYsSlN0PUZyKG5oLCJMYWJlbFNpZGUiLDI5MSxIcix1bW4sVjFuKSxaU3Q7RCg5NSwyMix7MzoxLDM0OjEsMjI6MSw5NToxfSxENSk7dmFyIG1wLEUwLHpmLFQwLGpoLEMwLHFmLEVnLFMwLEtvPUZyKG5oLCJOb2RlTGFiZWxQbGFjZW1lbnQiLDk1LEhyLE13bixVMW4pLGVfdDtEKDI1NiwyMix7MzoxLDM0OjEsMjI6MSwyNTY6MX0sdk8pO3ZhciBYTmUsSU0sS2IsUU5lLHRGLE9NPUZyKG5oLCJQb3J0QWxpZ25tZW50IiwyNTYsSHIsWG1uLEcxbiksdF90O0QoMTAxLDIyLHszOjEsMzQ6MSwyMjoxLDEwMToxfSxNXyk7dmFyIFR2LE11LFRnLHNDLFoxLFdiLEpOZT1GcihuaCwiUG9ydENvbnN0cmFpbnRzIiwxMDEsSHIsQXZuLEsxbiksbl90O0QoMjc5LDIyLHszOjEsMzQ6MSwyMjoxLDI3OToxfSxEXyk7dmFyIE5NLFBNLHZwLG5GLFliLGE5LGNZPUZyKG5oLCJQb3J0TGFiZWxQbGFjZW1lbnQiLDI3OSxIcixfdm4sVzFuKSxyX3Q7RCg2NCwyMix7MzoxLDM0OjEsMjI6MSw2NDoxfSx3Tyk7dmFyIGFyLFFuLHlmLHhmLGxsLEp1LGVkLF8wLHpsLF9sLER1LHFsLGhsLGZsLEEwLCRoLHpoLEhmLERyLFBjLGVyLE9vPUZyKG5oLCJQb3J0U2lkZSIsNjQsSHIsQm1uLFkxbiksaV90O0QoOTkzLDEsUGYsbHopLGguaGY9ZnVuY3Rpb24odCl7TmJ0KHQpfTt2YXIgc190LGFfdCxaTmUsb190LGNfdDtJKG5oLCJSYW5kb21MYXlvdXRlck9wdGlvbnMiLDk5MyksRCg5OTQsMSx7fSx3JCksaC5zZj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PW5ldyBxbmUsdH0saC50Zj1mdW5jdGlvbih0KXt9LEkobmgsIlJhbmRvbUxheW91dGVyT3B0aW9ucy9SYW5kb21GYWN0b3J5Iiw5OTQpLEQoMzg2LDIyLHszOjEsMzQ6MSwyMjoxLDM4NjoxfSxFcSk7dmFyIEE0LHJGLGlGLEN2LEJNPUZyKG5oLCJTaXplQ29uc3RyYWludCIsMzg2LEhyLGNtbixYMW4pLHVfdDtEKDI2NCwyMix7MzoxLDM0OjEsMjI6MSwyNjQ6MX0sSTUpO3ZhciBzRix1WSxhQyxHZ2UsYUYsRk0sbFksaFksZlksZVBlPUZyKG5oLCJTaXplT3B0aW9ucyIsMjY0LEhyLHF3bixRMW4pLGxfdDtEKDI4MCwyMix7MzoxLDM0OjEsMjI6MSwyODA6MX0sSHNlKTt2YXIgTDQsdFBlLGRZLG5QZT1GcihuaCwiVG9wZG93bk5vZGVUeXBlcyIsMjgwLEhyLGhibixKMW4pLGhfdDtEKDM0NywyMixzU2UpO3ZhciByUGUsaVBlLGdZPUZyKG5oLCJUb3Bkb3duU2l6ZUFwcHJveGltYXRvciIsMzQ3LEhyLGEybixlZG4pO0QoOTg3LDM0NyxzU2UsV2l0KSxoLlRnPWZ1bmN0aW9uKHQpe3JldHVybiBUZHQodCl9LEZyKG5oLCJUb3Bkb3duU2l6ZUFwcHJveGltYXRvci8xIiw5ODcsZ1ksbnVsbCxudWxsKSxEKDk4OCwzNDcsc1NlLE9zdCksaC5UZz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuO2ZvcihuPWwoYXQodCwocGkoKSxhNykpLDE0MyksU3Q9KHJiKCksVj1uZXcgYV8sViksYVAoU3QsdCksY249bmV3IFByLGY9bmV3IG9yKCghdC5hJiYodC5hPW5ldyBudChBaSx0LDEwLDExKSksdC5hKSk7Zi5lIT1mLmkuZ2MoKTspYT1sKGdyKGYpLDI3KSxNZT0oej1uZXcgYV8seiksTFUoTWUsU3QpLGFQKE1lLGEpLEJuPVRkdChhKSxGNShNZSxiLk1hdGgubWF4KGEuZyxCbi5hKSxiLk1hdGgubWF4KGEuZixCbi5iKSksanUoY24uZixhLE1lKTtmb3Iobz1uZXcgb3IoKCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpKTtvLmUhPW8uaS5nYygpOylmb3IoYT1sKGdyKG8pLDI3KSxMPW5ldyBvcigoIWEuZSYmKGEuZT1uZXcgTG4oanMsYSw3LDQpKSxhLmUpKTtMLmUhPUwuaS5nYygpOylDPWwoZ3IoTCksNzQpLFplPWwoaGMoem8oY24uZixhKSksMjcpLG90PWwoY3IoY24sT2UoKCFDLmMmJihDLmM9bmV3IExuKF9yLEMsNSw4KSksQy5jKSwwKSksMjcpLCRlPShCPW5ldyBUSSxCKSxxcigoISRlLmImJigkZS5iPW5ldyBMbihfciwkZSw0LDcpKSwkZS5iKSxaZSkscXIoKCEkZS5jJiYoJGUuYz1uZXcgTG4oX3IsJGUsNSw4KSksJGUuYyksb3QpLEFVKCRlLGRzKFplKSksYVAoJGUsQyk7dGU9bChHTyhuLmYpLDIwNSk7dHJ5e3RlLnJmKFN0LG5ldyB4JCksbGF0KG4uZix0ZSl9Y2F0Y2goam4pe3Rocm93IGpuPWJzKGpuKSxEZShqbiwxMDMpPyhKPWpuLHVlKEopKTp1ZShqbil9cmV0dXJuIFAxKFN0LHQ3KXx8UDEoU3QsZTcpfHxVa2UoU3QpLEU9emUoR2UoYXQoU3QsdDcpKSksdz16ZShHZShhdChTdCxlNykpKSxnPUUvdyxyPXplKEdlKGF0KFN0LFFCKSkpKmIuTWF0aC5zcXJ0KCghU3QuYSYmKFN0LmE9bmV3IG50KEFpLFN0LDEwLDExKSksU3QuYSkuaSksYW49bChhdChTdCxfMiksMTA3KSxUZT1hbi5iK2FuLmMrMSxmZT1hbi5kK2FuLmErMSxuZXcgbHQoYi5NYXRoLm1heChUZSxyKSxiLk1hdGgubWF4KGZlLHIvZykpfSxGcihuaCwiVG9wZG93blNpemVBcHByb3hpbWF0b3IvMiIsOTg4LGdZLG51bGwsbnVsbCk7dmFyIGZfdDtEKDM0NCwxLHs4NzE6MX0sTDgpLGguVWc9ZnVuY3Rpb24odCxuKXtyZXR1cm4gRmd0KHRoaXMsdCxuKX0saC5WZz1mdW5jdGlvbigpe2FwdCh0aGlzKX0saC5XZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnF9LGguWGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mP2lvZSh0aGlzLmYpOm51bGx9LGguWWc9ZnVuY3Rpb24oKXtyZXR1cm4gaW9lKHRoaXMuYSl9LGguWmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wfSxoLiRnPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguX2c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ufSxoLmFoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucCE9bnVsbCYmIXRoaXMuYn0saC5iaD1mdW5jdGlvbih0KXt2YXIgbjt0aGlzLm4mJihuPXQsdnQodGhpcy5mLG4pKX0saC5kaD1mdW5jdGlvbih0LG4pe3ZhciByLGE7dGhpcy5uJiZ0JiZTYm4odGhpcywocj1uZXcgVXN0LGE9Y2xlKHIsdCksb0RuKHIpLGEpLChOVigpLFdnZSkpfSxoLmVoPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB0aGlzLmI/bnVsbDoobj1od24odGhpcyx0aGlzLmcpLHVpKHRoaXMuYSxuKSxuLmk9dGhpcyx0aGlzLmQ9dCxuKX0saC5maD1mdW5jdGlvbih0KXt0PjAmJiF0aGlzLmImJmM3ZSh0aGlzLHQpfSxoLmI9ITEsaC5jPTAsaC5kPS0xLGguZT1udWxsLGguZj1udWxsLGguZz0tMSxoLmo9ITEsaC5rPSExLGgubj0hMSxoLm89MCxoLnE9MCxoLnI9MCxJKFVjLCJCYXNpY1Byb2dyZXNzTW9uaXRvciIsMzQ0KSxEKDcxNywyMDUsdHYsam5lKSxoLnJmPWZ1bmN0aW9uKHQsbil7Um10KHQsbil9LEkoVWMsIkJveExheW91dFByb3ZpZGVyIiw3MTcpLEQoOTgzLDEsaWksRFhlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG9Dbih0aGlzLGwodCwyNyksbChuLDI3KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0saC5hPSExLEkoVWMsIkJveExheW91dFByb3ZpZGVyLzEiLDk4MyksRCgxNjMsMSx7MTYzOjF9LGhWLHZydCksaC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmM/b2tlKHRoaXMuYyk6VGIodGhpcy5iKX0sSShVYywiQm94TGF5b3V0UHJvdmlkZXIvR3JvdXAiLDE2MyksRCgzMjAsMjIsezM6MSwzNDoxLDIyOjEsMzIwOjF9LFRxKTt2YXIgc1BlLGFQZSxvUGUsS2dlLGNQZT1GcihVYywiQm94TGF5b3V0UHJvdmlkZXIvUGFja2luZ01vZGUiLDMyMCxIcixobW4sdGRuKSxkX3Q7RCg5ODQsMSxpaSx0ayksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBTcG4obCh0LDE2MyksbChuLDE2MykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoVWMsIkJveExheW91dFByb3ZpZGVyL2xhbWJkYSQwJFR5cGUiLDk4NCksRCg5ODUsMSxpaSxuayksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB2cG4obCh0LDE2MyksbChuLDE2MykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoVWMsIkJveExheW91dFByb3ZpZGVyL2xhbWJkYSQxJFR5cGUiLDk4NSksRCg5ODYsMSxpaSx5JCksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB3cG4obCh0LDE2MyksbChuLDE2MykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoVWMsIkJveExheW91dFByb3ZpZGVyL2xhbWJkYSQyJFR5cGUiLDk4NiksRCgxMzg0LDEsezg0NToxfSwkbmUpLGguTWc9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdHEoKSwhRGUobiwxNjcpfHxtWmUoKGh4KCksbCh0LDE2NykpLG4pfSxJKFVjLCJFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlci9sYW1iZGEkMCRUeXBlIiwxMzg0KSxEKDEzODUsMSxmcixJWGUpLGguQ2Q9ZnVuY3Rpb24odCl7QnluKHRoaXMuYSxsKHQsMTQ5KSl9LEkoVWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQxJFR5cGUiLDEzODUpLEQoMTM4NiwxLGZyLEhuZSksaC5DZD1mdW5jdGlvbih0KXtsKHQsOTYpLHRxKCl9LEkoVWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQyJFR5cGUiLDEzODYpLEQoMTM5MCwxLGZyLE9YZSksaC5DZD1mdW5jdGlvbih0KXtpM24odGhpcy5hLGwodCw5NikpfSxJKFVjLCJFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlci9sYW1iZGEkMyRUeXBlIiwxMzkwKSxEKDEzODgsMSx0aSx1dHQpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIG15bih0aGlzLmEsdGhpcy5iLGwodCwxNDkpKX0sSShVYywiRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIvbGFtYmRhJDQkVHlwZSIsMTM4OCksRCgxMzg3LDEsdGksbHR0KSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBKaG4odGhpcy5hLHRoaXMuYixsKHQsODQ1KSl9LEkoVWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQ1JFR5cGUiLDEzODcpLEQoMTM4OSwxLGZyLGh0dCksaC5DZD1mdW5jdGlvbih0KXtoZ24odGhpcy5hLHRoaXMuYixsKHQsMTQ5KSl9LEkoVWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQ2JFR5cGUiLDEzODkpLEQoOTQ3LDEse30sVm5lKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBhbnQodCl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxJKFVjLCJFbGtVdGlsL2xhbWJkYSQwJFR5cGUiLDk0NyksRCg5NDgsMSxmcixmdHQpLGguQ2Q9ZnVuY3Rpb24odCl7bEVuKHRoaXMuYSx0aGlzLmIsbCh0LDc0KSl9LGguYT0wLGguYj0wLEkoVWMsIkVsa1V0aWwvbGFtYmRhJDEkVHlwZSIsOTQ4KSxEKDk0OSwxLGZyLGR0dCksaC5DZD1mdW5jdGlvbih0KXt0dW4odGhpcy5hLHRoaXMuYixsKHQsMTY2KSl9LGguYT0wLGguYj0wLEkoVWMsIkVsa1V0aWwvbGFtYmRhJDIkVHlwZSIsOTQ5KSxEKDk1MCwxLGZyLGd0dCksaC5DZD1mdW5jdGlvbih0KXtYbG4odGhpcy5hLHRoaXMuYixsKHQsMTM1KSl9LGguYT0wLGguYj0wLEkoVWMsIkVsa1V0aWwvbGFtYmRhJDMkVHlwZSIsOTUwKSxEKDk1MSwxLGZyLE5YZSksaC5DZD1mdW5jdGlvbih0KXtJZG4odGhpcy5hLGwodCwzNzcpKX0sSShVYywiRWxrVXRpbC9sYW1iZGEkNCRUeXBlIiw5NTEpLEQoMzI1LDEsezM0OjEsMzI1OjF9LERjbiksaC5GZD1mdW5jdGlvbih0KXtyZXR1cm4gQ2huKHRoaXMsbCh0LDI0MikpfSxoLkZiPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBEZSh0LDMyNSk/KG49bCh0LDMyNSksdGhpcy5hPT1uLmEpOiExfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHVhKHRoaXMuYSl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hKyIgKGV4Y2x1c2l2ZSkifSxoLmE9MCxJKFVjLCJFeGNsdXNpdmVCb3VuZHMvRXhjbHVzaXZlTG93ZXJCb3VuZCIsMzI1KSxEKDExMTksMjA1LHR2LFVuZSksaC5yZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuO2ZvcihuLlVnKCJGaXhlZCBMYXlvdXQiLDEpLGY9bChhdCh0LChwaSgpLHNOZSkpLDIyMyksQj0wLHo9MCxNZT1uZXcgb3IoKCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpKTtNZS5lIT1NZS5pLmdjKCk7KXtmb3IoZmU9bChncihNZSksMjcpLGFuPWwoYXQoZmUsKFBWKCksTU0pKSw4KSxhbiYmKFFoKGZlLGFuLmEsYW4uYiksbChhdChmZSxVTmUpLDE4MSkuSGMoKG1oKCksQTQpKSYmKFY9bChhdChmZSxLTmUpLDgpLFYuYT4wJiZWLmI+MCYmR3coZmUsVi5hLFYuYiwhMCwhMCkpKSxCPWIuTWF0aC5tYXgoQixmZS5pK2ZlLmcpLHo9Yi5NYXRoLm1heCh6LGZlLmorZmUuZiksQz1uZXcgb3IoKCFmZS5uJiYoZmUubj1uZXcgbnQoZWMsZmUsMSw3KSksZmUubikpO0MuZSE9Qy5pLmdjKCk7KXc9bChncihDKSwxMzUpLGFuPWwoYXQodyxNTSksOCksYW4mJlFoKHcsYW4uYSxhbi5iKSxCPWIuTWF0aC5tYXgoQixmZS5pK3cuaSt3LmcpLHo9Yi5NYXRoLm1heCh6LGZlLmordy5qK3cuZik7Zm9yKG90PW5ldyBvcigoIWZlLmMmJihmZS5jPW5ldyBudChIbCxmZSw5LDkpKSxmZS5jKSk7b3QuZSE9b3QuaS5nYygpOylmb3IoWmU9bChncihvdCksMTIzKSxhbj1sKGF0KFplLE1NKSw4KSxhbiYmUWgoWmUsYW4uYSxhbi5iKSxTdD1mZS5pK1plLmksY249ZmUuaitaZS5qLEI9Yi5NYXRoLm1heChCLFN0K1plLmcpLHo9Yi5NYXRoLm1heCh6LGNuK1plLmYpLEU9bmV3IG9yKCghWmUubiYmKFplLm49bmV3IG50KGVjLFplLDEsNykpLFplLm4pKTtFLmUhPUUuaS5nYygpOyl3PWwoZ3IoRSksMTM1KSxhbj1sKGF0KHcsTU0pLDgpLGFuJiZRaCh3LGFuLmEsYW4uYiksQj1iLk1hdGgubWF4KEIsU3Qrdy5pK3cuZyksej1iLk1hdGgubWF4KHosY24rdy5qK3cuZik7Zm9yKG89bmV3IGhyKGRyKGNwKGZlKS5hLktjKCksbmV3IGopKTtqcihvKTspcj1sKHhyKG8pLDc0KSxMPUp2dChyKSxCPWIuTWF0aC5tYXgoQixMLmEpLHo9Yi5NYXRoLm1heCh6LEwuYik7Zm9yKGE9bmV3IGhyKGRyKHNQKGZlKS5hLktjKCksbmV3IGopKTtqcihhKTspcj1sKHhyKGEpLDc0KSxkcyhjZyhyKSkhPXQmJihMPUp2dChyKSxCPWIuTWF0aC5tYXgoQixMLmEpLHo9Yi5NYXRoLm1heCh6LEwuYikpfWlmKGY9PShpcCgpLGlDKSlmb3IoVGU9bmV3IG9yKCghdC5hJiYodC5hPW5ldyBudChBaSx0LDEwLDExKSksdC5hKSk7VGUuZSE9VGUuaS5nYygpOylmb3IoZmU9bChncihUZSksMjcpLGE9bmV3IGhyKGRyKGNwKGZlKS5hLktjKCksbmV3IGopKTtqcihhKTspcj1sKHhyKGEpLDc0KSxnPWZBbihyKSxnLmI9PTA/SGkocix4MyxudWxsKTpIaShyLHgzLGcpO1J0KEJ0KGF0KHQsKFBWKCksR05lKSkpKXx8KCRlPWwoYXQodCxYU3QpLDEwNyksdGU9QiskZS5iKyRlLmMsSj16KyRlLmQrJGUuYSxHdyh0LHRlLEosITAsITApKSxuLlZnKCl9LEkoVWMsIkZpeGVkTGF5b3V0UHJvdmlkZXIiLDExMTkpLEQoMzg1LDEzNyx7MzoxLDQyMzoxLDM4NToxLDk2OjEsMTM3OjF9LEVJLFhsdCksaC5jZz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYodCl0cnl7Zm9yKEU9R3kodCwiOyw7IiksZj1FLGc9MCx3PWYubGVuZ3RoO2c8dzsrK2cpe2lmKG89ZltnXSxyPUd5KG8sIlxcOiIpLGE9RmtlKGhFKCksclswXSksIWEpdGhyb3cgdWUobmV3IFluKCJJbnZhbGlkIG9wdGlvbiBpZDogIityWzBdKSk7aWYoQz1Qa2UoYSxyWzFdKSxDPT1udWxsKXRocm93IHVlKG5ldyBZbigiSW52YWxpZCBvcHRpb24gdmFsdWU6ICIrclsxXSkpO0M9PW51bGw/KCF0aGlzLnEmJih0aGlzLnE9bmV3IFByKSxheCh0aGlzLnEsYSkpOighdGhpcy5xJiYodGhpcy5xPW5ldyBQciksa2kodGhpcy5xLGEsQykpfX1jYXRjaChMKXt0aHJvdyBMPWJzKEwpLERlKEwsMTAzKT8obj1MLHVlKG5ldyBOMHQobikpKTp1ZShMKX19LGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1laSh5YyhmYygodGhpcy5xP3RoaXMucTooQ24oKSxDbigpLG1nKSkudmMoKS5PYygpLG5ldyBHbmUpLFN5KG5ldyBMaXQsbmV3IE1hLG5ldyBrdCxuZXcgT24saGUobGUob2MsMSksaXQsMTA4LDAsW10pKSkpLHR9O3ZhciBnX3Q9SShVYywiSW5kaXZpZHVhbFNwYWNpbmdzIiwzODUpO0QoOTgyLDEse30sR25lKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBfcG4obCh0LDQ0KSl9LEkoVWMsIkluZGl2aWR1YWxTcGFjaW5ncy9sYW1iZGEkMCRUeXBlIiw5ODIpLEQoNzE4LDEse30sbHN0KSxoLmM9MCxJKFVjLCJJbnN0YW5jZVBvb2wiLDcxOCksRCgxODM1LDEse30sS25lKSxJKFVjLCJMb2dnZWRHcmFwaCIsMTgzNSksRCg0MTUsMjIsezM6MSwzNDoxLDIyOjEsNDE1OjF9LENxKTt2YXIgdVBlLFdnZSxsUGUsaFBlLHBfdD1GcihVYywiTG9nZ2VkR3JhcGgvVHlwZSIsNDE1LEhyLGZtbixuZG4pLGJfdDtEKDEwNjMsMSx7ODcxOjF9LHgkKSxoLlVnPWZ1bmN0aW9uKHQsbil7cmV0dXJuITF9LGguVmc9ZnVuY3Rpb24oKXt9LGguV2c9ZnVuY3Rpb24oKXtyZXR1cm4gMH0saC5YZz1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLllnPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGguWmc9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC4kZz1mdW5jdGlvbigpe3JldHVybiExfSxoLl9nPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguYWg9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5iaD1mdW5jdGlvbih0KXt9LGguZGg9ZnVuY3Rpb24odCxuKXt9LGguZWg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXN9LGguZmg9ZnVuY3Rpb24odCl7fSxJKFVjLCJOdWxsRWxrUHJvZ3Jlc3NNb25pdG9yIiwxMDYzKSxEKDQyLDEsezIwOjEsNDI6MX0sY2EpLGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5GYj1mdW5jdGlvbih0KXt2YXIgbixyLGE7cmV0dXJuIERlKHQsNDIpPyhyPWwodCw0Miksbj10aGlzLmE9PW51bGw/ci5hPT1udWxsOlBpKHRoaXMuYSxyLmEpLGE9dGhpcy5iPT1udWxsP3IuYj09bnVsbDpQaSh0aGlzLmIsci5iKSxuJiZhKTohMX0saC5IYj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG8sZjtyZXR1cm4gcj10aGlzLmE9PW51bGw/MDplcyh0aGlzLmEpLHQ9ciZacyxuPXImLTY1NTM2LGY9dGhpcy5iPT1udWxsPzA6ZXModGhpcy5iKSxhPWYmWnMsbz1mJi02NTUzNix0Xm8+PjE2JlpzfG5eYTw8MTZ9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFBYZSh0aGlzKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE9PW51bGwmJnRoaXMuYj09bnVsbD8icGFpcihudWxsLG51bGwpIjp0aGlzLmE9PW51bGw/InBhaXIobnVsbCwiK3hjKHRoaXMuYikrIikiOnRoaXMuYj09bnVsbD8icGFpcigiK3hjKHRoaXMuYSkrIixudWxsKSI6InBhaXIoIit4Yyh0aGlzLmEpKyIsIit4Yyh0aGlzLmIpKyIpIn0sSShVYywiUGFpciIsNDIpLEQoOTk1LDEsT2EsUFhlKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5jJiYoIXRoaXMuYiYmdGhpcy5hLmEhPW51bGx8fHRoaXMuYS5iIT1udWxsKX0saC5QYj1mdW5jdGlvbigpe2lmKCF0aGlzLmMmJiF0aGlzLmImJnRoaXMuYS5hIT1udWxsKXJldHVybiB0aGlzLmI9ITAsdGhpcy5hLmE7aWYoIXRoaXMuYyYmdGhpcy5hLmIhPW51bGwpcmV0dXJuIHRoaXMuYz0hMCx0aGlzLmEuYjt0aHJvdyB1ZShuZXcgX2MpfSxoLlFiPWZ1bmN0aW9uKCl7dGhyb3cgdGhpcy5jJiZ0aGlzLmEuYiE9bnVsbD90aGlzLmEuYj1udWxsOnRoaXMuYiYmdGhpcy5hLmEhPW51bGwmJih0aGlzLmEuYT1udWxsKSx1ZShuZXcgcGwpfSxoLmI9ITEsaC5jPSExLEkoVWMsIlBhaXIvMSIsOTk1KSxEKDQ1NSwxLHs0NTU6MX0sU2F0KSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBKYyh0aGlzLmEsbCh0LDQ1NSkuYSkmJkpjKHRoaXMuYyxsKHQsNDU1KS5jKSYmSmModGhpcy5kLGwodCw0NTUpLmQpJiZKYyh0aGlzLmIsbCh0LDQ1NSkuYil9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gTU4oaGUobGUod2EsMSksUm4sMSw1LFt0aGlzLmEsdGhpcy5jLHRoaXMuZCx0aGlzLmJdKSl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iKCIrdGhpcy5hK0NvK3RoaXMuYytDbyt0aGlzLmQrQ28rdGhpcy5iKyIpIn0sSShVYywiUXVhZHJ1cGxlIiw0NTUpLEQoMTEwOCwyMDUsdHYscW5lKSxoLnJmPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvLGYsZztpZihuLlVnKCJSYW5kb20gTGF5b3V0IiwxKSwoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkuaT09MCl7bi5WZygpO3JldHVybn1mPWwoYXQodCwoQjhlKCksb190KSksMTcpLGYmJmYuYSE9MD9vPW5ldyBWSChmLmEpOm89bmV3IFVjZSxyPVhJKEdlKGF0KHQsc190KSkpLGc9WEkoR2UoYXQodCxjX3QpKSksYT1sKGF0KHQsYV90KSwxMDcpLE1Ebih0LG8scixnLGEpLG4uVmcoKX0sSShVYywiUmFuZG9tTGF5b3V0UHJvdmlkZXIiLDExMDgpLEQoMjQwLDEsezI0MDoxfSx3YWUpLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIEpjKHRoaXMuYSxsKHQsMjQwKS5hKSYmSmModGhpcy5iLGwodCwyNDApLmIpJiZKYyh0aGlzLmMsbCh0LDI0MCkuYyl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gTU4oaGUobGUod2EsMSksUm4sMSw1LFt0aGlzLmEsdGhpcy5iLHRoaXMuY10pKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiIoIit0aGlzLmErQ28rdGhpcy5iK0NvK3RoaXMuYysiKSJ9LEkoVWMsIlRyaXBsZSIsMjQwKTt2YXIgbV90O0QoNTYyLDEse30pLGguTGY9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGx0KHRoaXMuZi5pLHRoaXMuZi5qKX0saC5vZj1mdW5jdGlvbih0KXtyZXR1cm4gZW90KHQsKHBpKCkscmgpKT9hdCh0aGlzLmYsdl90KTphdCh0aGlzLmYsdCl9LGguTWY9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGx0KHRoaXMuZi5nLHRoaXMuZi5mKX0saC5OZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd9LGgucGY9ZnVuY3Rpb24odCl7cmV0dXJuIFAxKHRoaXMuZix0KX0saC5PZj1mdW5jdGlvbih0KXtVdSh0aGlzLmYsdC5hKSxHdSh0aGlzLmYsdC5iKX0saC5QZj1mdW5jdGlvbih0KXtEdyh0aGlzLmYsdC5hKSxNdyh0aGlzLmYsdC5iKX0saC5RZj1mdW5jdGlvbih0KXt0aGlzLmc9dH0saC5nPTA7dmFyIHZfdDtJKHhMLCJFbGtHcmFwaEFkYXB0ZXJzL0Fic3RyYWN0RWxrR3JhcGhFbGVtZW50QWRhcHRlciIsNTYyKSxEKDU2MywxLHs4NTM6MX0sT3opLGguUmY9ZnVuY3Rpb24oKXt2YXIgdCxuO2lmKCF0aGlzLmIpZm9yKHRoaXMuYj0kSChFSCh0aGlzLmEpLmkpLG49bmV3IG9yKEVIKHRoaXMuYSkpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwxMzUpLHZ0KHRoaXMuYixuZXcgWWllKHQpKTtyZXR1cm4gdGhpcy5ifSxoLmI9bnVsbCxJKHhMLCJFbGtHcmFwaEFkYXB0ZXJzL0Vsa0VkZ2VBZGFwdGVyIiw1NjMpLEQoMjg5LDU2Mix7fSxKdiksaC5TZj1mdW5jdGlvbigpe3JldHVybiBHZHQodGhpcyl9LGguYT1udWxsLEkoeEwsIkVsa0dyYXBoQWRhcHRlcnMvRWxrR3JhcGhBZGFwdGVyIiwyODkpLEQoNjQwLDU2Mix7MTg3OjF9LFlpZSksSSh4TCwiRWxrR3JhcGhBZGFwdGVycy9FbGtMYWJlbEFkYXB0ZXIiLDY0MCksRCg2MzksNTYyLHs2OTU6MX0scmFlKSxoLlJmPWZ1bmN0aW9uKCl7cmV0dXJuIG03bih0aGlzKX0saC5WZj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PWwoYXQodGhpcy5mLChwaSgpLHRDKSksMTQwKSwhdCYmKHQ9bmV3IHNfKSx0fSxoLlhmPWZ1bmN0aW9uKCl7cmV0dXJuIHY3bih0aGlzKX0saC5aZj1mdW5jdGlvbih0KXt2YXIgbjtuPW5ldyB4YWUodCksSGkodGhpcy5mLChwaSgpLHRDKSxuKX0saC4kZj1mdW5jdGlvbih0KXtIaSh0aGlzLmYsKHBpKCksXzIpLG5ldyBTNGUodCkpfSxoLlRmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0saC5VZj1mdW5jdGlvbigpe3ZhciB0LG47aWYoIXRoaXMuYSlmb3IodGhpcy5hPW5ldyBidCxuPW5ldyBocihkcihzUChsKHRoaXMuZiwyNykpLmEuS2MoKSxuZXcgaikpO2pyKG4pOyl0PWwoeHIobiksNzQpLHZ0KHRoaXMuYSxuZXcgT3oodCkpO3JldHVybiB0aGlzLmF9LGguV2Y9ZnVuY3Rpb24oKXt2YXIgdCxuO2lmKCF0aGlzLmMpZm9yKHRoaXMuYz1uZXcgYnQsbj1uZXcgaHIoZHIoY3AobCh0aGlzLmYsMjcpKS5hLktjKCksbmV3IGopKTtqcihuKTspdD1sKHhyKG4pLDc0KSx2dCh0aGlzLmMsbmV3IE96KHQpKTtyZXR1cm4gdGhpcy5jfSxoLllmPWZ1bmN0aW9uKCl7cmV0dXJuIEFIKGwodGhpcy5mLDI3KSkuaSE9MHx8UnQoQnQobCh0aGlzLmYsMjcpLm9mKChwaSgpLEtCKSkpKX0saC5fZj1mdW5jdGlvbigpe1h2bih0aGlzLChhdygpLG1fdCkpfSxoLmE9bnVsbCxoLmI9bnVsbCxoLmM9bnVsbCxoLmQ9bnVsbCxoLmU9bnVsbCxJKHhMLCJFbGtHcmFwaEFkYXB0ZXJzL0Vsa05vZGVBZGFwdGVyIiw2MzkpLEQoMTI4NCw1NjIsezg1MjoxfSxCWGUpLGguUmY9ZnVuY3Rpb24oKXtyZXR1cm4gUzduKHRoaXMpfSxoLlVmPWZ1bmN0aW9uKCl7dmFyIHQsbjtpZighdGhpcy5hKWZvcih0aGlzLmE9ZWcobCh0aGlzLmYsMTIzKS5oaCgpLmkpLG49bmV3IG9yKGwodGhpcy5mLDEyMykuaGgoKSk7bi5lIT1uLmkuZ2MoKTspdD1sKGdyKG4pLDc0KSx2dCh0aGlzLmEsbmV3IE96KHQpKTtyZXR1cm4gdGhpcy5hfSxoLldmPWZ1bmN0aW9uKCl7dmFyIHQsbjtpZighdGhpcy5jKWZvcih0aGlzLmM9ZWcobCh0aGlzLmYsMTIzKS5paCgpLmkpLG49bmV3IG9yKGwodGhpcy5mLDEyMykuaWgoKSk7bi5lIT1uLmkuZ2MoKTspdD1sKGdyKG4pLDc0KSx2dCh0aGlzLmMsbmV3IE96KHQpKTtyZXR1cm4gdGhpcy5jfSxoLmFnPWZ1bmN0aW9uKCl7cmV0dXJuIGwobCh0aGlzLmYsMTIzKS5vZigocGkoKSxzNykpLDY0KX0saC5iZz1mdW5jdGlvbigpe3ZhciB0LG4scixhLG8sZixnLHc7Zm9yKGE9TTEobCh0aGlzLmYsMTIzKSkscj1uZXcgb3IobCh0aGlzLmYsMTIzKS5paCgpKTtyLmUhPXIuaS5nYygpOylmb3IodD1sKGdyKHIpLDc0KSx3PW5ldyBvcigoIXQuYyYmKHQuYz1uZXcgTG4oX3IsdCw1LDgpKSx0LmMpKTt3LmUhPXcuaS5nYygpOyl7aWYoZz1sKGdyKHcpLDg0KSxMeShiYyhnKSxhKSlyZXR1cm4hMDtpZihiYyhnKT09YSYmUnQoQnQoYXQodCwocGkoKSxPZ2UpKSkpKXJldHVybiEwfWZvcihuPW5ldyBvcihsKHRoaXMuZiwxMjMpLmhoKCkpO24uZSE9bi5pLmdjKCk7KWZvcih0PWwoZ3IobiksNzQpLGY9bmV3IG9yKCghdC5iJiYodC5iPW5ldyBMbihfcix0LDQsNykpLHQuYikpO2YuZSE9Zi5pLmdjKCk7KWlmKG89bChncihmKSw4NCksTHkoYmMobyksYSkpcmV0dXJuITA7cmV0dXJuITF9LGguYT1udWxsLGguYj1udWxsLGguYz1udWxsLEkoeEwsIkVsa0dyYXBoQWRhcHRlcnMvRWxrUG9ydEFkYXB0ZXIiLDEyODQpLEQoMTI4NSwxLGlpLHpuZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBpX24obCh0LDEyMyksbChuLDEyMykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoeEwsIkVsa0dyYXBoQWRhcHRlcnMvUG9ydENvbXBhcmF0b3IiLDEyODUpO3ZhciBYYj1rcyhwZiwiRU9iamVjdCIpLG9DPWtzKFQ2LHI0dCkscWg9a3MoVDYsaTR0KSxvRj1rcyhUNixzNHQpLGNGPWtzKFQ2LCJFbGtTaGFwZSIpLF9yPWtzKFQ2LGE0dCksanM9a3MoVDYsYVNlKSxjcz1rcyhUNixvNHQpLHVGPWtzKHBmLGM0dCksUk09a3MocGYsIkVGYWN0b3J5Iiksd190LFlnZT1rcyhwZix1NHQpLHUxPWtzKHBmLCJFUGFja2FnZSIpLExhLHlfdCx4X3QsZlBlLHBZLGtfdCxkUGUsZ1BlLHBQZSxDZyxFX3QsVF90LGVjPWtzKFQ2LG9TZSksQWk9a3MoVDYsY1NlKSxIbD1rcyhUNix1U2UpO0QoOTMsMSxsNHQpLGgudGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51aCgpLG51bGx9LGgudWg9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC52aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVoKCksITF9LGgud2g9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC54aD1mdW5jdGlvbih0KXtOaSh0aGlzLHQpfSxJKFJ4LCJCYXNpY05vdGlmaWVySW1wbCIsOTMpLEQoOTksOTMsZzR0KSxoLlloPWZ1bmN0aW9uKCl7cmV0dXJuIGhoKHRoaXMpfSxoLnloPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHR9LGguemg9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgUXIpfSxoLkFoPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPVJvKGwoTW4odGhpcy5EaCgpLHRoaXMuRmgoKSksMTkpKSx0aGlzLlBoKCkuVGgodGhpcyxuLm4sbi5mLHQpfSxoLkJoPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5DaD1mdW5jdGlvbih0LG4scil7cmV0dXJuIE5oKHRoaXMsdCxuLHIpfSxoLkRoPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuemgoKSYmKHQ9dGhpcy56aCgpLk5rKCksdCk/dDp0aGlzLmlpKCl9LGguRWg9ZnVuY3Rpb24oKXtyZXR1cm4gVXVlKHRoaXMpfSxoLkZoPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5HaD1mdW5jdGlvbigpe3ZhciB0LG47cmV0dXJuIG49dGhpcy4kaCgpLk9rKCksIW4mJnRoaXMuemgoKS5UayhuPSh3XygpLHQ9ajVlKFNkKHRoaXMuRGgoKSkpLHQ9PW51bGw/cnBlOm5ldyBUTyh0aGlzLHQpKSksbn0saC5IaD1mdW5jdGlvbih0LG4pe3JldHVybiB0fSxoLkloPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPXQucGsoKSxuP3QuTGooKTptcyh0aGlzLkRoKCksdCl9LGguSmg9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLnpoKCksdD90LlFrKCk6bnVsbH0saC5LaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnpoKCk/dGhpcy56aCgpLk5rKCk6bnVsbH0saC5MaD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHJVKHRoaXMsdCxuLHIpfSxoLk1oPWZ1bmN0aW9uKHQpe3JldHVybiB0RSh0aGlzLHQpfSxoLk5oPWZ1bmN0aW9uKHQsbil7cmV0dXJuIE1vZSh0aGlzLHQsbil9LGguT2g9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLnpoKCksISF0JiZ0LlJrKCl9LGguUGg9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgUXIpfSxoLlFoPWZ1bmN0aW9uKCl7cmV0dXJuIFhWKHRoaXMpfSxoLlJoPWZ1bmN0aW9uKHQsbixyLGEpe3JldHVybiBteCh0aGlzLHQsbixhKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGE7cmV0dXJuIGE9bChNbih0aGlzLkRoKCksbiksNjkpLGEud2soKS56ayh0aGlzLHRoaXMuaGkoKSxuLXRoaXMuamkoKSx0LHIpfSxoLlRoPWZ1bmN0aW9uKHQsbixyLGEpe3JldHVybiBJSCh0aGlzLHQsbixhKX0saC5VaD1mdW5jdGlvbih0LG4scil7dmFyIGE7cmV0dXJuIGE9bChNbih0aGlzLkRoKCksbiksNjkpLGEud2soKS5Bayh0aGlzLHRoaXMuaGkoKSxuLXRoaXMuamkoKSx0LHIpfSxoLlZoPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLnpoKCkmJiEhdGhpcy56aCgpLlBrKCl9LGguV2g9ZnVuY3Rpb24odCl7cmV0dXJuIG51ZSh0aGlzLHQpfSxoLlhoPWZ1bmN0aW9uKHQpe3JldHVybiBnb3QodGhpcyx0KX0saC5aaD1mdW5jdGlvbih0KXtyZXR1cm4gQnZ0KHRoaXMsdCl9LGguJGg9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgUXIpfSxoLl9oPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuemgoKT90aGlzLnpoKCkuUGsoKTpudWxsfSxoLmFpPWZ1bmN0aW9uKCl7cmV0dXJuIFhWKHRoaXMpfSxoLmJpPWZ1bmN0aW9uKHQsbil7JHVlKHRoaXMsdCxuKX0saC5jaT1mdW5jdGlvbih0KXt0aGlzLiRoKCkuU2sodCl9LGguZGk9ZnVuY3Rpb24odCl7dGhpcy4kaCgpLlZrKHQpfSxoLmVpPWZ1bmN0aW9uKHQpe3RoaXMuJGgoKS5Vayh0KX0saC5maT1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmO3JldHVybiBmPXRoaXMuSmgoKSxmJiZ0JiYobj1UbyhmLkVsKCksdGhpcyxuKSxmLklsKHRoaXMpKSxhPXRoaXMuUGgoKSxhJiYoc2xlKHRoaXMsdGhpcy5QaCgpLHRoaXMuRmgoKSkuQmImSW8/KG89YS5RaCgpLG8mJih0PyFmJiZvLklsKHRoaXMpOm8uSGwodGhpcykpKToobj0ocj10aGlzLkZoKCkscj49MD90aGlzLkFoKG4pOnRoaXMuUGgoKS5UaCh0aGlzLC0xLXIsbnVsbCxuKSksbj10aGlzLkNoKG51bGwsLTEsbikpKSx0aGlzLmRpKHQpLG59LGguZ2k9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnLHcsRTtpZihyPXRoaXMuRGgoKSxmPW1zKHIsdCksbj10aGlzLmppKCksZj49bilyZXR1cm4gbCh0LDY5KS53aygpLkRrKHRoaXMsdGhpcy5oaSgpLGYtbik7aWYoZjw9LTEpaWYoZz1nNigoRWwoKSxpbykscix0KSxnKXtpZihGbygpLGwoZyw2OSkueGsoKXx8KGc9cngoaWMoaW8sZykpKSxvPShhPXRoaXMuSWgoZyksbChhPj0wP3RoaXMuTGgoYSwhMCwhMCk6SHcodGhpcyxnLCEwKSwxNjApKSxFPWcuSWsoKSxFPjF8fEU9PS0xKXJldHVybiBsKGwobywyMjApLlNsKHQsITEpLDc5KX1lbHNlIHRocm93IHVlKG5ldyBZbihPYit0LnhlKCkrJGZlKSk7ZWxzZSBpZih0LkprKCkpcmV0dXJuIGE9dGhpcy5JaCh0KSxsKGE+PTA/dGhpcy5MaChhLCExLCEwKTpIdyh0aGlzLHQsITEpLDc5KTtyZXR1cm4gdz1uZXcgSXR0KHRoaXMsdCksd30saC5oaT1mdW5jdGlvbigpe3JldHVybiBWNmUodGhpcyl9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4obGIoKSxWbikuU30saC5qaT1mdW5jdGlvbigpe3JldHVybiB5cih0aGlzLmlpKCkpfSxoLmtpPWZ1bmN0aW9uKHQpe0Z1ZSh0aGlzLHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGcwKHRoaXMpfSxJKEduLCJCYXNpY0VPYmplY3RJbXBsIiw5OSk7dmFyIENfdDtEKDExOSw5OSx7MTEwOjEsOTQ6MSw5MzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDExOToxfSksaC5saT1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj1INmUodGhpcyksblt0XX0saC5taT1mdW5jdGlvbih0LG4pe3ZhciByO3I9SDZlKHRoaXMpLFRzKHIsdCxuKX0saC5uaT1mdW5jdGlvbih0KXt2YXIgbjtuPUg2ZSh0aGlzKSxUcyhuLHQsbnVsbCl9LGgudGg9ZnVuY3Rpb24oKXtyZXR1cm4gbChLbih0aGlzLDQpLDEyOSl9LGgudWg9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgUXIpfSxoLnZoPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuRGImNCkhPTB9LGguemg9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgUXIpfSxoLm9pPWZ1bmN0aW9uKHQpe3B4KHRoaXMsMix0KX0saC5CaD1mdW5jdGlvbih0LG4pe3RoaXMuRGI9bjw8MTZ8dGhpcy5EYiYyNTUsdGhpcy5vaSh0KX0saC5EaD1mdW5jdGlvbigpe3JldHVybiBzbCh0aGlzKX0saC5GaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLkRiPj4xNn0saC5HaD1mdW5jdGlvbigpe3ZhciB0LG47cmV0dXJuIHdfKCksbj1qNWUoU2QoKHQ9bChLbih0aGlzLDE2KSwyOSksdHx8dGhpcy5paSgpKSkpLG49PW51bGw/cnBlOm5ldyBUTyh0aGlzLG4pfSxoLndoPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuRGImMSk9PTB9LGguSmg9ZnVuY3Rpb24oKXtyZXR1cm4gbChLbih0aGlzLDEyOCksMjAzNCl9LGguS2g9ZnVuY3Rpb24oKXtyZXR1cm4gbChLbih0aGlzLDE2KSwyOSl9LGguT2g9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5EYiYzMikhPTB9LGguUGg9ZnVuY3Rpb24oKXtyZXR1cm4gbChLbih0aGlzLDIpLDU0KX0saC5WaD1mdW5jdGlvbigpe3JldHVybih0aGlzLkRiJjY0KSE9MH0saC4kaD1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBRcil9LGguX2g9ZnVuY3Rpb24oKXtyZXR1cm4gbChLbih0aGlzLDY0KSwyODgpfSxoLmNpPWZ1bmN0aW9uKHQpe3B4KHRoaXMsMTYsdCl9LGguZGk9ZnVuY3Rpb24odCl7cHgodGhpcywxMjgsdCl9LGguZWk9ZnVuY3Rpb24odCl7cHgodGhpcyw2NCx0KX0saC5oaT1mdW5jdGlvbigpe3JldHVybiBLdSh0aGlzKX0saC5EYj0wLEkoR24sIk1pbmltYWxFT2JqZWN0SW1wbCIsMTE5KSxEKDEyMCwxMTksezExMDoxLDk0OjEsOTM6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwxMTk6MSwxMjA6MX0pLGgub2k9ZnVuY3Rpb24odCl7dGhpcy5DYj10fSxoLlBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ2J9LEkoR24sIk1pbmltYWxFT2JqZWN0SW1wbC9Db250YWluZXIiLDEyMCksRCgyMDgzLDEyMCx7MTEwOjEsMzQyOjEsOTY6MSw5NDoxLDkzOjEsNTg6MSwxMTQ6MSw1NDoxLDk5OjEsMTE5OjEsMTIwOjF9KSxoLkxoPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gc3hlKHRoaXMsdCxuLHIpfSxoLlVoPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gV3hlKHRoaXMsdCxuLHIpfSxoLldoPWZ1bmN0aW9uKHQpe3JldHVybiBaNWUodGhpcyx0KX0saC5iaT1mdW5jdGlvbih0LG4pe1Y3ZSh0aGlzLHQsbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gc3UoKSxUX3R9LGgua2k9ZnVuY3Rpb24odCl7TzdlKHRoaXMsdCl9LGgubmY9ZnVuY3Rpb24oKXtyZXR1cm4gZmR0KHRoaXMpfSxoLmdoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubyYmKHRoaXMubz1uZXcgeGwoKHN1KCksQ2cpLEwyLHRoaXMsMCkpLHRoaXMub30saC5vZj1mdW5jdGlvbih0KXtyZXR1cm4gYXQodGhpcyx0KX0saC5wZj1mdW5jdGlvbih0KXtyZXR1cm4gUDEodGhpcyx0KX0saC5xZj1mdW5jdGlvbih0LG4pe3JldHVybiBIaSh0aGlzLHQsbil9LEkoc3YsIkVNYXBQcm9wZXJ0eUhvbGRlckltcGwiLDIwODMpLEQoNTcyLDEyMCx7MTEwOjEsMzc3OjEsOTQ6MSw5MzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDExOToxLDEyMDoxfSxBUyksaC5MaD1mdW5jdGlvbih0LG4scil7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5hO2Nhc2UgMTpyZXR1cm4gdGhpcy5ifXJldHVybiByVSh0aGlzLHQsbixyKX0saC5XaD1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLmEhPTA7Y2FzZSAxOnJldHVybiB0aGlzLmIhPTB9cmV0dXJuIG51ZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQpe2Nhc2UgMDpkVih0aGlzLHplKEdlKG4pKSk7cmV0dXJuO2Nhc2UgMTpmVih0aGlzLHplKEdlKG4pKSk7cmV0dXJufSR1ZSh0aGlzLHQsbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gc3UoKSx5X3R9LGgua2k9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgMDpkVih0aGlzLDApO3JldHVybjtjYXNlIDE6ZlYodGhpcywwKTtyZXR1cm59RnVlKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5EYiY2ND9nMCh0aGlzKToodD1uZXcgQWYoZzAodGhpcykpLHQuYSs9IiAoeDogIixfNSh0LHRoaXMuYSksdC5hKz0iLCB5OiAiLF81KHQsdGhpcy5iKSx0LmErPSIpIix0LmEpfSxoLmE9MCxoLmI9MCxJKHN2LCJFbGtCZW5kUG9pbnRJbXBsIiw1NzIpLEQoNzM5LDIwODMsezExMDoxLDM0MjoxLDE2NzoxLDk2OjEsOTQ6MSw5MzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDExOToxLDEyMDoxfSksaC5MaD1mdW5jdGlvbih0LG4scil7cmV0dXJuIGQ4ZSh0aGlzLHQsbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7cmV0dXJuIE11ZSh0aGlzLHQsbixyKX0saC5VaD1mdW5jdGlvbih0LG4scil7cmV0dXJuIGRjZSh0aGlzLHQsbixyKX0saC5XaD1mdW5jdGlvbih0KXtyZXR1cm4gXzdlKHRoaXMsdCl9LGguYmk9ZnVuY3Rpb24odCxuKXtUeGUodGhpcyx0LG4pfSxoLmlpPWZ1bmN0aW9uKCl7cmV0dXJuIHN1KCksa190fSxoLmtpPWZ1bmN0aW9uKHQpe2k4ZSh0aGlzLHQpfSxoLmpoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua30saC5raD1mdW5jdGlvbigpe3JldHVybiBFSCh0aGlzKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBqY2UodGhpcyl9LGguaz1udWxsLEkoc3YsIkVsa0dyYXBoRWxlbWVudEltcGwiLDczOSksRCg3NDAsNzM5LHsxMTA6MSwzNDI6MSwxNjc6MSw0MjI6MSw5NjoxLDk0OjEsOTM6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwxMTk6MSwxMjA6MX0pLGguTGg9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB4OGUodGhpcyx0LG4scil9LGguV2g9ZnVuY3Rpb24odCl7cmV0dXJuIF84ZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7Q3hlKHRoaXMsdCxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBzdSgpLEVfdH0saC5raT1mdW5jdGlvbih0KXtOOGUodGhpcyx0KX0saC5saD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGgubWg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nfSxoLm5oPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaX0saC5vaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmp9LGgucGg9ZnVuY3Rpb24odCxuKXtGNSh0aGlzLHQsbil9LGgucWg9ZnVuY3Rpb24odCxuKXtRaCh0aGlzLHQsbil9LGgucmg9ZnVuY3Rpb24odCl7VXUodGhpcyx0KX0saC5zaD1mdW5jdGlvbih0KXtHdSh0aGlzLHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFB1ZSh0aGlzKX0saC5mPTAsaC5nPTAsaC5pPTAsaC5qPTAsSShzdiwiRWxrU2hhcGVJbXBsIiw3NDApLEQoNzQxLDc0MCx7MTEwOjEsMzQyOjEsODQ6MSwxNjc6MSw0MjI6MSw5NjoxLDk0OjEsOTM6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwxMTk6MSwxMjA6MX0pLGguTGg9ZnVuY3Rpb24odCxuLHIpe3JldHVybiBKOGUodGhpcyx0LG4scil9LGguU2g9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB2eGUodGhpcyx0LG4scil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB3eGUodGhpcyx0LG4scil9LGguV2g9ZnVuY3Rpb24odCl7cmV0dXJuIEg3ZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7STllKHRoaXMsdCxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBzdSgpLHhfdH0saC5raT1mdW5jdGlvbih0KXtLOGUodGhpcyx0KX0saC5oaD1mdW5jdGlvbigpe3JldHVybiF0aGlzLmQmJih0aGlzLmQ9bmV3IExuKGpzLHRoaXMsOCw1KSksdGhpcy5kfSxoLmloPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZSYmKHRoaXMuZT1uZXcgTG4oanMsdGhpcyw3LDQpKSx0aGlzLmV9LEkoc3YsIkVsa0Nvbm5lY3RhYmxlU2hhcGVJbXBsIiw3NDEpLEQoMzI2LDczOSx7MTEwOjEsMzQyOjEsNzQ6MSwxNjc6MSwzMjY6MSw5NjoxLDk0OjEsOTM6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwxMTk6MSwxMjA6MX0sVEkpLGguQWg9ZnVuY3Rpb24odCl7cmV0dXJuIGd4ZSh0aGlzLHQpfSxoLkxoPWZ1bmN0aW9uKHQsbixyKXtzd2l0Y2godCl7Y2FzZSAzOnJldHVybiBXTyh0aGlzKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgTG4oX3IsdGhpcyw0LDcpKSx0aGlzLmI7Y2FzZSA1OnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IExuKF9yLHRoaXMsNSw4KSksdGhpcy5jO2Nhc2UgNjpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBudChjcyx0aGlzLDYsNikpLHRoaXMuYTtjYXNlIDc6cmV0dXJuIEhuKCksIXRoaXMuYiYmKHRoaXMuYj1uZXcgTG4oX3IsdGhpcyw0LDcpKSwhKHRoaXMuYi5pPD0xJiYoIXRoaXMuYyYmKHRoaXMuYz1uZXcgTG4oX3IsdGhpcyw1LDgpKSx0aGlzLmMuaTw9MSkpO2Nhc2UgODpyZXR1cm4gSG4oKSwhIXFBKHRoaXMpO2Nhc2UgOTpyZXR1cm4gSG4oKSwhIXF3KHRoaXMpO2Nhc2UgMTA6cmV0dXJuIEhuKCksIXRoaXMuYiYmKHRoaXMuYj1uZXcgTG4oX3IsdGhpcyw0LDcpKSx0aGlzLmIuaSE9MCYmKCF0aGlzLmMmJih0aGlzLmM9bmV3IExuKF9yLHRoaXMsNSw4KSksdGhpcy5jLmkhPTApfXJldHVybiBkOGUodGhpcyx0LG4scil9LGguU2g9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3N3aXRjaChuKXtjYXNlIDM6cmV0dXJuIHRoaXMuQ2ImJihyPShhPXRoaXMuRGI+PjE2LGE+PTA/Z3hlKHRoaXMscik6dGhpcy5DYi5UaCh0aGlzLC0xLWEsbnVsbCxyKSkpLFl5ZSh0aGlzLGwodCwyNykscik7Y2FzZSA0OnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IExuKF9yLHRoaXMsNCw3KSksUnUodGhpcy5iLHQscik7Y2FzZSA1OnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IExuKF9yLHRoaXMsNSw4KSksUnUodGhpcy5jLHQscik7Y2FzZSA2OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IG50KGNzLHRoaXMsNiw2KSksUnUodGhpcy5hLHQscil9cmV0dXJuIE11ZSh0aGlzLHQsbixyKX0saC5VaD1mdW5jdGlvbih0LG4scil7c3dpdGNoKG4pe2Nhc2UgMzpyZXR1cm4gWXllKHRoaXMsbnVsbCxyKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgTG4oX3IsdGhpcyw0LDcpKSxUbyh0aGlzLmIsdCxyKTtjYXNlIDU6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgTG4oX3IsdGhpcyw1LDgpKSxUbyh0aGlzLmMsdCxyKTtjYXNlIDY6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoY3MsdGhpcyw2LDYpKSxUbyh0aGlzLmEsdCxyKX1yZXR1cm4gZGNlKHRoaXMsdCxuLHIpfSxoLldoPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDM6cmV0dXJuISFXTyh0aGlzKTtjYXNlIDQ6cmV0dXJuISF0aGlzLmImJnRoaXMuYi5pIT0wO2Nhc2UgNTpyZXR1cm4hIXRoaXMuYyYmdGhpcy5jLmkhPTA7Y2FzZSA2OnJldHVybiEhdGhpcy5hJiZ0aGlzLmEuaSE9MDtjYXNlIDc6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgTG4oX3IsdGhpcyw0LDcpKSwhKHRoaXMuYi5pPD0xJiYoIXRoaXMuYyYmKHRoaXMuYz1uZXcgTG4oX3IsdGhpcyw1LDgpKSx0aGlzLmMuaTw9MSkpO2Nhc2UgODpyZXR1cm4gcUEodGhpcyk7Y2FzZSA5OnJldHVybiBxdyh0aGlzKTtjYXNlIDEwOnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IExuKF9yLHRoaXMsNCw3KSksdGhpcy5iLmkhPTAmJighdGhpcy5jJiYodGhpcy5jPW5ldyBMbihfcix0aGlzLDUsOCkpLHRoaXMuYy5pIT0wKX1yZXR1cm4gXzdlKHRoaXMsdCl9LGguYmk9ZnVuY3Rpb24odCxuKXtzd2l0Y2godCl7Y2FzZSAzOkFVKHRoaXMsbChuLDI3KSk7cmV0dXJuO2Nhc2UgNDohdGhpcy5iJiYodGhpcy5iPW5ldyBMbihfcix0aGlzLDQsNykpLCRyKHRoaXMuYiksIXRoaXMuYiYmKHRoaXMuYj1uZXcgTG4oX3IsdGhpcyw0LDcpKSxBcyh0aGlzLmIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5jJiYodGhpcy5jPW5ldyBMbihfcix0aGlzLDUsOCkpLCRyKHRoaXMuYyksIXRoaXMuYyYmKHRoaXMuYz1uZXcgTG4oX3IsdGhpcyw1LDgpKSxBcyh0aGlzLmMsbChuLDE2KSk7cmV0dXJuO2Nhc2UgNjohdGhpcy5hJiYodGhpcy5hPW5ldyBudChjcyx0aGlzLDYsNikpLCRyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoY3MsdGhpcyw2LDYpKSxBcyh0aGlzLmEsbChuLDE2KSk7cmV0dXJufVR4ZSh0aGlzLHQsbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gc3UoKSxmUGV9LGgua2k9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgMzpBVSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDQ6IXRoaXMuYiYmKHRoaXMuYj1uZXcgTG4oX3IsdGhpcyw0LDcpKSwkcih0aGlzLmIpO3JldHVybjtjYXNlIDU6IXRoaXMuYyYmKHRoaXMuYz1uZXcgTG4oX3IsdGhpcyw1LDgpKSwkcih0aGlzLmMpO3JldHVybjtjYXNlIDY6IXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoY3MsdGhpcyw2LDYpKSwkcih0aGlzLmEpO3JldHVybn1pOGUodGhpcyx0KX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBldnQodGhpcyl9LEkoc3YsIkVsa0VkZ2VJbXBsIiwzMjYpLEQoNDUyLDIwODMsezExMDoxLDM0MjoxLDE2NjoxLDQ1MjoxLDk2OjEsOTQ6MSw5MzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDExOToxLDEyMDoxfSxyayksaC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gbHhlKHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3N3aXRjaCh0KXtjYXNlIDE6cmV0dXJuIHRoaXMuajtjYXNlIDI6cmV0dXJuIHRoaXMuaztjYXNlIDM6cmV0dXJuIHRoaXMuYjtjYXNlIDQ6cmV0dXJuIHRoaXMuYztjYXNlIDU6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgWXMocWgsdGhpcyw1KSksdGhpcy5hO2Nhc2UgNjpyZXR1cm4gbG90KHRoaXMpO2Nhc2UgNzpyZXR1cm4gbj9vdWUodGhpcyk6dGhpcy5pO2Nhc2UgODpyZXR1cm4gbj9hdWUodGhpcyk6dGhpcy5mO2Nhc2UgOTpyZXR1cm4hdGhpcy5nJiYodGhpcy5nPW5ldyBMbihjcyx0aGlzLDksMTApKSx0aGlzLmc7Y2FzZSAxMDpyZXR1cm4hdGhpcy5lJiYodGhpcy5lPW5ldyBMbihjcyx0aGlzLDEwLDkpKSx0aGlzLmU7Y2FzZSAxMTpyZXR1cm4gdGhpcy5kfXJldHVybiBzeGUodGhpcyx0LG4scil9LGguU2g9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZjtzd2l0Y2gobil7Y2FzZSA2OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP2x4ZSh0aGlzLHIpOnRoaXMuQ2IuVGgodGhpcywtMS1vLG51bGwscikpKSxXeWUodGhpcyxsKHQsNzQpLHIpO2Nhc2UgOTpyZXR1cm4hdGhpcy5nJiYodGhpcy5nPW5ldyBMbihjcyx0aGlzLDksMTApKSxSdSh0aGlzLmcsdCxyKTtjYXNlIDEwOnJldHVybiF0aGlzLmUmJih0aGlzLmU9bmV3IExuKGNzLHRoaXMsMTAsOSkpLFJ1KHRoaXMuZSx0LHIpfXJldHVybiBmPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KHN1KCkscFkpKSxuKSw2OSksZi53aygpLnprKHRoaXMsS3UodGhpcyksbi15cigoc3UoKSxwWSkpLHQscil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3N3aXRjaChuKXtjYXNlIDU6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgWXMocWgsdGhpcyw1KSksVG8odGhpcy5hLHQscik7Y2FzZSA2OnJldHVybiBXeWUodGhpcyxudWxsLHIpO2Nhc2UgOTpyZXR1cm4hdGhpcy5nJiYodGhpcy5nPW5ldyBMbihjcyx0aGlzLDksMTApKSxUbyh0aGlzLmcsdCxyKTtjYXNlIDEwOnJldHVybiF0aGlzLmUmJih0aGlzLmU9bmV3IExuKGNzLHRoaXMsMTAsOSkpLFRvKHRoaXMuZSx0LHIpfXJldHVybiBXeGUodGhpcyx0LG4scil9LGguV2g9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgMTpyZXR1cm4gdGhpcy5qIT0wO2Nhc2UgMjpyZXR1cm4gdGhpcy5rIT0wO2Nhc2UgMzpyZXR1cm4gdGhpcy5iIT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5jIT0wO2Nhc2UgNTpyZXR1cm4hIXRoaXMuYSYmdGhpcy5hLmkhPTA7Y2FzZSA2OnJldHVybiEhbG90KHRoaXMpO2Nhc2UgNzpyZXR1cm4hIXRoaXMuaTtjYXNlIDg6cmV0dXJuISF0aGlzLmY7Y2FzZSA5OnJldHVybiEhdGhpcy5nJiZ0aGlzLmcuaSE9MDtjYXNlIDEwOnJldHVybiEhdGhpcy5lJiZ0aGlzLmUuaSE9MDtjYXNlIDExOnJldHVybiB0aGlzLmQhPW51bGx9cmV0dXJuIFo1ZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQpe2Nhc2UgMTpvRSh0aGlzLHplKEdlKG4pKSk7cmV0dXJuO2Nhc2UgMjp1RSh0aGlzLHplKEdlKG4pKSk7cmV0dXJuO2Nhc2UgMzphRSh0aGlzLHplKEdlKG4pKSk7cmV0dXJuO2Nhc2UgNDpjRSh0aGlzLHplKEdlKG4pKSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5hJiYodGhpcy5hPW5ldyBZcyhxaCx0aGlzLDUpKSwkcih0aGlzLmEpLCF0aGlzLmEmJih0aGlzLmE9bmV3IFlzKHFoLHRoaXMsNSkpLEFzKHRoaXMuYSxsKG4sMTYpKTtyZXR1cm47Y2FzZSA2OloydCh0aGlzLGwobiw3NCkpO3JldHVybjtjYXNlIDc6eVYodGhpcyxsKG4sODQpKTtyZXR1cm47Y2FzZSA4OndWKHRoaXMsbChuLDg0KSk7cmV0dXJuO2Nhc2UgOTohdGhpcy5nJiYodGhpcy5nPW5ldyBMbihjcyx0aGlzLDksMTApKSwkcih0aGlzLmcpLCF0aGlzLmcmJih0aGlzLmc9bmV3IExuKGNzLHRoaXMsOSwxMCkpLEFzKHRoaXMuZyxsKG4sMTYpKTtyZXR1cm47Y2FzZSAxMDohdGhpcy5lJiYodGhpcy5lPW5ldyBMbihjcyx0aGlzLDEwLDkpKSwkcih0aGlzLmUpLCF0aGlzLmUmJih0aGlzLmU9bmV3IExuKGNzLHRoaXMsMTAsOSkpLEFzKHRoaXMuZSxsKG4sMTYpKTtyZXR1cm47Y2FzZSAxMTpwN2UodGhpcyxlaShuKSk7cmV0dXJufVY3ZSh0aGlzLHQsbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gc3UoKSxwWX0saC5raT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAxOm9FKHRoaXMsMCk7cmV0dXJuO2Nhc2UgMjp1RSh0aGlzLDApO3JldHVybjtjYXNlIDM6YUUodGhpcywwKTtyZXR1cm47Y2FzZSA0OmNFKHRoaXMsMCk7cmV0dXJuO2Nhc2UgNTohdGhpcy5hJiYodGhpcy5hPW5ldyBZcyhxaCx0aGlzLDUpKSwkcih0aGlzLmEpO3JldHVybjtjYXNlIDY6WjJ0KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNzp5Vih0aGlzLG51bGwpO3JldHVybjtjYXNlIDg6d1YodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA5OiF0aGlzLmcmJih0aGlzLmc9bmV3IExuKGNzLHRoaXMsOSwxMCkpLCRyKHRoaXMuZyk7cmV0dXJuO2Nhc2UgMTA6IXRoaXMuZSYmKHRoaXMuZT1uZXcgTG4oY3MsdGhpcywxMCw5KSksJHIodGhpcy5lKTtyZXR1cm47Y2FzZSAxMTpwN2UodGhpcyxudWxsKTtyZXR1cm59TzdlKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gZDJ0KHRoaXMpfSxoLmI9MCxoLmM9MCxoLmQ9bnVsbCxoLmo9MCxoLms9MCxJKHN2LCJFbGtFZGdlU2VjdGlvbkltcGwiLDQ1MiksRCgxNTgsMTIwLHsxMTA6MSw5NDoxLDkzOjEsMTU1OjEsNTg6MSwxMTQ6MSw1NDoxLDk5OjEsMTU4OjEsMTE5OjEsMTIwOjF9KSxoLkxoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYTtyZXR1cm4gdD09MD8oIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLHRoaXMuQWIpOnNmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fHRoaXMuaWkoKSksdCksbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbztyZXR1cm4gbj09MD8oIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFJ1KHRoaXMuQWIsdCxyKSk6KG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHx0aGlzLmlpKCkpLG4pLDY5KSxvLndrKCkuemsodGhpcyxLdSh0aGlzKSxuLXlyKHRoaXMuaWkoKSksdCxyKSl9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87cmV0dXJuIG49PTA/KCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxUbyh0aGlzLkFiLHQscikpOihvPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8dGhpcy5paSgpKSxuKSw2OSksby53aygpLkFrKHRoaXMsS3UodGhpcyksbi15cih0aGlzLmlpKCkpLHQscikpfSxoLldoPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB0PT0wPyEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wOm5mKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fHRoaXMuaWkoKSksdCkpfSxoLlpoPWZ1bmN0aW9uKHQpe3JldHVybiBIa2UodGhpcyx0KX0saC5iaT1mdW5jdGlvbih0LG4pe3ZhciByO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxBcyh0aGlzLkFiLGwobiwxNikpO3JldHVybn11Zih0aGlzLHQteXIodGhpcy5paSgpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHx0aGlzLmlpKCkpLHQpLG4pfSxoLmRpPWZ1bmN0aW9uKHQpe3B4KHRoaXMsMTI4LHQpfSxoLmlpPWZ1bmN0aW9uKCl7cmV0dXJuIFRuKCksSF90fSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybn1jZih0aGlzLHQteXIodGhpcy5paSgpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHx0aGlzLmlpKCkpLHQpKX0saC5waT1mdW5jdGlvbigpe3RoaXMuQmJ8PTF9LGgucWk9ZnVuY3Rpb24odCl7cmV0dXJuIFlBKHRoaXMsdCl9LGguQmI9MCxJKEduLCJFTW9kZWxFbGVtZW50SW1wbCIsMTU4KSxEKDcyMCwxNTgsezExMDoxLDk0OjEsOTM6MSw0ODA6MSwxNTU6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwxNTg6MSwxMTk6MSwxMjA6MX0sZnopLGgucmk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gTHZ0KHRoaXMsdCxuKX0saC5zaT1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmO2lmKHRoaXMuYSE9QWgodCl8fHQuQmImMjU2KXRocm93IHVlKG5ldyBZbihxZmUrdC56Yit0MykpO2ZvcihhPWRjKHQpO2R1KGEuYSkuaSE9MDspe2lmKHI9bChtUChhLDAsKG49bChPZShkdShhLmEpLDApLDg5KSxmPW4uYyxEZShmLDkwKT9sKGYsMjkpOihUbigpLEtmKSkpLDI5KSx6dyhyKSlyZXR1cm4gbz1BaChyKS53aSgpLnNpKHIpLGwobyw1NCkuY2kodCksbzthPWRjKHIpfXJldHVybih0LkQhPW51bGw/dC5EOnQuQik9PSJqYXZhLnV0aWwuTWFwJEVudHJ5Ij9uZXcgR2l0KHQpOm5ldyBGNGUodCl9LGgudGk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gS3codGhpcyx0LG4pfSxoLkxoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYTtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy5hfXJldHVybiBzZih0aGlzLHQteXIoKFRuKCksZW0pKSxNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHxlbSksdCksbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxSdSh0aGlzLkFiLHQscik7Y2FzZSAxOnJldHVybiB0aGlzLmEmJihyPWwodGhpcy5hLDU0KS5UaCh0aGlzLDQsdTEscikpLHI4ZSh0aGlzLGwodCwyNDEpLHIpfXJldHVybiBvPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KFRuKCksZW0pKSxuKSw2OSksby53aygpLnprKHRoaXMsS3UodGhpcyksbi15cigoVG4oKSxlbSkpLHQscil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksVG8odGhpcy5BYix0LHIpO2Nhc2UgMTpyZXR1cm4gcjhlKHRoaXMsbnVsbCxyKX1yZXR1cm4gbz1sKE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fChUbigpLGVtKSksbiksNjkpLG8ud2soKS5Bayh0aGlzLEt1KHRoaXMpLG4teXIoKFRuKCksZW0pKSx0LHIpfSxoLldoPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiEhdGhpcy5hfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksZW0pKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxlbSksdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHI7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLEFzKHRoaXMuQWIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTpYZ3QodGhpcyxsKG4sMjQxKSk7cmV0dXJufXVmKHRoaXMsdC15cigoVG4oKSxlbSkpLE1uKChyPWwoS24odGhpcywxNiksMjkpLHJ8fGVtKSx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLGVtfSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6WGd0KHRoaXMsbnVsbCk7cmV0dXJufWNmKHRoaXMsdC15cigoVG4oKSxlbSkpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fGVtKSx0KSl9O3ZhciBqTSxiUGUsU190O0koR24sIkVGYWN0b3J5SW1wbCIsNzIwKSxEKDEwMzcsNzIwLHsxMTA6MSwyMTEzOjEsOTQ6MSw5MzoxLDQ4MDoxLDE1NToxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDE1ODoxLDExOToxLDEyMDoxfSxpayksaC5yaT1mdW5jdGlvbih0LG4pe3N3aXRjaCh0LmhrKCkpe2Nhc2UgMTI6cmV0dXJuIGwobiwxNDkpLlBnKCk7Y2FzZSAxMzpyZXR1cm4geGMobik7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWW4oeVQrdC54ZSgpK3QzKSl9fSxoLnNpPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7c3dpdGNoKHQuRz09LTEmJih0Lkc9KG49QWgodCksbj9mMihuLnZpKCksdCk6LTEpKSx0Lkcpe2Nhc2UgNDpyZXR1cm4gZj1uZXcgc2ssZjtjYXNlIDY6cmV0dXJuIGc9bmV3IGFfLGc7Y2FzZSA3OnJldHVybiB3PW5ldyBqd2UsdztjYXNlIDg6cmV0dXJuIGE9bmV3IFRJLGE7Y2FzZSA5OnJldHVybiByPW5ldyBBUyxyO2Nhc2UgMTA6cmV0dXJuIG89bmV3IHJrLG87Y2FzZSAxMTpyZXR1cm4gRT1uZXcgayQsRTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbihxZmUrdC56Yit0MykpfX0saC50aT1mdW5jdGlvbih0LG4pe3N3aXRjaCh0LmhrKCkpe2Nhc2UgMTM6Y2FzZSAxMjpyZXR1cm4gbnVsbDtkZWZhdWx0OnRocm93IHVlKG5ldyBZbih5VCt0LnhlKCkrdDMpKX19LEkoc3YsIkVsa0dyYXBoRmFjdG9yeUltcGwiLDEwMzcpLEQoNDQ4LDE1OCx7MTEwOjEsOTQ6MSw5MzoxLDE1NToxLDE5NzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDE1ODoxLDExOToxLDEyMDoxfSksaC5HaD1mdW5jdGlvbigpe3ZhciB0LG47cmV0dXJuIG49KHQ9bChLbih0aGlzLDE2KSwyOSksajVlKFNkKHR8fHRoaXMuaWkoKSkpKSxuPT1udWxsPyh3XygpLHdfKCkscnBlKTpuZXcgcHJ0KHRoaXMsbil9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnhlKCl9cmV0dXJuIHNmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fHRoaXMuaWkoKSksdCksbixyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbH1yZXR1cm4gbmYodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8dGhpcy5paSgpKSx0KSl9LGguYmk9ZnVuY3Rpb24odCxuKXt2YXIgcjtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksQXModGhpcy5BYixsKG4sMTYpKTtyZXR1cm47Y2FzZSAxOnRoaXMudWkoZWkobikpO3JldHVybn11Zih0aGlzLHQteXIodGhpcy5paSgpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHx0aGlzLmlpKCkpLHQpLG4pfSxoLmlpPWZ1bmN0aW9uKCl7cmV0dXJuIFRuKCksVl90fSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6dGhpcy51aShudWxsKTtyZXR1cm59Y2YodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8dGhpcy5paSgpKSx0KSl9LGgueGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy56Yn0saC51aT1mdW5jdGlvbih0KXtGdSh0aGlzLHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIENBKHRoaXMpfSxoLnpiPW51bGwsSShHbiwiRU5hbWVkRWxlbWVudEltcGwiLDQ0OCksRCgxODQsNDQ4LHsxMTA6MSw5NDoxLDkzOjEsMTU1OjEsMTk3OjEsNTg6MSwyNDE6MSwxMTQ6MSw1NDoxLDk5OjEsMTU4OjEsMTg0OjEsMTE5OjEsMTIwOjEsNjkwOjF9LHFhdCksaC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gb2d0KHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gdGhpcy55YjtjYXNlIDM6cmV0dXJuIHRoaXMueGI7Y2FzZSA0OnJldHVybiB0aGlzLnNiO2Nhc2UgNTpyZXR1cm4hdGhpcy5yYiYmKHRoaXMucmI9bmV3IHd5KHRoaXMsbDEsdGhpcykpLHRoaXMucmI7Y2FzZSA2OnJldHVybiF0aGlzLnZiJiYodGhpcy52Yj1uZXcgVjgodTEsdGhpcyw2LDcpKSx0aGlzLnZiO2Nhc2UgNzpyZXR1cm4gbj90aGlzLkRiPj4xNj09Nz9sKHRoaXMuQ2IsMjQxKTpudWxsOm1vdCh0aGlzKX1yZXR1cm4gc2YodGhpcyx0LXlyKChUbigpLE8yKSksTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8TzIpLHQpLG4scil9LGguU2g9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZjtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxSdSh0aGlzLkFiLHQscik7Y2FzZSA0OnJldHVybiB0aGlzLnNiJiYocj1sKHRoaXMuc2IsNTQpLlRoKHRoaXMsMSxSTSxyKSksYThlKHRoaXMsbCh0LDQ4MCkscik7Y2FzZSA1OnJldHVybiF0aGlzLnJiJiYodGhpcy5yYj1uZXcgd3kodGhpcyxsMSx0aGlzKSksUnUodGhpcy5yYix0LHIpO2Nhc2UgNjpyZXR1cm4hdGhpcy52YiYmKHRoaXMudmI9bmV3IFY4KHUxLHRoaXMsNiw3KSksUnUodGhpcy52Yix0LHIpO2Nhc2UgNzpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD9vZ3QodGhpcyxyKTp0aGlzLkNiLlRoKHRoaXMsLTEtbyxudWxsLHIpKSksTmgodGhpcyx0LDcscil9cmV0dXJuIGY9bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHwoVG4oKSxPMikpLG4pLDY5KSxmLndrKCkuemsodGhpcyxLdSh0aGlzKSxuLXlyKChUbigpLE8yKSksdCxyKX0saC5VaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxUbyh0aGlzLkFiLHQscik7Y2FzZSA0OnJldHVybiBhOGUodGhpcyxudWxsLHIpO2Nhc2UgNTpyZXR1cm4hdGhpcy5yYiYmKHRoaXMucmI9bmV3IHd5KHRoaXMsbDEsdGhpcykpLFRvKHRoaXMucmIsdCxyKTtjYXNlIDY6cmV0dXJuIXRoaXMudmImJih0aGlzLnZiPW5ldyBWOCh1MSx0aGlzLDYsNykpLFRvKHRoaXMudmIsdCxyKTtjYXNlIDc6cmV0dXJuIE5oKHRoaXMsbnVsbCw3LHIpfXJldHVybiBvPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KFRuKCksTzIpKSxuKSw2OSksby53aygpLkFrKHRoaXMsS3UodGhpcyksbi15cigoVG4oKSxPMikpLHQscil9LGguV2g9ZnVuY3Rpb24odCl7dmFyIG47c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiB0aGlzLnliIT1udWxsO2Nhc2UgMzpyZXR1cm4gdGhpcy54YiE9bnVsbDtjYXNlIDQ6cmV0dXJuISF0aGlzLnNiO2Nhc2UgNTpyZXR1cm4hIXRoaXMucmImJnRoaXMucmIuaSE9MDtjYXNlIDY6cmV0dXJuISF0aGlzLnZiJiZ0aGlzLnZiLmkhPTA7Y2FzZSA3OnJldHVybiEhbW90KHRoaXMpfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksTzIpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxPMiksdCkpfSxoLlpoPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPXdDbih0aGlzLHQpLG58fEhrZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHI7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLEFzKHRoaXMuQWIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTpGdSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAyOlNWKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDM6Q1YodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgNDpOdWUodGhpcyxsKG4sNDgwKSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5yYiYmKHRoaXMucmI9bmV3IHd5KHRoaXMsbDEsdGhpcykpLCRyKHRoaXMucmIpLCF0aGlzLnJiJiYodGhpcy5yYj1uZXcgd3kodGhpcyxsMSx0aGlzKSksQXModGhpcy5yYixsKG4sMTYpKTtyZXR1cm47Y2FzZSA2OiF0aGlzLnZiJiYodGhpcy52Yj1uZXcgVjgodTEsdGhpcyw2LDcpKSwkcih0aGlzLnZiKSwhdGhpcy52YiYmKHRoaXMudmI9bmV3IFY4KHUxLHRoaXMsNiw3KSksQXModGhpcy52YixsKG4sMTYpKTtyZXR1cm59dWYodGhpcyx0LXlyKChUbigpLE8yKSksTW4oKHI9bChLbih0aGlzLDE2KSwyOSkscnx8TzIpLHQpLG4pfSxoLmVpPWZ1bmN0aW9uKHQpe3ZhciBuLHI7aWYodCYmdGhpcy5yYilmb3Iocj1uZXcgb3IodGhpcy5yYik7ci5lIT1yLmkuZ2MoKTspbj1ncihyKSxEZShuLDM2NCkmJihsKG4sMzY0KS53PW51bGwpO3B4KHRoaXMsNjQsdCl9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSxPMn0saC5raT1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOkZ1KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpTVih0aGlzLG51bGwpO3JldHVybjtjYXNlIDM6Q1YodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA0Ok51ZSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDU6IXRoaXMucmImJih0aGlzLnJiPW5ldyB3eSh0aGlzLGwxLHRoaXMpKSwkcih0aGlzLnJiKTtyZXR1cm47Y2FzZSA2OiF0aGlzLnZiJiYodGhpcy52Yj1uZXcgVjgodTEsdGhpcyw2LDcpKSwkcih0aGlzLnZiKTtyZXR1cm59Y2YodGhpcyx0LXlyKChUbigpLE8yKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8TzIpLHQpKX0saC5waT1mdW5jdGlvbigpe3l1ZSh0aGlzKX0saC52aT1mdW5jdGlvbigpe3JldHVybiF0aGlzLnJiJiYodGhpcy5yYj1uZXcgd3kodGhpcyxsMSx0aGlzKSksdGhpcy5yYn0saC53aT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNifSxoLnhpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudWJ9LGgueWk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54Yn0saC56aT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnlifSxoLkFpPWZ1bmN0aW9uKHQpe3RoaXMudWI9dH0saC5JYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLkRiJjY0P0NBKHRoaXMpOih0PW5ldyBBZihDQSh0aGlzKSksdC5hKz0iIChuc1VSSTogIixYbyh0LHRoaXMueWIpLHQuYSs9IiwgbnNQcmVmaXg6ICIsWG8odCx0aGlzLnhiKSx0LmErPSIpIix0LmEpfSxoLnhiPW51bGwsaC55Yj1udWxsLEkoR24sIkVQYWNrYWdlSW1wbCIsMTg0KSxEKDU2OSwxODQsezExMDoxLDIxMTU6MSw1Njk6MSw5NDoxLDkzOjEsMTU1OjEsMTk3OjEsNTg6MSwyNDE6MSwxMTQ6MSw1NDoxLDk5OjEsMTU4OjEsMTg0OjEsMTE5OjEsMTIwOjEsNjkwOjF9LGsydCksaC5xPSExLGgucj0hMTt2YXIgX190PSExO0koc3YsIkVsa0dyYXBoUGFja2FnZUltcGwiLDU2OSksRCgzNjYsNzQwLHsxMTA6MSwzNDI6MSwxNjc6MSwxMzU6MSw0MjI6MSwzNjY6MSw5NjoxLDk0OjEsOTM6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwxMTk6MSwxMjA6MX0sc2spLGguQWg9ZnVuY3Rpb24odCl7cmV0dXJuIGh4ZSh0aGlzLHQpfSxoLkxoPWZ1bmN0aW9uKHQsbixyKXtzd2l0Y2godCl7Y2FzZSA3OnJldHVybiB2b3QodGhpcyk7Y2FzZSA4OnJldHVybiB0aGlzLmF9cmV0dXJuIHg4ZSh0aGlzLHQsbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGE7c3dpdGNoKG4pe2Nhc2UgNzpyZXR1cm4gdGhpcy5DYiYmKHI9KGE9dGhpcy5EYj4+MTYsYT49MD9oeGUodGhpcyxyKTp0aGlzLkNiLlRoKHRoaXMsLTEtYSxudWxsLHIpKSksSjRlKHRoaXMsbCh0LDE2Nykscil9cmV0dXJuIE11ZSh0aGlzLHQsbixyKX0saC5VaD1mdW5jdGlvbih0LG4scil7cmV0dXJuIG49PTc/SjRlKHRoaXMsbnVsbCxyKTpkY2UodGhpcyx0LG4scil9LGguV2g9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgNzpyZXR1cm4hIXZvdCh0aGlzKTtjYXNlIDg6cmV0dXJuIXZuKCIiLHRoaXMuYSl9cmV0dXJuIF84ZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQpe2Nhc2UgNzpVOWUodGhpcyxsKG4sMTY3KSk7cmV0dXJuO2Nhc2UgODpsN2UodGhpcyxlaShuKSk7cmV0dXJufUN4ZSh0aGlzLHQsbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gc3UoKSxkUGV9LGgua2k9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgNzpVOWUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA4Omw3ZSh0aGlzLCIiKTtyZXR1cm59TjhlKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gbHB0KHRoaXMpfSxoLmE9IiIsSShzdiwiRWxrTGFiZWxJbXBsIiwzNjYpLEQoMjA3LDc0MSx7MTEwOjEsMzQyOjEsODQ6MSwxNjc6MSwyNzoxLDQyMjoxLDIwNzoxLDk2OjEsOTQ6MSw5MzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDExOToxLDEyMDoxfSxhXyksaC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gcHhlKHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3N3aXRjaCh0KXtjYXNlIDk6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgbnQoSGwsdGhpcyw5LDkpKSx0aGlzLmM7Y2FzZSAxMDpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBudChBaSx0aGlzLDEwLDExKSksdGhpcy5hO2Nhc2UgMTE6cmV0dXJuIGRzKHRoaXMpO2Nhc2UgMTI6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgbnQoanMsdGhpcywxMiwzKSksdGhpcy5iO2Nhc2UgMTM6cmV0dXJuIEhuKCksIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoQWksdGhpcywxMCwxMSkpLHRoaXMuYS5pPjB9cmV0dXJuIEo4ZSh0aGlzLHQsbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGE7c3dpdGNoKG4pe2Nhc2UgOTpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBudChIbCx0aGlzLDksOSkpLFJ1KHRoaXMuYyx0LHIpO2Nhc2UgMTA6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoQWksdGhpcywxMCwxMSkpLFJ1KHRoaXMuYSx0LHIpO2Nhc2UgMTE6cmV0dXJuIHRoaXMuQ2ImJihyPShhPXRoaXMuRGI+PjE2LGE+PTA/cHhlKHRoaXMscik6dGhpcy5DYi5UaCh0aGlzLC0xLWEsbnVsbCxyKSkpLHM0ZSh0aGlzLGwodCwyNykscik7Y2FzZSAxMjpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBudChqcyx0aGlzLDEyLDMpKSxSdSh0aGlzLmIsdCxyKX1yZXR1cm4gdnhlKHRoaXMsdCxuLHIpfSxoLlVoPWZ1bmN0aW9uKHQsbixyKXtzd2l0Y2gobil7Y2FzZSA5OnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IG50KEhsLHRoaXMsOSw5KSksVG8odGhpcy5jLHQscik7Y2FzZSAxMDpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBudChBaSx0aGlzLDEwLDExKSksVG8odGhpcy5hLHQscik7Y2FzZSAxMTpyZXR1cm4gczRlKHRoaXMsbnVsbCxyKTtjYXNlIDEyOnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IG50KGpzLHRoaXMsMTIsMykpLFRvKHRoaXMuYix0LHIpfXJldHVybiB3eGUodGhpcyx0LG4scil9LGguV2g9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgOTpyZXR1cm4hIXRoaXMuYyYmdGhpcy5jLmkhPTA7Y2FzZSAxMDpyZXR1cm4hIXRoaXMuYSYmdGhpcy5hLmkhPTA7Y2FzZSAxMTpyZXR1cm4hIWRzKHRoaXMpO2Nhc2UgMTI6cmV0dXJuISF0aGlzLmImJnRoaXMuYi5pIT0wO2Nhc2UgMTM6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoQWksdGhpcywxMCwxMSkpLHRoaXMuYS5pPjB9cmV0dXJuIEg3ZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQpe2Nhc2UgOTohdGhpcy5jJiYodGhpcy5jPW5ldyBudChIbCx0aGlzLDksOSkpLCRyKHRoaXMuYyksIXRoaXMuYyYmKHRoaXMuYz1uZXcgbnQoSGwsdGhpcyw5LDkpKSxBcyh0aGlzLmMsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTA6IXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoQWksdGhpcywxMCwxMSkpLCRyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoQWksdGhpcywxMCwxMSkpLEFzKHRoaXMuYSxsKG4sMTYpKTtyZXR1cm47Y2FzZSAxMTpMVSh0aGlzLGwobiwyNykpO3JldHVybjtjYXNlIDEyOiF0aGlzLmImJih0aGlzLmI9bmV3IG50KGpzLHRoaXMsMTIsMykpLCRyKHRoaXMuYiksIXRoaXMuYiYmKHRoaXMuYj1uZXcgbnQoanMsdGhpcywxMiwzKSksQXModGhpcy5iLGwobiwxNikpO3JldHVybn1JOWUodGhpcyx0LG4pfSxoLmlpPWZ1bmN0aW9uKCl7cmV0dXJuIHN1KCksZ1BlfSxoLmtpPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDk6IXRoaXMuYyYmKHRoaXMuYz1uZXcgbnQoSGwsdGhpcyw5LDkpKSwkcih0aGlzLmMpO3JldHVybjtjYXNlIDEwOiF0aGlzLmEmJih0aGlzLmE9bmV3IG50KEFpLHRoaXMsMTAsMTEpKSwkcih0aGlzLmEpO3JldHVybjtjYXNlIDExOkxVKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgbnQoanMsdGhpcywxMiwzKSksJHIodGhpcy5iKTtyZXR1cm59SzhlKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gb2tlKHRoaXMpfSxJKHN2LCJFbGtOb2RlSW1wbCIsMjA3KSxEKDE5Myw3NDEsezExMDoxLDM0MjoxLDg0OjEsMTY3OjEsMTIzOjEsNDIyOjEsMTkzOjEsOTY6MSw5NDoxLDkzOjEsNTg6MSwxMTQ6MSw1NDoxLDk5OjEsMTE5OjEsMTIwOjF9LGp3ZSksaC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gZnhlKHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0PT05P00xKHRoaXMpOko4ZSh0aGlzLHQsbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGE7c3dpdGNoKG4pe2Nhc2UgOTpyZXR1cm4gdGhpcy5DYiYmKHI9KGE9dGhpcy5EYj4+MTYsYT49MD9meGUodGhpcyxyKTp0aGlzLkNiLlRoKHRoaXMsLTEtYSxudWxsLHIpKSksWHllKHRoaXMsbCh0LDI3KSxyKX1yZXR1cm4gdnhlKHRoaXMsdCxuLHIpfSxoLlVoPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbj09OT9YeWUodGhpcyxudWxsLHIpOnd4ZSh0aGlzLHQsbixyKX0saC5XaD1mdW5jdGlvbih0KXtyZXR1cm4gdD09OT8hIU0xKHRoaXMpOkg3ZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQpe2Nhc2UgOTp6OWUodGhpcyxsKG4sMjcpKTtyZXR1cm59STllKHRoaXMsdCxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBzdSgpLHBQZX0saC5raT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSA5Ono5ZSh0aGlzLG51bGwpO3JldHVybn1LOGUodGhpcyx0KX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBKYnQodGhpcyl9LEkoc3YsIkVsa1BvcnRJbXBsIiwxOTMpO3ZhciBBX3Q9a3MoU28sIkJhc2ljRU1hcC9FbnRyeSIpO0QoMTEyMiwxMjAsezExMDoxLDQ0OjEsOTQ6MSw5MzoxLDEzNjoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDExOToxLDEyMDoxfSxrJCksaC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGgubGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIGZ3KHRoaXMpfSxoLkRpPWZ1bmN0aW9uKHQpe2g3ZSh0aGlzLGwodCwxNDkpKX0saC5MaD1mdW5jdGlvbih0LG4scil7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iO2Nhc2UgMTpyZXR1cm4gdGhpcy5jfXJldHVybiByVSh0aGlzLHQsbixyKX0saC5XaD1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5iO2Nhc2UgMTpyZXR1cm4gdGhpcy5jIT1udWxsfXJldHVybiBudWUodGhpcyx0KX0saC5iaT1mdW5jdGlvbih0LG4pe3N3aXRjaCh0KXtjYXNlIDA6aDdlKHRoaXMsbChuLDE0OSkpO3JldHVybjtjYXNlIDE6dTdlKHRoaXMsbik7cmV0dXJufSR1ZSh0aGlzLHQsbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gc3UoKSxDZ30saC5raT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAwOmg3ZSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDE6dTdlKHRoaXMsbnVsbCk7cmV0dXJufUZ1ZSh0aGlzLHQpfSxoLkJpPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuYT09LTEmJih0PXRoaXMuYix0aGlzLmE9dD9lcyh0KTowKSx0aGlzLmF9LGgubWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxoLkNpPWZ1bmN0aW9uKHQpe3RoaXMuYT10fSxoLm5kPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPXRoaXMuYyx1N2UodGhpcyx0KSxufSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuRGImNjQ/ZzAodGhpcyk6KHQ9bmV3IHRiLGhpKGhpKGhpKHQsdGhpcy5iP3RoaXMuYi5QZygpOnVsKSxQaGUpLGpfKHRoaXMuYykpLHQuYSl9LGguYT0tMSxoLmM9bnVsbDt2YXIgTDI9SShzdiwiRWxrUHJvcGVydHlUb1ZhbHVlTWFwRW50cnlJbXBsIiwxMTIyKTtEKDk5NiwxLHt9LFQkKSxJKG5vLCJKc29uQWRhcHRlciIsOTk2KSxEKDIxNiw2MyxscCxkZCksSShubywiSnNvbkltcG9ydEV4Y2VwdGlvbiIsMjE2KSxEKDg2OCwxLHt9LGNndCksSShubywiSnNvbkltcG9ydGVyIiw4NjgpLEQoOTAzLDEse30scHR0KSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDAkVHlwZSIsOTAzKSxEKDkwNCwxLHt9LGJ0dCksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQxJFR5cGUiLDkwNCksRCg5MTIsMSx7fSxGWGUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMTAkVHlwZSIsOTEyKSxEKDkxNCwxLHt9LG10dCksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQxMSRUeXBlIiw5MTQpLEQoOTE1LDEse30sdnR0KSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDEyJFR5cGUiLDkxNSksRCg5MjEsMSx7fSxNYXQpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMTMkVHlwZSIsOTIxKSxEKDkyMCwxLHt9LERhdCksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQxNCRUeXBlIiw5MjApLEQoOTE2LDEse30sd3R0KSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDE1JFR5cGUiLDkxNiksRCg5MTcsMSx7fSx5dHQpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMTYkVHlwZSIsOTE3KSxEKDkxOCwxLHt9LHh0dCksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQxNyRUeXBlIiw5MTgpLEQoOTE5LDEse30sa3R0KSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDE4JFR5cGUiLDkxOSksRCg5MjQsMSx7fSxSWGUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMTkkVHlwZSIsOTI0KSxEKDkwNSwxLHt9LGpYZSksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQyJFR5cGUiLDkwNSksRCg5MjIsMSx7fSwkWGUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMjAkVHlwZSIsOTIyKSxEKDkyMywxLHt9LHpYZSksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQyMSRUeXBlIiw5MjMpLEQoOTI3LDEse30scVhlKSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDIyJFR5cGUiLDkyNyksRCg5MjUsMSx7fSxIWGUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMjMkVHlwZSIsOTI1KSxEKDkyNiwxLHt9LFZYZSksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQyNCRUeXBlIiw5MjYpLEQoOTI5LDEse30sVVhlKSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDI1JFR5cGUiLDkyOSksRCg5MjgsMSx7fSxHWGUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMjYkVHlwZSIsOTI4KSxEKDkzMCwxLGZyLEV0dCksaC5DZD1mdW5jdGlvbih0KXtPdm4odGhpcy5iLHRoaXMuYSxlaSh0KSl9LEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMjckVHlwZSIsOTMwKSxEKDkzMSwxLGZyLFR0dCksaC5DZD1mdW5jdGlvbih0KXtOdm4odGhpcy5iLHRoaXMuYSxlaSh0KSl9LEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMjgkVHlwZSIsOTMxKSxEKDkzMiwxLHt9LEN0dCksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQyOSRUeXBlIiw5MzIpLEQoOTA4LDEse30sS1hlKSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDMkVHlwZSIsOTA4KSxEKDkzMywxLHt9LFN0dCksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQzMCRUeXBlIiw5MzMpLEQoOTM0LDEse30sV1hlKSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDMxJFR5cGUiLDkzNCksRCg5MzUsMSx7fSxZWGUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMzIkVHlwZSIsOTM1KSxEKDkzNiwxLHt9LFhYZSksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQzMyRUeXBlIiw5MzYpLEQoOTM3LDEse30sUVhlKSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDM0JFR5cGUiLDkzNyksRCg4NzAsMSx7fSxKWGUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMzUkVHlwZSIsODcwKSxEKDk0MSwxLHt9LHlpdCksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQzNiRUeXBlIiw5NDEpLEQoOTM4LDEsZnIsWlhlKSxoLkNkPWZ1bmN0aW9uKHQpe2ptbih0aGlzLmEsbCh0LDM3NykpfSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDM3JFR5cGUiLDkzOCksRCg5MzksMSxmcixfdHQpLGguQ2Q9ZnVuY3Rpb24odCl7eWxuKHRoaXMuYSx0aGlzLmIsbCh0LDE2NikpfSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDM4JFR5cGUiLDkzOSksRCg5NDAsMSxmcixBdHQpLGguQ2Q9ZnVuY3Rpb24odCl7eGxuKHRoaXMuYSx0aGlzLmIsbCh0LDE2NikpfSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDM5JFR5cGUiLDk0MCksRCg5MDYsMSx7fSxlUWUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkNCRUeXBlIiw5MDYpLEQoOTQyLDEsZnIsdFFlKSxoLkNkPWZ1bmN0aW9uKHQpeyRtbih0aGlzLmEsbCh0LDgpKX0sSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQ0MCRUeXBlIiw5NDIpLEQoOTA3LDEse30sblFlKSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDUkVHlwZSIsOTA3KSxEKDkxMSwxLHt9LHJRZSksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQ2JFR5cGUiLDkxMSksRCg5MDksMSx7fSxpUWUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkNyRUeXBlIiw5MDkpLEQoOTEwLDEse30sc1FlKSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDgkVHlwZSIsOTEwKSxEKDkxMywxLHt9LGFRZSksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQ5JFR5cGUiLDkxMyksRCg5NjEsMSxmcixvUWUpLGguQ2Q9ZnVuY3Rpb24odCl7SjgodGhpcy5hLG5ldyB5eShlaSh0KSkpfSxJKG5vLCJKc29uTWV0YURhdGFDb252ZXJ0ZXIvbGFtYmRhJDAkVHlwZSIsOTYxKSxEKDk2MiwxLGZyLGNRZSksaC5DZD1mdW5jdGlvbih0KXtEZ24odGhpcy5hLGwodCwyNDUpKX0sSShubywiSnNvbk1ldGFEYXRhQ29udmVydGVyL2xhbWJkYSQxJFR5cGUiLDk2MiksRCg5NjMsMSxmcix1UWUpLGguQ2Q9ZnVuY3Rpb24odCl7TTJuKHRoaXMuYSxsKHQsMTQzKSl9LEkobm8sIkpzb25NZXRhRGF0YUNvbnZlcnRlci9sYW1iZGEkMiRUeXBlIiw5NjMpLEQoOTY0LDEsZnIsbFFlKSxoLkNkPWZ1bmN0aW9uKHQpe0lnbih0aGlzLmEsbCh0LDE3MCkpfSxJKG5vLCJKc29uTWV0YURhdGFDb252ZXJ0ZXIvbGFtYmRhJDMkVHlwZSIsOTY0KSxEKDI0NSwyMix7MzoxLDM0OjEsMjI6MSwyNDU6MX0sUjgpO3ZhciBiWSxtWSxYZ2Usdlksd1kseVksUWdlLEpnZSx4WT1GcihJUCwiR3JhcGhGZWF0dXJlIiwyNDUsSHIscHduLGlkbiksTF90O0QoMTEsMSx7MzQ6MSwxNDk6MX0sVWksdnMscG4sSGEpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFNobih0aGlzLGwodCwxNDkpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gZW90KHRoaXMsdCl9LGguU2c9ZnVuY3Rpb24oKXtyZXR1cm4gSXQodGhpcyl9LGguUGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHMyKHRoaXMuYil9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxJKElQLCJQcm9wZXJ0eSIsMTEpLEQoNjcxLDEsaWksTmllKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEI0bih0aGlzLGwodCw5NiksbChuLDk2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShJUCwiUHJvcGVydHlIb2xkZXJDb21wYXJhdG9yIiw2NzEpLEQoNzA5LDEsT2EseXdlKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gRnZuKHRoaXMpfSxoLlFiPWZ1bmN0aW9uKCl7YVplKCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYX0sSShxRywiRWxrR3JhcGhVdGlsL0FuY2VzdG9ySXRlcmF0b3IiLDcwOSk7dmFyIG1QZT1rcyhTbywiRUxpc3QiKTtEKDcwLDU2LHsyMDoxLDMxOjEsNTY6MSwxNjoxLDE1OjEsNzA6MSw2MToxfSksaC5iZD1mdW5jdGlvbih0LG4pe19BKHRoaXMsdCxuKX0saC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gcXIodGhpcyx0KX0saC5jZD1mdW5jdGlvbih0LG4pe3JldHVybiBON2UodGhpcyx0LG4pfSxoLkdjPWZ1bmN0aW9uKHQpe3JldHVybiBBcyh0aGlzLHQpfSxoLklpPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBIOCh0aGlzKX0saC5KaT1mdW5jdGlvbigpe3JldHVybiBuZXcgQ08odGhpcyl9LGguS2k9ZnVuY3Rpb24odCl7cmV0dXJuIG1OKHRoaXMsdCl9LGguTGk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5NaT1mdW5jdGlvbih0LG4pe30saC5OaT1mdW5jdGlvbigpe30saC5PaT1mdW5jdGlvbih0LG4pe05vZSh0aGlzLHQsbil9LGguUGk9ZnVuY3Rpb24odCxuLHIpe30saC5RaT1mdW5jdGlvbih0LG4pe30saC5SaT1mdW5jdGlvbih0LG4scil7fSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBCYnQodGhpcyx0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBNN2UodGhpcyl9LGguU2k9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgb3IodGhpcyl9LGguZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHE4KHRoaXMpfSxoLmZkPWZ1bmN0aW9uKHQpe3ZhciBuO2lmKG49dGhpcy5nYygpLHQ8MHx8dD5uKXRocm93IHVlKG5ldyBteSh0LG4pKTtyZXR1cm4gbmV3IGphZSh0aGlzLHQpfSxoLlVpPWZ1bmN0aW9uKHQsbil7dGhpcy5UaSh0LHRoaXMuZGQobikpfSxoLk1jPWZ1bmN0aW9uKHQpe3JldHVybiBzVih0aGlzLHQpfSxoLldpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG59LGguaGQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbjYodGhpcyx0LG4pfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFQ4ZSh0aGlzKX0saC5ZaT1mdW5jdGlvbigpe3JldHVybiEwfSxoLlppPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEVFKHRoaXMsbil9LEkoU28sIkFic3RyYWN0RUxpc3QiLDcwKSxEKDY2LDcwLEJkLFgyLEx3LFQ3ZSksaC5FaT1mdW5jdGlvbih0LG4pe3JldHVybiBEdWUodGhpcyx0LG4pfSxoLkZpPWZ1bmN0aW9uKHQpe3JldHVybiBPZHQodGhpcyx0KX0saC5HaT1mdW5jdGlvbih0LG4pe0lOKHRoaXMsdCxuKX0saC5IaT1mdW5jdGlvbih0KXt0Tih0aGlzLHQpfSxoLiRpPWZ1bmN0aW9uKHQpe3JldHVybiBSNmUodGhpcyx0KX0saC4kYj1mdW5jdGlvbigpe3VBKHRoaXMpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBqRSh0aGlzLHQpfSxoLlhiPWZ1bmN0aW9uKHQpe3JldHVybiBPZSh0aGlzLHQpfSxoLl9pPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYTsrK3RoaXMuaixyPXRoaXMuZz09bnVsbD8wOnRoaXMuZy5sZW5ndGgsdD5yJiYoYT10aGlzLmcsbj1yKyhyLzJ8MCkrNCxuPHQmJihuPXQpLHRoaXMuZz10aGlzLmFqKG4pLGEhPW51bGwmJnB1KGEsMCx0aGlzLmcsMCx0aGlzLmkpKX0saC5kZD1mdW5jdGlvbih0KXtyZXR1cm4gdGd0KHRoaXMsdCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pPT0wfSxoLlRpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEh1ZSh0aGlzLHQsbil9LGguYWo9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHdhLFJuLDEsdCw1LDEpfSxoLlZpPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdbdF19LGguZ2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHZ4KHRoaXMsdCl9LGguWGk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gVW9lKHRoaXMsdCxuKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLml9LGguUGM9ZnVuY3Rpb24oKXtyZXR1cm4gYTZlKHRoaXMpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiBPOGUodGhpcyx0KX0saC5pPTA7dmFyIHZQZT1JKFNvLCJCYXNpY0VMaXN0Iiw2Niksd1BlPWtzKFNvLCJUcmVlSXRlcmF0b3IiKTtEKDcwOCw2NixaZmUpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmc9PW51bGwmJiF0aGlzLmM/SDVlKHRoaXMpOnRoaXMuZz09bnVsbHx8dGhpcy5pIT0wJiZsKHRoaXMuZ1t0aGlzLmktMV0sNTEpLk9iKCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gQ1UodGhpcyl9LGguUWI9ZnVuY3Rpb24oKXtpZighdGhpcy5lKXRocm93IHVlKG5ldyBuYygiVGhlcmUgaXMgbm8gdmFsaWQgb2JqZWN0IHRvIHJlbW92ZS4iKSk7dGhpcy5lLlFiKCl9LGguYz0hMSxJKFNvLCJBYnN0cmFjdFRyZWVJdGVyYXRvciIsNzA4KSxEKDcwMCw3MDgsWmZlLGh5ZSksaC5iaj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj1sKHQsNTgpLkdoKCkuS2MoKSxEZShuLDI4NykmJmwobiwyODcpLndsKG5ldyBYbmUpLG59LEkocUcsIkVsa0dyYXBoVXRpbC9Qcm9wZXJ0aWVzU2tpcHBpbmdUcmVlSXRlcmF0b3IiLDcwMCksRCg5NjUsMSx7fSxYbmUpLEkocUcsIkVsa0dyYXBoVXRpbC9Qcm9wZXJ0aWVzU2tpcHBpbmdUcmVlSXRlcmF0b3IvMSIsOTY1KTt2YXIgbEYsWmdlLGhGPUkocUcsIkVsa1JlZmxlY3QiLG51bGwpO0QoOTAxLDEsbjQsTFMpLGguUmc9ZnVuY3Rpb24odCl7cmV0dXJuIEJIKCksSTJuKGwodCwxODEpKX0sSShxRywiRWxrUmVmbGVjdC9sYW1iZGEkMCRUeXBlIiw5MDEpO3ZhciBRYjtrcyhTbywiUmVzb3VyY2VMb2NhdG9yIiksRCgxMDY1LDEse30pLEkoU28sIkRlbGVnYXRpbmdSZXNvdXJjZUxvY2F0b3IiLDEwNjUpLEQoMTA2NiwxMDY1LHt9KSxJKCJvcmcuZWNsaXBzZS5lbWYuY29tbW9uIiwiRU1GUGx1Z2luIiwxMDY2KTt2YXIgZXBlPWtzKFE0dCwiQWRhcHRlciIpLE9Pbj1rcyhRNHQsIk5vdGlmaWNhdGlvbiIpO0QoMTE3NCwxLFNTZSksaC5jaj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGguZGo9ZnVuY3Rpb24odCl7fSxoLmVqPWZ1bmN0aW9uKHQpe3RoaXMuZD10fSxoLmZqPWZ1bmN0aW9uKHQpe3RoaXMuZD09dCYmKHRoaXMuZD1udWxsKX0saC5kPW51bGwsSShSeCwiQWRhcHRlckltcGwiLDExNzQpLEQoMjA5Myw3MCxKNHQpLGguRWk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQThlKHRoaXMsdCxuKX0saC5GaT1mdW5jdGlvbih0KXt2YXIgbixyLGE7aWYoKyt0aGlzLmosdC5kYygpKXJldHVybiExO2ZvcihuPXRoaXMuRWooKSxhPXQuS2MoKTthLk9iKCk7KXI9YS5QYigpLHRoaXMucmoodGhpcy5aaShuLHIpKSwrK247cmV0dXJuITB9LGguR2k9ZnVuY3Rpb24odCxuKXtNcnQodGhpcyx0LG4pfSxoLkhpPWZ1bmN0aW9uKHQpe3RhdCh0aGlzLHQpfSxoLnBqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2ooKX0saC4kYj1mdW5jdGlvbigpe0FPKHRoaXMsdGhpcy5FaigpLHRoaXMuRmooKSl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudWoodCl9LGguSWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudmoodCl9LGgucWo9ZnVuY3Rpb24odCxuKXt0aGlzLkJqKCkuVW0oKX0saC5yaj1mdW5jdGlvbih0KXt0aGlzLkJqKCkuVW0oKX0saC5zaj1mdW5jdGlvbigpe3JldHVybiB0aGlzLkJqKCl9LGgudGo9ZnVuY3Rpb24oKXt0aGlzLkJqKCkuVW0oKX0saC51aj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5CaigpLlVtKCl9LGgudmo9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuQmooKS5VbSgpfSxoLndqPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLkJqKCkuVW0oKX0saC54aj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5CaigpLlVtKCl9LGgueWo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5CaigpLlVtKCl9LGguemo9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuQmooKS5VbSgpfSxoLkFqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQmooKS5VbSgpfSxoLkNqPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLkJqKCkuVW0oKX0saC5Eaj1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLkJqKCkuVW0oKX0saC5Faj1mdW5jdGlvbigpe3JldHVybiB0aGlzLkJqKCkuVW0oKX0saC5Gaj1mdW5jdGlvbigpe3JldHVybiB0aGlzLkJqKCkuVW0oKX0saC5Haj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5CaigpLlVtKCl9LGguSGo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5CaigpLlVtKCl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud2oodCl9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuV2kodCx0aGlzLnhqKHQpKX0saC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnlqKCl9LGguZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuemoodCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5BaigpfSxoLlRpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFV4ZSh0aGlzLHQsbil9LGguVmk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueGoodCl9LGguZ2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHJIKHRoaXMsdCl9LGguTWM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIG49dGhpcy5kZCh0KSxuPj0wPyh0aGlzLmdkKG4pLCEwKTohMX0saC5YaT1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLkRqKHQsdGhpcy5aaSh0LG4pKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkVqKCl9LGguUGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5GaigpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLkdqKHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSGooKX0sSShTbywiRGVsZWdhdGluZ0VMaXN0IiwyMDkzKSxEKDIwOTQsMjA5MyxKNHQpLGguRWk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gd2tlKHRoaXMsdCxuKX0saC5GaT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5FaSh0aGlzLkVqKCksdCl9LGguR2k9ZnVuY3Rpb24odCxuKXtFMnQodGhpcyx0LG4pfSxoLkhpPWZ1bmN0aW9uKHQpe2gydCh0aGlzLHQpfSxoLkxpPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuTWooKX0saC4kYj1mdW5jdGlvbigpe3RMKHRoaXMpfSxoLklqPWZ1bmN0aW9uKHQsbixyLGEsbyl7cmV0dXJuIG5ldyBaYXQodGhpcyx0LG4scixhLG8pfSxoLkpqPWZ1bmN0aW9uKHQpe05pKHRoaXMuamooKSx0KX0saC5Laj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLkxqPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGguamo9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC5Naj1mdW5jdGlvbigpe3JldHVybiExfSxoLk5qPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG59LGguT2o9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbn0saC5Qaj1mdW5jdGlvbigpe3JldHVybiExfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuQWooKX0saC5UaT1mdW5jdGlvbih0LG4pe3ZhciByLGE7cmV0dXJuIHRoaXMuUGooKT8oYT10aGlzLlFqKCkscj1VeGUodGhpcyx0LG4pLHRoaXMuSmoodGhpcy5Jaig3LHB0KG4pLHIsdCxhKSkscik6VXhlKHRoaXMsdCxuKX0saC5nZD1mdW5jdGlvbih0KXt2YXIgbixyLGEsbztyZXR1cm4gdGhpcy5QaigpPyhyPW51bGwsYT10aGlzLlFqKCksbj10aGlzLklqKDQsbz1ySCh0aGlzLHQpLG51bGwsdCxhKSx0aGlzLk1qKCkmJm8/KHI9dGhpcy5PaihvLHIpLHI/KHIubmoobiksci5vaigpKTp0aGlzLkpqKG4pKTpyPyhyLm5qKG4pLHIub2ooKSk6dGhpcy5KaihuKSxvKToobz1ySCh0aGlzLHQpLHRoaXMuTWooKSYmbyYmKHI9dGhpcy5PaihvLG51bGwpLHImJnIub2ooKSksbyl9LGguWGk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gTW10KHRoaXMsdCxuKX0sSShSeCwiRGVsZWdhdGluZ05vdGlmeWluZ0xpc3RJbXBsIiwyMDk0KSxEKDE1MiwxLFlQKSxoLm5qPWZ1bmN0aW9uKHQpe3JldHVybiBNeGUodGhpcyx0KX0saC5vaj1mdW5jdGlvbigpe3FvZSh0aGlzKX0saC5naj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGguS2o9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC5Saj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLmhqPWZ1bmN0aW9uKHQpe3JldHVybi0xfSxoLmlqPWZ1bmN0aW9uKCl7cmV0dXJuIG1idCh0aGlzKX0saC5qaj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLmtqPWZ1bmN0aW9uKCl7cmV0dXJuIFg5ZSh0aGlzKX0saC5saj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm88MD90aGlzLm88LTI/LTItdGhpcy5vLTE6LTE6dGhpcy5vfSxoLlNqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGgubWo9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQjtzd2l0Y2godGhpcy5kKXtjYXNlIDE6Y2FzZSAyOnN3aXRjaChvPXQuZ2ooKSxvKXtjYXNlIDE6Y2FzZSAyOmlmKGY9dC5qaigpLHFlKGYpPT09cWUodGhpcy5qaigpKSYmdGhpcy5oaihudWxsKT09dC5oaihudWxsKSlyZXR1cm4gdGhpcy5nPXQuaWooKSx0LmdqKCk9PTEmJih0aGlzLmQ9MSksITB9Y2FzZSA0Ontzd2l0Y2gobz10LmdqKCksbyl7Y2FzZSA0OntpZihmPXQuamooKSxxZShmKT09PXFlKHRoaXMuamooKSkmJnRoaXMuaGoobnVsbCk9PXQuaGoobnVsbCkpcmV0dXJuIEM9QmtlKHRoaXMpLEU9dGhpcy5vPDA/dGhpcy5vPC0yPy0yLXRoaXMuby0xOi0xOnRoaXMubyxnPXQubGooKSx0aGlzLmQ9NixCPW5ldyBMdygyKSxFPD1nPyhxcihCLHRoaXMubikscXIoQix0LmtqKCkpLHRoaXMuZz1oZShsZShWciwxKSxkaSwyOCwxNSxbdGhpcy5vPUUsZysxXSkpOihxcihCLHQua2ooKSkscXIoQix0aGlzLm4pLHRoaXMuZz1oZShsZShWciwxKSxkaSwyOCwxNSxbdGhpcy5vPWcsRV0pKSx0aGlzLm49QixDfHwodGhpcy5vPS0yLXRoaXMuby0xKSwhMDticmVha319YnJlYWt9Y2FzZSA2Ontzd2l0Y2gobz10LmdqKCksbyl7Y2FzZSA0OntpZihmPXQuamooKSxxZShmKT09PXFlKHRoaXMuamooKSkmJnRoaXMuaGoobnVsbCk9PXQuaGoobnVsbCkpe2ZvcihDPUJrZSh0aGlzKSxnPXQubGooKSxMPWwodGhpcy5nLDUzKSxhPVdlKFZyLGRpLDI4LEwubGVuZ3RoKzEsMTUsMSksbj0wO248TC5sZW5ndGgmJih3PUxbbl0sdzw9Zyk7KWFbbisrXT13LCsrZztmb3Iocj1sKHRoaXMubiwxNSksci5iZChuLHQua2ooKSksYVtuXT1nOysrbjxhLmxlbmd0aDspYVtuXT1MW24tMV07cmV0dXJuIHRoaXMuZz1hLEN8fCh0aGlzLm89LTItYVswXSksITB9YnJlYWt9fWJyZWFrfX1yZXR1cm4hMX0saC5JYj1mdW5jdGlvbigpe3ZhciB0LG4scixhO3N3aXRjaChhPW5ldyBBZihfbSh0aGlzLlJtKSsiQCIrKG49ZXModGhpcyk+Pj4wLG4udG9TdHJpbmcoMTYpKSksYS5hKz0iIChldmVudFR5cGU6ICIsdGhpcy5kKXtjYXNlIDE6e2EuYSs9IlNFVCI7YnJlYWt9Y2FzZSAyOnthLmErPSJVTlNFVCI7YnJlYWt9Y2FzZSAzOnthLmErPSJBREQiO2JyZWFrfWNhc2UgNTp7YS5hKz0iQUREX01BTlkiO2JyZWFrfWNhc2UgNDp7YS5hKz0iUkVNT1ZFIjticmVha31jYXNlIDY6e2EuYSs9IlJFTU9WRV9NQU5ZIjticmVha31jYXNlIDc6e2EuYSs9Ik1PVkUiO2JyZWFrfWNhc2UgODp7YS5hKz0iUkVNT1ZJTkdfQURBUFRFUiI7YnJlYWt9Y2FzZSA5OnthLmErPSJSRVNPTFZFIjticmVha31kZWZhdWx0Ontpc2UoYSx0aGlzLmQpO2JyZWFrfX1pZihpbXQodGhpcykmJihhLmErPSIsIHRvdWNoOiB0cnVlIiksYS5hKz0iLCBwb3NpdGlvbjogIixpc2UoYSx0aGlzLm88MD90aGlzLm88LTI/LTItdGhpcy5vLTE6LTE6dGhpcy5vKSxhLmErPSIsIG5vdGlmaWVyOiAiLE9fKGEsdGhpcy5qaigpKSxhLmErPSIsIGZlYXR1cmU6ICIsT18oYSx0aGlzLktqKCkpLGEuYSs9Iiwgb2xkVmFsdWU6ICIsT18oYSxYOWUodGhpcykpLGEuYSs9IiwgbmV3VmFsdWU6ICIsdGhpcy5kPT02JiZEZSh0aGlzLmcsNTMpKXtmb3Iocj1sKHRoaXMuZyw1MyksYS5hKz0iWyIsdD0wO3Q8ci5sZW5ndGg7KWEuYSs9clt0XSwrK3Q8ci5sZW5ndGgmJihhLmErPUNvKTthLmErPSJdIn1lbHNlIE9fKGEsbWJ0KHRoaXMpKTtyZXR1cm4gYS5hKz0iLCBpc1RvdWNoOiAiLEdwKGEsaW10KHRoaXMpKSxhLmErPSIsIHdhc1NldDogIixHcChhLEJrZSh0aGlzKSksYS5hKz0iKSIsYS5hfSxoLmQ9MCxoLmU9MCxoLmY9MCxoLmo9MCxoLms9MCxoLm89MCxoLnA9MCxJKFJ4LCJOb3RpZmljYXRpb25JbXBsIiwxNTIpLEQoMTE4OCwxNTIsWVAsWmF0KSxoLktqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5LaigpfSxoLmhqPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuTGooKX0saC5qaj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuamooKX0sSShSeCwiRGVsZWdhdGluZ05vdGlmeWluZ0xpc3RJbXBsLzEiLDExODgpLEQoMjUxLDY2LEJkLEMkLG5iKSxoLkZjPWZ1bmN0aW9uKHQpe3JldHVybiBTMXQodGhpcyxsKHQsMzc4KSl9LGgubmo9ZnVuY3Rpb24odCl7cmV0dXJuIFMxdCh0aGlzLHQpfSxoLm9qPWZ1bmN0aW9uKCl7dmFyIHQsbixyO2Zvcih0PTA7dDx0aGlzLmk7Kyt0KW49bCh0aGlzLmdbdF0sMzc4KSxyPW4uamooKSxyIT1udWxsJiZuLmdqKCkhPS0xJiZsKHIsOTQpLnhoKG4pfSxoLmFqPWZ1bmN0aW9uKHQpe3JldHVybiBXZShPT24sUm4sMzc4LHQsMCwxKX0sSShSeCwiTm90aWZpY2F0aW9uQ2hhaW5JbXBsIiwyNTEpLEQoMTUyNCw5MyxsNHQpLGgudWg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxoLndoPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuZiYxKSE9MH0saC5mPTEsSShSeCwiTm90aWZpZXJJbXBsIiwxNTI0KSxEKDIwOTEsNjYsQmQpLGguRWk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbGxlKHRoaXMsdCxuKX0saC5GaT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5FaSh0aGlzLmksdCl9LGguR2k9ZnVuY3Rpb24odCxuKXtFOWUodGhpcyx0LG4pfSxoLkhpPWZ1bmN0aW9uKHQpe1Z1ZSh0aGlzLHQpfSxoLkxpPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuTWooKX0saC4kYj1mdW5jdGlvbigpeyRyKHRoaXMpfSxoLklqPWZ1bmN0aW9uKHQsbixyLGEsbyl7cmV0dXJuIG5ldyBKYXQodGhpcyx0LG4scixhLG8pfSxoLkpqPWZ1bmN0aW9uKHQpe05pKHRoaXMuamooKSx0KX0saC5Laj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLkxqPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGguamo9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC5Naj1mdW5jdGlvbigpe3JldHVybiExfSxoLlRqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguTmo9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbn0saC5Paj1mdW5jdGlvbih0LG4pe3JldHVybiBufSxoLlBqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguUWo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pIT0wfSxoLlRpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEFBKHRoaXMsdCxuKX0saC5nZD1mdW5jdGlvbih0KXtyZXR1cm4gVnkodGhpcyx0KX0saC5YaT1mdW5jdGlvbih0LG4pe3JldHVybiBLbXQodGhpcyx0LG4pfSxoLlVqPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG59LGguVmo9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbn0saC5Xaj1mdW5jdGlvbih0LG4scil7cmV0dXJuIHJ9LEkoUngsIk5vdGlmeWluZ0xpc3RJbXBsIiwyMDkxKSxEKDExODcsMTUyLFlQLEphdCksaC5Laj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuS2ooKX0saC5oaj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLkxqKCl9LGguamo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmpqKCl9LEkoUngsIk5vdGlmeWluZ0xpc3RJbXBsLzEiLDExODcpLEQoOTY2LDY2LEJkLE9ydCksaC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pPjEwPygoIXRoaXMuYnx8dGhpcy5jLmohPXRoaXMuYSkmJih0aGlzLmI9bmV3IFVfKHRoaXMpLHRoaXMuYT10aGlzLmopLFcwKHRoaXMuYix0KSk6akUodGhpcyx0KX0saC5ZaT1mdW5jdGlvbigpe3JldHVybiEwfSxoLmE9MCxJKFNvLCJBYnN0cmFjdEVMaXN0LzEiLDk2NiksRCgzMDIsNzcsc2hlLG15KSxJKFNvLCJBYnN0cmFjdEVMaXN0L0Jhc2ljSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiIsMzAyKSxEKDM3LDEsT2Esb3IpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5Yaj1mdW5jdGlvbigpe2lmKHRoaXMuaS5qIT10aGlzLmYpdGhyb3cgdWUobmV3IFhoKX0saC5Zaj1mdW5jdGlvbigpe3JldHVybiBncih0aGlzKX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUhPXRoaXMuaS5nYygpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWWooKX0saC5RYj1mdW5jdGlvbigpe2pBKHRoaXMpfSxoLmU9MCxoLmY9MCxoLmc9LTEsSShTbywiQWJzdHJhY3RFTGlzdC9FSXRlcmF0b3IiLDM3KSxEKDI4NiwzNyxsZyxxOCxqYWUpLGguUWI9ZnVuY3Rpb24oKXtqQSh0aGlzKX0saC5SYj1mdW5jdGlvbih0KXtEMXQodGhpcyx0KX0saC5aaj1mdW5jdGlvbigpe3ZhciB0O3RyeXtyZXR1cm4gdD10aGlzLmQuWGIoLS10aGlzLmUpLHRoaXMuWGooKSx0aGlzLmc9dGhpcy5lLHR9Y2F0Y2gobil7dGhyb3cgbj1icyhuKSxEZShuLDc3KT8odGhpcy5YaigpLHVlKG5ldyBfYykpOnVlKG4pfX0saC4kaj1mdW5jdGlvbih0KXtCZHQodGhpcyx0KX0saC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUhPTB9LGguVGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxoLlViPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWmooKX0saC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUtMX0saC5XYj1mdW5jdGlvbih0KXt0aGlzLiRqKHQpfSxJKFNvLCJBYnN0cmFjdEVMaXN0L0VMaXN0SXRlcmF0b3IiLDI4NiksRCgzNTUsMzcsT2EsSDgpLGguWWo9ZnVuY3Rpb24oKXtyZXR1cm4gcnVlKHRoaXMpfSxoLlFiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0sSShTbywiQWJzdHJhY3RFTGlzdC9Ob25SZXNvbHZpbmdFSXRlcmF0b3IiLDM1NSksRCgzOTgsMjg2LGxnLENPLGY0ZSksaC5SYj1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLllqPWZ1bmN0aW9uKCl7dmFyIHQ7dHJ5e3JldHVybiB0PXRoaXMuYy5WaSh0aGlzLmUpLHRoaXMuWGooKSx0aGlzLmc9dGhpcy5lKyssdH1jYXRjaChuKXt0aHJvdyBuPWJzKG4pLERlKG4sNzcpPyh0aGlzLlhqKCksdWUobmV3IF9jKSk6dWUobil9fSxoLlpqPWZ1bmN0aW9uKCl7dmFyIHQ7dHJ5e3JldHVybiB0PXRoaXMuYy5WaSgtLXRoaXMuZSksdGhpcy5YaigpLHRoaXMuZz10aGlzLmUsdH1jYXRjaChuKXt0aHJvdyBuPWJzKG4pLERlKG4sNzcpPyh0aGlzLlhqKCksdWUobmV3IF9jKSk6dWUobil9fSxoLlFiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5XYj1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxJKFNvLCJBYnN0cmFjdEVMaXN0L05vblJlc29sdmluZ0VMaXN0SXRlcmF0b3IiLDM5OCksRCgyMDgwLDcwLFo0dCksaC5FaT1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHo7aWYobz1uLmdjKCksbyE9MCl7Zm9yKEM9bChLbih0aGlzLmEsNCksMTI5KSxMPUM9PW51bGw/MDpDLmxlbmd0aCx6PUwrbyxhPVNjZSh0aGlzLHopLEI9TC10LEI+MCYmcHUoQyx0LGEsdCtvLEIpLEU9bi5LYygpLGc9MDtnPG87KytnKXc9RS5QYigpLHI9dCtnLFhzZShhLHIsRUUodGhpcyx3KSk7Zm9yKFBFKHRoaXMsYSksZj0wO2Y8bzsrK2Ypdz1hW3RdLHRoaXMuTWkodCx3KSwrK3Q7cmV0dXJuITB9ZWxzZSByZXR1cm4rK3RoaXMuaiwhMX0saC5GaT1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYoYT10LmdjKCksYSE9MCl7Zm9yKEU9KHI9bChLbih0aGlzLmEsNCksMTI5KSxyPT1udWxsPzA6ci5sZW5ndGgpLEM9RSthLG49U2NlKHRoaXMsQyksdz10LktjKCksZj1FO2Y8QzsrK2YpZz13LlBiKCksWHNlKG4sZixFRSh0aGlzLGcpKTtmb3IoUEUodGhpcyxuKSxvPUU7bzxDOysrbylnPW5bb10sdGhpcy5NaShvLGcpO3JldHVybiEwfWVsc2UgcmV0dXJuKyt0aGlzLmosITF9LGguR2k9ZnVuY3Rpb24odCxuKXt2YXIgcixhLG8sZjthPWwoS24odGhpcy5hLDQpLDEyOSksbz1hPT1udWxsPzA6YS5sZW5ndGgscj1TY2UodGhpcyxvKzEpLGY9RUUodGhpcyxuKSx0IT1vJiZwdShhLHQscix0KzEsby10KSxUcyhyLHQsZiksUEUodGhpcyxyKSx0aGlzLk1pKHQsbil9LGguSGk9ZnVuY3Rpb24odCl7dmFyIG4scixhO2E9KHI9bChLbih0aGlzLmEsNCksMTI5KSxyPT1udWxsPzA6ci5sZW5ndGgpLG49U2NlKHRoaXMsYSsxKSxYc2UobixhLEVFKHRoaXMsdCkpLFBFKHRoaXMsbiksdGhpcy5NaShhLHQpfSxoLklpPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBFdXQodGhpcyl9LGguSmk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFBzdCh0aGlzKX0saC5LaT1mdW5jdGlvbih0KXt2YXIgbixyO2lmKHI9KG49bChLbih0aGlzLmEsNCksMTI5KSxuPT1udWxsPzA6bi5sZW5ndGgpLHQ8MHx8dD5yKXRocm93IHVlKG5ldyBteSh0LHIpKTtyZXR1cm4gbmV3IHhhdCh0aGlzLHQpfSxoLiRiPWZ1bmN0aW9uKCl7dmFyIHQsbjsrK3RoaXMuaix0PWwoS24odGhpcy5hLDQpLDEyOSksbj10PT1udWxsPzA6dC5sZW5ndGgsUEUodGhpcyxudWxsKSxOb2UodGhpcyxuLHQpfSxoLkhjPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGY7aWYobj1sKEtuKHRoaXMuYSw0KSwxMjkpLG4hPW51bGwpe2lmKHQhPW51bGwpe2ZvcihhPW4sbz0wLGY9YS5sZW5ndGg7bzxmOysrbylpZihyPWFbb10sUGkodCxyKSlyZXR1cm4hMH1lbHNlIGZvcihhPW4sbz0wLGY9YS5sZW5ndGg7bzxmOysrbylpZihyPWFbb10scWUocik9PT1xZSh0KSlyZXR1cm4hMH1yZXR1cm4hMX0saC5YYj1mdW5jdGlvbih0KXt2YXIgbixyO2lmKG49bChLbih0aGlzLmEsNCksMTI5KSxyPW49PW51bGw/MDpuLmxlbmd0aCx0Pj1yKXRocm93IHVlKG5ldyBteSh0LHIpKTtyZXR1cm4gblt0XX0saC5kZD1mdW5jdGlvbih0KXt2YXIgbixyLGE7aWYobj1sKEtuKHRoaXMuYSw0KSwxMjkpLG4hPW51bGwpe2lmKHQhPW51bGwpe2ZvcihyPTAsYT1uLmxlbmd0aDtyPGE7KytyKWlmKFBpKHQsbltyXSkpcmV0dXJuIHJ9ZWxzZSBmb3Iocj0wLGE9bi5sZW5ndGg7cjxhOysrcilpZihxZShuW3JdKT09PXFlKHQpKXJldHVybiByfXJldHVybi0xfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIGwoS24odGhpcy5hLDQpLDEyOSk9PW51bGx9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGt1dCh0aGlzKX0saC5lZD1mdW5jdGlvbigpe3JldHVybiBuZXcgTnN0KHRoaXMpfSxoLmZkPWZ1bmN0aW9uKHQpe3ZhciBuLHI7aWYocj0obj1sKEtuKHRoaXMuYSw0KSwxMjkpLG49PW51bGw/MDpuLmxlbmd0aCksdDwwfHx0PnIpdGhyb3cgdWUobmV3IG15KHQscikpO3JldHVybiBuZXcgeWF0KHRoaXMsdCl9LGguVGk9ZnVuY3Rpb24odCxuKXt2YXIgcixhLG87aWYocj16MXQodGhpcyksbz1yPT1udWxsPzA6ci5sZW5ndGgsdD49byl0aHJvdyB1ZShuZXcgdGMoUWZlK3QrYXYrbykpO2lmKG4+PW8pdGhyb3cgdWUobmV3IHRjKEpmZStuK2F2K28pKTtyZXR1cm4gYT1yW25dLHQhPW4mJih0PG4/cHUocix0LHIsdCsxLG4tdCk6cHUocixuKzEscixuLHQtbiksVHMocix0LGEpLFBFKHRoaXMscikpLGF9LGguVmk9ZnVuY3Rpb24odCl7cmV0dXJuIGwoS24odGhpcy5hLDQpLDEyOSlbdF19LGguZ2Q9ZnVuY3Rpb24odCl7cmV0dXJuIGJFbih0aGlzLHQpfSxoLlhpPWZ1bmN0aW9uKHQsbil7dmFyIHIsYTtyZXR1cm4gcj16MXQodGhpcyksYT1yW3RdLFhzZShyLHQsRUUodGhpcyxuKSksUEUodGhpcyxyKSxhfSxoLmdjPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9bChLbih0aGlzLmEsNCksMTI5KSx0PT1udWxsPzA6dC5sZW5ndGh9LGguUGM9ZnVuY3Rpb24oKXt2YXIgdCxuLHI7cmV0dXJuIHQ9bChLbih0aGlzLmEsNCksMTI5KSxyPXQ9PW51bGw/MDp0Lmxlbmd0aCxuPVdlKGVwZSxyMGUsNDI0LHIsMCwxKSxyPjAmJnB1KHQsMCxuLDAsciksbn0saC5RYz1mdW5jdGlvbih0KXt2YXIgbixyLGE7cmV0dXJuIG49bChLbih0aGlzLmEsNCksMTI5KSxhPW49PW51bGw/MDpuLmxlbmd0aCxhPjAmJih0Lmxlbmd0aDxhJiYocj1iTihiaCh0KS5jLGEpLHQ9cikscHUobiwwLHQsMCxhKSksdC5sZW5ndGg+YSYmVHModCxhLG51bGwpLHR9O3ZhciBNX3Q7SShTbywiQXJyYXlEZWxlZ2F0aW5nRUxpc3QiLDIwODApLEQoMTA1MSwzNyxPYSxrdXQpLGguWGo9ZnVuY3Rpb24oKXtpZih0aGlzLmIuaiE9dGhpcy5mfHxxZShsKEtuKHRoaXMuYi5hLDQpLDEyOSkpIT09cWUodGhpcy5hKSl0aHJvdyB1ZShuZXcgWGgpfSxoLlFiPWZ1bmN0aW9uKCl7akEodGhpcyksdGhpcy5hPWwoS24odGhpcy5iLmEsNCksMTI5KX0sSShTbywiQXJyYXlEZWxlZ2F0aW5nRUxpc3QvRUl0ZXJhdG9yIiwxMDUxKSxEKDcyMiwyODYsbGcsTnN0LHlhdCksaC5Yaj1mdW5jdGlvbigpe2lmKHRoaXMuYi5qIT10aGlzLmZ8fHFlKGwoS24odGhpcy5iLmEsNCksMTI5KSkhPT1xZSh0aGlzLmEpKXRocm93IHVlKG5ldyBYaCl9LGguJGo9ZnVuY3Rpb24odCl7QmR0KHRoaXMsdCksdGhpcy5hPWwoS24odGhpcy5iLmEsNCksMTI5KX0saC5RYj1mdW5jdGlvbigpe2pBKHRoaXMpLHRoaXMuYT1sKEtuKHRoaXMuYi5hLDQpLDEyOSl9LEkoU28sIkFycmF5RGVsZWdhdGluZ0VMaXN0L0VMaXN0SXRlcmF0b3IiLDcyMiksRCgxMDUyLDM1NSxPYSxFdXQpLGguWGo9ZnVuY3Rpb24oKXtpZih0aGlzLmIuaiE9dGhpcy5mfHxxZShsKEtuKHRoaXMuYi5hLDQpLDEyOSkpIT09cWUodGhpcy5hKSl0aHJvdyB1ZShuZXcgWGgpfSxJKFNvLCJBcnJheURlbGVnYXRpbmdFTGlzdC9Ob25SZXNvbHZpbmdFSXRlcmF0b3IiLDEwNTIpLEQoNzIzLDM5OCxsZyxQc3QseGF0KSxoLlhqPWZ1bmN0aW9uKCl7aWYodGhpcy5iLmohPXRoaXMuZnx8cWUobChLbih0aGlzLmIuYSw0KSwxMjkpKSE9PXFlKHRoaXMuYSkpdGhyb3cgdWUobmV3IFhoKX0sSShTbywiQXJyYXlEZWxlZ2F0aW5nRUxpc3QvTm9uUmVzb2x2aW5nRUxpc3RJdGVyYXRvciIsNzIzKSxEKDYxNSwzMDIsc2hlLFZzZSksSShTbywiQmFzaWNFTGlzdC9CYXNpY0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24iLDYxNSksRCg3MTAsNjYsQmQsZXllKSxoLmJkPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5GYz1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLmNkPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5HYz1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLiRiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5faT1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSWkoKX0saC5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLkppKCl9LGguZmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuS2kodCl9LGguVGk9ZnVuY3Rpb24odCxuKXt0aHJvdyB1ZShuZXcgUXIpfSxoLlVpPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5nZD1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLk1jPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguaGQ9ZnVuY3Rpb24odCxuKXt0aHJvdyB1ZShuZXcgUXIpfSxJKFNvLCJCYXNpY0VMaXN0L1VubW9kaWZpYWJsZUVMaXN0Iiw3MTApLEQoNzIxLDEsezM6MSwyMDoxLDE2OjEsMTU6MSw2MToxLDU5NzoxfSksaC5iZD1mdW5jdGlvbih0LG4pe2dobih0aGlzLHQsbChuLDQ0KSl9LGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIG9mbih0aGlzLGwodCw0NCkpfSxoLkpjPWZ1bmN0aW9uKHQpe3RvKHRoaXMsdCl9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIGwoT2UodGhpcy5jLHQpLDEzNil9LGguVGk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbCh0aGlzLmMuVGkodCxuKSw0NCl9LGguVWk9ZnVuY3Rpb24odCxuKXtwaG4odGhpcyx0LGwobiw0NCkpfSxoLkxjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbih0aGlzLDE2KSl9LGguZ2Q9ZnVuY3Rpb24odCl7cmV0dXJuIGwodGhpcy5jLmdkKHQpLDQ0KX0saC5oZD1mdW5jdGlvbih0LG4pe3JldHVybiBNZ24odGhpcyx0LGwobiw0NCkpfSxoLmpkPWZ1bmN0aW9uKHQpeyRtKHRoaXMsdCl9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMTYpfSxoLk9jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbih0aGlzLDE2KSl9LGguY2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5jLmNkKHQsbil9LGguR2M9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYy5HYyh0KX0saC4kYj1mdW5jdGlvbigpe3RoaXMuYy4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmMuSGModCl9LGguSWM9ZnVuY3Rpb24odCl7cmV0dXJuIEVOKHRoaXMuYyx0KX0saC5faj1mdW5jdGlvbigpe3ZhciB0LG4scjtpZih0aGlzLmQ9PW51bGwpe2Zvcih0aGlzLmQ9V2UodlBlLF9TZSw2NiwyKnRoaXMuZisxLDAsMSkscj10aGlzLmUsdGhpcy5mPTAsbj10aGlzLmMuS2MoKTtuLmUhPW4uaS5nYygpOyl0PWwobi5ZaigpLDEzNiksb1UodGhpcyx0KTt0aGlzLmU9cn19LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIGNpdCh0aGlzLHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIE03ZSh0aGlzLmMpfSxoLmRkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmMuZGQodCl9LGguYWs9ZnVuY3Rpb24oKXt0aGlzLmM9bmV3IGhRZSh0aGlzKX0saC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmY9PTB9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLktjKCl9LGguZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmVkKCl9LGguZmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYy5mZCh0KX0saC5iaz1mdW5jdGlvbigpe3JldHVybiBpTih0aGlzKX0saC5jaz1mdW5jdGlvbih0LG4scil7cmV0dXJuIG5ldyB4aXQodCxuLHIpfSxoLmRrPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTJH0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gV2h0KHRoaXMsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mfSxoLmtkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyBacCh0aGlzLmMsdCxuKX0saC5QYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuUGMoKX0saC5RYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jLlFjKHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFQ4ZSh0aGlzLmMpfSxoLmU9MCxoLmY9MCxJKFNvLCJCYXNpY0VNYXAiLDcyMSksRCgxMDQ2LDY2LEJkLGhRZSksaC5NaT1mdW5jdGlvbih0LG4pe0djbih0aGlzLGwobiwxMzYpKX0saC5QaT1mdW5jdGlvbih0LG4scil7dmFyIGE7KysoYT10aGlzLGwobiwxMzYpLGEpLmEuZX0saC5RaT1mdW5jdGlvbih0LG4pe0tjbih0aGlzLGwobiwxMzYpKX0saC5SaT1mdW5jdGlvbih0LG4scil7R2huKHRoaXMsbChuLDEzNiksbChyLDEzNikpfSxoLk9pPWZ1bmN0aW9uKHQsbil7emZ0KHRoaXMuYSl9LEkoU28sIkJhc2ljRU1hcC8xIiwxMDQ2KSxEKDEwNDcsNjYsQmQsUyQpLGguYWo9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKE5PbixlNXQsNjIxLHQsMCwxKX0sSShTbywiQmFzaWNFTWFwLzIiLDEwNDcpLEQoMTA0OCxxMSxUbCxmUWUpLGguJGI9ZnVuY3Rpb24oKXt0aGlzLmEuYy4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBLY2UodGhpcy5hLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mPT0wPyhGaygpLGZGLmEpOm5ldyBXSmUodGhpcy5hKX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj10aGlzLmEuZixZVih0aGlzLmEsdCksdGhpcy5hLmYhPW59LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmZ9LEkoU28sIkJhc2ljRU1hcC8zIiwxMDQ4KSxEKDEwNDksMzEsV3ksZFFlKSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLmMuJGIoKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gRmJ0KHRoaXMuYSx0KX0saC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZj09MD8oRmsoKSxmRi5hKTpuZXcgWUplKHRoaXMuYSl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmZ9LEkoU28sIkJhc2ljRU1hcC80IiwxMDQ5KSxEKDEwNTAscTEsVGwsZ1FlKSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLmMuJGIoKX0saC5IYz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYodGhpcy5hLmY+MCYmRGUodCw0NCkmJih0aGlzLmEuX2ooKSxFPWwodCw0NCksdz1FLmxkKCksbz13PT1udWxsPzA6ZXModyksZj1ReWUodGhpcy5hLG8pLG49dGhpcy5hLmRbZl0sbikpe2ZvcihyPWwobi5nLDM3OSksQz1uLmksZz0wO2c8QzsrK2cpaWYoYT1yW2ddLGEuQmkoKT09byYmYS5GYihFKSlyZXR1cm4hMH1yZXR1cm4hMX0saC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZj09MD8oRmsoKSxmRi5hKTpuZXcgbm9lKHRoaXMuYSl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIEEydCh0aGlzLHQpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mfSxJKFNvLCJCYXNpY0VNYXAvNSIsMTA1MCksRCg2MjIsMSxPYSxub2UpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIhPS0xfSxoLlBiPWZ1bmN0aW9uKCl7dmFyIHQ7aWYodGhpcy5mLmUhPXRoaXMuYyl0aHJvdyB1ZShuZXcgWGgpO2lmKHRoaXMuYj09LTEpdGhyb3cgdWUobmV3IF9jKTtyZXR1cm4gdGhpcy5kPXRoaXMuYSx0aGlzLmU9dGhpcy5iLGdndCh0aGlzKSx0PWwodGhpcy5mLmRbdGhpcy5kXS5nW3RoaXMuZV0sMTM2KSx0aGlzLmVrKHQpfSxoLlFiPWZ1bmN0aW9uKCl7aWYodGhpcy5mLmUhPXRoaXMuYyl0aHJvdyB1ZShuZXcgWGgpO2lmKHRoaXMuZT09LTEpdGhyb3cgdWUobmV3IHBsKTt0aGlzLmYuYy5NYyhPZSh0aGlzLmYuZFt0aGlzLmRdLHRoaXMuZSkpLHRoaXMuYz10aGlzLmYuZSx0aGlzLmU9LTEsdGhpcy5hPT10aGlzLmQmJnRoaXMuYiE9LTEmJi0tdGhpcy5ifSxoLmVrPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxoLmE9MCxoLmI9LTEsaC5jPTAsaC5kPTAsaC5lPTAsSShTbywiQmFzaWNFTWFwL0Jhc2ljRU1hcEl0ZXJhdG9yIiw2MjIpLEQoMTA0NCw2MjIsT2EsV0plKSxoLmVrPWZ1bmN0aW9uKHQpe3JldHVybiB0LmxkKCl9LEkoU28sIkJhc2ljRU1hcC9CYXNpY0VNYXBLZXlJdGVyYXRvciIsMTA0NCksRCgxMDQ1LDYyMixPYSxZSmUpLGguZWs9ZnVuY3Rpb24odCl7cmV0dXJuIHQubWQoKX0sSShTbywiQmFzaWNFTWFwL0Jhc2ljRU1hcFZhbHVlSXRlcmF0b3IiLDEwNDUpLEQoMTA0MywxLFd3LHBRZSksaC53Yz1mdW5jdGlvbih0KXttQSh0aGlzLHQpfSxoLnljPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gcWNlKHRoaXMsdCxuLHIpfSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLmMuJGIoKX0saC5fYj1mdW5jdGlvbih0KXtyZXR1cm4gTXR0KHRoaXMsdCl9LGgudWM9ZnVuY3Rpb24odCl7cmV0dXJuIEZidCh0aGlzLmEsdCl9LGgudmM9ZnVuY3Rpb24oKXtyZXR1cm4gcHZuKHRoaXMuYSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIGNpdCh0aGlzLmEsdCl9LGgueGM9ZnVuY3Rpb24odCl7cmV0dXJuIG4xKHRoaXMuYSx0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBNN2UodGhpcy5hLmMpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mPT0wfSxoLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIGR2bih0aGlzLmEpfSxoLnpjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEdOKHRoaXMuYSx0LG4pfSxoLkJjPWZ1bmN0aW9uKHQpe3JldHVybiBZVih0aGlzLmEsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmZ9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gVDhlKHRoaXMuYS5jKX0saC5DYz1mdW5jdGlvbigpe3JldHVybiBndm4odGhpcy5hKX0sSShTbywiQmFzaWNFTWFwL0RlbGVnYXRpbmdNYXAiLDEwNDMpLEQoNjIxLDEsezQ0OjEsMTM2OjEsNjIxOjF9LHhpdCksaC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gRGUodCw0NCk/KG49bCh0LDQ0KSwodGhpcy5iIT1udWxsP1BpKHRoaXMuYixuLmxkKCkpOnFlKHRoaXMuYik9PT1xZShuLmxkKCkpKSYmKHRoaXMuYyE9bnVsbD9QaSh0aGlzLmMsbi5tZCgpKTpxZSh0aGlzLmMpPT09cWUobi5tZCgpKSkpOiExfSxoLkJpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5sZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGgubWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYV4odGhpcy5jPT1udWxsPzA6ZXModGhpcy5jKSl9LGguQ2k9ZnVuY3Rpb24odCl7dGhpcy5hPXR9LGguRGk9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IENtKX0saC5uZD1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj10aGlzLmMsdGhpcy5jPXQsbn0saC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIrIi0+Iit0aGlzLmN9LGguYT0wO3ZhciBOT249SShTbywiQmFzaWNFTWFwL0VudHJ5SW1wbCIsNjIxKTtEKDU0NiwxLHt9LE1TKSxJKFNvLCJCYXNpY0VNYXAvVmlldyIsNTQ2KTt2YXIgZkY7RCg3ODMsMSx7fSksaC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gTzllKChDbigpLF9vKSx0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBxN2UoKENuKCksX28pKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBUYigoQ24oKSxfbykpfSxJKFNvLCJFQ29sbGVjdGlvbnMvQmFzaWNFbXB0eVVubW9kaWZpYWJsZUVMaXN0Iiw3ODMpLEQoMTM0OCwxLGxnLFFuZSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlJiPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5TYj1mdW5jdGlvbigpe3JldHVybiExfSxoLlBiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IF9jKX0saC5UYj1mdW5jdGlvbigpe3JldHVybiAwfSxoLlViPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IF9jKX0saC5WYj1mdW5jdGlvbigpe3JldHVybi0xfSxoLlFiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5XYj1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxJKFNvLCJFQ29sbGVjdGlvbnMvQmFzaWNFbXB0eVVubW9kaWZpYWJsZUVMaXN0LzEiLDEzNDgpLEQoMTM0Niw3ODMsezIwOjEsMTY6MSwxNToxLDYxOjF9LGlKZSksaC5iZD1mdW5jdGlvbih0LG4pe3daZSgpfSxoLkZjPWZ1bmN0aW9uKHQpe3JldHVybiB5WmUoKX0saC5jZD1mdW5jdGlvbih0LG4pe3JldHVybiB4WmUoKX0saC5HYz1mdW5jdGlvbih0KXtyZXR1cm4ga1plKCl9LGguJGI9ZnVuY3Rpb24oKXtFWmUoKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4hMX0saC5JYz1mdW5jdGlvbih0KXtyZXR1cm4hMX0saC5KYz1mdW5jdGlvbih0KXt0byh0aGlzLHQpfSxoLlhiPWZ1bmN0aW9uKHQpe3JldHVybiByeWUoKENuKCksdCkpLG51bGx9LGguZGQ9ZnVuY3Rpb24odCl7cmV0dXJuLTF9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLmZkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmF9LGguVGk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gVFplKCl9LGguVWk9ZnVuY3Rpb24odCxuKXtDWmUoKX0saC5MYz1mdW5jdGlvbigpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24odGhpcywxNikpfSxoLmdkPWZ1bmN0aW9uKHQpe3JldHVybiBTWmUoKX0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gX1plKCl9LGguaGQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQVplKCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gMH0saC5qZD1mdW5jdGlvbih0KXskbSh0aGlzLHQpfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrbih0aGlzLDE2KX0saC5PYz1mdW5jdGlvbigpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24odGhpcywxNikpfSxoLmtkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIENuKCksbmV3IFpwKF9vLHQsbil9LGguUGM9ZnVuY3Rpb24oKXtyZXR1cm4gZTVlKChDbigpLF9vKSl9LGguUWM9ZnVuY3Rpb24odCl7cmV0dXJuIENuKCksUEEoX28sdCl9LEkoU28sIkVDb2xsZWN0aW9ucy9FbXB0eVVubW9kaWZpYWJsZUVMaXN0IiwxMzQ2KSxEKDEzNDcsNzgzLHsyMDoxLDE2OjEsMTU6MSw2MToxLDU5NzoxfSxzSmUpLGguYmQ9ZnVuY3Rpb24odCxuKXt3WmUoKX0saC5GYz1mdW5jdGlvbih0KXtyZXR1cm4geVplKCl9LGguY2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4geFplKCl9LGguR2M9ZnVuY3Rpb24odCl7cmV0dXJuIGtaZSgpfSxoLiRiPWZ1bmN0aW9uKCl7RVplKCl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuITF9LGguSWM9ZnVuY3Rpb24odCl7cmV0dXJuITF9LGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gcnllKChDbigpLHQpKSxudWxsfSxoLmRkPWZ1bmN0aW9uKHQpe3JldHVybi0xfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5mZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hfSxoLlRpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFRaZSgpfSxoLlVpPWZ1bmN0aW9uKHQsbil7Q1plKCl9LGguTGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJuKG51bGwsbmV3IGtuKHRoaXMsMTYpKX0saC5nZD1mdW5jdGlvbih0KXtyZXR1cm4gU1plKCl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIF9aZSgpfSxoLmhkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEFaZSgpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGguamQ9ZnVuY3Rpb24odCl7JG0odGhpcyx0KX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcga24odGhpcywxNil9LGguT2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJuKG51bGwsbmV3IGtuKHRoaXMsMTYpKX0saC5rZD1mdW5jdGlvbih0LG4pe3JldHVybiBDbigpLG5ldyBacChfbyx0LG4pfSxoLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIGU1ZSgoQ24oKSxfbykpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiBDbigpLFBBKF9vLHQpfSxoLmJrPWZ1bmN0aW9uKCl7cmV0dXJuIENuKCksQ24oKSxtZ30sSShTbywiRUNvbGxlY3Rpb25zL0VtcHR5VW5tb2RpZmlhYmxlRU1hcCIsMTM0Nyk7dmFyIHlQZT1rcyhTbywiRW51bWVyYXRvciIpLGtZO0QoMjg4LDEsezI4ODoxfSxlbGUpLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHRoaXM9PT10PyEwOkRlKHQsMjg4KT8obj1sKHQsMjg4KSx0aGlzLmY9PW4uZiYmR2RuKHRoaXMuaSxuLmkpJiZfYWUodGhpcy5hLHRoaXMuZiYyNTY/bi5mJjI1Nj9uLmE6bnVsbDpuLmYmMjU2P251bGw6bi5hKSYmX2FlKHRoaXMuZCxuLmQpJiZfYWUodGhpcy5nLG4uZykmJl9hZSh0aGlzLmUsbi5lKSYmYjZuKHRoaXMsbikpOiExfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0saC5JYj1mdW5jdGlvbigpe3JldHVybiBibXQodGhpcyl9LGguZj0wO3ZhciBEX3Q9MCxJX3Q9MCxPX3Q9MCxOX3Q9MCx4UGU9MCxrUGU9MCxFUGU9MCxUUGU9MCxDUGU9MCxQX3QsJE09MCx6TT0wLEJfdD0wLEZfdD0wLEVZLFNQZTtJKFNvLCJVUkkiLDI4OCksRCgxMTIxLDQ1LG02LGFKZSksaC56Yz1mdW5jdGlvbih0LG4pe3JldHVybiBsKHJjKHRoaXMsZWkodCksbChuLDI4OCkpLDI4OCl9LEkoU28sIlVSSS9VUklDYWNoZSIsMTEyMSksRCg1MDYsNjYsQmQsRSQsdUgpLGguU2k9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShTbywiVW5pcXVlRUxpc3QiLDUwNiksRCg1OTAsNjMsbHAsblYpLEkoU28sIldyYXBwZWRFeGNlcHRpb24iLDU5MCk7dmFyIG1pPWtzKHBmLHI1dCksTTQ9a3MocGYsaTV0KSxkbD1rcyhwZixzNXQpLEQ0PWtzKHBmLGE1dCksbDE9a3MocGYsbzV0KSxWZj1rcyhwZiwiRUNsYXNzIiksdHBlPWtzKHBmLCJFRGF0YVR5cGUiKSxSX3Q7RCgxMjMzLDQ1LG02LG9KZSksaC54Yz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCk/eHUodGhpcyx0KTpoYyh6byh0aGlzLmYsdCkpfSxJKHBmLCJFRGF0YVR5cGUvSW50ZXJuYWwvQ29udmVyc2lvbkRlbGVnYXRlL0ZhY3RvcnkvUmVnaXN0cnkvSW1wbCIsMTIzMyk7dmFyIFRZPWtzKHBmLCJFRW51bSIpLHdwPWtzKHBmLGM1dCksV289a3MocGYsdTV0KSxVZj1rcyhwZixsNXQpLEdmLGszPWtzKHBmLGg1dCksSTQ9a3MocGYsZjV0KTtEKDEwNDIsMSx7fSxZbmUpLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iTklMIn0sSShwZiwiRVN0cnVjdHVyYWxGZWF0dXJlL0ludGVybmFsL0R5bmFtaWNWYWx1ZUhvbGRlci8xIiwxMDQyKTt2YXIgal90O0QoMTA0MSw0NSxtNixjSmUpLGgueGM9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpP3h1KHRoaXMsdCk6aGMoem8odGhpcy5mLHQpKX0sSShwZiwiRVN0cnVjdHVyYWxGZWF0dXJlL0ludGVybmFsL1NldHRpbmdEZWxlZ2F0ZS9GYWN0b3J5L1JlZ2lzdHJ5L0ltcGwiLDEwNDEpO3ZhciBadT1rcyhwZixkNXQpLG85PWtzKHBmLCJFVmFsaWRhdG9yL1BhdHRlcm5NYXRjaGVyIiksX1BlLEFQZSxWbixNMixPNCxKYiwkX3Qsel90LHFfdCxaYixEMixlbSxFMyx0ZCxIX3QsVl90LEtmLEkyLFVfdCxPMixONCxvNyxObyxHX3QsS190LFQzLENZPWtzKHVzLCJGZWF0dXJlTWFwL0VudHJ5Iik7RCg1NDUsMSx7NzY6MX0sU3EpLGguTGs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLm1kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sSShHbiwiQmFzaWNFT2JqZWN0SW1wbC8xIiw1NDUpLEQoMTA0MCwxLGkwZSxJdHQpLGguRms9ZnVuY3Rpb24odCl7cmV0dXJuIE1vZSh0aGlzLmEsdGhpcy5iLHQpfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIGdvdCh0aGlzLmEsdGhpcy5iKX0saC5XYj1mdW5jdGlvbih0KXtxNWUodGhpcy5hLHRoaXMuYix0KX0saC5Haz1mdW5jdGlvbigpe0hnbih0aGlzLmEsdGhpcy5iKX0sSShHbiwiQmFzaWNFT2JqZWN0SW1wbC80IiwxMDQwKSxEKDIwODEsMSx7MTE0OjF9KSxoLk1rPWZ1bmN0aW9uKHQpe3RoaXMuZT10PT0wP1dfdDpXZSh3YSxSbiwxLHQsNSwxKX0saC5saT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lW3RdfSxoLm1pPWZ1bmN0aW9uKHQsbil7dGhpcy5lW3RdPW59LGgubmk9ZnVuY3Rpb24odCl7dGhpcy5lW3RdPW51bGx9LGguTms9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxoLk9rPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5Qaz1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBRcil9LGguUWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxoLlJrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZSE9bnVsbH0saC5Taz1mdW5jdGlvbih0KXt0aGlzLmM9dH0saC5Uaz1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLlVrPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguVms9ZnVuY3Rpb24odCl7dGhpcy5kPXR9O3ZhciBXX3Q7SShHbiwiQmFzaWNFT2JqZWN0SW1wbC9FUHJvcGVydGllc0hvbGRlckJhc2VJbXBsIiwyMDgxKSxEKDE5MiwyMDgxLHsxMTQ6MX0sU2YpLGguT2s9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLlBrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC5Uaz1mdW5jdGlvbih0KXt0aGlzLmE9dH0saC5Vaz1mdW5jdGlvbih0KXt0aGlzLmI9dH0sSShHbiwiQmFzaWNFT2JqZWN0SW1wbC9FUHJvcGVydGllc0hvbGRlckltcGwiLDE5MiksRCg1MTYsOTksZzR0LG01KSxoLnVoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0saC56aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmt9LGguQmg9ZnVuY3Rpb24odCxuKXt0aGlzLmc9dCx0aGlzLmk9bn0saC5EaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmomMj90aGlzLiRoKCkuTmsoKTp0aGlzLmlpKCl9LGguRmg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pfSxoLndoPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuaiYxKSE9MH0saC5QaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd9LGguVmg9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5qJjQpIT0wfSxoLiRoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuayYmKHRoaXMuaz1uZXcgU2YpLHRoaXMua30saC5jaT1mdW5jdGlvbih0KXt0aGlzLiRoKCkuU2sodCksdD90aGlzLmp8PTI6dGhpcy5qJj0tM30saC5laT1mdW5jdGlvbih0KXt0aGlzLiRoKCkuVWsodCksdD90aGlzLmp8PTQ6dGhpcy5qJj0tNX0saC5paT1mdW5jdGlvbigpe3JldHVybihsYigpLFZuKS5TfSxoLmk9MCxoLmo9MSxJKEduLCJFT2JqZWN0SW1wbCIsNTE2KSxEKDc5OCw1MTYsezExMDoxLDk0OjEsOTM6MSw1ODoxLDExNDoxLDU0OjEsOTk6MX0sRjRlKSxoLmxpPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVbdF19LGgubWk9ZnVuY3Rpb24odCxuKXt0aGlzLmVbdF09bn0saC5uaT1mdW5jdGlvbih0KXt0aGlzLmVbdF09bnVsbH0saC5EaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGguSWg9ZnVuY3Rpb24odCl7cmV0dXJuIG1zKHRoaXMuZCx0KX0saC5LaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGguT2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lIT1udWxsfSxoLiRoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuayYmKHRoaXMuaz1uZXcgXyQpLHRoaXMua30saC5jaT1mdW5jdGlvbih0KXt0aGlzLmQ9dH0saC5oaT1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmU9PW51bGwmJih0PXlyKHRoaXMuZCksdGhpcy5lPXQ9PTA/WV90OldlKHdhLFJuLDEsdCw1LDEpKSx0aGlzfSxoLmppPWZ1bmN0aW9uKCl7cmV0dXJuIDB9O3ZhciBZX3Q7SShHbiwiRHluYW1pY0VPYmplY3RJbXBsIiw3OTgpLEQoMTUyMiw3OTgsezExMDoxLDQ0OjEsOTQ6MSw5MzoxLDEzNjoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxfSxHaXQpLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIGZ3KHRoaXMpfSxoLmNpPWZ1bmN0aW9uKHQpe3RoaXMuZD10LHRoaXMuYj1vUCh0LCJrZXkiKSx0aGlzLmM9b1AodCxUTCl9LGguQmk9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5hPT0tMSYmKHQ9SG9lKHRoaXMsdGhpcy5iKSx0aGlzLmE9dD09bnVsbD8wOmVzKHQpKSx0aGlzLmF9LGgubGQ9ZnVuY3Rpb24oKXtyZXR1cm4gSG9lKHRoaXMsdGhpcy5iKX0saC5tZD1mdW5jdGlvbigpe3JldHVybiBIb2UodGhpcyx0aGlzLmMpfSxoLkNpPWZ1bmN0aW9uKHQpe3RoaXMuYT10fSxoLkRpPWZ1bmN0aW9uKHQpe3E1ZSh0aGlzLHRoaXMuYix0KX0saC5uZD1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj1Ib2UodGhpcyx0aGlzLmMpLHE1ZSh0aGlzLHRoaXMuYyx0KSxufSxoLmE9MCxJKEduLCJEeW5hbWljRU9iamVjdEltcGwvQmFzaWNFTWFwRW50cnkiLDE1MjIpLEQoMTUyMywxLHsxMTQ6MX0sXyQpLGguTWs9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5saT1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLm1pPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5uaT1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLk5rPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5Paz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguUGs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLlFrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30saC5Saz1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBRcil9LGguU2s9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5Uaz1mdW5jdGlvbih0KXt0aGlzLmE9dH0saC5Vaz1mdW5jdGlvbih0KXt0aGlzLmI9dH0saC5Waz1mdW5jdGlvbih0KXt0aGlzLmM9dH0sSShHbiwiRHluYW1pY0VPYmplY3RJbXBsL0R5bmFtaWNFUHJvcGVydGllc0hvbGRlckltcGwiLDE1MjMpLEQoNTE5LDE1OCx7MTEwOjEsOTQ6MSw5MzoxLDU5ODoxLDE1NToxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDUxOToxLDE1ODoxLDExOToxLDEyMDoxfSxDSSksaC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gZHhlKHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLmQ7Y2FzZSAyOnJldHVybiByPyghdGhpcy5iJiYodGhpcy5iPW5ldyBkaCgoVG4oKSxObyksWWMsdGhpcykpLHRoaXMuYik6KCF0aGlzLmImJih0aGlzLmI9bmV3IGRoKChUbigpLE5vKSxZYyx0aGlzKSksaU4odGhpcy5iKSk7Y2FzZSAzOnJldHVybiB3b3QodGhpcyk7Y2FzZSA0OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IFlzKFhiLHRoaXMsNCkpLHRoaXMuYTtjYXNlIDU6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgJDUoWGIsdGhpcyw1KSksdGhpcy5jfXJldHVybiBzZih0aGlzLHQteXIoKFRuKCksTTIpKSxNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHxNMiksdCksbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFJ1KHRoaXMuQWIsdCxyKTtjYXNlIDM6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/ZHhlKHRoaXMscik6dGhpcy5DYi5UaCh0aGlzLC0xLW8sbnVsbCxyKSkpLFo0ZSh0aGlzLGwodCwxNTUpLHIpfXJldHVybiBmPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KFRuKCksTTIpKSxuKSw2OSksZi53aygpLnprKHRoaXMsS3UodGhpcyksbi15cigoVG4oKSxNMikpLHQscil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksVG8odGhpcy5BYix0LHIpO2Nhc2UgMjpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBkaCgoVG4oKSxObyksWWMsdGhpcykpLFVxKHRoaXMuYix0LHIpO2Nhc2UgMzpyZXR1cm4gWjRlKHRoaXMsbnVsbCxyKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgWXMoWGIsdGhpcyw0KSksVG8odGhpcy5hLHQscil9cmV0dXJuIG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHwoVG4oKSxNMikpLG4pLDY5KSxvLndrKCkuQWsodGhpcyxLdSh0aGlzKSxuLXlyKChUbigpLE0yKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy5kIT1udWxsO2Nhc2UgMjpyZXR1cm4hIXRoaXMuYiYmdGhpcy5iLmYhPTA7Y2FzZSAzOnJldHVybiEhd290KHRoaXMpO2Nhc2UgNDpyZXR1cm4hIXRoaXMuYSYmdGhpcy5hLmkhPTA7Y2FzZSA1OnJldHVybiEhdGhpcy5jJiZ0aGlzLmMuaSE9MH1yZXR1cm4gbmYodGhpcyx0LXlyKChUbigpLE0yKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8TTIpLHQpKX0saC5iaT1mdW5jdGlvbih0LG4pe3ZhciByO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxBcyh0aGlzLkFiLGwobiwxNikpO3JldHVybjtjYXNlIDE6T2RuKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgZGgoKFRuKCksTm8pLFljLHRoaXMpKSxfVih0aGlzLmIsbik7cmV0dXJuO2Nhc2UgMzppYnQodGhpcyxsKG4sMTU1KSk7cmV0dXJuO2Nhc2UgNDohdGhpcy5hJiYodGhpcy5hPW5ldyBZcyhYYix0aGlzLDQpKSwkcih0aGlzLmEpLCF0aGlzLmEmJih0aGlzLmE9bmV3IFlzKFhiLHRoaXMsNCkpLEFzKHRoaXMuYSxsKG4sMTYpKTtyZXR1cm47Y2FzZSA1OiF0aGlzLmMmJih0aGlzLmM9bmV3ICQ1KFhiLHRoaXMsNSkpLCRyKHRoaXMuYyksIXRoaXMuYyYmKHRoaXMuYz1uZXcgJDUoWGIsdGhpcyw1KSksQXModGhpcy5jLGwobiwxNikpO3JldHVybn11Zih0aGlzLHQteXIoKFRuKCksTTIpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHxNMiksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSxNMn0saC5raT1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOmc3ZSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgZGgoKFRuKCksTm8pLFljLHRoaXMpKSx0aGlzLmIuYy4kYigpO3JldHVybjtjYXNlIDM6aWJ0KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNDohdGhpcy5hJiYodGhpcy5hPW5ldyBZcyhYYix0aGlzLDQpKSwkcih0aGlzLmEpO3JldHVybjtjYXNlIDU6IXRoaXMuYyYmKHRoaXMuYz1uZXcgJDUoWGIsdGhpcyw1KSksJHIodGhpcy5jKTtyZXR1cm59Y2YodGhpcyx0LXlyKChUbigpLE0yKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8TTIpLHQpKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBjMXQodGhpcyl9LGguZD1udWxsLEkoR24sIkVBbm5vdGF0aW9uSW1wbCIsNTE5KSxEKDE0MSw3MjEsQVNlLHhsKSxoLkdpPWZ1bmN0aW9uKHQsbil7UWxuKHRoaXMsdCxsKG4sNDQpKX0saC5Xaz1mdW5jdGlvbih0LG4pe3JldHVybiBaZm4odGhpcyxsKHQsNDQpLG4pfSxoLiRpPWZ1bmN0aW9uKHQpe3JldHVybiBsKGwodGhpcy5jLDcxKS4kaSh0KSwxMzYpfSxoLklpPWZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcy5jLDcxKS5JaSgpfSxoLkppPWZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcy5jLDcxKS5KaSgpfSxoLktpPWZ1bmN0aW9uKHQpe3JldHVybiBsKHRoaXMuYyw3MSkuS2kodCl9LGguWGs9ZnVuY3Rpb24odCxuKXtyZXR1cm4gVXEodGhpcyx0LG4pfSxoLkZrPWZ1bmN0aW9uKHQpe3JldHVybiBsKHRoaXMuYyw3OSkuRmsodCl9LGguYWs9ZnVuY3Rpb24oKXt9LGguUWo9ZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLmMsNzkpLlFqKCl9LGguY2s9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3JldHVybiBhPWwoQWgodGhpcy5iKS53aSgpLnNpKHRoaXMuYiksMTM2KSxhLkNpKHQpLGEuRGkobiksYS5uZChyKSxhfSxoLmRrPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrd2UodGhpcyl9LGguV2I9ZnVuY3Rpb24odCl7X1YodGhpcyx0KX0saC5Haz1mdW5jdGlvbigpe2wodGhpcy5jLDc5KS5HaygpfSxJKHVzLCJFY29yZUVNYXAiLDE0MSksRCgxNjUsMTQxLEFTZSxkaCksaC5faj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG8sZjtpZih0aGlzLmQ9PW51bGwpe2ZvcihmPVdlKHZQZSxfU2UsNjYsMip0aGlzLmYrMSwwLDEpLHI9dGhpcy5jLktjKCk7ci5lIT1yLmkuZ2MoKTspbj1sKHIuWWooKSwxMzYpLGE9bi5CaSgpLG89KGEmSWkpJWYubGVuZ3RoLHQ9ZltvXSwhdCYmKHQ9ZltvXT1uZXcga3dlKHRoaXMpKSx0LkZjKG4pO3RoaXMuZD1mfX0sSShHbiwiRUFubm90YXRpb25JbXBsLzEiLDE2NSksRCgyOTIsNDQ4LHsxMTA6MSw5NDoxLDkzOjEsMTU1OjEsMTk3OjEsNTg6MSwxMTQ6MSw0ODE6MSw1NDoxLDk5OjEsMTU4OjEsMjkyOjEsMTE5OjEsMTIwOjF9KSxoLkxoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJjI1Nik7Y2FzZSAzOnJldHVybiBIbigpLCEhKHRoaXMuQmImNTEyKTtjYXNlIDQ6cmV0dXJuIHB0KHRoaXMucyk7Y2FzZSA1OnJldHVybiBwdCh0aGlzLnQpO2Nhc2UgNjpyZXR1cm4gSG4oKSwhIXRoaXMuSmsoKTtjYXNlIDc6cmV0dXJuIEhuKCksbz10aGlzLnMsbz49MTtjYXNlIDg6cmV0dXJuIG4/T2YodGhpcyk6dGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xfXJldHVybiBzZih0aGlzLHQteXIodGhpcy5paSgpKSxNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHx0aGlzLmlpKCkpLHQpLG4scil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksVG8odGhpcy5BYix0LHIpO2Nhc2UgOTpyZXR1cm4gcWFlKHRoaXMscil9cmV0dXJuIG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHx0aGlzLmlpKCkpLG4pLDY5KSxvLndrKCkuQWsodGhpcyxLdSh0aGlzKSxuLXlyKHRoaXMuaWkoKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbixyO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4odGhpcy5CYiYyNTYpPT0wO2Nhc2UgMzpyZXR1cm4odGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gdGhpcy5KaygpO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wKX1yZXR1cm4gbmYodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8dGhpcy5paSgpKSx0KSl9LGguYmk9ZnVuY3Rpb24odCxuKXt2YXIgcixhO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxBcyh0aGlzLkFiLGwobiwxNikpO3JldHVybjtjYXNlIDE6dGhpcy51aShlaShuKSk7cmV0dXJuO2Nhc2UgMjpjMih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMzp1Mih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgNDppMih0aGlzLGwobiwxNykuYSk7cmV0dXJuO2Nhc2UgNTp0aGlzLlprKGwobiwxNykuYSk7cmV0dXJuO2Nhc2UgODpHbSh0aGlzLGwobiwxNDIpKTtyZXR1cm47Y2FzZSA5OmE9JDEodGhpcyxsKG4sODkpLG51bGwpLGEmJmEub2ooKTtyZXR1cm59dWYodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4oKHI9bChLbih0aGlzLDE2KSwyOSkscnx8dGhpcy5paSgpKSx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLEtfdH0saC5raT1mdW5jdGlvbih0KXt2YXIgbixyO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6dGhpcy51aShudWxsKTtyZXR1cm47Y2FzZSAyOmMyKHRoaXMsITApO3JldHVybjtjYXNlIDM6dTIodGhpcywhMCk7cmV0dXJuO2Nhc2UgNDppMih0aGlzLDApO3JldHVybjtjYXNlIDU6dGhpcy5aaygxKTtyZXR1cm47Y2FzZSA4OkdtKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgOTpyPSQxKHRoaXMsbnVsbCxudWxsKSxyJiZyLm9qKCk7cmV0dXJufWNmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fHRoaXMuaWkoKSksdCkpfSxoLnBpPWZ1bmN0aW9uKCl7T2YodGhpcyksdGhpcy5CYnw9MX0saC5Iaz1mdW5jdGlvbigpe3JldHVybiBPZih0aGlzKX0saC5Jaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnR9LGguSms9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLnQsdD4xfHx0PT0tMX0saC5TaT1mdW5jdGlvbigpe3JldHVybih0aGlzLkJiJjUxMikhPTB9LGguWWs9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbzhlKHRoaXMsdCxuKX0saC5aaz1mdW5jdGlvbih0KXtNeSh0aGlzLHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFQ5ZSh0aGlzKX0saC5zPTAsaC50PTEsSShHbiwiRVR5cGVkRWxlbWVudEltcGwiLDI5MiksRCg0NjIsMjkyLHsxMTA6MSw5NDoxLDkzOjEsMTU1OjEsMTk3OjEsNTg6MSwxNzk6MSw2OToxLDExNDoxLDQ4MToxLDU0OjEsOTk6MSwxNTg6MSw0NjI6MSwyOTI6MSwxMTk6MSwxMjA6MSw2OTI6MX0pLGguQWg9ZnVuY3Rpb24odCl7cmV0dXJuIFFkdCh0aGlzLHQpfSxoLkxoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJjI1Nik7Y2FzZSAzOnJldHVybiBIbigpLCEhKHRoaXMuQmImNTEyKTtjYXNlIDQ6cmV0dXJuIHB0KHRoaXMucyk7Y2FzZSA1OnJldHVybiBwdCh0aGlzLnQpO2Nhc2UgNjpyZXR1cm4gSG4oKSwhIXRoaXMuSmsoKTtjYXNlIDc6cmV0dXJuIEhuKCksbz10aGlzLnMsbz49MTtjYXNlIDg6cmV0dXJuIG4/T2YodGhpcyk6dGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xO2Nhc2UgMTA6cmV0dXJuIEhuKCksISEodGhpcy5CYiZtMCk7Y2FzZSAxMTpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJnI0KTtjYXNlIDEyOnJldHVybiBIbigpLCEhKHRoaXMuQmImWHkpO2Nhc2UgMTM6cmV0dXJuIHRoaXMuajtjYXNlIDE0OnJldHVybiBVRSh0aGlzKTtjYXNlIDE1OnJldHVybiBIbigpLCEhKHRoaXMuQmImU2wpO2Nhc2UgMTY6cmV0dXJuIEhuKCksISEodGhpcy5CYiZfZCk7Y2FzZSAxNzpyZXR1cm4ga3kodGhpcyl9cmV0dXJuIHNmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fHRoaXMuaWkoKSksdCksbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFJ1KHRoaXMuQWIsdCxyKTtjYXNlIDE3OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP1FkdCh0aGlzLHIpOnRoaXMuQ2IuVGgodGhpcywtMS1vLG51bGwscikpKSxOaCh0aGlzLHQsMTcscil9cmV0dXJuIGY9bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHx0aGlzLmlpKCkpLG4pLDY5KSxmLndrKCkuemsodGhpcyxLdSh0aGlzKSxuLXlyKHRoaXMuaWkoKSksdCxyKX0saC5VaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxUbyh0aGlzLkFiLHQscik7Y2FzZSA5OnJldHVybiBxYWUodGhpcyxyKTtjYXNlIDE3OnJldHVybiBOaCh0aGlzLG51bGwsMTcscil9cmV0dXJuIG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHx0aGlzLmlpKCkpLG4pLDY5KSxvLndrKCkuQWsodGhpcyxLdSh0aGlzKSxuLXlyKHRoaXMuaWkoKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbixyO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4odGhpcy5CYiYyNTYpPT0wO2Nhc2UgMzpyZXR1cm4odGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gdGhpcy5KaygpO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybih0aGlzLkJiJm0wKT09MDtjYXNlIDExOnJldHVybih0aGlzLkJiJnI0KSE9MDtjYXNlIDEyOnJldHVybih0aGlzLkJiJlh5KSE9MDtjYXNlIDEzOnJldHVybiB0aGlzLmohPW51bGw7Y2FzZSAxNDpyZXR1cm4gVUUodGhpcykhPW51bGw7Y2FzZSAxNTpyZXR1cm4odGhpcy5CYiZTbCkhPTA7Y2FzZSAxNjpyZXR1cm4odGhpcy5CYiZfZCkhPTA7Y2FzZSAxNzpyZXR1cm4hIWt5KHRoaXMpfXJldHVybiBuZih0aGlzLHQteXIodGhpcy5paSgpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHx0aGlzLmlpKCkpLHQpKX0saC5iaT1mdW5jdGlvbih0LG4pe3ZhciByLGE7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLEFzKHRoaXMuQWIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTpwb2UodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgMjpjMih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMzp1Mih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgNDppMih0aGlzLGwobiwxNykuYSk7cmV0dXJuO2Nhc2UgNTp0aGlzLlprKGwobiwxNykuYSk7cmV0dXJuO2Nhc2UgODpHbSh0aGlzLGwobiwxNDIpKTtyZXR1cm47Y2FzZSA5OmE9JDEodGhpcyxsKG4sODkpLG51bGwpLGEmJmEub2ooKTtyZXR1cm47Y2FzZSAxMDpBRSh0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMTE6REUodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDEyOkxFKHRoaXMsUnQoQnQobikpKTtyZXR1cm47Y2FzZSAxMzpaM2UodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgMTU6TUUodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDE2OklFKHRoaXMsUnQoQnQobikpKTtyZXR1cm59dWYodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4oKHI9bChLbih0aGlzLDE2KSwyOSkscnx8dGhpcy5paSgpKSx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLEdfdH0saC5raT1mdW5jdGlvbih0KXt2YXIgbixyO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RGUodGhpcy5DYiw5MCkmJnp5KFlsKGwodGhpcy5DYiw5MCkpLDQpLEZ1KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpjMih0aGlzLCEwKTtyZXR1cm47Y2FzZSAzOnUyKHRoaXMsITApO3JldHVybjtjYXNlIDQ6aTIodGhpcywwKTtyZXR1cm47Y2FzZSA1OnRoaXMuWmsoMSk7cmV0dXJuO2Nhc2UgODpHbSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6cj0kMSh0aGlzLG51bGwsbnVsbCksciYmci5vaigpO3JldHVybjtjYXNlIDEwOkFFKHRoaXMsITApO3JldHVybjtjYXNlIDExOkRFKHRoaXMsITEpO3JldHVybjtjYXNlIDEyOkxFKHRoaXMsITEpO3JldHVybjtjYXNlIDEzOnRoaXMuaT1udWxsLHhWKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTU6TUUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTY6SUUodGhpcywhMSk7cmV0dXJufWNmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fHRoaXMuaWkoKSksdCkpfSxoLnBpPWZ1bmN0aW9uKCl7V2soaWMoKEVsKCksaW8pLHRoaXMpKSxPZih0aGlzKSx0aGlzLkJifD0xfSxoLnBrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0saC5paz1mdW5jdGlvbigpe3JldHVybiBVRSh0aGlzKX0saC5xaz1mdW5jdGlvbigpe3JldHVybiBreSh0aGlzKX0saC51az1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLiRrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua30saC5Maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm59LGgudms9ZnVuY3Rpb24oKXtyZXR1cm4gcFUodGhpcyl9LGgud2s9ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEU7cmV0dXJuIHRoaXMucHx8KHI9a3kodGhpcyksKHIuaT09bnVsbCYmU2Qociksci5pKS5sZW5ndGgsYT10aGlzLnVrKCksYSYmeXIoa3koYSkpLG89T2YodGhpcyksZz1vLmtrKCksdD1nP2cuaSYxP2c9PWloP05zOmc9PVZyP3JvOmc9PUI0P19UOmc9PU5hP3RhOmc9PW5tP3IzOmc9PWg3P2kzOmc9PUFsP2p4OlBMOmc6bnVsbCxuPVVFKHRoaXMpLHc9by5paygpLEs0bih0aGlzKSx0aGlzLkJiJl9kJiYoKGY9eXhlKChFbCgpLGlvKSxyKSkmJmYhPXRoaXN8fChmPXJ4KGljKGlvLHRoaXMpKSkpP3RoaXMucD1uZXcgTnR0KHRoaXMsZik6dGhpcy5KaygpP3RoaXMuYWwoKT9hP3RoaXMuQmImU2w/dD90aGlzLmJsKCk/dGhpcy5wPW5ldyBPbSg0Nyx0LHRoaXMsYSk6dGhpcy5wPW5ldyBPbSg1LHQsdGhpcyxhKTp0aGlzLmJsKCk/dGhpcy5wPW5ldyBSbSg0Nix0aGlzLGEpOnRoaXMucD1uZXcgUm0oNCx0aGlzLGEpOnQ/dGhpcy5ibCgpP3RoaXMucD1uZXcgT20oNDksdCx0aGlzLGEpOnRoaXMucD1uZXcgT20oNyx0LHRoaXMsYSk6dGhpcy5ibCgpP3RoaXMucD1uZXcgUm0oNDgsdGhpcyxhKTp0aGlzLnA9bmV3IFJtKDYsdGhpcyxhKTp0aGlzLkJiJlNsP3Q/dD09dXY/dGhpcy5wPW5ldyBYcCg1MCxBX3QsdGhpcyk6dGhpcy5ibCgpP3RoaXMucD1uZXcgWHAoNDMsdCx0aGlzKTp0aGlzLnA9bmV3IFhwKDEsdCx0aGlzKTp0aGlzLmJsKCk/dGhpcy5wPW5ldyBKcCg0Mix0aGlzKTp0aGlzLnA9bmV3IEpwKDAsdGhpcyk6dD90PT11dj90aGlzLnA9bmV3IFhwKDQxLEFfdCx0aGlzKTp0aGlzLmJsKCk/dGhpcy5wPW5ldyBYcCg0NSx0LHRoaXMpOnRoaXMucD1uZXcgWHAoMyx0LHRoaXMpOnRoaXMuYmwoKT90aGlzLnA9bmV3IEpwKDQ0LHRoaXMpOnRoaXMucD1uZXcgSnAoMix0aGlzKTpEZShvLDE1Nik/dD09Q1k/dGhpcy5wPW5ldyBKcCg0MCx0aGlzKTp0aGlzLkJiJjUxMj90aGlzLkJiJlNsP3Q/dGhpcy5wPW5ldyBYcCg5LHQsdGhpcyk6dGhpcy5wPW5ldyBKcCg4LHRoaXMpOnQ/dGhpcy5wPW5ldyBYcCgxMSx0LHRoaXMpOnRoaXMucD1uZXcgSnAoMTAsdGhpcyk6dGhpcy5CYiZTbD90P3RoaXMucD1uZXcgWHAoMTMsdCx0aGlzKTp0aGlzLnA9bmV3IEpwKDEyLHRoaXMpOnQ/dGhpcy5wPW5ldyBYcCgxNSx0LHRoaXMpOnRoaXMucD1uZXcgSnAoMTQsdGhpcyk6YT8oRT1hLnQsRT4xfHxFPT0tMT90aGlzLmJsKCk/dGhpcy5CYiZTbD90P3RoaXMucD1uZXcgT20oMjUsdCx0aGlzLGEpOnRoaXMucD1uZXcgUm0oMjQsdGhpcyxhKTp0P3RoaXMucD1uZXcgT20oMjcsdCx0aGlzLGEpOnRoaXMucD1uZXcgUm0oMjYsdGhpcyxhKTp0aGlzLkJiJlNsP3Q/dGhpcy5wPW5ldyBPbSgyOSx0LHRoaXMsYSk6dGhpcy5wPW5ldyBSbSgyOCx0aGlzLGEpOnQ/dGhpcy5wPW5ldyBPbSgzMSx0LHRoaXMsYSk6dGhpcy5wPW5ldyBSbSgzMCx0aGlzLGEpOnRoaXMuYmwoKT90aGlzLkJiJlNsP3Q/dGhpcy5wPW5ldyBPbSgzMyx0LHRoaXMsYSk6dGhpcy5wPW5ldyBSbSgzMix0aGlzLGEpOnQ/dGhpcy5wPW5ldyBPbSgzNSx0LHRoaXMsYSk6dGhpcy5wPW5ldyBSbSgzNCx0aGlzLGEpOnRoaXMuQmImU2w/dD90aGlzLnA9bmV3IE9tKDM3LHQsdGhpcyxhKTp0aGlzLnA9bmV3IFJtKDM2LHRoaXMsYSk6dD90aGlzLnA9bmV3IE9tKDM5LHQsdGhpcyxhKTp0aGlzLnA9bmV3IFJtKDM4LHRoaXMsYSkpOnRoaXMuYmwoKT90aGlzLkJiJlNsP3Q/dGhpcy5wPW5ldyBYcCgxNyx0LHRoaXMpOnRoaXMucD1uZXcgSnAoMTYsdGhpcyk6dD90aGlzLnA9bmV3IFhwKDE5LHQsdGhpcyk6dGhpcy5wPW5ldyBKcCgxOCx0aGlzKTp0aGlzLkJiJlNsP3Q/dGhpcy5wPW5ldyBYcCgyMSx0LHRoaXMpOnRoaXMucD1uZXcgSnAoMjAsdGhpcyk6dD90aGlzLnA9bmV3IFhwKDIzLHQsdGhpcyk6dGhpcy5wPW5ldyBKcCgyMix0aGlzKTp0aGlzLl9rKCk/dGhpcy5ibCgpP3RoaXMucD1uZXcga2l0KGwobywyOSksdGhpcyxhKTp0aGlzLnA9bmV3ICQ1ZShsKG8sMjkpLHRoaXMsYSk6RGUobywxNTYpP3Q9PUNZP3RoaXMucD1uZXcgSnAoNDAsdGhpcyk6dGhpcy5CYiZTbD90P3RoaXMucD1uZXcgeHN0KG4sdyx0aGlzLChXY2UoKSxnPT1Wcj9QUGU6Zz09aWg/TVBlOmc9PW5tP0JQZTpnPT1CND9OUGU6Zz09TmE/T1BlOmc9PWg3P0ZQZTpnPT1BbD9EUGU6Zz09a2Y/SVBlOmlwZSkpOnRoaXMucD1uZXcgTmF0KGwobywxNTYpLG4sdyx0aGlzKTp0P3RoaXMucD1uZXcgeXN0KG4sdyx0aGlzLChXY2UoKSxnPT1Wcj9QUGU6Zz09aWg/TVBlOmc9PW5tP0JQZTpnPT1CND9OUGU6Zz09TmE/T1BlOmc9PWg3P0ZQZTpnPT1BbD9EUGU6Zz09a2Y/SVBlOmlwZSkpOnRoaXMucD1uZXcgT2F0KGwobywxNTYpLG4sdyx0aGlzKTp0aGlzLmFsKCk/YT90aGlzLkJiJlNsP3RoaXMuYmwoKT90aGlzLnA9bmV3IFRpdChsKG8sMjkpLHRoaXMsYSk6dGhpcy5wPW5ldyBDNGUobChvLDI5KSx0aGlzLGEpOnRoaXMuYmwoKT90aGlzLnA9bmV3IEVpdChsKG8sMjkpLHRoaXMsYSk6dGhpcy5wPW5ldyB5YWUobChvLDI5KSx0aGlzLGEpOnRoaXMuQmImU2w/dGhpcy5ibCgpP3RoaXMucD1uZXcgeXJ0KGwobywyOSksdGhpcyk6dGhpcy5wPW5ldyBqeWUobChvLDI5KSx0aGlzKTp0aGlzLmJsKCk/dGhpcy5wPW5ldyB3cnQobChvLDI5KSx0aGlzKTp0aGlzLnA9bmV3IG9hZShsKG8sMjkpLHRoaXMpOnRoaXMuYmwoKT9hP3RoaXMuQmImU2w/dGhpcy5wPW5ldyBDaXQobChvLDI5KSx0aGlzLGEpOnRoaXMucD1uZXcgRTRlKGwobywyOSksdGhpcyxhKTp0aGlzLkJiJlNsP3RoaXMucD1uZXcgeHJ0KGwobywyOSksdGhpcyk6dGhpcy5wPW5ldyAkeWUobChvLDI5KSx0aGlzKTphP3RoaXMuQmImU2w/dGhpcy5wPW5ldyBTaXQobChvLDI5KSx0aGlzLGEpOnRoaXMucD1uZXcgVDRlKGwobywyOSksdGhpcyxhKTp0aGlzLkJiJlNsP3RoaXMucD1uZXcga3J0KGwobywyOSksdGhpcyk6dGhpcy5wPW5ldyBjSChsKG8sMjkpLHRoaXMpKSx0aGlzLnB9LGgucms9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5CYiZtMCkhPTB9LGguX2s9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5hbD1mdW5jdGlvbigpe3JldHVybiExfSxoLnNrPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuQmImX2QpIT0wfSxoLnhrPWZ1bmN0aW9uKCl7cmV0dXJuIFZvZSh0aGlzKX0saC5ibD1mdW5jdGlvbigpe3JldHVybiExfSxoLnRrPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuQmImU2wpIT0wfSxoLmNsPWZ1bmN0aW9uKHQpe3RoaXMuaz10fSxoLnVpPWZ1bmN0aW9uKHQpe3BvZSh0aGlzLHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIEJVKHRoaXMpfSxoLmU9ITEsaC5uPTAsSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbCIsNDYyKSxEKDMzMSw0NjIsezExMDoxLDk0OjEsOTM6MSwzNToxLDE1NToxLDE5NzoxLDU4OjEsMTc5OjEsNjk6MSwxMTQ6MSw0ODE6MSw1NDoxLDk5OjEsMzMxOjEsMTU4OjEsNDYyOjEsMjkyOjEsMTE5OjEsMTIwOjEsNjkyOjF9LHppZSksaC5MaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbztzd2l0Y2godCl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIEhuKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgMzpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJjUxMik7Y2FzZSA0OnJldHVybiBwdCh0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gcHQodGhpcy50KTtjYXNlIDY6cmV0dXJuIEhuKCksISF2OWUodGhpcyk7Y2FzZSA3OnJldHVybiBIbigpLG89dGhpcy5zLG8+PTE7Y2FzZSA4OnJldHVybiBuP09mKHRoaXMpOnRoaXMucjtjYXNlIDk6cmV0dXJuIHRoaXMucTtjYXNlIDEwOnJldHVybiBIbigpLCEhKHRoaXMuQmImbTApO2Nhc2UgMTE6cmV0dXJuIEhuKCksISEodGhpcy5CYiZyNCk7Y2FzZSAxMjpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJlh5KTtjYXNlIDEzOnJldHVybiB0aGlzLmo7Y2FzZSAxNDpyZXR1cm4gVUUodGhpcyk7Y2FzZSAxNTpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJlNsKTtjYXNlIDE2OnJldHVybiBIbigpLCEhKHRoaXMuQmImX2QpO2Nhc2UgMTc6cmV0dXJuIGt5KHRoaXMpO2Nhc2UgMTg6cmV0dXJuIEhuKCksISEodGhpcy5CYiZldSk7Y2FzZSAxOTpyZXR1cm4gbj9nY2UodGhpcyk6RnV0KHRoaXMpfXJldHVybiBzZih0aGlzLHQteXIoKFRuKCksTzQpKSxNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHxPNCksdCksbixyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbixyO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4odGhpcy5CYiYyNTYpPT0wO2Nhc2UgMzpyZXR1cm4odGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gdjllKHRoaXMpO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybih0aGlzLkJiJm0wKT09MDtjYXNlIDExOnJldHVybih0aGlzLkJiJnI0KSE9MDtjYXNlIDEyOnJldHVybih0aGlzLkJiJlh5KSE9MDtjYXNlIDEzOnJldHVybiB0aGlzLmohPW51bGw7Y2FzZSAxNDpyZXR1cm4gVUUodGhpcykhPW51bGw7Y2FzZSAxNTpyZXR1cm4odGhpcy5CYiZTbCkhPTA7Y2FzZSAxNjpyZXR1cm4odGhpcy5CYiZfZCkhPTA7Y2FzZSAxNzpyZXR1cm4hIWt5KHRoaXMpO2Nhc2UgMTg6cmV0dXJuKHRoaXMuQmImZXUpIT0wO2Nhc2UgMTk6cmV0dXJuISFGdXQodGhpcyl9cmV0dXJuIG5mKHRoaXMsdC15cigoVG4oKSxPNCkpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fE80KSx0KSl9LGguYmk9ZnVuY3Rpb24odCxuKXt2YXIgcixhO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxBcyh0aGlzLkFiLGwobiwxNikpO3JldHVybjtjYXNlIDE6cG9lKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDI6YzIodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDM6dTIodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDQ6aTIodGhpcyxsKG4sMTcpLmEpO3JldHVybjtjYXNlIDU6SkplKHRoaXMsbChuLDE3KS5hKTtyZXR1cm47Y2FzZSA4OkdtKHRoaXMsbChuLDE0MikpO3JldHVybjtjYXNlIDk6YT0kMSh0aGlzLGwobiw4OSksbnVsbCksYSYmYS5vaigpO3JldHVybjtjYXNlIDEwOkFFKHRoaXMsUnQoQnQobikpKTtyZXR1cm47Y2FzZSAxMTpERSh0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMTI6TEUodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDEzOlozZSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAxNTpNRSh0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMTY6SUUodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDE4OiRjZSh0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJufXVmKHRoaXMsdC15cigoVG4oKSxPNCkpLE1uKChyPWwoS24odGhpcywxNiksMjkpLHJ8fE80KSx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLE80fSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuLHI7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpEZSh0aGlzLkNiLDkwKSYmenkoWWwobCh0aGlzLkNiLDkwKSksNCksRnUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOmMyKHRoaXMsITApO3JldHVybjtjYXNlIDM6dTIodGhpcywhMCk7cmV0dXJuO2Nhc2UgNDppMih0aGlzLDApO3JldHVybjtjYXNlIDU6dGhpcy5iPTAsTXkodGhpcywxKTtyZXR1cm47Y2FzZSA4OkdtKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgOTpyPSQxKHRoaXMsbnVsbCxudWxsKSxyJiZyLm9qKCk7cmV0dXJuO2Nhc2UgMTA6QUUodGhpcywhMCk7cmV0dXJuO2Nhc2UgMTE6REUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTI6TEUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTM6dGhpcy5pPW51bGwseFYodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAxNTpNRSh0aGlzLCExKTtyZXR1cm47Y2FzZSAxNjpJRSh0aGlzLCExKTtyZXR1cm47Y2FzZSAxODokY2UodGhpcywhMSk7cmV0dXJufWNmKHRoaXMsdC15cigoVG4oKSxPNCkpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fE80KSx0KSl9LGgucGk9ZnVuY3Rpb24oKXtnY2UodGhpcyksV2soaWMoKEVsKCksaW8pLHRoaXMpKSxPZih0aGlzKSx0aGlzLkJifD0xfSxoLkprPWZ1bmN0aW9uKCl7cmV0dXJuIHY5ZSh0aGlzKX0saC5Zaz1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLmI9MCx0aGlzLmE9bnVsbCxvOGUodGhpcyx0LG4pfSxoLlprPWZ1bmN0aW9uKHQpe0pKZSh0aGlzLHQpfSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuRGImNjQ/QlUodGhpcyk6KHQ9bmV3IEFmKEJVKHRoaXMpKSx0LmErPSIgKGlEOiAiLEdwKHQsKHRoaXMuQmImZXUpIT0wKSx0LmErPSIpIix0LmEpfSxoLmI9MCxJKEduLCJFQXR0cmlidXRlSW1wbCIsMzMxKSxEKDM2NCw0NDgsezExMDoxLDk0OjEsOTM6MSwxNDI6MSwxNTU6MSwxOTc6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwzNjQ6MSwxNTg6MSwxMTk6MSwxMjA6MSw2OTE6MX0pLGguZGw9ZnVuY3Rpb24odCl7cmV0dXJuIHQuRGgoKT09dGhpc30saC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gd3VlKHRoaXMsdCl9LGguQmg9ZnVuY3Rpb24odCxuKXt0aGlzLnc9bnVsbCx0aGlzLkRiPW48PDE2fHRoaXMuRGImMjU1LHRoaXMuQ2I9dH0saC5MaD1mdW5jdGlvbih0LG4scil7dmFyIGE7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGw/dGhpcy5EOnRoaXMuQjtjYXNlIDM6cmV0dXJuIHp3KHRoaXMpO2Nhc2UgNDpyZXR1cm4gdGhpcy5paygpO2Nhc2UgNTpyZXR1cm4gdGhpcy5GO2Nhc2UgNjpyZXR1cm4gbj9BaCh0aGlzKTpRayh0aGlzKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksdGhpcy5BfXJldHVybiBzZih0aGlzLHQteXIodGhpcy5paSgpKSxNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHx0aGlzLmlpKCkpLHQpLG4scil9LGguU2g9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZjtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxSdSh0aGlzLkFiLHQscik7Y2FzZSA2OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP3d1ZSh0aGlzLHIpOnRoaXMuQ2IuVGgodGhpcywtMS1vLG51bGwscikpKSxOaCh0aGlzLHQsNixyKX1yZXR1cm4gZj1sKE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fHRoaXMuaWkoKSksbiksNjkpLGYud2soKS56ayh0aGlzLEt1KHRoaXMpLG4teXIodGhpcy5paSgpKSx0LHIpfSxoLlVoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFRvKHRoaXMuQWIsdCxyKTtjYXNlIDY6cmV0dXJuIE5oKHRoaXMsbnVsbCw2LHIpO2Nhc2UgNzpyZXR1cm4hdGhpcy5BJiYodGhpcy5BPW5ldyBtbChadSx0aGlzLDcpKSxUbyh0aGlzLkEsdCxyKX1yZXR1cm4gbz1sKE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fHRoaXMuaWkoKSksbiksNjkpLG8ud2soKS5Bayh0aGlzLEt1KHRoaXMpLG4teXIodGhpcy5paSgpKSx0LHIpfSxoLldoPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4gdGhpcy5EIT1udWxsJiZ0aGlzLkQ9PXRoaXMuRjtjYXNlIDM6cmV0dXJuISF6dyh0aGlzKTtjYXNlIDQ6cmV0dXJuIHRoaXMuaWsoKSE9bnVsbDtjYXNlIDU6cmV0dXJuIHRoaXMuRiE9bnVsbCYmdGhpcy5GIT10aGlzLkQmJnRoaXMuRiE9dGhpcy5CO2Nhc2UgNjpyZXR1cm4hIVFrKHRoaXMpO2Nhc2UgNzpyZXR1cm4hIXRoaXMuQSYmdGhpcy5BLmkhPTB9cmV0dXJuIG5mKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fHRoaXMuaWkoKSksdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHI7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLEFzKHRoaXMuQWIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTpGSCh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAyOktzZSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSA1OkpFKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksJHIodGhpcy5BKSwhdGhpcy5BJiYodGhpcy5BPW5ldyBtbChadSx0aGlzLDcpKSxBcyh0aGlzLkEsbChuLDE2KSk7cmV0dXJufXVmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChyPWwoS24odGhpcywxNiksMjkpLHJ8fHRoaXMuaWkoKSksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSwkX3R9LGgua2k9ZnVuY3Rpb24odCl7dmFyIG47c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpEZSh0aGlzLkNiLDE4NCkmJihsKHRoaXMuQ2IsMTg0KS50Yj1udWxsKSxGdSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6Q0UodGhpcyxudWxsKSxsRSh0aGlzLHRoaXMuRCk7cmV0dXJuO2Nhc2UgNTpKRSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksJHIodGhpcy5BKTtyZXR1cm59Y2YodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8dGhpcy5paSgpKSx0KSl9LGguaGs9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5HPT0tMSYmKHRoaXMuRz0odD1BaCh0aGlzKSx0P2YyKHQudmkoKSx0aGlzKTotMSkpLHRoaXMuR30saC5paz1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLmprPWZ1bmN0aW9uKCl7cmV0dXJuIEFoKHRoaXMpfSxoLmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudn0saC5raz1mdW5jdGlvbigpe3JldHVybiB6dyh0aGlzKX0saC5saz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkQhPW51bGw/dGhpcy5EOnRoaXMuQn0saC5taz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkZ9LGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIHVsZSh0aGlzLHQpfSxoLmZsPWZ1bmN0aW9uKHQpe3RoaXMudj10fSxoLmdsPWZ1bmN0aW9uKHQpe3hmdCh0aGlzLHQpfSxoLmhsPWZ1bmN0aW9uKHQpe3RoaXMuQz10fSxoLnVpPWZ1bmN0aW9uKHQpe0ZIKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gVVYodGhpcyl9LGguQz1udWxsLGguRD1udWxsLGguRz0tMSxJKEduLCJFQ2xhc3NpZmllckltcGwiLDM2NCksRCg5MCwzNjQsezExMDoxLDk0OjEsOTM6MSwyOToxLDE0MjoxLDE1NToxLDE5NzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDkwOjEsMzY0OjEsMTU4OjEsNDgyOjEsMTE5OjEsMTIwOjEsNjkxOjF9LGh6KSxoLmRsPWZ1bmN0aW9uKHQpe3JldHVybiBCZm4odGhpcyx0LkRoKCkpfSxoLkxoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYTtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbD90aGlzLkQ6dGhpcy5CO2Nhc2UgMzpyZXR1cm4gencodGhpcyk7Y2FzZSA0OnJldHVybiBudWxsO2Nhc2UgNTpyZXR1cm4gdGhpcy5GO2Nhc2UgNjpyZXR1cm4gbj9BaCh0aGlzKTpRayh0aGlzKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksdGhpcy5BO2Nhc2UgODpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJjI1Nik7Y2FzZSA5OnJldHVybiBIbigpLCEhKHRoaXMuQmImNTEyKTtjYXNlIDEwOnJldHVybiBkYyh0aGlzKTtjYXNlIDExOnJldHVybiF0aGlzLnEmJih0aGlzLnE9bmV3IG50KFVmLHRoaXMsMTEsMTApKSx0aGlzLnE7Y2FzZSAxMjpyZXR1cm4gZDYodGhpcyk7Y2FzZSAxMzpyZXR1cm4gSkEodGhpcyk7Y2FzZSAxNDpyZXR1cm4gSkEodGhpcyksdGhpcy5yO2Nhc2UgMTU6cmV0dXJuIGQ2KHRoaXMpLHRoaXMuaztjYXNlIDE2OnJldHVybiBvOWUodGhpcyk7Y2FzZSAxNzpyZXR1cm4gZGxlKHRoaXMpO2Nhc2UgMTg6cmV0dXJuIFNkKHRoaXMpO2Nhc2UgMTk6cmV0dXJuIF9VKHRoaXMpO2Nhc2UgMjA6cmV0dXJuIGQ2KHRoaXMpLHRoaXMubztjYXNlIDIxOnJldHVybiF0aGlzLnMmJih0aGlzLnM9bmV3IG50KGRsLHRoaXMsMjEsMTcpKSx0aGlzLnM7Y2FzZSAyMjpyZXR1cm4gZHUodGhpcyk7Y2FzZSAyMzpyZXR1cm4gWnVlKHRoaXMpfXJldHVybiBzZih0aGlzLHQteXIoKFRuKCksSmIpKSxNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHxKYiksdCksbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFJ1KHRoaXMuQWIsdCxyKTtjYXNlIDY6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/d3VlKHRoaXMscik6dGhpcy5DYi5UaCh0aGlzLC0xLW8sbnVsbCxyKSkpLE5oKHRoaXMsdCw2LHIpO2Nhc2UgMTE6cmV0dXJuIXRoaXMucSYmKHRoaXMucT1uZXcgbnQoVWYsdGhpcywxMSwxMCkpLFJ1KHRoaXMucSx0LHIpO2Nhc2UgMjE6cmV0dXJuIXRoaXMucyYmKHRoaXMucz1uZXcgbnQoZGwsdGhpcywyMSwxNykpLFJ1KHRoaXMucyx0LHIpfXJldHVybiBmPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KFRuKCksSmIpKSxuKSw2OSksZi53aygpLnprKHRoaXMsS3UodGhpcyksbi15cigoVG4oKSxKYikpLHQscil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksVG8odGhpcy5BYix0LHIpO2Nhc2UgNjpyZXR1cm4gTmgodGhpcyxudWxsLDYscik7Y2FzZSA3OnJldHVybiF0aGlzLkEmJih0aGlzLkE9bmV3IG1sKFp1LHRoaXMsNykpLFRvKHRoaXMuQSx0LHIpO2Nhc2UgMTE6cmV0dXJuIXRoaXMucSYmKHRoaXMucT1uZXcgbnQoVWYsdGhpcywxMSwxMCkpLFRvKHRoaXMucSx0LHIpO2Nhc2UgMjE6cmV0dXJuIXRoaXMucyYmKHRoaXMucz1uZXcgbnQoZGwsdGhpcywyMSwxNykpLFRvKHRoaXMucyx0LHIpO2Nhc2UgMjI6cmV0dXJuIFRvKGR1KHRoaXMpLHQscil9cmV0dXJuIG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHwoVG4oKSxKYikpLG4pLDY5KSxvLndrKCkuQWsodGhpcyxLdSh0aGlzKSxuLXlyKChUbigpLEpiKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbCYmdGhpcy5EPT10aGlzLkY7Y2FzZSAzOnJldHVybiEhencodGhpcyk7Y2FzZSA0OnJldHVybiExO2Nhc2UgNTpyZXR1cm4gdGhpcy5GIT1udWxsJiZ0aGlzLkYhPXRoaXMuRCYmdGhpcy5GIT10aGlzLkI7Y2FzZSA2OnJldHVybiEhUWsodGhpcyk7Y2FzZSA3OnJldHVybiEhdGhpcy5BJiZ0aGlzLkEuaSE9MDtjYXNlIDg6cmV0dXJuKHRoaXMuQmImMjU2KSE9MDtjYXNlIDk6cmV0dXJuKHRoaXMuQmImNTEyKSE9MDtjYXNlIDEwOnJldHVybiEhdGhpcy51JiZkdSh0aGlzLnUuYSkuaSE9MCYmISh0aGlzLm4mJmN1ZSh0aGlzLm4pKTtjYXNlIDExOnJldHVybiEhdGhpcy5xJiZ0aGlzLnEuaSE9MDtjYXNlIDEyOnJldHVybiBkNih0aGlzKS5pIT0wO2Nhc2UgMTM6cmV0dXJuIEpBKHRoaXMpLmkhPTA7Y2FzZSAxNDpyZXR1cm4gSkEodGhpcyksdGhpcy5yLmkhPTA7Y2FzZSAxNTpyZXR1cm4gZDYodGhpcyksdGhpcy5rLmkhPTA7Y2FzZSAxNjpyZXR1cm4gbzllKHRoaXMpLmkhPTA7Y2FzZSAxNzpyZXR1cm4gZGxlKHRoaXMpLmkhPTA7Y2FzZSAxODpyZXR1cm4gU2QodGhpcykuaSE9MDtjYXNlIDE5OnJldHVybiBfVSh0aGlzKS5pIT0wO2Nhc2UgMjA6cmV0dXJuIGQ2KHRoaXMpLCEhdGhpcy5vO2Nhc2UgMjE6cmV0dXJuISF0aGlzLnMmJnRoaXMucy5pIT0wO2Nhc2UgMjI6cmV0dXJuISF0aGlzLm4mJmN1ZSh0aGlzLm4pO2Nhc2UgMjM6cmV0dXJuIFp1ZSh0aGlzKS5pIT0wfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksSmIpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxKYiksdCkpfSxoLlpoPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPXRoaXMuaT09bnVsbHx8dGhpcy5xJiZ0aGlzLnEuaSE9MD9udWxsOm9QKHRoaXMsdCksbnx8SGtlKHRoaXMsdCl9LGguYmk9ZnVuY3Rpb24odCxuKXt2YXIgcjtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksQXModGhpcy5BYixsKG4sMTYpKTtyZXR1cm47Y2FzZSAxOkZIKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDI6S3NlKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDU6SkUodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgNzohdGhpcy5BJiYodGhpcy5BPW5ldyBtbChadSx0aGlzLDcpKSwkcih0aGlzLkEpLCF0aGlzLkEmJih0aGlzLkE9bmV3IG1sKFp1LHRoaXMsNykpLEFzKHRoaXMuQSxsKG4sMTYpKTtyZXR1cm47Y2FzZSA4OmM4ZSh0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgOTp1OGUodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDEwOnRMKGRjKHRoaXMpKSxBcyhkYyh0aGlzKSxsKG4sMTYpKTtyZXR1cm47Y2FzZSAxMTohdGhpcy5xJiYodGhpcy5xPW5ldyBudChVZix0aGlzLDExLDEwKSksJHIodGhpcy5xKSwhdGhpcy5xJiYodGhpcy5xPW5ldyBudChVZix0aGlzLDExLDEwKSksQXModGhpcy5xLGwobiwxNikpO3JldHVybjtjYXNlIDIxOiF0aGlzLnMmJih0aGlzLnM9bmV3IG50KGRsLHRoaXMsMjEsMTcpKSwkcih0aGlzLnMpLCF0aGlzLnMmJih0aGlzLnM9bmV3IG50KGRsLHRoaXMsMjEsMTcpKSxBcyh0aGlzLnMsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMjI6JHIoZHUodGhpcykpLEFzKGR1KHRoaXMpLGwobiwxNikpO3JldHVybn11Zih0aGlzLHQteXIoKFRuKCksSmIpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHxKYiksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSxKYn0saC5raT1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOkRlKHRoaXMuQ2IsMTg0KSYmKGwodGhpcy5DYiwxODQpLnRiPW51bGwpLEZ1KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpDRSh0aGlzLG51bGwpLGxFKHRoaXMsdGhpcy5EKTtyZXR1cm47Y2FzZSA1OkpFKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNzohdGhpcy5BJiYodGhpcy5BPW5ldyBtbChadSx0aGlzLDcpKSwkcih0aGlzLkEpO3JldHVybjtjYXNlIDg6YzhlKHRoaXMsITEpO3JldHVybjtjYXNlIDk6dThlKHRoaXMsITEpO3JldHVybjtjYXNlIDEwOnRoaXMudSYmdEwodGhpcy51KTtyZXR1cm47Y2FzZSAxMTohdGhpcy5xJiYodGhpcy5xPW5ldyBudChVZix0aGlzLDExLDEwKSksJHIodGhpcy5xKTtyZXR1cm47Y2FzZSAyMTohdGhpcy5zJiYodGhpcy5zPW5ldyBudChkbCx0aGlzLDIxLDE3KSksJHIodGhpcy5zKTtyZXR1cm47Y2FzZSAyMjp0aGlzLm4mJiRyKHRoaXMubik7cmV0dXJufWNmKHRoaXMsdC15cigoVG4oKSxKYikpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fEpiKSx0KSl9LGgucGk9ZnVuY3Rpb24oKXt2YXIgdCxuO2lmKGQ2KHRoaXMpLEpBKHRoaXMpLG85ZSh0aGlzKSxkbGUodGhpcyksU2QodGhpcyksX1UodGhpcyksWnVlKHRoaXMpLHVBKGNkbihZbCh0aGlzKSkpLHRoaXMucylmb3IodD0wLG49dGhpcy5zLmk7dDxuOysrdClTTyhPZSh0aGlzLnMsdCkpO2lmKHRoaXMucSlmb3IodD0wLG49dGhpcy5xLmk7dDxuOysrdClTTyhPZSh0aGlzLnEsdCkpO28yKChFbCgpLGlvKSx0aGlzKS54ZSgpLHRoaXMuQmJ8PTF9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gX3hlKHRoaXMpfSxoLms9bnVsbCxoLnI9bnVsbDt2YXIgcU0sWF90LG5wZTtJKEduLCJFQ2xhc3NJbXBsIiw5MCksRCgyMDkyLDIwOTEsYjV0KSxoLkVpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGxsZSh0aGlzLHQsbil9LGguRmk9ZnVuY3Rpb24odCl7cmV0dXJuIGxsZSh0aGlzLHRoaXMuaSx0KX0saC5HaT1mdW5jdGlvbih0LG4pe0U5ZSh0aGlzLHQsbil9LGguSGk9ZnVuY3Rpb24odCl7VnVlKHRoaXMsdCl9LGguV2s9ZnVuY3Rpb24odCxuKXtyZXR1cm4gUnUodGhpcyx0LG4pfSxoLiRpPWZ1bmN0aW9uKHQpe3JldHVybiBSNmUodGhpcyx0KX0saC5Yaz1mdW5jdGlvbih0LG4pe3JldHVybiBUbyh0aGlzLHQsbil9LGguWGk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gS210KHRoaXMsdCxuKX0saC5JaT1mdW5jdGlvbigpe3JldHVybiBuZXcgSDgodGhpcyl9LGguSmk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IENPKHRoaXMpfSxoLktpPWZ1bmN0aW9uKHQpe3JldHVybiBtTih0aGlzLHQpfSxJKHVzLCJOb3RpZnlpbmdJbnRlcm5hbEVMaXN0SW1wbCIsMjA5MiksRCg2MzIsMjA5MixrYyksaC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gZ3Z0KHRoaXMsdCl9LGguSWo9ZnVuY3Rpb24odCxuLHIsYSxvKXtyZXR1cm4gckEodGhpcyx0LG4scixhLG8pfSxoLkpqPWZ1bmN0aW9uKHQpe3hrKHRoaXMsdCl9LGguRms9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXN9LGguTGs9ZnVuY3Rpb24oKXtyZXR1cm4gTW4odGhpcy5lLkRoKCksdGhpcy5MaigpKX0saC5Laj1mdW5jdGlvbigpe3JldHVybiB0aGlzLkxrKCl9LGguTGo9ZnVuY3Rpb24oKXtyZXR1cm4gbXModGhpcy5lLkRoKCksdGhpcy5MaygpKX0saC5pbD1mdW5jdGlvbigpe3JldHVybiBsKHRoaXMuTGsoKS5IaygpLDI5KS5raygpfSxoLmpsPWZ1bmN0aW9uKCl7cmV0dXJuIFJvKGwodGhpcy5MaygpLDE5KSkubn0saC5qaj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV9LGgua2w9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5sbD1mdW5jdGlvbigpe3JldHVybiExfSxoLm1sPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGgubmw9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5kZD1mdW5jdGlvbih0KXtyZXR1cm4gZjIodGhpcyx0KX0saC5Oaj1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiByPWwodCw1NCksdGhpcy5tbCgpP3RoaXMua2woKT9yLlJoKHRoaXMuZSx0aGlzLmpsKCksdGhpcy5pbCgpLG4pOnIuUmgodGhpcy5lLG1zKHIuRGgoKSxSbyhsKHRoaXMuTGsoKSwxOSkpKSxudWxsLG4pOnIuUmgodGhpcy5lLC0xLXRoaXMuTGooKSxudWxsLG4pfSxoLk9qPWZ1bmN0aW9uKHQsbil7dmFyIHI7cmV0dXJuIHI9bCh0LDU0KSx0aGlzLm1sKCk/dGhpcy5rbCgpP3IuVGgodGhpcy5lLHRoaXMuamwoKSx0aGlzLmlsKCksbik6ci5UaCh0aGlzLmUsbXMoci5EaCgpLFJvKGwodGhpcy5MaygpLDE5KSkpLG51bGwsbik6ci5UaCh0aGlzLmUsLTEtdGhpcy5MaigpLG51bGwsbil9LGguYWw9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5vbD1mdW5jdGlvbigpe3JldHVybiEwfSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBSY3QodGhpcy5kLHQpfSxoLlBqPWZ1bmN0aW9uKCl7cmV0dXJuIGhoKHRoaXMuZSl9LGguUWo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pIT0wfSxoLmFqPWZ1bmN0aW9uKHQpe3JldHVybiBiTih0aGlzLmQsdCl9LGguV2k9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5vbCgpJiZ0aGlzLm5sKCk/RXgodGhpcyx0LGwobiw1OCkpOm59LGgucGw9ZnVuY3Rpb24odCl7cmV0dXJuIHQuVmgoKT95Yih0aGlzLmUsbCh0LDU0KSk6dH0saC5XYj1mdW5jdGlvbih0KXtEbnQodGhpcyx0KX0saC5QYz1mdW5jdGlvbigpe3JldHVybiBPbHQodGhpcyl9LGguUWM9ZnVuY3Rpb24odCl7dmFyIG47aWYodGhpcy5ubCgpKWZvcihuPXRoaXMuaS0xO24+PTA7LS1uKU9lKHRoaXMsbik7cmV0dXJuIE84ZSh0aGlzLHQpfSxoLkdrPWZ1bmN0aW9uKCl7JHIodGhpcyl9LGguWmk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gSGh0KHRoaXMsdCxuKX0sSSh1cywiRWNvcmVFTGlzdCIsNjMyKSxEKDUwNSw2MzIsa2MsRk8pLGguTGk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5Maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGguTWo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5vbD1mdW5jdGlvbigpe3JldHVybiEwfSxoLlNpPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguV2k9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbn0saC5ZaT1mdW5jdGlvbigpe3JldHVybiExfSxoLmM9MCxJKHVzLCJFT2JqZWN0RUxpc3QiLDUwNSksRCg4Myw1MDUsa2MsWXMpLGguTWo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5tbD1mdW5jdGlvbigpe3JldHVybiExfSxoLmFsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkodXMsIkVPYmplY3RDb250YWlubWVudEVMaXN0Iiw4MyksRCg1NTUsODMsa2MsQnEpLGguTmk9ZnVuY3Rpb24oKXt0aGlzLmI9ITB9LGguUWo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLkdrPWZ1bmN0aW9uKCl7dmFyIHQ7JHIodGhpcyksaGgodGhpcy5lKT8odD10aGlzLmIsdGhpcy5iPSExLE5pKHRoaXMuZSxuZXcgaDAodGhpcy5lLDIsdGhpcy5jLHQsITEpKSk6dGhpcy5iPSExfSxoLmI9ITEsSSh1cywiRU9iamVjdENvbnRhaW5tZW50RUxpc3QvVW5zZXR0YWJsZSIsNTU1KSxEKDExNjEsNTU1LGtjLHZzdCksaC5UaT1mdW5jdGlvbih0LG4pe3ZhciByLGE7cmV0dXJuIHI9bChBQSh0aGlzLHQsbiksODkpLGhoKHRoaXMuZSkmJnhrKHRoaXMsbmV3IHNOKHRoaXMuYSw3LChUbigpLHpfdCkscHQobiksKGE9ci5jLERlKGEsOTApP2woYSwyOSk6S2YpLHQpKSxyfSxoLlVqPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEw1bih0aGlzLGwodCw4OSksbil9LGguVmo9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQTVuKHRoaXMsbCh0LDg5KSxuKX0saC5Xaj1mdW5jdGlvbih0LG4scil7cmV0dXJuIEk4bih0aGlzLGwodCw4OSksbChuLDg5KSxyKX0saC5Jaj1mdW5jdGlvbih0LG4scixhLG8pe3N3aXRjaCh0KXtjYXNlIDM6cmV0dXJuIHJBKHRoaXMsdCxuLHIsYSx0aGlzLmk+MSk7Y2FzZSA1OnJldHVybiByQSh0aGlzLHQsbixyLGEsdGhpcy5pLWwociwxNSkuZ2MoKT4wKTtkZWZhdWx0OnJldHVybiBuZXcgWmcodGhpcy5lLHQsdGhpcy5jLG4scixhLCEwKX19LGguVGo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5Raj1mdW5jdGlvbigpe3JldHVybiBjdWUodGhpcyl9LGguR2s9ZnVuY3Rpb24oKXskcih0aGlzKX0sSShHbiwiRUNsYXNzSW1wbC8xIiwxMTYxKSxEKDExNzUsMTE3NCxTU2UpLGguZGo9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnLHc7aWYocj10LmdqKCksciE9OCl7aWYoYT1sNm4odCksYT09MClzd2l0Y2gocil7Y2FzZSAxOmNhc2UgOTp7dz10LmtqKCksdyE9bnVsbCYmKG49WWwobCh3LDQ4MikpLCFuLmMmJihuLmM9bmV3IFhkKSxzVihuLmMsdC5qaigpKSksZz10LmlqKCksZyE9bnVsbCYmKG89bChnLDQ4Miksby5CYiYxfHwobj1ZbChvKSwhbi5jJiYobi5jPW5ldyBYZCkscXIobi5jLGwodC5qaigpLDI5KSkpKTticmVha31jYXNlIDM6e2c9dC5paigpLGchPW51bGwmJihvPWwoZyw0ODIpLG8uQmImMXx8KG49WWwobyksIW4uYyYmKG4uYz1uZXcgWGQpLHFyKG4uYyxsKHQuamooKSwyOSkpKSk7YnJlYWt9Y2FzZSA1OntpZihnPXQuaWooKSxnIT1udWxsKWZvcihmPWwoZywxNikuS2MoKTtmLk9iKCk7KW89bChmLlBiKCksNDgyKSxvLkJiJjF8fChuPVlsKG8pLCFuLmMmJihuLmM9bmV3IFhkKSxxcihuLmMsbCh0LmpqKCksMjkpKSk7YnJlYWt9Y2FzZSA0Ont3PXQua2ooKSx3IT1udWxsJiYobz1sKHcsNDgyKSxvLkJiJjF8fChuPVlsKG8pLCFuLmMmJihuLmM9bmV3IFhkKSxzVihuLmMsdC5qaigpKSkpO2JyZWFrfWNhc2UgNjp7aWYodz10LmtqKCksdyE9bnVsbClmb3IoZj1sKHcsMTYpLktjKCk7Zi5PYigpOylvPWwoZi5QYigpLDQ4Miksby5CYiYxfHwobj1ZbChvKSwhbi5jJiYobi5jPW5ldyBYZCksc1Yobi5jLHQuamooKSkpO2JyZWFrfX10aGlzLnFsKGEpfX0saC5xbD1mdW5jdGlvbih0KXtWYnQodGhpcyx0KX0saC5iPTYzLEkoR24sIkVTdXBlckFkYXB0ZXIiLDExNzUpLEQoMTE3NiwxMTc1LFNTZSxiUWUpLGgucWw9ZnVuY3Rpb24odCl7enkodGhpcyx0KX0sSShHbiwiRUNsYXNzSW1wbC8xMCIsMTE3NiksRCgxMTY1LDcxMCxrYyksaC5FaT1mdW5jdGlvbih0LG4pe3JldHVybiBEdWUodGhpcyx0LG4pfSxoLkZpPWZ1bmN0aW9uKHQpe3JldHVybiBPZHQodGhpcyx0KX0saC5HaT1mdW5jdGlvbih0LG4pe0lOKHRoaXMsdCxuKX0saC5IaT1mdW5jdGlvbih0KXt0Tih0aGlzLHQpfSxoLiRpPWZ1bmN0aW9uKHQpe3JldHVybiBSNmUodGhpcyx0KX0saC5YaT1mdW5jdGlvbih0LG4pe3JldHVybiBVb2UodGhpcyx0LG4pfSxoLldrPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5JaT1mdW5jdGlvbigpe3JldHVybiBuZXcgSDgodGhpcyl9LGguSmk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IENPKHRoaXMpfSxoLktpPWZ1bmN0aW9uKHQpe3JldHVybiBtTih0aGlzLHQpfSxoLlhrPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5Gaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpc30saC5Raj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmkhPTB9LGguV2I9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5Haz1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBRcil9LEkodXMsIkVjb3JlRUxpc3QvVW5tb2RpZmlhYmxlRUxpc3QiLDExNjUpLEQoMzI4LDExNjUsa2MsTjUpLGguWWk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sSSh1cywiRWNvcmVFTGlzdC9Vbm1vZGlmaWFibGVFTGlzdC9GYXN0Q29tcGFyZSIsMzI4KSxEKDExNjgsMzI4LGtjLGcwdCksaC5kZD1mdW5jdGlvbih0KXt2YXIgbixyLGE7aWYoRGUodCwxNzkpJiYobj1sKHQsMTc5KSxyPW4uTGooKSxyIT0tMSkpe2ZvcihhPXRoaXMuaTtyPGE7KytyKWlmKHFlKHRoaXMuZ1tyXSk9PT1xZSh0KSlyZXR1cm4gcn1yZXR1cm4tMX0sSShHbiwiRUNsYXNzSW1wbC8xRUFsbFN0cnVjdHVyYWxGZWF0dXJlc0xpc3QiLDExNjgpLEQoMTE2Miw1MDYsQmQsUWMpLGguYWo9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKFdvLG01dCw4OSx0LDAsMSl9LGguWWk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sSShHbiwiRUNsYXNzSW1wbC8xRUdlbmVyaWNTdXBlclR5cGVFTGlzdCIsMTE2MiksRCg2MzMsNTA2LEJkLFNJKSxoLmFqPWZ1bmN0aW9uKHQpe3JldHVybiBXZShkbCxTNiwxNzksdCwwLDEpfSxoLllpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoR24sIkVDbGFzc0ltcGwvMUVTdHJ1Y3R1cmFsRmVhdHVyZVVuaXF1ZUVMaXN0Iiw2MzMpLEQoNzU1LDUwNixCZCxfSSksaC5haj1mdW5jdGlvbih0KXtyZXR1cm4gV2UoSTQsUzYsMTksdCwwLDEpfSxoLllpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoR24sIkVDbGFzc0ltcGwvMVJlZmVyZW5jZUxpc3QiLDc1NSksRCgxMTYzLDUwNixCZCxtUWUpLGguTWk9ZnVuY3Rpb24odCxuKXt1Z24odGhpcyxsKG4sMzUpKX0saC5haj1mdW5jdGlvbih0KXtyZXR1cm4gV2UoRDQsUzYsMzUsdCwwLDEpfSxoLllpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoR24sIkVDbGFzc0ltcGwvMiIsMTE2MyksRCgxMTY0LDUwNixCZCxEUyksaC5haj1mdW5jdGlvbih0KXtyZXR1cm4gV2UoRDQsUzYsMzUsdCwwLDEpfSxoLllpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoR24sIkVDbGFzc0ltcGwvMyIsMTE2NCksRCgxMTY2LDMyOCxrYyxxaXQpLGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIF9tbih0aGlzLGwodCwzNSkpfSxoLkhpPWZ1bmN0aW9uKHQpe1h1bih0aGlzLGwodCwzNSkpfSxJKEduLCJFQ2xhc3NJbXBsLzQiLDExNjYpLEQoMTE2NywzMjgsa2Mseml0KSxoLkZjPWZ1bmN0aW9uKHQpe3JldHVybiBBbW4odGhpcyxsKHQsMTkpKX0saC5IaT1mdW5jdGlvbih0KXtRdW4odGhpcyxsKHQsMTkpKX0sSShHbiwiRUNsYXNzSW1wbC81IiwxMTY3KSxEKDExNjksNTA2LEJkLEpuZSksaC5haj1mdW5jdGlvbih0KXtyZXR1cm4gV2UoVWYsTFNlLDYyLHQsMCwxKX0saC5ZaT1mdW5jdGlvbigpe3JldHVybiExfSxJKEduLCJFQ2xhc3NJbXBsLzYiLDExNjkpLEQoMTE3MCw1MDYsQmQsWm5lKSxoLmFqPWZ1bmN0aW9uKHQpe3JldHVybiBXZShJNCxTNiwxOSx0LDAsMSl9LGguWWk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sSShHbiwiRUNsYXNzSW1wbC83IiwxMTcwKSxEKDIwOTUsMjA5NCx7MzoxLDQ6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDE1OjEsNzA6MSw2MToxLDcxOjF9KSxoLkVpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHdrZSh0aGlzLHQsbil9LGguRmk9ZnVuY3Rpb24odCl7cmV0dXJuIHdrZSh0aGlzLHRoaXMuRWooKSx0KX0saC5HaT1mdW5jdGlvbih0LG4pe0UydCh0aGlzLHQsbil9LGguSGk9ZnVuY3Rpb24odCl7aDJ0KHRoaXMsdCl9LGguV2s9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbjduKHRoaXMsdCxuKX0saC5Yaz1mdW5jdGlvbih0LG4pe3JldHVybiBMNm4odGhpcyx0LG4pfSxoLlhpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIE1tdCh0aGlzLHQsbil9LGguJGk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueGoodCl9LGguSWk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEg4KHRoaXMpfSxoLnBqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2ooKX0saC5KaT1mdW5jdGlvbigpe3JldHVybiBuZXcgQ08odGhpcyl9LGguS2k9ZnVuY3Rpb24odCl7cmV0dXJuIG1OKHRoaXMsdCl9LEkodXMsIkRlbGVnYXRpbmdOb3RpZnlpbmdJbnRlcm5hbEVMaXN0SW1wbCIsMjA5NSksRCg3NTYsMjA5NSxNU2UpLGguTGk9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1NbihzbCh0aGlzLmIpLHRoaXMuTGooKSkuSGsoKSxEZSh0LDE1NikmJiFEZSh0LDQ2OSkmJih0LmtrKCkuaSYxKT09MH0saC5IYz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2lmKHRoaXMub2woKSl7aWYoRT10aGlzLkVqKCksRT40KWlmKHRoaXMuZmsodCkpe2lmKHRoaXMuYWwoKSl7aWYoYT1sKHQsNTQpLHI9YS5FaCgpLHc9cj09dGhpcy5iJiYodGhpcy5tbCgpP2EueWgoYS5GaCgpLGwoTW4oc2wodGhpcy5iKSx0aGlzLkxqKCkpLkhrKCksMjkpLmtrKCkpPT1SbyhsKE1uKHNsKHRoaXMuYiksdGhpcy5MaigpKSwxOSkpLm46LTEtYS5GaCgpPT10aGlzLkxqKCkpLHRoaXMubmwoKSYmIXcmJiFyJiZhLkpoKCkpe2ZvcihvPTA7bzxFOysrbylpZihuPUZhZSh0aGlzLHRoaXMueGoobykpLHFlKG4pPT09cWUodCkpcmV0dXJuITB9cmV0dXJuIHd9ZWxzZSBpZih0aGlzLm1sKCkmJiF0aGlzLmxsKCkpe2lmKGY9bCh0LDU4KS5NaChSbyhsKE1uKHNsKHRoaXMuYiksdGhpcy5MaigpKSwxOSkpKSxxZShmKT09PXFlKHRoaXMuYikpcmV0dXJuITA7aWYoZj09bnVsbHx8IWwoZiw1OCkuVmgoKSlyZXR1cm4hMX19ZWxzZSByZXR1cm4hMTtpZihnPXRoaXMudWoodCksdGhpcy5ubCgpJiYhZyl7Zm9yKG89MDtvPEU7KytvKWlmKGE9RmFlKHRoaXMsdGhpcy54aihvKSkscWUoYSk9PT1xZSh0KSlyZXR1cm4hMH1yZXR1cm4gZ31lbHNlIHJldHVybiB0aGlzLnVqKHQpfSxoLklqPWZ1bmN0aW9uKHQsbixyLGEsbyl7cmV0dXJuIG5ldyBaZyh0aGlzLmIsdCx0aGlzLkxqKCksbixyLGEsbyl9LGguSmo9ZnVuY3Rpb24odCl7TmkodGhpcy5iLHQpfSxoLkZrPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzfSxoLktqPWZ1bmN0aW9uKCl7cmV0dXJuIE1uKHNsKHRoaXMuYiksdGhpcy5MaigpKX0saC5Maj1mdW5jdGlvbigpe3JldHVybiBtcyhzbCh0aGlzLmIpLE1uKHNsKHRoaXMuYiksdGhpcy5MaigpKSl9LGguamo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLmtsPWZ1bmN0aW9uKCl7cmV0dXJuISFNbihzbCh0aGlzLmIpLHRoaXMuTGooKSkuSGsoKS5raygpfSxoLk1qPWZ1bmN0aW9uKCl7dmFyIHQsbjtyZXR1cm4gbj1NbihzbCh0aGlzLmIpLHRoaXMuTGooKSksRGUobiwxMDIpPyh0PWwobiwxOSksKHQuQmImZXUpIT0wfHwhIVJvKGwobiwxOSkpKTohMX0saC5sbD1mdW5jdGlvbigpe3ZhciB0LG4scixhO3JldHVybiBuPU1uKHNsKHRoaXMuYiksdGhpcy5MaigpKSxEZShuLDEwMik/KHQ9bChuLDE5KSxyPVJvKHQpLCEhciYmKGE9ci50LGE+MXx8YT09LTEpKTohMX0saC5tbD1mdW5jdGlvbigpe3ZhciB0LG4scjtyZXR1cm4gbj1NbihzbCh0aGlzLmIpLHRoaXMuTGooKSksRGUobiwxMDIpPyh0PWwobiwxOSkscj1Sbyh0KSwhIXIpOiExfSxoLm5sPWZ1bmN0aW9uKCl7dmFyIHQsbjtyZXR1cm4gbj1NbihzbCh0aGlzLmIpLHRoaXMuTGooKSksRGUobiwxMDIpPyh0PWwobiwxOSksKHQuQmImSW8pIT0wKTohMX0saC5kZD1mdW5jdGlvbih0KXt2YXIgbixyLGEsbztpZihhPXRoaXMuemoodCksYT49MClyZXR1cm4gYTtpZih0aGlzLm9sKCkpe2ZvcihyPTAsbz10aGlzLkVqKCk7cjxvOysrcilpZihuPUZhZSh0aGlzLHRoaXMueGoocikpLHFlKG4pPT09cWUodCkpcmV0dXJuIHJ9cmV0dXJuLTF9LGguTmo9ZnVuY3Rpb24odCxuKXt2YXIgcjtyZXR1cm4gcj1sKHQsNTQpLHRoaXMubWwoKT90aGlzLmtsKCk/ci5SaCh0aGlzLmIsUm8obChNbihzbCh0aGlzLmIpLHRoaXMuTGooKSksMTkpKS5uLGwoTW4oc2wodGhpcy5iKSx0aGlzLkxqKCkpLkhrKCksMjkpLmtrKCksbik6ci5SaCh0aGlzLmIsbXMoci5EaCgpLFJvKGwoTW4oc2wodGhpcy5iKSx0aGlzLkxqKCkpLDE5KSkpLG51bGwsbik6ci5SaCh0aGlzLmIsLTEtdGhpcy5MaigpLG51bGwsbil9LGguT2o9ZnVuY3Rpb24odCxuKXt2YXIgcjtyZXR1cm4gcj1sKHQsNTQpLHRoaXMubWwoKT90aGlzLmtsKCk/ci5UaCh0aGlzLmIsUm8obChNbihzbCh0aGlzLmIpLHRoaXMuTGooKSksMTkpKS5uLGwoTW4oc2wodGhpcy5iKSx0aGlzLkxqKCkpLkhrKCksMjkpLmtrKCksbik6ci5UaCh0aGlzLmIsbXMoci5EaCgpLFJvKGwoTW4oc2wodGhpcy5iKSx0aGlzLkxqKCkpLDE5KSkpLG51bGwsbik6ci5UaCh0aGlzLmIsLTEtdGhpcy5MaigpLG51bGwsbil9LGguYWw9ZnVuY3Rpb24oKXt2YXIgdCxuO3JldHVybiBuPU1uKHNsKHRoaXMuYiksdGhpcy5MaigpKSxEZShuLDEwMik/KHQ9bChuLDE5KSwodC5CYiZldSkhPTApOiExfSxoLm9sPWZ1bmN0aW9uKCl7cmV0dXJuIERlKE1uKHNsKHRoaXMuYiksdGhpcy5MaigpKS5IaygpLDkwKX0saC5maz1mdW5jdGlvbih0KXtyZXR1cm4gTW4oc2wodGhpcy5iKSx0aGlzLkxqKCkpLkhrKCkuZmsodCl9LGguUGo9ZnVuY3Rpb24oKXtyZXR1cm4gaGgodGhpcy5iKX0saC5Raj1mdW5jdGlvbigpe3JldHVybiF0aGlzLkFqKCl9LGguU2k9ZnVuY3Rpb24oKXtyZXR1cm4gTW4oc2wodGhpcy5iKSx0aGlzLkxqKCkpLlNpKCl9LGguV2k9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbVAodGhpcyx0LG4pfSxoLldiPWZ1bmN0aW9uKHQpe3RMKHRoaXMpLEFzKHRoaXMsbCh0LDE1KSl9LGguUGM9ZnVuY3Rpb24oKXt2YXIgdDtpZih0aGlzLm5sKCkpZm9yKHQ9dGhpcy5FaigpLTE7dD49MDstLXQpbVAodGhpcyx0LHRoaXMueGoodCkpO3JldHVybiB0aGlzLkZqKCl9LGguUWM9ZnVuY3Rpb24odCl7dmFyIG47aWYodGhpcy5ubCgpKWZvcihuPXRoaXMuRWooKS0xO24+PTA7LS1uKW1QKHRoaXMsbix0aGlzLnhqKG4pKTtyZXR1cm4gdGhpcy5Haih0KX0saC5Haz1mdW5jdGlvbigpe3RMKHRoaXMpfSxoLlppPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHlsdCh0aGlzLHQsbil9LEkodXMsIkRlbGVnYXRpbmdFY29yZUVMaXN0Iiw3NTYpLEQoMTE3MSw3NTYsTVNlLE5ydCksaC5xaj1mdW5jdGlvbih0LG4pe2Fmbih0aGlzLHQsbChuLDI5KSl9LGgucmo9ZnVuY3Rpb24odCl7V2xuKHRoaXMsbCh0LDI5KSl9LGgueGo9ZnVuY3Rpb24odCl7dmFyIG4scjtyZXR1cm4gbj1sKE9lKGR1KHRoaXMuYSksdCksODkpLHI9bi5jLERlKHIsOTApP2wociwyOSk6KFRuKCksS2YpfSxoLkNqPWZ1bmN0aW9uKHQpe3ZhciBuLHI7cmV0dXJuIG49bChWeShkdSh0aGlzLmEpLHQpLDg5KSxyPW4uYyxEZShyLDkwKT9sKHIsMjkpOihUbigpLEtmKX0saC5Eaj1mdW5jdGlvbih0LG4pe3JldHVybiByN24odGhpcyx0LGwobiwyOSkpfSxoLkxpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguSWo9ZnVuY3Rpb24odCxuLHIsYSxvKXtyZXR1cm4gbnVsbH0saC5zaj1mdW5jdGlvbigpe3JldHVybiBuZXcgd1FlKHRoaXMpfSxoLnRqPWZ1bmN0aW9uKCl7JHIoZHUodGhpcy5hKSl9LGgudWo9ZnVuY3Rpb24odCl7cmV0dXJuIGwxdCh0aGlzLHQpfSxoLnZqPWZ1bmN0aW9uKHQpe3ZhciBuLHI7Zm9yKHI9dC5LYygpO3IuT2IoKTspaWYobj1yLlBiKCksIWwxdCh0aGlzLG4pKXJldHVybiExO3JldHVybiEwfSxoLndqPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYTtpZihEZSh0LDE1KSYmKGE9bCh0LDE1KSxhLmdjKCk9PWR1KHRoaXMuYSkuaSkpe2ZvcihuPWEuS2MoKSxyPW5ldyBvcih0aGlzKTtuLk9iKCk7KWlmKHFlKG4uUGIoKSkhPT1xZShncihyKSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9LGgueWo9ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYSxvO2ZvcihyPTEsbj1uZXcgb3IoZHUodGhpcy5hKSk7bi5lIT1uLmkuZ2MoKTspdD1sKGdyKG4pLDg5KSxhPShvPXQuYyxEZShvLDkwKT9sKG8sMjkpOihUbigpLEtmKSkscj0zMSpyKyhhP2Z3KGEpOjApO3JldHVybiByfSxoLnpqPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvO2ZvcihhPTAscj1uZXcgb3IoZHUodGhpcy5hKSk7ci5lIT1yLmkuZ2MoKTspe2lmKG49bChncihyKSw4OSkscWUodCk9PT1xZSgobz1uLmMsRGUobyw5MCk/bChvLDI5KTooVG4oKSxLZikpKSlyZXR1cm4gYTsrK2F9cmV0dXJuLTF9LGguQWo9ZnVuY3Rpb24oKXtyZXR1cm4gZHUodGhpcy5hKS5pPT0wfSxoLkJqPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGguRWo9ZnVuY3Rpb24oKXtyZXR1cm4gZHUodGhpcy5hKS5pfSxoLkZqPWZ1bmN0aW9uKCl7dmFyIHQsbixyLGEsbyxmO2ZvcihmPWR1KHRoaXMuYSkuaSxvPVdlKHdhLFJuLDEsZiw1LDEpLHI9MCxuPW5ldyBvcihkdSh0aGlzLmEpKTtuLmUhPW4uaS5nYygpOyl0PWwoZ3IobiksODkpLG9bcisrXT0oYT10LmMsRGUoYSw5MCk/bChhLDI5KTooVG4oKSxLZikpO3JldHVybiBvfSxoLkdqPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGYsZyx3O2Zvcih3PWR1KHRoaXMuYSkuaSx0Lmxlbmd0aDx3JiYobz1iTihiaCh0KS5jLHcpLHQ9byksdC5sZW5ndGg+dyYmVHModCx3LG51bGwpLGE9MCxyPW5ldyBvcihkdSh0aGlzLmEpKTtyLmUhPXIuaS5nYygpOyluPWwoZ3IociksODkpLGY9KGc9bi5jLERlKGcsOTApP2woZywyOSk6KFRuKCksS2YpKSxUcyh0LGErKyxmKTtyZXR1cm4gdH0saC5Iaj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG87Zm9yKG89bmV3IFVwLG8uYSs9IlsiLHQ9ZHUodGhpcy5hKSxuPTAsYT1kdSh0aGlzLmEpLmk7bjxhOylYbyhvLGpfKChyPWwoT2UodCxuKSw4OSkuYyxEZShyLDkwKT9sKHIsMjkpOihUbigpLEtmKSkpKSwrK248YSYmKG8uYSs9Q28pO3JldHVybiBvLmErPSJdIixvLmF9LGguSmo9ZnVuY3Rpb24odCl7fSxoLkxqPWZ1bmN0aW9uKCl7cmV0dXJuIDEwfSxoLmtsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguTWo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5sbD1mdW5jdGlvbigpe3JldHVybiExfSxoLm1sPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGgubmw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5hbD1mdW5jdGlvbigpe3JldHVybiExfSxoLm9sPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsOTApfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIExibih0aGlzLmEpfSxoLlNpPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguWWk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShHbiwiRUNsYXNzSW1wbC84IiwxMTcxKSxEKDExNzIsMjA2MixpVCx3UWUpLGguZmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG1OKHRoaXMuYSx0KX0saC5nYz1mdW5jdGlvbigpe3JldHVybiBkdSh0aGlzLmEuYSkuaX0sSShHbiwiRUNsYXNzSW1wbC84LzEiLDExNzIpLEQoMTE3Myw1MDYsQmQsSVMpLGguYWo9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKGwxLFJuLDE0Mix0LDAsMSl9LGguWWk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sSShHbiwiRUNsYXNzSW1wbC85IiwxMTczKSxEKDExNjAsNDksb0VlLHVKZSksSShHbiwiRUNsYXNzSW1wbC9NeUhhc2hTZXQiLDExNjApLEQoNTc3LDM2NCx7MTEwOjEsOTQ6MSw5MzoxLDE0MjoxLDE1NjoxLDg0NzoxLDE1NToxLDE5NzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDM2NDoxLDE1ODoxLDExOToxLDEyMDoxLDY5MToxfSxGeiksaC5MaD1mdW5jdGlvbih0LG4scil7dmFyIGE7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGw/dGhpcy5EOnRoaXMuQjtjYXNlIDM6cmV0dXJuIHp3KHRoaXMpO2Nhc2UgNDpyZXR1cm4gdGhpcy5paygpO2Nhc2UgNTpyZXR1cm4gdGhpcy5GO2Nhc2UgNjpyZXR1cm4gbj9BaCh0aGlzKTpRayh0aGlzKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksdGhpcy5BO2Nhc2UgODpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJjI1Nil9cmV0dXJuIHNmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fHRoaXMuaWkoKSksdCksbixyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbCYmdGhpcy5EPT10aGlzLkY7Y2FzZSAzOnJldHVybiEhencodGhpcyk7Y2FzZSA0OnJldHVybiB0aGlzLmlrKCkhPW51bGw7Y2FzZSA1OnJldHVybiB0aGlzLkYhPW51bGwmJnRoaXMuRiE9dGhpcy5EJiZ0aGlzLkYhPXRoaXMuQjtjYXNlIDY6cmV0dXJuISFRayh0aGlzKTtjYXNlIDc6cmV0dXJuISF0aGlzLkEmJnRoaXMuQS5pIT0wO2Nhc2UgODpyZXR1cm4odGhpcy5CYiYyNTYpPT0wfXJldHVybiBuZih0aGlzLHQteXIodGhpcy5paSgpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHx0aGlzLmlpKCkpLHQpKX0saC5iaT1mdW5jdGlvbih0LG4pe3ZhciByO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxBcyh0aGlzLkFiLGwobiwxNikpO3JldHVybjtjYXNlIDE6RkgodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgMjpLc2UodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgNTpKRSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IG1sKFp1LHRoaXMsNykpLCRyKHRoaXMuQSksIXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksQXModGhpcy5BLGwobiwxNikpO3JldHVybjtjYXNlIDg6alYodGhpcyxSdChCdChuKSkpO3JldHVybn11Zih0aGlzLHQteXIodGhpcy5paSgpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHx0aGlzLmlpKCkpLHQpLG4pfSxoLmlpPWZ1bmN0aW9uKCl7cmV0dXJuIFRuKCkscV90fSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RGUodGhpcy5DYiwxODQpJiYobCh0aGlzLkNiLDE4NCkudGI9bnVsbCksRnUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOkNFKHRoaXMsbnVsbCksbEUodGhpcyx0aGlzLkQpO3JldHVybjtjYXNlIDU6SkUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IG1sKFp1LHRoaXMsNykpLCRyKHRoaXMuQSk7cmV0dXJuO2Nhc2UgODpqVih0aGlzLCEwKTtyZXR1cm59Y2YodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8dGhpcy5paSgpKSx0KSl9LGgucGk9ZnVuY3Rpb24oKXtvMigoRWwoKSxpbyksdGhpcykueGUoKSx0aGlzLkJifD0xfSxoLm9rPWZ1bmN0aW9uKCl7dmFyIHQsbixyO2lmKCF0aGlzLmMmJih0PUIydChBaCh0aGlzKSksIXQuZGMoKSkpZm9yKHI9dC5LYygpO3IuT2IoKTspbj1laShyLlBiKCkpLFlBKHRoaXMsbikmJkE0bih0aGlzKTtyZXR1cm4gdGhpcy5ifSxoLmlrPWZ1bmN0aW9uKCl7dmFyIHQ7aWYoIXRoaXMuZSl7dD1udWxsO3RyeXt0PXp3KHRoaXMpfWNhdGNoKG4pe2lmKG49YnMobiksIURlKG4sMTAzKSl0aHJvdyB1ZShuKX10aGlzLmQ9bnVsbCx0JiZ0LmkmMSYmKHQ9PWloP3RoaXMuZD0oSG4oKSxQYik6dD09VnI/dGhpcy5kPXB0KDApOnQ9PUI0P3RoaXMuZD1uZXcgcGEoMCk6dD09TmE/dGhpcy5kPTA6dD09bm0/dGhpcy5kPWFwKDApOnQ9PWg3P3RoaXMuZD1fRSgwKTp0PT1BbD90aGlzLmQ9Zk4oMCk6dGhpcy5kPXdOKDApKSx0aGlzLmU9ITB9cmV0dXJuIHRoaXMuZH0saC5uaz1mdW5jdGlvbigpe3JldHVybih0aGlzLkJiJjI1NikhPTB9LGgucmw9ZnVuY3Rpb24odCl7dCYmKHRoaXMuRD0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkFic3RyYWN0RW51bWVyYXRvciIpfSxoLmdsPWZ1bmN0aW9uKHQpe3hmdCh0aGlzLHQpLHRoaXMucmwodCl9LGguaGw9ZnVuY3Rpb24odCl7dGhpcy5DPXQsdGhpcy5lPSExfSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuRGImNjQ/VVYodGhpcyk6KHQ9bmV3IEFmKFVWKHRoaXMpKSx0LmErPSIgKHNlcmlhbGl6YWJsZTogIixHcCh0LCh0aGlzLkJiJjI1NikhPTApLHQuYSs9IikiLHQuYSl9LGguYz0hMSxoLmQ9bnVsbCxoLmU9ITEsSShHbiwiRURhdGFUeXBlSW1wbCIsNTc3KSxEKDQ2OSw1NzcsezExMDoxLDk0OjEsOTM6MSwxNDI6MSwxNTY6MSw4NDc6MSw2ODU6MSwxNTU6MSwxOTc6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwzNjQ6MSw0Njk6MSwxNTg6MSwxMTk6MSwxMjA6MSw2OTE6MX0sbEplKSxoLkxoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYTtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbD90aGlzLkQ6dGhpcy5CO2Nhc2UgMzpyZXR1cm4gencodGhpcyk7Y2FzZSA0OnJldHVybiBYN2UodGhpcyk7Y2FzZSA1OnJldHVybiB0aGlzLkY7Y2FzZSA2OnJldHVybiBuP0FoKHRoaXMpOlFrKHRoaXMpO2Nhc2UgNzpyZXR1cm4hdGhpcy5BJiYodGhpcy5BPW5ldyBtbChadSx0aGlzLDcpKSx0aGlzLkE7Y2FzZSA4OnJldHVybiBIbigpLCEhKHRoaXMuQmImMjU2KTtjYXNlIDk6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQod3AsdGhpcyw5LDUpKSx0aGlzLmF9cmV0dXJuIHNmKHRoaXMsdC15cigoVG4oKSxaYikpLE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fFpiKSx0KSxuLHIpfSxoLlNoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvLGY7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksUnUodGhpcy5BYix0LHIpO2Nhc2UgNjpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD93dWUodGhpcyxyKTp0aGlzLkNiLlRoKHRoaXMsLTEtbyxudWxsLHIpKSksTmgodGhpcyx0LDYscik7Y2FzZSA5OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IG50KHdwLHRoaXMsOSw1KSksUnUodGhpcy5hLHQscil9cmV0dXJuIGY9bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHwoVG4oKSxaYikpLG4pLDY5KSxmLndrKCkuemsodGhpcyxLdSh0aGlzKSxuLXlyKChUbigpLFpiKSksdCxyKX0saC5VaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxUbyh0aGlzLkFiLHQscik7Y2FzZSA2OnJldHVybiBOaCh0aGlzLG51bGwsNixyKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksVG8odGhpcy5BLHQscik7Y2FzZSA5OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IG50KHdwLHRoaXMsOSw1KSksVG8odGhpcy5hLHQscil9cmV0dXJuIG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHwoVG4oKSxaYikpLG4pLDY5KSxvLndrKCkuQWsodGhpcyxLdSh0aGlzKSxuLXlyKChUbigpLFpiKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbCYmdGhpcy5EPT10aGlzLkY7Y2FzZSAzOnJldHVybiEhencodGhpcyk7Y2FzZSA0OnJldHVybiEhWDdlKHRoaXMpO2Nhc2UgNTpyZXR1cm4gdGhpcy5GIT1udWxsJiZ0aGlzLkYhPXRoaXMuRCYmdGhpcy5GIT10aGlzLkI7Y2FzZSA2OnJldHVybiEhUWsodGhpcyk7Y2FzZSA3OnJldHVybiEhdGhpcy5BJiZ0aGlzLkEuaSE9MDtjYXNlIDg6cmV0dXJuKHRoaXMuQmImMjU2KT09MDtjYXNlIDk6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksWmIpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxaYiksdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHI7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLEFzKHRoaXMuQWIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTpGSCh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAyOktzZSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSA1OkpFKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksJHIodGhpcy5BKSwhdGhpcy5BJiYodGhpcy5BPW5ldyBtbChadSx0aGlzLDcpKSxBcyh0aGlzLkEsbChuLDE2KSk7cmV0dXJuO2Nhc2UgODpqVih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgOTohdGhpcy5hJiYodGhpcy5hPW5ldyBudCh3cCx0aGlzLDksNSkpLCRyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQod3AsdGhpcyw5LDUpKSxBcyh0aGlzLmEsbChuLDE2KSk7cmV0dXJufXVmKHRoaXMsdC15cigoVG4oKSxaYikpLE1uKChyPWwoS24odGhpcywxNiksMjkpLHJ8fFpiKSx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLFpifSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RGUodGhpcy5DYiwxODQpJiYobCh0aGlzLkNiLDE4NCkudGI9bnVsbCksRnUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOkNFKHRoaXMsbnVsbCksbEUodGhpcyx0aGlzLkQpO3JldHVybjtjYXNlIDU6SkUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IG1sKFp1LHRoaXMsNykpLCRyKHRoaXMuQSk7cmV0dXJuO2Nhc2UgODpqVih0aGlzLCEwKTtyZXR1cm47Y2FzZSA5OiF0aGlzLmEmJih0aGlzLmE9bmV3IG50KHdwLHRoaXMsOSw1KSksJHIodGhpcy5hKTtyZXR1cm59Y2YodGhpcyx0LXlyKChUbigpLFpiKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8WmIpLHQpKX0saC5waT1mdW5jdGlvbigpe3ZhciB0LG47aWYodGhpcy5hKWZvcih0PTAsbj10aGlzLmEuaTt0PG47Kyt0KVNPKE9lKHRoaXMuYSx0KSk7bzIoKEVsKCksaW8pLHRoaXMpLnhlKCksdGhpcy5CYnw9MX0saC5paz1mdW5jdGlvbigpe3JldHVybiBYN2UodGhpcyl9LGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIHQhPW51bGx9LGgucmw9ZnVuY3Rpb24odCl7fSxJKEduLCJFRW51bUltcGwiLDQ2OSksRCg1ODIsNDQ4LHsxMTA6MSw5NDoxLDkzOjEsMjAzOToxLDY5NDoxLDE1NToxLDE5NzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDU4MjoxLDE1ODoxLDExOToxLDEyMDoxfSxQUWUpLGgueGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy56Yn0saC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gYWd0KHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiBwdCh0aGlzLmQpO2Nhc2UgMzpyZXR1cm4gdGhpcy5iP3RoaXMuYjp0aGlzLmE7Y2FzZSA0OnJldHVybiBvPXRoaXMuYyxvPz90aGlzLnpiO2Nhc2UgNTpyZXR1cm4gdGhpcy5EYj4+MTY9PTU/bCh0aGlzLkNiLDY4NSk6bnVsbH1yZXR1cm4gc2YodGhpcyx0LXlyKChUbigpLEQyKSksTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8RDIpLHQpLG4scil9LGguU2g9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZjtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxSdSh0aGlzLkFiLHQscik7Y2FzZSA1OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP2FndCh0aGlzLHIpOnRoaXMuQ2IuVGgodGhpcywtMS1vLG51bGwscikpKSxOaCh0aGlzLHQsNSxyKX1yZXR1cm4gZj1sKE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fChUbigpLEQyKSksbiksNjkpLGYud2soKS56ayh0aGlzLEt1KHRoaXMpLG4teXIoKFRuKCksRDIpKSx0LHIpfSxoLlVoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFRvKHRoaXMuQWIsdCxyKTtjYXNlIDU6cmV0dXJuIE5oKHRoaXMsbnVsbCw1LHIpfXJldHVybiBvPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KFRuKCksRDIpKSxuKSw2OSksby53aygpLkFrKHRoaXMsS3UodGhpcyksbi15cigoVG4oKSxEMikpLHQscil9LGguV2g9ZnVuY3Rpb24odCl7dmFyIG47c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiB0aGlzLmQhPTA7Y2FzZSAzOnJldHVybiEhdGhpcy5iO2Nhc2UgNDpyZXR1cm4gdGhpcy5jIT1udWxsO2Nhc2UgNTpyZXR1cm4hISh0aGlzLkRiPj4xNj09NSYmbCh0aGlzLkNiLDY4NSkpfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksRDIpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxEMiksdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHI7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLEFzKHRoaXMuQWIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTpGdSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAyOlFvZSh0aGlzLGwobiwxNykuYSk7cmV0dXJuO2Nhc2UgMzpyMnQodGhpcyxsKG4sMjAzOSkpO3JldHVybjtjYXNlIDQ6Wm9lKHRoaXMsZWkobikpO3JldHVybn11Zih0aGlzLHQteXIoKFRuKCksRDIpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHxEMiksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSxEMn0saC5raT1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOkZ1KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpRb2UodGhpcywwKTtyZXR1cm47Y2FzZSAzOnIydCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDQ6Wm9lKHRoaXMsbnVsbCk7cmV0dXJufWNmKHRoaXMsdC15cigoVG4oKSxEMikpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fEQyKSx0KSl9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmMsdD8/dGhpcy56Yn0saC5iPW51bGwsaC5jPW51bGwsaC5kPTAsSShHbiwiRUVudW1MaXRlcmFsSW1wbCIsNTgyKTt2YXIgUE9uPWtzKEduLCJFRmFjdG9yeUltcGwvSW50ZXJuYWxFRGF0ZVRpbWVGb3JtYXQiKTtEKDQ5OSwxLHsyMTE0OjF9LEtJKSxJKEduLCJFRmFjdG9yeUltcGwvMUNsaWVudEludGVybmFsRURhdGVUaW1lRm9ybWF0Iiw0OTkpLEQoMjQ4LDEyMCx7MTEwOjEsOTQ6MSw5MzoxLDg5OjEsNTg6MSwxMTQ6MSw1NDoxLDk5OjEsMjQ4OjEsMTE5OjEsMTIwOjF9LFF2KSxoLkNoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYTtyZXR1cm4gcj1OaCh0aGlzLHQsbixyKSx0aGlzLmUmJkRlKHQsMTc5KSYmKGE9U1UodGhpcyx0aGlzLmUpLGEhPXRoaXMuYyYmKHI9WkUodGhpcyxhLHIpKSkscn0saC5MaD1mdW5jdGlvbih0LG4scil7dmFyIGE7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5mO2Nhc2UgMTpyZXR1cm4hdGhpcy5kJiYodGhpcy5kPW5ldyBZcyhXbyx0aGlzLDEpKSx0aGlzLmQ7Y2FzZSAyOnJldHVybiBuP2pVKHRoaXMpOnRoaXMuYztjYXNlIDM6cmV0dXJuIHRoaXMuYjtjYXNlIDQ6cmV0dXJuIHRoaXMuZTtjYXNlIDU6cmV0dXJuIG4/aHVlKHRoaXMpOnRoaXMuYX1yZXR1cm4gc2YodGhpcyx0LXlyKChUbigpLEUzKSksTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8RTMpLHQpLG4scil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gUTB0KHRoaXMsbnVsbCxyKTtjYXNlIDE6cmV0dXJuIXRoaXMuZCYmKHRoaXMuZD1uZXcgWXMoV28sdGhpcywxKSksVG8odGhpcy5kLHQscik7Y2FzZSAzOnJldHVybiBKMHQodGhpcyxudWxsLHIpfXJldHVybiBvPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KFRuKCksRTMpKSxuKSw2OSksby53aygpLkFrKHRoaXMsS3UodGhpcyksbi15cigoVG4oKSxFMykpLHQscil9LGguV2g9ZnVuY3Rpb24odCl7dmFyIG47c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuZjtjYXNlIDE6cmV0dXJuISF0aGlzLmQmJnRoaXMuZC5pIT0wO2Nhc2UgMjpyZXR1cm4hIXRoaXMuYztjYXNlIDM6cmV0dXJuISF0aGlzLmI7Y2FzZSA0OnJldHVybiEhdGhpcy5lO2Nhc2UgNTpyZXR1cm4hIXRoaXMuYX1yZXR1cm4gbmYodGhpcyx0LXlyKChUbigpLEUzKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8RTMpLHQpKX0saC5iaT1mdW5jdGlvbih0LG4pe3ZhciByO3N3aXRjaCh0KXtjYXNlIDA6Q2d0KHRoaXMsbChuLDg5KSk7cmV0dXJuO2Nhc2UgMTohdGhpcy5kJiYodGhpcy5kPW5ldyBZcyhXbyx0aGlzLDEpKSwkcih0aGlzLmQpLCF0aGlzLmQmJih0aGlzLmQ9bmV3IFlzKFdvLHRoaXMsMSkpLEFzKHRoaXMuZCxsKG4sMTYpKTtyZXR1cm47Y2FzZSAzOkF4ZSh0aGlzLGwobiw4OSkpO3JldHVybjtjYXNlIDQ6S3hlKHRoaXMsbChuLDg1MCkpO3JldHVybjtjYXNlIDU6c0UodGhpcyxsKG4sMTQyKSk7cmV0dXJufXVmKHRoaXMsdC15cigoVG4oKSxFMykpLE1uKChyPWwoS24odGhpcywxNiksMjkpLHJ8fEUzKSx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLEUzfSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6Q2d0KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTohdGhpcy5kJiYodGhpcy5kPW5ldyBZcyhXbyx0aGlzLDEpKSwkcih0aGlzLmQpO3JldHVybjtjYXNlIDM6QXhlKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNDpLeGUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA1OnNFKHRoaXMsbnVsbCk7cmV0dXJufWNmKHRoaXMsdC15cigoVG4oKSxFMykpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fEUzKSx0KSl9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgVGgoZzAodGhpcykpLHQuYSs9IiAoZXhwcmVzc2lvbjogIix3bGUodGhpcyx0KSx0LmErPSIpIix0LmF9O3ZhciBMUGU7SShHbiwiRUdlbmVyaWNUeXBlSW1wbCIsMjQ4KSxEKDIwNjcsMjA2MixLRyksaC5HaT1mdW5jdGlvbih0LG4pe0RydCh0aGlzLHQsbil9LGguV2s9ZnVuY3Rpb24odCxuKXtyZXR1cm4gRHJ0KHRoaXMsdGhpcy5nYygpLHQpLG59LGguJGk9ZnVuY3Rpb24odCl7cmV0dXJuIGZmKHRoaXMucGooKSx0KX0saC5JaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLkppKCl9LGgucGo9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEVRZSh0aGlzKX0saC5KaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLktpKDApfSxoLktpPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnBqKCkuZmQodCl9LGguWGs9ZnVuY3Rpb24odCxuKXtyZXR1cm4gTnkodGhpcyx0LCEwKSxufSxoLlRpPWZ1bmN0aW9uKHQsbil7dmFyIHIsYTtyZXR1cm4gYT1rdWUodGhpcyxuKSxyPXRoaXMuZmQodCksci5SYihhKSxhfSxoLlVpPWZ1bmN0aW9uKHQsbil7dmFyIHI7TnkodGhpcyxuLCEwKSxyPXRoaXMuZmQodCksci5SYihuKX0sSSh1cywiQWJzdHJhY3RTZXF1ZW50aWFsSW50ZXJuYWxFTGlzdCIsMjA2NyksRCg0OTYsMjA2NyxLRyxUTyksaC4kaT1mdW5jdGlvbih0KXtyZXR1cm4gZmYodGhpcy5waigpLHQpfSxoLklpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYj09bnVsbD8oV3AoKSxXcCgpLGRGKTp0aGlzLnNsKCl9LGgucGo9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFh0dCh0aGlzLmEsdGhpcy5iKX0saC5KaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmI9PW51bGw/KFdwKCksV3AoKSxkRik6dGhpcy5zbCgpfSxoLktpPWZ1bmN0aW9uKHQpe3ZhciBuLHI7aWYodGhpcy5iPT1udWxsKXtpZih0PDB8fHQ+MSl0aHJvdyB1ZShuZXcgdGMoQ0wrdCsiLCBzaXplPTAiKSk7cmV0dXJuIFdwKCksV3AoKSxkRn1mb3Iocj10aGlzLnNsKCksbj0wO248dDsrK24pTVYocik7cmV0dXJuIHJ9LGguZGM9ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYSxvLGY7aWYodGhpcy5iIT1udWxsKXtmb3Iocj0wO3I8dGhpcy5iLmxlbmd0aDsrK3IpaWYodD10aGlzLmJbcl0sIXRoaXMudmwoKXx8dGhpcy5hLlhoKHQpKXtpZihmPXRoaXMuYS5OaCh0LCExKSxGbygpLGwodCw2OSkueGsoKSl7Zm9yKG49bChmLDE2MCksYT0wLG89bi5nYygpO2E8bzsrK2EpaWYoc2F0KG4uVGwoYSkpJiZuLlVsKGEpIT1udWxsKXJldHVybiExfWVsc2UgaWYodC5KaygpKXtpZighbChmLDE2KS5kYygpKXJldHVybiExfWVsc2UgaWYoZiE9bnVsbClyZXR1cm4hMX19cmV0dXJuITB9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbTdlKHRoaXMpfSxoLmZkPWZ1bmN0aW9uKHQpe3ZhciBuLHI7aWYodGhpcy5iPT1udWxsKXtpZih0IT0wKXRocm93IHVlKG5ldyB0YyhDTCt0KyIsIHNpemU9MCIpKTtyZXR1cm4gV3AoKSxXcCgpLGRGfWZvcihyPXRoaXMudWwoKT90aGlzLnRsKCk6dGhpcy5zbCgpLG49MDtuPHQ7KytuKU1WKHIpO3JldHVybiByfSxoLlRpPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5VaT1mdW5jdGlvbih0LG4pe3Rocm93IHVlKG5ldyBRcil9LGguc2w9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHFxKHRoaXMuYSx0aGlzLmIpfSxoLnRsPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBSeWUodGhpcy5hLHRoaXMuYil9LGgudWw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5nYz1mdW5jdGlvbigpe3ZhciB0LG4scixhLG8sZixnO2lmKG89MCx0aGlzLmIhPW51bGwpe2ZvcihyPTA7cjx0aGlzLmIubGVuZ3RoOysrcilpZih0PXRoaXMuYltyXSwhdGhpcy52bCgpfHx0aGlzLmEuWGgodCkpaWYoZz10aGlzLmEuTmgodCwhMSksRm8oKSxsKHQsNjkpLnhrKCkpZm9yKG49bChnLDE2MCksYT0wLGY9bi5nYygpO2E8ZjsrK2Epc2F0KG4uVGwoYSkpJiZuLlVsKGEpIT1udWxsJiYrK287ZWxzZSB0LkprKCk/bys9bChnLDE2KS5nYygpOmchPW51bGwmJisrb31yZXR1cm4gb30saC52bD1mdW5jdGlvbigpe3JldHVybiEwfTt2YXIgcnBlO0kodXMsIkVDb250ZW50c0VMaXN0Iiw0OTYpLEQoMTE3Nyw0OTYsS0cscHJ0KSxoLnNsPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBtcnQodGhpcy5hLHRoaXMuYil9LGgudGw9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJydCh0aGlzLmEsdGhpcy5iKX0saC52bD1mdW5jdGlvbigpe3JldHVybiExfSxJKEduLCJFTmFtZWRFbGVtZW50SW1wbC8xIiwxMTc3KSxEKDI4NywxLFdHLHFxKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUmI9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC53bD1mdW5jdGlvbih0KXtpZih0aGlzLmchPTB8fHRoaXMuZSl0aHJvdyB1ZShuZXcgbmMoIkl0ZXJhdG9yIGFscmVhZHkgaW4gdXNlIG9yIGFscmVhZHkgZmlsdGVyZWQiKSk7dGhpcy5lPXR9LGguT2I9ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYSxvLGY7c3dpdGNoKHRoaXMuZyl7Y2FzZSAzOmNhc2UgMjpyZXR1cm4hMDtjYXNlIDE6cmV0dXJuITE7Y2FzZS0zOnRoaXMucD90aGlzLnAuUGIoKTorK3RoaXMubjtkZWZhdWx0OmlmKCF0aGlzLmt8fCh0aGlzLnA/IXZwdCh0aGlzLHRoaXMucCk6IW8ydCh0aGlzKSkpe2Zvcig7dGhpcy5kPHRoaXMuYy5sZW5ndGg7KWlmKG49dGhpcy5jW3RoaXMuZCsrXSwoIXRoaXMuZXx8bi5waygpIT1vQ3x8bi5MaigpIT0wKSYmKCF0aGlzLnZsKCl8fHRoaXMuYi5YaChuKSkpe2lmKGY9dGhpcy5iLk5oKG4sdGhpcy51bCgpKSx0aGlzLmY9KEZvKCksbChuLDY5KS54aygpKSx0aGlzLmZ8fG4uSmsoKSl7aWYodGhpcy51bCgpPyhhPWwoZiwxNSksdGhpcy5rPWEpOihhPWwoZiw3MSksdGhpcy5rPXRoaXMuaj1hKSxEZSh0aGlzLmssNTkpPyh0aGlzLnA9bnVsbCx0aGlzLm89dGhpcy5rLmdjKCksdGhpcy5uPTApOnRoaXMucD10aGlzLmo/dGhpcy5qLkppKCk6dGhpcy5rLmVkKCksdGhpcy5wP3ZwdCh0aGlzLHRoaXMucCk6bzJ0KHRoaXMpKXJldHVybiBvPXRoaXMucD90aGlzLnAuUGIoKTp0aGlzLmo/dGhpcy5qLiRpKHRoaXMubisrKTp0aGlzLmsuWGIodGhpcy5uKyspLHRoaXMuZj8odD1sKG8sNzYpLHQuTGsoKSxyPXQubWQoKSx0aGlzLmk9cik6KHI9byx0aGlzLmk9ciksdGhpcy5nPTMsITB9ZWxzZSBpZihmIT1udWxsKXJldHVybiB0aGlzLms9bnVsbCx0aGlzLnA9bnVsbCxyPWYsdGhpcy5pPXIsdGhpcy5nPTIsITB9cmV0dXJuIHRoaXMuaz1udWxsLHRoaXMucD1udWxsLHRoaXMuZj0hMSx0aGlzLmc9MSwhMX1lbHNlIHJldHVybiBvPXRoaXMucD90aGlzLnAuUGIoKTp0aGlzLmo/dGhpcy5qLiRpKHRoaXMubisrKTp0aGlzLmsuWGIodGhpcy5uKyspLHRoaXMuZj8odD1sKG8sNzYpLHQuTGsoKSxyPXQubWQoKSx0aGlzLmk9cik6KHI9byx0aGlzLmk9ciksdGhpcy5nPTMsITB9fSxoLlNiPWZ1bmN0aW9uKCl7dmFyIHQsbixyLGEsbyxmO3N3aXRjaCh0aGlzLmcpe2Nhc2UtMzpjYXNlLTI6cmV0dXJuITA7Y2FzZS0xOnJldHVybiExO2Nhc2UgMzp0aGlzLnA/dGhpcy5wLlViKCk6LS10aGlzLm47ZGVmYXVsdDppZighdGhpcy5rfHwodGhpcy5wPyF3cHQodGhpcyx0aGlzLnApOiFNcHQodGhpcykpKXtmb3IoO3RoaXMuZD4wOylpZihuPXRoaXMuY1stLXRoaXMuZF0sKCF0aGlzLmV8fG4ucGsoKSE9b0N8fG4uTGooKSE9MCkmJighdGhpcy52bCgpfHx0aGlzLmIuWGgobikpKXtpZihmPXRoaXMuYi5OaChuLHRoaXMudWwoKSksdGhpcy5mPShGbygpLGwobiw2OSkueGsoKSksdGhpcy5mfHxuLkprKCkpe2lmKHRoaXMudWwoKT8oYT1sKGYsMTUpLHRoaXMuaz1hKTooYT1sKGYsNzEpLHRoaXMuaz10aGlzLmo9YSksRGUodGhpcy5rLDU5KT8odGhpcy5vPXRoaXMuay5nYygpLHRoaXMubj10aGlzLm8pOnRoaXMucD10aGlzLmo/dGhpcy5qLktpKHRoaXMuay5nYygpKTp0aGlzLmsuZmQodGhpcy5rLmdjKCkpLHRoaXMucD93cHQodGhpcyx0aGlzLnApOk1wdCh0aGlzKSlyZXR1cm4gbz10aGlzLnA/dGhpcy5wLlViKCk6dGhpcy5qP3RoaXMuai4kaSgtLXRoaXMubik6dGhpcy5rLlhiKC0tdGhpcy5uKSx0aGlzLmY/KHQ9bChvLDc2KSx0LkxrKCkscj10Lm1kKCksdGhpcy5pPXIpOihyPW8sdGhpcy5pPXIpLHRoaXMuZz0tMywhMH1lbHNlIGlmKGYhPW51bGwpcmV0dXJuIHRoaXMuaz1udWxsLHRoaXMucD1udWxsLHI9Zix0aGlzLmk9cix0aGlzLmc9LTIsITB9cmV0dXJuIHRoaXMuaz1udWxsLHRoaXMucD1udWxsLHRoaXMuZz0tMSwhMX1lbHNlIHJldHVybiBvPXRoaXMucD90aGlzLnAuVWIoKTp0aGlzLmo/dGhpcy5qLiRpKC0tdGhpcy5uKTp0aGlzLmsuWGIoLS10aGlzLm4pLHRoaXMuZj8odD1sKG8sNzYpLHQuTGsoKSxyPXQubWQoKSx0aGlzLmk9cik6KHI9byx0aGlzLmk9ciksdGhpcy5nPS0zLCEwfX0saC5QYj1mdW5jdGlvbigpe3JldHVybiBNVih0aGlzKX0saC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguVWI9ZnVuY3Rpb24oKXt2YXIgdDtpZih0aGlzLmc8LTF8fHRoaXMuU2IoKSlyZXR1cm4tLXRoaXMuYSx0aGlzLmc9MCx0PXRoaXMuaSx0aGlzLlNiKCksdDt0aHJvdyB1ZShuZXcgX2MpfSxoLlZiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS0xfSxoLlFiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC51bD1mdW5jdGlvbigpe3JldHVybiExfSxoLldiPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGgudmw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5hPTAsaC5kPTAsaC5mPSExLGguZz0wLGgubj0wLGgubz0wO3ZhciBkRjtJKHVzLCJFQ29udGVudHNFTGlzdC9GZWF0dXJlSXRlcmF0b3JJbXBsIiwyODcpLEQoNzExLDI4NyxXRyxSeWUpLGgudWw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSSh1cywiRUNvbnRlbnRzRUxpc3QvUmVzb2x2aW5nRmVhdHVyZUl0ZXJhdG9ySW1wbCIsNzExKSxEKDExNzgsNzExLFdHLGJydCksaC52bD1mdW5jdGlvbigpe3JldHVybiExfSxJKEduLCJFTmFtZWRFbGVtZW50SW1wbC8xLzEiLDExNzgpLEQoMTE3OSwyODcsV0csbXJ0KSxoLnZsPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoR24sIkVOYW1lZEVsZW1lbnRJbXBsLzEvMiIsMTE3OSksRCgzOSwxNTIsWVAsQ3ksa29lLF9hLEZvZSxaZyxoMCxRNmUsWG90LEo2ZSxRb3QscDZlLEpvdCx0N2UsWm90LGI2ZSxlY3QsWjZlLHRjdCxYXyxzTixyb2UsZTdlLG5jdCxtNmUscmN0KSxoLktqPWZ1bmN0aW9uKCl7cmV0dXJuIE42ZSh0aGlzKX0saC5Saj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PU42ZSh0aGlzKSx0P3QuaWsoKTpudWxsfSxoLmhqPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmI9PS0xJiZ0aGlzLmEmJih0aGlzLmI9dGhpcy5jLkhoKHRoaXMuYS5MaigpLHRoaXMuYS5waygpKSksdGhpcy5jLnloKHRoaXMuYix0KX0saC5qaj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGguU2o9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1ONmUodGhpcyksdD90LnRrKCk6ITF9LGguYj0tMSxJKEduLCJFTm90aWZpY2F0aW9uSW1wbCIsMzkpLEQoNDExLDI5Mix7MTEwOjEsOTQ6MSw5MzoxLDE1NToxLDE5NzoxLDU4OjEsNjI6MSwxMTQ6MSw0ODE6MSw1NDoxLDk5OjEsMTU4OjEsNDExOjEsMjkyOjEsMTE5OjEsMTIwOjF9LHFpZSksaC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gdWd0KHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIEhuKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgMzpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJjUxMik7Y2FzZSA0OnJldHVybiBwdCh0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gcHQodGhpcy50KTtjYXNlIDY6cmV0dXJuIEhuKCksZj10aGlzLnQsZj4xfHxmPT0tMTtjYXNlIDc6cmV0dXJuIEhuKCksbz10aGlzLnMsbz49MTtjYXNlIDg6cmV0dXJuIG4/T2YodGhpcyk6dGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xO2Nhc2UgMTA6cmV0dXJuIHRoaXMuRGI+PjE2PT0xMD9sKHRoaXMuQ2IsMjkpOm51bGw7Y2FzZSAxMTpyZXR1cm4hdGhpcy5kJiYodGhpcy5kPW5ldyBtbChadSx0aGlzLDExKSksdGhpcy5kO2Nhc2UgMTI6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgbnQoazMsdGhpcywxMiwxMCkpLHRoaXMuYztjYXNlIDEzOnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IExPKHRoaXMsdGhpcykpLHRoaXMuYTtjYXNlIDE0OnJldHVybiBYbCh0aGlzKX1yZXR1cm4gc2YodGhpcyx0LXlyKChUbigpLEkyKSksTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8STIpLHQpLG4scil9LGguU2g9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZjtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxSdSh0aGlzLkFiLHQscik7Y2FzZSAxMDpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD91Z3QodGhpcyxyKTp0aGlzLkNiLlRoKHRoaXMsLTEtbyxudWxsLHIpKSksTmgodGhpcyx0LDEwLHIpO2Nhc2UgMTI6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgbnQoazMsdGhpcywxMiwxMCkpLFJ1KHRoaXMuYyx0LHIpfXJldHVybiBmPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KFRuKCksSTIpKSxuKSw2OSksZi53aygpLnprKHRoaXMsS3UodGhpcyksbi15cigoVG4oKSxJMikpLHQscil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksVG8odGhpcy5BYix0LHIpO2Nhc2UgOTpyZXR1cm4gcWFlKHRoaXMscik7Y2FzZSAxMDpyZXR1cm4gTmgodGhpcyxudWxsLDEwLHIpO2Nhc2UgMTE6cmV0dXJuIXRoaXMuZCYmKHRoaXMuZD1uZXcgbWwoWnUsdGhpcywxMSkpLFRvKHRoaXMuZCx0LHIpO2Nhc2UgMTI6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgbnQoazMsdGhpcywxMiwxMCkpLFRvKHRoaXMuYyx0LHIpO2Nhc2UgMTQ6cmV0dXJuIFRvKFhsKHRoaXMpLHQscil9cmV0dXJuIG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHwoVG4oKSxJMikpLG4pLDY5KSxvLndrKCkuQWsodGhpcyxLdSh0aGlzKSxuLXlyKChUbigpLEkyKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbixyLGE7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybih0aGlzLkJiJjI1Nik9PTA7Y2FzZSAzOnJldHVybih0aGlzLkJiJjUxMik9PTA7Y2FzZSA0OnJldHVybiB0aGlzLnMhPTA7Y2FzZSA1OnJldHVybiB0aGlzLnQhPTE7Y2FzZSA2OnJldHVybiBhPXRoaXMudCxhPjF8fGE9PS0xO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybiEhKHRoaXMuRGI+PjE2PT0xMCYmbCh0aGlzLkNiLDI5KSk7Y2FzZSAxMTpyZXR1cm4hIXRoaXMuZCYmdGhpcy5kLmkhPTA7Y2FzZSAxMjpyZXR1cm4hIXRoaXMuYyYmdGhpcy5jLmkhPTA7Y2FzZSAxMzpyZXR1cm4hIXRoaXMuYSYmWGwodGhpcy5hLmEpLmkhPTAmJiEodGhpcy5iJiZ1dWUodGhpcy5iKSk7Y2FzZSAxNDpyZXR1cm4hIXRoaXMuYiYmdXVlKHRoaXMuYil9cmV0dXJuIG5mKHRoaXMsdC15cigoVG4oKSxJMikpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fEkyKSx0KSl9LGguYmk9ZnVuY3Rpb24odCxuKXt2YXIgcixhO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxBcyh0aGlzLkFiLGwobiwxNikpO3JldHVybjtjYXNlIDE6RnUodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgMjpjMih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMzp1Mih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgNDppMih0aGlzLGwobiwxNykuYSk7cmV0dXJuO2Nhc2UgNTpNeSh0aGlzLGwobiwxNykuYSk7cmV0dXJuO2Nhc2UgODpHbSh0aGlzLGwobiwxNDIpKTtyZXR1cm47Y2FzZSA5OmE9JDEodGhpcyxsKG4sODkpLG51bGwpLGEmJmEub2ooKTtyZXR1cm47Y2FzZSAxMTohdGhpcy5kJiYodGhpcy5kPW5ldyBtbChadSx0aGlzLDExKSksJHIodGhpcy5kKSwhdGhpcy5kJiYodGhpcy5kPW5ldyBtbChadSx0aGlzLDExKSksQXModGhpcy5kLGwobiwxNikpO3JldHVybjtjYXNlIDEyOiF0aGlzLmMmJih0aGlzLmM9bmV3IG50KGszLHRoaXMsMTIsMTApKSwkcih0aGlzLmMpLCF0aGlzLmMmJih0aGlzLmM9bmV3IG50KGszLHRoaXMsMTIsMTApKSxBcyh0aGlzLmMsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTM6IXRoaXMuYSYmKHRoaXMuYT1uZXcgTE8odGhpcyx0aGlzKSksdEwodGhpcy5hKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBMTyh0aGlzLHRoaXMpKSxBcyh0aGlzLmEsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTQ6JHIoWGwodGhpcykpLEFzKFhsKHRoaXMpLGwobiwxNikpO3JldHVybn11Zih0aGlzLHQteXIoKFRuKCksSTIpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHxJMiksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSxJMn0saC5raT1mdW5jdGlvbih0KXt2YXIgbixyO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RnUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOmMyKHRoaXMsITApO3JldHVybjtjYXNlIDM6dTIodGhpcywhMCk7cmV0dXJuO2Nhc2UgNDppMih0aGlzLDApO3JldHVybjtjYXNlIDU6TXkodGhpcywxKTtyZXR1cm47Y2FzZSA4OkdtKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgOTpyPSQxKHRoaXMsbnVsbCxudWxsKSxyJiZyLm9qKCk7cmV0dXJuO2Nhc2UgMTE6IXRoaXMuZCYmKHRoaXMuZD1uZXcgbWwoWnUsdGhpcywxMSkpLCRyKHRoaXMuZCk7cmV0dXJuO2Nhc2UgMTI6IXRoaXMuYyYmKHRoaXMuYz1uZXcgbnQoazMsdGhpcywxMiwxMCkpLCRyKHRoaXMuYyk7cmV0dXJuO2Nhc2UgMTM6dGhpcy5hJiZ0TCh0aGlzLmEpO3JldHVybjtjYXNlIDE0OnRoaXMuYiYmJHIodGhpcy5iKTtyZXR1cm59Y2YodGhpcyx0LXlyKChUbigpLEkyKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8STIpLHQpKX0saC5waT1mdW5jdGlvbigpe3ZhciB0LG47aWYodGhpcy5jKWZvcih0PTAsbj10aGlzLmMuaTt0PG47Kyt0KVNPKE9lKHRoaXMuYyx0KSk7T2YodGhpcyksdGhpcy5CYnw9MX0sSShHbiwiRU9wZXJhdGlvbkltcGwiLDQxMSksRCg1MTMsNzU2LE1TZSxMTyksaC5xaj1mdW5jdGlvbih0LG4pe2Nmbih0aGlzLHQsbChuLDE0MikpfSxoLnJqPWZ1bmN0aW9uKHQpe1lsbih0aGlzLGwodCwxNDIpKX0saC54aj1mdW5jdGlvbih0KXt2YXIgbixyO3JldHVybiBuPWwoT2UoWGwodGhpcy5hKSx0KSw4OSkscj1uLmMscnx8KFRuKCksdGQpfSxoLkNqPWZ1bmN0aW9uKHQpe3ZhciBuLHI7cmV0dXJuIG49bChWeShYbCh0aGlzLmEpLHQpLDg5KSxyPW4uYyxyfHwoVG4oKSx0ZCl9LGguRGo9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWDVuKHRoaXMsdCxsKG4sMTQyKSl9LGguTGk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5Jaj1mdW5jdGlvbih0LG4scixhLG8pe3JldHVybiBudWxsfSxoLnNqPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB5UWUodGhpcyl9LGgudGo9ZnVuY3Rpb24oKXskcihYbCh0aGlzLmEpKX0saC51aj1mdW5jdGlvbih0KXtyZXR1cm4gZzF0KHRoaXMsdCl9LGgudmo9ZnVuY3Rpb24odCl7dmFyIG4scjtmb3Iocj10LktjKCk7ci5PYigpOylpZihuPXIuUGIoKSwhZzF0KHRoaXMsbikpcmV0dXJuITE7cmV0dXJuITB9LGgud2o9ZnVuY3Rpb24odCl7dmFyIG4scixhO2lmKERlKHQsMTUpJiYoYT1sKHQsMTUpLGEuZ2MoKT09WGwodGhpcy5hKS5pKSl7Zm9yKG49YS5LYygpLHI9bmV3IG9yKHRoaXMpO24uT2IoKTspaWYocWUobi5QYigpKSE9PXFlKGdyKHIpKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX0saC55aj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG87Zm9yKHI9MSxuPW5ldyBvcihYbCh0aGlzLmEpKTtuLmUhPW4uaS5nYygpOyl0PWwoZ3IobiksODkpLGE9KG89dC5jLG98fChUbigpLHRkKSkscj0zMSpyKyhhP2VzKGEpOjApO3JldHVybiByfSxoLnpqPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvO2ZvcihhPTAscj1uZXcgb3IoWGwodGhpcy5hKSk7ci5lIT1yLmkuZ2MoKTspe2lmKG49bChncihyKSw4OSkscWUodCk9PT1xZSgobz1uLmMsb3x8KFRuKCksdGQpKSkpcmV0dXJuIGE7KythfXJldHVybi0xfSxoLkFqPWZ1bmN0aW9uKCl7cmV0dXJuIFhsKHRoaXMuYSkuaT09MH0saC5Caj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLkVqPWZ1bmN0aW9uKCl7cmV0dXJuIFhsKHRoaXMuYSkuaX0saC5Gaj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG8sZjtmb3IoZj1YbCh0aGlzLmEpLmksbz1XZSh3YSxSbiwxLGYsNSwxKSxyPTAsbj1uZXcgb3IoWGwodGhpcy5hKSk7bi5lIT1uLmkuZ2MoKTspdD1sKGdyKG4pLDg5KSxvW3IrK109KGE9dC5jLGF8fChUbigpLHRkKSk7cmV0dXJuIG99LGguR2o9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnLHc7Zm9yKHc9WGwodGhpcy5hKS5pLHQubGVuZ3RoPHcmJihvPWJOKGJoKHQpLmMsdyksdD1vKSx0Lmxlbmd0aD53JiZUcyh0LHcsbnVsbCksYT0wLHI9bmV3IG9yKFhsKHRoaXMuYSkpO3IuZSE9ci5pLmdjKCk7KW49bChncihyKSw4OSksZj0oZz1uLmMsZ3x8KFRuKCksdGQpKSxUcyh0LGErKyxmKTtyZXR1cm4gdH0saC5Iaj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG87Zm9yKG89bmV3IFVwLG8uYSs9IlsiLHQ9WGwodGhpcy5hKSxuPTAsYT1YbCh0aGlzLmEpLmk7bjxhOylYbyhvLGpfKChyPWwoT2UodCxuKSw4OSkuYyxyfHwoVG4oKSx0ZCkpKSksKytuPGEmJihvLmErPUNvKTtyZXR1cm4gby5hKz0iXSIsby5hfSxoLkpqPWZ1bmN0aW9uKHQpe30saC5Maj1mdW5jdGlvbigpe3JldHVybiAxM30saC5rbD1mdW5jdGlvbigpe3JldHVybiEwfSxoLk1qPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGgubGw9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5tbD1mdW5jdGlvbigpe3JldHVybiExfSxoLm5sPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguYWw9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5vbD1mdW5jdGlvbigpe3JldHVybiEwfSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE0Mil9LGguUWo9ZnVuY3Rpb24oKXtyZXR1cm4gTWJuKHRoaXMuYSl9LGguU2k9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5ZaT1mdW5jdGlvbigpe3JldHVybiEwfSxJKEduLCJFT3BlcmF0aW9uSW1wbC8xIiw1MTMpLEQoMTM3NiwyMDYyLGlULHlRZSksaC5mZD1mdW5jdGlvbih0KXtyZXR1cm4gbU4odGhpcy5hLHQpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIFhsKHRoaXMuYS5hKS5pfSxJKEduLCJFT3BlcmF0aW9uSW1wbC8xLzEiLDEzNzYpLEQoMTM3Nyw1NTUsa2Msd3N0KSxoLlRpPWZ1bmN0aW9uKHQsbil7dmFyIHIsYTtyZXR1cm4gcj1sKEFBKHRoaXMsdCxuKSw4OSksaGgodGhpcy5lKSYmeGsodGhpcyxuZXcgc04odGhpcy5hLDcsKFRuKCksVV90KSxwdChuKSwoYT1yLmMsYXx8dGQpLHQpKSxyfSxoLlVqPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGY0bih0aGlzLGwodCw4OSksbil9LGguVmo9ZnVuY3Rpb24odCxuKXtyZXR1cm4gaDRuKHRoaXMsbCh0LDg5KSxuKX0saC5Xaj1mdW5jdGlvbih0LG4scil7cmV0dXJuIHU2bih0aGlzLGwodCw4OSksbChuLDg5KSxyKX0saC5Jaj1mdW5jdGlvbih0LG4scixhLG8pe3N3aXRjaCh0KXtjYXNlIDM6cmV0dXJuIHJBKHRoaXMsdCxuLHIsYSx0aGlzLmk+MSk7Y2FzZSA1OnJldHVybiByQSh0aGlzLHQsbixyLGEsdGhpcy5pLWwociwxNSkuZ2MoKT4wKTtkZWZhdWx0OnJldHVybiBuZXcgWmcodGhpcy5lLHQsdGhpcy5jLG4scixhLCEwKX19LGguVGo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5Raj1mdW5jdGlvbigpe3JldHVybiB1dWUodGhpcyl9LGguR2s9ZnVuY3Rpb24oKXskcih0aGlzKX0sSShHbiwiRU9wZXJhdGlvbkltcGwvMiIsMTM3NyksRCg1MDcsMSx7MjAzNzoxLDUwNzoxfSxPdHQpLEkoR24sIkVQYWNrYWdlSW1wbC8xIiw1MDcpLEQoMTQsODMsa2MsbnQpLGguaWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxoLmpsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC5tbD1mdW5jdGlvbigpe3JldHVybiEwfSxoLmI9MCxJKHVzLCJFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZUVMaXN0IiwxNCksRCgzNjUsMTQsa2MsVjgpLGgubmw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5XaT1mdW5jdGlvbih0LG4pe3JldHVybiBFeCh0aGlzLHQsbChuLDU4KSl9LEkodXMsIkVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlRUxpc3QvUmVzb2x2aW5nIiwzNjUpLEQoMzA4LDM2NSxrYyx3eSksaC5OaT1mdW5jdGlvbigpe3RoaXMuYS50Yj1udWxsfSxJKEduLCJFUGFja2FnZUltcGwvMiIsMzA4KSxEKDEyNzgsMSx7fSxlcmUpLEkoR24sIkVQYWNrYWdlSW1wbC8zIiwxMjc4KSxEKDczMyw0NSxtNiwkd2UpLGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpP3NvZSh0aGlzLHQpOiEhem8odGhpcy5mLHQpfSxJKEduLCJFUGFja2FnZVJlZ2lzdHJ5SW1wbCIsNzMzKSxEKDUxOCwyOTIsezExMDoxLDk0OjEsOTM6MSwxNTU6MSwxOTc6MSw1ODoxLDIxMTY6MSwxMTQ6MSw0ODE6MSw1NDoxLDk5OjEsMTU4OjEsNTE4OjEsMjkyOjEsMTE5OjEsMTIwOjF9LEhpZSksaC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gbGd0KHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIEhuKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgMzpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJjUxMik7Y2FzZSA0OnJldHVybiBwdCh0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gcHQodGhpcy50KTtjYXNlIDY6cmV0dXJuIEhuKCksZj10aGlzLnQsZj4xfHxmPT0tMTtjYXNlIDc6cmV0dXJuIEhuKCksbz10aGlzLnMsbz49MTtjYXNlIDg6cmV0dXJuIG4/T2YodGhpcyk6dGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xO2Nhc2UgMTA6cmV0dXJuIHRoaXMuRGI+PjE2PT0xMD9sKHRoaXMuQ2IsNjIpOm51bGx9cmV0dXJuIHNmKHRoaXMsdC15cigoVG4oKSxONCkpLE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fE40KSx0KSxuLHIpfSxoLlNoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvLGY7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksUnUodGhpcy5BYix0LHIpO2Nhc2UgMTA6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/bGd0KHRoaXMscik6dGhpcy5DYi5UaCh0aGlzLC0xLW8sbnVsbCxyKSkpLE5oKHRoaXMsdCwxMCxyKX1yZXR1cm4gZj1sKE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fChUbigpLE40KSksbiksNjkpLGYud2soKS56ayh0aGlzLEt1KHRoaXMpLG4teXIoKFRuKCksTjQpKSx0LHIpfSxoLlVoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFRvKHRoaXMuQWIsdCxyKTtjYXNlIDk6cmV0dXJuIHFhZSh0aGlzLHIpO2Nhc2UgMTA6cmV0dXJuIE5oKHRoaXMsbnVsbCwxMCxyKX1yZXR1cm4gbz1sKE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fChUbigpLE40KSksbiksNjkpLG8ud2soKS5Bayh0aGlzLEt1KHRoaXMpLG4teXIoKFRuKCksTjQpKSx0LHIpfSxoLldoPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYTtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuKHRoaXMuQmImMjU2KT09MDtjYXNlIDM6cmV0dXJuKHRoaXMuQmImNTEyKT09MDtjYXNlIDQ6cmV0dXJuIHRoaXMucyE9MDtjYXNlIDU6cmV0dXJuIHRoaXMudCE9MTtjYXNlIDY6cmV0dXJuIGE9dGhpcy50LGE+MXx8YT09LTE7Y2FzZSA3OnJldHVybiByPXRoaXMucyxyPj0xO2Nhc2UgODpyZXR1cm4hIXRoaXMuciYmIXRoaXMucS5lJiZ5dyh0aGlzLnEpLmk9PTA7Y2FzZSA5OnJldHVybiEhdGhpcy5xJiYhKHRoaXMuciYmIXRoaXMucS5lJiZ5dyh0aGlzLnEpLmk9PTApO2Nhc2UgMTA6cmV0dXJuISEodGhpcy5EYj4+MTY9PTEwJiZsKHRoaXMuQ2IsNjIpKX1yZXR1cm4gbmYodGhpcyx0LXlyKChUbigpLE40KSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8TjQpLHQpKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLE40fSxJKEduLCJFUGFyYW1ldGVySW1wbCIsNTE4KSxEKDEwMiw0NjIsezExMDoxLDk0OjEsOTM6MSwxNTU6MSwxOTc6MSw1ODoxLDE5OjEsMTc5OjEsNjk6MSwxMTQ6MSw0ODE6MSw1NDoxLDk5OjEsMTU4OjEsMTAyOjEsNDYyOjEsMjkyOjEsMTE5OjEsMTIwOjEsNjkyOjF9LEh5ZSksaC5MaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmLGc7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiBIbigpLCEhKHRoaXMuQmImMjU2KTtjYXNlIDM6cmV0dXJuIEhuKCksISEodGhpcy5CYiY1MTIpO2Nhc2UgNDpyZXR1cm4gcHQodGhpcy5zKTtjYXNlIDU6cmV0dXJuIHB0KHRoaXMudCk7Y2FzZSA2OnJldHVybiBIbigpLGc9dGhpcy50LGc+MXx8Zz09LTE7Y2FzZSA3OnJldHVybiBIbigpLG89dGhpcy5zLG8+PTE7Y2FzZSA4OnJldHVybiBuP09mKHRoaXMpOnRoaXMucjtjYXNlIDk6cmV0dXJuIHRoaXMucTtjYXNlIDEwOnJldHVybiBIbigpLCEhKHRoaXMuQmImbTApO2Nhc2UgMTE6cmV0dXJuIEhuKCksISEodGhpcy5CYiZyNCk7Y2FzZSAxMjpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJlh5KTtjYXNlIDEzOnJldHVybiB0aGlzLmo7Y2FzZSAxNDpyZXR1cm4gVUUodGhpcyk7Y2FzZSAxNTpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJlNsKTtjYXNlIDE2OnJldHVybiBIbigpLCEhKHRoaXMuQmImX2QpO2Nhc2UgMTc6cmV0dXJuIGt5KHRoaXMpO2Nhc2UgMTg6cmV0dXJuIEhuKCksISEodGhpcy5CYiZldSk7Y2FzZSAxOTpyZXR1cm4gSG4oKSxmPVJvKHRoaXMpLCEhKGYmJmYuQmImZXUpO2Nhc2UgMjA6cmV0dXJuIEhuKCksISEodGhpcy5CYiZJbyk7Y2FzZSAyMTpyZXR1cm4gbj9Sbyh0aGlzKTp0aGlzLmI7Y2FzZSAyMjpyZXR1cm4gbj8kN2UodGhpcyk6X3V0KHRoaXMpO2Nhc2UgMjM6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgJDUoRDQsdGhpcywyMykpLHRoaXMuYX1yZXR1cm4gc2YodGhpcyx0LXlyKChUbigpLG83KSksTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8bzcpLHQpLG4scil9LGguV2g9ZnVuY3Rpb24odCl7dmFyIG4scixhLG87c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybih0aGlzLkJiJjI1Nik9PTA7Y2FzZSAzOnJldHVybih0aGlzLkJiJjUxMik9PTA7Y2FzZSA0OnJldHVybiB0aGlzLnMhPTA7Y2FzZSA1OnJldHVybiB0aGlzLnQhPTE7Y2FzZSA2OnJldHVybiBvPXRoaXMudCxvPjF8fG89PS0xO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybih0aGlzLkJiJm0wKT09MDtjYXNlIDExOnJldHVybih0aGlzLkJiJnI0KSE9MDtjYXNlIDEyOnJldHVybih0aGlzLkJiJlh5KSE9MDtjYXNlIDEzOnJldHVybiB0aGlzLmohPW51bGw7Y2FzZSAxNDpyZXR1cm4gVUUodGhpcykhPW51bGw7Y2FzZSAxNTpyZXR1cm4odGhpcy5CYiZTbCkhPTA7Y2FzZSAxNjpyZXR1cm4odGhpcy5CYiZfZCkhPTA7Y2FzZSAxNzpyZXR1cm4hIWt5KHRoaXMpO2Nhc2UgMTg6cmV0dXJuKHRoaXMuQmImZXUpIT0wO2Nhc2UgMTk6cmV0dXJuIGE9Um8odGhpcyksISFhJiYoYS5CYiZldSkhPTA7Y2FzZSAyMDpyZXR1cm4odGhpcy5CYiZJbyk9PTA7Y2FzZSAyMTpyZXR1cm4hIXRoaXMuYjtjYXNlIDIyOnJldHVybiEhX3V0KHRoaXMpO2Nhc2UgMjM6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksbzcpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxvNyksdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHIsYTtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksQXModGhpcy5BYixsKG4sMTYpKTtyZXR1cm47Y2FzZSAxOnBvZSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAyOmMyKHRoaXMsUnQoQnQobikpKTtyZXR1cm47Y2FzZSAzOnUyKHRoaXMsUnQoQnQobikpKTtyZXR1cm47Y2FzZSA0OmkyKHRoaXMsbChuLDE3KS5hKTtyZXR1cm47Y2FzZSA1Ok15KHRoaXMsbChuLDE3KS5hKTtyZXR1cm47Y2FzZSA4OkdtKHRoaXMsbChuLDE0MikpO3JldHVybjtjYXNlIDk6YT0kMSh0aGlzLGwobiw4OSksbnVsbCksYSYmYS5vaigpO3JldHVybjtjYXNlIDEwOkFFKHRoaXMsUnQoQnQobikpKTtyZXR1cm47Y2FzZSAxMTpERSh0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMTI6TEUodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDEzOlozZSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAxNTpNRSh0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMTY6SUUodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDE4Okwybih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMjA6djhlKHRoaXMsUnQoQnQobikpKTtyZXR1cm47Y2FzZSAyMTpiN2UodGhpcyxsKG4sMTkpKTtyZXR1cm47Y2FzZSAyMzohdGhpcy5hJiYodGhpcy5hPW5ldyAkNShENCx0aGlzLDIzKSksJHIodGhpcy5hKSwhdGhpcy5hJiYodGhpcy5hPW5ldyAkNShENCx0aGlzLDIzKSksQXModGhpcy5hLGwobiwxNikpO3JldHVybn11Zih0aGlzLHQteXIoKFRuKCksbzcpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHxvNyksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSxvN30saC5raT1mdW5jdGlvbih0KXt2YXIgbixyO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RGUodGhpcy5DYiw5MCkmJnp5KFlsKGwodGhpcy5DYiw5MCkpLDQpLEZ1KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpjMih0aGlzLCEwKTtyZXR1cm47Y2FzZSAzOnUyKHRoaXMsITApO3JldHVybjtjYXNlIDQ6aTIodGhpcywwKTtyZXR1cm47Y2FzZSA1Ok15KHRoaXMsMSk7cmV0dXJuO2Nhc2UgODpHbSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6cj0kMSh0aGlzLG51bGwsbnVsbCksciYmci5vaigpO3JldHVybjtjYXNlIDEwOkFFKHRoaXMsITApO3JldHVybjtjYXNlIDExOkRFKHRoaXMsITEpO3JldHVybjtjYXNlIDEyOkxFKHRoaXMsITEpO3JldHVybjtjYXNlIDEzOnRoaXMuaT1udWxsLHhWKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTU6TUUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTY6SUUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTg6bThlKHRoaXMsITEpLERlKHRoaXMuQ2IsOTApJiZ6eShZbChsKHRoaXMuQ2IsOTApKSwyKTtyZXR1cm47Y2FzZSAyMDp2OGUodGhpcywhMCk7cmV0dXJuO2Nhc2UgMjE6YjdlKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjM6IXRoaXMuYSYmKHRoaXMuYT1uZXcgJDUoRDQsdGhpcywyMykpLCRyKHRoaXMuYSk7cmV0dXJufWNmKHRoaXMsdC15cigoVG4oKSxvNykpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fG83KSx0KSl9LGgucGk9ZnVuY3Rpb24oKXskN2UodGhpcyksV2soaWMoKEVsKCksaW8pLHRoaXMpKSxPZih0aGlzKSx0aGlzLkJifD0xfSxoLnVrPWZ1bmN0aW9uKCl7cmV0dXJuIFJvKHRoaXMpfSxoLl9rPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9Um8odGhpcyksISF0JiYodC5CYiZldSkhPTB9LGguYWw9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5CYiZldSkhPTB9LGguYmw9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5CYiZJbykhPTB9LGguWWs9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5jPW51bGwsbzhlKHRoaXMsdCxuKX0saC5JYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLkRiJjY0P0JVKHRoaXMpOih0PW5ldyBBZihCVSh0aGlzKSksdC5hKz0iIChjb250YWlubWVudDogIixHcCh0LCh0aGlzLkJiJmV1KSE9MCksdC5hKz0iLCByZXNvbHZlUHJveGllczogIixHcCh0LCh0aGlzLkJiJklvKSE9MCksdC5hKz0iKSIsdC5hKX0sSShHbiwiRVJlZmVyZW5jZUltcGwiLDEwMiksRCg1NjEsMTIwLHsxMTA6MSw0NDoxLDk0OjEsOTM6MSwxMzY6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSw1NjE6MSwxMTk6MSwxMjA6MX0sT1MpLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLmxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC5tZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gZncodGhpcyl9LGguRGk9ZnVuY3Rpb24odCl7TmRuKHRoaXMsZWkodCkpfSxoLm5kPWZ1bmN0aW9uKHQpe3JldHVybiB3ZG4odGhpcyxlaSh0KSl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMuYjtjYXNlIDE6cmV0dXJuIHRoaXMuY31yZXR1cm4gc2YodGhpcyx0LXlyKChUbigpLE5vKSksTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8Tm8pLHQpLG4scil9LGguV2g9ZnVuY3Rpb24odCl7dmFyIG47c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iIT1udWxsO2Nhc2UgMTpyZXR1cm4gdGhpcy5jIT1udWxsfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksTm8pKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxObyksdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHI7c3dpdGNoKHQpe2Nhc2UgMDpQZG4odGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgMTpkN2UodGhpcyxlaShuKSk7cmV0dXJufXVmKHRoaXMsdC15cigoVG4oKSxObykpLE1uKChyPWwoS24odGhpcywxNiksMjkpLHJ8fE5vKSx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLE5vfSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6ZjdlKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTpkN2UodGhpcyxudWxsKTtyZXR1cm59Y2YodGhpcyx0LXlyKChUbigpLE5vKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8Tm8pLHQpKX0saC5CaT1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmE9PS0xJiYodD10aGlzLmIsdGhpcy5hPXQ9PW51bGw/MDpzMih0KSksdGhpcy5hfSxoLkNpPWZ1bmN0aW9uKHQpe3RoaXMuYT10fSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuRGImNjQ/ZzAodGhpcyk6KHQ9bmV3IEFmKGcwKHRoaXMpKSx0LmErPSIgKGtleTogIixYbyh0LHRoaXMuYiksdC5hKz0iLCB2YWx1ZTogIixYbyh0LHRoaXMuYyksdC5hKz0iKSIsdC5hKX0saC5hPS0xLGguYj1udWxsLGguYz1udWxsO3ZhciBZYz1JKEduLCJFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeUltcGwiLDU2MSksUV90PWtzKHVzLCJGZWF0dXJlTWFwL0VudHJ5L0ludGVybmFsIik7RCg1NzYsMSxZRyksaC54bD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy55bChsKHQsNTQpKX0saC55bD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54bCh0KX0saC5GYj1mdW5jdGlvbih0KXt2YXIgbixyO3JldHVybiB0aGlzPT09dD8hMDpEZSh0LDc2KT8obj1sKHQsNzYpLG4uTGsoKT09dGhpcy5jPyhyPXRoaXMubWQoKSxyPT1udWxsP24ubWQoKT09bnVsbDpQaShyLG4ubWQoKSkpOiExKTohMX0saC5Maz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGguSGI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLm1kKCksZXModGhpcy5jKV4odD09bnVsbD8wOmVzKHQpKX0saC5JYj1mdW5jdGlvbigpe3ZhciB0LG47cmV0dXJuIHQ9dGhpcy5jLG49QWgodC5xaygpKS55aSgpLHQueGUoKSwobiE9bnVsbCYmbi5sZW5ndGghPTA/bisiOiIrdC54ZSgpOnQueGUoKSkrIj0iK3RoaXMubWQoKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9CYXNpY0ZlYXR1cmVNYXBFbnRyeSIsNTc2KSxEKDc5MSw1NzYsWUcsSnllKSxoLnlsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSnllKHRoaXMuYyx0KX0saC5tZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguemw9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB2M24odGhpcyx0LHRoaXMuYSxuLHIpfSxoLkFsPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdzNuKHRoaXMsdCx0aGlzLmEsbixyKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9Db250YWlubWVudFVwZGF0aW5nRmVhdHVyZU1hcEVudHJ5Iiw3OTEpLEQoMTM1MCwxLHt9LE50dCksaC55az1mdW5jdGlvbih0LG4scixhLG8pe3ZhciBmO3JldHVybiBmPWwodEUodCx0aGlzLmIpLDIyMCksZi5ZbCh0aGlzLmEpLkZrKGEpfSxoLnprPWZ1bmN0aW9uKHQsbixyLGEsbyl7dmFyIGY7cmV0dXJuIGY9bCh0RSh0LHRoaXMuYiksMjIwKSxmLlBsKHRoaXMuYSxhLG8pfSxoLkFrPWZ1bmN0aW9uKHQsbixyLGEsbyl7dmFyIGY7cmV0dXJuIGY9bCh0RSh0LHRoaXMuYiksMjIwKSxmLlFsKHRoaXMuYSxhLG8pfSxoLkJrPWZ1bmN0aW9uKHQsbixyKXt2YXIgYTtyZXR1cm4gYT1sKHRFKHQsdGhpcy5iKSwyMjApLGEuWWwodGhpcy5hKS5RaigpfSxoLkNrPWZ1bmN0aW9uKHQsbixyLGEpe3ZhciBvO289bCh0RSh0LHRoaXMuYiksMjIwKSxvLllsKHRoaXMuYSkuV2IoYSl9LGguRGs9ZnVuY3Rpb24odCxuLHIpe3JldHVybiBsKHRFKHQsdGhpcy5iKSwyMjApLllsKHRoaXMuYSl9LGguRWs9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO2E9bCh0RSh0LHRoaXMuYiksMjIwKSxhLllsKHRoaXMuYSkuR2soKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZUZlYXR1cmVNYXBEZWxlZ2F0b3IiLDEzNTApLEQoOTEsMSx7fSxYcCxPbSxKcCxSbSksaC55az1mdW5jdGlvbih0LG4scixhLG8pe3ZhciBmO2lmKGY9bi5saShyKSxmPT1udWxsJiZuLm1pKHIsZj1XVSh0aGlzLHQpKSwhbylzd2l0Y2godGhpcy5lKXtjYXNlIDUwOmNhc2UgNDE6cmV0dXJuIGwoZiw1OTcpLmJrKCk7Y2FzZSA0MDpyZXR1cm4gbChmLDIyMCkuVmwoKX1yZXR1cm4gZn0saC56az1mdW5jdGlvbih0LG4scixhLG8pe3ZhciBmLGc7cmV0dXJuIGc9bi5saShyKSxnPT1udWxsJiZuLm1pKHIsZz1XVSh0aGlzLHQpKSxmPWwoZyw3MSkuV2soYSxvKSxmfSxoLkFrPWZ1bmN0aW9uKHQsbixyLGEsbyl7dmFyIGY7cmV0dXJuIGY9bi5saShyKSxmIT1udWxsJiYobz1sKGYsNzEpLlhrKGEsbykpLG99LGguQms9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3JldHVybiBhPW4ubGkociksYSE9bnVsbCYmbChhLDc5KS5RaigpfSxoLkNrPWZ1bmN0aW9uKHQsbixyLGEpe3ZhciBvO289bChuLmxpKHIpLDc5KSwhbyYmbi5taShyLG89V1UodGhpcyx0KSksby5XYihhKX0saC5Eaz1mdW5jdGlvbih0LG4scil7dmFyIGEsbztyZXR1cm4gbz1uLmxpKHIpLG89PW51bGwmJm4ubWkocixvPVdVKHRoaXMsdCkpLERlKG8sNzkpP2wobyw3OSk6KGE9bChuLmxpKHIpLDE1KSxuZXcgeFFlKGEpKX0saC5Faz1mdW5jdGlvbih0LG4scil7dmFyIGE7YT1sKG4ubGkociksNzkpLCFhJiZuLm1pKHIsYT1XVSh0aGlzLHQpKSxhLkdrKCl9LGguYj0wLGguZT0wLEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVNYW55Iiw5MSksRCg1MTIsMSx7fSksaC56az1mdW5jdGlvbih0LG4scixhLG8pe3Rocm93IHVlKG5ldyBRcil9LGguQWs9ZnVuY3Rpb24odCxuLHIsYSxvKXt0aHJvdyB1ZShuZXcgUXIpfSxoLkRrPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbmV3IElhdCh0aGlzLHQsbixyKX07dmFyIFNnO0koR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGUiLDUxMiksRCgxMzY3LDEsaTBlLElhdCksaC5Gaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLnlrKHRoaXMuYyx0aGlzLmQsdGhpcy5iLHQsITApfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5Cayh0aGlzLmMsdGhpcy5kLHRoaXMuYil9LGguV2I9ZnVuY3Rpb24odCl7dGhpcy5hLkNrKHRoaXMuYyx0aGlzLmQsdGhpcy5iLHQpfSxoLkdrPWZ1bmN0aW9uKCl7dGhpcy5hLkVrKHRoaXMuYyx0aGlzLmQsdGhpcy5iKX0saC5iPTAsSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZS8xIiwxMzY3KSxEKDc4NCw1MTIse30sJDVlKSxoLnlrPWZ1bmN0aW9uKHQsbixyLGEsbyl7cmV0dXJuIHNsZSh0LHQuUGgoKSx0LkZoKCkpPT10aGlzLmI/dGhpcy5ibCgpJiZhP1V1ZSh0KTp0LlBoKCk6bnVsbH0saC56az1mdW5jdGlvbih0LG4scixhLG8pe3ZhciBmLGc7cmV0dXJuIHQuUGgoKSYmKG89KGY9dC5GaCgpLGY+PTA/dC5BaChvKTp0LlBoKCkuVGgodCwtMS1mLG51bGwsbykpKSxnPW1zKHQuRGgoKSx0aGlzLmUpLHQuQ2goYSxnLG8pfSxoLkFrPWZ1bmN0aW9uKHQsbixyLGEsbyl7dmFyIGY7cmV0dXJuIGY9bXModC5EaCgpLHRoaXMuZSksdC5DaChudWxsLGYsbyl9LGguQms9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3JldHVybiBhPW1zKHQuRGgoKSx0aGlzLmUpLCEhdC5QaCgpJiZ0LkZoKCk9PWF9LGguQ2s9ZnVuY3Rpb24odCxuLHIsYSl7dmFyIG8sZixnLHcsRTtpZihhIT1udWxsJiYhdWxlKHRoaXMuYSxhKSl0aHJvdyB1ZShuZXcga2soWEcrKERlKGEsNTgpP194ZShsKGEsNTgpLkRoKCkpOks2ZShiaChhKSkpK1FHK3RoaXMuYSsiJyIpKTtpZihvPXQuUGgoKSxnPW1zKHQuRGgoKSx0aGlzLmUpLHFlKGEpIT09cWUobyl8fHQuRmgoKSE9ZyYmYSE9bnVsbCl7aWYoRkUodCxsKGEsNTgpKSl0aHJvdyB1ZShuZXcgWW4oRUwrdC5JYigpKSk7RT1udWxsLG8mJihFPShmPXQuRmgoKSxmPj0wP3QuQWgoRSk6dC5QaCgpLlRoKHQsLTEtZixudWxsLEUpKSksdz1sKGEsNTQpLHcmJihFPXcuUmgodCxtcyh3LkRoKCksdGhpcy5iKSxudWxsLEUpKSxFPXQuQ2godyxnLEUpLEUmJkUub2ooKX1lbHNlIHQudmgoKSYmdC53aCgpJiZOaSh0LG5ldyBfYSh0LDEsZyxhLGEpKX0saC5Faz1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmLGc7YT10LlBoKCksYT8oZz0obz10LkZoKCksbz49MD90LkFoKG51bGwpOnQuUGgoKS5UaCh0LC0xLW8sbnVsbCxudWxsKSksZj1tcyh0LkRoKCksdGhpcy5lKSxnPXQuQ2gobnVsbCxmLGcpLGcmJmcub2ooKSk6dC52aCgpJiZ0LndoKCkmJk5pKHQsbmV3IFhfKHQsMSx0aGlzLmUsbnVsbCxudWxsKSl9LGguYmw9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUNvbnRhaW5lciIsNzg0KSxEKDEzNTEsNzg0LHt9LGtpdCksaC5ibD1mdW5jdGlvbigpe3JldHVybiEwfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlQ29udGFpbmVyUmVzb2x2aW5nIiwxMzUxKSxEKDU3NCw1MTIse30pLGgueWs9ZnVuY3Rpb24odCxuLHIsYSxvKXt2YXIgZjtyZXR1cm4gZj1uLmxpKHIpLGY9PW51bGw/dGhpcy5iOnFlKGYpPT09cWUoU2cpP251bGw6Zn0saC5Caz1mdW5jdGlvbih0LG4scil7dmFyIGE7cmV0dXJuIGE9bi5saShyKSxhIT1udWxsJiYocWUoYSk9PT1xZShTZyl8fCFQaShhLHRoaXMuYikpfSxoLkNrPWZ1bmN0aW9uKHQsbixyLGEpe3ZhciBvLGY7dC52aCgpJiZ0LndoKCk/KG89KGY9bi5saShyKSxmPT1udWxsP3RoaXMuYjpxZShmKT09PXFlKFNnKT9udWxsOmYpLGE9PW51bGw/dGhpcy5jIT1udWxsPyhuLm1pKHIsbnVsbCksYT10aGlzLmIpOnRoaXMuYiE9bnVsbD9uLm1pKHIsU2cpOm4ubWkocixudWxsKToodGhpcy5CbChhKSxuLm1pKHIsYSkpLE5pKHQsdGhpcy5kLkNsKHQsMSx0aGlzLmUsbyxhKSkpOmE9PW51bGw/dGhpcy5jIT1udWxsP24ubWkocixudWxsKTp0aGlzLmIhPW51bGw/bi5taShyLFNnKTpuLm1pKHIsbnVsbCk6KHRoaXMuQmwoYSksbi5taShyLGEpKX0saC5Faz1mdW5jdGlvbih0LG4scil7dmFyIGEsbzt0LnZoKCkmJnQud2goKT8oYT0obz1uLmxpKHIpLG89PW51bGw/dGhpcy5iOnFlKG8pPT09cWUoU2cpP251bGw6byksbi5uaShyKSxOaSh0LHRoaXMuZC5DbCh0LDEsdGhpcy5lLGEsdGhpcy5iKSkpOm4ubmkocil9LGguQmw9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IElRZSl9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhIiw1NzQpLEQoXzYsMSx7fSxOUyksaC5DbD1mdW5jdGlvbih0LG4scixhLG8pe3JldHVybiBuZXcgWF8odCxuLHIsYSxvKX0saC5EbD1mdW5jdGlvbih0LG4scixhLG8sZil7cmV0dXJuIG5ldyByb2UodCxuLHIsYSxvLGYpfTt2YXIgTVBlLERQZSxJUGUsT1BlLE5QZSxQUGUsQlBlLGlwZSxGUGU7SShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvciIsXzYpLEQoMTM2OCxfNix7fSxIMCksaC5DbD1mdW5jdGlvbih0LG4scixhLG8pe3JldHVybiBuZXcgbTZlKHQsbixyLFJ0KEJ0KGEpKSxSdChCdChvKSkpfSxoLkRsPWZ1bmN0aW9uKHQsbixyLGEsbyxmKXtyZXR1cm4gbmV3IHJjdCh0LG4scixSdChCdChhKSksUnQoQnQobykpLGYpfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzEiLDEzNjgpLEQoMTM2OSxfNix7fSxBSSksaC5DbD1mdW5jdGlvbih0LG4scixhLG8pe3JldHVybiBuZXcgUTZlKHQsbixyLGwoYSwyMjIpLmEsbChvLDIyMikuYSl9LGguRGw9ZnVuY3Rpb24odCxuLHIsYSxvLGYpe3JldHVybiBuZXcgWG90KHQsbixyLGwoYSwyMjIpLmEsbChvLDIyMikuYSxmKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci8yIiwxMzY5KSxEKDEzNzAsXzYse30sTEkpLGguQ2w9ZnVuY3Rpb24odCxuLHIsYSxvKXtyZXR1cm4gbmV3IEo2ZSh0LG4scixsKGEsMTgwKS5hLGwobywxODApLmEpfSxoLkRsPWZ1bmN0aW9uKHQsbixyLGEsbyxmKXtyZXR1cm4gbmV3IFFvdCh0LG4scixsKGEsMTgwKS5hLGwobywxODApLmEsZil9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvMyIsMTM3MCksRCgxMzcxLF82LHt9LGY4KSxoLkNsPWZ1bmN0aW9uKHQsbixyLGEsbyl7cmV0dXJuIG5ldyBwNmUodCxuLHIsemUoR2UoYSkpLHplKEdlKG8pKSl9LGguRGw9ZnVuY3Rpb24odCxuLHIsYSxvLGYpe3JldHVybiBuZXcgSm90KHQsbixyLHplKEdlKGEpKSx6ZShHZShvKSksZil9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvNCIsMTM3MSksRCgxMzcyLF82LHt9LHRyZSksaC5DbD1mdW5jdGlvbih0LG4scixhLG8pe3JldHVybiBuZXcgdDdlKHQsbixyLGwoYSwxNjEpLmEsbChvLDE2MSkuYSl9LGguRGw9ZnVuY3Rpb24odCxuLHIsYSxvLGYpe3JldHVybiBuZXcgWm90KHQsbixyLGwoYSwxNjEpLmEsbChvLDE2MSkuYSxmKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci81IiwxMzcyKSxEKDEzNzMsXzYse30sbnJlKSxoLkNsPWZ1bmN0aW9uKHQsbixyLGEsbyl7cmV0dXJuIG5ldyBiNmUodCxuLHIsbChhLDE3KS5hLGwobywxNykuYSl9LGguRGw9ZnVuY3Rpb24odCxuLHIsYSxvLGYpe3JldHVybiBuZXcgZWN0KHQsbixyLGwoYSwxNykuYSxsKG8sMTcpLmEsZil9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvNiIsMTM3MyksRCgxMzc0LF82LHt9LHJyZSksaC5DbD1mdW5jdGlvbih0LG4scixhLG8pe3JldHVybiBuZXcgWjZlKHQsbixyLGwoYSwxNjgpLmEsbChvLDE2OCkuYSl9LGguRGw9ZnVuY3Rpb24odCxuLHIsYSxvLGYpe3JldHVybiBuZXcgdGN0KHQsbixyLGwoYSwxNjgpLmEsbChvLDE2OCkuYSxmKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci83IiwxMzc0KSxEKDEzNzUsXzYse30saXJlKSxoLkNsPWZ1bmN0aW9uKHQsbixyLGEsbyl7cmV0dXJuIG5ldyBlN2UodCxuLHIsbChhLDE5MSkuYSxsKG8sMTkxKS5hKX0saC5EbD1mdW5jdGlvbih0LG4scixhLG8sZil7cmV0dXJuIG5ldyBuY3QodCxuLHIsbChhLDE5MSkuYSxsKG8sMTkxKS5hLGYpfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzgiLDEzNzUpLEQoMTM1Myw1NzQse30sT2F0KSxoLkJsPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmEuZmsodCkpdGhyb3cgdWUobmV3IGtrKFhHK2JoKHQpK1FHK3RoaXMuYSsiJyIpKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGFEeW5hbWljIiwxMzUzKSxEKDEzNTQsNTc0LHt9LHlzdCksaC5CbD1mdW5jdGlvbih0KXt9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhU3RhdGljIiwxMzU0KSxEKDc4NSw1NzQse30pLGguQms9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3JldHVybiBhPW4ubGkociksYSE9bnVsbH0saC5Daz1mdW5jdGlvbih0LG4scixhKXt2YXIgbyxmO3QudmgoKSYmdC53aCgpPyhvPSEwLGY9bi5saShyKSxmPT1udWxsPyhvPSExLGY9dGhpcy5iKTpxZShmKT09PXFlKFNnKSYmKGY9bnVsbCksYT09bnVsbD90aGlzLmMhPW51bGw/KG4ubWkocixudWxsKSxhPXRoaXMuYik6bi5taShyLFNnKToodGhpcy5CbChhKSxuLm1pKHIsYSkpLE5pKHQsdGhpcy5kLkRsKHQsMSx0aGlzLmUsZixhLCFvKSkpOmE9PW51bGw/dGhpcy5jIT1udWxsP24ubWkocixudWxsKTpuLm1pKHIsU2cpOih0aGlzLkJsKGEpLG4ubWkocixhKSl9LGguRWs9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87dC52aCgpJiZ0LndoKCk/KGE9ITAsbz1uLmxpKHIpLG89PW51bGw/KGE9ITEsbz10aGlzLmIpOnFlKG8pPT09cWUoU2cpJiYobz1udWxsKSxuLm5pKHIpLE5pKHQsdGhpcy5kLkRsKHQsMix0aGlzLmUsbyx0aGlzLmIsYSkpKTpuLm5pKHIpfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YVVuc2V0dGFibGUiLDc4NSksRCgxMzU1LDc4NSx7fSxOYXQpLGguQmw9ZnVuY3Rpb24odCl7aWYoIXRoaXMuYS5mayh0KSl0aHJvdyB1ZShuZXcga2soWEcrYmgodCkrUUcrdGhpcy5hKyInIikpfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YVVuc2V0dGFibGVEeW5hbWljIiwxMzU1KSxEKDEzNTYsNzg1LHt9LHhzdCksaC5CbD1mdW5jdGlvbih0KXt9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhVW5zZXR0YWJsZVN0YXRpYyIsMTM1NiksRCg0MTAsNTEyLHt9LGNIKSxoLnlrPWZ1bmN0aW9uKHQsbixyLGEsbyl7dmFyIGYsZyx3LEUsQztpZihDPW4ubGkociksdGhpcy50aygpJiZxZShDKT09PXFlKFNnKSlyZXR1cm4gbnVsbDtpZih0aGlzLmJsKCkmJmEmJkMhPW51bGwpe2lmKHc9bChDLDU0KSx3LlZoKCkmJihFPXliKHQsdyksdyE9RSkpe2lmKCF1bGUodGhpcy5hLEUpKXRocm93IHVlKG5ldyBrayhYRytiaChFKStRRyt0aGlzLmErIiciKSk7bi5taShyLEM9RSksdGhpcy5hbCgpJiYoZj1sKEUsNTQpLGc9dy5UaCh0LHRoaXMuYj9tcyh3LkRoKCksdGhpcy5iKTotMS1tcyh0LkRoKCksdGhpcy5lKSxudWxsLG51bGwpLCFmLlBoKCkmJihnPWYuUmgodCx0aGlzLmI/bXMoZi5EaCgpLHRoaXMuYik6LTEtbXModC5EaCgpLHRoaXMuZSksbnVsbCxnKSksZyYmZy5vaigpKSx0LnZoKCkmJnQud2goKSYmTmkodCxuZXcgWF8odCw5LHRoaXMuZSx3LEUpKX1yZXR1cm4gQ31lbHNlIHJldHVybiBDfSxoLnprPWZ1bmN0aW9uKHQsbixyLGEsbyl7dmFyIGYsZztyZXR1cm4gZz1uLmxpKHIpLHFlKGcpPT09cWUoU2cpJiYoZz1udWxsKSxuLm1pKHIsYSksdGhpcy5NaigpP3FlKGcpIT09cWUoYSkmJmchPW51bGwmJihmPWwoZyw1NCksbz1mLlRoKHQsbXMoZi5EaCgpLHRoaXMuYiksbnVsbCxvKSk6dGhpcy5hbCgpJiZnIT1udWxsJiYobz1sKGcsNTQpLlRoKHQsLTEtbXModC5EaCgpLHRoaXMuZSksbnVsbCxvKSksdC52aCgpJiZ0LndoKCkmJighbyYmKG89bmV3IG5iKDQpKSxvLm5qKG5ldyBYXyh0LDEsdGhpcy5lLGcsYSkpKSxvfSxoLkFrPWZ1bmN0aW9uKHQsbixyLGEsbyl7dmFyIGY7cmV0dXJuIGY9bi5saShyKSxxZShmKT09PXFlKFNnKSYmKGY9bnVsbCksbi5uaShyKSx0LnZoKCkmJnQud2goKSYmKCFvJiYobz1uZXcgbmIoNCkpLHRoaXMudGsoKT9vLm5qKG5ldyBYXyh0LDIsdGhpcy5lLGYsbnVsbCkpOm8ubmoobmV3IFhfKHQsMSx0aGlzLmUsZixudWxsKSkpLG99LGguQms9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3JldHVybiBhPW4ubGkociksYSE9bnVsbH0saC5Daz1mdW5jdGlvbih0LG4scixhKXt2YXIgbyxmLGcsdyxFO2lmKGEhPW51bGwmJiF1bGUodGhpcy5hLGEpKXRocm93IHVlKG5ldyBrayhYRysoRGUoYSw1OCk/X3hlKGwoYSw1OCkuRGgoKSk6SzZlKGJoKGEpKSkrUUcrdGhpcy5hKyInIikpO0U9bi5saShyKSx3PUUhPW51bGwsdGhpcy50aygpJiZxZShFKT09PXFlKFNnKSYmKEU9bnVsbCksZz1udWxsLHRoaXMuTWooKT9xZShFKSE9PXFlKGEpJiYoRSE9bnVsbCYmKG89bChFLDU0KSxnPW8uVGgodCxtcyhvLkRoKCksdGhpcy5iKSxudWxsLGcpKSxhIT1udWxsJiYobz1sKGEsNTQpLGc9by5SaCh0LG1zKG8uRGgoKSx0aGlzLmIpLG51bGwsZykpKTp0aGlzLmFsKCkmJnFlKEUpIT09cWUoYSkmJihFIT1udWxsJiYoZz1sKEUsNTQpLlRoKHQsLTEtbXModC5EaCgpLHRoaXMuZSksbnVsbCxnKSksYSE9bnVsbCYmKGc9bChhLDU0KS5SaCh0LC0xLW1zKHQuRGgoKSx0aGlzLmUpLG51bGwsZykpKSxhPT1udWxsJiZ0aGlzLnRrKCk/bi5taShyLFNnKTpuLm1pKHIsYSksdC52aCgpJiZ0LndoKCk/KGY9bmV3IHJvZSh0LDEsdGhpcy5lLEUsYSx0aGlzLnRrKCkmJiF3KSxnPyhnLm5qKGYpLGcub2ooKSk6TmkodCxmKSk6ZyYmZy5vaigpfSxoLkVrPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvLGYsZyx3O3c9bi5saShyKSxnPXchPW51bGwsdGhpcy50aygpJiZxZSh3KT09PXFlKFNnKSYmKHc9bnVsbCksZj1udWxsLHchPW51bGwmJih0aGlzLk1qKCk/KGE9bCh3LDU0KSxmPWEuVGgodCxtcyhhLkRoKCksdGhpcy5iKSxudWxsLGYpKTp0aGlzLmFsKCkmJihmPWwodyw1NCkuVGgodCwtMS1tcyh0LkRoKCksdGhpcy5lKSxudWxsLGYpKSksbi5uaShyKSx0LnZoKCkmJnQud2goKT8obz1uZXcgcm9lKHQsdGhpcy50aygpPzI6MSx0aGlzLmUsdyxudWxsLGcpLGY/KGYubmoobyksZi5vaigpKTpOaSh0LG8pKTpmJiZmLm9qKCl9LGguTWo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5hbD1mdW5jdGlvbigpe3JldHVybiExfSxoLmJsPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGgudGs9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3QiLDQxMCksRCg1NzUsNDEwLHt9LG9hZSksaC5hbD1mdW5jdGlvbigpe3JldHVybiEwfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50Iiw1NzUpLEQoMTM1OSw1NzUse30sd3J0KSxoLmJsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRSZXNvbHZpbmciLDEzNTkpLEQoNzg3LDU3NSx7fSxqeWUpLGgudGs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudFVuc2V0dGFibGUiLDc4NyksRCgxMzYxLDc4Nyx7fSx5cnQpLGguYmw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudFVuc2V0dGFibGVSZXNvbHZpbmciLDEzNjEpLEQoNjUwLDU3NSx7fSx5YWUpLGguTWo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlIiw2NTApLEQoMTM2MCw2NTAse30sRWl0KSxoLmJsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZVJlc29sdmluZyIsMTM2MCksRCg3ODgsNjUwLHt9LEM0ZSksaC50az1mdW5jdGlvbigpe3JldHVybiEwfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VVbnNldHRhYmxlIiw3ODgpLEQoMTM2Miw3ODgse30sVGl0KSxoLmJsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZVVuc2V0dGFibGVSZXNvbHZpbmciLDEzNjIpLEQoNjUxLDQxMCx7fSwkeWUpLGguYmw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RSZXNvbHZpbmciLDY1MSksRCgxMzYzLDY1MSx7fSx4cnQpLGgudGs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RSZXNvbHZpbmdVbnNldHRhYmxlIiwxMzYzKSxEKDc4OSw2NTEse30sRTRlKSxoLk1qPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0UmVzb2x2aW5nV2l0aEludmVyc2UiLDc4OSksRCgxMzY0LDc4OSx7fSxDaXQpLGgudGs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RSZXNvbHZpbmdXaXRoSW52ZXJzZVVuc2V0dGFibGUiLDEzNjQpLEQoMTM1Nyw0MTAse30sa3J0KSxoLnRrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0VW5zZXR0YWJsZSIsMTM1NyksRCg3ODYsNDEwLHt9LFQ0ZSksaC5Naj1mdW5jdGlvbigpe3JldHVybiEwfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdFdpdGhJbnZlcnNlIiw3ODYpLEQoMTM1OCw3ODYse30sU2l0KSxoLnRrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0V2l0aEludmVyc2VVbnNldHRhYmxlIiwxMzU4KSxEKDc5MCw1NzYsWUcseDVlKSxoLnlsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgeDVlKHRoaXMuYSx0aGlzLmMsdCl9LGgubWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLnpsPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gYnZuKHRoaXMsdCx0aGlzLmIscil9LGguQWw9ZnVuY3Rpb24odCxuLHIpe3JldHVybiBtdm4odGhpcyx0LHRoaXMuYixyKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnZlcnNlVXBkYXRpbmdGZWF0dXJlTWFwRW50cnkiLDc5MCksRCgxMzY1LDEsaTBlLHhRZSksaC5Gaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIERlKHRoaXMuYSw5Nyk/bCh0aGlzLmEsOTcpLlFqKCk6IXRoaXMuYS5kYygpfSxoLldiPWZ1bmN0aW9uKHQpe3RoaXMuYS4kYigpLHRoaXMuYS5HYyhsKHQsMTUpKX0saC5Haz1mdW5jdGlvbigpe0RlKHRoaXMuYSw5Nyk/bCh0aGlzLmEsOTcpLkdrKCk6dGhpcy5hLiRiKCl9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvU2V0dGluZ01hbnkiLDEzNjUpLEQoMTM2Niw1NzYsWUcsV2N0KSxoLnhsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbGFlKChHaSgpLFVNKSx0aGlzLmIucmkodGhpcy5hLHQpKX0saC5tZD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLnpsPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gcn0saC5BbD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHJ9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvU2ltcGxlQ29udGVudEZlYXR1cmVNYXBFbnRyeSIsMTM2NiksRCg2NTIsNTc2LFlHLGxhZSksaC54bD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGxhZSh0aGlzLmMsdCl9LGgubWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLnpsPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gcn0saC5BbD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHJ9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvU2ltcGxlRmVhdHVyZU1hcEVudHJ5Iiw2NTIpLEQoNDAzLDUwNixCZCxYZCksaC5haj1mdW5jdGlvbih0KXtyZXR1cm4gV2UoVmYsUm4sMjksdCwwLDEpfSxoLllpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoR24sIkVTdXBlckFkYXB0ZXIvMSIsNDAzKSxEKDQ1Nyw0NDgsezExMDoxLDk0OjEsOTM6MSwxNTU6MSwxOTc6MSw1ODoxLDExNDoxLDg1MDoxLDU0OjEsOTk6MSwxNTg6MSw0NTc6MSwxMTk6MSwxMjA6MX0sUFMpLGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBHXyh0aGlzLFdvLHRoaXMpKSx0aGlzLmF9cmV0dXJuIHNmKHRoaXMsdC15cigoVG4oKSxUMykpLE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fFQzKSx0KSxuLHIpfSxoLlVoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFRvKHRoaXMuQWIsdCxyKTtjYXNlIDI6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgR18odGhpcyxXbyx0aGlzKSksVG8odGhpcy5hLHQscil9cmV0dXJuIG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHwoVG4oKSxUMykpLG4pLDY5KSxvLndrKCkuQWsodGhpcyxLdSh0aGlzKSxuLXlyKChUbigpLFQzKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksVDMpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxUMyksdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHI7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLEFzKHRoaXMuQWIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTpGdSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmEmJih0aGlzLmE9bmV3IEdfKHRoaXMsV28sdGhpcykpLCRyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgR18odGhpcyxXbyx0aGlzKSksQXModGhpcy5hLGwobiwxNikpO3JldHVybn11Zih0aGlzLHQteXIoKFRuKCksVDMpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHxUMyksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSxUM30saC5raT1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOkZ1KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjohdGhpcy5hJiYodGhpcy5hPW5ldyBHXyh0aGlzLFdvLHRoaXMpKSwkcih0aGlzLmEpO3JldHVybn1jZih0aGlzLHQteXIoKFRuKCksVDMpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxUMyksdCkpfSxJKEduLCJFVHlwZVBhcmFtZXRlckltcGwiLDQ1NyksRCg0NTgsODMsa2MsR18pLGguTmo9ZnVuY3Rpb24odCxuKXtyZXR1cm4gRHhuKHRoaXMsbCh0LDg5KSxuKX0saC5Paj1mdW5jdGlvbih0LG4pe3JldHVybiBJeG4odGhpcyxsKHQsODkpLG4pfSxJKEduLCJFVHlwZVBhcmFtZXRlckltcGwvMSIsNDU4KSxEKDY0Nyw0NSxtNixWaWUpLGguZWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFB6KHRoaXMpfSxJKEduLCJFVHlwZVBhcmFtZXRlckltcGwvMiIsNjQ3KSxEKDU3MCxxMSxUbCxQeiksaC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gV3J0KHRoaXMsbCh0LDg5KSl9LGguR2M9ZnVuY3Rpb24odCl7dmFyIG4scixhO2ZvcihhPSExLHI9dC5LYygpO3IuT2IoKTspbj1sKHIuUGIoKSw4OSksa2kodGhpcy5hLG4sIiIpPT1udWxsJiYoYT0hMCk7cmV0dXJuIGF9LGguJGI9ZnVuY3Rpb24oKXtObCh0aGlzLmEpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBIdSh0aGlzLmEsdCl9LGguS2M9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgcW0obmV3IFNyKHRoaXMuYSkuYSksbmV3IEJ6KHQpfSxoLk1jPWZ1bmN0aW9uKHQpe3JldHVybiBSdXQodGhpcyx0KX0saC5nYz1mdW5jdGlvbigpe3JldHVybiBkXyh0aGlzLmEpfSxJKEduLCJFVHlwZVBhcmFtZXRlckltcGwvMi8xIiw1NzApLEQoNTcxLDEsT2EsQnopLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5QYj1mdW5jdGlvbigpe3JldHVybiBsKE53KHRoaXMuYSkubGQoKSw4OSl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmJ9LGguUWI9ZnVuY3Rpb24oKXtLbHQodGhpcy5hKX0sSShHbiwiRVR5cGVQYXJhbWV0ZXJJbXBsLzIvMS8xIiw1NzEpLEQoMTMyOSw0NSxtNixoSmUpLGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpP3NvZSh0aGlzLHQpOiEhem8odGhpcy5mLHQpfSxoLnhjPWZ1bmN0aW9uKHQpe3ZhciBuLHI7cmV0dXJuIG49SWEodCk/eHUodGhpcyx0KTpoYyh6byh0aGlzLmYsdCkpLERlKG4sODUxKT8ocj1sKG4sODUxKSxuPXIuS2soKSxraSh0aGlzLGwodCwyNDEpLG4pLG4pOm4/Pyh0PT1udWxsPyh1c2UoKSxaX3QpOm51bGwpfSxJKEduLCJFVmFsaWRhdG9yUmVnaXN0cnlJbXBsIiwxMzI5KSxEKDEzNDksNzIwLHsxMTA6MSw5NDoxLDkzOjEsNDgwOjEsMTU1OjEsNTg6MSwxMTQ6MSwyMDQwOjEsNTQ6MSw5OToxLDE1ODoxLDExOToxLDEyMDoxfSxkOCksaC5yaT1mdW5jdGlvbih0LG4pe3N3aXRjaCh0LmhrKCkpe2Nhc2UgMjE6Y2FzZSAyMjpjYXNlIDIzOmNhc2UgMjQ6Y2FzZSAyNjpjYXNlIDMxOmNhc2UgMzI6Y2FzZSAzNzpjYXNlIDM4OmNhc2UgMzk6Y2FzZSA0MDpjYXNlIDQzOmNhc2UgNDQ6Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgMjA6cmV0dXJuIG49PW51bGw/bnVsbDp4YyhuKTtjYXNlIDI1OnJldHVybiBBd24obik7Y2FzZSAyNzpyZXR1cm4gcXZuKG4pO2Nhc2UgMjg6cmV0dXJuIEh2bihuKTtjYXNlIDI5OnJldHVybiBuPT1udWxsP251bGw6Q250KGpNWzBdLGwobiwyMDYpKTtjYXNlIDQxOnJldHVybiBuPT1udWxsPyIiOl9tKGwobiwyOTcpKTtjYXNlIDQyOnJldHVybiB4YyhuKTtjYXNlIDUwOnJldHVybiBlaShuKTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbih5VCt0LnhlKCkrdDMpKX19LGguc2k9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZTtzd2l0Y2godC5HPT0tMSYmKHQuRz0oej1BaCh0KSx6P2YyKHoudmkoKSx0KTotMSkpLHQuRyl7Y2FzZSAwOnJldHVybiByPW5ldyB6aWUscjtjYXNlIDE6cmV0dXJuIG49bmV3IENJLG47Y2FzZSAyOnJldHVybiBhPW5ldyBoeixhO2Nhc2UgNDpyZXR1cm4gbz1uZXcgRnosbztjYXNlIDU6cmV0dXJuIGY9bmV3IGxKZSxmO2Nhc2UgNjpyZXR1cm4gZz1uZXcgUFFlLGc7Y2FzZSA3OnJldHVybiB3PW5ldyBmeix3O2Nhc2UgMTA6cmV0dXJuIEM9bmV3IG01LEM7Y2FzZSAxMTpyZXR1cm4gTD1uZXcgcWllLEw7Y2FzZSAxMjpyZXR1cm4gQj1uZXcgcWF0LEI7Y2FzZSAxMzpyZXR1cm4gVj1uZXcgSGllLFY7Y2FzZSAxNDpyZXR1cm4gSj1uZXcgSHllLEo7Y2FzZSAxNzpyZXR1cm4gdGU9bmV3IE9TLHRlO2Nhc2UgMTg6cmV0dXJuIEU9bmV3IFF2LEU7Y2FzZSAxOTpyZXR1cm4gZmU9bmV3IFBTLGZlO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKHFmZSt0LnpiK3QzKSl9fSxoLnRpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQuaGsoKSl7Y2FzZSAyMDpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBoM2Uobik7Y2FzZSAyMTpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBvYihuKTtjYXNlIDIzOmNhc2UgMjI6cmV0dXJuIG49PW51bGw/bnVsbDp6NW4obik7Y2FzZSAyNjpjYXNlIDI0OnJldHVybiBuPT1udWxsP251bGw6Zk4oT2gobiwtMTI4LDEyNyk8PDI0Pj4yNCk7Y2FzZSAyNTpyZXR1cm4gYVRuKG4pO2Nhc2UgMjc6cmV0dXJuIEE3bihuKTtjYXNlIDI4OnJldHVybiBMN24obik7Y2FzZSAyOTpyZXR1cm4gSnhuKG4pO2Nhc2UgMzI6Y2FzZSAzMTpyZXR1cm4gbj09bnVsbD9udWxsOmp5KG4pO2Nhc2UgMzg6Y2FzZSAzNzpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBBd2Uobik7Y2FzZSA0MDpjYXNlIDM5OnJldHVybiBuPT1udWxsP251bGw6cHQoT2gobixsbyxJaSkpO2Nhc2UgNDE6cmV0dXJuIG51bGw7Y2FzZSA0MjpyZXR1cm4gbj09bnVsbCxudWxsO2Nhc2UgNDQ6Y2FzZSA0MzpyZXR1cm4gbj09bnVsbD9udWxsOmFwKEtVKG4pKTtjYXNlIDQ5OmNhc2UgNDg6cmV0dXJuIG49PW51bGw/bnVsbDpfRShPaChuLEpHLDMyNzY3KTw8MTY+PjE2KTtjYXNlIDUwOnJldHVybiBuO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKHlUK3QueGUoKSt0MykpfX0sSShHbiwiRWNvcmVGYWN0b3J5SW1wbCIsMTM0OSksRCg1NjAsMTg0LHsxMTA6MSw5NDoxLDkzOjEsMTU1OjEsMTk3OjEsNTg6MSwyNDE6MSwxMTQ6MSwyMDM4OjEsNTQ6MSw5OToxLDE1ODoxLDE4NDoxLDU2MDoxLDExOToxLDEyMDoxLDY5MDoxfSxmYXQpLGguZ2I9ITEsaC5oYj0hMTt2YXIgUlBlLEpfdD0hMTtJKEduLCJFY29yZVBhY2thZ2VJbXBsIiw1NjApLEQoMTIzNCwxLHs4NTE6MX0sazEpLGguS2s9ZnVuY3Rpb24oKXtyZXR1cm4gUm50KCksZUF0fSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzEiLDEyMzQpLEQoMTI0MywxLHlpLEEkKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE1NSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHVGLFJuLDE1NSx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMTAiLDEyNDMpLEQoMTI0NCwxLHlpLEwkKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE5Nyl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKFlnZSxSbiwxOTcsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzExIiwxMjQ0KSxEKDEyNDUsMSx5aSxNJCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw1OCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKFhiLFJuLDU4LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8xMiIsMTI0NSksRCgxMjQ2LDEseWksRCQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNDExKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoVWYsTFNlLDYyLHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8xMyIsMTI0NiksRCgxMjQ3LDEseWksSSQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMjQxKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UodTEsUm4sMjQxLHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8xNCIsMTI0NyksRCgxMjQ4LDEseWksTyQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNTE4KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoazMsUm4sMjExNix0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMTUiLDEyNDgpLEQoMTI0OSwxLHlpLFYwKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDEwMil9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKEk0LFM2LDE5LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8xNiIsMTI0OSksRCgxMjUwLDEseWksbmwpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTc5KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoZGwsUzYsMTc5LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8xNyIsMTI1MCksRCgxMjUxLDEseWksc3JlKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDQ4MSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKE00LFJuLDQ4MSx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMTgiLDEyNTEpLEQoMTI1MiwxLHlpLGFyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw1NjEpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShZYyxlNXQsNTYxLHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8xOSIsMTI1MiksRCgxMjM1LDEseWksb3JlKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDMzMSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKEQ0LFM2LDM1LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8yIiwxMjM1KSxEKDEyNTMsMSx5aSxybCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwyNDgpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShXbyxtNXQsODksdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzIwIiwxMjUzKSxEKDEyNTQsMSx5aSxCUyksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw0NTcpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShadSxSbiw4NTAsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzIxIiwxMjU0KSxEKDEyNTUsMSx5aSxOJCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gaHkodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKE5zLGR0LDQ4NSx0LDgsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMjIiLDEyNTUpLEQoMTI1NiwxLHlpLFAkKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE5NSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKEFsLGR0LDE5NSx0LDAsMil9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMjMiLDEyNTYpLEQoMTI1NywxLHlpLGc4KSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDIyMil9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKGp4LGR0LDIyMix0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMjQiLDEyNTcpLEQoMTI1OCwxLHlpLGNyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxODApfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShQTCxkdCwxODAsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzI1IiwxMjU4KSxEKDEyNTksMSx5aSxhayksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwyMDYpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShjSyxkdCwyMDYsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzI2IiwxMjU5KSxEKDEyNjAsMSx5aSx1cmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuITF9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKG5CZSxSbiwyMjE1LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8yNyIsMTI2MCksRCgxMjYxLDEseWksQiQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIGZ5KHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh0YSxkdCwzNDUsdCw3LDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzI4IiwxMjYxKSxEKDEyNjIsMSx5aSxscmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNjEpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShtUGUsUXksNjEsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzI5IiwxMjYyKSxEKDEyMzYsMSx5aSxocmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNTE5KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UobWksezM6MSw0OjEsNToxLDIwMzM6MX0sNTk4LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8zIiwxMjM2KSxEKDEyNjMsMSx5aSxGUyksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw1ODIpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh5UGUsUm4sMjAzOSx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMzAiLDEyNjMpLEQoMTI2NCwxLHlpLEYkKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE2MCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKEhQZSxReSwxNjAsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzMxIiwxMjY0KSxEKDEyNjUsMSx5aSxNSSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw3Nil9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKENZLFM1dCw3Nix0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMzIiLDEyNjUpLEQoMTI2NiwxLHlpLFJTKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE2MSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKF9ULGR0LDE2MSx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMzMiLDEyNjYpLEQoMTI2NywxLHlpLGZyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNyl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHJvLGR0LDE3LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8zNCIsMTI2NyksRCgxMjY4LDEseWksZHJlKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDI5Nyl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHFTZSxSbiwyOTcsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzM1IiwxMjY4KSxEKDEyNjksMSx5aSxESSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNjgpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShyMyxkdCwxNjgsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzM2IiwxMjY5KSxEKDEyNzAsMSx5aSxqUyksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw4NSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKEhTZSxSbiw4NSx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMzciLDEyNzApLEQoMTI3MSwxLHlpLEUxKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDU5OSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKGpQZSxSbiw1OTksdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzM4IiwxMjcxKSxEKDEyNzIsMSx5aSxvayksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4hMX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UockJlLFJuLDIyMTYsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzM5IiwxMjcyKSxEKDEyMzcsMSx5aSxncmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsOTApfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShWZixSbiwyOSx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvNCIsMTIzNyksRCgxMjczLDEseWksY2spLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTkxKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoaTMsZHQsMTkxLHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC80MCIsMTI3MyksRCgxMjc0LDEseWksSUkpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC80MSIsMTI3NCksRCgxMjc1LDEseWkseG0pLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNTk2KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2Uod1BlLFJuLDU5Nix0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvNDIiLDEyNzUpLEQoMTI3NiwxLHlpLCRTKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiExfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShpQmUsZHQsMjIxNyx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvNDMiLDEyNzYpLEQoMTI3NywxLHlpLE9JKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDQ0KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UodXYsWFUsNDQsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzQ0IiwxMjc3KSxEKDEyMzgsMSx5aSxVMCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNDIpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShsMSxSbiwxNDIsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzUiLDEyMzgpLEQoMTIzOSwxLHlpLHpTKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE1Nil9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHRwZSxSbiwxNTYsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzYiLDEyMzkpLEQoMTI0MCwxLHlpLFQxKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDQ2OSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKFRZLFJuLDY4NSx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvNyIsMTI0MCksRCgxMjQxLDEseWksQzEpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNTgyKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2Uod3AsUm4sNjk0LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC84IiwxMjQxKSxEKDEyNDIsMSx5aSxwcmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNDgwKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoUk0sUm4sNDgwLHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC85IiwxMjQyKSxEKDEwMzgsMjA4MCxaNHQsSUplKSxoLk1pPWZ1bmN0aW9uKHQsbil7YjRuKHRoaXMsbChuLDQyNCkpfSxoLlFpPWZ1bmN0aW9uKHQsbil7QXB0KHRoaXMsdCxsKG4sNDI0KSl9LEkoR24sIk1pbmltYWxFT2JqZWN0SW1wbC8xQXJyYXlEZWxlZ2F0aW5nQWRhcHRlckxpc3QiLDEwMzgpLEQoMTAzOSwxNTIsWVAsbmF0KSxoLmpqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5hfSxJKEduLCJNaW5pbWFsRU9iamVjdEltcGwvMUFycmF5RGVsZWdhdGluZ0FkYXB0ZXJMaXN0LzEiLDEwMzkpLEQoMTA2NywxMDY2LHt9LGJudCksSSgib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbiIsIkVjb3JlUGx1Z2luIiwxMDY3KTt2YXIgalBlPWtzKF81dCwiUmVzb3VyY2UiKTtEKDc5OSwxNTI0LEE1dCksaC5IbD1mdW5jdGlvbih0KXt9LGguSWw9ZnVuY3Rpb24odCl7fSxoLkVsPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgUGllKHRoaXMpKSx0aGlzLmF9LGguRmw9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZjtpZihhPXQubGVuZ3RoLGE+MClpZihYbigwLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoMCk9PTQ3KXtmb3IoZj1uZXcgQnUoNCksbz0xLG49MTtuPGE7KytuKVhuKG4sdC5sZW5ndGgpLHQuY2hhckNvZGVBdChuKT09NDcmJih2dChmLG89PW4/IiI6KEdhKG8sbix0Lmxlbmd0aCksdC5zdWJzdHIobyxuLW8pKSksbz1uKzEpO3JldHVybiB2dChmLChYbihvLHQubGVuZ3RoKzEpLHQuc3Vic3RyKG8pKSksdzhuKHRoaXMsZil9ZWxzZSBYbihhLTEsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChhLTEpPT02MyYmKHI9aDRlKHQsY2woNjMpLGEtMikscj4wJiYodD0oR2EoMCxyLHQubGVuZ3RoKSx0LnN1YnN0cigwLHIpKSkpO3JldHVybiBVa24odGhpcyx0KX0saC5HbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gX20odGhpcy5SbSkrIkAiKyh0PWVzKHRoaXMpPj4+MCx0LnRvU3RyaW5nKDE2KSkrIiB1cmk9JyIrdGhpcy5kKyInIn0saC5iPSExLEkoczBlLCJSZXNvdXJjZUltcGwiLDc5OSksRCgxNTI1LDc5OSxBNXQsa1FlKSxJKHMwZSwiQmluYXJ5UmVzb3VyY2VJbXBsIiwxNTI1KSxEKDExOTAsNzA4LFpmZSksaC5iaj1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw1OCk/QnBuKHRoaXMsbCh0LDU4KSk6RGUodCw1OTkpP25ldyBvcihsKHQsNTk5KS5FbCgpKTpxZSh0KT09PXFlKHRoaXMuZik/bCh0LDE2KS5LYygpOihGaygpLGZGLmEpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHg5ZSh0aGlzKX0saC5hPSExLEkodXMsIkVjb3JlVXRpbC9Db250ZW50VHJlZUl0ZXJhdG9yIiwxMTkwKSxEKDE1MjYsMTE5MCxaZmUsSXN0KSxoLmJqPWZ1bmN0aW9uKHQpe3JldHVybiBxZSh0KT09PXFlKHRoaXMuZik/bCh0LDE1KS5LYygpOm5ldyBMY3QobCh0LDU4KSl9LEkoczBlLCJSZXNvdXJjZUltcGwvNSIsMTUyNiksRCg2NTgsMjA5MixiNXQsUGllKSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmk8PTQ/akUodGhpcyx0KTpEZSh0LDU0KSYmbCh0LDU0KS5KaCgpPT10aGlzLmF9LGguTWk9ZnVuY3Rpb24odCxuKXt0PT10aGlzLmktMSYmKHRoaXMuYS5ifHwodGhpcy5hLmI9ITApKX0saC5PaT1mdW5jdGlvbih0LG4pe3Q9PTA/dGhpcy5hLmJ8fCh0aGlzLmEuYj0hMCk6Tm9lKHRoaXMsdCxuKX0saC5RaT1mdW5jdGlvbih0LG4pe30saC5SaT1mdW5jdGlvbih0LG4scil7fSxoLkxqPWZ1bmN0aW9uKCl7cmV0dXJuIDJ9LGguamo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLk1qPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguTmo9ZnVuY3Rpb24odCxuKXt2YXIgcjtyZXR1cm4gcj1sKHQsNTQpLG49ci5maSh0aGlzLmEsbiksbn0saC5Paj1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiByPWwodCw1NCksci5maShudWxsLG4pfSxoLlBqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguU2k9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5haj1mdW5jdGlvbih0KXtyZXR1cm4gV2UoWGIsUm4sNTgsdCwwLDEpfSxoLllpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoczBlLCJSZXNvdXJjZUltcGwvQ29udGVudHNFTGlzdCIsNjU4KSxEKDk3MCwyMDYyLGlULEVRZSksaC5mZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLktpKHQpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxJKHVzLCJBYnN0cmFjdFNlcXVlbnRpYWxJbnRlcm5hbEVMaXN0LzEiLDk3MCk7dmFyICRQZSx6UGUsaW8scVBlO0QoNjM0LDEse30sTml0KTt2YXIgU1ksX1k7SSh1cywiQmFzaWNFeHRlbmRlZE1ldGFEYXRhIiw2MzQpLEQoMTE4MSwxLHt9LEJ0dCksaC5KbD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLktsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT09LTImJlllKHRoaXMsVXhuKHRoaXMuZCx0aGlzLmIpKSx0aGlzLmF9LGguTGw9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC5NbD1mdW5jdGlvbigpe3JldHVybiBDbigpLENuKCksX299LGgueGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jPT1FVCYmbXQodGhpcyxKMXQodGhpcy5kLHRoaXMuYikpLHRoaXMuY30saC5ObD1mdW5jdGlvbigpe3JldHVybiAwfSxoLmE9LTIsaC5jPUVULEkodXMsIkJhc2ljRXh0ZW5kZWRNZXRhRGF0YS9FQ2xhc3NFeHRlbmRlZE1ldGFEYXRhSW1wbCIsMTE4MSksRCgxMTgyLDEse30sc2N0KSxoLkpsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT09KGVFKCksU1kpJiZNdCh0aGlzLFZTbih0aGlzLmYsdGhpcy5iKSksdGhpcy5hfSxoLktsPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGguTGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jPT0oZUUoKSxTWSkmJkplKHRoaXMsVVNuKHRoaXMuZix0aGlzLmIpKSx0aGlzLmN9LGguTWw9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5kJiZXdCh0aGlzLExBbih0aGlzLmYsdGhpcy5iKSksdGhpcy5kfSxoLnhlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZT09RVQmJl9uKHRoaXMsSjF0KHRoaXMuZix0aGlzLmIpKSx0aGlzLmV9LGguTmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nPT0tMiYmWXQodGhpcyxseG4odGhpcy5mLHRoaXMuYikpLHRoaXMuZ30saC5lPUVULGguZz0tMixJKHVzLCJCYXNpY0V4dGVuZGVkTWV0YURhdGEvRURhdGFUeXBlRXh0ZW5kZWRNZXRhRGF0YUltcGwiLDExODIpLEQoMTE4MCwxLHt9LEZ0dCksaC5iPSExLGguYz0hMSxJKHVzLCJCYXNpY0V4dGVuZGVkTWV0YURhdGEvRVBhY2thZ2VFeHRlbmRlZE1ldGFEYXRhSW1wbCIsMTE4MCksRCgxMTgzLDEse30sYWN0KSxoLmM9LTIsaC5lPUVULGguZj1FVCxJKHVzLCJCYXNpY0V4dGVuZGVkTWV0YURhdGEvRVN0cnVjdHVyYWxGZWF0dXJlRXh0ZW5kZWRNZXRhRGF0YUltcGwiLDExODMpLEQoNTkzLDYzMixrYyxKcSksaC5Maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGgub2w9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5XaT1mdW5jdGlvbih0LG4pe3JldHVybiBufSxoLmM9MCxJKHVzLCJFRGF0YVR5cGVFTGlzdCIsNTkzKTt2YXIgSFBlPWtzKHVzLCJGZWF0dXJlTWFwIik7RCg3OCw1OTMsezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDU5OjEsNzA6MSw2NjoxLDYxOjEsNzk6MSwxNjA6MSwyMjA6MSwyMDM2OjEsNzE6MSw5NzoxfSxMcyksaC5iZD1mdW5jdGlvbih0LG4pe3VDbih0aGlzLHQsbChuLDc2KSl9LGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIF9Ubih0aGlzLGwodCw3NikpfSxoLkhpPWZ1bmN0aW9uKHQpe09nbih0aGlzLGwodCw3NikpfSxoLk5qPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUwbih0aGlzLGwodCw3Niksbil9LGguT2o9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZDRlKHRoaXMsbCh0LDc2KSxuKX0saC5UaT1mdW5jdGlvbih0LG4pe3JldHVybiBQX24odGhpcyx0LG4pfSxoLldpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHhNbih0aGlzLHQsbChuLDc2KSl9LGguaGQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWENuKHRoaXMsdCxsKG4sNzYpKX0saC5Vaj1mdW5jdGlvbih0LG4pe3JldHVybiB0MG4odGhpcyxsKHQsNzYpLG4pfSxoLlZqPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHVpdCh0aGlzLGwodCw3Niksbil9LGguV2o9ZnVuY3Rpb24odCxuLHIpe3JldHVybiBROG4odGhpcyxsKHQsNzYpLGwobiw3Nikscil9LGguWmk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQXVlKHRoaXMsdCxsKG4sNzYpKX0saC5PbD1mdW5jdGlvbih0LG4pe3JldHVybiBma2UodGhpcyx0LG4pfSxoLmNkPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMO2ZvcihDPW5ldyBMdyhuLmdjKCkpLG89bi5LYygpO28uT2IoKTspaWYoYT1sKG8uUGIoKSw3NiksZj1hLkxrKCksdXAodGhpcy5lLGYpKSghZi5TaSgpfHwhcUgodGhpcyxmLGEubWQoKSkmJiFqRShDLGEpKSYmcXIoQyxhKTtlbHNle2ZvcihMPVd1KHRoaXMuZS5EaCgpLGYpLHI9bCh0aGlzLmcsMTI0KSxnPSEwLHc9MDt3PHRoaXMuaTsrK3cpaWYoRT1yW3ddLEwuYW0oRS5MaygpKSl7bChuNih0aGlzLHcsYSksNzYpLGc9ITE7YnJlYWt9ZyYmcXIoQyxhKX1yZXR1cm4gTjdlKHRoaXMsdCxDKX0saC5HYz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7Zm9yKEU9bmV3IEx3KHQuZ2MoKSksYT10LktjKCk7YS5PYigpOylpZihyPWwoYS5QYigpLDc2KSxvPXIuTGsoKSx1cCh0aGlzLmUsbykpKCFvLlNpKCl8fCFxSCh0aGlzLG8sci5tZCgpKSYmIWpFKEUscikpJiZxcihFLHIpO2Vsc2V7Zm9yKEM9V3UodGhpcy5lLkRoKCksbyksbj1sKHRoaXMuZywxMjQpLGY9ITAsZz0wO2c8dGhpcy5pOysrZylpZih3PW5bZ10sQy5hbSh3LkxrKCkpKXtsKG42KHRoaXMsZyxyKSw3NiksZj0hMTticmVha31mJiZxcihFLHIpfXJldHVybiBBcyh0aGlzLEUpfSxoLkZpPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmo9LTEsbGxlKHRoaXMsdGhpcy5pLHQpfSxoLlBsPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gaWtlKHRoaXMsdCxuLHIpfSxoLlhrPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGhQKHRoaXMsdCxuKX0saC5RbD1mdW5jdGlvbih0LG4scil7cmV0dXJuIE1rZSh0aGlzLHQsbixyKX0saC5SbD1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxoLlNsPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHBQKHRoaXMsdCxuKX0saC5UbD1mdW5jdGlvbih0KXtyZXR1cm4gbChPZSh0aGlzLHQpLDc2KS5MaygpfSxoLlVsPWZ1bmN0aW9uKHQpe3JldHVybiBsKE9lKHRoaXMsdCksNzYpLm1kKCl9LGguVmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLk1qPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguVGo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5XbD1mdW5jdGlvbih0KXtyZXR1cm4hRk4odGhpcyx0KX0saC5haj1mdW5jdGlvbih0KXtyZXR1cm4gV2UoUV90LFM1dCwzNDMsdCwwLDEpfSxoLnBsPWZ1bmN0aW9uKHQpe3JldHVybiBjYWUodGhpcyx0KX0saC5XYj1mdW5jdGlvbih0KXskTyh0aGlzLHQpfSxoLlhsPWZ1bmN0aW9uKHQsbil7SFUodGhpcyx0LG4pfSxoLllsPWZ1bmN0aW9uKHQpe3JldHVybiBvZnQodGhpcyx0KX0saC5abD1mdW5jdGlvbih0KXtqZHQodGhpcyx0KX0sSSh1cywiQmFzaWNGZWF0dXJlTWFwIiw3OCksRCgxOTYwLDEsbGcpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5SYj1mdW5jdGlvbih0KXtpZih0aGlzLmc9PS0xKXRocm93IHVlKG5ldyBwbCk7ZEgodGhpcyk7dHJ5e3ZidCh0aGlzLmUsdGhpcy5iLHRoaXMuYSx0KSx0aGlzLmQ9dGhpcy5lLmosaVUodGhpcyl9Y2F0Y2gobil7dGhyb3cgbj1icyhuKSxEZShuLDc3KT91ZShuZXcgWGgpOnVlKG4pfX0saC5PYj1mdW5jdGlvbigpe3JldHVybiBfY2UodGhpcyl9LGguU2I9ZnVuY3Rpb24oKXtyZXR1cm4gTzB0KHRoaXMpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIGlVKHRoaXMpfSxoLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5VYj1mdW5jdGlvbigpe3ZhciB0O2lmKE8wdCh0aGlzKSlyZXR1cm4gZEgodGhpcyksdGhpcy5nPS0tdGhpcy5hLHRoaXMudWwoKSYmKHQ9ekEodGhpcy5lLHRoaXMuYix0aGlzLmMsdGhpcy5hLHRoaXMuaiksdGhpcy5qPXQpLHRoaXMuaT0wLHRoaXMuajt0aHJvdyB1ZShuZXcgX2MpfSxoLlZiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS0xfSxoLlFiPWZ1bmN0aW9uKCl7aWYodGhpcy5nPT0tMSl0aHJvdyB1ZShuZXcgcGwpO2RIKHRoaXMpO3RyeXtocHQodGhpcy5lLHRoaXMuYix0aGlzLmcpLHRoaXMuZD10aGlzLmUuaix0aGlzLmc8dGhpcy5hJiYoLS10aGlzLmEsLS10aGlzLmMpLC0tdGhpcy5nfWNhdGNoKHQpe3Rocm93IHQ9YnModCksRGUodCw3Nyk/dWUobmV3IFhoKTp1ZSh0KX19LGgudWw9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5XYj1mdW5jdGlvbih0KXtpZih0aGlzLmc9PS0xKXRocm93IHVlKG5ldyBwbCk7ZEgodGhpcyk7dHJ5e3FtdCh0aGlzLmUsdGhpcy5iLHRoaXMuZyx0KSx0aGlzLmQ9dGhpcy5lLmp9Y2F0Y2gobil7dGhyb3cgbj1icyhuKSxEZShuLDc3KT91ZShuZXcgWGgpOnVlKG4pfX0saC5hPTAsaC5jPTAsaC5kPTAsaC5mPSExLGguZz0wLGguaT0wLEkodXMsIkZlYXR1cmVNYXBVdGlsL0Jhc2ljRmVhdHVyZUVJdGVyYXRvciIsMTk2MCksRCg0MjAsMTk2MCxsZyxtRSksaC4kbD1mdW5jdGlvbigpe3ZhciB0LG4scjtmb3Iocj10aGlzLmUuaSx0PWwodGhpcy5lLmcsMTI0KTt0aGlzLmM8cjspe2lmKG49dFt0aGlzLmNdLHRoaXMuay5hbShuLkxrKCkpKXJldHVybiB0aGlzLmo9dGhpcy5mP246bi5tZCgpLHRoaXMuaT0yLCEwOysrdGhpcy5jfXJldHVybiB0aGlzLmk9MSx0aGlzLmc9LTEsITF9LGguX2w9ZnVuY3Rpb24oKXt2YXIgdCxuO2Zvcih0PWwodGhpcy5lLmcsMTI0KTstLXRoaXMuYz49MDspaWYobj10W3RoaXMuY10sdGhpcy5rLmFtKG4uTGsoKSkpcmV0dXJuIHRoaXMuaj10aGlzLmY/bjpuLm1kKCksdGhpcy5pPS0yLCEwO3JldHVybiB0aGlzLmk9LTEsdGhpcy5nPS0xLCExfSxJKHVzLCJCYXNpY0ZlYXR1cmVNYXAvRmVhdHVyZUVJdGVyYXRvciIsNDIwKSxEKDY3Niw0MjAsbGcsVXNlKSxoLnVsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkodXMsIkJhc2ljRmVhdHVyZU1hcC9SZXNvbHZpbmdGZWF0dXJlRUl0ZXJhdG9yIiw2NzYpLEQoOTY4LDQ5NixLRyxTbnQpLGgucGo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sSSh1cywiRUNvbnRlbnRzRUxpc3QvMSIsOTY4KSxEKDk2OSw0OTYsS0csWHR0KSxoLnVsPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkodXMsIkVDb250ZW50c0VMaXN0LzIiLDk2OSksRCg5NjcsMjg3LFdHLF9udCksaC53bD1mdW5jdGlvbih0KXt9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5TYj1mdW5jdGlvbigpe3JldHVybiExfSxJKHVzLCJFQ29udGVudHNFTGlzdC9GZWF0dXJlSXRlcmF0b3JJbXBsLzEiLDk2NyksRCg4NDAsNTkzLGtjLHl5ZSksaC5OaT1mdW5jdGlvbigpe3RoaXMuYT0hMH0saC5Raj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguR2s9ZnVuY3Rpb24oKXt2YXIgdDskcih0aGlzKSxoaCh0aGlzLmUpPyh0PXRoaXMuYSx0aGlzLmE9ITEsTmkodGhpcy5lLG5ldyBoMCh0aGlzLmUsMix0aGlzLmMsdCwhMSkpKTp0aGlzLmE9ITF9LGguYT0hMSxJKHVzLCJFRGF0YVR5cGVFTGlzdC9VbnNldHRhYmxlIiw4NDApLEQoMTk1OCw1OTMsa2MsTm50KSxoLlNpPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkodXMsIkVEYXRhVHlwZVVuaXF1ZUVMaXN0IiwxOTU4KSxEKDE5NTksODQwLGtjLFBudCksaC5TaT1mdW5jdGlvbigpe3JldHVybiEwfSxJKHVzLCJFRGF0YVR5cGVVbmlxdWVFTGlzdC9VbnNldHRhYmxlIiwxOTU5KSxEKDE0Nyw4MyxrYyxtbCksaC5ubD1mdW5jdGlvbigpe3JldHVybiEwfSxoLldpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEV4KHRoaXMsdCxsKG4sNTgpKX0sSSh1cywiRU9iamVjdENvbnRhaW5tZW50RUxpc3QvUmVzb2x2aW5nIiwxNDcpLEQoMTE4NCw1NTUsa2MsQm50KSxoLm5sPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguV2k9ZnVuY3Rpb24odCxuKXtyZXR1cm4gRXgodGhpcyx0LGwobiw1OCkpfSxJKHVzLCJFT2JqZWN0Q29udGFpbm1lbnRFTGlzdC9VbnNldHRhYmxlL1Jlc29sdmluZyIsMTE4NCksRCg3NjYsMTQsa2MsYTRlKSxoLk5pPWZ1bmN0aW9uKCl7dGhpcy5hPSEwfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5Haz1mdW5jdGlvbigpe3ZhciB0OyRyKHRoaXMpLGhoKHRoaXMuZSk/KHQ9dGhpcy5hLHRoaXMuYT0hMSxOaSh0aGlzLmUsbmV3IGgwKHRoaXMuZSwyLHRoaXMuYyx0LCExKSkpOnRoaXMuYT0hMX0saC5hPSExLEkodXMsIkVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlRUxpc3QvVW5zZXR0YWJsZSIsNzY2KSxEKDEyMjIsNzY2LGtjLFlydCksaC5ubD1mdW5jdGlvbigpe3JldHVybiEwfSxoLldpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEV4KHRoaXMsdCxsKG4sNTgpKX0sSSh1cywiRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VFTGlzdC9VbnNldHRhYmxlL1Jlc29sdmluZyIsMTIyMiksRCg3NTcsNTA1LGtjLHh5ZSksaC5OaT1mdW5jdGlvbigpe3RoaXMuYT0hMH0saC5Raj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguR2s9ZnVuY3Rpb24oKXt2YXIgdDskcih0aGlzKSxoaCh0aGlzLmUpPyh0PXRoaXMuYSx0aGlzLmE9ITEsTmkodGhpcy5lLG5ldyBoMCh0aGlzLmUsMix0aGlzLmMsdCwhMSkpKTp0aGlzLmE9ITF9LGguYT0hMSxJKHVzLCJFT2JqZWN0RUxpc3QvVW5zZXR0YWJsZSIsNzU3KSxEKDMzOCw1MDUsa2MsJDUpLGgubmw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5XaT1mdW5jdGlvbih0LG4pe3JldHVybiBFeCh0aGlzLHQsbChuLDU4KSl9LEkodXMsIkVPYmplY3RSZXNvbHZpbmdFTGlzdCIsMzM4KSxEKDE4NDQsNzU3LGtjLEZudCksaC5ubD1mdW5jdGlvbigpe3JldHVybiEwfSxoLldpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEV4KHRoaXMsdCxsKG4sNTgpKX0sSSh1cywiRU9iamVjdFJlc29sdmluZ0VMaXN0L1Vuc2V0dGFibGUiLDE4NDQpLEQoMTUyNywxLHt9LGJyZSk7dmFyIFpfdDtJKHVzLCJFT2JqZWN0VmFsaWRhdG9yIiwxNTI3KSxEKDU1OSw1MDUsa2MscEgpLGguaWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxoLmpsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC5Naj1mdW5jdGlvbigpe3JldHVybiEwfSxoLm1sPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguYj0wLEkodXMsIkVPYmplY3RXaXRoSW52ZXJzZUVMaXN0Iiw1NTkpLEQoMTIyNSw1NTksa2MsWHJ0KSxoLmxsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkodXMsIkVPYmplY3RXaXRoSW52ZXJzZUVMaXN0L01hbnlJbnZlcnNlIiwxMjI1KSxEKDYzNSw1NTksa2MsZmFlKSxoLk5pPWZ1bmN0aW9uKCl7dGhpcy5hPSEwfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5Haz1mdW5jdGlvbigpe3ZhciB0OyRyKHRoaXMpLGhoKHRoaXMuZSk/KHQ9dGhpcy5hLHRoaXMuYT0hMSxOaSh0aGlzLmUsbmV3IGgwKHRoaXMuZSwyLHRoaXMuYyx0LCExKSkpOnRoaXMuYT0hMX0saC5hPSExLEkodXMsIkVPYmplY3RXaXRoSW52ZXJzZUVMaXN0L1Vuc2V0dGFibGUiLDYzNSksRCgxMjI0LDYzNSxrYyxRcnQpLGgubGw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSSh1cywiRU9iamVjdFdpdGhJbnZlcnNlRUxpc3QvVW5zZXR0YWJsZS9NYW55SW52ZXJzZSIsMTIyNCksRCg3NjcsNTU5LGtjLG80ZSksaC5ubD1mdW5jdGlvbigpe3JldHVybiEwfSxoLldpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEV4KHRoaXMsdCxsKG4sNTgpKX0sSSh1cywiRU9iamVjdFdpdGhJbnZlcnNlUmVzb2x2aW5nRUxpc3QiLDc2NyksRCgzMiw3Njcsa2MsTG4pLGgubGw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSSh1cywiRU9iamVjdFdpdGhJbnZlcnNlUmVzb2x2aW5nRUxpc3QvTWFueUludmVyc2UiLDMyKSxEKDc2OCw2MzUsa2MsYzRlKSxoLm5sPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguV2k9ZnVuY3Rpb24odCxuKXtyZXR1cm4gRXgodGhpcyx0LGwobiw1OCkpfSxJKHVzLCJFT2JqZWN0V2l0aEludmVyc2VSZXNvbHZpbmdFTGlzdC9VbnNldHRhYmxlIiw3NjgpLEQoMTIyMyw3Njgsa2MsSnJ0KSxoLmxsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkodXMsIkVPYmplY3RXaXRoSW52ZXJzZVJlc29sdmluZ0VMaXN0L1Vuc2V0dGFibGUvTWFueUludmVyc2UiLDEyMjMpLEQoMTE4NSw2MzIsa2MpLGguTGk9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJjE3OTIpPT0wfSxoLk5pPWZ1bmN0aW9uKCl7dGhpcy5ifD0xfSxoLmtsPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiY0KSE9MH0saC5Naj1mdW5jdGlvbigpe3JldHVybih0aGlzLmImNDApIT0wfSxoLmxsPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiYxNikhPTB9LGgubWw9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJjgpIT0wfSxoLm5sPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiZyNCkhPTB9LGguYWw9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJjMyKSE9MH0saC5vbD1mdW5jdGlvbigpe3JldHVybih0aGlzLmImbTApIT0wfSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmQ/UmN0KHRoaXMuZCx0KTp0aGlzLkxrKCkuSGsoKS5mayh0KX0saC5Raj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmImMj8odGhpcy5iJjEpIT0wOnRoaXMuaSE9MH0saC5TaT1mdW5jdGlvbigpe3JldHVybih0aGlzLmImMTI4KSE9MH0saC5Haz1mdW5jdGlvbigpe3ZhciB0OyRyKHRoaXMpLHRoaXMuYiYyJiYoaGgodGhpcy5lKT8odD0odGhpcy5iJjEpIT0wLHRoaXMuYiY9LTIseGsodGhpcyxuZXcgaDAodGhpcy5lLDIsbXModGhpcy5lLkRoKCksdGhpcy5MaygpKSx0LCExKSkpOnRoaXMuYiY9LTIpfSxoLllpPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiYxNTM2KT09MH0saC5iPTAsSSh1cywiRWNvcmVFTGlzdC9HZW5lcmljIiwxMTg1KSxEKDExODYsMTE4NSxrYyxWYXQpLGguTGs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxJKHVzLCJFY29yZUVMaXN0L0R5bmFtaWMiLDExODYpLEQoNzY1LDY2LEJkLGt3ZSksaC5haj1mdW5jdGlvbih0KXtyZXR1cm4gYk4odGhpcy5hLmEsdCl9LEkodXMsIkVjb3JlRU1hcC8xIiw3NjUpLEQoNzY0LDgzLGtjLGE1ZSksaC5NaT1mdW5jdGlvbih0LG4pe29VKHRoaXMuYixsKG4sMTM2KSl9LGguT2k9ZnVuY3Rpb24odCxuKXt6ZnQodGhpcy5iKX0saC5QaT1mdW5jdGlvbih0LG4scil7dmFyIGE7KysoYT10aGlzLmIsbChuLDEzNiksYSkuZX0saC5RaT1mdW5jdGlvbih0LG4pe0ZjZSh0aGlzLmIsbChuLDEzNikpfSxoLlJpPWZ1bmN0aW9uKHQsbixyKXtGY2UodGhpcy5iLGwociwxMzYpKSxxZShyKT09PXFlKG4pJiZsKHIsMTM2KS5DaShKbG4obChuLDEzNikubGQoKSkpLG9VKHRoaXMuYixsKG4sMTM2KSl9LEkodXMsIkVjb3JlRU1hcC9EZWxlZ2F0ZUVPYmplY3RDb250YWlubWVudEVMaXN0Iiw3NjQpLEQoMTIyMCwxNDEsQVNlLGlmdCksSSh1cywiRWNvcmVFTWFwL1Vuc2V0dGFibGUiLDEyMjApLEQoMTIyMSw3NjQsa2MsWnJ0KSxoLk5pPWZ1bmN0aW9uKCl7dGhpcy5hPSEwfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5Haz1mdW5jdGlvbigpe3ZhciB0OyRyKHRoaXMpLGhoKHRoaXMuZSk/KHQ9dGhpcy5hLHRoaXMuYT0hMSxOaSh0aGlzLmUsbmV3IGgwKHRoaXMuZSwyLHRoaXMuYyx0LCExKSkpOnRoaXMuYT0hMX0saC5hPSExLEkodXMsIkVjb3JlRU1hcC9VbnNldHRhYmxlL1Vuc2V0dGFibGVEZWxlZ2F0ZUVPYmplY3RDb250YWlubWVudEVMaXN0IiwxMjIxKSxEKDExODksMjE1LG02LFVzdCksaC5hPSExLGguYj0hMSxJKHVzLCJFY29yZVV0aWwvQ29waWVyIiwxMTg5KSxEKDc1OSwxLE9hLExjdCksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIEYxdCh0aGlzKX0saC5QYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiBGMXQodGhpcyksdD10aGlzLmIsdGhpcy5iPW51bGwsdH0saC5RYj1mdW5jdGlvbigpe3RoaXMuYS5RYigpfSxJKHVzLCJFY29yZVV0aWwvUHJvcGVyQ29udGVudEl0ZXJhdG9yIiw3NTkpLEQoMTUyOCwxNTI3LHt9LGR6KTt2YXIgZUF0O0kodXMsIkVjb3JlVmFsaWRhdG9yIiwxNTI4KTt2YXIgdEF0O2tzKHVzLCJGZWF0dXJlTWFwVXRpbC9WYWxpZGF0b3IiKSxEKDEyOTUsMSx7MjA0MToxfSx2NSksaC5hbT1mdW5jdGlvbih0KXtyZXR1cm4hMH0sSSh1cywiRmVhdHVyZU1hcFV0aWwvMSIsMTI5NSksRCg3NzMsMSx7MjA0MToxfSxxa2UpLGguYW09ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHRoaXMuYz09dD8hMDoobj1CdChjcih0aGlzLmEsdCkpLG49PW51bGw/UVNuKHRoaXMsdCk/KEx1dCh0aGlzLmEsdCwoSG4oKSxTVCkpLCEwKTooTHV0KHRoaXMuYSx0LChIbigpLFBiKSksITEpOm49PShIbigpLFNUKSl9LGguZT0hMTt2YXIgc3BlO0kodXMsIkZlYXR1cmVNYXBVdGlsL0Jhc2ljVmFsaWRhdG9yIiw3NzMpLEQoNzc0LDQ1LG02LHZ5ZSksSSh1cywiRmVhdHVyZU1hcFV0aWwvQmFzaWNWYWxpZGF0b3IvQ2FjaGUiLDc3NCksRCg1MDksNTYsezIwOjEsMzE6MSw1NjoxLDE2OjEsMTU6MSw2MToxLDc5OjEsNzE6MSw5NzoxfSx5TyksaC5iZD1mdW5jdGlvbih0LG4pe3ZidCh0aGlzLmMsdGhpcy5iLHQsbil9LGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIGZrZSh0aGlzLmMsdGhpcy5iLHQpfSxoLmNkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHZMbih0aGlzLmMsdGhpcy5iLHQsbil9LGguR2M9ZnVuY3Rpb24odCl7cmV0dXJuIEZfKHRoaXMsdCl9LGguR2k9ZnVuY3Rpb24odCxuKXtkd24odGhpcy5jLHRoaXMuYix0LG4pfSxoLldrPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGlrZSh0aGlzLmMsdGhpcy5iLHQsbil9LGguJGk9ZnVuY3Rpb24odCl7cmV0dXJuIHFVKHRoaXMuYyx0aGlzLmIsdCwhMSl9LGguSWk9ZnVuY3Rpb24oKXtyZXR1cm4gY250KHRoaXMuYyx0aGlzLmIpfSxoLkppPWZ1bmN0aW9uKCl7cmV0dXJuIGpsbih0aGlzLmMsdGhpcy5iKX0saC5LaT1mdW5jdGlvbih0KXtyZXR1cm4gdnZuKHRoaXMuYyx0aGlzLmIsdCl9LGguWGs9ZnVuY3Rpb24odCxuKXtyZXR1cm4gSXJ0KHRoaXMsdCxuKX0saC4kYj1mdW5jdGlvbigpe184KHRoaXMpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBxSCh0aGlzLmMsdGhpcy5iLHQpfSxoLkljPWZ1bmN0aW9uKHQpe3JldHVybiBtM24odGhpcy5jLHRoaXMuYix0KX0saC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gcVUodGhpcy5jLHRoaXMuYix0LCEwKX0saC5Gaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpc30saC5kZD1mdW5jdGlvbih0KXtyZXR1cm4gQ21uKHRoaXMuYyx0aGlzLmIsdCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gX3EodGhpcyl9LGguUWo9ZnVuY3Rpb24oKXtyZXR1cm4hRk4odGhpcy5jLHRoaXMuYil9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gcnduKHRoaXMuYyx0aGlzLmIpfSxoLmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGl3bih0aGlzLmMsdGhpcy5iKX0saC5mZD1mdW5jdGlvbih0KXtyZXR1cm4gUDRuKHRoaXMuYyx0aGlzLmIsdCl9LGguVGk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gT210KHRoaXMuYyx0aGlzLmIsdCxuKX0saC5VaT1mdW5jdGlvbih0LG4pe3h2bih0aGlzLmMsdGhpcy5iLHQsbil9LGguZ2Q9ZnVuY3Rpb24odCl7cmV0dXJuIGhwdCh0aGlzLmMsdGhpcy5iLHQpfSxoLk1jPWZ1bmN0aW9uKHQpe3JldHVybiB5X24odGhpcy5jLHRoaXMuYix0KX0saC5oZD1mdW5jdGlvbih0LG4pe3JldHVybiBxbXQodGhpcy5jLHRoaXMuYix0LG4pfSxoLldiPWZ1bmN0aW9uKHQpe0VVKHRoaXMuYyx0aGlzLmIpLEZfKHRoaXMsbCh0LDE1KSl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gTjRuKHRoaXMuYyx0aGlzLmIpfSxoLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIF9ibih0aGlzLmMsdGhpcy5iKX0saC5RYz1mdW5jdGlvbih0KXtyZXR1cm4gU21uKHRoaXMuYyx0aGlzLmIsdCl9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdCxuO2ZvcihuPW5ldyBVcCxuLmErPSJbIix0PWNudCh0aGlzLmMsdGhpcy5iKTtfY2UodCk7KVhvKG4sal8oaVUodCkpKSxfY2UodCkmJihuLmErPUNvKTtyZXR1cm4gbi5hKz0iXSIsbi5hfSxoLkdrPWZ1bmN0aW9uKCl7RVUodGhpcy5jLHRoaXMuYil9LEkodXMsIkZlYXR1cmVNYXBVdGlsL0ZlYXR1cmVFTGlzdCIsNTA5KSxEKDY0NCwzOSxZUCxFb2UpLGguaGo9ZnVuY3Rpb24odCl7cmV0dXJuIFNBKHRoaXMsdCl9LGgubWo9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnLHc7c3dpdGNoKHRoaXMuZCl7Y2FzZSAxOmNhc2UgMjp7aWYoZj10LmpqKCkscWUoZik9PT1xZSh0aGlzLmMpJiZTQSh0aGlzLG51bGwpPT10LmhqKG51bGwpKXJldHVybiB0aGlzLmc9dC5paigpLHQuZ2ooKT09MSYmKHRoaXMuZD0xKSwhMDticmVha31jYXNlIDM6e3N3aXRjaChvPXQuZ2ooKSxvKXtjYXNlIDM6e2lmKGY9dC5qaigpLHFlKGYpPT09cWUodGhpcy5jKSYmU0EodGhpcyxudWxsKT09dC5oaihudWxsKSlyZXR1cm4gdGhpcy5kPTUsbj1uZXcgTHcoMikscXIobix0aGlzLmcpLHFyKG4sdC5paigpKSx0aGlzLmc9biwhMDticmVha319YnJlYWt9Y2FzZSA1Ontzd2l0Y2gobz10LmdqKCksbyl7Y2FzZSAzOntpZihmPXQuamooKSxxZShmKT09PXFlKHRoaXMuYykmJlNBKHRoaXMsbnVsbCk9PXQuaGoobnVsbCkpcmV0dXJuIHI9bCh0aGlzLmcsMTYpLHIuRmModC5paigpKSwhMDticmVha319YnJlYWt9Y2FzZSA0Ontzd2l0Y2gobz10LmdqKCksbyl7Y2FzZSAzOntpZihmPXQuamooKSxxZShmKT09PXFlKHRoaXMuYykmJlNBKHRoaXMsbnVsbCk9PXQuaGoobnVsbCkpcmV0dXJuIHRoaXMuZD0xLHRoaXMuZz10LmlqKCksITA7YnJlYWt9Y2FzZSA0OntpZihmPXQuamooKSxxZShmKT09PXFlKHRoaXMuYykmJlNBKHRoaXMsbnVsbCk9PXQuaGoobnVsbCkpcmV0dXJuIHRoaXMuZD02LHc9bmV3IEx3KDIpLHFyKHcsdGhpcy5uKSxxcih3LHQua2ooKSksdGhpcy5uPXcsZz1oZShsZShWciwxKSxkaSwyOCwxNSxbdGhpcy5vLHQubGooKV0pLHRoaXMuZz1nLCEwO2JyZWFrfX1icmVha31jYXNlIDY6e3N3aXRjaChvPXQuZ2ooKSxvKXtjYXNlIDQ6e2lmKGY9dC5qaigpLHFlKGYpPT09cWUodGhpcy5jKSYmU0EodGhpcyxudWxsKT09dC5oaihudWxsKSlyZXR1cm4gcj1sKHRoaXMubiwxNiksci5GYyh0LmtqKCkpLGc9bCh0aGlzLmcsNTMpLGE9V2UoVnIsZGksMjgsZy5sZW5ndGgrMSwxNSwxKSxwdShnLDAsYSwwLGcubGVuZ3RoKSxhW2cubGVuZ3RoXT10LmxqKCksdGhpcy5nPWEsITA7YnJlYWt9fWJyZWFrfX1yZXR1cm4hMX0sSSh1cywiRmVhdHVyZU1hcFV0aWwvRmVhdHVyZUVOb3RpZmljYXRpb25JbXBsIiw2NDQpLEQoNTY0LDUwOSx7MjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDYxOjEsNzk6MSwxNjA6MSwyMjA6MSwyMDM2OjEsNzE6MSw5NzoxfSxuSCksaC5PbD1mdW5jdGlvbih0LG4pe3JldHVybiBma2UodGhpcy5jLHQsbil9LGguUGw9ZnVuY3Rpb24odCxuLHIpe3JldHVybiBpa2UodGhpcy5jLHQsbixyKX0saC5RbD1mdW5jdGlvbih0LG4scil7cmV0dXJuIE1rZSh0aGlzLmMsdCxuLHIpfSxoLlJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGguU2w9ZnVuY3Rpb24odCxuKXtyZXR1cm4gcFAodGhpcy5jLHQsbil9LGguVGw9ZnVuY3Rpb24odCl7cmV0dXJuIGwocVUodGhpcy5jLHRoaXMuYix0LCExKSw3NikuTGsoKX0saC5VbD1mdW5jdGlvbih0KXtyZXR1cm4gbChxVSh0aGlzLmMsdGhpcy5iLHQsITEpLDc2KS5tZCgpfSxoLlZsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5XbD1mdW5jdGlvbih0KXtyZXR1cm4hRk4odGhpcy5jLHQpfSxoLlhsPWZ1bmN0aW9uKHQsbil7SFUodGhpcy5jLHQsbil9LGguWWw9ZnVuY3Rpb24odCl7cmV0dXJuIG9mdCh0aGlzLmMsdCl9LGguWmw9ZnVuY3Rpb24odCl7amR0KHRoaXMuYyx0KX0sSSh1cywiRmVhdHVyZU1hcFV0aWwvRmVhdHVyZUZlYXR1cmVNYXAiLDU2NCksRCgxMjk0LDEsaTBlLFB0dCksaC5Gaz1mdW5jdGlvbih0KXtyZXR1cm4gcVUodGhpcy5iLHRoaXMuYSwtMSx0KX0saC5Raj1mdW5jdGlvbigpe3JldHVybiFGTih0aGlzLmIsdGhpcy5hKX0saC5XYj1mdW5jdGlvbih0KXtIVSh0aGlzLmIsdGhpcy5hLHQpfSxoLkdrPWZ1bmN0aW9uKCl7RVUodGhpcy5iLHRoaXMuYSl9LEkodXMsIkZlYXR1cmVNYXBVdGlsL0ZlYXR1cmVWYWx1ZSIsMTI5NCk7dmFyIGM5LGFwZSxvcGUsdTksbkF0LGdGPWtzKG5LLCJBbnlUeXBlIik7RCg2ODAsNjMsbHAsSmllKSxJKG5LLCJJbnZhbGlkRGF0YXR5cGVWYWx1ZUV4Y2VwdGlvbiIsNjgwKTt2YXIgQVk9a3MobkssTTV0KSxwRj1rcyhuSyxENXQpLFZQZT1rcyhuSyxJNXQpLHJBdCx0dSxVUGUsU3YsaUF0LHNBdCxhQXQsb0F0LGNBdCx1QXQsbEF0LGhBdCxmQXQsZEF0LGdBdCxjNyxwQXQsdTcsSE0sYkF0LEMzLGJGLG1GLG1BdCxWTSxVTTtEKDg0NCw1MTYsezExMDoxLDk0OjEsOTM6MSw1ODoxLDU0OjEsOTk6MSw4NTc6MX0sendlKSxoLkxoPWZ1bmN0aW9uKHQsbixyKXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiByPyghdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSx0aGlzLmMpOighdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSx0aGlzLmMuYik7Y2FzZSAxOnJldHVybiByPyghdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSxsKGt1KHRoaXMuYywoR2koKSxTdikpLDE2MCkpOighdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSxsKGwoa3UodGhpcy5jLChHaSgpLFN2KSksMTYwKSwyMjApKS5WbCgpO2Nhc2UgMjpyZXR1cm4gcj8oIXRoaXMuYiYmKHRoaXMuYj1uZXcgTHModGhpcywyKSksdGhpcy5iKTooIXRoaXMuYiYmKHRoaXMuYj1uZXcgTHModGhpcywyKSksdGhpcy5iLmIpfXJldHVybiBzZih0aGlzLHQteXIodGhpcy5paSgpKSxNbih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgU2YpLHRoaXMuaykuTmsoKTp0aGlzLmlpKCksdCksbixyKX0saC5VaD1mdW5jdGlvbih0LG4scil7dmFyIGE7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSxoUCh0aGlzLmMsdCxyKTtjYXNlIDE6cmV0dXJuKCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGwobChrdSh0aGlzLmMsKEdpKCksU3YpKSwxNjApLDcxKSkuWGsodCxyKTtjYXNlIDI6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgTHModGhpcywyKSksaFAodGhpcy5iLHQscil9cmV0dXJuIGE9bChNbih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgU2YpLHRoaXMuaykuTmsoKTp0aGlzLmlpKCksbiksNjkpLGEud2soKS5Bayh0aGlzLFY2ZSh0aGlzKSxuLXlyKHRoaXMuaWkoKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5jJiZ0aGlzLmMuaSE9MDtjYXNlIDE6cmV0dXJuISghdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSxsKGt1KHRoaXMuYywoR2koKSxTdikpLDE2MCkpLmRjKCk7Y2FzZSAyOnJldHVybiEhdGhpcy5iJiZ0aGlzLmIuaSE9MH1yZXR1cm4gbmYodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IFNmKSx0aGlzLmspLk5rKCk6dGhpcy5paSgpLHQpKX0saC5iaT1mdW5jdGlvbih0LG4pe3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuYyYmKHRoaXMuYz1uZXcgTHModGhpcywwKSksJE8odGhpcy5jLG4pO3JldHVybjtjYXNlIDE6KCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGwobChrdSh0aGlzLmMsKEdpKCksU3YpKSwxNjApLDIyMCkpLldiKG4pO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgTHModGhpcywyKSksJE8odGhpcy5iLG4pO3JldHVybn11Zih0aGlzLHQteXIodGhpcy5paSgpKSxNbih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgU2YpLHRoaXMuaykuTmsoKTp0aGlzLmlpKCksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gR2koKSxVUGV9LGgua2k9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSwkcih0aGlzLmMpO3JldHVybjtjYXNlIDE6KCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGwoa3UodGhpcy5jLChHaSgpLFN2KSksMTYwKSkuJGIoKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmImJih0aGlzLmI9bmV3IExzKHRoaXMsMikpLCRyKHRoaXMuYik7cmV0dXJufWNmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBTZiksdGhpcy5rKS5OaygpOnRoaXMuaWkoKSx0KSl9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5qJjQ/ZzAodGhpcyk6KHQ9bmV3IEFmKGcwKHRoaXMpKSx0LmErPSIgKG1peGVkOiAiLE9fKHQsdGhpcy5jKSx0LmErPSIsIGFueUF0dHJpYnV0ZTogIixPXyh0LHRoaXMuYiksdC5hKz0iKSIsdC5hKX0sSShlYSwiQW55VHlwZUltcGwiLDg0NCksRCg2ODEsNTE2LHsxMTA6MSw5NDoxLDkzOjEsNTg6MSw1NDoxLDk5OjEsMjExOToxLDY4MToxfSx5cmUpLGguTGg9ZnVuY3Rpb24odCxuLHIpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMuYTtjYXNlIDE6cmV0dXJuIHRoaXMuYn1yZXR1cm4gc2YodGhpcyx0LXlyKChHaSgpLGM3KSksTW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IFNmKSx0aGlzLmspLk5rKCk6YzcsdCksbixyKX0saC5XaD1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLmEhPW51bGw7Y2FzZSAxOnJldHVybiB0aGlzLmIhPW51bGx9cmV0dXJuIG5mKHRoaXMsdC15cigoR2koKSxjNykpLE1uKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBTZiksdGhpcy5rKS5OaygpOmM3LHQpKX0saC5iaT1mdW5jdGlvbih0LG4pe3N3aXRjaCh0KXtjYXNlIDA6dnIodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgMTpwcih0aGlzLGVpKG4pKTtyZXR1cm59dWYodGhpcyx0LXlyKChHaSgpLGM3KSksTW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IFNmKSx0aGlzLmspLk5rKCk6YzcsdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gR2koKSxjN30saC5raT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMuYT1udWxsO3JldHVybjtjYXNlIDE6dGhpcy5iPW51bGw7cmV0dXJufWNmKHRoaXMsdC15cigoR2koKSxjNykpLE1uKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBTZiksdGhpcy5rKS5OaygpOmM3LHQpKX0saC5JYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmomND9nMCh0aGlzKToodD1uZXcgQWYoZzAodGhpcykpLHQuYSs9IiAoZGF0YTogIixYbyh0LHRoaXMuYSksdC5hKz0iLCB0YXJnZXQ6ICIsWG8odCx0aGlzLmIpLHQuYSs9IikiLHQuYSl9LGguYT1udWxsLGguYj1udWxsLEkoZWEsIlByb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwiLDY4MSksRCg2ODIsODQ0LHsxMTA6MSw5NDoxLDkzOjEsNTg6MSw1NDoxLDk5OjEsODU3OjEsMjEyMDoxLDY4MjoxfSxmSmUpLGguTGg9ZnVuY3Rpb24odCxuLHIpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHI/KCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLHRoaXMuYyk6KCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLHRoaXMuYy5iKTtjYXNlIDE6cmV0dXJuIHI/KCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGwoa3UodGhpcy5jLChHaSgpLFN2KSksMTYwKSk6KCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGwobChrdSh0aGlzLmMsKEdpKCksU3YpKSwxNjApLDIyMCkpLlZsKCk7Y2FzZSAyOnJldHVybiByPyghdGhpcy5iJiYodGhpcy5iPW5ldyBMcyh0aGlzLDIpKSx0aGlzLmIpOighdGhpcy5iJiYodGhpcy5iPW5ldyBMcyh0aGlzLDIpKSx0aGlzLmIuYik7Y2FzZSAzOnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGVpKHBQKHRoaXMuYywoR2koKSxITSksITApKTtjYXNlIDQ6cmV0dXJuIGw0ZSh0aGlzLmEsKCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGVpKHBQKHRoaXMuYywoR2koKSxITSksITApKSkpO2Nhc2UgNTpyZXR1cm4gdGhpcy5hfXJldHVybiBzZih0aGlzLHQteXIoKEdpKCksdTcpKSxNbih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgU2YpLHRoaXMuaykuTmsoKTp1Nyx0KSxuLHIpfSxoLldoPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuISF0aGlzLmMmJnRoaXMuYy5pIT0wO2Nhc2UgMTpyZXR1cm4hKCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGwoa3UodGhpcy5jLChHaSgpLFN2KSksMTYwKSkuZGMoKTtjYXNlIDI6cmV0dXJuISF0aGlzLmImJnRoaXMuYi5pIT0wO2Nhc2UgMzpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSxlaShwUCh0aGlzLmMsKEdpKCksSE0pLCEwKSkhPW51bGw7Y2FzZSA0OnJldHVybiBsNGUodGhpcy5hLCghdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSxlaShwUCh0aGlzLmMsKEdpKCksSE0pLCEwKSkpKSE9bnVsbDtjYXNlIDU6cmV0dXJuISF0aGlzLmF9cmV0dXJuIG5mKHRoaXMsdC15cigoR2koKSx1NykpLE1uKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBTZiksdGhpcy5rKS5OaygpOnU3LHQpKX0saC5iaT1mdW5jdGlvbih0LG4pe3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuYyYmKHRoaXMuYz1uZXcgTHModGhpcywwKSksJE8odGhpcy5jLG4pO3JldHVybjtjYXNlIDE6KCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGwobChrdSh0aGlzLmMsKEdpKCksU3YpKSwxNjApLDIyMCkpLldiKG4pO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgTHModGhpcywyKSksJE8odGhpcy5iLG4pO3JldHVybjtjYXNlIDM6SjVlKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDQ6SjVlKHRoaXMsdTRlKHRoaXMuYSxuKSk7cmV0dXJuO2Nhc2UgNTpObih0aGlzLGwobiwxNTYpKTtyZXR1cm59dWYodGhpcyx0LXlyKChHaSgpLHU3KSksTW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IFNmKSx0aGlzLmspLk5rKCk6dTcsdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gR2koKSx1N30saC5raT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLCRyKHRoaXMuYyk7cmV0dXJuO2Nhc2UgMTooIXRoaXMuYyYmKHRoaXMuYz1uZXcgTHModGhpcywwKSksbChrdSh0aGlzLmMsKEdpKCksU3YpKSwxNjApKS4kYigpO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgTHModGhpcywyKSksJHIodGhpcy5iKTtyZXR1cm47Y2FzZSAzOiF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLEhVKHRoaXMuYywoR2koKSxITSksbnVsbCk7cmV0dXJuO2Nhc2UgNDpKNWUodGhpcyx1NGUodGhpcy5hLG51bGwpKTtyZXR1cm47Y2FzZSA1OnRoaXMuYT1udWxsO3JldHVybn1jZih0aGlzLHQteXIoKEdpKCksdTcpKSxNbih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgU2YpLHRoaXMuaykuTmsoKTp1Nyx0KSl9LEkoZWEsIlNpbXBsZUFueVR5cGVJbXBsIiw2ODIpLEQoNjgzLDUxNix7MTEwOjEsOTQ6MSw5MzoxLDU4OjEsNTQ6MSw5OToxLDIxMjE6MSw2ODM6MX0sZEplKSxoLkxoPWZ1bmN0aW9uKHQsbixyKXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiByPyghdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSx0aGlzLmEpOighdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSx0aGlzLmEuYik7Y2FzZSAxOnJldHVybiByPyghdGhpcy5iJiYodGhpcy5iPW5ldyB4bCgoVG4oKSxObyksWWMsdGhpcywxKSksdGhpcy5iKTooIXRoaXMuYiYmKHRoaXMuYj1uZXcgeGwoKFRuKCksTm8pLFljLHRoaXMsMSkpLGlOKHRoaXMuYikpO2Nhc2UgMjpyZXR1cm4gcj8oIXRoaXMuYyYmKHRoaXMuYz1uZXcgeGwoKFRuKCksTm8pLFljLHRoaXMsMikpLHRoaXMuYyk6KCF0aGlzLmMmJih0aGlzLmM9bmV3IHhsKChUbigpLE5vKSxZYyx0aGlzLDIpKSxpTih0aGlzLmMpKTtjYXNlIDM6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksa3UodGhpcy5hLChHaSgpLGJGKSk7Y2FzZSA0OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IExzKHRoaXMsMCkpLGt1KHRoaXMuYSwoR2koKSxtRikpO2Nhc2UgNTpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxrdSh0aGlzLmEsKEdpKCksVk0pKTtjYXNlIDY6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksa3UodGhpcy5hLChHaSgpLFVNKSl9cmV0dXJuIHNmKHRoaXMsdC15cigoR2koKSxDMykpLE1uKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBTZiksdGhpcy5rKS5OaygpOkMzLHQpLG4scil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksaFAodGhpcy5hLHQscik7Y2FzZSAxOnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IHhsKChUbigpLE5vKSxZYyx0aGlzLDEpKSxVcSh0aGlzLmIsdCxyKTtjYXNlIDI6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgeGwoKFRuKCksTm8pLFljLHRoaXMsMikpLFVxKHRoaXMuYyx0LHIpO2Nhc2UgNTpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxJcnQoa3UodGhpcy5hLChHaSgpLFZNKSksdCxyKX1yZXR1cm4gYT1sKE1uKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBTZiksdGhpcy5rKS5OaygpOihHaSgpLEMzKSxuKSw2OSksYS53aygpLkFrKHRoaXMsVjZlKHRoaXMpLG4teXIoKEdpKCksQzMpKSx0LHIpfSxoLldoPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wO2Nhc2UgMTpyZXR1cm4hIXRoaXMuYiYmdGhpcy5iLmYhPTA7Y2FzZSAyOnJldHVybiEhdGhpcy5jJiZ0aGlzLmMuZiE9MDtjYXNlIDM6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksIV9xKGt1KHRoaXMuYSwoR2koKSxiRikpKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksIV9xKGt1KHRoaXMuYSwoR2koKSxtRikpKTtjYXNlIDU6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksIV9xKGt1KHRoaXMuYSwoR2koKSxWTSkpKTtjYXNlIDY6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksIV9xKGt1KHRoaXMuYSwoR2koKSxVTSkpKX1yZXR1cm4gbmYodGhpcyx0LXlyKChHaSgpLEMzKSksTW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IFNmKSx0aGlzLmspLk5rKCk6QzMsdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSwkTyh0aGlzLmEsbik7cmV0dXJuO2Nhc2UgMTohdGhpcy5iJiYodGhpcy5iPW5ldyB4bCgoVG4oKSxObyksWWMsdGhpcywxKSksX1YodGhpcy5iLG4pO3JldHVybjtjYXNlIDI6IXRoaXMuYyYmKHRoaXMuYz1uZXcgeGwoKFRuKCksTm8pLFljLHRoaXMsMikpLF9WKHRoaXMuYyxuKTtyZXR1cm47Y2FzZSAzOiF0aGlzLmEmJih0aGlzLmE9bmV3IExzKHRoaXMsMCkpLF84KGt1KHRoaXMuYSwoR2koKSxiRikpKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxGXyhrdSh0aGlzLmEsYkYpLGwobiwxNikpO3JldHVybjtjYXNlIDQ6IXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksXzgoa3UodGhpcy5hLChHaSgpLG1GKSkpLCF0aGlzLmEmJih0aGlzLmE9bmV3IExzKHRoaXMsMCkpLEZfKGt1KHRoaXMuYSxtRiksbChuLDE2KSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxfOChrdSh0aGlzLmEsKEdpKCksVk0pKSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksRl8oa3UodGhpcy5hLFZNKSxsKG4sMTYpKTtyZXR1cm47Y2FzZSA2OiF0aGlzLmEmJih0aGlzLmE9bmV3IExzKHRoaXMsMCkpLF84KGt1KHRoaXMuYSwoR2koKSxVTSkpKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxGXyhrdSh0aGlzLmEsVU0pLGwobiwxNikpO3JldHVybn11Zih0aGlzLHQteXIoKEdpKCksQzMpKSxNbih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgU2YpLHRoaXMuaykuTmsoKTpDMyx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBHaSgpLEMzfSxoLmtpPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksJHIodGhpcy5hKTtyZXR1cm47Y2FzZSAxOiF0aGlzLmImJih0aGlzLmI9bmV3IHhsKChUbigpLE5vKSxZYyx0aGlzLDEpKSx0aGlzLmIuYy4kYigpO3JldHVybjtjYXNlIDI6IXRoaXMuYyYmKHRoaXMuYz1uZXcgeGwoKFRuKCksTm8pLFljLHRoaXMsMikpLHRoaXMuYy5jLiRiKCk7cmV0dXJuO2Nhc2UgMzohdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxfOChrdSh0aGlzLmEsKEdpKCksYkYpKSk7cmV0dXJuO2Nhc2UgNDohdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxfOChrdSh0aGlzLmEsKEdpKCksbUYpKSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxfOChrdSh0aGlzLmEsKEdpKCksVk0pKSk7cmV0dXJuO2Nhc2UgNjohdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxfOChrdSh0aGlzLmEsKEdpKCksVU0pKSk7cmV0dXJufWNmKHRoaXMsdC15cigoR2koKSxDMykpLE1uKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBTZiksdGhpcy5rKS5OaygpOkMzLHQpKX0saC5JYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmomND9nMCh0aGlzKToodD1uZXcgQWYoZzAodGhpcykpLHQuYSs9IiAobWl4ZWQ6ICIsT18odCx0aGlzLmEpLHQuYSs9IikiLHQuYSl9LEkoZWEsIlhNTFR5cGVEb2N1bWVudFJvb3RJbXBsIiw2ODMpLEQoMjAyOCw3MjAsezExMDoxLDk0OjEsOTM6MSw0ODA6MSwxNTU6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwxNTg6MSwxMTk6MSwxMjA6MSwyMTIyOjF9LHVrKSxoLnJpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQuaGsoKSl7Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDE2OmNhc2UgMjI6Y2FzZSAyMzpjYXNlIDI0OmNhc2UgMjU6Y2FzZSAyNjpjYXNlIDMyOmNhc2UgMzM6Y2FzZSAzNDpjYXNlIDM2OmNhc2UgMzc6Y2FzZSA0NDpjYXNlIDQ1OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUzOmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OmNhc2UgNTg6Y2FzZSA2MDpjYXNlIDYxOmNhc2UgNDpyZXR1cm4gbj09bnVsbD9udWxsOnhjKG4pO2Nhc2UgMTk6Y2FzZSAyODpjYXNlIDI5OmNhc2UgMzU6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDE6Y2FzZSA0NjpjYXNlIDUyOmNhc2UgNTQ6Y2FzZSA1OnJldHVybiBlaShuKTtjYXNlIDY6cmV0dXJuIGhmbihsKG4sMTk1KSk7Y2FzZSAxMjpjYXNlIDQ3OmNhc2UgNDk6Y2FzZSAxMTpyZXR1cm4gTHZ0KHRoaXMsdCxuKTtjYXNlIDEzOnJldHVybiBuPT1udWxsP251bGw6a0xuKGwobiwyNDcpKTtjYXNlIDE1OmNhc2UgMTQ6cmV0dXJuIG49PW51bGw/bnVsbDpfZ24oemUoR2UobikpKTtjYXNlIDE3OnJldHVybiBTZ3QoKEdpKCksbikpO2Nhc2UgMTg6cmV0dXJuIFNndChuKTtjYXNlIDIxOmNhc2UgMjA6cmV0dXJuIG49PW51bGw/bnVsbDpBZ24obChuLDE2MSkuYSk7Y2FzZSAyNzpyZXR1cm4gZmZuKGwobiwxOTUpKTtjYXNlIDMwOnJldHVybiAkZHQoKEdpKCksbChuLDE1KSkpO2Nhc2UgMzE6cmV0dXJuICRkdChsKG4sMTUpKTtjYXNlIDQwOnJldHVybiBnZm4oKEdpKCksbikpO2Nhc2UgNDI6cmV0dXJuIF9ndCgoR2koKSxuKSk7Y2FzZSA0MzpyZXR1cm4gX2d0KG4pO2Nhc2UgNTk6Y2FzZSA0ODpyZXR1cm4gZGZuKChHaSgpLG4pKTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbih5VCt0LnhlKCkrdDMpKX19LGguc2k9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZjtzd2l0Y2godC5HPT0tMSYmKHQuRz0ocj1BaCh0KSxyP2YyKHIudmkoKSx0KTotMSkpLHQuRyl7Y2FzZSAwOnJldHVybiBuPW5ldyB6d2UsbjtjYXNlIDE6cmV0dXJuIGE9bmV3IHlyZSxhO2Nhc2UgMjpyZXR1cm4gbz1uZXcgZkplLG87Y2FzZSAzOnJldHVybiBmPW5ldyBkSmUsZjtkZWZhdWx0OnRocm93IHVlKG5ldyBZbihxZmUrdC56Yit0MykpfX0saC50aT1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlO3N3aXRjaCh0LmhrKCkpe2Nhc2UgNTpjYXNlIDUyOmNhc2UgNDpyZXR1cm4gbjtjYXNlIDY6cmV0dXJuIHk2bihuKTtjYXNlIDg6Y2FzZSA3OnJldHVybiBuPT1udWxsP251bGw6YXhuKG4pO2Nhc2UgOTpyZXR1cm4gbj09bnVsbD9udWxsOmZOKE9oKChhPVR1KG4sITApLGEubGVuZ3RoPjAmJihYbigwLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoMCk9PTQzKT8oWG4oMSxhLmxlbmd0aCsxKSxhLnN1YnN0cigxKSk6YSksLTEyOCwxMjcpPDwyND4+MjQpO2Nhc2UgMTA6cmV0dXJuIG49PW51bGw/bnVsbDpmTihPaCgobz1UdShuLCEwKSxvLmxlbmd0aD4wJiYoWG4oMCxvLmxlbmd0aCksby5jaGFyQ29kZUF0KDApPT00Myk/KFhuKDEsby5sZW5ndGgrMSksby5zdWJzdHIoMSkpOm8pLC0xMjgsMTI3KTw8MjQ+PjI0KTtjYXNlIDExOnJldHVybiBlaShLdyh0aGlzLChHaSgpLGFBdCksbikpO2Nhc2UgMTI6cmV0dXJuIGVpKEt3KHRoaXMsKEdpKCksb0F0KSxuKSk7Y2FzZSAxMzpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBoM2UoVHUobiwhMCkpO2Nhc2UgMTU6Y2FzZSAxNDpyZXR1cm4gTFRuKG4pO2Nhc2UgMTY6cmV0dXJuIGVpKEt3KHRoaXMsKEdpKCksY0F0KSxuKSk7Y2FzZSAxNzpyZXR1cm4gcTF0KChHaSgpLG4pKTtjYXNlIDE4OnJldHVybiBxMXQobik7Y2FzZSAyODpjYXNlIDI5OmNhc2UgMzU6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDE6Y2FzZSA1NDpjYXNlIDE5OnJldHVybiBUdShuLCEwKTtjYXNlIDIxOmNhc2UgMjA6cmV0dXJuIGpUbihuKTtjYXNlIDIyOnJldHVybiBlaShLdyh0aGlzLChHaSgpLHVBdCksbikpO2Nhc2UgMjM6cmV0dXJuIGVpKEt3KHRoaXMsKEdpKCksbEF0KSxuKSk7Y2FzZSAyNDpyZXR1cm4gZWkoS3codGhpcywoR2koKSxoQXQpLG4pKTtjYXNlIDI1OnJldHVybiBlaShLdyh0aGlzLChHaSgpLGZBdCksbikpO2Nhc2UgMjY6cmV0dXJuIGVpKEt3KHRoaXMsKEdpKCksZEF0KSxuKSk7Y2FzZSAyNzpyZXR1cm4gYzZuKG4pO2Nhc2UgMzA6cmV0dXJuIEgxdCgoR2koKSxuKSk7Y2FzZSAzMTpyZXR1cm4gSDF0KG4pO2Nhc2UgMzI6cmV0dXJuIG49PW51bGw/bnVsbDpwdChPaCgoTD1UdShuLCEwKSxMLmxlbmd0aD4wJiYoWG4oMCxMLmxlbmd0aCksTC5jaGFyQ29kZUF0KDApPT00Myk/KFhuKDEsTC5sZW5ndGgrMSksTC5zdWJzdHIoMSkpOkwpLGxvLElpKSk7Y2FzZSAzMzpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBvYigoQj1UdShuLCEwKSxCLmxlbmd0aD4wJiYoWG4oMCxCLmxlbmd0aCksQi5jaGFyQ29kZUF0KDApPT00Myk/KFhuKDEsQi5sZW5ndGgrMSksQi5zdWJzdHIoMSkpOkIpKTtjYXNlIDM0OnJldHVybiBuPT1udWxsP251bGw6cHQoT2goKHo9VHUobiwhMCksei5sZW5ndGg+MCYmKFhuKDAsei5sZW5ndGgpLHouY2hhckNvZGVBdCgwKT09NDMpPyhYbigxLHoubGVuZ3RoKzEpLHouc3Vic3RyKDEpKTp6KSxsbyxJaSkpO2Nhc2UgMzY6cmV0dXJuIG49PW51bGw/bnVsbDphcChLVSgoVj1UdShuLCEwKSxWLmxlbmd0aD4wJiYoWG4oMCxWLmxlbmd0aCksVi5jaGFyQ29kZUF0KDApPT00Myk/KFhuKDEsVi5sZW5ndGgrMSksVi5zdWJzdHIoMSkpOlYpKSk7Y2FzZSAzNzpyZXR1cm4gbj09bnVsbD9udWxsOmFwKEtVKChKPVR1KG4sITApLEoubGVuZ3RoPjAmJihYbigwLEoubGVuZ3RoKSxKLmNoYXJDb2RlQXQoMCk9PTQzKT8oWG4oMSxKLmxlbmd0aCsxKSxKLnN1YnN0cigxKSk6SikpKTtjYXNlIDQwOnJldHVybiBzN24oKEdpKCksbikpO2Nhc2UgNDI6cmV0dXJuIFYxdCgoR2koKSxuKSk7Y2FzZSA0MzpyZXR1cm4gVjF0KG4pO2Nhc2UgNDQ6cmV0dXJuIG49PW51bGw/bnVsbDpuZXcgb2IoKHRlPVR1KG4sITApLHRlLmxlbmd0aD4wJiYoWG4oMCx0ZS5sZW5ndGgpLHRlLmNoYXJDb2RlQXQoMCk9PTQzKT8oWG4oMSx0ZS5sZW5ndGgrMSksdGUuc3Vic3RyKDEpKTp0ZSkpO2Nhc2UgNDU6cmV0dXJuIG49PW51bGw/bnVsbDpuZXcgb2IoKGZlPVR1KG4sITApLGZlLmxlbmd0aD4wJiYoWG4oMCxmZS5sZW5ndGgpLGZlLmNoYXJDb2RlQXQoMCk9PTQzKT8oWG4oMSxmZS5sZW5ndGgrMSksZmUuc3Vic3RyKDEpKTpmZSkpO2Nhc2UgNDY6cmV0dXJuIFR1KG4sITEpO2Nhc2UgNDc6cmV0dXJuIGVpKEt3KHRoaXMsKEdpKCksZ0F0KSxuKSk7Y2FzZSA1OTpjYXNlIDQ4OnJldHVybiBpN24oKEdpKCksbikpO2Nhc2UgNDk6cmV0dXJuIGVpKEt3KHRoaXMsKEdpKCkscEF0KSxuKSk7Y2FzZSA1MDpyZXR1cm4gbj09bnVsbD9udWxsOl9FKE9oKChUZT1UdShuLCEwKSxUZS5sZW5ndGg+MCYmKFhuKDAsVGUubGVuZ3RoKSxUZS5jaGFyQ29kZUF0KDApPT00Myk/KFhuKDEsVGUubGVuZ3RoKzEpLFRlLnN1YnN0cigxKSk6VGUpLEpHLDMyNzY3KTw8MTY+PjE2KTtjYXNlIDUxOnJldHVybiBuPT1udWxsP251bGw6X0UoT2goKGY9VHUobiwhMCksZi5sZW5ndGg+MCYmKFhuKDAsZi5sZW5ndGgpLGYuY2hhckNvZGVBdCgwKT09NDMpPyhYbigxLGYubGVuZ3RoKzEpLGYuc3Vic3RyKDEpKTpmKSxKRywzMjc2Nyk8PDE2Pj4xNik7Y2FzZSA1MzpyZXR1cm4gZWkoS3codGhpcywoR2koKSxiQXQpLG4pKTtjYXNlIDU1OnJldHVybiBuPT1udWxsP251bGw6X0UoT2goKGc9VHUobiwhMCksZy5sZW5ndGg+MCYmKFhuKDAsZy5sZW5ndGgpLGcuY2hhckNvZGVBdCgwKT09NDMpPyhYbigxLGcubGVuZ3RoKzEpLGcuc3Vic3RyKDEpKTpnKSxKRywzMjc2Nyk8PDE2Pj4xNik7Y2FzZSA1NjpyZXR1cm4gbj09bnVsbD9udWxsOl9FKE9oKCh3PVR1KG4sITApLHcubGVuZ3RoPjAmJihYbigwLHcubGVuZ3RoKSx3LmNoYXJDb2RlQXQoMCk9PTQzKT8oWG4oMSx3Lmxlbmd0aCsxKSx3LnN1YnN0cigxKSk6dyksSkcsMzI3NjcpPDwxNj4+MTYpO2Nhc2UgNTc6cmV0dXJuIG49PW51bGw/bnVsbDphcChLVSgoRT1UdShuLCEwKSxFLmxlbmd0aD4wJiYoWG4oMCxFLmxlbmd0aCksRS5jaGFyQ29kZUF0KDApPT00Myk/KFhuKDEsRS5sZW5ndGgrMSksRS5zdWJzdHIoMSkpOkUpKSk7Y2FzZSA1ODpyZXR1cm4gbj09bnVsbD9udWxsOmFwKEtVKChDPVR1KG4sITApLEMubGVuZ3RoPjAmJihYbigwLEMubGVuZ3RoKSxDLmNoYXJDb2RlQXQoMCk9PTQzKT8oWG4oMSxDLmxlbmd0aCsxKSxDLnN1YnN0cigxKSk6QykpKTtjYXNlIDYwOnJldHVybiBuPT1udWxsP251bGw6cHQoT2goKHI9VHUobiwhMCksci5sZW5ndGg+MCYmKFhuKDAsci5sZW5ndGgpLHIuY2hhckNvZGVBdCgwKT09NDMpPyhYbigxLHIubGVuZ3RoKzEpLHIuc3Vic3RyKDEpKTpyKSxsbyxJaSkpO2Nhc2UgNjE6cmV0dXJuIG49PW51bGw/bnVsbDpwdChPaChUdShuLCEwKSxsbyxJaSkpO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKHlUK3QueGUoKSt0MykpfX07dmFyIHZBdCxHUGUsd0F0LEtQZTtJKGVhLCJYTUxUeXBlRmFjdG9yeUltcGwiLDIwMjgpLEQoNTk0LDE4NCx7MTEwOjEsOTQ6MSw5MzoxLDE1NToxLDE5NzoxLDU4OjEsMjQxOjEsMTE0OjEsNTQ6MSw5OToxLDE1ODoxLDE4NDoxLDExOToxLDEyMDoxLDY5MDoxLDIwNDQ6MSw1OTQ6MX0sZGF0KSxoLk49ITEsaC5PPSExO3ZhciB5QXQ9ITE7SShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsIiw1OTQpLEQoMTk2MSwxLHs4NTE6MX0sbGspLGguS2s9ZnVuY3Rpb24oKXtyZXR1cm4geGtlKCksTEF0fSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMSIsMTk2MSksRCgxOTcwLDEseWkscVMpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzEwIiwxOTcwKSxEKDE5NzEsMSx5aSxtcmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzExIiwxOTcxKSxEKDE5NzIsMSx5aSx2cmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzEyIiwxOTcyKSxEKDE5NzMsMSx5aSxwOCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gZnkodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHRhLGR0LDM0NSx0LDcsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC8xMyIsMTk3MyksRCgxOTc0LDEseWksUiQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzE0IiwxOTc0KSxEKDE5NzUsMSx5aSxqJCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKG1mLFF5LDE1LHQsMCwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzE1IiwxOTc1KSxEKDE5NzYsMSx5aSx3cmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTUpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShtZixReSwxNSx0LDAsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC8xNiIsMTk3NiksRCgxOTc3LDEseWksJCQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzE3IiwxOTc3KSxEKDE5NzgsMSx5aSx6JCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNjEpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShfVCxkdCwxNjEsdCwwLDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMTgiLDE5NzgpLEQoMTk3OSwxLHlpLE5JKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBJYSh0KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoenQsZHQsMix0LDYsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC8xOSIsMTk3OSksRCgxOTYyLDEseWkseHJlKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDg1Nyl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKGdGLFJuLDg1Nyx0LDAsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC8yIiwxOTYyKSxEKDE5ODAsMSx5aSxIUyksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMjAiLDE5ODApLEQoMTk4MSwxLHlpLGtyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMjEiLDE5ODEpLEQoMTk4MiwxLHlpLEVyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMjIiLDE5ODIpLEQoMTk4MywxLHlpLFRyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMjMiLDE5ODMpLEQoMTk4NCwxLHlpLENyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxOTUpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShBbCxkdCwxOTUsdCwwLDIpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMjQiLDE5ODQpLEQoMTk4NSwxLHlpLFNyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMjUiLDE5ODUpLEQoMTk4NiwxLHlpLHEkKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBJYSh0KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoenQsZHQsMix0LDYsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC8yNiIsMTk4NiksRCgxOTg3LDEseWksX3JlKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE1KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UobWYsUXksMTUsdCwwLDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMjciLDE5ODcpLEQoMTk4OCwxLHlpLEFyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKG1mLFF5LDE1LHQsMCwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzI4IiwxOTg4KSxEKDE5ODksMSx5aSxMcmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzI5IiwxOTg5KSxEKDE5NjMsMSx5aSxIJCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw2ODEpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShBWSxSbiwyMTE5LHQsMCwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzMiLDE5NjMpLEQoMTk5MCwxLHlpLE1yZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNyl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHJvLGR0LDE3LHQsMCwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzMwIiwxOTkwKSxEKDE5OTEsMSx5aSxEcmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzMxIiwxOTkxKSxEKDE5OTIsMSx5aSxWUyksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNjgpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShyMyxkdCwxNjgsdCwwLDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMzIiLDE5OTIpLEQoMTk5MywxLHlpLElyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMzMiLDE5OTMpLEQoMTk5NCwxLHlpLE9yZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMzQiLDE5OTQpLEQoMTk5NSwxLHlpLE5yZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMzUiLDE5OTUpLEQoMTk5NiwxLHlpLFByZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMzYiLDE5OTYpLEQoMTk5NywxLHlpLEJyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKG1mLFF5LDE1LHQsMCwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzM3IiwxOTk3KSxEKDE5OTgsMSx5aSxGcmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTUpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShtZixReSwxNSx0LDAsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC8zOCIsMTk5OCksRCgxOTk5LDEseWksViQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzM5IiwxOTk5KSxEKDE5NjQsMSx5aSxScmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNjgyKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UocEYsUm4sMjEyMCx0LDAsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC80IiwxOTY0KSxEKDJlMywxLHlpLFUkKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBJYSh0KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoenQsZHQsMix0LDYsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC80MCIsMmUzKSxEKDIwMDEsMSx5aSxqcmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzQxIiwyMDAxKSxEKDIwMDIsMSx5aSxQSSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvNDIiLDIwMDIpLEQoMjAwMywxLHlpLCRyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvNDMiLDIwMDMpLEQoMjAwNCwxLHlpLEckKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBJYSh0KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoenQsZHQsMix0LDYsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC80NCIsMjAwNCksRCgyMDA1LDEseWksenJlKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE5MSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKGkzLGR0LDE5MSx0LDAsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC80NSIsMjAwNSksRCgyMDA2LDEseWksSyQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzQ2IiwyMDA2KSxEKDIwMDcsMSx5aSxxcmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzQ3IiwyMDA3KSxEKDIwMDgsMSx5aSxXJCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvNDgiLDIwMDgpLEQoMjAwOSwxLHlpLFkkKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE5MSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKGkzLGR0LDE5MSx0LDAsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC80OSIsMjAwOSksRCgxOTY1LDEseWksWCQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNjgzKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoVlBlLFJuLDIxMjEsdCwwLDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvNSIsMTk2NSksRCgyMDEwLDEseWksQkkpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTY4KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UocjMsZHQsMTY4LHQsMCwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzUwIiwyMDEwKSxEKDIwMTEsMSx5aSx3NSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvNTEiLDIwMTEpLEQoMjAxMiwxLHlpLFVTKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE3KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2Uocm8sZHQsMTcsdCwwLDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvNTIiLDIwMTIpLEQoMTk2NiwxLHlpLFMxKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBJYSh0KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoenQsZHQsMix0LDYsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC82IiwxOTY2KSxEKDE5NjcsMSx5aSxRJCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxOTUpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShBbCxkdCwxOTUsdCwwLDIpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvNyIsMTk2NyksRCgxOTY4LDEseWksaGspLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIGh5KHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShOcyxkdCw0ODUsdCw4LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvOCIsMTk2OCksRCgxOTY5LDEseWksRkkpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMjIyKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoangsZHQsMjIyLHQsMCwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzkiLDE5NjkpO3ZhciBuZCxOMixHTSxMWSx5ZTtEKDU1LDYzLGxwLHJpKSxJKHkyLCJSZWdFeC9QYXJzZUV4Y2VwdGlvbiIsNTUpLEQoODM2LDEse30sSiQpLGguYm09ZnVuY3Rpb24odCl7cmV0dXJuIHQ8dGhpcy5qJiZjbyh0aGlzLmksdCk9PTYzfSxoLmNtPWZ1bmN0aW9uKCl7dmFyIHQsbixyLGEsbztpZih0aGlzLmMhPTEwKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxWRykpKSk7c3dpdGNoKHQ9dGhpcy5hLHQpe2Nhc2UgMTAxOnQ9Mjc7YnJlYWs7Y2FzZSAxMDI6dD0xMjticmVhaztjYXNlIDExMDp0PTEwO2JyZWFrO2Nhc2UgMTE0OnQ9MTM7YnJlYWs7Y2FzZSAxMTY6dD05O2JyZWFrO2Nhc2UgMTIwOmlmKExpKHRoaXMpLHRoaXMuYyE9MCl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksdzIpKSkpO2lmKHRoaXMuYT09MTIzKXtvPTAscj0wO2Rve2lmKExpKHRoaXMpLHRoaXMuYyE9MCl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksdzIpKSkpO2lmKChvPVdtKHRoaXMuYSkpPDApYnJlYWs7aWYocj5yKjE2KXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxINHQpKSkpO3I9cioxNitvfXdoaWxlKCEwKTtpZih0aGlzLmEhPTEyNSl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksVjR0KSkpKTtpZihyPlRUKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxVNHQpKSkpO3Q9cn1lbHNle2lmKG89MCx0aGlzLmMhPTB8fChvPVdtKHRoaXMuYSkpPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHcyKSkpKTtpZihyPW8sTGkodGhpcyksdGhpcy5jIT0wfHwobz1XbSh0aGlzLmEpKTwwKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSx3MikpKSk7cj1yKjE2K28sdD1yfWJyZWFrO2Nhc2UgMTE3OmlmKGE9MCxMaSh0aGlzKSx0aGlzLmMhPTB8fChhPVdtKHRoaXMuYSkpPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHcyKSkpKTtpZihuPWEsTGkodGhpcyksdGhpcy5jIT0wfHwoYT1XbSh0aGlzLmEpKTwwKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSx3MikpKSk7aWYobj1uKjE2K2EsTGkodGhpcyksdGhpcy5jIT0wfHwoYT1XbSh0aGlzLmEpKTwwKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSx3MikpKSk7aWYobj1uKjE2K2EsTGkodGhpcyksdGhpcy5jIT0wfHwoYT1XbSh0aGlzLmEpKTwwKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSx3MikpKSk7bj1uKjE2K2EsdD1uO2JyZWFrO2Nhc2UgMTE4OmlmKExpKHRoaXMpLHRoaXMuYyE9MHx8KGE9V20odGhpcy5hKSk8MCl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksdzIpKSkpO2lmKG49YSxMaSh0aGlzKSx0aGlzLmMhPTB8fChhPVdtKHRoaXMuYSkpPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHcyKSkpKTtpZihuPW4qMTYrYSxMaSh0aGlzKSx0aGlzLmMhPTB8fChhPVdtKHRoaXMuYSkpPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHcyKSkpKTtpZihuPW4qMTYrYSxMaSh0aGlzKSx0aGlzLmMhPTB8fChhPVdtKHRoaXMuYSkpPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHcyKSkpKTtpZihuPW4qMTYrYSxMaSh0aGlzKSx0aGlzLmMhPTB8fChhPVdtKHRoaXMuYSkpPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHcyKSkpKTtpZihuPW4qMTYrYSxMaSh0aGlzKSx0aGlzLmMhPTB8fChhPVdtKHRoaXMuYSkpPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHcyKSkpKTtpZihuPW4qMTYrYSxuPlRUKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSwicGFyc2VyLmRlc2NhcHBlLjQiKSkpKTt0PW47YnJlYWs7Y2FzZSA2NTpjYXNlIDkwOmNhc2UgMTIyOnRocm93IHVlKG5ldyByaShhaSgoSnIoKSxHNHQpKSkpfXJldHVybiB0fSxoLmRtPWZ1bmN0aW9uKHQpe3ZhciBuLHI7c3dpdGNoKHQpe2Nhc2UgMTAwOnI9KHRoaXMuZSYzMik9PTMyP19iKCJOZCIsITApOihEaSgpLE1ZKTticmVhaztjYXNlIDY4OnI9KHRoaXMuZSYzMik9PTMyP19iKCJOZCIsITEpOihEaSgpLFpQZSk7YnJlYWs7Y2FzZSAxMTk6cj0odGhpcy5lJjMyKT09MzI/X2IoIklzV29yZCIsITApOihEaSgpLGxDKTticmVhaztjYXNlIDg3OnI9KHRoaXMuZSYzMik9PTMyP19iKCJJc1dvcmQiLCExKTooRGkoKSx0QmUpO2JyZWFrO2Nhc2UgMTE1OnI9KHRoaXMuZSYzMik9PTMyP19iKCJJc1NwYWNlIiwhMCk6KERpKCksbDkpO2JyZWFrO2Nhc2UgODM6cj0odGhpcy5lJjMyKT09MzI/X2IoIklzU3BhY2UiLCExKTooRGkoKSxlQmUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgdWUobmV3IEFjKChuPXQsRzV0K24udG9TdHJpbmcoMTYpKSkpfXJldHVybiByfSxoLmVtPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIsejtmb3IodGhpcy5iPTEsTGkodGhpcyksbj1udWxsLHRoaXMuYz09MCYmdGhpcy5hPT05ND8oTGkodGhpcyksdD9MPShEaSgpLERpKCksbmV3IF9oKDUpKToobj0oRGkoKSxEaSgpLG5ldyBfaCg0KSksRXUobiwwLFRUKSxMPW5ldyBfaCg0KSkpOkw9KERpKCksRGkoKSxuZXcgX2goNCkpLG89ITA7KHo9dGhpcy5jKSE9MSYmISh6PT0wJiZ0aGlzLmE9PTkzJiYhbyk7KXtpZihvPSExLHI9dGhpcy5hLGE9ITEsej09MTApc3dpdGNoKHIpe2Nhc2UgMTAwOmNhc2UgNjg6Y2FzZSAxMTk6Y2FzZSA4NzpjYXNlIDExNTpjYXNlIDgzOkt5KEwsdGhpcy5kbShyKSksYT0hMDticmVhaztjYXNlIDEwNTpjYXNlIDczOmNhc2UgOTk6Y2FzZSA2NzpyPXRoaXMudW0oTCxyKSxyPDAmJihhPSEwKTticmVhaztjYXNlIDExMjpjYXNlIDgwOmlmKEI9dzllKHRoaXMsciksIUIpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHQwZSkpKSk7S3koTCxCKSxhPSEwO2JyZWFrO2RlZmF1bHQ6cj10aGlzLmNtKCl9ZWxzZSBpZih6PT0yMCl7aWYoZz1Oayh0aGlzLmksNTgsdGhpcy5kKSxnPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGtTZSkpKSk7aWYodz0hMCxjbyh0aGlzLmksdGhpcy5kKT09OTQmJigrK3RoaXMuZCx3PSExKSxmPXRmKHRoaXMuaSx0aGlzLmQsZyksRT12bHQoZix3LCh0aGlzLmUmNTEyKT09NTEyKSwhRSl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksUjR0KSkpKTtpZihLeShMLEUpLGE9ITAsZysxPj10aGlzLmp8fGNvKHRoaXMuaSxnKzEpIT05Myl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksa1NlKSkpKTt0aGlzLmQ9ZysyfWlmKExpKHRoaXMpLCFhKWlmKHRoaXMuYyE9MHx8dGhpcy5hIT00NSlFdShMLHIscik7ZWxzZXtpZihMaSh0aGlzKSwoej10aGlzLmMpPT0xKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxVRykpKSk7ej09MCYmdGhpcy5hPT05Mz8oRXUoTCxyLHIpLEV1KEwsNDUsNDUpKTooQz10aGlzLmEsej09MTAmJihDPXRoaXMuY20oKSksTGkodGhpcyksRXUoTCxyLEMpKX0odGhpcy5lJm0wKT09bTAmJnRoaXMuYz09MCYmdGhpcy5hPT00NCYmTGkodGhpcyl9aWYodGhpcy5jPT0xKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxVRykpKSk7cmV0dXJuIG4mJihuTChuLEwpLEw9biksYzYoTCksZUwoTCksdGhpcy5iPTAsTGkodGhpcyksTH0saC5mbT1mdW5jdGlvbigpe3ZhciB0LG4scixhO2ZvcihyPXRoaXMuZW0oITEpOyhhPXRoaXMuYykhPTc7KWlmKHQ9dGhpcy5hLGE9PTAmJih0PT00NXx8dD09MzgpfHxhPT00KXtpZihMaSh0aGlzKSx0aGlzLmMhPTkpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLCQ0dCkpKSk7aWYobj10aGlzLmVtKCExKSxhPT00KUt5KHIsbik7ZWxzZSBpZih0PT00NSluTChyLG4pO2Vsc2UgaWYodD09MzgpQ3Z0KHIsbik7ZWxzZSB0aHJvdyB1ZShuZXcgQWMoIkFTU0VSVCIpKX1lbHNlIHRocm93IHVlKG5ldyByaShhaSgoSnIoKSx6NHQpKSkpO3JldHVybiBMaSh0aGlzKSxyfSxoLmdtPWZ1bmN0aW9uKCl7dmFyIHQsbjtyZXR1cm4gdD10aGlzLmEtNDgsbj0oRGkoKSxEaSgpLG5ldyBjb2UoMTIsbnVsbCx0KSksIXRoaXMuZyYmKHRoaXMuZz1uZXcganopLFJ6KHRoaXMuZyxuZXcgRXdlKHQpKSxMaSh0aGlzKSxufSxoLmhtPWZ1bmN0aW9uKCl7cmV0dXJuIExpKHRoaXMpLERpKCksRUF0fSxoLmltPWZ1bmN0aW9uKCl7cmV0dXJuIExpKHRoaXMpLERpKCksa0F0fSxoLmptPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC5rbT1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyByaShhaSgoSnIoKSxiZikpKSl9LGgubG09ZnVuY3Rpb24oKXtyZXR1cm4gTGkodGhpcyksRXluKCl9LGgubW09ZnVuY3Rpb24oKXtyZXR1cm4gTGkodGhpcyksRGkoKSxDQXR9LGgubm09ZnVuY3Rpb24oKXtyZXR1cm4gTGkodGhpcyksRGkoKSxfQXR9LGgub209ZnVuY3Rpb24oKXt2YXIgdDtpZih0aGlzLmQ+PXRoaXMuanx8KCh0PWNvKHRoaXMuaSx0aGlzLmQrKykpJjY1NTA0KSE9NjQpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLFA0dCkpKSk7cmV0dXJuIExpKHRoaXMpLERpKCksRGkoKSxuZXcgbmcoMCx0LTY0KX0saC5wbT1mdW5jdGlvbigpe3JldHVybiBMaSh0aGlzKSxTQW4oKX0saC5xbT1mdW5jdGlvbigpe3JldHVybiBMaSh0aGlzKSxEaSgpLEFBdH0saC5ybT1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PShEaSgpLERpKCksbmV3IG5nKDAsMTA1KSksTGkodGhpcyksdH0saC5zbT1mdW5jdGlvbigpe3JldHVybiBMaSh0aGlzKSxEaSgpLFNBdH0saC50bT1mdW5jdGlvbigpe3JldHVybiBMaSh0aGlzKSxEaSgpLFRBdH0saC51bT1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLmNtKCl9LGgudm09ZnVuY3Rpb24oKXtyZXR1cm4gTGkodGhpcyksRGkoKSxRUGV9LGgud209ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYSxvO2lmKHRoaXMuZCsxPj10aGlzLmopdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLEk0dCkpKSk7aWYoYT0tMSxuPW51bGwsdD1jbyh0aGlzLmksdGhpcy5kKSw0OTw9dCYmdDw9NTcpe2lmKGE9dC00OCwhdGhpcy5nJiYodGhpcy5nPW5ldyBqeiksUnoodGhpcy5nLG5ldyBFd2UoYSkpLCsrdGhpcy5kLGNvKHRoaXMuaSx0aGlzLmQpIT00MSl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksb3YpKSkpOysrdGhpcy5kfWVsc2Ugc3dpdGNoKHQ9PTYzJiYtLXRoaXMuZCxMaSh0aGlzKSxuPUdrZSh0aGlzKSxuLmUpe2Nhc2UgMjA6Y2FzZSAyMTpjYXNlIDIyOmNhc2UgMjM6YnJlYWs7Y2FzZSA4OmlmKHRoaXMuYyE9Nyl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksb3YpKSkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLE80dCkpKSl9aWYoTGkodGhpcyksbz1qdyh0aGlzKSxyPW51bGwsby5lPT0yKXtpZihvLlBtKCkhPTIpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLE40dCkpKSk7cj1vLkxtKDEpLG89by5MbSgwKX1pZih0aGlzLmMhPTcpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLG92KSkpKTtyZXR1cm4gTGkodGhpcyksRGkoKSxEaSgpLG5ldyBabHQoYSxuLG8scil9LGgueG09ZnVuY3Rpb24oKXtyZXR1cm4gTGkodGhpcyksRGkoKSxKUGV9LGgueW09ZnVuY3Rpb24oKXt2YXIgdDtpZihMaSh0aGlzKSx0PWJIKDI0LGp3KHRoaXMpKSx0aGlzLmMhPTcpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLG92KSkpKTtyZXR1cm4gTGkodGhpcyksdH0saC56bT1mdW5jdGlvbigpe3ZhciB0O2lmKExpKHRoaXMpLHQ9YkgoMjAsancodGhpcykpLHRoaXMuYyE9Nyl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksb3YpKSkpO3JldHVybiBMaSh0aGlzKSx0fSxoLkFtPWZ1bmN0aW9uKCl7dmFyIHQ7aWYoTGkodGhpcyksdD1iSCgyMixqdyh0aGlzKSksdGhpcy5jIT03KXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxvdikpKSk7cmV0dXJuIExpKHRoaXMpLHR9LGguQm09ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYSxvO2Zvcih0PTAscj0wLG49LTE7dGhpcy5kPHRoaXMuaiYmKG49Y28odGhpcy5pLHRoaXMuZCksbz1DOWUobiksbyE9MCk7KXR8PW8sKyt0aGlzLmQ7aWYodGhpcy5kPj10aGlzLmopdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHlTZSkpKSk7aWYobj09NDUpe2ZvcigrK3RoaXMuZDt0aGlzLmQ8dGhpcy5qJiYobj1jbyh0aGlzLmksdGhpcy5kKSxvPUM5ZShuKSxvIT0wKTspcnw9bywrK3RoaXMuZDtpZih0aGlzLmQ+PXRoaXMuail0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCkseVNlKSkpKX1pZihuPT01OCl7aWYoKyt0aGlzLmQsTGkodGhpcyksYT1Xc3QoancodGhpcyksdCxyKSx0aGlzLmMhPTcpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLG92KSkpKTtMaSh0aGlzKX1lbHNlIGlmKG49PTQxKSsrdGhpcy5kLExpKHRoaXMpLGE9V3N0KGp3KHRoaXMpLHQscik7ZWxzZSB0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksRDR0KSkpKTtyZXR1cm4gYX0saC5DbT1mdW5jdGlvbigpe3ZhciB0O2lmKExpKHRoaXMpLHQ9YkgoMjEsancodGhpcykpLHRoaXMuYyE9Nyl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksb3YpKSkpO3JldHVybiBMaSh0aGlzKSx0fSxoLkRtPWZ1bmN0aW9uKCl7dmFyIHQ7aWYoTGkodGhpcyksdD1iSCgyMyxqdyh0aGlzKSksdGhpcy5jIT03KXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxvdikpKSk7cmV0dXJuIExpKHRoaXMpLHR9LGguRW09ZnVuY3Rpb24oKXt2YXIgdCxuO2lmKExpKHRoaXMpLHQ9dGhpcy5mKyssbj1CYWUoancodGhpcyksdCksdGhpcy5jIT03KXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxvdikpKSk7cmV0dXJuIExpKHRoaXMpLG59LGguRm09ZnVuY3Rpb24oKXt2YXIgdDtpZihMaSh0aGlzKSx0PUJhZShqdyh0aGlzKSwwKSx0aGlzLmMhPTcpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLG92KSkpKTtyZXR1cm4gTGkodGhpcyksdH0saC5HbT1mdW5jdGlvbih0KXtyZXR1cm4gTGkodGhpcyksdGhpcy5jPT01PyhMaSh0aGlzKSxvSCh0LChEaSgpLERpKCksbmV3IFR5KDksdCkpKSk6b0godCwoRGkoKSxEaSgpLG5ldyBUeSgzLHQpKSl9LGguSG09ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIExpKHRoaXMpLG49KERpKCksRGkoKSxuZXcgQl8oMikpLHRoaXMuYz09NT8oTGkodGhpcyksUW0obixXTSksUW0obix0KSk6KFFtKG4sdCksUW0obixXTSkpLG59LGguSW09ZnVuY3Rpb24odCl7cmV0dXJuIExpKHRoaXMpLHRoaXMuYz09NT8oTGkodGhpcyksRGkoKSxEaSgpLG5ldyBUeSg5LHQpKTooRGkoKSxEaSgpLG5ldyBUeSgzLHQpKX0saC5hPTAsaC5iPTAsaC5jPTAsaC5kPTAsaC5lPTAsaC5mPTEsaC5nPW51bGwsaC5qPTAsSSh5MiwiUmVnRXgvUmVnZXhQYXJzZXIiLDgzNiksRCgxOTQ3LDgzNix7fSxnSmUpLGguYm09ZnVuY3Rpb24odCl7cmV0dXJuITF9LGguY209ZnVuY3Rpb24oKXtyZXR1cm4gZWtlKHRoaXMpfSxoLmRtPWZ1bmN0aW9uKHQpe3JldHVybiBZRSh0KX0saC5lbT1mdW5jdGlvbih0KXtyZXR1cm4geXd0KHRoaXMpfSxoLmZtPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC5nbT1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyByaShhaSgoSnIoKSxiZikpKSl9LGguaG09ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfSxoLmltPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC5qbT1mdW5jdGlvbigpe3JldHVybiBMaSh0aGlzKSxZRSg2Nyl9LGgua209ZnVuY3Rpb24oKXtyZXR1cm4gTGkodGhpcyksWUUoNzMpfSxoLmxtPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC5tbT1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyByaShhaSgoSnIoKSxiZikpKSl9LGgubm09ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfSxoLm9tPWZ1bmN0aW9uKCl7cmV0dXJuIExpKHRoaXMpLFlFKDk5KX0saC5wbT1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyByaShhaSgoSnIoKSxiZikpKSl9LGgucW09ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfSxoLnJtPWZ1bmN0aW9uKCl7cmV0dXJuIExpKHRoaXMpLFlFKDEwNSl9LGguc209ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfSxoLnRtPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC51bT1mdW5jdGlvbih0LG4pe3JldHVybiBLeSh0LFlFKG4pKSwtMX0saC52bT1mdW5jdGlvbigpe3JldHVybiBMaSh0aGlzKSxEaSgpLERpKCksbmV3IG5nKDAsOTQpfSxoLndtPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC54bT1mdW5jdGlvbigpe3JldHVybiBMaSh0aGlzKSxEaSgpLERpKCksbmV3IG5nKDAsMzYpfSxoLnltPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC56bT1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyByaShhaSgoSnIoKSxiZikpKSl9LGguQW09ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfSxoLkJtPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC5DbT1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyByaShhaSgoSnIoKSxiZikpKSl9LGguRG09ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfSxoLkVtPWZ1bmN0aW9uKCl7dmFyIHQ7aWYoTGkodGhpcyksdD1CYWUoancodGhpcyksMCksdGhpcy5jIT03KXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxvdikpKSk7cmV0dXJuIExpKHRoaXMpLHR9LGguRm09ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfSxoLkdtPWZ1bmN0aW9uKHQpe3JldHVybiBMaSh0aGlzKSxvSCh0LChEaSgpLERpKCksbmV3IFR5KDMsdCkpKX0saC5IbT1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gTGkodGhpcyksbj0oRGkoKSxEaSgpLG5ldyBCXygyKSksUW0obix0KSxRbShuLFdNKSxufSxoLkltPWZ1bmN0aW9uKHQpe3JldHVybiBMaSh0aGlzKSxEaSgpLERpKCksbmV3IFR5KDMsdCl9O3ZhciBsNz1udWxsLGNDPW51bGw7SSh5MiwiUmVnRXgvUGFyc2VyRm9yWE1MU2NoZW1hIiwxOTQ3KSxEKDEyMiwxLENULFh2KSxoLkptPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBBYygiTm90IHN1cHBvcnRlZC4iKSl9LGguS209ZnVuY3Rpb24oKXtyZXR1cm4tMX0saC5MbT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0saC5NbT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLk5tPWZ1bmN0aW9uKHQpe30saC5PbT1mdW5jdGlvbih0KXt9LGguUG09ZnVuY3Rpb24oKXtyZXR1cm4gMH0saC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLlFtKDApfSxoLlFtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmU9PTExPyIuIjoiIn0saC5lPTA7dmFyIFdQZSx1QyxLTSx4QXQsWVBlLFA0PW51bGwsTVksY3BlPW51bGwsWFBlLFdNLHVwZT1udWxsLFFQZSxKUGUsWlBlLGVCZSx0QmUsa0F0LGw5LEVBdCxUQXQsQ0F0LFNBdCxsQyxfQXQsQUF0LEJPbj1JKHkyLCJSZWdFeC9Ub2tlbiIsMTIyKTtEKDEzOCwxMjIsezM6MSwxMzg6MSwxMjI6MX0sX2gpLGguUW09ZnVuY3Rpb24odCl7dmFyIG4scixhO2lmKHRoaXMuZT09NClpZih0aGlzPT1YUGUpcj0iLiI7ZWxzZSBpZih0aGlzPT1NWSlyPSJcXGQiO2Vsc2UgaWYodGhpcz09bEMpcj0iXFx3IjtlbHNlIGlmKHRoaXM9PWw5KXI9IlxccyI7ZWxzZXtmb3IoYT1uZXcgVXAsYS5hKz0iWyIsbj0wO248dGhpcy5iLmxlbmd0aDtuKz0yKXQmbTAmJm4+MCYmKGEuYSs9IiwiKSx0aGlzLmJbbl09PT10aGlzLmJbbisxXT9YbyhhLGdQKHRoaXMuYltuXSkpOihYbyhhLGdQKHRoaXMuYltuXSkpLGEuYSs9Ii0iLFhvKGEsZ1AodGhpcy5iW24rMV0pKSk7YS5hKz0iXSIscj1hLmF9ZWxzZSBpZih0aGlzPT1aUGUpcj0iXFxEIjtlbHNlIGlmKHRoaXM9PXRCZSlyPSJcXFciO2Vsc2UgaWYodGhpcz09ZUJlKXI9IlxcUyI7ZWxzZXtmb3IoYT1uZXcgVXAsYS5hKz0iW14iLG49MDtuPHRoaXMuYi5sZW5ndGg7bis9Mil0Jm0wJiZuPjAmJihhLmErPSIsIiksdGhpcy5iW25dPT09dGhpcy5iW24rMV0/WG8oYSxnUCh0aGlzLmJbbl0pKTooWG8oYSxnUCh0aGlzLmJbbl0pKSxhLmErPSItIixYbyhhLGdQKHRoaXMuYltuKzFdKSkpO2EuYSs9Il0iLHI9YS5hfXJldHVybiByfSxoLmE9ITEsaC5jPSExLEkoeTIsIlJlZ0V4L1JhbmdlVG9rZW4iLDEzOCksRCg1OTIsMSx7NTkyOjF9LEV3ZSksaC5hPTAsSSh5MiwiUmVnRXgvUmVnZXhQYXJzZXIvUmVmZXJlbmNlUG9zaXRpb24iLDU5MiksRCg1OTEsMSx7MzoxLDU5MToxfSxMWmUpLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHQ9PW51bGx8fCFEZSh0LDU5MSk/ITE6KG49bCh0LDU5MSksdm4odGhpcy5iLG4uYikmJnRoaXMuYT09bi5hKX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBzMih0aGlzLmIrIi8iK0s5ZSh0aGlzLmEpKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuUW0odGhpcy5hKX0saC5hPTAsSSh5MiwiUmVnRXgvUmVndWxhckV4cHJlc3Npb24iLDU5MSksRCgyMjgsMTIyLENULG5nKSxoLkttPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5RbT1mdW5jdGlvbih0KXt2YXIgbixyLGE7c3dpdGNoKHRoaXMuZSl7Y2FzZSAwOnN3aXRjaCh0aGlzLmEpe2Nhc2UgMTI0OmNhc2UgNDI6Y2FzZSA0MzpjYXNlIDYzOmNhc2UgNDA6Y2FzZSA0MTpjYXNlIDQ2OmNhc2UgOTE6Y2FzZSAxMjM6Y2FzZSA5MjphPSJcXCIraGFlKHRoaXMuYSZacyk7YnJlYWs7Y2FzZSAxMjphPSJcXGYiO2JyZWFrO2Nhc2UgMTA6YT0iXFxuIjticmVhaztjYXNlIDEzOmE9IlxcciI7YnJlYWs7Y2FzZSA5OmE9IlxcdCI7YnJlYWs7Y2FzZSAyNzphPSJcXGUiO2JyZWFrO2RlZmF1bHQ6dGhpcy5hPj1Jbz8ocj0obj10aGlzLmE+Pj4wLCIwIituLnRvU3RyaW5nKDE2KSksYT0iXFx2Iit0ZihyLHIubGVuZ3RoLTYsci5sZW5ndGgpKTphPSIiK2hhZSh0aGlzLmEmWnMpfWJyZWFrO2Nhc2UgODp0aGlzPT1RUGV8fHRoaXM9PUpQZT9hPSIiK2hhZSh0aGlzLmEmWnMpOmE9IlxcIitoYWUodGhpcy5hJlpzKTticmVhaztkZWZhdWx0OmE9bnVsbH1yZXR1cm4gYX0saC5hPTAsSSh5MiwiUmVnRXgvVG9rZW4vQ2hhclRva2VuIiwyMjgpLEQoMzE4LDEyMixDVCxUeSksaC5MbT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hfSxoLk5tPWZ1bmN0aW9uKHQpe3RoaXMuYj10fSxoLk9tPWZ1bmN0aW9uKHQpe3RoaXMuYz10fSxoLlBtPWZ1bmN0aW9uKCl7cmV0dXJuIDF9LGguUW09ZnVuY3Rpb24odCl7dmFyIG47aWYodGhpcy5lPT0zKWlmKHRoaXMuYzwwJiZ0aGlzLmI8MCluPXRoaXMuYS5RbSh0KSsiKiI7ZWxzZSBpZih0aGlzLmM9PXRoaXMuYiluPXRoaXMuYS5RbSh0KSsieyIrdGhpcy5jKyJ9IjtlbHNlIGlmKHRoaXMuYz49MCYmdGhpcy5iPj0wKW49dGhpcy5hLlFtKHQpKyJ7Iit0aGlzLmMrIiwiK3RoaXMuYisifSI7ZWxzZSBpZih0aGlzLmM+PTAmJnRoaXMuYjwwKW49dGhpcy5hLlFtKHQpKyJ7Iit0aGlzLmMrIix9IjtlbHNlIHRocm93IHVlKG5ldyBBYygiVG9rZW4jdG9TdHJpbmcoKTogQ0xPU1VSRSAiK3RoaXMuYytDbyt0aGlzLmIpKTtlbHNlIGlmKHRoaXMuYzwwJiZ0aGlzLmI8MCluPXRoaXMuYS5RbSh0KSsiKj8iO2Vsc2UgaWYodGhpcy5jPT10aGlzLmIpbj10aGlzLmEuUW0odCkrInsiK3RoaXMuYysifT8iO2Vsc2UgaWYodGhpcy5jPj0wJiZ0aGlzLmI+PTApbj10aGlzLmEuUW0odCkrInsiK3RoaXMuYysiLCIrdGhpcy5iKyJ9PyI7ZWxzZSBpZih0aGlzLmM+PTAmJnRoaXMuYjwwKW49dGhpcy5hLlFtKHQpKyJ7Iit0aGlzLmMrIix9PyI7ZWxzZSB0aHJvdyB1ZShuZXcgQWMoIlRva2VuI3RvU3RyaW5nKCk6IE5PTkdSRUVEWUNMT1NVUkUgIit0aGlzLmMrQ28rdGhpcy5iKSk7cmV0dXJuIG59LGguYj0wLGguYz0wLEkoeTIsIlJlZ0V4L1Rva2VuL0Nsb3N1cmVUb2tlbiIsMzE4KSxEKDgzNywxMjIsQ1QsZjVlKSxoLkxtPWZ1bmN0aW9uKHQpe3JldHVybiB0PT0wP3RoaXMuYTp0aGlzLmJ9LGguUG09ZnVuY3Rpb24oKXtyZXR1cm4gMn0saC5RbT1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gdGhpcy5iLmU9PTMmJnRoaXMuYi5MbSgwKT09dGhpcy5hP249dGhpcy5hLlFtKHQpKyIrIjp0aGlzLmIuZT09OSYmdGhpcy5iLkxtKDApPT10aGlzLmE/bj10aGlzLmEuUW0odCkrIis/IjpuPXRoaXMuYS5RbSh0KSsoIiIrdGhpcy5iLlFtKHQpKSxufSxJKHkyLCJSZWdFeC9Ub2tlbi9Db25jYXRUb2tlbiIsODM3KSxEKDE5NDUsMTIyLENULFpsdCksaC5MbT1mdW5jdGlvbih0KXtpZih0PT0wKXJldHVybiB0aGlzLmQ7aWYodD09MSlyZXR1cm4gdGhpcy5iO3Rocm93IHVlKG5ldyBBYygiSW50ZXJuYWwgRXJyb3I6ICIrdCkpfSxoLlBtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYj8yOjF9LGguUW09ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHRoaXMuYz4wP249Iig/KCIrdGhpcy5jKyIpIjp0aGlzLmEuZT09OD9uPSIoPygiK3RoaXMuYSsiKSI6bj0iKD8iK3RoaXMuYSx0aGlzLmI/bis9dGhpcy5kKyJ8Iit0aGlzLmIrIikiOm4rPXRoaXMuZCsiKSIsbn0saC5jPTAsSSh5MiwiUmVnRXgvVG9rZW4vQ29uZGl0aW9uVG9rZW4iLDE5NDUpLEQoMTk0NiwxMjIsQ1QsSG90KSxoLkxtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJ9LGguUG09ZnVuY3Rpb24oKXtyZXR1cm4gMX0saC5RbT1mdW5jdGlvbih0KXtyZXR1cm4iKD8iKyh0aGlzLmE9PTA/IiI6SzllKHRoaXMuYSkpKyh0aGlzLmM9PTA/IiI6SzllKHRoaXMuYykpKyI6Iit0aGlzLmIuUW0odCkrIikifSxoLmE9MCxoLmM9MCxJKHkyLCJSZWdFeC9Ub2tlbi9Nb2RpZmllclRva2VuIiwxOTQ2KSxEKDgzOCwxMjIsQ1QsazVlKSxoLkxtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmF9LGguUG09ZnVuY3Rpb24oKXtyZXR1cm4gMX0saC5RbT1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2gobj1udWxsLHRoaXMuZSl7Y2FzZSA2OnRoaXMuYj09MD9uPSIoPzoiK3RoaXMuYS5RbSh0KSsiKSI6bj0iKCIrdGhpcy5hLlFtKHQpKyIpIjticmVhaztjYXNlIDIwOm49Iig/PSIrdGhpcy5hLlFtKHQpKyIpIjticmVhaztjYXNlIDIxOm49Iig/ISIrdGhpcy5hLlFtKHQpKyIpIjticmVhaztjYXNlIDIyOm49Iig/PD0iK3RoaXMuYS5RbSh0KSsiKSI7YnJlYWs7Y2FzZSAyMzpuPSIoPzwhIit0aGlzLmEuUW0odCkrIikiO2JyZWFrO2Nhc2UgMjQ6bj0iKD8+Iit0aGlzLmEuUW0odCkrIikifXJldHVybiBufSxoLmI9MCxJKHkyLCJSZWdFeC9Ub2tlbi9QYXJlblRva2VuIiw4MzgpLEQoNTMwLDEyMix7MzoxLDEyMjoxLDUzMDoxfSxjb2UpLGguTW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLlFtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmU9PTEyPyJcXCIrdGhpcy5hOnZUbih0aGlzLmIpfSxoLmE9MCxJKHkyLCJSZWdFeC9Ub2tlbi9TdHJpbmdUb2tlbiIsNTMwKSxEKDQ3NywxMjIsQ1QsQl8pLGguSm09ZnVuY3Rpb24odCl7UW0odGhpcyx0KX0saC5MbT1mdW5jdGlvbih0KXtyZXR1cm4gbCh4dyh0aGlzLmEsdCksMTIyKX0saC5QbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE/dGhpcy5hLmEuYy5sZW5ndGg6MH0saC5RbT1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmO2lmKHRoaXMuZT09MSl7aWYodGhpcy5hLmEuYy5sZW5ndGg9PTIpbj1sKHh3KHRoaXMuYSwwKSwxMjIpLHI9bCh4dyh0aGlzLmEsMSksMTIyKSxyLmU9PTMmJnIuTG0oMCk9PW4/bz1uLlFtKHQpKyIrIjpyLmU9PTkmJnIuTG0oMCk9PW4/bz1uLlFtKHQpKyIrPyI6bz1uLlFtKHQpKygiIityLlFtKHQpKTtlbHNle2ZvcihmPW5ldyBVcCxhPTA7YTx0aGlzLmEuYS5jLmxlbmd0aDthKyspWG8oZixsKHh3KHRoaXMuYSxhKSwxMjIpLlFtKHQpKTtvPWYuYX1yZXR1cm4gb31pZih0aGlzLmEuYS5jLmxlbmd0aD09MiYmbCh4dyh0aGlzLmEsMSksMTIyKS5lPT03KW89bCh4dyh0aGlzLmEsMCksMTIyKS5RbSh0KSsiPyI7ZWxzZSBpZih0aGlzLmEuYS5jLmxlbmd0aD09MiYmbCh4dyh0aGlzLmEsMCksMTIyKS5lPT03KW89bCh4dyh0aGlzLmEsMSksMTIyKS5RbSh0KSsiPz8iO2Vsc2V7Zm9yKGY9bmV3IFVwLFhvKGYsbCh4dyh0aGlzLmEsMCksMTIyKS5RbSh0KSksYT0xO2E8dGhpcy5hLmEuYy5sZW5ndGg7YSsrKWYuYSs9InwiLFhvKGYsbCh4dyh0aGlzLmEsYSksMTIyKS5RbSh0KSk7bz1mLmF9cmV0dXJuIG99LEkoeTIsIlJlZ0V4L1Rva2VuL1VuaW9uVG9rZW4iLDQ3NyksRCg1MjcsMSx7NjAwOjF9LEpJKSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5ifSxJKFg1dCwiWE1MVHlwZVV0aWwvUGF0dGVybk1hdGNoZXJJbXBsIiw1MjcpLEQoMTcwNywxNTI3LHt9LGttKTt2YXIgTEF0O0koWDV0LCJYTUxUeXBlVmFsaWRhdG9yIiwxNzA3KSxEKDI3MCwxLGhnLERtKSxoLkpjPWZ1bmN0aW9uKHQpe3RvKHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iLXRoaXMuYSkqdGhpcy5jPDA/dG06bmV3IGNiKHRoaXMpfSxoLmE9MCxoLmI9MCxoLmM9MDt2YXIgdG07SSh6U2UsIkV4Y2x1c2l2ZVJhbmdlIiwyNzApLEQoMTA4NCwxLGxnLFokKSxoLlJiPWZ1bmN0aW9uKHQpe2wodCwxNyksWmxuKCl9LGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5QYj1mdW5jdGlvbigpe3JldHVybiB6dW4oKX0saC5VYj1mdW5jdGlvbigpe3JldHVybiBxdW4oKX0saC5XYj1mdW5jdGlvbih0KXtsKHQsMTcpLHRobigpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguU2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5UYj1mdW5jdGlvbigpe3JldHVybi0xfSxoLlZiPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGguUWI9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgSHAoWjV0KSl9LEkoelNlLCJFeGNsdXNpdmVSYW5nZS8xIiwxMDg0KSxEKDI1OCwxLGxnLGNiKSxoLlJiPWZ1bmN0aW9uKHQpe2wodCwxNyksZWhuKCl9LGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5QYj1mdW5jdGlvbigpe3JldHVybiBXeW4odGhpcyl9LGguVWI9ZnVuY3Rpb24oKXtyZXR1cm4gQnZuKHRoaXMpfSxoLldiPWZ1bmN0aW9uKHQpe2wodCwxNyksbmhuKCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmM8MD90aGlzLmE+PXRoaXMuYy5iOnRoaXMuYTw9dGhpcy5jLmJ9LGguU2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iPjB9LGguVGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLlZiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi0xfSxoLlFiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IEhwKFo1dCkpfSxoLmE9MCxoLmI9MCxJKHpTZSwiRXhjbHVzaXZlUmFuZ2UvUmFuZ2VJdGVyYXRvciIsMjU4KTt2YXIga2Y9R2soR0csIkMiKSxWcj1HayhMTCwiSSIpLGloPUdrKEN4LCJaIiksbm09R2soTUwsIkoiKSxBbD1HayhTTCwiQiIpLE5hPUdrKF9MLCJEIiksQjQ9R2soQUwsIkYiKSxoNz1HayhETCwiUyIpLEZPbj1rcygib3JnLmVjbGlwc2UuZWxrLmNvcmUubGFiZWxzIiwiSUxhYmVsTWFuYWdlciIpLG5CZT1rcyhTbywiRGlhZ25vc3RpY0NoYWluIiksckJlPWtzKF81dCwiUmVzb3VyY2VTZXQiKSxpQmU9SShTbywiSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiIsbnVsbCksTUF0PShIeigpLFFtbiksREF0PURBdD1xOG47VnduKCRjbiksJHduKCJwZXJtUHJvcHMiLFtbWyJsb2NhbGUiLCJkZWZhdWx0Il0sW2U2dCwiZ2Vja28xXzgiXV0sW1sibG9jYWxlIiwiZGVmYXVsdCJdLFtlNnQsInNhZmFyaSJdXV0pLERBdChudWxsLCJlbGsiLG51bGwpfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0eXBlb2YgQWc8InUiP0FnOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwzOltmdW5jdGlvbih1LGQscCl7ZnVuY3Rpb24gdihBLFApe2lmKCEoQSBpbnN0YW5jZW9mIFApKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGIoQSxQKXtpZighQSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBQJiYodHlwZW9mIFA9PSJvYmplY3QifHx0eXBlb2YgUD09ImZ1bmN0aW9uIik/UDpBfWZ1bmN0aW9uIHkoQSxQKXtpZih0eXBlb2YgUCE9ImZ1bmN0aW9uIiYmUCE9PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiBQKTtBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFAmJlAucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6QSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxQJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihBLFApOkEuX19wcm90b19fPVApfXZhciBUPXUoIi4vZWxrLWFwaS5qcyIpLmRlZmF1bHQsXz1mdW5jdGlvbihBKXt5KFAsQSk7ZnVuY3Rpb24gUCgpe3ZhciBSPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp7fTt2KHRoaXMsUCk7dmFyIEY9T2JqZWN0LmFzc2lnbih7fSxSKSxqPSExO3RyeXt1LnJlc29sdmUoIndlYi13b3JrZXIiKSxqPSEwfWNhdGNoe31pZihSLndvcmtlclVybClpZihqKXt2YXIgSz11KCJ3ZWItd29ya2VyIik7Ri53b3JrZXJGYWN0b3J5PWZ1bmN0aW9uKG9lKXtyZXR1cm4gbmV3IEsob2UpfX1lbHNlIGNvbnNvbGUud2FybihgV2ViIHdvcmtlciByZXF1ZXN0ZWQgYnV0ICd3ZWItd29ya2VyJyBwYWNrYWdlIG5vdCBpbnN0YWxsZWQuIApDb25zaWRlciBpbnN0YWxsaW5nIHRoZSBwYWNrYWdlIG9yIHBhc3MgeW91ciBvd24gJ3dvcmtlckZhY3RvcnknIHRvIEVMSydzIGNvbnN0cnVjdG9yLgouLi4gRmFsbGluZyBiYWNrIHRvIG5vbi13ZWIgd29ya2VyIHZlcnNpb24uYCk7aWYoIUYud29ya2VyRmFjdG9yeSl7dmFyIGVlPXUoIi4vZWxrLXdvcmtlci5taW4uanMiKSxpZT1lZS5Xb3JrZXI7Ri53b3JrZXJGYWN0b3J5PWZ1bmN0aW9uKG9lKXtyZXR1cm4gbmV3IGllKG9lKX19cmV0dXJuIGIodGhpcywoUC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihQKSkuY2FsbCh0aGlzLEYpKX1yZXR1cm4gUH0oVCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGQuZXhwb3J0cywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZC5leHBvcnRzPV8sXy5kZWZhdWx0PV99LHsiLi9lbGstYXBpLmpzIjoxLCIuL2Vsay13b3JrZXIubWluLmpzIjoyLCJ3ZWItd29ya2VyIjo0fV0sNDpbZnVuY3Rpb24odSxkLHApe2QuZXhwb3J0cz1Xb3JrZXJ9LHt9XX0se30sWzNdKSgzKX0pfSkoSEtlKTt2YXIgQ2FuPUhLZS5leHBvcnRzO2NvbnN0IFNhbj1oQyhDYW4pLFZLZT1uZXcgU2FuO2xldCBIdj17fTtjb25zdCBfYW49e307bGV0IFc3PXt9O2NvbnN0IEFhbj1hc3luYyBmdW5jdGlvbihpLHMsdSxkLHAsdixiKXtjb25zdCBUPXUuc2VsZWN0KGBbaWQ9IiR7c30iXWApLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZXMiKSxfPU9iamVjdC5rZXlzKGkpO3JldHVybiBhd2FpdCBQcm9taXNlLmFsbChfLm1hcChhc3luYyBmdW5jdGlvbihBKXtjb25zdCBQPWlbQV07bGV0IFI9ImRlZmF1bHQiO1AuY2xhc3Nlcy5sZW5ndGg+MCYmKFI9UC5jbGFzc2VzLmpvaW4oIiAiKSksUj1SKyIgZmxvd2NoYXJ0LWxhYmVsIjtjb25zdCBGPW9tKFAuc3R5bGVzKTtsZXQgaj1QLnRleHQhPT12b2lkIDA/UC50ZXh0OlAuaWQ7Y29uc3QgSz17d2lkdGg6MCxoZWlnaHQ6MH0sZWU9W3tpZDpQLmlkKyItd2VzdCIsbGF5b3V0T3B0aW9uczp7InBvcnQuc2lkZSI6IldFU1QifX0se2lkOlAuaWQrIi1lYXN0IixsYXlvdXRPcHRpb25zOnsicG9ydC5zaWRlIjoiRUFTVCJ9fSx7aWQ6UC5pZCsiLXNvdXRoIixsYXlvdXRPcHRpb25zOnsicG9ydC5zaWRlIjoiU09VVEgifX0se2lkOlAuaWQrIi1ub3J0aCIsbGF5b3V0T3B0aW9uczp7InBvcnQuc2lkZSI6Ik5PUlRIIn19XTtsZXQgaWU9MCxvZT0iIixwZT17fTtzd2l0Y2goUC50eXBlKXtjYXNlInJvdW5kIjppZT01LG9lPSJyZWN0IjticmVhaztjYXNlInNxdWFyZSI6b2U9InJlY3QiO2JyZWFrO2Nhc2UiZGlhbW9uZCI6b2U9InF1ZXN0aW9uIixwZT17cG9ydENvbnN0cmFpbnRzOiJGSVhFRF9TSURFIn07YnJlYWs7Y2FzZSJoZXhhZ29uIjpvZT0iaGV4YWdvbiI7YnJlYWs7Y2FzZSJvZGQiOm9lPSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImxlYW5fcmlnaHQiOm9lPSJsZWFuX3JpZ2h0IjticmVhaztjYXNlImxlYW5fbGVmdCI6b2U9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOm9lPSJ0cmFwZXpvaWQiO2JyZWFrO2Nhc2UiaW52X3RyYXBlem9pZCI6b2U9Imludl90cmFwZXpvaWQiO2JyZWFrO2Nhc2Uib2RkX3JpZ2h0IjpvZT0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJjaXJjbGUiOm9lPSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6b2U9ImVsbGlwc2UiO2JyZWFrO2Nhc2Uic3RhZGl1bSI6b2U9InN0YWRpdW0iO2JyZWFrO2Nhc2Uic3Vicm91dGluZSI6b2U9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOm9lPSJjeWxpbmRlciI7YnJlYWs7Y2FzZSJncm91cCI6b2U9InJlY3QiO2JyZWFrO2Nhc2UiZG91YmxlY2lyY2xlIjpvZT0iZG91YmxlY2lyY2xlIjticmVhaztkZWZhdWx0Om9lPSJyZWN0In1jb25zdCBiZT17bGFiZWxTdHlsZTpGLmxhYmVsU3R5bGUsc2hhcGU6b2UsbGFiZWxUZXh0OmosbGFiZWxUeXBlOlAubGFiZWxUeXBlLHJ4OmllLHJ5OmllLGNsYXNzOlIsc3R5bGU6Ri5zdHlsZSxpZDpQLmlkLGxpbms6UC5saW5rLGxpbmtUYXJnZXQ6UC5saW5rVGFyZ2V0LHRvb2x0aXA6cC5kYi5nZXRUb29sdGlwKFAuaWQpfHwiIixkb21JZDpwLmRiLmxvb2tVcERvbUlkKFAuaWQpLGhhdmVDYWxsYmFjazpQLmhhdmVDYWxsYmFjayx3aWR0aDpQLnR5cGU9PT0iZ3JvdXAiPzUwMDp2b2lkIDAsZGlyOlAuZGlyLHR5cGU6UC50eXBlLHByb3BzOlAucHJvcHMscGFkZGluZzpWaCgpLmZsb3djaGFydC5wYWRkaW5nfTtsZXQgYWUsbmU7aWYoYmUudHlwZSE9PSJncm91cCIpbmU9YXdhaXQgdEooVCxiZSxQLmRpciksYWU9bmUubm9kZSgpLmdldEJCb3goKTtlbHNle2QuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtjb25zdHtzaGFwZVN2ZzpkZSxiYm94Olh9PWF3YWl0IGcxKFQsYmUsdm9pZCAwLCEwKTtLLndpZHRoPVgud2lkdGgsSy53cmFwcGluZ1dpZHRoPVZoKCkuZmxvd2NoYXJ0LndyYXBwaW5nV2lkdGgsSy5oZWlnaHQ9WC5oZWlnaHQsSy5sYWJlbE5vZGU9ZGUubm9kZSgpLGJlLmxhYmVsRGF0YT1LfWNvbnN0IHNlPXtpZDpQLmlkLHBvcnRzOlAudHlwZT09PSJkaWFtb25kIj9lZTpbXSxsYXlvdXRPcHRpb25zOnBlLGxhYmVsVGV4dDpqLGxhYmVsRGF0YTpLLGRvbUlkOnAuZGIubG9va1VwRG9tSWQoUC5pZCksd2lkdGg6YWU9PW51bGw/dm9pZCAwOmFlLndpZHRoLGhlaWdodDphZT09bnVsbD92b2lkIDA6YWUuaGVpZ2h0LHR5cGU6UC50eXBlLGVsOm5lLHBhcmVudDp2LnBhcmVudEJ5SWRbUC5pZF19O1c3W2JlLmlkXT1zZX0pKSxifSxVS2U9KGkscyx1KT0+e2NvbnN0IGQ9e1RCOntpbjp7bm9ydGg6Im5vcnRoIn0sb3V0Ontzb3V0aDoid2VzdCIsd2VzdDoiZWFzdCIsZWFzdDoic291dGgifX0sTFI6e2luOnt3ZXN0OiJ3ZXN0In0sb3V0OntlYXN0OiJzb3V0aCIsc291dGg6Im5vcnRoIixub3J0aDoiZWFzdCJ9fSxSTDp7aW46e2Vhc3Q6ImVhc3QifSxvdXQ6e3dlc3Q6Im5vcnRoIixub3J0aDoic291dGgiLHNvdXRoOiJ3ZXN0In19LEJUOntpbjp7c291dGg6InNvdXRoIn0sb3V0Ontub3J0aDoiZWFzdCIsZWFzdDoid2VzdCIsd2VzdDoibm9ydGgifX19O3JldHVybiBkLlREPWQuVEIsZFt1XVtzXVtpXX0sR0tlPShpLHMsdSk9PntpZihYZS5pbmZvKCJnZXROZXh0UG9ydCIse25vZGU6aSxlZGdlRGlyZWN0aW9uOnMsZ3JhcGhEaXJlY3Rpb246dX0pLCFIdltpXSlzd2l0Y2godSl7Y2FzZSJUQiI6Y2FzZSJURCI6SHZbaV09e2luUG9zaXRpb246Im5vcnRoIixvdXRQb3NpdGlvbjoic291dGgifTticmVhaztjYXNlIkJUIjpIdltpXT17aW5Qb3NpdGlvbjoic291dGgiLG91dFBvc2l0aW9uOiJub3J0aCJ9O2JyZWFrO2Nhc2UiUkwiOkh2W2ldPXtpblBvc2l0aW9uOiJlYXN0IixvdXRQb3NpdGlvbjoid2VzdCJ9O2JyZWFrO2Nhc2UiTFIiOkh2W2ldPXtpblBvc2l0aW9uOiJ3ZXN0IixvdXRQb3NpdGlvbjoiZWFzdCJ9O2JyZWFrfWNvbnN0IGQ9cz09PSJpbiI/SHZbaV0uaW5Qb3NpdGlvbjpIdltpXS5vdXRQb3NpdGlvbjtyZXR1cm4gcz09PSJpbiI/SHZbaV0uaW5Qb3NpdGlvbj1VS2UoSHZbaV0uaW5Qb3NpdGlvbixzLHUpOkh2W2ldLm91dFBvc2l0aW9uPVVLZShIdltpXS5vdXRQb3NpdGlvbixzLHUpLGR9LExhbj0oaSxzKT0+e2xldCB1PWkuc3RhcnQsZD1pLmVuZDtjb25zdCBwPXUsdj1kLGI9VzdbdV0seT1XN1tkXTtyZXR1cm4hYnx8IXk/e3NvdXJjZTp1LHRhcmdldDpkfTooYi50eXBlPT09ImRpYW1vbmQiJiYodT1gJHt1fS0ke0dLZSh1LCJvdXQiLHMpfWApLHkudHlwZT09PSJkaWFtb25kIiYmKGQ9YCR7ZH0tJHtHS2UoZCwiaW4iLHMpfWApLHtzb3VyY2U6dSx0YXJnZXQ6ZCxzb3VyY2VJZDpwLHRhcmdldElkOnZ9KX0sTWFuPWZ1bmN0aW9uKGkscyx1LGQpe1hlLmluZm8oImFiYzc4IGVkZ2VzID0gIixpKTtjb25zdCBwPWQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWxzIik7bGV0IHY9e30sYj1zLmRiLmdldERpcmVjdGlvbigpLHksVDtpZihpLmRlZmF1bHRTdHlsZSE9PXZvaWQgMCl7Y29uc3QgXz1vbShpLmRlZmF1bHRTdHlsZSk7eT1fLnN0eWxlLFQ9Xy5sYWJlbFN0eWxlfXJldHVybiBpLmZvckVhY2goZnVuY3Rpb24oXyl7Y29uc3QgQT0iTC0iK18uc3RhcnQrIi0iK18uZW5kO3ZbQV09PT12b2lkIDA/KHZbQV09MCxYZS5pbmZvKCJhYmM3OCBuZXcgZW50cnkiLEEsdltBXSkpOih2W0FdKyssWGUuaW5mbygiYWJjNzggbmV3IGVudHJ5IixBLHZbQV0pKTtsZXQgUD1BKyItIit2W0FdO1hlLmluZm8oImFiYzc4IG5ldyBsaW5rIGlkIHRvIGJlIHVzZWQgaXMiLEEsUCx2W0FdKTtjb25zdCBSPSJMUy0iK18uc3RhcnQsRj0iTEUtIitfLmVuZCxqPXtzdHlsZToiIixsYWJlbFN0eWxlOiIifTtzd2l0Y2goai5taW5sZW49Xy5sZW5ndGh8fDEsXy50eXBlPT09ImFycm93X29wZW4iP2ouYXJyb3doZWFkPSJub25lIjpqLmFycm93aGVhZD0ibm9ybWFsIixqLmFycm93VHlwZVN0YXJ0PSJhcnJvd19vcGVuIixqLmFycm93VHlwZUVuZD0iYXJyb3dfb3BlbiIsXy50eXBlKXtjYXNlImRvdWJsZV9hcnJvd19jcm9zcyI6ai5hcnJvd1R5cGVTdGFydD0iYXJyb3dfY3Jvc3MiO2Nhc2UiYXJyb3dfY3Jvc3MiOmouYXJyb3dUeXBlRW5kPSJhcnJvd19jcm9zcyI7YnJlYWs7Y2FzZSJkb3VibGVfYXJyb3dfcG9pbnQiOmouYXJyb3dUeXBlU3RhcnQ9ImFycm93X3BvaW50IjtjYXNlImFycm93X3BvaW50IjpqLmFycm93VHlwZUVuZD0iYXJyb3dfcG9pbnQiO2JyZWFrO2Nhc2UiZG91YmxlX2Fycm93X2NpcmNsZSI6ai5hcnJvd1R5cGVTdGFydD0iYXJyb3dfY2lyY2xlIjtjYXNlImFycm93X2NpcmNsZSI6ai5hcnJvd1R5cGVFbmQ9ImFycm93X2NpcmNsZSI7YnJlYWt9bGV0IEs9IiIsZWU9IiI7c3dpdGNoKF8uc3Ryb2tlKXtjYXNlIm5vcm1hbCI6Sz0iZmlsbDpub25lOyIseSE9PXZvaWQgMCYmKEs9eSksVCE9PXZvaWQgMCYmKGVlPVQpLGoudGhpY2tuZXNzPSJub3JtYWwiLGoucGF0dGVybj0ic29saWQiO2JyZWFrO2Nhc2UiZG90dGVkIjpqLnRoaWNrbmVzcz0ibm9ybWFsIixqLnBhdHRlcm49ImRvdHRlZCIsai5zdHlsZT0iZmlsbDpub25lO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWRhc2hhcnJheTozOyI7YnJlYWs7Y2FzZSJ0aGljayI6ai50aGlja25lc3M9InRoaWNrIixqLnBhdHRlcm49InNvbGlkIixqLnN0eWxlPSJzdHJva2Utd2lkdGg6IDMuNXB4O2ZpbGw6bm9uZTsiO2JyZWFrfWlmKF8uc3R5bGUhPT12b2lkIDApe2NvbnN0IG5lPW9tKF8uc3R5bGUpO0s9bmUuc3R5bGUsZWU9bmUubGFiZWxTdHlsZX1qLnN0eWxlPWouc3R5bGUrPUssai5sYWJlbFN0eWxlPWoubGFiZWxTdHlsZSs9ZWUsXy5pbnRlcnBvbGF0ZSE9PXZvaWQgMD9qLmN1cnZlPU92KF8uaW50ZXJwb2xhdGUsa3ApOmkuZGVmYXVsdEludGVycG9sYXRlIT09dm9pZCAwP2ouY3VydmU9T3YoaS5kZWZhdWx0SW50ZXJwb2xhdGUsa3ApOmouY3VydmU9T3YoX2FuLmN1cnZlLGtwKSxfLnRleHQ9PT12b2lkIDA/Xy5zdHlsZSE9PXZvaWQgMCYmKGouYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiKTooai5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIsai5sYWJlbHBvcz0iYyIpLGoubGFiZWxUeXBlPV8ubGFiZWxUeXBlLGoubGFiZWw9Xy50ZXh0LnJlcGxhY2UoY2kubGluZUJyZWFrUmVnZXgsYApgKSxfLnN0eWxlPT09dm9pZCAwJiYoai5zdHlsZT1qLnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZTsiKSxqLmxhYmVsU3R5bGU9ai5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6Iiksai5pZD1QLGouY2xhc3Nlcz0iZmxvd2NoYXJ0LWxpbmsgIitSKyIgIitGO2NvbnN0IGllPXptZShwLGopLHtzb3VyY2U6b2UsdGFyZ2V0OnBlLHNvdXJjZUlkOmJlLHRhcmdldElkOmFlfT1MYW4oXyxiKTtYZS5kZWJ1ZygiYWJjNzggc291cmNlIGFuZCB0YXJnZXQiLG9lLHBlKSx1LmVkZ2VzLnB1c2goe2lkOiJlIitfLnN0YXJ0K18uZW5kLHNvdXJjZXM6W29lXSx0YXJnZXRzOltwZV0sc291cmNlSWQ6YmUsdGFyZ2V0SWQ6YWUsbGFiZWxFbDppZSxsYWJlbHM6W3t3aWR0aDpqLndpZHRoLGhlaWdodDpqLmhlaWdodCxvcmdXaWR0aDpqLndpZHRoLG9yZ0hlaWdodDpqLmhlaWdodCx0ZXh0OmoubGFiZWwsbGF5b3V0T3B0aW9uczp7ImVkZ2VMYWJlbHMuaW5saW5lIjoidHJ1ZSIsImVkZ2VMYWJlbHMucGxhY2VtZW50IjoiQ0VOVEVSIn19XSxlZGdlRGF0YTpqfSl9KSx1fSxEYW49ZnVuY3Rpb24oaSxzLHUsZCxwKXtsZXQgdj0iIjtkJiYodj13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCx2PXYucmVwbGFjZSgvXCgvZywiXFwoIiksdj12LnJlcGxhY2UoL1wpL2csIlxcKSIpKSxBVWUoaSxzLHYscCx1KX0sSWFuPWZ1bmN0aW9uKGkscyl7cmV0dXJuIFhlLmluZm8oIkV4dHJhY3RpbmcgY2xhc3NlcyIpLHMuZGIuZ2V0Q2xhc3NlcygpfSxPYW49ZnVuY3Rpb24oaSl7Y29uc3Qgcz17cGFyZW50QnlJZDp7fSxjaGlsZHJlbkJ5SWQ6e319LHU9aS5nZXRTdWJHcmFwaHMoKTtyZXR1cm4gWGUuaW5mbygiU3ViZ3JhcGhzIC0gIix1KSx1LmZvckVhY2goZnVuY3Rpb24oZCl7ZC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHApe3MucGFyZW50QnlJZFtwXT1kLmlkLHMuY2hpbGRyZW5CeUlkW2QuaWRdPT09dm9pZCAwJiYocy5jaGlsZHJlbkJ5SWRbZC5pZF09W10pLHMuY2hpbGRyZW5CeUlkW2QuaWRdLnB1c2gocCl9KX0pLHUuZm9yRWFjaChmdW5jdGlvbihkKXtkLmlkLHMucGFyZW50QnlJZFtkLmlkXSE9PXZvaWQgMCYmcy5wYXJlbnRCeUlkW2QuaWRdfSksc30sTmFuPWZ1bmN0aW9uKGkscyx1KXtjb25zdCBkPVRhbihpLHMsdSk7aWYoZD09PXZvaWQgMHx8ZD09PSJyb290IilyZXR1cm57eDowLHk6MH07Y29uc3QgcD1XN1tkXS5vZmZzZXQ7cmV0dXJue3g6cC5wb3NYLHk6cC5wb3NZfX0sUGFuPWZ1bmN0aW9uKGkscyx1LGQscCx2KXtjb25zdCBiPU5hbihzLnNvdXJjZUlkLHMudGFyZ2V0SWQscCkseT1zLnNlY3Rpb25zWzBdLnN0YXJ0UG9pbnQsVD1zLnNlY3Rpb25zWzBdLmVuZFBvaW50LEE9KHMuc2VjdGlvbnNbMF0uYmVuZFBvaW50cz9zLnNlY3Rpb25zWzBdLmJlbmRQb2ludHM6W10pLm1hcChwZT0+W3BlLngrYi54LHBlLnkrYi55XSksUD1bW3kueCtiLngseS55K2IueV0sLi4uQSxbVC54K2IueCxULnkrYi55XV0se3g6Uix5OkZ9PV9VZShzLmVkZ2VEYXRhKSxqPWs3KCkueChSKS55KEYpLmN1cnZlKGtwKSxLPWkuaW5zZXJ0KCJwYXRoIikuYXR0cigiZCIsaihQKSkuYXR0cigiY2xhc3MiLCJwYXRoICIrdS5jbGFzc2VzKS5hdHRyKCJmaWxsIiwibm9uZSIpLGVlPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWwiKSxpZT1JcihlZS5ub2RlKCkuYXBwZW5kQ2hpbGQocy5sYWJlbEVsKSksb2U9aWUubm9kZSgpLmZpcnN0Q2hpbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWUuYXR0cigid2lkdGgiLG9lLndpZHRoKSxpZS5hdHRyKCJoZWlnaHQiLG9lLmhlaWdodCksZWUuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7cy5sYWJlbHNbMF0ueCtiLnh9LCAke3MubGFiZWxzWzBdLnkrYi55fSlgKSxEYW4oSyx1LGQudHlwZSxkLmFycm93TWFya2VyQWJzb2x1dGUsdil9LEtLZT0oaSxzKT0+e2kuZm9yRWFjaCh1PT57dS5jaGlsZHJlbnx8KHUuY2hpbGRyZW49W10pO2NvbnN0IGQ9cy5jaGlsZHJlbkJ5SWRbdS5pZF07ZCYmZC5mb3JFYWNoKHA9Pnt1LmNoaWxkcmVuLnB1c2goVzdbcF0pfSksS0tlKHUuY2hpbGRyZW4scyl9KX0sQmFuPWFzeW5jIGZ1bmN0aW9uKGkscyx1LGQpe3ZhciBzZTtkLmRiLmNsZWFyKCksVzc9e30sSHY9e30sZC5kYi5zZXRHZW4oImdlbi0yIiksZC5wYXJzZXIucGFyc2UoaSk7Y29uc3QgcD1JcigiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigic3R5bGUiLCJoZWlnaHQ6NDAwcHgiKS5hdHRyKCJpZCIsImN5Iik7bGV0IHY9e2lkOiJyb290IixsYXlvdXRPcHRpb25zOnsiZWxrLmhpZXJhcmNoeUhhbmRsaW5nIjoiSU5DTFVERV9DSElMRFJFTiIsIm9yZy5lY2xpcHNlLmVsay5wYWRkaW5nIjoiW3RvcD0xMDAsIGxlZnQ9MTAwLCBib3R0b209MTEwLCByaWdodD0xMTBdIiwiZWxrLmxheWVyZWQuc3BhY2luZy5lZGdlTm9kZUJldHdlZW5MYXllcnMiOiIzMCIsImVsay5kaXJlY3Rpb24iOiJET1dOIn0sY2hpbGRyZW46W10sZWRnZXM6W119O3N3aXRjaChYZS5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCB1c2luZyB2MyByZW5kZXJlciIsVktlKSxkLmRiLmdldERpcmVjdGlvbigpKXtjYXNlIkJUIjp2LmxheW91dE9wdGlvbnNbImVsay5kaXJlY3Rpb24iXT0iVVAiO2JyZWFrO2Nhc2UiVEIiOnYubGF5b3V0T3B0aW9uc1siZWxrLmRpcmVjdGlvbiJdPSJET1dOIjticmVhaztjYXNlIkxSIjp2LmxheW91dE9wdGlvbnNbImVsay5kaXJlY3Rpb24iXT0iUklHSFQiO2JyZWFrO2Nhc2UiUkwiOnYubGF5b3V0T3B0aW9uc1siZWxrLmRpcmVjdGlvbiJdPSJMRUZUIjticmVha31jb25zdHtzZWN1cml0eUxldmVsOnksZmxvd2NoYXJ0OlR9PVZoKCk7bGV0IF87eT09PSJzYW5kYm94IiYmKF89SXIoIiNpIitzKSk7Y29uc3QgQT1Jcih5PT09InNhbmRib3giP18ubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLFA9eT09PSJzYW5kYm94Ij9fLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50LFI9QS5zZWxlY3QoYFtpZD0iJHtzfSJdYCk7U21lKFIsWyJwb2ludCIsImNpcmNsZSIsImNyb3NzIl0sZC50eXBlLHMpO2NvbnN0IGo9ZC5kYi5nZXRWZXJ0aWNlcygpO2xldCBLO2NvbnN0IGVlPWQuZGIuZ2V0U3ViR3JhcGhzKCk7WGUuaW5mbygiU3ViZ3JhcGhzIC0gIixlZSk7Zm9yKGxldCBkZT1lZS5sZW5ndGgtMTtkZT49MDtkZS0tKUs9ZWVbZGVdLGQuZGIuYWRkVmVydGV4KEsuaWQse3RleHQ6Sy50aXRsZSx0eXBlOksubGFiZWxUeXBlfSwiZ3JvdXAiLHZvaWQgMCxLLmNsYXNzZXMsSy5kaXIpO2NvbnN0IGllPVIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJzdWJncmFwaHMiKSxvZT1PYW4oZC5kYik7dj1hd2FpdCBBYW4oaixzLEEsUCxkLG9lLHYpO2NvbnN0IHBlPVIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlcyBlZGdlUGF0aCIpLGJlPWQuZGIuZ2V0RWRnZXMoKTt2PU1hbihiZSxkLHYsUiksT2JqZWN0LmtleXMoVzcpLmZvckVhY2goZGU9Pntjb25zdCBYPVc3W2RlXTtYLnBhcmVudHx8di5jaGlsZHJlbi5wdXNoKFgpLG9lLmNoaWxkcmVuQnlJZFtkZV0hPT12b2lkIDAmJihYLmxhYmVscz1be3RleHQ6WC5sYWJlbFRleHQsbGF5b3V0T3B0aW9uczp7Im5vZGVMYWJlbHMucGxhY2VtZW50IjoiW0hfQ0VOVEVSLCBWX1RPUCwgSU5TSURFXSJ9LHdpZHRoOlgubGFiZWxEYXRhLndpZHRoLGhlaWdodDpYLmxhYmVsRGF0YS5oZWlnaHR9XSxkZWxldGUgWC54LGRlbGV0ZSBYLnksZGVsZXRlIFgud2lkdGgsZGVsZXRlIFguaGVpZ2h0KX0pLEtLZSh2LmNoaWxkcmVuLG9lKSxYZS5pbmZvKCJhZnRlciBsYXlvdXQiLEpTT04uc3RyaW5naWZ5KHYsbnVsbCwyKSk7Y29uc3QgbmU9YXdhaXQgVktlLmxheW91dCh2KTtXS2UoMCwwLG5lLmNoaWxkcmVuLFIsaWUsZCwwKSxYZS5pbmZvKCJhZnRlciBsYXlvdXQiLG5lKSwoc2U9bmUuZWRnZXMpPT1udWxsfHxzZS5tYXAoZGU9PntQYW4ocGUsZGUsZGUuZWRnZURhdGEsZCxvZSxzKX0pLHk5KHt9LFIsVC5kaWFncmFtUGFkZGluZyxULnVzZU1heFdpZHRoKSxwLnJlbW92ZSgpfSxXS2U9KGkscyx1LGQscCx2LGIpPT57dS5mb3JFYWNoKGZ1bmN0aW9uKHkpe2lmKHkpaWYoVzdbeS5pZF0ub2Zmc2V0PXtwb3NYOnkueCtpLHBvc1k6eS55K3MseDppLHk6cyxkZXB0aDpiLHdpZHRoOnkud2lkdGgsaGVpZ2h0OnkuaGVpZ2h0fSx5LnR5cGU9PT0iZ3JvdXAiKXtjb25zdCBUPXAuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJzdWJncmFwaCIpO1QuaW5zZXJ0KCJyZWN0IikuYXR0cigiY2xhc3MiLCJzdWJncmFwaCBzdWJncmFwaC1sdmwtIitiJTUrIiBub2RlIikuYXR0cigieCIseS54K2kpLmF0dHIoInkiLHkueStzKS5hdHRyKCJ3aWR0aCIseS53aWR0aCkuYXR0cigiaGVpZ2h0Iix5LmhlaWdodCk7Y29uc3QgXz1ULmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxBPVZoKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHM/eS5sYWJlbERhdGEud2lkdGgvMjowO18uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7eS5sYWJlbHNbMF0ueCtpK3kueCtBfSwgJHt5LmxhYmVsc1swXS55K3MreS55KzN9KWApLF8ubm9kZSgpLmFwcGVuZENoaWxkKHkubGFiZWxEYXRhLmxhYmVsTm9kZSksWGUuaW5mbygiSWQgKFVHSCk9ICIseS50eXBlLHkubGFiZWxzKX1lbHNlIFhlLmluZm8oIklkIChVR0gpPSAiLHkuaWQpLHkuZWwuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7eS54K2kreS53aWR0aC8yfSwgJHt5Lnkrcyt5LmhlaWdodC8yfSlgKX0pLHUuZm9yRWFjaChmdW5jdGlvbih5KXt5JiZ5LnR5cGU9PT0iZ3JvdXAiJiZXS2UoaSt5Lngscyt5LnkseS5jaGlsZHJlbixkLHAsdixiKzEpfSl9LEZhbj17Z2V0Q2xhc3NlczpJYW4sZHJhdzpCYW59LFJhbj1pPT57bGV0IHM9IiI7Zm9yKGxldCB1PTA7dTw1O3UrKylzKz1gCiAgICAgIC5zdWJncmFwaC1sdmwtJHt1fSB7CiAgICAgICAgZmlsbDogJHtpW2BzdXJmYWNlJHt1fWBdfTsKICAgICAgICBzdHJva2U6ICR7aVtgc3VyZmFjZVBlZXIke3V9YF19OwogICAgICB9CiAgICBgO3JldHVybiBzfSxqYW49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e2RiOl9VdCxyZW5kZXJlcjpGYW4scGFyc2VyOkdiZSxzdHlsZXM6aT0+YC5sYWJlbCB7CiAgICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogICAgY29sb3I6ICR7aS5ub2RlVGV4dENvbG9yfHxpLnRleHRDb2xvcn07CiAgfQogIC5jbHVzdGVyLWxhYmVsIHRleHQgewogICAgZmlsbDogJHtpLnRpdGxlQ29sb3J9OwogIH0KICAuY2x1c3Rlci1sYWJlbCBzcGFuIHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAubGFiZWwgdGV4dCxzcGFuIHsKICAgIGZpbGw6ICR7aS5ub2RlVGV4dENvbG9yfHxpLnRleHRDb2xvcn07CiAgICBjb2xvcjogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICB9CgogIC5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7aS5tYWluQmtnfTsKICAgIHN0cm9rZTogJHtpLm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAubm9kZSAubGFiZWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAubm9kZS5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHtpLmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyLjBweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuODU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7aS5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgICAgZmlsbDogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgfQogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KCiAgLmNsdXN0ZXIgcmVjdCB7CiAgICBmaWxsOiAke2kuY2x1c3RlckJrZ307CiAgICBzdHJva2U6ICR7aS5jbHVzdGVyQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuY2x1c3RlciBzcGFuIHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfQogIC8qIC5jbHVzdGVyIGRpdiB7CiAgICBjb2xvcjogJHtpLnRpdGxlQ29sb3J9OwogIH0gKi8KCiAgZGl2Lm1lcm1haWRUb29sdGlwIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1heC13aWR0aDogMjAwcHg7CiAgICBwYWRkaW5nOiAycHg7CiAgICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgYmFja2dyb3VuZDogJHtpLnRlcnRpYXJ5Q29sb3J9OwogICAgYm9yZGVyOiAxcHggc29saWQgJHtpLmJvcmRlcjJ9OwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAxMDA7CiAgfQoKICAuZmxvd2NoYXJ0VGl0bGVUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmaWxsOiAke2kudGV4dENvbG9yfTsKICB9CiAgLnN1YmdyYXBoIHsKICAgIHN0cm9rZS13aWR0aDoyOwogICAgcng6MzsKICB9CiAgLy8gLnN1YmdyYXBoLWx2bC0xIHsKICAvLyAgIGZpbGw6I2NjYzsKICAvLyAgIC8vIHN0cm9rZTpibGFjazsKICAvLyB9CgogIC5mbG93Y2hhcnQtbGFiZWwgdGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogIH0KCiAgJHtSYW4oaSl9CmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBRdmU9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihSLEYsaixLKXtmb3Ioaj1qfHx7fSxLPVIubGVuZ3RoO0stLTtqW1JbS11dPUYpO3JldHVybiBqfSxzPVs2LDgsMTAsMTEsMTIsMTQsMTYsMTcsMjAsMjFdLHU9WzEsOV0sZD1bMSwxMF0scD1bMSwxMV0sdj1bMSwxMl0sYj1bMSwxM10seT1bMSwxNl0sVD1bMSwxN10sXz17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsdGltZWxpbmU6NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxTUEFDRTo4LHN0YXRlbWVudDo5LE5FV0xJTkU6MTAsdGl0bGU6MTEsYWNjX3RpdGxlOjEyLGFjY190aXRsZV92YWx1ZToxMyxhY2NfZGVzY3I6MTQsYWNjX2Rlc2NyX3ZhbHVlOjE1LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MTYsc2VjdGlvbjoxNyxwZXJpb2Rfc3RhdGVtZW50OjE4LGV2ZW50X3N0YXRlbWVudDoxOSxwZXJpb2Q6MjAsZXZlbnQ6MjEsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6InRpbWVsaW5lIiw2OiJFT0YiLDg6IlNQQUNFIiwxMDoiTkVXTElORSIsMTE6InRpdGxlIiwxMjoiYWNjX3RpdGxlIiwxMzoiYWNjX3RpdGxlX3ZhbHVlIiwxNDoiYWNjX2Rlc2NyIiwxNToiYWNjX2Rlc2NyX3ZhbHVlIiwxNjoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMTc6InNlY3Rpb24iLDIwOiJwZXJpb2QiLDIxOiJldmVudCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbNSwwXSxbNSwyXSxbNywyXSxbNywxXSxbNywxXSxbNywxXSxbOSwxXSxbOSwyXSxbOSwyXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbMTgsMV0sWzE5LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKEYsaixLLGVlLGllLG9lLHBlKXt2YXIgYmU9b2UubGVuZ3RoLTE7c3dpdGNoKGllKXtjYXNlIDE6cmV0dXJuIG9lW2JlLTFdO2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOm9lW2JlLTFdLnB1c2gob2VbYmVdKSx0aGlzLiQ9b2VbYmUtMV07YnJlYWs7Y2FzZSA0OmNhc2UgNTp0aGlzLiQ9b2VbYmVdO2JyZWFrO2Nhc2UgNjpjYXNlIDc6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgODplZS5nZXRDb21tb25EYigpLnNldERpYWdyYW1UaXRsZShvZVtiZV0uc3Vic3RyKDYpKSx0aGlzLiQ9b2VbYmVdLnN1YnN0cig2KTticmVhaztjYXNlIDk6dGhpcy4kPW9lW2JlXS50cmltKCksZWUuZ2V0Q29tbW9uRGIoKS5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTA6Y2FzZSAxMTp0aGlzLiQ9b2VbYmVdLnRyaW0oKSxlZS5nZXRDb21tb25EYigpLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMjplZS5hZGRTZWN0aW9uKG9lW2JlXS5zdWJzdHIoOCkpLHRoaXMuJD1vZVtiZV0uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMTU6ZWUuYWRkVGFzayhvZVtiZV0sMCwiIiksdGhpcy4kPW9lW2JlXTticmVhaztjYXNlIDE2OmVlLmFkZEV2ZW50KG9lW2JlXS5zdWJzdHIoMikpLHRoaXMuJD1vZVtiZV07YnJlYWt9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LGkocyxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOnUsMTI6ZCwxNDpwLDE2OnYsMTc6YiwxODoxNCwxOToxNSwyMDp5LDIxOlR9LGkocyxbMiw3XSx7MTpbMiwxXX0pLGkocyxbMiwzXSksezk6MTgsMTE6dSwxMjpkLDE0OnAsMTY6diwxNzpiLDE4OjE0LDE5OjE1LDIwOnksMjE6VH0saShzLFsyLDVdKSxpKHMsWzIsNl0pLGkocyxbMiw4XSksezEzOlsxLDE5XX0sezE1OlsxLDIwXX0saShzLFsyLDExXSksaShzLFsyLDEyXSksaShzLFsyLDEzXSksaShzLFsyLDE0XSksaShzLFsyLDE1XSksaShzLFsyLDE2XSksaShzLFsyLDRdKSxpKHMsWzIsOV0pLGkocyxbMiwxMF0pXSxkZWZhdWx0QWN0aW9uczp7fSxwYXJzZUVycm9yOmZ1bmN0aW9uKEYsail7aWYoai5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKEYpO2Vsc2V7dmFyIEs9bmV3IEVycm9yKEYpO3Rocm93IEsuaGFzaD1qLEt9fSxwYXJzZTpmdW5jdGlvbihGKXt2YXIgaj10aGlzLEs9WzBdLGVlPVtdLGllPVtudWxsXSxvZT1bXSxwZT10aGlzLnRhYmxlLGJlPSIiLGFlPTAsbmU9MCxzZT0yLGRlPTEsWD1vZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxnZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFc9e3l5Ont9fTtmb3IodmFyIHhlIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseGUpJiYoVy55eVt4ZV09dGhpcy55eVt4ZV0pO2dlLnNldElucHV0KEYsVy55eSksVy55eS5sZXhlcj1nZSxXLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBnZS55eWxsb2M+InUiJiYoZ2UueXlsbG9jPXt9KTt2YXIgVT1nZS55eWxsb2M7b2UucHVzaChVKTt2YXIgRmU9Z2Uub3B0aW9ucyYmZ2Uub3B0aW9ucy5yYW5nZXM7dHlwZW9mIFcueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Vy55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBQZSgpe3ZhciBFdDtyZXR1cm4gRXQ9ZWUucG9wKCl8fGdlLmxleCgpfHxkZSx0eXBlb2YgRXQhPSJudW1iZXIiJiYoRXQgaW5zdGFuY2VvZiBBcnJheSYmKGVlPUV0LEV0PWVlLnBvcCgpKSxFdD1qLnN5bWJvbHNfW0V0XXx8RXQpLEV0fWZvcih2YXIgamUsSWUsU2UsQ2Usa2U9e30sS2UsRnQsTmUsZ247Oyl7aWYoSWU9S1tLLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW0llXT9TZT10aGlzLmRlZmF1bHRBY3Rpb25zW0llXTooKGplPT09bnVsbHx8dHlwZW9mIGplPiJ1IikmJihqZT1QZSgpKSxTZT1wZVtJZV0mJnBlW0llXVtqZV0pLHR5cGVvZiBTZT4idSJ8fCFTZS5sZW5ndGh8fCFTZVswXSl7dmFyIF90PSIiO2duPVtdO2ZvcihLZSBpbiBwZVtJZV0pdGhpcy50ZXJtaW5hbHNfW0tlXSYmS2U+c2UmJmduLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tLZV0rIiciKTtnZS5zaG93UG9zaXRpb24/X3Q9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYWUrMSkrYDoKYCtnZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK2duLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bamVdfHxqZSkrIiciOl90PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGFlKzEpKyI6IFVuZXhwZWN0ZWQgIisoamU9PWRlPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW2plXXx8amUpKyInIiksdGhpcy5wYXJzZUVycm9yKF90LHt0ZXh0OmdlLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tqZV18fGplLGxpbmU6Z2UueXlsaW5lbm8sbG9jOlUsZXhwZWN0ZWQ6Z259KX1pZihTZVswXWluc3RhbmNlb2YgQXJyYXkmJlNlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrSWUrIiwgdG9rZW46ICIramUpO3N3aXRjaChTZVswXSl7Y2FzZSAxOksucHVzaChqZSksaWUucHVzaChnZS55eXRleHQpLG9lLnB1c2goZ2UueXlsbG9jKSxLLnB1c2goU2VbMV0pLGplPW51bGwsbmU9Z2UueXlsZW5nLGJlPWdlLnl5dGV4dCxhZT1nZS55eWxpbmVubyxVPWdlLnl5bGxvYzticmVhaztjYXNlIDI6aWYoRnQ9dGhpcy5wcm9kdWN0aW9uc19bU2VbMV1dWzFdLGtlLiQ9aWVbaWUubGVuZ3RoLUZ0XSxrZS5fJD17Zmlyc3RfbGluZTpvZVtvZS5sZW5ndGgtKEZ0fHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6b2Vbb2UubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46b2Vbb2UubGVuZ3RoLShGdHx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpvZVtvZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEZlJiYoa2UuXyQucmFuZ2U9W29lW29lLmxlbmd0aC0oRnR8fDEpXS5yYW5nZVswXSxvZVtvZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxDZT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoa2UsW2JlLG5lLGFlLFcueXksU2VbMV0saWUsb2VdLmNvbmNhdChYKSksdHlwZW9mIENlPCJ1IilyZXR1cm4gQ2U7RnQmJihLPUsuc2xpY2UoMCwtMSpGdCoyKSxpZT1pZS5zbGljZSgwLC0xKkZ0KSxvZT1vZS5zbGljZSgwLC0xKkZ0KSksSy5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW1NlWzFdXVswXSksaWUucHVzaChrZS4kKSxvZS5wdXNoKGtlLl8kKSxOZT1wZVtLW0subGVuZ3RoLTJdXVtLW0subGVuZ3RoLTFdXSxLLnB1c2goTmUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxBPWZ1bmN0aW9uKCl7dmFyIFI9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oaixLKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKGosSyk7ZWxzZSB0aHJvdyBuZXcgRXJyb3Ioail9LHNldElucHV0OmZ1bmN0aW9uKEYsail7cmV0dXJuIHRoaXMueXk9anx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9Rix0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgRj10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9Rix0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9Rix0aGlzLm1hdGNoZWQrPUY7dmFyIGo9Ri5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIGo/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLEZ9LHVucHV0OmZ1bmN0aW9uKEYpe3ZhciBqPUYubGVuZ3RoLEs9Ri5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PUYrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWopLHRoaXMub2Zmc2V0LT1qO3ZhciBlZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxLLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09Sy5sZW5ndGgtMSk7dmFyIGllPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpLPyhLLmxlbmd0aD09PWVlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrZWVbZWUubGVuZ3RoLUsubGVuZ3RoXS5sZW5ndGgtS1swXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWp9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baWVbMF0saWVbMF0rdGhpcy55eWxlbmctal0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKEYpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShGKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBGPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oRi5sZW5ndGg+MjA/Ii4uLiI6IiIpK0Yuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgRj10aGlzLm1hdGNoO3JldHVybiBGLmxlbmd0aDwyMCYmKEYrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLUYubGVuZ3RoKSksKEYuc3Vic3RyKDAsMjApKyhGLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgRj10aGlzLnBhc3RJbnB1dCgpLGo9bmV3IEFycmF5KEYubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gRit0aGlzLnVwY29taW5nSW5wdXQoKStgCmAraisiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oRixqKXt2YXIgSyxlZSxpZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaWU9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaWUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksZWU9RlswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksZWUmJih0aGlzLnl5bGluZW5vKz1lZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjplZT9lZVtlZS5sZW5ndGgtMV0ubGVuZ3RoLWVlW2VlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK0ZbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9RlswXSx0aGlzLm1hdGNoKz1GWzBdLHRoaXMubWF0Y2hlcz1GLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKEZbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPUZbMF0sSz10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxqLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLEspcmV0dXJuIEs7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIG9lIGluIGllKXRoaXNbb2VdPWllW29lXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBGLGosSyxlZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpZT10aGlzLl9jdXJyZW50UnVsZXMoKSxvZT0wO29lPGllLmxlbmd0aDtvZSsrKWlmKEs9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpZVtvZV1dKSxLJiYoIWp8fEtbMF0ubGVuZ3RoPmpbMF0ubGVuZ3RoKSl7aWYoaj1LLGVlPW9lLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKEY9dGhpcy50ZXN0X21hdGNoKEssaWVbb2VdKSxGIT09ITEpcmV0dXJuIEY7aWYodGhpcy5fYmFja3RyYWNrKXtqPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGo/KEY9dGhpcy50ZXN0X21hdGNoKGosaWVbZWVdKSxGIT09ITE/RjohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIGo9dGhpcy5uZXh0KCk7cmV0dXJuIGp8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKGope3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChqKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgaj10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBqPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oail7cmV0dXJuIGo9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhqfHwwKSxqPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbal06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oail7dGhpcy5iZWdpbihqKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihqLEssZWUsaWUpe3N3aXRjaChlZSl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIDEwO2Nhc2UgMzpicmVhaztjYXNlIDQ6YnJlYWs7Y2FzZSA1OnJldHVybiA0O2Nhc2UgNjpyZXR1cm4gMTE7Y2FzZSA3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwxMjtjYXNlIDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDk6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDE0O2Nhc2UgMTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDExOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDEyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEzOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE0OnJldHVybiAxNztjYXNlIDE1OnJldHVybiAyMTtjYXNlIDE2OnJldHVybiAyMDtjYXNlIDE3OnJldHVybiA2O2Nhc2UgMTg6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzp0aW1lbGluZVxiKS9pLC9eKD86dGl0bGVcc1teI1xuO10rKS9pLC9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzpzZWN0aW9uXHNbXiM6XG47XSspL2ksL14oPzo6XHNbXiM6XG47XSspL2ksL14oPzpbXiM6XG47XSspL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzEyLDEzXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzEwXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzhdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDE4XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIFJ9KCk7Xy5sZXhlcj1BO2Z1bmN0aW9uIFAoKXt0aGlzLnl5PXt9fXJldHVybiBQLnByb3RvdHlwZT1fLF8uUGFyc2VyPVAsbmV3IFB9KCk7UXZlLnBhcnNlcj1RdmU7Y29uc3QgJGFuPVF2ZTtsZXQgWkQ9IiIsWUtlPTA7Y29uc3QgSnZlPVtdLElKPVtdLGVJPVtdLFhLZT0oKT0+SmplLFFLZT1mdW5jdGlvbigpe0p2ZS5sZW5ndGg9MCxJSi5sZW5ndGg9MCxaRD0iIixlSS5sZW5ndGg9MCxQZygpfSxKS2U9ZnVuY3Rpb24oaSl7WkQ9aSxKdmUucHVzaChpKX0sWktlPWZ1bmN0aW9uKCl7cmV0dXJuIEp2ZX0sZVdlPWZ1bmN0aW9uKCl7bGV0IGk9aVdlKCk7Y29uc3Qgcz0xMDA7bGV0IHU9MDtmb3IoOyFpJiZ1PHM7KWk9aVdlKCksdSsrO3JldHVybiBJSi5wdXNoKC4uLmVJKSxJSn0sdFdlPWZ1bmN0aW9uKGkscyx1KXtjb25zdCBkPXtpZDpZS2UrKyxzZWN0aW9uOlpELHR5cGU6WkQsdGFzazppLHNjb3JlOnN8fDAsZXZlbnRzOnU/W3VdOltdfTtlSS5wdXNoKGQpfSxuV2U9ZnVuY3Rpb24oaSl7ZUkuZmluZCh1PT51LmlkPT09WUtlLTEpLmV2ZW50cy5wdXNoKGkpfSxyV2U9ZnVuY3Rpb24oaSl7Y29uc3Qgcz17c2VjdGlvbjpaRCx0eXBlOlpELGRlc2NyaXB0aW9uOmksdGFzazppLGNsYXNzZXM6W119O0lKLnB1c2gocyl9LGlXZT1mdW5jdGlvbigpe2NvbnN0IGk9ZnVuY3Rpb24odSl7cmV0dXJuIGVJW3VdLnByb2Nlc3NlZH07bGV0IHM9ITA7Zm9yKGNvbnN0W3UsZF1vZiBlSS5lbnRyaWVzKCkpaSh1KSxzPXMmJmQucHJvY2Vzc2VkO3JldHVybiBzfSx6YW49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGFkZEV2ZW50Om5XZSxhZGRTZWN0aW9uOkpLZSxhZGRUYXNrOnRXZSxhZGRUYXNrT3JnOnJXZSxjbGVhcjpRS2UsZGVmYXVsdDp7Y2xlYXI6UUtlLGdldENvbW1vbkRiOlhLZSxhZGRTZWN0aW9uOkpLZSxnZXRTZWN0aW9uczpaS2UsZ2V0VGFza3M6ZVdlLGFkZFRhc2s6dFdlLGFkZFRhc2tPcmc6cldlLGFkZEV2ZW50Om5XZX0sZ2V0Q29tbW9uRGI6WEtlLGdldFNlY3Rpb25zOlpLZSxnZXRUYXNrczplV2V9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSkscWFuPTEyLE9KPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1pLmFwcGVuZCgicmVjdCIpO3JldHVybiB1LmF0dHIoIngiLHMueCksdS5hdHRyKCJ5IixzLnkpLHUuYXR0cigiZmlsbCIscy5maWxsKSx1LmF0dHIoInN0cm9rZSIscy5zdHJva2UpLHUuYXR0cigid2lkdGgiLHMud2lkdGgpLHUuYXR0cigiaGVpZ2h0IixzLmhlaWdodCksdS5hdHRyKCJyeCIscy5yeCksdS5hdHRyKCJyeSIscy5yeSkscy5jbGFzcyE9PXZvaWQgMCYmdS5hdHRyKCJjbGFzcyIscy5jbGFzcyksdX0sSGFuPWZ1bmN0aW9uKGkscyl7Y29uc3QgZD1pLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLHMuY3gpLmF0dHIoImN5IixzLmN5KS5hdHRyKCJjbGFzcyIsImZhY2UiKS5hdHRyKCJyIiwxNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJvdmVyZmxvdyIsInZpc2libGUiKSxwPWkuYXBwZW5kKCJnIik7cC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixzLmN4LTE1LzMpLmF0dHIoImN5IixzLmN5LTE1LzMpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxwLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLHMuY3grMTUvMykuYXR0cigiY3kiLHMuY3ktMTUvMykuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpO2Z1bmN0aW9uIHYoVCl7Y29uc3QgXz1sRCgpLnN0YXJ0QW5nbGUoTWF0aC5QSS8yKS5lbmRBbmdsZSgzKihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7VC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsXykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcy5jeCsiLCIrKHMuY3krMikrIikiKX1mdW5jdGlvbiBiKFQpe2NvbnN0IF89bEQoKS5zdGFydEFuZ2xlKDMqTWF0aC5QSS8yKS5lbmRBbmdsZSg1KihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7VC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsXykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcy5jeCsiLCIrKHMuY3krNykrIikiKX1mdW5jdGlvbiB5KFQpe1QuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZSIsMikuYXR0cigieDEiLHMuY3gtNSkuYXR0cigieTEiLHMuY3krNykuYXR0cigieDIiLHMuY3grNSkuYXR0cigieTIiLHMuY3krNykuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKX1yZXR1cm4gcy5zY29yZT4zP3YocCk6cy5zY29yZTwzP2IocCk6eShwKSxkfSxWYW49ZnVuY3Rpb24oaSxzKXtjb25zdCB1PWkuYXBwZW5kKCJjaXJjbGUiKTtyZXR1cm4gdS5hdHRyKCJjeCIscy5jeCksdS5hdHRyKCJjeSIscy5jeSksdS5hdHRyKCJjbGFzcyIsImFjdG9yLSIrcy5wb3MpLHUuYXR0cigiZmlsbCIscy5maWxsKSx1LmF0dHIoInN0cm9rZSIscy5zdHJva2UpLHUuYXR0cigiciIscy5yKSx1LmNsYXNzIT09dm9pZCAwJiZ1LmF0dHIoImNsYXNzIix1LmNsYXNzKSxzLnRpdGxlIT09dm9pZCAwJiZ1LmFwcGVuZCgidGl0bGUiKS50ZXh0KHMudGl0bGUpLHV9LHNXZT1mdW5jdGlvbihpLHMpe2NvbnN0IHU9cy50ZXh0LnJlcGxhY2UoLzxiclxzKlwvPz4vZ2ksIiAiKSxkPWkuYXBwZW5kKCJ0ZXh0Iik7ZC5hdHRyKCJ4IixzLngpLGQuYXR0cigieSIscy55KSxkLmF0dHIoImNsYXNzIiwibGVnZW5kIiksZC5zdHlsZSgidGV4dC1hbmNob3IiLHMuYW5jaG9yKSxzLmNsYXNzIT09dm9pZCAwJiZkLmF0dHIoImNsYXNzIixzLmNsYXNzKTtjb25zdCBwPWQuYXBwZW5kKCJ0c3BhbiIpO3JldHVybiBwLmF0dHIoIngiLHMueCtzLnRleHRNYXJnaW4qMikscC50ZXh0KHUpLGR9LFVhbj1mdW5jdGlvbihpLHMpe2Z1bmN0aW9uIHUocCx2LGIseSxUKXtyZXR1cm4gcCsiLCIrdisiICIrKHArYikrIiwiK3YrIiAiKyhwK2IpKyIsIisodit5LVQpKyIgIisocCtiLVQqMS4yKSsiLCIrKHYreSkrIiAiK3ArIiwiKyh2K3kpfWNvbnN0IGQ9aS5hcHBlbmQoInBvbHlnb24iKTtkLmF0dHIoInBvaW50cyIsdShzLngscy55LDUwLDIwLDcpKSxkLmF0dHIoImNsYXNzIiwibGFiZWxCb3giKSxzLnk9cy55K3MubGFiZWxNYXJnaW4scy54PXMueCsuNSpzLmxhYmVsTWFyZ2luLHNXZShpLHMpfSxHYW49ZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9aS5hcHBlbmQoImciKSxwPVp2ZSgpO3AueD1zLngscC55PXMueSxwLmZpbGw9cy5maWxsLHAud2lkdGg9dS53aWR0aCxwLmhlaWdodD11LmhlaWdodCxwLmNsYXNzPSJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrcy5udW0scC5yeD0zLHAucnk9MyxPSihkLHApLG9XZSh1KShzLnRleHQsZCxwLngscC55LHAud2lkdGgscC5oZWlnaHQse2NsYXNzOiJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrcy5udW19LHUscy5jb2xvdXIpfTtsZXQgYVdlPS0xO2NvbnN0IEthbj1mdW5jdGlvbihpLHMsdSl7Y29uc3QgZD1zLngrdS53aWR0aC8yLHA9aS5hcHBlbmQoImciKTthV2UrKztjb25zdCB2PTMwMCs1KjMwO3AuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJ0YXNrIithV2UpLmF0dHIoIngxIixkKS5hdHRyKCJ5MSIscy55KS5hdHRyKCJ4MiIsZCkuYXR0cigieTIiLHYpLmF0dHIoImNsYXNzIiwidGFzay1saW5lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjQgMiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxIYW4ocCx7Y3g6ZCxjeTozMDArKDUtcy5zY29yZSkqMzAsc2NvcmU6cy5zY29yZX0pO2NvbnN0IGI9WnZlKCk7Yi54PXMueCxiLnk9cy55LGIuZmlsbD1zLmZpbGwsYi53aWR0aD11LndpZHRoLGIuaGVpZ2h0PXUuaGVpZ2h0LGIuY2xhc3M9InRhc2sgdGFzay10eXBlLSIrcy5udW0sYi5yeD0zLGIucnk9MyxPSihwLGIpLHMueCsxNCxvV2UodSkocy50YXNrLHAsYi54LGIueSxiLndpZHRoLGIuaGVpZ2h0LHtjbGFzczoidGFzayJ9LHUscy5jb2xvdXIpfSxXYW49ZnVuY3Rpb24oaSxzKXtPSihpLHt4OnMuc3RhcnR4LHk6cy5zdGFydHksd2lkdGg6cy5zdG9weC1zLnN0YXJ0eCxoZWlnaHQ6cy5zdG9weS1zLnN0YXJ0eSxmaWxsOnMuZmlsbCxjbGFzczoicmVjdCJ9KS5sb3dlcigpfSxZYW49ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCwidGV4dC1hbmNob3IiOiJzdGFydCIsd2lkdGg6MTAwLGhlaWdodDoxMDAsdGV4dE1hcmdpbjowLHJ4OjAscnk6MH19LFp2ZT1mdW5jdGlvbigpe3JldHVybnt4OjAseTowLHdpZHRoOjEwMCxhbmNob3I6InN0YXJ0IixoZWlnaHQ6MTAwLHJ4OjAscnk6MH19LG9XZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGkocCx2LGIseSxULF8sQSxQKXtjb25zdCBSPXYuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYitULzIpLmF0dHIoInkiLHkrXy8yKzUpLnN0eWxlKCJmb250LWNvbG9yIixQKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHApO2QoUixBKX1mdW5jdGlvbiBzKHAsdixiLHksVCxfLEEsUCxSKXtjb25zdHt0YXNrRm9udFNpemU6Rix0YXNrRm9udEZhbWlseTpqfT1QLEs9cC5zcGxpdCgvPGJyXHMqXC8/Pi9naSk7Zm9yKGxldCBlZT0wO2VlPEsubGVuZ3RoO2VlKyspe2NvbnN0IGllPWVlKkYtRiooSy5sZW5ndGgtMSkvMixvZT12LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrVC8yKS5hdHRyKCJ5Iix5KS5hdHRyKCJmaWxsIixSKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1zaXplIixGKS5zdHlsZSgiZm9udC1mYW1pbHkiLGopO29lLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixiK1QvMikuYXR0cigiZHkiLGllKS50ZXh0KEtbZWVdKSxvZS5hdHRyKCJ5Iix5K18vMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLGQob2UsQSl9fWZ1bmN0aW9uIHUocCx2LGIseSxULF8sQSxQKXtjb25zdCBSPXYuYXBwZW5kKCJzd2l0Y2giKSxqPVIuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsYikuYXR0cigieSIseSkuYXR0cigid2lkdGgiLFQpLmF0dHIoImhlaWdodCIsXykuYXR0cigicG9zaXRpb24iLCJmaXhlZCIpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2ouYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHApLHMocCxSLGIseSxULF8sQSxQKSxkKGosQSl9ZnVuY3Rpb24gZChwLHYpe2Zvcihjb25zdCBiIGluIHYpYiBpbiB2JiZwLmF0dHIoYix2W2JdKX1yZXR1cm4gZnVuY3Rpb24ocCl7cmV0dXJuIHAudGV4dFBsYWNlbWVudD09PSJmbyI/dTpwLnRleHRQbGFjZW1lbnQ9PT0ib2xkIj9pOnN9fSgpLFhhbj1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw1KS5hdHRyKCJyZWZZIiwyKS5hdHRyKCJtYXJrZXJXaWR0aCIsNikuYXR0cigibWFya2VySGVpZ2h0Iiw0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCwwIFYgNCBMNiwyIFoiKX07ZnVuY3Rpb24gY1dlKGkscyl7aS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHU9SXIodGhpcyksZD11LnRleHQoKS5zcGxpdCgvKFxzK3w8YnI+KS8pLnJldmVyc2UoKSxwLHY9W10sYj0xLjEseT11LmF0dHIoInkiKSxUPXBhcnNlRmxvYXQodS5hdHRyKCJkeSIpKSxfPXUudGV4dChudWxsKS5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsMCkuYXR0cigieSIseSkuYXR0cigiZHkiLFQrImVtIik7Zm9yKGxldCBBPTA7QTxkLmxlbmd0aDtBKyspcD1kW2QubGVuZ3RoLTEtQV0sdi5wdXNoKHApLF8udGV4dCh2LmpvaW4oIiAiKS50cmltKCkpLChfLm5vZGUoKS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKT5zfHxwPT09Ijxicj4iKSYmKHYucG9wKCksXy50ZXh0KHYuam9pbigiICIpLnRyaW0oKSkscD09PSI8YnI+Ij92PVsiIl06dj1bcF0sXz11LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5Iix5KS5hdHRyKCJkeSIsYisiZW0iKS50ZXh0KHApKX0pfWNvbnN0IFFhbj1mdW5jdGlvbihpLHMsdSxkKXtjb25zdCBwPXUlcWFuLTEsdj1pLmFwcGVuZCgiZyIpO3Muc2VjdGlvbj1wLHYuYXR0cigiY2xhc3MiLChzLmNsYXNzP3MuY2xhc3MrIiAiOiIiKSsidGltZWxpbmUtbm9kZSAiKygic2VjdGlvbi0iK3ApKTtjb25zdCBiPXYuYXBwZW5kKCJnIikseT12LmFwcGVuZCgiZyIpLF89eS5hcHBlbmQoInRleHQiKS50ZXh0KHMuZGVzY3IpLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwoY1dlLHMud2lkdGgpLm5vZGUoKS5nZXRCQm94KCksQT1kLmZvbnRTaXplJiZkLmZvbnRTaXplLnJlcGxhY2U/ZC5mb250U2l6ZS5yZXBsYWNlKCJweCIsIiIpOmQuZm9udFNpemU7cmV0dXJuIHMuaGVpZ2h0PV8uaGVpZ2h0K0EqMS4xKi41K3MucGFkZGluZyxzLmhlaWdodD1NYXRoLm1heChzLmhlaWdodCxzLm1heEhlaWdodCkscy53aWR0aD1zLndpZHRoKzIqcy5wYWRkaW5nLHkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcy53aWR0aC8yKyIsICIrcy5wYWRkaW5nLzIrIikiKSxaYW4oYixzLHApLHN9LEphbj1mdW5jdGlvbihpLHMsdSl7Y29uc3QgZD1pLmFwcGVuZCgiZyIpLHY9ZC5hcHBlbmQoInRleHQiKS50ZXh0KHMuZGVzY3IpLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwoY1dlLHMud2lkdGgpLm5vZGUoKS5nZXRCQm94KCksYj11LmZvbnRTaXplJiZ1LmZvbnRTaXplLnJlcGxhY2U/dS5mb250U2l6ZS5yZXBsYWNlKCJweCIsIiIpOnUuZm9udFNpemU7cmV0dXJuIGQucmVtb3ZlKCksdi5oZWlnaHQrYioxLjEqLjUrcy5wYWRkaW5nfSxaYW49ZnVuY3Rpb24oaSxzLHUpe2kuYXBwZW5kKCJwYXRoIikuYXR0cigiaWQiLCJub2RlLSIrcy5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrcy50eXBlKS5hdHRyKCJkIixgTTAgJHtzLmhlaWdodC01fSB2JHstcy5oZWlnaHQrMio1fSBxMCwtNSA1LC01IGgke3Mud2lkdGgtMio1fSBxNSwwIDUsNSB2JHtzLmhlaWdodC01fSBIMCBaYCksaS5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm5vZGUtbGluZS0iK3UpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIscy5oZWlnaHQpLmF0dHIoIngyIixzLndpZHRoKS5hdHRyKCJ5MiIscy5oZWlnaHQpfSxzUz17ZHJhd1JlY3Q6T0osZHJhd0NpcmNsZTpWYW4sZHJhd1NlY3Rpb246R2FuLGRyYXdUZXh0OnNXZSxkcmF3TGFiZWw6VWFuLGRyYXdUYXNrOkthbixkcmF3QmFja2dyb3VuZFJlY3Q6V2FuLGdldFRleHRPYmo6WWFuLGdldE5vdGVSZWN0Olp2ZSxpbml0R3JhcGhpY3M6WGFuLGRyYXdOb2RlOlFhbixnZXRWaXJ0dWFsTm9kZUhlaWdodDpKYW59LGVvbj1mdW5jdGlvbihpLHMsdSxkKXt2YXIgWCxnZTtjb25zdCBwPXF0KCksdj1wLmxlZnRNYXJnaW4/PzUwO1hlLmRlYnVnKCJ0aW1lbGluZSIsZC5kYik7Y29uc3QgYj1wLnNlY3VyaXR5TGV2ZWw7bGV0IHk7Yj09PSJzYW5kYm94IiYmKHk9SXIoIiNpIitzKSk7Y29uc3QgXz1JcihiPT09InNhbmRib3giP3kubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLnNlbGVjdCgiIyIrcyk7Xy5hcHBlbmQoImciKTtjb25zdCBBPWQuZGIuZ2V0VGFza3MoKSxQPWQuZGIuZ2V0Q29tbW9uRGIoKS5nZXREaWFncmFtVGl0bGUoKTtYZS5kZWJ1ZygidGFzayIsQSksc1MuaW5pdEdyYXBoaWNzKF8pO2NvbnN0IFI9ZC5kYi5nZXRTZWN0aW9ucygpO1hlLmRlYnVnKCJzZWN0aW9ucyIsUik7bGV0IEY9MCxqPTAsSz0wLGVlPTAsaWU9NTArdixvZT01MDtlZT01MDtsZXQgcGU9MCxiZT0hMDtSLmZvckVhY2goZnVuY3Rpb24oVyl7Y29uc3QgeGU9e251bWJlcjpwZSxkZXNjcjpXLHNlY3Rpb246cGUsd2lkdGg6MTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0OkZ9LFU9c1MuZ2V0VmlydHVhbE5vZGVIZWlnaHQoXyx4ZSxwKTtYZS5kZWJ1Zygic2VjdGlvbkhlaWdodCBiZWZvcmUgZHJhdyIsVSksRj1NYXRoLm1heChGLFUrMjApfSk7bGV0IGFlPTAsbmU9MDtYZS5kZWJ1ZygidGFza3MubGVuZ3RoIixBLmxlbmd0aCk7Zm9yKGNvbnN0W1cseGVdb2YgQS5lbnRyaWVzKCkpe2NvbnN0IFU9e251bWJlcjpXLGRlc2NyOnhlLHNlY3Rpb246eGUuc2VjdGlvbix3aWR0aDoxNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6an0sRmU9c1MuZ2V0VmlydHVhbE5vZGVIZWlnaHQoXyxVLHApO1hlLmRlYnVnKCJ0YXNrSGVpZ2h0IGJlZm9yZSBkcmF3IixGZSksaj1NYXRoLm1heChqLEZlKzIwKSxhZT1NYXRoLm1heChhZSx4ZS5ldmVudHMubGVuZ3RoKTtsZXQgUGU9MDtmb3IobGV0IGplPTA7amU8eGUuZXZlbnRzLmxlbmd0aDtqZSsrKXtjb25zdCBTZT17ZGVzY3I6eGUuZXZlbnRzW2plXSxzZWN0aW9uOnhlLnNlY3Rpb24sbnVtYmVyOnhlLnNlY3Rpb24sd2lkdGg6MTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0OjUwfTtQZSs9c1MuZ2V0VmlydHVhbE5vZGVIZWlnaHQoXyxTZSxwKX1uZT1NYXRoLm1heChuZSxQZSl9WGUuZGVidWcoIm1heFNlY3Rpb25IZWlnaHQgYmVmb3JlIGRyYXciLEYpLFhlLmRlYnVnKCJtYXhUYXNrSGVpZ2h0IGJlZm9yZSBkcmF3IixqKSxSJiZSLmxlbmd0aD4wP1IuZm9yRWFjaChXPT57Y29uc3QgeGU9QS5maWx0ZXIoamU9PmplLnNlY3Rpb249PT1XKSxVPXtudW1iZXI6cGUsZGVzY3I6VyxzZWN0aW9uOnBlLHdpZHRoOjIwMCpNYXRoLm1heCh4ZS5sZW5ndGgsMSktNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6Rn07WGUuZGVidWcoInNlY3Rpb25Ob2RlIixVKTtjb25zdCBGZT1fLmFwcGVuZCgiZyIpLFBlPXNTLmRyYXdOb2RlKEZlLFUscGUscCk7WGUuZGVidWcoInNlY3Rpb25Ob2RlIG91dHB1dCIsUGUpLEZlLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2llfSwgJHtlZX0pYCksb2UrPUYrNTAseGUubGVuZ3RoPjAmJnVXZShfLHhlLHBlLGllLG9lLGoscCxhZSxuZSxGLCExKSxpZSs9MjAwKk1hdGgubWF4KHhlLmxlbmd0aCwxKSxvZT1lZSxwZSsrfSk6KGJlPSExLHVXZShfLEEscGUsaWUsb2UsaixwLGFlLG5lLEYsITApKTtjb25zdCBzZT1fLm5vZGUoKS5nZXRCQm94KCk7WGUuZGVidWcoImJvdW5kcyIsc2UpLFAmJl8uYXBwZW5kKCJ0ZXh0IikudGV4dChQKS5hdHRyKCJ4IixzZS53aWR0aC8yLXYpLmF0dHIoImZvbnQtc2l6ZSIsIjRleCIpLmF0dHIoImZvbnQtd2VpZ2h0IiwiYm9sZCIpLmF0dHIoInkiLDIwKSxLPWJlP0YraisxNTA6aisxMDAsXy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxpbmVXcmFwcGVyIikuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLHYpLmF0dHIoInkxIixLKS5hdHRyKCJ4MiIsc2Uud2lkdGgrMyp2KS5hdHRyKCJ5MiIsSykuYXR0cigic3Ryb2tlLXdpZHRoIiw0KS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKSx5OSh2b2lkIDAsXywoKFg9cC50aW1lbGluZSk9PW51bGw/dm9pZCAwOlgucGFkZGluZyk/PzUwLCgoZ2U9cC50aW1lbGluZSk9PW51bGw/dm9pZCAwOmdlLnVzZU1heFdpZHRoKT8/ITEpfSx1V2U9ZnVuY3Rpb24oaSxzLHUsZCxwLHYsYix5LFQsXyxBKXt2YXIgUDtmb3IoY29uc3QgUiBvZiBzKXtjb25zdCBGPXtkZXNjcjpSLnRhc2ssc2VjdGlvbjp1LG51bWJlcjp1LHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDp2fTtYZS5kZWJ1ZygidGFza05vZGUiLEYpO2NvbnN0IGo9aS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRhc2tXcmFwcGVyIiksZWU9c1MuZHJhd05vZGUoaixGLHUsYikuaGVpZ2h0O2lmKFhlLmRlYnVnKCJ0YXNrSGVpZ2h0IGFmdGVyIGRyYXciLGVlKSxqLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2R9LCAke3B9KWApLHY9TWF0aC5tYXgodixlZSksUi5ldmVudHMpe2NvbnN0IGllPWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsaW5lV3JhcHBlciIpO2xldCBvZT12O3ArPTEwMCxvZT1vZSt0b24oaSxSLmV2ZW50cyx1LGQscCxiKSxwLT0xMDAsaWUuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLGQrMTkwLzIpLmF0dHIoInkxIixwK3YpLmF0dHIoIngyIixkKzE5MC8yKS5hdHRyKCJ5MiIscCt2KyhBP3Y6XykrVCsxMjApLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvd2hlYWQpIikuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjUsNSIpfWQ9ZCsyMDAsQSYmISgoUD1iLnRpbWVsaW5lKSE9bnVsbCYmUC5kaXNhYmxlTXVsdGljb2xvcikmJnUrK31wPXAtMTB9LHRvbj1mdW5jdGlvbihpLHMsdSxkLHAsdil7bGV0IGI9MDtjb25zdCB5PXA7cD1wKzEwMDtmb3IoY29uc3QgVCBvZiBzKXtjb25zdCBfPXtkZXNjcjpULHNlY3Rpb246dSxudW1iZXI6dSx3aWR0aDoxNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6NTB9O1hlLmRlYnVnKCJldmVudE5vZGUiLF8pO2NvbnN0IEE9aS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImV2ZW50V3JhcHBlciIpLFI9c1MuZHJhd05vZGUoQSxfLHUsdikuaGVpZ2h0O2I9YitSLEEuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7ZH0sICR7cH0pYCkscD1wKzEwK1J9cmV0dXJuIHA9eSxifSxub249e3NldENvbmY6KCk9Pnt9LGRyYXc6ZW9ufSxyb249aT0+e2xldCBzPSIiO2ZvcihsZXQgdT0wO3U8aS5USEVNRV9DT0xPUl9MSU1JVDt1KyspaVsibGluZUNvbG9yIit1XT1pWyJsaW5lQ29sb3IiK3VdfHxpWyJjU2NhbGVJbnYiK3VdLF9DKGlbImxpbmVDb2xvciIrdV0pP2lbImxpbmVDb2xvciIrdV09R3MoaVsibGluZUNvbG9yIit1XSwyMCk6aVsibGluZUNvbG9yIit1XT1mYShpWyJsaW5lQ29sb3IiK3VdLDIwKTtmb3IobGV0IHU9MDt1PGkuVEhFTUVfQ09MT1JfTElNSVQ7dSsrKXtjb25zdCBkPSIiKygxNy0zKnUpO3MrPWAKICAgIC5zZWN0aW9uLSR7dS0xfSByZWN0LCAuc2VjdGlvbi0ke3UtMX0gcGF0aCwgLnNlY3Rpb24tJHt1LTF9IGNpcmNsZSwgLnNlY3Rpb24tJHt1LTF9IHBhdGggIHsKICAgICAgZmlsbDogJHtpWyJjU2NhbGUiK3VdfTsKICAgIH0KICAgIC5zZWN0aW9uLSR7dS0xfSB0ZXh0IHsKICAgICBmaWxsOiAke2lbImNTY2FsZUxhYmVsIit1XX07CiAgICB9CiAgICAubm9kZS1pY29uLSR7dS0xfSB7CiAgICAgIGZvbnQtc2l6ZTogNDBweDsKICAgICAgY29sb3I6ICR7aVsiY1NjYWxlTGFiZWwiK3VdfTsKICAgIH0KICAgIC5zZWN0aW9uLWVkZ2UtJHt1LTF9ewogICAgICBzdHJva2U6ICR7aVsiY1NjYWxlIit1XX07CiAgICB9CiAgICAuZWRnZS1kZXB0aC0ke3UtMX17CiAgICAgIHN0cm9rZS13aWR0aDogJHtkfTsKICAgIH0KICAgIC5zZWN0aW9uLSR7dS0xfSBsaW5lIHsKICAgICAgc3Ryb2tlOiAke2lbImNTY2FsZUludiIrdV19IDsKICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgfQoKICAgIC5saW5lV3JhcHBlciBsaW5lewogICAgICBzdHJva2U6ICR7aVsiY1NjYWxlTGFiZWwiK3VdfSA7CiAgICB9CgogICAgLmRpc2FibGVkLCAuZGlzYWJsZWQgY2lyY2xlLCAuZGlzYWJsZWQgdGV4dCB7CiAgICAgIGZpbGw6IGxpZ2h0Z3JheTsKICAgIH0KICAgIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogI2VmZWZlZjsKICAgIH0KICAgIGB9cmV0dXJuIHN9LGlvbj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7ZGI6emFuLHJlbmRlcmVyOm5vbixwYXJzZXI6JGFuLHN0eWxlczppPT5gCiAgLmVkZ2UgewogICAgc3Ryb2tlLXdpZHRoOiAzOwogIH0KICAke3JvbihpKX0KICAuc2VjdGlvbi1yb290IHJlY3QsIC5zZWN0aW9uLXJvb3QgcGF0aCwgLnNlY3Rpb24tcm9vdCBjaXJjbGUgIHsKICAgIGZpbGw6ICR7aS5naXQwfTsKICB9CiAgLnNlY3Rpb24tcm9vdCB0ZXh0IHsKICAgIGZpbGw6ICR7aS5naXRCcmFuY2hMYWJlbDB9OwogIH0KICAuaWNvbi1jb250YWluZXIgewogICAgaGVpZ2h0OjEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogIH0KICAuZWRnZSB7CiAgICBmaWxsOiBub25lOwogIH0KICAuZXZlbnRXcmFwcGVyICB7CiAgIGZpbHRlcjogYnJpZ2h0bmVzcygxMjAlKTsKICB9CmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBld2U9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihiZSxhZSxuZSxzZSl7Zm9yKG5lPW5lfHx7fSxzZT1iZS5sZW5ndGg7c2UtLTtuZVtiZVtzZV1dPWFlKTtyZXR1cm4gbmV9LHM9WzEsNF0sdT1bMSwxM10sZD1bMSwxMl0scD1bMSwxNV0sdj1bMSwxNl0sYj1bMSwyMF0seT1bMSwxOV0sVD1bNiw3LDhdLF89WzEsMjZdLEE9WzEsMjRdLFA9WzEsMjVdLFI9WzYsNywxMV0sRj1bMSw2LDEzLDE1LDE2LDE5LDIyXSxqPVsxLDMzXSxLPVsxLDM0XSxlZT1bMSw2LDcsMTEsMTMsMTUsMTYsMTksMjJdLGllPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtaW5kTWFwOjQsc3BhY2VMaW5lczo1LFNQQUNFTElORTo2LE5MOjcsTUlORE1BUDo4LGRvY3VtZW50Ojksc3RvcDoxMCxFT0Y6MTEsc3RhdGVtZW50OjEyLFNQQUNFTElTVDoxMyxub2RlOjE0LElDT046MTUsQ0xBU1M6MTYsbm9kZVdpdGhJZDoxNyxub2RlV2l0aG91dElkOjE4LE5PREVfRFNUQVJUOjE5LE5PREVfREVTQ1I6MjAsTk9ERV9ERU5EOjIxLE5PREVfSUQ6MjIsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDY6IlNQQUNFTElORSIsNzoiTkwiLDg6Ik1JTkRNQVAiLDExOiJFT0YiLDEzOiJTUEFDRUxJU1QiLDE1OiJJQ09OIiwxNjoiQ0xBU1MiLDE5OiJOT0RFX0RTVEFSVCIsMjA6Ik5PREVfREVTQ1IiLDIxOiJOT0RFX0RFTkQiLDIyOiJOT0RFX0lEIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDJdLFs1LDFdLFs1LDJdLFs1LDJdLFs0LDJdLFs0LDNdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMl0sWzksM10sWzksMl0sWzEyLDJdLFsxMiwyXSxbMTIsMl0sWzEyLDFdLFsxMiwxXSxbMTIsMV0sWzEyLDFdLFsxMiwxXSxbMTQsMV0sWzE0LDFdLFsxOCwzXSxbMTcsMV0sWzE3LDRdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGFlLG5lLHNlLGRlLFgsZ2UsVyl7dmFyIHhlPWdlLmxlbmd0aC0xO3N3aXRjaChYKXtjYXNlIDY6Y2FzZSA3OnJldHVybiBkZTtjYXNlIDg6ZGUuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgTkwgIik7YnJlYWs7Y2FzZSA5OmRlLmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIEVPRiAiKTticmVhaztjYXNlIDExOmRlLmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIE5MMiAiKTticmVhaztjYXNlIDEyOmRlLmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIEVPRjIgIik7YnJlYWs7Y2FzZSAxNTpkZS5nZXRMb2dnZXIoKS5pbmZvKCJOb2RlOiAiLGdlW3hlXS5pZCksZGUuYWRkTm9kZShnZVt4ZS0xXS5sZW5ndGgsZ2VbeGVdLmlkLGdlW3hlXS5kZXNjcixnZVt4ZV0udHlwZSk7YnJlYWs7Y2FzZSAxNjpkZS5nZXRMb2dnZXIoKS50cmFjZSgiSWNvbjogIixnZVt4ZV0pLGRlLmRlY29yYXRlTm9kZSh7aWNvbjpnZVt4ZV19KTticmVhaztjYXNlIDE3OmNhc2UgMjE6ZGUuZGVjb3JhdGVOb2RlKHtjbGFzczpnZVt4ZV19KTticmVhaztjYXNlIDE4OmRlLmdldExvZ2dlcigpLnRyYWNlKCJTUEFDRUxJU1QiKTticmVhaztjYXNlIDE5OmRlLmdldExvZ2dlcigpLnRyYWNlKCJOb2RlOiAiLGdlW3hlXS5pZCksZGUuYWRkTm9kZSgwLGdlW3hlXS5pZCxnZVt4ZV0uZGVzY3IsZ2VbeGVdLnR5cGUpO2JyZWFrO2Nhc2UgMjA6ZGUuZGVjb3JhdGVOb2RlKHtpY29uOmdlW3hlXX0pO2JyZWFrO2Nhc2UgMjU6ZGUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZm91bmQgLi4iLGdlW3hlLTJdKSx0aGlzLiQ9e2lkOmdlW3hlLTFdLGRlc2NyOmdlW3hlLTFdLHR5cGU6ZGUuZ2V0VHlwZShnZVt4ZS0yXSxnZVt4ZV0pfTticmVhaztjYXNlIDI2OnRoaXMuJD17aWQ6Z2VbeGVdLGRlc2NyOmdlW3hlXSx0eXBlOmRlLm5vZGVUeXBlLkRFRkFVTFR9O2JyZWFrO2Nhc2UgMjc6ZGUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZm91bmQgLi4iLGdlW3hlLTNdKSx0aGlzLiQ9e2lkOmdlW3hlLTNdLGRlc2NyOmdlW3hlLTFdLHR5cGU6ZGUuZ2V0VHlwZShnZVt4ZS0yXSxnZVt4ZV0pfTticmVha319LHRhYmxlOlt7MzoxLDQ6Miw1OjMsNjpbMSw1XSw4OnN9LHsxOlszXX0sezE6WzIsMV19LHs0OjYsNjpbMSw3XSw3OlsxLDhdLDg6c30sezY6dSw3OlsxLDEwXSw5OjksMTI6MTEsMTM6ZCwxNDoxNCwxNTpwLDE2OnYsMTc6MTcsMTg6MTgsMTk6YiwyMjp5fSxpKFQsWzIsM10pLHsxOlsyLDJdfSxpKFQsWzIsNF0pLGkoVCxbMiw1XSksezE6WzIsNl0sNjp1LDEyOjIxLDEzOmQsMTQ6MTQsMTU6cCwxNjp2LDE3OjE3LDE4OjE4LDE5OmIsMjI6eX0sezY6dSw5OjIyLDEyOjExLDEzOmQsMTQ6MTQsMTU6cCwxNjp2LDE3OjE3LDE4OjE4LDE5OmIsMjI6eX0sezY6Xyw3OkEsMTA6MjMsMTE6UH0saShSLFsyLDIyXSx7MTc6MTcsMTg6MTgsMTQ6MjcsMTU6WzEsMjhdLDE2OlsxLDI5XSwxOTpiLDIyOnl9KSxpKFIsWzIsMThdKSxpKFIsWzIsMTldKSxpKFIsWzIsMjBdKSxpKFIsWzIsMjFdKSxpKFIsWzIsMjNdKSxpKFIsWzIsMjRdKSxpKFIsWzIsMjZdLHsxOTpbMSwzMF19KSx7MjA6WzEsMzFdfSx7NjpfLDc6QSwxMDozMiwxMTpQfSx7MTpbMiw3XSw2OnUsMTI6MjEsMTM6ZCwxNDoxNCwxNTpwLDE2OnYsMTc6MTcsMTg6MTgsMTk6YiwyMjp5fSxpKEYsWzIsMTRdLHs3OmosMTE6S30pLGkoZWUsWzIsOF0pLGkoZWUsWzIsOV0pLGkoZWUsWzIsMTBdKSxpKFIsWzIsMTVdKSxpKFIsWzIsMTZdKSxpKFIsWzIsMTddKSx7MjA6WzEsMzVdfSx7MjE6WzEsMzZdfSxpKEYsWzIsMTNdLHs3OmosMTE6S30pLGkoZWUsWzIsMTFdKSxpKGVlLFsyLDEyXSksezIxOlsxLDM3XX0saShSLFsyLDI1XSksaShSLFsyLDI3XSldLGRlZmF1bHRBY3Rpb25zOnsyOlsyLDFdLDY6WzIsMl19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oYWUsbmUpe2lmKG5lLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoYWUpO2Vsc2V7dmFyIHNlPW5ldyBFcnJvcihhZSk7dGhyb3cgc2UuaGFzaD1uZSxzZX19LHBhcnNlOmZ1bmN0aW9uKGFlKXt2YXIgbmU9dGhpcyxzZT1bMF0sZGU9W10sWD1bbnVsbF0sZ2U9W10sVz10aGlzLnRhYmxlLHhlPSIiLFU9MCxGZT0wLFBlPTIsamU9MSxJZT1nZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxTZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLENlPXt5eTp7fX07Zm9yKHZhciBrZSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGtlKSYmKENlLnl5W2tlXT10aGlzLnl5W2tlXSk7U2Uuc2V0SW5wdXQoYWUsQ2UueXkpLENlLnl5LmxleGVyPVNlLENlLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBTZS55eWxsb2M+InUiJiYoU2UueXlsbG9jPXt9KTt2YXIgS2U9U2UueXlsbG9jO2dlLnB1c2goS2UpO3ZhciBGdD1TZS5vcHRpb25zJiZTZS5vcHRpb25zLnJhbmdlczt0eXBlb2YgQ2UueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Q2UueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gTmUoKXt2YXIgT247cmV0dXJuIE9uPWRlLnBvcCgpfHxTZS5sZXgoKXx8amUsdHlwZW9mIE9uIT0ibnVtYmVyIiYmKE9uIGluc3RhbmNlb2YgQXJyYXkmJihkZT1PbixPbj1kZS5wb3AoKSksT249bmUuc3ltYm9sc19bT25dfHxPbiksT259Zm9yKHZhciBnbixfdCxFdCxHdCxsbj17fSx4dCxQdCxRZSxEdDs7KXtpZihfdD1zZVtzZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tfdF0/RXQ9dGhpcy5kZWZhdWx0QWN0aW9uc1tfdF06KChnbj09PW51bGx8fHR5cGVvZiBnbj4idSIpJiYoZ249TmUoKSksRXQ9V1tfdF0mJldbX3RdW2duXSksdHlwZW9mIEV0PiJ1Inx8IUV0Lmxlbmd0aHx8IUV0WzBdKXt2YXIga3Q9IiI7RHQ9W107Zm9yKHh0IGluIFdbX3RdKXRoaXMudGVybWluYWxzX1t4dF0mJnh0PlBlJiZEdC5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19beHRdKyInIik7U2Uuc2hvd1Bvc2l0aW9uP2t0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFUrMSkrYDoKYCtTZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK0R0LmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bZ25dfHxnbikrIiciOmt0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFUrMSkrIjogVW5leHBlY3RlZCAiKyhnbj09amU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bZ25dfHxnbikrIiciKSx0aGlzLnBhcnNlRXJyb3Ioa3Qse3RleHQ6U2UubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW2duXXx8Z24sbGluZTpTZS55eWxpbmVubyxsb2M6S2UsZXhwZWN0ZWQ6RHR9KX1pZihFdFswXWluc3RhbmNlb2YgQXJyYXkmJkV0Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrX3QrIiwgdG9rZW46ICIrZ24pO3N3aXRjaChFdFswXSl7Y2FzZSAxOnNlLnB1c2goZ24pLFgucHVzaChTZS55eXRleHQpLGdlLnB1c2goU2UueXlsbG9jKSxzZS5wdXNoKEV0WzFdKSxnbj1udWxsLEZlPVNlLnl5bGVuZyx4ZT1TZS55eXRleHQsVT1TZS55eWxpbmVubyxLZT1TZS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKFB0PXRoaXMucHJvZHVjdGlvbnNfW0V0WzFdXVsxXSxsbi4kPVhbWC5sZW5ndGgtUHRdLGxuLl8kPXtmaXJzdF9saW5lOmdlW2dlLmxlbmd0aC0oUHR8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpnZVtnZS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpnZVtnZS5sZW5ndGgtKFB0fHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmdlW2dlLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sRnQmJihsbi5fJC5yYW5nZT1bZ2VbZ2UubGVuZ3RoLShQdHx8MSldLnJhbmdlWzBdLGdlW2dlLmxlbmd0aC0xXS5yYW5nZVsxXV0pLEd0PXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShsbixbeGUsRmUsVSxDZS55eSxFdFsxXSxYLGdlXS5jb25jYXQoSWUpKSx0eXBlb2YgR3Q8InUiKXJldHVybiBHdDtQdCYmKHNlPXNlLnNsaWNlKDAsLTEqUHQqMiksWD1YLnNsaWNlKDAsLTEqUHQpLGdlPWdlLnNsaWNlKDAsLTEqUHQpKSxzZS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW0V0WzFdXVswXSksWC5wdXNoKGxuLiQpLGdlLnB1c2gobG4uXyQpLFFlPVdbc2Vbc2UubGVuZ3RoLTJdXVtzZVtzZS5sZW5ndGgtMV1dLHNlLnB1c2goUWUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxvZT1mdW5jdGlvbigpe3ZhciBiZT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihuZSxzZSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihuZSxzZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IobmUpfSxzZXRJbnB1dDpmdW5jdGlvbihhZSxuZSl7cmV0dXJuIHRoaXMueXk9bmV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PWFlLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBhZT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9YWUsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPWFlLHRoaXMubWF0Y2hlZCs9YWU7dmFyIG5lPWFlLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gbmU/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLGFlfSx1bnB1dDpmdW5jdGlvbihhZSl7dmFyIG5lPWFlLmxlbmd0aCxzZT1hZS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PWFlK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1uZSksdGhpcy5vZmZzZXQtPW5lO3ZhciBkZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxzZS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXNlLmxlbmd0aC0xKTt2YXIgWD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46c2U/KHNlLmxlbmd0aD09PWRlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrZGVbZGUubGVuZ3RoLXNlLmxlbmd0aF0ubGVuZ3RoLXNlWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bWFswXSxYWzBdK3RoaXMueXlsZW5nLW5lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oYWUpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShhZSkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgYWU9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihhZS5sZW5ndGg+MjA/Ii4uLiI6IiIpK2FlLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIGFlPXRoaXMubWF0Y2g7cmV0dXJuIGFlLmxlbmd0aDwyMCYmKGFlKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1hZS5sZW5ndGgpKSwoYWUuc3Vic3RyKDAsMjApKyhhZS5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGFlPXRoaXMucGFzdElucHV0KCksbmU9bmV3IEFycmF5KGFlLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIGFlK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtuZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oYWUsbmUpe3ZhciBzZSxkZSxYO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihYPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFgueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksZGU9YWVbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLGRlJiYodGhpcy55eWxpbmVubys9ZGUubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46ZGU/ZGVbZGUubGVuZ3RoLTFdLmxlbmd0aC1kZVtkZS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbithZVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1hZVswXSx0aGlzLm1hdGNoKz1hZVswXSx0aGlzLm1hdGNoZXM9YWUsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoYWVbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPWFlWzBdLHNlPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLG5lLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLHNlKXJldHVybiBzZTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgZ2UgaW4gWCl0aGlzW2dlXT1YW2dlXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBhZSxuZSxzZSxkZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBYPXRoaXMuX2N1cnJlbnRSdWxlcygpLGdlPTA7Z2U8WC5sZW5ndGg7Z2UrKylpZihzZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW1hbZ2VdXSksc2UmJighbmV8fHNlWzBdLmxlbmd0aD5uZVswXS5sZW5ndGgpKXtpZihuZT1zZSxkZT1nZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihhZT10aGlzLnRlc3RfbWF0Y2goc2UsWFtnZV0pLGFlIT09ITEpcmV0dXJuIGFlO2lmKHRoaXMuX2JhY2t0cmFjayl7bmU9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gbmU/KGFlPXRoaXMudGVzdF9tYXRjaChuZSxYW2RlXSksYWUhPT0hMT9hZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIG5lPXRoaXMubmV4dCgpO3JldHVybiBuZXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24obmUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChuZSl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIG5lPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIG5lPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24obmUpe3JldHVybiBuZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKG5lfHwwKSxuZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW25lXToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihuZSl7dGhpcy5iZWdpbihuZSl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24obmUsc2UsZGUsWCl7c3dpdGNoKGRlKXtjYXNlIDA6cmV0dXJuIG5lLmdldExvZ2dlcigpLnRyYWNlKCJGb3VuZCBjb21tZW50IixzZS55eXRleHQpLDY7Y2FzZSAxOnJldHVybiA4O2Nhc2UgMjp0aGlzLmJlZ2luKCJDTEFTUyIpO2JyZWFrO2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE2O2Nhc2UgNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA1Om5lLmdldExvZ2dlcigpLnRyYWNlKCJCZWdpbiBpY29uIiksdGhpcy5iZWdpbigiSUNPTiIpO2JyZWFrO2Nhc2UgNjpyZXR1cm4gbmUuZ2V0TG9nZ2VyKCkudHJhY2UoIlNQQUNFTElORSIpLDY7Y2FzZSA3OnJldHVybiA3O2Nhc2UgODpyZXR1cm4gMTU7Y2FzZSA5Om5lLmdldExvZ2dlcigpLnRyYWNlKCJlbmQgaWNvbiIpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEwOnJldHVybiBuZS5nZXRMb2dnZXIoKS50cmFjZSgiRXhwbG9kaW5nIG5vZGUiKSx0aGlzLmJlZ2luKCJOT0RFIiksMTk7Y2FzZSAxMTpyZXR1cm4gbmUuZ2V0TG9nZ2VyKCkudHJhY2UoIkNsb3VkIiksdGhpcy5iZWdpbigiTk9ERSIpLDE5O2Nhc2UgMTI6cmV0dXJuIG5lLmdldExvZ2dlcigpLnRyYWNlKCJFeHBsb3Npb24gQmFuZyIpLHRoaXMuYmVnaW4oIk5PREUiKSwxOTtjYXNlIDEzOnJldHVybiBuZS5nZXRMb2dnZXIoKS50cmFjZSgiQ2xvdWQgQmFuZyIpLHRoaXMuYmVnaW4oIk5PREUiKSwxOTtjYXNlIDE0OnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMTk7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDE5O2Nhc2UgMTY6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwxOTtjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMTk7Y2FzZSAxODpyZXR1cm4gMTM7Y2FzZSAxOTpyZXR1cm4gMjI7Y2FzZSAyMDpyZXR1cm4gMTE7Y2FzZSAyMTp0aGlzLmJlZ2luKCJOU1RSMiIpO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIk5PREVfREVTQ1IiO2Nhc2UgMjM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjQ6bmUuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0YXJ0aW5nIE5TVFIiKSx0aGlzLmJlZ2luKCJOU1RSIik7YnJlYWs7Y2FzZSAyNTpyZXR1cm4gbmUuZ2V0TG9nZ2VyKCkudHJhY2UoImRlc2NyaXB0aW9uOiIsc2UueXl0ZXh0KSwiTk9ERV9ERVNDUiI7Y2FzZSAyNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLG5lLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCApKSIpLCJOT0RFX0RFTkQiO2Nhc2UgMjg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxuZS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKSIpLCJOT0RFX0RFTkQiO2Nhc2UgMjk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxuZS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgLi4uIixzZS55eXRleHQpLCJOT0RFX0RFTkQiO2Nhc2UgMzA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxuZS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKCgiKSwiTk9ERV9ERU5EIjtjYXNlIDMxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksbmUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgtIiksIk5PREVfREVORCI7Y2FzZSAzMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLG5lLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAoLSIpLCJOT0RFX0RFTkQiO2Nhc2UgMzM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxuZS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKCgiKSwiTk9ERV9ERU5EIjtjYXNlIDM0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksbmUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7Y2FzZSAzNTpyZXR1cm4gbmUuZ2V0TG9nZ2VyKCkudHJhY2UoIkxvbmcgZGVzY3JpcHRpb246IixzZS55eXRleHQpLDIwO2Nhc2UgMzY6cmV0dXJuIG5lLmdldExvZ2dlcigpLnRyYWNlKCJMb25nIGRlc2NyaXB0aW9uOiIsc2UueXl0ZXh0KSwyMH19LHJ1bGVzOlsvXig/OlxzKiUlLiopL2ksL14oPzptaW5kbWFwXGIpL2ksL14oPzo6OjopL2ksL14oPzouKykvaSwvXig/OlxuKS9pLC9eKD86OjppY29uXCgpL2ksL14oPzpbXHNdK1tcbl0pL2ksL14oPzpbXG5dKykvaSwvXig/OlteXCldKykvaSwvXig/OlwpKS9pLC9eKD86LVwpKS9pLC9eKD86XCgtKS9pLC9eKD86XClcKSkvaSwvXig/OlwpKS9pLC9eKD86XChcKCkvaSwvXig/Olx7XHspL2ksL14oPzpcKCkvaSwvXig/OlxbKS9pLC9eKD86W1xzXSspL2ksL14oPzpbXlwoXFtcblwpXHtcfV0rKS9pLC9eKD86JCkvaSwvXig/OlsiXVtgXSkvaSwvXig/OlteYCJdKykvaSwvXig/OltgXVsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0rKS9pLC9eKD86WyJdKS9pLC9eKD86W1wpXVwpKS9pLC9eKD86W1wpXSkvaSwvXig/OltcXV0pL2ksL14oPzpcfVx9KS9pLC9eKD86XCgtKS9pLC9eKD86LVwpKS9pLC9eKD86XChcKCkvaSwvXig/OlwoKS9pLC9eKD86W15cKVxdXChcfV0rKS9pLC9eKD86LisoPyFcKFwoKSkvaV0sY29uZGl0aW9uczp7Q0xBU1M6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sSUNPTjp7cnVsZXM6WzgsOV0saW5jbHVzaXZlOiExfSxOU1RSMjp7cnVsZXM6WzIyLDIzXSxpbmNsdXNpdmU6ITF9LE5TVFI6e3J1bGVzOlsyNSwyNl0saW5jbHVzaXZlOiExfSxOT0RFOntydWxlczpbMjEsMjQsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDUsNiw3LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIGJlfSgpO2llLmxleGVyPW9lO2Z1bmN0aW9uIHBlKCl7dGhpcy55eT17fX1yZXR1cm4gcGUucHJvdG90eXBlPWllLGllLlBhcnNlcj1wZSxuZXcgcGV9KCk7ZXdlLnBhcnNlcj1ld2U7Y29uc3Qgc29uPWV3ZTtsZXQgSzM9W10sbFdlPTAsdHdlPXt9O2NvbnN0IGFvbj0oKT0+e0szPVtdLGxXZT0wLHR3ZT17fX0sb29uPWZ1bmN0aW9uKGkpe2ZvcihsZXQgcz1LMy5sZW5ndGgtMTtzPj0wO3MtLSlpZihLM1tzXS5sZXZlbDxpKXJldHVybiBLM1tzXTtyZXR1cm4gbnVsbH0sY29uPSgpPT5LMy5sZW5ndGg+MD9LM1swXTpudWxsLHVvbj0oaSxzLHUsZCk9Pnt2YXIgVCxfO1hlLmluZm8oImFkZE5vZGUiLGkscyx1LGQpO2NvbnN0IHA9cXQoKTtsZXQgdj0oKFQ9cC5taW5kbWFwKT09bnVsbD92b2lkIDA6VC5wYWRkaW5nKT8/c2gubWluZG1hcC5wYWRkaW5nO3N3aXRjaChkKXtjYXNlIHYxLlJPVU5ERURfUkVDVDpjYXNlIHYxLlJFQ1Q6Y2FzZSB2MS5IRVhBR09OOnYqPTJ9Y29uc3QgYj17aWQ6bFdlKyssbm9kZUlkOllmKHMscCksbGV2ZWw6aSxkZXNjcjpZZih1LHApLHR5cGU6ZCxjaGlsZHJlbjpbXSx3aWR0aDooKF89cC5taW5kbWFwKT09bnVsbD92b2lkIDA6Xy5tYXhOb2RlV2lkdGgpPz9zaC5taW5kbWFwLm1heE5vZGVXaWR0aCxwYWRkaW5nOnZ9LHk9b29uKGkpO2lmKHkpeS5jaGlsZHJlbi5wdXNoKGIpLEszLnB1c2goYik7ZWxzZSBpZihLMy5sZW5ndGg9PT0wKUszLnB1c2goYik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGNhbiBiZSBvbmx5IG9uZSByb290LiBObyBwYXJlbnQgY291bGQgYmUgZm91bmQgZm9yICgiJytiLmRlc2NyKyciKScpfSx2MT17REVGQVVMVDowLE5PX0JPUkRFUjowLFJPVU5ERURfUkVDVDoxLFJFQ1Q6MixDSVJDTEU6MyxDTE9VRDo0LEJBTkc6NSxIRVhBR09OOjZ9LGxvbj17Y2xlYXI6YW9uLGFkZE5vZGU6dW9uLGdldE1pbmRtYXA6Y29uLG5vZGVUeXBlOnYxLGdldFR5cGU6KGkscyk9Pntzd2l0Y2goWGUuZGVidWcoIkluIGdldCB0eXBlIixpLHMpLGkpe2Nhc2UiWyI6cmV0dXJuIHYxLlJFQ1Q7Y2FzZSIoIjpyZXR1cm4gcz09PSIpIj92MS5ST1VOREVEX1JFQ1Q6djEuQ0xPVUQ7Y2FzZSIoKCI6cmV0dXJuIHYxLkNJUkNMRTtjYXNlIikiOnJldHVybiB2MS5DTE9VRDtjYXNlIikpIjpyZXR1cm4gdjEuQkFORztjYXNlInt7IjpyZXR1cm4gdjEuSEVYQUdPTjtkZWZhdWx0OnJldHVybiB2MS5ERUZBVUxUfX0sc2V0RWxlbWVudEZvcklkOihpLHMpPT57dHdlW2ldPXN9LGRlY29yYXRlTm9kZTppPT57aWYoIWkpcmV0dXJuO2NvbnN0IHM9cXQoKSx1PUszW0szLmxlbmd0aC0xXTtpLmljb24mJih1Lmljb249WWYoaS5pY29uLHMpKSxpLmNsYXNzJiYodS5jbGFzcz1ZZihpLmNsYXNzLHMpKX0sdHlwZTJTdHI6aT0+e3N3aXRjaChpKXtjYXNlIHYxLkRFRkFVTFQ6cmV0dXJuIm5vLWJvcmRlciI7Y2FzZSB2MS5SRUNUOnJldHVybiJyZWN0IjtjYXNlIHYxLlJPVU5ERURfUkVDVDpyZXR1cm4icm91bmRlZC1yZWN0IjtjYXNlIHYxLkNJUkNMRTpyZXR1cm4iY2lyY2xlIjtjYXNlIHYxLkNMT1VEOnJldHVybiJjbG91ZCI7Y2FzZSB2MS5CQU5HOnJldHVybiJiYW5nIjtjYXNlIHYxLkhFWEFHT046cmV0dXJuImhleGdvbiI7ZGVmYXVsdDpyZXR1cm4ibm8tYm9yZGVyIn19LGdldExvZ2dlcjooKT0+WGUsZ2V0RWxlbWVudEJ5SWQ6aT0+dHdlW2ldfTt2YXIgaFdlPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oaSxzKXsoZnVuY3Rpb24odSxkKXtpLmV4cG9ydHM9ZCgpfSkoQWcsZnVuY3Rpb24oKXtmdW5jdGlvbiB1KHgpeyJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7cmV0dXJuIHU9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09InN5bWJvbCI/ZnVuY3Rpb24obSl7cmV0dXJuIHR5cGVvZiBtfTpmdW5jdGlvbihtKXtyZXR1cm4gbSYmdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmbS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmbSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIG19LHUoeCl9ZnVuY3Rpb24gZCh4LG0pe2lmKCEoeCBpbnN0YW5jZW9mIG0pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHAoeCxtKXtmb3IodmFyIGs9MDtrPG0ubGVuZ3RoO2srKyl7dmFyIFM9bVtrXTtTLmVudW1lcmFibGU9Uy5lbnVtZXJhYmxlfHwhMSxTLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gUyYmKFMud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4LFMua2V5LFMpfX1mdW5jdGlvbiB2KHgsbSxrKXtyZXR1cm4gbSYmcCh4LnByb3RvdHlwZSxtKSxrJiZwKHgsayksT2JqZWN0LmRlZmluZVByb3BlcnR5KHgsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSkseH1mdW5jdGlvbiBiKHgsbSxrKXtyZXR1cm4gbSBpbiB4P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh4LG0se3ZhbHVlOmssZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp4W21dPWsseH1mdW5jdGlvbiB5KHgsbSl7cmV0dXJuIFQoeCl8fF8oeCxtKXx8QSh4LG0pfHxSKCl9ZnVuY3Rpb24gVCh4KXtpZihBcnJheS5pc0FycmF5KHgpKXJldHVybiB4fWZ1bmN0aW9uIF8oeCxtKXt2YXIgaz14PT1udWxsP251bGw6dHlwZW9mIFN5bWJvbDwidSImJnhbU3ltYm9sLml0ZXJhdG9yXXx8eFsiQEBpdGVyYXRvciJdO2lmKGshPW51bGwpe3ZhciBTPVtdLE09ITAsTz0hMSxOLCQ7dHJ5e2ZvcihrPWsuY2FsbCh4KTshKE09KE49ay5uZXh0KCkpLmRvbmUpJiYoUy5wdXNoKE4udmFsdWUpLCEobSYmUy5sZW5ndGg9PT1tKSk7TT0hMCk7fWNhdGNoKEgpe089ITAsJD1IfWZpbmFsbHl7dHJ5eyFNJiZrLnJldHVybiE9bnVsbCYmay5yZXR1cm4oKX1maW5hbGx5e2lmKE8pdGhyb3cgJH19cmV0dXJuIFN9fWZ1bmN0aW9uIEEoeCxtKXtpZih4KXtpZih0eXBlb2YgeD09InN0cmluZyIpcmV0dXJuIFAoeCxtKTt2YXIgaz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkuc2xpY2UoOCwtMSk7aWYoaz09PSJPYmplY3QiJiZ4LmNvbnN0cnVjdG9yJiYoaz14LmNvbnN0cnVjdG9yLm5hbWUpLGs9PT0iTWFwInx8az09PSJTZXQiKXJldHVybiBBcnJheS5mcm9tKHgpO2lmKGs9PT0iQXJndW1lbnRzInx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoaykpcmV0dXJuIFAoeCxtKX19ZnVuY3Rpb24gUCh4LG0peyhtPT1udWxsfHxtPngubGVuZ3RoKSYmKG09eC5sZW5ndGgpO2Zvcih2YXIgaz0wLFM9bmV3IEFycmF5KG0pO2s8bTtrKyspU1trXT14W2tdO3JldHVybiBTfWZ1bmN0aW9uIFIoKXt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9dmFyIEY9dHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3csaj1GP0YubmF2aWdhdG9yOm51bGw7RiYmRi5kb2N1bWVudDt2YXIgSz11KCIiKSxlZT11KHt9KSxpZT11KGZ1bmN0aW9uKCl7fSksb2U9dHlwZW9mIEhUTUxFbGVtZW50PiJ1Ij8idW5kZWZpbmVkIjp1KEhUTUxFbGVtZW50KSxwZT1mdW5jdGlvbihtKXtyZXR1cm4gbSYmbS5pbnN0YW5jZVN0cmluZyYmYWUobS5pbnN0YW5jZVN0cmluZyk/bS5pbnN0YW5jZVN0cmluZygpOm51bGx9LGJlPWZ1bmN0aW9uKG0pe3JldHVybiBtIT1udWxsJiZ1KG0pPT1LfSxhZT1mdW5jdGlvbihtKXtyZXR1cm4gbSE9bnVsbCYmdShtKT09PWllfSxuZT1mdW5jdGlvbihtKXtyZXR1cm4heGUobSkmJihBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkobSk6bSE9bnVsbCYmbSBpbnN0YW5jZW9mIEFycmF5KX0sc2U9ZnVuY3Rpb24obSl7cmV0dXJuIG0hPW51bGwmJnUobSk9PT1lZSYmIW5lKG0pJiZtLmNvbnN0cnVjdG9yPT09T2JqZWN0fSxkZT1mdW5jdGlvbihtKXtyZXR1cm4gbSE9bnVsbCYmdShtKT09PWVlfSxYPWZ1bmN0aW9uKG0pe3JldHVybiBtIT1udWxsJiZ1KG0pPT09dSgxKSYmIWlzTmFOKG0pfSxnZT1mdW5jdGlvbihtKXtyZXR1cm4gWChtKSYmTWF0aC5mbG9vcihtKT09PW19LFc9ZnVuY3Rpb24obSl7aWYob2UhPT0idW5kZWZpbmVkIilyZXR1cm4gbSE9bnVsbCYmbSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fSx4ZT1mdW5jdGlvbihtKXtyZXR1cm4gVShtKXx8RmUobSl9LFU9ZnVuY3Rpb24obSl7cmV0dXJuIHBlKG0pPT09ImNvbGxlY3Rpb24iJiZtLl9wcml2YXRlLnNpbmdsZX0sRmU9ZnVuY3Rpb24obSl7cmV0dXJuIHBlKG0pPT09ImNvbGxlY3Rpb24iJiYhbS5fcHJpdmF0ZS5zaW5nbGV9LFBlPWZ1bmN0aW9uKG0pe3JldHVybiBwZShtKT09PSJjb3JlIn0samU9ZnVuY3Rpb24obSl7cmV0dXJuIHBlKG0pPT09InN0eWxlc2hlZXQifSxJZT1mdW5jdGlvbihtKXtyZXR1cm4gcGUobSk9PT0iZXZlbnQifSxTZT1mdW5jdGlvbihtKXtyZXR1cm4gbT09bnVsbD8hMDohIShtPT09IiJ8fG0ubWF0Y2goL15ccyskLykpfSxDZT1mdW5jdGlvbihtKXtyZXR1cm4gdHlwZW9mIEhUTUxFbGVtZW50PiJ1Ij8hMTptIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR9LGtlPWZ1bmN0aW9uKG0pe3JldHVybiBzZShtKSYmWChtLngxKSYmWChtLngyKSYmWChtLnkxKSYmWChtLnkyKX0sS2U9ZnVuY3Rpb24obSl7cmV0dXJuIGRlKG0pJiZhZShtLnRoZW4pfSxGdD1mdW5jdGlvbigpe3JldHVybiBqJiZqLnVzZXJBZ2VudC5tYXRjaCgvbXNpZXx0cmlkZW50fGVkZ2UvaSl9LE5lPWZ1bmN0aW9uKG0sayl7a3x8KGs9ZnVuY3Rpb24oKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MSlyZXR1cm4gYXJndW1lbnRzWzBdO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0wKXJldHVybiJ1bmRlZmluZWQiO2Zvcih2YXIgTz1bXSxOPTA7Tjxhcmd1bWVudHMubGVuZ3RoO04rKylPLnB1c2goYXJndW1lbnRzW05dKTtyZXR1cm4gTy5qb2luKCIkIil9KTt2YXIgUz1mdW5jdGlvbiBNKCl7dmFyIE89dGhpcyxOPWFyZ3VtZW50cywkLEg9ay5hcHBseShPLE4pLHE9TS5jYWNoZTtyZXR1cm4oJD1xW0hdKXx8KCQ9cVtIXT1tLmFwcGx5KE8sTikpLCR9O3JldHVybiBTLmNhY2hlPXt9LFN9LGduPU5lKGZ1bmN0aW9uKHgpe3JldHVybiB4LnJlcGxhY2UoLyhbQS1aXSkvZyxmdW5jdGlvbihtKXtyZXR1cm4iLSIrbS50b0xvd2VyQ2FzZSgpfSl9KSxfdD1OZShmdW5jdGlvbih4KXtyZXR1cm4geC5yZXBsYWNlKC8oLVx3KS9nLGZ1bmN0aW9uKG0pe3JldHVybiBtWzFdLnRvVXBwZXJDYXNlKCl9KX0pLEV0PU5lKGZ1bmN0aW9uKHgsbSl7cmV0dXJuIHgrbVswXS50b1VwcGVyQ2FzZSgpK20uc3Vic3RyaW5nKDEpfSxmdW5jdGlvbih4LG0pe3JldHVybiB4KyIkIittfSksR3Q9ZnVuY3Rpb24obSl7cmV0dXJuIFNlKG0pP206bS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSttLnN1YnN0cmluZygxKX0sbG49Iig/OlstK10/KD86KD86XFxkK3xcXGQqXFwuXFxkKykoPzpbRWVdWystXT9cXGQrKT8pKSIseHQ9InJnYlthXT9cXCgoIitsbisiWyVdPylcXHMqLFxccyooIitsbisiWyVdPylcXHMqLFxccyooIitsbisiWyVdPykoPzpcXHMqLFxccyooIitsbisiKSk/XFwpIixQdD0icmdiW2FdP1xcKCg/OiIrbG4rIlslXT8pXFxzKixcXHMqKD86IitsbisiWyVdPylcXHMqLFxccyooPzoiK2xuKyJbJV0/KSg/OlxccyosXFxzKig/OiIrbG4rIikpP1xcKSIsUWU9ImhzbFthXT9cXCgoIitsbisiKVxccyosXFxzKigiK2xuKyJbJV0pXFxzKixcXHMqKCIrbG4rIlslXSkoPzpcXHMqLFxccyooIitsbisiKSk/XFwpIixEdD0iaHNsW2FdP1xcKCg/OiIrbG4rIilcXHMqLFxccyooPzoiK2xuKyJbJV0pXFxzKixcXHMqKD86IitsbisiWyVdKSg/OlxccyosXFxzKig/OiIrbG4rIikpP1xcKSIsa3Q9IlxcI1swLTlhLWZBLUZdezN9IixPbj0iXFwjWzAtOWEtZkEtRl17Nn0iLGh0PWZ1bmN0aW9uKG0sayl7cmV0dXJuIG08az8tMTptPms/MTowfSx6cj1mdW5jdGlvbihtLGspe3JldHVybi0xKmh0KG0sayl9LHl0PU9iamVjdC5hc3NpZ24hPW51bGw/T2JqZWN0LmFzc2lnbi5iaW5kKE9iamVjdCk6ZnVuY3Rpb24oeCl7Zm9yKHZhciBtPWFyZ3VtZW50cyxrPTE7azxtLmxlbmd0aDtrKyspe3ZhciBTPW1ba107aWYoUyE9bnVsbClmb3IodmFyIE09T2JqZWN0LmtleXMoUyksTz0wO088TS5sZW5ndGg7TysrKXt2YXIgTj1NW09dO3hbTl09U1tOXX19cmV0dXJuIHh9LGppPWZ1bmN0aW9uKG0pe2lmKCEoIShtLmxlbmd0aD09PTR8fG0ubGVuZ3RoPT09Nyl8fG1bMF0hPT0iIyIpKXt2YXIgaz1tLmxlbmd0aD09PTQsUyxNLE8sTj0xNjtyZXR1cm4gaz8oUz1wYXJzZUludChtWzFdK21bMV0sTiksTT1wYXJzZUludChtWzJdK21bMl0sTiksTz1wYXJzZUludChtWzNdK21bM10sTikpOihTPXBhcnNlSW50KG1bMV0rbVsyXSxOKSxNPXBhcnNlSW50KG1bM10rbVs0XSxOKSxPPXBhcnNlSW50KG1bNV0rbVs2XSxOKSksW1MsTSxPXX19LHhpPWZ1bmN0aW9uKG0pe3ZhciBrLFMsTSxPLE4sJCxILHE7ZnVuY3Rpb24gWShtZSxMZSxfZSl7cmV0dXJuIF9lPDAmJihfZSs9MSksX2U+MSYmKF9lLT0xKSxfZTwxLzY/bWUrKExlLW1lKSo2Kl9lOl9lPDEvMj9MZTpfZTwyLzM/bWUrKExlLW1lKSooMi8zLV9lKSo2Om1lfXZhciBaPW5ldyBSZWdFeHAoIl4iK1FlKyIkIikuZXhlYyhtKTtpZihaKXtpZihTPXBhcnNlSW50KFpbMV0pLFM8MD9TPSgzNjAtIC0xKlMlMzYwKSUzNjA6Uz4zNjAmJihTPVMlMzYwKSxTLz0zNjAsTT1wYXJzZUZsb2F0KFpbMl0pLE08MHx8TT4xMDB8fChNPU0vMTAwLE89cGFyc2VGbG9hdChaWzNdKSxPPDB8fE8+MTAwKXx8KE89Ty8xMDAsTj1aWzRdLE4hPT12b2lkIDAmJihOPXBhcnNlRmxvYXQoTiksTjwwfHxOPjEpKSlyZXR1cm47aWYoTT09PTApJD1IPXE9TWF0aC5yb3VuZChPKjI1NSk7ZWxzZXt2YXIgY2U9TzwuNT9PKigxK00pOk8rTS1PKk0sdmU9MipPLWNlOyQ9TWF0aC5yb3VuZCgyNTUqWSh2ZSxjZSxTKzEvMykpLEg9TWF0aC5yb3VuZCgyNTUqWSh2ZSxjZSxTKSkscT1NYXRoLnJvdW5kKDI1NSpZKHZlLGNlLFMtMS8zKSl9az1bJCxILHEsTl19cmV0dXJuIGt9LE1hPWZ1bmN0aW9uKG0pe3ZhciBrLFM9bmV3IFJlZ0V4cCgiXiIreHQrIiQiKS5leGVjKG0pO2lmKFMpe2s9W107Zm9yKHZhciBNPVtdLE89MTtPPD0zO08rKyl7dmFyIE49U1tPXTtpZihOW04ubGVuZ3RoLTFdPT09IiUiJiYoTVtPXT0hMCksTj1wYXJzZUZsb2F0KE4pLE1bT10mJihOPU4vMTAwKjI1NSksTjwwfHxOPjI1NSlyZXR1cm47ay5wdXNoKE1hdGguZmxvb3IoTikpfXZhciAkPU1bMV18fE1bMl18fE1bM10sSD1NWzFdJiZNWzJdJiZNWzNdO2lmKCQmJiFIKXJldHVybjt2YXIgcT1TWzRdO2lmKHEhPT12b2lkIDApe2lmKHE9cGFyc2VGbG9hdChxKSxxPDB8fHE+MSlyZXR1cm47ay5wdXNoKHEpfX1yZXR1cm4ga30senM9ZnVuY3Rpb24obSl7cmV0dXJuIFRyW20udG9Mb3dlckNhc2UoKV19LGFvPWZ1bmN0aW9uKG0pe3JldHVybihuZShtKT9tOm51bGwpfHx6cyhtKXx8amkobSl8fE1hKG0pfHx4aShtKX0sVHI9e3RyYW5zcGFyZW50OlswLDAsMCwwXSxhbGljZWJsdWU6WzI0MCwyNDgsMjU1XSxhbnRpcXVld2hpdGU6WzI1MCwyMzUsMjE1XSxhcXVhOlswLDI1NSwyNTVdLGFxdWFtYXJpbmU6WzEyNywyNTUsMjEyXSxhenVyZTpbMjQwLDI1NSwyNTVdLGJlaWdlOlsyNDUsMjQ1LDIyMF0sYmlzcXVlOlsyNTUsMjI4LDE5Nl0sYmxhY2s6WzAsMCwwXSxibGFuY2hlZGFsbW9uZDpbMjU1LDIzNSwyMDVdLGJsdWU6WzAsMCwyNTVdLGJsdWV2aW9sZXQ6WzEzOCw0MywyMjZdLGJyb3duOlsxNjUsNDIsNDJdLGJ1cmx5d29vZDpbMjIyLDE4NCwxMzVdLGNhZGV0Ymx1ZTpbOTUsMTU4LDE2MF0sY2hhcnRyZXVzZTpbMTI3LDI1NSwwXSxjaG9jb2xhdGU6WzIxMCwxMDUsMzBdLGNvcmFsOlsyNTUsMTI3LDgwXSxjb3JuZmxvd2VyYmx1ZTpbMTAwLDE0OSwyMzddLGNvcm5zaWxrOlsyNTUsMjQ4LDIyMF0sY3JpbXNvbjpbMjIwLDIwLDYwXSxjeWFuOlswLDI1NSwyNTVdLGRhcmtibHVlOlswLDAsMTM5XSxkYXJrY3lhbjpbMCwxMzksMTM5XSxkYXJrZ29sZGVucm9kOlsxODQsMTM0LDExXSxkYXJrZ3JheTpbMTY5LDE2OSwxNjldLGRhcmtncmVlbjpbMCwxMDAsMF0sZGFya2dyZXk6WzE2OSwxNjksMTY5XSxkYXJra2hha2k6WzE4OSwxODMsMTA3XSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5XSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3XSxkYXJrb3JhbmdlOlsyNTUsMTQwLDBdLGRhcmtvcmNoaWQ6WzE1Myw1MCwyMDRdLGRhcmtyZWQ6WzEzOSwwLDBdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyXSxkYXJrc2VhZ3JlZW46WzE0MywxODgsMTQzXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzldLGRhcmtzbGF0ZWdyYXk6WzQ3LDc5LDc5XSxkYXJrc2xhdGVncmV5Ols0Nyw3OSw3OV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5XSxkYXJrdmlvbGV0OlsxNDgsMCwyMTFdLGRlZXBwaW5rOlsyNTUsMjAsMTQ3XSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1XSxkaW1ncmF5OlsxMDUsMTA1LDEwNV0sZGltZ3JleTpbMTA1LDEwNSwxMDVdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTVdLGZpcmVicmljazpbMTc4LDM0LDM0XSxmbG9yYWx3aGl0ZTpbMjU1LDI1MCwyNDBdLGZvcmVzdGdyZWVuOlszNCwxMzksMzRdLGZ1Y2hzaWE6WzI1NSwwLDI1NV0sZ2FpbnNib3JvOlsyMjAsMjIwLDIyMF0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTVdLGdvbGQ6WzI1NSwyMTUsMF0sZ29sZGVucm9kOlsyMTgsMTY1LDMyXSxncmF5OlsxMjgsMTI4LDEyOF0sZ3JleTpbMTI4LDEyOCwxMjhdLGdyZWVuOlswLDEyOCwwXSxncmVlbnllbGxvdzpbMTczLDI1NSw0N10saG9uZXlkZXc6WzI0MCwyNTUsMjQwXSxob3RwaW5rOlsyNTUsMTA1LDE4MF0saW5kaWFucmVkOlsyMDUsOTIsOTJdLGluZGlnbzpbNzUsMCwxMzBdLGl2b3J5OlsyNTUsMjU1LDI0MF0sa2hha2k6WzI0MCwyMzAsMTQwXSxsYXZlbmRlcjpbMjMwLDIzMCwyNTBdLGxhdmVuZGVyYmx1c2g6WzI1NSwyNDAsMjQ1XSxsYXduZ3JlZW46WzEyNCwyNTIsMF0sbGVtb25jaGlmZm9uOlsyNTUsMjUwLDIwNV0sbGlnaHRibHVlOlsxNzMsMjE2LDIzMF0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjhdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTVdLGxpZ2h0Z29sZGVucm9keWVsbG93OlsyNTAsMjUwLDIxMF0sbGlnaHRncmF5OlsyMTEsMjExLDIxMV0sbGlnaHRncmVlbjpbMTQ0LDIzOCwxNDRdLGxpZ2h0Z3JleTpbMjExLDIxMSwyMTFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTNdLGxpZ2h0c2FsbW9uOlsyNTUsMTYwLDEyMl0sbGlnaHRzZWFncmVlbjpbMzIsMTc4LDE3MF0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MF0sbGlnaHRzbGF0ZWdyYXk6WzExOSwxMzYsMTUzXSxsaWdodHNsYXRlZ3JleTpbMTE5LDEzNiwxNTNdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMl0sbGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0XSxsaW1lOlswLDI1NSwwXSxsaW1lZ3JlZW46WzUwLDIwNSw1MF0sbGluZW46WzI1MCwyNDAsMjMwXSxtYWdlbnRhOlsyNTUsMCwyNTVdLG1hcm9vbjpbMTI4LDAsMF0sbWVkaXVtYXF1YW1hcmluZTpbMTAyLDIwNSwxNzBdLG1lZGl1bWJsdWU6WzAsMCwyMDVdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMV0sbWVkaXVtcHVycGxlOlsxNDcsMTEyLDIxOV0sbWVkaXVtc2VhZ3JlZW46WzYwLDE3OSwxMTNdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzhdLG1lZGl1bXNwcmluZ2dyZWVuOlswLDI1MCwxNTRdLG1lZGl1bXR1cnF1b2lzZTpbNzIsMjA5LDIwNF0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzXSxtaWRuaWdodGJsdWU6WzI1LDI1LDExMl0sbWludGNyZWFtOlsyNDUsMjU1LDI1MF0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNV0sbW9jY2FzaW46WzI1NSwyMjgsMTgxXSxuYXZham93aGl0ZTpbMjU1LDIyMiwxNzNdLG5hdnk6WzAsMCwxMjhdLG9sZGxhY2U6WzI1MywyNDUsMjMwXSxvbGl2ZTpbMTI4LDEyOCwwXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzVdLG9yYW5nZTpbMjU1LDE2NSwwXSxvcmFuZ2VyZWQ6WzI1NSw2OSwwXSxvcmNoaWQ6WzIxOCwxMTIsMjE0XSxwYWxlZ29sZGVucm9kOlsyMzgsMjMyLDE3MF0scGFsZWdyZWVuOlsxNTIsMjUxLDE1Ml0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzhdLHBhbGV2aW9sZXRyZWQ6WzIxOSwxMTIsMTQ3XSxwYXBheWF3aGlwOlsyNTUsMjM5LDIxM10scGVhY2hwdWZmOlsyNTUsMjE4LDE4NV0scGVydTpbMjA1LDEzMyw2M10scGluazpbMjU1LDE5MiwyMDNdLHBsdW06WzIyMSwxNjAsMjIxXSxwb3dkZXJibHVlOlsxNzYsMjI0LDIzMF0scHVycGxlOlsxMjgsMCwxMjhdLHJlZDpbMjU1LDAsMF0scm9zeWJyb3duOlsxODgsMTQzLDE0M10scm95YWxibHVlOls2NSwxMDUsMjI1XSxzYWRkbGVicm93bjpbMTM5LDY5LDE5XSxzYWxtb246WzI1MCwxMjgsMTE0XSxzYW5keWJyb3duOlsyNDQsMTY0LDk2XSxzZWFncmVlbjpbNDYsMTM5LDg3XSxzZWFzaGVsbDpbMjU1LDI0NSwyMzhdLHNpZW5uYTpbMTYwLDgyLDQ1XSxzaWx2ZXI6WzE5MiwxOTIsMTkyXSxza3libHVlOlsxMzUsMjA2LDIzNV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1XSxzbGF0ZWdyYXk6WzExMiwxMjgsMTQ0XSxzbGF0ZWdyZXk6WzExMiwxMjgsMTQ0XSxzbm93OlsyNTUsMjUwLDI1MF0sc3ByaW5nZ3JlZW46WzAsMjU1LDEyN10sc3RlZWxibHVlOls3MCwxMzAsMTgwXSx0YW46WzIxMCwxODAsMTQwXSx0ZWFsOlswLDEyOCwxMjhdLHRoaXN0bGU6WzIxNiwxOTEsMjE2XSx0b21hdG86WzI1NSw5OSw3MV0sdHVycXVvaXNlOls2NCwyMjQsMjA4XSx2aW9sZXQ6WzIzOCwxMzAsMjM4XSx3aGVhdDpbMjQ1LDIyMiwxNzldLHdoaXRlOlsyNTUsMjU1LDI1NV0sd2hpdGVzbW9rZTpbMjQ1LDI0NSwyNDVdLHllbGxvdzpbMjU1LDI1NSwwXSx5ZWxsb3dncmVlbjpbMTU0LDIwNSw1MF19LEZuPWZ1bmN0aW9uKG0pe2Zvcih2YXIgaz1tLm1hcCxTPW0ua2V5cyxNPVMubGVuZ3RoLE89MDtPPE07TysrKXt2YXIgTj1TW09dO2lmKHNlKE4pKXRocm93IEVycm9yKCJUcmllZCB0byBzZXQgbWFwIHdpdGggb2JqZWN0IGtleSIpO088Uy5sZW5ndGgtMT8oa1tOXT09bnVsbCYmKGtbTl09e30pLGs9a1tOXSk6a1tOXT1tLnZhbHVlfX0scW49ZnVuY3Rpb24obSl7Zm9yKHZhciBrPW0ubWFwLFM9bS5rZXlzLE09Uy5sZW5ndGgsTz0wO088TTtPKyspe3ZhciBOPVNbT107aWYoc2UoTikpdGhyb3cgRXJyb3IoIlRyaWVkIHRvIGdldCBtYXAgd2l0aCBvYmplY3Qga2V5Iik7aWYoaz1rW05dLGs9PW51bGwpcmV0dXJuIGt9cmV0dXJuIGt9O2Z1bmN0aW9uIFVuKHgpe3ZhciBtPXR5cGVvZiB4O3JldHVybiB4IT1udWxsJiYobT09Im9iamVjdCJ8fG09PSJmdW5jdGlvbiIpfXZhciBBdD1Vbix3dD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIEFnPCJ1Ij9BZzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fTtmdW5jdGlvbiBvbih4LG0pe3JldHVybiBtPXtleHBvcnRzOnt9fSx4KG0sbS5leHBvcnRzKSxtLmV4cG9ydHN9dmFyIGZuPXR5cGVvZiB3dD09Im9iamVjdCImJnd0JiZ3dC5PYmplY3Q9PT1PYmplY3QmJnd0LEFuPWZuLG9vPXR5cGVvZiBzZWxmPT0ib2JqZWN0IiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsam89QW58fG9vfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLCRvPWpvLFBhPWZ1bmN0aW9uKCl7cmV0dXJuICRvLkRhdGUubm93KCl9LHdvPVBhLF9zPS9ccy87ZnVuY3Rpb24gdGwoeCl7Zm9yKHZhciBtPXgubGVuZ3RoO20tLSYmX3MudGVzdCh4LmNoYXJBdChtKSk7KTtyZXR1cm4gbX12YXIgZGE9dGwsajA9L15ccysvO2Z1bmN0aW9uIHBtKHgpe3JldHVybiB4JiZ4LnNsaWNlKDAsZGEoeCkrMSkucmVwbGFjZShqMCwiIil9dmFyIE1sPXBtLFhjPSRvLlN5bWJvbCxCYz1YYyxqYT1PYmplY3QucHJvdG90eXBlLE91PWphLmhhc093blByb3BlcnR5LFNhPWphLnRvU3RyaW5nLFBvPUJjP0JjLnRvU3RyaW5nVGFnOnZvaWQgMDtmdW5jdGlvbiBGYyh4KXt2YXIgbT1PdS5jYWxsKHgsUG8pLGs9eFtQb107dHJ5e3hbUG9dPXZvaWQgMDt2YXIgUz0hMH1jYXRjaHt9dmFyIE09U2EuY2FsbCh4KTtyZXR1cm4gUyYmKG0/eFtQb109azpkZWxldGUgeFtQb10pLE19dmFyIHhhPUZjLEJhPU9iamVjdC5wcm90b3R5cGUsZ2E9QmEudG9TdHJpbmc7ZnVuY3Rpb24ga2goeCl7cmV0dXJuIGdhLmNhbGwoeCl9dmFyIGx1PWtoLG81PSJbb2JqZWN0IE51bGxdIixXaD0iW29iamVjdCBVbmRlZmluZWRdIixvZD1CYz9CYy50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gR2QoeCl7cmV0dXJuIHg9PW51bGw/eD09PXZvaWQgMD9XaDpvNTpvZCYmb2QgaW4gT2JqZWN0KHgpP3hhKHgpOmx1KHgpfXZhciBjZD1HZDtmdW5jdGlvbiBLZCh4KXtyZXR1cm4geCE9bnVsbCYmdHlwZW9mIHg9PSJvYmplY3QifXZhciAkZz1LZCxhcz0iW29iamVjdCBTeW1ib2xdIjtmdW5jdGlvbiB3bih4KXtyZXR1cm4gdHlwZW9mIHg9PSJzeW1ib2wifHwkZyh4KSYmY2QoeCk9PWFzfXZhciBacj13bixaaT0wLzAsbnU9L15bLStdMHhbMC05YS1mXSskL2ksdnU9L14wYlswMV0rJC9pLERsPS9eMG9bMC03XSskL2ksWWg9cGFyc2VJbnQ7ZnVuY3Rpb24gdzEoeCl7aWYodHlwZW9mIHg9PSJudW1iZXIiKXJldHVybiB4O2lmKFpyKHgpKXJldHVybiBaaTtpZihBdCh4KSl7dmFyIG09dHlwZW9mIHgudmFsdWVPZj09ImZ1bmN0aW9uIj94LnZhbHVlT2YoKTp4O3g9QXQobSk/bSsiIjptfWlmKHR5cGVvZiB4IT0ic3RyaW5nIilyZXR1cm4geD09PTA/eDoreDt4PU1sKHgpO3ZhciBrPXZ1LnRlc3QoeCk7cmV0dXJuIGt8fERsLnRlc3QoeCk/WWgoeC5zbGljZSgyKSxrPzI6OCk6bnUudGVzdCh4KT9aaToreH12YXIgJDA9dzEsV2k9IkV4cGVjdGVkIGEgZnVuY3Rpb24iLEJzPU1hdGgubWF4LFFhPU1hdGgubWluO2Z1bmN0aW9uIEJpKHgsbSxrKXt2YXIgUyxNLE8sTiwkLEgscT0wLFk9ITEsWj0hMSxjZT0hMDtpZih0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKFdpKTttPSQwKG0pfHwwLEF0KGspJiYoWT0hIWsubGVhZGluZyxaPSJtYXhXYWl0ImluIGssTz1aP0JzKCQwKGsubWF4V2FpdCl8fDAsbSk6TyxjZT0idHJhaWxpbmciaW4gaz8hIWsudHJhaWxpbmc6Y2UpO2Z1bmN0aW9uIHZlKHN0KXt2YXIgWWU9UyxtdD1NO3JldHVybiBTPU09dm9pZCAwLHE9c3QsTj14LmFwcGx5KG10LFllKSxOfWZ1bmN0aW9uIG1lKHN0KXtyZXR1cm4gcT1zdCwkPXNldFRpbWVvdXQoRWUsbSksWT92ZShzdCk6Tn1mdW5jdGlvbiBMZShzdCl7dmFyIFllPXN0LUgsbXQ9c3QtcSxKZT1tLVllO3JldHVybiBaP1FhKEplLE8tbXQpOkplfWZ1bmN0aW9uIF9lKHN0KXt2YXIgWWU9c3QtSCxtdD1zdC1xO3JldHVybiBIPT09dm9pZCAwfHxZZT49bXx8WWU8MHx8WiYmbXQ+PU99ZnVuY3Rpb24gRWUoKXt2YXIgc3Q9d28oKTtpZihfZShzdCkpcmV0dXJuIEJlKHN0KTskPXNldFRpbWVvdXQoRWUsTGUoc3QpKX1mdW5jdGlvbiBCZShzdCl7cmV0dXJuICQ9dm9pZCAwLGNlJiZTP3ZlKHN0KTooUz1NPXZvaWQgMCxOKX1mdW5jdGlvbiBSZSgpeyQhPT12b2lkIDAmJmNsZWFyVGltZW91dCgkKSxxPTAsUz1IPU09JD12b2lkIDB9ZnVuY3Rpb24gVmUoKXtyZXR1cm4gJD09PXZvaWQgMD9OOkJlKHdvKCkpfWZ1bmN0aW9uIGN0KCl7dmFyIHN0PXdvKCksWWU9X2Uoc3QpO2lmKFM9YXJndW1lbnRzLE09dGhpcyxIPXN0LFllKXtpZigkPT09dm9pZCAwKXJldHVybiBtZShIKTtpZihaKXJldHVybiBjbGVhclRpbWVvdXQoJCksJD1zZXRUaW1lb3V0KEVlLG0pLHZlKEgpfXJldHVybiAkPT09dm9pZCAwJiYoJD1zZXRUaW1lb3V0KEVlLG0pKSxOfXJldHVybiBjdC5jYW5jZWw9UmUsY3QuZmx1c2g9VmUsY3R9dmFyIE51PUJpLE90PUY/Ri5wZXJmb3JtYW5jZTpudWxsLFczPU90JiZPdC5ub3c/ZnVuY3Rpb24oKXtyZXR1cm4gT3Qubm93KCl9OmZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9LEt0PWZ1bmN0aW9uKCl7aWYoRil7aWYoRi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpcmV0dXJuIGZ1bmN0aW9uKHgpe0YucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHgpfTtpZihGLm1velJlcXVlc3RBbmltYXRpb25GcmFtZSlyZXR1cm4gZnVuY3Rpb24oeCl7Ri5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoeCl9O2lmKEYud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKXJldHVybiBmdW5jdGlvbih4KXtGLndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSh4KX07aWYoRi5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSlyZXR1cm4gZnVuY3Rpb24oeCl7Ri5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSh4KX19cmV0dXJuIGZ1bmN0aW9uKHgpe3gmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXt4KFczKCkpfSwxZTMvNjApfX0oKSx6MD1mdW5jdGlvbihtKXtyZXR1cm4gS3QobSl9LEJwPVczLFkzPTkyNjEsJDk9NjU1OTksYzU9NTM4MSxFaD1mdW5jdGlvbihtKXtmb3IodmFyIGs9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOlkzLFM9ayxNO009bS5uZXh0KCksIU0uZG9uZTspUz1TKiQ5K00udmFsdWV8MDtyZXR1cm4gU30semc9ZnVuY3Rpb24obSl7dmFyIGs9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOlkzO3JldHVybiBrKiQ5K218MH0sYm09ZnVuY3Rpb24obSl7dmFyIGs9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOmM1O3JldHVybihrPDw1KStrK218MH0sejk9ZnVuY3Rpb24obSxrKXtyZXR1cm4gbSoyMDk3MTUyK2t9LG1tPWZ1bmN0aW9uKG0pe3JldHVybiBtWzBdKjIwOTcxNTIrbVsxXX0sdTU9ZnVuY3Rpb24obSxrKXtyZXR1cm5bemcobVswXSxrWzBdKSxibShtWzFdLGtbMV0pXX0seTE9ZnVuY3Rpb24obSxrKXt2YXIgUz17dmFsdWU6MCxkb25lOiExfSxNPTAsTz1tLmxlbmd0aCxOPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIE08Tz9TLnZhbHVlPW1bTSsrXTpTLmRvbmU9ITAsU319O3JldHVybiBFaChOLGspfSx1ZD1mdW5jdGlvbihtLGspe3ZhciBTPXt2YWx1ZTowLGRvbmU6ITF9LE09MCxPPW0ubGVuZ3RoLE49e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gTTxPP1MudmFsdWU9bS5jaGFyQ29kZUF0KE0rKyk6Uy5kb25lPSEwLFN9fTtyZXR1cm4gRWgoTixrKX0sbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gcTkoYXJndW1lbnRzKX0scTk9ZnVuY3Rpb24obSl7Zm9yKHZhciBrLFM9MDtTPG0ubGVuZ3RoO1MrKyl7dmFyIE09bVtTXTtTPT09MD9rPXVkKE0pOms9dWQoTSxrKX1yZXR1cm4ga30sVnY9ITAsWTc9Y29uc29sZS53YXJuIT1udWxsLEcyPWNvbnNvbGUudHJhY2UhPW51bGwsWDc9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ8fDkwMDcxOTkyNTQ3NDA5OTEsbDU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sWDM9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sRnA9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sbkk9ZnVuY3Rpb24oKXt9LGNoPWZ1bmN0aW9uKG0pe3Rocm93IG5ldyBFcnJvcihtKX0sb1M9ZnVuY3Rpb24obSl7aWYobSE9PXZvaWQgMClWdj0hIW07ZWxzZSByZXR1cm4gVnZ9LGh1PWZ1bmN0aW9uKG0pe29TKCkmJihZNz9jb25zb2xlLndhcm4obSk6KGNvbnNvbGUubG9nKG0pLEcyJiZjb25zb2xlLnRyYWNlKCkpKX0sJEo9ZnVuY3Rpb24obSl7cmV0dXJuIHl0KHt9LG0pfSx2bT1mdW5jdGlvbihtKXtyZXR1cm4gbT09bnVsbD9tOm5lKG0pP20uc2xpY2UoKTpzZShtKT8kSihtKTptfSx6Sj1mdW5jdGlvbihtKXtyZXR1cm4gbS5zbGljZSgpfSxvaj1mdW5jdGlvbihtLGspe2ZvcihrPW09IiI7bSsrPDM2O2srPW0qNTEmNTI/KG1eMTU/OF5NYXRoLnJhbmRvbSgpKihtXjIwPzE2OjQpOjQpLnRvU3RyaW5nKDE2KToiLSIpO3JldHVybiBrfSxxSj17fSxjaj1mdW5jdGlvbigpe3JldHVybiBxSn0scTA9ZnVuY3Rpb24obSl7dmFyIGs9T2JqZWN0LmtleXMobSk7cmV0dXJuIGZ1bmN0aW9uKFMpe2Zvcih2YXIgTT17fSxPPTA7TzxrLmxlbmd0aDtPKyspe3ZhciBOPWtbT10sJD1TPT1udWxsP3ZvaWQgMDpTW05dO01bTl09JD09PXZvaWQgMD9tW05dOiR9cmV0dXJuIE19fSxRMz1mdW5jdGlvbihtLGssUyl7Zm9yKHZhciBNPW0ubGVuZ3RoLTE7TT49MCYmIShtW01dPT09ayYmKG0uc3BsaWNlKE0sMSksUykpO00tLSk7fSxjUz1mdW5jdGlvbihtKXttLnNwbGljZSgwLG0ubGVuZ3RoKX0sdWo9ZnVuY3Rpb24obSxrKXtmb3IodmFyIFM9MDtTPGsubGVuZ3RoO1MrKyl7dmFyIE09a1tTXTttLnB1c2goTSl9fSxLMj1mdW5jdGlvbihtLGssUyl7cmV0dXJuIFMmJihrPUV0KFMsaykpLG1ba119LEozPWZ1bmN0aW9uKG0sayxTLE0pe1MmJihrPUV0KFMsaykpLG1ba109TX0sSEo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB4KCl7ZCh0aGlzLHgpLHRoaXMuX29iaj17fX1yZXR1cm4gdih4LFt7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGssUyl7cmV0dXJuIHRoaXMuX29ialtrXT1TLHRoaXN9fSx7a2V5OiJkZWxldGUiLHZhbHVlOmZ1bmN0aW9uKGspe3JldHVybiB0aGlzLl9vYmpba109dm9pZCAwLHRoaXN9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9vYmo9e319fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKGspe3JldHVybiB0aGlzLl9vYmpba10hPT12b2lkIDB9fSx7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGspe3JldHVybiB0aGlzLl9vYmpba119fV0pLHh9KCksd209dHlwZW9mIE1hcDwidSI/TWFwOkhKLFZKPSJ1bmRlZmluZWQiLFVKPWZ1bmN0aW9uKCl7ZnVuY3Rpb24geChtKXtpZihkKHRoaXMseCksdGhpcy5fb2JqPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5zaXplPTAsbSE9bnVsbCl7dmFyIGs7bS5pbnN0YW5jZVN0cmluZyE9bnVsbCYmbS5pbnN0YW5jZVN0cmluZygpPT09dGhpcy5pbnN0YW5jZVN0cmluZygpP2s9bS50b0FycmF5KCk6az1tO2Zvcih2YXIgUz0wO1M8ay5sZW5ndGg7UysrKXRoaXMuYWRkKGtbU10pfX1yZXR1cm4gdih4LFt7a2V5OiJpbnN0YW5jZVN0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4ic2V0In19LHtrZXk6ImFkZCIsdmFsdWU6ZnVuY3Rpb24oayl7dmFyIFM9dGhpcy5fb2JqO1Nba10hPT0xJiYoU1trXT0xLHRoaXMuc2l6ZSsrKX19LHtrZXk6ImRlbGV0ZSIsdmFsdWU6ZnVuY3Rpb24oayl7dmFyIFM9dGhpcy5fb2JqO1Nba109PT0xJiYoU1trXT0wLHRoaXMuc2l6ZS0tKX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX29iaj1PYmplY3QuY3JlYXRlKG51bGwpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbihrKXtyZXR1cm4gdGhpcy5fb2JqW2tdPT09MX19LHtrZXk6InRvQXJyYXkiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGs9dGhpcztyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fb2JqKS5maWx0ZXIoZnVuY3Rpb24oUyl7cmV0dXJuIGsuaGFzKFMpfSl9fSx7a2V5OiJmb3JFYWNoIix2YWx1ZTpmdW5jdGlvbihrLFMpe3JldHVybiB0aGlzLnRvQXJyYXkoKS5mb3JFYWNoKGssUyl9fV0pLHh9KCksUTc9KHR5cGVvZiBTZXQ+InUiPyJ1bmRlZmluZWQiOnUoU2V0KSkhPT1WSj9TZXQ6VUosdVM9ZnVuY3Rpb24obSxrKXt2YXIgUz1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITA7aWYobT09PXZvaWQgMHx8az09PXZvaWQgMHx8IVBlKG0pKXtjaCgiQW4gZWxlbWVudCBtdXN0IGhhdmUgYSBjb3JlIHJlZmVyZW5jZSBhbmQgcGFyYW1ldGVycyBzZXQiKTtyZXR1cm59dmFyIE09ay5ncm91cDtpZihNPT1udWxsJiYoay5kYXRhJiZrLmRhdGEuc291cmNlIT1udWxsJiZrLmRhdGEudGFyZ2V0IT1udWxsP009ImVkZ2VzIjpNPSJub2RlcyIpLE0hPT0ibm9kZXMiJiZNIT09ImVkZ2VzIil7Y2goIkFuIGVsZW1lbnQgbXVzdCBiZSBvZiB0eXBlIGBub2Rlc2Agb3IgYGVkZ2VzYDsgeW91IHNwZWNpZmllZCBgIitNKyJgIik7cmV0dXJufXRoaXMubGVuZ3RoPTEsdGhpc1swXT10aGlzO3ZhciBPPXRoaXMuX3ByaXZhdGU9e2N5Om0sc2luZ2xlOiEwLGRhdGE6ay5kYXRhfHx7fSxwb3NpdGlvbjprLnBvc2l0aW9ufHx7eDowLHk6MH0sYXV0b1dpZHRoOnZvaWQgMCxhdXRvSGVpZ2h0OnZvaWQgMCxhdXRvUGFkZGluZzp2b2lkIDAsY29tcG91bmRCb3VuZHNDbGVhbjohMSxsaXN0ZW5lcnM6W10sZ3JvdXA6TSxzdHlsZTp7fSxyc3R5bGU6e30sc3R5bGVDeHRzOltdLHN0eWxlS2V5czp7fSxyZW1vdmVkOiEwLHNlbGVjdGVkOiEhay5zZWxlY3RlZCxzZWxlY3RhYmxlOmsuc2VsZWN0YWJsZT09PXZvaWQgMD8hMDohIWsuc2VsZWN0YWJsZSxsb2NrZWQ6ISFrLmxvY2tlZCxncmFiYmVkOiExLGdyYWJiYWJsZTprLmdyYWJiYWJsZT09PXZvaWQgMD8hMDohIWsuZ3JhYmJhYmxlLHBhbm5hYmxlOmsucGFubmFibGU9PT12b2lkIDA/TT09PSJlZGdlcyI6ISFrLnBhbm5hYmxlLGFjdGl2ZTohMSxjbGFzc2VzOm5ldyBRNyxhbmltYXRpb246e2N1cnJlbnQ6W10scXVldWU6W119LHJzY3JhdGNoOnt9LHNjcmF0Y2g6ay5zY3JhdGNofHx7fSxlZGdlczpbXSxjaGlsZHJlbjpbXSxwYXJlbnQ6ay5wYXJlbnQmJmsucGFyZW50LmlzTm9kZSgpP2sucGFyZW50Om51bGwsdHJhdmVyc2FsQ2FjaGU6e30sYmFja2dyb3VuZGluZzohMSxiYkNhY2hlOm51bGwsYmJDYWNoZVNoaWZ0Ont4OjAseTowfSxib2R5Qm91bmRzOm51bGwsb3ZlcmxheUJvdW5kczpudWxsLGxhYmVsQm91bmRzOnthbGw6bnVsbCxzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbCxtYWluOm51bGx9LGFycm93Qm91bmRzOntzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbCwibWlkLXNvdXJjZSI6bnVsbCwibWlkLXRhcmdldCI6bnVsbH19O2lmKE8ucG9zaXRpb24ueD09bnVsbCYmKE8ucG9zaXRpb24ueD0wKSxPLnBvc2l0aW9uLnk9PW51bGwmJihPLnBvc2l0aW9uLnk9MCksay5yZW5kZXJlZFBvc2l0aW9uKXt2YXIgTj1rLnJlbmRlcmVkUG9zaXRpb24sJD1tLnBhbigpLEg9bS56b29tKCk7Ty5wb3NpdGlvbj17eDooTi54LSQueCkvSCx5OihOLnktJC55KS9IfX12YXIgcT1bXTtuZShrLmNsYXNzZXMpP3E9ay5jbGFzc2VzOmJlKGsuY2xhc3NlcykmJihxPWsuY2xhc3Nlcy5zcGxpdCgvXHMrLykpO2Zvcih2YXIgWT0wLFo9cS5sZW5ndGg7WTxaO1krKyl7dmFyIGNlPXFbWV07IWNlfHxjZT09PSIifHxPLmNsYXNzZXMuYWRkKGNlKX10aGlzLmNyZWF0ZUVtaXR0ZXIoKTt2YXIgdmU9ay5zdHlsZXx8ay5jc3M7dmUmJihodSgiU2V0dGluZyBhIGBzdHlsZWAgYnlwYXNzIGF0IGVsZW1lbnQgY3JlYXRpb24gc2hvdWxkIGJlIGRvbmUgb25seSB3aGVuIGFic29sdXRlbHkgbmVjZXNzYXJ5LiAgVHJ5IHRvIHVzZSB0aGUgc3R5bGVzaGVldCBpbnN0ZWFkLiIpLHRoaXMuc3R5bGUodmUpKSwoUz09PXZvaWQgMHx8UykmJnRoaXMucmVzdG9yZSgpfSxsaj1mdW5jdGlvbihtKXtyZXR1cm4gbT17YmZzOm0uYmZzfHwhbS5kZnMsZGZzOm0uZGZzfHwhbS5iZnN9LGZ1bmN0aW9uKFMsTSxPKXt2YXIgTjtzZShTKSYmIXhlKFMpJiYoTj1TLFM9Ti5yb290c3x8Ti5yb290LE09Ti52aXNpdCxPPU4uZGlyZWN0ZWQpLE89YXJndW1lbnRzLmxlbmd0aD09PTImJiFhZShNKT9NOk8sTT1hZShNKT9NOmZ1bmN0aW9uKCl7fTtmb3IodmFyICQ9dGhpcy5fcHJpdmF0ZS5jeSxIPVM9YmUoUyk/dGhpcy5maWx0ZXIoUyk6UyxxPVtdLFk9W10sWj17fSxjZT17fSx2ZT17fSxtZT0wLExlLF9lPXRoaXMuYnlHcm91cCgpLEVlPV9lLm5vZGVzLEJlPV9lLmVkZ2VzLFJlPTA7UmU8SC5sZW5ndGg7UmUrKyl7dmFyIFZlPUhbUmVdLGN0PVZlLmlkKCk7VmUuaXNOb2RlKCkmJihxLnVuc2hpZnQoVmUpLG0uYmZzJiYodmVbY3RdPSEwLFkucHVzaChWZSkpLGNlW2N0XT0wKX1mb3IodmFyIHN0PWZ1bmN0aW9uKCl7dmFyIFd0PW0uYmZzP3Euc2hpZnQoKTpxLnBvcCgpLFR0PVd0LmlkKCk7aWYobS5kZnMpe2lmKHZlW1R0XSlyZXR1cm4iY29udGludWUiO3ZlW1R0XT0hMCxZLnB1c2goV3QpfXZhciBfbj1jZVtUdF0saG49WltUdF0sWXQ9aG4hPW51bGw/aG4uc291cmNlKCk6bnVsbCxEbj1obiE9bnVsbD9obi50YXJnZXQoKTpudWxsLGlyPWhuPT1udWxsP3ZvaWQgMDpXdC5zYW1lKFl0KT9EblswXTpZdFswXSx2cj12b2lkIDA7aWYodnI9TShXdCxobixpcixtZSsrLF9uKSx2cj09PSEwKXJldHVybiBMZT1XdCwiYnJlYWsiO2lmKHZyPT09ITEpcmV0dXJuImJyZWFrIjtmb3IodmFyIE5uPVd0LmNvbm5lY3RlZEVkZ2VzKCkuZmlsdGVyKGZ1bmN0aW9uKE9yKXtyZXR1cm4oIU98fE9yLnNvdXJjZSgpLnNhbWUoV3QpKSYmQmUuaGFzKE9yKX0pLHByPTA7cHI8Tm4ubGVuZ3RoO3ByKyspe3ZhciBFcj1Obltwcl0sTXI9RXIuY29ubmVjdGVkTm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oT3Ipe3JldHVybiFPci5zYW1lKFd0KSYmRWUuaGFzKE9yKX0pLENyPU1yLmlkKCk7TXIubGVuZ3RoIT09MCYmIXZlW0NyXSYmKE1yPU1yWzBdLHEucHVzaChNciksbS5iZnMmJih2ZVtDcl09ITAsWS5wdXNoKE1yKSksWltDcl09RXIsY2VbQ3JdPWNlW1R0XSsxKX19O3EubGVuZ3RoIT09MDspe3ZhciBZZT1zdCgpO2lmKFllIT09ImNvbnRpbnVlIiYmWWU9PT0iYnJlYWsiKWJyZWFrfWZvcih2YXIgbXQ9JC5jb2xsZWN0aW9uKCksSmU9MDtKZTxZLmxlbmd0aDtKZSsrKXt2YXIgTHQ9WVtKZV0sTXQ9WltMdC5pZCgpXTtNdCE9bnVsbCYmbXQucHVzaChNdCksbXQucHVzaChMdCl9cmV0dXJue3BhdGg6JC5jb2xsZWN0aW9uKG10KSxmb3VuZDokLmNvbGxlY3Rpb24oTGUpfX19LEg5PXticmVhZHRoRmlyc3RTZWFyY2g6bGooe2JmczohMH0pLGRlcHRoRmlyc3RTZWFyY2g6bGooe2RmczohMH0pfTtIOS5iZnM9SDkuYnJlYWR0aEZpcnN0U2VhcmNoLEg5LmRmcz1IOS5kZXB0aEZpcnN0U2VhcmNoO3ZhciBHSj1vbihmdW5jdGlvbih4LG0peyhmdW5jdGlvbigpe3ZhciBrLFMsTSxPLE4sJCxILHEsWSxaLGNlLHZlLG1lLExlLF9lO009TWF0aC5mbG9vcixaPU1hdGgubWluLFM9ZnVuY3Rpb24oRWUsQmUpe3JldHVybiBFZTxCZT8tMTpFZT5CZT8xOjB9LFk9ZnVuY3Rpb24oRWUsQmUsUmUsVmUsY3Qpe3ZhciBzdDtpZihSZT09bnVsbCYmKFJlPTApLGN0PT1udWxsJiYoY3Q9UyksUmU8MCl0aHJvdyBuZXcgRXJyb3IoImxvIG11c3QgYmUgbm9uLW5lZ2F0aXZlIik7Zm9yKFZlPT1udWxsJiYoVmU9RWUubGVuZ3RoKTtSZTxWZTspc3Q9TSgoUmUrVmUpLzIpLGN0KEJlLEVlW3N0XSk8MD9WZT1zdDpSZT1zdCsxO3JldHVybltdLnNwbGljZS5hcHBseShFZSxbUmUsUmUtUmVdLmNvbmNhdChCZSkpLEJlfSwkPWZ1bmN0aW9uKEVlLEJlLFJlKXtyZXR1cm4gUmU9PW51bGwmJihSZT1TKSxFZS5wdXNoKEJlKSxMZShFZSwwLEVlLmxlbmd0aC0xLFJlKX0sTj1mdW5jdGlvbihFZSxCZSl7dmFyIFJlLFZlO3JldHVybiBCZT09bnVsbCYmKEJlPVMpLFJlPUVlLnBvcCgpLEVlLmxlbmd0aD8oVmU9RWVbMF0sRWVbMF09UmUsX2UoRWUsMCxCZSkpOlZlPVJlLFZlfSxxPWZ1bmN0aW9uKEVlLEJlLFJlKXt2YXIgVmU7cmV0dXJuIFJlPT1udWxsJiYoUmU9UyksVmU9RWVbMF0sRWVbMF09QmUsX2UoRWUsMCxSZSksVmV9LEg9ZnVuY3Rpb24oRWUsQmUsUmUpe3ZhciBWZTtyZXR1cm4gUmU9PW51bGwmJihSZT1TKSxFZS5sZW5ndGgmJlJlKEVlWzBdLEJlKTwwJiYoVmU9W0VlWzBdLEJlXSxCZT1WZVswXSxFZVswXT1WZVsxXSxfZShFZSwwLFJlKSksQmV9LE89ZnVuY3Rpb24oRWUsQmUpe3ZhciBSZSxWZSxjdCxzdCxZZSxtdDtmb3IoQmU9PW51bGwmJihCZT1TKSxzdD0oZnVuY3Rpb24oKXttdD1bXTtmb3IodmFyIEplPTAsTHQ9TShFZS5sZW5ndGgvMik7MDw9THQ/SmU8THQ6SmU+THQ7MDw9THQ/SmUrKzpKZS0tKW10LnB1c2goSmUpO3JldHVybiBtdH0pLmFwcGx5KHRoaXMpLnJldmVyc2UoKSxZZT1bXSxWZT0wLGN0PXN0Lmxlbmd0aDtWZTxjdDtWZSsrKVJlPXN0W1ZlXSxZZS5wdXNoKF9lKEVlLFJlLEJlKSk7cmV0dXJuIFllfSxtZT1mdW5jdGlvbihFZSxCZSxSZSl7dmFyIFZlO2lmKFJlPT1udWxsJiYoUmU9UyksVmU9RWUuaW5kZXhPZihCZSksVmUhPT0tMSlyZXR1cm4gTGUoRWUsMCxWZSxSZSksX2UoRWUsVmUsUmUpfSxjZT1mdW5jdGlvbihFZSxCZSxSZSl7dmFyIFZlLGN0LHN0LFllLG10O2lmKFJlPT1udWxsJiYoUmU9UyksY3Q9RWUuc2xpY2UoMCxCZSksIWN0Lmxlbmd0aClyZXR1cm4gY3Q7Zm9yKE8oY3QsUmUpLG10PUVlLnNsaWNlKEJlKSxzdD0wLFllPW10Lmxlbmd0aDtzdDxZZTtzdCsrKVZlPW10W3N0XSxIKGN0LFZlLFJlKTtyZXR1cm4gY3Quc29ydChSZSkucmV2ZXJzZSgpfSx2ZT1mdW5jdGlvbihFZSxCZSxSZSl7dmFyIFZlLGN0LHN0LFllLG10LEplLEx0LE10LHV0O2lmKFJlPT1udWxsJiYoUmU9UyksQmUqMTA8PUVlLmxlbmd0aCl7aWYoc3Q9RWUuc2xpY2UoMCxCZSkuc29ydChSZSksIXN0Lmxlbmd0aClyZXR1cm4gc3Q7Zm9yKGN0PXN0W3N0Lmxlbmd0aC0xXSxMdD1FZS5zbGljZShCZSksWWU9MCxKZT1MdC5sZW5ndGg7WWU8SmU7WWUrKylWZT1MdFtZZV0sUmUoVmUsY3QpPDAmJihZKHN0LFZlLDAsbnVsbCxSZSksc3QucG9wKCksY3Q9c3Rbc3QubGVuZ3RoLTFdKTtyZXR1cm4gc3R9Zm9yKE8oRWUsUmUpLHV0PVtdLG10PTAsTXQ9WihCZSxFZS5sZW5ndGgpOzA8PU10P210PE10Om10Pk10OzA8PU10PysrbXQ6LS1tdCl1dC5wdXNoKE4oRWUsUmUpKTtyZXR1cm4gdXR9LExlPWZ1bmN0aW9uKEVlLEJlLFJlLFZlKXt2YXIgY3Qsc3QsWWU7Zm9yKFZlPT1udWxsJiYoVmU9UyksY3Q9RWVbUmVdO1JlPkJlOyl7aWYoWWU9UmUtMT4+MSxzdD1FZVtZZV0sVmUoY3Qsc3QpPDApe0VlW1JlXT1zdCxSZT1ZZTtjb250aW51ZX1icmVha31yZXR1cm4gRWVbUmVdPWN0fSxfZT1mdW5jdGlvbihFZSxCZSxSZSl7dmFyIFZlLGN0LHN0LFllLG10O2ZvcihSZT09bnVsbCYmKFJlPVMpLGN0PUVlLmxlbmd0aCxtdD1CZSxzdD1FZVtCZV0sVmU9MipCZSsxO1ZlPGN0OylZZT1WZSsxLFllPGN0JiYhKFJlKEVlW1ZlXSxFZVtZZV0pPDApJiYoVmU9WWUpLEVlW0JlXT1FZVtWZV0sQmU9VmUsVmU9MipCZSsxO3JldHVybiBFZVtCZV09c3QsTGUoRWUsbXQsQmUsUmUpfSxrPWZ1bmN0aW9uKCl7RWUucHVzaD0kLEVlLnBvcD1OLEVlLnJlcGxhY2U9cSxFZS5wdXNocG9wPUgsRWUuaGVhcGlmeT1PLEVlLnVwZGF0ZUl0ZW09bWUsRWUubmxhcmdlc3Q9Y2UsRWUubnNtYWxsZXN0PXZlO2Z1bmN0aW9uIEVlKEJlKXt0aGlzLmNtcD1CZT8/Uyx0aGlzLm5vZGVzPVtdfXJldHVybiBFZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihCZSl7cmV0dXJuICQodGhpcy5ub2RlcyxCZSx0aGlzLmNtcCl9LEVlLnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXtyZXR1cm4gTih0aGlzLm5vZGVzLHRoaXMuY21wKX0sRWUucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlc1swXX0sRWUucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKEJlKXtyZXR1cm4gdGhpcy5ub2Rlcy5pbmRleE9mKEJlKSE9PS0xfSxFZS5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbihCZSl7cmV0dXJuIHEodGhpcy5ub2RlcyxCZSx0aGlzLmNtcCl9LEVlLnByb3RvdHlwZS5wdXNocG9wPWZ1bmN0aW9uKEJlKXtyZXR1cm4gSCh0aGlzLm5vZGVzLEJlLHRoaXMuY21wKX0sRWUucHJvdG90eXBlLmhlYXBpZnk9ZnVuY3Rpb24oKXtyZXR1cm4gTyh0aGlzLm5vZGVzLHRoaXMuY21wKX0sRWUucHJvdG90eXBlLnVwZGF0ZUl0ZW09ZnVuY3Rpb24oQmUpe3JldHVybiBtZSh0aGlzLm5vZGVzLEJlLHRoaXMuY21wKX0sRWUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXM9W119LEVlLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLmxlbmd0aD09PTB9LEVlLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXMubGVuZ3RofSxFZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgQmU7cmV0dXJuIEJlPW5ldyBFZSxCZS5ub2Rlcz10aGlzLm5vZGVzLnNsaWNlKDApLEJlfSxFZS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLnNsaWNlKDApfSxFZS5wcm90b3R5cGUuaW5zZXJ0PUVlLnByb3RvdHlwZS5wdXNoLEVlLnByb3RvdHlwZS50b3A9RWUucHJvdG90eXBlLnBlZWssRWUucHJvdG90eXBlLmZyb250PUVlLnByb3RvdHlwZS5wZWVrLEVlLnByb3RvdHlwZS5oYXM9RWUucHJvdG90eXBlLmNvbnRhaW5zLEVlLnByb3RvdHlwZS5jb3B5PUVlLnByb3RvdHlwZS5jbG9uZSxFZX0oKSxmdW5jdGlvbihFZSxCZSl7cmV0dXJuIHguZXhwb3J0cz1CZSgpfSh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIGt9KX0pLmNhbGwod3QpfSksVjk9R0osS0o9cTAoe3Jvb3Q6bnVsbCx3ZWlnaHQ6ZnVuY3Rpb24obSl7cmV0dXJuIDF9LGRpcmVjdGVkOiExfSksV0o9e2RpamtzdHJhOmZ1bmN0aW9uKG0pe2lmKCFzZShtKSl7dmFyIGs9YXJndW1lbnRzO209e3Jvb3Q6a1swXSx3ZWlnaHQ6a1sxXSxkaXJlY3RlZDprWzJdfX12YXIgUz1LSihtKSxNPVMucm9vdCxPPVMud2VpZ2h0LE49Uy5kaXJlY3RlZCwkPXRoaXMsSD1PLHE9YmUoTSk/dGhpcy5maWx0ZXIoTSlbMF06TVswXSxZPXt9LFo9e30sY2U9e30sdmU9dGhpcy5ieUdyb3VwKCksbWU9dmUubm9kZXMsTGU9dmUuZWRnZXM7TGUudW5tZXJnZUJ5KGZ1bmN0aW9uKF9uKXtyZXR1cm4gX24uaXNMb29wKCl9KTtmb3IodmFyIF9lPWZ1bmN0aW9uKGhuKXtyZXR1cm4gWVtobi5pZCgpXX0sRWU9ZnVuY3Rpb24oaG4sWXQpe1lbaG4uaWQoKV09WXQsQmUudXBkYXRlSXRlbShobil9LEJlPW5ldyBWOShmdW5jdGlvbihfbixobil7cmV0dXJuIF9lKF9uKS1fZShobil9KSxSZT0wO1JlPG1lLmxlbmd0aDtSZSsrKXt2YXIgVmU9bWVbUmVdO1lbVmUuaWQoKV09VmUuc2FtZShxKT8wOjEvMCxCZS5wdXNoKFZlKX1mb3IodmFyIGN0PWZ1bmN0aW9uKGhuLFl0KXtmb3IodmFyIERuPShOP2huLmVkZ2VzVG8oWXQpOmhuLmVkZ2VzV2l0aChZdCkpLmludGVyc2VjdChMZSksaXI9MS8wLHZyLE5uPTA7Tm48RG4ubGVuZ3RoO05uKyspe3ZhciBwcj1EbltObl0sRXI9SChwcik7KEVyPGlyfHwhdnIpJiYoaXI9RXIsdnI9cHIpfXJldHVybntlZGdlOnZyLGRpc3Q6aXJ9fTtCZS5zaXplKCk+MDspe3ZhciBzdD1CZS5wb3AoKSxZZT1fZShzdCksbXQ9c3QuaWQoKTtpZihjZVttdF09WWUsWWUhPT0xLzApZm9yKHZhciBKZT1zdC5uZWlnaGJvcmhvb2QoKS5pbnRlcnNlY3QobWUpLEx0PTA7THQ8SmUubGVuZ3RoO0x0Kyspe3ZhciBNdD1KZVtMdF0sdXQ9TXQuaWQoKSxXdD1jdChzdCxNdCksVHQ9WWUrV3QuZGlzdDtUdDxfZShNdCkmJihFZShNdCxUdCksWlt1dF09e25vZGU6c3QsZWRnZTpXdC5lZGdlfSl9fXJldHVybntkaXN0YW5jZVRvOmZ1bmN0aW9uKGhuKXt2YXIgWXQ9YmUoaG4pP21lLmZpbHRlcihobilbMF06aG5bMF07cmV0dXJuIGNlW1l0LmlkKCldfSxwYXRoVG86ZnVuY3Rpb24oaG4pe3ZhciBZdD1iZShobik/bWUuZmlsdGVyKGhuKVswXTpoblswXSxEbj1bXSxpcj1ZdCx2cj1pci5pZCgpO2lmKFl0Lmxlbmd0aD4wKWZvcihEbi51bnNoaWZ0KFl0KTtaW3ZyXTspe3ZhciBObj1aW3ZyXTtEbi51bnNoaWZ0KE5uLmVkZ2UpLERuLnVuc2hpZnQoTm4ubm9kZSksaXI9Tm4ubm9kZSx2cj1pci5pZCgpfXJldHVybiAkLnNwYXduKERuKX19fX0sWUo9e2tydXNrYWw6ZnVuY3Rpb24obSl7bT1tfHxmdW5jdGlvbihSZSl7cmV0dXJuIDF9O2Zvcih2YXIgaz10aGlzLmJ5R3JvdXAoKSxTPWsubm9kZXMsTT1rLmVkZ2VzLE89Uy5sZW5ndGgsTj1uZXcgQXJyYXkoTyksJD1TLEg9ZnVuY3Rpb24oVmUpe2Zvcih2YXIgY3Q9MDtjdDxOLmxlbmd0aDtjdCsrKXt2YXIgc3Q9TltjdF07aWYoc3QuaGFzKFZlKSlyZXR1cm4gY3R9fSxxPTA7cTxPO3ErKylOW3FdPXRoaXMuc3Bhd24oU1txXSk7Zm9yKHZhciBZPU0uc29ydChmdW5jdGlvbihSZSxWZSl7cmV0dXJuIG0oUmUpLW0oVmUpfSksWj0wO1o8WS5sZW5ndGg7WisrKXt2YXIgY2U9WVtaXSx2ZT1jZS5zb3VyY2UoKVswXSxtZT1jZS50YXJnZXQoKVswXSxMZT1IKHZlKSxfZT1IKG1lKSxFZT1OW0xlXSxCZT1OW19lXTtMZSE9PV9lJiYoJC5tZXJnZShjZSksRWUubWVyZ2UoQmUpLE4uc3BsaWNlKF9lLDEpKX1yZXR1cm4gJH19LFhKPXEwKHtyb290Om51bGwsZ29hbDpudWxsLHdlaWdodDpmdW5jdGlvbihtKXtyZXR1cm4gMX0saGV1cmlzdGljOmZ1bmN0aW9uKG0pe3JldHVybiAwfSxkaXJlY3RlZDohMX0pLFFKPXthU3RhcjpmdW5jdGlvbihtKXt2YXIgaz10aGlzLmN5KCksUz1YSihtKSxNPVMucm9vdCxPPVMuZ29hbCxOPVMuaGV1cmlzdGljLCQ9Uy5kaXJlY3RlZCxIPVMud2VpZ2h0O009ay5jb2xsZWN0aW9uKE0pWzBdLE89ay5jb2xsZWN0aW9uKE8pWzBdO3ZhciBxPU0uaWQoKSxZPU8uaWQoKSxaPXt9LGNlPXt9LHZlPXt9LG1lPW5ldyBWOShmdW5jdGlvbih2cixObil7cmV0dXJuIGNlW3ZyLmlkKCldLWNlW05uLmlkKCldfSksTGU9bmV3IFE3LF9lPXt9LEVlPXt9LEJlPWZ1bmN0aW9uKE5uLHByKXttZS5wdXNoKE5uKSxMZS5hZGQocHIpfSxSZSxWZSxjdD1mdW5jdGlvbigpe1JlPW1lLnBvcCgpLFZlPVJlLmlkKCksTGUuZGVsZXRlKFZlKX0sc3Q9ZnVuY3Rpb24oTm4pe3JldHVybiBMZS5oYXMoTm4pfTtCZShNLHEpLFpbcV09MCxjZVtxXT1OKE0pO2Zvcih2YXIgWWU9MDttZS5zaXplKCk+MDspe2lmKGN0KCksWWUrKyxWZT09PVkpe2Zvcih2YXIgbXQ9W10sSmU9TyxMdD1ZLE10PUVlW0x0XTttdC51bnNoaWZ0KEplKSxNdCE9bnVsbCYmbXQudW5zaGlmdChNdCksSmU9X2VbTHRdLEplIT1udWxsOylMdD1KZS5pZCgpLE10PUVlW0x0XTtyZXR1cm57Zm91bmQ6ITAsZGlzdGFuY2U6WltWZV0scGF0aDp0aGlzLnNwYXduKG10KSxzdGVwczpZZX19dmVbVmVdPSEwO2Zvcih2YXIgdXQ9UmUuX3ByaXZhdGUuZWRnZXMsV3Q9MDtXdDx1dC5sZW5ndGg7V3QrKyl7dmFyIFR0PXV0W1d0XTtpZih0aGlzLmhhc0VsZW1lbnRXaXRoSWQoVHQuaWQoKSkmJiEoJCYmVHQuZGF0YSgic291cmNlIikhPT1WZSkpe3ZhciBfbj1UdC5zb3VyY2UoKSxobj1UdC50YXJnZXQoKSxZdD1fbi5pZCgpIT09VmU/X246aG4sRG49WXQuaWQoKTtpZih0aGlzLmhhc0VsZW1lbnRXaXRoSWQoRG4pJiYhdmVbRG5dKXt2YXIgaXI9WltWZV0rSChUdCk7aWYoIXN0KERuKSl7WltEbl09aXIsY2VbRG5dPWlyK04oWXQpLEJlKFl0LERuKSxfZVtEbl09UmUsRWVbRG5dPVR0O2NvbnRpbnVlfWlyPFpbRG5dJiYoWltEbl09aXIsY2VbRG5dPWlyK04oWXQpLF9lW0RuXT1SZSxFZVtEbl09VHQpfX19fXJldHVybntmb3VuZDohMSxkaXN0YW5jZTp2b2lkIDAscGF0aDp2b2lkIDAsc3RlcHM6WWV9fX0sSko9cTAoe3dlaWdodDpmdW5jdGlvbihtKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITF9KSxaSj17ZmxveWRXYXJzaGFsbDpmdW5jdGlvbihtKXtmb3IodmFyIGs9dGhpcy5jeSgpLFM9SkoobSksTT1TLndlaWdodCxPPVMuZGlyZWN0ZWQsTj1NLCQ9dGhpcy5ieUdyb3VwKCksSD0kLm5vZGVzLHE9JC5lZGdlcyxZPUgubGVuZ3RoLFo9WSpZLGNlPWZ1bmN0aW9uKEVyKXtyZXR1cm4gSC5pbmRleE9mKEVyKX0sdmU9ZnVuY3Rpb24oRXIpe3JldHVybiBIW0VyXX0sbWU9bmV3IEFycmF5KFopLExlPTA7TGU8WjtMZSsrKXt2YXIgX2U9TGUlWSxFZT0oTGUtX2UpL1k7RWU9PT1fZT9tZVtMZV09MDptZVtMZV09MS8wfWZvcih2YXIgQmU9bmV3IEFycmF5KFopLFJlPW5ldyBBcnJheShaKSxWZT0wO1ZlPHEubGVuZ3RoO1ZlKyspe3ZhciBjdD1xW1ZlXSxzdD1jdC5zb3VyY2UoKVswXSxZZT1jdC50YXJnZXQoKVswXTtpZihzdCE9PVllKXt2YXIgbXQ9Y2Uoc3QpLEplPWNlKFllKSxMdD1tdCpZK0plLE10PU4oY3QpO2lmKG1lW0x0XT5NdCYmKG1lW0x0XT1NdCxCZVtMdF09SmUsUmVbTHRdPWN0KSwhTyl7dmFyIHV0PUplKlkrbXQ7IU8mJm1lW3V0XT5NdCYmKG1lW3V0XT1NdCxCZVt1dF09bXQsUmVbdXRdPWN0KX19fWZvcih2YXIgV3Q9MDtXdDxZO1d0KyspZm9yKHZhciBUdD0wO1R0PFk7VHQrKylmb3IodmFyIF9uPVR0KlkrV3QsaG49MDtobjxZO2huKyspe3ZhciBZdD1UdCpZK2huLERuPVd0KlkraG47bWVbX25dK21lW0RuXTxtZVtZdF0mJihtZVtZdF09bWVbX25dK21lW0RuXSxCZVtZdF09QmVbX25dKX12YXIgaXI9ZnVuY3Rpb24oRXIpe3JldHVybihiZShFcik/ay5maWx0ZXIoRXIpOkVyKVswXX0sdnI9ZnVuY3Rpb24oRXIpe3JldHVybiBjZShpcihFcikpfSxObj17ZGlzdGFuY2U6ZnVuY3Rpb24oRXIsTXIpe3ZhciBDcj12cihFciksT3I9dnIoTXIpO3JldHVybiBtZVtDcipZK09yXX0scGF0aDpmdW5jdGlvbihFcixNcil7dmFyIENyPXZyKEVyKSxPcj12cihNciksV249dmUoQ3IpO2lmKENyPT09T3IpcmV0dXJuIFduLmNvbGxlY3Rpb24oKTtpZihCZVtDcipZK09yXT09bnVsbClyZXR1cm4gay5jb2xsZWN0aW9uKCk7dmFyIGJyPWsuY29sbGVjdGlvbigpLFNyPUNyLE5yO2Zvcihici5tZXJnZShXbik7Q3IhPT1PcjspU3I9Q3IsQ3I9QmVbQ3IqWStPcl0sTnI9UmVbU3IqWStDcl0sYnIubWVyZ2UoTnIpLGJyLm1lcmdlKHZlKENyKSk7cmV0dXJuIGJyfX07cmV0dXJuIE5ufX0sZVo9cTAoe3dlaWdodDpmdW5jdGlvbihtKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITEscm9vdDpudWxsfSksdFo9e2JlbGxtYW5Gb3JkOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMsUz1lWihtKSxNPVMud2VpZ2h0LE89Uy5kaXJlY3RlZCxOPVMucm9vdCwkPU0sSD10aGlzLHE9dGhpcy5jeSgpLFk9dGhpcy5ieUdyb3VwKCksWj1ZLmVkZ2VzLGNlPVkubm9kZXMsdmU9Y2UubGVuZ3RoLG1lPW5ldyB3bSxMZT0hMSxfZT1bXTtOPXEuY29sbGVjdGlvbihOKVswXSxaLnVubWVyZ2VCeShmdW5jdGlvbihGcyl7cmV0dXJuIEZzLmlzTG9vcCgpfSk7Zm9yKHZhciBFZT1aLmxlbmd0aCxCZT1mdW5jdGlvbih4cyl7dmFyIFJzPW1lLmdldCh4cy5pZCgpKTtyZXR1cm4gUnN8fChScz17fSxtZS5zZXQoeHMuaWQoKSxScykpLFJzfSxSZT1mdW5jdGlvbih4cyl7cmV0dXJuKGJlKHhzKT9xLiQoeHMpOnhzKVswXX0sVmU9ZnVuY3Rpb24oeHMpe3JldHVybiBCZShSZSh4cykpLmRpc3R9LGN0PWZ1bmN0aW9uKHhzKXtmb3IodmFyIFJzPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpOLHlvPVJlKHhzKSwkYT1bXSxEYT15bzs7KXtpZihEYT09bnVsbClyZXR1cm4gay5zcGF3bigpO3ZhciBCbz1CZShEYSksdHI9Qm8uZWRnZSxHPUJvLnByZWQ7aWYoJGEudW5zaGlmdChEYVswXSksRGEuc2FtZShScykmJiRhLmxlbmd0aD4wKWJyZWFrO3RyIT1udWxsJiYkYS51bnNoaWZ0KHRyKSxEYT1HfXJldHVybiBILnNwYXduKCRhKX0sc3Q9MDtzdDx2ZTtzdCsrKXt2YXIgWWU9Y2Vbc3RdLG10PUJlKFllKTtZZS5zYW1lKE4pP210LmRpc3Q9MDptdC5kaXN0PTEvMCxtdC5wcmVkPW51bGwsbXQuZWRnZT1udWxsfWZvcih2YXIgSmU9ITEsTHQ9ZnVuY3Rpb24oeHMsUnMseW8sJGEsRGEsQm8pe3ZhciB0cj0kYS5kaXN0K0JvO3RyPERhLmRpc3QmJiF5by5zYW1lKCRhLmVkZ2UpJiYoRGEuZGlzdD10cixEYS5wcmVkPXhzLERhLmVkZ2U9eW8sSmU9ITApfSxNdD0xO010PHZlO010Kyspe0plPSExO2Zvcih2YXIgdXQ9MDt1dDxFZTt1dCsrKXt2YXIgV3Q9Wlt1dF0sVHQ9V3Quc291cmNlKCksX249V3QudGFyZ2V0KCksaG49JChXdCksWXQ9QmUoVHQpLERuPUJlKF9uKTtMdChUdCxfbixXdCxZdCxEbixobiksT3x8THQoX24sVHQsV3QsRG4sWXQsaG4pfWlmKCFKZSlicmVha31pZihKZSlmb3IodmFyIGlyPVtdLHZyPTA7dnI8RWU7dnIrKyl7dmFyIE5uPVpbdnJdLHByPU5uLnNvdXJjZSgpLEVyPU5uLnRhcmdldCgpLE1yPSQoTm4pLENyPUJlKHByKS5kaXN0LE9yPUJlKEVyKS5kaXN0O2lmKENyK01yPE9yfHwhTyYmT3IrTXI8Q3IpaWYoTGV8fChodSgiR3JhcGggY29udGFpbnMgYSBuZWdhdGl2ZSB3ZWlnaHQgY3ljbGUgZm9yIEJlbGxtYW4tRm9yZCIpLExlPSEwKSxtLmZpbmROZWdhdGl2ZVdlaWdodEN5Y2xlcyE9PSExKXt2YXIgV249W107Q3IrTXI8T3ImJlduLnB1c2gocHIpLCFPJiZPcitNcjxDciYmV24ucHVzaChFcik7Zm9yKHZhciBicj1Xbi5sZW5ndGgsU3I9MDtTcjxicjtTcisrKXt2YXIgTnI9V25bU3JdLFNpPVtOcl07U2kucHVzaChCZShOcikuZWRnZSk7Zm9yKHZhciB5cz1CZShOcikucHJlZDtTaS5pbmRleE9mKHlzKT09PS0xOylTaS5wdXNoKHlzKSxTaS5wdXNoKEJlKHlzKS5lZGdlKSx5cz1CZSh5cykucHJlZDtTaT1TaS5zbGljZShTaS5pbmRleE9mKHlzKSk7Zm9yKHZhciBwYT1TaVswXS5pZCgpLE1pPTAsZ2k9MjtnaTxTaS5sZW5ndGg7Z2krPTIpU2lbZ2ldLmlkKCk8cGEmJihwYT1TaVtnaV0uaWQoKSxNaT1naSk7U2k9U2kuc2xpY2UoTWkpLmNvbmNhdChTaS5zbGljZSgwLE1pKSksU2kucHVzaChTaVswXSk7dmFyIGZzPVNpLm1hcChmdW5jdGlvbihGcyl7cmV0dXJuIEZzLmlkKCl9KS5qb2luKCIsIik7aXIuaW5kZXhPZihmcyk9PT0tMSYmKF9lLnB1c2goSC5zcGF3bihTaSkpLGlyLnB1c2goZnMpKX19ZWxzZSBicmVha31yZXR1cm57ZGlzdGFuY2VUbzpWZSxwYXRoVG86Y3QsaGFzTmVnYXRpdmVXZWlnaHRDeWNsZTpMZSxuZWdhdGl2ZVdlaWdodEN5Y2xlczpfZX19fSxuWj1NYXRoLnNxcnQoMiksclo9ZnVuY3Rpb24obSxrLFMpe1MubGVuZ3RoPT09MCYmY2goIkthcmdlci1TdGVpbiBtdXN0IGJlIHJ1biBvbiBhIGNvbm5lY3RlZCAoc3ViKWdyYXBoIik7Zm9yKHZhciBNPVNbbV0sTz1NWzFdLE49TVsyXSwkPWtbT10sSD1rW05dLHE9UyxZPXEubGVuZ3RoLTE7WT49MDtZLS0pe3ZhciBaPXFbWV0sY2U9WlsxXSx2ZT1aWzJdOyhrW2NlXT09PSQmJmtbdmVdPT09SHx8a1tjZV09PT1IJiZrW3ZlXT09PSQpJiZxLnNwbGljZShZLDEpfWZvcih2YXIgbWU9MDttZTxxLmxlbmd0aDttZSsrKXt2YXIgTGU9cVttZV07TGVbMV09PT1IPyhxW21lXT1MZS5zbGljZSgpLHFbbWVdWzFdPSQpOkxlWzJdPT09SCYmKHFbbWVdPUxlLnNsaWNlKCkscVttZV1bMl09JCl9Zm9yKHZhciBfZT0wO19lPGsubGVuZ3RoO19lKyspa1tfZV09PT1IJiYoa1tfZV09JCk7cmV0dXJuIHF9LHJJPWZ1bmN0aW9uKG0sayxTLE0pe2Zvcig7Uz5NOyl7dmFyIE89TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmsubGVuZ3RoKTtrPXJaKE8sbSxrKSxTLS19cmV0dXJuIGt9LGlaPXtrYXJnZXJTdGVpbjpmdW5jdGlvbigpe3ZhciBtPXRoaXMsaz10aGlzLmJ5R3JvdXAoKSxTPWsubm9kZXMsTT1rLmVkZ2VzO00udW5tZXJnZUJ5KGZ1bmN0aW9uKERuKXtyZXR1cm4gRG4uaXNMb29wKCl9KTt2YXIgTz1TLmxlbmd0aCxOPU0ubGVuZ3RoLCQ9TWF0aC5jZWlsKE1hdGgucG93KE1hdGgubG9nKE8pL01hdGguTE4yLDIpKSxIPU1hdGguZmxvb3IoTy9uWik7aWYoTzwyKXtjaCgiQXQgbGVhc3QgMiBub2RlcyBhcmUgcmVxdWlyZWQgZm9yIEthcmdlci1TdGVpbiBhbGdvcml0aG0iKTtyZXR1cm59Zm9yKHZhciBxPVtdLFk9MDtZPE47WSsrKXt2YXIgWj1NW1ldO3EucHVzaChbWSxTLmluZGV4T2YoWi5zb3VyY2UoKSksUy5pbmRleE9mKFoudGFyZ2V0KCkpXSl9Zm9yKHZhciBjZT0xLzAsdmU9W10sbWU9bmV3IEFycmF5KE8pLExlPW5ldyBBcnJheShPKSxfZT1uZXcgQXJyYXkoTyksRWU9ZnVuY3Rpb24oaXIsdnIpe2Zvcih2YXIgTm49MDtObjxPO05uKyspdnJbTm5dPWlyW05uXX0sQmU9MDtCZTw9JDtCZSsrKXtmb3IodmFyIFJlPTA7UmU8TztSZSsrKUxlW1JlXT1SZTt2YXIgVmU9ckkoTGUscS5zbGljZSgpLE8sSCksY3Q9VmUuc2xpY2UoKTtFZShMZSxfZSk7dmFyIHN0PXJJKExlLFZlLEgsMiksWWU9ckkoX2UsY3QsSCwyKTtzdC5sZW5ndGg8PVllLmxlbmd0aCYmc3QubGVuZ3RoPGNlPyhjZT1zdC5sZW5ndGgsdmU9c3QsRWUoTGUsbWUpKTpZZS5sZW5ndGg8PXN0Lmxlbmd0aCYmWWUubGVuZ3RoPGNlJiYoY2U9WWUubGVuZ3RoLHZlPVllLEVlKF9lLG1lKSl9Zm9yKHZhciBtdD10aGlzLnNwYXduKHZlLm1hcChmdW5jdGlvbihEbil7cmV0dXJuIE1bRG5bMF1dfSkpLEplPXRoaXMuc3Bhd24oKSxMdD10aGlzLnNwYXduKCksTXQ9bWVbMF0sdXQ9MDt1dDxtZS5sZW5ndGg7dXQrKyl7dmFyIFd0PW1lW3V0XSxUdD1TW3V0XTtXdD09PU10P0plLm1lcmdlKFR0KTpMdC5tZXJnZShUdCl9dmFyIF9uPWZ1bmN0aW9uKGlyKXt2YXIgdnI9bS5zcGF3bigpO3JldHVybiBpci5mb3JFYWNoKGZ1bmN0aW9uKE5uKXt2ci5tZXJnZShObiksTm4uY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHByKXttLmNvbnRhaW5zKHByKSYmIW10LmNvbnRhaW5zKHByKSYmdnIubWVyZ2UocHIpfSl9KSx2cn0saG49W19uKEplKSxfbihMdCldLFl0PXtjdXQ6bXQsY29tcG9uZW50czpobixwYXJ0aXRpb24xOkplLHBhcnRpdGlvbjI6THR9O3JldHVybiBZdH19LHNaPWZ1bmN0aW9uKG0pe3JldHVybnt4Om0ueCx5Om0ueX19LGxTPWZ1bmN0aW9uKG0sayxTKXtyZXR1cm57eDptLngqaytTLngseTptLnkqaytTLnl9fSxoaj1mdW5jdGlvbihtLGssUyl7cmV0dXJue3g6KG0ueC1TLngpL2sseToobS55LVMueSkva319LEo3PWZ1bmN0aW9uKG0pe3JldHVybnt4Om1bMF0seTptWzFdfX0sYVo9ZnVuY3Rpb24obSl7Zm9yKHZhciBrPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLFM9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm0ubGVuZ3RoLE09MS8wLE89aztPPFM7TysrKXt2YXIgTj1tW09dO2lzRmluaXRlKE4pJiYoTT1NYXRoLm1pbihOLE0pKX1yZXR1cm4gTX0sb1o9ZnVuY3Rpb24obSl7Zm9yKHZhciBrPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLFM9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm0ubGVuZ3RoLE09LTEvMCxPPWs7TzxTO08rKyl7dmFyIE49bVtPXTtpc0Zpbml0ZShOKSYmKE09TWF0aC5tYXgoTixNKSl9cmV0dXJuIE19LGNaPWZ1bmN0aW9uKG0pe2Zvcih2YXIgaz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MCxTPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTptLmxlbmd0aCxNPTAsTz0wLE49aztOPFM7TisrKXt2YXIgJD1tW05dO2lzRmluaXRlKCQpJiYoTSs9JCxPKyspfXJldHVybiBNL099LHVaPWZ1bmN0aW9uKG0pe3ZhciBrPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLFM9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm0ubGVuZ3RoLE09YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLE89YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLE49YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwO00/bT1tLnNsaWNlKGssUyk6KFM8bS5sZW5ndGgmJm0uc3BsaWNlKFMsbS5sZW5ndGgtUyksaz4wJiZtLnNwbGljZSgwLGspKTtmb3IodmFyICQ9MCxIPW0ubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBxPW1bSF07Tj9pc0Zpbml0ZShxKXx8KG1bSF09LTEvMCwkKyspOm0uc3BsaWNlKEgsMSl9TyYmbS5zb3J0KGZ1bmN0aW9uKGNlLHZlKXtyZXR1cm4gY2UtdmV9KTt2YXIgWT1tLmxlbmd0aCxaPU1hdGguZmxvb3IoWS8yKTtyZXR1cm4gWSUyIT09MD9tW1orMSskXToobVtaLTErJF0rbVtaKyRdKS8yfSxsWj1mdW5jdGlvbihtKXtyZXR1cm4gTWF0aC5QSSptLzE4MH0saFM9ZnVuY3Rpb24obSxrKXtyZXR1cm4gTWF0aC5hdGFuMihrLG0pLU1hdGguUEkvMn0saUk9TWF0aC5sb2cyfHxmdW5jdGlvbih4KXtyZXR1cm4gTWF0aC5sb2coeCkvTWF0aC5sb2coMil9LGZqPWZ1bmN0aW9uKG0pe3JldHVybiBtPjA/MTptPDA/LTE6MH0saDU9ZnVuY3Rpb24obSxrKXtyZXR1cm4gTWF0aC5zcXJ0KGY1KG0saykpfSxmNT1mdW5jdGlvbihtLGspe3ZhciBTPWsueC1tLngsTT1rLnktbS55O3JldHVybiBTKlMrTSpNfSxoWj1mdW5jdGlvbihtKXtmb3IodmFyIGs9bS5sZW5ndGgsUz0wLE09MDtNPGs7TSsrKVMrPW1bTV07Zm9yKHZhciBPPTA7TzxrO08rKyltW09dPW1bT10vUztyZXR1cm4gbX0sdDA9ZnVuY3Rpb24obSxrLFMsTSl7cmV0dXJuKDEtTSkqKDEtTSkqbSsyKigxLU0pKk0qaytNKk0qU30sWjc9ZnVuY3Rpb24obSxrLFMsTSl7cmV0dXJue3g6dDAobS54LGsueCxTLngsTSkseTp0MChtLnksay55LFMueSxNKX19LGZaPWZ1bmN0aW9uKG0sayxTLE0pe3ZhciBPPXt4OmsueC1tLngseTprLnktbS55fSxOPWg1KG0sayksJD17eDpPLngvTix5Ok8ueS9OfTtyZXR1cm4gUz1TPz8wLE09TT8/UypOLHt4Om0ueCskLngqTSx5Om0ueSskLnkqTX19LFU5PWZ1bmN0aW9uKG0sayxTKXtyZXR1cm4gTWF0aC5tYXgobSxNYXRoLm1pbihTLGspKX0sV2Q9ZnVuY3Rpb24obSl7aWYobT09bnVsbClyZXR1cm57eDE6MS8wLHkxOjEvMCx4MjotMS8wLHkyOi0xLzAsdzowLGg6MH07aWYobS54MSE9bnVsbCYmbS55MSE9bnVsbCl7aWYobS54MiE9bnVsbCYmbS55MiE9bnVsbCYmbS54Mj49bS54MSYmbS55Mj49bS55MSlyZXR1cm57eDE6bS54MSx5MTptLnkxLHgyOm0ueDIseTI6bS55Mix3Om0ueDItbS54MSxoOm0ueTItbS55MX07aWYobS53IT1udWxsJiZtLmghPW51bGwmJm0udz49MCYmbS5oPj0wKXJldHVybnt4MTptLngxLHkxOm0ueTEseDI6bS54MSttLncseTI6bS55MSttLmgsdzptLncsaDptLmh9fX0sZFo9ZnVuY3Rpb24obSl7cmV0dXJue3gxOm0ueDEseDI6bS54Mix3Om0udyx5MTptLnkxLHkyOm0ueTIsaDptLmh9fSxnWj1mdW5jdGlvbihtKXttLngxPTEvMCxtLnkxPTEvMCxtLngyPS0xLzAsbS55Mj0tMS8wLG0udz0wLG0uaD0wfSxwWj1mdW5jdGlvbihtLGssUyl7cmV0dXJue3gxOm0ueDErayx4MjptLngyK2sseTE6bS55MStTLHkyOm0ueTIrUyx3Om0udyxoOm0uaH19LGRqPWZ1bmN0aW9uKG0sayl7bS54MT1NYXRoLm1pbihtLngxLGsueDEpLG0ueDI9TWF0aC5tYXgobS54MixrLngyKSxtLnc9bS54Mi1tLngxLG0ueTE9TWF0aC5taW4obS55MSxrLnkxKSxtLnkyPU1hdGgubWF4KG0ueTIsay55MiksbS5oPW0ueTItbS55MX0sYlo9ZnVuY3Rpb24obSxrLFMpe20ueDE9TWF0aC5taW4obS54MSxrKSxtLngyPU1hdGgubWF4KG0ueDIsayksbS53PW0ueDItbS54MSxtLnkxPU1hdGgubWluKG0ueTEsUyksbS55Mj1NYXRoLm1heChtLnkyLFMpLG0uaD1tLnkyLW0ueTF9LGZTPWZ1bmN0aW9uKG0pe3ZhciBrPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowO3JldHVybiBtLngxLT1rLG0ueDIrPWssbS55MS09ayxtLnkyKz1rLG0udz1tLngyLW0ueDEsbS5oPW0ueTItbS55MSxtfSxkUz1mdW5jdGlvbihtKXt2YXIgaz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06WzBdLFMsTSxPLE47aWYoay5sZW5ndGg9PT0xKVM9TT1PPU49a1swXTtlbHNlIGlmKGsubGVuZ3RoPT09MilTPU89a1swXSxOPU09a1sxXTtlbHNlIGlmKGsubGVuZ3RoPT09NCl7dmFyICQ9eShrLDQpO1M9JFswXSxNPSRbMV0sTz0kWzJdLE49JFszXX1yZXR1cm4gbS54MS09TixtLngyKz1NLG0ueTEtPVMsbS55Mis9TyxtLnc9bS54Mi1tLngxLG0uaD1tLnkyLW0ueTEsbX0sZ2o9ZnVuY3Rpb24obSxrKXttLngxPWsueDEsbS55MT1rLnkxLG0ueDI9ay54MixtLnkyPWsueTIsbS53PW0ueDItbS54MSxtLmg9bS55Mi1tLnkxfSxzST1mdW5jdGlvbihtLGspe3JldHVybiEobS54MT5rLngyfHxrLngxPm0ueDJ8fG0ueDI8ay54MXx8ay54MjxtLngxfHxtLnkyPGsueTF8fGsueTI8bS55MXx8bS55MT5rLnkyfHxrLnkxPm0ueTIpfSxlOD1mdW5jdGlvbihtLGssUyl7cmV0dXJuIG0ueDE8PWsmJms8PW0ueDImJm0ueTE8PVMmJlM8PW0ueTJ9LG1aPWZ1bmN0aW9uKG0sayl7cmV0dXJuIGU4KG0say54LGsueSl9LHBqPWZ1bmN0aW9uKG0sayl7cmV0dXJuIGU4KG0say54MSxrLnkxKSYmZTgobSxrLngyLGsueTIpfSxiaj1mdW5jdGlvbihtLGssUyxNLE8sTiwkKXt2YXIgSD1XOShPLE4pLHE9Ty8yLFk9Ti8yLFo7e3ZhciBjZT1TLXErSC0kLHZlPU0tWS0kLG1lPVMrcS1IKyQsTGU9dmU7aWYoWj1aMyhtLGssUyxNLGNlLHZlLG1lLExlLCExKSxaLmxlbmd0aD4wKXJldHVybiBafXt2YXIgX2U9UytxKyQsRWU9TS1ZK0gtJCxCZT1fZSxSZT1NK1ktSCskO2lmKFo9WjMobSxrLFMsTSxfZSxFZSxCZSxSZSwhMSksWi5sZW5ndGg+MClyZXR1cm4gWn17dmFyIFZlPVMtcStILSQsY3Q9TStZKyQsc3Q9UytxLUgrJCxZZT1jdDtpZihaPVozKG0sayxTLE0sVmUsY3Qsc3QsWWUsITEpLFoubGVuZ3RoPjApcmV0dXJuIFp9e3ZhciBtdD1TLXEtJCxKZT1NLVkrSC0kLEx0PW10LE10PU0rWS1IKyQ7aWYoWj1aMyhtLGssUyxNLG10LEplLEx0LE10LCExKSxaLmxlbmd0aD4wKXJldHVybiBafXZhciB1dDt7dmFyIFd0PVMtcStILFR0PU0tWStIO2lmKHV0PUc5KG0sayxTLE0sV3QsVHQsSCskKSx1dC5sZW5ndGg+MCYmdXRbMF08PVd0JiZ1dFsxXTw9VHQpcmV0dXJuW3V0WzBdLHV0WzFdXX17dmFyIF9uPVMrcS1ILGhuPU0tWStIO2lmKHV0PUc5KG0sayxTLE0sX24saG4sSCskKSx1dC5sZW5ndGg+MCYmdXRbMF0+PV9uJiZ1dFsxXTw9aG4pcmV0dXJuW3V0WzBdLHV0WzFdXX17dmFyIFl0PVMrcS1ILERuPU0rWS1IO2lmKHV0PUc5KG0sayxTLE0sWXQsRG4sSCskKSx1dC5sZW5ndGg+MCYmdXRbMF0+PVl0JiZ1dFsxXT49RG4pcmV0dXJuW3V0WzBdLHV0WzFdXX17dmFyIGlyPVMtcStILHZyPU0rWS1IO2lmKHV0PUc5KG0sayxTLE0saXIsdnIsSCskKSx1dC5sZW5ndGg+MCYmdXRbMF08PWlyJiZ1dFsxXT49dnIpcmV0dXJuW3V0WzBdLHV0WzFdXX1yZXR1cm5bXX0sdlo9ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCl7dmFyIEg9JCxxPU1hdGgubWluKFMsTyksWT1NYXRoLm1heChTLE8pLFo9TWF0aC5taW4oTSxOKSxjZT1NYXRoLm1heChNLE4pO3JldHVybiBxLUg8PW0mJm08PVkrSCYmWi1IPD1rJiZrPD1jZStIfSx3Wj1mdW5jdGlvbihtLGssUyxNLE8sTiwkLEgscSl7dmFyIFk9e3gxOk1hdGgubWluKFMsJCxPKS1xLHgyOk1hdGgubWF4KFMsJCxPKStxLHkxOk1hdGgubWluKE0sSCxOKS1xLHkyOk1hdGgubWF4KE0sSCxOKStxfTtyZXR1cm4hKG08WS54MXx8bT5ZLngyfHxrPFkueTF8fGs+WS55Mil9LHlaPWZ1bmN0aW9uKG0sayxTLE0pe1MtPU07dmFyIE89ayprLTQqbSpTO2lmKE88MClyZXR1cm5bXTt2YXIgTj1NYXRoLnNxcnQoTyksJD0yKm0sSD0oLWsrTikvJCxxPSgtay1OKS8kO3JldHVybltILHFdfSx4Wj1mdW5jdGlvbihtLGssUyxNLE8pe3ZhciBOPTFlLTU7bT09PTAmJihtPU4pLGsvPW0sUy89bSxNLz1tO3ZhciAkLEgscSxZLFosY2UsdmUsbWU7aWYoSD0oMypTLWsqaykvOSxxPS0oMjcqTSkrayooOSpTLTIqKGsqaykpLHEvPTU0LCQ9SCpIKkgrcSpxLE9bMV09MCx2ZT1rLzMsJD4wKXtaPXErTWF0aC5zcXJ0KCQpLFo9WjwwPy1NYXRoLnBvdygtWiwxLzMpOk1hdGgucG93KFosMS8zKSxjZT1xLU1hdGguc3FydCgkKSxjZT1jZTwwPy1NYXRoLnBvdygtY2UsMS8zKTpNYXRoLnBvdyhjZSwxLzMpLE9bMF09LXZlK1orY2UsdmUrPShaK2NlKS8yLE9bNF09T1syXT0tdmUsdmU9TWF0aC5zcXJ0KDMpKigtY2UrWikvMixPWzNdPXZlLE9bNV09LXZlO3JldHVybn1pZihPWzVdPU9bM109MCwkPT09MCl7bWU9cTwwPy1NYXRoLnBvdygtcSwxLzMpOk1hdGgucG93KHEsMS8zKSxPWzBdPS12ZSsyKm1lLE9bNF09T1syXT0tKG1lK3ZlKTtyZXR1cm59SD0tSCxZPUgqSCpILFk9TWF0aC5hY29zKHEvTWF0aC5zcXJ0KFkpKSxtZT0yKk1hdGguc3FydChIKSxPWzBdPS12ZSttZSpNYXRoLmNvcyhZLzMpLE9bMl09LXZlK21lKk1hdGguY29zKChZKzIqTWF0aC5QSSkvMyksT1s0XT0tdmUrbWUqTWF0aC5jb3MoKFkrNCpNYXRoLlBJKS8zKX0sa1o9ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCxIKXt2YXIgcT0xKlMqUy00KlMqTysyKlMqJCs0Kk8qTy00Kk8qJCskKiQrTSpNLTQqTSpOKzIqTSpIKzQqTipOLTQqTipIK0gqSCxZPTEqOSpTKk8tMypTKlMtMypTKiQtNipPKk8rMypPKiQrOSpNKk4tMypNKk0tMypNKkgtNipOKk4rMypOKkgsWj0xKjMqUypTLTYqUypPK1MqJC1TKm0rMipPKk8rMipPKm0tJCptKzMqTSpNLTYqTSpOK00qSC1NKmsrMipOKk4rMipOKmstSCprLGNlPTEqUypPLVMqUytTKm0tTyptK00qTi1NKk0rTSprLU4qayx2ZT1bXTt4WihxLFksWixjZSx2ZSk7Zm9yKHZhciBtZT0xZS03LExlPVtdLF9lPTA7X2U8NjtfZSs9MilNYXRoLmFicyh2ZVtfZSsxXSk8bWUmJnZlW19lXT49MCYmdmVbX2VdPD0xJiZMZS5wdXNoKHZlW19lXSk7TGUucHVzaCgxKSxMZS5wdXNoKDApO2Zvcih2YXIgRWU9LTEsQmUsUmUsVmUsY3Q9MDtjdDxMZS5sZW5ndGg7Y3QrKylCZT1NYXRoLnBvdygxLUxlW2N0XSwyKSpTKzIqKDEtTGVbY3RdKSpMZVtjdF0qTytMZVtjdF0qTGVbY3RdKiQsUmU9TWF0aC5wb3coMS1MZVtjdF0sMikqTSsyKigxLUxlW2N0XSkqTGVbY3RdKk4rTGVbY3RdKkxlW2N0XSpILFZlPU1hdGgucG93KEJlLW0sMikrTWF0aC5wb3coUmUtaywyKSxFZT49MD9WZTxFZSYmKEVlPVZlKTpFZT1WZTtyZXR1cm4gRWV9LEVaPWZ1bmN0aW9uKG0sayxTLE0sTyxOKXt2YXIgJD1bbS1TLGstTV0sSD1bTy1TLE4tTV0scT1IWzBdKkhbMF0rSFsxXSpIWzFdLFk9JFswXSokWzBdKyRbMV0qJFsxXSxaPSRbMF0qSFswXSskWzFdKkhbMV0sY2U9WipaL3E7cmV0dXJuIFo8MD9ZOmNlPnE/KG0tTykqKG0tTykrKGstTikqKGstTik6WS1jZX0sWWQ9ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTSxPLE4sJCxILHE9MCxZPTA7WTxTLmxlbmd0aC8yO1krKylpZihNPVNbWSoyXSxPPVNbWSoyKzFdLFkrMTxTLmxlbmd0aC8yPyhOPVNbKFkrMSkqMl0sJD1TWyhZKzEpKjIrMV0pOihOPVNbKFkrMS1TLmxlbmd0aC8yKSoyXSwkPVNbKFkrMS1TLmxlbmd0aC8yKSoyKzFdKSwhKE09PW0mJk49PW0pKWlmKE0+PW0mJm0+PU58fE08PW0mJm08PU4pSD0obS1NKS8oTi1NKSooJC1PKStPLEg+ayYmcSsrO2Vsc2UgY29udGludWU7cmV0dXJuIHElMiE9PTB9LFV2PWZ1bmN0aW9uKG0sayxTLE0sTyxOLCQsSCxxKXt2YXIgWT1uZXcgQXJyYXkoUy5sZW5ndGgpLFo7SFswXSE9bnVsbD8oWj1NYXRoLmF0YW4oSFsxXS9IWzBdKSxIWzBdPDA/Wj1aK01hdGguUEkvMjpaPS1aLU1hdGguUEkvMik6Wj1IO2Zvcih2YXIgY2U9TWF0aC5jb3MoLVopLHZlPU1hdGguc2luKC1aKSxtZT0wO21lPFkubGVuZ3RoLzI7bWUrKylZW21lKjJdPU4vMiooU1ttZSoyXSpjZS1TW21lKjIrMV0qdmUpLFlbbWUqMisxXT0kLzIqKFNbbWUqMisxXSpjZStTW21lKjJdKnZlKSxZW21lKjJdKz1NLFlbbWUqMisxXSs9Tzt2YXIgTGU7aWYocT4wKXt2YXIgX2U9cFMoWSwtcSk7TGU9Z1MoX2UpfWVsc2UgTGU9WTtyZXR1cm4gWWQobSxrLExlKX0sVFo9ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCl7Zm9yKHZhciBIPW5ldyBBcnJheShTLmxlbmd0aCkscT1OLzIsWT0kLzIsWj1jSShOLCQpLGNlPVoqWix2ZT0wO3ZlPFMubGVuZ3RoLzQ7dmUrKyl7dmFyIG1lPXZvaWQgMCxMZT12b2lkIDA7dmU9PT0wP21lPVMubGVuZ3RoLTI6bWU9dmUqNC0yLExlPXZlKjQrMjt2YXIgX2U9TStxKlNbdmUqNF0sRWU9TytZKlNbdmUqNCsxXSxCZT0tU1ttZV0qU1tMZV0tU1ttZSsxXSpTW0xlKzFdLFJlPVovTWF0aC50YW4oTWF0aC5hY29zKEJlKS8yKSxWZT1fZS1SZSpTW21lXSxjdD1FZS1SZSpTW21lKzFdLHN0PV9lK1JlKlNbTGVdLFllPUVlK1JlKlNbTGUrMV07SFt2ZSo0XT1WZSxIW3ZlKjQrMV09Y3QsSFt2ZSo0KzJdPXN0LEhbdmUqNCszXT1ZZTt2YXIgbXQ9U1ttZSsxXSxKZT0tU1ttZV0sTHQ9bXQqU1tMZV0rSmUqU1tMZSsxXTtMdDwwJiYobXQqPS0xLEplKj0tMSk7dmFyIE10PVZlK210KlosdXQ9Y3QrSmUqWixXdD1NYXRoLnBvdyhNdC1tLDIpK01hdGgucG93KHV0LWssMik7aWYoV3Q8PWNlKXJldHVybiEwfXJldHVybiBZZChtLGssSCl9LGdTPWZ1bmN0aW9uKG0pe2Zvcih2YXIgaz1uZXcgQXJyYXkobS5sZW5ndGgvMiksUyxNLE8sTiwkLEgscSxZLFo9MDtaPG0ubGVuZ3RoLzQ7WisrKXtTPW1bWio0XSxNPW1bWio0KzFdLE89bVtaKjQrMl0sTj1tW1oqNCszXSxaPG0ubGVuZ3RoLzQtMT8oJD1tWyhaKzEpKjRdLEg9bVsoWisxKSo0KzFdLHE9bVsoWisxKSo0KzJdLFk9bVsoWisxKSo0KzNdKTooJD1tWzBdLEg9bVsxXSxxPW1bMl0sWT1tWzNdKTt2YXIgY2U9WjMoUyxNLE8sTiwkLEgscSxZLCEwKTtrW1oqMl09Y2VbMF0sa1taKjIrMV09Y2VbMV19cmV0dXJuIGt9LHBTPWZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPW5ldyBBcnJheShtLmxlbmd0aCoyKSxNLE8sTiwkLEg9MDtIPG0ubGVuZ3RoLzI7SCsrKXtNPW1bSCoyXSxPPW1bSCoyKzFdLEg8bS5sZW5ndGgvMi0xPyhOPW1bKEgrMSkqMl0sJD1tWyhIKzEpKjIrMV0pOihOPW1bMF0sJD1tWzFdKTt2YXIgcT0kLU8sWT0tKE4tTSksWj1NYXRoLnNxcnQocSpxK1kqWSksY2U9cS9aLHZlPVkvWjtTW0gqNF09TStjZSprLFNbSCo0KzFdPU8rdmUqayxTW0gqNCsyXT1OK2NlKmssU1tIKjQrM109JCt2ZSprfXJldHVybiBTfSxDWj1mdW5jdGlvbihtLGssUyxNLE8sTil7dmFyICQ9Uy1tLEg9TS1rOyQvPU8sSC89Tjt2YXIgcT1NYXRoLnNxcnQoJCokK0gqSCksWT1xLTE7aWYoWTwwKXJldHVybltdO3ZhciBaPVkvcTtyZXR1cm5bKFMtbSkqWittLChNLWspKlora119LGQ1PWZ1bmN0aW9uKG0sayxTLE0sTyxOLCQpe3JldHVybiBtLT1PLGstPU4sbS89Uy8yKyQsay89TS8yKyQsbSptK2sqazw9MX0sRzk9ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCl7dmFyIEg9W1MtbSxNLWtdLHE9W20tTyxrLU5dLFk9SFswXSpIWzBdK0hbMV0qSFsxXSxaPTIqKHFbMF0qSFswXStxWzFdKkhbMV0pLGNlPXFbMF0qcVswXStxWzFdKnFbMV0tJCokLHZlPVoqWi00KlkqY2U7aWYodmU8MClyZXR1cm5bXTt2YXIgbWU9KC1aK01hdGguc3FydCh2ZSkpLygyKlkpLExlPSgtWi1NYXRoLnNxcnQodmUpKS8oMipZKSxfZT1NYXRoLm1pbihtZSxMZSksRWU9TWF0aC5tYXgobWUsTGUpLEJlPVtdO2lmKF9lPj0wJiZfZTw9MSYmQmUucHVzaChfZSksRWU+PTAmJkVlPD0xJiZCZS5wdXNoKEVlKSxCZS5sZW5ndGg9PT0wKXJldHVybltdO3ZhciBSZT1CZVswXSpIWzBdK20sVmU9QmVbMF0qSFsxXStrO2lmKEJlLmxlbmd0aD4xKXtpZihCZVswXT09QmVbMV0pcmV0dXJuW1JlLFZlXTt2YXIgY3Q9QmVbMV0qSFswXSttLHN0PUJlWzFdKkhbMV0raztyZXR1cm5bUmUsVmUsY3Qsc3RdfWVsc2UgcmV0dXJuW1JlLFZlXX0sYUk9ZnVuY3Rpb24obSxrLFMpe3JldHVybiBrPD1tJiZtPD1TfHxTPD1tJiZtPD1rP206bTw9ayYmazw9U3x8Uzw9ayYmazw9bT9rOlN9LFozPWZ1bmN0aW9uKG0sayxTLE0sTyxOLCQsSCxxKXt2YXIgWT1tLU8sWj1TLW0sY2U9JC1PLHZlPWstTixtZT1NLWssTGU9SC1OLF9lPWNlKnZlLUxlKlksRWU9Wip2ZS1tZSpZLEJlPUxlKlotY2UqbWU7aWYoQmUhPT0wKXt2YXIgUmU9X2UvQmUsVmU9RWUvQmUsY3Q9LjAwMSxzdD0wLWN0LFllPTErY3Q7cmV0dXJuIHN0PD1SZSYmUmU8PVllJiZzdDw9VmUmJlZlPD1ZZT9bbStSZSpaLGsrUmUqbWVdOnE/W20rUmUqWixrK1JlKm1lXTpbXX1lbHNlIHJldHVybiBfZT09PTB8fEVlPT09MD9hSShtLFMsJCk9PT0kP1skLEhdOmFJKG0sUyxPKT09PU8/W08sTl06YUkoTywkLFMpPT09Uz9bUyxNXTpbXTpbXX0sSzk9ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCxIKXt2YXIgcT1bXSxZLFo9bmV3IEFycmF5KFMubGVuZ3RoKSxjZT0hMDtOPT1udWxsJiYoY2U9ITEpO3ZhciB2ZTtpZihjZSl7Zm9yKHZhciBtZT0wO21lPFoubGVuZ3RoLzI7bWUrKylaW21lKjJdPVNbbWUqMl0qTitNLFpbbWUqMisxXT1TW21lKjIrMV0qJCtPO2lmKEg+MCl7dmFyIExlPXBTKFosLUgpO3ZlPWdTKExlKX1lbHNlIHZlPVp9ZWxzZSB2ZT1TO2Zvcih2YXIgX2UsRWUsQmUsUmUsVmU9MDtWZTx2ZS5sZW5ndGgvMjtWZSsrKV9lPXZlW1ZlKjJdLEVlPXZlW1ZlKjIrMV0sVmU8dmUubGVuZ3RoLzItMT8oQmU9dmVbKFZlKzEpKjJdLFJlPXZlWyhWZSsxKSoyKzFdKTooQmU9dmVbMF0sUmU9dmVbMV0pLFk9WjMobSxrLE0sTyxfZSxFZSxCZSxSZSksWS5sZW5ndGghPT0wJiZxLnB1c2goWVswXSxZWzFdKTtyZXR1cm4gcX0sU1o9ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCxIKXtmb3IodmFyIHE9W10sWSxaPW5ldyBBcnJheShTLmxlbmd0aCksY2U9Ti8yLHZlPSQvMixtZT1jSShOLCQpLExlPTA7TGU8Uy5sZW5ndGgvNDtMZSsrKXt2YXIgX2U9dm9pZCAwLEVlPXZvaWQgMDtMZT09PTA/X2U9Uy5sZW5ndGgtMjpfZT1MZSo0LTIsRWU9TGUqNCsyO3ZhciBCZT1NK2NlKlNbTGUqNF0sUmU9Tyt2ZSpTW0xlKjQrMV0sVmU9LVNbX2VdKlNbRWVdLVNbX2UrMV0qU1tFZSsxXSxjdD1tZS9NYXRoLnRhbihNYXRoLmFjb3MoVmUpLzIpLHN0PUJlLWN0KlNbX2VdLFllPVJlLWN0KlNbX2UrMV0sbXQ9QmUrY3QqU1tFZV0sSmU9UmUrY3QqU1tFZSsxXTtMZT09PTA/KFpbUy5sZW5ndGgtMl09c3QsWltTLmxlbmd0aC0xXT1ZZSk6KFpbTGUqNC0yXT1zdCxaW0xlKjQtMV09WWUpLFpbTGUqNF09bXQsWltMZSo0KzFdPUplO3ZhciBMdD1TW19lKzFdLE10PS1TW19lXSx1dD1MdCpTW0VlXStNdCpTW0VlKzFdO3V0PDAmJihMdCo9LTEsTXQqPS0xKTt2YXIgV3Q9c3QrTHQqbWUsVHQ9WWUrTXQqbWU7WT1HOShtLGssTSxPLFd0LFR0LG1lKSxZLmxlbmd0aCE9PTAmJnEucHVzaChZWzBdLFlbMV0pfWZvcih2YXIgX249MDtfbjxaLmxlbmd0aC80O19uKyspWT1aMyhtLGssTSxPLFpbX24qNF0sWltfbio0KzFdLFpbX24qNCsyXSxaW19uKjQrM10sITEpLFkubGVuZ3RoIT09MCYmcS5wdXNoKFlbMF0sWVsxXSk7aWYocS5sZW5ndGg+Mil7Zm9yKHZhciBobj1bcVswXSxxWzFdXSxZdD1NYXRoLnBvdyhoblswXS1tLDIpK01hdGgucG93KGhuWzFdLWssMiksRG49MTtEbjxxLmxlbmd0aC8yO0RuKyspe3ZhciBpcj1NYXRoLnBvdyhxW0RuKjJdLW0sMikrTWF0aC5wb3cocVtEbioyKzFdLWssMik7aXI8PVl0JiYoaG5bMF09cVtEbioyXSxoblsxXT1xW0RuKjIrMV0sWXQ9aXIpfXJldHVybiBobn1yZXR1cm4gcX0sYlM9ZnVuY3Rpb24obSxrLFMpe3ZhciBNPVttWzBdLWtbMF0sbVsxXS1rWzFdXSxPPU1hdGguc3FydChNWzBdKk1bMF0rTVsxXSpNWzFdKSxOPShPLVMpL087cmV0dXJuIE48MCYmKE49MWUtNSksW2tbMF0rTipNWzBdLGtbMV0rTipNWzFdXX0saGQ9ZnVuY3Rpb24obSxrKXt2YXIgUz1vSShtLGspO3JldHVybiBTPW1qKFMpLFN9LG1qPWZ1bmN0aW9uKG0pe2Zvcih2YXIgayxTLE09bS5sZW5ndGgvMixPPTEvMCxOPTEvMCwkPS0xLzAsSD0tMS8wLHE9MDtxPE07cSsrKWs9bVsyKnFdLFM9bVsyKnErMV0sTz1NYXRoLm1pbihPLGspLCQ9TWF0aC5tYXgoJCxrKSxOPU1hdGgubWluKE4sUyksSD1NYXRoLm1heChILFMpO2Zvcih2YXIgWT0yLygkLU8pLFo9Mi8oSC1OKSxjZT0wO2NlPE07Y2UrKylrPW1bMipjZV09bVsyKmNlXSpZLFM9bVsyKmNlKzFdPW1bMipjZSsxXSpaLE89TWF0aC5taW4oTyxrKSwkPU1hdGgubWF4KCQsayksTj1NYXRoLm1pbihOLFMpLEg9TWF0aC5tYXgoSCxTKTtpZihOPC0xKWZvcih2YXIgdmU9MDt2ZTxNO3ZlKyspUz1tWzIqdmUrMV09bVsyKnZlKzFdKygtMS1OKTtyZXR1cm4gbX0sb0k9ZnVuY3Rpb24obSxrKXt2YXIgUz0xL20qMipNYXRoLlBJLE09bSUyPT09MD9NYXRoLlBJLzIrUy8yOk1hdGguUEkvMjtNKz1rO2Zvcih2YXIgTz1uZXcgQXJyYXkobSoyKSxOLCQ9MDskPG07JCsrKU49JCpTK00sT1syKiRdPU1hdGguY29zKE4pLE9bMiokKzFdPU1hdGguc2luKC1OKTtyZXR1cm4gT30sVzk9ZnVuY3Rpb24obSxrKXtyZXR1cm4gTWF0aC5taW4obS80LGsvNCw4KX0sY0k9ZnVuY3Rpb24obSxrKXtyZXR1cm4gTWF0aC5taW4obS8xMCxrLzEwLDgpfSx2aj1mdW5jdGlvbigpe3JldHVybiA4fSxfWj1mdW5jdGlvbihtLGssUyl7cmV0dXJuW20tMiprK1MsMiooay1tKSxtXX0sdUk9ZnVuY3Rpb24obSxrKXtyZXR1cm57aGVpZ2h0T2Zmc2V0Ok1hdGgubWluKDE1LC4wNSprKSx3aWR0aE9mZnNldDpNYXRoLm1pbigxMDAsLjI1Km0pLGN0cmxQdE9mZnNldFBjdDouMDV9fSxBWj1xMCh7ZGFtcGluZ0ZhY3RvcjouOCxwcmVjaXNpb246MWUtNixpdGVyYXRpb25zOjIwMCx3ZWlnaHQ6ZnVuY3Rpb24obSl7cmV0dXJuIDF9fSksTFo9e3BhZ2VSYW5rOmZ1bmN0aW9uKG0pe2Zvcih2YXIgaz1BWihtKSxTPWsuZGFtcGluZ0ZhY3RvcixNPWsucHJlY2lzaW9uLE89ay5pdGVyYXRpb25zLE49ay53ZWlnaHQsJD10aGlzLl9wcml2YXRlLmN5LEg9dGhpcy5ieUdyb3VwKCkscT1ILm5vZGVzLFk9SC5lZGdlcyxaPXEubGVuZ3RoLGNlPVoqWix2ZT1ZLmxlbmd0aCxtZT1uZXcgQXJyYXkoY2UpLExlPW5ldyBBcnJheShaKSxfZT0oMS1TKS9aLEVlPTA7RWU8WjtFZSsrKXtmb3IodmFyIEJlPTA7QmU8WjtCZSsrKXt2YXIgUmU9RWUqWitCZTttZVtSZV09MH1MZVtFZV09MH1mb3IodmFyIFZlPTA7VmU8dmU7VmUrKyl7dmFyIGN0PVlbVmVdLHN0PWN0LmRhdGEoInNvdXJjZSIpLFllPWN0LmRhdGEoInRhcmdldCIpO2lmKHN0IT09WWUpe3ZhciBtdD1xLmluZGV4T2ZJZChzdCksSmU9cS5pbmRleE9mSWQoWWUpLEx0PU4oY3QpLE10PUplKlorbXQ7bWVbTXRdKz1MdCxMZVttdF0rPUx0fX1mb3IodmFyIHV0PTEvWitfZSxXdD0wO1d0PFo7V3QrKylpZihMZVtXdF09PT0wKWZvcih2YXIgVHQ9MDtUdDxaO1R0Kyspe3ZhciBfbj1UdCpaK1d0O21lW19uXT11dH1lbHNlIGZvcih2YXIgaG49MDtobjxaO2huKyspe3ZhciBZdD1obipaK1d0O21lW1l0XT1tZVtZdF0vTGVbV3RdK19lfWZvcih2YXIgRG49bmV3IEFycmF5KFopLGlyPW5ldyBBcnJheShaKSx2cixObj0wO05uPFo7Tm4rKylEbltObl09MTtmb3IodmFyIHByPTA7cHI8TztwcisrKXtmb3IodmFyIEVyPTA7RXI8WjtFcisrKWlyW0VyXT0wO2Zvcih2YXIgTXI9MDtNcjxaO01yKyspZm9yKHZhciBDcj0wO0NyPFo7Q3IrKyl7dmFyIE9yPU1yKlorQ3I7aXJbTXJdKz1tZVtPcl0qRG5bQ3JdfWhaKGlyKSx2cj1EbixEbj1pcixpcj12cjtmb3IodmFyIFduPTAsYnI9MDticjxaO2JyKyspe3ZhciBTcj12clticl0tRG5bYnJdO1duKz1TcipTcn1pZihXbjxNKWJyZWFrfXZhciBOcj17cmFuazpmdW5jdGlvbih5cyl7cmV0dXJuIHlzPSQuY29sbGVjdGlvbih5cylbMF0sRG5bcS5pbmRleE9mKHlzKV19fTtyZXR1cm4gTnJ9fSx3aj1xMCh7cm9vdDpudWxsLHdlaWdodDpmdW5jdGlvbihtKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITEsYWxwaGE6MH0pLHQ4PXtkZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXplZDpmdW5jdGlvbihtKXttPXdqKG0pO3ZhciBrPXRoaXMuY3koKSxTPXRoaXMubm9kZXMoKSxNPVMubGVuZ3RoO2lmKG0uZGlyZWN0ZWQpe2Zvcih2YXIgWT17fSxaPXt9LGNlPTAsdmU9MCxtZT0wO21lPE07bWUrKyl7dmFyIExlPVNbbWVdLF9lPUxlLmlkKCk7bS5yb290PUxlO3ZhciBFZT10aGlzLmRlZ3JlZUNlbnRyYWxpdHkobSk7Y2U8RWUuaW5kZWdyZWUmJihjZT1FZS5pbmRlZ3JlZSksdmU8RWUub3V0ZGVncmVlJiYodmU9RWUub3V0ZGVncmVlKSxZW19lXT1FZS5pbmRlZ3JlZSxaW19lXT1FZS5vdXRkZWdyZWV9cmV0dXJue2luZGVncmVlOmZ1bmN0aW9uKFJlKXtyZXR1cm4gY2U9PTA/MDooYmUoUmUpJiYoUmU9ay5maWx0ZXIoUmUpKSxZW1JlLmlkKCldL2NlKX0sb3V0ZGVncmVlOmZ1bmN0aW9uKFJlKXtyZXR1cm4gdmU9PT0wPzA6KGJlKFJlKSYmKFJlPWsuZmlsdGVyKFJlKSksWltSZS5pZCgpXS92ZSl9fX1lbHNle2Zvcih2YXIgTz17fSxOPTAsJD0wOyQ8TTskKyspe3ZhciBIPVNbJF07bS5yb290PUg7dmFyIHE9dGhpcy5kZWdyZWVDZW50cmFsaXR5KG0pO048cS5kZWdyZWUmJihOPXEuZGVncmVlKSxPW0guaWQoKV09cS5kZWdyZWV9cmV0dXJue2RlZ3JlZTpmdW5jdGlvbihSZSl7cmV0dXJuIE49PT0wPzA6KGJlKFJlKSYmKFJlPWsuZmlsdGVyKFJlKSksT1tSZS5pZCgpXS9OKX19fX0sZGVncmVlQ2VudHJhbGl0eTpmdW5jdGlvbihtKXttPXdqKG0pO3ZhciBrPXRoaXMuY3koKSxTPXRoaXMsTT1tLE89TS5yb290LE49TS53ZWlnaHQsJD1NLmRpcmVjdGVkLEg9TS5hbHBoYTtpZihPPWsuY29sbGVjdGlvbihPKVswXSwkKXtmb3IodmFyIHZlPU8uY29ubmVjdGVkRWRnZXMoKSxtZT12ZS5maWx0ZXIoZnVuY3Rpb24oc3Qpe3JldHVybiBzdC50YXJnZXQoKS5zYW1lKE8pJiZTLmhhcyhzdCl9KSxMZT12ZS5maWx0ZXIoZnVuY3Rpb24oc3Qpe3JldHVybiBzdC5zb3VyY2UoKS5zYW1lKE8pJiZTLmhhcyhzdCl9KSxfZT1tZS5sZW5ndGgsRWU9TGUubGVuZ3RoLEJlPTAsUmU9MCxWZT0wO1ZlPG1lLmxlbmd0aDtWZSsrKUJlKz1OKG1lW1ZlXSk7Zm9yKHZhciBjdD0wO2N0PExlLmxlbmd0aDtjdCsrKVJlKz1OKExlW2N0XSk7cmV0dXJue2luZGVncmVlOk1hdGgucG93KF9lLDEtSCkqTWF0aC5wb3coQmUsSCksb3V0ZGVncmVlOk1hdGgucG93KEVlLDEtSCkqTWF0aC5wb3coUmUsSCl9fWVsc2V7Zm9yKHZhciBxPU8uY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oUyksWT1xLmxlbmd0aCxaPTAsY2U9MDtjZTxxLmxlbmd0aDtjZSsrKVorPU4ocVtjZV0pO3JldHVybntkZWdyZWU6TWF0aC5wb3coWSwxLUgpKk1hdGgucG93KFosSCl9fX19O3Q4LmRjPXQ4LmRlZ3JlZUNlbnRyYWxpdHksdDguZGNuPXQ4LmRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpc2VkPXQ4LmRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpemVkO3ZhciB5aj1xMCh7aGFybW9uaWM6ITAsd2VpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIDF9LGRpcmVjdGVkOiExLHJvb3Q6bnVsbH0pLG44PXtjbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDpmdW5jdGlvbihtKXtmb3IodmFyIGs9eWoobSksUz1rLmhhcm1vbmljLE09ay53ZWlnaHQsTz1rLmRpcmVjdGVkLE49dGhpcy5jeSgpLCQ9e30sSD0wLHE9dGhpcy5ub2RlcygpLFk9dGhpcy5mbG95ZFdhcnNoYWxsKHt3ZWlnaHQ6TSxkaXJlY3RlZDpPfSksWj0wO1o8cS5sZW5ndGg7WisrKXtmb3IodmFyIGNlPTAsdmU9cVtaXSxtZT0wO21lPHEubGVuZ3RoO21lKyspaWYoWiE9PW1lKXt2YXIgTGU9WS5kaXN0YW5jZSh2ZSxxW21lXSk7Uz9jZSs9MS9MZTpjZSs9TGV9U3x8KGNlPTEvY2UpLEg8Y2UmJihIPWNlKSwkW3ZlLmlkKCldPWNlfXJldHVybntjbG9zZW5lc3M6ZnVuY3Rpb24oRWUpe3JldHVybiBIPT0wPzA6KGJlKEVlKT9FZT1OLmZpbHRlcihFZSlbMF0uaWQoKTpFZT1FZS5pZCgpLCRbRWVdL0gpfX19LGNsb3NlbmVzc0NlbnRyYWxpdHk6ZnVuY3Rpb24obSl7dmFyIGs9eWoobSksUz1rLnJvb3QsTT1rLndlaWdodCxPPWsuZGlyZWN0ZWQsTj1rLmhhcm1vbmljO1M9dGhpcy5maWx0ZXIoUylbMF07Zm9yKHZhciAkPXRoaXMuZGlqa3N0cmEoe3Jvb3Q6Uyx3ZWlnaHQ6TSxkaXJlY3RlZDpPfSksSD0wLHE9dGhpcy5ub2RlcygpLFk9MDtZPHEubGVuZ3RoO1krKyl7dmFyIFo9cVtZXTtpZighWi5zYW1lKFMpKXt2YXIgY2U9JC5kaXN0YW5jZVRvKFopO04/SCs9MS9jZTpIKz1jZX19cmV0dXJuIE4/SDoxL0h9fTtuOC5jYz1uOC5jbG9zZW5lc3NDZW50cmFsaXR5LG44LmNjbj1uOC5jbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXNlZD1uOC5jbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDt2YXIgTVo9cTAoe3dlaWdodDpudWxsLGRpcmVjdGVkOiExfSksbEk9e2JldHdlZW5uZXNzQ2VudHJhbGl0eTpmdW5jdGlvbihtKXtmb3IodmFyIGs9TVoobSksUz1rLmRpcmVjdGVkLE09ay53ZWlnaHQsTz1NIT1udWxsLE49dGhpcy5jeSgpLCQ9dGhpcy5ub2RlcygpLEg9e30scT17fSxZPTAsWj17c2V0OmZ1bmN0aW9uKFJlLFZlKXtxW1JlXT1WZSxWZT5ZJiYoWT1WZSl9LGdldDpmdW5jdGlvbihSZSl7cmV0dXJuIHFbUmVdfX0sY2U9MDtjZTwkLmxlbmd0aDtjZSsrKXt2YXIgdmU9JFtjZV0sbWU9dmUuaWQoKTtTP0hbbWVdPXZlLm91dGdvZXJzKCkubm9kZXMoKTpIW21lXT12ZS5vcGVuTmVpZ2hib3Job29kKCkubm9kZXMoKSxaLnNldChtZSwwKX1mb3IodmFyIExlPWZ1bmN0aW9uKFJlKXtmb3IodmFyIFZlPSRbUmVdLmlkKCksY3Q9W10sc3Q9e30sWWU9e30sbXQ9e30sSmU9bmV3IFY5KGZ1bmN0aW9uKENyLE9yKXtyZXR1cm4gbXRbQ3JdLW10W09yXX0pLEx0PTA7THQ8JC5sZW5ndGg7THQrKyl7dmFyIE10PSRbTHRdLmlkKCk7c3RbTXRdPVtdLFllW010XT0wLG10W010XT0xLzB9Zm9yKFllW1ZlXT0xLG10W1ZlXT0wLEplLnB1c2goVmUpOyFKZS5lbXB0eSgpOyl7dmFyIHV0PUplLnBvcCgpO2lmKGN0LnB1c2godXQpLE8pZm9yKHZhciBXdD0wO1d0PEhbdXRdLmxlbmd0aDtXdCsrKXt2YXIgVHQ9SFt1dF1bV3RdLF9uPU4uZ2V0RWxlbWVudEJ5SWQodXQpLGhuPXZvaWQgMDtfbi5lZGdlc1RvKFR0KS5sZW5ndGg+MD9obj1fbi5lZGdlc1RvKFR0KVswXTpobj1UdC5lZGdlc1RvKF9uKVswXTt2YXIgWXQ9TShobik7VHQ9VHQuaWQoKSxtdFtUdF0+bXRbdXRdK1l0JiYobXRbVHRdPW10W3V0XStZdCxKZS5ub2Rlcy5pbmRleE9mKFR0KTwwP0plLnB1c2goVHQpOkplLnVwZGF0ZUl0ZW0oVHQpLFllW1R0XT0wLHN0W1R0XT1bXSksbXRbVHRdPT1tdFt1dF0rWXQmJihZZVtUdF09WWVbVHRdK1llW3V0XSxzdFtUdF0ucHVzaCh1dCkpfWVsc2UgZm9yKHZhciBEbj0wO0RuPEhbdXRdLmxlbmd0aDtEbisrKXt2YXIgaXI9SFt1dF1bRG5dLmlkKCk7bXRbaXJdPT0xLzAmJihKZS5wdXNoKGlyKSxtdFtpcl09bXRbdXRdKzEpLG10W2lyXT09bXRbdXRdKzEmJihZZVtpcl09WWVbaXJdK1llW3V0XSxzdFtpcl0ucHVzaCh1dCkpfX1mb3IodmFyIHZyPXt9LE5uPTA7Tm48JC5sZW5ndGg7Tm4rKyl2clskW05uXS5pZCgpXT0wO2Zvcig7Y3QubGVuZ3RoPjA7KXtmb3IodmFyIHByPWN0LnBvcCgpLEVyPTA7RXI8c3RbcHJdLmxlbmd0aDtFcisrKXt2YXIgTXI9c3RbcHJdW0VyXTt2cltNcl09dnJbTXJdK1llW01yXS9ZZVtwcl0qKDErdnJbcHJdKX1wciE9JFtSZV0uaWQoKSYmWi5zZXQocHIsWi5nZXQocHIpK3ZyW3ByXSl9fSxfZT0wO19lPCQubGVuZ3RoO19lKyspTGUoX2UpO3ZhciBFZT17YmV0d2Vlbm5lc3M6ZnVuY3Rpb24oUmUpe3ZhciBWZT1OLmNvbGxlY3Rpb24oUmUpLmlkKCk7cmV0dXJuIFouZ2V0KFZlKX0sYmV0d2Vlbm5lc3NOb3JtYWxpemVkOmZ1bmN0aW9uKFJlKXtpZihZPT0wKXJldHVybiAwO3ZhciBWZT1OLmNvbGxlY3Rpb24oUmUpLmlkKCk7cmV0dXJuIFouZ2V0KFZlKS9ZfX07cmV0dXJuIEVlLmJldHdlZW5uZXNzTm9ybWFsaXNlZD1FZS5iZXR3ZWVubmVzc05vcm1hbGl6ZWQsRWV9fTtsSS5iYz1sSS5iZXR3ZWVubmVzc0NlbnRyYWxpdHk7dmFyIERaPXEwKHtleHBhbmRGYWN0b3I6MixpbmZsYXRlRmFjdG9yOjIsbXVsdEZhY3RvcjoxLG1heEl0ZXJhdGlvbnM6MjAsYXR0cmlidXRlczpbZnVuY3Rpb24oeCl7cmV0dXJuIDF9XX0pLElaPWZ1bmN0aW9uKG0pe3JldHVybiBEWihtKX0sT1o9ZnVuY3Rpb24obSxrKXtmb3IodmFyIFM9MCxNPTA7TTxrLmxlbmd0aDtNKyspUys9a1tNXShtKTtyZXR1cm4gU30sTlo9ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT0wO008aztNKyspbVtNKmsrTV09U30seGo9ZnVuY3Rpb24obSxrKXtmb3IodmFyIFMsTT0wO008aztNKyspe1M9MDtmb3IodmFyIE89MDtPPGs7TysrKVMrPW1bTyprK01dO2Zvcih2YXIgTj0wO048aztOKyspbVtOKmsrTV09bVtOKmsrTV0vU319LFBaPWZ1bmN0aW9uKG0sayxTKXtmb3IodmFyIE09bmV3IEFycmF5KFMqUyksTz0wO088UztPKyspe2Zvcih2YXIgTj0wO048UztOKyspTVtPKlMrTl09MDtmb3IodmFyICQ9MDskPFM7JCsrKWZvcih2YXIgSD0wO0g8UztIKyspTVtPKlMrSF0rPW1bTypTKyRdKmtbJCpTK0hdfXJldHVybiBNfSxCWj1mdW5jdGlvbihtLGssUyl7Zm9yKHZhciBNPW0uc2xpY2UoMCksTz0xO088UztPKyspbT1QWihtLE0sayk7cmV0dXJuIG19LGtqPWZ1bmN0aW9uKG0sayxTKXtmb3IodmFyIE09bmV3IEFycmF5KGsqayksTz0wO088ayprO08rKylNW09dPU1hdGgucG93KG1bT10sUyk7cmV0dXJuIHhqKE0sayksTX0sRlo9ZnVuY3Rpb24obSxrLFMsTSl7Zm9yKHZhciBPPTA7TzxTO08rKyl7dmFyIE49TWF0aC5yb3VuZChtW09dKk1hdGgucG93KDEwLE0pKS9NYXRoLnBvdygxMCxNKSwkPU1hdGgucm91bmQoa1tPXSpNYXRoLnBvdygxMCxNKSkvTWF0aC5wb3coMTAsTSk7aWYoTiE9PSQpcmV0dXJuITF9cmV0dXJuITB9LFJaPWZ1bmN0aW9uKG0sayxTLE0pe2Zvcih2YXIgTz1bXSxOPTA7TjxrO04rKyl7Zm9yKHZhciAkPVtdLEg9MDtIPGs7SCsrKU1hdGgucm91bmQobVtOKmsrSF0qMWUzKS8xZTM+MCYmJC5wdXNoKFNbSF0pOyQubGVuZ3RoIT09MCYmTy5wdXNoKE0uY29sbGVjdGlvbigkKSl9cmV0dXJuIE99LGpaPWZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPTA7UzxtLmxlbmd0aDtTKyspaWYoIWtbU118fG1bU10uaWQoKSE9PWtbU10uaWQoKSlyZXR1cm4hMTtyZXR1cm4hMH0sJFo9ZnVuY3Rpb24obSl7Zm9yKHZhciBrPTA7azxtLmxlbmd0aDtrKyspZm9yKHZhciBTPTA7UzxtLmxlbmd0aDtTKyspayE9UyYmaloobVtrXSxtW1NdKSYmbS5zcGxpY2UoUywxKTtyZXR1cm4gbX0sRWo9ZnVuY3Rpb24obSl7Zm9yKHZhciBrPXRoaXMubm9kZXMoKSxTPXRoaXMuZWRnZXMoKSxNPXRoaXMuY3koKSxPPUlaKG0pLE49e30sJD0wOyQ8ay5sZW5ndGg7JCsrKU5ba1skXS5pZCgpXT0kO2Zvcih2YXIgSD1rLmxlbmd0aCxxPUgqSCxZPW5ldyBBcnJheShxKSxaLGNlPTA7Y2U8cTtjZSsrKVlbY2VdPTA7Zm9yKHZhciB2ZT0wO3ZlPFMubGVuZ3RoO3ZlKyspe3ZhciBtZT1TW3ZlXSxMZT1OW21lLnNvdXJjZSgpLmlkKCldLF9lPU5bbWUudGFyZ2V0KCkuaWQoKV0sRWU9T1oobWUsTy5hdHRyaWJ1dGVzKTtZW0xlKkgrX2VdKz1FZSxZW19lKkgrTGVdKz1FZX1OWihZLEgsTy5tdWx0RmFjdG9yKSx4aihZLEgpO2Zvcih2YXIgQmU9ITAsUmU9MDtCZSYmUmU8Ty5tYXhJdGVyYXRpb25zOylCZT0hMSxaPUJaKFksSCxPLmV4cGFuZEZhY3RvciksWT1raihaLEgsTy5pbmZsYXRlRmFjdG9yKSxGWihZLFoscSw0KXx8KEJlPSEwKSxSZSsrO3ZhciBWZT1SWihZLEgsayxNKTtyZXR1cm4gVmU9JFooVmUpLFZlfSx6Wj17bWFya292Q2x1c3RlcmluZzpFaixtY2w6RWp9LHFaPWZ1bmN0aW9uKG0pe3JldHVybiBtfSxUaj1mdW5jdGlvbihtLGspe3JldHVybiBNYXRoLmFicyhrLW0pfSxDaj1mdW5jdGlvbihtLGssUyl7cmV0dXJuIG0rVGooayxTKX0sU2o9ZnVuY3Rpb24obSxrLFMpe3JldHVybiBtK01hdGgucG93KFMtaywyKX0sSFo9ZnVuY3Rpb24obSl7cmV0dXJuIE1hdGguc3FydChtKX0sVlo9ZnVuY3Rpb24obSxrLFMpe3JldHVybiBNYXRoLm1heChtLFRqKGssUykpfSxZOT1mdW5jdGlvbihtLGssUyxNLE8pe2Zvcih2YXIgTj1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06cVosJD1NLEgscSxZPTA7WTxtO1krKylIPWsoWSkscT1TKFkpLCQ9TygkLEgscSk7cmV0dXJuIE4oJCl9LHI4PXtldWNsaWRlYW46ZnVuY3Rpb24obSxrLFMpe3JldHVybiBtPj0yP1k5KG0sayxTLDAsU2osSFopOlk5KG0sayxTLDAsQ2opfSxzcXVhcmVkRXVjbGlkZWFuOmZ1bmN0aW9uKG0sayxTKXtyZXR1cm4gWTkobSxrLFMsMCxTail9LG1hbmhhdHRhbjpmdW5jdGlvbihtLGssUyl7cmV0dXJuIFk5KG0sayxTLDAsQ2opfSxtYXg6ZnVuY3Rpb24obSxrLFMpe3JldHVybiBZOShtLGssUywtMS8wLFZaKX19O3I4WyJzcXVhcmVkLWV1Y2xpZGVhbiJdPXI4LnNxdWFyZWRFdWNsaWRlYW4scjguc3F1YXJlZGV1Y2xpZGVhbj1yOC5zcXVhcmVkRXVjbGlkZWFuO2Z1bmN0aW9uIG1TKHgsbSxrLFMsTSxPKXt2YXIgTjtyZXR1cm4gYWUoeCk/Tj14Ok49cjhbeF18fHI4LmV1Y2xpZGVhbixtPT09MCYmYWUoeCk/TihNLE8pOk4obSxrLFMsTSxPKX12YXIgVVo9cTAoe2s6MixtOjIsc2Vuc2l0aXZpdHlUaHJlc2hvbGQ6MWUtNCxkaXN0YW5jZToiZXVjbGlkZWFuIixtYXhJdGVyYXRpb25zOjEwLGF0dHJpYnV0ZXM6W10sdGVzdE1vZGU6ITEsdGVzdENlbnRyb2lkczpudWxsfSksaEk9ZnVuY3Rpb24obSl7cmV0dXJuIFVaKG0pfSx2Uz1mdW5jdGlvbihtLGssUyxNLE8pe3ZhciBOPU8hPT0ia01lZG9pZHMiLCQ9Tj9mdW5jdGlvbihaKXtyZXR1cm4gU1taXX06ZnVuY3Rpb24oWil7cmV0dXJuIE1bWl0oUyl9LEg9ZnVuY3Rpb24oY2Upe3JldHVybiBNW2NlXShrKX0scT1TLFk9aztyZXR1cm4gbVMobSxNLmxlbmd0aCwkLEgscSxZKX0sZkk9ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT1TLmxlbmd0aCxPPW5ldyBBcnJheShNKSxOPW5ldyBBcnJheShNKSwkPW5ldyBBcnJheShrKSxIPW51bGwscT0wO3E8TTtxKyspT1txXT1tLm1pbihTW3FdKS52YWx1ZSxOW3FdPW0ubWF4KFNbcV0pLnZhbHVlO2Zvcih2YXIgWT0wO1k8aztZKyspe0g9W107Zm9yKHZhciBaPTA7WjxNO1orKylIW1pdPU1hdGgucmFuZG9tKCkqKE5bWl0tT1taXSkrT1taXTskW1ldPUh9cmV0dXJuICR9LF9qPWZ1bmN0aW9uKG0sayxTLE0sTyl7Zm9yKHZhciBOPTEvMCwkPTAsSD0wO0g8ay5sZW5ndGg7SCsrKXt2YXIgcT12UyhTLG0sa1tIXSxNLE8pO3E8TiYmKE49cSwkPUgpfXJldHVybiAkfSxBaj1mdW5jdGlvbihtLGssUyl7Zm9yKHZhciBNPVtdLE89bnVsbCxOPTA7TjxrLmxlbmd0aDtOKyspTz1rW05dLFNbTy5pZCgpXT09PW0mJk0ucHVzaChPKTtyZXR1cm4gTX0sR1o9ZnVuY3Rpb24obSxrLFMpe3JldHVybiBNYXRoLmFicyhrLW0pPD1TfSxLWj1mdW5jdGlvbihtLGssUyl7Zm9yKHZhciBNPTA7TTxtLmxlbmd0aDtNKyspZm9yKHZhciBPPTA7TzxtW01dLmxlbmd0aDtPKyspe3ZhciBOPU1hdGguYWJzKG1bTV1bT10ta1tNXVtPXSk7aWYoTj5TKXJldHVybiExfXJldHVybiEwfSxXWj1mdW5jdGlvbihtLGssUyl7Zm9yKHZhciBNPTA7TTxTO00rKylpZihtPT09a1tNXSlyZXR1cm4hMDtyZXR1cm4hMX0sTGo9ZnVuY3Rpb24obSxrKXt2YXIgUz1uZXcgQXJyYXkoayk7aWYobS5sZW5ndGg8NTApZm9yKHZhciBNPTA7TTxrO00rKyl7Zm9yKHZhciBPPW1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm0ubGVuZ3RoKV07V1ooTyxTLE0pOylPPW1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm0ubGVuZ3RoKV07U1tNXT1PfWVsc2UgZm9yKHZhciBOPTA7TjxrO04rKylTW05dPW1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm0ubGVuZ3RoKV07cmV0dXJuIFN9LE1qPWZ1bmN0aW9uKG0sayxTKXtmb3IodmFyIE09MCxPPTA7TzxrLmxlbmd0aDtPKyspTSs9dlMoIm1hbmhhdHRhbiIsa1tPXSxtLFMsImtNZWRvaWRzIik7cmV0dXJuIE19LFlaPWZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuY3koKSxTPXRoaXMubm9kZXMoKSxNPW51bGwsTz1oSShtKSxOPW5ldyBBcnJheShPLmspLCQ9e30sSDtPLnRlc3RNb2RlP3R5cGVvZiBPLnRlc3RDZW50cm9pZHM9PSJudW1iZXIiPyhPLnRlc3RDZW50cm9pZHMsSD1mSShTLE8uayxPLmF0dHJpYnV0ZXMpKTp1KE8udGVzdENlbnRyb2lkcyk9PT0ib2JqZWN0Ij9IPU8udGVzdENlbnRyb2lkczpIPWZJKFMsTy5rLE8uYXR0cmlidXRlcyk6SD1mSShTLE8uayxPLmF0dHJpYnV0ZXMpO2Zvcih2YXIgcT0hMCxZPTA7cSYmWTxPLm1heEl0ZXJhdGlvbnM7KXtmb3IodmFyIFo9MDtaPFMubGVuZ3RoO1orKylNPVNbWl0sJFtNLmlkKCldPV9qKE0sSCxPLmRpc3RhbmNlLE8uYXR0cmlidXRlcywia01lYW5zIik7cT0hMTtmb3IodmFyIGNlPTA7Y2U8Ty5rO2NlKyspe3ZhciB2ZT1BaihjZSxTLCQpO2lmKHZlLmxlbmd0aCE9PTApe2Zvcih2YXIgbWU9Ty5hdHRyaWJ1dGVzLmxlbmd0aCxMZT1IW2NlXSxfZT1uZXcgQXJyYXkobWUpLEVlPW5ldyBBcnJheShtZSksQmU9MDtCZTxtZTtCZSsrKXtFZVtCZV09MDtmb3IodmFyIFJlPTA7UmU8dmUubGVuZ3RoO1JlKyspTT12ZVtSZV0sRWVbQmVdKz1PLmF0dHJpYnV0ZXNbQmVdKE0pO19lW0JlXT1FZVtCZV0vdmUubGVuZ3RoLEdaKF9lW0JlXSxMZVtCZV0sTy5zZW5zaXRpdml0eVRocmVzaG9sZCl8fChxPSEwKX1IW2NlXT1fZSxOW2NlXT1rLmNvbGxlY3Rpb24odmUpfX1ZKyt9cmV0dXJuIE59LFhaPWZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuY3koKSxTPXRoaXMubm9kZXMoKSxNPW51bGwsTz1oSShtKSxOPW5ldyBBcnJheShPLmspLCQsSD17fSxxLFk9bmV3IEFycmF5KE8uayk7Ty50ZXN0TW9kZT90eXBlb2YgTy50ZXN0Q2VudHJvaWRzPT0ibnVtYmVyInx8KHUoTy50ZXN0Q2VudHJvaWRzKT09PSJvYmplY3QiPyQ9Ty50ZXN0Q2VudHJvaWRzOiQ9TGooUyxPLmspKTokPUxqKFMsTy5rKTtmb3IodmFyIFo9ITAsY2U9MDtaJiZjZTxPLm1heEl0ZXJhdGlvbnM7KXtmb3IodmFyIHZlPTA7dmU8Uy5sZW5ndGg7dmUrKylNPVNbdmVdLEhbTS5pZCgpXT1faihNLCQsTy5kaXN0YW5jZSxPLmF0dHJpYnV0ZXMsImtNZWRvaWRzIik7Wj0hMTtmb3IodmFyIG1lPTA7bWU8JC5sZW5ndGg7bWUrKyl7dmFyIExlPUFqKG1lLFMsSCk7aWYoTGUubGVuZ3RoIT09MCl7WVttZV09TWooJFttZV0sTGUsTy5hdHRyaWJ1dGVzKTtmb3IodmFyIF9lPTA7X2U8TGUubGVuZ3RoO19lKyspcT1NaihMZVtfZV0sTGUsTy5hdHRyaWJ1dGVzKSxxPFlbbWVdJiYoWVttZV09cSwkW21lXT1MZVtfZV0sWj0hMCk7TlttZV09ay5jb2xsZWN0aW9uKExlKX19Y2UrK31yZXR1cm4gTn0sUVo9ZnVuY3Rpb24obSxrLFMsTSxPKXtmb3IodmFyIE4sJCxIPTA7SDxrLmxlbmd0aDtIKyspZm9yKHZhciBxPTA7cTxtLmxlbmd0aDtxKyspTVtIXVtxXT1NYXRoLnBvdyhTW0hdW3FdLE8ubSk7Zm9yKHZhciBZPTA7WTxtLmxlbmd0aDtZKyspZm9yKHZhciBaPTA7WjxPLmF0dHJpYnV0ZXMubGVuZ3RoO1orKyl7Tj0wLCQ9MDtmb3IodmFyIGNlPTA7Y2U8ay5sZW5ndGg7Y2UrKylOKz1NW2NlXVtZXSpPLmF0dHJpYnV0ZXNbWl0oa1tjZV0pLCQrPU1bY2VdW1ldO21bWV1bWl09Ti8kfX0sSlo9ZnVuY3Rpb24obSxrLFMsTSxPKXtmb3IodmFyIE49MDtOPG0ubGVuZ3RoO04rKylrW05dPW1bTl0uc2xpY2UoKTtmb3IodmFyICQsSCxxLFk9Mi8oTy5tLTEpLFo9MDtaPFMubGVuZ3RoO1orKylmb3IodmFyIGNlPTA7Y2U8TS5sZW5ndGg7Y2UrKyl7JD0wO2Zvcih2YXIgdmU9MDt2ZTxTLmxlbmd0aDt2ZSsrKUg9dlMoTy5kaXN0YW5jZSxNW2NlXSxTW1pdLE8uYXR0cmlidXRlcywiY21lYW5zIikscT12UyhPLmRpc3RhbmNlLE1bY2VdLFNbdmVdLE8uYXR0cmlidXRlcywiY21lYW5zIiksJCs9TWF0aC5wb3coSC9xLFkpO21bY2VdW1pdPTEvJH19LFpaPWZ1bmN0aW9uKG0sayxTLE0pe2Zvcih2YXIgTz1uZXcgQXJyYXkoUy5rKSxOPTA7TjxPLmxlbmd0aDtOKyspT1tOXT1bXTtmb3IodmFyICQsSCxxPTA7cTxrLmxlbmd0aDtxKyspeyQ9LTEvMCxIPS0xO2Zvcih2YXIgWT0wO1k8a1swXS5sZW5ndGg7WSsrKWtbcV1bWV0+JCYmKCQ9a1txXVtZXSxIPVkpO09bSF0ucHVzaChtW3FdKX1mb3IodmFyIFo9MDtaPE8ubGVuZ3RoO1orKylPW1pdPU0uY29sbGVjdGlvbihPW1pdKTtyZXR1cm4gT30sRGo9ZnVuY3Rpb24obSl7dmFyIGs9dGhpcy5jeSgpLFM9dGhpcy5ub2RlcygpLE09aEkobSksTyxOLCQsSCxxO0g9bmV3IEFycmF5KFMubGVuZ3RoKTtmb3IodmFyIFk9MDtZPFMubGVuZ3RoO1krKylIW1ldPW5ldyBBcnJheShNLmspOyQ9bmV3IEFycmF5KFMubGVuZ3RoKTtmb3IodmFyIFo9MDtaPFMubGVuZ3RoO1orKykkW1pdPW5ldyBBcnJheShNLmspO2Zvcih2YXIgY2U9MDtjZTxTLmxlbmd0aDtjZSsrKXtmb3IodmFyIHZlPTAsbWU9MDttZTxNLms7bWUrKykkW2NlXVttZV09TWF0aC5yYW5kb20oKSx2ZSs9JFtjZV1bbWVdO2Zvcih2YXIgTGU9MDtMZTxNLms7TGUrKykkW2NlXVtMZV09JFtjZV1bTGVdL3ZlfU49bmV3IEFycmF5KE0uayk7Zm9yKHZhciBfZT0wO19lPE0uaztfZSsrKU5bX2VdPW5ldyBBcnJheShNLmF0dHJpYnV0ZXMubGVuZ3RoKTtxPW5ldyBBcnJheShTLmxlbmd0aCk7Zm9yKHZhciBFZT0wO0VlPFMubGVuZ3RoO0VlKyspcVtFZV09bmV3IEFycmF5KE0uayk7Zm9yKHZhciBCZT0hMCxSZT0wO0JlJiZSZTxNLm1heEl0ZXJhdGlvbnM7KUJlPSExLFFaKE4sUywkLHEsTSksSlooJCxILE4sUyxNKSxLWigkLEgsTS5zZW5zaXRpdml0eVRocmVzaG9sZCl8fChCZT0hMCksUmUrKztyZXR1cm4gTz1aWihTLCQsTSxrKSx7Y2x1c3RlcnM6TyxkZWdyZWVPZk1lbWJlcnNoaXA6JH19LGVlZT17a01lYW5zOllaLGtNZWRvaWRzOlhaLGZ1enp5Q01lYW5zOkRqLGZjbTpEan0sdGVlPXEwKHtkaXN0YW5jZToiZXVjbGlkZWFuIixsaW5rYWdlOiJtaW4iLG1vZGU6InRocmVzaG9sZCIsdGhyZXNob2xkOjEvMCxhZGREZW5kcm9ncmFtOiExLGRlbmRyb2dyYW1EZXB0aDowLGF0dHJpYnV0ZXM6W119KSxuZWU9e3NpbmdsZToibWluIixjb21wbGV0ZToibWF4In0scmVlPWZ1bmN0aW9uKG0pe3ZhciBrPXRlZShtKSxTPW5lZVtrLmxpbmthZ2VdO3JldHVybiBTIT1udWxsJiYoay5saW5rYWdlPVMpLGt9LElqPWZ1bmN0aW9uKG0sayxTLE0sTyl7Zm9yKHZhciBOPTAsJD0xLzAsSCxxPU8uYXR0cmlidXRlcyxZPWZ1bmN0aW9uKEplLEx0KXtyZXR1cm4gbVMoTy5kaXN0YW5jZSxxLmxlbmd0aCxmdW5jdGlvbihNdCl7cmV0dXJuIHFbTXRdKEplKX0sZnVuY3Rpb24oTXQpe3JldHVybiBxW010XShMdCl9LEplLEx0KX0sWj0wO1o8bS5sZW5ndGg7WisrKXt2YXIgY2U9bVtaXS5rZXksdmU9U1tjZV1bTVtjZV1dO3ZlPCQmJihOPWNlLCQ9dmUpfWlmKE8ubW9kZT09PSJ0aHJlc2hvbGQiJiYkPj1PLnRocmVzaG9sZHx8Ty5tb2RlPT09ImRlbmRyb2dyYW0iJiZtLmxlbmd0aD09PTEpcmV0dXJuITE7dmFyIG1lPWtbTl0sTGU9a1tNW05dXSxfZTtPLm1vZGU9PT0iZGVuZHJvZ3JhbSI/X2U9e2xlZnQ6bWUscmlnaHQ6TGUsa2V5Om1lLmtleX06X2U9e3ZhbHVlOm1lLnZhbHVlLmNvbmNhdChMZS52YWx1ZSksa2V5Om1lLmtleX0sbVttZS5pbmRleF09X2UsbS5zcGxpY2UoTGUuaW5kZXgsMSksa1ttZS5rZXldPV9lO2Zvcih2YXIgRWU9MDtFZTxtLmxlbmd0aDtFZSsrKXt2YXIgQmU9bVtFZV07bWUua2V5PT09QmUua2V5P0g9MS8wOk8ubGlua2FnZT09PSJtaW4iPyhIPVNbbWUua2V5XVtCZS5rZXldLFNbbWUua2V5XVtCZS5rZXldPlNbTGUua2V5XVtCZS5rZXldJiYoSD1TW0xlLmtleV1bQmUua2V5XSkpOk8ubGlua2FnZT09PSJtYXgiPyhIPVNbbWUua2V5XVtCZS5rZXldLFNbbWUua2V5XVtCZS5rZXldPFNbTGUua2V5XVtCZS5rZXldJiYoSD1TW0xlLmtleV1bQmUua2V5XSkpOk8ubGlua2FnZT09PSJtZWFuIj9IPShTW21lLmtleV1bQmUua2V5XSptZS5zaXplK1NbTGUua2V5XVtCZS5rZXldKkxlLnNpemUpLyhtZS5zaXplK0xlLnNpemUpOk8ubW9kZT09PSJkZW5kcm9ncmFtIj9IPVkoQmUudmFsdWUsbWUudmFsdWUpOkg9WShCZS52YWx1ZVswXSxtZS52YWx1ZVswXSksU1ttZS5rZXldW0JlLmtleV09U1tCZS5rZXldW21lLmtleV09SH1mb3IodmFyIFJlPTA7UmU8bS5sZW5ndGg7UmUrKyl7dmFyIFZlPW1bUmVdLmtleTtpZihNW1ZlXT09PW1lLmtleXx8TVtWZV09PT1MZS5rZXkpe2Zvcih2YXIgY3Q9VmUsc3Q9MDtzdDxtLmxlbmd0aDtzdCsrKXt2YXIgWWU9bVtzdF0ua2V5O1NbVmVdW1llXTxTW1ZlXVtjdF0mJihjdD1ZZSl9TVtWZV09Y3R9bVtSZV0uaW5kZXg9UmV9cmV0dXJuIG1lLmtleT1MZS5rZXk9bWUuaW5kZXg9TGUuaW5kZXg9bnVsbCwhMH0sd1M9ZnVuY3Rpb24geChtLGssUyl7bSYmKG0udmFsdWU/ay5wdXNoKG0udmFsdWUpOihtLmxlZnQmJngobS5sZWZ0LGspLG0ucmlnaHQmJngobS5yaWdodCxrKSkpfSxpZWU9ZnVuY3Rpb24geChtLGspe2lmKCFtKXJldHVybiIiO2lmKG0ubGVmdCYmbS5yaWdodCl7dmFyIFM9eChtLmxlZnQsayksTT14KG0ucmlnaHQsayksTz1rLmFkZCh7Z3JvdXA6Im5vZGVzIixkYXRhOntpZDpTKyIsIitNfX0pO3JldHVybiBrLmFkZCh7Z3JvdXA6ImVkZ2VzIixkYXRhOntzb3VyY2U6Uyx0YXJnZXQ6Ty5pZCgpfX0pLGsuYWRkKHtncm91cDoiZWRnZXMiLGRhdGE6e3NvdXJjZTpNLHRhcmdldDpPLmlkKCl9fSksTy5pZCgpfWVsc2UgaWYobS52YWx1ZSlyZXR1cm4gbS52YWx1ZS5pZCgpfSxzZWU9ZnVuY3Rpb24geChtLGssUyl7aWYoIW0pcmV0dXJuW107dmFyIE09W10sTz1bXSxOPVtdO3JldHVybiBrPT09MD8obS5sZWZ0JiZ3UyhtLmxlZnQsTSksbS5yaWdodCYmd1MobS5yaWdodCxPKSxOPU0uY29uY2F0KE8pLFtTLmNvbGxlY3Rpb24oTildKTprPT09MT9tLnZhbHVlP1tTLmNvbGxlY3Rpb24obS52YWx1ZSldOihtLmxlZnQmJndTKG0ubGVmdCxNKSxtLnJpZ2h0JiZ3UyhtLnJpZ2h0LE8pLFtTLmNvbGxlY3Rpb24oTSksUy5jb2xsZWN0aW9uKE8pXSk6bS52YWx1ZT9bUy5jb2xsZWN0aW9uKG0udmFsdWUpXToobS5sZWZ0JiYoTT14KG0ubGVmdCxrLTEsUykpLG0ucmlnaHQmJihPPXgobS5yaWdodCxrLTEsUykpLE0uY29uY2F0KE8pKX0sT2o9ZnVuY3Rpb24obSl7Zm9yKHZhciBrPXRoaXMuY3koKSxTPXRoaXMubm9kZXMoKSxNPXJlZShtKSxPPU0uYXR0cmlidXRlcyxOPWZ1bmN0aW9uKFJlLFZlKXtyZXR1cm4gbVMoTS5kaXN0YW5jZSxPLmxlbmd0aCxmdW5jdGlvbihjdCl7cmV0dXJuIE9bY3RdKFJlKX0sZnVuY3Rpb24oY3Qpe3JldHVybiBPW2N0XShWZSl9LFJlLFZlKX0sJD1bXSxIPVtdLHE9W10sWT1bXSxaPTA7WjxTLmxlbmd0aDtaKyspe3ZhciBjZT17dmFsdWU6TS5tb2RlPT09ImRlbmRyb2dyYW0iP1NbWl06W1NbWl1dLGtleTpaLGluZGV4Olp9OyRbWl09Y2UsWVtaXT1jZSxIW1pdPVtdLHFbWl09MH1mb3IodmFyIHZlPTA7dmU8JC5sZW5ndGg7dmUrKylmb3IodmFyIG1lPTA7bWU8PXZlO21lKyspe3ZhciBMZT12b2lkIDA7TS5tb2RlPT09ImRlbmRyb2dyYW0iP0xlPXZlPT09bWU/MS8wOk4oJFt2ZV0udmFsdWUsJFttZV0udmFsdWUpOkxlPXZlPT09bWU/MS8wOk4oJFt2ZV0udmFsdWVbMF0sJFttZV0udmFsdWVbMF0pLEhbdmVdW21lXT1MZSxIW21lXVt2ZV09TGUsTGU8SFt2ZV1bcVt2ZV1dJiYocVt2ZV09bWUpfWZvcih2YXIgX2U9SWooJCxZLEgscSxNKTtfZTspX2U9SWooJCxZLEgscSxNKTt2YXIgRWU7cmV0dXJuIE0ubW9kZT09PSJkZW5kcm9ncmFtIj8oRWU9c2VlKCRbMF0sTS5kZW5kcm9ncmFtRGVwdGgsayksTS5hZGREZW5kcm9ncmFtJiZpZWUoJFswXSxrKSk6KEVlPW5ldyBBcnJheSgkLmxlbmd0aCksJC5mb3JFYWNoKGZ1bmN0aW9uKEJlLFJlKXtCZS5rZXk9QmUuaW5kZXg9bnVsbCxFZVtSZV09ay5jb2xsZWN0aW9uKEJlLnZhbHVlKX0pKSxFZX0sYWVlPXtoaWVyYXJjaGljYWxDbHVzdGVyaW5nOk9qLGhjYTpPan0sb2VlPXEwKHtkaXN0YW5jZToiZXVjbGlkZWFuIixwcmVmZXJlbmNlOiJtZWRpYW4iLGRhbXBpbmc6LjgsbWF4SXRlcmF0aW9uczoxZTMsbWluSXRlcmF0aW9uczoxMDAsYXR0cmlidXRlczpbXX0pLGNlZT1mdW5jdGlvbihtKXt2YXIgaz1tLmRhbXBpbmcsUz1tLnByZWZlcmVuY2U7LjU8PWsmJms8MXx8Y2goIkRhbXBpbmcgbXVzdCByYW5nZSBvbiBbMC41LCAxKS4gIEdvdDogIi5jb25jYXQoaykpO3ZhciBNPVsibWVkaWFuIiwibWVhbiIsIm1pbiIsIm1heCJdO3JldHVybiBNLnNvbWUoZnVuY3Rpb24oTyl7cmV0dXJuIE89PT1TfSl8fFgoUyl8fGNoKCJQcmVmZXJlbmNlIG11c3QgYmUgb25lIG9mIFsiLmNvbmNhdChNLm1hcChmdW5jdGlvbihPKXtyZXR1cm4iJyIuY29uY2F0KE8sIiciKX0pLmpvaW4oIiwgIiksIl0gb3IgYSBudW1iZXIuICBHb3Q6ICIpLmNvbmNhdChTKSksb2VlKG0pfSx1ZWU9ZnVuY3Rpb24obSxrLFMsTSl7dmFyIE89ZnVuY3Rpb24oJCxIKXtyZXR1cm4gTVtIXSgkKX07cmV0dXJuLW1TKG0sTS5sZW5ndGgsZnVuY3Rpb24oTil7cmV0dXJuIE8oayxOKX0sZnVuY3Rpb24oTil7cmV0dXJuIE8oUyxOKX0sayxTKX0sbGVlPWZ1bmN0aW9uKG0sayl7dmFyIFM9bnVsbDtyZXR1cm4gaz09PSJtZWRpYW4iP1M9dVoobSk6az09PSJtZWFuIj9TPWNaKG0pOms9PT0ibWluIj9TPWFaKG0pOms9PT0ibWF4Ij9TPW9aKG0pOlM9ayxTfSxoZWU9ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT1bXSxPPTA7TzxtO08rKylrW08qbStPXStTW08qbStPXT4wJiZNLnB1c2goTyk7cmV0dXJuIE19LE5qPWZ1bmN0aW9uKG0sayxTKXtmb3IodmFyIE09W10sTz0wO088bTtPKyspe2Zvcih2YXIgTj0tMSwkPS0xLzAsSD0wO0g8Uy5sZW5ndGg7SCsrKXt2YXIgcT1TW0hdO2tbTyptK3FdPiQmJihOPXEsJD1rW08qbStxXSl9Tj4wJiZNLnB1c2goTil9Zm9yKHZhciBZPTA7WTxTLmxlbmd0aDtZKyspTVtTW1ldXT1TW1ldO3JldHVybiBNfSxmZWU9ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT1OaihtLGssUyksTz0wO088Uy5sZW5ndGg7TysrKXtmb3IodmFyIE49W10sJD0wOyQ8TS5sZW5ndGg7JCsrKU1bJF09PT1TW09dJiZOLnB1c2goJCk7Zm9yKHZhciBIPS0xLHE9LTEvMCxZPTA7WTxOLmxlbmd0aDtZKyspe2Zvcih2YXIgWj0wLGNlPTA7Y2U8Ti5sZW5ndGg7Y2UrKylaKz1rW05bY2VdKm0rTltZXV07Wj5xJiYoSD1ZLHE9Wil9U1tPXT1OW0hdfXJldHVybiBNPU5qKG0sayxTKSxNfSxQaj1mdW5jdGlvbihtKXtmb3IodmFyIGs9dGhpcy5jeSgpLFM9dGhpcy5ub2RlcygpLE09Y2VlKG0pLE89e30sTj0wO048Uy5sZW5ndGg7TisrKU9bU1tOXS5pZCgpXT1OO3ZhciAkLEgscSxZLFosY2U7JD1TLmxlbmd0aCxIPSQqJCxxPW5ldyBBcnJheShIKTtmb3IodmFyIHZlPTA7dmU8SDt2ZSsrKXFbdmVdPS0xLzA7Zm9yKHZhciBtZT0wO21lPCQ7bWUrKylmb3IodmFyIExlPTA7TGU8JDtMZSsrKW1lIT09TGUmJihxW21lKiQrTGVdPXVlZShNLmRpc3RhbmNlLFNbbWVdLFNbTGVdLE0uYXR0cmlidXRlcykpO1k9bGVlKHEsTS5wcmVmZXJlbmNlKTtmb3IodmFyIF9lPTA7X2U8JDtfZSsrKXFbX2UqJCtfZV09WTtaPW5ldyBBcnJheShIKTtmb3IodmFyIEVlPTA7RWU8SDtFZSsrKVpbRWVdPTA7Y2U9bmV3IEFycmF5KEgpO2Zvcih2YXIgQmU9MDtCZTxIO0JlKyspY2VbQmVdPTA7Zm9yKHZhciBSZT1uZXcgQXJyYXkoJCksVmU9bmV3IEFycmF5KCQpLGN0PW5ldyBBcnJheSgkKSxzdD0wO3N0PCQ7c3QrKylSZVtzdF09MCxWZVtzdF09MCxjdFtzdF09MDtmb3IodmFyIFllPW5ldyBBcnJheSgkKk0ubWluSXRlcmF0aW9ucyksbXQ9MDttdDxZZS5sZW5ndGg7bXQrKylZZVttdF09MDt2YXIgSmU7Zm9yKEplPTA7SmU8TS5tYXhJdGVyYXRpb25zO0plKyspe2Zvcih2YXIgTHQ9MDtMdDwkO0x0Kyspe2Zvcih2YXIgTXQ9LTEvMCx1dD0tMS8wLFd0PS0xLFR0PTAsX249MDtfbjwkO19uKyspUmVbX25dPVpbTHQqJCtfbl0sVHQ9Y2VbTHQqJCtfbl0rcVtMdCokK19uXSxUdD49TXQ/KHV0PU10LE10PVR0LFd0PV9uKTpUdD51dCYmKHV0PVR0KTtmb3IodmFyIGhuPTA7aG48JDtobisrKVpbTHQqJCtobl09KDEtTS5kYW1waW5nKSoocVtMdCokK2huXS1NdCkrTS5kYW1waW5nKlJlW2huXTtaW0x0KiQrV3RdPSgxLU0uZGFtcGluZykqKHFbTHQqJCtXdF0tdXQpK00uZGFtcGluZypSZVtXdF19Zm9yKHZhciBZdD0wO1l0PCQ7WXQrKyl7Zm9yKHZhciBEbj0wLGlyPTA7aXI8JDtpcisrKVJlW2lyXT1jZVtpciokK1l0XSxWZVtpcl09TWF0aC5tYXgoMCxaW2lyKiQrWXRdKSxEbis9VmVbaXJdO0RuLT1WZVtZdF0sVmVbWXRdPVpbWXQqJCtZdF0sRG4rPVZlW1l0XTtmb3IodmFyIHZyPTA7dnI8JDt2cisrKWNlW3ZyKiQrWXRdPSgxLU0uZGFtcGluZykqTWF0aC5taW4oMCxEbi1WZVt2cl0pK00uZGFtcGluZypSZVt2cl07Y2VbWXQqJCtZdF09KDEtTS5kYW1waW5nKSooRG4tVmVbWXRdKStNLmRhbXBpbmcqUmVbWXRdfWZvcih2YXIgTm49MCxwcj0wO3ByPCQ7cHIrKyl7dmFyIEVyPWNlW3ByKiQrcHJdK1pbcHIqJCtwcl0+MD8xOjA7WWVbSmUlTS5taW5JdGVyYXRpb25zKiQrcHJdPUVyLE5uKz1Fcn1pZihObj4wJiYoSmU+PU0ubWluSXRlcmF0aW9ucy0xfHxKZT09TS5tYXhJdGVyYXRpb25zLTEpKXtmb3IodmFyIE1yPTAsQ3I9MDtDcjwkO0NyKyspe2N0W0NyXT0wO2Zvcih2YXIgT3I9MDtPcjxNLm1pbkl0ZXJhdGlvbnM7T3IrKyljdFtDcl0rPVllW09yKiQrQ3JdOyhjdFtDcl09PT0wfHxjdFtDcl09PT1NLm1pbkl0ZXJhdGlvbnMpJiZNcisrfWlmKE1yPT09JClicmVha319Zm9yKHZhciBXbj1oZWUoJCxaLGNlKSxicj1mZWUoJCxxLFduKSxTcj17fSxOcj0wO05yPFduLmxlbmd0aDtOcisrKVNyW1duW05yXV09W107Zm9yKHZhciBTaT0wO1NpPFMubGVuZ3RoO1NpKyspe3ZhciB5cz1PW1NbU2ldLmlkKCldLHBhPWJyW3lzXTtwYSE9bnVsbCYmU3JbcGFdLnB1c2goU1tTaV0pfWZvcih2YXIgTWk9bmV3IEFycmF5KFduLmxlbmd0aCksZ2k9MDtnaTxXbi5sZW5ndGg7Z2krKylNaVtnaV09ay5jb2xsZWN0aW9uKFNyW1duW2dpXV0pO3JldHVybiBNaX0sZGVlPXthZmZpbml0eVByb3BhZ2F0aW9uOlBqLGFwOlBqfSxnZWU9cTAoe3Jvb3Q6dm9pZCAwLGRpcmVjdGVkOiExfSkscGVlPXtoaWVyaG9semVyOmZ1bmN0aW9uKG0pe2lmKCFzZShtKSl7dmFyIGs9YXJndW1lbnRzO209e3Jvb3Q6a1swXSxkaXJlY3RlZDprWzFdfX12YXIgUz1nZWUobSksTT1TLnJvb3QsTz1TLmRpcmVjdGVkLE49dGhpcywkPSExLEgscSxZO00mJihZPWJlKE0pP3RoaXMuZmlsdGVyKE0pWzBdLmlkKCk6TVswXS5pZCgpKTt2YXIgWj17fSxjZT17fTtPP04uZm9yRWFjaChmdW5jdGlvbihCZSl7dmFyIFJlPUJlLmlkKCk7aWYoQmUuaXNOb2RlKCkpe3ZhciBWZT1CZS5pbmRlZ3JlZSghMCksY3Q9QmUub3V0ZGVncmVlKCEwKSxzdD1WZS1jdCxZZT1jdC1WZTtzdD09MT9IPyQ9ITA6SD1SZTpZZT09MT9xPyQ9ITA6cT1SZTooWWU+MXx8c3Q+MSkmJigkPSEwKSxaW1JlXT1bXSxCZS5vdXRnb2VycygpLmZvckVhY2goZnVuY3Rpb24obXQpe210LmlzRWRnZSgpJiZaW1JlXS5wdXNoKG10LmlkKCkpfSl9ZWxzZSBjZVtSZV09W3ZvaWQgMCxCZS50YXJnZXQoKS5pZCgpXX0pOk4uZm9yRWFjaChmdW5jdGlvbihCZSl7dmFyIFJlPUJlLmlkKCk7aWYoQmUuaXNOb2RlKCkpe3ZhciBWZT1CZS5kZWdyZWUoITApO1ZlJTImJihIP3E/JD0hMDpxPVJlOkg9UmUpLFpbUmVdPVtdLEJlLmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihjdCl7cmV0dXJuIFpbUmVdLnB1c2goY3QuaWQoKSl9KX1lbHNlIGNlW1JlXT1bQmUuc291cmNlKCkuaWQoKSxCZS50YXJnZXQoKS5pZCgpXX0pO3ZhciB2ZT17Zm91bmQ6ITEsdHJhaWw6dm9pZCAwfTtpZigkKXJldHVybiB2ZTtpZihxJiZIKWlmKE8pe2lmKFkmJnEhPVkpcmV0dXJuIHZlO1k9cX1lbHNle2lmKFkmJnEhPVkmJkghPVkpcmV0dXJuIHZlO1l8fChZPXEpfWVsc2UgWXx8KFk9TlswXS5pZCgpKTt2YXIgbWU9ZnVuY3Rpb24oUmUpe2Zvcih2YXIgVmU9UmUsY3Q9W1JlXSxzdCxZZSxtdDtaW1ZlXS5sZW5ndGg7KXN0PVpbVmVdLnNoaWZ0KCksWWU9Y2Vbc3RdWzBdLG10PWNlW3N0XVsxXSxWZSE9bXQ/KFpbbXRdPVpbbXRdLmZpbHRlcihmdW5jdGlvbihKZSl7cmV0dXJuIEplIT1zdH0pLFZlPW10KTohTyYmVmUhPVllJiYoWltZZV09WltZZV0uZmlsdGVyKGZ1bmN0aW9uKEplKXtyZXR1cm4gSmUhPXN0fSksVmU9WWUpLGN0LnVuc2hpZnQoc3QpLGN0LnVuc2hpZnQoVmUpO3JldHVybiBjdH0sTGU9W10sX2U9W107Zm9yKF9lPW1lKFkpO19lLmxlbmd0aCE9MTspWltfZVswXV0ubGVuZ3RoPT0wPyhMZS51bnNoaWZ0KE4uZ2V0RWxlbWVudEJ5SWQoX2Uuc2hpZnQoKSkpLExlLnVuc2hpZnQoTi5nZXRFbGVtZW50QnlJZChfZS5zaGlmdCgpKSkpOl9lPW1lKF9lLnNoaWZ0KCkpLmNvbmNhdChfZSk7TGUudW5zaGlmdChOLmdldEVsZW1lbnRCeUlkKF9lLnNoaWZ0KCkpKTtmb3IodmFyIEVlIGluIFopaWYoWltFZV0ubGVuZ3RoKXJldHVybiB2ZTtyZXR1cm4gdmUuZm91bmQ9ITAsdmUudHJhaWw9dGhpcy5zcGF3bihMZSwhMCksdmV9fSx5Uz1mdW5jdGlvbigpe3ZhciBtPXRoaXMsaz17fSxTPTAsTT0wLE89W10sTj1bXSwkPXt9LEg9ZnVuY3Rpb24oY2UsdmUpe2Zvcih2YXIgbWU9Ti5sZW5ndGgtMSxMZT1bXSxfZT1tLnNwYXduKCk7TlttZV0ueCE9Y2V8fE5bbWVdLnkhPXZlOylMZS5wdXNoKE4ucG9wKCkuZWRnZSksbWUtLTtMZS5wdXNoKE4ucG9wKCkuZWRnZSksTGUuZm9yRWFjaChmdW5jdGlvbihFZSl7dmFyIEJlPUVlLmNvbm5lY3RlZE5vZGVzKCkuaW50ZXJzZWN0aW9uKG0pO19lLm1lcmdlKEVlKSxCZS5mb3JFYWNoKGZ1bmN0aW9uKFJlKXt2YXIgVmU9UmUuaWQoKSxjdD1SZS5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihtKTtfZS5tZXJnZShSZSksa1tWZV0uY3V0VmVydGV4P19lLm1lcmdlKGN0LmZpbHRlcihmdW5jdGlvbihzdCl7cmV0dXJuIHN0LmlzTG9vcCgpfSkpOl9lLm1lcmdlKGN0KX0pfSksTy5wdXNoKF9lKX0scT1mdW5jdGlvbiBaKGNlLHZlLG1lKXtjZT09PW1lJiYoTSs9MSksa1t2ZV09e2lkOlMsbG93OlMrKyxjdXRWZXJ0ZXg6ITF9O3ZhciBMZT1tLmdldEVsZW1lbnRCeUlkKHZlKS5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihtKTtpZihMZS5zaXplKCk9PT0wKU8ucHVzaChtLnNwYXduKG0uZ2V0RWxlbWVudEJ5SWQodmUpKSk7ZWxzZXt2YXIgX2UsRWUsQmUsUmU7TGUuZm9yRWFjaChmdW5jdGlvbihWZSl7X2U9VmUuc291cmNlKCkuaWQoKSxFZT1WZS50YXJnZXQoKS5pZCgpLEJlPV9lPT09dmU/RWU6X2UsQmUhPT1tZSYmKFJlPVZlLmlkKCksJFtSZV18fCgkW1JlXT0hMCxOLnB1c2goe3g6dmUseTpCZSxlZGdlOlZlfSkpLEJlIGluIGs/a1t2ZV0ubG93PU1hdGgubWluKGtbdmVdLmxvdyxrW0JlXS5pZCk6KFooY2UsQmUsdmUpLGtbdmVdLmxvdz1NYXRoLm1pbihrW3ZlXS5sb3csa1tCZV0ubG93KSxrW3ZlXS5pZDw9a1tCZV0ubG93JiYoa1t2ZV0uY3V0VmVydGV4PSEwLEgodmUsQmUpKSkpfSl9fTttLmZvckVhY2goZnVuY3Rpb24oWil7aWYoWi5pc05vZGUoKSl7dmFyIGNlPVouaWQoKTtjZSBpbiBrfHwoTT0wLHEoY2UsY2UpLGtbY2VdLmN1dFZlcnRleD1NPjEpfX0pO3ZhciBZPU9iamVjdC5rZXlzKGspLmZpbHRlcihmdW5jdGlvbihaKXtyZXR1cm4ga1taXS5jdXRWZXJ0ZXh9KS5tYXAoZnVuY3Rpb24oWil7cmV0dXJuIG0uZ2V0RWxlbWVudEJ5SWQoWil9KTtyZXR1cm57Y3V0Om0uc3Bhd24oWSksY29tcG9uZW50czpPfX0sYmVlPXtob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkOnlTLGh0YmM6eVMsaHRiOnlTLGhvcGNyb2Z0VGFyamFuQmljb25uZWN0ZWRDb21wb25lbnRzOnlTfSx4Uz1mdW5jdGlvbigpe3ZhciBtPXRoaXMsaz17fSxTPTAsTT1bXSxPPVtdLE49bS5zcGF3bihtKSwkPWZ1bmN0aW9uIEgocSl7Ty5wdXNoKHEpLGtbcV09e2luZGV4OlMsbG93OlMrKyxleHBsb3JlZDohMX07dmFyIFk9bS5nZXRFbGVtZW50QnlJZChxKS5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihtKTtpZihZLmZvckVhY2goZnVuY3Rpb24oTGUpe3ZhciBfZT1MZS50YXJnZXQoKS5pZCgpO19lIT09cSYmKF9lIGluIGt8fEgoX2UpLGtbX2VdLmV4cGxvcmVkfHwoa1txXS5sb3c9TWF0aC5taW4oa1txXS5sb3csa1tfZV0ubG93KSkpfSksa1txXS5pbmRleD09PWtbcV0ubG93KXtmb3IodmFyIFo9bS5zcGF3bigpOzspe3ZhciBjZT1PLnBvcCgpO2lmKFoubWVyZ2UobS5nZXRFbGVtZW50QnlJZChjZSkpLGtbY2VdLmxvdz1rW3FdLmluZGV4LGtbY2VdLmV4cGxvcmVkPSEwLGNlPT09cSlicmVha312YXIgdmU9Wi5lZGdlc1dpdGgoWiksbWU9Wi5tZXJnZSh2ZSk7TS5wdXNoKG1lKSxOPU4uZGlmZmVyZW5jZShtZSl9fTtyZXR1cm4gbS5mb3JFYWNoKGZ1bmN0aW9uKEgpe2lmKEguaXNOb2RlKCkpe3ZhciBxPUguaWQoKTtxIGluIGt8fCQocSl9fSkse2N1dDpOLGNvbXBvbmVudHM6TX19LG1lZT17dGFyamFuU3Ryb25nbHlDb25uZWN0ZWQ6eFMsdHNjOnhTLHRzY2M6eFMsdGFyamFuU3Ryb25nbHlDb25uZWN0ZWRDb21wb25lbnRzOnhTfSxCaj17fTtbSDksV0osWUosUUosWkosdFosaVosTFosdDgsbjgsbEkselosZWVlLGFlZSxkZWUscGVlLGJlZSxtZWVdLmZvckVhY2goZnVuY3Rpb24oeCl7eXQoQmoseCl9KTsvKiEKRW1iZWRkYWJsZSBNaW5pbXVtIFN0cmljdGx5LUNvbXBsaWFudCBQcm9taXNlcy9BKyAxLjEuMSBUaGVuYWJsZQpDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBSYWxmIFMuIEVuZ2Vsc2NoYWxsIChodHRwOi8vZW5nZWxzY2hhbGwuY29tKQpMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UgKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQpCiovdmFyIEZqPTAsUmo9MSxqaj0yLEd2PWZ1bmN0aW9uIHgobSl7aWYoISh0aGlzIGluc3RhbmNlb2YgeCkpcmV0dXJuIG5ldyB4KG0pO3RoaXMuaWQ9IlRoZW5hYmxlLzEuMC43Iix0aGlzLnN0YXRlPUZqLHRoaXMuZnVsZmlsbFZhbHVlPXZvaWQgMCx0aGlzLnJlamVjdFJlYXNvbj12b2lkIDAsdGhpcy5vbkZ1bGZpbGxlZD1bXSx0aGlzLm9uUmVqZWN0ZWQ9W10sdGhpcy5wcm94eT17dGhlbjp0aGlzLnRoZW4uYmluZCh0aGlzKX0sdHlwZW9mIG09PSJmdW5jdGlvbiImJm0uY2FsbCh0aGlzLHRoaXMuZnVsZmlsbC5iaW5kKHRoaXMpLHRoaXMucmVqZWN0LmJpbmQodGhpcykpfTtHdi5wcm90b3R5cGU9e2Z1bGZpbGw6ZnVuY3Rpb24obSl7cmV0dXJuICRqKHRoaXMsUmosImZ1bGZpbGxWYWx1ZSIsbSl9LHJlamVjdDpmdW5jdGlvbihtKXtyZXR1cm4gJGoodGhpcyxqaiwicmVqZWN0UmVhc29uIixtKX0sdGhlbjpmdW5jdGlvbihtLGspe3ZhciBTPXRoaXMsTT1uZXcgR3Y7cmV0dXJuIFMub25GdWxmaWxsZWQucHVzaChIaihtLE0sImZ1bGZpbGwiKSksUy5vblJlamVjdGVkLnB1c2goSGooayxNLCJyZWplY3QiKSksemooUyksTS5wcm94eX19O3ZhciAkaj1mdW5jdGlvbihtLGssUyxNKXtyZXR1cm4gbS5zdGF0ZT09PUZqJiYobS5zdGF0ZT1rLG1bU109TSx6aihtKSksbX0semo9ZnVuY3Rpb24obSl7bS5zdGF0ZT09PVJqP3FqKG0sIm9uRnVsZmlsbGVkIixtLmZ1bGZpbGxWYWx1ZSk6bS5zdGF0ZT09PWpqJiZxaihtLCJvblJlamVjdGVkIixtLnJlamVjdFJlYXNvbil9LHFqPWZ1bmN0aW9uKG0sayxTKXtpZihtW2tdLmxlbmd0aCE9PTApe3ZhciBNPW1ba107bVtrXT1bXTt2YXIgTz1mdW5jdGlvbigpe2Zvcih2YXIgJD0wOyQ8TS5sZW5ndGg7JCsrKU1bJF0oUyl9O3R5cGVvZiBzZXRJbW1lZGlhdGU9PSJmdW5jdGlvbiI/c2V0SW1tZWRpYXRlKE8pOnNldFRpbWVvdXQoTywwKX19LEhqPWZ1bmN0aW9uKG0sayxTKXtyZXR1cm4gZnVuY3Rpb24oTSl7aWYodHlwZW9mIG0hPSJmdW5jdGlvbiIpa1tTXS5jYWxsKGssTSk7ZWxzZXt2YXIgTzt0cnl7Tz1tKE0pfWNhdGNoKE4pe2sucmVqZWN0KE4pO3JldHVybn12ZWUoayxPKX19fSx2ZWU9ZnVuY3Rpb24geChtLGspe2lmKG09PT1rfHxtLnByb3h5PT09ayl7bS5yZWplY3QobmV3IFR5cGVFcnJvcigiY2Fubm90IHJlc29sdmUgcHJvbWlzZSB3aXRoIGl0c2VsZiIpKTtyZXR1cm59dmFyIFM7aWYodShrKT09PSJvYmplY3QiJiZrIT09bnVsbHx8dHlwZW9mIGs9PSJmdW5jdGlvbiIpdHJ5e1M9ay50aGVufWNhdGNoKE8pe20ucmVqZWN0KE8pO3JldHVybn1pZih0eXBlb2YgUz09ImZ1bmN0aW9uIil7dmFyIE09ITE7dHJ5e1MuY2FsbChrLGZ1bmN0aW9uKE8pe018fChNPSEwLE89PT1rP20ucmVqZWN0KG5ldyBUeXBlRXJyb3IoImNpcmN1bGFyIHRoZW5hYmxlIGNoYWluIikpOngobSxPKSl9LGZ1bmN0aW9uKE8pe018fChNPSEwLG0ucmVqZWN0KE8pKX0pfWNhdGNoKE8pe018fG0ucmVqZWN0KE8pfXJldHVybn1tLmZ1bGZpbGwoayl9O0d2LmFsbD1mdW5jdGlvbih4KXtyZXR1cm4gbmV3IEd2KGZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPW5ldyBBcnJheSh4Lmxlbmd0aCksTT0wLE89ZnVuY3Rpb24oSCxxKXtTW0hdPXEsTSsrLE09PT14Lmxlbmd0aCYmbShTKX0sTj0wO048eC5sZW5ndGg7TisrKShmdW5jdGlvbigkKXt2YXIgSD14WyRdLHE9SCE9bnVsbCYmSC50aGVuIT1udWxsO2lmKHEpSC50aGVuKGZ1bmN0aW9uKFope08oJCxaKX0sZnVuY3Rpb24oWil7ayhaKX0pO2Vsc2V7dmFyIFk9SDtPKCQsWSl9fSkoTil9KX0sR3YucmVzb2x2ZT1mdW5jdGlvbih4KXtyZXR1cm4gbmV3IEd2KGZ1bmN0aW9uKG0sayl7bSh4KX0pfSxHdi5yZWplY3Q9ZnVuY3Rpb24oeCl7cmV0dXJuIG5ldyBHdihmdW5jdGlvbihtLGspe2soeCl9KX07dmFyIGk4PXR5cGVvZiBQcm9taXNlPCJ1Ij9Qcm9taXNlOkd2LGRJPWZ1bmN0aW9uKG0sayxTKXt2YXIgTT1QZShtKSxPPSFNLE49dGhpcy5fcHJpdmF0ZT15dCh7ZHVyYXRpb246MWUzfSxrLFMpO2lmKE4udGFyZ2V0PW0sTi5zdHlsZT1OLnN0eWxlfHxOLmNzcyxOLnN0YXJ0ZWQ9ITEsTi5wbGF5aW5nPSExLE4uaG9va2VkPSExLE4uYXBwbHlpbmc9ITEsTi5wcm9ncmVzcz0wLE4uY29tcGxldGVzPVtdLE4uZnJhbWVzPVtdLE4uY29tcGxldGUmJmFlKE4uY29tcGxldGUpJiZOLmNvbXBsZXRlcy5wdXNoKE4uY29tcGxldGUpLE8pe3ZhciAkPW0ucG9zaXRpb24oKTtOLnN0YXJ0UG9zaXRpb249Ti5zdGFydFBvc2l0aW9ufHx7eDokLngseTokLnl9LE4uc3RhcnRTdHlsZT1OLnN0YXJ0U3R5bGV8fG0uY3koKS5zdHlsZSgpLmdldEFuaW1hdGlvblN0YXJ0U3R5bGUobSxOLnN0eWxlKX1pZihNKXt2YXIgSD1tLnBhbigpO04uc3RhcnRQYW49e3g6SC54LHk6SC55fSxOLnN0YXJ0Wm9vbT1tLnpvb20oKX10aGlzLmxlbmd0aD0xLHRoaXNbMF09dGhpc30sZzU9ZEkucHJvdG90eXBlO3l0KGc1LHtpbnN0YW5jZVN0cmluZzpmdW5jdGlvbigpe3JldHVybiJhbmltYXRpb24ifSxob29rOmZ1bmN0aW9uKCl7dmFyIG09dGhpcy5fcHJpdmF0ZTtpZighbS5ob29rZWQpe3ZhciBrLFM9bS50YXJnZXQuX3ByaXZhdGUuYW5pbWF0aW9uO20ucXVldWU/az1TLnF1ZXVlOms9Uy5jdXJyZW50LGsucHVzaCh0aGlzKSx4ZShtLnRhcmdldCkmJm0udGFyZ2V0LmN5KCkuYWRkVG9BbmltYXRpb25Qb29sKG0udGFyZ2V0KSxtLmhvb2tlZD0hMH1yZXR1cm4gdGhpc30scGxheTpmdW5jdGlvbigpe3ZhciBtPXRoaXMuX3ByaXZhdGU7cmV0dXJuIG0ucHJvZ3Jlc3M9PT0xJiYobS5wcm9ncmVzcz0wKSxtLnBsYXlpbmc9ITAsbS5zdGFydGVkPSExLG0uc3RvcHBlZD0hMSx0aGlzLmhvb2soKSx0aGlzfSxwbGF5aW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucGxheWluZ30sYXBwbHk6ZnVuY3Rpb24oKXt2YXIgbT10aGlzLl9wcml2YXRlO3JldHVybiBtLmFwcGx5aW5nPSEwLG0uc3RhcnRlZD0hMSxtLnN0b3BwZWQ9ITEsdGhpcy5ob29rKCksdGhpc30sYXBwbHlpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5hcHBseWluZ30scGF1c2U6ZnVuY3Rpb24oKXt2YXIgbT10aGlzLl9wcml2YXRlO3JldHVybiBtLnBsYXlpbmc9ITEsbS5zdGFydGVkPSExLHRoaXN9LHN0b3A6ZnVuY3Rpb24oKXt2YXIgbT10aGlzLl9wcml2YXRlO3JldHVybiBtLnBsYXlpbmc9ITEsbS5zdGFydGVkPSExLG0uc3RvcHBlZD0hMCx0aGlzfSxyZXdpbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9ncmVzcygwKX0sZmFzdGZvcndhcmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9ncmVzcygxKX0sdGltZTpmdW5jdGlvbihtKXt2YXIgaz10aGlzLl9wcml2YXRlO3JldHVybiBtPT09dm9pZCAwP2sucHJvZ3Jlc3Mqay5kdXJhdGlvbjp0aGlzLnByb2dyZXNzKG0vay5kdXJhdGlvbil9LHByb2dyZXNzOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGUsUz1rLnBsYXlpbmc7cmV0dXJuIG09PT12b2lkIDA/ay5wcm9ncmVzczooUyYmdGhpcy5wYXVzZSgpLGsucHJvZ3Jlc3M9bSxrLnN0YXJ0ZWQ9ITEsUyYmdGhpcy5wbGF5KCksdGhpcyl9LGNvbXBsZXRlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnByb2dyZXNzPT09MX0scmV2ZXJzZTpmdW5jdGlvbigpe3ZhciBtPXRoaXMuX3ByaXZhdGUsaz1tLnBsYXlpbmc7ayYmdGhpcy5wYXVzZSgpLG0ucHJvZ3Jlc3M9MS1tLnByb2dyZXNzLG0uc3RhcnRlZD0hMTt2YXIgUz1mdW5jdGlvbihxLFkpe3ZhciBaPW1bcV07WiE9bnVsbCYmKG1bcV09bVtZXSxtW1ldPVopfTtpZihTKCJ6b29tIiwic3RhcnRab29tIiksUygicGFuIiwic3RhcnRQYW4iKSxTKCJwb3NpdGlvbiIsInN0YXJ0UG9zaXRpb24iKSxtLnN0eWxlKWZvcih2YXIgTT0wO008bS5zdHlsZS5sZW5ndGg7TSsrKXt2YXIgTz1tLnN0eWxlW01dLE49Ty5uYW1lLCQ9bS5zdGFydFN0eWxlW05dO20uc3RhcnRTdHlsZVtOXT1PLG0uc3R5bGVbTV09JH1yZXR1cm4gayYmdGhpcy5wbGF5KCksdGhpc30scHJvbWlzZTpmdW5jdGlvbihtKXt2YXIgaz10aGlzLl9wcml2YXRlLFM7c3dpdGNoKG0pe2Nhc2UiZnJhbWUiOlM9ay5mcmFtZXM7YnJlYWs7ZGVmYXVsdDpjYXNlImNvbXBsZXRlIjpjYXNlImNvbXBsZXRlZCI6Uz1rLmNvbXBsZXRlc31yZXR1cm4gbmV3IGk4KGZ1bmN0aW9uKE0sTyl7Uy5wdXNoKGZ1bmN0aW9uKCl7TSgpfSl9KX19KSxnNS5jb21wbGV0ZT1nNS5jb21wbGV0ZWQsZzUucnVuPWc1LnBsYXksZzUucnVubmluZz1nNS5wbGF5aW5nO3ZhciB3ZWU9e2FuaW1hdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGs9dGhpcyxTPWsubGVuZ3RoIT09dm9pZCAwLE09Uz9rOltrXSxPPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXM7aWYoIU8uc3R5bGVFbmFibGVkKCkpcmV0dXJuITE7dmFyIE49TVswXTtpZihOKXJldHVybiBOLl9wcml2YXRlLmFuaW1hdGlvbi5jdXJyZW50Lmxlbmd0aD4wfX0sY2xlYXJRdWV1ZTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3ZhciBrPXRoaXMsUz1rLmxlbmd0aCE9PXZvaWQgMCxNPVM/azpba10sTz10aGlzLl9wcml2YXRlLmN5fHx0aGlzO2lmKCFPLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO2Zvcih2YXIgTj0wO048TS5sZW5ndGg7TisrKXt2YXIgJD1NW05dOyQuX3ByaXZhdGUuYW5pbWF0aW9uLnF1ZXVlPVtdfXJldHVybiB0aGlzfX0sZGVsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oayxTKXt2YXIgTT10aGlzLl9wcml2YXRlLmN5fHx0aGlzO3JldHVybiBNLnN0eWxlRW5hYmxlZCgpP3RoaXMuYW5pbWF0ZSh7ZGVsYXk6ayxkdXJhdGlvbjprLGNvbXBsZXRlOlN9KTp0aGlzfX0sZGVsYXlBbmltYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oayxTKXt2YXIgTT10aGlzLl9wcml2YXRlLmN5fHx0aGlzO3JldHVybiBNLnN0eWxlRW5hYmxlZCgpP3RoaXMuYW5pbWF0aW9uKHtkZWxheTprLGR1cmF0aW9uOmssY29tcGxldGU6U30pOnRoaXN9fSxhbmltYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oayxTKXt2YXIgTT10aGlzLE89TS5sZW5ndGghPT12b2lkIDAsTj1PP006W01dLCQ9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcyxIPSFPLHE9IUg7aWYoISQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIFk9JC5zdHlsZSgpO2s9eXQoe30sayxTKTt2YXIgWj1PYmplY3Qua2V5cyhrKS5sZW5ndGg9PT0wO2lmKFopcmV0dXJuIG5ldyBkSShOWzBdLGspO3N3aXRjaChrLmR1cmF0aW9uPT09dm9pZCAwJiYoay5kdXJhdGlvbj00MDApLGsuZHVyYXRpb24pe2Nhc2Uic2xvdyI6ay5kdXJhdGlvbj02MDA7YnJlYWs7Y2FzZSJmYXN0IjprLmR1cmF0aW9uPTIwMDticmVha31pZihxJiYoay5zdHlsZT1ZLmdldFByb3BzTGlzdChrLnN0eWxlfHxrLmNzcyksay5jc3M9dm9pZCAwKSxxJiZrLnJlbmRlcmVkUG9zaXRpb24hPW51bGwpe3ZhciBjZT1rLnJlbmRlcmVkUG9zaXRpb24sdmU9JC5wYW4oKSxtZT0kLnpvb20oKTtrLnBvc2l0aW9uPWhqKGNlLG1lLHZlKX1pZihIJiZrLnBhbkJ5IT1udWxsKXt2YXIgTGU9ay5wYW5CeSxfZT0kLnBhbigpO2sucGFuPXt4Ol9lLngrTGUueCx5Ol9lLnkrTGUueX19dmFyIEVlPWsuY2VudGVyfHxrLmNlbnRyZTtpZihIJiZFZSE9bnVsbCl7dmFyIEJlPSQuZ2V0Q2VudGVyUGFuKEVlLmVsZXMsay56b29tKTtCZSE9bnVsbCYmKGsucGFuPUJlKX1pZihIJiZrLmZpdCE9bnVsbCl7dmFyIFJlPWsuZml0LFZlPSQuZ2V0Rml0Vmlld3BvcnQoUmUuZWxlc3x8UmUuYm91bmRpbmdCb3gsUmUucGFkZGluZyk7VmUhPW51bGwmJihrLnBhbj1WZS5wYW4say56b29tPVZlLnpvb20pfWlmKEgmJnNlKGsuem9vbSkpe3ZhciBjdD0kLmdldFpvb21lZFZpZXdwb3J0KGsuem9vbSk7Y3QhPW51bGw/KGN0Lnpvb21lZCYmKGsuem9vbT1jdC56b29tKSxjdC5wYW5uZWQmJihrLnBhbj1jdC5wYW4pKTprLnpvb209bnVsbH1yZXR1cm4gbmV3IGRJKE5bMF0sayl9fSxhbmltYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGssUyl7dmFyIE09dGhpcyxPPU0ubGVuZ3RoIT09dm9pZCAwLE49Tz9NOltNXSwkPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXM7aWYoISQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7UyYmKGs9eXQoe30sayxTKSk7Zm9yKHZhciBIPTA7SDxOLmxlbmd0aDtIKyspe3ZhciBxPU5bSF0sWT1xLmFuaW1hdGVkKCkmJihrLnF1ZXVlPT09dm9pZCAwfHxrLnF1ZXVlKSxaPXEuYW5pbWF0aW9uKGssWT97cXVldWU6ITB9OnZvaWQgMCk7Wi5wbGF5KCl9cmV0dXJuIHRoaXN9fSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGssUyl7dmFyIE09dGhpcyxPPU0ubGVuZ3RoIT09dm9pZCAwLE49Tz9NOltNXSwkPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXM7aWYoISQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7Zm9yKHZhciBIPTA7SDxOLmxlbmd0aDtIKyspe2Zvcih2YXIgcT1OW0hdLFk9cS5fcHJpdmF0ZSxaPVkuYW5pbWF0aW9uLmN1cnJlbnQsY2U9MDtjZTxaLmxlbmd0aDtjZSsrKXt2YXIgdmU9WltjZV0sbWU9dmUuX3ByaXZhdGU7UyYmKG1lLmR1cmF0aW9uPTApfWsmJihZLmFuaW1hdGlvbi5xdWV1ZT1bXSksU3x8KFkuYW5pbWF0aW9uLmN1cnJlbnQ9W10pfXJldHVybiAkLm5vdGlmeSgiZHJhdyIpLHRoaXN9fX0seWVlPUFycmF5LmlzQXJyYXksa1M9eWVlLFZqPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLHhlZT0vXlx3KiQvO2Z1bmN0aW9uIGtlZSh4LG0pe2lmKGtTKHgpKXJldHVybiExO3ZhciBrPXR5cGVvZiB4O3JldHVybiBrPT0ibnVtYmVyInx8az09InN5bWJvbCJ8fGs9PSJib29sZWFuInx8eD09bnVsbHx8WnIoeCk/ITA6eGVlLnRlc3QoeCl8fCFWai50ZXN0KHgpfHxtIT1udWxsJiZ4IGluIE9iamVjdChtKX12YXIgRWVlPWtlZSxUZWU9IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLENlZT0iW29iamVjdCBGdW5jdGlvbl0iLFNlZT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLF9lZT0iW29iamVjdCBQcm94eV0iO2Z1bmN0aW9uIEFlZSh4KXtpZighQXQoeCkpcmV0dXJuITE7dmFyIG09Y2QoeCk7cmV0dXJuIG09PUNlZXx8bT09U2VlfHxtPT1UZWV8fG09PV9lZX12YXIgTGVlPUFlZSxNZWU9JG9bIl9fY29yZS1qc19zaGFyZWRfXyJdLEVTPU1lZSxVaj1mdW5jdGlvbigpe3ZhciB4PS9bXi5dKyQvLmV4ZWMoRVMmJkVTLmtleXMmJkVTLmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4geD8iU3ltYm9sKHNyYylfMS4iK3g6IiJ9KCk7ZnVuY3Rpb24gRGVlKHgpe3JldHVybiEhVWomJlVqIGluIHh9dmFyIEllZT1EZWUsT2VlPUZ1bmN0aW9uLnByb3RvdHlwZSxOZWU9T2VlLnRvU3RyaW5nO2Z1bmN0aW9uIFBlZSh4KXtpZih4IT1udWxsKXt0cnl7cmV0dXJuIE5lZS5jYWxsKHgpfWNhdGNoe310cnl7cmV0dXJuIHgrIiJ9Y2F0Y2h7fX1yZXR1cm4iIn12YXIgR2o9UGVlLEtqPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxCZWU9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sV2o9RnVuY3Rpb24ucHJvdG90eXBlLFlqPU9iamVjdC5wcm90b3R5cGUsRmVlPVdqLnRvU3RyaW5nLFJlZT1Zai5oYXNPd25Qcm9wZXJ0eSxqZWU9UmVnRXhwKCJeIitGZWUuY2FsbChSZWUpLnJlcGxhY2UoS2osIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7ZnVuY3Rpb24gJGVlKHgpe2lmKCFBdCh4KXx8SWVlKHgpKXJldHVybiExO3ZhciBtPUxlZSh4KT9qZWU6QmVlO3JldHVybiBtLnRlc3QoR2ooeCkpfXZhciB6ZWU9JGVlO2Z1bmN0aW9uIHFlZSh4LG0pe3JldHVybiB4PT1udWxsP3ZvaWQgMDp4W21dfXZhciBIZWU9cWVlO2Z1bmN0aW9uIFZlZSh4LG0pe3ZhciBrPUhlZSh4LG0pO3JldHVybiB6ZWUoayk/azp2b2lkIDB9dmFyIGdJPVZlZSxVZWU9Z0koT2JqZWN0LCJjcmVhdGUiKSxYOT1VZWU7ZnVuY3Rpb24gWGooKXt0aGlzLl9fZGF0YV9fPVg5P1g5KG51bGwpOnt9LHRoaXMuc2l6ZT0wfXZhciBHZWU9WGo7ZnVuY3Rpb24gS2VlKHgpe3ZhciBtPXRoaXMuaGFzKHgpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1t4XTtyZXR1cm4gdGhpcy5zaXplLT1tPzE6MCxtfXZhciBXZWU9S2VlLFllZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIsWGVlPU9iamVjdC5wcm90b3R5cGUsUWVlPVhlZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBKZWUoeCl7dmFyIG09dGhpcy5fX2RhdGFfXztpZihYOSl7dmFyIGs9bVt4XTtyZXR1cm4gaz09PVllZT92b2lkIDA6a31yZXR1cm4gUWVlLmNhbGwobSx4KT9tW3hdOnZvaWQgMH12YXIgWmVlPUplZSxldGU9T2JqZWN0LnByb3RvdHlwZSx0dGU9ZXRlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIG50ZSh4KXt2YXIgbT10aGlzLl9fZGF0YV9fO3JldHVybiBYOT9tW3hdIT09dm9pZCAwOnR0ZS5jYWxsKG0seCl9dmFyIHJ0ZT1udGUsaXRlPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjtmdW5jdGlvbiBzdGUoeCxtKXt2YXIgaz10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKHgpPzA6MSxrW3hdPVg5JiZtPT09dm9pZCAwP2l0ZTptLHRoaXN9dmFyIGF0ZT1zdGU7ZnVuY3Rpb24gczgoeCl7dmFyIG09LTEsaz14PT1udWxsPzA6eC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK208azspe3ZhciBTPXhbbV07dGhpcy5zZXQoU1swXSxTWzFdKX19czgucHJvdG90eXBlLmNsZWFyPUdlZSxzOC5wcm90b3R5cGUuZGVsZXRlPVdlZSxzOC5wcm90b3R5cGUuZ2V0PVplZSxzOC5wcm90b3R5cGUuaGFzPXJ0ZSxzOC5wcm90b3R5cGUuc2V0PWF0ZTt2YXIgUWo9czg7ZnVuY3Rpb24gb3RlKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH12YXIgY3RlPW90ZTtmdW5jdGlvbiB1dGUoeCxtKXtyZXR1cm4geD09PW18fHghPT14JiZtIT09bX12YXIgSmo9dXRlO2Z1bmN0aW9uIGx0ZSh4LG0pe2Zvcih2YXIgaz14Lmxlbmd0aDtrLS07KWlmKEpqKHhba11bMF0sbSkpcmV0dXJuIGs7cmV0dXJuLTF9dmFyIFRTPWx0ZSxodGU9QXJyYXkucHJvdG90eXBlLGZ0ZT1odGUuc3BsaWNlO2Z1bmN0aW9uIGR0ZSh4KXt2YXIgbT10aGlzLl9fZGF0YV9fLGs9VFMobSx4KTtpZihrPDApcmV0dXJuITE7dmFyIFM9bS5sZW5ndGgtMTtyZXR1cm4gaz09Uz9tLnBvcCgpOmZ0ZS5jYWxsKG0saywxKSwtLXRoaXMuc2l6ZSwhMH12YXIgZ3RlPWR0ZTtmdW5jdGlvbiBwdGUoeCl7dmFyIG09dGhpcy5fX2RhdGFfXyxrPVRTKG0seCk7cmV0dXJuIGs8MD92b2lkIDA6bVtrXVsxXX12YXIgYnRlPXB0ZTtmdW5jdGlvbiBtdGUoeCl7cmV0dXJuIFRTKHRoaXMuX19kYXRhX18seCk+LTF9dmFyIHZ0ZT1tdGU7ZnVuY3Rpb24gd3RlKHgsbSl7dmFyIGs9dGhpcy5fX2RhdGFfXyxTPVRTKGsseCk7cmV0dXJuIFM8MD8oKyt0aGlzLnNpemUsay5wdXNoKFt4LG1dKSk6a1tTXVsxXT1tLHRoaXN9dmFyIHl0ZT13dGU7ZnVuY3Rpb24gYTgoeCl7dmFyIG09LTEsaz14PT1udWxsPzA6eC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK208azspe3ZhciBTPXhbbV07dGhpcy5zZXQoU1swXSxTWzFdKX19YTgucHJvdG90eXBlLmNsZWFyPWN0ZSxhOC5wcm90b3R5cGUuZGVsZXRlPWd0ZSxhOC5wcm90b3R5cGUuZ2V0PWJ0ZSxhOC5wcm90b3R5cGUuaGFzPXZ0ZSxhOC5wcm90b3R5cGUuc2V0PXl0ZTt2YXIgeHRlPWE4LGt0ZT1nSSgkbywiTWFwIiksRXRlPWt0ZTtmdW5jdGlvbiBUdGUoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBRaixtYXA6bmV3KEV0ZXx8eHRlKSxzdHJpbmc6bmV3IFFqfX12YXIgQ3RlPVR0ZTtmdW5jdGlvbiBTdGUoeCl7dmFyIG09dHlwZW9mIHg7cmV0dXJuIG09PSJzdHJpbmcifHxtPT0ibnVtYmVyInx8bT09InN5bWJvbCJ8fG09PSJib29sZWFuIj94IT09Il9fcHJvdG9fXyI6eD09PW51bGx9dmFyIF90ZT1TdGU7ZnVuY3Rpb24gQXRlKHgsbSl7dmFyIGs9eC5fX2RhdGFfXztyZXR1cm4gX3RlKG0pP2tbdHlwZW9mIG09PSJzdHJpbmciPyJzdHJpbmciOiJoYXNoIl06ay5tYXB9dmFyIENTPUF0ZTtmdW5jdGlvbiBMdGUoeCl7dmFyIG09Q1ModGhpcyx4KS5kZWxldGUoeCk7cmV0dXJuIHRoaXMuc2l6ZS09bT8xOjAsbX12YXIgTXRlPUx0ZTtmdW5jdGlvbiBEdGUoeCl7cmV0dXJuIENTKHRoaXMseCkuZ2V0KHgpfXZhciBJdGU9RHRlO2Z1bmN0aW9uIE90ZSh4KXtyZXR1cm4gQ1ModGhpcyx4KS5oYXMoeCl9dmFyIE50ZT1PdGU7ZnVuY3Rpb24gUHRlKHgsbSl7dmFyIGs9Q1ModGhpcyx4KSxTPWsuc2l6ZTtyZXR1cm4gay5zZXQoeCxtKSx0aGlzLnNpemUrPWsuc2l6ZT09Uz8wOjEsdGhpc312YXIgQnRlPVB0ZTtmdW5jdGlvbiBvOCh4KXt2YXIgbT0tMSxrPXg9PW51bGw/MDp4Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrbTxrOyl7dmFyIFM9eFttXTt0aGlzLnNldChTWzBdLFNbMV0pfX1vOC5wcm90b3R5cGUuY2xlYXI9Q3RlLG84LnByb3RvdHlwZS5kZWxldGU9TXRlLG84LnByb3RvdHlwZS5nZXQ9SXRlLG84LnByb3RvdHlwZS5oYXM9TnRlLG84LnByb3RvdHlwZS5zZXQ9QnRlO3ZhciBaaj1vOCxGdGU9IkV4cGVjdGVkIGEgZnVuY3Rpb24iO2Z1bmN0aW9uIHBJKHgsbSl7aWYodHlwZW9mIHghPSJmdW5jdGlvbiJ8fG0hPW51bGwmJnR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoRnRlKTt2YXIgaz1mdW5jdGlvbigpe3ZhciBTPWFyZ3VtZW50cyxNPW0/bS5hcHBseSh0aGlzLFMpOlNbMF0sTz1rLmNhY2hlO2lmKE8uaGFzKE0pKXJldHVybiBPLmdldChNKTt2YXIgTj14LmFwcGx5KHRoaXMsUyk7cmV0dXJuIGsuY2FjaGU9Ty5zZXQoTSxOKXx8TyxOfTtyZXR1cm4gay5jYWNoZT1uZXcocEkuQ2FjaGV8fFpqKSxrfXBJLkNhY2hlPVpqO3ZhciBSdGU9cEksanRlPTUwMDtmdW5jdGlvbiAkdGUoeCl7dmFyIG09UnRlKHgsZnVuY3Rpb24oUyl7cmV0dXJuIGsuc2l6ZT09PWp0ZSYmay5jbGVhcigpLFN9KSxrPW0uY2FjaGU7cmV0dXJuIG19dmFyIHp0ZT0kdGUscXRlPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLEh0ZT0vXFwoXFwpPy9nLFZ0ZT16dGUoZnVuY3Rpb24oeCl7dmFyIG09W107cmV0dXJuIHguY2hhckNvZGVBdCgwKT09PTQ2JiZtLnB1c2goIiIpLHgucmVwbGFjZShxdGUsZnVuY3Rpb24oayxTLE0sTyl7bS5wdXNoKE0/Ty5yZXBsYWNlKEh0ZSwiJDEiKTpTfHxrKX0pLG19KSxlJD1WdGU7ZnVuY3Rpb24gVXRlKHgsbSl7Zm9yKHZhciBrPS0xLFM9eD09bnVsbD8wOngubGVuZ3RoLE09QXJyYXkoUyk7KytrPFM7KU1ba109bSh4W2tdLGsseCk7cmV0dXJuIE19dmFyIHQkPVV0ZSxHdGU9MS8wLG4kPUJjP0JjLnByb3RvdHlwZTp2b2lkIDAsciQ9biQ/biQudG9TdHJpbmc6dm9pZCAwO2Z1bmN0aW9uIGkkKHgpe2lmKHR5cGVvZiB4PT0ic3RyaW5nIilyZXR1cm4geDtpZihrUyh4KSlyZXR1cm4gdCQoeCxpJCkrIiI7aWYoWnIoeCkpcmV0dXJuIHIkP3IkLmNhbGwoeCk6IiI7dmFyIG09eCsiIjtyZXR1cm4gbT09IjAiJiYxL3g9PS1HdGU/Ii0wIjptfXZhciBLdGU9aSQ7ZnVuY3Rpb24gV3RlKHgpe3JldHVybiB4PT1udWxsPyIiOkt0ZSh4KX12YXIgcyQ9V3RlO2Z1bmN0aW9uIFl0ZSh4LG0pe3JldHVybiBrUyh4KT94OkVlZSh4LG0pP1t4XTplJChzJCh4KSl9dmFyIGEkPVl0ZSxYdGU9MS8wO2Z1bmN0aW9uIFF0ZSh4KXtpZih0eXBlb2YgeD09InN0cmluZyJ8fFpyKHgpKXJldHVybiB4O3ZhciBtPXgrIiI7cmV0dXJuIG09PSIwIiYmMS94PT0tWHRlPyItMCI6bX12YXIgYkk9UXRlO2Z1bmN0aW9uIEp0ZSh4LG0pe209YSQobSx4KTtmb3IodmFyIGs9MCxTPW0ubGVuZ3RoO3ghPW51bGwmJms8UzspeD14W2JJKG1baysrXSldO3JldHVybiBrJiZrPT1TP3g6dm9pZCAwfXZhciBadGU9SnRlO2Z1bmN0aW9uIGVuZSh4LG0sayl7dmFyIFM9eD09bnVsbD92b2lkIDA6WnRlKHgsbSk7cmV0dXJuIFM9PT12b2lkIDA/azpTfXZhciB0bmU9ZW5lLG5uZT1mdW5jdGlvbigpe3RyeXt2YXIgeD1nSShPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIHgoe30sIiIse30pLHh9Y2F0Y2h7fX0oKSxvJD1ubmU7ZnVuY3Rpb24gcm5lKHgsbSxrKXttPT0iX19wcm90b19fIiYmbyQ/byQoeCxtLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTprLHdyaXRhYmxlOiEwfSk6eFttXT1rfXZhciBpbmU9cm5lLHNuZT1PYmplY3QucHJvdG90eXBlLHB3ZT1zbmUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gYW5lKHgsbSxrKXt2YXIgUz14W21dOyghKHB3ZS5jYWxsKHgsbSkmJkpqKFMsaykpfHxrPT09dm9pZCAwJiYhKG0gaW4geCkpJiZpbmUoeCxtLGspfXZhciBvbmU9YW5lLGNuZT05MDA3MTk5MjU0NzQwOTkxLHVuZT0vXig/OjB8WzEtOV1cZCopJC87ZnVuY3Rpb24gbG5lKHgsbSl7dmFyIGs9dHlwZW9mIHg7cmV0dXJuIG09bT8/Y25lLCEhbSYmKGs9PSJudW1iZXIifHxrIT0ic3ltYm9sIiYmdW5lLnRlc3QoeCkpJiZ4Pi0xJiZ4JTE9PTAmJng8bX12YXIgaG5lPWxuZTtmdW5jdGlvbiBmbmUoeCxtLGssUyl7aWYoIUF0KHgpKXJldHVybiB4O209YSQobSx4KTtmb3IodmFyIE09LTEsTz1tLmxlbmd0aCxOPU8tMSwkPXg7JCE9bnVsbCYmKytNPE87KXt2YXIgSD1iSShtW01dKSxxPWs7aWYoSD09PSJfX3Byb3RvX18ifHxIPT09ImNvbnN0cnVjdG9yInx8SD09PSJwcm90b3R5cGUiKXJldHVybiB4O2lmKE0hPU4pe3ZhciBZPSRbSF07cT1TP1MoWSxILCQpOnZvaWQgMCxxPT09dm9pZCAwJiYocT1BdChZKT9ZOmhuZShtW00rMV0pP1tdOnt9KX1vbmUoJCxILHEpLCQ9JFtIXX1yZXR1cm4geH12YXIgZG5lPWZuZTtmdW5jdGlvbiBnbmUoeCxtLGspe3JldHVybiB4PT1udWxsP3g6ZG5lKHgsbSxrKX12YXIgcG5lPWduZTtmdW5jdGlvbiBibmUoeCxtKXt2YXIgaz0tMSxTPXgubGVuZ3RoO2ZvcihtfHwobT1BcnJheShTKSk7KytrPFM7KW1ba109eFtrXTtyZXR1cm4gbX12YXIgbW5lPWJuZTtmdW5jdGlvbiB2bmUoeCl7cmV0dXJuIGtTKHgpP3QkKHgsYkkpOlpyKHgpP1t4XTptbmUoZSQocyQoeCkpKX12YXIgd25lPXZuZSx5bmU9e2RhdGE6ZnVuY3Rpb24obSl7dmFyIGs9e2ZpZWxkOiJkYXRhIixiaW5kaW5nRXZlbnQ6ImRhdGEiLGFsbG93QmluZGluZzohMSxhbGxvd1NldHRpbmc6ITEsYWxsb3dHZXR0aW5nOiExLHNldHRpbmdFdmVudDoiZGF0YSIsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITEsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsaW1tdXRhYmxlS2V5czp7fSx1cGRhdGVTdHlsZTohMSxiZWZvcmVHZXQ6ZnVuY3Rpb24oTSl7fSxiZWZvcmVTZXQ6ZnVuY3Rpb24oTSxPKXt9LG9uU2V0OmZ1bmN0aW9uKE0pe30sY2FuU2V0OmZ1bmN0aW9uKE0pe3JldHVybiEwfX07cmV0dXJuIG09eXQoe30sayxtKSxmdW5jdGlvbihNLE8pe3ZhciBOPW0sJD10aGlzLEg9JC5sZW5ndGghPT12b2lkIDAscT1IPyQ6WyRdLFk9SD8kWzBdOiQ7aWYoYmUoTSkpe3ZhciBaPU0uaW5kZXhPZigiLiIpIT09LTEsY2U9WiYmd25lKE0pO2lmKE4uYWxsb3dHZXR0aW5nJiZPPT09dm9pZCAwKXt2YXIgdmU7cmV0dXJuIFkmJihOLmJlZm9yZUdldChZKSxjZSYmWS5fcHJpdmF0ZVtOLmZpZWxkXVtNXT09PXZvaWQgMD92ZT10bmUoWS5fcHJpdmF0ZVtOLmZpZWxkXSxjZSk6dmU9WS5fcHJpdmF0ZVtOLmZpZWxkXVtNXSksdmV9ZWxzZSBpZihOLmFsbG93U2V0dGluZyYmTyE9PXZvaWQgMCl7dmFyIG1lPSFOLmltbXV0YWJsZUtleXNbTV07aWYobWUpe3ZhciBMZT1iKHt9LE0sTyk7Ti5iZWZvcmVTZXQoJCxMZSk7Zm9yKHZhciBfZT0wLEVlPXEubGVuZ3RoO19lPEVlO19lKyspe3ZhciBCZT1xW19lXTtOLmNhblNldChCZSkmJihjZSYmWS5fcHJpdmF0ZVtOLmZpZWxkXVtNXT09PXZvaWQgMD9wbmUoQmUuX3ByaXZhdGVbTi5maWVsZF0sY2UsTyk6QmUuX3ByaXZhdGVbTi5maWVsZF1bTV09Tyl9Ti51cGRhdGVTdHlsZSYmJC51cGRhdGVTdHlsZSgpLE4ub25TZXQoJCksTi5zZXR0aW5nVHJpZ2dlcnNFdmVudCYmJFtOLnRyaWdnZXJGbk5hbWVdKE4uc2V0dGluZ0V2ZW50KX19fWVsc2UgaWYoTi5hbGxvd1NldHRpbmcmJnNlKE0pKXt2YXIgUmU9TSxWZSxjdCxzdD1PYmplY3Qua2V5cyhSZSk7Ti5iZWZvcmVTZXQoJCxSZSk7Zm9yKHZhciBZZT0wO1llPHN0Lmxlbmd0aDtZZSsrKXtWZT1zdFtZZV0sY3Q9UmVbVmVdO3ZhciBtdD0hTi5pbW11dGFibGVLZXlzW1ZlXTtpZihtdClmb3IodmFyIEplPTA7SmU8cS5sZW5ndGg7SmUrKyl7dmFyIEx0PXFbSmVdO04uY2FuU2V0KEx0KSYmKEx0Ll9wcml2YXRlW04uZmllbGRdW1ZlXT1jdCl9fU4udXBkYXRlU3R5bGUmJiQudXBkYXRlU3R5bGUoKSxOLm9uU2V0KCQpLE4uc2V0dGluZ1RyaWdnZXJzRXZlbnQmJiRbTi50cmlnZ2VyRm5OYW1lXShOLnNldHRpbmdFdmVudCl9ZWxzZSBpZihOLmFsbG93QmluZGluZyYmYWUoTSkpe3ZhciBNdD1NOyQub24oTi5iaW5kaW5nRXZlbnQsTXQpfWVsc2UgaWYoTi5hbGxvd0dldHRpbmcmJk09PT12b2lkIDApe3ZhciB1dDtyZXR1cm4gWSYmKE4uYmVmb3JlR2V0KFkpLHV0PVkuX3ByaXZhdGVbTi5maWVsZF0pLHV0fXJldHVybiAkfX0scmVtb3ZlRGF0YTpmdW5jdGlvbihtKXt2YXIgaz17ZmllbGQ6ImRhdGEiLGV2ZW50OiJkYXRhIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITEsaW1tdXRhYmxlS2V5czp7fX07cmV0dXJuIG09eXQoe30sayxtKSxmdW5jdGlvbihNKXt2YXIgTz1tLE49dGhpcywkPU4ubGVuZ3RoIT09dm9pZCAwLEg9JD9OOltOXTtpZihiZShNKSl7Zm9yKHZhciBxPU0uc3BsaXQoL1xzKy8pLFk9cS5sZW5ndGgsWj0wO1o8WTtaKyspe3ZhciBjZT1xW1pdO2lmKCFTZShjZSkpe3ZhciB2ZT0hTy5pbW11dGFibGVLZXlzW2NlXTtpZih2ZSlmb3IodmFyIG1lPTAsTGU9SC5sZW5ndGg7bWU8TGU7bWUrKylIW21lXS5fcHJpdmF0ZVtPLmZpZWxkXVtjZV09dm9pZCAwfX1PLnRyaWdnZXJFdmVudCYmTltPLnRyaWdnZXJGbk5hbWVdKE8uZXZlbnQpfWVsc2UgaWYoTT09PXZvaWQgMCl7Zm9yKHZhciBfZT0wLEVlPUgubGVuZ3RoO19lPEVlO19lKyspZm9yKHZhciBCZT1IW19lXS5fcHJpdmF0ZVtPLmZpZWxkXSxSZT1PYmplY3Qua2V5cyhCZSksVmU9MDtWZTxSZS5sZW5ndGg7VmUrKyl7dmFyIGN0PVJlW1ZlXSxzdD0hTy5pbW11dGFibGVLZXlzW2N0XTtzdCYmKEJlW2N0XT12b2lkIDApfU8udHJpZ2dlckV2ZW50JiZOW08udHJpZ2dlckZuTmFtZV0oTy5ldmVudCl9cmV0dXJuIE59fX0seG5lPXtldmVudEFsaWFzZXNPbjpmdW5jdGlvbihtKXt2YXIgaz1tO2suYWRkTGlzdGVuZXI9ay5saXN0ZW49ay5iaW5kPWsub24say51bmxpc3Rlbj1rLnVuYmluZD1rLm9mZj1rLnJlbW92ZUxpc3RlbmVyLGsudHJpZ2dlcj1rLmVtaXQsay5wb249ay5wcm9taXNlT249ZnVuY3Rpb24oUyxNKXt2YXIgTz10aGlzLE49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiBuZXcgaTgoZnVuY3Rpb24oJCxIKXt2YXIgcT1mdW5jdGlvbih2ZSl7Ty5vZmYuYXBwbHkoTyxaKSwkKHZlKX0sWT1OLmNvbmNhdChbcV0pLFo9WS5jb25jYXQoW10pO08ub24uYXBwbHkoTyxZKX0pfX19LGZ1PXt9O1t3ZWUseW5lLHhuZV0uZm9yRWFjaChmdW5jdGlvbih4KXt5dChmdSx4KX0pO3ZhciBrbmU9e2FuaW1hdGU6ZnUuYW5pbWF0ZSgpLGFuaW1hdGlvbjpmdS5hbmltYXRpb24oKSxhbmltYXRlZDpmdS5hbmltYXRlZCgpLGNsZWFyUXVldWU6ZnUuY2xlYXJRdWV1ZSgpLGRlbGF5OmZ1LmRlbGF5KCksZGVsYXlBbmltYXRpb246ZnUuZGVsYXlBbmltYXRpb24oKSxzdG9wOmZ1LnN0b3AoKX0sU1M9e2NsYXNzZXM6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcztpZihtPT09dm9pZCAwKXt2YXIgUz1bXTtyZXR1cm4ga1swXS5fcHJpdmF0ZS5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24obWUpe3JldHVybiBTLnB1c2gobWUpfSksU31lbHNlIG5lKG0pfHwobT0obXx8IiIpLm1hdGNoKC9cUysvZyl8fFtdKTtmb3IodmFyIE09W10sTz1uZXcgUTcobSksTj0wO048ay5sZW5ndGg7TisrKXtmb3IodmFyICQ9a1tOXSxIPSQuX3ByaXZhdGUscT1ILmNsYXNzZXMsWT0hMSxaPTA7WjxtLmxlbmd0aDtaKyspe3ZhciBjZT1tW1pdLHZlPXEuaGFzKGNlKTtpZighdmUpe1k9ITA7YnJlYWt9fVl8fChZPXEuc2l6ZSE9PW0ubGVuZ3RoKSxZJiYoSC5jbGFzc2VzPU8sTS5wdXNoKCQpKX1yZXR1cm4gTS5sZW5ndGg+MCYmdGhpcy5zcGF3bihNKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIiksa30sYWRkQ2xhc3M6ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMudG9nZ2xlQ2xhc3MobSwhMCl9LGhhc0NsYXNzOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXNbMF07cmV0dXJuIGshPW51bGwmJmsuX3ByaXZhdGUuY2xhc3Nlcy5oYXMobSl9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKG0sayl7bmUobSl8fChtPW0ubWF0Y2goL1xTKy9nKXx8W10pO2Zvcih2YXIgUz10aGlzLE09az09PXZvaWQgMCxPPVtdLE49MCwkPVMubGVuZ3RoO048JDtOKyspZm9yKHZhciBIPVNbTl0scT1ILl9wcml2YXRlLmNsYXNzZXMsWT0hMSxaPTA7WjxtLmxlbmd0aDtaKyspe3ZhciBjZT1tW1pdLHZlPXEuaGFzKGNlKSxtZT0hMTtrfHxNJiYhdmU/KHEuYWRkKGNlKSxtZT0hMCk6KCFrfHxNJiZ2ZSkmJihxLmRlbGV0ZShjZSksbWU9ITApLCFZJiZtZSYmKE8ucHVzaChIKSxZPSEwKX1yZXR1cm4gTy5sZW5ndGg+MCYmdGhpcy5zcGF3bihPKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIiksU30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMudG9nZ2xlQ2xhc3MobSwhMSl9LGZsYXNoQ2xhc3M6ZnVuY3Rpb24obSxrKXt2YXIgUz10aGlzO2lmKGs9PW51bGwpaz0yNTA7ZWxzZSBpZihrPT09MClyZXR1cm4gUztyZXR1cm4gUy5hZGRDbGFzcyhtKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Uy5yZW1vdmVDbGFzcyhtKX0sayksU319O1NTLmNsYXNzTmFtZT1TUy5jbGFzc05hbWVzPVNTLmNsYXNzZXM7dmFyIFJjPXttZXRhQ2hhcjoiW1xcIVxcXCJcXCNcXCRcXCVcXCZcXCdcXChcXClcXCpcXCtcXCxcXC5cXC9cXDpcXDtcXDxcXD1cXD5cXD9cXEBcXFtcXF1cXF5cXGBcXHtcXHxcXH1cXH5dIixjb21wYXJhdG9yT3A6Ij18XFwhPXw+fD49fDx8PD18XFwkPXxcXF49fFxcKj0iLGJvb2xPcDoiXFw/fFxcIXxcXF4iLHN0cmluZzpgIig/OlxcXFwifFteIl0pKiJ8Jyg/OlxcXFwnfFteJ10pKidgLG51bWJlcjpsbixtZXRhOiJkZWdyZWV8aW5kZWdyZWV8b3V0ZGVncmVlIixzZXBhcmF0b3I6IlxccyosXFxzKiIsZGVzY2VuZGFudDoiXFxzKyIsY2hpbGQ6Ilxccys+XFxzKyIsc3ViamVjdDoiXFwkIixncm91cDoibm9kZXxlZGdlfFxcKiIsZGlyZWN0ZWRFZGdlOiJcXHMrLT5cXHMrIix1bmRpcmVjdGVkRWRnZToiXFxzKzwtPlxccysifTtSYy52YXJpYWJsZT0iKD86W1xcdy0uXXwoPzpcXFxcIitSYy5tZXRhQ2hhcisiKSkrIixSYy5jbGFzc05hbWU9Iig/OltcXHctXXwoPzpcXFxcIitSYy5tZXRhQ2hhcisiKSkrIixSYy52YWx1ZT1SYy5zdHJpbmcrInwiK1JjLm51bWJlcixSYy5pZD1SYy52YXJpYWJsZSxmdW5jdGlvbigpe3ZhciB4LG0saztmb3IoeD1SYy5jb21wYXJhdG9yT3Auc3BsaXQoInwiKSxrPTA7azx4Lmxlbmd0aDtrKyspbT14W2tdLFJjLmNvbXBhcmF0b3JPcCs9InxAIittO2Zvcih4PVJjLmNvbXBhcmF0b3JPcC5zcGxpdCgifCIpLGs9MDtrPHgubGVuZ3RoO2srKyltPXhba10sIShtLmluZGV4T2YoIiEiKT49MCkmJm0hPT0iPSImJihSYy5jb21wYXJhdG9yT3ArPSJ8XFwhIittKX0oKTt2YXIgUHU9ZnVuY3Rpb24oKXtyZXR1cm57Y2hlY2tzOltdfX0saHM9e0dST1VQOjAsQ09MTEVDVElPTjoxLEZJTFRFUjoyLERBVEFfQ09NUEFSRTozLERBVEFfRVhJU1Q6NCxEQVRBX0JPT0w6NSxNRVRBX0NPTVBBUkU6NixTVEFURTo3LElEOjgsQ0xBU1M6OSxVTkRJUkVDVEVEX0VER0U6MTAsRElSRUNURURfRURHRToxMSxOT0RFX1NPVVJDRToxMixOT0RFX1RBUkdFVDoxMyxOT0RFX05FSUdIQk9SOjE0LENISUxEOjE1LERFU0NFTkRBTlQ6MTYsUEFSRU5UOjE3LEFOQ0VTVE9SOjE4LENPTVBPVU5EX1NQTElUOjE5LFRSVUU6MjB9LG1JPVt7c2VsZWN0b3I6IjpzZWxlY3RlZCIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5zZWxlY3RlZCgpfX0se3NlbGVjdG9yOiI6dW5zZWxlY3RlZCIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4hbS5zZWxlY3RlZCgpfX0se3NlbGVjdG9yOiI6c2VsZWN0YWJsZSIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5zZWxlY3RhYmxlKCl9fSx7c2VsZWN0b3I6Ijp1bnNlbGVjdGFibGUiLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIW0uc2VsZWN0YWJsZSgpfX0se3NlbGVjdG9yOiI6bG9ja2VkIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiBtLmxvY2tlZCgpfX0se3NlbGVjdG9yOiI6dW5sb2NrZWQiLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIW0ubG9ja2VkKCl9fSx7c2VsZWN0b3I6Ijp2aXNpYmxlIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiBtLnZpc2libGUoKX19LHtzZWxlY3RvcjoiOmhpZGRlbiIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4hbS52aXNpYmxlKCl9fSx7c2VsZWN0b3I6Ijp0cmFuc3BhcmVudCIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS50cmFuc3BhcmVudCgpfX0se3NlbGVjdG9yOiI6Z3JhYmJlZCIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5ncmFiYmVkKCl9fSx7c2VsZWN0b3I6IjpmcmVlIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiFtLmdyYWJiZWQoKX19LHtzZWxlY3RvcjoiOnJlbW92ZWQiLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIG0ucmVtb3ZlZCgpfX0se3NlbGVjdG9yOiI6aW5zaWRlIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiFtLnJlbW92ZWQoKX19LHtzZWxlY3RvcjoiOmdyYWJiYWJsZSIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5ncmFiYmFibGUoKX19LHtzZWxlY3RvcjoiOnVuZ3JhYmJhYmxlIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiFtLmdyYWJiYWJsZSgpfX0se3NlbGVjdG9yOiI6YW5pbWF0ZWQiLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIG0uYW5pbWF0ZWQoKX19LHtzZWxlY3RvcjoiOnVuYW5pbWF0ZWQiLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIW0uYW5pbWF0ZWQoKX19LHtzZWxlY3RvcjoiOnBhcmVudCIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5pc1BhcmVudCgpfX0se3NlbGVjdG9yOiI6Y2hpbGRsZXNzIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiBtLmlzQ2hpbGRsZXNzKCl9fSx7c2VsZWN0b3I6IjpjaGlsZCIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5pc0NoaWxkKCl9fSx7c2VsZWN0b3I6IjpvcnBoYW4iLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIG0uaXNPcnBoYW4oKX19LHtzZWxlY3RvcjoiOm5vbm9ycGhhbiIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5pc0NoaWxkKCl9fSx7c2VsZWN0b3I6Ijpjb21wb3VuZCIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5pc05vZGUoKT9tLmlzUGFyZW50KCk6bS5zb3VyY2UoKS5pc1BhcmVudCgpfHxtLnRhcmdldCgpLmlzUGFyZW50KCl9fSx7c2VsZWN0b3I6Ijpsb29wIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiBtLmlzTG9vcCgpfX0se3NlbGVjdG9yOiI6c2ltcGxlIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiBtLmlzU2ltcGxlKCl9fSx7c2VsZWN0b3I6IjphY3RpdmUiLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIG0uYWN0aXZlKCl9fSx7c2VsZWN0b3I6IjppbmFjdGl2ZSIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4hbS5hY3RpdmUoKX19LHtzZWxlY3RvcjoiOmJhY2tncm91bmRpbmciLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIG0uYmFja2dyb3VuZGluZygpfX0se3NlbGVjdG9yOiI6bm9uYmFja2dyb3VuZGluZyIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4hbS5iYWNrZ3JvdW5kaW5nKCl9fV0uc29ydChmdW5jdGlvbih4LG0pe3JldHVybiB6cih4LnNlbGVjdG9yLG0uc2VsZWN0b3IpfSksRW5lPWZ1bmN0aW9uKCl7Zm9yKHZhciB4PXt9LG0saz0wO2s8bUkubGVuZ3RoO2srKyltPW1JW2tdLHhbbS5zZWxlY3Rvcl09bS5tYXRjaGVzO3JldHVybiB4fSgpLFRuZT1mdW5jdGlvbihtLGspe3JldHVybiBFbmVbbV0oayl9LENuZT0iKCIrbUkubWFwKGZ1bmN0aW9uKHgpe3JldHVybiB4LnNlbGVjdG9yfSkuam9pbigifCIpKyIpIixjOD1mdW5jdGlvbihtKXtyZXR1cm4gbS5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcXFwoIitSYy5tZXRhQ2hhcisiKSIsImciKSxmdW5jdGlvbihrLFMpe3JldHVybiBTfSl9LHltPWZ1bmN0aW9uKG0sayxTKXttW20ubGVuZ3RoLTFdPVN9LFE5PVt7bmFtZToiZ3JvdXAiLHF1ZXJ5OiEwLHJlZ2V4OiIoIitSYy5ncm91cCsiKSIscG9wdWxhdGU6ZnVuY3Rpb24obSxrLFMpe3ZhciBNPXkoUywxKSxPPU1bMF07ay5jaGVja3MucHVzaCh7dHlwZTpocy5HUk9VUCx2YWx1ZTpPPT09IioiP086TysicyJ9KX19LHtuYW1lOiJzdGF0ZSIscXVlcnk6ITAscmVnZXg6Q25lLHBvcHVsYXRlOmZ1bmN0aW9uKG0sayxTKXt2YXIgTT15KFMsMSksTz1NWzBdO2suY2hlY2tzLnB1c2goe3R5cGU6aHMuU1RBVEUsdmFsdWU6T30pfX0se25hbWU6ImlkIixxdWVyeTohMCxyZWdleDoiXFwjKCIrUmMuaWQrIikiLHBvcHVsYXRlOmZ1bmN0aW9uKG0sayxTKXt2YXIgTT15KFMsMSksTz1NWzBdO2suY2hlY2tzLnB1c2goe3R5cGU6aHMuSUQsdmFsdWU6YzgoTyl9KX19LHtuYW1lOiJjbGFzc05hbWUiLHF1ZXJ5OiEwLHJlZ2V4OiJcXC4oIitSYy5jbGFzc05hbWUrIikiLHBvcHVsYXRlOmZ1bmN0aW9uKG0sayxTKXt2YXIgTT15KFMsMSksTz1NWzBdO2suY2hlY2tzLnB1c2goe3R5cGU6aHMuQ0xBU1MsdmFsdWU6YzgoTyl9KX19LHtuYW1lOiJkYXRhRXhpc3RzIixxdWVyeTohMCxyZWdleDoiXFxbXFxzKigiK1JjLnZhcmlhYmxlKyIpXFxzKlxcXSIscG9wdWxhdGU6ZnVuY3Rpb24obSxrLFMpe3ZhciBNPXkoUywxKSxPPU1bMF07ay5jaGVja3MucHVzaCh7dHlwZTpocy5EQVRBX0VYSVNULGZpZWxkOmM4KE8pfSl9fSx7bmFtZToiZGF0YUNvbXBhcmUiLHF1ZXJ5OiEwLHJlZ2V4OiJcXFtcXHMqKCIrUmMudmFyaWFibGUrIilcXHMqKCIrUmMuY29tcGFyYXRvck9wKyIpXFxzKigiK1JjLnZhbHVlKyIpXFxzKlxcXSIscG9wdWxhdGU6ZnVuY3Rpb24obSxrLFMpe3ZhciBNPXkoUywzKSxPPU1bMF0sTj1NWzFdLCQ9TVsyXSxIPW5ldyBSZWdFeHAoIl4iK1JjLnN0cmluZysiJCIpLmV4ZWMoJCkhPW51bGw7SD8kPSQuc3Vic3RyaW5nKDEsJC5sZW5ndGgtMSk6JD1wYXJzZUZsb2F0KCQpLGsuY2hlY2tzLnB1c2goe3R5cGU6aHMuREFUQV9DT01QQVJFLGZpZWxkOmM4KE8pLG9wZXJhdG9yOk4sdmFsdWU6JH0pfX0se25hbWU6ImRhdGFCb29sIixxdWVyeTohMCxyZWdleDoiXFxbXFxzKigiK1JjLmJvb2xPcCsiKVxccyooIitSYy52YXJpYWJsZSsiKVxccypcXF0iLHBvcHVsYXRlOmZ1bmN0aW9uKG0sayxTKXt2YXIgTT15KFMsMiksTz1NWzBdLE49TVsxXTtrLmNoZWNrcy5wdXNoKHt0eXBlOmhzLkRBVEFfQk9PTCxmaWVsZDpjOChOKSxvcGVyYXRvcjpPfSl9fSx7bmFtZToibWV0YUNvbXBhcmUiLHF1ZXJ5OiEwLHJlZ2V4OiJcXFtcXFtcXHMqKCIrUmMubWV0YSsiKVxccyooIitSYy5jb21wYXJhdG9yT3ArIilcXHMqKCIrUmMubnVtYmVyKyIpXFxzKlxcXVxcXSIscG9wdWxhdGU6ZnVuY3Rpb24obSxrLFMpe3ZhciBNPXkoUywzKSxPPU1bMF0sTj1NWzFdLCQ9TVsyXTtrLmNoZWNrcy5wdXNoKHt0eXBlOmhzLk1FVEFfQ09NUEFSRSxmaWVsZDpjOChPKSxvcGVyYXRvcjpOLHZhbHVlOnBhcnNlRmxvYXQoJCl9KX19LHtuYW1lOiJuZXh0UXVlcnkiLHNlcGFyYXRvcjohMCxyZWdleDpSYy5zZXBhcmF0b3IscG9wdWxhdGU6ZnVuY3Rpb24obSxrKXt2YXIgUz1tLmN1cnJlbnRTdWJqZWN0LE09bS5lZGdlQ291bnQsTz1tLmNvbXBvdW5kQ291bnQsTj1tW20ubGVuZ3RoLTFdO1MhPW51bGwmJihOLnN1YmplY3Q9UyxtLmN1cnJlbnRTdWJqZWN0PW51bGwpLE4uZWRnZUNvdW50PU0sTi5jb21wb3VuZENvdW50PU8sbS5lZGdlQ291bnQ9MCxtLmNvbXBvdW5kQ291bnQ9MDt2YXIgJD1tW20ubGVuZ3RoKytdPVB1KCk7cmV0dXJuICR9fSx7bmFtZToiZGlyZWN0ZWRFZGdlIixzZXBhcmF0b3I6ITAscmVnZXg6UmMuZGlyZWN0ZWRFZGdlLHBvcHVsYXRlOmZ1bmN0aW9uKG0sayl7aWYobS5jdXJyZW50U3ViamVjdD09bnVsbCl7dmFyIFM9UHUoKSxNPWssTz1QdSgpO3JldHVybiBTLmNoZWNrcy5wdXNoKHt0eXBlOmhzLkRJUkVDVEVEX0VER0Usc291cmNlOk0sdGFyZ2V0Ok99KSx5bShtLGssUyksbS5lZGdlQ291bnQrKyxPfWVsc2V7dmFyIE49UHUoKSwkPWssSD1QdSgpO3JldHVybiBOLmNoZWNrcy5wdXNoKHt0eXBlOmhzLk5PREVfU09VUkNFLHNvdXJjZTokLHRhcmdldDpIfSkseW0obSxrLE4pLG0uZWRnZUNvdW50KyssSH19fSx7bmFtZToidW5kaXJlY3RlZEVkZ2UiLHNlcGFyYXRvcjohMCxyZWdleDpSYy51bmRpcmVjdGVkRWRnZSxwb3B1bGF0ZTpmdW5jdGlvbihtLGspe2lmKG0uY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBTPVB1KCksTT1rLE89UHUoKTtyZXR1cm4gUy5jaGVja3MucHVzaCh7dHlwZTpocy5VTkRJUkVDVEVEX0VER0Usbm9kZXM6W00sT119KSx5bShtLGssUyksbS5lZGdlQ291bnQrKyxPfWVsc2V7dmFyIE49UHUoKSwkPWssSD1QdSgpO3JldHVybiBOLmNoZWNrcy5wdXNoKHt0eXBlOmhzLk5PREVfTkVJR0hCT1Isbm9kZTokLG5laWdoYm9yOkh9KSx5bShtLGssTiksSH19fSx7bmFtZToiY2hpbGQiLHNlcGFyYXRvcjohMCxyZWdleDpSYy5jaGlsZCxwb3B1bGF0ZTpmdW5jdGlvbihtLGspe2lmKG0uY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBTPVB1KCksTT1QdSgpLE89bVttLmxlbmd0aC0xXTtyZXR1cm4gUy5jaGVja3MucHVzaCh7dHlwZTpocy5DSElMRCxwYXJlbnQ6TyxjaGlsZDpNfSkseW0obSxrLFMpLG0uY29tcG91bmRDb3VudCsrLE19ZWxzZSBpZihtLmN1cnJlbnRTdWJqZWN0PT09ayl7dmFyIE49UHUoKSwkPW1bbS5sZW5ndGgtMV0sSD1QdSgpLHE9UHUoKSxZPVB1KCksWj1QdSgpO3JldHVybiBOLmNoZWNrcy5wdXNoKHt0eXBlOmhzLkNPTVBPVU5EX1NQTElULGxlZnQ6JCxyaWdodDpILHN1YmplY3Q6cX0pLHEuY2hlY2tzPWsuY2hlY2tzLGsuY2hlY2tzPVt7dHlwZTpocy5UUlVFfV0sWi5jaGVja3MucHVzaCh7dHlwZTpocy5UUlVFfSksSC5jaGVja3MucHVzaCh7dHlwZTpocy5QQVJFTlQscGFyZW50OlosY2hpbGQ6WX0pLHltKG0sJCxOKSxtLmN1cnJlbnRTdWJqZWN0PXEsbS5jb21wb3VuZENvdW50KyssWX1lbHNle3ZhciBjZT1QdSgpLHZlPVB1KCksbWU9W3t0eXBlOmhzLlBBUkVOVCxwYXJlbnQ6Y2UsY2hpbGQ6dmV9XTtyZXR1cm4gY2UuY2hlY2tzPWsuY2hlY2tzLGsuY2hlY2tzPW1lLG0uY29tcG91bmRDb3VudCsrLHZlfX19LHtuYW1lOiJkZXNjZW5kYW50IixzZXBhcmF0b3I6ITAscmVnZXg6UmMuZGVzY2VuZGFudCxwb3B1bGF0ZTpmdW5jdGlvbihtLGspe2lmKG0uY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBTPVB1KCksTT1QdSgpLE89bVttLmxlbmd0aC0xXTtyZXR1cm4gUy5jaGVja3MucHVzaCh7dHlwZTpocy5ERVNDRU5EQU5ULGFuY2VzdG9yOk8sZGVzY2VuZGFudDpNfSkseW0obSxrLFMpLG0uY29tcG91bmRDb3VudCsrLE19ZWxzZSBpZihtLmN1cnJlbnRTdWJqZWN0PT09ayl7dmFyIE49UHUoKSwkPW1bbS5sZW5ndGgtMV0sSD1QdSgpLHE9UHUoKSxZPVB1KCksWj1QdSgpO3JldHVybiBOLmNoZWNrcy5wdXNoKHt0eXBlOmhzLkNPTVBPVU5EX1NQTElULGxlZnQ6JCxyaWdodDpILHN1YmplY3Q6cX0pLHEuY2hlY2tzPWsuY2hlY2tzLGsuY2hlY2tzPVt7dHlwZTpocy5UUlVFfV0sWi5jaGVja3MucHVzaCh7dHlwZTpocy5UUlVFfSksSC5jaGVja3MucHVzaCh7dHlwZTpocy5BTkNFU1RPUixhbmNlc3RvcjpaLGRlc2NlbmRhbnQ6WX0pLHltKG0sJCxOKSxtLmN1cnJlbnRTdWJqZWN0PXEsbS5jb21wb3VuZENvdW50KyssWX1lbHNle3ZhciBjZT1QdSgpLHZlPVB1KCksbWU9W3t0eXBlOmhzLkFOQ0VTVE9SLGFuY2VzdG9yOmNlLGRlc2NlbmRhbnQ6dmV9XTtyZXR1cm4gY2UuY2hlY2tzPWsuY2hlY2tzLGsuY2hlY2tzPW1lLG0uY29tcG91bmRDb3VudCsrLHZlfX19LHtuYW1lOiJzdWJqZWN0Iixtb2RpZmllcjohMCxyZWdleDpSYy5zdWJqZWN0LHBvcHVsYXRlOmZ1bmN0aW9uKG0sayl7aWYobS5jdXJyZW50U3ViamVjdCE9bnVsbCYmbS5jdXJyZW50U3ViamVjdCE9PWspcmV0dXJuIGh1KCJSZWRlZmluaXRpb24gb2Ygc3ViamVjdCBpbiBzZWxlY3RvciBgIittLnRvU3RyaW5nKCkrImAiKSwhMTttLmN1cnJlbnRTdWJqZWN0PWs7dmFyIFM9bVttLmxlbmd0aC0xXSxNPVMuY2hlY2tzWzBdLE89TT09bnVsbD9udWxsOk0udHlwZTtPPT09aHMuRElSRUNURURfRURHRT9NLnR5cGU9aHMuTk9ERV9UQVJHRVQ6Tz09PWhzLlVORElSRUNURURfRURHRSYmKE0udHlwZT1ocy5OT0RFX05FSUdIQk9SLE0ubm9kZT1NLm5vZGVzWzFdLE0ubmVpZ2hib3I9TS5ub2Rlc1swXSxNLm5vZGVzPW51bGwpfX1dO1E5LmZvckVhY2goZnVuY3Rpb24oeCl7cmV0dXJuIHgucmVnZXhPYmo9bmV3IFJlZ0V4cCgiXiIreC5yZWdleCl9KTt2YXIgU25lPWZ1bmN0aW9uKG0pe2Zvcih2YXIgayxTLE0sTz0wO088UTkubGVuZ3RoO08rKyl7dmFyIE49UTlbT10sJD1OLm5hbWUsSD1tLm1hdGNoKE4ucmVnZXhPYmopO2lmKEghPW51bGwpe1M9SCxrPU4sTT0kO3ZhciBxPUhbMF07bT1tLnN1YnN0cmluZyhxLmxlbmd0aCk7YnJlYWt9fXJldHVybntleHByOmssbWF0Y2g6UyxuYW1lOk0scmVtYWluaW5nOm19fSx2ST1mdW5jdGlvbihtKXt2YXIgaz1tLm1hdGNoKC9eXHMrLyk7aWYoayl7dmFyIFM9a1swXTttPW0uc3Vic3RyaW5nKFMubGVuZ3RoKX1yZXR1cm4gbX0sX25lPWZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMsUz1rLmlucHV0VGV4dD1tLE09a1swXT1QdSgpO2ZvcihrLmxlbmd0aD0xLFM9dkkoUyk7Oyl7dmFyIE89U25lKFMpO2lmKE8uZXhwcj09bnVsbClyZXR1cm4gaHUoIlRoZSBzZWxlY3RvciBgIittKyJgaXMgaW52YWxpZCIpLCExO3ZhciBOPU8ubWF0Y2guc2xpY2UoMSksJD1PLmV4cHIucG9wdWxhdGUoayxNLE4pO2lmKCQ9PT0hMSlyZXR1cm4hMTtpZigkIT1udWxsJiYoTT0kKSxTPU8ucmVtYWluaW5nLFMubWF0Y2goL15ccyokLykpYnJlYWt9dmFyIEg9a1trLmxlbmd0aC0xXTtrLmN1cnJlbnRTdWJqZWN0IT1udWxsJiYoSC5zdWJqZWN0PWsuY3VycmVudFN1YmplY3QpLEguZWRnZUNvdW50PWsuZWRnZUNvdW50LEguY29tcG91bmRDb3VudD1rLmNvbXBvdW5kQ291bnQ7Zm9yKHZhciBxPTA7cTxrLmxlbmd0aDtxKyspe3ZhciBZPWtbcV07aWYoWS5jb21wb3VuZENvdW50PjAmJlkuZWRnZUNvdW50PjApcmV0dXJuIGh1KCJUaGUgc2VsZWN0b3IgYCIrbSsiYCBpcyBpbnZhbGlkIGJlY2F1c2UgaXQgdXNlcyBib3RoIGEgY29tcG91bmQgc2VsZWN0b3IgYW5kIGFuIGVkZ2Ugc2VsZWN0b3IiKSwhMTtpZihZLmVkZ2VDb3VudD4xKXJldHVybiBodSgiVGhlIHNlbGVjdG9yIGAiK20rImAgaXMgaW52YWxpZCBiZWNhdXNlIGl0IHVzZXMgbXVsdGlwbGUgZWRnZSBzZWxlY3RvcnMiKSwhMTtZLmVkZ2VDb3VudD09PTEmJmh1KCJUaGUgc2VsZWN0b3IgYCIrbSsiYCBpcyBkZXByZWNhdGVkLiAgRWRnZSBzZWxlY3RvcnMgZG8gbm90IHRha2UgZWZmZWN0IG9uIGNoYW5nZXMgdG8gc291cmNlIGFuZCB0YXJnZXQgbm9kZXMgYWZ0ZXIgYW4gZWRnZSBpcyBhZGRlZCwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuICBVc2UgYSBjbGFzcyBvciBkYXRhIHNlbGVjdG9yIG9uIGVkZ2VzIGluc3RlYWQsIHVwZGF0aW5nIHRoZSBjbGFzcyBvciBkYXRhIG9mIGFuIGVkZ2Ugd2hlbiB5b3VyIGFwcCBkZXRlY3RzIGEgY2hhbmdlIGluIHNvdXJjZSBvciB0YXJnZXQgbm9kZXMuIil9cmV0dXJuITB9LEFuZT1mdW5jdGlvbigpe2lmKHRoaXMudG9TdHJpbmdDYWNoZSE9bnVsbClyZXR1cm4gdGhpcy50b1N0cmluZ0NhY2hlO2Zvcih2YXIgbT1mdW5jdGlvbihZKXtyZXR1cm4gWT8/IiJ9LGs9ZnVuY3Rpb24oWSl7cmV0dXJuIGJlKFkpPyciJytZKyciJzptKFkpfSxTPWZ1bmN0aW9uKFkpe3JldHVybiIgIitZKyIgIn0sTT1mdW5jdGlvbihZLFope3ZhciBjZT1ZLnR5cGUsdmU9WS52YWx1ZTtzd2l0Y2goY2Upe2Nhc2UgaHMuR1JPVVA6e3ZhciBtZT1tKHZlKTtyZXR1cm4gbWUuc3Vic3RyaW5nKDAsbWUubGVuZ3RoLTEpfWNhc2UgaHMuREFUQV9DT01QQVJFOnt2YXIgTGU9WS5maWVsZCxfZT1ZLm9wZXJhdG9yO3JldHVybiJbIitMZStTKG0oX2UpKStrKHZlKSsiXSJ9Y2FzZSBocy5EQVRBX0JPT0w6e3ZhciBFZT1ZLm9wZXJhdG9yLEJlPVkuZmllbGQ7cmV0dXJuIlsiK20oRWUpK0JlKyJdIn1jYXNlIGhzLkRBVEFfRVhJU1Q6e3ZhciBSZT1ZLmZpZWxkO3JldHVybiJbIitSZSsiXSJ9Y2FzZSBocy5NRVRBX0NPTVBBUkU6e3ZhciBWZT1ZLm9wZXJhdG9yLGN0PVkuZmllbGQ7cmV0dXJuIltbIitjdCtTKG0oVmUpKStrKHZlKSsiXV0ifWNhc2UgaHMuU1RBVEU6cmV0dXJuIHZlO2Nhc2UgaHMuSUQ6cmV0dXJuIiMiK3ZlO2Nhc2UgaHMuQ0xBU1M6cmV0dXJuIi4iK3ZlO2Nhc2UgaHMuUEFSRU5UOmNhc2UgaHMuQ0hJTEQ6cmV0dXJuIE8oWS5wYXJlbnQsWikrUygiPiIpK08oWS5jaGlsZCxaKTtjYXNlIGhzLkFOQ0VTVE9SOmNhc2UgaHMuREVTQ0VOREFOVDpyZXR1cm4gTyhZLmFuY2VzdG9yLFopKyIgIitPKFkuZGVzY2VuZGFudCxaKTtjYXNlIGhzLkNPTVBPVU5EX1NQTElUOnt2YXIgc3Q9TyhZLmxlZnQsWiksWWU9TyhZLnN1YmplY3QsWiksbXQ9TyhZLnJpZ2h0LFopO3JldHVybiBzdCsoc3QubGVuZ3RoPjA/IiAiOiIiKStZZSttdH1jYXNlIGhzLlRSVUU6cmV0dXJuIiJ9fSxPPWZ1bmN0aW9uKFksWil7cmV0dXJuIFkuY2hlY2tzLnJlZHVjZShmdW5jdGlvbihjZSx2ZSxtZSl7cmV0dXJuIGNlKyhaPT09WSYmbWU9PT0wPyIkIjoiIikrTSh2ZSxaKX0sIiIpfSxOPSIiLCQ9MDskPHRoaXMubGVuZ3RoOyQrKyl7dmFyIEg9dGhpc1skXTtOKz1PKEgsSC5zdWJqZWN0KSx0aGlzLmxlbmd0aD4xJiYkPHRoaXMubGVuZ3RoLTEmJihOKz0iLCAiKX1yZXR1cm4gdGhpcy50b1N0cmluZ0NhY2hlPU4sTn0sTG5lPXtwYXJzZTpfbmUsdG9TdHJpbmc6QW5lfSxjJD1mdW5jdGlvbihtLGssUyl7dmFyIE0sTz1iZShtKSxOPVgobSksJD1iZShTKSxILHEsWT0hMSxaPSExLGNlPSExO3N3aXRjaChrLmluZGV4T2YoIiEiKT49MCYmKGs9ay5yZXBsYWNlKCIhIiwiIiksWj0hMCksay5pbmRleE9mKCJAIik+PTAmJihrPWsucmVwbGFjZSgiQCIsIiIpLFk9ITApLChPfHwkfHxZKSYmKEg9IU8mJiFOPyIiOiIiK20scT0iIitTKSxZJiYobT1IPUgudG9Mb3dlckNhc2UoKSxTPXE9cS50b0xvd2VyQ2FzZSgpKSxrKXtjYXNlIio9IjpNPUguaW5kZXhPZihxKT49MDticmVhaztjYXNlIiQ9IjpNPUguaW5kZXhPZihxLEgubGVuZ3RoLXEubGVuZ3RoKT49MDticmVhaztjYXNlIl49IjpNPUguaW5kZXhPZihxKT09PTA7YnJlYWs7Y2FzZSI9IjpNPW09PT1TO2JyZWFrO2Nhc2UiPiI6Y2U9ITAsTT1tPlM7YnJlYWs7Y2FzZSI+PSI6Y2U9ITAsTT1tPj1TO2JyZWFrO2Nhc2UiPCI6Y2U9ITAsTT1tPFM7YnJlYWs7Y2FzZSI8PSI6Y2U9ITAsTT1tPD1TO2JyZWFrO2RlZmF1bHQ6TT0hMTticmVha31yZXR1cm4gWiYmKG0hPW51bGx8fCFjZSkmJihNPSFNKSxNfSxNbmU9ZnVuY3Rpb24obSxrKXtzd2l0Y2goayl7Y2FzZSI/IjpyZXR1cm4hIW07Y2FzZSIhIjpyZXR1cm4hbTtjYXNlIl4iOnJldHVybiBtPT09dm9pZCAwfX0sRG5lPWZ1bmN0aW9uKG0pe3JldHVybiBtIT09dm9pZCAwfSx3ST1mdW5jdGlvbihtLGspe3JldHVybiBtLmRhdGEoayl9LEluZT1mdW5jdGlvbihtLGspe3JldHVybiBtW2tdKCl9LHVoPVtdLGdsPWZ1bmN0aW9uKG0sayl7cmV0dXJuIG0uY2hlY2tzLmV2ZXJ5KGZ1bmN0aW9uKFMpe3JldHVybiB1aFtTLnR5cGVdKFMsayl9KX07dWhbaHMuR1JPVVBdPWZ1bmN0aW9uKHgsbSl7dmFyIGs9eC52YWx1ZTtyZXR1cm4gaz09PSIqInx8az09PW0uZ3JvdXAoKX0sdWhbaHMuU1RBVEVdPWZ1bmN0aW9uKHgsbSl7dmFyIGs9eC52YWx1ZTtyZXR1cm4gVG5lKGssbSl9LHVoW2hzLklEXT1mdW5jdGlvbih4LG0pe3ZhciBrPXgudmFsdWU7cmV0dXJuIG0uaWQoKT09PWt9LHVoW2hzLkNMQVNTXT1mdW5jdGlvbih4LG0pe3ZhciBrPXgudmFsdWU7cmV0dXJuIG0uaGFzQ2xhc3Moayl9LHVoW2hzLk1FVEFfQ09NUEFSRV09ZnVuY3Rpb24oeCxtKXt2YXIgaz14LmZpZWxkLFM9eC5vcGVyYXRvcixNPXgudmFsdWU7cmV0dXJuIGMkKEluZShtLGspLFMsTSl9LHVoW2hzLkRBVEFfQ09NUEFSRV09ZnVuY3Rpb24oeCxtKXt2YXIgaz14LmZpZWxkLFM9eC5vcGVyYXRvcixNPXgudmFsdWU7cmV0dXJuIGMkKHdJKG0sayksUyxNKX0sdWhbaHMuREFUQV9CT09MXT1mdW5jdGlvbih4LG0pe3ZhciBrPXguZmllbGQsUz14Lm9wZXJhdG9yO3JldHVybiBNbmUod0kobSxrKSxTKX0sdWhbaHMuREFUQV9FWElTVF09ZnVuY3Rpb24oeCxtKXt2YXIgaz14LmZpZWxkO3JldHVybiB4Lm9wZXJhdG9yLERuZSh3SShtLGspKX0sdWhbaHMuVU5ESVJFQ1RFRF9FREdFXT1mdW5jdGlvbih4LG0pe3ZhciBrPXgubm9kZXNbMF0sUz14Lm5vZGVzWzFdLE09bS5zb3VyY2UoKSxPPW0udGFyZ2V0KCk7cmV0dXJuIGdsKGssTSkmJmdsKFMsTyl8fGdsKFMsTSkmJmdsKGssTyl9LHVoW2hzLk5PREVfTkVJR0hCT1JdPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIGdsKHgubm9kZSxtKSYmbS5uZWlnaGJvcmhvb2QoKS5zb21lKGZ1bmN0aW9uKGspe3JldHVybiBrLmlzTm9kZSgpJiZnbCh4Lm5laWdoYm9yLGspfSl9LHVoW2hzLkRJUkVDVEVEX0VER0VdPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIGdsKHguc291cmNlLG0uc291cmNlKCkpJiZnbCh4LnRhcmdldCxtLnRhcmdldCgpKX0sdWhbaHMuTk9ERV9TT1VSQ0VdPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIGdsKHguc291cmNlLG0pJiZtLm91dGdvZXJzKCkuc29tZShmdW5jdGlvbihrKXtyZXR1cm4gay5pc05vZGUoKSYmZ2woeC50YXJnZXQsayl9KX0sdWhbaHMuTk9ERV9UQVJHRVRdPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIGdsKHgudGFyZ2V0LG0pJiZtLmluY29tZXJzKCkuc29tZShmdW5jdGlvbihrKXtyZXR1cm4gay5pc05vZGUoKSYmZ2woeC5zb3VyY2Usayl9KX0sdWhbaHMuQ0hJTERdPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIGdsKHguY2hpbGQsbSkmJmdsKHgucGFyZW50LG0ucGFyZW50KCkpfSx1aFtocy5QQVJFTlRdPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIGdsKHgucGFyZW50LG0pJiZtLmNoaWxkcmVuKCkuc29tZShmdW5jdGlvbihrKXtyZXR1cm4gZ2woeC5jaGlsZCxrKX0pfSx1aFtocy5ERVNDRU5EQU5UXT1mdW5jdGlvbih4LG0pe3JldHVybiBnbCh4LmRlc2NlbmRhbnQsbSkmJm0uYW5jZXN0b3JzKCkuc29tZShmdW5jdGlvbihrKXtyZXR1cm4gZ2woeC5hbmNlc3RvcixrKX0pfSx1aFtocy5BTkNFU1RPUl09ZnVuY3Rpb24oeCxtKXtyZXR1cm4gZ2woeC5hbmNlc3RvcixtKSYmbS5kZXNjZW5kYW50cygpLnNvbWUoZnVuY3Rpb24oayl7cmV0dXJuIGdsKHguZGVzY2VuZGFudCxrKX0pfSx1aFtocy5DT01QT1VORF9TUExJVF09ZnVuY3Rpb24oeCxtKXtyZXR1cm4gZ2woeC5zdWJqZWN0LG0pJiZnbCh4LmxlZnQsbSkmJmdsKHgucmlnaHQsbSl9LHVoW2hzLlRSVUVdPWZ1bmN0aW9uKCl7cmV0dXJuITB9LHVoW2hzLkNPTExFQ1RJT05dPWZ1bmN0aW9uKHgsbSl7dmFyIGs9eC52YWx1ZTtyZXR1cm4gay5oYXMobSl9LHVoW2hzLkZJTFRFUl09ZnVuY3Rpb24oeCxtKXt2YXIgaz14LnZhbHVlO3JldHVybiBrKG0pfTt2YXIgdSQ9ZnVuY3Rpb24obSl7dmFyIGs9dGhpcztpZihrLmxlbmd0aD09PTEmJmtbMF0uY2hlY2tzLmxlbmd0aD09PTEmJmtbMF0uY2hlY2tzWzBdLnR5cGU9PT1ocy5JRClyZXR1cm4gbS5nZXRFbGVtZW50QnlJZChrWzBdLmNoZWNrc1swXS52YWx1ZSkuY29sbGVjdGlvbigpO3ZhciBTPWZ1bmN0aW9uKE8pe2Zvcih2YXIgTj0wO048ay5sZW5ndGg7TisrKXt2YXIgJD1rW05dO2lmKGdsKCQsTykpcmV0dXJuITB9cmV0dXJuITF9O3JldHVybiBrLnRleHQoKT09bnVsbCYmKFM9ZnVuY3Rpb24oKXtyZXR1cm4hMH0pLG0uZmlsdGVyKFMpfSxPbmU9ZnVuY3Rpb24obSl7Zm9yKHZhciBrPXRoaXMsUz0wO1M8ay5sZW5ndGg7UysrKXt2YXIgTT1rW1NdO2lmKGdsKE0sbSkpcmV0dXJuITB9cmV0dXJuITF9LE5uZT17bWF0Y2hlczpPbmUsZmlsdGVyOnUkfSxleT1mdW5jdGlvbihtKXt0aGlzLmlucHV0VGV4dD1tLHRoaXMuY3VycmVudFN1YmplY3Q9bnVsbCx0aGlzLmNvbXBvdW5kQ291bnQ9MCx0aGlzLmVkZ2VDb3VudD0wLHRoaXMubGVuZ3RoPTAsbT09bnVsbHx8YmUobSkmJm0ubWF0Y2goL15ccyokLyl8fCh4ZShtKT90aGlzLmFkZFF1ZXJ5KHtjaGVja3M6W3t0eXBlOmhzLkNPTExFQ1RJT04sdmFsdWU6bS5jb2xsZWN0aW9uKCl9XX0pOmFlKG0pP3RoaXMuYWRkUXVlcnkoe2NoZWNrczpbe3R5cGU6aHMuRklMVEVSLHZhbHVlOm19XX0pOmJlKG0pP3RoaXMucGFyc2UobSl8fCh0aGlzLmludmFsaWQ9ITApOmNoKCJBIHNlbGVjdG9yIG11c3QgYmUgY3JlYXRlZCBmcm9tIGEgc3RyaW5nOyBmb3VuZCAiKSl9LHA1PWV5LnByb3RvdHlwZTtbTG5lLE5uZV0uZm9yRWFjaChmdW5jdGlvbih4KXtyZXR1cm4geXQocDUseCl9KSxwNS50ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXRUZXh0fSxwNS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxwNS5lcT1mdW5jdGlvbih4KXtyZXR1cm4gdGhpc1t4XX0scDUuc2FtZVRleHQ9ZnVuY3Rpb24oeCl7cmV0dXJuIXRoaXMuaW52YWxpZCYmIXguaW52YWxpZCYmdGhpcy50ZXh0KCk9PT14LnRleHQoKX0scDUuYWRkUXVlcnk9ZnVuY3Rpb24oeCl7dGhpc1t0aGlzLmxlbmd0aCsrXT14fSxwNS5zZWxlY3Rvcj1wNS50b1N0cmluZzt2YXIgdHk9e2FsbEFyZTpmdW5jdGlvbihtKXt2YXIgaz1uZXcgZXkobSk7cmV0dXJuIHRoaXMuZXZlcnkoZnVuY3Rpb24oUyl7cmV0dXJuIGsubWF0Y2hlcyhTKX0pfSxpczpmdW5jdGlvbihtKXt2YXIgaz1uZXcgZXkobSk7cmV0dXJuIHRoaXMuc29tZShmdW5jdGlvbihTKXtyZXR1cm4gay5tYXRjaGVzKFMpfSl9LHNvbWU6ZnVuY3Rpb24obSxrKXtmb3IodmFyIFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIE09az9tLmFwcGx5KGssW3RoaXNbU10sUyx0aGlzXSk6bSh0aGlzW1NdLFMsdGhpcyk7aWYoTSlyZXR1cm4hMH1yZXR1cm4hMX0sZXZlcnk6ZnVuY3Rpb24obSxrKXtmb3IodmFyIFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIE09az9tLmFwcGx5KGssW3RoaXNbU10sUyx0aGlzXSk6bSh0aGlzW1NdLFMsdGhpcyk7aWYoIU0pcmV0dXJuITF9cmV0dXJuITB9LHNhbWU6ZnVuY3Rpb24obSl7aWYodGhpcz09PW0pcmV0dXJuITA7bT10aGlzLmN5KCkuY29sbGVjdGlvbihtKTt2YXIgaz10aGlzLmxlbmd0aCxTPW0ubGVuZ3RoO3JldHVybiBrIT09Uz8hMTprPT09MT90aGlzWzBdPT09bVswXTp0aGlzLmV2ZXJ5KGZ1bmN0aW9uKE0pe3JldHVybiBtLmhhc0VsZW1lbnRXaXRoSWQoTS5pZCgpKX0pfSxhbnlTYW1lOmZ1bmN0aW9uKG0pe3JldHVybiBtPXRoaXMuY3koKS5jb2xsZWN0aW9uKG0pLHRoaXMuc29tZShmdW5jdGlvbihrKXtyZXR1cm4gbS5oYXNFbGVtZW50V2l0aElkKGsuaWQoKSl9KX0sYWxsQXJlTmVpZ2hib3JzOmZ1bmN0aW9uKG0pe209dGhpcy5jeSgpLmNvbGxlY3Rpb24obSk7dmFyIGs9dGhpcy5uZWlnaGJvcmhvb2QoKTtyZXR1cm4gbS5ldmVyeShmdW5jdGlvbihTKXtyZXR1cm4gay5oYXNFbGVtZW50V2l0aElkKFMuaWQoKSl9KX0sY29udGFpbnM6ZnVuY3Rpb24obSl7bT10aGlzLmN5KCkuY29sbGVjdGlvbihtKTt2YXIgaz10aGlzO3JldHVybiBtLmV2ZXJ5KGZ1bmN0aW9uKFMpe3JldHVybiBrLmhhc0VsZW1lbnRXaXRoSWQoUy5pZCgpKX0pfX07dHkuYWxsQXJlTmVpZ2hib3Vycz10eS5hbGxBcmVOZWlnaGJvcnMsdHkuaGFzPXR5LmNvbnRhaW5zLHR5LmVxdWFsPXR5LmVxdWFscz10eS5zYW1lO3ZhciBScD1mdW5jdGlvbihtLGspe3JldHVybiBmdW5jdGlvbihNLE8sTiwkKXt2YXIgSD1NLHE9dGhpcyxZO2lmKEg9PW51bGw/WT0iIjp4ZShIKSYmSC5sZW5ndGg9PT0xJiYoWT1ILmlkKCkpLHEubGVuZ3RoPT09MSYmWSl7dmFyIFo9cVswXS5fcHJpdmF0ZSxjZT1aLnRyYXZlcnNhbENhY2hlPVoudHJhdmVyc2FsQ2FjaGV8fHt9LHZlPWNlW2tdPWNlW2tdfHxbXSxtZT11ZChZKSxMZT12ZVttZV07cmV0dXJuIExlfHwodmVbbWVdPW0uY2FsbChxLE0sTyxOLCQpKX1lbHNlIHJldHVybiBtLmNhbGwocSxNLE8sTiwkKX19LHU4PXtwYXJlbnQ6ZnVuY3Rpb24obSl7dmFyIGs9W107aWYodGhpcy5sZW5ndGg9PT0xKXt2YXIgUz10aGlzWzBdLl9wcml2YXRlLnBhcmVudDtpZihTKXJldHVybiBTfWZvcih2YXIgTT0wO008dGhpcy5sZW5ndGg7TSsrKXt2YXIgTz10aGlzW01dLE49Ty5fcHJpdmF0ZS5wYXJlbnQ7TiYmay5wdXNoKE4pfXJldHVybiB0aGlzLnNwYXduKGssITApLmZpbHRlcihtKX0scGFyZW50czpmdW5jdGlvbihtKXtmb3IodmFyIGs9W10sUz10aGlzLnBhcmVudCgpO1Mubm9uZW1wdHkoKTspe2Zvcih2YXIgTT0wO008Uy5sZW5ndGg7TSsrKXt2YXIgTz1TW01dO2sucHVzaChPKX1TPVMucGFyZW50KCl9cmV0dXJuIHRoaXMuc3Bhd24oaywhMCkuZmlsdGVyKG0pfSxjb21tb25BbmNlc3RvcnM6ZnVuY3Rpb24obSl7Zm9yKHZhciBrLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIE09dGhpc1tTXSxPPU0ucGFyZW50cygpO2s9a3x8TyxrPWsuaW50ZXJzZWN0KE8pfXJldHVybiBrLmZpbHRlcihtKX0sb3JwaGFuczpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24oayl7cmV0dXJuIGsuaXNPcnBoYW4oKX0pLmZpbHRlcihtKX0sbm9ub3JwaGFuczpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24oayl7cmV0dXJuIGsuaXNDaGlsZCgpfSkuZmlsdGVyKG0pfSxjaGlsZHJlbjpScChmdW5jdGlvbih4KXtmb3IodmFyIG09W10saz0wO2s8dGhpcy5sZW5ndGg7aysrKWZvcih2YXIgUz10aGlzW2tdLE09Uy5fcHJpdmF0ZS5jaGlsZHJlbixPPTA7TzxNLmxlbmd0aDtPKyspbS5wdXNoKE1bT10pO3JldHVybiB0aGlzLnNwYXduKG0sITApLmZpbHRlcih4KX0sImNoaWxkcmVuIiksc2libGluZ3M6ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMucGFyZW50KCkuY2hpbGRyZW4oKS5ub3QodGhpcykuZmlsdGVyKG0pfSxpc1BhcmVudDpmdW5jdGlvbigpe3ZhciBtPXRoaXNbMF07aWYobSlyZXR1cm4gbS5pc05vZGUoKSYmbS5fcHJpdmF0ZS5jaGlsZHJlbi5sZW5ndGghPT0wfSxpc0NoaWxkbGVzczpmdW5jdGlvbigpe3ZhciBtPXRoaXNbMF07aWYobSlyZXR1cm4gbS5pc05vZGUoKSYmbS5fcHJpdmF0ZS5jaGlsZHJlbi5sZW5ndGg9PT0wfSxpc0NoaWxkOmZ1bmN0aW9uKCl7dmFyIG09dGhpc1swXTtpZihtKXJldHVybiBtLmlzTm9kZSgpJiZtLl9wcml2YXRlLnBhcmVudCE9bnVsbH0saXNPcnBoYW46ZnVuY3Rpb24oKXt2YXIgbT10aGlzWzBdO2lmKG0pcmV0dXJuIG0uaXNOb2RlKCkmJm0uX3ByaXZhdGUucGFyZW50PT1udWxsfSxkZXNjZW5kYW50czpmdW5jdGlvbihtKXt2YXIgaz1bXTtmdW5jdGlvbiBTKE0pe2Zvcih2YXIgTz0wO088TS5sZW5ndGg7TysrKXt2YXIgTj1NW09dO2sucHVzaChOKSxOLmNoaWxkcmVuKCkubm9uZW1wdHkoKSYmUyhOLmNoaWxkcmVuKCkpfX1yZXR1cm4gUyh0aGlzLmNoaWxkcmVuKCkpLHRoaXMuc3Bhd24oaywhMCkuZmlsdGVyKG0pfX07ZnVuY3Rpb24geUkoeCxtLGssUyl7Zm9yKHZhciBNPVtdLE89bmV3IFE3LE49eC5jeSgpLCQ9Ti5oYXNDb21wb3VuZE5vZGVzKCksSD0wO0g8eC5sZW5ndGg7SCsrKXt2YXIgcT14W0hdO2s/TS5wdXNoKHEpOiQmJlMoTSxPLHEpfWZvcig7TS5sZW5ndGg+MDspe3ZhciBZPU0uc2hpZnQoKTttKFkpLE8uYWRkKFkuaWQoKSksJCYmUyhNLE8sWSl9cmV0dXJuIHh9ZnVuY3Rpb24gbCQoeCxtLGspe2lmKGsuaXNQYXJlbnQoKSlmb3IodmFyIFM9ay5fcHJpdmF0ZS5jaGlsZHJlbixNPTA7TTxTLmxlbmd0aDtNKyspe3ZhciBPPVNbTV07bS5oYXMoTy5pZCgpKXx8eC5wdXNoKE8pfX11OC5mb3JFYWNoRG93bj1mdW5jdGlvbih4KXt2YXIgbT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIHlJKHRoaXMseCxtLGwkKX07ZnVuY3Rpb24gaCQoeCxtLGspe2lmKGsuaXNDaGlsZCgpKXt2YXIgUz1rLl9wcml2YXRlLnBhcmVudDttLmhhcyhTLmlkKCkpfHx4LnB1c2goUyl9fXU4LmZvckVhY2hVcD1mdW5jdGlvbih4KXt2YXIgbT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIHlJKHRoaXMseCxtLGgkKX07ZnVuY3Rpb24gUG5lKHgsbSxrKXtoJCh4LG0sayksbCQoeCxtLGspfXU4LmZvckVhY2hVcEFuZERvd249ZnVuY3Rpb24oeCl7dmFyIG09YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO3JldHVybiB5SSh0aGlzLHgsbSxQbmUpfSx1OC5hbmNlc3RvcnM9dTgucGFyZW50czt2YXIgeDEsZiQ7eDE9ZiQ9e2RhdGE6ZnUuZGF0YSh7ZmllbGQ6ImRhdGEiLGJpbmRpbmdFdmVudDoiZGF0YSIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6ImRhdGEiLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCxpbW11dGFibGVLZXlzOntpZDohMCxzb3VyY2U6ITAsdGFyZ2V0OiEwLHBhcmVudDohMH0sdXBkYXRlU3R5bGU6ITB9KSxyZW1vdmVEYXRhOmZ1LnJlbW92ZURhdGEoe2ZpZWxkOiJkYXRhIixldmVudDoiZGF0YSIsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsdHJpZ2dlckV2ZW50OiEwLGltbXV0YWJsZUtleXM6e2lkOiEwLHNvdXJjZTohMCx0YXJnZXQ6ITAscGFyZW50OiEwfSx1cGRhdGVTdHlsZTohMH0pLHNjcmF0Y2g6ZnUuZGF0YSh7ZmllbGQ6InNjcmF0Y2giLGJpbmRpbmdFdmVudDoic2NyYXRjaCIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InNjcmF0Y2giLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZVNjcmF0Y2g6ZnUucmVtb3ZlRGF0YSh7ZmllbGQ6InNjcmF0Y2giLGV2ZW50OiJzY3JhdGNoIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITAsdXBkYXRlU3R5bGU6ITB9KSxyc2NyYXRjaDpmdS5kYXRhKHtmaWVsZDoicnNjcmF0Y2giLGFsbG93QmluZGluZzohMSxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITEsYWxsb3dHZXR0aW5nOiEwfSkscmVtb3ZlUnNjcmF0Y2g6ZnUucmVtb3ZlRGF0YSh7ZmllbGQ6InJzY3JhdGNoIix0cmlnZ2VyRXZlbnQ6ITF9KSxpZDpmdW5jdGlvbigpe3ZhciBtPXRoaXNbMF07aWYobSlyZXR1cm4gbS5fcHJpdmF0ZS5kYXRhLmlkfX0seDEuYXR0cj14MS5kYXRhLHgxLnJlbW92ZUF0dHI9eDEucmVtb3ZlRGF0YTt2YXIgbnk9ZiQsSjk9e307ZnVuY3Rpb24geEkoeCl7cmV0dXJuIGZ1bmN0aW9uKG0pe3ZhciBrPXRoaXM7aWYobT09PXZvaWQgMCYmKG09ITApLGsubGVuZ3RoIT09MClpZihrLmlzTm9kZSgpJiYhay5yZW1vdmVkKCkpe2Zvcih2YXIgUz0wLE09a1swXSxPPU0uX3ByaXZhdGUuZWRnZXMsTj0wO048Ty5sZW5ndGg7TisrKXt2YXIgJD1PW05dOyFtJiYkLmlzTG9vcCgpfHwoUys9eChNLCQpKX1yZXR1cm4gU31lbHNlIHJldHVybn19eXQoSjkse2RlZ3JlZTp4SShmdW5jdGlvbih4LG0pe3JldHVybiBtLnNvdXJjZSgpLnNhbWUobS50YXJnZXQoKSk/MjoxfSksaW5kZWdyZWU6eEkoZnVuY3Rpb24oeCxtKXtyZXR1cm4gbS50YXJnZXQoKS5zYW1lKHgpPzE6MH0pLG91dGRlZ3JlZTp4SShmdW5jdGlvbih4LG0pe3JldHVybiBtLnNvdXJjZSgpLnNhbWUoeCk/MTowfSl9KTtmdW5jdGlvbiBsOCh4LG0pe3JldHVybiBmdW5jdGlvbihrKXtmb3IodmFyIFMsTT10aGlzLm5vZGVzKCksTz0wO088TS5sZW5ndGg7TysrKXt2YXIgTj1NW09dLCQ9Tlt4XShrKTskIT09dm9pZCAwJiYoUz09PXZvaWQgMHx8bSgkLFMpKSYmKFM9JCl9cmV0dXJuIFN9fXl0KEo5LHttaW5EZWdyZWU6bDgoImRlZ3JlZSIsZnVuY3Rpb24oeCxtKXtyZXR1cm4geDxtfSksbWF4RGVncmVlOmw4KCJkZWdyZWUiLGZ1bmN0aW9uKHgsbSl7cmV0dXJuIHg+bX0pLG1pbkluZGVncmVlOmw4KCJpbmRlZ3JlZSIsZnVuY3Rpb24oeCxtKXtyZXR1cm4geDxtfSksbWF4SW5kZWdyZWU6bDgoImluZGVncmVlIixmdW5jdGlvbih4LG0pe3JldHVybiB4Pm19KSxtaW5PdXRkZWdyZWU6bDgoIm91dGRlZ3JlZSIsZnVuY3Rpb24oeCxtKXtyZXR1cm4geDxtfSksbWF4T3V0ZGVncmVlOmw4KCJvdXRkZWdyZWUiLGZ1bmN0aW9uKHgsbSl7cmV0dXJuIHg+bX0pfSkseXQoSjkse3RvdGFsRGVncmVlOmZ1bmN0aW9uKG0pe2Zvcih2YXIgaz0wLFM9dGhpcy5ub2RlcygpLE09MDtNPFMubGVuZ3RoO00rKylrKz1TW01dLmRlZ3JlZShtKTtyZXR1cm4ga319KTt2YXIgVzIsZCQsZyQ9ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT0wO008bS5sZW5ndGg7TSsrKXt2YXIgTz1tW01dO2lmKCFPLmxvY2tlZCgpKXt2YXIgTj1PLl9wcml2YXRlLnBvc2l0aW9uLCQ9e3g6ay54IT1udWxsP2sueC1OLng6MCx5OmsueSE9bnVsbD9rLnktTi55OjB9O08uaXNQYXJlbnQoKSYmISgkLng9PT0wJiYkLnk9PT0wKSYmTy5jaGlsZHJlbigpLnNoaWZ0KCQsUyksTy5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX19fSxwJD17ZmllbGQ6InBvc2l0aW9uIixiaW5kaW5nRXZlbnQ6InBvc2l0aW9uIixhbGxvd0JpbmRpbmc6ITAsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdFdmVudDoicG9zaXRpb24iLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6ImVtaXRBbmROb3RpZnkiLGFsbG93R2V0dGluZzohMCx2YWxpZEtleXM6WyJ4IiwieSJdLGJlZm9yZUdldDpmdW5jdGlvbihtKXttLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCl9LGJlZm9yZVNldDpmdW5jdGlvbihtLGspe2ckKG0saywhMSl9LG9uU2V0OmZ1bmN0aW9uKG0pe20uZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCl9LGNhblNldDpmdW5jdGlvbihtKXtyZXR1cm4hbS5sb2NrZWQoKX19O1cyPWQkPXtwb3NpdGlvbjpmdS5kYXRhKHAkKSxzaWxlbnRQb3NpdGlvbjpmdS5kYXRhKHl0KHt9LHAkLHthbGxvd0JpbmRpbmc6ITEsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiExLGFsbG93R2V0dGluZzohMSxiZWZvcmVTZXQ6ZnVuY3Rpb24obSxrKXtnJChtLGssITApfSxvblNldDpmdW5jdGlvbihtKXttLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpfX0pKSxwb3NpdGlvbnM6ZnVuY3Rpb24obSxrKXtpZihzZShtKSlrP3RoaXMuc2lsZW50UG9zaXRpb24obSk6dGhpcy5wb3NpdGlvbihtKTtlbHNlIGlmKGFlKG0pKXt2YXIgUz1tLE09dGhpcy5jeSgpO00uc3RhcnRCYXRjaCgpO2Zvcih2YXIgTz0wO088dGhpcy5sZW5ndGg7TysrKXt2YXIgTj10aGlzW09dLCQ9dm9pZCAwOygkPVMoTixPKSkmJihrP04uc2lsZW50UG9zaXRpb24oJCk6Ti5wb3NpdGlvbigkKSl9TS5lbmRCYXRjaCgpfXJldHVybiB0aGlzfSxzaWxlbnRQb3NpdGlvbnM6ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMucG9zaXRpb25zKG0sITApfSxzaGlmdDpmdW5jdGlvbihtLGssUyl7dmFyIE07aWYoc2UobSk/KE09e3g6WChtLngpP20ueDowLHk6WChtLnkpP20ueTowfSxTPWspOmJlKG0pJiZYKGspJiYoTT17eDowLHk6MH0sTVttXT1rKSxNIT1udWxsKXt2YXIgTz10aGlzLmN5KCk7Ty5zdGFydEJhdGNoKCk7Zm9yKHZhciBOPTA7Tjx0aGlzLmxlbmd0aDtOKyspe3ZhciAkPXRoaXNbTl07aWYoIShPLmhhc0NvbXBvdW5kTm9kZXMoKSYmJC5pc0NoaWxkKCkmJiQuYW5jZXN0b3JzKCkuYW55U2FtZSh0aGlzKSkpe3ZhciBIPSQucG9zaXRpb24oKSxxPXt4OkgueCtNLngseTpILnkrTS55fTtTPyQuc2lsZW50UG9zaXRpb24ocSk6JC5wb3NpdGlvbihxKX19Ty5lbmRCYXRjaCgpfXJldHVybiB0aGlzfSxzaWxlbnRTaGlmdDpmdW5jdGlvbihtLGspe3JldHVybiBzZShtKT90aGlzLnNoaWZ0KG0sITApOmJlKG0pJiZYKGspJiZ0aGlzLnNoaWZ0KG0saywhMCksdGhpc30scmVuZGVyZWRQb3NpdGlvbjpmdW5jdGlvbihtLGspe3ZhciBTPXRoaXNbMF0sTT10aGlzLmN5KCksTz1NLnpvb20oKSxOPU0ucGFuKCksJD1zZShtKT9tOnZvaWQgMCxIPSQhPT12b2lkIDB8fGshPT12b2lkIDAmJmJlKG0pO2lmKFMmJlMuaXNOb2RlKCkpaWYoSClmb3IodmFyIHE9MDtxPHRoaXMubGVuZ3RoO3ErKyl7dmFyIFk9dGhpc1txXTtrIT09dm9pZCAwP1kucG9zaXRpb24obSwoay1OW21dKS9PKTokIT09dm9pZCAwJiZZLnBvc2l0aW9uKGhqKCQsTyxOKSl9ZWxzZXt2YXIgWj1TLnBvc2l0aW9uKCk7cmV0dXJuICQ9bFMoWixPLE4pLG09PT12b2lkIDA/JDokW21dfWVsc2UgaWYoIUgpcmV0dXJuO3JldHVybiB0aGlzfSxyZWxhdGl2ZVBvc2l0aW9uOmZ1bmN0aW9uKG0sayl7dmFyIFM9dGhpc1swXSxNPXRoaXMuY3koKSxPPXNlKG0pP206dm9pZCAwLE49TyE9PXZvaWQgMHx8ayE9PXZvaWQgMCYmYmUobSksJD1NLmhhc0NvbXBvdW5kTm9kZXMoKTtpZihTJiZTLmlzTm9kZSgpKWlmKE4pZm9yKHZhciBIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBxPXRoaXNbSF0sWT0kP3EucGFyZW50KCk6bnVsbCxaPVkmJlkubGVuZ3RoPjAsY2U9WjtaJiYoWT1ZWzBdKTt2YXIgdmU9Y2U/WS5wb3NpdGlvbigpOnt4OjAseTowfTtrIT09dm9pZCAwP3EucG9zaXRpb24obSxrK3ZlW21dKTpPIT09dm9pZCAwJiZxLnBvc2l0aW9uKHt4Ok8ueCt2ZS54LHk6Ty55K3ZlLnl9KX1lbHNle3ZhciBtZT1TLnBvc2l0aW9uKCksTGU9JD9TLnBhcmVudCgpOm51bGwsX2U9TGUmJkxlLmxlbmd0aD4wLEVlPV9lO19lJiYoTGU9TGVbMF0pO3ZhciBCZT1FZT9MZS5wb3NpdGlvbigpOnt4OjAseTowfTtyZXR1cm4gTz17eDptZS54LUJlLngseTptZS55LUJlLnl9LG09PT12b2lkIDA/TzpPW21dfWVsc2UgaWYoIU4pcmV0dXJuO3JldHVybiB0aGlzfX0sVzIubW9kZWxQb3NpdGlvbj1XMi5wb2ludD1XMi5wb3NpdGlvbixXMi5tb2RlbFBvc2l0aW9ucz1XMi5wb2ludHM9VzIucG9zaXRpb25zLFcyLnJlbmRlcmVkUG9pbnQ9VzIucmVuZGVyZWRQb3NpdGlvbixXMi5yZWxhdGl2ZVBvaW50PVcyLnJlbGF0aXZlUG9zaXRpb247dmFyIEJuZT1kJCxoOCxyeTtoOD1yeT17fSxyeS5yZW5kZXJlZEJvdW5kaW5nQm94PWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXMuYm91bmRpbmdCb3goeCksaz10aGlzLmN5KCksUz1rLnpvb20oKSxNPWsucGFuKCksTz1tLngxKlMrTS54LE49bS54MipTK00ueCwkPW0ueTEqUytNLnksSD1tLnkyKlMrTS55O3JldHVybnt4MTpPLHgyOk4seTE6JCx5MjpILHc6Ti1PLGg6SC0kfX0scnkuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlPWZ1bmN0aW9uKCl7dmFyIHg9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiExLG09dGhpcy5jeSgpO3JldHVybiFtLnN0eWxlRW5hYmxlZCgpfHwhbS5oYXNDb21wb3VuZE5vZGVzKCk/dGhpczoodGhpcy5mb3JFYWNoVXAoZnVuY3Rpb24oayl7aWYoay5pc1BhcmVudCgpKXt2YXIgUz1rLl9wcml2YXRlO1MuY29tcG91bmRCb3VuZHNDbGVhbj0hMSxTLmJiQ2FjaGU9bnVsbCx4fHxrLmVtaXRBbmROb3RpZnkoImJvdW5kcyIpfX0pLHRoaXMpfSxyeS51cGRhdGVDb21wb3VuZEJvdW5kcz1mdW5jdGlvbigpe3ZhciB4PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMSxtPXRoaXMuY3koKTtpZighbS5zdHlsZUVuYWJsZWQoKXx8IW0uaGFzQ29tcG91bmROb2RlcygpKXJldHVybiB0aGlzO2lmKCF4JiZtLmJhdGNoaW5nKCkpcmV0dXJuIHRoaXM7ZnVuY3Rpb24gayhOKXtpZighTi5pc1BhcmVudCgpKXJldHVybjt2YXIgJD1OLl9wcml2YXRlLEg9Ti5jaGlsZHJlbigpLHE9Ti5wc3R5bGUoImNvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzIikudmFsdWU9PT0iaW5jbHVkZSIsWT17d2lkdGg6e3ZhbDpOLnBzdHlsZSgibWluLXdpZHRoIikucGZWYWx1ZSxsZWZ0Ok4ucHN0eWxlKCJtaW4td2lkdGgtYmlhcy1sZWZ0IikscmlnaHQ6Ti5wc3R5bGUoIm1pbi13aWR0aC1iaWFzLXJpZ2h0Iil9LGhlaWdodDp7dmFsOk4ucHN0eWxlKCJtaW4taGVpZ2h0IikucGZWYWx1ZSx0b3A6Ti5wc3R5bGUoIm1pbi1oZWlnaHQtYmlhcy10b3AiKSxib3R0b206Ti5wc3R5bGUoIm1pbi1oZWlnaHQtYmlhcy1ib3R0b20iKX19LFo9SC5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczpxLGluY2x1ZGVPdmVybGF5czohMSx1c2VDYWNoZTohMX0pLGNlPSQucG9zaXRpb247KFoudz09PTB8fFouaD09PTApJiYoWj17dzpOLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGg6Ti5wc3R5bGUoImhlaWdodCIpLnBmVmFsdWV9LFoueDE9Y2UueC1aLncvMixaLngyPWNlLngrWi53LzIsWi55MT1jZS55LVouaC8yLFoueTI9Y2UueStaLmgvMik7ZnVuY3Rpb24gdmUoSmUsTHQsTXQpe3ZhciB1dD0wLFd0PTAsVHQ9THQrTXQ7cmV0dXJuIEplPjAmJlR0PjAmJih1dD1MdC9UdCpKZSxXdD1NdC9UdCpKZSkse2JpYXNEaWZmOnV0LGJpYXNDb21wbGVtZW50RGlmZjpXdH19ZnVuY3Rpb24gbWUoSmUsTHQsTXQsdXQpe2lmKE10LnVuaXRzPT09IiUiKXN3aXRjaCh1dCl7Y2FzZSJ3aWR0aCI6cmV0dXJuIEplPjA/TXQucGZWYWx1ZSpKZTowO2Nhc2UiaGVpZ2h0IjpyZXR1cm4gTHQ+MD9NdC5wZlZhbHVlKkx0OjA7Y2FzZSJhdmVyYWdlIjpyZXR1cm4gSmU+MCYmTHQ+MD9NdC5wZlZhbHVlKihKZStMdCkvMjowO2Nhc2UibWluIjpyZXR1cm4gSmU+MCYmTHQ+MD9KZT5MdD9NdC5wZlZhbHVlKkx0Ok10LnBmVmFsdWUqSmU6MDtjYXNlIm1heCI6cmV0dXJuIEplPjAmJkx0PjA/SmU+THQ/TXQucGZWYWx1ZSpKZTpNdC5wZlZhbHVlKkx0OjA7ZGVmYXVsdDpyZXR1cm4gMH1lbHNlIHJldHVybiBNdC51bml0cz09PSJweCI/TXQucGZWYWx1ZTowfXZhciBMZT1ZLndpZHRoLmxlZnQudmFsdWU7WS53aWR0aC5sZWZ0LnVuaXRzPT09InB4IiYmWS53aWR0aC52YWw+MCYmKExlPUxlKjEwMC9ZLndpZHRoLnZhbCk7dmFyIF9lPVkud2lkdGgucmlnaHQudmFsdWU7WS53aWR0aC5yaWdodC51bml0cz09PSJweCImJlkud2lkdGgudmFsPjAmJihfZT1fZSoxMDAvWS53aWR0aC52YWwpO3ZhciBFZT1ZLmhlaWdodC50b3AudmFsdWU7WS5oZWlnaHQudG9wLnVuaXRzPT09InB4IiYmWS5oZWlnaHQudmFsPjAmJihFZT1FZSoxMDAvWS5oZWlnaHQudmFsKTt2YXIgQmU9WS5oZWlnaHQuYm90dG9tLnZhbHVlO1kuaGVpZ2h0LmJvdHRvbS51bml0cz09PSJweCImJlkuaGVpZ2h0LnZhbD4wJiYoQmU9QmUqMTAwL1kuaGVpZ2h0LnZhbCk7dmFyIFJlPXZlKFkud2lkdGgudmFsLVoudyxMZSxfZSksVmU9UmUuYmlhc0RpZmYsY3Q9UmUuYmlhc0NvbXBsZW1lbnREaWZmLHN0PXZlKFkuaGVpZ2h0LnZhbC1aLmgsRWUsQmUpLFllPXN0LmJpYXNEaWZmLG10PXN0LmJpYXNDb21wbGVtZW50RGlmZjskLmF1dG9QYWRkaW5nPW1lKFoudyxaLmgsTi5wc3R5bGUoInBhZGRpbmciKSxOLnBzdHlsZSgicGFkZGluZy1yZWxhdGl2ZS10byIpLnZhbHVlKSwkLmF1dG9XaWR0aD1NYXRoLm1heChaLncsWS53aWR0aC52YWwpLGNlLng9KC1WZStaLngxK1oueDIrY3QpLzIsJC5hdXRvSGVpZ2h0PU1hdGgubWF4KFouaCxZLmhlaWdodC52YWwpLGNlLnk9KC1ZZStaLnkxK1oueTIrbXQpLzJ9Zm9yKHZhciBTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciBNPXRoaXNbU10sTz1NLl9wcml2YXRlOyghTy5jb21wb3VuZEJvdW5kc0NsZWFufHx4KSYmKGsoTSksbS5iYXRjaGluZygpfHwoTy5jb21wb3VuZEJvdW5kc0NsZWFuPSEwKSl9cmV0dXJuIHRoaXN9O3ZhciBqcD1mdW5jdGlvbihtKXtyZXR1cm4gbT09PTEvMHx8bT09PS0xLzA/MDptfSxZMj1mdW5jdGlvbihtLGssUyxNLE8pe00taz09PTB8fE8tUz09PTB8fGs9PW51bGx8fFM9PW51bGx8fE09PW51bGx8fE89PW51bGx8fChtLngxPWs8bS54MT9rOm0ueDEsbS54Mj1NPm0ueDI/TTptLngyLG0ueTE9UzxtLnkxP1M6bS55MSxtLnkyPU8+bS55Mj9POm0ueTIsbS53PW0ueDItbS54MSxtLmg9bS55Mi1tLnkxKX0sYjU9ZnVuY3Rpb24obSxrKXtyZXR1cm4gaz09bnVsbD9tOlkyKG0say54MSxrLnkxLGsueDIsay55Mil9LFo5PWZ1bmN0aW9uKG0sayxTKXtyZXR1cm4gSzIobSxrLFMpfSxfUz1mdW5jdGlvbihtLGssUyl7aWYoIWsuY3koKS5oZWFkbGVzcygpKXt2YXIgTT1rLl9wcml2YXRlLE89TS5yc3R5bGUsTj1PLmFycm93V2lkdGgvMiwkPWsucHN0eWxlKFMrIi1hcnJvdy1zaGFwZSIpLnZhbHVlLEgscTtpZigkIT09Im5vbmUiKXtTPT09InNvdXJjZSI/KEg9Ty5zcmNYLHE9Ty5zcmNZKTpTPT09InRhcmdldCI/KEg9Ty50Z3RYLHE9Ty50Z3RZKTooSD1PLm1pZFgscT1PLm1pZFkpO3ZhciBZPU0uYXJyb3dCb3VuZHM9TS5hcnJvd0JvdW5kc3x8e30sWj1ZW1NdPVlbU118fHt9O1oueDE9SC1OLFoueTE9cS1OLFoueDI9SCtOLFoueTI9cStOLFoudz1aLngyLVoueDEsWi5oPVoueTItWi55MSxmUyhaLDEpLFkyKG0sWi54MSxaLnkxLFoueDIsWi55Mil9fX0sa0k9ZnVuY3Rpb24obSxrLFMpe2lmKCFrLmN5KCkuaGVhZGxlc3MoKSl7dmFyIE07Uz9NPVMrIi0iOk09IiI7dmFyIE89ay5fcHJpdmF0ZSxOPU8ucnN0eWxlLCQ9ay5wc3R5bGUoTSsibGFiZWwiKS5zdHJWYWx1ZTtpZigkKXt2YXIgSD1rLnBzdHlsZSgidGV4dC1oYWxpZ24iKSxxPWsucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLFk9WjkoTiwibGFiZWxXaWR0aCIsUyksWj1aOShOLCJsYWJlbEhlaWdodCIsUyksY2U9WjkoTiwibGFiZWxYIixTKSx2ZT1aOShOLCJsYWJlbFkiLFMpLG1lPWsucHN0eWxlKE0rInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLExlPWsucHN0eWxlKE0rInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlLF9lPWsuaXNFZGdlKCksRWU9ay5wc3R5bGUoTSsidGV4dC1yb3RhdGlvbiIpLEJlPWsucHN0eWxlKCJ0ZXh0LW91dGxpbmUtd2lkdGgiKS5wZlZhbHVlLFJlPWsucHN0eWxlKCJ0ZXh0LWJvcmRlci13aWR0aCIpLnBmVmFsdWUsVmU9UmUvMixjdD1rLnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmciKS5wZlZhbHVlLHN0PTIsWWU9WixtdD1ZLEplPW10LzIsTHQ9WWUvMixNdCx1dCxXdCxUdDtpZihfZSlNdD1jZS1KZSx1dD1jZStKZSxXdD12ZS1MdCxUdD12ZStMdDtlbHNle3N3aXRjaChILnZhbHVlKXtjYXNlImxlZnQiOk10PWNlLW10LHV0PWNlO2JyZWFrO2Nhc2UiY2VudGVyIjpNdD1jZS1KZSx1dD1jZStKZTticmVhaztjYXNlInJpZ2h0IjpNdD1jZSx1dD1jZSttdDticmVha31zd2l0Y2gocS52YWx1ZSl7Y2FzZSJ0b3AiOld0PXZlLVllLFR0PXZlO2JyZWFrO2Nhc2UiY2VudGVyIjpXdD12ZS1MdCxUdD12ZStMdDticmVhaztjYXNlImJvdHRvbSI6V3Q9dmUsVHQ9dmUrWWU7YnJlYWt9fU10Kz1tZS1NYXRoLm1heChCZSxWZSktY3Qtc3QsdXQrPW1lK01hdGgubWF4KEJlLFZlKStjdCtzdCxXdCs9TGUtTWF0aC5tYXgoQmUsVmUpLWN0LXN0LFR0Kz1MZStNYXRoLm1heChCZSxWZSkrY3Qrc3Q7dmFyIF9uPVN8fCJtYWluIixobj1PLmxhYmVsQm91bmRzLFl0PWhuW19uXT1obltfbl18fHt9O1l0LngxPU10LFl0LnkxPVd0LFl0LngyPXV0LFl0LnkyPVR0LFl0Lnc9dXQtTXQsWXQuaD1UdC1XdDt2YXIgRG49X2UmJkVlLnN0clZhbHVlPT09ImF1dG9yb3RhdGUiLGlyPUVlLnBmVmFsdWUhPW51bGwmJkVlLnBmVmFsdWUhPT0wO2lmKERufHxpcil7dmFyIHZyPURuP1o5KE8ucnN0eWxlLCJsYWJlbEFuZ2xlIixTKTpFZS5wZlZhbHVlLE5uPU1hdGguY29zKHZyKSxwcj1NYXRoLnNpbih2ciksRXI9KE10K3V0KS8yLE1yPShXdCtUdCkvMjtpZighX2Upe3N3aXRjaChILnZhbHVlKXtjYXNlImxlZnQiOkVyPXV0O2JyZWFrO2Nhc2UicmlnaHQiOkVyPU10O2JyZWFrfXN3aXRjaChxLnZhbHVlKXtjYXNlInRvcCI6TXI9VHQ7YnJlYWs7Y2FzZSJib3R0b20iOk1yPVd0O2JyZWFrfX12YXIgQ3I9ZnVuY3Rpb24ocGEsTWkpe3JldHVybiBwYT1wYS1FcixNaT1NaS1Ncix7eDpwYSpObi1NaSpwcitFcix5OnBhKnByK01pKk5uK01yfX0sT3I9Q3IoTXQsV3QpLFduPUNyKE10LFR0KSxicj1Dcih1dCxXdCksU3I9Q3IodXQsVHQpO010PU1hdGgubWluKE9yLngsV24ueCxici54LFNyLngpLHV0PU1hdGgubWF4KE9yLngsV24ueCxici54LFNyLngpLFd0PU1hdGgubWluKE9yLnksV24ueSxici55LFNyLnkpLFR0PU1hdGgubWF4KE9yLnksV24ueSxici55LFNyLnkpfXZhciBOcj1fbisiUm90IixTaT1obltOcl09aG5bTnJdfHx7fTtTaS54MT1NdCxTaS55MT1XdCxTaS54Mj11dCxTaS55Mj1UdCxTaS53PXV0LU10LFNpLmg9VHQtV3QsWTIobSxNdCxXdCx1dCxUdCksWTIoTy5sYWJlbEJvdW5kcy5hbGwsTXQsV3QsdXQsVHQpfXJldHVybiBtfX0sRm5lPWZ1bmN0aW9uKG0sayl7aWYoIWsuY3koKS5oZWFkbGVzcygpKXt2YXIgUz1rLnBzdHlsZSgib3V0bGluZS1vcGFjaXR5IikudmFsdWUsTT1rLnBzdHlsZSgib3V0bGluZS13aWR0aCIpLnZhbHVlO2lmKFM+MCYmTT4wKXt2YXIgTz1rLnBzdHlsZSgib3V0bGluZS1vZmZzZXQiKS52YWx1ZSxOPWsucHN0eWxlKCJzaGFwZSIpLnZhbHVlLCQ9TStPLEg9KG0udyskKjIpL20udyxxPShtLmgrJCoyKS9tLmgsWT0wLFo9MDtbImRpYW1vbmQiLCJwZW50YWdvbiIsInJvdW5kLXRyaWFuZ2xlIl0uaW5jbHVkZXMoTik/KEg9KG0udyskKjIuNCkvbS53LFo9LSQvMy42KTpbImNvbmNhdmUtaGV4YWdvbiIsInJob21ib2lkIiwicmlnaHQtcmhvbWJvaWQiXS5pbmNsdWRlcyhOKT9IPShtLncrJCoyLjQpL20udzpOPT09InN0YXIiPyhIPShtLncrJCoyLjgpL20udyxxPShtLmgrJCoyLjYpL20uaCxaPS0kLzMuOCk6Tj09PSJ0cmlhbmdsZSI/KEg9KG0udyskKjIuOCkvbS53LHE9KG0uaCskKjIuNCkvbS5oLFo9LSQvMS40KTpOPT09InZlZSImJihIPShtLncrJCo0LjQpL20udyxxPShtLmgrJCozLjgpL20uaCxaPS0kKi41KTt2YXIgY2U9bS5oKnEtbS5oLHZlPW0udypILW0udztpZihkUyhtLFtNYXRoLmNlaWwoY2UvMiksTWF0aC5jZWlsKHZlLzIpXSksWSE9MHx8WiE9PTApe3ZhciBtZT1wWihtLFksWik7ZGoobSxtZSl9fX19LFJuZT1mdW5jdGlvbihtLGspe3ZhciBTPW0uX3ByaXZhdGUuY3ksTT1TLnN0eWxlRW5hYmxlZCgpLE89Uy5oZWFkbGVzcygpLE49V2QoKSwkPW0uX3ByaXZhdGUsSD1tLmlzTm9kZSgpLHE9bS5pc0VkZ2UoKSxZLFosY2UsdmUsbWUsTGUsX2U9JC5yc3R5bGUsRWU9SCYmTT9tLnBzdHlsZSgiYm91bmRzLWV4cGFuc2lvbiIpLnBmVmFsdWU6WzBdLEJlPWZ1bmN0aW9uKGZzKXtyZXR1cm4gZnMucHN0eWxlKCJkaXNwbGF5IikudmFsdWUhPT0ibm9uZSJ9LFJlPSFNfHxCZShtKSYmKCFxfHxCZShtLnNvdXJjZSgpKSYmQmUobS50YXJnZXQoKSkpO2lmKFJlKXt2YXIgVmU9MCxjdD0wO00mJmsuaW5jbHVkZU92ZXJsYXlzJiYoVmU9bS5wc3R5bGUoIm92ZXJsYXktb3BhY2l0eSIpLnZhbHVlLFZlIT09MCYmKGN0PW0ucHN0eWxlKCJvdmVybGF5LXBhZGRpbmciKS52YWx1ZSkpO3ZhciBzdD0wLFllPTA7TSYmay5pbmNsdWRlVW5kZXJsYXlzJiYoc3Q9bS5wc3R5bGUoInVuZGVybGF5LW9wYWNpdHkiKS52YWx1ZSxzdCE9PTAmJihZZT1tLnBzdHlsZSgidW5kZXJsYXktcGFkZGluZyIpLnZhbHVlKSk7dmFyIG10PU1hdGgubWF4KGN0LFllKSxKZT0wLEx0PTA7aWYoTSYmKEplPW0ucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsTHQ9SmUvMiksSCYmay5pbmNsdWRlTm9kZXMpe3ZhciBNdD1tLnBvc2l0aW9uKCk7bWU9TXQueCxMZT1NdC55O3ZhciB1dD1tLm91dGVyV2lkdGgoKSxXdD11dC8yLFR0PW0ub3V0ZXJIZWlnaHQoKSxfbj1UdC8yO1k9bWUtV3QsWj1tZStXdCxjZT1MZS1fbix2ZT1MZStfbixZMihOLFksY2UsWix2ZSksTSYmay5pbmNsdWRlT3V0bGluZXMmJkZuZShOLG0pfWVsc2UgaWYocSYmay5pbmNsdWRlRWRnZXMpaWYoTSYmIU8pe3ZhciBobj1tLnBzdHlsZSgiY3VydmUtc3R5bGUiKS5zdHJWYWx1ZTtpZihZPU1hdGgubWluKF9lLnNyY1gsX2UubWlkWCxfZS50Z3RYKSxaPU1hdGgubWF4KF9lLnNyY1gsX2UubWlkWCxfZS50Z3RYKSxjZT1NYXRoLm1pbihfZS5zcmNZLF9lLm1pZFksX2UudGd0WSksdmU9TWF0aC5tYXgoX2Uuc3JjWSxfZS5taWRZLF9lLnRndFkpLFktPUx0LForPUx0LGNlLT1MdCx2ZSs9THQsWTIoTixZLGNlLFosdmUpLGhuPT09ImhheXN0YWNrIil7dmFyIFl0PV9lLmhheXN0YWNrUHRzO2lmKFl0JiZZdC5sZW5ndGg9PT0yKXtpZihZPVl0WzBdLngsY2U9WXRbMF0ueSxaPVl0WzFdLngsdmU9WXRbMV0ueSxZPlope3ZhciBEbj1ZO1k9WixaPURufWlmKGNlPnZlKXt2YXIgaXI9Y2U7Y2U9dmUsdmU9aXJ9WTIoTixZLUx0LGNlLUx0LForTHQsdmUrTHQpfX1lbHNlIGlmKGhuPT09ImJlemllciJ8fGhuPT09InVuYnVuZGxlZC1iZXppZXIifHxobj09PSJzZWdtZW50cyJ8fGhuPT09InRheGkiKXt2YXIgdnI7c3dpdGNoKGhuKXtjYXNlImJlemllciI6Y2FzZSJ1bmJ1bmRsZWQtYmV6aWVyIjp2cj1fZS5iZXppZXJQdHM7YnJlYWs7Y2FzZSJzZWdtZW50cyI6Y2FzZSJ0YXhpIjp2cj1fZS5saW5lUHRzO2JyZWFrfWlmKHZyIT1udWxsKWZvcih2YXIgTm49MDtObjx2ci5sZW5ndGg7Tm4rKyl7dmFyIHByPXZyW05uXTtZPXByLngtTHQsWj1wci54K0x0LGNlPXByLnktTHQsdmU9cHIueStMdCxZMihOLFksY2UsWix2ZSl9fX1lbHNle3ZhciBFcj1tLnNvdXJjZSgpLE1yPUVyLnBvc2l0aW9uKCksQ3I9bS50YXJnZXQoKSxPcj1Dci5wb3NpdGlvbigpO2lmKFk9TXIueCxaPU9yLngsY2U9TXIueSx2ZT1Pci55LFk+Wil7dmFyIFduPVk7WT1aLFo9V259aWYoY2U+dmUpe3ZhciBicj1jZTtjZT12ZSx2ZT1icn1ZLT1MdCxaKz1MdCxjZS09THQsdmUrPUx0LFkyKE4sWSxjZSxaLHZlKX1pZihNJiZrLmluY2x1ZGVFZGdlcyYmcSYmKF9TKE4sbSwibWlkLXNvdXJjZSIpLF9TKE4sbSwibWlkLXRhcmdldCIpLF9TKE4sbSwic291cmNlIiksX1MoTixtLCJ0YXJnZXQiKSksTSl7dmFyIFNyPW0ucHN0eWxlKCJnaG9zdCIpLnZhbHVlPT09InllcyI7aWYoU3Ipe3ZhciBOcj1tLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXgiKS5wZlZhbHVlLFNpPW0ucHN0eWxlKCJnaG9zdC1vZmZzZXQteSIpLnBmVmFsdWU7WTIoTixOLngxK05yLE4ueTErU2ksTi54MitOcixOLnkyK1NpKX19dmFyIHlzPSQuYm9keUJvdW5kcz0kLmJvZHlCb3VuZHN8fHt9O2dqKHlzLE4pLGRTKHlzLEVlKSxmUyh5cywxKSxNJiYoWT1OLngxLFo9Ti54MixjZT1OLnkxLHZlPU4ueTIsWTIoTixZLW10LGNlLW10LForbXQsdmUrbXQpKTt2YXIgcGE9JC5vdmVybGF5Qm91bmRzPSQub3ZlcmxheUJvdW5kc3x8e307Z2oocGEsTiksZFMocGEsRWUpLGZTKHBhLDEpO3ZhciBNaT0kLmxhYmVsQm91bmRzPSQubGFiZWxCb3VuZHN8fHt9O01pLmFsbCE9bnVsbD9nWihNaS5hbGwpOk1pLmFsbD1XZCgpLE0mJmsuaW5jbHVkZUxhYmVscyYmKGsuaW5jbHVkZU1haW5MYWJlbHMmJmtJKE4sbSxudWxsKSxxJiYoay5pbmNsdWRlU291cmNlTGFiZWxzJiZrSShOLG0sInNvdXJjZSIpLGsuaW5jbHVkZVRhcmdldExhYmVscyYma0koTixtLCJ0YXJnZXQiKSkpfXJldHVybiBOLngxPWpwKE4ueDEpLE4ueTE9anAoTi55MSksTi54Mj1qcChOLngyKSxOLnkyPWpwKE4ueTIpLE4udz1qcChOLngyLU4ueDEpLE4uaD1qcChOLnkyLU4ueTEpLE4udz4wJiZOLmg+MCYmUmUmJihkUyhOLEVlKSxmUyhOLDEpKSxOfSxiJD1mdW5jdGlvbihtKXt2YXIgaz0wLFM9ZnVuY3Rpb24oTil7cmV0dXJuKE4/MTowKTw8aysrfSxNPTA7cmV0dXJuIE0rPVMobS5pbmN1ZGVOb2RlcyksTSs9UyhtLmluY2x1ZGVFZGdlcyksTSs9UyhtLmluY2x1ZGVMYWJlbHMpLE0rPVMobS5pbmNsdWRlTWFpbkxhYmVscyksTSs9UyhtLmluY2x1ZGVTb3VyY2VMYWJlbHMpLE0rPVMobS5pbmNsdWRlVGFyZ2V0TGFiZWxzKSxNKz1TKG0uaW5jbHVkZU92ZXJsYXlzKSxNKz1TKG0uaW5jbHVkZU91dGxpbmVzKSxNfSxtJD1mdW5jdGlvbihtKXtpZihtLmlzRWRnZSgpKXt2YXIgaz1tLnNvdXJjZSgpLnBvc2l0aW9uKCksUz1tLnRhcmdldCgpLnBvc2l0aW9uKCksTT1mdW5jdGlvbihOKXtyZXR1cm4gTWF0aC5yb3VuZChOKX07cmV0dXJuIHkxKFtNKGsueCksTShrLnkpLE0oUy54KSxNKFMueSldKX1lbHNlIHJldHVybiAwfSxVdD1mdW5jdGlvbihtLGspe3ZhciBTPW0uX3ByaXZhdGUsTSxPPW0uaXNFZGdlKCksTj1rPT1udWxsP3YkOmIkKGspLCQ9Tj09PXYkLEg9bSQobSkscT1TLmJiQ2FjaGVQb3NLZXk9PT1ILFk9ay51c2VDYWNoZSYmcSxaPWZ1bmN0aW9uKExlKXtyZXR1cm4gTGUuX3ByaXZhdGUuYmJDYWNoZT09bnVsbHx8TGUuX3ByaXZhdGUuc3R5bGVEaXJ0eX0sY2U9IVl8fFoobSl8fE8mJloobS5zb3VyY2UoKSl8fFoobS50YXJnZXQoKSk7aWYoY2U/KHF8fG0ucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKFkpLE09Um5lKG0sZWspLFMuYmJDYWNoZT1NLFMuYmJDYWNoZVBvc0tleT1IKTpNPVMuYmJDYWNoZSwhJCl7dmFyIHZlPW0uaXNOb2RlKCk7TT1XZCgpLChrLmluY2x1ZGVOb2RlcyYmdmV8fGsuaW5jbHVkZUVkZ2VzJiYhdmUpJiYoay5pbmNsdWRlT3ZlcmxheXM/YjUoTSxTLm92ZXJsYXlCb3VuZHMpOmI1KE0sUy5ib2R5Qm91bmRzKSksay5pbmNsdWRlTGFiZWxzJiYoay5pbmNsdWRlTWFpbkxhYmVscyYmKCFPfHxrLmluY2x1ZGVTb3VyY2VMYWJlbHMmJmsuaW5jbHVkZVRhcmdldExhYmVscyk/YjUoTSxTLmxhYmVsQm91bmRzLmFsbCk6KGsuaW5jbHVkZU1haW5MYWJlbHMmJmI1KE0sUy5sYWJlbEJvdW5kcy5tYWluUm90KSxrLmluY2x1ZGVTb3VyY2VMYWJlbHMmJmI1KE0sUy5sYWJlbEJvdW5kcy5zb3VyY2VSb3QpLGsuaW5jbHVkZVRhcmdldExhYmVscyYmYjUoTSxTLmxhYmVsQm91bmRzLnRhcmdldFJvdCkpKSxNLnc9TS54Mi1NLngxLE0uaD1NLnkyLU0ueTF9cmV0dXJuIE19LGVrPXtpbmNsdWRlTm9kZXM6ITAsaW5jbHVkZUVkZ2VzOiEwLGluY2x1ZGVMYWJlbHM6ITAsaW5jbHVkZU1haW5MYWJlbHM6ITAsaW5jbHVkZVNvdXJjZUxhYmVsczohMCxpbmNsdWRlVGFyZ2V0TGFiZWxzOiEwLGluY2x1ZGVPdmVybGF5czohMCxpbmNsdWRlVW5kZXJsYXlzOiEwLGluY2x1ZGVPdXRsaW5lczohMCx1c2VDYWNoZTohMH0sdiQ9YiQoZWspLHckPXEwKGVrKTtyeS5ib3VuZGluZ0JveD1mdW5jdGlvbih4KXt2YXIgbTtpZih0aGlzLmxlbmd0aD09PTEmJnRoaXNbMF0uX3ByaXZhdGUuYmJDYWNoZSE9bnVsbCYmIXRoaXNbMF0uX3ByaXZhdGUuc3R5bGVEaXJ0eSYmKHg9PT12b2lkIDB8fHgudXNlQ2FjaGU9PT12b2lkIDB8fHgudXNlQ2FjaGU9PT0hMCkpeD09PXZvaWQgMD94PWVrOng9dyQoeCksbT1VdCh0aGlzWzBdLHgpO2Vsc2V7bT1XZCgpLHg9eHx8ZWs7dmFyIGs9dyQoeCksUz10aGlzLE09Uy5jeSgpLE89TS5zdHlsZUVuYWJsZWQoKTtpZihPKWZvcih2YXIgTj0wO048Uy5sZW5ndGg7TisrKXt2YXIgJD1TW05dLEg9JC5fcHJpdmF0ZSxxPW0kKCQpLFk9SC5iYkNhY2hlUG9zS2V5PT09cSxaPWsudXNlQ2FjaGUmJlkmJiFILnN0eWxlRGlydHk7JC5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoWil9dGhpcy51cGRhdGVDb21wb3VuZEJvdW5kcygheC51c2VDYWNoZSk7Zm9yKHZhciBjZT0wO2NlPFMubGVuZ3RoO2NlKyspe3ZhciB2ZT1TW2NlXTtiNShtLFV0KHZlLGspKX19cmV0dXJuIG0ueDE9anAobS54MSksbS55MT1qcChtLnkxKSxtLngyPWpwKG0ueDIpLG0ueTI9anAobS55MiksbS53PWpwKG0ueDItbS54MSksbS5oPWpwKG0ueTItbS55MSksbX0scnkuZGlydHlCb3VuZGluZ0JveENhY2hlPWZ1bmN0aW9uKCl7Zm9yKHZhciB4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBtPXRoaXNbeF0uX3ByaXZhdGU7bS5iYkNhY2hlPW51bGwsbS5iYkNhY2hlUG9zS2V5PW51bGwsbS5ib2R5Qm91bmRzPW51bGwsbS5vdmVybGF5Qm91bmRzPW51bGwsbS5sYWJlbEJvdW5kcy5hbGw9bnVsbCxtLmxhYmVsQm91bmRzLnNvdXJjZT1udWxsLG0ubGFiZWxCb3VuZHMudGFyZ2V0PW51bGwsbS5sYWJlbEJvdW5kcy5tYWluPW51bGwsbS5sYWJlbEJvdW5kcy5zb3VyY2VSb3Q9bnVsbCxtLmxhYmVsQm91bmRzLnRhcmdldFJvdD1udWxsLG0ubGFiZWxCb3VuZHMubWFpblJvdD1udWxsLG0uYXJyb3dCb3VuZHMuc291cmNlPW51bGwsbS5hcnJvd0JvdW5kcy50YXJnZXQ9bnVsbCxtLmFycm93Qm91bmRzWyJtaWQtc291cmNlIl09bnVsbCxtLmFycm93Qm91bmRzWyJtaWQtdGFyZ2V0Il09bnVsbH1yZXR1cm4gdGhpcy5lbWl0QW5kTm90aWZ5KCJib3VuZHMiKSx0aGlzfSxyeS5ib3VuZGluZ0JveEF0PWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXMubm9kZXMoKSxrPXRoaXMuY3koKSxTPWsuaGFzQ29tcG91bmROb2RlcygpLE09ay5jb2xsZWN0aW9uKCk7aWYoUyYmKE09bS5maWx0ZXIoZnVuY3Rpb24ocSl7cmV0dXJuIHEuaXNQYXJlbnQoKX0pLG09bS5ub3QoTSkpLHNlKHgpKXt2YXIgTz14O3g9ZnVuY3Rpb24oKXtyZXR1cm4gT319dmFyIE49ZnVuY3Rpb24oWSxaKXtyZXR1cm4gWS5fcHJpdmF0ZS5iYkF0T2xkUG9zPXgoWSxaKX0sJD1mdW5jdGlvbihZKXtyZXR1cm4gWS5fcHJpdmF0ZS5iYkF0T2xkUG9zfTtrLnN0YXJ0QmF0Y2goKSxtLmZvckVhY2goTikuc2lsZW50UG9zaXRpb25zKHgpLFMmJihNLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLE0uZGlydHlCb3VuZGluZ0JveENhY2hlKCksTS51cGRhdGVDb21wb3VuZEJvdW5kcyghMCkpO3ZhciBIPWRaKHRoaXMuYm91bmRpbmdCb3goe3VzZUNhY2hlOiExfSkpO3JldHVybiBtLnNpbGVudFBvc2l0aW9ucygkKSxTJiYoTS5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxNLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLE0udXBkYXRlQ29tcG91bmRCb3VuZHMoITApKSxrLmVuZEJhdGNoKCksSH0saDguYm91bmRpbmdib3g9aDguYmI9aDguYm91bmRpbmdCb3gsaDgucmVuZGVyZWRCb3VuZGluZ2JveD1oOC5yZW5kZXJlZEJvdW5kaW5nQm94O3ZhciBqbmU9cnksdGssbms7dGs9bms9e307dmFyIHkkPWZ1bmN0aW9uKG0pe20udXBwZXJjYXNlTmFtZT1HdChtLm5hbWUpLG0uYXV0b05hbWU9ImF1dG8iK20udXBwZXJjYXNlTmFtZSxtLmxhYmVsTmFtZT0ibGFiZWwiK20udXBwZXJjYXNlTmFtZSxtLm91dGVyTmFtZT0ib3V0ZXIiK20udXBwZXJjYXNlTmFtZSxtLnVwcGVyY2FzZU91dGVyTmFtZT1HdChtLm91dGVyTmFtZSksdGtbbS5uYW1lXT1mdW5jdGlvbigpe3ZhciBTPXRoaXNbMF0sTT1TLl9wcml2YXRlLE89TS5jeSxOPU8uX3ByaXZhdGUuc3R5bGVFbmFibGVkO2lmKFMpaWYoTil7aWYoUy5pc1BhcmVudCgpKXJldHVybiBTLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCksTVttLmF1dG9OYW1lXXx8MDt2YXIgJD1TLnBzdHlsZShtLm5hbWUpO3N3aXRjaCgkLnN0clZhbHVlKXtjYXNlImxhYmVsIjpyZXR1cm4gUy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoKSxNLnJzdHlsZVttLmxhYmVsTmFtZV18fDA7ZGVmYXVsdDpyZXR1cm4gJC5wZlZhbHVlfX1lbHNlIHJldHVybiAxfSx0a1sib3V0ZXIiK20udXBwZXJjYXNlTmFtZV09ZnVuY3Rpb24oKXt2YXIgUz10aGlzWzBdLE09Uy5fcHJpdmF0ZSxPPU0uY3ksTj1PLl9wcml2YXRlLnN0eWxlRW5hYmxlZDtpZihTKWlmKE4pe3ZhciAkPVNbbS5uYW1lXSgpLEg9Uy5wc3R5bGUoImJvcmRlci13aWR0aCIpLnBmVmFsdWUscT0yKlMucGFkZGluZygpO3JldHVybiAkK0grcX1lbHNlIHJldHVybiAxfSx0a1sicmVuZGVyZWQiK20udXBwZXJjYXNlTmFtZV09ZnVuY3Rpb24oKXt2YXIgUz10aGlzWzBdO2lmKFMpe3ZhciBNPVNbbS5uYW1lXSgpO3JldHVybiBNKnRoaXMuY3koKS56b29tKCl9fSx0a1sicmVuZGVyZWQiK20udXBwZXJjYXNlT3V0ZXJOYW1lXT1mdW5jdGlvbigpe3ZhciBTPXRoaXNbMF07aWYoUyl7dmFyIE09U1ttLm91dGVyTmFtZV0oKTtyZXR1cm4gTSp0aGlzLmN5KCkuem9vbSgpfX19O3kkKHtuYW1lOiJ3aWR0aCJ9KSx5JCh7bmFtZToiaGVpZ2h0In0pLG5rLnBhZGRpbmc9ZnVuY3Rpb24oKXt2YXIgeD10aGlzWzBdLG09eC5fcHJpdmF0ZTtyZXR1cm4geC5pc1BhcmVudCgpPyh4LnVwZGF0ZUNvbXBvdW5kQm91bmRzKCksbS5hdXRvUGFkZGluZyE9PXZvaWQgMD9tLmF1dG9QYWRkaW5nOngucHN0eWxlKCJwYWRkaW5nIikucGZWYWx1ZSk6eC5wc3R5bGUoInBhZGRpbmciKS5wZlZhbHVlfSxuay5wYWRkZWRIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgeD10aGlzWzBdO3JldHVybiB4LmhlaWdodCgpKzIqeC5wYWRkaW5nKCl9LG5rLnBhZGRlZFdpZHRoPWZ1bmN0aW9uKCl7dmFyIHg9dGhpc1swXTtyZXR1cm4geC53aWR0aCgpKzIqeC5wYWRkaW5nKCl9O3ZhciAkbmU9bmssem5lPWZ1bmN0aW9uKG0sayl7aWYobS5pc0VkZ2UoKSlyZXR1cm4gayhtKX0scW5lPWZ1bmN0aW9uKG0sayl7aWYobS5pc0VkZ2UoKSl7dmFyIFM9bS5jeSgpO3JldHVybiBsUyhrKG0pLFMuem9vbSgpLFMucGFuKCkpfX0sSG5lPWZ1bmN0aW9uKG0sayl7aWYobS5pc0VkZ2UoKSl7dmFyIFM9bS5jeSgpLE09Uy5wYW4oKSxPPVMuem9vbSgpO3JldHVybiBrKG0pLm1hcChmdW5jdGlvbihOKXtyZXR1cm4gbFMoTixPLE0pfSl9fSxWbmU9ZnVuY3Rpb24obSl7cmV0dXJuIG0ucmVuZGVyZXIoKS5nZXRDb250cm9sUG9pbnRzKG0pfSxVbmU9ZnVuY3Rpb24obSl7cmV0dXJuIG0ucmVuZGVyZXIoKS5nZXRTZWdtZW50UG9pbnRzKG0pfSxFST1mdW5jdGlvbihtKXtyZXR1cm4gbS5yZW5kZXJlcigpLmdldFNvdXJjZUVuZHBvaW50KG0pfSxHbmU9ZnVuY3Rpb24obSl7cmV0dXJuIG0ucmVuZGVyZXIoKS5nZXRUYXJnZXRFbmRwb2ludChtKX0sS25lPWZ1bmN0aW9uKG0pe3JldHVybiBtLnJlbmRlcmVyKCkuZ2V0RWRnZU1pZHBvaW50KG0pfSx4JD17Y29udHJvbFBvaW50czp7Z2V0OlZuZSxtdWx0OiEwfSxzZWdtZW50UG9pbnRzOntnZXQ6VW5lLG11bHQ6ITB9LHNvdXJjZUVuZHBvaW50OntnZXQ6RUl9LHRhcmdldEVuZHBvaW50OntnZXQ6R25lfSxtaWRwb2ludDp7Z2V0OktuZX19LEFTPWZ1bmN0aW9uKG0pe3JldHVybiJyZW5kZXJlZCIrbVswXS50b1VwcGVyQ2FzZSgpK20uc3Vic3RyKDEpfSxXbmU9T2JqZWN0LmtleXMoeCQpLnJlZHVjZShmdW5jdGlvbih4LG0pe3ZhciBrPXgkW21dLFM9QVMobSk7cmV0dXJuIHhbbV09ZnVuY3Rpb24oKXtyZXR1cm4gem5lKHRoaXMsay5nZXQpfSxrLm11bHQ/eFtTXT1mdW5jdGlvbigpe3JldHVybiBIbmUodGhpcyxrLmdldCl9OnhbU109ZnVuY3Rpb24oKXtyZXR1cm4gcW5lKHRoaXMsay5nZXQpfSx4fSx7fSksVEk9eXQoe30sQm5lLGpuZSwkbmUsV25lKTsvKiEKICAgIAkgIEV2ZW50IG9iamVjdCBiYXNlZCBvbiBqUXVlcnkgZXZlbnRzLCBNSVQgbGljZW5zZQoKICAgIAkgIGh0dHBzOi8vanF1ZXJ5Lm9yZy9saWNlbnNlLwogICAgCSAgaHR0cHM6Ly90bGRybGVnYWwuY29tL2xpY2Vuc2UvbWl0LWxpY2Vuc2UKICAgIAkgIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L2Jsb2IvbWFzdGVyL3NyYy9ldmVudC5qcwogICAgCSAgKi92YXIgcms9ZnVuY3Rpb24obSxrKXt0aGlzLnJlY3ljbGUobSxrKX07ZnVuY3Rpb24gaWsoKXtyZXR1cm4hMX1mdW5jdGlvbiBzaygpe3JldHVybiEwfXJrLnByb3RvdHlwZT17aW5zdGFuY2VTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iZXZlbnQifSxyZWN5Y2xlOmZ1bmN0aW9uKG0sayl7aWYodGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD10aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWlrLG0hPW51bGwmJm0ucHJldmVudERlZmF1bHQ/KHRoaXMudHlwZT1tLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9bS5kZWZhdWx0UHJldmVudGVkP3NrOmlrKTptIT1udWxsJiZtLnR5cGU/az1tOnRoaXMudHlwZT1tLGshPW51bGwmJih0aGlzLm9yaWdpbmFsRXZlbnQ9ay5vcmlnaW5hbEV2ZW50LHRoaXMudHlwZT1rLnR5cGUhPW51bGw/ay50eXBlOnRoaXMudHlwZSx0aGlzLmN5PWsuY3ksdGhpcy50YXJnZXQ9ay50YXJnZXQsdGhpcy5wb3NpdGlvbj1rLnBvc2l0aW9uLHRoaXMucmVuZGVyZWRQb3NpdGlvbj1rLnJlbmRlcmVkUG9zaXRpb24sdGhpcy5uYW1lc3BhY2U9ay5uYW1lc3BhY2UsdGhpcy5sYXlvdXQ9ay5sYXlvdXQpLHRoaXMuY3khPW51bGwmJnRoaXMucG9zaXRpb24hPW51bGwmJnRoaXMucmVuZGVyZWRQb3NpdGlvbj09bnVsbCl7dmFyIFM9dGhpcy5wb3NpdGlvbixNPXRoaXMuY3kuem9vbSgpLE89dGhpcy5jeS5wYW4oKTt0aGlzLnJlbmRlcmVkUG9zaXRpb249e3g6Uy54Kk0rTy54LHk6Uy55Kk0rTy55fX10aGlzLnRpbWVTdGFtcD1tJiZtLnRpbWVTdGFtcHx8RGF0ZS5ub3coKX0scHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1zazt2YXIgbT10aGlzLm9yaWdpbmFsRXZlbnQ7bSYmbS5wcmV2ZW50RGVmYXVsdCYmbS5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXNrO3ZhciBtPXRoaXMub3JpZ2luYWxFdmVudDttJiZtLnN0b3BQcm9wYWdhdGlvbiYmbS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1zayx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfSxpc0RlZmF1bHRQcmV2ZW50ZWQ6aWssaXNQcm9wYWdhdGlvblN0b3BwZWQ6aWssaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6aWt9O3ZhciBrJD0vXihbXi5dKykoXC4oPzpbXi5dKykpPyQvLFluZT0iLioiLEUkPXtxdWFsaWZpZXJDb21wYXJlOmZ1bmN0aW9uKG0sayl7cmV0dXJuIG09PT1rfSxldmVudE1hdGNoZXM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sYWRkRXZlbnRGaWVsZHM6ZnVuY3Rpb24oKXt9LGNhbGxiYWNrQ29udGV4dDpmdW5jdGlvbihtKXtyZXR1cm4gbX0sYmVmb3JlRW1pdDpmdW5jdGlvbigpe30sYWZ0ZXJFbWl0OmZ1bmN0aW9uKCl7fSxidWJibGU6ZnVuY3Rpb24oKXtyZXR1cm4hMX0scGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGNvbnRleHQ6bnVsbH0sVCQ9T2JqZWN0LmtleXMoRSQpLFhuZT17fTtmdW5jdGlvbiBMUygpe2Zvcih2YXIgeD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06WG5lLG09YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsaz0wO2s8VCQubGVuZ3RoO2srKyl7dmFyIFM9VCRba107dGhpc1tTXT14W1NdfHxFJFtTXX10aGlzLmNvbnRleHQ9bXx8dGhpcy5jb250ZXh0LHRoaXMubGlzdGVuZXJzPVtdLHRoaXMuZW1pdHRpbmc9MH12YXIgWDI9TFMucHJvdG90eXBlLEMkPWZ1bmN0aW9uKG0sayxTLE0sTyxOLCQpe2FlKE0pJiYoTz1NLE09bnVsbCksJCYmKE49PW51bGw/Tj0kOk49eXQoe30sTiwkKSk7Zm9yKHZhciBIPW5lKFMpP1M6Uy5zcGxpdCgvXHMrLykscT0wO3E8SC5sZW5ndGg7cSsrKXt2YXIgWT1IW3FdO2lmKCFTZShZKSl7dmFyIFo9WS5tYXRjaChrJCk7aWYoWil7dmFyIGNlPVpbMV0sdmU9WlsyXT9aWzJdOm51bGwsbWU9ayhtLFksY2UsdmUsTSxPLE4pO2lmKG1lPT09ITEpYnJlYWt9fX19LFMkPWZ1bmN0aW9uKG0sayl7cmV0dXJuIG0uYWRkRXZlbnRGaWVsZHMobS5jb250ZXh0LGspLG5ldyByayhrLnR5cGUsayl9LE1TPWZ1bmN0aW9uKG0sayxTKXtpZihJZShTKSl7ayhtLFMpO3JldHVybn1lbHNlIGlmKHNlKFMpKXtrKG0sUyQobSxTKSk7cmV0dXJufWZvcih2YXIgTT1uZShTKT9TOlMuc3BsaXQoL1xzKy8pLE89MDtPPE0ubGVuZ3RoO08rKyl7dmFyIE49TVtPXTtpZighU2UoTikpe3ZhciAkPU4ubWF0Y2goayQpO2lmKCQpe3ZhciBIPSRbMV0scT0kWzJdPyRbMl06bnVsbCxZPVMkKG0se3R5cGU6SCxuYW1lc3BhY2U6cSx0YXJnZXQ6bS5jb250ZXh0fSk7ayhtLFkpfX19fTtYMi5vbj1YMi5hZGRMaXN0ZW5lcj1mdW5jdGlvbih4LG0sayxTLE0pe3JldHVybiBDJCh0aGlzLGZ1bmN0aW9uKE8sTiwkLEgscSxZLFope2FlKFkpJiZPLmxpc3RlbmVycy5wdXNoKHtldmVudDpOLGNhbGxiYWNrOlksdHlwZTokLG5hbWVzcGFjZTpILHF1YWxpZmllcjpxLGNvbmY6Wn0pfSx4LG0sayxTLE0pLHRoaXN9LFgyLm9uZT1mdW5jdGlvbih4LG0sayxTKXtyZXR1cm4gdGhpcy5vbih4LG0sayxTLHtvbmU6ITB9KX0sWDIucmVtb3ZlTGlzdGVuZXI9WDIub2ZmPWZ1bmN0aW9uKHgsbSxrLFMpe3ZhciBNPXRoaXM7dGhpcy5lbWl0dGluZyE9PTAmJih0aGlzLmxpc3RlbmVycz16Sih0aGlzLmxpc3RlbmVycykpO2Zvcih2YXIgTz10aGlzLmxpc3RlbmVycyxOPWZ1bmN0aW9uKHEpe3ZhciBZPU9bcV07QyQoTSxmdW5jdGlvbihaLGNlLHZlLG1lLExlLF9lKXtpZigoWS50eXBlPT09dmV8fHg9PT0iKiIpJiYoIW1lJiZZLm5hbWVzcGFjZSE9PSIuKiJ8fFkubmFtZXNwYWNlPT09bWUpJiYoIUxlfHxaLnF1YWxpZmllckNvbXBhcmUoWS5xdWFsaWZpZXIsTGUpKSYmKCFfZXx8WS5jYWxsYmFjaz09PV9lKSlyZXR1cm4gTy5zcGxpY2UocSwxKSwhMX0seCxtLGssUyl9LCQ9Ty5sZW5ndGgtMTskPj0wOyQtLSlOKCQpO3JldHVybiB0aGlzfSxYMi5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW1vdmVMaXN0ZW5lcigiKiIpfSxYMi5lbWl0PVgyLnRyaWdnZXI9ZnVuY3Rpb24oeCxtLGspe3ZhciBTPXRoaXMubGlzdGVuZXJzLE09Uy5sZW5ndGg7cmV0dXJuIHRoaXMuZW1pdHRpbmcrKyxuZShtKXx8KG09W21dKSxNUyh0aGlzLGZ1bmN0aW9uKE8sTil7ayE9bnVsbCYmKFM9W3tldmVudDpOLmV2ZW50LHR5cGU6Ti50eXBlLG5hbWVzcGFjZTpOLm5hbWVzcGFjZSxjYWxsYmFjazprfV0sTT1TLmxlbmd0aCk7Zm9yKHZhciAkPWZ1bmN0aW9uKFkpe3ZhciBaPVNbWV07aWYoWi50eXBlPT09Ti50eXBlJiYoIVoubmFtZXNwYWNlfHxaLm5hbWVzcGFjZT09PU4ubmFtZXNwYWNlfHxaLm5hbWVzcGFjZT09PVluZSkmJk8uZXZlbnRNYXRjaGVzKE8uY29udGV4dCxaLE4pKXt2YXIgY2U9W05dO20hPW51bGwmJnVqKGNlLG0pLE8uYmVmb3JlRW1pdChPLmNvbnRleHQsWixOKSxaLmNvbmYmJlouY29uZi5vbmUmJihPLmxpc3RlbmVycz1PLmxpc3RlbmVycy5maWx0ZXIoZnVuY3Rpb24oTGUpe3JldHVybiBMZSE9PVp9KSk7dmFyIHZlPU8uY2FsbGJhY2tDb250ZXh0KE8uY29udGV4dCxaLE4pLG1lPVouY2FsbGJhY2suYXBwbHkodmUsY2UpO08uYWZ0ZXJFbWl0KE8uY29udGV4dCxaLE4pLG1lPT09ITEmJihOLnN0b3BQcm9wYWdhdGlvbigpLE4ucHJldmVudERlZmF1bHQoKSl9fSxIPTA7SDxNO0grKykkKEgpO08uYnViYmxlKE8uY29udGV4dCkmJiFOLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJk8ucGFyZW50KE8uY29udGV4dCkuZW1pdChOLG0pfSx4KSx0aGlzLmVtaXR0aW5nLS0sdGhpc307dmFyIFFuZT17cXVhbGlmaWVyQ29tcGFyZTpmdW5jdGlvbihtLGspe3JldHVybiBtPT1udWxsfHxrPT1udWxsP209PW51bGwmJms9PW51bGw6bS5zYW1lVGV4dChrKX0sZXZlbnRNYXRjaGVzOmZ1bmN0aW9uKG0sayxTKXt2YXIgTT1rLnF1YWxpZmllcjtyZXR1cm4gTSE9bnVsbD9tIT09Uy50YXJnZXQmJlUoUy50YXJnZXQpJiZNLm1hdGNoZXMoUy50YXJnZXQpOiEwfSxhZGRFdmVudEZpZWxkczpmdW5jdGlvbihtLGspe2suY3k9bS5jeSgpLGsudGFyZ2V0PW19LGNhbGxiYWNrQ29udGV4dDpmdW5jdGlvbihtLGssUyl7cmV0dXJuIGsucXVhbGlmaWVyIT1udWxsP1MudGFyZ2V0Om19LGJlZm9yZUVtaXQ6ZnVuY3Rpb24obSxrKXtrLmNvbmYmJmsuY29uZi5vbmNlJiZrLmNvbmYub25jZUNvbGxlY3Rpb24ucmVtb3ZlTGlzdGVuZXIoay5ldmVudCxrLnF1YWxpZmllcixrLmNhbGxiYWNrKX0sYnViYmxlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihtKXtyZXR1cm4gbS5pc0NoaWxkKCk/bS5wYXJlbnQoKTptLmN5KCl9fSxtNT1mdW5jdGlvbihtKXtyZXR1cm4gYmUobSk/bmV3IGV5KG0pOm19LF8kPXtjcmVhdGVFbWl0dGVyOmZ1bmN0aW9uKCl7Zm9yKHZhciBtPTA7bTx0aGlzLmxlbmd0aDttKyspe3ZhciBrPXRoaXNbbV0sUz1rLl9wcml2YXRlO1MuZW1pdHRlcnx8KFMuZW1pdHRlcj1uZXcgTFMoUW5lLGspKX1yZXR1cm4gdGhpc30sZW1pdHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVtaXR0ZXJ9LG9uOmZ1bmN0aW9uKG0sayxTKXtmb3IodmFyIE09bTUoayksTz0wO088dGhpcy5sZW5ndGg7TysrKXt2YXIgTj10aGlzW09dO04uZW1pdHRlcigpLm9uKG0sTSxTKX1yZXR1cm4gdGhpc30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT1tNShrKSxPPTA7Tzx0aGlzLmxlbmd0aDtPKyspe3ZhciBOPXRoaXNbT107Ti5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIobSxNLFMpfXJldHVybiB0aGlzfSxyZW1vdmVBbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtmb3IodmFyIG09MDttPHRoaXMubGVuZ3RoO20rKyl7dmFyIGs9dGhpc1ttXTtrLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKX1yZXR1cm4gdGhpc30sb25lOmZ1bmN0aW9uKG0sayxTKXtmb3IodmFyIE09bTUoayksTz0wO088dGhpcy5sZW5ndGg7TysrKXt2YXIgTj10aGlzW09dO04uZW1pdHRlcigpLm9uZShtLE0sUyl9cmV0dXJuIHRoaXN9LG9uY2U6ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT1tNShrKSxPPTA7Tzx0aGlzLmxlbmd0aDtPKyspe3ZhciBOPXRoaXNbT107Ti5lbWl0dGVyKCkub24obSxNLFMse29uY2U6ITAsb25jZUNvbGxlY3Rpb246dGhpc30pfX0sZW1pdDpmdW5jdGlvbihtLGspe2Zvcih2YXIgUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgTT10aGlzW1NdO00uZW1pdHRlcigpLmVtaXQobSxrKX1yZXR1cm4gdGhpc30sZW1pdEFuZE5vdGlmeTpmdW5jdGlvbihtLGspe2lmKHRoaXMubGVuZ3RoIT09MClyZXR1cm4gdGhpcy5jeSgpLm5vdGlmeShtLHRoaXMpLHRoaXMuZW1pdChtLGspLHRoaXN9fTtmdS5ldmVudEFsaWFzZXNPbihfJCk7dmFyIENJPXtub2RlczpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oayl7cmV0dXJuIGsuaXNOb2RlKCl9KS5maWx0ZXIobSl9LGVkZ2VzOmZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihrKXtyZXR1cm4gay5pc0VkZ2UoKX0pLmZpbHRlcihtKX0sYnlHcm91cDpmdW5jdGlvbigpe2Zvcih2YXIgbT10aGlzLnNwYXduKCksaz10aGlzLnNwYXduKCksUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgTT10aGlzW1NdO00uaXNOb2RlKCk/bS5wdXNoKE0pOmsucHVzaChNKX1yZXR1cm57bm9kZXM6bSxlZGdlczprfX0sZmlsdGVyOmZ1bmN0aW9uKG0sayl7aWYobT09PXZvaWQgMClyZXR1cm4gdGhpcztpZihiZShtKXx8eGUobSkpcmV0dXJuIG5ldyBleShtKS5maWx0ZXIodGhpcyk7aWYoYWUobSkpe2Zvcih2YXIgUz10aGlzLnNwYXduKCksTT10aGlzLE89MDtPPE0ubGVuZ3RoO08rKyl7dmFyIE49TVtPXSwkPWs/bS5hcHBseShrLFtOLE8sTV0pOm0oTixPLE0pOyQmJlMucHVzaChOKX1yZXR1cm4gU31yZXR1cm4gdGhpcy5zcGF3bigpfSxub3Q6ZnVuY3Rpb24obSl7aWYobSl7YmUobSkmJihtPXRoaXMuZmlsdGVyKG0pKTtmb3IodmFyIGs9dGhpcy5zcGF3bigpLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIE09dGhpc1tTXSxPPW0uaGFzKE0pO098fGsucHVzaChNKX1yZXR1cm4ga31lbHNlIHJldHVybiB0aGlzfSxhYnNvbHV0ZUNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgbT10aGlzLmN5KCk7cmV0dXJuIG0ubXV0YWJsZUVsZW1lbnRzKCkubm90KHRoaXMpfSxpbnRlcnNlY3Q6ZnVuY3Rpb24obSl7aWYoYmUobSkpe3ZhciBrPW07cmV0dXJuIHRoaXMuZmlsdGVyKGspfWZvcih2YXIgUz10aGlzLnNwYXduKCksTT10aGlzLE89bSxOPXRoaXMubGVuZ3RoPG0ubGVuZ3RoLCQ9Tj9NOk8sSD1OP086TSxxPTA7cTwkLmxlbmd0aDtxKyspe3ZhciBZPSRbcV07SC5oYXMoWSkmJlMucHVzaChZKX1yZXR1cm4gU30seG9yOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGUuY3k7YmUobSkmJihtPWsuJChtKSk7dmFyIFM9dGhpcy5zcGF3bigpLE09dGhpcyxPPW0sTj1mdW5jdGlvbihILHEpe2Zvcih2YXIgWT0wO1k8SC5sZW5ndGg7WSsrKXt2YXIgWj1IW1ldLGNlPVouX3ByaXZhdGUuZGF0YS5pZCx2ZT1xLmhhc0VsZW1lbnRXaXRoSWQoY2UpO3ZlfHxTLnB1c2goWil9fTtyZXR1cm4gTihNLE8pLE4oTyxNKSxTfSxkaWZmOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGUuY3k7YmUobSkmJihtPWsuJChtKSk7dmFyIFM9dGhpcy5zcGF3bigpLE09dGhpcy5zcGF3bigpLE89dGhpcy5zcGF3bigpLE49dGhpcywkPW0sSD1mdW5jdGlvbihZLFosY2Upe2Zvcih2YXIgdmU9MDt2ZTxZLmxlbmd0aDt2ZSsrKXt2YXIgbWU9WVt2ZV0sTGU9bWUuX3ByaXZhdGUuZGF0YS5pZCxfZT1aLmhhc0VsZW1lbnRXaXRoSWQoTGUpO19lP08ubWVyZ2UobWUpOmNlLnB1c2gobWUpfX07cmV0dXJuIEgoTiwkLFMpLEgoJCxOLE0pLHtsZWZ0OlMscmlnaHQ6TSxib3RoOk99fSxhZGQ6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcy5fcHJpdmF0ZS5jeTtpZighbSlyZXR1cm4gdGhpcztpZihiZShtKSl7dmFyIFM9bTttPWsubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKFMpfWZvcih2YXIgTT10aGlzLnNwYXduU2VsZigpLE89MDtPPG0ubGVuZ3RoO08rKyl7dmFyIE49bVtPXSwkPSF0aGlzLmhhcyhOKTskJiZNLnB1c2goTil9cmV0dXJuIE19LG1lcmdlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGUsUz1rLmN5O2lmKCFtKXJldHVybiB0aGlzO2lmKG0mJmJlKG0pKXt2YXIgTT1tO209Uy5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIoTSl9Zm9yKHZhciBPPWsubWFwLE49MDtOPG0ubGVuZ3RoO04rKyl7dmFyICQ9bVtOXSxIPSQuX3ByaXZhdGUuZGF0YS5pZCxxPSFPLmhhcyhIKTtpZihxKXt2YXIgWT10aGlzLmxlbmd0aCsrO3RoaXNbWV09JCxPLnNldChILHtlbGU6JCxpbmRleDpZfSl9fXJldHVybiB0aGlzfSx1bm1lcmdlQXQ6ZnVuY3Rpb24obSl7dmFyIGs9dGhpc1ttXSxTPWsuaWQoKSxNPXRoaXMuX3ByaXZhdGUsTz1NLm1hcDt0aGlzW21dPXZvaWQgMCxPLmRlbGV0ZShTKTt2YXIgTj1tPT09dGhpcy5sZW5ndGgtMTtpZih0aGlzLmxlbmd0aD4xJiYhTil7dmFyICQ9dGhpcy5sZW5ndGgtMSxIPXRoaXNbJF0scT1ILl9wcml2YXRlLmRhdGEuaWQ7dGhpc1skXT12b2lkIDAsdGhpc1ttXT1ILE8uc2V0KHEse2VsZTpILGluZGV4Om19KX1yZXR1cm4gdGhpcy5sZW5ndGgtLSx0aGlzfSx1bm1lcmdlT25lOmZ1bmN0aW9uKG0pe209bVswXTt2YXIgaz10aGlzLl9wcml2YXRlLFM9bS5fcHJpdmF0ZS5kYXRhLmlkLE09ay5tYXAsTz1NLmdldChTKTtpZighTylyZXR1cm4gdGhpczt2YXIgTj1PLmluZGV4O3JldHVybiB0aGlzLnVubWVyZ2VBdChOKSx0aGlzfSx1bm1lcmdlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGUuY3k7aWYoIW0pcmV0dXJuIHRoaXM7aWYobSYmYmUobSkpe3ZhciBTPW07bT1rLm11dGFibGVFbGVtZW50cygpLmZpbHRlcihTKX1mb3IodmFyIE09MDtNPG0ubGVuZ3RoO00rKyl0aGlzLnVubWVyZ2VPbmUobVtNXSk7cmV0dXJuIHRoaXN9LHVubWVyZ2VCeTpmdW5jdGlvbihtKXtmb3IodmFyIGs9dGhpcy5sZW5ndGgtMTtrPj0wO2stLSl7dmFyIFM9dGhpc1trXTttKFMpJiZ0aGlzLnVubWVyZ2VBdChrKX1yZXR1cm4gdGhpc30sbWFwOmZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPVtdLE09dGhpcyxPPTA7TzxNLmxlbmd0aDtPKyspe3ZhciBOPU1bT10sJD1rP20uYXBwbHkoayxbTixPLE1dKTptKE4sTyxNKTtTLnB1c2goJCl9cmV0dXJuIFN9LHJlZHVjZTpmdW5jdGlvbihtLGspe2Zvcih2YXIgUz1rLE09dGhpcyxPPTA7TzxNLmxlbmd0aDtPKyspUz1tKFMsTVtPXSxPLE0pO3JldHVybiBTfSxtYXg6ZnVuY3Rpb24obSxrKXtmb3IodmFyIFM9LTEvMCxNLE89dGhpcyxOPTA7TjxPLmxlbmd0aDtOKyspe3ZhciAkPU9bTl0sSD1rP20uYXBwbHkoayxbJCxOLE9dKTptKCQsTixPKTtIPlMmJihTPUgsTT0kKX1yZXR1cm57dmFsdWU6UyxlbGU6TX19LG1pbjpmdW5jdGlvbihtLGspe2Zvcih2YXIgUz0xLzAsTSxPPXRoaXMsTj0wO048Ty5sZW5ndGg7TisrKXt2YXIgJD1PW05dLEg9az9tLmFwcGx5KGssWyQsTixPXSk6bSgkLE4sTyk7SDxTJiYoUz1ILE09JCl9cmV0dXJue3ZhbHVlOlMsZWxlOk19fX0sUWM9Q0k7UWMudT1RY1sifCJdPVFjWyIrIl09UWMudW5pb249UWMub3I9UWMuYWRkLFFjWyJcXCJdPVFjWyIhIl09UWNbIi0iXT1RYy5kaWZmZXJlbmNlPVFjLnJlbGF0aXZlQ29tcGxlbWVudD1RYy5zdWJ0cmFjdD1RYy5ub3QsUWMubj1RY1siJiJdPVFjWyIuIl09UWMuYW5kPVFjLmludGVyc2VjdGlvbj1RYy5pbnRlcnNlY3QsUWNbIl4iXT1RY1siKCspIl09UWNbIigtKSJdPVFjLnN5bW1ldHJpY0RpZmZlcmVuY2U9UWMuc3ltZGlmZj1RYy54b3IsUWMuZm5GaWx0ZXI9UWMuZmlsdGVyRm49UWMuc3RkRmlsdGVyPVFjLmZpbHRlcixRYy5jb21wbGVtZW50PVFjLmFic2NvbXA9UWMuYWJzb2x1dGVDb21wbGVtZW50O3ZhciBTST17aXNOb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JvdXAoKT09PSJub2RlcyJ9LGlzRWRnZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdyb3VwKCk9PT0iZWRnZXMifSxpc0xvb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0VkZ2UoKSYmdGhpcy5zb3VyY2UoKVswXT09PXRoaXMudGFyZ2V0KClbMF19LGlzU2ltcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNFZGdlKCkmJnRoaXMuc291cmNlKClbMF0hPT10aGlzLnRhcmdldCgpWzBdfSxncm91cDpmdW5jdGlvbigpe3ZhciBtPXRoaXNbMF07aWYobSlyZXR1cm4gbS5fcHJpdmF0ZS5ncm91cH19LF9JPWZ1bmN0aW9uKG0sayl7dmFyIFM9bS5jeSgpLE09Uy5oYXNDb21wb3VuZE5vZGVzKCk7ZnVuY3Rpb24gTyhZKXt2YXIgWj1ZLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpO3JldHVybiBaLnZhbHVlPT09ImF1dG8iP00/WS56RGVwdGgoKTowOloudmFsdWU9PT0iYm90dG9tIj8tMTpaLnZhbHVlPT09InRvcCI/WDc6MH12YXIgTj1PKG0pLU8oayk7aWYoTiE9PTApcmV0dXJuIE47ZnVuY3Rpb24gJChZKXt2YXIgWj1ZLnBzdHlsZSgiei1pbmRleC1jb21wYXJlIik7cmV0dXJuIFoudmFsdWU9PT0iYXV0byImJlkuaXNOb2RlKCk/MTowfXZhciBIPSQobSktJChrKTtpZihIIT09MClyZXR1cm4gSDt2YXIgcT1tLnBzdHlsZSgiei1pbmRleCIpLnZhbHVlLWsucHN0eWxlKCJ6LWluZGV4IikudmFsdWU7cmV0dXJuIHEhPT0wP3E6bS5wb29sSW5kZXgoKS1rLnBvb2xJbmRleCgpfSxEUz17Zm9yRWFjaDpmdW5jdGlvbihtLGspe2lmKGFlKG0pKWZvcih2YXIgUz10aGlzLmxlbmd0aCxNPTA7TTxTO00rKyl7dmFyIE89dGhpc1tNXSxOPWs/bS5hcHBseShrLFtPLE0sdGhpc10pOm0oTyxNLHRoaXMpO2lmKE49PT0hMSlicmVha31yZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbigpe2Zvcih2YXIgbT1bXSxrPTA7azx0aGlzLmxlbmd0aDtrKyspbS5wdXNoKHRoaXNba10pO3JldHVybiBtfSxzbGljZTpmdW5jdGlvbihtLGspe3ZhciBTPVtdLE09dGhpcy5sZW5ndGg7az09bnVsbCYmKGs9TSksbT09bnVsbCYmKG09MCksbTwwJiYobT1NK20pLGs8MCYmKGs9TStrKTtmb3IodmFyIE89bTtPPj0wJiZPPGsmJk88TTtPKyspUy5wdXNoKHRoaXNbT10pO3JldHVybiB0aGlzLnNwYXduKFMpfSxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxlcTpmdW5jdGlvbihtKXtyZXR1cm4gdGhpc1ttXXx8dGhpcy5zcGF3bigpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzWzBdfHx0aGlzLnNwYXduKCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0aGlzLmxlbmd0aC0xXXx8dGhpcy5zcGF3bigpfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aD09PTB9LG5vbmVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZW1wdHkoKX0sc29ydDpmdW5jdGlvbihtKXtpZighYWUobSkpcmV0dXJuIHRoaXM7dmFyIGs9dGhpcy50b0FycmF5KCkuc29ydChtKTtyZXR1cm4gdGhpcy5zcGF3bihrKX0sc29ydEJ5WkluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc29ydChfSSl9LHpEZXB0aDpmdW5jdGlvbigpe3ZhciBtPXRoaXNbMF07aWYobSl7dmFyIGs9bS5fcHJpdmF0ZSxTPWsuZ3JvdXA7aWYoUz09PSJub2RlcyIpe3ZhciBNPWsuZGF0YS5wYXJlbnQ/bS5wYXJlbnRzKCkuc2l6ZSgpOjA7cmV0dXJuIG0uaXNQYXJlbnQoKT9NOlg3LTF9ZWxzZXt2YXIgTz1rLnNvdXJjZSxOPWsudGFyZ2V0LCQ9Ty56RGVwdGgoKSxIPU4uekRlcHRoKCk7cmV0dXJuIE1hdGgubWF4KCQsSCwwKX19fX07RFMuZWFjaD1EUy5mb3JFYWNoO3ZhciBKbmU9ZnVuY3Rpb24oKXt2YXIgbT0idW5kZWZpbmVkIixrPSh0eXBlb2YgU3ltYm9sPiJ1Ij8idW5kZWZpbmVkIjp1KFN5bWJvbCkpIT1tJiZ1KFN5bWJvbC5pdGVyYXRvcikhPW07ayYmKERTW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXt2YXIgUz10aGlzLE09e3ZhbHVlOnZvaWQgMCxkb25lOiExfSxPPTAsTj10aGlzLmxlbmd0aDtyZXR1cm4gYih7bmV4dDpmdW5jdGlvbigpe3JldHVybiBPPE4/TS52YWx1ZT1TW08rK106KE0udmFsdWU9dm9pZCAwLE0uZG9uZT0hMCksTX19LFN5bWJvbC5pdGVyYXRvcixmdW5jdGlvbigpe3JldHVybiB0aGlzfSl9KX07Sm5lKCk7dmFyIFpuZT1xMCh7bm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExfSksSVM9e2xheW91dERpbWVuc2lvbnM6ZnVuY3Rpb24obSl7bT1abmUobSk7dmFyIGs7aWYoIXRoaXMudGFrZXNVcFNwYWNlKCkpaz17dzowLGg6MH07ZWxzZSBpZihtLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyl7dmFyIFM9dGhpcy5ib3VuZGluZ0JveCgpO2s9e3c6Uy53LGg6Uy5ofX1lbHNlIGs9e3c6dGhpcy5vdXRlcldpZHRoKCksaDp0aGlzLm91dGVySGVpZ2h0KCl9O3JldHVybihrLnc9PT0wfHxrLmg9PT0wKSYmKGsudz1rLmg9MSksa30sbGF5b3V0UG9zaXRpb25zOmZ1bmN0aW9uKG0sayxTKXt2YXIgTT10aGlzLm5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uKGN0KXtyZXR1cm4hY3QuaXNQYXJlbnQoKX0pLE89dGhpcy5jeSgpLE49ay5lbGVzLCQ9ZnVuY3Rpb24oc3Qpe3JldHVybiBzdC5pZCgpfSxIPU5lKFMsJCk7bS5lbWl0KHt0eXBlOiJsYXlvdXRzdGFydCIsbGF5b3V0Om19KSxtLmFuaW1hdGlvbnM9W107dmFyIHE9ZnVuY3Rpb24oc3QsWWUsbXQpe3ZhciBKZT17eDpZZS54MStZZS53LzIseTpZZS55MStZZS5oLzJ9LEx0PXt4OihtdC54LUplLngpKnN0LHk6KG10LnktSmUueSkqc3R9O3JldHVybnt4OkplLngrTHQueCx5OkplLnkrTHQueX19LFk9ay5zcGFjaW5nRmFjdG9yJiZrLnNwYWNpbmdGYWN0b3IhPT0xLFo9ZnVuY3Rpb24oKXtpZighWSlyZXR1cm4gbnVsbDtmb3IodmFyIHN0PVdkKCksWWU9MDtZZTxNLmxlbmd0aDtZZSsrKXt2YXIgbXQ9TVtZZV0sSmU9SChtdCxZZSk7Ylooc3QsSmUueCxKZS55KX1yZXR1cm4gc3R9LGNlPVooKSx2ZT1OZShmdW5jdGlvbihjdCxzdCl7dmFyIFllPUgoY3Qsc3QpO2lmKFkpe3ZhciBtdD1NYXRoLmFicyhrLnNwYWNpbmdGYWN0b3IpO1llPXEobXQsY2UsWWUpfXJldHVybiBrLnRyYW5zZm9ybSE9bnVsbCYmKFllPWsudHJhbnNmb3JtKGN0LFllKSksWWV9LCQpO2lmKGsuYW5pbWF0ZSl7Zm9yKHZhciBtZT0wO21lPE0ubGVuZ3RoO21lKyspe3ZhciBMZT1NW21lXSxfZT12ZShMZSxtZSksRWU9ay5hbmltYXRlRmlsdGVyPT1udWxsfHxrLmFuaW1hdGVGaWx0ZXIoTGUsbWUpO2lmKEVlKXt2YXIgQmU9TGUuYW5pbWF0aW9uKHtwb3NpdGlvbjpfZSxkdXJhdGlvbjprLmFuaW1hdGlvbkR1cmF0aW9uLGVhc2luZzprLmFuaW1hdGlvbkVhc2luZ30pO20uYW5pbWF0aW9ucy5wdXNoKEJlKX1lbHNlIExlLnBvc2l0aW9uKF9lKX1pZihrLmZpdCl7dmFyIFJlPU8uYW5pbWF0aW9uKHtmaXQ6e2JvdW5kaW5nQm94Ok4uYm91bmRpbmdCb3hBdCh2ZSkscGFkZGluZzprLnBhZGRpbmd9LGR1cmF0aW9uOmsuYW5pbWF0aW9uRHVyYXRpb24sZWFzaW5nOmsuYW5pbWF0aW9uRWFzaW5nfSk7bS5hbmltYXRpb25zLnB1c2goUmUpfWVsc2UgaWYoay56b29tIT09dm9pZCAwJiZrLnBhbiE9PXZvaWQgMCl7dmFyIFZlPU8uYW5pbWF0aW9uKHt6b29tOmsuem9vbSxwYW46ay5wYW4sZHVyYXRpb246ay5hbmltYXRpb25EdXJhdGlvbixlYXNpbmc6ay5hbmltYXRpb25FYXNpbmd9KTttLmFuaW1hdGlvbnMucHVzaChWZSl9bS5hbmltYXRpb25zLmZvckVhY2goZnVuY3Rpb24oY3Qpe3JldHVybiBjdC5wbGF5KCl9KSxtLm9uZSgibGF5b3V0cmVhZHkiLGsucmVhZHkpLG0uZW1pdCh7dHlwZToibGF5b3V0cmVhZHkiLGxheW91dDptfSksaTguYWxsKG0uYW5pbWF0aW9ucy5tYXAoZnVuY3Rpb24oY3Qpe3JldHVybiBjdC5wcm9taXNlKCl9KSkudGhlbihmdW5jdGlvbigpe20ub25lKCJsYXlvdXRzdG9wIixrLnN0b3ApLG0uZW1pdCh7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0Om19KX0pfWVsc2UgTS5wb3NpdGlvbnModmUpLGsuZml0JiZPLmZpdChrLmVsZXMsay5wYWRkaW5nKSxrLnpvb20hPW51bGwmJk8uem9vbShrLnpvb20pLGsucGFuJiZPLnBhbihrLnBhbiksbS5vbmUoImxheW91dHJlYWR5IixrLnJlYWR5KSxtLmVtaXQoe3R5cGU6ImxheW91dHJlYWR5IixsYXlvdXQ6bX0pLG0ub25lKCJsYXlvdXRzdG9wIixrLnN0b3ApLG0uZW1pdCh7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0Om19KTtyZXR1cm4gdGhpc30sbGF5b3V0OmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuY3koKTtyZXR1cm4gay5tYWtlTGF5b3V0KHl0KHt9LG0se2VsZXM6dGhpc30pKX19O0lTLmNyZWF0ZUxheW91dD1JUy5tYWtlTGF5b3V0PUlTLmxheW91dDtmdW5jdGlvbiBlcmUoeCxtLGspe3ZhciBTPWsuX3ByaXZhdGUsTT1TLnN0eWxlQ2FjaGU9Uy5zdHlsZUNhY2hlfHxbXSxPO3JldHVybihPPU1beF0pIT1udWxsfHwoTz1NW3hdPW0oaykpLE99ZnVuY3Rpb24gT1MoeCxtKXtyZXR1cm4geD11ZCh4KSxmdW5jdGlvbihTKXtyZXR1cm4gZXJlKHgsbSxTKX19ZnVuY3Rpb24gTlMoeCxtKXt4PXVkKHgpO3ZhciBrPWZ1bmN0aW9uKE0pe3JldHVybiBtLmNhbGwoTSl9O3JldHVybiBmdW5jdGlvbigpe3ZhciBNPXRoaXNbMF07aWYoTSlyZXR1cm4gZXJlKHgsayxNKX19dmFyIEgwPXtyZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGU6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcy5jeSgpLFM9ay5yZW5kZXJlcigpLE09ay5zdHlsZUVuYWJsZWQoKTtyZXR1cm4gUyYmTSYmUy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUodGhpcyxtKSx0aGlzfSxkaXJ0eVN0eWxlQ2FjaGU6ZnVuY3Rpb24oKXt2YXIgbT10aGlzLmN5KCksaz1mdW5jdGlvbihPKXtyZXR1cm4gTy5fcHJpdmF0ZS5zdHlsZUNhY2hlPW51bGx9O2lmKG0uaGFzQ29tcG91bmROb2RlcygpKXt2YXIgUztTPXRoaXMuc3Bhd25TZWxmKCkubWVyZ2UodGhpcy5kZXNjZW5kYW50cygpKS5tZXJnZSh0aGlzLnBhcmVudHMoKSksUy5tZXJnZShTLmNvbm5lY3RlZEVkZ2VzKCkpLFMuZm9yRWFjaChrKX1lbHNlIHRoaXMuZm9yRWFjaChmdW5jdGlvbihNKXtrKE0pLE0uY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGspfSk7cmV0dXJuIHRoaXN9LHVwZGF0ZVN0eWxlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGUuY3k7aWYoIWsuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7aWYoay5iYXRjaGluZygpKXt2YXIgUz1rLl9wcml2YXRlLmJhdGNoU3R5bGVFbGVzO3JldHVybiBTLm1lcmdlKHRoaXMpLHRoaXN9dmFyIE09ay5oYXNDb21wb3VuZE5vZGVzKCksTz10aGlzO209ISEobXx8bT09PXZvaWQgMCksTSYmKE89dGhpcy5zcGF3blNlbGYoKS5tZXJnZSh0aGlzLmRlc2NlbmRhbnRzKCkpLm1lcmdlKHRoaXMucGFyZW50cygpKSk7dmFyIE49TztyZXR1cm4gbT9OLmVtaXRBbmROb3RpZnkoInN0eWxlIik6Ti5lbWl0KCJzdHlsZSIpLE8uZm9yRWFjaChmdW5jdGlvbigkKXtyZXR1cm4gJC5fcHJpdmF0ZS5zdHlsZURpcnR5PSEwfSksdGhpc30sY2xlYW5TdHlsZTpmdW5jdGlvbigpe3ZhciBtPXRoaXMuY3koKTtpZihtLnN0eWxlRW5hYmxlZCgpKWZvcih2YXIgaz0wO2s8dGhpcy5sZW5ndGg7aysrKXt2YXIgUz10aGlzW2tdO1MuX3ByaXZhdGUuc3R5bGVEaXJ0eSYmKFMuX3ByaXZhdGUuc3R5bGVEaXJ0eT0hMSxtLnN0eWxlKCkuYXBwbHkoUykpfX0scGFyc2VkU3R5bGU6ZnVuY3Rpb24obSl7dmFyIGs9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwLFM9dGhpc1swXSxNPVMuY3koKTtpZihNLnN0eWxlRW5hYmxlZCgpJiZTKXt0aGlzLmNsZWFuU3R5bGUoKTt2YXIgTz1TLl9wcml2YXRlLnN0eWxlW21dO3JldHVybiBPPz8oaz9NLnN0eWxlKCkuZ2V0RGVmYXVsdFByb3BlcnR5KG0pOm51bGwpfX0sbnVtZXJpY1N0eWxlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXNbMF07aWYoay5jeSgpLnN0eWxlRW5hYmxlZCgpJiZrKXt2YXIgUz1rLnBzdHlsZShtKTtyZXR1cm4gUy5wZlZhbHVlIT09dm9pZCAwP1MucGZWYWx1ZTpTLnZhbHVlfX0sbnVtZXJpY1N0eWxlVW5pdHM6ZnVuY3Rpb24obSl7dmFyIGs9dGhpc1swXTtpZihrLmN5KCkuc3R5bGVFbmFibGVkKCkmJmspcmV0dXJuIGsucHN0eWxlKG0pLnVuaXRzfSxyZW5kZXJlZFN0eWxlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuY3koKTtpZighay5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpczt2YXIgUz10aGlzWzBdO2lmKFMpcmV0dXJuIGsuc3R5bGUoKS5nZXRSZW5kZXJlZFN0eWxlKFMsbSl9LHN0eWxlOmZ1bmN0aW9uKG0sayl7dmFyIFM9dGhpcy5jeSgpO2lmKCFTLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO3ZhciBNPSExLE89Uy5zdHlsZSgpO2lmKHNlKG0pKXt2YXIgTj1tO08uYXBwbHlCeXBhc3ModGhpcyxOLE0pLHRoaXMuZW1pdEFuZE5vdGlmeSgic3R5bGUiKX1lbHNlIGlmKGJlKG0pKWlmKGs9PT12b2lkIDApe3ZhciAkPXRoaXNbMF07cmV0dXJuICQ/Ty5nZXRTdHlsZVByb3BlcnR5VmFsdWUoJCxtKTp2b2lkIDB9ZWxzZSBPLmFwcGx5QnlwYXNzKHRoaXMsbSxrLE0pLHRoaXMuZW1pdEFuZE5vdGlmeSgic3R5bGUiKTtlbHNlIGlmKG09PT12b2lkIDApe3ZhciBIPXRoaXNbMF07cmV0dXJuIEg/Ty5nZXRSYXdTdHlsZShIKTp2b2lkIDB9cmV0dXJuIHRoaXN9LHJlbW92ZVN0eWxlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuY3koKTtpZighay5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpczt2YXIgUz0hMSxNPWsuc3R5bGUoKSxPPXRoaXM7aWYobT09PXZvaWQgMClmb3IodmFyIE49MDtOPE8ubGVuZ3RoO04rKyl7dmFyICQ9T1tOXTtNLnJlbW92ZUFsbEJ5cGFzc2VzKCQsUyl9ZWxzZXttPW0uc3BsaXQoL1xzKy8pO2Zvcih2YXIgSD0wO0g8Ty5sZW5ndGg7SCsrKXt2YXIgcT1PW0hdO00ucmVtb3ZlQnlwYXNzZXMocSxtLFMpfX1yZXR1cm4gdGhpcy5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpLHRoaXN9LHNob3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jc3MoImRpc3BsYXkiLCJlbGVtZW50IiksdGhpc30saGlkZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNzcygiZGlzcGxheSIsIm5vbmUiKSx0aGlzfSxlZmZlY3RpdmVPcGFjaXR5OmZ1bmN0aW9uKCl7dmFyIG09dGhpcy5jeSgpO2lmKCFtLnN0eWxlRW5hYmxlZCgpKXJldHVybiAxO3ZhciBrPW0uaGFzQ29tcG91bmROb2RlcygpLFM9dGhpc1swXTtpZihTKXt2YXIgTT1TLl9wcml2YXRlLE89Uy5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZTtpZighaylyZXR1cm4gTzt2YXIgTj1NLmRhdGEucGFyZW50P1MucGFyZW50cygpOm51bGw7aWYoTilmb3IodmFyICQ9MDskPE4ubGVuZ3RoOyQrKyl7dmFyIEg9TlskXSxxPUgucHN0eWxlKCJvcGFjaXR5IikudmFsdWU7Tz1xKk99cmV0dXJuIE99fSx0cmFuc3BhcmVudDpmdW5jdGlvbigpe3ZhciBtPXRoaXMuY3koKTtpZighbS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4hMTt2YXIgaz10aGlzWzBdLFM9ay5jeSgpLmhhc0NvbXBvdW5kTm9kZXMoKTtpZihrKXJldHVybiBTP2suZWZmZWN0aXZlT3BhY2l0eSgpPT09MDprLnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlPT09MH0sYmFja2dyb3VuZGluZzpmdW5jdGlvbigpe3ZhciBtPXRoaXMuY3koKTtpZighbS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4hMTt2YXIgaz10aGlzWzBdO3JldHVybiEhay5fcHJpdmF0ZS5iYWNrZ3JvdW5kaW5nfX07ZnVuY3Rpb24gQUkoeCxtKXt2YXIgaz14Ll9wcml2YXRlLFM9ay5kYXRhLnBhcmVudD94LnBhcmVudHMoKTpudWxsO2lmKFMpZm9yKHZhciBNPTA7TTxTLmxlbmd0aDtNKyspe3ZhciBPPVNbTV07aWYoIW0oTykpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gTEkoeCl7dmFyIG09eC5vayxrPXguZWRnZU9rVmlhTm9kZXx8eC5vayxTPXgucGFyZW50T2t8fHgub2s7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIE09dGhpcy5jeSgpO2lmKCFNLnN0eWxlRW5hYmxlZCgpKXJldHVybiEwO3ZhciBPPXRoaXNbMF0sTj1NLmhhc0NvbXBvdW5kTm9kZXMoKTtpZihPKXt2YXIgJD1PLl9wcml2YXRlO2lmKCFtKE8pKXJldHVybiExO2lmKE8uaXNOb2RlKCkpcmV0dXJuIU58fEFJKE8sUyk7dmFyIEg9JC5zb3VyY2UscT0kLnRhcmdldDtyZXR1cm4gayhIKSYmKCFOfHxBSShILGspKSYmKEg9PT1xfHxrKHEpJiYoIU58fEFJKHEsaykpKX19fXZhciBmOD1PUygiZWxlVGFrZXNVcFNwYWNlIixmdW5jdGlvbih4KXtyZXR1cm4geC5wc3R5bGUoImRpc3BsYXkiKS52YWx1ZT09PSJlbGVtZW50IiYmeC53aWR0aCgpIT09MCYmKHguaXNOb2RlKCk/eC5oZWlnaHQoKSE9PTA6ITApfSk7SDAudGFrZXNVcFNwYWNlPU5TKCJ0YWtlc1VwU3BhY2UiLExJKHtvazpmOH0pKTt2YXIgdHJlPU9TKCJlbGVJbnRlcmFjdGl2ZSIsZnVuY3Rpb24oeCl7cmV0dXJuIHgucHN0eWxlKCJldmVudHMiKS52YWx1ZT09PSJ5ZXMiJiZ4LnBzdHlsZSgidmlzaWJpbGl0eSIpLnZhbHVlPT09InZpc2libGUiJiZmOCh4KX0pLG5yZT1PUygicGFyZW50SW50ZXJhY3RpdmUiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnBzdHlsZSgidmlzaWJpbGl0eSIpLnZhbHVlPT09InZpc2libGUiJiZmOCh4KX0pO0gwLmludGVyYWN0aXZlPU5TKCJpbnRlcmFjdGl2ZSIsTEkoe29rOnRyZSxwYXJlbnRPazpucmUsZWRnZU9rVmlhTm9kZTpmOH0pKSxIMC5ub25pbnRlcmFjdGl2ZT1mdW5jdGlvbigpe3ZhciB4PXRoaXNbMF07aWYoeClyZXR1cm4heC5pbnRlcmFjdGl2ZSgpfTt2YXIgcnJlPU9TKCJlbGVWaXNpYmxlIixmdW5jdGlvbih4KXtyZXR1cm4geC5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmeC5wc3R5bGUoIm9wYWNpdHkiKS5wZlZhbHVlIT09MCYmZjgoeCl9KSxpcmU9Zjg7SDAudmlzaWJsZT1OUygidmlzaWJsZSIsTEkoe29rOnJyZSxlZGdlT2tWaWFOb2RlOmlyZX0pKSxIMC5oaWRkZW49ZnVuY3Rpb24oKXt2YXIgeD10aGlzWzBdO2lmKHgpcmV0dXJuIXgudmlzaWJsZSgpfSxIMC5pc0J1bmRsZWRCZXppZXI9TlMoImlzQnVuZGxlZEJlemllciIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jeSgpLnN0eWxlRW5hYmxlZCgpPyF0aGlzLnJlbW92ZWQoKSYmdGhpcy5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWU9PT0iYmV6aWVyIiYmdGhpcy50YWtlc1VwU3BhY2UoKTohMX0pLEgwLmJ5cGFzcz1IMC5jc3M9SDAuc3R5bGUsSDAucmVuZGVyZWRDc3M9SDAucmVuZGVyZWRTdHlsZSxIMC5yZW1vdmVCeXBhc3M9SDAucmVtb3ZlQ3NzPUgwLnJlbW92ZVN0eWxlLEgwLnBzdHlsZT1IMC5wYXJzZWRTdHlsZTt2YXIgWGQ9e307ZnVuY3Rpb24gUFMoeCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG09YXJndW1lbnRzLGs9W107aWYobS5sZW5ndGg9PT0yKXt2YXIgUz1tWzBdLE09bVsxXTt0aGlzLm9uKHguZXZlbnQsUyxNKX1lbHNlIGlmKG0ubGVuZ3RoPT09MSYmYWUobVswXSkpe3ZhciBPPW1bMF07dGhpcy5vbih4LmV2ZW50LE8pfWVsc2UgaWYobS5sZW5ndGg9PT0wfHxtLmxlbmd0aD09PTEmJm5lKG1bMF0pKXtmb3IodmFyIE49bS5sZW5ndGg9PT0xP21bMF06bnVsbCwkPTA7JDx0aGlzLmxlbmd0aDskKyspe3ZhciBIPXRoaXNbJF0scT0heC5hYmxlRmllbGR8fEguX3ByaXZhdGVbeC5hYmxlRmllbGRdLFk9SC5fcHJpdmF0ZVt4LmZpZWxkXSE9eC52YWx1ZTtpZih4Lm92ZXJyaWRlQWJsZSl7dmFyIFo9eC5vdmVycmlkZUFibGUoSCk7aWYoWiE9PXZvaWQgMCYmKHE9WiwhWikpcmV0dXJuIHRoaXN9cSYmKEguX3ByaXZhdGVbeC5maWVsZF09eC52YWx1ZSxZJiZrLnB1c2goSCkpfXZhciBjZT10aGlzLnNwYXduKGspO2NlLnVwZGF0ZVN0eWxlKCksY2UuZW1pdCh4LmV2ZW50KSxOJiZjZS5lbWl0KE4pfXJldHVybiB0aGlzfX1mdW5jdGlvbiBkOCh4KXtYZFt4LmZpZWxkXT1mdW5jdGlvbigpe3ZhciBtPXRoaXNbMF07aWYobSl7aWYoeC5vdmVycmlkZUZpZWxkKXt2YXIgaz14Lm92ZXJyaWRlRmllbGQobSk7aWYoayE9PXZvaWQgMClyZXR1cm4ga31yZXR1cm4gbS5fcHJpdmF0ZVt4LmZpZWxkXX19LFhkW3gub25dPVBTKHtldmVudDp4Lm9uLGZpZWxkOnguZmllbGQsYWJsZUZpZWxkOnguYWJsZUZpZWxkLG92ZXJyaWRlQWJsZTp4Lm92ZXJyaWRlQWJsZSx2YWx1ZTohMH0pLFhkW3gub2ZmXT1QUyh7ZXZlbnQ6eC5vZmYsZmllbGQ6eC5maWVsZCxhYmxlRmllbGQ6eC5hYmxlRmllbGQsb3ZlcnJpZGVBYmxlOngub3ZlcnJpZGVBYmxlLHZhbHVlOiExfSl9ZDgoe2ZpZWxkOiJsb2NrZWQiLG92ZXJyaWRlRmllbGQ6ZnVuY3Rpb24obSl7cmV0dXJuIG0uY3koKS5hdXRvbG9jaygpPyEwOnZvaWQgMH0sb246ImxvY2siLG9mZjoidW5sb2NrIn0pLGQ4KHtmaWVsZDoiZ3JhYmJhYmxlIixvdmVycmlkZUZpZWxkOmZ1bmN0aW9uKG0pe3JldHVybiBtLmN5KCkuYXV0b3VuZ3JhYmlmeSgpfHxtLnBhbm5hYmxlKCk/ITE6dm9pZCAwfSxvbjoiZ3JhYmlmeSIsb2ZmOiJ1bmdyYWJpZnkifSksZDgoe2ZpZWxkOiJzZWxlY3RlZCIsYWJsZUZpZWxkOiJzZWxlY3RhYmxlIixvdmVycmlkZUFibGU6ZnVuY3Rpb24obSl7cmV0dXJuIG0uY3koKS5hdXRvdW5zZWxlY3RpZnkoKT8hMTp2b2lkIDB9LG9uOiJzZWxlY3QiLG9mZjoidW5zZWxlY3QifSksZDgoe2ZpZWxkOiJzZWxlY3RhYmxlIixvdmVycmlkZUZpZWxkOmZ1bmN0aW9uKG0pe3JldHVybiBtLmN5KCkuYXV0b3Vuc2VsZWN0aWZ5KCk/ITE6dm9pZCAwfSxvbjoic2VsZWN0aWZ5IixvZmY6InVuc2VsZWN0aWZ5In0pLFhkLmRlc2VsZWN0PVhkLnVuc2VsZWN0LFhkLmdyYWJiZWQ9ZnVuY3Rpb24oKXt2YXIgeD10aGlzWzBdO2lmKHgpcmV0dXJuIHguX3ByaXZhdGUuZ3JhYmJlZH0sZDgoe2ZpZWxkOiJhY3RpdmUiLG9uOiJhY3RpdmF0ZSIsb2ZmOiJ1bmFjdGl2YXRlIn0pLGQ4KHtmaWVsZDoicGFubmFibGUiLG9uOiJwYW5pZnkiLG9mZjoidW5wYW5pZnkifSksWGQuaW5hY3RpdmU9ZnVuY3Rpb24oKXt2YXIgeD10aGlzWzBdO2lmKHgpcmV0dXJuIXguX3ByaXZhdGUuYWN0aXZlfTt2YXIgazE9e30sQSQ9ZnVuY3Rpb24obSl7cmV0dXJuIGZ1bmN0aW9uKFMpe2Zvcih2YXIgTT10aGlzLE89W10sTj0wO048TS5sZW5ndGg7TisrKXt2YXIgJD1NW05dO2lmKCQuaXNOb2RlKCkpe2Zvcih2YXIgSD0hMSxxPSQuY29ubmVjdGVkRWRnZXMoKSxZPTA7WTxxLmxlbmd0aDtZKyspe3ZhciBaPXFbWV0sY2U9Wi5zb3VyY2UoKSx2ZT1aLnRhcmdldCgpO2lmKG0ubm9JbmNvbWluZ0VkZ2VzJiZ2ZT09PSQmJmNlIT09JHx8bS5ub091dGdvaW5nRWRnZXMmJmNlPT09JCYmdmUhPT0kKXtIPSEwO2JyZWFrfX1IfHxPLnB1c2goJCl9fXJldHVybiB0aGlzLnNwYXduKE8sITApLmZpbHRlcihTKX19LEwkPWZ1bmN0aW9uKG0pe3JldHVybiBmdW5jdGlvbihrKXtmb3IodmFyIFM9dGhpcyxNPVtdLE89MDtPPFMubGVuZ3RoO08rKyl7dmFyIE49U1tPXTtpZihOLmlzTm9kZSgpKWZvcih2YXIgJD1OLmNvbm5lY3RlZEVkZ2VzKCksSD0wO0g8JC5sZW5ndGg7SCsrKXt2YXIgcT0kW0hdLFk9cS5zb3VyY2UoKSxaPXEudGFyZ2V0KCk7bS5vdXRnb2luZyYmWT09PU4/KE0ucHVzaChxKSxNLnB1c2goWikpOm0uaW5jb21pbmcmJlo9PT1OJiYoTS5wdXNoKHEpLE0ucHVzaChZKSl9fXJldHVybiB0aGlzLnNwYXduKE0sITApLmZpbHRlcihrKX19LE0kPWZ1bmN0aW9uKG0pe3JldHVybiBmdW5jdGlvbihrKXtmb3IodmFyIFM9dGhpcyxNPVtdLE89e307Oyl7dmFyIE49bS5vdXRnb2luZz9TLm91dGdvZXJzKCk6Uy5pbmNvbWVycygpO2lmKE4ubGVuZ3RoPT09MClicmVhaztmb3IodmFyICQ9ITEsSD0wO0g8Ti5sZW5ndGg7SCsrKXt2YXIgcT1OW0hdLFk9cS5pZCgpO09bWV18fChPW1ldPSEwLE0ucHVzaChxKSwkPSEwKX1pZighJClicmVhaztTPU59cmV0dXJuIHRoaXMuc3Bhd24oTSwhMCkuZmlsdGVyKGspfX07azEuY2xlYXJUcmF2ZXJzYWxDYWNoZT1mdW5jdGlvbigpe2Zvcih2YXIgeD0wO3g8dGhpcy5sZW5ndGg7eCsrKXRoaXNbeF0uX3ByaXZhdGUudHJhdmVyc2FsQ2FjaGU9bnVsbH0seXQoazEse3Jvb3RzOkEkKHtub0luY29taW5nRWRnZXM6ITB9KSxsZWF2ZXM6QSQoe25vT3V0Z29pbmdFZGdlczohMH0pLG91dGdvZXJzOlJwKEwkKHtvdXRnb2luZzohMH0pLCJvdXRnb2VycyIpLHN1Y2Nlc3NvcnM6TSQoe291dGdvaW5nOiEwfSksaW5jb21lcnM6UnAoTCQoe2luY29taW5nOiEwfSksImluY29tZXJzIikscHJlZGVjZXNzb3JzOk0kKHtpbmNvbWluZzohMH0pfSkseXQoazEse25laWdoYm9yaG9vZDpScChmdW5jdGlvbih4KXtmb3IodmFyIG09W10saz10aGlzLm5vZGVzKCksUz0wO1M8ay5sZW5ndGg7UysrKWZvcih2YXIgTT1rW1NdLE89TS5jb25uZWN0ZWRFZGdlcygpLE49MDtOPE8ubGVuZ3RoO04rKyl7dmFyICQ9T1tOXSxIPSQuc291cmNlKCkscT0kLnRhcmdldCgpLFk9TT09PUg/cTpIO1kubGVuZ3RoPjAmJm0ucHVzaChZWzBdKSxtLnB1c2goJFswXSl9cmV0dXJuIHRoaXMuc3Bhd24obSwhMCkuZmlsdGVyKHgpfSwibmVpZ2hib3Job29kIiksY2xvc2VkTmVpZ2hib3Job29kOmZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLm5laWdoYm9yaG9vZCgpLmFkZCh0aGlzKS5maWx0ZXIobSl9LG9wZW5OZWlnaGJvcmhvb2Q6ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMubmVpZ2hib3Job29kKG0pfX0pLGsxLm5laWdoYm91cmhvb2Q9azEubmVpZ2hib3Job29kLGsxLmNsb3NlZE5laWdoYm91cmhvb2Q9azEuY2xvc2VkTmVpZ2hib3Job29kLGsxLm9wZW5OZWlnaGJvdXJob29kPWsxLm9wZW5OZWlnaGJvcmhvb2QseXQoazEse3NvdXJjZTpScChmdW5jdGlvbihtKXt2YXIgaz10aGlzWzBdLFM7cmV0dXJuIGsmJihTPWsuX3ByaXZhdGUuc291cmNlfHxrLmN5KCkuY29sbGVjdGlvbigpKSxTJiZtP1MuZmlsdGVyKG0pOlN9LCJzb3VyY2UiKSx0YXJnZXQ6UnAoZnVuY3Rpb24obSl7dmFyIGs9dGhpc1swXSxTO3JldHVybiBrJiYoUz1rLl9wcml2YXRlLnRhcmdldHx8ay5jeSgpLmNvbGxlY3Rpb24oKSksUyYmbT9TLmZpbHRlcihtKTpTfSwidGFyZ2V0Iiksc291cmNlczpEJCh7YXR0cjoic291cmNlIn0pLHRhcmdldHM6RCQoe2F0dHI6InRhcmdldCJ9KX0pO2Z1bmN0aW9uIEQkKHgpe3JldHVybiBmdW5jdGlvbihrKXtmb3IodmFyIFM9W10sTT0wO008dGhpcy5sZW5ndGg7TSsrKXt2YXIgTz10aGlzW01dLE49Ty5fcHJpdmF0ZVt4LmF0dHJdO04mJlMucHVzaChOKX1yZXR1cm4gdGhpcy5zcGF3bihTLCEwKS5maWx0ZXIoayl9fXl0KGsxLHtlZGdlc1dpdGg6UnAoSSQoKSwiZWRnZXNXaXRoIiksZWRnZXNUbzpScChJJCh7dGhpc0lzU3JjOiEwfSksImVkZ2VzVG8iKX0pO2Z1bmN0aW9uIEkkKHgpe3JldHVybiBmdW5jdGlvbihrKXt2YXIgUz1bXSxNPXRoaXMuX3ByaXZhdGUuY3ksTz14fHx7fTtiZShrKSYmKGs9TS4kKGspKTtmb3IodmFyIE49MDtOPGsubGVuZ3RoO04rKylmb3IodmFyICQ9a1tOXS5fcHJpdmF0ZS5lZGdlcyxIPTA7SDwkLmxlbmd0aDtIKyspe3ZhciBxPSRbSF0sWT1xLl9wcml2YXRlLmRhdGEsWj10aGlzLmhhc0VsZW1lbnRXaXRoSWQoWS5zb3VyY2UpJiZrLmhhc0VsZW1lbnRXaXRoSWQoWS50YXJnZXQpLGNlPWsuaGFzRWxlbWVudFdpdGhJZChZLnNvdXJjZSkmJnRoaXMuaGFzRWxlbWVudFdpdGhJZChZLnRhcmdldCksdmU9Wnx8Y2U7dmUmJigoTy50aGlzSXNTcmN8fE8udGhpc0lzVGd0KSYmKE8udGhpc0lzU3JjJiYhWnx8Ty50aGlzSXNUZ3QmJiFjZSl8fFMucHVzaChxKSl9cmV0dXJuIHRoaXMuc3Bhd24oUywhMCl9fXl0KGsxLHtjb25uZWN0ZWRFZGdlczpScChmdW5jdGlvbih4KXtmb3IodmFyIG09W10saz10aGlzLFM9MDtTPGsubGVuZ3RoO1MrKyl7dmFyIE09a1tTXTtpZihNLmlzTm9kZSgpKWZvcih2YXIgTz1NLl9wcml2YXRlLmVkZ2VzLE49MDtOPE8ubGVuZ3RoO04rKyl7dmFyICQ9T1tOXTttLnB1c2goJCl9fXJldHVybiB0aGlzLnNwYXduKG0sITApLmZpbHRlcih4KX0sImNvbm5lY3RlZEVkZ2VzIiksY29ubmVjdGVkTm9kZXM6UnAoZnVuY3Rpb24oeCl7Zm9yKHZhciBtPVtdLGs9dGhpcyxTPTA7UzxrLmxlbmd0aDtTKyspe3ZhciBNPWtbU107TS5pc0VkZ2UoKSYmKG0ucHVzaChNLnNvdXJjZSgpWzBdKSxtLnB1c2goTS50YXJnZXQoKVswXSkpfXJldHVybiB0aGlzLnNwYXduKG0sITApLmZpbHRlcih4KX0sImNvbm5lY3RlZE5vZGVzIikscGFyYWxsZWxFZGdlczpScChPJCgpLCJwYXJhbGxlbEVkZ2VzIiksY29kaXJlY3RlZEVkZ2VzOlJwKE8kKHtjb2RpcmVjdGVkOiEwfSksImNvZGlyZWN0ZWRFZGdlcyIpfSk7ZnVuY3Rpb24gTyQoeCl7dmFyIG09e2NvZGlyZWN0ZWQ6ITF9O3JldHVybiB4PXl0KHt9LG0seCksZnVuY3Rpb24oUyl7Zm9yKHZhciBNPVtdLE89dGhpcy5lZGdlcygpLE49eCwkPTA7JDxPLmxlbmd0aDskKyspZm9yKHZhciBIPU9bJF0scT1ILl9wcml2YXRlLFk9cS5zb3VyY2UsWj1ZLl9wcml2YXRlLmRhdGEuaWQsY2U9cS5kYXRhLnRhcmdldCx2ZT1ZLl9wcml2YXRlLmVkZ2VzLG1lPTA7bWU8dmUubGVuZ3RoO21lKyspe3ZhciBMZT12ZVttZV0sX2U9TGUuX3ByaXZhdGUuZGF0YSxFZT1fZS50YXJnZXQsQmU9X2Uuc291cmNlLFJlPUVlPT09Y2UmJkJlPT09WixWZT1aPT09RWUmJmNlPT09QmU7KE4uY29kaXJlY3RlZCYmUmV8fCFOLmNvZGlyZWN0ZWQmJihSZXx8VmUpKSYmTS5wdXNoKExlKX1yZXR1cm4gdGhpcy5zcGF3bihNLCEwKS5maWx0ZXIoUyl9fXl0KGsxLHtjb21wb25lbnRzOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMsUz1rLmN5KCksTT1TLmNvbGxlY3Rpb24oKSxPPW09PW51bGw/ay5ub2RlcygpOm0ubm9kZXMoKSxOPVtdO20hPW51bGwmJk8uZW1wdHkoKSYmKE89bS5zb3VyY2VzKCkpO3ZhciAkPWZ1bmN0aW9uKFksWil7TS5tZXJnZShZKSxPLnVubWVyZ2UoWSksWi5tZXJnZShZKX07aWYoTy5lbXB0eSgpKXJldHVybiBrLnNwYXduKCk7dmFyIEg9ZnVuY3Rpb24oKXt2YXIgWT1TLmNvbGxlY3Rpb24oKTtOLnB1c2goWSk7dmFyIFo9T1swXTskKFosWSksay5iZnMoe2RpcmVjdGVkOiExLHJvb3RzOlosdmlzaXQ6ZnVuY3Rpb24odmUpe3JldHVybiAkKHZlLFkpfX0pLFkuZm9yRWFjaChmdW5jdGlvbihjZSl7Y2UuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXtrLmhhcyh2ZSkmJlkuaGFzKHZlLnNvdXJjZSgpKSYmWS5oYXModmUudGFyZ2V0KCkpJiZZLm1lcmdlKHZlKX0pfSl9O2RvIEgoKTt3aGlsZShPLmxlbmd0aD4wKTtyZXR1cm4gTn0sY29tcG9uZW50OmZ1bmN0aW9uKCl7dmFyIG09dGhpc1swXTtyZXR1cm4gbS5jeSgpLm11dGFibGVFbGVtZW50cygpLmNvbXBvbmVudHMobSlbMF19fSksazEuY29tcG9uZW50c09mPWsxLmNvbXBvbmVudHM7dmFyIFYwPWZ1bmN0aW9uKG0sayl7dmFyIFM9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLE09YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExO2lmKG09PT12b2lkIDApe2NoKCJBIGNvbGxlY3Rpb24gbXVzdCBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBjb3JlIik7cmV0dXJufXZhciBPPW5ldyB3bSxOPSExO2lmKCFrKWs9W107ZWxzZSBpZihrLmxlbmd0aD4wJiZzZShrWzBdKSYmIVUoa1swXSkpe049ITA7Zm9yKHZhciAkPVtdLEg9bmV3IFE3LHE9MCxZPWsubGVuZ3RoO3E8WTtxKyspe3ZhciBaPWtbcV07Wi5kYXRhPT1udWxsJiYoWi5kYXRhPXt9KTt2YXIgY2U9Wi5kYXRhO2lmKGNlLmlkPT1udWxsKWNlLmlkPW9qKCk7ZWxzZSBpZihtLmhhc0VsZW1lbnRXaXRoSWQoY2UuaWQpfHxILmhhcyhjZS5pZCkpY29udGludWU7dmFyIHZlPW5ldyB1UyhtLFosITEpOyQucHVzaCh2ZSksSC5hZGQoY2UuaWQpfWs9JH10aGlzLmxlbmd0aD0wO2Zvcih2YXIgbWU9MCxMZT1rLmxlbmd0aDttZTxMZTttZSsrKXt2YXIgX2U9a1ttZV1bMF07aWYoX2UhPW51bGwpe3ZhciBFZT1fZS5fcHJpdmF0ZS5kYXRhLmlkOyghU3x8IU8uaGFzKEVlKSkmJihTJiZPLnNldChFZSx7aW5kZXg6dGhpcy5sZW5ndGgsZWxlOl9lfSksdGhpc1t0aGlzLmxlbmd0aF09X2UsdGhpcy5sZW5ndGgrKyl9fXRoaXMuX3ByaXZhdGU9e2VsZXM6dGhpcyxjeTptLGdldCBtYXAoKXtyZXR1cm4gdGhpcy5sYXp5TWFwPT1udWxsJiZ0aGlzLnJlYnVpbGRNYXAoKSx0aGlzLmxhenlNYXB9LHNldCBtYXAoQmUpe3RoaXMubGF6eU1hcD1CZX0scmVidWlsZE1hcDpmdW5jdGlvbigpe2Zvcih2YXIgUmU9dGhpcy5sYXp5TWFwPW5ldyB3bSxWZT10aGlzLmVsZXMsY3Q9MDtjdDxWZS5sZW5ndGg7Y3QrKyl7dmFyIHN0PVZlW2N0XTtSZS5zZXQoc3QuaWQoKSx7aW5kZXg6Y3QsZWxlOnN0fSl9fX0sUyYmKHRoaXMuX3ByaXZhdGUubWFwPU8pLE4mJiFNJiZ0aGlzLnJlc3RvcmUoKX0sbmw9dVMucHJvdG90eXBlPVYwLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEFycmF5LnByb3RvdHlwZSk7bmwuaW5zdGFuY2VTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iY29sbGVjdGlvbiJ9LG5sLnNwYXduPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIG5ldyBWMCh0aGlzLmN5KCkseCxtKX0sbmwuc3Bhd25TZWxmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3Bhd24odGhpcyl9LG5sLmN5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY3l9LG5sLnJlbmRlcmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY3kucmVuZGVyZXIoKX0sbmwuZWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzWzBdfSxubC5jb2xsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIEZlKHRoaXMpP3RoaXM6bmV3IFYwKHRoaXMuX3ByaXZhdGUuY3ksW3RoaXNdKX0sbmwudW5pcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWMCh0aGlzLl9wcml2YXRlLmN5LHRoaXMsITApfSxubC5oYXNFbGVtZW50V2l0aElkPWZ1bmN0aW9uKHgpe3JldHVybiB4PSIiK3gsdGhpcy5fcHJpdmF0ZS5tYXAuaGFzKHgpfSxubC5nZXRFbGVtZW50QnlJZD1mdW5jdGlvbih4KXt4PSIiK3g7dmFyIG09dGhpcy5fcHJpdmF0ZS5jeSxrPXRoaXMuX3ByaXZhdGUubWFwLmdldCh4KTtyZXR1cm4gaz9rLmVsZTpuZXcgVjAobSl9LG5sLiRpZD1ubC5nZXRFbGVtZW50QnlJZCxubC5wb29sSW5kZXg9ZnVuY3Rpb24oKXt2YXIgeD10aGlzLl9wcml2YXRlLmN5LG09eC5fcHJpdmF0ZS5lbGVtZW50cyxrPXRoaXNbMF0uX3ByaXZhdGUuZGF0YS5pZDtyZXR1cm4gbS5fcHJpdmF0ZS5tYXAuZ2V0KGspLmluZGV4fSxubC5pbmRleE9mPWZ1bmN0aW9uKHgpe3ZhciBtPXhbMF0uX3ByaXZhdGUuZGF0YS5pZDtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5tYXAuZ2V0KG0pLmluZGV4fSxubC5pbmRleE9mSWQ9ZnVuY3Rpb24oeCl7cmV0dXJuIHg9IiIreCx0aGlzLl9wcml2YXRlLm1hcC5nZXQoeCkuaW5kZXh9LG5sLmpzb249ZnVuY3Rpb24oeCl7dmFyIG09dGhpcy5lbGVtZW50KCksaz10aGlzLmN5KCk7aWYobT09bnVsbCYmeClyZXR1cm4gdGhpcztpZihtIT1udWxsKXt2YXIgUz1tLl9wcml2YXRlO2lmKHNlKHgpKXtpZihrLnN0YXJ0QmF0Y2goKSx4LmRhdGEpe20uZGF0YSh4LmRhdGEpO3ZhciBNPVMuZGF0YTtpZihtLmlzRWRnZSgpKXt2YXIgTz0hMSxOPXt9LCQ9eC5kYXRhLnNvdXJjZSxIPXguZGF0YS50YXJnZXQ7JCE9bnVsbCYmJCE9TS5zb3VyY2UmJihOLnNvdXJjZT0iIiskLE89ITApLEghPW51bGwmJkghPU0udGFyZ2V0JiYoTi50YXJnZXQ9IiIrSCxPPSEwKSxPJiYobT1tLm1vdmUoTikpfWVsc2V7dmFyIHE9InBhcmVudCJpbiB4LmRhdGEsWT14LmRhdGEucGFyZW50O3EmJihZIT1udWxsfHxNLnBhcmVudCE9bnVsbCkmJlkhPU0ucGFyZW50JiYoWT09PXZvaWQgMCYmKFk9bnVsbCksWSE9bnVsbCYmKFk9IiIrWSksbT1tLm1vdmUoe3BhcmVudDpZfSkpfX14LnBvc2l0aW9uJiZtLnBvc2l0aW9uKHgucG9zaXRpb24pO3ZhciBaPWZ1bmN0aW9uKExlLF9lLEVlKXt2YXIgQmU9eFtMZV07QmUhPW51bGwmJkJlIT09U1tMZV0mJihCZT9tW19lXSgpOm1bRWVdKCkpfTtyZXR1cm4gWigicmVtb3ZlZCIsInJlbW92ZSIsInJlc3RvcmUiKSxaKCJzZWxlY3RlZCIsInNlbGVjdCIsInVuc2VsZWN0IiksWigic2VsZWN0YWJsZSIsInNlbGVjdGlmeSIsInVuc2VsZWN0aWZ5IiksWigibG9ja2VkIiwibG9jayIsInVubG9jayIpLFooImdyYWJiYWJsZSIsImdyYWJpZnkiLCJ1bmdyYWJpZnkiKSxaKCJwYW5uYWJsZSIsInBhbmlmeSIsInVucGFuaWZ5IikseC5jbGFzc2VzIT1udWxsJiZtLmNsYXNzZXMoeC5jbGFzc2VzKSxrLmVuZEJhdGNoKCksdGhpc31lbHNlIGlmKHg9PT12b2lkIDApe3ZhciBjZT17ZGF0YTp2bShTLmRhdGEpLHBvc2l0aW9uOnZtKFMucG9zaXRpb24pLGdyb3VwOlMuZ3JvdXAscmVtb3ZlZDpTLnJlbW92ZWQsc2VsZWN0ZWQ6Uy5zZWxlY3RlZCxzZWxlY3RhYmxlOlMuc2VsZWN0YWJsZSxsb2NrZWQ6Uy5sb2NrZWQsZ3JhYmJhYmxlOlMuZ3JhYmJhYmxlLHBhbm5hYmxlOlMucGFubmFibGUsY2xhc3NlczpudWxsfTtjZS5jbGFzc2VzPSIiO3ZhciB2ZT0wO3JldHVybiBTLmNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbihtZSl7cmV0dXJuIGNlLmNsYXNzZXMrPXZlKys9PT0wP21lOiIgIittZX0pLGNlfX19LG5sLmpzb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciB4PVtdLG09MDttPHRoaXMubGVuZ3RoO20rKyl7dmFyIGs9dGhpc1ttXSxTPWsuanNvbigpO3gucHVzaChTKX1yZXR1cm4geH0sbmwuY2xvbmU9ZnVuY3Rpb24oKXtmb3IodmFyIHg9dGhpcy5jeSgpLG09W10saz0wO2s8dGhpcy5sZW5ndGg7aysrKXt2YXIgUz10aGlzW2tdLE09Uy5qc29uKCksTz1uZXcgdVMoeCxNLCExKTttLnB1c2goTyl9cmV0dXJuIG5ldyBWMCh4LG0pfSxubC5jb3B5PW5sLmNsb25lLG5sLnJlc3RvcmU9ZnVuY3Rpb24oKXtmb3IodmFyIHg9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiEwLG09YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwLGs9dGhpcyxTPWsuY3koKSxNPVMuX3ByaXZhdGUsTz1bXSxOPVtdLCQsSD0wLHE9ay5sZW5ndGg7SDxxO0grKyl7dmFyIFk9a1tIXTttJiYhWS5yZW1vdmVkKCl8fChZLmlzTm9kZSgpP08ucHVzaChZKTpOLnB1c2goWSkpfSQ9Ty5jb25jYXQoTik7dmFyIFosY2U9ZnVuY3Rpb24oKXskLnNwbGljZShaLDEpLFotLX07Zm9yKFo9MDtaPCQubGVuZ3RoO1orKyl7dmFyIHZlPSRbWl0sbWU9dmUuX3ByaXZhdGUsTGU9bWUuZGF0YTtpZih2ZS5jbGVhclRyYXZlcnNhbENhY2hlKCksISghbSYmIW1lLnJlbW92ZWQpKXtpZihMZS5pZD09PXZvaWQgMClMZS5pZD1vaigpO2Vsc2UgaWYoWChMZS5pZCkpTGUuaWQ9IiIrTGUuaWQ7ZWxzZSBpZihTZShMZS5pZCl8fCFiZShMZS5pZCkpe2NoKCJDYW4gbm90IGNyZWF0ZSBlbGVtZW50IHdpdGggaW52YWxpZCBzdHJpbmcgSUQgYCIrTGUuaWQrImAiKSxjZSgpO2NvbnRpbnVlfWVsc2UgaWYoUy5oYXNFbGVtZW50V2l0aElkKExlLmlkKSl7Y2goIkNhbiBub3QgY3JlYXRlIHNlY29uZCBlbGVtZW50IHdpdGggSUQgYCIrTGUuaWQrImAiKSxjZSgpO2NvbnRpbnVlfX12YXIgX2U9TGUuaWQ7aWYodmUuaXNOb2RlKCkpe3ZhciBFZT1tZS5wb3NpdGlvbjtFZS54PT1udWxsJiYoRWUueD0wKSxFZS55PT1udWxsJiYoRWUueT0wKX1pZih2ZS5pc0VkZ2UoKSl7Zm9yKHZhciBCZT12ZSxSZT1bInNvdXJjZSIsInRhcmdldCJdLFZlPVJlLmxlbmd0aCxjdD0hMSxzdD0wO3N0PFZlO3N0Kyspe3ZhciBZZT1SZVtzdF0sbXQ9TGVbWWVdO1gobXQpJiYobXQ9TGVbWWVdPSIiK0xlW1llXSksbXQ9PW51bGx8fG10PT09IiI/KGNoKCJDYW4gbm90IGNyZWF0ZSBlZGdlIGAiK19lKyJgIHdpdGggdW5zcGVjaWZpZWQgIitZZSksY3Q9ITApOlMuaGFzRWxlbWVudFdpdGhJZChtdCl8fChjaCgiQ2FuIG5vdCBjcmVhdGUgZWRnZSBgIitfZSsiYCB3aXRoIG5vbmV4aXN0YW50ICIrWWUrIiBgIittdCsiYCIpLGN0PSEwKX1pZihjdCl7Y2UoKTtjb250aW51ZX12YXIgSmU9Uy5nZXRFbGVtZW50QnlJZChMZS5zb3VyY2UpLEx0PVMuZ2V0RWxlbWVudEJ5SWQoTGUudGFyZ2V0KTtKZS5zYW1lKEx0KT9KZS5fcHJpdmF0ZS5lZGdlcy5wdXNoKEJlKTooSmUuX3ByaXZhdGUuZWRnZXMucHVzaChCZSksTHQuX3ByaXZhdGUuZWRnZXMucHVzaChCZSkpLEJlLl9wcml2YXRlLnNvdXJjZT1KZSxCZS5fcHJpdmF0ZS50YXJnZXQ9THR9bWUubWFwPW5ldyB3bSxtZS5tYXAuc2V0KF9lLHtlbGU6dmUsaW5kZXg6MH0pLG1lLnJlbW92ZWQ9ITEsbSYmUy5hZGRUb1Bvb2wodmUpfWZvcih2YXIgTXQ9MDtNdDxPLmxlbmd0aDtNdCsrKXt2YXIgdXQ9T1tNdF0sV3Q9dXQuX3ByaXZhdGUuZGF0YTtYKFd0LnBhcmVudCkmJihXdC5wYXJlbnQ9IiIrV3QucGFyZW50KTt2YXIgVHQ9V3QucGFyZW50LF9uPVR0IT1udWxsO2lmKF9ufHx1dC5fcHJpdmF0ZS5wYXJlbnQpe3ZhciBobj11dC5fcHJpdmF0ZS5wYXJlbnQ/Uy5jb2xsZWN0aW9uKCkubWVyZ2UodXQuX3ByaXZhdGUucGFyZW50KTpTLmdldEVsZW1lbnRCeUlkKFR0KTtpZihobi5lbXB0eSgpKVd0LnBhcmVudD12b2lkIDA7ZWxzZSBpZihoblswXS5yZW1vdmVkKCkpaHUoIk5vZGUgYWRkZWQgd2l0aCBtaXNzaW5nIHBhcmVudCwgcmVmZXJlbmNlIHRvIHBhcmVudCByZW1vdmVkIiksV3QucGFyZW50PXZvaWQgMCx1dC5fcHJpdmF0ZS5wYXJlbnQ9bnVsbDtlbHNle2Zvcih2YXIgWXQ9ITEsRG49aG47IURuLmVtcHR5KCk7KXtpZih1dC5zYW1lKERuKSl7WXQ9ITAsV3QucGFyZW50PXZvaWQgMDticmVha31Ebj1Ebi5wYXJlbnQoKX1ZdHx8KGhuWzBdLl9wcml2YXRlLmNoaWxkcmVuLnB1c2godXQpLHV0Ll9wcml2YXRlLnBhcmVudD1oblswXSxNLmhhc0NvbXBvdW5kTm9kZXM9ITApfX19aWYoJC5sZW5ndGg+MCl7Zm9yKHZhciBpcj0kLmxlbmd0aD09PWsubGVuZ3RoP2s6bmV3IFYwKFMsJCksdnI9MDt2cjxpci5sZW5ndGg7dnIrKyl7dmFyIE5uPWlyW3ZyXTtObi5pc05vZGUoKXx8KE5uLnBhcmFsbGVsRWRnZXMoKS5jbGVhclRyYXZlcnNhbENhY2hlKCksTm4uc291cmNlKCkuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpLE5uLnRhcmdldCgpLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKSl9dmFyIHByO00uaGFzQ29tcG91bmROb2Rlcz9wcj1TLmNvbGxlY3Rpb24oKS5tZXJnZShpcikubWVyZ2UoaXIuY29ubmVjdGVkTm9kZXMoKSkubWVyZ2UoaXIucGFyZW50KCkpOnByPWlyLHByLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLnVwZGF0ZVN0eWxlKHgpLHg/aXIuZW1pdEFuZE5vdGlmeSgiYWRkIik6bSYmaXIuZW1pdCgiYWRkIil9cmV0dXJuIGt9LG5sLnJlbW92ZWQ9ZnVuY3Rpb24oKXt2YXIgeD10aGlzWzBdO3JldHVybiB4JiZ4Ll9wcml2YXRlLnJlbW92ZWR9LG5sLmluc2lkZT1mdW5jdGlvbigpe3ZhciB4PXRoaXNbMF07cmV0dXJuIHgmJiF4Ll9wcml2YXRlLnJlbW92ZWR9LG5sLnJlbW92ZT1mdW5jdGlvbigpe3ZhciB4PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxtPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCxrPXRoaXMsUz1bXSxNPXt9LE89ay5fcHJpdmF0ZS5jeTtmdW5jdGlvbiBOKFR0KXtmb3IodmFyIF9uPVR0Ll9wcml2YXRlLmVkZ2VzLGhuPTA7aG48X24ubGVuZ3RoO2huKyspSChfbltobl0pfWZ1bmN0aW9uICQoVHQpe2Zvcih2YXIgX249VHQuX3ByaXZhdGUuY2hpbGRyZW4saG49MDtobjxfbi5sZW5ndGg7aG4rKylIKF9uW2huXSl9ZnVuY3Rpb24gSChUdCl7dmFyIF9uPU1bVHQuaWQoKV07bSYmVHQucmVtb3ZlZCgpfHxfbnx8KE1bVHQuaWQoKV09ITAsVHQuaXNOb2RlKCk/KFMucHVzaChUdCksTihUdCksJChUdCkpOlMudW5zaGlmdChUdCkpfWZvcih2YXIgcT0wLFk9ay5sZW5ndGg7cTxZO3ErKyl7dmFyIFo9a1txXTtIKFopfWZ1bmN0aW9uIGNlKFR0LF9uKXt2YXIgaG49VHQuX3ByaXZhdGUuZWRnZXM7UTMoaG4sX24pLFR0LmNsZWFyVHJhdmVyc2FsQ2FjaGUoKX1mdW5jdGlvbiB2ZShUdCl7VHQuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpfXZhciBtZT1bXTttZS5pZHM9e307ZnVuY3Rpb24gTGUoVHQsX24pe19uPV9uWzBdLFR0PVR0WzBdO3ZhciBobj1UdC5fcHJpdmF0ZS5jaGlsZHJlbixZdD1UdC5pZCgpO1EzKGhuLF9uKSxfbi5fcHJpdmF0ZS5wYXJlbnQ9bnVsbCxtZS5pZHNbWXRdfHwobWUuaWRzW1l0XT0hMCxtZS5wdXNoKFR0KSl9ay5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxtJiZPLnJlbW92ZUZyb21Qb29sKFMpO2Zvcih2YXIgX2U9MDtfZTxTLmxlbmd0aDtfZSsrKXt2YXIgRWU9U1tfZV07aWYoRWUuaXNFZGdlKCkpe3ZhciBCZT1FZS5zb3VyY2UoKVswXSxSZT1FZS50YXJnZXQoKVswXTtjZShCZSxFZSksY2UoUmUsRWUpO2Zvcih2YXIgVmU9RWUucGFyYWxsZWxFZGdlcygpLGN0PTA7Y3Q8VmUubGVuZ3RoO2N0Kyspe3ZhciBzdD1WZVtjdF07dmUoc3QpLHN0LmlzQnVuZGxlZEJlemllcigpJiZzdC5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX19ZWxzZXt2YXIgWWU9RWUucGFyZW50KCk7WWUubGVuZ3RoIT09MCYmTGUoWWUsRWUpfW0mJihFZS5fcHJpdmF0ZS5yZW1vdmVkPSEwKX12YXIgbXQ9Ty5fcHJpdmF0ZS5lbGVtZW50cztPLl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXM9ITE7Zm9yKHZhciBKZT0wO0plPG10Lmxlbmd0aDtKZSsrKXt2YXIgTHQ9bXRbSmVdO2lmKEx0LmlzUGFyZW50KCkpe08uX3ByaXZhdGUuaGFzQ29tcG91bmROb2Rlcz0hMDticmVha319dmFyIE10PW5ldyBWMCh0aGlzLmN5KCksUyk7TXQuc2l6ZSgpPjAmJih4P010LmVtaXRBbmROb3RpZnkoInJlbW92ZSIpOm0mJk10LmVtaXQoInJlbW92ZSIpKTtmb3IodmFyIHV0PTA7dXQ8bWUubGVuZ3RoO3V0Kyspe3ZhciBXdD1tZVt1dF07KCFtfHwhV3QucmVtb3ZlZCgpKSYmV3QudXBkYXRlU3R5bGUoKX1yZXR1cm4gTXR9LG5sLm1vdmU9ZnVuY3Rpb24oeCl7dmFyIG09dGhpcy5fcHJpdmF0ZS5jeSxrPXRoaXMsUz0hMSxNPSExLE89ZnVuY3Rpb24obWUpe3JldHVybiBtZT09bnVsbD9tZToiIittZX07aWYoeC5zb3VyY2UhPT12b2lkIDB8fHgudGFyZ2V0IT09dm9pZCAwKXt2YXIgTj1PKHguc291cmNlKSwkPU8oeC50YXJnZXQpLEg9TiE9bnVsbCYmbS5oYXNFbGVtZW50V2l0aElkKE4pLHE9JCE9bnVsbCYmbS5oYXNFbGVtZW50V2l0aElkKCQpOyhIfHxxKSYmKG0uYmF0Y2goZnVuY3Rpb24oKXtrLnJlbW92ZShTLE0pLGsuZW1pdEFuZE5vdGlmeSgibW92ZW91dCIpO2Zvcih2YXIgdmU9MDt2ZTxrLmxlbmd0aDt2ZSsrKXt2YXIgbWU9a1t2ZV0sTGU9bWUuX3ByaXZhdGUuZGF0YTttZS5pc0VkZ2UoKSYmKEgmJihMZS5zb3VyY2U9TikscSYmKExlLnRhcmdldD0kKSl9ay5yZXN0b3JlKFMsTSl9KSxrLmVtaXRBbmROb3RpZnkoIm1vdmUiKSl9ZWxzZSBpZih4LnBhcmVudCE9PXZvaWQgMCl7dmFyIFk9Tyh4LnBhcmVudCksWj1ZPT09bnVsbHx8bS5oYXNFbGVtZW50V2l0aElkKFkpO2lmKFope3ZhciBjZT1ZPT09bnVsbD92b2lkIDA6WTttLmJhdGNoKGZ1bmN0aW9uKCl7dmFyIHZlPWsucmVtb3ZlKFMsTSk7dmUuZW1pdEFuZE5vdGlmeSgibW92ZW91dCIpO2Zvcih2YXIgbWU9MDttZTxrLmxlbmd0aDttZSsrKXt2YXIgTGU9a1ttZV0sX2U9TGUuX3ByaXZhdGUuZGF0YTtMZS5pc05vZGUoKSYmKF9lLnBhcmVudD1jZSl9dmUucmVzdG9yZShTLE0pfSksay5lbWl0QW5kTm90aWZ5KCJtb3ZlIil9fXJldHVybiB0aGlzfSxbQmosa25lLFNTLHR5LHU4LG55LEo5LFRJLF8kLENJLFNJLERTLElTLEgwLFhkLGsxXS5mb3JFYWNoKGZ1bmN0aW9uKHgpe3l0KG5sLHgpfSk7dmFyIHNyZT17YWRkOmZ1bmN0aW9uKG0pe3ZhciBrLFM9dGhpcztpZih4ZShtKSl7dmFyIE09bTtpZihNLl9wcml2YXRlLmN5PT09UylrPU0ucmVzdG9yZSgpO2Vsc2V7Zm9yKHZhciBPPVtdLE49MDtOPE0ubGVuZ3RoO04rKyl7dmFyICQ9TVtOXTtPLnB1c2goJC5qc29uKCkpfWs9bmV3IFYwKFMsTyl9fWVsc2UgaWYobmUobSkpe3ZhciBIPW07az1uZXcgVjAoUyxIKX1lbHNlIGlmKHNlKG0pJiYobmUobS5ub2Rlcyl8fG5lKG0uZWRnZXMpKSl7Zm9yKHZhciBxPW0sWT1bXSxaPVsibm9kZXMiLCJlZGdlcyJdLGNlPTAsdmU9Wi5sZW5ndGg7Y2U8dmU7Y2UrKyl7dmFyIG1lPVpbY2VdLExlPXFbbWVdO2lmKG5lKExlKSlmb3IodmFyIF9lPTAsRWU9TGUubGVuZ3RoO19lPEVlO19lKyspe3ZhciBCZT15dCh7Z3JvdXA6bWV9LExlW19lXSk7WS5wdXNoKEJlKX19az1uZXcgVjAoUyxZKX1lbHNle3ZhciBSZT1tO2s9bmV3IHVTKFMsUmUpLmNvbGxlY3Rpb24oKX1yZXR1cm4ga30scmVtb3ZlOmZ1bmN0aW9uKG0pe2lmKCF4ZShtKSl7aWYoYmUobSkpe3ZhciBrPW07bT10aGlzLiQoayl9fXJldHVybiBtLnJlbW92ZSgpfX07LyohIEJlemllciBjdXJ2ZSBmdW5jdGlvbiBnZW5lcmF0b3IuIENvcHlyaWdodCBHYWV0YW4gUmVuYXVkZWF1LiBNSVQgTGljZW5zZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NSVRfTGljZW5zZSAqL2Z1bmN0aW9uIGFyZSh4LG0sayxTKXt2YXIgTT00LE89LjAwMSxOPTFlLTcsJD0xMCxIPTExLHE9MS8oSC0xKSxZPXR5cGVvZiBGbG9hdDMyQXJyYXk8InUiO2lmKGFyZ3VtZW50cy5sZW5ndGghPT00KXJldHVybiExO2Zvcih2YXIgWj0wO1o8NDsrK1opaWYodHlwZW9mIGFyZ3VtZW50c1taXSE9Im51bWJlciJ8fGlzTmFOKGFyZ3VtZW50c1taXSl8fCFpc0Zpbml0ZShhcmd1bWVudHNbWl0pKXJldHVybiExO3g9TWF0aC5taW4oeCwxKSxrPU1hdGgubWluKGssMSkseD1NYXRoLm1heCh4LDApLGs9TWF0aC5tYXgoaywwKTt2YXIgY2U9WT9uZXcgRmxvYXQzMkFycmF5KEgpOm5ldyBBcnJheShIKTtmdW5jdGlvbiB2ZShMdCxNdCl7cmV0dXJuIDEtMypNdCszKkx0fWZ1bmN0aW9uIG1lKEx0LE10KXtyZXR1cm4gMypNdC02Kkx0fWZ1bmN0aW9uIExlKEx0KXtyZXR1cm4gMypMdH1mdW5jdGlvbiBfZShMdCxNdCx1dCl7cmV0dXJuKCh2ZShNdCx1dCkqTHQrbWUoTXQsdXQpKSpMdCtMZShNdCkpKkx0fWZ1bmN0aW9uIEVlKEx0LE10LHV0KXtyZXR1cm4gMyp2ZShNdCx1dCkqTHQqTHQrMiptZShNdCx1dCkqTHQrTGUoTXQpfWZ1bmN0aW9uIEJlKEx0LE10KXtmb3IodmFyIHV0PTA7dXQ8TTsrK3V0KXt2YXIgV3Q9RWUoTXQseCxrKTtpZihXdD09PTApcmV0dXJuIE10O3ZhciBUdD1fZShNdCx4LGspLUx0O010LT1UdC9XdH1yZXR1cm4gTXR9ZnVuY3Rpb24gUmUoKXtmb3IodmFyIEx0PTA7THQ8SDsrK0x0KWNlW0x0XT1fZShMdCpxLHgsayl9ZnVuY3Rpb24gVmUoTHQsTXQsdXQpe3ZhciBXdCxUdCxfbj0wO2RvIFR0PU10Kyh1dC1NdCkvMixXdD1fZShUdCx4LGspLUx0LFd0PjA/dXQ9VHQ6TXQ9VHQ7d2hpbGUoTWF0aC5hYnMoV3QpPk4mJisrX248JCk7cmV0dXJuIFR0fWZ1bmN0aW9uIGN0KEx0KXtmb3IodmFyIE10PTAsdXQ9MSxXdD1ILTE7dXQhPT1XdCYmY2VbdXRdPD1MdDsrK3V0KU10Kz1xOy0tdXQ7dmFyIFR0PShMdC1jZVt1dF0pLyhjZVt1dCsxXS1jZVt1dF0pLF9uPU10K1R0KnEsaG49RWUoX24seCxrKTtyZXR1cm4gaG4+PU8/QmUoTHQsX24pOmhuPT09MD9fbjpWZShMdCxNdCxNdCtxKX12YXIgc3Q9ITE7ZnVuY3Rpb24gWWUoKXtzdD0hMCwoeCE9PW18fGshPT1TKSYmUmUoKX12YXIgbXQ9ZnVuY3Rpb24oTXQpe3JldHVybiBzdHx8WWUoKSx4PT09bSYmaz09PVM/TXQ6TXQ9PT0wPzA6TXQ9PT0xPzE6X2UoY3QoTXQpLG0sUyl9O210LmdldENvbnRyb2xQb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm5be3gseTptfSx7eDprLHk6U31dfTt2YXIgSmU9ImdlbmVyYXRlQmV6aWVyKCIrW3gsbSxrLFNdKyIpIjtyZXR1cm4gbXQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gSmV9LG10fS8qISBSdW5nZS1LdXR0YSBzcHJpbmcgcGh5c2ljcyBmdW5jdGlvbiBnZW5lcmF0b3IuIEFkYXB0ZWQgZnJvbSBGcmFtZXIuanMsIGNvcHlyaWdodCBLb2VuIEJvay4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKi92YXIgb3JlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24geChTKXtyZXR1cm4tUy50ZW5zaW9uKlMueC1TLmZyaWN0aW9uKlMudn1mdW5jdGlvbiBtKFMsTSxPKXt2YXIgTj17eDpTLngrTy5keCpNLHY6Uy52K08uZHYqTSx0ZW5zaW9uOlMudGVuc2lvbixmcmljdGlvbjpTLmZyaWN0aW9ufTtyZXR1cm57ZHg6Ti52LGR2OngoTil9fWZ1bmN0aW9uIGsoUyxNKXt2YXIgTz17ZHg6Uy52LGR2OngoUyl9LE49bShTLE0qLjUsTyksJD1tKFMsTSouNSxOKSxIPW0oUyxNLCQpLHE9MS82KihPLmR4KzIqKE4uZHgrJC5keCkrSC5keCksWT0xLzYqKE8uZHYrMiooTi5kdiskLmR2KStILmR2KTtyZXR1cm4gUy54PVMueCtxKk0sUy52PVMuditZKk0sU31yZXR1cm4gZnVuY3Rpb24gUyhNLE8sTil7dmFyICQ9e3g6LTEsdjowLHRlbnNpb246bnVsbCxmcmljdGlvbjpudWxsfSxIPVswXSxxPTAsWT0xLzFlNCxaPTE2LzFlMyxjZSx2ZSxtZTtmb3IoTT1wYXJzZUZsb2F0KE0pfHw1MDAsTz1wYXJzZUZsb2F0KE8pfHwyMCxOPU58fG51bGwsJC50ZW5zaW9uPU0sJC5mcmljdGlvbj1PLGNlPU4hPT1udWxsLGNlPyhxPVMoTSxPKSx2ZT1xL04qWik6dmU9WjttZT1rKG1lfHwkLHZlKSxILnB1c2goMSttZS54KSxxKz0xNixNYXRoLmFicyhtZS54KT5ZJiZNYXRoLmFicyhtZS52KT5ZOyk7cmV0dXJuIGNlP2Z1bmN0aW9uKExlKXtyZXR1cm4gSFtMZSooSC5sZW5ndGgtMSl8MF19OnF9fSgpLHJsPWZ1bmN0aW9uKG0sayxTLE0pe3ZhciBPPWFyZShtLGssUyxNKTtyZXR1cm4gZnVuY3Rpb24oTiwkLEgpe3JldHVybiBOKygkLU4pKk8oSCl9fSxCUz17bGluZWFyOmZ1bmN0aW9uKG0sayxTKXtyZXR1cm4gbSsoay1tKSpTfSxlYXNlOnJsKC4yNSwuMSwuMjUsMSksImVhc2UtaW4iOnJsKC40MiwwLDEsMSksImVhc2Utb3V0IjpybCgwLDAsLjU4LDEpLCJlYXNlLWluLW91dCI6cmwoLjQyLDAsLjU4LDEpLCJlYXNlLWluLXNpbmUiOnJsKC40NywwLC43NDUsLjcxNSksImVhc2Utb3V0LXNpbmUiOnJsKC4zOSwuNTc1LC41NjUsMSksImVhc2UtaW4tb3V0LXNpbmUiOnJsKC40NDUsLjA1LC41NSwuOTUpLCJlYXNlLWluLXF1YWQiOnJsKC41NSwuMDg1LC42OCwuNTMpLCJlYXNlLW91dC1xdWFkIjpybCguMjUsLjQ2LC40NSwuOTQpLCJlYXNlLWluLW91dC1xdWFkIjpybCguNDU1LC4wMywuNTE1LC45NTUpLCJlYXNlLWluLWN1YmljIjpybCguNTUsLjA1NSwuNjc1LC4xOSksImVhc2Utb3V0LWN1YmljIjpybCguMjE1LC42MSwuMzU1LDEpLCJlYXNlLWluLW91dC1jdWJpYyI6cmwoLjY0NSwuMDQ1LC4zNTUsMSksImVhc2UtaW4tcXVhcnQiOnJsKC44OTUsLjAzLC42ODUsLjIyKSwiZWFzZS1vdXQtcXVhcnQiOnJsKC4xNjUsLjg0LC40NCwxKSwiZWFzZS1pbi1vdXQtcXVhcnQiOnJsKC43NywwLC4xNzUsMSksImVhc2UtaW4tcXVpbnQiOnJsKC43NTUsLjA1LC44NTUsLjA2KSwiZWFzZS1vdXQtcXVpbnQiOnJsKC4yMywxLC4zMiwxKSwiZWFzZS1pbi1vdXQtcXVpbnQiOnJsKC44NiwwLC4wNywxKSwiZWFzZS1pbi1leHBvIjpybCguOTUsLjA1LC43OTUsLjAzNSksImVhc2Utb3V0LWV4cG8iOnJsKC4xOSwxLC4yMiwxKSwiZWFzZS1pbi1vdXQtZXhwbyI6cmwoMSwwLDAsMSksImVhc2UtaW4tY2lyYyI6cmwoLjYsLjA0LC45OCwuMzM1KSwiZWFzZS1vdXQtY2lyYyI6cmwoLjA3NSwuODIsLjE2NSwxKSwiZWFzZS1pbi1vdXQtY2lyYyI6cmwoLjc4NSwuMTM1LC4xNSwuODYpLHNwcmluZzpmdW5jdGlvbihtLGssUyl7aWYoUz09PTApcmV0dXJuIEJTLmxpbmVhcjt2YXIgTT1vcmUobSxrLFMpO3JldHVybiBmdW5jdGlvbihPLE4sJCl7cmV0dXJuIE8rKE4tTykqTSgkKX19LCJjdWJpYy1iZXppZXIiOnJsfTtmdW5jdGlvbiBOJCh4LG0sayxTLE0pe2lmKFM9PT0xfHxtPT09aylyZXR1cm4gazt2YXIgTz1NKG0sayxTKTtyZXR1cm4geD09bnVsbHx8KCh4LnJvdW5kVmFsdWV8fHguY29sb3IpJiYoTz1NYXRoLnJvdW5kKE8pKSx4Lm1pbiE9PXZvaWQgMCYmKE89TWF0aC5tYXgoTyx4Lm1pbikpLHgubWF4IT09dm9pZCAwJiYoTz1NYXRoLm1pbihPLHgubWF4KSkpLE99ZnVuY3Rpb24gUCQoeCxtKXtyZXR1cm4geC5wZlZhbHVlIT1udWxsfHx4LnZhbHVlIT1udWxsP3gucGZWYWx1ZSE9bnVsbCYmKG09PW51bGx8fG0udHlwZS51bml0cyE9PSIlIik/eC5wZlZhbHVlOngudmFsdWU6eH1mdW5jdGlvbiBnOCh4LG0sayxTLE0pe3ZhciBPPU0hPW51bGw/TS50eXBlOm51bGw7azwwP2s9MDprPjEmJihrPTEpO3ZhciBOPVAkKHgsTSksJD1QJChtLE0pO2lmKFgoTikmJlgoJCkpcmV0dXJuIE4kKE8sTiwkLGssUyk7aWYobmUoTikmJm5lKCQpKXtmb3IodmFyIEg9W10scT0wO3E8JC5sZW5ndGg7cSsrKXt2YXIgWT1OW3FdLFo9JFtxXTtpZihZIT1udWxsJiZaIT1udWxsKXt2YXIgY2U9TiQoTyxZLFosayxTKTtILnB1c2goY2UpfWVsc2UgSC5wdXNoKFopfXJldHVybiBIfX1mdW5jdGlvbiBjcmUoeCxtLGssUyl7dmFyIE09IVMsTz14Ll9wcml2YXRlLE49bS5fcHJpdmF0ZSwkPU4uZWFzaW5nLEg9Ti5zdGFydFRpbWUscT1TP3g6eC5jeSgpLFk9cS5zdHlsZSgpO2lmKCFOLmVhc2luZ0ltcGwpaWYoJD09bnVsbClOLmVhc2luZ0ltcGw9QlMubGluZWFyO2Vsc2V7dmFyIFo7aWYoYmUoJCkpe3ZhciBjZT1ZLnBhcnNlKCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiIsJCk7Wj1jZS52YWx1ZX1lbHNlIFo9JDt2YXIgdmUsbWU7YmUoWik/KHZlPVosbWU9W10pOih2ZT1aWzFdLG1lPVouc2xpY2UoMikubWFwKGZ1bmN0aW9uKGlyKXtyZXR1cm4raXJ9KSksbWUubGVuZ3RoPjA/KHZlPT09InNwcmluZyImJm1lLnB1c2goTi5kdXJhdGlvbiksTi5lYXNpbmdJbXBsPUJTW3ZlXS5hcHBseShudWxsLG1lKSk6Ti5lYXNpbmdJbXBsPUJTW3ZlXX12YXIgTGU9Ti5lYXNpbmdJbXBsLF9lO2lmKE4uZHVyYXRpb249PT0wP19lPTE6X2U9KGstSCkvTi5kdXJhdGlvbixOLmFwcGx5aW5nJiYoX2U9Ti5wcm9ncmVzcyksX2U8MD9fZT0wOl9lPjEmJihfZT0xKSxOLmRlbGF5PT1udWxsKXt2YXIgRWU9Ti5zdGFydFBvc2l0aW9uLEJlPU4ucG9zaXRpb247aWYoQmUmJk0mJiF4LmxvY2tlZCgpKXt2YXIgUmU9e307YWsoRWUueCxCZS54KSYmKFJlLng9ZzgoRWUueCxCZS54LF9lLExlKSksYWsoRWUueSxCZS55KSYmKFJlLnk9ZzgoRWUueSxCZS55LF9lLExlKSkseC5wb3NpdGlvbihSZSl9dmFyIFZlPU4uc3RhcnRQYW4sY3Q9Ti5wYW4sc3Q9Ty5wYW4sWWU9Y3QhPW51bGwmJlM7WWUmJihhayhWZS54LGN0LngpJiYoc3QueD1nOChWZS54LGN0LngsX2UsTGUpKSxhayhWZS55LGN0LnkpJiYoc3QueT1nOChWZS55LGN0LnksX2UsTGUpKSx4LmVtaXQoInBhbiIpKTt2YXIgbXQ9Ti5zdGFydFpvb20sSmU9Ti56b29tLEx0PUplIT1udWxsJiZTO0x0JiYoYWsobXQsSmUpJiYoTy56b29tPVU5KE8ubWluWm9vbSxnOChtdCxKZSxfZSxMZSksTy5tYXhab29tKSkseC5lbWl0KCJ6b29tIikpLChZZXx8THQpJiZ4LmVtaXQoInZpZXdwb3J0Iik7dmFyIE10PU4uc3R5bGU7aWYoTXQmJk10Lmxlbmd0aD4wJiZNKXtmb3IodmFyIHV0PTA7dXQ8TXQubGVuZ3RoO3V0Kyspe3ZhciBXdD1NdFt1dF0sVHQ9V3QubmFtZSxfbj1XdCxobj1OLnN0YXJ0U3R5bGVbVHRdLFl0PVkucHJvcGVydGllc1tobi5uYW1lXSxEbj1nOChobixfbixfZSxMZSxZdCk7WS5vdmVycmlkZUJ5cGFzcyh4LFR0LERuKX14LmVtaXQoInN0eWxlIil9fXJldHVybiBOLnByb2dyZXNzPV9lLF9lfWZ1bmN0aW9uIGFrKHgsbSl7cmV0dXJuIHg9PW51bGx8fG09PW51bGw/ITE6WCh4KSYmWChtKT8hMDohISh4JiZtKX1mdW5jdGlvbiB1cmUoeCxtLGssUyl7dmFyIE09bS5fcHJpdmF0ZTtNLnN0YXJ0ZWQ9ITAsTS5zdGFydFRpbWU9ay1NLnByb2dyZXNzKk0uZHVyYXRpb259ZnVuY3Rpb24gQiQoeCxtKXt2YXIgaz1tLl9wcml2YXRlLmFuaUVsZXMsUz1bXTtmdW5jdGlvbiBNKFksWil7dmFyIGNlPVkuX3ByaXZhdGUsdmU9Y2UuYW5pbWF0aW9uLmN1cnJlbnQsbWU9Y2UuYW5pbWF0aW9uLnF1ZXVlLExlPSExO2lmKHZlLmxlbmd0aD09PTApe3ZhciBfZT1tZS5zaGlmdCgpO19lJiZ2ZS5wdXNoKF9lKX1mb3IodmFyIEVlPWZ1bmN0aW9uKHN0KXtmb3IodmFyIFllPXN0Lmxlbmd0aC0xO1llPj0wO1llLS0pe3ZhciBtdD1zdFtZZV07bXQoKX1zdC5zcGxpY2UoMCxzdC5sZW5ndGgpfSxCZT12ZS5sZW5ndGgtMTtCZT49MDtCZS0tKXt2YXIgUmU9dmVbQmVdLFZlPVJlLl9wcml2YXRlO2lmKFZlLnN0b3BwZWQpe3ZlLnNwbGljZShCZSwxKSxWZS5ob29rZWQ9ITEsVmUucGxheWluZz0hMSxWZS5zdGFydGVkPSExLEVlKFZlLmZyYW1lcyk7Y29udGludWV9IVZlLnBsYXlpbmcmJiFWZS5hcHBseWluZ3x8KFZlLnBsYXlpbmcmJlZlLmFwcGx5aW5nJiYoVmUuYXBwbHlpbmc9ITEpLFZlLnN0YXJ0ZWR8fHVyZShZLFJlLHgpLGNyZShZLFJlLHgsWiksVmUuYXBwbHlpbmcmJihWZS5hcHBseWluZz0hMSksRWUoVmUuZnJhbWVzKSxWZS5zdGVwIT1udWxsJiZWZS5zdGVwKHgpLFJlLmNvbXBsZXRlZCgpJiYodmUuc3BsaWNlKEJlLDEpLFZlLmhvb2tlZD0hMSxWZS5wbGF5aW5nPSExLFZlLnN0YXJ0ZWQ9ITEsRWUoVmUuY29tcGxldGVzKSksTGU9ITApfXJldHVybiFaJiZ2ZS5sZW5ndGg9PT0wJiZtZS5sZW5ndGg9PT0wJiZTLnB1c2goWSksTGV9Zm9yKHZhciBPPSExLE49MDtOPGsubGVuZ3RoO04rKyl7dmFyICQ9a1tOXSxIPU0oJCk7Tz1PfHxIfXZhciBxPU0obSwhMCk7KE98fHEpJiYoay5sZW5ndGg+MD9tLm5vdGlmeSgiZHJhdyIsayk6bS5ub3RpZnkoImRyYXciKSksay51bm1lcmdlKFMpLG0uZW1pdCgic3RlcCIpfXZhciBscmU9e2FuaW1hdGU6ZnUuYW5pbWF0ZSgpLGFuaW1hdGlvbjpmdS5hbmltYXRpb24oKSxhbmltYXRlZDpmdS5hbmltYXRlZCgpLGNsZWFyUXVldWU6ZnUuY2xlYXJRdWV1ZSgpLGRlbGF5OmZ1LmRlbGF5KCksZGVsYXlBbmltYXRpb246ZnUuZGVsYXlBbmltYXRpb24oKSxzdG9wOmZ1LnN0b3AoKSxhZGRUb0FuaW1hdGlvblBvb2w6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcztrLnN0eWxlRW5hYmxlZCgpJiZrLl9wcml2YXRlLmFuaUVsZXMubWVyZ2UobSl9LHN0b3BBbmltYXRpb25Mb29wOmZ1bmN0aW9uKCl7dGhpcy5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZz0hMX0sc3RhcnRBbmltYXRpb25Mb29wOmZ1bmN0aW9uKCl7dmFyIG09dGhpcztpZihtLl9wcml2YXRlLmFuaW1hdGlvbnNSdW5uaW5nPSEwLCFtLnN0eWxlRW5hYmxlZCgpKXJldHVybjtmdW5jdGlvbiBrKCl7bS5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZyYmejAoZnVuY3Rpb24oTyl7QiQoTyxtKSxrKCl9KX12YXIgUz1tLnJlbmRlcmVyKCk7UyYmUy5iZWZvcmVSZW5kZXI/Uy5iZWZvcmVSZW5kZXIoZnVuY3Rpb24oTyxOKXtCJChOLG0pfSxTLmJlZm9yZVJlbmRlclByaW9yaXRpZXMuYW5pbWF0aW9ucyk6aygpfX0saHJlPXtxdWFsaWZpZXJDb21wYXJlOmZ1bmN0aW9uKG0sayl7cmV0dXJuIG09PW51bGx8fGs9PW51bGw/bT09bnVsbCYmaz09bnVsbDptLnNhbWVUZXh0KGspfSxldmVudE1hdGNoZXM6ZnVuY3Rpb24obSxrLFMpe3ZhciBNPWsucXVhbGlmaWVyO3JldHVybiBNIT1udWxsP20hPT1TLnRhcmdldCYmVShTLnRhcmdldCkmJk0ubWF0Y2hlcyhTLnRhcmdldCk6ITB9LGFkZEV2ZW50RmllbGRzOmZ1bmN0aW9uKG0sayl7ay5jeT1tLGsudGFyZ2V0PW19LGNhbGxiYWNrQ29udGV4dDpmdW5jdGlvbihtLGssUyl7cmV0dXJuIGsucXVhbGlmaWVyIT1udWxsP1MudGFyZ2V0Om19fSxGUz1mdW5jdGlvbihtKXtyZXR1cm4gYmUobSk/bmV3IGV5KG0pOm19LEYkPXtjcmVhdGVFbWl0dGVyOmZ1bmN0aW9uKCl7dmFyIG09dGhpcy5fcHJpdmF0ZTtyZXR1cm4gbS5lbWl0dGVyfHwobS5lbWl0dGVyPW5ldyBMUyhocmUsdGhpcykpLHRoaXN9LGVtaXR0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyfSxvbjpmdW5jdGlvbihtLGssUyl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uKG0sRlMoayksUyksdGhpc30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24obSxrLFMpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVMaXN0ZW5lcihtLEZTKGspLFMpLHRoaXN9LHJlbW92ZUFsbExpc3RlbmVyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKSx0aGlzfSxvbmU6ZnVuY3Rpb24obSxrLFMpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbmUobSxGUyhrKSxTKSx0aGlzfSxvbmNlOmZ1bmN0aW9uKG0sayxTKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub25lKG0sRlMoayksUyksdGhpc30sZW1pdDpmdW5jdGlvbihtLGspe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5lbWl0KG0sayksdGhpc30sZW1pdEFuZE5vdGlmeTpmdW5jdGlvbihtLGspe3JldHVybiB0aGlzLmVtaXQobSksdGhpcy5ub3RpZnkobSxrKSx0aGlzfX07ZnUuZXZlbnRBbGlhc2VzT24oRiQpO3ZhciBNST17cG5nOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGUucmVuZGVyZXI7cmV0dXJuIG09bXx8e30say5wbmcobSl9LGpwZzpmdW5jdGlvbihtKXt2YXIgaz10aGlzLl9wcml2YXRlLnJlbmRlcmVyO3JldHVybiBtPW18fHt9LG0uYmc9bS5iZ3x8IiNmZmYiLGsuanBnKG0pfX07TUkuanBlZz1NSS5qcGc7dmFyIFJTPXtsYXlvdXQ6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcztpZihtPT1udWxsKXtjaCgiTGF5b3V0IG9wdGlvbnMgbXVzdCBiZSBzcGVjaWZpZWQgdG8gbWFrZSBhIGxheW91dCIpO3JldHVybn1pZihtLm5hbWU9PW51bGwpe2NoKCJBIGBuYW1lYCBtdXN0IGJlIHNwZWNpZmllZCB0byBtYWtlIGEgbGF5b3V0Iik7cmV0dXJufXZhciBTPW0ubmFtZSxNPWsuZXh0ZW5zaW9uKCJsYXlvdXQiLFMpO2lmKE09PW51bGwpe2NoKCJObyBzdWNoIGxheW91dCBgIitTKyJgIGZvdW5kLiAgRGlkIHlvdSBmb3JnZXQgdG8gaW1wb3J0IGl0IGFuZCBgY3l0b3NjYXBlLnVzZSgpYCBpdD8iKTtyZXR1cm59dmFyIE87YmUobS5lbGVzKT9PPWsuJChtLmVsZXMpOk89bS5lbGVzIT1udWxsP20uZWxlczprLiQoKTt2YXIgTj1uZXcgTSh5dCh7fSxtLHtjeTprLGVsZXM6T30pKTtyZXR1cm4gTn19O1JTLmNyZWF0ZUxheW91dD1SUy5tYWtlTGF5b3V0PVJTLmxheW91dDt2YXIgZnJlPXtub3RpZnk6ZnVuY3Rpb24obSxrKXt2YXIgUz10aGlzLl9wcml2YXRlO2lmKHRoaXMuYmF0Y2hpbmcoKSl7Uy5iYXRjaE5vdGlmaWNhdGlvbnM9Uy5iYXRjaE5vdGlmaWNhdGlvbnN8fHt9O3ZhciBNPVMuYmF0Y2hOb3RpZmljYXRpb25zW21dPVMuYmF0Y2hOb3RpZmljYXRpb25zW21dfHx0aGlzLmNvbGxlY3Rpb24oKTtrIT1udWxsJiZNLm1lcmdlKGspO3JldHVybn1pZihTLm5vdGlmaWNhdGlvbnNFbmFibGVkKXt2YXIgTz10aGlzLnJlbmRlcmVyKCk7dGhpcy5kZXN0cm95ZWQoKXx8IU98fE8ubm90aWZ5KG0sayl9fSxub3RpZmljYXRpb25zOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGU7cmV0dXJuIG09PT12b2lkIDA/ay5ub3RpZmljYXRpb25zRW5hYmxlZDooay5ub3RpZmljYXRpb25zRW5hYmxlZD0hIW0sdGhpcyl9LG5vTm90aWZpY2F0aW9uczpmdW5jdGlvbihtKXt0aGlzLm5vdGlmaWNhdGlvbnMoITEpLG0oKSx0aGlzLm5vdGlmaWNhdGlvbnMoITApfSxiYXRjaGluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmJhdGNoQ291bnQ+MH0sc3RhcnRCYXRjaDpmdW5jdGlvbigpe3ZhciBtPXRoaXMuX3ByaXZhdGU7cmV0dXJuIG0uYmF0Y2hDb3VudD09bnVsbCYmKG0uYmF0Y2hDb3VudD0wKSxtLmJhdGNoQ291bnQ9PT0wJiYobS5iYXRjaFN0eWxlRWxlcz10aGlzLmNvbGxlY3Rpb24oKSxtLmJhdGNoTm90aWZpY2F0aW9ucz17fSksbS5iYXRjaENvdW50KyssdGhpc30sZW5kQmF0Y2g6ZnVuY3Rpb24oKXt2YXIgbT10aGlzLl9wcml2YXRlO2lmKG0uYmF0Y2hDb3VudD09PTApcmV0dXJuIHRoaXM7aWYobS5iYXRjaENvdW50LS0sbS5iYXRjaENvdW50PT09MCl7bS5iYXRjaFN0eWxlRWxlcy51cGRhdGVTdHlsZSgpO3ZhciBrPXRoaXMucmVuZGVyZXIoKTtPYmplY3Qua2V5cyhtLmJhdGNoTm90aWZpY2F0aW9ucykuZm9yRWFjaChmdW5jdGlvbihTKXt2YXIgTT1tLmJhdGNoTm90aWZpY2F0aW9uc1tTXTtNLmVtcHR5KCk/ay5ub3RpZnkoUyk6ay5ub3RpZnkoUyxNKX0pfXJldHVybiB0aGlzfSxiYXRjaDpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5zdGFydEJhdGNoKCksbSgpLHRoaXMuZW5kQmF0Y2goKSx0aGlzfSxiYXRjaERhdGE6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcztyZXR1cm4gdGhpcy5iYXRjaChmdW5jdGlvbigpe2Zvcih2YXIgUz1PYmplY3Qua2V5cyhtKSxNPTA7TTxTLmxlbmd0aDtNKyspe3ZhciBPPVNbTV0sTj1tW09dLCQ9ay5nZXRFbGVtZW50QnlJZChPKTskLmRhdGEoTil9fSl9fSxkcmU9cTAoe2hpZGVFZGdlc09uVmlld3BvcnQ6ITEsdGV4dHVyZU9uVmlld3BvcnQ6ITEsbW90aW9uQmx1cjohMSxtb3Rpb25CbHVyT3BhY2l0eTouMDUscGl4ZWxSYXRpbzp2b2lkIDAsZGVza3RvcFRhcFRocmVzaG9sZDo0LHRvdWNoVGFwVGhyZXNob2xkOjgsd2hlZWxTZW5zaXRpdml0eToxLGRlYnVnOiExLHNob3dGcHM6ITF9KSxEST17cmVuZGVyVG86ZnVuY3Rpb24obSxrLFMsTSl7dmFyIE89dGhpcy5fcHJpdmF0ZS5yZW5kZXJlcjtyZXR1cm4gTy5yZW5kZXJUbyhtLGssUyxNKSx0aGlzfSxyZW5kZXJlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnJlbmRlcmVyfSxmb3JjZVJlbmRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vdGlmeSgiZHJhdyIpLHRoaXN9LHJlc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmludmFsaWRhdGVTaXplKCksdGhpcy5lbWl0QW5kTm90aWZ5KCJyZXNpemUiKSx0aGlzfSxpbml0UmVuZGVyZXI6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcyxTPWsuZXh0ZW5zaW9uKCJyZW5kZXJlciIsbS5uYW1lKTtpZihTPT1udWxsKXtjaCgiQ2FuIG5vdCBpbml0aWFsaXNlOiBObyBzdWNoIHJlbmRlcmVyIGAiLmNvbmNhdChtLm5hbWUsImAgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGltcG9ydCBpdCBhbmQgYGN5dG9zY2FwZS51c2UoKWAgaXQ/IikpO3JldHVybn1tLndoZWVsU2Vuc2l0aXZpdHkhPT12b2lkIDAmJmh1KCJZb3UgaGF2ZSBzZXQgYSBjdXN0b20gd2hlZWwgc2Vuc2l0aXZpdHkuICBUaGlzIHdpbGwgbWFrZSB5b3VyIGFwcCB6b29tIHVubmF0dXJhbGx5IHdoZW4gdXNpbmcgbWFpbnN0cmVhbSBtaWNlLiAgWW91IHNob3VsZCBjaGFuZ2UgdGhpcyB2YWx1ZSBmcm9tIHRoZSBkZWZhdWx0IG9ubHkgaWYgeW91IGNhbiBndWFyYW50ZWUgdGhhdCBhbGwgeW91ciB1c2VycyB3aWxsIHVzZSB0aGUgc2FtZSBoYXJkd2FyZSBhbmQgT1MgY29uZmlndXJhdGlvbiBhcyB5b3VyIGN1cnJlbnQgbWFjaGluZS4iKTt2YXIgTT1kcmUobSk7TS5jeT1rLGsuX3ByaXZhdGUucmVuZGVyZXI9bmV3IFMoTSksdGhpcy5ub3RpZnkoImluaXQiKX0sZGVzdHJveVJlbmRlcmVyOmZ1bmN0aW9uKCl7dmFyIG09dGhpczttLm5vdGlmeSgiZGVzdHJveSIpO3ZhciBrPW0uY29udGFpbmVyKCk7aWYoaylmb3Ioay5fY3lyZWc9bnVsbDtrLmNoaWxkTm9kZXMubGVuZ3RoPjA7KWsucmVtb3ZlQ2hpbGQoay5jaGlsZE5vZGVzWzBdKTttLl9wcml2YXRlLnJlbmRlcmVyPW51bGwsbS5tdXRhYmxlRWxlbWVudHMoKS5mb3JFYWNoKGZ1bmN0aW9uKFMpe3ZhciBNPVMuX3ByaXZhdGU7TS5yc2NyYXRjaD17fSxNLnJzdHlsZT17fSxNLmFuaW1hdGlvbi5jdXJyZW50PVtdLE0uYW5pbWF0aW9uLnF1ZXVlPVtdfSl9LG9uUmVuZGVyOmZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLm9uKCJyZW5kZXIiLG0pfSxvZmZSZW5kZXI6ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMub2ZmKCJyZW5kZXIiLG0pfX07REkuaW52YWxpZGF0ZURpbWVuc2lvbnM9REkucmVzaXplO3ZhciBqUz17Y29sbGVjdGlvbjpmdW5jdGlvbihtLGspe3JldHVybiBiZShtKT90aGlzLiQobSk6eGUobSk/bS5jb2xsZWN0aW9uKCk6bmUobSk/KGt8fChrPXt9KSxuZXcgVjAodGhpcyxtLGsudW5pcXVlLGsucmVtb3ZlZCkpOm5ldyBWMCh0aGlzKX0sbm9kZXM6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcy4kKGZ1bmN0aW9uKFMpe3JldHVybiBTLmlzTm9kZSgpfSk7cmV0dXJuIG0/ay5maWx0ZXIobSk6a30sZWRnZXM6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcy4kKGZ1bmN0aW9uKFMpe3JldHVybiBTLmlzRWRnZSgpfSk7cmV0dXJuIG0/ay5maWx0ZXIobSk6a30sJDpmdW5jdGlvbihtKXt2YXIgaz10aGlzLl9wcml2YXRlLmVsZW1lbnRzO3JldHVybiBtP2suZmlsdGVyKG0pOmsuc3Bhd25TZWxmKCl9LG11dGFibGVFbGVtZW50czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzfX07alMuZWxlbWVudHM9alMuZmlsdGVyPWpTLiQ7dmFyIEUxPXt9LG9rPSJ0IixncmU9ImYiO0UxLmFwcGx5PWZ1bmN0aW9uKHgpe2Zvcih2YXIgbT10aGlzLGs9bS5fcHJpdmF0ZSxTPWsuY3ksTT1TLmNvbGxlY3Rpb24oKSxPPTA7Tzx4Lmxlbmd0aDtPKyspe3ZhciBOPXhbT10sJD1tLmdldENvbnRleHRNZXRhKE4pO2lmKCEkLmVtcHR5KXt2YXIgSD1tLmdldENvbnRleHRTdHlsZSgkKSxxPW0uYXBwbHlDb250ZXh0U3R5bGUoJCxILE4pO04uX3ByaXZhdGUuYXBwbGllZEluaXRTdHlsZT9tLnVwZGF0ZVRyYW5zaXRpb25zKE4scS5kaWZmUHJvcHMpOk4uX3ByaXZhdGUuYXBwbGllZEluaXRTdHlsZT0hMDt2YXIgWT1tLnVwZGF0ZVN0eWxlSGludHMoTik7WSYmTS5wdXNoKE4pfX1yZXR1cm4gTX0sRTEuZ2V0UHJvcGVydGllc0RpZmY9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzLFM9ay5fcHJpdmF0ZS5wcm9wRGlmZnM9ay5fcHJpdmF0ZS5wcm9wRGlmZnN8fHt9LE09eCsiLSIrbSxPPVNbTV07aWYoTylyZXR1cm4gTztmb3IodmFyIE49W10sJD17fSxIPTA7SDxrLmxlbmd0aDtIKyspe3ZhciBxPWtbSF0sWT14W0hdPT09b2ssWj1tW0hdPT09b2ssY2U9WSE9PVosdmU9cS5tYXBwZWRQcm9wZXJ0aWVzLmxlbmd0aD4wO2lmKGNlfHxaJiZ2ZSl7dmFyIG1lPXZvaWQgMDtjZSYmdmV8fGNlP21lPXEucHJvcGVydGllczp2ZSYmKG1lPXEubWFwcGVkUHJvcGVydGllcyk7Zm9yKHZhciBMZT0wO0xlPG1lLmxlbmd0aDtMZSsrKXtmb3IodmFyIF9lPW1lW0xlXSxFZT1fZS5uYW1lLEJlPSExLFJlPUgrMTtSZTxrLmxlbmd0aDtSZSsrKXt2YXIgVmU9a1tSZV0sY3Q9bVtSZV09PT1vaztpZihjdCYmKEJlPVZlLnByb3BlcnRpZXNbX2UubmFtZV0hPW51bGwsQmUpKWJyZWFrfSEkW0VlXSYmIUJlJiYoJFtFZV09ITAsTi5wdXNoKEVlKSl9fX1yZXR1cm4gU1tNXT1OLE59LEUxLmdldENvbnRleHRNZXRhPWZ1bmN0aW9uKHgpe2Zvcih2YXIgbT10aGlzLGs9IiIsUyxNPXguX3ByaXZhdGUuc3R5bGVDeHRLZXl8fCIiLE89MDtPPG0ubGVuZ3RoO08rKyl7dmFyIE49bVtPXSwkPU4uc2VsZWN0b3ImJk4uc2VsZWN0b3IubWF0Y2hlcyh4KTskP2srPW9rOmsrPWdyZX1yZXR1cm4gUz1tLmdldFByb3BlcnRpZXNEaWZmKE0saykseC5fcHJpdmF0ZS5zdHlsZUN4dEtleT1rLHtrZXk6ayxkaWZmUHJvcE5hbWVzOlMsZW1wdHk6Uy5sZW5ndGg9PT0wfX0sRTEuZ2V0Q29udGV4dFN0eWxlPWZ1bmN0aW9uKHgpe3ZhciBtPXgua2V5LGs9dGhpcyxTPXRoaXMuX3ByaXZhdGUuY29udGV4dFN0eWxlcz10aGlzLl9wcml2YXRlLmNvbnRleHRTdHlsZXN8fHt9O2lmKFNbbV0pcmV0dXJuIFNbbV07Zm9yKHZhciBNPXtfcHJpdmF0ZTp7a2V5Om19fSxPPTA7TzxrLmxlbmd0aDtPKyspe3ZhciBOPWtbT10sJD1tW09dPT09b2s7aWYoJClmb3IodmFyIEg9MDtIPE4ucHJvcGVydGllcy5sZW5ndGg7SCsrKXt2YXIgcT1OLnByb3BlcnRpZXNbSF07TVtxLm5hbWVdPXF9fXJldHVybiBTW21dPU0sTX0sRTEuYXBwbHlDb250ZXh0U3R5bGU9ZnVuY3Rpb24oeCxtLGspe2Zvcih2YXIgUz10aGlzLE09eC5kaWZmUHJvcE5hbWVzLE89e30sTj1TLnR5cGVzLCQ9MDskPE0ubGVuZ3RoOyQrKyl7dmFyIEg9TVskXSxxPW1bSF0sWT1rLnBzdHlsZShIKTtpZighcSlpZihZKVkuYnlwYXNzP3E9e25hbWU6SCxkZWxldGVCeXBhc3NlZDohMH06cT17bmFtZTpILGRlbGV0ZTohMH07ZWxzZSBjb250aW51ZTtpZihZIT09cSl7aWYocS5tYXBwZWQ9PT1OLmZuJiZZIT1udWxsJiZZLm1hcHBpbmchPW51bGwmJlkubWFwcGluZy52YWx1ZT09PXEudmFsdWUpe3ZhciBaPVkubWFwcGluZyxjZT1aLmZuVmFsdWU9cS52YWx1ZShrKTtpZihjZT09PVoucHJldkZuVmFsdWUpY29udGludWV9dmFyIHZlPU9bSF09e3ByZXY6WX07Uy5hcHBseVBhcnNlZFByb3BlcnR5KGsscSksdmUubmV4dD1rLnBzdHlsZShIKSx2ZS5uZXh0JiZ2ZS5uZXh0LmJ5cGFzcyYmKHZlLm5leHQ9dmUubmV4dC5ieXBhc3NlZCl9fXJldHVybntkaWZmUHJvcHM6T319LEUxLnVwZGF0ZVN0eWxlSGludHM9ZnVuY3Rpb24oeCl7dmFyIG09eC5fcHJpdmF0ZSxrPXRoaXMsUz1rLnByb3BlcnR5R3JvdXBOYW1lcyxNPWsucHJvcGVydHlHcm91cEtleXMsTz1mdW5jdGlvbihTaSx5cyxwYSl7cmV0dXJuIGsuZ2V0UHJvcGVydGllc0hhc2goU2kseXMscGEpfSxOPW0uc3R5bGVLZXk7aWYoeC5yZW1vdmVkKCkpcmV0dXJuITE7dmFyICQ9bS5ncm91cD09PSJub2RlcyIsSD14Ll9wcml2YXRlLnN0eWxlO1M9T2JqZWN0LmtleXMoSCk7Zm9yKHZhciBxPTA7cTxNLmxlbmd0aDtxKyspe3ZhciBZPU1bcV07bS5zdHlsZUtleXNbWV09W1kzLGM1XX1mb3IodmFyIFo9ZnVuY3Rpb24oU2kseXMpe3JldHVybiBtLnN0eWxlS2V5c1t5c11bMF09emcoU2ksbS5zdHlsZUtleXNbeXNdWzBdKX0sY2U9ZnVuY3Rpb24oU2kseXMpe3JldHVybiBtLnN0eWxlS2V5c1t5c11bMV09Ym0oU2ksbS5zdHlsZUtleXNbeXNdWzFdKX0sdmU9ZnVuY3Rpb24oU2kseXMpe1ooU2kseXMpLGNlKFNpLHlzKX0sbWU9ZnVuY3Rpb24oU2kseXMpe2Zvcih2YXIgcGE9MDtwYTxTaS5sZW5ndGg7cGErKyl7dmFyIE1pPVNpLmNoYXJDb2RlQXQocGEpO1ooTWkseXMpLGNlKE1pLHlzKX19LExlPTJlOSxfZT1mdW5jdGlvbihTaSl7cmV0dXJuLTEyODxTaSYmU2k8MTI4JiZNYXRoLmZsb29yKFNpKSE9PVNpP0xlLShTaSoxMDI0fDApOlNpfSxFZT0wO0VlPFMubGVuZ3RoO0VlKyspe3ZhciBCZT1TW0VlXSxSZT1IW0JlXTtpZihSZSE9bnVsbCl7dmFyIFZlPXRoaXMucHJvcGVydGllc1tCZV0sY3Q9VmUudHlwZSxzdD1WZS5ncm91cEtleSxZZT12b2lkIDA7VmUuaGFzaE92ZXJyaWRlIT1udWxsP1llPVZlLmhhc2hPdmVycmlkZSh4LFJlKTpSZS5wZlZhbHVlIT1udWxsJiYoWWU9UmUucGZWYWx1ZSk7dmFyIG10PVZlLmVudW1zPT1udWxsP1JlLnZhbHVlOm51bGwsSmU9WWUhPW51bGwsTHQ9bXQhPW51bGwsTXQ9SmV8fEx0LHV0PVJlLnVuaXRzO2lmKGN0Lm51bWJlciYmTXQmJiFjdC5tdWx0aXBsZSl7dmFyIFd0PUplP1llOm10O3ZlKF9lKFd0KSxzdCksIUplJiZ1dCE9bnVsbCYmbWUodXQsc3QpfWVsc2UgbWUoUmUuc3RyVmFsdWUsc3QpfX1mb3IodmFyIFR0PVtZMyxjNV0sX249MDtfbjxNLmxlbmd0aDtfbisrKXt2YXIgaG49TVtfbl0sWXQ9bS5zdHlsZUtleXNbaG5dO1R0WzBdPXpnKFl0WzBdLFR0WzBdKSxUdFsxXT1ibShZdFsxXSxUdFsxXSl9bS5zdHlsZUtleT16OShUdFswXSxUdFsxXSk7dmFyIERuPW0uc3R5bGVLZXlzO20ubGFiZWxEaW1zS2V5PW1tKERuLmxhYmVsRGltZW5zaW9ucyk7dmFyIGlyPU8oeCxbImxhYmVsIl0sRG4ubGFiZWxEaW1lbnNpb25zKTtpZihtLmxhYmVsS2V5PW1tKGlyKSxtLmxhYmVsU3R5bGVLZXk9bW0odTUoRG4uY29tbW9uTGFiZWwsaXIpKSwhJCl7dmFyIHZyPU8oeCxbInNvdXJjZS1sYWJlbCJdLERuLmxhYmVsRGltZW5zaW9ucyk7bS5zb3VyY2VMYWJlbEtleT1tbSh2ciksbS5zb3VyY2VMYWJlbFN0eWxlS2V5PW1tKHU1KERuLmNvbW1vbkxhYmVsLHZyKSk7dmFyIE5uPU8oeCxbInRhcmdldC1sYWJlbCJdLERuLmxhYmVsRGltZW5zaW9ucyk7bS50YXJnZXRMYWJlbEtleT1tbShObiksbS50YXJnZXRMYWJlbFN0eWxlS2V5PW1tKHU1KERuLmNvbW1vbkxhYmVsLE5uKSl9aWYoJCl7dmFyIHByPW0uc3R5bGVLZXlzLEVyPXByLm5vZGVCb2R5LE1yPXByLm5vZGVCb3JkZXIsQ3I9cHIubm9kZU91dGxpbmUsT3I9cHIuYmFja2dyb3VuZEltYWdlLFduPXByLmNvbXBvdW5kLGJyPXByLnBpZSxTcj1bRXIsTXIsQ3IsT3IsV24sYnJdLmZpbHRlcihmdW5jdGlvbihOcil7cmV0dXJuIE5yIT1udWxsfSkucmVkdWNlKHU1LFtZMyxjNV0pO20ubm9kZUtleT1tbShTciksbS5oYXNQaWU9YnIhPW51bGwmJmJyWzBdIT09WTMmJmJyWzFdIT09YzV9cmV0dXJuIE4hPT1tLnN0eWxlS2V5fSxFMS5jbGVhclN0eWxlSGludHM9ZnVuY3Rpb24oeCl7dmFyIG09eC5fcHJpdmF0ZTttLnN0eWxlQ3h0S2V5PSIiLG0uc3R5bGVLZXlzPXt9LG0uc3R5bGVLZXk9bnVsbCxtLmxhYmVsS2V5PW51bGwsbS5sYWJlbFN0eWxlS2V5PW51bGwsbS5zb3VyY2VMYWJlbEtleT1udWxsLG0uc291cmNlTGFiZWxTdHlsZUtleT1udWxsLG0udGFyZ2V0TGFiZWxLZXk9bnVsbCxtLnRhcmdldExhYmVsU3R5bGVLZXk9bnVsbCxtLm5vZGVLZXk9bnVsbCxtLmhhc1BpZT1udWxsfSxFMS5hcHBseVBhcnNlZFByb3BlcnR5PWZ1bmN0aW9uKHgsbSl7dmFyIGs9dGhpcyxTPW0sTT14Ll9wcml2YXRlLnN0eWxlLE8sTj1rLnR5cGVzLCQ9ay5wcm9wZXJ0aWVzW1MubmFtZV0udHlwZSxIPVMuYnlwYXNzLHE9TVtTLm5hbWVdLFk9cSYmcS5ieXBhc3MsWj14Ll9wcml2YXRlLGNlPSJtYXBwaW5nIix2ZT1mdW5jdGlvbihFcil7cmV0dXJuIEVyPT1udWxsP251bGw6RXIucGZWYWx1ZSE9bnVsbD9Fci5wZlZhbHVlOkVyLnZhbHVlfSxtZT1mdW5jdGlvbigpe3ZhciBFcj12ZShxKSxNcj12ZShTKTtrLmNoZWNrVHJpZ2dlcnMoeCxTLm5hbWUsRXIsTXIpfTtpZihtLm5hbWU9PT0iY3VydmUtc3R5bGUiJiZ4LmlzRWRnZSgpJiYobS52YWx1ZSE9PSJiZXppZXIiJiZ4LmlzTG9vcCgpfHxtLnZhbHVlPT09ImhheXN0YWNrIiYmKHguc291cmNlKCkuaXNQYXJlbnQoKXx8eC50YXJnZXQoKS5pc1BhcmVudCgpKSkmJihTPW09dGhpcy5wYXJzZShtLm5hbWUsImJlemllciIsSCkpLFMuZGVsZXRlKXJldHVybiBNW1MubmFtZV09dm9pZCAwLG1lKCksITA7aWYoUy5kZWxldGVCeXBhc3NlZClyZXR1cm4gcT9xLmJ5cGFzcz8ocS5ieXBhc3NlZD12b2lkIDAsbWUoKSwhMCk6ITE6KG1lKCksITApO2lmKFMuZGVsZXRlQnlwYXNzKXJldHVybiBxP3EuYnlwYXNzPyhNW1MubmFtZV09cS5ieXBhc3NlZCxtZSgpLCEwKTohMToobWUoKSwhMCk7dmFyIExlPWZ1bmN0aW9uKCl7aHUoIkRvIG5vdCBhc3NpZ24gbWFwcGluZ3MgdG8gZWxlbWVudHMgd2l0aG91dCBjb3JyZXNwb25kaW5nIGRhdGEgKGkuZS4gZWxlIGAiK3guaWQoKSsiYCBoYXMgbm8gbWFwcGluZyBmb3IgcHJvcGVydHkgYCIrUy5uYW1lKyJgIHdpdGggZGF0YSBmaWVsZCBgIitTLmZpZWxkKyJgKTsgdHJ5IGEgYFsiK1MuZmllbGQrIl1gIHNlbGVjdG9yIHRvIGxpbWl0IHNjb3BlIHRvIGVsZW1lbnRzIHdpdGggYCIrUy5maWVsZCsiYCBkZWZpbmVkIil9O3N3aXRjaChTLm1hcHBlZCl7Y2FzZSBOLm1hcERhdGE6e2Zvcih2YXIgX2U9Uy5maWVsZC5zcGxpdCgiLiIpLEVlPVouZGF0YSxCZT0wO0JlPF9lLmxlbmd0aCYmRWU7QmUrKyl7dmFyIFJlPV9lW0JlXTtFZT1FZVtSZV19aWYoRWU9PW51bGwpcmV0dXJuIExlKCksITE7dmFyIFZlO2lmKFgoRWUpKXt2YXIgY3Q9Uy5maWVsZE1heC1TLmZpZWxkTWluO2N0PT09MD9WZT0wOlZlPShFZS1TLmZpZWxkTWluKS9jdH1lbHNlIHJldHVybiBodSgiRG8gbm90IHVzZSBjb250aW51b3VzIG1hcHBlcnMgd2l0aG91dCBzcGVjaWZ5aW5nIG51bWVyaWMgZGF0YSAoaS5lLiBgIitTLmZpZWxkKyI6ICIrRWUrImAgZm9yIGAiK3guaWQoKSsiYCBpcyBub24tbnVtZXJpYykiKSwhMTtpZihWZTwwP1ZlPTA6VmU+MSYmKFZlPTEpLCQuY29sb3Ipe3ZhciBzdD1TLnZhbHVlTWluWzBdLFllPVMudmFsdWVNYXhbMF0sbXQ9Uy52YWx1ZU1pblsxXSxKZT1TLnZhbHVlTWF4WzFdLEx0PVMudmFsdWVNaW5bMl0sTXQ9Uy52YWx1ZU1heFsyXSx1dD1TLnZhbHVlTWluWzNdPT1udWxsPzE6Uy52YWx1ZU1pblszXSxXdD1TLnZhbHVlTWF4WzNdPT1udWxsPzE6Uy52YWx1ZU1heFszXSxUdD1bTWF0aC5yb3VuZChzdCsoWWUtc3QpKlZlKSxNYXRoLnJvdW5kKG10KyhKZS1tdCkqVmUpLE1hdGgucm91bmQoTHQrKE10LUx0KSpWZSksTWF0aC5yb3VuZCh1dCsoV3QtdXQpKlZlKV07Tz17YnlwYXNzOlMuYnlwYXNzLG5hbWU6Uy5uYW1lLHZhbHVlOlR0LHN0clZhbHVlOiJyZ2IoIitUdFswXSsiLCAiK1R0WzFdKyIsICIrVHRbMl0rIikifX1lbHNlIGlmKCQubnVtYmVyKXt2YXIgX249Uy52YWx1ZU1pbisoUy52YWx1ZU1heC1TLnZhbHVlTWluKSpWZTtPPXRoaXMucGFyc2UoUy5uYW1lLF9uLFMuYnlwYXNzLGNlKX1lbHNlIHJldHVybiExO2lmKCFPKXJldHVybiBMZSgpLCExO08ubWFwcGluZz1TLFM9TzticmVha31jYXNlIE4uZGF0YTp7Zm9yKHZhciBobj1TLmZpZWxkLnNwbGl0KCIuIiksWXQ9Wi5kYXRhLERuPTA7RG48aG4ubGVuZ3RoJiZZdDtEbisrKXt2YXIgaXI9aG5bRG5dO1l0PVl0W2lyXX1pZihZdCE9bnVsbCYmKE89dGhpcy5wYXJzZShTLm5hbWUsWXQsUy5ieXBhc3MsY2UpKSwhTylyZXR1cm4gTGUoKSwhMTtPLm1hcHBpbmc9UyxTPU87YnJlYWt9Y2FzZSBOLmZuOnt2YXIgdnI9Uy52YWx1ZSxObj1TLmZuVmFsdWUhPW51bGw/Uy5mblZhbHVlOnZyKHgpO2lmKFMucHJldkZuVmFsdWU9Tm4sTm49PW51bGwpcmV0dXJuIGh1KCJDdXN0b20gZnVuY3Rpb24gbWFwcGVycyBtYXkgbm90IHJldHVybiBudWxsIChpLmUuIGAiK1MubmFtZSsiYCBmb3IgZWxlIGAiK3guaWQoKSsiYCBpcyBudWxsKSIpLCExO2lmKE89dGhpcy5wYXJzZShTLm5hbWUsTm4sUy5ieXBhc3MsY2UpLCFPKXJldHVybiBodSgiQ3VzdG9tIGZ1bmN0aW9uIG1hcHBlcnMgbWF5IG5vdCByZXR1cm4gaW52YWxpZCB2YWx1ZXMgZm9yIHRoZSBwcm9wZXJ0eSB0eXBlIChpLmUuIGAiK1MubmFtZSsiYCBmb3IgZWxlIGAiK3guaWQoKSsiYCBpcyBpbnZhbGlkKSIpLCExO08ubWFwcGluZz12bShTKSxTPU87YnJlYWt9Y2FzZSB2b2lkIDA6YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4gSD8oWT9TLmJ5cGFzc2VkPXEuYnlwYXNzZWQ6Uy5ieXBhc3NlZD1xLE1bUy5uYW1lXT1TKTpZP3EuYnlwYXNzZWQ9UzpNW1MubmFtZV09UyxtZSgpLCEwfSxFMS5jbGVhbkVsZW1lbnRzPWZ1bmN0aW9uKHgsbSl7Zm9yKHZhciBrPTA7azx4Lmxlbmd0aDtrKyspe3ZhciBTPXhba107aWYodGhpcy5jbGVhclN0eWxlSGludHMoUyksUy5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxTLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLCFtKVMuX3ByaXZhdGUuc3R5bGU9e307ZWxzZSBmb3IodmFyIE09Uy5fcHJpdmF0ZS5zdHlsZSxPPU9iamVjdC5rZXlzKE0pLE49MDtOPE8ubGVuZ3RoO04rKyl7dmFyICQ9T1tOXSxIPU1bJF07SCE9bnVsbCYmKEguYnlwYXNzP0guYnlwYXNzZWQ9bnVsbDpNWyRdPW51bGwpfX19LEUxLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciB4PXRoaXMuX3ByaXZhdGUuY3ksbT14Lm11dGFibGVFbGVtZW50cygpO20udXBkYXRlU3R5bGUoKX0sRTEudXBkYXRlVHJhbnNpdGlvbnM9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzLFM9eC5fcHJpdmF0ZSxNPXgucHN0eWxlKCJ0cmFuc2l0aW9uLXByb3BlcnR5IikudmFsdWUsTz14LnBzdHlsZSgidHJhbnNpdGlvbi1kdXJhdGlvbiIpLnBmVmFsdWUsTj14LnBzdHlsZSgidHJhbnNpdGlvbi1kZWxheSIpLnBmVmFsdWU7aWYoTS5sZW5ndGg+MCYmTz4wKXtmb3IodmFyICQ9e30sSD0hMSxxPTA7cTxNLmxlbmd0aDtxKyspe3ZhciBZPU1bcV0sWj14LnBzdHlsZShZKSxjZT1tW1ldO2lmKGNlKXt2YXIgdmU9Y2UucHJldixtZT12ZSxMZT1jZS5uZXh0IT1udWxsP2NlLm5leHQ6WixfZT0hMSxFZT12b2lkIDAsQmU9MWUtNjttZSYmKFgobWUucGZWYWx1ZSkmJlgoTGUucGZWYWx1ZSk/KF9lPUxlLnBmVmFsdWUtbWUucGZWYWx1ZSxFZT1tZS5wZlZhbHVlK0JlKl9lKTpYKG1lLnZhbHVlKSYmWChMZS52YWx1ZSk/KF9lPUxlLnZhbHVlLW1lLnZhbHVlLEVlPW1lLnZhbHVlK0JlKl9lKTpuZShtZS52YWx1ZSkmJm5lKExlLnZhbHVlKSYmKF9lPW1lLnZhbHVlWzBdIT09TGUudmFsdWVbMF18fG1lLnZhbHVlWzFdIT09TGUudmFsdWVbMV18fG1lLnZhbHVlWzJdIT09TGUudmFsdWVbMl0sRWU9bWUuc3RyVmFsdWUpLF9lJiYoJFtZXT1MZS5zdHJWYWx1ZSx0aGlzLmFwcGx5QnlwYXNzKHgsWSxFZSksSD0hMCkpfX1pZighSClyZXR1cm47Uy50cmFuc2l0aW9uaW5nPSEwLG5ldyBpOChmdW5jdGlvbihSZSl7Tj4wP3guZGVsYXlBbmltYXRpb24oTikucGxheSgpLnByb21pc2UoKS50aGVuKFJlKTpSZSgpfSkudGhlbihmdW5jdGlvbigpe3JldHVybiB4LmFuaW1hdGlvbih7c3R5bGU6JCxkdXJhdGlvbjpPLGVhc2luZzp4LnBzdHlsZSgidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iKS52YWx1ZSxxdWV1ZTohMX0pLnBsYXkoKS5wcm9taXNlKCl9KS50aGVuKGZ1bmN0aW9uKCl7ay5yZW1vdmVCeXBhc3Nlcyh4LE0pLHguZW1pdEFuZE5vdGlmeSgic3R5bGUiKSxTLnRyYW5zaXRpb25pbmc9ITF9KX1lbHNlIFMudHJhbnNpdGlvbmluZyYmKHRoaXMucmVtb3ZlQnlwYXNzZXMoeCxNKSx4LmVtaXRBbmROb3RpZnkoInN0eWxlIiksUy50cmFuc2l0aW9uaW5nPSExKX0sRTEuY2hlY2tUcmlnZ2VyPWZ1bmN0aW9uKHgsbSxrLFMsTSxPKXt2YXIgTj10aGlzLnByb3BlcnRpZXNbbV0sJD1NKE4pOyQhPW51bGwmJiQoayxTKSYmTyhOKX0sRTEuY2hlY2taT3JkZXJUcmlnZ2VyPWZ1bmN0aW9uKHgsbSxrLFMpe3ZhciBNPXRoaXM7dGhpcy5jaGVja1RyaWdnZXIoeCxtLGssUyxmdW5jdGlvbihPKXtyZXR1cm4gTy50cmlnZ2Vyc1pPcmRlcn0sZnVuY3Rpb24oKXtNLl9wcml2YXRlLmN5Lm5vdGlmeSgiem9yZGVyIix4KX0pfSxFMS5jaGVja0JvdW5kc1RyaWdnZXI9ZnVuY3Rpb24oeCxtLGssUyl7dGhpcy5jaGVja1RyaWdnZXIoeCxtLGssUyxmdW5jdGlvbihNKXtyZXR1cm4gTS50cmlnZ2Vyc0JvdW5kc30sZnVuY3Rpb24oTSl7eC5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSx4LmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLE0udHJpZ2dlcnNCb3VuZHNPZlBhcmFsbGVsQmV6aWVycyYmbT09PSJjdXJ2ZS1zdHlsZSImJihrPT09ImJlemllciJ8fFM9PT0iYmV6aWVyIikmJngucGFyYWxsZWxFZGdlcygpLmZvckVhY2goZnVuY3Rpb24oTyl7Ty5pc0J1bmRsZWRCZXppZXIoKSYmTy5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX0pLE0udHJpZ2dlcnNCb3VuZHNPZkNvbm5lY3RlZEVkZ2VzJiZtPT09ImRpc3BsYXkiJiYoaz09PSJub25lInx8Uz09PSJub25lIikmJnguY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKE8pe08uZGlydHlCb3VuZGluZ0JveENhY2hlKCl9KX0pfSxFMS5jaGVja1RyaWdnZXJzPWZ1bmN0aW9uKHgsbSxrLFMpe3guZGlydHlTdHlsZUNhY2hlKCksdGhpcy5jaGVja1pPcmRlclRyaWdnZXIoeCxtLGssUyksdGhpcy5jaGVja0JvdW5kc1RyaWdnZXIoeCxtLGssUyl9O3ZhciBjaz17fTtjay5hcHBseUJ5cGFzcz1mdW5jdGlvbih4LG0sayxTKXt2YXIgTT10aGlzLE89W10sTj0hMDtpZihtPT09IioifHxtPT09IioqIil7aWYoayE9PXZvaWQgMClmb3IodmFyICQ9MDskPE0ucHJvcGVydGllcy5sZW5ndGg7JCsrKXt2YXIgSD1NLnByb3BlcnRpZXNbJF0scT1ILm5hbWUsWT10aGlzLnBhcnNlKHEsaywhMCk7WSYmTy5wdXNoKFkpfX1lbHNlIGlmKGJlKG0pKXt2YXIgWj10aGlzLnBhcnNlKG0saywhMCk7WiYmTy5wdXNoKFopfWVsc2UgaWYoc2UobSkpe3ZhciBjZT1tO1M9aztmb3IodmFyIHZlPU9iamVjdC5rZXlzKGNlKSxtZT0wO21lPHZlLmxlbmd0aDttZSsrKXt2YXIgTGU9dmVbbWVdLF9lPWNlW0xlXTtpZihfZT09PXZvaWQgMCYmKF9lPWNlW190KExlKV0pLF9lIT09dm9pZCAwKXt2YXIgRWU9dGhpcy5wYXJzZShMZSxfZSwhMCk7RWUmJk8ucHVzaChFZSl9fX1lbHNlIHJldHVybiExO2lmKE8ubGVuZ3RoPT09MClyZXR1cm4hMTtmb3IodmFyIEJlPSExLFJlPTA7UmU8eC5sZW5ndGg7UmUrKyl7Zm9yKHZhciBWZT14W1JlXSxjdD17fSxzdD12b2lkIDAsWWU9MDtZZTxPLmxlbmd0aDtZZSsrKXt2YXIgbXQ9T1tZZV07aWYoUyl7dmFyIEplPVZlLnBzdHlsZShtdC5uYW1lKTtzdD1jdFttdC5uYW1lXT17cHJldjpKZX19QmU9dGhpcy5hcHBseVBhcnNlZFByb3BlcnR5KFZlLHZtKG10KSl8fEJlLFMmJihzdC5uZXh0PVZlLnBzdHlsZShtdC5uYW1lKSl9QmUmJnRoaXMudXBkYXRlU3R5bGVIaW50cyhWZSksUyYmdGhpcy51cGRhdGVUcmFuc2l0aW9ucyhWZSxjdCxOKX1yZXR1cm4gQmV9LGNrLm92ZXJyaWRlQnlwYXNzPWZ1bmN0aW9uKHgsbSxrKXttPWduKG0pO2Zvcih2YXIgUz0wO1M8eC5sZW5ndGg7UysrKXt2YXIgTT14W1NdLE89TS5fcHJpdmF0ZS5zdHlsZVttXSxOPXRoaXMucHJvcGVydGllc1ttXS50eXBlLCQ9Ti5jb2xvcixIPU4ubXV0aXBsZSxxPU8/Ty5wZlZhbHVlIT1udWxsP08ucGZWYWx1ZTpPLnZhbHVlOm51bGw7IU98fCFPLmJ5cGFzcz90aGlzLmFwcGx5QnlwYXNzKE0sbSxrKTooTy52YWx1ZT1rLE8ucGZWYWx1ZSE9bnVsbCYmKE8ucGZWYWx1ZT1rKSwkP08uc3RyVmFsdWU9InJnYigiK2suam9pbigiLCIpKyIpIjpIP08uc3RyVmFsdWU9ay5qb2luKCIgIik6Ty5zdHJWYWx1ZT0iIitrLHRoaXMudXBkYXRlU3R5bGVIaW50cyhNKSksdGhpcy5jaGVja1RyaWdnZXJzKE0sbSxxLGspfX0sY2sucmVtb3ZlQWxsQnlwYXNzZXM9ZnVuY3Rpb24oeCxtKXtyZXR1cm4gdGhpcy5yZW1vdmVCeXBhc3Nlcyh4LHRoaXMucHJvcGVydHlOYW1lcyxtKX0sY2sucmVtb3ZlQnlwYXNzZXM9ZnVuY3Rpb24oeCxtLGspe2Zvcih2YXIgUz0hMCxNPTA7TTx4Lmxlbmd0aDtNKyspe2Zvcih2YXIgTz14W01dLE49e30sJD0wOyQ8bS5sZW5ndGg7JCsrKXt2YXIgSD1tWyRdLHE9dGhpcy5wcm9wZXJ0aWVzW0hdLFk9Ty5wc3R5bGUocS5uYW1lKTtpZighKCFZfHwhWS5ieXBhc3MpKXt2YXIgWj0iIixjZT10aGlzLnBhcnNlKEgsWiwhMCksdmU9TltxLm5hbWVdPXtwcmV2Oll9O3RoaXMuYXBwbHlQYXJzZWRQcm9wZXJ0eShPLGNlKSx2ZS5uZXh0PU8ucHN0eWxlKHEubmFtZSl9fXRoaXMudXBkYXRlU3R5bGVIaW50cyhPKSxrJiZ0aGlzLnVwZGF0ZVRyYW5zaXRpb25zKE8sTixTKX19O3ZhciBJST17fTtJSS5nZXRFbVNpemVJblBpeGVscz1mdW5jdGlvbigpe3ZhciB4PXRoaXMuY29udGFpbmVyQ3NzKCJmb250LXNpemUiKTtyZXR1cm4geCE9bnVsbD9wYXJzZUZsb2F0KHgpOjF9LElJLmNvbnRhaW5lckNzcz1mdW5jdGlvbih4KXt2YXIgbT10aGlzLl9wcml2YXRlLmN5LGs9bS5jb250YWluZXIoKSxTPW0ud2luZG93KCk7aWYoUyYmayYmUy5nZXRDb21wdXRlZFN0eWxlKXJldHVybiBTLmdldENvbXB1dGVkU3R5bGUoaykuZ2V0UHJvcGVydHlWYWx1ZSh4KX07dmFyIHhtPXt9O3htLmdldFJlbmRlcmVkU3R5bGU9ZnVuY3Rpb24oeCxtKXtyZXR1cm4gbT90aGlzLmdldFN0eWxlUHJvcGVydHlWYWx1ZSh4LG0sITApOnRoaXMuZ2V0UmF3U3R5bGUoeCwhMCl9LHhtLmdldFJhd1N0eWxlPWZ1bmN0aW9uKHgsbSl7dmFyIGs9dGhpcztpZih4PXhbMF0seCl7Zm9yKHZhciBTPXt9LE09MDtNPGsucHJvcGVydGllcy5sZW5ndGg7TSsrKXt2YXIgTz1rLnByb3BlcnRpZXNbTV0sTj1rLmdldFN0eWxlUHJvcGVydHlWYWx1ZSh4LE8ubmFtZSxtKTtOIT1udWxsJiYoU1tPLm5hbWVdPU4sU1tfdChPLm5hbWUpXT1OKX1yZXR1cm4gU319LHhtLmdldEluZGV4ZWRTdHlsZT1mdW5jdGlvbih4LG0sayxTKXt2YXIgTT14LnBzdHlsZShtKVtrXVtTXTtyZXR1cm4gTT8/eC5jeSgpLnN0eWxlKCkuZ2V0RGVmYXVsdFByb3BlcnR5KG0pW2tdWzBdfSx4bS5nZXRTdHlsZVByb3BlcnR5VmFsdWU9ZnVuY3Rpb24oeCxtLGspe3ZhciBTPXRoaXM7aWYoeD14WzBdLHgpe3ZhciBNPVMucHJvcGVydGllc1ttXTtNLmFsaWFzJiYoTT1NLnBvaW50c1RvKTt2YXIgTz1NLnR5cGUsTj14LnBzdHlsZShNLm5hbWUpO2lmKE4pe3ZhciAkPU4udmFsdWUsSD1OLnVuaXRzLHE9Ti5zdHJWYWx1ZTtpZihrJiZPLm51bWJlciYmJCE9bnVsbCYmWCgkKSl7dmFyIFk9eC5jeSgpLnpvb20oKSxaPWZ1bmN0aW9uKF9lKXtyZXR1cm4gX2UqWX0sY2U9ZnVuY3Rpb24oX2UsRWUpe3JldHVybiBaKF9lKStFZX0sdmU9bmUoJCksbWU9dmU/SC5ldmVyeShmdW5jdGlvbihMZSl7cmV0dXJuIExlIT1udWxsfSk6SCE9bnVsbDtyZXR1cm4gbWU/dmU/JC5tYXAoZnVuY3Rpb24oTGUsX2Upe3JldHVybiBjZShMZSxIW19lXSl9KS5qb2luKCIgIik6Y2UoJCxIKTp2ZT8kLm1hcChmdW5jdGlvbihMZSl7cmV0dXJuIGJlKExlKT9MZToiIitaKExlKX0pLmpvaW4oIiAiKToiIitaKCQpfWVsc2UgaWYocSE9bnVsbClyZXR1cm4gcX1yZXR1cm4gbnVsbH19LHhtLmdldEFuaW1hdGlvblN0YXJ0U3R5bGU9ZnVuY3Rpb24oeCxtKXtmb3IodmFyIGs9e30sUz0wO1M8bS5sZW5ndGg7UysrKXt2YXIgTT1tW1NdLE89TS5uYW1lLE49eC5wc3R5bGUoTyk7TiE9PXZvaWQgMCYmKHNlKE4pP049dGhpcy5wYXJzZShPLE4uc3RyVmFsdWUpOk49dGhpcy5wYXJzZShPLE4pKSxOJiYoa1tPXT1OKX1yZXR1cm4ga30seG0uZ2V0UHJvcHNMaXN0PWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXMsaz1bXSxTPXgsTT1tLnByb3BlcnRpZXM7aWYoUylmb3IodmFyIE89T2JqZWN0LmtleXMoUyksTj0wO048Ty5sZW5ndGg7TisrKXt2YXIgJD1PW05dLEg9U1skXSxxPU1bJF18fE1bZ24oJCldLFk9dGhpcy5wYXJzZShxLm5hbWUsSCk7WSYmay5wdXNoKFkpfXJldHVybiBrfSx4bS5nZXROb25EZWZhdWx0UHJvcGVydGllc0hhc2g9ZnVuY3Rpb24oeCxtLGspe3ZhciBTPWsuc2xpY2UoKSxNLE8sTiwkLEgscTtmb3IoSD0wO0g8bS5sZW5ndGg7SCsrKWlmKE09bVtIXSxPPXgucHN0eWxlKE0sITEpLE8hPW51bGwpaWYoTy5wZlZhbHVlIT1udWxsKVNbMF09emcoJCxTWzBdKSxTWzFdPWJtKCQsU1sxXSk7ZWxzZSBmb3IoTj1PLnN0clZhbHVlLHE9MDtxPE4ubGVuZ3RoO3ErKykkPU4uY2hhckNvZGVBdChxKSxTWzBdPXpnKCQsU1swXSksU1sxXT1ibSgkLFNbMV0pO3JldHVybiBTfSx4bS5nZXRQcm9wZXJ0aWVzSGFzaD14bS5nZXROb25EZWZhdWx0UHJvcGVydGllc0hhc2g7dmFyICRTPXt9OyRTLmFwcGVuZEZyb21Kc29uPWZ1bmN0aW9uKHgpe2Zvcih2YXIgbT10aGlzLGs9MDtrPHgubGVuZ3RoO2srKyl7dmFyIFM9eFtrXSxNPVMuc2VsZWN0b3IsTz1TLnN0eWxlfHxTLmNzcyxOPU9iamVjdC5rZXlzKE8pO20uc2VsZWN0b3IoTSk7Zm9yKHZhciAkPTA7JDxOLmxlbmd0aDskKyspe3ZhciBIPU5bJF0scT1PW0hdO20uY3NzKEgscSl9fXJldHVybiBtfSwkUy5mcm9tSnNvbj1mdW5jdGlvbih4KXt2YXIgbT10aGlzO3JldHVybiBtLnJlc2V0VG9EZWZhdWx0KCksbS5hcHBlbmRGcm9tSnNvbih4KSxtfSwkUy5qc29uPWZ1bmN0aW9uKCl7Zm9yKHZhciB4PVtdLG09dGhpcy5kZWZhdWx0TGVuZ3RoO208dGhpcy5sZW5ndGg7bSsrKXtmb3IodmFyIGs9dGhpc1ttXSxTPWsuc2VsZWN0b3IsTT1rLnByb3BlcnRpZXMsTz17fSxOPTA7TjxNLmxlbmd0aDtOKyspe3ZhciAkPU1bTl07T1skLm5hbWVdPSQuc3RyVmFsdWV9eC5wdXNoKHtzZWxlY3RvcjpTP1MudG9TdHJpbmcoKToiY29yZSIsc3R5bGU6T30pfXJldHVybiB4fTt2YXIgT0k9e307T0kuYXBwZW5kRnJvbVN0cmluZz1mdW5jdGlvbih4KXt2YXIgbT10aGlzLGs9dGhpcyxTPSIiK3gsTSxPLE47Uz1TLnJlcGxhY2UoL1svXVsqXShcc3wuKSs/WypdWy9dL2csIiIpO2Z1bmN0aW9uICQoKXtTLmxlbmd0aD5NLmxlbmd0aD9TPVMuc3Vic3RyKE0ubGVuZ3RoKTpTPSIifWZ1bmN0aW9uIEgoKXtPLmxlbmd0aD5OLmxlbmd0aD9PPU8uc3Vic3RyKE4ubGVuZ3RoKTpPPSIifWZvcig7Oyl7dmFyIHE9Uy5tYXRjaCgvXlxzKiQvKTtpZihxKWJyZWFrO3ZhciBZPVMubWF0Y2goL15ccyooKD86LnxccykrPylccypceygoPzoufFxzKSs/KVx9Lyk7aWYoIVkpe2h1KCJIYWx0aW5nIHN0eWxlc2hlZXQgcGFyc2luZzogU3RyaW5nIHN0eWxlc2hlZXQgY29udGFpbnMgbW9yZSB0byBwYXJzZSBidXQgbm8gc2VsZWN0b3IgYW5kIGJsb2NrIGZvdW5kIGluOiAiK1MpO2JyZWFrfU09WVswXTt2YXIgWj1ZWzFdO2lmKFohPT0iY29yZSIpe3ZhciBjZT1uZXcgZXkoWik7aWYoY2UuaW52YWxpZCl7aHUoIlNraXBwaW5nIHBhcnNpbmcgb2YgYmxvY2s6IEludmFsaWQgc2VsZWN0b3IgZm91bmQgaW4gc3RyaW5nIHN0eWxlc2hlZXQ6ICIrWiksJCgpO2NvbnRpbnVlfX12YXIgdmU9WVsyXSxtZT0hMTtPPXZlO2Zvcih2YXIgTGU9W107Oyl7dmFyIF9lPU8ubWF0Y2goL15ccyokLyk7aWYoX2UpYnJlYWs7dmFyIEVlPU8ubWF0Y2goL15ccyooLis/KVxzKjpccyooLis/KSg/OlxzKjt8XHMqJCkvKTtpZighRWUpe2h1KCJTa2lwcGluZyBwYXJzaW5nIG9mIGJsb2NrOiBJbnZhbGlkIGZvcm1hdHRpbmcgb2Ygc3R5bGUgcHJvcGVydHkgYW5kIHZhbHVlIGRlZmluaXRpb25zIGZvdW5kIGluOiIrdmUpLG1lPSEwO2JyZWFrfU49RWVbMF07dmFyIEJlPUVlWzFdLFJlPUVlWzJdLFZlPW0ucHJvcGVydGllc1tCZV07aWYoIVZlKXtodSgiU2tpcHBpbmcgcHJvcGVydHk6IEludmFsaWQgcHJvcGVydHkgbmFtZSBpbjogIitOKSxIKCk7Y29udGludWV9dmFyIGN0PWsucGFyc2UoQmUsUmUpO2lmKCFjdCl7aHUoIlNraXBwaW5nIHByb3BlcnR5OiBJbnZhbGlkIHByb3BlcnR5IGRlZmluaXRpb24gaW46ICIrTiksSCgpO2NvbnRpbnVlfUxlLnB1c2goe25hbWU6QmUsdmFsOlJlfSksSCgpfWlmKG1lKXskKCk7YnJlYWt9ay5zZWxlY3RvcihaKTtmb3IodmFyIHN0PTA7c3Q8TGUubGVuZ3RoO3N0Kyspe3ZhciBZZT1MZVtzdF07ay5jc3MoWWUubmFtZSxZZS52YWwpfSQoKX1yZXR1cm4ga30sT0kuZnJvbVN0cmluZz1mdW5jdGlvbih4KXt2YXIgbT10aGlzO3JldHVybiBtLnJlc2V0VG9EZWZhdWx0KCksbS5hcHBlbmRGcm9tU3RyaW5nKHgpLG19O3ZhciBVMD17fTsoZnVuY3Rpb24oKXt2YXIgeD1sbixtPVB0LGs9RHQsUz1rdCxNPU9uLE89ZnVuY3Rpb24oU3Ipe3JldHVybiJeIitTcisiXFxzKlxcKFxccyooW1xcd1xcLl0rKVxccypcXCkkIn0sTj1mdW5jdGlvbihTcil7dmFyIE5yPXgrInxcXHcrfCIrbSsifCIraysifCIrUysifCIrTTtyZXR1cm4iXiIrU3IrIlxccypcXCgoW1xcd1xcLl0rKVxccypcXCxcXHMqKCIreCsiKVxccypcXCxcXHMqKCIreCsiKVxccyosXFxzKigiK05yKyIpXFxzKlxcLFxccyooIitOcisiKVxcKSQifSwkPVtgXnVybFxccypcXChcXHMqWyciXT8oLis/KVsnIl0/XFxzKlxcKSRgLCJeKG5vbmUpJCIsIl4oLispJCJdO1UwLnR5cGVzPXt0aW1lOntudW1iZXI6ITAsbWluOjAsdW5pdHM6InN8bXMiLGltcGxpY2l0VW5pdHM6Im1zIn0scGVyY2VudDp7bnVtYmVyOiEwLG1pbjowLG1heDoxMDAsdW5pdHM6IiUiLGltcGxpY2l0VW5pdHM6IiUifSxwZXJjZW50YWdlczp7bnVtYmVyOiEwLG1pbjowLG1heDoxMDAsdW5pdHM6IiUiLGltcGxpY2l0VW5pdHM6IiUiLG11bHRpcGxlOiEwfSx6ZXJvT25lTnVtYmVyOntudW1iZXI6ITAsbWluOjAsbWF4OjEsdW5pdGxlc3M6ITB9LHplcm9PbmVOdW1iZXJzOntudW1iZXI6ITAsbWluOjAsbWF4OjEsdW5pdGxlc3M6ITAsbXVsdGlwbGU6ITB9LG5PbmVPbmVOdW1iZXI6e251bWJlcjohMCxtaW46LTEsbWF4OjEsdW5pdGxlc3M6ITB9LG5vbk5lZ2F0aXZlSW50OntudW1iZXI6ITAsbWluOjAsaW50ZWdlcjohMCx1bml0bGVzczohMH0sbm9uTmVnYXRpdmVOdW1iZXI6e251bWJlcjohMCxtaW46MCx1bml0bGVzczohMH0scG9zaXRpb246e2VudW1zOlsicGFyZW50Iiwib3JpZ2luIl19LG5vZGVTaXplOntudW1iZXI6ITAsbWluOjAsZW51bXM6WyJsYWJlbCJdfSxudW1iZXI6e251bWJlcjohMCx1bml0bGVzczohMH0sbnVtYmVyczp7bnVtYmVyOiEwLHVuaXRsZXNzOiEwLG11bHRpcGxlOiEwfSxwb3NpdGl2ZU51bWJlcjp7bnVtYmVyOiEwLHVuaXRsZXNzOiEwLG1pbjowLHN0cmljdE1pbjohMH0sc2l6ZTp7bnVtYmVyOiEwLG1pbjowfSxiaWRpcmVjdGlvbmFsU2l6ZTp7bnVtYmVyOiEwfSxiaWRpcmVjdGlvbmFsU2l6ZU1heWJlUGVyY2VudDp7bnVtYmVyOiEwLGFsbG93UGVyY2VudDohMH0sYmlkaXJlY3Rpb25hbFNpemVzOntudW1iZXI6ITAsbXVsdGlwbGU6ITB9LHNpemVNYXliZVBlcmNlbnQ6e251bWJlcjohMCxtaW46MCxhbGxvd1BlcmNlbnQ6ITB9LGF4aXNEaXJlY3Rpb246e2VudW1zOlsiaG9yaXpvbnRhbCIsImxlZnR3YXJkIiwicmlnaHR3YXJkIiwidmVydGljYWwiLCJ1cHdhcmQiLCJkb3dud2FyZCIsImF1dG8iXX0scGFkZGluZ1JlbGF0aXZlVG86e2VudW1zOlsid2lkdGgiLCJoZWlnaHQiLCJhdmVyYWdlIiwibWluIiwibWF4Il19LGJnV0g6e251bWJlcjohMCxtaW46MCxhbGxvd1BlcmNlbnQ6ITAsZW51bXM6WyJhdXRvIl0sbXVsdGlwbGU6ITB9LGJnUG9zOntudW1iZXI6ITAsYWxsb3dQZXJjZW50OiEwLG11bHRpcGxlOiEwfSxiZ1JlbGF0aXZlVG86e2VudW1zOlsiaW5uZXIiLCJpbmNsdWRlLXBhZGRpbmciXSxtdWx0aXBsZTohMH0sYmdSZXBlYXQ6e2VudW1zOlsicmVwZWF0IiwicmVwZWF0LXgiLCJyZXBlYXQteSIsIm5vLXJlcGVhdCJdLG11bHRpcGxlOiEwfSxiZ0ZpdDp7ZW51bXM6WyJub25lIiwiY29udGFpbiIsImNvdmVyIl0sbXVsdGlwbGU6ITB9LGJnQ3Jvc3NPcmlnaW46e2VudW1zOlsiYW5vbnltb3VzIiwidXNlLWNyZWRlbnRpYWxzIiwibnVsbCJdLG11bHRpcGxlOiEwfSxiZ0NsaXA6e2VudW1zOlsibm9uZSIsIm5vZGUiXSxtdWx0aXBsZTohMH0sYmdDb250YWlubWVudDp7ZW51bXM6WyJpbnNpZGUiLCJvdmVyIl0sbXVsdGlwbGU6ITB9LGNvbG9yOntjb2xvcjohMH0sY29sb3JzOntjb2xvcjohMCxtdWx0aXBsZTohMH0sZmlsbDp7ZW51bXM6WyJzb2xpZCIsImxpbmVhci1ncmFkaWVudCIsInJhZGlhbC1ncmFkaWVudCJdfSxib29sOntlbnVtczpbInllcyIsIm5vIl19LGJvb2xzOntlbnVtczpbInllcyIsIm5vIl0sbXVsdGlwbGU6ITB9LGxpbmVTdHlsZTp7ZW51bXM6WyJzb2xpZCIsImRvdHRlZCIsImRhc2hlZCJdfSxsaW5lQ2FwOntlbnVtczpbImJ1dHQiLCJyb3VuZCIsInNxdWFyZSJdfSxib3JkZXJTdHlsZTp7ZW51bXM6WyJzb2xpZCIsImRvdHRlZCIsImRhc2hlZCIsImRvdWJsZSJdfSxjdXJ2ZVN0eWxlOntlbnVtczpbImJlemllciIsInVuYnVuZGxlZC1iZXppZXIiLCJoYXlzdGFjayIsInNlZ21lbnRzIiwic3RyYWlnaHQiLCJzdHJhaWdodC10cmlhbmdsZSIsInRheGkiXX0sZm9udEZhbWlseTp7cmVnZXg6J14oW1xcdy0gXFwiXSsoPzpcXHMqLFxccypbXFx3LSBcXCJdKykqKSQnfSxmb250U3R5bGU6e2VudW1zOlsiaXRhbGljIiwibm9ybWFsIiwib2JsaXF1ZSJdfSxmb250V2VpZ2h0OntlbnVtczpbIm5vcm1hbCIsImJvbGQiLCJib2xkZXIiLCJsaWdodGVyIiwiMTAwIiwiMjAwIiwiMzAwIiwiNDAwIiwiNTAwIiwiNjAwIiwiODAwIiwiOTAwIiwxMDAsMjAwLDMwMCw0MDAsNTAwLDYwMCw3MDAsODAwLDkwMF19LHRleHREZWNvcmF0aW9uOntlbnVtczpbIm5vbmUiLCJ1bmRlcmxpbmUiLCJvdmVybGluZSIsImxpbmUtdGhyb3VnaCJdfSx0ZXh0VHJhbnNmb3JtOntlbnVtczpbIm5vbmUiLCJ1cHBlcmNhc2UiLCJsb3dlcmNhc2UiXX0sdGV4dFdyYXA6e2VudW1zOlsibm9uZSIsIndyYXAiLCJlbGxpcHNpcyJdfSx0ZXh0T3ZlcmZsb3dXcmFwOntlbnVtczpbIndoaXRlc3BhY2UiLCJhbnl3aGVyZSJdfSx0ZXh0QmFja2dyb3VuZFNoYXBlOntlbnVtczpbInJlY3RhbmdsZSIsInJvdW5kcmVjdGFuZ2xlIiwicm91bmQtcmVjdGFuZ2xlIl19LG5vZGVTaGFwZTp7ZW51bXM6WyJyZWN0YW5nbGUiLCJyb3VuZHJlY3RhbmdsZSIsInJvdW5kLXJlY3RhbmdsZSIsImN1dHJlY3RhbmdsZSIsImN1dC1yZWN0YW5nbGUiLCJib3R0b21yb3VuZHJlY3RhbmdsZSIsImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiLCJiYXJyZWwiLCJlbGxpcHNlIiwidHJpYW5nbGUiLCJyb3VuZC10cmlhbmdsZSIsInNxdWFyZSIsInBlbnRhZ29uIiwicm91bmQtcGVudGFnb24iLCJoZXhhZ29uIiwicm91bmQtaGV4YWdvbiIsImNvbmNhdmVoZXhhZ29uIiwiY29uY2F2ZS1oZXhhZ29uIiwiaGVwdGFnb24iLCJyb3VuZC1oZXB0YWdvbiIsIm9jdGFnb24iLCJyb3VuZC1vY3RhZ29uIiwidGFnIiwicm91bmQtdGFnIiwic3RhciIsImRpYW1vbmQiLCJyb3VuZC1kaWFtb25kIiwidmVlIiwicmhvbWJvaWQiLCJyaWdodC1yaG9tYm9pZCIsInBvbHlnb24iXX0sb3ZlcmxheVNoYXBlOntlbnVtczpbInJvdW5kcmVjdGFuZ2xlIiwicm91bmQtcmVjdGFuZ2xlIiwiZWxsaXBzZSJdfSxjb21wb3VuZEluY2x1ZGVMYWJlbHM6e2VudW1zOlsiaW5jbHVkZSIsImV4Y2x1ZGUiXX0sYXJyb3dTaGFwZTp7ZW51bXM6WyJ0ZWUiLCJ0cmlhbmdsZSIsInRyaWFuZ2xlLXRlZSIsImNpcmNsZS10cmlhbmdsZSIsInRyaWFuZ2xlLWNyb3NzIiwidHJpYW5nbGUtYmFja2N1cnZlIiwidmVlIiwic3F1YXJlIiwiY2lyY2xlIiwiZGlhbW9uZCIsImNoZXZyb24iLCJub25lIl19LGFycm93RmlsbDp7ZW51bXM6WyJmaWxsZWQiLCJob2xsb3ciXX0sYXJyb3dXaWR0aDp7bnVtYmVyOiEwLHVuaXRzOiIlfHB4fGVtIixpbXBsaWNpdFVuaXRzOiJweCIsZW51bXM6WyJtYXRjaC1saW5lIl19LGRpc3BsYXk6e2VudW1zOlsiZWxlbWVudCIsIm5vbmUiXX0sdmlzaWJpbGl0eTp7ZW51bXM6WyJoaWRkZW4iLCJ2aXNpYmxlIl19LHpDb21wb3VuZERlcHRoOntlbnVtczpbImJvdHRvbSIsIm9ycGhhbiIsImF1dG8iLCJ0b3AiXX0sekluZGV4Q29tcGFyZTp7ZW51bXM6WyJhdXRvIiwibWFudWFsIl19LHZhbGlnbjp7ZW51bXM6WyJ0b3AiLCJjZW50ZXIiLCJib3R0b20iXX0saGFsaWduOntlbnVtczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdfSxqdXN0aWZpY2F0aW9uOntlbnVtczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCIsImF1dG8iXX0sdGV4dDp7c3RyaW5nOiEwfSxkYXRhOnttYXBwaW5nOiEwLHJlZ2V4Ok8oImRhdGEiKX0sbGF5b3V0RGF0YTp7bWFwcGluZzohMCxyZWdleDpPKCJsYXlvdXREYXRhIil9LHNjcmF0Y2g6e21hcHBpbmc6ITAscmVnZXg6Tygic2NyYXRjaCIpfSxtYXBEYXRhOnttYXBwaW5nOiEwLHJlZ2V4Ok4oIm1hcERhdGEiKX0sbWFwTGF5b3V0RGF0YTp7bWFwcGluZzohMCxyZWdleDpOKCJtYXBMYXlvdXREYXRhIil9LG1hcFNjcmF0Y2g6e21hcHBpbmc6ITAscmVnZXg6TigibWFwU2NyYXRjaCIpfSxmbjp7bWFwcGluZzohMCxmbjohMH0sdXJsOntyZWdleGVzOiQsc2luZ2xlUmVnZXhNYXRjaFZhbHVlOiEwfSx1cmxzOntyZWdleGVzOiQsc2luZ2xlUmVnZXhNYXRjaFZhbHVlOiEwLG11bHRpcGxlOiEwfSxwcm9wTGlzdDp7cHJvcExpc3Q6ITB9LGFuZ2xlOntudW1iZXI6ITAsdW5pdHM6ImRlZ3xyYWQiLGltcGxpY2l0VW5pdHM6InJhZCJ9LHRleHRSb3RhdGlvbjp7bnVtYmVyOiEwLHVuaXRzOiJkZWd8cmFkIixpbXBsaWNpdFVuaXRzOiJyYWQiLGVudW1zOlsibm9uZSIsImF1dG9yb3RhdGUiXX0scG9seWdvblBvaW50TGlzdDp7bnVtYmVyOiEwLG11bHRpcGxlOiEwLGV2ZW5NdWx0aXBsZTohMCxtaW46LTEsbWF4OjEsdW5pdGxlc3M6ITB9LGVkZ2VEaXN0YW5jZXM6e2VudW1zOlsiaW50ZXJzZWN0aW9uIiwibm9kZS1wb3NpdGlvbiIsImVuZHBvaW50cyJdfSxlZGdlRW5kcG9pbnQ6e251bWJlcjohMCxtdWx0aXBsZTohMCx1bml0czoiJXxweHxlbXxkZWd8cmFkIixpbXBsaWNpdFVuaXRzOiJweCIsZW51bXM6WyJpbnNpZGUtdG8tbm9kZSIsIm91dHNpZGUtdG8tbm9kZSIsIm91dHNpZGUtdG8tbm9kZS1vci1sYWJlbCIsIm91dHNpZGUtdG8tbGluZSIsIm91dHNpZGUtdG8tbGluZS1vci1sYWJlbCJdLHNpbmdsZUVudW06ITAsdmFsaWRhdGU6ZnVuY3Rpb24oU3IsTnIpe3N3aXRjaChTci5sZW5ndGgpe2Nhc2UgMjpyZXR1cm4gTnJbMF0hPT0iZGVnIiYmTnJbMF0hPT0icmFkIiYmTnJbMV0hPT0iZGVnIiYmTnJbMV0hPT0icmFkIjtjYXNlIDE6cmV0dXJuIGJlKFNyWzBdKXx8TnJbMF09PT0iZGVnInx8TnJbMF09PT0icmFkIjtkZWZhdWx0OnJldHVybiExfX19LGVhc2luZzp7cmVnZXhlczpbIl4oc3ByaW5nKVxccypcXChcXHMqKCIreCsiKVxccyosXFxzKigiK3grIilcXHMqXFwpJCIsIl4oY3ViaWMtYmV6aWVyKVxccypcXChcXHMqKCIreCsiKVxccyosXFxzKigiK3grIilcXHMqLFxccyooIit4KyIpXFxzKixcXHMqKCIreCsiKVxccypcXCkkIl0sZW51bXM6WyJsaW5lYXIiLCJlYXNlIiwiZWFzZS1pbiIsImVhc2Utb3V0IiwiZWFzZS1pbi1vdXQiLCJlYXNlLWluLXNpbmUiLCJlYXNlLW91dC1zaW5lIiwiZWFzZS1pbi1vdXQtc2luZSIsImVhc2UtaW4tcXVhZCIsImVhc2Utb3V0LXF1YWQiLCJlYXNlLWluLW91dC1xdWFkIiwiZWFzZS1pbi1jdWJpYyIsImVhc2Utb3V0LWN1YmljIiwiZWFzZS1pbi1vdXQtY3ViaWMiLCJlYXNlLWluLXF1YXJ0IiwiZWFzZS1vdXQtcXVhcnQiLCJlYXNlLWluLW91dC1xdWFydCIsImVhc2UtaW4tcXVpbnQiLCJlYXNlLW91dC1xdWludCIsImVhc2UtaW4tb3V0LXF1aW50IiwiZWFzZS1pbi1leHBvIiwiZWFzZS1vdXQtZXhwbyIsImVhc2UtaW4tb3V0LWV4cG8iLCJlYXNlLWluLWNpcmMiLCJlYXNlLW91dC1jaXJjIiwiZWFzZS1pbi1vdXQtY2lyYyJdfSxncmFkaWVudERpcmVjdGlvbjp7ZW51bXM6WyJ0by1ib3R0b20iLCJ0by10b3AiLCJ0by1sZWZ0IiwidG8tcmlnaHQiLCJ0by1ib3R0b20tcmlnaHQiLCJ0by1ib3R0b20tbGVmdCIsInRvLXRvcC1yaWdodCIsInRvLXRvcC1sZWZ0IiwidG8tcmlnaHQtYm90dG9tIiwidG8tbGVmdC1ib3R0b20iLCJ0by1yaWdodC10b3AiLCJ0by1sZWZ0LXRvcCJdfSxib3VuZHNFeHBhbnNpb246e251bWJlcjohMCxtdWx0aXBsZTohMCxtaW46MCx2YWxpZGF0ZTpmdW5jdGlvbihTcil7dmFyIE5yPVNyLmxlbmd0aDtyZXR1cm4gTnI9PT0xfHxOcj09PTJ8fE5yPT09NH19fTt2YXIgSD17emVyb05vblplcm86ZnVuY3Rpb24oU3IsTnIpe3JldHVybihTcj09bnVsbHx8TnI9PW51bGwpJiZTciE9PU5yfHxTcj09MCYmTnIhPTA/ITA6U3IhPTAmJk5yPT0wfSxhbnk6ZnVuY3Rpb24oU3IsTnIpe3JldHVybiBTciE9TnJ9LGVtcHR5Tm9uRW1wdHk6ZnVuY3Rpb24oU3IsTnIpe3ZhciBTaT1TZShTcikseXM9U2UoTnIpO3JldHVybiBTaSYmIXlzfHwhU2kmJnlzfX0scT1VMC50eXBlcyxZPVt7bmFtZToibGFiZWwiLHR5cGU6cS50ZXh0LHRyaWdnZXJzQm91bmRzOkguYW55LHRyaWdnZXJzWk9yZGVyOkguZW1wdHlOb25FbXB0eX0se25hbWU6InRleHQtcm90YXRpb24iLHR5cGU6cS50ZXh0Um90YXRpb24sdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ0ZXh0LW1hcmdpbi14Iix0eXBlOnEuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ0ZXh0LW1hcmdpbi15Iix0eXBlOnEuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9XSxaPVt7bmFtZToic291cmNlLWxhYmVsIix0eXBlOnEudGV4dCx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6InNvdXJjZS10ZXh0LXJvdGF0aW9uIix0eXBlOnEudGV4dFJvdGF0aW9uLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToic291cmNlLXRleHQtbWFyZ2luLXgiLHR5cGU6cS5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6InNvdXJjZS10ZXh0LW1hcmdpbi15Iix0eXBlOnEuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJzb3VyY2UtdGV4dC1vZmZzZXQiLHR5cGU6cS5zaXplLHRyaWdnZXJzQm91bmRzOkguYW55fV0sY2U9W3tuYW1lOiJ0YXJnZXQtbGFiZWwiLHR5cGU6cS50ZXh0LHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGFyZ2V0LXRleHQtcm90YXRpb24iLHR5cGU6cS50ZXh0Um90YXRpb24sdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ0YXJnZXQtdGV4dC1tYXJnaW4teCIsdHlwZTpxLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGFyZ2V0LXRleHQtbWFyZ2luLXkiLHR5cGU6cS5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6InRhcmdldC10ZXh0LW9mZnNldCIsdHlwZTpxLnNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9XSx2ZT1be25hbWU6ImZvbnQtZmFtaWx5Iix0eXBlOnEuZm9udEZhbWlseSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6ImZvbnQtc3R5bGUiLHR5cGU6cS5mb250U3R5bGUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJmb250LXdlaWdodCIsdHlwZTpxLmZvbnRXZWlnaHQsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJmb250LXNpemUiLHR5cGU6cS5zaXplLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGV4dC10cmFuc2Zvcm0iLHR5cGU6cS50ZXh0VHJhbnNmb3JtLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGV4dC13cmFwIix0eXBlOnEudGV4dFdyYXAsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ0ZXh0LW92ZXJmbG93LXdyYXAiLHR5cGU6cS50ZXh0T3ZlcmZsb3dXcmFwLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGV4dC1tYXgtd2lkdGgiLHR5cGU6cS5zaXplLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGV4dC1vdXRsaW5lLXdpZHRoIix0eXBlOnEuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6ImxpbmUtaGVpZ2h0Iix0eXBlOnEucG9zaXRpdmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9XSxtZT1be25hbWU6InRleHQtdmFsaWduIix0eXBlOnEudmFsaWduLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGV4dC1oYWxpZ24iLHR5cGU6cS5oYWxpZ24sdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJjb2xvciIsdHlwZTpxLmNvbG9yfSx7bmFtZToidGV4dC1vdXRsaW5lLWNvbG9yIix0eXBlOnEuY29sb3J9LHtuYW1lOiJ0ZXh0LW91dGxpbmUtb3BhY2l0eSIsdHlwZTpxLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJ0ZXh0LWJhY2tncm91bmQtY29sb3IiLHR5cGU6cS5jb2xvcn0se25hbWU6InRleHQtYmFja2dyb3VuZC1vcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcn0se25hbWU6InRleHQtYmFja2dyb3VuZC1wYWRkaW5nIix0eXBlOnEuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6InRleHQtYm9yZGVyLW9wYWNpdHkiLHR5cGU6cS56ZXJvT25lTnVtYmVyfSx7bmFtZToidGV4dC1ib3JkZXItY29sb3IiLHR5cGU6cS5jb2xvcn0se25hbWU6InRleHQtYm9yZGVyLXdpZHRoIix0eXBlOnEuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6InRleHQtYm9yZGVyLXN0eWxlIix0eXBlOnEuYm9yZGVyU3R5bGUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ0ZXh0LWJhY2tncm91bmQtc2hhcGUiLHR5cGU6cS50ZXh0QmFja2dyb3VuZFNoYXBlLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGV4dC1qdXN0aWZpY2F0aW9uIix0eXBlOnEuanVzdGlmaWNhdGlvbn1dLExlPVt7bmFtZToiZXZlbnRzIix0eXBlOnEuYm9vbCx0cmlnZ2Vyc1pPcmRlcjpILmFueX0se25hbWU6InRleHQtZXZlbnRzIix0eXBlOnEuYm9vbCx0cmlnZ2Vyc1pPcmRlcjpILmFueX1dLF9lPVt7bmFtZToiZGlzcGxheSIsdHlwZTpxLmRpc3BsYXksdHJpZ2dlcnNaT3JkZXI6SC5hbnksdHJpZ2dlcnNCb3VuZHM6SC5hbnksdHJpZ2dlcnNCb3VuZHNPZkNvbm5lY3RlZEVkZ2VzOiEwfSx7bmFtZToidmlzaWJpbGl0eSIsdHlwZTpxLnZpc2liaWxpdHksdHJpZ2dlcnNaT3JkZXI6SC5hbnl9LHtuYW1lOiJvcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcix0cmlnZ2Vyc1pPcmRlcjpILnplcm9Ob25aZXJvfSx7bmFtZToidGV4dC1vcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcn0se25hbWU6Im1pbi16b29tZWQtZm9udC1zaXplIix0eXBlOnEuc2l6ZX0se25hbWU6InotY29tcG91bmQtZGVwdGgiLHR5cGU6cS56Q29tcG91bmREZXB0aCx0cmlnZ2Vyc1pPcmRlcjpILmFueX0se25hbWU6InotaW5kZXgtY29tcGFyZSIsdHlwZTpxLnpJbmRleENvbXBhcmUsdHJpZ2dlcnNaT3JkZXI6SC5hbnl9LHtuYW1lOiJ6LWluZGV4Iix0eXBlOnEubnVtYmVyLHRyaWdnZXJzWk9yZGVyOkguYW55fV0sRWU9W3tuYW1lOiJvdmVybGF5LXBhZGRpbmciLHR5cGU6cS5zaXplLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToib3ZlcmxheS1jb2xvciIsdHlwZTpxLmNvbG9yfSx7bmFtZToib3ZlcmxheS1vcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcix0cmlnZ2Vyc0JvdW5kczpILnplcm9Ob25aZXJvfSx7bmFtZToib3ZlcmxheS1zaGFwZSIsdHlwZTpxLm92ZXJsYXlTaGFwZSx0cmlnZ2Vyc0JvdW5kczpILmFueX1dLEJlPVt7bmFtZToidW5kZXJsYXktcGFkZGluZyIsdHlwZTpxLnNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ1bmRlcmxheS1jb2xvciIsdHlwZTpxLmNvbG9yfSx7bmFtZToidW5kZXJsYXktb3BhY2l0eSIsdHlwZTpxLnplcm9PbmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6SC56ZXJvTm9uWmVyb30se25hbWU6InVuZGVybGF5LXNoYXBlIix0eXBlOnEub3ZlcmxheVNoYXBlLHRyaWdnZXJzQm91bmRzOkguYW55fV0sUmU9W3tuYW1lOiJ0cmFuc2l0aW9uLXByb3BlcnR5Iix0eXBlOnEucHJvcExpc3R9LHtuYW1lOiJ0cmFuc2l0aW9uLWR1cmF0aW9uIix0eXBlOnEudGltZX0se25hbWU6InRyYW5zaXRpb24tZGVsYXkiLHR5cGU6cS50aW1lfSx7bmFtZToidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iLHR5cGU6cS5lYXNpbmd9XSxWZT1mdW5jdGlvbihTcixOcil7cmV0dXJuIE5yLnZhbHVlPT09ImxhYmVsIj8tU3IucG9vbEluZGV4KCk6TnIucGZWYWx1ZX0sY3Q9W3tuYW1lOiJoZWlnaHQiLHR5cGU6cS5ub2RlU2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueSxoYXNoT3ZlcnJpZGU6VmV9LHtuYW1lOiJ3aWR0aCIsdHlwZTpxLm5vZGVTaXplLHRyaWdnZXJzQm91bmRzOkguYW55LGhhc2hPdmVycmlkZTpWZX0se25hbWU6InNoYXBlIix0eXBlOnEubm9kZVNoYXBlLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToic2hhcGUtcG9seWdvbi1wb2ludHMiLHR5cGU6cS5wb2x5Z29uUG9pbnRMaXN0LHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToiYmFja2dyb3VuZC1jb2xvciIsdHlwZTpxLmNvbG9yfSx7bmFtZToiYmFja2dyb3VuZC1maWxsIix0eXBlOnEuZmlsbH0se25hbWU6ImJhY2tncm91bmQtb3BhY2l0eSIsdHlwZTpxLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJiYWNrZ3JvdW5kLWJsYWNrZW4iLHR5cGU6cS5uT25lT25lTnVtYmVyfSx7bmFtZToiYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLWNvbG9ycyIsdHlwZTpxLmNvbG9yc30se25hbWU6ImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiLHR5cGU6cS5wZXJjZW50YWdlc30se25hbWU6ImJhY2tncm91bmQtZ3JhZGllbnQtZGlyZWN0aW9uIix0eXBlOnEuZ3JhZGllbnREaXJlY3Rpb259LHtuYW1lOiJwYWRkaW5nIix0eXBlOnEuc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6InBhZGRpbmctcmVsYXRpdmUtdG8iLHR5cGU6cS5wYWRkaW5nUmVsYXRpdmVUbyx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6ImJvdW5kcy1leHBhbnNpb24iLHR5cGU6cS5ib3VuZHNFeHBhbnNpb24sdHJpZ2dlcnNCb3VuZHM6SC5hbnl9XSxzdD1be25hbWU6ImJvcmRlci1jb2xvciIsdHlwZTpxLmNvbG9yfSx7bmFtZToiYm9yZGVyLW9wYWNpdHkiLHR5cGU6cS56ZXJvT25lTnVtYmVyfSx7bmFtZToiYm9yZGVyLXdpZHRoIix0eXBlOnEuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6ImJvcmRlci1zdHlsZSIsdHlwZTpxLmJvcmRlclN0eWxlfV0sWWU9W3tuYW1lOiJvdXRsaW5lLWNvbG9yIix0eXBlOnEuY29sb3J9LHtuYW1lOiJvdXRsaW5lLW9wYWNpdHkiLHR5cGU6cS56ZXJvT25lTnVtYmVyfSx7bmFtZToib3V0bGluZS13aWR0aCIsdHlwZTpxLnNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJvdXRsaW5lLXN0eWxlIix0eXBlOnEuYm9yZGVyU3R5bGV9LHtuYW1lOiJvdXRsaW5lLW9mZnNldCIsdHlwZTpxLnNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9XSxtdD1be25hbWU6ImJhY2tncm91bmQtaW1hZ2UiLHR5cGU6cS51cmxzfSx7bmFtZToiYmFja2dyb3VuZC1pbWFnZS1jcm9zc29yaWdpbiIsdHlwZTpxLmJnQ3Jvc3NPcmlnaW59LHtuYW1lOiJiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHkiLHR5cGU6cS56ZXJvT25lTnVtYmVyc30se25hbWU6ImJhY2tncm91bmQtaW1hZ2UtY29udGFpbm1lbnQiLHR5cGU6cS5iZ0NvbnRhaW5tZW50fSx7bmFtZToiYmFja2dyb3VuZC1pbWFnZS1zbW9vdGhpbmciLHR5cGU6cS5ib29sc30se25hbWU6ImJhY2tncm91bmQtcG9zaXRpb24teCIsdHlwZTpxLmJnUG9zfSx7bmFtZToiYmFja2dyb3VuZC1wb3NpdGlvbi15Iix0eXBlOnEuYmdQb3N9LHtuYW1lOiJiYWNrZ3JvdW5kLXdpZHRoLXJlbGF0aXZlLXRvIix0eXBlOnEuYmdSZWxhdGl2ZVRvfSx7bmFtZToiYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG8iLHR5cGU6cS5iZ1JlbGF0aXZlVG99LHtuYW1lOiJiYWNrZ3JvdW5kLXJlcGVhdCIsdHlwZTpxLmJnUmVwZWF0fSx7bmFtZToiYmFja2dyb3VuZC1maXQiLHR5cGU6cS5iZ0ZpdH0se25hbWU6ImJhY2tncm91bmQtY2xpcCIsdHlwZTpxLmJnQ2xpcH0se25hbWU6ImJhY2tncm91bmQtd2lkdGgiLHR5cGU6cS5iZ1dIfSx7bmFtZToiYmFja2dyb3VuZC1oZWlnaHQiLHR5cGU6cS5iZ1dIfSx7bmFtZToiYmFja2dyb3VuZC1vZmZzZXQteCIsdHlwZTpxLmJnUG9zfSx7bmFtZToiYmFja2dyb3VuZC1vZmZzZXQteSIsdHlwZTpxLmJnUG9zfV0sSmU9W3tuYW1lOiJwb3NpdGlvbiIsdHlwZTpxLnBvc2l0aW9uLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToiY29tcG91bmQtc2l6aW5nLXdydC1sYWJlbHMiLHR5cGU6cS5jb21wb3VuZEluY2x1ZGVMYWJlbHMsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJtaW4td2lkdGgiLHR5cGU6cS5zaXplLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToibWluLXdpZHRoLWJpYXMtbGVmdCIsdHlwZTpxLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJtaW4td2lkdGgtYmlhcy1yaWdodCIsdHlwZTpxLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJtaW4taGVpZ2h0Iix0eXBlOnEuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6Im1pbi1oZWlnaHQtYmlhcy10b3AiLHR5cGU6cS5zaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToibWluLWhlaWdodC1iaWFzLWJvdHRvbSIsdHlwZTpxLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9XSxMdD1be25hbWU6ImxpbmUtc3R5bGUiLHR5cGU6cS5saW5lU3R5bGV9LHtuYW1lOiJsaW5lLWNvbG9yIix0eXBlOnEuY29sb3J9LHtuYW1lOiJsaW5lLWZpbGwiLHR5cGU6cS5maWxsfSx7bmFtZToibGluZS1jYXAiLHR5cGU6cS5saW5lQ2FwfSx7bmFtZToibGluZS1vcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcn0se25hbWU6ImxpbmUtZGFzaC1wYXR0ZXJuIix0eXBlOnEubnVtYmVyc30se25hbWU6ImxpbmUtZGFzaC1vZmZzZXQiLHR5cGU6cS5udW1iZXJ9LHtuYW1lOiJsaW5lLWdyYWRpZW50LXN0b3AtY29sb3JzIix0eXBlOnEuY29sb3JzfSx7bmFtZToibGluZS1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyIsdHlwZTpxLnBlcmNlbnRhZ2VzfSx7bmFtZToiY3VydmUtc3R5bGUiLHR5cGU6cS5jdXJ2ZVN0eWxlLHRyaWdnZXJzQm91bmRzOkguYW55LHRyaWdnZXJzQm91bmRzT2ZQYXJhbGxlbEJlemllcnM6ITB9LHtuYW1lOiJoYXlzdGFjay1yYWRpdXMiLHR5cGU6cS56ZXJvT25lTnVtYmVyLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToic291cmNlLWVuZHBvaW50Iix0eXBlOnEuZWRnZUVuZHBvaW50LHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGFyZ2V0LWVuZHBvaW50Iix0eXBlOnEuZWRnZUVuZHBvaW50LHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToiY29udHJvbC1wb2ludC1zdGVwLXNpemUiLHR5cGU6cS5zaXplLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToiY29udHJvbC1wb2ludC1kaXN0YW5jZXMiLHR5cGU6cS5iaWRpcmVjdGlvbmFsU2l6ZXMsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJjb250cm9sLXBvaW50LXdlaWdodHMiLHR5cGU6cS5udW1iZXJzLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToic2VnbWVudC1kaXN0YW5jZXMiLHR5cGU6cS5iaWRpcmVjdGlvbmFsU2l6ZXMsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJzZWdtZW50LXdlaWdodHMiLHR5cGU6cS5udW1iZXJzLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGF4aS10dXJuIix0eXBlOnEuYmlkaXJlY3Rpb25hbFNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ0YXhpLXR1cm4tbWluLWRpc3RhbmNlIix0eXBlOnEuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6InRheGktZGlyZWN0aW9uIix0eXBlOnEuYXhpc0RpcmVjdGlvbix0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6ImVkZ2UtZGlzdGFuY2VzIix0eXBlOnEuZWRnZURpc3RhbmNlcyx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6ImFycm93LXNjYWxlIix0eXBlOnEucG9zaXRpdmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJsb29wLWRpcmVjdGlvbiIsdHlwZTpxLmFuZ2xlLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToibG9vcC1zd2VlcCIsdHlwZTpxLmFuZ2xlLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToic291cmNlLWRpc3RhbmNlLWZyb20tbm9kZSIsdHlwZTpxLnNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlIix0eXBlOnEuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX1dLE10PVt7bmFtZToiZ2hvc3QiLHR5cGU6cS5ib29sLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToiZ2hvc3Qtb2Zmc2V0LXgiLHR5cGU6cS5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6Imdob3N0LW9mZnNldC15Iix0eXBlOnEuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJnaG9zdC1vcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcn1dLHV0PVt7bmFtZToic2VsZWN0aW9uLWJveC1jb2xvciIsdHlwZTpxLmNvbG9yfSx7bmFtZToic2VsZWN0aW9uLWJveC1vcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcn0se25hbWU6InNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIix0eXBlOnEuY29sb3J9LHtuYW1lOiJzZWxlY3Rpb24tYm94LWJvcmRlci13aWR0aCIsdHlwZTpxLnNpemV9LHtuYW1lOiJhY3RpdmUtYmctY29sb3IiLHR5cGU6cS5jb2xvcn0se25hbWU6ImFjdGl2ZS1iZy1vcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcn0se25hbWU6ImFjdGl2ZS1iZy1zaXplIix0eXBlOnEuc2l6ZX0se25hbWU6Im91dHNpZGUtdGV4dHVyZS1iZy1jb2xvciIsdHlwZTpxLmNvbG9yfSx7bmFtZToib3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHkiLHR5cGU6cS56ZXJvT25lTnVtYmVyfV0sV3Q9W107VTAucGllQmFja2dyb3VuZE49MTYsV3QucHVzaCh7bmFtZToicGllLXNpemUiLHR5cGU6cS5zaXplTWF5YmVQZXJjZW50fSk7Zm9yKHZhciBUdD0xO1R0PD1VMC5waWVCYWNrZ3JvdW5kTjtUdCsrKVd0LnB1c2goe25hbWU6InBpZS0iK1R0KyItYmFja2dyb3VuZC1jb2xvciIsdHlwZTpxLmNvbG9yfSksV3QucHVzaCh7bmFtZToicGllLSIrVHQrIi1iYWNrZ3JvdW5kLXNpemUiLHR5cGU6cS5wZXJjZW50fSksV3QucHVzaCh7bmFtZToicGllLSIrVHQrIi1iYWNrZ3JvdW5kLW9wYWNpdHkiLHR5cGU6cS56ZXJvT25lTnVtYmVyfSk7dmFyIF9uPVtdLGhuPVUwLmFycm93UHJlZml4ZXM9WyJzb3VyY2UiLCJtaWQtc291cmNlIiwidGFyZ2V0IiwibWlkLXRhcmdldCJdO1t7bmFtZToiYXJyb3ctc2hhcGUiLHR5cGU6cS5hcnJvd1NoYXBlLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToiYXJyb3ctY29sb3IiLHR5cGU6cS5jb2xvcn0se25hbWU6ImFycm93LWZpbGwiLHR5cGU6cS5hcnJvd0ZpbGx9LHtuYW1lOiJhcnJvdy13aWR0aCIsdHlwZTpxLmFycm93V2lkdGh9XS5mb3JFYWNoKGZ1bmN0aW9uKGJyKXtobi5mb3JFYWNoKGZ1bmN0aW9uKFNyKXt2YXIgTnI9U3IrIi0iK2JyLm5hbWUsU2k9YnIudHlwZSx5cz1ici50cmlnZ2Vyc0JvdW5kcztfbi5wdXNoKHtuYW1lOk5yLHR5cGU6U2ksdHJpZ2dlcnNCb3VuZHM6eXN9KX0pfSx7fSk7dmFyIFl0PVUwLnByb3BlcnRpZXM9W10uY29uY2F0KExlLFJlLF9lLEVlLEJlLE10LG1lLHZlLFksWixjZSxjdCxzdCxZZSxtdCxXdCxKZSxMdCxfbix1dCksRG49VTAucHJvcGVydHlHcm91cHM9e2JlaGF2aW9yOkxlLHRyYW5zaXRpb246UmUsdmlzaWJpbGl0eTpfZSxvdmVybGF5OkVlLHVuZGVybGF5OkJlLGdob3N0Ok10LGNvbW1vbkxhYmVsOm1lLGxhYmVsRGltZW5zaW9uczp2ZSxtYWluTGFiZWw6WSxzb3VyY2VMYWJlbDpaLHRhcmdldExhYmVsOmNlLG5vZGVCb2R5OmN0LG5vZGVCb3JkZXI6c3Qsbm9kZU91dGxpbmU6WWUsYmFja2dyb3VuZEltYWdlOm10LHBpZTpXdCxjb21wb3VuZDpKZSxlZGdlTGluZTpMdCxlZGdlQXJyb3c6X24sY29yZTp1dH0saXI9VTAucHJvcGVydHlHcm91cE5hbWVzPXt9LHZyPVUwLnByb3BlcnR5R3JvdXBLZXlzPU9iamVjdC5rZXlzKERuKTt2ci5mb3JFYWNoKGZ1bmN0aW9uKGJyKXtpclticl09RG5bYnJdLm1hcChmdW5jdGlvbihTcil7cmV0dXJuIFNyLm5hbWV9KSxEblticl0uZm9yRWFjaChmdW5jdGlvbihTcil7cmV0dXJuIFNyLmdyb3VwS2V5PWJyfSl9KTt2YXIgTm49VTAuYWxpYXNlcz1be25hbWU6ImNvbnRlbnQiLHBvaW50c1RvOiJsYWJlbCJ9LHtuYW1lOiJjb250cm9sLXBvaW50LWRpc3RhbmNlIixwb2ludHNUbzoiY29udHJvbC1wb2ludC1kaXN0YW5jZXMifSx7bmFtZToiY29udHJvbC1wb2ludC13ZWlnaHQiLHBvaW50c1RvOiJjb250cm9sLXBvaW50LXdlaWdodHMifSx7bmFtZToiZWRnZS10ZXh0LXJvdGF0aW9uIixwb2ludHNUbzoidGV4dC1yb3RhdGlvbiJ9LHtuYW1lOiJwYWRkaW5nLWxlZnQiLHBvaW50c1RvOiJwYWRkaW5nIn0se25hbWU6InBhZGRpbmctcmlnaHQiLHBvaW50c1RvOiJwYWRkaW5nIn0se25hbWU6InBhZGRpbmctdG9wIixwb2ludHNUbzoicGFkZGluZyJ9LHtuYW1lOiJwYWRkaW5nLWJvdHRvbSIscG9pbnRzVG86InBhZGRpbmcifV07VTAucHJvcGVydHlOYW1lcz1ZdC5tYXAoZnVuY3Rpb24oYnIpe3JldHVybiBici5uYW1lfSk7Zm9yKHZhciBwcj0wO3ByPFl0Lmxlbmd0aDtwcisrKXt2YXIgRXI9WXRbcHJdO1l0W0VyLm5hbWVdPUVyfWZvcih2YXIgTXI9MDtNcjxObi5sZW5ndGg7TXIrKyl7dmFyIENyPU5uW01yXSxPcj1ZdFtDci5wb2ludHNUb10sV249e25hbWU6Q3IubmFtZSxhbGlhczohMCxwb2ludHNUbzpPcn07WXQucHVzaChXbiksWXRbQ3IubmFtZV09V259fSkoKSxVMC5nZXREZWZhdWx0UHJvcGVydHk9ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoKVt4XX0sVTAuZ2V0RGVmYXVsdFByb3BlcnRpZXM9ZnVuY3Rpb24oKXt2YXIgeD10aGlzLl9wcml2YXRlO2lmKHguZGVmYXVsdFByb3BlcnRpZXMhPW51bGwpcmV0dXJuIHguZGVmYXVsdFByb3BlcnRpZXM7Zm9yKHZhciBtPXl0KHsic2VsZWN0aW9uLWJveC1jb2xvciI6IiNkZGQiLCJzZWxlY3Rpb24tYm94LW9wYWNpdHkiOi42NSwic2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3IiOiIjYWFhIiwic2VsZWN0aW9uLWJveC1ib3JkZXItd2lkdGgiOjEsImFjdGl2ZS1iZy1jb2xvciI6ImJsYWNrIiwiYWN0aXZlLWJnLW9wYWNpdHkiOi4xNSwiYWN0aXZlLWJnLXNpemUiOjMwLCJvdXRzaWRlLXRleHR1cmUtYmctY29sb3IiOiIjMDAwIiwib3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHkiOi4xMjUsZXZlbnRzOiJ5ZXMiLCJ0ZXh0LWV2ZW50cyI6Im5vIiwidGV4dC12YWxpZ24iOiJ0b3AiLCJ0ZXh0LWhhbGlnbiI6ImNlbnRlciIsInRleHQtanVzdGlmaWNhdGlvbiI6ImF1dG8iLCJsaW5lLWhlaWdodCI6MSxjb2xvcjoiIzAwMCIsInRleHQtb3V0bGluZS1jb2xvciI6IiMwMDAiLCJ0ZXh0LW91dGxpbmUtd2lkdGgiOjAsInRleHQtb3V0bGluZS1vcGFjaXR5IjoxLCJ0ZXh0LW9wYWNpdHkiOjEsInRleHQtZGVjb3JhdGlvbiI6Im5vbmUiLCJ0ZXh0LXRyYW5zZm9ybSI6Im5vbmUiLCJ0ZXh0LXdyYXAiOiJub25lIiwidGV4dC1vdmVyZmxvdy13cmFwIjoid2hpdGVzcGFjZSIsInRleHQtbWF4LXdpZHRoIjo5OTk5LCJ0ZXh0LWJhY2tncm91bmQtY29sb3IiOiIjMDAwIiwidGV4dC1iYWNrZ3JvdW5kLW9wYWNpdHkiOjAsInRleHQtYmFja2dyb3VuZC1zaGFwZSI6InJlY3RhbmdsZSIsInRleHQtYmFja2dyb3VuZC1wYWRkaW5nIjowLCJ0ZXh0LWJvcmRlci1vcGFjaXR5IjowLCJ0ZXh0LWJvcmRlci13aWR0aCI6MCwidGV4dC1ib3JkZXItc3R5bGUiOiJzb2xpZCIsInRleHQtYm9yZGVyLWNvbG9yIjoiIzAwMCIsImZvbnQtZmFtaWx5IjoiSGVsdmV0aWNhIE5ldWUsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIsImZvbnQtc3R5bGUiOiJub3JtYWwiLCJmb250LXdlaWdodCI6Im5vcm1hbCIsImZvbnQtc2l6ZSI6MTYsIm1pbi16b29tZWQtZm9udC1zaXplIjowLCJ0ZXh0LXJvdGF0aW9uIjoibm9uZSIsInNvdXJjZS10ZXh0LXJvdGF0aW9uIjoibm9uZSIsInRhcmdldC10ZXh0LXJvdGF0aW9uIjoibm9uZSIsdmlzaWJpbGl0eToidmlzaWJsZSIsZGlzcGxheToiZWxlbWVudCIsb3BhY2l0eToxLCJ6LWNvbXBvdW5kLWRlcHRoIjoiYXV0byIsInotaW5kZXgtY29tcGFyZSI6ImF1dG8iLCJ6LWluZGV4IjowLGxhYmVsOiIiLCJ0ZXh0LW1hcmdpbi14IjowLCJ0ZXh0LW1hcmdpbi15IjowLCJzb3VyY2UtbGFiZWwiOiIiLCJzb3VyY2UtdGV4dC1vZmZzZXQiOjAsInNvdXJjZS10ZXh0LW1hcmdpbi14IjowLCJzb3VyY2UtdGV4dC1tYXJnaW4teSI6MCwidGFyZ2V0LWxhYmVsIjoiIiwidGFyZ2V0LXRleHQtb2Zmc2V0IjowLCJ0YXJnZXQtdGV4dC1tYXJnaW4teCI6MCwidGFyZ2V0LXRleHQtbWFyZ2luLXkiOjAsIm92ZXJsYXktb3BhY2l0eSI6MCwib3ZlcmxheS1jb2xvciI6IiMwMDAiLCJvdmVybGF5LXBhZGRpbmciOjEwLCJvdmVybGF5LXNoYXBlIjoicm91bmQtcmVjdGFuZ2xlIiwidW5kZXJsYXktb3BhY2l0eSI6MCwidW5kZXJsYXktY29sb3IiOiIjMDAwIiwidW5kZXJsYXktcGFkZGluZyI6MTAsInVuZGVybGF5LXNoYXBlIjoicm91bmQtcmVjdGFuZ2xlIiwidHJhbnNpdGlvbi1wcm9wZXJ0eSI6Im5vbmUiLCJ0cmFuc2l0aW9uLWR1cmF0aW9uIjowLCJ0cmFuc2l0aW9uLWRlbGF5IjowLCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiI6ImxpbmVhciIsImJhY2tncm91bmQtYmxhY2tlbiI6MCwiYmFja2dyb3VuZC1jb2xvciI6IiM5OTkiLCJiYWNrZ3JvdW5kLWZpbGwiOiJzb2xpZCIsImJhY2tncm91bmQtb3BhY2l0eSI6MSwiYmFja2dyb3VuZC1pbWFnZSI6Im5vbmUiLCJiYWNrZ3JvdW5kLWltYWdlLWNyb3Nzb3JpZ2luIjoiYW5vbnltb3VzIiwiYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5IjoxLCJiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50IjoiaW5zaWRlIiwiYmFja2dyb3VuZC1pbWFnZS1zbW9vdGhpbmciOiJ5ZXMiLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXgiOiI1MCUiLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiOiI1MCUiLCJiYWNrZ3JvdW5kLW9mZnNldC14IjowLCJiYWNrZ3JvdW5kLW9mZnNldC15IjowLCJiYWNrZ3JvdW5kLXdpZHRoLXJlbGF0aXZlLXRvIjoiaW5jbHVkZS1wYWRkaW5nIiwiYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG8iOiJpbmNsdWRlLXBhZGRpbmciLCJiYWNrZ3JvdW5kLXJlcGVhdCI6Im5vLXJlcGVhdCIsImJhY2tncm91bmQtZml0Ijoibm9uZSIsImJhY2tncm91bmQtY2xpcCI6Im5vZGUiLCJiYWNrZ3JvdW5kLXdpZHRoIjoiYXV0byIsImJhY2tncm91bmQtaGVpZ2h0IjoiYXV0byIsImJvcmRlci1jb2xvciI6IiMwMDAiLCJib3JkZXItb3BhY2l0eSI6MSwiYm9yZGVyLXdpZHRoIjowLCJib3JkZXItc3R5bGUiOiJzb2xpZCIsIm91dGxpbmUtY29sb3IiOiIjOTk5Iiwib3V0bGluZS1vcGFjaXR5IjoxLCJvdXRsaW5lLXdpZHRoIjowLCJvdXRsaW5lLW9mZnNldCI6MCwib3V0bGluZS1zdHlsZSI6InNvbGlkIixoZWlnaHQ6MzAsd2lkdGg6MzAsc2hhcGU6ImVsbGlwc2UiLCJzaGFwZS1wb2x5Z29uLXBvaW50cyI6Ii0xLCAtMSwgICAxLCAtMSwgICAxLCAxLCAgIC0xLCAxIiwiYm91bmRzLWV4cGFuc2lvbiI6MCwiYmFja2dyb3VuZC1ncmFkaWVudC1kaXJlY3Rpb24iOiJ0by1ib3R0b20iLCJiYWNrZ3JvdW5kLWdyYWRpZW50LXN0b3AtY29sb3JzIjoiIzk5OSIsImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiOiIwJSIsZ2hvc3Q6Im5vIiwiZ2hvc3Qtb2Zmc2V0LXkiOjAsImdob3N0LW9mZnNldC14IjowLCJnaG9zdC1vcGFjaXR5IjowLHBhZGRpbmc6MCwicGFkZGluZy1yZWxhdGl2ZS10byI6IndpZHRoIixwb3NpdGlvbjoib3JpZ2luIiwiY29tcG91bmQtc2l6aW5nLXdydC1sYWJlbHMiOiJpbmNsdWRlIiwibWluLXdpZHRoIjowLCJtaW4td2lkdGgtYmlhcy1sZWZ0IjowLCJtaW4td2lkdGgtYmlhcy1yaWdodCI6MCwibWluLWhlaWdodCI6MCwibWluLWhlaWdodC1iaWFzLXRvcCI6MCwibWluLWhlaWdodC1iaWFzLWJvdHRvbSI6MH0seyJwaWUtc2l6ZSI6IjEwMCUifSxbe25hbWU6InBpZS17e2l9fS1iYWNrZ3JvdW5kLWNvbG9yIix2YWx1ZToiYmxhY2sifSx7bmFtZToicGllLXt7aX19LWJhY2tncm91bmQtc2l6ZSIsdmFsdWU6IjAlIn0se25hbWU6InBpZS17e2l9fS1iYWNrZ3JvdW5kLW9wYWNpdHkiLHZhbHVlOjF9XS5yZWR1Y2UoZnVuY3Rpb24oSCxxKXtmb3IodmFyIFk9MTtZPD1VMC5waWVCYWNrZ3JvdW5kTjtZKyspe3ZhciBaPXEubmFtZS5yZXBsYWNlKCJ7e2l9fSIsWSksY2U9cS52YWx1ZTtIW1pdPWNlfXJldHVybiBIfSx7fSkseyJsaW5lLXN0eWxlIjoic29saWQiLCJsaW5lLWNvbG9yIjoiIzk5OSIsImxpbmUtZmlsbCI6InNvbGlkIiwibGluZS1jYXAiOiJidXR0IiwibGluZS1vcGFjaXR5IjoxLCJsaW5lLWdyYWRpZW50LXN0b3AtY29sb3JzIjoiIzk5OSIsImxpbmUtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiOiIwJSIsImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIjo0MCwiY29udHJvbC1wb2ludC13ZWlnaHRzIjouNSwic2VnbWVudC13ZWlnaHRzIjouNSwic2VnbWVudC1kaXN0YW5jZXMiOjIwLCJ0YXhpLXR1cm4iOiI1MCUiLCJ0YXhpLXR1cm4tbWluLWRpc3RhbmNlIjoxMCwidGF4aS1kaXJlY3Rpb24iOiJhdXRvIiwiZWRnZS1kaXN0YW5jZXMiOiJpbnRlcnNlY3Rpb24iLCJjdXJ2ZS1zdHlsZSI6ImhheXN0YWNrIiwiaGF5c3RhY2stcmFkaXVzIjowLCJhcnJvdy1zY2FsZSI6MSwibG9vcC1kaXJlY3Rpb24iOiItNDVkZWciLCJsb29wLXN3ZWVwIjoiLTkwZGVnIiwic291cmNlLWRpc3RhbmNlLWZyb20tbm9kZSI6MCwidGFyZ2V0LWRpc3RhbmNlLWZyb20tbm9kZSI6MCwic291cmNlLWVuZHBvaW50Ijoib3V0c2lkZS10by1ub2RlIiwidGFyZ2V0LWVuZHBvaW50Ijoib3V0c2lkZS10by1ub2RlIiwibGluZS1kYXNoLXBhdHRlcm4iOls2LDNdLCJsaW5lLWRhc2gtb2Zmc2V0IjowfSxbe25hbWU6ImFycm93LXNoYXBlIix2YWx1ZToibm9uZSJ9LHtuYW1lOiJhcnJvdy1jb2xvciIsdmFsdWU6IiM5OTkifSx7bmFtZToiYXJyb3ctZmlsbCIsdmFsdWU6ImZpbGxlZCJ9LHtuYW1lOiJhcnJvdy13aWR0aCIsdmFsdWU6MX1dLnJlZHVjZShmdW5jdGlvbihILHEpe3JldHVybiBVMC5hcnJvd1ByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24oWSl7dmFyIFo9WSsiLSIrcS5uYW1lLGNlPXEudmFsdWU7SFtaXT1jZX0pLEh9LHt9KSksaz17fSxTPTA7Uzx0aGlzLnByb3BlcnRpZXMubGVuZ3RoO1MrKyl7dmFyIE09dGhpcy5wcm9wZXJ0aWVzW1NdO2lmKCFNLnBvaW50c1RvKXt2YXIgTz1NLm5hbWUsTj1tW09dLCQ9dGhpcy5wYXJzZShPLE4pO2tbT109JH19cmV0dXJuIHguZGVmYXVsdFByb3BlcnRpZXM9ayx4LmRlZmF1bHRQcm9wZXJ0aWVzfSxVMC5hZGREZWZhdWx0U3R5bGVzaGVldD1mdW5jdGlvbigpe3RoaXMuc2VsZWN0b3IoIjpwYXJlbnQiKS5jc3Moe3NoYXBlOiJyZWN0YW5nbGUiLHBhZGRpbmc6MTAsImJhY2tncm91bmQtY29sb3IiOiIjZWVlIiwiYm9yZGVyLWNvbG9yIjoiI2NjYyIsImJvcmRlci13aWR0aCI6MX0pLnNlbGVjdG9yKCJlZGdlIikuY3NzKHt3aWR0aDozfSkuc2VsZWN0b3IoIjpsb29wIikuY3NzKHsiY3VydmUtc3R5bGUiOiJiZXppZXIifSkuc2VsZWN0b3IoImVkZ2U6Y29tcG91bmQiKS5jc3MoeyJjdXJ2ZS1zdHlsZSI6ImJlemllciIsInNvdXJjZS1lbmRwb2ludCI6Im91dHNpZGUtdG8tbGluZSIsInRhcmdldC1lbmRwb2ludCI6Im91dHNpZGUtdG8tbGluZSJ9KS5zZWxlY3RvcigiOnNlbGVjdGVkIikuY3NzKHsiYmFja2dyb3VuZC1jb2xvciI6IiMwMTY5RDkiLCJsaW5lLWNvbG9yIjoiIzAxNjlEOSIsInNvdXJjZS1hcnJvdy1jb2xvciI6IiMwMTY5RDkiLCJ0YXJnZXQtYXJyb3ctY29sb3IiOiIjMDE2OUQ5IiwibWlkLXNvdXJjZS1hcnJvdy1jb2xvciI6IiMwMTY5RDkiLCJtaWQtdGFyZ2V0LWFycm93LWNvbG9yIjoiIzAxNjlEOSJ9KS5zZWxlY3RvcigiOnBhcmVudDpzZWxlY3RlZCIpLmNzcyh7ImJhY2tncm91bmQtY29sb3IiOiIjQ0NFMUY5IiwiYm9yZGVyLWNvbG9yIjoiI2FlYzhlNSJ9KS5zZWxlY3RvcigiOmFjdGl2ZSIpLmNzcyh7Im92ZXJsYXktY29sb3IiOiJibGFjayIsIm92ZXJsYXktcGFkZGluZyI6MTAsIm92ZXJsYXktb3BhY2l0eSI6LjI1fSksdGhpcy5kZWZhdWx0TGVuZ3RoPXRoaXMubGVuZ3RofTt2YXIgelM9e307elMucGFyc2U9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09dGhpcztpZihhZShtKSlyZXR1cm4gTS5wYXJzZUltcGxXYXJuKHgsbSxrLFMpO3ZhciBPPVM9PT0ibWFwcGluZyJ8fFM9PT0hMHx8Uz09PSExfHxTPT1udWxsPyJkb250Y2FyZSI6UyxOPWs/InQiOiJmIiwkPSIiK20sSD1sZCh4LCQsTixPKSxxPU0ucHJvcENhY2hlPU0ucHJvcENhY2hlfHxbXSxZO3JldHVybihZPXFbSF0pfHwoWT1xW0hdPU0ucGFyc2VJbXBsV2Fybih4LG0sayxTKSksKGt8fFM9PT0ibWFwcGluZyIpJiYoWT12bShZKSxZJiYoWS52YWx1ZT12bShZLnZhbHVlKSkpLFl9LHpTLnBhcnNlSW1wbFdhcm49ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09dGhpcy5wYXJzZUltcGwoeCxtLGssUyk7cmV0dXJuIU0mJm0hPW51bGwmJmh1KCJUaGUgc3R5bGUgcHJvcGVydHkgYCIuY29uY2F0KHgsIjogIikuY29uY2F0KG0sImAgaXMgaW52YWxpZCIpKSxNJiYoTS5uYW1lPT09IndpZHRoInx8TS5uYW1lPT09ImhlaWdodCIpJiZtPT09ImxhYmVsIiYmaHUoIlRoZSBzdHlsZSB2YWx1ZSBvZiBgbGFiZWxgIGlzIGRlcHJlY2F0ZWQgZm9yIGAiK00ubmFtZSsiYCIpLE19LHpTLnBhcnNlSW1wbD1mdW5jdGlvbih4LG0sayxTKXt2YXIgTT10aGlzO3g9Z24oeCk7dmFyIE89TS5wcm9wZXJ0aWVzW3hdLE49bSwkPU0udHlwZXM7aWYoIU98fG09PT12b2lkIDApcmV0dXJuIG51bGw7Ty5hbGlhcyYmKE89Ty5wb2ludHNUbyx4PU8ubmFtZSk7dmFyIEg9YmUobSk7SCYmKG09bS50cmltKCkpO3ZhciBxPU8udHlwZTtpZighcSlyZXR1cm4gbnVsbDtpZihrJiYobT09PSIifHxtPT09bnVsbCkpcmV0dXJue25hbWU6eCx2YWx1ZTptLGJ5cGFzczohMCxkZWxldGVCeXBhc3M6ITB9O2lmKGFlKG0pKXJldHVybntuYW1lOngsdmFsdWU6bSxzdHJWYWx1ZToiZm4iLG1hcHBlZDokLmZuLGJ5cGFzczprfTt2YXIgWSxaO2lmKCEoIUh8fFN8fG0ubGVuZ3RoPDd8fG1bMV0hPT0iYSIpKXtpZihtLmxlbmd0aD49NyYmbVswXT09PSJkIiYmKFk9bmV3IFJlZ0V4cCgkLmRhdGEucmVnZXgpLmV4ZWMobSkpKXtpZihrKXJldHVybiExO3ZhciBjZT0kLmRhdGE7cmV0dXJue25hbWU6eCx2YWx1ZTpZLHN0clZhbHVlOiIiK20sbWFwcGVkOmNlLGZpZWxkOllbMV0sYnlwYXNzOmt9fWVsc2UgaWYobS5sZW5ndGg+PTEwJiZtWzBdPT09Im0iJiYoWj1uZXcgUmVnRXhwKCQubWFwRGF0YS5yZWdleCkuZXhlYyhtKSkpe2lmKGt8fHEubXVsdGlwbGUpcmV0dXJuITE7dmFyIHZlPSQubWFwRGF0YTtpZighKHEuY29sb3J8fHEubnVtYmVyKSlyZXR1cm4hMTt2YXIgbWU9dGhpcy5wYXJzZSh4LFpbNF0pO2lmKCFtZXx8bWUubWFwcGVkKXJldHVybiExO3ZhciBMZT10aGlzLnBhcnNlKHgsWls1XSk7aWYoIUxlfHxMZS5tYXBwZWQpcmV0dXJuITE7aWYobWUucGZWYWx1ZT09PUxlLnBmVmFsdWV8fG1lLnN0clZhbHVlPT09TGUuc3RyVmFsdWUpcmV0dXJuIGh1KCJgIit4KyI6ICIrbSsiYCBpcyBub3QgYSB2YWxpZCBtYXBwZXIgYmVjYXVzZSB0aGUgb3V0cHV0IHJhbmdlIGlzIHplcm87IGNvbnZlcnRpbmcgdG8gYCIreCsiOiAiK21lLnN0clZhbHVlKyJgIiksdGhpcy5wYXJzZSh4LG1lLnN0clZhbHVlKTtpZihxLmNvbG9yKXt2YXIgX2U9bWUudmFsdWUsRWU9TGUudmFsdWUsQmU9X2VbMF09PT1FZVswXSYmX2VbMV09PT1FZVsxXSYmX2VbMl09PT1FZVsyXSYmKF9lWzNdPT09RWVbM118fChfZVszXT09bnVsbHx8X2VbM109PT0xKSYmKEVlWzNdPT1udWxsfHxFZVszXT09PTEpKTtpZihCZSlyZXR1cm4hMX1yZXR1cm57bmFtZTp4LHZhbHVlOlosc3RyVmFsdWU6IiIrbSxtYXBwZWQ6dmUsZmllbGQ6WlsxXSxmaWVsZE1pbjpwYXJzZUZsb2F0KFpbMl0pLGZpZWxkTWF4OnBhcnNlRmxvYXQoWlszXSksdmFsdWVNaW46bWUudmFsdWUsdmFsdWVNYXg6TGUudmFsdWUsYnlwYXNzOmt9fX1pZihxLm11bHRpcGxlJiZTIT09Im11bHRpcGxlIil7dmFyIFJlO2lmKEg/UmU9bS5zcGxpdCgvXHMrLyk6bmUobSk/UmU9bTpSZT1bbV0scS5ldmVuTXVsdGlwbGUmJlJlLmxlbmd0aCUyIT09MClyZXR1cm4gbnVsbDtmb3IodmFyIFZlPVtdLGN0PVtdLHN0PVtdLFllPSIiLG10PSExLEplPTA7SmU8UmUubGVuZ3RoO0plKyspe3ZhciBMdD1NLnBhcnNlKHgsUmVbSmVdLGssIm11bHRpcGxlIik7bXQ9bXR8fGJlKEx0LnZhbHVlKSxWZS5wdXNoKEx0LnZhbHVlKSxzdC5wdXNoKEx0LnBmVmFsdWUhPW51bGw/THQucGZWYWx1ZTpMdC52YWx1ZSksY3QucHVzaChMdC51bml0cyksWWUrPShKZT4wPyIgIjoiIikrTHQuc3RyVmFsdWV9cmV0dXJuIHEudmFsaWRhdGUmJiFxLnZhbGlkYXRlKFZlLGN0KT9udWxsOnEuc2luZ2xlRW51bSYmbXQ/VmUubGVuZ3RoPT09MSYmYmUoVmVbMF0pP3tuYW1lOngsdmFsdWU6VmVbMF0sc3RyVmFsdWU6VmVbMF0sYnlwYXNzOmt9Om51bGw6e25hbWU6eCx2YWx1ZTpWZSxwZlZhbHVlOnN0LHN0clZhbHVlOlllLGJ5cGFzczprLHVuaXRzOmN0fX12YXIgTXQ9ZnVuY3Rpb24oKXtmb3IodmFyIFNyPTA7U3I8cS5lbnVtcy5sZW5ndGg7U3IrKyl7dmFyIE5yPXEuZW51bXNbU3JdO2lmKE5yPT09bSlyZXR1cm57bmFtZTp4LHZhbHVlOm0sc3RyVmFsdWU6IiIrbSxieXBhc3M6a319cmV0dXJuIG51bGx9O2lmKHEubnVtYmVyKXt2YXIgdXQsV3Q9InB4IjtpZihxLnVuaXRzJiYodXQ9cS51bml0cykscS5pbXBsaWNpdFVuaXRzJiYoV3Q9cS5pbXBsaWNpdFVuaXRzKSwhcS51bml0bGVzcylpZihIKXt2YXIgVHQ9InB4fGVtIisocS5hbGxvd1BlcmNlbnQ/InxcXCUiOiIiKTt1dCYmKFR0PXV0KTt2YXIgX249bS5tYXRjaCgiXigiK2xuKyIpKCIrVHQrIik/JCIpO19uJiYobT1fblsxXSx1dD1fblsyXXx8V3QpfWVsc2UoIXV0fHxxLmltcGxpY2l0VW5pdHMpJiYodXQ9V3QpO2lmKG09cGFyc2VGbG9hdChtKSxpc05hTihtKSYmcS5lbnVtcz09PXZvaWQgMClyZXR1cm4gbnVsbDtpZihpc05hTihtKSYmcS5lbnVtcyE9PXZvaWQgMClyZXR1cm4gbT1OLE10KCk7aWYocS5pbnRlZ2VyJiYhZ2UobSl8fHEubWluIT09dm9pZCAwJiYobTxxLm1pbnx8cS5zdHJpY3RNaW4mJm09PT1xLm1pbil8fHEubWF4IT09dm9pZCAwJiYobT5xLm1heHx8cS5zdHJpY3RNYXgmJm09PT1xLm1heCkpcmV0dXJuIG51bGw7dmFyIGhuPXtuYW1lOngsdmFsdWU6bSxzdHJWYWx1ZToiIittKyh1dHx8IiIpLHVuaXRzOnV0LGJ5cGFzczprfTtyZXR1cm4gcS51bml0bGVzc3x8dXQhPT0icHgiJiZ1dCE9PSJlbSI/aG4ucGZWYWx1ZT1tOmhuLnBmVmFsdWU9dXQ9PT0icHgifHwhdXQ/bTp0aGlzLmdldEVtU2l6ZUluUGl4ZWxzKCkqbSwodXQ9PT0ibXMifHx1dD09PSJzIikmJihobi5wZlZhbHVlPXV0PT09Im1zIj9tOjFlMyptKSwodXQ9PT0iZGVnInx8dXQ9PT0icmFkIikmJihobi5wZlZhbHVlPXV0PT09InJhZCI/bTpsWihtKSksdXQ9PT0iJSImJihobi5wZlZhbHVlPW0vMTAwKSxobn1lbHNlIGlmKHEucHJvcExpc3Qpe3ZhciBZdD1bXSxEbj0iIittO2lmKERuIT09Im5vbmUiKXtmb3IodmFyIGlyPURuLnNwbGl0KC9ccyosXHMqfFxzKy8pLHZyPTA7dnI8aXIubGVuZ3RoO3ZyKyspe3ZhciBObj1pclt2cl0udHJpbSgpO00ucHJvcGVydGllc1tObl0/WXQucHVzaChObik6aHUoImAiK05uKyJgIGlzIG5vdCBhIHZhbGlkIHByb3BlcnR5IG5hbWUiKX1pZihZdC5sZW5ndGg9PT0wKXJldHVybiBudWxsfXJldHVybntuYW1lOngsdmFsdWU6WXQsc3RyVmFsdWU6WXQubGVuZ3RoPT09MD8ibm9uZSI6WXQuam9pbigiICIpLGJ5cGFzczprfX1lbHNlIGlmKHEuY29sb3Ipe3ZhciBwcj1hbyhtKTtyZXR1cm4gcHI/e25hbWU6eCx2YWx1ZTpwcixwZlZhbHVlOnByLHN0clZhbHVlOiJyZ2IoIitwclswXSsiLCIrcHJbMV0rIiwiK3ByWzJdKyIpIixieXBhc3M6a306bnVsbH1lbHNlIGlmKHEucmVnZXh8fHEucmVnZXhlcyl7aWYocS5lbnVtcyl7dmFyIEVyPU10KCk7aWYoRXIpcmV0dXJuIEVyfWZvcih2YXIgTXI9cS5yZWdleGVzP3EucmVnZXhlczpbcS5yZWdleF0sQ3I9MDtDcjxNci5sZW5ndGg7Q3IrKyl7dmFyIE9yPW5ldyBSZWdFeHAoTXJbQ3JdKSxXbj1Pci5leGVjKG0pO2lmKFduKXJldHVybntuYW1lOngsdmFsdWU6cS5zaW5nbGVSZWdleE1hdGNoVmFsdWU/V25bMV06V24sc3RyVmFsdWU6IiIrbSxieXBhc3M6a319cmV0dXJuIG51bGx9ZWxzZSByZXR1cm4gcS5zdHJpbmc/e25hbWU6eCx2YWx1ZToiIittLHN0clZhbHVlOiIiK20sYnlwYXNzOmt9OnEuZW51bXM/TXQoKTpudWxsfTt2YXIgVDE9ZnVuY3Rpb24geChtKXtpZighKHRoaXMgaW5zdGFuY2VvZiB4KSlyZXR1cm4gbmV3IHgobSk7aWYoIVBlKG0pKXtjaCgiQSBzdHlsZSBtdXN0IGhhdmUgYSBjb3JlIHJlZmVyZW5jZSIpO3JldHVybn10aGlzLl9wcml2YXRlPXtjeTptLGNvcmVTdHlsZTp7fX0sdGhpcy5sZW5ndGg9MCx0aGlzLnJlc2V0VG9EZWZhdWx0KCl9LEMxPVQxLnByb3RvdHlwZTtDMS5pbnN0YW5jZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiJzdHlsZSJ9LEMxLmNsZWFyPWZ1bmN0aW9uKCl7Zm9yKHZhciB4PXRoaXMuX3ByaXZhdGUsbT14LmN5LGs9bS5lbGVtZW50cygpLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl0aGlzW1NdPXZvaWQgMDtyZXR1cm4gdGhpcy5sZW5ndGg9MCx4LmNvbnRleHRTdHlsZXM9e30seC5wcm9wRGlmZnM9e30sdGhpcy5jbGVhbkVsZW1lbnRzKGssITApLGsuZm9yRWFjaChmdW5jdGlvbihNKXt2YXIgTz1NWzBdLl9wcml2YXRlO08uc3R5bGVEaXJ0eT0hMCxPLmFwcGxpZWRJbml0U3R5bGU9ITF9KSx0aGlzfSxDMS5yZXNldFRvRGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsZWFyKCksdGhpcy5hZGREZWZhdWx0U3R5bGVzaGVldCgpLHRoaXN9LEMxLmNvcmU9ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY29yZVN0eWxlW3hdfHx0aGlzLmdldERlZmF1bHRQcm9wZXJ0eSh4KX0sQzEuc2VsZWN0b3I9ZnVuY3Rpb24oeCl7dmFyIG09eD09PSJjb3JlIj9udWxsOm5ldyBleSh4KSxrPXRoaXMubGVuZ3RoKys7cmV0dXJuIHRoaXNba109e3NlbGVjdG9yOm0scHJvcGVydGllczpbXSxtYXBwZWRQcm9wZXJ0aWVzOltdLGluZGV4Omt9LHRoaXN9LEMxLmNzcz1mdW5jdGlvbigpe3ZhciB4PXRoaXMsbT1hcmd1bWVudHM7aWYobS5sZW5ndGg9PT0xKWZvcih2YXIgaz1tWzBdLFM9MDtTPHgucHJvcGVydGllcy5sZW5ndGg7UysrKXt2YXIgTT14LnByb3BlcnRpZXNbU10sTz1rW00ubmFtZV07Tz09PXZvaWQgMCYmKE89a1tfdChNLm5hbWUpXSksTyE9PXZvaWQgMCYmdGhpcy5jc3NSdWxlKE0ubmFtZSxPKX1lbHNlIG0ubGVuZ3RoPT09MiYmdGhpcy5jc3NSdWxlKG1bMF0sbVsxXSk7cmV0dXJuIHRoaXN9LEMxLnN0eWxlPUMxLmNzcyxDMS5jc3NSdWxlPWZ1bmN0aW9uKHgsbSl7dmFyIGs9dGhpcy5wYXJzZSh4LG0pO2lmKGspe3ZhciBTPXRoaXMubGVuZ3RoLTE7dGhpc1tTXS5wcm9wZXJ0aWVzLnB1c2goayksdGhpc1tTXS5wcm9wZXJ0aWVzW2submFtZV09ayxrLm5hbWUubWF0Y2goL3BpZS0oXGQrKS1iYWNrZ3JvdW5kLXNpemUvKSYmay52YWx1ZSYmKHRoaXMuX3ByaXZhdGUuaGFzUGllPSEwKSxrLm1hcHBlZCYmdGhpc1tTXS5tYXBwZWRQcm9wZXJ0aWVzLnB1c2goayk7dmFyIE09IXRoaXNbU10uc2VsZWN0b3I7TSYmKHRoaXMuX3ByaXZhdGUuY29yZVN0eWxlW2submFtZV09ayl9cmV0dXJuIHRoaXN9LEMxLmFwcGVuZD1mdW5jdGlvbih4KXtyZXR1cm4gamUoeCk/eC5hcHBlbmRUb1N0eWxlKHRoaXMpOm5lKHgpP3RoaXMuYXBwZW5kRnJvbUpzb24oeCk6YmUoeCkmJnRoaXMuYXBwZW5kRnJvbVN0cmluZyh4KSx0aGlzfSxUMS5mcm9tSnNvbj1mdW5jdGlvbih4LG0pe3ZhciBrPW5ldyBUMSh4KTtyZXR1cm4gay5mcm9tSnNvbihtKSxrfSxUMS5mcm9tU3RyaW5nPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIG5ldyBUMSh4KS5mcm9tU3RyaW5nKG0pfSxbRTEsY2ssSUkseG0sJFMsT0ksVTAselNdLmZvckVhY2goZnVuY3Rpb24oeCl7eXQoQzEseCl9KSxUMS50eXBlcz1DMS50eXBlcyxUMS5wcm9wZXJ0aWVzPUMxLnByb3BlcnRpZXMsVDEucHJvcGVydHlHcm91cHM9QzEucHJvcGVydHlHcm91cHMsVDEucHJvcGVydHlHcm91cE5hbWVzPUMxLnByb3BlcnR5R3JvdXBOYW1lcyxUMS5wcm9wZXJ0eUdyb3VwS2V5cz1DMS5wcm9wZXJ0eUdyb3VwS2V5czt2YXIgcHJlPXtzdHlsZTpmdW5jdGlvbihtKXtpZihtKXt2YXIgaz10aGlzLnNldFN0eWxlKG0pO2sudXBkYXRlKCl9cmV0dXJuIHRoaXMuX3ByaXZhdGUuc3R5bGV9LHNldFN0eWxlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGplKG0pP2suc3R5bGU9bS5nZW5lcmF0ZVN0eWxlKHRoaXMpOm5lKG0pP2suc3R5bGU9VDEuZnJvbUpzb24odGhpcyxtKTpiZShtKT9rLnN0eWxlPVQxLmZyb21TdHJpbmcodGhpcyxtKTprLnN0eWxlPVQxKHRoaXMpLGsuc3R5bGV9LHVwZGF0ZVN0eWxlOmZ1bmN0aW9uKCl7dGhpcy5tdXRhYmxlRWxlbWVudHMoKS51cGRhdGVTdHlsZSgpfX0sYnJlPSJzaW5nbGUiLHY1PXthdXRvbG9jazpmdW5jdGlvbihtKXtpZihtIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUuYXV0b2xvY2s9ISFtO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYXV0b2xvY2s7cmV0dXJuIHRoaXN9LGF1dG91bmdyYWJpZnk6ZnVuY3Rpb24obSl7aWYobSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmF1dG91bmdyYWJpZnk9ISFtO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYXV0b3VuZ3JhYmlmeTtyZXR1cm4gdGhpc30sYXV0b3Vuc2VsZWN0aWZ5OmZ1bmN0aW9uKG0pe2lmKG0hPT12b2lkIDApdGhpcy5fcHJpdmF0ZS5hdXRvdW5zZWxlY3RpZnk9ISFtO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYXV0b3Vuc2VsZWN0aWZ5O3JldHVybiB0aGlzfSxzZWxlY3Rpb25UeXBlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGU7aWYoay5zZWxlY3Rpb25UeXBlPT1udWxsJiYoay5zZWxlY3Rpb25UeXBlPWJyZSksbSE9PXZvaWQgMCkobT09PSJhZGRpdGl2ZSJ8fG09PT0ic2luZ2xlIikmJihrLnNlbGVjdGlvblR5cGU9bSk7ZWxzZSByZXR1cm4gay5zZWxlY3Rpb25UeXBlO3JldHVybiB0aGlzfSxwYW5uaW5nRW5hYmxlZDpmdW5jdGlvbihtKXtpZihtIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQ9ISFtO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LHVzZXJQYW5uaW5nRW5hYmxlZDpmdW5jdGlvbihtKXtpZihtIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUudXNlclBhbm5pbmdFbmFibGVkPSEhbTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLnVzZXJQYW5uaW5nRW5hYmxlZDtyZXR1cm4gdGhpc30sem9vbWluZ0VuYWJsZWQ6ZnVuY3Rpb24obSl7aWYobSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkPSEhbTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkO3JldHVybiB0aGlzfSx1c2VyWm9vbWluZ0VuYWJsZWQ6ZnVuY3Rpb24obSl7aWYobSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnVzZXJab29taW5nRW5hYmxlZD0hIW07ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS51c2VyWm9vbWluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LGJveFNlbGVjdGlvbkVuYWJsZWQ6ZnVuY3Rpb24obSl7aWYobSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmJveFNlbGVjdGlvbkVuYWJsZWQ9ISFtO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYm94U2VsZWN0aW9uRW5hYmxlZDtyZXR1cm4gdGhpc30scGFuOmZ1bmN0aW9uKCl7dmFyIG09YXJndW1lbnRzLGs9dGhpcy5fcHJpdmF0ZS5wYW4sUyxNLE8sTiwkO3N3aXRjaChtLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBrO2Nhc2UgMTppZihiZShtWzBdKSlyZXR1cm4gUz1tWzBdLGtbU107aWYoc2UobVswXSkpe2lmKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXJldHVybiB0aGlzO089bVswXSxOPU8ueCwkPU8ueSxYKE4pJiYoay54PU4pLFgoJCkmJihrLnk9JCksdGhpcy5lbWl0KCJwYW4gdmlld3BvcnQiKX1icmVhaztjYXNlIDI6aWYoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQpcmV0dXJuIHRoaXM7Uz1tWzBdLE09bVsxXSwoUz09PSJ4Inx8Uz09PSJ5IikmJlgoTSkmJihrW1NdPU0pLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0Iik7YnJlYWt9cmV0dXJuIHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpLHRoaXN9LHBhbkJ5OmZ1bmN0aW9uKG0sayl7dmFyIFM9YXJndW1lbnRzLE09dGhpcy5fcHJpdmF0ZS5wYW4sTyxOLCQsSCxxO2lmKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXJldHVybiB0aGlzO3N3aXRjaChTLmxlbmd0aCl7Y2FzZSAxOnNlKG0pJiYoJD1TWzBdLEg9JC54LHE9JC55LFgoSCkmJihNLngrPUgpLFgocSkmJihNLnkrPXEpLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0IikpO2JyZWFrO2Nhc2UgMjpPPW0sTj1rLChPPT09IngifHxPPT09InkiKSYmWChOKSYmKE1bT10rPU4pLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0Iik7YnJlYWt9cmV0dXJuIHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpLHRoaXN9LGZpdDpmdW5jdGlvbihtLGspe3ZhciBTPXRoaXMuZ2V0Rml0Vmlld3BvcnQobSxrKTtpZihTKXt2YXIgTT10aGlzLl9wcml2YXRlO00uem9vbT1TLnpvb20sTS5wYW49Uy5wYW4sdGhpcy5lbWl0KCJwYW4gem9vbSB2aWV3cG9ydCIpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpfXJldHVybiB0aGlzfSxnZXRGaXRWaWV3cG9ydDpmdW5jdGlvbihtLGspe2lmKFgobSkmJms9PT12b2lkIDAmJihrPW0sbT12b2lkIDApLCEoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWR8fCF0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkKSl7dmFyIFM7aWYoYmUobSkpe3ZhciBNPW07bT10aGlzLiQoTSl9ZWxzZSBpZihrZShtKSl7dmFyIE89bTtTPXt4MTpPLngxLHkxOk8ueTEseDI6Ty54Mix5MjpPLnkyfSxTLnc9Uy54Mi1TLngxLFMuaD1TLnkyLVMueTF9ZWxzZSB4ZShtKXx8KG09dGhpcy5tdXRhYmxlRWxlbWVudHMoKSk7aWYoISh4ZShtKSYmbS5lbXB0eSgpKSl7Uz1TfHxtLmJvdW5kaW5nQm94KCk7dmFyIE49dGhpcy53aWR0aCgpLCQ9dGhpcy5oZWlnaHQoKSxIO2lmKGs9WChrKT9rOjAsIWlzTmFOKE4pJiYhaXNOYU4oJCkmJk4+MCYmJD4wJiYhaXNOYU4oUy53KSYmIWlzTmFOKFMuaCkmJlMudz4wJiZTLmg+MCl7SD1NYXRoLm1pbigoTi0yKmspL1MudywoJC0yKmspL1MuaCksSD1IPnRoaXMuX3ByaXZhdGUubWF4Wm9vbT90aGlzLl9wcml2YXRlLm1heFpvb206SCxIPUg8dGhpcy5fcHJpdmF0ZS5taW5ab29tP3RoaXMuX3ByaXZhdGUubWluWm9vbTpIO3ZhciBxPXt4OihOLUgqKFMueDErUy54MikpLzIseTooJC1IKihTLnkxK1MueTIpKS8yfTtyZXR1cm57em9vbTpILHBhbjpxfX19fX0sem9vbVJhbmdlOmZ1bmN0aW9uKG0sayl7dmFyIFM9dGhpcy5fcHJpdmF0ZTtpZihrPT1udWxsKXt2YXIgTT1tO209TS5taW4saz1NLm1heH1yZXR1cm4gWChtKSYmWChrKSYmbTw9az8oUy5taW5ab29tPW0sUy5tYXhab29tPWspOlgobSkmJms9PT12b2lkIDAmJm08PVMubWF4Wm9vbT9TLm1pblpvb209bTpYKGspJiZtPT09dm9pZCAwJiZrPj1TLm1pblpvb20mJihTLm1heFpvb209ayksdGhpc30sbWluWm9vbTpmdW5jdGlvbihtKXtyZXR1cm4gbT09PXZvaWQgMD90aGlzLl9wcml2YXRlLm1pblpvb206dGhpcy56b29tUmFuZ2Uoe21pbjptfSl9LG1heFpvb206ZnVuY3Rpb24obSl7cmV0dXJuIG09PT12b2lkIDA/dGhpcy5fcHJpdmF0ZS5tYXhab29tOnRoaXMuem9vbVJhbmdlKHttYXg6bX0pfSxnZXRab29tZWRWaWV3cG9ydDpmdW5jdGlvbihtKXt2YXIgaz10aGlzLl9wcml2YXRlLFM9ay5wYW4sTT1rLnpvb20sTyxOLCQ9ITE7aWYoay56b29taW5nRW5hYmxlZHx8KCQ9ITApLFgobSk/Tj1tOnNlKG0pJiYoTj1tLmxldmVsLG0ucG9zaXRpb24hPW51bGw/Tz1sUyhtLnBvc2l0aW9uLE0sUyk6bS5yZW5kZXJlZFBvc2l0aW9uIT1udWxsJiYoTz1tLnJlbmRlcmVkUG9zaXRpb24pLE8hPW51bGwmJiFrLnBhbm5pbmdFbmFibGVkJiYoJD0hMCkpLE49Tj5rLm1heFpvb20/ay5tYXhab29tOk4sTj1OPGsubWluWm9vbT9rLm1pblpvb206TiwkfHwhWChOKXx8Tj09PU18fE8hPW51bGwmJighWChPLngpfHwhWChPLnkpKSlyZXR1cm4gbnVsbDtpZihPIT1udWxsKXt2YXIgSD1TLHE9TSxZPU4sWj17eDotWS9xKihPLngtSC54KStPLngseTotWS9xKihPLnktSC55KStPLnl9O3JldHVybnt6b29tZWQ6ITAscGFubmVkOiEwLHpvb206WSxwYW46Wn19ZWxzZSByZXR1cm57em9vbWVkOiEwLHBhbm5lZDohMSx6b29tOk4scGFuOlN9fSx6b29tOmZ1bmN0aW9uKG0pe2lmKG09PT12b2lkIDApcmV0dXJuIHRoaXMuX3ByaXZhdGUuem9vbTt2YXIgaz10aGlzLmdldFpvb21lZFZpZXdwb3J0KG0pLFM9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gaz09bnVsbHx8IWsuem9vbWVkP3RoaXM6KFMuem9vbT1rLnpvb20say5wYW5uZWQmJihTLnBhbi54PWsucGFuLngsUy5wYW4ueT1rLnBhbi55KSx0aGlzLmVtaXQoInpvb20iKyhrLnBhbm5lZD8iIHBhbiI6IiIpKyIgdmlld3BvcnQiKSx0aGlzLm5vdGlmeSgidmlld3BvcnQiKSx0aGlzKX0sdmlld3BvcnQ6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcy5fcHJpdmF0ZSxTPSEwLE09ITAsTz1bXSxOPSExLCQ9ITE7aWYoIW0pcmV0dXJuIHRoaXM7aWYoWChtLnpvb20pfHwoUz0hMSksc2UobS5wYW4pfHwoTT0hMSksIVMmJiFNKXJldHVybiB0aGlzO2lmKFMpe3ZhciBIPW0uem9vbTtIPGsubWluWm9vbXx8SD5rLm1heFpvb218fCFrLnpvb21pbmdFbmFibGVkP049ITA6KGsuem9vbT1ILE8ucHVzaCgiem9vbSIpKX1pZihNJiYoIU58fCFtLmNhbmNlbE9uRmFpbGVkWm9vbSkmJmsucGFubmluZ0VuYWJsZWQpe3ZhciBxPW0ucGFuO1gocS54KSYmKGsucGFuLng9cS54LCQ9ITEpLFgocS55KSYmKGsucGFuLnk9cS55LCQ9ITEpLCR8fE8ucHVzaCgicGFuIil9cmV0dXJuIE8ubGVuZ3RoPjAmJihPLnB1c2goInZpZXdwb3J0IiksdGhpcy5lbWl0KE8uam9pbigiICIpKSx0aGlzLm5vdGlmeSgidmlld3BvcnQiKSksdGhpc30sY2VudGVyOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuZ2V0Q2VudGVyUGFuKG0pO3JldHVybiBrJiYodGhpcy5fcHJpdmF0ZS5wYW49ayx0aGlzLmVtaXQoInBhbiB2aWV3cG9ydCIpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpKSx0aGlzfSxnZXRDZW50ZXJQYW46ZnVuY3Rpb24obSxrKXtpZih0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXtpZihiZShtKSl7dmFyIFM9bTttPXRoaXMubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKFMpfWVsc2UgeGUobSl8fChtPXRoaXMubXV0YWJsZUVsZW1lbnRzKCkpO2lmKG0ubGVuZ3RoIT09MCl7dmFyIE09bS5ib3VuZGluZ0JveCgpLE89dGhpcy53aWR0aCgpLE49dGhpcy5oZWlnaHQoKTtrPWs9PT12b2lkIDA/dGhpcy5fcHJpdmF0ZS56b29tOms7dmFyICQ9e3g6KE8tayooTS54MStNLngyKSkvMix5OihOLWsqKE0ueTErTS55MikpLzJ9O3JldHVybiAkfX19LHJlc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWR8fCF0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkP3RoaXM6KHRoaXMudmlld3BvcnQoe3Bhbjp7eDowLHk6MH0sem9vbToxfSksdGhpcyl9LGludmFsaWRhdGVTaXplOmZ1bmN0aW9uKCl7dGhpcy5fcHJpdmF0ZS5zaXplQ2FjaGU9bnVsbH0sc2l6ZTpmdW5jdGlvbigpe3ZhciBtPXRoaXMuX3ByaXZhdGUsaz1tLmNvbnRhaW5lcixTPXRoaXM7cmV0dXJuIG0uc2l6ZUNhY2hlPW0uc2l6ZUNhY2hlfHwoaz9mdW5jdGlvbigpe3ZhciBNPVMud2luZG93KCkuZ2V0Q29tcHV0ZWRTdHlsZShrKSxPPWZ1bmN0aW9uKCQpe3JldHVybiBwYXJzZUZsb2F0KE0uZ2V0UHJvcGVydHlWYWx1ZSgkKSl9O3JldHVybnt3aWR0aDprLmNsaWVudFdpZHRoLU8oInBhZGRpbmctbGVmdCIpLU8oInBhZGRpbmctcmlnaHQiKSxoZWlnaHQ6ay5jbGllbnRIZWlnaHQtTygicGFkZGluZy10b3AiKS1PKCJwYWRkaW5nLWJvdHRvbSIpfX0oKTp7d2lkdGg6MSxoZWlnaHQ6MX0pfSx3aWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemUoKS53aWR0aH0saGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZSgpLmhlaWdodH0sZXh0ZW50OmZ1bmN0aW9uKCl7dmFyIG09dGhpcy5fcHJpdmF0ZS5wYW4saz10aGlzLl9wcml2YXRlLnpvb20sUz10aGlzLnJlbmRlcmVkRXh0ZW50KCksTT17eDE6KFMueDEtbS54KS9rLHgyOihTLngyLW0ueCkvayx5MTooUy55MS1tLnkpL2sseTI6KFMueTItbS55KS9rfTtyZXR1cm4gTS53PU0ueDItTS54MSxNLmg9TS55Mi1NLnkxLE19LHJlbmRlcmVkRXh0ZW50OmZ1bmN0aW9uKCl7dmFyIG09dGhpcy53aWR0aCgpLGs9dGhpcy5oZWlnaHQoKTtyZXR1cm57eDE6MCx5MTowLHgyOm0seTI6ayx3Om0saDprfX0sbXVsdGlDbGlja0RlYm91bmNlVGltZTpmdW5jdGlvbihtKXtpZihtKXRoaXMuX3ByaXZhdGUubXVsdGlDbGlja0RlYm91bmNlVGltZT1tO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUubXVsdGlDbGlja0RlYm91bmNlVGltZTtyZXR1cm4gdGhpc319O3Y1LmNlbnRyZT12NS5jZW50ZXIsdjUuYXV0b2xvY2tOb2Rlcz12NS5hdXRvbG9jayx2NS5hdXRvdW5ncmFiaWZ5Tm9kZXM9djUuYXV0b3VuZ3JhYmlmeTt2YXIgdWs9e2RhdGE6ZnUuZGF0YSh7ZmllbGQ6ImRhdGEiLGJpbmRpbmdFdmVudDoiZGF0YSIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6ImRhdGEiLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZURhdGE6ZnUucmVtb3ZlRGF0YSh7ZmllbGQ6ImRhdGEiLGV2ZW50OiJkYXRhIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITAsdXBkYXRlU3R5bGU6ITB9KSxzY3JhdGNoOmZ1LmRhdGEoe2ZpZWxkOiJzY3JhdGNoIixiaW5kaW5nRXZlbnQ6InNjcmF0Y2giLGFsbG93QmluZGluZzohMCxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ0V2ZW50OiJzY3JhdGNoIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIixhbGxvd0dldHRpbmc6ITAsdXBkYXRlU3R5bGU6ITB9KSxyZW1vdmVTY3JhdGNoOmZ1LnJlbW92ZURhdGEoe2ZpZWxkOiJzY3JhdGNoIixldmVudDoic2NyYXRjaCIsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsdHJpZ2dlckV2ZW50OiEwLHVwZGF0ZVN0eWxlOiEwfSl9O3VrLmF0dHI9dWsuZGF0YSx1ay5yZW1vdmVBdHRyPXVrLnJlbW92ZURhdGE7dmFyIGxrPWZ1bmN0aW9uKG0pe3ZhciBrPXRoaXM7bT15dCh7fSxtKTt2YXIgUz1tLmNvbnRhaW5lcjtTJiYhVyhTKSYmVyhTWzBdKSYmKFM9U1swXSk7dmFyIE09Uz9TLl9jeXJlZzpudWxsO009TXx8e30sTSYmTS5jeSYmKE0uY3kuZGVzdHJveSgpLE09e30pO3ZhciBPPU0ucmVhZGllcz1NLnJlYWRpZXN8fFtdO1MmJihTLl9jeXJlZz1NKSxNLmN5PWs7dmFyIE49RiE9PXZvaWQgMCYmUyE9PXZvaWQgMCYmIW0uaGVhZGxlc3MsJD1tOyQubGF5b3V0PXl0KHtuYW1lOk4/ImdyaWQiOiJudWxsIn0sJC5sYXlvdXQpLCQucmVuZGVyZXI9eXQoe25hbWU6Tj8iY2FudmFzIjoibnVsbCJ9LCQucmVuZGVyZXIpO3ZhciBIPWZ1bmN0aW9uKG1lLExlLF9lKXtyZXR1cm4gTGUhPT12b2lkIDA/TGU6X2UhPT12b2lkIDA/X2U6bWV9LHE9dGhpcy5fcHJpdmF0ZT17Y29udGFpbmVyOlMscmVhZHk6ITEsb3B0aW9uczokLGVsZW1lbnRzOm5ldyBWMCh0aGlzKSxsaXN0ZW5lcnM6W10sYW5pRWxlczpuZXcgVjAodGhpcyksZGF0YTokLmRhdGF8fHt9LHNjcmF0Y2g6e30sbGF5b3V0Om51bGwscmVuZGVyZXI6bnVsbCxkZXN0cm95ZWQ6ITEsbm90aWZpY2F0aW9uc0VuYWJsZWQ6ITAsbWluWm9vbToxZS01MCxtYXhab29tOjFlNTAsem9vbWluZ0VuYWJsZWQ6SCghMCwkLnpvb21pbmdFbmFibGVkKSx1c2VyWm9vbWluZ0VuYWJsZWQ6SCghMCwkLnVzZXJab29taW5nRW5hYmxlZCkscGFubmluZ0VuYWJsZWQ6SCghMCwkLnBhbm5pbmdFbmFibGVkKSx1c2VyUGFubmluZ0VuYWJsZWQ6SCghMCwkLnVzZXJQYW5uaW5nRW5hYmxlZCksYm94U2VsZWN0aW9uRW5hYmxlZDpIKCEwLCQuYm94U2VsZWN0aW9uRW5hYmxlZCksYXV0b2xvY2s6SCghMSwkLmF1dG9sb2NrLCQuYXV0b2xvY2tOb2RlcyksYXV0b3VuZ3JhYmlmeTpIKCExLCQuYXV0b3VuZ3JhYmlmeSwkLmF1dG91bmdyYWJpZnlOb2RlcyksYXV0b3Vuc2VsZWN0aWZ5OkgoITEsJC5hdXRvdW5zZWxlY3RpZnkpLHN0eWxlRW5hYmxlZDokLnN0eWxlRW5hYmxlZD09PXZvaWQgMD9OOiQuc3R5bGVFbmFibGVkLHpvb206WCgkLnpvb20pPyQuem9vbToxLHBhbjp7eDpzZSgkLnBhbikmJlgoJC5wYW4ueCk/JC5wYW4ueDowLHk6c2UoJC5wYW4pJiZYKCQucGFuLnkpPyQucGFuLnk6MH0sYW5pbWF0aW9uOntjdXJyZW50OltdLHF1ZXVlOltdfSxoYXNDb21wb3VuZE5vZGVzOiExLG11bHRpQ2xpY2tEZWJvdW5jZVRpbWU6SCgyNTAsJC5tdWx0aUNsaWNrRGVib3VuY2VUaW1lKX07dGhpcy5jcmVhdGVFbWl0dGVyKCksdGhpcy5zZWxlY3Rpb25UeXBlKCQuc2VsZWN0aW9uVHlwZSksdGhpcy56b29tUmFuZ2Uoe21pbjokLm1pblpvb20sbWF4OiQubWF4Wm9vbX0pO3ZhciBZPWZ1bmN0aW9uKG1lLExlKXt2YXIgX2U9bWUuc29tZShLZSk7aWYoX2UpcmV0dXJuIGk4LmFsbChtZSkudGhlbihMZSk7TGUobWUpfTtxLnN0eWxlRW5hYmxlZCYmay5zZXRTdHlsZShbXSk7dmFyIFo9eXQoe30sJCwkLnJlbmRlcmVyKTtrLmluaXRSZW5kZXJlcihaKTt2YXIgY2U9ZnVuY3Rpb24obWUsTGUsX2Upe2subm90aWZpY2F0aW9ucyghMSk7dmFyIEVlPWsubXV0YWJsZUVsZW1lbnRzKCk7RWUubGVuZ3RoPjAmJkVlLnJlbW92ZSgpLG1lIT1udWxsJiYoc2UobWUpfHxuZShtZSkpJiZrLmFkZChtZSksay5vbmUoImxheW91dHJlYWR5IixmdW5jdGlvbihSZSl7ay5ub3RpZmljYXRpb25zKCEwKSxrLmVtaXQoUmUpLGsub25lKCJsb2FkIixMZSksay5lbWl0QW5kTm90aWZ5KCJsb2FkIil9KS5vbmUoImxheW91dHN0b3AiLGZ1bmN0aW9uKCl7ay5vbmUoImRvbmUiLF9lKSxrLmVtaXQoImRvbmUiKX0pO3ZhciBCZT15dCh7fSxrLl9wcml2YXRlLm9wdGlvbnMubGF5b3V0KTtCZS5lbGVzPWsuZWxlbWVudHMoKSxrLmxheW91dChCZSkucnVuKCl9O1koWyQuc3R5bGUsJC5lbGVtZW50c10sZnVuY3Rpb24odmUpe3ZhciBtZT12ZVswXSxMZT12ZVsxXTtxLnN0eWxlRW5hYmxlZCYmay5zdHlsZSgpLmFwcGVuZChtZSksY2UoTGUsZnVuY3Rpb24oKXtrLnN0YXJ0QW5pbWF0aW9uTG9vcCgpLHEucmVhZHk9ITAsYWUoJC5yZWFkeSkmJmsub24oInJlYWR5IiwkLnJlYWR5KTtmb3IodmFyIF9lPTA7X2U8Ty5sZW5ndGg7X2UrKyl7dmFyIEVlPU9bX2VdO2sub24oInJlYWR5IixFZSl9TSYmKE0ucmVhZGllcz1bXSksay5lbWl0KCJyZWFkeSIpfSwkLmRvbmUpfSl9LHFTPWxrLnByb3RvdHlwZTt5dChxUyx7aW5zdGFuY2VTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iY29yZSJ9LGlzUmVhZHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5yZWFkeX0sZGVzdHJveWVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZGVzdHJveWVkfSxyZWFkeTpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5pc1JlYWR5KCk/dGhpcy5lbWl0dGVyKCkuZW1pdCgicmVhZHkiLFtdLG0pOnRoaXMub24oInJlYWR5IixtKSx0aGlzfSxkZXN0cm95OmZ1bmN0aW9uKCl7dmFyIG09dGhpcztpZighbS5kZXN0cm95ZWQoKSlyZXR1cm4gbS5zdG9wQW5pbWF0aW9uTG9vcCgpLG0uZGVzdHJveVJlbmRlcmVyKCksdGhpcy5lbWl0KCJkZXN0cm95IiksbS5fcHJpdmF0ZS5kZXN0cm95ZWQ9ITAsbX0saGFzRWxlbWVudFdpdGhJZDpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5oYXNFbGVtZW50V2l0aElkKG0pfSxnZXRFbGVtZW50QnlJZDpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5nZXRFbGVtZW50QnlJZChtKX0saGFzQ29tcG91bmROb2RlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXN9LGhlYWRsZXNzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucmVuZGVyZXIuaXNIZWFkbGVzcygpfSxzdHlsZUVuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5zdHlsZUVuYWJsZWR9LGFkZFRvUG9vbDpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5tZXJnZShtKSx0aGlzfSxyZW1vdmVGcm9tUG9vbDpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy51bm1lcmdlKG0pLHRoaXN9LGNvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmNvbnRhaW5lcnx8bnVsbH0sd2luZG93OmZ1bmN0aW9uKCl7dmFyIG09dGhpcy5fcHJpdmF0ZS5jb250YWluZXI7aWYobT09bnVsbClyZXR1cm4gRjt2YXIgaz10aGlzLl9wcml2YXRlLmNvbnRhaW5lci5vd25lckRvY3VtZW50O3JldHVybiBrPT09dm9pZCAwfHxrPT1udWxsP0Y6ay5kZWZhdWx0Vmlld3x8Rn0sbW91bnQ6ZnVuY3Rpb24obSl7aWYobSE9bnVsbCl7dmFyIGs9dGhpcyxTPWsuX3ByaXZhdGUsTT1TLm9wdGlvbnM7cmV0dXJuIVcobSkmJlcobVswXSkmJihtPW1bMF0pLGsuc3RvcEFuaW1hdGlvbkxvb3AoKSxrLmRlc3Ryb3lSZW5kZXJlcigpLFMuY29udGFpbmVyPW0sUy5zdHlsZUVuYWJsZWQ9ITAsay5pbnZhbGlkYXRlU2l6ZSgpLGsuaW5pdFJlbmRlcmVyKHl0KHt9LE0sTS5yZW5kZXJlcix7bmFtZTpNLnJlbmRlcmVyLm5hbWU9PT0ibnVsbCI/ImNhbnZhcyI6TS5yZW5kZXJlci5uYW1lfSkpLGsuc3RhcnRBbmltYXRpb25Mb29wKCksay5zdHlsZShNLnN0eWxlKSxrLmVtaXQoIm1vdW50Iiksa319LHVubW91bnQ6ZnVuY3Rpb24oKXt2YXIgbT10aGlzO3JldHVybiBtLnN0b3BBbmltYXRpb25Mb29wKCksbS5kZXN0cm95UmVuZGVyZXIoKSxtLmluaXRSZW5kZXJlcih7bmFtZToibnVsbCJ9KSxtLmVtaXQoInVubW91bnQiKSxtfSxvcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIHZtKHRoaXMuX3ByaXZhdGUub3B0aW9ucyl9LGpzb246ZnVuY3Rpb24obSl7dmFyIGs9dGhpcyxTPWsuX3ByaXZhdGUsTT1rLm11dGFibGVFbGVtZW50cygpLE89ZnVuY3Rpb24oVmUpe3JldHVybiBrLmdldEVsZW1lbnRCeUlkKFZlLmlkKCkpfTtpZihzZShtKSl7aWYoay5zdGFydEJhdGNoKCksbS5lbGVtZW50cyl7dmFyIE49e30sJD1mdW5jdGlvbihWZSxjdCl7Zm9yKHZhciBzdD1bXSxZZT1bXSxtdD0wO210PFZlLmxlbmd0aDttdCsrKXt2YXIgSmU9VmVbbXRdO2lmKCFKZS5kYXRhLmlkKXtodSgiY3kuanNvbigpIGNhbm5vdCBoYW5kbGUgZWxlbWVudHMgd2l0aG91dCBhbiBJRCBhdHRyaWJ1dGUiKTtjb250aW51ZX12YXIgTHQ9IiIrSmUuZGF0YS5pZCxNdD1rLmdldEVsZW1lbnRCeUlkKEx0KTtOW0x0XT0hMCxNdC5sZW5ndGghPT0wP1llLnB1c2goe2VsZTpNdCxqc29uOkplfSk6KGN0JiYoSmUuZ3JvdXA9Y3QpLHN0LnB1c2goSmUpKX1rLmFkZChzdCk7Zm9yKHZhciB1dD0wO3V0PFllLmxlbmd0aDt1dCsrKXt2YXIgV3Q9WWVbdXRdLFR0PVd0LmVsZSxfbj1XdC5qc29uO1R0Lmpzb24oX24pfX07aWYobmUobS5lbGVtZW50cykpJChtLmVsZW1lbnRzKTtlbHNlIGZvcih2YXIgSD1bIm5vZGVzIiwiZWRnZXMiXSxxPTA7cTxILmxlbmd0aDtxKyspe3ZhciBZPUhbcV0sWj1tLmVsZW1lbnRzW1ldO25lKFopJiYkKFosWSl9dmFyIGNlPWsuY29sbGVjdGlvbigpO00uZmlsdGVyKGZ1bmN0aW9uKFJlKXtyZXR1cm4hTltSZS5pZCgpXX0pLmZvckVhY2goZnVuY3Rpb24oUmUpe1JlLmlzUGFyZW50KCk/Y2UubWVyZ2UoUmUpOlJlLnJlbW92ZSgpfSksY2UuZm9yRWFjaChmdW5jdGlvbihSZSl7cmV0dXJuIFJlLmNoaWxkcmVuKCkubW92ZSh7cGFyZW50Om51bGx9KX0pLGNlLmZvckVhY2goZnVuY3Rpb24oUmUpe3JldHVybiBPKFJlKS5yZW1vdmUoKX0pfW0uc3R5bGUmJmsuc3R5bGUobS5zdHlsZSksbS56b29tIT1udWxsJiZtLnpvb20hPT1TLnpvb20mJmsuem9vbShtLnpvb20pLG0ucGFuJiYobS5wYW4ueCE9PVMucGFuLnh8fG0ucGFuLnkhPT1TLnBhbi55KSYmay5wYW4obS5wYW4pLG0uZGF0YSYmay5kYXRhKG0uZGF0YSk7Zm9yKHZhciB2ZT1bIm1pblpvb20iLCJtYXhab29tIiwiem9vbWluZ0VuYWJsZWQiLCJ1c2VyWm9vbWluZ0VuYWJsZWQiLCJwYW5uaW5nRW5hYmxlZCIsInVzZXJQYW5uaW5nRW5hYmxlZCIsImJveFNlbGVjdGlvbkVuYWJsZWQiLCJhdXRvbG9jayIsImF1dG91bmdyYWJpZnkiLCJhdXRvdW5zZWxlY3RpZnkiLCJtdWx0aUNsaWNrRGVib3VuY2VUaW1lIl0sbWU9MDttZTx2ZS5sZW5ndGg7bWUrKyl7dmFyIExlPXZlW21lXTttW0xlXSE9bnVsbCYma1tMZV0obVtMZV0pfXJldHVybiBrLmVuZEJhdGNoKCksdGhpc31lbHNle3ZhciBfZT0hIW0sRWU9e307X2U/RWUuZWxlbWVudHM9dGhpcy5lbGVtZW50cygpLm1hcChmdW5jdGlvbihSZSl7cmV0dXJuIFJlLmpzb24oKX0pOihFZS5lbGVtZW50cz17fSxNLmZvckVhY2goZnVuY3Rpb24oUmUpe3ZhciBWZT1SZS5ncm91cCgpO0VlLmVsZW1lbnRzW1ZlXXx8KEVlLmVsZW1lbnRzW1ZlXT1bXSksRWUuZWxlbWVudHNbVmVdLnB1c2goUmUuanNvbigpKX0pKSx0aGlzLl9wcml2YXRlLnN0eWxlRW5hYmxlZCYmKEVlLnN0eWxlPWsuc3R5bGUoKS5qc29uKCkpLEVlLmRhdGE9dm0oay5kYXRhKCkpO3ZhciBCZT1TLm9wdGlvbnM7cmV0dXJuIEVlLnpvb21pbmdFbmFibGVkPVMuem9vbWluZ0VuYWJsZWQsRWUudXNlclpvb21pbmdFbmFibGVkPVMudXNlclpvb21pbmdFbmFibGVkLEVlLnpvb209Uy56b29tLEVlLm1pblpvb209Uy5taW5ab29tLEVlLm1heFpvb209Uy5tYXhab29tLEVlLnBhbm5pbmdFbmFibGVkPVMucGFubmluZ0VuYWJsZWQsRWUudXNlclBhbm5pbmdFbmFibGVkPVMudXNlclBhbm5pbmdFbmFibGVkLEVlLnBhbj12bShTLnBhbiksRWUuYm94U2VsZWN0aW9uRW5hYmxlZD1TLmJveFNlbGVjdGlvbkVuYWJsZWQsRWUucmVuZGVyZXI9dm0oQmUucmVuZGVyZXIpLEVlLmhpZGVFZGdlc09uVmlld3BvcnQ9QmUuaGlkZUVkZ2VzT25WaWV3cG9ydCxFZS50ZXh0dXJlT25WaWV3cG9ydD1CZS50ZXh0dXJlT25WaWV3cG9ydCxFZS53aGVlbFNlbnNpdGl2aXR5PUJlLndoZWVsU2Vuc2l0aXZpdHksRWUubW90aW9uQmx1cj1CZS5tb3Rpb25CbHVyLEVlLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWU9QmUubXVsdGlDbGlja0RlYm91bmNlVGltZSxFZX19fSkscVMuJGlkPXFTLmdldEVsZW1lbnRCeUlkLFtzcmUsbHJlLEYkLE1JLFJTLGZyZSxESSxqUyxwcmUsdjUsdWtdLmZvckVhY2goZnVuY3Rpb24oeCl7eXQocVMseCl9KTt2YXIgbXJlPXtmaXQ6ITAsZGlyZWN0ZWQ6ITEscGFkZGluZzozMCxjaXJjbGU6ITEsZ3JpZDohMSxzcGFjaW5nRmFjdG9yOjEuNzUsYm91bmRpbmdCb3g6dm9pZCAwLGF2b2lkT3ZlcmxhcDohMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEscm9vdHM6dm9pZCAwLGRlcHRoU29ydDp2b2lkIDAsYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOmZ1bmN0aW9uKG0sayl7cmV0dXJuITB9LHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06ZnVuY3Rpb24obSxrKXtyZXR1cm4ga319LHZyZT17bWF4aW1hbDohMSxhY3ljbGljOiExfSxwOD1mdW5jdGlvbihtKXtyZXR1cm4gbS5zY3JhdGNoKCJicmVhZHRoZmlyc3QiKX0sUiQ9ZnVuY3Rpb24obSxrKXtyZXR1cm4gbS5zY3JhdGNoKCJicmVhZHRoZmlyc3QiLGspfTtmdW5jdGlvbiBqJCh4KXt0aGlzLm9wdGlvbnM9eXQoe30sbXJlLHZyZSx4KX1qJC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5vcHRpb25zLG09eCxrPXguY3ksUz1tLmVsZXMsTT1TLm5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uKE1pKXtyZXR1cm4hTWkuaXNQYXJlbnQoKX0pLE89UyxOPW0uZGlyZWN0ZWQsJD1tLmFjeWNsaWN8fG0ubWF4aW1hbHx8bS5tYXhpbWFsQWRqdXN0bWVudHM+MCxIPVdkKG0uYm91bmRpbmdCb3g/bS5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6ay53aWR0aCgpLGg6ay5oZWlnaHQoKX0pLHE7aWYoeGUobS5yb290cykpcT1tLnJvb3RzO2Vsc2UgaWYobmUobS5yb290cykpe2Zvcih2YXIgWT1bXSxaPTA7WjxtLnJvb3RzLmxlbmd0aDtaKyspe3ZhciBjZT1tLnJvb3RzW1pdLHZlPWsuZ2V0RWxlbWVudEJ5SWQoY2UpO1kucHVzaCh2ZSl9cT1rLmNvbGxlY3Rpb24oWSl9ZWxzZSBpZihiZShtLnJvb3RzKSlxPWsuJChtLnJvb3RzKTtlbHNlIGlmKE4pcT1NLnJvb3RzKCk7ZWxzZXt2YXIgbWU9Uy5jb21wb25lbnRzKCk7cT1rLmNvbGxlY3Rpb24oKTtmb3IodmFyIExlPWZ1bmN0aW9uKGdpKXt2YXIgZnM9bWVbZ2ldLEZzPWZzLm1heERlZ3JlZSghMSkseHM9ZnMuZmlsdGVyKGZ1bmN0aW9uKFJzKXtyZXR1cm4gUnMuZGVncmVlKCExKT09PUZzfSk7cT1xLmFkZCh4cyl9LF9lPTA7X2U8bWUubGVuZ3RoO19lKyspTGUoX2UpfXZhciBFZT1bXSxCZT17fSxSZT1mdW5jdGlvbihnaSxmcyl7RWVbZnNdPT1udWxsJiYoRWVbZnNdPVtdKTt2YXIgRnM9RWVbZnNdLmxlbmd0aDtFZVtmc10ucHVzaChnaSksUiQoZ2kse2luZGV4OkZzLGRlcHRoOmZzfSl9LFZlPWZ1bmN0aW9uKGdpLGZzKXt2YXIgRnM9cDgoZ2kpLHhzPUZzLmRlcHRoLFJzPUZzLmluZGV4O0VlW3hzXVtSc109bnVsbCxSZShnaSxmcyl9O08uYmZzKHtyb290czpxLGRpcmVjdGVkOm0uZGlyZWN0ZWQsdmlzaXQ6ZnVuY3Rpb24oZ2ksZnMsRnMseHMsUnMpe3ZhciB5bz1naVswXSwkYT15by5pZCgpO1JlKHlvLFJzKSxCZVskYV09ITB9fSk7Zm9yKHZhciBjdD1bXSxzdD0wO3N0PE0ubGVuZ3RoO3N0Kyspe3ZhciBZZT1NW3N0XTtCZVtZZS5pZCgpXXx8Y3QucHVzaChZZSl9dmFyIG10PWZ1bmN0aW9uKGdpKXtmb3IodmFyIGZzPUVlW2dpXSxGcz0wO0ZzPGZzLmxlbmd0aDtGcysrKXt2YXIgeHM9ZnNbRnNdO2lmKHhzPT1udWxsKXtmcy5zcGxpY2UoRnMsMSksRnMtLTtjb250aW51ZX1SJCh4cyx7ZGVwdGg6Z2ksaW5kZXg6RnN9KX19LEplPWZ1bmN0aW9uKCl7Zm9yKHZhciBnaT0wO2dpPEVlLmxlbmd0aDtnaSsrKW10KGdpKX0sTHQ9ZnVuY3Rpb24oZ2ksZnMpe2Zvcih2YXIgRnM9cDgoZ2kpLHhzPWdpLmluY29tZXJzKCkuZmlsdGVyKGZ1bmN0aW9uKEcpe3JldHVybiBHLmlzTm9kZSgpJiZTLmhhcyhHKX0pLFJzPS0xLHlvPWdpLmlkKCksJGE9MDskYTx4cy5sZW5ndGg7JGErKyl7dmFyIERhPXhzWyRhXSxCbz1wOChEYSk7UnM9TWF0aC5tYXgoUnMsQm8uZGVwdGgpfWlmKEZzLmRlcHRoPD1Scyl7aWYoIW0uYWN5Y2xpYyYmZnNbeW9dKXJldHVybiBudWxsO3ZhciB0cj1ScysxO3JldHVybiBWZShnaSx0ciksZnNbeW9dPXRyLCEwfXJldHVybiExfTtpZihOJiYkKXt2YXIgTXQ9W10sdXQ9e30sV3Q9ZnVuY3Rpb24oZ2kpe3JldHVybiBNdC5wdXNoKGdpKX0sVHQ9ZnVuY3Rpb24oKXtyZXR1cm4gTXQuc2hpZnQoKX07Zm9yKE0uZm9yRWFjaChmdW5jdGlvbihNaSl7cmV0dXJuIE10LnB1c2goTWkpfSk7TXQubGVuZ3RoPjA7KXt2YXIgX249VHQoKSxobj1MdChfbix1dCk7aWYoaG4pX24ub3V0Z29lcnMoKS5maWx0ZXIoZnVuY3Rpb24oTWkpe3JldHVybiBNaS5pc05vZGUoKSYmUy5oYXMoTWkpfSkuZm9yRWFjaChXdCk7ZWxzZSBpZihobj09PW51bGwpe2h1KCJEZXRlY3RlZCBkb3VibGUgbWF4aW1hbCBzaGlmdCBmb3Igbm9kZSBgIitfbi5pZCgpKyJgLiAgQmFpbGluZyBtYXhpbWFsIGFkanVzdG1lbnQgZHVlIHRvIGN5Y2xlLiAgVXNlIGBvcHRpb25zLm1heGltYWw6IHRydWVgIG9ubHkgb24gREFHcy4iKTticmVha319fUplKCk7dmFyIFl0PTA7aWYobS5hdm9pZE92ZXJsYXApZm9yKHZhciBEbj0wO0RuPE0ubGVuZ3RoO0RuKyspe3ZhciBpcj1NW0RuXSx2cj1pci5sYXlvdXREaW1lbnNpb25zKG0pLE5uPXZyLncscHI9dnIuaDtZdD1NYXRoLm1heChZdCxObixwcil9dmFyIEVyPXt9LE1yPWZ1bmN0aW9uKGdpKXtpZihFcltnaS5pZCgpXSlyZXR1cm4gRXJbZ2kuaWQoKV07Zm9yKHZhciBmcz1wOChnaSkuZGVwdGgsRnM9Z2kubmVpZ2hib3Job29kKCkseHM9MCxScz0wLHlvPTA7eW88RnMubGVuZ3RoO3lvKyspe3ZhciAkYT1Gc1t5b107aWYoISgkYS5pc0VkZ2UoKXx8JGEuaXNQYXJlbnQoKXx8IU0uaGFzKCRhKSkpe3ZhciBEYT1wOCgkYSk7aWYoRGEhPW51bGwpe3ZhciBCbz1EYS5pbmRleCx0cj1EYS5kZXB0aDtpZighKEJvPT1udWxsfHx0cj09bnVsbCkpe3ZhciBHPUVlW3RyXS5sZW5ndGg7dHI8ZnMmJih4cys9Qm8vRyxScysrKX19fX1yZXR1cm4gUnM9TWF0aC5tYXgoMSxScykseHM9eHMvUnMsUnM9PT0wJiYoeHM9MCksRXJbZ2kuaWQoKV09eHMseHN9LENyPWZ1bmN0aW9uKGdpLGZzKXt2YXIgRnM9TXIoZ2kpLHhzPU1yKGZzKSxScz1Gcy14cztyZXR1cm4gUnM9PT0wP2h0KGdpLmlkKCksZnMuaWQoKSk6UnN9O20uZGVwdGhTb3J0IT09dm9pZCAwJiYoQ3I9bS5kZXB0aFNvcnQpO2Zvcih2YXIgT3I9MDtPcjxFZS5sZW5ndGg7T3IrKylFZVtPcl0uc29ydChDciksbXQoT3IpO2Zvcih2YXIgV249W10sYnI9MDticjxjdC5sZW5ndGg7YnIrKylXbi5wdXNoKGN0W2JyXSk7RWUudW5zaGlmdChXbiksSmUoKTtmb3IodmFyIFNyPTAsTnI9MDtOcjxFZS5sZW5ndGg7TnIrKylTcj1NYXRoLm1heChFZVtOcl0ubGVuZ3RoLFNyKTt2YXIgU2k9e3g6SC54MStILncvMix5OkgueDErSC5oLzJ9LHlzPUVlLnJlZHVjZShmdW5jdGlvbihNaSxnaSl7cmV0dXJuIE1hdGgubWF4KE1pLGdpLmxlbmd0aCl9LDApLHBhPWZ1bmN0aW9uKGdpKXt2YXIgZnM9cDgoZ2kpLEZzPWZzLmRlcHRoLHhzPWZzLmluZGV4LFJzPUVlW0ZzXS5sZW5ndGgseW89TWF0aC5tYXgoSC53LygobS5ncmlkP3lzOlJzKSsxKSxZdCksJGE9TWF0aC5tYXgoSC5oLyhFZS5sZW5ndGgrMSksWXQpLERhPU1hdGgubWluKEgudy8yL0VlLmxlbmd0aCxILmgvMi9FZS5sZW5ndGgpO2lmKERhPU1hdGgubWF4KERhLFl0KSxtLmNpcmNsZSl7dmFyIHRyPURhKkZzK0RhLShFZS5sZW5ndGg+MCYmRWVbMF0ubGVuZ3RoPD0zP0RhLzI6MCksRz0yKk1hdGguUEkvRWVbRnNdLmxlbmd0aCp4cztyZXR1cm4gRnM9PT0wJiZFZVswXS5sZW5ndGg9PT0xJiYodHI9MSkse3g6U2kueCt0cipNYXRoLmNvcyhHKSx5OlNpLnkrdHIqTWF0aC5zaW4oRyl9fWVsc2V7dmFyIEJvPXt4OlNpLngrKHhzKzEtKFJzKzEpLzIpKnlvLHk6KEZzKzEpKiRhfTtyZXR1cm4gQm99fTtyZXR1cm4gUy5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLG0scGEpLHRoaXN9O3ZhciB3cmU9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLHNwYWNpbmdGYWN0b3I6dm9pZCAwLHJhZGl1czp2b2lkIDAsc3RhcnRBbmdsZTozLzIqTWF0aC5QSSxzd2VlcDp2b2lkIDAsY2xvY2t3aXNlOiEwLHNvcnQ6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpmdW5jdGlvbihtLGspe3JldHVybiEwfSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOmZ1bmN0aW9uKG0sayl7cmV0dXJuIGt9fTtmdW5jdGlvbiAkJCh4KXt0aGlzLm9wdGlvbnM9eXQoe30sd3JlLHgpfSQkLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgeD10aGlzLm9wdGlvbnMsbT14LGs9eC5jeSxTPW0uZWxlcyxNPW0uY291bnRlcmNsb2Nrd2lzZSE9PXZvaWQgMD8hbS5jb3VudGVyY2xvY2t3aXNlOm0uY2xvY2t3aXNlLE89Uy5ub2RlcygpLm5vdCgiOnBhcmVudCIpO20uc29ydCYmKE89Ty5zb3J0KG0uc29ydCkpO2Zvcih2YXIgTj1XZChtLmJvdW5kaW5nQm94P20uYm91bmRpbmdCb3g6e3gxOjAseTE6MCx3Omsud2lkdGgoKSxoOmsuaGVpZ2h0KCl9KSwkPXt4Ok4ueDErTi53LzIseTpOLnkxK04uaC8yfSxIPW0uc3dlZXA9PT12b2lkIDA/MipNYXRoLlBJLTIqTWF0aC5QSS9PLmxlbmd0aDptLnN3ZWVwLHE9SC9NYXRoLm1heCgxLE8ubGVuZ3RoLTEpLFksWj0wLGNlPTA7Y2U8Ty5sZW5ndGg7Y2UrKyl7dmFyIHZlPU9bY2VdLG1lPXZlLmxheW91dERpbWVuc2lvbnMobSksTGU9bWUudyxfZT1tZS5oO1o9TWF0aC5tYXgoWixMZSxfZSl9aWYoWChtLnJhZGl1cyk/WT1tLnJhZGl1czpPLmxlbmd0aDw9MT9ZPTA6WT1NYXRoLm1pbihOLmgsTi53KS8yLVosTy5sZW5ndGg+MSYmbS5hdm9pZE92ZXJsYXApe1oqPTEuNzU7dmFyIEVlPU1hdGguY29zKHEpLU1hdGguY29zKDApLEJlPU1hdGguc2luKHEpLU1hdGguc2luKDApLFJlPU1hdGguc3FydChaKlovKEVlKkVlK0JlKkJlKSk7WT1NYXRoLm1heChSZSxZKX12YXIgVmU9ZnVuY3Rpb24oc3QsWWUpe3ZhciBtdD1tLnN0YXJ0QW5nbGUrWWUqcSooTT8xOi0xKSxKZT1ZKk1hdGguY29zKG10KSxMdD1ZKk1hdGguc2luKG10KSxNdD17eDokLngrSmUseTokLnkrTHR9O3JldHVybiBNdH07cmV0dXJuIFMubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcyxtLFZlKSx0aGlzfTt2YXIgeXJlPXtmaXQ6ITAscGFkZGluZzozMCxzdGFydEFuZ2xlOjMvMipNYXRoLlBJLHN3ZWVwOnZvaWQgMCxjbG9ja3dpc2U6ITAsZXF1aWRpc3RhbnQ6ITEsbWluTm9kZVNwYWNpbmc6MTAsYm91bmRpbmdCb3g6dm9pZCAwLGF2b2lkT3ZlcmxhcDohMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEsaGVpZ2h0OnZvaWQgMCx3aWR0aDp2b2lkIDAsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsY29uY2VudHJpYzpmdW5jdGlvbihtKXtyZXR1cm4gbS5kZWdyZWUoKX0sbGV2ZWxXaWR0aDpmdW5jdGlvbihtKXtyZXR1cm4gbS5tYXhEZWdyZWUoKS80fSxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24obSxrKXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihtLGspe3JldHVybiBrfX07ZnVuY3Rpb24geiQoeCl7dGhpcy5vcHRpb25zPXl0KHt9LHlyZSx4KX16JC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7Zm9yKHZhciB4PXRoaXMub3B0aW9ucyxtPXgsaz1tLmNvdW50ZXJjbG9ja3dpc2UhPT12b2lkIDA/IW0uY291bnRlcmNsb2Nrd2lzZTptLmNsb2Nrd2lzZSxTPXguY3ksTT1tLmVsZXMsTz1NLm5vZGVzKCkubm90KCI6cGFyZW50IiksTj1XZChtLmJvdW5kaW5nQm94P20uYm91bmRpbmdCb3g6e3gxOjAseTE6MCx3OlMud2lkdGgoKSxoOlMuaGVpZ2h0KCl9KSwkPXt4Ok4ueDErTi53LzIseTpOLnkxK04uaC8yfSxIPVtdLHE9MCxZPTA7WTxPLmxlbmd0aDtZKyspe3ZhciBaPU9bWV0sY2U9dm9pZCAwO2NlPW0uY29uY2VudHJpYyhaKSxILnB1c2goe3ZhbHVlOmNlLG5vZGU6Wn0pLFouX3ByaXZhdGUuc2NyYXRjaC5jb25jZW50cmljPWNlfU8udXBkYXRlU3R5bGUoKTtmb3IodmFyIHZlPTA7dmU8Ty5sZW5ndGg7dmUrKyl7dmFyIG1lPU9bdmVdLExlPW1lLmxheW91dERpbWVuc2lvbnMobSk7cT1NYXRoLm1heChxLExlLncsTGUuaCl9SC5zb3J0KGZ1bmN0aW9uKE1pLGdpKXtyZXR1cm4gZ2kudmFsdWUtTWkudmFsdWV9KTtmb3IodmFyIF9lPW0ubGV2ZWxXaWR0aChPKSxFZT1bW11dLEJlPUVlWzBdLFJlPTA7UmU8SC5sZW5ndGg7UmUrKyl7dmFyIFZlPUhbUmVdO2lmKEJlLmxlbmd0aD4wKXt2YXIgY3Q9TWF0aC5hYnMoQmVbMF0udmFsdWUtVmUudmFsdWUpO2N0Pj1fZSYmKEJlPVtdLEVlLnB1c2goQmUpKX1CZS5wdXNoKFZlKX12YXIgc3Q9cSttLm1pbk5vZGVTcGFjaW5nO2lmKCFtLmF2b2lkT3ZlcmxhcCl7dmFyIFllPUVlLmxlbmd0aD4wJiZFZVswXS5sZW5ndGg+MSxtdD1NYXRoLm1pbihOLncsTi5oKS8yLXN0LEplPW10LyhFZS5sZW5ndGgrWWU/MTowKTtzdD1NYXRoLm1pbihzdCxKZSl9Zm9yKHZhciBMdD0wLE10PTA7TXQ8RWUubGVuZ3RoO010Kyspe3ZhciB1dD1FZVtNdF0sV3Q9bS5zd2VlcD09PXZvaWQgMD8yKk1hdGguUEktMipNYXRoLlBJL3V0Lmxlbmd0aDptLnN3ZWVwLFR0PXV0LmRUaGV0YT1XdC9NYXRoLm1heCgxLHV0Lmxlbmd0aC0xKTtpZih1dC5sZW5ndGg+MSYmbS5hdm9pZE92ZXJsYXApe3ZhciBfbj1NYXRoLmNvcyhUdCktTWF0aC5jb3MoMCksaG49TWF0aC5zaW4oVHQpLU1hdGguc2luKDApLFl0PU1hdGguc3FydChzdCpzdC8oX24qX24raG4qaG4pKTtMdD1NYXRoLm1heChZdCxMdCl9dXQucj1MdCxMdCs9c3R9aWYobS5lcXVpZGlzdGFudCl7Zm9yKHZhciBEbj0wLGlyPTAsdnI9MDt2cjxFZS5sZW5ndGg7dnIrKyl7dmFyIE5uPUVlW3ZyXSxwcj1Obi5yLWlyO0RuPU1hdGgubWF4KERuLHByKX1pcj0wO2Zvcih2YXIgRXI9MDtFcjxFZS5sZW5ndGg7RXIrKyl7dmFyIE1yPUVlW0VyXTtFcj09PTAmJihpcj1Nci5yKSxNci5yPWlyLGlyKz1Ebn19Zm9yKHZhciBDcj17fSxPcj0wO09yPEVlLmxlbmd0aDtPcisrKWZvcih2YXIgV249RWVbT3JdLGJyPVduLmRUaGV0YSxTcj1Xbi5yLE5yPTA7TnI8V24ubGVuZ3RoO05yKyspe3ZhciBTaT1XbltOcl0seXM9bS5zdGFydEFuZ2xlKyhrPzE6LTEpKmJyKk5yLHBhPXt4OiQueCtTcipNYXRoLmNvcyh5cykseTokLnkrU3IqTWF0aC5zaW4oeXMpfTtDcltTaS5ub2RlLmlkKCldPXBhfXJldHVybiBNLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsbSxmdW5jdGlvbihNaSl7dmFyIGdpPU1pLmlkKCk7cmV0dXJuIENyW2dpXX0pLHRoaXN9O3ZhciBOSSx4cmU9e3JlYWR5OmZ1bmN0aW9uKCl7fSxzdG9wOmZ1bmN0aW9uKCl7fSxhbmltYXRlOiEwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0aW9uRHVyYXRpb246dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24obSxrKXtyZXR1cm4hMH0sYW5pbWF0aW9uVGhyZXNob2xkOjI1MCxyZWZyZXNoOjIwLGZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEscmFuZG9taXplOiExLGNvbXBvbmVudFNwYWNpbmc6NDAsbm9kZVJlcHVsc2lvbjpmdW5jdGlvbihtKXtyZXR1cm4gMjA0OH0sbm9kZU92ZXJsYXA6NCxpZGVhbEVkZ2VMZW5ndGg6ZnVuY3Rpb24obSl7cmV0dXJuIDMyfSxlZGdlRWxhc3RpY2l0eTpmdW5jdGlvbihtKXtyZXR1cm4gMzJ9LG5lc3RpbmdGYWN0b3I6MS4yLGdyYXZpdHk6MSxudW1JdGVyOjFlMyxpbml0aWFsVGVtcDoxZTMsY29vbGluZ0ZhY3RvcjouOTksbWluVGVtcDoxfTtmdW5jdGlvbiBIUyh4KXt0aGlzLm9wdGlvbnM9eXQoe30seHJlLHgpLHRoaXMub3B0aW9ucy5sYXlvdXQ9dGhpczt2YXIgbT10aGlzLm9wdGlvbnMuZWxlcy5ub2RlcygpLGs9dGhpcy5vcHRpb25zLmVsZXMuZWRnZXMoKSxTPWsuZmlsdGVyKGZ1bmN0aW9uKE0pe3ZhciBPPU0uc291cmNlKCkuZGF0YSgiaWQiKSxOPU0udGFyZ2V0KCkuZGF0YSgiaWQiKSwkPW0uc29tZShmdW5jdGlvbihxKXtyZXR1cm4gcS5kYXRhKCJpZCIpPT09T30pLEg9bS5zb21lKGZ1bmN0aW9uKHEpe3JldHVybiBxLmRhdGEoImlkIik9PT1OfSk7cmV0dXJuISR8fCFIfSk7dGhpcy5vcHRpb25zLmVsZXM9dGhpcy5vcHRpb25zLmVsZXMubm90KFMpfUhTLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgeD10aGlzLm9wdGlvbnMsbT14LmN5LGs9dGhpcztrLnN0b3BwZWQ9ITEsKHguYW5pbWF0ZT09PSEwfHx4LmFuaW1hdGU9PT0hMSkmJmsuZW1pdCh7dHlwZToibGF5b3V0c3RhcnQiLGxheW91dDprfSkseC5kZWJ1Zz09PSEwP05JPSEwOk5JPSExO3ZhciBTPWtyZShtLGsseCk7TkkmJkNyZShTKSx4LnJhbmRvbWl6ZSYmU3JlKFMpO3ZhciBNPUJwKCksTz1mdW5jdGlvbigpe19yZShTLG0seCkseC5maXQ9PT0hMCYmbS5maXQoeC5wYWRkaW5nKX0sTj1mdW5jdGlvbihjZSl7cmV0dXJuIShrLnN0b3BwZWR8fGNlPj14Lm51bUl0ZXJ8fChBcmUoUyx4KSxTLnRlbXBlcmF0dXJlPVMudGVtcGVyYXR1cmUqeC5jb29saW5nRmFjdG9yLFMudGVtcGVyYXR1cmU8eC5taW5UZW1wKSl9LCQ9ZnVuY3Rpb24oKXtpZih4LmFuaW1hdGU9PT0hMHx8eC5hbmltYXRlPT09ITEpTygpLGsub25lKCJsYXlvdXRzdG9wIix4LnN0b3ApLGsuZW1pdCh7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0Omt9KTtlbHNle3ZhciBjZT14LmVsZXMubm9kZXMoKSx2ZT1xJChTLHgsY2UpO2NlLmxheW91dFBvc2l0aW9ucyhrLHgsdmUpfX0sSD0wLHE9ITA7aWYoeC5hbmltYXRlPT09ITApe3ZhciBZPWZ1bmN0aW9uIFooKXtmb3IodmFyIGNlPTA7cSYmY2U8eC5yZWZyZXNoOylxPU4oSCksSCsrLGNlKys7aWYoIXEpViQoUyx4KSwkKCk7ZWxzZXt2YXIgdmU9QnAoKTt2ZS1NPj14LmFuaW1hdGlvblRocmVzaG9sZCYmTygpLHowKFopfX07WSgpfWVsc2V7Zm9yKDtxOylxPU4oSCksSCsrO1YkKFMseCksJCgpfXJldHVybiB0aGlzfSxIUy5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0b3BwZWQ9ITAsdGhpcy50aHJlYWQmJnRoaXMudGhyZWFkLnN0b3AoKSx0aGlzLmVtaXQoImxheW91dHN0b3AiKSx0aGlzfSxIUy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRocmVhZCYmdGhpcy50aHJlYWQuc3RvcCgpLHRoaXN9O3ZhciBrcmU9ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT1TLmVsZXMuZWRnZXMoKSxPPVMuZWxlcy5ub2RlcygpLE49V2QoUy5ib3VuZGluZ0JveD9TLmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzptLndpZHRoKCksaDptLmhlaWdodCgpfSksJD17aXNDb21wb3VuZDptLmhhc0NvbXBvdW5kTm9kZXMoKSxsYXlvdXROb2RlczpbXSxpZFRvSW5kZXg6e30sbm9kZVNpemU6Ty5zaXplKCksZ3JhcGhTZXQ6W10saW5kZXhUb0dyYXBoOltdLGxheW91dEVkZ2VzOltdLGVkZ2VTaXplOk0uc2l6ZSgpLHRlbXBlcmF0dXJlOlMuaW5pdGlhbFRlbXAsY2xpZW50V2lkdGg6Ti53LGNsaWVudEhlaWdodDpOLmgsYm91bmRpbmdCb3g6Tn0sSD1TLmVsZXMuY29tcG9uZW50cygpLHE9e30sWT0wO1k8SC5sZW5ndGg7WSsrKWZvcih2YXIgWj1IW1ldLGNlPTA7Y2U8Wi5sZW5ndGg7Y2UrKyl7dmFyIHZlPVpbY2VdO3FbdmUuaWQoKV09WX1mb3IodmFyIFk9MDtZPCQubm9kZVNpemU7WSsrKXt2YXIgbWU9T1tZXSxMZT1tZS5sYXlvdXREaW1lbnNpb25zKFMpLF9lPXt9O19lLmlzTG9ja2VkPW1lLmxvY2tlZCgpLF9lLmlkPW1lLmRhdGEoImlkIiksX2UucGFyZW50SWQ9bWUuZGF0YSgicGFyZW50IiksX2UuY21wdElkPXFbbWUuaWQoKV0sX2UuY2hpbGRyZW49W10sX2UucG9zaXRpb25YPW1lLnBvc2l0aW9uKCJ4IiksX2UucG9zaXRpb25ZPW1lLnBvc2l0aW9uKCJ5IiksX2Uub2Zmc2V0WD0wLF9lLm9mZnNldFk9MCxfZS5oZWlnaHQ9TGUudyxfZS53aWR0aD1MZS5oLF9lLm1heFg9X2UucG9zaXRpb25YK19lLndpZHRoLzIsX2UubWluWD1fZS5wb3NpdGlvblgtX2Uud2lkdGgvMixfZS5tYXhZPV9lLnBvc2l0aW9uWStfZS5oZWlnaHQvMixfZS5taW5ZPV9lLnBvc2l0aW9uWS1fZS5oZWlnaHQvMixfZS5wYWRMZWZ0PXBhcnNlRmxvYXQobWUuc3R5bGUoInBhZGRpbmciKSksX2UucGFkUmlnaHQ9cGFyc2VGbG9hdChtZS5zdHlsZSgicGFkZGluZyIpKSxfZS5wYWRUb3A9cGFyc2VGbG9hdChtZS5zdHlsZSgicGFkZGluZyIpKSxfZS5wYWRCb3R0b209cGFyc2VGbG9hdChtZS5zdHlsZSgicGFkZGluZyIpKSxfZS5ub2RlUmVwdWxzaW9uPWFlKFMubm9kZVJlcHVsc2lvbik/Uy5ub2RlUmVwdWxzaW9uKG1lKTpTLm5vZGVSZXB1bHNpb24sJC5sYXlvdXROb2Rlcy5wdXNoKF9lKSwkLmlkVG9JbmRleFtfZS5pZF09WX1mb3IodmFyIEVlPVtdLEJlPTAsUmU9LTEsVmU9W10sWT0wO1k8JC5ub2RlU2l6ZTtZKyspe3ZhciBtZT0kLmxheW91dE5vZGVzW1ldLGN0PW1lLnBhcmVudElkO2N0IT1udWxsPyQubGF5b3V0Tm9kZXNbJC5pZFRvSW5kZXhbY3RdXS5jaGlsZHJlbi5wdXNoKG1lLmlkKTooRWVbKytSZV09bWUuaWQsVmUucHVzaChtZS5pZCkpfWZvcigkLmdyYXBoU2V0LnB1c2goVmUpO0JlPD1SZTspe3ZhciBzdD1FZVtCZSsrXSxZZT0kLmlkVG9JbmRleFtzdF0sdmU9JC5sYXlvdXROb2Rlc1tZZV0sbXQ9dmUuY2hpbGRyZW47aWYobXQubGVuZ3RoPjApeyQuZ3JhcGhTZXQucHVzaChtdCk7Zm9yKHZhciBZPTA7WTxtdC5sZW5ndGg7WSsrKUVlWysrUmVdPW10W1ldfX1mb3IodmFyIFk9MDtZPCQuZ3JhcGhTZXQubGVuZ3RoO1krKylmb3IodmFyIEplPSQuZ3JhcGhTZXRbWV0sY2U9MDtjZTxKZS5sZW5ndGg7Y2UrKyl7dmFyIEx0PSQuaWRUb0luZGV4W0plW2NlXV07JC5pbmRleFRvR3JhcGhbTHRdPVl9Zm9yKHZhciBZPTA7WTwkLmVkZ2VTaXplO1krKyl7dmFyIE10PU1bWV0sdXQ9e307dXQuaWQ9TXQuZGF0YSgiaWQiKSx1dC5zb3VyY2VJZD1NdC5kYXRhKCJzb3VyY2UiKSx1dC50YXJnZXRJZD1NdC5kYXRhKCJ0YXJnZXQiKTt2YXIgV3Q9YWUoUy5pZGVhbEVkZ2VMZW5ndGgpP1MuaWRlYWxFZGdlTGVuZ3RoKE10KTpTLmlkZWFsRWRnZUxlbmd0aCxUdD1hZShTLmVkZ2VFbGFzdGljaXR5KT9TLmVkZ2VFbGFzdGljaXR5KE10KTpTLmVkZ2VFbGFzdGljaXR5LF9uPSQuaWRUb0luZGV4W3V0LnNvdXJjZUlkXSxobj0kLmlkVG9JbmRleFt1dC50YXJnZXRJZF0sWXQ9JC5pbmRleFRvR3JhcGhbX25dLERuPSQuaW5kZXhUb0dyYXBoW2huXTtpZihZdCE9RG4pe2Zvcih2YXIgaXI9RXJlKHV0LnNvdXJjZUlkLHV0LnRhcmdldElkLCQpLHZyPSQuZ3JhcGhTZXRbaXJdLE5uPTAsX2U9JC5sYXlvdXROb2Rlc1tfbl07dnIuaW5kZXhPZihfZS5pZCk9PT0tMTspX2U9JC5sYXlvdXROb2Rlc1skLmlkVG9JbmRleFtfZS5wYXJlbnRJZF1dLE5uKys7Zm9yKF9lPSQubGF5b3V0Tm9kZXNbaG5dO3ZyLmluZGV4T2YoX2UuaWQpPT09LTE7KV9lPSQubGF5b3V0Tm9kZXNbJC5pZFRvSW5kZXhbX2UucGFyZW50SWRdXSxObisrO1d0Kj1ObipTLm5lc3RpbmdGYWN0b3J9dXQuaWRlYWxMZW5ndGg9V3QsdXQuZWxhc3RpY2l0eT1UdCwkLmxheW91dEVkZ2VzLnB1c2godXQpfXJldHVybiAkfSxFcmU9ZnVuY3Rpb24obSxrLFMpe3ZhciBNPVRyZShtLGssMCxTKTtyZXR1cm4gMj5NLmNvdW50PzA6TS5ncmFwaH0sVHJlPWZ1bmN0aW9uIHgobSxrLFMsTSl7dmFyIE89TS5ncmFwaFNldFtTXTtpZigtMTxPLmluZGV4T2YobSkmJi0xPE8uaW5kZXhPZihrKSlyZXR1cm57Y291bnQ6MixncmFwaDpTfTtmb3IodmFyIE49MCwkPTA7JDxPLmxlbmd0aDskKyspe3ZhciBIPU9bJF0scT1NLmlkVG9JbmRleFtIXSxZPU0ubGF5b3V0Tm9kZXNbcV0uY2hpbGRyZW47aWYoWS5sZW5ndGghPT0wKXt2YXIgWj1NLmluZGV4VG9HcmFwaFtNLmlkVG9JbmRleFtZWzBdXV0sY2U9eChtLGssWixNKTtpZihjZS5jb3VudCE9PTApaWYoY2UuY291bnQ9PT0xKXtpZihOKyssTj09PTIpYnJlYWt9ZWxzZSByZXR1cm4gY2V9fXJldHVybntjb3VudDpOLGdyYXBoOlN9fSxDcmUsU3JlPWZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPW0uY2xpZW50V2lkdGgsTT1tLmNsaWVudEhlaWdodCxPPTA7TzxtLm5vZGVTaXplO08rKyl7dmFyIE49bS5sYXlvdXROb2Rlc1tPXTtOLmNoaWxkcmVuLmxlbmd0aD09PTAmJiFOLmlzTG9ja2VkJiYoTi5wb3NpdGlvblg9TWF0aC5yYW5kb20oKSpTLE4ucG9zaXRpb25ZPU1hdGgucmFuZG9tKCkqTSl9fSxxJD1mdW5jdGlvbihtLGssUyl7dmFyIE09bS5ib3VuZGluZ0JveCxPPXt4MToxLzAseDI6LTEvMCx5MToxLzAseTI6LTEvMH07cmV0dXJuIGsuYm91bmRpbmdCb3gmJihTLmZvckVhY2goZnVuY3Rpb24oTil7dmFyICQ9bS5sYXlvdXROb2Rlc1ttLmlkVG9JbmRleFtOLmRhdGEoImlkIildXTtPLngxPU1hdGgubWluKE8ueDEsJC5wb3NpdGlvblgpLE8ueDI9TWF0aC5tYXgoTy54MiwkLnBvc2l0aW9uWCksTy55MT1NYXRoLm1pbihPLnkxLCQucG9zaXRpb25ZKSxPLnkyPU1hdGgubWF4KE8ueTIsJC5wb3NpdGlvblkpfSksTy53PU8ueDItTy54MSxPLmg9Ty55Mi1PLnkxKSxmdW5jdGlvbihOLCQpe3ZhciBIPW0ubGF5b3V0Tm9kZXNbbS5pZFRvSW5kZXhbTi5kYXRhKCJpZCIpXV07aWYoay5ib3VuZGluZ0JveCl7dmFyIHE9KEgucG9zaXRpb25YLU8ueDEpL08udyxZPShILnBvc2l0aW9uWS1PLnkxKS9PLmg7cmV0dXJue3g6TS54MStxKk0udyx5Ok0ueTErWSpNLmh9fWVsc2UgcmV0dXJue3g6SC5wb3NpdGlvblgseTpILnBvc2l0aW9uWX19fSxfcmU9ZnVuY3Rpb24obSxrLFMpe3ZhciBNPVMubGF5b3V0LE89Uy5lbGVzLm5vZGVzKCksTj1xJChtLFMsTyk7Ty5wb3NpdGlvbnMoTiksbS5yZWFkeSE9PSEwJiYobS5yZWFkeT0hMCxNLm9uZSgibGF5b3V0cmVhZHkiLFMucmVhZHkpLE0uZW1pdCh7dHlwZToibGF5b3V0cmVhZHkiLGxheW91dDp0aGlzfSkpfSxBcmU9ZnVuY3Rpb24obSxrLFMpe0xyZShtLGspLElyZShtKSxPcmUobSxrKSxOcmUobSksUHJlKG0pfSxMcmU9ZnVuY3Rpb24obSxrKXtmb3IodmFyIFM9MDtTPG0uZ3JhcGhTZXQubGVuZ3RoO1MrKylmb3IodmFyIE09bS5ncmFwaFNldFtTXSxPPU0ubGVuZ3RoLE49MDtOPE87TisrKWZvcih2YXIgJD1tLmxheW91dE5vZGVzW20uaWRUb0luZGV4W01bTl1dXSxIPU4rMTtIPE87SCsrKXt2YXIgcT1tLmxheW91dE5vZGVzW20uaWRUb0luZGV4W01bSF1dXTtNcmUoJCxxLG0sayl9fSxIJD1mdW5jdGlvbihtKXtyZXR1cm4tbSsyKm0qTWF0aC5yYW5kb20oKX0sTXJlPWZ1bmN0aW9uKG0sayxTLE0pe3ZhciBPPW0uY21wdElkLE49ay5jbXB0SWQ7aWYoIShPIT09TiYmIVMuaXNDb21wb3VuZCkpe3ZhciAkPWsucG9zaXRpb25YLW0ucG9zaXRpb25YLEg9ay5wb3NpdGlvblktbS5wb3NpdGlvblkscT0xOyQ9PT0wJiZIPT09MCYmKCQ9SCQocSksSD1IJChxKSk7dmFyIFk9RHJlKG0saywkLEgpO2lmKFk+MCl2YXIgWj1NLm5vZGVPdmVybGFwKlksY2U9TWF0aC5zcXJ0KCQqJCtIKkgpLHZlPVoqJC9jZSxtZT1aKkgvY2U7ZWxzZSB2YXIgTGU9VlMobSwkLEgpLF9lPVZTKGssLTEqJCwtMSpIKSxFZT1fZS54LUxlLngsQmU9X2UueS1MZS55LFJlPUVlKkVlK0JlKkJlLGNlPU1hdGguc3FydChSZSksWj0obS5ub2RlUmVwdWxzaW9uK2subm9kZVJlcHVsc2lvbikvUmUsdmU9WipFZS9jZSxtZT1aKkJlL2NlO20uaXNMb2NrZWR8fChtLm9mZnNldFgtPXZlLG0ub2Zmc2V0WS09bWUpLGsuaXNMb2NrZWR8fChrLm9mZnNldFgrPXZlLGsub2Zmc2V0WSs9bWUpfX0sRHJlPWZ1bmN0aW9uKG0sayxTLE0pe2lmKFM+MCl2YXIgTz1tLm1heFgtay5taW5YO2Vsc2UgdmFyIE89ay5tYXhYLW0ubWluWDtpZihNPjApdmFyIE49bS5tYXhZLWsubWluWTtlbHNlIHZhciBOPWsubWF4WS1tLm1pblk7cmV0dXJuIE8+PTAmJk4+PTA/TWF0aC5zcXJ0KE8qTytOKk4pOjB9LFZTPWZ1bmN0aW9uKG0sayxTKXt2YXIgTT1tLnBvc2l0aW9uWCxPPW0ucG9zaXRpb25ZLE49bS5oZWlnaHR8fDEsJD1tLndpZHRofHwxLEg9Uy9rLHE9Ti8kLFk9e307cmV0dXJuIGs9PT0wJiYwPFN8fGs9PT0wJiYwPlM/KFkueD1NLFkueT1PK04vMixZKTowPGsmJi0xKnE8PUgmJkg8PXE/KFkueD1NKyQvMixZLnk9TyskKlMvMi9rLFkpOjA+ayYmLTEqcTw9SCYmSDw9cT8oWS54PU0tJC8yLFkueT1PLSQqUy8yL2ssWSk6MDxTJiYoSDw9LTEqcXx8SD49cSk/KFkueD1NK04qay8yL1MsWS55PU8rTi8yLFkpOigwPlMmJihIPD0tMSpxfHxIPj1xKSYmKFkueD1NLU4qay8yL1MsWS55PU8tTi8yKSxZKX0sSXJlPWZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPTA7UzxtLmVkZ2VTaXplO1MrKyl7dmFyIE09bS5sYXlvdXRFZGdlc1tTXSxPPW0uaWRUb0luZGV4W00uc291cmNlSWRdLE49bS5sYXlvdXROb2Rlc1tPXSwkPW0uaWRUb0luZGV4W00udGFyZ2V0SWRdLEg9bS5sYXlvdXROb2Rlc1skXSxxPUgucG9zaXRpb25YLU4ucG9zaXRpb25YLFk9SC5wb3NpdGlvblktTi5wb3NpdGlvblk7aWYoIShxPT09MCYmWT09PTApKXt2YXIgWj1WUyhOLHEsWSksY2U9VlMoSCwtMSpxLC0xKlkpLHZlPWNlLngtWi54LG1lPWNlLnktWi55LExlPU1hdGguc3FydCh2ZSp2ZSttZSptZSksX2U9TWF0aC5wb3coTS5pZGVhbExlbmd0aC1MZSwyKS9NLmVsYXN0aWNpdHk7aWYoTGUhPT0wKXZhciBFZT1fZSp2ZS9MZSxCZT1fZSptZS9MZTtlbHNlIHZhciBFZT0wLEJlPTA7Ti5pc0xvY2tlZHx8KE4ub2Zmc2V0WCs9RWUsTi5vZmZzZXRZKz1CZSksSC5pc0xvY2tlZHx8KEgub2Zmc2V0WC09RWUsSC5vZmZzZXRZLT1CZSl9fX0sT3JlPWZ1bmN0aW9uKG0sayl7aWYoay5ncmF2aXR5IT09MClmb3IodmFyIFM9MSxNPTA7TTxtLmdyYXBoU2V0Lmxlbmd0aDtNKyspe3ZhciBPPW0uZ3JhcGhTZXRbTV0sTj1PLmxlbmd0aDtpZihNPT09MCl2YXIgJD1tLmNsaWVudEhlaWdodC8yLEg9bS5jbGllbnRXaWR0aC8yO2Vsc2UgdmFyIHE9bS5sYXlvdXROb2Rlc1ttLmlkVG9JbmRleFtPWzBdXV0sWT1tLmxheW91dE5vZGVzW20uaWRUb0luZGV4W3EucGFyZW50SWRdXSwkPVkucG9zaXRpb25YLEg9WS5wb3NpdGlvblk7Zm9yKHZhciBaPTA7WjxOO1orKyl7dmFyIGNlPW0ubGF5b3V0Tm9kZXNbbS5pZFRvSW5kZXhbT1taXV1dO2lmKCFjZS5pc0xvY2tlZCl7dmFyIHZlPSQtY2UucG9zaXRpb25YLG1lPUgtY2UucG9zaXRpb25ZLExlPU1hdGguc3FydCh2ZSp2ZSttZSptZSk7aWYoTGU+Uyl7dmFyIF9lPWsuZ3Jhdml0eSp2ZS9MZSxFZT1rLmdyYXZpdHkqbWUvTGU7Y2Uub2Zmc2V0WCs9X2UsY2Uub2Zmc2V0WSs9RWV9fX19fSxOcmU9ZnVuY3Rpb24obSxrKXt2YXIgUz1bXSxNPTAsTz0tMTtmb3IoUy5wdXNoLmFwcGx5KFMsbS5ncmFwaFNldFswXSksTys9bS5ncmFwaFNldFswXS5sZW5ndGg7TTw9Tzspe3ZhciBOPVNbTSsrXSwkPW0uaWRUb0luZGV4W05dLEg9bS5sYXlvdXROb2Rlc1skXSxxPUguY2hpbGRyZW47aWYoMDxxLmxlbmd0aCYmIUguaXNMb2NrZWQpe2Zvcih2YXIgWT1ILm9mZnNldFgsWj1ILm9mZnNldFksY2U9MDtjZTxxLmxlbmd0aDtjZSsrKXt2YXIgdmU9bS5sYXlvdXROb2Rlc1ttLmlkVG9JbmRleFtxW2NlXV1dO3ZlLm9mZnNldFgrPVksdmUub2Zmc2V0WSs9WixTWysrT109cVtjZV19SC5vZmZzZXRYPTAsSC5vZmZzZXRZPTB9fX0sUHJlPWZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPTA7UzxtLm5vZGVTaXplO1MrKyl7dmFyIE09bS5sYXlvdXROb2Rlc1tTXTswPE0uY2hpbGRyZW4ubGVuZ3RoJiYoTS5tYXhYPXZvaWQgMCxNLm1pblg9dm9pZCAwLE0ubWF4WT12b2lkIDAsTS5taW5ZPXZvaWQgMCl9Zm9yKHZhciBTPTA7UzxtLm5vZGVTaXplO1MrKyl7dmFyIE09bS5sYXlvdXROb2Rlc1tTXTtpZighKDA8TS5jaGlsZHJlbi5sZW5ndGh8fE0uaXNMb2NrZWQpKXt2YXIgTz1CcmUoTS5vZmZzZXRYLE0ub2Zmc2V0WSxtLnRlbXBlcmF0dXJlKTtNLnBvc2l0aW9uWCs9Ty54LE0ucG9zaXRpb25ZKz1PLnksTS5vZmZzZXRYPTAsTS5vZmZzZXRZPTAsTS5taW5YPU0ucG9zaXRpb25YLU0ud2lkdGgsTS5tYXhYPU0ucG9zaXRpb25YK00ud2lkdGgsTS5taW5ZPU0ucG9zaXRpb25ZLU0uaGVpZ2h0LE0ubWF4WT1NLnBvc2l0aW9uWStNLmhlaWdodCxGcmUoTSxtKX19Zm9yKHZhciBTPTA7UzxtLm5vZGVTaXplO1MrKyl7dmFyIE09bS5sYXlvdXROb2Rlc1tTXTswPE0uY2hpbGRyZW4ubGVuZ3RoJiYhTS5pc0xvY2tlZCYmKE0ucG9zaXRpb25YPShNLm1heFgrTS5taW5YKS8yLE0ucG9zaXRpb25ZPShNLm1heFkrTS5taW5ZKS8yLE0ud2lkdGg9TS5tYXhYLU0ubWluWCxNLmhlaWdodD1NLm1heFktTS5taW5ZKX19LEJyZT1mdW5jdGlvbihtLGssUyl7dmFyIE09TWF0aC5zcXJ0KG0qbStrKmspO2lmKE0+Uyl2YXIgTz17eDpTKm0vTSx5OlMqay9NfTtlbHNlIHZhciBPPXt4Om0seTprfTtyZXR1cm4gT30sRnJlPWZ1bmN0aW9uIHgobSxrKXt2YXIgUz1tLnBhcmVudElkO2lmKFMhPW51bGwpe3ZhciBNPWsubGF5b3V0Tm9kZXNbay5pZFRvSW5kZXhbU11dLE89ITE7aWYoKE0ubWF4WD09bnVsbHx8bS5tYXhYK00ucGFkUmlnaHQ+TS5tYXhYKSYmKE0ubWF4WD1tLm1heFgrTS5wYWRSaWdodCxPPSEwKSwoTS5taW5YPT1udWxsfHxtLm1pblgtTS5wYWRMZWZ0PE0ubWluWCkmJihNLm1pblg9bS5taW5YLU0ucGFkTGVmdCxPPSEwKSwoTS5tYXhZPT1udWxsfHxtLm1heFkrTS5wYWRCb3R0b20+TS5tYXhZKSYmKE0ubWF4WT1tLm1heFkrTS5wYWRCb3R0b20sTz0hMCksKE0ubWluWT09bnVsbHx8bS5taW5ZLU0ucGFkVG9wPE0ubWluWSkmJihNLm1pblk9bS5taW5ZLU0ucGFkVG9wLE89ITApLE8pcmV0dXJuIHgoTSxrKX19LFYkPWZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPW0ubGF5b3V0Tm9kZXMsTT1bXSxPPTA7TzxTLmxlbmd0aDtPKyspe3ZhciBOPVNbT10sJD1OLmNtcHRJZCxIPU1bJF09TVskXXx8W107SC5wdXNoKE4pfWZvcih2YXIgcT0wLE89MDtPPE0ubGVuZ3RoO08rKyl7dmFyIFk9TVtPXTtpZihZKXtZLngxPTEvMCxZLngyPS0xLzAsWS55MT0xLzAsWS55Mj0tMS8wO2Zvcih2YXIgWj0wO1o8WS5sZW5ndGg7WisrKXt2YXIgY2U9WVtaXTtZLngxPU1hdGgubWluKFkueDEsY2UucG9zaXRpb25YLWNlLndpZHRoLzIpLFkueDI9TWF0aC5tYXgoWS54MixjZS5wb3NpdGlvblgrY2Uud2lkdGgvMiksWS55MT1NYXRoLm1pbihZLnkxLGNlLnBvc2l0aW9uWS1jZS5oZWlnaHQvMiksWS55Mj1NYXRoLm1heChZLnkyLGNlLnBvc2l0aW9uWStjZS5oZWlnaHQvMil9WS53PVkueDItWS54MSxZLmg9WS55Mi1ZLnkxLHErPVkudypZLmh9fU0uc29ydChmdW5jdGlvbihCZSxSZSl7cmV0dXJuIFJlLncqUmUuaC1CZS53KkJlLmh9KTtmb3IodmFyIHZlPTAsbWU9MCxMZT0wLF9lPTAsRWU9TWF0aC5zcXJ0KHEpKm0uY2xpZW50V2lkdGgvbS5jbGllbnRIZWlnaHQsTz0wO088TS5sZW5ndGg7TysrKXt2YXIgWT1NW09dO2lmKFkpe2Zvcih2YXIgWj0wO1o8WS5sZW5ndGg7WisrKXt2YXIgY2U9WVtaXTtjZS5pc0xvY2tlZHx8KGNlLnBvc2l0aW9uWCs9dmUtWS54MSxjZS5wb3NpdGlvblkrPW1lLVkueTEpfXZlKz1ZLncray5jb21wb25lbnRTcGFjaW5nLExlKz1ZLncray5jb21wb25lbnRTcGFjaW5nLF9lPU1hdGgubWF4KF9lLFkuaCksTGU+RWUmJihtZSs9X2Uray5jb21wb25lbnRTcGFjaW5nLHZlPTAsTGU9MCxfZT0wKX19fSxScmU9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsYXZvaWRPdmVybGFwUGFkZGluZzoxMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsY29uZGVuc2U6ITEscm93czp2b2lkIDAsY29sczp2b2lkIDAscG9zaXRpb246ZnVuY3Rpb24obSl7fSxzb3J0OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24obSxrKXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihtLGspe3JldHVybiBrfX07ZnVuY3Rpb24gVSQoeCl7dGhpcy5vcHRpb25zPXl0KHt9LFJyZSx4KX1VJC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5vcHRpb25zLG09eCxrPXguY3ksUz1tLmVsZXMsTT1TLm5vZGVzKCkubm90KCI6cGFyZW50Iik7bS5zb3J0JiYoTT1NLnNvcnQobS5zb3J0KSk7dmFyIE89V2QobS5ib3VuZGluZ0JveD9tLmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzprLndpZHRoKCksaDprLmhlaWdodCgpfSk7aWYoTy5oPT09MHx8Ty53PT09MClTLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsbSxmdW5jdGlvbihFcil7cmV0dXJue3g6Ty54MSx5Ok8ueTF9fSk7ZWxzZXt2YXIgTj1NLnNpemUoKSwkPU1hdGguc3FydChOKk8uaC9PLncpLEg9TWF0aC5yb3VuZCgkKSxxPU1hdGgucm91bmQoTy53L08uaCokKSxZPWZ1bmN0aW9uKE1yKXtpZihNcj09bnVsbClyZXR1cm4gTWF0aC5taW4oSCxxKTt2YXIgQ3I9TWF0aC5taW4oSCxxKTtDcj09SD9IPU1yOnE9TXJ9LFo9ZnVuY3Rpb24oTXIpe2lmKE1yPT1udWxsKXJldHVybiBNYXRoLm1heChILHEpO3ZhciBDcj1NYXRoLm1heChILHEpO0NyPT1IP0g9TXI6cT1Ncn0sY2U9bS5yb3dzLHZlPW0uY29scyE9bnVsbD9tLmNvbHM6bS5jb2x1bW5zO2lmKGNlIT1udWxsJiZ2ZSE9bnVsbClIPWNlLHE9dmU7ZWxzZSBpZihjZSE9bnVsbCYmdmU9PW51bGwpSD1jZSxxPU1hdGguY2VpbChOL0gpO2Vsc2UgaWYoY2U9PW51bGwmJnZlIT1udWxsKXE9dmUsSD1NYXRoLmNlaWwoTi9xKTtlbHNlIGlmKHEqSD5OKXt2YXIgbWU9WSgpLExlPVooKTsobWUtMSkqTGU+PU4/WShtZS0xKTooTGUtMSkqbWU+PU4mJlooTGUtMSl9ZWxzZSBmb3IoO3EqSDxOOyl7dmFyIF9lPVkoKSxFZT1aKCk7KEVlKzEpKl9lPj1OP1ooRWUrMSk6WShfZSsxKX12YXIgQmU9Ty53L3EsUmU9Ty5oL0g7aWYobS5jb25kZW5zZSYmKEJlPTAsUmU9MCksbS5hdm9pZE92ZXJsYXApZm9yKHZhciBWZT0wO1ZlPE0ubGVuZ3RoO1ZlKyspe3ZhciBjdD1NW1ZlXSxzdD1jdC5fcHJpdmF0ZS5wb3NpdGlvbjsoc3QueD09bnVsbHx8c3QueT09bnVsbCkmJihzdC54PTAsc3QueT0wKTt2YXIgWWU9Y3QubGF5b3V0RGltZW5zaW9ucyhtKSxtdD1tLmF2b2lkT3ZlcmxhcFBhZGRpbmcsSmU9WWUudyttdCxMdD1ZZS5oK210O0JlPU1hdGgubWF4KEJlLEplKSxSZT1NYXRoLm1heChSZSxMdCl9Zm9yKHZhciBNdD17fSx1dD1mdW5jdGlvbihNcixDcil7cmV0dXJuISFNdFsiYy0iK01yKyItIitDcl19LFd0PWZ1bmN0aW9uKE1yLENyKXtNdFsiYy0iK01yKyItIitDcl09ITB9LFR0PTAsX249MCxobj1mdW5jdGlvbigpe19uKyssX24+PXEmJihfbj0wLFR0KyspfSxZdD17fSxEbj0wO0RuPE0ubGVuZ3RoO0RuKyspe3ZhciBpcj1NW0RuXSx2cj1tLnBvc2l0aW9uKGlyKTtpZih2ciYmKHZyLnJvdyE9PXZvaWQgMHx8dnIuY29sIT09dm9pZCAwKSl7dmFyIE5uPXtyb3c6dnIucm93LGNvbDp2ci5jb2x9O2lmKE5uLmNvbD09PXZvaWQgMClmb3IoTm4uY29sPTA7dXQoTm4ucm93LE5uLmNvbCk7KU5uLmNvbCsrO2Vsc2UgaWYoTm4ucm93PT09dm9pZCAwKWZvcihObi5yb3c9MDt1dChObi5yb3csTm4uY29sKTspTm4ucm93Kys7WXRbaXIuaWQoKV09Tm4sV3QoTm4ucm93LE5uLmNvbCl9fXZhciBwcj1mdW5jdGlvbihNcixDcil7dmFyIE9yLFduO2lmKE1yLmxvY2tlZCgpfHxNci5pc1BhcmVudCgpKXJldHVybiExO3ZhciBicj1ZdFtNci5pZCgpXTtpZihicilPcj1ici5jb2wqQmUrQmUvMitPLngxLFduPWJyLnJvdypSZStSZS8yK08ueTE7ZWxzZXtmb3IoO3V0KFR0LF9uKTspaG4oKTtPcj1fbipCZStCZS8yK08ueDEsV249VHQqUmUrUmUvMitPLnkxLFd0KFR0LF9uKSxobigpfXJldHVybnt4Ok9yLHk6V259fTtNLmxheW91dFBvc2l0aW9ucyh0aGlzLG0scHIpfXJldHVybiB0aGlzfTt2YXIganJlPXtyZWFkeTpmdW5jdGlvbigpe30sc3RvcDpmdW5jdGlvbigpe319O2Z1bmN0aW9uIFBJKHgpe3RoaXMub3B0aW9ucz15dCh7fSxqcmUseCl9UEkucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB4PXRoaXMub3B0aW9ucyxtPXguZWxlcyxrPXRoaXM7cmV0dXJuIHguY3ksay5lbWl0KCJsYXlvdXRzdGFydCIpLG0ubm9kZXMoKS5wb3NpdGlvbnMoZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MH19KSxrLm9uZSgibGF5b3V0cmVhZHkiLHgucmVhZHkpLGsuZW1pdCgibGF5b3V0cmVhZHkiKSxrLm9uZSgibGF5b3V0c3RvcCIseC5zdG9wKSxrLmVtaXQoImxheW91dHN0b3AiKSx0aGlzfSxQSS5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt2YXIgJHJlPXtwb3NpdGlvbnM6dm9pZCAwLHpvb206dm9pZCAwLHBhbjp2b2lkIDAsZml0OiEwLHBhZGRpbmc6MzAsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOmZ1bmN0aW9uKG0sayl7cmV0dXJuITB9LHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06ZnVuY3Rpb24obSxrKXtyZXR1cm4ga319O2Z1bmN0aW9uIEckKHgpe3RoaXMub3B0aW9ucz15dCh7fSwkcmUseCl9RyQucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB4PXRoaXMub3B0aW9ucyxtPXguZWxlcyxrPW0ubm9kZXMoKSxTPWFlKHgucG9zaXRpb25zKTtmdW5jdGlvbiBNKE8pe2lmKHgucG9zaXRpb25zPT1udWxsKXJldHVybiBzWihPLnBvc2l0aW9uKCkpO2lmKFMpcmV0dXJuIHgucG9zaXRpb25zKE8pO3ZhciBOPXgucG9zaXRpb25zW08uX3ByaXZhdGUuZGF0YS5pZF07cmV0dXJuIE4/P251bGx9cmV0dXJuIGsubGF5b3V0UG9zaXRpb25zKHRoaXMseCxmdW5jdGlvbihPLE4pe3ZhciAkPU0oTyk7cmV0dXJuIE8ubG9ja2VkKCl8fCQ9PW51bGw/ITE6JH0pLHRoaXN9O3ZhciB6cmU9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24obSxrKXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihtLGspe3JldHVybiBrfX07ZnVuY3Rpb24gSyQoeCl7dGhpcy5vcHRpb25zPXl0KHt9LHpyZSx4KX1LJC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5vcHRpb25zLG09eC5jeSxrPXguZWxlcyxTPVdkKHguYm91bmRpbmdCb3g/eC5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6bS53aWR0aCgpLGg6bS5oZWlnaHQoKX0pLE09ZnVuY3Rpb24oTiwkKXtyZXR1cm57eDpTLngxK01hdGgucm91bmQoTWF0aC5yYW5kb20oKSpTLncpLHk6Uy55MStNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqUy5oKX19O3JldHVybiBrLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMseCxNKSx0aGlzfTt2YXIgcXJlPVt7bmFtZToiYnJlYWR0aGZpcnN0IixpbXBsOmokfSx7bmFtZToiY2lyY2xlIixpbXBsOiQkfSx7bmFtZToiY29uY2VudHJpYyIsaW1wbDp6JH0se25hbWU6ImNvc2UiLGltcGw6SFN9LHtuYW1lOiJncmlkIixpbXBsOlUkfSx7bmFtZToibnVsbCIsaW1wbDpQSX0se25hbWU6InByZXNldCIsaW1wbDpHJH0se25hbWU6InJhbmRvbSIsaW1wbDpLJH1dO2Z1bmN0aW9uIFckKHgpe3RoaXMub3B0aW9ucz14LHRoaXMubm90aWZpY2F0aW9ucz0wfXZhciBZJD1mdW5jdGlvbigpe30sWCQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkEgaGVhZGxlc3MgaW5zdGFuY2UgY2FuIG5vdCByZW5kZXIgaW1hZ2VzIil9O1ckLnByb3RvdHlwZT17cmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlOlkkLG5vdGlmeTpmdW5jdGlvbigpe3RoaXMubm90aWZpY2F0aW9ucysrfSxpbml0OlkkLGlzSGVhZGxlc3M6ZnVuY3Rpb24oKXtyZXR1cm4hMH0scG5nOlgkLGpwZzpYJH07dmFyIEJJPXt9O0JJLmFycm93U2hhcGVXaWR0aD0uMyxCSS5yZWdpc3RlckFycm93U2hhcGVzPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5hcnJvd1NoYXBlcz17fSxtPXRoaXMsaz1mdW5jdGlvbihxLFksWixjZSx2ZSxtZSxMZSl7dmFyIF9lPXZlLngtWi8yLUxlLEVlPXZlLngrWi8yK0xlLEJlPXZlLnktWi8yLUxlLFJlPXZlLnkrWi8yK0xlLFZlPV9lPD1xJiZxPD1FZSYmQmU8PVkmJlk8PVJlO3JldHVybiBWZX0sUz1mdW5jdGlvbihxLFksWixjZSx2ZSl7dmFyIG1lPXEqTWF0aC5jb3MoY2UpLVkqTWF0aC5zaW4oY2UpLExlPXEqTWF0aC5zaW4oY2UpK1kqTWF0aC5jb3MoY2UpLF9lPW1lKlosRWU9TGUqWixCZT1fZSt2ZS54LFJlPUVlK3ZlLnk7cmV0dXJue3g6QmUseTpSZX19LE09ZnVuY3Rpb24ocSxZLFosY2Upe2Zvcih2YXIgdmU9W10sbWU9MDttZTxxLmxlbmd0aDttZSs9Mil7dmFyIExlPXFbbWVdLF9lPXFbbWUrMV07dmUucHVzaChTKExlLF9lLFksWixjZSkpfXJldHVybiB2ZX0sTz1mdW5jdGlvbihxKXtmb3IodmFyIFk9W10sWj0wO1o8cS5sZW5ndGg7WisrKXt2YXIgY2U9cVtaXTtZLnB1c2goY2UueCxjZS55KX1yZXR1cm4gWX0sTj1mdW5jdGlvbihxKXtyZXR1cm4gcS5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSpxLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS5wZlZhbHVlKjJ9LCQ9ZnVuY3Rpb24ocSxZKXtiZShZKSYmKFk9eFtZXSkseFtxXT15dCh7bmFtZTpxLHBvaW50czpbLS4xNSwtLjMsLjE1LC0uMywuMTUsLjMsLS4xNSwuM10sY29sbGlkZTpmdW5jdGlvbihjZSx2ZSxtZSxMZSxfZSxFZSl7dmFyIEJlPU8oTSh0aGlzLnBvaW50cyxtZSsyKkVlLExlLF9lKSksUmU9WWQoY2UsdmUsQmUpO3JldHVybiBSZX0scm91Z2hDb2xsaWRlOmssZHJhdzpmdW5jdGlvbihjZSx2ZSxtZSxMZSl7dmFyIF9lPU0odGhpcy5wb2ludHMsdmUsbWUsTGUpO20uYXJyb3dTaGFwZUltcGwoInBvbHlnb24iKShjZSxfZSl9LHNwYWNpbmc6ZnVuY3Rpb24oY2Upe3JldHVybiAwfSxnYXA6Tn0sWSl9OyQoIm5vbmUiLHtjb2xsaWRlOlgzLHJvdWdoQ29sbGlkZTpYMyxkcmF3Om5JLHNwYWNpbmc6RnAsZ2FwOkZwfSksJCgidHJpYW5nbGUiLHtwb2ludHM6Wy0uMTUsLS4zLDAsMCwuMTUsLS4zXX0pLCQoImFycm93IiwidHJpYW5nbGUiKSwkKCJ0cmlhbmdsZS1iYWNrY3VydmUiLHtwb2ludHM6eC50cmlhbmdsZS5wb2ludHMsY29udHJvbFBvaW50OlswLC0uMTVdLHJvdWdoQ29sbGlkZTprLGRyYXc6ZnVuY3Rpb24ocSxZLFosY2UsdmUpe3ZhciBtZT1NKHRoaXMucG9pbnRzLFksWixjZSksTGU9dGhpcy5jb250cm9sUG9pbnQsX2U9UyhMZVswXSxMZVsxXSxZLFosY2UpO20uYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShxLG1lLF9lKX0sZ2FwOmZ1bmN0aW9uKHEpe3JldHVybiBOKHEpKi44fX0pLCQoInRyaWFuZ2xlLXRlZSIse3BvaW50czpbMCwwLC4xNSwtLjMsLS4xNSwtLjMsMCwwXSxwb2ludHNUZWU6Wy0uMTUsLS40LC0uMTUsLS41LC4xNSwtLjUsLjE1LC0uNF0sY29sbGlkZTpmdW5jdGlvbihxLFksWixjZSx2ZSxtZSxMZSl7dmFyIF9lPU8oTSh0aGlzLnBvaW50cyxaKzIqTGUsY2UsdmUpKSxFZT1PKE0odGhpcy5wb2ludHNUZWUsWisyKkxlLGNlLHZlKSksQmU9WWQocSxZLF9lKXx8WWQocSxZLEVlKTtyZXR1cm4gQmV9LGRyYXc6ZnVuY3Rpb24ocSxZLFosY2UsdmUpe3ZhciBtZT1NKHRoaXMucG9pbnRzLFksWixjZSksTGU9TSh0aGlzLnBvaW50c1RlZSxZLFosY2UpO20uYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShxLG1lLExlKX19KSwkKCJjaXJjbGUtdHJpYW5nbGUiLHtyYWRpdXM6LjE1LHBvaW50c1RyOlswLC0uMTUsLjE1LC0uNDUsLS4xNSwtLjQ1LDAsLS4xNV0sY29sbGlkZTpmdW5jdGlvbihxLFksWixjZSx2ZSxtZSxMZSl7dmFyIF9lPXZlLEVlPU1hdGgucG93KF9lLngtcSwyKStNYXRoLnBvdyhfZS55LVksMik8PU1hdGgucG93KChaKzIqTGUpKnRoaXMucmFkaXVzLDIpLEJlPU8oTSh0aGlzLnBvaW50cyxaKzIqTGUsY2UsdmUpKTtyZXR1cm4gWWQocSxZLEJlKXx8RWV9LGRyYXc6ZnVuY3Rpb24ocSxZLFosY2UsdmUpe3ZhciBtZT1NKHRoaXMucG9pbnRzVHIsWSxaLGNlKTttLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkocSxtZSxjZS54LGNlLnksdGhpcy5yYWRpdXMqWSl9LHNwYWNpbmc6ZnVuY3Rpb24ocSl7cmV0dXJuIG0uZ2V0QXJyb3dXaWR0aChxLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLHEucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlKSp0aGlzLnJhZGl1c319KSwkKCJ0cmlhbmdsZS1jcm9zcyIse3BvaW50czpbMCwwLC4xNSwtLjMsLS4xNSwtLjMsMCwwXSxiYXNlQ3Jvc3NMaW5lUHRzOlstLjE1LC0uNCwtLjE1LC0uNCwuMTUsLS40LC4xNSwtLjRdLGNyb3NzTGluZVB0czpmdW5jdGlvbihxLFkpe3ZhciBaPXRoaXMuYmFzZUNyb3NzTGluZVB0cy5zbGljZSgpLGNlPVkvcSx2ZT0zLG1lPTU7cmV0dXJuIFpbdmVdPVpbdmVdLWNlLFpbbWVdPVpbbWVdLWNlLFp9LGNvbGxpZGU6ZnVuY3Rpb24ocSxZLFosY2UsdmUsbWUsTGUpe3ZhciBfZT1PKE0odGhpcy5wb2ludHMsWisyKkxlLGNlLHZlKSksRWU9TyhNKHRoaXMuY3Jvc3NMaW5lUHRzKFosbWUpLForMipMZSxjZSx2ZSkpLEJlPVlkKHEsWSxfZSl8fFlkKHEsWSxFZSk7cmV0dXJuIEJlfSxkcmF3OmZ1bmN0aW9uKHEsWSxaLGNlLHZlKXt2YXIgbWU9TSh0aGlzLnBvaW50cyxZLFosY2UpLExlPU0odGhpcy5jcm9zc0xpbmVQdHMoWSx2ZSksWSxaLGNlKTttLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkocSxtZSxMZSl9fSksJCgidmVlIix7cG9pbnRzOlstLjE1LC0uMywwLDAsLjE1LC0uMywwLC0uMTVdLGdhcDpmdW5jdGlvbihxKXtyZXR1cm4gTihxKSouNTI1fX0pLCQoImNpcmNsZSIse3JhZGl1czouMTUsY29sbGlkZTpmdW5jdGlvbihxLFksWixjZSx2ZSxtZSxMZSl7dmFyIF9lPXZlLEVlPU1hdGgucG93KF9lLngtcSwyKStNYXRoLnBvdyhfZS55LVksMik8PU1hdGgucG93KChaKzIqTGUpKnRoaXMucmFkaXVzLDIpO3JldHVybiBFZX0sZHJhdzpmdW5jdGlvbihxLFksWixjZSx2ZSl7bS5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKHEsY2UueCxjZS55LHRoaXMucmFkaXVzKlkpfSxzcGFjaW5nOmZ1bmN0aW9uKHEpe3JldHVybiBtLmdldEFycm93V2lkdGgocS5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxxLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSkqdGhpcy5yYWRpdXN9fSksJCgidGVlIix7cG9pbnRzOlstLjE1LDAsLS4xNSwtLjEsLjE1LC0uMSwuMTUsMF0sc3BhY2luZzpmdW5jdGlvbihxKXtyZXR1cm4gMX0sZ2FwOmZ1bmN0aW9uKHEpe3JldHVybiAxfX0pLCQoInNxdWFyZSIse3BvaW50czpbLS4xNSwwLC4xNSwwLC4xNSwtLjMsLS4xNSwtLjNdfSksJCgiZGlhbW9uZCIse3BvaW50czpbLS4xNSwtLjE1LDAsLS4zLC4xNSwtLjE1LDAsMF0sZ2FwOmZ1bmN0aW9uKHEpe3JldHVybiBxLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlKnEucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlfX0pLCQoImNoZXZyb24iLHtwb2ludHM6WzAsMCwtLjE1LC0uMTUsLS4xLC0uMiwwLC0uMSwuMSwtLjIsLjE1LC0uMTVdLGdhcDpmdW5jdGlvbihxKXtyZXR1cm4gLjk1KnEucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUqcS5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWV9fSl9O3ZhciB3NT17fTt3NS5wcm9qZWN0SW50b1ZpZXdwb3J0PWZ1bmN0aW9uKHgsbSl7dmFyIGs9dGhpcy5jeSxTPXRoaXMuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLE09U1swXSxPPVNbMV0sTj1TWzRdLCQ9ay5wYW4oKSxIPWsuem9vbSgpLHE9KCh4LU0pL04tJC54KS9ILFk9KChtLU8pL04tJC55KS9IO3JldHVybltxLFldfSx3NS5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzPWZ1bmN0aW9uKCl7aWYodGhpcy5jb250YWluZXJCQilyZXR1cm4gdGhpcy5jb250YWluZXJCQjt2YXIgeD10aGlzLmNvbnRhaW5lcixtPXguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaz10aGlzLmN5LndpbmRvdygpLmdldENvbXB1dGVkU3R5bGUoeCksUz1mdW5jdGlvbihFZSl7cmV0dXJuIHBhcnNlRmxvYXQoay5nZXRQcm9wZXJ0eVZhbHVlKEVlKSl9LE09e2xlZnQ6UygicGFkZGluZy1sZWZ0IikscmlnaHQ6UygicGFkZGluZy1yaWdodCIpLHRvcDpTKCJwYWRkaW5nLXRvcCIpLGJvdHRvbTpTKCJwYWRkaW5nLWJvdHRvbSIpfSxPPXtsZWZ0OlMoImJvcmRlci1sZWZ0LXdpZHRoIikscmlnaHQ6UygiYm9yZGVyLXJpZ2h0LXdpZHRoIiksdG9wOlMoImJvcmRlci10b3Atd2lkdGgiKSxib3R0b206UygiYm9yZGVyLWJvdHRvbS13aWR0aCIpfSxOPXguY2xpZW50V2lkdGgsJD14LmNsaWVudEhlaWdodCxIPU0ubGVmdCtNLnJpZ2h0LHE9TS50b3ArTS5ib3R0b20sWT1PLmxlZnQrTy5yaWdodCxaPW0ud2lkdGgvKE4rWSksY2U9Ti1ILHZlPSQtcSxtZT1tLmxlZnQrTS5sZWZ0K08ubGVmdCxMZT1tLnRvcCtNLnRvcCtPLnRvcDtyZXR1cm4gdGhpcy5jb250YWluZXJCQj1bbWUsTGUsY2UsdmUsWl19LHc1LmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZT1mdW5jdGlvbigpe3RoaXMuY29udGFpbmVyQkI9bnVsbH0sdzUuZmluZE5lYXJlc3RFbGVtZW50PWZ1bmN0aW9uKHgsbSxrLFMpe3JldHVybiB0aGlzLmZpbmROZWFyZXN0RWxlbWVudHMoeCxtLGssUylbMF19LHc1LmZpbmROZWFyZXN0RWxlbWVudHM9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09dGhpcyxPPXRoaXMsTj1PLmdldENhY2hlZFpTb3J0ZWRFbGVzKCksJD1bXSxIPU8uY3kuem9vbSgpLHE9Ty5jeS5oYXNDb21wb3VuZE5vZGVzKCksWT0oUz8yNDo4KS9ILFo9KFM/ODoyKS9ILGNlPShTPzg6MikvSCx2ZT0xLzAsbWUsTGU7ayYmKE49Ti5pbnRlcmFjdGl2ZSk7ZnVuY3Rpb24gX2UoWWUsbXQpe2lmKFllLmlzTm9kZSgpKXtpZihMZSlyZXR1cm47TGU9WWUsJC5wdXNoKFllKX1pZihZZS5pc0VkZ2UoKSYmKG10PT1udWxsfHxtdDx2ZSkpaWYobWUpe2lmKG1lLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpLnZhbHVlPT09WWUucHN0eWxlKCJ6LWNvbXBvdW5kLWRlcHRoIikudmFsdWUmJm1lLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpLnZhbHVlPT09WWUucHN0eWxlKCJ6LWNvbXBvdW5kLWRlcHRoIikudmFsdWUpe2Zvcih2YXIgSmU9MDtKZTwkLmxlbmd0aDtKZSsrKWlmKCRbSmVdLmlzRWRnZSgpKXskW0plXT1ZZSxtZT1ZZSx2ZT1tdD8/dmU7YnJlYWt9fX1lbHNlICQucHVzaChZZSksbWU9WWUsdmU9bXQ/P3ZlfWZ1bmN0aW9uIEVlKFllKXt2YXIgbXQ9WWUub3V0ZXJXaWR0aCgpKzIqWixKZT1ZZS5vdXRlckhlaWdodCgpKzIqWixMdD1tdC8yLE10PUplLzIsdXQ9WWUucG9zaXRpb24oKTtpZih1dC54LUx0PD14JiZ4PD11dC54K0x0JiZ1dC55LU10PD1tJiZtPD11dC55K010KXt2YXIgV3Q9Ty5ub2RlU2hhcGVzW00uZ2V0Tm9kZVNoYXBlKFllKV07aWYoV3QuY2hlY2tQb2ludCh4LG0sMCxtdCxKZSx1dC54LHV0LnkpKXJldHVybiBfZShZZSwwKSwhMH19ZnVuY3Rpb24gQmUoWWUpe3ZhciBtdD1ZZS5fcHJpdmF0ZSxKZT1tdC5yc2NyYXRjaCxMdD1ZZS5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxNdD1ZZS5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUsdXQ9THQvMitZLFd0PXV0KnV0LFR0PXV0KjIsRG49bXQuc291cmNlLGlyPW10LnRhcmdldCxfbjtpZihKZS5lZGdlVHlwZT09PSJzZWdtZW50cyJ8fEplLmVkZ2VUeXBlPT09InN0cmFpZ2h0Inx8SmUuZWRnZVR5cGU9PT0iaGF5c3RhY2siKXtmb3IodmFyIGhuPUplLmFsbHB0cyxZdD0wO1l0KzM8aG4ubGVuZ3RoO1l0Kz0yKWlmKHZaKHgsbSxobltZdF0saG5bWXQrMV0saG5bWXQrMl0saG5bWXQrM10sVHQpJiZXdD4oX249RVooeCxtLGhuW1l0XSxobltZdCsxXSxobltZdCsyXSxobltZdCszXSkpKXJldHVybiBfZShZZSxfbiksITB9ZWxzZSBpZihKZS5lZGdlVHlwZT09PSJiZXppZXIifHxKZS5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fEplLmVkZ2VUeXBlPT09InNlbGYifHxKZS5lZGdlVHlwZT09PSJjb21wb3VuZCIpe2Zvcih2YXIgaG49SmUuYWxscHRzLFl0PTA7WXQrNTxKZS5hbGxwdHMubGVuZ3RoO1l0Kz00KWlmKHdaKHgsbSxobltZdF0saG5bWXQrMV0saG5bWXQrMl0saG5bWXQrM10saG5bWXQrNF0saG5bWXQrNV0sVHQpJiZXdD4oX249a1ooeCxtLGhuW1l0XSxobltZdCsxXSxobltZdCsyXSxobltZdCszXSxobltZdCs0XSxobltZdCs1XSkpKXJldHVybiBfZShZZSxfbiksITB9Zm9yKHZhciBEbj1Ebnx8bXQuc291cmNlLGlyPWlyfHxtdC50YXJnZXQsdnI9TS5nZXRBcnJvd1dpZHRoKEx0LE10KSxObj1be25hbWU6InNvdXJjZSIseDpKZS5hcnJvd1N0YXJ0WCx5OkplLmFycm93U3RhcnRZLGFuZ2xlOkplLnNyY0Fycm93QW5nbGV9LHtuYW1lOiJ0YXJnZXQiLHg6SmUuYXJyb3dFbmRYLHk6SmUuYXJyb3dFbmRZLGFuZ2xlOkplLnRndEFycm93QW5nbGV9LHtuYW1lOiJtaWQtc291cmNlIix4OkplLm1pZFgseTpKZS5taWRZLGFuZ2xlOkplLm1pZHNyY0Fycm93QW5nbGV9LHtuYW1lOiJtaWQtdGFyZ2V0Iix4OkplLm1pZFgseTpKZS5taWRZLGFuZ2xlOkplLm1pZHRndEFycm93QW5nbGV9XSxZdD0wO1l0PE5uLmxlbmd0aDtZdCsrKXt2YXIgcHI9Tm5bWXRdLEVyPU8uYXJyb3dTaGFwZXNbWWUucHN0eWxlKHByLm5hbWUrIi1hcnJvdy1zaGFwZSIpLnZhbHVlXSxNcj1ZZS5wc3R5bGUoIndpZHRoIikucGZWYWx1ZTtpZihFci5yb3VnaENvbGxpZGUoeCxtLHZyLHByLmFuZ2xlLHt4OnByLngseTpwci55fSxNcixZKSYmRXIuY29sbGlkZSh4LG0sdnIscHIuYW5nbGUse3g6cHIueCx5OnByLnl9LE1yLFkpKXJldHVybiBfZShZZSksITB9cSYmJC5sZW5ndGg+MCYmKEVlKERuKSxFZShpcikpfWZ1bmN0aW9uIFJlKFllLG10LEplKXtyZXR1cm4gSzIoWWUsbXQsSmUpfWZ1bmN0aW9uIFZlKFllLG10KXt2YXIgSmU9WWUuX3ByaXZhdGUsTHQ9Y2UsTXQ7bXQ/TXQ9bXQrIi0iOk10PSIiLFllLmJvdW5kaW5nQm94KCk7dmFyIHV0PUplLmxhYmVsQm91bmRzW210fHwibWFpbiJdLFd0PVllLnBzdHlsZShNdCsibGFiZWwiKS52YWx1ZSxUdD1ZZS5wc3R5bGUoInRleHQtZXZlbnRzIikuc3RyVmFsdWU9PT0ieWVzIjtpZighKCFUdHx8IVd0KSl7dmFyIF9uPVJlKEplLnJzY3JhdGNoLCJsYWJlbFgiLG10KSxobj1SZShKZS5yc2NyYXRjaCwibGFiZWxZIixtdCksWXQ9UmUoSmUucnNjcmF0Y2gsImxhYmVsQW5nbGUiLG10KSxEbj1ZZS5wc3R5bGUoTXQrInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLGlyPVllLnBzdHlsZShNdCsidGV4dC1tYXJnaW4teSIpLnBmVmFsdWUsdnI9dXQueDEtTHQtRG4sTm49dXQueDIrTHQtRG4scHI9dXQueTEtTHQtaXIsRXI9dXQueTIrTHQtaXI7aWYoWXQpe3ZhciBNcj1NYXRoLmNvcyhZdCksQ3I9TWF0aC5zaW4oWXQpLE9yPWZ1bmN0aW9uKHBhLE1pKXtyZXR1cm4gcGE9cGEtX24sTWk9TWktaG4se3g6cGEqTXItTWkqQ3IrX24seTpwYSpDcitNaSpNcitobn19LFduPU9yKHZyLHByKSxicj1Pcih2cixFciksU3I9T3IoTm4scHIpLE5yPU9yKE5uLEVyKSxTaT1bV24ueCtEbixXbi55K2lyLFNyLngrRG4sU3IueStpcixOci54K0RuLE5yLnkraXIsYnIueCtEbixici55K2lyXTtpZihZZCh4LG0sU2kpKXJldHVybiBfZShZZSksITB9ZWxzZSBpZihlOCh1dCx4LG0pKXJldHVybiBfZShZZSksITB9fWZvcih2YXIgY3Q9Ti5sZW5ndGgtMTtjdD49MDtjdC0tKXt2YXIgc3Q9TltjdF07c3QuaXNOb2RlKCk/RWUoc3QpfHxWZShzdCk6QmUoc3QpfHxWZShzdCl8fFZlKHN0LCJzb3VyY2UiKXx8VmUoc3QsInRhcmdldCIpfXJldHVybiAkfSx3NS5nZXRBbGxJbkJveD1mdW5jdGlvbih4LG0sayxTKXt2YXIgTT10aGlzLmdldENhY2hlZFpTb3J0ZWRFbGVzKCkuaW50ZXJhY3RpdmUsTz1bXSxOPU1hdGgubWluKHgsayksJD1NYXRoLm1heCh4LGspLEg9TWF0aC5taW4obSxTKSxxPU1hdGgubWF4KG0sUyk7eD1OLGs9JCxtPUgsUz1xO2Zvcih2YXIgWT1XZCh7eDE6eCx5MTptLHgyOmsseTI6U30pLFo9MDtaPE0ubGVuZ3RoO1orKyl7dmFyIGNlPU1bWl07aWYoY2UuaXNOb2RlKCkpe3ZhciB2ZT1jZSxtZT12ZS5ib3VuZGluZ0JveCh7aW5jbHVkZU5vZGVzOiEwLGluY2x1ZGVFZGdlczohMSxpbmNsdWRlTGFiZWxzOiExfSk7c0koWSxtZSkmJiFwaihtZSxZKSYmTy5wdXNoKHZlKX1lbHNle3ZhciBMZT1jZSxfZT1MZS5fcHJpdmF0ZSxFZT1fZS5yc2NyYXRjaDtpZihFZS5zdGFydFghPW51bGwmJkVlLnN0YXJ0WSE9bnVsbCYmIWU4KFksRWUuc3RhcnRYLEVlLnN0YXJ0WSl8fEVlLmVuZFghPW51bGwmJkVlLmVuZFkhPW51bGwmJiFlOChZLEVlLmVuZFgsRWUuZW5kWSkpY29udGludWU7aWYoRWUuZWRnZVR5cGU9PT0iYmV6aWVyInx8RWUuZWRnZVR5cGU9PT0ibXVsdGliZXppZXIifHxFZS5lZGdlVHlwZT09PSJzZWxmInx8RWUuZWRnZVR5cGU9PT0iY29tcG91bmQifHxFZS5lZGdlVHlwZT09PSJzZWdtZW50cyJ8fEVlLmVkZ2VUeXBlPT09ImhheXN0YWNrIil7Zm9yKHZhciBCZT1fZS5yc3R5bGUuYmV6aWVyUHRzfHxfZS5yc3R5bGUubGluZVB0c3x8X2UucnN0eWxlLmhheXN0YWNrUHRzLFJlPSEwLFZlPTA7VmU8QmUubGVuZ3RoO1ZlKyspaWYoIW1aKFksQmVbVmVdKSl7UmU9ITE7YnJlYWt9UmUmJk8ucHVzaChMZSl9ZWxzZShFZS5lZGdlVHlwZT09PSJoYXlzdGFjayJ8fEVlLmVkZ2VUeXBlPT09InN0cmFpZ2h0IikmJk8ucHVzaChMZSl9fXJldHVybiBPfTt2YXIgVVM9e307VVMuY2FsY3VsYXRlQXJyb3dBbmdsZXM9ZnVuY3Rpb24oeCl7dmFyIG09eC5fcHJpdmF0ZS5yc2NyYXRjaCxrPW0uZWRnZVR5cGU9PT0iaGF5c3RhY2siLFM9bS5lZGdlVHlwZT09PSJiZXppZXIiLE09bS5lZGdlVHlwZT09PSJtdWx0aWJlemllciIsTz1tLmVkZ2VUeXBlPT09InNlZ21lbnRzIixOPW0uZWRnZVR5cGU9PT0iY29tcG91bmQiLCQ9bS5lZGdlVHlwZT09PSJzZWxmIixILHEsWSxaLGNlLHZlLEVlLEJlO2lmKGs/KFk9bS5oYXlzdGFja1B0c1swXSxaPW0uaGF5c3RhY2tQdHNbMV0sY2U9bS5oYXlzdGFja1B0c1syXSx2ZT1tLmhheXN0YWNrUHRzWzNdKTooWT1tLmFycm93U3RhcnRYLFo9bS5hcnJvd1N0YXJ0WSxjZT1tLmFycm93RW5kWCx2ZT1tLmFycm93RW5kWSksRWU9bS5taWRYLEJlPW0ubWlkWSxPKUg9WS1tLnNlZ3B0c1swXSxxPVotbS5zZWdwdHNbMV07ZWxzZSBpZihNfHxOfHwkfHxTKXt2YXIgbWU9bS5hbGxwdHMsTGU9dDAobWVbMF0sbWVbMl0sbWVbNF0sLjEpLF9lPXQwKG1lWzFdLG1lWzNdLG1lWzVdLC4xKTtIPVktTGUscT1aLV9lfWVsc2UgSD1ZLUVlLHE9Wi1CZTttLnNyY0Fycm93QW5nbGU9aFMoSCxxKTt2YXIgRWU9bS5taWRYLEJlPW0ubWlkWTtpZihrJiYoRWU9KFkrY2UpLzIsQmU9KFordmUpLzIpLEg9Y2UtWSxxPXZlLVosTyl7dmFyIG1lPW0uYWxscHRzO2lmKG1lLmxlbmd0aC8yJTI9PT0wKXt2YXIgUmU9bWUubGVuZ3RoLzIsVmU9UmUtMjtIPW1lW1JlXS1tZVtWZV0scT1tZVtSZSsxXS1tZVtWZSsxXX1lbHNle3ZhciBSZT1tZS5sZW5ndGgvMi0xLFZlPVJlLTIsY3Q9UmUrMjtIPW1lW1JlXS1tZVtWZV0scT1tZVtSZSsxXS1tZVtWZSsxXX19ZWxzZSBpZihNfHxOfHwkKXt2YXIgbWU9bS5hbGxwdHMsc3Q9bS5jdHJscHRzLFllLG10LEplLEx0O2lmKHN0Lmxlbmd0aC8yJTI9PT0wKXt2YXIgTXQ9bWUubGVuZ3RoLzItMSx1dD1NdCsyLFd0PXV0KzI7WWU9dDAobWVbTXRdLG1lW3V0XSxtZVtXdF0sMCksbXQ9dDAobWVbTXQrMV0sbWVbdXQrMV0sbWVbV3QrMV0sMCksSmU9dDAobWVbTXRdLG1lW3V0XSxtZVtXdF0sMWUtNCksTHQ9dDAobWVbTXQrMV0sbWVbdXQrMV0sbWVbV3QrMV0sMWUtNCl9ZWxzZXt2YXIgdXQ9bWUubGVuZ3RoLzItMSxNdD11dC0yLFd0PXV0KzI7WWU9dDAobWVbTXRdLG1lW3V0XSxtZVtXdF0sLjQ5OTkpLG10PXQwKG1lW010KzFdLG1lW3V0KzFdLG1lW1d0KzFdLC40OTk5KSxKZT10MChtZVtNdF0sbWVbdXRdLG1lW1d0XSwuNSksTHQ9dDAobWVbTXQrMV0sbWVbdXQrMV0sbWVbV3QrMV0sLjUpfUg9SmUtWWUscT1MdC1tdH1pZihtLm1pZHRndEFycm93QW5nbGU9aFMoSCxxKSxtLm1pZERpc3BYPUgsbS5taWREaXNwWT1xLEgqPS0xLHEqPS0xLE8pe3ZhciBtZT1tLmFsbHB0cztpZihtZS5sZW5ndGgvMiUyIT09MCl7dmFyIFJlPW1lLmxlbmd0aC8yLTEsY3Q9UmUrMjtIPS0obWVbY3RdLW1lW1JlXSkscT0tKG1lW2N0KzFdLW1lW1JlKzFdKX19aWYobS5taWRzcmNBcnJvd0FuZ2xlPWhTKEgscSksTylIPWNlLW0uc2VncHRzW20uc2VncHRzLmxlbmd0aC0yXSxxPXZlLW0uc2VncHRzW20uc2VncHRzLmxlbmd0aC0xXTtlbHNlIGlmKE18fE58fCR8fFMpe3ZhciBtZT1tLmFsbHB0cyxUdD1tZS5sZW5ndGgsTGU9dDAobWVbVHQtNl0sbWVbVHQtNF0sbWVbVHQtMl0sLjkpLF9lPXQwKG1lW1R0LTVdLG1lW1R0LTNdLG1lW1R0LTFdLC45KTtIPWNlLUxlLHE9dmUtX2V9ZWxzZSBIPWNlLUVlLHE9dmUtQmU7bS50Z3RBcnJvd0FuZ2xlPWhTKEgscSl9LFVTLmdldEFycm93V2lkdGg9VVMuZ2V0QXJyb3dIZWlnaHQ9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzLmFycm93V2lkdGhDYWNoZT10aGlzLmFycm93V2lkdGhDYWNoZXx8e30sUz1rW3grIiwgIittXTtyZXR1cm4gU3x8KFM9TWF0aC5tYXgoTWF0aC5wb3coeCoxMy4zNywuOSksMjkpKm0sa1t4KyIsICIrbV09UyxTKX07dmFyIFMxPXt9O1MxLmZpbmRNaWRwdFB0c0V0Yz1mdW5jdGlvbih4LG0pe3ZhciBrPW0ucG9zUHRzLFM9bS5pbnRlcnNlY3Rpb25QdHMsTT1tLnZlY3Rvck5vcm1JbnZlcnNlLE8sTj14LnBzdHlsZSgic291cmNlLWVuZHBvaW50IiksJD14LnBzdHlsZSgidGFyZ2V0LWVuZHBvaW50IiksSD1OLnVuaXRzIT1udWxsJiYkLnVuaXRzIT1udWxsLHE9ZnVuY3Rpb24oY3Qsc3QsWWUsbXQpe3ZhciBKZT1tdC1zdCxMdD1ZZS1jdCxNdD1NYXRoLnNxcnQoTHQqTHQrSmUqSmUpO3JldHVybnt4Oi1KZS9NdCx5Okx0L010fX0sWT14LnBzdHlsZSgiZWRnZS1kaXN0YW5jZXMiKS52YWx1ZTtzd2l0Y2goWSl7Y2FzZSJub2RlLXBvc2l0aW9uIjpPPWs7YnJlYWs7Y2FzZSJpbnRlcnNlY3Rpb24iOk89UzticmVhaztjYXNlImVuZHBvaW50cyI6e2lmKEgpe3ZhciBaPXRoaXMubWFudWFsRW5kcHRUb1B4KHguc291cmNlKClbMF0sTiksY2U9eShaLDIpLHZlPWNlWzBdLG1lPWNlWzFdLExlPXRoaXMubWFudWFsRW5kcHRUb1B4KHgudGFyZ2V0KClbMF0sJCksX2U9eShMZSwyKSxFZT1fZVswXSxCZT1fZVsxXSxSZT17eDE6dmUseTE6bWUseDI6RWUseTI6QmV9O009cSh2ZSxtZSxFZSxCZSksTz1SZX1lbHNlIGh1KCJFZGdlICIuY29uY2F0KHguaWQoKSwiIGhhcyBlZGdlLWRpc3RhbmNlczplbmRwb2ludHMgc3BlY2lmaWVkIHdpdGhvdXQgbWFudWFsIGVuZHBvaW50cyBzcGVjaWZpZWQgdmlhIHNvdXJjZS1lbmRwb2ludCBhbmQgdGFyZ2V0LWVuZHBvaW50LiAgRmFsbGluZyBiYWNrIG9uIGVkZ2UtZGlzdGFuY2VzOmludGVyc2VjdGlvbiAoZGVmYXVsdCkuIikpLE89UzticmVha319cmV0dXJue21pZHB0UHRzOk8sdmVjdG9yTm9ybUludmVyc2U6TX19LFMxLmZpbmRIYXlzdGFja1BvaW50cz1mdW5jdGlvbih4KXtmb3IodmFyIG09MDttPHgubGVuZ3RoO20rKyl7dmFyIGs9eFttXSxTPWsuX3ByaXZhdGUsTT1TLnJzY3JhdGNoO2lmKCFNLmhheXN0YWNrKXt2YXIgTz1NYXRoLnJhbmRvbSgpKjIqTWF0aC5QSTtNLnNvdXJjZT17eDpNYXRoLmNvcyhPKSx5Ok1hdGguc2luKE8pfSxPPU1hdGgucmFuZG9tKCkqMipNYXRoLlBJLE0udGFyZ2V0PXt4Ok1hdGguY29zKE8pLHk6TWF0aC5zaW4oTyl9fXZhciBOPVMuc291cmNlLCQ9Uy50YXJnZXQsSD1OLnBvc2l0aW9uKCkscT0kLnBvc2l0aW9uKCksWT1OLndpZHRoKCksWj0kLndpZHRoKCksY2U9Ti5oZWlnaHQoKSx2ZT0kLmhlaWdodCgpLG1lPWsucHN0eWxlKCJoYXlzdGFjay1yYWRpdXMiKS52YWx1ZSxMZT1tZS8yO00uaGF5c3RhY2tQdHM9TS5hbGxwdHM9W00uc291cmNlLngqWSpMZStILngsTS5zb3VyY2UueSpjZSpMZStILnksTS50YXJnZXQueCpaKkxlK3EueCxNLnRhcmdldC55KnZlKkxlK3EueV0sTS5taWRYPShNLmFsbHB0c1swXStNLmFsbHB0c1syXSkvMixNLm1pZFk9KE0uYWxscHRzWzFdK00uYWxscHRzWzNdKS8yLE0uZWRnZVR5cGU9ImhheXN0YWNrIixNLmhheXN0YWNrPSEwLHRoaXMuc3RvcmVFZGdlUHJvamVjdGlvbnMoayksdGhpcy5jYWxjdWxhdGVBcnJvd0FuZ2xlcyhrKSx0aGlzLnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnMoayksdGhpcy5jYWxjdWxhdGVMYWJlbEFuZ2xlcyhrKX19LFMxLmZpbmRTZWdtZW50c1BvaW50cz1mdW5jdGlvbih4LG0pe3ZhciBrPXguX3ByaXZhdGUucnNjcmF0Y2gsUz14LnBzdHlsZSgic2VnbWVudC13ZWlnaHRzIiksTT14LnBzdHlsZSgic2VnbWVudC1kaXN0YW5jZXMiKSxPPU1hdGgubWluKFMucGZWYWx1ZS5sZW5ndGgsTS5wZlZhbHVlLmxlbmd0aCk7ay5lZGdlVHlwZT0ic2VnbWVudHMiLGsuc2VncHRzPVtdO2Zvcih2YXIgTj0wO048TztOKyspe3ZhciAkPVMucGZWYWx1ZVtOXSxIPU0ucGZWYWx1ZVtOXSxxPTEtJCxZPSQsWj10aGlzLmZpbmRNaWRwdFB0c0V0Yyh4LG0pLGNlPVoubWlkcHRQdHMsdmU9Wi52ZWN0b3JOb3JtSW52ZXJzZSxtZT17eDpjZS54MSpxK2NlLngyKlkseTpjZS55MSpxK2NlLnkyKll9O2suc2VncHRzLnB1c2gobWUueCt2ZS54KkgsbWUueSt2ZS55KkgpfX0sUzEuZmluZExvb3BQb2ludHM9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09eC5fcHJpdmF0ZS5yc2NyYXRjaCxPPW0uZGlyQ291bnRzLE49bS5zcmNQb3MsJD14LnBzdHlsZSgiY29udHJvbC1wb2ludC1kaXN0YW5jZXMiKSxIPSQ/JC5wZlZhbHVlWzBdOnZvaWQgMCxxPXgucHN0eWxlKCJsb29wLWRpcmVjdGlvbiIpLnBmVmFsdWUsWT14LnBzdHlsZSgibG9vcC1zd2VlcCIpLnBmVmFsdWUsWj14LnBzdHlsZSgiY29udHJvbC1wb2ludC1zdGVwLXNpemUiKS5wZlZhbHVlO00uZWRnZVR5cGU9InNlbGYiO3ZhciBjZT1rLHZlPVo7UyYmKGNlPTAsdmU9SCk7dmFyIG1lPXEtTWF0aC5QSS8yLExlPW1lLVkvMixfZT1tZStZLzIsRWU9cSsiXyIrWTtjZT1PW0VlXT09PXZvaWQgMD9PW0VlXT0wOisrT1tFZV0sTS5jdHJscHRzPVtOLngrTWF0aC5jb3MoTGUpKjEuNCp2ZSooY2UvMysxKSxOLnkrTWF0aC5zaW4oTGUpKjEuNCp2ZSooY2UvMysxKSxOLngrTWF0aC5jb3MoX2UpKjEuNCp2ZSooY2UvMysxKSxOLnkrTWF0aC5zaW4oX2UpKjEuNCp2ZSooY2UvMysxKV19LFMxLmZpbmRDb21wb3VuZExvb3BQb2ludHM9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09eC5fcHJpdmF0ZS5yc2NyYXRjaDtNLmVkZ2VUeXBlPSJjb21wb3VuZCI7dmFyIE89bS5zcmNQb3MsTj1tLnRndFBvcywkPW0uc3JjVyxIPW0uc3JjSCxxPW0udGd0VyxZPW0udGd0SCxaPXgucHN0eWxlKCJjb250cm9sLXBvaW50LXN0ZXAtc2l6ZSIpLnBmVmFsdWUsY2U9eC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIiksdmU9Y2U/Y2UucGZWYWx1ZVswXTp2b2lkIDAsbWU9ayxMZT1aO1MmJihtZT0wLExlPXZlKTt2YXIgX2U9NTAsRWU9e3g6Ty54LSQvMix5Ok8ueS1ILzJ9LEJlPXt4Ok4ueC1xLzIseTpOLnktWS8yfSxSZT17eDpNYXRoLm1pbihFZS54LEJlLngpLHk6TWF0aC5taW4oRWUueSxCZS55KX0sVmU9LjUsY3Q9TWF0aC5tYXgoVmUsTWF0aC5sb2coJCouMDEpKSxzdD1NYXRoLm1heChWZSxNYXRoLmxvZyhxKi4wMSkpO00uY3RybHB0cz1bUmUueCxSZS55LSgxK01hdGgucG93KF9lLDEuMTIpLzEwMCkqTGUqKG1lLzMrMSkqY3QsUmUueC0oMStNYXRoLnBvdyhfZSwxLjEyKS8xMDApKkxlKihtZS8zKzEpKnN0LFJlLnldfSxTMS5maW5kU3RyYWlnaHRFZGdlUG9pbnRzPWZ1bmN0aW9uKHgpe3guX3ByaXZhdGUucnNjcmF0Y2guZWRnZVR5cGU9InN0cmFpZ2h0In0sUzEuZmluZEJlemllclBvaW50cz1mdW5jdGlvbih4LG0sayxTLE0pe3ZhciBPPXguX3ByaXZhdGUucnNjcmF0Y2gsTj14LnBzdHlsZSgiY29udHJvbC1wb2ludC1zdGVwLXNpemUiKS5wZlZhbHVlLCQ9eC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIiksSD14LnBzdHlsZSgiY29udHJvbC1wb2ludC13ZWlnaHRzIikscT0kJiZIP01hdGgubWluKCQudmFsdWUubGVuZ3RoLEgudmFsdWUubGVuZ3RoKToxLFk9JD8kLnBmVmFsdWVbMF06dm9pZCAwLFo9SC52YWx1ZVswXSxjZT1TO08uZWRnZVR5cGU9Y2U/Im11bHRpYmV6aWVyIjoiYmV6aWVyIixPLmN0cmxwdHM9W107Zm9yKHZhciB2ZT0wO3ZlPHE7dmUrKyl7dmFyIG1lPSguNS1tLmVsZXMubGVuZ3RoLzIraykqTiooTT8tMToxKSxMZT12b2lkIDAsX2U9ZmoobWUpO2NlJiYoWT0kPyQucGZWYWx1ZVt2ZV06TixaPUgudmFsdWVbdmVdKSxTP0xlPVk6TGU9WSE9PXZvaWQgMD9fZSpZOnZvaWQgMDt2YXIgRWU9TGUhPT12b2lkIDA/TGU6bWUsQmU9MS1aLFJlPVosVmU9dGhpcy5maW5kTWlkcHRQdHNFdGMoeCxtKSxjdD1WZS5taWRwdFB0cyxzdD1WZS52ZWN0b3JOb3JtSW52ZXJzZSxZZT17eDpjdC54MSpCZStjdC54MipSZSx5OmN0LnkxKkJlK2N0LnkyKlJlfTtPLmN0cmxwdHMucHVzaChZZS54K3N0LngqRWUsWWUueStzdC55KkVlKX19LFMxLmZpbmRUYXhpUG9pbnRzPWZ1bmN0aW9uKHgsbSl7dmFyIGs9eC5fcHJpdmF0ZS5yc2NyYXRjaDtrLmVkZ2VUeXBlPSJzZWdtZW50cyI7dmFyIFM9InZlcnRpY2FsIixNPSJob3Jpem9udGFsIixPPSJsZWZ0d2FyZCIsTj0icmlnaHR3YXJkIiwkPSJkb3dud2FyZCIsSD0idXB3YXJkIixxPSJhdXRvIixZPW0ucG9zUHRzLFo9bS5zcmNXLGNlPW0uc3JjSCx2ZT1tLnRndFcsbWU9bS50Z3RILExlPXgucHN0eWxlKCJlZGdlLWRpc3RhbmNlcyIpLnZhbHVlLF9lPUxlIT09Im5vZGUtcG9zaXRpb24iLEVlPXgucHN0eWxlKCJ0YXhpLWRpcmVjdGlvbiIpLnZhbHVlLEJlPUVlLFJlPXgucHN0eWxlKCJ0YXhpLXR1cm4iKSxWZT1SZS51bml0cz09PSIlIixjdD1SZS5wZlZhbHVlLHN0PWN0PDAsWWU9eC5wc3R5bGUoInRheGktdHVybi1taW4tZGlzdGFuY2UiKS5wZlZhbHVlLG10PV9lPyhaK3ZlKS8yOjAsSmU9X2U/KGNlK21lKS8yOjAsTHQ9WS54Mi1ZLngxLE10PVkueTItWS55MSx1dD1mdW5jdGlvbih3cixFcyl7cmV0dXJuIHdyPjA/TWF0aC5tYXgod3ItRXMsMCk6TWF0aC5taW4od3IrRXMsMCl9LFd0PXV0KEx0LG10KSxUdD11dChNdCxKZSksX249ITE7QmU9PT1xP0VlPU1hdGguYWJzKFd0KT5NYXRoLmFicyhUdCk/TTpTOkJlPT09SHx8QmU9PT0kPyhFZT1TLF9uPSEwKTooQmU9PT1PfHxCZT09PU4pJiYoRWU9TSxfbj0hMCk7dmFyIGhuPUVlPT09UyxZdD1obj9UdDpXdCxEbj1obj9NdDpMdCxpcj1maihEbiksdnI9ITE7IShfbiYmKFZlfHxzdCkpJiYoQmU9PT0kJiZEbjwwfHxCZT09PUgmJkRuPjB8fEJlPT09TyYmRG4+MHx8QmU9PT1OJiZEbjwwKSYmKGlyKj0tMSxZdD1pcipNYXRoLmFicyhZdCksdnI9ITApO3ZhciBObjtpZihWZSl7dmFyIHByPWN0PDA/MStjdDpjdDtObj1wcipZdH1lbHNle3ZhciBFcj1jdDwwP1l0OjA7Tm49RXIrY3QqaXJ9dmFyIE1yPWZ1bmN0aW9uKHdyKXtyZXR1cm4gTWF0aC5hYnMod3IpPFllfHxNYXRoLmFicyh3cik+PU1hdGguYWJzKFl0KX0sQ3I9TXIoTm4pLE9yPU1yKE1hdGguYWJzKFl0KS1NYXRoLmFicyhObikpLFduPUNyfHxPcjtpZihXbiYmIXZyKWlmKGhuKXt2YXIgYnI9TWF0aC5hYnMoRG4pPD1jZS8yLFNyPU1hdGguYWJzKEx0KTw9dmUvMjtpZihicil7dmFyIE5yPShZLngxK1kueDIpLzIsU2k9WS55MSx5cz1ZLnkyO2suc2VncHRzPVtOcixTaSxOcix5c119ZWxzZSBpZihTcil7dmFyIHBhPShZLnkxK1kueTIpLzIsTWk9WS54MSxnaT1ZLngyO2suc2VncHRzPVtNaSxwYSxnaSxwYV19ZWxzZSBrLnNlZ3B0cz1bWS54MSxZLnkyXX1lbHNle3ZhciBmcz1NYXRoLmFicyhEbik8PVovMixGcz1NYXRoLmFicyhNdCk8PW1lLzI7aWYoZnMpe3ZhciB4cz0oWS55MStZLnkyKS8yLFJzPVkueDEseW89WS54MjtrLnNlZ3B0cz1bUnMseHMseW8seHNdfWVsc2UgaWYoRnMpe3ZhciAkYT0oWS54MStZLngyKS8yLERhPVkueTEsQm89WS55MjtrLnNlZ3B0cz1bJGEsRGEsJGEsQm9dfWVsc2Ugay5zZWdwdHM9W1kueDIsWS55MV19ZWxzZSBpZihobil7dmFyIHRyPVkueTErTm4rKF9lP2NlLzIqaXI6MCksRz1ZLngxLEpuPVkueDI7ay5zZWdwdHM9W0csdHIsSm4sdHJdfWVsc2V7dmFyIGtyPVkueDErTm4rKF9lP1ovMippcjowKSxscj1ZLnkxLFZ0PVkueTI7ay5zZWdwdHM9W2tyLGxyLGtyLFZ0XX19LFMxLnRyeVRvQ29ycmVjdEludmFsaWRQb2ludHM9ZnVuY3Rpb24oeCxtKXt2YXIgaz14Ll9wcml2YXRlLnJzY3JhdGNoO2lmKGsuZWRnZVR5cGU9PT0iYmV6aWVyIil7dmFyIFM9bS5zcmNQb3MsTT1tLnRndFBvcyxPPW0uc3JjVyxOPW0uc3JjSCwkPW0udGd0VyxIPW0udGd0SCxxPW0uc3JjU2hhcGUsWT1tLnRndFNoYXBlLFo9IVgoay5zdGFydFgpfHwhWChrLnN0YXJ0WSksY2U9IVgoay5hcnJvd1N0YXJ0WCl8fCFYKGsuYXJyb3dTdGFydFkpLHZlPSFYKGsuZW5kWCl8fCFYKGsuZW5kWSksbWU9IVgoay5hcnJvd0VuZFgpfHwhWChrLmFycm93RW5kWSksTGU9MyxfZT10aGlzLmdldEFycm93V2lkdGgoeC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSx4LnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSkqdGhpcy5hcnJvd1NoYXBlV2lkdGgsRWU9TGUqX2UsQmU9aDUoe3g6ay5jdHJscHRzWzBdLHk6ay5jdHJscHRzWzFdfSx7eDprLnN0YXJ0WCx5Omsuc3RhcnRZfSksUmU9QmU8RWUsVmU9aDUoe3g6ay5jdHJscHRzWzBdLHk6ay5jdHJscHRzWzFdfSx7eDprLmVuZFgseTprLmVuZFl9KSxjdD1WZTxFZSxzdD0hMTtpZihafHxjZXx8UmUpe3N0PSEwO3ZhciBZZT17eDprLmN0cmxwdHNbMF0tUy54LHk6ay5jdHJscHRzWzFdLVMueX0sbXQ9TWF0aC5zcXJ0KFllLngqWWUueCtZZS55KlllLnkpLEplPXt4OlllLngvbXQseTpZZS55L210fSxMdD1NYXRoLm1heChPLE4pLE10PXt4OmsuY3RybHB0c1swXStKZS54KjIqTHQseTprLmN0cmxwdHNbMV0rSmUueSoyKkx0fSx1dD1xLmludGVyc2VjdExpbmUoUy54LFMueSxPLE4sTXQueCxNdC55LDApO1JlPyhrLmN0cmxwdHNbMF09ay5jdHJscHRzWzBdK0plLngqKEVlLUJlKSxrLmN0cmxwdHNbMV09ay5jdHJscHRzWzFdK0plLnkqKEVlLUJlKSk6KGsuY3RybHB0c1swXT11dFswXStKZS54KkVlLGsuY3RybHB0c1sxXT11dFsxXStKZS55KkVlKX1pZih2ZXx8bWV8fGN0KXtzdD0hMDt2YXIgV3Q9e3g6ay5jdHJscHRzWzBdLU0ueCx5OmsuY3RybHB0c1sxXS1NLnl9LFR0PU1hdGguc3FydChXdC54Kld0LngrV3QueSpXdC55KSxfbj17eDpXdC54L1R0LHk6V3QueS9UdH0saG49TWF0aC5tYXgoTyxOKSxZdD17eDprLmN0cmxwdHNbMF0rX24ueCoyKmhuLHk6ay5jdHJscHRzWzFdK19uLnkqMipobn0sRG49WS5pbnRlcnNlY3RMaW5lKE0ueCxNLnksJCxILFl0LngsWXQueSwwKTtjdD8oay5jdHJscHRzWzBdPWsuY3RybHB0c1swXStfbi54KihFZS1WZSksay5jdHJscHRzWzFdPWsuY3RybHB0c1sxXStfbi55KihFZS1WZSkpOihrLmN0cmxwdHNbMF09RG5bMF0rX24ueCpFZSxrLmN0cmxwdHNbMV09RG5bMV0rX24ueSpFZSl9c3QmJnRoaXMuZmluZEVuZHBvaW50cyh4KX19LFMxLnN0b3JlQWxscHRzPWZ1bmN0aW9uKHgpe3ZhciBtPXguX3ByaXZhdGUucnNjcmF0Y2g7aWYobS5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fG0uZWRnZVR5cGU9PT0iYmV6aWVyInx8bS5lZGdlVHlwZT09PSJzZWxmInx8bS5lZGdlVHlwZT09PSJjb21wb3VuZCIpe20uYWxscHRzPVtdLG0uYWxscHRzLnB1c2gobS5zdGFydFgsbS5zdGFydFkpO2Zvcih2YXIgaz0wO2srMTxtLmN0cmxwdHMubGVuZ3RoO2srPTIpbS5hbGxwdHMucHVzaChtLmN0cmxwdHNba10sbS5jdHJscHRzW2srMV0pLGsrMzxtLmN0cmxwdHMubGVuZ3RoJiZtLmFsbHB0cy5wdXNoKChtLmN0cmxwdHNba10rbS5jdHJscHRzW2srMl0pLzIsKG0uY3RybHB0c1trKzFdK20uY3RybHB0c1trKzNdKS8yKTttLmFsbHB0cy5wdXNoKG0uZW5kWCxtLmVuZFkpO3ZhciBTLE07bS5jdHJscHRzLmxlbmd0aC8yJTI9PT0wPyhTPW0uYWxscHRzLmxlbmd0aC8yLTEsbS5taWRYPW0uYWxscHRzW1NdLG0ubWlkWT1tLmFsbHB0c1tTKzFdKTooUz1tLmFsbHB0cy5sZW5ndGgvMi0zLE09LjUsbS5taWRYPXQwKG0uYWxscHRzW1NdLG0uYWxscHRzW1MrMl0sbS5hbGxwdHNbUys0XSxNKSxtLm1pZFk9dDAobS5hbGxwdHNbUysxXSxtLmFsbHB0c1tTKzNdLG0uYWxscHRzW1MrNV0sTSkpfWVsc2UgaWYobS5lZGdlVHlwZT09PSJzdHJhaWdodCIpbS5hbGxwdHM9W20uc3RhcnRYLG0uc3RhcnRZLG0uZW5kWCxtLmVuZFldLG0ubWlkWD0obS5zdGFydFgrbS5lbmRYK20uYXJyb3dTdGFydFgrbS5hcnJvd0VuZFgpLzQsbS5taWRZPShtLnN0YXJ0WSttLmVuZFkrbS5hcnJvd1N0YXJ0WSttLmFycm93RW5kWSkvNDtlbHNlIGlmKG0uZWRnZVR5cGU9PT0ic2VnbWVudHMiKWlmKG0uYWxscHRzPVtdLG0uYWxscHRzLnB1c2gobS5zdGFydFgsbS5zdGFydFkpLG0uYWxscHRzLnB1c2guYXBwbHkobS5hbGxwdHMsbS5zZWdwdHMpLG0uYWxscHRzLnB1c2gobS5lbmRYLG0uZW5kWSksbS5zZWdwdHMubGVuZ3RoJTQ9PT0wKXt2YXIgTz1tLnNlZ3B0cy5sZW5ndGgvMixOPU8tMjttLm1pZFg9KG0uc2VncHRzW05dK20uc2VncHRzW09dKS8yLG0ubWlkWT0obS5zZWdwdHNbTisxXSttLnNlZ3B0c1tPKzFdKS8yfWVsc2V7dmFyICQ9bS5zZWdwdHMubGVuZ3RoLzItMTttLm1pZFg9bS5zZWdwdHNbJF0sbS5taWRZPW0uc2VncHRzWyQrMV19fSxTMS5jaGVja0ZvckludmFsaWRFZGdlV2FybmluZz1mdW5jdGlvbih4KXt2YXIgbT14WzBdLl9wcml2YXRlLnJzY3JhdGNoO20ubm9kZXNPdmVybGFwfHxYKG0uc3RhcnRYKSYmWChtLnN0YXJ0WSkmJlgobS5lbmRYKSYmWChtLmVuZFkpP20ubG9nZ2VkRXJyPSExOm0ubG9nZ2VkRXJyfHwobS5sb2dnZWRFcnI9ITAsaHUoIkVkZ2UgYCIreC5pZCgpKyJgIGhhcyBpbnZhbGlkIGVuZHBvaW50cyBhbmQgc28gaXQgaXMgaW1wb3NzaWJsZSB0byBkcmF3LiAgQWRqdXN0IHlvdXIgZWRnZSBzdHlsZSAoZS5nLiBjb250cm9sIHBvaW50cykgYWNjb3JkaW5nbHkgb3IgdXNlIGFuIGFsdGVybmF0aXZlIGVkZ2UgdHlwZS4gIFRoaXMgaXMgZXhwZWN0ZWQgYmVoYXZpb3VyIHdoZW4gdGhlIHNvdXJjZSBub2RlIGFuZCB0aGUgdGFyZ2V0IG5vZGUgb3ZlcmxhcC4iKSl9LFMxLmZpbmRFZGdlQ29udHJvbFBvaW50cz1mdW5jdGlvbih4KXt2YXIgbT10aGlzO2lmKCEoIXh8fHgubGVuZ3RoPT09MCkpe2Zvcih2YXIgaz10aGlzLFM9ay5jeSxNPVMuaGFzQ29tcG91bmROb2RlcygpLE89e21hcDpuZXcgd20sZ2V0OmZ1bmN0aW9uKFllKXt2YXIgbXQ9dGhpcy5tYXAuZ2V0KFllWzBdKTtyZXR1cm4gbXQhPW51bGw/bXQuZ2V0KFllWzFdKTpudWxsfSxzZXQ6ZnVuY3Rpb24oWWUsbXQpe3ZhciBKZT10aGlzLm1hcC5nZXQoWWVbMF0pO0plPT1udWxsJiYoSmU9bmV3IHdtLHRoaXMubWFwLnNldChZZVswXSxKZSkpLEplLnNldChZZVsxXSxtdCl9fSxOPVtdLCQ9W10sSD0wO0g8eC5sZW5ndGg7SCsrKXt2YXIgcT14W0hdLFk9cS5fcHJpdmF0ZSxaPXEucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnZhbHVlO2lmKCEocS5yZW1vdmVkKCl8fCFxLnRha2VzVXBTcGFjZSgpKSl7aWYoWj09PSJoYXlzdGFjayIpeyQucHVzaChxKTtjb250aW51ZX12YXIgY2U9Wj09PSJ1bmJ1bmRsZWQtYmV6aWVyInx8Wj09PSJzZWdtZW50cyJ8fFo9PT0ic3RyYWlnaHQifHxaPT09InN0cmFpZ2h0LXRyaWFuZ2xlInx8Wj09PSJ0YXhpIix2ZT1aPT09InVuYnVuZGxlZC1iZXppZXIifHxaPT09ImJlemllciIsbWU9WS5zb3VyY2UsTGU9WS50YXJnZXQsX2U9bWUucG9vbEluZGV4KCksRWU9TGUucG9vbEluZGV4KCksQmU9W19lLEVlXS5zb3J0KCksUmU9Ty5nZXQoQmUpO1JlPT1udWxsJiYoUmU9e2VsZXM6W119LE8uc2V0KEJlLFJlKSxOLnB1c2goQmUpKSxSZS5lbGVzLnB1c2gocSksY2UmJihSZS5oYXNVbmJ1bmRsZWQ9ITApLHZlJiYoUmUuaGFzQmV6aWVyPSEwKX19Zm9yKHZhciBWZT1mdW5jdGlvbihZZSl7dmFyIG10PU5bWWVdLEplPU8uZ2V0KG10KSxMdD12b2lkIDA7aWYoIUplLmhhc1VuYnVuZGxlZCl7dmFyIE10PUplLmVsZXNbMF0ucGFyYWxsZWxFZGdlcygpLmZpbHRlcihmdW5jdGlvbihCbyl7cmV0dXJuIEJvLmlzQnVuZGxlZEJlemllcigpfSk7Y1MoSmUuZWxlcyksTXQuZm9yRWFjaChmdW5jdGlvbihCbyl7cmV0dXJuIEplLmVsZXMucHVzaChCbyl9KSxKZS5lbGVzLnNvcnQoZnVuY3Rpb24oQm8sdHIpe3JldHVybiBCby5wb29sSW5kZXgoKS10ci5wb29sSW5kZXgoKX0pfXZhciB1dD1KZS5lbGVzWzBdLFd0PXV0LnNvdXJjZSgpLFR0PXV0LnRhcmdldCgpO2lmKFd0LnBvb2xJbmRleCgpPlR0LnBvb2xJbmRleCgpKXt2YXIgX249V3Q7V3Q9VHQsVHQ9X259dmFyIGhuPUplLnNyY1Bvcz1XdC5wb3NpdGlvbigpLFl0PUplLnRndFBvcz1UdC5wb3NpdGlvbigpLERuPUplLnNyY1c9V3Qub3V0ZXJXaWR0aCgpLGlyPUplLnNyY0g9V3Qub3V0ZXJIZWlnaHQoKSx2cj1KZS50Z3RXPVR0Lm91dGVyV2lkdGgoKSxObj1KZS50Z3RIPVR0Lm91dGVySGVpZ2h0KCkscHI9SmUuc3JjU2hhcGU9ay5ub2RlU2hhcGVzW20uZ2V0Tm9kZVNoYXBlKFd0KV0sRXI9SmUudGd0U2hhcGU9ay5ub2RlU2hhcGVzW20uZ2V0Tm9kZVNoYXBlKFR0KV07SmUuZGlyQ291bnRzPXtub3J0aDowLHdlc3Q6MCxzb3V0aDowLGVhc3Q6MCxub3J0aHdlc3Q6MCxzb3V0aHdlc3Q6MCxub3J0aGVhc3Q6MCxzb3V0aGVhc3Q6MH07Zm9yKHZhciBNcj0wO01yPEplLmVsZXMubGVuZ3RoO01yKyspe3ZhciBDcj1KZS5lbGVzW01yXSxPcj1DclswXS5fcHJpdmF0ZS5yc2NyYXRjaCxXbj1Dci5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWUsYnI9V249PT0idW5idW5kbGVkLWJlemllciJ8fFduPT09InNlZ21lbnRzInx8V249PT0idGF4aSIsU3I9IVd0LnNhbWUoQ3Iuc291cmNlKCkpO2lmKCFKZS5jYWxjdWxhdGVkSW50ZXJzZWN0aW9uJiZXdCE9PVR0JiYoSmUuaGFzQmV6aWVyfHxKZS5oYXNVbmJ1bmRsZWQpKXtKZS5jYWxjdWxhdGVkSW50ZXJzZWN0aW9uPSEwO3ZhciBOcj1wci5pbnRlcnNlY3RMaW5lKGhuLngsaG4ueSxEbixpcixZdC54LFl0LnksMCksU2k9SmUuc3JjSW50bj1Ocix5cz1Fci5pbnRlcnNlY3RMaW5lKFl0LngsWXQueSx2cixObixobi54LGhuLnksMCkscGE9SmUudGd0SW50bj15cyxNaT1KZS5pbnRlcnNlY3Rpb25QdHM9e3gxOk5yWzBdLHgyOnlzWzBdLHkxOk5yWzFdLHkyOnlzWzFdfSxnaT1KZS5wb3NQdHM9e3gxOmhuLngseDI6WXQueCx5MTpobi55LHkyOll0Lnl9LGZzPXlzWzFdLU5yWzFdLEZzPXlzWzBdLU5yWzBdLHhzPU1hdGguc3FydChGcypGcytmcypmcyksUnM9SmUudmVjdG9yPXt4OkZzLHk6ZnN9LHlvPUplLnZlY3Rvck5vcm09e3g6UnMueC94cyx5OlJzLnkveHN9LCRhPXt4Oi15by55LHk6eW8ueH07SmUubm9kZXNPdmVybGFwPSFYKHhzKXx8RXIuY2hlY2tQb2ludChOclswXSxOclsxXSwwLHZyLE5uLFl0LngsWXQueSl8fHByLmNoZWNrUG9pbnQoeXNbMF0seXNbMV0sMCxEbixpcixobi54LGhuLnkpLEplLnZlY3Rvck5vcm1JbnZlcnNlPSRhLEx0PXtub2Rlc092ZXJsYXA6SmUubm9kZXNPdmVybGFwLGRpckNvdW50czpKZS5kaXJDb3VudHMsY2FsY3VsYXRlZEludGVyc2VjdGlvbjohMCxoYXNCZXppZXI6SmUuaGFzQmV6aWVyLGhhc1VuYnVuZGxlZDpKZS5oYXNVbmJ1bmRsZWQsZWxlczpKZS5lbGVzLHNyY1BvczpZdCx0Z3RQb3M6aG4sc3JjVzp2cixzcmNIOk5uLHRndFc6RG4sdGd0SDppcixzcmNJbnRuOnBhLHRndEludG46U2ksc3JjU2hhcGU6RXIsdGd0U2hhcGU6cHIscG9zUHRzOnt4MTpnaS54Mix5MTpnaS55Mix4MjpnaS54MSx5MjpnaS55MX0saW50ZXJzZWN0aW9uUHRzOnt4MTpNaS54Mix5MTpNaS55Mix4MjpNaS54MSx5MjpNaS55MX0sdmVjdG9yOnt4Oi1Scy54LHk6LVJzLnl9LHZlY3Rvck5vcm06e3g6LXlvLngseToteW8ueX0sdmVjdG9yTm9ybUludmVyc2U6e3g6LSRhLngseTotJGEueX19fXZhciBEYT1Tcj9MdDpKZTtPci5ub2Rlc092ZXJsYXA9RGEubm9kZXNPdmVybGFwLE9yLnNyY0ludG49RGEuc3JjSW50bixPci50Z3RJbnRuPURhLnRndEludG4sTSYmKFd0LmlzUGFyZW50KCl8fFd0LmlzQ2hpbGQoKXx8VHQuaXNQYXJlbnQoKXx8VHQuaXNDaGlsZCgpKSYmKFd0LnBhcmVudHMoKS5hbnlTYW1lKFR0KXx8VHQucGFyZW50cygpLmFueVNhbWUoV3QpfHxXdC5zYW1lKFR0KSYmV3QuaXNQYXJlbnQoKSk/bS5maW5kQ29tcG91bmRMb29wUG9pbnRzKENyLERhLE1yLGJyKTpXdD09PVR0P20uZmluZExvb3BQb2ludHMoQ3IsRGEsTXIsYnIpOlduPT09InNlZ21lbnRzIj9tLmZpbmRTZWdtZW50c1BvaW50cyhDcixEYSk6V249PT0idGF4aSI/bS5maW5kVGF4aVBvaW50cyhDcixEYSk6V249PT0ic3RyYWlnaHQifHwhYnImJkplLmVsZXMubGVuZ3RoJTI9PT0xJiZNcj09PU1hdGguZmxvb3IoSmUuZWxlcy5sZW5ndGgvMik/bS5maW5kU3RyYWlnaHRFZGdlUG9pbnRzKENyKTptLmZpbmRCZXppZXJQb2ludHMoQ3IsRGEsTXIsYnIsU3IpLG0uZmluZEVuZHBvaW50cyhDciksbS50cnlUb0NvcnJlY3RJbnZhbGlkUG9pbnRzKENyLERhKSxtLmNoZWNrRm9ySW52YWxpZEVkZ2VXYXJuaW5nKENyKSxtLnN0b3JlQWxscHRzKENyKSxtLnN0b3JlRWRnZVByb2plY3Rpb25zKENyKSxtLmNhbGN1bGF0ZUFycm93QW5nbGVzKENyKSxtLnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnMoQ3IpLG0uY2FsY3VsYXRlTGFiZWxBbmdsZXMoQ3IpfX0sY3Q9MDtjdDxOLmxlbmd0aDtjdCsrKVZlKGN0KTt0aGlzLmZpbmRIYXlzdGFja1BvaW50cygkKX19O2Z1bmN0aW9uIFEkKHgpe3ZhciBtPVtdO2lmKHghPW51bGwpe2Zvcih2YXIgaz0wO2s8eC5sZW5ndGg7ays9Mil7dmFyIFM9eFtrXSxNPXhbaysxXTttLnB1c2goe3g6Uyx5Ok19KX1yZXR1cm4gbX19UzEuZ2V0U2VnbWVudFBvaW50cz1mdW5jdGlvbih4KXt2YXIgbT14WzBdLl9wcml2YXRlLnJzY3JhdGNoLGs9bS5lZGdlVHlwZTtpZihrPT09InNlZ21lbnRzIilyZXR1cm4gdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoeCksUSQobS5zZWdwdHMpfSxTMS5nZXRDb250cm9sUG9pbnRzPWZ1bmN0aW9uKHgpe3ZhciBtPXhbMF0uX3ByaXZhdGUucnNjcmF0Y2gsaz1tLmVkZ2VUeXBlO2lmKGs9PT0iYmV6aWVyInx8az09PSJtdWx0aWJlemllciJ8fGs9PT0ic2VsZiJ8fGs9PT0iY29tcG91bmQiKXJldHVybiB0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh4KSxRJChtLmN0cmxwdHMpfSxTMS5nZXRFZGdlTWlkcG9pbnQ9ZnVuY3Rpb24oeCl7dmFyIG09eFswXS5fcHJpdmF0ZS5yc2NyYXRjaDtyZXR1cm4gdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoeCkse3g6bS5taWRYLHk6bS5taWRZfX07dmFyIGhrPXt9O2hrLm1hbnVhbEVuZHB0VG9QeD1mdW5jdGlvbih4LG0pe3ZhciBrPXRoaXMsUz14LnBvc2l0aW9uKCksTT14Lm91dGVyV2lkdGgoKSxPPXgub3V0ZXJIZWlnaHQoKTtpZihtLnZhbHVlLmxlbmd0aD09PTIpe3ZhciBOPVttLnBmVmFsdWVbMF0sbS5wZlZhbHVlWzFdXTtyZXR1cm4gbS51bml0c1swXT09PSIlIiYmKE5bMF09TlswXSpNKSxtLnVuaXRzWzFdPT09IiUiJiYoTlsxXT1OWzFdKk8pLE5bMF0rPVMueCxOWzFdKz1TLnksTn1lbHNle3ZhciAkPW0ucGZWYWx1ZVswXTskPS1NYXRoLlBJLzIrJDt2YXIgSD0yKk1hdGgubWF4KE0sTykscT1bUy54K01hdGguY29zKCQpKkgsUy55K01hdGguc2luKCQpKkhdO3JldHVybiBrLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUoeCldLmludGVyc2VjdExpbmUoUy54LFMueSxNLE8scVswXSxxWzFdLDApfX0saGsuZmluZEVuZHBvaW50cz1mdW5jdGlvbih4KXt2YXIgbT10aGlzLGssUz14LnNvdXJjZSgpWzBdLE09eC50YXJnZXQoKVswXSxPPVMucG9zaXRpb24oKSxOPU0ucG9zaXRpb24oKSwkPXgucHN0eWxlKCJ0YXJnZXQtYXJyb3ctc2hhcGUiKS52YWx1ZSxIPXgucHN0eWxlKCJzb3VyY2UtYXJyb3ctc2hhcGUiKS52YWx1ZSxxPXgucHN0eWxlKCJ0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlIikucGZWYWx1ZSxZPXgucHN0eWxlKCJzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlIikucGZWYWx1ZSxaPXgucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnZhbHVlLGNlPXguX3ByaXZhdGUucnNjcmF0Y2gsdmU9Y2UuZWRnZVR5cGUsbWU9Wj09PSJ0YXhpIixMZT12ZT09PSJzZWxmInx8dmU9PT0iY29tcG91bmQiLF9lPXZlPT09ImJlemllciJ8fHZlPT09Im11bHRpYmV6aWVyInx8TGUsRWU9dmUhPT0iYmV6aWVyIixCZT12ZT09PSJzdHJhaWdodCJ8fHZlPT09InNlZ21lbnRzIixSZT12ZT09PSJzZWdtZW50cyIsVmU9X2V8fEVlfHxCZSxjdD1MZXx8bWUsc3Q9eC5wc3R5bGUoInNvdXJjZS1lbmRwb2ludCIpLFllPWN0PyJvdXRzaWRlLXRvLW5vZGUiOnN0LnZhbHVlLG10PXgucHN0eWxlKCJ0YXJnZXQtZW5kcG9pbnQiKSxKZT1jdD8ib3V0c2lkZS10by1ub2RlIjptdC52YWx1ZTtjZS5zcmNNYW5FbmRwdD1zdCxjZS50Z3RNYW5FbmRwdD1tdDt2YXIgTHQsTXQsdXQsV3Q7aWYoX2Upe3ZhciBUdD1bY2UuY3RybHB0c1swXSxjZS5jdHJscHRzWzFdXSxfbj1FZT9bY2UuY3RybHB0c1tjZS5jdHJscHRzLmxlbmd0aC0yXSxjZS5jdHJscHRzW2NlLmN0cmxwdHMubGVuZ3RoLTFdXTpUdDtMdD1fbixNdD1UdH1lbHNlIGlmKEJlKXt2YXIgaG49UmU/Y2Uuc2VncHRzLnNsaWNlKDAsMik6W04ueCxOLnldLFl0PVJlP2NlLnNlZ3B0cy5zbGljZShjZS5zZWdwdHMubGVuZ3RoLTIpOltPLngsTy55XTtMdD1ZdCxNdD1obn1pZihKZT09PSJpbnNpZGUtdG8tbm9kZSIpaz1bTi54LE4ueV07ZWxzZSBpZihtdC51bml0cylrPXRoaXMubWFudWFsRW5kcHRUb1B4KE0sbXQpO2Vsc2UgaWYoSmU9PT0ib3V0c2lkZS10by1saW5lIilrPWNlLnRndEludG47ZWxzZSBpZihKZT09PSJvdXRzaWRlLXRvLW5vZGUifHxKZT09PSJvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwiP3V0PUx0OihKZT09PSJvdXRzaWRlLXRvLWxpbmUifHxKZT09PSJvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwiKSYmKHV0PVtPLngsTy55XSksaz1tLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUoTSldLmludGVyc2VjdExpbmUoTi54LE4ueSxNLm91dGVyV2lkdGgoKSxNLm91dGVySGVpZ2h0KCksdXRbMF0sdXRbMV0sMCksSmU9PT0ib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsInx8SmU9PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIil7dmFyIERuPU0uX3ByaXZhdGUucnNjcmF0Y2gsaXI9RG4ubGFiZWxXaWR0aCx2cj1Ebi5sYWJlbEhlaWdodCxObj1Ebi5sYWJlbFgscHI9RG4ubGFiZWxZLEVyPWlyLzIsTXI9dnIvMixDcj1NLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZTtDcj09PSJ0b3AiP3ByLT1NcjpDcj09PSJib3R0b20iJiYocHIrPU1yKTt2YXIgT3I9TS5wc3R5bGUoInRleHQtaGFsaWduIikudmFsdWU7T3I9PT0ibGVmdCI/Tm4tPUVyOk9yPT09InJpZ2h0IiYmKE5uKz1Fcik7dmFyIFduPUs5KHV0WzBdLHV0WzFdLFtObi1Fcixwci1NcixObitFcixwci1NcixObitFcixwcitNcixObi1FcixwcitNcl0sTi54LE4ueSk7aWYoV24ubGVuZ3RoPjApe3ZhciBicj1PLFNyPWY1KGJyLEo3KGspKSxOcj1mNShicixKNyhXbikpLFNpPVNyO2lmKE5yPFNyJiYoaz1XbixTaT1OciksV24ubGVuZ3RoPjIpe3ZhciB5cz1mNShicix7eDpXblsyXSx5OlduWzNdfSk7eXM8U2kmJihrPVtXblsyXSxXblszXV0pfX19dmFyIHBhPWJTKGssTHQsbS5hcnJvd1NoYXBlc1skXS5zcGFjaW5nKHgpK3EpLE1pPWJTKGssTHQsbS5hcnJvd1NoYXBlc1skXS5nYXAoeCkrcSk7aWYoY2UuZW5kWD1NaVswXSxjZS5lbmRZPU1pWzFdLGNlLmFycm93RW5kWD1wYVswXSxjZS5hcnJvd0VuZFk9cGFbMV0sWWU9PT0iaW5zaWRlLXRvLW5vZGUiKWs9W08ueCxPLnldO2Vsc2UgaWYoc3QudW5pdHMpaz10aGlzLm1hbnVhbEVuZHB0VG9QeChTLHN0KTtlbHNlIGlmKFllPT09Im91dHNpZGUtdG8tbGluZSIpaz1jZS5zcmNJbnRuO2Vsc2UgaWYoWWU9PT0ib3V0c2lkZS10by1ub2RlInx8WWU9PT0ib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsIj9XdD1NdDooWWU9PT0ib3V0c2lkZS10by1saW5lInx8WWU9PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIikmJihXdD1bTi54LE4ueV0pLGs9bS5ub2RlU2hhcGVzW3RoaXMuZ2V0Tm9kZVNoYXBlKFMpXS5pbnRlcnNlY3RMaW5lKE8ueCxPLnksUy5vdXRlcldpZHRoKCksUy5vdXRlckhlaWdodCgpLFd0WzBdLFd0WzFdLDApLFllPT09Im91dHNpZGUtdG8tbm9kZS1vci1sYWJlbCJ8fFllPT09Im91dHNpZGUtdG8tbGluZS1vci1sYWJlbCIpe3ZhciBnaT1TLl9wcml2YXRlLnJzY3JhdGNoLGZzPWdpLmxhYmVsV2lkdGgsRnM9Z2kubGFiZWxIZWlnaHQseHM9Z2kubGFiZWxYLFJzPWdpLmxhYmVsWSx5bz1mcy8yLCRhPUZzLzIsRGE9Uy5wc3R5bGUoInRleHQtdmFsaWduIikudmFsdWU7RGE9PT0idG9wIj9Scy09JGE6RGE9PT0iYm90dG9tIiYmKFJzKz0kYSk7dmFyIEJvPVMucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnZhbHVlO0JvPT09ImxlZnQiP3hzLT15bzpCbz09PSJyaWdodCImJih4cys9eW8pO3ZhciB0cj1LOShXdFswXSxXdFsxXSxbeHMteW8sUnMtJGEseHMreW8sUnMtJGEseHMreW8sUnMrJGEseHMteW8sUnMrJGFdLE8ueCxPLnkpO2lmKHRyLmxlbmd0aD4wKXt2YXIgRz1OLEpuPWY1KEcsSjcoaykpLGtyPWY1KEcsSjcodHIpKSxscj1KbjtpZihrcjxKbiYmKGs9W3RyWzBdLHRyWzFdXSxscj1rciksdHIubGVuZ3RoPjIpe3ZhciBWdD1mNShHLHt4OnRyWzJdLHk6dHJbM119KTtWdDxsciYmKGs9W3RyWzJdLHRyWzNdXSl9fX12YXIgSHM9YlMoayxNdCxtLmFycm93U2hhcGVzW0hdLnNwYWNpbmcoeCkrWSksd3I9YlMoayxNdCxtLmFycm93U2hhcGVzW0hdLmdhcCh4KStZKTtjZS5zdGFydFg9d3JbMF0sY2Uuc3RhcnRZPXdyWzFdLGNlLmFycm93U3RhcnRYPUhzWzBdLGNlLmFycm93U3RhcnRZPUhzWzFdLFZlJiYoIVgoY2Uuc3RhcnRYKXx8IVgoY2Uuc3RhcnRZKXx8IVgoY2UuZW5kWCl8fCFYKGNlLmVuZFkpP2NlLmJhZExpbmU9ITA6Y2UuYmFkTGluZT0hMSl9LGhrLmdldFNvdXJjZUVuZHBvaW50PWZ1bmN0aW9uKHgpe3ZhciBtPXhbMF0uX3ByaXZhdGUucnNjcmF0Y2g7c3dpdGNoKHRoaXMucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKHgpLG0uZWRnZVR5cGUpe2Nhc2UiaGF5c3RhY2siOnJldHVybnt4Om0uaGF5c3RhY2tQdHNbMF0seTptLmhheXN0YWNrUHRzWzFdfTtkZWZhdWx0OnJldHVybnt4Om0uYXJyb3dTdGFydFgseTptLmFycm93U3RhcnRZfX19LGhrLmdldFRhcmdldEVuZHBvaW50PWZ1bmN0aW9uKHgpe3ZhciBtPXhbMF0uX3ByaXZhdGUucnNjcmF0Y2g7c3dpdGNoKHRoaXMucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKHgpLG0uZWRnZVR5cGUpe2Nhc2UiaGF5c3RhY2siOnJldHVybnt4Om0uaGF5c3RhY2tQdHNbMl0seTptLmhheXN0YWNrUHRzWzNdfTtkZWZhdWx0OnJldHVybnt4Om0uYXJyb3dFbmRYLHk6bS5hcnJvd0VuZFl9fX07dmFyIEZJPXt9O2Z1bmN0aW9uIEokKHgsbSxrKXtmb3IodmFyIFM9ZnVuY3Rpb24ocSxZLFosY2Upe3JldHVybiB0MChxLFksWixjZSl9LE09bS5fcHJpdmF0ZSxPPU0ucnN0eWxlLmJlemllclB0cyxOPTA7Tjx4LmJlemllclByb2pQY3RzLmxlbmd0aDtOKyspe3ZhciAkPXguYmV6aWVyUHJvalBjdHNbTl07Ty5wdXNoKHt4OlMoa1swXSxrWzJdLGtbNF0sJCkseTpTKGtbMV0sa1szXSxrWzVdLCQpfSl9fUZJLnN0b3JlRWRnZVByb2plY3Rpb25zPWZ1bmN0aW9uKHgpe3ZhciBtPXguX3ByaXZhdGUsaz1tLnJzY3JhdGNoLFM9ay5lZGdlVHlwZTtpZihtLnJzdHlsZS5iZXppZXJQdHM9bnVsbCxtLnJzdHlsZS5saW5lUHRzPW51bGwsbS5yc3R5bGUuaGF5c3RhY2tQdHM9bnVsbCxTPT09Im11bHRpYmV6aWVyInx8Uz09PSJiZXppZXIifHxTPT09InNlbGYifHxTPT09ImNvbXBvdW5kIil7bS5yc3R5bGUuYmV6aWVyUHRzPVtdO2Zvcih2YXIgTT0wO00rNTxrLmFsbHB0cy5sZW5ndGg7TSs9NClKJCh0aGlzLHgsay5hbGxwdHMuc2xpY2UoTSxNKzYpKX1lbHNlIGlmKFM9PT0ic2VnbWVudHMiKWZvcih2YXIgTz1tLnJzdHlsZS5saW5lUHRzPVtdLE09MDtNKzE8ay5hbGxwdHMubGVuZ3RoO00rPTIpTy5wdXNoKHt4OmsuYWxscHRzW01dLHk6ay5hbGxwdHNbTSsxXX0pO2Vsc2UgaWYoUz09PSJoYXlzdGFjayIpe3ZhciBOPWsuaGF5c3RhY2tQdHM7bS5yc3R5bGUuaGF5c3RhY2tQdHM9W3t4Ok5bMF0seTpOWzFdfSx7eDpOWzJdLHk6TlszXX1dfW0ucnN0eWxlLmFycm93V2lkdGg9dGhpcy5nZXRBcnJvd1dpZHRoKHgucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUseC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUpKnRoaXMuYXJyb3dTaGFwZVdpZHRofSxGSS5yZWNhbGN1bGF0ZUVkZ2VQcm9qZWN0aW9ucz1mdW5jdGlvbih4KXt0aGlzLmZpbmRFZGdlQ29udHJvbFBvaW50cyh4KX07dmFyIGttPXt9O2ttLnJlY2FsY3VsYXRlTm9kZUxhYmVsUHJvamVjdGlvbj1mdW5jdGlvbih4KXt2YXIgbT14LnBzdHlsZSgibGFiZWwiKS5zdHJWYWx1ZTtpZighU2UobSkpe3ZhciBrLFMsTT14Ll9wcml2YXRlLE89eC53aWR0aCgpLE49eC5oZWlnaHQoKSwkPXgucGFkZGluZygpLEg9eC5wb3NpdGlvbigpLHE9eC5wc3R5bGUoInRleHQtaGFsaWduIikuc3RyVmFsdWUsWT14LnBzdHlsZSgidGV4dC12YWxpZ24iKS5zdHJWYWx1ZSxaPU0ucnNjcmF0Y2gsY2U9TS5yc3R5bGU7c3dpdGNoKHEpe2Nhc2UibGVmdCI6az1ILngtTy8yLSQ7YnJlYWs7Y2FzZSJyaWdodCI6az1ILngrTy8yKyQ7YnJlYWs7ZGVmYXVsdDprPUgueH1zd2l0Y2goWSl7Y2FzZSJ0b3AiOlM9SC55LU4vMi0kO2JyZWFrO2Nhc2UiYm90dG9tIjpTPUgueStOLzIrJDticmVhaztkZWZhdWx0OlM9SC55fVoubGFiZWxYPWssWi5sYWJlbFk9UyxjZS5sYWJlbFg9ayxjZS5sYWJlbFk9Uyx0aGlzLmNhbGN1bGF0ZUxhYmVsQW5nbGVzKHgpLHRoaXMuYXBwbHlMYWJlbERpbWVuc2lvbnMoeCl9fTt2YXIgWiQ9ZnVuY3Rpb24obSxrKXt2YXIgUz1NYXRoLmF0YW4oay9tKTtyZXR1cm4gbT09PTAmJlM8MCYmKFM9UyotMSksU30sR1M9ZnVuY3Rpb24obSxrKXt2YXIgUz1rLngtbS54LE09ay55LW0ueTtyZXR1cm4gWiQoUyxNKX0sSHJlPWZ1bmN0aW9uKG0sayxTLE0pe3ZhciBPPVU5KDAsTS0uMDAxLDEpLE49VTkoMCxNKy4wMDEsMSksJD1aNyhtLGssUyxPKSxIPVo3KG0sayxTLE4pO3JldHVybiBHUygkLEgpfTtrbS5yZWNhbGN1bGF0ZUVkZ2VMYWJlbFByb2plY3Rpb25zPWZ1bmN0aW9uKHgpe3ZhciBtLGs9eC5fcHJpdmF0ZSxTPWsucnNjcmF0Y2gsTT10aGlzLE89e21pZDp4LnBzdHlsZSgibGFiZWwiKS5zdHJWYWx1ZSxzb3VyY2U6eC5wc3R5bGUoInNvdXJjZS1sYWJlbCIpLnN0clZhbHVlLHRhcmdldDp4LnBzdHlsZSgidGFyZ2V0LWxhYmVsIikuc3RyVmFsdWV9O2lmKE8ubWlkfHxPLnNvdXJjZXx8Ty50YXJnZXQpe209e3g6Uy5taWRYLHk6Uy5taWRZfTt2YXIgTj1mdW5jdGlvbihaLGNlLHZlKXtKMyhrLnJzY3JhdGNoLFosY2UsdmUpLEozKGsucnN0eWxlLFosY2UsdmUpfTtOKCJsYWJlbFgiLG51bGwsbS54KSxOKCJsYWJlbFkiLG51bGwsbS55KTt2YXIgJD1aJChTLm1pZERpc3BYLFMubWlkRGlzcFkpO04oImxhYmVsQXV0b0FuZ2xlIixudWxsLCQpO3ZhciBIPWZ1bmN0aW9uIFkoKXtpZihZLmNhY2hlKXJldHVybiBZLmNhY2hlO2Zvcih2YXIgWj1bXSxjZT0wO2NlKzU8Uy5hbGxwdHMubGVuZ3RoO2NlKz00KXt2YXIgdmU9e3g6Uy5hbGxwdHNbY2VdLHk6Uy5hbGxwdHNbY2UrMV19LG1lPXt4OlMuYWxscHRzW2NlKzJdLHk6Uy5hbGxwdHNbY2UrM119LExlPXt4OlMuYWxscHRzW2NlKzRdLHk6Uy5hbGxwdHNbY2UrNV19O1oucHVzaCh7cDA6dmUscDE6bWUscDI6TGUsc3RhcnREaXN0OjAsbGVuZ3RoOjAsc2VnbWVudHM6W119KX12YXIgX2U9ay5yc3R5bGUuYmV6aWVyUHRzLEVlPU0uYmV6aWVyUHJvalBjdHMubGVuZ3RoO2Z1bmN0aW9uIEJlKFllLG10LEplLEx0LE10KXt2YXIgdXQ9aDUobXQsSmUpLFd0PVllLnNlZ21lbnRzW1llLnNlZ21lbnRzLmxlbmd0aC0xXSxUdD17cDA6bXQscDE6SmUsdDA6THQsdDE6TXQsc3RhcnREaXN0Old0P1d0LnN0YXJ0RGlzdCtXdC5sZW5ndGg6MCxsZW5ndGg6dXR9O1llLnNlZ21lbnRzLnB1c2goVHQpLFllLmxlbmd0aCs9dXR9Zm9yKHZhciBSZT0wO1JlPFoubGVuZ3RoO1JlKyspe3ZhciBWZT1aW1JlXSxjdD1aW1JlLTFdO2N0JiYoVmUuc3RhcnREaXN0PWN0LnN0YXJ0RGlzdCtjdC5sZW5ndGgpLEJlKFZlLFZlLnAwLF9lW1JlKkVlXSwwLE0uYmV6aWVyUHJvalBjdHNbMF0pO2Zvcih2YXIgc3Q9MDtzdDxFZS0xO3N0KyspQmUoVmUsX2VbUmUqRWUrc3RdLF9lW1JlKkVlK3N0KzFdLE0uYmV6aWVyUHJvalBjdHNbc3RdLE0uYmV6aWVyUHJvalBjdHNbc3QrMV0pO0JlKFZlLF9lW1JlKkVlK0VlLTFdLFZlLnAyLE0uYmV6aWVyUHJvalBjdHNbRWUtMV0sMSl9cmV0dXJuIFkuY2FjaGU9Wn0scT1mdW5jdGlvbihaKXt2YXIgY2UsdmU9Wj09PSJzb3VyY2UiO2lmKE9bWl0pe3ZhciBtZT14LnBzdHlsZShaKyItdGV4dC1vZmZzZXQiKS5wZlZhbHVlO3N3aXRjaChTLmVkZ2VUeXBlKXtjYXNlInNlbGYiOmNhc2UiY29tcG91bmQiOmNhc2UiYmV6aWVyIjpjYXNlIm11bHRpYmV6aWVyIjp7Zm9yKHZhciBMZT1IKCksX2UsRWU9MCxCZT0wLFJlPTA7UmU8TGUubGVuZ3RoO1JlKyspe2Zvcih2YXIgVmU9TGVbdmU/UmU6TGUubGVuZ3RoLTEtUmVdLGN0PTA7Y3Q8VmUuc2VnbWVudHMubGVuZ3RoO2N0Kyspe3ZhciBzdD1WZS5zZWdtZW50c1t2ZT9jdDpWZS5zZWdtZW50cy5sZW5ndGgtMS1jdF0sWWU9UmU9PT1MZS5sZW5ndGgtMSYmY3Q9PT1WZS5zZWdtZW50cy5sZW5ndGgtMTtpZihFZT1CZSxCZSs9c3QubGVuZ3RoLEJlPj1tZXx8WWUpe19lPXtjcDpWZSxzZWdtZW50OnN0fTticmVha319aWYoX2UpYnJlYWt9dmFyIG10PV9lLmNwLEplPV9lLnNlZ21lbnQsTHQ9KG1lLUVlKS9KZS5sZW5ndGgsTXQ9SmUudDEtSmUudDAsdXQ9dmU/SmUudDArTXQqTHQ6SmUudDEtTXQqTHQ7dXQ9VTkoMCx1dCwxKSxtPVo3KG10LnAwLG10LnAxLG10LnAyLHV0KSxjZT1IcmUobXQucDAsbXQucDEsbXQucDIsdXQpO2JyZWFrfWNhc2Uic3RyYWlnaHQiOmNhc2Uic2VnbWVudHMiOmNhc2UiaGF5c3RhY2siOntmb3IodmFyIFd0PTAsVHQsX24saG4sWXQsRG49Uy5hbGxwdHMubGVuZ3RoLGlyPTA7aXIrMzxEbiYmKHZlPyhobj17eDpTLmFsbHB0c1tpcl0seTpTLmFsbHB0c1tpcisxXX0sWXQ9e3g6Uy5hbGxwdHNbaXIrMl0seTpTLmFsbHB0c1tpciszXX0pOihobj17eDpTLmFsbHB0c1tEbi0yLWlyXSx5OlMuYWxscHRzW0RuLTEtaXJdfSxZdD17eDpTLmFsbHB0c1tEbi00LWlyXSx5OlMuYWxscHRzW0RuLTMtaXJdfSksVHQ9aDUoaG4sWXQpLF9uPVd0LFd0Kz1UdCwhKFd0Pj1tZSkpO2lyKz0yKTt2YXIgdnI9bWUtX24sTm49dnIvVHQ7Tm49VTkoMCxObiwxKSxtPWZaKGhuLFl0LE5uKSxjZT1HUyhobixZdCk7YnJlYWt9fU4oImxhYmVsWCIsWixtLngpLE4oImxhYmVsWSIsWixtLnkpLE4oImxhYmVsQXV0b0FuZ2xlIixaLGNlKX19O3EoInNvdXJjZSIpLHEoInRhcmdldCIpLHRoaXMuYXBwbHlMYWJlbERpbWVuc2lvbnMoeCl9fSxrbS5hcHBseUxhYmVsRGltZW5zaW9ucz1mdW5jdGlvbih4KXt0aGlzLmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnMoeCkseC5pc0VkZ2UoKSYmKHRoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyh4LCJzb3VyY2UiKSx0aGlzLmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnMoeCwidGFyZ2V0IikpfSxrbS5hcHBseVByZWZpeGVkTGFiZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHgsbSl7dmFyIGs9eC5fcHJpdmF0ZSxTPXRoaXMuZ2V0TGFiZWxUZXh0KHgsbSksTT10aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh4LFMpLE89eC5wc3R5bGUoImxpbmUtaGVpZ2h0IikucGZWYWx1ZSxOPXgucHN0eWxlKCJ0ZXh0LXdyYXAiKS5zdHJWYWx1ZSwkPUsyKGsucnNjcmF0Y2gsImxhYmVsV3JhcENhY2hlZExpbmVzIixtKXx8W10sSD1OIT09IndyYXAiPzE6TWF0aC5tYXgoJC5sZW5ndGgsMSkscT1NLmhlaWdodC9ILFk9cSpPLFo9TS53aWR0aCxjZT1NLmhlaWdodCsoSC0xKSooTy0xKSpxO0ozKGsucnN0eWxlLCJsYWJlbFdpZHRoIixtLFopLEozKGsucnNjcmF0Y2gsImxhYmVsV2lkdGgiLG0sWiksSjMoay5yc3R5bGUsImxhYmVsSGVpZ2h0IixtLGNlKSxKMyhrLnJzY3JhdGNoLCJsYWJlbEhlaWdodCIsbSxjZSksSjMoay5yc2NyYXRjaCwibGFiZWxMaW5lSGVpZ2h0IixtLFkpfSxrbS5nZXRMYWJlbFRleHQ9ZnVuY3Rpb24oeCxtKXt2YXIgaz14Ll9wcml2YXRlLFM9bT9tKyItIjoiIixNPXgucHN0eWxlKFMrImxhYmVsIikuc3RyVmFsdWUsTz14LnBzdHlsZSgidGV4dC10cmFuc2Zvcm0iKS52YWx1ZSxOPWZ1bmN0aW9uKHZyLE5uKXtyZXR1cm4gTm4/KEozKGsucnNjcmF0Y2gsdnIsbSxObiksTm4pOksyKGsucnNjcmF0Y2gsdnIsbSl9O2lmKCFNKXJldHVybiIiO089PSJub25lInx8KE89PSJ1cHBlcmNhc2UiP009TS50b1VwcGVyQ2FzZSgpOk89PSJsb3dlcmNhc2UiJiYoTT1NLnRvTG93ZXJDYXNlKCkpKTt2YXIgJD14LnBzdHlsZSgidGV4dC13cmFwIikudmFsdWU7aWYoJD09PSJ3cmFwIil7dmFyIEg9TigibGFiZWxLZXkiKTtpZihIIT1udWxsJiZOKCJsYWJlbFdyYXBLZXkiKT09PUgpcmV0dXJuIE4oImxhYmVsV3JhcENhY2hlZFRleHQiKTtmb3IodmFyIHE9IuKAiyIsWT1NLnNwbGl0KGAKYCksWj14LnBzdHlsZSgidGV4dC1tYXgtd2lkdGgiKS5wZlZhbHVlLGNlPXgucHN0eWxlKCJ0ZXh0LW92ZXJmbG93LXdyYXAiKS52YWx1ZSx2ZT1jZT09PSJhbnl3aGVyZSIsbWU9W10sTGU9L1tcc1x1MjAwYl0rLyxfZT12ZT8iIjoiICIsRWU9MDtFZTxZLmxlbmd0aDtFZSsrKXt2YXIgQmU9WVtFZV0sUmU9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeCxCZSksVmU9UmUud2lkdGg7aWYodmUpe3ZhciBjdD1CZS5zcGxpdCgiIikuam9pbihxKTtCZT1jdH1pZihWZT5aKXtmb3IodmFyIHN0PUJlLnNwbGl0KExlKSxZZT0iIixtdD0wO210PHN0Lmxlbmd0aDttdCsrKXt2YXIgSmU9c3RbbXRdLEx0PVllLmxlbmd0aD09PTA/SmU6WWUrX2UrSmUsTXQ9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeCxMdCksdXQ9TXQud2lkdGg7dXQ8PVo/WWUrPUplK19lOihZZSYmbWUucHVzaChZZSksWWU9SmUrX2UpfVllLm1hdGNoKC9eW1xzXHUyMDBiXSskLyl8fG1lLnB1c2goWWUpfWVsc2UgbWUucHVzaChCZSl9TigibGFiZWxXcmFwQ2FjaGVkTGluZXMiLG1lKSxNPU4oImxhYmVsV3JhcENhY2hlZFRleHQiLG1lLmpvaW4oYApgKSksTigibGFiZWxXcmFwS2V5IixIKX1lbHNlIGlmKCQ9PT0iZWxsaXBzaXMiKXt2YXIgV3Q9eC5wc3R5bGUoInRleHQtbWF4LXdpZHRoIikucGZWYWx1ZSxUdD0iIixfbj0i4oCmIixobj0hMTtpZih0aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh4LE0pLndpZHRoPFd0KXJldHVybiBNO2Zvcih2YXIgWXQ9MDtZdDxNLmxlbmd0aDtZdCsrKXt2YXIgRG49dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeCxUdCtNW1l0XStfbikud2lkdGg7aWYoRG4+V3QpYnJlYWs7VHQrPU1bWXRdLFl0PT09TS5sZW5ndGgtMSYmKGhuPSEwKX1yZXR1cm4gaG58fChUdCs9X24pLFR0fXJldHVybiBNfSxrbS5nZXRMYWJlbEp1c3RpZmljYXRpb249ZnVuY3Rpb24oeCl7dmFyIG09eC5wc3R5bGUoInRleHQtanVzdGlmaWNhdGlvbiIpLnN0clZhbHVlLGs9eC5wc3R5bGUoInRleHQtaGFsaWduIikuc3RyVmFsdWU7aWYobT09PSJhdXRvIilpZih4LmlzTm9kZSgpKXN3aXRjaChrKXtjYXNlImxlZnQiOnJldHVybiJyaWdodCI7Y2FzZSJyaWdodCI6cmV0dXJuImxlZnQiO2RlZmF1bHQ6cmV0dXJuImNlbnRlciJ9ZWxzZSByZXR1cm4iY2VudGVyIjtlbHNlIHJldHVybiBtfSxrbS5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnM9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzLFM9dWQobSx4Ll9wcml2YXRlLmxhYmVsRGltc0tleSksTT1rLmxhYmVsRGltQ2FjaGV8fChrLmxhYmVsRGltQ2FjaGU9W10pLE89TVtTXTtpZihPIT1udWxsKXJldHVybiBPO3ZhciBOPTAsJD14LnBzdHlsZSgiZm9udC1zdHlsZSIpLnN0clZhbHVlLEg9eC5wc3R5bGUoImZvbnQtc2l6ZSIpLnBmVmFsdWUscT14LnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxZPXgucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLFo9dGhpcy5sYWJlbENhbGNDYW52YXMsY2U9dGhpcy5sYWJlbENhbGNDYW52YXNDb250ZXh0O2lmKCFaKXtaPXRoaXMubGFiZWxDYWxjQ2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGNlPXRoaXMubGFiZWxDYWxjQ2FudmFzQ29udGV4dD1aLmdldENvbnRleHQoIjJkIik7dmFyIHZlPVouc3R5bGU7dmUucG9zaXRpb249ImFic29sdXRlIix2ZS5sZWZ0PSItOTk5OXB4Iix2ZS50b3A9Ii05OTk5cHgiLHZlLnpJbmRleD0iLTEiLHZlLnZpc2liaWxpdHk9ImhpZGRlbiIsdmUucG9pbnRlckV2ZW50cz0ibm9uZSJ9Y2UuZm9udD0iIi5jb25jYXQoJCwiICIpLmNvbmNhdChZLCIgIikuY29uY2F0KEgsInB4ICIpLmNvbmNhdChxKTtmb3IodmFyIG1lPTAsTGU9MCxfZT1tLnNwbGl0KGAKYCksRWU9MDtFZTxfZS5sZW5ndGg7RWUrKyl7dmFyIEJlPV9lW0VlXSxSZT1jZS5tZWFzdXJlVGV4dChCZSksVmU9TWF0aC5jZWlsKFJlLndpZHRoKSxjdD1IO21lPU1hdGgubWF4KFZlLG1lKSxMZSs9Y3R9cmV0dXJuIG1lKz1OLExlKz1OLE1bU109e3dpZHRoOm1lLGhlaWdodDpMZX19LGttLmNhbGN1bGF0ZUxhYmVsQW5nbGU9ZnVuY3Rpb24oeCxtKXt2YXIgaz14Ll9wcml2YXRlLFM9ay5yc2NyYXRjaCxNPXguaXNFZGdlKCksTz1tP20rIi0iOiIiLE49eC5wc3R5bGUoTysidGV4dC1yb3RhdGlvbiIpLCQ9Ti5zdHJWYWx1ZTtyZXR1cm4gJD09PSJub25lIj8wOk0mJiQ9PT0iYXV0b3JvdGF0ZSI/Uy5sYWJlbEF1dG9BbmdsZTokPT09ImF1dG9yb3RhdGUiPzA6Ti5wZlZhbHVlfSxrbS5jYWxjdWxhdGVMYWJlbEFuZ2xlcz1mdW5jdGlvbih4KXt2YXIgbT10aGlzLGs9eC5pc0VkZ2UoKSxTPXguX3ByaXZhdGUsTT1TLnJzY3JhdGNoO00ubGFiZWxBbmdsZT1tLmNhbGN1bGF0ZUxhYmVsQW5nbGUoeCksayYmKE0uc291cmNlTGFiZWxBbmdsZT1tLmNhbGN1bGF0ZUxhYmVsQW5nbGUoeCwic291cmNlIiksTS50YXJnZXRMYWJlbEFuZ2xlPW0uY2FsY3VsYXRlTGFiZWxBbmdsZSh4LCJ0YXJnZXQiKSl9O3ZhciBlej17fSx0ej0yOCxuej0hMTtlei5nZXROb2RlU2hhcGU9ZnVuY3Rpb24oeCl7dmFyIG09dGhpcyxrPXgucHN0eWxlKCJzaGFwZSIpLnZhbHVlO2lmKGs9PT0iY3V0cmVjdGFuZ2xlIiYmKHgud2lkdGgoKTx0enx8eC5oZWlnaHQoKTx0eikpcmV0dXJuIG56fHwoaHUoIlRoZSBgY3V0cmVjdGFuZ2xlYCBub2RlIHNoYXBlIGNhbiBub3QgYmUgdXNlZCBhdCBzbWFsbCBzaXplcyBzbyBgcmVjdGFuZ2xlYCBpcyB1c2VkIGluc3RlYWQiKSxuej0hMCksInJlY3RhbmdsZSI7aWYoeC5pc1BhcmVudCgpKXJldHVybiBrPT09InJlY3RhbmdsZSJ8fGs9PT0icm91bmRyZWN0YW5nbGUifHxrPT09InJvdW5kLXJlY3RhbmdsZSJ8fGs9PT0iY3V0cmVjdGFuZ2xlInx8az09PSJjdXQtcmVjdGFuZ2xlInx8az09PSJiYXJyZWwiP2s6InJlY3RhbmdsZSI7aWYoaz09PSJwb2x5Z29uIil7dmFyIFM9eC5wc3R5bGUoInNoYXBlLXBvbHlnb24tcG9pbnRzIikudmFsdWU7cmV0dXJuIG0ubm9kZVNoYXBlcy5tYWtlUG9seWdvbihTKS5uYW1lfXJldHVybiBrfTt2YXIgS1M9e307S1MucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycz1mdW5jdGlvbigpe3ZhciB4PXRoaXMuY3ksbT14LmNvbGxlY3Rpb24oKSxrPXRoaXMsUz1mdW5jdGlvbihOKXt2YXIgJD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7aWYobS5tZXJnZShOKSwkKWZvcih2YXIgSD0wO0g8Ti5sZW5ndGg7SCsrKXt2YXIgcT1OW0hdLFk9cS5fcHJpdmF0ZSxaPVkucnN0eWxlO1ouY2xlYW49ITEsWi5jbGVhbkNvbm5lY3RlZD0hMX19O2suYmluZGVyKHgpLm9uKCJib3VuZHMuKiBkaXJ0eS4qIixmdW5jdGlvbihOKXt2YXIgJD1OLnRhcmdldDtTKCQpfSkub24oInN0eWxlLiogYmFja2dyb3VuZC4qIixmdW5jdGlvbihOKXt2YXIgJD1OLnRhcmdldDtTKCQsITEpfSk7dmFyIE09ZnVuY3Rpb24oTil7aWYoTil7dmFyICQ9ay5vblVwZGF0ZUVsZUNhbGNzRm5zO20uY2xlYW5TdHlsZSgpO2Zvcih2YXIgSD0wO0g8bS5sZW5ndGg7SCsrKXt2YXIgcT1tW0hdLFk9cS5fcHJpdmF0ZS5yc3R5bGU7cS5pc05vZGUoKSYmIVkuY2xlYW5Db25uZWN0ZWQmJihTKHEuY29ubmVjdGVkRWRnZXMoKSksWS5jbGVhbkNvbm5lY3RlZD0hMCl9aWYoJClmb3IodmFyIFo9MDtaPCQubGVuZ3RoO1orKyl7dmFyIGNlPSRbWl07Y2UoTixtKX1rLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZShtKSxtPXguY29sbGVjdGlvbigpfX07ay5mbHVzaFJlbmRlcmVkU3R5bGVRdWV1ZT1mdW5jdGlvbigpe00oITApfSxrLmJlZm9yZVJlbmRlcihNLGsuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5lbGVDYWxjcyl9LEtTLm9uVXBkYXRlRWxlQ2FsY3M9ZnVuY3Rpb24oeCl7dmFyIG09dGhpcy5vblVwZGF0ZUVsZUNhbGNzRm5zPXRoaXMub25VcGRhdGVFbGVDYWxjc0Zuc3x8W107bS5wdXNoKHgpfSxLUy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGU9ZnVuY3Rpb24oeCxtKXt2YXIgaz1mdW5jdGlvbihWZSl7cmV0dXJuIFZlLl9wcml2YXRlLnJzdHlsZS5jbGVhbkNvbm5lY3RlZH0sUz1bXSxNPVtdO2lmKCF0aGlzLmRlc3Ryb3llZCl7bT09PXZvaWQgMCYmKG09ITApO2Zvcih2YXIgTz0wO088eC5sZW5ndGg7TysrKXt2YXIgTj14W09dLCQ9Ti5fcHJpdmF0ZSxIPSQucnN0eWxlO04uaXNFZGdlKCkmJighayhOLnNvdXJjZSgpKXx8IWsoTi50YXJnZXQoKSkpJiYoSC5jbGVhbj0hMSksIShtJiZILmNsZWFufHxOLnJlbW92ZWQoKSkmJk4ucHN0eWxlKCJkaXNwbGF5IikudmFsdWUhPT0ibm9uZSImJigkLmdyb3VwPT09Im5vZGVzIj9NLnB1c2goTik6Uy5wdXNoKE4pLEguY2xlYW49ITApfWZvcih2YXIgcT0wO3E8TS5sZW5ndGg7cSsrKXt2YXIgWT1NW3FdLFo9WS5fcHJpdmF0ZSxjZT1aLnJzdHlsZSx2ZT1ZLnBvc2l0aW9uKCk7dGhpcy5yZWNhbGN1bGF0ZU5vZGVMYWJlbFByb2plY3Rpb24oWSksY2Uubm9kZVg9dmUueCxjZS5ub2RlWT12ZS55LGNlLm5vZGVXPVkucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsY2Uubm9kZUg9WS5wc3R5bGUoImhlaWdodCIpLnBmVmFsdWV9dGhpcy5yZWNhbGN1bGF0ZUVkZ2VQcm9qZWN0aW9ucyhTKTtmb3IodmFyIG1lPTA7bWU8Uy5sZW5ndGg7bWUrKyl7dmFyIExlPVNbbWVdLF9lPUxlLl9wcml2YXRlLEVlPV9lLnJzdHlsZSxCZT1fZS5yc2NyYXRjaDtFZS5zcmNYPUJlLmFycm93U3RhcnRYLEVlLnNyY1k9QmUuYXJyb3dTdGFydFksRWUudGd0WD1CZS5hcnJvd0VuZFgsRWUudGd0WT1CZS5hcnJvd0VuZFksRWUubWlkWD1CZS5taWRYLEVlLm1pZFk9QmUubWlkWSxFZS5sYWJlbEFuZ2xlPUJlLmxhYmVsQW5nbGUsRWUuc291cmNlTGFiZWxBbmdsZT1CZS5zb3VyY2VMYWJlbEFuZ2xlLEVlLnRhcmdldExhYmVsQW5nbGU9QmUudGFyZ2V0TGFiZWxBbmdsZX19fTt2YXIgV1M9e307V1MudXBkYXRlQ2FjaGVkR3JhYmJlZEVsZXM9ZnVuY3Rpb24oKXt2YXIgeD10aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO2lmKHgpe3guZHJhZz1bXSx4Lm5vbmRyYWc9W107Zm9yKHZhciBtPVtdLGs9MDtrPHgubGVuZ3RoO2srKyl7dmFyIFM9eFtrXSxNPVMuX3ByaXZhdGUucnNjcmF0Y2g7Uy5ncmFiYmVkKCkmJiFTLmlzUGFyZW50KCk/bS5wdXNoKFMpOk0uaW5EcmFnTGF5ZXI/eC5kcmFnLnB1c2goUyk6eC5ub25kcmFnLnB1c2goUyl9Zm9yKHZhciBrPTA7azxtLmxlbmd0aDtrKyspe3ZhciBTPW1ba107eC5kcmFnLnB1c2goUyl9fX0sV1MuaW52YWxpZGF0ZUNhY2hlZFpTb3J0ZWRFbGVzPWZ1bmN0aW9uKCl7dGhpcy5jYWNoZWRaU29ydGVkRWxlcz1udWxsfSxXUy5nZXRDYWNoZWRaU29ydGVkRWxlcz1mdW5jdGlvbih4KXtpZih4fHwhdGhpcy5jYWNoZWRaU29ydGVkRWxlcyl7dmFyIG09dGhpcy5jeS5tdXRhYmxlRWxlbWVudHMoKS50b0FycmF5KCk7bS5zb3J0KF9JKSxtLmludGVyYWN0aXZlPW0uZmlsdGVyKGZ1bmN0aW9uKGspe3JldHVybiBrLmludGVyYWN0aXZlKCl9KSx0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzPW0sdGhpcy51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpfWVsc2UgbT10aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO3JldHVybiBtfTt2YXIgcno9e307W3c1LFVTLFMxLGhrLEZJLGttLGV6LEtTLFdTXS5mb3JFYWNoKGZ1bmN0aW9uKHgpe3l0KHJ6LHgpfSk7dmFyIGl6PXt9O2l6LmdldENhY2hlZEltYWdlPWZ1bmN0aW9uKHgsbSxrKXt2YXIgUz10aGlzLE09Uy5pbWFnZUNhY2hlPVMuaW1hZ2VDYWNoZXx8e30sTz1NW3hdO2lmKE8pcmV0dXJuIE8uaW1hZ2UuY29tcGxldGV8fE8uaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsayksTy5pbWFnZTtPPU1beF09TVt4XXx8e307dmFyIE49Ty5pbWFnZT1uZXcgSW1hZ2U7Ti5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixrKSxOLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbigpe04uZXJyb3I9ITB9KTt2YXIgJD0iZGF0YToiLEg9eC5zdWJzdHJpbmcoMCwkLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PSQ7cmV0dXJuIEh8fChtPW09PT0ibnVsbCI/bnVsbDptLE4uY3Jvc3NPcmlnaW49bSksTi5zcmM9eCxOfTt2YXIgYjg9e307YjgucmVnaXN0ZXJCaW5kaW5nPWZ1bmN0aW9uKHgsbSxrLFMpe3ZhciBNPUFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMsWzFdKSxPPXRoaXMuYmluZGVyKHgpO3JldHVybiBPLm9uLmFwcGx5KE8sTSl9LGI4LmJpbmRlcj1mdW5jdGlvbih4KXt2YXIgbT10aGlzLGs9bS5jeS53aW5kb3coKSxTPXg9PT1rfHx4PT09ay5kb2N1bWVudHx8eD09PWsuZG9jdW1lbnQuYm9keXx8Q2UoeCk7aWYobS5zdXBwb3J0c1Bhc3NpdmVFdmVudHM9PW51bGwpe3ZhciBNPSExO3RyeXt2YXIgTz1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTT0hMCwhMH19KTtrLmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsTyl9Y2F0Y2h7fW0uc3VwcG9ydHNQYXNzaXZlRXZlbnRzPU19dmFyIE49ZnVuY3Rpb24oSCxxLFkpe3ZhciBaPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIFMmJm0uc3VwcG9ydHNQYXNzaXZlRXZlbnRzJiYoWlsyXT17Y2FwdHVyZTpZPz8hMSxwYXNzaXZlOiExLG9uY2U6ITF9KSxtLmJpbmRpbmdzLnB1c2goe3RhcmdldDp4LGFyZ3M6Wn0pLCh4LmFkZEV2ZW50TGlzdGVuZXJ8fHgub24pLmFwcGx5KHgsWiksdGhpc307cmV0dXJue29uOk4sYWRkRXZlbnRMaXN0ZW5lcjpOLGFkZExpc3RlbmVyOk4sYmluZDpOfX0sYjgubm9kZUlzRHJhZ2dhYmxlPWZ1bmN0aW9uKHgpe3JldHVybiB4JiZ4LmlzTm9kZSgpJiYheC5sb2NrZWQoKSYmeC5ncmFiYmFibGUoKX0sYjgubm9kZUlzR3JhYmJhYmxlPWZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLm5vZGVJc0RyYWdnYWJsZSh4KSYmeC5pbnRlcmFjdGl2ZSgpfSxiOC5sb2FkPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcyxtPXguY3kud2luZG93KCksaz1mdW5jdGlvbihHKXtyZXR1cm4gRy5zZWxlY3RlZCgpfSxTPWZ1bmN0aW9uKEcsSm4sa3IsbHIpe0c9PW51bGwmJihHPXguY3kpO2Zvcih2YXIgVnQ9MDtWdDxKbi5sZW5ndGg7VnQrKyl7dmFyIEhzPUpuW1Z0XTtHLmVtaXQoe29yaWdpbmFsRXZlbnQ6a3IsdHlwZTpIcyxwb3NpdGlvbjpscn0pfX0sTT1mdW5jdGlvbihHKXtyZXR1cm4gRy5zaGlmdEtleXx8Ry5tZXRhS2V5fHxHLmN0cmxLZXl9LE89ZnVuY3Rpb24oRyxKbil7dmFyIGtyPSEwO2lmKHguY3kuaGFzQ29tcG91bmROb2RlcygpJiZHJiZHLnBhbm5hYmxlKCkpZm9yKHZhciBscj0wO0puJiZscjxKbi5sZW5ndGg7bHIrKyl7dmFyIEc9Sm5bbHJdO2lmKEcuaXNOb2RlKCkmJkcuaXNQYXJlbnQoKSYmIUcucGFubmFibGUoKSl7a3I9ITE7YnJlYWt9fWVsc2Uga3I9ITA7cmV0dXJuIGtyfSxOPWZ1bmN0aW9uKEcpe0dbMF0uX3ByaXZhdGUuZ3JhYmJlZD0hMH0sJD1mdW5jdGlvbihHKXtHWzBdLl9wcml2YXRlLmdyYWJiZWQ9ITF9LEg9ZnVuY3Rpb24oRyl7R1swXS5fcHJpdmF0ZS5yc2NyYXRjaC5pbkRyYWdMYXllcj0hMH0scT1mdW5jdGlvbihHKXtHWzBdLl9wcml2YXRlLnJzY3JhdGNoLmluRHJhZ0xheWVyPSExfSxZPWZ1bmN0aW9uKEcpe0dbMF0uX3ByaXZhdGUucnNjcmF0Y2guaXNHcmFiVGFyZ2V0PSEwfSxaPWZ1bmN0aW9uKEcpe0dbMF0uX3ByaXZhdGUucnNjcmF0Y2guaXNHcmFiVGFyZ2V0PSExfSxjZT1mdW5jdGlvbihHLEpuKXt2YXIga3I9Sm4uYWRkVG9MaXN0LGxyPWtyLmhhcyhHKTshbHImJkcuZ3JhYmJhYmxlKCkmJiFHLmxvY2tlZCgpJiYoa3IubWVyZ2UoRyksTihHKSl9LHZlPWZ1bmN0aW9uKEcsSm4pe2lmKEcuY3koKS5oYXNDb21wb3VuZE5vZGVzKCkmJiEoSm4uaW5EcmFnTGF5ZXI9PW51bGwmJkpuLmFkZFRvTGlzdD09bnVsbCkpe3ZhciBrcj1HLmRlc2NlbmRhbnRzKCk7Sm4uaW5EcmFnTGF5ZXImJihrci5mb3JFYWNoKEgpLGtyLmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaChIKSksSm4uYWRkVG9MaXN0JiZjZShrcixKbil9fSxtZT1mdW5jdGlvbihHLEpuKXtKbj1Kbnx8e307dmFyIGtyPUcuY3koKS5oYXNDb21wb3VuZE5vZGVzKCk7Sm4uaW5EcmFnTGF5ZXImJihHLmZvckVhY2goSCksRy5uZWlnaGJvcmhvb2QoKS5zdGRGaWx0ZXIoZnVuY3Rpb24obHIpe3JldHVybiFrcnx8bHIuaXNFZGdlKCl9KS5mb3JFYWNoKEgpKSxKbi5hZGRUb0xpc3QmJkcuZm9yRWFjaChmdW5jdGlvbihscil7Y2UobHIsSm4pfSksdmUoRyxKbiksRWUoRyx7aW5EcmFnTGF5ZXI6Sm4uaW5EcmFnTGF5ZXJ9KSx4LnVwZGF0ZUNhY2hlZEdyYWJiZWRFbGVzKCl9LExlPW1lLF9lPWZ1bmN0aW9uKEcpe0cmJih4LmdldENhY2hlZFpTb3J0ZWRFbGVzKCkuZm9yRWFjaChmdW5jdGlvbihKbil7JChKbikscShKbiksWihKbil9KSx4LnVwZGF0ZUNhY2hlZEdyYWJiZWRFbGVzKCkpfSxFZT1mdW5jdGlvbihHLEpuKXtpZighKEpuLmluRHJhZ0xheWVyPT1udWxsJiZKbi5hZGRUb0xpc3Q9PW51bGwpJiZHLmN5KCkuaGFzQ29tcG91bmROb2RlcygpKXt2YXIga3I9Ry5hbmNlc3RvcnMoKS5vcnBoYW5zKCk7aWYoIWtyLnNhbWUoRykpe3ZhciBscj1rci5kZXNjZW5kYW50cygpLnNwYXduU2VsZigpLm1lcmdlKGtyKS51bm1lcmdlKEcpLnVubWVyZ2UoRy5kZXNjZW5kYW50cygpKSxWdD1sci5jb25uZWN0ZWRFZGdlcygpO0puLmluRHJhZ0xheWVyJiYoVnQuZm9yRWFjaChIKSxsci5mb3JFYWNoKEgpKSxKbi5hZGRUb0xpc3QmJmxyLmZvckVhY2goZnVuY3Rpb24oSHMpe2NlKEhzLEpuKX0pfX19LEJlPWZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9bnVsbCYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyIT1udWxsJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKX0sUmU9dHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI8InUiLFZlPXR5cGVvZiBSZXNpemVPYnNlcnZlcjwidSI7UmU/KHgucmVtb3ZlT2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24odHIpe2Zvcih2YXIgRz0wO0c8dHIubGVuZ3RoO0crKyl7dmFyIEpuPXRyW0ddLGtyPUpuLnJlbW92ZWROb2RlcztpZihrcilmb3IodmFyIGxyPTA7bHI8a3IubGVuZ3RoO2xyKyspe3ZhciBWdD1rcltscl07aWYoVnQ9PT14LmNvbnRhaW5lcil7eC5kZXN0cm95KCk7YnJlYWt9fX19KSx4LmNvbnRhaW5lci5wYXJlbnROb2RlJiZ4LnJlbW92ZU9ic2VydmVyLm9ic2VydmUoeC5jb250YWluZXIucGFyZW50Tm9kZSx7Y2hpbGRMaXN0OiEwfSkpOngucmVnaXN0ZXJCaW5kaW5nKHguY29udGFpbmVyLCJET01Ob2RlUmVtb3ZlZCIsZnVuY3Rpb24odHIpe3guZGVzdHJveSgpfSk7dmFyIGN0PU51KGZ1bmN0aW9uKCl7eC5jeS5yZXNpemUoKX0sMTAwKTtSZSYmKHguc3R5bGVPYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihjdCkseC5zdHlsZU9ic2VydmVyLm9ic2VydmUoeC5jb250YWluZXIse2F0dHJpYnV0ZXM6ITB9KSkseC5yZWdpc3RlckJpbmRpbmcobSwicmVzaXplIixjdCksVmUmJih4LnJlc2l6ZU9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcihjdCkseC5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHguY29udGFpbmVyKSk7dmFyIHN0PWZ1bmN0aW9uKEcsSm4pe2Zvcig7RyE9bnVsbDspSm4oRyksRz1HLnBhcmVudE5vZGV9LFllPWZ1bmN0aW9uKCl7eC5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGUoKX07c3QoeC5jb250YWluZXIsZnVuY3Rpb24odHIpe3gucmVnaXN0ZXJCaW5kaW5nKHRyLCJ0cmFuc2l0aW9uZW5kIixZZSkseC5yZWdpc3RlckJpbmRpbmcodHIsImFuaW1hdGlvbmVuZCIsWWUpLHgucmVnaXN0ZXJCaW5kaW5nKHRyLCJzY3JvbGwiLFllKX0pLHgucmVnaXN0ZXJCaW5kaW5nKHguY29udGFpbmVyLCJjb250ZXh0bWVudSIsZnVuY3Rpb24odHIpe3RyLnByZXZlbnREZWZhdWx0KCl9KTt2YXIgbXQ9ZnVuY3Rpb24oKXtyZXR1cm4geC5zZWxlY3Rpb25bNF0hPT0wfSxKZT1mdW5jdGlvbihHKXtmb3IodmFyIEpuPXguZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLGtyPUpuWzBdLGxyPUpuWzFdLFZ0PUpuWzJdLEhzPUpuWzNdLHdyPUcudG91Y2hlcz9HLnRvdWNoZXM6W0ddLEVzPSExLGdvPTA7Z288d3IubGVuZ3RoO2dvKyspe3ZhciAkYz13cltnb107aWYoa3I8PSRjLmNsaWVudFgmJiRjLmNsaWVudFg8PWtyK1Z0JiZscjw9JGMuY2xpZW50WSYmJGMuY2xpZW50WTw9bHIrSHMpe0VzPSEwO2JyZWFrfX1pZighRXMpcmV0dXJuITE7Zm9yKHZhciB6YT14LmNvbnRhaW5lcixTYz1HLnRhcmdldCxiYT1TYy5wYXJlbnROb2RlLHhvPSExO2JhOyl7aWYoYmE9PT16YSl7eG89ITA7YnJlYWt9YmE9YmEucGFyZW50Tm9kZX1yZXR1cm4hIXhvfTt4LnJlZ2lzdGVyQmluZGluZyh4LmNvbnRhaW5lciwibW91c2Vkb3duIixmdW5jdGlvbihHKXtpZihKZShHKSl7Ry5wcmV2ZW50RGVmYXVsdCgpLEJlKCkseC5ob3ZlckRhdGEuY2FwdHVyZT0hMCx4LmhvdmVyRGF0YS53aGljaD1HLndoaWNoO3ZhciBKbj14LmN5LGtyPVtHLmNsaWVudFgsRy5jbGllbnRZXSxscj14LnByb2plY3RJbnRvVmlld3BvcnQoa3JbMF0sa3JbMV0pLFZ0PXguc2VsZWN0aW9uLEhzPXguZmluZE5lYXJlc3RFbGVtZW50cyhsclswXSxsclsxXSwhMCwhMSksd3I9SHNbMF0sRXM9eC5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50czt4LmhvdmVyRGF0YS5tZG93blBvcz1scix4LmhvdmVyRGF0YS5tZG93bkdQb3M9a3I7dmFyIGdvPWZ1bmN0aW9uKCl7eC5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZD0hMSxjbGVhclRpbWVvdXQoeC5ob3ZlckRhdGEudGFwaG9sZFRpbWVvdXQpLHguaG92ZXJEYXRhLnRhcGhvbGRUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZigheC5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZCl7dmFyIGxoPXguaG92ZXJEYXRhLmRvd247bGg/bGguZW1pdCh7b3JpZ2luYWxFdmVudDpHLHR5cGU6InRhcGhvbGQiLHBvc2l0aW9uOnt4OmxyWzBdLHk6bHJbMV19fSk6Sm4uZW1pdCh7b3JpZ2luYWxFdmVudDpHLHR5cGU6InRhcGhvbGQiLHBvc2l0aW9uOnt4OmxyWzBdLHk6bHJbMV19fSl9fSx4LnRhcGhvbGREdXJhdGlvbil9O2lmKEcud2hpY2g9PTMpe3guaG92ZXJEYXRhLmN4dFN0YXJ0ZWQ9ITA7dmFyICRjPXtvcmlnaW5hbEV2ZW50OkcsdHlwZToiY3h0dGFwc3RhcnQiLHBvc2l0aW9uOnt4OmxyWzBdLHk6bHJbMV19fTt3cj8od3IuYWN0aXZhdGUoKSx3ci5lbWl0KCRjKSx4LmhvdmVyRGF0YS5kb3duPXdyKTpKbi5lbWl0KCRjKSx4LmhvdmVyRGF0YS5kb3duVGltZT1uZXcgRGF0ZSgpLmdldFRpbWUoKSx4LmhvdmVyRGF0YS5jeHREcmFnZ2VkPSExfWVsc2UgaWYoRy53aGljaD09MSl7d3ImJndyLmFjdGl2YXRlKCk7e2lmKHdyIT1udWxsJiZ4Lm5vZGVJc0dyYWJiYWJsZSh3cikpe3ZhciB6YT1mdW5jdGlvbihsaCl7cmV0dXJue29yaWdpbmFsRXZlbnQ6Ryx0eXBlOmxoLHBvc2l0aW9uOnt4OmxyWzBdLHk6bHJbMV19fX0sU2M9ZnVuY3Rpb24obGgpe2xoLmVtaXQoemEoImdyYWIiKSl9O2lmKFkod3IpLCF3ci5zZWxlY3RlZCgpKUVzPXguZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHM9Sm4uY29sbGVjdGlvbigpLExlKHdyLHthZGRUb0xpc3Q6RXN9KSx3ci5lbWl0KHphKCJncmFib24iKSkuZW1pdCh6YSgiZ3JhYiIpKTtlbHNle0VzPXguZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHM9Sm4uY29sbGVjdGlvbigpO3ZhciBiYT1Kbi4kKGZ1bmN0aW9uKHhvKXtyZXR1cm4geG8uaXNOb2RlKCkmJnhvLnNlbGVjdGVkKCkmJngubm9kZUlzR3JhYmJhYmxlKHhvKX0pO21lKGJhLHthZGRUb0xpc3Q6RXN9KSx3ci5lbWl0KHphKCJncmFib24iKSksYmEuZm9yRWFjaChTYyl9eC5yZWRyYXdIaW50KCJlbGVzIiwhMCkseC5yZWRyYXdIaW50KCJkcmFnIiwhMCl9eC5ob3ZlckRhdGEuZG93bj13cix4LmhvdmVyRGF0YS5kb3ducz1Icyx4LmhvdmVyRGF0YS5kb3duVGltZT1uZXcgRGF0ZSgpLmdldFRpbWUoKX1TKHdyLFsibW91c2Vkb3duIiwidGFwc3RhcnQiLCJ2bW91c2Vkb3duIl0sRyx7eDpsclswXSx5OmxyWzFdfSksd3I9PW51bGw/KFZ0WzRdPTEseC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXt4OmxyWzBdLHk6bHJbMV19LHgucmVkcmF3SGludCgic2VsZWN0IiwhMCkseC5yZWRyYXcoKSk6d3IucGFubmFibGUoKSYmKFZ0WzRdPTEpLGdvKCl9VnRbMF09VnRbMl09bHJbMF0sVnRbMV09VnRbM109bHJbMV19fSwhMSkseC5yZWdpc3RlckJpbmRpbmcobSwibW91c2Vtb3ZlIixmdW5jdGlvbihHKXt2YXIgSm49eC5ob3ZlckRhdGEuY2FwdHVyZTtpZighKCFKbiYmIUplKEcpKSl7dmFyIGtyPSExLGxyPXguY3ksVnQ9bHIuem9vbSgpLEhzPVtHLmNsaWVudFgsRy5jbGllbnRZXSx3cj14LnByb2plY3RJbnRvVmlld3BvcnQoSHNbMF0sSHNbMV0pLEVzPXguaG92ZXJEYXRhLm1kb3duUG9zLGdvPXguaG92ZXJEYXRhLm1kb3duR1BvcywkYz14LnNlbGVjdGlvbix6YT1udWxsOyF4LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMmJiF4LmhvdmVyRGF0YS5kcmFnZ2luZyYmIXguaG92ZXJEYXRhLnNlbGVjdGluZyYmKHphPXguZmluZE5lYXJlc3RFbGVtZW50KHdyWzBdLHdyWzFdLCEwLCExKSk7dmFyIFNjPXguaG92ZXJEYXRhLmxhc3QsYmE9eC5ob3ZlckRhdGEuZG93bix4bz1bd3JbMF0tJGNbMl0sd3JbMV0tJGNbM11dLGxoPXguZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHMsV2w7aWYoZ28pe3ZhciBaMj1Ic1swXS1nb1swXSxlYj1aMipaMixHMD1Ic1sxXS1nb1sxXSx6cD1HMCpHMCxmZD1lYit6cDt4LmhvdmVyRGF0YS5pc092ZXJUaHJlc2hvbGREcmFnPVdsPWZkPj14LmRlc2t0b3BUYXBUaHJlc2hvbGQyfXZhciBXdj1NKEcpO1dsJiYoeC5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZD0hMCk7dmFyIHN5PWZ1bmN0aW9uKCl7dmFyIEVtPXguaG92ZXJEYXRhLmRyYWdEZWx0YT14LmhvdmVyRGF0YS5kcmFnRGVsdGF8fFtdO0VtLmxlbmd0aD09PTA/KEVtLnB1c2goeG9bMF0pLEVtLnB1c2goeG9bMV0pKTooRW1bMF0rPXhvWzBdLEVtWzFdKz14b1sxXSl9O2tyPSEwLFMoemEsWyJtb3VzZW1vdmUiLCJ2bW91c2Vtb3ZlIiwidGFwZHJhZyJdLEcse3g6d3JbMF0seTp3clsxXX0pO3ZhciBFOD1mdW5jdGlvbigpe3guZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseC5ob3ZlckRhdGEuc2VsZWN0aW5nfHxsci5lbWl0KHtvcmlnaW5hbEV2ZW50OkcsdHlwZToiYm94c3RhcnQiLHBvc2l0aW9uOnt4OndyWzBdLHk6d3JbMV19fSksJGNbNF09MSx4LmhvdmVyRGF0YS5zZWxlY3Rpbmc9ITAseC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx4LnJlZHJhdygpfTtpZih4LmhvdmVyRGF0YS53aGljaD09PTMpe2lmKFdsKXt2YXIgeDU9e29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHRkcmFnIixwb3NpdGlvbjp7eDp3clswXSx5OndyWzFdfX07YmE/YmEuZW1pdCh4NSk6bHIuZW1pdCh4NSkseC5ob3ZlckRhdGEuY3h0RHJhZ2dlZD0hMCwoIXguaG92ZXJEYXRhLmN4dE92ZXJ8fHphIT09eC5ob3ZlckRhdGEuY3h0T3ZlcikmJih4LmhvdmVyRGF0YS5jeHRPdmVyJiZ4LmhvdmVyRGF0YS5jeHRPdmVyLmVtaXQoe29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHRkcmFnb3V0Iixwb3NpdGlvbjp7eDp3clswXSx5OndyWzFdfX0pLHguaG92ZXJEYXRhLmN4dE92ZXI9emEsemEmJnphLmVtaXQoe29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHRkcmFnb3ZlciIscG9zaXRpb246e3g6d3JbMF0seTp3clsxXX19KSl9fWVsc2UgaWYoeC5ob3ZlckRhdGEuZHJhZ2dpbmcpe2lmKGtyPSEwLGxyLnBhbm5pbmdFbmFibGVkKCkmJmxyLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXt2YXIgVDg7aWYoeC5ob3ZlckRhdGEuanVzdFN0YXJ0ZWRQYW4pe3ZhciBaUz14LmhvdmVyRGF0YS5tZG93blBvcztUOD17eDood3JbMF0tWlNbMF0pKlZ0LHk6KHdyWzFdLVpTWzFdKSpWdH0seC5ob3ZlckRhdGEuanVzdFN0YXJ0ZWRQYW49ITF9ZWxzZSBUOD17eDp4b1swXSpWdCx5OnhvWzFdKlZ0fTtsci5wYW5CeShUOCksbHIuZW1pdCgiZHJhZ3BhbiIpLHguaG92ZXJEYXRhLmRyYWdnZWQ9ITB9d3I9eC5wcm9qZWN0SW50b1ZpZXdwb3J0KEcuY2xpZW50WCxHLmNsaWVudFkpfWVsc2UgaWYoJGNbNF09PTEmJihiYT09bnVsbHx8YmEucGFubmFibGUoKSkpe2lmKFdsKXtpZigheC5ob3ZlckRhdGEuZHJhZ2dpbmcmJmxyLmJveFNlbGVjdGlvbkVuYWJsZWQoKSYmKFd2fHwhbHIucGFubmluZ0VuYWJsZWQoKXx8IWxyLnVzZXJQYW5uaW5nRW5hYmxlZCgpKSlFOCgpO2Vsc2UgaWYoIXguaG92ZXJEYXRhLnNlbGVjdGluZyYmbHIucGFubmluZ0VuYWJsZWQoKSYmbHIudXNlclBhbm5pbmdFbmFibGVkKCkpe3ZhciBrNT1PKGJhLHguaG92ZXJEYXRhLmRvd25zKTtrNSYmKHguaG92ZXJEYXRhLmRyYWdnaW5nPSEwLHguaG92ZXJEYXRhLmp1c3RTdGFydGVkUGFuPSEwLCRjWzRdPTAseC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPUo3KEVzKSx4LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHgucmVkcmF3KCkpfWJhJiZiYS5wYW5uYWJsZSgpJiZiYS5hY3RpdmUoKSYmYmEudW5hY3RpdmF0ZSgpfX1lbHNle2lmKGJhJiZiYS5wYW5uYWJsZSgpJiZiYS5hY3RpdmUoKSYmYmEudW5hY3RpdmF0ZSgpLCghYmF8fCFiYS5ncmFiYmVkKCkpJiZ6YSE9U2MmJihTYyYmUyhTYyxbIm1vdXNlb3V0IiwidGFwZHJhZ291dCJdLEcse3g6d3JbMF0seTp3clsxXX0pLHphJiZTKHphLFsibW91c2VvdmVyIiwidGFwZHJhZ292ZXIiXSxHLHt4OndyWzBdLHk6d3JbMV19KSx4LmhvdmVyRGF0YS5sYXN0PXphKSxiYSlpZihXbCl7aWYobHIuYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZXdiliYSYmYmEuZ3JhYmJlZCgpJiYoX2UobGgpLGJhLmVtaXQoImZyZWVvbiIpLGxoLmVtaXQoImZyZWUiKSx4LmRyYWdEYXRhLmRpZERyYWcmJihiYS5lbWl0KCJkcmFnZnJlZW9uIiksbGguZW1pdCgiZHJhZ2ZyZWUiKSkpLEU4KCk7ZWxzZSBpZihiYSYmYmEuZ3JhYmJlZCgpJiZ4Lm5vZGVJc0RyYWdnYWJsZShiYSkpe3ZhciBRZD0heC5kcmFnRGF0YS5kaWREcmFnO1FkJiZ4LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx4LmRyYWdEYXRhLmRpZERyYWc9ITAseC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHxtZShsaCx7aW5EcmFnTGF5ZXI6ITB9KTt2YXIgXzE9e3g6MCx5OjB9O2lmKFgoeG9bMF0pJiZYKHhvWzFdKSYmKF8xLngrPXhvWzBdLF8xLnkrPXhvWzFdLFFkKSl7dmFyIEpkPXguaG92ZXJEYXRhLmRyYWdEZWx0YTtKZCYmWChKZFswXSkmJlgoSmRbMV0pJiYoXzEueCs9SmRbMF0sXzEueSs9SmRbMV0pfXguaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMCxsaC5zaWxlbnRTaGlmdChfMSkuZW1pdCgicG9zaXRpb24gZHJhZyIpLHgucmVkcmF3SGludCgiZHJhZyIsITApLHgucmVkcmF3KCl9fWVsc2Ugc3koKTtrcj0hMH1pZigkY1syXT13clswXSwkY1szXT13clsxXSxrcilyZXR1cm4gRy5zdG9wUHJvcGFnYXRpb24mJkcuc3RvcFByb3BhZ2F0aW9uKCksRy5wcmV2ZW50RGVmYXVsdCYmRy5wcmV2ZW50RGVmYXVsdCgpLCExfX0sITEpO3ZhciBMdCxNdCx1dDt4LnJlZ2lzdGVyQmluZGluZyhtLCJtb3VzZXVwIixmdW5jdGlvbihHKXt2YXIgSm49eC5ob3ZlckRhdGEuY2FwdHVyZTtpZihKbil7eC5ob3ZlckRhdGEuY2FwdHVyZT0hMTt2YXIga3I9eC5jeSxscj14LnByb2plY3RJbnRvVmlld3BvcnQoRy5jbGllbnRYLEcuY2xpZW50WSksVnQ9eC5zZWxlY3Rpb24sSHM9eC5maW5kTmVhcmVzdEVsZW1lbnQobHJbMF0sbHJbMV0sITAsITEpLHdyPXguZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHMsRXM9eC5ob3ZlckRhdGEuZG93bixnbz1NKEcpO2lmKHguZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiYmKHgucmVkcmF3SGludCgic2VsZWN0IiwhMCkseC5yZWRyYXcoKSkseC5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZD0hMCx4LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLEVzJiZFcy51bmFjdGl2YXRlKCkseC5ob3ZlckRhdGEud2hpY2g9PT0zKXt2YXIgJGM9e29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHR0YXBlbmQiLHBvc2l0aW9uOnt4OmxyWzBdLHk6bHJbMV19fTtpZihFcz9Fcy5lbWl0KCRjKTprci5lbWl0KCRjKSwheC5ob3ZlckRhdGEuY3h0RHJhZ2dlZCl7dmFyIHphPXtvcmlnaW5hbEV2ZW50OkcsdHlwZToiY3h0dGFwIixwb3NpdGlvbjp7eDpsclswXSx5OmxyWzFdfX07RXM/RXMuZW1pdCh6YSk6a3IuZW1pdCh6YSl9eC5ob3ZlckRhdGEuY3h0RHJhZ2dlZD0hMSx4LmhvdmVyRGF0YS53aGljaD1udWxsfWVsc2UgaWYoeC5ob3ZlckRhdGEud2hpY2g9PT0xKXtpZihTKEhzLFsibW91c2V1cCIsInRhcGVuZCIsInZtb3VzZXVwIl0sRyx7eDpsclswXSx5OmxyWzFdfSksIXguZHJhZ0RhdGEuZGlkRHJhZyYmIXguaG92ZXJEYXRhLmRyYWdnZWQmJiF4LmhvdmVyRGF0YS5zZWxlY3RpbmcmJiF4LmhvdmVyRGF0YS5pc092ZXJUaHJlc2hvbGREcmFnJiYoUyhFcyxbImNsaWNrIiwidGFwIiwidmNsaWNrIl0sRyx7eDpsclswXSx5OmxyWzFdfSksTXQ9ITEsRy50aW1lU3RhbXAtdXQ8PWtyLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKT8oTHQmJmNsZWFyVGltZW91dChMdCksTXQ9ITAsdXQ9bnVsbCxTKEVzLFsiZGJsY2xpY2siLCJkYmx0YXAiLCJ2ZGJsY2xpY2siXSxHLHt4OmxyWzBdLHk6bHJbMV19KSk6KEx0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtNdHx8UyhFcyxbIm9uZWNsaWNrIiwib25ldGFwIiwidm9uZWNsaWNrIl0sRyx7eDpsclswXSx5OmxyWzFdfSl9LGtyLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKSksdXQ9Ry50aW1lU3RhbXApKSxFcz09bnVsbCYmIXguZHJhZ0RhdGEuZGlkRHJhZyYmIXguaG92ZXJEYXRhLnNlbGVjdGluZyYmIXguaG92ZXJEYXRhLmRyYWdnZWQmJiFNKEcpJiYoa3IuJChrKS51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pLHdyLmxlbmd0aD4wJiZ4LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx4LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPXdyPWtyLmNvbGxlY3Rpb24oKSksSHM9PUVzJiYheC5kcmFnRGF0YS5kaWREcmFnJiYheC5ob3ZlckRhdGEuc2VsZWN0aW5nJiZIcyE9bnVsbCYmSHMuX3ByaXZhdGUuc2VsZWN0YWJsZSYmKHguaG92ZXJEYXRhLmRyYWdnaW5nfHwoa3Iuc2VsZWN0aW9uVHlwZSgpPT09ImFkZGl0aXZlInx8Z28/SHMuc2VsZWN0ZWQoKT9Icy51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pOkhzLnNlbGVjdChbInRhcHNlbGVjdCJdKTpnb3x8KGtyLiQoaykudW5tZXJnZShIcykudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKSxIcy5zZWxlY3QoWyJ0YXBzZWxlY3QiXSkpKSx4LnJlZHJhd0hpbnQoImVsZXMiLCEwKSkseC5ob3ZlckRhdGEuc2VsZWN0aW5nKXt2YXIgU2M9a3IuY29sbGVjdGlvbih4LmdldEFsbEluQm94KFZ0WzBdLFZ0WzFdLFZ0WzJdLFZ0WzNdKSk7eC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSxTYy5sZW5ndGg+MCYmeC5yZWRyYXdIaW50KCJlbGVzIiwhMCksa3IuZW1pdCh7dHlwZToiYm94ZW5kIixvcmlnaW5hbEV2ZW50OkcscG9zaXRpb246e3g6bHJbMF0seTpsclsxXX19KTt2YXIgYmE9ZnVuY3Rpb24oV2wpe3JldHVybiBXbC5zZWxlY3RhYmxlKCkmJiFXbC5zZWxlY3RlZCgpfTtrci5zZWxlY3Rpb25UeXBlKCk9PT0iYWRkaXRpdmUifHxnb3x8a3IuJChrKS51bm1lcmdlKFNjKS51bnNlbGVjdCgpLFNjLmVtaXQoImJveCIpLnN0ZEZpbHRlcihiYSkuc2VsZWN0KCkuZW1pdCgiYm94c2VsZWN0IikseC5yZWRyYXcoKX1pZih4LmhvdmVyRGF0YS5kcmFnZ2luZyYmKHguaG92ZXJEYXRhLmRyYWdnaW5nPSExLHgucmVkcmF3SGludCgic2VsZWN0IiwhMCkseC5yZWRyYXdIaW50KCJlbGVzIiwhMCkseC5yZWRyYXcoKSksIVZ0WzRdKXt4LnJlZHJhd0hpbnQoImRyYWciLCEwKSx4LnJlZHJhd0hpbnQoImVsZXMiLCEwKTt2YXIgeG89RXMmJkVzLmdyYWJiZWQoKTtfZSh3cikseG8mJihFcy5lbWl0KCJmcmVlb24iKSx3ci5lbWl0KCJmcmVlIikseC5kcmFnRGF0YS5kaWREcmFnJiYoRXMuZW1pdCgiZHJhZ2ZyZWVvbiIpLHdyLmVtaXQoImRyYWdmcmVlIikpKX19VnRbNF09MCx4LmhvdmVyRGF0YS5kb3duPW51bGwseC5ob3ZlckRhdGEuY3h0U3RhcnRlZD0hMSx4LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXM9ITEseC5ob3ZlckRhdGEuc2VsZWN0aW5nPSExLHguaG92ZXJEYXRhLmlzT3ZlclRocmVzaG9sZERyYWc9ITEseC5kcmFnRGF0YS5kaWREcmFnPSExLHguaG92ZXJEYXRhLmRyYWdnZWQ9ITEseC5ob3ZlckRhdGEuZHJhZ0RlbHRhPVtdLHguaG92ZXJEYXRhLm1kb3duUG9zPW51bGwseC5ob3ZlckRhdGEubWRvd25HUG9zPW51bGx9fSwhMSk7dmFyIFd0PWZ1bmN0aW9uKEcpe2lmKCF4LnNjcm9sbGluZ1BhZ2Upe3ZhciBKbj14LmN5LGtyPUpuLnpvb20oKSxscj1Kbi5wYW4oKSxWdD14LnByb2plY3RJbnRvVmlld3BvcnQoRy5jbGllbnRYLEcuY2xpZW50WSksSHM9W1Z0WzBdKmtyK2xyLngsVnRbMV0qa3IrbHIueV07aWYoeC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHx4LmhvdmVyRGF0YS5kcmFnZ2luZ3x8eC5ob3ZlckRhdGEuY3h0U3RhcnRlZHx8bXQoKSl7Ry5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1pZihKbi5wYW5uaW5nRW5hYmxlZCgpJiZKbi51c2VyUGFubmluZ0VuYWJsZWQoKSYmSm4uem9vbWluZ0VuYWJsZWQoKSYmSm4udXNlclpvb21pbmdFbmFibGVkKCkpe0cucHJldmVudERlZmF1bHQoKSx4LmRhdGEud2hlZWxab29taW5nPSEwLGNsZWFyVGltZW91dCh4LmRhdGEud2hlZWxUaW1lb3V0KSx4LmRhdGEud2hlZWxUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt4LmRhdGEud2hlZWxab29taW5nPSExLHgucmVkcmF3SGludCgiZWxlcyIsITApLHgucmVkcmF3KCl9LDE1MCk7dmFyIHdyO0cuZGVsdGFZIT1udWxsP3dyPUcuZGVsdGFZLy0yNTA6Ry53aGVlbERlbHRhWSE9bnVsbD93cj1HLndoZWVsRGVsdGFZLzFlMzp3cj1HLndoZWVsRGVsdGEvMWUzLHdyPXdyKngud2hlZWxTZW5zaXRpdml0eTt2YXIgRXM9Ry5kZWx0YU1vZGU9PT0xO0VzJiYod3IqPTMzKTt2YXIgZ289Sm4uem9vbSgpKk1hdGgucG93KDEwLHdyKTtHLnR5cGU9PT0iZ2VzdHVyZWNoYW5nZSImJihnbz14Lmdlc3R1cmVTdGFydFpvb20qRy5zY2FsZSksSm4uem9vbSh7bGV2ZWw6Z28scmVuZGVyZWRQb3NpdGlvbjp7eDpIc1swXSx5OkhzWzFdfX0pLEpuLmVtaXQoRy50eXBlPT09Imdlc3R1cmVjaGFuZ2UiPyJwaW5jaHpvb20iOiJzY3JvbGx6b29tIil9fX07eC5yZWdpc3RlckJpbmRpbmcoeC5jb250YWluZXIsIndoZWVsIixXdCwhMCkseC5yZWdpc3RlckJpbmRpbmcobSwic2Nyb2xsIixmdW5jdGlvbihHKXt4LnNjcm9sbGluZ1BhZ2U9ITAsY2xlYXJUaW1lb3V0KHguc2Nyb2xsaW5nUGFnZVRpbWVvdXQpLHguc2Nyb2xsaW5nUGFnZVRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3guc2Nyb2xsaW5nUGFnZT0hMX0sMjUwKX0sITApLHgucmVnaXN0ZXJCaW5kaW5nKHguY29udGFpbmVyLCJnZXN0dXJlc3RhcnQiLGZ1bmN0aW9uKEcpe3guZ2VzdHVyZVN0YXJ0Wm9vbT14LmN5Lnpvb20oKSx4Lmhhc1RvdWNoU3RhcnRlZHx8Ry5wcmV2ZW50RGVmYXVsdCgpfSwhMCkseC5yZWdpc3RlckJpbmRpbmcoeC5jb250YWluZXIsImdlc3R1cmVjaGFuZ2UiLGZ1bmN0aW9uKHRyKXt4Lmhhc1RvdWNoU3RhcnRlZHx8V3QodHIpfSwhMCkseC5yZWdpc3RlckJpbmRpbmcoeC5jb250YWluZXIsIm1vdXNlb3V0IixmdW5jdGlvbihHKXt2YXIgSm49eC5wcm9qZWN0SW50b1ZpZXdwb3J0KEcuY2xpZW50WCxHLmNsaWVudFkpO3guY3kuZW1pdCh7b3JpZ2luYWxFdmVudDpHLHR5cGU6Im1vdXNlb3V0Iixwb3NpdGlvbjp7eDpKblswXSx5OkpuWzFdfX0pfSwhMSkseC5yZWdpc3RlckJpbmRpbmcoeC5jb250YWluZXIsIm1vdXNlb3ZlciIsZnVuY3Rpb24oRyl7dmFyIEpuPXgucHJvamVjdEludG9WaWV3cG9ydChHLmNsaWVudFgsRy5jbGllbnRZKTt4LmN5LmVtaXQoe29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJtb3VzZW92ZXIiLHBvc2l0aW9uOnt4OkpuWzBdLHk6Sm5bMV19fSl9LCExKTt2YXIgVHQsX24saG4sWXQsRG4saXIsdnIsTm4scHIsRXIsTXIsQ3IsT3IsV249ZnVuY3Rpb24oRyxKbixrcixscil7cmV0dXJuIE1hdGguc3FydCgoa3ItRykqKGtyLUcpKyhsci1KbikqKGxyLUpuKSl9LGJyPWZ1bmN0aW9uKEcsSm4sa3IsbHIpe3JldHVybihrci1HKSooa3ItRykrKGxyLUpuKSoobHItSm4pfSxTcjt4LnJlZ2lzdGVyQmluZGluZyh4LmNvbnRhaW5lciwidG91Y2hzdGFydCIsU3I9ZnVuY3Rpb24oRyl7aWYoeC5oYXNUb3VjaFN0YXJ0ZWQ9ITAsISFKZShHKSl7QmUoKSx4LnRvdWNoRGF0YS5jYXB0dXJlPSEwLHguZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDA7dmFyIEpuPXguY3ksa3I9eC50b3VjaERhdGEubm93LGxyPXgudG91Y2hEYXRhLmVhcmxpZXI7aWYoRy50b3VjaGVzWzBdKXt2YXIgVnQ9eC5wcm9qZWN0SW50b1ZpZXdwb3J0KEcudG91Y2hlc1swXS5jbGllbnRYLEcudG91Y2hlc1swXS5jbGllbnRZKTtrclswXT1WdFswXSxrclsxXT1WdFsxXX1pZihHLnRvdWNoZXNbMV0pe3ZhciBWdD14LnByb2plY3RJbnRvVmlld3BvcnQoRy50b3VjaGVzWzFdLmNsaWVudFgsRy50b3VjaGVzWzFdLmNsaWVudFkpO2tyWzJdPVZ0WzBdLGtyWzNdPVZ0WzFdfWlmKEcudG91Y2hlc1syXSl7dmFyIFZ0PXgucHJvamVjdEludG9WaWV3cG9ydChHLnRvdWNoZXNbMl0uY2xpZW50WCxHLnRvdWNoZXNbMl0uY2xpZW50WSk7a3JbNF09VnRbMF0sa3JbNV09VnRbMV19aWYoRy50b3VjaGVzWzFdKXt4LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSEwLF9lKHguZHJhZ0RhdGEudG91Y2hEcmFnRWxlcyk7dmFyIEhzPXguZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpO3ByPUhzWzBdLEVyPUhzWzFdLE1yPUhzWzJdLENyPUhzWzNdLFR0PUcudG91Y2hlc1swXS5jbGllbnRYLXByLF9uPUcudG91Y2hlc1swXS5jbGllbnRZLUVyLGhuPUcudG91Y2hlc1sxXS5jbGllbnRYLXByLFl0PUcudG91Y2hlc1sxXS5jbGllbnRZLUVyLE9yPTA8PVR0JiZUdDw9TXImJjA8PWhuJiZobjw9TXImJjA8PV9uJiZfbjw9Q3ImJjA8PVl0JiZZdDw9Q3I7dmFyIHdyPUpuLnBhbigpLEVzPUpuLnpvb20oKTtEbj1XbihUdCxfbixobixZdCksaXI9YnIoVHQsX24saG4sWXQpLHZyPVsoVHQraG4pLzIsKF9uK1l0KS8yXSxObj1bKHZyWzBdLXdyLngpL0VzLCh2clsxXS13ci55KS9Fc107dmFyIGdvPTIwMCwkYz1nbypnbztpZihpcjwkYyYmIUcudG91Y2hlc1syXSl7dmFyIHphPXguZmluZE5lYXJlc3RFbGVtZW50KGtyWzBdLGtyWzFdLCEwLCEwKSxTYz14LmZpbmROZWFyZXN0RWxlbWVudChrclsyXSxrclszXSwhMCwhMCk7emEmJnphLmlzTm9kZSgpPyh6YS5hY3RpdmF0ZSgpLmVtaXQoe29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6a3JbMF0seTprclsxXX19KSx4LnRvdWNoRGF0YS5zdGFydD16YSk6U2MmJlNjLmlzTm9kZSgpPyhTYy5hY3RpdmF0ZSgpLmVtaXQoe29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6a3JbMF0seTprclsxXX19KSx4LnRvdWNoRGF0YS5zdGFydD1TYyk6Sm4uZW1pdCh7b3JpZ2luYWxFdmVudDpHLHR5cGU6ImN4dHRhcHN0YXJ0Iixwb3NpdGlvbjp7eDprclswXSx5OmtyWzFdfX0pLHgudG91Y2hEYXRhLnN0YXJ0JiYoeC50b3VjaERhdGEuc3RhcnQuX3ByaXZhdGUuZ3JhYmJlZD0hMSkseC50b3VjaERhdGEuY3h0PSEwLHgudG91Y2hEYXRhLmN4dERyYWdnZWQ9ITEseC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx4LnJlZHJhdygpO3JldHVybn19aWYoRy50b3VjaGVzWzJdKUpuLmJveFNlbGVjdGlvbkVuYWJsZWQoKSYmRy5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgaWYoIUcudG91Y2hlc1sxXSl7aWYoRy50b3VjaGVzWzBdKXt2YXIgYmE9eC5maW5kTmVhcmVzdEVsZW1lbnRzKGtyWzBdLGtyWzFdLCEwLCEwKSx4bz1iYVswXTtpZih4byE9bnVsbCYmKHhvLmFjdGl2YXRlKCkseC50b3VjaERhdGEuc3RhcnQ9eG8seC50b3VjaERhdGEuc3RhcnRzPWJhLHgubm9kZUlzR3JhYmJhYmxlKHhvKSkpe3ZhciBsaD14LmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM9Sm4uY29sbGVjdGlvbigpLFdsPW51bGw7eC5yZWRyYXdIaW50KCJlbGVzIiwhMCkseC5yZWRyYXdIaW50KCJkcmFnIiwhMCkseG8uc2VsZWN0ZWQoKT8oV2w9Sm4uJChmdW5jdGlvbihmZCl7cmV0dXJuIGZkLnNlbGVjdGVkKCkmJngubm9kZUlzR3JhYmJhYmxlKGZkKX0pLG1lKFdsLHthZGRUb0xpc3Q6bGh9KSk6TGUoeG8se2FkZFRvTGlzdDpsaH0pLFkoeG8pO3ZhciBaMj1mdW5jdGlvbihXdil7cmV0dXJue29yaWdpbmFsRXZlbnQ6Ryx0eXBlOld2LHBvc2l0aW9uOnt4OmtyWzBdLHk6a3JbMV19fX07eG8uZW1pdChaMigiZ3JhYm9uIikpLFdsP1dsLmZvckVhY2goZnVuY3Rpb24oZmQpe2ZkLmVtaXQoWjIoImdyYWIiKSl9KTp4by5lbWl0KFoyKCJncmFiIikpfVMoeG8sWyJ0b3VjaHN0YXJ0IiwidGFwc3RhcnQiLCJ2bW91c2Vkb3duIl0sRyx7eDprclswXSx5OmtyWzFdfSkseG89PW51bGwmJih4LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249e3g6VnRbMF0seTpWdFsxXX0seC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx4LnJlZHJhdygpKSx4LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSExLHgudG91Y2hEYXRhLnNpbmdsZVRvdWNoU3RhcnRUaW1lPStuZXcgRGF0ZSxjbGVhclRpbWVvdXQoeC50b3VjaERhdGEudGFwaG9sZFRpbWVvdXQpLHgudG91Y2hEYXRhLnRhcGhvbGRUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt4LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPT09ITEmJiF4LnBpbmNoaW5nJiYheC50b3VjaERhdGEuc2VsZWN0aW5nJiZTKHgudG91Y2hEYXRhLnN0YXJ0LFsidGFwaG9sZCJdLEcse3g6a3JbMF0seTprclsxXX0pfSx4LnRhcGhvbGREdXJhdGlvbil9fWlmKEcudG91Y2hlcy5sZW5ndGg+PTEpe2Zvcih2YXIgZWI9eC50b3VjaERhdGEuc3RhcnRQb3NpdGlvbj1bbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLEcwPTA7RzA8a3IubGVuZ3RoO0cwKyspZWJbRzBdPWxyW0cwXT1rcltHMF07dmFyIHpwPUcudG91Y2hlc1swXTt4LnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbj1benAuY2xpZW50WCx6cC5jbGllbnRZXX19fSwhMSk7dmFyIE5yO3gucmVnaXN0ZXJCaW5kaW5nKHdpbmRvdywidG91Y2htb3ZlIixOcj1mdW5jdGlvbihHKXt2YXIgSm49eC50b3VjaERhdGEuY2FwdHVyZTtpZighKCFKbiYmIUplKEcpKSl7dmFyIGtyPXguc2VsZWN0aW9uLGxyPXguY3ksVnQ9eC50b3VjaERhdGEubm93LEhzPXgudG91Y2hEYXRhLmVhcmxpZXIsd3I9bHIuem9vbSgpO2lmKEcudG91Y2hlc1swXSl7dmFyIEVzPXgucHJvamVjdEludG9WaWV3cG9ydChHLnRvdWNoZXNbMF0uY2xpZW50WCxHLnRvdWNoZXNbMF0uY2xpZW50WSk7VnRbMF09RXNbMF0sVnRbMV09RXNbMV19aWYoRy50b3VjaGVzWzFdKXt2YXIgRXM9eC5wcm9qZWN0SW50b1ZpZXdwb3J0KEcudG91Y2hlc1sxXS5jbGllbnRYLEcudG91Y2hlc1sxXS5jbGllbnRZKTtWdFsyXT1Fc1swXSxWdFszXT1Fc1sxXX1pZihHLnRvdWNoZXNbMl0pe3ZhciBFcz14LnByb2plY3RJbnRvVmlld3BvcnQoRy50b3VjaGVzWzJdLmNsaWVudFgsRy50b3VjaGVzWzJdLmNsaWVudFkpO1Z0WzRdPUVzWzBdLFZ0WzVdPUVzWzFdfXZhciBnbz14LnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbiwkYztpZihKbiYmRy50b3VjaGVzWzBdJiZnbyl7Zm9yKHZhciB6YT1bXSxTYz0wO1NjPFZ0Lmxlbmd0aDtTYysrKXphW1NjXT1WdFtTY10tSHNbU2NdO3ZhciBiYT1HLnRvdWNoZXNbMF0uY2xpZW50WC1nb1swXSx4bz1iYSpiYSxsaD1HLnRvdWNoZXNbMF0uY2xpZW50WS1nb1sxXSxXbD1saCpsaCxaMj14bytXbDskYz1aMj49eC50b3VjaFRhcFRocmVzaG9sZDJ9aWYoSm4mJngudG91Y2hEYXRhLmN4dCl7Ry5wcmV2ZW50RGVmYXVsdCgpO3ZhciBlYj1HLnRvdWNoZXNbMF0uY2xpZW50WC1wcixHMD1HLnRvdWNoZXNbMF0uY2xpZW50WS1Fcix6cD1HLnRvdWNoZXNbMV0uY2xpZW50WC1wcixmZD1HLnRvdWNoZXNbMV0uY2xpZW50WS1FcixXdj1icihlYixHMCx6cCxmZCksc3k9V3YvaXIsRTg9MTUwLHg1PUU4KkU4LFQ4PTEuNSxaUz1UOCpUODtpZihzeT49WlN8fFd2Pj14NSl7eC50b3VjaERhdGEuY3h0PSExLHguZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgazU9e29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHR0YXBlbmQiLHBvc2l0aW9uOnt4OlZ0WzBdLHk6VnRbMV19fTt4LnRvdWNoRGF0YS5zdGFydD8oeC50b3VjaERhdGEuc3RhcnQudW5hY3RpdmF0ZSgpLmVtaXQoazUpLHgudG91Y2hEYXRhLnN0YXJ0PW51bGwpOmxyLmVtaXQoazUpfX1pZihKbiYmeC50b3VjaERhdGEuY3h0KXt2YXIgazU9e29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHRkcmFnIixwb3NpdGlvbjp7eDpWdFswXSx5OlZ0WzFdfX07eC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx4LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHgudG91Y2hEYXRhLnN0YXJ0P3gudG91Y2hEYXRhLnN0YXJ0LmVtaXQoazUpOmxyLmVtaXQoazUpLHgudG91Y2hEYXRhLnN0YXJ0JiYoeC50b3VjaERhdGEuc3RhcnQuX3ByaXZhdGUuZ3JhYmJlZD0hMSkseC50b3VjaERhdGEuY3h0RHJhZ2dlZD0hMDt2YXIgUWQ9eC5maW5kTmVhcmVzdEVsZW1lbnQoVnRbMF0sVnRbMV0sITAsITApOygheC50b3VjaERhdGEuY3h0T3Zlcnx8UWQhPT14LnRvdWNoRGF0YS5jeHRPdmVyKSYmKHgudG91Y2hEYXRhLmN4dE92ZXImJngudG91Y2hEYXRhLmN4dE92ZXIuZW1pdCh7b3JpZ2luYWxFdmVudDpHLHR5cGU6ImN4dGRyYWdvdXQiLHBvc2l0aW9uOnt4OlZ0WzBdLHk6VnRbMV19fSkseC50b3VjaERhdGEuY3h0T3Zlcj1RZCxRZCYmUWQuZW1pdCh7b3JpZ2luYWxFdmVudDpHLHR5cGU6ImN4dGRyYWdvdmVyIixwb3NpdGlvbjp7eDpWdFswXSx5OlZ0WzFdfX0pKX1lbHNlIGlmKEpuJiZHLnRvdWNoZXNbMl0mJmxyLmJveFNlbGVjdGlvbkVuYWJsZWQoKSlHLnByZXZlbnREZWZhdWx0KCkseC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0aGlzLmxhc3RUaHJlZVRvdWNoPStuZXcgRGF0ZSx4LnRvdWNoRGF0YS5zZWxlY3Rpbmd8fGxyLmVtaXQoe29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJib3hzdGFydCIscG9zaXRpb246e3g6VnRbMF0seTpWdFsxXX19KSx4LnRvdWNoRGF0YS5zZWxlY3Rpbmc9ITAseC50b3VjaERhdGEuZGlkU2VsZWN0PSEwLGtyWzRdPTEsIWtyfHxrci5sZW5ndGg9PT0wfHxrclswXT09PXZvaWQgMD8oa3JbMF09KFZ0WzBdK1Z0WzJdK1Z0WzRdKS8zLGtyWzFdPShWdFsxXStWdFszXStWdFs1XSkvMyxrclsyXT0oVnRbMF0rVnRbMl0rVnRbNF0pLzMrMSxrclszXT0oVnRbMV0rVnRbM10rVnRbNV0pLzMrMSk6KGtyWzJdPShWdFswXStWdFsyXStWdFs0XSkvMyxrclszXT0oVnRbMV0rVnRbM10rVnRbNV0pLzMpLHgucmVkcmF3SGludCgic2VsZWN0IiwhMCkseC5yZWRyYXcoKTtlbHNlIGlmKEpuJiZHLnRvdWNoZXNbMV0mJiF4LnRvdWNoRGF0YS5kaWRTZWxlY3QmJmxyLnpvb21pbmdFbmFibGVkKCkmJmxyLnBhbm5pbmdFbmFibGVkKCkmJmxyLnVzZXJab29taW5nRW5hYmxlZCgpJiZsci51c2VyUGFubmluZ0VuYWJsZWQoKSl7Ry5wcmV2ZW50RGVmYXVsdCgpLHguZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgXzE9eC5kcmFnRGF0YS50b3VjaERyYWdFbGVzO2lmKF8xKXt4LnJlZHJhd0hpbnQoImRyYWciLCEwKTtmb3IodmFyIEpkPTA7SmQ8XzEubGVuZ3RoO0pkKyspe3ZhciBZdj1fMVtKZF0uX3ByaXZhdGU7WXYuZ3JhYmJlZD0hMSxZdi5yc2NyYXRjaC5pbkRyYWdMYXllcj0hMX19dmFyIEVtPXgudG91Y2hEYXRhLnN0YXJ0LGViPUcudG91Y2hlc1swXS5jbGllbnRYLXByLEcwPUcudG91Y2hlc1swXS5jbGllbnRZLUVyLHpwPUcudG91Y2hlc1sxXS5jbGllbnRYLXByLGZkPUcudG91Y2hlc1sxXS5jbGllbnRZLUVyLEx6PVduKGViLEcwLHpwLGZkKSxMaWU9THovRG47aWYoT3Ipe3ZhciBNaWU9ZWItVHQsZV89RzAtX24sRGllPXpwLWhuLElpZT1mZC1ZdCxFNT0oTWllK0RpZSkvMixNej0oZV8rSWllKS8yLHlrPWxyLnpvb20oKSxVST15aypMaWUsdF89bHIucGFuKCksRHo9Tm5bMF0qeWsrdF8ueCxJej1OblsxXSp5ayt0Xy55LE9pZT17eDotVUkveWsqKER6LXRfLngtRTUpK0R6LHk6LVVJL3lrKihJei10Xy55LU16KStJen07aWYoRW0mJkVtLmFjdGl2ZSgpKXt2YXIgXzE9eC5kcmFnRGF0YS50b3VjaERyYWdFbGVzO19lKF8xKSx4LnJlZHJhd0hpbnQoImRyYWciLCEwKSx4LnJlZHJhd0hpbnQoImVsZXMiLCEwKSxFbS51bmFjdGl2YXRlKCkuZW1pdCgiZnJlZW9uIiksXzEuZW1pdCgiZnJlZSIpLHguZHJhZ0RhdGEuZGlkRHJhZyYmKEVtLmVtaXQoImRyYWdmcmVlb24iKSxfMS5lbWl0KCJkcmFnZnJlZSIpKX1sci52aWV3cG9ydCh7em9vbTpVSSxwYW46T2llLGNhbmNlbE9uRmFpbGVkWm9vbTohMH0pLGxyLmVtaXQoInBpbmNoem9vbSIpLERuPUx6LFR0PWViLF9uPUcwLGhuPXpwLFl0PWZkLHgucGluY2hpbmc9ITB9aWYoRy50b3VjaGVzWzBdKXt2YXIgRXM9eC5wcm9qZWN0SW50b1ZpZXdwb3J0KEcudG91Y2hlc1swXS5jbGllbnRYLEcudG91Y2hlc1swXS5jbGllbnRZKTtWdFswXT1Fc1swXSxWdFsxXT1Fc1sxXX1pZihHLnRvdWNoZXNbMV0pe3ZhciBFcz14LnByb2plY3RJbnRvVmlld3BvcnQoRy50b3VjaGVzWzFdLmNsaWVudFgsRy50b3VjaGVzWzFdLmNsaWVudFkpO1Z0WzJdPUVzWzBdLFZ0WzNdPUVzWzFdfWlmKEcudG91Y2hlc1syXSl7dmFyIEVzPXgucHJvamVjdEludG9WaWV3cG9ydChHLnRvdWNoZXNbMl0uY2xpZW50WCxHLnRvdWNoZXNbMl0uY2xpZW50WSk7VnRbNF09RXNbMF0sVnRbNV09RXNbMV19fWVsc2UgaWYoRy50b3VjaGVzWzBdJiYheC50b3VjaERhdGEuZGlkU2VsZWN0KXt2YXIgcXA9eC50b3VjaERhdGEuc3RhcnQsbl89eC50b3VjaERhdGEubGFzdCxRZDtpZigheC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzJiYheC5zd2lwZVBhbm5pbmcmJihRZD14LmZpbmROZWFyZXN0RWxlbWVudChWdFswXSxWdFsxXSwhMCwhMCkpLEpuJiZxcCE9bnVsbCYmRy5wcmV2ZW50RGVmYXVsdCgpLEpuJiZxcCE9bnVsbCYmeC5ub2RlSXNEcmFnZ2FibGUocXApKWlmKCRjKXt2YXIgXzE9eC5kcmFnRGF0YS50b3VjaERyYWdFbGVzLEdJPSF4LmRyYWdEYXRhLmRpZERyYWc7R0kmJm1lKF8xLHtpbkRyYWdMYXllcjohMH0pLHguZHJhZ0RhdGEuZGlkRHJhZz0hMDt2YXIgVG09e3g6MCx5OjB9O2lmKFgoemFbMF0pJiZYKHphWzFdKSYmKFRtLngrPXphWzBdLFRtLnkrPXphWzFdLEdJKSl7eC5yZWRyYXdIaW50KCJlbGVzIiwhMCk7dmFyIFpkPXgudG91Y2hEYXRhLmRyYWdEZWx0YTtaZCYmWChaZFswXSkmJlgoWmRbMV0pJiYoVG0ueCs9WmRbMF0sVG0ueSs9WmRbMV0pfXguaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMCxfMS5zaWxlbnRTaGlmdChUbSkuZW1pdCgicG9zaXRpb24gZHJhZyIpLHgucmVkcmF3SGludCgiZHJhZyIsITApLHgudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMF09PUhzWzBdJiZ4LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzFdPT1Ic1sxXSYmeC5yZWRyYXdIaW50KCJlbGVzIiwhMCkseC5yZWRyYXcoKX1lbHNle3ZhciBaZD14LnRvdWNoRGF0YS5kcmFnRGVsdGE9eC50b3VjaERhdGEuZHJhZ0RlbHRhfHxbXTtaZC5sZW5ndGg9PT0wPyhaZC5wdXNoKHphWzBdKSxaZC5wdXNoKHphWzFdKSk6KFpkWzBdKz16YVswXSxaZFsxXSs9emFbMV0pfWlmKFMocXB8fFFkLFsidG91Y2htb3ZlIiwidGFwZHJhZyIsInZtb3VzZW1vdmUiXSxHLHt4OlZ0WzBdLHk6VnRbMV19KSwoIXFwfHwhcXAuZ3JhYmJlZCgpKSYmUWQhPW5fJiYobl8mJm5fLmVtaXQoe29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJ0YXBkcmFnb3V0Iixwb3NpdGlvbjp7eDpWdFswXSx5OlZ0WzFdfX0pLFFkJiZRZC5lbWl0KHtvcmlnaW5hbEV2ZW50OkcsdHlwZToidGFwZHJhZ292ZXIiLHBvc2l0aW9uOnt4OlZ0WzBdLHk6VnRbMV19fSkpLHgudG91Y2hEYXRhLmxhc3Q9UWQsSm4pZm9yKHZhciBKZD0wO0pkPFZ0Lmxlbmd0aDtKZCsrKVZ0W0pkXSYmeC50b3VjaERhdGEuc3RhcnRQb3NpdGlvbltKZF0mJiRjJiYoeC50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMCk7aWYoSm4mJihxcD09bnVsbHx8cXAucGFubmFibGUoKSkmJmxyLnBhbm5pbmdFbmFibGVkKCkmJmxyLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXt2YXIgVDU9TyhxcCx4LnRvdWNoRGF0YS5zdGFydHMpO1Q1JiYoRy5wcmV2ZW50RGVmYXVsdCgpLHguZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbnx8KHguZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj1KNyh4LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uKSkseC5zd2lwZVBhbm5pbmc/KGxyLnBhbkJ5KHt4OnphWzBdKndyLHk6emFbMV0qd3J9KSxsci5lbWl0KCJkcmFncGFuIikpOiRjJiYoeC5zd2lwZVBhbm5pbmc9ITAsbHIucGFuQnkoe3g6YmEqd3IseTpsaCp3cn0pLGxyLmVtaXQoImRyYWdwYW4iKSxxcCYmKHFwLnVuYWN0aXZhdGUoKSx4LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHgudG91Y2hEYXRhLnN0YXJ0PW51bGwpKSk7dmFyIEVzPXgucHJvamVjdEludG9WaWV3cG9ydChHLnRvdWNoZXNbMF0uY2xpZW50WCxHLnRvdWNoZXNbMF0uY2xpZW50WSk7VnRbMF09RXNbMF0sVnRbMV09RXNbMV19fWZvcih2YXIgU2M9MDtTYzxWdC5sZW5ndGg7U2MrKylIc1tTY109VnRbU2NdO0puJiZHLnRvdWNoZXMubGVuZ3RoPjAmJiF4LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMmJiF4LnN3aXBlUGFubmluZyYmeC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uIT1udWxsJiYoeC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx4LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHgucmVkcmF3KCkpfX0sITEpO3ZhciBTaTt4LnJlZ2lzdGVyQmluZGluZyhtLCJ0b3VjaGNhbmNlbCIsU2k9ZnVuY3Rpb24oRyl7dmFyIEpuPXgudG91Y2hEYXRhLnN0YXJ0O3gudG91Y2hEYXRhLmNhcHR1cmU9ITEsSm4mJkpuLnVuYWN0aXZhdGUoKX0pO3ZhciB5cyxwYSxNaSxnaTtpZih4LnJlZ2lzdGVyQmluZGluZyhtLCJ0b3VjaGVuZCIseXM9ZnVuY3Rpb24oRyl7dmFyIEpuPXgudG91Y2hEYXRhLnN0YXJ0LGtyPXgudG91Y2hEYXRhLmNhcHR1cmU7aWYoa3IpRy50b3VjaGVzLmxlbmd0aD09PTAmJih4LnRvdWNoRGF0YS5jYXB0dXJlPSExKSxHLnByZXZlbnREZWZhdWx0KCk7ZWxzZSByZXR1cm47dmFyIGxyPXguc2VsZWN0aW9uO3guc3dpcGVQYW5uaW5nPSExLHguaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMTt2YXIgVnQ9eC5jeSxIcz1WdC56b29tKCksd3I9eC50b3VjaERhdGEubm93LEVzPXgudG91Y2hEYXRhLmVhcmxpZXI7aWYoRy50b3VjaGVzWzBdKXt2YXIgZ289eC5wcm9qZWN0SW50b1ZpZXdwb3J0KEcudG91Y2hlc1swXS5jbGllbnRYLEcudG91Y2hlc1swXS5jbGllbnRZKTt3clswXT1nb1swXSx3clsxXT1nb1sxXX1pZihHLnRvdWNoZXNbMV0pe3ZhciBnbz14LnByb2plY3RJbnRvVmlld3BvcnQoRy50b3VjaGVzWzFdLmNsaWVudFgsRy50b3VjaGVzWzFdLmNsaWVudFkpO3dyWzJdPWdvWzBdLHdyWzNdPWdvWzFdfWlmKEcudG91Y2hlc1syXSl7dmFyIGdvPXgucHJvamVjdEludG9WaWV3cG9ydChHLnRvdWNoZXNbMl0uY2xpZW50WCxHLnRvdWNoZXNbMl0uY2xpZW50WSk7d3JbNF09Z29bMF0sd3JbNV09Z29bMV19Sm4mJkpuLnVuYWN0aXZhdGUoKTt2YXIgJGM7aWYoeC50b3VjaERhdGEuY3h0KXtpZigkYz17b3JpZ2luYWxFdmVudDpHLHR5cGU6ImN4dHRhcGVuZCIscG9zaXRpb246e3g6d3JbMF0seTp3clsxXX19LEpuP0puLmVtaXQoJGMpOlZ0LmVtaXQoJGMpLCF4LnRvdWNoRGF0YS5jeHREcmFnZ2VkKXt2YXIgemE9e29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHR0YXAiLHBvc2l0aW9uOnt4OndyWzBdLHk6d3JbMV19fTtKbj9Kbi5lbWl0KHphKTpWdC5lbWl0KHphKX14LnRvdWNoRGF0YS5zdGFydCYmKHgudG91Y2hEYXRhLnN0YXJ0Ll9wcml2YXRlLmdyYWJiZWQ9ITEpLHgudG91Y2hEYXRhLmN4dD0hMSx4LnRvdWNoRGF0YS5zdGFydD1udWxsLHgucmVkcmF3KCk7cmV0dXJufWlmKCFHLnRvdWNoZXNbMl0mJlZ0LmJveFNlbGVjdGlvbkVuYWJsZWQoKSYmeC50b3VjaERhdGEuc2VsZWN0aW5nKXt4LnRvdWNoRGF0YS5zZWxlY3Rpbmc9ITE7dmFyIFNjPVZ0LmNvbGxlY3Rpb24oeC5nZXRBbGxJbkJveChsclswXSxsclsxXSxsclsyXSxsclszXSkpO2xyWzBdPXZvaWQgMCxsclsxXT12b2lkIDAsbHJbMl09dm9pZCAwLGxyWzNdPXZvaWQgMCxscls0XT0wLHgucmVkcmF3SGludCgic2VsZWN0IiwhMCksVnQuZW1pdCh7dHlwZToiYm94ZW5kIixvcmlnaW5hbEV2ZW50OkcscG9zaXRpb246e3g6d3JbMF0seTp3clsxXX19KTt2YXIgYmE9ZnVuY3Rpb24oeDUpe3JldHVybiB4NS5zZWxlY3RhYmxlKCkmJiF4NS5zZWxlY3RlZCgpfTtTYy5lbWl0KCJib3giKS5zdGRGaWx0ZXIoYmEpLnNlbGVjdCgpLmVtaXQoImJveHNlbGVjdCIpLFNjLm5vbmVtcHR5KCkmJngucmVkcmF3SGludCgiZWxlcyIsITApLHgucmVkcmF3KCl9aWYoSm4hPW51bGwmJkpuLnVuYWN0aXZhdGUoKSxHLnRvdWNoZXNbMl0peC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx4LnJlZHJhd0hpbnQoInNlbGVjdCIsITApO2Vsc2UgaWYoIUcudG91Y2hlc1sxXSl7aWYoIUcudG91Y2hlc1swXSl7aWYoIUcudG91Y2hlc1swXSl7eC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx4LnJlZHJhd0hpbnQoInNlbGVjdCIsITApO3ZhciB4bz14LmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM7aWYoSm4hPW51bGwpe3ZhciBsaD1Kbi5fcHJpdmF0ZS5ncmFiYmVkO19lKHhvKSx4LnJlZHJhd0hpbnQoImRyYWciLCEwKSx4LnJlZHJhd0hpbnQoImVsZXMiLCEwKSxsaCYmKEpuLmVtaXQoImZyZWVvbiIpLHhvLmVtaXQoImZyZWUiKSx4LmRyYWdEYXRhLmRpZERyYWcmJihKbi5lbWl0KCJkcmFnZnJlZW9uIikseG8uZW1pdCgiZHJhZ2ZyZWUiKSkpLFMoSm4sWyJ0b3VjaGVuZCIsInRhcGVuZCIsInZtb3VzZXVwIiwidGFwZHJhZ291dCJdLEcse3g6d3JbMF0seTp3clsxXX0pLEpuLnVuYWN0aXZhdGUoKSx4LnRvdWNoRGF0YS5zdGFydD1udWxsfWVsc2V7dmFyIFdsPXguZmluZE5lYXJlc3RFbGVtZW50KHdyWzBdLHdyWzFdLCEwLCEwKTtTKFdsLFsidG91Y2hlbmQiLCJ0YXBlbmQiLCJ2bW91c2V1cCIsInRhcGRyYWdvdXQiXSxHLHt4OndyWzBdLHk6d3JbMV19KX12YXIgWjI9eC50b3VjaERhdGEuc3RhcnRQb3NpdGlvblswXS13clswXSxlYj1aMipaMixHMD14LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzFdLXdyWzFdLHpwPUcwKkcwLGZkPWViK3pwLFd2PWZkKkhzKkhzO3gudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWR8fChKbnx8VnQuJCgiOnNlbGVjdGVkIikudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKSxTKEpuLFsidGFwIiwidmNsaWNrIl0sRyx7eDp3clswXSx5OndyWzFdfSkscGE9ITEsRy50aW1lU3RhbXAtZ2k8PVZ0Lm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKT8oTWkmJmNsZWFyVGltZW91dChNaSkscGE9ITAsZ2k9bnVsbCxTKEpuLFsiZGJsdGFwIiwidmRibGNsaWNrIl0sRyx7eDp3clswXSx5OndyWzFdfSkpOihNaT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cGF8fFMoSm4sWyJvbmV0YXAiLCJ2b25lY2xpY2siXSxHLHt4OndyWzBdLHk6d3JbMV19KX0sVnQubXVsdGlDbGlja0RlYm91bmNlVGltZSgpKSxnaT1HLnRpbWVTdGFtcCkpLEpuIT1udWxsJiYheC5kcmFnRGF0YS5kaWREcmFnJiZKbi5fcHJpdmF0ZS5zZWxlY3RhYmxlJiZXdjx4LnRvdWNoVGFwVGhyZXNob2xkMiYmIXgucGluY2hpbmcmJihWdC5zZWxlY3Rpb25UeXBlKCk9PT0ic2luZ2xlIj8oVnQuJChrKS51bm1lcmdlKEpuKS51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pLEpuLnNlbGVjdChbInRhcHNlbGVjdCJdKSk6Sm4uc2VsZWN0ZWQoKT9Kbi51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pOkpuLnNlbGVjdChbInRhcHNlbGVjdCJdKSx4LnJlZHJhd0hpbnQoImVsZXMiLCEwKSkseC50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMH19fWZvcih2YXIgc3k9MDtzeTx3ci5sZW5ndGg7c3krKylFc1tzeV09d3Jbc3ldO3guZHJhZ0RhdGEuZGlkRHJhZz0hMSxHLnRvdWNoZXMubGVuZ3RoPT09MCYmKHgudG91Y2hEYXRhLmRyYWdEZWx0YT1bXSx4LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uPVtudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0seC50b3VjaERhdGEuc3RhcnRHUG9zaXRpb249bnVsbCx4LnRvdWNoRGF0YS5kaWRTZWxlY3Q9ITEpLEcudG91Y2hlcy5sZW5ndGg8MiYmKEcudG91Y2hlcy5sZW5ndGg9PT0xJiYoeC50b3VjaERhdGEuc3RhcnRHUG9zaXRpb249W0cudG91Y2hlc1swXS5jbGllbnRYLEcudG91Y2hlc1swXS5jbGllbnRZXSkseC5waW5jaGluZz0hMSx4LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx4LnJlZHJhdygpKX0sITEpLHR5cGVvZiBUb3VjaEV2ZW50PiJ1Iil7dmFyIGZzPVtdLEZzPWZ1bmN0aW9uKEcpe3JldHVybntjbGllbnRYOkcuY2xpZW50WCxjbGllbnRZOkcuY2xpZW50WSxmb3JjZToxLGlkZW50aWZpZXI6Ry5wb2ludGVySWQscGFnZVg6Ry5wYWdlWCxwYWdlWTpHLnBhZ2VZLHJhZGl1c1g6Ry53aWR0aC8yLHJhZGl1c1k6Ry5oZWlnaHQvMixzY3JlZW5YOkcuc2NyZWVuWCxzY3JlZW5ZOkcuc2NyZWVuWSx0YXJnZXQ6Ry50YXJnZXR9fSx4cz1mdW5jdGlvbihHKXtyZXR1cm57ZXZlbnQ6Ryx0b3VjaDpGcyhHKX19LFJzPWZ1bmN0aW9uKEcpe2ZzLnB1c2goeHMoRykpfSx5bz1mdW5jdGlvbihHKXtmb3IodmFyIEpuPTA7Sm48ZnMubGVuZ3RoO0puKyspe3ZhciBrcj1mc1tKbl07aWYoa3IuZXZlbnQucG9pbnRlcklkPT09Ry5wb2ludGVySWQpe2ZzLnNwbGljZShKbiwxKTtyZXR1cm59fX0sJGE9ZnVuY3Rpb24oRyl7dmFyIEpuPWZzLmZpbHRlcihmdW5jdGlvbihrcil7cmV0dXJuIGtyLmV2ZW50LnBvaW50ZXJJZD09PUcucG9pbnRlcklkfSlbMF07Sm4uZXZlbnQ9RyxKbi50b3VjaD1GcyhHKX0sRGE9ZnVuY3Rpb24oRyl7Ry50b3VjaGVzPWZzLm1hcChmdW5jdGlvbihKbil7cmV0dXJuIEpuLnRvdWNofSl9LEJvPWZ1bmN0aW9uKEcpe3JldHVybiBHLnBvaW50ZXJUeXBlPT09Im1vdXNlInx8Ry5wb2ludGVyVHlwZT09PTR9O3gucmVnaXN0ZXJCaW5kaW5nKHguY29udGFpbmVyLCJwb2ludGVyZG93biIsZnVuY3Rpb24odHIpe0JvKHRyKXx8KHRyLnByZXZlbnREZWZhdWx0KCksUnModHIpLERhKHRyKSxTcih0cikpfSkseC5yZWdpc3RlckJpbmRpbmcoeC5jb250YWluZXIsInBvaW50ZXJ1cCIsZnVuY3Rpb24odHIpe0JvKHRyKXx8KHlvKHRyKSxEYSh0cikseXModHIpKX0pLHgucmVnaXN0ZXJCaW5kaW5nKHguY29udGFpbmVyLCJwb2ludGVyY2FuY2VsIixmdW5jdGlvbih0cil7Qm8odHIpfHwoeW8odHIpLERhKHRyKSxTaSh0cikpfSkseC5yZWdpc3RlckJpbmRpbmcoeC5jb250YWluZXIsInBvaW50ZXJtb3ZlIixmdW5jdGlvbih0cil7Qm8odHIpfHwodHIucHJldmVudERlZmF1bHQoKSwkYSh0ciksRGEodHIpLE5yKHRyKSl9KX19O3ZhciBLdj17fTtLdi5nZW5lcmF0ZVBvbHlnb249ZnVuY3Rpb24oeCxtKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzW3hdPXtyZW5kZXJlcjp0aGlzLG5hbWU6eCxwb2ludHM6bSxkcmF3OmZ1bmN0aW9uKFMsTSxPLE4sJCl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKCJwb2x5Z29uIixTLE0sTyxOLCQsdGhpcy5wb2ludHMpfSxpbnRlcnNlY3RMaW5lOmZ1bmN0aW9uKFMsTSxPLE4sJCxILHEpe3JldHVybiBLOSgkLEgsdGhpcy5wb2ludHMsUyxNLE8vMixOLzIscSl9LGNoZWNrUG9pbnQ6ZnVuY3Rpb24oUyxNLE8sTiwkLEgscSl7cmV0dXJuIFV2KFMsTSx0aGlzLnBvaW50cyxILHEsTiwkLFswLC0xXSxPKX19fSxLdi5nZW5lcmF0ZUVsbGlwc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzLmVsbGlwc2U9e3JlbmRlcmVyOnRoaXMsbmFtZToiZWxsaXBzZSIsZHJhdzpmdW5jdGlvbihtLGssUyxNLE8pe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsbSxrLFMsTSxPKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihtLGssUyxNLE8sTiwkKXtyZXR1cm4gQ1ooTyxOLG0sayxTLzIrJCxNLzIrJCl9LGNoZWNrUG9pbnQ6ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCl7cmV0dXJuIGQ1KG0sayxNLE8sTiwkLFMpfX19LEt2LmdlbmVyYXRlUm91bmRQb2x5Z29uPWZ1bmN0aW9uKHgsbSl7Zm9yKHZhciBrPW5ldyBBcnJheShtLmxlbmd0aCoyKSxTPTA7UzxtLmxlbmd0aC8yO1MrKyl7dmFyIE09UyoyLE89dm9pZCAwO1M8bS5sZW5ndGgvMi0xP089KFMrMSkqMjpPPTAsa1tTKjRdPW1bTV0sa1tTKjQrMV09bVtNKzFdO3ZhciBOPW1bT10tbVtNXSwkPW1bTysxXS1tW00rMV0sSD1NYXRoLnNxcnQoTipOKyQqJCk7a1tTKjQrMl09Ti9ILGtbUyo0KzNdPSQvSH1yZXR1cm4gdGhpcy5ub2RlU2hhcGVzW3hdPXtyZW5kZXJlcjp0aGlzLG5hbWU6eCxwb2ludHM6ayxkcmF3OmZ1bmN0aW9uKFksWixjZSx2ZSxtZSl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKCJyb3VuZC1wb2x5Z29uIixZLFosY2UsdmUsbWUsdGhpcy5wb2ludHMpfSxpbnRlcnNlY3RMaW5lOmZ1bmN0aW9uKFksWixjZSx2ZSxtZSxMZSxfZSl7cmV0dXJuIFNaKG1lLExlLHRoaXMucG9pbnRzLFksWixjZSx2ZSl9LGNoZWNrUG9pbnQ6ZnVuY3Rpb24oWSxaLGNlLHZlLG1lLExlLF9lKXtyZXR1cm4gVFooWSxaLHRoaXMucG9pbnRzLExlLF9lLHZlLG1lKX19fSxLdi5nZW5lcmF0ZVJvdW5kUmVjdGFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlc1sicm91bmQtcmVjdGFuZ2xlIl09dGhpcy5ub2RlU2hhcGVzLnJvdW5kcmVjdGFuZ2xlPXtyZW5kZXJlcjp0aGlzLG5hbWU6InJvdW5kLXJlY3RhbmdsZSIscG9pbnRzOmhkKDQsMCksZHJhdzpmdW5jdGlvbihtLGssUyxNLE8pe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsbSxrLFMsTSxPKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihtLGssUyxNLE8sTiwkKXtyZXR1cm4gYmooTyxOLG0sayxTLE0sJCl9LGNoZWNrUG9pbnQ6ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCl7dmFyIEg9VzkoTSxPKSxxPUgqMjtyZXR1cm4hIShVdihtLGssdGhpcy5wb2ludHMsTiwkLE0sTy1xLFswLC0xXSxTKXx8VXYobSxrLHRoaXMucG9pbnRzLE4sJCxNLXEsTyxbMCwtMV0sUyl8fGQ1KG0sayxxLHEsTi1NLzIrSCwkLU8vMitILFMpfHxkNShtLGsscSxxLE4rTS8yLUgsJC1PLzIrSCxTKXx8ZDUobSxrLHEscSxOK00vMi1ILCQrTy8yLUgsUyl8fGQ1KG0sayxxLHEsTi1NLzIrSCwkK08vMi1ILFMpKX19fSxLdi5nZW5lcmF0ZUN1dFJlY3RhbmdsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbImN1dC1yZWN0YW5nbGUiXT10aGlzLm5vZGVTaGFwZXMuY3V0cmVjdGFuZ2xlPXtyZW5kZXJlcjp0aGlzLG5hbWU6ImN1dC1yZWN0YW5nbGUiLGNvcm5lckxlbmd0aDp2aigpLHBvaW50czpoZCg0LDApLGRyYXc6ZnVuY3Rpb24obSxrLFMsTSxPKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLG0sayxTLE0sTyl9LGdlbmVyYXRlQ3V0VHJpYW5nbGVQdHM6ZnVuY3Rpb24obSxrLFMsTSl7dmFyIE89dGhpcy5jb3JuZXJMZW5ndGgsTj1rLzIsJD1tLzIsSD1TLSQscT1TKyQsWT1NLU4sWj1NK047cmV0dXJue3RvcExlZnQ6W0gsWStPLEgrTyxZLEgrTyxZK09dLHRvcFJpZ2h0OltxLU8sWSxxLFkrTyxxLU8sWStPXSxib3R0b21SaWdodDpbcSxaLU8scS1PLFoscS1PLFotT10sYm90dG9tTGVmdDpbSCtPLFosSCxaLU8sSCtPLFotT119fSxpbnRlcnNlY3RMaW5lOmZ1bmN0aW9uKG0sayxTLE0sTyxOLCQpe3ZhciBIPXRoaXMuZ2VuZXJhdGVDdXRUcmlhbmdsZVB0cyhTKzIqJCxNKzIqJCxtLGspLHE9W10uY29uY2F0LmFwcGx5KFtdLFtILnRvcExlZnQuc3BsaWNlKDAsNCksSC50b3BSaWdodC5zcGxpY2UoMCw0KSxILmJvdHRvbVJpZ2h0LnNwbGljZSgwLDQpLEguYm90dG9tTGVmdC5zcGxpY2UoMCw0KV0pO3JldHVybiBLOShPLE4scSxtLGspfSxjaGVja1BvaW50OmZ1bmN0aW9uKG0sayxTLE0sTyxOLCQpe2lmKFV2KG0sayx0aGlzLnBvaW50cyxOLCQsTSxPLTIqdGhpcy5jb3JuZXJMZW5ndGgsWzAsLTFdLFMpfHxVdihtLGssdGhpcy5wb2ludHMsTiwkLE0tMip0aGlzLmNvcm5lckxlbmd0aCxPLFswLC0xXSxTKSlyZXR1cm4hMDt2YXIgSD10aGlzLmdlbmVyYXRlQ3V0VHJpYW5nbGVQdHMoTSxPLE4sJCk7cmV0dXJuIFlkKG0sayxILnRvcExlZnQpfHxZZChtLGssSC50b3BSaWdodCl8fFlkKG0sayxILmJvdHRvbVJpZ2h0KXx8WWQobSxrLEguYm90dG9tTGVmdCl9fX0sS3YuZ2VuZXJhdGVCYXJyZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzLmJhcnJlbD17cmVuZGVyZXI6dGhpcyxuYW1lOiJiYXJyZWwiLHBvaW50czpoZCg0LDApLGRyYXc6ZnVuY3Rpb24obSxrLFMsTSxPKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLG0sayxTLE0sTyl9LGludGVyc2VjdExpbmU6ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCl7dmFyIEg9LjE1LHE9LjUsWT0uODUsWj10aGlzLmdlbmVyYXRlQmFycmVsQmV6aWVyUHRzKFMrMiokLE0rMiokLG0sayksY2U9ZnVuY3Rpb24oTGUpe3ZhciBfZT1aNyh7eDpMZVswXSx5OkxlWzFdfSx7eDpMZVsyXSx5OkxlWzNdfSx7eDpMZVs0XSx5OkxlWzVdfSxIKSxFZT1aNyh7eDpMZVswXSx5OkxlWzFdfSx7eDpMZVsyXSx5OkxlWzNdfSx7eDpMZVs0XSx5OkxlWzVdfSxxKSxCZT1aNyh7eDpMZVswXSx5OkxlWzFdfSx7eDpMZVsyXSx5OkxlWzNdfSx7eDpMZVs0XSx5OkxlWzVdfSxZKTtyZXR1cm5bTGVbMF0sTGVbMV0sX2UueCxfZS55LEVlLngsRWUueSxCZS54LEJlLnksTGVbNF0sTGVbNV1dfSx2ZT1bXS5jb25jYXQoY2UoWi50b3BMZWZ0KSxjZShaLnRvcFJpZ2h0KSxjZShaLmJvdHRvbVJpZ2h0KSxjZShaLmJvdHRvbUxlZnQpKTtyZXR1cm4gSzkoTyxOLHZlLG0sayl9LGdlbmVyYXRlQmFycmVsQmV6aWVyUHRzOmZ1bmN0aW9uKG0sayxTLE0pe3ZhciBPPWsvMixOPW0vMiwkPVMtTixIPVMrTixxPU0tTyxZPU0rTyxaPXVJKG0sayksY2U9Wi5oZWlnaHRPZmZzZXQsdmU9Wi53aWR0aE9mZnNldCxtZT1aLmN0cmxQdE9mZnNldFBjdCptLExlPXt0b3BMZWZ0OlskLHErY2UsJCttZSxxLCQrdmUscV0sdG9wUmlnaHQ6W0gtdmUscSxILW1lLHEsSCxxK2NlXSxib3R0b21SaWdodDpbSCxZLWNlLEgtbWUsWSxILXZlLFldLGJvdHRvbUxlZnQ6WyQrdmUsWSwkK21lLFksJCxZLWNlXX07cmV0dXJuIExlLnRvcExlZnQuaXNUb3A9ITAsTGUudG9wUmlnaHQuaXNUb3A9ITAsTGUuYm90dG9tTGVmdC5pc0JvdHRvbT0hMCxMZS5ib3R0b21SaWdodC5pc0JvdHRvbT0hMCxMZX0sY2hlY2tQb2ludDpmdW5jdGlvbihtLGssUyxNLE8sTiwkKXt2YXIgSD11SShNLE8pLHE9SC5oZWlnaHRPZmZzZXQsWT1ILndpZHRoT2Zmc2V0O2lmKFV2KG0sayx0aGlzLnBvaW50cyxOLCQsTSxPLTIqcSxbMCwtMV0sUyl8fFV2KG0sayx0aGlzLnBvaW50cyxOLCQsTS0yKlksTyxbMCwtMV0sUykpcmV0dXJuITA7Zm9yKHZhciBaPXRoaXMuZ2VuZXJhdGVCYXJyZWxCZXppZXJQdHMoTSxPLE4sJCksY2U9ZnVuY3Rpb24oWWUsbXQsSmUpe3ZhciBMdD1KZVs0XSxNdD1KZVsyXSx1dD1KZVswXSxXdD1KZVs1XSxUdD1KZVsxXSxfbj1NYXRoLm1pbihMdCx1dCksaG49TWF0aC5tYXgoTHQsdXQpLFl0PU1hdGgubWluKFd0LFR0KSxEbj1NYXRoLm1heChXdCxUdCk7aWYoX248PVllJiZZZTw9aG4mJll0PD1tdCYmbXQ8PURuKXt2YXIgaXI9X1ooTHQsTXQsdXQpLHZyPXlaKGlyWzBdLGlyWzFdLGlyWzJdLFllKSxObj12ci5maWx0ZXIoZnVuY3Rpb24ocHIpe3JldHVybiAwPD1wciYmcHI8PTF9KTtpZihObi5sZW5ndGg+MClyZXR1cm4gTm5bMF19cmV0dXJuIG51bGx9LHZlPU9iamVjdC5rZXlzKFopLG1lPTA7bWU8dmUubGVuZ3RoO21lKyspe3ZhciBMZT12ZVttZV0sX2U9WltMZV0sRWU9Y2UobSxrLF9lKTtpZihFZSE9bnVsbCl7dmFyIEJlPV9lWzVdLFJlPV9lWzNdLFZlPV9lWzFdLGN0PXQwKEJlLFJlLFZlLEVlKTtpZihfZS5pc1RvcCYmY3Q8PWt8fF9lLmlzQm90dG9tJiZrPD1jdClyZXR1cm4hMH19cmV0dXJuITF9fX0sS3YuZ2VuZXJhdGVCb3R0b21Sb3VuZHJlY3RhbmdsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiXT10aGlzLm5vZGVTaGFwZXMuYm90dG9tcm91bmRyZWN0YW5nbGU9e3JlbmRlcmVyOnRoaXMsbmFtZToiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSIscG9pbnRzOmhkKDQsMCksZHJhdzpmdW5jdGlvbihtLGssUyxNLE8pe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsbSxrLFMsTSxPKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihtLGssUyxNLE8sTiwkKXt2YXIgSD1tLShTLzIrJCkscT1rLShNLzIrJCksWT1xLFo9bSsoUy8yKyQpLGNlPVozKE8sTixtLGssSCxxLFosWSwhMSk7cmV0dXJuIGNlLmxlbmd0aD4wP2NlOmJqKE8sTixtLGssUyxNLCQpfSxjaGVja1BvaW50OmZ1bmN0aW9uKG0sayxTLE0sTyxOLCQpe3ZhciBIPVc5KE0sTykscT0yKkg7aWYoVXYobSxrLHRoaXMucG9pbnRzLE4sJCxNLE8tcSxbMCwtMV0sUyl8fFV2KG0sayx0aGlzLnBvaW50cyxOLCQsTS1xLE8sWzAsLTFdLFMpKXJldHVybiEwO3ZhciBZPU0vMisyKlMsWj1PLzIrMipTLGNlPVtOLVksJC1aLE4tWSwkLE4rWSwkLE4rWSwkLVpdO3JldHVybiEhKFlkKG0sayxjZSl8fGQ1KG0sayxxLHEsTitNLzItSCwkK08vMi1ILFMpfHxkNShtLGsscSxxLE4tTS8yK0gsJCtPLzItSCxTKSl9fX0sS3YucmVnaXN0ZXJOb2RlU2hhcGVzPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5ub2RlU2hhcGVzPXt9LG09dGhpczt0aGlzLmdlbmVyYXRlRWxsaXBzZSgpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJ0cmlhbmdsZSIsaGQoMywwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtdHJpYW5nbGUiLGhkKDMsMCkpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJyZWN0YW5nbGUiLGhkKDQsMCkpLHguc3F1YXJlPXgucmVjdGFuZ2xlLHRoaXMuZ2VuZXJhdGVSb3VuZFJlY3RhbmdsZSgpLHRoaXMuZ2VuZXJhdGVDdXRSZWN0YW5nbGUoKSx0aGlzLmdlbmVyYXRlQmFycmVsKCksdGhpcy5nZW5lcmF0ZUJvdHRvbVJvdW5kcmVjdGFuZ2xlKCk7e3ZhciBrPVswLDEsMSwwLDAsLTEsLTEsMF07dGhpcy5nZW5lcmF0ZVBvbHlnb24oImRpYW1vbmQiLGspLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLWRpYW1vbmQiLGspfXRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJwZW50YWdvbiIsaGQoNSwwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtcGVudGFnb24iLGhkKDUsMCkpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJoZXhhZ29uIixoZCg2LDApKSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC1oZXhhZ29uIixoZCg2LDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigiaGVwdGFnb24iLGhkKDcsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLWhlcHRhZ29uIixoZCg3LDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigib2N0YWdvbiIsaGQoOCwwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtb2N0YWdvbiIsaGQoOCwwKSk7dmFyIFM9bmV3IEFycmF5KDIwKTt7dmFyIE09b0koNSwwKSxPPW9JKDUsTWF0aC5QSS81KSxOPS41KigzLU1hdGguc3FydCg1KSk7Tio9MS41Nztmb3IodmFyICQ9MDskPE8ubGVuZ3RoLzI7JCsrKU9bJCoyXSo9TixPWyQqMisxXSo9Tjtmb3IodmFyICQ9MDskPDIwLzQ7JCsrKVNbJCo0XT1NWyQqMl0sU1skKjQrMV09TVskKjIrMV0sU1skKjQrMl09T1skKjJdLFNbJCo0KzNdPU9bJCoyKzFdfVM9bWooUyksdGhpcy5nZW5lcmF0ZVBvbHlnb24oInN0YXIiLFMpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJ2ZWUiLFstMSwtMSwwLC0uMzMzLDEsLTEsMCwxXSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oInJob21ib2lkIixbLTEsLTEsLjMzMywtMSwxLDEsLS4zMzMsMV0pLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJyaWdodC1yaG9tYm9pZCIsWy0uMzMzLC0xLDEsLTEsLjMzMywxLC0xLDFdKSx0aGlzLm5vZGVTaGFwZXMuY29uY2F2ZWhleGFnb249dGhpcy5nZW5lcmF0ZVBvbHlnb24oImNvbmNhdmUtaGV4YWdvbiIsWy0xLC0uOTUsLS43NSwwLC0xLC45NSwxLC45NSwuNzUsMCwxLC0uOTVdKTt7dmFyIEg9Wy0xLC0xLC4yNSwtMSwxLDAsLjI1LDEsLTEsMV07dGhpcy5nZW5lcmF0ZVBvbHlnb24oInRhZyIsSCksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtdGFnIixIKX14Lm1ha2VQb2x5Z29uPWZ1bmN0aW9uKHEpe3ZhciBZPXEuam9pbigiJCIpLFo9InBvbHlnb24tIitZLGNlO3JldHVybihjZT10aGlzW1pdKT9jZTptLmdlbmVyYXRlUG9seWdvbihaLHEpfX07dmFyIGZrPXt9O2ZrLnRpbWVUb1JlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZHJhd1RvdGFsVGltZS90aGlzLnJlZHJhd0NvdW50fSxmay5yZWRyYXc9ZnVuY3Rpb24oeCl7eD14fHxjaigpO3ZhciBtPXRoaXM7bS5hdmVyYWdlUmVkcmF3VGltZT09PXZvaWQgMCYmKG0uYXZlcmFnZVJlZHJhd1RpbWU9MCksbS5sYXN0UmVkcmF3VGltZT09PXZvaWQgMCYmKG0ubGFzdFJlZHJhd1RpbWU9MCksbS5sYXN0RHJhd1RpbWU9PT12b2lkIDAmJihtLmxhc3REcmF3VGltZT0wKSxtLnJlcXVlc3RlZEZyYW1lPSEwLG0ucmVuZGVyT3B0aW9ucz14fSxmay5iZWZvcmVSZW5kZXI9ZnVuY3Rpb24oeCxtKXtpZighdGhpcy5kZXN0cm95ZWQpe209PW51bGwmJmNoKCJQcmlvcml0eSBpcyBub3Qgb3B0aW9uYWwgZm9yIGJlZm9yZVJlbmRlciIpO3ZhciBrPXRoaXMuYmVmb3JlUmVuZGVyQ2FsbGJhY2tzO2sucHVzaCh7Zm46eCxwcmlvcml0eTptfSksay5zb3J0KGZ1bmN0aW9uKFMsTSl7cmV0dXJuIE0ucHJpb3JpdHktUy5wcmlvcml0eX0pfX07dmFyIHN6PWZ1bmN0aW9uKG0sayxTKXtmb3IodmFyIE09bS5iZWZvcmVSZW5kZXJDYWxsYmFja3MsTz0wO088TS5sZW5ndGg7TysrKU1bT10uZm4oayxTKX07Zmsuc3RhcnRSZW5kZXJMb29wPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcyxtPXguY3k7aWYoIXgucmVuZGVyTG9vcFN0YXJ0ZWQpe3gucmVuZGVyTG9vcFN0YXJ0ZWQ9ITA7dmFyIGs9ZnVuY3Rpb24gUyhNKXtpZigheC5kZXN0cm95ZWQpe2lmKCFtLmJhdGNoaW5nKCkpaWYoeC5yZXF1ZXN0ZWRGcmFtZSYmIXguc2tpcEZyYW1lKXtzeih4LCEwLE0pO3ZhciBPPUJwKCk7eC5yZW5kZXIoeC5yZW5kZXJPcHRpb25zKTt2YXIgTj14Lmxhc3REcmF3VGltZT1CcCgpO3guYXZlcmFnZVJlZHJhd1RpbWU9PT12b2lkIDAmJih4LmF2ZXJhZ2VSZWRyYXdUaW1lPU4tTykseC5yZWRyYXdDb3VudD09PXZvaWQgMCYmKHgucmVkcmF3Q291bnQ9MCkseC5yZWRyYXdDb3VudCsrLHgucmVkcmF3VG90YWxUaW1lPT09dm9pZCAwJiYoeC5yZWRyYXdUb3RhbFRpbWU9MCk7dmFyICQ9Ti1PO3gucmVkcmF3VG90YWxUaW1lKz0kLHgubGFzdFJlZHJhd1RpbWU9JCx4LmF2ZXJhZ2VSZWRyYXdUaW1lPXguYXZlcmFnZVJlZHJhd1RpbWUvMiskLzIseC5yZXF1ZXN0ZWRGcmFtZT0hMX1lbHNlIHN6KHgsITEsTSk7eC5za2lwRnJhbWU9ITEsejAoUyl9fTt6MChrKX19O3ZhciBWcmU9ZnVuY3Rpb24obSl7dGhpcy5pbml0KG0pfSxhej1WcmUsbTg9YXoucHJvdG90eXBlO204LmNsaWVudEZ1bmN0aW9ucz1bInJlZHJhd0hpbnQiLCJyZW5kZXIiLCJyZW5kZXJUbyIsIm1hdGNoQ2FudmFzU2l6ZSIsIm5vZGVTaGFwZUltcGwiLCJhcnJvd1NoYXBlSW1wbCJdLG04LmluaXQ9ZnVuY3Rpb24oeCl7dmFyIG09dGhpczttLm9wdGlvbnM9eCxtLmN5PXguY3k7dmFyIGs9bS5jb250YWluZXI9eC5jeS5jb250YWluZXIoKSxTPW0uY3kud2luZG93KCk7aWYoUyl7dmFyIE09Uy5kb2N1bWVudCxPPU0uaGVhZCxOPSJfX19fX19fX19fY3l0b3NjYXBlX3N0eWxlc2hlZXQiLCQ9Il9fX19fX19fX19jeXRvc2NhcGVfY29udGFpbmVyIixIPU0uZ2V0RWxlbWVudEJ5SWQoTikhPW51bGw7aWYoay5jbGFzc05hbWUuaW5kZXhPZigkKTwwJiYoay5jbGFzc05hbWU9KGsuY2xhc3NOYW1lfHwiIikrIiAiKyQpLCFIKXt2YXIgcT1NLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cS5pZD1OLHEudGV4dENvbnRlbnQ9Ii4iKyQrIiB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgfSIsTy5pbnNlcnRCZWZvcmUocSxPLmNoaWxkcmVuWzBdKX12YXIgWT1TLmdldENvbXB1dGVkU3R5bGUoayksWj1ZLmdldFByb3BlcnR5VmFsdWUoInBvc2l0aW9uIik7Wj09PSJzdGF0aWMiJiZodSgiQSBDeXRvc2NhcGUgY29udGFpbmVyIGhhcyBzdHlsZSBwb3NpdGlvbjpzdGF0aWMgYW5kIHNvIGNhbiBub3QgdXNlIFVJIGV4dGVuc2lvbnMgcHJvcGVybHkiKX1tLnNlbGVjdGlvbj1bdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLDBdLG0uYmV6aWVyUHJvalBjdHM9Wy4wNSwuMjI1LC40LC41LC42LC43NzUsLjk1XSxtLmhvdmVyRGF0YT17ZG93bjpudWxsLGxhc3Q6bnVsbCxkb3duVGltZTpudWxsLHRyaWdnZXJNb2RlOm51bGwsZHJhZ2dpbmc6ITEsaW5pdGlhbFBhbjpbbnVsbCxudWxsXSxjYXB0dXJlOiExfSxtLmRyYWdEYXRhPXtwb3NzaWJsZURyYWdFbGVtZW50czpbXX0sbS50b3VjaERhdGE9e3N0YXJ0Om51bGwsY2FwdHVyZTohMSxzdGFydFBvc2l0aW9uOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sc2luZ2xlVG91Y2hTdGFydFRpbWU6bnVsbCxzaW5nbGVUb3VjaE1vdmVkOiEwLG5vdzpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLGVhcmxpZXI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXX0sbS5yZWRyYXdzPTAsbS5zaG93RnBzPXguc2hvd0ZwcyxtLmRlYnVnPXguZGVidWcsbS5oaWRlRWRnZXNPblZpZXdwb3J0PXguaGlkZUVkZ2VzT25WaWV3cG9ydCxtLnRleHR1cmVPblZpZXdwb3J0PXgudGV4dHVyZU9uVmlld3BvcnQsbS53aGVlbFNlbnNpdGl2aXR5PXgud2hlZWxTZW5zaXRpdml0eSxtLm1vdGlvbkJsdXJFbmFibGVkPXgubW90aW9uQmx1cixtLmZvcmNlZFBpeGVsUmF0aW89WCh4LnBpeGVsUmF0aW8pP3gucGl4ZWxSYXRpbzpudWxsLG0ubW90aW9uQmx1cj14Lm1vdGlvbkJsdXIsbS5tb3Rpb25CbHVyT3BhY2l0eT14Lm1vdGlvbkJsdXJPcGFjaXR5LG0ubW90aW9uQmx1clRyYW5zcGFyZW5jeT0xLW0ubW90aW9uQmx1ck9wYWNpdHksbS5tb3Rpb25CbHVyUHhSYXRpbz0xLG0ubWJQeFJCbHVycnk9MSxtLm1pbk1iTG93UXVhbEZyYW1lcz00LG0uZnVsbFF1YWxpdHlNYj0hMSxtLmNsZWFyZWRGb3JNb3Rpb25CbHVyPVtdLG0uZGVza3RvcFRhcFRocmVzaG9sZD14LmRlc2t0b3BUYXBUaHJlc2hvbGQsbS5kZXNrdG9wVGFwVGhyZXNob2xkMj14LmRlc2t0b3BUYXBUaHJlc2hvbGQqeC5kZXNrdG9wVGFwVGhyZXNob2xkLG0udG91Y2hUYXBUaHJlc2hvbGQ9eC50b3VjaFRhcFRocmVzaG9sZCxtLnRvdWNoVGFwVGhyZXNob2xkMj14LnRvdWNoVGFwVGhyZXNob2xkKngudG91Y2hUYXBUaHJlc2hvbGQsbS50YXBob2xkRHVyYXRpb249NTAwLG0uYmluZGluZ3M9W10sbS5iZWZvcmVSZW5kZXJDYWxsYmFja3M9W10sbS5iZWZvcmVSZW5kZXJQcmlvcml0aWVzPXthbmltYXRpb25zOjQwMCxlbGVDYWxjczozMDAsZWxlVHhyRGVxOjIwMCxseXJUeHJEZXE6MTUwLGx5clR4clNraXA6MTAwfSxtLnJlZ2lzdGVyTm9kZVNoYXBlcygpLG0ucmVnaXN0ZXJBcnJvd1NoYXBlcygpLG0ucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycygpfSxtOC5ub3RpZnk9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzLFM9ay5jeTtpZighdGhpcy5kZXN0cm95ZWQpe2lmKHg9PT0iaW5pdCIpe2subG9hZCgpO3JldHVybn1pZih4PT09ImRlc3Ryb3kiKXtrLmRlc3Ryb3koKTtyZXR1cm59KHg9PT0iYWRkInx8eD09PSJyZW1vdmUifHx4PT09Im1vdmUiJiZTLmhhc0NvbXBvdW5kTm9kZXMoKXx8eD09PSJsb2FkInx8eD09PSJ6b3JkZXIifHx4PT09Im1vdW50IikmJmsuaW52YWxpZGF0ZUNhY2hlZFpTb3J0ZWRFbGVzKCkseD09PSJ2aWV3cG9ydCImJmsucmVkcmF3SGludCgic2VsZWN0IiwhMCksKHg9PT0ibG9hZCJ8fHg9PT0icmVzaXplInx8eD09PSJtb3VudCIpJiYoay5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGUoKSxrLm1hdGNoQ2FudmFzU2l6ZShrLmNvbnRhaW5lcikpLGsucmVkcmF3SGludCgiZWxlcyIsITApLGsucmVkcmF3SGludCgiZHJhZyIsITApLHRoaXMuc3RhcnRSZW5kZXJMb29wKCksdGhpcy5yZWRyYXcoKX19LG04LmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgeD10aGlzO3guZGVzdHJveWVkPSEwLHguY3kuc3RvcEFuaW1hdGlvbkxvb3AoKTtmb3IodmFyIG09MDttPHguYmluZGluZ3MubGVuZ3RoO20rKyl7dmFyIGs9eC5iaW5kaW5nc1ttXSxTPWssTT1TLnRhcmdldDsoTS5vZmZ8fE0ucmVtb3ZlRXZlbnRMaXN0ZW5lcikuYXBwbHkoTSxTLmFyZ3MpfWlmKHguYmluZGluZ3M9W10seC5iZWZvcmVSZW5kZXJDYWxsYmFja3M9W10seC5vblVwZGF0ZUVsZUNhbGNzRm5zPVtdLHgucmVtb3ZlT2JzZXJ2ZXImJngucmVtb3ZlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHguc3R5bGVPYnNlcnZlciYmeC5zdHlsZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx4LnJlc2l6ZU9ic2VydmVyJiZ4LnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx4LmxhYmVsQ2FsY0Rpdil0cnl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh4LmxhYmVsQ2FsY0Rpdil9Y2F0Y2h7fX0sbTguaXNIZWFkbGVzcz1mdW5jdGlvbigpe3JldHVybiExfSxbQkkscnosaXosYjgsS3YsZmtdLmZvckVhY2goZnVuY3Rpb24oeCl7eXQobTgseCl9KTt2YXIgUkk9MWUzLzYwLG96PXtzZXR1cERlcXVldWVpbmc6ZnVuY3Rpb24obSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFM9dGhpcyxNPXRoaXMucmVuZGVyZXI7aWYoIVMuZGVxdWV1ZWluZ1NldHVwKXtTLmRlcXVldWVpbmdTZXR1cD0hMDt2YXIgTz1OdShmdW5jdGlvbigpe00ucmVkcmF3SGludCgiZWxlcyIsITApLE0ucmVkcmF3SGludCgiZHJhZyIsITApLE0ucmVkcmF3KCl9LG0uZGVxUmVkcmF3VGhyZXNob2xkKSxOPWZ1bmN0aW9uKHEsWSl7dmFyIFo9QnAoKSxjZT1NLmF2ZXJhZ2VSZWRyYXdUaW1lLHZlPU0ubGFzdFJlZHJhd1RpbWUsbWU9W10sTGU9TS5jeS5leHRlbnQoKSxfZT1NLmdldFBpeGVsUmF0aW8oKTtmb3IocXx8TS5mbHVzaFJlbmRlcmVkU3R5bGVRdWV1ZSgpOzspe3ZhciBFZT1CcCgpLEJlPUVlLVosUmU9RWUtWTtpZih2ZTxSSSl7dmFyIFZlPVJJLShxP2NlOjApO2lmKFJlPj1tLmRlcUZhc3RDb3N0KlZlKWJyZWFrfWVsc2UgaWYocSl7aWYoQmU+PW0uZGVxQ29zdCp2ZXx8QmU+PW0uZGVxQXZnQ29zdCpjZSlicmVha31lbHNlIGlmKFJlPj1tLmRlcU5vRHJhd0Nvc3QqUkkpYnJlYWs7dmFyIGN0PW0uZGVxKFMsX2UsTGUpO2lmKGN0Lmxlbmd0aD4wKWZvcih2YXIgc3Q9MDtzdDxjdC5sZW5ndGg7c3QrKyltZS5wdXNoKGN0W3N0XSk7ZWxzZSBicmVha31tZS5sZW5ndGg+MCYmKG0ub25EZXFkKFMsbWUpLCFxJiZtLnNob3VsZFJlZHJhdyhTLG1lLF9lLExlKSYmTygpKX0sJD1tLnByaW9yaXR5fHxuSTtNLmJlZm9yZVJlbmRlcihOLCQoUykpfX19fSxVcmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB4KG0pe3ZhciBrPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpYMztkKHRoaXMseCksdGhpcy5pZHNCeUtleT1uZXcgd20sdGhpcy5rZXlGb3JJZD1uZXcgd20sdGhpcy5jYWNoZXNCeUx2bD1uZXcgd20sdGhpcy5sdmxzPVtdLHRoaXMuZ2V0S2V5PW0sdGhpcy5kb2VzRWxlSW52YWxpZGF0ZUtleT1rfXJldHVybiB2KHgsW3trZXk6ImdldElkc0ZvciIsdmFsdWU6ZnVuY3Rpb24oayl7az09bnVsbCYmY2goIkNhbiBub3QgZ2V0IGlkIGxpc3QgZm9yIG51bGwga2V5Iik7dmFyIFM9dGhpcy5pZHNCeUtleSxNPXRoaXMuaWRzQnlLZXkuZ2V0KGspO3JldHVybiBNfHwoTT1uZXcgUTcsUy5zZXQoayxNKSksTX19LHtrZXk6ImFkZElkRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbihrLFMpe2shPW51bGwmJnRoaXMuZ2V0SWRzRm9yKGspLmFkZChTKX19LHtrZXk6ImRlbGV0ZUlkRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbihrLFMpe2shPW51bGwmJnRoaXMuZ2V0SWRzRm9yKGspLmRlbGV0ZShTKX19LHtrZXk6ImdldE51bWJlck9mSWRzRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbihrKXtyZXR1cm4gaz09bnVsbD8wOnRoaXMuZ2V0SWRzRm9yKGspLnNpemV9fSx7a2V5OiJ1cGRhdGVLZXlNYXBwaW5nRm9yIix2YWx1ZTpmdW5jdGlvbihrKXt2YXIgUz1rLmlkKCksTT10aGlzLmtleUZvcklkLmdldChTKSxPPXRoaXMuZ2V0S2V5KGspO3RoaXMuZGVsZXRlSWRGb3JLZXkoTSxTKSx0aGlzLmFkZElkRm9yS2V5KE8sUyksdGhpcy5rZXlGb3JJZC5zZXQoUyxPKX19LHtrZXk6ImRlbGV0ZUtleU1hcHBpbmdGb3IiLHZhbHVlOmZ1bmN0aW9uKGspe3ZhciBTPWsuaWQoKSxNPXRoaXMua2V5Rm9ySWQuZ2V0KFMpO3RoaXMuZGVsZXRlSWRGb3JLZXkoTSxTKSx0aGlzLmtleUZvcklkLmRlbGV0ZShTKX19LHtrZXk6ImtleUhhc0NoYW5nZWRGb3IiLHZhbHVlOmZ1bmN0aW9uKGspe3ZhciBTPWsuaWQoKSxNPXRoaXMua2V5Rm9ySWQuZ2V0KFMpLE89dGhpcy5nZXRLZXkoayk7cmV0dXJuIE0hPT1PfX0se2tleToiaXNJbnZhbGlkIix2YWx1ZTpmdW5jdGlvbihrKXtyZXR1cm4gdGhpcy5rZXlIYXNDaGFuZ2VkRm9yKGspfHx0aGlzLmRvZXNFbGVJbnZhbGlkYXRlS2V5KGspfX0se2tleToiZ2V0Q2FjaGVzQXQiLHZhbHVlOmZ1bmN0aW9uKGspe3ZhciBTPXRoaXMuY2FjaGVzQnlMdmwsTT10aGlzLmx2bHMsTz1TLmdldChrKTtyZXR1cm4gT3x8KE89bmV3IHdtLFMuc2V0KGssTyksTS5wdXNoKGspKSxPfX0se2tleToiZ2V0Q2FjaGUiLHZhbHVlOmZ1bmN0aW9uKGssUyl7cmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQoUykuZ2V0KGspfX0se2tleToiZ2V0Iix2YWx1ZTpmdW5jdGlvbihrLFMpe3ZhciBNPXRoaXMuZ2V0S2V5KGspLE89dGhpcy5nZXRDYWNoZShNLFMpO3JldHVybiBPIT1udWxsJiZ0aGlzLnVwZGF0ZUtleU1hcHBpbmdGb3IoayksT319LHtrZXk6ImdldEZvckNhY2hlZEtleSIsdmFsdWU6ZnVuY3Rpb24oayxTKXt2YXIgTT10aGlzLmtleUZvcklkLmdldChrLmlkKCkpLE89dGhpcy5nZXRDYWNoZShNLFMpO3JldHVybiBPfX0se2tleToiaGFzQ2FjaGUiLHZhbHVlOmZ1bmN0aW9uKGssUyl7cmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQoUykuaGFzKGspfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbihrLFMpe3ZhciBNPXRoaXMuZ2V0S2V5KGspO3JldHVybiB0aGlzLmhhc0NhY2hlKE0sUyl9fSx7a2V5OiJzZXRDYWNoZSIsdmFsdWU6ZnVuY3Rpb24oayxTLE0pe00ua2V5PWssdGhpcy5nZXRDYWNoZXNBdChTKS5zZXQoayxNKX19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oayxTLE0pe3ZhciBPPXRoaXMuZ2V0S2V5KGspO3RoaXMuc2V0Q2FjaGUoTyxTLE0pLHRoaXMudXBkYXRlS2V5TWFwcGluZ0ZvcihrKX19LHtrZXk6ImRlbGV0ZUNhY2hlIix2YWx1ZTpmdW5jdGlvbihrLFMpe3RoaXMuZ2V0Q2FjaGVzQXQoUykuZGVsZXRlKGspfX0se2tleToiZGVsZXRlIix2YWx1ZTpmdW5jdGlvbihrLFMpe3ZhciBNPXRoaXMuZ2V0S2V5KGspO3RoaXMuZGVsZXRlQ2FjaGUoTSxTKX19LHtrZXk6ImludmFsaWRhdGVLZXkiLHZhbHVlOmZ1bmN0aW9uKGspe3ZhciBTPXRoaXM7dGhpcy5sdmxzLmZvckVhY2goZnVuY3Rpb24oTSl7cmV0dXJuIFMuZGVsZXRlQ2FjaGUoayxNKX0pfX0se2tleToiaW52YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oayl7dmFyIFM9ay5pZCgpLE09dGhpcy5rZXlGb3JJZC5nZXQoUyk7dGhpcy5kZWxldGVLZXlNYXBwaW5nRm9yKGspO3ZhciBPPXRoaXMuZG9lc0VsZUludmFsaWRhdGVLZXkoayk7cmV0dXJuIE8mJnRoaXMuaW52YWxpZGF0ZUtleShNKSxPfHx0aGlzLmdldE51bWJlck9mSWRzRm9yS2V5KE0pPT09MH19XSkseH0oKSxjej0yNSxZUz01MCxYUz0tNCxqST0zLEdyZT03Ljk5LEtyZT04LFdyZT0xMDI0LFlyZT0xMDI0LFhyZT0xMDI0LFFyZT0uMixKcmU9LjgsWnJlPTEwLGVpZT0uMTUsdGllPS4xLG5pZT0uOSxyaWU9LjksaWllPTEwMCxzaWU9MSx2OD17ZGVxdWV1ZToiZGVxdWV1ZSIsZG93bnNjYWxlOiJkb3duc2NhbGUiLGhpZ2hRdWFsaXR5OiJoaWdoUXVhbGl0eSJ9LGFpZT1xMCh7Z2V0S2V5Om51bGwsZG9lc0VsZUludmFsaWRhdGVLZXk6WDMsZHJhd0VsZW1lbnQ6bnVsbCxnZXRCb3VuZGluZ0JveDpudWxsLGdldFJvdGF0aW9uUG9pbnQ6bnVsbCxnZXRSb3RhdGlvbk9mZnNldDpudWxsLGlzVmlzaWJsZTpsNSxhbGxvd0VkZ2VUeHJDYWNoaW5nOiEwLGFsbG93UGFyZW50VHhyQ2FjaGluZzohMH0pLGRrPWZ1bmN0aW9uKG0sayl7dmFyIFM9dGhpcztTLnJlbmRlcmVyPW0sUy5vbkRlcXVldWVzPVtdO3ZhciBNPWFpZShrKTt5dChTLE0pLFMubG9va3VwPW5ldyBVcmUoTS5nZXRLZXksTS5kb2VzRWxlSW52YWxpZGF0ZUtleSksUy5zZXR1cERlcXVldWVpbmcoKX0sQ2Y9ZGsucHJvdG90eXBlO0NmLnJlYXNvbnM9djgsQ2YuZ2V0VGV4dHVyZVF1ZXVlPWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXM7cmV0dXJuIG0uZWxlSW1nQ2FjaGVzPW0uZWxlSW1nQ2FjaGVzfHx7fSxtLmVsZUltZ0NhY2hlc1t4XT1tLmVsZUltZ0NhY2hlc1t4XXx8W119LENmLmdldFJldGlyZWRUZXh0dXJlUXVldWU9ZnVuY3Rpb24oeCl7dmFyIG09dGhpcyxrPW0uZWxlSW1nQ2FjaGVzLnJldGlyZWQ9bS5lbGVJbWdDYWNoZXMucmV0aXJlZHx8e30sUz1rW3hdPWtbeF18fFtdO3JldHVybiBTfSxDZi5nZXRFbGVtZW50UXVldWU9ZnVuY3Rpb24oKXt2YXIgeD10aGlzLG09eC5lbGVDYWNoZVF1ZXVlPXguZWxlQ2FjaGVRdWV1ZXx8bmV3IFY5KGZ1bmN0aW9uKGssUyl7cmV0dXJuIFMucmVxcy1rLnJlcXN9KTtyZXR1cm4gbX0sQ2YuZ2V0RWxlbWVudEtleVRvUXVldWU9ZnVuY3Rpb24oKXt2YXIgeD10aGlzLG09eC5lbGVLZXlUb0NhY2hlUXVldWU9eC5lbGVLZXlUb0NhY2hlUXVldWV8fHt9O3JldHVybiBtfSxDZi5nZXRFbGVtZW50PWZ1bmN0aW9uKHgsbSxrLFMsTSl7dmFyIE89dGhpcyxOPXRoaXMucmVuZGVyZXIsJD1OLmN5Lnpvb20oKSxIPXRoaXMubG9va3VwO2lmKCFtfHxtLnc9PT0wfHxtLmg9PT0wfHxpc05hTihtLncpfHxpc05hTihtLmgpfHwheC52aXNpYmxlKCl8fHgucmVtb3ZlZCgpfHwhTy5hbGxvd0VkZ2VUeHJDYWNoaW5nJiZ4LmlzRWRnZSgpfHwhTy5hbGxvd1BhcmVudFR4ckNhY2hpbmcmJnguaXNQYXJlbnQoKSlyZXR1cm4gbnVsbDtpZihTPT1udWxsJiYoUz1NYXRoLmNlaWwoaUkoJCprKSkpLFM8WFMpUz1YUztlbHNlIGlmKCQ+PUdyZXx8Uz5qSSlyZXR1cm4gbnVsbDt2YXIgcT1NYXRoLnBvdygyLFMpLFk9bS5oKnEsWj1tLncqcSxjZT1OLmVsZVRleHRCaWdnZXJUaGFuTWluKHgscSk7aWYoIXRoaXMuaXNWaXNpYmxlKHgsY2UpKXJldHVybiBudWxsO3ZhciB2ZT1ILmdldCh4LFMpO2lmKHZlJiZ2ZS5pbnZhbGlkYXRlZCYmKHZlLmludmFsaWRhdGVkPSExLHZlLnRleHR1cmUuaW52YWxpZGF0ZWRXaWR0aC09dmUud2lkdGgpLHZlKXJldHVybiB2ZTt2YXIgbWU7aWYoWTw9Y3o/bWU9Y3o6WTw9WVM/bWU9WVM6bWU9TWF0aC5jZWlsKFkvWVMpKllTLFk+WHJlfHxaPllyZSlyZXR1cm4gbnVsbDt2YXIgTGU9Ty5nZXRUZXh0dXJlUXVldWUobWUpLF9lPUxlW0xlLmxlbmd0aC0yXSxFZT1mdW5jdGlvbigpe3JldHVybiBPLnJlY3ljbGVUZXh0dXJlKG1lLFopfHxPLmFkZFRleHR1cmUobWUsWil9O19lfHwoX2U9TGVbTGUubGVuZ3RoLTFdKSxfZXx8KF9lPUVlKCkpLF9lLndpZHRoLV9lLnVzZWRXaWR0aDxaJiYoX2U9RWUoKSk7Zm9yKHZhciBCZT1mdW5jdGlvbihobil7cmV0dXJuIGhuJiZobi5zY2FsZWRMYWJlbFNob3duPT09Y2V9LFJlPU0mJk09PT12OC5kZXF1ZXVlLFZlPU0mJk09PT12OC5oaWdoUXVhbGl0eSxjdD1NJiZNPT09djguZG93bnNjYWxlLHN0LFllPVMrMTtZZTw9akk7WWUrKyl7dmFyIG10PUguZ2V0KHgsWWUpO2lmKG10KXtzdD1tdDticmVha319dmFyIEplPXN0JiZzdC5sZXZlbD09PVMrMT9zdDpudWxsLEx0PWZ1bmN0aW9uKCl7X2UuY29udGV4dC5kcmF3SW1hZ2UoSmUudGV4dHVyZS5jYW52YXMsSmUueCwwLEplLndpZHRoLEplLmhlaWdodCxfZS51c2VkV2lkdGgsMCxaLFkpfTtpZihfZS5jb250ZXh0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksX2UuY29udGV4dC5jbGVhclJlY3QoX2UudXNlZFdpZHRoLDAsWixtZSksQmUoSmUpKUx0KCk7ZWxzZSBpZihCZShzdCkpaWYoVmUpe2Zvcih2YXIgTXQ9c3QubGV2ZWw7TXQ+UztNdC0tKUplPU8uZ2V0RWxlbWVudCh4LG0sayxNdCx2OC5kb3duc2NhbGUpO0x0KCl9ZWxzZSByZXR1cm4gTy5xdWV1ZUVsZW1lbnQoeCxzdC5sZXZlbC0xKSxzdDtlbHNle3ZhciB1dDtpZighUmUmJiFWZSYmIWN0KWZvcih2YXIgV3Q9Uy0xO1d0Pj1YUztXdC0tKXt2YXIgVHQ9SC5nZXQoeCxXdCk7aWYoVHQpe3V0PVR0O2JyZWFrfX1pZihCZSh1dCkpcmV0dXJuIE8ucXVldWVFbGVtZW50KHgsUyksdXQ7X2UuY29udGV4dC50cmFuc2xhdGUoX2UudXNlZFdpZHRoLDApLF9lLmNvbnRleHQuc2NhbGUocSxxKSx0aGlzLmRyYXdFbGVtZW50KF9lLmNvbnRleHQseCxtLGNlLCExKSxfZS5jb250ZXh0LnNjYWxlKDEvcSwxL3EpLF9lLmNvbnRleHQudHJhbnNsYXRlKC1fZS51c2VkV2lkdGgsMCl9cmV0dXJuIHZlPXt4Ol9lLnVzZWRXaWR0aCx0ZXh0dXJlOl9lLGxldmVsOlMsc2NhbGU6cSx3aWR0aDpaLGhlaWdodDpZLHNjYWxlZExhYmVsU2hvd246Y2V9LF9lLnVzZWRXaWR0aCs9TWF0aC5jZWlsKForS3JlKSxfZS5lbGVDYWNoZXMucHVzaCh2ZSksSC5zZXQoeCxTLHZlKSxPLmNoZWNrVGV4dHVyZUZ1bGxuZXNzKF9lKSx2ZX0sQ2YuaW52YWxpZGF0ZUVsZW1lbnRzPWZ1bmN0aW9uKHgpe2Zvcih2YXIgbT0wO208eC5sZW5ndGg7bSsrKXRoaXMuaW52YWxpZGF0ZUVsZW1lbnQoeFttXSl9LENmLmludmFsaWRhdGVFbGVtZW50PWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXMsaz1tLmxvb2t1cCxTPVtdLE09ay5pc0ludmFsaWQoeCk7aWYoTSl7Zm9yKHZhciBPPVhTO088PWpJO08rKyl7dmFyIE49ay5nZXRGb3JDYWNoZWRLZXkoeCxPKTtOJiZTLnB1c2goTil9dmFyICQ9ay5pbnZhbGlkYXRlKHgpO2lmKCQpZm9yKHZhciBIPTA7SDxTLmxlbmd0aDtIKyspe3ZhciBxPVNbSF0sWT1xLnRleHR1cmU7WS5pbnZhbGlkYXRlZFdpZHRoKz1xLndpZHRoLHEuaW52YWxpZGF0ZWQ9ITAsbS5jaGVja1RleHR1cmVVdGlsaXR5KFkpfW0ucmVtb3ZlRnJvbVF1ZXVlKHgpfX0sQ2YuY2hlY2tUZXh0dXJlVXRpbGl0eT1mdW5jdGlvbih4KXt4LmludmFsaWRhdGVkV2lkdGg+PVFyZSp4LndpZHRoJiZ0aGlzLnJldGlyZVRleHR1cmUoeCl9LENmLmNoZWNrVGV4dHVyZUZ1bGxuZXNzPWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXMsaz1tLmdldFRleHR1cmVRdWV1ZSh4LmhlaWdodCk7eC51c2VkV2lkdGgveC53aWR0aD5KcmUmJnguZnVsbG5lc3NDaGVja3M+PVpyZT9RMyhrLHgpOnguZnVsbG5lc3NDaGVja3MrK30sQ2YucmV0aXJlVGV4dHVyZT1mdW5jdGlvbih4KXt2YXIgbT10aGlzLGs9eC5oZWlnaHQsUz1tLmdldFRleHR1cmVRdWV1ZShrKSxNPXRoaXMubG9va3VwO1EzKFMseCkseC5yZXRpcmVkPSEwO2Zvcih2YXIgTz14LmVsZUNhY2hlcyxOPTA7TjxPLmxlbmd0aDtOKyspe3ZhciAkPU9bTl07TS5kZWxldGVDYWNoZSgkLmtleSwkLmxldmVsKX1jUyhPKTt2YXIgSD1tLmdldFJldGlyZWRUZXh0dXJlUXVldWUoayk7SC5wdXNoKHgpfSxDZi5hZGRUZXh0dXJlPWZ1bmN0aW9uKHgsbSl7dmFyIGs9dGhpcyxTPWsuZ2V0VGV4dHVyZVF1ZXVlKHgpLE09e307cmV0dXJuIFMucHVzaChNKSxNLmVsZUNhY2hlcz1bXSxNLmhlaWdodD14LE0ud2lkdGg9TWF0aC5tYXgoV3JlLG0pLE0udXNlZFdpZHRoPTAsTS5pbnZhbGlkYXRlZFdpZHRoPTAsTS5mdWxsbmVzc0NoZWNrcz0wLE0uY2FudmFzPWsucmVuZGVyZXIubWFrZU9mZnNjcmVlbkNhbnZhcyhNLndpZHRoLE0uaGVpZ2h0KSxNLmNvbnRleHQ9TS5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKSxNfSxDZi5yZWN5Y2xlVGV4dHVyZT1mdW5jdGlvbih4LG0pe2Zvcih2YXIgaz10aGlzLFM9ay5nZXRUZXh0dXJlUXVldWUoeCksTT1rLmdldFJldGlyZWRUZXh0dXJlUXVldWUoeCksTz0wO088TS5sZW5ndGg7TysrKXt2YXIgTj1NW09dO2lmKE4ud2lkdGg+PW0pcmV0dXJuIE4ucmV0aXJlZD0hMSxOLnVzZWRXaWR0aD0wLE4uaW52YWxpZGF0ZWRXaWR0aD0wLE4uZnVsbG5lc3NDaGVja3M9MCxjUyhOLmVsZUNhY2hlcyksTi5jb250ZXh0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksTi5jb250ZXh0LmNsZWFyUmVjdCgwLDAsTi53aWR0aCxOLmhlaWdodCksUTMoTSxOKSxTLnB1c2goTiksTn19LENmLnF1ZXVlRWxlbWVudD1mdW5jdGlvbih4LG0pe3ZhciBrPXRoaXMsUz1rLmdldEVsZW1lbnRRdWV1ZSgpLE09ay5nZXRFbGVtZW50S2V5VG9RdWV1ZSgpLE89dGhpcy5nZXRLZXkoeCksTj1NW09dO2lmKE4pTi5sZXZlbD1NYXRoLm1heChOLmxldmVsLG0pLE4uZWxlcy5tZXJnZSh4KSxOLnJlcXMrKyxTLnVwZGF0ZUl0ZW0oTik7ZWxzZXt2YXIgJD17ZWxlczp4LnNwYXduKCkubWVyZ2UoeCksbGV2ZWw6bSxyZXFzOjEsa2V5Ok99O1MucHVzaCgkKSxNW09dPSR9fSxDZi5kZXF1ZXVlPWZ1bmN0aW9uKHgpe2Zvcih2YXIgbT10aGlzLGs9bS5nZXRFbGVtZW50UXVldWUoKSxTPW0uZ2V0RWxlbWVudEtleVRvUXVldWUoKSxNPVtdLE89bS5sb29rdXAsTj0wO048c2llJiZrLnNpemUoKT4wO04rKyl7dmFyICQ9ay5wb3AoKSxIPSQua2V5LHE9JC5lbGVzWzBdLFk9Ty5oYXNDYWNoZShxLCQubGV2ZWwpO2lmKFNbSF09bnVsbCxZKWNvbnRpbnVlO00ucHVzaCgkKTt2YXIgWj1tLmdldEJvdW5kaW5nQm94KHEpO20uZ2V0RWxlbWVudChxLFoseCwkLmxldmVsLHY4LmRlcXVldWUpfXJldHVybiBNfSxDZi5yZW1vdmVGcm9tUXVldWU9ZnVuY3Rpb24oeCl7dmFyIG09dGhpcyxrPW0uZ2V0RWxlbWVudFF1ZXVlKCksUz1tLmdldEVsZW1lbnRLZXlUb1F1ZXVlKCksTT10aGlzLmdldEtleSh4KSxPPVNbTV07TyE9bnVsbCYmKE8uZWxlcy5sZW5ndGg9PT0xPyhPLnJlcXM9WDcsay51cGRhdGVJdGVtKE8pLGsucG9wKCksU1tNXT1udWxsKTpPLmVsZXMudW5tZXJnZSh4KSl9LENmLm9uRGVxdWV1ZT1mdW5jdGlvbih4KXt0aGlzLm9uRGVxdWV1ZXMucHVzaCh4KX0sQ2Yub2ZmRGVxdWV1ZT1mdW5jdGlvbih4KXtRMyh0aGlzLm9uRGVxdWV1ZXMseCl9LENmLnNldHVwRGVxdWV1ZWluZz1vei5zZXR1cERlcXVldWVpbmcoe2RlcVJlZHJhd1RocmVzaG9sZDppaWUsZGVxQ29zdDplaWUsZGVxQXZnQ29zdDp0aWUsZGVxTm9EcmF3Q29zdDpuaWUsZGVxRmFzdENvc3Q6cmllLGRlcTpmdW5jdGlvbihtLGssUyl7cmV0dXJuIG0uZGVxdWV1ZShrLFMpfSxvbkRlcWQ6ZnVuY3Rpb24obSxrKXtmb3IodmFyIFM9MDtTPG0ub25EZXF1ZXVlcy5sZW5ndGg7UysrKXt2YXIgTT1tLm9uRGVxdWV1ZXNbU107TShrKX19LHNob3VsZFJlZHJhdzpmdW5jdGlvbihtLGssUyxNKXtmb3IodmFyIE89MDtPPGsubGVuZ3RoO08rKylmb3IodmFyIE49a1tPXS5lbGVzLCQ9MDskPE4ubGVuZ3RoOyQrKyl7dmFyIEg9TlskXS5ib3VuZGluZ0JveCgpO2lmKHNJKEgsTSkpcmV0dXJuITB9cmV0dXJuITF9LHByaW9yaXR5OmZ1bmN0aW9uKG0pe3JldHVybiBtLnJlbmRlcmVyLmJlZm9yZVJlbmRlclByaW9yaXRpZXMuZWxlVHhyRGVxfX0pO3ZhciBvaWU9MSxnaz0tNCxRUz0yLGNpZT0zLjk5LHVpZT01MCxsaWU9NTAsU2Y9LjE1LGhpZT0uMSxmaWU9LjksdXo9LjksZGllPTEsbHo9MjUwLGh6PTRlMyo0ZTMsZno9ITAsZHo9ZnVuY3Rpb24obSl7dmFyIGs9dGhpcyxTPWsucmVuZGVyZXI9bSxNPVMuY3k7ay5sYXllcnNCeUxldmVsPXt9LGsuZmlyc3RHZXQ9ITAsay5sYXN0SW52YWxpZGF0aW9uVGltZT1CcCgpLTIqbHosay5za2lwcGluZz0hMSxrLmVsZVR4ckRlcXM9TS5jb2xsZWN0aW9uKCksay5zY2hlZHVsZUVsZW1lbnRSZWZpbmVtZW50PU51KGZ1bmN0aW9uKCl7ay5yZWZpbmVFbGVtZW50VGV4dHVyZXMoay5lbGVUeHJEZXFzKSxrLmVsZVR4ckRlcXMudW5tZXJnZShrLmVsZVR4ckRlcXMpfSxsaWUpLFMuYmVmb3JlUmVuZGVyKGZ1bmN0aW9uKE4sJCl7JC1rLmxhc3RJbnZhbGlkYXRpb25UaW1lPD1sej9rLnNraXBwaW5nPSEwOmsuc2tpcHBpbmc9ITF9LFMuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJTa2lwKTt2YXIgTz1mdW5jdGlvbigkLEgpe3JldHVybiBILnJlcXMtJC5yZXFzfTtrLmxheWVyc1F1ZXVlPW5ldyBWOShPKSxrLnNldHVwRGVxdWV1ZWluZygpfSxuMD1kei5wcm90b3R5cGUsZ3o9MCxKUz1NYXRoLnBvdygyLDUzKS0xO24wLm1ha2VMYXllcj1mdW5jdGlvbih4LG0pe3ZhciBrPU1hdGgucG93KDIsbSksUz1NYXRoLmNlaWwoeC53KmspLE09TWF0aC5jZWlsKHguaCprKSxPPXRoaXMucmVuZGVyZXIubWFrZU9mZnNjcmVlbkNhbnZhcyhTLE0pLE49e2lkOmd6PSsrZ3olSlMsYmI6eCxsZXZlbDptLHdpZHRoOlMsaGVpZ2h0Ok0sY2FudmFzOk8sY29udGV4dDpPLmdldENvbnRleHQoIjJkIiksZWxlczpbXSxlbGVzUXVldWU6W10scmVxczowfSwkPU4uY29udGV4dCxIPS1OLmJiLngxLHE9LU4uYmIueTE7cmV0dXJuICQuc2NhbGUoayxrKSwkLnRyYW5zbGF0ZShILHEpLE59LG4wLmdldExheWVycz1mdW5jdGlvbih4LG0sayl7dmFyIFM9dGhpcyxNPVMucmVuZGVyZXIsTz1NLmN5LE49Ty56b29tKCksJD1TLmZpcnN0R2V0O2lmKFMuZmlyc3RHZXQ9ITEsaz09bnVsbCl7aWYoaz1NYXRoLmNlaWwoaUkoTiptKSksazxnaylrPWdrO2Vsc2UgaWYoTj49Y2llfHxrPlFTKXJldHVybiBudWxsfVMudmFsaWRhdGVMYXllcnNFbGVzT3JkZXJpbmcoayx4KTt2YXIgSD1TLmxheWVyc0J5TGV2ZWwscT1NYXRoLnBvdygyLGspLFk9SFtrXT1IW2tdfHxbXSxaLGNlPVMubGV2ZWxJc0NvbXBsZXRlKGsseCksdmUsbWU9ZnVuY3Rpb24oKXt2YXIgTHQ9ZnVuY3Rpb24oX24pe2lmKFMudmFsaWRhdGVMYXllcnNFbGVzT3JkZXJpbmcoX24seCksUy5sZXZlbElzQ29tcGxldGUoX24seCkpcmV0dXJuIHZlPUhbX25dLCEwfSxNdD1mdW5jdGlvbihfbil7aWYoIXZlKWZvcih2YXIgaG49aytfbjtnazw9aG4mJmhuPD1RUyYmIUx0KGhuKTtobis9X24pO307TXQoMSksTXQoLTEpO2Zvcih2YXIgdXQ9WS5sZW5ndGgtMTt1dD49MDt1dC0tKXt2YXIgV3Q9WVt1dF07V3QuaW52YWxpZCYmUTMoWSxXdCl9fTtpZighY2UpbWUoKTtlbHNlIHJldHVybiBZO3ZhciBMZT1mdW5jdGlvbigpe2lmKCFaKXtaPVdkKCk7Zm9yKHZhciBMdD0wO0x0PHgubGVuZ3RoO0x0KyspZGooWix4W0x0XS5ib3VuZGluZ0JveCgpKX1yZXR1cm4gWn0sX2U9ZnVuY3Rpb24oTHQpe0x0PUx0fHx7fTt2YXIgTXQ9THQuYWZ0ZXI7TGUoKTt2YXIgdXQ9Wi53KnEqKFouaCpxKTtpZih1dD5oeilyZXR1cm4gbnVsbDt2YXIgV3Q9Uy5tYWtlTGF5ZXIoWixrKTtpZihNdCE9bnVsbCl7dmFyIFR0PVkuaW5kZXhPZihNdCkrMTtZLnNwbGljZShUdCwwLFd0KX1lbHNlKEx0Lmluc2VydD09PXZvaWQgMHx8THQuaW5zZXJ0KSYmWS51bnNoaWZ0KFd0KTtyZXR1cm4gV3R9O2lmKFMuc2tpcHBpbmcmJiEkKXJldHVybiBudWxsO2Zvcih2YXIgRWU9bnVsbCxCZT14Lmxlbmd0aC9vaWUsUmU9ISQsVmU9MDtWZTx4Lmxlbmd0aDtWZSsrKXt2YXIgY3Q9eFtWZV0sc3Q9Y3QuX3ByaXZhdGUucnNjcmF0Y2gsWWU9c3QuaW1nTGF5ZXJDYWNoZXM9c3QuaW1nTGF5ZXJDYWNoZXN8fHt9LG10PVllW2tdO2lmKG10KXtFZT1tdDtjb250aW51ZX1pZigoIUVlfHxFZS5lbGVzLmxlbmd0aD49QmV8fCFwaihFZS5iYixjdC5ib3VuZGluZ0JveCgpKSkmJihFZT1fZSh7aW5zZXJ0OiEwLGFmdGVyOkVlfSksIUVlKSlyZXR1cm4gbnVsbDt2ZXx8UmU/Uy5xdWV1ZUxheWVyKEVlLGN0KTpTLmRyYXdFbGVJbkxheWVyKEVlLGN0LGssbSksRWUuZWxlcy5wdXNoKGN0KSxZZVtrXT1FZX1yZXR1cm4gdmV8fChSZT9udWxsOlkpfSxuMC5nZXRFbGVMZXZlbEZvckxheWVyTGV2ZWw9ZnVuY3Rpb24oeCxtKXtyZXR1cm4geH0sbjAuZHJhd0VsZUluTGF5ZXI9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09dGhpcyxPPXRoaXMucmVuZGVyZXIsTj14LmNvbnRleHQsJD1tLmJvdW5kaW5nQm94KCk7JC53PT09MHx8JC5oPT09MHx8IW0udmlzaWJsZSgpfHwoaz1NLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbChrLFMpLE8uc2V0SW1nU21vb3RoaW5nKE4sITEpLE8uZHJhd0NhY2hlZEVsZW1lbnQoTixtLG51bGwsbnVsbCxrLGZ6KSxPLnNldEltZ1Ntb290aGluZyhOLCEwKSl9LG4wLmxldmVsSXNDb21wbGV0ZT1mdW5jdGlvbih4LG0pe3ZhciBrPXRoaXMsUz1rLmxheWVyc0J5TGV2ZWxbeF07aWYoIVN8fFMubGVuZ3RoPT09MClyZXR1cm4hMTtmb3IodmFyIE09MCxPPTA7TzxTLmxlbmd0aDtPKyspe3ZhciBOPVNbT107aWYoTi5yZXFzPjB8fE4uaW52YWxpZClyZXR1cm4hMTtNKz1OLmVsZXMubGVuZ3RofXJldHVybiBNPT09bS5sZW5ndGh9LG4wLnZhbGlkYXRlTGF5ZXJzRWxlc09yZGVyaW5nPWZ1bmN0aW9uKHgsbSl7dmFyIGs9dGhpcy5sYXllcnNCeUxldmVsW3hdO2lmKGspZm9yKHZhciBTPTA7UzxrLmxlbmd0aDtTKyspe2Zvcih2YXIgTT1rW1NdLE89LTEsTj0wO048bS5sZW5ndGg7TisrKWlmKE0uZWxlc1swXT09PW1bTl0pe089TjticmVha31pZihPPDApe3RoaXMuaW52YWxpZGF0ZUxheWVyKE0pO2NvbnRpbnVlfWZvcih2YXIgJD1PLE49MDtOPE0uZWxlcy5sZW5ndGg7TisrKWlmKE0uZWxlc1tOXSE9PW1bJCtOXSl7dGhpcy5pbnZhbGlkYXRlTGF5ZXIoTSk7YnJlYWt9fX0sbjAudXBkYXRlRWxlbWVudHNJbkxheWVycz1mdW5jdGlvbih4LG0pe2Zvcih2YXIgaz10aGlzLFM9VSh4WzBdKSxNPTA7TTx4Lmxlbmd0aDtNKyspZm9yKHZhciBPPVM/bnVsbDp4W01dLE49Uz94W01dOnhbTV0uZWxlLCQ9Ti5fcHJpdmF0ZS5yc2NyYXRjaCxIPSQuaW1nTGF5ZXJDYWNoZXM9JC5pbWdMYXllckNhY2hlc3x8e30scT1naztxPD1RUztxKyspe3ZhciBZPUhbcV07WSYmKE8mJmsuZ2V0RWxlTGV2ZWxGb3JMYXllckxldmVsKFkubGV2ZWwpIT09Ty5sZXZlbHx8bShZLE4sTykpfX0sbjAuaGF2ZUxheWVycz1mdW5jdGlvbigpe2Zvcih2YXIgeD10aGlzLG09ITEsaz1naztrPD1RUztrKyspe3ZhciBTPXgubGF5ZXJzQnlMZXZlbFtrXTtpZihTJiZTLmxlbmd0aD4wKXttPSEwO2JyZWFrfX1yZXR1cm4gbX0sbjAuaW52YWxpZGF0ZUVsZW1lbnRzPWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXM7eC5sZW5ndGghPT0wJiYobS5sYXN0SW52YWxpZGF0aW9uVGltZT1CcCgpLCEoeC5sZW5ndGg9PT0wfHwhbS5oYXZlTGF5ZXJzKCkpJiZtLnVwZGF0ZUVsZW1lbnRzSW5MYXllcnMoeCxmdW5jdGlvbihTLE0sTyl7bS5pbnZhbGlkYXRlTGF5ZXIoUyl9KSl9LG4wLmludmFsaWRhdGVMYXllcj1mdW5jdGlvbih4KXtpZih0aGlzLmxhc3RJbnZhbGlkYXRpb25UaW1lPUJwKCksIXguaW52YWxpZCl7dmFyIG09eC5sZXZlbCxrPXguZWxlcyxTPXRoaXMubGF5ZXJzQnlMZXZlbFttXTtRMyhTLHgpLHguZWxlc1F1ZXVlPVtdLHguaW52YWxpZD0hMCx4LnJlcGxhY2VtZW50JiYoeC5yZXBsYWNlbWVudC5pbnZhbGlkPSEwKTtmb3IodmFyIE09MDtNPGsubGVuZ3RoO00rKyl7dmFyIE89a1tNXS5fcHJpdmF0ZS5yc2NyYXRjaC5pbWdMYXllckNhY2hlcztPJiYoT1ttXT1udWxsKX19fSxuMC5yZWZpbmVFbGVtZW50VGV4dHVyZXM9ZnVuY3Rpb24oeCl7dmFyIG09dGhpczttLnVwZGF0ZUVsZW1lbnRzSW5MYXllcnMoeCxmdW5jdGlvbihTLE0sTyl7dmFyIE49Uy5yZXBsYWNlbWVudDtpZihOfHwoTj1TLnJlcGxhY2VtZW50PW0ubWFrZUxheWVyKFMuYmIsUy5sZXZlbCksTi5yZXBsYWNlcz1TLE4uZWxlcz1TLmVsZXMpLCFOLnJlcXMpZm9yKHZhciAkPTA7JDxOLmVsZXMubGVuZ3RoOyQrKyltLnF1ZXVlTGF5ZXIoTixOLmVsZXNbJF0pfSl9LG4wLmVucXVldWVFbGVtZW50UmVmaW5lbWVudD1mdW5jdGlvbih4KXt0aGlzLmVsZVR4ckRlcXMubWVyZ2UoeCksdGhpcy5zY2hlZHVsZUVsZW1lbnRSZWZpbmVtZW50KCl9LG4wLnF1ZXVlTGF5ZXI9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzLFM9ay5sYXllcnNRdWV1ZSxNPXguZWxlc1F1ZXVlLE89TS5oYXNJZD1NLmhhc0lkfHx7fTtpZigheC5yZXBsYWNlbWVudCl7aWYobSl7aWYoT1ttLmlkKCldKXJldHVybjtNLnB1c2gobSksT1ttLmlkKCldPSEwfXgucmVxcz8oeC5yZXFzKyssUy51cGRhdGVJdGVtKHgpKTooeC5yZXFzPTEsUy5wdXNoKHgpKX19LG4wLmRlcXVldWU9ZnVuY3Rpb24oeCl7Zm9yKHZhciBtPXRoaXMsaz1tLmxheWVyc1F1ZXVlLFM9W10sTT0wO008ZGllJiZrLnNpemUoKSE9PTA7KXt2YXIgTz1rLnBlZWsoKTtpZihPLnJlcGxhY2VtZW50KXtrLnBvcCgpO2NvbnRpbnVlfWlmKE8ucmVwbGFjZXMmJk8hPT1PLnJlcGxhY2VzLnJlcGxhY2VtZW50KXtrLnBvcCgpO2NvbnRpbnVlfWlmKE8uaW52YWxpZCl7ay5wb3AoKTtjb250aW51ZX12YXIgTj1PLmVsZXNRdWV1ZS5zaGlmdCgpO04mJihtLmRyYXdFbGVJbkxheWVyKE8sTixPLmxldmVsLHgpLE0rKyksUy5sZW5ndGg9PT0wJiZTLnB1c2goITApLE8uZWxlc1F1ZXVlLmxlbmd0aD09PTAmJihrLnBvcCgpLE8ucmVxcz0wLE8ucmVwbGFjZXMmJm0uYXBwbHlMYXllclJlcGxhY2VtZW50KE8pLG0ucmVxdWVzdFJlZHJhdygpKX1yZXR1cm4gU30sbjAuYXBwbHlMYXllclJlcGxhY2VtZW50PWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXMsaz1tLmxheWVyc0J5TGV2ZWxbeC5sZXZlbF0sUz14LnJlcGxhY2VzLE09ay5pbmRleE9mKFMpO2lmKCEoTTwwfHxTLmludmFsaWQpKXtrW01dPXg7Zm9yKHZhciBPPTA7Tzx4LmVsZXMubGVuZ3RoO08rKyl7dmFyIE49eC5lbGVzW09dLl9wcml2YXRlLCQ9Ti5pbWdMYXllckNhY2hlcz1OLmltZ0xheWVyQ2FjaGVzfHx7fTskJiYoJFt4LmxldmVsXT14KX1tLnJlcXVlc3RSZWRyYXcoKX19LG4wLnJlcXVlc3RSZWRyYXc9TnUoZnVuY3Rpb24oKXt2YXIgeD10aGlzLnJlbmRlcmVyO3gucmVkcmF3SGludCgiZWxlcyIsITApLHgucmVkcmF3SGludCgiZHJhZyIsITApLHgucmVkcmF3KCl9LDEwMCksbjAuc2V0dXBEZXF1ZXVlaW5nPW96LnNldHVwRGVxdWV1ZWluZyh7ZGVxUmVkcmF3VGhyZXNob2xkOnVpZSxkZXFDb3N0OlNmLGRlcUF2Z0Nvc3Q6aGllLGRlcU5vRHJhd0Nvc3Q6ZmllLGRlcUZhc3RDb3N0OnV6LGRlcTpmdW5jdGlvbihtLGspe3JldHVybiBtLmRlcXVldWUoayl9LG9uRGVxZDpuSSxzaG91bGRSZWRyYXc6bDUscHJpb3JpdHk6ZnVuY3Rpb24obSl7cmV0dXJuIG0ucmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJEZXF9fSk7dmFyIHB6PXt9LGJ6O2Z1bmN0aW9uIGdpZSh4LG0pe2Zvcih2YXIgaz0wO2s8bS5sZW5ndGg7aysrKXt2YXIgUz1tW2tdO3gubGluZVRvKFMueCxTLnkpfX1mdW5jdGlvbiBwaWUoeCxtLGspe2Zvcih2YXIgUyxNPTA7TTxtLmxlbmd0aDtNKyspe3ZhciBPPW1bTV07TT09PTAmJihTPU8pLHgubGluZVRvKE8ueCxPLnkpfXgucXVhZHJhdGljQ3VydmVUbyhrLngsay55LFMueCxTLnkpfWZ1bmN0aW9uIG16KHgsbSxrKXt4LmJlZ2luUGF0aCYmeC5iZWdpblBhdGgoKTtmb3IodmFyIFM9bSxNPTA7TTxTLmxlbmd0aDtNKyspe3ZhciBPPVNbTV07eC5saW5lVG8oTy54LE8ueSl9dmFyIE49aywkPWtbMF07eC5tb3ZlVG8oJC54LCQueSk7Zm9yKHZhciBNPTE7TTxOLmxlbmd0aDtNKyspe3ZhciBPPU5bTV07eC5saW5lVG8oTy54LE8ueSl9eC5jbG9zZVBhdGgmJnguY2xvc2VQYXRoKCl9ZnVuY3Rpb24gYmllKHgsbSxrLFMsTSl7eC5iZWdpblBhdGgmJnguYmVnaW5QYXRoKCkseC5hcmMoayxTLE0sMCxNYXRoLlBJKjIsITEpO3ZhciBPPW0sTj1PWzBdO3gubW92ZVRvKE4ueCxOLnkpO2Zvcih2YXIgJD0wOyQ8Ty5sZW5ndGg7JCsrKXt2YXIgSD1PWyRdO3gubGluZVRvKEgueCxILnkpfXguY2xvc2VQYXRoJiZ4LmNsb3NlUGF0aCgpfWZ1bmN0aW9uIHZ6KHgsbSxrLFMpe3guYXJjKG0sayxTLDAsTWF0aC5QSSoyLCExKX1wei5hcnJvd1NoYXBlSW1wbD1mdW5jdGlvbih4KXtyZXR1cm4oYnp8fChiej17cG9seWdvbjpnaWUsInRyaWFuZ2xlLWJhY2tjdXJ2ZSI6cGllLCJ0cmlhbmdsZS10ZWUiOm16LCJjaXJjbGUtdHJpYW5nbGUiOmJpZSwidHJpYW5nbGUtY3Jvc3MiOm16LGNpcmNsZTp2en0pKVt4XX07dmFyIFEyPXt9O1EyLmRyYXdFbGVtZW50PWZ1bmN0aW9uKHgsbSxrLFMsTSxPKXt2YXIgTj10aGlzO20uaXNOb2RlKCk/Ti5kcmF3Tm9kZSh4LG0sayxTLE0sTyk6Ti5kcmF3RWRnZSh4LG0sayxTLE0sTyl9LFEyLmRyYXdFbGVtZW50T3ZlcmxheT1mdW5jdGlvbih4LG0pe3ZhciBrPXRoaXM7bS5pc05vZGUoKT9rLmRyYXdOb2RlT3ZlcmxheSh4LG0pOmsuZHJhd0VkZ2VPdmVybGF5KHgsbSl9LFEyLmRyYXdFbGVtZW50VW5kZXJsYXk9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzO20uaXNOb2RlKCk/ay5kcmF3Tm9kZVVuZGVybGF5KHgsbSk6ay5kcmF3RWRnZVVuZGVybGF5KHgsbSl9LFEyLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbj1mdW5jdGlvbih4LG0sayxTLE0sTyxOLCQpe3ZhciBIPXRoaXMscT1rLmdldEJvdW5kaW5nQm94KG0pO2lmKCEocS53PT09MHx8cS5oPT09MCkpe3ZhciBZPWsuZ2V0RWxlbWVudChtLHEsUyxNLE8pO2lmKFkhPW51bGwpe3ZhciBaPSQoSCxtKTtpZihaPT09MClyZXR1cm47dmFyIGNlPU4oSCxtKSx2ZT1xLngxLG1lPXEueTEsTGU9cS53LF9lPXEuaCxFZSxCZSxSZSxWZSxjdDtpZihjZSE9PTApe3ZhciBzdD1rLmdldFJvdGF0aW9uUG9pbnQobSk7UmU9c3QueCxWZT1zdC55LHgudHJhbnNsYXRlKFJlLFZlKSx4LnJvdGF0ZShjZSksY3Q9SC5nZXRJbWdTbW9vdGhpbmcoeCksY3R8fEguc2V0SW1nU21vb3RoaW5nKHgsITApO3ZhciBZZT1rLmdldFJvdGF0aW9uT2Zmc2V0KG0pO0VlPVllLngsQmU9WWUueX1lbHNlIEVlPXZlLEJlPW1lO3ZhciBtdDtaIT09MSYmKG10PXguZ2xvYmFsQWxwaGEseC5nbG9iYWxBbHBoYT1tdCpaKSx4LmRyYXdJbWFnZShZLnRleHR1cmUuY2FudmFzLFkueCwwLFkud2lkdGgsWS5oZWlnaHQsRWUsQmUsTGUsX2UpLFohPT0xJiYoeC5nbG9iYWxBbHBoYT1tdCksY2UhPT0wJiYoeC5yb3RhdGUoLWNlKSx4LnRyYW5zbGF0ZSgtUmUsLVZlKSxjdHx8SC5zZXRJbWdTbW9vdGhpbmcoeCwhMSkpfWVsc2Ugay5kcmF3RWxlbWVudCh4LG0pfX07dmFyIG1pZT1mdW5jdGlvbigpe3JldHVybiAwfSx2aWU9ZnVuY3Rpb24obSxrKXtyZXR1cm4gbS5nZXRUZXh0QW5nbGUoayxudWxsKX0sJEk9ZnVuY3Rpb24obSxrKXtyZXR1cm4gbS5nZXRUZXh0QW5nbGUoaywic291cmNlIil9LHdpZT1mdW5jdGlvbihtLGspe3JldHVybiBtLmdldFRleHRBbmdsZShrLCJ0YXJnZXQiKX0seWllPWZ1bmN0aW9uKG0sayl7cmV0dXJuIGsuZWZmZWN0aXZlT3BhY2l0eSgpfSxwaz1mdW5jdGlvbihtLGspe3JldHVybiBrLnBzdHlsZSgidGV4dC1vcGFjaXR5IikucGZWYWx1ZSprLmVmZmVjdGl2ZU9wYWNpdHkoKX07UTIuZHJhd0NhY2hlZEVsZW1lbnQ9ZnVuY3Rpb24oeCxtLGssUyxNLE8pe3ZhciBOPXRoaXMsJD1OLmRhdGEsSD0kLmVsZVR4ckNhY2hlLHE9JC5sYmxUeHJDYWNoZSxZPSQuc2xiVHhyQ2FjaGUsWj0kLnRsYlR4ckNhY2hlLGNlPW0uYm91bmRpbmdCb3goKSx2ZT1PPT09ITA/SC5yZWFzb25zLmhpZ2hRdWFsaXR5Om51bGw7aWYoIShjZS53PT09MHx8Y2UuaD09PTB8fCFtLnZpc2libGUoKSkmJighU3x8c0koY2UsUykpKXt2YXIgbWU9bS5pc0VkZ2UoKSxMZT1tLmVsZW1lbnQoKS5fcHJpdmF0ZS5yc2NyYXRjaC5iYWRMaW5lO04uZHJhd0VsZW1lbnRVbmRlcmxheSh4LG0pLE4uZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uKHgsbSxILGssTSx2ZSxtaWUseWllKSwoIW1lfHwhTGUpJiZOLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbih4LG0scSxrLE0sdmUsdmllLHBrKSxtZSYmIUxlJiYoTi5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oeCxtLFksayxNLHZlLCRJLHBrKSxOLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbih4LG0sWixrLE0sdmUsd2llLHBrKSksTi5kcmF3RWxlbWVudE92ZXJsYXkoeCxtKX19LFEyLmRyYXdFbGVtZW50cz1mdW5jdGlvbih4LG0pe2Zvcih2YXIgaz10aGlzLFM9MDtTPG0ubGVuZ3RoO1MrKyl7dmFyIE09bVtTXTtrLmRyYXdFbGVtZW50KHgsTSl9fSxRMi5kcmF3Q2FjaGVkRWxlbWVudHM9ZnVuY3Rpb24oeCxtLGssUyl7Zm9yKHZhciBNPXRoaXMsTz0wO088bS5sZW5ndGg7TysrKXt2YXIgTj1tW09dO00uZHJhd0NhY2hlZEVsZW1lbnQoeCxOLGssUyl9fSxRMi5kcmF3Q2FjaGVkTm9kZXM9ZnVuY3Rpb24oeCxtLGssUyl7Zm9yKHZhciBNPXRoaXMsTz0wO088bS5sZW5ndGg7TysrKXt2YXIgTj1tW09dO04uaXNOb2RlKCkmJk0uZHJhd0NhY2hlZEVsZW1lbnQoeCxOLGssUyl9fSxRMi5kcmF3TGF5ZXJlZEVsZW1lbnRzPWZ1bmN0aW9uKHgsbSxrLFMpe3ZhciBNPXRoaXMsTz1NLmRhdGEubHlyVHhyQ2FjaGUuZ2V0TGF5ZXJzKG0sayk7aWYoTylmb3IodmFyIE49MDtOPE8ubGVuZ3RoO04rKyl7dmFyICQ9T1tOXSxIPSQuYmI7SC53PT09MHx8SC5oPT09MHx8eC5kcmF3SW1hZ2UoJC5jYW52YXMsSC54MSxILnkxLEgudyxILmgpfWVsc2UgTS5kcmF3Q2FjaGVkRWxlbWVudHMoeCxtLGssUyl9O3ZhciBKMj17fTtKMi5kcmF3RWRnZT1mdW5jdGlvbih4LG0sayl7dmFyIFM9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLE09YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLE89YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwLE49dGhpcywkPW0uX3ByaXZhdGUucnNjcmF0Y2g7aWYoIShPJiYhbS52aXNpYmxlKCkpJiYhKCQuYmFkTGluZXx8JC5hbGxwdHM9PW51bGx8fGlzTmFOKCQuYWxscHRzWzBdKSkpe3ZhciBIO2smJihIPWsseC50cmFuc2xhdGUoLUgueDEsLUgueTEpKTt2YXIgcT1PP20ucHN0eWxlKCJvcGFjaXR5IikudmFsdWU6MSxZPU8/bS5wc3R5bGUoImxpbmUtb3BhY2l0eSIpLnZhbHVlOjEsWj1tLnBzdHlsZSgiY3VydmUtc3R5bGUiKS52YWx1ZSxjZT1tLnBzdHlsZSgibGluZS1zdHlsZSIpLnZhbHVlLHZlPW0ucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsbWU9bS5wc3R5bGUoImxpbmUtY2FwIikudmFsdWUsTGU9cSpZLF9lPXEqWSxFZT1mdW5jdGlvbigpe3ZhciB1dD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06TGU7Wj09PSJzdHJhaWdodC10cmlhbmdsZSI/KE4uZWxlU3Ryb2tlU3R5bGUoeCxtLHV0KSxOLmRyYXdFZGdlVHJpYW5nbGVQYXRoKG0seCwkLmFsbHB0cykpOih4LmxpbmVXaWR0aD12ZSx4LmxpbmVDYXA9bWUsTi5lbGVTdHJva2VTdHlsZSh4LG0sdXQpLE4uZHJhd0VkZ2VQYXRoKG0seCwkLmFsbHB0cyxjZSkseC5saW5lQ2FwPSJidXR0Iil9LEJlPWZ1bmN0aW9uKCl7TSYmTi5kcmF3RWRnZU92ZXJsYXkoeCxtKX0sUmU9ZnVuY3Rpb24oKXtNJiZOLmRyYXdFZGdlVW5kZXJsYXkoeCxtKX0sVmU9ZnVuY3Rpb24oKXt2YXIgdXQ9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOl9lO04uZHJhd0Fycm93aGVhZHMoeCxtLHV0KX0sY3Q9ZnVuY3Rpb24oKXtOLmRyYXdFbGVtZW50VGV4dCh4LG0sbnVsbCxTKX07eC5saW5lSm9pbj0icm91bmQiO3ZhciBzdD1tLnBzdHlsZSgiZ2hvc3QiKS52YWx1ZT09PSJ5ZXMiO2lmKHN0KXt2YXIgWWU9bS5wc3R5bGUoImdob3N0LW9mZnNldC14IikucGZWYWx1ZSxtdD1tLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXkiKS5wZlZhbHVlLEplPW0ucHN0eWxlKCJnaG9zdC1vcGFjaXR5IikudmFsdWUsTHQ9TGUqSmU7eC50cmFuc2xhdGUoWWUsbXQpLEVlKEx0KSxWZShMdCkseC50cmFuc2xhdGUoLVllLC1tdCl9UmUoKSxFZSgpLFZlKCksQmUoKSxjdCgpLGsmJngudHJhbnNsYXRlKEgueDEsSC55MSl9fTt2YXIgd3o9ZnVuY3Rpb24obSl7aWYoIVsib3ZlcmxheSIsInVuZGVybGF5Il0uaW5jbHVkZXMobSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0YXRlIik7cmV0dXJuIGZ1bmN0aW9uKGssUyl7aWYoUy52aXNpYmxlKCkpe3ZhciBNPVMucHN0eWxlKCIiLmNvbmNhdChtLCItb3BhY2l0eSIpKS52YWx1ZTtpZihNIT09MCl7dmFyIE89dGhpcyxOPU8udXNlUGF0aHMoKSwkPVMuX3ByaXZhdGUucnNjcmF0Y2gsSD1TLnBzdHlsZSgiIi5jb25jYXQobSwiLXBhZGRpbmciKSkucGZWYWx1ZSxxPTIqSCxZPVMucHN0eWxlKCIiLmNvbmNhdChtLCItY29sb3IiKSkudmFsdWU7ay5saW5lV2lkdGg9cSwkLmVkZ2VUeXBlPT09InNlbGYiJiYhTj9rLmxpbmVDYXA9ImJ1dHQiOmsubGluZUNhcD0icm91bmQiLE8uY29sb3JTdHJva2VTdHlsZShrLFlbMF0sWVsxXSxZWzJdLE0pLE8uZHJhd0VkZ2VQYXRoKFMsaywkLmFsbHB0cywic29saWQiKX19fX07SjIuZHJhd0VkZ2VPdmVybGF5PXd6KCJvdmVybGF5IiksSjIuZHJhd0VkZ2VVbmRlcmxheT13eigidW5kZXJsYXkiKSxKMi5kcmF3RWRnZVBhdGg9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09eC5fcHJpdmF0ZS5yc2NyYXRjaCxPPW0sTiwkPSExLEg9dGhpcy51c2VQYXRocygpLHE9eC5wc3R5bGUoImxpbmUtZGFzaC1wYXR0ZXJuIikucGZWYWx1ZSxZPXgucHN0eWxlKCJsaW5lLWRhc2gtb2Zmc2V0IikucGZWYWx1ZTtpZihIKXt2YXIgWj1rLmpvaW4oIiQiKSxjZT1NLnBhdGhDYWNoZUtleSYmTS5wYXRoQ2FjaGVLZXk9PT1aO2NlPyhOPW09TS5wYXRoQ2FjaGUsJD0hMCk6KE49bT1uZXcgUGF0aDJELE0ucGF0aENhY2hlS2V5PVosTS5wYXRoQ2FjaGU9Til9aWYoTy5zZXRMaW5lRGFzaClzd2l0Y2goUyl7Y2FzZSJkb3R0ZWQiOk8uc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjpPLnNldExpbmVEYXNoKHEpLE8ubGluZURhc2hPZmZzZXQ9WTticmVhaztjYXNlInNvbGlkIjpPLnNldExpbmVEYXNoKFtdKTticmVha31pZighJCYmIU0uYmFkTGluZSlzd2l0Y2gobS5iZWdpblBhdGgmJm0uYmVnaW5QYXRoKCksbS5tb3ZlVG8oa1swXSxrWzFdKSxNLmVkZ2VUeXBlKXtjYXNlImJlemllciI6Y2FzZSJzZWxmIjpjYXNlImNvbXBvdW5kIjpjYXNlIm11bHRpYmV6aWVyIjpmb3IodmFyIHZlPTI7dmUrMzxrLmxlbmd0aDt2ZSs9NCltLnF1YWRyYXRpY0N1cnZlVG8oa1t2ZV0sa1t2ZSsxXSxrW3ZlKzJdLGtbdmUrM10pO2JyZWFrO2Nhc2Uic3RyYWlnaHQiOmNhc2Uic2VnbWVudHMiOmNhc2UiaGF5c3RhY2siOmZvcih2YXIgbWU9MjttZSsxPGsubGVuZ3RoO21lKz0yKW0ubGluZVRvKGtbbWVdLGtbbWUrMV0pO2JyZWFrfW09TyxIP20uc3Ryb2tlKE4pOm0uc3Ryb2tlKCksbS5zZXRMaW5lRGFzaCYmbS5zZXRMaW5lRGFzaChbXSl9LEoyLmRyYXdFZGdlVHJpYW5nbGVQYXRoPWZ1bmN0aW9uKHgsbSxrKXttLmZpbGxTdHlsZT1tLnN0cm9rZVN0eWxlO2Zvcih2YXIgUz14LnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLE09MDtNKzE8ay5sZW5ndGg7TSs9Mil7dmFyIE89W2tbTSsyXS1rW01dLGtbTSszXS1rW00rMV1dLE49TWF0aC5zcXJ0KE9bMF0qT1swXStPWzFdKk9bMV0pLCQ9W09bMV0vTiwtT1swXS9OXSxIPVskWzBdKlMvMiwkWzFdKlMvMl07bS5iZWdpblBhdGgoKSxtLm1vdmVUbyhrW01dLUhbMF0sa1tNKzFdLUhbMV0pLG0ubGluZVRvKGtbTV0rSFswXSxrW00rMV0rSFsxXSksbS5saW5lVG8oa1tNKzJdLGtbTSszXSksbS5jbG9zZVBhdGgoKSxtLmZpbGwoKX19LEoyLmRyYXdBcnJvd2hlYWRzPWZ1bmN0aW9uKHgsbSxrKXt2YXIgUz1tLl9wcml2YXRlLnJzY3JhdGNoLE09Uy5lZGdlVHlwZT09PSJoYXlzdGFjayI7TXx8dGhpcy5kcmF3QXJyb3doZWFkKHgsbSwic291cmNlIixTLmFycm93U3RhcnRYLFMuYXJyb3dTdGFydFksUy5zcmNBcnJvd0FuZ2xlLGspLHRoaXMuZHJhd0Fycm93aGVhZCh4LG0sIm1pZC10YXJnZXQiLFMubWlkWCxTLm1pZFksUy5taWR0Z3RBcnJvd0FuZ2xlLGspLHRoaXMuZHJhd0Fycm93aGVhZCh4LG0sIm1pZC1zb3VyY2UiLFMubWlkWCxTLm1pZFksUy5taWRzcmNBcnJvd0FuZ2xlLGspLE18fHRoaXMuZHJhd0Fycm93aGVhZCh4LG0sInRhcmdldCIsUy5hcnJvd0VuZFgsUy5hcnJvd0VuZFksUy50Z3RBcnJvd0FuZ2xlLGspfSxKMi5kcmF3QXJyb3doZWFkPWZ1bmN0aW9uKHgsbSxrLFMsTSxPLE4pe2lmKCEoaXNOYU4oUyl8fFM9PW51bGx8fGlzTmFOKE0pfHxNPT1udWxsfHxpc05hTihPKXx8Tz09bnVsbCkpe3ZhciAkPXRoaXMsSD1tLnBzdHlsZShrKyItYXJyb3ctc2hhcGUiKS52YWx1ZTtpZihIIT09Im5vbmUiKXt2YXIgcT1tLnBzdHlsZShrKyItYXJyb3ctZmlsbCIpLnZhbHVlPT09ImhvbGxvdyI/ImJvdGgiOiJmaWxsZWQiLFk9bS5wc3R5bGUoaysiLWFycm93LWZpbGwiKS52YWx1ZSxaPW0ucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsY2U9bS5wc3R5bGUoaysiLWFycm93LXdpZHRoIiksdmU9Y2UudmFsdWU9PT0ibWF0Y2gtbGluZSI/WjpjZS5wZlZhbHVlO2NlLnVuaXRzPT09IiUiJiYodmUqPVopO3ZhciBtZT1tLnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlO049PT12b2lkIDAmJihOPW1lKTt2YXIgTGU9eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247KE4hPT0xfHxZPT09ImhvbGxvdyIpJiYoeC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsJC5jb2xvckZpbGxTdHlsZSh4LDI1NSwyNTUsMjU1LDEpLCQuY29sb3JTdHJva2VTdHlsZSh4LDI1NSwyNTUsMjU1LDEpLCQuZHJhd0Fycm93U2hhcGUobSx4LHEsWixILHZlLFMsTSxPKSx4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1MZSk7dmFyIF9lPW0ucHN0eWxlKGsrIi1hcnJvdy1jb2xvciIpLnZhbHVlOyQuY29sb3JGaWxsU3R5bGUoeCxfZVswXSxfZVsxXSxfZVsyXSxOKSwkLmNvbG9yU3Ryb2tlU3R5bGUoeCxfZVswXSxfZVsxXSxfZVsyXSxOKSwkLmRyYXdBcnJvd1NoYXBlKG0seCxZLFosSCx2ZSxTLE0sTyl9fX0sSjIuZHJhd0Fycm93U2hhcGU9ZnVuY3Rpb24oeCxtLGssUyxNLE8sTiwkLEgpe3ZhciBxPXRoaXMsWT10aGlzLnVzZVBhdGhzKCkmJk0hPT0idHJpYW5nbGUtY3Jvc3MiLFo9ITEsY2UsdmU9bSxtZT17eDpOLHk6JH0sTGU9eC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUsX2U9dGhpcy5nZXRBcnJvd1dpZHRoKFMsTGUpLEVlPXEuYXJyb3dTaGFwZXNbTV07aWYoWSl7dmFyIEJlPXEuYXJyb3dQYXRoQ2FjaGU9cS5hcnJvd1BhdGhDYWNoZXx8W10sUmU9dWQoTSksVmU9QmVbUmVdO1ZlIT1udWxsPyhjZT1tPVZlLFo9ITApOihjZT1tPW5ldyBQYXRoMkQsQmVbUmVdPWNlKX1afHwobS5iZWdpblBhdGgmJm0uYmVnaW5QYXRoKCksWT9FZS5kcmF3KG0sMSwwLHt4OjAseTowfSwxKTpFZS5kcmF3KG0sX2UsSCxtZSxTKSxtLmNsb3NlUGF0aCYmbS5jbG9zZVBhdGgoKSksbT12ZSxZJiYobS50cmFuc2xhdGUoTiwkKSxtLnJvdGF0ZShIKSxtLnNjYWxlKF9lLF9lKSksKGs9PT0iZmlsbGVkInx8az09PSJib3RoIikmJihZP20uZmlsbChjZSk6bS5maWxsKCkpLChrPT09ImhvbGxvdyJ8fGs9PT0iYm90aCIpJiYobS5saW5lV2lkdGg9Ty8oWT9fZToxKSxtLmxpbmVKb2luPSJtaXRlciIsWT9tLnN0cm9rZShjZSk6bS5zdHJva2UoKSksWSYmKG0uc2NhbGUoMS9fZSwxL19lKSxtLnJvdGF0ZSgtSCksbS50cmFuc2xhdGUoLU4sLSQpKX07dmFyIGJrPXt9O2JrLnNhZmVEcmF3SW1hZ2U9ZnVuY3Rpb24oeCxtLGssUyxNLE8sTiwkLEgscSl7aWYoIShNPD0wfHxPPD0wfHxIPD0wfHxxPD0wKSl0cnl7eC5kcmF3SW1hZ2UobSxrLFMsTSxPLE4sJCxILHEpfWNhdGNoKFkpe2h1KFkpfX0sYmsuZHJhd0luc2NyaWJlZEltYWdlPWZ1bmN0aW9uKHgsbSxrLFMsTSl7dmFyIE89dGhpcyxOPWsucG9zaXRpb24oKSwkPU4ueCxIPU4ueSxxPWsuY3koKS5zdHlsZSgpLFk9cS5nZXRJbmRleGVkU3R5bGUuYmluZChxKSxaPVkoaywiYmFja2dyb3VuZC1maXQiLCJ2YWx1ZSIsUyksY2U9WShrLCJiYWNrZ3JvdW5kLXJlcGVhdCIsInZhbHVlIixTKSx2ZT1rLndpZHRoKCksbWU9ay5oZWlnaHQoKSxMZT1rLnBhZGRpbmcoKSoyLF9lPXZlKyhZKGssImJhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG8iLCJ2YWx1ZSIsUyk9PT0iaW5uZXIiPzA6TGUpLEVlPW1lKyhZKGssImJhY2tncm91bmQtaGVpZ2h0LXJlbGF0aXZlLXRvIiwidmFsdWUiLFMpPT09ImlubmVyIj8wOkxlKSxCZT1rLl9wcml2YXRlLnJzY3JhdGNoLFJlPVkoaywiYmFja2dyb3VuZC1jbGlwIiwidmFsdWUiLFMpLFZlPVJlPT09Im5vZGUiLGN0PVkoaywiYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5IiwidmFsdWUiLFMpKk0sc3Q9WShrLCJiYWNrZ3JvdW5kLWltYWdlLXNtb290aGluZyIsInZhbHVlIixTKSxZZT1tLndpZHRofHxtLmNhY2hlZFcsbXQ9bS5oZWlnaHR8fG0uY2FjaGVkSDsoWWU9PW51bGx8fG10PT1udWxsKSYmKGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobSksWWU9bS5jYWNoZWRXPW0ud2lkdGh8fG0ub2Zmc2V0V2lkdGgsbXQ9bS5jYWNoZWRIPW0uaGVpZ2h0fHxtLm9mZnNldEhlaWdodCxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG0pKTt2YXIgSmU9WWUsTHQ9bXQ7aWYoWShrLCJiYWNrZ3JvdW5kLXdpZHRoIiwidmFsdWUiLFMpIT09ImF1dG8iJiYoWShrLCJiYWNrZ3JvdW5kLXdpZHRoIiwidW5pdHMiLFMpPT09IiUiP0plPVkoaywiYmFja2dyb3VuZC13aWR0aCIsInBmVmFsdWUiLFMpKl9lOkplPVkoaywiYmFja2dyb3VuZC13aWR0aCIsInBmVmFsdWUiLFMpKSxZKGssImJhY2tncm91bmQtaGVpZ2h0IiwidmFsdWUiLFMpIT09ImF1dG8iJiYoWShrLCJiYWNrZ3JvdW5kLWhlaWdodCIsInVuaXRzIixTKT09PSIlIj9MdD1ZKGssImJhY2tncm91bmQtaGVpZ2h0IiwicGZWYWx1ZSIsUykqRWU6THQ9WShrLCJiYWNrZ3JvdW5kLWhlaWdodCIsInBmVmFsdWUiLFMpKSwhKEplPT09MHx8THQ9PT0wKSl7aWYoWj09PSJjb250YWluIil7dmFyIE10PU1hdGgubWluKF9lL0plLEVlL0x0KTtKZSo9TXQsTHQqPU10fWVsc2UgaWYoWj09PSJjb3ZlciIpe3ZhciBNdD1NYXRoLm1heChfZS9KZSxFZS9MdCk7SmUqPU10LEx0Kj1NdH12YXIgdXQ9JC1fZS8yLFd0PVkoaywiYmFja2dyb3VuZC1wb3NpdGlvbi14IiwidW5pdHMiLFMpLFR0PVkoaywiYmFja2dyb3VuZC1wb3NpdGlvbi14IiwicGZWYWx1ZSIsUyk7V3Q9PT0iJSI/dXQrPShfZS1KZSkqVHQ6dXQrPVR0O3ZhciBfbj1ZKGssImJhY2tncm91bmQtb2Zmc2V0LXgiLCJ1bml0cyIsUyksaG49WShrLCJiYWNrZ3JvdW5kLW9mZnNldC14IiwicGZWYWx1ZSIsUyk7X249PT0iJSI/dXQrPShfZS1KZSkqaG46dXQrPWhuO3ZhciBZdD1ILUVlLzIsRG49WShrLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiLCJ1bml0cyIsUyksaXI9WShrLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiLCJwZlZhbHVlIixTKTtEbj09PSIlIj9ZdCs9KEVlLUx0KSppcjpZdCs9aXI7dmFyIHZyPVkoaywiYmFja2dyb3VuZC1vZmZzZXQteSIsInVuaXRzIixTKSxObj1ZKGssImJhY2tncm91bmQtb2Zmc2V0LXkiLCJwZlZhbHVlIixTKTt2cj09PSIlIj9ZdCs9KEVlLUx0KSpObjpZdCs9Tm4sQmUucGF0aENhY2hlJiYodXQtPSQsWXQtPUgsJD0wLEg9MCk7dmFyIHByPXguZ2xvYmFsQWxwaGE7eC5nbG9iYWxBbHBoYT1jdDt2YXIgRXI9Ty5nZXRJbWdTbW9vdGhpbmcoeCksTXI9ITE7aWYoc3Q9PT0ibm8iJiZFcj8oTy5zZXRJbWdTbW9vdGhpbmcoeCwhMSksTXI9ITApOnN0PT09InllcyImJiFFciYmKE8uc2V0SW1nU21vb3RoaW5nKHgsITApLE1yPSEwKSxjZT09PSJuby1yZXBlYXQiKVZlJiYoeC5zYXZlKCksQmUucGF0aENhY2hlP3guY2xpcChCZS5wYXRoQ2FjaGUpOihPLm5vZGVTaGFwZXNbTy5nZXROb2RlU2hhcGUoayldLmRyYXcoeCwkLEgsX2UsRWUpLHguY2xpcCgpKSksTy5zYWZlRHJhd0ltYWdlKHgsbSwwLDAsWWUsbXQsdXQsWXQsSmUsTHQpLFZlJiZ4LnJlc3RvcmUoKTtlbHNle3ZhciBDcj14LmNyZWF0ZVBhdHRlcm4obSxjZSk7eC5maWxsU3R5bGU9Q3IsTy5ub2RlU2hhcGVzW08uZ2V0Tm9kZVNoYXBlKGspXS5kcmF3KHgsJCxILF9lLEVlKSx4LnRyYW5zbGF0ZSh1dCxZdCkseC5maWxsKCkseC50cmFuc2xhdGUoLXV0LC1ZdCl9eC5nbG9iYWxBbHBoYT1wcixNciYmTy5zZXRJbWdTbW9vdGhpbmcoeCxFcil9fTt2YXIgeTU9e307eTUuZWxlVGV4dEJpZ2dlclRoYW5NaW49ZnVuY3Rpb24oeCxtKXtpZighbSl7dmFyIGs9eC5jeSgpLnpvb20oKSxTPXRoaXMuZ2V0UGl4ZWxSYXRpbygpLE09TWF0aC5jZWlsKGlJKGsqUykpO209TWF0aC5wb3coMixNKX12YXIgTz14LnBzdHlsZSgiZm9udC1zaXplIikucGZWYWx1ZSptLE49eC5wc3R5bGUoIm1pbi16b29tZWQtZm9udC1zaXplIikucGZWYWx1ZTtyZXR1cm4hKE88Til9LHk1LmRyYXdFbGVtZW50VGV4dD1mdW5jdGlvbih4LG0sayxTLE0pe3ZhciBPPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMCxOPXRoaXM7aWYoUz09bnVsbCl7aWYoTyYmIU4uZWxlVGV4dEJpZ2dlclRoYW5NaW4obSkpcmV0dXJufWVsc2UgaWYoUz09PSExKXJldHVybjtpZihtLmlzTm9kZSgpKXt2YXIgJD1tLnBzdHlsZSgibGFiZWwiKTtpZighJHx8ISQudmFsdWUpcmV0dXJuO3ZhciBIPU4uZ2V0TGFiZWxKdXN0aWZpY2F0aW9uKG0pO3gudGV4dEFsaWduPUgseC50ZXh0QmFzZWxpbmU9ImJvdHRvbSJ9ZWxzZXt2YXIgcT1tLmVsZW1lbnQoKS5fcHJpdmF0ZS5yc2NyYXRjaC5iYWRMaW5lLFk9bS5wc3R5bGUoImxhYmVsIiksWj1tLnBzdHlsZSgic291cmNlLWxhYmVsIiksY2U9bS5wc3R5bGUoInRhcmdldC1sYWJlbCIpO2lmKHF8fCghWXx8IVkudmFsdWUpJiYoIVp8fCFaLnZhbHVlKSYmKCFjZXx8IWNlLnZhbHVlKSlyZXR1cm47eC50ZXh0QWxpZ249ImNlbnRlciIseC50ZXh0QmFzZWxpbmU9ImJvdHRvbSJ9dmFyIHZlPSFrLG1lO2smJihtZT1rLHgudHJhbnNsYXRlKC1tZS54MSwtbWUueTEpKSxNPT1udWxsPyhOLmRyYXdUZXh0KHgsbSxudWxsLHZlLE8pLG0uaXNFZGdlKCkmJihOLmRyYXdUZXh0KHgsbSwic291cmNlIix2ZSxPKSxOLmRyYXdUZXh0KHgsbSwidGFyZ2V0Iix2ZSxPKSkpOk4uZHJhd1RleHQoeCxtLE0sdmUsTyksayYmeC50cmFuc2xhdGUobWUueDEsbWUueTEpfSx5NS5nZXRGb250Q2FjaGU9ZnVuY3Rpb24oeCl7dmFyIG07dGhpcy5mb250Q2FjaGVzPXRoaXMuZm9udENhY2hlc3x8W107Zm9yKHZhciBrPTA7azx0aGlzLmZvbnRDYWNoZXMubGVuZ3RoO2srKylpZihtPXRoaXMuZm9udENhY2hlc1trXSxtLmNvbnRleHQ9PT14KXJldHVybiBtO3JldHVybiBtPXtjb250ZXh0Onh9LHRoaXMuZm9udENhY2hlcy5wdXNoKG0pLG19LHk1LnNldHVwVGV4dFN0eWxlPWZ1bmN0aW9uKHgsbSl7dmFyIGs9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiEwLFM9bS5wc3R5bGUoImZvbnQtc3R5bGUiKS5zdHJWYWx1ZSxNPW0ucHN0eWxlKCJmb250LXNpemUiKS5wZlZhbHVlKyJweCIsTz1tLnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxOPW0ucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLCQ9az9tLmVmZmVjdGl2ZU9wYWNpdHkoKSptLnBzdHlsZSgidGV4dC1vcGFjaXR5IikudmFsdWU6MSxIPW0ucHN0eWxlKCJ0ZXh0LW91dGxpbmUtb3BhY2l0eSIpLnZhbHVlKiQscT1tLnBzdHlsZSgiY29sb3IiKS52YWx1ZSxZPW0ucHN0eWxlKCJ0ZXh0LW91dGxpbmUtY29sb3IiKS52YWx1ZTt4LmZvbnQ9UysiICIrTisiICIrTSsiICIrTyx4LmxpbmVKb2luPSJyb3VuZCIsdGhpcy5jb2xvckZpbGxTdHlsZSh4LHFbMF0scVsxXSxxWzJdLCQpLHRoaXMuY29sb3JTdHJva2VTdHlsZSh4LFlbMF0sWVsxXSxZWzJdLEgpfTtmdW5jdGlvbiB6SSh4LG0sayxTLE0pe3ZhciBPPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTo1LE49YXJndW1lbnRzLmxlbmd0aD42P2FyZ3VtZW50c1s2XTp2b2lkIDA7eC5iZWdpblBhdGgoKSx4Lm1vdmVUbyhtK08saykseC5saW5lVG8obStTLU8saykseC5xdWFkcmF0aWNDdXJ2ZVRvKG0rUyxrLG0rUyxrK08pLHgubGluZVRvKG0rUyxrK00tTykseC5xdWFkcmF0aWNDdXJ2ZVRvKG0rUyxrK00sbStTLU8saytNKSx4LmxpbmVUbyhtK08saytNKSx4LnF1YWRyYXRpY0N1cnZlVG8obSxrK00sbSxrK00tTykseC5saW5lVG8obSxrK08pLHgucXVhZHJhdGljQ3VydmVUbyhtLGssbStPLGspLHguY2xvc2VQYXRoKCksTj94LnN0cm9rZSgpOnguZmlsbCgpfXk1LmdldFRleHRBbmdsZT1mdW5jdGlvbih4LG0pe3ZhciBrLFM9eC5fcHJpdmF0ZSxNPVMucnNjcmF0Y2gsTz1tP20rIi0iOiIiLE49eC5wc3R5bGUoTysidGV4dC1yb3RhdGlvbiIpLCQ9SzIoTSwibGFiZWxBbmdsZSIsbSk7cmV0dXJuIE4uc3RyVmFsdWU9PT0iYXV0b3JvdGF0ZSI/az14LmlzRWRnZSgpPyQ6MDpOLnN0clZhbHVlPT09Im5vbmUiP2s9MDprPU4ucGZWYWx1ZSxrfSx5NS5kcmF3VGV4dD1mdW5jdGlvbih4LG0sayl7dmFyIFM9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLE09YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLE89bS5fcHJpdmF0ZSxOPU8ucnNjcmF0Y2gsJD1NP20uZWZmZWN0aXZlT3BhY2l0eSgpOjE7aWYoIShNJiYoJD09PTB8fG0ucHN0eWxlKCJ0ZXh0LW9wYWNpdHkiKS52YWx1ZT09PTApKSl7az09PSJtYWluIiYmKGs9bnVsbCk7dmFyIEg9SzIoTiwibGFiZWxYIixrKSxxPUsyKE4sImxhYmVsWSIsayksWSxaLGNlPXRoaXMuZ2V0TGFiZWxUZXh0KG0sayk7aWYoY2UhPW51bGwmJmNlIT09IiImJiFpc05hTihIKSYmIWlzTmFOKHEpKXt0aGlzLnNldHVwVGV4dFN0eWxlKHgsbSxNKTt2YXIgdmU9az9rKyItIjoiIixtZT1LMihOLCJsYWJlbFdpZHRoIixrKSxMZT1LMihOLCJsYWJlbEhlaWdodCIsayksX2U9bS5wc3R5bGUodmUrInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLEVlPW0ucHN0eWxlKHZlKyJ0ZXh0LW1hcmdpbi15IikucGZWYWx1ZSxCZT1tLmlzRWRnZSgpLFJlPW0ucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnZhbHVlLFZlPW0ucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnZhbHVlO0JlJiYoUmU9ImNlbnRlciIsVmU9ImNlbnRlciIpLEgrPV9lLHErPUVlO3ZhciBjdDtzd2l0Y2goUz9jdD10aGlzLmdldFRleHRBbmdsZShtLGspOmN0PTAsY3QhPT0wJiYoWT1ILFo9cSx4LnRyYW5zbGF0ZShZLFopLHgucm90YXRlKGN0KSxIPTAscT0wKSxWZSl7Y2FzZSJ0b3AiOmJyZWFrO2Nhc2UiY2VudGVyIjpxKz1MZS8yO2JyZWFrO2Nhc2UiYm90dG9tIjpxKz1MZTticmVha312YXIgc3Q9bS5wc3R5bGUoInRleHQtYmFja2dyb3VuZC1vcGFjaXR5IikudmFsdWUsWWU9bS5wc3R5bGUoInRleHQtYm9yZGVyLW9wYWNpdHkiKS52YWx1ZSxtdD1tLnBzdHlsZSgidGV4dC1ib3JkZXItd2lkdGgiKS5wZlZhbHVlLEplPW0ucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtcGFkZGluZyIpLnBmVmFsdWUsTHQ9bS5wc3R5bGUoInRleHQtYmFja2dyb3VuZC1zaGFwZSIpLnN0clZhbHVlLE10PUx0LmluZGV4T2YoInJvdW5kIik9PT0wLHV0PTI7aWYoc3Q+MHx8bXQ+MCYmWWU+MCl7dmFyIFd0PUgtSmU7c3dpdGNoKFJlKXtjYXNlImxlZnQiOld0LT1tZTticmVhaztjYXNlImNlbnRlciI6V3QtPW1lLzI7YnJlYWt9dmFyIFR0PXEtTGUtSmUsX249bWUrMipKZSxobj1MZSsyKkplO2lmKHN0PjApe3ZhciBZdD14LmZpbGxTdHlsZSxEbj1tLnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLWNvbG9yIikudmFsdWU7eC5maWxsU3R5bGU9InJnYmEoIitEblswXSsiLCIrRG5bMV0rIiwiK0RuWzJdKyIsIitzdCokKyIpIixNdD96SSh4LFd0LFR0LF9uLGhuLHV0KTp4LmZpbGxSZWN0KFd0LFR0LF9uLGhuKSx4LmZpbGxTdHlsZT1ZdH1pZihtdD4wJiZZZT4wKXt2YXIgaXI9eC5zdHJva2VTdHlsZSx2cj14LmxpbmVXaWR0aCxObj1tLnBzdHlsZSgidGV4dC1ib3JkZXItY29sb3IiKS52YWx1ZSxwcj1tLnBzdHlsZSgidGV4dC1ib3JkZXItc3R5bGUiKS52YWx1ZTtpZih4LnN0cm9rZVN0eWxlPSJyZ2JhKCIrTm5bMF0rIiwiK05uWzFdKyIsIitOblsyXSsiLCIrWWUqJCsiKSIseC5saW5lV2lkdGg9bXQseC5zZXRMaW5lRGFzaClzd2l0Y2gocHIpe2Nhc2UiZG90dGVkIjp4LnNldExpbmVEYXNoKFsxLDFdKTticmVhaztjYXNlImRhc2hlZCI6eC5zZXRMaW5lRGFzaChbNCwyXSk7YnJlYWs7Y2FzZSJkb3VibGUiOngubGluZVdpZHRoPW10LzQseC5zZXRMaW5lRGFzaChbXSk7YnJlYWs7Y2FzZSJzb2xpZCI6eC5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYoTXQ/ekkoeCxXdCxUdCxfbixobix1dCwic3Ryb2tlIik6eC5zdHJva2VSZWN0KFd0LFR0LF9uLGhuKSxwcj09PSJkb3VibGUiKXt2YXIgRXI9bXQvMjtNdD96SSh4LFd0K0VyLFR0K0VyLF9uLUVyKjIsaG4tRXIqMix1dCwic3Ryb2tlIik6eC5zdHJva2VSZWN0KFd0K0VyLFR0K0VyLF9uLUVyKjIsaG4tRXIqMil9eC5zZXRMaW5lRGFzaCYmeC5zZXRMaW5lRGFzaChbXSkseC5saW5lV2lkdGg9dnIseC5zdHJva2VTdHlsZT1pcn19dmFyIE1yPTIqbS5wc3R5bGUoInRleHQtb3V0bGluZS13aWR0aCIpLnBmVmFsdWU7aWYoTXI+MCYmKHgubGluZVdpZHRoPU1yKSxtLnBzdHlsZSgidGV4dC13cmFwIikudmFsdWU9PT0id3JhcCIpe3ZhciBDcj1LMihOLCJsYWJlbFdyYXBDYWNoZWRMaW5lcyIsayksT3I9SzIoTiwibGFiZWxMaW5lSGVpZ2h0IixrKSxXbj1tZS8yLGJyPXRoaXMuZ2V0TGFiZWxKdXN0aWZpY2F0aW9uKG0pO3N3aXRjaChicj09PSJhdXRvInx8KFJlPT09ImxlZnQiP2JyPT09ImxlZnQiP0grPS1tZTpicj09PSJjZW50ZXIiJiYoSCs9LVduKTpSZT09PSJjZW50ZXIiP2JyPT09ImxlZnQiP0grPS1Xbjpicj09PSJyaWdodCImJihIKz1Xbik6UmU9PT0icmlnaHQiJiYoYnI9PT0iY2VudGVyIj9IKz1Xbjpicj09PSJyaWdodCImJihIKz1tZSkpKSxWZSl7Y2FzZSJ0b3AiOnEtPShDci5sZW5ndGgtMSkqT3I7YnJlYWs7Y2FzZSJjZW50ZXIiOmNhc2UiYm90dG9tIjpxLT0oQ3IubGVuZ3RoLTEpKk9yO2JyZWFrfWZvcih2YXIgU3I9MDtTcjxDci5sZW5ndGg7U3IrKylNcj4wJiZ4LnN0cm9rZVRleHQoQ3JbU3JdLEgscSkseC5maWxsVGV4dChDcltTcl0sSCxxKSxxKz1Pcn1lbHNlIE1yPjAmJnguc3Ryb2tlVGV4dChjZSxILHEpLHguZmlsbFRleHQoY2UsSCxxKTtjdCE9PTAmJih4LnJvdGF0ZSgtY3QpLHgudHJhbnNsYXRlKC1ZLC1aKSl9fX07dmFyIHc4PXt9O3c4LmRyYXdOb2RlPWZ1bmN0aW9uKHgsbSxrKXt2YXIgUz1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITAsTT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITAsTz1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06ITAsTj10aGlzLCQsSCxxPW0uX3ByaXZhdGUsWT1xLnJzY3JhdGNoLFo9bS5wb3NpdGlvbigpO2lmKCEoIVgoWi54KXx8IVgoWi55KSkmJiEoTyYmIW0udmlzaWJsZSgpKSl7dmFyIGNlPU8/bS5lZmZlY3RpdmVPcGFjaXR5KCk6MSx2ZT1OLnVzZVBhdGhzKCksbWUsTGU9ITEsX2U9bS5wYWRkaW5nKCk7JD1tLndpZHRoKCkrMipfZSxIPW0uaGVpZ2h0KCkrMipfZTt2YXIgRWU7ayYmKEVlPWsseC50cmFuc2xhdGUoLUVlLngxLC1FZS55MSkpO2Zvcih2YXIgQmU9bS5wc3R5bGUoImJhY2tncm91bmQtaW1hZ2UiKSxSZT1CZS52YWx1ZSxWZT1uZXcgQXJyYXkoUmUubGVuZ3RoKSxjdD1uZXcgQXJyYXkoUmUubGVuZ3RoKSxzdD0wLFllPTA7WWU8UmUubGVuZ3RoO1llKyspe3ZhciBtdD1SZVtZZV0sSmU9VmVbWWVdPW10IT1udWxsJiZtdCE9PSJub25lIjtpZihKZSl7dmFyIEx0PW0uY3koKS5zdHlsZSgpLmdldEluZGV4ZWRTdHlsZShtLCJiYWNrZ3JvdW5kLWltYWdlLWNyb3Nzb3JpZ2luIiwidmFsdWUiLFllKTtzdCsrLGN0W1llXT1OLmdldENhY2hlZEltYWdlKG10LEx0LGZ1bmN0aW9uKCl7cS5iYWNrZ3JvdW5kVGltZXN0YW1wPURhdGUubm93KCksbS5lbWl0QW5kTm90aWZ5KCJiYWNrZ3JvdW5kIil9KX19dmFyIE10PW0ucHN0eWxlKCJiYWNrZ3JvdW5kLWJsYWNrZW4iKS52YWx1ZSx1dD1tLnBzdHlsZSgiYm9yZGVyLXdpZHRoIikucGZWYWx1ZSxXdD1tLnBzdHlsZSgiYmFja2dyb3VuZC1vcGFjaXR5IikudmFsdWUqY2UsVHQ9bS5wc3R5bGUoImJvcmRlci1jb2xvciIpLnZhbHVlLF9uPW0ucHN0eWxlKCJib3JkZXItc3R5bGUiKS52YWx1ZSxobj1tLnBzdHlsZSgiYm9yZGVyLW9wYWNpdHkiKS52YWx1ZSpjZSxZdD1tLnBzdHlsZSgib3V0bGluZS13aWR0aCIpLnBmVmFsdWUsRG49bS5wc3R5bGUoIm91dGxpbmUtY29sb3IiKS52YWx1ZSxpcj1tLnBzdHlsZSgib3V0bGluZS1zdHlsZSIpLnZhbHVlLHZyPW0ucHN0eWxlKCJvdXRsaW5lLW9wYWNpdHkiKS52YWx1ZSpjZSxObj1tLnBzdHlsZSgib3V0bGluZS1vZmZzZXQiKS52YWx1ZTt4LmxpbmVKb2luPSJtaXRlciI7dmFyIHByPWZ1bmN0aW9uKCl7dmFyIHRyPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpXdDtOLmVsZUZpbGxTdHlsZSh4LG0sdHIpfSxFcj1mdW5jdGlvbigpe3ZhciB0cj1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06aG47Ti5jb2xvclN0cm9rZVN0eWxlKHgsVHRbMF0sVHRbMV0sVHRbMl0sdHIpfSxNcj1mdW5jdGlvbigpe3ZhciB0cj1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06dnI7Ti5jb2xvclN0cm9rZVN0eWxlKHgsRG5bMF0sRG5bMV0sRG5bMl0sdHIpfSxDcj1mdW5jdGlvbih0cixHLEpuLGtyKXt2YXIgbHI9Ti5ub2RlUGF0aENhY2hlPU4ubm9kZVBhdGhDYWNoZXx8W10sVnQ9bGQoSm49PT0icG9seWdvbiI/Sm4rIiwiK2tyLmpvaW4oIiwiKTpKbiwiIitHLCIiK3RyKSxIcz1scltWdF0sd3IsRXM9ITE7cmV0dXJuIEhzIT1udWxsPyh3cj1IcyxFcz0hMCxZLnBhdGhDYWNoZT13cik6KHdyPW5ldyBQYXRoMkQsbHJbVnRdPVkucGF0aENhY2hlPXdyKSx7cGF0aDp3cixjYWNoZUhpdDpFc319LE9yPW0ucHN0eWxlKCJzaGFwZSIpLnN0clZhbHVlLFduPW0ucHN0eWxlKCJzaGFwZS1wb2x5Z29uLXBvaW50cyIpLnBmVmFsdWU7aWYodmUpe3gudHJhbnNsYXRlKFoueCxaLnkpO3ZhciBicj1DcigkLEgsT3IsV24pO21lPWJyLnBhdGgsTGU9YnIuY2FjaGVIaXR9dmFyIFNyPWZ1bmN0aW9uKCl7aWYoIUxlKXt2YXIgdHI9Wjt2ZSYmKHRyPXt4OjAseTowfSksTi5ub2RlU2hhcGVzW04uZ2V0Tm9kZVNoYXBlKG0pXS5kcmF3KG1lfHx4LHRyLngsdHIueSwkLEgpfXZlP3guZmlsbChtZSk6eC5maWxsKCl9LE5yPWZ1bmN0aW9uKCl7Zm9yKHZhciB0cj1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06Y2UsRz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITAsSm49cS5iYWNrZ3JvdW5kaW5nLGtyPTAsbHI9MDtscjxjdC5sZW5ndGg7bHIrKyl7dmFyIFZ0PW0uY3koKS5zdHlsZSgpLmdldEluZGV4ZWRTdHlsZShtLCJiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50IiwidmFsdWUiLGxyKTtpZihHJiZWdD09PSJvdmVyInx8IUcmJlZ0PT09Imluc2lkZSIpe2tyKys7Y29udGludWV9VmVbbHJdJiZjdFtscl0uY29tcGxldGUmJiFjdFtscl0uZXJyb3ImJihrcisrLE4uZHJhd0luc2NyaWJlZEltYWdlKHgsY3RbbHJdLG0sbHIsdHIpKX1xLmJhY2tncm91bmRpbmc9a3IhPT1zdCxKbiE9PXEuYmFja2dyb3VuZGluZyYmbS51cGRhdGVTdHlsZSghMSl9LFNpPWZ1bmN0aW9uKCl7dmFyIHRyPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMSxHPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpjZTtOLmhhc1BpZShtKSYmKE4uZHJhd1BpZSh4LG0sRyksdHImJih2ZXx8Ti5ub2RlU2hhcGVzW04uZ2V0Tm9kZVNoYXBlKG0pXS5kcmF3KHgsWi54LFoueSwkLEgpKSl9LHlzPWZ1bmN0aW9uKCl7dmFyIHRyPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpjZSxHPShNdD4wP010Oi1NdCkqdHIsSm49TXQ+MD8wOjI1NTtNdCE9PTAmJihOLmNvbG9yRmlsbFN0eWxlKHgsSm4sSm4sSm4sRyksdmU/eC5maWxsKG1lKTp4LmZpbGwoKSl9LHBhPWZ1bmN0aW9uKCl7aWYodXQ+MCl7aWYoeC5saW5lV2lkdGg9dXQseC5saW5lQ2FwPSJidXR0Iix4LnNldExpbmVEYXNoKXN3aXRjaChfbil7Y2FzZSJkb3R0ZWQiOnguc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjp4LnNldExpbmVEYXNoKFs0LDJdKTticmVhaztjYXNlInNvbGlkIjpjYXNlImRvdWJsZSI6eC5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYodmU/eC5zdHJva2UobWUpOnguc3Ryb2tlKCksX249PT0iZG91YmxlIil7eC5saW5lV2lkdGg9dXQvMzt2YXIgdHI9eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsdmU/eC5zdHJva2UobWUpOnguc3Ryb2tlKCkseC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249dHJ9eC5zZXRMaW5lRGFzaCYmeC5zZXRMaW5lRGFzaChbXSl9fSxNaT1mdW5jdGlvbigpe2lmKFl0PjApe2lmKHgubGluZVdpZHRoPVl0LHgubGluZUNhcD0iYnV0dCIseC5zZXRMaW5lRGFzaClzd2l0Y2goaXIpe2Nhc2UiZG90dGVkIjp4LnNldExpbmVEYXNoKFsxLDFdKTticmVhaztjYXNlImRhc2hlZCI6eC5zZXRMaW5lRGFzaChbNCwyXSk7YnJlYWs7Y2FzZSJzb2xpZCI6Y2FzZSJkb3VibGUiOnguc2V0TGluZURhc2goW10pO2JyZWFrfXZhciB0cj1aO3ZlJiYodHI9e3g6MCx5OjB9KTt2YXIgRz1OLmdldE5vZGVTaGFwZShtKSxKbj0oJCt1dCsoWXQrTm4pKS8kLGtyPShIK3V0KyhZdCtObikpL0gsbHI9JCpKbixWdD1IKmtyLEhzPU4ubm9kZVNoYXBlc1tHXS5wb2ludHMsd3I7aWYodmUpe3ZhciBFcz1DcihscixWdCxHLEhzKTt3cj1Fcy5wYXRofWlmKEc9PT0iZWxsaXBzZSIpTi5kcmF3RWxsaXBzZVBhdGgod3J8fHgsdHIueCx0ci55LGxyLFZ0KTtlbHNlIGlmKFsicm91bmQtZGlhbW9uZCIsInJvdW5kLWhlcHRhZ29uIiwicm91bmQtaGV4YWdvbiIsInJvdW5kLW9jdGFnb24iLCJyb3VuZC1wZW50YWdvbiIsInJvdW5kLXBvbHlnb24iLCJyb3VuZC10cmlhbmdsZSIsInJvdW5kLXRhZyJdLmluY2x1ZGVzKEcpKXt2YXIgZ289MCwkYz0wLHphPTA7Rz09PSJyb3VuZC1kaWFtb25kIj9nbz0odXQrTm4rWXQpKjEuNDpHPT09InJvdW5kLWhlcHRhZ29uIj8oZ289KHV0K05uK1l0KSoxLjA3NSx6YT0tKHV0LzIrTm4rWXQpLzM1KTpHPT09InJvdW5kLWhleGFnb24iP2dvPSh1dCtObitZdCkqMS4xMjpHPT09InJvdW5kLXBlbnRhZ29uIj8oZ289KHV0K05uK1l0KSoxLjEzLHphPS0odXQvMitObitZdCkvMTUpOkc9PT0icm91bmQtdGFnIj8oZ289KHV0K05uK1l0KSoxLjEyLCRjPSh1dC8yK1l0K05uKSouMDcpOkc9PT0icm91bmQtdHJpYW5nbGUiJiYoZ289KHV0K05uK1l0KSooTWF0aC5QSS8yKSx6YT0tKHV0K05uLzIrWXQpL01hdGguUEkpLGdvIT09MCYmKEpuPSgkK2dvKS8kLGtyPShIK2dvKS9IKSxOLmRyYXdSb3VuZFBvbHlnb25QYXRoKHdyfHx4LHRyLngrJGMsdHIueSt6YSwkKkpuLEgqa3IsSHMpfWVsc2UgaWYoWyJyb3VuZHJlY3RhbmdsZSIsInJvdW5kLXJlY3RhbmdsZSJdLmluY2x1ZGVzKEcpKU4uZHJhd1JvdW5kUmVjdGFuZ2xlUGF0aCh3cnx8eCx0ci54LHRyLnksbHIsVnQpO2Vsc2UgaWYoWyJjdXRyZWN0YW5nbGUiLCJjdXQtcmVjdGFuZ2xlIl0uaW5jbHVkZXMoRykpTi5kcmF3Q3V0UmVjdGFuZ2xlUGF0aCh3cnx8eCx0ci54LHRyLnksbHIsVnQpO2Vsc2UgaWYoWyJib3R0b21yb3VuZHJlY3RhbmdsZSIsImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiXS5pbmNsdWRlcyhHKSlOLmRyYXdCb3R0b21Sb3VuZFJlY3RhbmdsZVBhdGgod3J8fHgsdHIueCx0ci55LGxyLFZ0KTtlbHNlIGlmKEc9PT0iYmFycmVsIilOLmRyYXdCYXJyZWxQYXRoKHdyfHx4LHRyLngsdHIueSxscixWdCk7ZWxzZSBpZihHLnN0YXJ0c1dpdGgoInBvbHlnb24iKXx8WyJyaG9tYm9pZCIsInJpZ2h0LXJob21ib2lkIiwicm91bmQtdGFnIiwidGFnIiwidmVlIl0uaW5jbHVkZXMoRykpe3ZhciBTYz0odXQrWXQrTm4pLyQ7SHM9Z1MocFMoSHMsU2MpKSxOLmRyYXdQb2x5Z29uUGF0aCh3cnx8eCx0ci54LHRyLnksJCxILEhzKX1lbHNle3ZhciBiYT0odXQrWXQrTm4pLyQ7SHM9Z1MocFMoSHMsLWJhKSksTi5kcmF3UG9seWdvblBhdGgod3J8fHgsdHIueCx0ci55LCQsSCxIcyl9aWYodmU/eC5zdHJva2Uod3IpOnguc3Ryb2tlKCksaXI9PT0iZG91YmxlIil7eC5saW5lV2lkdGg9dXQvMzt2YXIgeG89eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsdmU/eC5zdHJva2Uod3IpOnguc3Ryb2tlKCkseC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249eG99eC5zZXRMaW5lRGFzaCYmeC5zZXRMaW5lRGFzaChbXSl9fSxnaT1mdW5jdGlvbigpe00mJk4uZHJhd05vZGVPdmVybGF5KHgsbSxaLCQsSCl9LGZzPWZ1bmN0aW9uKCl7TSYmTi5kcmF3Tm9kZVVuZGVybGF5KHgsbSxaLCQsSCl9LEZzPWZ1bmN0aW9uKCl7Ti5kcmF3RWxlbWVudFRleHQoeCxtLG51bGwsUyl9LHhzPW0ucHN0eWxlKCJnaG9zdCIpLnZhbHVlPT09InllcyI7aWYoeHMpe3ZhciBScz1tLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXgiKS5wZlZhbHVlLHlvPW0ucHN0eWxlKCJnaG9zdC1vZmZzZXQteSIpLnBmVmFsdWUsJGE9bS5wc3R5bGUoImdob3N0LW9wYWNpdHkiKS52YWx1ZSxEYT0kYSpjZTt4LnRyYW5zbGF0ZShScyx5byksTXIoKSxNaSgpLHByKCRhKld0KSxTcigpLE5yKERhLCEwKSxFcigkYSpobikscGEoKSxTaShNdCE9PTB8fHV0IT09MCksTnIoRGEsITEpLHlzKERhKSx4LnRyYW5zbGF0ZSgtUnMsLXlvKX12ZSYmeC50cmFuc2xhdGUoLVoueCwtWi55KSxmcygpLHZlJiZ4LnRyYW5zbGF0ZShaLngsWi55KSxNcigpLE1pKCkscHIoKSxTcigpLE5yKGNlLCEwKSxFcigpLHBhKCksU2koTXQhPT0wfHx1dCE9PTApLE5yKGNlLCExKSx5cygpLHZlJiZ4LnRyYW5zbGF0ZSgtWi54LC1aLnkpLEZzKCksZ2koKSxrJiZ4LnRyYW5zbGF0ZShFZS54MSxFZS55MSl9fTt2YXIgcUk9ZnVuY3Rpb24obSl7aWYoIVsib3ZlcmxheSIsInVuZGVybGF5Il0uaW5jbHVkZXMobSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0YXRlIik7cmV0dXJuIGZ1bmN0aW9uKGssUyxNLE8sTil7dmFyICQ9dGhpcztpZihTLnZpc2libGUoKSl7dmFyIEg9Uy5wc3R5bGUoIiIuY29uY2F0KG0sIi1wYWRkaW5nIikpLnBmVmFsdWUscT1TLnBzdHlsZSgiIi5jb25jYXQobSwiLW9wYWNpdHkiKSkudmFsdWUsWT1TLnBzdHlsZSgiIi5jb25jYXQobSwiLWNvbG9yIikpLnZhbHVlLFo9Uy5wc3R5bGUoIiIuY29uY2F0KG0sIi1zaGFwZSIpKS52YWx1ZTtpZihxPjApe2lmKE09TXx8Uy5wb3NpdGlvbigpLE89PW51bGx8fE49PW51bGwpe3ZhciBjZT1TLnBhZGRpbmcoKTtPPVMud2lkdGgoKSsyKmNlLE49Uy5oZWlnaHQoKSsyKmNlfSQuY29sb3JGaWxsU3R5bGUoayxZWzBdLFlbMV0sWVsyXSxxKSwkLm5vZGVTaGFwZXNbWl0uZHJhdyhrLE0ueCxNLnksTytIKjIsTitIKjIpLGsuZmlsbCgpfX19fTt3OC5kcmF3Tm9kZU92ZXJsYXk9cUkoIm92ZXJsYXkiKSx3OC5kcmF3Tm9kZVVuZGVybGF5PXFJKCJ1bmRlcmxheSIpLHc4Lmhhc1BpZT1mdW5jdGlvbih4KXtyZXR1cm4geD14WzBdLHguX3ByaXZhdGUuaGFzUGllfSx3OC5kcmF3UGllPWZ1bmN0aW9uKHgsbSxrLFMpe209bVswXSxTPVN8fG0ucG9zaXRpb24oKTt2YXIgTT1tLmN5KCkuc3R5bGUoKSxPPW0ucHN0eWxlKCJwaWUtc2l6ZSIpLE49Uy54LCQ9Uy55LEg9bS53aWR0aCgpLHE9bS5oZWlnaHQoKSxZPU1hdGgubWluKEgscSkvMixaPTAsY2U9dGhpcy51c2VQYXRocygpO2NlJiYoTj0wLCQ9MCksTy51bml0cz09PSIlIj9ZPVkqTy5wZlZhbHVlOk8ucGZWYWx1ZSE9PXZvaWQgMCYmKFk9Ty5wZlZhbHVlLzIpO2Zvcih2YXIgdmU9MTt2ZTw9TS5waWVCYWNrZ3JvdW5kTjt2ZSsrKXt2YXIgbWU9bS5wc3R5bGUoInBpZS0iK3ZlKyItYmFja2dyb3VuZC1zaXplIikudmFsdWUsTGU9bS5wc3R5bGUoInBpZS0iK3ZlKyItYmFja2dyb3VuZC1jb2xvciIpLnZhbHVlLF9lPW0ucHN0eWxlKCJwaWUtIit2ZSsiLWJhY2tncm91bmQtb3BhY2l0eSIpLnZhbHVlKmssRWU9bWUvMTAwO0VlK1o+MSYmKEVlPTEtWik7dmFyIEJlPTEuNSpNYXRoLlBJKzIqTWF0aC5QSSpaLFJlPTIqTWF0aC5QSSpFZSxWZT1CZStSZTttZT09PTB8fFo+PTF8fForRWU+MXx8KHguYmVnaW5QYXRoKCkseC5tb3ZlVG8oTiwkKSx4LmFyYyhOLCQsWSxCZSxWZSkseC5jbG9zZVBhdGgoKSx0aGlzLmNvbG9yRmlsbFN0eWxlKHgsTGVbMF0sTGVbMV0sTGVbMl0sX2UpLHguZmlsbCgpLForPUVlKX19O3ZhciBxZz17fSx4aWU9MTAwO3FnLmdldFBpeGVsUmF0aW89ZnVuY3Rpb24oKXt2YXIgeD10aGlzLmRhdGEuY29udGV4dHNbMF07aWYodGhpcy5mb3JjZWRQaXhlbFJhdGlvIT1udWxsKXJldHVybiB0aGlzLmZvcmNlZFBpeGVsUmF0aW87dmFyIG09eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx4LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHgubW96QmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHgub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHguYmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8MTtyZXR1cm4od2luZG93LmRldmljZVBpeGVsUmF0aW98fDEpL219LHFnLnBhaW50Q2FjaGU9ZnVuY3Rpb24oeCl7Zm9yKHZhciBtPXRoaXMucGFpbnRDYWNoZXM9dGhpcy5wYWludENhY2hlc3x8W10saz0hMCxTLE09MDtNPG0ubGVuZ3RoO00rKylpZihTPW1bTV0sUy5jb250ZXh0PT09eCl7az0hMTticmVha31yZXR1cm4gayYmKFM9e2NvbnRleHQ6eH0sbS5wdXNoKFMpKSxTfSxxZy5jcmVhdGVHcmFkaWVudFN0eWxlRm9yPWZ1bmN0aW9uKHgsbSxrLFMsTSl7dmFyIE8sTj10aGlzLnVzZVBhdGhzKCksJD1rLnBzdHlsZShtKyItZ3JhZGllbnQtc3RvcC1jb2xvcnMiKS52YWx1ZSxIPWsucHN0eWxlKG0rIi1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyIpLnBmVmFsdWU7aWYoUz09PSJyYWRpYWwtZ3JhZGllbnQiKWlmKGsuaXNFZGdlKCkpe3ZhciBxPWsuc291cmNlRW5kcG9pbnQoKSxZPWsudGFyZ2V0RW5kcG9pbnQoKSxaPWsubWlkcG9pbnQoKSxjZT1oNShxLFopLHZlPWg1KFksWik7Tz14LmNyZWF0ZVJhZGlhbEdyYWRpZW50KFoueCxaLnksMCxaLngsWi55LE1hdGgubWF4KGNlLHZlKSl9ZWxzZXt2YXIgbWU9Tj97eDowLHk6MH06ay5wb3NpdGlvbigpLExlPWsucGFkZGVkV2lkdGgoKSxfZT1rLnBhZGRlZEhlaWdodCgpO089eC5jcmVhdGVSYWRpYWxHcmFkaWVudChtZS54LG1lLnksMCxtZS54LG1lLnksTWF0aC5tYXgoTGUsX2UpKX1lbHNlIGlmKGsuaXNFZGdlKCkpe3ZhciBFZT1rLnNvdXJjZUVuZHBvaW50KCksQmU9ay50YXJnZXRFbmRwb2ludCgpO089eC5jcmVhdGVMaW5lYXJHcmFkaWVudChFZS54LEVlLnksQmUueCxCZS55KX1lbHNle3ZhciBSZT1OP3t4OjAseTowfTprLnBvc2l0aW9uKCksVmU9ay5wYWRkZWRXaWR0aCgpLGN0PWsucGFkZGVkSGVpZ2h0KCksc3Q9VmUvMixZZT1jdC8yLG10PWsucHN0eWxlKCJiYWNrZ3JvdW5kLWdyYWRpZW50LWRpcmVjdGlvbiIpLnZhbHVlO3N3aXRjaChtdCl7Y2FzZSJ0by1ib3R0b20iOk89eC5jcmVhdGVMaW5lYXJHcmFkaWVudChSZS54LFJlLnktWWUsUmUueCxSZS55K1llKTticmVhaztjYXNlInRvLXRvcCI6Tz14LmNyZWF0ZUxpbmVhckdyYWRpZW50KFJlLngsUmUueStZZSxSZS54LFJlLnktWWUpO2JyZWFrO2Nhc2UidG8tbGVmdCI6Tz14LmNyZWF0ZUxpbmVhckdyYWRpZW50KFJlLngrc3QsUmUueSxSZS54LXN0LFJlLnkpO2JyZWFrO2Nhc2UidG8tcmlnaHQiOk89eC5jcmVhdGVMaW5lYXJHcmFkaWVudChSZS54LXN0LFJlLnksUmUueCtzdCxSZS55KTticmVhaztjYXNlInRvLWJvdHRvbS1yaWdodCI6Y2FzZSJ0by1yaWdodC1ib3R0b20iOk89eC5jcmVhdGVMaW5lYXJHcmFkaWVudChSZS54LXN0LFJlLnktWWUsUmUueCtzdCxSZS55K1llKTticmVhaztjYXNlInRvLXRvcC1yaWdodCI6Y2FzZSJ0by1yaWdodC10b3AiOk89eC5jcmVhdGVMaW5lYXJHcmFkaWVudChSZS54LXN0LFJlLnkrWWUsUmUueCtzdCxSZS55LVllKTticmVhaztjYXNlInRvLWJvdHRvbS1sZWZ0IjpjYXNlInRvLWxlZnQtYm90dG9tIjpPPXguY3JlYXRlTGluZWFyR3JhZGllbnQoUmUueCtzdCxSZS55LVllLFJlLngtc3QsUmUueStZZSk7YnJlYWs7Y2FzZSJ0by10b3AtbGVmdCI6Y2FzZSJ0by1sZWZ0LXRvcCI6Tz14LmNyZWF0ZUxpbmVhckdyYWRpZW50KFJlLngrc3QsUmUueStZZSxSZS54LXN0LFJlLnktWWUpO2JyZWFrfX1pZighTylyZXR1cm4gbnVsbDtmb3IodmFyIEplPUgubGVuZ3RoPT09JC5sZW5ndGgsTHQ9JC5sZW5ndGgsTXQ9MDtNdDxMdDtNdCsrKU8uYWRkQ29sb3JTdG9wKEplP0hbTXRdOk10LyhMdC0xKSwicmdiYSgiKyRbTXRdWzBdKyIsIiskW010XVsxXSsiLCIrJFtNdF1bMl0rIiwiK00rIikiKTtyZXR1cm4gT30scWcuZ3JhZGllbnRGaWxsU3R5bGU9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09dGhpcy5jcmVhdGVHcmFkaWVudFN0eWxlRm9yKHgsImJhY2tncm91bmQiLG0sayxTKTtpZighTSlyZXR1cm4gbnVsbDt4LmZpbGxTdHlsZT1NfSxxZy5jb2xvckZpbGxTdHlsZT1mdW5jdGlvbih4LG0sayxTLE0pe3guZmlsbFN0eWxlPSJyZ2JhKCIrbSsiLCIraysiLCIrUysiLCIrTSsiKSJ9LHFnLmVsZUZpbGxTdHlsZT1mdW5jdGlvbih4LG0sayl7dmFyIFM9bS5wc3R5bGUoImJhY2tncm91bmQtZmlsbCIpLnZhbHVlO2lmKFM9PT0ibGluZWFyLWdyYWRpZW50Inx8Uz09PSJyYWRpYWwtZ3JhZGllbnQiKXRoaXMuZ3JhZGllbnRGaWxsU3R5bGUoeCxtLFMsayk7ZWxzZXt2YXIgTT1tLnBzdHlsZSgiYmFja2dyb3VuZC1jb2xvciIpLnZhbHVlO3RoaXMuY29sb3JGaWxsU3R5bGUoeCxNWzBdLE1bMV0sTVsyXSxrKX19LHFnLmdyYWRpZW50U3Ryb2tlU3R5bGU9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09dGhpcy5jcmVhdGVHcmFkaWVudFN0eWxlRm9yKHgsImxpbmUiLG0sayxTKTtpZighTSlyZXR1cm4gbnVsbDt4LnN0cm9rZVN0eWxlPU19LHFnLmNvbG9yU3Ryb2tlU3R5bGU9ZnVuY3Rpb24oeCxtLGssUyxNKXt4LnN0cm9rZVN0eWxlPSJyZ2JhKCIrbSsiLCIraysiLCIrUysiLCIrTSsiKSJ9LHFnLmVsZVN0cm9rZVN0eWxlPWZ1bmN0aW9uKHgsbSxrKXt2YXIgUz1tLnBzdHlsZSgibGluZS1maWxsIikudmFsdWU7aWYoUz09PSJsaW5lYXItZ3JhZGllbnQifHxTPT09InJhZGlhbC1ncmFkaWVudCIpdGhpcy5ncmFkaWVudFN0cm9rZVN0eWxlKHgsbSxTLGspO2Vsc2V7dmFyIE09bS5wc3R5bGUoImxpbmUtY29sb3IiKS52YWx1ZTt0aGlzLmNvbG9yU3Ryb2tlU3R5bGUoeCxNWzBdLE1bMV0sTVsyXSxrKX19LHFnLm1hdGNoQ2FudmFzU2l6ZT1mdW5jdGlvbih4KXt2YXIgbT10aGlzLGs9bS5kYXRhLFM9bS5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCksTT1TWzJdLE89U1szXSxOPW0uZ2V0UGl4ZWxSYXRpbygpLCQ9bS5tb3Rpb25CbHVyUHhSYXRpbzsoeD09PW0uZGF0YS5idWZmZXJDYW52YXNlc1ttLk1PVElPTkJMVVJfQlVGRkVSX05PREVdfHx4PT09bS5kYXRhLmJ1ZmZlckNhbnZhc2VzW20uTU9USU9OQkxVUl9CVUZGRVJfRFJBR10pJiYoTj0kKTt2YXIgSD1NKk4scT1PKk4sWTtpZighKEg9PT1tLmNhbnZhc1dpZHRoJiZxPT09bS5jYW52YXNIZWlnaHQpKXttLmZvbnRDYWNoZXM9bnVsbDt2YXIgWj1rLmNhbnZhc0NvbnRhaW5lcjtaLnN0eWxlLndpZHRoPU0rInB4IixaLnN0eWxlLmhlaWdodD1PKyJweCI7Zm9yKHZhciBjZT0wO2NlPG0uQ0FOVkFTX0xBWUVSUztjZSsrKVk9ay5jYW52YXNlc1tjZV0sWS53aWR0aD1ILFkuaGVpZ2h0PXEsWS5zdHlsZS53aWR0aD1NKyJweCIsWS5zdHlsZS5oZWlnaHQ9TysicHgiO2Zvcih2YXIgY2U9MDtjZTxtLkJVRkZFUl9DT1VOVDtjZSsrKVk9ay5idWZmZXJDYW52YXNlc1tjZV0sWS53aWR0aD1ILFkuaGVpZ2h0PXEsWS5zdHlsZS53aWR0aD1NKyJweCIsWS5zdHlsZS5oZWlnaHQ9TysicHgiO20udGV4dHVyZU11bHQ9MSxOPD0xJiYoWT1rLmJ1ZmZlckNhbnZhc2VzW20uVEVYVFVSRV9CVUZGRVJdLG0udGV4dHVyZU11bHQ9MixZLndpZHRoPUgqbS50ZXh0dXJlTXVsdCxZLmhlaWdodD1xKm0udGV4dHVyZU11bHQpLG0uY2FudmFzV2lkdGg9SCxtLmNhbnZhc0hlaWdodD1xfX0scWcucmVuZGVyVG89ZnVuY3Rpb24oeCxtLGssUyl7dGhpcy5yZW5kZXIoe2ZvcmNlZENvbnRleHQ6eCxmb3JjZWRab29tOm0sZm9yY2VkUGFuOmssZHJhd0FsbExheWVyczohMCxmb3JjZWRQeFJhdGlvOlN9KX0scWcucmVuZGVyPWZ1bmN0aW9uKHgpe3g9eHx8Y2ooKTt2YXIgbT14LmZvcmNlZENvbnRleHQsaz14LmRyYXdBbGxMYXllcnMsUz14LmRyYXdPbmx5Tm9kZUxheWVyLE09eC5mb3JjZWRab29tLE89eC5mb3JjZWRQYW4sTj10aGlzLCQ9eC5mb3JjZWRQeFJhdGlvPT09dm9pZCAwP3RoaXMuZ2V0UGl4ZWxSYXRpbygpOnguZm9yY2VkUHhSYXRpbyxIPU4uY3kscT1OLmRhdGEsWT1xLmNhbnZhc05lZWRzUmVkcmF3LFo9Ti50ZXh0dXJlT25WaWV3cG9ydCYmIW0mJihOLnBpbmNoaW5nfHxOLmhvdmVyRGF0YS5kcmFnZ2luZ3x8Ti5zd2lwZVBhbm5pbmd8fE4uZGF0YS53aGVlbFpvb21pbmcpLGNlPXgubW90aW9uQmx1ciE9PXZvaWQgMD94Lm1vdGlvbkJsdXI6Ti5tb3Rpb25CbHVyLHZlPU4ubW90aW9uQmx1clB4UmF0aW8sbWU9SC5oYXNDb21wb3VuZE5vZGVzKCksTGU9Ti5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzLF9lPSEhKE4uaG92ZXJEYXRhLnNlbGVjdGluZ3x8Ti50b3VjaERhdGEuc2VsZWN0aW5nKTtjZT1jZSYmIW0mJk4ubW90aW9uQmx1ckVuYWJsZWQmJiFfZTt2YXIgRWU9Y2U7bXx8KE4ucHJldlB4UmF0aW8hPT0kJiYoTi5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGUoKSxOLm1hdGNoQ2FudmFzU2l6ZShOLmNvbnRhaW5lciksTi5yZWRyYXdIaW50KCJlbGVzIiwhMCksTi5yZWRyYXdIaW50KCJkcmFnIiwhMCkpLE4ucHJldlB4UmF0aW89JCksIW0mJk4ubW90aW9uQmx1clRpbWVvdXQmJmNsZWFyVGltZW91dChOLm1vdGlvbkJsdXJUaW1lb3V0KSxjZSYmKE4ubWJGcmFtZXM9PW51bGwmJihOLm1iRnJhbWVzPTApLE4ubWJGcmFtZXMrKyxOLm1iRnJhbWVzPDMmJihFZT0hMSksTi5tYkZyYW1lcz5OLm1pbk1iTG93UXVhbEZyYW1lcyYmKE4ubW90aW9uQmx1clB4UmF0aW89Ti5tYlB4UkJsdXJyeSkpLE4uY2xlYXJpbmdNb3Rpb25CbHVyJiYoTi5tb3Rpb25CbHVyUHhSYXRpbz0xKSxOLnRleHR1cmVEcmF3TGFzdEZyYW1lJiYhWiYmKFlbTi5OT0RFXT0hMCxZW04uU0VMRUNUX0JPWF09ITApO3ZhciBCZT1ILnN0eWxlKCksUmU9SC56b29tKCksVmU9TSE9PXZvaWQgMD9NOlJlLGN0PUgucGFuKCksc3Q9e3g6Y3QueCx5OmN0Lnl9LFllPXt6b29tOlJlLHBhbjp7eDpjdC54LHk6Y3QueX19LG10PU4ucHJldlZpZXdwb3J0LEplPW10PT09dm9pZCAwfHxZZS56b29tIT09bXQuem9vbXx8WWUucGFuLnghPT1tdC5wYW4ueHx8WWUucGFuLnkhPT1tdC5wYW4ueTshSmUmJiEoTGUmJiFtZSkmJihOLm1vdGlvbkJsdXJQeFJhdGlvPTEpLE8mJihzdD1PKSxWZSo9JCxzdC54Kj0kLHN0LnkqPSQ7dmFyIEx0PU4uZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKTtmdW5jdGlvbiBNdChNaSxnaSxmcyxGcyx4cyl7dmFyIFJzPU1pLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjtNaS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsTi5jb2xvckZpbGxTdHlsZShNaSwyNTUsMjU1LDI1NSxOLm1vdGlvbkJsdXJUcmFuc3BhcmVuY3kpLE1pLmZpbGxSZWN0KGdpLGZzLEZzLHhzKSxNaS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249UnN9ZnVuY3Rpb24gdXQoTWksZ2kpe3ZhciBmcyxGcyx4cyxSczshTi5jbGVhcmluZ01vdGlvbkJsdXImJihNaT09PXEuYnVmZmVyQ29udGV4dHNbTi5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXXx8TWk9PT1xLmJ1ZmZlckNvbnRleHRzW04uTU9USU9OQkxVUl9CVUZGRVJfRFJBR10pPyhmcz17eDpjdC54KnZlLHk6Y3QueSp2ZX0sRnM9UmUqdmUseHM9Ti5jYW52YXNXaWR0aCp2ZSxScz1OLmNhbnZhc0hlaWdodCp2ZSk6KGZzPXN0LEZzPVZlLHhzPU4uY2FudmFzV2lkdGgsUnM9Ti5jYW52YXNIZWlnaHQpLE1pLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksZ2k9PT0ibW90aW9uQmx1ciI/TXQoTWksMCwwLHhzLFJzKTohbSYmKGdpPT09dm9pZCAwfHxnaSkmJk1pLmNsZWFyUmVjdCgwLDAseHMsUnMpLGt8fChNaS50cmFuc2xhdGUoZnMueCxmcy55KSxNaS5zY2FsZShGcyxGcykpLE8mJk1pLnRyYW5zbGF0ZShPLngsTy55KSxNJiZNaS5zY2FsZShNLE0pfWlmKFp8fChOLnRleHR1cmVEcmF3TGFzdEZyYW1lPSExKSxaKXtpZihOLnRleHR1cmVEcmF3TGFzdEZyYW1lPSEwLCFOLnRleHR1cmVDYWNoZSl7Ti50ZXh0dXJlQ2FjaGU9e30sTi50ZXh0dXJlQ2FjaGUuYmI9SC5tdXRhYmxlRWxlbWVudHMoKS5ib3VuZGluZ0JveCgpLE4udGV4dHVyZUNhY2hlLnRleHR1cmU9Ti5kYXRhLmJ1ZmZlckNhbnZhc2VzW04uVEVYVFVSRV9CVUZGRVJdO3ZhciBXdD1OLmRhdGEuYnVmZmVyQ29udGV4dHNbTi5URVhUVVJFX0JVRkZFUl07V3Quc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxXdC5jbGVhclJlY3QoMCwwLE4uY2FudmFzV2lkdGgqTi50ZXh0dXJlTXVsdCxOLmNhbnZhc0hlaWdodCpOLnRleHR1cmVNdWx0KSxOLnJlbmRlcih7Zm9yY2VkQ29udGV4dDpXdCxkcmF3T25seU5vZGVMYXllcjohMCxmb3JjZWRQeFJhdGlvOiQqTi50ZXh0dXJlTXVsdH0pO3ZhciBZZT1OLnRleHR1cmVDYWNoZS52aWV3cG9ydD17em9vbTpILnpvb20oKSxwYW46SC5wYW4oKSx3aWR0aDpOLmNhbnZhc1dpZHRoLGhlaWdodDpOLmNhbnZhc0hlaWdodH07WWUubXBhbj17eDooMC1ZZS5wYW4ueCkvWWUuem9vbSx5OigwLVllLnBhbi55KS9ZZS56b29tfX1ZW04uRFJBR109ITEsWVtOLk5PREVdPSExO3ZhciBUdD1xLmNvbnRleHRzW04uTk9ERV0sX249Ti50ZXh0dXJlQ2FjaGUudGV4dHVyZSxZZT1OLnRleHR1cmVDYWNoZS52aWV3cG9ydDtUdC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGNlP010KFR0LDAsMCxZZS53aWR0aCxZZS5oZWlnaHQpOlR0LmNsZWFyUmVjdCgwLDAsWWUud2lkdGgsWWUuaGVpZ2h0KTt2YXIgaG49QmUuY29yZSgib3V0c2lkZS10ZXh0dXJlLWJnLWNvbG9yIikudmFsdWUsWXQ9QmUuY29yZSgib3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHkiKS52YWx1ZTtOLmNvbG9yRmlsbFN0eWxlKFR0LGhuWzBdLGhuWzFdLGhuWzJdLFl0KSxUdC5maWxsUmVjdCgwLDAsWWUud2lkdGgsWWUuaGVpZ2h0KTt2YXIgUmU9SC56b29tKCk7dXQoVHQsITEpLFR0LmNsZWFyUmVjdChZZS5tcGFuLngsWWUubXBhbi55LFllLndpZHRoL1llLnpvb20vJCxZZS5oZWlnaHQvWWUuem9vbS8kKSxUdC5kcmF3SW1hZ2UoX24sWWUubXBhbi54LFllLm1wYW4ueSxZZS53aWR0aC9ZZS56b29tLyQsWWUuaGVpZ2h0L1llLnpvb20vJCl9ZWxzZSBOLnRleHR1cmVPblZpZXdwb3J0JiYhbSYmKE4udGV4dHVyZUNhY2hlPW51bGwpO3ZhciBEbj1ILmV4dGVudCgpLGlyPU4ucGluY2hpbmd8fE4uaG92ZXJEYXRhLmRyYWdnaW5nfHxOLnN3aXBlUGFubmluZ3x8Ti5kYXRhLndoZWVsWm9vbWluZ3x8Ti5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHxOLmN5LmFuaW1hdGVkKCksdnI9Ti5oaWRlRWRnZXNPblZpZXdwb3J0JiZpcixObj1bXTtpZihObltOLk5PREVdPSFZW04uTk9ERV0mJmNlJiYhTi5jbGVhcmVkRm9yTW90aW9uQmx1cltOLk5PREVdfHxOLmNsZWFyaW5nTW90aW9uQmx1cixObltOLk5PREVdJiYoTi5jbGVhcmVkRm9yTW90aW9uQmx1cltOLk5PREVdPSEwKSxObltOLkRSQUddPSFZW04uRFJBR10mJmNlJiYhTi5jbGVhcmVkRm9yTW90aW9uQmx1cltOLkRSQUddfHxOLmNsZWFyaW5nTW90aW9uQmx1cixObltOLkRSQUddJiYoTi5jbGVhcmVkRm9yTW90aW9uQmx1cltOLkRSQUddPSEwKSxZW04uTk9ERV18fGt8fFN8fE5uW04uTk9ERV0pe3ZhciBwcj1jZSYmIU5uW04uTk9ERV0mJnZlIT09MSxUdD1tfHwocHI/Ti5kYXRhLmJ1ZmZlckNvbnRleHRzW04uTU9USU9OQkxVUl9CVUZGRVJfTk9ERV06cS5jb250ZXh0c1tOLk5PREVdKSxFcj1jZSYmIXByPyJtb3Rpb25CbHVyIjp2b2lkIDA7dXQoVHQsRXIpLHZyP04uZHJhd0NhY2hlZE5vZGVzKFR0LEx0Lm5vbmRyYWcsJCxEbik6Ti5kcmF3TGF5ZXJlZEVsZW1lbnRzKFR0LEx0Lm5vbmRyYWcsJCxEbiksTi5kZWJ1ZyYmTi5kcmF3RGVidWdQb2ludHMoVHQsTHQubm9uZHJhZyksIWsmJiFjZSYmKFlbTi5OT0RFXT0hMSl9aWYoIVMmJihZW04uRFJBR118fGt8fE5uW04uRFJBR10pKXt2YXIgcHI9Y2UmJiFObltOLkRSQUddJiZ2ZSE9PTEsVHQ9bXx8KHByP04uZGF0YS5idWZmZXJDb250ZXh0c1tOLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddOnEuY29udGV4dHNbTi5EUkFHXSk7dXQoVHQsY2UmJiFwcj8ibW90aW9uQmx1ciI6dm9pZCAwKSx2cj9OLmRyYXdDYWNoZWROb2RlcyhUdCxMdC5kcmFnLCQsRG4pOk4uZHJhd0NhY2hlZEVsZW1lbnRzKFR0LEx0LmRyYWcsJCxEbiksTi5kZWJ1ZyYmTi5kcmF3RGVidWdQb2ludHMoVHQsTHQuZHJhZyksIWsmJiFjZSYmKFlbTi5EUkFHXT0hMSl9aWYoTi5zaG93RnBzfHwhUyYmWVtOLlNFTEVDVF9CT1hdJiYhayl7dmFyIFR0PW18fHEuY29udGV4dHNbTi5TRUxFQ1RfQk9YXTtpZih1dChUdCksTi5zZWxlY3Rpb25bNF09PTEmJihOLmhvdmVyRGF0YS5zZWxlY3Rpbmd8fE4udG91Y2hEYXRhLnNlbGVjdGluZykpe3ZhciBSZT1OLmN5Lnpvb20oKSxNcj1CZS5jb3JlKCJzZWxlY3Rpb24tYm94LWJvcmRlci13aWR0aCIpLnZhbHVlL1JlO1R0LmxpbmVXaWR0aD1NcixUdC5maWxsU3R5bGU9InJnYmEoIitCZS5jb3JlKCJzZWxlY3Rpb24tYm94LWNvbG9yIikudmFsdWVbMF0rIiwiK0JlLmNvcmUoInNlbGVjdGlvbi1ib3gtY29sb3IiKS52YWx1ZVsxXSsiLCIrQmUuY29yZSgic2VsZWN0aW9uLWJveC1jb2xvciIpLnZhbHVlWzJdKyIsIitCZS5jb3JlKCJzZWxlY3Rpb24tYm94LW9wYWNpdHkiKS52YWx1ZSsiKSIsVHQuZmlsbFJlY3QoTi5zZWxlY3Rpb25bMF0sTi5zZWxlY3Rpb25bMV0sTi5zZWxlY3Rpb25bMl0tTi5zZWxlY3Rpb25bMF0sTi5zZWxlY3Rpb25bM10tTi5zZWxlY3Rpb25bMV0pLE1yPjAmJihUdC5zdHJva2VTdHlsZT0icmdiYSgiK0JlLmNvcmUoInNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIikudmFsdWVbMF0rIiwiK0JlLmNvcmUoInNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIikudmFsdWVbMV0rIiwiK0JlLmNvcmUoInNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIikudmFsdWVbMl0rIiwiK0JlLmNvcmUoInNlbGVjdGlvbi1ib3gtb3BhY2l0eSIpLnZhbHVlKyIpIixUdC5zdHJva2VSZWN0KE4uc2VsZWN0aW9uWzBdLE4uc2VsZWN0aW9uWzFdLE4uc2VsZWN0aW9uWzJdLU4uc2VsZWN0aW9uWzBdLE4uc2VsZWN0aW9uWzNdLU4uc2VsZWN0aW9uWzFdKSl9aWYocS5iZ0FjdGl2ZVBvc2lzdGlvbiYmIU4uaG92ZXJEYXRhLnNlbGVjdGluZyl7dmFyIFJlPU4uY3kuem9vbSgpLENyPXEuYmdBY3RpdmVQb3Npc3Rpb247VHQuZmlsbFN0eWxlPSJyZ2JhKCIrQmUuY29yZSgiYWN0aXZlLWJnLWNvbG9yIikudmFsdWVbMF0rIiwiK0JlLmNvcmUoImFjdGl2ZS1iZy1jb2xvciIpLnZhbHVlWzFdKyIsIitCZS5jb3JlKCJhY3RpdmUtYmctY29sb3IiKS52YWx1ZVsyXSsiLCIrQmUuY29yZSgiYWN0aXZlLWJnLW9wYWNpdHkiKS52YWx1ZSsiKSIsVHQuYmVnaW5QYXRoKCksVHQuYXJjKENyLngsQ3IueSxCZS5jb3JlKCJhY3RpdmUtYmctc2l6ZSIpLnBmVmFsdWUvUmUsMCwyKk1hdGguUEkpLFR0LmZpbGwoKX12YXIgT3I9Ti5sYXN0UmVkcmF3VGltZTtpZihOLnNob3dGcHMmJk9yKXtPcj1NYXRoLnJvdW5kKE9yKTt2YXIgV249TWF0aC5yb3VuZCgxZTMvT3IpO1R0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksVHQuZmlsbFN0eWxlPSJyZ2JhKDI1NSwgMCwgMCwgMC43NSkiLFR0LnN0cm9rZVN0eWxlPSJyZ2JhKDI1NSwgMCwgMCwgMC43NSkiLFR0LmxpbmVXaWR0aD0xLFR0LmZpbGxUZXh0KCIxIGZyYW1lID0gIitPcisiIG1zID0gIitXbisiIGZwcyIsMCwyMCk7dmFyIGJyPTYwO1R0LnN0cm9rZVJlY3QoMCwzMCwyNTAsMjApLFR0LmZpbGxSZWN0KDAsMzAsMjUwKk1hdGgubWluKFduL2JyLDEpLDIwKX1rfHwoWVtOLlNFTEVDVF9CT1hdPSExKX1pZihjZSYmdmUhPT0xKXt2YXIgU3I9cS5jb250ZXh0c1tOLk5PREVdLE5yPU4uZGF0YS5idWZmZXJDYW52YXNlc1tOLk1PVElPTkJMVVJfQlVGRkVSX05PREVdLFNpPXEuY29udGV4dHNbTi5EUkFHXSx5cz1OLmRhdGEuYnVmZmVyQ2FudmFzZXNbTi5NT1RJT05CTFVSX0JVRkZFUl9EUkFHXSxwYT1mdW5jdGlvbihnaSxmcyxGcyl7Z2kuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxGc3x8IUVlP2dpLmNsZWFyUmVjdCgwLDAsTi5jYW52YXNXaWR0aCxOLmNhbnZhc0hlaWdodCk6TXQoZ2ksMCwwLE4uY2FudmFzV2lkdGgsTi5jYW52YXNIZWlnaHQpO3ZhciB4cz12ZTtnaS5kcmF3SW1hZ2UoZnMsMCwwLE4uY2FudmFzV2lkdGgqeHMsTi5jYW52YXNIZWlnaHQqeHMsMCwwLE4uY2FudmFzV2lkdGgsTi5jYW52YXNIZWlnaHQpfTsoWVtOLk5PREVdfHxObltOLk5PREVdKSYmKHBhKFNyLE5yLE5uW04uTk9ERV0pLFlbTi5OT0RFXT0hMSksKFlbTi5EUkFHXXx8Tm5bTi5EUkFHXSkmJihwYShTaSx5cyxObltOLkRSQUddKSxZW04uRFJBR109ITEpfU4ucHJldlZpZXdwb3J0PVllLE4uY2xlYXJpbmdNb3Rpb25CbHVyJiYoTi5jbGVhcmluZ01vdGlvbkJsdXI9ITEsTi5tb3Rpb25CbHVyQ2xlYXJlZD0hMCxOLm1vdGlvbkJsdXI9ITApLGNlJiYoTi5tb3Rpb25CbHVyVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ti5tb3Rpb25CbHVyVGltZW91dD1udWxsLE4uY2xlYXJlZEZvck1vdGlvbkJsdXJbTi5OT0RFXT0hMSxOLmNsZWFyZWRGb3JNb3Rpb25CbHVyW04uRFJBR109ITEsTi5tb3Rpb25CbHVyPSExLE4uY2xlYXJpbmdNb3Rpb25CbHVyPSFaLE4ubWJGcmFtZXM9MCxZW04uTk9ERV09ITAsWVtOLkRSQUddPSEwLE4ucmVkcmF3KCl9LHhpZSkpLG18fEguZW1pdCgicmVuZGVyIil9O3ZhciBpeT17fTtpeS5kcmF3UG9seWdvblBhdGg9ZnVuY3Rpb24oeCxtLGssUyxNLE8pe3ZhciBOPVMvMiwkPU0vMjt4LmJlZ2luUGF0aCYmeC5iZWdpblBhdGgoKSx4Lm1vdmVUbyhtK04qT1swXSxrKyQqT1sxXSk7Zm9yKHZhciBIPTE7SDxPLmxlbmd0aC8yO0grKyl4LmxpbmVUbyhtK04qT1tIKjJdLGsrJCpPW0gqMisxXSk7eC5jbG9zZVBhdGgoKX0saXkuZHJhd1JvdW5kUG9seWdvblBhdGg9ZnVuY3Rpb24oeCxtLGssUyxNLE8pe3ZhciBOPVMvMiwkPU0vMixIPWNJKFMsTSk7eC5iZWdpblBhdGgmJnguYmVnaW5QYXRoKCk7Zm9yKHZhciBxPTA7cTxPLmxlbmd0aC80O3ErKyl7dmFyIFk9dm9pZCAwLFo9dm9pZCAwO3E9PT0wP1k9Ty5sZW5ndGgtMjpZPXEqNC0yLFo9cSo0KzI7dmFyIGNlPW0rTipPW3EqNF0sdmU9ayskKk9bcSo0KzFdLG1lPS1PW1ldKk9bWl0tT1tZKzFdKk9bWisxXSxMZT1IL01hdGgudGFuKE1hdGguYWNvcyhtZSkvMiksX2U9Y2UtTGUqT1tZXSxFZT12ZS1MZSpPW1krMV0sQmU9Y2UrTGUqT1taXSxSZT12ZStMZSpPW1orMV07cT09PTA/eC5tb3ZlVG8oX2UsRWUpOngubGluZVRvKF9lLEVlKSx4LmFyY1RvKGNlLHZlLEJlLFJlLEgpfXguY2xvc2VQYXRoKCl9LGl5LmRyYXdSb3VuZFJlY3RhbmdsZVBhdGg9ZnVuY3Rpb24oeCxtLGssUyxNKXt2YXIgTz1TLzIsTj1NLzIsJD1XOShTLE0pO3guYmVnaW5QYXRoJiZ4LmJlZ2luUGF0aCgpLHgubW92ZVRvKG0say1OKSx4LmFyY1RvKG0rTyxrLU4sbStPLGssJCkseC5hcmNUbyhtK08saytOLG0saytOLCQpLHguYXJjVG8obS1PLGsrTixtLU8saywkKSx4LmFyY1RvKG0tTyxrLU4sbSxrLU4sJCkseC5saW5lVG8obSxrLU4pLHguY2xvc2VQYXRoKCl9LGl5LmRyYXdCb3R0b21Sb3VuZFJlY3RhbmdsZVBhdGg9ZnVuY3Rpb24oeCxtLGssUyxNKXt2YXIgTz1TLzIsTj1NLzIsJD1XOShTLE0pO3guYmVnaW5QYXRoJiZ4LmJlZ2luUGF0aCgpLHgubW92ZVRvKG0say1OKSx4LmxpbmVUbyhtK08say1OKSx4LmxpbmVUbyhtK08saykseC5hcmNUbyhtK08saytOLG0saytOLCQpLHguYXJjVG8obS1PLGsrTixtLU8saywkKSx4LmxpbmVUbyhtLU8say1OKSx4LmxpbmVUbyhtLGstTikseC5jbG9zZVBhdGgoKX0saXkuZHJhd0N1dFJlY3RhbmdsZVBhdGg9ZnVuY3Rpb24oeCxtLGssUyxNKXt2YXIgTz1TLzIsTj1NLzIsJD12aigpO3guYmVnaW5QYXRoJiZ4LmJlZ2luUGF0aCgpLHgubW92ZVRvKG0tTyskLGstTikseC5saW5lVG8obStPLSQsay1OKSx4LmxpbmVUbyhtK08say1OKyQpLHgubGluZVRvKG0rTyxrK04tJCkseC5saW5lVG8obStPLSQsaytOKSx4LmxpbmVUbyhtLU8rJCxrK04pLHgubGluZVRvKG0tTyxrK04tJCkseC5saW5lVG8obS1PLGstTiskKSx4LmNsb3NlUGF0aCgpfSxpeS5kcmF3QmFycmVsUGF0aD1mdW5jdGlvbih4LG0sayxTLE0pe3ZhciBPPVMvMixOPU0vMiwkPW0tTyxIPW0rTyxxPWstTixZPWsrTixaPXVJKFMsTSksY2U9Wi53aWR0aE9mZnNldCx2ZT1aLmhlaWdodE9mZnNldCxtZT1aLmN0cmxQdE9mZnNldFBjdCpjZTt4LmJlZ2luUGF0aCYmeC5iZWdpblBhdGgoKSx4Lm1vdmVUbygkLHErdmUpLHgubGluZVRvKCQsWS12ZSkseC5xdWFkcmF0aWNDdXJ2ZVRvKCQrbWUsWSwkK2NlLFkpLHgubGluZVRvKEgtY2UsWSkseC5xdWFkcmF0aWNDdXJ2ZVRvKEgtbWUsWSxILFktdmUpLHgubGluZVRvKEgscSt2ZSkseC5xdWFkcmF0aWNDdXJ2ZVRvKEgtbWUscSxILWNlLHEpLHgubGluZVRvKCQrY2UscSkseC5xdWFkcmF0aWNDdXJ2ZVRvKCQrbWUscSwkLHErdmUpLHguY2xvc2VQYXRoKCl9O2Zvcih2YXIgeXo9TWF0aC5zaW4oMCkseHo9TWF0aC5jb3MoMCksSEk9e30sVkk9e30sa3o9TWF0aC5QSS80MCx5OD0wKk1hdGguUEk7eTg8MipNYXRoLlBJO3k4Kz1reilISVt5OF09TWF0aC5zaW4oeTgpLFZJW3k4XT1NYXRoLmNvcyh5OCk7aXkuZHJhd0VsbGlwc2VQYXRoPWZ1bmN0aW9uKHgsbSxrLFMsTSl7aWYoeC5iZWdpblBhdGgmJnguYmVnaW5QYXRoKCkseC5lbGxpcHNlKXguZWxsaXBzZShtLGssUy8yLE0vMiwwLDAsMipNYXRoLlBJKTtlbHNlIGZvcih2YXIgTyxOLCQ9Uy8yLEg9TS8yLHE9MCpNYXRoLlBJO3E8MipNYXRoLlBJO3ErPWt6KU89bS0kKkhJW3FdKnl6KyQqVklbcV0qeHosTj1rK0gqVklbcV0qeXorSCpISVtxXSp4eixxPT09MD94Lm1vdmVUbyhPLE4pOngubGluZVRvKE8sTik7eC5jbG9zZVBhdGgoKX07dmFyIG1rPXt9O21rLmNyZWF0ZUJ1ZmZlcj1mdW5jdGlvbih4LG0pe3ZhciBrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiBrLndpZHRoPXgsay5oZWlnaHQ9bSxbayxrLmdldENvbnRleHQoIjJkIildfSxtay5idWZmZXJDYW52YXNJbWFnZT1mdW5jdGlvbih4KXt2YXIgbT10aGlzLmN5LGs9bS5tdXRhYmxlRWxlbWVudHMoKSxTPWsuYm91bmRpbmdCb3goKSxNPXRoaXMuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLE89eC5mdWxsP01hdGguY2VpbChTLncpOk1bMl0sTj14LmZ1bGw/TWF0aC5jZWlsKFMuaCk6TVszXSwkPVgoeC5tYXhXaWR0aCl8fFgoeC5tYXhIZWlnaHQpLEg9dGhpcy5nZXRQaXhlbFJhdGlvKCkscT0xO2lmKHguc2NhbGUhPT12b2lkIDApTyo9eC5zY2FsZSxOKj14LnNjYWxlLHE9eC5zY2FsZTtlbHNlIGlmKCQpe3ZhciBZPTEvMCxaPTEvMDtYKHgubWF4V2lkdGgpJiYoWT1xKngubWF4V2lkdGgvTyksWCh4Lm1heEhlaWdodCkmJihaPXEqeC5tYXhIZWlnaHQvTikscT1NYXRoLm1pbihZLFopLE8qPXEsTio9cX0kfHwoTyo9SCxOKj1ILHEqPUgpO3ZhciBjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtjZS53aWR0aD1PLGNlLmhlaWdodD1OLGNlLnN0eWxlLndpZHRoPU8rInB4IixjZS5zdHlsZS5oZWlnaHQ9TisicHgiO3ZhciB2ZT1jZS5nZXRDb250ZXh0KCIyZCIpO2lmKE8+MCYmTj4wKXt2ZS5jbGVhclJlY3QoMCwwLE8sTiksdmUuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJzb3VyY2Utb3ZlciI7dmFyIG1lPXRoaXMuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKTtpZih4LmZ1bGwpdmUudHJhbnNsYXRlKC1TLngxKnEsLVMueTEqcSksdmUuc2NhbGUocSxxKSx0aGlzLmRyYXdFbGVtZW50cyh2ZSxtZSksdmUuc2NhbGUoMS9xLDEvcSksdmUudHJhbnNsYXRlKFMueDEqcSxTLnkxKnEpO2Vsc2V7dmFyIExlPW0ucGFuKCksX2U9e3g6TGUueCpxLHk6TGUueSpxfTtxKj1tLnpvb20oKSx2ZS50cmFuc2xhdGUoX2UueCxfZS55KSx2ZS5zY2FsZShxLHEpLHRoaXMuZHJhd0VsZW1lbnRzKHZlLG1lKSx2ZS5zY2FsZSgxL3EsMS9xKSx2ZS50cmFuc2xhdGUoLV9lLngsLV9lLnkpfXguYmcmJih2ZS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW92ZXIiLHZlLmZpbGxTdHlsZT14LmJnLHZlLnJlY3QoMCwwLE8sTiksdmUuZmlsbCgpKX1yZXR1cm4gY2V9O2Z1bmN0aW9uIGtpZSh4LG0pe2Zvcih2YXIgaz1hdG9iKHgpLFM9bmV3IEFycmF5QnVmZmVyKGsubGVuZ3RoKSxNPW5ldyBVaW50OEFycmF5KFMpLE89MDtPPGsubGVuZ3RoO08rKylNW09dPWsuY2hhckNvZGVBdChPKTtyZXR1cm4gbmV3IEJsb2IoW1NdLHt0eXBlOm19KX1mdW5jdGlvbiBFeih4KXt2YXIgbT14LmluZGV4T2YoIiwiKTtyZXR1cm4geC5zdWJzdHIobSsxKX1mdW5jdGlvbiBUeih4LG0sayl7dmFyIFM9ZnVuY3Rpb24oKXtyZXR1cm4gbS50b0RhdGFVUkwoayx4LnF1YWxpdHkpfTtzd2l0Y2goeC5vdXRwdXQpe2Nhc2UiYmxvYi1wcm9taXNlIjpyZXR1cm4gbmV3IGk4KGZ1bmN0aW9uKE0sTyl7dHJ5e20udG9CbG9iKGZ1bmN0aW9uKE4pe04hPW51bGw/TShOKTpPKG5ldyBFcnJvcigiYGNhbnZhcy50b0Jsb2IoKWAgc2VudCBhIG51bGwgdmFsdWUgaW4gaXRzIGNhbGxiYWNrIikpfSxrLHgucXVhbGl0eSl9Y2F0Y2goTil7TyhOKX19KTtjYXNlImJsb2IiOnJldHVybiBraWUoRXooUygpKSxrKTtjYXNlImJhc2U2NCI6cmV0dXJuIEV6KFMoKSk7Y2FzZSJiYXNlNjR1cmkiOmRlZmF1bHQ6cmV0dXJuIFMoKX19bWsucG5nPWZ1bmN0aW9uKHgpe3JldHVybiBUeih4LHRoaXMuYnVmZmVyQ2FudmFzSW1hZ2UoeCksImltYWdlL3BuZyIpfSxtay5qcGc9ZnVuY3Rpb24oeCl7cmV0dXJuIFR6KHgsdGhpcy5idWZmZXJDYW52YXNJbWFnZSh4KSwiaW1hZ2UvanBlZyIpfTt2YXIgQ3o9e307Q3oubm9kZVNoYXBlSW1wbD1mdW5jdGlvbih4LG0sayxTLE0sTyxOKXtzd2l0Y2goeCl7Y2FzZSJlbGxpcHNlIjpyZXR1cm4gdGhpcy5kcmF3RWxsaXBzZVBhdGgobSxrLFMsTSxPKTtjYXNlInBvbHlnb24iOnJldHVybiB0aGlzLmRyYXdQb2x5Z29uUGF0aChtLGssUyxNLE8sTik7Y2FzZSJyb3VuZC1wb2x5Z29uIjpyZXR1cm4gdGhpcy5kcmF3Um91bmRQb2x5Z29uUGF0aChtLGssUyxNLE8sTik7Y2FzZSJyb3VuZHJlY3RhbmdsZSI6Y2FzZSJyb3VuZC1yZWN0YW5nbGUiOnJldHVybiB0aGlzLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGgobSxrLFMsTSxPKTtjYXNlImN1dHJlY3RhbmdsZSI6Y2FzZSJjdXQtcmVjdGFuZ2xlIjpyZXR1cm4gdGhpcy5kcmF3Q3V0UmVjdGFuZ2xlUGF0aChtLGssUyxNLE8pO2Nhc2UiYm90dG9tcm91bmRyZWN0YW5nbGUiOmNhc2UiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSI6cmV0dXJuIHRoaXMuZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlUGF0aChtLGssUyxNLE8pO2Nhc2UiYmFycmVsIjpyZXR1cm4gdGhpcy5kcmF3QmFycmVsUGF0aChtLGssUyxNLE8pfX07dmFyIFN6PXZrLGpjPXZrLnByb3RvdHlwZTtqYy5DQU5WQVNfTEFZRVJTPTMsamMuU0VMRUNUX0JPWD0wLGpjLkRSQUc9MSxqYy5OT0RFPTIsamMuQlVGRkVSX0NPVU5UPTMsamMuVEVYVFVSRV9CVUZGRVI9MCxqYy5NT1RJT05CTFVSX0JVRkZFUl9OT0RFPTEsamMuTU9USU9OQkxVUl9CVUZGRVJfRFJBRz0yO2Z1bmN0aW9uIHZrKHgpe3ZhciBtPXRoaXM7bS5kYXRhPXtjYW52YXNlczpuZXcgQXJyYXkoamMuQ0FOVkFTX0xBWUVSUyksY29udGV4dHM6bmV3IEFycmF5KGpjLkNBTlZBU19MQVlFUlMpLGNhbnZhc05lZWRzUmVkcmF3Om5ldyBBcnJheShqYy5DQU5WQVNfTEFZRVJTKSxidWZmZXJDYW52YXNlczpuZXcgQXJyYXkoamMuQlVGRkVSX0NPVU5UKSxidWZmZXJDb250ZXh0czpuZXcgQXJyYXkoamMuQ0FOVkFTX0xBWUVSUyl9O3ZhciBrPSItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLFM9InJnYmEoMCwwLDAsMCkiO20uZGF0YS5jYW52YXNDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dmFyIE09bS5kYXRhLmNhbnZhc0NvbnRhaW5lci5zdHlsZTttLmRhdGEuY2FudmFzQ29udGFpbmVyLnN0eWxlW2tdPVMsTS5wb3NpdGlvbj0icmVsYXRpdmUiLE0uekluZGV4PSIwIixNLm92ZXJmbG93PSJoaWRkZW4iO3ZhciBPPXguY3kuY29udGFpbmVyKCk7Ty5hcHBlbmRDaGlsZChtLmRhdGEuY2FudmFzQ29udGFpbmVyKSxPLnN0eWxlW2tdPVM7dmFyIE49eyItd2Via2l0LXVzZXItc2VsZWN0Ijoibm9uZSIsIi1tb3otdXNlci1zZWxlY3QiOiItbW96LW5vbmUiLCJ1c2VyLXNlbGVjdCI6Im5vbmUiLCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiOiJyZ2JhKDAsMCwwLDApIiwib3V0bGluZS1zdHlsZSI6Im5vbmUifTtGdCgpJiYoTlsiLW1zLXRvdWNoLWFjdGlvbiJdPSJub25lIixOWyJ0b3VjaC1hY3Rpb24iXT0ibm9uZSIpO2Zvcih2YXIgJD0wOyQ8amMuQ0FOVkFTX0xBWUVSUzskKyspe3ZhciBIPW0uZGF0YS5jYW52YXNlc1skXT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTttLmRhdGEuY29udGV4dHNbJF09SC5nZXRDb250ZXh0KCIyZCIpLE9iamVjdC5rZXlzKE4pLmZvckVhY2goZnVuY3Rpb24oT3Ipe0guc3R5bGVbT3JdPU5bT3JdfSksSC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLEguc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwibGF5ZXIiKyQpLEguc3R5bGUuekluZGV4PVN0cmluZyhqYy5DQU5WQVNfTEFZRVJTLSQpLG0uZGF0YS5jYW52YXNDb250YWluZXIuYXBwZW5kQ2hpbGQoSCksbS5kYXRhLmNhbnZhc05lZWRzUmVkcmF3WyRdPSExfW0uZGF0YS50b3BDYW52YXM9bS5kYXRhLmNhbnZhc2VzWzBdLG0uZGF0YS5jYW52YXNlc1tqYy5OT0RFXS5zZXRBdHRyaWJ1dGUoImRhdGEtaWQiLCJsYXllciIramMuTk9ERSsiLW5vZGUiKSxtLmRhdGEuY2FudmFzZXNbamMuU0VMRUNUX0JPWF0uc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwibGF5ZXIiK2pjLlNFTEVDVF9CT1grIi1zZWxlY3Rib3giKSxtLmRhdGEuY2FudmFzZXNbamMuRFJBR10uc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwibGF5ZXIiK2pjLkRSQUcrIi1kcmFnIik7Zm9yKHZhciAkPTA7JDxqYy5CVUZGRVJfQ09VTlQ7JCsrKW0uZGF0YS5idWZmZXJDYW52YXNlc1skXT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxtLmRhdGEuYnVmZmVyQ29udGV4dHNbJF09bS5kYXRhLmJ1ZmZlckNhbnZhc2VzWyRdLmdldENvbnRleHQoIjJkIiksbS5kYXRhLmJ1ZmZlckNhbnZhc2VzWyRdLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbS5kYXRhLmJ1ZmZlckNhbnZhc2VzWyRdLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImJ1ZmZlciIrJCksbS5kYXRhLmJ1ZmZlckNhbnZhc2VzWyRdLnN0eWxlLnpJbmRleD1TdHJpbmcoLSQtMSksbS5kYXRhLmJ1ZmZlckNhbnZhc2VzWyRdLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiI7bS5wYXRoc0VuYWJsZWQ9ITA7dmFyIHE9V2QoKSxZPWZ1bmN0aW9uKFduKXtyZXR1cm57eDooV24ueDErV24ueDIpLzIseTooV24ueTErV24ueTIpLzJ9fSxaPWZ1bmN0aW9uKFduKXtyZXR1cm57eDotV24udy8yLHk6LVduLmgvMn19LGNlPWZ1bmN0aW9uKFduKXt2YXIgYnI9V25bMF0uX3ByaXZhdGUsU3I9YnIub2xkQmFja2dyb3VuZFRpbWVzdGFtcD09PWJyLmJhY2tncm91bmRUaW1lc3RhbXA7cmV0dXJuIVNyfSx2ZT1mdW5jdGlvbihXbil7cmV0dXJuIFduWzBdLl9wcml2YXRlLm5vZGVLZXl9LG1lPWZ1bmN0aW9uKFduKXtyZXR1cm4gV25bMF0uX3ByaXZhdGUubGFiZWxTdHlsZUtleX0sTGU9ZnVuY3Rpb24oV24pe3JldHVybiBXblswXS5fcHJpdmF0ZS5zb3VyY2VMYWJlbFN0eWxlS2V5fSxfZT1mdW5jdGlvbihXbil7cmV0dXJuIFduWzBdLl9wcml2YXRlLnRhcmdldExhYmVsU3R5bGVLZXl9LEVlPWZ1bmN0aW9uKFduLGJyLFNyLE5yLFNpKXtyZXR1cm4gbS5kcmF3RWxlbWVudChXbixicixTciwhMSwhMSxTaSl9LEJlPWZ1bmN0aW9uKFduLGJyLFNyLE5yLFNpKXtyZXR1cm4gbS5kcmF3RWxlbWVudFRleHQoV24sYnIsU3IsTnIsIm1haW4iLFNpKX0sUmU9ZnVuY3Rpb24oV24sYnIsU3IsTnIsU2kpe3JldHVybiBtLmRyYXdFbGVtZW50VGV4dChXbixicixTcixOciwic291cmNlIixTaSl9LFZlPWZ1bmN0aW9uKFduLGJyLFNyLE5yLFNpKXtyZXR1cm4gbS5kcmF3RWxlbWVudFRleHQoV24sYnIsU3IsTnIsInRhcmdldCIsU2kpfSxjdD1mdW5jdGlvbihXbil7cmV0dXJuIFduLmJvdW5kaW5nQm94KCksV25bMF0uX3ByaXZhdGUuYm9keUJvdW5kc30sc3Q9ZnVuY3Rpb24oV24pe3JldHVybiBXbi5ib3VuZGluZ0JveCgpLFduWzBdLl9wcml2YXRlLmxhYmVsQm91bmRzLm1haW58fHF9LFllPWZ1bmN0aW9uKFduKXtyZXR1cm4gV24uYm91bmRpbmdCb3goKSxXblswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy5zb3VyY2V8fHF9LG10PWZ1bmN0aW9uKFduKXtyZXR1cm4gV24uYm91bmRpbmdCb3goKSxXblswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy50YXJnZXR8fHF9LEplPWZ1bmN0aW9uKFduLGJyKXtyZXR1cm4gYnJ9LEx0PWZ1bmN0aW9uKFduKXtyZXR1cm4gWShjdChXbikpfSxNdD1mdW5jdGlvbihXbixicixTcil7dmFyIE5yPVduP1duKyItIjoiIjtyZXR1cm57eDpici54K1NyLnBzdHlsZShOcisidGV4dC1tYXJnaW4teCIpLnBmVmFsdWUseTpici55K1NyLnBzdHlsZShOcisidGV4dC1tYXJnaW4teSIpLnBmVmFsdWV9fSx1dD1mdW5jdGlvbihXbixicixTcil7dmFyIE5yPVduWzBdLl9wcml2YXRlLnJzY3JhdGNoO3JldHVybnt4Ok5yW2JyXSx5Ok5yW1NyXX19LFd0PWZ1bmN0aW9uKFduKXtyZXR1cm4gTXQoIiIsdXQoV24sImxhYmVsWCIsImxhYmVsWSIpLFduKX0sVHQ9ZnVuY3Rpb24oV24pe3JldHVybiBNdCgic291cmNlIix1dChXbiwic291cmNlTGFiZWxYIiwic291cmNlTGFiZWxZIiksV24pfSxfbj1mdW5jdGlvbihXbil7cmV0dXJuIE10KCJ0YXJnZXQiLHV0KFduLCJ0YXJnZXRMYWJlbFgiLCJ0YXJnZXRMYWJlbFkiKSxXbil9LGhuPWZ1bmN0aW9uKFduKXtyZXR1cm4gWihjdChXbikpfSxZdD1mdW5jdGlvbihXbil7cmV0dXJuIFooWWUoV24pKX0sRG49ZnVuY3Rpb24oV24pe3JldHVybiBaKG10KFduKSl9LGlyPWZ1bmN0aW9uKFduKXt2YXIgYnI9c3QoV24pLFNyPVooc3QoV24pKTtpZihXbi5pc05vZGUoKSl7c3dpdGNoKFduLnBzdHlsZSgidGV4dC1oYWxpZ24iKS52YWx1ZSl7Y2FzZSJsZWZ0IjpTci54PS1ici53O2JyZWFrO2Nhc2UicmlnaHQiOlNyLng9MDticmVha31zd2l0Y2goV24ucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnZhbHVlKXtjYXNlInRvcCI6U3IueT0tYnIuaDticmVhaztjYXNlImJvdHRvbSI6U3IueT0wO2JyZWFrfX1yZXR1cm4gU3J9LHZyPW0uZGF0YS5lbGVUeHJDYWNoZT1uZXcgZGsobSx7Z2V0S2V5OnZlLGRvZXNFbGVJbnZhbGlkYXRlS2V5OmNlLGRyYXdFbGVtZW50OkVlLGdldEJvdW5kaW5nQm94OmN0LGdldFJvdGF0aW9uUG9pbnQ6THQsZ2V0Um90YXRpb25PZmZzZXQ6aG4sYWxsb3dFZGdlVHhyQ2FjaGluZzohMSxhbGxvd1BhcmVudFR4ckNhY2hpbmc6ITF9KSxObj1tLmRhdGEubGJsVHhyQ2FjaGU9bmV3IGRrKG0se2dldEtleTptZSxkcmF3RWxlbWVudDpCZSxnZXRCb3VuZGluZ0JveDpzdCxnZXRSb3RhdGlvblBvaW50Old0LGdldFJvdGF0aW9uT2Zmc2V0OmlyLGlzVmlzaWJsZTpKZX0pLHByPW0uZGF0YS5zbGJUeHJDYWNoZT1uZXcgZGsobSx7Z2V0S2V5OkxlLGRyYXdFbGVtZW50OlJlLGdldEJvdW5kaW5nQm94OlllLGdldFJvdGF0aW9uUG9pbnQ6VHQsZ2V0Um90YXRpb25PZmZzZXQ6WXQsaXNWaXNpYmxlOkplfSksRXI9bS5kYXRhLnRsYlR4ckNhY2hlPW5ldyBkayhtLHtnZXRLZXk6X2UsZHJhd0VsZW1lbnQ6VmUsZ2V0Qm91bmRpbmdCb3g6bXQsZ2V0Um90YXRpb25Qb2ludDpfbixnZXRSb3RhdGlvbk9mZnNldDpEbixpc1Zpc2libGU6SmV9KSxNcj1tLmRhdGEubHlyVHhyQ2FjaGU9bmV3IGR6KG0pO20ub25VcGRhdGVFbGVDYWxjcyhmdW5jdGlvbihXbixicil7dnIuaW52YWxpZGF0ZUVsZW1lbnRzKGJyKSxObi5pbnZhbGlkYXRlRWxlbWVudHMoYnIpLHByLmludmFsaWRhdGVFbGVtZW50cyhiciksRXIuaW52YWxpZGF0ZUVsZW1lbnRzKGJyKSxNci5pbnZhbGlkYXRlRWxlbWVudHMoYnIpO2Zvcih2YXIgU3I9MDtTcjxici5sZW5ndGg7U3IrKyl7dmFyIE5yPWJyW1NyXS5fcHJpdmF0ZTtOci5vbGRCYWNrZ3JvdW5kVGltZXN0YW1wPU5yLmJhY2tncm91bmRUaW1lc3RhbXB9fSk7dmFyIENyPWZ1bmN0aW9uKFduKXtmb3IodmFyIGJyPTA7YnI8V24ubGVuZ3RoO2JyKyspTXIuZW5xdWV1ZUVsZW1lbnRSZWZpbmVtZW50KFduW2JyXS5lbGUpfTt2ci5vbkRlcXVldWUoQ3IpLE5uLm9uRGVxdWV1ZShDcikscHIub25EZXF1ZXVlKENyKSxFci5vbkRlcXVldWUoQ3IpfWpjLnJlZHJhd0hpbnQ9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzO3N3aXRjaCh4KXtjYXNlImVsZXMiOmsuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1tqYy5OT0RFXT1tO2JyZWFrO2Nhc2UiZHJhZyI6ay5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W2pjLkRSQUddPW07YnJlYWs7Y2FzZSJzZWxlY3QiOmsuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1tqYy5TRUxFQ1RfQk9YXT1tO2JyZWFrfX07dmFyIHdrPXR5cGVvZiBQYXRoMkQ8InUiO2pjLnBhdGgyZEVuYWJsZWQ9ZnVuY3Rpb24oeCl7aWYoeD09PXZvaWQgMClyZXR1cm4gdGhpcy5wYXRoc0VuYWJsZWQ7dGhpcy5wYXRoc0VuYWJsZWQ9ISF4fSxqYy51c2VQYXRocz1mdW5jdGlvbigpe3JldHVybiB3ayYmdGhpcy5wYXRoc0VuYWJsZWR9LGpjLnNldEltZ1Ntb290aGluZz1mdW5jdGlvbih4LG0pe3guaW1hZ2VTbW9vdGhpbmdFbmFibGVkIT1udWxsP3guaW1hZ2VTbW9vdGhpbmdFbmFibGVkPW06KHgud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkPW0seC5tb3pJbWFnZVNtb290aGluZ0VuYWJsZWQ9bSx4Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkPW0pfSxqYy5nZXRJbWdTbW9vdGhpbmc9ZnVuY3Rpb24oeCl7cmV0dXJuIHguaW1hZ2VTbW9vdGhpbmdFbmFibGVkIT1udWxsP3guaW1hZ2VTbW9vdGhpbmdFbmFibGVkOngud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkfHx4Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZHx8eC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZH0samMubWFrZU9mZnNjcmVlbkNhbnZhcz1mdW5jdGlvbih4LG0pe3ZhciBrO3JldHVybih0eXBlb2YgT2Zmc2NyZWVuQ2FudmFzPiJ1Ij8idW5kZWZpbmVkIjp1KE9mZnNjcmVlbkNhbnZhcykpIT09InVuZGVmaW5lZCI/az1uZXcgT2Zmc2NyZWVuQ2FudmFzKHgsbSk6KGs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksay53aWR0aD14LGsuaGVpZ2h0PW0pLGt9LFtweixRMixKMixiayx5NSx3OCxxZyxpeSxtayxDel0uZm9yRWFjaChmdW5jdGlvbih4KXt5dChqYyx4KX0pO3ZhciAkcD1be25hbWU6Im51bGwiLGltcGw6VyR9LHtuYW1lOiJiYXNlIixpbXBsOmF6fSx7bmFtZToiY2FudmFzIixpbXBsOlN6fV0sRWllPVt7dHlwZToibGF5b3V0IixleHRlbnNpb25zOnFyZX0se3R5cGU6InJlbmRlcmVyIixleHRlbnNpb25zOiRwfV0sVGllPXt9LENpZT17fTtmdW5jdGlvbiBTaWUoeCxtLGspe3ZhciBTPWssTT1mdW5jdGlvbihtdCl7aHUoIkNhbiBub3QgcmVnaXN0ZXIgYCIrbSsiYCBmb3IgYCIreCsiYCBzaW5jZSBgIittdCsiYCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcHJvdG90eXBlIGFuZCBjYW4gbm90IGJlIG92ZXJyaWRkZW4iKX07aWYoeD09PSJjb3JlIil7aWYobGsucHJvdG90eXBlW21dKXJldHVybiBNKG0pO2xrLnByb3RvdHlwZVttXT1rfWVsc2UgaWYoeD09PSJjb2xsZWN0aW9uIil7aWYoVjAucHJvdG90eXBlW21dKXJldHVybiBNKG0pO1YwLnByb3RvdHlwZVttXT1rfWVsc2UgaWYoeD09PSJsYXlvdXQiKXtmb3IodmFyIE89ZnVuY3Rpb24obXQpe3RoaXMub3B0aW9ucz1tdCxrLmNhbGwodGhpcyxtdCksc2UodGhpcy5fcHJpdmF0ZSl8fCh0aGlzLl9wcml2YXRlPXt9KSx0aGlzLl9wcml2YXRlLmN5PW10LmN5LHRoaXMuX3ByaXZhdGUubGlzdGVuZXJzPVtdLHRoaXMuY3JlYXRlRW1pdHRlcigpfSxOPU8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoay5wcm90b3R5cGUpLCQ9W10sSD0wO0g8JC5sZW5ndGg7SCsrKXt2YXIgcT0kW0hdO05bcV09TltxXXx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319Ti5zdGFydCYmIU4ucnVuP04ucnVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnQoKSx0aGlzfTohTi5zdGFydCYmTi5ydW4mJihOLnN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucnVuKCksdGhpc30pO3ZhciBZPWsucHJvdG90eXBlLnN0b3A7Ti5zdG9wPWZ1bmN0aW9uKCl7dmFyIFllPXRoaXMub3B0aW9ucztpZihZZSYmWWUuYW5pbWF0ZSl7dmFyIG10PXRoaXMuYW5pbWF0aW9ucztpZihtdClmb3IodmFyIEplPTA7SmU8bXQubGVuZ3RoO0plKyspbXRbSmVdLnN0b3AoKX1yZXR1cm4gWT9ZLmNhbGwodGhpcyk6dGhpcy5lbWl0KCJsYXlvdXRzdG9wIiksdGhpc30sTi5kZXN0cm95fHwoTi5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxOLmN5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY3l9O3ZhciBaPWZ1bmN0aW9uKG10KXtyZXR1cm4gbXQuX3ByaXZhdGUuY3l9LGNlPXthZGRFdmVudEZpZWxkczpmdW5jdGlvbihtdCxKZSl7SmUubGF5b3V0PW10LEplLmN5PVoobXQpLEplLnRhcmdldD1tdH0sYnViYmxlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihtdCl7cmV0dXJuIFoobXQpfX07eXQoTix7Y3JlYXRlRW1pdHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVtaXR0ZXI9bmV3IExTKGNlLHRoaXMpLHRoaXN9LGVtaXR0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyfSxvbjpmdW5jdGlvbihtdCxKZSl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uKG10LEplKSx0aGlzfSxvbmU6ZnVuY3Rpb24obXQsSmUpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbmUobXQsSmUpLHRoaXN9LG9uY2U6ZnVuY3Rpb24obXQsSmUpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbmUobXQsSmUpLHRoaXN9LHJlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKG10LEplKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIobXQsSmUpLHRoaXN9LHJlbW92ZUFsbExpc3RlbmVyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKG10LEplKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkuZW1pdChtdCxKZSksdGhpc319KSxmdS5ldmVudEFsaWFzZXNPbihOKSxTPU99ZWxzZSBpZih4PT09InJlbmRlcmVyIiYmbSE9PSJudWxsIiYmbSE9PSJiYXNlIil7dmFyIHZlPV9pZSgicmVuZGVyZXIiLCJiYXNlIiksbWU9dmUucHJvdG90eXBlLExlPWssX2U9ay5wcm90b3R5cGUsRWU9ZnVuY3Rpb24oKXt2ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksTGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxCZT1FZS5wcm90b3R5cGU7Zm9yKHZhciBSZSBpbiBtZSl7dmFyIFZlPW1lW1JlXSxjdD1fZVtSZV0hPW51bGw7aWYoY3QpcmV0dXJuIE0oUmUpO0JlW1JlXT1WZX1mb3IodmFyIHN0IGluIF9lKUJlW3N0XT1fZVtzdF07bWUuY2xpZW50RnVuY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oWWUpe0JlW1llXT1CZVtZZV18fGZ1bmN0aW9uKCl7Y2goIlJlbmRlcmVyIGRvZXMgbm90IGltcGxlbWVudCBgcmVuZGVyZXIuIitZZSsiKClgIG9uIGl0cyBwcm90b3R5cGUiKX19KSxTPUVlfWVsc2UgaWYoeD09PSJfX3Byb3RvX18ifHx4PT09ImNvbnN0cnVjdG9yInx8eD09PSJwcm90b3R5cGUiKXJldHVybiBjaCh4KyIgaXMgYW4gaWxsZWdhbCB0eXBlIHRvIGJlIHJlZ2lzdGVyZWQsIHBvc3NpYmx5IGxlYWQgdG8gcHJvdG90eXBlIHBvbGx1dGlvbnMiKTtyZXR1cm4gRm4oe21hcDpUaWUsa2V5czpbeCxtXSx2YWx1ZTpTfSl9ZnVuY3Rpb24gX2llKHgsbSl7cmV0dXJuIHFuKHttYXA6VGllLGtleXM6W3gsbV19KX1mdW5jdGlvbiBfeih4LG0sayxTLE0pe3JldHVybiBGbih7bWFwOkNpZSxrZXlzOlt4LG0sayxTXSx2YWx1ZTpNfSl9ZnVuY3Rpb24gYndlKHgsbSxrLFMpe3JldHVybiBxbih7bWFwOkNpZSxrZXlzOlt4LG0sayxTXX0pfXZhciBBej1mdW5jdGlvbigpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0yKXJldHVybiBfaWUuYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0zKXJldHVybiBTaWUuYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT00KXJldHVybiBid2UuYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT01KXJldHVybiBfei5hcHBseShudWxsLGFyZ3VtZW50cyk7Y2goIkludmFsaWQgZXh0ZW5zaW9uIGFjY2VzcyBzeW50YXgiKX07bGsucHJvdG90eXBlLmV4dGVuc2lvbj1BeixFaWUuZm9yRWFjaChmdW5jdGlvbih4KXt4LmV4dGVuc2lvbnMuZm9yRWFjaChmdW5jdGlvbihtKXtTaWUoeC50eXBlLG0ubmFtZSxtLmltcGwpfSl9KTt2YXIgQWllPWZ1bmN0aW9uIHgoKXtpZighKHRoaXMgaW5zdGFuY2VvZiB4KSlyZXR1cm4gbmV3IHg7dGhpcy5sZW5ndGg9MH0seDg9QWllLnByb3RvdHlwZTt4OC5pbnN0YW5jZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiJzdHlsZXNoZWV0In0seDguc2VsZWN0b3I9ZnVuY3Rpb24oeCl7dmFyIG09dGhpcy5sZW5ndGgrKztyZXR1cm4gdGhpc1ttXT17c2VsZWN0b3I6eCxwcm9wZXJ0aWVzOltdfSx0aGlzfSx4OC5jc3M9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzLmxlbmd0aC0xO2lmKGJlKHgpKXRoaXNba10ucHJvcGVydGllcy5wdXNoKHtuYW1lOngsdmFsdWU6bX0pO2Vsc2UgaWYoc2UoeCkpZm9yKHZhciBTPXgsTT1PYmplY3Qua2V5cyhTKSxPPTA7TzxNLmxlbmd0aDtPKyspe3ZhciBOPU1bT10sJD1TW05dO2lmKCQhPW51bGwpe3ZhciBIPVQxLnByb3BlcnRpZXNbTl18fFQxLnByb3BlcnRpZXNbX3QoTildO2lmKEghPW51bGwpe3ZhciBxPUgubmFtZSxZPSQ7dGhpc1trXS5wcm9wZXJ0aWVzLnB1c2goe25hbWU6cSx2YWx1ZTpZfSl9fX1yZXR1cm4gdGhpc30seDguc3R5bGU9eDguY3NzLHg4LmdlbmVyYXRlU3R5bGU9ZnVuY3Rpb24oeCl7dmFyIG09bmV3IFQxKHgpO3JldHVybiB0aGlzLmFwcGVuZFRvU3R5bGUobSl9LHg4LmFwcGVuZFRvU3R5bGU9ZnVuY3Rpb24oeCl7Zm9yKHZhciBtPTA7bTx0aGlzLmxlbmd0aDttKyspe3ZhciBrPXRoaXNbbV0sUz1rLnNlbGVjdG9yLE09ay5wcm9wZXJ0aWVzO3guc2VsZWN0b3IoUyk7Zm9yKHZhciBPPTA7TzxNLmxlbmd0aDtPKyspe3ZhciBOPU1bT107eC5jc3MoTi5uYW1lLE4udmFsdWUpfX1yZXR1cm4geH07dmFyIG13ZT0iMy4yOC4xIixrOD1mdW5jdGlvbihtKXtpZihtPT09dm9pZCAwJiYobT17fSksc2UobSkpcmV0dXJuIG5ldyBsayhtKTtpZihiZShtKSlyZXR1cm4gQXouYXBwbHkoQXosYXJndW1lbnRzKX07cmV0dXJuIGs4LnVzZT1mdW5jdGlvbih4KXt2YXIgbT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIG0udW5zaGlmdChrOCkseC5hcHBseShudWxsLG0pLHRoaXN9LGs4Lndhcm5pbmdzPWZ1bmN0aW9uKHgpe3JldHVybiBvUyh4KX0sazgudmVyc2lvbj1td2Usazguc3R5bGVzaGVldD1rOC5TdHlsZXNoZWV0PUFpZSxrOH0pfSkoaFdlKTt2YXIgaG9uPWhXZS5leHBvcnRzO2NvbnN0IGZXZT1oQyhob24pO3ZhciBkV2U9e2V4cG9ydHM6e319LG53ZT17ZXhwb3J0czp7fX0scndlPXtleHBvcnRzOnt9fSxnV2U7ZnVuY3Rpb24gZm9uKCl7cmV0dXJuIGdXZXx8KGdXZT0xLGZ1bmN0aW9uKGkscyl7KGZ1bmN0aW9uKGQscCl7aS5leHBvcnRzPXAoKX0pKEFnLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHUpe3ZhciBkPXt9O2Z1bmN0aW9uIHAodil7aWYoZFt2XSlyZXR1cm4gZFt2XS5leHBvcnRzO3ZhciBiPWRbdl09e2k6dixsOiExLGV4cG9ydHM6e319O3JldHVybiB1W3ZdLmNhbGwoYi5leHBvcnRzLGIsYi5leHBvcnRzLHApLGIubD0hMCxiLmV4cG9ydHN9cmV0dXJuIHAubT11LHAuYz1kLHAuaT1mdW5jdGlvbih2KXtyZXR1cm4gdn0scC5kPWZ1bmN0aW9uKHYsYix5KXtwLm8odixiKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHYsYix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0Onl9KX0scC5uPWZ1bmN0aW9uKHYpe3ZhciBiPXYmJnYuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiB2LmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIHZ9O3JldHVybiBwLmQoYiwiYSIsYiksYn0scC5vPWZ1bmN0aW9uKHYsYil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2LGIpfSxwLnA9IiIscChwLnM9MjYpfShbZnVuY3Rpb24odSxkLHApe2Z1bmN0aW9uIHYoKXt9di5RVUFMSVRZPTEsdi5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQ9ITEsdi5ERUZBVUxUX0lOQ1JFTUVOVEFMPSExLHYuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VUPSEwLHYuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVD0hMSx2LkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRD01MCx2LkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVM9ITEsdi5ERUZBVUxUX0dSQVBIX01BUkdJTj0xNSx2Lk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz0hMSx2LlNJTVBMRV9OT0RFX1NJWkU9NDAsdi5TSU1QTEVfTk9ERV9IQUxGX1NJWkU9di5TSU1QTEVfTk9ERV9TSVpFLzIsdi5FTVBUWV9DT01QT1VORF9OT0RFX1NJWkU9NDAsdi5NSU5fRURHRV9MRU5HVEg9MSx2LldPUkxEX0JPVU5EQVJZPTFlNix2LklOSVRJQUxfV09STERfQk9VTkRBUlk9di5XT1JMRF9CT1VOREFSWS8xZTMsdi5XT1JMRF9DRU5URVJfWD0xMjAwLHYuV09STERfQ0VOVEVSX1k9OTAwLHUuZXhwb3J0cz12fSxmdW5jdGlvbih1LGQscCl7dmFyIHY9cCgyKSxiPXAoOCkseT1wKDkpO2Z1bmN0aW9uIFQoQSxQLFIpe3YuY2FsbCh0aGlzLFIpLHRoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0PSExLHRoaXMudkdyYXBoT2JqZWN0PVIsdGhpcy5iZW5kcG9pbnRzPVtdLHRoaXMuc291cmNlPUEsdGhpcy50YXJnZXQ9UH1ULnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHYucHJvdG90eXBlKTtmb3IodmFyIF8gaW4gdilUW19dPXZbX107VC5wcm90b3R5cGUuZ2V0U291cmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc291cmNlfSxULnByb3RvdHlwZS5nZXRUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YXJnZXR9LFQucHJvdG90eXBlLmlzSW50ZXJHcmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW50ZXJHcmFwaH0sVC5wcm90b3R5cGUuZ2V0TGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxULnByb3RvdHlwZS5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXR9LFQucHJvdG90eXBlLmdldEJlbmRwb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iZW5kcG9pbnRzfSxULnByb3RvdHlwZS5nZXRMY2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sY2F9LFQucHJvdG90eXBlLmdldFNvdXJjZUluTGNhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc291cmNlSW5MY2F9LFQucHJvdG90eXBlLmdldFRhcmdldEluTGNhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFyZ2V0SW5MY2F9LFQucHJvdG90eXBlLmdldE90aGVyRW5kPWZ1bmN0aW9uKEEpe2lmKHRoaXMuc291cmNlPT09QSlyZXR1cm4gdGhpcy50YXJnZXQ7aWYodGhpcy50YXJnZXQ9PT1BKXJldHVybiB0aGlzLnNvdXJjZTt0aHJvdyJOb2RlIGlzIG5vdCBpbmNpZGVudCB3aXRoIHRoaXMgZWRnZSJ9LFQucHJvdG90eXBlLmdldE90aGVyRW5kSW5HcmFwaD1mdW5jdGlvbihBLFApe2Zvcih2YXIgUj10aGlzLmdldE90aGVyRW5kKEEpLEY9UC5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCk7Oyl7aWYoUi5nZXRPd25lcigpPT1QKXJldHVybiBSO2lmKFIuZ2V0T3duZXIoKT09RilicmVhaztSPVIuZ2V0T3duZXIoKS5nZXRQYXJlbnQoKX1yZXR1cm4gbnVsbH0sVC5wcm90b3R5cGUudXBkYXRlTGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEE9bmV3IEFycmF5KDQpO3RoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0PWIuZ2V0SW50ZXJzZWN0aW9uKHRoaXMudGFyZ2V0LmdldFJlY3QoKSx0aGlzLnNvdXJjZS5nZXRSZWN0KCksQSksdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXR8fCh0aGlzLmxlbmd0aFg9QVswXS1BWzJdLHRoaXMubGVuZ3RoWT1BWzFdLUFbM10sTWF0aC5hYnModGhpcy5sZW5ndGhYKTwxJiYodGhpcy5sZW5ndGhYPXkuc2lnbih0aGlzLmxlbmd0aFgpKSxNYXRoLmFicyh0aGlzLmxlbmd0aFkpPDEmJih0aGlzLmxlbmd0aFk9eS5zaWduKHRoaXMubGVuZ3RoWSkpLHRoaXMubGVuZ3RoPU1hdGguc3FydCh0aGlzLmxlbmd0aFgqdGhpcy5sZW5ndGhYK3RoaXMubGVuZ3RoWSp0aGlzLmxlbmd0aFkpKX0sVC5wcm90b3R5cGUudXBkYXRlTGVuZ3RoU2ltcGxlPWZ1bmN0aW9uKCl7dGhpcy5sZW5ndGhYPXRoaXMudGFyZ2V0LmdldENlbnRlclgoKS10aGlzLnNvdXJjZS5nZXRDZW50ZXJYKCksdGhpcy5sZW5ndGhZPXRoaXMudGFyZ2V0LmdldENlbnRlclkoKS10aGlzLnNvdXJjZS5nZXRDZW50ZXJZKCksTWF0aC5hYnModGhpcy5sZW5ndGhYKTwxJiYodGhpcy5sZW5ndGhYPXkuc2lnbih0aGlzLmxlbmd0aFgpKSxNYXRoLmFicyh0aGlzLmxlbmd0aFkpPDEmJih0aGlzLmxlbmd0aFk9eS5zaWduKHRoaXMubGVuZ3RoWSkpLHRoaXMubGVuZ3RoPU1hdGguc3FydCh0aGlzLmxlbmd0aFgqdGhpcy5sZW5ndGhYK3RoaXMubGVuZ3RoWSp0aGlzLmxlbmd0aFkpfSx1LmV4cG9ydHM9VH0sZnVuY3Rpb24odSxkLHApe2Z1bmN0aW9uIHYoYil7dGhpcy52R3JhcGhPYmplY3Q9Yn11LmV4cG9ydHM9dn0sZnVuY3Rpb24odSxkLHApe3ZhciB2PXAoMiksYj1wKDEwKSx5PXAoMTMpLFQ9cCgwKSxfPXAoMTYpLEE9cCg0KTtmdW5jdGlvbiBQKEYsaixLLGVlKXtLPT1udWxsJiZlZT09bnVsbCYmKGVlPWopLHYuY2FsbCh0aGlzLGVlKSxGLmdyYXBoTWFuYWdlciE9bnVsbCYmKEY9Ri5ncmFwaE1hbmFnZXIpLHRoaXMuZXN0aW1hdGVkU2l6ZT1iLk1JTl9WQUxVRSx0aGlzLmluY2x1c2lvblRyZWVEZXB0aD1iLk1BWF9WQUxVRSx0aGlzLnZHcmFwaE9iamVjdD1lZSx0aGlzLmVkZ2VzPVtdLHRoaXMuZ3JhcGhNYW5hZ2VyPUYsSyE9bnVsbCYmaiE9bnVsbD90aGlzLnJlY3Q9bmV3IHkoai54LGoueSxLLndpZHRoLEsuaGVpZ2h0KTp0aGlzLnJlY3Q9bmV3IHl9UC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh2LnByb3RvdHlwZSk7Zm9yKHZhciBSIGluIHYpUFtSXT12W1JdO1AucHJvdG90eXBlLmdldEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXN9LFAucHJvdG90eXBlLmdldENoaWxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGR9LFAucHJvdG90eXBlLmdldE93bmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJ9LFAucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC53aWR0aH0sUC5wcm90b3R5cGUuc2V0V2lkdGg9ZnVuY3Rpb24oRil7dGhpcy5yZWN0LndpZHRoPUZ9LFAucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QuaGVpZ2h0fSxQLnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oRil7dGhpcy5yZWN0LmhlaWdodD1GfSxQLnByb3RvdHlwZS5nZXRDZW50ZXJYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC54K3RoaXMucmVjdC53aWR0aC8yfSxQLnByb3RvdHlwZS5nZXRDZW50ZXJZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC55K3RoaXMucmVjdC5oZWlnaHQvMn0sUC5wcm90b3R5cGUuZ2V0Q2VudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBKHRoaXMucmVjdC54K3RoaXMucmVjdC53aWR0aC8yLHRoaXMucmVjdC55K3RoaXMucmVjdC5oZWlnaHQvMil9LFAucHJvdG90eXBlLmdldExvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBKHRoaXMucmVjdC54LHRoaXMucmVjdC55KX0sUC5wcm90b3R5cGUuZ2V0UmVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3R9LFAucHJvdG90eXBlLmdldERpYWdvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLnJlY3Qud2lkdGgqdGhpcy5yZWN0LndpZHRoK3RoaXMucmVjdC5oZWlnaHQqdGhpcy5yZWN0LmhlaWdodCl9LFAucHJvdG90eXBlLmdldEhhbGZUaGVEaWFnb25hbD1mdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy5yZWN0LmhlaWdodCp0aGlzLnJlY3QuaGVpZ2h0K3RoaXMucmVjdC53aWR0aCp0aGlzLnJlY3Qud2lkdGgpLzJ9LFAucHJvdG90eXBlLnNldFJlY3Q9ZnVuY3Rpb24oRixqKXt0aGlzLnJlY3QueD1GLngsdGhpcy5yZWN0Lnk9Ri55LHRoaXMucmVjdC53aWR0aD1qLndpZHRoLHRoaXMucmVjdC5oZWlnaHQ9ai5oZWlnaHR9LFAucHJvdG90eXBlLnNldENlbnRlcj1mdW5jdGlvbihGLGope3RoaXMucmVjdC54PUYtdGhpcy5yZWN0LndpZHRoLzIsdGhpcy5yZWN0Lnk9ai10aGlzLnJlY3QuaGVpZ2h0LzJ9LFAucHJvdG90eXBlLnNldExvY2F0aW9uPWZ1bmN0aW9uKEYsail7dGhpcy5yZWN0Lng9Rix0aGlzLnJlY3QueT1qfSxQLnByb3RvdHlwZS5tb3ZlQnk9ZnVuY3Rpb24oRixqKXt0aGlzLnJlY3QueCs9Rix0aGlzLnJlY3QueSs9an0sUC5wcm90b3R5cGUuZ2V0RWRnZUxpc3RUb05vZGU9ZnVuY3Rpb24oRil7dmFyIGo9W10sSz10aGlzO3JldHVybiBLLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oZWUpe2lmKGVlLnRhcmdldD09Ril7aWYoZWUuc291cmNlIT1LKXRocm93IkluY29ycmVjdCBlZGdlIHNvdXJjZSEiO2oucHVzaChlZSl9fSksan0sUC5wcm90b3R5cGUuZ2V0RWRnZXNCZXR3ZWVuPWZ1bmN0aW9uKEYpe3ZhciBqPVtdLEs9dGhpcztyZXR1cm4gSy5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKGVlKXtpZighKGVlLnNvdXJjZT09S3x8ZWUudGFyZ2V0PT1LKSl0aHJvdyJJbmNvcnJlY3QgZWRnZSBzb3VyY2UgYW5kL29yIHRhcmdldCI7KGVlLnRhcmdldD09Rnx8ZWUuc291cmNlPT1GKSYmai5wdXNoKGVlKX0pLGp9LFAucHJvdG90eXBlLmdldE5laWdoYm9yc0xpc3Q9ZnVuY3Rpb24oKXt2YXIgRj1uZXcgU2V0LGo9dGhpcztyZXR1cm4gai5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKEspe2lmKEsuc291cmNlPT1qKUYuYWRkKEsudGFyZ2V0KTtlbHNle2lmKEsudGFyZ2V0IT1qKXRocm93IkluY29ycmVjdCBpbmNpZGVuY3khIjtGLmFkZChLLnNvdXJjZSl9fSksRn0sUC5wcm90b3R5cGUud2l0aENoaWxkcmVuPWZ1bmN0aW9uKCl7dmFyIEY9bmV3IFNldCxqLEs7aWYoRi5hZGQodGhpcyksdGhpcy5jaGlsZCE9bnVsbClmb3IodmFyIGVlPXRoaXMuY2hpbGQuZ2V0Tm9kZXMoKSxpZT0wO2llPGVlLmxlbmd0aDtpZSsrKWo9ZWVbaWVdLEs9ai53aXRoQ2hpbGRyZW4oKSxLLmZvckVhY2goZnVuY3Rpb24ob2Upe0YuYWRkKG9lKX0pO3JldHVybiBGfSxQLnByb3RvdHlwZS5nZXROb09mQ2hpbGRyZW49ZnVuY3Rpb24oKXt2YXIgRj0wLGo7aWYodGhpcy5jaGlsZD09bnVsbClGPTE7ZWxzZSBmb3IodmFyIEs9dGhpcy5jaGlsZC5nZXROb2RlcygpLGVlPTA7ZWU8Sy5sZW5ndGg7ZWUrKylqPUtbZWVdLEYrPWouZ2V0Tm9PZkNoaWxkcmVuKCk7cmV0dXJuIEY9PTAmJihGPTEpLEZ9LFAucHJvdG90eXBlLmdldEVzdGltYXRlZFNpemU9ZnVuY3Rpb24oKXtpZih0aGlzLmVzdGltYXRlZFNpemU9PWIuTUlOX1ZBTFVFKXRocm93ImFzc2VydCBmYWlsZWQiO3JldHVybiB0aGlzLmVzdGltYXRlZFNpemV9LFAucHJvdG90eXBlLmNhbGNFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGQ9PW51bGw/dGhpcy5lc3RpbWF0ZWRTaXplPSh0aGlzLnJlY3Qud2lkdGgrdGhpcy5yZWN0LmhlaWdodCkvMjoodGhpcy5lc3RpbWF0ZWRTaXplPXRoaXMuY2hpbGQuY2FsY0VzdGltYXRlZFNpemUoKSx0aGlzLnJlY3Qud2lkdGg9dGhpcy5lc3RpbWF0ZWRTaXplLHRoaXMucmVjdC5oZWlnaHQ9dGhpcy5lc3RpbWF0ZWRTaXplLHRoaXMuZXN0aW1hdGVkU2l6ZSl9LFAucHJvdG90eXBlLnNjYXR0ZXI9ZnVuY3Rpb24oKXt2YXIgRixqLEs9LVQuSU5JVElBTF9XT1JMRF9CT1VOREFSWSxlZT1ULklOSVRJQUxfV09STERfQk9VTkRBUlk7Rj1ULldPUkxEX0NFTlRFUl9YK18ubmV4dERvdWJsZSgpKihlZS1LKStLO3ZhciBpZT0tVC5JTklUSUFMX1dPUkxEX0JPVU5EQVJZLG9lPVQuSU5JVElBTF9XT1JMRF9CT1VOREFSWTtqPVQuV09STERfQ0VOVEVSX1krXy5uZXh0RG91YmxlKCkqKG9lLWllKStpZSx0aGlzLnJlY3QueD1GLHRoaXMucmVjdC55PWp9LFAucHJvdG90eXBlLnVwZGF0ZUJvdW5kcz1mdW5jdGlvbigpe2lmKHRoaXMuZ2V0Q2hpbGQoKT09bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIjtpZih0aGlzLmdldENoaWxkKCkuZ2V0Tm9kZXMoKS5sZW5ndGghPTApe3ZhciBGPXRoaXMuZ2V0Q2hpbGQoKTtpZihGLnVwZGF0ZUJvdW5kcyghMCksdGhpcy5yZWN0Lng9Ri5nZXRMZWZ0KCksdGhpcy5yZWN0Lnk9Ri5nZXRUb3AoKSx0aGlzLnNldFdpZHRoKEYuZ2V0UmlnaHQoKS1GLmdldExlZnQoKSksdGhpcy5zZXRIZWlnaHQoRi5nZXRCb3R0b20oKS1GLmdldFRvcCgpKSxULk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUyl7dmFyIGo9Ri5nZXRSaWdodCgpLUYuZ2V0TGVmdCgpLEs9Ri5nZXRCb3R0b20oKS1GLmdldFRvcCgpO3RoaXMubGFiZWxXaWR0aD5qJiYodGhpcy5yZWN0LngtPSh0aGlzLmxhYmVsV2lkdGgtaikvMix0aGlzLnNldFdpZHRoKHRoaXMubGFiZWxXaWR0aCkpLHRoaXMubGFiZWxIZWlnaHQ+SyYmKHRoaXMubGFiZWxQb3M9PSJjZW50ZXIiP3RoaXMucmVjdC55LT0odGhpcy5sYWJlbEhlaWdodC1LKS8yOnRoaXMubGFiZWxQb3M9PSJ0b3AiJiYodGhpcy5yZWN0LnktPXRoaXMubGFiZWxIZWlnaHQtSyksdGhpcy5zZXRIZWlnaHQodGhpcy5sYWJlbEhlaWdodCkpfX19LFAucHJvdG90eXBlLmdldEluY2x1c2lvblRyZWVEZXB0aD1mdW5jdGlvbigpe2lmKHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoPT1iLk1BWF9WQUxVRSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtyZXR1cm4gdGhpcy5pbmNsdXNpb25UcmVlRGVwdGh9LFAucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihGKXt2YXIgaj10aGlzLnJlY3QueDtqPlQuV09STERfQk9VTkRBUlk/aj1ULldPUkxEX0JPVU5EQVJZOmo8LVQuV09STERfQk9VTkRBUlkmJihqPS1ULldPUkxEX0JPVU5EQVJZKTt2YXIgSz10aGlzLnJlY3QueTtLPlQuV09STERfQk9VTkRBUlk/Sz1ULldPUkxEX0JPVU5EQVJZOks8LVQuV09STERfQk9VTkRBUlkmJihLPS1ULldPUkxEX0JPVU5EQVJZKTt2YXIgZWU9bmV3IEEoaixLKSxpZT1GLmludmVyc2VUcmFuc2Zvcm1Qb2ludChlZSk7dGhpcy5zZXRMb2NhdGlvbihpZS54LGllLnkpfSxQLnByb3RvdHlwZS5nZXRMZWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC54fSxQLnByb3RvdHlwZS5nZXRSaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueCt0aGlzLnJlY3Qud2lkdGh9LFAucHJvdG90eXBlLmdldFRvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueX0sUC5wcm90b3R5cGUuZ2V0Qm90dG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC55K3RoaXMucmVjdC5oZWlnaHR9LFAucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyPT1udWxsP251bGw6dGhpcy5vd25lci5nZXRQYXJlbnQoKX0sdS5leHBvcnRzPVB9LGZ1bmN0aW9uKHUsZCxwKXtmdW5jdGlvbiB2KGIseSl7Yj09bnVsbCYmeT09bnVsbD8odGhpcy54PTAsdGhpcy55PTApOih0aGlzLng9Yix0aGlzLnk9eSl9di5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LHYucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSx2LnByb3RvdHlwZS5zZXRYPWZ1bmN0aW9uKGIpe3RoaXMueD1ifSx2LnByb3RvdHlwZS5zZXRZPWZ1bmN0aW9uKGIpe3RoaXMueT1ifSx2LnByb3RvdHlwZS5nZXREaWZmZXJlbmNlPWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgRGltZW5zaW9uRCh0aGlzLngtYi54LHRoaXMueS1iLnkpfSx2LnByb3RvdHlwZS5nZXRDb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB2KHRoaXMueCx0aGlzLnkpfSx2LnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMueCs9Yi53aWR0aCx0aGlzLnkrPWIuaGVpZ2h0LHRoaXN9LHUuZXhwb3J0cz12fSxmdW5jdGlvbih1LGQscCl7dmFyIHY9cCgyKSxiPXAoMTApLHk9cCgwKSxUPXAoNiksXz1wKDMpLEE9cCgxKSxQPXAoMTMpLFI9cCgxMiksRj1wKDExKTtmdW5jdGlvbiBqKGVlLGllLG9lKXt2LmNhbGwodGhpcyxvZSksdGhpcy5lc3RpbWF0ZWRTaXplPWIuTUlOX1ZBTFVFLHRoaXMubWFyZ2luPXkuREVGQVVMVF9HUkFQSF9NQVJHSU4sdGhpcy5lZGdlcz1bXSx0aGlzLm5vZGVzPVtdLHRoaXMuaXNDb25uZWN0ZWQ9ITEsdGhpcy5wYXJlbnQ9ZWUsaWUhPW51bGwmJmllIGluc3RhbmNlb2YgVD90aGlzLmdyYXBoTWFuYWdlcj1pZTppZSE9bnVsbCYmaWUgaW5zdGFuY2VvZiBMYXlvdXQmJih0aGlzLmdyYXBoTWFuYWdlcj1pZS5ncmFwaE1hbmFnZXIpfWoucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodi5wcm90b3R5cGUpO2Zvcih2YXIgSyBpbiB2KWpbS109dltLXTtqLnByb3RvdHlwZS5nZXROb2Rlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzfSxqLnByb3RvdHlwZS5nZXRFZGdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzfSxqLnByb3RvdHlwZS5nZXRHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXJ9LGoucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudH0sai5wcm90b3R5cGUuZ2V0TGVmdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlZnR9LGoucHJvdG90eXBlLmdldFJpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmlnaHR9LGoucHJvdG90eXBlLmdldFRvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvcH0sai5wcm90b3R5cGUuZ2V0Qm90dG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm90dG9tfSxqLnByb3RvdHlwZS5pc0Nvbm5lY3RlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzQ29ubmVjdGVkfSxqLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZWUsaWUsb2Upe2lmKGllPT1udWxsJiZvZT09bnVsbCl7dmFyIHBlPWVlO2lmKHRoaXMuZ3JhcGhNYW5hZ2VyPT1udWxsKXRocm93IkdyYXBoIGhhcyBubyBncmFwaCBtZ3IhIjtpZih0aGlzLmdldE5vZGVzKCkuaW5kZXhPZihwZSk+LTEpdGhyb3ciTm9kZSBhbHJlYWR5IGluIGdyYXBoISI7cmV0dXJuIHBlLm93bmVyPXRoaXMsdGhpcy5nZXROb2RlcygpLnB1c2gocGUpLHBlfWVsc2V7dmFyIGJlPWVlO2lmKCEodGhpcy5nZXROb2RlcygpLmluZGV4T2YoaWUpPi0xJiZ0aGlzLmdldE5vZGVzKCkuaW5kZXhPZihvZSk+LTEpKXRocm93IlNvdXJjZSBvciB0YXJnZXQgbm90IGluIGdyYXBoISI7aWYoIShpZS5vd25lcj09b2Uub3duZXImJmllLm93bmVyPT10aGlzKSl0aHJvdyJCb3RoIG93bmVycyBtdXN0IGJlIHRoaXMgZ3JhcGghIjtyZXR1cm4gaWUub3duZXIhPW9lLm93bmVyP251bGw6KGJlLnNvdXJjZT1pZSxiZS50YXJnZXQ9b2UsYmUuaXNJbnRlckdyYXBoPSExLHRoaXMuZ2V0RWRnZXMoKS5wdXNoKGJlKSxpZS5lZGdlcy5wdXNoKGJlKSxvZSE9aWUmJm9lLmVkZ2VzLnB1c2goYmUpLGJlKX19LGoucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlZSl7dmFyIGllPWVlO2lmKGVlIGluc3RhbmNlb2YgXyl7aWYoaWU9PW51bGwpdGhyb3ciTm9kZSBpcyBudWxsISI7aWYoIShpZS5vd25lciE9bnVsbCYmaWUub3duZXI9PXRoaXMpKXRocm93Ik93bmVyIGdyYXBoIGlzIGludmFsaWQhIjtpZih0aGlzLmdyYXBoTWFuYWdlcj09bnVsbCl0aHJvdyJPd25lciBncmFwaCBtYW5hZ2VyIGlzIGludmFsaWQhIjtmb3IodmFyIG9lPWllLmVkZ2VzLnNsaWNlKCkscGUsYmU9b2UubGVuZ3RoLGFlPTA7YWU8YmU7YWUrKylwZT1vZVthZV0scGUuaXNJbnRlckdyYXBoP3RoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZShwZSk6cGUuc291cmNlLm93bmVyLnJlbW92ZShwZSk7dmFyIG5lPXRoaXMubm9kZXMuaW5kZXhPZihpZSk7aWYobmU9PS0xKXRocm93Ik5vZGUgbm90IGluIG93bmVyIG5vZGUgbGlzdCEiO3RoaXMubm9kZXMuc3BsaWNlKG5lLDEpfWVsc2UgaWYoZWUgaW5zdGFuY2VvZiBBKXt2YXIgcGU9ZWU7aWYocGU9PW51bGwpdGhyb3ciRWRnZSBpcyBudWxsISI7aWYoIShwZS5zb3VyY2UhPW51bGwmJnBlLnRhcmdldCE9bnVsbCkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEocGUuc291cmNlLm93bmVyIT1udWxsJiZwZS50YXJnZXQub3duZXIhPW51bGwmJnBlLnNvdXJjZS5vd25lcj09dGhpcyYmcGUudGFyZ2V0Lm93bmVyPT10aGlzKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBvd25lciBpcyBpbnZhbGlkISI7dmFyIHNlPXBlLnNvdXJjZS5lZGdlcy5pbmRleE9mKHBlKSxkZT1wZS50YXJnZXQuZWRnZXMuaW5kZXhPZihwZSk7aWYoIShzZT4tMSYmZGU+LTEpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGRvZXNuJ3Qga25vdyB0aGlzIGVkZ2UhIjtwZS5zb3VyY2UuZWRnZXMuc3BsaWNlKHNlLDEpLHBlLnRhcmdldCE9cGUuc291cmNlJiZwZS50YXJnZXQuZWRnZXMuc3BsaWNlKGRlLDEpO3ZhciBuZT1wZS5zb3VyY2Uub3duZXIuZ2V0RWRnZXMoKS5pbmRleE9mKHBlKTtpZihuZT09LTEpdGhyb3ciTm90IGluIG93bmVyJ3MgZWRnZSBsaXN0ISI7cGUuc291cmNlLm93bmVyLmdldEVkZ2VzKCkuc3BsaWNlKG5lLDEpfX0sai5wcm90b3R5cGUudXBkYXRlTGVmdFRvcD1mdW5jdGlvbigpe2Zvcih2YXIgZWU9Yi5NQVhfVkFMVUUsaWU9Yi5NQVhfVkFMVUUsb2UscGUsYmUsYWU9dGhpcy5nZXROb2RlcygpLG5lPWFlLmxlbmd0aCxzZT0wO3NlPG5lO3NlKyspe3ZhciBkZT1hZVtzZV07b2U9ZGUuZ2V0VG9wKCkscGU9ZGUuZ2V0TGVmdCgpLGVlPm9lJiYoZWU9b2UpLGllPnBlJiYoaWU9cGUpfXJldHVybiBlZT09Yi5NQVhfVkFMVUU/bnVsbDooYWVbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQhPW51bGw/YmU9YWVbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQ6YmU9dGhpcy5tYXJnaW4sdGhpcy5sZWZ0PWllLWJlLHRoaXMudG9wPWVlLWJlLG5ldyBSKHRoaXMubGVmdCx0aGlzLnRvcCkpfSxqLnByb3RvdHlwZS51cGRhdGVCb3VuZHM9ZnVuY3Rpb24oZWUpe2Zvcih2YXIgaWU9Yi5NQVhfVkFMVUUsb2U9LWIuTUFYX1ZBTFVFLHBlPWIuTUFYX1ZBTFVFLGJlPS1iLk1BWF9WQUxVRSxhZSxuZSxzZSxkZSxYLGdlPXRoaXMubm9kZXMsVz1nZS5sZW5ndGgseGU9MDt4ZTxXO3hlKyspe3ZhciBVPWdlW3hlXTtlZSYmVS5jaGlsZCE9bnVsbCYmVS51cGRhdGVCb3VuZHMoKSxhZT1VLmdldExlZnQoKSxuZT1VLmdldFJpZ2h0KCksc2U9VS5nZXRUb3AoKSxkZT1VLmdldEJvdHRvbSgpLGllPmFlJiYoaWU9YWUpLG9lPG5lJiYob2U9bmUpLHBlPnNlJiYocGU9c2UpLGJlPGRlJiYoYmU9ZGUpfXZhciBGZT1uZXcgUChpZSxwZSxvZS1pZSxiZS1wZSk7aWU9PWIuTUFYX1ZBTFVFJiYodGhpcy5sZWZ0PXRoaXMucGFyZW50LmdldExlZnQoKSx0aGlzLnJpZ2h0PXRoaXMucGFyZW50LmdldFJpZ2h0KCksdGhpcy50b3A9dGhpcy5wYXJlbnQuZ2V0VG9wKCksdGhpcy5ib3R0b209dGhpcy5wYXJlbnQuZ2V0Qm90dG9tKCkpLGdlWzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0IT1udWxsP1g9Z2VbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQ6WD10aGlzLm1hcmdpbix0aGlzLmxlZnQ9RmUueC1YLHRoaXMucmlnaHQ9RmUueCtGZS53aWR0aCtYLHRoaXMudG9wPUZlLnktWCx0aGlzLmJvdHRvbT1GZS55K0ZlLmhlaWdodCtYfSxqLmNhbGN1bGF0ZUJvdW5kcz1mdW5jdGlvbihlZSl7Zm9yKHZhciBpZT1iLk1BWF9WQUxVRSxvZT0tYi5NQVhfVkFMVUUscGU9Yi5NQVhfVkFMVUUsYmU9LWIuTUFYX1ZBTFVFLGFlLG5lLHNlLGRlLFg9ZWUubGVuZ3RoLGdlPTA7Z2U8WDtnZSsrKXt2YXIgVz1lZVtnZV07YWU9Vy5nZXRMZWZ0KCksbmU9Vy5nZXRSaWdodCgpLHNlPVcuZ2V0VG9wKCksZGU9Vy5nZXRCb3R0b20oKSxpZT5hZSYmKGllPWFlKSxvZTxuZSYmKG9lPW5lKSxwZT5zZSYmKHBlPXNlKSxiZTxkZSYmKGJlPWRlKX12YXIgeGU9bmV3IFAoaWUscGUsb2UtaWUsYmUtcGUpO3JldHVybiB4ZX0sai5wcm90b3R5cGUuZ2V0SW5jbHVzaW9uVHJlZURlcHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKT8xOnRoaXMucGFyZW50LmdldEluY2x1c2lvblRyZWVEZXB0aCgpfSxqLnByb3RvdHlwZS5nZXRFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7aWYodGhpcy5lc3RpbWF0ZWRTaXplPT1iLk1JTl9WQUxVRSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtyZXR1cm4gdGhpcy5lc3RpbWF0ZWRTaXplfSxqLnByb3RvdHlwZS5jYWxjRXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe2Zvcih2YXIgZWU9MCxpZT10aGlzLm5vZGVzLG9lPWllLmxlbmd0aCxwZT0wO3BlPG9lO3BlKyspe3ZhciBiZT1pZVtwZV07ZWUrPWJlLmNhbGNFc3RpbWF0ZWRTaXplKCl9cmV0dXJuIGVlPT0wP3RoaXMuZXN0aW1hdGVkU2l6ZT15LkVNUFRZX0NPTVBPVU5EX05PREVfU0laRTp0aGlzLmVzdGltYXRlZFNpemU9ZWUvTWF0aC5zcXJ0KHRoaXMubm9kZXMubGVuZ3RoKSx0aGlzLmVzdGltYXRlZFNpemV9LGoucHJvdG90eXBlLnVwZGF0ZUNvbm5lY3RlZD1mdW5jdGlvbigpe3ZhciBlZT10aGlzO2lmKHRoaXMubm9kZXMubGVuZ3RoPT0wKXt0aGlzLmlzQ29ubmVjdGVkPSEwO3JldHVybn12YXIgaWU9bmV3IEYsb2U9bmV3IFNldCxwZT10aGlzLm5vZGVzWzBdLGJlLGFlLG5lPXBlLndpdGhDaGlsZHJlbigpO2ZvcihuZS5mb3JFYWNoKGZ1bmN0aW9uKHhlKXtpZS5wdXNoKHhlKSxvZS5hZGQoeGUpfSk7aWUubGVuZ3RoIT09MDspe3BlPWllLnNoaWZ0KCksYmU9cGUuZ2V0RWRnZXMoKTtmb3IodmFyIHNlPWJlLmxlbmd0aCxkZT0wO2RlPHNlO2RlKyspe3ZhciBYPWJlW2RlXTtpZihhZT1YLmdldE90aGVyRW5kSW5HcmFwaChwZSx0aGlzKSxhZSE9bnVsbCYmIW9lLmhhcyhhZSkpe3ZhciBnZT1hZS53aXRoQ2hpbGRyZW4oKTtnZS5mb3JFYWNoKGZ1bmN0aW9uKHhlKXtpZS5wdXNoKHhlKSxvZS5hZGQoeGUpfSl9fX1pZih0aGlzLmlzQ29ubmVjdGVkPSExLG9lLnNpemU+PXRoaXMubm9kZXMubGVuZ3RoKXt2YXIgVz0wO29lLmZvckVhY2goZnVuY3Rpb24oeGUpe3hlLm93bmVyPT1lZSYmVysrfSksVz09dGhpcy5ub2Rlcy5sZW5ndGgmJih0aGlzLmlzQ29ubmVjdGVkPSEwKX19LHUuZXhwb3J0cz1qfSxmdW5jdGlvbih1LGQscCl7dmFyIHYsYj1wKDEpO2Z1bmN0aW9uIHkoVCl7dj1wKDUpLHRoaXMubGF5b3V0PVQsdGhpcy5ncmFwaHM9W10sdGhpcy5lZGdlcz1bXX15LnByb3RvdHlwZS5hZGRSb290PWZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5sYXlvdXQubmV3R3JhcGgoKSxfPXRoaXMubGF5b3V0Lm5ld05vZGUobnVsbCksQT10aGlzLmFkZChULF8pO3JldHVybiB0aGlzLnNldFJvb3RHcmFwaChBKSx0aGlzLnJvb3RHcmFwaH0seS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFQsXyxBLFAsUil7aWYoQT09bnVsbCYmUD09bnVsbCYmUj09bnVsbCl7aWYoVD09bnVsbCl0aHJvdyJHcmFwaCBpcyBudWxsISI7aWYoXz09bnVsbCl0aHJvdyJQYXJlbnQgbm9kZSBpcyBudWxsISI7aWYodGhpcy5ncmFwaHMuaW5kZXhPZihUKT4tMSl0aHJvdyJHcmFwaCBhbHJlYWR5IGluIHRoaXMgZ3JhcGggbWdyISI7aWYodGhpcy5ncmFwaHMucHVzaChUKSxULnBhcmVudCE9bnVsbCl0aHJvdyJBbHJlYWR5IGhhcyBhIHBhcmVudCEiO2lmKF8uY2hpbGQhPW51bGwpdGhyb3ciQWxyZWFkeSBoYXMgYSBjaGlsZCEiO3JldHVybiBULnBhcmVudD1fLF8uY2hpbGQ9VCxUfWVsc2V7Uj1BLFA9XyxBPVQ7dmFyIEY9UC5nZXRPd25lcigpLGo9Ui5nZXRPd25lcigpO2lmKCEoRiE9bnVsbCYmRi5nZXRHcmFwaE1hbmFnZXIoKT09dGhpcykpdGhyb3ciU291cmNlIG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKCEoaiE9bnVsbCYmai5nZXRHcmFwaE1hbmFnZXIoKT09dGhpcykpdGhyb3ciVGFyZ2V0IG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKEY9PWopcmV0dXJuIEEuaXNJbnRlckdyYXBoPSExLEYuYWRkKEEsUCxSKTtpZihBLmlzSW50ZXJHcmFwaD0hMCxBLnNvdXJjZT1QLEEudGFyZ2V0PVIsdGhpcy5lZGdlcy5pbmRleE9mKEEpPi0xKXRocm93IkVkZ2UgYWxyZWFkeSBpbiBpbnRlci1ncmFwaCBlZGdlIGxpc3QhIjtpZih0aGlzLmVkZ2VzLnB1c2goQSksIShBLnNvdXJjZSE9bnVsbCYmQS50YXJnZXQhPW51bGwpKXRocm93IkVkZ2Ugc291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEoQS5zb3VyY2UuZWRnZXMuaW5kZXhPZihBKT09LTEmJkEudGFyZ2V0LmVkZ2VzLmluZGV4T2YoQSk9PS0xKSl0aHJvdyJFZGdlIGFscmVhZHkgaW4gc291cmNlIGFuZC9vciB0YXJnZXQgaW5jaWRlbmN5IGxpc3QhIjtyZXR1cm4gQS5zb3VyY2UuZWRnZXMucHVzaChBKSxBLnRhcmdldC5lZGdlcy5wdXNoKEEpLEF9fSx5LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oVCl7aWYoVCBpbnN0YW5jZW9mIHYpe3ZhciBfPVQ7aWYoXy5nZXRHcmFwaE1hbmFnZXIoKSE9dGhpcyl0aHJvdyJHcmFwaCBub3QgaW4gdGhpcyBncmFwaCBtZ3IiO2lmKCEoXz09dGhpcy5yb290R3JhcGh8fF8ucGFyZW50IT1udWxsJiZfLnBhcmVudC5ncmFwaE1hbmFnZXI9PXRoaXMpKXRocm93IkludmFsaWQgcGFyZW50IG5vZGUhIjt2YXIgQT1bXTtBPUEuY29uY2F0KF8uZ2V0RWRnZXMoKSk7Zm9yKHZhciBQLFI9QS5sZW5ndGgsRj0wO0Y8UjtGKyspUD1BW0ZdLF8ucmVtb3ZlKFApO3ZhciBqPVtdO2o9ai5jb25jYXQoXy5nZXROb2RlcygpKTt2YXIgSztSPWoubGVuZ3RoO2Zvcih2YXIgRj0wO0Y8UjtGKyspSz1qW0ZdLF8ucmVtb3ZlKEspO189PXRoaXMucm9vdEdyYXBoJiZ0aGlzLnNldFJvb3RHcmFwaChudWxsKTt2YXIgZWU9dGhpcy5ncmFwaHMuaW5kZXhPZihfKTt0aGlzLmdyYXBocy5zcGxpY2UoZWUsMSksXy5wYXJlbnQ9bnVsbH1lbHNlIGlmKFQgaW5zdGFuY2VvZiBiKXtpZihQPVQsUD09bnVsbCl0aHJvdyJFZGdlIGlzIG51bGwhIjtpZighUC5pc0ludGVyR3JhcGgpdGhyb3ciTm90IGFuIGludGVyLWdyYXBoIGVkZ2UhIjtpZighKFAuc291cmNlIT1udWxsJiZQLnRhcmdldCE9bnVsbCkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEoUC5zb3VyY2UuZWRnZXMuaW5kZXhPZihQKSE9LTEmJlAudGFyZ2V0LmVkZ2VzLmluZGV4T2YoUCkhPS0xKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBkb2Vzbid0IGtub3cgdGhpcyBlZGdlISI7dmFyIGVlPVAuc291cmNlLmVkZ2VzLmluZGV4T2YoUCk7aWYoUC5zb3VyY2UuZWRnZXMuc3BsaWNlKGVlLDEpLGVlPVAudGFyZ2V0LmVkZ2VzLmluZGV4T2YoUCksUC50YXJnZXQuZWRnZXMuc3BsaWNlKGVlLDEpLCEoUC5zb3VyY2Uub3duZXIhPW51bGwmJlAuc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpIT1udWxsKSl0aHJvdyJFZGdlIG93bmVyIGdyYXBoIG9yIG93bmVyIGdyYXBoIG1hbmFnZXIgaXMgbnVsbCEiO2lmKFAuc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLmluZGV4T2YoUCk9PS0xKXRocm93Ik5vdCBpbiBvd25lciBncmFwaCBtYW5hZ2VyJ3MgZWRnZSBsaXN0ISI7dmFyIGVlPVAuc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLmluZGV4T2YoUCk7UC5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuc3BsaWNlKGVlLDEpfX0seS5wcm90b3R5cGUudXBkYXRlQm91bmRzPWZ1bmN0aW9uKCl7dGhpcy5yb290R3JhcGgudXBkYXRlQm91bmRzKCEwKX0seS5wcm90b3R5cGUuZ2V0R3JhcGhzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhzfSx5LnByb3RvdHlwZS5nZXRBbGxOb2Rlcz1mdW5jdGlvbigpe2lmKHRoaXMuYWxsTm9kZXM9PW51bGwpe2Zvcih2YXIgVD1bXSxfPXRoaXMuZ2V0R3JhcGhzKCksQT1fLmxlbmd0aCxQPTA7UDxBO1ArKylUPVQuY29uY2F0KF9bUF0uZ2V0Tm9kZXMoKSk7dGhpcy5hbGxOb2Rlcz1UfXJldHVybiB0aGlzLmFsbE5vZGVzfSx5LnByb3RvdHlwZS5yZXNldEFsbE5vZGVzPWZ1bmN0aW9uKCl7dGhpcy5hbGxOb2Rlcz1udWxsfSx5LnByb3RvdHlwZS5yZXNldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7dGhpcy5hbGxFZGdlcz1udWxsfSx5LnByb3RvdHlwZS5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1udWxsfSx5LnByb3RvdHlwZS5nZXRBbGxFZGdlcz1mdW5jdGlvbigpe2lmKHRoaXMuYWxsRWRnZXM9PW51bGwpe3ZhciBUPVtdLF89dGhpcy5nZXRHcmFwaHMoKTtfLmxlbmd0aDtmb3IodmFyIEE9MDtBPF8ubGVuZ3RoO0ErKylUPVQuY29uY2F0KF9bQV0uZ2V0RWRnZXMoKSk7VD1ULmNvbmNhdCh0aGlzLmVkZ2VzKSx0aGlzLmFsbEVkZ2VzPVR9cmV0dXJuIHRoaXMuYWxsRWRnZXN9LHkucHJvdG90eXBlLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb259LHkucHJvdG90eXBlLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKFQpe2lmKHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24hPW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7dGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1UfSx5LnByb3RvdHlwZS5nZXRSb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdEdyYXBofSx5LnByb3RvdHlwZS5zZXRSb290R3JhcGg9ZnVuY3Rpb24oVCl7aWYoVC5nZXRHcmFwaE1hbmFnZXIoKSE9dGhpcyl0aHJvdyJSb290IG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO3RoaXMucm9vdEdyYXBoPVQsVC5wYXJlbnQ9PW51bGwmJihULnBhcmVudD10aGlzLmxheW91dC5uZXdOb2RlKCJSb290IG5vZGUiKSl9LHkucHJvdG90eXBlLmdldExheW91dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxheW91dH0seS5wcm90b3R5cGUuaXNPbmVBbmNlc3Rvck9mT3RoZXI9ZnVuY3Rpb24oVCxfKXtpZighKFQhPW51bGwmJl8hPW51bGwpKXRocm93ImFzc2VydCBmYWlsZWQiO2lmKFQ9PV8pcmV0dXJuITA7dmFyIEE9VC5nZXRPd25lcigpLFA7ZG97aWYoUD1BLmdldFBhcmVudCgpLFA9PW51bGwpYnJlYWs7aWYoUD09XylyZXR1cm4hMDtpZihBPVAuZ2V0T3duZXIoKSxBPT1udWxsKWJyZWFrfXdoaWxlKCEwKTtBPV8uZ2V0T3duZXIoKTtkb3tpZihQPUEuZ2V0UGFyZW50KCksUD09bnVsbClicmVhaztpZihQPT1UKXJldHVybiEwO2lmKEE9UC5nZXRPd25lcigpLEE9PW51bGwpYnJlYWt9d2hpbGUoITApO3JldHVybiExfSx5LnByb3RvdHlwZS5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciBULF8sQSxQLFIsRj10aGlzLmdldEFsbEVkZ2VzKCksaj1GLmxlbmd0aCxLPTA7SzxqO0srKyl7aWYoVD1GW0tdLF89VC5zb3VyY2UsQT1ULnRhcmdldCxULmxjYT1udWxsLFQuc291cmNlSW5MY2E9XyxULnRhcmdldEluTGNhPUEsXz09QSl7VC5sY2E9Xy5nZXRPd25lcigpO2NvbnRpbnVlfWZvcihQPV8uZ2V0T3duZXIoKTtULmxjYT09bnVsbDspe2ZvcihULnRhcmdldEluTGNhPUEsUj1BLmdldE93bmVyKCk7VC5sY2E9PW51bGw7KXtpZihSPT1QKXtULmxjYT1SO2JyZWFrfWlmKFI9PXRoaXMucm9vdEdyYXBoKWJyZWFrO2lmKFQubGNhIT1udWxsKXRocm93ImFzc2VydCBmYWlsZWQiO1QudGFyZ2V0SW5MY2E9Ui5nZXRQYXJlbnQoKSxSPVQudGFyZ2V0SW5MY2EuZ2V0T3duZXIoKX1pZihQPT10aGlzLnJvb3RHcmFwaClicmVhaztULmxjYT09bnVsbCYmKFQuc291cmNlSW5MY2E9UC5nZXRQYXJlbnQoKSxQPVQuc291cmNlSW5MY2EuZ2V0T3duZXIoKSl9aWYoVC5sY2E9PW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCJ9fSx5LnByb3RvdHlwZS5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3I9ZnVuY3Rpb24oVCxfKXtpZihUPT1fKXJldHVybiBULmdldE93bmVyKCk7dmFyIEE9VC5nZXRPd25lcigpO2Rve2lmKEE9PW51bGwpYnJlYWs7dmFyIFA9Xy5nZXRPd25lcigpO2Rve2lmKFA9PW51bGwpYnJlYWs7aWYoUD09QSlyZXR1cm4gUDtQPVAuZ2V0UGFyZW50KCkuZ2V0T3duZXIoKX13aGlsZSghMCk7QT1BLmdldFBhcmVudCgpLmdldE93bmVyKCl9d2hpbGUoITApO3JldHVybiBBfSx5LnByb3RvdHlwZS5jYWxjSW5jbHVzaW9uVHJlZURlcHRocz1mdW5jdGlvbihULF8pe1Q9PW51bGwmJl89PW51bGwmJihUPXRoaXMucm9vdEdyYXBoLF89MSk7Zm9yKHZhciBBLFA9VC5nZXROb2RlcygpLFI9UC5sZW5ndGgsRj0wO0Y8UjtGKyspQT1QW0ZdLEEuaW5jbHVzaW9uVHJlZURlcHRoPV8sQS5jaGlsZCE9bnVsbCYmdGhpcy5jYWxjSW5jbHVzaW9uVHJlZURlcHRocyhBLmNoaWxkLF8rMSl9LHkucHJvdG90eXBlLmluY2x1ZGVzSW52YWxpZEVkZ2U9ZnVuY3Rpb24oKXtmb3IodmFyIFQsXz10aGlzLmVkZ2VzLmxlbmd0aCxBPTA7QTxfO0ErKylpZihUPXRoaXMuZWRnZXNbQV0sdGhpcy5pc09uZUFuY2VzdG9yT2ZPdGhlcihULnNvdXJjZSxULnRhcmdldCkpcmV0dXJuITA7cmV0dXJuITF9LHUuZXhwb3J0cz15fSxmdW5jdGlvbih1LGQscCl7dmFyIHY9cCgwKTtmdW5jdGlvbiBiKCl7fWZvcih2YXIgeSBpbiB2KWJbeV09dlt5XTtiLk1BWF9JVEVSQVRJT05TPTI1MDAsYi5ERUZBVUxUX0VER0VfTEVOR1RIPTUwLGIuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEg9LjQ1LGIuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEg9NDUwMCxiLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSD0uNCxiLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSD0xLGIuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj0zLjgsYi5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPTEuNSxiLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OPSEwLGIuREVGQVVMVF9VU0VfU01BUlRfUkVQVUxTSU9OX1JBTkdFX0NBTENVTEFUSU9OPSEwLGIuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTD0uMyxiLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1I9LjMzLGIuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUPTFlMyxiLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVD01ZTMsYi5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUw9MTAwLGIuTUFYX05PREVfRElTUExBQ0VNRU5UPWIuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMKjMsYi5NSU5fUkVQVUxTSU9OX0RJU1Q9Yi5ERUZBVUxUX0VER0VfTEVOR1RILzEwLGIuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EPTEwMCxiLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9LjEsYi5NSU5fRURHRV9MRU5HVEg9MSxiLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EPTEwLHUuZXhwb3J0cz1ifSxmdW5jdGlvbih1LGQscCl7dmFyIHY9cCgxMik7ZnVuY3Rpb24gYigpe31iLmNhbGNTZXBhcmF0aW9uQW1vdW50PWZ1bmN0aW9uKHksVCxfLEEpe2lmKCF5LmludGVyc2VjdHMoVCkpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7dmFyIFA9bmV3IEFycmF5KDIpO3RoaXMuZGVjaWRlRGlyZWN0aW9uc0Zvck92ZXJsYXBwaW5nTm9kZXMoeSxULFApLF9bMF09TWF0aC5taW4oeS5nZXRSaWdodCgpLFQuZ2V0UmlnaHQoKSktTWF0aC5tYXgoeS54LFQueCksX1sxXT1NYXRoLm1pbih5LmdldEJvdHRvbSgpLFQuZ2V0Qm90dG9tKCkpLU1hdGgubWF4KHkueSxULnkpLHkuZ2V0WCgpPD1ULmdldFgoKSYmeS5nZXRSaWdodCgpPj1ULmdldFJpZ2h0KCk/X1swXSs9TWF0aC5taW4oVC5nZXRYKCkteS5nZXRYKCkseS5nZXRSaWdodCgpLVQuZ2V0UmlnaHQoKSk6VC5nZXRYKCk8PXkuZ2V0WCgpJiZULmdldFJpZ2h0KCk+PXkuZ2V0UmlnaHQoKSYmKF9bMF0rPU1hdGgubWluKHkuZ2V0WCgpLVQuZ2V0WCgpLFQuZ2V0UmlnaHQoKS15LmdldFJpZ2h0KCkpKSx5LmdldFkoKTw9VC5nZXRZKCkmJnkuZ2V0Qm90dG9tKCk+PVQuZ2V0Qm90dG9tKCk/X1sxXSs9TWF0aC5taW4oVC5nZXRZKCkteS5nZXRZKCkseS5nZXRCb3R0b20oKS1ULmdldEJvdHRvbSgpKTpULmdldFkoKTw9eS5nZXRZKCkmJlQuZ2V0Qm90dG9tKCk+PXkuZ2V0Qm90dG9tKCkmJihfWzFdKz1NYXRoLm1pbih5LmdldFkoKS1ULmdldFkoKSxULmdldEJvdHRvbSgpLXkuZ2V0Qm90dG9tKCkpKTt2YXIgUj1NYXRoLmFicygoVC5nZXRDZW50ZXJZKCkteS5nZXRDZW50ZXJZKCkpLyhULmdldENlbnRlclgoKS15LmdldENlbnRlclgoKSkpO1QuZ2V0Q2VudGVyWSgpPT09eS5nZXRDZW50ZXJZKCkmJlQuZ2V0Q2VudGVyWCgpPT09eS5nZXRDZW50ZXJYKCkmJihSPTEpO3ZhciBGPVIqX1swXSxqPV9bMV0vUjtfWzBdPGo/aj1fWzBdOkY9X1sxXSxfWzBdPS0xKlBbMF0qKGovMitBKSxfWzFdPS0xKlBbMV0qKEYvMitBKX0sYi5kZWNpZGVEaXJlY3Rpb25zRm9yT3ZlcmxhcHBpbmdOb2Rlcz1mdW5jdGlvbih5LFQsXyl7eS5nZXRDZW50ZXJYKCk8VC5nZXRDZW50ZXJYKCk/X1swXT0tMTpfWzBdPTEseS5nZXRDZW50ZXJZKCk8VC5nZXRDZW50ZXJZKCk/X1sxXT0tMTpfWzFdPTF9LGIuZ2V0SW50ZXJzZWN0aW9uMj1mdW5jdGlvbih5LFQsXyl7dmFyIEE9eS5nZXRDZW50ZXJYKCksUD15LmdldENlbnRlclkoKSxSPVQuZ2V0Q2VudGVyWCgpLEY9VC5nZXRDZW50ZXJZKCk7aWYoeS5pbnRlcnNlY3RzKFQpKXJldHVybiBfWzBdPUEsX1sxXT1QLF9bMl09UixfWzNdPUYsITA7dmFyIGo9eS5nZXRYKCksSz15LmdldFkoKSxlZT15LmdldFJpZ2h0KCksaWU9eS5nZXRYKCksb2U9eS5nZXRCb3R0b20oKSxwZT15LmdldFJpZ2h0KCksYmU9eS5nZXRXaWR0aEhhbGYoKSxhZT15LmdldEhlaWdodEhhbGYoKSxuZT1ULmdldFgoKSxzZT1ULmdldFkoKSxkZT1ULmdldFJpZ2h0KCksWD1ULmdldFgoKSxnZT1ULmdldEJvdHRvbSgpLFc9VC5nZXRSaWdodCgpLHhlPVQuZ2V0V2lkdGhIYWxmKCksVT1ULmdldEhlaWdodEhhbGYoKSxGZT0hMSxQZT0hMTtpZihBPT09Uil7aWYoUD5GKXJldHVybiBfWzBdPUEsX1sxXT1LLF9bMl09UixfWzNdPWdlLCExO2lmKFA8RilyZXR1cm4gX1swXT1BLF9bMV09b2UsX1syXT1SLF9bM109c2UsITF9ZWxzZSBpZihQPT09Ril7aWYoQT5SKXJldHVybiBfWzBdPWosX1sxXT1QLF9bMl09ZGUsX1szXT1GLCExO2lmKEE8UilyZXR1cm4gX1swXT1lZSxfWzFdPVAsX1syXT1uZSxfWzNdPUYsITF9ZWxzZXt2YXIgamU9eS5oZWlnaHQveS53aWR0aCxJZT1ULmhlaWdodC9ULndpZHRoLFNlPShGLVApLyhSLUEpLENlPXZvaWQgMCxrZT12b2lkIDAsS2U9dm9pZCAwLEZ0PXZvaWQgMCxOZT12b2lkIDAsZ249dm9pZCAwO2lmKC1qZT09PVNlP0E+Uj8oX1swXT1pZSxfWzFdPW9lLEZlPSEwKTooX1swXT1lZSxfWzFdPUssRmU9ITApOmplPT09U2UmJihBPlI/KF9bMF09aixfWzFdPUssRmU9ITApOihfWzBdPXBlLF9bMV09b2UsRmU9ITApKSwtSWU9PT1TZT9SPkE/KF9bMl09WCxfWzNdPWdlLFBlPSEwKTooX1syXT1kZSxfWzNdPXNlLFBlPSEwKTpJZT09PVNlJiYoUj5BPyhfWzJdPW5lLF9bM109c2UsUGU9ITApOihfWzJdPVcsX1szXT1nZSxQZT0hMCkpLEZlJiZQZSlyZXR1cm4hMTtpZihBPlI/UD5GPyhDZT10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKGplLFNlLDQpLGtlPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oSWUsU2UsMikpOihDZT10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1qZSxTZSwzKSxrZT10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1JZSxTZSwxKSk6UD5GPyhDZT10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1qZSxTZSwxKSxrZT10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1JZSxTZSwzKSk6KENlPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oamUsU2UsMiksa2U9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihJZSxTZSw0KSksIUZlKXN3aXRjaChDZSl7Y2FzZSAxOkZ0PUssS2U9QSstYWUvU2UsX1swXT1LZSxfWzFdPUZ0O2JyZWFrO2Nhc2UgMjpLZT1wZSxGdD1QK2JlKlNlLF9bMF09S2UsX1sxXT1GdDticmVhaztjYXNlIDM6RnQ9b2UsS2U9QSthZS9TZSxfWzBdPUtlLF9bMV09RnQ7YnJlYWs7Y2FzZSA0OktlPWllLEZ0PVArLWJlKlNlLF9bMF09S2UsX1sxXT1GdDticmVha31pZighUGUpc3dpdGNoKGtlKXtjYXNlIDE6Z249c2UsTmU9UistVS9TZSxfWzJdPU5lLF9bM109Z247YnJlYWs7Y2FzZSAyOk5lPVcsZ249Rit4ZSpTZSxfWzJdPU5lLF9bM109Z247YnJlYWs7Y2FzZSAzOmduPWdlLE5lPVIrVS9TZSxfWzJdPU5lLF9bM109Z247YnJlYWs7Y2FzZSA0Ok5lPVgsZ249RisteGUqU2UsX1syXT1OZSxfWzNdPWduO2JyZWFrfX1yZXR1cm4hMX0sYi5nZXRDYXJkaW5hbERpcmVjdGlvbj1mdW5jdGlvbih5LFQsXyl7cmV0dXJuIHk+VD9fOjErXyU0fSxiLmdldEludGVyc2VjdGlvbj1mdW5jdGlvbih5LFQsXyxBKXtpZihBPT1udWxsKXJldHVybiB0aGlzLmdldEludGVyc2VjdGlvbjIoeSxULF8pO3ZhciBQPXkueCxSPXkueSxGPVQueCxqPVQueSxLPV8ueCxlZT1fLnksaWU9QS54LG9lPUEueSxwZT12b2lkIDAsYmU9dm9pZCAwLGFlPXZvaWQgMCxuZT12b2lkIDAsc2U9dm9pZCAwLGRlPXZvaWQgMCxYPXZvaWQgMCxnZT12b2lkIDAsVz12b2lkIDA7cmV0dXJuIGFlPWotUixzZT1QLUYsWD1GKlItUCpqLG5lPW9lLWVlLGRlPUstaWUsZ2U9aWUqZWUtSypvZSxXPWFlKmRlLW5lKnNlLFc9PT0wP251bGw6KHBlPShzZSpnZS1kZSpYKS9XLGJlPShuZSpYLWFlKmdlKS9XLG5ldyB2KHBlLGJlKSl9LGIuYW5nbGVPZlZlY3Rvcj1mdW5jdGlvbih5LFQsXyxBKXt2YXIgUD12b2lkIDA7cmV0dXJuIHkhPT1fPyhQPU1hdGguYXRhbigoQS1UKS8oXy15KSksXzx5P1ArPU1hdGguUEk6QTxUJiYoUCs9dGhpcy5UV09fUEkpKTpBPFQ/UD10aGlzLk9ORV9BTkRfSEFMRl9QSTpQPXRoaXMuSEFMRl9QSSxQfSxiLmRvSW50ZXJzZWN0PWZ1bmN0aW9uKHksVCxfLEEpe3ZhciBQPXkueCxSPXkueSxGPVQueCxqPVQueSxLPV8ueCxlZT1fLnksaWU9QS54LG9lPUEueSxwZT0oRi1QKSoob2UtZWUpLShpZS1LKSooai1SKTtpZihwZT09PTApcmV0dXJuITE7dmFyIGJlPSgob2UtZWUpKihpZS1QKSsoSy1pZSkqKG9lLVIpKS9wZSxhZT0oKFItaikqKGllLVApKyhGLVApKihvZS1SKSkvcGU7cmV0dXJuIDA8YmUmJmJlPDEmJjA8YWUmJmFlPDF9LGIuSEFMRl9QST0uNSpNYXRoLlBJLGIuT05FX0FORF9IQUxGX1BJPTEuNSpNYXRoLlBJLGIuVFdPX1BJPTIqTWF0aC5QSSxiLlRIUkVFX1BJPTMqTWF0aC5QSSx1LmV4cG9ydHM9Yn0sZnVuY3Rpb24odSxkLHApe2Z1bmN0aW9uIHYoKXt9di5zaWduPWZ1bmN0aW9uKGIpe3JldHVybiBiPjA/MTpiPDA/LTE6MH0sdi5mbG9vcj1mdW5jdGlvbihiKXtyZXR1cm4gYjwwP01hdGguY2VpbChiKTpNYXRoLmZsb29yKGIpfSx2LmNlaWw9ZnVuY3Rpb24oYil7cmV0dXJuIGI8MD9NYXRoLmZsb29yKGIpOk1hdGguY2VpbChiKX0sdS5leHBvcnRzPXZ9LGZ1bmN0aW9uKHUsZCxwKXtmdW5jdGlvbiB2KCl7fXYuTUFYX1ZBTFVFPTIxNDc0ODM2NDcsdi5NSU5fVkFMVUU9LTIxNDc0ODM2NDgsdS5leHBvcnRzPXZ9LGZ1bmN0aW9uKHUsZCxwKXt2YXIgdj1mdW5jdGlvbigpe2Z1bmN0aW9uIFAoUixGKXtmb3IodmFyIGo9MDtqPEYubGVuZ3RoO2orKyl7dmFyIEs9RltqXTtLLmVudW1lcmFibGU9Sy5lbnVtZXJhYmxlfHwhMSxLLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gSyYmKEsud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLEsua2V5LEspfX1yZXR1cm4gZnVuY3Rpb24oUixGLGope3JldHVybiBGJiZQKFIucHJvdG90eXBlLEYpLGomJlAoUixqKSxSfX0oKTtmdW5jdGlvbiBiKFAsUil7aWYoIShQIGluc3RhbmNlb2YgUikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9dmFyIHk9ZnVuY3Rpb24oUil7cmV0dXJue3ZhbHVlOlIsbmV4dDpudWxsLHByZXY6bnVsbH19LFQ9ZnVuY3Rpb24oUixGLGosSyl7cmV0dXJuIFIhPT1udWxsP1IubmV4dD1GOksuaGVhZD1GLGohPT1udWxsP2oucHJldj1GOksudGFpbD1GLEYucHJldj1SLEYubmV4dD1qLEsubGVuZ3RoKyssRn0sXz1mdW5jdGlvbihSLEYpe3ZhciBqPVIucHJldixLPVIubmV4dDtyZXR1cm4gaiE9PW51bGw/ai5uZXh0PUs6Ri5oZWFkPUssSyE9PW51bGw/Sy5wcmV2PWo6Ri50YWlsPWosUi5wcmV2PVIubmV4dD1udWxsLEYubGVuZ3RoLS0sUn0sQT1mdW5jdGlvbigpe2Z1bmN0aW9uIFAoUil7dmFyIEY9dGhpcztiKHRoaXMsUCksdGhpcy5sZW5ndGg9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCxSIT1udWxsJiZSLmZvckVhY2goZnVuY3Rpb24oail7cmV0dXJuIEYucHVzaChqKX0pfXJldHVybiB2KFAsW3trZXk6InNpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofX0se2tleToiaW5zZXJ0QmVmb3JlIix2YWx1ZTpmdW5jdGlvbihGLGope3JldHVybiBUKGoucHJldix5KEYpLGosdGhpcyl9fSx7a2V5OiJpbnNlcnRBZnRlciIsdmFsdWU6ZnVuY3Rpb24oRixqKXtyZXR1cm4gVChqLHkoRiksai5uZXh0LHRoaXMpfX0se2tleToiaW5zZXJ0Tm9kZUJlZm9yZSIsdmFsdWU6ZnVuY3Rpb24oRixqKXtyZXR1cm4gVChqLnByZXYsRixqLHRoaXMpfX0se2tleToiaW5zZXJ0Tm9kZUFmdGVyIix2YWx1ZTpmdW5jdGlvbihGLGope3JldHVybiBUKGosRixqLm5leHQsdGhpcyl9fSx7a2V5OiJwdXNoIix2YWx1ZTpmdW5jdGlvbihGKXtyZXR1cm4gVCh0aGlzLnRhaWwseShGKSxudWxsLHRoaXMpfX0se2tleToidW5zaGlmdCIsdmFsdWU6ZnVuY3Rpb24oRil7cmV0dXJuIFQobnVsbCx5KEYpLHRoaXMuaGVhZCx0aGlzKX19LHtrZXk6InJlbW92ZSIsdmFsdWU6ZnVuY3Rpb24oRil7cmV0dXJuIF8oRix0aGlzKX19LHtrZXk6InBvcCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gXyh0aGlzLnRhaWwsdGhpcykudmFsdWV9fSx7a2V5OiJwb3BOb2RlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBfKHRoaXMudGFpbCx0aGlzKX19LHtrZXk6InNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBfKHRoaXMuaGVhZCx0aGlzKS52YWx1ZX19LHtrZXk6InNoaWZ0Tm9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gXyh0aGlzLmhlYWQsdGhpcyl9fSx7a2V5OiJnZXRfb2JqZWN0X2F0Iix2YWx1ZTpmdW5jdGlvbihGKXtpZihGPD10aGlzLmxlbmd0aCgpKXtmb3IodmFyIGo9MSxLPXRoaXMuaGVhZDtqPEY7KUs9Sy5uZXh0LGorKztyZXR1cm4gSy52YWx1ZX19fSx7a2V5OiJzZXRfb2JqZWN0X2F0Iix2YWx1ZTpmdW5jdGlvbihGLGope2lmKEY8PXRoaXMubGVuZ3RoKCkpe2Zvcih2YXIgSz0xLGVlPXRoaXMuaGVhZDtLPEY7KWVlPWVlLm5leHQsSysrO2VlLnZhbHVlPWp9fX1dKSxQfSgpO3UuZXhwb3J0cz1BfSxmdW5jdGlvbih1LGQscCl7ZnVuY3Rpb24gdihiLHksVCl7dGhpcy54PW51bGwsdGhpcy55PW51bGwsYj09bnVsbCYmeT09bnVsbCYmVD09bnVsbD8odGhpcy54PTAsdGhpcy55PTApOnR5cGVvZiBiPT0ibnVtYmVyIiYmdHlwZW9mIHk9PSJudW1iZXIiJiZUPT1udWxsPyh0aGlzLng9Yix0aGlzLnk9eSk6Yi5jb25zdHJ1Y3Rvci5uYW1lPT0iUG9pbnQiJiZ5PT1udWxsJiZUPT1udWxsJiYoVD1iLHRoaXMueD1ULngsdGhpcy55PVQueSl9di5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LHYucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSx2LnByb3RvdHlwZS5nZXRMb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybiBuZXcgdih0aGlzLngsdGhpcy55KX0sdi5wcm90b3R5cGUuc2V0TG9jYXRpb249ZnVuY3Rpb24oYix5LFQpe2IuY29uc3RydWN0b3IubmFtZT09IlBvaW50IiYmeT09bnVsbCYmVD09bnVsbD8oVD1iLHRoaXMuc2V0TG9jYXRpb24oVC54LFQueSkpOnR5cGVvZiBiPT0ibnVtYmVyIiYmdHlwZW9mIHk9PSJudW1iZXIiJiZUPT1udWxsJiYocGFyc2VJbnQoYik9PWImJnBhcnNlSW50KHkpPT15P3RoaXMubW92ZShiLHkpOih0aGlzLng9TWF0aC5mbG9vcihiKy41KSx0aGlzLnk9TWF0aC5mbG9vcih5Ky41KSkpfSx2LnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKGIseSl7dGhpcy54PWIsdGhpcy55PXl9LHYucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihiLHkpe3RoaXMueCs9Yix0aGlzLnkrPXl9LHYucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihiKXtpZihiLmNvbnN0cnVjdG9yLm5hbWU9PSJQb2ludCIpe3ZhciB5PWI7cmV0dXJuIHRoaXMueD09eS54JiZ0aGlzLnk9PXkueX1yZXR1cm4gdGhpcz09Yn0sdi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHYoKS5jb25zdHJ1Y3Rvci5uYW1lKyJbeD0iK3RoaXMueCsiLHk9Iit0aGlzLnkrIl0ifSx1LmV4cG9ydHM9dn0sZnVuY3Rpb24odSxkLHApe2Z1bmN0aW9uIHYoYix5LFQsXyl7dGhpcy54PTAsdGhpcy55PTAsdGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsYiE9bnVsbCYmeSE9bnVsbCYmVCE9bnVsbCYmXyE9bnVsbCYmKHRoaXMueD1iLHRoaXMueT15LHRoaXMud2lkdGg9VCx0aGlzLmhlaWdodD1fKX12LnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sdi5wcm90b3R5cGUuc2V0WD1mdW5jdGlvbihiKXt0aGlzLng9Yn0sdi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnl9LHYucHJvdG90eXBlLnNldFk9ZnVuY3Rpb24oYil7dGhpcy55PWJ9LHYucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGh9LHYucHJvdG90eXBlLnNldFdpZHRoPWZ1bmN0aW9uKGIpe3RoaXMud2lkdGg9Yn0sdi5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVpZ2h0fSx2LnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oYil7dGhpcy5oZWlnaHQ9Yn0sdi5wcm90b3R5cGUuZ2V0UmlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54K3RoaXMud2lkdGh9LHYucHJvdG90eXBlLmdldEJvdHRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkrdGhpcy5oZWlnaHR9LHYucHJvdG90eXBlLmludGVyc2VjdHM9ZnVuY3Rpb24oYil7cmV0dXJuISh0aGlzLmdldFJpZ2h0KCk8Yi54fHx0aGlzLmdldEJvdHRvbSgpPGIueXx8Yi5nZXRSaWdodCgpPHRoaXMueHx8Yi5nZXRCb3R0b20oKTx0aGlzLnkpfSx2LnByb3RvdHlwZS5nZXRDZW50ZXJYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueCt0aGlzLndpZHRoLzJ9LHYucHJvdG90eXBlLmdldE1pblg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCl9LHYucHJvdG90eXBlLmdldE1heFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCkrdGhpcy53aWR0aH0sdi5wcm90b3R5cGUuZ2V0Q2VudGVyWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkrdGhpcy5oZWlnaHQvMn0sdi5wcm90b3R5cGUuZ2V0TWluWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFkoKX0sdi5wcm90b3R5cGUuZ2V0TWF4WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFkoKSt0aGlzLmhlaWdodH0sdi5wcm90b3R5cGUuZ2V0V2lkdGhIYWxmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGgvMn0sdi5wcm90b3R5cGUuZ2V0SGVpZ2h0SGFsZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodC8yfSx1LmV4cG9ydHM9dn0sZnVuY3Rpb24odSxkLHApe3ZhciB2PXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnR5cGVvZiBTeW1ib2wuaXRlcmF0b3I9PSJzeW1ib2wiP2Z1bmN0aW9uKHkpe3JldHVybiB0eXBlb2YgeX06ZnVuY3Rpb24oeSl7cmV0dXJuIHkmJnR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnkuY29uc3RydWN0b3I9PT1TeW1ib2wmJnkhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB5fTtmdW5jdGlvbiBiKCl7fWIubGFzdElEPTAsYi5jcmVhdGVJRD1mdW5jdGlvbih5KXtyZXR1cm4gYi5pc1ByaW1pdGl2ZSh5KT95Oih5LnVuaXF1ZUlEIT1udWxsfHwoeS51bmlxdWVJRD1iLmdldFN0cmluZygpLGIubGFzdElEKyspLHkudW5pcXVlSUQpfSxiLmdldFN0cmluZz1mdW5jdGlvbih5KXtyZXR1cm4geT09bnVsbCYmKHk9Yi5sYXN0SUQpLCJPYmplY3QjIit5fSxiLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKHkpe3ZhciBUPXR5cGVvZiB5PiJ1Ij8idW5kZWZpbmVkIjp2KHkpO3JldHVybiB5PT1udWxsfHxUIT0ib2JqZWN0IiYmVCE9ImZ1bmN0aW9uIn0sdS5leHBvcnRzPWJ9LGZ1bmN0aW9uKHUsZCxwKXtmdW5jdGlvbiB2KEspe2lmKEFycmF5LmlzQXJyYXkoSykpe2Zvcih2YXIgZWU9MCxpZT1BcnJheShLLmxlbmd0aCk7ZWU8Sy5sZW5ndGg7ZWUrKylpZVtlZV09S1tlZV07cmV0dXJuIGllfWVsc2UgcmV0dXJuIEFycmF5LmZyb20oSyl9dmFyIGI9cCgwKSx5PXAoNiksVD1wKDMpLF89cCgxKSxBPXAoNSksUD1wKDQpLFI9cCgxNyksRj1wKDI3KTtmdW5jdGlvbiBqKEspe0YuY2FsbCh0aGlzKSx0aGlzLmxheW91dFF1YWxpdHk9Yi5RVUFMSVRZLHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZD1iLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRCx0aGlzLmluY3JlbWVudGFsPWIuREVGQVVMVF9JTkNSRU1FTlRBTCx0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VULHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVCx0aGlzLmFuaW1hdGlvblBlcmlvZD1iLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRCx0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzPWIuREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUyx0aGlzLmVkZ2VUb0R1bW15Tm9kZXM9bmV3IE1hcCx0aGlzLmdyYXBoTWFuYWdlcj1uZXcgeSh0aGlzKSx0aGlzLmlzTGF5b3V0RmluaXNoZWQ9ITEsdGhpcy5pc1N1YkxheW91dD0hMSx0aGlzLmlzUmVtb3RlVXNlPSExLEshPW51bGwmJih0aGlzLmlzUmVtb3RlVXNlPUspfWouUkFORE9NX1NFRUQ9MSxqLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEYucHJvdG90eXBlKSxqLnByb3RvdHlwZS5nZXRHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXJ9LGoucHJvdG90eXBlLmdldEFsbE5vZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCl9LGoucHJvdG90eXBlLmdldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCl9LGoucHJvdG90eXBlLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCl9LGoucHJvdG90eXBlLm5ld0dyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3ZhciBLPW5ldyB5KHRoaXMpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcj1LLEt9LGoucHJvdG90eXBlLm5ld0dyYXBoPWZ1bmN0aW9uKEspe3JldHVybiBuZXcgQShudWxsLHRoaXMuZ3JhcGhNYW5hZ2VyLEspfSxqLnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKEspe3JldHVybiBuZXcgVCh0aGlzLmdyYXBoTWFuYWdlcixLKX0sai5wcm90b3R5cGUubmV3RWRnZT1mdW5jdGlvbihLKXtyZXR1cm4gbmV3IF8obnVsbCxudWxsLEspfSxqLnByb3RvdHlwZS5jaGVja0xheW91dFN1Y2Nlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPT1udWxsfHx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKS5sZW5ndGg9PTB8fHRoaXMuZ3JhcGhNYW5hZ2VyLmluY2x1ZGVzSW52YWxpZEVkZ2UoKX0sai5wcm90b3R5cGUucnVuTGF5b3V0PWZ1bmN0aW9uKCl7dGhpcy5pc0xheW91dEZpbmlzaGVkPSExLHRoaXMudGlsaW5nUHJlTGF5b3V0JiZ0aGlzLnRpbGluZ1ByZUxheW91dCgpLHRoaXMuaW5pdFBhcmFtZXRlcnMoKTt2YXIgSztyZXR1cm4gdGhpcy5jaGVja0xheW91dFN1Y2Nlc3MoKT9LPSExOks9dGhpcy5sYXlvdXQoKSxiLkFOSU1BVEU9PT0iZHVyaW5nIj8hMTooSyYmKHRoaXMuaXNTdWJMYXlvdXR8fHRoaXMuZG9Qb3N0TGF5b3V0KCkpLHRoaXMudGlsaW5nUG9zdExheW91dCYmdGhpcy50aWxpbmdQb3N0TGF5b3V0KCksdGhpcy5pc0xheW91dEZpbmlzaGVkPSEwLEspfSxqLnByb3RvdHlwZS5kb1Bvc3RMYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLmluY3JlbWVudGFsfHx0aGlzLnRyYW5zZm9ybSgpLHRoaXMudXBkYXRlKCl9LGoucHJvdG90eXBlLnVwZGF0ZTI9ZnVuY3Rpb24oKXtpZih0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQmJih0aGlzLmNyZWF0ZUJlbmRwb2ludHNGcm9tRHVtbXlOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKSksIXRoaXMuaXNSZW1vdGVVc2Upe2Zvcih2YXIgSz10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpLGVlPTA7ZWU8Sy5sZW5ndGg7ZWUrKylLW2VlXTtmb3IodmFyIGllPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpLGVlPTA7ZWU8aWUubGVuZ3RoO2VlKyspaWVbZWVdO3RoaXMudXBkYXRlKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSl9fSxqLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oSyl7aWYoSz09bnVsbCl0aGlzLnVwZGF0ZTIoKTtlbHNlIGlmKEsgaW5zdGFuY2VvZiBUKXt2YXIgZWU9SztpZihlZS5nZXRDaGlsZCgpIT1udWxsKWZvcih2YXIgaWU9ZWUuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLG9lPTA7b2U8aWUubGVuZ3RoO29lKyspdXBkYXRlKGllW29lXSk7aWYoZWUudkdyYXBoT2JqZWN0IT1udWxsKXt2YXIgcGU9ZWUudkdyYXBoT2JqZWN0O3BlLnVwZGF0ZShlZSl9fWVsc2UgaWYoSyBpbnN0YW5jZW9mIF8pe3ZhciBiZT1LO2lmKGJlLnZHcmFwaE9iamVjdCE9bnVsbCl7dmFyIGFlPWJlLnZHcmFwaE9iamVjdDthZS51cGRhdGUoYmUpfX1lbHNlIGlmKEsgaW5zdGFuY2VvZiBBKXt2YXIgbmU9SztpZihuZS52R3JhcGhPYmplY3QhPW51bGwpe3ZhciBzZT1uZS52R3JhcGhPYmplY3Q7c2UudXBkYXRlKG5lKX19fSxqLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe3RoaXMuaXNTdWJMYXlvdXR8fCh0aGlzLmxheW91dFF1YWxpdHk9Yi5RVUFMSVRZLHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVCx0aGlzLmFuaW1hdGlvblBlcmlvZD1iLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRCx0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VULHRoaXMuaW5jcmVtZW50YWw9Yi5ERUZBVUxUX0lOQ1JFTUVOVEFMLHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZD1iLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRCx0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzPWIuREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUyksdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQmJih0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PSExKX0sai5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKEspe2lmKEs9PW51bGwpdGhpcy50cmFuc2Zvcm0obmV3IFAoMCwwKSk7ZWxzZXt2YXIgZWU9bmV3IFIsaWU9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLnVwZGF0ZUxlZnRUb3AoKTtpZihpZSE9bnVsbCl7ZWUuc2V0V29ybGRPcmdYKEsueCksZWUuc2V0V29ybGRPcmdZKEsueSksZWUuc2V0RGV2aWNlT3JnWChpZS54KSxlZS5zZXREZXZpY2VPcmdZKGllLnkpO2Zvcih2YXIgb2U9dGhpcy5nZXRBbGxOb2RlcygpLHBlLGJlPTA7YmU8b2UubGVuZ3RoO2JlKyspcGU9b2VbYmVdLHBlLnRyYW5zZm9ybShlZSl9fX0sai5wcm90b3R5cGUucG9zaXRpb25Ob2Rlc1JhbmRvbWx5PWZ1bmN0aW9uKEspe2lmKEs9PW51bGwpdGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkodGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCkpLHRoaXMuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0Um9vdCgpLnVwZGF0ZUJvdW5kcyghMCk7ZWxzZSBmb3IodmFyIGVlLGllLG9lPUsuZ2V0Tm9kZXMoKSxwZT0wO3BlPG9lLmxlbmd0aDtwZSsrKWVlPW9lW3BlXSxpZT1lZS5nZXRDaGlsZCgpLGllPT1udWxsfHxpZS5nZXROb2RlcygpLmxlbmd0aD09MD9lZS5zY2F0dGVyKCk6KHRoaXMucG9zaXRpb25Ob2Rlc1JhbmRvbWx5KGllKSxlZS51cGRhdGVCb3VuZHMoKSl9LGoucHJvdG90eXBlLmdldEZsYXRGb3Jlc3Q9ZnVuY3Rpb24oKXtmb3IodmFyIEs9W10sZWU9ITAsaWU9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCksb2U9ITAscGU9MDtwZTxpZS5sZW5ndGg7cGUrKylpZVtwZV0uZ2V0Q2hpbGQoKSE9bnVsbCYmKG9lPSExKTtpZighb2UpcmV0dXJuIEs7dmFyIGJlPW5ldyBTZXQsYWU9W10sbmU9bmV3IE1hcCxzZT1bXTtmb3Ioc2U9c2UuY29uY2F0KGllKTtzZS5sZW5ndGg+MCYmZWU7KXtmb3IoYWUucHVzaChzZVswXSk7YWUubGVuZ3RoPjAmJmVlOyl7dmFyIGRlPWFlWzBdO2FlLnNwbGljZSgwLDEpLGJlLmFkZChkZSk7Zm9yKHZhciBYPWRlLmdldEVkZ2VzKCkscGU9MDtwZTxYLmxlbmd0aDtwZSsrKXt2YXIgZ2U9WFtwZV0uZ2V0T3RoZXJFbmQoZGUpO2lmKG5lLmdldChkZSkhPWdlKWlmKCFiZS5oYXMoZ2UpKWFlLnB1c2goZ2UpLG5lLnNldChnZSxkZSk7ZWxzZXtlZT0hMTticmVha319fWlmKCFlZSlLPVtdO2Vsc2V7dmFyIFc9W10uY29uY2F0KHYoYmUpKTtLLnB1c2goVyk7Zm9yKHZhciBwZT0wO3BlPFcubGVuZ3RoO3BlKyspe3ZhciB4ZT1XW3BlXSxVPXNlLmluZGV4T2YoeGUpO1U+LTEmJnNlLnNwbGljZShVLDEpfWJlPW5ldyBTZXQsbmU9bmV3IE1hcH19cmV0dXJuIEt9LGoucHJvdG90eXBlLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzPWZ1bmN0aW9uKEspe2Zvcih2YXIgZWU9W10saWU9Sy5zb3VyY2Usb2U9dGhpcy5ncmFwaE1hbmFnZXIuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9yKEsuc291cmNlLEsudGFyZ2V0KSxwZT0wO3BlPEsuYmVuZHBvaW50cy5sZW5ndGg7cGUrKyl7dmFyIGJlPXRoaXMubmV3Tm9kZShudWxsKTtiZS5zZXRSZWN0KG5ldyBQb2ludCgwLDApLG5ldyBEaW1lbnNpb24oMSwxKSksb2UuYWRkKGJlKTt2YXIgYWU9dGhpcy5uZXdFZGdlKG51bGwpO3RoaXMuZ3JhcGhNYW5hZ2VyLmFkZChhZSxpZSxiZSksZWUuYWRkKGJlKSxpZT1iZX12YXIgYWU9dGhpcy5uZXdFZGdlKG51bGwpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5hZGQoYWUsaWUsSy50YXJnZXQpLHRoaXMuZWRnZVRvRHVtbXlOb2Rlcy5zZXQoSyxlZSksSy5pc0ludGVyR3JhcGgoKT90aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUoSyk6b2UucmVtb3ZlKEspLGVlfSxqLnByb3RvdHlwZS5jcmVhdGVCZW5kcG9pbnRzRnJvbUR1bW15Tm9kZXM9ZnVuY3Rpb24oKXt2YXIgSz1bXTtLPUsuY29uY2F0KHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkpLEs9W10uY29uY2F0KHYodGhpcy5lZGdlVG9EdW1teU5vZGVzLmtleXMoKSkpLmNvbmNhdChLKTtmb3IodmFyIGVlPTA7ZWU8Sy5sZW5ndGg7ZWUrKyl7dmFyIGllPUtbZWVdO2lmKGllLmJlbmRwb2ludHMubGVuZ3RoPjApe2Zvcih2YXIgb2U9dGhpcy5lZGdlVG9EdW1teU5vZGVzLmdldChpZSkscGU9MDtwZTxvZS5sZW5ndGg7cGUrKyl7dmFyIGJlPW9lW3BlXSxhZT1uZXcgUChiZS5nZXRDZW50ZXJYKCksYmUuZ2V0Q2VudGVyWSgpKSxuZT1pZS5iZW5kcG9pbnRzLmdldChwZSk7bmUueD1hZS54LG5lLnk9YWUueSxiZS5nZXRPd25lcigpLnJlbW92ZShiZSl9dGhpcy5ncmFwaE1hbmFnZXIuYWRkKGllLGllLnNvdXJjZSxpZS50YXJnZXQpfX19LGoudHJhbnNmb3JtPWZ1bmN0aW9uKEssZWUsaWUsb2Upe2lmKGllIT1udWxsJiZvZSE9bnVsbCl7dmFyIHBlPWVlO2lmKEs8PTUwKXt2YXIgYmU9ZWUvaWU7cGUtPShlZS1iZSkvNTAqKDUwLUspfWVsc2V7dmFyIGFlPWVlKm9lO3BlKz0oYWUtZWUpLzUwKihLLTUwKX1yZXR1cm4gcGV9ZWxzZXt2YXIgbmUsc2U7cmV0dXJuIEs8PTUwPyhuZT05KmVlLzUwMCxzZT1lZS8xMCk6KG5lPTkqZWUvNTAsc2U9LTgqZWUpLG5lKksrc2V9fSxqLmZpbmRDZW50ZXJPZlRyZWU9ZnVuY3Rpb24oSyl7dmFyIGVlPVtdO2VlPWVlLmNvbmNhdChLKTt2YXIgaWU9W10sb2U9bmV3IE1hcCxwZT0hMSxiZT1udWxsOyhlZS5sZW5ndGg9PTF8fGVlLmxlbmd0aD09MikmJihwZT0hMCxiZT1lZVswXSk7Zm9yKHZhciBhZT0wO2FlPGVlLmxlbmd0aDthZSsrKXt2YXIgbmU9ZWVbYWVdLHNlPW5lLmdldE5laWdoYm9yc0xpc3QoKS5zaXplO29lLnNldChuZSxuZS5nZXROZWlnaGJvcnNMaXN0KCkuc2l6ZSksc2U9PTEmJmllLnB1c2gobmUpfXZhciBkZT1bXTtmb3IoZGU9ZGUuY29uY2F0KGllKTshcGU7KXt2YXIgWD1bXTtYPVguY29uY2F0KGRlKSxkZT1bXTtmb3IodmFyIGFlPTA7YWU8ZWUubGVuZ3RoO2FlKyspe3ZhciBuZT1lZVthZV0sZ2U9ZWUuaW5kZXhPZihuZSk7Z2U+PTAmJmVlLnNwbGljZShnZSwxKTt2YXIgVz1uZS5nZXROZWlnaGJvcnNMaXN0KCk7Vy5mb3JFYWNoKGZ1bmN0aW9uKEZlKXtpZihpZS5pbmRleE9mKEZlKTwwKXt2YXIgUGU9b2UuZ2V0KEZlKSxqZT1QZS0xO2plPT0xJiZkZS5wdXNoKEZlKSxvZS5zZXQoRmUsamUpfX0pfWllPWllLmNvbmNhdChkZSksKGVlLmxlbmd0aD09MXx8ZWUubGVuZ3RoPT0yKSYmKHBlPSEwLGJlPWVlWzBdKX1yZXR1cm4gYmV9LGoucHJvdG90eXBlLnNldEdyYXBoTWFuYWdlcj1mdW5jdGlvbihLKXt0aGlzLmdyYXBoTWFuYWdlcj1LfSx1LmV4cG9ydHM9an0sZnVuY3Rpb24odSxkLHApe2Z1bmN0aW9uIHYoKXt9di5zZWVkPTEsdi54PTAsdi5uZXh0RG91YmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHYueD1NYXRoLnNpbih2LnNlZWQrKykqMWU0LHYueC1NYXRoLmZsb29yKHYueCl9LHUuZXhwb3J0cz12fSxmdW5jdGlvbih1LGQscCl7dmFyIHY9cCg0KTtmdW5jdGlvbiBiKHksVCl7dGhpcy5sd29ybGRPcmdYPTAsdGhpcy5sd29ybGRPcmdZPTAsdGhpcy5sZGV2aWNlT3JnWD0wLHRoaXMubGRldmljZU9yZ1k9MCx0aGlzLmx3b3JsZEV4dFg9MSx0aGlzLmx3b3JsZEV4dFk9MSx0aGlzLmxkZXZpY2VFeHRYPTEsdGhpcy5sZGV2aWNlRXh0WT0xfWIucHJvdG90eXBlLmdldFdvcmxkT3JnWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZE9yZ1h9LGIucHJvdG90eXBlLnNldFdvcmxkT3JnWD1mdW5jdGlvbih5KXt0aGlzLmx3b3JsZE9yZ1g9eX0sYi5wcm90b3R5cGUuZ2V0V29ybGRPcmdZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkT3JnWX0sYi5wcm90b3R5cGUuc2V0V29ybGRPcmdZPWZ1bmN0aW9uKHkpe3RoaXMubHdvcmxkT3JnWT15fSxiLnByb3RvdHlwZS5nZXRXb3JsZEV4dFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRFeHRYfSxiLnByb3RvdHlwZS5zZXRXb3JsZEV4dFg9ZnVuY3Rpb24oeSl7dGhpcy5sd29ybGRFeHRYPXl9LGIucHJvdG90eXBlLmdldFdvcmxkRXh0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZEV4dFl9LGIucHJvdG90eXBlLnNldFdvcmxkRXh0WT1mdW5jdGlvbih5KXt0aGlzLmx3b3JsZEV4dFk9eX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VPcmdYfSxiLnByb3RvdHlwZS5zZXREZXZpY2VPcmdYPWZ1bmN0aW9uKHkpe3RoaXMubGRldmljZU9yZ1g9eX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VPcmdZfSxiLnByb3RvdHlwZS5zZXREZXZpY2VPcmdZPWZ1bmN0aW9uKHkpe3RoaXMubGRldmljZU9yZ1k9eX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VFeHRYfSxiLnByb3RvdHlwZS5zZXREZXZpY2VFeHRYPWZ1bmN0aW9uKHkpe3RoaXMubGRldmljZUV4dFg9eX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VFeHRZfSxiLnByb3RvdHlwZS5zZXREZXZpY2VFeHRZPWZ1bmN0aW9uKHkpe3RoaXMubGRldmljZUV4dFk9eX0sYi5wcm90b3R5cGUudHJhbnNmb3JtWD1mdW5jdGlvbih5KXt2YXIgVD0wLF89dGhpcy5sd29ybGRFeHRYO3JldHVybiBfIT0wJiYoVD10aGlzLmxkZXZpY2VPcmdYKyh5LXRoaXMubHdvcmxkT3JnWCkqdGhpcy5sZGV2aWNlRXh0WC9fKSxUfSxiLnByb3RvdHlwZS50cmFuc2Zvcm1ZPWZ1bmN0aW9uKHkpe3ZhciBUPTAsXz10aGlzLmx3b3JsZEV4dFk7cmV0dXJuIF8hPTAmJihUPXRoaXMubGRldmljZU9yZ1krKHktdGhpcy5sd29ybGRPcmdZKSp0aGlzLmxkZXZpY2VFeHRZL18pLFR9LGIucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1YPWZ1bmN0aW9uKHkpe3ZhciBUPTAsXz10aGlzLmxkZXZpY2VFeHRYO3JldHVybiBfIT0wJiYoVD10aGlzLmx3b3JsZE9yZ1grKHktdGhpcy5sZGV2aWNlT3JnWCkqdGhpcy5sd29ybGRFeHRYL18pLFR9LGIucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1ZPWZ1bmN0aW9uKHkpe3ZhciBUPTAsXz10aGlzLmxkZXZpY2VFeHRZO3JldHVybiBfIT0wJiYoVD10aGlzLmx3b3JsZE9yZ1krKHktdGhpcy5sZGV2aWNlT3JnWSkqdGhpcy5sd29ybGRFeHRZL18pLFR9LGIucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1Qb2ludD1mdW5jdGlvbih5KXt2YXIgVD1uZXcgdih0aGlzLmludmVyc2VUcmFuc2Zvcm1YKHkueCksdGhpcy5pbnZlcnNlVHJhbnNmb3JtWSh5LnkpKTtyZXR1cm4gVH0sdS5leHBvcnRzPWJ9LGZ1bmN0aW9uKHUsZCxwKXtmdW5jdGlvbiB2KEYpe2lmKEFycmF5LmlzQXJyYXkoRikpe2Zvcih2YXIgaj0wLEs9QXJyYXkoRi5sZW5ndGgpO2o8Ri5sZW5ndGg7aisrKUtbal09RltqXTtyZXR1cm4gS31lbHNlIHJldHVybiBBcnJheS5mcm9tKEYpfXZhciBiPXAoMTUpLHk9cCg3KSxUPXAoMCksXz1wKDgpLEE9cCg5KTtmdW5jdGlvbiBQKCl7Yi5jYWxsKHRoaXMpLHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbj15LkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OLHRoaXMuaWRlYWxFZGdlTGVuZ3RoPXkuREVGQVVMVF9FREdFX0xFTkdUSCx0aGlzLnNwcmluZ0NvbnN0YW50PXkuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEgsdGhpcy5yZXB1bHNpb25Db25zdGFudD15LkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RILHRoaXMuZ3Jhdml0eUNvbnN0YW50PXkuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQ9eS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5ncmF2aXR5UmFuZ2VGYWN0b3I9eS5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3I9eS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuZGlzcGxhY2VtZW50VGhyZXNob2xkUGVyTm9kZT0zKnkuREVGQVVMVF9FREdFX0xFTkdUSC8xMDAsdGhpcy5jb29saW5nRmFjdG9yPXkuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCx0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yPXkuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCx0aGlzLnRvdGFsRGlzcGxhY2VtZW50PTAsdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudD0wLHRoaXMubWF4SXRlcmF0aW9ucz15Lk1BWF9JVEVSQVRJT05TfVAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUpO2Zvcih2YXIgUiBpbiBiKVBbUl09YltSXTtQLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe2IucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcyxhcmd1bWVudHMpLHRoaXMudG90YWxJdGVyYXRpb25zPTAsdGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnM9MCx0aGlzLnVzZUZSR3JpZFZhcmlhbnQ9eS5ERUZBVUxUX1VTRV9TTUFSVF9SRVBVTFNJT05fUkFOR0VfQ0FMQ1VMQVRJT04sdGhpcy5ncmlkPVtdfSxQLnByb3RvdHlwZS5jYWxjSWRlYWxFZGdlTGVuZ3Rocz1mdW5jdGlvbigpe2Zvcih2YXIgRixqLEssZWUsaWUsb2UscGU9dGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRBbGxFZGdlcygpLGJlPTA7YmU8cGUubGVuZ3RoO2JlKyspRj1wZVtiZV0sRi5pZGVhbExlbmd0aD10aGlzLmlkZWFsRWRnZUxlbmd0aCxGLmlzSW50ZXJHcmFwaCYmKEs9Ri5nZXRTb3VyY2UoKSxlZT1GLmdldFRhcmdldCgpLGllPUYuZ2V0U291cmNlSW5MY2EoKS5nZXRFc3RpbWF0ZWRTaXplKCksb2U9Ri5nZXRUYXJnZXRJbkxjYSgpLmdldEVzdGltYXRlZFNpemUoKSx0aGlzLnVzZVNtYXJ0SWRlYWxFZGdlTGVuZ3RoQ2FsY3VsYXRpb24mJihGLmlkZWFsTGVuZ3RoKz1pZStvZS0yKlQuU0lNUExFX05PREVfU0laRSksaj1GLmdldExjYSgpLmdldEluY2x1c2lvblRyZWVEZXB0aCgpLEYuaWRlYWxMZW5ndGgrPXkuREVGQVVMVF9FREdFX0xFTkdUSCp5LlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1IqKEsuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCkrZWUuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCktMipqKSl9LFAucHJvdG90eXBlLmluaXRTcHJpbmdFbWJlZGRlcj1mdW5jdGlvbigpe3ZhciBGPXRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGg7dGhpcy5pbmNyZW1lbnRhbD8oRj55LkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCYmKHRoaXMuY29vbGluZ0ZhY3Rvcj1NYXRoLm1heCh0aGlzLmNvb2xpbmdGYWN0b3IqeS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SLHRoaXMuY29vbGluZ0ZhY3Rvci0oRi15LkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkvKHkuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlULXkuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKSp0aGlzLmNvb2xpbmdGYWN0b3IqKDEteS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SKSkpLHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudD15Lk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTCk6KEY+eS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQ/dGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KHkuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUiwxLShGLXkuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKS8oeS5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQteS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpKigxLXkuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUikpOnRoaXMuY29vbGluZ0ZhY3Rvcj0xLHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3I9dGhpcy5jb29saW5nRmFjdG9yLHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudD15Lk1BWF9OT0RFX0RJU1BMQUNFTUVOVCksdGhpcy5tYXhJdGVyYXRpb25zPU1hdGgubWF4KHRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGgqNSx0aGlzLm1heEl0ZXJhdGlvbnMpLHRoaXMudG90YWxEaXNwbGFjZW1lbnRUaHJlc2hvbGQ9dGhpcy5kaXNwbGFjZW1lbnRUaHJlc2hvbGRQZXJOb2RlKnRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGgsdGhpcy5yZXB1bHNpb25SYW5nZT10aGlzLmNhbGNSZXB1bHNpb25SYW5nZSgpfSxQLnByb3RvdHlwZS5jYWxjU3ByaW5nRm9yY2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPXRoaXMuZ2V0QWxsRWRnZXMoKSxqLEs9MDtLPEYubGVuZ3RoO0srKylqPUZbS10sdGhpcy5jYWxjU3ByaW5nRm9yY2UoaixqLmlkZWFsTGVuZ3RoKX0sUC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvbkZvcmNlcz1mdW5jdGlvbigpe3ZhciBGPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxqPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMSxLLGVlLGllLG9lLHBlPXRoaXMuZ2V0QWxsTm9kZXMoKSxiZTtpZih0aGlzLnVzZUZSR3JpZFZhcmlhbnQpZm9yKHRoaXMudG90YWxJdGVyYXRpb25zJXkuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0Q9PTEmJkYmJnRoaXMudXBkYXRlR3JpZCgpLGJlPW5ldyBTZXQsSz0wO0s8cGUubGVuZ3RoO0srKylpZT1wZVtLXSx0aGlzLmNhbGN1bGF0ZVJlcHVsc2lvbkZvcmNlT2ZBTm9kZShpZSxiZSxGLGopLGJlLmFkZChpZSk7ZWxzZSBmb3IoSz0wO0s8cGUubGVuZ3RoO0srKylmb3IoaWU9cGVbS10sZWU9SysxO2VlPHBlLmxlbmd0aDtlZSsrKW9lPXBlW2VlXSxpZS5nZXRPd25lcigpPT1vZS5nZXRPd25lcigpJiZ0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZShpZSxvZSl9LFAucHJvdG90eXBlLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciBGLGo9dGhpcy5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpLEs9MDtLPGoubGVuZ3RoO0srKylGPWpbS10sdGhpcy5jYWxjR3Jhdml0YXRpb25hbEZvcmNlKEYpfSxQLnByb3RvdHlwZS5tb3ZlTm9kZXM9ZnVuY3Rpb24oKXtmb3IodmFyIEY9dGhpcy5nZXRBbGxOb2RlcygpLGosSz0wO0s8Ri5sZW5ndGg7SysrKWo9RltLXSxqLm1vdmUoKX0sUC5wcm90b3R5cGUuY2FsY1NwcmluZ0ZvcmNlPWZ1bmN0aW9uKEYsail7dmFyIEs9Ri5nZXRTb3VyY2UoKSxlZT1GLmdldFRhcmdldCgpLGllLG9lLHBlLGJlO2lmKHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXMmJksuZ2V0Q2hpbGQoKT09bnVsbCYmZWUuZ2V0Q2hpbGQoKT09bnVsbClGLnVwZGF0ZUxlbmd0aFNpbXBsZSgpO2Vsc2UgaWYoRi51cGRhdGVMZW5ndGgoKSxGLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldClyZXR1cm47aWU9Ri5nZXRMZW5ndGgoKSxpZSE9MCYmKG9lPXRoaXMuc3ByaW5nQ29uc3RhbnQqKGllLWopLHBlPW9lKihGLmxlbmd0aFgvaWUpLGJlPW9lKihGLmxlbmd0aFkvaWUpLEsuc3ByaW5nRm9yY2VYKz1wZSxLLnNwcmluZ0ZvcmNlWSs9YmUsZWUuc3ByaW5nRm9yY2VYLT1wZSxlZS5zcHJpbmdGb3JjZVktPWJlKX0sUC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvbkZvcmNlPWZ1bmN0aW9uKEYsail7dmFyIEs9Ri5nZXRSZWN0KCksZWU9ai5nZXRSZWN0KCksaWU9bmV3IEFycmF5KDIpLG9lPW5ldyBBcnJheSg0KSxwZSxiZSxhZSxuZSxzZSxkZSxYO2lmKEsuaW50ZXJzZWN0cyhlZSkpe18uY2FsY1NlcGFyYXRpb25BbW91bnQoSyxlZSxpZSx5LkRFRkFVTFRfRURHRV9MRU5HVEgvMiksZGU9MippZVswXSxYPTIqaWVbMV07dmFyIGdlPUYubm9PZkNoaWxkcmVuKmoubm9PZkNoaWxkcmVuLyhGLm5vT2ZDaGlsZHJlbitqLm5vT2ZDaGlsZHJlbik7Ri5yZXB1bHNpb25Gb3JjZVgtPWdlKmRlLEYucmVwdWxzaW9uRm9yY2VZLT1nZSpYLGoucmVwdWxzaW9uRm9yY2VYKz1nZSpkZSxqLnJlcHVsc2lvbkZvcmNlWSs9Z2UqWH1lbHNlIHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXMmJkYuZ2V0Q2hpbGQoKT09bnVsbCYmai5nZXRDaGlsZCgpPT1udWxsPyhwZT1lZS5nZXRDZW50ZXJYKCktSy5nZXRDZW50ZXJYKCksYmU9ZWUuZ2V0Q2VudGVyWSgpLUsuZ2V0Q2VudGVyWSgpKTooXy5nZXRJbnRlcnNlY3Rpb24oSyxlZSxvZSkscGU9b2VbMl0tb2VbMF0sYmU9b2VbM10tb2VbMV0pLE1hdGguYWJzKHBlKTx5Lk1JTl9SRVBVTFNJT05fRElTVCYmKHBlPUEuc2lnbihwZSkqeS5NSU5fUkVQVUxTSU9OX0RJU1QpLE1hdGguYWJzKGJlKTx5Lk1JTl9SRVBVTFNJT05fRElTVCYmKGJlPUEuc2lnbihiZSkqeS5NSU5fUkVQVUxTSU9OX0RJU1QpLGFlPXBlKnBlK2JlKmJlLG5lPU1hdGguc3FydChhZSksc2U9dGhpcy5yZXB1bHNpb25Db25zdGFudCpGLm5vT2ZDaGlsZHJlbipqLm5vT2ZDaGlsZHJlbi9hZSxkZT1zZSpwZS9uZSxYPXNlKmJlL25lLEYucmVwdWxzaW9uRm9yY2VYLT1kZSxGLnJlcHVsc2lvbkZvcmNlWS09WCxqLnJlcHVsc2lvbkZvcmNlWCs9ZGUsai5yZXB1bHNpb25Gb3JjZVkrPVh9LFAucHJvdG90eXBlLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2U9ZnVuY3Rpb24oRil7dmFyIGosSyxlZSxpZSxvZSxwZSxiZSxhZTtqPUYuZ2V0T3duZXIoKSxLPShqLmdldFJpZ2h0KCkrai5nZXRMZWZ0KCkpLzIsZWU9KGouZ2V0VG9wKCkrai5nZXRCb3R0b20oKSkvMixpZT1GLmdldENlbnRlclgoKS1LLG9lPUYuZ2V0Q2VudGVyWSgpLWVlLHBlPU1hdGguYWJzKGllKStGLmdldFdpZHRoKCkvMixiZT1NYXRoLmFicyhvZSkrRi5nZXRIZWlnaHQoKS8yLEYuZ2V0T3duZXIoKT09dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPyhhZT1qLmdldEVzdGltYXRlZFNpemUoKSp0aGlzLmdyYXZpdHlSYW5nZUZhY3RvciwocGU+YWV8fGJlPmFlKSYmKEYuZ3Jhdml0YXRpb25Gb3JjZVg9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KmllLEYuZ3Jhdml0YXRpb25Gb3JjZVk9LXRoaXMuZ3Jhdml0eUNvbnN0YW50Km9lKSk6KGFlPWouZ2V0RXN0aW1hdGVkU2l6ZSgpKnRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3IsKHBlPmFlfHxiZT5hZSkmJihGLmdyYXZpdGF0aW9uRm9yY2VYPS10aGlzLmdyYXZpdHlDb25zdGFudCppZSp0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50LEYuZ3Jhdml0YXRpb25Gb3JjZVk9LXRoaXMuZ3Jhdml0eUNvbnN0YW50Km9lKnRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQpKX0sUC5wcm90b3R5cGUuaXNDb252ZXJnZWQ9ZnVuY3Rpb24oKXt2YXIgRixqPSExO3JldHVybiB0aGlzLnRvdGFsSXRlcmF0aW9ucz50aGlzLm1heEl0ZXJhdGlvbnMvMyYmKGo9TWF0aC5hYnModGhpcy50b3RhbERpc3BsYWNlbWVudC10aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50KTwyKSxGPXRoaXMudG90YWxEaXNwbGFjZW1lbnQ8dGhpcy50b3RhbERpc3BsYWNlbWVudFRocmVzaG9sZCx0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50PXRoaXMudG90YWxEaXNwbGFjZW1lbnQsRnx8an0sUC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbigpe3RoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0JiYhdGhpcy5pc1N1YkxheW91dCYmKHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zPT10aGlzLmFuaW1hdGlvblBlcmlvZD8odGhpcy51cGRhdGUoKSx0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucz0wKTp0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucysrKX0sUC5wcm90b3R5cGUuY2FsY05vT2ZDaGlsZHJlbkZvckFsbE5vZGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBGLGo9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxLPTA7SzxqLmxlbmd0aDtLKyspRj1qW0tdLEYubm9PZkNoaWxkcmVuPUYuZ2V0Tm9PZkNoaWxkcmVuKCl9LFAucHJvdG90eXBlLmNhbGNHcmlkPWZ1bmN0aW9uKEYpe3ZhciBqPTAsSz0wO2o9cGFyc2VJbnQoTWF0aC5jZWlsKChGLmdldFJpZ2h0KCktRi5nZXRMZWZ0KCkpL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxLPXBhcnNlSW50KE1hdGguY2VpbCgoRi5nZXRCb3R0b20oKS1GLmdldFRvcCgpKS90aGlzLnJlcHVsc2lvblJhbmdlKSk7Zm9yKHZhciBlZT1uZXcgQXJyYXkoaiksaWU9MDtpZTxqO2llKyspZWVbaWVdPW5ldyBBcnJheShLKTtmb3IodmFyIGllPTA7aWU8ajtpZSsrKWZvcih2YXIgb2U9MDtvZTxLO29lKyspZWVbaWVdW29lXT1uZXcgQXJyYXk7cmV0dXJuIGVlfSxQLnByb3RvdHlwZS5hZGROb2RlVG9HcmlkPWZ1bmN0aW9uKEYsaixLKXt2YXIgZWU9MCxpZT0wLG9lPTAscGU9MDtlZT1wYXJzZUludChNYXRoLmZsb29yKChGLmdldFJlY3QoKS54LWopL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxpZT1wYXJzZUludChNYXRoLmZsb29yKChGLmdldFJlY3QoKS53aWR0aCtGLmdldFJlY3QoKS54LWopL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxvZT1wYXJzZUludChNYXRoLmZsb29yKChGLmdldFJlY3QoKS55LUspL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxwZT1wYXJzZUludChNYXRoLmZsb29yKChGLmdldFJlY3QoKS5oZWlnaHQrRi5nZXRSZWN0KCkueS1LKS90aGlzLnJlcHVsc2lvblJhbmdlKSk7Zm9yKHZhciBiZT1lZTtiZTw9aWU7YmUrKylmb3IodmFyIGFlPW9lO2FlPD1wZTthZSsrKXRoaXMuZ3JpZFtiZV1bYWVdLnB1c2goRiksRi5zZXRHcmlkQ29vcmRpbmF0ZXMoZWUsaWUsb2UscGUpfSxQLnByb3RvdHlwZS51cGRhdGVHcmlkPWZ1bmN0aW9uKCl7dmFyIEYsaixLPXRoaXMuZ2V0QWxsTm9kZXMoKTtmb3IodGhpcy5ncmlkPXRoaXMuY2FsY0dyaWQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKSxGPTA7RjxLLmxlbmd0aDtGKyspaj1LW0ZdLHRoaXMuYWRkTm9kZVRvR3JpZChqLHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXRMZWZ0KCksdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldFRvcCgpKX0sUC5wcm90b3R5cGUuY2FsY3VsYXRlUmVwdWxzaW9uRm9yY2VPZkFOb2RlPWZ1bmN0aW9uKEYsaixLLGVlKXtpZih0aGlzLnRvdGFsSXRlcmF0aW9ucyV5LkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EPT0xJiZLfHxlZSl7dmFyIGllPW5ldyBTZXQ7Ri5zdXJyb3VuZGluZz1uZXcgQXJyYXk7Zm9yKHZhciBvZSxwZT10aGlzLmdyaWQsYmU9Ri5zdGFydFgtMTtiZTxGLmZpbmlzaFgrMjtiZSsrKWZvcih2YXIgYWU9Ri5zdGFydFktMTthZTxGLmZpbmlzaFkrMjthZSsrKWlmKCEoYmU8MHx8YWU8MHx8YmU+PXBlLmxlbmd0aHx8YWU+PXBlWzBdLmxlbmd0aCkpe2Zvcih2YXIgbmU9MDtuZTxwZVtiZV1bYWVdLmxlbmd0aDtuZSsrKWlmKG9lPXBlW2JlXVthZV1bbmVdLCEoRi5nZXRPd25lcigpIT1vZS5nZXRPd25lcigpfHxGPT1vZSkmJiFqLmhhcyhvZSkmJiFpZS5oYXMob2UpKXt2YXIgc2U9TWF0aC5hYnMoRi5nZXRDZW50ZXJYKCktb2UuZ2V0Q2VudGVyWCgpKS0oRi5nZXRXaWR0aCgpLzIrb2UuZ2V0V2lkdGgoKS8yKSxkZT1NYXRoLmFicyhGLmdldENlbnRlclkoKS1vZS5nZXRDZW50ZXJZKCkpLShGLmdldEhlaWdodCgpLzIrb2UuZ2V0SGVpZ2h0KCkvMik7c2U8PXRoaXMucmVwdWxzaW9uUmFuZ2UmJmRlPD10aGlzLnJlcHVsc2lvblJhbmdlJiZpZS5hZGQob2UpfX1GLnN1cnJvdW5kaW5nPVtdLmNvbmNhdCh2KGllKSl9Zm9yKGJlPTA7YmU8Ri5zdXJyb3VuZGluZy5sZW5ndGg7YmUrKyl0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZShGLEYuc3Vycm91bmRpbmdbYmVdKX0sUC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvblJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHUuZXhwb3J0cz1QfSxmdW5jdGlvbih1LGQscCl7dmFyIHY9cCgxKSxiPXAoNyk7ZnVuY3Rpb24geShfLEEsUCl7di5jYWxsKHRoaXMsXyxBLFApLHRoaXMuaWRlYWxMZW5ndGg9Yi5ERUZBVUxUX0VER0VfTEVOR1RIfXkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodi5wcm90b3R5cGUpO2Zvcih2YXIgVCBpbiB2KXlbVF09dltUXTt1LmV4cG9ydHM9eX0sZnVuY3Rpb24odSxkLHApe3ZhciB2PXAoMyk7ZnVuY3Rpb24gYihULF8sQSxQKXt2LmNhbGwodGhpcyxULF8sQSxQKSx0aGlzLnNwcmluZ0ZvcmNlWD0wLHRoaXMuc3ByaW5nRm9yY2VZPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVg9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWT0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVg9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VZPTAsdGhpcy5kaXNwbGFjZW1lbnRYPTAsdGhpcy5kaXNwbGFjZW1lbnRZPTAsdGhpcy5zdGFydFg9MCx0aGlzLmZpbmlzaFg9MCx0aGlzLnN0YXJ0WT0wLHRoaXMuZmluaXNoWT0wLHRoaXMuc3Vycm91bmRpbmc9W119Yi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh2LnByb3RvdHlwZSk7Zm9yKHZhciB5IGluIHYpYlt5XT12W3ldO2IucHJvdG90eXBlLnNldEdyaWRDb29yZGluYXRlcz1mdW5jdGlvbihULF8sQSxQKXt0aGlzLnN0YXJ0WD1ULHRoaXMuZmluaXNoWD1fLHRoaXMuc3RhcnRZPUEsdGhpcy5maW5pc2hZPVB9LHUuZXhwb3J0cz1ifSxmdW5jdGlvbih1LGQscCl7ZnVuY3Rpb24gdihiLHkpe3RoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLGIhPT1udWxsJiZ5IT09bnVsbCYmKHRoaXMuaGVpZ2h0PXksdGhpcy53aWR0aD1iKX12LnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRofSx2LnByb3RvdHlwZS5zZXRXaWR0aD1mdW5jdGlvbihiKXt0aGlzLndpZHRoPWJ9LHYucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodH0sdi5wcm90b3R5cGUuc2V0SGVpZ2h0PWZ1bmN0aW9uKGIpe3RoaXMuaGVpZ2h0PWJ9LHUuZXhwb3J0cz12fSxmdW5jdGlvbih1LGQscCl7dmFyIHY9cCgxNCk7ZnVuY3Rpb24gYigpe3RoaXMubWFwPXt9LHRoaXMua2V5cz1bXX1iLnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24oeSxUKXt2YXIgXz12LmNyZWF0ZUlEKHkpO3RoaXMuY29udGFpbnMoXyl8fCh0aGlzLm1hcFtfXT1ULHRoaXMua2V5cy5wdXNoKHkpKX0sYi5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oeSl7cmV0dXJuIHYuY3JlYXRlSUQoeSksdGhpcy5tYXBbeV0hPW51bGx9LGIucHJvdG90eXBlLmdldD1mdW5jdGlvbih5KXt2YXIgVD12LmNyZWF0ZUlEKHkpO3JldHVybiB0aGlzLm1hcFtUXX0sYi5wcm90b3R5cGUua2V5U2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua2V5c30sdS5leHBvcnRzPWJ9LGZ1bmN0aW9uKHUsZCxwKXt2YXIgdj1wKDE0KTtmdW5jdGlvbiBiKCl7dGhpcy5zZXQ9e319Yi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHkpe3ZhciBUPXYuY3JlYXRlSUQoeSk7dGhpcy5jb250YWlucyhUKXx8KHRoaXMuc2V0W1RdPXkpfSxiLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oeSl7ZGVsZXRlIHRoaXMuc2V0W3YuY3JlYXRlSUQoeSldfSxiLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2V0PXt9fSxiLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5zZXRbdi5jcmVhdGVJRCh5KV09PXl9LGIucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplKCk9PT0wfSxiLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0KS5sZW5ndGh9LGIucHJvdG90eXBlLmFkZEFsbFRvPWZ1bmN0aW9uKHkpe2Zvcih2YXIgVD1PYmplY3Qua2V5cyh0aGlzLnNldCksXz1ULmxlbmd0aCxBPTA7QTxfO0ErKyl5LnB1c2godGhpcy5zZXRbVFtBXV0pfSxiLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0KS5sZW5ndGh9LGIucHJvdG90eXBlLmFkZEFsbD1mdW5jdGlvbih5KXtmb3IodmFyIFQ9eS5sZW5ndGgsXz0wO188VDtfKyspe3ZhciBBPXlbX107dGhpcy5hZGQoQSl9fSx1LmV4cG9ydHM9Yn0sZnVuY3Rpb24odSxkLHApe3ZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gXyhBLFApe2Zvcih2YXIgUj0wO1I8UC5sZW5ndGg7UisrKXt2YXIgRj1QW1JdO0YuZW51bWVyYWJsZT1GLmVudW1lcmFibGV8fCExLEYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBGJiYoRi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsRi5rZXksRil9fXJldHVybiBmdW5jdGlvbihBLFAsUil7cmV0dXJuIFAmJl8oQS5wcm90b3R5cGUsUCksUiYmXyhBLFIpLEF9fSgpO2Z1bmN0aW9uIGIoXyxBKXtpZighKF8gaW5zdGFuY2VvZiBBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgeT1wKDExKSxUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gXyhBLFApe2IodGhpcyxfKSwoUCE9PW51bGx8fFAhPT12b2lkIDApJiYodGhpcy5jb21wYXJlRnVuY3Rpb249dGhpcy5fZGVmYXVsdENvbXBhcmVGdW5jdGlvbik7dmFyIFI9dm9pZCAwO0EgaW5zdGFuY2VvZiB5P1I9QS5zaXplKCk6Uj1BLmxlbmd0aCx0aGlzLl9xdWlja3NvcnQoQSwwLFItMSl9cmV0dXJuIHYoXyxbe2tleToiX3F1aWNrc29ydCIsdmFsdWU6ZnVuY3Rpb24oUCxSLEYpe2lmKFI8Ril7dmFyIGo9dGhpcy5fcGFydGl0aW9uKFAsUixGKTt0aGlzLl9xdWlja3NvcnQoUCxSLGopLHRoaXMuX3F1aWNrc29ydChQLGorMSxGKX19fSx7a2V5OiJfcGFydGl0aW9uIix2YWx1ZTpmdW5jdGlvbihQLFIsRil7Zm9yKHZhciBqPXRoaXMuX2dldChQLFIpLEs9UixlZT1GOzspe2Zvcig7dGhpcy5jb21wYXJlRnVuY3Rpb24oaix0aGlzLl9nZXQoUCxlZSkpOyllZS0tO2Zvcig7dGhpcy5jb21wYXJlRnVuY3Rpb24odGhpcy5fZ2V0KFAsSyksaik7KUsrKztpZihLPGVlKXRoaXMuX3N3YXAoUCxLLGVlKSxLKyssZWUtLTtlbHNlIHJldHVybiBlZX19fSx7a2V5OiJfZ2V0Iix2YWx1ZTpmdW5jdGlvbihQLFIpe3JldHVybiBQIGluc3RhbmNlb2YgeT9QLmdldF9vYmplY3RfYXQoUik6UFtSXX19LHtrZXk6Il9zZXQiLHZhbHVlOmZ1bmN0aW9uKFAsUixGKXtQIGluc3RhbmNlb2YgeT9QLnNldF9vYmplY3RfYXQoUixGKTpQW1JdPUZ9fSx7a2V5OiJfc3dhcCIsdmFsdWU6ZnVuY3Rpb24oUCxSLEYpe3ZhciBqPXRoaXMuX2dldChQLFIpO3RoaXMuX3NldChQLFIsdGhpcy5fZ2V0KFAsRikpLHRoaXMuX3NldChQLEYsail9fSx7a2V5OiJfZGVmYXVsdENvbXBhcmVGdW5jdGlvbiIsdmFsdWU6ZnVuY3Rpb24oUCxSKXtyZXR1cm4gUj5QfX1dKSxffSgpO3UuZXhwb3J0cz1UfSxmdW5jdGlvbih1LGQscCl7dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBUKF8sQSl7Zm9yKHZhciBQPTA7UDxBLmxlbmd0aDtQKyspe3ZhciBSPUFbUF07Ui5lbnVtZXJhYmxlPVIuZW51bWVyYWJsZXx8ITEsUi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIFImJihSLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXyxSLmtleSxSKX19cmV0dXJuIGZ1bmN0aW9uKF8sQSxQKXtyZXR1cm4gQSYmVChfLnByb3RvdHlwZSxBKSxQJiZUKF8sUCksX319KCk7ZnVuY3Rpb24gYihULF8pe2lmKCEoVCBpbnN0YW5jZW9mIF8pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gVChfLEEpe3ZhciBQPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXToxLFI9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOi0xLEY9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOi0xO2IodGhpcyxUKSx0aGlzLnNlcXVlbmNlMT1fLHRoaXMuc2VxdWVuY2UyPUEsdGhpcy5tYXRjaF9zY29yZT1QLHRoaXMubWlzbWF0Y2hfcGVuYWx0eT1SLHRoaXMuZ2FwX3BlbmFsdHk9Rix0aGlzLmlNYXg9Xy5sZW5ndGgrMSx0aGlzLmpNYXg9QS5sZW5ndGgrMSx0aGlzLmdyaWQ9bmV3IEFycmF5KHRoaXMuaU1heCk7Zm9yKHZhciBqPTA7ajx0aGlzLmlNYXg7aisrKXt0aGlzLmdyaWRbal09bmV3IEFycmF5KHRoaXMuak1heCk7Zm9yKHZhciBLPTA7Szx0aGlzLmpNYXg7SysrKXRoaXMuZ3JpZFtqXVtLXT0wfXRoaXMudHJhY2ViYWNrR3JpZD1uZXcgQXJyYXkodGhpcy5pTWF4KTtmb3IodmFyIGVlPTA7ZWU8dGhpcy5pTWF4O2VlKyspe3RoaXMudHJhY2ViYWNrR3JpZFtlZV09bmV3IEFycmF5KHRoaXMuak1heCk7Zm9yKHZhciBpZT0wO2llPHRoaXMuak1heDtpZSsrKXRoaXMudHJhY2ViYWNrR3JpZFtlZV1baWVdPVtudWxsLG51bGwsbnVsbF19dGhpcy5hbGlnbm1lbnRzPVtdLHRoaXMuc2NvcmU9LTEsdGhpcy5jb21wdXRlR3JpZHMoKX1yZXR1cm4gdihULFt7a2V5OiJnZXRTY29yZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY29yZX19LHtrZXk6ImdldEFsaWdubWVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWxpZ25tZW50c319LHtrZXk6ImNvbXB1dGVHcmlkcyIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIEE9MTtBPHRoaXMuak1heDtBKyspdGhpcy5ncmlkWzBdW0FdPXRoaXMuZ3JpZFswXVtBLTFdK3RoaXMuZ2FwX3BlbmFsdHksdGhpcy50cmFjZWJhY2tHcmlkWzBdW0FdPVshMSwhMSwhMF07Zm9yKHZhciBQPTE7UDx0aGlzLmlNYXg7UCsrKXRoaXMuZ3JpZFtQXVswXT10aGlzLmdyaWRbUC0xXVswXSt0aGlzLmdhcF9wZW5hbHR5LHRoaXMudHJhY2ViYWNrR3JpZFtQXVswXT1bITEsITAsITFdO2Zvcih2YXIgUj0xO1I8dGhpcy5pTWF4O1IrKylmb3IodmFyIEY9MTtGPHRoaXMuak1heDtGKyspe3ZhciBqPXZvaWQgMDt0aGlzLnNlcXVlbmNlMVtSLTFdPT09dGhpcy5zZXF1ZW5jZTJbRi0xXT9qPXRoaXMuZ3JpZFtSLTFdW0YtMV0rdGhpcy5tYXRjaF9zY29yZTpqPXRoaXMuZ3JpZFtSLTFdW0YtMV0rdGhpcy5taXNtYXRjaF9wZW5hbHR5O3ZhciBLPXRoaXMuZ3JpZFtSLTFdW0ZdK3RoaXMuZ2FwX3BlbmFsdHksZWU9dGhpcy5ncmlkW1JdW0YtMV0rdGhpcy5nYXBfcGVuYWx0eSxpZT1baixLLGVlXSxvZT10aGlzLmFycmF5QWxsTWF4SW5kZXhlcyhpZSk7dGhpcy5ncmlkW1JdW0ZdPWllW29lWzBdXSx0aGlzLnRyYWNlYmFja0dyaWRbUl1bRl09W29lLmluY2x1ZGVzKDApLG9lLmluY2x1ZGVzKDEpLG9lLmluY2x1ZGVzKDIpXX10aGlzLnNjb3JlPXRoaXMuZ3JpZFt0aGlzLmlNYXgtMV1bdGhpcy5qTWF4LTFdfX0se2tleToiYWxpZ25tZW50VHJhY2ViYWNrIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBBPVtdO2ZvcihBLnB1c2goe3BvczpbdGhpcy5zZXF1ZW5jZTEubGVuZ3RoLHRoaXMuc2VxdWVuY2UyLmxlbmd0aF0sc2VxMToiIixzZXEyOiIifSk7QVswXTspe3ZhciBQPUFbMF0sUj10aGlzLnRyYWNlYmFja0dyaWRbUC5wb3NbMF1dW1AucG9zWzFdXTtSWzBdJiZBLnB1c2goe3BvczpbUC5wb3NbMF0tMSxQLnBvc1sxXS0xXSxzZXExOnRoaXMuc2VxdWVuY2UxW1AucG9zWzBdLTFdK1Auc2VxMSxzZXEyOnRoaXMuc2VxdWVuY2UyW1AucG9zWzFdLTFdK1Auc2VxMn0pLFJbMV0mJkEucHVzaCh7cG9zOltQLnBvc1swXS0xLFAucG9zWzFdXSxzZXExOnRoaXMuc2VxdWVuY2UxW1AucG9zWzBdLTFdK1Auc2VxMSxzZXEyOiItIitQLnNlcTJ9KSxSWzJdJiZBLnB1c2goe3BvczpbUC5wb3NbMF0sUC5wb3NbMV0tMV0sc2VxMToiLSIrUC5zZXExLHNlcTI6dGhpcy5zZXF1ZW5jZTJbUC5wb3NbMV0tMV0rUC5zZXEyfSksUC5wb3NbMF09PT0wJiZQLnBvc1sxXT09PTAmJnRoaXMuYWxpZ25tZW50cy5wdXNoKHtzZXF1ZW5jZTE6UC5zZXExLHNlcXVlbmNlMjpQLnNlcTJ9KSxBLnNoaWZ0KCl9cmV0dXJuIHRoaXMuYWxpZ25tZW50c319LHtrZXk6ImdldEFsbEluZGV4ZXMiLHZhbHVlOmZ1bmN0aW9uKEEsUCl7Zm9yKHZhciBSPVtdLEY9LTE7KEY9QS5pbmRleE9mKFAsRisxKSkhPT0tMTspUi5wdXNoKEYpO3JldHVybiBSfX0se2tleToiYXJyYXlBbGxNYXhJbmRleGVzIix2YWx1ZTpmdW5jdGlvbihBKXtyZXR1cm4gdGhpcy5nZXRBbGxJbmRleGVzKEEsTWF0aC5tYXguYXBwbHkobnVsbCxBKSl9fV0pLFR9KCk7dS5leHBvcnRzPXl9LGZ1bmN0aW9uKHUsZCxwKXt2YXIgdj1mdW5jdGlvbigpe307di5GRExheW91dD1wKDE4KSx2LkZETGF5b3V0Q29uc3RhbnRzPXAoNyksdi5GRExheW91dEVkZ2U9cCgxOSksdi5GRExheW91dE5vZGU9cCgyMCksdi5EaW1lbnNpb25EPXAoMjEpLHYuSGFzaE1hcD1wKDIyKSx2Lkhhc2hTZXQ9cCgyMyksdi5JR2VvbWV0cnk9cCg4KSx2LklNYXRoPXAoOSksdi5JbnRlZ2VyPXAoMTApLHYuUG9pbnQ9cCgxMiksdi5Qb2ludEQ9cCg0KSx2LlJhbmRvbVNlZWQ9cCgxNiksdi5SZWN0YW5nbGVEPXAoMTMpLHYuVHJhbnNmb3JtPXAoMTcpLHYuVW5pcXVlSURHZW5lcmV0b3I9cCgxNCksdi5RdWlja3NvcnQ9cCgyNCksdi5MaW5rZWRMaXN0PXAoMTEpLHYuTEdyYXBoT2JqZWN0PXAoMiksdi5MR3JhcGg9cCg1KSx2LkxFZGdlPXAoMSksdi5MR3JhcGhNYW5hZ2VyPXAoNiksdi5MTm9kZT1wKDMpLHYuTGF5b3V0PXAoMTUpLHYuTGF5b3V0Q29uc3RhbnRzPXAoMCksdi5OZWVkbGVtYW5XdW5zY2g9cCgyNSksdS5leHBvcnRzPXZ9LGZ1bmN0aW9uKHUsZCxwKXtmdW5jdGlvbiB2KCl7dGhpcy5saXN0ZW5lcnM9W119dmFyIGI9di5wcm90b3R5cGU7Yi5hZGRMaXN0ZW5lcj1mdW5jdGlvbih5LFQpe3RoaXMubGlzdGVuZXJzLnB1c2goe2V2ZW50OnksY2FsbGJhY2s6VH0pfSxiLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKHksVCl7Zm9yKHZhciBfPXRoaXMubGlzdGVuZXJzLmxlbmd0aDtfPj0wO18tLSl7dmFyIEE9dGhpcy5saXN0ZW5lcnNbX107QS5ldmVudD09PXkmJkEuY2FsbGJhY2s9PT1UJiZ0aGlzLmxpc3RlbmVycy5zcGxpY2UoXywxKX19LGIuZW1pdD1mdW5jdGlvbih5LFQpe2Zvcih2YXIgXz0wO188dGhpcy5saXN0ZW5lcnMubGVuZ3RoO18rKyl7dmFyIEE9dGhpcy5saXN0ZW5lcnNbX107eT09PUEuZXZlbnQmJkEuY2FsbGJhY2soVCl9fSx1LmV4cG9ydHM9dn1dKX0pfShyd2UpKSxyd2UuZXhwb3J0c312YXIgcFdlO2Z1bmN0aW9uIGRvbigpe3JldHVybiBwV2V8fChwV2U9MSxmdW5jdGlvbihpLHMpeyhmdW5jdGlvbihkLHApe2kuZXhwb3J0cz1wKGZvbigpKX0pKEFnLGZ1bmN0aW9uKHUpe3JldHVybiBmdW5jdGlvbihkKXt2YXIgcD17fTtmdW5jdGlvbiB2KGIpe2lmKHBbYl0pcmV0dXJuIHBbYl0uZXhwb3J0czt2YXIgeT1wW2JdPXtpOmIsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZFtiXS5jYWxsKHkuZXhwb3J0cyx5LHkuZXhwb3J0cyx2KSx5Lmw9ITAseS5leHBvcnRzfXJldHVybiB2Lm09ZCx2LmM9cCx2Lmk9ZnVuY3Rpb24oYil7cmV0dXJuIGJ9LHYuZD1mdW5jdGlvbihiLHksVCl7di5vKGIseSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLHkse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpUfSl9LHYubj1mdW5jdGlvbihiKXt2YXIgeT1iJiZiLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gYi5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBifTtyZXR1cm4gdi5kKHksImEiLHkpLHl9LHYubz1mdW5jdGlvbihiLHkpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYix5KX0sdi5wPSIiLHYodi5zPTcpfShbZnVuY3Rpb24oZCxwKXtkLmV4cG9ydHM9dX0sZnVuY3Rpb24oZCxwLHYpe3ZhciBiPXYoMCkuRkRMYXlvdXRDb25zdGFudHM7ZnVuY3Rpb24geSgpe31mb3IodmFyIFQgaW4gYil5W1RdPWJbVF07eS5ERUZBVUxUX1VTRV9NVUxUSV9MRVZFTF9TQ0FMSU5HPSExLHkuREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTj1iLkRFRkFVTFRfRURHRV9MRU5HVEgseS5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OPTYwLHkuVElMRT0hMCx5LlRJTElOR19QQURESU5HX1ZFUlRJQ0FMPTEwLHkuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTD0xMCx5LlRSRUVfUkVEVUNUSU9OX09OX0lOQ1JFTUVOVEFMPSExLGQuZXhwb3J0cz15fSxmdW5jdGlvbihkLHAsdil7dmFyIGI9digwKS5GRExheW91dEVkZ2U7ZnVuY3Rpb24geShfLEEsUCl7Yi5jYWxsKHRoaXMsXyxBLFApfXkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUpO2Zvcih2YXIgVCBpbiBiKXlbVF09YltUXTtkLmV4cG9ydHM9eX0sZnVuY3Rpb24oZCxwLHYpe3ZhciBiPXYoMCkuTEdyYXBoO2Z1bmN0aW9uIHkoXyxBLFApe2IuY2FsbCh0aGlzLF8sQSxQKX15LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIucHJvdG90eXBlKTtmb3IodmFyIFQgaW4gYil5W1RdPWJbVF07ZC5leHBvcnRzPXl9LGZ1bmN0aW9uKGQscCx2KXt2YXIgYj12KDApLkxHcmFwaE1hbmFnZXI7ZnVuY3Rpb24geShfKXtiLmNhbGwodGhpcyxfKX15LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIucHJvdG90eXBlKTtmb3IodmFyIFQgaW4gYil5W1RdPWJbVF07ZC5leHBvcnRzPXl9LGZ1bmN0aW9uKGQscCx2KXt2YXIgYj12KDApLkZETGF5b3V0Tm9kZSx5PXYoMCkuSU1hdGg7ZnVuY3Rpb24gVChBLFAsUixGKXtiLmNhbGwodGhpcyxBLFAsUixGKX1ULnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIucHJvdG90eXBlKTtmb3IodmFyIF8gaW4gYilUW19dPWJbX107VC5wcm90b3R5cGUubW92ZT1mdW5jdGlvbigpe3ZhciBBPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldExheW91dCgpO3RoaXMuZGlzcGxhY2VtZW50WD1BLmNvb2xpbmdGYWN0b3IqKHRoaXMuc3ByaW5nRm9yY2VYK3RoaXMucmVwdWxzaW9uRm9yY2VYK3RoaXMuZ3Jhdml0YXRpb25Gb3JjZVgpL3RoaXMubm9PZkNoaWxkcmVuLHRoaXMuZGlzcGxhY2VtZW50WT1BLmNvb2xpbmdGYWN0b3IqKHRoaXMuc3ByaW5nRm9yY2VZK3RoaXMucmVwdWxzaW9uRm9yY2VZK3RoaXMuZ3Jhdml0YXRpb25Gb3JjZVkpL3RoaXMubm9PZkNoaWxkcmVuLE1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WCk+QS5jb29saW5nRmFjdG9yKkEubWF4Tm9kZURpc3BsYWNlbWVudCYmKHRoaXMuZGlzcGxhY2VtZW50WD1BLmNvb2xpbmdGYWN0b3IqQS5tYXhOb2RlRGlzcGxhY2VtZW50Knkuc2lnbih0aGlzLmRpc3BsYWNlbWVudFgpKSxNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFkpPkEuY29vbGluZ0ZhY3RvcipBLm1heE5vZGVEaXNwbGFjZW1lbnQmJih0aGlzLmRpc3BsYWNlbWVudFk9QS5jb29saW5nRmFjdG9yKkEubWF4Tm9kZURpc3BsYWNlbWVudCp5LnNpZ24odGhpcy5kaXNwbGFjZW1lbnRZKSksdGhpcy5jaGlsZD09bnVsbD90aGlzLm1vdmVCeSh0aGlzLmRpc3BsYWNlbWVudFgsdGhpcy5kaXNwbGFjZW1lbnRZKTp0aGlzLmNoaWxkLmdldE5vZGVzKCkubGVuZ3RoPT0wP3RoaXMubW92ZUJ5KHRoaXMuZGlzcGxhY2VtZW50WCx0aGlzLmRpc3BsYWNlbWVudFkpOnRoaXMucHJvcG9nYXRlRGlzcGxhY2VtZW50VG9DaGlsZHJlbih0aGlzLmRpc3BsYWNlbWVudFgsdGhpcy5kaXNwbGFjZW1lbnRZKSxBLnRvdGFsRGlzcGxhY2VtZW50Kz1NYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFgpK01hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WSksdGhpcy5zcHJpbmdGb3JjZVg9MCx0aGlzLnNwcmluZ0ZvcmNlWT0wLHRoaXMucmVwdWxzaW9uRm9yY2VYPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVk9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VYPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWT0wLHRoaXMuZGlzcGxhY2VtZW50WD0wLHRoaXMuZGlzcGxhY2VtZW50WT0wfSxULnByb3RvdHlwZS5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuPWZ1bmN0aW9uKEEsUCl7Zm9yKHZhciBSPXRoaXMuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLEYsaj0wO2o8Ui5sZW5ndGg7aisrKUY9UltqXSxGLmdldENoaWxkKCk9PW51bGw/KEYubW92ZUJ5KEEsUCksRi5kaXNwbGFjZW1lbnRYKz1BLEYuZGlzcGxhY2VtZW50WSs9UCk6Ri5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuKEEsUCl9LFQucHJvdG90eXBlLnNldFByZWQxPWZ1bmN0aW9uKEEpe3RoaXMucHJlZDE9QX0sVC5wcm90b3R5cGUuZ2V0UHJlZDE9ZnVuY3Rpb24oKXtyZXR1cm4gcHJlZDF9LFQucHJvdG90eXBlLmdldFByZWQyPWZ1bmN0aW9uKCl7cmV0dXJuIHByZWQyfSxULnByb3RvdHlwZS5zZXROZXh0PWZ1bmN0aW9uKEEpe3RoaXMubmV4dD1BfSxULnByb3RvdHlwZS5nZXROZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIG5leHR9LFQucHJvdG90eXBlLnNldFByb2Nlc3NlZD1mdW5jdGlvbihBKXt0aGlzLnByb2Nlc3NlZD1BfSxULnByb3RvdHlwZS5pc1Byb2Nlc3NlZD1mdW5jdGlvbigpe3JldHVybiBwcm9jZXNzZWR9LGQuZXhwb3J0cz1UfSxmdW5jdGlvbihkLHAsdil7dmFyIGI9digwKS5GRExheW91dCx5PXYoNCksVD12KDMpLF89dig1KSxBPXYoMiksUD12KDEpLFI9digwKS5GRExheW91dENvbnN0YW50cyxGPXYoMCkuTGF5b3V0Q29uc3RhbnRzLGo9digwKS5Qb2ludCxLPXYoMCkuUG9pbnRELGVlPXYoMCkuTGF5b3V0LGllPXYoMCkuSW50ZWdlcixvZT12KDApLklHZW9tZXRyeSxwZT12KDApLkxHcmFwaCxiZT12KDApLlRyYW5zZm9ybTtmdW5jdGlvbiBhZSgpe2IuY2FsbCh0aGlzKSx0aGlzLnRvQmVUaWxlZD17fX1hZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiLnByb3RvdHlwZSk7Zm9yKHZhciBuZSBpbiBiKWFlW25lXT1iW25lXTthZS5wcm90b3R5cGUubmV3R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKCl7dmFyIHNlPW5ldyB5KHRoaXMpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcj1zZSxzZX0sYWUucHJvdG90eXBlLm5ld0dyYXBoPWZ1bmN0aW9uKHNlKXtyZXR1cm4gbmV3IFQobnVsbCx0aGlzLmdyYXBoTWFuYWdlcixzZSl9LGFlLnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKHNlKXtyZXR1cm4gbmV3IF8odGhpcy5ncmFwaE1hbmFnZXIsc2UpfSxhZS5wcm90b3R5cGUubmV3RWRnZT1mdW5jdGlvbihzZSl7cmV0dXJuIG5ldyBBKG51bGwsbnVsbCxzZSl9LGFlLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe2IucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcyxhcmd1bWVudHMpLHRoaXMuaXNTdWJMYXlvdXR8fChQLkRFRkFVTFRfRURHRV9MRU5HVEg8MTA/dGhpcy5pZGVhbEVkZ2VMZW5ndGg9MTA6dGhpcy5pZGVhbEVkZ2VMZW5ndGg9UC5ERUZBVUxUX0VER0VfTEVOR1RILHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbj1QLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OLHRoaXMuc3ByaW5nQ29uc3RhbnQ9Ui5ERUZBVUxUX1NQUklOR19TVFJFTkdUSCx0aGlzLnJlcHVsc2lvbkNvbnN0YW50PVIuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEgsdGhpcy5ncmF2aXR5Q29uc3RhbnQ9Ui5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudD1SLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSCx0aGlzLmdyYXZpdHlSYW5nZUZhY3Rvcj1SLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5jb21wb3VuZEdyYXZpdHlSYW5nZUZhY3Rvcj1SLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5wcnVuZWROb2Rlc0FsbD1bXSx0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucz0wLHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zPTAsdGhpcy5pc1RyZWVHcm93aW5nPSExLHRoaXMuaXNHcm93dGhGaW5pc2hlZD0hMSx0aGlzLmNvb2xpbmdDeWNsZT0wLHRoaXMubWF4Q29vbGluZ0N5Y2xlPXRoaXMubWF4SXRlcmF0aW9ucy9SLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRCx0aGlzLmZpbmFsVGVtcGVyYXR1cmU9Ui5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0QvdGhpcy5tYXhJdGVyYXRpb25zLHRoaXMuY29vbGluZ0FkanVzdGVyPTEpfSxhZS5wcm90b3R5cGUubGF5b3V0PWZ1bmN0aW9uKCl7dmFyIHNlPUYuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEO3JldHVybiBzZSYmKHRoaXMuY3JlYXRlQmVuZHBvaW50cygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKSksdGhpcy5sZXZlbD0wLHRoaXMuY2xhc3NpY0xheW91dCgpfSxhZS5wcm90b3R5cGUuY2xhc3NpY0xheW91dD1mdW5jdGlvbigpe2lmKHRoaXMubm9kZXNXaXRoR3Jhdml0eT10aGlzLmNhbGN1bGF0ZU5vZGVzVG9BcHBseUdyYXZpdGF0aW9uVG8oKSx0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbih0aGlzLm5vZGVzV2l0aEdyYXZpdHkpLHRoaXMuY2FsY05vT2ZDaGlsZHJlbkZvckFsbE5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9ycygpLHRoaXMuZ3JhcGhNYW5hZ2VyLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzKCksdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmNhbGNFc3RpbWF0ZWRTaXplKCksdGhpcy5jYWxjSWRlYWxFZGdlTGVuZ3RocygpLHRoaXMuaW5jcmVtZW50YWwpe2lmKFAuVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUwpe3RoaXMucmVkdWNlVHJlZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7dmFyIGRlPW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxYPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oeGUpe3JldHVybiBkZS5oYXMoeGUpfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oWCl9fWVsc2V7dmFyIHNlPXRoaXMuZ2V0RmxhdEZvcmVzdCgpO2lmKHNlLmxlbmd0aD4wKXRoaXMucG9zaXRpb25Ob2Rlc1JhZGlhbGx5KHNlKTtlbHNle3RoaXMucmVkdWNlVHJlZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7dmFyIGRlPW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxYPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oZ2Upe3JldHVybiBkZS5oYXMoZ2UpfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oWCksdGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkoKX19cmV0dXJuIHRoaXMuaW5pdFNwcmluZ0VtYmVkZGVyKCksdGhpcy5ydW5TcHJpbmdFbWJlZGRlcigpLCEwfSxhZS5wcm90b3R5cGUudGljaz1mdW5jdGlvbigpe2lmKHRoaXMudG90YWxJdGVyYXRpb25zKyssdGhpcy50b3RhbEl0ZXJhdGlvbnM9PT10aGlzLm1heEl0ZXJhdGlvbnMmJiF0aGlzLmlzVHJlZUdyb3dpbmcmJiF0aGlzLmlzR3Jvd3RoRmluaXNoZWQpaWYodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGg+MCl0aGlzLmlzVHJlZUdyb3dpbmc9ITA7ZWxzZSByZXR1cm4hMDtpZih0aGlzLnRvdGFsSXRlcmF0aW9ucyVSLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRD09MCYmIXRoaXMuaXNUcmVlR3Jvd2luZyYmIXRoaXMuaXNHcm93dGhGaW5pc2hlZCl7aWYodGhpcy5pc0NvbnZlcmdlZCgpKWlmKHRoaXMucHJ1bmVkTm9kZXNBbGwubGVuZ3RoPjApdGhpcy5pc1RyZWVHcm93aW5nPSEwO2Vsc2UgcmV0dXJuITA7dGhpcy5jb29saW5nQ3ljbGUrKyx0aGlzLmxheW91dFF1YWxpdHk9PTA/dGhpcy5jb29saW5nQWRqdXN0ZXI9dGhpcy5jb29saW5nQ3ljbGU6dGhpcy5sYXlvdXRRdWFsaXR5PT0xJiYodGhpcy5jb29saW5nQWRqdXN0ZXI9dGhpcy5jb29saW5nQ3ljbGUvMyksdGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3ItTWF0aC5wb3codGhpcy5jb29saW5nQ3ljbGUsTWF0aC5sb2coMTAwKih0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yLXRoaXMuZmluYWxUZW1wZXJhdHVyZSkpL01hdGgubG9nKHRoaXMubWF4Q29vbGluZ0N5Y2xlKSkvMTAwKnRoaXMuY29vbGluZ0FkanVzdGVyLHRoaXMuZmluYWxUZW1wZXJhdHVyZSksdGhpcy5hbmltYXRpb25QZXJpb2Q9TWF0aC5jZWlsKHRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZCpNYXRoLnNxcnQodGhpcy5jb29saW5nRmFjdG9yKSl9aWYodGhpcy5pc1RyZWVHcm93aW5nKXtpZih0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucyUxMD09MClpZih0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aD4wKXt0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLnVwZGF0ZUdyaWQoKSx0aGlzLmdyb3dUcmVlKHRoaXMucHJ1bmVkTm9kZXNBbGwpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTt2YXIgc2U9bmV3IFNldCh0aGlzLmdldEFsbE5vZGVzKCkpLGRlPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oVyl7cmV0dXJuIHNlLmhhcyhXKX0pO3RoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKGRlKSx0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLnVwZGF0ZUdyaWQoKSx0aGlzLmNvb2xpbmdGYWN0b3I9Ui5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMfWVsc2UgdGhpcy5pc1RyZWVHcm93aW5nPSExLHRoaXMuaXNHcm93dGhGaW5pc2hlZD0hMDt0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucysrfWlmKHRoaXMuaXNHcm93dGhGaW5pc2hlZCl7aWYodGhpcy5pc0NvbnZlcmdlZCgpKXJldHVybiEwO3RoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zJTEwPT0wJiYodGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy51cGRhdGVHcmlkKCkpLHRoaXMuY29vbGluZ0ZhY3Rvcj1SLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwqKCgxMDAtdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMpLzEwMCksdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMrK312YXIgWD0hdGhpcy5pc1RyZWVHcm93aW5nJiYhdGhpcy5pc0dyb3d0aEZpbmlzaGVkLGdlPXRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zJTEwPT0xJiZ0aGlzLmlzVHJlZUdyb3dpbmd8fHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zJTEwPT0xJiZ0aGlzLmlzR3Jvd3RoRmluaXNoZWQ7cmV0dXJuIHRoaXMudG90YWxEaXNwbGFjZW1lbnQ9MCx0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLmNhbGNTcHJpbmdGb3JjZXMoKSx0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZXMoWCxnZSksdGhpcy5jYWxjR3Jhdml0YXRpb25hbEZvcmNlcygpLHRoaXMubW92ZU5vZGVzKCksdGhpcy5hbmltYXRlKCksITF9LGFlLnByb3RvdHlwZS5nZXRQb3NpdGlvbnNEYXRhPWZ1bmN0aW9uKCl7Zm9yKHZhciBzZT10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLGRlPXt9LFg9MDtYPHNlLmxlbmd0aDtYKyspe3ZhciBnZT1zZVtYXS5yZWN0LFc9c2VbWF0uaWQ7ZGVbV109e2lkOlcseDpnZS5nZXRDZW50ZXJYKCkseTpnZS5nZXRDZW50ZXJZKCksdzpnZS53aWR0aCxoOmdlLmhlaWdodH19cmV0dXJuIGRlfSxhZS5wcm90b3R5cGUucnVuU3ByaW5nRW1iZWRkZXI9ZnVuY3Rpb24oKXt0aGlzLmluaXRpYWxBbmltYXRpb25QZXJpb2Q9MjUsdGhpcy5hbmltYXRpb25QZXJpb2Q9dGhpcy5pbml0aWFsQW5pbWF0aW9uUGVyaW9kO3ZhciBzZT0hMTtpZihSLkFOSU1BVEU9PT0iZHVyaW5nIil0aGlzLmVtaXQoImxheW91dHN0YXJ0ZWQiKTtlbHNle2Zvcig7IXNlOylzZT10aGlzLnRpY2soKTt0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKX19LGFlLnByb3RvdHlwZS5jYWxjdWxhdGVOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvblRvPWZ1bmN0aW9uKCl7dmFyIHNlPVtdLGRlLFg9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0R3JhcGhzKCksZ2U9WC5sZW5ndGgsVztmb3IoVz0wO1c8Z2U7VysrKWRlPVhbV10sZGUudXBkYXRlQ29ubmVjdGVkKCksZGUuaXNDb25uZWN0ZWR8fChzZT1zZS5jb25jYXQoZGUuZ2V0Tm9kZXMoKSkpO3JldHVybiBzZX0sYWUucHJvdG90eXBlLmNyZWF0ZUJlbmRwb2ludHM9ZnVuY3Rpb24oKXt2YXIgc2U9W107c2U9c2UuY29uY2F0KHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkpO3ZhciBkZT1uZXcgU2V0LFg7Zm9yKFg9MDtYPHNlLmxlbmd0aDtYKyspe3ZhciBnZT1zZVtYXTtpZighZGUuaGFzKGdlKSl7dmFyIFc9Z2UuZ2V0U291cmNlKCkseGU9Z2UuZ2V0VGFyZ2V0KCk7aWYoVz09eGUpZ2UuZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IEspLGdlLmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBLKSx0aGlzLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzKGdlKSxkZS5hZGQoZ2UpO2Vsc2V7dmFyIFU9W107aWYoVT1VLmNvbmNhdChXLmdldEVkZ2VMaXN0VG9Ob2RlKHhlKSksVT1VLmNvbmNhdCh4ZS5nZXRFZGdlTGlzdFRvTm9kZShXKSksIWRlLmhhcyhVWzBdKSl7aWYoVS5sZW5ndGg+MSl7dmFyIEZlO2ZvcihGZT0wO0ZlPFUubGVuZ3RoO0ZlKyspe3ZhciBQZT1VW0ZlXTtQZS5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgSyksdGhpcy5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cyhQZSl9fVUuZm9yRWFjaChmdW5jdGlvbihqZSl7ZGUuYWRkKGplKX0pfX19aWYoZGUuc2l6ZT09c2UubGVuZ3RoKWJyZWFrfX0sYWUucHJvdG90eXBlLnBvc2l0aW9uTm9kZXNSYWRpYWxseT1mdW5jdGlvbihzZSl7Zm9yKHZhciBkZT1uZXcgaigwLDApLFg9TWF0aC5jZWlsKE1hdGguc3FydChzZS5sZW5ndGgpKSxnZT0wLFc9MCx4ZT0wLFU9bmV3IEsoMCwwKSxGZT0wO0ZlPHNlLmxlbmd0aDtGZSsrKXtGZSVYPT0wJiYoeGU9MCxXPWdlLEZlIT0wJiYoVys9UC5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OKSxnZT0wKTt2YXIgUGU9c2VbRmVdLGplPWVlLmZpbmRDZW50ZXJPZlRyZWUoUGUpO2RlLng9eGUsZGUueT1XLFU9YWUucmFkaWFsTGF5b3V0KFBlLGplLGRlKSxVLnk+Z2UmJihnZT1NYXRoLmZsb29yKFUueSkpLHhlPU1hdGguZmxvb3IoVS54K1AuREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTil9dGhpcy50cmFuc2Zvcm0obmV3IEsoRi5XT1JMRF9DRU5URVJfWC1VLngvMixGLldPUkxEX0NFTlRFUl9ZLVUueS8yKSl9LGFlLnJhZGlhbExheW91dD1mdW5jdGlvbihzZSxkZSxYKXt2YXIgZ2U9TWF0aC5tYXgodGhpcy5tYXhEaWFnb25hbEluVHJlZShzZSksUC5ERUZBVUxUX1JBRElBTF9TRVBBUkFUSU9OKTthZS5icmFuY2hSYWRpYWxMYXlvdXQoZGUsbnVsbCwwLDM1OSwwLGdlKTt2YXIgVz1wZS5jYWxjdWxhdGVCb3VuZHMoc2UpLHhlPW5ldyBiZTt4ZS5zZXREZXZpY2VPcmdYKFcuZ2V0TWluWCgpKSx4ZS5zZXREZXZpY2VPcmdZKFcuZ2V0TWluWSgpKSx4ZS5zZXRXb3JsZE9yZ1goWC54KSx4ZS5zZXRXb3JsZE9yZ1koWC55KTtmb3IodmFyIFU9MDtVPHNlLmxlbmd0aDtVKyspe3ZhciBGZT1zZVtVXTtGZS50cmFuc2Zvcm0oeGUpfXZhciBQZT1uZXcgSyhXLmdldE1heFgoKSxXLmdldE1heFkoKSk7cmV0dXJuIHhlLmludmVyc2VUcmFuc2Zvcm1Qb2ludChQZSl9LGFlLmJyYW5jaFJhZGlhbExheW91dD1mdW5jdGlvbihzZSxkZSxYLGdlLFcseGUpe3ZhciBVPShnZS1YKzEpLzI7VTwwJiYoVSs9MTgwKTt2YXIgRmU9KFUrWCklMzYwLFBlPUZlKm9lLlRXT19QSS8zNjAsamU9VypNYXRoLmNvcyhQZSksSWU9VypNYXRoLnNpbihQZSk7c2Uuc2V0Q2VudGVyKGplLEllKTt2YXIgU2U9W107U2U9U2UuY29uY2F0KHNlLmdldEVkZ2VzKCkpO3ZhciBDZT1TZS5sZW5ndGg7ZGUhPW51bGwmJkNlLS07Zm9yKHZhciBrZT0wLEtlPVNlLmxlbmd0aCxGdCxOZT1zZS5nZXRFZGdlc0JldHdlZW4oZGUpO05lLmxlbmd0aD4xOyl7dmFyIGduPU5lWzBdO05lLnNwbGljZSgwLDEpO3ZhciBfdD1TZS5pbmRleE9mKGduKTtfdD49MCYmU2Uuc3BsaWNlKF90LDEpLEtlLS0sQ2UtLX1kZSE9bnVsbD9GdD0oU2UuaW5kZXhPZihOZVswXSkrMSklS2U6RnQ9MDtmb3IodmFyIEV0PU1hdGguYWJzKGdlLVgpL0NlLEd0PUZ0O2tlIT1DZTtHdD0rK0d0JUtlKXt2YXIgbG49U2VbR3RdLmdldE90aGVyRW5kKHNlKTtpZihsbiE9ZGUpe3ZhciB4dD0oWCtrZSpFdCklMzYwLFB0PSh4dCtFdCklMzYwO2FlLmJyYW5jaFJhZGlhbExheW91dChsbixzZSx4dCxQdCxXK3hlLHhlKSxrZSsrfX19LGFlLm1heERpYWdvbmFsSW5UcmVlPWZ1bmN0aW9uKHNlKXtmb3IodmFyIGRlPWllLk1JTl9WQUxVRSxYPTA7WDxzZS5sZW5ndGg7WCsrKXt2YXIgZ2U9c2VbWF0sVz1nZS5nZXREaWFnb25hbCgpO1c+ZGUmJihkZT1XKX1yZXR1cm4gZGV9LGFlLnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gMioodGhpcy5sZXZlbCsxKSp0aGlzLmlkZWFsRWRnZUxlbmd0aH0sYWUucHJvdG90eXBlLmdyb3VwWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgc2U9dGhpcyxkZT17fTt0aGlzLm1lbWJlckdyb3Vwcz17fSx0aGlzLmlkVG9EdW1teU5vZGU9e307Zm9yKHZhciBYPVtdLGdlPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksVz0wO1c8Z2UubGVuZ3RoO1crKyl7dmFyIHhlPWdlW1ddLFU9eGUuZ2V0UGFyZW50KCk7dGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKHhlKT09PTAmJihVLmlkPT1udWxsfHwhdGhpcy5nZXRUb0JlVGlsZWQoVSkpJiZYLnB1c2goeGUpfWZvcih2YXIgVz0wO1c8WC5sZW5ndGg7VysrKXt2YXIgeGU9WFtXXSxGZT14ZS5nZXRQYXJlbnQoKS5pZDt0eXBlb2YgZGVbRmVdPiJ1IiYmKGRlW0ZlXT1bXSksZGVbRmVdPWRlW0ZlXS5jb25jYXQoeGUpfU9iamVjdC5rZXlzKGRlKS5mb3JFYWNoKGZ1bmN0aW9uKFBlKXtpZihkZVtQZV0ubGVuZ3RoPjEpe3ZhciBqZT0iRHVtbXlDb21wb3VuZF8iK1BlO3NlLm1lbWJlckdyb3Vwc1tqZV09ZGVbUGVdO3ZhciBJZT1kZVtQZV1bMF0uZ2V0UGFyZW50KCksU2U9bmV3IF8oc2UuZ3JhcGhNYW5hZ2VyKTtTZS5pZD1qZSxTZS5wYWRkaW5nTGVmdD1JZS5wYWRkaW5nTGVmdHx8MCxTZS5wYWRkaW5nUmlnaHQ9SWUucGFkZGluZ1JpZ2h0fHwwLFNlLnBhZGRpbmdCb3R0b209SWUucGFkZGluZ0JvdHRvbXx8MCxTZS5wYWRkaW5nVG9wPUllLnBhZGRpbmdUb3B8fDAsc2UuaWRUb0R1bW15Tm9kZVtqZV09U2U7dmFyIENlPXNlLmdldEdyYXBoTWFuYWdlcigpLmFkZChzZS5uZXdHcmFwaCgpLFNlKSxrZT1JZS5nZXRDaGlsZCgpO2tlLmFkZChTZSk7Zm9yKHZhciBLZT0wO0tlPGRlW1BlXS5sZW5ndGg7S2UrKyl7dmFyIEZ0PWRlW1BlXVtLZV07a2UucmVtb3ZlKEZ0KSxDZS5hZGQoRnQpfX19KX0sYWUucHJvdG90eXBlLmNsZWFyQ29tcG91bmRzPWZ1bmN0aW9uKCl7dmFyIHNlPXt9LGRlPXt9O3RoaXMucGVyZm9ybURGU09uQ29tcG91bmRzKCk7Zm9yKHZhciBYPTA7WDx0aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoO1grKylkZVt0aGlzLmNvbXBvdW5kT3JkZXJbWF0uaWRdPXRoaXMuY29tcG91bmRPcmRlcltYXSxzZVt0aGlzLmNvbXBvdW5kT3JkZXJbWF0uaWRdPVtdLmNvbmNhdCh0aGlzLmNvbXBvdW5kT3JkZXJbWF0uZ2V0Q2hpbGQoKS5nZXROb2RlcygpKSx0aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUodGhpcy5jb21wb3VuZE9yZGVyW1hdLmdldENoaWxkKCkpLHRoaXMuY29tcG91bmRPcmRlcltYXS5jaGlsZD1udWxsO3RoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXMoKSx0aGlzLnRpbGVDb21wb3VuZE1lbWJlcnMoc2UsZGUpfSxhZS5wcm90b3R5cGUuY2xlYXJaZXJvRGVncmVlTWVtYmVycz1mdW5jdGlvbigpe3ZhciBzZT10aGlzLGRlPXRoaXMudGlsZWRaZXJvRGVncmVlUGFjaz1bXTtPYmplY3Qua2V5cyh0aGlzLm1lbWJlckdyb3VwcykuZm9yRWFjaChmdW5jdGlvbihYKXt2YXIgZ2U9c2UuaWRUb0R1bW15Tm9kZVtYXTtkZVtYXT1zZS50aWxlTm9kZXMoc2UubWVtYmVyR3JvdXBzW1hdLGdlLnBhZGRpbmdMZWZ0K2dlLnBhZGRpbmdSaWdodCksZ2UucmVjdC53aWR0aD1kZVtYXS53aWR0aCxnZS5yZWN0LmhlaWdodD1kZVtYXS5oZWlnaHR9KX0sYWUucHJvdG90eXBlLnJlcG9wdWxhdGVDb21wb3VuZHM9ZnVuY3Rpb24oKXtmb3IodmFyIHNlPXRoaXMuY29tcG91bmRPcmRlci5sZW5ndGgtMTtzZT49MDtzZS0tKXt2YXIgZGU9dGhpcy5jb21wb3VuZE9yZGVyW3NlXSxYPWRlLmlkLGdlPWRlLnBhZGRpbmdMZWZ0LFc9ZGUucGFkZGluZ1RvcDt0aGlzLmFkanVzdExvY2F0aW9ucyh0aGlzLnRpbGVkTWVtYmVyUGFja1tYXSxkZS5yZWN0LngsZGUucmVjdC55LGdlLFcpfX0sYWUucHJvdG90eXBlLnJlcG9wdWxhdGVaZXJvRGVncmVlTWVtYmVycz1mdW5jdGlvbigpe3ZhciBzZT10aGlzLGRlPXRoaXMudGlsZWRaZXJvRGVncmVlUGFjaztPYmplY3Qua2V5cyhkZSkuZm9yRWFjaChmdW5jdGlvbihYKXt2YXIgZ2U9c2UuaWRUb0R1bW15Tm9kZVtYXSxXPWdlLnBhZGRpbmdMZWZ0LHhlPWdlLnBhZGRpbmdUb3A7c2UuYWRqdXN0TG9jYXRpb25zKGRlW1hdLGdlLnJlY3QueCxnZS5yZWN0LnksVyx4ZSl9KX0sYWUucHJvdG90eXBlLmdldFRvQmVUaWxlZD1mdW5jdGlvbihzZSl7dmFyIGRlPXNlLmlkO2lmKHRoaXMudG9CZVRpbGVkW2RlXSE9bnVsbClyZXR1cm4gdGhpcy50b0JlVGlsZWRbZGVdO3ZhciBYPXNlLmdldENoaWxkKCk7aWYoWD09bnVsbClyZXR1cm4gdGhpcy50b0JlVGlsZWRbZGVdPSExLCExO2Zvcih2YXIgZ2U9WC5nZXROb2RlcygpLFc9MDtXPGdlLmxlbmd0aDtXKyspe3ZhciB4ZT1nZVtXXTtpZih0aGlzLmdldE5vZGVEZWdyZWUoeGUpPjApcmV0dXJuIHRoaXMudG9CZVRpbGVkW2RlXT0hMSwhMTtpZih4ZS5nZXRDaGlsZCgpPT1udWxsKXt0aGlzLnRvQmVUaWxlZFt4ZS5pZF09ITE7Y29udGludWV9aWYoIXRoaXMuZ2V0VG9CZVRpbGVkKHhlKSlyZXR1cm4gdGhpcy50b0JlVGlsZWRbZGVdPSExLCExfXJldHVybiB0aGlzLnRvQmVUaWxlZFtkZV09ITAsITB9LGFlLnByb3RvdHlwZS5nZXROb2RlRGVncmVlPWZ1bmN0aW9uKHNlKXtzZS5pZDtmb3IodmFyIGRlPXNlLmdldEVkZ2VzKCksWD0wLGdlPTA7Z2U8ZGUubGVuZ3RoO2dlKyspe3ZhciBXPWRlW2dlXTtXLmdldFNvdXJjZSgpLmlkIT09Vy5nZXRUYXJnZXQoKS5pZCYmKFg9WCsxKX1yZXR1cm4gWH0sYWUucHJvdG90eXBlLmdldE5vZGVEZWdyZWVXaXRoQ2hpbGRyZW49ZnVuY3Rpb24oc2Upe3ZhciBkZT10aGlzLmdldE5vZGVEZWdyZWUoc2UpO2lmKHNlLmdldENoaWxkKCk9PW51bGwpcmV0dXJuIGRlO2Zvcih2YXIgWD1zZS5nZXRDaGlsZCgpLmdldE5vZGVzKCksZ2U9MDtnZTxYLmxlbmd0aDtnZSsrKXt2YXIgVz1YW2dlXTtkZSs9dGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKFcpfXJldHVybiBkZX0sYWUucHJvdG90eXBlLnBlcmZvcm1ERlNPbkNvbXBvdW5kcz1mdW5jdGlvbigpe3RoaXMuY29tcG91bmRPcmRlcj1bXSx0aGlzLmZpbGxDb21wZXhPcmRlckJ5REZTKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpKX0sYWUucHJvdG90eXBlLmZpbGxDb21wZXhPcmRlckJ5REZTPWZ1bmN0aW9uKHNlKXtmb3IodmFyIGRlPTA7ZGU8c2UubGVuZ3RoO2RlKyspe3ZhciBYPXNlW2RlXTtYLmdldENoaWxkKCkhPW51bGwmJnRoaXMuZmlsbENvbXBleE9yZGVyQnlERlMoWC5nZXRDaGlsZCgpLmdldE5vZGVzKCkpLHRoaXMuZ2V0VG9CZVRpbGVkKFgpJiZ0aGlzLmNvbXBvdW5kT3JkZXIucHVzaChYKX19LGFlLnByb3RvdHlwZS5hZGp1c3RMb2NhdGlvbnM9ZnVuY3Rpb24oc2UsZGUsWCxnZSxXKXtkZSs9Z2UsWCs9Vztmb3IodmFyIHhlPWRlLFU9MDtVPHNlLnJvd3MubGVuZ3RoO1UrKyl7dmFyIEZlPXNlLnJvd3NbVV07ZGU9eGU7Zm9yKHZhciBQZT0wLGplPTA7amU8RmUubGVuZ3RoO2plKyspe3ZhciBJZT1GZVtqZV07SWUucmVjdC54PWRlLEllLnJlY3QueT1YLGRlKz1JZS5yZWN0LndpZHRoK3NlLmhvcml6b250YWxQYWRkaW5nLEllLnJlY3QuaGVpZ2h0PlBlJiYoUGU9SWUucmVjdC5oZWlnaHQpfVgrPVBlK3NlLnZlcnRpY2FsUGFkZGluZ319LGFlLnByb3RvdHlwZS50aWxlQ29tcG91bmRNZW1iZXJzPWZ1bmN0aW9uKHNlLGRlKXt2YXIgWD10aGlzO3RoaXMudGlsZWRNZW1iZXJQYWNrPVtdLE9iamVjdC5rZXlzKHNlKS5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2YXIgVz1kZVtnZV07WC50aWxlZE1lbWJlclBhY2tbZ2VdPVgudGlsZU5vZGVzKHNlW2dlXSxXLnBhZGRpbmdMZWZ0K1cucGFkZGluZ1JpZ2h0KSxXLnJlY3Qud2lkdGg9WC50aWxlZE1lbWJlclBhY2tbZ2VdLndpZHRoLFcucmVjdC5oZWlnaHQ9WC50aWxlZE1lbWJlclBhY2tbZ2VdLmhlaWdodH0pfSxhZS5wcm90b3R5cGUudGlsZU5vZGVzPWZ1bmN0aW9uKHNlLGRlKXt2YXIgWD1QLlRJTElOR19QQURESU5HX1ZFUlRJQ0FMLGdlPVAuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTCxXPXtyb3dzOltdLHJvd1dpZHRoOltdLHJvd0hlaWdodDpbXSx3aWR0aDowLGhlaWdodDpkZSx2ZXJ0aWNhbFBhZGRpbmc6WCxob3Jpem9udGFsUGFkZGluZzpnZX07c2Uuc29ydChmdW5jdGlvbihGZSxQZSl7cmV0dXJuIEZlLnJlY3Qud2lkdGgqRmUucmVjdC5oZWlnaHQ+UGUucmVjdC53aWR0aCpQZS5yZWN0LmhlaWdodD8tMTpGZS5yZWN0LndpZHRoKkZlLnJlY3QuaGVpZ2h0PFBlLnJlY3Qud2lkdGgqUGUucmVjdC5oZWlnaHQ/MTowfSk7Zm9yKHZhciB4ZT0wO3hlPHNlLmxlbmd0aDt4ZSsrKXt2YXIgVT1zZVt4ZV07Vy5yb3dzLmxlbmd0aD09MD90aGlzLmluc2VydE5vZGVUb1JvdyhXLFUsMCxkZSk6dGhpcy5jYW5BZGRIb3Jpem9udGFsKFcsVS5yZWN0LndpZHRoLFUucmVjdC5oZWlnaHQpP3RoaXMuaW5zZXJ0Tm9kZVRvUm93KFcsVSx0aGlzLmdldFNob3J0ZXN0Um93SW5kZXgoVyksZGUpOnRoaXMuaW5zZXJ0Tm9kZVRvUm93KFcsVSxXLnJvd3MubGVuZ3RoLGRlKSx0aGlzLnNoaWZ0VG9MYXN0Um93KFcpfXJldHVybiBXfSxhZS5wcm90b3R5cGUuaW5zZXJ0Tm9kZVRvUm93PWZ1bmN0aW9uKHNlLGRlLFgsZ2Upe3ZhciBXPWdlO2lmKFg9PXNlLnJvd3MubGVuZ3RoKXt2YXIgeGU9W107c2Uucm93cy5wdXNoKHhlKSxzZS5yb3dXaWR0aC5wdXNoKFcpLHNlLnJvd0hlaWdodC5wdXNoKDApfXZhciBVPXNlLnJvd1dpZHRoW1hdK2RlLnJlY3Qud2lkdGg7c2Uucm93c1tYXS5sZW5ndGg+MCYmKFUrPXNlLmhvcml6b250YWxQYWRkaW5nKSxzZS5yb3dXaWR0aFtYXT1VLHNlLndpZHRoPFUmJihzZS53aWR0aD1VKTt2YXIgRmU9ZGUucmVjdC5oZWlnaHQ7WD4wJiYoRmUrPXNlLnZlcnRpY2FsUGFkZGluZyk7dmFyIFBlPTA7RmU+c2Uucm93SGVpZ2h0W1hdJiYoUGU9c2Uucm93SGVpZ2h0W1hdLHNlLnJvd0hlaWdodFtYXT1GZSxQZT1zZS5yb3dIZWlnaHRbWF0tUGUpLHNlLmhlaWdodCs9UGUsc2Uucm93c1tYXS5wdXNoKGRlKX0sYWUucHJvdG90eXBlLmdldFNob3J0ZXN0Um93SW5kZXg9ZnVuY3Rpb24oc2Upe2Zvcih2YXIgZGU9LTEsWD1OdW1iZXIuTUFYX1ZBTFVFLGdlPTA7Z2U8c2Uucm93cy5sZW5ndGg7Z2UrKylzZS5yb3dXaWR0aFtnZV08WCYmKGRlPWdlLFg9c2Uucm93V2lkdGhbZ2VdKTtyZXR1cm4gZGV9LGFlLnByb3RvdHlwZS5nZXRMb25nZXN0Um93SW5kZXg9ZnVuY3Rpb24oc2Upe2Zvcih2YXIgZGU9LTEsWD1OdW1iZXIuTUlOX1ZBTFVFLGdlPTA7Z2U8c2Uucm93cy5sZW5ndGg7Z2UrKylzZS5yb3dXaWR0aFtnZV0+WCYmKGRlPWdlLFg9c2Uucm93V2lkdGhbZ2VdKTtyZXR1cm4gZGV9LGFlLnByb3RvdHlwZS5jYW5BZGRIb3Jpem9udGFsPWZ1bmN0aW9uKHNlLGRlLFgpe3ZhciBnZT10aGlzLmdldFNob3J0ZXN0Um93SW5kZXgoc2UpO2lmKGdlPDApcmV0dXJuITA7dmFyIFc9c2Uucm93V2lkdGhbZ2VdO2lmKFcrc2UuaG9yaXpvbnRhbFBhZGRpbmcrZGU8PXNlLndpZHRoKXJldHVybiEwO3ZhciB4ZT0wO3NlLnJvd0hlaWdodFtnZV08WCYmZ2U+MCYmKHhlPVgrc2UudmVydGljYWxQYWRkaW5nLXNlLnJvd0hlaWdodFtnZV0pO3ZhciBVO3NlLndpZHRoLVc+PWRlK3NlLmhvcml6b250YWxQYWRkaW5nP1U9KHNlLmhlaWdodCt4ZSkvKFcrZGUrc2UuaG9yaXpvbnRhbFBhZGRpbmcpOlU9KHNlLmhlaWdodCt4ZSkvc2Uud2lkdGgseGU9WCtzZS52ZXJ0aWNhbFBhZGRpbmc7dmFyIEZlO3JldHVybiBzZS53aWR0aDxkZT9GZT0oc2UuaGVpZ2h0K3hlKS9kZTpGZT0oc2UuaGVpZ2h0K3hlKS9zZS53aWR0aCxGZTwxJiYoRmU9MS9GZSksVTwxJiYoVT0xL1UpLFU8RmV9LGFlLnByb3RvdHlwZS5zaGlmdFRvTGFzdFJvdz1mdW5jdGlvbihzZSl7dmFyIGRlPXRoaXMuZ2V0TG9uZ2VzdFJvd0luZGV4KHNlKSxYPXNlLnJvd1dpZHRoLmxlbmd0aC0xLGdlPXNlLnJvd3NbZGVdLFc9Z2VbZ2UubGVuZ3RoLTFdLHhlPVcud2lkdGgrc2UuaG9yaXpvbnRhbFBhZGRpbmc7aWYoc2Uud2lkdGgtc2Uucm93V2lkdGhbWF0+eGUmJmRlIT1YKXtnZS5zcGxpY2UoLTEsMSksc2Uucm93c1tYXS5wdXNoKFcpLHNlLnJvd1dpZHRoW2RlXT1zZS5yb3dXaWR0aFtkZV0teGUsc2Uucm93V2lkdGhbWF09c2Uucm93V2lkdGhbWF0reGUsc2Uud2lkdGg9c2Uucm93V2lkdGhbaW5zdGFuY2UuZ2V0TG9uZ2VzdFJvd0luZGV4KHNlKV07Zm9yKHZhciBVPU51bWJlci5NSU5fVkFMVUUsRmU9MDtGZTxnZS5sZW5ndGg7RmUrKylnZVtGZV0uaGVpZ2h0PlUmJihVPWdlW0ZlXS5oZWlnaHQpO2RlPjAmJihVKz1zZS52ZXJ0aWNhbFBhZGRpbmcpO3ZhciBQZT1zZS5yb3dIZWlnaHRbZGVdK3NlLnJvd0hlaWdodFtYXTtzZS5yb3dIZWlnaHRbZGVdPVUsc2Uucm93SGVpZ2h0W1hdPFcuaGVpZ2h0K3NlLnZlcnRpY2FsUGFkZGluZyYmKHNlLnJvd0hlaWdodFtYXT1XLmhlaWdodCtzZS52ZXJ0aWNhbFBhZGRpbmcpO3ZhciBqZT1zZS5yb3dIZWlnaHRbZGVdK3NlLnJvd0hlaWdodFtYXTtzZS5oZWlnaHQrPWplLVBlLHRoaXMuc2hpZnRUb0xhc3RSb3coc2UpfX0sYWUucHJvdG90eXBlLnRpbGluZ1ByZUxheW91dD1mdW5jdGlvbigpe1AuVElMRSYmKHRoaXMuZ3JvdXBaZXJvRGVncmVlTWVtYmVycygpLHRoaXMuY2xlYXJDb21wb3VuZHMoKSx0aGlzLmNsZWFyWmVyb0RlZ3JlZU1lbWJlcnMoKSl9LGFlLnByb3RvdHlwZS50aWxpbmdQb3N0TGF5b3V0PWZ1bmN0aW9uKCl7UC5USUxFJiYodGhpcy5yZXBvcHVsYXRlWmVyb0RlZ3JlZU1lbWJlcnMoKSx0aGlzLnJlcG9wdWxhdGVDb21wb3VuZHMoKSl9LGFlLnByb3RvdHlwZS5yZWR1Y2VUcmVlcz1mdW5jdGlvbigpe2Zvcih2YXIgc2U9W10sZGU9ITAsWDtkZTspe3ZhciBnZT10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLFc9W107ZGU9ITE7Zm9yKHZhciB4ZT0wO3hlPGdlLmxlbmd0aDt4ZSsrKVg9Z2VbeGVdLFguZ2V0RWRnZXMoKS5sZW5ndGg9PTEmJiFYLmdldEVkZ2VzKClbMF0uaXNJbnRlckdyYXBoJiZYLmdldENoaWxkKCk9PW51bGwmJihXLnB1c2goW1gsWC5nZXRFZGdlcygpWzBdLFguZ2V0T3duZXIoKV0pLGRlPSEwKTtpZihkZT09ITApe2Zvcih2YXIgVT1bXSxGZT0wO0ZlPFcubGVuZ3RoO0ZlKyspV1tGZV1bMF0uZ2V0RWRnZXMoKS5sZW5ndGg9PTEmJihVLnB1c2goV1tGZV0pLFdbRmVdWzBdLmdldE93bmVyKCkucmVtb3ZlKFdbRmVdWzBdKSk7c2UucHVzaChVKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpfX10aGlzLnBydW5lZE5vZGVzQWxsPXNlfSxhZS5wcm90b3R5cGUuZ3Jvd1RyZWU9ZnVuY3Rpb24oc2Upe2Zvcih2YXIgZGU9c2UubGVuZ3RoLFg9c2VbZGUtMV0sZ2UsVz0wO1c8WC5sZW5ndGg7VysrKWdlPVhbV10sdGhpcy5maW5kUGxhY2Vmb3JQcnVuZWROb2RlKGdlKSxnZVsyXS5hZGQoZ2VbMF0pLGdlWzJdLmFkZChnZVsxXSxnZVsxXS5zb3VyY2UsZ2VbMV0udGFyZ2V0KTtzZS5zcGxpY2Uoc2UubGVuZ3RoLTEsMSksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKX0sYWUucHJvdG90eXBlLmZpbmRQbGFjZWZvclBydW5lZE5vZGU9ZnVuY3Rpb24oc2Upe3ZhciBkZSxYLGdlPXNlWzBdO2dlPT1zZVsxXS5zb3VyY2U/WD1zZVsxXS50YXJnZXQ6WD1zZVsxXS5zb3VyY2U7dmFyIFc9WC5zdGFydFgseGU9WC5maW5pc2hYLFU9WC5zdGFydFksRmU9WC5maW5pc2hZLFBlPTAsamU9MCxJZT0wLFNlPTAsQ2U9W1BlLEllLGplLFNlXTtpZihVPjApZm9yKHZhciBrZT1XO2tlPD14ZTtrZSsrKUNlWzBdKz10aGlzLmdyaWRba2VdW1UtMV0ubGVuZ3RoK3RoaXMuZ3JpZFtrZV1bVV0ubGVuZ3RoLTE7aWYoeGU8dGhpcy5ncmlkLmxlbmd0aC0xKWZvcih2YXIga2U9VTtrZTw9RmU7a2UrKylDZVsxXSs9dGhpcy5ncmlkW3hlKzFdW2tlXS5sZW5ndGgrdGhpcy5ncmlkW3hlXVtrZV0ubGVuZ3RoLTE7aWYoRmU8dGhpcy5ncmlkWzBdLmxlbmd0aC0xKWZvcih2YXIga2U9VztrZTw9eGU7a2UrKylDZVsyXSs9dGhpcy5ncmlkW2tlXVtGZSsxXS5sZW5ndGgrdGhpcy5ncmlkW2tlXVtGZV0ubGVuZ3RoLTE7aWYoVz4wKWZvcih2YXIga2U9VTtrZTw9RmU7a2UrKylDZVszXSs9dGhpcy5ncmlkW1ctMV1ba2VdLmxlbmd0aCt0aGlzLmdyaWRbV11ba2VdLmxlbmd0aC0xO2Zvcih2YXIgS2U9aWUuTUFYX1ZBTFVFLEZ0LE5lLGduPTA7Z248Q2UubGVuZ3RoO2duKyspQ2VbZ25dPEtlPyhLZT1DZVtnbl0sRnQ9MSxOZT1nbik6Q2VbZ25dPT1LZSYmRnQrKztpZihGdD09MyYmS2U9PTApQ2VbMF09PTAmJkNlWzFdPT0wJiZDZVsyXT09MD9kZT0xOkNlWzBdPT0wJiZDZVsxXT09MCYmQ2VbM109PTA/ZGU9MDpDZVswXT09MCYmQ2VbMl09PTAmJkNlWzNdPT0wP2RlPTM6Q2VbMV09PTAmJkNlWzJdPT0wJiZDZVszXT09MCYmKGRlPTIpO2Vsc2UgaWYoRnQ9PTImJktlPT0wKXt2YXIgX3Q9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjIpO0NlWzBdPT0wJiZDZVsxXT09MD9fdD09MD9kZT0wOmRlPTE6Q2VbMF09PTAmJkNlWzJdPT0wP190PT0wP2RlPTA6ZGU9MjpDZVswXT09MCYmQ2VbM109PTA/X3Q9PTA/ZGU9MDpkZT0zOkNlWzFdPT0wJiZDZVsyXT09MD9fdD09MD9kZT0xOmRlPTI6Q2VbMV09PTAmJkNlWzNdPT0wP190PT0wP2RlPTE6ZGU9MzpfdD09MD9kZT0yOmRlPTN9ZWxzZSBpZihGdD09NCYmS2U9PTApe3ZhciBfdD1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqNCk7ZGU9X3R9ZWxzZSBkZT1OZTtkZT09MD9nZS5zZXRDZW50ZXIoWC5nZXRDZW50ZXJYKCksWC5nZXRDZW50ZXJZKCktWC5nZXRIZWlnaHQoKS8yLVIuREVGQVVMVF9FREdFX0xFTkdUSC1nZS5nZXRIZWlnaHQoKS8yKTpkZT09MT9nZS5zZXRDZW50ZXIoWC5nZXRDZW50ZXJYKCkrWC5nZXRXaWR0aCgpLzIrUi5ERUZBVUxUX0VER0VfTEVOR1RIK2dlLmdldFdpZHRoKCkvMixYLmdldENlbnRlclkoKSk6ZGU9PTI/Z2Uuc2V0Q2VudGVyKFguZ2V0Q2VudGVyWCgpLFguZ2V0Q2VudGVyWSgpK1guZ2V0SGVpZ2h0KCkvMitSLkRFRkFVTFRfRURHRV9MRU5HVEgrZ2UuZ2V0SGVpZ2h0KCkvMik6Z2Uuc2V0Q2VudGVyKFguZ2V0Q2VudGVyWCgpLVguZ2V0V2lkdGgoKS8yLVIuREVGQVVMVF9FREdFX0xFTkdUSC1nZS5nZXRXaWR0aCgpLzIsWC5nZXRDZW50ZXJZKCkpfSxkLmV4cG9ydHM9YWV9LGZ1bmN0aW9uKGQscCx2KXt2YXIgYj17fTtiLmxheW91dEJhc2U9digwKSxiLkNvU0VDb25zdGFudHM9digxKSxiLkNvU0VFZGdlPXYoMiksYi5Db1NFR3JhcGg9digzKSxiLkNvU0VHcmFwaE1hbmFnZXI9dig0KSxiLkNvU0VMYXlvdXQ9dig2KSxiLkNvU0VOb2RlPXYoNSksZC5leHBvcnRzPWJ9XSl9KX0obndlKSksbndlLmV4cG9ydHN9KGZ1bmN0aW9uKGkscyl7KGZ1bmN0aW9uKGQscCl7aS5leHBvcnRzPXAoZG9uKCkpfSkoQWcsZnVuY3Rpb24odSl7cmV0dXJuIGZ1bmN0aW9uKGQpe3ZhciBwPXt9O2Z1bmN0aW9uIHYoYil7aWYocFtiXSlyZXR1cm4gcFtiXS5leHBvcnRzO3ZhciB5PXBbYl09e2k6YixsOiExLGV4cG9ydHM6e319O3JldHVybiBkW2JdLmNhbGwoeS5leHBvcnRzLHkseS5leHBvcnRzLHYpLHkubD0hMCx5LmV4cG9ydHN9cmV0dXJuIHYubT1kLHYuYz1wLHYuaT1mdW5jdGlvbihiKXtyZXR1cm4gYn0sdi5kPWZ1bmN0aW9uKGIseSxUKXt2Lm8oYix5KXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGIseSx7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OlR9KX0sdi5uPWZ1bmN0aW9uKGIpe3ZhciB5PWImJmIuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBiLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGJ9O3JldHVybiB2LmQoeSwiYSIseSkseX0sdi5vPWZ1bmN0aW9uKGIseSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLHkpfSx2LnA9IiIsdih2LnM9MSl9KFtmdW5jdGlvbihkLHApe2QuZXhwb3J0cz11fSxmdW5jdGlvbihkLHAsdil7dmFyIGI9digwKS5sYXlvdXRCYXNlLkxheW91dENvbnN0YW50cyx5PXYoMCkubGF5b3V0QmFzZS5GRExheW91dENvbnN0YW50cyxUPXYoMCkuQ29TRUNvbnN0YW50cyxfPXYoMCkuQ29TRUxheW91dCxBPXYoMCkuQ29TRU5vZGUsUD12KDApLmxheW91dEJhc2UuUG9pbnRELFI9digwKS5sYXlvdXRCYXNlLkRpbWVuc2lvbkQsRj17cmVhZHk6ZnVuY3Rpb24oKXt9LHN0b3A6ZnVuY3Rpb24oKXt9LHF1YWxpdHk6ImRlZmF1bHQiLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxyZWZyZXNoOjMwLGZpdDohMCxwYWRkaW5nOjEwLHJhbmRvbWl6ZTohMCxub2RlUmVwdWxzaW9uOjQ1MDAsaWRlYWxFZGdlTGVuZ3RoOjUwLGVkZ2VFbGFzdGljaXR5Oi40NSxuZXN0aW5nRmFjdG9yOi4xLGdyYXZpdHk6LjI1LG51bUl0ZXI6MjUwMCx0aWxlOiEwLGFuaW1hdGU6ImVuZCIsYW5pbWF0aW9uRHVyYXRpb246NTAwLHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDoxMCx0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbDoxMCxncmF2aXR5UmFuZ2VDb21wb3VuZDoxLjUsZ3Jhdml0eUNvbXBvdW5kOjEsZ3Jhdml0eVJhbmdlOjMuOCxpbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbDouNX07ZnVuY3Rpb24gaihvZSxwZSl7dmFyIGJlPXt9O2Zvcih2YXIgYWUgaW4gb2UpYmVbYWVdPW9lW2FlXTtmb3IodmFyIGFlIGluIHBlKWJlW2FlXT1wZVthZV07cmV0dXJuIGJlfWZ1bmN0aW9uIEsob2Upe3RoaXMub3B0aW9ucz1qKEYsb2UpLGVlKHRoaXMub3B0aW9ucyl9dmFyIGVlPWZ1bmN0aW9uKHBlKXtwZS5ub2RlUmVwdWxzaW9uIT1udWxsJiYoVC5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSD15LkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RIPXBlLm5vZGVSZXB1bHNpb24pLHBlLmlkZWFsRWRnZUxlbmd0aCE9bnVsbCYmKFQuREVGQVVMVF9FREdFX0xFTkdUSD15LkRFRkFVTFRfRURHRV9MRU5HVEg9cGUuaWRlYWxFZGdlTGVuZ3RoKSxwZS5lZGdlRWxhc3RpY2l0eSE9bnVsbCYmKFQuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEg9eS5ERUZBVUxUX1NQUklOR19TVFJFTkdUSD1wZS5lZGdlRWxhc3RpY2l0eSkscGUubmVzdGluZ0ZhY3RvciE9bnVsbCYmKFQuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUj15LlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9cGUubmVzdGluZ0ZhY3RvcikscGUuZ3Jhdml0eSE9bnVsbCYmKFQuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIPXkuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIPXBlLmdyYXZpdHkpLHBlLm51bUl0ZXIhPW51bGwmJihULk1BWF9JVEVSQVRJT05TPXkuTUFYX0lURVJBVElPTlM9cGUubnVtSXRlcikscGUuZ3Jhdml0eVJhbmdlIT1udWxsJiYoVC5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SPXkuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj1wZS5ncmF2aXR5UmFuZ2UpLHBlLmdyYXZpdHlDb21wb3VuZCE9bnVsbCYmKFQuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIPXkuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIPXBlLmdyYXZpdHlDb21wb3VuZCkscGUuZ3Jhdml0eVJhbmdlQ29tcG91bmQhPW51bGwmJihULkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1I9eS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPXBlLmdyYXZpdHlSYW5nZUNvbXBvdW5kKSxwZS5pbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbCE9bnVsbCYmKFQuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTD15LkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUw9cGUuaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWwpLHBlLnF1YWxpdHk9PSJkcmFmdCI/Yi5RVUFMSVRZPTA6cGUucXVhbGl0eT09InByb29mIj9iLlFVQUxJVFk9MjpiLlFVQUxJVFk9MSxULk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz15Lk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1iLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1wZS5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMsVC5ERUZBVUxUX0lOQ1JFTUVOVEFMPXkuREVGQVVMVF9JTkNSRU1FTlRBTD1iLkRFRkFVTFRfSU5DUkVNRU5UQUw9IXBlLnJhbmRvbWl6ZSxULkFOSU1BVEU9eS5BTklNQVRFPWIuQU5JTUFURT1wZS5hbmltYXRlLFQuVElMRT1wZS50aWxlLFQuVElMSU5HX1BBRERJTkdfVkVSVElDQUw9dHlwZW9mIHBlLnRpbGluZ1BhZGRpbmdWZXJ0aWNhbD09ImZ1bmN0aW9uIj9wZS50aWxpbmdQYWRkaW5nVmVydGljYWwuY2FsbCgpOnBlLnRpbGluZ1BhZGRpbmdWZXJ0aWNhbCxULlRJTElOR19QQURESU5HX0hPUklaT05UQUw9dHlwZW9mIHBlLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsPT0iZnVuY3Rpb24iP3BlLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsLmNhbGwoKTpwZS50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbH07Sy5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIG9lLHBlLGJlPXRoaXMub3B0aW9uczt0aGlzLmlkVG9MTm9kZT17fTt2YXIgYWU9dGhpcy5sYXlvdXQ9bmV3IF8sbmU9dGhpcztuZS5zdG9wcGVkPSExLHRoaXMuY3k9dGhpcy5vcHRpb25zLmN5LHRoaXMuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0c3RhcnQiLGxheW91dDp0aGlzfSk7dmFyIHNlPWFlLm5ld0dyYXBoTWFuYWdlcigpO3RoaXMuZ209c2U7dmFyIGRlPXRoaXMub3B0aW9ucy5lbGVzLm5vZGVzKCksWD10aGlzLm9wdGlvbnMuZWxlcy5lZGdlcygpO3RoaXMucm9vdD1zZS5hZGRSb290KCksdGhpcy5wcm9jZXNzQ2hpbGRyZW5MaXN0KHRoaXMucm9vdCx0aGlzLmdldFRvcE1vc3ROb2RlcyhkZSksYWUpO2Zvcih2YXIgZ2U9MDtnZTxYLmxlbmd0aDtnZSsrKXt2YXIgVz1YW2dlXSx4ZT10aGlzLmlkVG9MTm9kZVtXLmRhdGEoInNvdXJjZSIpXSxVPXRoaXMuaWRUb0xOb2RlW1cuZGF0YSgidGFyZ2V0IildO2lmKHhlIT09VSYmeGUuZ2V0RWRnZXNCZXR3ZWVuKFUpLmxlbmd0aD09MCl7dmFyIEZlPXNlLmFkZChhZS5uZXdFZGdlKCkseGUsVSk7RmUuaWQ9Vy5pZCgpfX12YXIgUGU9ZnVuY3Rpb24oU2UsQ2Upe3R5cGVvZiBTZT09Im51bWJlciImJihTZT1DZSk7dmFyIGtlPVNlLmRhdGEoImlkIiksS2U9bmUuaWRUb0xOb2RlW2tlXTtyZXR1cm57eDpLZS5nZXRSZWN0KCkuZ2V0Q2VudGVyWCgpLHk6S2UuZ2V0UmVjdCgpLmdldENlbnRlclkoKX19LGplPWZ1bmN0aW9uIEllKCl7Zm9yKHZhciBTZT1mdW5jdGlvbigpe2JlLmZpdCYmYmUuY3kuZml0KGJlLmVsZXMsYmUucGFkZGluZyksb2V8fChvZT0hMCxuZS5jeS5vbmUoImxheW91dHJlYWR5IixiZS5yZWFkeSksbmUuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0cmVhZHkiLGxheW91dDpuZX0pKX0sQ2U9bmUub3B0aW9ucy5yZWZyZXNoLGtlLEtlPTA7S2U8Q2UmJiFrZTtLZSsrKWtlPW5lLnN0b3BwZWR8fG5lLmxheW91dC50aWNrKCk7aWYoa2Upe2FlLmNoZWNrTGF5b3V0U3VjY2VzcygpJiYhYWUuaXNTdWJMYXlvdXQmJmFlLmRvUG9zdExheW91dCgpLGFlLnRpbGluZ1Bvc3RMYXlvdXQmJmFlLnRpbGluZ1Bvc3RMYXlvdXQoKSxhZS5pc0xheW91dEZpbmlzaGVkPSEwLG5lLm9wdGlvbnMuZWxlcy5ub2RlcygpLnBvc2l0aW9ucyhQZSksU2UoKSxuZS5jeS5vbmUoImxheW91dHN0b3AiLG5lLm9wdGlvbnMuc3RvcCksbmUuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0Om5lfSkscGUmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHBlKSxvZT0hMTtyZXR1cm59dmFyIEZ0PW5lLmxheW91dC5nZXRQb3NpdGlvbnNEYXRhKCk7YmUuZWxlcy5ub2RlcygpLnBvc2l0aW9ucyhmdW5jdGlvbihOZSxnbil7aWYodHlwZW9mIE5lPT0ibnVtYmVyIiYmKE5lPWduKSwhTmUuaXNQYXJlbnQoKSl7Zm9yKHZhciBfdD1OZS5pZCgpLEV0PUZ0W190XSxHdD1OZTtFdD09bnVsbCYmKEV0PUZ0W0d0LmRhdGEoInBhcmVudCIpXXx8RnRbIkR1bW15Q29tcG91bmRfIitHdC5kYXRhKCJwYXJlbnQiKV0sRnRbX3RdPUV0LEd0PUd0LnBhcmVudCgpWzBdLEd0IT1udWxsKTspO3JldHVybiBFdCE9bnVsbD97eDpFdC54LHk6RXQueX06e3g6TmUucG9zaXRpb24oIngiKSx5Ok5lLnBvc2l0aW9uKCJ5Iil9fX0pLFNlKCkscGU9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEllKX07cmV0dXJuIGFlLmFkZExpc3RlbmVyKCJsYXlvdXRzdGFydGVkIixmdW5jdGlvbigpe25lLm9wdGlvbnMuYW5pbWF0ZT09PSJkdXJpbmciJiYocGU9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGplKSl9KSxhZS5ydW5MYXlvdXQoKSx0aGlzLm9wdGlvbnMuYW5pbWF0ZSE9PSJkdXJpbmciJiYobmUub3B0aW9ucy5lbGVzLm5vZGVzKCkubm90KCI6cGFyZW50IikubGF5b3V0UG9zaXRpb25zKG5lLG5lLm9wdGlvbnMsUGUpLG9lPSExKSx0aGlzfSxLLnByb3RvdHlwZS5nZXRUb3BNb3N0Tm9kZXM9ZnVuY3Rpb24ob2Upe2Zvcih2YXIgcGU9e30sYmU9MDtiZTxvZS5sZW5ndGg7YmUrKylwZVtvZVtiZV0uaWQoKV09ITA7dmFyIGFlPW9lLmZpbHRlcihmdW5jdGlvbihuZSxzZSl7dHlwZW9mIG5lPT0ibnVtYmVyIiYmKG5lPXNlKTtmb3IodmFyIGRlPW5lLnBhcmVudCgpWzBdO2RlIT1udWxsOyl7aWYocGVbZGUuaWQoKV0pcmV0dXJuITE7ZGU9ZGUucGFyZW50KClbMF19cmV0dXJuITB9KTtyZXR1cm4gYWV9LEsucHJvdG90eXBlLnByb2Nlc3NDaGlsZHJlbkxpc3Q9ZnVuY3Rpb24ob2UscGUsYmUpe2Zvcih2YXIgYWU9cGUubGVuZ3RoLG5lPTA7bmU8YWU7bmUrKyl7dmFyIHNlPXBlW25lXSxkZT1zZS5jaGlsZHJlbigpLFgsZ2U9c2UubGF5b3V0RGltZW5zaW9ucyh7bm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOnRoaXMub3B0aW9ucy5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHN9KTtpZihzZS5vdXRlcldpZHRoKCkhPW51bGwmJnNlLm91dGVySGVpZ2h0KCkhPW51bGw/WD1vZS5hZGQobmV3IEEoYmUuZ3JhcGhNYW5hZ2VyLG5ldyBQKHNlLnBvc2l0aW9uKCJ4IiktZ2Uudy8yLHNlLnBvc2l0aW9uKCJ5IiktZ2UuaC8yKSxuZXcgUihwYXJzZUZsb2F0KGdlLncpLHBhcnNlRmxvYXQoZ2UuaCkpKSk6WD1vZS5hZGQobmV3IEEodGhpcy5ncmFwaE1hbmFnZXIpKSxYLmlkPXNlLmRhdGEoImlkIiksWC5wYWRkaW5nTGVmdD1wYXJzZUludChzZS5jc3MoInBhZGRpbmciKSksWC5wYWRkaW5nVG9wPXBhcnNlSW50KHNlLmNzcygicGFkZGluZyIpKSxYLnBhZGRpbmdSaWdodD1wYXJzZUludChzZS5jc3MoInBhZGRpbmciKSksWC5wYWRkaW5nQm90dG9tPXBhcnNlSW50KHNlLmNzcygicGFkZGluZyIpKSx0aGlzLm9wdGlvbnMubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzJiZzZS5pc1BhcmVudCgpKXt2YXIgVz1zZS5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczohMCxpbmNsdWRlTm9kZXM6ITF9KS53LHhlPXNlLmJvdW5kaW5nQm94KHtpbmNsdWRlTGFiZWxzOiEwLGluY2x1ZGVOb2RlczohMX0pLmgsVT1zZS5jc3MoInRleHQtaGFsaWduIik7WC5sYWJlbFdpZHRoPVcsWC5sYWJlbEhlaWdodD14ZSxYLmxhYmVsUG9zPVV9aWYodGhpcy5pZFRvTE5vZGVbc2UuZGF0YSgiaWQiKV09WCxpc05hTihYLnJlY3QueCkmJihYLnJlY3QueD0wKSxpc05hTihYLnJlY3QueSkmJihYLnJlY3QueT0wKSxkZSE9bnVsbCYmZGUubGVuZ3RoPjApe3ZhciBGZTtGZT1iZS5nZXRHcmFwaE1hbmFnZXIoKS5hZGQoYmUubmV3R3JhcGgoKSxYKSx0aGlzLnByb2Nlc3NDaGlsZHJlbkxpc3QoRmUsZGUsYmUpfX19LEsucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdG9wcGVkPSEwLHRoaXN9O3ZhciBpZT1mdW5jdGlvbihwZSl7cGUoImxheW91dCIsImNvc2UtYmlsa2VudCIsSyl9O3R5cGVvZiBjeXRvc2NhcGU8InUiJiZpZShjeXRvc2NhcGUpLGQuZXhwb3J0cz1pZX1dKX0pfSkoZFdlKTt2YXIgZ29uPWRXZS5leHBvcnRzO2NvbnN0IHBvbj1oQyhnb24pLGJvbj0xMixtb249ZnVuY3Rpb24oaSxzLHUsZCl7cy5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsIm5vZGUtIit1LmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIitpLnR5cGUyU3RyKHUudHlwZSkpLmF0dHIoImQiLGBNMCAke3UuaGVpZ2h0LTV9IHYkey11LmhlaWdodCsyKjV9IHEwLC01IDUsLTUgaCR7dS53aWR0aC0yKjV9IHE1LDAgNSw1IHYke3UuaGVpZ2h0LTV9IEgwIFpgKSxzLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwibm9kZS1saW5lLSIrZCkuYXR0cigieDEiLDApLmF0dHIoInkxIix1LmhlaWdodCkuYXR0cigieDIiLHUud2lkdGgpLmF0dHIoInkyIix1LmhlaWdodCl9LHZvbj1mdW5jdGlvbihpLHMsdSl7cy5hcHBlbmQoInJlY3QiKS5hdHRyKCJpZCIsIm5vZGUtIit1LmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIitpLnR5cGUyU3RyKHUudHlwZSkpLmF0dHIoImhlaWdodCIsdS5oZWlnaHQpLmF0dHIoIndpZHRoIix1LndpZHRoKX0sd29uPWZ1bmN0aW9uKGkscyx1KXtjb25zdCBkPXUud2lkdGgscD11LmhlaWdodCx2PS4xNSpkLGI9LjI1KmQseT0uMzUqZCxUPS4yKmQ7cy5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsIm5vZGUtIit1LmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIitpLnR5cGUyU3RyKHUudHlwZSkpLmF0dHIoImQiLGBNMCAwIGEke3Z9LCR7dn0gMCAwLDEgJHtkKi4yNX0sJHstMSpkKi4xfQogICAgICBhJHt5fSwke3l9IDEgMCwxICR7ZCouNH0sJHstMSpkKi4xfQogICAgICBhJHtifSwke2J9IDEgMCwxICR7ZCouMzV9LCR7MSpkKi4yfQoKICAgICAgYSR7dn0sJHt2fSAxIDAsMSAke2QqLjE1fSwkezEqcCouMzV9CiAgICAgIGEke1R9LCR7VH0gMSAwLDEgJHstMSpkKi4xNX0sJHsxKnAqLjY1fQoKICAgICAgYSR7Yn0sJHt2fSAxIDAsMSAkey0xKmQqLjI1fSwke2QqLjE1fQogICAgICBhJHt5fSwke3l9IDEgMCwxICR7LTEqZCouNX0sMAogICAgICBhJHt2fSwke3Z9IDEgMCwxICR7LTEqZCouMjV9LCR7LTEqZCouMTV9CgogICAgICBhJHt2fSwke3Z9IDEgMCwxICR7LTEqZCouMX0sJHstMSpwKi4zNX0KICAgICAgYSR7VH0sJHtUfSAxIDAsMSAke2QqLjF9LCR7LTEqcCouNjV9CgogICAgSDAgVjAgWmApfSx5b249ZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9dS53aWR0aCxwPXUuaGVpZ2h0LHY9LjE1KmQ7cy5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsIm5vZGUtIit1LmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIitpLnR5cGUyU3RyKHUudHlwZSkpLmF0dHIoImQiLGBNMCAwIGEke3Z9LCR7dn0gMSAwLDAgJHtkKi4yNX0sJHstMSpwKi4xfQogICAgICBhJHt2fSwke3Z9IDEgMCwwICR7ZCouMjV9LDAKICAgICAgYSR7dn0sJHt2fSAxIDAsMCAke2QqLjI1fSwwCiAgICAgIGEke3Z9LCR7dn0gMSAwLDAgJHtkKi4yNX0sJHsxKnAqLjF9CgogICAgICBhJHt2fSwke3Z9IDEgMCwwICR7ZCouMTV9LCR7MSpwKi4zM30KICAgICAgYSR7diouOH0sJHt2Ki44fSAxIDAsMCAwLCR7MSpwKi4zNH0KICAgICAgYSR7dn0sJHt2fSAxIDAsMCAkey0xKmQqLjE1fSwkezEqcCouMzN9CgogICAgICBhJHt2fSwke3Z9IDEgMCwwICR7LTEqZCouMjV9LCR7cCouMTV9CiAgICAgIGEke3Z9LCR7dn0gMSAwLDAgJHstMSpkKi4yNX0sMAogICAgICBhJHt2fSwke3Z9IDEgMCwwICR7LTEqZCouMjV9LDAKICAgICAgYSR7dn0sJHt2fSAxIDAsMCAkey0xKmQqLjI1fSwkey0xKnAqLjE1fQoKICAgICAgYSR7dn0sJHt2fSAxIDAsMCAkey0xKmQqLjF9LCR7LTEqcCouMzN9CiAgICAgIGEke3YqLjh9LCR7diouOH0gMSAwLDAgMCwkey0xKnAqLjM0fQogICAgICBhJHt2fSwke3Z9IDEgMCwwICR7ZCouMX0sJHstMSpwKi4zM30KCiAgICBIMCBWMCBaYCl9LHhvbj1mdW5jdGlvbihpLHMsdSl7cy5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImlkIiwibm9kZS0iK3UuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK2kudHlwZTJTdHIodS50eXBlKSkuYXR0cigiciIsdS53aWR0aC8yKX07ZnVuY3Rpb24ga29uKGkscyx1LGQscCl7cmV0dXJuIGkuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixkLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdi54KyIsIit2Lnl9KS5qb2luKCIgIikpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhwLndpZHRoLXMpLzIrIiwgIit1KyIpIil9Y29uc3QgRW9uPWZ1bmN0aW9uKGkscyx1KXtjb25zdCBkPXUuaGVpZ2h0LHY9ZC80LGI9dS53aWR0aC11LnBhZGRpbmcrMip2LHk9W3t4OnYseTowfSx7eDpiLXYseTowfSx7eDpiLHk6LWQvMn0se3g6Yi12LHk6LWR9LHt4OnYseTotZH0se3g6MCx5Oi1kLzJ9XTtrb24ocyxiLGQseSx1KX0sVG9uPWZ1bmN0aW9uKGkscyx1KXtzLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIiwibm9kZS0iK3UuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK2kudHlwZTJTdHIodS50eXBlKSkuYXR0cigiaGVpZ2h0Iix1LmhlaWdodCkuYXR0cigicngiLHUucGFkZGluZykuYXR0cigicnkiLHUucGFkZGluZykuYXR0cigid2lkdGgiLHUud2lkdGgpfSxDb249ZnVuY3Rpb24oaSxzLHUsZCxwKXtjb25zdCB2PXAuaHRtbExhYmVscyxiPWQlKGJvbi0xKSx5PXMuYXBwZW5kKCJnIik7dS5zZWN0aW9uPWI7bGV0IFQ9InNlY3Rpb24tIitiO2I8MCYmKFQrPSIgc2VjdGlvbi1yb290IikseS5hdHRyKCJjbGFzcyIsKHUuY2xhc3M/dS5jbGFzcysiICI6IiIpKyJtaW5kbWFwLW5vZGUgIitUKTtjb25zdCBfPXkuYXBwZW5kKCJnIiksQT15LmFwcGVuZCgiZyIpLFA9dS5kZXNjci5yZXBsYWNlKC8oPGJyXC8qPikvZyxgCmApO0pRKEEsUCx7dXNlSHRtbExhYmVsczp2LHdpZHRoOnUud2lkdGgsY2xhc3NlczoibWluZG1hcC1ub2RlLWxhYmVsIn0pLHZ8fEEuYXR0cigiZHkiLCIxZW0iKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIik7Y29uc3QgUj1BLm5vZGUoKS5nZXRCQm94KCksW0ZdPU5DKHAuZm9udFNpemUpO2lmKHUuaGVpZ2h0PVIuaGVpZ2h0K0YqMS4xKi41K3UucGFkZGluZyx1LndpZHRoPVIud2lkdGgrMip1LnBhZGRpbmcsdS5pY29uKWlmKHUudHlwZT09PWkubm9kZVR5cGUuQ0lSQ0xFKXUuaGVpZ2h0Kz01MCx1LndpZHRoKz01MCx5LmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoImhlaWdodCIsIjUwcHgiKS5hdHRyKCJ3aWR0aCIsdS53aWR0aCkuYXR0cigic3R5bGUiLCJ0ZXh0LWFsaWduOiBjZW50ZXI7IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImljb24tY29udGFpbmVyIikuYXBwZW5kKCJpIikuYXR0cigiY2xhc3MiLCJub2RlLWljb24tIitiKyIgIit1Lmljb24pLEEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdS53aWR0aC8yKyIsICIrKHUuaGVpZ2h0LzItMS41KnUucGFkZGluZykrIikiKTtlbHNle3Uud2lkdGgrPTUwO2NvbnN0IGo9dS5oZWlnaHQ7dS5oZWlnaHQ9TWF0aC5tYXgoaiw2MCk7Y29uc3QgSz1NYXRoLmFicyh1LmhlaWdodC1qKTt5LmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIndpZHRoIiwiNjBweCIpLmF0dHIoImhlaWdodCIsdS5oZWlnaHQpLmF0dHIoInN0eWxlIiwidGV4dC1hbGlnbjogY2VudGVyO21hcmdpbi10b3A6IitLLzIrInB4OyIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJpY29uLWNvbnRhaW5lciIpLmFwcGVuZCgiaSIpLmF0dHIoImNsYXNzIiwibm9kZS1pY29uLSIrYisiICIrdS5pY29uKSxBLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKygyNSt1LndpZHRoLzIpKyIsICIrKEsvMit1LnBhZGRpbmcvMikrIikiKX1lbHNlIGlmKHYpe2NvbnN0IGo9KHUud2lkdGgtUi53aWR0aCkvMixLPSh1LmhlaWdodC1SLmhlaWdodCkvMjtBLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2orIiwgIitLKyIpIil9ZWxzZXtjb25zdCBqPXUud2lkdGgvMixLPXUucGFkZGluZy8yO0EuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraisiLCAiK0srIikiKX1zd2l0Y2godS50eXBlKXtjYXNlIGkubm9kZVR5cGUuREVGQVVMVDptb24oaSxfLHUsYik7YnJlYWs7Y2FzZSBpLm5vZGVUeXBlLlJPVU5ERURfUkVDVDpUb24oaSxfLHUpO2JyZWFrO2Nhc2UgaS5ub2RlVHlwZS5SRUNUOnZvbihpLF8sdSk7YnJlYWs7Y2FzZSBpLm5vZGVUeXBlLkNJUkNMRTpfLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3Uud2lkdGgvMisiLCAiKyArdS5oZWlnaHQvMisiKSIpLHhvbihpLF8sdSk7YnJlYWs7Y2FzZSBpLm5vZGVUeXBlLkNMT1VEOndvbihpLF8sdSk7YnJlYWs7Y2FzZSBpLm5vZGVUeXBlLkJBTkc6eW9uKGksXyx1KTticmVhaztjYXNlIGkubm9kZVR5cGUuSEVYQUdPTjpFb24oaSxfLHUpO2JyZWFrfXJldHVybiBpLnNldEVsZW1lbnRGb3JJZCh1LmlkLHkpLHUuaGVpZ2h0fSxTb249ZnVuY3Rpb24oaSxzKXtjb25zdCB1PWkuZ2V0RWxlbWVudEJ5SWQocy5pZCksZD1zLnh8fDAscD1zLnl8fDA7dS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitkKyIsIitwKyIpIil9O2ZXZS51c2UocG9uKTtmdW5jdGlvbiBiV2UoaSxzLHUsZCxwKXtDb24oaSxzLHUsZCxwKSx1LmNoaWxkcmVuJiZ1LmNoaWxkcmVuLmZvckVhY2goKHYsYik9PntiV2UoaSxzLHYsZDwwP2I6ZCxwKX0pfWZ1bmN0aW9uIF9vbihpLHMpe3MuZWRnZXMoKS5tYXAoKHUsZCk9Pntjb25zdCBwPXUuZGF0YSgpO2lmKHVbMF0uX3ByaXZhdGUuYm9keUJvdW5kcyl7Y29uc3Qgdj11WzBdLl9wcml2YXRlLnJzY3JhdGNoO1hlLnRyYWNlKCJFZGdlOiAiLGQscCksaS5pbnNlcnQoInBhdGgiKS5hdHRyKCJkIixgTSAke3Yuc3RhcnRYfSwke3Yuc3RhcnRZfSBMICR7di5taWRYfSwke3YubWlkWX0gTCR7di5lbmRYfSwke3YuZW5kWX0gYCkuYXR0cigiY2xhc3MiLCJlZGdlIHNlY3Rpb24tZWRnZS0iK3Auc2VjdGlvbisiIGVkZ2UtZGVwdGgtIitwLmRlcHRoKX19KX1mdW5jdGlvbiBtV2UoaSxzLHUsZCl7cy5hZGQoe2dyb3VwOiJub2RlcyIsZGF0YTp7aWQ6aS5pZC50b1N0cmluZygpLGxhYmVsVGV4dDppLmRlc2NyLGhlaWdodDppLmhlaWdodCx3aWR0aDppLndpZHRoLGxldmVsOmQsbm9kZUlkOmkuaWQscGFkZGluZzppLnBhZGRpbmcsdHlwZTppLnR5cGV9LHBvc2l0aW9uOnt4OmkueCx5OmkueX19KSxpLmNoaWxkcmVuJiZpLmNoaWxkcmVuLmZvckVhY2gocD0+e21XZShwLHMsdSxkKzEpLHMuYWRkKHtncm91cDoiZWRnZXMiLGRhdGE6e2lkOmAke2kuaWR9XyR7cC5pZH1gLHNvdXJjZTppLmlkLHRhcmdldDpwLmlkLGRlcHRoOmQsc2VjdGlvbjpwLnNlY3Rpb259fSl9KX1mdW5jdGlvbiBBb24oaSxzKXtyZXR1cm4gbmV3IFByb21pc2UodT0+e2NvbnN0IGQ9SXIoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoImlkIiwiY3kiKS5hdHRyKCJzdHlsZSIsImRpc3BsYXk6bm9uZSIpLHA9ZldlKHtjb250YWluZXI6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImN5Iiksc3R5bGU6W3tzZWxlY3RvcjoiZWRnZSIsc3R5bGU6eyJjdXJ2ZS1zdHlsZSI6ImJlemllciJ9fV19KTtkLnJlbW92ZSgpLG1XZShpLHAscywwKSxwLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbih2KXt2LmxheW91dERpbWVuc2lvbnM9KCk9Pntjb25zdCBiPXYuZGF0YSgpO3JldHVybnt3OmIud2lkdGgsaDpiLmhlaWdodH19fSkscC5sYXlvdXQoe25hbWU6ImNvc2UtYmlsa2VudCIscXVhbGl0eToicHJvb2YiLHN0eWxlRW5hYmxlZDohMSxhbmltYXRlOiExfSkucnVuKCkscC5yZWFkeSh2PT57WGUuaW5mbygiUmVhZHkiLHYpLHUocCl9KX0pfWZ1bmN0aW9uIExvbihpLHMpe3Mubm9kZXMoKS5tYXAoKHUsZCk9Pntjb25zdCBwPXUuZGF0YSgpO3AueD11LnBvc2l0aW9uKCkueCxwLnk9dS5wb3NpdGlvbigpLnksU29uKGkscCk7Y29uc3Qgdj1pLmdldEVsZW1lbnRCeUlkKHAubm9kZUlkKTtYZS5pbmZvKCJJZDoiLGQsIlBvc2l0aW9uOiAoIix1LnBvc2l0aW9uKCkueCwiLCAiLHUucG9zaXRpb24oKS55LCIpIixwKSx2LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3UucG9zaXRpb24oKS54LXAud2lkdGgvMn0sICR7dS5wb3NpdGlvbigpLnktcC5oZWlnaHQvMn0pYCksdi5hdHRyKCJhdHRyIixgYXBhLSR7ZH0pYCl9KX1jb25zdCBNb249e2RyYXc6YXN5bmMoaSxzLHUsZCk9Pnt2YXIgUCxSO1hlLmRlYnVnKGBSZW5kZXJpbmcgbWluZG1hcCBkaWFncmFtCmAraSk7Y29uc3QgcD1kLmRiLHY9cC5nZXRNaW5kbWFwKCk7aWYoIXYpcmV0dXJuO2NvbnN0IGI9cXQoKTtiLmh0bWxMYWJlbHM9ITE7Y29uc3QgeT1yUihzKSxUPXkuYXBwZW5kKCJnIik7VC5hdHRyKCJjbGFzcyIsIm1pbmRtYXAtZWRnZXMiKTtjb25zdCBfPXkuYXBwZW5kKCJnIik7Xy5hdHRyKCJjbGFzcyIsIm1pbmRtYXAtbm9kZXMiKSxiV2UocCxfLHYsLTEsYik7Y29uc3QgQT1hd2FpdCBBb24odixiKTtfb24oVCxBKSxMb24ocCxBKSx5OSh2b2lkIDAseSwoKFA9Yi5taW5kbWFwKT09bnVsbD92b2lkIDA6UC5wYWRkaW5nKT8/c2gubWluZG1hcC5wYWRkaW5nLCgoUj1iLm1pbmRtYXApPT1udWxsP3ZvaWQgMDpSLnVzZU1heFdpZHRoKT8/c2gubWluZG1hcC51c2VNYXhXaWR0aCl9fSxEb249aT0+e2xldCBzPSIiO2ZvcihsZXQgdT0wO3U8aS5USEVNRV9DT0xPUl9MSU1JVDt1KyspaVsibGluZUNvbG9yIit1XT1pWyJsaW5lQ29sb3IiK3VdfHxpWyJjU2NhbGVJbnYiK3VdLF9DKGlbImxpbmVDb2xvciIrdV0pP2lbImxpbmVDb2xvciIrdV09R3MoaVsibGluZUNvbG9yIit1XSwyMCk6aVsibGluZUNvbG9yIit1XT1mYShpWyJsaW5lQ29sb3IiK3VdLDIwKTtmb3IobGV0IHU9MDt1PGkuVEhFTUVfQ09MT1JfTElNSVQ7dSsrKXtjb25zdCBkPSIiKygxNy0zKnUpO3MrPWAKICAgIC5zZWN0aW9uLSR7dS0xfSByZWN0LCAuc2VjdGlvbi0ke3UtMX0gcGF0aCwgLnNlY3Rpb24tJHt1LTF9IGNpcmNsZSwgLnNlY3Rpb24tJHt1LTF9IHBvbHlnb24sIC5zZWN0aW9uLSR7dS0xfSBwYXRoICB7CiAgICAgIGZpbGw6ICR7aVsiY1NjYWxlIit1XX07CiAgICB9CiAgICAuc2VjdGlvbi0ke3UtMX0gdGV4dCB7CiAgICAgZmlsbDogJHtpWyJjU2NhbGVMYWJlbCIrdV19OwogICAgfQogICAgLm5vZGUtaWNvbi0ke3UtMX0gewogICAgICBmb250LXNpemU6IDQwcHg7CiAgICAgIGNvbG9yOiAke2lbImNTY2FsZUxhYmVsIit1XX07CiAgICB9CiAgICAuc2VjdGlvbi1lZGdlLSR7dS0xfXsKICAgICAgc3Ryb2tlOiAke2lbImNTY2FsZSIrdV19OwogICAgfQogICAgLmVkZ2UtZGVwdGgtJHt1LTF9ewogICAgICBzdHJva2Utd2lkdGg6ICR7ZH07CiAgICB9CiAgICAuc2VjdGlvbi0ke3UtMX0gbGluZSB7CiAgICAgIHN0cm9rZTogJHtpWyJjU2NhbGVJbnYiK3VdfSA7CiAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgIH0KCiAgICAuZGlzYWJsZWQsIC5kaXNhYmxlZCBjaXJjbGUsIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogbGlnaHRncmF5OwogICAgfQogICAgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiAjZWZlZmVmOwogICAgfQogICAgYH1yZXR1cm4gc30sSW9uPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntkYjpsb24scmVuZGVyZXI6TW9uLHBhcnNlcjpzb24sc3R5bGVzOmk9PmAKICAuZWRnZSB7CiAgICBzdHJva2Utd2lkdGg6IDM7CiAgfQogICR7RG9uKGkpfQogIC5zZWN0aW9uLXJvb3QgcmVjdCwgLnNlY3Rpb24tcm9vdCBwYXRoLCAuc2VjdGlvbi1yb290IGNpcmNsZSwgLnNlY3Rpb24tcm9vdCBwb2x5Z29uICB7CiAgICBmaWxsOiAke2kuZ2l0MH07CiAgfQogIC5zZWN0aW9uLXJvb3QgdGV4dCB7CiAgICBmaWxsOiAke2kuZ2l0QnJhbmNoTGFiZWwwfTsKICB9CiAgLmljb24tY29udGFpbmVyIHsKICAgIGhlaWdodDoxMDAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICB9CiAgLmVkZ2UgewogICAgZmlsbDogbm9uZTsKICB9CiAgLm1pbmRtYXAtbm9kZS1sYWJlbCB7CiAgICBkeTogMWVtOwogICAgYWxpZ25tZW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZG9taW5hbnQtYmFzZWxpbmU6IG1pZGRsZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBpd2U9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbih5LFQsXyxBKXtmb3IoXz1ffHx7fSxBPXkubGVuZ3RoO0EtLTtfW3lbQV1dPVQpO3JldHVybiBffSxzPVsxLDldLHU9WzEsMTBdLGQ9WzEsNSwxMCwxMl0scD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU0FOS0VZOjQsTkVXTElORTo1LGNzdjo2LG9wdF9lb2Y6NyxyZWNvcmQ6OCxjc3ZfdGFpbDo5LEVPRjoxMCwiZmllbGRbc291cmNlXSI6MTEsQ09NTUE6MTIsImZpZWxkW3RhcmdldF0iOjEzLCJmaWVsZFt2YWx1ZV0iOjE0LGZpZWxkOjE1LGVzY2FwZWQ6MTYsbm9uX2VzY2FwZWQ6MTcsRFFVT1RFOjE4LEVTQ0FQRURfVEVYVDoxOSxOT05fRVNDQVBFRF9URVhUOjIwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJTQU5LRVkiLDU6Ik5FV0xJTkUiLDEwOiJFT0YiLDExOiJmaWVsZFtzb3VyY2VdIiwxMjoiQ09NTUEiLDEzOiJmaWVsZFt0YXJnZXRdIiwxNDoiZmllbGRbdmFsdWVdIiwxODoiRFFVT1RFIiwxOToiRVNDQVBFRF9URVhUIiwyMDoiTk9OX0VTQ0FQRURfVEVYVCJ9LHByb2R1Y3Rpb25zXzpbMCxbMyw0XSxbNiwyXSxbOSwyXSxbOSwwXSxbNywxXSxbNywwXSxbOCw1XSxbMTUsMV0sWzE1LDFdLFsxNiwzXSxbMTcsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oVCxfLEEsUCxSLEYsail7dmFyIEs9Ri5sZW5ndGgtMTtzd2l0Y2goUil7Y2FzZSA3OmNvbnN0IGVlPVAuZmluZE9yQ3JlYXRlTm9kZShGW0stNF0udHJpbSgpLnJlcGxhY2VBbGwoJyIiJywnIicpKSxpZT1QLmZpbmRPckNyZWF0ZU5vZGUoRltLLTJdLnRyaW0oKS5yZXBsYWNlQWxsKCciIicsJyInKSksb2U9cGFyc2VGbG9hdChGW0tdLnRyaW0oKSk7UC5hZGRMaW5rKGVlLGllLG9lKTticmVhaztjYXNlIDg6Y2FzZSA5OmNhc2UgMTE6dGhpcy4kPUZbS107YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9RltLLTFdO2JyZWFrfX0sdGFibGU6W3szOjEsNDpbMSwyXX0sezE6WzNdfSx7NTpbMSwzXX0sezY6NCw4OjUsMTU6NiwxNjo3LDE3OjgsMTg6cywyMDp1fSx7MTpbMiw2XSw3OjExLDEwOlsxLDEyXX0saSh1LFsyLDRdLHs5OjEzLDU6WzEsMTRdfSksezEyOlsxLDE1XX0saShkLFsyLDhdKSxpKGQsWzIsOV0pLHsxOTpbMSwxNl19LGkoZCxbMiwxMV0pLHsxOlsyLDFdfSx7MTpbMiw1XX0saSh1LFsyLDJdKSx7NjoxNyw4OjUsMTU6NiwxNjo3LDE3OjgsMTg6cywyMDp1fSx7MTU6MTgsMTY6NywxNzo4LDE4OnMsMjA6dX0sezE4OlsxLDE5XX0saSh1LFsyLDNdKSx7MTI6WzEsMjBdfSxpKGQsWzIsMTBdKSx7MTU6MjEsMTY6NywxNzo4LDE4OnMsMjA6dX0saShbMSw1LDEwXSxbMiw3XSldLGRlZmF1bHRBY3Rpb25zOnsxMTpbMiwxXSwxMjpbMiw1XX0scGFyc2VFcnJvcjpmdW5jdGlvbihULF8pe2lmKF8ucmVjb3ZlcmFibGUpdGhpcy50cmFjZShUKTtlbHNle3ZhciBBPW5ldyBFcnJvcihUKTt0aHJvdyBBLmhhc2g9XyxBfX0scGFyc2U6ZnVuY3Rpb24oVCl7dmFyIF89dGhpcyxBPVswXSxQPVtdLFI9W251bGxdLEY9W10saj10aGlzLnRhYmxlLEs9IiIsZWU9MCxpZT0wLG9lPTIscGU9MSxiZT1GLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGFlPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksbmU9e3l5Ont9fTtmb3IodmFyIHNlIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksc2UpJiYobmUueXlbc2VdPXRoaXMueXlbc2VdKTthZS5zZXRJbnB1dChULG5lLnl5KSxuZS55eS5sZXhlcj1hZSxuZS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgYWUueXlsbG9jPiJ1IiYmKGFlLnl5bGxvYz17fSk7dmFyIGRlPWFlLnl5bGxvYztGLnB1c2goZGUpO3ZhciBYPWFlLm9wdGlvbnMmJmFlLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBuZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1uZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBnZSgpe3ZhciBLZTtyZXR1cm4gS2U9UC5wb3AoKXx8YWUubGV4KCl8fHBlLHR5cGVvZiBLZSE9Im51bWJlciImJihLZSBpbnN0YW5jZW9mIEFycmF5JiYoUD1LZSxLZT1QLnBvcCgpKSxLZT1fLnN5bWJvbHNfW0tlXXx8S2UpLEtlfWZvcih2YXIgVyx4ZSxVLEZlLFBlPXt9LGplLEllLFNlLENlOzspe2lmKHhlPUFbQS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t4ZV0/VT10aGlzLmRlZmF1bHRBY3Rpb25zW3hlXTooKFc9PT1udWxsfHx0eXBlb2YgVz4idSIpJiYoVz1nZSgpKSxVPWpbeGVdJiZqW3hlXVtXXSksdHlwZW9mIFU+InUifHwhVS5sZW5ndGh8fCFVWzBdKXt2YXIga2U9IiI7Q2U9W107Zm9yKGplIGluIGpbeGVdKXRoaXMudGVybWluYWxzX1tqZV0mJmplPm9lJiZDZS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bamVdKyInIik7YWUuc2hvd1Bvc2l0aW9uP2tlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGVlKzEpK2A6CmArYWUuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtDZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1ddfHxXKSsiJyI6a2U9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoZWUrMSkrIjogVW5leHBlY3RlZCAiKyhXPT1wZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tXXXx8VykrIiciKSx0aGlzLnBhcnNlRXJyb3Ioa2Use3RleHQ6YWUubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1ddfHxXLGxpbmU6YWUueXlsaW5lbm8sbG9jOmRlLGV4cGVjdGVkOkNlfSl9aWYoVVswXWluc3RhbmNlb2YgQXJyYXkmJlUubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit4ZSsiLCB0b2tlbjogIitXKTtzd2l0Y2goVVswXSl7Y2FzZSAxOkEucHVzaChXKSxSLnB1c2goYWUueXl0ZXh0KSxGLnB1c2goYWUueXlsbG9jKSxBLnB1c2goVVsxXSksVz1udWxsLGllPWFlLnl5bGVuZyxLPWFlLnl5dGV4dCxlZT1hZS55eWxpbmVubyxkZT1hZS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKEllPXRoaXMucHJvZHVjdGlvbnNfW1VbMV1dWzFdLFBlLiQ9UltSLmxlbmd0aC1JZV0sUGUuXyQ9e2ZpcnN0X2xpbmU6RltGLmxlbmd0aC0oSWV8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpGW0YubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46RltGLmxlbmd0aC0oSWV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46RltGLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sWCYmKFBlLl8kLnJhbmdlPVtGW0YubGVuZ3RoLShJZXx8MSldLnJhbmdlWzBdLEZbRi5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxGZT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoUGUsW0ssaWUsZWUsbmUueXksVVsxXSxSLEZdLmNvbmNhdChiZSkpLHR5cGVvZiBGZTwidSIpcmV0dXJuIEZlO0llJiYoQT1BLnNsaWNlKDAsLTEqSWUqMiksUj1SLnNsaWNlKDAsLTEqSWUpLEY9Ri5zbGljZSgwLC0xKkllKSksQS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW1VbMV1dWzBdKSxSLnB1c2goUGUuJCksRi5wdXNoKFBlLl8kKSxTZT1qW0FbQS5sZW5ndGgtMl1dW0FbQS5sZW5ndGgtMV1dLEEucHVzaChTZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LHY9ZnVuY3Rpb24oKXt2YXIgeT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihfLEEpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoXyxBKTtlbHNlIHRocm93IG5ldyBFcnJvcihfKX0sc2V0SW5wdXQ6ZnVuY3Rpb24oVCxfKXtyZXR1cm4gdGhpcy55eT1ffHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1ULHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBUPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1ULHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1ULHRoaXMubWF0Y2hlZCs9VDt2YXIgXz1ULm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gXz8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksVH0sdW5wdXQ6ZnVuY3Rpb24oVCl7dmFyIF89VC5sZW5ndGgsQT1ULnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9VCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtXyksdGhpcy5vZmZzZXQtPV87dmFyIFA9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksQS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPUEubGVuZ3RoLTEpO3ZhciBSPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpBPyhBLmxlbmd0aD09PVAubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStQW1AubGVuZ3RoLUEubGVuZ3RoXS5sZW5ndGgtQVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLV99LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bUlswXSxSWzBdK3RoaXMueXlsZW5nLV9dKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihUKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoVCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgVD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFQubGVuZ3RoPjIwPyIuLi4iOiIiKStULnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5tYXRjaDtyZXR1cm4gVC5sZW5ndGg8MjAmJihUKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1ULmxlbmd0aCkpLChULnN1YnN0cigwLDIwKSsoVC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5wYXN0SW5wdXQoKSxfPW5ldyBBcnJheShULmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIFQrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK18rIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKFQsXyl7dmFyIEEsUCxSO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihSPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFIueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksUD1UWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxQJiYodGhpcy55eWxpbmVubys9UC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpQP1BbUC5sZW5ndGgtMV0ubGVuZ3RoLVBbUC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitUWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVRbMF0sdGhpcy5tYXRjaCs9VFswXSx0aGlzLm1hdGNoZXM9VCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShUWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1UWzBdLEE9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsXyx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxBKXJldHVybiBBO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBGIGluIFIpdGhpc1tGXT1SW0ZdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIFQsXyxBLFA7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgUj10aGlzLl9jdXJyZW50UnVsZXMoKSxGPTA7RjxSLmxlbmd0aDtGKyspaWYoQT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW1JbRl1dKSxBJiYoIV98fEFbMF0ubGVuZ3RoPl9bMF0ubGVuZ3RoKSl7aWYoXz1BLFA9Rix0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihUPXRoaXMudGVzdF9tYXRjaChBLFJbRl0pLFQhPT0hMSlyZXR1cm4gVDtpZih0aGlzLl9iYWNrdHJhY2spe189ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gXz8oVD10aGlzLnRlc3RfbWF0Y2goXyxSW1BdKSxUIT09ITE/VDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIF89dGhpcy5uZXh0KCk7cmV0dXJuIF98fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKF8pe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChfKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgXz10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBfPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oXyl7cmV0dXJuIF89dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhffHwwKSxfPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbX106IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oXyl7dGhpcy5iZWdpbihfKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihfLEEsUCxSKXtzd2l0Y2goUCl7Y2FzZSAwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiY3N2IiksNDtjYXNlIDE6cmV0dXJuIDEwO2Nhc2UgMjpyZXR1cm4gNTtjYXNlIDM6cmV0dXJuIDEyO2Nhc2UgNDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImVzY2FwZWRfdGV4dCIpLDE4O2Nhc2UgNTpyZXR1cm4gMjA7Y2FzZSA2OnJldHVybiB0aGlzLnBvcFN0YXRlKCJlc2NhcGVkX3RleHQiKSwxODtjYXNlIDc6cmV0dXJuIDE5fX0scnVsZXM6Wy9eKD86c2Fua2V5LWJldGFcYikvaSwvXig/OiQpL2ksL14oPzooKFx1MDAwRFx1MDAwQSl8KFx1MDAwQSkpKS9pLC9eKD86KFx1MDAyQykpL2ksL14oPzooXHUwMDIyKSkvaSwvXig/OihbXHUwMDIwLVx1MDAyMVx1MDAyMy1cdTAwMkJcdTAwMkQtXHUwMDdFXSkqKS9pLC9eKD86KFx1MDAyMikoPyEoXHUwMDIyKSkpL2ksL14oPzooKFtcdTAwMjAtXHUwMDIxXHUwMDIzLVx1MDAyQlx1MDAyRC1cdTAwN0VdKXwoXHUwMDJDKXwoXHUwMDBEKXwoXHUwMDBBKXwoXHUwMDIyKShcdTAwMjIpKSopL2ldLGNvbmRpdGlvbnM6e2Nzdjp7cnVsZXM6WzEsMiwzLDQsNSw2LDddLGluY2x1c2l2ZTohMX0sZXNjYXBlZF90ZXh0OntydWxlczpbNiw3XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDddLGluY2x1c2l2ZTohMH19fTtyZXR1cm4geX0oKTtwLmxleGVyPXY7ZnVuY3Rpb24gYigpe3RoaXMueXk9e319cmV0dXJuIGIucHJvdG90eXBlPXAscC5QYXJzZXI9YixuZXcgYn0oKTtpd2UucGFyc2VyPWl3ZTtjb25zdCBOSj1pd2U7bGV0IFBKPVtdLEJKPVtdLHRJPXt9O2NvbnN0IE9vbj0oKT0+e1BKPVtdLEJKPVtdLHRJPXt9LFBnKCl9O2NsYXNzIE5vbntjb25zdHJ1Y3RvcihzLHUsZD0wKXt0aGlzLnNvdXJjZT1zLHRoaXMudGFyZ2V0PXUsdGhpcy52YWx1ZT1kfX1jb25zdCBQb249KGkscyx1KT0+e1BKLnB1c2gobmV3IE5vbihpLHMsdSkpfTtjbGFzcyBCb257Y29uc3RydWN0b3Iocyl7dGhpcy5JRD1zfX1jb25zdCBGb249e25vZGVzTWFwOnRJLGdldENvbmZpZzooKT0+cXQoKS5zYW5rZXksZ2V0Tm9kZXM6KCk9PkJKLGdldExpbmtzOigpPT5QSixnZXRHcmFwaDooKT0+KHtub2RlczpCSi5tYXAoaT0+KHtpZDppLklEfSkpLGxpbmtzOlBKLm1hcChpPT4oe3NvdXJjZTppLnNvdXJjZS5JRCx0YXJnZXQ6aS50YXJnZXQuSUQsdmFsdWU6aS52YWx1ZX0pKX0pLGFkZExpbms6UG9uLGZpbmRPckNyZWF0ZU5vZGU6aT0+KGk9Y2kuc2FuaXRpemVUZXh0KGkscXQoKSksdElbaV18fCh0SVtpXT1uZXcgQm9uKGkpLEJKLnB1c2godElbaV0pKSx0SVtpXSksZ2V0QWNjVGl0bGU6Q3Asc2V0QWNjVGl0bGU6QmcsZ2V0QWNjRGVzY3JpcHRpb246X3Asc2V0QWNjRGVzY3JpcHRpb246U3AsZ2V0RGlhZ3JhbVRpdGxlOkFwLHNldERpYWdyYW1UaXRsZTpjbSxjbGVhcjpPb259O2Z1bmN0aW9uIHZXZShpLHMpe2xldCB1O2lmKHM9PT12b2lkIDApZm9yKGNvbnN0IGQgb2YgaSlkIT1udWxsJiYodTxkfHx1PT09dm9pZCAwJiZkPj1kKSYmKHU9ZCk7ZWxzZXtsZXQgZD0tMTtmb3IobGV0IHAgb2YgaSkocD1zKHAsKytkLGkpKSE9bnVsbCYmKHU8cHx8dT09PXZvaWQgMCYmcD49cCkmJih1PXApfXJldHVybiB1fWZ1bmN0aW9uIHdXZShpLHMpe2xldCB1O2lmKHM9PT12b2lkIDApZm9yKGNvbnN0IGQgb2YgaSlkIT1udWxsJiYodT5kfHx1PT09dm9pZCAwJiZkPj1kKSYmKHU9ZCk7ZWxzZXtsZXQgZD0tMTtmb3IobGV0IHAgb2YgaSkocD1zKHAsKytkLGkpKSE9bnVsbCYmKHU+cHx8dT09PXZvaWQgMCYmcD49cCkmJih1PXApfXJldHVybiB1fWZ1bmN0aW9uIHN3ZShpLHMpe2xldCB1PTA7aWYocz09PXZvaWQgMClmb3IobGV0IGQgb2YgaSkoZD0rZCkmJih1Kz1kKTtlbHNle2xldCBkPS0xO2ZvcihsZXQgcCBvZiBpKShwPStzKHAsKytkLGkpKSYmKHUrPXApfXJldHVybiB1fWZ1bmN0aW9uIFJvbihpKXtyZXR1cm4gaS50YXJnZXQuZGVwdGh9ZnVuY3Rpb24gam9uKGkpe3JldHVybiBpLmRlcHRofWZ1bmN0aW9uICRvbihpLHMpe3JldHVybiBzLTEtaS5oZWlnaHR9ZnVuY3Rpb24geVdlKGkscyl7cmV0dXJuIGkuc291cmNlTGlua3MubGVuZ3RoP2kuZGVwdGg6cy0xfWZ1bmN0aW9uIHpvbihpKXtyZXR1cm4gaS50YXJnZXRMaW5rcy5sZW5ndGg/aS5kZXB0aDppLnNvdXJjZUxpbmtzLmxlbmd0aD93V2UoaS5zb3VyY2VMaW5rcyxSb24pLTE6MH1mdW5jdGlvbiBGSihpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaX19ZnVuY3Rpb24geFdlKGkscyl7cmV0dXJuIFJKKGkuc291cmNlLHMuc291cmNlKXx8aS5pbmRleC1zLmluZGV4fWZ1bmN0aW9uIGtXZShpLHMpe3JldHVybiBSSihpLnRhcmdldCxzLnRhcmdldCl8fGkuaW5kZXgtcy5pbmRleH1mdW5jdGlvbiBSSihpLHMpe3JldHVybiBpLnkwLXMueTB9ZnVuY3Rpb24gYXdlKGkpe3JldHVybiBpLnZhbHVlfWZ1bmN0aW9uIHFvbihpKXtyZXR1cm4gaS5pbmRleH1mdW5jdGlvbiBIb24oaSl7cmV0dXJuIGkubm9kZXN9ZnVuY3Rpb24gVm9uKGkpe3JldHVybiBpLmxpbmtzfWZ1bmN0aW9uIEVXZShpLHMpe2NvbnN0IHU9aS5nZXQocyk7aWYoIXUpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK3MpO3JldHVybiB1fWZ1bmN0aW9uIFRXZSh7bm9kZXM6aX0pe2Zvcihjb25zdCBzIG9mIGkpe2xldCB1PXMueTAsZD11O2Zvcihjb25zdCBwIG9mIHMuc291cmNlTGlua3MpcC55MD11K3Aud2lkdGgvMix1Kz1wLndpZHRoO2Zvcihjb25zdCBwIG9mIHMudGFyZ2V0TGlua3MpcC55MT1kK3Aud2lkdGgvMixkKz1wLndpZHRofX1mdW5jdGlvbiBVb24oKXtsZXQgaT0wLHM9MCx1PTEsZD0xLHA9MjQsdj04LGIseT1xb24sVD15V2UsXyxBLFA9SG9uLFI9Vm9uLEY9NjtmdW5jdGlvbiBqKCl7Y29uc3QgUGU9e25vZGVzOlAuYXBwbHkobnVsbCxhcmd1bWVudHMpLGxpbmtzOlIuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtyZXR1cm4gSyhQZSksZWUoUGUpLGllKFBlKSxvZShQZSksYWUoUGUpLFRXZShQZSksUGV9ai51cGRhdGU9ZnVuY3Rpb24oUGUpe3JldHVybiBUV2UoUGUpLFBlfSxqLm5vZGVJZD1mdW5jdGlvbihQZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9dHlwZW9mIFBlPT0iZnVuY3Rpb24iP1BlOkZKKFBlKSxqKTp5fSxqLm5vZGVBbGlnbj1mdW5jdGlvbihQZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9dHlwZW9mIFBlPT0iZnVuY3Rpb24iP1BlOkZKKFBlKSxqKTpUfSxqLm5vZGVTb3J0PWZ1bmN0aW9uKFBlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz1QZSxqKTpffSxqLm5vZGVXaWR0aD1mdW5jdGlvbihQZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9K1BlLGopOnB9LGoubm9kZVBhZGRpbmc9ZnVuY3Rpb24oUGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PWI9K1BlLGopOnZ9LGoubm9kZXM9ZnVuY3Rpb24oUGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhQPXR5cGVvZiBQZT09ImZ1bmN0aW9uIj9QZTpGSihQZSksaik6UH0sai5saW5rcz1mdW5jdGlvbihQZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFI9dHlwZW9mIFBlPT0iZnVuY3Rpb24iP1BlOkZKKFBlKSxqKTpSfSxqLmxpbmtTb3J0PWZ1bmN0aW9uKFBlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT1QZSxqKTpBfSxqLnNpemU9ZnVuY3Rpb24oUGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXM9MCx1PStQZVswXSxkPStQZVsxXSxqKTpbdS1pLGQtc119LGouZXh0ZW50PWZ1bmN0aW9uKFBlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rUGVbMF1bMF0sdT0rUGVbMV1bMF0scz0rUGVbMF1bMV0sZD0rUGVbMV1bMV0saik6W1tpLHNdLFt1LGRdXX0sai5pdGVyYXRpb25zPWZ1bmN0aW9uKFBlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRj0rUGUsaik6Rn07ZnVuY3Rpb24gSyh7bm9kZXM6UGUsbGlua3M6amV9KXtmb3IoY29uc3RbU2UsQ2Vdb2YgUGUuZW50cmllcygpKUNlLmluZGV4PVNlLENlLnNvdXJjZUxpbmtzPVtdLENlLnRhcmdldExpbmtzPVtdO2NvbnN0IEllPW5ldyBNYXAoUGUubWFwKChTZSxDZSk9Plt5KFNlLENlLFBlKSxTZV0pKTtmb3IoY29uc3RbU2UsQ2Vdb2YgamUuZW50cmllcygpKXtDZS5pbmRleD1TZTtsZXR7c291cmNlOmtlLHRhcmdldDpLZX09Q2U7dHlwZW9mIGtlIT0ib2JqZWN0IiYmKGtlPUNlLnNvdXJjZT1FV2UoSWUsa2UpKSx0eXBlb2YgS2UhPSJvYmplY3QiJiYoS2U9Q2UudGFyZ2V0PUVXZShJZSxLZSkpLGtlLnNvdXJjZUxpbmtzLnB1c2goQ2UpLEtlLnRhcmdldExpbmtzLnB1c2goQ2UpfWlmKEEhPW51bGwpZm9yKGNvbnN0e3NvdXJjZUxpbmtzOlNlLHRhcmdldExpbmtzOkNlfW9mIFBlKVNlLnNvcnQoQSksQ2Uuc29ydChBKX1mdW5jdGlvbiBlZSh7bm9kZXM6UGV9KXtmb3IoY29uc3QgamUgb2YgUGUpamUudmFsdWU9amUuZml4ZWRWYWx1ZT09PXZvaWQgMD9NYXRoLm1heChzd2UoamUuc291cmNlTGlua3MsYXdlKSxzd2UoamUudGFyZ2V0TGlua3MsYXdlKSk6amUuZml4ZWRWYWx1ZX1mdW5jdGlvbiBpZSh7bm9kZXM6UGV9KXtjb25zdCBqZT1QZS5sZW5ndGg7bGV0IEllPW5ldyBTZXQoUGUpLFNlPW5ldyBTZXQsQ2U9MDtmb3IoO0llLnNpemU7KXtmb3IoY29uc3Qga2Ugb2YgSWUpe2tlLmRlcHRoPUNlO2Zvcihjb25zdHt0YXJnZXQ6S2V9b2Yga2Uuc291cmNlTGlua3MpU2UuYWRkKEtlKX1pZigrK0NlPmplKXRocm93IG5ldyBFcnJvcigiY2lyY3VsYXIgbGluayIpO0llPVNlLFNlPW5ldyBTZXR9fWZ1bmN0aW9uIG9lKHtub2RlczpQZX0pe2NvbnN0IGplPVBlLmxlbmd0aDtsZXQgSWU9bmV3IFNldChQZSksU2U9bmV3IFNldCxDZT0wO2Zvcig7SWUuc2l6ZTspe2Zvcihjb25zdCBrZSBvZiBJZSl7a2UuaGVpZ2h0PUNlO2Zvcihjb25zdHtzb3VyY2U6S2V9b2Yga2UudGFyZ2V0TGlua3MpU2UuYWRkKEtlKX1pZigrK0NlPmplKXRocm93IG5ldyBFcnJvcigiY2lyY3VsYXIgbGluayIpO0llPVNlLFNlPW5ldyBTZXR9fWZ1bmN0aW9uIHBlKHtub2RlczpQZX0pe2NvbnN0IGplPXZXZShQZSxDZT0+Q2UuZGVwdGgpKzEsSWU9KHUtaS1wKS8oamUtMSksU2U9bmV3IEFycmF5KGplKTtmb3IoY29uc3QgQ2Ugb2YgUGUpe2NvbnN0IGtlPU1hdGgubWF4KDAsTWF0aC5taW4oamUtMSxNYXRoLmZsb29yKFQuY2FsbChudWxsLENlLGplKSkpKTtDZS5sYXllcj1rZSxDZS54MD1pK2tlKkllLENlLngxPUNlLngwK3AsU2Vba2VdP1NlW2tlXS5wdXNoKENlKTpTZVtrZV09W0NlXX1pZihfKWZvcihjb25zdCBDZSBvZiBTZSlDZS5zb3J0KF8pO3JldHVybiBTZX1mdW5jdGlvbiBiZShQZSl7Y29uc3QgamU9d1dlKFBlLEllPT4oZC1zLShJZS5sZW5ndGgtMSkqYikvc3dlKEllLGF3ZSkpO2Zvcihjb25zdCBJZSBvZiBQZSl7bGV0IFNlPXM7Zm9yKGNvbnN0IENlIG9mIEllKXtDZS55MD1TZSxDZS55MT1TZStDZS52YWx1ZSpqZSxTZT1DZS55MStiO2Zvcihjb25zdCBrZSBvZiBDZS5zb3VyY2VMaW5rcylrZS53aWR0aD1rZS52YWx1ZSpqZX1TZT0oZC1TZStiKS8oSWUubGVuZ3RoKzEpO2ZvcihsZXQgQ2U9MDtDZTxJZS5sZW5ndGg7KytDZSl7Y29uc3Qga2U9SWVbQ2VdO2tlLnkwKz1TZSooQ2UrMSksa2UueTErPVNlKihDZSsxKX14ZShJZSl9fWZ1bmN0aW9uIGFlKFBlKXtjb25zdCBqZT1wZShQZSk7Yj1NYXRoLm1pbih2LChkLXMpLyh2V2UoamUsSWU9PkllLmxlbmd0aCktMSkpLGJlKGplKTtmb3IobGV0IEllPTA7SWU8RjsrK0llKXtjb25zdCBTZT1NYXRoLnBvdyguOTksSWUpLENlPU1hdGgubWF4KDEtU2UsKEllKzEpL0YpO3NlKGplLFNlLENlKSxuZShqZSxTZSxDZSl9fWZ1bmN0aW9uIG5lKFBlLGplLEllKXtmb3IobGV0IFNlPTEsQ2U9UGUubGVuZ3RoO1NlPENlOysrU2Upe2NvbnN0IGtlPVBlW1NlXTtmb3IoY29uc3QgS2Ugb2Yga2Upe2xldCBGdD0wLE5lPTA7Zm9yKGNvbnN0e3NvdXJjZTpfdCx2YWx1ZTpFdH1vZiBLZS50YXJnZXRMaW5rcyl7bGV0IEd0PUV0KihLZS5sYXllci1fdC5sYXllcik7RnQrPVUoX3QsS2UpKkd0LE5lKz1HdH1pZighKE5lPjApKWNvbnRpbnVlO2xldCBnbj0oRnQvTmUtS2UueTApKmplO0tlLnkwKz1nbixLZS55MSs9Z24sVyhLZSl9Xz09PXZvaWQgMCYma2Uuc29ydChSSiksZGUoa2UsSWUpfX1mdW5jdGlvbiBzZShQZSxqZSxJZSl7Zm9yKGxldCBTZT1QZS5sZW5ndGgsQ2U9U2UtMjtDZT49MDstLUNlKXtjb25zdCBrZT1QZVtDZV07Zm9yKGNvbnN0IEtlIG9mIGtlKXtsZXQgRnQ9MCxOZT0wO2Zvcihjb25zdHt0YXJnZXQ6X3QsdmFsdWU6RXR9b2YgS2Uuc291cmNlTGlua3Mpe2xldCBHdD1FdCooX3QubGF5ZXItS2UubGF5ZXIpO0Z0Kz1GZShLZSxfdCkqR3QsTmUrPUd0fWlmKCEoTmU+MCkpY29udGludWU7bGV0IGduPShGdC9OZS1LZS55MCkqamU7S2UueTArPWduLEtlLnkxKz1nbixXKEtlKX1fPT09dm9pZCAwJiZrZS5zb3J0KFJKKSxkZShrZSxJZSl9fWZ1bmN0aW9uIGRlKFBlLGplKXtjb25zdCBJZT1QZS5sZW5ndGg+PjEsU2U9UGVbSWVdO2dlKFBlLFNlLnkwLWIsSWUtMSxqZSksWChQZSxTZS55MStiLEllKzEsamUpLGdlKFBlLGQsUGUubGVuZ3RoLTEsamUpLFgoUGUscywwLGplKX1mdW5jdGlvbiBYKFBlLGplLEllLFNlKXtmb3IoO0llPFBlLmxlbmd0aDsrK0llKXtjb25zdCBDZT1QZVtJZV0sa2U9KGplLUNlLnkwKSpTZTtrZT4xZS02JiYoQ2UueTArPWtlLENlLnkxKz1rZSksamU9Q2UueTErYn19ZnVuY3Rpb24gZ2UoUGUsamUsSWUsU2Upe2Zvcig7SWU+PTA7LS1JZSl7Y29uc3QgQ2U9UGVbSWVdLGtlPShDZS55MS1qZSkqU2U7a2U+MWUtNiYmKENlLnkwLT1rZSxDZS55MS09a2UpLGplPUNlLnkwLWJ9fWZ1bmN0aW9uIFcoe3NvdXJjZUxpbmtzOlBlLHRhcmdldExpbmtzOmplfSl7aWYoQT09PXZvaWQgMCl7Zm9yKGNvbnN0e3NvdXJjZTp7c291cmNlTGlua3M6SWV9fW9mIGplKUllLnNvcnQoa1dlKTtmb3IoY29uc3R7dGFyZ2V0Ont0YXJnZXRMaW5rczpJZX19b2YgUGUpSWUuc29ydCh4V2UpfX1mdW5jdGlvbiB4ZShQZSl7aWYoQT09PXZvaWQgMClmb3IoY29uc3R7c291cmNlTGlua3M6amUsdGFyZ2V0TGlua3M6SWV9b2YgUGUpamUuc29ydChrV2UpLEllLnNvcnQoeFdlKX1mdW5jdGlvbiBVKFBlLGplKXtsZXQgSWU9UGUueTAtKFBlLnNvdXJjZUxpbmtzLmxlbmd0aC0xKSpiLzI7Zm9yKGNvbnN0e3RhcmdldDpTZSx3aWR0aDpDZX1vZiBQZS5zb3VyY2VMaW5rcyl7aWYoU2U9PT1qZSlicmVhaztJZSs9Q2UrYn1mb3IoY29uc3R7c291cmNlOlNlLHdpZHRoOkNlfW9mIGplLnRhcmdldExpbmtzKXtpZihTZT09PVBlKWJyZWFrO0llLT1DZX1yZXR1cm4gSWV9ZnVuY3Rpb24gRmUoUGUsamUpe2xldCBJZT1qZS55MC0oamUudGFyZ2V0TGlua3MubGVuZ3RoLTEpKmIvMjtmb3IoY29uc3R7c291cmNlOlNlLHdpZHRoOkNlfW9mIGplLnRhcmdldExpbmtzKXtpZihTZT09PVBlKWJyZWFrO0llKz1DZStifWZvcihjb25zdHt0YXJnZXQ6U2Usd2lkdGg6Q2V9b2YgUGUuc291cmNlTGlua3Mpe2lmKFNlPT09amUpYnJlYWs7SWUtPUNlfXJldHVybiBJZX1yZXR1cm4gan12YXIgb3dlPU1hdGguUEksY3dlPTIqb3dlLGFTPTFlLTYsR29uPWN3ZS1hUztmdW5jdGlvbiB1d2UoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBDV2UoKXtyZXR1cm4gbmV3IHV3ZX11d2UucHJvdG90eXBlPUNXZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnV3ZSxtb3ZlVG86ZnVuY3Rpb24oaSxzKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2kpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3MpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl94MSE9PW51bGwmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbihpLHMpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rcyl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24oaSxzLHUsZCl7dGhpcy5fKz0iUSIrICtpKyIsIisgK3MrIiwiKyh0aGlzLl94MT0rdSkrIiwiKyh0aGlzLl95MT0rZCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oaSxzLHUsZCxwLHYpe3RoaXMuXys9IkMiKyAraSsiLCIrICtzKyIsIisgK3UrIiwiKyArZCsiLCIrKHRoaXMuX3gxPStwKSsiLCIrKHRoaXMuX3kxPSt2KX0sYXJjVG86ZnVuY3Rpb24oaSxzLHUsZCxwKXtpPStpLHM9K3MsdT0rdSxkPStkLHA9K3A7dmFyIHY9dGhpcy5feDEsYj10aGlzLl95MSx5PXUtaSxUPWQtcyxfPXYtaSxBPWItcyxQPV8qXytBKkE7aWYocDwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK3ApO2lmKHRoaXMuX3gxPT09bnVsbCl0aGlzLl8rPSJNIisodGhpcy5feDE9aSkrIiwiKyh0aGlzLl95MT1zKTtlbHNlIGlmKFA+YVMpaWYoIShNYXRoLmFicyhBKnktVCpfKT5hUyl8fCFwKXRoaXMuXys9IkwiKyh0aGlzLl94MT1pKSsiLCIrKHRoaXMuX3kxPXMpO2Vsc2V7dmFyIFI9dS12LEY9ZC1iLGo9eSp5K1QqVCxLPVIqUitGKkYsZWU9TWF0aC5zcXJ0KGopLGllPU1hdGguc3FydChQKSxvZT1wKk1hdGgudGFuKChvd2UtTWF0aC5hY29zKChqK1AtSykvKDIqZWUqaWUpKSkvMikscGU9b2UvaWUsYmU9b2UvZWU7TWF0aC5hYnMocGUtMSk+YVMmJih0aGlzLl8rPSJMIisoaStwZSpfKSsiLCIrKHMrcGUqQSkpLHRoaXMuXys9IkEiK3ArIiwiK3ArIiwwLDAsIisgKyhBKlI+XypGKSsiLCIrKHRoaXMuX3gxPWkrYmUqeSkrIiwiKyh0aGlzLl95MT1zK2JlKlQpfX0sYXJjOmZ1bmN0aW9uKGkscyx1LGQscCx2KXtpPStpLHM9K3MsdT0rdSx2PSEhdjt2YXIgYj11Kk1hdGguY29zKGQpLHk9dSpNYXRoLnNpbihkKSxUPWkrYixfPXMreSxBPTFedixQPXY/ZC1wOnAtZDtpZih1PDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrdSk7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK1QrIiwiK186KE1hdGguYWJzKHRoaXMuX3gxLVQpPmFTfHxNYXRoLmFicyh0aGlzLl95MS1fKT5hUykmJih0aGlzLl8rPSJMIitUKyIsIitfKSx1JiYoUDwwJiYoUD1QJWN3ZStjd2UpLFA+R29uP3RoaXMuXys9IkEiK3UrIiwiK3UrIiwwLDEsIitBKyIsIisoaS1iKSsiLCIrKHMteSkrIkEiK3UrIiwiK3UrIiwwLDEsIitBKyIsIisodGhpcy5feDE9VCkrIiwiKyh0aGlzLl95MT1fKTpQPmFTJiYodGhpcy5fKz0iQSIrdSsiLCIrdSsiLDAsIisgKyhQPj1vd2UpKyIsIitBKyIsIisodGhpcy5feDE9aSt1Kk1hdGguY29zKHApKSsiLCIrKHRoaXMuX3kxPXMrdSpNYXRoLnNpbihwKSkpKX0scmVjdDpmdW5jdGlvbihpLHMsdSxkKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2kpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3MpKyJoIisgK3UrInYiKyArZCsiaCIrLXUrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtmdW5jdGlvbiBTV2UoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGl9fWZ1bmN0aW9uIEtvbihpKXtyZXR1cm4gaVswXX1mdW5jdGlvbiBXb24oaSl7cmV0dXJuIGlbMV19dmFyIFlvbj1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gWG9uKGkpe3JldHVybiBpLnNvdXJjZX1mdW5jdGlvbiBRb24oaSl7cmV0dXJuIGkudGFyZ2V0fWZ1bmN0aW9uIEpvbihpKXt2YXIgcz1Yb24sdT1Rb24sZD1Lb24scD1Xb24sdj1udWxsO2Z1bmN0aW9uIGIoKXt2YXIgeSxUPVlvbi5jYWxsKGFyZ3VtZW50cyksXz1zLmFwcGx5KHRoaXMsVCksQT11LmFwcGx5KHRoaXMsVCk7aWYodnx8KHY9eT1DV2UoKSksaSh2LCtkLmFwcGx5KHRoaXMsKFRbMF09XyxUKSksK3AuYXBwbHkodGhpcyxUKSwrZC5hcHBseSh0aGlzLChUWzBdPUEsVCkpLCtwLmFwcGx5KHRoaXMsVCkpLHkpcmV0dXJuIHY9bnVsbCx5KyIifHxudWxsfXJldHVybiBiLnNvdXJjZT1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz15LGIpOnN9LGIudGFyZ2V0PWZ1bmN0aW9uKHkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXksYik6dX0sYi54PWZ1bmN0aW9uKHkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXR5cGVvZiB5PT0iZnVuY3Rpb24iP3k6U1dlKCt5KSxiKTpkfSxiLnk9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpTV2UoK3kpLGIpOnB9LGIuY29udGV4dD1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj15Pz9udWxsLGIpOnZ9LGJ9ZnVuY3Rpb24gWm9uKGkscyx1LGQscCl7aS5tb3ZlVG8ocyx1KSxpLmJlemllckN1cnZlVG8ocz0ocytkKS8yLHUscyxwLGQscCl9ZnVuY3Rpb24gZWNuKCl7cmV0dXJuIEpvbihab24pfWZ1bmN0aW9uIHRjbihpKXtyZXR1cm5baS5zb3VyY2UueDEsaS55MF19ZnVuY3Rpb24gbmNuKGkpe3JldHVybltpLnRhcmdldC54MCxpLnkxXX1mdW5jdGlvbiByY24oKXtyZXR1cm4gZWNuKCkuc291cmNlKHRjbikudGFyZ2V0KG5jbil9Y29uc3QgX1dlPWNsYXNzIGFCZXtzdGF0aWMgbmV4dChzKXtyZXR1cm4gbmV3IGFCZShzKyArK2FCZS5jb3VudCl9Y29uc3RydWN0b3Iocyl7dGhpcy5pZD1zLHRoaXMuaHJlZj1gIyR7c31gfXRvU3RyaW5nKCl7cmV0dXJuInVybCgiK3RoaXMuaHJlZisiKSJ9fTtfV2UuY291bnQ9MDtsZXQgQVdlPV9XZTtjb25zdCBpY249e2xlZnQ6am9uLHJpZ2h0OiRvbixjZW50ZXI6em9uLGp1c3RpZnk6eVdlfSxzY249e2RyYXc6ZnVuY3Rpb24oaSxzLHUsZCl7Y29uc3R7c2VjdXJpdHlMZXZlbDpwLHNhbmtleTp2fT1xdCgpLGI9WmplLnNhbmtleTtsZXQgeTtwPT09InNhbmRib3giJiYoeT1JcigiI2kiK3MpKTtjb25zdCBUPUlyKHA9PT0ic2FuZGJveCI/eS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksXz1wPT09InNhbmRib3giP1Quc2VsZWN0KGBbaWQ9IiR7c30iXWApOklyKGBbaWQ9IiR7c30iXWApLEE9KHY9PW51bGw/dm9pZCAwOnYud2lkdGgpPz9iLndpZHRoLFA9KHY9PW51bGw/dm9pZCAwOnYuaGVpZ2h0KT8/Yi53aWR0aCxSPSh2PT1udWxsP3ZvaWQgMDp2LnVzZU1heFdpZHRoKT8/Yi51c2VNYXhXaWR0aCxGPSh2PT1udWxsP3ZvaWQgMDp2Lm5vZGVBbGlnbm1lbnQpPz9iLm5vZGVBbGlnbm1lbnQsaj0odj09bnVsbD92b2lkIDA6di5wcmVmaXgpPz9iLnByZWZpeCxLPSh2PT1udWxsP3ZvaWQgMDp2LnN1ZmZpeCk/P2Iuc3VmZml4LGVlPSh2PT1udWxsP3ZvaWQgMDp2LnNob3dWYWx1ZXMpPz9iLnNob3dWYWx1ZXMsaWU9ZC5kYi5nZXRHcmFwaCgpLG9lPWljbltGXSxwZT0xMDtVb24oKS5ub2RlSWQoZ2U9PmdlLmlkKS5ub2RlV2lkdGgocGUpLm5vZGVQYWRkaW5nKDEwKyhlZT8xNTowKSkubm9kZUFsaWduKG9lKS5leHRlbnQoW1swLDBdLFtBLFBdXSkoaWUpO2NvbnN0IGFlPV9GKHpGZSk7Xy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGVzIikuc2VsZWN0QWxsKCIubm9kZSIpLmRhdGEoaWUubm9kZXMpLmpvaW4oImciKS5hdHRyKCJjbGFzcyIsIm5vZGUiKS5hdHRyKCJpZCIsZ2U9PihnZS51aWQ9QVdlLm5leHQoIm5vZGUtIikpLmlkKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGdlKXtyZXR1cm4idHJhbnNsYXRlKCIrZ2UueDArIiwiK2dlLnkwKyIpIn0pLmF0dHIoIngiLGdlPT5nZS54MCkuYXR0cigieSIsZ2U9PmdlLnkwKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJoZWlnaHQiLGdlPT5nZS55MS1nZS55MCkuYXR0cigid2lkdGgiLGdlPT5nZS54MS1nZS54MCkuYXR0cigiZmlsbCIsZ2U9PmFlKGdlLmlkKSk7Y29uc3QgbmU9KHtpZDpnZSx2YWx1ZTpXfSk9PmVlP2Ake2dlfQoke2p9JHtNYXRoLnJvdW5kKFcqMTAwKS8xMDB9JHtLfWA6Z2U7Xy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUtbGFiZWxzIikuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigiZm9udC1zaXplIiwxNCkuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShpZS5ub2Rlcykuam9pbigidGV4dCIpLmF0dHIoIngiLGdlPT5nZS54MDxBLzI/Z2UueDErNjpnZS54MC02KS5hdHRyKCJ5IixnZT0+KGdlLnkxK2dlLnkwKS8yKS5hdHRyKCJkeSIsYCR7ZWU/IjAiOiIwLjM1In1lbWApLmF0dHIoInRleHQtYW5jaG9yIixnZT0+Z2UueDA8QS8yPyJzdGFydCI6ImVuZCIpLnRleHQobmUpO2NvbnN0IHNlPV8uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsaW5rcyIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLC41KS5zZWxlY3RBbGwoIi5saW5rIikuZGF0YShpZS5saW5rcykuam9pbigiZyIpLmF0dHIoImNsYXNzIiwibGluayIpLnN0eWxlKCJtaXgtYmxlbmQtbW9kZSIsIm11bHRpcGx5IiksZGU9KHY9PW51bGw/dm9pZCAwOnYubGlua0NvbG9yKXx8ImdyYWRpZW50IjtpZihkZT09PSJncmFkaWVudCIpe2NvbnN0IGdlPXNlLmFwcGVuZCgibGluZWFyR3JhZGllbnQiKS5hdHRyKCJpZCIsVz0+KFcudWlkPUFXZS5uZXh0KCJsaW5lYXJHcmFkaWVudC0iKSkuaWQpLmF0dHIoImdyYWRpZW50VW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIngxIixXPT5XLnNvdXJjZS54MSkuYXR0cigieDIiLFc9PlcudGFyZ2V0LngwKTtnZS5hcHBlbmQoInN0b3AiKS5hdHRyKCJvZmZzZXQiLCIwJSIpLmF0dHIoInN0b3AtY29sb3IiLFc9PmFlKFcuc291cmNlLmlkKSksZ2UuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IiwiMTAwJSIpLmF0dHIoInN0b3AtY29sb3IiLFc9PmFlKFcudGFyZ2V0LmlkKSl9bGV0IFg7c3dpdGNoKGRlKXtjYXNlImdyYWRpZW50IjpYPWdlPT5nZS51aWQ7YnJlYWs7Y2FzZSJzb3VyY2UiOlg9Z2U9PmFlKGdlLnNvdXJjZS5pZCk7YnJlYWs7Y2FzZSJ0YXJnZXQiOlg9Z2U9PmFlKGdlLnRhcmdldC5pZCk7YnJlYWs7ZGVmYXVsdDpYPWRlfXNlLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHJjbigpKS5hdHRyKCJzdHJva2UiLFgpLmF0dHIoInN0cm9rZS13aWR0aCIsZ2U9Pk1hdGgubWF4KDEsZ2Uud2lkdGgpKSx5OSh2b2lkIDAsXywwLFIpfX0sYWNuPWk9PmkucmVwbGFjZUFsbCgvXlteXFNcblxyXSt8W15cU1xuXHJdKyQvZywiIikucmVwbGFjZUFsbCgvKFtcblxyXSkrL2csYApgKS50cmltKCksb2NuPU5KLnBhcnNlLmJpbmQoTkopO05KLnBhcnNlPWk9Pm9jbihhY24oaSkpO2NvbnN0IGNjbj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOk5KLGRiOkZvbixyZW5kZXJlcjpzY259fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBsd2U9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihwZSxiZSxhZSxuZSl7Zm9yKGFlPWFlfHx7fSxuZT1wZS5sZW5ndGg7bmUtLTthZVtwZVtuZV1dPWJlKTtyZXR1cm4gYWV9LHM9WzEsN10sdT1bMSwxM10sZD1bMSwxNF0scD1bMSwxNV0sdj1bMSwxOV0sYj1bMSwxNl0seT1bMSwxN10sVD1bMSwxOF0sXz1bOCwzMF0sQT1bOCwyMSwyOCwyOSwzMCwzMSwzMiw0MCw0NCw0N10sUD1bMSwyM10sUj1bMSwyNF0sRj1bOCwxNSwxNiwyMSwyOCwyOSwzMCwzMSwzMiw0MCw0NCw0N10saj1bOCwxNSwxNiwyMSwyNywyOCwyOSwzMCwzMSwzMiw0MCw0NCw0N10sSz1bMSw0OV0sZWU9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzcGFjZUxpbmVzOjMsU1BBQ0VMSU5FOjQsTkw6NSxzZXBhcmF0b3I6NixTUEFDRTo3LEVPRjo4LHN0YXJ0OjksQkxPQ0tfRElBR1JBTV9LRVk6MTAsZG9jdW1lbnQ6MTEsc3RvcDoxMixzdGF0ZW1lbnQ6MTMsbGluazoxNCxMSU5LOjE1LFNUQVJUX0xJTks6MTYsTElOS19MQUJFTDoxNyxTVFI6MTgsbm9kZVN0YXRlbWVudDoxOSxjb2x1bW5zU3RhdGVtZW50OjIwLFNQQUNFX0JMT0NLOjIxLGJsb2NrU3RhdGVtZW50OjIyLGNsYXNzRGVmU3RhdGVtZW50OjIzLGNzc0NsYXNzU3RhdGVtZW50OjI0LHN0eWxlU3RhdGVtZW50OjI1LG5vZGU6MjYsU0laRToyNyxDT0xVTU5TOjI4LCJpZC1ibG9jayI6MjksZW5kOjMwLGJsb2NrOjMxLE5PREVfSUQ6MzIsbm9kZVNoYXBlTkxhYmVsOjMzLGRpckxpc3Q6MzQsRElSOjM1LE5PREVfRFNUQVJUOjM2LE5PREVfREVORDozNyxCTE9DS19BUlJPV19TVEFSVDozOCxCTE9DS19BUlJPV19FTkQ6MzksY2xhc3NEZWY6NDAsQ0xBU1NERUZfSUQ6NDEsQ0xBU1NERUZfU1RZTEVPUFRTOjQyLERFRkFVTFQ6NDMsY2xhc3M6NDQsQ0xBU1NFTlRJVFlfSURTOjQ1LFNUWUxFQ0xBU1M6NDYsc3R5bGU6NDcsU1RZTEVfRU5USVRZX0lEUzo0OCxTVFlMRV9ERUZJTklUSU9OX0RBVEE6NDksJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFTElORSIsNToiTkwiLDc6IlNQQUNFIiw4OiJFT0YiLDEwOiJCTE9DS19ESUFHUkFNX0tFWSIsMTU6IkxJTksiLDE2OiJTVEFSVF9MSU5LIiwxNzoiTElOS19MQUJFTCIsMTg6IlNUUiIsMjE6IlNQQUNFX0JMT0NLIiwyNzoiU0laRSIsMjg6IkNPTFVNTlMiLDI5OiJpZC1ibG9jayIsMzA6ImVuZCIsMzE6ImJsb2NrIiwzMjoiTk9ERV9JRCIsMzU6IkRJUiIsMzY6Ik5PREVfRFNUQVJUIiwzNzoiTk9ERV9ERU5EIiwzODoiQkxPQ0tfQVJST1dfU1RBUlQiLDM5OiJCTE9DS19BUlJPV19FTkQiLDQwOiJjbGFzc0RlZiIsNDE6IkNMQVNTREVGX0lEIiw0MjoiQ0xBU1NERUZfU1RZTEVPUFRTIiw0MzoiREVGQVVMVCIsNDQ6ImNsYXNzIiw0NToiQ0xBU1NFTlRJVFlfSURTIiw0NjoiU1RZTEVDTEFTUyIsNDc6InN0eWxlIiw0ODoiU1RZTEVfRU5USVRZX0lEUyIsNDk6IlNUWUxFX0RFRklOSVRJT05fREFUQSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywyXSxbMywyXSxbNiwxXSxbNiwxXSxbNiwxXSxbOSwzXSxbMTIsMV0sWzEyLDFdLFsxMiwyXSxbMTIsMl0sWzExLDFdLFsxMSwyXSxbMTQsMV0sWzE0LDRdLFsxMywxXSxbMTMsMV0sWzEzLDFdLFsxMywxXSxbMTMsMV0sWzEzLDFdLFsxMywxXSxbMTksM10sWzE5LDJdLFsxOSwxXSxbMjAsMV0sWzIyLDRdLFsyMiwzXSxbMjYsMV0sWzI2LDJdLFszNCwxXSxbMzQsMl0sWzMzLDNdLFszMyw0XSxbMjMsM10sWzIzLDNdLFsyNCwzXSxbMjUsM11dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oYmUsYWUsbmUsc2UsZGUsWCxnZSl7dmFyIFc9WC5sZW5ndGgtMTtzd2l0Y2goZGUpe2Nhc2UgNDpzZS5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogc2VwYXJhdG9yIChOTCkgIik7YnJlYWs7Y2FzZSA1OnNlLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBzZXBhcmF0b3IgKFNwYWNlKSAiKTticmVhaztjYXNlIDY6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IHNlcGFyYXRvciAoRU9GKSAiKTticmVhaztjYXNlIDc6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IGhpZXJhcmNoeTogIixYW1ctMV0pLHNlLnNldEhpZXJhcmNoeShYW1ctMV0pO2JyZWFrO2Nhc2UgODpzZS5nZXRMb2dnZXIoKS5kZWJ1ZygiU3RvcCBOTCAiKTticmVhaztjYXNlIDk6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlN0b3AgRU9GICIpO2JyZWFrO2Nhc2UgMTA6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlN0b3AgTkwyICIpO2JyZWFrO2Nhc2UgMTE6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlN0b3AgRU9GMiAiKTticmVhaztjYXNlIDEyOnNlLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBzdGF0ZW1lbnQ6ICIsWFtXXSksdHlwZW9mIFhbV10ubGVuZ3RoPT0ibnVtYmVyIj90aGlzLiQ9WFtXXTp0aGlzLiQ9W1hbV11dO2JyZWFrO2Nhc2UgMTM6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IHN0YXRlbWVudCAjMjogIixYW1ctMV0pLHRoaXMuJD1bWFtXLTFdXS5jb25jYXQoWFtXXSk7YnJlYWs7Y2FzZSAxNDpzZS5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogbGluazogIixYW1ddLGJlKSx0aGlzLiQ9e2VkZ2VUeXBlU3RyOlhbV10sbGFiZWw6IiJ9O2JyZWFrO2Nhc2UgMTU6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IExBQkVMIGxpbms6ICIsWFtXLTNdLFhbVy0xXSxYW1ddKSx0aGlzLiQ9e2VkZ2VUeXBlU3RyOlhbV10sbGFiZWw6WFtXLTFdfTticmVhaztjYXNlIDE4OmNvbnN0IHhlPXBhcnNlSW50KFhbV10pLFU9c2UuZ2VuZXJhdGVJZCgpO3RoaXMuJD17aWQ6VSx0eXBlOiJzcGFjZSIsbGFiZWw6IiIsd2lkdGg6eGUsY2hpbGRyZW46W119O2JyZWFrO2Nhc2UgMjM6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IChub2RlU3RhdGVtZW50IGxpbmsgbm9kZSkgIixYW1ctMl0sWFtXLTFdLFhbV10sIiB0eXBlc3RyOiAiLFhbVy0xXS5lZGdlVHlwZVN0cik7Y29uc3QgRmU9c2UuZWRnZVN0clRvRWRnZURhdGEoWFtXLTFdLmVkZ2VUeXBlU3RyKTt0aGlzLiQ9W3tpZDpYW1ctMl0uaWQsbGFiZWw6WFtXLTJdLmxhYmVsLHR5cGU6WFtXLTJdLnR5cGUsZGlyZWN0aW9uczpYW1ctMl0uZGlyZWN0aW9uc30se2lkOlhbVy0yXS5pZCsiLSIrWFtXXS5pZCxzdGFydDpYW1ctMl0uaWQsZW5kOlhbV10uaWQsbGFiZWw6WFtXLTFdLmxhYmVsLHR5cGU6ImVkZ2UiLGRpcmVjdGlvbnM6WFtXXS5kaXJlY3Rpb25zLGFycm93VHlwZUVuZDpGZSxhcnJvd1R5cGVTdGFydDoiYXJyb3dfb3BlbiJ9LHtpZDpYW1ddLmlkLGxhYmVsOlhbV10ubGFiZWwsdHlwZTpzZS50eXBlU3RyMlR5cGUoWFtXXS50eXBlU3RyKSxkaXJlY3Rpb25zOlhbV10uZGlyZWN0aW9uc31dO2JyZWFrO2Nhc2UgMjQ6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IG5vZGVTdGF0ZW1lbnQgKGFiYzg4IG5vZGUgc2l6ZSkgIixYW1ctMV0sWFtXXSksdGhpcy4kPXtpZDpYW1ctMV0uaWQsbGFiZWw6WFtXLTFdLmxhYmVsLHR5cGU6c2UudHlwZVN0cjJUeXBlKFhbVy0xXS50eXBlU3RyKSxkaXJlY3Rpb25zOlhbVy0xXS5kaXJlY3Rpb25zLHdpZHRoSW5Db2x1bW5zOnBhcnNlSW50KFhbV10sMTApfTticmVhaztjYXNlIDI1OnNlLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBub2RlU3RhdGVtZW50IChub2RlKSAiLFhbV10pLHRoaXMuJD17aWQ6WFtXXS5pZCxsYWJlbDpYW1ddLmxhYmVsLHR5cGU6c2UudHlwZVN0cjJUeXBlKFhbV10udHlwZVN0ciksZGlyZWN0aW9uczpYW1ddLmRpcmVjdGlvbnMsd2lkdGhJbkNvbHVtbnM6MX07YnJlYWs7Y2FzZSAyNjpzZS5nZXRMb2dnZXIoKS5kZWJ1ZygiQVBBMTIzIix0aGlzP3RoaXM6Im5hIiksc2UuZ2V0TG9nZ2VyKCkuZGVidWcoIkNPTFVNTlM6ICIsWFtXXSksdGhpcy4kPXt0eXBlOiJjb2x1bW4tc2V0dGluZyIsY29sdW1uczpYW1ddPT09ImF1dG8iPy0xOnBhcnNlSW50KFhbV10pfTticmVhaztjYXNlIDI3OnNlLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBpZC1ibG9jayBzdGF0ZW1lbnQgOiAiLFhbVy0yXSxYW1ctMV0pLHNlLmdlbmVyYXRlSWQoKSx0aGlzLiQ9ey4uLlhbVy0yXSx0eXBlOiJjb21wb3NpdGUiLGNoaWxkcmVuOlhbVy0xXX07YnJlYWs7Y2FzZSAyODpzZS5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogYmxvY2tTdGF0ZW1lbnQgOiAiLFhbVy0yXSxYW1ctMV0sWFtXXSk7Y29uc3QgUGU9c2UuZ2VuZXJhdGVJZCgpO3RoaXMuJD17aWQ6UGUsdHlwZToiY29tcG9zaXRlIixsYWJlbDoiIixjaGlsZHJlbjpYW1ctMV19O2JyZWFrO2Nhc2UgMjk6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IG5vZGUgKE5PREVfSUQgc2VwYXJhdG9yKTogIixYW1ddKSx0aGlzLiQ9e2lkOlhbV119O2JyZWFrO2Nhc2UgMzA6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IG5vZGUgKE5PREVfSUQgbm9kZVNoYXBlTkxhYmVsIHNlcGFyYXRvcik6ICIsWFtXLTFdLFhbV10pLHRoaXMuJD17aWQ6WFtXLTFdLGxhYmVsOlhbV10ubGFiZWwsdHlwZVN0cjpYW1ddLnR5cGVTdHIsZGlyZWN0aW9uczpYW1ddLmRpcmVjdGlvbnN9O2JyZWFrO2Nhc2UgMzE6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IGRpckxpc3Q6ICIsWFtXXSksdGhpcy4kPVtYW1ddXTticmVhaztjYXNlIDMyOnNlLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBkaXJMaXN0OiAiLFhbVy0xXSxYW1ddKSx0aGlzLiQ9W1hbVy0xXV0uY29uY2F0KFhbV10pO2JyZWFrO2Nhc2UgMzM6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IG5vZGVTaGFwZU5MYWJlbDogIixYW1ctMl0sWFtXLTFdLFhbV10pLHRoaXMuJD17dHlwZVN0cjpYW1ctMl0rWFtXXSxsYWJlbDpYW1ctMV19O2JyZWFrO2Nhc2UgMzQ6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IEJMT0NLX0FSUk9XIG5vZGVTaGFwZU5MYWJlbDogIixYW1ctM10sWFtXLTJdLCIgIzM6IixYW1ctMV0sWFtXXSksdGhpcy4kPXt0eXBlU3RyOlhbVy0zXStYW1ddLGxhYmVsOlhbVy0yXSxkaXJlY3Rpb25zOlhbVy0xXX07YnJlYWs7Y2FzZSAzNTpjYXNlIDM2OnRoaXMuJD17dHlwZToiY2xhc3NEZWYiLGlkOlhbVy0xXS50cmltKCksY3NzOlhbV10udHJpbSgpfTticmVhaztjYXNlIDM3OnRoaXMuJD17dHlwZToiYXBwbHlDbGFzcyIsaWQ6WFtXLTFdLnRyaW0oKSxzdHlsZUNsYXNzOlhbV10udHJpbSgpfTticmVhaztjYXNlIDM4OnRoaXMuJD17dHlwZToiYXBwbHlTdHlsZXMiLGlkOlhbVy0xXS50cmltKCksc3R5bGVzU3RyOlhbV10udHJpbSgpfTticmVha319LHRhYmxlOlt7OToxLDEwOlsxLDJdfSx7MTpbM119LHsxMTozLDEzOjQsMTk6NSwyMDo2LDIxOnMsMjI6OCwyMzo5LDI0OjEwLDI1OjExLDI2OjEyLDI4OnUsMjk6ZCwzMTpwLDMyOnYsNDA6Yiw0NDp5LDQ3OlR9LHs4OlsxLDIwXX0saShfLFsyLDEyXSx7MTM6NCwxOTo1LDIwOjYsMjI6OCwyMzo5LDI0OjEwLDI1OjExLDI2OjEyLDExOjIxLDIxOnMsMjg6dSwyOTpkLDMxOnAsMzI6diw0MDpiLDQ0OnksNDc6VH0pLGkoQSxbMiwxNl0sezE0OjIyLDE1OlAsMTY6Un0pLGkoQSxbMiwxN10pLGkoQSxbMiwxOF0pLGkoQSxbMiwxOV0pLGkoQSxbMiwyMF0pLGkoQSxbMiwyMV0pLGkoQSxbMiwyMl0pLGkoRixbMiwyNV0sezI3OlsxLDI1XX0pLGkoQSxbMiwyNl0pLHsxOToyNiwyNjoxMiwzMjp2fSx7MTE6MjcsMTM6NCwxOTo1LDIwOjYsMjE6cywyMjo4LDIzOjksMjQ6MTAsMjU6MTEsMjY6MTIsMjg6dSwyOTpkLDMxOnAsMzI6diw0MDpiLDQ0OnksNDc6VH0sezQxOlsxLDI4XSw0MzpbMSwyOV19LHs0NTpbMSwzMF19LHs0ODpbMSwzMV19LGkoaixbMiwyOV0sezMzOjMyLDM2OlsxLDMzXSwzODpbMSwzNF19KSx7MTpbMiw3XX0saShfLFsyLDEzXSksezI2OjM1LDMyOnZ9LHszMjpbMiwxNF19LHsxNzpbMSwzNl19LGkoRixbMiwyNF0pLHsxMTozNywxMzo0LDE0OjIyLDE1OlAsMTY6UiwxOTo1LDIwOjYsMjE6cywyMjo4LDIzOjksMjQ6MTAsMjU6MTEsMjY6MTIsMjg6dSwyOTpkLDMxOnAsMzI6diw0MDpiLDQ0OnksNDc6VH0sezMwOlsxLDM4XX0sezQyOlsxLDM5XX0sezQyOlsxLDQwXX0sezQ2OlsxLDQxXX0sezQ5OlsxLDQyXX0saShqLFsyLDMwXSksezE4OlsxLDQzXX0sezE4OlsxLDQ0XX0saShGLFsyLDIzXSksezE4OlsxLDQ1XX0sezMwOlsxLDQ2XX0saShBLFsyLDI4XSksaShBLFsyLDM1XSksaShBLFsyLDM2XSksaShBLFsyLDM3XSksaShBLFsyLDM4XSksezM3OlsxLDQ3XX0sezM0OjQ4LDM1Okt9LHsxNTpbMSw1MF19LGkoQSxbMiwyN10pLGkoaixbMiwzM10pLHszOTpbMSw1MV19LHszNDo1MiwzNTpLLDM5OlsyLDMxXX0sezMyOlsyLDE1XX0saShqLFsyLDM0XSksezM5OlsyLDMyXX1dLGRlZmF1bHRBY3Rpb25zOnsyMDpbMiw3XSwyMzpbMiwxNF0sNTA6WzIsMTVdLDUyOlsyLDMyXX0scGFyc2VFcnJvcjpmdW5jdGlvbihiZSxhZSl7aWYoYWUucmVjb3ZlcmFibGUpdGhpcy50cmFjZShiZSk7ZWxzZXt2YXIgbmU9bmV3IEVycm9yKGJlKTt0aHJvdyBuZS5oYXNoPWFlLG5lfX0scGFyc2U6ZnVuY3Rpb24oYmUpe3ZhciBhZT10aGlzLG5lPVswXSxzZT1bXSxkZT1bbnVsbF0sWD1bXSxnZT10aGlzLnRhYmxlLFc9IiIseGU9MCxVPTAsRmU9MixQZT0xLGplPVguc2xpY2UuY2FsbChhcmd1bWVudHMsMSksSWU9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxTZT17eXk6e319O2Zvcih2YXIgQ2UgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxDZSkmJihTZS55eVtDZV09dGhpcy55eVtDZV0pO0llLnNldElucHV0KGJlLFNlLnl5KSxTZS55eS5sZXhlcj1JZSxTZS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgSWUueXlsbG9jPiJ1IiYmKEllLnl5bGxvYz17fSk7dmFyIGtlPUllLnl5bGxvYztYLnB1c2goa2UpO3ZhciBLZT1JZS5vcHRpb25zJiZJZS5vcHRpb25zLnJhbmdlczt0eXBlb2YgU2UueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9U2UueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gRnQoKXt2YXIga3Q7cmV0dXJuIGt0PXNlLnBvcCgpfHxJZS5sZXgoKXx8UGUsdHlwZW9mIGt0IT0ibnVtYmVyIiYmKGt0IGluc3RhbmNlb2YgQXJyYXkmJihzZT1rdCxrdD1zZS5wb3AoKSksa3Q9YWUuc3ltYm9sc19ba3RdfHxrdCksa3R9Zm9yKHZhciBOZSxnbixfdCxFdCxHdD17fSxsbix4dCxQdCxRZTs7KXtpZihnbj1uZVtuZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tnbl0/X3Q9dGhpcy5kZWZhdWx0QWN0aW9uc1tnbl06KChOZT09PW51bGx8fHR5cGVvZiBOZT4idSIpJiYoTmU9RnQoKSksX3Q9Z2VbZ25dJiZnZVtnbl1bTmVdKSx0eXBlb2YgX3Q+InUifHwhX3QubGVuZ3RofHwhX3RbMF0pe3ZhciBEdD0iIjtRZT1bXTtmb3IobG4gaW4gZ2VbZ25dKXRoaXMudGVybWluYWxzX1tsbl0mJmxuPkZlJiZRZS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bbG5dKyInIik7SWUuc2hvd1Bvc2l0aW9uP0R0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHhlKzEpK2A6CmArSWUuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtRZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW05lXXx8TmUpKyInIjpEdD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh4ZSsxKSsiOiBVbmV4cGVjdGVkICIrKE5lPT1QZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tOZV18fE5lKSsiJyIpLHRoaXMucGFyc2VFcnJvcihEdCx7dGV4dDpJZS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bTmVdfHxOZSxsaW5lOkllLnl5bGluZW5vLGxvYzprZSxleHBlY3RlZDpRZX0pfWlmKF90WzBdaW5zdGFuY2VvZiBBcnJheSYmX3QubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitnbisiLCB0b2tlbjogIitOZSk7c3dpdGNoKF90WzBdKXtjYXNlIDE6bmUucHVzaChOZSksZGUucHVzaChJZS55eXRleHQpLFgucHVzaChJZS55eWxsb2MpLG5lLnB1c2goX3RbMV0pLE5lPW51bGwsVT1JZS55eWxlbmcsVz1JZS55eXRleHQseGU9SWUueXlsaW5lbm8sa2U9SWUueXlsbG9jO2JyZWFrO2Nhc2UgMjppZih4dD10aGlzLnByb2R1Y3Rpb25zX1tfdFsxXV1bMV0sR3QuJD1kZVtkZS5sZW5ndGgteHRdLEd0Ll8kPXtmaXJzdF9saW5lOlhbWC5sZW5ndGgtKHh0fHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6WFtYLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOlhbWC5sZW5ndGgtKHh0fHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlhbWC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEtlJiYoR3QuXyQucmFuZ2U9W1hbWC5sZW5ndGgtKHh0fHwxKV0ucmFuZ2VbMF0sWFtYLmxlbmd0aC0xXS5yYW5nZVsxXV0pLEV0PXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShHdCxbVyxVLHhlLFNlLnl5LF90WzFdLGRlLFhdLmNvbmNhdChqZSkpLHR5cGVvZiBFdDwidSIpcmV0dXJuIEV0O3h0JiYobmU9bmUuc2xpY2UoMCwtMSp4dCoyKSxkZT1kZS5zbGljZSgwLC0xKnh0KSxYPVguc2xpY2UoMCwtMSp4dCkpLG5lLnB1c2godGhpcy5wcm9kdWN0aW9uc19bX3RbMV1dWzBdKSxkZS5wdXNoKEd0LiQpLFgucHVzaChHdC5fJCksUHQ9Z2VbbmVbbmUubGVuZ3RoLTJdXVtuZVtuZS5sZW5ndGgtMV1dLG5lLnB1c2goUHQpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxpZT1mdW5jdGlvbigpe3ZhciBwZT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihhZSxuZSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihhZSxuZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYWUpfSxzZXRJbnB1dDpmdW5jdGlvbihiZSxhZSl7cmV0dXJuIHRoaXMueXk9YWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PWJlLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBiZT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9YmUsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPWJlLHRoaXMubWF0Y2hlZCs9YmU7dmFyIGFlPWJlLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gYWU/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLGJlfSx1bnB1dDpmdW5jdGlvbihiZSl7dmFyIGFlPWJlLmxlbmd0aCxuZT1iZS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PWJlK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1hZSksdGhpcy5vZmZzZXQtPWFlO3ZhciBzZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuZS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW5lLmxlbmd0aC0xKTt2YXIgZGU9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm5lPyhuZS5sZW5ndGg9PT1zZS5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3NlW3NlLmxlbmd0aC1uZS5sZW5ndGhdLmxlbmd0aC1uZVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWFlfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2RlWzBdLGRlWzBdK3RoaXMueXlsZW5nLWFlXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oYmUpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShiZSkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgYmU9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihiZS5sZW5ndGg+MjA/Ii4uLiI6IiIpK2JlLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIGJlPXRoaXMubWF0Y2g7cmV0dXJuIGJlLmxlbmd0aDwyMCYmKGJlKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1iZS5sZW5ndGgpKSwoYmUuc3Vic3RyKDAsMjApKyhiZS5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGJlPXRoaXMucGFzdElucHV0KCksYWU9bmV3IEFycmF5KGJlLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIGJlK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCthZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oYmUsYWUpe3ZhciBuZSxzZSxkZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoZGU9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoZGUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksc2U9YmVbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLHNlJiYodGhpcy55eWxpbmVubys9c2UubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46c2U/c2Vbc2UubGVuZ3RoLTFdLmxlbmd0aC1zZVtzZS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitiZVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1iZVswXSx0aGlzLm1hdGNoKz1iZVswXSx0aGlzLm1hdGNoZXM9YmUsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoYmVbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPWJlWzBdLG5lPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGFlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG5lKXJldHVybiBuZTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgWCBpbiBkZSl0aGlzW1hdPWRlW1hdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIGJlLGFlLG5lLHNlO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGRlPXRoaXMuX2N1cnJlbnRSdWxlcygpLFg9MDtYPGRlLmxlbmd0aDtYKyspaWYobmU9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tkZVtYXV0pLG5lJiYoIWFlfHxuZVswXS5sZW5ndGg+YWVbMF0ubGVuZ3RoKSl7aWYoYWU9bmUsc2U9WCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihiZT10aGlzLnRlc3RfbWF0Y2gobmUsZGVbWF0pLGJlIT09ITEpcmV0dXJuIGJlO2lmKHRoaXMuX2JhY2t0cmFjayl7YWU9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gYWU/KGJlPXRoaXMudGVzdF9tYXRjaChhZSxkZVtzZV0pLGJlIT09ITE/YmU6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBhZT10aGlzLm5leHQoKTtyZXR1cm4gYWV8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKGFlKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goYWUpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBhZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBhZT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKGFlKXtyZXR1cm4gYWU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhhZXx8MCksYWU+PTA/dGhpcy5jb25kaXRpb25TdGFja1thZV06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oYWUpe3RoaXMuYmVnaW4oYWUpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGFlLG5lLHNlLGRlKXtzd2l0Y2goc2Upe2Nhc2UgMDpyZXR1cm4gMTA7Y2FzZSAxOnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiRm91bmQgc3BhY2UtYmxvY2siKSwzMTtjYXNlIDI6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJGb3VuZCBubC1ibG9jayIpLDMxO2Nhc2UgMzpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkZvdW5kIHNwYWNlLWJsb2NrIiksMjk7Y2FzZSA0OmFlLmdldExvZ2dlcigpLmRlYnVnKCIuIixuZS55eXRleHQpO2JyZWFrO2Nhc2UgNTphZS5nZXRMb2dnZXIoKS5kZWJ1ZygiXyIsbmUueXl0ZXh0KTticmVhaztjYXNlIDY6cmV0dXJuIDU7Y2FzZSA3OnJldHVybiBuZS55eXRleHQ9LTEsMjg7Y2FzZSA4OnJldHVybiBuZS55eXRleHQ9bmUueXl0ZXh0LnJlcGxhY2UoL2NvbHVtbnNccysvLCIiKSxhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiQ09MVU1OUyAoTEVYKSIsbmUueXl0ZXh0KSwyODtjYXNlIDk6dGhpcy5wdXNoU3RhdGUoIm1kX3N0cmluZyIpO2JyZWFrO2Nhc2UgMTA6cmV0dXJuIk1EX1NUUiI7Y2FzZSAxMTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMjp0aGlzLnB1c2hTdGF0ZSgic3RyaW5nIik7YnJlYWs7Y2FzZSAxMzphZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTEVYOiBQT1BQSU5HIFNUUjoiLG5lLnl5dGV4dCksdGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTQ6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMRVg6IFNUUiBlbmQ6IixuZS55eXRleHQpLCJTVFIiO2Nhc2UgMTU6cmV0dXJuIG5lLnl5dGV4dD1uZS55eXRleHQucmVwbGFjZSgvc3BhY2VcOi8sIiIpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJTUEFDRSBOVU0gKExFWCkiLG5lLnl5dGV4dCksMjE7Y2FzZSAxNjpyZXR1cm4gbmUueXl0ZXh0PSIxIixhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiQ09MVU1OUyAoTEVYKSIsbmUueXl0ZXh0KSwyMTtjYXNlIDE3OnJldHVybiA0MztjYXNlIDE4OnJldHVybiJMSU5LU1RZTEUiO2Nhc2UgMTk6cmV0dXJuIklOVEVSUE9MQVRFIjtjYXNlIDIwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NERUYiKSw0MDtjYXNlIDIxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkNMQVNTREVGSUQiKSwiREVGQVVMVF9DTEFTU0RFRl9JRCI7Y2FzZSAyMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJDTEFTU0RFRklEIiksNDE7Y2FzZSAyMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQyO2Nhc2UgMjQ6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJDTEFTUyIpLDQ0O2Nhc2UgMjU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NfU1RZTEUiKSw0NTtjYXNlIDI2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDY7Y2FzZSAyNzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIlNUWUxFX1NUTU5UIiksNDc7Y2FzZSAyODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJTVFlMRV9ERUZJTklUSU9OIiksNDg7Y2FzZSAyOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQ5O2Nhc2UgMzA6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJhY2NfdGl0bGUiKSwiYWNjX3RpdGxlIjtjYXNlIDMxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSAzMjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImFjY19kZXNjciIpLCJhY2NfZGVzY3IiO2Nhc2UgMzM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDM0OnRoaXMucHVzaFN0YXRlKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAzNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzNjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAzNzpyZXR1cm4gMzA7Y2FzZSAzODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7Y2FzZSAzOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7Y2FzZSA0MDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICkpIiksIk5PREVfREVORCI7Y2FzZSA0MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7Y2FzZSA0MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7Y2FzZSA0MzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgtIiksIk5PREVfREVORCI7Y2FzZSA0NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IC0pIiksIk5PREVfREVORCI7Y2FzZSA0NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7Y2FzZSA0NjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IF1dIiksIk5PREVfREVORCI7Y2FzZSA0NzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgiKSwiTk9ERV9ERU5EIjtjYXNlIDQ4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogXSkiKSwiTk9ERV9ERU5EIjtjYXNlIDQ5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogL10iKSwiTk9ERV9ERU5EIjtjYXNlIDUwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogL10iKSwiTk9ERV9ERU5EIjtjYXNlIDUxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKV0iKSwiTk9ERV9ERU5EIjtjYXNlIDUyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKSIpLCJOT0RFX0RFTkQiO2Nhc2UgNTM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBdPiIpLCJOT0RFX0RFTkQiO2Nhc2UgNTQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBdIiksIk5PREVfREVORCI7Y2FzZSA1NTpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6IC0pIiksdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjtjYXNlIDU2OnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKC0iKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNTc6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXhhOiApKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7Y2FzZSA1ODpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNTk6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoKCIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7Y2FzZSA2MDpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNjE6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXhhOiApIiksdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjtjYXNlIDYyOnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7Y2FzZSA2MzpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGM6ID4iKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNjQ6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXhhOiAoWyIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7Y2FzZSA2NTpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNjY6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7Y2FzZSA2NzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjtjYXNlIDY4OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNjk6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7Y2FzZSA3MDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjtjYXNlIDcxOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNzI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7Y2FzZSA3MzpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6IFsiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNzQ6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJCTE9DS19BUlJPVyIpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMRVggQVJSIFNUQVJUIiksMzg7Y2FzZSA3NTpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTk9ERV9JRCIsbmUueXl0ZXh0KSwzMjtjYXNlIDc2OnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBFT0YiLG5lLnl5dGV4dCksODtjYXNlIDc3OnRoaXMucHVzaFN0YXRlKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDc4OnRoaXMucHVzaFN0YXRlKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDc5OnJldHVybiJOT0RFX0RFU0NSIjtjYXNlIDgwOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDgxOmFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IFN0YXJ0aW5nIHN0cmluZyIpLHRoaXMucHVzaFN0YXRlKCJzdHJpbmciKTticmVhaztjYXNlIDgyOmFlLmdldExvZ2dlcigpLmRlYnVnKCJMRVggQVJSOiBTdGFydGluZyBzdHJpbmciKSx0aGlzLnB1c2hTdGF0ZSgic3RyaW5nIik7YnJlYWs7Y2FzZSA4MzpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxFWDogTk9ERV9ERVNDUjoiLG5lLnl5dGV4dCksIk5PREVfREVTQ1IiO2Nhc2UgODQ6YWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxFWCBQT1BQSU5HIiksdGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgODU6YWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogPT5CQUUiKSx0aGlzLnB1c2hTdGF0ZSgiQVJST1dfRElSIik7YnJlYWs7Y2FzZSA4NjpyZXR1cm4gbmUueXl0ZXh0PW5lLnl5dGV4dC5yZXBsYWNlKC9eLFxzKi8sIiIpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXggKHJpZ2h0KTogZGlyOiIsbmUueXl0ZXh0KSwiRElSIjtjYXNlIDg3OnJldHVybiBuZS55eXRleHQ9bmUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleCAobGVmdCk6IixuZS55eXRleHQpLCJESVIiO2Nhc2UgODg6cmV0dXJuIG5lLnl5dGV4dD1uZS55eXRleHQucmVwbGFjZSgvXixccyovLCIiKSxhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4ICh4KToiLG5lLnl5dGV4dCksIkRJUiI7Y2FzZSA4OTpyZXR1cm4gbmUueXl0ZXh0PW5lLnl5dGV4dC5yZXBsYWNlKC9eLFxzKi8sIiIpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXggKHkpOiIsbmUueXl0ZXh0KSwiRElSIjtjYXNlIDkwOnJldHVybiBuZS55eXRleHQ9bmUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleCAodXApOiIsbmUueXl0ZXh0KSwiRElSIjtjYXNlIDkxOnJldHVybiBuZS55eXRleHQ9bmUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleCAoZG93bik6IixuZS55eXRleHQpLCJESVIiO2Nhc2UgOTI6cmV0dXJuIG5lLnl5dGV4dD0iXT4iLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXggKEFSUk9XX0RJUiBlbmQpOiIsbmUueXl0ZXh0KSx0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLCJCTE9DS19BUlJPV19FTkQiO2Nhc2UgOTM6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IExJTksiLCIjIituZS55eXRleHQrIiMiKSwxNTtjYXNlIDk0OnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIixuZS55eXRleHQpLDE1O2Nhc2UgOTU6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IExJTksiLG5lLnl5dGV4dCksMTU7Y2FzZSA5NjpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTElOSyIsbmUueXl0ZXh0KSwxNTtjYXNlIDk3OnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBTVEFSVF9MSU5LIixuZS55eXRleHQpLHRoaXMucHVzaFN0YXRlKCJMTEFCRUwiKSwxNjtjYXNlIDk4OnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBTVEFSVF9MSU5LIixuZS55eXRleHQpLHRoaXMucHVzaFN0YXRlKCJMTEFCRUwiKSwxNjtjYXNlIDk5OnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBTVEFSVF9MSU5LIixuZS55eXRleHQpLHRoaXMucHVzaFN0YXRlKCJMTEFCRUwiKSwxNjtjYXNlIDEwMDp0aGlzLnB1c2hTdGF0ZSgibWRfc3RyaW5nIik7YnJlYWs7Y2FzZSAxMDE6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IFN0YXJ0aW5nIHN0cmluZyIpLHRoaXMucHVzaFN0YXRlKCJzdHJpbmciKSwiTElOS19MQUJFTCI7Y2FzZSAxMDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIiwiIyIrbmUueXl0ZXh0KyIjIiksMTU7Y2FzZSAxMDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIixuZS55eXRleHQpLDE1O2Nhc2UgMTA0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTElOSyIsbmUueXl0ZXh0KSwxNTtjYXNlIDEwNTpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogQ09MT04iLG5lLnl5dGV4dCksbmUueXl0ZXh0PW5lLnl5dGV4dC5zbGljZSgxKSwyN319LHJ1bGVzOlsvXig/OmJsb2NrLWJldGFcYikvLC9eKD86YmxvY2tccyspLywvXig/OmJsb2NrXG4rKS8sL14oPzpibG9jazopLywvXig/Oltcc10rKS8sL14oPzpbXG5dKykvLC9eKD86KChcdTAwMERcdTAwMEEpfChcdTAwMEEpKSkvLC9eKD86Y29sdW1uc1xzK2F1dG9cYikvLC9eKD86Y29sdW1uc1xzK1tcZF0rKS8sL14oPzpbIl1bYF0pLywvXig/OlteYCJdKykvLC9eKD86W2BdWyJdKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OnNwYWNlWzpdXGQrKS8sL14oPzpzcGFjZVxiKS8sL14oPzpkZWZhdWx0XGIpLywvXig/OmxpbmtTdHlsZVxiKS8sL14oPzppbnRlcnBvbGF0ZVxiKS8sL14oPzpjbGFzc0RlZlxzKykvLC9eKD86REVGQVVMVFxzKykvLC9eKD86XHcrXHMrKS8sL14oPzpbXlxuXSopLywvXig/OmNsYXNzXHMrKS8sL14oPzooXHcrKSsoKCxccypcdyspKikpLywvXig/OlteXG5dKikvLC9eKD86c3R5bGVccyspLywvXig/OihcdyspKygoLFxzKlx3KykqKSkvLC9eKD86W15cbl0qKS8sL14oPzphY2NUaXRsZVxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqXHtccyopLywvXig/OltcfV0pLywvXig/OlteXH1dKikvLC9eKD86ZW5kXGJccyopLywvXig/OlwoXChcKCkvLC9eKD86XClcKVwpKS8sL14oPzpbXCldXCkpLywvXig/Olx9XH0pLywvXig/Olx9KS8sL14oPzpcKC0pLywvXig/Oi1cKSkvLC9eKD86XChcKCkvLC9eKD86XF1cXSkvLC9eKD86XCgpLywvXig/OlxdXCkpLywvXig/OlxcXF0pLywvXig/OlwvXF0pLywvXig/OlwpXF0pLywvXig/OltcKV0pLywvXig/OlxdPikvLC9eKD86W1xdXSkvLC9eKD86LVwpKS8sL14oPzpcKC0pLywvXig/OlwpXCkpLywvXig/OlwpKS8sL14oPzpcKFwoXCgpLywvXig/OlwoXCgpLywvXig/Olx7XHspLywvXig/Olx7KS8sL14oPzo+KS8sL14oPzpcKFxbKS8sL14oPzpcKCkvLC9eKD86XFtcWykvLC9eKD86XFtcfCkvLC9eKD86XFtcKCkvLC9eKD86XClcKVwpKS8sL14oPzpcW1xcKS8sL14oPzpcW1wvKS8sL14oPzpcW1xcKS8sL14oPzpcWykvLC9eKD86PFxbKS8sL14oPzpbXlwoXFtcblwtXClce1x9XHNcPFw+Ol0rKS8sL14oPzokKS8sL14oPzpbIl1bYF0pLywvXig/OlsiXVtgXSkvLC9eKD86W15gIl0rKS8sL14oPzpbYF1bIl0pLywvXig/OlsiXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKykvLC9eKD86WyJdKS8sL14oPzpcXT5ccypcKCkvLC9eKD86LD9ccypyaWdodFxzKikvLC9eKD86LD9ccypsZWZ0XHMqKS8sL14oPzosP1xzKnhccyopLywvXig/Oiw/XHMqeVxzKikvLC9eKD86LD9ccyp1cFxzKikvLC9eKD86LD9ccypkb3duXHMqKS8sL14oPzpcKVxzKikvLC9eKD86XHMqW3hvPF0/LS0rWy14bz5dXHMqKS8sL14oPzpccypbeG88XT89PStbPXhvPl1ccyopLywvXig/OlxzKlt4bzxdPy0/XC4rLVt4bz5dP1xzKikvLC9eKD86XHMqfn5bXH5dK1xzKikvLC9eKD86XHMqW3hvPF0/LS1ccyopLywvXig/OlxzKlt4bzxdPz09XHMqKS8sL14oPzpccypbeG88XT8tXC5ccyopLywvXig/OlsiXVtgXSkvLC9eKD86WyJdKS8sL14oPzpccypbeG88XT8tLStbLXhvPl1ccyopLywvXig/OlxzKlt4bzxdPz09K1s9eG8+XVxzKikvLC9eKD86XHMqW3hvPF0/LT9cListW3hvPl0/XHMqKS8sL14oPzo6XGQrKS9dLGNvbmRpdGlvbnM6e1NUWUxFX0RFRklOSVRJT046e3J1bGVzOlsyOV0saW5jbHVzaXZlOiExfSxTVFlMRV9TVE1OVDp7cnVsZXM6WzI4XSxpbmNsdXNpdmU6ITF9LENMQVNTREVGSUQ6e3J1bGVzOlsyM10saW5jbHVzaXZlOiExfSxDTEFTU0RFRjp7cnVsZXM6WzIxLDIyXSxpbmNsdXNpdmU6ITF9LENMQVNTX1NUWUxFOntydWxlczpbMjZdLGluY2x1c2l2ZTohMX0sQ0xBU1M6e3J1bGVzOlsyNV0saW5jbHVzaXZlOiExfSxMTEFCRUw6e3J1bGVzOlsxMDAsMTAxLDEwMiwxMDMsMTA0XSxpbmNsdXNpdmU6ITF9LEFSUk9XX0RJUjp7cnVsZXM6Wzg2LDg3LDg4LDg5LDkwLDkxLDkyXSxpbmNsdXNpdmU6ITF9LEJMT0NLX0FSUk9XOntydWxlczpbNzcsODIsODVdLGluY2x1c2l2ZTohMX0sTk9ERTp7cnVsZXM6WzM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDc4LDgxXSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzEwLDExLDc5LDgwXSxpbmNsdXNpdmU6ITF9LHNwYWNlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzEzLDE0LDgzLDg0XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlszNSwzNl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlszM10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlszMV0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMiwxNSwxNiwxNywxOCwxOSwyMCwyNCwyNywzMCwzMiwzNCwzNyw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gcGV9KCk7ZWUubGV4ZXI9aWU7ZnVuY3Rpb24gb2UoKXt0aGlzLnl5PXt9fXJldHVybiBvZS5wcm90b3R5cGU9ZWUsZWUuUGFyc2VyPW9lLG5ldyBvZX0oKTtsd2UucGFyc2VyPWx3ZTtjb25zdCB1Y249bHdlO2xldCBVMj17fSxod2U9W10saWo9e307Y29uc3QgTFdlPSJjb2xvciIsTVdlPSJmaWxsIixsY249ImJnRmlsbCIsRFdlPSIsIixoY249cXQoKTtsZXQgc2o9e307Y29uc3QgZmNuPWk9PmNpLnNhbml0aXplVGV4dChpLGhjbiksZGNuPWZ1bmN0aW9uKGkscz0iIil7c2pbaV09PT12b2lkIDAmJihzaltpXT17aWQ6aSxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pO2NvbnN0IHU9c2pbaV07cyE9bnVsbCYmcy5zcGxpdChEV2UpLmZvckVhY2goZD0+e2NvbnN0IHA9ZC5yZXBsYWNlKC8oW147XSopOy8sIiQxIikudHJpbSgpO2lmKGQubWF0Y2goTFdlKSl7Y29uc3QgYj1wLnJlcGxhY2UoTVdlLGxjbikucmVwbGFjZShMV2UsTVdlKTt1LnRleHRTdHlsZXMucHVzaChiKX11LnN0eWxlcy5wdXNoKHApfSl9LGdjbj1mdW5jdGlvbihpLHM9IiIpe2NvbnN0IHU9VTJbaV07cyE9bnVsbCYmKHUuc3R5bGVzPXMuc3BsaXQoRFdlKSl9LHBjbj1mdW5jdGlvbihpLHMpe2kuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe2xldCBkPVUyW3VdO2lmKGQ9PT12b2lkIDApe2NvbnN0IHA9dS50cmltKCk7VTJbcF09e2lkOnAsdHlwZToibmEiLGNoaWxkcmVuOltdfSxkPVUyW3BdfWQuY2xhc3Nlc3x8KGQuY2xhc3Nlcz1bXSksZC5jbGFzc2VzLnB1c2gocyl9KX0sSVdlPShpLHMpPT57Y29uc3QgdT1pLmZsYXQoKSxkPVtdO2Zvcihjb25zdCBwIG9mIHUpe2lmKHAubGFiZWwmJihwLmxhYmVsPWZjbihwLmxhYmVsKSkscC50eXBlPT09ImNsYXNzRGVmIil7ZGNuKHAuaWQscC5jc3MpO2NvbnRpbnVlfWlmKHAudHlwZT09PSJhcHBseUNsYXNzIil7cGNuKHAuaWQsKHA9PW51bGw/dm9pZCAwOnAuc3R5bGVDbGFzcyl8fCIiKTtjb250aW51ZX1pZihwLnR5cGU9PT0iYXBwbHlTdHlsZXMiKXtwIT1udWxsJiZwLnN0eWxlc1N0ciYmZ2NuKHAuaWQscD09bnVsbD92b2lkIDA6cC5zdHlsZXNTdHIpO2NvbnRpbnVlfWlmKHAudHlwZT09PSJjb2x1bW4tc2V0dGluZyIpcy5jb2x1bW5zPXAuY29sdW1uc3x8LTE7ZWxzZSBpZihwLnR5cGU9PT0iZWRnZSIpaWpbcC5pZF0/aWpbcC5pZF0rKzppaltwLmlkXT0xLHAuaWQ9aWpbcC5pZF0rIi0iK3AuaWQsaHdlLnB1c2gocCk7ZWxzZXtwLmxhYmVsfHwocC50eXBlPT09ImNvbXBvc2l0ZSI/cC5sYWJlbD0iIjpwLmxhYmVsPXAuaWQpO2NvbnN0IHY9IVUyW3AuaWRdO2lmKHY/VTJbcC5pZF09cDoocC50eXBlIT09Im5hIiYmKFUyW3AuaWRdLnR5cGU9cC50eXBlKSxwLmxhYmVsIT09cC5pZCYmKFUyW3AuaWRdLmxhYmVsPXAubGFiZWwpKSxwLmNoaWxkcmVuJiZJV2UocC5jaGlsZHJlbixwKSxwLnR5cGU9PT0ic3BhY2UiKXtjb25zdCBiPXAud2lkdGh8fDE7Zm9yKGxldCB5PTA7eTxiO3krKyl7Y29uc3QgVD1ESGUocCk7VC5pZD1ULmlkKyItIit5LFUyW1QuaWRdPVQsZC5wdXNoKFQpfX1lbHNlIHYmJmQucHVzaChwKX19cy5jaGlsZHJlbj1kfTtsZXQgZndlPVtdLGFqPXtpZDoicm9vdCIsdHlwZToiY29tcG9zaXRlIixjaGlsZHJlbjpbXSxjb2x1bW5zOi0xfTtjb25zdCBiY249KCk9PntYZS5kZWJ1ZygiQ2xlYXIgY2FsbGVkIiksUGcoKSxhaj17aWQ6InJvb3QiLHR5cGU6ImNvbXBvc2l0ZSIsY2hpbGRyZW46W10sY29sdW1uczotMX0sVTI9e3Jvb3Q6YWp9LGZ3ZT1bXSxzaj17fSxod2U9W10saWo9e319O2Z1bmN0aW9uIG1jbihpKXtzd2l0Y2goWGUuZGVidWcoInR5cGVTdHIyVHlwZSIsaSksaSl7Y2FzZSJbXSI6cmV0dXJuInNxdWFyZSI7Y2FzZSIoKSI6cmV0dXJuIFhlLmRlYnVnKCJ3ZSBoYXZlIGEgcm91bmQiKSwicm91bmQiO2Nhc2UiKCgpKSI6cmV0dXJuImNpcmNsZSI7Y2FzZSI+XSI6cmV0dXJuInJlY3RfbGVmdF9pbnZfYXJyb3ciO2Nhc2Uie30iOnJldHVybiJkaWFtb25kIjtjYXNlInt7fX0iOnJldHVybiJoZXhhZ29uIjtjYXNlIihbXSkiOnJldHVybiJzdGFkaXVtIjtjYXNlIltbXV0iOnJldHVybiJzdWJyb3V0aW5lIjtjYXNlIlsoKV0iOnJldHVybiJjeWxpbmRlciI7Y2FzZSIoKCgpKSkiOnJldHVybiJkb3VibGVjaXJjbGUiO2Nhc2UiWy8vXSI6cmV0dXJuImxlYW5fcmlnaHQiO2Nhc2UiW1xcXFxdIjpyZXR1cm4ibGVhbl9sZWZ0IjtjYXNlIlsvXFxdIjpyZXR1cm4idHJhcGV6b2lkIjtjYXNlIltcXC9dIjpyZXR1cm4iaW52X3RyYXBlem9pZCI7Y2FzZSI8W10+IjpyZXR1cm4iYmxvY2tfYXJyb3ciO2RlZmF1bHQ6cmV0dXJuIm5hIn19ZnVuY3Rpb24gdmNuKGkpe3N3aXRjaChYZS5kZWJ1ZygidHlwZVN0cjJUeXBlIixpKSxpKXtjYXNlIj09IjpyZXR1cm4idGhpY2siO2RlZmF1bHQ6cmV0dXJuIm5vcm1hbCJ9fWZ1bmN0aW9uIHdjbihpKXtzd2l0Y2goaS50cmltKCkpe2Nhc2UiLS14IjpyZXR1cm4iYXJyb3dfY3Jvc3MiO2Nhc2UiLS1vIjpyZXR1cm4iYXJyb3dfY2lyY2xlIjtkZWZhdWx0OnJldHVybiJhcnJvd19wb2ludCJ9fWxldCBPV2U9MDtjb25zdCB5Y249e2dldENvbmZpZzooKT0+VmgoKS5ibG9jayx0eXBlU3RyMlR5cGU6bWNuLGVkZ2VUeXBlU3RyMlR5cGU6dmNuLGVkZ2VTdHJUb0VkZ2VEYXRhOndjbixnZXRMb2dnZXI6KCk9PmNvbnNvbGUsZ2V0QmxvY2tzRmxhdDooKT0+Wy4uLk9iamVjdC52YWx1ZXMoVTIpXSxnZXRCbG9ja3M6KCk9PmZ3ZXx8W10sZ2V0RWRnZXM6KCk9Pmh3ZSxzZXRIaWVyYXJjaHk6aT0+e2FqLmNoaWxkcmVuPWksSVdlKGksYWopLGZ3ZT1hai5jaGlsZHJlbn0sZ2V0QmxvY2s6aT0+VTJbaV0sc2V0QmxvY2s6aT0+e1UyW2kuaWRdPWl9LGdldENvbHVtbnM6aT0+e2NvbnN0IHM9VTJbaV07cmV0dXJuIHM/cy5jb2x1bW5zP3MuY29sdW1uczpzLmNoaWxkcmVuP3MuY2hpbGRyZW4ubGVuZ3RoOi0xOi0xfSxnZXRDbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIHNqfSxjbGVhcjpiY24sZ2VuZXJhdGVJZDooKT0+KE9XZSsrLCJpZC0iK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDEyKSsiLSIrT1dlKX0sako9KGkscyk9Pntjb25zdCB1PUFSZSxkPXUoaSwiciIpLHA9dShpLCJnIiksdj11KGksImIiKTtyZXR1cm4gU0MoZCxwLHYscyl9LHhjbj1pPT5gLmxhYmVsIHsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBjb2xvcjogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICB9CiAgLmNsdXN0ZXItbGFiZWwgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQogIC5jbHVzdGVyLWxhYmVsIHNwYW4scCB7CiAgICBjb2xvcjogJHtpLnRpdGxlQ29sb3J9OwogIH0KCgoKICAubGFiZWwgdGV4dCxzcGFuLHAgewogICAgZmlsbDogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICAgIGNvbG9yOiAke2kubm9kZVRleHRDb2xvcnx8aS50ZXh0Q29sb3J9OwogIH0KCiAgLm5vZGUgcmVjdCwKICAubm9kZSBjaXJjbGUsCiAgLm5vZGUgZWxsaXBzZSwKICAubm9kZSBwb2x5Z29uLAogIC5ub2RlIHBhdGggewogICAgZmlsbDogJHtpLm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CiAgLmZsb3djaGFydC1sYWJlbCB0ZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgfQogIC8vIC5mbG93Y2hhcnQtbGFiZWwgLnRleHQtb3V0ZXItdHNwYW4gewogIC8vICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAvLyB9CiAgLy8gLmZsb3djaGFydC1sYWJlbCAudGV4dC1pbm5lci10c3BhbiB7CiAgLy8gICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgLy8gfQoKICAubm9kZSAubGFiZWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAubm9kZS5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHtpLmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyLjBweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgICBmaWxsOiAke2kuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICB9CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQoKICAvKiBGb3IgaHRtbCBsYWJlbHMgb25seSAqLwogIC5sYWJlbEJrZyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2pKKGkuZWRnZUxhYmVsQmFja2dyb3VuZCwuNSl9OwogICAgLy8gYmFja2dyb3VuZC1jb2xvcjoKICB9CgogIC5ub2RlIC5jbHVzdGVyIHsKICAgIC8vIGZpbGw6ICR7akooaS5tYWluQmtnLC41KX07CiAgICBmaWxsOiAke2pKKGkuY2x1c3RlckJrZywuNSl9OwogICAgc3Ryb2tlOiAke2pKKGkuY2x1c3RlckJvcmRlciwuMil9OwogICAgYm94LXNoYWRvdzogcmdiYSg1MCwgNTAsIDkzLCAwLjI1KSAwcHggMTNweCAyN3B4IC01cHgsIHJnYmEoMCwgMCwgMCwgMC4zKSAwcHggOHB4IDE2cHggLThweDsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuY2x1c3RlciBzcGFuLHAgewogICAgY29sb3I6ICR7aS50aXRsZUNvbG9yfTsKICB9CiAgLyogLmNsdXN0ZXIgZGl2IHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfSAqLwoKICBkaXYubWVybWFpZFRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWF4LXdpZHRoOiAyMDBweDsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2kuYm9yZGVyMn07CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEwMDsKICB9CgogIC5mbG93Y2hhcnRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KYDtmdW5jdGlvbiBOV2UoaSxzLHU9ITEpe3ZhciBSLEYsajtjb25zdCBkPWk7bGV0IHA9ImRlZmF1bHQiOygoKFI9ZD09bnVsbD92b2lkIDA6ZC5jbGFzc2VzKT09bnVsbD92b2lkIDA6Ui5sZW5ndGgpfHwwKT4wJiYocD0oKGQ9PW51bGw/dm9pZCAwOmQuY2xhc3Nlcyl8fFtdKS5qb2luKCIgIikpLHA9cCsiIGZsb3djaGFydC1sYWJlbCI7bGV0IHY9MCxiPSIiLHk7c3dpdGNoKGQudHlwZSl7Y2FzZSJyb3VuZCI6dj01LGI9InJlY3QiO2JyZWFrO2Nhc2UiY29tcG9zaXRlIjp2PTAsYj0iY29tcG9zaXRlIix5PTA7YnJlYWs7Y2FzZSJzcXVhcmUiOmI9InJlY3QiO2JyZWFrO2Nhc2UiZGlhbW9uZCI6Yj0icXVlc3Rpb24iO2JyZWFrO2Nhc2UiaGV4YWdvbiI6Yj0iaGV4YWdvbiI7YnJlYWs7Y2FzZSJibG9ja19hcnJvdyI6Yj0iYmxvY2tfYXJyb3ciO2JyZWFrO2Nhc2Uib2RkIjpiPSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImxlYW5fcmlnaHQiOmI9ImxlYW5fcmlnaHQiO2JyZWFrO2Nhc2UibGVhbl9sZWZ0IjpiPSJsZWFuX2xlZnQiO2JyZWFrO2Nhc2UidHJhcGV6b2lkIjpiPSJ0cmFwZXpvaWQiO2JyZWFrO2Nhc2UiaW52X3RyYXBlem9pZCI6Yj0iaW52X3RyYXBlem9pZCI7YnJlYWs7Y2FzZSJyZWN0X2xlZnRfaW52X2Fycm93IjpiPSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImNpcmNsZSI6Yj0iY2lyY2xlIjticmVhaztjYXNlImVsbGlwc2UiOmI9ImVsbGlwc2UiO2JyZWFrO2Nhc2Uic3RhZGl1bSI6Yj0ic3RhZGl1bSI7YnJlYWs7Y2FzZSJzdWJyb3V0aW5lIjpiPSJzdWJyb3V0aW5lIjticmVhaztjYXNlImN5bGluZGVyIjpiPSJjeWxpbmRlciI7YnJlYWs7Y2FzZSJncm91cCI6Yj0icmVjdCI7YnJlYWs7Y2FzZSJkb3VibGVjaXJjbGUiOmI9ImRvdWJsZWNpcmNsZSI7YnJlYWs7ZGVmYXVsdDpiPSJyZWN0In1jb25zdCBUPW9tKChkPT1udWxsP3ZvaWQgMDpkLnN0eWxlcyl8fFtdKSxfPWQubGFiZWwsQT1kLnNpemV8fHt3aWR0aDowLGhlaWdodDowLHg6MCx5OjB9O3JldHVybntsYWJlbFN0eWxlOlQubGFiZWxTdHlsZSxzaGFwZTpiLGxhYmVsVGV4dDpfLHJ4OnYscnk6dixjbGFzczpwLHN0eWxlOlQuc3R5bGUsaWQ6ZC5pZCxkaXJlY3Rpb25zOmQuZGlyZWN0aW9ucyx3aWR0aDpBLndpZHRoLGhlaWdodDpBLmhlaWdodCx4OkEueCx5OkEueSxwb3NpdGlvbmVkOnUsaW50ZXJzZWN0OnZvaWQgMCx0eXBlOmQudHlwZSxwYWRkaW5nOnk/PygoKGo9KEY9VmgoKSk9PW51bGw/dm9pZCAwOkYuYmxvY2spPT1udWxsP3ZvaWQgMDpqLnBhZGRpbmcpfHwwKX19YXN5bmMgZnVuY3Rpb24ga2NuKGkscyx1KXtjb25zdCBkPU5XZShzLHUsITEpO2lmKGQudHlwZT09PSJncm91cCIpcmV0dXJuO2NvbnN0IHA9YXdhaXQgdEooaSxkKSx2PXAubm9kZSgpLmdldEJCb3goKSxiPXUuZ2V0QmxvY2soZC5pZCk7Yi5zaXplPXt3aWR0aDp2LndpZHRoLGhlaWdodDp2LmhlaWdodCx4OjAseTowLG5vZGU6cH0sdS5zZXRCbG9jayhiKSxwLnJlbW92ZSgpfWFzeW5jIGZ1bmN0aW9uIEVjbihpLHMsdSl7Y29uc3QgZD1OV2Uocyx1LCEwKTt1LmdldEJsb2NrKGQuaWQpLnR5cGUhPT0ic3BhY2UiJiYoYXdhaXQgdEooaSxkKSxzLmludGVyc2VjdD1kPT1udWxsP3ZvaWQgMDpkLmludGVyc2VjdCwkbWUoZCkpfWFzeW5jIGZ1bmN0aW9uIGR3ZShpLHMsdSxkKXtmb3IoY29uc3QgcCBvZiBzKWF3YWl0IGQoaSxwLHUpLHAuY2hpbGRyZW4mJmF3YWl0IGR3ZShpLHAuY2hpbGRyZW4sdSxkKX1hc3luYyBmdW5jdGlvbiBUY24oaSxzLHUpe2F3YWl0IGR3ZShpLHMsdSxrY24pfWFzeW5jIGZ1bmN0aW9uIENjbihpLHMsdSl7YXdhaXQgZHdlKGkscyx1LEVjbil9YXN5bmMgZnVuY3Rpb24gU2NuKGkscyx1LGQscCl7Y29uc3Qgdj1uZXcgQjAoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KTt2LnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbm9kZXNlcDoxMCxyYW5rc2VwOjEwLG1hcmdpbng6OCxtYXJnaW55Ojh9KTtmb3IoY29uc3QgYiBvZiB1KWIuc2l6ZSYmdi5zZXROb2RlKGIuaWQse3dpZHRoOmIuc2l6ZS53aWR0aCxoZWlnaHQ6Yi5zaXplLmhlaWdodCxpbnRlcnNlY3Q6Yi5pbnRlcnNlY3R9KTtmb3IoY29uc3QgYiBvZiBzKWlmKGIuc3RhcnQmJmIuZW5kKXtjb25zdCB5PWQuZ2V0QmxvY2soYi5zdGFydCksVD1kLmdldEJsb2NrKGIuZW5kKTtpZih5IT1udWxsJiZ5LnNpemUmJihUIT1udWxsJiZULnNpemUpKXtjb25zdCBfPXkuc2l6ZSxBPVQuc2l6ZSxQPVt7eDpfLngseTpfLnl9LHt4Ol8ueCsoQS54LV8ueCkvMix5Ol8ueSsoQS55LV8ueSkvMn0se3g6QS54LHk6QS55fV07YXdhaXQgSVVlKGkse3Y6Yi5zdGFydCx3OmIuZW5kLG5hbWU6Yi5pZH0sey4uLmIsYXJyb3dUeXBlRW5kOmIuYXJyb3dUeXBlRW5kLGFycm93VHlwZVN0YXJ0OmIuYXJyb3dUeXBlU3RhcnQscG9pbnRzOlAsY2xhc3NlczoiZWRnZS10aGlja25lc3Mtbm9ybWFsIGVkZ2UtcGF0dGVybi1zb2xpZCBmbG93Y2hhcnQtbGluayBMUy1hMSBMRS1iMSJ9LHZvaWQgMCwiYmxvY2siLHYscCksYi5sYWJlbCYmKGF3YWl0IHptZShpLHsuLi5iLGxhYmVsOmIubGFiZWwsbGFiZWxTdHlsZToic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZTsiLGFycm93VHlwZUVuZDpiLmFycm93VHlwZUVuZCxhcnJvd1R5cGVTdGFydDpiLmFycm93VHlwZVN0YXJ0LHBvaW50czpQLGNsYXNzZXM6ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCBlZGdlLXBhdHRlcm4tc29saWQgZmxvd2NoYXJ0LWxpbmsgTFMtYTEgTEUtYjEifSksYXdhaXQgTVVlKHsuLi5iLHg6UFsxXS54LHk6UFsxXS55fSx7b3JpZ2luYWxQYXRoOlB9KSl9fX1jb25zdCBlMD0oKFJXZT0oRldlPXF0KCkpPT1udWxsP3ZvaWQgMDpGV2UuYmxvY2spPT1udWxsP3ZvaWQgMDpSV2UucGFkZGluZyl8fDg7ZnVuY3Rpb24gX2NuKGkscyl7aWYoaT09PTB8fCFOdW1iZXIuaXNJbnRlZ2VyKGkpKXRocm93IG5ldyBFcnJvcigiQ29sdW1ucyBtdXN0IGJlIGFuIGludGVnZXIgIT09IDAuIik7aWYoczwwfHwhTnVtYmVyLmlzSW50ZWdlcihzKSl0aHJvdyBuZXcgRXJyb3IoIlBvc2l0aW9uIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlci4iK3MpO2lmKGk8MClyZXR1cm57cHg6cyxweTowfTtpZihpPT09MSlyZXR1cm57cHg6MCxweTpzfTtjb25zdCB1PXMlaSxkPU1hdGguZmxvb3Iocy9pKTtyZXR1cm57cHg6dSxweTpkfX1jb25zdCBBY249aT0+e2xldCBzPTAsdT0wO2Zvcihjb25zdCBkIG9mIGkuY2hpbGRyZW4pe2NvbnN0e3dpZHRoOnAsaGVpZ2h0OnYseDpiLHl9PWQuc2l6ZXx8e3dpZHRoOjAsaGVpZ2h0OjAseDowLHk6MH07WGUuZGVidWcoImdldE1heENoaWxkU2l6ZSBhYmM5NSBjaGlsZDoiLGQuaWQsIndpZHRoOiIscCwiaGVpZ2h0OiIsdiwieDoiLGIsInk6Iix5LGQudHlwZSksZC50eXBlIT09InNwYWNlIiYmKHA+cyYmKHM9cC8oaS53aWR0aEluQ29sdW1uc3x8MSkpLHY+dSYmKHU9dikpfXJldHVybnt3aWR0aDpzLGhlaWdodDp1fX07ZnVuY3Rpb24gZ3dlKGkscyx1PTAsZD0wKXt2YXIgYix5LFQsXyxBLFAsUixGLGosSyxlZTtYZS5kZWJ1Zygic2V0QmxvY2tTaXplcyBhYmM5NSAoc3RhcnQpIixpLmlkLChiPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOmIueCwiYmxvY2sgd2lkdGggPSIsaT09bnVsbD92b2lkIDA6aS5zaXplLCJzaWVibGluZ1dpZHRoIix1KSwoeT1pPT1udWxsP3ZvaWQgMDppLnNpemUpIT1udWxsJiZ5LndpZHRofHwoaS5zaXplPXt3aWR0aDp1LGhlaWdodDpkLHg6MCx5OjB9KTtsZXQgcD0wLHY9MDtpZigoKFQ9aS5jaGlsZHJlbik9PW51bGw/dm9pZCAwOlQubGVuZ3RoKT4wKXtmb3IoY29uc3QgZGUgb2YgaS5jaGlsZHJlbilnd2UoZGUscyk7Y29uc3QgaWU9QWNuKGkpO3A9aWUud2lkdGgsdj1pZS5oZWlnaHQsWGUuZGVidWcoInNldEJsb2NrU2l6ZXMgYWJjOTUgbWF4V2lkdGggb2YiLGkuaWQsIjpzIGNoaWxkcmVuIGlzICIscCx2KTtmb3IoY29uc3QgZGUgb2YgaS5jaGlsZHJlbilkZS5zaXplJiYoWGUuZGVidWcoYGFiYzk1IFNldHRpbmcgc2l6ZSBvZiBjaGlsZHJlbiBvZiAke2kuaWR9IGlkPSR7ZGUuaWR9ICR7cH0gJHt2fSAke2RlLnNpemV9YCksZGUuc2l6ZS53aWR0aD1wKihkZS53aWR0aEluQ29sdW1uc3x8MSkrZTAqKChkZS53aWR0aEluQ29sdW1uc3x8MSktMSksZGUuc2l6ZS5oZWlnaHQ9dixkZS5zaXplLng9MCxkZS5zaXplLnk9MCxYZS5kZWJ1ZyhgYWJjOTUgdXBkYXRpbmcgc2l6ZSBvZiAke2kuaWR9IGNoaWxkcmVuIGNoaWxkOiR7ZGUuaWR9IG1heFdpZHRoOiR7cH0gbWF4SGVpZ2h0OiR7dn1gKSk7Zm9yKGNvbnN0IGRlIG9mIGkuY2hpbGRyZW4pZ3dlKGRlLHMscCx2KTtjb25zdCBvZT1pLmNvbHVtbnN8fC0xO2xldCBwZT0wO2Zvcihjb25zdCBkZSBvZiBpLmNoaWxkcmVuKXBlKz1kZS53aWR0aEluQ29sdW1uc3x8MTtsZXQgYmU9aS5jaGlsZHJlbi5sZW5ndGg7b2U+MCYmb2U8cGUmJihiZT1vZSksaS53aWR0aEluQ29sdW1ucztjb25zdCBhZT1NYXRoLmNlaWwocGUvYmUpO2xldCBuZT1iZSoocCtlMCkrZTAsc2U9YWUqKHYrZTApK2UwO2lmKG5lPHUpe1hlLmRlYnVnKGBEZXRlY3RlZCB0byBzbWFsbCBzaWVibGluZzogYWJjOTUgJHtpLmlkfSBzaWVibGluZ1dpZHRoICR7dX0gc2llYmxpbmdIZWlnaHQgJHtkfSB3aWR0aCAke25lfWApLG5lPXUsc2U9ZDtjb25zdCBkZT0odS1iZSplMC1lMCkvYmUsWD0oZC1hZSplMC1lMCkvYWU7WGUuZGVidWcoIlNpemUgaW5kYXRhIGFiYzg4IixpLmlkLCJjaGlsZFdpZHRoIixkZSwibWF4V2lkdGgiLHApLFhlLmRlYnVnKCJTaXplIGluZGF0YSBhYmM4OCIsaS5pZCwiY2hpbGRIZWlnaHQiLFgsIm1heEhlaWdodCIsdiksWGUuZGVidWcoIlNpemUgaW5kYXRhIGFiYzg4IHhTaXplIixiZSwicGFkZGluZyIsZTApO2Zvcihjb25zdCBnZSBvZiBpLmNoaWxkcmVuKWdlLnNpemUmJihnZS5zaXplLndpZHRoPWRlLGdlLnNpemUuaGVpZ2h0PVgsZ2Uuc2l6ZS54PTAsZ2Uuc2l6ZS55PTApfWlmKFhlLmRlYnVnKGBhYmM5NSAoZmluYWxlIGNhbGMpICR7aS5pZH0geFNpemUgJHtiZX0geVNpemUgJHthZX0gY29sdW1ucyAke29lfSR7aS5jaGlsZHJlbi5sZW5ndGh9IHdpZHRoPSR7TWF0aC5tYXgobmUsKChfPWkuc2l6ZSk9PW51bGw/dm9pZCAwOl8ud2lkdGgpfHwwKX1gKSxuZTwoKChBPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOkEud2lkdGgpfHwwKSl7bmU9KChQPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOlAud2lkdGgpfHwwO2NvbnN0IGRlPW9lPjA/TWF0aC5taW4oaS5jaGlsZHJlbi5sZW5ndGgsb2UpOmkuY2hpbGRyZW4ubGVuZ3RoO2lmKGRlPjApe2NvbnN0IFg9KG5lLWRlKmUwLWUwKS9kZTtYZS5kZWJ1ZygiYWJjOTUgKGdyb3dpbmcgdG8gZml0KSB3aWR0aCIsaS5pZCxuZSwoUj1pLnNpemUpPT1udWxsP3ZvaWQgMDpSLndpZHRoLFgpO2Zvcihjb25zdCBnZSBvZiBpLmNoaWxkcmVuKWdlLnNpemUmJihnZS5zaXplLndpZHRoPVgpfX1pLnNpemU9e3dpZHRoOm5lLGhlaWdodDpzZSx4OjAseTowfX1YZS5kZWJ1Zygic2V0QmxvY2tTaXplcyBhYmM5NCAoZG9uZSkiLGkuaWQsKEY9aT09bnVsbD92b2lkIDA6aS5zaXplKT09bnVsbD92b2lkIDA6Ri54LChqPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOmoud2lkdGgsKEs9aT09bnVsbD92b2lkIDA6aS5zaXplKT09bnVsbD92b2lkIDA6Sy55LChlZT1pPT1udWxsP3ZvaWQgMDppLnNpemUpPT1udWxsP3ZvaWQgMDplZS5oZWlnaHQpfWZ1bmN0aW9uIFBXZShpLHMpe3ZhciBkLHAsdixiLHksVCxfLEEsUCxSLEYsaixLLGVlLGllLG9lLHBlO1hlLmRlYnVnKGBhYmM4NSBsYXlvdXQgYmxvY2tzICg9PmxheW91dEJsb2NrcykgJHtpLmlkfSB4OiAkeyhkPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOmQueH0geTogJHsocD1pPT1udWxsP3ZvaWQgMDppLnNpemUpPT1udWxsP3ZvaWQgMDpwLnl9IHdpZHRoOiAkeyh2PWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOnYud2lkdGh9YCk7Y29uc3QgdT1pLmNvbHVtbnN8fC0xO2lmKFhlLmRlYnVnKCJsYXlvdXRCbG9ja3MgY29sdW1ucyBhYmM5NSIsaS5pZCwiPT4iLHUsaSksaS5jaGlsZHJlbiYmaS5jaGlsZHJlbi5sZW5ndGg+MCl7Y29uc3QgYmU9KCh5PShiPWk9PW51bGw/dm9pZCAwOmkuY2hpbGRyZW5bMF0pPT1udWxsP3ZvaWQgMDpiLnNpemUpPT1udWxsP3ZvaWQgMDp5LndpZHRoKXx8MCxhZT1pLmNoaWxkcmVuLmxlbmd0aCpiZSsoaS5jaGlsZHJlbi5sZW5ndGgtMSkqZTA7WGUuZGVidWcoIndpZHRoT2ZDaGlsZHJlbiA4OCIsYWUsInBvc1giKTtsZXQgbmU9MDtYZS5kZWJ1ZygiYWJjOTEgYmxvY2s/LnNpemU/LngiLGkuaWQsKFQ9aT09bnVsbD92b2lkIDA6aS5zaXplKT09bnVsbD92b2lkIDA6VC54KTtsZXQgc2U9KF89aT09bnVsbD92b2lkIDA6aS5zaXplKSE9bnVsbCYmXy54PygoQT1pPT1udWxsP3ZvaWQgMDppLnNpemUpPT1udWxsP3ZvaWQgMDpBLngpKygtKChQPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOlAud2lkdGgpLzJ8fDApOi1lMCxkZT0wO2Zvcihjb25zdCBYIG9mIGkuY2hpbGRyZW4pe2NvbnN0IGdlPWk7aWYoIVguc2l6ZSljb250aW51ZTtjb25zdHt3aWR0aDpXLGhlaWdodDp4ZX09WC5zaXplLHtweDpVLHB5OkZlfT1fY24odSxuZSk7aWYoRmUhPWRlJiYoZGU9RmUsc2U9KFI9aT09bnVsbD92b2lkIDA6aS5zaXplKSE9bnVsbCYmUi54PygoRj1pPT1udWxsP3ZvaWQgMDppLnNpemUpPT1udWxsP3ZvaWQgMDpGLngpKygtKChqPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOmoud2lkdGgpLzJ8fDApOi1lMCxYZS5kZWJ1ZygiTmV3IHJvdyBpbiBsYXlvdXQgZm9yIGJsb2NrIixpLmlkLCIgYW5kIGNoaWxkICIsWC5pZCxkZSkpLFhlLmRlYnVnKGBhYmM4OSBsYXlvdXQgYmxvY2tzIChjaGlsZCkgaWQ6ICR7WC5pZH0gUG9zOiAke25lfSAocHgsIHB5KSAke1V9LCR7RmV9ICgkeyhLPWdlPT1udWxsP3ZvaWQgMDpnZS5zaXplKT09bnVsbD92b2lkIDA6Sy54fSwkeyhlZT1nZT09bnVsbD92b2lkIDA6Z2Uuc2l6ZSk9PW51bGw/dm9pZCAwOmVlLnl9KSBwYXJlbnQ6ICR7Z2UuaWR9IHdpZHRoOiAke1d9JHtlMH1gKSxnZS5zaXplKXtjb25zdCBQZT1XLzI7WC5zaXplLng9c2UrZTArUGUsWGUuZGVidWcoYGFiYzkxIGxheW91dCBibG9ja3MgKGNhbGMpIHB4LCBweWlkOiR7WC5pZH0gc3RhcnRpbmdQb3M9WCR7c2V9IG5ldyBzdGFydGluZ1Bvc1gke1guc2l6ZS54fSAke1BlfSBwYWRkaW5nPSR7ZTB9IHdpZHRoPSR7V30gaGFsZldpZHRoPSR7UGV9ID0+IHg6JHtYLnNpemUueH0geToke1guc2l6ZS55fSAke1gud2lkdGhJbkNvbHVtbnN9ICh3aWR0aCAqIChjaGlsZD8udyB8fCAxKSkgLyAyICR7VyooKFg9PW51bGw/dm9pZCAwOlgud2lkdGhJbkNvbHVtbnMpfHwxKS8yfWApLHNlPVguc2l6ZS54K1BlLFguc2l6ZS55PWdlLnNpemUueS1nZS5zaXplLmhlaWdodC8yK0ZlKih4ZStlMCkreGUvMitlMCxYZS5kZWJ1ZyhgYWJjODggbGF5b3V0IGJsb2NrcyAoY2FsYykgcHgsIHB5aWQ6JHtYLmlkfXN0YXJ0aW5nUG9zWCR7c2V9JHtlMH0ke1BlfT0+eDoke1guc2l6ZS54fXk6JHtYLnNpemUueX0ke1gud2lkdGhJbkNvbHVtbnN9KHdpZHRoICogKGNoaWxkPy53IHx8IDEpKSAvIDIke1cqKChYPT1udWxsP3ZvaWQgMDpYLndpZHRoSW5Db2x1bW5zKXx8MSkvMn1gKX1YLmNoaWxkcmVuJiZQV2UoWCksbmUrPShYPT1udWxsP3ZvaWQgMDpYLndpZHRoSW5Db2x1bW5zKXx8MSxYZS5kZWJ1ZygiYWJjODggY29sdW1uc1BvcyIsWCxuZSl9fVhlLmRlYnVnKGBsYXlvdXQgYmxvY2tzICg8PT1sYXlvdXRCbG9ja3MpICR7aS5pZH0geDogJHsoaWU9aT09bnVsbD92b2lkIDA6aS5zaXplKT09bnVsbD92b2lkIDA6aWUueH0geTogJHsob2U9aT09bnVsbD92b2lkIDA6aS5zaXplKT09bnVsbD92b2lkIDA6b2UueX0gd2lkdGg6ICR7KHBlPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOnBlLndpZHRofWApfWZ1bmN0aW9uIEJXZShpLHttaW5YOnMsbWluWTp1LG1heFg6ZCxtYXhZOnB9PXttaW5YOjAsbWluWTowLG1heFg6MCxtYXhZOjB9KXtpZihpLnNpemUmJmkuaWQhPT0icm9vdCIpe2NvbnN0e3g6dix5OmIsd2lkdGg6eSxoZWlnaHQ6VH09aS5zaXplO3YteS8yPHMmJihzPXYteS8yKSxiLVQvMjx1JiYodT1iLVQvMiksdit5LzI+ZCYmKGQ9dit5LzIpLGIrVC8yPnAmJihwPWIrVC8yKX1pZihpLmNoaWxkcmVuKWZvcihjb25zdCB2IG9mIGkuY2hpbGRyZW4pKHttaW5YOnMsbWluWTp1LG1heFg6ZCxtYXhZOnB9PUJXZSh2LHttaW5YOnMsbWluWTp1LG1heFg6ZCxtYXhZOnB9KSk7cmV0dXJue21pblg6cyxtaW5ZOnUsbWF4WDpkLG1heFk6cH19ZnVuY3Rpb24gTGNuKGkpe2NvbnN0IHM9aS5nZXRCbG9jaygicm9vdCIpO2lmKCFzKXJldHVybjtnd2UocyxpLDAsMCksUFdlKHMpLFhlLmRlYnVnKCJnZXRCbG9ja3MiLEpTT04uc3RyaW5naWZ5KHMsbnVsbCwyKSk7Y29uc3R7bWluWDp1LG1pblk6ZCxtYXhYOnAsbWF4WTp2fT1CV2UocyksYj12LWQseT1wLXU7cmV0dXJue3g6dSx5OmQsd2lkdGg6eSxoZWlnaHQ6Yn19Y29uc3QgTWNuPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6dWNuLGRiOnljbixyZW5kZXJlcjp7ZHJhdzphc3luYyBmdW5jdGlvbihpLHMsdSxkKXtjb25zdHtzZWN1cml0eUxldmVsOnAsYmxvY2s6dn09VmgoKSxiPWQuZGI7bGV0IHk7cD09PSJzYW5kYm94IiYmKHk9SXIoIiNpIitzKSk7Y29uc3QgVD1JcihwPT09InNhbmRib3giP3kubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLF89cD09PSJzYW5kYm94Ij9ULnNlbGVjdChgW2lkPSIke3N9Il1gKTpJcihgW2lkPSIke3N9Il1gKTtTbWUoXyxbInBvaW50IiwiY2lyY2xlIiwiY3Jvc3MiXSxkLnR5cGUscyk7Y29uc3QgUD1iLmdldEJsb2NrcygpLFI9Yi5nZXRCbG9ja3NGbGF0KCksRj1iLmdldEVkZ2VzKCksaj1fLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiYmxvY2siKTthd2FpdCBUY24oaixQLGIpO2NvbnN0IEs9TGNuKGIpO2lmKGF3YWl0IENjbihqLFAsYiksYXdhaXQgU2NuKGosRixSLGIscyksSyl7Y29uc3QgZWU9SyxpZT1NYXRoLm1heCgxLE1hdGgucm91bmQoLjEyNSooZWUud2lkdGgvZWUuaGVpZ2h0KSkpLG9lPWVlLmhlaWdodCtpZSsxMCxwZT1lZS53aWR0aCsxMCx7dXNlTWF4V2lkdGg6YmV9PXY7TmcoXyxvZSxwZSwhIWJlKSxYZS5kZWJ1ZygiSGVyZSBCb3VuZHMiLEssZWUpLF8uYXR0cigidmlld0JveCIsYCR7ZWUueC01fSAke2VlLnktNX0gJHtlZS53aWR0aCsxMH0gJHtlZS5oZWlnaHQrMTB9YCl9X0YoekZlKX0sZ2V0Q2xhc3NlczpmdW5jdGlvbihpLHMpe3JldHVybiBzLmRiLmdldENsYXNzZXMoKX19LHN0eWxlczp4Y259fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3JldHVybiB1bX0pOwo=`; \ No newline at end of file diff --git a/packages/renderer/MdToHtml/rules/mermaid.ts b/packages/renderer/MdToHtml/rules/mermaid.ts index 047c2d90c..4810e1711 100644 --- a/packages/renderer/MdToHtml/rules/mermaid.ts +++ b/packages/renderer/MdToHtml/rules/mermaid.ts @@ -15,6 +15,13 @@ export default { text: '.mermaid { width: 640px; }', mime: 'text/css', }, + { + inline: true, + // Override the default pre styles. Using the default `white-space: pre` + // can cause math expressions to be too tall and break some diagrams. + text: 'pre.mermaid > svg { white-space: unset; }', + mime: 'text/css', + }, { inline: true, // Export button in mermaid graph should be shown only on hovering the mermaid graph diff --git a/packages/renderer/assets/mermaid/mermaid.min.js b/packages/renderer/assets/mermaid/mermaid.min.js index 7b35a8de8..3dce007ac 100644 --- a/packages/renderer/assets/mermaid/mermaid.min.js +++ b/packages/renderer/assets/mermaid/mermaid.min.js @@ -1,25 +1,29 @@ -(function(xA,b0){typeof exports=="object"&&typeof module<"u"?module.exports=b0():typeof define=="function"&&define.amd?define(b0):(xA=typeof globalThis<"u"?globalThis:xA||self,xA.mermaid=b0())})(this,function(){"use strict";function xA(i){for(var a=[],f=1;f=It?nt:""+Array(It+1-Bt.length).join(Ot)+nt},mt={s:bt,z:function(nt){var It=-nt.utcOffset(),Ot=Math.abs(It),Bt=Math.floor(Ot/60),Et=Ot%60;return(It<=0?"+":"-")+bt(Bt,2,"0")+":"+bt(Et,2,"0")},m:function nt(It,Ot){if(It.date()1)return nt(Ct[0])}else{var xt=It.name;ft[xt]=It,Et=xt}return!Bt&&Et&&(yt=Et),Et||!Bt&&yt},X=function(nt,It){if(ut(nt))return nt.clone();var Ot=typeof It=="object"?It:{};return Ot.date=nt,Ot.args=arguments,new U(Ot)},pt=mt;pt.l=vt,pt.i=ut,pt.w=function(nt,It){return X(nt,{locale:It.$L,utc:It.$u,x:It.$x,$offset:It.$offset})};var U=function(){function nt(Ot){this.$L=vt(Ot.locale,null,!0),this.parse(Ot)}var It=nt.prototype;return It.parse=function(Ot){this.$d=function(Bt){var Et=Bt.date,Z=Bt.utc;if(Et===null)return new Date(NaN);if(pt.u(Et))return new Date;if(Et instanceof Date)return new Date(Et);if(typeof Et=="string"&&!/Z$/i.test(Et)){var Ct=Et.match(et);if(Ct){var xt=Ct[2]-1||0,Ht=(Ct[7]||"0").substring(0,3);return Z?new Date(Date.UTC(Ct[1],xt,Ct[3]||1,Ct[4]||0,Ct[5]||0,Ct[6]||0,Ht)):new Date(Ct[1],xt,Ct[3]||1,Ct[4]||0,Ct[5]||0,Ct[6]||0,Ht)}}return new Date(Et)}(Ot),this.$x=Ot.x||{},this.init()},It.init=function(){var Ot=this.$d;this.$y=Ot.getFullYear(),this.$M=Ot.getMonth(),this.$D=Ot.getDate(),this.$W=Ot.getDay(),this.$H=Ot.getHours(),this.$m=Ot.getMinutes(),this.$s=Ot.getSeconds(),this.$ms=Ot.getMilliseconds()},It.$utils=function(){return pt},It.isValid=function(){return this.$d.toString()!==W},It.isSame=function(Ot,Bt){var Et=X(Ot);return this.startOf(Bt)<=Et&&Et<=this.endOf(Bt)},It.isAfter=function(Ot,Bt){return X(Ot){},debug:(...i)=>{},info:(...i)=>{},warn:(...i)=>{},error:(...i)=>{},fatal:(...i)=>{}},Xft=function(i="fatal"){let a=p5.fatal;typeof i=="string"?(i=i.toLowerCase(),i in p5&&(a=p5[i])):typeof i=="number"&&(a=i),Ut.trace=()=>{},Ut.debug=()=>{},Ut.info=()=>{},Ut.warn=()=>{},Ut.error=()=>{},Ut.fatal=()=>{},a<=p5.fatal&&(Ut.fatal=console.error?console.error.bind(console,Q2("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",Q2("FATAL"))),a<=p5.error&&(Ut.error=console.error?console.error.bind(console,Q2("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",Q2("ERROR"))),a<=p5.warn&&(Ut.warn=console.warn?console.warn.bind(console,Q2("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",Q2("WARN"))),a<=p5.info&&(Ut.info=console.info?console.info.bind(console,Q2("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",Q2("INFO"))),a<=p5.debug&&(Ut.debug=console.debug?console.debug.bind(console,Q2("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Q2("DEBUG"))),a<=p5.trace&&(Ut.trace=console.debug?console.debug.bind(console,Q2("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Q2("TRACE")))},Q2=i=>`%c${w0().format("ss.SSS")} : ${i} : `;var Qft={};Object.defineProperty(Qft,"__esModule",{value:!0});var ik=Qft.sanitizeUrl=void 0,cxe=/^([^\w]*)(javascript|data|vbscript)/im,uxe=/&#(\w+)(^\w|;)?/g,lxe=/&(newline|tab);/gi,hxe=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,fxe=/^.+(:|:)/gim,dxe=[".","/"];function gxe(i){return dxe.indexOf(i[0])>-1}function pxe(i){return i.replace(uxe,function(a,f){return String.fromCharCode(f)})}function bxe(i){var a=pxe(i||"").replace(lxe,"").replace(hxe,"").trim();if(!a)return"about:blank";if(gxe(a))return a;var f=a.match(fxe);if(!f)return a;var p=f[0];return cxe.test(p)?"about:blank":a}ik=Qft.sanitizeUrl=bxe;function EU(i,a){return i==null||a==null?NaN:ia?1:i>=a?0:NaN}function wxe(i,a){return i==null||a==null?NaN:ai?1:a>=i?0:NaN}function Zft(i){let a,f,p;i.length!==2?(a=EU,f=(E,_)=>EU(i(E),_),p=(E,_)=>i(E)-_):(a=i===EU||i===wxe?i:vxe,f=i,p=i);function w(E,_,A=0,I=E.length){if(A>>1;f(E[B],_)<0?A=B+1:I=B}while(A>>1;f(E[B],_)<=0?A=B+1:I=B}while(AA&&p(E[B-1],_)>-p(E[B],_)?B-1:B}return{left:w,center:b,right:m}}function vxe(){return 0}function mxe(i){return i===null?NaN:+i}const yxe=Zft(EU).right;Zft(mxe).center;const xxe=yxe;class $Lt extends Map{constructor(a,f=Txe){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:f}}),a!=null)for(const[p,w]of a)this.set(p,w)}get(a){return super.get(zLt(this,a))}has(a){return super.has(zLt(this,a))}set(a,f){return super.set(kxe(this,a),f)}delete(a){return super.delete(Exe(this,a))}}function zLt({_intern:i,_key:a},f){const p=a(f);return i.has(p)?i.get(p):f}function kxe({_intern:i,_key:a},f){const p=a(f);return i.has(p)?i.get(p):(i.set(p,f),f)}function Exe({_intern:i,_key:a},f){const p=a(f);return i.has(p)&&(f=i.get(p),i.delete(p)),f}function Txe(i){return i!==null&&typeof i=="object"?i.valueOf():i}const Cxe=Math.sqrt(50),_xe=Math.sqrt(10),Sxe=Math.sqrt(2);function TU(i,a,f){const p=(a-i)/Math.max(0,f),w=Math.floor(Math.log10(p)),m=p/Math.pow(10,w),b=m>=Cxe?10:m>=_xe?5:m>=Sxe?2:1;let E,_,A;return w<0?(A=Math.pow(10,-w)/b,E=Math.round(i*A),_=Math.round(a*A),E/Aa&&--_,A=-A):(A=Math.pow(10,w)*b,E=Math.round(i/A),_=Math.round(a/A),E*Aa&&--_),_0))return[];if(i===a)return[i];const p=a=w))return[];const E=m-w+1,_=new Array(E);if(p)if(b<0)for(let A=0;A=p)&&(f=p);else{let p=-1;for(let w of i)(w=a(w,++p,i))!=null&&(f=w)&&(f=w)}return f}function Mxe(i,a){let f;if(a===void 0)for(const p of i)p!=null&&(f>p||f===void 0&&p>=p)&&(f=p);else{let p=-1;for(let w of i)(w=a(w,++p,i))!=null&&(f>w||f===void 0&&w>=w)&&(f=w)}return f}function Dxe(i,a,f){i=+i,a=+a,f=(w=arguments.length)<2?(a=i,i=0,1):w<3?1:+f;for(var p=-1,w=Math.max(0,Math.ceil((a-i)/f))|0,m=new Array(w);++p+i(a)}function Nxe(i,a){return a=Math.max(0,i.bandwidth()-a*2)/2,i.round()&&(a=Math.round(a)),f=>+i(f)+a}function Bxe(){return!this.__axis}function HLt(i,a){var f=[],p=null,w=null,m=6,b=6,E=3,_=typeof window<"u"&&window.devicePixelRatio>1?0:.5,A=i===CU||i===_U?-1:1,I=i===_U||i===e1t?"x":"y",B=i===CU||i===n1t?Oxe:Pxe;function N(R){var z=p??(a.ticks?a.ticks.apply(a,f):a.domain()),W=w??(a.tickFormat?a.tickFormat.apply(a,f):Ixe),et=Math.max(m,0)+E,st=a.range(),at=+st[0]+_,bt=+st[st.length-1]+_,mt=(a.bandwidth?Nxe:Fxe)(a.copy(),_),yt=R.selection?R.selection():R,ft=yt.selectAll(".domain").data([null]),ut=yt.selectAll(".tick").data(z,a).order(),vt=ut.exit(),X=ut.enter().append("g").attr("class","tick"),pt=ut.select("line"),U=ut.select("text");ft=ft.merge(ft.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),ut=ut.merge(X),pt=pt.merge(X.append("line").attr("stroke","currentColor").attr(I+"2",A*m)),U=U.merge(X.append("text").attr("fill","currentColor").attr(I,A*et).attr("dy",i===CU?"0em":i===n1t?"0.71em":"0.32em")),R!==yt&&(ft=ft.transition(R),ut=ut.transition(R),pt=pt.transition(R),U=U.transition(R),vt=vt.transition(R).attr("opacity",qLt).attr("transform",function(Tt){return isFinite(Tt=mt(Tt))?B(Tt+_):this.getAttribute("transform")}),X.attr("opacity",qLt).attr("transform",function(Tt){var nt=this.parentNode.__axis;return B((nt&&isFinite(nt=nt(Tt))?nt:mt(Tt))+_)})),vt.remove(),ft.attr("d",i===_U||i===e1t?b?"M"+A*b+","+at+"H"+_+"V"+bt+"H"+A*b:"M"+_+","+at+"V"+bt:b?"M"+at+","+A*b+"V"+_+"H"+bt+"V"+A*b:"M"+at+","+_+"H"+bt),ut.attr("opacity",1).attr("transform",function(Tt){return B(mt(Tt)+_)}),pt.attr(I+"2",A*m),U.attr(I,A*et).text(W),yt.filter(Bxe).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",i===e1t?"start":i===_U?"end":"middle"),yt.each(function(){this.__axis=mt})}return N.scale=function(R){return arguments.length?(a=R,N):a},N.ticks=function(){return f=Array.from(arguments),N},N.tickArguments=function(R){return arguments.length?(f=R==null?[]:Array.from(R),N):f.slice()},N.tickValues=function(R){return arguments.length?(p=R==null?null:Array.from(R),N):p&&p.slice()},N.tickFormat=function(R){return arguments.length?(w=R,N):w},N.tickSize=function(R){return arguments.length?(m=b=+R,N):m},N.tickSizeInner=function(R){return arguments.length?(m=+R,N):m},N.tickSizeOuter=function(R){return arguments.length?(b=+R,N):b},N.tickPadding=function(R){return arguments.length?(E=+R,N):E},N.offset=function(R){return arguments.length?(_=+R,N):_},N}function Rxe(i){return HLt(CU,i)}function jxe(i){return HLt(n1t,i)}var $xe={value:()=>{}};function VLt(){for(var i=0,a=arguments.length,f={},p;i=0&&(p=f.slice(w+1),f=f.slice(0,w)),f&&!a.hasOwnProperty(f))throw new Error("unknown type: "+f);return{type:f,name:p}})}SU.prototype=VLt.prototype={constructor:SU,on:function(i,a){var f=this._,p=zxe(i+"",f),w,m=-1,b=p.length;if(arguments.length<2){for(;++m0)for(var f=new Array(w),p=0,w,m;p=0&&(a=i.slice(0,f))!=="xmlns"&&(i=i.slice(f+1)),ULt.hasOwnProperty(a)?{space:ULt[a],local:i}:i}function Hxe(i){return function(){var a=this.ownerDocument,f=this.namespaceURI;return f===r1t&&a.documentElement.namespaceURI===r1t?a.createElement(i):a.createElementNS(f,i)}}function Vxe(i){return function(){return this.ownerDocument.createElementNS(i.space,i.local)}}function WLt(i){var a=AU(i);return(a.local?Vxe:Hxe)(a)}function Gxe(){}function i1t(i){return i==null?Gxe:function(){return this.querySelector(i)}}function Uxe(i){typeof i!="function"&&(i=i1t(i));for(var a=this._groups,f=a.length,p=new Array(f),w=0;w=bt&&(bt=at+1);!(yt=et[bt])&&++bt=0;)(b=p[w])&&(m&&b.compareDocumentPosition(m)^4&&m.parentNode.insertBefore(b,m),m=b);return this}function b6e(i){i||(i=w6e);function a(B,N){return B&&N?i(B.__data__,N.__data__):!B-!N}for(var f=this._groups,p=f.length,w=new Array(p),m=0;ma?1:i>=a?0:NaN}function v6e(){var i=arguments[0];return arguments[0]=this,i.apply(null,arguments),this}function m6e(){return Array.from(this)}function y6e(){for(var i=this._groups,a=0,f=i.length;a1?this.each((a==null?D6e:typeof a=="function"?O6e:I6e)(i,a,f??"")):kA(this.node(),i)}function kA(i,a){return i.style.getPropertyValue(a)||JLt(i).getComputedStyle(i,null).getPropertyValue(a)}function F6e(i){return function(){delete this[i]}}function N6e(i,a){return function(){this[i]=a}}function B6e(i,a){return function(){var f=a.apply(this,arguments);f==null?delete this[i]:this[i]=f}}function R6e(i,a){return arguments.length>1?this.each((a==null?F6e:typeof a=="function"?B6e:N6e)(i,a)):this.node()[i]}function tMt(i){return i.trim().split(/^|\s+/)}function s1t(i){return i.classList||new eMt(i)}function eMt(i){this._node=i,this._names=tMt(i.getAttribute("class")||"")}eMt.prototype={add:function(i){var a=this._names.indexOf(i);a<0&&(this._names.push(i),this._node.setAttribute("class",this._names.join(" ")))},remove:function(i){var a=this._names.indexOf(i);a>=0&&(this._names.splice(a,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(i){return this._names.indexOf(i)>=0}};function nMt(i,a){for(var f=s1t(i),p=-1,w=a.length;++p=0&&(f=a.slice(p+1),a=a.slice(0,p)),{type:a,name:f}})}function fke(i){return function(){var a=this.__on;if(a){for(var f=0,p=-1,w=a.length,m;f>8&15|a>>4&240,a>>4&15|a&240,(a&15)<<4|a&15,1):f===8?IU(a>>24&255,a>>16&255,a>>8&255,(a&255)/255):f===4?IU(a>>12&15|a>>8&240,a>>8&15|a>>4&240,a>>4&15|a&240,((a&15)<<4|a&15)/255):null):(a=xke.exec(i))?new v0(a[1],a[2],a[3],1):(a=kke.exec(i))?new v0(a[1]*255/100,a[2]*255/100,a[3]*255/100,1):(a=Eke.exec(i))?IU(a[1],a[2],a[3],a[4]):(a=Tke.exec(i))?IU(a[1]*255/100,a[2]*255/100,a[3]*255/100,a[4]):(a=Cke.exec(i))?dMt(a[1],a[2]/100,a[3]/100,1):(a=_ke.exec(i))?dMt(a[1],a[2]/100,a[3]/100,a[4]):aMt.hasOwnProperty(i)?uMt(aMt[i]):i==="transparent"?new v0(NaN,NaN,NaN,0):null}function uMt(i){return new v0(i>>16&255,i>>8&255,i&255,1)}function IU(i,a,f,p){return p<=0&&(i=a=f=NaN),new v0(i,a,f,p)}function lMt(i){return i instanceof U7||(i=W7(i)),i?(i=i.rgb(),new v0(i.r,i.g,i.b,i.opacity)):new v0}function o1t(i,a,f,p){return arguments.length===1?lMt(i):new v0(i,a,f,p??1)}function v0(i,a,f,p){this.r=+i,this.g=+a,this.b=+f,this.opacity=+p}_P(v0,o1t,MU(U7,{brighter(i){return i=i==null?DU:Math.pow(DU,i),new v0(this.r*i,this.g*i,this.b*i,this.opacity)},darker(i){return i=i==null?SP:Math.pow(SP,i),new v0(this.r*i,this.g*i,this.b*i,this.opacity)},rgb(){return this},clamp(){return new v0(Y7(this.r),Y7(this.g),Y7(this.b),OU(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:hMt,formatHex:hMt,formatHex8:Lke,formatRgb:fMt,toString:fMt}));function hMt(){return`#${K7(this.r)}${K7(this.g)}${K7(this.b)}`}function Lke(){return`#${K7(this.r)}${K7(this.g)}${K7(this.b)}${K7((isNaN(this.opacity)?1:this.opacity)*255)}`}function fMt(){const i=OU(this.opacity);return`${i===1?"rgb(":"rgba("}${Y7(this.r)}, ${Y7(this.g)}, ${Y7(this.b)}${i===1?")":`, ${i})`}`}function OU(i){return isNaN(i)?1:Math.max(0,Math.min(1,i))}function Y7(i){return Math.max(0,Math.min(255,Math.round(i)||0))}function K7(i){return i=Y7(i),(i<16?"0":"")+i.toString(16)}function dMt(i,a,f,p){return p<=0?i=a=f=NaN:f<=0||f>=1?i=a=NaN:a<=0&&(i=NaN),new Xv(i,a,f,p)}function gMt(i){if(i instanceof Xv)return new Xv(i.h,i.s,i.l,i.opacity);if(i instanceof U7||(i=W7(i)),!i)return new Xv;if(i instanceof Xv)return i;i=i.rgb();var a=i.r/255,f=i.g/255,p=i.b/255,w=Math.min(a,f,p),m=Math.max(a,f,p),b=NaN,E=m-w,_=(m+w)/2;return E?(a===m?b=(f-p)/E+(f0&&_<1?0:b,new Xv(b,E,_,i.opacity)}function Mke(i,a,f,p){return arguments.length===1?gMt(i):new Xv(i,a,f,p??1)}function Xv(i,a,f,p){this.h=+i,this.s=+a,this.l=+f,this.opacity=+p}_P(Xv,Mke,MU(U7,{brighter(i){return i=i==null?DU:Math.pow(DU,i),new Xv(this.h,this.s,this.l*i,this.opacity)},darker(i){return i=i==null?SP:Math.pow(SP,i),new Xv(this.h,this.s,this.l*i,this.opacity)},rgb(){var i=this.h%360+(this.h<0)*360,a=isNaN(i)||isNaN(this.s)?0:this.s,f=this.l,p=f+(f<.5?f:1-f)*a,w=2*f-p;return new v0(c1t(i>=240?i-240:i+120,w,p),c1t(i,w,p),c1t(i<120?i+240:i-120,w,p),this.opacity)},clamp(){return new Xv(pMt(this.h),PU(this.s),PU(this.l),OU(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const i=OU(this.opacity);return`${i===1?"hsl(":"hsla("}${pMt(this.h)}, ${PU(this.s)*100}%, ${PU(this.l)*100}%${i===1?")":`, ${i})`}`}}));function pMt(i){return i=(i||0)%360,i<0?i+360:i}function PU(i){return Math.max(0,Math.min(1,i||0))}function c1t(i,a,f){return(i<60?a+(f-a)*i/60:i<180?f:i<240?a+(f-a)*(240-i)/60:a)*255}const Dke=Math.PI/180,Ike=180/Math.PI,FU=18,bMt=.96422,wMt=1,vMt=.82521,mMt=4/29,TA=6/29,yMt=3*TA*TA,Oke=TA*TA*TA;function xMt(i){if(i instanceof u3)return new u3(i.l,i.a,i.b,i.opacity);if(i instanceof b5)return kMt(i);i instanceof v0||(i=lMt(i));var a=f1t(i.r),f=f1t(i.g),p=f1t(i.b),w=u1t((.2225045*a+.7168786*f+.0606169*p)/wMt),m,b;return a===f&&f===p?m=b=w:(m=u1t((.4360747*a+.3850649*f+.1430804*p)/bMt),b=u1t((.0139322*a+.0971045*f+.7141733*p)/vMt)),new u3(116*w-16,500*(m-w),200*(w-b),i.opacity)}function Pke(i,a,f,p){return arguments.length===1?xMt(i):new u3(i,a,f,p??1)}function u3(i,a,f,p){this.l=+i,this.a=+a,this.b=+f,this.opacity=+p}_P(u3,Pke,MU(U7,{brighter(i){return new u3(this.l+FU*(i??1),this.a,this.b,this.opacity)},darker(i){return new u3(this.l-FU*(i??1),this.a,this.b,this.opacity)},rgb(){var i=(this.l+16)/116,a=isNaN(this.a)?i:i+this.a/500,f=isNaN(this.b)?i:i-this.b/200;return a=bMt*l1t(a),i=wMt*l1t(i),f=vMt*l1t(f),new v0(h1t(3.1338561*a-1.6168667*i-.4906146*f),h1t(-.9787684*a+1.9161415*i+.033454*f),h1t(.0719453*a-.2289914*i+1.4052427*f),this.opacity)}}));function u1t(i){return i>Oke?Math.pow(i,1/3):i/yMt+mMt}function l1t(i){return i>TA?i*i*i:yMt*(i-mMt)}function h1t(i){return 255*(i<=.0031308?12.92*i:1.055*Math.pow(i,1/2.4)-.055)}function f1t(i){return(i/=255)<=.04045?i/12.92:Math.pow((i+.055)/1.055,2.4)}function Fke(i){if(i instanceof b5)return new b5(i.h,i.c,i.l,i.opacity);if(i instanceof u3||(i=xMt(i)),i.a===0&&i.b===0)return new b5(NaN,0()=>i;function EMt(i,a){return function(f){return i+f*a}}function Nke(i,a,f){return i=Math.pow(i,f),a=Math.pow(a,f)-i,f=1/f,function(p){return Math.pow(i+p*a,f)}}function Bke(i,a){var f=a-i;return f?EMt(i,f>180||f<-180?f-360*Math.round(f/360):f):NU(isNaN(i)?a:i)}function Rke(i){return(i=+i)==1?LP:function(a,f){return f-a?Nke(a,f,i):NU(isNaN(a)?f:a)}}function LP(i,a){var f=a-i;return f?EMt(i,f):NU(isNaN(i)?a:i)}const BU=function i(a){var f=Rke(a);function p(w,m){var b=f((w=o1t(w)).r,(m=o1t(m)).r),E=f(w.g,m.g),_=f(w.b,m.b),A=LP(w.opacity,m.opacity);return function(I){return w.r=b(I),w.g=E(I),w.b=_(I),w.opacity=A(I),w+""}}return p.gamma=i,p}(1);function jke(i,a){a||(a=[]);var f=i?Math.min(a.length,i.length):0,p=a.slice(),w;return function(m){for(w=0;wf&&(m=a.slice(f,m),E[b]?E[b]+=m:E[++b]=m),(p=p[0])===(w=w[0])?E[b]?E[b]+=w:E[++b]=w:(E[++b]=null,_.push({i:b,x:Qv(p,w)})),f=p1t.lastIndex;return f180?I+=360:I-A>180&&(A+=360),N.push({i:B.push(w(B)+"rotate(",null,p)-2,x:Qv(A,I)})):I&&B.push(w(B)+"rotate("+I+p)}function E(A,I,B,N){A!==I?N.push({i:B.push(w(B)+"skewX(",null,p)-2,x:Qv(A,I)}):I&&B.push(w(B)+"skewX("+I+p)}function _(A,I,B,N,R,z){if(A!==B||I!==N){var W=R.push(w(R)+"scale(",null,",",null,")");z.push({i:W-4,x:Qv(A,B)},{i:W-2,x:Qv(I,N)})}else(B!==1||N!==1)&&R.push(w(R)+"scale("+B+","+N+")")}return function(A,I){var B=[],N=[];return A=i(A),I=i(I),m(A.translateX,A.translateY,I.translateX,I.translateY,B,N),b(A.rotate,I.rotate,B,N),E(A.skewX,I.skewX,B,N),_(A.scaleX,A.scaleY,I.scaleX,I.scaleY,B,N),A=I=null,function(R){for(var z=-1,W=N.length,et;++z=0&&i._call.call(void 0,a),i=i._next;--CA}function DMt(){X7=($U=OP.now())+zU,CA=MP=0;try{t8e()}finally{CA=0,n8e(),X7=0}}function e8e(){var i=OP.now(),a=i-$U;a>AMt&&(zU-=a,$U=i)}function n8e(){for(var i,a=jU,f,p=1/0;a;)a._call?(p>a._time&&(p=a._time),i=a,a=a._next):(f=a._next,a._next=null,a=i?i._next=f:jU=f);IP=i,m1t(p)}function m1t(i){if(!CA){MP&&(MP=clearTimeout(MP));var a=i-X7;a>24?(i<1/0&&(MP=setTimeout(DMt,i-OP.now()-zU)),DP&&(DP=clearInterval(DP))):(DP||($U=OP.now(),DP=setInterval(e8e,AMt)),CA=1,LMt(DMt))}}function IMt(i,a,f){var p=new qU;return a=a==null?0:+a,p.restart(w=>{p.stop(),i(w+a)},a,f),p}var r8e=VLt("start","end","cancel","interrupt"),i8e=[],OMt=0,PMt=1,y1t=2,HU=3,FMt=4,x1t=5,VU=6;function GU(i,a,f,p,w,m){var b=i.__transition;if(!b)i.__transition={};else if(f in b)return;s8e(i,f,{name:a,index:p,group:w,on:r8e,tween:i8e,time:m.time,delay:m.delay,duration:m.duration,ease:m.ease,timer:null,state:OMt})}function k1t(i,a){var f=Zv(i,a);if(f.state>OMt)throw new Error("too late; already scheduled");return f}function l3(i,a){var f=Zv(i,a);if(f.state>HU)throw new Error("too late; already running");return f}function Zv(i,a){var f=i.__transition;if(!f||!(f=f[a]))throw new Error("transition not found");return f}function s8e(i,a,f){var p=i.__transition,w;p[a]=f,f.timer=MMt(m,0,f.time);function m(A){f.state=PMt,f.timer.restart(b,f.delay,f.time),f.delay<=A&&b(A-f.delay)}function b(A){var I,B,N,R;if(f.state!==PMt)return _();for(I in p)if(R=p[I],R.name===f.name){if(R.state===HU)return IMt(b);R.state===FMt?(R.state=VU,R.timer.stop(),R.on.call("interrupt",i,i.__data__,R.index,R.group),delete p[I]):+Iy1t&&p.state=0&&(a=a.slice(0,f)),!a||a==="start"})}function N8e(i,a,f){var p,w,m=F8e(a)?k1t:l3;return function(){var b=m(this,i),E=b.on;E!==p&&(w=(p=E).copy()).on(a,f),b.on=w}}function B8e(i,a){var f=this._id;return arguments.length<2?Zv(this.node(),f).on.on(i):this.each(N8e(f,i,a))}function R8e(i){return function(){var a=this.parentNode;for(var f in this.__transition)if(+f!==i)return;a&&a.removeChild(this)}}function j8e(){return this.on("end.remove",R8e(this._id))}function $8e(i){var a=this._name,f=this._id;typeof i!="function"&&(i=i1t(i));for(var p=this._groups,w=p.length,m=new Array(w),b=0;b=0))throw new Error(`invalid digits: ${i}`);if(a>15)return jMt;const f=10**a;return function(p){this._+=p[0];for(let w=1,m=p.length;wQ7)if(!(Math.abs(B*_-A*I)>Q7)||!m)this._append`L${this._x1=a},${this._y1=f}`;else{let R=p-b,z=w-E,W=_*_+A*A,et=R*R+z*z,st=Math.sqrt(W),at=Math.sqrt(N),bt=m*Math.tan((T1t-Math.acos((W+N-et)/(2*st*at)))/2),mt=bt/at,yt=bt/st;Math.abs(mt-1)>Q7&&this._append`L${a+mt*I},${f+mt*B}`,this._append`A${m},${m},0,0,${+(B*R>I*z)},${this._x1=a+yt*_},${this._y1=f+yt*A}`}}arc(a,f,p,w,m,b){if(a=+a,f=+f,p=+p,b=!!b,p<0)throw new Error(`negative radius: ${p}`);let E=p*Math.cos(w),_=p*Math.sin(w),A=a+E,I=f+_,B=1^b,N=b?w-m:m-w;this._x1===null?this._append`M${A},${I}`:(Math.abs(this._x1-A)>Q7||Math.abs(this._y1-I)>Q7)&&this._append`L${A},${I}`,p&&(N<0&&(N=N%C1t+C1t),N>hEe?this._append`A${p},${p},0,1,${B},${a-E},${f-_}A${p},${p},0,1,${B},${this._x1=A},${this._y1=I}`:N>Q7&&this._append`A${p},${p},0,${+(N>=T1t)},${B},${this._x1=a+p*Math.cos(m)},${this._y1=f+p*Math.sin(m)}`)}rect(a,f,p,w){this._append`M${this._x0=this._x1=+a},${this._y0=this._y1=+f}h${p=+p}v${+w}h${-p}Z`}toString(){return this._}};function gEe(i){if(!i.ok)throw new Error(i.status+" "+i.statusText);return i.text()}function pEe(i,a){return fetch(i,a).then(gEe)}function bEe(i){return(a,f)=>pEe(a,f).then(p=>new DOMParser().parseFromString(p,i))}var wEe=bEe("image/svg+xml");function vEe(i){return Math.abs(i=Math.round(i))>=1e21?i.toLocaleString("en").replace(/,/g,""):i.toString(10)}function UU(i,a){if((f=(i=a?i.toExponential(a-1):i.toExponential()).indexOf("e"))<0)return null;var f,p=i.slice(0,f);return[p.length>1?p[0]+p.slice(2):p,+i.slice(f+1)]}function _A(i){return i=UU(Math.abs(i)),i?i[1]:NaN}function mEe(i,a){return function(f,p){for(var w=f.length,m=[],b=0,E=i[0],_=0;w>0&&E>0&&(_+E+1>p&&(E=Math.max(1,p-_)),m.push(f.substring(w-=E,w+E)),!((_+=E+1)>p));)E=i[b=(b+1)%i.length];return m.reverse().join(a)}}function yEe(i){return function(a){return a.replace(/[0-9]/g,function(f){return i[+f]})}}var xEe=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function WU(i){if(!(a=xEe.exec(i)))throw new Error("invalid format: "+i);var a;return new _1t({fill:a[1],align:a[2],sign:a[3],symbol:a[4],zero:a[5],width:a[6],comma:a[7],precision:a[8]&&a[8].slice(1),trim:a[9],type:a[10]})}WU.prototype=_1t.prototype;function _1t(i){this.fill=i.fill===void 0?" ":i.fill+"",this.align=i.align===void 0?">":i.align+"",this.sign=i.sign===void 0?"-":i.sign+"",this.symbol=i.symbol===void 0?"":i.symbol+"",this.zero=!!i.zero,this.width=i.width===void 0?void 0:+i.width,this.comma=!!i.comma,this.precision=i.precision===void 0?void 0:+i.precision,this.trim=!!i.trim,this.type=i.type===void 0?"":i.type+""}_1t.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function kEe(i){t:for(var a=i.length,f=1,p=-1,w;f0&&(p=0);break}return p>0?i.slice(0,p)+i.slice(w+1):i}var $Mt;function EEe(i,a){var f=UU(i,a);if(!f)return i+"";var p=f[0],w=f[1],m=w-($Mt=Math.max(-8,Math.min(8,Math.floor(w/3)))*3)+1,b=p.length;return m===b?p:m>b?p+new Array(m-b+1).join("0"):m>0?p.slice(0,m)+"."+p.slice(m):"0."+new Array(1-m).join("0")+UU(i,Math.max(0,a+m-1))[0]}function zMt(i,a){var f=UU(i,a);if(!f)return i+"";var p=f[0],w=f[1];return w<0?"0."+new Array(-w).join("0")+p:p.length>w+1?p.slice(0,w+1)+"."+p.slice(w+1):p+new Array(w-p.length+2).join("0")}const qMt={"%":(i,a)=>(i*100).toFixed(a),b:i=>Math.round(i).toString(2),c:i=>i+"",d:vEe,e:(i,a)=>i.toExponential(a),f:(i,a)=>i.toFixed(a),g:(i,a)=>i.toPrecision(a),o:i=>Math.round(i).toString(8),p:(i,a)=>zMt(i*100,a),r:zMt,s:EEe,X:i=>Math.round(i).toString(16).toUpperCase(),x:i=>Math.round(i).toString(16)};function HMt(i){return i}var VMt=Array.prototype.map,GMt=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function TEe(i){var a=i.grouping===void 0||i.thousands===void 0?HMt:mEe(VMt.call(i.grouping,Number),i.thousands+""),f=i.currency===void 0?"":i.currency[0]+"",p=i.currency===void 0?"":i.currency[1]+"",w=i.decimal===void 0?".":i.decimal+"",m=i.numerals===void 0?HMt:yEe(VMt.call(i.numerals,String)),b=i.percent===void 0?"%":i.percent+"",E=i.minus===void 0?"−":i.minus+"",_=i.nan===void 0?"NaN":i.nan+"";function A(B){B=WU(B);var N=B.fill,R=B.align,z=B.sign,W=B.symbol,et=B.zero,st=B.width,at=B.comma,bt=B.precision,mt=B.trim,yt=B.type;yt==="n"?(at=!0,yt="g"):qMt[yt]||(bt===void 0&&(bt=12),mt=!0,yt="g"),(et||N==="0"&&R==="=")&&(et=!0,N="0",R="=");var ft=W==="$"?f:W==="#"&&/[boxX]/.test(yt)?"0"+yt.toLowerCase():"",ut=W==="$"?p:/[%p]/.test(yt)?b:"",vt=qMt[yt],X=/[defgprs%]/.test(yt);bt=bt===void 0?6:/[gprs]/.test(yt)?Math.max(1,Math.min(21,bt)):Math.max(0,Math.min(20,bt));function pt(U){var Tt=ft,nt=ut,It,Ot,Bt;if(yt==="c")nt=vt(U)+nt,U="";else{U=+U;var Et=U<0||1/U<0;if(U=isNaN(U)?_:vt(Math.abs(U),bt),mt&&(U=kEe(U)),Et&&+U==0&&z!=="+"&&(Et=!1),Tt=(Et?z==="("?z:E:z==="-"||z==="("?"":z)+Tt,nt=(yt==="s"?GMt[8+$Mt/3]:"")+nt+(Et&&z==="("?")":""),X){for(It=-1,Ot=U.length;++ItBt||Bt>57){nt=(Bt===46?w+U.slice(It+1):U.slice(It))+nt,U=U.slice(0,It);break}}}at&&!et&&(U=a(U,1/0));var Z=Tt.length+U.length+nt.length,Ct=Z>1)+Tt+U+nt+Ct.slice(Z);break;default:U=Ct+Tt+U+nt;break}return m(U)}return pt.toString=function(){return B+""},pt}function I(B,N){var R=A((B=WU(B),B.type="f",B)),z=Math.max(-8,Math.min(8,Math.floor(_A(N)/3)))*3,W=Math.pow(10,-z),et=GMt[8+z/3];return function(st){return R(W*st)+et}}return{format:A,formatPrefix:I}}var YU,UMt,WMt;CEe({thousands:",",grouping:[3],currency:["$",""]});function CEe(i){return YU=TEe(i),UMt=YU.format,WMt=YU.formatPrefix,YU}function _Ee(i){return Math.max(0,-_A(Math.abs(i)))}function SEe(i,a){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(_A(a)/3)))*3-_A(Math.abs(i)))}function AEe(i,a){return i=Math.abs(i),a=Math.abs(a)-i,Math.max(0,_A(a)-_A(i))+1}function KU(i,a){switch(arguments.length){case 0:break;case 1:this.range(i);break;default:this.range(a).domain(i);break}return this}const YMt=Symbol("implicit");function XU(){var i=new $Lt,a=[],f=[],p=YMt;function w(m){let b=i.get(m);if(b===void 0){if(p!==YMt)return p;i.set(m,b=a.push(m)-1)}return f[b%f.length]}return w.domain=function(m){if(!arguments.length)return a.slice();a=[],i=new $Lt;for(const b of m)i.has(b)||i.set(b,a.push(b)-1);return w},w.range=function(m){return arguments.length?(f=Array.from(m),w):f.slice()},w.unknown=function(m){return arguments.length?(p=m,w):p},w.copy=function(){return XU(a,f).unknown(p)},KU.apply(w,arguments),w}function S1t(){var i=XU().unknown(void 0),a=i.domain,f=i.range,p=0,w=1,m,b,E=!1,_=0,A=0,I=.5;delete i.unknown;function B(){var N=a().length,R=wa&&(f=i,i=a,a=f),function(p){return Math.max(i,Math.min(a,p))}}function IEe(i,a,f){var p=i[0],w=i[1],m=a[0],b=a[1];return w2?OEe:IEe,_=A=null,B}function B(N){return N==null||isNaN(N=+N)?m:(_||(_=E(i.map(p),a,f)))(p(b(N)))}return B.invert=function(N){return b(w((A||(A=E(a,i.map(p),Qv)))(N)))},B.domain=function(N){return arguments.length?(i=Array.from(N,MEe),I()):i.slice()},B.range=function(N){return arguments.length?(a=Array.from(N),I()):a.slice()},B.rangeRound=function(N){return a=Array.from(N),f=Uke,I()},B.clamp=function(N){return arguments.length?(b=N?!0:SA,I()):b!==SA},B.interpolate=function(N){return arguments.length?(f=N,I()):f},B.unknown=function(N){return arguments.length?(m=N,B):m},function(N,R){return p=N,w=R,I()}}function QMt(){return PEe()(SA,SA)}function FEe(i,a,f,p){var w=t1t(i,a,f),m;switch(p=WU(p??",f"),p.type){case"s":{var b=Math.max(Math.abs(i),Math.abs(a));return p.precision==null&&!isNaN(m=SEe(w,b))&&(p.precision=m),WMt(p,b)}case"":case"e":case"g":case"p":case"r":{p.precision==null&&!isNaN(m=AEe(w,Math.max(Math.abs(i),Math.abs(a))))&&(p.precision=m-(p.type==="e"));break}case"f":case"%":{p.precision==null&&!isNaN(m=_Ee(w))&&(p.precision=m-(p.type==="%")*2);break}}return UMt(p)}function NEe(i){var a=i.domain;return i.ticks=function(f){var p=a();return Axe(p[0],p[p.length-1],f??10)},i.tickFormat=function(f,p){var w=a();return FEe(w[0],w[w.length-1],f??10,p)},i.nice=function(f){f==null&&(f=10);var p=a(),w=0,m=p.length-1,b=p[w],E=p[m],_,A,I=10;for(E0;){if(A=Jft(b,E,f),A===_)return p[w]=b,p[m]=E,a(p);if(A>0)b=Math.floor(b/A)*A,E=Math.ceil(E/A)*A;else if(A<0)b=Math.ceil(b*A)/A,E=Math.floor(E*A)/A;else break;_=A}return i},i}function AA(){var i=QMt();return i.copy=function(){return XMt(i,AA())},KU.apply(i,arguments),NEe(i)}function BEe(i,a){i=i.slice();var f=0,p=i.length-1,w=i[f],m=i[p],b;return m(i(m=new Date(+m)),m),w.ceil=m=>(i(m=new Date(m-1)),a(m,1),i(m),m),w.round=m=>{const b=w(m),E=w.ceil(m);return m-b(a(m=new Date(+m),b==null?1:Math.floor(b)),m),w.range=(m,b,E)=>{const _=[];if(m=w.ceil(m),E=E==null?1:Math.floor(E),!(m0))return _;let A;do _.push(A=new Date(+m)),a(m,E),i(m);while(Aa1(b=>{if(b>=b)for(;i(b),!m(b);)b.setTime(b-1)},(b,E)=>{if(b>=b)if(E<0)for(;++E<=0;)for(;a(b,-1),!m(b););else for(;--E>=0;)for(;a(b,1),!m(b););}),f&&(w.count=(m,b)=>(L1t.setTime(+m),M1t.setTime(+b),i(L1t),i(M1t),Math.floor(f(L1t,M1t))),w.every=m=>(m=Math.floor(m),!isFinite(m)||!(m>0)?null:m>1?w.filter(p?b=>p(b)%m===0:b=>w.count(0,b)%m===0):w)),w}const LA=a1(()=>{},(i,a)=>{i.setTime(+i+a)},(i,a)=>a-i);LA.every=i=>(i=Math.floor(i),!isFinite(i)||!(i>0)?null:i>1?a1(a=>{a.setTime(Math.floor(a/i)*i)},(a,f)=>{a.setTime(+a+f*i)},(a,f)=>(f-a)/i):LA),LA.range;const m5=1e3,Z2=m5*60,y5=Z2*60,x5=y5*24,D1t=x5*7,ZMt=x5*30,I1t=x5*365,sk=a1(i=>{i.setTime(i-i.getMilliseconds())},(i,a)=>{i.setTime(+i+a*m5)},(i,a)=>(a-i)/m5,i=>i.getUTCSeconds());sk.range;const PP=a1(i=>{i.setTime(i-i.getMilliseconds()-i.getSeconds()*m5)},(i,a)=>{i.setTime(+i+a*Z2)},(i,a)=>(a-i)/Z2,i=>i.getMinutes());PP.range,a1(i=>{i.setUTCSeconds(0,0)},(i,a)=>{i.setTime(+i+a*Z2)},(i,a)=>(a-i)/Z2,i=>i.getUTCMinutes()).range;const FP=a1(i=>{i.setTime(i-i.getMilliseconds()-i.getSeconds()*m5-i.getMinutes()*Z2)},(i,a)=>{i.setTime(+i+a*y5)},(i,a)=>(a-i)/y5,i=>i.getHours());FP.range,a1(i=>{i.setUTCMinutes(0,0,0)},(i,a)=>{i.setTime(+i+a*y5)},(i,a)=>(a-i)/y5,i=>i.getUTCHours()).range;const Z7=a1(i=>i.setHours(0,0,0,0),(i,a)=>i.setDate(i.getDate()+a),(i,a)=>(a-i-(a.getTimezoneOffset()-i.getTimezoneOffset())*Z2)/x5,i=>i.getDate()-1);Z7.range;const O1t=a1(i=>{i.setUTCHours(0,0,0,0)},(i,a)=>{i.setUTCDate(i.getUTCDate()+a)},(i,a)=>(a-i)/x5,i=>i.getUTCDate()-1);O1t.range,a1(i=>{i.setUTCHours(0,0,0,0)},(i,a)=>{i.setUTCDate(i.getUTCDate()+a)},(i,a)=>(a-i)/x5,i=>Math.floor(i/x5)).range;function J7(i){return a1(a=>{a.setDate(a.getDate()-(a.getDay()+7-i)%7),a.setHours(0,0,0,0)},(a,f)=>{a.setDate(a.getDate()+f*7)},(a,f)=>(f-a-(f.getTimezoneOffset()-a.getTimezoneOffset())*Z2)/D1t)}const NP=J7(0),BP=J7(1),JMt=J7(2),tDt=J7(3),tT=J7(4),eDt=J7(5),nDt=J7(6);NP.range,BP.range,JMt.range,tDt.range,tT.range,eDt.range,nDt.range;function eT(i){return a1(a=>{a.setUTCDate(a.getUTCDate()-(a.getUTCDay()+7-i)%7),a.setUTCHours(0,0,0,0)},(a,f)=>{a.setUTCDate(a.getUTCDate()+f*7)},(a,f)=>(f-a)/D1t)}const rDt=eT(0),QU=eT(1),REe=eT(2),jEe=eT(3),MA=eT(4),$Ee=eT(5),zEe=eT(6);rDt.range,QU.range,REe.range,jEe.range,MA.range,$Ee.range,zEe.range;const RP=a1(i=>{i.setDate(1),i.setHours(0,0,0,0)},(i,a)=>{i.setMonth(i.getMonth()+a)},(i,a)=>a.getMonth()-i.getMonth()+(a.getFullYear()-i.getFullYear())*12,i=>i.getMonth());RP.range,a1(i=>{i.setUTCDate(1),i.setUTCHours(0,0,0,0)},(i,a)=>{i.setUTCMonth(i.getUTCMonth()+a)},(i,a)=>a.getUTCMonth()-i.getUTCMonth()+(a.getUTCFullYear()-i.getUTCFullYear())*12,i=>i.getUTCMonth()).range;const k5=a1(i=>{i.setMonth(0,1),i.setHours(0,0,0,0)},(i,a)=>{i.setFullYear(i.getFullYear()+a)},(i,a)=>a.getFullYear()-i.getFullYear(),i=>i.getFullYear());k5.every=i=>!isFinite(i=Math.floor(i))||!(i>0)?null:a1(a=>{a.setFullYear(Math.floor(a.getFullYear()/i)*i),a.setMonth(0,1),a.setHours(0,0,0,0)},(a,f)=>{a.setFullYear(a.getFullYear()+f*i)}),k5.range;const nT=a1(i=>{i.setUTCMonth(0,1),i.setUTCHours(0,0,0,0)},(i,a)=>{i.setUTCFullYear(i.getUTCFullYear()+a)},(i,a)=>a.getUTCFullYear()-i.getUTCFullYear(),i=>i.getUTCFullYear());nT.every=i=>!isFinite(i=Math.floor(i))||!(i>0)?null:a1(a=>{a.setUTCFullYear(Math.floor(a.getUTCFullYear()/i)*i),a.setUTCMonth(0,1),a.setUTCHours(0,0,0,0)},(a,f)=>{a.setUTCFullYear(a.getUTCFullYear()+f*i)}),nT.range;function qEe(i,a,f,p,w,m){const b=[[sk,1,m5],[sk,5,5*m5],[sk,15,15*m5],[sk,30,30*m5],[m,1,Z2],[m,5,5*Z2],[m,15,15*Z2],[m,30,30*Z2],[w,1,y5],[w,3,3*y5],[w,6,6*y5],[w,12,12*y5],[p,1,x5],[p,2,2*x5],[f,1,D1t],[a,1,ZMt],[a,3,3*ZMt],[i,1,I1t]];function E(A,I,B){const N=Iet).right(b,N);if(R===b.length)return i.every(t1t(A/I1t,I/I1t,B));if(R===0)return LA.every(Math.max(t1t(A,I,B),1));const[z,W]=b[N/b[R-1][2]53)return null;"w"in re||(re.w=1),"Z"in re?(Pe=F1t(jP(re.y,0,1)),te=Pe.getUTCDay(),Pe=te>4||te===0?QU.ceil(Pe):QU(Pe),Pe=O1t.offset(Pe,(re.V-1)*7),re.y=Pe.getUTCFullYear(),re.m=Pe.getUTCMonth(),re.d=Pe.getUTCDate()+(re.w+6)%7):(Pe=P1t(jP(re.y,0,1)),te=Pe.getDay(),Pe=te>4||te===0?BP.ceil(Pe):BP(Pe),Pe=Z7.offset(Pe,(re.V-1)*7),re.y=Pe.getFullYear(),re.m=Pe.getMonth(),re.d=Pe.getDate()+(re.w+6)%7)}else("W"in re||"U"in re)&&("w"in re||(re.w="u"in re?re.u%7:"W"in re?1:0),te="Z"in re?F1t(jP(re.y,0,1)).getUTCDay():P1t(jP(re.y,0,1)).getDay(),re.m=0,re.d="W"in re?(re.w+6)%7+re.W*7-(te+5)%7:re.w+re.U*7-(te+6)%7);return"Z"in re?(re.H+=re.Z/100|0,re.M+=re.Z%100,F1t(re)):P1t(re)}}function vt(ce,ke,zt,re){for(var se=0,Pe=ke.length,te=zt.length,Me,de;se=te)return-1;if(Me=ke.charCodeAt(se++),Me===37){if(Me=ke.charAt(se++),de=yt[Me in iDt?ke.charAt(se++):Me],!de||(re=de(ce,zt,re))<0)return-1}else if(Me!=zt.charCodeAt(re++))return-1}return re}function X(ce,ke,zt){var re=A.exec(ke.slice(zt));return re?(ce.p=I.get(re[0].toLowerCase()),zt+re[0].length):-1}function pt(ce,ke,zt){var re=R.exec(ke.slice(zt));return re?(ce.w=z.get(re[0].toLowerCase()),zt+re[0].length):-1}function U(ce,ke,zt){var re=B.exec(ke.slice(zt));return re?(ce.w=N.get(re[0].toLowerCase()),zt+re[0].length):-1}function Tt(ce,ke,zt){var re=st.exec(ke.slice(zt));return re?(ce.m=at.get(re[0].toLowerCase()),zt+re[0].length):-1}function nt(ce,ke,zt){var re=W.exec(ke.slice(zt));return re?(ce.m=et.get(re[0].toLowerCase()),zt+re[0].length):-1}function It(ce,ke,zt){return vt(ce,a,ke,zt)}function Ot(ce,ke,zt){return vt(ce,f,ke,zt)}function Bt(ce,ke,zt){return vt(ce,p,ke,zt)}function Et(ce){return b[ce.getDay()]}function Z(ce){return m[ce.getDay()]}function Ct(ce){return _[ce.getMonth()]}function xt(ce){return E[ce.getMonth()]}function Ht(ce){return w[+(ce.getHours()>=12)]}function Le(ce){return 1+~~(ce.getMonth()/3)}function Ft(ce){return b[ce.getUTCDay()]}function gn(ce){return m[ce.getUTCDay()]}function Se(ce){return _[ce.getUTCMonth()]}function me(ce){return E[ce.getUTCMonth()]}function Ve(ce){return w[+(ce.getUTCHours()>=12)]}function Ye(ce){return 1+~~(ce.getUTCMonth()/3)}return{format:function(ce){var ke=ft(ce+="",bt);return ke.toString=function(){return ce},ke},parse:function(ce){var ke=ut(ce+="",!1);return ke.toString=function(){return ce},ke},utcFormat:function(ce){var ke=ft(ce+="",mt);return ke.toString=function(){return ce},ke},utcParse:function(ce){var ke=ut(ce+="",!0);return ke.toString=function(){return ce},ke}}}var iDt={"-":"",_:" ",0:"0"},X1=/^\s*\d+/,UEe=/^%/,WEe=/[\\^$*+?|[\]().{}]/g;function Ic(i,a,f){var p=i<0?"-":"",w=(p?-i:i)+"",m=w.length;return p+(m[a.toLowerCase(),f]))}function KEe(i,a,f){var p=X1.exec(a.slice(f,f+1));return p?(i.w=+p[0],f+p[0].length):-1}function XEe(i,a,f){var p=X1.exec(a.slice(f,f+1));return p?(i.u=+p[0],f+p[0].length):-1}function QEe(i,a,f){var p=X1.exec(a.slice(f,f+2));return p?(i.U=+p[0],f+p[0].length):-1}function ZEe(i,a,f){var p=X1.exec(a.slice(f,f+2));return p?(i.V=+p[0],f+p[0].length):-1}function JEe(i,a,f){var p=X1.exec(a.slice(f,f+2));return p?(i.W=+p[0],f+p[0].length):-1}function sDt(i,a,f){var p=X1.exec(a.slice(f,f+4));return p?(i.y=+p[0],f+p[0].length):-1}function aDt(i,a,f){var p=X1.exec(a.slice(f,f+2));return p?(i.y=+p[0]+(+p[0]>68?1900:2e3),f+p[0].length):-1}function t7e(i,a,f){var p=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(a.slice(f,f+6));return p?(i.Z=p[1]?0:-(p[2]+(p[3]||"00")),f+p[0].length):-1}function e7e(i,a,f){var p=X1.exec(a.slice(f,f+1));return p?(i.q=p[0]*3-3,f+p[0].length):-1}function n7e(i,a,f){var p=X1.exec(a.slice(f,f+2));return p?(i.m=p[0]-1,f+p[0].length):-1}function oDt(i,a,f){var p=X1.exec(a.slice(f,f+2));return p?(i.d=+p[0],f+p[0].length):-1}function r7e(i,a,f){var p=X1.exec(a.slice(f,f+3));return p?(i.m=0,i.d=+p[0],f+p[0].length):-1}function cDt(i,a,f){var p=X1.exec(a.slice(f,f+2));return p?(i.H=+p[0],f+p[0].length):-1}function i7e(i,a,f){var p=X1.exec(a.slice(f,f+2));return p?(i.M=+p[0],f+p[0].length):-1}function s7e(i,a,f){var p=X1.exec(a.slice(f,f+2));return p?(i.S=+p[0],f+p[0].length):-1}function a7e(i,a,f){var p=X1.exec(a.slice(f,f+3));return p?(i.L=+p[0],f+p[0].length):-1}function o7e(i,a,f){var p=X1.exec(a.slice(f,f+6));return p?(i.L=Math.floor(p[0]/1e3),f+p[0].length):-1}function c7e(i,a,f){var p=UEe.exec(a.slice(f,f+1));return p?f+p[0].length:-1}function u7e(i,a,f){var p=X1.exec(a.slice(f));return p?(i.Q=+p[0],f+p[0].length):-1}function l7e(i,a,f){var p=X1.exec(a.slice(f));return p?(i.s=+p[0],f+p[0].length):-1}function uDt(i,a){return Ic(i.getDate(),a,2)}function h7e(i,a){return Ic(i.getHours(),a,2)}function f7e(i,a){return Ic(i.getHours()%12||12,a,2)}function d7e(i,a){return Ic(1+Z7.count(k5(i),i),a,3)}function lDt(i,a){return Ic(i.getMilliseconds(),a,3)}function g7e(i,a){return lDt(i,a)+"000"}function p7e(i,a){return Ic(i.getMonth()+1,a,2)}function b7e(i,a){return Ic(i.getMinutes(),a,2)}function w7e(i,a){return Ic(i.getSeconds(),a,2)}function v7e(i){var a=i.getDay();return a===0?7:a}function m7e(i,a){return Ic(NP.count(k5(i)-1,i),a,2)}function hDt(i){var a=i.getDay();return a>=4||a===0?tT(i):tT.ceil(i)}function y7e(i,a){return i=hDt(i),Ic(tT.count(k5(i),i)+(k5(i).getDay()===4),a,2)}function x7e(i){return i.getDay()}function k7e(i,a){return Ic(BP.count(k5(i)-1,i),a,2)}function E7e(i,a){return Ic(i.getFullYear()%100,a,2)}function T7e(i,a){return i=hDt(i),Ic(i.getFullYear()%100,a,2)}function C7e(i,a){return Ic(i.getFullYear()%1e4,a,4)}function _7e(i,a){var f=i.getDay();return i=f>=4||f===0?tT(i):tT.ceil(i),Ic(i.getFullYear()%1e4,a,4)}function S7e(i){var a=i.getTimezoneOffset();return(a>0?"-":(a*=-1,"+"))+Ic(a/60|0,"0",2)+Ic(a%60,"0",2)}function fDt(i,a){return Ic(i.getUTCDate(),a,2)}function A7e(i,a){return Ic(i.getUTCHours(),a,2)}function L7e(i,a){return Ic(i.getUTCHours()%12||12,a,2)}function M7e(i,a){return Ic(1+O1t.count(nT(i),i),a,3)}function dDt(i,a){return Ic(i.getUTCMilliseconds(),a,3)}function D7e(i,a){return dDt(i,a)+"000"}function I7e(i,a){return Ic(i.getUTCMonth()+1,a,2)}function O7e(i,a){return Ic(i.getUTCMinutes(),a,2)}function P7e(i,a){return Ic(i.getUTCSeconds(),a,2)}function F7e(i){var a=i.getUTCDay();return a===0?7:a}function N7e(i,a){return Ic(rDt.count(nT(i)-1,i),a,2)}function gDt(i){var a=i.getUTCDay();return a>=4||a===0?MA(i):MA.ceil(i)}function B7e(i,a){return i=gDt(i),Ic(MA.count(nT(i),i)+(nT(i).getUTCDay()===4),a,2)}function R7e(i){return i.getUTCDay()}function j7e(i,a){return Ic(QU.count(nT(i)-1,i),a,2)}function $7e(i,a){return Ic(i.getUTCFullYear()%100,a,2)}function z7e(i,a){return i=gDt(i),Ic(i.getUTCFullYear()%100,a,2)}function q7e(i,a){return Ic(i.getUTCFullYear()%1e4,a,4)}function H7e(i,a){var f=i.getUTCDay();return i=f>=4||f===0?MA(i):MA.ceil(i),Ic(i.getUTCFullYear()%1e4,a,4)}function V7e(){return"+0000"}function pDt(){return"%"}function bDt(i){return+i}function wDt(i){return Math.floor(+i/1e3)}var DA,ZU;G7e({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function G7e(i){return DA=GEe(i),ZU=DA.format,DA.parse,DA.utcFormat,DA.utcParse,DA}function U7e(i){return new Date(i)}function W7e(i){return i instanceof Date?+i:+new Date(+i)}function vDt(i,a,f,p,w,m,b,E,_,A){var I=QMt(),B=I.invert,N=I.domain,R=A(".%L"),z=A(":%S"),W=A("%I:%M"),et=A("%I %p"),st=A("%a %d"),at=A("%b %d"),bt=A("%B"),mt=A("%Y");function yt(ft){return(_(ft)1?0:i<-1?qP:Math.acos(i)}function yDt(i){return i>=1?JU:i<=-1?-JU:Math.asin(i)}function xDt(i){let a=3;return i.digits=function(f){if(!arguments.length)return a;if(f==null)a=null;else{const p=Math.floor(f);if(!(p>=0))throw new RangeError(`invalid digits: ${f}`);a=p}return i},()=>new dEe(a)}function J7e(i){return i.innerRadius}function tTe(i){return i.outerRadius}function eTe(i){return i.startAngle}function nTe(i){return i.endAngle}function rTe(i){return i&&i.padAngle}function iTe(i,a,f,p,w,m,b,E){var _=f-i,A=p-a,I=b-w,B=E-m,N=B*_-I*A;if(!(N*NIt*It+Ot*Ot&&(vt=pt,X=U),{cx:vt,cy:X,x01:-I,y01:-B,x11:vt*(w/yt-1),y11:X*(w/yt-1)}}function OA(){var i=J7e,a=tTe,f=Qh(0),p=null,w=eTe,m=nTe,b=rTe,E=null,_=xDt(A);function A(){var I,B,N=+i.apply(this,arguments),R=+a.apply(this,arguments),z=w.apply(this,arguments)-JU,W=m.apply(this,arguments)-JU,et=mDt(W-z),st=W>z;if(E||(E=I=_()),Ry0))E.moveTo(0,0);else if(et>tW-y0)E.moveTo(R*rT(z),R*h3(z)),E.arc(0,0,R,z,W,!st),N>y0&&(E.moveTo(N*rT(W),N*h3(W)),E.arc(0,0,N,W,z,st));else{var at=z,bt=W,mt=z,yt=W,ft=et,ut=et,vt=b.apply(this,arguments)/2,X=vt>y0&&(p?+p.apply(this,arguments):IA(N*N+R*R)),pt=N1t(mDt(R-N)/2,+f.apply(this,arguments)),U=pt,Tt=pt,nt,It;if(X>y0){var Ot=yDt(X/N*h3(vt)),Bt=yDt(X/R*h3(vt));(ft-=Ot*2)>y0?(Ot*=st?1:-1,mt+=Ot,yt-=Ot):(ft=0,mt=yt=(z+W)/2),(ut-=Bt*2)>y0?(Bt*=st?1:-1,at+=Bt,bt-=Bt):(ut=0,at=bt=(z+W)/2)}var Et=R*rT(at),Z=R*h3(at),Ct=N*rT(yt),xt=N*h3(yt);if(pt>y0){var Ht=R*rT(bt),Le=R*h3(bt),Ft=N*rT(mt),gn=N*h3(mt),Se;if(ety0?Tt>y0?(nt=eW(Ft,gn,Et,Z,R,Tt,st),It=eW(Ht,Le,Ct,xt,R,Tt,st),E.moveTo(nt.cx+nt.x01,nt.cy+nt.y01),Tty0)||!(ft>y0)?E.lineTo(Ct,xt):U>y0?(nt=eW(Ct,xt,Ht,Le,N,-U,st),It=eW(Et,Z,Ft,gn,N,-U,st),E.lineTo(nt.cx+nt.x01,nt.cy+nt.y01),Ui?1:a>=i?0:NaN}function cTe(i){return i}function uTe(){var i=cTe,a=oTe,f=null,p=Qh(0),w=Qh(tW),m=Qh(0);function b(E){var _,A=(E=kDt(E)).length,I,B,N=0,R=new Array(A),z=new Array(A),W=+p.apply(this,arguments),et=Math.min(tW,Math.max(-tW,w.apply(this,arguments)-W)),st,at=Math.min(Math.abs(et)/A,m.apply(this,arguments)),bt=at*(et<0?-1:1),mt;for(_=0;_0&&(N+=mt);for(a!=null?R.sort(function(yt,ft){return a(z[yt],z[ft])}):f!=null&&R.sort(function(yt,ft){return f(E[yt],E[ft])}),_=0,B=N?(et-A*bt)/N:0;_0?mt*B:0)+bt,z[I]={data:E[I],index:_,value:mt,startAngle:W,endAngle:st,padAngle:at};return z}return b.value=function(E){return arguments.length?(i=typeof E=="function"?E:Qh(+E),b):i},b.sortValues=function(E){return arguments.length?(a=E,f=null,b):a},b.sort=function(E){return arguments.length?(f=E,a=null,b):f},b.startAngle=function(E){return arguments.length?(p=typeof E=="function"?E:Qh(+E),b):p},b.endAngle=function(E){return arguments.length?(w=typeof E=="function"?E:Qh(+E),b):w},b.padAngle=function(E){return arguments.length?(m=typeof E=="function"?E:Qh(+E),b):m},b}class TDt{constructor(a,f){this._context=a,this._x=f}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(a,f){switch(a=+a,f=+f,this._point){case 0:{this._point=1,this._line?this._context.lineTo(a,f):this._context.moveTo(a,f);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+a)/2,this._y0,this._x0,f,a,f):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+f)/2,a,this._y0,a,f);break}}this._x0=a,this._y0=f}}function lTe(i){return new TDt(i,!0)}function hTe(i){return new TDt(i,!1)}function ak(){}function nW(i,a,f){i._context.bezierCurveTo((2*i._x0+i._x1)/3,(2*i._y0+i._y1)/3,(i._x0+2*i._x1)/3,(i._y0+2*i._y1)/3,(i._x0+4*i._x1+a)/6,(i._y0+4*i._y1+f)/6)}function rW(i){this._context=i}rW.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:nW(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1,this._line?this._context.lineTo(i,a):this._context.moveTo(i,a);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:nW(this,i,a);break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=a}};function HP(i){return new rW(i)}function CDt(i){this._context=i}CDt.prototype={areaStart:ak,areaEnd:ak,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1,this._x2=i,this._y2=a;break;case 1:this._point=2,this._x3=i,this._y3=a;break;case 2:this._point=3,this._x4=i,this._y4=a,this._context.moveTo((this._x0+4*this._x1+i)/6,(this._y0+4*this._y1+a)/6);break;default:nW(this,i,a);break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=a}};function fTe(i){return new CDt(i)}function _Dt(i){this._context=i}_Dt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var f=(this._x0+4*this._x1+i)/6,p=(this._y0+4*this._y1+a)/6;this._line?this._context.lineTo(f,p):this._context.moveTo(f,p);break;case 3:this._point=4;default:nW(this,i,a);break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=a}};function dTe(i){return new _Dt(i)}function SDt(i,a){this._basis=new rW(i),this._beta=a}SDt.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var i=this._x,a=this._y,f=i.length-1;if(f>0)for(var p=i[0],w=a[0],m=i[f]-p,b=a[f]-w,E=-1,_;++E<=f;)_=E/f,this._basis.point(this._beta*i[E]+(1-this._beta)*(p+_*m),this._beta*a[E]+(1-this._beta)*(w+_*b));this._x=this._y=null,this._basis.lineEnd()},point:function(i,a){this._x.push(+i),this._y.push(+a)}};const gTe=function i(a){function f(p){return a===1?new rW(p):new SDt(p,a)}return f.beta=function(p){return i(+p)},f}(.85);function iW(i,a,f){i._context.bezierCurveTo(i._x1+i._k*(i._x2-i._x0),i._y1+i._k*(i._y2-i._y0),i._x2+i._k*(i._x1-a),i._y2+i._k*(i._y1-f),i._x2,i._y2)}function B1t(i,a){this._context=i,this._k=(1-a)/6}B1t.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:iW(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1,this._line?this._context.lineTo(i,a):this._context.moveTo(i,a);break;case 1:this._point=2,this._x1=i,this._y1=a;break;case 2:this._point=3;default:iW(this,i,a);break}this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const pTe=function i(a){function f(p){return new B1t(p,a)}return f.tension=function(p){return i(+p)},f}(0);function R1t(i,a){this._context=i,this._k=(1-a)/6}R1t.prototype={areaStart:ak,areaEnd:ak,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1,this._x3=i,this._y3=a;break;case 1:this._point=2,this._context.moveTo(this._x4=i,this._y4=a);break;case 2:this._point=3,this._x5=i,this._y5=a;break;default:iW(this,i,a);break}this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const bTe=function i(a){function f(p){return new R1t(p,a)}return f.tension=function(p){return i(+p)},f}(0);function j1t(i,a){this._context=i,this._k=(1-a)/6}j1t.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:iW(this,i,a);break}this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const wTe=function i(a){function f(p){return new j1t(p,a)}return f.tension=function(p){return i(+p)},f}(0);function $1t(i,a,f){var p=i._x1,w=i._y1,m=i._x2,b=i._y2;if(i._l01_a>y0){var E=2*i._l01_2a+3*i._l01_a*i._l12_a+i._l12_2a,_=3*i._l01_a*(i._l01_a+i._l12_a);p=(p*E-i._x0*i._l12_2a+i._x2*i._l01_2a)/_,w=(w*E-i._y0*i._l12_2a+i._y2*i._l01_2a)/_}if(i._l23_a>y0){var A=2*i._l23_2a+3*i._l23_a*i._l12_a+i._l12_2a,I=3*i._l23_a*(i._l23_a+i._l12_a);m=(m*A+i._x1*i._l23_2a-a*i._l12_2a)/I,b=(b*A+i._y1*i._l23_2a-f*i._l12_2a)/I}i._context.bezierCurveTo(p,w,m,b,i._x2,i._y2)}function ADt(i,a){this._context=i,this._alpha=a}ADt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){if(i=+i,a=+a,this._point){var f=this._x2-i,p=this._y2-a;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(f*f+p*p,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(i,a):this._context.moveTo(i,a);break;case 1:this._point=2;break;case 2:this._point=3;default:$1t(this,i,a);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const vTe=function i(a){function f(p){return a?new ADt(p,a):new B1t(p,0)}return f.alpha=function(p){return i(+p)},f}(.5);function LDt(i,a){this._context=i,this._alpha=a}LDt.prototype={areaStart:ak,areaEnd:ak,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(i,a){if(i=+i,a=+a,this._point){var f=this._x2-i,p=this._y2-a;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(f*f+p*p,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=i,this._y3=a;break;case 1:this._point=2,this._context.moveTo(this._x4=i,this._y4=a);break;case 2:this._point=3,this._x5=i,this._y5=a;break;default:$1t(this,i,a);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const mTe=function i(a){function f(p){return a?new LDt(p,a):new R1t(p,0)}return f.alpha=function(p){return i(+p)},f}(.5);function MDt(i,a){this._context=i,this._alpha=a}MDt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){if(i=+i,a=+a,this._point){var f=this._x2-i,p=this._y2-a;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(f*f+p*p,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:$1t(this,i,a);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const yTe=function i(a){function f(p){return a?new MDt(p,a):new j1t(p,0)}return f.alpha=function(p){return i(+p)},f}(.5);function DDt(i){this._context=i}DDt.prototype={areaStart:ak,areaEnd:ak,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(i,a){i=+i,a=+a,this._point?this._context.lineTo(i,a):(this._point=1,this._context.moveTo(i,a))}};function xTe(i){return new DDt(i)}function IDt(i){return i<0?-1:1}function ODt(i,a,f){var p=i._x1-i._x0,w=a-i._x1,m=(i._y1-i._y0)/(p||w<0&&-0),b=(f-i._y1)/(w||p<0&&-0),E=(m*w+b*p)/(p+w);return(IDt(m)+IDt(b))*Math.min(Math.abs(m),Math.abs(b),.5*Math.abs(E))||0}function PDt(i,a){var f=i._x1-i._x0;return f?(3*(i._y1-i._y0)/f-a)/2:a}function z1t(i,a,f){var p=i._x0,w=i._y0,m=i._x1,b=i._y1,E=(m-p)/3;i._context.bezierCurveTo(p+E,w+E*a,m-E,b-E*f,m,b)}function sW(i){this._context=i}sW.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:z1t(this,this._t0,PDt(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){var f=NaN;if(i=+i,a=+a,!(i===this._x1&&a===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(i,a):this._context.moveTo(i,a);break;case 1:this._point=2;break;case 2:this._point=3,z1t(this,PDt(this,f=ODt(this,i,a)),f);break;default:z1t(this,this._t0,f=ODt(this,i,a));break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=a,this._t0=f}}};function FDt(i){this._context=new NDt(i)}(FDt.prototype=Object.create(sW.prototype)).point=function(i,a){sW.prototype.point.call(this,a,i)};function NDt(i){this._context=i}NDt.prototype={moveTo:function(i,a){this._context.moveTo(a,i)},closePath:function(){this._context.closePath()},lineTo:function(i,a){this._context.lineTo(a,i)},bezierCurveTo:function(i,a,f,p,w,m){this._context.bezierCurveTo(a,i,p,f,m,w)}};function kTe(i){return new sW(i)}function ETe(i){return new FDt(i)}function BDt(i){this._context=i}BDt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var i=this._x,a=this._y,f=i.length;if(f)if(this._line?this._context.lineTo(i[0],a[0]):this._context.moveTo(i[0],a[0]),f===2)this._context.lineTo(i[1],a[1]);else for(var p=RDt(i),w=RDt(a),m=0,b=1;b=0;--a)w[a]=(b[a]-w[a+1])/m[a];for(m[f-1]=(i[f]+w[f-1])/2,a=0;a=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1,this._line?this._context.lineTo(i,a):this._context.moveTo(i,a);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,a),this._context.lineTo(i,a);else{var f=this._x*(1-this._t)+i*this._t;this._context.lineTo(f,this._y),this._context.lineTo(f,a)}break}}this._x=i,this._y=a}};function CTe(i){return new aW(i,.5)}function _Te(i){return new aW(i,0)}function STe(i){return new aW(i,1)}function VP(i,a,f){this.k=i,this.x=a,this.y=f}VP.prototype={constructor:VP,scale:function(i){return i===1?this:new VP(this.k*i,this.x,this.y)},translate:function(i,a){return i===0&a===0?this:new VP(this.k,this.x+this.k*i,this.y+this.k*a)},apply:function(i){return[i[0]*this.k+this.x,i[1]*this.k+this.y]},applyX:function(i){return i*this.k+this.x},applyY:function(i){return i*this.k+this.y},invert:function(i){return[(i[0]-this.x)/this.k,(i[1]-this.y)/this.k]},invertX:function(i){return(i-this.x)/this.k},invertY:function(i){return(i-this.y)/this.k},rescaleX:function(i){return i.copy().domain(i.range().map(this.invertX,this).map(i.invert,i))},rescaleY:function(i){return i.copy().domain(i.range().map(this.invertY,this).map(i.invert,i))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}},VP.prototype;/*! @license DOMPurify 3.0.5 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.5/LICENSE */const{entries:jDt,setPrototypeOf:$Dt,isFrozen:ATe,getPrototypeOf:LTe,getOwnPropertyDescriptor:MTe}=Object;let{freeze:ug,seal:Jv,create:DTe}=Object,{apply:q1t,construct:H1t}=typeof Reflect<"u"&&Reflect;q1t||(q1t=function(a,f,p){return a.apply(f,p)}),ug||(ug=function(a){return a}),Jv||(Jv=function(a){return a}),H1t||(H1t=function(a,f){return new a(...f)});const ITe=J2(Array.prototype.forEach),zDt=J2(Array.prototype.pop),GP=J2(Array.prototype.push),oW=J2(String.prototype.toLowerCase),V1t=J2(String.prototype.toString),OTe=J2(String.prototype.match),tm=J2(String.prototype.replace),PTe=J2(String.prototype.indexOf),FTe=J2(String.prototype.trim),Pb=J2(RegExp.prototype.test),UP=NTe(TypeError);function J2(i){return function(a){for(var f=arguments.length,p=new Array(f>1?f-1:0),w=1;w/gm),zTe=Jv(/\${[\w\W]*}/gm),qTe=Jv(/^data-[\-\w.\u00B7-\uFFFF]/),HTe=Jv(/^aria-[\-\w]+$/),UDt=Jv(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),VTe=Jv(/^(?:\w+script|data):/i),GTe=Jv(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),WDt=Jv(/^html$/i);var YDt=Object.freeze({__proto__:null,MUSTACHE_EXPR:jTe,ERB_EXPR:$Te,TMPLIT_EXPR:zTe,DATA_ATTR:qTe,ARIA_ATTR:HTe,IS_ALLOWED_URI:UDt,IS_SCRIPT_OR_DATA:VTe,ATTR_WHITESPACE:GTe,DOCTYPE_NAME:WDt});const UTe=()=>typeof window>"u"?null:window,WTe=function(a,f){if(typeof a!="object"||typeof a.createPolicy!="function")return null;let p=null;const w="data-tt-policy-suffix";f&&f.hasAttribute(w)&&(p=f.getAttribute(w));const m="dompurify"+(p?"#"+p:"");try{return a.createPolicy(m,{createHTML(b){return b},createScriptURL(b){return b}})}catch{return console.warn("TrustedTypes policy "+m+" could not be created."),null}};function KDt(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:UTe();const a=Bi=>KDt(Bi);if(a.version="3.0.5",a.removed=[],!i||!i.document||i.document.nodeType!==9)return a.isSupported=!1,a;const f=i.document,p=f.currentScript;let{document:w}=i;const{DocumentFragment:m,HTMLTemplateElement:b,Node:E,Element:_,NodeFilter:A,NamedNodeMap:I=i.NamedNodeMap||i.MozNamedAttrMap,HTMLFormElement:B,DOMParser:N,trustedTypes:R}=i,z=_.prototype,W=cW(z,"cloneNode"),et=cW(z,"nextSibling"),st=cW(z,"childNodes"),at=cW(z,"parentNode");if(typeof b=="function"){const Bi=w.createElement("template");Bi.content&&Bi.content.ownerDocument&&(w=Bi.content.ownerDocument)}let bt,mt="";const{implementation:yt,createNodeIterator:ft,createDocumentFragment:ut,getElementsByTagName:vt}=w,{importNode:X}=f;let pt={};a.isSupported=typeof jDt=="function"&&typeof at=="function"&&yt&&yt.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:U,ERB_EXPR:Tt,TMPLIT_EXPR:nt,DATA_ATTR:It,ARIA_ATTR:Ot,IS_SCRIPT_OR_DATA:Bt,ATTR_WHITESPACE:Et}=YDt;let{IS_ALLOWED_URI:Z}=YDt,Ct=null;const xt=mo({},[...qDt,...G1t,...U1t,...W1t,...HDt]);let Ht=null;const Le=mo({},[...VDt,...Y1t,...GDt,...uW]);let Ft=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),gn=null,Se=null,me=!0,Ve=!0,Ye=!1,ce=!0,ke=!1,zt=!1,re=!1,se=!1,Pe=!1,te=!1,Me=!1,de=!0,on=!1;const ni="user-content-";let Ks=!0,ws=!1,fo={},Xi=null;const Er=mo({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Xn=null;const di=mo({},["audio","video","img","source","image","track"]);let Ee=null;const Kn=mo({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),He="http://www.w3.org/1998/Math/MathML",Ti="http://www.w3.org/2000/svg",pn="http://www.w3.org/1999/xhtml";let Es=pn,qa=!1,Ma=null;const Gs=mo({},[He,Ti,pn],V1t);let Po;const vs=["application/xhtml+xml","text/html"],ru="text/html";let zs,Du=null;const pm=w.createElement("form"),uw=function(cn){return cn instanceof RegExp||cn instanceof Function},Wu=function(cn){if(!(Du&&Du===cn)){if((!cn||typeof cn!="object")&&(cn={}),cn=PA(cn),Po=vs.indexOf(cn.PARSER_MEDIA_TYPE)===-1?Po=ru:Po=cn.PARSER_MEDIA_TYPE,zs=Po==="application/xhtml+xml"?V1t:oW,Ct="ALLOWED_TAGS"in cn?mo({},cn.ALLOWED_TAGS,zs):xt,Ht="ALLOWED_ATTR"in cn?mo({},cn.ALLOWED_ATTR,zs):Le,Ma="ALLOWED_NAMESPACES"in cn?mo({},cn.ALLOWED_NAMESPACES,V1t):Gs,Ee="ADD_URI_SAFE_ATTR"in cn?mo(PA(Kn),cn.ADD_URI_SAFE_ATTR,zs):Kn,Xn="ADD_DATA_URI_TAGS"in cn?mo(PA(di),cn.ADD_DATA_URI_TAGS,zs):di,Xi="FORBID_CONTENTS"in cn?mo({},cn.FORBID_CONTENTS,zs):Er,gn="FORBID_TAGS"in cn?mo({},cn.FORBID_TAGS,zs):{},Se="FORBID_ATTR"in cn?mo({},cn.FORBID_ATTR,zs):{},fo="USE_PROFILES"in cn?cn.USE_PROFILES:!1,me=cn.ALLOW_ARIA_ATTR!==!1,Ve=cn.ALLOW_DATA_ATTR!==!1,Ye=cn.ALLOW_UNKNOWN_PROTOCOLS||!1,ce=cn.ALLOW_SELF_CLOSE_IN_ATTR!==!1,ke=cn.SAFE_FOR_TEMPLATES||!1,zt=cn.WHOLE_DOCUMENT||!1,Pe=cn.RETURN_DOM||!1,te=cn.RETURN_DOM_FRAGMENT||!1,Me=cn.RETURN_TRUSTED_TYPE||!1,se=cn.FORCE_BODY||!1,de=cn.SANITIZE_DOM!==!1,on=cn.SANITIZE_NAMED_PROPS||!1,Ks=cn.KEEP_CONTENT!==!1,ws=cn.IN_PLACE||!1,Z=cn.ALLOWED_URI_REGEXP||UDt,Es=cn.NAMESPACE||pn,Ft=cn.CUSTOM_ELEMENT_HANDLING||{},cn.CUSTOM_ELEMENT_HANDLING&&uw(cn.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Ft.tagNameCheck=cn.CUSTOM_ELEMENT_HANDLING.tagNameCheck),cn.CUSTOM_ELEMENT_HANDLING&&uw(cn.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Ft.attributeNameCheck=cn.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),cn.CUSTOM_ELEMENT_HANDLING&&typeof cn.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(Ft.allowCustomizedBuiltInElements=cn.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),ke&&(Ve=!1),te&&(Pe=!0),fo&&(Ct=mo({},[...HDt]),Ht=[],fo.html===!0&&(mo(Ct,qDt),mo(Ht,VDt)),fo.svg===!0&&(mo(Ct,G1t),mo(Ht,Y1t),mo(Ht,uW)),fo.svgFilters===!0&&(mo(Ct,U1t),mo(Ht,Y1t),mo(Ht,uW)),fo.mathMl===!0&&(mo(Ct,W1t),mo(Ht,GDt),mo(Ht,uW))),cn.ADD_TAGS&&(Ct===xt&&(Ct=PA(Ct)),mo(Ct,cn.ADD_TAGS,zs)),cn.ADD_ATTR&&(Ht===Le&&(Ht=PA(Ht)),mo(Ht,cn.ADD_ATTR,zs)),cn.ADD_URI_SAFE_ATTR&&mo(Ee,cn.ADD_URI_SAFE_ATTR,zs),cn.FORBID_CONTENTS&&(Xi===Er&&(Xi=PA(Xi)),mo(Xi,cn.FORBID_CONTENTS,zs)),Ks&&(Ct["#text"]=!0),zt&&mo(Ct,["html","head","body"]),Ct.table&&(mo(Ct,["tbody"]),delete gn.tbody),cn.TRUSTED_TYPES_POLICY){if(typeof cn.TRUSTED_TYPES_POLICY.createHTML!="function")throw UP('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof cn.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw UP('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');bt=cn.TRUSTED_TYPES_POLICY,mt=bt.createHTML("")}else bt===void 0&&(bt=WTe(R,p)),bt!==null&&typeof mt=="string"&&(mt=bt.createHTML(""));ug&&ug(cn),Du=cn}},th=mo({},["mi","mo","mn","ms","mtext"]),Fa=mo({},["foreignobject","desc","title","annotation-xml"]),Ml=mo({},["title","style","font","a","script"]),ha=mo({},G1t);mo(ha,U1t),mo(ha,BTe);const bc=mo({},W1t);mo(bc,RTe);const Cc=function(cn){let kr=at(cn);(!kr||!kr.tagName)&&(kr={namespaceURI:Es,tagName:"template"});const Ei=oW(cn.tagName),Jo=oW(kr.tagName);return Ma[cn.namespaceURI]?cn.namespaceURI===Ti?kr.namespaceURI===pn?Ei==="svg":kr.namespaceURI===He?Ei==="svg"&&(Jo==="annotation-xml"||th[Jo]):!!ha[Ei]:cn.namespaceURI===He?kr.namespaceURI===pn?Ei==="math":kr.namespaceURI===Ti?Ei==="math"&&Fa[Jo]:!!bc[Ei]:cn.namespaceURI===pn?kr.namespaceURI===Ti&&!Fa[Jo]||kr.namespaceURI===He&&!th[Jo]?!1:!bc[Ei]&&(Ml[Ei]||!ha[Ei]):!!(Po==="application/xhtml+xml"&&Ma[cn.namespaceURI]):!1},pa=function(cn){GP(a.removed,{element:cn});try{cn.parentNode.removeChild(cn)}catch{cn.remove()}},Da=function(cn,kr){try{GP(a.removed,{attribute:kr.getAttributeNode(cn),from:kr})}catch{GP(a.removed,{attribute:null,from:kr})}if(kr.removeAttribute(cn),cn==="is"&&!Ht[cn])if(Pe||te)try{pa(kr)}catch{}else try{kr.setAttribute(cn,"")}catch{}},Ha=function(cn){let kr,Ei;if(se)cn=""+cn;else{const rf=OTe(cn,/^[\r\n\t ]+/);Ei=rf&&rf[0]}Po==="application/xhtml+xml"&&Es===pn&&(cn=''+cn+"");const Jo=bt?bt.createHTML(cn):cn;if(Es===pn)try{kr=new N().parseFromString(Jo,Po)}catch{}if(!kr||!kr.documentElement){kr=yt.createDocument(Es,"template",null);try{kr.documentElement.innerHTML=qa?mt:Jo}catch{}}const wc=kr.body||kr.documentElement;return cn&&Ei&&wc.insertBefore(w.createTextNode(Ei),wc.childNodes[0]||null),Es===pn?vt.call(kr,zt?"html":"body")[0]:zt?kr.documentElement:wc},Dl=function(cn){return ft.call(cn.ownerDocument||cn,cn,A.SHOW_ELEMENT|A.SHOW_COMMENT|A.SHOW_TEXT,null,!1)},_c=function(cn){return cn instanceof B&&(typeof cn.nodeName!="string"||typeof cn.textContent!="string"||typeof cn.removeChild!="function"||!(cn.attributes instanceof I)||typeof cn.removeAttribute!="function"||typeof cn.setAttribute!="function"||typeof cn.namespaceURI!="string"||typeof cn.insertBefore!="function"||typeof cn.hasChildNodes!="function")},lw=function(cn){return typeof E=="object"?cn instanceof E:cn&&typeof cn=="object"&&typeof cn.nodeType=="number"&&typeof cn.nodeName=="string"},eh=function(cn,kr,Ei){pt[cn]&&ITe(pt[cn],Jo=>{Jo.call(a,kr,Ei,Du)})},ed=function(cn){let kr;if(eh("beforeSanitizeElements",cn,null),_c(cn))return pa(cn),!0;const Ei=zs(cn.nodeName);if(eh("uponSanitizeElement",cn,{tagName:Ei,allowedTags:Ct}),cn.hasChildNodes()&&!lw(cn.firstElementChild)&&(!lw(cn.content)||!lw(cn.content.firstElementChild))&&Pb(/<[/\w]/g,cn.innerHTML)&&Pb(/<[/\w]/g,cn.textContent))return pa(cn),!0;if(!Ct[Ei]||gn[Ei]){if(!gn[Ei]&&nd(Ei)&&(Ft.tagNameCheck instanceof RegExp&&Pb(Ft.tagNameCheck,Ei)||Ft.tagNameCheck instanceof Function&&Ft.tagNameCheck(Ei)))return!1;if(Ks&&!Xi[Ei]){const Jo=at(cn)||cn.parentNode,wc=st(cn)||cn.childNodes;if(wc&&Jo){const rf=wc.length;for(let Oc=rf-1;Oc>=0;--Oc)Jo.insertBefore(W(wc[Oc],!0),et(cn))}}return pa(cn),!0}return cn instanceof _&&!Cc(cn)||(Ei==="noscript"||Ei==="noembed"||Ei==="noframes")&&Pb(/<\/no(script|embed|frames)/i,cn.innerHTML)?(pa(cn),!0):(ke&&cn.nodeType===3&&(kr=cn.textContent,kr=tm(kr,U," "),kr=tm(kr,Tt," "),kr=tm(kr,nt," "),cn.textContent!==kr&&(GP(a.removed,{element:cn.cloneNode()}),cn.textContent=kr)),eh("afterSanitizeElements",cn,null),!1)},jd=function(cn,kr,Ei){if(de&&(kr==="id"||kr==="name")&&(Ei in w||Ei in pm))return!1;if(!(Ve&&!Se[kr]&&Pb(It,kr))){if(!(me&&Pb(Ot,kr))){if(!Ht[kr]||Se[kr]){if(!(nd(cn)&&(Ft.tagNameCheck instanceof RegExp&&Pb(Ft.tagNameCheck,cn)||Ft.tagNameCheck instanceof Function&&Ft.tagNameCheck(cn))&&(Ft.attributeNameCheck instanceof RegExp&&Pb(Ft.attributeNameCheck,kr)||Ft.attributeNameCheck instanceof Function&&Ft.attributeNameCheck(kr))||kr==="is"&&Ft.allowCustomizedBuiltInElements&&(Ft.tagNameCheck instanceof RegExp&&Pb(Ft.tagNameCheck,Ei)||Ft.tagNameCheck instanceof Function&&Ft.tagNameCheck(Ei))))return!1}else if(!Ee[kr]){if(!Pb(Z,tm(Ei,Et,""))){if(!((kr==="src"||kr==="xlink:href"||kr==="href")&&cn!=="script"&&PTe(Ei,"data:")===0&&Xn[cn])){if(!(Ye&&!Pb(Bt,tm(Ei,Et,"")))){if(Ei)return!1}}}}}}return!0},nd=function(cn){return cn.indexOf("-")>0},$d=function(cn){let kr,Ei,Jo,wc;eh("beforeSanitizeAttributes",cn,null);const{attributes:rf}=cn;if(!rf)return;const Oc={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Ht};for(wc=rf.length;wc--;){kr=rf[wc];const{name:sf,namespaceURI:af}=kr;if(Ei=sf==="value"?kr.value:FTe(kr.value),Jo=zs(sf),Oc.attrName=Jo,Oc.attrValue=Ei,Oc.keepAttr=!0,Oc.forceKeepAttr=void 0,eh("uponSanitizeAttribute",cn,Oc),Ei=Oc.attrValue,Oc.forceKeepAttr||(Da(sf,cn),!Oc.keepAttr))continue;if(!ce&&Pb(/\/>/i,Ei)){Da(sf,cn);continue}ke&&(Ei=tm(Ei,U," "),Ei=tm(Ei,Tt," "),Ei=tm(Ei,nt," "));const Qi=zs(cn.nodeName);if(jd(Qi,Jo,Ei)){if(on&&(Jo==="id"||Jo==="name")&&(Da(sf,cn),Ei=ni+Ei),bt&&typeof R=="object"&&typeof R.getAttributeType=="function"&&!af)switch(R.getAttributeType(Qi,Jo)){case"TrustedHTML":{Ei=bt.createHTML(Ei);break}case"TrustedScriptURL":{Ei=bt.createScriptURL(Ei);break}}try{af?cn.setAttributeNS(af,sf,Ei):cn.setAttribute(sf,Ei),zDt(a.removed)}catch{}}}eh("afterSanitizeAttributes",cn,null)},A0=function Bi(cn){let kr;const Ei=Dl(cn);for(eh("beforeSanitizeShadowDOM",cn,null);kr=Ei.nextNode();)eh("uponSanitizeShadowNode",kr,null),!ed(kr)&&(kr.content instanceof m&&Bi(kr.content),$d(kr));eh("afterSanitizeShadowDOM",cn,null)};return a.sanitize=function(Bi){let cn=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},kr,Ei,Jo,wc;if(qa=!Bi,qa&&(Bi=""),typeof Bi!="string"&&!lw(Bi))if(typeof Bi.toString=="function"){if(Bi=Bi.toString(),typeof Bi!="string")throw UP("dirty is not a string, aborting")}else throw UP("toString is not a function");if(!a.isSupported)return Bi;if(re||Wu(cn),a.removed=[],typeof Bi=="string"&&(ws=!1),ws){if(Bi.nodeName){const sf=zs(Bi.nodeName);if(!Ct[sf]||gn[sf])throw UP("root node is forbidden and cannot be sanitized in-place")}}else if(Bi instanceof E)kr=Ha(""),Ei=kr.ownerDocument.importNode(Bi,!0),Ei.nodeType===1&&Ei.nodeName==="BODY"||Ei.nodeName==="HTML"?kr=Ei:kr.appendChild(Ei);else{if(!Pe&&!ke&&!zt&&Bi.indexOf("<")===-1)return bt&&Me?bt.createHTML(Bi):Bi;if(kr=Ha(Bi),!kr)return Pe?null:Me?mt:""}kr&&se&&pa(kr.firstChild);const rf=Dl(ws?Bi:kr);for(;Jo=rf.nextNode();)ed(Jo)||(Jo.content instanceof m&&A0(Jo.content),$d(Jo));if(ws)return Bi;if(Pe){if(te)for(wc=ut.call(kr.ownerDocument);kr.firstChild;)wc.appendChild(kr.firstChild);else wc=kr;return(Ht.shadowroot||Ht.shadowrootmode)&&(wc=X.call(f,wc,!0)),wc}let Oc=zt?kr.outerHTML:kr.innerHTML;return zt&&Ct["!doctype"]&&kr.ownerDocument&&kr.ownerDocument.doctype&&kr.ownerDocument.doctype.name&&Pb(WDt,kr.ownerDocument.doctype.name)&&(Oc=" -`+Oc),ke&&(Oc=tm(Oc,U," "),Oc=tm(Oc,Tt," "),Oc=tm(Oc,nt," ")),bt&&Me?bt.createHTML(Oc):Oc},a.setConfig=function(Bi){Wu(Bi),re=!0},a.clearConfig=function(){Du=null,re=!1},a.isValidAttribute=function(Bi,cn,kr){Du||Wu({});const Ei=zs(Bi),Jo=zs(cn);return jd(Ei,Jo,kr)},a.addHook=function(Bi,cn){typeof cn=="function"&&(pt[Bi]=pt[Bi]||[],GP(pt[Bi],cn))},a.removeHook=function(Bi){if(pt[Bi])return zDt(pt[Bi])},a.removeHooks=function(Bi){pt[Bi]&&(pt[Bi]=[])},a.removeAllHooks=function(){pt={}},a}var lW=KDt();const WP=//gi,YTe=i=>i?ZDt(i).replace(/\\n/g,"#br#").split("#br#"):[""],XDt=i=>lW.sanitize(i),QDt=(i,a)=>{var f;if(((f=a.flowchart)==null?void 0:f.htmlLabels)!==!1){const p=a.securityLevel;p==="antiscript"||p==="strict"?i=XDt(i):p!=="loose"&&(i=ZDt(i),i=i.replace(//g,">"),i=i.replace(/=/g,"="),i=ZTe(i))}return i},Q1=(i,a)=>i&&(a.dompurifyConfig?i=lW.sanitize(QDt(i,a),a.dompurifyConfig).toString():i=lW.sanitize(QDt(i,a),{FORBID_TAGS:["style"]}).toString(),i),KTe=(i,a)=>typeof i=="string"?Q1(i,a):i.flat().map(f=>Q1(f,a)),XTe=i=>WP.test(i),QTe=i=>i.split(WP),ZTe=i=>i.replace(/#br#/g,"
"),ZDt=i=>i.replace(WP,"#br#"),JTe=i=>{let a="";return i&&(a=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,a=a.replaceAll(/\(/g,"\\("),a=a.replaceAll(/\)/g,"\\)")),a},o1=i=>!(i===!1||["false","null","0"].includes(String(i).trim().toLowerCase())),tCe=function(...i){const a=i.filter(f=>!isNaN(f));return Math.max(...a)},eCe=function(...i){const a=i.filter(f=>!isNaN(f));return Math.min(...a)},YP=function(i){const a=i.split(/(,)/),f=[];for(let p=0;p0&&p+1Math.max(0,i.split(a).length-1),nCe=(i,a)=>{const f=K1t(i,"~"),p=K1t(a,"~");return f===1&&p===1},rCe=i=>{const a=K1t(i,"~");let f=!1;if(a<=1)return i;a%2!==0&&i.startsWith("~")&&(i=i.substring(1),f=!0);const p=[...i];let w=p.indexOf("~"),m=p.lastIndexOf("~");for(;w!==-1&&m!==-1&&w!==m;)p[w]="<",p[m]=">",w=p.indexOf("~"),m=p.lastIndexOf("~");return f&&p.unshift("~"),p.join("")},Kr={getRows:YTe,sanitizeText:Q1,sanitizeTextOrArray:KTe,hasBreaks:XTe,splitBreaks:QTe,lineBreakRegex:WP,removeScript:XDt,getUrl:JTe,evaluate:o1,getMax:tCe,getMin:eCe},hW={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:i=>i>=255?255:i<0?0:i,g:i=>i>=255?255:i<0?0:i,b:i=>i>=255?255:i<0?0:i,h:i=>i%360,s:i=>i>=100?100:i<0?0:i,l:i=>i>=100?100:i<0?0:i,a:i=>i>=1?1:i<0?0:i},toLinear:i=>{const a=i/255;return i>.03928?Math.pow((a+.055)/1.055,2.4):a/12.92},hue2rgb:(i,a,f)=>(f<0&&(f+=1),f>1&&(f-=1),f<1/6?i+(a-i)*6*f:f<1/2?a:f<2/3?i+(a-i)*(2/3-f)*6:i),hsl2rgb:({h:i,s:a,l:f},p)=>{if(!a)return f*2.55;i/=360,a/=100,f/=100;const w=f<.5?f*(1+a):f+a-f*a,m=2*f-w;switch(p){case"r":return hW.hue2rgb(m,w,i+1/3)*255;case"g":return hW.hue2rgb(m,w,i)*255;case"b":return hW.hue2rgb(m,w,i-1/3)*255}},rgb2hsl:({r:i,g:a,b:f},p)=>{i/=255,a/=255,f/=255;const w=Math.max(i,a,f),m=Math.min(i,a,f),b=(w+m)/2;if(p==="l")return b*100;if(w===m)return 0;const E=w-m,_=b>.5?E/(2-w-m):E/(w+m);if(p==="s")return _*100;switch(w){case i:return((a-f)/E+(aa>f?Math.min(a,Math.max(f,i)):Math.min(f,Math.max(a,i)),round:i=>Math.round(i*1e10)/1e10},unit:{dec2hex:i=>{const a=Math.round(i).toString(16);return a.length>1?a:`0${a}`}}},ok={};for(let i=0;i<=255;i++)ok[i]=ga.unit.dec2hex(i);const x0={ALL:0,RGB:1,HSL:2};class iCe{constructor(){this.type=x0.ALL}get(){return this.type}set(a){if(this.type&&this.type!==a)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=a}reset(){this.type=x0.ALL}is(a){return this.type===a}}const sCe=iCe;class aCe{constructor(a,f){this.color=f,this.changed=!1,this.data=a,this.type=new sCe}set(a,f){return this.color=f,this.changed=!1,this.data=a,this.type.type=x0.ALL,this}_ensureHSL(){const a=this.data,{h:f,s:p,l:w}=a;f===void 0&&(a.h=ga.channel.rgb2hsl(a,"h")),p===void 0&&(a.s=ga.channel.rgb2hsl(a,"s")),w===void 0&&(a.l=ga.channel.rgb2hsl(a,"l"))}_ensureRGB(){const a=this.data,{r:f,g:p,b:w}=a;f===void 0&&(a.r=ga.channel.hsl2rgb(a,"r")),p===void 0&&(a.g=ga.channel.hsl2rgb(a,"g")),w===void 0&&(a.b=ga.channel.hsl2rgb(a,"b"))}get r(){const a=this.data,f=a.r;return!this.type.is(x0.HSL)&&f!==void 0?f:(this._ensureHSL(),ga.channel.hsl2rgb(a,"r"))}get g(){const a=this.data,f=a.g;return!this.type.is(x0.HSL)&&f!==void 0?f:(this._ensureHSL(),ga.channel.hsl2rgb(a,"g"))}get b(){const a=this.data,f=a.b;return!this.type.is(x0.HSL)&&f!==void 0?f:(this._ensureHSL(),ga.channel.hsl2rgb(a,"b"))}get h(){const a=this.data,f=a.h;return!this.type.is(x0.RGB)&&f!==void 0?f:(this._ensureRGB(),ga.channel.rgb2hsl(a,"h"))}get s(){const a=this.data,f=a.s;return!this.type.is(x0.RGB)&&f!==void 0?f:(this._ensureRGB(),ga.channel.rgb2hsl(a,"s"))}get l(){const a=this.data,f=a.l;return!this.type.is(x0.RGB)&&f!==void 0?f:(this._ensureRGB(),ga.channel.rgb2hsl(a,"l"))}get a(){return this.data.a}set r(a){this.type.set(x0.RGB),this.changed=!0,this.data.r=a}set g(a){this.type.set(x0.RGB),this.changed=!0,this.data.g=a}set b(a){this.type.set(x0.RGB),this.changed=!0,this.data.b=a}set h(a){this.type.set(x0.HSL),this.changed=!0,this.data.h=a}set s(a){this.type.set(x0.HSL),this.changed=!0,this.data.s=a}set l(a){this.type.set(x0.HSL),this.changed=!0,this.data.l=a}set a(a){this.changed=!0,this.data.a=a}}const oCe=aCe,fW=new oCe({r:0,g:0,b:0,a:0},"transparent"),JDt={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:i=>{if(i.charCodeAt(0)!==35)return;const a=i.match(JDt.re);if(!a)return;const f=a[1],p=parseInt(f,16),w=f.length,m=w%4===0,b=w>4,E=b?1:17,_=b?8:4,A=m?0:-1,I=b?255:15;return fW.set({r:(p>>_*(A+3)&I)*E,g:(p>>_*(A+2)&I)*E,b:(p>>_*(A+1)&I)*E,a:m?(p&I)*E/255:1},i)},stringify:i=>{const{r:a,g:f,b:p,a:w}=i;return w<1?`#${ok[Math.round(a)]}${ok[Math.round(f)]}${ok[Math.round(p)]}${ok[Math.round(w*255)]}`:`#${ok[Math.round(a)]}${ok[Math.round(f)]}${ok[Math.round(p)]}`}},KP=JDt,dW={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:i=>{const a=i.match(dW.hueRe);if(a){const[,f,p]=a;switch(p){case"grad":return ga.channel.clamp.h(parseFloat(f)*.9);case"rad":return ga.channel.clamp.h(parseFloat(f)*180/Math.PI);case"turn":return ga.channel.clamp.h(parseFloat(f)*360)}}return ga.channel.clamp.h(parseFloat(i))},parse:i=>{const a=i.charCodeAt(0);if(a!==104&&a!==72)return;const f=i.match(dW.re);if(!f)return;const[,p,w,m,b,E]=f;return fW.set({h:dW._hue2deg(p),s:ga.channel.clamp.s(parseFloat(w)),l:ga.channel.clamp.l(parseFloat(m)),a:b?ga.channel.clamp.a(E?parseFloat(b)/100:parseFloat(b)):1},i)},stringify:i=>{const{h:a,s:f,l:p,a:w}=i;return w<1?`hsla(${ga.lang.round(a)}, ${ga.lang.round(f)}%, ${ga.lang.round(p)}%, ${w})`:`hsl(${ga.lang.round(a)}, ${ga.lang.round(f)}%, ${ga.lang.round(p)}%)`}},gW=dW,pW={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:i=>{i=i.toLowerCase();const a=pW.colors[i];if(a)return KP.parse(a)},stringify:i=>{const a=KP.stringify(i);for(const f in pW.colors)if(pW.colors[f]===a)return f}},tIt=pW,eIt={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:i=>{const a=i.charCodeAt(0);if(a!==114&&a!==82)return;const f=i.match(eIt.re);if(!f)return;const[,p,w,m,b,E,_,A,I]=f;return fW.set({r:ga.channel.clamp.r(w?parseFloat(p)*2.55:parseFloat(p)),g:ga.channel.clamp.g(b?parseFloat(m)*2.55:parseFloat(m)),b:ga.channel.clamp.b(_?parseFloat(E)*2.55:parseFloat(E)),a:A?ga.channel.clamp.a(I?parseFloat(A)/100:parseFloat(A)):1},i)},stringify:i=>{const{r:a,g:f,b:p,a:w}=i;return w<1?`rgba(${ga.lang.round(a)}, ${ga.lang.round(f)}, ${ga.lang.round(p)}, ${ga.lang.round(w)})`:`rgb(${ga.lang.round(a)}, ${ga.lang.round(f)}, ${ga.lang.round(p)})`}},bW=eIt,em={format:{keyword:tIt,hex:KP,rgb:bW,rgba:bW,hsl:gW,hsla:gW},parse:i=>{if(typeof i!="string")return i;const a=KP.parse(i)||bW.parse(i)||gW.parse(i)||tIt.parse(i);if(a)return a;throw new Error(`Unsupported color format: "${i}"`)},stringify:i=>!i.changed&&i.color?i.color:i.type.is(x0.HSL)||i.data.r===void 0?gW.stringify(i):i.a<1||!Number.isInteger(i.r)||!Number.isInteger(i.g)||!Number.isInteger(i.b)?bW.stringify(i):KP.stringify(i)},nIt=(i,a)=>{const f=em.parse(i);for(const p in a)f[p]=ga.channel.clamp[p](a[p]);return em.stringify(f)},FA=(i,a,f=0,p=1)=>{if(typeof i!="number")return nIt(i,{a});const w=fW.set({r:ga.channel.clamp.r(i),g:ga.channel.clamp.g(a),b:ga.channel.clamp.b(f),a:ga.channel.clamp.a(p)});return em.stringify(w)},cCe=(i,a)=>ga.lang.round(em.parse(i)[a]),uCe=i=>{const{r:a,g:f,b:p}=em.parse(i),w=.2126*ga.channel.toLinear(a)+.7152*ga.channel.toLinear(f)+.0722*ga.channel.toLinear(p);return ga.lang.round(w)},lCe=i=>uCe(i)>=.5,iT=i=>!lCe(i),rIt=(i,a,f)=>{const p=em.parse(i),w=p[a],m=ga.channel.clamp[a](w+f);return w!==m&&(p[a]=m),em.stringify(p)},bs=(i,a)=>rIt(i,"l",a),$s=(i,a)=>rIt(i,"l",-a),xn=(i,a)=>{const f=em.parse(i),p={};for(const w in a)a[w]&&(p[w]=f[w]+a[w]);return nIt(i,p)},hCe=(i,a,f=50)=>{const{r:p,g:w,b:m,a:b}=em.parse(i),{r:E,g:_,b:A,a:I}=em.parse(a),B=f/100,N=B*2-1,R=b-I,W=((N*R===-1?N:(N+R)/(1+N*R))+1)/2,et=1-W,st=p*W+E*et,at=w*W+_*et,bt=m*W+A*et,mt=b*B+I*(1-B);return FA(st,at,bt,mt)},Di=(i,a=100)=>{const f=em.parse(i);return f.r=255-f.r,f.g=255-f.g,f.b=255-f.b,hCe(f,i,a)},lg=(i,a)=>a?xn(i,{s:-40,l:10}):xn(i,{s:-40,l:-10}),wW="#ffffff",vW="#f2f2f2";let fCe=class{constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){var f,p,w,m,b,E,_,A,I,B,N;if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||xn(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||xn(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||lg(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||lg(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||lg(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||lg(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||Di(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Di(this.tertiaryColor),this.lineColor=this.lineColor||Di(this.background),this.arrowheadColor=this.arrowheadColor||Di(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?$s(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||"grey",this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||$s(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Di(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||bs(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||xn(this.primaryColor,{h:30}),this.cScale4=this.cScale4||xn(this.primaryColor,{h:60}),this.cScale5=this.cScale5||xn(this.primaryColor,{h:90}),this.cScale6=this.cScale6||xn(this.primaryColor,{h:120}),this.cScale7=this.cScale7||xn(this.primaryColor,{h:150}),this.cScale8=this.cScale8||xn(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||xn(this.primaryColor,{h:270}),this.cScale10=this.cScale10||xn(this.primaryColor,{h:300}),this.cScale11=this.cScale11||xn(this.primaryColor,{h:330}),this.darkMode)for(let R=0;R{this[p]=a[p]}),this.updateColors(),f.forEach(p=>{this[p]=a[p]})}};const dCe=i=>{const a=new fCe;return a.calculate(i),a};let gCe=class{constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=bs(this.primaryColor,16),this.tertiaryColor=xn(this.primaryColor,{h:-160}),this.primaryBorderColor=Di(this.background),this.secondaryBorderColor=lg(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=lg(this.tertiaryColor,this.darkMode),this.primaryTextColor=Di(this.primaryColor),this.secondaryTextColor=Di(this.secondaryColor),this.tertiaryTextColor=Di(this.tertiaryColor),this.lineColor=Di(this.background),this.textColor=Di(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=bs(Di("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=FA(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=$s("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=$s(this.sectionBkgColor,10),this.taskBorderColor=FA(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=FA(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){var a,f,p,w,m,b,E,_,A,I,B;this.secondBkg=bs(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=bs(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.mainContrastColor,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=bs(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=xn(this.primaryColor,{h:64}),this.fillType3=xn(this.secondaryColor,{h:64}),this.fillType4=xn(this.primaryColor,{h:-64}),this.fillType5=xn(this.secondaryColor,{h:-64}),this.fillType6=xn(this.primaryColor,{h:128}),this.fillType7=xn(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||xn(this.primaryColor,{h:30}),this.cScale4=this.cScale4||xn(this.primaryColor,{h:60}),this.cScale5=this.cScale5||xn(this.primaryColor,{h:90}),this.cScale6=this.cScale6||xn(this.primaryColor,{h:120}),this.cScale7=this.cScale7||xn(this.primaryColor,{h:150}),this.cScale8=this.cScale8||xn(this.primaryColor,{h:210}),this.cScale9=this.cScale9||xn(this.primaryColor,{h:270}),this.cScale10=this.cScale10||xn(this.primaryColor,{h:300}),this.cScale11=this.cScale11||xn(this.primaryColor,{h:330});for(let N=0;N{this[p]=a[p]}),this.updateColors(),f.forEach(p=>{this[p]=a[p]})}};const pCe=i=>{const a=new gCe;return a.calculate(i),a};let bCe=class{constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=xn(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=xn(this.primaryColor,{h:-160}),this.primaryBorderColor=lg(this.primaryColor,this.darkMode),this.secondaryBorderColor=lg(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=lg(this.tertiaryColor,this.darkMode),this.primaryTextColor=Di(this.primaryColor),this.secondaryTextColor=Di(this.secondaryColor),this.tertiaryTextColor=Di(this.tertiaryColor),this.lineColor=Di(this.background),this.textColor=Di(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#e8e8e8",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=FA(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){var a,f,p,w,m,b,E,_,A,I,B;this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||xn(this.primaryColor,{h:30}),this.cScale4=this.cScale4||xn(this.primaryColor,{h:60}),this.cScale5=this.cScale5||xn(this.primaryColor,{h:90}),this.cScale6=this.cScale6||xn(this.primaryColor,{h:120}),this.cScale7=this.cScale7||xn(this.primaryColor,{h:150}),this.cScale8=this.cScale8||xn(this.primaryColor,{h:210}),this.cScale9=this.cScale9||xn(this.primaryColor,{h:270}),this.cScale10=this.cScale10||xn(this.primaryColor,{h:300}),this.cScale11=this.cScale11||xn(this.primaryColor,{h:330}),this["cScalePeer1"]=this["cScalePeer1"]||$s(this.secondaryColor,45),this["cScalePeer2"]=this["cScalePeer2"]||$s(this.tertiaryColor,40);for(let N=0;N{this[p]=a[p]}),this.updateColors(),f.forEach(p=>{this[p]=a[p]})}};const X1t=i=>{const a=new bCe;return a.calculate(i),a};let wCe=class{constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=bs("#cde498",10),this.primaryBorderColor=lg(this.primaryColor,this.darkMode),this.secondaryBorderColor=lg(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=lg(this.tertiaryColor,this.darkMode),this.primaryTextColor=Di(this.primaryColor),this.secondaryTextColor=Di(this.secondaryColor),this.tertiaryTextColor=Di(this.primaryColor),this.lineColor=Di(this.background),this.textColor=Di(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var a,f,p,w,m,b,E,_,A,I,B;this.actorBorder=$s(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||xn(this.primaryColor,{h:30}),this.cScale4=this.cScale4||xn(this.primaryColor,{h:60}),this.cScale5=this.cScale5||xn(this.primaryColor,{h:90}),this.cScale6=this.cScale6||xn(this.primaryColor,{h:120}),this.cScale7=this.cScale7||xn(this.primaryColor,{h:150}),this.cScale8=this.cScale8||xn(this.primaryColor,{h:210}),this.cScale9=this.cScale9||xn(this.primaryColor,{h:270}),this.cScale10=this.cScale10||xn(this.primaryColor,{h:300}),this.cScale11=this.cScale11||xn(this.primaryColor,{h:330}),this["cScalePeer1"]=this["cScalePeer1"]||$s(this.secondaryColor,45),this["cScalePeer2"]=this["cScalePeer2"]||$s(this.tertiaryColor,40);for(let N=0;N{this[p]=a[p]}),this.updateColors(),f.forEach(p=>{this[p]=a[p]})}};const vCe=i=>{const a=new wCe;return a.calculate(i),a};class mCe{constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=bs(this.contrast,55),this.background="#ffffff",this.tertiaryColor=xn(this.primaryColor,{h:-160}),this.primaryBorderColor=lg(this.primaryColor,this.darkMode),this.secondaryBorderColor=lg(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=lg(this.tertiaryColor,this.darkMode),this.primaryTextColor=Di(this.primaryColor),this.secondaryTextColor=Di(this.secondaryColor),this.tertiaryTextColor=Di(this.tertiaryColor),this.lineColor=Di(this.background),this.textColor=Di(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var a,f,p,w,m,b,E,_,A,I,B;this.secondBkg=bs(this.contrast,55),this.border2=this.contrast,this.actorBorder=bs(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.lineColor,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let N=0;N{this[p]=a[p]}),this.updateColors(),f.forEach(p=>{this[p]=a[p]})}}const T5={base:{getThemeVariables:dCe},dark:{getThemeVariables:pCe},default:{getThemeVariables:X1t},forest:{getThemeVariables:vCe},neutral:{getThemeVariables:i=>{const a=new mCe;return a.calculate(i),a}}},C5={flowchart:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},theme:"default",maxTextSize:5e4,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize"],deterministicIds:!1,fontSize:16},iIt={...C5,deterministicIDSeed:void 0,themeCSS:void 0,themeVariables:T5.default.getThemeVariables(),sequence:{...C5.sequence,messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},noteFont:function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},actorFont:function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}}},gantt:{...C5.gantt,tickInterval:void 0,useWidth:void 0},c4:{...C5.c4,useWidth:void 0,personFont:function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},external_personFont:function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},systemFont:function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},external_systemFont:function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},system_dbFont:function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},external_system_dbFont:function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},system_queueFont:function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},external_system_queueFont:function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},containerFont:function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},external_containerFont:function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},container_dbFont:function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},external_container_dbFont:function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},container_queueFont:function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},external_container_queueFont:function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},componentFont:function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},external_componentFont:function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},component_dbFont:function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},external_component_dbFont:function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},component_queueFont:function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},external_component_queueFont:function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},boundaryFont:function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}}},pie:{...C5.pie,useWidth:984},xyChart:{...C5.xyChart,useWidth:void 0},requirement:{...C5.requirement,useWidth:void 0},gitGraph:{...C5.gitGraph,useMaxWidth:!1},sankey:{...C5.sankey,useMaxWidth:!1}},sIt=(i,a="")=>Object.keys(i).reduce((f,p)=>Array.isArray(i[p])?f:typeof i[p]=="object"&&i[p]!==null?[...f,a+p,...sIt(i[p],"")]:[...f,a+p],[]),yCe=new Set(sIt(iIt,"")),Zh=iIt,mW=i=>{if(Ut.debug("sanitizeDirective called with",i),!(typeof i!="object"||i==null)){if(Array.isArray(i)){i.forEach(a=>mW(a));return}for(const a of Object.keys(i)){if(Ut.debug("Checking key",a),a.startsWith("__")||a.includes("proto")||a.includes("constr")||!yCe.has(a)||i[a]==null){Ut.debug("sanitize deleting key: ",a),delete i[a];continue}if(typeof i[a]=="object"){Ut.debug("sanitizing object",a),mW(i[a]);continue}const f=["themeCSS","fontFamily","altFontFamily"];for(const p of f)a.includes(p)&&(Ut.debug("sanitizing css option",a),i[a]=xCe(i[a]))}if(i.themeVariables)for(const a of Object.keys(i.themeVariables)){const f=i.themeVariables[a];f!=null&&f.match&&!f.match(/^[\d "#%(),.;A-Za-z]+$/)&&(i.themeVariables[a]="")}Ut.debug("After sanitization",i)}},xCe=i=>{let a=0,f=0;for(const p of i){if(a{for(const{id:a,detector:f,loader:p}of i)uIt(a,f,p)},uIt=(i,a,f)=>{NA[i]?Ut.error(`Detector with key ${i} already exists`):NA[i]={detector:a,loader:f},Ut.debug(`Detector with key ${i} added${f?" with loader":""}`)},ECe=i=>NA[i].loader,Q1t=(i,a,{depth:f=2,clobber:p=!1}={})=>{const w={depth:f,clobber:p};return Array.isArray(a)&&!Array.isArray(i)?(a.forEach(m=>Q1t(i,m,w)),i):Array.isArray(a)&&Array.isArray(i)?(a.forEach(m=>{i.includes(m)||i.push(m)}),i):i===void 0||f<=0?i!=null&&typeof i=="object"&&typeof a=="object"?Object.assign(i,a):a:(a!==void 0&&typeof i=="object"&&typeof a=="object"&&Object.keys(a).forEach(m=>{typeof a[m]=="object"&&(i[m]===void 0||typeof i[m]=="object")?(i[m]===void 0&&(i[m]=Array.isArray(a[m])?[]:{}),i[m]=Q1t(i[m],a[m],{depth:f-1,clobber:p})):(p||typeof i[m]!="object"&&typeof a[m]!="object")&&(i[m]=a[m])}),i)},Z1=Q1t;var TCe=typeof global=="object"&&global&&global.Object===Object&&global;const lIt=TCe;var CCe=typeof self=="object"&&self&&self.Object===Object&&self,_Ce=lIt||CCe||Function("return this")();const nm=_Ce;var SCe=nm.Symbol;const tw=SCe;var hIt=Object.prototype,ACe=hIt.hasOwnProperty,LCe=hIt.toString,QP=tw?tw.toStringTag:void 0;function MCe(i){var a=ACe.call(i,QP),f=i[QP];try{i[QP]=void 0;var p=!0}catch{}var w=LCe.call(i);return p&&(a?i[QP]=f:delete i[QP]),w}var DCe=Object.prototype,ICe=DCe.toString;function OCe(i){return ICe.call(i)}var PCe="[object Null]",FCe="[object Undefined]",fIt=tw?tw.toStringTag:void 0;function sT(i){return i==null?i===void 0?FCe:PCe:fIt&&fIt in Object(i)?MCe(i):OCe(i)}function Fb(i){var a=typeof i;return i!=null&&(a=="object"||a=="function")}var NCe="[object AsyncFunction]",BCe="[object Function]",RCe="[object GeneratorFunction]",jCe="[object Proxy]";function BA(i){if(!Fb(i))return!1;var a=sT(i);return a==BCe||a==RCe||a==NCe||a==jCe}var $Ce=nm["__core-js_shared__"];const Z1t=$Ce;var dIt=function(){var i=/[^.]+$/.exec(Z1t&&Z1t.keys&&Z1t.keys.IE_PROTO||"");return i?"Symbol(src)_1."+i:""}();function zCe(i){return!!dIt&&dIt in i}var qCe=Function.prototype,HCe=qCe.toString;function aT(i){if(i!=null){try{return HCe.call(i)}catch{}try{return i+""}catch{}}return""}var VCe=/[\\^$.*+?()[\]{}|]/g,GCe=/^\[object .+?Constructor\]$/,UCe=Function.prototype,WCe=Object.prototype,YCe=UCe.toString,KCe=WCe.hasOwnProperty,XCe=RegExp("^"+YCe.call(KCe).replace(VCe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function QCe(i){if(!Fb(i)||zCe(i))return!1;var a=BA(i)?XCe:GCe;return a.test(aT(i))}function ZCe(i,a){return i==null?void 0:i[a]}function oT(i,a){var f=ZCe(i,a);return QCe(f)?f:void 0}var JCe=oT(Object,"create");const ZP=JCe;function t9e(){this.__data__=ZP?ZP(null):{},this.size=0}function e9e(i){var a=this.has(i)&&delete this.__data__[i];return this.size-=a?1:0,a}var n9e="__lodash_hash_undefined__",r9e=Object.prototype,i9e=r9e.hasOwnProperty;function s9e(i){var a=this.__data__;if(ZP){var f=a[i];return f===n9e?void 0:f}return i9e.call(a,i)?a[i]:void 0}var a9e=Object.prototype,o9e=a9e.hasOwnProperty;function c9e(i){var a=this.__data__;return ZP?a[i]!==void 0:o9e.call(a,i)}var u9e="__lodash_hash_undefined__";function l9e(i,a){var f=this.__data__;return this.size+=this.has(i)?0:1,f[i]=ZP&&a===void 0?u9e:a,this}function cT(i){var a=-1,f=i==null?0:i.length;for(this.clear();++a-1}function w9e(i,a){var f=this.__data__,p=xW(f,i);return p<0?(++this.size,f.push([i,a])):f[p][1]=a,this}function _5(i){var a=-1,f=i==null?0:i.length;for(this.clear();++a-1&&i%1==0&&i<=U9e}function ck(i){return i!=null&&rdt(i.length)&&!BA(i)}function _It(i){return f3(i)&&ck(i)}function W9e(){return!1}var SIt=typeof exports=="object"&&exports&&!exports.nodeType&&exports,AIt=SIt&&typeof module=="object"&&module&&!module.nodeType&&module,Y9e=AIt&&AIt.exports===SIt,LIt=Y9e?nm.Buffer:void 0,K9e=LIt?LIt.isBuffer:void 0,X9e=K9e||W9e;const zA=X9e;var Q9e="[object Object]",Z9e=Function.prototype,J9e=Object.prototype,MIt=Z9e.toString,t_e=J9e.hasOwnProperty,e_e=MIt.call(Object);function DIt(i){if(!f3(i)||sT(i)!=Q9e)return!1;var a=ndt(i);if(a===null)return!0;var f=t_e.call(a,"constructor")&&a.constructor;return typeof f=="function"&&f instanceof f&&MIt.call(f)==e_e}var n_e="[object Arguments]",r_e="[object Array]",i_e="[object Boolean]",s_e="[object Date]",a_e="[object Error]",o_e="[object Function]",c_e="[object Map]",u_e="[object Number]",l_e="[object Object]",h_e="[object RegExp]",f_e="[object Set]",d_e="[object String]",g_e="[object WeakMap]",p_e="[object ArrayBuffer]",b_e="[object DataView]",w_e="[object Float32Array]",v_e="[object Float64Array]",m_e="[object Int8Array]",y_e="[object Int16Array]",x_e="[object Int32Array]",k_e="[object Uint8Array]",E_e="[object Uint8ClampedArray]",T_e="[object Uint16Array]",C_e="[object Uint32Array]",bl={};bl[w_e]=bl[v_e]=bl[m_e]=bl[y_e]=bl[x_e]=bl[k_e]=bl[E_e]=bl[T_e]=bl[C_e]=!0,bl[n_e]=bl[r_e]=bl[p_e]=bl[i_e]=bl[b_e]=bl[s_e]=bl[a_e]=bl[o_e]=bl[c_e]=bl[u_e]=bl[l_e]=bl[h_e]=bl[f_e]=bl[d_e]=bl[g_e]=!1;function __e(i){return f3(i)&&rdt(i.length)&&!!bl[sT(i)]}function SW(i){return function(a){return i(a)}}var IIt=typeof exports=="object"&&exports&&!exports.nodeType&&exports,tF=IIt&&typeof module=="object"&&module&&!module.nodeType&&module,S_e=tF&&tF.exports===IIt,idt=S_e&&lIt.process,A_e=function(){try{var i=tF&&tF.require&&tF.require("util").types;return i||idt&&idt.binding&&idt.binding("util")}catch{}}();const qA=A_e;var OIt=qA&&qA.isTypedArray,L_e=OIt?SW(OIt):__e;const AW=L_e;function sdt(i,a){if(!(a==="constructor"&&typeof i[a]=="function")&&a!="__proto__")return i[a]}var M_e=Object.prototype,D_e=M_e.hasOwnProperty;function LW(i,a,f){var p=i[a];(!(D_e.call(i,a)&&RA(p,f))||f===void 0&&!(a in i))&&TW(i,a,f)}function eF(i,a,f,p){var w=!f;f||(f={});for(var m=-1,b=a.length;++m-1&&i%1==0&&i0){if(++a>=U_e)return arguments[0]}else a=0;return i.apply(void 0,arguments)}}var X_e=K_e(G_e);const RIt=X_e;function DW(i,a){return RIt(BIt(i,a,lT),i+"")}function nF(i,a,f){if(!Fb(f))return!1;var p=typeof a;return(p=="number"?ck(f)&&MW(a,f.length):p=="string"&&a in f)?RA(f[a],i):!1}function Q_e(i){return DW(function(a,f){var p=-1,w=f.length,m=w>1?f[w-1]:void 0,b=w>2?f[2]:void 0;for(m=i.length>3&&typeof m=="function"?(w--,m):void 0,b&&nF(f[0],f[1],b)&&(m=w<3?void 0:m,w=1),a=Object(a);++pE.args);mW(b),p=Z1(p,[...b])}else p=f.args;if(!p)return;let w=yW(i,a);const m="config";return p[m]!==void 0&&(w==="flowchart-v2"&&(w="flowchart"),p[w]=p[m],delete p[m]),p},$It=function(i,a=null){try{const f=new RegExp(`[%]{2}(?![{]${tSe.source})(?=[}][%]{2}).* -`,"ig");i=i.trim().replace(f,"").replace(/'/gm,'"'),Ut.debug(`Detecting diagram directive${a!==null?" type:"+a:""} based on the text:${i}`);let p;const w=[];for(;(p=XP.exec(i))!==null;)if(p.index===XP.lastIndex&&XP.lastIndex++,p&&!a||a&&p[1]&&p[1].match(a)||a&&p[2]&&p[2].match(a)){const m=p[1]?p[1]:p[2],b=p[3]?p[3].trim():p[4]?JSON.parse(p[4].trim()):null;w.push({type:m,args:b})}return w.length===0?{type:i,args:null}:w.length===1?w[0]:w}catch(f){return Ut.error(`ERROR: ${f.message} - Unable to parse directive type: '${a}' based on the text: '${i}'`),{type:void 0,args:null}}},nSe=function(i){return i.replace(XP,"")},rSe=function(i,a){for(const[f,p]of a.entries())if(p.match(i))return f;return-1};function ew(i,a){if(!i)return a;const f=`curve${i.charAt(0).toUpperCase()+i.slice(1)}`;return J_e[f]??a}function iSe(i,a){const f=i.trim();if(f)return a.securityLevel!=="loose"?ik(f):f}const sSe=(i,...a)=>{const f=i.split("."),p=f.length-1,w=f[p];let m=window;for(let b=0;b{f+=zIt(w,a),a=w});const p=f/2;return adt(i,p)}function oSe(i){return i.length===1?i[0]:aSe(i)}const qIt=(i,a=2)=>{const f=Math.pow(10,a);return Math.round(i*f)/f},adt=(i,a)=>{let f,p=a;for(const w of i){if(f){const m=zIt(w,f);if(m=1)return{x:w.x,y:w.y};if(b>0&&b<1)return{x:qIt((1-b)*f.x+b*w.x,5),y:qIt((1-b)*f.y+b*w.y,5)}}}f=w}throw new Error("Could not find a suitable point for the given distance")},cSe=(i,a,f)=>{Ut.info(`our points ${JSON.stringify(a)}`),a[0]!==f&&(a=a.reverse());const w=adt(a,25),m=i?10:5,b=Math.atan2(a[0].y-w.y,a[0].x-w.x),E={x:0,y:0};return E.x=Math.sin(b)*m+(a[0].x+w.x)/2,E.y=-Math.cos(b)*m+(a[0].y+w.y)/2,E};function uSe(i,a,f){const p=structuredClone(f);Ut.info("our points",p),a!=="start_left"&&a!=="start_right"&&p.reverse();const w=25+i,m=adt(p,w),b=10+i*.5,E=Math.atan2(p[0].y-m.y,p[0].x-m.x),_={x:0,y:0};return a==="start_left"?(_.x=Math.sin(E+Math.PI)*b+(p[0].x+m.x)/2,_.y=-Math.cos(E+Math.PI)*b+(p[0].y+m.y)/2):a==="end_right"?(_.x=Math.sin(E-Math.PI)*b+(p[0].x+m.x)/2-5,_.y=-Math.cos(E-Math.PI)*b+(p[0].y+m.y)/2-5):a==="end_left"?(_.x=Math.sin(E)*b+(p[0].x+m.x)/2-5,_.y=-Math.cos(E)*b+(p[0].y+m.y)/2-5):(_.x=Math.sin(E)*b+(p[0].x+m.x)/2,_.y=-Math.cos(E)*b+(p[0].y+m.y)/2),_}function im(i){let a="",f="";for(const p of i)p!==void 0&&(p.startsWith("color:")||p.startsWith("text-align:")?f=f+p+";":a=a+p+";");return{style:a,labelStyle:f}}let HIt=0;const VIt=()=>(HIt++,"id-"+Math.random().toString(36).substr(2,12)+"-"+HIt);function lSe(i){let a="";const f="0123456789abcdef",p=f.length;for(let w=0;wlSe(i.length),hSe=function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""}},fSe=function(i,a){const f=a.text.replace(Kr.lineBreakRegex," "),[,p]=VA(a.fontSize),w=i.append("text");w.attr("x",a.x),w.attr("y",a.y),w.style("text-anchor",a.anchor),w.style("font-family",a.fontFamily),w.style("font-size",p),w.style("font-weight",a.fontWeight),w.attr("fill",a.fill),a.class!==void 0&&w.attr("class",a.class);const m=w.append("tspan");return m.attr("x",a.x+a.textMargin*2),m.attr("fill",a.fill),m.text(f),w},UIt=jA((i,a,f)=>{if(!i||(f=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
"},f),Kr.lineBreakRegex.test(i)))return i;const p=i.split(" "),w=[];let m="";return p.forEach((b,E)=>{const _=d3(`${b} `,f),A=d3(m,f);if(_>a){const{hyphenatedStrings:N,remainingWord:R}=dSe(b,a,"-",f);w.push(m,...N),m=R}else A+_>=a?(w.push(m),m=b):m=[m,b].filter(Boolean).join(" ");E+1===p.length&&w.push(m)}),w.filter(b=>b!=="").join(f.joinWith)},(i,a,f)=>`${i}${a}${f.fontSize}${f.fontWeight}${f.fontFamily}${f.joinWith}`),dSe=jA((i,a,f="-",p)=>{p=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},p);const w=[...i],m=[];let b="";return w.forEach((E,_)=>{const A=`${b}${E}`;if(d3(A,p)>=a){const B=_+1,N=w.length===B,R=`${A}${f}`;m.push(N?A:R),b=""}else b=A}),{hyphenatedStrings:m,remainingWord:b}},(i,a,f="-",p)=>`${i}${a}${f}${p.fontSize}${p.fontWeight}${p.fontFamily}`);function odt(i,a){return cdt(i,a).height}function d3(i,a){return cdt(i,a).width}const cdt=jA((i,a)=>{const{fontSize:f=12,fontFamily:p="Arial",fontWeight:w=400}=a;if(!i)return{width:0,height:0};const[,m]=VA(f),b=["sans-serif",p],E=i.split(Kr.lineBreakRegex),_=[],A=yr("body");if(!A.remove)return{width:0,height:0,lineHeight:0};const I=A.append("svg");for(const N of b){let R=0;const z={width:0,height:0,lineHeight:0};for(const W of E){const et=hSe();et.text=W||jIt;const st=fSe(I,et).style("font-size",m).style("font-weight",w).style("font-family",N),at=(st._groups||st)[0][0].getBBox();if(at.width===0&&at.height===0)throw new Error("svg element not in render tree");z.width=Math.round(Math.max(z.width,at.width)),R=Math.round(at.height),z.height+=R,z.lineHeight=Math.round(Math.max(z.lineHeight,R))}_.push(z)}I.remove();const B=isNaN(_[1].height)||isNaN(_[1].width)||isNaN(_[1].lineHeight)||_[0].height>_[1].height&&_[0].width>_[1].width&&_[0].lineHeight>_[1].lineHeight?0:1;return _[B]},(i,a)=>`${i}${a.fontSize}${a.fontWeight}${a.fontFamily}`);class gSe{constructor(a=!1,f){this.count=0,this.count=f?f.length:0,this.next=a?()=>this.count++:()=>Date.now()}}let OW;const pSe=function(i){return OW=OW||document.createElement("div"),i=escape(i).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),OW.innerHTML=i,unescape(OW.textContent)};function WIt(i){return"str"in i}const bSe=(i,a,f,p)=>{var m;if(!p)return;const w=(m=i.node())==null?void 0:m.getBBox();w&&i.append("text").text(p).attr("x",w.x+w.width/2).attr("y",-f).attr("class",a)},VA=i=>{if(typeof i=="number")return[i,i+"px"];const a=parseInt(i??"",10);return Number.isNaN(a)?[void 0,void 0]:i===String(a)?[a,i+"px"]:[a,i]};function rF(i,a){return IW({},i,a)}const $a={assignWithDepth:Z1,wrapLabel:UIt,calculateTextHeight:odt,calculateTextWidth:d3,calculateTextDimensions:cdt,cleanAndMerge:rF,detectInit:eSe,detectDirective:$It,isSubstringInArray:rSe,interpolateToCurve:ew,calcLabelPosition:oSe,calcCardinalityPosition:cSe,calcTerminalLabelPosition:uSe,formatUrl:iSe,getStylesFromArray:im,generateId:VIt,random:GIt,runFunc:sSe,entityDecode:pSe,insertTitle:bSe,parseFontSize:VA,InitIDGenerator:gSe};var YIt="comm",KIt="rule",XIt="decl",wSe="@import",vSe="@keyframes",mSe=Math.abs,udt=String.fromCharCode;function QIt(i){return i.trim()}function ldt(i,a,f){return i.replace(a,f)}function ySe(i,a){return i.indexOf(a)}function iF(i,a){return i.charCodeAt(a)|0}function sF(i,a,f){return i.slice(a,f)}function uk(i){return i.length}function ZIt(i){return i.length}function PW(i,a){return a.push(i),i}var FW=1,GA=1,JIt=0,nw=0,Of=0,UA="";function hdt(i,a,f,p,w,m,b){return{value:i,root:a,parent:f,type:p,props:w,children:m,line:FW,column:GA,length:b,return:""}}function xSe(){return Of}function kSe(){return Of=nw>0?iF(UA,--nw):0,GA--,Of===10&&(GA=1,FW--),Of}function sm(){return Of=nw2||fdt(Of)>3?"":" "}function _Se(i,a){for(;--a&&sm()&&!(Of<48||Of>102||Of>57&&Of<65||Of>70&&Of<97););return BW(i,NW()+(a<6&&hT()==32&&sm()==32))}function gdt(i){for(;sm();)switch(Of){case i:return nw;case 34:case 39:i!==34&&i!==39&&gdt(Of);break;case 40:i===41&&gdt(i);break;case 92:sm();break}return nw}function SSe(i,a){for(;sm()&&i+Of!==47+10;)if(i+Of===42+42&&hT()===47)break;return"/*"+BW(a,nw-1)+"*"+udt(i===47?i:sm())}function ASe(i){for(;!fdt(hT());)sm();return BW(i,nw)}function LSe(i){return TSe(RW("",null,null,null,[""],i=ESe(i),0,[0],i))}function RW(i,a,f,p,w,m,b,E,_){for(var A=0,I=0,B=b,N=0,R=0,z=0,W=1,et=1,st=1,at=0,bt="",mt=w,yt=m,ft=p,ut=bt;et;)switch(z=at,at=sm()){case 40:if(z!=108&&iF(ut,B-1)==58){ySe(ut+=ldt(ddt(at),"&","&\f"),"&\f")!=-1&&(st=-1);break}case 34:case 39:case 91:ut+=ddt(at);break;case 9:case 10:case 13:case 32:ut+=CSe(z);break;case 92:ut+=_Se(NW()-1,7);continue;case 47:switch(hT()){case 42:case 47:PW(MSe(SSe(sm(),NW()),a,f),_);break;default:ut+="/"}break;case 123*W:E[A++]=uk(ut)*st;case 125*W:case 59:case 0:switch(at){case 0:case 125:et=0;case 59+I:R>0&&uk(ut)-B&&PW(R>32?eOt(ut+";",p,f,B-1):eOt(ldt(ut," ","")+";",p,f,B-2),_);break;case 59:ut+=";";default:if(PW(ft=tOt(ut,a,f,A,I,w,E,bt,mt=[],yt=[],B),m),at===123)if(I===0)RW(ut,a,ft,ft,mt,m,B,E,yt);else switch(N===99&&iF(ut,3)===110?100:N){case 100:case 109:case 115:RW(i,ft,ft,p&&PW(tOt(i,ft,ft,0,0,w,E,bt,w,mt=[],B),yt),w,yt,B,E,p?mt:yt);break;default:RW(ut,ft,ft,ft,[""],yt,0,E,yt)}}A=I=R=0,W=st=1,bt=ut="",B=b;break;case 58:B=1+uk(ut),R=z;default:if(W<1){if(at==123)--W;else if(at==125&&W++==0&&kSe()==125)continue}switch(ut+=udt(at),at*W){case 38:st=I>0?1:(ut+="\f",-1);break;case 44:E[A++]=(uk(ut)-1)*st,st=1;break;case 64:hT()===45&&(ut+=ddt(sm())),N=hT(),I=B=uk(bt=ut+=ASe(NW())),at++;break;case 45:z===45&&uk(ut)==2&&(W=0)}}return m}function tOt(i,a,f,p,w,m,b,E,_,A,I){for(var B=w-1,N=w===0?m:[""],R=ZIt(N),z=0,W=0,et=0;z0?N[st]+" "+at:ldt(at,/&\f/g,N[st])))&&(_[et++]=bt);return hdt(i,a,f,w===0?KIt:E,_,A,I)}function MSe(i,a,f){return hdt(i,a,f,YIt,udt(xSe()),sF(i,2,-2),0)}function eOt(i,a,f,p){return hdt(i,a,f,XIt,sF(i,0,p),sF(i,p+1,-1),p)}function pdt(i,a){for(var f="",p=ZIt(i),w=0;w{let f=Z1({},i),p={};for(const w of a)aOt(w),p=Z1(p,w);if(f=Z1(f,p),p.theme&&p.theme in T5){const w=Z1({},rOt),m=Z1(w.themeVariables||{},p.themeVariables);f.theme&&f.theme in T5&&(f.themeVariables=T5[f.theme].getThemeVariables(m))}return aF=f,cOt(aF),aF},ISe=i=>(fp=Z1({},WA),fp=Z1(fp,i),i.theme&&T5[i.theme]&&(fp.themeVariables=T5[i.theme].getThemeVariables(i.themeVariables)),jW(fp,YA),fp),OSe=i=>{rOt=Z1({},i)},PSe=i=>(fp=Z1(fp,i),jW(fp,YA),fp),iOt=()=>Z1({},fp),sOt=i=>(cOt(i),Z1(aF,i),Fd()),Fd=()=>Z1({},aF),aOt=i=>{i&&(["secure",...fp.secure??[]].forEach(a=>{Object.hasOwn(i,a)&&(Ut.debug(`Denied attempt to modify a secure key ${a}`,i[a]),delete i[a])}),Object.keys(i).forEach(a=>{a.startsWith("__")&&delete i[a]}),Object.keys(i).forEach(a=>{typeof i[a]=="string"&&(i[a].includes("<")||i[a].includes(">")||i[a].includes("url(data:"))&&delete i[a],typeof i[a]=="object"&&aOt(i[a])}))},FSe=i=>{mW(i),i.fontFamily&&(!i.themeVariables||!i.themeVariables.fontFamily)&&(i.themeVariables={fontFamily:i.fontFamily}),YA.push(i),jW(fp,YA)},$W=(i=fp)=>{YA=[],jW(i,YA)},NSe={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},oOt={},BSe=i=>{oOt[i]||(Ut.warn(NSe[i]),oOt[i]=!0)},cOt=i=>{i&&(i.lazyLoadedDiagrams||i.loadExternalDiagramsAtStartup)&&BSe("LAZY_LOAD_DEPRECATED")},uOt="c4",RSe={id:uOt,detector:i=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>nIe);return{id:uOt,diagram:i}}},lOt="flowchart",jSe={id:lOt,detector:(i,a)=>{var f,p;return((f=a==null?void 0:a.flowchart)==null?void 0:f.defaultRenderer)==="dagre-wrapper"||((p=a==null?void 0:a.flowchart)==null?void 0:p.defaultRenderer)==="elk"?!1:/^\s*graph/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>cze);return{id:lOt,diagram:i}}},hOt="flowchart-v2",$Se={id:hOt,detector:(i,a)=>{var f,p,w;return((f=a==null?void 0:a.flowchart)==null?void 0:f.defaultRenderer)==="dagre-d3"||((p=a==null?void 0:a.flowchart)==null?void 0:p.defaultRenderer)==="elk"?!1:/^\s*graph/.test(i)&&((w=a==null?void 0:a.flowchart)==null?void 0:w.defaultRenderer)==="dagre-wrapper"?!0:/^\s*flowchart/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>uze);return{id:hOt,diagram:i}}},fOt="er",zSe={id:fOt,detector:i=>/^\s*erDiagram/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Fze);return{id:fOt,diagram:i}}},dOt="gitGraph",qSe={id:dOt,detector:i=>/^\s*gitGraph/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>aqe);return{id:dOt,diagram:i}}},gOt="gantt",HSe={id:gOt,detector:i=>/^\s*gantt/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Kqe);return{id:gOt,diagram:i}}},pOt="info",VSe={id:pOt,detector:i=>/^\s*info/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Qqe);return{id:pOt,diagram:i}}},bOt="pie",GSe={id:bOt,detector:i=>/^\s*pie/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>rHe);return{id:bOt,diagram:i}}},wOt="quadrantChart",USe={id:wOt,detector:i=>/^\s*quadrantChart/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>mHe);return{id:wOt,diagram:i}}},vOt="xychart",WSe={id:vOt,detector:i=>/^\s*xychart-beta/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>HHe);return{id:vOt,diagram:i}}},mOt="requirement",YSe={id:mOt,detector:i=>/^\s*requirement(Diagram)?/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>JHe);return{id:mOt,diagram:i}}},yOt="sequence",KSe={id:yOt,detector:i=>/^\s*sequenceDiagram/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>iGe);return{id:yOt,diagram:i}}},xOt="class",XSe={id:xOt,detector:(i,a)=>{var f;return((f=a==null?void 0:a.class)==null?void 0:f.defaultRenderer)==="dagre-wrapper"?!1:/^\s*classDiagram/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>AGe);return{id:xOt,diagram:i}}},kOt="classDiagram",QSe={id:kOt,detector:(i,a)=>{var f;return/^\s*classDiagram/.test(i)&&((f=a==null?void 0:a.class)==null?void 0:f.defaultRenderer)==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>PGe);return{id:kOt,diagram:i}}},EOt="state",ZSe={id:EOt,detector:(i,a)=>{var f;return((f=a==null?void 0:a.state)==null?void 0:f.defaultRenderer)==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>xUe);return{id:EOt,diagram:i}}},TOt="stateDiagram",JSe={id:TOt,detector:(i,a)=>{var f;return!!(/^\s*stateDiagram-v2/.test(i)||/^\s*stateDiagram/.test(i)&&((f=a==null?void 0:a.state)==null?void 0:f.defaultRenderer)==="dagre-wrapper")},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>$Ue);return{id:TOt,diagram:i}}},COt="journey",tAe={id:COt,detector:i=>/^\s*journey/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>sWe);return{id:COt,diagram:i}}},eAe=function(i,a){for(let f of a)i.attr(f[0],f[1])},nAe=function(i,a,f){let p=new Map;return f?(p.set("width","100%"),p.set("style",`max-width: ${a}px;`)):(p.set("height",i),p.set("width",a)),p},k0=function(i,a,f,p){const w=nAe(a,f,p);eAe(i,w)},fT=function(i,a,f,p){const w=a.node().getBBox(),m=w.width,b=w.height;Ut.info(`SVG bounds: ${m}x${b}`,w);let E=0,_=0;Ut.info(`Graph bounds: ${E}x${_}`,i),E=m+f*2,_=b+f*2,Ut.info(`Calculated bounds: ${E}x${_}`),k0(a,_,E,p);const A=`${w.x-f} ${w.y-f} ${w.width+2*f} ${w.height+2*f}`;a.attr("viewBox",A)},zW={},rAe=(i,a,f)=>{let p="";return i in zW&&zW[i]?p=zW[i](f):Ut.warn(`No theme found for ${i}`),` & { - font-family: ${f.fontFamily}; - font-size: ${f.fontSize}; - fill: ${f.textColor} +(function(JM,Ag){typeof exports=="object"&&typeof module<"u"?module.exports=Ag():typeof define=="function"&&define.amd?define(Ag):(JM=typeof globalThis<"u"?globalThis:JM||self,JM.mermaid=Ag())})(this,function(){var FWe,RWe;"use strict";function JM(i){for(var s=[],u=1;u=Pe?Fe:""+Array(Pe+1-Ie.length).join(je)+Fe},be={s:pe,z:function(Fe){var Pe=-Fe.utcOffset(),je=Math.abs(Pe),Ie=Math.floor(je/60),Se=je%60;return(Pe<=0?"+":"-")+pe(Ie,2,"0")+":"+pe(Se,2,"0")},m:function Fe(Pe,je){if(Pe.date()1)return Fe(ke[0])}else{var Ke=Pe.name;ne[Ke]=Pe,Se=Ke}return!Ie&&Se&&(ae=Se),Se||!Ie&&ae},ge=function(Fe,Pe){if(de(Fe))return Fe.clone();var je=typeof Pe=="object"?Pe:{};return je.date=Fe,je.args=arguments,new xe(je)},W=be;W.l=X,W.i=de,W.w=function(Fe,Pe){return ge(Fe,{locale:Pe.$L,utc:Pe.$u,x:Pe.$x,$offset:Pe.$offset})};var xe=function(){function Fe(je){this.$L=X(je.locale,null,!0),this.parse(je),this.$x=this.$x||je.x||{},this[se]=!0}var Pe=Fe.prototype;return Pe.parse=function(je){this.$d=function(Ie){var Se=Ie.date,Ce=Ie.utc;if(Se===null)return new Date(NaN);if(W.u(Se))return new Date;if(Se instanceof Date)return new Date(Se);if(typeof Se=="string"&&!/Z$/i.test(Se)){var ke=Se.match(ee);if(ke){var Ke=ke[2]-1||0,Ft=(ke[7]||"0").substring(0,3);return Ce?new Date(Date.UTC(ke[1],Ke,ke[3]||1,ke[4]||0,ke[5]||0,ke[6]||0,Ft)):new Date(ke[1],Ke,ke[3]||1,ke[4]||0,ke[5]||0,ke[6]||0,Ft)}}return new Date(Se)}(je),this.init()},Pe.init=function(){var je=this.$d;this.$y=je.getFullYear(),this.$M=je.getMonth(),this.$D=je.getDate(),this.$W=je.getDay(),this.$H=je.getHours(),this.$m=je.getMinutes(),this.$s=je.getSeconds(),this.$ms=je.getMilliseconds()},Pe.$utils=function(){return W},Pe.isValid=function(){return this.$d.toString()!==K},Pe.isSame=function(je,Ie){var Se=ge(je);return this.startOf(Ie)<=Se&&Se<=this.endOf(Ie)},Pe.isAfter=function(je,Ie){return ge(je){},debug:(...i)=>{},info:(...i)=>{},warn:(...i)=>{},error:(...i)=>{},fatal:(...i)=>{}},fpe=function(i="fatal"){let s=g7.fatal;typeof i=="string"?(i=i.toLowerCase(),i in g7&&(s=g7[i])):typeof i=="number"&&(s=i),Xe.trace=()=>{},Xe.debug=()=>{},Xe.info=()=>{},Xe.warn=()=>{},Xe.error=()=>{},Xe.fatal=()=>{},s<=g7.fatal&&(Xe.fatal=console.error?console.error.bind(console,Lv("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",Lv("FATAL"))),s<=g7.error&&(Xe.error=console.error?console.error.bind(console,Lv("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",Lv("ERROR"))),s<=g7.warn&&(Xe.warn=console.warn?console.warn.bind(console,Lv("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",Lv("WARN"))),s<=g7.info&&(Xe.info=console.info?console.info.bind(console,Lv("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",Lv("INFO"))),s<=g7.debug&&(Xe.debug=console.debug?console.debug.bind(console,Lv("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Lv("DEBUG"))),s<=g7.trace&&(Xe.trace=console.debug?console.debug.bind(console,Lv("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Lv("TRACE")))},Lv=i=>`%c${Lg().format("ss.SSS")} : ${i} : `;var p9={};(function(i){Object.defineProperty(i,"__esModule",{value:!0}),i.sanitizeUrl=i.BLANK_URL=void 0;var s=/^([^\w]*)(javascript|data|vbscript)/im,u=/&#(\w+)(^\w|;)?/g,d=/&(newline|tab);/gi,p=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,v=/^.+(:|:)/gim,b=[".","/"];i.BLANK_URL="about:blank";function y(A){return b.indexOf(A[0])>-1}function T(A){var P=A.replace(p,"");return P.replace(u,function(R,F){return String.fromCharCode(F)})}function _(A){if(!A)return i.BLANK_URL;var P=T(A).replace(d,"").replace(p,"").trim();if(!P)return i.BLANK_URL;if(y(P))return P;var R=P.match(v);if(!R)return P;var F=R[0];return s.test(F)?i.BLANK_URL:P}i.sanitizeUrl=_})(p9);function DY(i,s){return i==null||s==null?NaN:is?1:i>=s?0:NaN}function PAt(i,s){return i==null||s==null?NaN:si?1:s>=i?0:NaN}function dpe(i){let s,u,d;i.length!==2?(s=DY,u=(y,T)=>DY(i(y),T),d=(y,T)=>i(y)-T):(s=i===DY||i===PAt?i:BAt,u=i,d=i);function p(y,T,_=0,A=y.length){if(_>>1;u(y[P],T)<0?_=P+1:A=P}while(_>>1;u(y[P],T)<=0?_=P+1:A=P}while(__&&d(y[P-1],T)>-d(y[P],T)?P-1:P}return{left:p,center:b,right:v}}function BAt(){return 0}function FAt(i){return i===null?NaN:+i}const RAt=dpe(DY).right;dpe(FAt).center;const jAt=RAt;class cBe extends Map{constructor(s,u=qAt){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:u}}),s!=null)for(const[d,p]of s)this.set(d,p)}get(s){return super.get(uBe(this,s))}has(s){return super.has(uBe(this,s))}set(s,u){return super.set($At(this,s),u)}delete(s){return super.delete(zAt(this,s))}}function uBe({_intern:i,_key:s},u){const d=s(u);return i.has(d)?i.get(d):u}function $At({_intern:i,_key:s},u){const d=s(u);return i.has(d)?i.get(d):(i.set(d,u),u)}function zAt({_intern:i,_key:s},u){const d=s(u);return i.has(d)&&(u=i.get(d),i.delete(d)),u}function qAt(i){return i!==null&&typeof i=="object"?i.valueOf():i}const HAt=Math.sqrt(50),VAt=Math.sqrt(10),UAt=Math.sqrt(2);function IY(i,s,u){const d=(s-i)/Math.max(0,u),p=Math.floor(Math.log10(d)),v=d/Math.pow(10,p),b=v>=HAt?10:v>=VAt?5:v>=UAt?2:1;let y,T,_;return p<0?(_=Math.pow(10,-p)/b,y=Math.round(i*_),T=Math.round(s*_),y/_s&&--T,_=-_):(_=Math.pow(10,p)*b,y=Math.round(i/_),T=Math.round(s/_),y*_s&&--T),T0))return[];if(i===s)return[i];const d=s=p))return[];const y=v-p+1,T=new Array(y);if(d)if(b<0)for(let _=0;_=d)&&(u=d);else{let d=-1;for(let p of i)(p=s(p,++d,i))!=null&&(u=p)&&(u=p)}return u}function WAt(i,s){let u;if(s===void 0)for(const d of i)d!=null&&(u>d||u===void 0&&d>=d)&&(u=d);else{let d=-1;for(let p of i)(p=s(p,++d,i))!=null&&(u>p||u===void 0&&p>=p)&&(u=p)}return u}function YAt(i,s,u){i=+i,s=+s,u=(p=arguments.length)<2?(s=i,i=0,1):p<3?1:+u;for(var d=-1,p=Math.max(0,Math.ceil((s-i)/u))|0,v=new Array(p);++d+i(s)}function eLt(i,s){return s=Math.max(0,i.bandwidth()-s*2)/2,i.round()&&(s=Math.round(s)),u=>+i(u)+s}function tLt(){return!this.__axis}function hBe(i,s){var u=[],d=null,p=null,v=6,b=6,y=3,T=typeof window<"u"&&window.devicePixelRatio>1?0:.5,_=i===OY||i===NY?-1:1,A=i===NY||i===bpe?"x":"y",P=i===OY||i===mpe?QAt:JAt;function R(F){var j=d??(s.ticks?s.ticks.apply(s,u):s.domain()),K=p??(s.tickFormat?s.tickFormat.apply(s,u):XAt),ee=Math.max(v,0)+y,ie=s.range(),oe=+ie[0]+T,pe=+ie[ie.length-1]+T,be=(s.bandwidth?eLt:ZAt)(s.copy(),T),ae=F.selection?F.selection():F,ne=ae.selectAll(".domain").data([null]),se=ae.selectAll(".tick").data(j,s).order(),de=se.exit(),X=se.enter().append("g").attr("class","tick"),ge=se.select("line"),W=se.select("text");ne=ne.merge(ne.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),se=se.merge(X),ge=ge.merge(X.append("line").attr("stroke","currentColor").attr(A+"2",_*v)),W=W.merge(X.append("text").attr("fill","currentColor").attr(A,_*ee).attr("dy",i===OY?"0em":i===mpe?"0.71em":"0.32em")),F!==ae&&(ne=ne.transition(F),se=se.transition(F),ge=ge.transition(F),W=W.transition(F),de=de.transition(F).attr("opacity",lBe).attr("transform",function(xe){return isFinite(xe=be(xe))?P(xe+T):this.getAttribute("transform")}),X.attr("opacity",lBe).attr("transform",function(xe){var U=this.parentNode.__axis;return P((U&&isFinite(U=U(xe))?U:be(xe))+T)})),de.remove(),ne.attr("d",i===NY||i===bpe?b?"M"+_*b+","+oe+"H"+T+"V"+pe+"H"+_*b:"M"+T+","+oe+"V"+pe:b?"M"+oe+","+_*b+"V"+T+"H"+pe+"V"+_*b:"M"+oe+","+T+"H"+pe),se.attr("opacity",1).attr("transform",function(xe){return P(be(xe)+T)}),ge.attr(A+"2",_*v),W.attr(A,_*ee).text(K),ae.filter(tLt).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",i===bpe?"start":i===NY?"end":"middle"),ae.each(function(){this.__axis=be})}return R.scale=function(F){return arguments.length?(s=F,R):s},R.ticks=function(){return u=Array.from(arguments),R},R.tickArguments=function(F){return arguments.length?(u=F==null?[]:Array.from(F),R):u.slice()},R.tickValues=function(F){return arguments.length?(d=F==null?null:Array.from(F),R):d&&d.slice()},R.tickFormat=function(F){return arguments.length?(p=F,R):p},R.tickSize=function(F){return arguments.length?(v=b=+F,R):v},R.tickSizeInner=function(F){return arguments.length?(v=+F,R):v},R.tickSizeOuter=function(F){return arguments.length?(b=+F,R):b},R.tickPadding=function(F){return arguments.length?(y=+F,R):y},R.offset=function(F){return arguments.length?(T=+F,R):T},R}function nLt(i){return hBe(OY,i)}function rLt(i){return hBe(mpe,i)}var iLt={value:()=>{}};function fBe(){for(var i=0,s=arguments.length,u={},d;i=0&&(d=u.slice(p+1),u=u.slice(0,p)),u&&!s.hasOwnProperty(u))throw new Error("unknown type: "+u);return{type:u,name:d}})}PY.prototype=fBe.prototype={constructor:PY,on:function(i,s){var u=this._,d=sLt(i+"",u),p,v=-1,b=d.length;if(arguments.length<2){for(;++v0)for(var u=new Array(p),d=0,p,v;d=0&&(s=i.slice(0,u))!=="xmlns"&&(i=i.slice(u+1)),gBe.hasOwnProperty(s)?{space:gBe[s],local:i}:i}function oLt(i){return function(){var s=this.ownerDocument,u=this.namespaceURI;return u===vpe&&s.documentElement.namespaceURI===vpe?s.createElement(i):s.createElementNS(u,i)}}function cLt(i){return function(){return this.ownerDocument.createElementNS(i.space,i.local)}}function pBe(i){var s=BY(i);return(s.local?cLt:oLt)(s)}function uLt(){}function wpe(i){return i==null?uLt:function(){return this.querySelector(i)}}function lLt(i){typeof i!="function"&&(i=wpe(i));for(var s=this._groups,u=s.length,d=new Array(u),p=0;p=pe&&(pe=oe+1);!(ae=ee[pe])&&++pe=0;)(b=d[p])&&(v&&b.compareDocumentPosition(v)^4&&v.parentNode.insertBefore(b,v),v=b);return this}function NLt(i){i||(i=PLt);function s(P,R){return P&&R?i(P.__data__,R.__data__):!P-!R}for(var u=this._groups,d=u.length,p=new Array(d),v=0;vs?1:i>=s?0:NaN}function BLt(){var i=arguments[0];return arguments[0]=this,i.apply(null,arguments),this}function FLt(){return Array.from(this)}function RLt(){for(var i=this._groups,s=0,u=i.length;s1?this.each((s==null?YLt:typeof s=="function"?QLt:XLt)(i,s,u??"")):ZM(this.node(),i)}function ZM(i,s){return i.style.getPropertyValue(s)||xBe(i).getComputedStyle(i,null).getPropertyValue(s)}function ZLt(i){return function(){delete this[i]}}function eMt(i,s){return function(){this[i]=s}}function tMt(i,s){return function(){var u=s.apply(this,arguments);u==null?delete this[i]:this[i]=u}}function nMt(i,s){return arguments.length>1?this.each((s==null?ZLt:typeof s=="function"?tMt:eMt)(i,s)):this.node()[i]}function kBe(i){return i.trim().split(/^|\s+/)}function ype(i){return i.classList||new EBe(i)}function EBe(i){this._node=i,this._names=kBe(i.getAttribute("class")||"")}EBe.prototype={add:function(i){var s=this._names.indexOf(i);s<0&&(this._names.push(i),this._node.setAttribute("class",this._names.join(" ")))},remove:function(i){var s=this._names.indexOf(i);s>=0&&(this._names.splice(s,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(i){return this._names.indexOf(i)>=0}};function TBe(i,s){for(var u=ype(i),d=-1,p=s.length;++d=0&&(u=s.slice(d+1),s=s.slice(0,d)),{type:s,name:u}})}function MMt(i){return function(){var s=this.__on;if(s){for(var u=0,d=-1,p=s.length,v;u>8&15|s>>4&240,s>>4&15|s&240,(s&15)<<4|s&15,1):u===8?$Y(s>>24&255,s>>16&255,s>>8&255,(s&255)/255):u===4?$Y(s>>12&15|s>>8&240,s>>8&15|s>>4&240,s>>4&15|s&240,((s&15)<<4|s&15)/255):null):(s=jMt.exec(i))?new Mg(s[1],s[2],s[3],1):(s=$Mt.exec(i))?new Mg(s[1]*255/100,s[2]*255/100,s[3]*255/100,1):(s=zMt.exec(i))?$Y(s[1],s[2],s[3],s[4]):(s=qMt.exec(i))?$Y(s[1]*255/100,s[2]*255/100,s[3]*255/100,s[4]):(s=HMt.exec(i))?PBe(s[1],s[2]/100,s[3]/100,1):(s=VMt.exec(i))?PBe(s[1],s[2]/100,s[3]/100,s[4]):ABe.hasOwnProperty(i)?DBe(ABe[i]):i==="transparent"?new Mg(NaN,NaN,NaN,0):null}function DBe(i){return new Mg(i>>16&255,i>>8&255,i&255,1)}function $Y(i,s,u,d){return d<=0&&(i=s=u=NaN),new Mg(i,s,u,d)}function IBe(i){return i instanceof fC||(i=dC(i)),i?(i=i.rgb(),new Mg(i.r,i.g,i.b,i.opacity)):new Mg}function kpe(i,s,u,d){return arguments.length===1?IBe(i):new Mg(i,s,u,d??1)}function Mg(i,s,u,d){this.r=+i,this.g=+s,this.b=+u,this.opacity=+d}wF(Mg,kpe,RY(fC,{brighter(i){return i=i==null?jY:Math.pow(jY,i),new Mg(this.r*i,this.g*i,this.b*i,this.opacity)},darker(i){return i=i==null?yF:Math.pow(yF,i),new Mg(this.r*i,this.g*i,this.b*i,this.opacity)},rgb(){return this},clamp(){return new Mg(gC(this.r),gC(this.g),gC(this.b),zY(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:OBe,formatHex:OBe,formatHex8:KMt,formatRgb:NBe,toString:NBe}));function OBe(){return`#${pC(this.r)}${pC(this.g)}${pC(this.b)}`}function KMt(){return`#${pC(this.r)}${pC(this.g)}${pC(this.b)}${pC((isNaN(this.opacity)?1:this.opacity)*255)}`}function NBe(){const i=zY(this.opacity);return`${i===1?"rgb(":"rgba("}${gC(this.r)}, ${gC(this.g)}, ${gC(this.b)}${i===1?")":`, ${i})`}`}function zY(i){return isNaN(i)?1:Math.max(0,Math.min(1,i))}function gC(i){return Math.max(0,Math.min(255,Math.round(i)||0))}function pC(i){return i=gC(i),(i<16?"0":"")+i.toString(16)}function PBe(i,s,u,d){return d<=0?i=s=u=NaN:u<=0||u>=1?i=s=NaN:s<=0&&(i=NaN),new A3(i,s,u,d)}function BBe(i){if(i instanceof A3)return new A3(i.h,i.s,i.l,i.opacity);if(i instanceof fC||(i=dC(i)),!i)return new A3;if(i instanceof A3)return i;i=i.rgb();var s=i.r/255,u=i.g/255,d=i.b/255,p=Math.min(s,u,d),v=Math.max(s,u,d),b=NaN,y=v-p,T=(v+p)/2;return y?(s===v?b=(u-d)/y+(u0&&T<1?0:b,new A3(b,y,T,i.opacity)}function WMt(i,s,u,d){return arguments.length===1?BBe(i):new A3(i,s,u,d??1)}function A3(i,s,u,d){this.h=+i,this.s=+s,this.l=+u,this.opacity=+d}wF(A3,WMt,RY(fC,{brighter(i){return i=i==null?jY:Math.pow(jY,i),new A3(this.h,this.s,this.l*i,this.opacity)},darker(i){return i=i==null?yF:Math.pow(yF,i),new A3(this.h,this.s,this.l*i,this.opacity)},rgb(){var i=this.h%360+(this.h<0)*360,s=isNaN(i)||isNaN(this.s)?0:this.s,u=this.l,d=u+(u<.5?u:1-u)*s,p=2*u-d;return new Mg(Epe(i>=240?i-240:i+120,p,d),Epe(i,p,d),Epe(i<120?i+240:i-120,p,d),this.opacity)},clamp(){return new A3(FBe(this.h),qY(this.s),qY(this.l),zY(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const i=zY(this.opacity);return`${i===1?"hsl(":"hsla("}${FBe(this.h)}, ${qY(this.s)*100}%, ${qY(this.l)*100}%${i===1?")":`, ${i})`}`}}));function FBe(i){return i=(i||0)%360,i<0?i+360:i}function qY(i){return Math.max(0,Math.min(1,i||0))}function Epe(i,s,u){return(i<60?s+(u-s)*i/60:i<180?u:i<240?s+(u-s)*(240-i)/60:s)*255}const YMt=Math.PI/180,XMt=180/Math.PI,HY=18,RBe=.96422,jBe=1,$Be=.82521,zBe=4/29,tD=6/29,qBe=3*tD*tD,QMt=tD*tD*tD;function HBe(i){if(i instanceof j4)return new j4(i.l,i.a,i.b,i.opacity);if(i instanceof p7)return VBe(i);i instanceof Mg||(i=IBe(i));var s=_pe(i.r),u=_pe(i.g),d=_pe(i.b),p=Tpe((.2225045*s+.7168786*u+.0606169*d)/jBe),v,b;return s===u&&u===d?v=b=p:(v=Tpe((.4360747*s+.3850649*u+.1430804*d)/RBe),b=Tpe((.0139322*s+.0971045*u+.7141733*d)/$Be)),new j4(116*p-16,500*(v-p),200*(p-b),i.opacity)}function JMt(i,s,u,d){return arguments.length===1?HBe(i):new j4(i,s,u,d??1)}function j4(i,s,u,d){this.l=+i,this.a=+s,this.b=+u,this.opacity=+d}wF(j4,JMt,RY(fC,{brighter(i){return new j4(this.l+HY*(i??1),this.a,this.b,this.opacity)},darker(i){return new j4(this.l-HY*(i??1),this.a,this.b,this.opacity)},rgb(){var i=(this.l+16)/116,s=isNaN(this.a)?i:i+this.a/500,u=isNaN(this.b)?i:i-this.b/200;return s=RBe*Cpe(s),i=jBe*Cpe(i),u=$Be*Cpe(u),new Mg(Spe(3.1338561*s-1.6168667*i-.4906146*u),Spe(-.9787684*s+1.9161415*i+.033454*u),Spe(.0719453*s-.2289914*i+1.4052427*u),this.opacity)}}));function Tpe(i){return i>QMt?Math.pow(i,1/3):i/qBe+zBe}function Cpe(i){return i>tD?i*i*i:qBe*(i-zBe)}function Spe(i){return 255*(i<=.0031308?12.92*i:1.055*Math.pow(i,1/2.4)-.055)}function _pe(i){return(i/=255)<=.04045?i/12.92:Math.pow((i+.055)/1.055,2.4)}function ZMt(i){if(i instanceof p7)return new p7(i.h,i.c,i.l,i.opacity);if(i instanceof j4||(i=HBe(i)),i.a===0&&i.b===0)return new p7(NaN,0()=>i;function UBe(i,s){return function(u){return i+u*s}}function eDt(i,s,u){return i=Math.pow(i,u),s=Math.pow(s,u)-i,u=1/u,function(d){return Math.pow(i+d*s,u)}}function tDt(i,s){var u=s-i;return u?UBe(i,u>180||u<-180?u-360*Math.round(u/360):u):VY(isNaN(i)?s:i)}function nDt(i){return(i=+i)==1?kF:function(s,u){return u-s?eDt(s,u,i):VY(isNaN(s)?u:s)}}function kF(i,s){var u=s-i;return u?UBe(i,u):VY(isNaN(i)?s:i)}const UY=function i(s){var u=nDt(s);function d(p,v){var b=u((p=kpe(p)).r,(v=kpe(v)).r),y=u(p.g,v.g),T=u(p.b,v.b),_=kF(p.opacity,v.opacity);return function(A){return p.r=b(A),p.g=y(A),p.b=T(A),p.opacity=_(A),p+""}}return d.gamma=i,d}(1);function rDt(i,s){s||(s=[]);var u=i?Math.min(s.length,i.length):0,d=s.slice(),p;return function(v){for(p=0;pu&&(v=s.slice(u,v),y[b]?y[b]+=v:y[++b]=v),(d=d[0])===(p=p[0])?y[b]?y[b]+=p:y[++b]=p:(y[++b]=null,T.push({i:b,x:L3(d,p)})),u=Mpe.lastIndex;return u180?A+=360:A-_>180&&(_+=360),R.push({i:P.push(p(P)+"rotate(",null,d)-2,x:L3(_,A)})):A&&P.push(p(P)+"rotate("+A+d)}function y(_,A,P,R){_!==A?R.push({i:P.push(p(P)+"skewX(",null,d)-2,x:L3(_,A)}):A&&P.push(p(P)+"skewX("+A+d)}function T(_,A,P,R,F,j){if(_!==P||A!==R){var K=F.push(p(F)+"scale(",null,",",null,")");j.push({i:K-4,x:L3(_,P)},{i:K-2,x:L3(A,R)})}else(P!==1||R!==1)&&F.push(p(F)+"scale("+P+","+R+")")}return function(_,A){var P=[],R=[];return _=i(_),A=i(A),v(_.translateX,_.translateY,A.translateX,A.translateY,P,R),b(_.rotate,A.rotate,P,R),y(_.skewX,A.skewX,P,R),T(_.scaleX,_.scaleY,A.scaleX,A.scaleY,P,R),_=A=null,function(F){for(var j=-1,K=R.length,ee;++j=0&&i._call.call(void 0,s),i=i._next;--nD}function ZBe(){bC=(WY=SF.now())+YY,nD=EF=0;try{vDt()}finally{nD=0,yDt(),bC=0}}function wDt(){var i=SF.now(),s=i-WY;s>XBe&&(YY-=s,WY=i)}function yDt(){for(var i,s=KY,u,d=1/0;s;)s._call?(d>s._time&&(d=s._time),i=s,s=s._next):(u=s._next,s._next=null,s=i?i._next=u:KY=u);CF=i,Npe(d)}function Npe(i){if(!nD){EF&&(EF=clearTimeout(EF));var s=i-bC;s>24?(i<1/0&&(EF=setTimeout(ZBe,i-SF.now()-YY)),TF&&(TF=clearInterval(TF))):(TF||(WY=SF.now(),TF=setInterval(wDt,XBe)),nD=1,QBe(ZBe))}}function eFe(i,s,u){var d=new XY;return s=s==null?0:+s,d.restart(p=>{d.stop(),i(p+s)},s,u),d}var xDt=fBe("start","end","cancel","interrupt"),kDt=[],tFe=0,nFe=1,Ppe=2,QY=3,rFe=4,Bpe=5,JY=6;function ZY(i,s,u,d,p,v){var b=i.__transition;if(!b)i.__transition={};else if(u in b)return;EDt(i,u,{name:s,index:d,group:p,on:xDt,tween:kDt,time:v.time,delay:v.delay,duration:v.duration,ease:v.ease,timer:null,state:tFe})}function Fpe(i,s){var u=M3(i,s);if(u.state>tFe)throw new Error("too late; already scheduled");return u}function $4(i,s){var u=M3(i,s);if(u.state>QY)throw new Error("too late; already running");return u}function M3(i,s){var u=i.__transition;if(!u||!(u=u[s]))throw new Error("transition not found");return u}function EDt(i,s,u){var d=i.__transition,p;d[s]=u,u.timer=JBe(v,0,u.time);function v(_){u.state=nFe,u.timer.restart(b,u.delay,u.time),u.delay<=_&&b(_-u.delay)}function b(_){var A,P,R,F;if(u.state!==nFe)return T();for(A in d)if(F=d[A],F.name===u.name){if(F.state===QY)return eFe(b);F.state===rFe?(F.state=JY,F.timer.stop(),F.on.call("interrupt",i,i.__data__,F.index,F.group),delete d[A]):+APpe&&d.state=0&&(s=s.slice(0,u)),!s||s==="start"})}function eIt(i,s,u){var d,p,v=ZDt(s)?Fpe:$4;return function(){var b=v(this,i),y=b.on;y!==d&&(p=(d=y).copy()).on(s,u),b.on=p}}function tIt(i,s){var u=this._id;return arguments.length<2?M3(this.node(),u).on.on(i):this.each(eIt(u,i,s))}function nIt(i){return function(){var s=this.parentNode;for(var u in this.__transition)if(+u!==i)return;s&&s.removeChild(this)}}function rIt(){return this.on("end.remove",nIt(this._id))}function iIt(i){var s=this._name,u=this._id;typeof i!="function"&&(i=wpe(i));for(var d=this._groups,p=d.length,v=new Array(p),b=0;b=0))throw new Error(`invalid digits: ${i}`);if(s>15)return oFe;const u=10**s;return function(d){this._+=d[0];for(let p=1,v=d.length;pmC)if(!(Math.abs(P*T-_*A)>mC)||!v)this._append`L${this._x1=s},${this._y1=u}`;else{let F=d-b,j=p-y,K=T*T+_*_,ee=F*F+j*j,ie=Math.sqrt(K),oe=Math.sqrt(R),pe=v*Math.tan((jpe-Math.acos((K+R-ee)/(2*ie*oe)))/2),be=pe/oe,ae=pe/ie;Math.abs(be-1)>mC&&this._append`L${s+be*A},${u+be*P}`,this._append`A${v},${v},0,0,${+(P*F>A*j)},${this._x1=s+ae*T},${this._y1=u+ae*_}`}}arc(s,u,d,p,v,b){if(s=+s,u=+u,d=+d,b=!!b,d<0)throw new Error(`negative radius: ${d}`);let y=d*Math.cos(p),T=d*Math.sin(p),_=s+y,A=u+T,P=1^b,R=b?p-v:v-p;this._x1===null?this._append`M${_},${A}`:(Math.abs(this._x1-_)>mC||Math.abs(this._y1-A)>mC)&&this._append`L${_},${A}`,d&&(R<0&&(R=R%$pe+$pe),R>LIt?this._append`A${d},${d},0,1,${P},${s-y},${u-T}A${d},${d},0,1,${P},${this._x1=_},${this._y1=A}`:R>mC&&this._append`A${d},${d},0,${+(R>=jpe)},${P},${this._x1=s+d*Math.cos(v)},${this._y1=u+d*Math.sin(v)}`)}rect(s,u,d,p){this._append`M${this._x0=this._x1=+s},${this._y0=this._y1=+u}h${d=+d}v${+p}h${-d}Z`}toString(){return this._}};function IIt(i){if(!i.ok)throw new Error(i.status+" "+i.statusText);return i.text()}function OIt(i,s){return fetch(i,s).then(IIt)}function NIt(i){return(s,u)=>OIt(s,u).then(d=>new DOMParser().parseFromString(d,i))}var PIt=NIt("image/svg+xml");function BIt(i){return Math.abs(i=Math.round(i))>=1e21?i.toLocaleString("en").replace(/,/g,""):i.toString(10)}function eX(i,s){if((u=(i=s?i.toExponential(s-1):i.toExponential()).indexOf("e"))<0)return null;var u,d=i.slice(0,u);return[d.length>1?d[0]+d.slice(2):d,+i.slice(u+1)]}function rD(i){return i=eX(Math.abs(i)),i?i[1]:NaN}function FIt(i,s){return function(u,d){for(var p=u.length,v=[],b=0,y=i[0],T=0;p>0&&y>0&&(T+y+1>d&&(y=Math.max(1,d-T)),v.push(u.substring(p-=y,p+y)),!((T+=y+1)>d));)y=i[b=(b+1)%i.length];return v.reverse().join(s)}}function RIt(i){return function(s){return s.replace(/[0-9]/g,function(u){return i[+u]})}}var jIt=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function tX(i){if(!(s=jIt.exec(i)))throw new Error("invalid format: "+i);var s;return new zpe({fill:s[1],align:s[2],sign:s[3],symbol:s[4],zero:s[5],width:s[6],comma:s[7],precision:s[8]&&s[8].slice(1),trim:s[9],type:s[10]})}tX.prototype=zpe.prototype;function zpe(i){this.fill=i.fill===void 0?" ":i.fill+"",this.align=i.align===void 0?">":i.align+"",this.sign=i.sign===void 0?"-":i.sign+"",this.symbol=i.symbol===void 0?"":i.symbol+"",this.zero=!!i.zero,this.width=i.width===void 0?void 0:+i.width,this.comma=!!i.comma,this.precision=i.precision===void 0?void 0:+i.precision,this.trim=!!i.trim,this.type=i.type===void 0?"":i.type+""}zpe.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function $It(i){e:for(var s=i.length,u=1,d=-1,p;u0&&(d=0);break}return d>0?i.slice(0,d)+i.slice(p+1):i}var cFe;function zIt(i,s){var u=eX(i,s);if(!u)return i+"";var d=u[0],p=u[1],v=p-(cFe=Math.max(-8,Math.min(8,Math.floor(p/3)))*3)+1,b=d.length;return v===b?d:v>b?d+new Array(v-b+1).join("0"):v>0?d.slice(0,v)+"."+d.slice(v):"0."+new Array(1-v).join("0")+eX(i,Math.max(0,s+v-1))[0]}function uFe(i,s){var u=eX(i,s);if(!u)return i+"";var d=u[0],p=u[1];return p<0?"0."+new Array(-p).join("0")+d:d.length>p+1?d.slice(0,p+1)+"."+d.slice(p+1):d+new Array(p-d.length+2).join("0")}const lFe={"%":(i,s)=>(i*100).toFixed(s),b:i=>Math.round(i).toString(2),c:i=>i+"",d:BIt,e:(i,s)=>i.toExponential(s),f:(i,s)=>i.toFixed(s),g:(i,s)=>i.toPrecision(s),o:i=>Math.round(i).toString(8),p:(i,s)=>uFe(i*100,s),r:uFe,s:zIt,X:i=>Math.round(i).toString(16).toUpperCase(),x:i=>Math.round(i).toString(16)};function hFe(i){return i}var fFe=Array.prototype.map,dFe=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function qIt(i){var s=i.grouping===void 0||i.thousands===void 0?hFe:FIt(fFe.call(i.grouping,Number),i.thousands+""),u=i.currency===void 0?"":i.currency[0]+"",d=i.currency===void 0?"":i.currency[1]+"",p=i.decimal===void 0?".":i.decimal+"",v=i.numerals===void 0?hFe:RIt(fFe.call(i.numerals,String)),b=i.percent===void 0?"%":i.percent+"",y=i.minus===void 0?"−":i.minus+"",T=i.nan===void 0?"NaN":i.nan+"";function _(P){P=tX(P);var R=P.fill,F=P.align,j=P.sign,K=P.symbol,ee=P.zero,ie=P.width,oe=P.comma,pe=P.precision,be=P.trim,ae=P.type;ae==="n"?(oe=!0,ae="g"):lFe[ae]||(pe===void 0&&(pe=12),be=!0,ae="g"),(ee||R==="0"&&F==="=")&&(ee=!0,R="0",F="=");var ne=K==="$"?u:K==="#"&&/[boxX]/.test(ae)?"0"+ae.toLowerCase():"",se=K==="$"?d:/[%p]/.test(ae)?b:"",de=lFe[ae],X=/[defgprs%]/.test(ae);pe=pe===void 0?6:/[gprs]/.test(ae)?Math.max(1,Math.min(21,pe)):Math.max(0,Math.min(20,pe));function ge(W){var xe=ne,U=se,Fe,Pe,je;if(ae==="c")U=de(W)+U,W="";else{W=+W;var Ie=W<0||1/W<0;if(W=isNaN(W)?T:de(Math.abs(W),pe),be&&(W=$It(W)),Ie&&+W==0&&j!=="+"&&(Ie=!1),xe=(Ie?j==="("?j:y:j==="-"||j==="("?"":j)+xe,U=(ae==="s"?dFe[8+cFe/3]:"")+U+(Ie&&j==="("?")":""),X){for(Fe=-1,Pe=W.length;++Feje||je>57){U=(je===46?p+W.slice(Fe+1):W.slice(Fe))+U,W=W.slice(0,Fe);break}}}oe&&!ee&&(W=s(W,1/0));var Se=xe.length+W.length+U.length,Ce=Se>1)+xe+W+U+Ce.slice(Se);break;default:W=Ce+xe+W+U;break}return v(W)}return ge.toString=function(){return P+""},ge}function A(P,R){var F=_((P=tX(P),P.type="f",P)),j=Math.max(-8,Math.min(8,Math.floor(rD(R)/3)))*3,K=Math.pow(10,-j),ee=dFe[8+j/3];return function(ie){return F(K*ie)+ee}}return{format:_,formatPrefix:A}}var nX,gFe,pFe;HIt({thousands:",",grouping:[3],currency:["$",""]});function HIt(i){return nX=qIt(i),gFe=nX.format,pFe=nX.formatPrefix,nX}function VIt(i){return Math.max(0,-rD(Math.abs(i)))}function UIt(i,s){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(rD(s)/3)))*3-rD(Math.abs(i)))}function GIt(i,s){return i=Math.abs(i),s=Math.abs(s)-i,Math.max(0,rD(s)-rD(i))+1}function rX(i,s){switch(arguments.length){case 0:break;case 1:this.range(i);break;default:this.range(s).domain(i);break}return this}const bFe=Symbol("implicit");function _F(){var i=new cBe,s=[],u=[],d=bFe;function p(v){let b=i.get(v);if(b===void 0){if(d!==bFe)return d;i.set(v,b=s.push(v)-1)}return u[b%u.length]}return p.domain=function(v){if(!arguments.length)return s.slice();s=[],i=new cBe;for(const b of v)i.has(b)||i.set(b,s.push(b)-1);return p},p.range=function(v){return arguments.length?(u=Array.from(v),p):u.slice()},p.unknown=function(v){return arguments.length?(d=v,p):d},p.copy=function(){return _F(s,u).unknown(d)},rX.apply(p,arguments),p}function qpe(){var i=_F().unknown(void 0),s=i.domain,u=i.range,d=0,p=1,v,b,y=!1,T=0,_=0,A=.5;delete i.unknown;function P(){var R=s().length,F=ps&&(u=i,i=s,s=u),function(d){return Math.max(i,Math.min(s,d))}}function XIt(i,s,u){var d=i[0],p=i[1],v=s[0],b=s[1];return p2?QIt:XIt,T=_=null,P}function P(R){return R==null||isNaN(R=+R)?v:(T||(T=y(i.map(d),s,u)))(d(b(R)))}return P.invert=function(R){return b(p((_||(_=y(s,i.map(d),L3)))(R)))},P.domain=function(R){return arguments.length?(i=Array.from(R,WIt),A()):i.slice()},P.range=function(R){return arguments.length?(s=Array.from(R),A()):s.slice()},P.rangeRound=function(R){return s=Array.from(R),u=lDt,A()},P.clamp=function(R){return arguments.length?(b=R?!0:iD,A()):b!==iD},P.interpolate=function(R){return arguments.length?(u=R,A()):u},P.unknown=function(R){return arguments.length?(v=R,P):v},function(R,F){return d=R,p=F,A()}}function wFe(){return JIt()(iD,iD)}function ZIt(i,s,u,d){var p=ppe(i,s,u),v;switch(d=tX(d??",f"),d.type){case"s":{var b=Math.max(Math.abs(i),Math.abs(s));return d.precision==null&&!isNaN(v=UIt(p,b))&&(d.precision=v),pFe(d,b)}case"":case"e":case"g":case"p":case"r":{d.precision==null&&!isNaN(v=GIt(p,Math.max(Math.abs(i),Math.abs(s))))&&(d.precision=v-(d.type==="e"));break}case"f":case"%":{d.precision==null&&!isNaN(v=VIt(p))&&(d.precision=v-(d.type==="%")*2);break}}return gFe(d)}function eOt(i){var s=i.domain;return i.ticks=function(u){var d=s();return GAt(d[0],d[d.length-1],u??10)},i.tickFormat=function(u,d){var p=s();return ZIt(p[0],p[p.length-1],u??10,d)},i.nice=function(u){u==null&&(u=10);var d=s(),p=0,v=d.length-1,b=d[p],y=d[v],T,_,A=10;for(y0;){if(_=gpe(b,y,u),_===T)return d[p]=b,d[v]=y,s(d);if(_>0)b=Math.floor(b/_)*_,y=Math.ceil(y/_)*_;else if(_<0)b=Math.ceil(b*_)/_,y=Math.floor(y*_)/_;else break;T=_}return i},i}function sD(){var i=wFe();return i.copy=function(){return vFe(i,sD())},rX.apply(i,arguments),eOt(i)}function tOt(i,s){i=i.slice();var u=0,d=i.length-1,p=i[u],v=i[d],b;return v(i(v=new Date(+v)),v),p.ceil=v=>(i(v=new Date(v-1)),s(v,1),i(v),v),p.round=v=>{const b=p(v),y=p.ceil(v);return v-b(s(v=new Date(+v),b==null?1:Math.floor(b)),v),p.range=(v,b,y)=>{const T=[];if(v=p.ceil(v),y=y==null?1:Math.floor(y),!(v0))return T;let _;do T.push(_=new Date(+v)),s(v,y),i(v);while(_h1(b=>{if(b>=b)for(;i(b),!v(b);)b.setTime(b-1)},(b,y)=>{if(b>=b)if(y<0)for(;++y<=0;)for(;s(b,-1),!v(b););else for(;--y>=0;)for(;s(b,1),!v(b););}),u&&(p.count=(v,b)=>(Vpe.setTime(+v),Upe.setTime(+b),i(Vpe),i(Upe),Math.floor(u(Vpe,Upe))),p.every=v=>(v=Math.floor(v),!isFinite(v)||!(v>0)?null:v>1?p.filter(d?b=>d(b)%v===0:b=>p.count(0,b)%v===0):p)),p}const aD=h1(()=>{},(i,s)=>{i.setTime(+i+s)},(i,s)=>s-i);aD.every=i=>(i=Math.floor(i),!isFinite(i)||!(i>0)?null:i>1?h1(s=>{s.setTime(Math.floor(s/i)*i)},(s,u)=>{s.setTime(+s+u*i)},(s,u)=>(u-s)/i):aD),aD.range;const v7=1e3,Mv=v7*60,w7=Mv*60,y7=w7*24,Gpe=y7*7,yFe=y7*30,Kpe=y7*365,b9=h1(i=>{i.setTime(i-i.getMilliseconds())},(i,s)=>{i.setTime(+i+s*v7)},(i,s)=>(s-i)/v7,i=>i.getUTCSeconds());b9.range;const AF=h1(i=>{i.setTime(i-i.getMilliseconds()-i.getSeconds()*v7)},(i,s)=>{i.setTime(+i+s*Mv)},(i,s)=>(s-i)/Mv,i=>i.getMinutes());AF.range,h1(i=>{i.setUTCSeconds(0,0)},(i,s)=>{i.setTime(+i+s*Mv)},(i,s)=>(s-i)/Mv,i=>i.getUTCMinutes()).range;const LF=h1(i=>{i.setTime(i-i.getMilliseconds()-i.getSeconds()*v7-i.getMinutes()*Mv)},(i,s)=>{i.setTime(+i+s*w7)},(i,s)=>(s-i)/w7,i=>i.getHours());LF.range,h1(i=>{i.setUTCMinutes(0,0,0)},(i,s)=>{i.setTime(+i+s*w7)},(i,s)=>(s-i)/w7,i=>i.getUTCHours()).range;const vC=h1(i=>i.setHours(0,0,0,0),(i,s)=>i.setDate(i.getDate()+s),(i,s)=>(s-i-(s.getTimezoneOffset()-i.getTimezoneOffset())*Mv)/y7,i=>i.getDate()-1);vC.range;const Wpe=h1(i=>{i.setUTCHours(0,0,0,0)},(i,s)=>{i.setUTCDate(i.getUTCDate()+s)},(i,s)=>(s-i)/y7,i=>i.getUTCDate()-1);Wpe.range,h1(i=>{i.setUTCHours(0,0,0,0)},(i,s)=>{i.setUTCDate(i.getUTCDate()+s)},(i,s)=>(s-i)/y7,i=>Math.floor(i/y7)).range;function wC(i){return h1(s=>{s.setDate(s.getDate()-(s.getDay()+7-i)%7),s.setHours(0,0,0,0)},(s,u)=>{s.setDate(s.getDate()+u*7)},(s,u)=>(u-s-(u.getTimezoneOffset()-s.getTimezoneOffset())*Mv)/Gpe)}const MF=wC(0),DF=wC(1),xFe=wC(2),kFe=wC(3),yC=wC(4),EFe=wC(5),TFe=wC(6);MF.range,DF.range,xFe.range,kFe.range,yC.range,EFe.range,TFe.range;function xC(i){return h1(s=>{s.setUTCDate(s.getUTCDate()-(s.getUTCDay()+7-i)%7),s.setUTCHours(0,0,0,0)},(s,u)=>{s.setUTCDate(s.getUTCDate()+u*7)},(s,u)=>(u-s)/Gpe)}const CFe=xC(0),iX=xC(1),nOt=xC(2),rOt=xC(3),oD=xC(4),iOt=xC(5),sOt=xC(6);CFe.range,iX.range,nOt.range,rOt.range,oD.range,iOt.range,sOt.range;const IF=h1(i=>{i.setDate(1),i.setHours(0,0,0,0)},(i,s)=>{i.setMonth(i.getMonth()+s)},(i,s)=>s.getMonth()-i.getMonth()+(s.getFullYear()-i.getFullYear())*12,i=>i.getMonth());IF.range,h1(i=>{i.setUTCDate(1),i.setUTCHours(0,0,0,0)},(i,s)=>{i.setUTCMonth(i.getUTCMonth()+s)},(i,s)=>s.getUTCMonth()-i.getUTCMonth()+(s.getUTCFullYear()-i.getUTCFullYear())*12,i=>i.getUTCMonth()).range;const x7=h1(i=>{i.setMonth(0,1),i.setHours(0,0,0,0)},(i,s)=>{i.setFullYear(i.getFullYear()+s)},(i,s)=>s.getFullYear()-i.getFullYear(),i=>i.getFullYear());x7.every=i=>!isFinite(i=Math.floor(i))||!(i>0)?null:h1(s=>{s.setFullYear(Math.floor(s.getFullYear()/i)*i),s.setMonth(0,1),s.setHours(0,0,0,0)},(s,u)=>{s.setFullYear(s.getFullYear()+u*i)}),x7.range;const kC=h1(i=>{i.setUTCMonth(0,1),i.setUTCHours(0,0,0,0)},(i,s)=>{i.setUTCFullYear(i.getUTCFullYear()+s)},(i,s)=>s.getUTCFullYear()-i.getUTCFullYear(),i=>i.getUTCFullYear());kC.every=i=>!isFinite(i=Math.floor(i))||!(i>0)?null:h1(s=>{s.setUTCFullYear(Math.floor(s.getUTCFullYear()/i)*i),s.setUTCMonth(0,1),s.setUTCHours(0,0,0,0)},(s,u)=>{s.setUTCFullYear(s.getUTCFullYear()+u*i)}),kC.range;function aOt(i,s,u,d,p,v){const b=[[b9,1,v7],[b9,5,5*v7],[b9,15,15*v7],[b9,30,30*v7],[v,1,Mv],[v,5,5*Mv],[v,15,15*Mv],[v,30,30*Mv],[p,1,w7],[p,3,3*w7],[p,6,6*w7],[p,12,12*w7],[d,1,y7],[d,2,2*y7],[u,1,Gpe],[s,1,yFe],[s,3,3*yFe],[i,1,Kpe]];function y(_,A,P){const R=A<_;R&&([_,A]=[A,_]);const F=P&&typeof P.range=="function"?P:T(_,A,P),j=F?F.range(_,+A+1):[];return R?j.reverse():j}function T(_,A,P){const R=Math.abs(A-_)/P,F=dpe(([,,ee])=>ee).right(b,R);if(F===b.length)return i.every(ppe(_/Kpe,A/Kpe,P));if(F===0)return aD.every(Math.max(ppe(_,A,P),1));const[j,K]=b[R/b[F-1][2]53)return null;"w"in Dt||(Dt.w=1),"Z"in Dt?(On=Xpe(OF(Dt.y,0,1)),ht=On.getUTCDay(),On=ht>4||ht===0?iX.ceil(On):iX(On),On=Wpe.offset(On,(Dt.V-1)*7),Dt.y=On.getUTCFullYear(),Dt.m=On.getUTCMonth(),Dt.d=On.getUTCDate()+(Dt.w+6)%7):(On=Ype(OF(Dt.y,0,1)),ht=On.getDay(),On=ht>4||ht===0?DF.ceil(On):DF(On),On=vC.offset(On,(Dt.V-1)*7),Dt.y=On.getFullYear(),Dt.m=On.getMonth(),Dt.d=On.getDate()+(Dt.w+6)%7)}else("W"in Dt||"U"in Dt)&&("w"in Dt||(Dt.w="u"in Dt?Dt.u%7:"W"in Dt?1:0),ht="Z"in Dt?Xpe(OF(Dt.y,0,1)).getUTCDay():Ype(OF(Dt.y,0,1)).getDay(),Dt.m=0,Dt.d="W"in Dt?(Dt.w+6)%7+Dt.W*7-(ht+5)%7:Dt.w+Dt.U*7-(ht+6)%7);return"Z"in Dt?(Dt.H+=Dt.Z/100|0,Dt.M+=Dt.Z%100,Xpe(Dt)):Ype(Dt)}}function de(xt,Pt,Qe,Dt){for(var kt=0,On=Pt.length,ht=Qe.length,zr,yt;kt=ht)return-1;if(zr=Pt.charCodeAt(kt++),zr===37){if(zr=Pt.charAt(kt++),yt=ae[zr in SFe?Pt.charAt(kt++):zr],!yt||(Dt=yt(xt,Qe,Dt))<0)return-1}else if(zr!=Qe.charCodeAt(Dt++))return-1}return Dt}function X(xt,Pt,Qe){var Dt=_.exec(Pt.slice(Qe));return Dt?(xt.p=A.get(Dt[0].toLowerCase()),Qe+Dt[0].length):-1}function ge(xt,Pt,Qe){var Dt=F.exec(Pt.slice(Qe));return Dt?(xt.w=j.get(Dt[0].toLowerCase()),Qe+Dt[0].length):-1}function W(xt,Pt,Qe){var Dt=P.exec(Pt.slice(Qe));return Dt?(xt.w=R.get(Dt[0].toLowerCase()),Qe+Dt[0].length):-1}function xe(xt,Pt,Qe){var Dt=ie.exec(Pt.slice(Qe));return Dt?(xt.m=oe.get(Dt[0].toLowerCase()),Qe+Dt[0].length):-1}function U(xt,Pt,Qe){var Dt=K.exec(Pt.slice(Qe));return Dt?(xt.m=ee.get(Dt[0].toLowerCase()),Qe+Dt[0].length):-1}function Fe(xt,Pt,Qe){return de(xt,s,Pt,Qe)}function Pe(xt,Pt,Qe){return de(xt,u,Pt,Qe)}function je(xt,Pt,Qe){return de(xt,d,Pt,Qe)}function Ie(xt){return b[xt.getDay()]}function Se(xt){return v[xt.getDay()]}function Ce(xt){return T[xt.getMonth()]}function ke(xt){return y[xt.getMonth()]}function Ke(xt){return p[+(xt.getHours()>=12)]}function Ft(xt){return 1+~~(xt.getMonth()/3)}function Ne(xt){return b[xt.getUTCDay()]}function gn(xt){return v[xt.getUTCDay()]}function _t(xt){return T[xt.getUTCMonth()]}function Et(xt){return y[xt.getUTCMonth()]}function Gt(xt){return p[+(xt.getUTCHours()>=12)]}function ln(xt){return 1+~~(xt.getUTCMonth()/3)}return{format:function(xt){var Pt=ne(xt+="",pe);return Pt.toString=function(){return xt},Pt},parse:function(xt){var Pt=se(xt+="",!1);return Pt.toString=function(){return xt},Pt},utcFormat:function(xt){var Pt=ne(xt+="",be);return Pt.toString=function(){return xt},Pt},utcParse:function(xt){var Pt=se(xt+="",!0);return Pt.toString=function(){return xt},Pt}}}var SFe={"-":"",_:" ",0:"0"},rd=/^\s*\d+/,lOt=/^%/,hOt=/[\\^$*+?|[\]().{}]/g;function mu(i,s,u){var d=i<0?"-":"",p=(d?-i:i)+"",v=p.length;return d+(v[s.toLowerCase(),u]))}function dOt(i,s,u){var d=rd.exec(s.slice(u,u+1));return d?(i.w=+d[0],u+d[0].length):-1}function gOt(i,s,u){var d=rd.exec(s.slice(u,u+1));return d?(i.u=+d[0],u+d[0].length):-1}function pOt(i,s,u){var d=rd.exec(s.slice(u,u+2));return d?(i.U=+d[0],u+d[0].length):-1}function bOt(i,s,u){var d=rd.exec(s.slice(u,u+2));return d?(i.V=+d[0],u+d[0].length):-1}function mOt(i,s,u){var d=rd.exec(s.slice(u,u+2));return d?(i.W=+d[0],u+d[0].length):-1}function _Fe(i,s,u){var d=rd.exec(s.slice(u,u+4));return d?(i.y=+d[0],u+d[0].length):-1}function AFe(i,s,u){var d=rd.exec(s.slice(u,u+2));return d?(i.y=+d[0]+(+d[0]>68?1900:2e3),u+d[0].length):-1}function vOt(i,s,u){var d=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(s.slice(u,u+6));return d?(i.Z=d[1]?0:-(d[2]+(d[3]||"00")),u+d[0].length):-1}function wOt(i,s,u){var d=rd.exec(s.slice(u,u+1));return d?(i.q=d[0]*3-3,u+d[0].length):-1}function yOt(i,s,u){var d=rd.exec(s.slice(u,u+2));return d?(i.m=d[0]-1,u+d[0].length):-1}function LFe(i,s,u){var d=rd.exec(s.slice(u,u+2));return d?(i.d=+d[0],u+d[0].length):-1}function xOt(i,s,u){var d=rd.exec(s.slice(u,u+3));return d?(i.m=0,i.d=+d[0],u+d[0].length):-1}function MFe(i,s,u){var d=rd.exec(s.slice(u,u+2));return d?(i.H=+d[0],u+d[0].length):-1}function kOt(i,s,u){var d=rd.exec(s.slice(u,u+2));return d?(i.M=+d[0],u+d[0].length):-1}function EOt(i,s,u){var d=rd.exec(s.slice(u,u+2));return d?(i.S=+d[0],u+d[0].length):-1}function TOt(i,s,u){var d=rd.exec(s.slice(u,u+3));return d?(i.L=+d[0],u+d[0].length):-1}function COt(i,s,u){var d=rd.exec(s.slice(u,u+6));return d?(i.L=Math.floor(d[0]/1e3),u+d[0].length):-1}function SOt(i,s,u){var d=lOt.exec(s.slice(u,u+1));return d?u+d[0].length:-1}function _Ot(i,s,u){var d=rd.exec(s.slice(u));return d?(i.Q=+d[0],u+d[0].length):-1}function AOt(i,s,u){var d=rd.exec(s.slice(u));return d?(i.s=+d[0],u+d[0].length):-1}function DFe(i,s){return mu(i.getDate(),s,2)}function LOt(i,s){return mu(i.getHours(),s,2)}function MOt(i,s){return mu(i.getHours()%12||12,s,2)}function DOt(i,s){return mu(1+vC.count(x7(i),i),s,3)}function IFe(i,s){return mu(i.getMilliseconds(),s,3)}function IOt(i,s){return IFe(i,s)+"000"}function OOt(i,s){return mu(i.getMonth()+1,s,2)}function NOt(i,s){return mu(i.getMinutes(),s,2)}function POt(i,s){return mu(i.getSeconds(),s,2)}function BOt(i){var s=i.getDay();return s===0?7:s}function FOt(i,s){return mu(MF.count(x7(i)-1,i),s,2)}function OFe(i){var s=i.getDay();return s>=4||s===0?yC(i):yC.ceil(i)}function ROt(i,s){return i=OFe(i),mu(yC.count(x7(i),i)+(x7(i).getDay()===4),s,2)}function jOt(i){return i.getDay()}function $Ot(i,s){return mu(DF.count(x7(i)-1,i),s,2)}function zOt(i,s){return mu(i.getFullYear()%100,s,2)}function qOt(i,s){return i=OFe(i),mu(i.getFullYear()%100,s,2)}function HOt(i,s){return mu(i.getFullYear()%1e4,s,4)}function VOt(i,s){var u=i.getDay();return i=u>=4||u===0?yC(i):yC.ceil(i),mu(i.getFullYear()%1e4,s,4)}function UOt(i){var s=i.getTimezoneOffset();return(s>0?"-":(s*=-1,"+"))+mu(s/60|0,"0",2)+mu(s%60,"0",2)}function NFe(i,s){return mu(i.getUTCDate(),s,2)}function GOt(i,s){return mu(i.getUTCHours(),s,2)}function KOt(i,s){return mu(i.getUTCHours()%12||12,s,2)}function WOt(i,s){return mu(1+Wpe.count(kC(i),i),s,3)}function PFe(i,s){return mu(i.getUTCMilliseconds(),s,3)}function YOt(i,s){return PFe(i,s)+"000"}function XOt(i,s){return mu(i.getUTCMonth()+1,s,2)}function QOt(i,s){return mu(i.getUTCMinutes(),s,2)}function JOt(i,s){return mu(i.getUTCSeconds(),s,2)}function ZOt(i){var s=i.getUTCDay();return s===0?7:s}function eNt(i,s){return mu(CFe.count(kC(i)-1,i),s,2)}function BFe(i){var s=i.getUTCDay();return s>=4||s===0?oD(i):oD.ceil(i)}function tNt(i,s){return i=BFe(i),mu(oD.count(kC(i),i)+(kC(i).getUTCDay()===4),s,2)}function nNt(i){return i.getUTCDay()}function rNt(i,s){return mu(iX.count(kC(i)-1,i),s,2)}function iNt(i,s){return mu(i.getUTCFullYear()%100,s,2)}function sNt(i,s){return i=BFe(i),mu(i.getUTCFullYear()%100,s,2)}function aNt(i,s){return mu(i.getUTCFullYear()%1e4,s,4)}function oNt(i,s){var u=i.getUTCDay();return i=u>=4||u===0?oD(i):oD.ceil(i),mu(i.getUTCFullYear()%1e4,s,4)}function cNt(){return"+0000"}function FFe(){return"%"}function RFe(i){return+i}function jFe(i){return Math.floor(+i/1e3)}var cD,sX;uNt({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function uNt(i){return cD=uOt(i),sX=cD.format,cD.parse,cD.utcFormat,cD.utcParse,cD}function lNt(i){return new Date(i)}function hNt(i){return i instanceof Date?+i:+new Date(+i)}function $Fe(i,s,u,d,p,v,b,y,T,_){var A=wFe(),P=A.invert,R=A.domain,F=_(".%L"),j=_(":%S"),K=_("%I:%M"),ee=_("%I %p"),ie=_("%a %d"),oe=_("%b %d"),pe=_("%B"),be=_("%Y");function ae(ne){return(T(ne)1?0:i<-1?BF:Math.acos(i)}function HFe(i){return i>=1?aX:i<=-1?-aX:Math.asin(i)}function VFe(i){let s=3;return i.digits=function(u){if(!arguments.length)return s;if(u==null)s=null;else{const d=Math.floor(u);if(!(d>=0))throw new RangeError(`invalid digits: ${u}`);s=d}return i},()=>new DIt(s)}function bNt(i){return i.innerRadius}function mNt(i){return i.outerRadius}function vNt(i){return i.startAngle}function wNt(i){return i.endAngle}function yNt(i){return i&&i.padAngle}function xNt(i,s,u,d,p,v,b,y){var T=u-i,_=d-s,A=b-p,P=y-v,R=P*T-A*_;if(!(R*RFe*Fe+Pe*Pe&&(de=ge,X=W),{cx:de,cy:X,x01:-A,y01:-P,x11:de*(p/ae-1),y11:X*(p/ae-1)}}function lD(){var i=bNt,s=mNt,u=Wf(0),d=null,p=vNt,v=wNt,b=yNt,y=null,T=VFe(_);function _(){var A,P,R=+i.apply(this,arguments),F=+s.apply(this,arguments),j=p.apply(this,arguments)-aX,K=v.apply(this,arguments)-aX,ee=qFe(K-j),ie=K>j;if(y||(y=A=T()),FIg))y.moveTo(0,0);else if(ee>oX-Ig)y.moveTo(F*EC(j),F*z4(j)),y.arc(0,0,F,j,K,!ie),R>Ig&&(y.moveTo(R*EC(K),R*z4(K)),y.arc(0,0,R,K,j,ie));else{var oe=j,pe=K,be=j,ae=K,ne=ee,se=ee,de=b.apply(this,arguments)/2,X=de>Ig&&(d?+d.apply(this,arguments):uD(R*R+F*F)),ge=Qpe(qFe(F-R)/2,+u.apply(this,arguments)),W=ge,xe=ge,U,Fe;if(X>Ig){var Pe=HFe(X/R*z4(de)),je=HFe(X/F*z4(de));(ne-=Pe*2)>Ig?(Pe*=ie?1:-1,be+=Pe,ae-=Pe):(ne=0,be=ae=(j+K)/2),(se-=je*2)>Ig?(je*=ie?1:-1,oe+=je,pe-=je):(se=0,oe=pe=(j+K)/2)}var Ie=F*EC(oe),Se=F*z4(oe),Ce=R*EC(ae),ke=R*z4(ae);if(ge>Ig){var Ke=F*EC(pe),Ft=F*z4(pe),Ne=R*EC(be),gn=R*z4(be),_t;if(eeIg?xe>Ig?(U=cX(Ne,gn,Ie,Se,F,xe,ie),Fe=cX(Ke,Ft,Ce,ke,F,xe,ie),y.moveTo(U.cx+U.x01,U.cy+U.y01),xeIg)||!(ne>Ig)?y.lineTo(Ce,ke):W>Ig?(U=cX(Ce,ke,Ke,Ft,R,-W,ie),Fe=cX(Ie,Se,Ne,gn,R,-W,ie),y.lineTo(U.cx+U.x01,U.cy+U.y01),Wi?1:s>=i?0:NaN}function CNt(i){return i}function SNt(){var i=CNt,s=TNt,u=null,d=Wf(0),p=Wf(oX),v=Wf(0);function b(y){var T,_=(y=UFe(y)).length,A,P,R=0,F=new Array(_),j=new Array(_),K=+d.apply(this,arguments),ee=Math.min(oX,Math.max(-oX,p.apply(this,arguments)-K)),ie,oe=Math.min(Math.abs(ee)/_,v.apply(this,arguments)),pe=oe*(ee<0?-1:1),be;for(T=0;T<_;++T)(be=j[F[T]=T]=+i(y[T],T,y))>0&&(R+=be);for(s!=null?F.sort(function(ae,ne){return s(j[ae],j[ne])}):u!=null&&F.sort(function(ae,ne){return u(y[ae],y[ne])}),T=0,P=R?(ee-_*pe)/R:0;T<_;++T,K=ie)A=F[T],be=j[A],ie=K+(be>0?be*P:0)+pe,j[A]={data:y[A],index:T,value:be,startAngle:K,endAngle:ie,padAngle:oe};return j}return b.value=function(y){return arguments.length?(i=typeof y=="function"?y:Wf(+y),b):i},b.sortValues=function(y){return arguments.length?(s=y,u=null,b):s},b.sort=function(y){return arguments.length?(u=y,s=null,b):u},b.startAngle=function(y){return arguments.length?(d=typeof y=="function"?y:Wf(+y),b):d},b.endAngle=function(y){return arguments.length?(p=typeof y=="function"?y:Wf(+y),b):p},b.padAngle=function(y){return arguments.length?(v=typeof y=="function"?y:Wf(+y),b):v},b}class KFe{constructor(s,u){this._context=s,this._x=u}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(s,u){switch(s=+s,u=+u,this._point){case 0:{this._point=1,this._line?this._context.lineTo(s,u):this._context.moveTo(s,u);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+s)/2,this._y0,this._x0,u,s,u):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+u)/2,s,this._y0,s,u);break}}this._x0=s,this._y0=u}}function _Nt(i){return new KFe(i,!0)}function ANt(i){return new KFe(i,!1)}function m9(){}function uX(i,s,u){i._context.bezierCurveTo((2*i._x0+i._x1)/3,(2*i._y0+i._y1)/3,(i._x0+2*i._x1)/3,(i._y0+2*i._y1)/3,(i._x0+4*i._x1+s)/6,(i._y0+4*i._y1+u)/6)}function lX(i){this._context=i}lX.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:uX(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(i,s){switch(i=+i,s=+s,this._point){case 0:this._point=1,this._line?this._context.lineTo(i,s):this._context.moveTo(i,s);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:uX(this,i,s);break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=s}};function FF(i){return new lX(i)}function WFe(i){this._context=i}WFe.prototype={areaStart:m9,areaEnd:m9,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(i,s){switch(i=+i,s=+s,this._point){case 0:this._point=1,this._x2=i,this._y2=s;break;case 1:this._point=2,this._x3=i,this._y3=s;break;case 2:this._point=3,this._x4=i,this._y4=s,this._context.moveTo((this._x0+4*this._x1+i)/6,(this._y0+4*this._y1+s)/6);break;default:uX(this,i,s);break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=s}};function LNt(i){return new WFe(i)}function YFe(i){this._context=i}YFe.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(i,s){switch(i=+i,s=+s,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var u=(this._x0+4*this._x1+i)/6,d=(this._y0+4*this._y1+s)/6;this._line?this._context.lineTo(u,d):this._context.moveTo(u,d);break;case 3:this._point=4;default:uX(this,i,s);break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=s}};function MNt(i){return new YFe(i)}function XFe(i,s){this._basis=new lX(i),this._beta=s}XFe.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var i=this._x,s=this._y,u=i.length-1;if(u>0)for(var d=i[0],p=s[0],v=i[u]-d,b=s[u]-p,y=-1,T;++y<=u;)T=y/u,this._basis.point(this._beta*i[y]+(1-this._beta)*(d+T*v),this._beta*s[y]+(1-this._beta)*(p+T*b));this._x=this._y=null,this._basis.lineEnd()},point:function(i,s){this._x.push(+i),this._y.push(+s)}};const DNt=function i(s){function u(d){return s===1?new lX(d):new XFe(d,s)}return u.beta=function(d){return i(+d)},u}(.85);function hX(i,s,u){i._context.bezierCurveTo(i._x1+i._k*(i._x2-i._x0),i._y1+i._k*(i._y2-i._y0),i._x2+i._k*(i._x1-s),i._y2+i._k*(i._y1-u),i._x2,i._y2)}function Jpe(i,s){this._context=i,this._k=(1-s)/6}Jpe.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:hX(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(i,s){switch(i=+i,s=+s,this._point){case 0:this._point=1,this._line?this._context.lineTo(i,s):this._context.moveTo(i,s);break;case 1:this._point=2,this._x1=i,this._y1=s;break;case 2:this._point=3;default:hX(this,i,s);break}this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=s}};const INt=function i(s){function u(d){return new Jpe(d,s)}return u.tension=function(d){return i(+d)},u}(0);function Zpe(i,s){this._context=i,this._k=(1-s)/6}Zpe.prototype={areaStart:m9,areaEnd:m9,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(i,s){switch(i=+i,s=+s,this._point){case 0:this._point=1,this._x3=i,this._y3=s;break;case 1:this._point=2,this._context.moveTo(this._x4=i,this._y4=s);break;case 2:this._point=3,this._x5=i,this._y5=s;break;default:hX(this,i,s);break}this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=s}};const ONt=function i(s){function u(d){return new Zpe(d,s)}return u.tension=function(d){return i(+d)},u}(0);function e2e(i,s){this._context=i,this._k=(1-s)/6}e2e.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(i,s){switch(i=+i,s=+s,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:hX(this,i,s);break}this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=s}};const NNt=function i(s){function u(d){return new e2e(d,s)}return u.tension=function(d){return i(+d)},u}(0);function t2e(i,s,u){var d=i._x1,p=i._y1,v=i._x2,b=i._y2;if(i._l01_a>Ig){var y=2*i._l01_2a+3*i._l01_a*i._l12_a+i._l12_2a,T=3*i._l01_a*(i._l01_a+i._l12_a);d=(d*y-i._x0*i._l12_2a+i._x2*i._l01_2a)/T,p=(p*y-i._y0*i._l12_2a+i._y2*i._l01_2a)/T}if(i._l23_a>Ig){var _=2*i._l23_2a+3*i._l23_a*i._l12_a+i._l12_2a,A=3*i._l23_a*(i._l23_a+i._l12_a);v=(v*_+i._x1*i._l23_2a-s*i._l12_2a)/A,b=(b*_+i._y1*i._l23_2a-u*i._l12_2a)/A}i._context.bezierCurveTo(d,p,v,b,i._x2,i._y2)}function QFe(i,s){this._context=i,this._alpha=s}QFe.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(i,s){if(i=+i,s=+s,this._point){var u=this._x2-i,d=this._y2-s;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(u*u+d*d,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(i,s):this._context.moveTo(i,s);break;case 1:this._point=2;break;case 2:this._point=3;default:t2e(this,i,s);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=s}};const PNt=function i(s){function u(d){return s?new QFe(d,s):new Jpe(d,0)}return u.alpha=function(d){return i(+d)},u}(.5);function JFe(i,s){this._context=i,this._alpha=s}JFe.prototype={areaStart:m9,areaEnd:m9,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(i,s){if(i=+i,s=+s,this._point){var u=this._x2-i,d=this._y2-s;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(u*u+d*d,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=i,this._y3=s;break;case 1:this._point=2,this._context.moveTo(this._x4=i,this._y4=s);break;case 2:this._point=3,this._x5=i,this._y5=s;break;default:t2e(this,i,s);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=s}};const BNt=function i(s){function u(d){return s?new JFe(d,s):new Zpe(d,0)}return u.alpha=function(d){return i(+d)},u}(.5);function ZFe(i,s){this._context=i,this._alpha=s}ZFe.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(i,s){if(i=+i,s=+s,this._point){var u=this._x2-i,d=this._y2-s;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(u*u+d*d,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:t2e(this,i,s);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=s}};const FNt=function i(s){function u(d){return s?new ZFe(d,s):new e2e(d,0)}return u.alpha=function(d){return i(+d)},u}(.5);function eRe(i){this._context=i}eRe.prototype={areaStart:m9,areaEnd:m9,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(i,s){i=+i,s=+s,this._point?this._context.lineTo(i,s):(this._point=1,this._context.moveTo(i,s))}};function RNt(i){return new eRe(i)}function tRe(i){return i<0?-1:1}function nRe(i,s,u){var d=i._x1-i._x0,p=s-i._x1,v=(i._y1-i._y0)/(d||p<0&&-0),b=(u-i._y1)/(p||d<0&&-0),y=(v*p+b*d)/(d+p);return(tRe(v)+tRe(b))*Math.min(Math.abs(v),Math.abs(b),.5*Math.abs(y))||0}function rRe(i,s){var u=i._x1-i._x0;return u?(3*(i._y1-i._y0)/u-s)/2:s}function n2e(i,s,u){var d=i._x0,p=i._y0,v=i._x1,b=i._y1,y=(v-d)/3;i._context.bezierCurveTo(d+y,p+y*s,v-y,b-y*u,v,b)}function fX(i){this._context=i}fX.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:n2e(this,this._t0,rRe(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(i,s){var u=NaN;if(i=+i,s=+s,!(i===this._x1&&s===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(i,s):this._context.moveTo(i,s);break;case 1:this._point=2;break;case 2:this._point=3,n2e(this,rRe(this,u=nRe(this,i,s)),u);break;default:n2e(this,this._t0,u=nRe(this,i,s));break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=s,this._t0=u}}};function iRe(i){this._context=new sRe(i)}(iRe.prototype=Object.create(fX.prototype)).point=function(i,s){fX.prototype.point.call(this,s,i)};function sRe(i){this._context=i}sRe.prototype={moveTo:function(i,s){this._context.moveTo(s,i)},closePath:function(){this._context.closePath()},lineTo:function(i,s){this._context.lineTo(s,i)},bezierCurveTo:function(i,s,u,d,p,v){this._context.bezierCurveTo(s,i,d,u,v,p)}};function jNt(i){return new fX(i)}function $Nt(i){return new iRe(i)}function aRe(i){this._context=i}aRe.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var i=this._x,s=this._y,u=i.length;if(u)if(this._line?this._context.lineTo(i[0],s[0]):this._context.moveTo(i[0],s[0]),u===2)this._context.lineTo(i[1],s[1]);else for(var d=oRe(i),p=oRe(s),v=0,b=1;b=0;--s)p[s]=(b[s]-p[s+1])/v[s];for(v[u-1]=(i[u]+p[u-1])/2,s=0;s=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(i,s){switch(i=+i,s=+s,this._point){case 0:this._point=1,this._line?this._context.lineTo(i,s):this._context.moveTo(i,s);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,s),this._context.lineTo(i,s);else{var u=this._x*(1-this._t)+i*this._t;this._context.lineTo(u,this._y),this._context.lineTo(u,s)}break}}this._x=i,this._y=s}};function qNt(i){return new dX(i,.5)}function HNt(i){return new dX(i,0)}function VNt(i){return new dX(i,1)}function RF(i,s,u){this.k=i,this.x=s,this.y=u}RF.prototype={constructor:RF,scale:function(i){return i===1?this:new RF(this.k*i,this.x,this.y)},translate:function(i,s){return i===0&s===0?this:new RF(this.k,this.x+this.k*i,this.y+this.k*s)},apply:function(i){return[i[0]*this.k+this.x,i[1]*this.k+this.y]},applyX:function(i){return i*this.k+this.x},applyY:function(i){return i*this.k+this.y},invert:function(i){return[(i[0]-this.x)/this.k,(i[1]-this.y)/this.k]},invertX:function(i){return(i-this.x)/this.k},invertY:function(i){return(i-this.y)/this.k},rescaleX:function(i){return i.copy().domain(i.range().map(this.invertX,this).map(i.invert,i))},rescaleY:function(i){return i.copy().domain(i.range().map(this.invertY,this).map(i.invert,i))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}},RF.prototype;/*! @license DOMPurify 3.0.9 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.9/LICENSE */const{entries:cRe,setPrototypeOf:uRe,isFrozen:UNt,getPrototypeOf:GNt,getOwnPropertyDescriptor:KNt}=Object;let{freeze:Ep,seal:D3,create:lRe}=Object,{apply:r2e,construct:i2e}=typeof Reflect<"u"&&Reflect;Ep||(Ep=function(s){return s}),D3||(D3=function(s){return s}),r2e||(r2e=function(s,u,d){return s.apply(u,d)}),i2e||(i2e=function(s,u){return new s(...u)});const gX=sm(Array.prototype.forEach),hRe=sm(Array.prototype.pop),jF=sm(Array.prototype.push),pX=sm(String.prototype.toLowerCase),s2e=sm(String.prototype.toString),WNt=sm(String.prototype.match),$F=sm(String.prototype.replace),YNt=sm(String.prototype.indexOf),XNt=sm(String.prototype.trim),I3=sm(Object.prototype.hasOwnProperty),im=sm(RegExp.prototype.test),zF=QNt(TypeError);function sm(i){return function(s){for(var u=arguments.length,d=new Array(u>1?u-1:0),p=1;p2&&arguments[2]!==void 0?arguments[2]:pX;uRe&&uRe(i,null);let d=s.length;for(;d--;){let p=s[d];if(typeof p=="string"){const v=u(p);v!==p&&(UNt(s)||(s[d]=v),p=v)}i[p]=!0}return i}function JNt(i){for(let s=0;s/gm),rPt=D3(/\${[\w\W]*}/gm),iPt=D3(/^data-[\-\w.\u00B7-\uFFFF]/),sPt=D3(/^aria-[\-\w]+$/),bRe=D3(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),aPt=D3(/^(?:\w+script|data):/i),oPt=D3(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),mRe=D3(/^html$/i);var vRe=Object.freeze({__proto__:null,MUSTACHE_EXPR:tPt,ERB_EXPR:nPt,TMPLIT_EXPR:rPt,DATA_ATTR:iPt,ARIA_ATTR:sPt,IS_ALLOWED_URI:bRe,IS_SCRIPT_OR_DATA:aPt,ATTR_WHITESPACE:oPt,DOCTYPE_NAME:mRe});const cPt=function(){return typeof window>"u"?null:window},uPt=function(s,u){if(typeof s!="object"||typeof s.createPolicy!="function")return null;let d=null;const p="data-tt-policy-suffix";u&&u.hasAttribute(p)&&(d=u.getAttribute(p));const v="dompurify"+(d?"#"+d:"");try{return s.createPolicy(v,{createHTML(b){return b},createScriptURL(b){return b}})}catch{return console.warn("TrustedTypes policy "+v+" could not be created."),null}};function wRe(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:cPt();const s=as=>wRe(as);if(s.version="3.0.9",s.removed=[],!i||!i.document||i.document.nodeType!==9)return s.isSupported=!1,s;let{document:u}=i;const d=u,p=d.currentScript,{DocumentFragment:v,HTMLTemplateElement:b,Node:y,Element:T,NodeFilter:_,NamedNodeMap:A=i.NamedNodeMap||i.MozNamedAttrMap,HTMLFormElement:P,DOMParser:R,trustedTypes:F}=i,j=T.prototype,K=bX(j,"cloneNode"),ee=bX(j,"nextSibling"),ie=bX(j,"childNodes"),oe=bX(j,"parentNode");if(typeof b=="function"){const as=u.createElement("template");as.content&&as.content.ownerDocument&&(u=as.content.ownerDocument)}let pe,be="";const{implementation:ae,createNodeIterator:ne,createDocumentFragment:se,getElementsByTagName:de}=u,{importNode:X}=d;let ge={};s.isSupported=typeof cRe=="function"&&typeof oe=="function"&&ae&&ae.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:W,ERB_EXPR:xe,TMPLIT_EXPR:U,DATA_ATTR:Fe,ARIA_ATTR:Pe,IS_SCRIPT_OR_DATA:je,ATTR_WHITESPACE:Ie}=vRe;let{IS_ALLOWED_URI:Se}=vRe,Ce=null;const ke=Cc({},[...fRe,...a2e,...o2e,...c2e,...dRe]);let Ke=null;const Ft=Cc({},[...gRe,...u2e,...pRe,...mX]);let Ne=Object.seal(lRe(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),gn=null,_t=null,Et=!0,Gt=!0,ln=!1,xt=!0,Pt=!1,Qe=!1,Dt=!1,kt=!1,On=!1,ht=!1,zr=!1,yt=!0,ji=!1;const xi="user-content-";let Ma=!0,zs=!1,ao={},Tr=null;const Fn=Cc({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let qn=null;const Un=Cc({},["audio","video","img","source","image","track"]);let At=null;const wt=Cc({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),on="http://www.w3.org/1998/Math/MathML",fn="http://www.w3.org/2000/svg",An="http://www.w3.org/1999/xhtml";let oo=An,jo=!1,$o=null;const Pa=Cc({},[on,fn,An],s2e);let wo=null;const _s=["application/xhtml+xml","text/html"],tl="text/html";let da=null,j0=null;const pm=u.createElement("form"),Ml=function(wn){return wn instanceof RegExp||wn instanceof Function},Xc=function(){let wn=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(j0&&j0===wn)){if((!wn||typeof wn!="object")&&(wn={}),wn=TC(wn),wo=_s.indexOf(wn.PARSER_MEDIA_TYPE)===-1?tl:wn.PARSER_MEDIA_TYPE,da=wo==="application/xhtml+xml"?s2e:pX,Ce=I3(wn,"ALLOWED_TAGS")?Cc({},wn.ALLOWED_TAGS,da):ke,Ke=I3(wn,"ALLOWED_ATTR")?Cc({},wn.ALLOWED_ATTR,da):Ft,$o=I3(wn,"ALLOWED_NAMESPACES")?Cc({},wn.ALLOWED_NAMESPACES,s2e):Pa,At=I3(wn,"ADD_URI_SAFE_ATTR")?Cc(TC(wt),wn.ADD_URI_SAFE_ATTR,da):wt,qn=I3(wn,"ADD_DATA_URI_TAGS")?Cc(TC(Un),wn.ADD_DATA_URI_TAGS,da):Un,Tr=I3(wn,"FORBID_CONTENTS")?Cc({},wn.FORBID_CONTENTS,da):Fn,gn=I3(wn,"FORBID_TAGS")?Cc({},wn.FORBID_TAGS,da):{},_t=I3(wn,"FORBID_ATTR")?Cc({},wn.FORBID_ATTR,da):{},ao=I3(wn,"USE_PROFILES")?wn.USE_PROFILES:!1,Et=wn.ALLOW_ARIA_ATTR!==!1,Gt=wn.ALLOW_DATA_ATTR!==!1,ln=wn.ALLOW_UNKNOWN_PROTOCOLS||!1,xt=wn.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Pt=wn.SAFE_FOR_TEMPLATES||!1,Qe=wn.WHOLE_DOCUMENT||!1,On=wn.RETURN_DOM||!1,ht=wn.RETURN_DOM_FRAGMENT||!1,zr=wn.RETURN_TRUSTED_TYPE||!1,kt=wn.FORCE_BODY||!1,yt=wn.SANITIZE_DOM!==!1,ji=wn.SANITIZE_NAMED_PROPS||!1,Ma=wn.KEEP_CONTENT!==!1,zs=wn.IN_PLACE||!1,Se=wn.ALLOWED_URI_REGEXP||bRe,oo=wn.NAMESPACE||An,Ne=wn.CUSTOM_ELEMENT_HANDLING||{},wn.CUSTOM_ELEMENT_HANDLING&&Ml(wn.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Ne.tagNameCheck=wn.CUSTOM_ELEMENT_HANDLING.tagNameCheck),wn.CUSTOM_ELEMENT_HANDLING&&Ml(wn.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Ne.attributeNameCheck=wn.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),wn.CUSTOM_ELEMENT_HANDLING&&typeof wn.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(Ne.allowCustomizedBuiltInElements=wn.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Pt&&(Gt=!1),ht&&(On=!0),ao&&(Ce=Cc({},dRe),Ke=[],ao.html===!0&&(Cc(Ce,fRe),Cc(Ke,gRe)),ao.svg===!0&&(Cc(Ce,a2e),Cc(Ke,u2e),Cc(Ke,mX)),ao.svgFilters===!0&&(Cc(Ce,o2e),Cc(Ke,u2e),Cc(Ke,mX)),ao.mathMl===!0&&(Cc(Ce,c2e),Cc(Ke,pRe),Cc(Ke,mX))),wn.ADD_TAGS&&(Ce===ke&&(Ce=TC(Ce)),Cc(Ce,wn.ADD_TAGS,da)),wn.ADD_ATTR&&(Ke===Ft&&(Ke=TC(Ke)),Cc(Ke,wn.ADD_ATTR,da)),wn.ADD_URI_SAFE_ATTR&&Cc(At,wn.ADD_URI_SAFE_ATTR,da),wn.FORBID_CONTENTS&&(Tr===Fn&&(Tr=TC(Tr)),Cc(Tr,wn.FORBID_CONTENTS,da)),Ma&&(Ce["#text"]=!0),Qe&&Cc(Ce,["html","head","body"]),Ce.table&&(Cc(Ce,["tbody"]),delete gn.tbody),wn.TRUSTED_TYPES_POLICY){if(typeof wn.TRUSTED_TYPES_POLICY.createHTML!="function")throw zF('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof wn.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw zF('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');pe=wn.TRUSTED_TYPES_POLICY,be=pe.createHTML("")}else pe===void 0&&(pe=uPt(F,p)),pe!==null&&typeof be=="string"&&(be=pe.createHTML(""));Ep&&Ep(wn),j0=wn}},Bc=Cc({},["mi","mo","mn","ms","mtext"]),ja=Cc({},["foreignobject","desc","title","annotation-xml"]),Ou=Cc({},["title","style","font","a","script"]),Sa=Cc({},[...a2e,...o2e,...ZNt]),Po=Cc({},[...c2e,...ePt]),Fc=function(wn){let Zr=oe(wn);(!Zr||!Zr.tagName)&&(Zr={namespaceURI:oo,tagName:"template"});const Zi=pX(wn.tagName),nu=pX(Zr.tagName);return $o[wn.namespaceURI]?wn.namespaceURI===fn?Zr.namespaceURI===An?Zi==="svg":Zr.namespaceURI===on?Zi==="svg"&&(nu==="annotation-xml"||Bc[nu]):!!Sa[Zi]:wn.namespaceURI===on?Zr.namespaceURI===An?Zi==="math":Zr.namespaceURI===fn?Zi==="math"&&ja[nu]:!!Po[Zi]:wn.namespaceURI===An?Zr.namespaceURI===fn&&!ja[nu]||Zr.namespaceURI===on&&!Bc[nu]?!1:!Po[Zi]&&(Ou[Zi]||!Sa[Zi]):!!(wo==="application/xhtml+xml"&&$o[wn.namespaceURI]):!1},xa=function(wn){jF(s.removed,{element:wn});try{wn.parentNode.removeChild(wn)}catch{wn.remove()}},Ba=function(wn,Zr){try{jF(s.removed,{attribute:Zr.getAttributeNode(wn),from:Zr})}catch{jF(s.removed,{attribute:null,from:Zr})}if(Zr.removeAttribute(wn),wn==="is"&&!Ke[wn])if(On||ht)try{xa(Zr)}catch{}else try{Zr.setAttribute(wn,"")}catch{}},ga=function(wn){let Zr=null,Zi=null;if(kt)wn=""+wn;else{const Dl=WNt(wn,/^[\r\n\t ]+/);Zi=Dl&&Dl[0]}wo==="application/xhtml+xml"&&oo===An&&(wn=''+wn+"");const nu=pe?pe.createHTML(wn):wn;if(oo===An)try{Zr=new R().parseFromString(nu,wo)}catch{}if(!Zr||!Zr.documentElement){Zr=ae.createDocument(oo,"template",null);try{Zr.documentElement.innerHTML=jo?be:nu}catch{}}const vu=Zr.body||Zr.documentElement;return wn&&Zi&&vu.insertBefore(u.createTextNode(Zi),vu.childNodes[0]||null),oo===An?de.call(Zr,Qe?"html":"body")[0]:Qe?Zr.documentElement:vu},kh=function(wn){return ne.call(wn.ownerDocument||wn,wn,_.SHOW_ELEMENT|_.SHOW_COMMENT|_.SHOW_TEXT,null)},lu=function(wn){return wn instanceof P&&(typeof wn.nodeName!="string"||typeof wn.textContent!="string"||typeof wn.removeChild!="function"||!(wn.attributes instanceof A)||typeof wn.removeAttribute!="function"||typeof wn.setAttribute!="function"||typeof wn.namespaceURI!="string"||typeof wn.insertBefore!="function"||typeof wn.hasChildNodes!="function")},o5=function(wn){return typeof y=="function"&&wn instanceof y},Wh=function(wn,Zr,Zi){ge[wn]&&gX(ge[wn],nu=>{nu.call(s,Zr,Zi,j0)})},od=function(wn){let Zr=null;if(Wh("beforeSanitizeElements",wn,null),lu(wn))return xa(wn),!0;const Zi=da(wn.nodeName);if(Wh("uponSanitizeElement",wn,{tagName:Zi,allowedTags:Ce}),wn.hasChildNodes()&&!o5(wn.firstElementChild)&&im(/<[/\w]/g,wn.innerHTML)&&im(/<[/\w]/g,wn.textContent))return xa(wn),!0;if(!Ce[Zi]||gn[Zi]){if(!gn[Zi]&&cd(Zi)&&(Ne.tagNameCheck instanceof RegExp&&im(Ne.tagNameCheck,Zi)||Ne.tagNameCheck instanceof Function&&Ne.tagNameCheck(Zi)))return!1;if(Ma&&!Tr[Zi]){const nu=oe(wn)||wn.parentNode,vu=ie(wn)||wn.childNodes;if(vu&&nu){const Dl=vu.length;for(let Yh=Dl-1;Yh>=0;--Yh)nu.insertBefore(K(vu[Yh],!0),ee(wn))}}return xa(wn),!0}return wn instanceof T&&!Fc(wn)||(Zi==="noscript"||Zi==="noembed"||Zi==="noframes")&&im(/<\/no(script|embed|frames)/i,wn.innerHTML)?(xa(wn),!0):(Pt&&wn.nodeType===3&&(Zr=wn.textContent,gX([W,xe,U],nu=>{Zr=$F(Zr,nu," ")}),wn.textContent!==Zr&&(jF(s.removed,{element:wn.cloneNode()}),wn.textContent=Zr)),Wh("afterSanitizeElements",wn,null),!1)},Gd=function(wn,Zr,Zi){if(yt&&(Zr==="id"||Zr==="name")&&(Zi in u||Zi in pm))return!1;if(!(Gt&&!_t[Zr]&&im(Fe,Zr))){if(!(Et&&im(Pe,Zr))){if(!Ke[Zr]||_t[Zr]){if(!(cd(wn)&&(Ne.tagNameCheck instanceof RegExp&&im(Ne.tagNameCheck,wn)||Ne.tagNameCheck instanceof Function&&Ne.tagNameCheck(wn))&&(Ne.attributeNameCheck instanceof RegExp&&im(Ne.attributeNameCheck,Zr)||Ne.attributeNameCheck instanceof Function&&Ne.attributeNameCheck(Zr))||Zr==="is"&&Ne.allowCustomizedBuiltInElements&&(Ne.tagNameCheck instanceof RegExp&&im(Ne.tagNameCheck,Zi)||Ne.tagNameCheck instanceof Function&&Ne.tagNameCheck(Zi))))return!1}else if(!At[Zr]){if(!im(Se,$F(Zi,Ie,""))){if(!((Zr==="src"||Zr==="xlink:href"||Zr==="href")&&wn!=="script"&&YNt(Zi,"data:")===0&&qn[wn])){if(!(ln&&!im(je,$F(Zi,Ie,"")))){if(Zi)return!1}}}}}}return!0},cd=function(wn){return wn!=="annotation-xml"&&wn.indexOf("-")>0},Kd=function(wn){Wh("beforeSanitizeAttributes",wn,null);const{attributes:Zr}=wn;if(!Zr)return;const Zi={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Ke};let nu=Zr.length;for(;nu--;){const vu=Zr[nu],{name:Dl,namespaceURI:Yh,value:w1}=vu,$0=da(Dl);let Wi=Dl==="value"?w1:XNt(w1);if(Zi.attrName=$0,Zi.attrValue=Wi,Zi.keepAttr=!0,Zi.forceKeepAttr=void 0,Wh("uponSanitizeAttribute",wn,Zi),Wi=Zi.attrValue,Zi.forceKeepAttr||(Ba(Dl,wn),!Zi.keepAttr))continue;if(!xt&&im(/\/>/i,Wi)){Ba(Dl,wn);continue}Pt&&gX([W,xe,U],Qa=>{Wi=$F(Wi,Qa," ")});const Bs=da(wn.nodeName);if(Gd(Bs,$0,Wi)){if(ji&&($0==="id"||$0==="name")&&(Ba(Dl,wn),Wi=xi+Wi),pe&&typeof F=="object"&&typeof F.getAttributeType=="function"&&!Yh)switch(F.getAttributeType(Bs,$0)){case"TrustedHTML":{Wi=pe.createHTML(Wi);break}case"TrustedScriptURL":{Wi=pe.createScriptURL(Wi);break}}try{Yh?wn.setAttributeNS(Yh,Dl,Wi):wn.setAttribute(Dl,Wi),hRe(s.removed)}catch{}}}Wh("afterSanitizeAttributes",wn,null)},$g=function as(wn){let Zr=null;const Zi=kh(wn);for(Wh("beforeSanitizeShadowDOM",wn,null);Zr=Zi.nextNode();)Wh("uponSanitizeShadowNode",Zr,null),!od(Zr)&&(Zr.content instanceof v&&as(Zr.content),Kd(Zr));Wh("afterSanitizeShadowDOM",wn,null)};return s.sanitize=function(as){let wn=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Zr=null,Zi=null,nu=null,vu=null;if(jo=!as,jo&&(as=""),typeof as!="string"&&!o5(as))if(typeof as.toString=="function"){if(as=as.toString(),typeof as!="string")throw zF("dirty is not a string, aborting")}else throw zF("toString is not a function");if(!s.isSupported)return as;if(Dt||Xc(wn),s.removed=[],typeof as=="string"&&(zs=!1),zs){if(as.nodeName){const w1=da(as.nodeName);if(!Ce[w1]||gn[w1])throw zF("root node is forbidden and cannot be sanitized in-place")}}else if(as instanceof y)Zr=ga(""),Zi=Zr.ownerDocument.importNode(as,!0),Zi.nodeType===1&&Zi.nodeName==="BODY"||Zi.nodeName==="HTML"?Zr=Zi:Zr.appendChild(Zi);else{if(!On&&!Pt&&!Qe&&as.indexOf("<")===-1)return pe&&zr?pe.createHTML(as):as;if(Zr=ga(as),!Zr)return On?null:zr?be:""}Zr&&kt&&xa(Zr.firstChild);const Dl=kh(zs?as:Zr);for(;nu=Dl.nextNode();)od(nu)||(nu.content instanceof v&&$g(nu.content),Kd(nu));if(zs)return as;if(On){if(ht)for(vu=se.call(Zr.ownerDocument);Zr.firstChild;)vu.appendChild(Zr.firstChild);else vu=Zr;return(Ke.shadowroot||Ke.shadowrootmode)&&(vu=X.call(d,vu,!0)),vu}let Yh=Qe?Zr.outerHTML:Zr.innerHTML;return Qe&&Ce["!doctype"]&&Zr.ownerDocument&&Zr.ownerDocument.doctype&&Zr.ownerDocument.doctype.name&&im(mRe,Zr.ownerDocument.doctype.name)&&(Yh=" +`+Yh),Pt&&gX([W,xe,U],w1=>{Yh=$F(Yh,w1," ")}),pe&&zr?pe.createHTML(Yh):Yh},s.setConfig=function(){let as=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Xc(as),Dt=!0},s.clearConfig=function(){j0=null,Dt=!1},s.isValidAttribute=function(as,wn,Zr){j0||Xc({});const Zi=da(as),nu=da(wn);return Gd(Zi,nu,Zr)},s.addHook=function(as,wn){typeof wn=="function"&&(ge[as]=ge[as]||[],jF(ge[as],wn))},s.removeHook=function(as){if(ge[as])return hRe(ge[as])},s.removeHooks=function(as){ge[as]&&(ge[as]=[])},s.removeAllHooks=function(){ge={}},s}var hD=wRe();const fD=//gi,lPt=i=>i?kRe(i).replace(/\\n/g,"#br#").split("#br#"):[""],hPt=(()=>{let i=!1;return()=>{i||(fPt(),i=!0)}})();function fPt(){const i="data-temp-href-target";hD.addHook("beforeSanitizeAttributes",s=>{s.tagName==="A"&&s.hasAttribute("target")&&s.setAttribute(i,s.getAttribute("target")||"")}),hD.addHook("afterSanitizeAttributes",s=>{s.tagName==="A"&&s.hasAttribute(i)&&(s.setAttribute("target",s.getAttribute(i)||""),s.removeAttribute(i),s.getAttribute("target")==="_blank"&&s.setAttribute("rel","noopener"))})}const yRe=i=>(hPt(),hD.sanitize(i)),xRe=(i,s)=>{var u;if(((u=s.flowchart)==null?void 0:u.htmlLabels)!==!1){const d=s.securityLevel;d==="antiscript"||d==="strict"?i=yRe(i):d!=="loose"&&(i=kRe(i),i=i.replace(//g,">"),i=i.replace(/=/g,"="),i=bPt(i))}return i},Yf=(i,s)=>i&&(s.dompurifyConfig?i=hD.sanitize(xRe(i,s),s.dompurifyConfig).toString():i=hD.sanitize(xRe(i,s),{FORBID_TAGS:["style"]}).toString(),i),dPt=(i,s)=>typeof i=="string"?Yf(i,s):i.flat().map(u=>Yf(u,s)),gPt=i=>fD.test(i),pPt=i=>i.split(fD),bPt=i=>i.replace(/#br#/g,"
"),kRe=i=>i.replace(fD,"#br#"),mPt=i=>{let s="";return i&&(s=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,s=s.replaceAll(/\(/g,"\\("),s=s.replaceAll(/\)/g,"\\)")),s},f1=i=>!(i===!1||["false","null","0"].includes(String(i).trim().toLowerCase())),vPt=function(...i){const s=i.filter(u=>!isNaN(u));return Math.max(...s)},wPt=function(...i){const s=i.filter(u=>!isNaN(u));return Math.min(...s)},qF=function(i){const s=i.split(/(,)/),u=[];for(let d=0;d0&&d+1Math.max(0,i.split(s).length-1),yPt=(i,s)=>{const u=l2e(i,"~"),d=l2e(s,"~");return u===1&&d===1},xPt=i=>{const s=l2e(i,"~");let u=!1;if(s<=1)return i;s%2!==0&&i.startsWith("~")&&(i=i.substring(1),u=!0);const d=[...i];let p=d.indexOf("~"),v=d.lastIndexOf("~");for(;p!==-1&&v!==-1&&p!==v;)d[p]="<",d[v]=">",p=d.indexOf("~"),v=d.lastIndexOf("~");return u&&d.unshift("~"),d.join("")},ERe=()=>window.MathMLElement!==void 0,h2e=/\$\$(.*)\$\$/g,Dv=i=>{var s;return(((s=i.match(h2e))==null?void 0:s.length)??0)>0},HF=async(i,s)=>{i=await CC(i,s);const u=document.createElement("div");u.innerHTML=i,u.id="katex-temp",u.style.visibility="hidden",u.style.position="absolute",u.style.top="0";const d=document.querySelector("body");d==null||d.insertAdjacentElement("beforeend",u);const p={width:u.clientWidth,height:u.clientHeight};return u.remove(),p},CC=async(i,s)=>{if(!Dv(i))return i;if(!ERe()&&!s.legacyMathML)return i.replace(h2e,"MathML is unsupported in this environment.");const{default:u}=await Promise.resolve().then(()=>MVt);return i.split(fD).map(d=>Dv(d)?` +
+ ${d} +
+ `:`
${d}
`).join("").replace(h2e,(d,p)=>u.renderToString(p,{throwOnError:!0,displayMode:!0,output:ERe()?"mathml":"htmlAndMathml"}).replace(/\n/g," ").replace(//g,""))},ci={getRows:lPt,sanitizeText:Yf,sanitizeTextOrArray:dPt,hasBreaks:gPt,splitBreaks:pPt,lineBreakRegex:fD,removeScript:yRe,getUrl:mPt,evaluate:f1,getMax:vPt,getMin:wPt},vX={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:i=>i>=255?255:i<0?0:i,g:i=>i>=255?255:i<0?0:i,b:i=>i>=255?255:i<0?0:i,h:i=>i%360,s:i=>i>=100?100:i<0?0:i,l:i=>i>=100?100:i<0?0:i,a:i=>i>=1?1:i<0?0:i},toLinear:i=>{const s=i/255;return i>.03928?Math.pow((s+.055)/1.055,2.4):s/12.92},hue2rgb:(i,s,u)=>(u<0&&(u+=1),u>1&&(u-=1),u<1/6?i+(s-i)*6*u:u<1/2?s:u<2/3?i+(s-i)*(2/3-u)*6:i),hsl2rgb:({h:i,s,l:u},d)=>{if(!s)return u*2.55;i/=360,s/=100,u/=100;const p=u<.5?u*(1+s):u+s-u*s,v=2*u-p;switch(d){case"r":return vX.hue2rgb(v,p,i+1/3)*255;case"g":return vX.hue2rgb(v,p,i)*255;case"b":return vX.hue2rgb(v,p,i-1/3)*255}},rgb2hsl:({r:i,g:s,b:u},d)=>{i/=255,s/=255,u/=255;const p=Math.max(i,s,u),v=Math.min(i,s,u),b=(p+v)/2;if(d==="l")return b*100;if(p===v)return 0;const y=p-v,T=b>.5?y/(2-p-v):y/(p+v);if(d==="s")return T*100;switch(p){case i:return((s-u)/y+(ss>u?Math.min(s,Math.max(u,i)):Math.min(u,Math.max(s,i)),round:i=>Math.round(i*1e10)/1e10},unit:{dec2hex:i=>{const s=Math.round(i).toString(16);return s.length>1?s:`0${s}`}}},v9={};for(let i=0;i<=255;i++)v9[i]=Wa.unit.dec2hex(i);const Og={ALL:0,RGB:1,HSL:2};class kPt{constructor(){this.type=Og.ALL}get(){return this.type}set(s){if(this.type&&this.type!==s)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=s}reset(){this.type=Og.ALL}is(s){return this.type===s}}const EPt=kPt;class TPt{constructor(s,u){this.color=u,this.changed=!1,this.data=s,this.type=new EPt}set(s,u){return this.color=u,this.changed=!1,this.data=s,this.type.type=Og.ALL,this}_ensureHSL(){const s=this.data,{h:u,s:d,l:p}=s;u===void 0&&(s.h=Wa.channel.rgb2hsl(s,"h")),d===void 0&&(s.s=Wa.channel.rgb2hsl(s,"s")),p===void 0&&(s.l=Wa.channel.rgb2hsl(s,"l"))}_ensureRGB(){const s=this.data,{r:u,g:d,b:p}=s;u===void 0&&(s.r=Wa.channel.hsl2rgb(s,"r")),d===void 0&&(s.g=Wa.channel.hsl2rgb(s,"g")),p===void 0&&(s.b=Wa.channel.hsl2rgb(s,"b"))}get r(){const s=this.data,u=s.r;return!this.type.is(Og.HSL)&&u!==void 0?u:(this._ensureHSL(),Wa.channel.hsl2rgb(s,"r"))}get g(){const s=this.data,u=s.g;return!this.type.is(Og.HSL)&&u!==void 0?u:(this._ensureHSL(),Wa.channel.hsl2rgb(s,"g"))}get b(){const s=this.data,u=s.b;return!this.type.is(Og.HSL)&&u!==void 0?u:(this._ensureHSL(),Wa.channel.hsl2rgb(s,"b"))}get h(){const s=this.data,u=s.h;return!this.type.is(Og.RGB)&&u!==void 0?u:(this._ensureRGB(),Wa.channel.rgb2hsl(s,"h"))}get s(){const s=this.data,u=s.s;return!this.type.is(Og.RGB)&&u!==void 0?u:(this._ensureRGB(),Wa.channel.rgb2hsl(s,"s"))}get l(){const s=this.data,u=s.l;return!this.type.is(Og.RGB)&&u!==void 0?u:(this._ensureRGB(),Wa.channel.rgb2hsl(s,"l"))}get a(){return this.data.a}set r(s){this.type.set(Og.RGB),this.changed=!0,this.data.r=s}set g(s){this.type.set(Og.RGB),this.changed=!0,this.data.g=s}set b(s){this.type.set(Og.RGB),this.changed=!0,this.data.b=s}set h(s){this.type.set(Og.HSL),this.changed=!0,this.data.h=s}set s(s){this.type.set(Og.HSL),this.changed=!0,this.data.s=s}set l(s){this.type.set(Og.HSL),this.changed=!0,this.data.l=s}set a(s){this.changed=!0,this.data.a=s}}const CPt=TPt,wX=new CPt({r:0,g:0,b:0,a:0},"transparent"),TRe={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:i=>{if(i.charCodeAt(0)!==35)return;const s=i.match(TRe.re);if(!s)return;const u=s[1],d=parseInt(u,16),p=u.length,v=p%4===0,b=p>4,y=b?1:17,T=b?8:4,_=v?0:-1,A=b?255:15;return wX.set({r:(d>>T*(_+3)&A)*y,g:(d>>T*(_+2)&A)*y,b:(d>>T*(_+1)&A)*y,a:v?(d&A)*y/255:1},i)},stringify:i=>{const{r:s,g:u,b:d,a:p}=i;return p<1?`#${v9[Math.round(s)]}${v9[Math.round(u)]}${v9[Math.round(d)]}${v9[Math.round(p*255)]}`:`#${v9[Math.round(s)]}${v9[Math.round(u)]}${v9[Math.round(d)]}`}},VF=TRe,yX={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:i=>{const s=i.match(yX.hueRe);if(s){const[,u,d]=s;switch(d){case"grad":return Wa.channel.clamp.h(parseFloat(u)*.9);case"rad":return Wa.channel.clamp.h(parseFloat(u)*180/Math.PI);case"turn":return Wa.channel.clamp.h(parseFloat(u)*360)}}return Wa.channel.clamp.h(parseFloat(i))},parse:i=>{const s=i.charCodeAt(0);if(s!==104&&s!==72)return;const u=i.match(yX.re);if(!u)return;const[,d,p,v,b,y]=u;return wX.set({h:yX._hue2deg(d),s:Wa.channel.clamp.s(parseFloat(p)),l:Wa.channel.clamp.l(parseFloat(v)),a:b?Wa.channel.clamp.a(y?parseFloat(b)/100:parseFloat(b)):1},i)},stringify:i=>{const{h:s,s:u,l:d,a:p}=i;return p<1?`hsla(${Wa.lang.round(s)}, ${Wa.lang.round(u)}%, ${Wa.lang.round(d)}%, ${p})`:`hsl(${Wa.lang.round(s)}, ${Wa.lang.round(u)}%, ${Wa.lang.round(d)}%)`}},xX=yX,kX={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:i=>{i=i.toLowerCase();const s=kX.colors[i];if(s)return VF.parse(s)},stringify:i=>{const s=VF.stringify(i);for(const u in kX.colors)if(kX.colors[u]===s)return u}},CRe=kX,SRe={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:i=>{const s=i.charCodeAt(0);if(s!==114&&s!==82)return;const u=i.match(SRe.re);if(!u)return;const[,d,p,v,b,y,T,_,A]=u;return wX.set({r:Wa.channel.clamp.r(p?parseFloat(d)*2.55:parseFloat(d)),g:Wa.channel.clamp.g(b?parseFloat(v)*2.55:parseFloat(v)),b:Wa.channel.clamp.b(T?parseFloat(y)*2.55:parseFloat(y)),a:_?Wa.channel.clamp.a(A?parseFloat(_)/100:parseFloat(_)):1},i)},stringify:i=>{const{r:s,g:u,b:d,a:p}=i;return p<1?`rgba(${Wa.lang.round(s)}, ${Wa.lang.round(u)}, ${Wa.lang.round(d)}, ${Wa.lang.round(p)})`:`rgb(${Wa.lang.round(s)}, ${Wa.lang.round(u)}, ${Wa.lang.round(d)})`}},EX=SRe,O3={format:{keyword:CRe,hex:VF,rgb:EX,rgba:EX,hsl:xX,hsla:xX},parse:i=>{if(typeof i!="string")return i;const s=VF.parse(i)||EX.parse(i)||xX.parse(i)||CRe.parse(i);if(s)return s;throw new Error(`Unsupported color format: "${i}"`)},stringify:i=>!i.changed&&i.color?i.color:i.type.is(Og.HSL)||i.data.r===void 0?xX.stringify(i):i.a<1||!Number.isInteger(i.r)||!Number.isInteger(i.g)||!Number.isInteger(i.b)?EX.stringify(i):VF.stringify(i)},_Re=(i,s)=>{const u=O3.parse(i);for(const d in s)u[d]=Wa.channel.clamp[d](s[d]);return O3.stringify(u)},SC=(i,s,u=0,d=1)=>{if(typeof i!="number")return _Re(i,{a:s});const p=wX.set({r:Wa.channel.clamp.r(i),g:Wa.channel.clamp.g(s),b:Wa.channel.clamp.b(u),a:Wa.channel.clamp.a(d)});return O3.stringify(p)},ARe=(i,s)=>Wa.lang.round(O3.parse(i)[s]),SPt=i=>{const{r:s,g:u,b:d}=O3.parse(i),p=.2126*Wa.channel.toLinear(s)+.7152*Wa.channel.toLinear(u)+.0722*Wa.channel.toLinear(d);return Wa.lang.round(p)},_Pt=i=>SPt(i)>=.5,_C=i=>!_Pt(i),LRe=(i,s,u)=>{const d=O3.parse(i),p=d[s],v=Wa.channel.clamp[s](p+u);return p!==v&&(d[s]=v),O3.stringify(d)},Gs=(i,s)=>LRe(i,"l",s),fa=(i,s)=>LRe(i,"l",-s),In=(i,s)=>{const u=O3.parse(i),d={};for(const p in s)s[p]&&(d[p]=u[p]+s[p]);return _Re(i,d)},APt=(i,s,u=50)=>{const{r:d,g:p,b:v,a:b}=O3.parse(i),{r:y,g:T,b:_,a:A}=O3.parse(s),P=u/100,R=P*2-1,F=b-A,K=((R*F===-1?R:(R+F)/(1+R*F))+1)/2,ee=1-K,ie=d*K+y*ee,oe=p*K+T*ee,pe=v*K+_*ee,be=b*P+A*(1-P);return SC(ie,oe,pe,be)},Vi=(i,s=100)=>{const u=O3.parse(i);return u.r=255-u.r,u.g=255-u.g,u.b=255-u.b,APt(u,i,s)},Tp=(i,s)=>s?In(i,{s:-40,l:10}):In(i,{s:-40,l:-10}),TX="#ffffff",CX="#f2f2f2";let LPt=class{constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){var u,d,p,v,b,y,T,_,A,P,R;if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||In(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||In(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Tp(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Tp(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Tp(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Tp(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||Vi(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Vi(this.tertiaryColor),this.lineColor=this.lineColor||Vi(this.background),this.arrowheadColor=this.arrowheadColor||Vi(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?fa(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||"grey",this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||fa(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Vi(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||Gs(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||In(this.primaryColor,{h:30}),this.cScale4=this.cScale4||In(this.primaryColor,{h:60}),this.cScale5=this.cScale5||In(this.primaryColor,{h:90}),this.cScale6=this.cScale6||In(this.primaryColor,{h:120}),this.cScale7=this.cScale7||In(this.primaryColor,{h:150}),this.cScale8=this.cScale8||In(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||In(this.primaryColor,{h:270}),this.cScale10=this.cScale10||In(this.primaryColor,{h:300}),this.cScale11=this.cScale11||In(this.primaryColor,{h:330}),this.darkMode)for(let F=0;F{this[d]=s[d]}),this.updateColors(),u.forEach(d=>{this[d]=s[d]})}};const MPt=i=>{const s=new LPt;return s.calculate(i),s};let DPt=class{constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=Gs(this.primaryColor,16),this.tertiaryColor=In(this.primaryColor,{h:-160}),this.primaryBorderColor=Vi(this.background),this.secondaryBorderColor=Tp(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Tp(this.tertiaryColor,this.darkMode),this.primaryTextColor=Vi(this.primaryColor),this.secondaryTextColor=Vi(this.secondaryColor),this.tertiaryTextColor=Vi(this.tertiaryColor),this.lineColor=Vi(this.background),this.textColor=Vi(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=Gs(Vi("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=SC(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=fa("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=fa(this.sectionBkgColor,10),this.taskBorderColor=SC(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=SC(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){var s,u,d,p,v,b,y,T,_,A,P;this.secondBkg=Gs(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=Gs(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.mainContrastColor,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=Gs(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=In(this.primaryColor,{h:64}),this.fillType3=In(this.secondaryColor,{h:64}),this.fillType4=In(this.primaryColor,{h:-64}),this.fillType5=In(this.secondaryColor,{h:-64}),this.fillType6=In(this.primaryColor,{h:128}),this.fillType7=In(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||In(this.primaryColor,{h:30}),this.cScale4=this.cScale4||In(this.primaryColor,{h:60}),this.cScale5=this.cScale5||In(this.primaryColor,{h:90}),this.cScale6=this.cScale6||In(this.primaryColor,{h:120}),this.cScale7=this.cScale7||In(this.primaryColor,{h:150}),this.cScale8=this.cScale8||In(this.primaryColor,{h:210}),this.cScale9=this.cScale9||In(this.primaryColor,{h:270}),this.cScale10=this.cScale10||In(this.primaryColor,{h:300}),this.cScale11=this.cScale11||In(this.primaryColor,{h:330});for(let R=0;R{this[d]=s[d]}),this.updateColors(),u.forEach(d=>{this[d]=s[d]})}};const IPt=i=>{const s=new DPt;return s.calculate(i),s};let OPt=class{constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=In(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=In(this.primaryColor,{h:-160}),this.primaryBorderColor=Tp(this.primaryColor,this.darkMode),this.secondaryBorderColor=Tp(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Tp(this.tertiaryColor,this.darkMode),this.primaryTextColor=Vi(this.primaryColor),this.secondaryTextColor=Vi(this.secondaryColor),this.tertiaryTextColor=Vi(this.tertiaryColor),this.lineColor=Vi(this.background),this.textColor=Vi(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#e8e8e8",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=SC(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){var s,u,d,p,v,b,y,T,_,A,P;this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||In(this.primaryColor,{h:30}),this.cScale4=this.cScale4||In(this.primaryColor,{h:60}),this.cScale5=this.cScale5||In(this.primaryColor,{h:90}),this.cScale6=this.cScale6||In(this.primaryColor,{h:120}),this.cScale7=this.cScale7||In(this.primaryColor,{h:150}),this.cScale8=this.cScale8||In(this.primaryColor,{h:210}),this.cScale9=this.cScale9||In(this.primaryColor,{h:270}),this.cScale10=this.cScale10||In(this.primaryColor,{h:300}),this.cScale11=this.cScale11||In(this.primaryColor,{h:330}),this["cScalePeer1"]=this["cScalePeer1"]||fa(this.secondaryColor,45),this["cScalePeer2"]=this["cScalePeer2"]||fa(this.tertiaryColor,40);for(let R=0;R{this[d]=s[d]}),this.updateColors(),u.forEach(d=>{this[d]=s[d]})}};const f2e=i=>{const s=new OPt;return s.calculate(i),s};let NPt=class{constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=Gs("#cde498",10),this.primaryBorderColor=Tp(this.primaryColor,this.darkMode),this.secondaryBorderColor=Tp(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Tp(this.tertiaryColor,this.darkMode),this.primaryTextColor=Vi(this.primaryColor),this.secondaryTextColor=Vi(this.secondaryColor),this.tertiaryTextColor=Vi(this.primaryColor),this.lineColor=Vi(this.background),this.textColor=Vi(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var s,u,d,p,v,b,y,T,_,A,P;this.actorBorder=fa(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||In(this.primaryColor,{h:30}),this.cScale4=this.cScale4||In(this.primaryColor,{h:60}),this.cScale5=this.cScale5||In(this.primaryColor,{h:90}),this.cScale6=this.cScale6||In(this.primaryColor,{h:120}),this.cScale7=this.cScale7||In(this.primaryColor,{h:150}),this.cScale8=this.cScale8||In(this.primaryColor,{h:210}),this.cScale9=this.cScale9||In(this.primaryColor,{h:270}),this.cScale10=this.cScale10||In(this.primaryColor,{h:300}),this.cScale11=this.cScale11||In(this.primaryColor,{h:330}),this["cScalePeer1"]=this["cScalePeer1"]||fa(this.secondaryColor,45),this["cScalePeer2"]=this["cScalePeer2"]||fa(this.tertiaryColor,40);for(let R=0;R{this[d]=s[d]}),this.updateColors(),u.forEach(d=>{this[d]=s[d]})}};const PPt=i=>{const s=new NPt;return s.calculate(i),s};class BPt{constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=Gs(this.contrast,55),this.background="#ffffff",this.tertiaryColor=In(this.primaryColor,{h:-160}),this.primaryBorderColor=Tp(this.primaryColor,this.darkMode),this.secondaryBorderColor=Tp(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Tp(this.tertiaryColor,this.darkMode),this.primaryTextColor=Vi(this.primaryColor),this.secondaryTextColor=Vi(this.secondaryColor),this.tertiaryTextColor=Vi(this.tertiaryColor),this.lineColor=Vi(this.background),this.textColor=Vi(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var s,u,d,p,v,b,y,T,_,A,P;this.secondBkg=Gs(this.contrast,55),this.border2=this.contrast,this.actorBorder=Gs(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.lineColor,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let R=0;R{this[d]=s[d]}),this.updateColors(),u.forEach(d=>{this[d]=s[d]})}}const E7={base:{getThemeVariables:MPt},dark:{getThemeVariables:IPt},default:{getThemeVariables:f2e},forest:{getThemeVariables:PPt},neutral:{getThemeVariables:i=>{const s=new BPt;return s.calculate(i),s}}},T7={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,parallelCommits:!1,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},block:{useMaxWidth:!0,padding:8},theme:"default",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","maxEdges"],legacyMathML:!1,deterministicIds:!1,fontSize:16},MRe={...T7,deterministicIDSeed:void 0,themeCSS:void 0,themeVariables:E7.default.getThemeVariables(),sequence:{...T7.sequence,messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},noteFont:function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},actorFont:function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}}},gantt:{...T7.gantt,tickInterval:void 0,useWidth:void 0},c4:{...T7.c4,useWidth:void 0,personFont:function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},external_personFont:function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},systemFont:function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},external_systemFont:function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},system_dbFont:function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},external_system_dbFont:function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},system_queueFont:function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},external_system_queueFont:function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},containerFont:function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},external_containerFont:function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},container_dbFont:function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},external_container_dbFont:function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},container_queueFont:function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},external_container_queueFont:function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},componentFont:function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},external_componentFont:function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},component_dbFont:function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},external_component_dbFont:function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},component_queueFont:function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},external_component_queueFont:function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},boundaryFont:function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}}},pie:{...T7.pie,useWidth:984},xyChart:{...T7.xyChart,useWidth:void 0},requirement:{...T7.requirement,useWidth:void 0},gitGraph:{...T7.gitGraph,useMaxWidth:!1},sankey:{...T7.sankey,useMaxWidth:!1}},DRe=(i,s="")=>Object.keys(i).reduce((u,d)=>Array.isArray(i[d])?u:typeof i[d]=="object"&&i[d]!==null?[...u,s+d,...DRe(i[d],"")]:[...u,s+d],[]),FPt=new Set(DRe(MRe,"")),sh=MRe,SX=i=>{if(Xe.debug("sanitizeDirective called with",i),!(typeof i!="object"||i==null)){if(Array.isArray(i)){i.forEach(s=>SX(s));return}for(const s of Object.keys(i)){if(Xe.debug("Checking key",s),s.startsWith("__")||s.includes("proto")||s.includes("constr")||!FPt.has(s)||i[s]==null){Xe.debug("sanitize deleting key: ",s),delete i[s];continue}if(typeof i[s]=="object"){Xe.debug("sanitizing object",s),SX(i[s]);continue}const u=["themeCSS","fontFamily","altFontFamily"];for(const d of u)s.includes(d)&&(Xe.debug("sanitizing css option",s),i[s]=RPt(i[s]))}if(i.themeVariables)for(const s of Object.keys(i.themeVariables)){const u=i.themeVariables[s];u!=null&&u.match&&!u.match(/^[\d "#%(),.;A-Za-z]+$/)&&(i.themeVariables[s]="")}Xe.debug("After sanitization",i)}},RPt=i=>{let s=0,u=0;for(const d of i){if(s{for(const{id:s,detector:u,loader:d}of i)PRe(s,u,d)},PRe=(i,s,u)=>{dD[i]?Xe.error(`Detector with key ${i} already exists`):dD[i]={detector:s,loader:u},Xe.debug(`Detector with key ${i} added${u?" with loader":""}`)},$Pt=i=>dD[i].loader,d2e=(i,s,{depth:u=2,clobber:d=!1}={})=>{const p={depth:u,clobber:d};return Array.isArray(s)&&!Array.isArray(i)?(s.forEach(v=>d2e(i,v,p)),i):Array.isArray(s)&&Array.isArray(i)?(s.forEach(v=>{i.includes(v)||i.push(v)}),i):i===void 0||u<=0?i!=null&&typeof i=="object"&&typeof s=="object"?Object.assign(i,s):s:(s!==void 0&&typeof i=="object"&&typeof s=="object"&&Object.keys(s).forEach(v=>{typeof s[v]=="object"&&(i[v]===void 0||typeof i[v]=="object")?(i[v]===void 0&&(i[v]=Array.isArray(s[v])?[]:{}),i[v]=d2e(i[v],s[v],{depth:u-1,clobber:d})):(d||typeof i[v]!="object"&&typeof s[v]!="object")&&(i[v]=s[v])}),i)},id=d2e;var zPt=typeof global=="object"&&global&&global.Object===Object&&global;const BRe=zPt;var qPt=typeof self=="object"&&self&&self.Object===Object&&self,HPt=BRe||qPt||Function("return this")();const N3=HPt;var VPt=N3.Symbol;const Iv=VPt;var FRe=Object.prototype,UPt=FRe.hasOwnProperty,GPt=FRe.toString,GF=Iv?Iv.toStringTag:void 0;function KPt(i){var s=UPt.call(i,GF),u=i[GF];try{i[GF]=void 0;var d=!0}catch{}var p=GPt.call(i);return d&&(s?i[GF]=u:delete i[GF]),p}var WPt=Object.prototype,YPt=WPt.toString;function XPt(i){return YPt.call(i)}var QPt="[object Null]",JPt="[object Undefined]",RRe=Iv?Iv.toStringTag:void 0;function AC(i){return i==null?i===void 0?JPt:QPt:RRe&&RRe in Object(i)?KPt(i):XPt(i)}function am(i){var s=typeof i;return i!=null&&(s=="object"||s=="function")}var ZPt="[object AsyncFunction]",eBt="[object Function]",tBt="[object GeneratorFunction]",nBt="[object Proxy]";function gD(i){if(!am(i))return!1;var s=AC(i);return s==eBt||s==tBt||s==ZPt||s==nBt}var rBt=N3["__core-js_shared__"];const g2e=rBt;var jRe=function(){var i=/[^.]+$/.exec(g2e&&g2e.keys&&g2e.keys.IE_PROTO||"");return i?"Symbol(src)_1."+i:""}();function iBt(i){return!!jRe&&jRe in i}var sBt=Function.prototype,aBt=sBt.toString;function LC(i){if(i!=null){try{return aBt.call(i)}catch{}try{return i+""}catch{}}return""}var oBt=/[\\^$.*+?()[\]{}|]/g,cBt=/^\[object .+?Constructor\]$/,uBt=Function.prototype,lBt=Object.prototype,hBt=uBt.toString,fBt=lBt.hasOwnProperty,dBt=RegExp("^"+hBt.call(fBt).replace(oBt,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function gBt(i){if(!am(i)||iBt(i))return!1;var s=gD(i)?dBt:cBt;return s.test(LC(i))}function pBt(i,s){return i==null?void 0:i[s]}function MC(i,s){var u=pBt(i,s);return gBt(u)?u:void 0}var bBt=MC(Object,"create");const KF=bBt;function mBt(){this.__data__=KF?KF(null):{},this.size=0}function vBt(i){var s=this.has(i)&&delete this.__data__[i];return this.size-=s?1:0,s}var wBt="__lodash_hash_undefined__",yBt=Object.prototype,xBt=yBt.hasOwnProperty;function kBt(i){var s=this.__data__;if(KF){var u=s[i];return u===wBt?void 0:u}return xBt.call(s,i)?s[i]:void 0}var EBt=Object.prototype,TBt=EBt.hasOwnProperty;function CBt(i){var s=this.__data__;return KF?s[i]!==void 0:TBt.call(s,i)}var SBt="__lodash_hash_undefined__";function _Bt(i,s){var u=this.__data__;return this.size+=this.has(i)?0:1,u[i]=KF&&s===void 0?SBt:s,this}function DC(i){var s=-1,u=i==null?0:i.length;for(this.clear();++s-1}function NBt(i,s){var u=this.__data__,d=AX(u,i);return d<0?(++this.size,u.push([i,s])):u[d][1]=s,this}function C7(i){var s=-1,u=i==null?0:i.length;for(this.clear();++s-1&&i%1==0&&i<=uFt}function w9(i){return i!=null&&w2e(i.length)&&!gD(i)}function JRe(i){return q4(i)&&w9(i)}function lFt(){return!1}var ZRe=typeof exports=="object"&&exports&&!exports.nodeType&&exports,eje=ZRe&&typeof module=="object"&&module&&!module.nodeType&&module,hFt=eje&&eje.exports===ZRe,tje=hFt?N3.Buffer:void 0,fFt=tje?tje.isBuffer:void 0,dFt=fFt||lFt;const vD=dFt;var gFt="[object Object]",pFt=Function.prototype,bFt=Object.prototype,nje=pFt.toString,mFt=bFt.hasOwnProperty,vFt=nje.call(Object);function rje(i){if(!q4(i)||AC(i)!=gFt)return!1;var s=v2e(i);if(s===null)return!0;var u=mFt.call(s,"constructor")&&s.constructor;return typeof u=="function"&&u instanceof u&&nje.call(u)==vFt}var wFt="[object Arguments]",yFt="[object Array]",xFt="[object Boolean]",kFt="[object Date]",EFt="[object Error]",TFt="[object Function]",CFt="[object Map]",SFt="[object Number]",_Ft="[object Object]",AFt="[object RegExp]",LFt="[object Set]",MFt="[object String]",DFt="[object WeakMap]",IFt="[object ArrayBuffer]",OFt="[object DataView]",NFt="[object Float32Array]",PFt="[object Float64Array]",BFt="[object Int8Array]",FFt="[object Int16Array]",RFt="[object Int32Array]",jFt="[object Uint8Array]",$Ft="[object Uint8ClampedArray]",zFt="[object Uint16Array]",qFt="[object Uint32Array]",ah={};ah[NFt]=ah[PFt]=ah[BFt]=ah[FFt]=ah[RFt]=ah[jFt]=ah[$Ft]=ah[zFt]=ah[qFt]=!0,ah[wFt]=ah[yFt]=ah[IFt]=ah[xFt]=ah[OFt]=ah[kFt]=ah[EFt]=ah[TFt]=ah[CFt]=ah[SFt]=ah[_Ft]=ah[AFt]=ah[LFt]=ah[MFt]=ah[DFt]=!1;function HFt(i){return q4(i)&&w2e(i.length)&&!!ah[AC(i)]}function NX(i){return function(s){return i(s)}}var ije=typeof exports=="object"&&exports&&!exports.nodeType&&exports,YF=ije&&typeof module=="object"&&module&&!module.nodeType&&module,VFt=YF&&YF.exports===ije,y2e=VFt&&BRe.process,UFt=function(){try{var i=YF&&YF.require&&YF.require("util").types;return i||y2e&&y2e.binding&&y2e.binding("util")}catch{}}();const wD=UFt;var sje=wD&&wD.isTypedArray,GFt=sje?NX(sje):HFt;const PX=GFt;function x2e(i,s){if(!(s==="constructor"&&typeof i[s]=="function")&&s!="__proto__")return i[s]}var KFt=Object.prototype,WFt=KFt.hasOwnProperty;function BX(i,s,u){var d=i[s];(!(WFt.call(i,s)&&pD(d,u))||u===void 0&&!(s in i))&&DX(i,s,u)}function XF(i,s,u,d){var p=!u;u||(u={});for(var v=-1,b=s.length;++v-1&&i%1==0&&i0){if(++s>=uRt)return arguments[0]}else s=0;return i.apply(void 0,arguments)}}var dRt=fRt(cRt);const lje=dRt;function RX(i,s){return lje(uje(i,s,OC),i+"")}function QF(i,s,u){if(!am(u))return!1;var d=typeof s;return(d=="number"?w9(u)&&FX(s,u.length):d=="string"&&s in u)?pD(u[s],i):!1}function gRt(i){return RX(function(s,u){var d=-1,p=u.length,v=p>1?u[p-1]:void 0,b=p>2?u[2]:void 0;for(v=i.length>3&&typeof v=="function"?(p--,v):void 0,b&&QF(u[0],u[1],b)&&(v=p<3?void 0:v,p=1),s=Object(s);++dy.args);SX(b),d=id(d,[...b])}else d=u.args;if(!d)return;let p=_X(i,s);const v="config";return d[v]!==void 0&&(p==="flowchart-v2"&&(p="flowchart"),d[p]=d[v],delete d[v]),d},fje=function(i,s=null){try{const u=new RegExp(`[%]{2}(?![{]${mRt.source})(?=[}][%]{2}).* +`,"ig");i=i.trim().replace(u,"").replace(/'/gm,'"'),Xe.debug(`Detecting diagram directive${s!==null?" type:"+s:""} based on the text:${i}`);let d;const p=[];for(;(d=UF.exec(i))!==null;)if(d.index===UF.lastIndex&&UF.lastIndex++,d&&!s||s&&d[1]&&d[1].match(s)||s&&d[2]&&d[2].match(s)){const v=d[1]?d[1]:d[2],b=d[3]?d[3].trim():d[4]?JSON.parse(d[4].trim()):null;p.push({type:v,args:b})}return p.length===0?{type:i,args:null}:p.length===1?p[0]:p}catch(u){return Xe.error(`ERROR: ${u.message} - Unable to parse directive type: '${s}' based on the text: '${i}'`),{type:void 0,args:null}}},wRt=function(i){return i.replace(UF,"")},yRt=function(i,s){for(const[u,d]of s.entries())if(d.match(i))return u;return-1};function Ov(i,s){if(!i)return s;const u=`curve${i.charAt(0).toUpperCase()+i.slice(1)}`;return bRt[u]??s}function xRt(i,s){const u=i.trim();if(u)return s.securityLevel!=="loose"?p9.sanitizeUrl(u):u}const kRt=(i,...s)=>{const u=i.split("."),d=u.length-1,p=u[d];let v=window;for(let b=0;b{u+=dje(p,s),s=p});const d=u/2;return k2e(i,d)}function TRt(i){return i.length===1?i[0]:ERt(i)}const gje=(i,s=2)=>{const u=Math.pow(10,s);return Math.round(i*u)/u},k2e=(i,s)=>{let u,d=s;for(const p of i){if(u){const v=dje(p,u);if(v=1)return{x:p.x,y:p.y};if(b>0&&b<1)return{x:gje((1-b)*u.x+b*p.x,5),y:gje((1-b)*u.y+b*p.y,5)}}}u=p}throw new Error("Could not find a suitable point for the given distance")},CRt=(i,s,u)=>{Xe.info(`our points ${JSON.stringify(s)}`),s[0]!==u&&(s=s.reverse());const p=k2e(s,25),v=i?10:5,b=Math.atan2(s[0].y-p.y,s[0].x-p.x),y={x:0,y:0};return y.x=Math.sin(b)*v+(s[0].x+p.x)/2,y.y=-Math.cos(b)*v+(s[0].y+p.y)/2,y};function SRt(i,s,u){const d=structuredClone(u);Xe.info("our points",d),s!=="start_left"&&s!=="start_right"&&d.reverse();const p=25+i,v=k2e(d,p),b=10+i*.5,y=Math.atan2(d[0].y-v.y,d[0].x-v.x),T={x:0,y:0};return s==="start_left"?(T.x=Math.sin(y+Math.PI)*b+(d[0].x+v.x)/2,T.y=-Math.cos(y+Math.PI)*b+(d[0].y+v.y)/2):s==="end_right"?(T.x=Math.sin(y-Math.PI)*b+(d[0].x+v.x)/2-5,T.y=-Math.cos(y-Math.PI)*b+(d[0].y+v.y)/2-5):s==="end_left"?(T.x=Math.sin(y)*b+(d[0].x+v.x)/2-5,T.y=-Math.cos(y)*b+(d[0].y+v.y)/2-5):(T.x=Math.sin(y)*b+(d[0].x+v.x)/2,T.y=-Math.cos(y)*b+(d[0].y+v.y)/2),T}function om(i){let s="",u="";for(const d of i)d!==void 0&&(d.startsWith("color:")||d.startsWith("text-align:")?u=u+d+";":s=s+d+";");return{style:s,labelStyle:u}}let pje=0;const bje=()=>(pje++,"id-"+Math.random().toString(36).substr(2,12)+"-"+pje);function _Rt(i){let s="";const u="0123456789abcdef",d=u.length;for(let p=0;p_Rt(i.length),ARt=function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""}},LRt=function(i,s){const u=s.text.replace(ci.lineBreakRegex," "),[,d]=NC(s.fontSize),p=i.append("text");p.attr("x",s.x),p.attr("y",s.y),p.style("text-anchor",s.anchor),p.style("font-family",s.fontFamily),p.style("font-size",d),p.style("font-weight",s.fontWeight),p.attr("fill",s.fill),s.class!==void 0&&p.attr("class",s.class);const v=p.append("tspan");return v.attr("x",s.x+s.textMargin*2),v.attr("fill",s.fill),v.text(u),p},vje=bD((i,s,u)=>{if(!i||(u=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
"},u),ci.lineBreakRegex.test(i)))return i;const d=i.split(" "),p=[];let v="";return d.forEach((b,y)=>{const T=H4(`${b} `,u),_=H4(v,u);if(T>s){const{hyphenatedStrings:R,remainingWord:F}=MRt(b,s,"-",u);p.push(v,...R),v=F}else _+T>=s?(p.push(v),v=b):v=[v,b].filter(Boolean).join(" ");y+1===d.length&&p.push(v)}),p.filter(b=>b!=="").join(u.joinWith)},(i,s,u)=>`${i}${s}${u.fontSize}${u.fontWeight}${u.fontFamily}${u.joinWith}`),MRt=bD((i,s,u="-",d)=>{d=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},d);const p=[...i],v=[];let b="";return p.forEach((y,T)=>{const _=`${b}${y}`;if(H4(_,d)>=s){const P=T+1,R=p.length===P,F=`${_}${u}`;v.push(R?_:F),b=""}else b=_}),{hyphenatedStrings:v,remainingWord:b}},(i,s,u="-",d)=>`${i}${s}${u}${d.fontSize}${d.fontWeight}${d.fontFamily}`);function E2e(i,s){return T2e(i,s).height}function H4(i,s){return T2e(i,s).width}const T2e=bD((i,s)=>{const{fontSize:u=12,fontFamily:d="Arial",fontWeight:p=400}=s;if(!i)return{width:0,height:0};const[,v]=NC(u),b=["sans-serif",d],y=i.split(ci.lineBreakRegex),T=[],_=Ir("body");if(!_.remove)return{width:0,height:0,lineHeight:0};const A=_.append("svg");for(const R of b){let F=0;const j={width:0,height:0,lineHeight:0};for(const K of y){const ee=ARt();ee.text=K||hje;const ie=LRt(A,ee).style("font-size",v).style("font-weight",p).style("font-family",R),oe=(ie._groups||ie)[0][0].getBBox();if(oe.width===0&&oe.height===0)throw new Error("svg element not in render tree");j.width=Math.round(Math.max(j.width,oe.width)),F=Math.round(oe.height),j.height+=F,j.lineHeight=Math.round(Math.max(j.lineHeight,F))}T.push(j)}A.remove();const P=isNaN(T[1].height)||isNaN(T[1].width)||isNaN(T[1].lineHeight)||T[0].height>T[1].height&&T[0].width>T[1].width&&T[0].lineHeight>T[1].lineHeight?0:1;return T[P]},(i,s)=>`${i}${s.fontSize}${s.fontWeight}${s.fontFamily}`);class DRt{constructor(s=!1,u){this.count=0,this.count=u?u.length:0,this.next=s?()=>this.count++:()=>Date.now()}}let $X;const IRt=function(i){return $X=$X||document.createElement("div"),i=escape(i).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),$X.innerHTML=i,unescape($X.textContent)};function wje(i){return"str"in i}const ORt=(i,s,u,d)=>{var v;if(!d)return;const p=(v=i.node())==null?void 0:v.getBBox();p&&i.append("text").text(d).attr("x",p.x+p.width/2).attr("y",-u).attr("class",s)},NC=i=>{if(typeof i=="number")return[i,i+"px"];const s=parseInt(i??"",10);return Number.isNaN(s)?[void 0,void 0]:i===String(s)?[s,i+"px"]:[s,i]};function JF(i,s){return jX({},i,s)}const Ao={assignWithDepth:id,wrapLabel:vje,calculateTextHeight:E2e,calculateTextWidth:H4,calculateTextDimensions:T2e,cleanAndMerge:JF,detectInit:vRt,detectDirective:fje,isSubstringInArray:yRt,interpolateToCurve:Ov,calcLabelPosition:TRt,calcCardinalityPosition:CRt,calcTerminalLabelPosition:SRt,formatUrl:xRt,getStylesFromArray:om,generateId:bje,random:mje,runFunc:kRt,entityDecode:IRt,insertTitle:ORt,parseFontSize:NC,InitIDGenerator:DRt},NRt=function(i){let s=i;return s=s.replace(/style.*:\S*#.*;/g,function(u){return u.substring(0,u.length-1)}),s=s.replace(/classDef.*:\S*#.*;/g,function(u){return u.substring(0,u.length-1)}),s=s.replace(/#\w+;/g,function(u){const d=u.substring(1,u.length-1);return/^\+?\d+$/.test(d)?"fl°°"+d+"¶ß":"fl°"+d+"¶ß"}),s},ZF=function(i){return i.replace(/fl°°/g,"&#").replace(/fl°/g,"&").replace(/¶ß/g,";")};var yje="comm",xje="rule",kje="decl",PRt="@import",BRt="@keyframes",FRt="@layer",Eje=Math.abs,C2e=String.fromCharCode;function Tje(i){return i.trim()}function zX(i,s,u){return i.replace(s,u)}function RRt(i,s,u){return i.indexOf(s,u)}function eR(i,s){return i.charCodeAt(s)|0}function tR(i,s,u){return i.slice(s,u)}function _7(i){return i.length}function jRt(i){return i.length}function qX(i,s){return s.push(i),i}var HX=1,xD=1,Cje=0,Nv=0,I0=0,kD="";function S2e(i,s,u,d,p,v,b,y){return{value:i,root:s,parent:u,type:d,props:p,children:v,line:HX,column:xD,length:b,return:"",siblings:y}}function $Rt(){return I0}function zRt(){return I0=Nv>0?eR(kD,--Nv):0,xD--,I0===10&&(xD=1,HX--),I0}function B3(){return I0=Nv2||_2e(I0)>3?"":" "}function URt(i,s){for(;--s&&B3()&&!(I0<48||I0>102||I0>57&&I0<65||I0>70&&I0<97););return UX(i,VX()+(s<6&&PC()==32&&B3()==32))}function L2e(i){for(;B3();)switch(I0){case i:return Nv;case 34:case 39:i!==34&&i!==39&&L2e(I0);break;case 40:i===41&&L2e(i);break;case 92:B3();break}return Nv}function GRt(i,s){for(;B3()&&i+I0!==47+10;)if(i+I0===42+42&&PC()===47)break;return"/*"+UX(s,Nv-1)+"*"+C2e(i===47?i:B3())}function KRt(i){for(;!_2e(PC());)B3();return UX(i,Nv)}function WRt(i){return HRt(GX("",null,null,null,[""],i=qRt(i),0,[0],i))}function GX(i,s,u,d,p,v,b,y,T){for(var _=0,A=0,P=b,R=0,F=0,j=0,K=1,ee=1,ie=1,oe=0,pe="",be=p,ae=v,ne=d,se=pe;ee;)switch(j=oe,oe=B3()){case 40:if(j!=108&&eR(se,P-1)==58){RRt(se+=zX(A2e(oe),"&","&\f"),"&\f",Eje(_?y[_-1]:0))!=-1&&(ie=-1);break}case 34:case 39:case 91:se+=A2e(oe);break;case 9:case 10:case 13:case 32:se+=VRt(j);break;case 92:se+=URt(VX()-1,7);continue;case 47:switch(PC()){case 42:case 47:qX(YRt(GRt(B3(),VX()),s,u,T),T);break;default:se+="/"}break;case 123*K:y[_++]=_7(se)*ie;case 125*K:case 59:case 0:switch(oe){case 0:case 125:ee=0;case 59+A:ie==-1&&(se=zX(se,/\f/g,"")),F>0&&_7(se)-P&&qX(F>32?_je(se+";",d,u,P-1,T):_je(zX(se," ","")+";",d,u,P-2,T),T);break;case 59:se+=";";default:if(qX(ne=Sje(se,s,u,_,A,p,y,pe,be=[],ae=[],P,v),v),oe===123)if(A===0)GX(se,s,ne,ne,be,v,P,y,ae);else switch(R===99&&eR(se,3)===110?100:R){case 100:case 108:case 109:case 115:GX(i,ne,ne,d&&qX(Sje(i,ne,ne,0,0,p,y,pe,p,be=[],P,ae),ae),p,ae,P,y,d?be:ae);break;default:GX(se,ne,ne,ne,[""],ae,0,y,ae)}}_=A=F=0,K=ie=1,pe=se="",P=b;break;case 58:P=1+_7(se),F=j;default:if(K<1){if(oe==123)--K;else if(oe==125&&K++==0&&zRt()==125)continue}switch(se+=C2e(oe),oe*K){case 38:ie=A>0?1:(se+="\f",-1);break;case 44:y[_++]=(_7(se)-1)*ie,ie=1;break;case 64:PC()===45&&(se+=A2e(B3())),R=PC(),A=P=_7(pe=se+=KRt(VX())),oe++;break;case 45:j===45&&_7(se)==2&&(K=0)}}return v}function Sje(i,s,u,d,p,v,b,y,T,_,A,P){for(var R=p-1,F=p===0?v:[""],j=jRt(F),K=0,ee=0,ie=0;K0?F[oe]+" "+pe:zX(pe,/&\f/g,F[oe])))&&(T[ie++]=be);return S2e(i,s,u,p===0?xje:y,T,_,A,P)}function YRt(i,s,u,d){return S2e(i,s,u,yje,C2e($Rt()),tR(i,2,-2),0,d)}function _je(i,s,u,d,p){return S2e(i,s,u,kje,tR(i,0,d),tR(i,d+1,-1),d,p)}function M2e(i,s){for(var u="",d=0;d{let u=id({},i),d={};for(const p of s)Ije(p),d=id(d,p);if(u=id(u,d),d.theme&&d.theme in E7){const p=id({},Lje),v=id(p.themeVariables||{},d.themeVariables);u.theme&&u.theme in E7&&(u.themeVariables=E7[u.theme].getThemeVariables(v))}return nR=u,Nje(nR),nR},QRt=i=>(B2=id({},ED),B2=id(B2,i),i.theme&&E7[i.theme]&&(B2.themeVariables=E7[i.theme].getThemeVariables(i.themeVariables)),KX(B2,TD),B2),JRt=i=>{Lje=id({},i)},ZRt=i=>(B2=id(B2,i),KX(B2,TD),B2),Mje=()=>id({},B2),Dje=i=>(Nje(i),id(nR,i),Vh()),Vh=()=>id({},nR),Ije=i=>{i&&(["secure",...B2.secure??[]].forEach(s=>{Object.hasOwn(i,s)&&(Xe.debug(`Denied attempt to modify a secure key ${s}`,i[s]),delete i[s])}),Object.keys(i).forEach(s=>{s.startsWith("__")&&delete i[s]}),Object.keys(i).forEach(s=>{typeof i[s]=="string"&&(i[s].includes("<")||i[s].includes(">")||i[s].includes("url(data:"))&&delete i[s],typeof i[s]=="object"&&Ije(i[s])}))},ejt=i=>{SX(i),i.fontFamily&&(!i.themeVariables||!i.themeVariables.fontFamily)&&(i.themeVariables={fontFamily:i.fontFamily}),TD.push(i),KX(B2,TD)},WX=(i=B2)=>{TD=[],KX(i,TD)},tjt={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},Oje={},njt=i=>{Oje[i]||(Xe.warn(tjt[i]),Oje[i]=!0)},Nje=i=>{i&&(i.lazyLoadedDiagrams||i.loadExternalDiagramsAtStartup)&&njt("LAZY_LOAD_DEPRECATED")},Pje="c4",rjt={id:Pje,detector:i=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>wUt);return{id:Pje,diagram:i}}},Bje="flowchart",ijt={id:Bje,detector:(i,s)=>{var u,d;return((u=s==null?void 0:s.flowchart)==null?void 0:u.defaultRenderer)==="dagre-wrapper"||((d=s==null?void 0:s.flowchart)==null?void 0:d.defaultRenderer)==="elk"?!1:/^\s*graph/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>_en);return{id:Bje,diagram:i}}},Fje="flowchart-v2",sjt={id:Fje,detector:(i,s)=>{var u,d,p;return((u=s==null?void 0:s.flowchart)==null?void 0:u.defaultRenderer)==="dagre-d3"||((d=s==null?void 0:s.flowchart)==null?void 0:d.defaultRenderer)==="elk"?!1:/^\s*graph/.test(i)&&((p=s==null?void 0:s.flowchart)==null?void 0:p.defaultRenderer)==="dagre-wrapper"?!0:/^\s*flowchart/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Aen);return{id:Fje,diagram:i}}},Rje="er",ajt={id:Rje,detector:i=>/^\s*erDiagram/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>etn);return{id:Rje,diagram:i}}},jje="gitGraph",ojt={id:jje,detector:i=>/^\s*gitGraph/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Stn);return{id:jje,diagram:i}}},$je="gantt",cjt={id:$je,detector:i=>/^\s*gantt/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>pnn);return{id:$je,diagram:i}}},zje="info",ujt={id:zje,detector:i=>/^\s*info/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>mnn);return{id:zje,diagram:i}}},qje="pie",ljt={id:qje,detector:i=>/^\s*pie/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Enn);return{id:qje,diagram:i}}},Hje="quadrantChart",hjt={id:Hje,detector:i=>/^\s*quadrantChart/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>jnn);return{id:Hje,diagram:i}}},Vje="xychart",fjt={id:Vje,detector:i=>/^\s*xychart-beta/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>urn);return{id:Vje,diagram:i}}},Uje="requirement",djt={id:Uje,detector:i=>/^\s*requirement(Diagram)?/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>wrn);return{id:Uje,diagram:i}}},Gje="sequence",gjt={id:Gje,detector:i=>/^\s*sequenceDiagram/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>kin);return{id:Gje,diagram:i}}},Kje="class",pjt={id:Kje,detector:(i,s)=>{var u;return((u=s==null?void 0:s.class)==null?void 0:u.defaultRenderer)==="dagre-wrapper"?!1:/^\s*classDiagram/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Gin);return{id:Kje,diagram:i}}},Wje="classDiagram",bjt={id:Wje,detector:(i,s)=>{var u;return/^\s*classDiagram/.test(i)&&((u=s==null?void 0:s.class)==null?void 0:u.defaultRenderer)==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Jin);return{id:Wje,diagram:i}}},Yje="state",mjt={id:Yje,detector:(i,s)=>{var u;return((u=s==null?void 0:s.state)==null?void 0:u.defaultRenderer)==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>jsn);return{id:Yje,diagram:i}}},Xje="stateDiagram",vjt={id:Xje,detector:(i,s)=>{var u;return!!(/^\s*stateDiagram-v2/.test(i)||/^\s*stateDiagram/.test(i)&&((u=s==null?void 0:s.state)==null?void 0:u.defaultRenderer)==="dagre-wrapper")},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>ian);return{id:Xje,diagram:i}}},Qje="journey",wjt={id:Qje,detector:i=>/^\s*journey/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Ean);return{id:Qje,diagram:i}}},yjt=function(i,s){for(let u of s)i.attr(u[0],u[1])},xjt=function(i,s,u){let d=new Map;return u?(d.set("width","100%"),d.set("style",`max-width: ${s}px;`)):(d.set("height",i),d.set("width",s)),d},Ng=function(i,s,u,d){const p=xjt(s,u,d);yjt(i,p)},y9=function(i,s,u,d){const p=s.node().getBBox(),v=p.width,b=p.height;Xe.info(`SVG bounds: ${v}x${b}`,p);let y=0,T=0;Xe.info(`Graph bounds: ${y}x${T}`,i),y=v+u*2,T=b+u*2,Xe.info(`Calculated bounds: ${y}x${T}`),Ng(s,T,y,d);const _=`${p.x-u} ${p.y-u} ${p.width+2*u} ${p.height+2*u}`;s.attr("viewBox",_)},YX={},kjt=(i,s,u)=>{let d="";return i in YX&&YX[i]?d=YX[i](u):Xe.warn(`No theme found for ${i}`),` & { + font-family: ${u.fontFamily}; + font-size: ${u.fontSize}; + fill: ${u.textColor} } /* Classes common for multiple diagrams */ & .error-icon { - fill: ${f.errorBkgColor}; + fill: ${u.errorBkgColor}; } & .error-text { - fill: ${f.errorTextColor}; - stroke: ${f.errorTextColor}; + fill: ${u.errorTextColor}; + stroke: ${u.errorTextColor}; } & .edge-thickness-normal { @@ -40,77 +44,341 @@ } & .marker { - fill: ${f.lineColor}; - stroke: ${f.lineColor}; + fill: ${u.lineColor}; + stroke: ${u.lineColor}; } & .marker.cross { - stroke: ${f.lineColor}; + stroke: ${u.lineColor}; } & svg { - font-family: ${f.fontFamily}; - font-size: ${f.fontSize}; + font-family: ${u.fontFamily}; + font-size: ${u.fontSize}; } - ${p} + ${d} - ${a} -`},iAe=(i,a)=>{a!==void 0&&(zW[i]=a)},sAe=rAe;let bdt="",wdt="",vdt="";const mdt=i=>Q1(i,Fd()),hg=()=>{bdt="",vdt="",wdt=""},E0=i=>{bdt=mdt(i).replace(/^\s+/g,"")},fg=()=>bdt,dg=i=>{vdt=mdt(i).replace(/\n\s+/g,` -`)},gg=()=>vdt,Nb=i=>{wdt=mdt(i)},pg=()=>wdt,_Ot=Object.freeze(Object.defineProperty({__proto__:null,clear:hg,getAccDescription:gg,getAccTitle:fg,getDiagramTitle:pg,setAccDescription:dg,setAccTitle:E0,setDiagramTitle:Nb},Symbol.toStringTag,{value:"Module"})),aAe=Ut,oAe=Xft,Oe=Fd,cAe=sOt,SOt=WA,uAe=i=>Q1(i,Oe()),AOt=fT,lAe=()=>_Ot,qW={},HW=(i,a,f)=>{var p;if(qW[i])throw new Error(`Diagram ${i} already registered.`);qW[i]=a,f&&uIt(i,f),iAe(i,a.styles),(p=a.injectUtils)==null||p.call(a,aAe,oAe,Oe,uAe,AOt,lAe(),()=>{})},ydt=i=>{if(i in qW)return qW[i];throw new hAe(i)};class hAe extends Error{constructor(a){super(`Diagram ${a} not found.`)}}const VW=i=>{var w;const{securityLevel:a}=Oe();let f=yr("body");if(a==="sandbox"){const b=((w=yr(`#i${i}`).node())==null?void 0:w.contentDocument)??document;f=yr(b.body)}return f.select(`#${i}`)},LOt={draw:(i,a,f)=>{Ut.debug(`renering svg for syntax error -`);const p=VW(a);p.attr("viewBox","0 0 2412 512"),k0(p,100,512,!0);const w=p.append("g");w.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),w.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),w.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),w.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),w.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),w.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),w.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),w.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${f}`)}},fAe=LOt,dAe={db:{},renderer:LOt,parser:{parser:{yy:{}},parse:()=>{}}},MOt="flowchart-elk",gAe={id:MOt,detector:(i,a)=>{var f;return!!(/^\s*flowchart-elk/.test(i)||/^\s*flowchart|graph/.test(i)&&((f=a==null?void 0:a.flowchart)==null?void 0:f.defaultRenderer)==="elk")},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>xWe);return{id:MOt,diagram:i}}},DOt="timeline",pAe={id:DOt,detector:i=>/^\s*timeline/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>$We);return{id:DOt,diagram:i}}},IOt="mindmap",bAe={id:IOt,detector:i=>/^\s*mindmap/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>bYe);return{id:IOt,diagram:i}}},OOt="sankey",wAe={id:OOt,detector:i=>/^\s*sankey-beta/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>UYe);return{id:OOt,diagram:i}}};let POt=!1;const xdt=()=>{POt||(POt=!0,HW("error",dAe,i=>i.toLowerCase().trim()==="error"),HW("---",{db:{clear:()=>{}},styles:{},renderer:{draw:()=>{}},parser:{parser:{yy:{}},parse:()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")}},init:()=>null},i=>i.toLowerCase().trimStart().startsWith("---")),cIt(RSe,QSe,XSe,zSe,HSe,VSe,GSe,YSe,KSe,gAe,$Se,jSe,bAe,pAe,qSe,JSe,ZSe,tAe,USe,wAe,WSe))};class FOt{constructor(a,f={}){this.text=a,this.metadata=f,this.type="graph",this.text+=` -`;const p=Fd();try{this.type=yW(a,p)}catch(m){this.type="error",this.detectError=m}const w=ydt(this.type);Ut.debug("Type "+this.type),this.db=w.db,this.renderer=w.renderer,this.parser=w.parser,this.parser.parser.yy=this.db,this.init=w.init,this.parse()}parse(){var f,p,w,m,b;if(this.detectError)throw this.detectError;(p=(f=this.db).clear)==null||p.call(f);const a=Fd();(w=this.init)==null||w.call(this,a),this.metadata.title&&((b=(m=this.db).setDiagramTitle)==null||b.call(m,this.metadata.title)),this.parser.parse(this.text)}async render(a,f){await this.renderer.draw(this.text,a,f,this)}getParser(){return this.parser}getType(){return this.type}}const kdt=async(i,a={})=>{const f=yW(i,Fd());try{ydt(f)}catch{const w=ECe(f);if(!w)throw new oIt(`Diagram ${f} not found.`);const{id:m,diagram:b}=await w();HW(m,b)}return new FOt(i,a)};let Edt=[];const vAe=i=>{Edt.push(i)},mAe=()=>{Edt.forEach(i=>{i()}),Edt=[]};var yAe=kIt(Object.keys,Object);const xAe=yAe;var kAe=Object.prototype,EAe=kAe.hasOwnProperty;function NOt(i){if(!_W(i))return xAe(i);var a=[];for(var f in Object(i))EAe.call(i,f)&&f!="constructor"&&a.push(f);return a}var TAe=oT(nm,"DataView");const Tdt=TAe;var CAe=oT(nm,"Promise");const Cdt=CAe;var _Ae=oT(nm,"Set");const KA=_Ae;var SAe=oT(nm,"WeakMap");const _dt=SAe;var BOt="[object Map]",AAe="[object Object]",ROt="[object Promise]",jOt="[object Set]",$Ot="[object WeakMap]",zOt="[object DataView]",LAe=aT(Tdt),MAe=aT(JP),DAe=aT(Cdt),IAe=aT(KA),OAe=aT(_dt),dT=sT;(Tdt&&dT(new Tdt(new ArrayBuffer(1)))!=zOt||JP&&dT(new JP)!=BOt||Cdt&&dT(Cdt.resolve())!=ROt||KA&&dT(new KA)!=jOt||_dt&&dT(new _dt)!=$Ot)&&(dT=function(i){var a=sT(i),f=a==AAe?i.constructor:void 0,p=f?aT(f):"";if(p)switch(p){case LAe:return zOt;case MAe:return BOt;case DAe:return ROt;case IAe:return jOt;case OAe:return $Ot}return a});const XA=dT;var PAe="[object Map]",FAe="[object Set]",NAe=Object.prototype,BAe=NAe.hasOwnProperty;function oF(i){if(i==null)return!0;if(ck(i)&&(If(i)||typeof i=="string"||typeof i.splice=="function"||zA(i)||AW(i)||$A(i)))return!i.length;var a=XA(i);if(a==PAe||a==FAe)return!i.size;if(_W(i))return!NOt(i).length;for(var f in i)if(BAe.call(i,f))return!1;return!0}const RAe="graphics-document document";function jAe(i,a){i.attr("role",RAe),a!==""&&i.attr("aria-roledescription",a)}function $Ae(i,a,f,p){if(i.insert!==void 0){if(f){const w=`chart-desc-${p}`;i.attr("aria-describedby",w),i.insert("desc",":first-child").attr("id",w).text(f)}if(a){const w=`chart-title-${p}`;i.attr("aria-labelledby",w),i.insert("title",":first-child").attr("id",w).text(a)}}}const zAe=i=>i.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart();/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */function qOt(i){return typeof i>"u"||i===null}function qAe(i){return typeof i=="object"&&i!==null}function HAe(i){return Array.isArray(i)?i:qOt(i)?[]:[i]}function VAe(i,a){var f,p,w,m;if(a)for(m=Object.keys(a),f=0,p=m.length;f{s!==void 0&&(YX[i]=s)},Tjt=kjt;let D2e="",I2e="",O2e="";const N2e=i=>Yf(i,Vh()),Pg=()=>{D2e="",O2e="",I2e=""},Bg=i=>{D2e=N2e(i).replace(/^\s+/g,"")},Cp=()=>D2e,Sp=i=>{O2e=N2e(i).replace(/\n\s+/g,` +`)},_p=()=>O2e,cm=i=>{I2e=N2e(i)},Ap=()=>I2e,Jje=Object.freeze(Object.defineProperty({__proto__:null,clear:Pg,getAccDescription:_p,getAccTitle:Cp,getDiagramTitle:Ap,setAccDescription:Sp,setAccTitle:Bg,setDiagramTitle:cm},Symbol.toStringTag,{value:"Module"})),Cjt=Xe,Sjt=fpe,qt=Vh,_jt=Dje,Zje=ED,Ajt=i=>Yf(i,qt()),e$e=y9,Ljt=()=>Jje,XX={},QX=(i,s,u)=>{var d;if(XX[i])throw new Error(`Diagram ${i} already registered.`);XX[i]=s,u&&PRe(i,u),Ejt(i,s.styles),(d=s.injectUtils)==null||d.call(s,Cjt,Sjt,qt,Ajt,e$e,Ljt(),()=>{})},P2e=i=>{if(i in XX)return XX[i];throw new Mjt(i)};class Mjt extends Error{constructor(s){super(`Diagram ${s} not found.`)}}const rR=i=>{var p;const{securityLevel:s}=qt();let u=Ir("body");if(s==="sandbox"){const b=((p=Ir(`#i${i}`).node())==null?void 0:p.contentDocument)??document;u=Ir(b.body)}return u.select(`#${i}`)},t$e={draw:(i,s,u)=>{Xe.debug(`rendering svg for syntax error +`);const d=rR(s),p=d.append("g");d.attr("viewBox","0 0 2412 512"),Ng(d,100,512,!0),p.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),p.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),p.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),p.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),p.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),p.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),p.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),p.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${u}`)}},Djt=t$e,Ijt={db:{},renderer:t$e,parser:{parser:{yy:{}},parse:()=>{}}},n$e="flowchart-elk",Ojt={id:n$e,detector:(i,s)=>{var u;return!!(/^\s*flowchart-elk/.test(i)||/^\s*flowchart|graph/.test(i)&&((u=s==null?void 0:s.flowchart)==null?void 0:u.defaultRenderer)==="elk")},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>jan);return{id:n$e,diagram:i}}},r$e="timeline",Njt={id:r$e,detector:i=>/^\s*timeline/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>ion);return{id:r$e,diagram:i}}},i$e="mindmap",Pjt={id:i$e,detector:i=>/^\s*mindmap/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Ion);return{id:i$e,diagram:i}}},s$e="sankey",Bjt={id:s$e,detector:i=>/^\s*sankey-beta/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>ccn);return{id:s$e,diagram:i}}},a$e="block",Fjt={id:a$e,detector:i=>/^\s*block-beta/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Mcn);return{id:a$e,diagram:i}}};let o$e=!1;const B2e=()=>{o$e||(o$e=!0,QX("error",Ijt,i=>i.toLowerCase().trim()==="error"),QX("---",{db:{clear:()=>{}},styles:{},renderer:{draw:()=>{}},parser:{parser:{yy:{}},parse:()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")}},init:()=>null},i=>i.toLowerCase().trimStart().startsWith("---")),NRe(rjt,bjt,pjt,ajt,cjt,ujt,ljt,djt,gjt,Ojt,sjt,ijt,Pjt,Njt,ojt,vjt,mjt,wjt,hjt,Bjt,fjt,Fjt))};class c$e{constructor(s,u={}){this.text=s,this.metadata=u,this.type="graph",this.text=NRt(s),this.text+=` +`;const d=Vh();try{this.type=_X(s,d)}catch(v){this.type="error",this.detectError=v}const p=P2e(this.type);Xe.debug("Type "+this.type),this.db=p.db,this.renderer=p.renderer,this.parser=p.parser,this.parser.parser.yy=this.db,this.init=p.init,this.parse()}parse(){var u,d,p,v,b;if(this.detectError)throw this.detectError;(d=(u=this.db).clear)==null||d.call(u);const s=Vh();(p=this.init)==null||p.call(this,s),this.metadata.title&&((b=(v=this.db).setDiagramTitle)==null||b.call(v,this.metadata.title)),this.parser.parse(this.text)}async render(s,u){await this.renderer.draw(this.text,s,u,this)}getParser(){return this.parser}getType(){return this.type}}const Rjt=async(i,s={})=>{const u=_X(i,Vh());try{P2e(u)}catch{const p=$Pt(u);if(!p)throw new ORe(`Diagram ${u} not found.`);const{id:v,diagram:b}=await p();QX(v,b)}return new c$e(i,s)};let u$e=[];const jjt=()=>{u$e.forEach(i=>{i()}),u$e=[]};var $jt=WRe(Object.keys,Object);const zjt=$jt;var qjt=Object.prototype,Hjt=qjt.hasOwnProperty;function l$e(i){if(!OX(i))return zjt(i);var s=[];for(var u in Object(i))Hjt.call(i,u)&&u!="constructor"&&s.push(u);return s}var Vjt=MC(N3,"DataView");const F2e=Vjt;var Ujt=MC(N3,"Promise");const R2e=Ujt;var Gjt=MC(N3,"Set");const CD=Gjt;var Kjt=MC(N3,"WeakMap");const j2e=Kjt;var h$e="[object Map]",Wjt="[object Object]",f$e="[object Promise]",d$e="[object Set]",g$e="[object WeakMap]",p$e="[object DataView]",Yjt=LC(F2e),Xjt=LC(WF),Qjt=LC(R2e),Jjt=LC(CD),Zjt=LC(j2e),BC=AC;(F2e&&BC(new F2e(new ArrayBuffer(1)))!=p$e||WF&&BC(new WF)!=h$e||R2e&&BC(R2e.resolve())!=f$e||CD&&BC(new CD)!=d$e||j2e&&BC(new j2e)!=g$e)&&(BC=function(i){var s=AC(i),u=s==Wjt?i.constructor:void 0,d=u?LC(u):"";if(d)switch(d){case Yjt:return p$e;case Xjt:return h$e;case Qjt:return f$e;case Jjt:return d$e;case Zjt:return g$e}return s});const SD=BC;var e$t="[object Map]",t$t="[object Set]",n$t=Object.prototype,r$t=n$t.hasOwnProperty;function iR(i){if(i==null)return!0;if(w9(i)&&(D0(i)||typeof i=="string"||typeof i.splice=="function"||vD(i)||PX(i)||mD(i)))return!i.length;var s=SD(i);if(s==e$t||s==t$t)return!i.size;if(OX(i))return!l$e(i).length;for(var u in i)if(r$t.call(i,u))return!1;return!0}const i$t="graphics-document document";function s$t(i,s){i.attr("role",i$t),s!==""&&i.attr("aria-roledescription",s)}function a$t(i,s,u,d){if(i.insert!==void 0){if(u){const p=`chart-desc-${d}`;i.attr("aria-describedby",p),i.insert("desc",":first-child").attr("id",p).text(u)}if(s){const p=`chart-title-${d}`;i.attr("aria-labelledby",p),i.insert("title",":first-child").attr("id",p).text(s)}}}const o$t=i=>i.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart();/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */function b$e(i){return typeof i>"u"||i===null}function c$t(i){return typeof i=="object"&&i!==null}function u$t(i){return Array.isArray(i)?i:b$e(i)?[]:[i]}function l$t(i,s){var u,d,p,v;if(s)for(v=Object.keys(s),u=0,d=v.length;uE&&(m=" ... ",a=p-E+m.length),f-p>E&&(b=" ...",f=p+E-b.length),{str:m+i.slice(a,f).replace(/\t/g,"→")+b,pos:p-a+m.length}}function Adt(i,a){return bg.repeat(" ",a-i.length)+i}function JAe(i,a){if(a=Object.create(a||null),!i.buffer)return null;a.maxLength||(a.maxLength=79),typeof a.indent!="number"&&(a.indent=1),typeof a.linesBefore!="number"&&(a.linesBefore=3),typeof a.linesAfter!="number"&&(a.linesAfter=2);for(var f=/\r?\n|\r|\0/g,p=[0],w=[],m,b=-1;m=f.exec(i.buffer);)w.push(m.index),p.push(m.index+m[0].length),i.position<=m.index&&b<0&&(b=p.length-2);b<0&&(b=p.length-1);var E="",_,A,I=Math.min(i.line+a.linesAfter,w.length).toString().length,B=a.maxLength-(a.indent+I+3);for(_=1;_<=a.linesBefore&&!(b-_<0);_++)A=Sdt(i.buffer,p[b-_],w[b-_],i.position-(p[b]-p[b-_]),B),E=bg.repeat(" ",a.indent)+Adt((i.line-_+1).toString(),I)+" | "+A.str+` -`+E;for(A=Sdt(i.buffer,p[b],w[b],i.position,B),E+=bg.repeat(" ",a.indent)+Adt((i.line+1).toString(),I)+" | "+A.str+` -`,E+=bg.repeat("-",a.indent+I+3+A.pos)+`^ -`,_=1;_<=a.linesAfter&&!(b+_>=w.length);_++)A=Sdt(i.buffer,p[b+_],w[b+_],i.position-(p[b]-p[b+_]),B),E+=bg.repeat(" ",a.indent)+Adt((i.line+_+1).toString(),I)+" | "+A.str+` -`;return E.replace(/\n$/,"")}var tLe=JAe,eLe=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],nLe=["scalar","sequence","mapping"];function rLe(i){var a={};return i!==null&&Object.keys(i).forEach(function(f){i[f].forEach(function(p){a[String(p)]=f})}),a}function iLe(i,a){if(a=a||{},Object.keys(a).forEach(function(f){if(eLe.indexOf(f)===-1)throw new A5('Unknown option "'+f+'" is met in definition of "'+i+'" YAML type.')}),this.options=a,this.tag=i,this.kind=a.kind||null,this.resolve=a.resolve||function(){return!0},this.construct=a.construct||function(f){return f},this.instanceOf=a.instanceOf||null,this.predicate=a.predicate||null,this.represent=a.represent||null,this.representName=a.representName||null,this.defaultStyle=a.defaultStyle||null,this.multi=a.multi||!1,this.styleAliases=rLe(a.styleAliases||null),nLe.indexOf(this.kind)===-1)throw new A5('Unknown kind "'+this.kind+'" is specified for "'+i+'" YAML type.')}var T0=iLe;function VOt(i,a){var f=[];return i[a].forEach(function(p){var w=f.length;f.forEach(function(m,b){m.tag===p.tag&&m.kind===p.kind&&m.multi===p.multi&&(w=b)}),f[w]=p}),f}function sLe(){var i={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},a,f;function p(w){w.multi?(i.multi[w.kind].push(w),i.multi.fallback.push(w)):i[w.kind][w.tag]=i.fallback[w.tag]=w}for(a=0,f=arguments.length;a=0?"0b"+i.toString(2):"-0b"+i.toString(2).slice(1)},octal:function(i){return i>=0?"0o"+i.toString(8):"-0o"+i.toString(8).slice(1)},decimal:function(i){return i.toString(10)},hexadecimal:function(i){return i>=0?"0x"+i.toString(16).toUpperCase():"-0x"+i.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),_Le=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function SLe(i){return!(i===null||!_Le.test(i)||i[i.length-1]==="_")}function ALe(i){var a,f;return a=i.replace(/_/g,"").toLowerCase(),f=a[0]==="-"?-1:1,"+-".indexOf(a[0])>=0&&(a=a.slice(1)),a===".inf"?f===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:a===".nan"?NaN:f*parseFloat(a,10)}var LLe=/^[-+]?[0-9]+e/;function MLe(i,a){var f;if(isNaN(i))switch(a){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===i)switch(a){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===i)switch(a){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(bg.isNegativeZero(i))return"-0.0";return f=i.toString(10),LLe.test(f)?f.replace("e",".e"):f}function DLe(i){return Object.prototype.toString.call(i)==="[object Number]"&&(i%1!==0||bg.isNegativeZero(i))}var ILe=new T0("tag:yaml.org,2002:float",{kind:"scalar",resolve:SLe,construct:ALe,predicate:DLe,represent:MLe,defaultStyle:"lowercase"}),GOt=lLe.extend({implicit:[gLe,vLe,CLe,ILe]}),OLe=GOt,UOt=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),WOt=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function PLe(i){return i===null?!1:UOt.exec(i)!==null||WOt.exec(i)!==null}function FLe(i){var a,f,p,w,m,b,E,_=0,A=null,I,B,N;if(a=UOt.exec(i),a===null&&(a=WOt.exec(i)),a===null)throw new Error("Date resolve error");if(f=+a[1],p=+a[2]-1,w=+a[3],!a[4])return new Date(Date.UTC(f,p,w));if(m=+a[4],b=+a[5],E=+a[6],a[7]){for(_=a[7].slice(0,3);_.length<3;)_+="0";_=+_}return a[9]&&(I=+a[10],B=+(a[11]||0),A=(I*60+B)*6e4,a[9]==="-"&&(A=-A)),N=new Date(Date.UTC(f,p,w,m,b,E,_)),A&&N.setTime(N.getTime()-A),N}function NLe(i){return i.toISOString()}var BLe=new T0("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:PLe,construct:FLe,instanceOf:Date,represent:NLe});function RLe(i){return i==="<<"||i===null}var jLe=new T0("tag:yaml.org,2002:merge",{kind:"scalar",resolve:RLe}),Mdt=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= -\r`;function $Le(i){if(i===null)return!1;var a,f,p=0,w=i.length,m=Mdt;for(f=0;f64)){if(a<0)return!1;p+=6}return p%8===0}function zLe(i){var a,f,p=i.replace(/[\r\n=]/g,""),w=p.length,m=Mdt,b=0,E=[];for(a=0;a>16&255),E.push(b>>8&255),E.push(b&255)),b=b<<6|m.indexOf(p.charAt(a));return f=w%4*6,f===0?(E.push(b>>16&255),E.push(b>>8&255),E.push(b&255)):f===18?(E.push(b>>10&255),E.push(b>>2&255)):f===12&&E.push(b>>4&255),new Uint8Array(E)}function qLe(i){var a="",f=0,p,w,m=i.length,b=Mdt;for(p=0;p>18&63],a+=b[f>>12&63],a+=b[f>>6&63],a+=b[f&63]),f=(f<<8)+i[p];return w=m%3,w===0?(a+=b[f>>18&63],a+=b[f>>12&63],a+=b[f>>6&63],a+=b[f&63]):w===2?(a+=b[f>>10&63],a+=b[f>>4&63],a+=b[f<<2&63],a+=b[64]):w===1&&(a+=b[f>>2&63],a+=b[f<<4&63],a+=b[64],a+=b[64]),a}function HLe(i){return Object.prototype.toString.call(i)==="[object Uint8Array]"}var VLe=new T0("tag:yaml.org,2002:binary",{kind:"scalar",resolve:$Le,construct:zLe,predicate:HLe,represent:qLe}),GLe=Object.prototype.hasOwnProperty,ULe=Object.prototype.toString;function WLe(i){if(i===null)return!0;var a=[],f,p,w,m,b,E=i;for(f=0,p=E.length;f>10)+55296,(i-65536&1023)+56320)}for(var ePt=new Array(256),nPt=new Array(256),ZA=0;ZA<256;ZA++)ePt[ZA]=tPt(ZA)?1:0,nPt[ZA]=tPt(ZA);function dMe(i,a){this.input=i,this.filename=a.filename||null,this.schema=a.schema||iMe,this.onWarning=a.onWarning||null,this.legacy=a.legacy||!1,this.json=a.json||!1,this.listener=a.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=i.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function rPt(i,a){var f={name:i.filename,buffer:i.input.slice(0,-1),position:i.position,line:i.line,column:i.position-i.lineStart};return f.snippet=tLe(f),new A5(a,f)}function Ss(i,a){throw rPt(i,a)}function WW(i,a){i.onWarning&&i.onWarning.call(null,rPt(i,a))}var iPt={YAML:function(a,f,p){var w,m,b;a.version!==null&&Ss(a,"duplication of %YAML directive"),p.length!==1&&Ss(a,"YAML directive accepts exactly one argument"),w=/^([0-9]+)\.([0-9]+)$/.exec(p[0]),w===null&&Ss(a,"ill-formed argument of the YAML directive"),m=parseInt(w[1],10),b=parseInt(w[2],10),m!==1&&Ss(a,"unacceptable YAML version of the document"),a.version=p[0],a.checkLineBreaks=b<2,b!==1&&b!==2&&WW(a,"unsupported YAML version of the document")},TAG:function(a,f,p){var w,m;p.length!==2&&Ss(a,"TAG directive accepts exactly two arguments"),w=p[0],m=p[1],QOt.test(w)||Ss(a,"ill-formed tag handle (first argument) of the TAG directive"),lk.call(a.tagMap,w)&&Ss(a,'there is a previously declared suffix for "'+w+'" tag handle'),ZOt.test(m)||Ss(a,"ill-formed tag prefix (second argument) of the TAG directive");try{m=decodeURIComponent(m)}catch{Ss(a,"tag prefix is malformed: "+m)}a.tagMap[w]=m}};function hk(i,a,f,p){var w,m,b,E;if(a1&&(i.result+=bg.repeat(` -`,a-1))}function gMe(i,a,f){var p,w,m,b,E,_,A,I,B=i.kind,N=i.result,R;if(R=i.input.charCodeAt(i.position),dp(R)||QA(R)||R===35||R===38||R===42||R===33||R===124||R===62||R===39||R===34||R===37||R===64||R===96||(R===63||R===45)&&(w=i.input.charCodeAt(i.position+1),dp(w)||f&&QA(w)))return!1;for(i.kind="scalar",i.result="",m=b=i.position,E=!1;R!==0;){if(R===58){if(w=i.input.charCodeAt(i.position+1),dp(w)||f&&QA(w))break}else if(R===35){if(p=i.input.charCodeAt(i.position-1),dp(p))break}else{if(i.position===i.lineStart&&YW(i)||f&&QA(R))break;if(g3(R))if(_=i.line,A=i.lineStart,I=i.lineIndent,Pf(i,!1,-1),i.lineIndent>=a){E=!0,R=i.input.charCodeAt(i.position);continue}else{i.position=b,i.line=_,i.lineStart=A,i.lineIndent=I;break}}E&&(hk(i,m,b,!1),Odt(i,i.line-_),m=b=i.position,E=!1),gT(R)||(b=i.position+1),R=i.input.charCodeAt(++i.position)}return hk(i,m,b,!1),i.result?!0:(i.kind=B,i.result=N,!1)}function pMe(i,a){var f,p,w;if(f=i.input.charCodeAt(i.position),f!==39)return!1;for(i.kind="scalar",i.result="",i.position++,p=w=i.position;(f=i.input.charCodeAt(i.position))!==0;)if(f===39)if(hk(i,p,i.position,!0),f=i.input.charCodeAt(++i.position),f===39)p=i.position,i.position++,w=i.position;else return!0;else g3(f)?(hk(i,p,w,!0),Odt(i,Pf(i,!1,a)),p=w=i.position):i.position===i.lineStart&&YW(i)?Ss(i,"unexpected end of the document within a single quoted scalar"):(i.position++,w=i.position);Ss(i,"unexpected end of the stream within a single quoted scalar")}function bMe(i,a){var f,p,w,m,b,E;if(E=i.input.charCodeAt(i.position),E!==34)return!1;for(i.kind="scalar",i.result="",i.position++,f=p=i.position;(E=i.input.charCodeAt(i.position))!==0;){if(E===34)return hk(i,f,i.position,!0),i.position++,!0;if(E===92){if(hk(i,f,i.position,!0),E=i.input.charCodeAt(++i.position),g3(E))Pf(i,!1,a);else if(E<256&&ePt[E])i.result+=nPt[E],i.position++;else if((b=lMe(E))>0){for(w=b,m=0;w>0;w--)E=i.input.charCodeAt(++i.position),(b=uMe(E))>=0?m=(m<<4)+b:Ss(i,"expected hexadecimal character");i.result+=fMe(m),i.position++}else Ss(i,"unknown escape sequence");f=p=i.position}else g3(E)?(hk(i,f,p,!0),Odt(i,Pf(i,!1,a)),f=p=i.position):i.position===i.lineStart&&YW(i)?Ss(i,"unexpected end of the document within a double quoted scalar"):(i.position++,p=i.position)}Ss(i,"unexpected end of the stream within a double quoted scalar")}function wMe(i,a){var f=!0,p,w,m,b=i.tag,E,_=i.anchor,A,I,B,N,R,z=Object.create(null),W,et,st,at;if(at=i.input.charCodeAt(i.position),at===91)I=93,R=!1,E=[];else if(at===123)I=125,R=!0,E={};else return!1;for(i.anchor!==null&&(i.anchorMap[i.anchor]=E),at=i.input.charCodeAt(++i.position);at!==0;){if(Pf(i,!0,a),at=i.input.charCodeAt(i.position),at===I)return i.position++,i.tag=b,i.anchor=_,i.kind=R?"mapping":"sequence",i.result=E,!0;f?at===44&&Ss(i,"expected the node content, but found ','"):Ss(i,"missed comma between flow collection entries"),et=W=st=null,B=N=!1,at===63&&(A=i.input.charCodeAt(i.position+1),dp(A)&&(B=N=!0,i.position++,Pf(i,!0,a))),p=i.line,w=i.lineStart,m=i.position,tL(i,a,GW,!1,!0),et=i.tag,W=i.result,Pf(i,!0,a),at=i.input.charCodeAt(i.position),(N||i.line===p)&&at===58&&(B=!0,at=i.input.charCodeAt(++i.position),Pf(i,!0,a),tL(i,a,GW,!1,!0),st=i.result),R?JA(i,E,z,et,W,st,p,w,m):B?E.push(JA(i,null,z,et,W,st,p,w,m)):E.push(W),Pf(i,!0,a),at=i.input.charCodeAt(i.position),at===44?(f=!0,at=i.input.charCodeAt(++i.position)):f=!1}Ss(i,"unexpected end of the stream within a flow collection")}function vMe(i,a){var f,p,w=Ddt,m=!1,b=!1,E=a,_=0,A=!1,I,B;if(B=i.input.charCodeAt(i.position),B===124)p=!1;else if(B===62)p=!0;else return!1;for(i.kind="scalar",i.result="";B!==0;)if(B=i.input.charCodeAt(++i.position),B===43||B===45)Ddt===w?w=B===43?XOt:sMe:Ss(i,"repeat of a chomping mode identifier");else if((I=hMe(B))>=0)I===0?Ss(i,"bad explicit indentation width of a block scalar; it cannot be less than one"):b?Ss(i,"repeat of an indentation width identifier"):(E=a+I-1,b=!0);else break;if(gT(B)){do B=i.input.charCodeAt(++i.position);while(gT(B));if(B===35)do B=i.input.charCodeAt(++i.position);while(!g3(B)&&B!==0)}for(;B!==0;){for(Idt(i),i.lineIndent=0,B=i.input.charCodeAt(i.position);(!b||i.lineIndentE&&(E=i.lineIndent),g3(B)){_++;continue}if(i.lineIndenta)&&_!==0)Ss(i,"bad indentation of a sequence entry");else if(i.lineIndenta)&&(et&&(b=i.line,E=i.lineStart,_=i.position),tL(i,a,UW,!0,w)&&(et?z=i.result:W=i.result),et||(JA(i,B,N,R,z,W,b,E,_),R=z=W=null),Pf(i,!0,-1),at=i.input.charCodeAt(i.position)),(i.line===m||i.lineIndent>a)&&at!==0)Ss(i,"bad indentation of a mapping entry");else if(i.lineIndenta?_=1:i.lineIndent===a?_=0:i.lineIndenta?_=1:i.lineIndent===a?_=0:i.lineIndent tag; it should be "scalar", not "'+i.kind+'"'),B=0,N=i.implicitTypes.length;B"),i.result!==null&&z.kind!==i.kind&&Ss(i,"unacceptable node kind for !<"+i.tag+'> tag; it should be "'+z.kind+'", not "'+i.kind+'"'),z.resolve(i.result,i.tag)?(i.result=z.construct(i.result,i.tag),i.anchor!==null&&(i.anchorMap[i.anchor]=i.result)):Ss(i,"cannot resolve a node with !<"+i.tag+"> explicit tag")}return i.listener!==null&&i.listener("close",i),i.tag!==null||i.anchor!==null||I}function EMe(i){var a=i.position,f,p,w,m=!1,b;for(i.version=null,i.checkLineBreaks=i.legacy,i.tagMap=Object.create(null),i.anchorMap=Object.create(null);(b=i.input.charCodeAt(i.position))!==0&&(Pf(i,!0,-1),b=i.input.charCodeAt(i.position),!(i.lineIndent>0||b!==37));){for(m=!0,b=i.input.charCodeAt(++i.position),f=i.position;b!==0&&!dp(b);)b=i.input.charCodeAt(++i.position);for(p=i.input.slice(f,i.position),w=[],p.length<1&&Ss(i,"directive name must not be less than one character in length");b!==0;){for(;gT(b);)b=i.input.charCodeAt(++i.position);if(b===35){do b=i.input.charCodeAt(++i.position);while(b!==0&&!g3(b));break}if(g3(b))break;for(f=i.position;b!==0&&!dp(b);)b=i.input.charCodeAt(++i.position);w.push(i.input.slice(f,i.position))}b!==0&&Idt(i),lk.call(iPt,p)?iPt[p](i,p,w):WW(i,'unknown document directive "'+p+'"')}if(Pf(i,!0,-1),i.lineIndent===0&&i.input.charCodeAt(i.position)===45&&i.input.charCodeAt(i.position+1)===45&&i.input.charCodeAt(i.position+2)===45?(i.position+=3,Pf(i,!0,-1)):m&&Ss(i,"directives end mark is expected"),tL(i,i.lineIndent-1,UW,!1,!0),Pf(i,!0,-1),i.checkLineBreaks&&oMe.test(i.input.slice(a,i.position))&&WW(i,"non-ASCII line breaks are interpreted as content"),i.documents.push(i.result),i.position===i.lineStart&&YW(i)){i.input.charCodeAt(i.position)===46&&(i.position+=3,Pf(i,!0,-1));return}if(i.position"u"&&(f=a,a=null);var p=oPt(i,f);if(typeof a!="function")return p;for(var w=0,m=p.length;wi.replace(/\r\n?/g,` -`).replace(/<(\w+)([^>]*)>/g,(a,f,p)=>"<"+f+p.replace(/="([^"]*)"/g,"='$1'")+">"),OMe=i=>{const{text:a,metadata:f}=DMe(i),{displayMode:p,title:w,config:m={}}=f;return p&&(m.gantt||(m.gantt={}),m.gantt.displayMode=p),{title:w,config:m,text:a}},PMe=i=>{const a=$a.detectInit(i)??{},f=$a.detectDirective(i,"wrap");return Array.isArray(f)?a.wrap=f.some(({type:p})=>{}):(f==null?void 0:f.type)==="wrap"&&(a.wrap=!0),{text:nSe(i),directive:a}};function FMe(i){const a=IMe(i),f=OMe(a),p=PMe(f.text),w=rF(f.config,p.directive);return i=zAe(p.text),{code:i,title:f.title,config:w}}const NMe=5e4,BMe="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",RMe="sandbox",jMe="loose",$Me="http://www.w3.org/2000/svg",zMe="http://www.w3.org/1999/xlink",qMe="http://www.w3.org/1999/xhtml",HMe="100%",VMe="100%",GMe="border:0;margin:0;",UMe="margin:0",WMe="allow-top-navigation-by-user-activation allow-popups",YMe='The "iframe" tag is not supported by your browser.',KMe=["foreignobject"],XMe=["dominant-baseline"];function cPt(i){const a=FMe(i);return $W(),FSe(a.config??{}),a}async function QMe(i,a){xdt(),i=cPt(i).code;try{await kdt(i)}catch(f){if(a!=null&&a.suppressErrors)return!1;throw f}return!0}const ZMe=function(i){let a=i;return a=a.replace(/style.*:\S*#.*;/g,function(f){return f.substring(0,f.length-1)}),a=a.replace(/classDef.*:\S*#.*;/g,function(f){return f.substring(0,f.length-1)}),a=a.replace(/#\w+;/g,function(f){const p=f.substring(1,f.length-1);return/^\+?\d+$/.test(p)?"fl°°"+p+"¶ß":"fl°"+p+"¶ß"}),a},uF=function(i){return i.replace(/fl°°/g,"&#").replace(/fl°/g,"&").replace(/¶ß/g,";")},uPt=(i,a,f=[])=>` -.${i} ${a} { ${f.join(" !important; ")} !important; }`,JMe=(i,a={})=>{var p;let f="";if(i.themeCSS!==void 0&&(f+=` -${i.themeCSS}`),i.fontFamily!==void 0&&(f+=` -:root { --mermaid-font-family: ${i.fontFamily}}`),i.altFontFamily!==void 0&&(f+=` -:root { --mermaid-alt-font-family: ${i.altFontFamily}}`),!oF(a)){const E=i.htmlLabels||((p=i.flowchart)==null?void 0:p.htmlLabels)?["> *","span"]:["rect","polygon","ellipse","circle","path"];for(const _ in a){const A=a[_];oF(A.styles)||E.forEach(I=>{f+=uPt(A.id,I,A.styles)}),oF(A.textStyles)||(f+=uPt(A.id,"tspan",A.textStyles))}}return f},tDe=(i,a,f,p)=>{const w=JMe(i,f),m=sAe(a,w,i.themeVariables);return pdt(LSe(`${p}{${m}}`),DSe)},eDe=(i="",a,f)=>{let p=i;return!f&&!a&&(p=p.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),p=uF(p),p=p.replace(/
/g,"
"),p},nDe=(i="",a)=>{var w,m;const f=(m=(w=a==null?void 0:a.viewBox)==null?void 0:w.baseVal)!=null&&m.height?a.viewBox.baseVal.height+"px":VMe,p=btoa(''+i+"");return``},lPt=(i,a,f,p,w)=>{const m=i.append("div");m.attr("id",f),p&&m.attr("style",p);const b=m.append("svg").attr("id",a).attr("width","100%").attr("xmlns",$Me);return w&&b.attr("xmlns:xlink",w),b.append("g"),i};function hPt(i,a){return i.append("iframe").attr("id",a).attr("style","width: 100%; height: 100%;").attr("sandbox","")}const rDe=(i,a,f,p)=>{var w,m,b;(w=i.getElementById(a))==null||w.remove(),(m=i.getElementById(f))==null||m.remove(),(b=i.getElementById(p))==null||b.remove()},iDe=async function(i,a,f){var nt,It,Ot,Bt,Et,Z;xdt();const p=cPt(a);a=p.code;const w=Fd();Ut.debug(w),a.length>((w==null?void 0:w.maxTextSize)??NMe)&&(a=BMe);const m="#"+i,b="i"+i,E="#"+b,_="d"+i,A="#"+_;let I=yr("body");const B=w.securityLevel===RMe,N=w.securityLevel===jMe,R=w.fontFamily;if(f!==void 0){if(f&&(f.innerHTML=""),B){const Ct=hPt(yr(f),b);I=yr(Ct.nodes()[0].contentDocument.body),I.node().style.margin=0}else I=yr(f);lPt(I,i,_,`font-family: ${R}`,zMe)}else{if(rDe(document,i,_,b),B){const Ct=hPt(yr("body"),b);I=yr(Ct.nodes()[0].contentDocument.body),I.node().style.margin=0}else I=yr("body");lPt(I,i,_)}a=ZMe(a);let z,W;try{z=await kdt(a,{title:p.title})}catch(Ct){z=new FOt("error"),W=Ct}const et=I.select(A).node(),st=z.type,at=et.firstChild,bt=at.firstChild,mt=(It=(nt=z.renderer).getClasses)==null?void 0:It.call(nt,a,z),yt=tDe(w,st,mt,m),ft=document.createElement("style");ft.innerHTML=yt,at.insertBefore(ft,bt);try{await z.renderer.draw(a,i,nOt,z)}catch(Ct){throw fAe.draw(a,i,nOt),Ct}const ut=I.select(`${A} svg`),vt=(Bt=(Ot=z.db).getAccTitle)==null?void 0:Bt.call(Ot),X=(Z=(Et=z.db).getAccDescription)==null?void 0:Z.call(Et);aDe(st,ut,vt,X),I.select(`[id="${i}"]`).selectAll("foreignobject > *").attr("xmlns",qMe);let pt=I.select(A).node().innerHTML;if(Ut.debug("config.arrowMarkerAbsolute",w.arrowMarkerAbsolute),pt=eDe(pt,B,o1(w.arrowMarkerAbsolute)),B){const Ct=I.select(A+" svg").node();pt=nDe(pt,Ct)}else N||(pt=lW.sanitize(pt,{ADD_TAGS:KMe,ADD_ATTR:XMe}));if(mAe(),W)throw W;const Tt=yr(B?E:A).node();return Tt&&"remove"in Tt&&Tt.remove(),{svg:pt,bindFunctions:z.db.bindFunctions}};function sDe(i={}){var f;i!=null&&i.fontFamily&&!((f=i.themeVariables)!=null&&f.fontFamily)&&(i.themeVariables||(i.themeVariables={}),i.themeVariables.fontFamily=i.fontFamily),OSe(i),i!=null&&i.theme&&i.theme in T5?i.themeVariables=T5[i.theme].getThemeVariables(i.themeVariables):i&&(i.themeVariables=T5.default.getThemeVariables(i.themeVariables));const a=typeof i=="object"?ISe(i):iOt();Xft(a.logLevel),xdt()}function aDe(i,a,f,p){jAe(a,i),$Ae(a,f,p,a.attr("id"))}const pT=Object.freeze({render:iDe,parse:QMe,getDiagramFromText:kdt,initialize:sDe,getConfig:Fd,setConfig:sOt,getSiteConfig:iOt,updateSiteConfig:PSe,reset:()=>{$W()},globalReset:()=>{$W(WA)},defaultConfig:WA});Xft(Fd().logLevel),$W(Fd());const oDe=async()=>{Ut.debug("Loading registered diagrams");const a=(await Promise.allSettled(Object.entries(NA).map(async([f,{detector:p,loader:w}])=>{if(w)try{ydt(f)}catch{try{const{diagram:b,id:E}=await w();HW(E,b,p)}catch(b){throw Ut.error(`Failed to load external diagram with key ${f}. Removing from detectors.`),delete NA[f],b}}}))).filter(f=>f.status==="rejected");if(a.length>0){Ut.error(`Failed to load ${a.length} external diagrams`);for(const f of a)Ut.error(f);throw new Error(`Failed to load ${a.length} external diagrams`)}},cDe=(i,a,f)=>{Ut.warn(i),WIt(i)?(f&&f(i.str,i.hash),a.push({...i,message:i.str,error:i})):(f&&f(i),i instanceof Error&&a.push({str:i.message,message:i.message,hash:i.name,error:i}))},fPt=async function(i={querySelector:".mermaid"}){try{await uDe(i)}catch(a){if(WIt(a)&&Ut.error(a.str),Bb.parseError&&Bb.parseError(a),!i.suppressErrors)throw Ut.error("Use the suppressErrors option to suppress these errors"),a}},uDe=async function({postRenderCallback:i,querySelector:a,nodes:f}={querySelector:".mermaid"}){const p=pT.getConfig();Ut.debug(`${i?"":"No "}Callback function found`);let w;if(f)w=f;else if(a)w=document.querySelectorAll(a);else throw new Error("Nodes and querySelector are both undefined");Ut.debug(`Found ${w.length} diagrams`),(p==null?void 0:p.startOnLoad)!==void 0&&(Ut.debug("Start On Load: "+(p==null?void 0:p.startOnLoad)),pT.updateSiteConfig({startOnLoad:p==null?void 0:p.startOnLoad}));const m=new $a.InitIDGenerator(p.deterministicIds,p.deterministicIDSeed);let b;const E=[];for(const _ of Array.from(w)){Ut.info("Rendering diagram: "+_.id);/*! Check if previously processed */if(_.getAttribute("data-processed"))continue;_.setAttribute("data-processed","true");const A=`mermaid-${m.next()}`;b=_.innerHTML,b=xA($a.entityDecode(b)).trim().replace(//gi,"
");const I=$a.detectInit(b);I&&Ut.debug("Detected early reinit: ",I);try{const{svg:B,bindFunctions:N}=await bPt(A,b,_);_.innerHTML=B,i&&await i(A),N&&N(_)}catch(B){cDe(B,E,Bb.parseError)}}if(E.length>0)throw E[0]},dPt=function(i){pT.initialize(i)},lDe=async function(i,a,f){Ut.warn("mermaid.init is deprecated. Please use run instead."),i&&dPt(i);const p={postRenderCallback:f,querySelector:".mermaid"};typeof a=="string"?p.querySelector=a:a&&(a instanceof HTMLElement?p.nodes=[a]:p.nodes=a),await fPt(p)},hDe=async(i,{lazyLoad:a=!0}={})=>{cIt(...i),a===!1&&await oDe()},gPt=function(){if(Bb.startOnLoad){const{startOnLoad:i}=pT.getConfig();i&&Bb.run().catch(a=>Ut.error("Mermaid failed to initialize",a))}};if(typeof document<"u"){/*! +`+i.mark.snippet),d+" "+u):d}function sR(i,s){Error.call(this),this.name="YAMLException",this.reason=i,this.mark=s,this.message=m$e(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}sR.prototype=Object.create(Error.prototype),sR.prototype.constructor=sR,sR.prototype.toString=function(s){return this.name+": "+m$e(this,s)};var A7=sR;function $2e(i,s,u,d,p){var v="",b="",y=Math.floor(p/2)-1;return d-s>y&&(v=" ... ",s=d-y+v.length),u-d>y&&(b=" ...",u=d+y-b.length),{str:v+i.slice(s,u).replace(/\t/g,"→")+b,pos:d-s+v.length}}function z2e(i,s){return Lp.repeat(" ",s-i.length)+i}function w$t(i,s){if(s=Object.create(s||null),!i.buffer)return null;s.maxLength||(s.maxLength=79),typeof s.indent!="number"&&(s.indent=1),typeof s.linesBefore!="number"&&(s.linesBefore=3),typeof s.linesAfter!="number"&&(s.linesAfter=2);for(var u=/\r?\n|\r|\0/g,d=[0],p=[],v,b=-1;v=u.exec(i.buffer);)p.push(v.index),d.push(v.index+v[0].length),i.position<=v.index&&b<0&&(b=d.length-2);b<0&&(b=d.length-1);var y="",T,_,A=Math.min(i.line+s.linesAfter,p.length).toString().length,P=s.maxLength-(s.indent+A+3);for(T=1;T<=s.linesBefore&&!(b-T<0);T++)_=$2e(i.buffer,d[b-T],p[b-T],i.position-(d[b]-d[b-T]),P),y=Lp.repeat(" ",s.indent)+z2e((i.line-T+1).toString(),A)+" | "+_.str+` +`+y;for(_=$2e(i.buffer,d[b],p[b],i.position,P),y+=Lp.repeat(" ",s.indent)+z2e((i.line+1).toString(),A)+" | "+_.str+` +`,y+=Lp.repeat("-",s.indent+A+3+_.pos)+`^ +`,T=1;T<=s.linesAfter&&!(b+T>=p.length);T++)_=$2e(i.buffer,d[b+T],p[b+T],i.position-(d[b]-d[b+T]),P),y+=Lp.repeat(" ",s.indent)+z2e((i.line+T+1).toString(),A)+" | "+_.str+` +`;return y.replace(/\n$/,"")}var y$t=w$t,x$t=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],k$t=["scalar","sequence","mapping"];function E$t(i){var s={};return i!==null&&Object.keys(i).forEach(function(u){i[u].forEach(function(d){s[String(d)]=u})}),s}function T$t(i,s){if(s=s||{},Object.keys(s).forEach(function(u){if(x$t.indexOf(u)===-1)throw new A7('Unknown option "'+u+'" is met in definition of "'+i+'" YAML type.')}),this.options=s,this.tag=i,this.kind=s.kind||null,this.resolve=s.resolve||function(){return!0},this.construct=s.construct||function(u){return u},this.instanceOf=s.instanceOf||null,this.predicate=s.predicate||null,this.represent=s.represent||null,this.representName=s.representName||null,this.defaultStyle=s.defaultStyle||null,this.multi=s.multi||!1,this.styleAliases=E$t(s.styleAliases||null),k$t.indexOf(this.kind)===-1)throw new A7('Unknown kind "'+this.kind+'" is specified for "'+i+'" YAML type.')}var Fg=T$t;function v$e(i,s){var u=[];return i[s].forEach(function(d){var p=u.length;u.forEach(function(v,b){v.tag===d.tag&&v.kind===d.kind&&v.multi===d.multi&&(p=b)}),u[p]=d}),u}function C$t(){var i={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},s,u;function d(p){p.multi?(i.multi[p.kind].push(p),i.multi.fallback.push(p)):i[p.kind][p.tag]=i.fallback[p.tag]=p}for(s=0,u=arguments.length;s=0?"0b"+i.toString(2):"-0b"+i.toString(2).slice(1)},octal:function(i){return i>=0?"0o"+i.toString(8):"-0o"+i.toString(8).slice(1)},decimal:function(i){return i.toString(10)},hexadecimal:function(i){return i>=0?"0x"+i.toString(16).toUpperCase():"-0x"+i.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),G$t=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function K$t(i){return!(i===null||!G$t.test(i)||i[i.length-1]==="_")}function W$t(i){var s,u;return s=i.replace(/_/g,"").toLowerCase(),u=s[0]==="-"?-1:1,"+-".indexOf(s[0])>=0&&(s=s.slice(1)),s===".inf"?u===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:s===".nan"?NaN:u*parseFloat(s,10)}var Y$t=/^[-+]?[0-9]+e/;function X$t(i,s){var u;if(isNaN(i))switch(s){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===i)switch(s){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===i)switch(s){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(Lp.isNegativeZero(i))return"-0.0";return u=i.toString(10),Y$t.test(u)?u.replace("e",".e"):u}function Q$t(i){return Object.prototype.toString.call(i)==="[object Number]"&&(i%1!==0||Lp.isNegativeZero(i))}var J$t=new Fg("tag:yaml.org,2002:float",{kind:"scalar",resolve:K$t,construct:W$t,predicate:Q$t,represent:X$t,defaultStyle:"lowercase"}),w$e=M$t.extend({implicit:[N$t,R$t,U$t,J$t]}),Z$t=w$e,y$e=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),x$e=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function ezt(i){return i===null?!1:y$e.exec(i)!==null||x$e.exec(i)!==null}function tzt(i){var s,u,d,p,v,b,y,T=0,_=null,A,P,R;if(s=y$e.exec(i),s===null&&(s=x$e.exec(i)),s===null)throw new Error("Date resolve error");if(u=+s[1],d=+s[2]-1,p=+s[3],!s[4])return new Date(Date.UTC(u,d,p));if(v=+s[4],b=+s[5],y=+s[6],s[7]){for(T=s[7].slice(0,3);T.length<3;)T+="0";T=+T}return s[9]&&(A=+s[10],P=+(s[11]||0),_=(A*60+P)*6e4,s[9]==="-"&&(_=-_)),R=new Date(Date.UTC(u,d,p,v,b,y,T)),_&&R.setTime(R.getTime()-_),R}function nzt(i){return i.toISOString()}var rzt=new Fg("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:ezt,construct:tzt,instanceOf:Date,represent:nzt});function izt(i){return i==="<<"||i===null}var szt=new Fg("tag:yaml.org,2002:merge",{kind:"scalar",resolve:izt}),H2e=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;function azt(i){if(i===null)return!1;var s,u,d=0,p=i.length,v=H2e;for(u=0;u64)){if(s<0)return!1;d+=6}return d%8===0}function ozt(i){var s,u,d=i.replace(/[\r\n=]/g,""),p=d.length,v=H2e,b=0,y=[];for(s=0;s>16&255),y.push(b>>8&255),y.push(b&255)),b=b<<6|v.indexOf(d.charAt(s));return u=p%4*6,u===0?(y.push(b>>16&255),y.push(b>>8&255),y.push(b&255)):u===18?(y.push(b>>10&255),y.push(b>>2&255)):u===12&&y.push(b>>4&255),new Uint8Array(y)}function czt(i){var s="",u=0,d,p,v=i.length,b=H2e;for(d=0;d>18&63],s+=b[u>>12&63],s+=b[u>>6&63],s+=b[u&63]),u=(u<<8)+i[d];return p=v%3,p===0?(s+=b[u>>18&63],s+=b[u>>12&63],s+=b[u>>6&63],s+=b[u&63]):p===2?(s+=b[u>>10&63],s+=b[u>>4&63],s+=b[u<<2&63],s+=b[64]):p===1&&(s+=b[u>>2&63],s+=b[u<<4&63],s+=b[64],s+=b[64]),s}function uzt(i){return Object.prototype.toString.call(i)==="[object Uint8Array]"}var lzt=new Fg("tag:yaml.org,2002:binary",{kind:"scalar",resolve:azt,construct:ozt,predicate:uzt,represent:czt}),hzt=Object.prototype.hasOwnProperty,fzt=Object.prototype.toString;function dzt(i){if(i===null)return!0;var s=[],u,d,p,v,b,y=i;for(u=0,d=y.length;u>10)+55296,(i-65536&1023)+56320)}for(var L$e=new Array(256),M$e=new Array(256),AD=0;AD<256;AD++)L$e[AD]=A$e(AD)?1:0,M$e[AD]=A$e(AD);function Ozt(i,s){this.input=i,this.filename=s.filename||null,this.schema=s.schema||Tzt,this.onWarning=s.onWarning||null,this.legacy=s.legacy||!1,this.json=s.json||!1,this.listener=s.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=i.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function D$e(i,s){var u={name:i.filename,buffer:i.input.slice(0,-1),position:i.position,line:i.line,column:i.position-i.lineStart};return u.snippet=y$t(u),new A7(s,u)}function oa(i,s){throw D$e(i,s)}function eQ(i,s){i.onWarning&&i.onWarning.call(null,D$e(i,s))}var I$e={YAML:function(s,u,d){var p,v,b;s.version!==null&&oa(s,"duplication of %YAML directive"),d.length!==1&&oa(s,"YAML directive accepts exactly one argument"),p=/^([0-9]+)\.([0-9]+)$/.exec(d[0]),p===null&&oa(s,"ill-formed argument of the YAML directive"),v=parseInt(p[1],10),b=parseInt(p[2],10),v!==1&&oa(s,"unacceptable YAML version of the document"),s.version=d[0],s.checkLineBreaks=b<2,b!==1&&b!==2&&eQ(s,"unsupported YAML version of the document")},TAG:function(s,u,d){var p,v;d.length!==2&&oa(s,"TAG directive accepts exactly two arguments"),p=d[0],v=d[1],C$e.test(p)||oa(s,"ill-formed tag handle (first argument) of the TAG directive"),x9.call(s.tagMap,p)&&oa(s,'there is a previously declared suffix for "'+p+'" tag handle'),S$e.test(v)||oa(s,"ill-formed tag prefix (second argument) of the TAG directive");try{v=decodeURIComponent(v)}catch{oa(s,"tag prefix is malformed: "+v)}s.tagMap[p]=v}};function k9(i,s,u,d){var p,v,b,y;if(s1&&(i.result+=Lp.repeat(` +`,s-1))}function Nzt(i,s,u){var d,p,v,b,y,T,_,A,P=i.kind,R=i.result,F;if(F=i.input.charCodeAt(i.position),F2(F)||_D(F)||F===35||F===38||F===42||F===33||F===124||F===62||F===39||F===34||F===37||F===64||F===96||(F===63||F===45)&&(p=i.input.charCodeAt(i.position+1),F2(p)||u&&_D(p)))return!1;for(i.kind="scalar",i.result="",v=b=i.position,y=!1;F!==0;){if(F===58){if(p=i.input.charCodeAt(i.position+1),F2(p)||u&&_D(p))break}else if(F===35){if(d=i.input.charCodeAt(i.position-1),F2(d))break}else{if(i.position===i.lineStart&&tQ(i)||u&&_D(F))break;if(V4(F))if(T=i.line,_=i.lineStart,A=i.lineIndent,O0(i,!1,-1),i.lineIndent>=s){y=!0,F=i.input.charCodeAt(i.position);continue}else{i.position=b,i.line=T,i.lineStart=_,i.lineIndent=A;break}}y&&(k9(i,v,b,!1),G2e(i,i.line-T),v=b=i.position,y=!1),FC(F)||(b=i.position+1),F=i.input.charCodeAt(++i.position)}return k9(i,v,b,!1),i.result?!0:(i.kind=P,i.result=R,!1)}function Pzt(i,s){var u,d,p;if(u=i.input.charCodeAt(i.position),u!==39)return!1;for(i.kind="scalar",i.result="",i.position++,d=p=i.position;(u=i.input.charCodeAt(i.position))!==0;)if(u===39)if(k9(i,d,i.position,!0),u=i.input.charCodeAt(++i.position),u===39)d=i.position,i.position++,p=i.position;else return!0;else V4(u)?(k9(i,d,p,!0),G2e(i,O0(i,!1,s)),d=p=i.position):i.position===i.lineStart&&tQ(i)?oa(i,"unexpected end of the document within a single quoted scalar"):(i.position++,p=i.position);oa(i,"unexpected end of the stream within a single quoted scalar")}function Bzt(i,s){var u,d,p,v,b,y;if(y=i.input.charCodeAt(i.position),y!==34)return!1;for(i.kind="scalar",i.result="",i.position++,u=d=i.position;(y=i.input.charCodeAt(i.position))!==0;){if(y===34)return k9(i,u,i.position,!0),i.position++,!0;if(y===92){if(k9(i,u,i.position,!0),y=i.input.charCodeAt(++i.position),V4(y))O0(i,!1,s);else if(y<256&&L$e[y])i.result+=M$e[y],i.position++;else if((b=Mzt(y))>0){for(p=b,v=0;p>0;p--)y=i.input.charCodeAt(++i.position),(b=Lzt(y))>=0?v=(v<<4)+b:oa(i,"expected hexadecimal character");i.result+=Izt(v),i.position++}else oa(i,"unknown escape sequence");u=d=i.position}else V4(y)?(k9(i,u,d,!0),G2e(i,O0(i,!1,s)),u=d=i.position):i.position===i.lineStart&&tQ(i)?oa(i,"unexpected end of the document within a double quoted scalar"):(i.position++,d=i.position)}oa(i,"unexpected end of the stream within a double quoted scalar")}function Fzt(i,s){var u=!0,d,p,v,b=i.tag,y,T=i.anchor,_,A,P,R,F,j=Object.create(null),K,ee,ie,oe;if(oe=i.input.charCodeAt(i.position),oe===91)A=93,F=!1,y=[];else if(oe===123)A=125,F=!0,y={};else return!1;for(i.anchor!==null&&(i.anchorMap[i.anchor]=y),oe=i.input.charCodeAt(++i.position);oe!==0;){if(O0(i,!0,s),oe=i.input.charCodeAt(i.position),oe===A)return i.position++,i.tag=b,i.anchor=T,i.kind=F?"mapping":"sequence",i.result=y,!0;u?oe===44&&oa(i,"expected the node content, but found ','"):oa(i,"missed comma between flow collection entries"),ee=K=ie=null,P=R=!1,oe===63&&(_=i.input.charCodeAt(i.position+1),F2(_)&&(P=R=!0,i.position++,O0(i,!0,s))),d=i.line,p=i.lineStart,v=i.position,MD(i,s,JX,!1,!0),ee=i.tag,K=i.result,O0(i,!0,s),oe=i.input.charCodeAt(i.position),(R||i.line===d)&&oe===58&&(P=!0,oe=i.input.charCodeAt(++i.position),O0(i,!0,s),MD(i,s,JX,!1,!0),ie=i.result),F?LD(i,y,j,ee,K,ie,d,p,v):P?y.push(LD(i,null,j,ee,K,ie,d,p,v)):y.push(K),O0(i,!0,s),oe=i.input.charCodeAt(i.position),oe===44?(u=!0,oe=i.input.charCodeAt(++i.position)):u=!1}oa(i,"unexpected end of the stream within a flow collection")}function Rzt(i,s){var u,d,p=V2e,v=!1,b=!1,y=s,T=0,_=!1,A,P;if(P=i.input.charCodeAt(i.position),P===124)d=!1;else if(P===62)d=!0;else return!1;for(i.kind="scalar",i.result="";P!==0;)if(P=i.input.charCodeAt(++i.position),P===43||P===45)V2e===p?p=P===43?T$e:Czt:oa(i,"repeat of a chomping mode identifier");else if((A=Dzt(P))>=0)A===0?oa(i,"bad explicit indentation width of a block scalar; it cannot be less than one"):b?oa(i,"repeat of an indentation width identifier"):(y=s+A-1,b=!0);else break;if(FC(P)){do P=i.input.charCodeAt(++i.position);while(FC(P));if(P===35)do P=i.input.charCodeAt(++i.position);while(!V4(P)&&P!==0)}for(;P!==0;){for(U2e(i),i.lineIndent=0,P=i.input.charCodeAt(i.position);(!b||i.lineIndenty&&(y=i.lineIndent),V4(P)){T++;continue}if(i.lineIndents)&&T!==0)oa(i,"bad indentation of a sequence entry");else if(i.lineIndents)&&(ee&&(b=i.line,y=i.lineStart,T=i.position),MD(i,s,ZX,!0,p)&&(ee?j=i.result:K=i.result),ee||(LD(i,P,R,F,j,K,b,y,T),F=j=K=null),O0(i,!0,-1),oe=i.input.charCodeAt(i.position)),(i.line===v||i.lineIndent>s)&&oe!==0)oa(i,"bad indentation of a mapping entry");else if(i.lineIndents?T=1:i.lineIndent===s?T=0:i.lineIndents?T=1:i.lineIndent===s?T=0:i.lineIndent tag; it should be "scalar", not "'+i.kind+'"'),P=0,R=i.implicitTypes.length;P"),i.result!==null&&j.kind!==i.kind&&oa(i,"unacceptable node kind for !<"+i.tag+'> tag; it should be "'+j.kind+'", not "'+i.kind+'"'),j.resolve(i.result,i.tag)?(i.result=j.construct(i.result,i.tag),i.anchor!==null&&(i.anchorMap[i.anchor]=i.result)):oa(i,"cannot resolve a node with !<"+i.tag+"> explicit tag")}return i.listener!==null&&i.listener("close",i),i.tag!==null||i.anchor!==null||A}function Hzt(i){var s=i.position,u,d,p,v=!1,b;for(i.version=null,i.checkLineBreaks=i.legacy,i.tagMap=Object.create(null),i.anchorMap=Object.create(null);(b=i.input.charCodeAt(i.position))!==0&&(O0(i,!0,-1),b=i.input.charCodeAt(i.position),!(i.lineIndent>0||b!==37));){for(v=!0,b=i.input.charCodeAt(++i.position),u=i.position;b!==0&&!F2(b);)b=i.input.charCodeAt(++i.position);for(d=i.input.slice(u,i.position),p=[],d.length<1&&oa(i,"directive name must not be less than one character in length");b!==0;){for(;FC(b);)b=i.input.charCodeAt(++i.position);if(b===35){do b=i.input.charCodeAt(++i.position);while(b!==0&&!V4(b));break}if(V4(b))break;for(u=i.position;b!==0&&!F2(b);)b=i.input.charCodeAt(++i.position);p.push(i.input.slice(u,i.position))}b!==0&&U2e(i),x9.call(I$e,d)?I$e[d](i,d,p):eQ(i,'unknown document directive "'+d+'"')}if(O0(i,!0,-1),i.lineIndent===0&&i.input.charCodeAt(i.position)===45&&i.input.charCodeAt(i.position+1)===45&&i.input.charCodeAt(i.position+2)===45?(i.position+=3,O0(i,!0,-1)):v&&oa(i,"directives end mark is expected"),MD(i,i.lineIndent-1,ZX,!1,!0),O0(i,!0,-1),i.checkLineBreaks&&_zt.test(i.input.slice(s,i.position))&&eQ(i,"non-ASCII line breaks are interpreted as content"),i.documents.push(i.result),i.position===i.lineStart&&tQ(i)){i.input.charCodeAt(i.position)===46&&(i.position+=3,O0(i,!0,-1));return}if(i.position"u"&&(u=s,s=null);var d=P$e(i,u);if(typeof s!="function")return d;for(var p=0,v=d.length;pi.replace(/\r\n?/g,` +`).replace(/<(\w+)([^>]*)>/g,(s,u,d)=>"<"+u+d.replace(/="([^"]*)"/g,"='$1'")+">"),Zzt=i=>{const{text:s,metadata:u}=Qzt(i),{displayMode:d,title:p,config:v={}}=u;return d&&(v.gantt||(v.gantt={}),v.gantt.displayMode=d),{title:p,config:v,text:s}},eqt=i=>{const s=Ao.detectInit(i)??{},u=Ao.detectDirective(i,"wrap");return Array.isArray(u)?s.wrap=u.some(({type:d})=>{}):(u==null?void 0:u.type)==="wrap"&&(s.wrap=!0),{text:wRt(i),directive:s}};function B$e(i){const s=Jzt(i),u=Zzt(s),d=eqt(u.text),p=JF(u.config,d.directive);return i=o$t(d.text),{code:i,title:u.title,config:p}}const tqt=5e4,nqt="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",rqt="sandbox",iqt="loose",sqt="http://www.w3.org/2000/svg",aqt="http://www.w3.org/1999/xlink",oqt="http://www.w3.org/1999/xhtml",cqt="100%",uqt="100%",lqt="border:0;margin:0;",hqt="margin:0",fqt="allow-top-navigation-by-user-activation allow-popups",dqt='The "iframe" tag is not supported by your browser.',gqt=["foreignobject"],pqt=["dominant-baseline"];function F$e(i){const s=B$e(i);return WX(),ejt(s.config??{}),s}async function bqt(i,s){B2e(),i=F$e(i).code;try{await K2e(i)}catch(u){if(s!=null&&s.suppressErrors)return!1;throw u}return!0}const R$e=(i,s,u=[])=>` +.${i} ${s} { ${u.join(" !important; ")} !important; }`,mqt=(i,s={})=>{var d;let u="";if(i.themeCSS!==void 0&&(u+=` +${i.themeCSS}`),i.fontFamily!==void 0&&(u+=` +:root { --mermaid-font-family: ${i.fontFamily}}`),i.altFontFamily!==void 0&&(u+=` +:root { --mermaid-alt-font-family: ${i.altFontFamily}}`),!iR(s)){const y=i.htmlLabels||((d=i.flowchart)==null?void 0:d.htmlLabels)?["> *","span"]:["rect","polygon","ellipse","circle","path"];for(const T in s){const _=s[T];iR(_.styles)||y.forEach(A=>{u+=R$e(_.id,A,_.styles)}),iR(_.textStyles)||(u+=R$e(_.id,"tspan",_.textStyles))}}return u},vqt=(i,s,u,d)=>{const p=mqt(i,u),v=Tjt(s,p,i.themeVariables);return M2e(WRt(`${d}{${v}}`),XRt)},wqt=(i="",s,u)=>{let d=i;return!u&&!s&&(d=d.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),d=ZF(d),d=d.replace(/
/g,"
"),d},yqt=(i="",s)=>{var p,v;const u=(v=(p=s==null?void 0:s.viewBox)==null?void 0:p.baseVal)!=null&&v.height?s.viewBox.baseVal.height+"px":uqt,d=btoa(''+i+"");return``},j$e=(i,s,u,d,p)=>{const v=i.append("div");v.attr("id",u),d&&v.attr("style",d);const b=v.append("svg").attr("id",s).attr("width","100%").attr("xmlns",sqt);return p&&b.attr("xmlns:xlink",p),b.append("g"),i};function $$e(i,s){return i.append("iframe").attr("id",s).attr("style","width: 100%; height: 100%;").attr("sandbox","")}const xqt=(i,s,u,d)=>{var p,v,b;(p=i.getElementById(s))==null||p.remove(),(v=i.getElementById(u))==null||v.remove(),(b=i.getElementById(d))==null||b.remove()},kqt=async function(i,s,u){var U,Fe,Pe,je,Ie,Se;B2e();const d=F$e(s);s=d.code;const p=Vh();Xe.debug(p),s.length>((p==null?void 0:p.maxTextSize)??tqt)&&(s=nqt);const v="#"+i,b="i"+i,y="#"+b,T="d"+i,_="#"+T;let A=Ir("body");const P=p.securityLevel===rqt,R=p.securityLevel===iqt,F=p.fontFamily;if(u!==void 0){if(u&&(u.innerHTML=""),P){const Ce=$$e(Ir(u),b);A=Ir(Ce.nodes()[0].contentDocument.body),A.node().style.margin=0}else A=Ir(u);j$e(A,i,T,`font-family: ${F}`,aqt)}else{if(xqt(document,i,T,b),P){const Ce=$$e(Ir("body"),b);A=Ir(Ce.nodes()[0].contentDocument.body),A.node().style.margin=0}else A=Ir("body");j$e(A,i,T)}let j,K;try{j=await K2e(s,{title:d.title})}catch(Ce){j=new c$e("error"),K=Ce}const ee=A.select(_).node(),ie=j.type,oe=ee.firstChild,pe=oe.firstChild,be=(Fe=(U=j.renderer).getClasses)==null?void 0:Fe.call(U,s,j),ae=vqt(p,ie,be,v),ne=document.createElement("style");ne.innerHTML=ae,oe.insertBefore(ne,pe);try{await j.renderer.draw(s,i,Aje,j)}catch(Ce){throw Djt.draw(s,i,Aje),Ce}const se=A.select(`${_} svg`),de=(je=(Pe=j.db).getAccTitle)==null?void 0:je.call(Pe),X=(Se=(Ie=j.db).getAccDescription)==null?void 0:Se.call(Ie);Tqt(ie,se,de,X),A.select(`[id="${i}"]`).selectAll("foreignobject > *").attr("xmlns",oqt);let ge=A.select(_).node().innerHTML;if(Xe.debug("config.arrowMarkerAbsolute",p.arrowMarkerAbsolute),ge=wqt(ge,P,f1(p.arrowMarkerAbsolute)),P){const Ce=A.select(_+" svg").node();ge=yqt(ge,Ce)}else R||(ge=hD.sanitize(ge,{ADD_TAGS:gqt,ADD_ATTR:pqt}));if(jjt(),K)throw K;const xe=Ir(P?y:_).node();return xe&&"remove"in xe&&xe.remove(),{svg:ge,bindFunctions:j.db.bindFunctions}};function Eqt(i={}){var u;i!=null&&i.fontFamily&&!((u=i.themeVariables)!=null&&u.fontFamily)&&(i.themeVariables||(i.themeVariables={}),i.themeVariables.fontFamily=i.fontFamily),JRt(i),i!=null&&i.theme&&i.theme in E7?i.themeVariables=E7[i.theme].getThemeVariables(i.themeVariables):i&&(i.themeVariables=E7.default.getThemeVariables(i.themeVariables));const s=typeof i=="object"?QRt(i):Mje();fpe(s.logLevel),B2e()}const K2e=(i,s={})=>{const{code:u}=B$e(i);return Rjt(u,s)};function Tqt(i,s,u,d){s$t(s,i),a$t(s,u,d,s.attr("id"))}const RC=Object.freeze({render:kqt,parse:bqt,getDiagramFromText:K2e,initialize:Eqt,getConfig:Vh,setConfig:Dje,getSiteConfig:Mje,updateSiteConfig:ZRt,reset:()=>{WX()},globalReset:()=>{WX(ED)},defaultConfig:ED});fpe(Vh().logLevel),WX(Vh());const Cqt=async()=>{Xe.debug("Loading registered diagrams");const s=(await Promise.allSettled(Object.entries(dD).map(async([u,{detector:d,loader:p}])=>{if(p)try{P2e(u)}catch{try{const{diagram:b,id:y}=await p();QX(y,b,d)}catch(b){throw Xe.error(`Failed to load external diagram with key ${u}. Removing from detectors.`),delete dD[u],b}}}))).filter(u=>u.status==="rejected");if(s.length>0){Xe.error(`Failed to load ${s.length} external diagrams`);for(const u of s)Xe.error(u);throw new Error(`Failed to load ${s.length} external diagrams`)}},Sqt=(i,s,u)=>{Xe.warn(i),wje(i)?(u&&u(i.str,i.hash),s.push({...i,message:i.str,error:i})):(u&&u(i),i instanceof Error&&s.push({str:i.message,message:i.message,hash:i.name,error:i}))},z$e=async function(i={querySelector:".mermaid"}){try{await _qt(i)}catch(s){if(wje(s)&&Xe.error(s.str),um.parseError&&um.parseError(s),!i.suppressErrors)throw Xe.error("Use the suppressErrors option to suppress these errors"),s}},_qt=async function({postRenderCallback:i,querySelector:s,nodes:u}={querySelector:".mermaid"}){const d=RC.getConfig();Xe.debug(`${i?"":"No "}Callback function found`);let p;if(u)p=u;else if(s)p=document.querySelectorAll(s);else throw new Error("Nodes and querySelector are both undefined");Xe.debug(`Found ${p.length} diagrams`),(d==null?void 0:d.startOnLoad)!==void 0&&(Xe.debug("Start On Load: "+(d==null?void 0:d.startOnLoad)),RC.updateSiteConfig({startOnLoad:d==null?void 0:d.startOnLoad}));const v=new Ao.InitIDGenerator(d.deterministicIds,d.deterministicIDSeed);let b;const y=[];for(const T of Array.from(p)){Xe.info("Rendering diagram: "+T.id);/*! Check if previously processed */if(T.getAttribute("data-processed"))continue;T.setAttribute("data-processed","true");const _=`mermaid-${v.next()}`;b=T.innerHTML,b=JM(Ao.entityDecode(b)).trim().replace(//gi,"
");const A=Ao.detectInit(b);A&&Xe.debug("Detected early reinit: ",A);try{const{svg:P,bindFunctions:R}=await U$e(_,b,T);T.innerHTML=P,i&&await i(_),R&&R(T)}catch(P){Sqt(P,y,um.parseError)}}if(y.length>0)throw y[0]},q$e=function(i){RC.initialize(i)},Aqt=async function(i,s,u){Xe.warn("mermaid.init is deprecated. Please use run instead."),i&&q$e(i);const d={postRenderCallback:u,querySelector:".mermaid"};typeof s=="string"?d.querySelector=s:s&&(s instanceof HTMLElement?d.nodes=[s]:d.nodes=s),await z$e(d)},Lqt=async(i,{lazyLoad:s=!0}={})=>{NRe(...i),s===!1&&await Cqt()},H$e=function(){if(um.startOnLoad){const{startOnLoad:i}=RC.getConfig();i&&um.run().catch(s=>Xe.error("Mermaid failed to initialize",s))}};if(typeof document<"u"){/*! * Wait for document loaded before starting the execution - */window.addEventListener("load",gPt,!1)}const fDe=function(i){Bb.parseError=i},KW=[];let Pdt=!1;const pPt=async()=>{if(!Pdt){for(Pdt=!0;KW.length>0;){const i=KW.shift();if(i)try{await i()}catch(a){Ut.error("Error executing queue",a)}}Pdt=!1}},dDe=async(i,a)=>new Promise((f,p)=>{const w=()=>new Promise((m,b)=>{pT.parse(i,a).then(E=>{m(E),f(E)},E=>{var _;Ut.error("Error parsing",E),(_=Bb.parseError)==null||_.call(Bb,E),b(E),p(E)})});KW.push(w),pPt().catch(p)}),bPt=(i,a,f)=>new Promise((p,w)=>{const m=()=>new Promise((b,E)=>{pT.render(i,a,f).then(_=>{b(_),p(_)},_=>{var A;Ut.error("Error parsing",_),(A=Bb.parseError)==null||A.call(Bb,_),E(_),w(_)})});KW.push(m),pPt().catch(w)}),Bb={startOnLoad:!0,mermaidAPI:pT,parse:dDe,render:bPt,init:lDe,run:fPt,registerExternalDiagrams:hDe,initialize:dPt,parseError:void 0,contentLoaded:gPt,setParseErrorHandler:fDe,detectType:yW};var XW=function(){var i=function(Xi,Er,Xn,di){for(Xn=Xn||{},di=Xi.length;di--;Xn[Xi[di]]=Er);return Xn},a=[1,24],f=[1,25],p=[1,26],w=[1,27],m=[1,28],b=[1,63],E=[1,64],_=[1,65],A=[1,66],I=[1,67],B=[1,68],N=[1,69],R=[1,29],z=[1,30],W=[1,31],et=[1,32],st=[1,33],at=[1,34],bt=[1,35],mt=[1,36],yt=[1,37],ft=[1,38],ut=[1,39],vt=[1,40],X=[1,41],pt=[1,42],U=[1,43],Tt=[1,44],nt=[1,45],It=[1,46],Ot=[1,47],Bt=[1,48],Et=[1,50],Z=[1,51],Ct=[1,52],xt=[1,53],Ht=[1,54],Le=[1,55],Ft=[1,56],gn=[1,57],Se=[1,58],me=[1,59],Ve=[1,60],Ye=[14,42],ce=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],ke=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],zt=[1,82],re=[1,83],se=[1,84],Pe=[1,85],te=[12,14,42],Me=[12,14,33,42],de=[12,14,33,42,76,77,79,80],on=[12,33],ni=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],Ks={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:function(Er,Xn,di,Ee,Kn,He,Ti){var pn=He.length-1;switch(Kn){case 3:Ee.setDirection("TB");break;case 4:Ee.setDirection("BT");break;case 5:Ee.setDirection("RL");break;case 6:Ee.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:Ee.setC4Type(He[pn-3]);break;case 19:Ee.setTitle(He[pn].substring(6)),this.$=He[pn].substring(6);break;case 20:Ee.setAccDescription(He[pn].substring(15)),this.$=He[pn].substring(15);break;case 21:this.$=He[pn].trim(),Ee.setTitle(this.$);break;case 22:case 23:this.$=He[pn].trim(),Ee.setAccDescription(this.$);break;case 28:case 29:He[pn].splice(2,0,"ENTERPRISE"),Ee.addPersonOrSystemBoundary(...He[pn]),this.$=He[pn];break;case 30:Ee.addPersonOrSystemBoundary(...He[pn]),this.$=He[pn];break;case 31:He[pn].splice(2,0,"CONTAINER"),Ee.addContainerBoundary(...He[pn]),this.$=He[pn];break;case 32:Ee.addDeploymentNode("node",...He[pn]),this.$=He[pn];break;case 33:Ee.addDeploymentNode("nodeL",...He[pn]),this.$=He[pn];break;case 34:Ee.addDeploymentNode("nodeR",...He[pn]),this.$=He[pn];break;case 35:Ee.popBoundaryParseStack();break;case 39:Ee.addPersonOrSystem("person",...He[pn]),this.$=He[pn];break;case 40:Ee.addPersonOrSystem("external_person",...He[pn]),this.$=He[pn];break;case 41:Ee.addPersonOrSystem("system",...He[pn]),this.$=He[pn];break;case 42:Ee.addPersonOrSystem("system_db",...He[pn]),this.$=He[pn];break;case 43:Ee.addPersonOrSystem("system_queue",...He[pn]),this.$=He[pn];break;case 44:Ee.addPersonOrSystem("external_system",...He[pn]),this.$=He[pn];break;case 45:Ee.addPersonOrSystem("external_system_db",...He[pn]),this.$=He[pn];break;case 46:Ee.addPersonOrSystem("external_system_queue",...He[pn]),this.$=He[pn];break;case 47:Ee.addContainer("container",...He[pn]),this.$=He[pn];break;case 48:Ee.addContainer("container_db",...He[pn]),this.$=He[pn];break;case 49:Ee.addContainer("container_queue",...He[pn]),this.$=He[pn];break;case 50:Ee.addContainer("external_container",...He[pn]),this.$=He[pn];break;case 51:Ee.addContainer("external_container_db",...He[pn]),this.$=He[pn];break;case 52:Ee.addContainer("external_container_queue",...He[pn]),this.$=He[pn];break;case 53:Ee.addComponent("component",...He[pn]),this.$=He[pn];break;case 54:Ee.addComponent("component_db",...He[pn]),this.$=He[pn];break;case 55:Ee.addComponent("component_queue",...He[pn]),this.$=He[pn];break;case 56:Ee.addComponent("external_component",...He[pn]),this.$=He[pn];break;case 57:Ee.addComponent("external_component_db",...He[pn]),this.$=He[pn];break;case 58:Ee.addComponent("external_component_queue",...He[pn]),this.$=He[pn];break;case 60:Ee.addRel("rel",...He[pn]),this.$=He[pn];break;case 61:Ee.addRel("birel",...He[pn]),this.$=He[pn];break;case 62:Ee.addRel("rel_u",...He[pn]),this.$=He[pn];break;case 63:Ee.addRel("rel_d",...He[pn]),this.$=He[pn];break;case 64:Ee.addRel("rel_l",...He[pn]),this.$=He[pn];break;case 65:Ee.addRel("rel_r",...He[pn]),this.$=He[pn];break;case 66:Ee.addRel("rel_b",...He[pn]),this.$=He[pn];break;case 67:He[pn].splice(0,1),Ee.addRel("rel",...He[pn]),this.$=He[pn];break;case 68:Ee.updateElStyle("update_el_style",...He[pn]),this.$=He[pn];break;case 69:Ee.updateRelStyle("update_rel_style",...He[pn]),this.$=He[pn];break;case 70:Ee.updateLayoutConfig("update_layout_config",...He[pn]),this.$=He[pn];break;case 71:this.$=[He[pn]];break;case 72:He[pn].unshift(He[pn-1]),this.$=He[pn];break;case 73:case 75:this.$=He[pn].trim();break;case 74:let Es={};Es[He[pn-1].trim()]=He[pn].trim(),this.$=Es;break;case 76:this.$="";break}},table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:a,23:f,24:p,26:w,28:m,29:49,30:61,32:62,34:b,36:E,37:_,38:A,39:I,40:B,41:N,43:23,44:R,45:z,46:W,47:et,48:st,49:at,50:bt,51:mt,52:yt,53:ft,54:ut,55:vt,56:X,57:pt,58:U,59:Tt,60:nt,61:It,62:Ot,63:Bt,64:Et,65:Z,66:Ct,67:xt,68:Ht,69:Le,70:Ft,71:gn,72:Se,73:me,74:Ve},{13:70,19:20,20:21,21:22,22:a,23:f,24:p,26:w,28:m,29:49,30:61,32:62,34:b,36:E,37:_,38:A,39:I,40:B,41:N,43:23,44:R,45:z,46:W,47:et,48:st,49:at,50:bt,51:mt,52:yt,53:ft,54:ut,55:vt,56:X,57:pt,58:U,59:Tt,60:nt,61:It,62:Ot,63:Bt,64:Et,65:Z,66:Ct,67:xt,68:Ht,69:Le,70:Ft,71:gn,72:Se,73:me,74:Ve},{13:71,19:20,20:21,21:22,22:a,23:f,24:p,26:w,28:m,29:49,30:61,32:62,34:b,36:E,37:_,38:A,39:I,40:B,41:N,43:23,44:R,45:z,46:W,47:et,48:st,49:at,50:bt,51:mt,52:yt,53:ft,54:ut,55:vt,56:X,57:pt,58:U,59:Tt,60:nt,61:It,62:Ot,63:Bt,64:Et,65:Z,66:Ct,67:xt,68:Ht,69:Le,70:Ft,71:gn,72:Se,73:me,74:Ve},{13:72,19:20,20:21,21:22,22:a,23:f,24:p,26:w,28:m,29:49,30:61,32:62,34:b,36:E,37:_,38:A,39:I,40:B,41:N,43:23,44:R,45:z,46:W,47:et,48:st,49:at,50:bt,51:mt,52:yt,53:ft,54:ut,55:vt,56:X,57:pt,58:U,59:Tt,60:nt,61:It,62:Ot,63:Bt,64:Et,65:Z,66:Ct,67:xt,68:Ht,69:Le,70:Ft,71:gn,72:Se,73:me,74:Ve},{13:73,19:20,20:21,21:22,22:a,23:f,24:p,26:w,28:m,29:49,30:61,32:62,34:b,36:E,37:_,38:A,39:I,40:B,41:N,43:23,44:R,45:z,46:W,47:et,48:st,49:at,50:bt,51:mt,52:yt,53:ft,54:ut,55:vt,56:X,57:pt,58:U,59:Tt,60:nt,61:It,62:Ot,63:Bt,64:Et,65:Z,66:Ct,67:xt,68:Ht,69:Le,70:Ft,71:gn,72:Se,73:me,74:Ve},{14:[1,74]},i(Ye,[2,13],{43:23,29:49,30:61,32:62,20:75,34:b,36:E,37:_,38:A,39:I,40:B,41:N,44:R,45:z,46:W,47:et,48:st,49:at,50:bt,51:mt,52:yt,53:ft,54:ut,55:vt,56:X,57:pt,58:U,59:Tt,60:nt,61:It,62:Ot,63:Bt,64:Et,65:Z,66:Ct,67:xt,68:Ht,69:Le,70:Ft,71:gn,72:Se,73:me,74:Ve}),i(Ye,[2,14]),i(ce,[2,16],{12:[1,76]}),i(Ye,[2,36],{12:[1,77]}),i(ke,[2,19]),i(ke,[2,20]),{25:[1,78]},{27:[1,79]},i(ke,[2,23]),{35:80,75:81,76:zt,77:re,79:se,80:Pe},{35:86,75:81,76:zt,77:re,79:se,80:Pe},{35:87,75:81,76:zt,77:re,79:se,80:Pe},{35:88,75:81,76:zt,77:re,79:se,80:Pe},{35:89,75:81,76:zt,77:re,79:se,80:Pe},{35:90,75:81,76:zt,77:re,79:se,80:Pe},{35:91,75:81,76:zt,77:re,79:se,80:Pe},{35:92,75:81,76:zt,77:re,79:se,80:Pe},{35:93,75:81,76:zt,77:re,79:se,80:Pe},{35:94,75:81,76:zt,77:re,79:se,80:Pe},{35:95,75:81,76:zt,77:re,79:se,80:Pe},{35:96,75:81,76:zt,77:re,79:se,80:Pe},{35:97,75:81,76:zt,77:re,79:se,80:Pe},{35:98,75:81,76:zt,77:re,79:se,80:Pe},{35:99,75:81,76:zt,77:re,79:se,80:Pe},{35:100,75:81,76:zt,77:re,79:se,80:Pe},{35:101,75:81,76:zt,77:re,79:se,80:Pe},{35:102,75:81,76:zt,77:re,79:se,80:Pe},{35:103,75:81,76:zt,77:re,79:se,80:Pe},{35:104,75:81,76:zt,77:re,79:se,80:Pe},i(te,[2,59]),{35:105,75:81,76:zt,77:re,79:se,80:Pe},{35:106,75:81,76:zt,77:re,79:se,80:Pe},{35:107,75:81,76:zt,77:re,79:se,80:Pe},{35:108,75:81,76:zt,77:re,79:se,80:Pe},{35:109,75:81,76:zt,77:re,79:se,80:Pe},{35:110,75:81,76:zt,77:re,79:se,80:Pe},{35:111,75:81,76:zt,77:re,79:se,80:Pe},{35:112,75:81,76:zt,77:re,79:se,80:Pe},{35:113,75:81,76:zt,77:re,79:se,80:Pe},{35:114,75:81,76:zt,77:re,79:se,80:Pe},{35:115,75:81,76:zt,77:re,79:se,80:Pe},{20:116,29:49,30:61,32:62,34:b,36:E,37:_,38:A,39:I,40:B,41:N,43:23,44:R,45:z,46:W,47:et,48:st,49:at,50:bt,51:mt,52:yt,53:ft,54:ut,55:vt,56:X,57:pt,58:U,59:Tt,60:nt,61:It,62:Ot,63:Bt,64:Et,65:Z,66:Ct,67:xt,68:Ht,69:Le,70:Ft,71:gn,72:Se,73:me,74:Ve},{12:[1,118],33:[1,117]},{35:119,75:81,76:zt,77:re,79:se,80:Pe},{35:120,75:81,76:zt,77:re,79:se,80:Pe},{35:121,75:81,76:zt,77:re,79:se,80:Pe},{35:122,75:81,76:zt,77:re,79:se,80:Pe},{35:123,75:81,76:zt,77:re,79:se,80:Pe},{35:124,75:81,76:zt,77:re,79:se,80:Pe},{35:125,75:81,76:zt,77:re,79:se,80:Pe},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},i(Ye,[2,15]),i(ce,[2,17],{21:22,19:130,22:a,23:f,24:p,26:w,28:m}),i(Ye,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:a,23:f,24:p,26:w,28:m,34:b,36:E,37:_,38:A,39:I,40:B,41:N,44:R,45:z,46:W,47:et,48:st,49:at,50:bt,51:mt,52:yt,53:ft,54:ut,55:vt,56:X,57:pt,58:U,59:Tt,60:nt,61:It,62:Ot,63:Bt,64:Et,65:Z,66:Ct,67:xt,68:Ht,69:Le,70:Ft,71:gn,72:Se,73:me,74:Ve}),i(ke,[2,21]),i(ke,[2,22]),i(te,[2,39]),i(Me,[2,71],{75:81,35:132,76:zt,77:re,79:se,80:Pe}),i(de,[2,73]),{78:[1,133]},i(de,[2,75]),i(de,[2,76]),i(te,[2,40]),i(te,[2,41]),i(te,[2,42]),i(te,[2,43]),i(te,[2,44]),i(te,[2,45]),i(te,[2,46]),i(te,[2,47]),i(te,[2,48]),i(te,[2,49]),i(te,[2,50]),i(te,[2,51]),i(te,[2,52]),i(te,[2,53]),i(te,[2,54]),i(te,[2,55]),i(te,[2,56]),i(te,[2,57]),i(te,[2,58]),i(te,[2,60]),i(te,[2,61]),i(te,[2,62]),i(te,[2,63]),i(te,[2,64]),i(te,[2,65]),i(te,[2,66]),i(te,[2,67]),i(te,[2,68]),i(te,[2,69]),i(te,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},i(on,[2,28]),i(on,[2,29]),i(on,[2,30]),i(on,[2,31]),i(on,[2,32]),i(on,[2,33]),i(on,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},i(ce,[2,18]),i(Ye,[2,38]),i(Me,[2,72]),i(de,[2,74]),i(te,[2,24]),i(te,[2,35]),i(ni,[2,25]),i(ni,[2,26],{12:[1,138]}),i(ni,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:function(Er,Xn){if(Xn.recoverable)this.trace(Er);else{var di=new Error(Er);throw di.hash=Xn,di}},parse:function(Er){var Xn=this,di=[0],Ee=[],Kn=[null],He=[],Ti=this.table,pn="",Es=0,qa=0,Ma=2,Gs=1,Po=He.slice.call(arguments,1),vs=Object.create(this.lexer),ru={yy:{}};for(var zs in this.yy)Object.prototype.hasOwnProperty.call(this.yy,zs)&&(ru.yy[zs]=this.yy[zs]);vs.setInput(Er,ru.yy),ru.yy.lexer=vs,ru.yy.parser=this,typeof vs.yylloc>"u"&&(vs.yylloc={});var Du=vs.yylloc;He.push(Du);var pm=vs.options&&vs.options.ranges;typeof ru.yy.parseError=="function"?this.parseError=ru.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function uw(){var Dl;return Dl=Ee.pop()||vs.lex()||Gs,typeof Dl!="number"&&(Dl instanceof Array&&(Ee=Dl,Dl=Ee.pop()),Dl=Xn.symbols_[Dl]||Dl),Dl}for(var Wu,th,Fa,Ml,ha={},bc,Cc,pa,Da;;){if(th=di[di.length-1],this.defaultActions[th]?Fa=this.defaultActions[th]:((Wu===null||typeof Wu>"u")&&(Wu=uw()),Fa=Ti[th]&&Ti[th][Wu]),typeof Fa>"u"||!Fa.length||!Fa[0]){var Ha="";Da=[];for(bc in Ti[th])this.terminals_[bc]&&bc>Ma&&Da.push("'"+this.terminals_[bc]+"'");vs.showPosition?Ha="Parse error on line "+(Es+1)+`: -`+vs.showPosition()+` -Expecting `+Da.join(", ")+", got '"+(this.terminals_[Wu]||Wu)+"'":Ha="Parse error on line "+(Es+1)+": Unexpected "+(Wu==Gs?"end of input":"'"+(this.terminals_[Wu]||Wu)+"'"),this.parseError(Ha,{text:vs.match,token:this.terminals_[Wu]||Wu,line:vs.yylineno,loc:Du,expected:Da})}if(Fa[0]instanceof Array&&Fa.length>1)throw new Error("Parse Error: multiple actions possible at state: "+th+", token: "+Wu);switch(Fa[0]){case 1:di.push(Wu),Kn.push(vs.yytext),He.push(vs.yylloc),di.push(Fa[1]),Wu=null,qa=vs.yyleng,pn=vs.yytext,Es=vs.yylineno,Du=vs.yylloc;break;case 2:if(Cc=this.productions_[Fa[1]][1],ha.$=Kn[Kn.length-Cc],ha._$={first_line:He[He.length-(Cc||1)].first_line,last_line:He[He.length-1].last_line,first_column:He[He.length-(Cc||1)].first_column,last_column:He[He.length-1].last_column},pm&&(ha._$.range=[He[He.length-(Cc||1)].range[0],He[He.length-1].range[1]]),Ml=this.performAction.apply(ha,[pn,qa,Es,ru.yy,Fa[1],Kn,He].concat(Po)),typeof Ml<"u")return Ml;Cc&&(di=di.slice(0,-1*Cc*2),Kn=Kn.slice(0,-1*Cc),He=He.slice(0,-1*Cc)),di.push(this.productions_[Fa[1]][0]),Kn.push(ha.$),He.push(ha._$),pa=Ti[di[di.length-2]][di[di.length-1]],di.push(pa);break;case 3:return!0}}return!0}},ws=function(){var Xi={EOF:1,parseError:function(Xn,di){if(this.yy.parser)this.yy.parser.parseError(Xn,di);else throw new Error(Xn)},setInput:function(Er,Xn){return this.yy=Xn||this.yy||{},this._input=Er,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Er=this._input[0];this.yytext+=Er,this.yyleng++,this.offset++,this.match+=Er,this.matched+=Er;var Xn=Er.match(/(?:\r\n?|\n).*/g);return Xn?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Er},unput:function(Er){var Xn=Er.length,di=Er.split(/(?:\r\n?|\n)/g);this._input=Er+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Xn),this.offset-=Xn;var Ee=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),di.length-1&&(this.yylineno-=di.length-1);var Kn=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:di?(di.length===Ee.length?this.yylloc.first_column:0)+Ee[Ee.length-di.length].length-di[0].length:this.yylloc.first_column-Xn},this.options.ranges&&(this.yylloc.range=[Kn[0],Kn[0]+this.yyleng-Xn]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Er){this.unput(this.match.slice(Er))},pastInput:function(){var Er=this.matched.substr(0,this.matched.length-this.match.length);return(Er.length>20?"...":"")+Er.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Er=this.match;return Er.length<20&&(Er+=this._input.substr(0,20-Er.length)),(Er.substr(0,20)+(Er.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Er=this.pastInput(),Xn=new Array(Er.length+1).join("-");return Er+this.upcomingInput()+` -`+Xn+"^"},test_match:function(Er,Xn){var di,Ee,Kn;if(this.options.backtrack_lexer&&(Kn={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Kn.yylloc.range=this.yylloc.range.slice(0))),Ee=Er[0].match(/(?:\r\n?|\n).*/g),Ee&&(this.yylineno+=Ee.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Ee?Ee[Ee.length-1].length-Ee[Ee.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Er[0].length},this.yytext+=Er[0],this.match+=Er[0],this.matches=Er,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Er[0].length),this.matched+=Er[0],di=this.performAction.call(this,this.yy,this,Xn,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),di)return di;if(this._backtrack){for(var He in Kn)this[He]=Kn[He];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Er,Xn,di,Ee;this._more||(this.yytext="",this.match="");for(var Kn=this._currentRules(),He=0;HeXn[0].length)){if(Xn=di,Ee=He,this.options.backtrack_lexer){if(Er=this.test_match(di,Kn[He]),Er!==!1)return Er;if(this._backtrack){Xn=!1;continue}else return!1}else if(!this.options.flex)break}return Xn?(Er=this.test_match(Xn,Kn[Ee]),Er!==!1?Er:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Xn=this.next();return Xn||this.lex()},begin:function(Xn){this.conditionStack.push(Xn)},popState:function(){var Xn=this.conditionStack.length-1;return Xn>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Xn){return Xn=this.conditionStack.length-1-Math.abs(Xn||0),Xn>=0?this.conditionStack[Xn]:"INITIAL"},pushState:function(Xn){this.begin(Xn)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(Xn,di,Ee,Kn){switch(Ee){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),26;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:break;case 14:c;break;case 15:return 12;case 16:break;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;case 23:return this.begin("person"),44;case 24:return this.begin("system_ext_queue"),51;case 25:return this.begin("system_ext_db"),50;case 26:return this.begin("system_ext"),49;case 27:return this.begin("system_queue"),48;case 28:return this.begin("system_db"),47;case 29:return this.begin("system"),46;case 30:return this.begin("boundary"),37;case 31:return this.begin("enterprise_boundary"),34;case 32:return this.begin("system_boundary"),36;case 33:return this.begin("container_ext_queue"),57;case 34:return this.begin("container_ext_db"),56;case 35:return this.begin("container_ext"),55;case 36:return this.begin("container_queue"),54;case 37:return this.begin("container_db"),53;case 38:return this.begin("container"),52;case 39:return this.begin("container_boundary"),38;case 40:return this.begin("component_ext_queue"),63;case 41:return this.begin("component_ext_db"),62;case 42:return this.begin("component_ext"),61;case 43:return this.begin("component_queue"),60;case 44:return this.begin("component_db"),59;case 45:return this.begin("component"),58;case 46:return this.begin("node"),39;case 47:return this.begin("node"),39;case 48:return this.begin("node_l"),40;case 49:return this.begin("node_r"),41;case 50:return this.begin("rel"),64;case 51:return this.begin("birel"),65;case 52:return this.begin("rel_u"),66;case 53:return this.begin("rel_u"),66;case 54:return this.begin("rel_d"),67;case 55:return this.begin("rel_d"),67;case 56:return this.begin("rel_l"),68;case 57:return this.begin("rel_l"),68;case 58:return this.begin("rel_r"),69;case 59:return this.begin("rel_r"),69;case 60:return this.begin("rel_b"),70;case 61:return this.begin("rel_index"),71;case 62:return this.begin("update_el_style"),72;case 63:return this.begin("update_rel_style"),73;case 64:return this.begin("update_layout_config"),74;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";case 67:this.begin("attribute");break;case 68:this.popState(),this.popState();break;case 69:return 80;case 70:break;case 71:return 80;case 72:this.begin("string");break;case 73:this.popState();break;case 74:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 79:this.popState(),this.popState();break;case 80:return"STR";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},string_kv_value:{rules:[78,79],inclusive:!1},string_kv_key:{rules:[77],inclusive:!1},string_kv:{rules:[76],inclusive:!1},string:{rules:[73,74],inclusive:!1},attribute:{rules:[68,69,70,71,72,75,80],inclusive:!1},update_layout_config:{rules:[65,66,67,68],inclusive:!1},update_rel_style:{rules:[65,66,67,68],inclusive:!1},update_el_style:{rules:[65,66,67,68],inclusive:!1},rel_b:{rules:[65,66,67,68],inclusive:!1},rel_r:{rules:[65,66,67,68],inclusive:!1},rel_l:{rules:[65,66,67,68],inclusive:!1},rel_d:{rules:[65,66,67,68],inclusive:!1},rel_u:{rules:[65,66,67,68],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[65,66,67,68],inclusive:!1},node_r:{rules:[65,66,67,68],inclusive:!1},node_l:{rules:[65,66,67,68],inclusive:!1},node:{rules:[65,66,67,68],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[65,66,67,68],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[65,66,67,68],inclusive:!1},component_ext:{rules:[65,66,67,68],inclusive:!1},component_queue:{rules:[65,66,67,68],inclusive:!1},component_db:{rules:[65,66,67,68],inclusive:!1},component:{rules:[65,66,67,68],inclusive:!1},container_boundary:{rules:[65,66,67,68],inclusive:!1},container_ext_queue:{rules:[65,66,67,68],inclusive:!1},container_ext_db:{rules:[65,66,67,68],inclusive:!1},container_ext:{rules:[65,66,67,68],inclusive:!1},container_queue:{rules:[65,66,67,68],inclusive:!1},container_db:{rules:[65,66,67,68],inclusive:!1},container:{rules:[65,66,67,68],inclusive:!1},birel:{rules:[65,66,67,68],inclusive:!1},system_boundary:{rules:[65,66,67,68],inclusive:!1},enterprise_boundary:{rules:[65,66,67,68],inclusive:!1},boundary:{rules:[65,66,67,68],inclusive:!1},system_ext_queue:{rules:[65,66,67,68],inclusive:!1},system_ext_db:{rules:[65,66,67,68],inclusive:!1},system_ext:{rules:[65,66,67,68],inclusive:!1},system_queue:{rules:[65,66,67,68],inclusive:!1},system_db:{rules:[65,66,67,68],inclusive:!1},system:{rules:[65,66,67,68],inclusive:!1},person_ext:{rules:[65,66,67,68],inclusive:!1},person:{rules:[65,66,67,68],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,82,83,84,85],inclusive:!0}}};return Xi}();Ks.lexer=ws;function fo(){this.yy={}}return fo.prototype=Ks,Ks.Parser=fo,new fo}();XW.parser=XW;const gDe=XW;let am=[],fk=[""],wg="global",om="",p3=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],lF=[],Fdt="",Ndt=!1,QW=4,ZW=2;var wPt;const pDe=function(){return wPt},bDe=function(i){wPt=Q1(i,Oe())},wDe=function(i,a,f,p,w,m,b,E,_){if(i==null||a===void 0||a===null||f===void 0||f===null||p===void 0||p===null)return;let A={};const I=lF.find(B=>B.from===a&&B.to===f);if(I?A=I:lF.push(A),A.type=i,A.from=a,A.to=f,A.label={text:p},w==null)A.techn={text:""};else if(typeof w=="object"){let[B,N]=Object.entries(w)[0];A[B]={text:N}}else A.techn={text:w};if(m==null)A.descr={text:""};else if(typeof m=="object"){let[B,N]=Object.entries(m)[0];A[B]={text:N}}else A.descr={text:m};if(typeof b=="object"){let[B,N]=Object.entries(b)[0];A[B]=N}else A.sprite=b;if(typeof E=="object"){let[B,N]=Object.entries(E)[0];A[B]=N}else A.tags=E;if(typeof _=="object"){let[B,N]=Object.entries(_)[0];A[B]=N}else A.link=_;A.wrap=dk()},vDe=function(i,a,f,p,w,m,b){if(a===null||f===null)return;let E={};const _=am.find(A=>A.alias===a);if(_&&a===_.alias?E=_:(E.alias=a,am.push(E)),f==null?E.label={text:""}:E.label={text:f},p==null)E.descr={text:""};else if(typeof p=="object"){let[A,I]=Object.entries(p)[0];E[A]={text:I}}else E.descr={text:p};if(typeof w=="object"){let[A,I]=Object.entries(w)[0];E[A]=I}else E.sprite=w;if(typeof m=="object"){let[A,I]=Object.entries(m)[0];E[A]=I}else E.tags=m;if(typeof b=="object"){let[A,I]=Object.entries(b)[0];E[A]=I}else E.link=b;E.typeC4Shape={text:i},E.parentBoundary=wg,E.wrap=dk()},mDe=function(i,a,f,p,w,m,b,E){if(a===null||f===null)return;let _={};const A=am.find(I=>I.alias===a);if(A&&a===A.alias?_=A:(_.alias=a,am.push(_)),f==null?_.label={text:""}:_.label={text:f},p==null)_.techn={text:""};else if(typeof p=="object"){let[I,B]=Object.entries(p)[0];_[I]={text:B}}else _.techn={text:p};if(w==null)_.descr={text:""};else if(typeof w=="object"){let[I,B]=Object.entries(w)[0];_[I]={text:B}}else _.descr={text:w};if(typeof m=="object"){let[I,B]=Object.entries(m)[0];_[I]=B}else _.sprite=m;if(typeof b=="object"){let[I,B]=Object.entries(b)[0];_[I]=B}else _.tags=b;if(typeof E=="object"){let[I,B]=Object.entries(E)[0];_[I]=B}else _.link=E;_.wrap=dk(),_.typeC4Shape={text:i},_.parentBoundary=wg},yDe=function(i,a,f,p,w,m,b,E){if(a===null||f===null)return;let _={};const A=am.find(I=>I.alias===a);if(A&&a===A.alias?_=A:(_.alias=a,am.push(_)),f==null?_.label={text:""}:_.label={text:f},p==null)_.techn={text:""};else if(typeof p=="object"){let[I,B]=Object.entries(p)[0];_[I]={text:B}}else _.techn={text:p};if(w==null)_.descr={text:""};else if(typeof w=="object"){let[I,B]=Object.entries(w)[0];_[I]={text:B}}else _.descr={text:w};if(typeof m=="object"){let[I,B]=Object.entries(m)[0];_[I]=B}else _.sprite=m;if(typeof b=="object"){let[I,B]=Object.entries(b)[0];_[I]=B}else _.tags=b;if(typeof E=="object"){let[I,B]=Object.entries(E)[0];_[I]=B}else _.link=E;_.wrap=dk(),_.typeC4Shape={text:i},_.parentBoundary=wg},xDe=function(i,a,f,p,w){if(i===null||a===null)return;let m={};const b=p3.find(E=>E.alias===i);if(b&&i===b.alias?m=b:(m.alias=i,p3.push(m)),a==null?m.label={text:""}:m.label={text:a},f==null)m.type={text:"system"};else if(typeof f=="object"){let[E,_]=Object.entries(f)[0];m[E]={text:_}}else m.type={text:f};if(typeof p=="object"){let[E,_]=Object.entries(p)[0];m[E]=_}else m.tags=p;if(typeof w=="object"){let[E,_]=Object.entries(w)[0];m[E]=_}else m.link=w;m.parentBoundary=wg,m.wrap=dk(),om=wg,wg=i,fk.push(om)},kDe=function(i,a,f,p,w){if(i===null||a===null)return;let m={};const b=p3.find(E=>E.alias===i);if(b&&i===b.alias?m=b:(m.alias=i,p3.push(m)),a==null?m.label={text:""}:m.label={text:a},f==null)m.type={text:"container"};else if(typeof f=="object"){let[E,_]=Object.entries(f)[0];m[E]={text:_}}else m.type={text:f};if(typeof p=="object"){let[E,_]=Object.entries(p)[0];m[E]=_}else m.tags=p;if(typeof w=="object"){let[E,_]=Object.entries(w)[0];m[E]=_}else m.link=w;m.parentBoundary=wg,m.wrap=dk(),om=wg,wg=i,fk.push(om)},EDe=function(i,a,f,p,w,m,b,E){if(a===null||f===null)return;let _={};const A=p3.find(I=>I.alias===a);if(A&&a===A.alias?_=A:(_.alias=a,p3.push(_)),f==null?_.label={text:""}:_.label={text:f},p==null)_.type={text:"node"};else if(typeof p=="object"){let[I,B]=Object.entries(p)[0];_[I]={text:B}}else _.type={text:p};if(w==null)_.descr={text:""};else if(typeof w=="object"){let[I,B]=Object.entries(w)[0];_[I]={text:B}}else _.descr={text:w};if(typeof b=="object"){let[I,B]=Object.entries(b)[0];_[I]=B}else _.tags=b;if(typeof E=="object"){let[I,B]=Object.entries(E)[0];_[I]=B}else _.link=E;_.nodeType=i,_.parentBoundary=wg,_.wrap=dk(),om=wg,wg=a,fk.push(om)},TDe=function(){wg=om,fk.pop(),om=fk.pop(),fk.push(om)},CDe=function(i,a,f,p,w,m,b,E,_,A,I){let B=am.find(N=>N.alias===a);if(!(B===void 0&&(B=p3.find(N=>N.alias===a),B===void 0))){if(f!=null)if(typeof f=="object"){let[N,R]=Object.entries(f)[0];B[N]=R}else B.bgColor=f;if(p!=null)if(typeof p=="object"){let[N,R]=Object.entries(p)[0];B[N]=R}else B.fontColor=p;if(w!=null)if(typeof w=="object"){let[N,R]=Object.entries(w)[0];B[N]=R}else B.borderColor=w;if(m!=null)if(typeof m=="object"){let[N,R]=Object.entries(m)[0];B[N]=R}else B.shadowing=m;if(b!=null)if(typeof b=="object"){let[N,R]=Object.entries(b)[0];B[N]=R}else B.shape=b;if(E!=null)if(typeof E=="object"){let[N,R]=Object.entries(E)[0];B[N]=R}else B.sprite=E;if(_!=null)if(typeof _=="object"){let[N,R]=Object.entries(_)[0];B[N]=R}else B.techn=_;if(A!=null)if(typeof A=="object"){let[N,R]=Object.entries(A)[0];B[N]=R}else B.legendText=A;if(I!=null)if(typeof I=="object"){let[N,R]=Object.entries(I)[0];B[N]=R}else B.legendSprite=I}},_De=function(i,a,f,p,w,m,b){const E=lF.find(_=>_.from===a&&_.to===f);if(E!==void 0){if(p!=null)if(typeof p=="object"){let[_,A]=Object.entries(p)[0];E[_]=A}else E.textColor=p;if(w!=null)if(typeof w=="object"){let[_,A]=Object.entries(w)[0];E[_]=A}else E.lineColor=w;if(m!=null)if(typeof m=="object"){let[_,A]=Object.entries(m)[0];E[_]=parseInt(A)}else E.offsetX=parseInt(m);if(b!=null)if(typeof b=="object"){let[_,A]=Object.entries(b)[0];E[_]=parseInt(A)}else E.offsetY=parseInt(b)}},SDe=function(i,a,f){let p=QW,w=ZW;if(typeof a=="object"){const m=Object.values(a)[0];p=parseInt(m)}else p=parseInt(a);if(typeof f=="object"){const m=Object.values(f)[0];w=parseInt(m)}else w=parseInt(f);p>=1&&(QW=p),w>=1&&(ZW=w)},ADe=function(){return QW},LDe=function(){return ZW},MDe=function(){return wg},DDe=function(){return om},vPt=function(i){return i==null?am:am.filter(a=>a.parentBoundary===i)},IDe=function(i){return am.find(a=>a.alias===i)},ODe=function(i){return Object.keys(vPt(i))},PDe=function(i){return i==null?p3:p3.filter(a=>a.parentBoundary===i)},FDe=function(){return lF},NDe=function(){return Fdt},BDe=function(i){Ndt=i},dk=function(){return Ndt},Bdt={addPersonOrSystem:vDe,addPersonOrSystemBoundary:xDe,addContainer:mDe,addContainerBoundary:kDe,addComponent:yDe,addDeploymentNode:EDe,popBoundaryParseStack:TDe,addRel:wDe,updateElStyle:CDe,updateRelStyle:_De,updateLayoutConfig:SDe,autoWrap:dk,setWrap:BDe,getC4ShapeArray:vPt,getC4Shape:IDe,getC4ShapeKeys:ODe,getBoundarys:PDe,getCurrentBoundaryParse:MDe,getParentBoundaryParse:DDe,getRels:FDe,getTitle:NDe,getC4Type:pDe,getC4ShapeInRow:ADe,getC4BoundaryInRow:LDe,setAccTitle:E0,getAccTitle:fg,getAccDescription:gg,setAccDescription:dg,getConfig:()=>Oe().c4,clear:function(){am=[],p3=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],om="",wg="global",fk=[""],lF=[],fk=[""],Fdt="",Ndt=!1,QW=4,ZW=2},LINETYPE:{SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},setTitle:function(i){Fdt=Q1(i,Oe())},setC4Type:bDe},JW=(i,a)=>{const f=i.append("rect");if(f.attr("x",a.x),f.attr("y",a.y),f.attr("fill",a.fill),f.attr("stroke",a.stroke),f.attr("width",a.width),f.attr("height",a.height),a.rx!==void 0&&f.attr("rx",a.rx),a.ry!==void 0&&f.attr("ry",a.ry),a.attrs!==void 0)for(const p in a.attrs)f.attr(p,a.attrs[p]);return a.class!==void 0&&f.attr("class",a.class),f},mPt=(i,a)=>{const f={x:a.startx,y:a.starty,width:a.stopx-a.startx,height:a.stopy-a.starty,fill:a.fill,stroke:a.stroke,class:"rect"};JW(i,f).lower()},RDe=(i,a)=>{const f=a.text.replace(WP," "),p=i.append("text");p.attr("x",a.x),p.attr("y",a.y),p.attr("class","legend"),p.style("text-anchor",a.anchor),a.class!==void 0&&p.attr("class",a.class);const w=p.append("tspan");return w.attr("x",a.x+a.textMargin*2),w.text(f),p},jDe=(i,a,f,p)=>{const w=i.append("image");w.attr("x",a),w.attr("y",f);const m=ik(p);w.attr("xlink:href",m)},$De=(i,a,f,p)=>{const w=i.append("use");w.attr("x",a),w.attr("y",f);const m=ik(p);w.attr("xlink:href",`#${m}`)},bT=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),Rdt=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),jdt=function(i,a){return JW(i,a)},yPt=function(i,a,f,p,w,m){const b=i.append("image");b.attr("width",a),b.attr("height",f),b.attr("x",p),b.attr("y",w);let E=m.startsWith("data:image/png;base64")?m:ik(m);b.attr("xlink:href",E)},zDe=(i,a,f)=>{const p=i.append("g");let w=0;for(let m of a){let b=m.textColor?m.textColor:"#444444",E=m.lineColor?m.lineColor:"#444444",_=m.offsetX?parseInt(m.offsetX):0,A=m.offsetY?parseInt(m.offsetY):0,I="";if(w===0){let N=p.append("line");N.attr("x1",m.startPoint.x),N.attr("y1",m.startPoint.y),N.attr("x2",m.endPoint.x),N.attr("y2",m.endPoint.y),N.attr("stroke-width","1"),N.attr("stroke",E),N.style("fill","none"),m.type!=="rel_b"&&N.attr("marker-end","url("+I+"#arrowhead)"),(m.type==="birel"||m.type==="rel_b")&&N.attr("marker-start","url("+I+"#arrowend)"),w=-1}else{let N=p.append("path");N.attr("fill","none").attr("stroke-width","1").attr("stroke",E).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",m.startPoint.x).replaceAll("starty",m.startPoint.y).replaceAll("controlx",m.startPoint.x+(m.endPoint.x-m.startPoint.x)/2-(m.endPoint.x-m.startPoint.x)/4).replaceAll("controly",m.startPoint.y+(m.endPoint.y-m.startPoint.y)/2).replaceAll("stopx",m.endPoint.x).replaceAll("stopy",m.endPoint.y)),m.type!=="rel_b"&&N.attr("marker-end","url("+I+"#arrowhead)"),(m.type==="birel"||m.type==="rel_b")&&N.attr("marker-start","url("+I+"#arrowend)")}let B=f.messageFont();L5(f)(m.label.text,p,Math.min(m.startPoint.x,m.endPoint.x)+Math.abs(m.endPoint.x-m.startPoint.x)/2+_,Math.min(m.startPoint.y,m.endPoint.y)+Math.abs(m.endPoint.y-m.startPoint.y)/2+A,m.label.width,m.label.height,{fill:b},B),m.techn&&m.techn.text!==""&&(B=f.messageFont(),L5(f)("["+m.techn.text+"]",p,Math.min(m.startPoint.x,m.endPoint.x)+Math.abs(m.endPoint.x-m.startPoint.x)/2+_,Math.min(m.startPoint.y,m.endPoint.y)+Math.abs(m.endPoint.y-m.startPoint.y)/2+f.messageFontSize+5+A,Math.max(m.label.width,m.techn.width),m.techn.height,{fill:b,"font-style":"italic"},B))}},qDe=function(i,a,f){const p=i.append("g");let w=a.bgColor?a.bgColor:"none",m=a.borderColor?a.borderColor:"#444444",b=a.fontColor?a.fontColor:"black",E={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};a.nodeType&&(E={"stroke-width":1});let _={x:a.x,y:a.y,fill:w,stroke:m,width:a.width,height:a.height,rx:2.5,ry:2.5,attrs:E};jdt(p,_);let A=f.boundaryFont();A.fontWeight="bold",A.fontSize=A.fontSize+2,A.fontColor=b,L5(f)(a.label.text,p,a.x,a.y+a.label.Y,a.width,a.height,{fill:"#444444"},A),a.type&&a.type.text!==""&&(A=f.boundaryFont(),A.fontColor=b,L5(f)(a.type.text,p,a.x,a.y+a.type.Y,a.width,a.height,{fill:"#444444"},A)),a.descr&&a.descr.text!==""&&(A=f.boundaryFont(),A.fontSize=A.fontSize-2,A.fontColor=b,L5(f)(a.descr.text,p,a.x,a.y+a.descr.Y,a.width,a.height,{fill:"#444444"},A))},HDe=function(i,a,f){var B;let p=a.bgColor?a.bgColor:f[a.typeC4Shape.text+"_bg_color"],w=a.borderColor?a.borderColor:f[a.typeC4Shape.text+"_border_color"],m=a.fontColor?a.fontColor:"#FFFFFF",b="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(a.typeC4Shape.text){case"person":b="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":b="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";break}const E=i.append("g");E.attr("class","person-man");const _=bT();switch(a.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":_.x=a.x,_.y=a.y,_.fill=p,_.width=a.width,_.height=a.height,_.stroke=w,_.rx=2.5,_.ry=2.5,_.attrs={"stroke-width":.5},jdt(E,_);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":E.append("path").attr("fill",p).attr("stroke-width","0.5").attr("stroke",w).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",a.x).replaceAll("starty",a.y).replaceAll("half",a.width/2).replaceAll("height",a.height)),E.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",w).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",a.x).replaceAll("starty",a.y).replaceAll("half",a.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":E.append("path").attr("fill",p).attr("stroke-width","0.5").attr("stroke",w).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",a.x).replaceAll("starty",a.y).replaceAll("width",a.width).replaceAll("half",a.height/2)),E.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",w).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",a.x+a.width).replaceAll("starty",a.y).replaceAll("half",a.height/2));break}let A=ZDe(f,a.typeC4Shape.text);switch(E.append("text").attr("fill",m).attr("font-family",A.fontFamily).attr("font-size",A.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",a.typeC4Shape.width).attr("x",a.x+a.width/2-a.typeC4Shape.width/2).attr("y",a.y+a.typeC4Shape.Y).text("<<"+a.typeC4Shape.text+">>"),a.typeC4Shape.text){case"person":case"external_person":yPt(E,48,48,a.x+a.width/2-24,a.y+a.image.Y,b);break}let I=f[a.typeC4Shape.text+"Font"]();return I.fontWeight="bold",I.fontSize=I.fontSize+2,I.fontColor=m,L5(f)(a.label.text,E,a.x,a.y+a.label.Y,a.width,a.height,{fill:m},I),I=f[a.typeC4Shape.text+"Font"](),I.fontColor=m,a.techn&&((B=a.techn)==null?void 0:B.text)!==""?L5(f)(a.techn.text,E,a.x,a.y+a.techn.Y,a.width,a.height,{fill:m,"font-style":"italic"},I):a.type&&a.type.text!==""&&L5(f)(a.type.text,E,a.x,a.y+a.type.Y,a.width,a.height,{fill:m,"font-style":"italic"},I),a.descr&&a.descr.text!==""&&(I=f.personFont(),I.fontColor=m,L5(f)(a.descr.text,E,a.x,a.y+a.descr.Y,a.width,a.height,{fill:m},I)),a.height},VDe=function(i){i.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},GDe=function(i){i.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},UDe=function(i){i.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},WDe=function(i){i.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},YDe=function(i){i.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},KDe=function(i){i.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},XDe=function(i){i.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},QDe=function(i){const f=i.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);f.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),f.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},ZDe=(i,a)=>({fontFamily:i[a+"FontFamily"],fontSize:i[a+"FontSize"],fontWeight:i[a+"FontWeight"]}),L5=function(){function i(w,m,b,E,_,A,I){const B=m.append("text").attr("x",b+_/2).attr("y",E+A/2+5).style("text-anchor","middle").text(w);p(B,I)}function a(w,m,b,E,_,A,I,B){const{fontSize:N,fontFamily:R,fontWeight:z}=B,W=w.split(Kr.lineBreakRegex);for(let et=0;et=this.data.widthLimit||p>=this.data.widthLimit||this.nextData.cnt>xPt)&&(f=this.nextData.startx+a.margin+ds.nextLinePaddingX,w=this.nextData.stopy+a.margin*2,this.nextData.stopx=p=f+a.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=m=w+a.height,this.nextData.cnt=1),a.x=f,a.y=w,this.updateVal(this.data,"startx",f,Math.min),this.updateVal(this.data,"starty",w,Math.min),this.updateVal(this.data,"stopx",p,Math.max),this.updateVal(this.data,"stopy",m,Math.max),this.updateVal(this.nextData,"startx",f,Math.min),this.updateVal(this.nextData,"starty",w,Math.min),this.updateVal(this.nextData,"stopx",p,Math.max),this.updateVal(this.nextData,"stopy",m,Math.max)}init(a){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},zdt(a.db.getConfig())}bumpLastMargin(a){this.data.stopx+=a,this.data.stopy+=a}}const zdt=function(i){Z1(ds,i),i.fontFamily&&(ds.personFontFamily=ds.systemFontFamily=ds.messageFontFamily=i.fontFamily),i.fontSize&&(ds.personFontSize=ds.systemFontSize=ds.messageFontSize=i.fontSize),i.fontWeight&&(ds.personFontWeight=ds.systemFontWeight=ds.messageFontWeight=i.fontWeight)},hF=(i,a)=>({fontFamily:i[a+"FontFamily"],fontSize:i[a+"FontSize"],fontWeight:i[a+"FontWeight"]}),nY=i=>({fontFamily:i.boundaryFontFamily,fontSize:i.boundaryFontSize,fontWeight:i.boundaryFontWeight}),JDe=i=>({fontFamily:i.messageFontFamily,fontSize:i.messageFontSize,fontWeight:i.messageFontWeight});function cm(i,a,f,p,w){if(!a[i].width)if(f)a[i].text=UIt(a[i].text,w,p),a[i].textLines=a[i].text.split(Kr.lineBreakRegex).length,a[i].width=w,a[i].height=odt(a[i].text,p);else{let m=a[i].text.split(Kr.lineBreakRegex);a[i].textLines=m.length;let b=0;a[i].height=0,a[i].width=0;for(const E of m)a[i].width=Math.max(d3(E,p),a[i].width),b=odt(E,p),a[i].height=a[i].height+b}}const EPt=function(i,a,f){a.x=f.data.startx,a.y=f.data.starty,a.width=f.data.stopx-f.data.startx,a.height=f.data.stopy-f.data.starty,a.label.y=ds.c4ShapeMargin-35;let p=a.wrap&&ds.wrap,w=nY(ds);w.fontSize=w.fontSize+2,w.fontWeight="bold";let m=d3(a.label.text,w);cm("label",a,p,w,m),b3.drawBoundary(i,a,ds)},TPt=function(i,a,f,p){let w=0;for(const m of p){w=0;const b=f[m];let E=hF(ds,b.typeC4Shape.text);switch(E.fontSize=E.fontSize-2,b.typeC4Shape.width=d3("«"+b.typeC4Shape.text+"»",E),b.typeC4Shape.height=E.fontSize+2,b.typeC4Shape.Y=ds.c4ShapePadding,w=b.typeC4Shape.Y+b.typeC4Shape.height-4,b.image={width:0,height:0,Y:0},b.typeC4Shape.text){case"person":case"external_person":b.image.width=48,b.image.height=48,b.image.Y=w,w=b.image.Y+b.image.height;break}b.sprite&&(b.image.width=48,b.image.height=48,b.image.Y=w,w=b.image.Y+b.image.height);let _=b.wrap&&ds.wrap,A=ds.width-ds.c4ShapePadding*2,I=hF(ds,b.typeC4Shape.text);if(I.fontSize=I.fontSize+2,I.fontWeight="bold",cm("label",b,_,I,A),b.label.Y=w+8,w=b.label.Y+b.label.height,b.type&&b.type.text!==""){b.type.text="["+b.type.text+"]";let R=hF(ds,b.typeC4Shape.text);cm("type",b,_,R,A),b.type.Y=w+5,w=b.type.Y+b.type.height}else if(b.techn&&b.techn.text!==""){b.techn.text="["+b.techn.text+"]";let R=hF(ds,b.techn.text);cm("techn",b,_,R,A),b.techn.Y=w+5,w=b.techn.Y+b.techn.height}let B=w,N=b.label.width;if(b.descr&&b.descr.text!==""){let R=hF(ds,b.typeC4Shape.text);cm("descr",b,_,R,A),b.descr.Y=w+20,w=b.descr.Y+b.descr.height,N=Math.max(b.label.width,b.descr.width),B=w-b.descr.textLines*5}N=N+ds.c4ShapePadding,b.width=Math.max(b.width||ds.width,N,ds.width),b.height=Math.max(b.height||ds.height,B,ds.height),b.margin=b.margin||ds.c4ShapeMargin,i.insert(b),b3.drawC4Shape(a,b,ds)}i.bumpLastMargin(ds.c4ShapeMargin)};let rw=class{constructor(a,f){this.x=a,this.y=f}},CPt=function(i,a){let f=i.x,p=i.y,w=a.x,m=a.y,b=f+i.width/2,E=p+i.height/2,_=Math.abs(f-w),A=Math.abs(p-m),I=A/_,B=i.height/i.width,N=null;return p==m&&fw?N=new rw(f,E):f==w&&pm&&(N=new rw(b,p)),f>w&&p=I?N=new rw(f,E+I*i.width/2):N=new rw(b-_/A*i.height/2,p+i.height):f=I?N=new rw(f+i.width,E+I*i.width/2):N=new rw(b+_/A*i.height/2,p+i.height):fm?B>=I?N=new rw(f+i.width,E-I*i.width/2):N=new rw(b+i.height/2*_/A,p):f>w&&p>m&&(B>=I?N=new rw(f,E-i.width/2*I):N=new rw(b-i.height/2*_/A,p)),N},tIe=function(i,a){let f={x:0,y:0};f.x=a.x+a.width/2,f.y=a.y+a.height/2;let p=CPt(i,f);f.x=i.x+i.width/2,f.y=i.y+i.height/2;let w=CPt(a,f);return{startPoint:p,endPoint:w}};const eIe=function(i,a,f,p){let w=0;for(let m of a){w=w+1;let b=m.wrap&&ds.wrap,E=JDe(ds);p.db.getC4Type()==="C4Dynamic"&&(m.label.text=w+": "+m.label.text);let A=d3(m.label.text,E);cm("label",m,b,E,A),m.techn&&m.techn.text!==""&&(A=d3(m.techn.text,E),cm("techn",m,b,E,A)),m.descr&&m.descr.text!==""&&(A=d3(m.descr.text,E),cm("descr",m,b,E,A));let I=f(m.from),B=f(m.to),N=tIe(I,B);m.startPoint=N.startPoint,m.endPoint=N.endPoint}b3.drawRels(i,a,ds)};function _Pt(i,a,f,p,w){let m=new kPt(w);m.data.widthLimit=f.data.widthLimit/Math.min($dt,p.length);for(let[b,E]of p.entries()){let _=0;E.image={width:0,height:0,Y:0},E.sprite&&(E.image.width=48,E.image.height=48,E.image.Y=_,_=E.image.Y+E.image.height);let A=E.wrap&&ds.wrap,I=nY(ds);if(I.fontSize=I.fontSize+2,I.fontWeight="bold",cm("label",E,A,I,m.data.widthLimit),E.label.Y=_+8,_=E.label.Y+E.label.height,E.type&&E.type.text!==""){E.type.text="["+E.type.text+"]";let z=nY(ds);cm("type",E,A,z,m.data.widthLimit),E.type.Y=_+5,_=E.type.Y+E.type.height}if(E.descr&&E.descr.text!==""){let z=nY(ds);z.fontSize=z.fontSize-2,cm("descr",E,A,z,m.data.widthLimit),E.descr.Y=_+20,_=E.descr.Y+E.descr.height}if(b==0||b%$dt===0){let z=f.data.startx+ds.diagramMarginX,W=f.data.stopy+ds.diagramMarginY+_;m.setData(z,z,W,W)}else{let z=m.data.stopx!==m.data.startx?m.data.stopx+ds.diagramMarginX:m.data.startx,W=m.data.starty;m.setData(z,z,W,W)}m.name=E.alias;let B=w.db.getC4ShapeArray(E.alias),N=w.db.getC4ShapeKeys(E.alias);N.length>0&&TPt(m,i,B,N),a=E.alias;let R=w.db.getBoundarys(a);R.length>0&&_Pt(i,a,m,R,w),E.alias!=="global"&&EPt(i,E,m),f.data.stopy=Math.max(m.data.stopy+ds.c4ShapeMargin,f.data.stopy),f.data.stopx=Math.max(m.data.stopx+ds.c4ShapeMargin,f.data.stopx),tY=Math.max(tY,f.data.stopx),eY=Math.max(eY,f.data.stopy)}}const SPt={drawPersonOrSystemArray:TPt,drawBoundary:EPt,setConf:zdt,draw:function(i,a,f,p){ds=Oe().c4;const w=Oe().securityLevel;let m;w==="sandbox"&&(m=yr("#i"+a));const b=yr(w==="sandbox"?m.nodes()[0].contentDocument.body:"body");let E=p.db;p.db.setWrap(ds.wrap),xPt=E.getC4ShapeInRow(),$dt=E.getC4BoundaryInRow(),Ut.debug(`C:${JSON.stringify(ds,null,2)}`);const _=w==="sandbox"?b.select(`[id="${a}"]`):yr(`[id="${a}"]`);b3.insertComputerIcon(_),b3.insertDatabaseIcon(_),b3.insertClockIcon(_);let A=new kPt(p);A.setData(ds.diagramMarginX,ds.diagramMarginX,ds.diagramMarginY,ds.diagramMarginY),A.data.widthLimit=screen.availWidth,tY=ds.diagramMarginX,eY=ds.diagramMarginY;const I=p.db.getTitle();let B=p.db.getBoundarys("");_Pt(_,"",A,B,p),b3.insertArrowHead(_),b3.insertArrowEnd(_),b3.insertArrowCrossHead(_),b3.insertArrowFilledHead(_),eIe(_,p.db.getRels(),p.db.getC4Shape,p),A.data.stopx=tY,A.data.stopy=eY;const N=A.data;let z=N.stopy-N.starty+2*ds.diagramMarginY;const et=N.stopx-N.startx+2*ds.diagramMarginX;I&&_.append("text").text(I).attr("x",(N.stopx-N.startx)/2-4*ds.diagramMarginX).attr("y",N.starty+ds.diagramMarginY),k0(_,z,et,ds.useMaxWidth);const st=I?60:0;_.attr("viewBox",N.startx-ds.diagramMarginX+" -"+(ds.diagramMarginY+st)+" "+et+" "+(z+st)),Ut.debug("models:",N)}},nIe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:gDe,db:Bdt,renderer:SPt,styles:i=>`.person { + */window.addEventListener("load",H$e,!1)}const Mqt=function(i){um.parseError=i},nQ=[];let W2e=!1;const V$e=async()=>{if(!W2e){for(W2e=!0;nQ.length>0;){const i=nQ.shift();if(i)try{await i()}catch(s){Xe.error("Error executing queue",s)}}W2e=!1}},Dqt=async(i,s)=>new Promise((u,d)=>{const p=()=>new Promise((v,b)=>{RC.parse(i,s).then(y=>{v(y),u(y)},y=>{var T;Xe.error("Error parsing",y),(T=um.parseError)==null||T.call(um,y),b(y),d(y)})});nQ.push(p),V$e().catch(d)}),U$e=(i,s,u)=>new Promise((d,p)=>{const v=()=>new Promise((b,y)=>{RC.render(i,s,u).then(T=>{b(T),d(T)},T=>{var _;Xe.error("Error parsing",T),(_=um.parseError)==null||_.call(um,T),y(T),p(T)})});nQ.push(v),V$e().catch(p)}),um={startOnLoad:!0,mermaidAPI:RC,parse:Dqt,render:U$e,init:Aqt,run:z$e,registerExternalDiagrams:Lqt,initialize:q$e,parseError:void 0,contentLoaded:H$e,setParseErrorHandler:Mqt,detectType:_X};class lm{constructor(s,u,d){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=s,this.start=u,this.end=d}static range(s,u){return u?!s||!s.loc||!u.loc||s.loc.lexer!==u.loc.lexer?null:new lm(s.loc.lexer,s.loc.start,u.loc.end):s&&s.loc}}class U4{constructor(s,u){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=s,this.loc=u}range(s,u){return new U4(u,lm.range(this,s))}}class Ci{constructor(s,u){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var d="KaTeX parse error: "+s,p,v,b=u&&u.loc;if(b&&b.start<=b.end){var y=b.lexer.input;p=b.start,v=b.end,p===y.length?d+=" at end of input: ":d+=" at position "+(p+1)+": ";var T=y.slice(p,v).replace(/[^]/g,"$&̲"),_;p>15?_="…"+y.slice(p-15,p):_=y.slice(0,p);var A;v+15":">","<":"<",'"':""","'":"'"},Fqt=/[&><"']/g;function Rqt(i){return String(i).replace(Fqt,s=>Bqt[s])}var G$e=function i(s){return s.type==="ordgroup"||s.type==="color"?s.body.length===1?i(s.body[0]):s:s.type==="font"?i(s.body):s},jqt=function(s){var u=G$e(s);return u.type==="mathord"||u.type==="textord"||u.type==="atom"},$qt=function(s){if(!s)throw new Error("Expected non-null, but got "+String(s));return s},zqt=function(s){var u=/^\s*([^\\/#]*?)(?::|�*58|�*3a)/i.exec(s);return u!=null?u[1]:"_relative"},Ya={contains:Iqt,deflt:Oqt,escape:Rqt,hyphenate:Pqt,getBaseElem:G$e,isCharacterBox:jqt,protocolFromUrl:zqt},rQ={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:i=>"#"+i},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(i,s)=>(s.push(i),s)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:i=>Math.max(0,i),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:i=>Math.max(0,i),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:i=>Math.max(0,i),cli:"-e, --max-expand ",cliProcessor:i=>i==="Infinity"?1/0:parseInt(i)},globalGroup:{type:"boolean",cli:!1}};function qqt(i){if(i.default)return i.default;var s=i.type,u=Array.isArray(s)?s[0]:s;if(typeof u!="string")return u.enum[0];switch(u){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}class Y2e{constructor(s){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,s=s||{};for(var u in rQ)if(rQ.hasOwnProperty(u)){var d=rQ[u];this[u]=s[u]!==void 0?d.processor?d.processor(s[u]):s[u]:qqt(d)}}reportNonstrict(s,u,d){var p=this.strict;if(typeof p=="function"&&(p=p(s,u,d)),!(!p||p==="ignore")){if(p===!0||p==="error")throw new Ci("LaTeX-incompatible input and strict mode is set to 'error': "+(u+" ["+s+"]"),d);p==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(u+" ["+s+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+p+"': "+u+" ["+s+"]"))}}useStrictBehavior(s,u,d){var p=this.strict;if(typeof p=="function")try{p=p(s,u,d)}catch{p="error"}return!p||p==="ignore"?!1:p===!0||p==="error"?!0:p==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(u+" ["+s+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+p+"': "+u+" ["+s+"]")),!1)}isTrusted(s){s.url&&!s.protocol&&(s.protocol=Ya.protocolFromUrl(s.url));var u=typeof this.trust=="function"?this.trust(s):this.trust;return!!u}}class E9{constructor(s,u,d){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=s,this.size=u,this.cramped=d}sup(){return G4[Hqt[this.id]]}sub(){return G4[Vqt[this.id]]}fracNum(){return G4[Uqt[this.id]]}fracDen(){return G4[Gqt[this.id]]}cramp(){return G4[Kqt[this.id]]}text(){return G4[Wqt[this.id]]}isTight(){return this.size>=2}}var X2e=0,iQ=1,DD=2,L7=3,aR=4,Pv=5,ID=6,Mp=7,G4=[new E9(X2e,0,!1),new E9(iQ,0,!0),new E9(DD,1,!1),new E9(L7,1,!0),new E9(aR,2,!1),new E9(Pv,2,!0),new E9(ID,3,!1),new E9(Mp,3,!0)],Hqt=[aR,Pv,aR,Pv,ID,Mp,ID,Mp],Vqt=[Pv,Pv,Pv,Pv,Mp,Mp,Mp,Mp],Uqt=[DD,L7,aR,Pv,ID,Mp,ID,Mp],Gqt=[L7,L7,Pv,Pv,Mp,Mp,Mp,Mp],Kqt=[iQ,iQ,L7,L7,Pv,Pv,Mp,Mp],Wqt=[X2e,iQ,DD,L7,DD,L7,DD,L7],Ta={DISPLAY:G4[X2e],TEXT:G4[DD],SCRIPT:G4[aR],SCRIPTSCRIPT:G4[ID]},Q2e=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];function Yqt(i){for(var s=0;s=p[0]&&i<=p[1])return u.name}return null}var sQ=[];Q2e.forEach(i=>i.blocks.forEach(s=>sQ.push(...s)));function K$e(i){for(var s=0;s=sQ[s]&&i<=sQ[s+1])return!0;return!1}var OD=80,Xqt=function(s,u){return"M95,"+(622+s+u)+` +c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 +c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 +c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10 +s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429 +c69,-144,104.5,-217.7,106.5,-221 +l`+s/2.075+" -"+s+` +c5.3,-9.3,12,-14,20,-14 +H400000v`+(40+s)+`H845.2724 +s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7 +c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z +M`+(834+s)+" "+u+"h400000v"+(40+s)+"h-400000z"},Qqt=function(s,u){return"M263,"+(601+s+u)+`c0.7,0,18,39.7,52,119 +c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120 +c340,-704.7,510.7,-1060.3,512,-1067 +l`+s/2.084+" -"+s+` +c4.7,-7.3,11,-11,19,-11 +H40000v`+(40+s)+`H1012.3 +s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232 +c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1 +s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26 +c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z +M`+(1001+s)+" "+u+"h400000v"+(40+s)+"h-400000z"},Jqt=function(s,u){return"M983 "+(10+s+u)+` +l`+s/3.13+" -"+s+` +c4,-6.7,10,-10,18,-10 H400000v`+(40+s)+` +H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7 +s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744 +c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30 +c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722 +c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5 +c53.7,-170.3,84.5,-266.8,92.5,-289.5z +M`+(1001+s)+" "+u+"h400000v"+(40+s)+"h-400000z"},Zqt=function(s,u){return"M424,"+(2398+s+u)+` +c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514 +c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20 +s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121 +s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081 +l`+s/4.223+" -"+s+`c4,-6.7,10,-10,18,-10 H400000 +v`+(40+s)+`H1014.6 +s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185 +c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2z M`+(1001+s)+" "+u+` +h400000v`+(40+s)+"h-400000z"},eHt=function(s,u){return"M473,"+(2713+s+u)+` +c339.3,-1799.3,509.3,-2700,510,-2702 l`+s/5.298+" -"+s+` +c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+s)+`H1017.7 +s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200 +c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26 +s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104, +606zM`+(1001+s)+" "+u+"h400000v"+(40+s)+"H1017.7z"},tHt=function(s){var u=s/2;return"M400000 "+s+" H0 L"+u+" 0 l65 45 L145 "+(s-80)+" H400000z"},nHt=function(s,u,d){var p=d-54-u-s;return"M702 "+(s+u)+"H400000"+(40+s)+` +H742v`+p+`l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1 +h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170 +c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 +219 661 l218 661zM702 `+u+"H400000v"+(40+s)+"H742z"},rHt=function(s,u,d){u=1e3*u;var p="";switch(s){case"sqrtMain":p=Xqt(u,OD);break;case"sqrtSize1":p=Qqt(u,OD);break;case"sqrtSize2":p=Jqt(u,OD);break;case"sqrtSize3":p=Zqt(u,OD);break;case"sqrtSize4":p=eHt(u,OD);break;case"sqrtTall":p=nHt(u,OD,d)}return p},iHt=function(s,u){switch(s){case"⎜":return"M291 0 H417 V"+u+" H291z M291 0 H417 V"+u+" H291z";case"∣":return"M145 0 H188 V"+u+" H145z M145 0 H188 V"+u+" H145z";case"∥":return"M145 0 H188 V"+u+" H145z M145 0 H188 V"+u+" H145z"+("M367 0 H410 V"+u+" H367z M367 0 H410 V"+u+" H367z");case"⎟":return"M457 0 H583 V"+u+" H457z M457 0 H583 V"+u+" H457z";case"⎢":return"M319 0 H403 V"+u+" H319z M319 0 H403 V"+u+" H319z";case"⎥":return"M263 0 H347 V"+u+" H263z M263 0 H347 V"+u+" H263z";case"⎪":return"M384 0 H504 V"+u+" H384z M384 0 H504 V"+u+" H384z";case"⏐":return"M312 0 H355 V"+u+" H312z M312 0 H355 V"+u+" H312z";case"‖":return"M257 0 H300 V"+u+" H257z M257 0 H300 V"+u+" H257z"+("M478 0 H521 V"+u+" H478z M478 0 H521 V"+u+" H478z");default:return""}},W$e={doubleleftarrow:`M262 157 +l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 + 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 + 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 +c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5 + 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87 +-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7 +-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z +m8 0v40h399730v-40zm0 194v40h399730v-40z`,doublerightarrow:`M399738 392l +-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5 + 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88 +-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68 +-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18 +-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782 +c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3 +-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,leftarrow:`M400000 241H110l3-3c68.7-52.7 113.7-120 + 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8 +-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247 +c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208 + 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3 + 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202 + l-3-3h399890zM100 241v40h399900v-40z`,leftbrace:`M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117 +-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7 + 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,leftbraceunder:`M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13 + 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688 + 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7 +-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,leftgroup:`M400000 80 +H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0 + 435 0h399565z`,leftgroupunder:`M400000 262 +H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219 + 435 219h399565z`,leftharpoon:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3 +-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5 +-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7 +-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,leftharpoonplus:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5 + 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3 +-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7 +-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z +m0 0v40h400000v-40z`,leftharpoondown:`M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333 + 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5 + 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667 +-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,leftharpoondownplus:`M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12 + 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7 +-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0 +v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,lefthook:`M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5 +-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3 +-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21 + 71.5 23h399859zM103 281v-40h399897v40z`,leftlinesegment:`M40 281 V428 H0 V94 H40 V241 H400000 v40z +M40 281 V428 H0 V94 H40 V241 H400000 v40z`,leftmapsto:`M40 281 V448H0V74H40V241H400000v40z +M40 281 V448H0V74H40V241H400000v40z`,leftToFrom:`M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23 +-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8 +c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3 + 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,longequal:`M0 50 h400000 v40H0z m0 194h40000v40H0z +M0 50 h400000 v40H0z m0 194h40000v40H0z`,midbrace:`M200428 334 +c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14 +-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7 + 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11 + 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,midbraceunder:`M199572 214 +c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14 + 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3 + 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0 +-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,oiintSize1:`M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6 +-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z +m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8 +60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,oiintSize2:`M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8 +-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z +m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2 +c0 110 84 276 504 276s502.4-166 502.4-276z`,oiiintSize1:`M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6 +-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z +m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0 +85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,oiiintSize2:`M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8 +-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z +m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1 +c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,rightarrow:`M0 241v40h399891c-47.3 35.3-84 78-110 128 +-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 + 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 + 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85 +-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 + 151.7 139 205zm0 0v40h399900v-40z`,rightbrace:`M400000 542l +-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5 +s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1 +c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,rightbraceunder:`M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3 + 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237 +-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,rightgroup:`M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0 + 3-1 3-3v-38c-76-158-257-219-435-219H0z`,rightgroupunder:`M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18 + 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,rightharpoon:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3 +-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2 +-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 + 69.2 92 94.5zm0 0v40h399900v-40z`,rightharpoonplus:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11 +-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7 + 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z +m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,rightharpoondown:`M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8 + 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5 +-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95 +-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,rightharpoondownplus:`M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8 + 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 + 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3 +-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z +m0-194v40h400000v-40zm0 0v40h400000v-40z`,righthook:`M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3 + 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0 +-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21 + 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,rightlinesegment:`M399960 241 V94 h40 V428 h-40 V281 H0 v-40z +M399960 241 V94 h40 V428 h-40 V281 H0 v-40z`,rightToFrom:`M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23 + 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32 +-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142 +-167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,twoheadleftarrow:`M0 167c68 40 + 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69 +-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3 +-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19 +-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101 + 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,twoheadrightarrow:`M400000 167 +c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3 + 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42 + 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333 +-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70 + 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,tilde1:`M200 55.538c-77 0-168 73.953-177 73.953-3 0-7 +-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0 + 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0 + 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128 +-68.267.847-113-73.952-191-73.952z`,tilde2:`M344 55.266c-142 0-300.638 81.316-311.5 86.418 +-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9 + 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114 +c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751 + 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,tilde3:`M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457 +-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0 + 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697 + 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696 + -338 0-409-156.573-744-156.573z`,tilde4:`M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345 +-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409 + 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9 + 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409 + -175.236-744-175.236z`,vec:`M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5 +3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11 +10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63 +-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1 +-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59 +H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359 +c-16-25.333-24-45-24-59z`,widehat1:`M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22 +c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,widehat2:`M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat3:`M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat4:`M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widecheck1:`M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1, +-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,widecheck2:`M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck3:`M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck4:`M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,baraboveleftarrow:`M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202 +c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5 +c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130 +s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47 +121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6 +s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11 +c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z +M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,rightarrowabovebar:`M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32 +-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 +13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39 +-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5 +-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 +151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,baraboveshortleftharpoon:`M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17 +c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21 +c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40 +c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z +M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,rightharpoonaboveshortbar:`M0,241 l0,40c399126,0,399993,0,399993,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,shortbaraboveleftharpoon:`M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9, +1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7, +-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z +M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,shortrightharpoonabovebar:`M53,241l0,40c398570,0,399437,0,399437,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},sHt=function(s,u){switch(s){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+u+` v1759 h347 v-84 +H403z M403 1759 V0 H319 V1759 v`+u+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+u+` v1759 H0 v84 H347z +M347 1759 V0 H263 V1759 v`+u+" v1759 h84z";case"vert":return"M145 15 v585 v"+u+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-u+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+u+" v585 h43z";case"doublevert":return"M145 15 v585 v"+u+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-u+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+u+` v585 h43z +M367 15 v585 v`+u+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-u+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M410 15 H367 v585 v`+u+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+u+` v1715 h263 v84 H319z +MM319 602 V0 H403 V602 v`+u+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+u+` v1799 H0 v-84 H319z +MM319 602 V0 H403 V602 v`+u+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+u+` v602 h84z +M403 1759 V0 H319 V1759 v`+u+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+u+` v602 h84z +M347 1759 V0 h-84 V1759 v`+u+" v602 h84z";case"lparen":return`M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1 +c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349, +-36,557 l0,`+(u+84)+`c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210, +949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9 +c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5, +-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189 +l0,-`+(u+92)+`c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3, +-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z`;case"rparen":return`M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3, +63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5 +c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,`+(u+9)+` +c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664 +c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11 +c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17 +c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558 +l0,-`+(u+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, +-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}};class oR{constructor(s){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=s,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(s){return Ya.contains(this.classes,s)}toNode(){for(var s=document.createDocumentFragment(),u=0;uu.toText();return this.children.map(s).join("")}}var K4={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},aQ={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},Y$e={Å:"A",Ð:"D",Þ:"o",å:"a",ð:"d",þ:"o",А:"A",Б:"B",В:"B",Г:"F",Д:"A",Е:"E",Ж:"K",З:"3",И:"N",Й:"N",К:"K",Л:"N",М:"M",Н:"H",О:"O",П:"N",Р:"P",С:"C",Т:"T",У:"y",Ф:"O",Х:"X",Ц:"U",Ч:"h",Ш:"W",Щ:"W",Ъ:"B",Ы:"X",Ь:"B",Э:"3",Ю:"X",Я:"R",а:"a",б:"b",в:"a",г:"r",д:"y",е:"e",ж:"m",з:"e",и:"n",й:"n",к:"n",л:"n",м:"m",н:"n",о:"o",п:"n",р:"p",с:"c",т:"o",у:"y",ф:"b",х:"x",ц:"n",ч:"n",ш:"w",щ:"w",ъ:"a",ы:"m",ь:"a",э:"e",ю:"m",я:"r"};function aHt(i,s){K4[i]=s}function J2e(i,s,u){if(!K4[s])throw new Error("Font metrics not found for font: "+s+".");var d=i.charCodeAt(0),p=K4[s][d];if(!p&&i[0]in Y$e&&(d=Y$e[i[0]].charCodeAt(0),p=K4[s][d]),!p&&u==="text"&&K$e(d)&&(p=K4[s][77]),p)return{depth:p[0],height:p[1],italic:p[2],skew:p[3],width:p[4]}}var Z2e={};function oHt(i){var s;if(i>=5?s=0:i>=3?s=1:s=2,!Z2e[s]){var u=Z2e[s]={cssEmPerMu:aQ.quad[s]/18};for(var d in aQ)aQ.hasOwnProperty(d)&&(u[d]=aQ[d][s])}return Z2e[s]}var cHt=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],X$e=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],Q$e=function(s,u){return u.size<2?s:cHt[s-1][u.size-1]};class M7{constructor(s){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=s.style,this.color=s.color,this.size=s.size||M7.BASESIZE,this.textSize=s.textSize||this.size,this.phantom=!!s.phantom,this.font=s.font||"",this.fontFamily=s.fontFamily||"",this.fontWeight=s.fontWeight||"",this.fontShape=s.fontShape||"",this.sizeMultiplier=X$e[this.size-1],this.maxSize=s.maxSize,this.minRuleThickness=s.minRuleThickness,this._fontMetrics=void 0}extend(s){var u={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var d in s)s.hasOwnProperty(d)&&(u[d]=s[d]);return new M7(u)}havingStyle(s){return this.style===s?this:this.extend({style:s,size:Q$e(this.textSize,s)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(s){return this.size===s&&this.textSize===s?this:this.extend({style:this.style.text(),size:s,textSize:s,sizeMultiplier:X$e[s-1]})}havingBaseStyle(s){s=s||this.style.text();var u=Q$e(M7.BASESIZE,s);return this.size===u&&this.textSize===M7.BASESIZE&&this.style===s?this:this.extend({style:s,size:u})}havingBaseSizing(){var s;switch(this.style.id){case 4:case 5:s=3;break;case 6:case 7:s=1;break;default:s=6}return this.extend({style:this.style.text(),size:s})}withColor(s){return this.extend({color:s})}withPhantom(){return this.extend({phantom:!0})}withFont(s){return this.extend({font:s})}withTextFontFamily(s){return this.extend({fontFamily:s,font:""})}withTextFontWeight(s){return this.extend({fontWeight:s,font:""})}withTextFontShape(s){return this.extend({fontShape:s,font:""})}sizingClasses(s){return s.size!==this.size?["sizing","reset-size"+s.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==M7.BASESIZE?["sizing","reset-size"+this.size,"size"+M7.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=oHt(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}}M7.BASESIZE=6;var ebe={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},uHt={ex:!0,em:!0,mu:!0},J$e=function(s){return typeof s!="string"&&(s=s.unit),s in ebe||s in uHt||s==="ex"},Uh=function(s,u){var d;if(s.unit in ebe)d=ebe[s.unit]/u.fontMetrics().ptPerEm/u.sizeMultiplier;else if(s.unit==="mu")d=u.fontMetrics().cssEmPerMu;else{var p;if(u.style.isTight()?p=u.havingStyle(u.style.text()):p=u,s.unit==="ex")d=p.fontMetrics().xHeight;else if(s.unit==="em")d=p.fontMetrics().quad;else throw new Ci("Invalid unit: '"+s.unit+"'");p!==u&&(d*=p.sizeMultiplier/u.sizeMultiplier)}return Math.min(s.number*d,u.maxSize)},Ri=function(s){return+s.toFixed(4)+"em"},T9=function(s){return s.filter(u=>u).join(" ")},Z$e=function(s,u,d){if(this.classes=s||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=d||{},u){u.style.isTight()&&this.classes.push("mtight");var p=u.getColor();p&&(this.style.color=p)}},eze=function(s){var u=document.createElement(s);u.className=T9(this.classes);for(var d in this.style)this.style.hasOwnProperty(d)&&(u.style[d]=this.style[d]);for(var p in this.attributes)this.attributes.hasOwnProperty(p)&&u.setAttribute(p,this.attributes[p]);for(var v=0;v",u};class cR{constructor(s,u,d,p){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,Z$e.call(this,s,d,p),this.children=u||[]}setAttribute(s,u){this.attributes[s]=u}hasClass(s){return Ya.contains(this.classes,s)}toNode(){return eze.call(this,"span")}toMarkup(){return tze.call(this,"span")}}class tbe{constructor(s,u,d,p){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,Z$e.call(this,u,p),this.children=d||[],this.setAttribute("href",s)}setAttribute(s,u){this.attributes[s]=u}hasClass(s){return Ya.contains(this.classes,s)}toNode(){return eze.call(this,"a")}toMarkup(){return tze.call(this,"a")}}class lHt{constructor(s,u,d){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=u,this.src=s,this.classes=["mord"],this.style=d}hasClass(s){return Ya.contains(this.classes,s)}toNode(){var s=document.createElement("img");s.src=this.src,s.alt=this.alt,s.className="mord";for(var u in this.style)this.style.hasOwnProperty(u)&&(s.style[u]=this.style[u]);return s}toMarkup(){var s=""+this.alt+"0&&(u=document.createElement("span"),u.style.marginRight=Ri(this.italic)),this.classes.length>0&&(u=u||document.createElement("span"),u.className=T9(this.classes));for(var d in this.style)this.style.hasOwnProperty(d)&&(u=u||document.createElement("span"),u.style[d]=this.style[d]);return u?(u.appendChild(s),u):s}toMarkup(){var s=!1,u="0&&(d+="margin-right:"+this.italic+"em;");for(var p in this.style)this.style.hasOwnProperty(p)&&(d+=Ya.hyphenate(p)+":"+this.style[p]+";");d&&(s=!0,u+=' style="'+Ya.escape(d)+'"');var v=Ya.escape(this.text);return s?(u+=">",u+=v,u+="",u):v}}class D7{constructor(s,u){this.children=void 0,this.attributes=void 0,this.children=s||[],this.attributes=u||{}}toNode(){var s="http://www.w3.org/2000/svg",u=document.createElementNS(s,"svg");for(var d in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,d)&&u.setAttribute(d,this.attributes[d]);for(var p=0;p":""}}class nbe{constructor(s){this.attributes=void 0,this.attributes=s||{}}toNode(){var s="http://www.w3.org/2000/svg",u=document.createElementNS(s,"line");for(var d in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,d)&&u.setAttribute(d,this.attributes[d]);return u}toMarkup(){var s=" but got "+String(i)+".")}var dHt={bin:1,close:1,inner:1,open:1,punct:1,rel:1},gHt={"accent-token":1,mathord:1,"op-token":1,spacing:1,textord:1},Ul={math:{},text:{}};function we(i,s,u,d,p,v){Ul[i][p]={font:s,group:u,replace:d},v&&d&&(Ul[i][d]=Ul[i][p])}var Ae="math",si="text",Ue="main",$t="ams",wh="accent-token",ls="bin",Dp="close",ND="inner",Ca="mathord",N0="op-token",hm="open",oQ="punct",Ht="rel",I7="spacing",mn="textord";we(Ae,Ue,Ht,"≡","\\equiv",!0),we(Ae,Ue,Ht,"≺","\\prec",!0),we(Ae,Ue,Ht,"≻","\\succ",!0),we(Ae,Ue,Ht,"∼","\\sim",!0),we(Ae,Ue,Ht,"⊥","\\perp"),we(Ae,Ue,Ht,"⪯","\\preceq",!0),we(Ae,Ue,Ht,"⪰","\\succeq",!0),we(Ae,Ue,Ht,"≃","\\simeq",!0),we(Ae,Ue,Ht,"∣","\\mid",!0),we(Ae,Ue,Ht,"≪","\\ll",!0),we(Ae,Ue,Ht,"≫","\\gg",!0),we(Ae,Ue,Ht,"≍","\\asymp",!0),we(Ae,Ue,Ht,"∥","\\parallel"),we(Ae,Ue,Ht,"⋈","\\bowtie",!0),we(Ae,Ue,Ht,"⌣","\\smile",!0),we(Ae,Ue,Ht,"⊑","\\sqsubseteq",!0),we(Ae,Ue,Ht,"⊒","\\sqsupseteq",!0),we(Ae,Ue,Ht,"≐","\\doteq",!0),we(Ae,Ue,Ht,"⌢","\\frown",!0),we(Ae,Ue,Ht,"∋","\\ni",!0),we(Ae,Ue,Ht,"∝","\\propto",!0),we(Ae,Ue,Ht,"⊢","\\vdash",!0),we(Ae,Ue,Ht,"⊣","\\dashv",!0),we(Ae,Ue,Ht,"∋","\\owns"),we(Ae,Ue,oQ,".","\\ldotp"),we(Ae,Ue,oQ,"⋅","\\cdotp"),we(Ae,Ue,mn,"#","\\#"),we(si,Ue,mn,"#","\\#"),we(Ae,Ue,mn,"&","\\&"),we(si,Ue,mn,"&","\\&"),we(Ae,Ue,mn,"ℵ","\\aleph",!0),we(Ae,Ue,mn,"∀","\\forall",!0),we(Ae,Ue,mn,"ℏ","\\hbar",!0),we(Ae,Ue,mn,"∃","\\exists",!0),we(Ae,Ue,mn,"∇","\\nabla",!0),we(Ae,Ue,mn,"♭","\\flat",!0),we(Ae,Ue,mn,"ℓ","\\ell",!0),we(Ae,Ue,mn,"♮","\\natural",!0),we(Ae,Ue,mn,"♣","\\clubsuit",!0),we(Ae,Ue,mn,"℘","\\wp",!0),we(Ae,Ue,mn,"♯","\\sharp",!0),we(Ae,Ue,mn,"♢","\\diamondsuit",!0),we(Ae,Ue,mn,"ℜ","\\Re",!0),we(Ae,Ue,mn,"♡","\\heartsuit",!0),we(Ae,Ue,mn,"ℑ","\\Im",!0),we(Ae,Ue,mn,"♠","\\spadesuit",!0),we(Ae,Ue,mn,"§","\\S",!0),we(si,Ue,mn,"§","\\S"),we(Ae,Ue,mn,"¶","\\P",!0),we(si,Ue,mn,"¶","\\P"),we(Ae,Ue,mn,"†","\\dag"),we(si,Ue,mn,"†","\\dag"),we(si,Ue,mn,"†","\\textdagger"),we(Ae,Ue,mn,"‡","\\ddag"),we(si,Ue,mn,"‡","\\ddag"),we(si,Ue,mn,"‡","\\textdaggerdbl"),we(Ae,Ue,Dp,"⎱","\\rmoustache",!0),we(Ae,Ue,hm,"⎰","\\lmoustache",!0),we(Ae,Ue,Dp,"⟯","\\rgroup",!0),we(Ae,Ue,hm,"⟮","\\lgroup",!0),we(Ae,Ue,ls,"∓","\\mp",!0),we(Ae,Ue,ls,"⊖","\\ominus",!0),we(Ae,Ue,ls,"⊎","\\uplus",!0),we(Ae,Ue,ls,"⊓","\\sqcap",!0),we(Ae,Ue,ls,"∗","\\ast"),we(Ae,Ue,ls,"⊔","\\sqcup",!0),we(Ae,Ue,ls,"◯","\\bigcirc",!0),we(Ae,Ue,ls,"∙","\\bullet",!0),we(Ae,Ue,ls,"‡","\\ddagger"),we(Ae,Ue,ls,"≀","\\wr",!0),we(Ae,Ue,ls,"⨿","\\amalg"),we(Ae,Ue,ls,"&","\\And"),we(Ae,Ue,Ht,"⟵","\\longleftarrow",!0),we(Ae,Ue,Ht,"⇐","\\Leftarrow",!0),we(Ae,Ue,Ht,"⟸","\\Longleftarrow",!0),we(Ae,Ue,Ht,"⟶","\\longrightarrow",!0),we(Ae,Ue,Ht,"⇒","\\Rightarrow",!0),we(Ae,Ue,Ht,"⟹","\\Longrightarrow",!0),we(Ae,Ue,Ht,"↔","\\leftrightarrow",!0),we(Ae,Ue,Ht,"⟷","\\longleftrightarrow",!0),we(Ae,Ue,Ht,"⇔","\\Leftrightarrow",!0),we(Ae,Ue,Ht,"⟺","\\Longleftrightarrow",!0),we(Ae,Ue,Ht,"↦","\\mapsto",!0),we(Ae,Ue,Ht,"⟼","\\longmapsto",!0),we(Ae,Ue,Ht,"↗","\\nearrow",!0),we(Ae,Ue,Ht,"↩","\\hookleftarrow",!0),we(Ae,Ue,Ht,"↪","\\hookrightarrow",!0),we(Ae,Ue,Ht,"↘","\\searrow",!0),we(Ae,Ue,Ht,"↼","\\leftharpoonup",!0),we(Ae,Ue,Ht,"⇀","\\rightharpoonup",!0),we(Ae,Ue,Ht,"↙","\\swarrow",!0),we(Ae,Ue,Ht,"↽","\\leftharpoondown",!0),we(Ae,Ue,Ht,"⇁","\\rightharpoondown",!0),we(Ae,Ue,Ht,"↖","\\nwarrow",!0),we(Ae,Ue,Ht,"⇌","\\rightleftharpoons",!0),we(Ae,$t,Ht,"≮","\\nless",!0),we(Ae,$t,Ht,"","\\@nleqslant"),we(Ae,$t,Ht,"","\\@nleqq"),we(Ae,$t,Ht,"⪇","\\lneq",!0),we(Ae,$t,Ht,"≨","\\lneqq",!0),we(Ae,$t,Ht,"","\\@lvertneqq"),we(Ae,$t,Ht,"⋦","\\lnsim",!0),we(Ae,$t,Ht,"⪉","\\lnapprox",!0),we(Ae,$t,Ht,"⊀","\\nprec",!0),we(Ae,$t,Ht,"⋠","\\npreceq",!0),we(Ae,$t,Ht,"⋨","\\precnsim",!0),we(Ae,$t,Ht,"⪹","\\precnapprox",!0),we(Ae,$t,Ht,"≁","\\nsim",!0),we(Ae,$t,Ht,"","\\@nshortmid"),we(Ae,$t,Ht,"∤","\\nmid",!0),we(Ae,$t,Ht,"⊬","\\nvdash",!0),we(Ae,$t,Ht,"⊭","\\nvDash",!0),we(Ae,$t,Ht,"⋪","\\ntriangleleft"),we(Ae,$t,Ht,"⋬","\\ntrianglelefteq",!0),we(Ae,$t,Ht,"⊊","\\subsetneq",!0),we(Ae,$t,Ht,"","\\@varsubsetneq"),we(Ae,$t,Ht,"⫋","\\subsetneqq",!0),we(Ae,$t,Ht,"","\\@varsubsetneqq"),we(Ae,$t,Ht,"≯","\\ngtr",!0),we(Ae,$t,Ht,"","\\@ngeqslant"),we(Ae,$t,Ht,"","\\@ngeqq"),we(Ae,$t,Ht,"⪈","\\gneq",!0),we(Ae,$t,Ht,"≩","\\gneqq",!0),we(Ae,$t,Ht,"","\\@gvertneqq"),we(Ae,$t,Ht,"⋧","\\gnsim",!0),we(Ae,$t,Ht,"⪊","\\gnapprox",!0),we(Ae,$t,Ht,"⊁","\\nsucc",!0),we(Ae,$t,Ht,"⋡","\\nsucceq",!0),we(Ae,$t,Ht,"⋩","\\succnsim",!0),we(Ae,$t,Ht,"⪺","\\succnapprox",!0),we(Ae,$t,Ht,"≆","\\ncong",!0),we(Ae,$t,Ht,"","\\@nshortparallel"),we(Ae,$t,Ht,"∦","\\nparallel",!0),we(Ae,$t,Ht,"⊯","\\nVDash",!0),we(Ae,$t,Ht,"⋫","\\ntriangleright"),we(Ae,$t,Ht,"⋭","\\ntrianglerighteq",!0),we(Ae,$t,Ht,"","\\@nsupseteqq"),we(Ae,$t,Ht,"⊋","\\supsetneq",!0),we(Ae,$t,Ht,"","\\@varsupsetneq"),we(Ae,$t,Ht,"⫌","\\supsetneqq",!0),we(Ae,$t,Ht,"","\\@varsupsetneqq"),we(Ae,$t,Ht,"⊮","\\nVdash",!0),we(Ae,$t,Ht,"⪵","\\precneqq",!0),we(Ae,$t,Ht,"⪶","\\succneqq",!0),we(Ae,$t,Ht,"","\\@nsubseteqq"),we(Ae,$t,ls,"⊴","\\unlhd"),we(Ae,$t,ls,"⊵","\\unrhd"),we(Ae,$t,Ht,"↚","\\nleftarrow",!0),we(Ae,$t,Ht,"↛","\\nrightarrow",!0),we(Ae,$t,Ht,"⇍","\\nLeftarrow",!0),we(Ae,$t,Ht,"⇏","\\nRightarrow",!0),we(Ae,$t,Ht,"↮","\\nleftrightarrow",!0),we(Ae,$t,Ht,"⇎","\\nLeftrightarrow",!0),we(Ae,$t,Ht,"△","\\vartriangle"),we(Ae,$t,mn,"ℏ","\\hslash"),we(Ae,$t,mn,"▽","\\triangledown"),we(Ae,$t,mn,"◊","\\lozenge"),we(Ae,$t,mn,"Ⓢ","\\circledS"),we(Ae,$t,mn,"®","\\circledR"),we(si,$t,mn,"®","\\circledR"),we(Ae,$t,mn,"∡","\\measuredangle",!0),we(Ae,$t,mn,"∄","\\nexists"),we(Ae,$t,mn,"℧","\\mho"),we(Ae,$t,mn,"Ⅎ","\\Finv",!0),we(Ae,$t,mn,"⅁","\\Game",!0),we(Ae,$t,mn,"‵","\\backprime"),we(Ae,$t,mn,"▲","\\blacktriangle"),we(Ae,$t,mn,"▼","\\blacktriangledown"),we(Ae,$t,mn,"■","\\blacksquare"),we(Ae,$t,mn,"⧫","\\blacklozenge"),we(Ae,$t,mn,"★","\\bigstar"),we(Ae,$t,mn,"∢","\\sphericalangle",!0),we(Ae,$t,mn,"∁","\\complement",!0),we(Ae,$t,mn,"ð","\\eth",!0),we(si,Ue,mn,"ð","ð"),we(Ae,$t,mn,"╱","\\diagup"),we(Ae,$t,mn,"╲","\\diagdown"),we(Ae,$t,mn,"□","\\square"),we(Ae,$t,mn,"□","\\Box"),we(Ae,$t,mn,"◊","\\Diamond"),we(Ae,$t,mn,"¥","\\yen",!0),we(si,$t,mn,"¥","\\yen",!0),we(Ae,$t,mn,"✓","\\checkmark",!0),we(si,$t,mn,"✓","\\checkmark"),we(Ae,$t,mn,"ℶ","\\beth",!0),we(Ae,$t,mn,"ℸ","\\daleth",!0),we(Ae,$t,mn,"ℷ","\\gimel",!0),we(Ae,$t,mn,"ϝ","\\digamma",!0),we(Ae,$t,mn,"ϰ","\\varkappa"),we(Ae,$t,hm,"┌","\\@ulcorner",!0),we(Ae,$t,Dp,"┐","\\@urcorner",!0),we(Ae,$t,hm,"└","\\@llcorner",!0),we(Ae,$t,Dp,"┘","\\@lrcorner",!0),we(Ae,$t,Ht,"≦","\\leqq",!0),we(Ae,$t,Ht,"⩽","\\leqslant",!0),we(Ae,$t,Ht,"⪕","\\eqslantless",!0),we(Ae,$t,Ht,"≲","\\lesssim",!0),we(Ae,$t,Ht,"⪅","\\lessapprox",!0),we(Ae,$t,Ht,"≊","\\approxeq",!0),we(Ae,$t,ls,"⋖","\\lessdot"),we(Ae,$t,Ht,"⋘","\\lll",!0),we(Ae,$t,Ht,"≶","\\lessgtr",!0),we(Ae,$t,Ht,"⋚","\\lesseqgtr",!0),we(Ae,$t,Ht,"⪋","\\lesseqqgtr",!0),we(Ae,$t,Ht,"≑","\\doteqdot"),we(Ae,$t,Ht,"≓","\\risingdotseq",!0),we(Ae,$t,Ht,"≒","\\fallingdotseq",!0),we(Ae,$t,Ht,"∽","\\backsim",!0),we(Ae,$t,Ht,"⋍","\\backsimeq",!0),we(Ae,$t,Ht,"⫅","\\subseteqq",!0),we(Ae,$t,Ht,"⋐","\\Subset",!0),we(Ae,$t,Ht,"⊏","\\sqsubset",!0),we(Ae,$t,Ht,"≼","\\preccurlyeq",!0),we(Ae,$t,Ht,"⋞","\\curlyeqprec",!0),we(Ae,$t,Ht,"≾","\\precsim",!0),we(Ae,$t,Ht,"⪷","\\precapprox",!0),we(Ae,$t,Ht,"⊲","\\vartriangleleft"),we(Ae,$t,Ht,"⊴","\\trianglelefteq"),we(Ae,$t,Ht,"⊨","\\vDash",!0),we(Ae,$t,Ht,"⊪","\\Vvdash",!0),we(Ae,$t,Ht,"⌣","\\smallsmile"),we(Ae,$t,Ht,"⌢","\\smallfrown"),we(Ae,$t,Ht,"≏","\\bumpeq",!0),we(Ae,$t,Ht,"≎","\\Bumpeq",!0),we(Ae,$t,Ht,"≧","\\geqq",!0),we(Ae,$t,Ht,"⩾","\\geqslant",!0),we(Ae,$t,Ht,"⪖","\\eqslantgtr",!0),we(Ae,$t,Ht,"≳","\\gtrsim",!0),we(Ae,$t,Ht,"⪆","\\gtrapprox",!0),we(Ae,$t,ls,"⋗","\\gtrdot"),we(Ae,$t,Ht,"⋙","\\ggg",!0),we(Ae,$t,Ht,"≷","\\gtrless",!0),we(Ae,$t,Ht,"⋛","\\gtreqless",!0),we(Ae,$t,Ht,"⪌","\\gtreqqless",!0),we(Ae,$t,Ht,"≖","\\eqcirc",!0),we(Ae,$t,Ht,"≗","\\circeq",!0),we(Ae,$t,Ht,"≜","\\triangleq",!0),we(Ae,$t,Ht,"∼","\\thicksim"),we(Ae,$t,Ht,"≈","\\thickapprox"),we(Ae,$t,Ht,"⫆","\\supseteqq",!0),we(Ae,$t,Ht,"⋑","\\Supset",!0),we(Ae,$t,Ht,"⊐","\\sqsupset",!0),we(Ae,$t,Ht,"≽","\\succcurlyeq",!0),we(Ae,$t,Ht,"⋟","\\curlyeqsucc",!0),we(Ae,$t,Ht,"≿","\\succsim",!0),we(Ae,$t,Ht,"⪸","\\succapprox",!0),we(Ae,$t,Ht,"⊳","\\vartriangleright"),we(Ae,$t,Ht,"⊵","\\trianglerighteq"),we(Ae,$t,Ht,"⊩","\\Vdash",!0),we(Ae,$t,Ht,"∣","\\shortmid"),we(Ae,$t,Ht,"∥","\\shortparallel"),we(Ae,$t,Ht,"≬","\\between",!0),we(Ae,$t,Ht,"⋔","\\pitchfork",!0),we(Ae,$t,Ht,"∝","\\varpropto"),we(Ae,$t,Ht,"◀","\\blacktriangleleft"),we(Ae,$t,Ht,"∴","\\therefore",!0),we(Ae,$t,Ht,"∍","\\backepsilon"),we(Ae,$t,Ht,"▶","\\blacktriangleright"),we(Ae,$t,Ht,"∵","\\because",!0),we(Ae,$t,Ht,"⋘","\\llless"),we(Ae,$t,Ht,"⋙","\\gggtr"),we(Ae,$t,ls,"⊲","\\lhd"),we(Ae,$t,ls,"⊳","\\rhd"),we(Ae,$t,Ht,"≂","\\eqsim",!0),we(Ae,Ue,Ht,"⋈","\\Join"),we(Ae,$t,Ht,"≑","\\Doteq",!0),we(Ae,$t,ls,"∔","\\dotplus",!0),we(Ae,$t,ls,"∖","\\smallsetminus"),we(Ae,$t,ls,"⋒","\\Cap",!0),we(Ae,$t,ls,"⋓","\\Cup",!0),we(Ae,$t,ls,"⩞","\\doublebarwedge",!0),we(Ae,$t,ls,"⊟","\\boxminus",!0),we(Ae,$t,ls,"⊞","\\boxplus",!0),we(Ae,$t,ls,"⋇","\\divideontimes",!0),we(Ae,$t,ls,"⋉","\\ltimes",!0),we(Ae,$t,ls,"⋊","\\rtimes",!0),we(Ae,$t,ls,"⋋","\\leftthreetimes",!0),we(Ae,$t,ls,"⋌","\\rightthreetimes",!0),we(Ae,$t,ls,"⋏","\\curlywedge",!0),we(Ae,$t,ls,"⋎","\\curlyvee",!0),we(Ae,$t,ls,"⊝","\\circleddash",!0),we(Ae,$t,ls,"⊛","\\circledast",!0),we(Ae,$t,ls,"⋅","\\centerdot"),we(Ae,$t,ls,"⊺","\\intercal",!0),we(Ae,$t,ls,"⋒","\\doublecap"),we(Ae,$t,ls,"⋓","\\doublecup"),we(Ae,$t,ls,"⊠","\\boxtimes",!0),we(Ae,$t,Ht,"⇢","\\dashrightarrow",!0),we(Ae,$t,Ht,"⇠","\\dashleftarrow",!0),we(Ae,$t,Ht,"⇇","\\leftleftarrows",!0),we(Ae,$t,Ht,"⇆","\\leftrightarrows",!0),we(Ae,$t,Ht,"⇚","\\Lleftarrow",!0),we(Ae,$t,Ht,"↞","\\twoheadleftarrow",!0),we(Ae,$t,Ht,"↢","\\leftarrowtail",!0),we(Ae,$t,Ht,"↫","\\looparrowleft",!0),we(Ae,$t,Ht,"⇋","\\leftrightharpoons",!0),we(Ae,$t,Ht,"↶","\\curvearrowleft",!0),we(Ae,$t,Ht,"↺","\\circlearrowleft",!0),we(Ae,$t,Ht,"↰","\\Lsh",!0),we(Ae,$t,Ht,"⇈","\\upuparrows",!0),we(Ae,$t,Ht,"↿","\\upharpoonleft",!0),we(Ae,$t,Ht,"⇃","\\downharpoonleft",!0),we(Ae,Ue,Ht,"⊶","\\origof",!0),we(Ae,Ue,Ht,"⊷","\\imageof",!0),we(Ae,$t,Ht,"⊸","\\multimap",!0),we(Ae,$t,Ht,"↭","\\leftrightsquigarrow",!0),we(Ae,$t,Ht,"⇉","\\rightrightarrows",!0),we(Ae,$t,Ht,"⇄","\\rightleftarrows",!0),we(Ae,$t,Ht,"↠","\\twoheadrightarrow",!0),we(Ae,$t,Ht,"↣","\\rightarrowtail",!0),we(Ae,$t,Ht,"↬","\\looparrowright",!0),we(Ae,$t,Ht,"↷","\\curvearrowright",!0),we(Ae,$t,Ht,"↻","\\circlearrowright",!0),we(Ae,$t,Ht,"↱","\\Rsh",!0),we(Ae,$t,Ht,"⇊","\\downdownarrows",!0),we(Ae,$t,Ht,"↾","\\upharpoonright",!0),we(Ae,$t,Ht,"⇂","\\downharpoonright",!0),we(Ae,$t,Ht,"⇝","\\rightsquigarrow",!0),we(Ae,$t,Ht,"⇝","\\leadsto"),we(Ae,$t,Ht,"⇛","\\Rrightarrow",!0),we(Ae,$t,Ht,"↾","\\restriction"),we(Ae,Ue,mn,"‘","`"),we(Ae,Ue,mn,"$","\\$"),we(si,Ue,mn,"$","\\$"),we(si,Ue,mn,"$","\\textdollar"),we(Ae,Ue,mn,"%","\\%"),we(si,Ue,mn,"%","\\%"),we(Ae,Ue,mn,"_","\\_"),we(si,Ue,mn,"_","\\_"),we(si,Ue,mn,"_","\\textunderscore"),we(Ae,Ue,mn,"∠","\\angle",!0),we(Ae,Ue,mn,"∞","\\infty",!0),we(Ae,Ue,mn,"′","\\prime"),we(Ae,Ue,mn,"△","\\triangle"),we(Ae,Ue,mn,"Γ","\\Gamma",!0),we(Ae,Ue,mn,"Δ","\\Delta",!0),we(Ae,Ue,mn,"Θ","\\Theta",!0),we(Ae,Ue,mn,"Λ","\\Lambda",!0),we(Ae,Ue,mn,"Ξ","\\Xi",!0),we(Ae,Ue,mn,"Π","\\Pi",!0),we(Ae,Ue,mn,"Σ","\\Sigma",!0),we(Ae,Ue,mn,"Υ","\\Upsilon",!0),we(Ae,Ue,mn,"Φ","\\Phi",!0),we(Ae,Ue,mn,"Ψ","\\Psi",!0),we(Ae,Ue,mn,"Ω","\\Omega",!0),we(Ae,Ue,mn,"A","Α"),we(Ae,Ue,mn,"B","Β"),we(Ae,Ue,mn,"E","Ε"),we(Ae,Ue,mn,"Z","Ζ"),we(Ae,Ue,mn,"H","Η"),we(Ae,Ue,mn,"I","Ι"),we(Ae,Ue,mn,"K","Κ"),we(Ae,Ue,mn,"M","Μ"),we(Ae,Ue,mn,"N","Ν"),we(Ae,Ue,mn,"O","Ο"),we(Ae,Ue,mn,"P","Ρ"),we(Ae,Ue,mn,"T","Τ"),we(Ae,Ue,mn,"X","Χ"),we(Ae,Ue,mn,"¬","\\neg",!0),we(Ae,Ue,mn,"¬","\\lnot"),we(Ae,Ue,mn,"⊤","\\top"),we(Ae,Ue,mn,"⊥","\\bot"),we(Ae,Ue,mn,"∅","\\emptyset"),we(Ae,$t,mn,"∅","\\varnothing"),we(Ae,Ue,Ca,"α","\\alpha",!0),we(Ae,Ue,Ca,"β","\\beta",!0),we(Ae,Ue,Ca,"γ","\\gamma",!0),we(Ae,Ue,Ca,"δ","\\delta",!0),we(Ae,Ue,Ca,"ϵ","\\epsilon",!0),we(Ae,Ue,Ca,"ζ","\\zeta",!0),we(Ae,Ue,Ca,"η","\\eta",!0),we(Ae,Ue,Ca,"θ","\\theta",!0),we(Ae,Ue,Ca,"ι","\\iota",!0),we(Ae,Ue,Ca,"κ","\\kappa",!0),we(Ae,Ue,Ca,"λ","\\lambda",!0),we(Ae,Ue,Ca,"μ","\\mu",!0),we(Ae,Ue,Ca,"ν","\\nu",!0),we(Ae,Ue,Ca,"ξ","\\xi",!0),we(Ae,Ue,Ca,"ο","\\omicron",!0),we(Ae,Ue,Ca,"π","\\pi",!0),we(Ae,Ue,Ca,"ρ","\\rho",!0),we(Ae,Ue,Ca,"σ","\\sigma",!0),we(Ae,Ue,Ca,"τ","\\tau",!0),we(Ae,Ue,Ca,"υ","\\upsilon",!0),we(Ae,Ue,Ca,"ϕ","\\phi",!0),we(Ae,Ue,Ca,"χ","\\chi",!0),we(Ae,Ue,Ca,"ψ","\\psi",!0),we(Ae,Ue,Ca,"ω","\\omega",!0),we(Ae,Ue,Ca,"ε","\\varepsilon",!0),we(Ae,Ue,Ca,"ϑ","\\vartheta",!0),we(Ae,Ue,Ca,"ϖ","\\varpi",!0),we(Ae,Ue,Ca,"ϱ","\\varrho",!0),we(Ae,Ue,Ca,"ς","\\varsigma",!0),we(Ae,Ue,Ca,"φ","\\varphi",!0),we(Ae,Ue,ls,"∗","*",!0),we(Ae,Ue,ls,"+","+"),we(Ae,Ue,ls,"−","-",!0),we(Ae,Ue,ls,"⋅","\\cdot",!0),we(Ae,Ue,ls,"∘","\\circ",!0),we(Ae,Ue,ls,"÷","\\div",!0),we(Ae,Ue,ls,"±","\\pm",!0),we(Ae,Ue,ls,"×","\\times",!0),we(Ae,Ue,ls,"∩","\\cap",!0),we(Ae,Ue,ls,"∪","\\cup",!0),we(Ae,Ue,ls,"∖","\\setminus",!0),we(Ae,Ue,ls,"∧","\\land"),we(Ae,Ue,ls,"∨","\\lor"),we(Ae,Ue,ls,"∧","\\wedge",!0),we(Ae,Ue,ls,"∨","\\vee",!0),we(Ae,Ue,mn,"√","\\surd"),we(Ae,Ue,hm,"⟨","\\langle",!0),we(Ae,Ue,hm,"∣","\\lvert"),we(Ae,Ue,hm,"∥","\\lVert"),we(Ae,Ue,Dp,"?","?"),we(Ae,Ue,Dp,"!","!"),we(Ae,Ue,Dp,"⟩","\\rangle",!0),we(Ae,Ue,Dp,"∣","\\rvert"),we(Ae,Ue,Dp,"∥","\\rVert"),we(Ae,Ue,Ht,"=","="),we(Ae,Ue,Ht,":",":"),we(Ae,Ue,Ht,"≈","\\approx",!0),we(Ae,Ue,Ht,"≅","\\cong",!0),we(Ae,Ue,Ht,"≥","\\ge"),we(Ae,Ue,Ht,"≥","\\geq",!0),we(Ae,Ue,Ht,"←","\\gets"),we(Ae,Ue,Ht,">","\\gt",!0),we(Ae,Ue,Ht,"∈","\\in",!0),we(Ae,Ue,Ht,"","\\@not"),we(Ae,Ue,Ht,"⊂","\\subset",!0),we(Ae,Ue,Ht,"⊃","\\supset",!0),we(Ae,Ue,Ht,"⊆","\\subseteq",!0),we(Ae,Ue,Ht,"⊇","\\supseteq",!0),we(Ae,$t,Ht,"⊈","\\nsubseteq",!0),we(Ae,$t,Ht,"⊉","\\nsupseteq",!0),we(Ae,Ue,Ht,"⊨","\\models"),we(Ae,Ue,Ht,"←","\\leftarrow",!0),we(Ae,Ue,Ht,"≤","\\le"),we(Ae,Ue,Ht,"≤","\\leq",!0),we(Ae,Ue,Ht,"<","\\lt",!0),we(Ae,Ue,Ht,"→","\\rightarrow",!0),we(Ae,Ue,Ht,"→","\\to"),we(Ae,$t,Ht,"≱","\\ngeq",!0),we(Ae,$t,Ht,"≰","\\nleq",!0),we(Ae,Ue,I7," ","\\ "),we(Ae,Ue,I7," ","\\space"),we(Ae,Ue,I7," ","\\nobreakspace"),we(si,Ue,I7," ","\\ "),we(si,Ue,I7," "," "),we(si,Ue,I7," ","\\space"),we(si,Ue,I7," ","\\nobreakspace"),we(Ae,Ue,I7,null,"\\nobreak"),we(Ae,Ue,I7,null,"\\allowbreak"),we(Ae,Ue,oQ,",",","),we(Ae,Ue,oQ,";",";"),we(Ae,$t,ls,"⊼","\\barwedge",!0),we(Ae,$t,ls,"⊻","\\veebar",!0),we(Ae,Ue,ls,"⊙","\\odot",!0),we(Ae,Ue,ls,"⊕","\\oplus",!0),we(Ae,Ue,ls,"⊗","\\otimes",!0),we(Ae,Ue,mn,"∂","\\partial",!0),we(Ae,Ue,ls,"⊘","\\oslash",!0),we(Ae,$t,ls,"⊚","\\circledcirc",!0),we(Ae,$t,ls,"⊡","\\boxdot",!0),we(Ae,Ue,ls,"△","\\bigtriangleup"),we(Ae,Ue,ls,"▽","\\bigtriangledown"),we(Ae,Ue,ls,"†","\\dagger"),we(Ae,Ue,ls,"⋄","\\diamond"),we(Ae,Ue,ls,"⋆","\\star"),we(Ae,Ue,ls,"◃","\\triangleleft"),we(Ae,Ue,ls,"▹","\\triangleright"),we(Ae,Ue,hm,"{","\\{"),we(si,Ue,mn,"{","\\{"),we(si,Ue,mn,"{","\\textbraceleft"),we(Ae,Ue,Dp,"}","\\}"),we(si,Ue,mn,"}","\\}"),we(si,Ue,mn,"}","\\textbraceright"),we(Ae,Ue,hm,"{","\\lbrace"),we(Ae,Ue,Dp,"}","\\rbrace"),we(Ae,Ue,hm,"[","\\lbrack",!0),we(si,Ue,mn,"[","\\lbrack",!0),we(Ae,Ue,Dp,"]","\\rbrack",!0),we(si,Ue,mn,"]","\\rbrack",!0),we(Ae,Ue,hm,"(","\\lparen",!0),we(Ae,Ue,Dp,")","\\rparen",!0),we(si,Ue,mn,"<","\\textless",!0),we(si,Ue,mn,">","\\textgreater",!0),we(Ae,Ue,hm,"⌊","\\lfloor",!0),we(Ae,Ue,Dp,"⌋","\\rfloor",!0),we(Ae,Ue,hm,"⌈","\\lceil",!0),we(Ae,Ue,Dp,"⌉","\\rceil",!0),we(Ae,Ue,mn,"\\","\\backslash"),we(Ae,Ue,mn,"∣","|"),we(Ae,Ue,mn,"∣","\\vert"),we(si,Ue,mn,"|","\\textbar",!0),we(Ae,Ue,mn,"∥","\\|"),we(Ae,Ue,mn,"∥","\\Vert"),we(si,Ue,mn,"∥","\\textbardbl"),we(si,Ue,mn,"~","\\textasciitilde"),we(si,Ue,mn,"\\","\\textbackslash"),we(si,Ue,mn,"^","\\textasciicircum"),we(Ae,Ue,Ht,"↑","\\uparrow",!0),we(Ae,Ue,Ht,"⇑","\\Uparrow",!0),we(Ae,Ue,Ht,"↓","\\downarrow",!0),we(Ae,Ue,Ht,"⇓","\\Downarrow",!0),we(Ae,Ue,Ht,"↕","\\updownarrow",!0),we(Ae,Ue,Ht,"⇕","\\Updownarrow",!0),we(Ae,Ue,N0,"∐","\\coprod"),we(Ae,Ue,N0,"⋁","\\bigvee"),we(Ae,Ue,N0,"⋀","\\bigwedge"),we(Ae,Ue,N0,"⨄","\\biguplus"),we(Ae,Ue,N0,"⋂","\\bigcap"),we(Ae,Ue,N0,"⋃","\\bigcup"),we(Ae,Ue,N0,"∫","\\int"),we(Ae,Ue,N0,"∫","\\intop"),we(Ae,Ue,N0,"∬","\\iint"),we(Ae,Ue,N0,"∭","\\iiint"),we(Ae,Ue,N0,"∏","\\prod"),we(Ae,Ue,N0,"∑","\\sum"),we(Ae,Ue,N0,"⨂","\\bigotimes"),we(Ae,Ue,N0,"⨁","\\bigoplus"),we(Ae,Ue,N0,"⨀","\\bigodot"),we(Ae,Ue,N0,"∮","\\oint"),we(Ae,Ue,N0,"∯","\\oiint"),we(Ae,Ue,N0,"∰","\\oiiint"),we(Ae,Ue,N0,"⨆","\\bigsqcup"),we(Ae,Ue,N0,"∫","\\smallint"),we(si,Ue,ND,"…","\\textellipsis"),we(Ae,Ue,ND,"…","\\mathellipsis"),we(si,Ue,ND,"…","\\ldots",!0),we(Ae,Ue,ND,"…","\\ldots",!0),we(Ae,Ue,ND,"⋯","\\@cdots",!0),we(Ae,Ue,ND,"⋱","\\ddots",!0),we(Ae,Ue,mn,"⋮","\\varvdots"),we(Ae,Ue,wh,"ˊ","\\acute"),we(Ae,Ue,wh,"ˋ","\\grave"),we(Ae,Ue,wh,"¨","\\ddot"),we(Ae,Ue,wh,"~","\\tilde"),we(Ae,Ue,wh,"ˉ","\\bar"),we(Ae,Ue,wh,"˘","\\breve"),we(Ae,Ue,wh,"ˇ","\\check"),we(Ae,Ue,wh,"^","\\hat"),we(Ae,Ue,wh,"⃗","\\vec"),we(Ae,Ue,wh,"˙","\\dot"),we(Ae,Ue,wh,"˚","\\mathring"),we(Ae,Ue,Ca,"","\\@imath"),we(Ae,Ue,Ca,"","\\@jmath"),we(Ae,Ue,mn,"ı","ı"),we(Ae,Ue,mn,"ȷ","ȷ"),we(si,Ue,mn,"ı","\\i",!0),we(si,Ue,mn,"ȷ","\\j",!0),we(si,Ue,mn,"ß","\\ss",!0),we(si,Ue,mn,"æ","\\ae",!0),we(si,Ue,mn,"œ","\\oe",!0),we(si,Ue,mn,"ø","\\o",!0),we(si,Ue,mn,"Æ","\\AE",!0),we(si,Ue,mn,"Œ","\\OE",!0),we(si,Ue,mn,"Ø","\\O",!0),we(si,Ue,wh,"ˊ","\\'"),we(si,Ue,wh,"ˋ","\\`"),we(si,Ue,wh,"ˆ","\\^"),we(si,Ue,wh,"˜","\\~"),we(si,Ue,wh,"ˉ","\\="),we(si,Ue,wh,"˘","\\u"),we(si,Ue,wh,"˙","\\."),we(si,Ue,wh,"¸","\\c"),we(si,Ue,wh,"˚","\\r"),we(si,Ue,wh,"ˇ","\\v"),we(si,Ue,wh,"¨",'\\"'),we(si,Ue,wh,"˝","\\H"),we(si,Ue,wh,"◯","\\textcircled");var rze={"--":!0,"---":!0,"``":!0,"''":!0};we(si,Ue,mn,"–","--",!0),we(si,Ue,mn,"–","\\textendash"),we(si,Ue,mn,"—","---",!0),we(si,Ue,mn,"—","\\textemdash"),we(si,Ue,mn,"‘","`",!0),we(si,Ue,mn,"‘","\\textquoteleft"),we(si,Ue,mn,"’","'",!0),we(si,Ue,mn,"’","\\textquoteright"),we(si,Ue,mn,"“","``",!0),we(si,Ue,mn,"“","\\textquotedblleft"),we(si,Ue,mn,"”","''",!0),we(si,Ue,mn,"”","\\textquotedblright"),we(Ae,Ue,mn,"°","\\degree",!0),we(si,Ue,mn,"°","\\degree"),we(si,Ue,mn,"°","\\textdegree",!0),we(Ae,Ue,mn,"£","\\pounds"),we(Ae,Ue,mn,"£","\\mathsterling",!0),we(si,Ue,mn,"£","\\pounds"),we(si,Ue,mn,"£","\\textsterling",!0),we(Ae,$t,mn,"✠","\\maltese"),we(si,$t,mn,"✠","\\maltese");for(var ize='0123456789/@."',rbe=0;rbe0)return F3(v,_,p,u,b.concat(A));if(T){var P,R;if(T==="boldsymbol"){var F=mHt(v,p,u,b,d);P=F.fontName,R=[F.fontClass]}else y?(P=hze[T].fontName,R=[T]):(P=dQ(T,u.fontWeight,u.fontShape),R=[T,u.fontWeight,u.fontShape]);if(fQ(v,P,p).metrics)return F3(v,P,p,u,b.concat(R));if(rze.hasOwnProperty(v)&&P.slice(0,10)==="Typewriter"){for(var j=[],K=0;K{if(T9(i.classes)!==T9(s.classes)||i.skew!==s.skew||i.maxFontSize!==s.maxFontSize)return!1;if(i.classes.length===1){var u=i.classes[0];if(u==="mbin"||u==="mord")return!1}for(var d in i.style)if(i.style.hasOwnProperty(d)&&i.style[d]!==s.style[d])return!1;for(var p in s.style)if(s.style.hasOwnProperty(p)&&i.style[p]!==s.style[p])return!1;return!0},yHt=i=>{for(var s=0;su&&(u=b.height),b.depth>d&&(d=b.depth),b.maxFontSize>p&&(p=b.maxFontSize)}s.height=u,s.depth=d,s.maxFontSize=p},R2=function(s,u,d,p){var v=new cR(s,u,d,p);return cbe(v),v},uze=(i,s,u,d)=>new cR(i,s,u,d),xHt=function(s,u,d){var p=R2([s],[],u);return p.height=Math.max(d||u.fontMetrics().defaultRuleThickness,u.minRuleThickness),p.style.borderBottomWidth=Ri(p.height),p.maxFontSize=1,p},kHt=function(s,u,d,p){var v=new tbe(s,u,d,p);return cbe(v),v},lze=function(s){var u=new oR(s);return cbe(u),u},EHt=function(s,u){return s instanceof oR?R2([],[s],u):s},THt=function(s){if(s.positionType==="individualShift"){for(var u=s.children,d=[u[0]],p=-u[0].shift-u[0].elem.depth,v=p,b=1;b{var u=R2(["mspace"],[],s),d=Uh(i,s);return u.style.marginRight=Ri(d),u},dQ=function(s,u,d){var p="";switch(s){case"amsrm":p="AMS";break;case"textrm":p="Main";break;case"textsf":p="SansSerif";break;case"texttt":p="Typewriter";break;default:p=s}var v;return u==="textbf"&&d==="textit"?v="BoldItalic":u==="textbf"?v="Bold":u==="textit"?v="Italic":v="Regular",p+"-"+v},hze={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},fze={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},_Ht=function(s,u){var[d,p,v]=fze[s],b=new C9(d),y=new D7([b],{width:Ri(p),height:Ri(v),style:"width:"+Ri(p),viewBox:"0 0 "+1e3*p+" "+1e3*v,preserveAspectRatio:"xMinYMin"}),T=uze(["overlay"],[y],u);return T.height=v,T.style.height=Ri(v),T.style.width=Ri(p),T},zn={fontMap:hze,makeSymbol:F3,mathsym:bHt,makeSpan:R2,makeSvgSpan:uze,makeLineSpan:xHt,makeAnchor:kHt,makeFragment:lze,wrapFragment:EHt,makeVList:CHt,makeOrd:vHt,makeGlue:SHt,staticSvg:_Ht,svgData:fze,tryCombineChars:yHt},Gh={number:3,unit:"mu"},$C={number:4,unit:"mu"},O7={number:5,unit:"mu"},AHt={mord:{mop:Gh,mbin:$C,mrel:O7,minner:Gh},mop:{mord:Gh,mop:Gh,mrel:O7,minner:Gh},mbin:{mord:$C,mop:$C,mopen:$C,minner:$C},mrel:{mord:O7,mop:O7,mopen:O7,minner:O7},mopen:{},mclose:{mop:Gh,mbin:$C,mrel:O7,minner:Gh},mpunct:{mord:Gh,mop:Gh,mrel:O7,mopen:Gh,mclose:Gh,mpunct:Gh,minner:Gh},minner:{mord:Gh,mop:Gh,mbin:$C,mrel:O7,mopen:Gh,mpunct:Gh,minner:Gh}},LHt={mord:{mop:Gh},mop:{mord:Gh,mop:Gh},mbin:{},mrel:{},mopen:{},mclose:{mop:Gh},mpunct:{},minner:{mop:Gh}},dze={},gQ={},pQ={};function Ji(i){for(var{type:s,names:u,props:d,handler:p,htmlBuilder:v,mathmlBuilder:b}=i,y={type:s,numArgs:d.numArgs,argTypes:d.argTypes,allowedInArgument:!!d.allowedInArgument,allowedInText:!!d.allowedInText,allowedInMath:d.allowedInMath===void 0?!0:d.allowedInMath,numOptionalArgs:d.numOptionalArgs||0,infix:!!d.infix,primitive:!!d.primitive,handler:p},T=0;T{var ee=K.classes[0],ie=j.classes[0];ee==="mbin"&&Ya.contains(DHt,ie)?K.classes[0]="mord":ie==="mbin"&&Ya.contains(MHt,ee)&&(j.classes[0]="mord")},{node:P},R,F),gze(v,(j,K)=>{var ee=ube(K),ie=ube(j),oe=ee&&ie?j.hasClass("mtight")?LHt[ee][ie]:AHt[ee][ie]:null;if(oe)return zn.makeGlue(oe,_)},{node:P},R,F),v},gze=function i(s,u,d,p,v){p&&s.push(p);for(var b=0;bR=>{s.splice(P+1,0,R),b++})(b)}p&&s.pop()},pze=function(s){return s instanceof oR||s instanceof tbe||s instanceof cR&&s.hasClass("enclosing")?s:null},NHt=function i(s,u){var d=pze(s);if(d){var p=d.children;if(p.length){if(u==="right")return i(p[p.length-1],"right");if(u==="left")return i(p[0],"left")}}return s},ube=function(s,u){return s?(u&&(s=NHt(s,u)),OHt[s.classes[0]]||null):null},uR=function(s,u){var d=["nulldelimiter"].concat(s.baseSizingClasses());return N7(u.concat(d))},uu=function(s,u,d){if(!s)return N7();if(gQ[s.type]){var p=gQ[s.type](s,u);if(d&&u.size!==d.size){p=N7(u.sizingClasses(d),[p],u);var v=u.sizeMultiplier/d.sizeMultiplier;p.height*=v,p.depth*=v}return p}else throw new Ci("Got group of unknown type: '"+s.type+"'")};function mQ(i,s){var u=N7(["base"],i,s),d=N7(["strut"]);return d.style.height=Ri(u.height+u.depth),u.depth&&(d.style.verticalAlign=Ri(-u.depth)),u.children.unshift(d),u}function lbe(i,s){var u=null;i.length===1&&i[0].type==="tag"&&(u=i[0].tag,i=i[0].body);var d=d1(i,s,"root"),p;d.length===2&&d[1].hasClass("tag")&&(p=d.pop());for(var v=[],b=[],y=0;y0&&(v.push(mQ(b,s)),b=[]),v.push(d[y]));b.length>0&&v.push(mQ(b,s));var _;u?(_=mQ(d1(u,s,!0)),_.classes=["tag"],v.push(_)):p&&v.push(p);var A=N7(["katex-html"],v);if(A.setAttribute("aria-hidden","true"),_){var P=_.children[0];P.style.height=Ri(A.height+A.depth),A.depth&&(P.style.verticalAlign=Ri(-A.depth))}return A}function bze(i){return new oR(i)}class Fv{constructor(s,u,d){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=s,this.attributes={},this.children=u||[],this.classes=d||[]}setAttribute(s,u){this.attributes[s]=u}getAttribute(s){return this.attributes[s]}toNode(){var s=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var u in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,u)&&s.setAttribute(u,this.attributes[u]);this.classes.length>0&&(s.className=T9(this.classes));for(var d=0;d0&&(s+=' class ="'+Ya.escape(T9(this.classes))+'"'),s+=">";for(var d=0;d",s}toText(){return this.children.map(s=>s.toText()).join("")}}class lR{constructor(s){this.text=void 0,this.text=s}toNode(){return document.createTextNode(this.text)}toMarkup(){return Ya.escape(this.toText())}toText(){return this.text}}class PHt{constructor(s){this.width=void 0,this.character=void 0,this.width=s,s>=.05555&&s<=.05556?this.character=" ":s>=.1666&&s<=.1667?this.character=" ":s>=.2222&&s<=.2223?this.character=" ":s>=.2777&&s<=.2778?this.character="  ":s>=-.05556&&s<=-.05555?this.character=" ⁣":s>=-.1667&&s<=-.1666?this.character=" ⁣":s>=-.2223&&s<=-.2222?this.character=" ⁣":s>=-.2778&&s<=-.2777?this.character=" ⁣":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var s=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return s.setAttribute("width",Ri(this.width)),s}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}}var vi={MathNode:Fv,TextNode:lR,SpaceNode:PHt,newDocumentFragment:bze},Rv=function(s,u,d){return Ul[u][s]&&Ul[u][s].replace&&s.charCodeAt(0)!==55349&&!(rze.hasOwnProperty(s)&&d&&(d.fontFamily&&d.fontFamily.slice(4,6)==="tt"||d.font&&d.font.slice(4,6)==="tt"))&&(s=Ul[u][s].replace),new vi.TextNode(s)},hbe=function(s){return s.length===1?s[0]:new vi.MathNode("mrow",s)},fbe=function(s,u){if(u.fontFamily==="texttt")return"monospace";if(u.fontFamily==="textsf")return u.fontShape==="textit"&&u.fontWeight==="textbf"?"sans-serif-bold-italic":u.fontShape==="textit"?"sans-serif-italic":u.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(u.fontShape==="textit"&&u.fontWeight==="textbf")return"bold-italic";if(u.fontShape==="textit")return"italic";if(u.fontWeight==="textbf")return"bold";var d=u.font;if(!d||d==="mathnormal")return null;var p=s.mode;if(d==="mathit")return"italic";if(d==="boldsymbol")return s.type==="textord"?"bold":"bold-italic";if(d==="mathbf")return"bold";if(d==="mathbb")return"double-struck";if(d==="mathfrak")return"fraktur";if(d==="mathscr"||d==="mathcal")return"script";if(d==="mathsf")return"sans-serif";if(d==="mathtt")return"monospace";var v=s.text;if(Ya.contains(["\\imath","\\jmath"],v))return null;Ul[p][v]&&Ul[p][v].replace&&(v=Ul[p][v].replace);var b=zn.fontMap[d].fontName;return J2e(v,b,p)?zn.fontMap[d].variant:null},j2=function(s,u,d){if(s.length===1){var p=Ll(s[0],u);return d&&p instanceof Fv&&p.type==="mo"&&(p.setAttribute("lspace","0em"),p.setAttribute("rspace","0em")),[p]}for(var v=[],b,y=0;y0&&(P.text=P.text.slice(0,1)+"̸"+P.text.slice(1),v.pop())}}}v.push(T),b=T}return v},_9=function(s,u,d){return hbe(j2(s,u,d))},Ll=function(s,u){if(!s)return new vi.MathNode("mrow");if(pQ[s.type]){var d=pQ[s.type](s,u);return d}else throw new Ci("Got group of unknown type: '"+s.type+"'")};function mze(i,s,u,d,p){var v=j2(i,u),b;v.length===1&&v[0]instanceof Fv&&Ya.contains(["mrow","mtable"],v[0].type)?b=v[0]:b=new vi.MathNode("mrow",v);var y=new vi.MathNode("annotation",[new vi.TextNode(s)]);y.setAttribute("encoding","application/x-tex");var T=new vi.MathNode("semantics",[b,y]),_=new vi.MathNode("math",[T]);_.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),d&&_.setAttribute("display","block");var A=p?"katex":"katex-mathml";return zn.makeSpan([A],[_])}var vze=function(s){return new M7({style:s.displayMode?Ta.DISPLAY:Ta.TEXT,maxSize:s.maxSize,minRuleThickness:s.minRuleThickness})},wze=function(s,u){if(u.displayMode){var d=["katex-display"];u.leqno&&d.push("leqno"),u.fleqn&&d.push("fleqn"),s=zn.makeSpan(d,[s])}return s},BHt=function(s,u,d){var p=vze(d),v;if(d.output==="mathml")return mze(s,u,p,d.displayMode,!0);if(d.output==="html"){var b=lbe(s,p);v=zn.makeSpan(["katex"],[b])}else{var y=mze(s,u,p,d.displayMode,!1),T=lbe(s,p);v=zn.makeSpan(["katex"],[y,T])}return wze(v,d)},FHt=function(s,u,d){var p=vze(d),v=lbe(s,p),b=zn.makeSpan(["katex"],[v]);return wze(b,d)},RHt={widehat:"^",widecheck:"ˇ",widetilde:"~",utilde:"~",overleftarrow:"←",underleftarrow:"←",xleftarrow:"←",overrightarrow:"→",underrightarrow:"→",xrightarrow:"→",underbrace:"⏟",overbrace:"⏞",overgroup:"⏠",undergroup:"⏡",overleftrightarrow:"↔",underleftrightarrow:"↔",xleftrightarrow:"↔",Overrightarrow:"⇒",xRightarrow:"⇒",overleftharpoon:"↼",xleftharpoonup:"↼",overrightharpoon:"⇀",xrightharpoonup:"⇀",xLeftarrow:"⇐",xLeftrightarrow:"⇔",xhookleftarrow:"↩",xhookrightarrow:"↪",xmapsto:"↦",xrightharpoondown:"⇁",xleftharpoondown:"↽",xrightleftharpoons:"⇌",xleftrightharpoons:"⇋",xtwoheadleftarrow:"↞",xtwoheadrightarrow:"↠",xlongequal:"=",xtofrom:"⇄",xrightleftarrows:"⇄",xrightequilibrium:"⇌",xleftequilibrium:"⇋","\\cdrightarrow":"→","\\cdleftarrow":"←","\\cdlongequal":"="},jHt=function(s){var u=new vi.MathNode("mo",[new vi.TextNode(RHt[s.replace(/^\\/,"")])]);return u.setAttribute("stretchy","true"),u},$Ht={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},zHt=function(s){return s.type==="ordgroup"?s.body.length:1},qHt=function(s,u){function d(){var y=4e5,T=s.label.slice(1);if(Ya.contains(["widehat","widecheck","widetilde","utilde"],T)){var _=s,A=zHt(_.base),P,R,F;if(A>5)T==="widehat"||T==="widecheck"?(P=420,y=2364,F=.42,R=T+"4"):(P=312,y=2340,F=.34,R="tilde4");else{var j=[1,1,2,2,3,3][A];T==="widehat"||T==="widecheck"?(y=[0,1062,2364,2364,2364][j],P=[0,239,300,360,420][j],F=[0,.24,.3,.3,.36,.42][j],R=T+j):(y=[0,600,1033,2339,2340][j],P=[0,260,286,306,312][j],F=[0,.26,.286,.3,.306,.34][j],R="tilde"+j)}var K=new C9(R),ee=new D7([K],{width:"100%",height:Ri(F),viewBox:"0 0 "+y+" "+P,preserveAspectRatio:"none"});return{span:zn.makeSvgSpan([],[ee],u),minWidth:0,height:F}}else{var ie=[],oe=$Ht[T],[pe,be,ae]=oe,ne=ae/1e3,se=pe.length,de,X;if(se===1){var ge=oe[3];de=["hide-tail"],X=[ge]}else if(se===2)de=["halfarrow-left","halfarrow-right"],X=["xMinYMin","xMaxYMin"];else if(se===3)de=["brace-left","brace-center","brace-right"],X=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support + `+se+" children.");for(var W=0;W0&&(p.style.minWidth=Ri(v)),p},HHt=function(s,u,d,p,v){var b,y=s.height+s.depth+d+p;if(/fbox|color|angl/.test(u)){if(b=zn.makeSpan(["stretchy",u],[],v),u==="fbox"){var T=v.color&&v.getColor();T&&(b.style.borderColor=T)}}else{var _=[];/^[bx]cancel$/.test(u)&&_.push(new nbe({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(u)&&_.push(new nbe({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var A=new D7(_,{width:"100%",height:Ri(y)});b=zn.makeSvgSpan([],[A],v)}return b.height=y,b.style.height=Ri(y),b},P7={encloseSpan:HHt,mathMLnode:jHt,svgSpan:qHt};function Yo(i,s){if(!i||i.type!==s)throw new Error("Expected node of type "+s+", but got "+(i?"node of type "+i.type:String(i)));return i}function dbe(i){var s=vQ(i);if(!s)throw new Error("Expected node of symbol group type, but got "+(i?"node of type "+i.type:String(i)));return s}function vQ(i){return i&&(i.type==="atom"||gHt.hasOwnProperty(i.type))?i:null}var gbe=(i,s)=>{var u,d,p;i&&i.type==="supsub"?(d=Yo(i.base,"accent"),u=d.base,i.base=u,p=fHt(uu(i,s)),i.base=d):(d=Yo(i,"accent"),u=d.base);var v=uu(u,s.havingCrampedStyle()),b=d.isShifty&&Ya.isCharacterBox(u),y=0;if(b){var T=Ya.getBaseElem(u),_=uu(T,s.havingCrampedStyle());y=nze(_).skew}var A=d.label==="\\c",P=A?v.height+v.depth:Math.min(v.height,s.fontMetrics().xHeight),R;if(d.isStretchy)R=P7.svgSpan(d,s),R=zn.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:v},{type:"elem",elem:R,wrapperClasses:["svg-align"],wrapperStyle:y>0?{width:"calc(100% - "+Ri(2*y)+")",marginLeft:Ri(2*y)}:void 0}]},s);else{var F,j;d.label==="\\vec"?(F=zn.staticSvg("vec",s),j=zn.svgData.vec[1]):(F=zn.makeOrd({mode:d.mode,text:d.label},s,"textord"),F=nze(F),F.italic=0,j=F.width,A&&(P+=F.depth)),R=zn.makeSpan(["accent-body"],[F]);var K=d.label==="\\textcircled";K&&(R.classes.push("accent-full"),P=v.height);var ee=y;K||(ee-=j/2),R.style.left=Ri(ee),d.label==="\\textcircled"&&(R.style.top=".2em"),R=zn.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:v},{type:"kern",size:-P},{type:"elem",elem:R}]},s)}var ie=zn.makeSpan(["mord","accent"],[R],s);return p?(p.children[0]=ie,p.height=Math.max(ie.height,p.height),p.classes[0]="mord",p):ie},yze=(i,s)=>{var u=i.isStretchy?P7.mathMLnode(i.label):new vi.MathNode("mo",[Rv(i.label,i.mode)]),d=new vi.MathNode("mover",[Ll(i.base,s),u]);return d.setAttribute("accent","true"),d},VHt=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(i=>"\\"+i).join("|"));Ji({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:(i,s)=>{var u=bQ(s[0]),d=!VHt.test(i.funcName),p=!d||i.funcName==="\\widehat"||i.funcName==="\\widetilde"||i.funcName==="\\widecheck";return{type:"accent",mode:i.parser.mode,label:i.funcName,isStretchy:d,isShifty:p,base:u}},htmlBuilder:gbe,mathmlBuilder:yze}),Ji({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:(i,s)=>{var u=s[0],d=i.parser.mode;return d==="math"&&(i.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+i.funcName+" works only in text mode"),d="text"),{type:"accent",mode:d,label:i.funcName,isStretchy:!1,isShifty:!0,base:u}},htmlBuilder:gbe,mathmlBuilder:yze}),Ji({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:(i,s)=>{var{parser:u,funcName:d}=i,p=s[0];return{type:"accentUnder",mode:u.mode,label:d,base:p}},htmlBuilder:(i,s)=>{var u=uu(i.base,s),d=P7.svgSpan(i,s),p=i.label==="\\utilde"?.12:0,v=zn.makeVList({positionType:"top",positionData:u.height,children:[{type:"elem",elem:d,wrapperClasses:["svg-align"]},{type:"kern",size:p},{type:"elem",elem:u}]},s);return zn.makeSpan(["mord","accentunder"],[v],s)},mathmlBuilder:(i,s)=>{var u=P7.mathMLnode(i.label),d=new vi.MathNode("munder",[Ll(i.base,s),u]);return d.setAttribute("accentunder","true"),d}});var wQ=i=>{var s=new vi.MathNode("mpadded",i?[i]:[]);return s.setAttribute("width","+0.6em"),s.setAttribute("lspace","0.3em"),s};Ji({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(i,s,u){var{parser:d,funcName:p}=i;return{type:"xArrow",mode:d.mode,label:p,body:s[0],below:u[0]}},htmlBuilder(i,s){var u=s.style,d=s.havingStyle(u.sup()),p=zn.wrapFragment(uu(i.body,d,s),s),v=i.label.slice(0,2)==="\\x"?"x":"cd";p.classes.push(v+"-arrow-pad");var b;i.below&&(d=s.havingStyle(u.sub()),b=zn.wrapFragment(uu(i.below,d,s),s),b.classes.push(v+"-arrow-pad"));var y=P7.svgSpan(i,s),T=-s.fontMetrics().axisHeight+.5*y.height,_=-s.fontMetrics().axisHeight-.5*y.height-.111;(p.depth>.25||i.label==="\\xleftequilibrium")&&(_-=p.depth);var A;if(b){var P=-s.fontMetrics().axisHeight+b.height+.5*y.height+.111;A=zn.makeVList({positionType:"individualShift",children:[{type:"elem",elem:p,shift:_},{type:"elem",elem:y,shift:T},{type:"elem",elem:b,shift:P}]},s)}else A=zn.makeVList({positionType:"individualShift",children:[{type:"elem",elem:p,shift:_},{type:"elem",elem:y,shift:T}]},s);return A.children[0].children[0].children[1].classes.push("svg-align"),zn.makeSpan(["mrel","x-arrow"],[A],s)},mathmlBuilder(i,s){var u=P7.mathMLnode(i.label);u.setAttribute("minsize",i.label.charAt(0)==="x"?"1.75em":"3.0em");var d;if(i.body){var p=wQ(Ll(i.body,s));if(i.below){var v=wQ(Ll(i.below,s));d=new vi.MathNode("munderover",[u,v,p])}else d=new vi.MathNode("mover",[u,p])}else if(i.below){var b=wQ(Ll(i.below,s));d=new vi.MathNode("munder",[u,b])}else d=wQ(),d=new vi.MathNode("mover",[u,d]);return d}});var UHt=zn.makeSpan;function xze(i,s){var u=d1(i.body,s,!0);return UHt([i.mclass],u,s)}function kze(i,s){var u,d=j2(i.body,s);return i.mclass==="minner"?u=new vi.MathNode("mpadded",d):i.mclass==="mord"?i.isCharacterBox?(u=d[0],u.type="mi"):u=new vi.MathNode("mi",d):(i.isCharacterBox?(u=d[0],u.type="mo"):u=new vi.MathNode("mo",d),i.mclass==="mbin"?(u.attributes.lspace="0.22em",u.attributes.rspace="0.22em"):i.mclass==="mpunct"?(u.attributes.lspace="0em",u.attributes.rspace="0.17em"):i.mclass==="mopen"||i.mclass==="mclose"?(u.attributes.lspace="0em",u.attributes.rspace="0em"):i.mclass==="minner"&&(u.attributes.lspace="0.0556em",u.attributes.width="+0.1111em")),u}Ji({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(i,s){var{parser:u,funcName:d}=i,p=s[0];return{type:"mclass",mode:u.mode,mclass:"m"+d.slice(5),body:Xf(p),isCharacterBox:Ya.isCharacterBox(p)}},htmlBuilder:xze,mathmlBuilder:kze});var yQ=i=>{var s=i.type==="ordgroup"&&i.body.length?i.body[0]:i;return s.type==="atom"&&(s.family==="bin"||s.family==="rel")?"m"+s.family:"mord"};Ji({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(i,s){var{parser:u}=i;return{type:"mclass",mode:u.mode,mclass:yQ(s[0]),body:Xf(s[1]),isCharacterBox:Ya.isCharacterBox(s[1])}}}),Ji({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(i,s){var{parser:u,funcName:d}=i,p=s[1],v=s[0],b;d!=="\\stackrel"?b=yQ(p):b="mrel";var y={type:"op",mode:p.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:d!=="\\stackrel",body:Xf(p)},T={type:"supsub",mode:v.mode,base:y,sup:d==="\\underset"?null:v,sub:d==="\\underset"?v:null};return{type:"mclass",mode:u.mode,mclass:b,body:[T],isCharacterBox:Ya.isCharacterBox(T)}},htmlBuilder:xze,mathmlBuilder:kze}),Ji({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(i,s){var{parser:u}=i;return{type:"pmb",mode:u.mode,mclass:yQ(s[0]),body:Xf(s[0])}},htmlBuilder(i,s){var u=d1(i.body,s,!0),d=zn.makeSpan([i.mclass],u,s);return d.style.textShadow="0.02em 0.01em 0.04px",d},mathmlBuilder(i,s){var u=j2(i.body,s),d=new vi.MathNode("mstyle",u);return d.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),d}});var GHt={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},Eze=()=>({type:"styling",body:[],mode:"math",style:"display"}),Tze=i=>i.type==="textord"&&i.text==="@",KHt=(i,s)=>(i.type==="mathord"||i.type==="atom")&&i.text===s;function WHt(i,s,u){var d=GHt[i];switch(d){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return u.callFunction(d,[s[0]],[s[1]]);case"\\uparrow":case"\\downarrow":{var p=u.callFunction("\\\\cdleft",[s[0]],[]),v={type:"atom",text:d,mode:"math",family:"rel"},b=u.callFunction("\\Big",[v],[]),y=u.callFunction("\\\\cdright",[s[1]],[]),T={type:"ordgroup",mode:"math",body:[p,b,y]};return u.callFunction("\\\\cdparent",[T],[])}case"\\\\cdlongequal":return u.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var _={type:"textord",text:"\\Vert",mode:"math"};return u.callFunction("\\Big",[_],[])}default:return{type:"textord",text:" ",mode:"math"}}}function YHt(i){var s=[];for(i.gullet.beginGroup(),i.gullet.macros.set("\\cr","\\\\\\relax"),i.gullet.beginGroup();;){s.push(i.parseExpression(!1,"\\\\")),i.gullet.endGroup(),i.gullet.beginGroup();var u=i.fetch().text;if(u==="&"||u==="\\\\")i.consume();else if(u==="\\end"){s[s.length-1].length===0&&s.pop();break}else throw new Ci("Expected \\\\ or \\cr or \\end",i.nextToken)}for(var d=[],p=[d],v=0;v-1))if("<>AV".indexOf(_)>-1)for(var P=0;P<2;P++){for(var R=!0,F=T+1;FAV=|." after @',b[T]);var j=WHt(_,A,i),K={type:"styling",body:[j],mode:"math",style:"display"};d.push(K),y=Eze()}v%2===0?d.push(y):d.shift(),d=[],p.push(d)}i.gullet.endGroup(),i.gullet.endGroup();var ee=new Array(p[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:p,arraystretch:1,addJot:!0,rowGaps:[null],cols:ee,colSeparationType:"CD",hLinesBeforeRow:new Array(p.length+1).fill([])}}Ji({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(i,s){var{parser:u,funcName:d}=i;return{type:"cdlabel",mode:u.mode,side:d.slice(4),label:s[0]}},htmlBuilder(i,s){var u=s.havingStyle(s.style.sup()),d=zn.wrapFragment(uu(i.label,u,s),s);return d.classes.push("cd-label-"+i.side),d.style.bottom=Ri(.8-d.depth),d.height=0,d.depth=0,d},mathmlBuilder(i,s){var u=new vi.MathNode("mrow",[Ll(i.label,s)]);return u=new vi.MathNode("mpadded",[u]),u.setAttribute("width","0"),i.side==="left"&&u.setAttribute("lspace","-1width"),u.setAttribute("voffset","0.7em"),u=new vi.MathNode("mstyle",[u]),u.setAttribute("displaystyle","false"),u.setAttribute("scriptlevel","1"),u}}),Ji({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(i,s){var{parser:u}=i;return{type:"cdlabelparent",mode:u.mode,fragment:s[0]}},htmlBuilder(i,s){var u=zn.wrapFragment(uu(i.fragment,s),s);return u.classes.push("cd-vert-arrow"),u},mathmlBuilder(i,s){return new vi.MathNode("mrow",[Ll(i.fragment,s)])}}),Ji({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(i,s){for(var{parser:u}=i,d=Yo(s[0],"ordgroup"),p=d.body,v="",b=0;b=1114111)throw new Ci("\\@char with invalid code point "+v);return T<=65535?_=String.fromCharCode(T):(T-=65536,_=String.fromCharCode((T>>10)+55296,(T&1023)+56320)),{type:"textord",mode:u.mode,text:_}}});var Cze=(i,s)=>{var u=d1(i.body,s.withColor(i.color),!1);return zn.makeFragment(u)},Sze=(i,s)=>{var u=j2(i.body,s.withColor(i.color)),d=new vi.MathNode("mstyle",u);return d.setAttribute("mathcolor",i.color),d};Ji({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(i,s){var{parser:u}=i,d=Yo(s[0],"color-token").color,p=s[1];return{type:"color",mode:u.mode,color:d,body:Xf(p)}},htmlBuilder:Cze,mathmlBuilder:Sze}),Ji({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(i,s){var{parser:u,breakOnTokenText:d}=i,p=Yo(s[0],"color-token").color;u.gullet.macros.set("\\current@color",p);var v=u.parseExpression(!0,d);return{type:"color",mode:u.mode,color:p,body:v}},htmlBuilder:Cze,mathmlBuilder:Sze}),Ji({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(i,s,u){var{parser:d}=i,p=d.gullet.future().text==="["?d.parseSizeGroup(!0):null,v=!d.settings.displayMode||!d.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:d.mode,newLine:v,size:p&&Yo(p,"size").value}},htmlBuilder(i,s){var u=zn.makeSpan(["mspace"],[],s);return i.newLine&&(u.classes.push("newline"),i.size&&(u.style.marginTop=Ri(Uh(i.size,s)))),u},mathmlBuilder(i,s){var u=new vi.MathNode("mspace");return i.newLine&&(u.setAttribute("linebreak","newline"),i.size&&u.setAttribute("height",Ri(Uh(i.size,s)))),u}});var pbe={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},_ze=i=>{var s=i.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(s))throw new Ci("Expected a control sequence",i);return s},XHt=i=>{var s=i.gullet.popToken();return s.text==="="&&(s=i.gullet.popToken(),s.text===" "&&(s=i.gullet.popToken())),s},Aze=(i,s,u,d)=>{var p=i.gullet.macros.get(u.text);p==null&&(u.noexpand=!0,p={tokens:[u],numArgs:0,unexpandable:!i.gullet.isExpandable(u.text)}),i.gullet.macros.set(s,p,d)};Ji({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(i){var{parser:s,funcName:u}=i;s.consumeSpaces();var d=s.fetch();if(pbe[d.text])return(u==="\\global"||u==="\\\\globallong")&&(d.text=pbe[d.text]),Yo(s.parseFunction(),"internal");throw new Ci("Invalid token after macro prefix",d)}}),Ji({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(i){var{parser:s,funcName:u}=i,d=s.gullet.popToken(),p=d.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(p))throw new Ci("Expected a control sequence",d);for(var v=0,b,y=[[]];s.gullet.future().text!=="{";)if(d=s.gullet.popToken(),d.text==="#"){if(s.gullet.future().text==="{"){b=s.gullet.future(),y[v].push("{");break}if(d=s.gullet.popToken(),!/^[1-9]$/.test(d.text))throw new Ci('Invalid argument number "'+d.text+'"');if(parseInt(d.text)!==v+1)throw new Ci('Argument number "'+d.text+'" out of order');v++,y.push([])}else{if(d.text==="EOF")throw new Ci("Expected a macro definition");y[v].push(d.text)}var{tokens:T}=s.gullet.consumeArg();return b&&T.unshift(b),(u==="\\edef"||u==="\\xdef")&&(T=s.gullet.expandTokens(T),T.reverse()),s.gullet.macros.set(p,{tokens:T,numArgs:v,delimiters:y},u===pbe[u]),{type:"internal",mode:s.mode}}}),Ji({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(i){var{parser:s,funcName:u}=i,d=_ze(s.gullet.popToken());s.gullet.consumeSpaces();var p=XHt(s);return Aze(s,d,p,u==="\\\\globallet"),{type:"internal",mode:s.mode}}}),Ji({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(i){var{parser:s,funcName:u}=i,d=_ze(s.gullet.popToken()),p=s.gullet.popToken(),v=s.gullet.popToken();return Aze(s,d,v,u==="\\\\globalfuture"),s.gullet.pushToken(v),s.gullet.pushToken(p),{type:"internal",mode:s.mode}}});var hR=function(s,u,d){var p=Ul.math[s]&&Ul.math[s].replace,v=J2e(p||s,u,d);if(!v)throw new Error("Unsupported symbol "+s+" and font size "+u+".");return v},bbe=function(s,u,d,p){var v=d.havingBaseStyle(u),b=zn.makeSpan(p.concat(v.sizingClasses(d)),[s],d),y=v.sizeMultiplier/d.sizeMultiplier;return b.height*=y,b.depth*=y,b.maxFontSize=v.sizeMultiplier,b},Lze=function(s,u,d){var p=u.havingBaseStyle(d),v=(1-u.sizeMultiplier/p.sizeMultiplier)*u.fontMetrics().axisHeight;s.classes.push("delimcenter"),s.style.top=Ri(v),s.height-=v,s.depth+=v},QHt=function(s,u,d,p,v,b){var y=zn.makeSymbol(s,"Main-Regular",v,p),T=bbe(y,u,p,b);return d&&Lze(T,p,u),T},JHt=function(s,u,d,p){return zn.makeSymbol(s,"Size"+u+"-Regular",d,p)},Mze=function(s,u,d,p,v,b){var y=JHt(s,u,v,p),T=bbe(zn.makeSpan(["delimsizing","size"+u],[y],p),Ta.TEXT,p,b);return d&&Lze(T,p,Ta.TEXT),T},mbe=function(s,u,d){var p;u==="Size1-Regular"?p="delim-size1":p="delim-size4";var v=zn.makeSpan(["delimsizinginner",p],[zn.makeSpan([],[zn.makeSymbol(s,u,d)])]);return{type:"elem",elem:v}},vbe=function(s,u,d){var p=K4["Size4-Regular"][s.charCodeAt(0)]?K4["Size4-Regular"][s.charCodeAt(0)][4]:K4["Size1-Regular"][s.charCodeAt(0)][4],v=new C9("inner",iHt(s,Math.round(1e3*u))),b=new D7([v],{width:Ri(p),height:Ri(u),style:"width:"+Ri(p),viewBox:"0 0 "+1e3*p+" "+Math.round(1e3*u),preserveAspectRatio:"xMinYMin"}),y=zn.makeSvgSpan([],[b],d);return y.height=u,y.style.height=Ri(u),y.style.width=Ri(p),{type:"elem",elem:y}},wbe=.008,xQ={type:"kern",size:-1*wbe},ZHt=["|","\\lvert","\\rvert","\\vert"],eVt=["\\|","\\lVert","\\rVert","\\Vert"],Dze=function(s,u,d,p,v,b){var y,T,_,A,P="",R=0;y=_=A=s,T=null;var F="Size1-Regular";s==="\\uparrow"?_=A="⏐":s==="\\Uparrow"?_=A="‖":s==="\\downarrow"?y=_="⏐":s==="\\Downarrow"?y=_="‖":s==="\\updownarrow"?(y="\\uparrow",_="⏐",A="\\downarrow"):s==="\\Updownarrow"?(y="\\Uparrow",_="‖",A="\\Downarrow"):Ya.contains(ZHt,s)?(_="∣",P="vert",R=333):Ya.contains(eVt,s)?(_="∥",P="doublevert",R=556):s==="["||s==="\\lbrack"?(y="⎡",_="⎢",A="⎣",F="Size4-Regular",P="lbrack",R=667):s==="]"||s==="\\rbrack"?(y="⎤",_="⎥",A="⎦",F="Size4-Regular",P="rbrack",R=667):s==="\\lfloor"||s==="⌊"?(_=y="⎢",A="⎣",F="Size4-Regular",P="lfloor",R=667):s==="\\lceil"||s==="⌈"?(y="⎡",_=A="⎢",F="Size4-Regular",P="lceil",R=667):s==="\\rfloor"||s==="⌋"?(_=y="⎥",A="⎦",F="Size4-Regular",P="rfloor",R=667):s==="\\rceil"||s==="⌉"?(y="⎤",_=A="⎥",F="Size4-Regular",P="rceil",R=667):s==="("||s==="\\lparen"?(y="⎛",_="⎜",A="⎝",F="Size4-Regular",P="lparen",R=875):s===")"||s==="\\rparen"?(y="⎞",_="⎟",A="⎠",F="Size4-Regular",P="rparen",R=875):s==="\\{"||s==="\\lbrace"?(y="⎧",T="⎨",A="⎩",_="⎪",F="Size4-Regular"):s==="\\}"||s==="\\rbrace"?(y="⎫",T="⎬",A="⎭",_="⎪",F="Size4-Regular"):s==="\\lgroup"||s==="⟮"?(y="⎧",A="⎩",_="⎪",F="Size4-Regular"):s==="\\rgroup"||s==="⟯"?(y="⎫",A="⎭",_="⎪",F="Size4-Regular"):s==="\\lmoustache"||s==="⎰"?(y="⎧",A="⎭",_="⎪",F="Size4-Regular"):(s==="\\rmoustache"||s==="⎱")&&(y="⎫",A="⎩",_="⎪",F="Size4-Regular");var j=hR(y,F,v),K=j.height+j.depth,ee=hR(_,F,v),ie=ee.height+ee.depth,oe=hR(A,F,v),pe=oe.height+oe.depth,be=0,ae=1;if(T!==null){var ne=hR(T,F,v);be=ne.height+ne.depth,ae=2}var se=K+pe+be,de=Math.max(0,Math.ceil((u-se)/(ae*ie))),X=se+de*ae*ie,ge=p.fontMetrics().axisHeight;d&&(ge*=p.sizeMultiplier);var W=X/2-ge,xe=[];if(P.length>0){var U=X-K-pe,Fe=Math.round(X*1e3),Pe=sHt(P,Math.round(U*1e3)),je=new C9(P,Pe),Ie=(R/1e3).toFixed(3)+"em",Se=(Fe/1e3).toFixed(3)+"em",Ce=new D7([je],{width:Ie,height:Se,viewBox:"0 0 "+R+" "+Fe}),ke=zn.makeSvgSpan([],[Ce],p);ke.height=Fe/1e3,ke.style.width=Ie,ke.style.height=Se,xe.push({type:"elem",elem:ke})}else{if(xe.push(mbe(A,F,v)),xe.push(xQ),T===null){var Ke=X-K-pe+2*wbe;xe.push(vbe(_,Ke,p))}else{var Ft=(X-K-pe-be)/2+2*wbe;xe.push(vbe(_,Ft,p)),xe.push(xQ),xe.push(mbe(T,F,v)),xe.push(xQ),xe.push(vbe(_,Ft,p))}xe.push(xQ),xe.push(mbe(y,F,v))}var Ne=p.havingBaseStyle(Ta.TEXT),gn=zn.makeVList({positionType:"bottom",positionData:W,children:xe},Ne);return bbe(zn.makeSpan(["delimsizing","mult"],[gn],Ne),Ta.TEXT,p,b)},ybe=80,xbe=.08,kbe=function(s,u,d,p,v){var b=rHt(s,p,d),y=new C9(s,b),T=new D7([y],{width:"400em",height:Ri(u),viewBox:"0 0 400000 "+d,preserveAspectRatio:"xMinYMin slice"});return zn.makeSvgSpan(["hide-tail"],[T],v)},tVt=function(s,u){var d=u.havingBaseSizing(),p=Pze("\\surd",s*d.sizeMultiplier,Nze,d),v=d.sizeMultiplier,b=Math.max(0,u.minRuleThickness-u.fontMetrics().sqrtRuleThickness),y,T=0,_=0,A=0,P;return p.type==="small"?(A=1e3+1e3*b+ybe,s<1?v=1:s<1.4&&(v=.7),T=(1+b+xbe)/v,_=(1+b)/v,y=kbe("sqrtMain",T,A,b,u),y.style.minWidth="0.853em",P=.833/v):p.type==="large"?(A=(1e3+ybe)*fR[p.size],_=(fR[p.size]+b)/v,T=(fR[p.size]+b+xbe)/v,y=kbe("sqrtSize"+p.size,T,A,b,u),y.style.minWidth="1.02em",P=1/v):(T=s+b+xbe,_=s+b,A=Math.floor(1e3*s+b)+ybe,y=kbe("sqrtTall",T,A,b,u),y.style.minWidth="0.742em",P=1.056),y.height=_,y.style.height=Ri(T),{span:y,advanceWidth:P,ruleWidth:(u.fontMetrics().sqrtRuleThickness+b)*v}},Ize=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","\\surd"],nVt=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱"],Oze=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],fR=[0,1.2,1.8,2.4,3],rVt=function(s,u,d,p,v){if(s==="<"||s==="\\lt"||s==="⟨"?s="\\langle":(s===">"||s==="\\gt"||s==="⟩")&&(s="\\rangle"),Ya.contains(Ize,s)||Ya.contains(Oze,s))return Mze(s,u,!1,d,p,v);if(Ya.contains(nVt,s))return Dze(s,fR[u],!1,d,p,v);throw new Ci("Illegal delimiter: '"+s+"'")},iVt=[{type:"small",style:Ta.SCRIPTSCRIPT},{type:"small",style:Ta.SCRIPT},{type:"small",style:Ta.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],sVt=[{type:"small",style:Ta.SCRIPTSCRIPT},{type:"small",style:Ta.SCRIPT},{type:"small",style:Ta.TEXT},{type:"stack"}],Nze=[{type:"small",style:Ta.SCRIPTSCRIPT},{type:"small",style:Ta.SCRIPT},{type:"small",style:Ta.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],aVt=function(s){if(s.type==="small")return"Main-Regular";if(s.type==="large")return"Size"+s.size+"-Regular";if(s.type==="stack")return"Size4-Regular";throw new Error("Add support for delim type '"+s.type+"' here.")},Pze=function(s,u,d,p){for(var v=Math.min(2,3-p.style.size),b=v;bu)return d[b]}return d[d.length-1]},Bze=function(s,u,d,p,v,b){s==="<"||s==="\\lt"||s==="⟨"?s="\\langle":(s===">"||s==="\\gt"||s==="⟩")&&(s="\\rangle");var y;Ya.contains(Oze,s)?y=iVt:Ya.contains(Ize,s)?y=Nze:y=sVt;var T=Pze(s,u,y,p);return T.type==="small"?QHt(s,T.style,d,p,v,b):T.type==="large"?Mze(s,T.size,d,p,v,b):Dze(s,u,d,p,v,b)},oVt=function(s,u,d,p,v,b){var y=p.fontMetrics().axisHeight*p.sizeMultiplier,T=901,_=5/p.fontMetrics().ptPerEm,A=Math.max(u-y,d+y),P=Math.max(A/500*T,2*A-_);return Bze(s,P,!0,p,v,b)},B7={sqrtImage:tVt,sizedDelim:rVt,sizeToMaxHeight:fR,customSizedDelim:Bze,leftRightDelim:oVt},Fze={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},cVt=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","<",">","\\langle","⟨","\\rangle","⟩","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function kQ(i,s){var u=vQ(i);if(u&&Ya.contains(cVt,u.text))return u;throw u?new Ci("Invalid delimiter '"+u.text+"' after '"+s.funcName+"'",i):new Ci("Invalid delimiter type '"+i.type+"'",i)}Ji({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:(i,s)=>{var u=kQ(s[0],i);return{type:"delimsizing",mode:i.parser.mode,size:Fze[i.funcName].size,mclass:Fze[i.funcName].mclass,delim:u.text}},htmlBuilder:(i,s)=>i.delim==="."?zn.makeSpan([i.mclass]):B7.sizedDelim(i.delim,i.size,s,i.mode,[i.mclass]),mathmlBuilder:i=>{var s=[];i.delim!=="."&&s.push(Rv(i.delim,i.mode));var u=new vi.MathNode("mo",s);i.mclass==="mopen"||i.mclass==="mclose"?u.setAttribute("fence","true"):u.setAttribute("fence","false"),u.setAttribute("stretchy","true");var d=Ri(B7.sizeToMaxHeight[i.size]);return u.setAttribute("minsize",d),u.setAttribute("maxsize",d),u}});function Rze(i){if(!i.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}Ji({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:(i,s)=>{var u=i.parser.gullet.macros.get("\\current@color");if(u&&typeof u!="string")throw new Ci("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:i.parser.mode,delim:kQ(s[0],i).text,color:u}}}),Ji({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:(i,s)=>{var u=kQ(s[0],i),d=i.parser;++d.leftrightDepth;var p=d.parseExpression(!1);--d.leftrightDepth,d.expect("\\right",!1);var v=Yo(d.parseFunction(),"leftright-right");return{type:"leftright",mode:d.mode,body:p,left:u.text,right:v.delim,rightColor:v.color}},htmlBuilder:(i,s)=>{Rze(i);for(var u=d1(i.body,s,!0,["mopen","mclose"]),d=0,p=0,v=!1,b=0;b{Rze(i);var u=j2(i.body,s);if(i.left!=="."){var d=new vi.MathNode("mo",[Rv(i.left,i.mode)]);d.setAttribute("fence","true"),u.unshift(d)}if(i.right!=="."){var p=new vi.MathNode("mo",[Rv(i.right,i.mode)]);p.setAttribute("fence","true"),i.rightColor&&p.setAttribute("mathcolor",i.rightColor),u.push(p)}return hbe(u)}}),Ji({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:(i,s)=>{var u=kQ(s[0],i);if(!i.parser.leftrightDepth)throw new Ci("\\middle without preceding \\left",u);return{type:"middle",mode:i.parser.mode,delim:u.text}},htmlBuilder:(i,s)=>{var u;if(i.delim===".")u=uR(s,[]);else{u=B7.sizedDelim(i.delim,1,s,i.mode,[]);var d={delim:i.delim,options:s};u.isMiddle=d}return u},mathmlBuilder:(i,s)=>{var u=i.delim==="\\vert"||i.delim==="|"?Rv("|","text"):Rv(i.delim,i.mode),d=new vi.MathNode("mo",[u]);return d.setAttribute("fence","true"),d.setAttribute("lspace","0.05em"),d.setAttribute("rspace","0.05em"),d}});var Ebe=(i,s)=>{var u=zn.wrapFragment(uu(i.body,s),s),d=i.label.slice(1),p=s.sizeMultiplier,v,b=0,y=Ya.isCharacterBox(i.body);if(d==="sout")v=zn.makeSpan(["stretchy","sout"]),v.height=s.fontMetrics().defaultRuleThickness/p,b=-.5*s.fontMetrics().xHeight;else if(d==="phase"){var T=Uh({number:.6,unit:"pt"},s),_=Uh({number:.35,unit:"ex"},s),A=s.havingBaseSizing();p=p/A.sizeMultiplier;var P=u.height+u.depth+T+_;u.style.paddingLeft=Ri(P/2+T);var R=Math.floor(1e3*P*p),F=tHt(R),j=new D7([new C9("phase",F)],{width:"400em",height:Ri(R/1e3),viewBox:"0 0 400000 "+R,preserveAspectRatio:"xMinYMin slice"});v=zn.makeSvgSpan(["hide-tail"],[j],s),v.style.height=Ri(P),b=u.depth+T+_}else{/cancel/.test(d)?y||u.classes.push("cancel-pad"):d==="angl"?u.classes.push("anglpad"):u.classes.push("boxpad");var K=0,ee=0,ie=0;/box/.test(d)?(ie=Math.max(s.fontMetrics().fboxrule,s.minRuleThickness),K=s.fontMetrics().fboxsep+(d==="colorbox"?0:ie),ee=K):d==="angl"?(ie=Math.max(s.fontMetrics().defaultRuleThickness,s.minRuleThickness),K=4*ie,ee=Math.max(0,.25-u.depth)):(K=y?.2:0,ee=K),v=P7.encloseSpan(u,d,K,ee,s),/fbox|boxed|fcolorbox/.test(d)?(v.style.borderStyle="solid",v.style.borderWidth=Ri(ie)):d==="angl"&&ie!==.049&&(v.style.borderTopWidth=Ri(ie),v.style.borderRightWidth=Ri(ie)),b=u.depth+ee,i.backgroundColor&&(v.style.backgroundColor=i.backgroundColor,i.borderColor&&(v.style.borderColor=i.borderColor))}var oe;if(i.backgroundColor)oe=zn.makeVList({positionType:"individualShift",children:[{type:"elem",elem:v,shift:b},{type:"elem",elem:u,shift:0}]},s);else{var pe=/cancel|phase/.test(d)?["svg-align"]:[];oe=zn.makeVList({positionType:"individualShift",children:[{type:"elem",elem:u,shift:0},{type:"elem",elem:v,shift:b,wrapperClasses:pe}]},s)}return/cancel/.test(d)&&(oe.height=u.height,oe.depth=u.depth),/cancel/.test(d)&&!y?zn.makeSpan(["mord","cancel-lap"],[oe],s):zn.makeSpan(["mord"],[oe],s)},Tbe=(i,s)=>{var u=0,d=new vi.MathNode(i.label.indexOf("colorbox")>-1?"mpadded":"menclose",[Ll(i.body,s)]);switch(i.label){case"\\cancel":d.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":d.setAttribute("notation","downdiagonalstrike");break;case"\\phase":d.setAttribute("notation","phasorangle");break;case"\\sout":d.setAttribute("notation","horizontalstrike");break;case"\\fbox":d.setAttribute("notation","box");break;case"\\angl":d.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(u=s.fontMetrics().fboxsep*s.fontMetrics().ptPerEm,d.setAttribute("width","+"+2*u+"pt"),d.setAttribute("height","+"+2*u+"pt"),d.setAttribute("lspace",u+"pt"),d.setAttribute("voffset",u+"pt"),i.label==="\\fcolorbox"){var p=Math.max(s.fontMetrics().fboxrule,s.minRuleThickness);d.setAttribute("style","border: "+p+"em solid "+String(i.borderColor))}break;case"\\xcancel":d.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return i.backgroundColor&&d.setAttribute("mathbackground",i.backgroundColor),d};Ji({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(i,s,u){var{parser:d,funcName:p}=i,v=Yo(s[0],"color-token").color,b=s[1];return{type:"enclose",mode:d.mode,label:p,backgroundColor:v,body:b}},htmlBuilder:Ebe,mathmlBuilder:Tbe}),Ji({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(i,s,u){var{parser:d,funcName:p}=i,v=Yo(s[0],"color-token").color,b=Yo(s[1],"color-token").color,y=s[2];return{type:"enclose",mode:d.mode,label:p,backgroundColor:b,borderColor:v,body:y}},htmlBuilder:Ebe,mathmlBuilder:Tbe}),Ji({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(i,s){var{parser:u}=i;return{type:"enclose",mode:u.mode,label:"\\fbox",body:s[0]}}}),Ji({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(i,s){var{parser:u,funcName:d}=i,p=s[0];return{type:"enclose",mode:u.mode,label:d,body:p}},htmlBuilder:Ebe,mathmlBuilder:Tbe}),Ji({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(i,s){var{parser:u}=i;return{type:"enclose",mode:u.mode,label:"\\angl",body:s[0]}}});var jze={};function W4(i){for(var{type:s,names:u,props:d,handler:p,htmlBuilder:v,mathmlBuilder:b}=i,y={type:s,numArgs:d.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:p},T=0;T{var s=i.parser.settings;if(!s.displayMode)throw new Ci("{"+i.envName+"} can be used only in display mode.")};function Cbe(i){if(i.indexOf("ed")===-1)return i.indexOf("*")===-1}function A9(i,s,u){var{hskipBeforeAndAfter:d,addJot:p,cols:v,arraystretch:b,colSeparationType:y,autoTag:T,singleRow:_,emptySingleRow:A,maxNumCols:P,leqno:R}=s;if(i.gullet.beginGroup(),_||i.gullet.macros.set("\\cr","\\\\\\relax"),!b){var F=i.gullet.expandMacroAsText("\\arraystretch");if(F==null)b=1;else if(b=parseFloat(F),!b||b<0)throw new Ci("Invalid \\arraystretch: "+F)}i.gullet.beginGroup();var j=[],K=[j],ee=[],ie=[],oe=T!=null?[]:void 0;function pe(){T&&i.gullet.macros.set("\\@eqnsw","1",!0)}function be(){oe&&(i.gullet.macros.get("\\df@tag")?(oe.push(i.subparse([new U4("\\df@tag")])),i.gullet.macros.set("\\df@tag",void 0,!0)):oe.push(!!T&&i.gullet.macros.get("\\@eqnsw")==="1"))}for(pe(),ie.push(zze(i));;){var ae=i.parseExpression(!1,_?"\\end":"\\\\");i.gullet.endGroup(),i.gullet.beginGroup(),ae={type:"ordgroup",mode:i.mode,body:ae},u&&(ae={type:"styling",mode:i.mode,style:u,body:[ae]}),j.push(ae);var ne=i.fetch().text;if(ne==="&"){if(P&&j.length===P){if(_||y)throw new Ci("Too many tab characters: &",i.nextToken);i.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}i.consume()}else if(ne==="\\end"){be(),j.length===1&&ae.type==="styling"&&ae.body[0].body.length===0&&(K.length>1||!A)&&K.pop(),ie.length0&&(pe+=.25),_.push({pos:pe,isDashed:ji[xi]})}for(be(b[0]),d=0;d0&&(W+=oe,seji))for(d=0;d=y)){var Gt=void 0;(p>0||s.hskipBeforeAndAfter)&&(Gt=Ya.deflt(Ft.pregap,R),Gt!==0&&(Pe=zn.makeSpan(["arraycolsep"],[]),Pe.style.width=Ri(Gt),Fe.push(Pe)));var ln=[];for(d=0;d0){for(var Dt=zn.makeLineSpan("hline",u,A),kt=zn.makeLineSpan("hdashline",u,A),On=[{type:"elem",elem:T,shift:0}];_.length>0;){var ht=_.pop(),zr=ht.pos-xe;ht.isDashed?On.push({type:"elem",elem:kt,shift:zr}):On.push({type:"elem",elem:Dt,shift:zr})}T=zn.makeVList({positionType:"individualShift",children:On},u)}if(Ie.length===0)return zn.makeSpan(["mord"],[T],u);var yt=zn.makeVList({positionType:"individualShift",children:Ie},u);return yt=zn.makeSpan(["tag"],[yt],u),zn.makeFragment([T,yt])},uVt={c:"center ",l:"left ",r:"right "},X4=function(s,u){for(var d=[],p=new vi.MathNode("mtd",[],["mtr-glue"]),v=new vi.MathNode("mtd",[],["mml-eqn-num"]),b=0;b0){var j=s.cols,K="",ee=!1,ie=0,oe=j.length;j[0].type==="separator"&&(R+="top ",ie=1),j[j.length-1].type==="separator"&&(R+="bottom ",oe-=1);for(var pe=ie;pe0?"left ":"",R+=de[de.length-1].length>0?"right ":"";for(var X=1;X-1?"alignat":"align",v=s.envName==="split",b=A9(s.parser,{cols:d,addJot:!0,autoTag:v?void 0:Cbe(s.envName),emptySingleRow:!0,colSeparationType:p,maxNumCols:v?2:void 0,leqno:s.parser.settings.leqno},"display"),y,T=0,_={type:"ordgroup",mode:s.mode,body:[]};if(u[0]&&u[0].type==="ordgroup"){for(var A="",P=0;P0&&F&&(ee=1),d[j]={type:"align",align:K,pregap:ee,postgap:0}}return b.colSeparationType=F?"align":"alignat",b};W4({type:"array",names:["array","darray"],props:{numArgs:1},handler(i,s){var u=vQ(s[0]),d=u?[s[0]]:Yo(s[0],"ordgroup").body,p=d.map(function(b){var y=dbe(b),T=y.text;if("lcr".indexOf(T)!==-1)return{type:"align",align:T};if(T==="|")return{type:"separator",separator:"|"};if(T===":")return{type:"separator",separator:":"};throw new Ci("Unknown column alignment: "+T,b)}),v={cols:p,hskipBeforeAndAfter:!0,maxNumCols:p.length};return A9(i.parser,v,Sbe(i.envName))},htmlBuilder:Y4,mathmlBuilder:X4}),W4({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(i){var s={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[i.envName.replace("*","")],u="c",d={hskipBeforeAndAfter:!1,cols:[{type:"align",align:u}]};if(i.envName.charAt(i.envName.length-1)==="*"){var p=i.parser;if(p.consumeSpaces(),p.fetch().text==="["){if(p.consume(),p.consumeSpaces(),u=p.fetch().text,"lcr".indexOf(u)===-1)throw new Ci("Expected l or c or r",p.nextToken);p.consume(),p.consumeSpaces(),p.expect("]"),p.consume(),d.cols=[{type:"align",align:u}]}}var v=A9(i.parser,d,Sbe(i.envName)),b=Math.max(0,...v.body.map(y=>y.length));return v.cols=new Array(b).fill({type:"align",align:u}),s?{type:"leftright",mode:i.mode,body:[v],left:s[0],right:s[1],rightColor:void 0}:v},htmlBuilder:Y4,mathmlBuilder:X4}),W4({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(i){var s={arraystretch:.5},u=A9(i.parser,s,"script");return u.colSeparationType="small",u},htmlBuilder:Y4,mathmlBuilder:X4}),W4({type:"array",names:["subarray"],props:{numArgs:1},handler(i,s){var u=vQ(s[0]),d=u?[s[0]]:Yo(s[0],"ordgroup").body,p=d.map(function(b){var y=dbe(b),T=y.text;if("lc".indexOf(T)!==-1)return{type:"align",align:T};throw new Ci("Unknown column alignment: "+T,b)});if(p.length>1)throw new Ci("{subarray} can contain only one column");var v={cols:p,hskipBeforeAndAfter:!1,arraystretch:.5};if(v=A9(i.parser,v,"script"),v.body.length>0&&v.body[0].length>1)throw new Ci("{subarray} can contain only one column");return v},htmlBuilder:Y4,mathmlBuilder:X4}),W4({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(i){var s={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},u=A9(i.parser,s,Sbe(i.envName));return{type:"leftright",mode:i.mode,body:[u],left:i.envName.indexOf("r")>-1?".":"\\{",right:i.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:Y4,mathmlBuilder:X4}),W4({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:qze,htmlBuilder:Y4,mathmlBuilder:X4}),W4({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(i){Ya.contains(["gather","gather*"],i.envName)&&EQ(i);var s={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Cbe(i.envName),emptySingleRow:!0,leqno:i.parser.settings.leqno};return A9(i.parser,s,"display")},htmlBuilder:Y4,mathmlBuilder:X4}),W4({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:qze,htmlBuilder:Y4,mathmlBuilder:X4}),W4({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(i){EQ(i);var s={autoTag:Cbe(i.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:i.parser.settings.leqno};return A9(i.parser,s,"display")},htmlBuilder:Y4,mathmlBuilder:X4}),W4({type:"array",names:["CD"],props:{numArgs:0},handler(i){return EQ(i),YHt(i.parser)},htmlBuilder:Y4,mathmlBuilder:X4}),et("\\nonumber","\\gdef\\@eqnsw{0}"),et("\\notag","\\nonumber"),Ji({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(i,s){throw new Ci(i.funcName+" valid only within array environment")}});var Hze=jze;Ji({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(i,s){var{parser:u,funcName:d}=i,p=s[0];if(p.type!=="ordgroup")throw new Ci("Invalid environment name",p);for(var v="",b=0;b{var u=i.font,d=s.withFont(u);return uu(i.body,d)},Uze=(i,s)=>{var u=i.font,d=s.withFont(u);return Ll(i.body,d)},Gze={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};Ji({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:(i,s)=>{var{parser:u,funcName:d}=i,p=bQ(s[0]),v=d;return v in Gze&&(v=Gze[v]),{type:"font",mode:u.mode,font:v.slice(1),body:p}},htmlBuilder:Vze,mathmlBuilder:Uze}),Ji({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:(i,s)=>{var{parser:u}=i,d=s[0],p=Ya.isCharacterBox(d);return{type:"mclass",mode:u.mode,mclass:yQ(d),body:[{type:"font",mode:u.mode,font:"boldsymbol",body:d}],isCharacterBox:p}}}),Ji({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:(i,s)=>{var{parser:u,funcName:d,breakOnTokenText:p}=i,{mode:v}=u,b=u.parseExpression(!0,p),y="math"+d.slice(1);return{type:"font",mode:v,font:y,body:{type:"ordgroup",mode:u.mode,body:b}}},htmlBuilder:Vze,mathmlBuilder:Uze});var Kze=(i,s)=>{var u=s;return i==="display"?u=u.id>=Ta.SCRIPT.id?u.text():Ta.DISPLAY:i==="text"&&u.size===Ta.DISPLAY.size?u=Ta.TEXT:i==="script"?u=Ta.SCRIPT:i==="scriptscript"&&(u=Ta.SCRIPTSCRIPT),u},_be=(i,s)=>{var u=Kze(i.size,s.style),d=u.fracNum(),p=u.fracDen(),v;v=s.havingStyle(d);var b=uu(i.numer,v,s);if(i.continued){var y=8.5/s.fontMetrics().ptPerEm,T=3.5/s.fontMetrics().ptPerEm;b.height=b.height0?j=3*R:j=7*R,K=s.fontMetrics().denom1):(P>0?(F=s.fontMetrics().num2,j=R):(F=s.fontMetrics().num3,j=3*R),K=s.fontMetrics().denom2);var ee;if(A){var oe=s.fontMetrics().axisHeight;F-b.depth-(oe+.5*P){var u=new vi.MathNode("mfrac",[Ll(i.numer,s),Ll(i.denom,s)]);if(!i.hasBarLine)u.setAttribute("linethickness","0px");else if(i.barSize){var d=Uh(i.barSize,s);u.setAttribute("linethickness",Ri(d))}var p=Kze(i.size,s.style);if(p.size!==s.style.size){u=new vi.MathNode("mstyle",[u]);var v=p.size===Ta.DISPLAY.size?"true":"false";u.setAttribute("displaystyle",v),u.setAttribute("scriptlevel","0")}if(i.leftDelim!=null||i.rightDelim!=null){var b=[];if(i.leftDelim!=null){var y=new vi.MathNode("mo",[new vi.TextNode(i.leftDelim.replace("\\",""))]);y.setAttribute("fence","true"),b.push(y)}if(b.push(u),i.rightDelim!=null){var T=new vi.MathNode("mo",[new vi.TextNode(i.rightDelim.replace("\\",""))]);T.setAttribute("fence","true"),b.push(T)}return hbe(b)}return u};Ji({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:(i,s)=>{var{parser:u,funcName:d}=i,p=s[0],v=s[1],b,y=null,T=null,_="auto";switch(d){case"\\dfrac":case"\\frac":case"\\tfrac":b=!0;break;case"\\\\atopfrac":b=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":b=!1,y="(",T=")";break;case"\\\\bracefrac":b=!1,y="\\{",T="\\}";break;case"\\\\brackfrac":b=!1,y="[",T="]";break;default:throw new Error("Unrecognized genfrac command")}switch(d){case"\\dfrac":case"\\dbinom":_="display";break;case"\\tfrac":case"\\tbinom":_="text";break}return{type:"genfrac",mode:u.mode,continued:!1,numer:p,denom:v,hasBarLine:b,leftDelim:y,rightDelim:T,size:_,barSize:null}},htmlBuilder:_be,mathmlBuilder:Abe}),Ji({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:(i,s)=>{var{parser:u,funcName:d}=i,p=s[0],v=s[1];return{type:"genfrac",mode:u.mode,continued:!0,numer:p,denom:v,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}}}),Ji({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(i){var{parser:s,funcName:u,token:d}=i,p;switch(u){case"\\over":p="\\frac";break;case"\\choose":p="\\binom";break;case"\\atop":p="\\\\atopfrac";break;case"\\brace":p="\\\\bracefrac";break;case"\\brack":p="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:s.mode,replaceWith:p,token:d}}});var Wze=["display","text","script","scriptscript"],Yze=function(s){var u=null;return s.length>0&&(u=s,u=u==="."?null:u),u};Ji({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(i,s){var{parser:u}=i,d=s[4],p=s[5],v=bQ(s[0]),b=v.type==="atom"&&v.family==="open"?Yze(v.text):null,y=bQ(s[1]),T=y.type==="atom"&&y.family==="close"?Yze(y.text):null,_=Yo(s[2],"size"),A,P=null;_.isBlank?A=!0:(P=_.value,A=P.number>0);var R="auto",F=s[3];if(F.type==="ordgroup"){if(F.body.length>0){var j=Yo(F.body[0],"textord");R=Wze[Number(j.text)]}}else F=Yo(F,"textord"),R=Wze[Number(F.text)];return{type:"genfrac",mode:u.mode,numer:d,denom:p,continued:!1,hasBarLine:A,barSize:P,leftDelim:b,rightDelim:T,size:R}},htmlBuilder:_be,mathmlBuilder:Abe}),Ji({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(i,s){var{parser:u,funcName:d,token:p}=i;return{type:"infix",mode:u.mode,replaceWith:"\\\\abovefrac",size:Yo(s[0],"size").value,token:p}}}),Ji({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:(i,s)=>{var{parser:u,funcName:d}=i,p=s[0],v=$qt(Yo(s[1],"infix").size),b=s[2],y=v.number>0;return{type:"genfrac",mode:u.mode,numer:p,denom:b,continued:!1,hasBarLine:y,barSize:v,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:_be,mathmlBuilder:Abe});var Xze=(i,s)=>{var u=s.style,d,p;i.type==="supsub"?(d=i.sup?uu(i.sup,s.havingStyle(u.sup()),s):uu(i.sub,s.havingStyle(u.sub()),s),p=Yo(i.base,"horizBrace")):p=Yo(i,"horizBrace");var v=uu(p.base,s.havingBaseStyle(Ta.DISPLAY)),b=P7.svgSpan(p,s),y;if(p.isOver?(y=zn.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:v},{type:"kern",size:.1},{type:"elem",elem:b}]},s),y.children[0].children[0].children[1].classes.push("svg-align")):(y=zn.makeVList({positionType:"bottom",positionData:v.depth+.1+b.height,children:[{type:"elem",elem:b},{type:"kern",size:.1},{type:"elem",elem:v}]},s),y.children[0].children[0].children[0].classes.push("svg-align")),d){var T=zn.makeSpan(["mord",p.isOver?"mover":"munder"],[y],s);p.isOver?y=zn.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:T},{type:"kern",size:.2},{type:"elem",elem:d}]},s):y=zn.makeVList({positionType:"bottom",positionData:T.depth+.2+d.height+d.depth,children:[{type:"elem",elem:d},{type:"kern",size:.2},{type:"elem",elem:T}]},s)}return zn.makeSpan(["mord",p.isOver?"mover":"munder"],[y],s)},lVt=(i,s)=>{var u=P7.mathMLnode(i.label);return new vi.MathNode(i.isOver?"mover":"munder",[Ll(i.base,s),u])};Ji({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(i,s){var{parser:u,funcName:d}=i;return{type:"horizBrace",mode:u.mode,label:d,isOver:/^\\over/.test(d),base:s[0]}},htmlBuilder:Xze,mathmlBuilder:lVt}),Ji({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:(i,s)=>{var{parser:u}=i,d=s[1],p=Yo(s[0],"url").url;return u.settings.isTrusted({command:"\\href",url:p})?{type:"href",mode:u.mode,href:p,body:Xf(d)}:u.formatUnsupportedCmd("\\href")},htmlBuilder:(i,s)=>{var u=d1(i.body,s,!1);return zn.makeAnchor(i.href,[],u,s)},mathmlBuilder:(i,s)=>{var u=_9(i.body,s);return u instanceof Fv||(u=new Fv("mrow",[u])),u.setAttribute("href",i.href),u}}),Ji({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:(i,s)=>{var{parser:u}=i,d=Yo(s[0],"url").url;if(!u.settings.isTrusted({command:"\\url",url:d}))return u.formatUnsupportedCmd("\\url");for(var p=[],v=0;v{var{parser:u,funcName:d,token:p}=i,v=Yo(s[0],"raw").string,b=s[1];u.settings.strict&&u.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var y,T={};switch(d){case"\\htmlClass":T.class=v,y={command:"\\htmlClass",class:v};break;case"\\htmlId":T.id=v,y={command:"\\htmlId",id:v};break;case"\\htmlStyle":T.style=v,y={command:"\\htmlStyle",style:v};break;case"\\htmlData":{for(var _=v.split(","),A=0;A<_.length;A++){var P=_[A].split("=");if(P.length!==2)throw new Ci("Error parsing key-value for \\htmlData");T["data-"+P[0].trim()]=P[1].trim()}y={command:"\\htmlData",attributes:T};break}default:throw new Error("Unrecognized html command")}return u.settings.isTrusted(y)?{type:"html",mode:u.mode,attributes:T,body:Xf(b)}:u.formatUnsupportedCmd(d)},htmlBuilder:(i,s)=>{var u=d1(i.body,s,!1),d=["enclosing"];i.attributes.class&&d.push(...i.attributes.class.trim().split(/\s+/));var p=zn.makeSpan(d,u,s);for(var v in i.attributes)v!=="class"&&i.attributes.hasOwnProperty(v)&&p.setAttribute(v,i.attributes[v]);return p},mathmlBuilder:(i,s)=>_9(i.body,s)}),Ji({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:(i,s)=>{var{parser:u}=i;return{type:"htmlmathml",mode:u.mode,html:Xf(s[0]),mathml:Xf(s[1])}},htmlBuilder:(i,s)=>{var u=d1(i.html,s,!1);return zn.makeFragment(u)},mathmlBuilder:(i,s)=>_9(i.mathml,s)});var Lbe=function(s){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(s))return{number:+s,unit:"bp"};var u=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(s);if(!u)throw new Ci("Invalid size: '"+s+"' in \\includegraphics");var d={number:+(u[1]+u[2]),unit:u[3]};if(!J$e(d))throw new Ci("Invalid unit: '"+d.unit+"' in \\includegraphics.");return d};Ji({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:(i,s,u)=>{var{parser:d}=i,p={number:0,unit:"em"},v={number:.9,unit:"em"},b={number:0,unit:"em"},y="";if(u[0])for(var T=Yo(u[0],"raw").string,_=T.split(","),A=0;A<_.length;A++){var P=_[A].split("=");if(P.length===2){var R=P[1].trim();switch(P[0].trim()){case"alt":y=R;break;case"width":p=Lbe(R);break;case"height":v=Lbe(R);break;case"totalheight":b=Lbe(R);break;default:throw new Ci("Invalid key: '"+P[0]+"' in \\includegraphics.")}}}var F=Yo(s[0],"url").url;return y===""&&(y=F,y=y.replace(/^.*[\\/]/,""),y=y.substring(0,y.lastIndexOf("."))),d.settings.isTrusted({command:"\\includegraphics",url:F})?{type:"includegraphics",mode:d.mode,alt:y,width:p,height:v,totalheight:b,src:F}:d.formatUnsupportedCmd("\\includegraphics")},htmlBuilder:(i,s)=>{var u=Uh(i.height,s),d=0;i.totalheight.number>0&&(d=Uh(i.totalheight,s)-u);var p=0;i.width.number>0&&(p=Uh(i.width,s));var v={height:Ri(u+d)};p>0&&(v.width=Ri(p)),d>0&&(v.verticalAlign=Ri(-d));var b=new lHt(i.src,i.alt,v);return b.height=u,b.depth=d,b},mathmlBuilder:(i,s)=>{var u=new vi.MathNode("mglyph",[]);u.setAttribute("alt",i.alt);var d=Uh(i.height,s),p=0;if(i.totalheight.number>0&&(p=Uh(i.totalheight,s)-d,u.setAttribute("valign",Ri(-p))),u.setAttribute("height",Ri(d+p)),i.width.number>0){var v=Uh(i.width,s);u.setAttribute("width",Ri(v))}return u.setAttribute("src",i.src),u}}),Ji({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(i,s){var{parser:u,funcName:d}=i,p=Yo(s[0],"size");if(u.settings.strict){var v=d[1]==="m",b=p.value.unit==="mu";v?(b||u.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+d+" supports only mu units, "+("not "+p.value.unit+" units")),u.mode!=="math"&&u.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+d+" works only in math mode")):b&&u.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+d+" doesn't support mu units")}return{type:"kern",mode:u.mode,dimension:p.value}},htmlBuilder(i,s){return zn.makeGlue(i.dimension,s)},mathmlBuilder(i,s){var u=Uh(i.dimension,s);return new vi.SpaceNode(u)}}),Ji({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:(i,s)=>{var{parser:u,funcName:d}=i,p=s[0];return{type:"lap",mode:u.mode,alignment:d.slice(5),body:p}},htmlBuilder:(i,s)=>{var u;i.alignment==="clap"?(u=zn.makeSpan([],[uu(i.body,s)]),u=zn.makeSpan(["inner"],[u],s)):u=zn.makeSpan(["inner"],[uu(i.body,s)]);var d=zn.makeSpan(["fix"],[]),p=zn.makeSpan([i.alignment],[u,d],s),v=zn.makeSpan(["strut"]);return v.style.height=Ri(p.height+p.depth),p.depth&&(v.style.verticalAlign=Ri(-p.depth)),p.children.unshift(v),p=zn.makeSpan(["thinbox"],[p],s),zn.makeSpan(["mord","vbox"],[p],s)},mathmlBuilder:(i,s)=>{var u=new vi.MathNode("mpadded",[Ll(i.body,s)]);if(i.alignment!=="rlap"){var d=i.alignment==="llap"?"-1":"-0.5";u.setAttribute("lspace",d+"width")}return u.setAttribute("width","0px"),u}}),Ji({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(i,s){var{funcName:u,parser:d}=i,p=d.mode;d.switchMode("math");var v=u==="\\("?"\\)":"$",b=d.parseExpression(!1,v);return d.expect(v),d.switchMode(p),{type:"styling",mode:d.mode,style:"text",body:b}}}),Ji({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(i,s){throw new Ci("Mismatched "+i.funcName)}});var Qze=(i,s)=>{switch(s.style.size){case Ta.DISPLAY.size:return i.display;case Ta.TEXT.size:return i.text;case Ta.SCRIPT.size:return i.script;case Ta.SCRIPTSCRIPT.size:return i.scriptscript;default:return i.text}};Ji({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:(i,s)=>{var{parser:u}=i;return{type:"mathchoice",mode:u.mode,display:Xf(s[0]),text:Xf(s[1]),script:Xf(s[2]),scriptscript:Xf(s[3])}},htmlBuilder:(i,s)=>{var u=Qze(i,s),d=d1(u,s,!1);return zn.makeFragment(d)},mathmlBuilder:(i,s)=>{var u=Qze(i,s);return _9(u,s)}});var Jze=(i,s,u,d,p,v,b)=>{i=zn.makeSpan([],[i]);var y=u&&Ya.isCharacterBox(u),T,_;if(s){var A=uu(s,d.havingStyle(p.sup()),d);_={elem:A,kern:Math.max(d.fontMetrics().bigOpSpacing1,d.fontMetrics().bigOpSpacing3-A.depth)}}if(u){var P=uu(u,d.havingStyle(p.sub()),d);T={elem:P,kern:Math.max(d.fontMetrics().bigOpSpacing2,d.fontMetrics().bigOpSpacing4-P.height)}}var R;if(_&&T){var F=d.fontMetrics().bigOpSpacing5+T.elem.height+T.elem.depth+T.kern+i.depth+b;R=zn.makeVList({positionType:"bottom",positionData:F,children:[{type:"kern",size:d.fontMetrics().bigOpSpacing5},{type:"elem",elem:T.elem,marginLeft:Ri(-v)},{type:"kern",size:T.kern},{type:"elem",elem:i},{type:"kern",size:_.kern},{type:"elem",elem:_.elem,marginLeft:Ri(v)},{type:"kern",size:d.fontMetrics().bigOpSpacing5}]},d)}else if(T){var j=i.height-b;R=zn.makeVList({positionType:"top",positionData:j,children:[{type:"kern",size:d.fontMetrics().bigOpSpacing5},{type:"elem",elem:T.elem,marginLeft:Ri(-v)},{type:"kern",size:T.kern},{type:"elem",elem:i}]},d)}else if(_){var K=i.depth+b;R=zn.makeVList({positionType:"bottom",positionData:K,children:[{type:"elem",elem:i},{type:"kern",size:_.kern},{type:"elem",elem:_.elem,marginLeft:Ri(v)},{type:"kern",size:d.fontMetrics().bigOpSpacing5}]},d)}else return i;var ee=[R];if(T&&v!==0&&!y){var ie=zn.makeSpan(["mspace"],[],d);ie.style.marginRight=Ri(v),ee.unshift(ie)}return zn.makeSpan(["mop","op-limits"],ee,d)},Zze=["\\smallint"],PD=(i,s)=>{var u,d,p=!1,v;i.type==="supsub"?(u=i.sup,d=i.sub,v=Yo(i.base,"op"),p=!0):v=Yo(i,"op");var b=s.style,y=!1;b.size===Ta.DISPLAY.size&&v.symbol&&!Ya.contains(Zze,v.name)&&(y=!0);var T;if(v.symbol){var _=y?"Size2-Regular":"Size1-Regular",A="";if((v.name==="\\oiint"||v.name==="\\oiiint")&&(A=v.name.slice(1),v.name=A==="oiint"?"\\iint":"\\iiint"),T=zn.makeSymbol(v.name,_,"math",s,["mop","op-symbol",y?"large-op":"small-op"]),A.length>0){var P=T.italic,R=zn.staticSvg(A+"Size"+(y?"2":"1"),s);T=zn.makeVList({positionType:"individualShift",children:[{type:"elem",elem:T,shift:0},{type:"elem",elem:R,shift:y?.08:0}]},s),v.name="\\"+A,T.classes.unshift("mop"),T.italic=P}}else if(v.body){var F=d1(v.body,s,!0);F.length===1&&F[0]instanceof Bv?(T=F[0],T.classes[0]="mop"):T=zn.makeSpan(["mop"],F,s)}else{for(var j=[],K=1;K{var u;if(i.symbol)u=new Fv("mo",[Rv(i.name,i.mode)]),Ya.contains(Zze,i.name)&&u.setAttribute("largeop","false");else if(i.body)u=new Fv("mo",j2(i.body,s));else{u=new Fv("mi",[new lR(i.name.slice(1))]);var d=new Fv("mo",[Rv("⁡","text")]);i.parentIsSupSub?u=new Fv("mrow",[u,d]):u=bze([u,d])}return u},hVt={"∏":"\\prod","∐":"\\coprod","∑":"\\sum","⋀":"\\bigwedge","⋁":"\\bigvee","⋂":"\\bigcap","⋃":"\\bigcup","⨀":"\\bigodot","⨁":"\\bigoplus","⨂":"\\bigotimes","⨄":"\\biguplus","⨆":"\\bigsqcup"};Ji({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","∏","∐","∑","⋀","⋁","⋂","⋃","⨀","⨁","⨂","⨄","⨆"],props:{numArgs:0},handler:(i,s)=>{var{parser:u,funcName:d}=i,p=d;return p.length===1&&(p=hVt[p]),{type:"op",mode:u.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:p}},htmlBuilder:PD,mathmlBuilder:dR}),Ji({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:(i,s)=>{var{parser:u}=i,d=s[0];return{type:"op",mode:u.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:Xf(d)}},htmlBuilder:PD,mathmlBuilder:dR});var fVt={"∫":"\\int","∬":"\\iint","∭":"\\iiint","∮":"\\oint","∯":"\\oiint","∰":"\\oiiint"};Ji({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(i){var{parser:s,funcName:u}=i;return{type:"op",mode:s.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:u}},htmlBuilder:PD,mathmlBuilder:dR}),Ji({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(i){var{parser:s,funcName:u}=i;return{type:"op",mode:s.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:u}},htmlBuilder:PD,mathmlBuilder:dR}),Ji({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","∫","∬","∭","∮","∯","∰"],props:{numArgs:0},handler(i){var{parser:s,funcName:u}=i,d=u;return d.length===1&&(d=fVt[d]),{type:"op",mode:s.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:d}},htmlBuilder:PD,mathmlBuilder:dR});var eqe=(i,s)=>{var u,d,p=!1,v;i.type==="supsub"?(u=i.sup,d=i.sub,v=Yo(i.base,"operatorname"),p=!0):v=Yo(i,"operatorname");var b;if(v.body.length>0){for(var y=v.body.map(P=>{var R=P.text;return typeof R=="string"?{type:"textord",mode:P.mode,text:R}:P}),T=d1(y,s.withFont("mathrm"),!0),_=0;_{for(var u=j2(i.body,s.withFont("mathrm")),d=!0,p=0;pA.toText()).join("");u=[new vi.TextNode(y)]}var T=new vi.MathNode("mi",u);T.setAttribute("mathvariant","normal");var _=new vi.MathNode("mo",[Rv("⁡","text")]);return i.parentIsSupSub?new vi.MathNode("mrow",[T,_]):vi.newDocumentFragment([T,_])};Ji({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:(i,s)=>{var{parser:u,funcName:d}=i,p=s[0];return{type:"operatorname",mode:u.mode,body:Xf(p),alwaysHandleSupSub:d==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},htmlBuilder:eqe,mathmlBuilder:dVt}),et("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@"),zC({type:"ordgroup",htmlBuilder(i,s){return i.semisimple?zn.makeFragment(d1(i.body,s,!1)):zn.makeSpan(["mord"],d1(i.body,s,!0),s)},mathmlBuilder(i,s){return _9(i.body,s,!0)}}),Ji({type:"overline",names:["\\overline"],props:{numArgs:1},handler(i,s){var{parser:u}=i,d=s[0];return{type:"overline",mode:u.mode,body:d}},htmlBuilder(i,s){var u=uu(i.body,s.havingCrampedStyle()),d=zn.makeLineSpan("overline-line",s),p=s.fontMetrics().defaultRuleThickness,v=zn.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:u},{type:"kern",size:3*p},{type:"elem",elem:d},{type:"kern",size:p}]},s);return zn.makeSpan(["mord","overline"],[v],s)},mathmlBuilder(i,s){var u=new vi.MathNode("mo",[new vi.TextNode("‾")]);u.setAttribute("stretchy","true");var d=new vi.MathNode("mover",[Ll(i.body,s),u]);return d.setAttribute("accent","true"),d}}),Ji({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:(i,s)=>{var{parser:u}=i,d=s[0];return{type:"phantom",mode:u.mode,body:Xf(d)}},htmlBuilder:(i,s)=>{var u=d1(i.body,s.withPhantom(),!1);return zn.makeFragment(u)},mathmlBuilder:(i,s)=>{var u=j2(i.body,s);return new vi.MathNode("mphantom",u)}}),Ji({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:(i,s)=>{var{parser:u}=i,d=s[0];return{type:"hphantom",mode:u.mode,body:d}},htmlBuilder:(i,s)=>{var u=zn.makeSpan([],[uu(i.body,s.withPhantom())]);if(u.height=0,u.depth=0,u.children)for(var d=0;d{var u=j2(Xf(i.body),s),d=new vi.MathNode("mphantom",u),p=new vi.MathNode("mpadded",[d]);return p.setAttribute("height","0px"),p.setAttribute("depth","0px"),p}}),Ji({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:(i,s)=>{var{parser:u}=i,d=s[0];return{type:"vphantom",mode:u.mode,body:d}},htmlBuilder:(i,s)=>{var u=zn.makeSpan(["inner"],[uu(i.body,s.withPhantom())]),d=zn.makeSpan(["fix"],[]);return zn.makeSpan(["mord","rlap"],[u,d],s)},mathmlBuilder:(i,s)=>{var u=j2(Xf(i.body),s),d=new vi.MathNode("mphantom",u),p=new vi.MathNode("mpadded",[d]);return p.setAttribute("width","0px"),p}}),Ji({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(i,s){var{parser:u}=i,d=Yo(s[0],"size").value,p=s[1];return{type:"raisebox",mode:u.mode,dy:d,body:p}},htmlBuilder(i,s){var u=uu(i.body,s),d=Uh(i.dy,s);return zn.makeVList({positionType:"shift",positionData:-d,children:[{type:"elem",elem:u}]},s)},mathmlBuilder(i,s){var u=new vi.MathNode("mpadded",[Ll(i.body,s)]),d=i.dy.number+i.dy.unit;return u.setAttribute("voffset",d),u}}),Ji({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0},handler(i){var{parser:s}=i;return{type:"internal",mode:s.mode}}}),Ji({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,argTypes:["size","size","size"]},handler(i,s,u){var{parser:d}=i,p=u[0],v=Yo(s[0],"size"),b=Yo(s[1],"size");return{type:"rule",mode:d.mode,shift:p&&Yo(p,"size").value,width:v.value,height:b.value}},htmlBuilder(i,s){var u=zn.makeSpan(["mord","rule"],[],s),d=Uh(i.width,s),p=Uh(i.height,s),v=i.shift?Uh(i.shift,s):0;return u.style.borderRightWidth=Ri(d),u.style.borderTopWidth=Ri(p),u.style.bottom=Ri(v),u.width=d,u.height=p+v,u.depth=-v,u.maxFontSize=p*1.125*s.sizeMultiplier,u},mathmlBuilder(i,s){var u=Uh(i.width,s),d=Uh(i.height,s),p=i.shift?Uh(i.shift,s):0,v=s.color&&s.getColor()||"black",b=new vi.MathNode("mspace");b.setAttribute("mathbackground",v),b.setAttribute("width",Ri(u)),b.setAttribute("height",Ri(d));var y=new vi.MathNode("mpadded",[b]);return p>=0?y.setAttribute("height",Ri(p)):(y.setAttribute("height",Ri(p)),y.setAttribute("depth",Ri(-p))),y.setAttribute("voffset",Ri(p)),y}});function tqe(i,s,u){for(var d=d1(i,s,!1),p=s.sizeMultiplier/u.sizeMultiplier,v=0;v{var u=s.havingSize(i.size);return tqe(i.body,u,s)};Ji({type:"sizing",names:nqe,props:{numArgs:0,allowedInText:!0},handler:(i,s)=>{var{breakOnTokenText:u,funcName:d,parser:p}=i,v=p.parseExpression(!1,u);return{type:"sizing",mode:p.mode,size:nqe.indexOf(d)+1,body:v}},htmlBuilder:gVt,mathmlBuilder:(i,s)=>{var u=s.havingSize(i.size),d=j2(i.body,u),p=new vi.MathNode("mstyle",d);return p.setAttribute("mathsize",Ri(u.sizeMultiplier)),p}}),Ji({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:(i,s,u)=>{var{parser:d}=i,p=!1,v=!1,b=u[0]&&Yo(u[0],"ordgroup");if(b)for(var y="",T=0;T{var u=zn.makeSpan([],[uu(i.body,s)]);if(!i.smashHeight&&!i.smashDepth)return u;if(i.smashHeight&&(u.height=0,u.children))for(var d=0;d{var u=new vi.MathNode("mpadded",[Ll(i.body,s)]);return i.smashHeight&&u.setAttribute("height","0px"),i.smashDepth&&u.setAttribute("depth","0px"),u}}),Ji({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(i,s,u){var{parser:d}=i,p=u[0],v=s[0];return{type:"sqrt",mode:d.mode,body:v,index:p}},htmlBuilder(i,s){var u=uu(i.body,s.havingCrampedStyle());u.height===0&&(u.height=s.fontMetrics().xHeight),u=zn.wrapFragment(u,s);var d=s.fontMetrics(),p=d.defaultRuleThickness,v=p;s.style.idu.height+u.depth+b&&(b=(b+P-u.height-u.depth)/2);var R=T.height-u.height-b-_;u.style.paddingLeft=Ri(A);var F=zn.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:u,wrapperClasses:["svg-align"]},{type:"kern",size:-(u.height+R)},{type:"elem",elem:T},{type:"kern",size:_}]},s);if(i.index){var j=s.havingStyle(Ta.SCRIPTSCRIPT),K=uu(i.index,j,s),ee=.6*(F.height-F.depth),ie=zn.makeVList({positionType:"shift",positionData:-ee,children:[{type:"elem",elem:K}]},s),oe=zn.makeSpan(["root"],[ie]);return zn.makeSpan(["mord","sqrt"],[oe,F],s)}else return zn.makeSpan(["mord","sqrt"],[F],s)},mathmlBuilder(i,s){var{body:u,index:d}=i;return d?new vi.MathNode("mroot",[Ll(u,s),Ll(d,s)]):new vi.MathNode("msqrt",[Ll(u,s)])}});var rqe={display:Ta.DISPLAY,text:Ta.TEXT,script:Ta.SCRIPT,scriptscript:Ta.SCRIPTSCRIPT};Ji({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(i,s){var{breakOnTokenText:u,funcName:d,parser:p}=i,v=p.parseExpression(!0,u),b=d.slice(1,d.length-5);return{type:"styling",mode:p.mode,style:b,body:v}},htmlBuilder(i,s){var u=rqe[i.style],d=s.havingStyle(u).withFont("");return tqe(i.body,d,s)},mathmlBuilder(i,s){var u=rqe[i.style],d=s.havingStyle(u),p=j2(i.body,d),v=new vi.MathNode("mstyle",p),b={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},y=b[i.style];return v.setAttribute("scriptlevel",y[0]),v.setAttribute("displaystyle",y[1]),v}});var pVt=function(s,u){var d=s.base;if(d)if(d.type==="op"){var p=d.limits&&(u.style.size===Ta.DISPLAY.size||d.alwaysHandleSupSub);return p?PD:null}else if(d.type==="operatorname"){var v=d.alwaysHandleSupSub&&(u.style.size===Ta.DISPLAY.size||d.limits);return v?eqe:null}else{if(d.type==="accent")return Ya.isCharacterBox(d.base)?gbe:null;if(d.type==="horizBrace"){var b=!s.sub;return b===d.isOver?Xze:null}else return null}else return null};zC({type:"supsub",htmlBuilder(i,s){var u=pVt(i,s);if(u)return u(i,s);var{base:d,sup:p,sub:v}=i,b=uu(d,s),y,T,_=s.fontMetrics(),A=0,P=0,R=d&&Ya.isCharacterBox(d);if(p){var F=s.havingStyle(s.style.sup());y=uu(p,F,s),R||(A=b.height-F.fontMetrics().supDrop*F.sizeMultiplier/s.sizeMultiplier)}if(v){var j=s.havingStyle(s.style.sub());T=uu(v,j,s),R||(P=b.depth+j.fontMetrics().subDrop*j.sizeMultiplier/s.sizeMultiplier)}var K;s.style===Ta.DISPLAY?K=_.sup1:s.style.cramped?K=_.sup3:K=_.sup2;var ee=s.sizeMultiplier,ie=Ri(.5/_.ptPerEm/ee),oe=null;if(T){var pe=i.base&&i.base.type==="op"&&i.base.name&&(i.base.name==="\\oiint"||i.base.name==="\\oiiint");(b instanceof Bv||pe)&&(oe=Ri(-b.italic))}var be;if(y&&T){A=Math.max(A,K,y.depth+.25*_.xHeight),P=Math.max(P,_.sub2);var ae=_.defaultRuleThickness,ne=4*ae;if(A-y.depth-(T.height-P)0&&(A+=se,P-=se)}var de=[{type:"elem",elem:T,shift:P,marginRight:ie,marginLeft:oe},{type:"elem",elem:y,shift:-A,marginRight:ie}];be=zn.makeVList({positionType:"individualShift",children:de},s)}else if(T){P=Math.max(P,_.sub1,T.height-.8*_.xHeight);var X=[{type:"elem",elem:T,marginLeft:oe,marginRight:ie}];be=zn.makeVList({positionType:"shift",positionData:P,children:X},s)}else if(y)A=Math.max(A,K,y.depth+.25*_.xHeight),be=zn.makeVList({positionType:"shift",positionData:-A,children:[{type:"elem",elem:y,marginRight:ie}]},s);else throw new Error("supsub must have either sup or sub.");var ge=ube(b,"right")||"mord";return zn.makeSpan([ge],[b,zn.makeSpan(["msupsub"],[be])],s)},mathmlBuilder(i,s){var u=!1,d,p;i.base&&i.base.type==="horizBrace"&&(p=!!i.sup,p===i.base.isOver&&(u=!0,d=i.base.isOver)),i.base&&(i.base.type==="op"||i.base.type==="operatorname")&&(i.base.parentIsSupSub=!0);var v=[Ll(i.base,s)];i.sub&&v.push(Ll(i.sub,s)),i.sup&&v.push(Ll(i.sup,s));var b;if(u)b=d?"mover":"munder";else if(i.sub)if(i.sup){var _=i.base;_&&_.type==="op"&&_.limits&&s.style===Ta.DISPLAY||_&&_.type==="operatorname"&&_.alwaysHandleSupSub&&(s.style===Ta.DISPLAY||_.limits)?b="munderover":b="msubsup"}else{var T=i.base;T&&T.type==="op"&&T.limits&&(s.style===Ta.DISPLAY||T.alwaysHandleSupSub)||T&&T.type==="operatorname"&&T.alwaysHandleSupSub&&(T.limits||s.style===Ta.DISPLAY)?b="munder":b="msub"}else{var y=i.base;y&&y.type==="op"&&y.limits&&(s.style===Ta.DISPLAY||y.alwaysHandleSupSub)||y&&y.type==="operatorname"&&y.alwaysHandleSupSub&&(y.limits||s.style===Ta.DISPLAY)?b="mover":b="msup"}return new vi.MathNode(b,v)}}),zC({type:"atom",htmlBuilder(i,s){return zn.mathsym(i.text,i.mode,s,["m"+i.family])},mathmlBuilder(i,s){var u=new vi.MathNode("mo",[Rv(i.text,i.mode)]);if(i.family==="bin"){var d=fbe(i,s);d==="bold-italic"&&u.setAttribute("mathvariant",d)}else i.family==="punct"?u.setAttribute("separator","true"):(i.family==="open"||i.family==="close")&&u.setAttribute("stretchy","false");return u}});var iqe={mi:"italic",mn:"normal",mtext:"normal"};zC({type:"mathord",htmlBuilder(i,s){return zn.makeOrd(i,s,"mathord")},mathmlBuilder(i,s){var u=new vi.MathNode("mi",[Rv(i.text,i.mode,s)]),d=fbe(i,s)||"italic";return d!==iqe[u.type]&&u.setAttribute("mathvariant",d),u}}),zC({type:"textord",htmlBuilder(i,s){return zn.makeOrd(i,s,"textord")},mathmlBuilder(i,s){var u=Rv(i.text,i.mode,s),d=fbe(i,s)||"normal",p;return i.mode==="text"?p=new vi.MathNode("mtext",[u]):/[0-9]/.test(i.text)?p=new vi.MathNode("mn",[u]):i.text==="\\prime"?p=new vi.MathNode("mo",[u]):p=new vi.MathNode("mi",[u]),d!==iqe[p.type]&&p.setAttribute("mathvariant",d),p}});var Mbe={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},Dbe={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};zC({type:"spacing",htmlBuilder(i,s){if(Dbe.hasOwnProperty(i.text)){var u=Dbe[i.text].className||"";if(i.mode==="text"){var d=zn.makeOrd(i,s,"textord");return d.classes.push(u),d}else return zn.makeSpan(["mspace",u],[zn.mathsym(i.text,i.mode,s)],s)}else{if(Mbe.hasOwnProperty(i.text))return zn.makeSpan(["mspace",Mbe[i.text]],[],s);throw new Ci('Unknown type of space "'+i.text+'"')}},mathmlBuilder(i,s){var u;if(Dbe.hasOwnProperty(i.text))u=new vi.MathNode("mtext",[new vi.TextNode(" ")]);else{if(Mbe.hasOwnProperty(i.text))return new vi.MathNode("mspace");throw new Ci('Unknown type of space "'+i.text+'"')}return u}});var sqe=()=>{var i=new vi.MathNode("mtd",[]);return i.setAttribute("width","50%"),i};zC({type:"tag",mathmlBuilder(i,s){var u=new vi.MathNode("mtable",[new vi.MathNode("mtr",[sqe(),new vi.MathNode("mtd",[_9(i.body,s)]),sqe(),new vi.MathNode("mtd",[_9(i.tag,s)])])]);return u.setAttribute("width","100%"),u}});var aqe={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},oqe={"\\textbf":"textbf","\\textmd":"textmd"},bVt={"\\textit":"textit","\\textup":"textup"},cqe=(i,s)=>{var u=i.font;return u?aqe[u]?s.withTextFontFamily(aqe[u]):oqe[u]?s.withTextFontWeight(oqe[u]):s.withTextFontShape(bVt[u]):s};Ji({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(i,s){var{parser:u,funcName:d}=i,p=s[0];return{type:"text",mode:u.mode,body:Xf(p),font:d}},htmlBuilder(i,s){var u=cqe(i,s),d=d1(i.body,u,!0);return zn.makeSpan(["mord","text"],d,u)},mathmlBuilder(i,s){var u=cqe(i,s);return _9(i.body,u)}}),Ji({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(i,s){var{parser:u}=i;return{type:"underline",mode:u.mode,body:s[0]}},htmlBuilder(i,s){var u=uu(i.body,s),d=zn.makeLineSpan("underline-line",s),p=s.fontMetrics().defaultRuleThickness,v=zn.makeVList({positionType:"top",positionData:u.height,children:[{type:"kern",size:p},{type:"elem",elem:d},{type:"kern",size:3*p},{type:"elem",elem:u}]},s);return zn.makeSpan(["mord","underline"],[v],s)},mathmlBuilder(i,s){var u=new vi.MathNode("mo",[new vi.TextNode("‾")]);u.setAttribute("stretchy","true");var d=new vi.MathNode("munder",[Ll(i.body,s),u]);return d.setAttribute("accentunder","true"),d}}),Ji({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(i,s){var{parser:u}=i;return{type:"vcenter",mode:u.mode,body:s[0]}},htmlBuilder(i,s){var u=uu(i.body,s),d=s.fontMetrics().axisHeight,p=.5*(u.height-d-(u.depth+d));return zn.makeVList({positionType:"shift",positionData:p,children:[{type:"elem",elem:u}]},s)},mathmlBuilder(i,s){return new vi.MathNode("mpadded",[Ll(i.body,s)],["vcenter"])}}),Ji({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(i,s,u){throw new Ci("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(i,s){for(var u=uqe(i),d=[],p=s.havingStyle(s.style.text()),v=0;vi.body.replace(/ /g,i.star?"␣":" "),L9=dze,lqe=`[ \r + ]`,mVt="\\\\[a-zA-Z@]+",vVt="\\\\[^\uD800-\uDFFF]",wVt="("+mVt+")"+lqe+"*",yVt=`\\\\( +|[ \r ]+ +?)[ \r ]*`,Ibe="[̀-ͯ]",xVt=new RegExp(Ibe+"+$"),kVt="("+lqe+"+)|"+(yVt+"|")+"([!-\\[\\]-‧‪-퟿豈-￿]"+(Ibe+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(Ibe+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+wVt)+("|"+vVt+")");class hqe{constructor(s,u){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=s,this.settings=u,this.tokenRegex=new RegExp(kVt,"g"),this.catcodes={"%":14,"~":13}}setCatcode(s,u){this.catcodes[s]=u}lex(){var s=this.input,u=this.tokenRegex.lastIndex;if(u===s.length)return new U4("EOF",new lm(this,u,u));var d=this.tokenRegex.exec(s);if(d===null||d.index!==u)throw new Ci("Unexpected character: '"+s[u]+"'",new U4(s[u],new lm(this,u,u+1)));var p=d[6]||d[3]||(d[2]?"\\ ":" ");if(this.catcodes[p]===14){var v=s.indexOf(` +`,this.tokenRegex.lastIndex);return v===-1?(this.tokenRegex.lastIndex=s.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=v+1,this.lex()}return new U4(p,new lm(this,u,this.tokenRegex.lastIndex))}}class EVt{constructor(s,u){s===void 0&&(s={}),u===void 0&&(u={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=u,this.builtins=s,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new Ci("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var s=this.undefStack.pop();for(var u in s)s.hasOwnProperty(u)&&(s[u]==null?delete this.current[u]:this.current[u]=s[u])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(s){return this.current.hasOwnProperty(s)||this.builtins.hasOwnProperty(s)}get(s){return this.current.hasOwnProperty(s)?this.current[s]:this.builtins[s]}set(s,u,d){if(d===void 0&&(d=!1),d){for(var p=0;p0&&(this.undefStack[this.undefStack.length-1][s]=u)}else{var v=this.undefStack[this.undefStack.length-1];v&&!v.hasOwnProperty(s)&&(v[s]=this.current[s])}u==null?delete this.current[s]:this.current[s]=u}}var TVt=$ze;et("\\noexpand",function(i){var s=i.popToken();return i.isExpandable(s.text)&&(s.noexpand=!0,s.treatAsRelax=!0),{tokens:[s],numArgs:0}}),et("\\expandafter",function(i){var s=i.popToken();return i.expandOnce(!0),{tokens:[s],numArgs:0}}),et("\\@firstoftwo",function(i){var s=i.consumeArgs(2);return{tokens:s[0],numArgs:0}}),et("\\@secondoftwo",function(i){var s=i.consumeArgs(2);return{tokens:s[1],numArgs:0}}),et("\\@ifnextchar",function(i){var s=i.consumeArgs(3);i.consumeSpaces();var u=i.future();return s[0].length===1&&s[0][0].text===u.text?{tokens:s[1],numArgs:0}:{tokens:s[2],numArgs:0}}),et("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),et("\\TextOrMath",function(i){var s=i.consumeArgs(2);return i.mode==="text"?{tokens:s[0],numArgs:0}:{tokens:s[1],numArgs:0}});var fqe={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};et("\\char",function(i){var s=i.popToken(),u,d="";if(s.text==="'")u=8,s=i.popToken();else if(s.text==='"')u=16,s=i.popToken();else if(s.text==="`")if(s=i.popToken(),s.text[0]==="\\")d=s.text.charCodeAt(1);else{if(s.text==="EOF")throw new Ci("\\char` missing argument");d=s.text.charCodeAt(0)}else u=10;if(u){if(d=fqe[s.text],d==null||d>=u)throw new Ci("Invalid base-"+u+" digit "+s.text);for(var p;(p=fqe[i.future().text])!=null&&p{var d=i.consumeArg().tokens;if(d.length!==1)throw new Ci("\\newcommand's first argument must be a macro name");var p=d[0].text,v=i.isDefined(p);if(v&&!s)throw new Ci("\\newcommand{"+p+"} attempting to redefine "+(p+"; use \\renewcommand"));if(!v&&!u)throw new Ci("\\renewcommand{"+p+"} when command "+p+" does not yet exist; use \\newcommand");var b=0;if(d=i.consumeArg().tokens,d.length===1&&d[0].text==="["){for(var y="",T=i.expandNextToken();T.text!=="]"&&T.text!=="EOF";)y+=T.text,T=i.expandNextToken();if(!y.match(/^\s*[0-9]+\s*$/))throw new Ci("Invalid number of arguments: "+y);b=parseInt(y),d=i.consumeArg().tokens}return i.macros.set(p,{tokens:d,numArgs:b}),""};et("\\newcommand",i=>Obe(i,!1,!0)),et("\\renewcommand",i=>Obe(i,!0,!1)),et("\\providecommand",i=>Obe(i,!0,!0)),et("\\message",i=>{var s=i.consumeArgs(1)[0];return console.log(s.reverse().map(u=>u.text).join("")),""}),et("\\errmessage",i=>{var s=i.consumeArgs(1)[0];return console.error(s.reverse().map(u=>u.text).join("")),""}),et("\\show",i=>{var s=i.popToken(),u=s.text;return console.log(s,i.macros.get(u),L9[u],Ul.math[u],Ul.text[u]),""}),et("\\bgroup","{"),et("\\egroup","}"),et("~","\\nobreakspace"),et("\\lq","`"),et("\\rq","'"),et("\\aa","\\r a"),et("\\AA","\\r A"),et("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`©}"),et("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}"),et("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}"),et("ℬ","\\mathscr{B}"),et("ℰ","\\mathscr{E}"),et("ℱ","\\mathscr{F}"),et("ℋ","\\mathscr{H}"),et("ℐ","\\mathscr{I}"),et("ℒ","\\mathscr{L}"),et("ℳ","\\mathscr{M}"),et("ℛ","\\mathscr{R}"),et("ℭ","\\mathfrak{C}"),et("ℌ","\\mathfrak{H}"),et("ℨ","\\mathfrak{Z}"),et("\\Bbbk","\\Bbb{k}"),et("·","\\cdotp"),et("\\llap","\\mathllap{\\textrm{#1}}"),et("\\rlap","\\mathrlap{\\textrm{#1}}"),et("\\clap","\\mathclap{\\textrm{#1}}"),et("\\mathstrut","\\vphantom{(}"),et("\\underbar","\\underline{\\text{#1}}"),et("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'),et("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}"),et("\\ne","\\neq"),et("≠","\\neq"),et("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`∉}}"),et("∉","\\notin"),et("≘","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`≘}}"),et("≙","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`≘}}"),et("≚","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`≚}}"),et("≛","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`≛}}"),et("≝","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`≝}}"),et("≞","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`≞}}"),et("≟","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`≟}}"),et("⟂","\\perp"),et("‼","\\mathclose{!\\mkern-0.8mu!}"),et("∌","\\notni"),et("⌜","\\ulcorner"),et("⌝","\\urcorner"),et("⌞","\\llcorner"),et("⌟","\\lrcorner"),et("©","\\copyright"),et("®","\\textregistered"),et("️","\\textregistered"),et("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}'),et("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}'),et("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}'),et("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}'),et("\\vdots","\\mathord{\\varvdots\\rule{0pt}{15pt}}"),et("⋮","\\vdots"),et("\\varGamma","\\mathit{\\Gamma}"),et("\\varDelta","\\mathit{\\Delta}"),et("\\varTheta","\\mathit{\\Theta}"),et("\\varLambda","\\mathit{\\Lambda}"),et("\\varXi","\\mathit{\\Xi}"),et("\\varPi","\\mathit{\\Pi}"),et("\\varSigma","\\mathit{\\Sigma}"),et("\\varUpsilon","\\mathit{\\Upsilon}"),et("\\varPhi","\\mathit{\\Phi}"),et("\\varPsi","\\mathit{\\Psi}"),et("\\varOmega","\\mathit{\\Omega}"),et("\\substack","\\begin{subarray}{c}#1\\end{subarray}"),et("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax"),et("\\boxed","\\fbox{$\\displaystyle{#1}$}"),et("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;"),et("\\implies","\\DOTSB\\;\\Longrightarrow\\;"),et("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");var dqe={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};et("\\dots",function(i){var s="\\dotso",u=i.expandAfterFuture().text;return u in dqe?s=dqe[u]:(u.slice(0,4)==="\\not"||u in Ul.math&&Ya.contains(["bin","rel"],Ul.math[u].group))&&(s="\\dotsb"),s});var Nbe={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};et("\\dotso",function(i){var s=i.future().text;return s in Nbe?"\\ldots\\,":"\\ldots"}),et("\\dotsc",function(i){var s=i.future().text;return s in Nbe&&s!==","?"\\ldots\\,":"\\ldots"}),et("\\cdots",function(i){var s=i.future().text;return s in Nbe?"\\@cdots\\,":"\\@cdots"}),et("\\dotsb","\\cdots"),et("\\dotsm","\\cdots"),et("\\dotsi","\\!\\cdots"),et("\\dotsx","\\ldots\\,"),et("\\DOTSI","\\relax"),et("\\DOTSB","\\relax"),et("\\DOTSX","\\relax"),et("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),et("\\,","\\tmspace+{3mu}{.1667em}"),et("\\thinspace","\\,"),et("\\>","\\mskip{4mu}"),et("\\:","\\tmspace+{4mu}{.2222em}"),et("\\medspace","\\:"),et("\\;","\\tmspace+{5mu}{.2777em}"),et("\\thickspace","\\;"),et("\\!","\\tmspace-{3mu}{.1667em}"),et("\\negthinspace","\\!"),et("\\negmedspace","\\tmspace-{4mu}{.2222em}"),et("\\negthickspace","\\tmspace-{5mu}{.277em}"),et("\\enspace","\\kern.5em "),et("\\enskip","\\hskip.5em\\relax"),et("\\quad","\\hskip1em\\relax"),et("\\qquad","\\hskip2em\\relax"),et("\\tag","\\@ifstar\\tag@literal\\tag@paren"),et("\\tag@paren","\\tag@literal{({#1})}"),et("\\tag@literal",i=>{if(i.macros.get("\\df@tag"))throw new Ci("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"}),et("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"),et("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),et("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),et("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),et("\\newline","\\\\\\relax"),et("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var gqe=Ri(K4["Main-Regular"]["T".charCodeAt(0)][1]-.7*K4["Main-Regular"]["A".charCodeAt(0)][1]);et("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+gqe+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}"),et("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+gqe+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}"),et("\\hspace","\\@ifstar\\@hspacer\\@hspace"),et("\\@hspace","\\hskip #1\\relax"),et("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),et("\\ordinarycolon",":"),et("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}"),et("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'),et("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'),et("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'),et("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'),et("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'),et("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'),et("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'),et("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'),et("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'),et("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'),et("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'),et("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'),et("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'),et("∷","\\dblcolon"),et("∹","\\eqcolon"),et("≔","\\coloneqq"),et("≕","\\eqqcolon"),et("⩴","\\Coloneqq"),et("\\ratio","\\vcentcolon"),et("\\coloncolon","\\dblcolon"),et("\\colonequals","\\coloneqq"),et("\\coloncolonequals","\\Coloneqq"),et("\\equalscolon","\\eqqcolon"),et("\\equalscoloncolon","\\Eqqcolon"),et("\\colonminus","\\coloneq"),et("\\coloncolonminus","\\Coloneq"),et("\\minuscolon","\\eqcolon"),et("\\minuscoloncolon","\\Eqcolon"),et("\\coloncolonapprox","\\Colonapprox"),et("\\coloncolonsim","\\Colonsim"),et("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),et("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"),et("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),et("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"),et("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`∌}}"),et("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),et("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),et("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}"),et("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}"),et("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}"),et("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}"),et("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}"),et("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}"),et("\\gvertneqq","\\html@mathml{\\@gvertneqq}{≩}"),et("\\lvertneqq","\\html@mathml{\\@lvertneqq}{≨}"),et("\\ngeqq","\\html@mathml{\\@ngeqq}{≱}"),et("\\ngeqslant","\\html@mathml{\\@ngeqslant}{≱}"),et("\\nleqq","\\html@mathml{\\@nleqq}{≰}"),et("\\nleqslant","\\html@mathml{\\@nleqslant}{≰}"),et("\\nshortmid","\\html@mathml{\\@nshortmid}{∤}"),et("\\nshortparallel","\\html@mathml{\\@nshortparallel}{∦}"),et("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{⊈}"),et("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{⊉}"),et("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{⊊}"),et("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{⫋}"),et("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{⊋}"),et("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{⫌}"),et("\\imath","\\html@mathml{\\@imath}{ı}"),et("\\jmath","\\html@mathml{\\@jmath}{ȷ}"),et("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`⟦}}"),et("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`⟧}}"),et("⟦","\\llbracket"),et("⟧","\\rrbracket"),et("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`⦃}}"),et("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`⦄}}"),et("⦃","\\lBrace"),et("⦄","\\rBrace"),et("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`⦵}}"),et("⦵","\\minuso"),et("\\darr","\\downarrow"),et("\\dArr","\\Downarrow"),et("\\Darr","\\Downarrow"),et("\\lang","\\langle"),et("\\rang","\\rangle"),et("\\uarr","\\uparrow"),et("\\uArr","\\Uparrow"),et("\\Uarr","\\Uparrow"),et("\\N","\\mathbb{N}"),et("\\R","\\mathbb{R}"),et("\\Z","\\mathbb{Z}"),et("\\alef","\\aleph"),et("\\alefsym","\\aleph"),et("\\Alpha","\\mathrm{A}"),et("\\Beta","\\mathrm{B}"),et("\\bull","\\bullet"),et("\\Chi","\\mathrm{X}"),et("\\clubs","\\clubsuit"),et("\\cnums","\\mathbb{C}"),et("\\Complex","\\mathbb{C}"),et("\\Dagger","\\ddagger"),et("\\diamonds","\\diamondsuit"),et("\\empty","\\emptyset"),et("\\Epsilon","\\mathrm{E}"),et("\\Eta","\\mathrm{H}"),et("\\exist","\\exists"),et("\\harr","\\leftrightarrow"),et("\\hArr","\\Leftrightarrow"),et("\\Harr","\\Leftrightarrow"),et("\\hearts","\\heartsuit"),et("\\image","\\Im"),et("\\infin","\\infty"),et("\\Iota","\\mathrm{I}"),et("\\isin","\\in"),et("\\Kappa","\\mathrm{K}"),et("\\larr","\\leftarrow"),et("\\lArr","\\Leftarrow"),et("\\Larr","\\Leftarrow"),et("\\lrarr","\\leftrightarrow"),et("\\lrArr","\\Leftrightarrow"),et("\\Lrarr","\\Leftrightarrow"),et("\\Mu","\\mathrm{M}"),et("\\natnums","\\mathbb{N}"),et("\\Nu","\\mathrm{N}"),et("\\Omicron","\\mathrm{O}"),et("\\plusmn","\\pm"),et("\\rarr","\\rightarrow"),et("\\rArr","\\Rightarrow"),et("\\Rarr","\\Rightarrow"),et("\\real","\\Re"),et("\\reals","\\mathbb{R}"),et("\\Reals","\\mathbb{R}"),et("\\Rho","\\mathrm{P}"),et("\\sdot","\\cdot"),et("\\sect","\\S"),et("\\spades","\\spadesuit"),et("\\sub","\\subset"),et("\\sube","\\subseteq"),et("\\supe","\\supseteq"),et("\\Tau","\\mathrm{T}"),et("\\thetasym","\\vartheta"),et("\\weierp","\\wp"),et("\\Zeta","\\mathrm{Z}"),et("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),et("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),et("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits"),et("\\bra","\\mathinner{\\langle{#1}|}"),et("\\ket","\\mathinner{|{#1}\\rangle}"),et("\\braket","\\mathinner{\\langle{#1}\\rangle}"),et("\\Bra","\\left\\langle#1\\right|"),et("\\Ket","\\left|#1\\right\\rangle");var pqe=i=>s=>{var u=s.consumeArg().tokens,d=s.consumeArg().tokens,p=s.consumeArg().tokens,v=s.consumeArg().tokens,b=s.macros.get("|"),y=s.macros.get("\\|");s.macros.beginGroup();var T=P=>R=>{i&&(R.macros.set("|",b),p.length&&R.macros.set("\\|",y));var F=P;if(!P&&p.length){var j=R.future();j.text==="|"&&(R.popToken(),F=!0)}return{tokens:F?p:d,numArgs:0}};s.macros.set("|",T(!1)),p.length&&s.macros.set("\\|",T(!0));var _=s.consumeArg().tokens,A=s.expandTokens([...v,..._,...u]);return s.macros.endGroup(),{tokens:A.reverse(),numArgs:0}};et("\\bra@ket",pqe(!1)),et("\\bra@set",pqe(!0)),et("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}"),et("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}"),et("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}"),et("\\angln","{\\angl n}"),et("\\blue","\\textcolor{##6495ed}{#1}"),et("\\orange","\\textcolor{##ffa500}{#1}"),et("\\pink","\\textcolor{##ff00af}{#1}"),et("\\red","\\textcolor{##df0030}{#1}"),et("\\green","\\textcolor{##28ae7b}{#1}"),et("\\gray","\\textcolor{gray}{#1}"),et("\\purple","\\textcolor{##9d38bd}{#1}"),et("\\blueA","\\textcolor{##ccfaff}{#1}"),et("\\blueB","\\textcolor{##80f6ff}{#1}"),et("\\blueC","\\textcolor{##63d9ea}{#1}"),et("\\blueD","\\textcolor{##11accd}{#1}"),et("\\blueE","\\textcolor{##0c7f99}{#1}"),et("\\tealA","\\textcolor{##94fff5}{#1}"),et("\\tealB","\\textcolor{##26edd5}{#1}"),et("\\tealC","\\textcolor{##01d1c1}{#1}"),et("\\tealD","\\textcolor{##01a995}{#1}"),et("\\tealE","\\textcolor{##208170}{#1}"),et("\\greenA","\\textcolor{##b6ffb0}{#1}"),et("\\greenB","\\textcolor{##8af281}{#1}"),et("\\greenC","\\textcolor{##74cf70}{#1}"),et("\\greenD","\\textcolor{##1fab54}{#1}"),et("\\greenE","\\textcolor{##0d923f}{#1}"),et("\\goldA","\\textcolor{##ffd0a9}{#1}"),et("\\goldB","\\textcolor{##ffbb71}{#1}"),et("\\goldC","\\textcolor{##ff9c39}{#1}"),et("\\goldD","\\textcolor{##e07d10}{#1}"),et("\\goldE","\\textcolor{##a75a05}{#1}"),et("\\redA","\\textcolor{##fca9a9}{#1}"),et("\\redB","\\textcolor{##ff8482}{#1}"),et("\\redC","\\textcolor{##f9685d}{#1}"),et("\\redD","\\textcolor{##e84d39}{#1}"),et("\\redE","\\textcolor{##bc2612}{#1}"),et("\\maroonA","\\textcolor{##ffbde0}{#1}"),et("\\maroonB","\\textcolor{##ff92c6}{#1}"),et("\\maroonC","\\textcolor{##ed5fa6}{#1}"),et("\\maroonD","\\textcolor{##ca337c}{#1}"),et("\\maroonE","\\textcolor{##9e034e}{#1}"),et("\\purpleA","\\textcolor{##ddd7ff}{#1}"),et("\\purpleB","\\textcolor{##c6b9fc}{#1}"),et("\\purpleC","\\textcolor{##aa87ff}{#1}"),et("\\purpleD","\\textcolor{##7854ab}{#1}"),et("\\purpleE","\\textcolor{##543b78}{#1}"),et("\\mintA","\\textcolor{##f5f9e8}{#1}"),et("\\mintB","\\textcolor{##edf2df}{#1}"),et("\\mintC","\\textcolor{##e0e5cc}{#1}"),et("\\grayA","\\textcolor{##f6f7f7}{#1}"),et("\\grayB","\\textcolor{##f0f1f2}{#1}"),et("\\grayC","\\textcolor{##e3e5e6}{#1}"),et("\\grayD","\\textcolor{##d6d8da}{#1}"),et("\\grayE","\\textcolor{##babec2}{#1}"),et("\\grayF","\\textcolor{##888d93}{#1}"),et("\\grayG","\\textcolor{##626569}{#1}"),et("\\grayH","\\textcolor{##3b3e40}{#1}"),et("\\grayI","\\textcolor{##21242c}{#1}"),et("\\kaBlue","\\textcolor{##314453}{#1}"),et("\\kaGreen","\\textcolor{##71B307}{#1}");var bqe={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class CVt{constructor(s,u,d){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=u,this.expansionCount=0,this.feed(s),this.macros=new EVt(TVt,u.macros),this.mode=d,this.stack=[]}feed(s){this.lexer=new hqe(s,this.settings)}switchMode(s){this.mode=s}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(s){this.stack.push(s)}pushTokens(s){this.stack.push(...s)}scanArgument(s){var u,d,p;if(s){if(this.consumeSpaces(),this.future().text!=="[")return null;u=this.popToken(),{tokens:p,end:d}=this.consumeArg(["]"])}else({tokens:p,start:u,end:d}=this.consumeArg());return this.pushToken(new U4("EOF",d.loc)),this.pushTokens(p),u.range(d,"")}consumeSpaces(){for(;;){var s=this.future();if(s.text===" ")this.stack.pop();else break}}consumeArg(s){var u=[],d=s&&s.length>0;d||this.consumeSpaces();var p=this.future(),v,b=0,y=0;do{if(v=this.popToken(),u.push(v),v.text==="{")++b;else if(v.text==="}"){if(--b,b===-1)throw new Ci("Extra }",v)}else if(v.text==="EOF")throw new Ci("Unexpected end of input in a macro argument, expected '"+(s&&d?s[y]:"}")+"'",v);if(s&&d)if((b===0||b===1&&s[y]==="{")&&v.text===s[y]){if(++y,y===s.length){u.splice(-y,y);break}}else y=0}while(b!==0||d);return p.text==="{"&&u[u.length-1].text==="}"&&(u.pop(),u.shift()),u.reverse(),{tokens:u,start:p,end:v}}consumeArgs(s,u){if(u){if(u.length!==s+1)throw new Ci("The length of delimiters doesn't match the number of args!");for(var d=u[0],p=0;pthis.settings.maxExpand)throw new Ci("Too many expansions: infinite loop or need to increase maxExpand setting");var v=p.tokens,b=this.consumeArgs(p.numArgs,p.delimiters);if(p.numArgs){v=v.slice();for(var y=v.length-1;y>=0;--y){var T=v[y];if(T.text==="#"){if(y===0)throw new Ci("Incomplete placeholder at end of macro body",T);if(T=v[--y],T.text==="#")v.splice(y+1,1);else if(/^[1-9]$/.test(T.text))v.splice(y,2,...b[+T.text-1]);else throw new Ci("Not a valid argument number",T)}}}return this.pushTokens(v),v.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var s=this.stack.pop();return s.treatAsRelax&&(s.text="\\relax"),s}throw new Error}expandMacro(s){return this.macros.has(s)?this.expandTokens([new U4(s)]):void 0}expandTokens(s){var u=[],d=this.stack.length;for(this.pushTokens(s);this.stack.length>d;)if(this.expandOnce(!0)===!1){var p=this.stack.pop();p.treatAsRelax&&(p.noexpand=!1,p.treatAsRelax=!1),u.push(p)}return u}expandMacroAsText(s){var u=this.expandMacro(s);return u&&u.map(d=>d.text).join("")}_getExpansion(s){var u=this.macros.get(s);if(u==null)return u;if(s.length===1){var d=this.lexer.catcodes[s];if(d!=null&&d!==13)return}var p=typeof u=="function"?u(this):u;if(typeof p=="string"){var v=0;if(p.indexOf("#")!==-1)for(var b=p.replace(/##/g,"");b.indexOf("#"+(v+1))!==-1;)++v;for(var y=new hqe(p,this.settings),T=[],_=y.lex();_.text!=="EOF";)T.push(_),_=y.lex();T.reverse();var A={tokens:T,numArgs:v};return A}return p}isDefined(s){return this.macros.has(s)||L9.hasOwnProperty(s)||Ul.math.hasOwnProperty(s)||Ul.text.hasOwnProperty(s)||bqe.hasOwnProperty(s)}isExpandable(s){var u=this.macros.get(s);return u!=null?typeof u=="string"||typeof u=="function"||!u.unexpandable:L9.hasOwnProperty(s)&&!L9[s].primitive}}var mqe=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,TQ=Object.freeze({"₊":"+","₋":"-","₌":"=","₍":"(","₎":")","₀":"0","₁":"1","₂":"2","₃":"3","₄":"4","₅":"5","₆":"6","₇":"7","₈":"8","₉":"9","ₐ":"a","ₑ":"e","ₕ":"h","ᵢ":"i","ⱼ":"j","ₖ":"k","ₗ":"l","ₘ":"m","ₙ":"n","ₒ":"o","ₚ":"p","ᵣ":"r","ₛ":"s","ₜ":"t","ᵤ":"u","ᵥ":"v","ₓ":"x","ᵦ":"β","ᵧ":"γ","ᵨ":"ρ","ᵩ":"ϕ","ᵪ":"χ","⁺":"+","⁻":"-","⁼":"=","⁽":"(","⁾":")","⁰":"0","¹":"1","²":"2","³":"3","⁴":"4","⁵":"5","⁶":"6","⁷":"7","⁸":"8","⁹":"9","ᴬ":"A","ᴮ":"B","ᴰ":"D","ᴱ":"E","ᴳ":"G","ᴴ":"H","ᴵ":"I","ᴶ":"J","ᴷ":"K","ᴸ":"L","ᴹ":"M","ᴺ":"N","ᴼ":"O","ᴾ":"P","ᴿ":"R","ᵀ":"T","ᵁ":"U","ⱽ":"V","ᵂ":"W","ᵃ":"a","ᵇ":"b","ᶜ":"c","ᵈ":"d","ᵉ":"e","ᶠ":"f","ᵍ":"g",ʰ:"h","ⁱ":"i",ʲ:"j","ᵏ":"k",ˡ:"l","ᵐ":"m",ⁿ:"n","ᵒ":"o","ᵖ":"p",ʳ:"r",ˢ:"s","ᵗ":"t","ᵘ":"u","ᵛ":"v",ʷ:"w",ˣ:"x",ʸ:"y","ᶻ":"z","ᵝ":"β","ᵞ":"γ","ᵟ":"δ","ᵠ":"ϕ","ᵡ":"χ","ᶿ":"θ"}),Pbe={"́":{text:"\\'",math:"\\acute"},"̀":{text:"\\`",math:"\\grave"},"̈":{text:'\\"',math:"\\ddot"},"̃":{text:"\\~",math:"\\tilde"},"̄":{text:"\\=",math:"\\bar"},"̆":{text:"\\u",math:"\\breve"},"̌":{text:"\\v",math:"\\check"},"̂":{text:"\\^",math:"\\hat"},"̇":{text:"\\.",math:"\\dot"},"̊":{text:"\\r",math:"\\mathring"},"̋":{text:"\\H"},"̧":{text:"\\c"}},vqe={á:"á",à:"à",ä:"ä",ǟ:"ǟ",ã:"ã",ā:"ā",ă:"ă",ắ:"ắ",ằ:"ằ",ẵ:"ẵ",ǎ:"ǎ",â:"â",ấ:"ấ",ầ:"ầ",ẫ:"ẫ",ȧ:"ȧ",ǡ:"ǡ",å:"å",ǻ:"ǻ",ḃ:"ḃ",ć:"ć",ḉ:"ḉ",č:"č",ĉ:"ĉ",ċ:"ċ",ç:"ç",ď:"ď",ḋ:"ḋ",ḑ:"ḑ",é:"é",è:"è",ë:"ë",ẽ:"ẽ",ē:"ē",ḗ:"ḗ",ḕ:"ḕ",ĕ:"ĕ",ḝ:"ḝ",ě:"ě",ê:"ê",ế:"ế",ề:"ề",ễ:"ễ",ė:"ė",ȩ:"ȩ",ḟ:"ḟ",ǵ:"ǵ",ḡ:"ḡ",ğ:"ğ",ǧ:"ǧ",ĝ:"ĝ",ġ:"ġ",ģ:"ģ",ḧ:"ḧ",ȟ:"ȟ",ĥ:"ĥ",ḣ:"ḣ",ḩ:"ḩ",í:"í",ì:"ì",ï:"ï",ḯ:"ḯ",ĩ:"ĩ",ī:"ī",ĭ:"ĭ",ǐ:"ǐ",î:"î",ǰ:"ǰ",ĵ:"ĵ",ḱ:"ḱ",ǩ:"ǩ",ķ:"ķ",ĺ:"ĺ",ľ:"ľ",ļ:"ļ",ḿ:"ḿ",ṁ:"ṁ",ń:"ń",ǹ:"ǹ",ñ:"ñ",ň:"ň",ṅ:"ṅ",ņ:"ņ",ó:"ó",ò:"ò",ö:"ö",ȫ:"ȫ",õ:"õ",ṍ:"ṍ",ṏ:"ṏ",ȭ:"ȭ",ō:"ō",ṓ:"ṓ",ṑ:"ṑ",ŏ:"ŏ",ǒ:"ǒ",ô:"ô",ố:"ố",ồ:"ồ",ỗ:"ỗ",ȯ:"ȯ",ȱ:"ȱ",ő:"ő",ṕ:"ṕ",ṗ:"ṗ",ŕ:"ŕ",ř:"ř",ṙ:"ṙ",ŗ:"ŗ",ś:"ś",ṥ:"ṥ",š:"š",ṧ:"ṧ",ŝ:"ŝ",ṡ:"ṡ",ş:"ş",ẗ:"ẗ",ť:"ť",ṫ:"ṫ",ţ:"ţ",ú:"ú",ù:"ù",ü:"ü",ǘ:"ǘ",ǜ:"ǜ",ǖ:"ǖ",ǚ:"ǚ",ũ:"ũ",ṹ:"ṹ",ū:"ū",ṻ:"ṻ",ŭ:"ŭ",ǔ:"ǔ",û:"û",ů:"ů",ű:"ű",ṽ:"ṽ",ẃ:"ẃ",ẁ:"ẁ",ẅ:"ẅ",ŵ:"ŵ",ẇ:"ẇ",ẘ:"ẘ",ẍ:"ẍ",ẋ:"ẋ",ý:"ý",ỳ:"ỳ",ÿ:"ÿ",ỹ:"ỹ",ȳ:"ȳ",ŷ:"ŷ",ẏ:"ẏ",ẙ:"ẙ",ź:"ź",ž:"ž",ẑ:"ẑ",ż:"ż",Á:"Á",À:"À",Ä:"Ä",Ǟ:"Ǟ",Ã:"Ã",Ā:"Ā",Ă:"Ă",Ắ:"Ắ",Ằ:"Ằ",Ẵ:"Ẵ",Ǎ:"Ǎ",Â:"Â",Ấ:"Ấ",Ầ:"Ầ",Ẫ:"Ẫ",Ȧ:"Ȧ",Ǡ:"Ǡ",Å:"Å",Ǻ:"Ǻ",Ḃ:"Ḃ",Ć:"Ć",Ḉ:"Ḉ",Č:"Č",Ĉ:"Ĉ",Ċ:"Ċ",Ç:"Ç",Ď:"Ď",Ḋ:"Ḋ",Ḑ:"Ḑ",É:"É",È:"È",Ë:"Ë",Ẽ:"Ẽ",Ē:"Ē",Ḗ:"Ḗ",Ḕ:"Ḕ",Ĕ:"Ĕ",Ḝ:"Ḝ",Ě:"Ě",Ê:"Ê",Ế:"Ế",Ề:"Ề",Ễ:"Ễ",Ė:"Ė",Ȩ:"Ȩ",Ḟ:"Ḟ",Ǵ:"Ǵ",Ḡ:"Ḡ",Ğ:"Ğ",Ǧ:"Ǧ",Ĝ:"Ĝ",Ġ:"Ġ",Ģ:"Ģ",Ḧ:"Ḧ",Ȟ:"Ȟ",Ĥ:"Ĥ",Ḣ:"Ḣ",Ḩ:"Ḩ",Í:"Í",Ì:"Ì",Ï:"Ï",Ḯ:"Ḯ",Ĩ:"Ĩ",Ī:"Ī",Ĭ:"Ĭ",Ǐ:"Ǐ",Î:"Î",İ:"İ",Ĵ:"Ĵ",Ḱ:"Ḱ",Ǩ:"Ǩ",Ķ:"Ķ",Ĺ:"Ĺ",Ľ:"Ľ",Ļ:"Ļ",Ḿ:"Ḿ",Ṁ:"Ṁ",Ń:"Ń",Ǹ:"Ǹ",Ñ:"Ñ",Ň:"Ň",Ṅ:"Ṅ",Ņ:"Ņ",Ó:"Ó",Ò:"Ò",Ö:"Ö",Ȫ:"Ȫ",Õ:"Õ",Ṍ:"Ṍ",Ṏ:"Ṏ",Ȭ:"Ȭ",Ō:"Ō",Ṓ:"Ṓ",Ṑ:"Ṑ",Ŏ:"Ŏ",Ǒ:"Ǒ",Ô:"Ô",Ố:"Ố",Ồ:"Ồ",Ỗ:"Ỗ",Ȯ:"Ȯ",Ȱ:"Ȱ",Ő:"Ő",Ṕ:"Ṕ",Ṗ:"Ṗ",Ŕ:"Ŕ",Ř:"Ř",Ṙ:"Ṙ",Ŗ:"Ŗ",Ś:"Ś",Ṥ:"Ṥ",Š:"Š",Ṧ:"Ṧ",Ŝ:"Ŝ",Ṡ:"Ṡ",Ş:"Ş",Ť:"Ť",Ṫ:"Ṫ",Ţ:"Ţ",Ú:"Ú",Ù:"Ù",Ü:"Ü",Ǘ:"Ǘ",Ǜ:"Ǜ",Ǖ:"Ǖ",Ǚ:"Ǚ",Ũ:"Ũ",Ṹ:"Ṹ",Ū:"Ū",Ṻ:"Ṻ",Ŭ:"Ŭ",Ǔ:"Ǔ",Û:"Û",Ů:"Ů",Ű:"Ű",Ṽ:"Ṽ",Ẃ:"Ẃ",Ẁ:"Ẁ",Ẅ:"Ẅ",Ŵ:"Ŵ",Ẇ:"Ẇ",Ẍ:"Ẍ",Ẋ:"Ẋ",Ý:"Ý",Ỳ:"Ỳ",Ÿ:"Ÿ",Ỹ:"Ỹ",Ȳ:"Ȳ",Ŷ:"Ŷ",Ẏ:"Ẏ",Ź:"Ź",Ž:"Ž",Ẑ:"Ẑ",Ż:"Ż",ά:"ά",ὰ:"ὰ",ᾱ:"ᾱ",ᾰ:"ᾰ",έ:"έ",ὲ:"ὲ",ή:"ή",ὴ:"ὴ",ί:"ί",ὶ:"ὶ",ϊ:"ϊ",ΐ:"ΐ",ῒ:"ῒ",ῑ:"ῑ",ῐ:"ῐ",ό:"ό",ὸ:"ὸ",ύ:"ύ",ὺ:"ὺ",ϋ:"ϋ",ΰ:"ΰ",ῢ:"ῢ",ῡ:"ῡ",ῠ:"ῠ",ώ:"ώ",ὼ:"ὼ",Ύ:"Ύ",Ὺ:"Ὺ",Ϋ:"Ϋ",Ῡ:"Ῡ",Ῠ:"Ῠ",Ώ:"Ώ",Ὼ:"Ὼ"};class gR{constructor(s,u){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new CVt(s,u,this.mode),this.settings=u,this.leftrightDepth=0}expect(s,u){if(u===void 0&&(u=!0),this.fetch().text!==s)throw new Ci("Expected '"+s+"', got '"+this.fetch().text+"'",this.fetch());u&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(s){this.mode=s,this.gullet.switchMode(s)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var s=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),s}finally{this.gullet.endGroups()}}subparse(s){var u=this.nextToken;this.consume(),this.gullet.pushToken(new U4("}")),this.gullet.pushTokens(s);var d=this.parseExpression(!1);return this.expect("}"),this.nextToken=u,d}parseExpression(s,u){for(var d=[];;){this.mode==="math"&&this.consumeSpaces();var p=this.fetch();if(gR.endOfExpression.indexOf(p.text)!==-1||u&&p.text===u||s&&L9[p.text]&&L9[p.text].infix)break;var v=this.parseAtom(u);if(v){if(v.type==="internal")continue}else break;d.push(v)}return this.mode==="text"&&this.formLigatures(d),this.handleInfixNodes(d)}handleInfixNodes(s){for(var u=-1,d,p=0;p=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+u[0]+'" used in math mode',s);var y=Ul[this.mode][u].group,T=lm.range(s),_;if(dHt.hasOwnProperty(y)){var A=y;_={type:"atom",mode:this.mode,family:A,loc:T,text:u}}else _={type:y,mode:this.mode,loc:T,text:u};b=_}else if(u.charCodeAt(0)>=128)this.settings.strict&&(K$e(u.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+u[0]+'" used in math mode',s):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+u[0]+'"'+(" ("+u.charCodeAt(0)+")"),s)),b={type:"textord",mode:"text",loc:lm.range(s),text:u};else return null;if(this.consume(),v)for(var P=0;P"u"&&(_s.yylloc={});var j0=_s.yylloc;on.push(j0);var pm=_s.options&&_s.options.ranges;typeof tl.yy.parseError=="function"?this.parseError=tl.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ml(){var kh;return kh=At.pop()||_s.lex()||Pa,typeof kh!="number"&&(kh instanceof Array&&(At=kh,kh=At.pop()),kh=qn.symbols_[kh]||kh),kh}for(var Xc,Bc,ja,Ou,Sa={},Po,Fc,xa,Ba;;){if(Bc=Un[Un.length-1],this.defaultActions[Bc]?ja=this.defaultActions[Bc]:((Xc===null||typeof Xc>"u")&&(Xc=Ml()),ja=fn[Bc]&&fn[Bc][Xc]),typeof ja>"u"||!ja.length||!ja[0]){var ga="";Ba=[];for(Po in fn[Bc])this.terminals_[Po]&&Po>$o&&Ba.push("'"+this.terminals_[Po]+"'");_s.showPosition?ga="Parse error on line "+(oo+1)+`: +`+_s.showPosition()+` +Expecting `+Ba.join(", ")+", got '"+(this.terminals_[Xc]||Xc)+"'":ga="Parse error on line "+(oo+1)+": Unexpected "+(Xc==Pa?"end of input":"'"+(this.terminals_[Xc]||Xc)+"'"),this.parseError(ga,{text:_s.match,token:this.terminals_[Xc]||Xc,line:_s.yylineno,loc:j0,expected:Ba})}if(ja[0]instanceof Array&&ja.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Bc+", token: "+Xc);switch(ja[0]){case 1:Un.push(Xc),wt.push(_s.yytext),on.push(_s.yylloc),Un.push(ja[1]),Xc=null,jo=_s.yyleng,An=_s.yytext,oo=_s.yylineno,j0=_s.yylloc;break;case 2:if(Fc=this.productions_[ja[1]][1],Sa.$=wt[wt.length-Fc],Sa._$={first_line:on[on.length-(Fc||1)].first_line,last_line:on[on.length-1].last_line,first_column:on[on.length-(Fc||1)].first_column,last_column:on[on.length-1].last_column},pm&&(Sa._$.range=[on[on.length-(Fc||1)].range[0],on[on.length-1].range[1]]),Ou=this.performAction.apply(Sa,[An,jo,oo,tl.yy,ja[1],wt,on].concat(wo)),typeof Ou<"u")return Ou;Fc&&(Un=Un.slice(0,-1*Fc*2),wt=wt.slice(0,-1*Fc),on=on.slice(0,-1*Fc)),Un.push(this.productions_[ja[1]][0]),wt.push(Sa.$),on.push(Sa._$),xa=fn[Un[Un.length-2]][Un[Un.length-1]],Un.push(xa);break;case 3:return!0}}return!0}},zs=function(){var Tr={EOF:1,parseError:function(qn,Un){if(this.yy.parser)this.yy.parser.parseError(qn,Un);else throw new Error(qn)},setInput:function(Fn,qn){return this.yy=qn||this.yy||{},this._input=Fn,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Fn=this._input[0];this.yytext+=Fn,this.yyleng++,this.offset++,this.match+=Fn,this.matched+=Fn;var qn=Fn.match(/(?:\r\n?|\n).*/g);return qn?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Fn},unput:function(Fn){var qn=Fn.length,Un=Fn.split(/(?:\r\n?|\n)/g);this._input=Fn+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-qn),this.offset-=qn;var At=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Un.length-1&&(this.yylineno-=Un.length-1);var wt=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Un?(Un.length===At.length?this.yylloc.first_column:0)+At[At.length-Un.length].length-Un[0].length:this.yylloc.first_column-qn},this.options.ranges&&(this.yylloc.range=[wt[0],wt[0]+this.yyleng-qn]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Fn){this.unput(this.match.slice(Fn))},pastInput:function(){var Fn=this.matched.substr(0,this.matched.length-this.match.length);return(Fn.length>20?"...":"")+Fn.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Fn=this.match;return Fn.length<20&&(Fn+=this._input.substr(0,20-Fn.length)),(Fn.substr(0,20)+(Fn.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Fn=this.pastInput(),qn=new Array(Fn.length+1).join("-");return Fn+this.upcomingInput()+` +`+qn+"^"},test_match:function(Fn,qn){var Un,At,wt;if(this.options.backtrack_lexer&&(wt={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(wt.yylloc.range=this.yylloc.range.slice(0))),At=Fn[0].match(/(?:\r\n?|\n).*/g),At&&(this.yylineno+=At.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:At?At[At.length-1].length-At[At.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Fn[0].length},this.yytext+=Fn[0],this.match+=Fn[0],this.matches=Fn,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Fn[0].length),this.matched+=Fn[0],Un=this.performAction.call(this,this.yy,this,qn,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Un)return Un;if(this._backtrack){for(var on in wt)this[on]=wt[on];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Fn,qn,Un,At;this._more||(this.yytext="",this.match="");for(var wt=this._currentRules(),on=0;onqn[0].length)){if(qn=Un,At=on,this.options.backtrack_lexer){if(Fn=this.test_match(Un,wt[on]),Fn!==!1)return Fn;if(this._backtrack){qn=!1;continue}else return!1}else if(!this.options.flex)break}return qn?(Fn=this.test_match(qn,wt[At]),Fn!==!1?Fn:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var qn=this.next();return qn||this.lex()},begin:function(qn){this.conditionStack.push(qn)},popState:function(){var qn=this.conditionStack.length-1;return qn>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(qn){return qn=this.conditionStack.length-1-Math.abs(qn||0),qn>=0?this.conditionStack[qn]:"INITIAL"},pushState:function(qn){this.begin(qn)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(qn,Un,At,wt){switch(At){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),26;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:break;case 14:c;break;case 15:return 12;case 16:break;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;case 23:return this.begin("person"),44;case 24:return this.begin("system_ext_queue"),51;case 25:return this.begin("system_ext_db"),50;case 26:return this.begin("system_ext"),49;case 27:return this.begin("system_queue"),48;case 28:return this.begin("system_db"),47;case 29:return this.begin("system"),46;case 30:return this.begin("boundary"),37;case 31:return this.begin("enterprise_boundary"),34;case 32:return this.begin("system_boundary"),36;case 33:return this.begin("container_ext_queue"),57;case 34:return this.begin("container_ext_db"),56;case 35:return this.begin("container_ext"),55;case 36:return this.begin("container_queue"),54;case 37:return this.begin("container_db"),53;case 38:return this.begin("container"),52;case 39:return this.begin("container_boundary"),38;case 40:return this.begin("component_ext_queue"),63;case 41:return this.begin("component_ext_db"),62;case 42:return this.begin("component_ext"),61;case 43:return this.begin("component_queue"),60;case 44:return this.begin("component_db"),59;case 45:return this.begin("component"),58;case 46:return this.begin("node"),39;case 47:return this.begin("node"),39;case 48:return this.begin("node_l"),40;case 49:return this.begin("node_r"),41;case 50:return this.begin("rel"),64;case 51:return this.begin("birel"),65;case 52:return this.begin("rel_u"),66;case 53:return this.begin("rel_u"),66;case 54:return this.begin("rel_d"),67;case 55:return this.begin("rel_d"),67;case 56:return this.begin("rel_l"),68;case 57:return this.begin("rel_l"),68;case 58:return this.begin("rel_r"),69;case 59:return this.begin("rel_r"),69;case 60:return this.begin("rel_b"),70;case 61:return this.begin("rel_index"),71;case 62:return this.begin("update_el_style"),72;case 63:return this.begin("update_rel_style"),73;case 64:return this.begin("update_layout_config"),74;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";case 67:this.begin("attribute");break;case 68:this.popState(),this.popState();break;case 69:return 80;case 70:break;case 71:return 80;case 72:this.begin("string");break;case 73:this.popState();break;case 74:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 79:this.popState(),this.popState();break;case 80:return"STR";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},string_kv_value:{rules:[78,79],inclusive:!1},string_kv_key:{rules:[77],inclusive:!1},string_kv:{rules:[76],inclusive:!1},string:{rules:[73,74],inclusive:!1},attribute:{rules:[68,69,70,71,72,75,80],inclusive:!1},update_layout_config:{rules:[65,66,67,68],inclusive:!1},update_rel_style:{rules:[65,66,67,68],inclusive:!1},update_el_style:{rules:[65,66,67,68],inclusive:!1},rel_b:{rules:[65,66,67,68],inclusive:!1},rel_r:{rules:[65,66,67,68],inclusive:!1},rel_l:{rules:[65,66,67,68],inclusive:!1},rel_d:{rules:[65,66,67,68],inclusive:!1},rel_u:{rules:[65,66,67,68],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[65,66,67,68],inclusive:!1},node_r:{rules:[65,66,67,68],inclusive:!1},node_l:{rules:[65,66,67,68],inclusive:!1},node:{rules:[65,66,67,68],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[65,66,67,68],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[65,66,67,68],inclusive:!1},component_ext:{rules:[65,66,67,68],inclusive:!1},component_queue:{rules:[65,66,67,68],inclusive:!1},component_db:{rules:[65,66,67,68],inclusive:!1},component:{rules:[65,66,67,68],inclusive:!1},container_boundary:{rules:[65,66,67,68],inclusive:!1},container_ext_queue:{rules:[65,66,67,68],inclusive:!1},container_ext_db:{rules:[65,66,67,68],inclusive:!1},container_ext:{rules:[65,66,67,68],inclusive:!1},container_queue:{rules:[65,66,67,68],inclusive:!1},container_db:{rules:[65,66,67,68],inclusive:!1},container:{rules:[65,66,67,68],inclusive:!1},birel:{rules:[65,66,67,68],inclusive:!1},system_boundary:{rules:[65,66,67,68],inclusive:!1},enterprise_boundary:{rules:[65,66,67,68],inclusive:!1},boundary:{rules:[65,66,67,68],inclusive:!1},system_ext_queue:{rules:[65,66,67,68],inclusive:!1},system_ext_db:{rules:[65,66,67,68],inclusive:!1},system_ext:{rules:[65,66,67,68],inclusive:!1},system_queue:{rules:[65,66,67,68],inclusive:!1},system_db:{rules:[65,66,67,68],inclusive:!1},system:{rules:[65,66,67,68],inclusive:!1},person_ext:{rules:[65,66,67,68],inclusive:!1},person:{rules:[65,66,67,68],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,82,83,84,85],inclusive:!0}}};return Tr}();Ma.lexer=zs;function ao(){this.yy={}}return ao.prototype=Ma,Ma.Parser=ao,new ao}();CQ.parser=CQ;const DVt=CQ;let R3=[],M9=[""],Op="global",j3="",Q4=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],pR=[],Rbe="",jbe=!1,SQ=4,_Q=2;var xqe;const IVt=function(){return xqe},OVt=function(i){xqe=Yf(i,qt())},NVt=function(i,s,u,d,p,v,b,y,T){if(i==null||s===void 0||s===null||u===void 0||u===null||d===void 0||d===null)return;let _={};const A=pR.find(P=>P.from===s&&P.to===u);if(A?_=A:pR.push(_),_.type=i,_.from=s,_.to=u,_.label={text:d},p==null)_.techn={text:""};else if(typeof p=="object"){let[P,R]=Object.entries(p)[0];_[P]={text:R}}else _.techn={text:p};if(v==null)_.descr={text:""};else if(typeof v=="object"){let[P,R]=Object.entries(v)[0];_[P]={text:R}}else _.descr={text:v};if(typeof b=="object"){let[P,R]=Object.entries(b)[0];_[P]=R}else _.sprite=b;if(typeof y=="object"){let[P,R]=Object.entries(y)[0];_[P]=R}else _.tags=y;if(typeof T=="object"){let[P,R]=Object.entries(T)[0];_[P]=R}else _.link=T;_.wrap=D9()},PVt=function(i,s,u,d,p,v,b){if(s===null||u===null)return;let y={};const T=R3.find(_=>_.alias===s);if(T&&s===T.alias?y=T:(y.alias=s,R3.push(y)),u==null?y.label={text:""}:y.label={text:u},d==null)y.descr={text:""};else if(typeof d=="object"){let[_,A]=Object.entries(d)[0];y[_]={text:A}}else y.descr={text:d};if(typeof p=="object"){let[_,A]=Object.entries(p)[0];y[_]=A}else y.sprite=p;if(typeof v=="object"){let[_,A]=Object.entries(v)[0];y[_]=A}else y.tags=v;if(typeof b=="object"){let[_,A]=Object.entries(b)[0];y[_]=A}else y.link=b;y.typeC4Shape={text:i},y.parentBoundary=Op,y.wrap=D9()},BVt=function(i,s,u,d,p,v,b,y){if(s===null||u===null)return;let T={};const _=R3.find(A=>A.alias===s);if(_&&s===_.alias?T=_:(T.alias=s,R3.push(T)),u==null?T.label={text:""}:T.label={text:u},d==null)T.techn={text:""};else if(typeof d=="object"){let[A,P]=Object.entries(d)[0];T[A]={text:P}}else T.techn={text:d};if(p==null)T.descr={text:""};else if(typeof p=="object"){let[A,P]=Object.entries(p)[0];T[A]={text:P}}else T.descr={text:p};if(typeof v=="object"){let[A,P]=Object.entries(v)[0];T[A]=P}else T.sprite=v;if(typeof b=="object"){let[A,P]=Object.entries(b)[0];T[A]=P}else T.tags=b;if(typeof y=="object"){let[A,P]=Object.entries(y)[0];T[A]=P}else T.link=y;T.wrap=D9(),T.typeC4Shape={text:i},T.parentBoundary=Op},FVt=function(i,s,u,d,p,v,b,y){if(s===null||u===null)return;let T={};const _=R3.find(A=>A.alias===s);if(_&&s===_.alias?T=_:(T.alias=s,R3.push(T)),u==null?T.label={text:""}:T.label={text:u},d==null)T.techn={text:""};else if(typeof d=="object"){let[A,P]=Object.entries(d)[0];T[A]={text:P}}else T.techn={text:d};if(p==null)T.descr={text:""};else if(typeof p=="object"){let[A,P]=Object.entries(p)[0];T[A]={text:P}}else T.descr={text:p};if(typeof v=="object"){let[A,P]=Object.entries(v)[0];T[A]=P}else T.sprite=v;if(typeof b=="object"){let[A,P]=Object.entries(b)[0];T[A]=P}else T.tags=b;if(typeof y=="object"){let[A,P]=Object.entries(y)[0];T[A]=P}else T.link=y;T.wrap=D9(),T.typeC4Shape={text:i},T.parentBoundary=Op},RVt=function(i,s,u,d,p){if(i===null||s===null)return;let v={};const b=Q4.find(y=>y.alias===i);if(b&&i===b.alias?v=b:(v.alias=i,Q4.push(v)),s==null?v.label={text:""}:v.label={text:s},u==null)v.type={text:"system"};else if(typeof u=="object"){let[y,T]=Object.entries(u)[0];v[y]={text:T}}else v.type={text:u};if(typeof d=="object"){let[y,T]=Object.entries(d)[0];v[y]=T}else v.tags=d;if(typeof p=="object"){let[y,T]=Object.entries(p)[0];v[y]=T}else v.link=p;v.parentBoundary=Op,v.wrap=D9(),j3=Op,Op=i,M9.push(j3)},jVt=function(i,s,u,d,p){if(i===null||s===null)return;let v={};const b=Q4.find(y=>y.alias===i);if(b&&i===b.alias?v=b:(v.alias=i,Q4.push(v)),s==null?v.label={text:""}:v.label={text:s},u==null)v.type={text:"container"};else if(typeof u=="object"){let[y,T]=Object.entries(u)[0];v[y]={text:T}}else v.type={text:u};if(typeof d=="object"){let[y,T]=Object.entries(d)[0];v[y]=T}else v.tags=d;if(typeof p=="object"){let[y,T]=Object.entries(p)[0];v[y]=T}else v.link=p;v.parentBoundary=Op,v.wrap=D9(),j3=Op,Op=i,M9.push(j3)},$Vt=function(i,s,u,d,p,v,b,y){if(s===null||u===null)return;let T={};const _=Q4.find(A=>A.alias===s);if(_&&s===_.alias?T=_:(T.alias=s,Q4.push(T)),u==null?T.label={text:""}:T.label={text:u},d==null)T.type={text:"node"};else if(typeof d=="object"){let[A,P]=Object.entries(d)[0];T[A]={text:P}}else T.type={text:d};if(p==null)T.descr={text:""};else if(typeof p=="object"){let[A,P]=Object.entries(p)[0];T[A]={text:P}}else T.descr={text:p};if(typeof b=="object"){let[A,P]=Object.entries(b)[0];T[A]=P}else T.tags=b;if(typeof y=="object"){let[A,P]=Object.entries(y)[0];T[A]=P}else T.link=y;T.nodeType=i,T.parentBoundary=Op,T.wrap=D9(),j3=Op,Op=s,M9.push(j3)},zVt=function(){Op=j3,M9.pop(),j3=M9.pop(),M9.push(j3)},qVt=function(i,s,u,d,p,v,b,y,T,_,A){let P=R3.find(R=>R.alias===s);if(!(P===void 0&&(P=Q4.find(R=>R.alias===s),P===void 0))){if(u!=null)if(typeof u=="object"){let[R,F]=Object.entries(u)[0];P[R]=F}else P.bgColor=u;if(d!=null)if(typeof d=="object"){let[R,F]=Object.entries(d)[0];P[R]=F}else P.fontColor=d;if(p!=null)if(typeof p=="object"){let[R,F]=Object.entries(p)[0];P[R]=F}else P.borderColor=p;if(v!=null)if(typeof v=="object"){let[R,F]=Object.entries(v)[0];P[R]=F}else P.shadowing=v;if(b!=null)if(typeof b=="object"){let[R,F]=Object.entries(b)[0];P[R]=F}else P.shape=b;if(y!=null)if(typeof y=="object"){let[R,F]=Object.entries(y)[0];P[R]=F}else P.sprite=y;if(T!=null)if(typeof T=="object"){let[R,F]=Object.entries(T)[0];P[R]=F}else P.techn=T;if(_!=null)if(typeof _=="object"){let[R,F]=Object.entries(_)[0];P[R]=F}else P.legendText=_;if(A!=null)if(typeof A=="object"){let[R,F]=Object.entries(A)[0];P[R]=F}else P.legendSprite=A}},HVt=function(i,s,u,d,p,v,b){const y=pR.find(T=>T.from===s&&T.to===u);if(y!==void 0){if(d!=null)if(typeof d=="object"){let[T,_]=Object.entries(d)[0];y[T]=_}else y.textColor=d;if(p!=null)if(typeof p=="object"){let[T,_]=Object.entries(p)[0];y[T]=_}else y.lineColor=p;if(v!=null)if(typeof v=="object"){let[T,_]=Object.entries(v)[0];y[T]=parseInt(_)}else y.offsetX=parseInt(v);if(b!=null)if(typeof b=="object"){let[T,_]=Object.entries(b)[0];y[T]=parseInt(_)}else y.offsetY=parseInt(b)}},VVt=function(i,s,u){let d=SQ,p=_Q;if(typeof s=="object"){const v=Object.values(s)[0];d=parseInt(v)}else d=parseInt(s);if(typeof u=="object"){const v=Object.values(u)[0];p=parseInt(v)}else p=parseInt(u);d>=1&&(SQ=d),p>=1&&(_Q=p)},UVt=function(){return SQ},GVt=function(){return _Q},KVt=function(){return Op},WVt=function(){return j3},kqe=function(i){return i==null?R3:R3.filter(s=>s.parentBoundary===i)},YVt=function(i){return R3.find(s=>s.alias===i)},XVt=function(i){return Object.keys(kqe(i))},Eqe=function(i){return i==null?Q4:Q4.filter(s=>s.parentBoundary===i)},QVt=Eqe,JVt=function(){return pR},ZVt=function(){return Rbe},eUt=function(i){jbe=i},D9=function(){return jbe},$be={addPersonOrSystem:PVt,addPersonOrSystemBoundary:RVt,addContainer:BVt,addContainerBoundary:jVt,addComponent:FVt,addDeploymentNode:$Vt,popBoundaryParseStack:zVt,addRel:NVt,updateElStyle:qVt,updateRelStyle:HVt,updateLayoutConfig:VVt,autoWrap:D9,setWrap:eUt,getC4ShapeArray:kqe,getC4Shape:YVt,getC4ShapeKeys:XVt,getBoundaries:Eqe,getBoundarys:QVt,getCurrentBoundaryParse:KVt,getParentBoundaryParse:WVt,getRels:JVt,getTitle:ZVt,getC4Type:IVt,getC4ShapeInRow:UVt,getC4BoundaryInRow:GVt,setAccTitle:Bg,getAccTitle:Cp,getAccDescription:_p,setAccDescription:Sp,getConfig:()=>qt().c4,clear:function(){R3=[],Q4=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],j3="",Op="global",M9=[""],pR=[],M9=[""],Rbe="",jbe=!1,SQ=4,_Q=2},LINETYPE:{SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},setTitle:function(i){Rbe=Yf(i,qt())},setC4Type:OVt},AQ=(i,s)=>{const u=i.append("rect");if(u.attr("x",s.x),u.attr("y",s.y),u.attr("fill",s.fill),u.attr("stroke",s.stroke),u.attr("width",s.width),u.attr("height",s.height),s.name&&u.attr("name",s.name),s.rx!==void 0&&u.attr("rx",s.rx),s.ry!==void 0&&u.attr("ry",s.ry),s.attrs!==void 0)for(const d in s.attrs)u.attr(d,s.attrs[d]);return s.class!==void 0&&u.attr("class",s.class),u},Tqe=(i,s)=>{const u={x:s.startx,y:s.starty,width:s.stopx-s.startx,height:s.stopy-s.starty,fill:s.fill,stroke:s.stroke,class:"rect"};AQ(i,u).lower()},tUt=(i,s)=>{const u=s.text.replace(fD," "),d=i.append("text");d.attr("x",s.x),d.attr("y",s.y),d.attr("class","legend"),d.style("text-anchor",s.anchor),s.class!==void 0&&d.attr("class",s.class);const p=d.append("tspan");return p.attr("x",s.x+s.textMargin*2),p.text(u),d},nUt=(i,s,u,d)=>{const p=i.append("image");p.attr("x",s),p.attr("y",u);const v=p9.sanitizeUrl(d);p.attr("xlink:href",v)},rUt=(i,s,u,d)=>{const p=i.append("use");p.attr("x",s),p.attr("y",u);const v=p9.sanitizeUrl(d);p.attr("xlink:href",`#${v}`)},qC=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),zbe=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),qbe=function(i,s){return AQ(i,s)},Cqe=function(i,s,u,d,p,v){const b=i.append("image");b.attr("width",s),b.attr("height",u),b.attr("x",d),b.attr("y",p);let y=v.startsWith("data:image/png;base64")?v:p9.sanitizeUrl(v);b.attr("xlink:href",y)},iUt=(i,s,u)=>{const d=i.append("g");let p=0;for(let v of s){let b=v.textColor?v.textColor:"#444444",y=v.lineColor?v.lineColor:"#444444",T=v.offsetX?parseInt(v.offsetX):0,_=v.offsetY?parseInt(v.offsetY):0,A="";if(p===0){let R=d.append("line");R.attr("x1",v.startPoint.x),R.attr("y1",v.startPoint.y),R.attr("x2",v.endPoint.x),R.attr("y2",v.endPoint.y),R.attr("stroke-width","1"),R.attr("stroke",y),R.style("fill","none"),v.type!=="rel_b"&&R.attr("marker-end","url("+A+"#arrowhead)"),(v.type==="birel"||v.type==="rel_b")&&R.attr("marker-start","url("+A+"#arrowend)"),p=-1}else{let R=d.append("path");R.attr("fill","none").attr("stroke-width","1").attr("stroke",y).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",v.startPoint.x).replaceAll("starty",v.startPoint.y).replaceAll("controlx",v.startPoint.x+(v.endPoint.x-v.startPoint.x)/2-(v.endPoint.x-v.startPoint.x)/4).replaceAll("controly",v.startPoint.y+(v.endPoint.y-v.startPoint.y)/2).replaceAll("stopx",v.endPoint.x).replaceAll("stopy",v.endPoint.y)),v.type!=="rel_b"&&R.attr("marker-end","url("+A+"#arrowhead)"),(v.type==="birel"||v.type==="rel_b")&&R.attr("marker-start","url("+A+"#arrowend)")}let P=u.messageFont();F7(u)(v.label.text,d,Math.min(v.startPoint.x,v.endPoint.x)+Math.abs(v.endPoint.x-v.startPoint.x)/2+T,Math.min(v.startPoint.y,v.endPoint.y)+Math.abs(v.endPoint.y-v.startPoint.y)/2+_,v.label.width,v.label.height,{fill:b},P),v.techn&&v.techn.text!==""&&(P=u.messageFont(),F7(u)("["+v.techn.text+"]",d,Math.min(v.startPoint.x,v.endPoint.x)+Math.abs(v.endPoint.x-v.startPoint.x)/2+T,Math.min(v.startPoint.y,v.endPoint.y)+Math.abs(v.endPoint.y-v.startPoint.y)/2+u.messageFontSize+5+_,Math.max(v.label.width,v.techn.width),v.techn.height,{fill:b,"font-style":"italic"},P))}},sUt=function(i,s,u){const d=i.append("g");let p=s.bgColor?s.bgColor:"none",v=s.borderColor?s.borderColor:"#444444",b=s.fontColor?s.fontColor:"black",y={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};s.nodeType&&(y={"stroke-width":1});let T={x:s.x,y:s.y,fill:p,stroke:v,width:s.width,height:s.height,rx:2.5,ry:2.5,attrs:y};qbe(d,T);let _=u.boundaryFont();_.fontWeight="bold",_.fontSize=_.fontSize+2,_.fontColor=b,F7(u)(s.label.text,d,s.x,s.y+s.label.Y,s.width,s.height,{fill:"#444444"},_),s.type&&s.type.text!==""&&(_=u.boundaryFont(),_.fontColor=b,F7(u)(s.type.text,d,s.x,s.y+s.type.Y,s.width,s.height,{fill:"#444444"},_)),s.descr&&s.descr.text!==""&&(_=u.boundaryFont(),_.fontSize=_.fontSize-2,_.fontColor=b,F7(u)(s.descr.text,d,s.x,s.y+s.descr.Y,s.width,s.height,{fill:"#444444"},_))},aUt=function(i,s,u){var P;let d=s.bgColor?s.bgColor:u[s.typeC4Shape.text+"_bg_color"],p=s.borderColor?s.borderColor:u[s.typeC4Shape.text+"_border_color"],v=s.fontColor?s.fontColor:"#FFFFFF",b="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(s.typeC4Shape.text){case"person":b="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":b="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";break}const y=i.append("g");y.attr("class","person-man");const T=qC();switch(s.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":T.x=s.x,T.y=s.y,T.fill=d,T.width=s.width,T.height=s.height,T.stroke=p,T.rx=2.5,T.ry=2.5,T.attrs={"stroke-width":.5},qbe(y,T);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":y.append("path").attr("fill",d).attr("stroke-width","0.5").attr("stroke",p).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",s.x).replaceAll("starty",s.y).replaceAll("half",s.width/2).replaceAll("height",s.height)),y.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",p).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",s.x).replaceAll("starty",s.y).replaceAll("half",s.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":y.append("path").attr("fill",d).attr("stroke-width","0.5").attr("stroke",p).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",s.x).replaceAll("starty",s.y).replaceAll("width",s.width).replaceAll("half",s.height/2)),y.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",p).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",s.x+s.width).replaceAll("starty",s.y).replaceAll("half",s.height/2));break}let _=pUt(u,s.typeC4Shape.text);switch(y.append("text").attr("fill",v).attr("font-family",_.fontFamily).attr("font-size",_.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",s.typeC4Shape.width).attr("x",s.x+s.width/2-s.typeC4Shape.width/2).attr("y",s.y+s.typeC4Shape.Y).text("<<"+s.typeC4Shape.text+">>"),s.typeC4Shape.text){case"person":case"external_person":Cqe(y,48,48,s.x+s.width/2-24,s.y+s.image.Y,b);break}let A=u[s.typeC4Shape.text+"Font"]();return A.fontWeight="bold",A.fontSize=A.fontSize+2,A.fontColor=v,F7(u)(s.label.text,y,s.x,s.y+s.label.Y,s.width,s.height,{fill:v},A),A=u[s.typeC4Shape.text+"Font"](),A.fontColor=v,s.techn&&((P=s.techn)==null?void 0:P.text)!==""?F7(u)(s.techn.text,y,s.x,s.y+s.techn.Y,s.width,s.height,{fill:v,"font-style":"italic"},A):s.type&&s.type.text!==""&&F7(u)(s.type.text,y,s.x,s.y+s.type.Y,s.width,s.height,{fill:v,"font-style":"italic"},A),s.descr&&s.descr.text!==""&&(A=u.personFont(),A.fontColor=v,F7(u)(s.descr.text,y,s.x,s.y+s.descr.Y,s.width,s.height,{fill:v},A)),s.height},oUt=function(i){i.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},cUt=function(i){i.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},uUt=function(i){i.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},lUt=function(i){i.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},hUt=function(i){i.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},fUt=function(i){i.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},dUt=function(i){i.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},gUt=function(i){const u=i.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);u.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),u.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},pUt=(i,s)=>({fontFamily:i[s+"FontFamily"],fontSize:i[s+"FontSize"],fontWeight:i[s+"FontWeight"]}),F7=function(){function i(p,v,b,y,T,_,A){const P=v.append("text").attr("x",b+T/2).attr("y",y+_/2+5).style("text-anchor","middle").text(p);d(P,A)}function s(p,v,b,y,T,_,A,P){const{fontSize:R,fontFamily:F,fontWeight:j}=P,K=p.split(ci.lineBreakRegex);for(let ee=0;ee=this.data.widthLimit||d>=this.data.widthLimit||this.nextData.cnt>Sqe)&&(u=this.nextData.startx+s.margin+$s.nextLinePaddingX,p=this.nextData.stopy+s.margin*2,this.nextData.stopx=d=u+s.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=v=p+s.height,this.nextData.cnt=1),s.x=u,s.y=p,this.updateVal(this.data,"startx",u,Math.min),this.updateVal(this.data,"starty",p,Math.min),this.updateVal(this.data,"stopx",d,Math.max),this.updateVal(this.data,"stopy",v,Math.max),this.updateVal(this.nextData,"startx",u,Math.min),this.updateVal(this.nextData,"starty",p,Math.min),this.updateVal(this.nextData,"stopx",d,Math.max),this.updateVal(this.nextData,"stopy",v,Math.max)}init(s){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},Vbe(s.db.getConfig())}bumpLastMargin(s){this.data.stopx+=s,this.data.stopy+=s}}const Vbe=function(i){id($s,i),i.fontFamily&&($s.personFontFamily=$s.systemFontFamily=$s.messageFontFamily=i.fontFamily),i.fontSize&&($s.personFontSize=$s.systemFontSize=$s.messageFontSize=i.fontSize),i.fontWeight&&($s.personFontWeight=$s.systemFontWeight=$s.messageFontWeight=i.fontWeight)},bR=(i,s)=>({fontFamily:i[s+"FontFamily"],fontSize:i[s+"FontSize"],fontWeight:i[s+"FontWeight"]}),DQ=i=>({fontFamily:i.boundaryFontFamily,fontSize:i.boundaryFontSize,fontWeight:i.boundaryFontWeight}),bUt=i=>({fontFamily:i.messageFontFamily,fontSize:i.messageFontSize,fontWeight:i.messageFontWeight});function $3(i,s,u,d,p){if(!s[i].width)if(u)s[i].text=vje(s[i].text,p,d),s[i].textLines=s[i].text.split(ci.lineBreakRegex).length,s[i].width=p,s[i].height=E2e(s[i].text,d);else{let v=s[i].text.split(ci.lineBreakRegex);s[i].textLines=v.length;let b=0;s[i].height=0,s[i].width=0;for(const y of v)s[i].width=Math.max(H4(y,d),s[i].width),b=E2e(y,d),s[i].height=s[i].height+b}}const Aqe=function(i,s,u){s.x=u.data.startx,s.y=u.data.starty,s.width=u.data.stopx-u.data.startx,s.height=u.data.stopy-u.data.starty,s.label.y=$s.c4ShapeMargin-35;let d=s.wrap&&$s.wrap,p=DQ($s);p.fontSize=p.fontSize+2,p.fontWeight="bold";let v=H4(s.label.text,p);$3("label",s,d,p,v),J4.drawBoundary(i,s,$s)},Lqe=function(i,s,u,d){let p=0;for(const v of d){p=0;const b=u[v];let y=bR($s,b.typeC4Shape.text);switch(y.fontSize=y.fontSize-2,b.typeC4Shape.width=H4("«"+b.typeC4Shape.text+"»",y),b.typeC4Shape.height=y.fontSize+2,b.typeC4Shape.Y=$s.c4ShapePadding,p=b.typeC4Shape.Y+b.typeC4Shape.height-4,b.image={width:0,height:0,Y:0},b.typeC4Shape.text){case"person":case"external_person":b.image.width=48,b.image.height=48,b.image.Y=p,p=b.image.Y+b.image.height;break}b.sprite&&(b.image.width=48,b.image.height=48,b.image.Y=p,p=b.image.Y+b.image.height);let T=b.wrap&&$s.wrap,_=$s.width-$s.c4ShapePadding*2,A=bR($s,b.typeC4Shape.text);if(A.fontSize=A.fontSize+2,A.fontWeight="bold",$3("label",b,T,A,_),b.label.Y=p+8,p=b.label.Y+b.label.height,b.type&&b.type.text!==""){b.type.text="["+b.type.text+"]";let F=bR($s,b.typeC4Shape.text);$3("type",b,T,F,_),b.type.Y=p+5,p=b.type.Y+b.type.height}else if(b.techn&&b.techn.text!==""){b.techn.text="["+b.techn.text+"]";let F=bR($s,b.techn.text);$3("techn",b,T,F,_),b.techn.Y=p+5,p=b.techn.Y+b.techn.height}let P=p,R=b.label.width;if(b.descr&&b.descr.text!==""){let F=bR($s,b.typeC4Shape.text);$3("descr",b,T,F,_),b.descr.Y=p+20,p=b.descr.Y+b.descr.height,R=Math.max(b.label.width,b.descr.width),P=p-b.descr.textLines*5}R=R+$s.c4ShapePadding,b.width=Math.max(b.width||$s.width,R,$s.width),b.height=Math.max(b.height||$s.height,P,$s.height),b.margin=b.margin||$s.c4ShapeMargin,i.insert(b),J4.drawC4Shape(s,b,$s)}i.bumpLastMargin($s.c4ShapeMargin)};let jv=class{constructor(s,u){this.x=s,this.y=u}},Mqe=function(i,s){let u=i.x,d=i.y,p=s.x,v=s.y,b=u+i.width/2,y=d+i.height/2,T=Math.abs(u-p),_=Math.abs(d-v),A=_/T,P=i.height/i.width,R=null;return d==v&&up?R=new jv(u,y):u==p&&dv&&(R=new jv(b,d)),u>p&&d=A?R=new jv(u,y+A*i.width/2):R=new jv(b-T/_*i.height/2,d+i.height):u=A?R=new jv(u+i.width,y+A*i.width/2):R=new jv(b+T/_*i.height/2,d+i.height):uv?P>=A?R=new jv(u+i.width,y-A*i.width/2):R=new jv(b+i.height/2*T/_,d):u>p&&d>v&&(P>=A?R=new jv(u,y-i.width/2*A):R=new jv(b-i.height/2*T/_,d)),R},mUt=function(i,s){let u={x:0,y:0};u.x=s.x+s.width/2,u.y=s.y+s.height/2;let d=Mqe(i,u);u.x=i.x+i.width/2,u.y=i.y+i.height/2;let p=Mqe(s,u);return{startPoint:d,endPoint:p}};const vUt=function(i,s,u,d){let p=0;for(let v of s){p=p+1;let b=v.wrap&&$s.wrap,y=bUt($s);d.db.getC4Type()==="C4Dynamic"&&(v.label.text=p+": "+v.label.text);let _=H4(v.label.text,y);$3("label",v,b,y,_),v.techn&&v.techn.text!==""&&(_=H4(v.techn.text,y),$3("techn",v,b,y,_)),v.descr&&v.descr.text!==""&&(_=H4(v.descr.text,y),$3("descr",v,b,y,_));let A=u(v.from),P=u(v.to),R=mUt(A,P);v.startPoint=R.startPoint,v.endPoint=R.endPoint}J4.drawRels(i,s,$s)};function Dqe(i,s,u,d,p){let v=new _qe(p);v.data.widthLimit=u.data.widthLimit/Math.min(Hbe,d.length);for(let[b,y]of d.entries()){let T=0;y.image={width:0,height:0,Y:0},y.sprite&&(y.image.width=48,y.image.height=48,y.image.Y=T,T=y.image.Y+y.image.height);let _=y.wrap&&$s.wrap,A=DQ($s);if(A.fontSize=A.fontSize+2,A.fontWeight="bold",$3("label",y,_,A,v.data.widthLimit),y.label.Y=T+8,T=y.label.Y+y.label.height,y.type&&y.type.text!==""){y.type.text="["+y.type.text+"]";let j=DQ($s);$3("type",y,_,j,v.data.widthLimit),y.type.Y=T+5,T=y.type.Y+y.type.height}if(y.descr&&y.descr.text!==""){let j=DQ($s);j.fontSize=j.fontSize-2,$3("descr",y,_,j,v.data.widthLimit),y.descr.Y=T+20,T=y.descr.Y+y.descr.height}if(b==0||b%Hbe===0){let j=u.data.startx+$s.diagramMarginX,K=u.data.stopy+$s.diagramMarginY+T;v.setData(j,j,K,K)}else{let j=v.data.stopx!==v.data.startx?v.data.stopx+$s.diagramMarginX:v.data.startx,K=v.data.starty;v.setData(j,j,K,K)}v.name=y.alias;let P=p.db.getC4ShapeArray(y.alias),R=p.db.getC4ShapeKeys(y.alias);R.length>0&&Lqe(v,i,P,R),s=y.alias;let F=p.db.getBoundarys(s);F.length>0&&Dqe(i,s,v,F,p),y.alias!=="global"&&Aqe(i,y,v),u.data.stopy=Math.max(v.data.stopy+$s.c4ShapeMargin,u.data.stopy),u.data.stopx=Math.max(v.data.stopx+$s.c4ShapeMargin,u.data.stopx),LQ=Math.max(LQ,u.data.stopx),MQ=Math.max(MQ,u.data.stopy)}}const Iqe={drawPersonOrSystemArray:Lqe,drawBoundary:Aqe,setConf:Vbe,draw:function(i,s,u,d){$s=qt().c4;const p=qt().securityLevel;let v;p==="sandbox"&&(v=Ir("#i"+s));const b=Ir(p==="sandbox"?v.nodes()[0].contentDocument.body:"body");let y=d.db;d.db.setWrap($s.wrap),Sqe=y.getC4ShapeInRow(),Hbe=y.getC4BoundaryInRow(),Xe.debug(`C:${JSON.stringify($s,null,2)}`);const T=p==="sandbox"?b.select(`[id="${s}"]`):Ir(`[id="${s}"]`);J4.insertComputerIcon(T),J4.insertDatabaseIcon(T),J4.insertClockIcon(T);let _=new _qe(d);_.setData($s.diagramMarginX,$s.diagramMarginX,$s.diagramMarginY,$s.diagramMarginY),_.data.widthLimit=screen.availWidth,LQ=$s.diagramMarginX,MQ=$s.diagramMarginY;const A=d.db.getTitle();let P=d.db.getBoundarys("");Dqe(T,"",_,P,d),J4.insertArrowHead(T),J4.insertArrowEnd(T),J4.insertArrowCrossHead(T),J4.insertArrowFilledHead(T),vUt(T,d.db.getRels(),d.db.getC4Shape,d),_.data.stopx=LQ,_.data.stopy=MQ;const R=_.data;let j=R.stopy-R.starty+2*$s.diagramMarginY;const ee=R.stopx-R.startx+2*$s.diagramMarginX;A&&T.append("text").text(A).attr("x",(R.stopx-R.startx)/2-4*$s.diagramMarginX).attr("y",R.starty+$s.diagramMarginY),Ng(T,j,ee,$s.useMaxWidth);const ie=A?60:0;T.attr("viewBox",R.startx-$s.diagramMarginX+" -"+($s.diagramMarginY+ie)+" "+ee+" "+(j+ie)),Xe.debug("models:",R)}},wUt=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:DVt,db:$be,renderer:Iqe,styles:i=>`.person { stroke: ${i.personBorder}; fill: ${i.personBkg}; } -`,init:({c4:i,wrap:a})=>{SPt.setConf(i),Bdt.setWrap(a)}}},Symbol.toStringTag,{value:"Module"}));var qdt=function(){var i=function(af,Qi,Ts,ka){for(Ts=Ts||{},ka=af.length;ka--;Ts[af[ka]]=Qi);return Ts},a=[1,4],f=[1,3],p=[1,5],w=[1,8,9,10,11,27,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],m=[2,2],b=[1,13],E=[1,14],_=[1,15],A=[1,16],I=[1,23],B=[1,25],N=[1,26],R=[1,27],z=[1,49],W=[1,48],et=[1,29],st=[1,30],at=[1,31],bt=[1,32],mt=[1,33],yt=[1,44],ft=[1,46],ut=[1,42],vt=[1,47],X=[1,43],pt=[1,50],U=[1,45],Tt=[1,51],nt=[1,52],It=[1,34],Ot=[1,35],Bt=[1,36],Et=[1,37],Z=[1,57],Ct=[1,8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],xt=[1,61],Ht=[1,60],Le=[1,62],Ft=[8,9,11,73,75],gn=[1,88],Se=[1,93],me=[1,92],Ve=[1,89],Ye=[1,85],ce=[1,91],ke=[1,87],zt=[1,94],re=[1,90],se=[1,95],Pe=[1,86],te=[8,9,10,11,73,75],Me=[8,9,10,11,44,73,75],de=[8,9,10,11,29,42,44,46,48,50,52,54,56,58,61,63,65,66,68,73,75,86,99,102,103,106,108,111,112,113],on=[8,9,11,42,58,73,75,86,99,102,103,106,108,111,112,113],ni=[42,58,86,99,102,103,106,108,111,112,113],Ks=[1,121],ws=[1,120],fo=[1,128],Xi=[1,142],Er=[1,143],Xn=[1,144],di=[1,145],Ee=[1,130],Kn=[1,132],He=[1,136],Ti=[1,137],pn=[1,138],Es=[1,139],qa=[1,140],Ma=[1,141],Gs=[1,146],Po=[1,147],vs=[1,126],ru=[1,127],zs=[1,134],Du=[1,129],pm=[1,133],uw=[1,131],Wu=[8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],th=[1,149],Fa=[8,9,11],Ml=[8,9,10,11,14,42,58,86,102,103,106,108,111,112,113],ha=[1,169],bc=[1,165],Cc=[1,166],pa=[1,170],Da=[1,167],Ha=[1,168],Dl=[75,113,116],_c=[8,9,10,11,12,14,27,29,32,42,58,73,81,82,83,84,85,86,87,102,106,108,111,112,113],lw=[10,103],eh=[31,47,49,51,53,55,60,62,64,65,67,69,113,114,115],ed=[1,235],jd=[1,233],nd=[1,237],$d=[1,231],A0=[1,232],Bi=[1,234],cn=[1,236],kr=[1,238],Ei=[1,255],Jo=[8,9,11,103],wc=[8,9,10,11,58,81,102,103,106,107,108,109],rf={trace:function(){},yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeperator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,verticeStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,link:39,node:40,styledVertex:41,AMP:42,vertex:43,STYLE_SEPARATOR:44,idString:45,DOUBLECIRCLESTART:46,DOUBLECIRCLEEND:47,PS:48,PE:49,"(-":50,"-)":51,STADIUMSTART:52,STADIUMEND:53,SUBROUTINESTART:54,SUBROUTINEEND:55,VERTEX_WITH_PROPS_START:56,"NODE_STRING[field]":57,COLON:58,"NODE_STRING[value]":59,PIPE:60,CYLINDERSTART:61,CYLINDEREND:62,DIAMOND_START:63,DIAMOND_STOP:64,TAGEND:65,TRAPSTART:66,TRAPEND:67,INVTRAPSTART:68,INVTRAPEND:69,linkStatement:70,arrowText:71,TESTSTR:72,START_LINK:73,edgeText:74,LINK:75,edgeTextToken:76,STR:77,MD_STR:78,textToken:79,keywords:80,STYLE:81,LINKSTYLE:82,CLASSDEF:83,CLASS:84,CLICK:85,DOWN:86,UP:87,textNoTagsToken:88,stylesOpt:89,"idString[vertex]":90,"idString[class]":91,CALLBACKNAME:92,CALLBACKARGS:93,HREF:94,LINK_TARGET:95,"STR[link]":96,"STR[tooltip]":97,alphaNum:98,DEFAULT:99,numList:100,INTERPOLATE:101,NUM:102,COMMA:103,style:104,styleComponent:105,NODE_STRING:106,UNIT:107,BRKT:108,PCT:109,idStringToken:110,MINUS:111,MULT:112,UNICODE_TEXT:113,TEXT:114,TAGSTART:115,EDGE_TEXT:116,alphaNumToken:117,direction_tb:118,direction_bt:119,direction_rl:120,direction_lr:121,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",42:"AMP",44:"STYLE_SEPARATOR",46:"DOUBLECIRCLESTART",47:"DOUBLECIRCLEEND",48:"PS",49:"PE",50:"(-",51:"-)",52:"STADIUMSTART",53:"STADIUMEND",54:"SUBROUTINESTART",55:"SUBROUTINEEND",56:"VERTEX_WITH_PROPS_START",57:"NODE_STRING[field]",58:"COLON",59:"NODE_STRING[value]",60:"PIPE",61:"CYLINDERSTART",62:"CYLINDEREND",63:"DIAMOND_START",64:"DIAMOND_STOP",65:"TAGEND",66:"TRAPSTART",67:"TRAPEND",68:"INVTRAPSTART",69:"INVTRAPEND",72:"TESTSTR",73:"START_LINK",75:"LINK",77:"STR",78:"MD_STR",81:"STYLE",82:"LINKSTYLE",83:"CLASSDEF",84:"CLASS",85:"CLICK",86:"DOWN",87:"UP",90:"idString[vertex]",91:"idString[class]",92:"CALLBACKNAME",93:"CALLBACKARGS",94:"HREF",95:"LINK_TARGET",96:"STR[link]",97:"STR[tooltip]",99:"DEFAULT",101:"INTERPOLATE",102:"NUM",103:"COMMA",106:"NODE_STRING",107:"UNIT",108:"BRKT",109:"PCT",111:"MINUS",112:"MULT",113:"UNICODE_TEXT",114:"TEXT",115:"TAGSTART",116:"EDGE_TEXT",118:"direction_tb",119:"direction_bt",120:"direction_rl",121:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[20,3],[20,4],[20,2],[20,1],[40,1],[40,5],[41,1],[41,3],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,8],[43,4],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,4],[43,4],[43,1],[39,2],[39,3],[39,3],[39,1],[39,3],[74,1],[74,2],[74,1],[74,1],[70,1],[71,3],[30,1],[30,2],[30,1],[30,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[100,1],[100,3],[89,1],[89,3],[104,1],[104,2],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[79,1],[79,1],[79,1],[79,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[76,1],[76,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[45,1],[45,2],[98,1],[98,2],[33,1],[33,1],[33,1],[33,1]],performAction:function(Qi,Ts,ka,xi,Yc,Ce,vp){var Be=Ce.length-1;switch(Yc){case 2:this.$=[];break;case 3:(!Array.isArray(Ce[Be])||Ce[Be].length>0)&&Ce[Be-1].push(Ce[Be]),this.$=Ce[Be-1];break;case 4:case 176:this.$=Ce[Be];break;case 11:xi.setDirection("TB"),this.$="TB";break;case 12:xi.setDirection(Ce[Be-1]),this.$=Ce[Be-1];break;case 27:this.$=Ce[Be-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=xi.addSubGraph(Ce[Be-6],Ce[Be-1],Ce[Be-4]);break;case 34:this.$=xi.addSubGraph(Ce[Be-3],Ce[Be-1],Ce[Be-3]);break;case 35:this.$=xi.addSubGraph(void 0,Ce[Be-1],void 0);break;case 37:this.$=Ce[Be].trim(),xi.setAccTitle(this.$);break;case 38:case 39:this.$=Ce[Be].trim(),xi.setAccDescription(this.$);break;case 43:xi.addLink(Ce[Be-2].stmt,Ce[Be],Ce[Be-1]),this.$={stmt:Ce[Be],nodes:Ce[Be].concat(Ce[Be-2].nodes)};break;case 44:xi.addLink(Ce[Be-3].stmt,Ce[Be-1],Ce[Be-2]),this.$={stmt:Ce[Be-1],nodes:Ce[Be-1].concat(Ce[Be-3].nodes)};break;case 45:this.$={stmt:Ce[Be-1],nodes:Ce[Be-1]};break;case 46:this.$={stmt:Ce[Be],nodes:Ce[Be]};break;case 47:this.$=[Ce[Be]];break;case 48:this.$=Ce[Be-4].concat(Ce[Be]);break;case 49:this.$=Ce[Be];break;case 50:this.$=Ce[Be-2],xi.setClass(Ce[Be-2],Ce[Be]);break;case 51:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"square");break;case 52:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"doublecircle");break;case 53:this.$=Ce[Be-5],xi.addVertex(Ce[Be-5],Ce[Be-2],"circle");break;case 54:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"ellipse");break;case 55:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"stadium");break;case 56:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"subroutine");break;case 57:this.$=Ce[Be-7],xi.addVertex(Ce[Be-7],Ce[Be-1],"rect",void 0,void 0,void 0,Object.fromEntries([[Ce[Be-5],Ce[Be-3]]]));break;case 58:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"cylinder");break;case 59:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"round");break;case 60:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"diamond");break;case 61:this.$=Ce[Be-5],xi.addVertex(Ce[Be-5],Ce[Be-2],"hexagon");break;case 62:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"odd");break;case 63:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"trapezoid");break;case 64:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"inv_trapezoid");break;case 65:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"lean_right");break;case 66:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"lean_left");break;case 67:this.$=Ce[Be],xi.addVertex(Ce[Be]);break;case 68:Ce[Be-1].text=Ce[Be],this.$=Ce[Be-1];break;case 69:case 70:Ce[Be-2].text=Ce[Be-1],this.$=Ce[Be-2];break;case 71:this.$=Ce[Be];break;case 72:var Bf=xi.destructLink(Ce[Be],Ce[Be-2]);this.$={type:Bf.type,stroke:Bf.stroke,length:Bf.length,text:Ce[Be-1]};break;case 73:this.$={text:Ce[Be],type:"text"};break;case 74:this.$={text:Ce[Be-1].text+""+Ce[Be],type:Ce[Be-1].type};break;case 75:this.$={text:Ce[Be],type:"string"};break;case 76:this.$={text:Ce[Be],type:"markdown"};break;case 77:var Bf=xi.destructLink(Ce[Be]);this.$={type:Bf.type,stroke:Bf.stroke,length:Bf.length};break;case 78:this.$=Ce[Be-1];break;case 79:this.$={text:Ce[Be],type:"text"};break;case 80:this.$={text:Ce[Be-1].text+""+Ce[Be],type:Ce[Be-1].type};break;case 81:this.$={text:Ce[Be],type:"string"};break;case 82:case 97:this.$={text:Ce[Be],type:"markdown"};break;case 94:this.$={text:Ce[Be],type:"text"};break;case 95:this.$={text:Ce[Be-1].text+""+Ce[Be],type:Ce[Be-1].type};break;case 96:this.$={text:Ce[Be],type:"text"};break;case 98:this.$=Ce[Be-4],xi.addClass(Ce[Be-2],Ce[Be]);break;case 99:this.$=Ce[Be-4],xi.setClass(Ce[Be-2],Ce[Be]);break;case 100:case 108:this.$=Ce[Be-1],xi.setClickEvent(Ce[Be-1],Ce[Be]);break;case 101:case 109:this.$=Ce[Be-3],xi.setClickEvent(Ce[Be-3],Ce[Be-2]),xi.setTooltip(Ce[Be-3],Ce[Be]);break;case 102:this.$=Ce[Be-2],xi.setClickEvent(Ce[Be-2],Ce[Be-1],Ce[Be]);break;case 103:this.$=Ce[Be-4],xi.setClickEvent(Ce[Be-4],Ce[Be-3],Ce[Be-2]),xi.setTooltip(Ce[Be-4],Ce[Be]);break;case 104:this.$=Ce[Be-2],xi.setLink(Ce[Be-2],Ce[Be]);break;case 105:this.$=Ce[Be-4],xi.setLink(Ce[Be-4],Ce[Be-2]),xi.setTooltip(Ce[Be-4],Ce[Be]);break;case 106:this.$=Ce[Be-4],xi.setLink(Ce[Be-4],Ce[Be-2],Ce[Be]);break;case 107:this.$=Ce[Be-6],xi.setLink(Ce[Be-6],Ce[Be-4],Ce[Be]),xi.setTooltip(Ce[Be-6],Ce[Be-2]);break;case 110:this.$=Ce[Be-1],xi.setLink(Ce[Be-1],Ce[Be]);break;case 111:this.$=Ce[Be-3],xi.setLink(Ce[Be-3],Ce[Be-2]),xi.setTooltip(Ce[Be-3],Ce[Be]);break;case 112:this.$=Ce[Be-3],xi.setLink(Ce[Be-3],Ce[Be-2],Ce[Be]);break;case 113:this.$=Ce[Be-5],xi.setLink(Ce[Be-5],Ce[Be-4],Ce[Be]),xi.setTooltip(Ce[Be-5],Ce[Be-2]);break;case 114:this.$=Ce[Be-4],xi.addVertex(Ce[Be-2],void 0,void 0,Ce[Be]);break;case 115:this.$=Ce[Be-4],xi.updateLink([Ce[Be-2]],Ce[Be]);break;case 116:this.$=Ce[Be-4],xi.updateLink(Ce[Be-2],Ce[Be]);break;case 117:this.$=Ce[Be-8],xi.updateLinkInterpolate([Ce[Be-6]],Ce[Be-2]),xi.updateLink([Ce[Be-6]],Ce[Be]);break;case 118:this.$=Ce[Be-8],xi.updateLinkInterpolate(Ce[Be-6],Ce[Be-2]),xi.updateLink(Ce[Be-6],Ce[Be]);break;case 119:this.$=Ce[Be-6],xi.updateLinkInterpolate([Ce[Be-4]],Ce[Be]);break;case 120:this.$=Ce[Be-6],xi.updateLinkInterpolate(Ce[Be-4],Ce[Be]);break;case 121:case 123:this.$=[Ce[Be]];break;case 122:case 124:Ce[Be-2].push(Ce[Be]),this.$=Ce[Be-2];break;case 126:this.$=Ce[Be-1]+Ce[Be];break;case 174:this.$=Ce[Be];break;case 175:this.$=Ce[Be-1]+""+Ce[Be];break;case 177:this.$=Ce[Be-1]+""+Ce[Be];break;case 178:this.$={stmt:"dir",value:"TB"};break;case 179:this.$={stmt:"dir",value:"BT"};break;case 180:this.$={stmt:"dir",value:"RL"};break;case 181:this.$={stmt:"dir",value:"LR"};break}},table:[{3:1,4:2,9:a,10:f,12:p},{1:[3]},i(w,m,{5:6}),{4:7,9:a,10:f,12:p},{4:8,9:a,10:f,12:p},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:b,9:E,10:_,11:A,20:17,22:18,23:19,24:20,25:21,26:22,27:I,33:24,34:B,36:N,38:R,40:28,41:38,42:z,43:39,45:40,58:W,81:et,82:st,83:at,84:bt,85:mt,86:yt,99:ft,102:ut,103:vt,106:X,108:pt,110:41,111:U,112:Tt,113:nt,118:It,119:Ot,120:Bt,121:Et},i(w,[2,9]),i(w,[2,10]),i(w,[2,11]),{8:[1,54],9:[1,55],10:Z,15:53,18:56},i(Ct,[2,3]),i(Ct,[2,4]),i(Ct,[2,5]),i(Ct,[2,6]),i(Ct,[2,7]),i(Ct,[2,8]),{8:xt,9:Ht,11:Le,21:58,39:59,70:63,73:[1,64],75:[1,65]},{8:xt,9:Ht,11:Le,21:66},{8:xt,9:Ht,11:Le,21:67},{8:xt,9:Ht,11:Le,21:68},{8:xt,9:Ht,11:Le,21:69},{8:xt,9:Ht,11:Le,21:70},{8:xt,9:Ht,10:[1,71],11:Le,21:72},i(Ct,[2,36]),{35:[1,73]},{37:[1,74]},i(Ct,[2,39]),i(Ft,[2,46],{18:75,10:Z}),{10:[1,76]},{10:[1,77]},{10:[1,78]},{10:[1,79]},{14:gn,42:Se,58:me,77:[1,83],86:Ve,92:[1,80],94:[1,81],98:82,102:Ye,103:ce,106:ke,108:zt,111:re,112:se,113:Pe,117:84},i(Ct,[2,178]),i(Ct,[2,179]),i(Ct,[2,180]),i(Ct,[2,181]),i(te,[2,47]),i(te,[2,49],{44:[1,96]}),i(Me,[2,67],{110:109,29:[1,97],42:z,46:[1,98],48:[1,99],50:[1,100],52:[1,101],54:[1,102],56:[1,103],58:W,61:[1,104],63:[1,105],65:[1,106],66:[1,107],68:[1,108],86:yt,99:ft,102:ut,103:vt,106:X,108:pt,111:U,112:Tt,113:nt}),i(de,[2,174]),i(de,[2,135]),i(de,[2,136]),i(de,[2,137]),i(de,[2,138]),i(de,[2,139]),i(de,[2,140]),i(de,[2,141]),i(de,[2,142]),i(de,[2,143]),i(de,[2,144]),i(de,[2,145]),i(w,[2,12]),i(w,[2,18]),i(w,[2,19]),{9:[1,110]},i(on,[2,26],{18:111,10:Z}),i(Ct,[2,27]),{40:112,41:38,42:z,43:39,45:40,58:W,86:yt,99:ft,102:ut,103:vt,106:X,108:pt,110:41,111:U,112:Tt,113:nt},i(Ct,[2,40]),i(Ct,[2,41]),i(Ct,[2,42]),i(ni,[2,71],{71:113,60:[1,115],72:[1,114]}),{74:116,76:117,77:[1,118],78:[1,119],113:Ks,116:ws},i([42,58,60,72,86,99,102,103,106,108,111,112,113],[2,77]),i(Ct,[2,28]),i(Ct,[2,29]),i(Ct,[2,30]),i(Ct,[2,31]),i(Ct,[2,32]),{10:fo,12:Xi,14:Er,27:Xn,28:122,32:di,42:Ee,58:Kn,73:He,77:[1,124],78:[1,125],80:135,81:Ti,82:pn,83:Es,84:qa,85:Ma,86:Gs,87:Po,88:123,102:vs,106:ru,108:zs,111:Du,112:pm,113:uw},i(Wu,m,{5:148}),i(Ct,[2,37]),i(Ct,[2,38]),i(Ft,[2,45],{42:th}),{42:z,45:150,58:W,86:yt,99:ft,102:ut,103:vt,106:X,108:pt,110:41,111:U,112:Tt,113:nt},{99:[1,151],100:152,102:[1,153]},{42:z,45:154,58:W,86:yt,99:ft,102:ut,103:vt,106:X,108:pt,110:41,111:U,112:Tt,113:nt},{42:z,45:155,58:W,86:yt,99:ft,102:ut,103:vt,106:X,108:pt,110:41,111:U,112:Tt,113:nt},i(Fa,[2,100],{10:[1,156],93:[1,157]}),{77:[1,158]},i(Fa,[2,108],{117:160,10:[1,159],14:gn,42:Se,58:me,86:Ve,102:Ye,103:ce,106:ke,108:zt,111:re,112:se,113:Pe}),i(Fa,[2,110],{10:[1,161]}),i(Ml,[2,176]),i(Ml,[2,163]),i(Ml,[2,164]),i(Ml,[2,165]),i(Ml,[2,166]),i(Ml,[2,167]),i(Ml,[2,168]),i(Ml,[2,169]),i(Ml,[2,170]),i(Ml,[2,171]),i(Ml,[2,172]),i(Ml,[2,173]),{42:z,45:162,58:W,86:yt,99:ft,102:ut,103:vt,106:X,108:pt,110:41,111:U,112:Tt,113:nt},{30:163,65:ha,77:bc,78:Cc,79:164,113:pa,114:Da,115:Ha},{30:171,65:ha,77:bc,78:Cc,79:164,113:pa,114:Da,115:Ha},{30:173,48:[1,172],65:ha,77:bc,78:Cc,79:164,113:pa,114:Da,115:Ha},{30:174,65:ha,77:bc,78:Cc,79:164,113:pa,114:Da,115:Ha},{30:175,65:ha,77:bc,78:Cc,79:164,113:pa,114:Da,115:Ha},{30:176,65:ha,77:bc,78:Cc,79:164,113:pa,114:Da,115:Ha},{106:[1,177]},{30:178,65:ha,77:bc,78:Cc,79:164,113:pa,114:Da,115:Ha},{30:179,63:[1,180],65:ha,77:bc,78:Cc,79:164,113:pa,114:Da,115:Ha},{30:181,65:ha,77:bc,78:Cc,79:164,113:pa,114:Da,115:Ha},{30:182,65:ha,77:bc,78:Cc,79:164,113:pa,114:Da,115:Ha},{30:183,65:ha,77:bc,78:Cc,79:164,113:pa,114:Da,115:Ha},i(de,[2,175]),i(w,[2,20]),i(on,[2,25]),i(Ft,[2,43],{18:184,10:Z}),i(ni,[2,68],{10:[1,185]}),{10:[1,186]},{30:187,65:ha,77:bc,78:Cc,79:164,113:pa,114:Da,115:Ha},{75:[1,188],76:189,113:Ks,116:ws},i(Dl,[2,73]),i(Dl,[2,75]),i(Dl,[2,76]),i(Dl,[2,161]),i(Dl,[2,162]),{8:xt,9:Ht,10:fo,11:Le,12:Xi,14:Er,21:191,27:Xn,29:[1,190],32:di,42:Ee,58:Kn,73:He,80:135,81:Ti,82:pn,83:Es,84:qa,85:Ma,86:Gs,87:Po,88:192,102:vs,106:ru,108:zs,111:Du,112:pm,113:uw},i(_c,[2,94]),i(_c,[2,96]),i(_c,[2,97]),i(_c,[2,150]),i(_c,[2,151]),i(_c,[2,152]),i(_c,[2,153]),i(_c,[2,154]),i(_c,[2,155]),i(_c,[2,156]),i(_c,[2,157]),i(_c,[2,158]),i(_c,[2,159]),i(_c,[2,160]),i(_c,[2,83]),i(_c,[2,84]),i(_c,[2,85]),i(_c,[2,86]),i(_c,[2,87]),i(_c,[2,88]),i(_c,[2,89]),i(_c,[2,90]),i(_c,[2,91]),i(_c,[2,92]),i(_c,[2,93]),{6:11,7:12,8:b,9:E,10:_,11:A,20:17,22:18,23:19,24:20,25:21,26:22,27:I,32:[1,193],33:24,34:B,36:N,38:R,40:28,41:38,42:z,43:39,45:40,58:W,81:et,82:st,83:at,84:bt,85:mt,86:yt,99:ft,102:ut,103:vt,106:X,108:pt,110:41,111:U,112:Tt,113:nt,118:It,119:Ot,120:Bt,121:Et},{10:Z,18:194},{10:[1,195],42:z,58:W,86:yt,99:ft,102:ut,103:vt,106:X,108:pt,110:109,111:U,112:Tt,113:nt},{10:[1,196]},{10:[1,197],103:[1,198]},i(lw,[2,121]),{10:[1,199],42:z,58:W,86:yt,99:ft,102:ut,103:vt,106:X,108:pt,110:109,111:U,112:Tt,113:nt},{10:[1,200],42:z,58:W,86:yt,99:ft,102:ut,103:vt,106:X,108:pt,110:109,111:U,112:Tt,113:nt},{77:[1,201]},i(Fa,[2,102],{10:[1,202]}),i(Fa,[2,104],{10:[1,203]}),{77:[1,204]},i(Ml,[2,177]),{77:[1,205],95:[1,206]},i(te,[2,50],{110:109,42:z,58:W,86:yt,99:ft,102:ut,103:vt,106:X,108:pt,111:U,112:Tt,113:nt}),{31:[1,207],65:ha,79:208,113:pa,114:Da,115:Ha},i(eh,[2,79]),i(eh,[2,81]),i(eh,[2,82]),i(eh,[2,146]),i(eh,[2,147]),i(eh,[2,148]),i(eh,[2,149]),{47:[1,209],65:ha,79:208,113:pa,114:Da,115:Ha},{30:210,65:ha,77:bc,78:Cc,79:164,113:pa,114:Da,115:Ha},{49:[1,211],65:ha,79:208,113:pa,114:Da,115:Ha},{51:[1,212],65:ha,79:208,113:pa,114:Da,115:Ha},{53:[1,213],65:ha,79:208,113:pa,114:Da,115:Ha},{55:[1,214],65:ha,79:208,113:pa,114:Da,115:Ha},{58:[1,215]},{62:[1,216],65:ha,79:208,113:pa,114:Da,115:Ha},{64:[1,217],65:ha,79:208,113:pa,114:Da,115:Ha},{30:218,65:ha,77:bc,78:Cc,79:164,113:pa,114:Da,115:Ha},{31:[1,219],65:ha,79:208,113:pa,114:Da,115:Ha},{65:ha,67:[1,220],69:[1,221],79:208,113:pa,114:Da,115:Ha},{65:ha,67:[1,223],69:[1,222],79:208,113:pa,114:Da,115:Ha},i(Ft,[2,44],{42:th}),i(ni,[2,70]),i(ni,[2,69]),{60:[1,224],65:ha,79:208,113:pa,114:Da,115:Ha},i(ni,[2,72]),i(Dl,[2,74]),{30:225,65:ha,77:bc,78:Cc,79:164,113:pa,114:Da,115:Ha},i(Wu,m,{5:226}),i(_c,[2,95]),i(Ct,[2,35]),{41:227,42:z,43:39,45:40,58:W,86:yt,99:ft,102:ut,103:vt,106:X,108:pt,110:41,111:U,112:Tt,113:nt},{10:ed,58:jd,81:nd,89:228,102:$d,104:229,105:230,106:A0,107:Bi,108:cn,109:kr},{10:ed,58:jd,81:nd,89:239,101:[1,240],102:$d,104:229,105:230,106:A0,107:Bi,108:cn,109:kr},{10:ed,58:jd,81:nd,89:241,101:[1,242],102:$d,104:229,105:230,106:A0,107:Bi,108:cn,109:kr},{102:[1,243]},{10:ed,58:jd,81:nd,89:244,102:$d,104:229,105:230,106:A0,107:Bi,108:cn,109:kr},{42:z,45:245,58:W,86:yt,99:ft,102:ut,103:vt,106:X,108:pt,110:41,111:U,112:Tt,113:nt},i(Fa,[2,101]),{77:[1,246]},{77:[1,247],95:[1,248]},i(Fa,[2,109]),i(Fa,[2,111],{10:[1,249]}),i(Fa,[2,112]),i(Me,[2,51]),i(eh,[2,80]),i(Me,[2,52]),{49:[1,250],65:ha,79:208,113:pa,114:Da,115:Ha},i(Me,[2,59]),i(Me,[2,54]),i(Me,[2,55]),i(Me,[2,56]),{106:[1,251]},i(Me,[2,58]),i(Me,[2,60]),{64:[1,252],65:ha,79:208,113:pa,114:Da,115:Ha},i(Me,[2,62]),i(Me,[2,63]),i(Me,[2,65]),i(Me,[2,64]),i(Me,[2,66]),i([10,42,58,86,99,102,103,106,108,111,112,113],[2,78]),{31:[1,253],65:ha,79:208,113:pa,114:Da,115:Ha},{6:11,7:12,8:b,9:E,10:_,11:A,20:17,22:18,23:19,24:20,25:21,26:22,27:I,32:[1,254],33:24,34:B,36:N,38:R,40:28,41:38,42:z,43:39,45:40,58:W,81:et,82:st,83:at,84:bt,85:mt,86:yt,99:ft,102:ut,103:vt,106:X,108:pt,110:41,111:U,112:Tt,113:nt,118:It,119:Ot,120:Bt,121:Et},i(te,[2,48]),i(Fa,[2,114],{103:Ei}),i(Jo,[2,123],{105:256,10:ed,58:jd,81:nd,102:$d,106:A0,107:Bi,108:cn,109:kr}),i(wc,[2,125]),i(wc,[2,127]),i(wc,[2,128]),i(wc,[2,129]),i(wc,[2,130]),i(wc,[2,131]),i(wc,[2,132]),i(wc,[2,133]),i(wc,[2,134]),i(Fa,[2,115],{103:Ei}),{10:[1,257]},i(Fa,[2,116],{103:Ei}),{10:[1,258]},i(lw,[2,122]),i(Fa,[2,98],{103:Ei}),i(Fa,[2,99],{110:109,42:z,58:W,86:yt,99:ft,102:ut,103:vt,106:X,108:pt,111:U,112:Tt,113:nt}),i(Fa,[2,103]),i(Fa,[2,105],{10:[1,259]}),i(Fa,[2,106]),{95:[1,260]},{49:[1,261]},{60:[1,262]},{64:[1,263]},{8:xt,9:Ht,11:Le,21:264},i(Ct,[2,34]),{10:ed,58:jd,81:nd,102:$d,104:265,105:230,106:A0,107:Bi,108:cn,109:kr},i(wc,[2,126]),{14:gn,42:Se,58:me,86:Ve,98:266,102:Ye,103:ce,106:ke,108:zt,111:re,112:se,113:Pe,117:84},{14:gn,42:Se,58:me,86:Ve,98:267,102:Ye,103:ce,106:ke,108:zt,111:re,112:se,113:Pe,117:84},{95:[1,268]},i(Fa,[2,113]),i(Me,[2,53]),{30:269,65:ha,77:bc,78:Cc,79:164,113:pa,114:Da,115:Ha},i(Me,[2,61]),i(Wu,m,{5:270}),i(Jo,[2,124],{105:256,10:ed,58:jd,81:nd,102:$d,106:A0,107:Bi,108:cn,109:kr}),i(Fa,[2,119],{117:160,10:[1,271],14:gn,42:Se,58:me,86:Ve,102:Ye,103:ce,106:ke,108:zt,111:re,112:se,113:Pe}),i(Fa,[2,120],{117:160,10:[1,272],14:gn,42:Se,58:me,86:Ve,102:Ye,103:ce,106:ke,108:zt,111:re,112:se,113:Pe}),i(Fa,[2,107]),{31:[1,273],65:ha,79:208,113:pa,114:Da,115:Ha},{6:11,7:12,8:b,9:E,10:_,11:A,20:17,22:18,23:19,24:20,25:21,26:22,27:I,32:[1,274],33:24,34:B,36:N,38:R,40:28,41:38,42:z,43:39,45:40,58:W,81:et,82:st,83:at,84:bt,85:mt,86:yt,99:ft,102:ut,103:vt,106:X,108:pt,110:41,111:U,112:Tt,113:nt,118:It,119:Ot,120:Bt,121:Et},{10:ed,58:jd,81:nd,89:275,102:$d,104:229,105:230,106:A0,107:Bi,108:cn,109:kr},{10:ed,58:jd,81:nd,89:276,102:$d,104:229,105:230,106:A0,107:Bi,108:cn,109:kr},i(Me,[2,57]),i(Ct,[2,33]),i(Fa,[2,117],{103:Ei}),i(Fa,[2,118],{103:Ei})],defaultActions:{},parseError:function(Qi,Ts){if(Ts.recoverable)this.trace(Qi);else{var ka=new Error(Qi);throw ka.hash=Ts,ka}},parse:function(Qi){var Ts=this,ka=[0],xi=[],Yc=[null],Ce=[],vp=this.table,Be="",Bf=0,yg=0,bm=2,Ek=1,E3=Ce.slice.call(arguments,1),Il=Object.create(this.lexer),L0={yy:{}};for(var hw in this.yy)Object.prototype.hasOwnProperty.call(this.yy,hw)&&(L0.yy[hw]=this.yy[hw]);Il.setInput(Qi,L0.yy),L0.yy.lexer=Il,L0.yy.parser=this,typeof Il.yylloc>"u"&&(Il.yylloc={});var H5=Il.yylloc;Ce.push(H5);var Hb=Il.options&&Il.options.ranges;typeof L0.yy.parseError=="function"?this.parseError=L0.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function V5(){var xg;return xg=xi.pop()||Il.lex()||Ek,typeof xg!="number"&&(xg instanceof Array&&(xi=xg,xg=xi.pop()),xg=Ts.symbols_[xg]||xg),xg}for(var f1,rd,id,G5,fw={},U5,mp,W5,T3;;){if(rd=ka[ka.length-1],this.defaultActions[rd]?id=this.defaultActions[rd]:((f1===null||typeof f1>"u")&&(f1=V5()),id=vp[rd]&&vp[rd][f1]),typeof id>"u"||!id.length||!id[0]){var wm="";T3=[];for(U5 in vp[rd])this.terminals_[U5]&&U5>bm&&T3.push("'"+this.terminals_[U5]+"'");Il.showPosition?wm="Parse error on line "+(Bf+1)+`: -`+Il.showPosition()+` -Expecting `+T3.join(", ")+", got '"+(this.terminals_[f1]||f1)+"'":wm="Parse error on line "+(Bf+1)+": Unexpected "+(f1==Ek?"end of input":"'"+(this.terminals_[f1]||f1)+"'"),this.parseError(wm,{text:Il.match,token:this.terminals_[f1]||f1,line:Il.yylineno,loc:H5,expected:T3})}if(id[0]instanceof Array&&id.length>1)throw new Error("Parse Error: multiple actions possible at state: "+rd+", token: "+f1);switch(id[0]){case 1:ka.push(f1),Yc.push(Il.yytext),Ce.push(Il.yylloc),ka.push(id[1]),f1=null,yg=Il.yyleng,Be=Il.yytext,Bf=Il.yylineno,H5=Il.yylloc;break;case 2:if(mp=this.productions_[id[1]][1],fw.$=Yc[Yc.length-mp],fw._$={first_line:Ce[Ce.length-(mp||1)].first_line,last_line:Ce[Ce.length-1].last_line,first_column:Ce[Ce.length-(mp||1)].first_column,last_column:Ce[Ce.length-1].last_column},Hb&&(fw._$.range=[Ce[Ce.length-(mp||1)].range[0],Ce[Ce.length-1].range[1]]),G5=this.performAction.apply(fw,[Be,yg,Bf,L0.yy,id[1],Yc,Ce].concat(E3)),typeof G5<"u")return G5;mp&&(ka=ka.slice(0,-1*mp*2),Yc=Yc.slice(0,-1*mp),Ce=Ce.slice(0,-1*mp)),ka.push(this.productions_[id[1]][0]),Yc.push(fw.$),Ce.push(fw._$),W5=vp[ka[ka.length-2]][ka[ka.length-1]],ka.push(W5);break;case 3:return!0}}return!0}},Oc=function(){var af={EOF:1,parseError:function(Ts,ka){if(this.yy.parser)this.yy.parser.parseError(Ts,ka);else throw new Error(Ts)},setInput:function(Qi,Ts){return this.yy=Ts||this.yy||{},this._input=Qi,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Qi=this._input[0];this.yytext+=Qi,this.yyleng++,this.offset++,this.match+=Qi,this.matched+=Qi;var Ts=Qi.match(/(?:\r\n?|\n).*/g);return Ts?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Qi},unput:function(Qi){var Ts=Qi.length,ka=Qi.split(/(?:\r\n?|\n)/g);this._input=Qi+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ts),this.offset-=Ts;var xi=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ka.length-1&&(this.yylineno-=ka.length-1);var Yc=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ka?(ka.length===xi.length?this.yylloc.first_column:0)+xi[xi.length-ka.length].length-ka[0].length:this.yylloc.first_column-Ts},this.options.ranges&&(this.yylloc.range=[Yc[0],Yc[0]+this.yyleng-Ts]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Qi){this.unput(this.match.slice(Qi))},pastInput:function(){var Qi=this.matched.substr(0,this.matched.length-this.match.length);return(Qi.length>20?"...":"")+Qi.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Qi=this.match;return Qi.length<20&&(Qi+=this._input.substr(0,20-Qi.length)),(Qi.substr(0,20)+(Qi.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Qi=this.pastInput(),Ts=new Array(Qi.length+1).join("-");return Qi+this.upcomingInput()+` -`+Ts+"^"},test_match:function(Qi,Ts){var ka,xi,Yc;if(this.options.backtrack_lexer&&(Yc={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Yc.yylloc.range=this.yylloc.range.slice(0))),xi=Qi[0].match(/(?:\r\n?|\n).*/g),xi&&(this.yylineno+=xi.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:xi?xi[xi.length-1].length-xi[xi.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Qi[0].length},this.yytext+=Qi[0],this.match+=Qi[0],this.matches=Qi,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Qi[0].length),this.matched+=Qi[0],ka=this.performAction.call(this,this.yy,this,Ts,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ka)return ka;if(this._backtrack){for(var Ce in Yc)this[Ce]=Yc[Ce];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Qi,Ts,ka,xi;this._more||(this.yytext="",this.match="");for(var Yc=this._currentRules(),Ce=0;CeTs[0].length)){if(Ts=ka,xi=Ce,this.options.backtrack_lexer){if(Qi=this.test_match(ka,Yc[Ce]),Qi!==!1)return Qi;if(this._backtrack){Ts=!1;continue}else return!1}else if(!this.options.flex)break}return Ts?(Qi=this.test_match(Ts,Yc[xi]),Qi!==!1?Qi:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Ts=this.next();return Ts||this.lex()},begin:function(Ts){this.conditionStack.push(Ts)},popState:function(){var Ts=this.conditionStack.length-1;return Ts>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Ts){return Ts=this.conditionStack.length-1-Math.abs(Ts||0),Ts>=0?this.conditionStack[Ts]:"INITIAL"},pushState:function(Ts){this.begin(Ts)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(Ts,ka,xi,Yc){switch(xi){case 0:return this.begin("acc_title"),34;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),36;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:this.begin("callbackname");break;case 8:this.popState();break;case 9:this.popState(),this.begin("callbackargs");break;case 10:return 92;case 11:this.popState();break;case 12:return 93;case 13:return"MD_STR";case 14:this.popState();break;case 15:this.begin("md_string");break;case 16:return"STR";case 17:this.popState();break;case 18:this.pushState("string");break;case 19:return 81;case 20:return 99;case 21:return 82;case 22:return 101;case 23:return 83;case 24:return 84;case 25:return 94;case 26:this.begin("click");break;case 27:this.popState();break;case 28:return 85;case 29:return Ts.lex.firstGraph()&&this.begin("dir"),12;case 30:return Ts.lex.firstGraph()&&this.begin("dir"),12;case 31:return Ts.lex.firstGraph()&&this.begin("dir"),12;case 32:return 27;case 33:return 32;case 34:return 95;case 35:return 95;case 36:return 95;case 37:return 95;case 38:return this.popState(),13;case 39:return this.popState(),14;case 40:return this.popState(),14;case 41:return this.popState(),14;case 42:return this.popState(),14;case 43:return this.popState(),14;case 44:return this.popState(),14;case 45:return this.popState(),14;case 46:return this.popState(),14;case 47:return this.popState(),14;case 48:return this.popState(),14;case 49:return 118;case 50:return 119;case 51:return 120;case 52:return 121;case 53:return 102;case 54:return 108;case 55:return 44;case 56:return 58;case 57:return 42;case 58:return 8;case 59:return 103;case 60:return 112;case 61:return this.popState(),75;case 62:return this.pushState("edgeText"),73;case 63:return 116;case 64:return this.popState(),75;case 65:return this.pushState("thickEdgeText"),73;case 66:return 116;case 67:return this.popState(),75;case 68:return this.pushState("dottedEdgeText"),73;case 69:return 116;case 70:return 75;case 71:return this.popState(),51;case 72:return"TEXT";case 73:return this.pushState("ellipseText"),50;case 74:return this.popState(),53;case 75:return this.pushState("text"),52;case 76:return this.popState(),55;case 77:return this.pushState("text"),54;case 78:return 56;case 79:return this.pushState("text"),65;case 80:return this.popState(),62;case 81:return this.pushState("text"),61;case 82:return this.popState(),47;case 83:return this.pushState("text"),46;case 84:return this.popState(),67;case 85:return this.popState(),69;case 86:return 114;case 87:return this.pushState("trapText"),66;case 88:return this.pushState("trapText"),68;case 89:return 115;case 90:return 65;case 91:return 87;case 92:return"SEP";case 93:return 86;case 94:return 112;case 95:return 108;case 96:return 42;case 97:return 106;case 98:return 111;case 99:return 113;case 100:return this.popState(),60;case 101:return this.pushState("text"),60;case 102:return this.popState(),49;case 103:return this.pushState("text"),48;case 104:return this.popState(),31;case 105:return this.pushState("text"),29;case 106:return this.popState(),64;case 107:return this.pushState("text"),63;case 108:return"TEXT";case 109:return"QUOTE";case 110:return 9;case 111:return 10;case 112:return 11}},rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{callbackargs:{rules:[11,12,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},callbackname:{rules:[8,9,10,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},href:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},click:{rules:[15,18,27,28,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dottedEdgeText:{rules:[15,18,67,69,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},thickEdgeText:{rules:[15,18,64,66,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},edgeText:{rules:[15,18,61,63,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},trapText:{rules:[15,18,70,73,75,77,81,83,84,85,86,87,88,101,103,105,107],inclusive:!1},ellipseText:{rules:[15,18,70,71,72,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},text:{rules:[15,18,70,73,74,75,76,77,80,81,82,83,87,88,100,101,102,103,104,105,106,107,108],inclusive:!1},vertex:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dir:{rules:[15,18,38,39,40,41,42,43,44,45,46,47,48,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr_multiline:{rules:[5,6,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr:{rules:[3,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_title:{rules:[1,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},md_string:{rules:[13,14,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},string:{rules:[15,16,17,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},INITIAL:{rules:[0,2,4,7,15,18,19,20,21,22,23,24,25,26,29,30,31,32,33,34,35,36,37,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,67,68,70,73,75,77,78,79,81,83,87,88,89,90,91,92,93,94,95,96,97,98,99,101,103,105,107,109,110,111,112],inclusive:!0}}};return af}();rf.lexer=Oc;function sf(){this.yy={}}return sf.prototype=rf,rf.Parser=sf,new sf}();qdt.parser=qdt;const Hdt=qdt,rIe="flowchart-";let APt=0,Vdt=Oe(),wl={},gk=[],eL={},M5=[],rY={},iY={},sY=0,Gdt=!0,iw,aY,oY=[];const cY=i=>Kr.sanitizeText(i,Vdt),fF=function(i){const a=Object.keys(wl);for(const f of a)if(wl[f].id===i)return wl[f].domId;return i},LPt=function(i,a,f,p,w,m,b={}){let E,_=i;_!==void 0&&_.trim().length!==0&&(wl[_]===void 0&&(wl[_]={id:_,labelType:"text",domId:rIe+_+"-"+APt,styles:[],classes:[]}),APt++,a!==void 0?(Vdt=Oe(),E=cY(a.text.trim()),wl[_].labelType=a.type,E[0]==='"'&&E[E.length-1]==='"'&&(E=E.substring(1,E.length-1)),wl[_].text=E):wl[_].text===void 0&&(wl[_].text=i),f!==void 0&&(wl[_].type=f),p!=null&&p.forEach(function(A){wl[_].styles.push(A)}),w!=null&&w.forEach(function(A){wl[_].classes.push(A)}),m!==void 0&&(wl[_].dir=m),wl[_].props===void 0?wl[_].props=b:b!==void 0&&Object.assign(wl[_].props,b))},MPt=function(i,a,f){const m={start:i,end:a,type:void 0,text:"",labelType:"text"};Ut.info("abc78 Got edge...",m);const b=f.text;if(b!==void 0&&(m.text=cY(b.text.trim()),m.text[0]==='"'&&m.text[m.text.length-1]==='"'&&(m.text=m.text.substring(1,m.text.length-1)),m.labelType=b.type),f!==void 0&&(m.type=f.type,m.stroke=f.stroke,m.length=f.length),(m==null?void 0:m.length)>10&&(m.length=10),gk.length<280)Ut.info("abc78 pushing edge..."),gk.push(m);else throw new Error("Too many edges")},DPt=function(i,a,f){Ut.info("addLink (abc78)",i,a,f);let p,w;for(p=0;p/)&&(iw="LR"),iw.match(/.*v/)&&(iw="TB"),iw==="TD"&&(iw="TB")},uY=function(i,a){i.split(",").forEach(function(f){let p=f;wl[p]!==void 0&&wl[p].classes.push(a),rY[p]!==void 0&&rY[p].classes.push(a)})},iIe=function(i,a){i.split(",").forEach(function(f){a!==void 0&&(iY[aY==="gen-1"?fF(f):f]=cY(a))})},sIe=function(i,a,f){let p=fF(i);if(Oe().securityLevel!=="loose"||a===void 0)return;let w=[];if(typeof f=="string"){w=f.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let m=0;m")),w.classed("hover",!0)}).on("mouseout",function(){a.transition().duration(500).style("opacity",0),yr(this).classed("hover",!1)})};oY.push(VPt);const GPt=function(i="gen-1"){wl={},eL={},gk=[],oY=[VPt],M5=[],rY={},sY=0,iY={},Gdt=!0,aY=i,hg()},UPt=i=>{aY=i||"gen-2"},WPt=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},YPt=function(i,a,f){let p=i.text.trim(),w=f.text;i===f&&f.text.match(/\s/)&&(p=void 0);function m(I){const B={boolean:{},number:{},string:{}},N=[];let R;return{nodeList:I.filter(function(W){const et=typeof W;return W.stmt&&W.stmt==="dir"?(R=W.value,!1):W.trim()===""?!1:et in B?B[et].hasOwnProperty(W)?!1:B[et][W]=!0:N.includes(W)?!1:N.push(W)}),dir:R}}let b=[];const{nodeList:E,dir:_}=m(b.concat.apply(b,a));if(b=E,aY==="gen-1")for(let I=0;I2e3)return;if(KPt[dF]=a,M5[a].id===i)return{result:!0,count:0};let p=0,w=1;for(;p=0){const b=XPt(i,m);if(b.result)return{result:!0,count:w+b.count};w=w+b.count}p=p+1}return{result:!1,count:w}},QPt=function(i){return KPt[i]},ZPt=function(){dF=-1,M5.length>0&&XPt("none",M5.length-1)},JPt=function(){return M5},tFt=()=>Gdt?(Gdt=!1,!0):!1,oIe=i=>{let a=i.trim(),f="arrow_open";switch(a[0]){case"<":f="arrow_point",a=a.slice(1);break;case"x":f="arrow_cross",a=a.slice(1);break;case"o":f="arrow_circle",a=a.slice(1);break}let p="normal";return a.includes("=")&&(p="thick"),a.includes(".")&&(p="dotted"),{type:f,stroke:p}},cIe=(i,a)=>{const f=a.length;let p=0;for(let w=0;w{const a=i.trim();let f=a.slice(0,-1),p="arrow_open";switch(a.slice(-1)){case"x":p="arrow_cross",a[0]==="x"&&(p="double_"+p,f=f.slice(1));break;case">":p="arrow_point",a[0]==="<"&&(p="double_"+p,f=f.slice(1));break;case"o":p="arrow_circle",a[0]==="o"&&(p="double_"+p,f=f.slice(1));break}let w="normal",m=f.length-1;f[0]==="="&&(w="thick"),f[0]==="~"&&(w="invisible");let b=cIe(".",f);return b&&(w="dotted",m=b),{type:p,stroke:w,length:m}},eFt=(i,a)=>{const f=uIe(i);let p;if(a){if(p=oIe(a),p.stroke!==f.stroke)return{type:"INVALID",stroke:"INVALID"};if(p.type==="arrow_open")p.type=f.type;else{if(p.type!==f.type)return{type:"INVALID",stroke:"INVALID"};p.type="double_"+p.type}return p.type==="double_arrow"&&(p.type="double_arrow_point"),p.length=f.length,p}return f},nFt=(i,a)=>{let f=!1;return i.forEach(p=>{p.nodes.indexOf(a)>=0&&(f=!0)}),f},rFt=(i,a)=>{const f=[];return i.nodes.forEach((p,w)=>{nFt(a,p)||f.push(i.nodes[w])}),{nodes:f}},iFt={firstGraph:tFt},wT={defaultConfig:()=>SOt.flowchart,setAccTitle:E0,getAccTitle:fg,getAccDescription:gg,setAccDescription:dg,addVertex:LPt,lookUpDomId:fF,addLink:DPt,updateLinkInterpolate:IPt,updateLink:OPt,addClass:PPt,setDirection:FPt,setClass:uY,setTooltip:iIe,getTooltip:BPt,setClickEvent:RPt,setLink:NPt,bindFunctions:jPt,getDirection:$Pt,getVertices:zPt,getEdges:qPt,getClasses:HPt,clear:GPt,setGen:UPt,defaultStyle:WPt,addSubGraph:YPt,getDepthFirstPos:QPt,indexNodes:ZPt,getSubGraphs:JPt,destructLink:eFt,lex:iFt,exists:nFt,makeUniq:rFt,setDiagramTitle:Nb,getDiagramTitle:pg},lIe=Object.freeze(Object.defineProperty({__proto__:null,addClass:PPt,addLink:DPt,addSingleLink:MPt,addSubGraph:YPt,addVertex:LPt,bindFunctions:jPt,clear:GPt,default:wT,defaultStyle:WPt,destructLink:eFt,firstGraph:tFt,getClasses:HPt,getDepthFirstPos:QPt,getDirection:$Pt,getEdges:qPt,getSubGraphs:JPt,getTooltip:BPt,getVertices:zPt,indexNodes:ZPt,lex:iFt,lookUpDomId:fF,setClass:uY,setClickEvent:RPt,setDirection:FPt,setGen:UPt,setLink:NPt,updateLink:OPt,updateLinkInterpolate:IPt},Symbol.toStringTag,{value:"Module"}));var hIe="[object Symbol]";function vT(i){return typeof i=="symbol"||f3(i)&&sT(i)==hIe}function nL(i,a){for(var f=-1,p=i==null?0:i.length,w=Array(p);++f-1}function Rb(i){return ck(i)?PIt(i):NOt(i)}var LIe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,MIe=/^\w*$/;function Udt(i,a){if(If(i))return!1;var f=typeof i;return f=="number"||f=="symbol"||f=="boolean"||i==null||vT(i)?!0:MIe.test(i)||!LIe.test(i)||a!=null&&i in Object(a)}var DIe=500;function IIe(i){var a=jA(i,function(p){return f.size===DIe&&f.clear(),p}),f=a.cache;return a}var OIe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,PIe=/\\(\\)?/g,FIe=IIe(function(i){var a=[];return i.charCodeAt(0)===46&&a.push(""),i.replace(OIe,function(f,p,w,m){a.push(w?m.replace(PIe,"$1"):p||f)}),a});const NIe=FIe;function fFt(i){return i==null?"":oFt(i)}function hY(i,a){return If(i)?i:Udt(i,a)?[i]:NIe(fFt(i))}var BIe=1/0;function gF(i){if(typeof i=="string"||vT(i))return i;var a=i+"";return a=="0"&&1/i==-BIe?"-0":a}function fY(i,a){a=hY(a,i);for(var f=0,p=a.length;i!=null&&f0&&f(E)?a>1?dY(E,a-1,f,p,w):Wdt(w,E):p||(w[w.length]=E)}return w}function rL(i){var a=i==null?0:i.length;return a?dY(i,1):[]}function $Ie(i){return RIt(BIt(i,void 0,rL),i+"")}function zIe(i,a,f,p){var w=-1,m=i==null?0:i.length;for(p&&m&&(f=i[++w]);++wE))return!1;var A=m.get(i),I=m.get(a);if(A&&I)return A==a&&I==i;var B=-1,N=!0,R=f&pPe?new bF:void 0;for(m.set(i,a),m.set(a,i);++B2?a[2]:void 0;for(w&&nF(a[0],a[1],w)&&(p=1);++f-1?w[m?a[b]:b]:void 0}}var iFe=Math.max;function sFe(i,a,f){var p=i==null?0:i.length;if(!p)return-1;var w=f==null?0:EIe(f);return w<0&&(w=iFe(p+w,0)),hFt(i,pk(a),w)}var aFe=rFe(sFe);const e0t=aFe;function RFt(i,a){var f=-1,p=ck(i)?Array(i.length):[];return pY(i,function(w,m,b){p[++f]=a(w,m,b)}),p}function Ff(i,a){var f=If(i)?nL:RFt;return f(i,pk(a))}function oFe(i,a){return i==null?i:tdt(i,t0t(a),uT)}function cFe(i,a){return i&&Jdt(i,t0t(a))}function uFe(i,a){return i>a}var lFe=Object.prototype,hFe=lFe.hasOwnProperty;function fFe(i,a){return i!=null&&hFe.call(i,a)}function za(i,a){return i!=null&&PFt(i,a,fFe)}function dFe(i,a){return nL(a,function(f){return i[f]})}function I5(i){return i==null?[]:dFe(i,Rb(i))}function Jh(i){return i===void 0}function jFt(i,a){return ia||m&&b&&_&&!E&&!A||p&&b&&_||!f&&_||!w)return 1;if(!p&&!m&&!A&&i=E)return _;var A=f[p];return _*(A=="desc"?-1:1)}}return i.index-a.index}function mFe(i,a,f){a.length?a=nL(a,function(m){return If(m)?function(b){return fY(b,m.length===1?m[0]:m)}:m}):a=[lT];var p=-1;a=nL(a,SW(pk));var w=RFt(i,function(m,b,E){var _=nL(a,function(A){return A(m)});return{criteria:_,index:++p,value:m}});return bFe(w,function(m,b){return vFe(m,b,f)})}function yFe(i,a){return pFe(i,a,function(f,p){return FFt(i,p)})}var xFe=$Ie(function(i,a){return i==null?{}:yFe(i,a)});const vF=xFe;var kFe=Math.ceil,EFe=Math.max;function TFe(i,a,f,p){for(var w=-1,m=EFe(kFe((a-i)/(f||1)),0),b=Array(m);m--;)b[p?m:++w]=i,i+=f;return b}function CFe(i){return function(a,f,p){return p&&typeof p!="number"&&nF(a,f,p)&&(f=p=void 0),a=lY(a),f===void 0?(f=a,a=0):f=lY(f),p=p===void 0?a1&&nF(i,a[0],a[1])?a=[]:f>2&&nF(a[0],a[1],a[2])&&(a=[a[0]]),mFe(i,dY(a,1),[])});const yF=AFe;var LFe=1/0,MFe=KA&&1/Xdt(new KA([,-0]))[1]==LFe?function(i){return new KA(i)}:TIe;const DFe=MFe;var IFe=200;function OFe(i,a,f){var p=-1,w=AIe,m=i.length,b=!0,E=[],_=E;if(f)b=!1,w=eFe;else if(m>=IFe){var A=a?null:DFe(i);if(A)return Xdt(A);b=!1,w=_Ft,_=new bF}else _=a?[]:E;t:for(;++p1?w.setNode(m,f):w.setNode(m)}),this}setNode(a,f){return za(this._nodes,a)?(arguments.length>1&&(this._nodes[a]=f),this):(this._nodes[a]=arguments.length>1?f:this._defaultNodeLabelFn(a),this._isCompound&&(this._parent[a]=xT,this._children[a]={},this._children[xT][a]=!0),this._in[a]={},this._preds[a]={},this._out[a]={},this._sucs[a]={},++this._nodeCount,this)}node(a){return this._nodes[a]}hasNode(a){return za(this._nodes,a)}removeNode(a){var f=this;if(za(this._nodes,a)){var p=function(w){f.removeEdge(f._edgeObjs[w])};delete this._nodes[a],this._isCompound&&(this._removeFromParentsChildList(a),delete this._parent[a],cr(this.children(a),function(w){f.setParent(w)}),delete this._children[a]),cr(Rb(this._in[a]),p),delete this._in[a],delete this._preds[a],cr(Rb(this._out[a]),p),delete this._out[a],delete this._sucs[a],--this._nodeCount}return this}setParent(a,f){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(Jh(f))f=xT;else{f+="";for(var p=f;!Jh(p);p=this.parent(p))if(p===a)throw new Error("Setting "+f+" as parent of "+a+" would create a cycle");this.setNode(f)}return this.setNode(a),this._removeFromParentsChildList(a),this._parent[a]=f,this._children[f][a]=!0,this}_removeFromParentsChildList(a){delete this._children[this._parent[a]][a]}parent(a){if(this._isCompound){var f=this._parent[a];if(f!==xT)return f}}children(a){if(Jh(a)&&(a=xT),this._isCompound){var f=this._children[a];if(f)return Rb(f)}else{if(a===xT)return this.nodes();if(this.hasNode(a))return[]}}predecessors(a){var f=this._preds[a];if(f)return Rb(f)}successors(a){var f=this._sucs[a];if(f)return Rb(f)}neighbors(a){var f=this.predecessors(a);if(f)return FFe(f,this.successors(a))}isLeaf(a){var f;return this.isDirected()?f=this.successors(a):f=this.neighbors(a),f.length===0}filterNodes(a){var f=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});f.setGraph(this.graph());var p=this;cr(this._nodes,function(b,E){a(E)&&f.setNode(E,b)}),cr(this._edgeObjs,function(b){f.hasNode(b.v)&&f.hasNode(b.w)&&f.setEdge(b,p.edge(b))});var w={};function m(b){var E=p.parent(b);return E===void 0||f.hasNode(E)?(w[b]=E,E):E in w?w[E]:m(E)}return this._isCompound&&cr(f.nodes(),function(b){f.setParent(b,m(b))}),f}setDefaultEdgeLabel(a){return BA(a)||(a=HA(a)),this._defaultEdgeLabelFn=a,this}edgeCount(){return this._edgeCount}edges(){return I5(this._edgeObjs)}setPath(a,f){var p=this,w=arguments;return mF(a,function(m,b){return w.length>1?p.setEdge(m,b,f):p.setEdge(m,b),b}),this}setEdge(){var a,f,p,w,m=!1,b=arguments[0];typeof b=="object"&&b!==null&&"v"in b?(a=b.v,f=b.w,p=b.name,arguments.length===2&&(w=arguments[1],m=!0)):(a=b,f=arguments[1],p=arguments[3],arguments.length>2&&(w=arguments[2],m=!0)),a=""+a,f=""+f,Jh(p)||(p=""+p);var E=xF(this._isDirected,a,f,p);if(za(this._edgeLabels,E))return m&&(this._edgeLabels[E]=w),this;if(!Jh(p)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(a),this.setNode(f),this._edgeLabels[E]=m?w:this._defaultEdgeLabelFn(a,f,p);var _=$Fe(this._isDirected,a,f,p);return a=_.v,f=_.w,Object.freeze(_),this._edgeObjs[E]=_,zFt(this._preds[f],a),zFt(this._sucs[a],f),this._in[f][E]=_,this._out[a][E]=_,this._edgeCount++,this}edge(a,f,p){var w=arguments.length===1?i0t(this._isDirected,arguments[0]):xF(this._isDirected,a,f,p);return this._edgeLabels[w]}hasEdge(a,f,p){var w=arguments.length===1?i0t(this._isDirected,arguments[0]):xF(this._isDirected,a,f,p);return za(this._edgeLabels,w)}removeEdge(a,f,p){var w=arguments.length===1?i0t(this._isDirected,arguments[0]):xF(this._isDirected,a,f,p),m=this._edgeObjs[w];return m&&(a=m.v,f=m.w,delete this._edgeLabels[w],delete this._edgeObjs[w],qFt(this._preds[f],a),qFt(this._sucs[a],f),delete this._in[f][w],delete this._out[a][w],this._edgeCount--),this}inEdges(a,f){var p=this._in[a];if(p){var w=I5(p);return f?D5(w,function(m){return m.v===f}):w}}outEdges(a,f){var p=this._out[a];if(p){var w=I5(p);return f?D5(w,function(m){return m.w===f}):w}}nodeEdges(a,f){var p=this.inEdges(a,f);if(p)return p.concat(this.outEdges(a,f))}}c1.prototype._nodeCount=0,c1.prototype._edgeCount=0;function zFt(i,a){i[a]?i[a]++:i[a]=1}function qFt(i,a){--i[a]||delete i[a]}function xF(i,a,f,p){var w=""+a,m=""+f;if(!i&&w>m){var b=w;w=m,m=b}return w+$Ft+m+$Ft+(Jh(p)?jFe:p)}function $Fe(i,a,f,p){var w=""+a,m=""+f;if(!i&&w>m){var b=w;w=m,m=b}var E={v:w,w:m};return p&&(E.name=p),E}function i0t(i,a){return xF(i,a.v,a.w,a.name)}class zFe{constructor(){var a={};a._next=a._prev=a,this._sentinel=a}dequeue(){var a=this._sentinel,f=a._prev;if(f!==a)return HFt(f),f}enqueue(a){var f=this._sentinel;a._prev&&a._next&&HFt(a),a._next=f._next,f._next._prev=a,f._next=a,a._prev=f}toString(){for(var a=[],f=this._sentinel,p=f._prev;p!==f;)a.push(JSON.stringify(p,qFe)),p=p._prev;return"["+a.join(", ")+"]"}}function HFt(i){i._prev._next=i._next,i._next._prev=i._prev,delete i._next,delete i._prev}function qFe(i,a){if(i!=="_next"&&i!=="_prev")return a}var HFe=HA(1);function VFe(i,a){if(i.nodeCount()<=1)return[];var f=UFe(i,a||HFe),p=GFe(f.graph,f.buckets,f.zeroIdx);return rL(Ff(p,function(w){return i.outEdges(w.v,w.w)}))}function GFe(i,a,f){for(var p=[],w=a[a.length-1],m=a[0],b;i.nodeCount();){for(;b=m.dequeue();)s0t(i,a,f,b);for(;b=w.dequeue();)s0t(i,a,f,b);if(i.nodeCount()){for(var E=a.length-2;E>0;--E)if(b=a[E].dequeue(),b){p=p.concat(s0t(i,a,f,b,!0));break}}}return p}function s0t(i,a,f,p,w){var m=w?[]:void 0;return cr(i.inEdges(p.v),function(b){var E=i.edge(b),_=i.node(b.v);w&&m.push({v:b.v,w:b.w}),_.out-=E,a0t(a,f,_)}),cr(i.outEdges(p.v),function(b){var E=i.edge(b),_=b.w,A=i.node(_);A.in-=E,a0t(a,f,A)}),i.removeNode(p.v),m}function UFe(i,a){var f=new c1,p=0,w=0;cr(i.nodes(),function(E){f.setNode(E,{v:E,in:0,out:0})}),cr(i.edges(),function(E){var _=f.edge(E.v,E.w)||0,A=a(E),I=_+A;f.setEdge(E.v,E.w,I),w=Math.max(w,f.node(E.v).out+=A),p=Math.max(p,f.node(E.w).in+=A)});var m=yT(w+p+3).map(function(){return new zFe}),b=p+1;return cr(f.nodes(),function(E){a0t(m,b,f.node(E))}),{graph:f,buckets:m,zeroIdx:b}}function a0t(i,a,f){f.out?f.in?i[f.out-f.in+a].enqueue(f):i[i.length-1].enqueue(f):i[0].enqueue(f)}function WFe(i){var a=i.graph().acyclicer==="greedy"?VFe(i,f(i)):YFe(i);cr(a,function(p){var w=i.edge(p);i.removeEdge(p),w.forwardName=p.name,w.reversed=!0,i.setEdge(p.w,p.v,w,vY("rev"))});function f(p){return function(w){return p.edge(w).weight}}}function YFe(i){var a=[],f={},p={};function w(m){za(p,m)||(p[m]=!0,f[m]=!0,cr(i.outEdges(m),function(b){za(f,b.w)?a.push(b):w(b.w)}),delete f[m])}return cr(i.nodes(),w),a}function KFe(i){cr(i.edges(),function(a){var f=i.edge(a);if(f.reversed){i.removeEdge(a);var p=f.forwardName;delete f.reversed,delete f.forwardName,i.setEdge(a.w,a.v,f,p)}})}function sL(i,a,f,p){var w;do w=vY(p);while(i.hasNode(w));return f.dummy=a,i.setNode(w,f),w}function XFe(i){var a=new c1().setGraph(i.graph());return cr(i.nodes(),function(f){a.setNode(f,i.node(f))}),cr(i.edges(),function(f){var p=a.edge(f.v,f.w)||{weight:0,minlen:1},w=i.edge(f);a.setEdge(f.v,f.w,{weight:p.weight+w.weight,minlen:Math.max(p.minlen,w.minlen)})}),a}function VFt(i){var a=new c1({multigraph:i.isMultigraph()}).setGraph(i.graph());return cr(i.nodes(),function(f){i.children(f).length||a.setNode(f,i.node(f))}),cr(i.edges(),function(f){a.setEdge(f,i.edge(f))}),a}function GFt(i,a){var f=i.x,p=i.y,w=a.x-f,m=a.y-p,b=i.width/2,E=i.height/2;if(!w&&!m)throw new Error("Not possible to find intersection inside of the rectangle");var _,A;return Math.abs(m)*b>Math.abs(w)*E?(m<0&&(E=-E),_=E*w/m,A=E):(w<0&&(b=-b),_=b,A=b*m/w),{x:f+_,y:p+A}}function mY(i){var a=Ff(yT(WFt(i)+1),function(){return[]});return cr(i.nodes(),function(f){var p=i.node(f),w=p.rank;Jh(w)||(a[w][p.order]=f)}),a}function QFe(i){var a=wF(Ff(i.nodes(),function(f){return i.node(f).rank}));cr(i.nodes(),function(f){var p=i.node(f);za(p,"rank")&&(p.rank-=a)})}function ZFe(i){var a=wF(Ff(i.nodes(),function(m){return i.node(m).rank})),f=[];cr(i.nodes(),function(m){var b=i.node(m).rank-a;f[b]||(f[b]=[]),f[b].push(m)});var p=0,w=i.graph().nodeRankFactor;cr(f,function(m,b){Jh(m)&&b%w!==0?--p:p&&cr(m,function(E){i.node(E).rank+=p})})}function UFt(i,a,f,p){var w={width:0,height:0};return arguments.length>=4&&(w.rank=f,w.order=p),sL(i,"border",w,a)}function WFt(i){return mT(Ff(i.nodes(),function(a){var f=i.node(a).rank;if(!Jh(f))return f}))}function JFe(i,a){var f={lhs:[],rhs:[]};return cr(i,function(p){a(p)?f.lhs.push(p):f.rhs.push(p)}),f}function tNe(i,a){var f=NFt();try{return a()}finally{console.log(i+" time: "+(NFt()-f)+"ms")}}function eNe(i,a){return a()}function nNe(i){function a(f){var p=i.children(f),w=i.node(f);if(p.length&&cr(p,a),za(w,"minRank")){w.borderLeft=[],w.borderRight=[];for(var m=w.minRank,b=w.maxRank+1;mb.lim&&(E=b,_=!0);var A=D5(a.edges(),function(I){return _===sNt(i,i.node(I.v),E)&&_!==sNt(i,i.node(I.w),E)});return r0t(A,function(I){return kF(a,I)})}function iNt(i,a,f,p){var w=f.v,m=f.w;i.removeEdge(w,m),i.setEdge(p.v,p.w,{}),h0t(i),l0t(i,a),wNe(i,a)}function wNe(i,a){var f=e0t(i.nodes(),function(w){return!a.node(w).parent}),p=pNe(i,f);p=p.slice(1),cr(p,function(w){var m=i.node(w).parent,b=a.edge(w,m),E=!1;b||(b=a.edge(m,w),E=!0),a.node(w).rank=a.node(m).rank+(E?b.minlen:-b.minlen)})}function vNe(i,a,f){return i.hasEdge(a,f)}function sNt(i,a,f){return f.low<=a.lim&&a.lim<=f.lim}function mNe(i){switch(i.graph().ranker){case"network-simplex":aNt(i);break;case"tight-tree":xNe(i);break;case"longest-path":yNe(i);break;default:aNt(i)}}var yNe=u0t;function xNe(i){u0t(i),QFt(i)}function aNt(i){kT(i)}function kNe(i){var a=sL(i,"root",{},"_root"),f=ENe(i),p=mT(I5(f))-1,w=2*p+1;i.graph().nestingRoot=a,cr(i.edges(),function(b){i.edge(b).minlen*=w});var m=TNe(i)+1;cr(i.children(),function(b){oNt(i,a,w,m,p,f,b)}),i.graph().nodeRankFactor=w}function oNt(i,a,f,p,w,m,b){var E=i.children(b);if(!E.length){b!==a&&i.setEdge(a,b,{weight:0,minlen:f});return}var _=UFt(i,"_bt"),A=UFt(i,"_bb"),I=i.node(b);i.setParent(_,b),I.borderTop=_,i.setParent(A,b),I.borderBottom=A,cr(E,function(B){oNt(i,a,f,p,w,m,B);var N=i.node(B),R=N.borderTop?N.borderTop:B,z=N.borderBottom?N.borderBottom:B,W=N.borderTop?p:2*p,et=R!==z?1:w-m[b]+1;i.setEdge(_,R,{weight:W,minlen:et,nestingEdge:!0}),i.setEdge(z,A,{weight:W,minlen:et,nestingEdge:!0})}),i.parent(b)||i.setEdge(a,_,{weight:0,minlen:w+m[b]})}function ENe(i){var a={};function f(p,w){var m=i.children(p);m&&m.length&&cr(m,function(b){f(b,w+1)}),a[p]=w}return cr(i.children(),function(p){f(p,1)}),a}function TNe(i){return mF(i.edges(),function(a,f){return a+i.edge(f).weight},0)}function CNe(i){var a=i.graph();i.removeNode(a.nestingRoot),delete a.nestingRoot,cr(i.edges(),function(f){var p=i.edge(f);p.nestingEdge&&i.removeEdge(f)})}function _Ne(i,a,f){var p={},w;cr(f,function(m){for(var b=i.parent(m),E,_;b;){if(E=i.parent(b),E?(_=p[E],p[E]=b):(_=w,w=b),_&&_!==b){a.setEdge(_,b);return}b=E}})}function SNe(i,a,f){var p=ANe(i),w=new c1({compound:!0}).setGraph({root:p}).setDefaultNodeLabel(function(m){return i.node(m)});return cr(i.nodes(),function(m){var b=i.node(m),E=i.parent(m);(b.rank===a||b.minRank<=a&&a<=b.maxRank)&&(w.setNode(m),w.setParent(m,E||p),cr(i[f](m),function(_){var A=_.v===m?_.w:_.v,I=w.edge(A,m),B=Jh(I)?0:I.weight;w.setEdge(A,m,{weight:i.edge(_).weight+B})}),za(b,"minRank")&&w.setNode(m,{borderLeft:b.borderLeft[a],borderRight:b.borderRight[a]}))}),w}function ANe(i){for(var a;i.hasNode(a=vY("_root")););return a}function LNe(i,a){for(var f=0,p=1;p0;)I%2&&(B+=E[I+1]),I=I-1>>1,E[I]+=A.weight;_+=A.weight*B})),_}function DNe(i){var a={},f=D5(i.nodes(),function(E){return!i.children(E).length}),p=mT(Ff(f,function(E){return i.node(E).rank})),w=Ff(yT(p+1),function(){return[]});function m(E){if(!za(a,E)){a[E]=!0;var _=i.node(E);w[_.rank].push(E),cr(i.successors(E),m)}}var b=yF(f,function(E){return i.node(E).rank});return cr(b,m),w}function INe(i,a){return Ff(a,function(f){var p=i.inEdges(f);if(p.length){var w=mF(p,function(m,b){var E=i.edge(b),_=i.node(b.v);return{sum:m.sum+E.weight*_.order,weight:m.weight+E.weight}},{sum:0,weight:0});return{v:f,barycenter:w.sum/w.weight,weight:w.weight}}else return{v:f}})}function ONe(i,a){var f={};cr(i,function(w,m){var b=f[w.v]={indegree:0,in:[],out:[],vs:[w.v],i:m};Jh(w.barycenter)||(b.barycenter=w.barycenter,b.weight=w.weight)}),cr(a.edges(),function(w){var m=f[w.v],b=f[w.w];!Jh(m)&&!Jh(b)&&(b.indegree++,m.out.push(f[w.w]))});var p=D5(f,function(w){return!w.indegree});return PNe(p)}function PNe(i){var a=[];function f(m){return function(b){b.merged||(Jh(b.barycenter)||Jh(m.barycenter)||b.barycenter>=m.barycenter)&&FNe(m,b)}}function p(m){return function(b){b.in.push(m),--b.indegree===0&&i.push(b)}}for(;i.length;){var w=i.pop();a.push(w),cr(w.in.reverse(),f(w)),cr(w.out,p(w))}return Ff(D5(a,function(m){return!m.merged}),function(m){return vF(m,["vs","i","barycenter","weight"])})}function FNe(i,a){var f=0,p=0;i.weight&&(f+=i.barycenter*i.weight,p+=i.weight),a.weight&&(f+=a.barycenter*a.weight,p+=a.weight),i.vs=a.vs.concat(i.vs),i.barycenter=f/p,i.weight=p,i.i=Math.min(a.i,i.i),a.merged=!0}function NNe(i,a){var f=JFe(i,function(I){return za(I,"barycenter")}),p=f.lhs,w=yF(f.rhs,function(I){return-I.i}),m=[],b=0,E=0,_=0;p.sort(BNe(!!a)),_=cNt(m,w,_),cr(p,function(I){_+=I.vs.length,m.push(I.vs),b+=I.barycenter*I.weight,E+=I.weight,_=cNt(m,w,_)});var A={vs:rL(m)};return E&&(A.barycenter=b/E,A.weight=E),A}function cNt(i,a,f){for(var p;a.length&&(p=bY(a)).i<=f;)a.pop(),i.push(p.vs),f++;return f}function BNe(i){return function(a,f){return a.barycenterf.barycenter?1:i?f.i-a.i:a.i-f.i}}function uNt(i,a,f,p){var w=i.children(a),m=i.node(a),b=m?m.borderLeft:void 0,E=m?m.borderRight:void 0,_={};b&&(w=D5(w,function(z){return z!==b&&z!==E}));var A=INe(i,w);cr(A,function(z){if(i.children(z.v).length){var W=uNt(i,z.v,f,p);_[z.v]=W,za(W,"barycenter")&&jNe(z,W)}});var I=ONe(A,f);RNe(I,_);var B=NNe(I,p);if(b&&(B.vs=rL([b,B.vs,E]),i.predecessors(b).length)){var N=i.node(i.predecessors(b)[0]),R=i.node(i.predecessors(E)[0]);za(B,"barycenter")||(B.barycenter=0,B.weight=0),B.barycenter=(B.barycenter*B.weight+N.order+R.order)/(B.weight+2),B.weight+=2}return B}function RNe(i,a){cr(i,function(f){f.vs=rL(f.vs.map(function(p){return a[p]?a[p].vs:p}))})}function jNe(i,a){Jh(i.barycenter)?(i.barycenter=a.barycenter,i.weight=a.weight):(i.barycenter=(i.barycenter*i.weight+a.barycenter*a.weight)/(i.weight+a.weight),i.weight+=a.weight)}function $Ne(i){var a=WFt(i),f=lNt(i,yT(1,a+1),"inEdges"),p=lNt(i,yT(a-1,-1,-1),"outEdges"),w=DNe(i);hNt(i,w);for(var m=Number.POSITIVE_INFINITY,b,E=0,_=0;_<4;++E,++_){zNe(E%2?f:p,E%4>=2),w=mY(i);var A=LNe(i,w);Ab||E>a[_].lim));for(A=_,_=p;(_=i.parent(_))!==A;)m.push(_);return{path:w.concat(m.reverse()),lca:A}}function VNe(i){var a={},f=0;function p(w){var m=f;cr(i.children(w),p),a[w]={low:m,lim:f++}}return cr(i.children(),p),a}function GNe(i,a){var f={};function p(w,m){var b=0,E=0,_=w.length,A=bY(m);return cr(m,function(I,B){var N=WNe(i,I),R=N?i.node(N).order:_;(N||I===A)&&(cr(m.slice(E,B+1),function(z){cr(i.predecessors(z),function(W){var et=i.node(W),st=et.order;(stA)&&fNt(f,N,I)})})}function w(m,b){var E=-1,_,A=0;return cr(b,function(I,B){if(i.node(I).dummy==="border"){var N=i.predecessors(I);N.length&&(_=i.node(N[0]).order,p(b,A,B,E,_),A=B,E=_)}p(b,A,b.length,_,m.length)}),b}return mF(a,w),f}function WNe(i,a){if(i.node(a).dummy)return e0t(i.predecessors(a),function(f){return i.node(f).dummy})}function fNt(i,a,f){if(a>f){var p=a;a=f,f=p}var w=i[a];w||(i[a]=w={}),w[f]=!0}function YNe(i,a,f){if(a>f){var p=a;a=f,f=p}return za(i[a],f)}function KNe(i,a,f,p){var w={},m={},b={};return cr(a,function(E){cr(E,function(_,A){w[_]=_,m[_]=_,b[_]=A})}),cr(a,function(E){var _=-1;cr(E,function(A){var I=p(A);if(I.length){I=yF(I,function(W){return b[W]});for(var B=(I.length-1)/2,N=Math.floor(B),R=Math.ceil(B);N<=R;++N){var z=I[N];m[A]===A&&_0}function v3(i,a,f){var p=i.x,w=i.y,m=[],b=Number.POSITIVE_INFINITY,E=Number.POSITIVE_INFINITY;a.forEach(function(z){b=Math.min(b,z.x),E=Math.min(E,z.y)});for(var _=p-i.width/2-b,A=w-i.height/2-E,I=0;I1&&m.sort(function(z,W){var et=z.x-f.x,st=z.y-f.y,at=Math.sqrt(et*et+st*st),bt=W.x-f.x,mt=W.y-f.y,yt=Math.sqrt(bt*bt+mt*mt);return atMath.abs(w)*E?(m<0&&(E=-E),_=m===0?0:E*w/m,A=E):(w<0&&(b=-b),_=b,A=w===0?0:b*m/w),{x:f+_,y:p+A}}var E0t={rect:ZBe,ellipse:JBe,circle:tRe,diamond:eRe};function QBe(i){E0t=i}function ZBe(i,a,f){var p=i.insert("rect",":first-child").attr("rx",f.rx).attr("ry",f.ry).attr("x",-a.width/2).attr("y",-a.height/2).attr("width",a.width).attr("height",a.height);return f.intersect=function(w){return k0t(f,w)},p}function JBe(i,a,f){var p=a.width/2,w=a.height/2,m=i.insert("ellipse",":first-child").attr("x",-a.width/2).attr("y",-a.height/2).attr("rx",p).attr("ry",w);return f.intersect=function(b){return vNt(f,p,w,b)},m}function tRe(i,a,f){var p=Math.max(a.width,a.height)/2,w=i.insert("circle",":first-child").attr("x",-a.width/2).attr("y",-a.height/2).attr("r",p);return f.intersect=function(m){return KBe(f,p,m)},w}function eRe(i,a,f){var p=a.width*Math.SQRT2/2,w=a.height*Math.SQRT2/2,m=[{x:0,y:-w},{x:-p,y:0},{x:0,y:w},{x:p,y:0}],b=i.insert("polygon",":first-child").attr("points",m.map(function(E){return E.x+","+E.y}).join(" "));return f.intersect=function(E){return v3(f,m,E)},b}function nRe(){var i=function(a,f){sRe(f);var p=EF(a,"output"),w=EF(p,"clusters"),m=EF(p,"edgePaths"),b=m0t(EF(p,"edgeLabels"),f),E=x0t(EF(p,"nodes"),f,E0t);aL(f),YBe(E,f),WBe(b,f),y0t(m,f,p0t);var _=v0t(w,f);UBe(_,f),aRe(f)};return i.createNodes=function(a){return arguments.length?(GBe(a),i):x0t},i.createClusters=function(a){return arguments.length?(BBe(a),i):v0t},i.createEdgeLabels=function(a){return arguments.length?(RBe(a),i):m0t},i.createEdgePaths=function(a){return arguments.length?(jBe(a),i):y0t},i.shapes=function(a){return arguments.length?(QBe(a),i):E0t},i.arrows=function(a){return arguments.length?(MBe(a),i):p0t},i}var rRe={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},iRe={arrowhead:"normal",curve:cg};function sRe(i){i.nodes().forEach(function(a){var f=i.node(a);!za(f,"label")&&!i.children(a).length&&(f.label=a),za(f,"paddingX")&&iL(f,{paddingLeft:f.paddingX,paddingRight:f.paddingX}),za(f,"paddingY")&&iL(f,{paddingTop:f.paddingY,paddingBottom:f.paddingY}),za(f,"padding")&&iL(f,{paddingLeft:f.padding,paddingRight:f.padding,paddingTop:f.padding,paddingBottom:f.padding}),iL(f,rRe),cr(["paddingLeft","paddingRight","paddingTop","paddingBottom"],function(p){f[p]=Number(f[p])}),za(f,"width")&&(f._prevWidth=f.width),za(f,"height")&&(f._prevHeight=f.height)}),i.edges().forEach(function(a){var f=i.edge(a);za(f,"label")||(f.label=""),iL(f,iRe)})}function aRe(i){cr(i.nodes(),function(a){var f=i.node(a);za(f,"_prevWidth")?f.width=f._prevWidth:delete f.width,za(f,"_prevHeight")?f.height=f._prevHeight:delete f.height,delete f._prevWidth,delete f._prevHeight})}function EF(i,a){var f=i.select("g."+a);return f.empty()&&(f=i.append("g").attr("class",a)),f}function yNt(i,a,f){const p=a.width,w=a.height,m=(p+w)*.9,b=[{x:m/2,y:0},{x:m,y:-m/2},{x:m/2,y:-m},{x:0,y:-m/2}],E=O5(i,m,m,b);return f.intersect=function(_){return v3(f,b,_)},E}function xNt(i,a,f){const w=a.height,m=w/4,b=a.width+2*m,E=[{x:m,y:0},{x:b-m,y:0},{x:b,y:-w/2},{x:b-m,y:-w},{x:m,y:-w},{x:0,y:-w/2}],_=O5(i,b,w,E);return f.intersect=function(A){return v3(f,E,A)},_}function kNt(i,a,f){const p=a.width,w=a.height,m=[{x:-w/2,y:0},{x:p,y:0},{x:p,y:-w},{x:-w/2,y:-w},{x:0,y:-w/2}],b=O5(i,p,w,m);return f.intersect=function(E){return v3(f,m,E)},b}function ENt(i,a,f){const p=a.width,w=a.height,m=[{x:-2*w/6,y:0},{x:p-w/6,y:0},{x:p+2*w/6,y:-w},{x:w/6,y:-w}],b=O5(i,p,w,m);return f.intersect=function(E){return v3(f,m,E)},b}function TNt(i,a,f){const p=a.width,w=a.height,m=[{x:2*w/6,y:0},{x:p+w/6,y:0},{x:p-2*w/6,y:-w},{x:-w/6,y:-w}],b=O5(i,p,w,m);return f.intersect=function(E){return v3(f,m,E)},b}function CNt(i,a,f){const p=a.width,w=a.height,m=[{x:-2*w/6,y:0},{x:p+2*w/6,y:0},{x:p-w/6,y:-w},{x:w/6,y:-w}],b=O5(i,p,w,m);return f.intersect=function(E){return v3(f,m,E)},b}function _Nt(i,a,f){const p=a.width,w=a.height,m=[{x:w/6,y:0},{x:p-w/6,y:0},{x:p+2*w/6,y:-w},{x:-2*w/6,y:-w}],b=O5(i,p,w,m);return f.intersect=function(E){return v3(f,m,E)},b}function SNt(i,a,f){const p=a.width,w=a.height,m=[{x:0,y:0},{x:p+w/2,y:0},{x:p,y:-w/2},{x:p+w/2,y:-w},{x:0,y:-w}],b=O5(i,p,w,m);return f.intersect=function(E){return v3(f,m,E)},b}function ANt(i,a,f){const p=a.height,w=a.width+p/4,m=i.insert("rect",":first-child").attr("rx",p/2).attr("ry",p/2).attr("x",-w/2).attr("y",-p/2).attr("width",w).attr("height",p);return f.intersect=function(b){return k0t(f,b)},m}function LNt(i,a,f){const p=a.width,w=a.height,m=[{x:0,y:0},{x:p,y:0},{x:p,y:-w},{x:0,y:-w},{x:0,y:0},{x:-8,y:0},{x:p+8,y:0},{x:p+8,y:-w},{x:-8,y:-w},{x:-8,y:0}],b=O5(i,p,w,m);return f.intersect=function(E){return v3(f,m,E)},b}function MNt(i,a,f){const p=a.width,w=p/2,m=w/(2.5+p/50),b=a.height+m,E="M 0,"+m+" a "+w+","+m+" 0,0,0 "+p+" 0 a "+w+","+m+" 0,0,0 "+-p+" 0 l 0,"+b+" a "+w+","+m+" 0,0,0 "+p+" 0 l 0,"+-b,_=i.attr("label-offset-y",m).insert("path",":first-child").attr("d",E).attr("transform","translate("+-p/2+","+-(b/2+m)+")");return f.intersect=function(A){const I=k0t(f,A),B=I.x-f.x;if(w!=0&&(Math.abs(B)f.height/2-m)){let N=m*m*(1-B*B/(w*w));N!=0&&(N=Math.sqrt(N)),N=m-N,A.y-f.y>0&&(N=-N),I.y+=N}return I},_}function oRe(i){i.shapes().question=yNt,i.shapes().hexagon=xNt,i.shapes().stadium=ANt,i.shapes().subroutine=LNt,i.shapes().cylinder=MNt,i.shapes().rect_left_inv_arrow=kNt,i.shapes().lean_right=ENt,i.shapes().lean_left=TNt,i.shapes().trapezoid=CNt,i.shapes().inv_trapezoid=_Nt,i.shapes().rect_right_inv_arrow=SNt}function cRe(i){i({question:yNt}),i({hexagon:xNt}),i({stadium:ANt}),i({subroutine:LNt}),i({cylinder:MNt}),i({rect_left_inv_arrow:kNt}),i({lean_right:ENt}),i({lean_left:TNt}),i({trapezoid:CNt}),i({inv_trapezoid:_Nt}),i({rect_right_inv_arrow:SNt})}function O5(i,a,f,p){return i.insert("polygon",":first-child").attr("points",p.map(function(w){return w.x+","+w.y}).join(" ")).attr("transform","translate("+-a/2+","+f/2+")")}const uRe={addToRender:oRe,addToRenderV2:cRe},DNt={},lRe=function(i){const a=Object.keys(i);for(const f of a)DNt[f]=i[f]},INt=function(i,a,f,p,w,m){const b=p?p.select(`[id="${f}"]`):yr(`[id="${f}"]`),E=w||document;Object.keys(i).forEach(function(A){const I=i[A];let B="default";I.classes.length>0&&(B=I.classes.join(" "));const N=im(I.styles);let R=I.text!==void 0?I.text:I.id,z;if(o1(Oe().flowchart.htmlLabels)){const st={label:R.replace(/fa[blrs]?:fa-[\w-]+/g,at=>``)};z=b0t(b,st).node(),z.parentNode.removeChild(z)}else{const st=E.createElementNS("http://www.w3.org/2000/svg","text");st.setAttribute("style",N.labelStyle.replace("color:","fill:"));const at=R.split(Kr.lineBreakRegex);for(const bt of at){const mt=E.createElementNS("http://www.w3.org/2000/svg","tspan");mt.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),mt.setAttribute("dy","1em"),mt.setAttribute("x","1"),mt.textContent=bt,st.appendChild(mt)}z=st}let W=0,et="";switch(I.type){case"round":W=5,et="rect";break;case"square":et="rect";break;case"diamond":et="question";break;case"hexagon":et="hexagon";break;case"odd":et="rect_left_inv_arrow";break;case"lean_right":et="lean_right";break;case"lean_left":et="lean_left";break;case"trapezoid":et="trapezoid";break;case"inv_trapezoid":et="inv_trapezoid";break;case"odd_right":et="rect_left_inv_arrow";break;case"circle":et="circle";break;case"ellipse":et="ellipse";break;case"stadium":et="stadium";break;case"subroutine":et="subroutine";break;case"cylinder":et="cylinder";break;case"group":et="rect";break;default:et="rect"}Ut.warn("Adding node",I.id,I.domId),a.setNode(m.db.lookUpDomId(I.id),{labelType:"svg",labelStyle:N.labelStyle,shape:et,label:z,rx:W,ry:W,class:B,style:N.style,id:m.db.lookUpDomId(I.id)})})},ONt=function(i,a,f){let p=0,w,m;if(i.defaultStyle!==void 0){const b=im(i.defaultStyle);w=b.style,m=b.labelStyle}i.forEach(function(b){p++;const E="L-"+b.start+"-"+b.end,_="LS-"+b.start,A="LE-"+b.end,I={};b.type==="arrow_open"?I.arrowhead="none":I.arrowhead="normal";let B="",N="";if(b.style!==void 0){const R=im(b.style);B=R.style,N=R.labelStyle}else switch(b.stroke){case"normal":B="fill:none",w!==void 0&&(B=w),m!==void 0&&(N=m);break;case"dotted":B="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":B=" stroke-width: 3.5px;fill:none";break}I.style=B,I.labelStyle=N,b.interpolate!==void 0?I.curve=ew(b.interpolate,cg):i.defaultInterpolate!==void 0?I.curve=ew(i.defaultInterpolate,cg):I.curve=ew(DNt.curve,cg),b.text===void 0?b.style!==void 0&&(I.arrowheadStyle="fill: #333"):(I.arrowheadStyle="fill: #333",I.labelpos="c",o1(Oe().flowchart.htmlLabels)?(I.labelType="html",I.label=`${b.text.replace(/fa[blrs]?:fa-[\w-]+/g,R=>``)}`):(I.labelType="text",I.label=b.text.replace(Kr.lineBreakRegex,` -`),b.style===void 0&&(I.style=I.style||"stroke: #333; stroke-width: 1.5px;fill:none"),I.labelStyle=I.labelStyle.replace("color:","fill:"))),I.id=E,I.class=_+" "+A,I.minlen=b.length||1,a.setEdge(f.db.lookUpDomId(b.start),f.db.lookUpDomId(b.end),I,p)})},hRe={setConf:lRe,addVertices:INt,addEdges:ONt,getClasses:function(i,a){return Ut.info("Extracting classes"),a.db.getClasses()},draw:function(i,a,f,p){Ut.info("Drawing flowchart");const{securityLevel:w,flowchart:m}=Oe();let b;w==="sandbox"&&(b=yr("#i"+a));const E=yr(w==="sandbox"?b.nodes()[0].contentDocument.body:"body"),_=w==="sandbox"?b.nodes()[0].contentDocument:document;let A=p.db.getDirection();A===void 0&&(A="TD");const I=m.nodeSpacing||50,B=m.rankSpacing||50,N=new c1({multigraph:!0,compound:!0}).setGraph({rankdir:A,nodesep:I,ranksep:B,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});let R;const z=p.db.getSubGraphs();for(let ft=z.length-1;ft>=0;ft--)R=z[ft],p.db.addVertex(R.id,R.title,"group",void 0,R.classes);const W=p.db.getVertices();Ut.warn("Get vertices",W);const et=p.db.getEdges();let st=0;for(st=z.length-1;st>=0;st--){R=z[st],sMt("cluster").append("text");for(let ft=0;ft{a.forEach(w=>{pRe[w](i,f,p)})},pRe={extension:(i,a,f)=>{Ut.trace("Making markers for ",f),i.append("defs").append("marker").attr("id",f+"_"+a+"-extensionStart").attr("class","marker extension "+a).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),i.append("defs").append("marker").attr("id",f+"_"+a+"-extensionEnd").attr("class","marker extension "+a).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},composition:(i,a,f)=>{i.append("defs").append("marker").attr("id",f+"_"+a+"-compositionStart").attr("class","marker composition "+a).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",f+"_"+a+"-compositionEnd").attr("class","marker composition "+a).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},aggregation:(i,a,f)=>{i.append("defs").append("marker").attr("id",f+"_"+a+"-aggregationStart").attr("class","marker aggregation "+a).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",f+"_"+a+"-aggregationEnd").attr("class","marker aggregation "+a).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},dependency:(i,a,f)=>{i.append("defs").append("marker").attr("id",f+"_"+a+"-dependencyStart").attr("class","marker dependency "+a).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",f+"_"+a+"-dependencyEnd").attr("class","marker dependency "+a).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},lollipop:(i,a,f)=>{i.append("defs").append("marker").attr("id",f+"_"+a+"-lollipopStart").attr("class","marker lollipop "+a).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),i.append("defs").append("marker").attr("id",f+"_"+a+"-lollipopEnd").attr("class","marker lollipop "+a).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},point:(i,a,f)=>{i.append("marker").attr("id",f+"_"+a+"-pointEnd").attr("class","marker "+a).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),i.append("marker").attr("id",f+"_"+a+"-pointStart").attr("class","marker "+a).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},circle:(i,a,f)=>{i.append("marker").attr("id",f+"_"+a+"-circleEnd").attr("class","marker "+a).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),i.append("marker").attr("id",f+"_"+a+"-circleStart").attr("class","marker "+a).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},cross:(i,a,f)=>{i.append("marker").attr("id",f+"_"+a+"-crossEnd").attr("class","marker cross "+a).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),i.append("marker").attr("id",f+"_"+a+"-crossStart").attr("class","marker cross "+a).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},barb:(i,a,f)=>{i.append("defs").append("marker").attr("id",f+"_"+a+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")}},PNt=gRe;function bRe(i,a){a&&i.attr("style",a)}function wRe(i){const a=yr(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),f=a.append("xhtml:div"),p=i.label,w=i.isNode?"nodeLabel":"edgeLabel";return f.html('"+p+""),bRe(f,i.labelStyle),f.style("display","inline-block"),f.style("white-space","nowrap"),f.attr("xmlns","http://www.w3.org/1999/xhtml"),a.node()}const gp=(i,a,f,p)=>{let w=i||"";if(typeof w=="object"&&(w=w[0]),o1(Oe().flowchart.htmlLabels)){w=w.replace(/\\n|\n/g,"
"),Ut.info("vertexText"+w);const m={isNode:p,label:uF(w).replace(/fa[blrs]?:fa-[\w-]+/g,E=>``),labelStyle:a.replace("fill:","color:")};return wRe(m)}else{const m=document.createElementNS("http://www.w3.org/2000/svg","text");m.setAttribute("style",a.replace("color:","fill:"));let b=[];typeof w=="string"?b=w.split(/\\n|\n|/gi):Array.isArray(w)?b=w:b=[];for(const E of b){const _=document.createElementNS("http://www.w3.org/2000/svg","tspan");_.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),_.setAttribute("dy","1em"),_.setAttribute("x","0"),f?_.setAttribute("class","title-row"):_.setAttribute("class","row"),_.textContent=E.trim(),m.appendChild(_)}return m}},vRe={};function mRe(i,a){const f=a||vRe,p=typeof f.includeImageAlt=="boolean"?f.includeImageAlt:!0,w=typeof f.includeHtml=="boolean"?f.includeHtml:!0;return FNt(i,p,w)}function FNt(i,a,f){if(yRe(i)){if("value"in i)return i.type==="html"&&!f?"":i.value;if(a&&"alt"in i&&i.alt)return i.alt;if("children"in i)return NNt(i.children,a,f)}return Array.isArray(i)?NNt(i,a,f):""}function NNt(i,a,f){const p=[];let w=-1;for(;++ww?0:w+a:a=a>w?w:a,f=f>0?f:0,p.length<1e4)b=Array.from(p),b.unshift(a,f),i.splice(...b);else for(f&&i.splice(a,f);m0?(m3(i,i.length,0,a),i):a}const BNt={}.hasOwnProperty;function xRe(i){const a={};let f=-1;for(;++fb))return;const ut=a.events.length;let vt=ut,X,pt;for(;vt--;)if(a.events[vt][0]==="exit"&&a.events[vt][1].type==="chunkFlow"){if(X){pt=a.events[vt][1].end;break}X=!0}for(st(p),ft=ut;ftbt;){const yt=f[mt];a.containerState=yt[1],yt[0].exit.call(a,i)}f.length=bt}function at(){w.write([null]),m=void 0,w=void 0,a.containerState._closeFlow=void 0}}function PRe(i,a,f){return il(i,i.attempt(this.parser.constructs.document,a,f),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function jNt(i){if(i===null||pp(i)||LRe(i))return 1;if(ARe(i))return 2}function _0t(i,a,f){const p=[];let w=-1;for(;++w1&&i[f][1].end.offset-i[f][1].start.offset>1?2:1;const B=Object.assign({},i[p][1].end),N=Object.assign({},i[f][1].start);$Nt(B,-_),$Nt(N,_),b={type:_>1?"strongSequence":"emphasisSequence",start:B,end:Object.assign({},i[p][1].end)},E={type:_>1?"strongSequence":"emphasisSequence",start:Object.assign({},i[f][1].start),end:N},m={type:_>1?"strongText":"emphasisText",start:Object.assign({},i[p][1].end),end:Object.assign({},i[f][1].start)},w={type:_>1?"strong":"emphasis",start:Object.assign({},b.start),end:Object.assign({},E.end)},i[p][1].end=Object.assign({},b.start),i[f][1].start=Object.assign({},E.end),A=[],i[p][1].end.offset-i[p][1].start.offset&&(A=sw(A,[["enter",i[p][1],a],["exit",i[p][1],a]])),A=sw(A,[["enter",w,a],["enter",b,a],["exit",b,a],["enter",m,a]]),A=sw(A,_0t(a.parser.constructs.insideSpan.null,i.slice(p+1,f),a)),A=sw(A,[["exit",m,a],["enter",E,a],["exit",E,a],["exit",w,a]]),i[f][1].end.offset-i[f][1].start.offset?(I=2,A=sw(A,[["enter",i[f][1],a],["exit",i[f][1],a]])):I=0,m3(i,p-1,f-p+3,A),f=p+A.length-I-2;break}}for(f=-1;++f0&&Wc(ft)?il(i,at,"linePrefix",m+1)(ft):at(ft)}function at(ft){return ft===null||xa(ft)?i.check(GNt,W,mt)(ft):(i.enter("codeFlowValue"),bt(ft))}function bt(ft){return ft===null||xa(ft)?(i.exit("codeFlowValue"),at(ft)):(i.consume(ft),bt)}function mt(ft){return i.exit("codeFenced"),a(ft)}function yt(ft,ut,vt){let X=0;return pt;function pt(Ot){return ft.enter("lineEnding"),ft.consume(Ot),ft.exit("lineEnding"),U}function U(Ot){return ft.enter("codeFencedFence"),Wc(Ot)?il(ft,Tt,"linePrefix",p.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(Ot):Tt(Ot)}function Tt(Ot){return Ot===E?(ft.enter("codeFencedFenceSequence"),nt(Ot)):vt(Ot)}function nt(Ot){return Ot===E?(X++,ft.consume(Ot),nt):X>=b?(ft.exit("codeFencedFenceSequence"),Wc(Ot)?il(ft,It,"whitespace")(Ot):It(Ot)):vt(Ot)}function It(Ot){return Ot===null||xa(Ot)?(ft.exit("codeFencedFence"),ut(Ot)):vt(Ot)}}}function URe(i,a,f){const p=this;return w;function w(b){return b===null?f(b):(i.enter("lineEnding"),i.consume(b),i.exit("lineEnding"),m)}function m(b){return p.parser.lazy[p.now().line]?f(b):a(b)}}const L0t={name:"codeIndented",tokenize:YRe},WRe={tokenize:KRe,partial:!0};function YRe(i,a,f){const p=this;return w;function w(A){return i.enter("codeIndented"),il(i,m,"linePrefix",4+1)(A)}function m(A){const I=p.events[p.events.length-1];return I&&I[1].type==="linePrefix"&&I[2].sliceSerialize(I[1],!0).length>=4?b(A):f(A)}function b(A){return A===null?_(A):xa(A)?i.attempt(WRe,b,_)(A):(i.enter("codeFlowValue"),E(A))}function E(A){return A===null||xa(A)?(i.exit("codeFlowValue"),b(A)):(i.consume(A),E)}function _(A){return i.exit("codeIndented"),a(A)}}function KRe(i,a,f){const p=this;return w;function w(b){return p.parser.lazy[p.now().line]?f(b):xa(b)?(i.enter("lineEnding"),i.consume(b),i.exit("lineEnding"),w):il(i,m,"linePrefix",4+1)(b)}function m(b){const E=p.events[p.events.length-1];return E&&E[1].type==="linePrefix"&&E[2].sliceSerialize(E[1],!0).length>=4?a(b):xa(b)?w(b):f(b)}}const XRe={name:"codeText",tokenize:JRe,resolve:QRe,previous:ZRe};function QRe(i){let a=i.length-4,f=3,p,w;if((i[f][1].type==="lineEnding"||i[f][1].type==="space")&&(i[a][1].type==="lineEnding"||i[a][1].type==="space")){for(p=f;++p=4?a(b):i.interrupt(p.parser.constructs.flow,f,a)(b)}}function YNt(i,a,f,p,w,m,b,E,_){const A=_||Number.POSITIVE_INFINITY;let I=0;return B;function B(st){return st===60?(i.enter(p),i.enter(w),i.enter(m),i.consume(st),i.exit(m),N):st===null||st===32||st===41||T0t(st)?f(st):(i.enter(p),i.enter(b),i.enter(E),i.enter("chunkString",{contentType:"string"}),W(st))}function N(st){return st===62?(i.enter(m),i.consume(st),i.exit(m),i.exit(w),i.exit(p),a):(i.enter(E),i.enter("chunkString",{contentType:"string"}),R(st))}function R(st){return st===62?(i.exit("chunkString"),i.exit(E),N(st)):st===null||st===60||xa(st)?f(st):(i.consume(st),st===92?z:R)}function z(st){return st===60||st===62||st===92?(i.consume(st),R):R(st)}function W(st){return!I&&(st===null||st===41||pp(st))?(i.exit("chunkString"),i.exit(E),i.exit(b),i.exit(p),a(st)):I999||R===null||R===91||R===93&&!_||R===94&&!E&&"_hiddenFootnoteSupport"in b.parser.constructs?f(R):R===93?(i.exit(m),i.enter(w),i.consume(R),i.exit(w),i.exit(p),a):xa(R)?(i.enter("lineEnding"),i.consume(R),i.exit("lineEnding"),I):(i.enter("chunkString",{contentType:"string"}),B(R))}function B(R){return R===null||R===91||R===93||xa(R)||E++>999?(i.exit("chunkString"),I(R)):(i.consume(R),_||(_=!Wc(R)),R===92?N:B)}function N(R){return R===91||R===92||R===93?(i.consume(R),E++,B):B(R)}}function XNt(i,a,f,p,w,m){let b;return E;function E(N){return N===34||N===39||N===40?(i.enter(p),i.enter(w),i.consume(N),i.exit(w),b=N===40?41:N,_):f(N)}function _(N){return N===b?(i.enter(w),i.consume(N),i.exit(w),i.exit(p),a):(i.enter(m),A(N))}function A(N){return N===b?(i.exit(m),_(b)):N===null?f(N):xa(N)?(i.enter("lineEnding"),i.consume(N),i.exit("lineEnding"),il(i,A,"linePrefix")):(i.enter("chunkString",{contentType:"string"}),I(N))}function I(N){return N===b||N===null||xa(N)?(i.exit("chunkString"),A(N)):(i.consume(N),N===92?B:I)}function B(N){return N===b||N===92?(i.consume(N),I):I(N)}}function TF(i,a){let f;return p;function p(w){return xa(w)?(i.enter("lineEnding"),i.consume(w),i.exit("lineEnding"),f=!0,p):Wc(w)?il(i,p,f?"linePrefix":"lineSuffix")(w):a(w)}}function oL(i){return i.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const aje={name:"definition",tokenize:cje},oje={tokenize:uje,partial:!0};function cje(i,a,f){const p=this;let w;return m;function m(R){return i.enter("definition"),b(R)}function b(R){return KNt.call(p,i,E,f,"definitionLabel","definitionLabelMarker","definitionLabelString")(R)}function E(R){return w=oL(p.sliceSerialize(p.events[p.events.length-1][1]).slice(1,-1)),R===58?(i.enter("definitionMarker"),i.consume(R),i.exit("definitionMarker"),_):f(R)}function _(R){return pp(R)?TF(i,A)(R):A(R)}function A(R){return YNt(i,I,f,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(R)}function I(R){return i.attempt(oje,B,B)(R)}function B(R){return Wc(R)?il(i,N,"whitespace")(R):N(R)}function N(R){return R===null||xa(R)?(i.exit("definition"),p.parser.defined.push(w),a(R)):f(R)}}function uje(i,a,f){return p;function p(E){return pp(E)?TF(i,w)(E):f(E)}function w(E){return XNt(i,m,f,"definitionTitle","definitionTitleMarker","definitionTitleString")(E)}function m(E){return Wc(E)?il(i,b,"whitespace")(E):b(E)}function b(E){return E===null||xa(E)?a(E):f(E)}}const lje={name:"hardBreakEscape",tokenize:hje};function hje(i,a,f){return p;function p(m){return i.enter("hardBreakEscape"),i.consume(m),w}function w(m){return xa(m)?(i.exit("hardBreakEscape"),a(m)):f(m)}}const fje={name:"headingAtx",tokenize:gje,resolve:dje};function dje(i,a){let f=i.length-2,p=3,w,m;return i[p][1].type==="whitespace"&&(p+=2),f-2>p&&i[f][1].type==="whitespace"&&(f-=2),i[f][1].type==="atxHeadingSequence"&&(p===f-1||f-4>p&&i[f-2][1].type==="whitespace")&&(f-=p+1===f?2:4),f>p&&(w={type:"atxHeadingText",start:i[p][1].start,end:i[f][1].end},m={type:"chunkText",start:i[p][1].start,end:i[f][1].end,contentType:"text"},m3(i,p,f-p+1,[["enter",w,a],["enter",m,a],["exit",m,a],["exit",w,a]])),i}function gje(i,a,f){let p=0;return w;function w(I){return i.enter("atxHeading"),m(I)}function m(I){return i.enter("atxHeadingSequence"),b(I)}function b(I){return I===35&&p++<6?(i.consume(I),b):I===null||pp(I)?(i.exit("atxHeadingSequence"),E(I)):f(I)}function E(I){return I===35?(i.enter("atxHeadingSequence"),_(I)):I===null||xa(I)?(i.exit("atxHeading"),a(I)):Wc(I)?il(i,E,"whitespace")(I):(i.enter("atxHeadingText"),A(I))}function _(I){return I===35?(i.consume(I),_):(i.exit("atxHeadingSequence"),E(I))}function A(I){return I===null||I===35||pp(I)?(i.exit("atxHeadingText"),E(I)):(i.consume(I),A)}}const pje=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],QNt=["pre","script","style","textarea"],bje={name:"htmlFlow",tokenize:yje,resolveTo:mje,concrete:!0},wje={tokenize:kje,partial:!0},vje={tokenize:xje,partial:!0};function mje(i){let a=i.length;for(;a--&&!(i[a][0]==="enter"&&i[a][1].type==="htmlFlow"););return a>1&&i[a-2][1].type==="linePrefix"&&(i[a][1].start=i[a-2][1].start,i[a+1][1].start=i[a-2][1].start,i.splice(a-2,2)),i}function yje(i,a,f){const p=this;let w,m,b,E,_;return A;function A(Ft){return I(Ft)}function I(Ft){return i.enter("htmlFlow"),i.enter("htmlFlowData"),i.consume(Ft),B}function B(Ft){return Ft===33?(i.consume(Ft),N):Ft===47?(i.consume(Ft),m=!0,W):Ft===63?(i.consume(Ft),w=3,p.interrupt?a:xt):y3(Ft)?(i.consume(Ft),b=String.fromCharCode(Ft),et):f(Ft)}function N(Ft){return Ft===45?(i.consume(Ft),w=2,R):Ft===91?(i.consume(Ft),w=5,E=0,z):y3(Ft)?(i.consume(Ft),w=4,p.interrupt?a:xt):f(Ft)}function R(Ft){return Ft===45?(i.consume(Ft),p.interrupt?a:xt):f(Ft)}function z(Ft){const gn="CDATA[";return Ft===gn.charCodeAt(E++)?(i.consume(Ft),E===gn.length?p.interrupt?a:Tt:z):f(Ft)}function W(Ft){return y3(Ft)?(i.consume(Ft),b=String.fromCharCode(Ft),et):f(Ft)}function et(Ft){if(Ft===null||Ft===47||Ft===62||pp(Ft)){const gn=Ft===47,Se=b.toLowerCase();return!gn&&!m&&QNt.includes(Se)?(w=1,p.interrupt?a(Ft):Tt(Ft)):pje.includes(b.toLowerCase())?(w=6,gn?(i.consume(Ft),st):p.interrupt?a(Ft):Tt(Ft)):(w=7,p.interrupt&&!p.parser.lazy[p.now().line]?f(Ft):m?at(Ft):bt(Ft))}return Ft===45||lm(Ft)?(i.consume(Ft),b+=String.fromCharCode(Ft),et):f(Ft)}function st(Ft){return Ft===62?(i.consume(Ft),p.interrupt?a:Tt):f(Ft)}function at(Ft){return Wc(Ft)?(i.consume(Ft),at):pt(Ft)}function bt(Ft){return Ft===47?(i.consume(Ft),pt):Ft===58||Ft===95||y3(Ft)?(i.consume(Ft),mt):Wc(Ft)?(i.consume(Ft),bt):pt(Ft)}function mt(Ft){return Ft===45||Ft===46||Ft===58||Ft===95||lm(Ft)?(i.consume(Ft),mt):yt(Ft)}function yt(Ft){return Ft===61?(i.consume(Ft),ft):Wc(Ft)?(i.consume(Ft),yt):bt(Ft)}function ft(Ft){return Ft===null||Ft===60||Ft===61||Ft===62||Ft===96?f(Ft):Ft===34||Ft===39?(i.consume(Ft),_=Ft,ut):Wc(Ft)?(i.consume(Ft),ft):vt(Ft)}function ut(Ft){return Ft===_?(i.consume(Ft),_=null,X):Ft===null||xa(Ft)?f(Ft):(i.consume(Ft),ut)}function vt(Ft){return Ft===null||Ft===34||Ft===39||Ft===47||Ft===60||Ft===61||Ft===62||Ft===96||pp(Ft)?yt(Ft):(i.consume(Ft),vt)}function X(Ft){return Ft===47||Ft===62||Wc(Ft)?bt(Ft):f(Ft)}function pt(Ft){return Ft===62?(i.consume(Ft),U):f(Ft)}function U(Ft){return Ft===null||xa(Ft)?Tt(Ft):Wc(Ft)?(i.consume(Ft),U):f(Ft)}function Tt(Ft){return Ft===45&&w===2?(i.consume(Ft),Bt):Ft===60&&w===1?(i.consume(Ft),Et):Ft===62&&w===4?(i.consume(Ft),Ht):Ft===63&&w===3?(i.consume(Ft),xt):Ft===93&&w===5?(i.consume(Ft),Ct):xa(Ft)&&(w===6||w===7)?(i.exit("htmlFlowData"),i.check(wje,Le,nt)(Ft)):Ft===null||xa(Ft)?(i.exit("htmlFlowData"),nt(Ft)):(i.consume(Ft),Tt)}function nt(Ft){return i.check(vje,It,Le)(Ft)}function It(Ft){return i.enter("lineEnding"),i.consume(Ft),i.exit("lineEnding"),Ot}function Ot(Ft){return Ft===null||xa(Ft)?nt(Ft):(i.enter("htmlFlowData"),Tt(Ft))}function Bt(Ft){return Ft===45?(i.consume(Ft),xt):Tt(Ft)}function Et(Ft){return Ft===47?(i.consume(Ft),b="",Z):Tt(Ft)}function Z(Ft){if(Ft===62){const gn=b.toLowerCase();return QNt.includes(gn)?(i.consume(Ft),Ht):Tt(Ft)}return y3(Ft)&&b.length<8?(i.consume(Ft),b+=String.fromCharCode(Ft),Z):Tt(Ft)}function Ct(Ft){return Ft===93?(i.consume(Ft),xt):Tt(Ft)}function xt(Ft){return Ft===62?(i.consume(Ft),Ht):Ft===45&&w===2?(i.consume(Ft),xt):Tt(Ft)}function Ht(Ft){return Ft===null||xa(Ft)?(i.exit("htmlFlowData"),Le(Ft)):(i.consume(Ft),Ht)}function Le(Ft){return i.exit("htmlFlow"),a(Ft)}}function xje(i,a,f){const p=this;return w;function w(b){return xa(b)?(i.enter("lineEnding"),i.consume(b),i.exit("lineEnding"),m):f(b)}function m(b){return p.parser.lazy[p.now().line]?f(b):a(b)}}function kje(i,a,f){return p;function p(w){return i.enter("lineEnding"),i.consume(w),i.exit("lineEnding"),i.attempt(yY,a,f)}}const Eje={name:"htmlText",tokenize:Tje};function Tje(i,a,f){const p=this;let w,m,b;return E;function E(xt){return i.enter("htmlText"),i.enter("htmlTextData"),i.consume(xt),_}function _(xt){return xt===33?(i.consume(xt),A):xt===47?(i.consume(xt),yt):xt===63?(i.consume(xt),bt):y3(xt)?(i.consume(xt),vt):f(xt)}function A(xt){return xt===45?(i.consume(xt),I):xt===91?(i.consume(xt),m=0,z):y3(xt)?(i.consume(xt),at):f(xt)}function I(xt){return xt===45?(i.consume(xt),R):f(xt)}function B(xt){return xt===null?f(xt):xt===45?(i.consume(xt),N):xa(xt)?(b=B,Et(xt)):(i.consume(xt),B)}function N(xt){return xt===45?(i.consume(xt),R):B(xt)}function R(xt){return xt===62?Bt(xt):xt===45?N(xt):B(xt)}function z(xt){const Ht="CDATA[";return xt===Ht.charCodeAt(m++)?(i.consume(xt),m===Ht.length?W:z):f(xt)}function W(xt){return xt===null?f(xt):xt===93?(i.consume(xt),et):xa(xt)?(b=W,Et(xt)):(i.consume(xt),W)}function et(xt){return xt===93?(i.consume(xt),st):W(xt)}function st(xt){return xt===62?Bt(xt):xt===93?(i.consume(xt),st):W(xt)}function at(xt){return xt===null||xt===62?Bt(xt):xa(xt)?(b=at,Et(xt)):(i.consume(xt),at)}function bt(xt){return xt===null?f(xt):xt===63?(i.consume(xt),mt):xa(xt)?(b=bt,Et(xt)):(i.consume(xt),bt)}function mt(xt){return xt===62?Bt(xt):bt(xt)}function yt(xt){return y3(xt)?(i.consume(xt),ft):f(xt)}function ft(xt){return xt===45||lm(xt)?(i.consume(xt),ft):ut(xt)}function ut(xt){return xa(xt)?(b=ut,Et(xt)):Wc(xt)?(i.consume(xt),ut):Bt(xt)}function vt(xt){return xt===45||lm(xt)?(i.consume(xt),vt):xt===47||xt===62||pp(xt)?X(xt):f(xt)}function X(xt){return xt===47?(i.consume(xt),Bt):xt===58||xt===95||y3(xt)?(i.consume(xt),pt):xa(xt)?(b=X,Et(xt)):Wc(xt)?(i.consume(xt),X):Bt(xt)}function pt(xt){return xt===45||xt===46||xt===58||xt===95||lm(xt)?(i.consume(xt),pt):U(xt)}function U(xt){return xt===61?(i.consume(xt),Tt):xa(xt)?(b=U,Et(xt)):Wc(xt)?(i.consume(xt),U):X(xt)}function Tt(xt){return xt===null||xt===60||xt===61||xt===62||xt===96?f(xt):xt===34||xt===39?(i.consume(xt),w=xt,nt):xa(xt)?(b=Tt,Et(xt)):Wc(xt)?(i.consume(xt),Tt):(i.consume(xt),It)}function nt(xt){return xt===w?(i.consume(xt),w=void 0,Ot):xt===null?f(xt):xa(xt)?(b=nt,Et(xt)):(i.consume(xt),nt)}function It(xt){return xt===null||xt===34||xt===39||xt===60||xt===61||xt===96?f(xt):xt===47||xt===62||pp(xt)?X(xt):(i.consume(xt),It)}function Ot(xt){return xt===47||xt===62||pp(xt)?X(xt):f(xt)}function Bt(xt){return xt===62?(i.consume(xt),i.exit("htmlTextData"),i.exit("htmlText"),a):f(xt)}function Et(xt){return i.exit("htmlTextData"),i.enter("lineEnding"),i.consume(xt),i.exit("lineEnding"),Z}function Z(xt){return Wc(xt)?il(i,Ct,"linePrefix",p.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(xt):Ct(xt)}function Ct(xt){return i.enter("htmlTextData"),b(xt)}}const M0t={name:"labelEnd",tokenize:Mje,resolveTo:Lje,resolveAll:Aje},Cje={tokenize:Dje},_je={tokenize:Ije},Sje={tokenize:Oje};function Aje(i){let a=-1;for(;++a=3&&(A===null||xa(A))?(i.exit("thematicBreak"),a(A)):f(A)}function _(A){return A===w?(i.consume(A),p++,_):(i.exit("thematicBreakSequence"),Wc(A)?il(i,E,"whitespace")(A):E(A))}}const bp={name:"list",tokenize:qje,continuation:{tokenize:Hje},exit:Gje},$je={tokenize:Uje,partial:!0},zje={tokenize:Vje,partial:!0};function qje(i,a,f){const p=this,w=p.events[p.events.length-1];let m=w&&w[1].type==="linePrefix"?w[2].sliceSerialize(w[1],!0).length:0,b=0;return E;function E(R){const z=p.containerState.type||(R===42||R===43||R===45?"listUnordered":"listOrdered");if(z==="listUnordered"?!p.containerState.marker||R===p.containerState.marker:C0t(R)){if(p.containerState.type||(p.containerState.type=z,i.enter(z,{_container:!0})),z==="listUnordered")return i.enter("listItemPrefix"),R===42||R===45?i.check(xY,f,A)(R):A(R);if(!p.interrupt||R===49)return i.enter("listItemPrefix"),i.enter("listItemValue"),_(R)}return f(R)}function _(R){return C0t(R)&&++b<10?(i.consume(R),_):(!p.interrupt||b<2)&&(p.containerState.marker?R===p.containerState.marker:R===41||R===46)?(i.exit("listItemValue"),A(R)):f(R)}function A(R){return i.enter("listItemMarker"),i.consume(R),i.exit("listItemMarker"),p.containerState.marker=p.containerState.marker||R,i.check(yY,p.interrupt?f:I,i.attempt($je,N,B))}function I(R){return p.containerState.initialBlankLine=!0,m++,N(R)}function B(R){return Wc(R)?(i.enter("listItemPrefixWhitespace"),i.consume(R),i.exit("listItemPrefixWhitespace"),N):f(R)}function N(R){return p.containerState.size=m+p.sliceSerialize(i.exit("listItemPrefix"),!0).length,a(R)}}function Hje(i,a,f){const p=this;return p.containerState._closeFlow=void 0,i.check(yY,w,m);function w(E){return p.containerState.furtherBlankLines=p.containerState.furtherBlankLines||p.containerState.initialBlankLine,il(i,a,"listItemIndent",p.containerState.size+1)(E)}function m(E){return p.containerState.furtherBlankLines||!Wc(E)?(p.containerState.furtherBlankLines=void 0,p.containerState.initialBlankLine=void 0,b(E)):(p.containerState.furtherBlankLines=void 0,p.containerState.initialBlankLine=void 0,i.attempt(zje,a,b)(E))}function b(E){return p.containerState._closeFlow=!0,p.interrupt=void 0,il(i,i.attempt(bp,a,f),"linePrefix",p.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(E)}}function Vje(i,a,f){const p=this;return il(i,w,"listItemIndent",p.containerState.size+1);function w(m){const b=p.events[p.events.length-1];return b&&b[1].type==="listItemIndent"&&b[2].sliceSerialize(b[1],!0).length===p.containerState.size?a(m):f(m)}}function Gje(i){i.exit(this.containerState.type)}function Uje(i,a,f){const p=this;return il(i,w,"listItemPrefixWhitespace",p.parser.constructs.disable.null.includes("codeIndented")?void 0:4+1);function w(m){const b=p.events[p.events.length-1];return!Wc(m)&&b&&b[1].type==="listItemPrefixWhitespace"?a(m):f(m)}}const ZNt={name:"setextUnderline",tokenize:Yje,resolveTo:Wje};function Wje(i,a){let f=i.length,p,w,m;for(;f--;)if(i[f][0]==="enter"){if(i[f][1].type==="content"){p=f;break}i[f][1].type==="paragraph"&&(w=f)}else i[f][1].type==="content"&&i.splice(f,1),!m&&i[f][1].type==="definition"&&(m=f);const b={type:"setextHeading",start:Object.assign({},i[w][1].start),end:Object.assign({},i[i.length-1][1].end)};return i[w][1].type="setextHeadingText",m?(i.splice(w,0,["enter",b,a]),i.splice(m+1,0,["exit",i[p][1],a]),i[p][1].end=Object.assign({},i[m][1].end)):i[p][1]=b,i.push(["exit",b,a]),i}function Yje(i,a,f){const p=this;let w;return m;function m(A){let I=p.events.length,B;for(;I--;)if(p.events[I][1].type!=="lineEnding"&&p.events[I][1].type!=="linePrefix"&&p.events[I][1].type!=="content"){B=p.events[I][1].type==="paragraph";break}return!p.parser.lazy[p.now().line]&&(p.interrupt||B)?(i.enter("setextHeadingLine"),w=A,b(A)):f(A)}function b(A){return i.enter("setextHeadingLineSequence"),E(A)}function E(A){return A===w?(i.consume(A),E):(i.exit("setextHeadingLineSequence"),Wc(A)?il(i,_,"lineSuffix")(A):_(A))}function _(A){return A===null||xa(A)?(i.exit("setextHeadingLine"),a(A)):f(A)}}const Kje={tokenize:Xje};function Xje(i){const a=this,f=i.attempt(yY,p,i.attempt(this.parser.constructs.flowInitial,w,il(i,i.attempt(this.parser.constructs.flow,w,i.attempt(eje,w)),"linePrefix")));return f;function p(m){if(m===null){i.consume(m);return}return i.enter("lineEndingBlank"),i.consume(m),i.exit("lineEndingBlank"),a.currentConstruct=void 0,f}function w(m){if(m===null){i.consume(m);return}return i.enter("lineEnding"),i.consume(m),i.exit("lineEnding"),a.currentConstruct=void 0,f}}const Qje={resolveAll:tBt()},Zje=JNt("string"),Jje=JNt("text");function JNt(i){return{tokenize:a,resolveAll:tBt(i==="text"?t$e:void 0)};function a(f){const p=this,w=this.parser.constructs[i],m=f.attempt(w,b,E);return b;function b(I){return A(I)?m(I):E(I)}function E(I){if(I===null){f.consume(I);return}return f.enter("data"),f.consume(I),_}function _(I){return A(I)?(f.exit("data"),m(I)):(f.consume(I),_)}function A(I){if(I===null)return!0;const B=w[I];let N=-1;if(B)for(;++N-1){const E=b[0];typeof E=="string"?b[0]=E.slice(p):b.shift()}m>0&&b.push(i[w].slice(0,m))}return b}function r$e(i,a){let f=-1;const p=[];let w;for(;++f{Iqe.setConf(i),$be.setWrap(s)}}},Symbol.toStringTag,{value:"Module"}));var Ube=function(){var i=function($0,Wi,Bs,Qa){for(Bs=Bs||{},Qa=$0.length;Qa--;Bs[$0[Qa]]=Wi);return Bs},s=[1,4],u=[1,3],d=[1,5],p=[1,8,9,10,11,27,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],v=[2,2],b=[1,13],y=[1,14],T=[1,15],_=[1,16],A=[1,23],P=[1,25],R=[1,26],F=[1,27],j=[1,49],K=[1,48],ee=[1,29],ie=[1,30],oe=[1,31],pe=[1,32],be=[1,33],ae=[1,44],ne=[1,46],se=[1,42],de=[1,47],X=[1,43],ge=[1,50],W=[1,45],xe=[1,51],U=[1,52],Fe=[1,34],Pe=[1,35],je=[1,36],Ie=[1,37],Se=[1,57],Ce=[1,8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],ke=[1,61],Ke=[1,60],Ft=[1,62],Ne=[8,9,11,73,75],gn=[1,88],_t=[1,93],Et=[1,92],Gt=[1,89],ln=[1,85],xt=[1,91],Pt=[1,87],Qe=[1,94],Dt=[1,90],kt=[1,95],On=[1,86],ht=[8,9,10,11,73,75],zr=[8,9,10,11,44,73,75],yt=[8,9,10,11,29,42,44,46,48,50,52,54,56,58,61,63,65,66,68,73,75,86,99,102,103,106,108,111,112,113],ji=[8,9,11,42,58,73,75,86,99,102,103,106,108,111,112,113],xi=[42,58,86,99,102,103,106,108,111,112,113],Ma=[1,121],zs=[1,120],ao=[1,128],Tr=[1,142],Fn=[1,143],qn=[1,144],Un=[1,145],At=[1,130],wt=[1,132],on=[1,136],fn=[1,137],An=[1,138],oo=[1,139],jo=[1,140],$o=[1,141],Pa=[1,146],wo=[1,147],_s=[1,126],tl=[1,127],da=[1,134],j0=[1,129],pm=[1,133],Ml=[1,131],Xc=[8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],Bc=[1,149],ja=[8,9,11],Ou=[8,9,10,11,14,42,58,86,102,103,106,108,111,112,113],Sa=[1,169],Po=[1,165],Fc=[1,166],xa=[1,170],Ba=[1,167],ga=[1,168],kh=[75,113,116],lu=[8,9,10,11,12,14,27,29,32,42,58,73,81,82,83,84,85,86,87,102,106,108,111,112,113],o5=[10,103],Wh=[31,47,49,51,53,55,60,62,64,65,67,69,113,114,115],od=[1,235],Gd=[1,233],cd=[1,237],Kd=[1,231],$g=[1,232],as=[1,234],wn=[1,236],Zr=[1,238],Zi=[1,255],nu=[8,9,11,103],vu=[8,9,10,11,58,81,102,103,106,107,108,109],Dl={trace:function(){},yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,link:39,node:40,styledVertex:41,AMP:42,vertex:43,STYLE_SEPARATOR:44,idString:45,DOUBLECIRCLESTART:46,DOUBLECIRCLEEND:47,PS:48,PE:49,"(-":50,"-)":51,STADIUMSTART:52,STADIUMEND:53,SUBROUTINESTART:54,SUBROUTINEEND:55,VERTEX_WITH_PROPS_START:56,"NODE_STRING[field]":57,COLON:58,"NODE_STRING[value]":59,PIPE:60,CYLINDERSTART:61,CYLINDEREND:62,DIAMOND_START:63,DIAMOND_STOP:64,TAGEND:65,TRAPSTART:66,TRAPEND:67,INVTRAPSTART:68,INVTRAPEND:69,linkStatement:70,arrowText:71,TESTSTR:72,START_LINK:73,edgeText:74,LINK:75,edgeTextToken:76,STR:77,MD_STR:78,textToken:79,keywords:80,STYLE:81,LINKSTYLE:82,CLASSDEF:83,CLASS:84,CLICK:85,DOWN:86,UP:87,textNoTagsToken:88,stylesOpt:89,"idString[vertex]":90,"idString[class]":91,CALLBACKNAME:92,CALLBACKARGS:93,HREF:94,LINK_TARGET:95,"STR[link]":96,"STR[tooltip]":97,alphaNum:98,DEFAULT:99,numList:100,INTERPOLATE:101,NUM:102,COMMA:103,style:104,styleComponent:105,NODE_STRING:106,UNIT:107,BRKT:108,PCT:109,idStringToken:110,MINUS:111,MULT:112,UNICODE_TEXT:113,TEXT:114,TAGSTART:115,EDGE_TEXT:116,alphaNumToken:117,direction_tb:118,direction_bt:119,direction_rl:120,direction_lr:121,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",42:"AMP",44:"STYLE_SEPARATOR",46:"DOUBLECIRCLESTART",47:"DOUBLECIRCLEEND",48:"PS",49:"PE",50:"(-",51:"-)",52:"STADIUMSTART",53:"STADIUMEND",54:"SUBROUTINESTART",55:"SUBROUTINEEND",56:"VERTEX_WITH_PROPS_START",57:"NODE_STRING[field]",58:"COLON",59:"NODE_STRING[value]",60:"PIPE",61:"CYLINDERSTART",62:"CYLINDEREND",63:"DIAMOND_START",64:"DIAMOND_STOP",65:"TAGEND",66:"TRAPSTART",67:"TRAPEND",68:"INVTRAPSTART",69:"INVTRAPEND",72:"TESTSTR",73:"START_LINK",75:"LINK",77:"STR",78:"MD_STR",81:"STYLE",82:"LINKSTYLE",83:"CLASSDEF",84:"CLASS",85:"CLICK",86:"DOWN",87:"UP",90:"idString[vertex]",91:"idString[class]",92:"CALLBACKNAME",93:"CALLBACKARGS",94:"HREF",95:"LINK_TARGET",96:"STR[link]",97:"STR[tooltip]",99:"DEFAULT",101:"INTERPOLATE",102:"NUM",103:"COMMA",106:"NODE_STRING",107:"UNIT",108:"BRKT",109:"PCT",111:"MINUS",112:"MULT",113:"UNICODE_TEXT",114:"TEXT",115:"TAGSTART",116:"EDGE_TEXT",118:"direction_tb",119:"direction_bt",120:"direction_rl",121:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[20,3],[20,4],[20,2],[20,1],[40,1],[40,5],[41,1],[41,3],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,8],[43,4],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,4],[43,4],[43,1],[39,2],[39,3],[39,3],[39,1],[39,3],[74,1],[74,2],[74,1],[74,1],[70,1],[71,3],[30,1],[30,2],[30,1],[30,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[100,1],[100,3],[89,1],[89,3],[104,1],[104,2],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[79,1],[79,1],[79,1],[79,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[76,1],[76,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[45,1],[45,2],[98,1],[98,2],[33,1],[33,1],[33,1],[33,1]],performAction:function(Wi,Bs,Qa,Bi,Nu,Ot,W3){var Kt=Ot.length-1;switch(Nu){case 2:this.$=[];break;case 3:(!Array.isArray(Ot[Kt])||Ot[Kt].length>0)&&Ot[Kt-1].push(Ot[Kt]),this.$=Ot[Kt-1];break;case 4:case 176:this.$=Ot[Kt];break;case 11:Bi.setDirection("TB"),this.$="TB";break;case 12:Bi.setDirection(Ot[Kt-1]),this.$=Ot[Kt-1];break;case 27:this.$=Ot[Kt-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=Bi.addSubGraph(Ot[Kt-6],Ot[Kt-1],Ot[Kt-4]);break;case 34:this.$=Bi.addSubGraph(Ot[Kt-3],Ot[Kt-1],Ot[Kt-3]);break;case 35:this.$=Bi.addSubGraph(void 0,Ot[Kt-1],void 0);break;case 37:this.$=Ot[Kt].trim(),Bi.setAccTitle(this.$);break;case 38:case 39:this.$=Ot[Kt].trim(),Bi.setAccDescription(this.$);break;case 43:Bi.addLink(Ot[Kt-2].stmt,Ot[Kt],Ot[Kt-1]),this.$={stmt:Ot[Kt],nodes:Ot[Kt].concat(Ot[Kt-2].nodes)};break;case 44:Bi.addLink(Ot[Kt-3].stmt,Ot[Kt-1],Ot[Kt-2]),this.$={stmt:Ot[Kt-1],nodes:Ot[Kt-1].concat(Ot[Kt-3].nodes)};break;case 45:this.$={stmt:Ot[Kt-1],nodes:Ot[Kt-1]};break;case 46:this.$={stmt:Ot[Kt],nodes:Ot[Kt]};break;case 47:this.$=[Ot[Kt]];break;case 48:this.$=Ot[Kt-4].concat(Ot[Kt]);break;case 49:this.$=Ot[Kt];break;case 50:this.$=Ot[Kt-2],Bi.setClass(Ot[Kt-2],Ot[Kt]);break;case 51:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"square");break;case 52:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"doublecircle");break;case 53:this.$=Ot[Kt-5],Bi.addVertex(Ot[Kt-5],Ot[Kt-2],"circle");break;case 54:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"ellipse");break;case 55:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"stadium");break;case 56:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"subroutine");break;case 57:this.$=Ot[Kt-7],Bi.addVertex(Ot[Kt-7],Ot[Kt-1],"rect",void 0,void 0,void 0,Object.fromEntries([[Ot[Kt-5],Ot[Kt-3]]]));break;case 58:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"cylinder");break;case 59:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"round");break;case 60:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"diamond");break;case 61:this.$=Ot[Kt-5],Bi.addVertex(Ot[Kt-5],Ot[Kt-2],"hexagon");break;case 62:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"odd");break;case 63:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"trapezoid");break;case 64:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"inv_trapezoid");break;case 65:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"lean_right");break;case 66:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"lean_left");break;case 67:this.$=Ot[Kt],Bi.addVertex(Ot[Kt]);break;case 68:Ot[Kt-1].text=Ot[Kt],this.$=Ot[Kt-1];break;case 69:case 70:Ot[Kt-2].text=Ot[Kt-1],this.$=Ot[Kt-2];break;case 71:this.$=Ot[Kt];break;case 72:var z0=Bi.destructLink(Ot[Kt],Ot[Kt-2]);this.$={type:z0.type,stroke:z0.stroke,length:z0.length,text:Ot[Kt-1]};break;case 73:this.$={text:Ot[Kt],type:"text"};break;case 74:this.$={text:Ot[Kt-1].text+""+Ot[Kt],type:Ot[Kt-1].type};break;case 75:this.$={text:Ot[Kt],type:"string"};break;case 76:this.$={text:Ot[Kt],type:"markdown"};break;case 77:var z0=Bi.destructLink(Ot[Kt]);this.$={type:z0.type,stroke:z0.stroke,length:z0.length};break;case 78:this.$=Ot[Kt-1];break;case 79:this.$={text:Ot[Kt],type:"text"};break;case 80:this.$={text:Ot[Kt-1].text+""+Ot[Kt],type:Ot[Kt-1].type};break;case 81:this.$={text:Ot[Kt],type:"string"};break;case 82:case 97:this.$={text:Ot[Kt],type:"markdown"};break;case 94:this.$={text:Ot[Kt],type:"text"};break;case 95:this.$={text:Ot[Kt-1].text+""+Ot[Kt],type:Ot[Kt-1].type};break;case 96:this.$={text:Ot[Kt],type:"text"};break;case 98:this.$=Ot[Kt-4],Bi.addClass(Ot[Kt-2],Ot[Kt]);break;case 99:this.$=Ot[Kt-4],Bi.setClass(Ot[Kt-2],Ot[Kt]);break;case 100:case 108:this.$=Ot[Kt-1],Bi.setClickEvent(Ot[Kt-1],Ot[Kt]);break;case 101:case 109:this.$=Ot[Kt-3],Bi.setClickEvent(Ot[Kt-3],Ot[Kt-2]),Bi.setTooltip(Ot[Kt-3],Ot[Kt]);break;case 102:this.$=Ot[Kt-2],Bi.setClickEvent(Ot[Kt-2],Ot[Kt-1],Ot[Kt]);break;case 103:this.$=Ot[Kt-4],Bi.setClickEvent(Ot[Kt-4],Ot[Kt-3],Ot[Kt-2]),Bi.setTooltip(Ot[Kt-4],Ot[Kt]);break;case 104:this.$=Ot[Kt-2],Bi.setLink(Ot[Kt-2],Ot[Kt]);break;case 105:this.$=Ot[Kt-4],Bi.setLink(Ot[Kt-4],Ot[Kt-2]),Bi.setTooltip(Ot[Kt-4],Ot[Kt]);break;case 106:this.$=Ot[Kt-4],Bi.setLink(Ot[Kt-4],Ot[Kt-2],Ot[Kt]);break;case 107:this.$=Ot[Kt-6],Bi.setLink(Ot[Kt-6],Ot[Kt-4],Ot[Kt]),Bi.setTooltip(Ot[Kt-6],Ot[Kt-2]);break;case 110:this.$=Ot[Kt-1],Bi.setLink(Ot[Kt-1],Ot[Kt]);break;case 111:this.$=Ot[Kt-3],Bi.setLink(Ot[Kt-3],Ot[Kt-2]),Bi.setTooltip(Ot[Kt-3],Ot[Kt]);break;case 112:this.$=Ot[Kt-3],Bi.setLink(Ot[Kt-3],Ot[Kt-2],Ot[Kt]);break;case 113:this.$=Ot[Kt-5],Bi.setLink(Ot[Kt-5],Ot[Kt-4],Ot[Kt]),Bi.setTooltip(Ot[Kt-5],Ot[Kt-2]);break;case 114:this.$=Ot[Kt-4],Bi.addVertex(Ot[Kt-2],void 0,void 0,Ot[Kt]);break;case 115:this.$=Ot[Kt-4],Bi.updateLink([Ot[Kt-2]],Ot[Kt]);break;case 116:this.$=Ot[Kt-4],Bi.updateLink(Ot[Kt-2],Ot[Kt]);break;case 117:this.$=Ot[Kt-8],Bi.updateLinkInterpolate([Ot[Kt-6]],Ot[Kt-2]),Bi.updateLink([Ot[Kt-6]],Ot[Kt]);break;case 118:this.$=Ot[Kt-8],Bi.updateLinkInterpolate(Ot[Kt-6],Ot[Kt-2]),Bi.updateLink(Ot[Kt-6],Ot[Kt]);break;case 119:this.$=Ot[Kt-6],Bi.updateLinkInterpolate([Ot[Kt-4]],Ot[Kt]);break;case 120:this.$=Ot[Kt-6],Bi.updateLinkInterpolate(Ot[Kt-4],Ot[Kt]);break;case 121:case 123:this.$=[Ot[Kt]];break;case 122:case 124:Ot[Kt-2].push(Ot[Kt]),this.$=Ot[Kt-2];break;case 126:this.$=Ot[Kt-1]+Ot[Kt];break;case 174:this.$=Ot[Kt];break;case 175:this.$=Ot[Kt-1]+""+Ot[Kt];break;case 177:this.$=Ot[Kt-1]+""+Ot[Kt];break;case 178:this.$={stmt:"dir",value:"TB"};break;case 179:this.$={stmt:"dir",value:"BT"};break;case 180:this.$={stmt:"dir",value:"RL"};break;case 181:this.$={stmt:"dir",value:"LR"};break}},table:[{3:1,4:2,9:s,10:u,12:d},{1:[3]},i(p,v,{5:6}),{4:7,9:s,10:u,12:d},{4:8,9:s,10:u,12:d},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:b,9:y,10:T,11:_,20:17,22:18,23:19,24:20,25:21,26:22,27:A,33:24,34:P,36:R,38:F,40:28,41:38,42:j,43:39,45:40,58:K,81:ee,82:ie,83:oe,84:pe,85:be,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:41,111:W,112:xe,113:U,118:Fe,119:Pe,120:je,121:Ie},i(p,[2,9]),i(p,[2,10]),i(p,[2,11]),{8:[1,54],9:[1,55],10:Se,15:53,18:56},i(Ce,[2,3]),i(Ce,[2,4]),i(Ce,[2,5]),i(Ce,[2,6]),i(Ce,[2,7]),i(Ce,[2,8]),{8:ke,9:Ke,11:Ft,21:58,39:59,70:63,73:[1,64],75:[1,65]},{8:ke,9:Ke,11:Ft,21:66},{8:ke,9:Ke,11:Ft,21:67},{8:ke,9:Ke,11:Ft,21:68},{8:ke,9:Ke,11:Ft,21:69},{8:ke,9:Ke,11:Ft,21:70},{8:ke,9:Ke,10:[1,71],11:Ft,21:72},i(Ce,[2,36]),{35:[1,73]},{37:[1,74]},i(Ce,[2,39]),i(Ne,[2,46],{18:75,10:Se}),{10:[1,76]},{10:[1,77]},{10:[1,78]},{10:[1,79]},{14:gn,42:_t,58:Et,77:[1,83],86:Gt,92:[1,80],94:[1,81],98:82,102:ln,103:xt,106:Pt,108:Qe,111:Dt,112:kt,113:On,117:84},i(Ce,[2,178]),i(Ce,[2,179]),i(Ce,[2,180]),i(Ce,[2,181]),i(ht,[2,47]),i(ht,[2,49],{44:[1,96]}),i(zr,[2,67],{110:109,29:[1,97],42:j,46:[1,98],48:[1,99],50:[1,100],52:[1,101],54:[1,102],56:[1,103],58:K,61:[1,104],63:[1,105],65:[1,106],66:[1,107],68:[1,108],86:ae,99:ne,102:se,103:de,106:X,108:ge,111:W,112:xe,113:U}),i(yt,[2,174]),i(yt,[2,135]),i(yt,[2,136]),i(yt,[2,137]),i(yt,[2,138]),i(yt,[2,139]),i(yt,[2,140]),i(yt,[2,141]),i(yt,[2,142]),i(yt,[2,143]),i(yt,[2,144]),i(yt,[2,145]),i(p,[2,12]),i(p,[2,18]),i(p,[2,19]),{9:[1,110]},i(ji,[2,26],{18:111,10:Se}),i(Ce,[2,27]),{40:112,41:38,42:j,43:39,45:40,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:41,111:W,112:xe,113:U},i(Ce,[2,40]),i(Ce,[2,41]),i(Ce,[2,42]),i(xi,[2,71],{71:113,60:[1,115],72:[1,114]}),{74:116,76:117,77:[1,118],78:[1,119],113:Ma,116:zs},i([42,58,60,72,86,99,102,103,106,108,111,112,113],[2,77]),i(Ce,[2,28]),i(Ce,[2,29]),i(Ce,[2,30]),i(Ce,[2,31]),i(Ce,[2,32]),{10:ao,12:Tr,14:Fn,27:qn,28:122,32:Un,42:At,58:wt,73:on,77:[1,124],78:[1,125],80:135,81:fn,82:An,83:oo,84:jo,85:$o,86:Pa,87:wo,88:123,102:_s,106:tl,108:da,111:j0,112:pm,113:Ml},i(Xc,v,{5:148}),i(Ce,[2,37]),i(Ce,[2,38]),i(Ne,[2,45],{42:Bc}),{42:j,45:150,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:41,111:W,112:xe,113:U},{99:[1,151],100:152,102:[1,153]},{42:j,45:154,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:41,111:W,112:xe,113:U},{42:j,45:155,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:41,111:W,112:xe,113:U},i(ja,[2,100],{10:[1,156],93:[1,157]}),{77:[1,158]},i(ja,[2,108],{117:160,10:[1,159],14:gn,42:_t,58:Et,86:Gt,102:ln,103:xt,106:Pt,108:Qe,111:Dt,112:kt,113:On}),i(ja,[2,110],{10:[1,161]}),i(Ou,[2,176]),i(Ou,[2,163]),i(Ou,[2,164]),i(Ou,[2,165]),i(Ou,[2,166]),i(Ou,[2,167]),i(Ou,[2,168]),i(Ou,[2,169]),i(Ou,[2,170]),i(Ou,[2,171]),i(Ou,[2,172]),i(Ou,[2,173]),{42:j,45:162,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:41,111:W,112:xe,113:U},{30:163,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{30:171,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{30:173,48:[1,172],65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{30:174,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{30:175,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{30:176,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{106:[1,177]},{30:178,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{30:179,63:[1,180],65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{30:181,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{30:182,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{30:183,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},i(yt,[2,175]),i(p,[2,20]),i(ji,[2,25]),i(Ne,[2,43],{18:184,10:Se}),i(xi,[2,68],{10:[1,185]}),{10:[1,186]},{30:187,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{75:[1,188],76:189,113:Ma,116:zs},i(kh,[2,73]),i(kh,[2,75]),i(kh,[2,76]),i(kh,[2,161]),i(kh,[2,162]),{8:ke,9:Ke,10:ao,11:Ft,12:Tr,14:Fn,21:191,27:qn,29:[1,190],32:Un,42:At,58:wt,73:on,80:135,81:fn,82:An,83:oo,84:jo,85:$o,86:Pa,87:wo,88:192,102:_s,106:tl,108:da,111:j0,112:pm,113:Ml},i(lu,[2,94]),i(lu,[2,96]),i(lu,[2,97]),i(lu,[2,150]),i(lu,[2,151]),i(lu,[2,152]),i(lu,[2,153]),i(lu,[2,154]),i(lu,[2,155]),i(lu,[2,156]),i(lu,[2,157]),i(lu,[2,158]),i(lu,[2,159]),i(lu,[2,160]),i(lu,[2,83]),i(lu,[2,84]),i(lu,[2,85]),i(lu,[2,86]),i(lu,[2,87]),i(lu,[2,88]),i(lu,[2,89]),i(lu,[2,90]),i(lu,[2,91]),i(lu,[2,92]),i(lu,[2,93]),{6:11,7:12,8:b,9:y,10:T,11:_,20:17,22:18,23:19,24:20,25:21,26:22,27:A,32:[1,193],33:24,34:P,36:R,38:F,40:28,41:38,42:j,43:39,45:40,58:K,81:ee,82:ie,83:oe,84:pe,85:be,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:41,111:W,112:xe,113:U,118:Fe,119:Pe,120:je,121:Ie},{10:Se,18:194},{10:[1,195],42:j,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:109,111:W,112:xe,113:U},{10:[1,196]},{10:[1,197],103:[1,198]},i(o5,[2,121]),{10:[1,199],42:j,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:109,111:W,112:xe,113:U},{10:[1,200],42:j,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:109,111:W,112:xe,113:U},{77:[1,201]},i(ja,[2,102],{10:[1,202]}),i(ja,[2,104],{10:[1,203]}),{77:[1,204]},i(Ou,[2,177]),{77:[1,205],95:[1,206]},i(ht,[2,50],{110:109,42:j,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,111:W,112:xe,113:U}),{31:[1,207],65:Sa,79:208,113:xa,114:Ba,115:ga},i(Wh,[2,79]),i(Wh,[2,81]),i(Wh,[2,82]),i(Wh,[2,146]),i(Wh,[2,147]),i(Wh,[2,148]),i(Wh,[2,149]),{47:[1,209],65:Sa,79:208,113:xa,114:Ba,115:ga},{30:210,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{49:[1,211],65:Sa,79:208,113:xa,114:Ba,115:ga},{51:[1,212],65:Sa,79:208,113:xa,114:Ba,115:ga},{53:[1,213],65:Sa,79:208,113:xa,114:Ba,115:ga},{55:[1,214],65:Sa,79:208,113:xa,114:Ba,115:ga},{58:[1,215]},{62:[1,216],65:Sa,79:208,113:xa,114:Ba,115:ga},{64:[1,217],65:Sa,79:208,113:xa,114:Ba,115:ga},{30:218,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{31:[1,219],65:Sa,79:208,113:xa,114:Ba,115:ga},{65:Sa,67:[1,220],69:[1,221],79:208,113:xa,114:Ba,115:ga},{65:Sa,67:[1,223],69:[1,222],79:208,113:xa,114:Ba,115:ga},i(Ne,[2,44],{42:Bc}),i(xi,[2,70]),i(xi,[2,69]),{60:[1,224],65:Sa,79:208,113:xa,114:Ba,115:ga},i(xi,[2,72]),i(kh,[2,74]),{30:225,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},i(Xc,v,{5:226}),i(lu,[2,95]),i(Ce,[2,35]),{41:227,42:j,43:39,45:40,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:41,111:W,112:xe,113:U},{10:od,58:Gd,81:cd,89:228,102:Kd,104:229,105:230,106:$g,107:as,108:wn,109:Zr},{10:od,58:Gd,81:cd,89:239,101:[1,240],102:Kd,104:229,105:230,106:$g,107:as,108:wn,109:Zr},{10:od,58:Gd,81:cd,89:241,101:[1,242],102:Kd,104:229,105:230,106:$g,107:as,108:wn,109:Zr},{102:[1,243]},{10:od,58:Gd,81:cd,89:244,102:Kd,104:229,105:230,106:$g,107:as,108:wn,109:Zr},{42:j,45:245,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:41,111:W,112:xe,113:U},i(ja,[2,101]),{77:[1,246]},{77:[1,247],95:[1,248]},i(ja,[2,109]),i(ja,[2,111],{10:[1,249]}),i(ja,[2,112]),i(zr,[2,51]),i(Wh,[2,80]),i(zr,[2,52]),{49:[1,250],65:Sa,79:208,113:xa,114:Ba,115:ga},i(zr,[2,59]),i(zr,[2,54]),i(zr,[2,55]),i(zr,[2,56]),{106:[1,251]},i(zr,[2,58]),i(zr,[2,60]),{64:[1,252],65:Sa,79:208,113:xa,114:Ba,115:ga},i(zr,[2,62]),i(zr,[2,63]),i(zr,[2,65]),i(zr,[2,64]),i(zr,[2,66]),i([10,42,58,86,99,102,103,106,108,111,112,113],[2,78]),{31:[1,253],65:Sa,79:208,113:xa,114:Ba,115:ga},{6:11,7:12,8:b,9:y,10:T,11:_,20:17,22:18,23:19,24:20,25:21,26:22,27:A,32:[1,254],33:24,34:P,36:R,38:F,40:28,41:38,42:j,43:39,45:40,58:K,81:ee,82:ie,83:oe,84:pe,85:be,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:41,111:W,112:xe,113:U,118:Fe,119:Pe,120:je,121:Ie},i(ht,[2,48]),i(ja,[2,114],{103:Zi}),i(nu,[2,123],{105:256,10:od,58:Gd,81:cd,102:Kd,106:$g,107:as,108:wn,109:Zr}),i(vu,[2,125]),i(vu,[2,127]),i(vu,[2,128]),i(vu,[2,129]),i(vu,[2,130]),i(vu,[2,131]),i(vu,[2,132]),i(vu,[2,133]),i(vu,[2,134]),i(ja,[2,115],{103:Zi}),{10:[1,257]},i(ja,[2,116],{103:Zi}),{10:[1,258]},i(o5,[2,122]),i(ja,[2,98],{103:Zi}),i(ja,[2,99],{110:109,42:j,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,111:W,112:xe,113:U}),i(ja,[2,103]),i(ja,[2,105],{10:[1,259]}),i(ja,[2,106]),{95:[1,260]},{49:[1,261]},{60:[1,262]},{64:[1,263]},{8:ke,9:Ke,11:Ft,21:264},i(Ce,[2,34]),{10:od,58:Gd,81:cd,102:Kd,104:265,105:230,106:$g,107:as,108:wn,109:Zr},i(vu,[2,126]),{14:gn,42:_t,58:Et,86:Gt,98:266,102:ln,103:xt,106:Pt,108:Qe,111:Dt,112:kt,113:On,117:84},{14:gn,42:_t,58:Et,86:Gt,98:267,102:ln,103:xt,106:Pt,108:Qe,111:Dt,112:kt,113:On,117:84},{95:[1,268]},i(ja,[2,113]),i(zr,[2,53]),{30:269,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},i(zr,[2,61]),i(Xc,v,{5:270}),i(nu,[2,124],{105:256,10:od,58:Gd,81:cd,102:Kd,106:$g,107:as,108:wn,109:Zr}),i(ja,[2,119],{117:160,10:[1,271],14:gn,42:_t,58:Et,86:Gt,102:ln,103:xt,106:Pt,108:Qe,111:Dt,112:kt,113:On}),i(ja,[2,120],{117:160,10:[1,272],14:gn,42:_t,58:Et,86:Gt,102:ln,103:xt,106:Pt,108:Qe,111:Dt,112:kt,113:On}),i(ja,[2,107]),{31:[1,273],65:Sa,79:208,113:xa,114:Ba,115:ga},{6:11,7:12,8:b,9:y,10:T,11:_,20:17,22:18,23:19,24:20,25:21,26:22,27:A,32:[1,274],33:24,34:P,36:R,38:F,40:28,41:38,42:j,43:39,45:40,58:K,81:ee,82:ie,83:oe,84:pe,85:be,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:41,111:W,112:xe,113:U,118:Fe,119:Pe,120:je,121:Ie},{10:od,58:Gd,81:cd,89:275,102:Kd,104:229,105:230,106:$g,107:as,108:wn,109:Zr},{10:od,58:Gd,81:cd,89:276,102:Kd,104:229,105:230,106:$g,107:as,108:wn,109:Zr},i(zr,[2,57]),i(Ce,[2,33]),i(ja,[2,117],{103:Zi}),i(ja,[2,118],{103:Zi})],defaultActions:{},parseError:function(Wi,Bs){if(Bs.recoverable)this.trace(Wi);else{var Qa=new Error(Wi);throw Qa.hash=Bs,Qa}},parse:function(Wi){var Bs=this,Qa=[0],Bi=[],Nu=[null],Ot=[],W3=this.table,Kt="",z0=0,Bp=0,Y3=2,$9=1,c5=Ot.slice.call(arguments,1),Eh=Object.create(this.lexer),zg={yy:{}};for(var bm in this.yy)Object.prototype.hasOwnProperty.call(this.yy,bm)&&(zg.yy[bm]=this.yy[bm]);Eh.setInput(Wi,zg.yy),zg.yy.lexer=Eh,zg.yy.parser=this,typeof Eh.yylloc>"u"&&(Eh.yylloc={});var z9=Eh.yylloc;Ot.push(z9);var mm=Eh.options&&Eh.options.ranges;typeof zg.yy.parseError=="function"?this.parseError=zg.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function u5(){var Fp;return Fp=Bi.pop()||Eh.lex()||$9,typeof Fp!="number"&&(Fp instanceof Array&&(Bi=Fp,Fp=Bi.pop()),Fp=Bs.symbols_[Fp]||Fp),Fp}for(var y1,ud,ld,q9,Vv={},Y7,G2,X7,l5;;){if(ud=Qa[Qa.length-1],this.defaultActions[ud]?ld=this.defaultActions[ud]:((y1===null||typeof y1>"u")&&(y1=u5()),ld=W3[ud]&&W3[ud][y1]),typeof ld>"u"||!ld.length||!ld[0]){var X3="";l5=[];for(Y7 in W3[ud])this.terminals_[Y7]&&Y7>Y3&&l5.push("'"+this.terminals_[Y7]+"'");Eh.showPosition?X3="Parse error on line "+(z0+1)+`: +`+Eh.showPosition()+` +Expecting `+l5.join(", ")+", got '"+(this.terminals_[y1]||y1)+"'":X3="Parse error on line "+(z0+1)+": Unexpected "+(y1==$9?"end of input":"'"+(this.terminals_[y1]||y1)+"'"),this.parseError(X3,{text:Eh.match,token:this.terminals_[y1]||y1,line:Eh.yylineno,loc:z9,expected:l5})}if(ld[0]instanceof Array&&ld.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ud+", token: "+y1);switch(ld[0]){case 1:Qa.push(y1),Nu.push(Eh.yytext),Ot.push(Eh.yylloc),Qa.push(ld[1]),y1=null,Bp=Eh.yyleng,Kt=Eh.yytext,z0=Eh.yylineno,z9=Eh.yylloc;break;case 2:if(G2=this.productions_[ld[1]][1],Vv.$=Nu[Nu.length-G2],Vv._$={first_line:Ot[Ot.length-(G2||1)].first_line,last_line:Ot[Ot.length-1].last_line,first_column:Ot[Ot.length-(G2||1)].first_column,last_column:Ot[Ot.length-1].last_column},mm&&(Vv._$.range=[Ot[Ot.length-(G2||1)].range[0],Ot[Ot.length-1].range[1]]),q9=this.performAction.apply(Vv,[Kt,Bp,z0,zg.yy,ld[1],Nu,Ot].concat(c5)),typeof q9<"u")return q9;G2&&(Qa=Qa.slice(0,-1*G2*2),Nu=Nu.slice(0,-1*G2),Ot=Ot.slice(0,-1*G2)),Qa.push(this.productions_[ld[1]][0]),Nu.push(Vv.$),Ot.push(Vv._$),X7=W3[Qa[Qa.length-2]][Qa[Qa.length-1]],Qa.push(X7);break;case 3:return!0}}return!0}},Yh=function(){var $0={EOF:1,parseError:function(Bs,Qa){if(this.yy.parser)this.yy.parser.parseError(Bs,Qa);else throw new Error(Bs)},setInput:function(Wi,Bs){return this.yy=Bs||this.yy||{},this._input=Wi,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Wi=this._input[0];this.yytext+=Wi,this.yyleng++,this.offset++,this.match+=Wi,this.matched+=Wi;var Bs=Wi.match(/(?:\r\n?|\n).*/g);return Bs?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Wi},unput:function(Wi){var Bs=Wi.length,Qa=Wi.split(/(?:\r\n?|\n)/g);this._input=Wi+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Bs),this.offset-=Bs;var Bi=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Qa.length-1&&(this.yylineno-=Qa.length-1);var Nu=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Qa?(Qa.length===Bi.length?this.yylloc.first_column:0)+Bi[Bi.length-Qa.length].length-Qa[0].length:this.yylloc.first_column-Bs},this.options.ranges&&(this.yylloc.range=[Nu[0],Nu[0]+this.yyleng-Bs]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Wi){this.unput(this.match.slice(Wi))},pastInput:function(){var Wi=this.matched.substr(0,this.matched.length-this.match.length);return(Wi.length>20?"...":"")+Wi.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Wi=this.match;return Wi.length<20&&(Wi+=this._input.substr(0,20-Wi.length)),(Wi.substr(0,20)+(Wi.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Wi=this.pastInput(),Bs=new Array(Wi.length+1).join("-");return Wi+this.upcomingInput()+` +`+Bs+"^"},test_match:function(Wi,Bs){var Qa,Bi,Nu;if(this.options.backtrack_lexer&&(Nu={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Nu.yylloc.range=this.yylloc.range.slice(0))),Bi=Wi[0].match(/(?:\r\n?|\n).*/g),Bi&&(this.yylineno+=Bi.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Bi?Bi[Bi.length-1].length-Bi[Bi.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Wi[0].length},this.yytext+=Wi[0],this.match+=Wi[0],this.matches=Wi,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Wi[0].length),this.matched+=Wi[0],Qa=this.performAction.call(this,this.yy,this,Bs,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Qa)return Qa;if(this._backtrack){for(var Ot in Nu)this[Ot]=Nu[Ot];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Wi,Bs,Qa,Bi;this._more||(this.yytext="",this.match="");for(var Nu=this._currentRules(),Ot=0;OtBs[0].length)){if(Bs=Qa,Bi=Ot,this.options.backtrack_lexer){if(Wi=this.test_match(Qa,Nu[Ot]),Wi!==!1)return Wi;if(this._backtrack){Bs=!1;continue}else return!1}else if(!this.options.flex)break}return Bs?(Wi=this.test_match(Bs,Nu[Bi]),Wi!==!1?Wi:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Bs=this.next();return Bs||this.lex()},begin:function(Bs){this.conditionStack.push(Bs)},popState:function(){var Bs=this.conditionStack.length-1;return Bs>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Bs){return Bs=this.conditionStack.length-1-Math.abs(Bs||0),Bs>=0?this.conditionStack[Bs]:"INITIAL"},pushState:function(Bs){this.begin(Bs)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(Bs,Qa,Bi,Nu){switch(Bi){case 0:return this.begin("acc_title"),34;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),36;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:this.begin("callbackname");break;case 8:this.popState();break;case 9:this.popState(),this.begin("callbackargs");break;case 10:return 92;case 11:this.popState();break;case 12:return 93;case 13:return"MD_STR";case 14:this.popState();break;case 15:this.begin("md_string");break;case 16:return"STR";case 17:this.popState();break;case 18:this.pushState("string");break;case 19:return 81;case 20:return 99;case 21:return 82;case 22:return 101;case 23:return 83;case 24:return 84;case 25:return 94;case 26:this.begin("click");break;case 27:this.popState();break;case 28:return 85;case 29:return Bs.lex.firstGraph()&&this.begin("dir"),12;case 30:return Bs.lex.firstGraph()&&this.begin("dir"),12;case 31:return Bs.lex.firstGraph()&&this.begin("dir"),12;case 32:return 27;case 33:return 32;case 34:return 95;case 35:return 95;case 36:return 95;case 37:return 95;case 38:return this.popState(),13;case 39:return this.popState(),14;case 40:return this.popState(),14;case 41:return this.popState(),14;case 42:return this.popState(),14;case 43:return this.popState(),14;case 44:return this.popState(),14;case 45:return this.popState(),14;case 46:return this.popState(),14;case 47:return this.popState(),14;case 48:return this.popState(),14;case 49:return 118;case 50:return 119;case 51:return 120;case 52:return 121;case 53:return 102;case 54:return 108;case 55:return 44;case 56:return 58;case 57:return 42;case 58:return 8;case 59:return 103;case 60:return 112;case 61:return this.popState(),75;case 62:return this.pushState("edgeText"),73;case 63:return 116;case 64:return this.popState(),75;case 65:return this.pushState("thickEdgeText"),73;case 66:return 116;case 67:return this.popState(),75;case 68:return this.pushState("dottedEdgeText"),73;case 69:return 116;case 70:return 75;case 71:return this.popState(),51;case 72:return"TEXT";case 73:return this.pushState("ellipseText"),50;case 74:return this.popState(),53;case 75:return this.pushState("text"),52;case 76:return this.popState(),55;case 77:return this.pushState("text"),54;case 78:return 56;case 79:return this.pushState("text"),65;case 80:return this.popState(),62;case 81:return this.pushState("text"),61;case 82:return this.popState(),47;case 83:return this.pushState("text"),46;case 84:return this.popState(),67;case 85:return this.popState(),69;case 86:return 114;case 87:return this.pushState("trapText"),66;case 88:return this.pushState("trapText"),68;case 89:return 115;case 90:return 65;case 91:return 87;case 92:return"SEP";case 93:return 86;case 94:return 112;case 95:return 108;case 96:return 42;case 97:return 106;case 98:return 111;case 99:return 113;case 100:return this.popState(),60;case 101:return this.pushState("text"),60;case 102:return this.popState(),49;case 103:return this.pushState("text"),48;case 104:return this.popState(),31;case 105:return this.pushState("text"),29;case 106:return this.popState(),64;case 107:return this.pushState("text"),63;case 108:return"TEXT";case 109:return"QUOTE";case 110:return 9;case 111:return 10;case 112:return 11}},rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{callbackargs:{rules:[11,12,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},callbackname:{rules:[8,9,10,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},href:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},click:{rules:[15,18,27,28,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dottedEdgeText:{rules:[15,18,67,69,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},thickEdgeText:{rules:[15,18,64,66,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},edgeText:{rules:[15,18,61,63,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},trapText:{rules:[15,18,70,73,75,77,81,83,84,85,86,87,88,101,103,105,107],inclusive:!1},ellipseText:{rules:[15,18,70,71,72,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},text:{rules:[15,18,70,73,74,75,76,77,80,81,82,83,87,88,100,101,102,103,104,105,106,107,108],inclusive:!1},vertex:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dir:{rules:[15,18,38,39,40,41,42,43,44,45,46,47,48,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr_multiline:{rules:[5,6,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr:{rules:[3,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_title:{rules:[1,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},md_string:{rules:[13,14,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},string:{rules:[15,16,17,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},INITIAL:{rules:[0,2,4,7,15,18,19,20,21,22,23,24,25,26,29,30,31,32,33,34,35,36,37,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,67,68,70,73,75,77,78,79,81,83,87,88,89,90,91,92,93,94,95,96,97,98,99,101,103,105,107,109,110,111,112],inclusive:!0}}};return $0}();Dl.lexer=Yh;function w1(){this.yy={}}return w1.prototype=Dl,Dl.Parser=w1,new w1}();Ube.parser=Ube;const Gbe=Ube,yUt="flowchart-";let Oqe=0,BD=qt(),oh={},z3=[],FD={},R7=[],IQ={},OQ={},NQ=0,Kbe=!0,$v,PQ,BQ=[];const FQ=i=>ci.sanitizeText(i,BD),mR=function(i){const s=Object.keys(oh);for(const u of s)if(oh[u].id===i)return oh[u].domId;return i},Nqe=function(i,s,u,d,p,v,b={}){let y,T=i;T!==void 0&&T.trim().length!==0&&(oh[T]===void 0&&(oh[T]={id:T,labelType:"text",domId:yUt+T+"-"+Oqe,styles:[],classes:[]}),Oqe++,s!==void 0?(BD=qt(),y=FQ(s.text.trim()),oh[T].labelType=s.type,y[0]==='"'&&y[y.length-1]==='"'&&(y=y.substring(1,y.length-1)),oh[T].text=y):oh[T].text===void 0&&(oh[T].text=i),u!==void 0&&(oh[T].type=u),d!=null&&d.forEach(function(_){oh[T].styles.push(_)}),p!=null&&p.forEach(function(_){oh[T].classes.push(_)}),v!==void 0&&(oh[T].dir=v),oh[T].props===void 0?oh[T].props=b:b!==void 0&&Object.assign(oh[T].props,b))},Pqe=function(i,s,u){const v={start:i,end:s,type:void 0,text:"",labelType:"text"};Xe.info("abc78 Got edge...",v);const b=u.text;if(b!==void 0&&(v.text=FQ(b.text.trim()),v.text[0]==='"'&&v.text[v.text.length-1]==='"'&&(v.text=v.text.substring(1,v.text.length-1)),v.labelType=b.type),u!==void 0&&(v.type=u.type,v.stroke=u.stroke,v.length=u.length),(v==null?void 0:v.length)>10&&(v.length=10),z3.length<(BD.maxEdges??500))Xe.info("abc78 pushing edge..."),z3.push(v);else throw new Error(`Edge limit exceeded. ${z3.length} edges found, but the limit is ${BD.maxEdges}. + +Initialize mermaid with maxEdges set to a higher number to allow more edges. +You cannot set this config via configuration inside the diagram as it is a secure config. +You have to call mermaid.initialize.`)},Bqe=function(i,s,u){Xe.info("addLink (abc78)",i,s,u);let d,p;for(d=0;d=z3.length)throw new Error(`The index ${u} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${z3.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);u==="default"?z3.defaultStyle=s:(Ao.isSubstringInArray("fill",s)===-1&&s.push("fill:none"),z3[u].style=s)})},jqe=function(i,s){i.split(",").forEach(function(u){FD[u]===void 0&&(FD[u]={id:u,styles:[],textStyles:[]}),s!=null&&s.forEach(function(d){if(d.match("color")){const p=d.replace("fill","bgFill").replace("color","fill");FD[u].textStyles.push(p)}FD[u].styles.push(d)})})},$qe=function(i){$v=i,$v.match(/.*/)&&($v="LR"),$v.match(/.*v/)&&($v="TB"),$v==="TD"&&($v="TB")},RQ=function(i,s){i.split(",").forEach(function(u){let d=u;oh[d]!==void 0&&oh[d].classes.push(s),IQ[d]!==void 0&&IQ[d].classes.push(s)})},xUt=function(i,s){i.split(",").forEach(function(u){s!==void 0&&(OQ[PQ==="gen-1"?mR(u):u]=FQ(s))})},kUt=function(i,s,u){let d=mR(i);if(qt().securityLevel!=="loose"||s===void 0)return;let p=[];if(typeof u=="string"){p=u.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let v=0;v")),p.classed("hover",!0)}).on("mouseout",function(){s.transition().duration(500).style("opacity",0),Ir(this).classed("hover",!1)})};BQ.push(Yqe);const Xqe=function(i="gen-1"){oh={},FD={},z3=[],BQ=[Yqe],R7=[],IQ={},NQ=0,OQ={},Kbe=!0,PQ=i,BD=qt(),Pg()},Qqe=i=>{PQ=i||"gen-2"},Jqe=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},Zqe=function(i,s,u){let d=i.text.trim(),p=u.text;i===u&&u.text.match(/\s/)&&(d=void 0);function v(A){const P={boolean:{},number:{},string:{}},R=[];let F;return{nodeList:A.filter(function(K){const ee=typeof K;return K.stmt&&K.stmt==="dir"?(F=K.value,!1):K.trim()===""?!1:ee in P?P[ee].hasOwnProperty(K)?!1:P[ee][K]=!0:R.includes(K)?!1:R.push(K)}),dir:F}}let b=[];const{nodeList:y,dir:T}=v(b.concat.apply(b,s));if(b=y,PQ==="gen-1")for(let A=0;A2e3)return;if(eHe[vR]=s,R7[s].id===i)return{result:!0,count:0};let d=0,p=1;for(;d=0){const b=tHe(i,v);if(b.result)return{result:!0,count:p+b.count};p=p+b.count}d=d+1}return{result:!1,count:p}},nHe=function(i){return eHe[i]},rHe=function(){vR=-1,R7.length>0&&tHe("none",R7.length-1)},iHe=function(){return R7},sHe=()=>Kbe?(Kbe=!1,!0):!1,TUt=i=>{let s=i.trim(),u="arrow_open";switch(s[0]){case"<":u="arrow_point",s=s.slice(1);break;case"x":u="arrow_cross",s=s.slice(1);break;case"o":u="arrow_circle",s=s.slice(1);break}let d="normal";return s.includes("=")&&(d="thick"),s.includes(".")&&(d="dotted"),{type:u,stroke:d}},CUt=(i,s)=>{const u=s.length;let d=0;for(let p=0;p{const s=i.trim();let u=s.slice(0,-1),d="arrow_open";switch(s.slice(-1)){case"x":d="arrow_cross",s[0]==="x"&&(d="double_"+d,u=u.slice(1));break;case">":d="arrow_point",s[0]==="<"&&(d="double_"+d,u=u.slice(1));break;case"o":d="arrow_circle",s[0]==="o"&&(d="double_"+d,u=u.slice(1));break}let p="normal",v=u.length-1;u[0]==="="&&(p="thick"),u[0]==="~"&&(p="invisible");let b=CUt(".",u);return b&&(p="dotted",v=b),{type:d,stroke:p,length:v}},aHe=(i,s)=>{const u=SUt(i);let d;if(s){if(d=TUt(s),d.stroke!==u.stroke)return{type:"INVALID",stroke:"INVALID"};if(d.type==="arrow_open")d.type=u.type;else{if(d.type!==u.type)return{type:"INVALID",stroke:"INVALID"};d.type="double_"+d.type}return d.type==="double_arrow"&&(d.type="double_arrow_point"),d.length=u.length,d}return u},oHe=(i,s)=>{let u=!1;return i.forEach(d=>{d.nodes.indexOf(s)>=0&&(u=!0)}),u},cHe=(i,s)=>{const u=[];return i.nodes.forEach((d,p)=>{oHe(s,d)||u.push(i.nodes[p])}),{nodes:u}},uHe={firstGraph:sHe},HC={defaultConfig:()=>Zje.flowchart,setAccTitle:Bg,getAccTitle:Cp,getAccDescription:_p,setAccDescription:Sp,addVertex:Nqe,lookUpDomId:mR,addLink:Bqe,updateLinkInterpolate:Fqe,updateLink:Rqe,addClass:jqe,setDirection:$qe,setClass:RQ,setTooltip:xUt,getTooltip:qqe,setClickEvent:Hqe,setLink:zqe,bindFunctions:Vqe,getDirection:Uqe,getVertices:Gqe,getEdges:Kqe,getClasses:Wqe,clear:Xqe,setGen:Qqe,defaultStyle:Jqe,addSubGraph:Zqe,getDepthFirstPos:nHe,indexNodes:rHe,getSubGraphs:iHe,destructLink:aHe,lex:uHe,exists:oHe,makeUniq:cHe,setDiagramTitle:cm,getDiagramTitle:Ap},_Ut=Object.freeze(Object.defineProperty({__proto__:null,addClass:jqe,addLink:Bqe,addSingleLink:Pqe,addSubGraph:Zqe,addVertex:Nqe,bindFunctions:Vqe,clear:Xqe,default:HC,defaultStyle:Jqe,destructLink:aHe,firstGraph:sHe,getClasses:Wqe,getDepthFirstPos:nHe,getDirection:Uqe,getEdges:Kqe,getSubGraphs:iHe,getTooltip:qqe,getVertices:Gqe,indexNodes:rHe,lex:uHe,lookUpDomId:mR,setClass:RQ,setClickEvent:Hqe,setDirection:$qe,setGen:Qqe,setLink:zqe,updateLink:Rqe,updateLinkInterpolate:Fqe},Symbol.toStringTag,{value:"Module"}));var AUt="[object Symbol]";function VC(i){return typeof i=="symbol"||q4(i)&&AC(i)==AUt}function RD(i,s){for(var u=-1,d=i==null?0:i.length,p=Array(d);++u-1}function fm(i){return w9(i)?aje(i):l$e(i)}var GUt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,KUt=/^\w*$/;function Wbe(i,s){if(D0(i))return!1;var u=typeof i;return u=="number"||u=="symbol"||u=="boolean"||i==null||VC(i)?!0:KUt.test(i)||!GUt.test(i)||s!=null&&i in Object(s)}var WUt=500;function YUt(i){var s=bD(i,function(d){return u.size===WUt&&u.clear(),d}),u=s.cache;return s}var XUt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,QUt=/\\(\\)?/g,JUt=YUt(function(i){var s=[];return i.charCodeAt(0)===46&&s.push(""),i.replace(XUt,function(u,d,p,v){s.push(p?v.replace(QUt,"$1"):d||u)}),s});const ZUt=JUt;function mHe(i){return i==null?"":fHe(i)}function $Q(i,s){return D0(i)?i:Wbe(i,s)?[i]:ZUt(mHe(i))}var eGt=1/0;function wR(i){if(typeof i=="string"||VC(i))return i;var s=i+"";return s=="0"&&1/i==-eGt?"-0":s}function zQ(i,s){s=$Q(s,i);for(var u=0,d=s.length;i!=null&&u0&&u(y)?s>1?qQ(y,s-1,u,d,p):Ybe(p,y):d||(p[p.length]=y)}return p}function jD(i){var s=i==null?0:i.length;return s?qQ(i,1):[]}function rGt(i){return lje(uje(i,void 0,jD),i+"")}function iGt(i,s,u,d){var p=-1,v=i==null?0:i.length;for(d&&v&&(u=i[++p]);++py))return!1;var _=v.get(i),A=v.get(s);if(_&&A)return _==s&&A==i;var P=-1,R=!0,F=u&DKt?new xR:void 0;for(v.set(i,s),v.set(s,i);++P2?s[2]:void 0;for(p&&QF(s[0],s[1],p)&&(d=1);++u-1?p[v?s[b]:b]:void 0}}var yWt=Math.max;function xWt(i,s,u){var d=i==null?0:i.length;if(!d)return-1;var p=u==null?0:$Ut(u);return p<0&&(p=yWt(d+p,0)),bHe(i,I9(s),p)}var kWt=wWt(xWt);const rme=kWt;function VHe(i,s){var u=-1,d=w9(i)?Array(i.length):[];return VQ(i,function(p,v,b){d[++u]=s(p,v,b)}),d}function P0(i,s){var u=D0(i)?RD:VHe;return u(i,I9(s))}function EWt(i,s){return i==null?i:b2e(i,nme(s),IC)}function TWt(i,s){return i&&tme(i,nme(s))}function CWt(i,s){return i>s}var SWt=Object.prototype,_Wt=SWt.hasOwnProperty;function AWt(i,s){return i!=null&&_Wt.call(i,s)}function Lo(i,s){return i!=null&&$He(i,s,AWt)}function LWt(i,s){return RD(s,function(u){return i[u]})}function $7(i){return i==null?[]:LWt(i,fm(i))}function Qf(i){return i===void 0}function UHe(i,s){return is||v&&b&&T&&!y&&!_||d&&b&&T||!u&&T||!p)return 1;if(!d&&!v&&!_&&i=y)return T;var _=u[d];return T*(_=="desc"?-1:1)}}return i.index-s.index}function PWt(i,s,u){s.length?s=RD(s,function(v){return D0(v)?function(b){return zQ(b,v.length===1?v[0]:v)}:v}):s=[OC];var d=-1;s=RD(s,NX(I9));var p=VHe(i,function(v,b,y){var T=RD(s,function(_){return _(v)});return{criteria:T,index:++d,value:v}});return IWt(p,function(v,b){return NWt(v,b,u)})}function BWt(i,s){return DWt(i,s,function(u,d){return zHe(i,d)})}var FWt=rGt(function(i,s){return i==null?{}:BWt(i,s)});const ER=FWt;var RWt=Math.ceil,jWt=Math.max;function $Wt(i,s,u,d){for(var p=-1,v=jWt(RWt((s-i)/(u||1)),0),b=Array(v);v--;)b[d?v:++p]=i,i+=u;return b}function zWt(i){return function(s,u,d){return d&&typeof d!="number"&&QF(s,u,d)&&(u=d=void 0),s=jQ(s),u===void 0?(u=s,s=0):u=jQ(u),d=d===void 0?s1&&QF(i,s[0],s[1])?s=[]:u>2&&QF(s[0],s[1],s[2])&&(s=[s[0]]),PWt(i,qQ(s,1),[])});const CR=VWt;var UWt=1/0,GWt=CD&&1/Jbe(new CD([,-0]))[1]==UWt?function(i){return new CD(i)}:zUt;const KWt=GWt;var WWt=200;function YWt(i,s,u){var d=-1,p=UUt,v=i.length,b=!0,y=[],T=y;if(u)b=!1,p=mWt;else if(v>=WWt){var _=s?null:KWt(i);if(_)return Jbe(_);b=!1,p=IHe,T=new xR}else T=s?[]:y;e:for(;++d1?p.setNode(v,u):p.setNode(v)}),this}setNode(s,u){return Lo(this._nodes,s)?(arguments.length>1&&(this._nodes[s]=u),this):(this._nodes[s]=arguments.length>1?u:this._defaultNodeLabelFn(s),this._isCompound&&(this._parent[s]=KC,this._children[s]={},this._children[KC][s]=!0),this._in[s]={},this._preds[s]={},this._out[s]={},this._sucs[s]={},++this._nodeCount,this)}node(s){return this._nodes[s]}hasNode(s){return Lo(this._nodes,s)}removeNode(s){var u=this;if(Lo(this._nodes,s)){var d=function(p){u.removeEdge(u._edgeObjs[p])};delete this._nodes[s],this._isCompound&&(this._removeFromParentsChildList(s),delete this._parent[s],Ar(this.children(s),function(p){u.setParent(p)}),delete this._children[s]),Ar(fm(this._in[s]),d),delete this._in[s],delete this._preds[s],Ar(fm(this._out[s]),d),delete this._out[s],delete this._sucs[s],--this._nodeCount}return this}setParent(s,u){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(Qf(u))u=KC;else{u+="";for(var d=u;!Qf(d);d=this.parent(d))if(d===s)throw new Error("Setting "+u+" as parent of "+s+" would create a cycle");this.setNode(u)}return this.setNode(s),this._removeFromParentsChildList(s),this._parent[s]=u,this._children[u][s]=!0,this}_removeFromParentsChildList(s){delete this._children[this._parent[s]][s]}parent(s){if(this._isCompound){var u=this._parent[s];if(u!==KC)return u}}children(s){if(Qf(s)&&(s=KC),this._isCompound){var u=this._children[s];if(u)return fm(u)}else{if(s===KC)return this.nodes();if(this.hasNode(s))return[]}}predecessors(s){var u=this._preds[s];if(u)return fm(u)}successors(s){var u=this._sucs[s];if(u)return fm(u)}neighbors(s){var u=this.predecessors(s);if(u)return QWt(u,this.successors(s))}isLeaf(s){var u;return this.isDirected()?u=this.successors(s):u=this.neighbors(s),u.length===0}filterNodes(s){var u=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});u.setGraph(this.graph());var d=this;Ar(this._nodes,function(b,y){s(y)&&u.setNode(y,b)}),Ar(this._edgeObjs,function(b){u.hasNode(b.v)&&u.hasNode(b.w)&&u.setEdge(b,d.edge(b))});var p={};function v(b){var y=d.parent(b);return y===void 0||u.hasNode(y)?(p[b]=y,y):y in p?p[y]:v(y)}return this._isCompound&&Ar(u.nodes(),function(b){u.setParent(b,v(b))}),u}setDefaultEdgeLabel(s){return gD(s)||(s=yD(s)),this._defaultEdgeLabelFn=s,this}edgeCount(){return this._edgeCount}edges(){return $7(this._edgeObjs)}setPath(s,u){var d=this,p=arguments;return TR(s,function(v,b){return p.length>1?d.setEdge(v,b,u):d.setEdge(v,b),b}),this}setEdge(){var s,u,d,p,v=!1,b=arguments[0];typeof b=="object"&&b!==null&&"v"in b?(s=b.v,u=b.w,d=b.name,arguments.length===2&&(p=arguments[1],v=!0)):(s=b,u=arguments[1],d=arguments[3],arguments.length>2&&(p=arguments[2],v=!0)),s=""+s,u=""+u,Qf(d)||(d=""+d);var y=SR(this._isDirected,s,u,d);if(Lo(this._edgeLabels,y))return v&&(this._edgeLabels[y]=p),this;if(!Qf(d)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(s),this.setNode(u),this._edgeLabels[y]=v?p:this._defaultEdgeLabelFn(s,u,d);var T=nYt(this._isDirected,s,u,d);return s=T.v,u=T.w,Object.freeze(T),this._edgeObjs[y]=T,KHe(this._preds[u],s),KHe(this._sucs[s],u),this._in[u][y]=T,this._out[s][y]=T,this._edgeCount++,this}edge(s,u,d){var p=arguments.length===1?ame(this._isDirected,arguments[0]):SR(this._isDirected,s,u,d);return this._edgeLabels[p]}hasEdge(s,u,d){var p=arguments.length===1?ame(this._isDirected,arguments[0]):SR(this._isDirected,s,u,d);return Lo(this._edgeLabels,p)}removeEdge(s,u,d){var p=arguments.length===1?ame(this._isDirected,arguments[0]):SR(this._isDirected,s,u,d),v=this._edgeObjs[p];return v&&(s=v.v,u=v.w,delete this._edgeLabels[p],delete this._edgeObjs[p],WHe(this._preds[u],s),WHe(this._sucs[s],u),delete this._in[u][p],delete this._out[s][p],this._edgeCount--),this}inEdges(s,u){var d=this._in[s];if(d){var p=$7(d);return u?j7(p,function(v){return v.v===u}):p}}outEdges(s,u){var d=this._out[s];if(d){var p=$7(d);return u?j7(p,function(v){return v.w===u}):p}}nodeEdges(s,u){var d=this.inEdges(s,u);if(d)return d.concat(this.outEdges(s,u))}}B0.prototype._nodeCount=0,B0.prototype._edgeCount=0;function KHe(i,s){i[s]?i[s]++:i[s]=1}function WHe(i,s){--i[s]||delete i[s]}function SR(i,s,u,d){var p=""+s,v=""+u;if(!i&&p>v){var b=p;p=v,v=b}return p+GHe+v+GHe+(Qf(d)?tYt:d)}function nYt(i,s,u,d){var p=""+s,v=""+u;if(!i&&p>v){var b=p;p=v,v=b}var y={v:p,w:v};return d&&(y.name=d),y}function ame(i,s){return SR(i,s.v,s.w,s.name)}class rYt{constructor(){var s={};s._next=s._prev=s,this._sentinel=s}dequeue(){var s=this._sentinel,u=s._prev;if(u!==s)return YHe(u),u}enqueue(s){var u=this._sentinel;s._prev&&s._next&&YHe(s),s._next=u._next,u._next._prev=s,u._next=s,s._prev=u}toString(){for(var s=[],u=this._sentinel,d=u._prev;d!==u;)s.push(JSON.stringify(d,iYt)),d=d._prev;return"["+s.join(", ")+"]"}}function YHe(i){i._prev._next=i._next,i._next._prev=i._prev,delete i._next,delete i._prev}function iYt(i,s){if(i!=="_next"&&i!=="_prev")return s}var sYt=yD(1);function aYt(i,s){if(i.nodeCount()<=1)return[];var u=cYt(i,s||sYt),d=oYt(u.graph,u.buckets,u.zeroIdx);return jD(P0(d,function(p){return i.outEdges(p.v,p.w)}))}function oYt(i,s,u){for(var d=[],p=s[s.length-1],v=s[0],b;i.nodeCount();){for(;b=v.dequeue();)ome(i,s,u,b);for(;b=p.dequeue();)ome(i,s,u,b);if(i.nodeCount()){for(var y=s.length-2;y>0;--y)if(b=s[y].dequeue(),b){d=d.concat(ome(i,s,u,b,!0));break}}}return d}function ome(i,s,u,d,p){var v=p?[]:void 0;return Ar(i.inEdges(d.v),function(b){var y=i.edge(b),T=i.node(b.v);p&&v.push({v:b.v,w:b.w}),T.out-=y,cme(s,u,T)}),Ar(i.outEdges(d.v),function(b){var y=i.edge(b),T=b.w,_=i.node(T);_.in-=y,cme(s,u,_)}),i.removeNode(d.v),v}function cYt(i,s){var u=new B0,d=0,p=0;Ar(i.nodes(),function(y){u.setNode(y,{v:y,in:0,out:0})}),Ar(i.edges(),function(y){var T=u.edge(y.v,y.w)||0,_=s(y),A=T+_;u.setEdge(y.v,y.w,A),p=Math.max(p,u.node(y.v).out+=_),d=Math.max(d,u.node(y.w).in+=_)});var v=GC(p+d+3).map(function(){return new rYt}),b=d+1;return Ar(u.nodes(),function(y){cme(v,b,u.node(y))}),{graph:u,buckets:v,zeroIdx:b}}function cme(i,s,u){u.out?u.in?i[u.out-u.in+s].enqueue(u):i[i.length-1].enqueue(u):i[0].enqueue(u)}function uYt(i){var s=i.graph().acyclicer==="greedy"?aYt(i,u(i)):lYt(i);Ar(s,function(d){var p=i.edge(d);i.removeEdge(d),p.forwardName=d.name,p.reversed=!0,i.setEdge(d.w,d.v,p,KQ("rev"))});function u(d){return function(p){return d.edge(p).weight}}}function lYt(i){var s=[],u={},d={};function p(v){Lo(d,v)||(d[v]=!0,u[v]=!0,Ar(i.outEdges(v),function(b){Lo(u,b.w)?s.push(b):p(b.w)}),delete u[v])}return Ar(i.nodes(),p),s}function hYt(i){Ar(i.edges(),function(s){var u=i.edge(s);if(u.reversed){i.removeEdge(s);var d=u.forwardName;delete u.reversed,delete u.forwardName,i.setEdge(s.w,s.v,u,d)}})}function zD(i,s,u,d){var p;do p=KQ(d);while(i.hasNode(p));return u.dummy=s,i.setNode(p,u),p}function fYt(i){var s=new B0().setGraph(i.graph());return Ar(i.nodes(),function(u){s.setNode(u,i.node(u))}),Ar(i.edges(),function(u){var d=s.edge(u.v,u.w)||{weight:0,minlen:1},p=i.edge(u);s.setEdge(u.v,u.w,{weight:d.weight+p.weight,minlen:Math.max(d.minlen,p.minlen)})}),s}function XHe(i){var s=new B0({multigraph:i.isMultigraph()}).setGraph(i.graph());return Ar(i.nodes(),function(u){i.children(u).length||s.setNode(u,i.node(u))}),Ar(i.edges(),function(u){s.setEdge(u,i.edge(u))}),s}function QHe(i,s){var u=i.x,d=i.y,p=s.x-u,v=s.y-d,b=i.width/2,y=i.height/2;if(!p&&!v)throw new Error("Not possible to find intersection inside of the rectangle");var T,_;return Math.abs(v)*b>Math.abs(p)*y?(v<0&&(y=-y),T=y*p/v,_=y):(p<0&&(b=-b),T=b,_=b*v/p),{x:u+T,y:d+_}}function WQ(i){var s=P0(GC(ZHe(i)+1),function(){return[]});return Ar(i.nodes(),function(u){var d=i.node(u),p=d.rank;Qf(p)||(s[p][d.order]=u)}),s}function dYt(i){var s=kR(P0(i.nodes(),function(u){return i.node(u).rank}));Ar(i.nodes(),function(u){var d=i.node(u);Lo(d,"rank")&&(d.rank-=s)})}function gYt(i){var s=kR(P0(i.nodes(),function(v){return i.node(v).rank})),u=[];Ar(i.nodes(),function(v){var b=i.node(v).rank-s;u[b]||(u[b]=[]),u[b].push(v)});var d=0,p=i.graph().nodeRankFactor;Ar(u,function(v,b){Qf(v)&&b%p!==0?--d:d&&Ar(v,function(y){i.node(y).rank+=d})})}function JHe(i,s,u,d){var p={width:0,height:0};return arguments.length>=4&&(p.rank=u,p.order=d),zD(i,"border",p,s)}function ZHe(i){return UC(P0(i.nodes(),function(s){var u=i.node(s).rank;if(!Qf(u))return u}))}function pYt(i,s){var u={lhs:[],rhs:[]};return Ar(i,function(d){s(d)?u.lhs.push(d):u.rhs.push(d)}),u}function bYt(i,s){var u=qHe();try{return s()}finally{console.log(i+" time: "+(qHe()-u)+"ms")}}function mYt(i,s){return s()}function vYt(i){function s(u){var d=i.children(u),p=i.node(u);if(d.length&&Ar(d,s),Lo(p,"minRank")){p.borderLeft=[],p.borderRight=[];for(var v=p.minRank,b=p.maxRank+1;vb.lim&&(y=b,T=!0);var _=j7(s.edges(),function(A){return T===hVe(i,i.node(A.v),y)&&T!==hVe(i,i.node(A.w),y)});return sme(_,function(A){return _R(s,A)})}function lVe(i,s,u,d){var p=u.v,v=u.w;i.removeEdge(p,v),i.setEdge(d.v,d.w,{}),dme(i),fme(i,s),OYt(i,s)}function OYt(i,s){var u=rme(i.nodes(),function(p){return!s.node(p).parent}),d=DYt(i,u);d=d.slice(1),Ar(d,function(p){var v=i.node(p).parent,b=s.edge(p,v),y=!1;b||(b=s.edge(v,p),y=!0),s.node(p).rank=s.node(v).rank+(y?b.minlen:-b.minlen)})}function NYt(i,s,u){return i.hasEdge(s,u)}function hVe(i,s,u){return u.low<=s.lim&&s.lim<=u.lim}function PYt(i){switch(i.graph().ranker){case"network-simplex":fVe(i);break;case"tight-tree":FYt(i);break;case"longest-path":BYt(i);break;default:fVe(i)}}var BYt=hme;function FYt(i){hme(i),rVe(i)}function fVe(i){WC(i)}function RYt(i){var s=zD(i,"root",{},"_root"),u=jYt(i),d=UC($7(u))-1,p=2*d+1;i.graph().nestingRoot=s,Ar(i.edges(),function(b){i.edge(b).minlen*=p});var v=$Yt(i)+1;Ar(i.children(),function(b){dVe(i,s,p,v,d,u,b)}),i.graph().nodeRankFactor=p}function dVe(i,s,u,d,p,v,b){var y=i.children(b);if(!y.length){b!==s&&i.setEdge(s,b,{weight:0,minlen:u});return}var T=JHe(i,"_bt"),_=JHe(i,"_bb"),A=i.node(b);i.setParent(T,b),A.borderTop=T,i.setParent(_,b),A.borderBottom=_,Ar(y,function(P){dVe(i,s,u,d,p,v,P);var R=i.node(P),F=R.borderTop?R.borderTop:P,j=R.borderBottom?R.borderBottom:P,K=R.borderTop?d:2*d,ee=F!==j?1:p-v[b]+1;i.setEdge(T,F,{weight:K,minlen:ee,nestingEdge:!0}),i.setEdge(j,_,{weight:K,minlen:ee,nestingEdge:!0})}),i.parent(b)||i.setEdge(s,T,{weight:0,minlen:p+v[b]})}function jYt(i){var s={};function u(d,p){var v=i.children(d);v&&v.length&&Ar(v,function(b){u(b,p+1)}),s[d]=p}return Ar(i.children(),function(d){u(d,1)}),s}function $Yt(i){return TR(i.edges(),function(s,u){return s+i.edge(u).weight},0)}function zYt(i){var s=i.graph();i.removeNode(s.nestingRoot),delete s.nestingRoot,Ar(i.edges(),function(u){var d=i.edge(u);d.nestingEdge&&i.removeEdge(u)})}function qYt(i,s,u){var d={},p;Ar(u,function(v){for(var b=i.parent(v),y,T;b;){if(y=i.parent(b),y?(T=d[y],d[y]=b):(T=p,p=b),T&&T!==b){s.setEdge(T,b);return}b=y}})}function HYt(i,s,u){var d=VYt(i),p=new B0({compound:!0}).setGraph({root:d}).setDefaultNodeLabel(function(v){return i.node(v)});return Ar(i.nodes(),function(v){var b=i.node(v),y=i.parent(v);(b.rank===s||b.minRank<=s&&s<=b.maxRank)&&(p.setNode(v),p.setParent(v,y||d),Ar(i[u](v),function(T){var _=T.v===v?T.w:T.v,A=p.edge(_,v),P=Qf(A)?0:A.weight;p.setEdge(_,v,{weight:i.edge(T).weight+P})}),Lo(b,"minRank")&&p.setNode(v,{borderLeft:b.borderLeft[s],borderRight:b.borderRight[s]}))}),p}function VYt(i){for(var s;i.hasNode(s=KQ("_root")););return s}function UYt(i,s){for(var u=0,d=1;d0;)A%2&&(P+=y[A+1]),A=A-1>>1,y[A]+=_.weight;T+=_.weight*P})),T}function KYt(i){var s={},u=j7(i.nodes(),function(y){return!i.children(y).length}),d=UC(P0(u,function(y){return i.node(y).rank})),p=P0(GC(d+1),function(){return[]});function v(y){if(!Lo(s,y)){s[y]=!0;var T=i.node(y);p[T.rank].push(y),Ar(i.successors(y),v)}}var b=CR(u,function(y){return i.node(y).rank});return Ar(b,v),p}function WYt(i,s){return P0(s,function(u){var d=i.inEdges(u);if(d.length){var p=TR(d,function(v,b){var y=i.edge(b),T=i.node(b.v);return{sum:v.sum+y.weight*T.order,weight:v.weight+y.weight}},{sum:0,weight:0});return{v:u,barycenter:p.sum/p.weight,weight:p.weight}}else return{v:u}})}function YYt(i,s){var u={};Ar(i,function(p,v){var b=u[p.v]={indegree:0,in:[],out:[],vs:[p.v],i:v};Qf(p.barycenter)||(b.barycenter=p.barycenter,b.weight=p.weight)}),Ar(s.edges(),function(p){var v=u[p.v],b=u[p.w];!Qf(v)&&!Qf(b)&&(b.indegree++,v.out.push(u[p.w]))});var d=j7(u,function(p){return!p.indegree});return XYt(d)}function XYt(i){var s=[];function u(v){return function(b){b.merged||(Qf(b.barycenter)||Qf(v.barycenter)||b.barycenter>=v.barycenter)&&QYt(v,b)}}function d(v){return function(b){b.in.push(v),--b.indegree===0&&i.push(b)}}for(;i.length;){var p=i.pop();s.push(p),Ar(p.in.reverse(),u(p)),Ar(p.out,d(p))}return P0(j7(s,function(v){return!v.merged}),function(v){return ER(v,["vs","i","barycenter","weight"])})}function QYt(i,s){var u=0,d=0;i.weight&&(u+=i.barycenter*i.weight,d+=i.weight),s.weight&&(u+=s.barycenter*s.weight,d+=s.weight),i.vs=s.vs.concat(i.vs),i.barycenter=u/d,i.weight=d,i.i=Math.min(s.i,i.i),s.merged=!0}function JYt(i,s){var u=pYt(i,function(A){return Lo(A,"barycenter")}),d=u.lhs,p=CR(u.rhs,function(A){return-A.i}),v=[],b=0,y=0,T=0;d.sort(ZYt(!!s)),T=gVe(v,p,T),Ar(d,function(A){T+=A.vs.length,v.push(A.vs),b+=A.barycenter*A.weight,y+=A.weight,T=gVe(v,p,T)});var _={vs:jD(v)};return y&&(_.barycenter=b/y,_.weight=y),_}function gVe(i,s,u){for(var d;s.length&&(d=UQ(s)).i<=u;)s.pop(),i.push(d.vs),u++;return u}function ZYt(i){return function(s,u){return s.barycenteru.barycenter?1:i?u.i-s.i:s.i-u.i}}function pVe(i,s,u,d){var p=i.children(s),v=i.node(s),b=v?v.borderLeft:void 0,y=v?v.borderRight:void 0,T={};b&&(p=j7(p,function(j){return j!==b&&j!==y}));var _=WYt(i,p);Ar(_,function(j){if(i.children(j.v).length){var K=pVe(i,j.v,u,d);T[j.v]=K,Lo(K,"barycenter")&&tXt(j,K)}});var A=YYt(_,u);eXt(A,T);var P=JYt(A,d);if(b&&(P.vs=jD([b,P.vs,y]),i.predecessors(b).length)){var R=i.node(i.predecessors(b)[0]),F=i.node(i.predecessors(y)[0]);Lo(P,"barycenter")||(P.barycenter=0,P.weight=0),P.barycenter=(P.barycenter*P.weight+R.order+F.order)/(P.weight+2),P.weight+=2}return P}function eXt(i,s){Ar(i,function(u){u.vs=jD(u.vs.map(function(d){return s[d]?s[d].vs:d}))})}function tXt(i,s){Qf(i.barycenter)?(i.barycenter=s.barycenter,i.weight=s.weight):(i.barycenter=(i.barycenter*i.weight+s.barycenter*s.weight)/(i.weight+s.weight),i.weight+=s.weight)}function nXt(i){var s=ZHe(i),u=bVe(i,GC(1,s+1),"inEdges"),d=bVe(i,GC(s-1,-1,-1),"outEdges"),p=KYt(i);mVe(i,p);for(var v=Number.POSITIVE_INFINITY,b,y=0,T=0;T<4;++y,++T){rXt(y%2?u:d,y%4>=2),p=WQ(i);var _=UYt(i,p);_b||y>s[T].lim));for(_=T,T=d;(T=i.parent(T))!==_;)v.push(T);return{path:p.concat(v.reverse()),lca:_}}function aXt(i){var s={},u=0;function d(p){var v=u;Ar(i.children(p),d),s[p]={low:v,lim:u++}}return Ar(i.children(),d),s}function oXt(i,s){var u={};function d(p,v){var b=0,y=0,T=p.length,_=UQ(v);return Ar(v,function(A,P){var R=uXt(i,A),F=R?i.node(R).order:T;(R||A===_)&&(Ar(v.slice(y,P+1),function(j){Ar(i.predecessors(j),function(K){var ee=i.node(K),ie=ee.order;(ie_)&&vVe(u,R,A)})})}function p(v,b){var y=-1,T,_=0;return Ar(b,function(A,P){if(i.node(A).dummy==="border"){var R=i.predecessors(A);R.length&&(T=i.node(R[0]).order,d(b,_,P,y,T),_=P,y=T)}d(b,_,b.length,T,v.length)}),b}return TR(s,p),u}function uXt(i,s){if(i.node(s).dummy)return rme(i.predecessors(s),function(u){return i.node(u).dummy})}function vVe(i,s,u){if(s>u){var d=s;s=u,u=d}var p=i[s];p||(i[s]=p={}),p[u]=!0}function lXt(i,s,u){if(s>u){var d=s;s=u,u=d}return Lo(i[s],u)}function hXt(i,s,u,d){var p={},v={},b={};return Ar(s,function(y){Ar(y,function(T,_){p[T]=T,v[T]=T,b[T]=_})}),Ar(s,function(y){var T=-1;Ar(y,function(_){var A=d(_);if(A.length){A=CR(A,function(K){return b[K]});for(var P=(A.length-1)/2,R=Math.floor(P),F=Math.ceil(P);R<=F;++R){var j=A[R];v[_]===_&&T0}function e5(i,s,u){var d=i.x,p=i.y,v=[],b=Number.POSITIVE_INFINITY,y=Number.POSITIVE_INFINITY;s.forEach(function(j){b=Math.min(b,j.x),y=Math.min(y,j.y)});for(var T=d-i.width/2-b,_=p-i.height/2-y,A=0;A1&&v.sort(function(j,K){var ee=j.x-u.x,ie=j.y-u.y,oe=Math.sqrt(ee*ee+ie*ie),pe=K.x-u.x,be=K.y-u.y,ae=Math.sqrt(pe*pe+be*be);return oeMath.abs(p)*y?(v<0&&(y=-y),T=v===0?0:y*p/v,_=y):(p<0&&(b=-b),T=b,_=p===0?0:b*v/p),{x:u+T,y:d+_}}var Cme={rect:gQt,ellipse:pQt,circle:bQt,diamond:mQt};function dQt(i){Cme=i}function gQt(i,s,u){var d=i.insert("rect",":first-child").attr("rx",u.rx).attr("ry",u.ry).attr("x",-s.width/2).attr("y",-s.height/2).attr("width",s.width).attr("height",s.height);return u.intersect=function(p){return Tme(u,p)},d}function pQt(i,s,u){var d=s.width/2,p=s.height/2,v=i.insert("ellipse",":first-child").attr("x",-s.width/2).attr("y",-s.height/2).attr("rx",d).attr("ry",p);return u.intersect=function(b){return TVe(u,d,p,b)},v}function bQt(i,s,u){var d=Math.max(s.width,s.height)/2,p=i.insert("circle",":first-child").attr("x",-s.width/2).attr("y",-s.height/2).attr("r",d);return u.intersect=function(v){return hQt(u,d,v)},p}function mQt(i,s,u){var d=s.width*Math.SQRT2/2,p=s.height*Math.SQRT2/2,v=[{x:0,y:-p},{x:-d,y:0},{x:0,y:p},{x:d,y:0}],b=i.insert("polygon",":first-child").attr("points",v.map(function(y){return y.x+","+y.y}).join(" "));return u.intersect=function(y){return e5(u,v,y)},b}function vQt(){var i=function(s,u){xQt(u);var d=AR(s,"output"),p=AR(d,"clusters"),v=AR(d,"edgePaths"),b=xme(AR(d,"edgeLabels"),u),y=Eme(AR(d,"nodes"),u,Cme);qD(u),lQt(y,u),uQt(b,u),kme(v,u,mme);var T=yme(p,u);cQt(T,u),kQt(u)};return i.createNodes=function(s){return arguments.length?(oQt(s),i):Eme},i.createClusters=function(s){return arguments.length?(ZXt(s),i):yme},i.createEdgeLabels=function(s){return arguments.length?(eQt(s),i):xme},i.createEdgePaths=function(s){return arguments.length?(tQt(s),i):kme},i.shapes=function(s){return arguments.length?(dQt(s),i):Cme},i.arrows=function(s){return arguments.length?(GXt(s),i):mme},i}var wQt={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},yQt={arrowhead:"normal",curve:kp};function xQt(i){i.nodes().forEach(function(s){var u=i.node(s);!Lo(u,"label")&&!i.children(s).length&&(u.label=s),Lo(u,"paddingX")&&$D(u,{paddingLeft:u.paddingX,paddingRight:u.paddingX}),Lo(u,"paddingY")&&$D(u,{paddingTop:u.paddingY,paddingBottom:u.paddingY}),Lo(u,"padding")&&$D(u,{paddingLeft:u.padding,paddingRight:u.padding,paddingTop:u.padding,paddingBottom:u.padding}),$D(u,wQt),Ar(["paddingLeft","paddingRight","paddingTop","paddingBottom"],function(d){u[d]=Number(u[d])}),Lo(u,"width")&&(u._prevWidth=u.width),Lo(u,"height")&&(u._prevHeight=u.height)}),i.edges().forEach(function(s){var u=i.edge(s);Lo(u,"label")||(u.label=""),$D(u,yQt)})}function kQt(i){Ar(i.nodes(),function(s){var u=i.node(s);Lo(u,"_prevWidth")?u.width=u._prevWidth:delete u.width,Lo(u,"_prevHeight")?u.height=u._prevHeight:delete u.height,delete u._prevWidth,delete u._prevHeight})}function AR(i,s){var u=i.select("g."+s);return u.empty()&&(u=i.append("g").attr("class",s)),u}function SVe(i,s,u){const d=s.width,p=s.height,v=(d+p)*.9,b=[{x:v/2,y:0},{x:v,y:-v/2},{x:v/2,y:-v},{x:0,y:-v/2}],y=z7(i,v,v,b);return u.intersect=function(T){return e5(u,b,T)},y}function _Ve(i,s,u){const p=s.height,v=p/4,b=s.width+2*v,y=[{x:v,y:0},{x:b-v,y:0},{x:b,y:-p/2},{x:b-v,y:-p},{x:v,y:-p},{x:0,y:-p/2}],T=z7(i,b,p,y);return u.intersect=function(_){return e5(u,y,_)},T}function AVe(i,s,u){const d=s.width,p=s.height,v=[{x:-p/2,y:0},{x:d,y:0},{x:d,y:-p},{x:-p/2,y:-p},{x:0,y:-p/2}],b=z7(i,d,p,v);return u.intersect=function(y){return e5(u,v,y)},b}function LVe(i,s,u){const d=s.width,p=s.height,v=[{x:-2*p/6,y:0},{x:d-p/6,y:0},{x:d+2*p/6,y:-p},{x:p/6,y:-p}],b=z7(i,d,p,v);return u.intersect=function(y){return e5(u,v,y)},b}function MVe(i,s,u){const d=s.width,p=s.height,v=[{x:2*p/6,y:0},{x:d+p/6,y:0},{x:d-2*p/6,y:-p},{x:-p/6,y:-p}],b=z7(i,d,p,v);return u.intersect=function(y){return e5(u,v,y)},b}function DVe(i,s,u){const d=s.width,p=s.height,v=[{x:-2*p/6,y:0},{x:d+2*p/6,y:0},{x:d-p/6,y:-p},{x:p/6,y:-p}],b=z7(i,d,p,v);return u.intersect=function(y){return e5(u,v,y)},b}function IVe(i,s,u){const d=s.width,p=s.height,v=[{x:p/6,y:0},{x:d-p/6,y:0},{x:d+2*p/6,y:-p},{x:-2*p/6,y:-p}],b=z7(i,d,p,v);return u.intersect=function(y){return e5(u,v,y)},b}function OVe(i,s,u){const d=s.width,p=s.height,v=[{x:0,y:0},{x:d+p/2,y:0},{x:d,y:-p/2},{x:d+p/2,y:-p},{x:0,y:-p}],b=z7(i,d,p,v);return u.intersect=function(y){return e5(u,v,y)},b}function NVe(i,s,u){const d=s.height,p=s.width+d/4,v=i.insert("rect",":first-child").attr("rx",d/2).attr("ry",d/2).attr("x",-p/2).attr("y",-d/2).attr("width",p).attr("height",d);return u.intersect=function(b){return Tme(u,b)},v}function PVe(i,s,u){const d=s.width,p=s.height,v=[{x:0,y:0},{x:d,y:0},{x:d,y:-p},{x:0,y:-p},{x:0,y:0},{x:-8,y:0},{x:d+8,y:0},{x:d+8,y:-p},{x:-8,y:-p},{x:-8,y:0}],b=z7(i,d,p,v);return u.intersect=function(y){return e5(u,v,y)},b}function BVe(i,s,u){const d=s.width,p=d/2,v=p/(2.5+d/50),b=s.height+v,y="M 0,"+v+" a "+p+","+v+" 0,0,0 "+d+" 0 a "+p+","+v+" 0,0,0 "+-d+" 0 l 0,"+b+" a "+p+","+v+" 0,0,0 "+d+" 0 l 0,"+-b,T=i.attr("label-offset-y",v).insert("path",":first-child").attr("d",y).attr("transform","translate("+-d/2+","+-(b/2+v)+")");return u.intersect=function(_){const A=Tme(u,_),P=A.x-u.x;if(p!=0&&(Math.abs(P)u.height/2-v)){let R=v*v*(1-P*P/(p*p));R!=0&&(R=Math.sqrt(R)),R=v-R,_.y-u.y>0&&(R=-R),A.y+=R}return A},T}function EQt(i){i.shapes().question=SVe,i.shapes().hexagon=_Ve,i.shapes().stadium=NVe,i.shapes().subroutine=PVe,i.shapes().cylinder=BVe,i.shapes().rect_left_inv_arrow=AVe,i.shapes().lean_right=LVe,i.shapes().lean_left=MVe,i.shapes().trapezoid=DVe,i.shapes().inv_trapezoid=IVe,i.shapes().rect_right_inv_arrow=OVe}function TQt(i){i({question:SVe}),i({hexagon:_Ve}),i({stadium:NVe}),i({subroutine:PVe}),i({cylinder:BVe}),i({rect_left_inv_arrow:AVe}),i({lean_right:LVe}),i({lean_left:MVe}),i({trapezoid:DVe}),i({inv_trapezoid:IVe}),i({rect_right_inv_arrow:OVe})}function z7(i,s,u,d){return i.insert("polygon",":first-child").attr("points",d.map(function(p){return p.x+","+p.y}).join(" ")).attr("transform","translate("+-s/2+","+u/2+")")}const CQt={addToRender:EQt,addToRenderV2:TQt},FVe={},SQt=function(i){const s=Object.keys(i);for(const u of s)FVe[u]=i[u]},RVe=async function(i,s,u,d,p,v){const b=d?d.select(`[id="${u}"]`):Ir(`[id="${u}"]`),y=p||document,T=Object.keys(i);for(const _ of T){const A=i[_];let P="default";A.classes.length>0&&(P=A.classes.join(" "));const R=om(A.styles);let F=A.text!==void 0?A.text:A.id,j;if(f1(qt().flowchart.htmlLabels)){const ie={label:await CC(F.replace(/fa[blrs]?:fa-[\w-]+/g,oe=>``),qt())};j=vme(b,ie).node(),j.parentNode.removeChild(j)}else{const ie=y.createElementNS("http://www.w3.org/2000/svg","text");ie.setAttribute("style",R.labelStyle.replace("color:","fill:"));const oe=F.split(ci.lineBreakRegex);for(const pe of oe){const be=y.createElementNS("http://www.w3.org/2000/svg","tspan");be.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),be.setAttribute("dy","1em"),be.setAttribute("x","1"),be.textContent=pe,ie.appendChild(be)}j=ie}let K=0,ee="";switch(A.type){case"round":K=5,ee="rect";break;case"square":ee="rect";break;case"diamond":ee="question";break;case"hexagon":ee="hexagon";break;case"odd":ee="rect_left_inv_arrow";break;case"lean_right":ee="lean_right";break;case"lean_left":ee="lean_left";break;case"trapezoid":ee="trapezoid";break;case"inv_trapezoid":ee="inv_trapezoid";break;case"odd_right":ee="rect_left_inv_arrow";break;case"circle":ee="circle";break;case"ellipse":ee="ellipse";break;case"stadium":ee="stadium";break;case"subroutine":ee="subroutine";break;case"cylinder":ee="cylinder";break;case"group":ee="rect";break;default:ee="rect"}Xe.warn("Adding node",A.id,A.domId),s.setNode(v.db.lookUpDomId(A.id),{labelType:"svg",labelStyle:R.labelStyle,shape:ee,label:j,rx:K,ry:K,class:P,style:R.style,id:v.db.lookUpDomId(A.id)})}},jVe=async function(i,s,u){let d=0,p,v;if(i.defaultStyle!==void 0){const b=om(i.defaultStyle);p=b.style,v=b.labelStyle}for(const b of i){d++;const y="L-"+b.start+"-"+b.end,T="LS-"+b.start,_="LE-"+b.end,A={};b.type==="arrow_open"?A.arrowhead="none":A.arrowhead="normal";let P="",R="";if(b.style!==void 0){const F=om(b.style);P=F.style,R=F.labelStyle}else switch(b.stroke){case"normal":P="fill:none",p!==void 0&&(P=p),v!==void 0&&(R=v);break;case"dotted":P="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":P=" stroke-width: 3.5px;fill:none";break}A.style=P,A.labelStyle=R,b.interpolate!==void 0?A.curve=Ov(b.interpolate,kp):i.defaultInterpolate!==void 0?A.curve=Ov(i.defaultInterpolate,kp):A.curve=Ov(FVe.curve,kp),b.text===void 0?b.style!==void 0&&(A.arrowheadStyle="fill: #333"):(A.arrowheadStyle="fill: #333",A.labelpos="c",f1(qt().flowchart.htmlLabels)?(A.labelType="html",A.label=`${await CC(b.text.replace(/fa[blrs]?:fa-[\w-]+/g,F=>``),qt())}`):(A.labelType="text",A.label=b.text.replace(ci.lineBreakRegex,` +`),b.style===void 0&&(A.style=A.style||"stroke: #333; stroke-width: 1.5px;fill:none"),A.labelStyle=A.labelStyle.replace("color:","fill:"))),A.id=y,A.class=T+" "+_,A.minlen=b.length||1,s.setEdge(u.db.lookUpDomId(b.start),u.db.lookUpDomId(b.end),A,d)}},_Qt={setConf:SQt,addVertices:RVe,addEdges:jVe,getClasses:function(i,s){return Xe.info("Extracting classes"),s.db.getClasses()},draw:async function(i,s,u,d){Xe.info("Drawing flowchart");const{securityLevel:p,flowchart:v}=qt();let b;p==="sandbox"&&(b=Ir("#i"+s));const y=Ir(p==="sandbox"?b.nodes()[0].contentDocument.body:"body"),T=p==="sandbox"?b.nodes()[0].contentDocument:document;let _=d.db.getDirection();_===void 0&&(_="TD");const A=v.nodeSpacing||50,P=v.rankSpacing||50,R=new B0({multigraph:!0,compound:!0}).setGraph({rankdir:_,nodesep:A,ranksep:P,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});let F;const j=d.db.getSubGraphs();for(let ne=j.length-1;ne>=0;ne--)F=j[ne],d.db.addVertex(F.id,F.title,"group",void 0,F.classes);const K=d.db.getVertices();Xe.warn("Get vertices",K);const ee=d.db.getEdges();let ie=0;for(ie=j.length-1;ie>=0;ie--){F=j[ie],_Be("cluster").append("text");for(let ne=0;ne{s.forEach(p=>{DQt[p](i,u,d)})},DQt={extension:(i,s,u)=>{Xe.trace("Making markers for ",u),i.append("defs").append("marker").attr("id",u+"_"+s+"-extensionStart").attr("class","marker extension "+s).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),i.append("defs").append("marker").attr("id",u+"_"+s+"-extensionEnd").attr("class","marker extension "+s).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},composition:(i,s,u)=>{i.append("defs").append("marker").attr("id",u+"_"+s+"-compositionStart").attr("class","marker composition "+s).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",u+"_"+s+"-compositionEnd").attr("class","marker composition "+s).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},aggregation:(i,s,u)=>{i.append("defs").append("marker").attr("id",u+"_"+s+"-aggregationStart").attr("class","marker aggregation "+s).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",u+"_"+s+"-aggregationEnd").attr("class","marker aggregation "+s).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},dependency:(i,s,u)=>{i.append("defs").append("marker").attr("id",u+"_"+s+"-dependencyStart").attr("class","marker dependency "+s).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",u+"_"+s+"-dependencyEnd").attr("class","marker dependency "+s).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},lollipop:(i,s,u)=>{i.append("defs").append("marker").attr("id",u+"_"+s+"-lollipopStart").attr("class","marker lollipop "+s).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),i.append("defs").append("marker").attr("id",u+"_"+s+"-lollipopEnd").attr("class","marker lollipop "+s).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},point:(i,s,u)=>{i.append("marker").attr("id",u+"_"+s+"-pointEnd").attr("class","marker "+s).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),i.append("marker").attr("id",u+"_"+s+"-pointStart").attr("class","marker "+s).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},circle:(i,s,u)=>{i.append("marker").attr("id",u+"_"+s+"-circleEnd").attr("class","marker "+s).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),i.append("marker").attr("id",u+"_"+s+"-circleStart").attr("class","marker "+s).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},cross:(i,s,u)=>{i.append("marker").attr("id",u+"_"+s+"-crossEnd").attr("class","marker cross "+s).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),i.append("marker").attr("id",u+"_"+s+"-crossStart").attr("class","marker cross "+s).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},barb:(i,s,u)=>{i.append("defs").append("marker").attr("id",u+"_"+s+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")}},Sme=MQt;function IQt(i,s){s&&i.attr("style",s)}function OQt(i){const s=Ir(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),u=s.append("xhtml:div"),d=i.label,p=i.isNode?"nodeLabel":"edgeLabel";return u.html('"+d+""),IQt(u,i.labelStyle),u.style("display","inline-block"),u.style("white-space","nowrap"),u.attr("xmlns","http://www.w3.org/1999/xhtml"),s.node()}const $2=(i,s,u,d)=>{let p=i||"";if(typeof p=="object"&&(p=p[0]),f1(qt().flowchart.htmlLabels)){p=p.replace(/\\n|\n/g,"
"),Xe.debug("vertexText"+p);const v={isNode:d,label:ZF(p).replace(/fa[blrs]?:fa-[\w-]+/g,y=>``),labelStyle:s.replace("fill:","color:")};return OQt(v)}else{const v=document.createElementNS("http://www.w3.org/2000/svg","text");v.setAttribute("style",s.replace("color:","fill:"));let b=[];typeof p=="string"?b=p.split(/\\n|\n|/gi):Array.isArray(p)?b=p:b=[];for(const y of b){const T=document.createElementNS("http://www.w3.org/2000/svg","tspan");T.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),T.setAttribute("dy","1em"),T.setAttribute("x","0"),u?T.setAttribute("class","title-row"):T.setAttribute("class","row"),T.textContent=y.trim(),v.appendChild(T)}return v}},NQt={};function PQt(i,s){const u=s||NQt,d=typeof u.includeImageAlt=="boolean"?u.includeImageAlt:!0,p=typeof u.includeHtml=="boolean"?u.includeHtml:!0;return $Ve(i,d,p)}function $Ve(i,s,u){if(BQt(i)){if("value"in i)return i.type==="html"&&!u?"":i.value;if(s&&"alt"in i&&i.alt)return i.alt;if("children"in i)return zVe(i.children,s,u)}return Array.isArray(i)?zVe(i,s,u):""}function zVe(i,s,u){const d=[];let p=-1;for(;++pp?0:p+s:s=s>p?p:s,u=u>0?u:0,d.length<1e4)b=Array.from(d),b.unshift(s,u),i.splice(...b);else for(u&&i.splice(s,u);v0?(t5(i,i.length,0,s),i):s}const qVe={}.hasOwnProperty;function FQt(i){const s={};let u=-1;for(;++ub))return;const se=s.events.length;let de=se,X,ge;for(;de--;)if(s.events[de][0]==="exit"&&s.events[de][1].type==="chunkFlow"){if(X){ge=s.events[de][1].end;break}X=!0}for(ie(d),ne=se;nepe;){const ae=u[be];s.containerState=ae[1],ae[0].exit.call(s,i)}u.length=pe}function oe(){p.write([null]),v=void 0,p=void 0,s.containerState._closeFlow=void 0}}function XQt(i,s,u){return Kl(i,i.attempt(this.parser.constructs.document,s,u),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function VVe(i){if(i===null||z2(i)||UQt(i))return 1;if(VQt(i))return 2}function Lme(i,s,u){const d=[];let p=-1;for(;++p1&&i[u][1].end.offset-i[u][1].start.offset>1?2:1;const P=Object.assign({},i[d][1].end),R=Object.assign({},i[u][1].start);UVe(P,-T),UVe(R,T),b={type:T>1?"strongSequence":"emphasisSequence",start:P,end:Object.assign({},i[d][1].end)},y={type:T>1?"strongSequence":"emphasisSequence",start:Object.assign({},i[u][1].start),end:R},v={type:T>1?"strongText":"emphasisText",start:Object.assign({},i[d][1].end),end:Object.assign({},i[u][1].start)},p={type:T>1?"strong":"emphasis",start:Object.assign({},b.start),end:Object.assign({},y.end)},i[d][1].end=Object.assign({},b.start),i[u][1].start=Object.assign({},y.end),_=[],i[d][1].end.offset-i[d][1].start.offset&&(_=zv(_,[["enter",i[d][1],s],["exit",i[d][1],s]])),_=zv(_,[["enter",p,s],["enter",b,s],["exit",b,s],["enter",v,s]]),_=zv(_,Lme(s.parser.constructs.insideSpan.null,i.slice(d+1,u),s)),_=zv(_,[["exit",v,s],["enter",y,s],["exit",y,s],["exit",p,s]]),i[u][1].end.offset-i[u][1].start.offset?(A=2,_=zv(_,[["enter",i[u][1],s],["exit",i[u][1],s]])):A=0,t5(i,d-1,u-d+3,_),u=d+_.length-A-2;break}}for(u=-1;++u0&&Iu(ne)?Kl(i,oe,"linePrefix",v+1)(ne):oe(ne)}function oe(ne){return ne===null||so(ne)?i.check(XVe,K,be)(ne):(i.enter("codeFlowValue"),pe(ne))}function pe(ne){return ne===null||so(ne)?(i.exit("codeFlowValue"),oe(ne)):(i.consume(ne),pe)}function be(ne){return i.exit("codeFenced"),s(ne)}function ae(ne,se,de){let X=0;return ge;function ge(Pe){return ne.enter("lineEnding"),ne.consume(Pe),ne.exit("lineEnding"),W}function W(Pe){return ne.enter("codeFencedFence"),Iu(Pe)?Kl(ne,xe,"linePrefix",d.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(Pe):xe(Pe)}function xe(Pe){return Pe===y?(ne.enter("codeFencedFenceSequence"),U(Pe)):de(Pe)}function U(Pe){return Pe===y?(X++,ne.consume(Pe),U):X>=b?(ne.exit("codeFencedFenceSequence"),Iu(Pe)?Kl(ne,Fe,"whitespace")(Pe):Fe(Pe)):de(Pe)}function Fe(Pe){return Pe===null||so(Pe)?(ne.exit("codeFencedFence"),se(Pe)):de(Pe)}}}function cJt(i,s,u){const d=this;return p;function p(b){return b===null?u(b):(i.enter("lineEnding"),i.consume(b),i.exit("lineEnding"),v)}function v(b){return d.parser.lazy[d.now().line]?u(b):s(b)}}const Ime={name:"codeIndented",tokenize:lJt},uJt={tokenize:hJt,partial:!0};function lJt(i,s,u){const d=this;return p;function p(_){return i.enter("codeIndented"),Kl(i,v,"linePrefix",4+1)(_)}function v(_){const A=d.events[d.events.length-1];return A&&A[1].type==="linePrefix"&&A[2].sliceSerialize(A[1],!0).length>=4?b(_):u(_)}function b(_){return _===null?T(_):so(_)?i.attempt(uJt,b,T)(_):(i.enter("codeFlowValue"),y(_))}function y(_){return _===null||so(_)?(i.exit("codeFlowValue"),b(_)):(i.consume(_),y)}function T(_){return i.exit("codeIndented"),s(_)}}function hJt(i,s,u){const d=this;return p;function p(b){return d.parser.lazy[d.now().line]?u(b):so(b)?(i.enter("lineEnding"),i.consume(b),i.exit("lineEnding"),p):Kl(i,v,"linePrefix",4+1)(b)}function v(b){const y=d.events[d.events.length-1];return y&&y[1].type==="linePrefix"&&y[2].sliceSerialize(y[1],!0).length>=4?s(b):so(b)?p(b):u(b)}}const fJt={name:"codeText",tokenize:pJt,resolve:dJt,previous:gJt};function dJt(i){let s=i.length-4,u=3,d,p;if((i[u][1].type==="lineEnding"||i[u][1].type==="space")&&(i[s][1].type==="lineEnding"||i[s][1].type==="space")){for(d=u;++d=4?s(b):i.interrupt(d.parser.constructs.flow,u,s)(b)}}function ZVe(i,s,u,d,p,v,b,y,T){const _=T||Number.POSITIVE_INFINITY;let A=0;return P;function P(ie){return ie===60?(i.enter(d),i.enter(p),i.enter(v),i.consume(ie),i.exit(v),R):ie===null||ie===32||ie===41||_me(ie)?u(ie):(i.enter(d),i.enter(b),i.enter(y),i.enter("chunkString",{contentType:"string"}),K(ie))}function R(ie){return ie===62?(i.enter(v),i.consume(ie),i.exit(v),i.exit(p),i.exit(d),s):(i.enter(y),i.enter("chunkString",{contentType:"string"}),F(ie))}function F(ie){return ie===62?(i.exit("chunkString"),i.exit(y),R(ie)):ie===null||ie===60||so(ie)?u(ie):(i.consume(ie),ie===92?j:F)}function j(ie){return ie===60||ie===62||ie===92?(i.consume(ie),F):F(ie)}function K(ie){return!A&&(ie===null||ie===41||z2(ie))?(i.exit("chunkString"),i.exit(y),i.exit(b),i.exit(d),s(ie)):A<_&&ie===40?(i.consume(ie),A++,K):ie===41?(i.consume(ie),A--,K):ie===null||ie===32||ie===40||_me(ie)?u(ie):(i.consume(ie),ie===92?ee:K)}function ee(ie){return ie===40||ie===41||ie===92?(i.consume(ie),K):K(ie)}}function eUe(i,s,u,d,p,v){const b=this;let y=0,T;return _;function _(F){return i.enter(d),i.enter(p),i.consume(F),i.exit(p),i.enter(v),A}function A(F){return y>999||F===null||F===91||F===93&&!T||F===94&&!y&&"_hiddenFootnoteSupport"in b.parser.constructs?u(F):F===93?(i.exit(v),i.enter(p),i.consume(F),i.exit(p),i.exit(d),s):so(F)?(i.enter("lineEnding"),i.consume(F),i.exit("lineEnding"),A):(i.enter("chunkString",{contentType:"string"}),P(F))}function P(F){return F===null||F===91||F===93||so(F)||y++>999?(i.exit("chunkString"),A(F)):(i.consume(F),T||(T=!Iu(F)),F===92?R:P)}function R(F){return F===91||F===92||F===93?(i.consume(F),y++,P):P(F)}}function tUe(i,s,u,d,p,v){let b;return y;function y(R){return R===34||R===39||R===40?(i.enter(d),i.enter(p),i.consume(R),i.exit(p),b=R===40?41:R,T):u(R)}function T(R){return R===b?(i.enter(p),i.consume(R),i.exit(p),i.exit(d),s):(i.enter(v),_(R))}function _(R){return R===b?(i.exit(v),T(b)):R===null?u(R):so(R)?(i.enter("lineEnding"),i.consume(R),i.exit("lineEnding"),Kl(i,_,"linePrefix")):(i.enter("chunkString",{contentType:"string"}),A(R))}function A(R){return R===b||R===null||so(R)?(i.exit("chunkString"),_(R)):(i.consume(R),R===92?P:A)}function P(R){return R===b||R===92?(i.consume(R),A):A(R)}}function LR(i,s){let u;return d;function d(p){return so(p)?(i.enter("lineEnding"),i.consume(p),i.exit("lineEnding"),u=!0,d):Iu(p)?Kl(i,d,u?"linePrefix":"lineSuffix")(p):s(p)}}function HD(i){return i.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const kJt={name:"definition",tokenize:TJt},EJt={tokenize:CJt,partial:!0};function TJt(i,s,u){const d=this;let p;return v;function v(F){return i.enter("definition"),b(F)}function b(F){return eUe.call(d,i,y,u,"definitionLabel","definitionLabelMarker","definitionLabelString")(F)}function y(F){return p=HD(d.sliceSerialize(d.events[d.events.length-1][1]).slice(1,-1)),F===58?(i.enter("definitionMarker"),i.consume(F),i.exit("definitionMarker"),T):u(F)}function T(F){return z2(F)?LR(i,_)(F):_(F)}function _(F){return ZVe(i,A,u,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(F)}function A(F){return i.attempt(EJt,P,P)(F)}function P(F){return Iu(F)?Kl(i,R,"whitespace")(F):R(F)}function R(F){return F===null||so(F)?(i.exit("definition"),d.parser.defined.push(p),s(F)):u(F)}}function CJt(i,s,u){return d;function d(y){return z2(y)?LR(i,p)(y):u(y)}function p(y){return tUe(i,v,u,"definitionTitle","definitionTitleMarker","definitionTitleString")(y)}function v(y){return Iu(y)?Kl(i,b,"whitespace")(y):b(y)}function b(y){return y===null||so(y)?s(y):u(y)}}const SJt={name:"hardBreakEscape",tokenize:_Jt};function _Jt(i,s,u){return d;function d(v){return i.enter("hardBreakEscape"),i.consume(v),p}function p(v){return so(v)?(i.exit("hardBreakEscape"),s(v)):u(v)}}const AJt={name:"headingAtx",tokenize:MJt,resolve:LJt};function LJt(i,s){let u=i.length-2,d=3,p,v;return i[d][1].type==="whitespace"&&(d+=2),u-2>d&&i[u][1].type==="whitespace"&&(u-=2),i[u][1].type==="atxHeadingSequence"&&(d===u-1||u-4>d&&i[u-2][1].type==="whitespace")&&(u-=d+1===u?2:4),u>d&&(p={type:"atxHeadingText",start:i[d][1].start,end:i[u][1].end},v={type:"chunkText",start:i[d][1].start,end:i[u][1].end,contentType:"text"},t5(i,d,u-d+1,[["enter",p,s],["enter",v,s],["exit",v,s],["exit",p,s]])),i}function MJt(i,s,u){let d=0;return p;function p(A){return i.enter("atxHeading"),v(A)}function v(A){return i.enter("atxHeadingSequence"),b(A)}function b(A){return A===35&&d++<6?(i.consume(A),b):A===null||z2(A)?(i.exit("atxHeadingSequence"),y(A)):u(A)}function y(A){return A===35?(i.enter("atxHeadingSequence"),T(A)):A===null||so(A)?(i.exit("atxHeading"),s(A)):Iu(A)?Kl(i,y,"whitespace")(A):(i.enter("atxHeadingText"),_(A))}function T(A){return A===35?(i.consume(A),T):(i.exit("atxHeadingSequence"),y(A))}function _(A){return A===null||A===35||z2(A)?(i.exit("atxHeadingText"),y(A)):(i.consume(A),_)}}const DJt=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],nUe=["pre","script","style","textarea"],IJt={name:"htmlFlow",tokenize:BJt,resolveTo:PJt,concrete:!0},OJt={tokenize:RJt,partial:!0},NJt={tokenize:FJt,partial:!0};function PJt(i){let s=i.length;for(;s--&&!(i[s][0]==="enter"&&i[s][1].type==="htmlFlow"););return s>1&&i[s-2][1].type==="linePrefix"&&(i[s][1].start=i[s-2][1].start,i[s+1][1].start=i[s-2][1].start,i.splice(s-2,2)),i}function BJt(i,s,u){const d=this;let p,v,b,y,T;return _;function _(Ne){return A(Ne)}function A(Ne){return i.enter("htmlFlow"),i.enter("htmlFlowData"),i.consume(Ne),P}function P(Ne){return Ne===33?(i.consume(Ne),R):Ne===47?(i.consume(Ne),v=!0,K):Ne===63?(i.consume(Ne),p=3,d.interrupt?s:ke):n5(Ne)?(i.consume(Ne),b=String.fromCharCode(Ne),ee):u(Ne)}function R(Ne){return Ne===45?(i.consume(Ne),p=2,F):Ne===91?(i.consume(Ne),p=5,y=0,j):n5(Ne)?(i.consume(Ne),p=4,d.interrupt?s:ke):u(Ne)}function F(Ne){return Ne===45?(i.consume(Ne),d.interrupt?s:ke):u(Ne)}function j(Ne){const gn="CDATA[";return Ne===gn.charCodeAt(y++)?(i.consume(Ne),y===gn.length?d.interrupt?s:xe:j):u(Ne)}function K(Ne){return n5(Ne)?(i.consume(Ne),b=String.fromCharCode(Ne),ee):u(Ne)}function ee(Ne){if(Ne===null||Ne===47||Ne===62||z2(Ne)){const gn=Ne===47,_t=b.toLowerCase();return!gn&&!v&&nUe.includes(_t)?(p=1,d.interrupt?s(Ne):xe(Ne)):DJt.includes(b.toLowerCase())?(p=6,gn?(i.consume(Ne),ie):d.interrupt?s(Ne):xe(Ne)):(p=7,d.interrupt&&!d.parser.lazy[d.now().line]?u(Ne):v?oe(Ne):pe(Ne))}return Ne===45||H3(Ne)?(i.consume(Ne),b+=String.fromCharCode(Ne),ee):u(Ne)}function ie(Ne){return Ne===62?(i.consume(Ne),d.interrupt?s:xe):u(Ne)}function oe(Ne){return Iu(Ne)?(i.consume(Ne),oe):ge(Ne)}function pe(Ne){return Ne===47?(i.consume(Ne),ge):Ne===58||Ne===95||n5(Ne)?(i.consume(Ne),be):Iu(Ne)?(i.consume(Ne),pe):ge(Ne)}function be(Ne){return Ne===45||Ne===46||Ne===58||Ne===95||H3(Ne)?(i.consume(Ne),be):ae(Ne)}function ae(Ne){return Ne===61?(i.consume(Ne),ne):Iu(Ne)?(i.consume(Ne),ae):pe(Ne)}function ne(Ne){return Ne===null||Ne===60||Ne===61||Ne===62||Ne===96?u(Ne):Ne===34||Ne===39?(i.consume(Ne),T=Ne,se):Iu(Ne)?(i.consume(Ne),ne):de(Ne)}function se(Ne){return Ne===T?(i.consume(Ne),T=null,X):Ne===null||so(Ne)?u(Ne):(i.consume(Ne),se)}function de(Ne){return Ne===null||Ne===34||Ne===39||Ne===47||Ne===60||Ne===61||Ne===62||Ne===96||z2(Ne)?ae(Ne):(i.consume(Ne),de)}function X(Ne){return Ne===47||Ne===62||Iu(Ne)?pe(Ne):u(Ne)}function ge(Ne){return Ne===62?(i.consume(Ne),W):u(Ne)}function W(Ne){return Ne===null||so(Ne)?xe(Ne):Iu(Ne)?(i.consume(Ne),W):u(Ne)}function xe(Ne){return Ne===45&&p===2?(i.consume(Ne),je):Ne===60&&p===1?(i.consume(Ne),Ie):Ne===62&&p===4?(i.consume(Ne),Ke):Ne===63&&p===3?(i.consume(Ne),ke):Ne===93&&p===5?(i.consume(Ne),Ce):so(Ne)&&(p===6||p===7)?(i.exit("htmlFlowData"),i.check(OJt,Ft,U)(Ne)):Ne===null||so(Ne)?(i.exit("htmlFlowData"),U(Ne)):(i.consume(Ne),xe)}function U(Ne){return i.check(NJt,Fe,Ft)(Ne)}function Fe(Ne){return i.enter("lineEnding"),i.consume(Ne),i.exit("lineEnding"),Pe}function Pe(Ne){return Ne===null||so(Ne)?U(Ne):(i.enter("htmlFlowData"),xe(Ne))}function je(Ne){return Ne===45?(i.consume(Ne),ke):xe(Ne)}function Ie(Ne){return Ne===47?(i.consume(Ne),b="",Se):xe(Ne)}function Se(Ne){if(Ne===62){const gn=b.toLowerCase();return nUe.includes(gn)?(i.consume(Ne),Ke):xe(Ne)}return n5(Ne)&&b.length<8?(i.consume(Ne),b+=String.fromCharCode(Ne),Se):xe(Ne)}function Ce(Ne){return Ne===93?(i.consume(Ne),ke):xe(Ne)}function ke(Ne){return Ne===62?(i.consume(Ne),Ke):Ne===45&&p===2?(i.consume(Ne),ke):xe(Ne)}function Ke(Ne){return Ne===null||so(Ne)?(i.exit("htmlFlowData"),Ft(Ne)):(i.consume(Ne),Ke)}function Ft(Ne){return i.exit("htmlFlow"),s(Ne)}}function FJt(i,s,u){const d=this;return p;function p(b){return so(b)?(i.enter("lineEnding"),i.consume(b),i.exit("lineEnding"),v):u(b)}function v(b){return d.parser.lazy[d.now().line]?u(b):s(b)}}function RJt(i,s,u){return d;function d(p){return i.enter("lineEnding"),i.consume(p),i.exit("lineEnding"),i.attempt(YQ,s,u)}}const jJt={name:"htmlText",tokenize:$Jt};function $Jt(i,s,u){const d=this;let p,v,b;return y;function y(ke){return i.enter("htmlText"),i.enter("htmlTextData"),i.consume(ke),T}function T(ke){return ke===33?(i.consume(ke),_):ke===47?(i.consume(ke),ae):ke===63?(i.consume(ke),pe):n5(ke)?(i.consume(ke),de):u(ke)}function _(ke){return ke===45?(i.consume(ke),A):ke===91?(i.consume(ke),v=0,j):n5(ke)?(i.consume(ke),oe):u(ke)}function A(ke){return ke===45?(i.consume(ke),F):u(ke)}function P(ke){return ke===null?u(ke):ke===45?(i.consume(ke),R):so(ke)?(b=P,Ie(ke)):(i.consume(ke),P)}function R(ke){return ke===45?(i.consume(ke),F):P(ke)}function F(ke){return ke===62?je(ke):ke===45?R(ke):P(ke)}function j(ke){const Ke="CDATA[";return ke===Ke.charCodeAt(v++)?(i.consume(ke),v===Ke.length?K:j):u(ke)}function K(ke){return ke===null?u(ke):ke===93?(i.consume(ke),ee):so(ke)?(b=K,Ie(ke)):(i.consume(ke),K)}function ee(ke){return ke===93?(i.consume(ke),ie):K(ke)}function ie(ke){return ke===62?je(ke):ke===93?(i.consume(ke),ie):K(ke)}function oe(ke){return ke===null||ke===62?je(ke):so(ke)?(b=oe,Ie(ke)):(i.consume(ke),oe)}function pe(ke){return ke===null?u(ke):ke===63?(i.consume(ke),be):so(ke)?(b=pe,Ie(ke)):(i.consume(ke),pe)}function be(ke){return ke===62?je(ke):pe(ke)}function ae(ke){return n5(ke)?(i.consume(ke),ne):u(ke)}function ne(ke){return ke===45||H3(ke)?(i.consume(ke),ne):se(ke)}function se(ke){return so(ke)?(b=se,Ie(ke)):Iu(ke)?(i.consume(ke),se):je(ke)}function de(ke){return ke===45||H3(ke)?(i.consume(ke),de):ke===47||ke===62||z2(ke)?X(ke):u(ke)}function X(ke){return ke===47?(i.consume(ke),je):ke===58||ke===95||n5(ke)?(i.consume(ke),ge):so(ke)?(b=X,Ie(ke)):Iu(ke)?(i.consume(ke),X):je(ke)}function ge(ke){return ke===45||ke===46||ke===58||ke===95||H3(ke)?(i.consume(ke),ge):W(ke)}function W(ke){return ke===61?(i.consume(ke),xe):so(ke)?(b=W,Ie(ke)):Iu(ke)?(i.consume(ke),W):X(ke)}function xe(ke){return ke===null||ke===60||ke===61||ke===62||ke===96?u(ke):ke===34||ke===39?(i.consume(ke),p=ke,U):so(ke)?(b=xe,Ie(ke)):Iu(ke)?(i.consume(ke),xe):(i.consume(ke),Fe)}function U(ke){return ke===p?(i.consume(ke),p=void 0,Pe):ke===null?u(ke):so(ke)?(b=U,Ie(ke)):(i.consume(ke),U)}function Fe(ke){return ke===null||ke===34||ke===39||ke===60||ke===61||ke===96?u(ke):ke===47||ke===62||z2(ke)?X(ke):(i.consume(ke),Fe)}function Pe(ke){return ke===47||ke===62||z2(ke)?X(ke):u(ke)}function je(ke){return ke===62?(i.consume(ke),i.exit("htmlTextData"),i.exit("htmlText"),s):u(ke)}function Ie(ke){return i.exit("htmlTextData"),i.enter("lineEnding"),i.consume(ke),i.exit("lineEnding"),Se}function Se(ke){return Iu(ke)?Kl(i,Ce,"linePrefix",d.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(ke):Ce(ke)}function Ce(ke){return i.enter("htmlTextData"),b(ke)}}const Ome={name:"labelEnd",tokenize:GJt,resolveTo:UJt,resolveAll:VJt},zJt={tokenize:KJt},qJt={tokenize:WJt},HJt={tokenize:YJt};function VJt(i){let s=-1;for(;++s=3&&(_===null||so(_))?(i.exit("thematicBreak"),s(_)):u(_)}function T(_){return _===p?(i.consume(_),d++,T):(i.exit("thematicBreakSequence"),Iu(_)?Kl(i,y,"whitespace")(_):y(_))}}const q2={name:"list",tokenize:iZt,continuation:{tokenize:sZt},exit:oZt},nZt={tokenize:cZt,partial:!0},rZt={tokenize:aZt,partial:!0};function iZt(i,s,u){const d=this,p=d.events[d.events.length-1];let v=p&&p[1].type==="linePrefix"?p[2].sliceSerialize(p[1],!0).length:0,b=0;return y;function y(F){const j=d.containerState.type||(F===42||F===43||F===45?"listUnordered":"listOrdered");if(j==="listUnordered"?!d.containerState.marker||F===d.containerState.marker:Ame(F)){if(d.containerState.type||(d.containerState.type=j,i.enter(j,{_container:!0})),j==="listUnordered")return i.enter("listItemPrefix"),F===42||F===45?i.check(XQ,u,_)(F):_(F);if(!d.interrupt||F===49)return i.enter("listItemPrefix"),i.enter("listItemValue"),T(F)}return u(F)}function T(F){return Ame(F)&&++b<10?(i.consume(F),T):(!d.interrupt||b<2)&&(d.containerState.marker?F===d.containerState.marker:F===41||F===46)?(i.exit("listItemValue"),_(F)):u(F)}function _(F){return i.enter("listItemMarker"),i.consume(F),i.exit("listItemMarker"),d.containerState.marker=d.containerState.marker||F,i.check(YQ,d.interrupt?u:A,i.attempt(nZt,R,P))}function A(F){return d.containerState.initialBlankLine=!0,v++,R(F)}function P(F){return Iu(F)?(i.enter("listItemPrefixWhitespace"),i.consume(F),i.exit("listItemPrefixWhitespace"),R):u(F)}function R(F){return d.containerState.size=v+d.sliceSerialize(i.exit("listItemPrefix"),!0).length,s(F)}}function sZt(i,s,u){const d=this;return d.containerState._closeFlow=void 0,i.check(YQ,p,v);function p(y){return d.containerState.furtherBlankLines=d.containerState.furtherBlankLines||d.containerState.initialBlankLine,Kl(i,s,"listItemIndent",d.containerState.size+1)(y)}function v(y){return d.containerState.furtherBlankLines||!Iu(y)?(d.containerState.furtherBlankLines=void 0,d.containerState.initialBlankLine=void 0,b(y)):(d.containerState.furtherBlankLines=void 0,d.containerState.initialBlankLine=void 0,i.attempt(rZt,s,b)(y))}function b(y){return d.containerState._closeFlow=!0,d.interrupt=void 0,Kl(i,i.attempt(q2,s,u),"linePrefix",d.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(y)}}function aZt(i,s,u){const d=this;return Kl(i,p,"listItemIndent",d.containerState.size+1);function p(v){const b=d.events[d.events.length-1];return b&&b[1].type==="listItemIndent"&&b[2].sliceSerialize(b[1],!0).length===d.containerState.size?s(v):u(v)}}function oZt(i){i.exit(this.containerState.type)}function cZt(i,s,u){const d=this;return Kl(i,p,"listItemPrefixWhitespace",d.parser.constructs.disable.null.includes("codeIndented")?void 0:4+1);function p(v){const b=d.events[d.events.length-1];return!Iu(v)&&b&&b[1].type==="listItemPrefixWhitespace"?s(v):u(v)}}const rUe={name:"setextUnderline",tokenize:lZt,resolveTo:uZt};function uZt(i,s){let u=i.length,d,p,v;for(;u--;)if(i[u][0]==="enter"){if(i[u][1].type==="content"){d=u;break}i[u][1].type==="paragraph"&&(p=u)}else i[u][1].type==="content"&&i.splice(u,1),!v&&i[u][1].type==="definition"&&(v=u);const b={type:"setextHeading",start:Object.assign({},i[p][1].start),end:Object.assign({},i[i.length-1][1].end)};return i[p][1].type="setextHeadingText",v?(i.splice(p,0,["enter",b,s]),i.splice(v+1,0,["exit",i[d][1],s]),i[d][1].end=Object.assign({},i[v][1].end)):i[d][1]=b,i.push(["exit",b,s]),i}function lZt(i,s,u){const d=this;let p;return v;function v(_){let A=d.events.length,P;for(;A--;)if(d.events[A][1].type!=="lineEnding"&&d.events[A][1].type!=="linePrefix"&&d.events[A][1].type!=="content"){P=d.events[A][1].type==="paragraph";break}return!d.parser.lazy[d.now().line]&&(d.interrupt||P)?(i.enter("setextHeadingLine"),p=_,b(_)):u(_)}function b(_){return i.enter("setextHeadingLineSequence"),y(_)}function y(_){return _===p?(i.consume(_),y):(i.exit("setextHeadingLineSequence"),Iu(_)?Kl(i,T,"lineSuffix")(_):T(_))}function T(_){return _===null||so(_)?(i.exit("setextHeadingLine"),s(_)):u(_)}}const hZt={tokenize:fZt};function fZt(i){const s=this,u=i.attempt(YQ,d,i.attempt(this.parser.constructs.flowInitial,p,Kl(i,i.attempt(this.parser.constructs.flow,p,i.attempt(mJt,p)),"linePrefix")));return u;function d(v){if(v===null){i.consume(v);return}return i.enter("lineEndingBlank"),i.consume(v),i.exit("lineEndingBlank"),s.currentConstruct=void 0,u}function p(v){if(v===null){i.consume(v);return}return i.enter("lineEnding"),i.consume(v),i.exit("lineEnding"),s.currentConstruct=void 0,u}}const dZt={resolveAll:sUe()},gZt=iUe("string"),pZt=iUe("text");function iUe(i){return{tokenize:s,resolveAll:sUe(i==="text"?bZt:void 0)};function s(u){const d=this,p=this.parser.constructs[i],v=u.attempt(p,b,y);return b;function b(A){return _(A)?v(A):y(A)}function y(A){if(A===null){u.consume(A);return}return u.enter("data"),u.consume(A),T}function T(A){return _(A)?(u.exit("data"),v(A)):(u.consume(A),T)}function _(A){if(A===null)return!0;const P=p[A];let R=-1;if(P)for(;++R-1){const y=b[0];typeof y=="string"?b[0]=y.slice(d):b.shift()}v>0&&b.push(i[p].slice(0,v))}return b}function wZt(i,s){let u=-1;const d=[];let p;for(;++u13&&f<32||f>126&&f<160||f>55295&&f<57344||f>64975&&f<65008||(f&65535)===65535||(f&65535)===65534||f>1114111?"�":String.fromCharCode(f)}const c$e=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function u$e(i){return i.replace(c$e,l$e)}function l$e(i,a,f){if(a)return a;if(f.charCodeAt(0)===35){const w=f.charCodeAt(1),m=w===120||w===88;return nBt(f.slice(m?2:1),m?16:10)}return A0t(f)||i}function kY(i){return!i||typeof i!="object"?"":"position"in i||"type"in i?rBt(i.position):"start"in i||"end"in i?rBt(i):"line"in i||"column"in i?I0t(i):""}function I0t(i){return iBt(i&&i.line)+":"+iBt(i&&i.column)}function rBt(i){return I0t(i&&i.start)+"-"+I0t(i&&i.end)}function iBt(i){return i&&typeof i=="number"?i:1}const sBt={}.hasOwnProperty,aBt=function(i,a,f){return typeof a!="string"&&(f=a,a=void 0),h$e(f)(o$e(s$e(f).document().write(a$e()(i,a,!0))))};function h$e(i){const a={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:E(Ks),autolinkProtocol:U,autolinkEmail:U,atxHeading:E(Me),blockQuote:E(zt),characterEscape:U,characterReference:U,codeFenced:E(re),codeFencedFenceInfo:_,codeFencedFenceMeta:_,codeIndented:E(re,_),codeText:E(se,_),codeTextData:U,data:U,codeFlowValue:U,definition:E(Pe),definitionDestinationString:_,definitionLabelString:_,definitionTitleString:_,emphasis:E(te),hardBreakEscape:E(de),hardBreakTrailing:E(de),htmlFlow:E(on,_),htmlFlowData:U,htmlText:E(on,_),htmlTextData:U,image:E(ni),label:_,link:E(Ks),listItem:E(fo),listItemValue:z,listOrdered:E(ws,R),listUnordered:E(ws),paragraph:E(Xi),reference:Se,referenceString:_,resourceDestinationString:_,resourceTitleString:_,setextHeading:E(Me),strong:E(Er),thematicBreak:E(di)},exit:{atxHeading:I(),atxHeadingSequence:ut,autolink:I(),autolinkEmail:ke,autolinkProtocol:ce,blockQuote:I(),characterEscapeValue:Tt,characterReferenceMarkerHexadecimal:Ve,characterReferenceMarkerNumeric:Ve,characterReferenceValue:Ye,codeFenced:I(at),codeFencedFence:st,codeFencedFenceInfo:W,codeFencedFenceMeta:et,codeFlowValue:Tt,codeIndented:I(bt),codeText:I(Et),codeTextData:Tt,data:Tt,definition:I(),definitionDestinationString:ft,definitionLabelString:mt,definitionTitleString:yt,emphasis:I(),hardBreakEscape:I(It),hardBreakTrailing:I(It),htmlFlow:I(Ot),htmlFlowData:Tt,htmlText:I(Bt),htmlTextData:Tt,image:I(Ct),label:Ht,labelText:xt,lineEnding:nt,link:I(Z),listItem:I(),listOrdered:I(),listUnordered:I(),paragraph:I(),referenceString:me,resourceDestinationString:Le,resourceTitleString:Ft,resource:gn,setextHeading:I(pt),setextHeadingLineSequence:X,setextHeadingText:vt,strong:I(),thematicBreak:I()}};oBt(a,(i||{}).mdastExtensions||[]);const f={};return p;function p(Ee){let Kn={type:"root",children:[]};const He={stack:[Kn],tokenStack:[],config:a,enter:A,exit:B,buffer:_,resume:N,setData:m,getData:b},Ti=[];let pn=-1;for(;++pn0){const Es=He.tokenStack[He.tokenStack.length-1];(Es[1]||cBt).call(He,void 0,Es[0])}for(Kn.position={start:wk(Ee.length>0?Ee[0][1].start:{line:1,column:1,offset:0}),end:wk(Ee.length>0?Ee[Ee.length-2][1].end:{line:1,column:1,offset:0})},pn=-1;++pn{I!==0&&(w++,p.push([])),A.split(" ").forEach(B=>{B&&p[w].push({content:B,type:E})})}):(b.type==="strong"||b.type==="emphasis")&&b.children.forEach(_=>{m(_,b.type)})}return f.forEach(b=>{b.type==="paragraph"&&b.children.forEach(E=>{m(E)})}),p}function p$e(i){const{children:a}=aBt(i);function f(p){return p.type==="text"?p.value.replace(/\n/g,"
"):p.type==="strong"?`${p.children.map(f).join("")}`:p.type==="emphasis"?`${p.children.map(f).join("")}`:p.type==="paragraph"?`

${p.children.map(f).join("")}

`:`Unsupported markdown: ${p.type}`}return a.map(f).join("")}function b$e(i){return Intl.Segmenter?[...new Intl.Segmenter().segment(i)].map(a=>a.segment):[...i]}function w$e(i,a){const f=b$e(a.content);return uBt(i,[],f,a.type)}function uBt(i,a,f,p){if(f.length===0)return[{content:a.join(""),type:p},{content:"",type:p}];const[w,...m]=f,b=[...a,w];return i([{content:b.join(""),type:p}])?uBt(i,b,m,p):(a.length===0&&w&&(a.push(w),f.shift()),[{content:a.join(""),type:p},{content:f.join(""),type:p}])}function v$e(i,a){if(i.some(({content:f})=>f.includes(` -`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return O0t(i,a)}function O0t(i,a,f=[],p=[]){if(i.length===0)return p.length>0&&f.push(p),f.length>0?f:[];let w="";i[0].content===" "&&(w=" ",i.shift());const m=i.shift()??{content:" ",type:"normal"},b=[...p];if(w!==""&&b.push({content:w,type:"normal"}),b.push(m),a(b))return O0t(i,a,f,b);if(p.length>0)f.push(p),i.unshift(m);else if(m.content){const[E,_]=w$e(a,m);f.push([E]),_.content&&i.unshift(_)}return O0t(i,a,f)}function m$e(i,a){a&&i.attr("style",a)}function y$e(i,a,f,p,w=!1){const m=i.append("foreignObject"),b=m.append("xhtml:div"),E=a.label,_=a.isNode?"nodeLabel":"edgeLabel";b.html(` - "+E+""),m$e(b,a.labelStyle),b.style("display","table-cell"),b.style("white-space","nowrap"),b.style("max-width",f+"px"),b.attr("xmlns","http://www.w3.org/1999/xhtml"),w&&b.attr("class","labelBkg");let A=b.node().getBoundingClientRect();return A.width===f&&(b.style("display","table"),b.style("white-space","break-spaces"),b.style("width",f+"px"),A=b.node().getBoundingClientRect()),m.style("width",A.width),m.style("height",A.height),m.node()}function P0t(i,a,f){return i.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",a*f-.1+"em").attr("dy",f+"em")}function x$e(i,a,f){const p=i.append("text"),w=P0t(p,1,a);F0t(w,f);const m=w.node().getComputedTextLength();return p.remove(),m}function k$e(i,a,f){var b;const p=i.append("text"),w=P0t(p,1,a);F0t(w,[{content:f,type:"normal"}]);const m=(b=w.node())==null?void 0:b.getBoundingClientRect();return m&&p.remove(),m}function E$e(i,a,f,p=!1){const m=a.append("g"),b=m.insert("rect").attr("class","background"),E=m.append("text").attr("y","-10.1");let _=0;for(const A of f){const I=N=>x$e(m,1.1,N)<=i,B=I(A)?[A]:v$e(A,I);for(const N of B){const R=P0t(E,_,1.1);F0t(R,N),_++}}if(p){const A=E.node().getBBox(),I=2;return b.attr("x",-I).attr("y",-I).attr("width",A.width+2*I).attr("height",A.height+2*I),m.node()}else return E.node()}function F0t(i,a){i.text(""),a.forEach((f,p)=>{const w=i.append("tspan").attr("font-style",f.type==="emphasis"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",f.type==="strong"?"bold":"normal");p===0?w.text(f.content):w.text(" "+f.content)})}const EY=(i,a="",{style:f="",isTitle:p=!1,classes:w="",useHtmlLabels:m=!0,isNode:b=!0,width:E=200,addSvgBackground:_=!1}={})=>{if(Ut.info("createText",a,f,p,w,m,b,_),m){const A=p$e(a),I={isNode:b,label:uF(A).replace(/fa[blrs]?:fa-[\w-]+/g,N=>``),labelStyle:f.replace("fill:","color:")};return y$e(i,I,E,w,_)}else{const A=g$e(a);return E$e(E,i,A,_)}},Nd=async(i,a,f,p)=>{let w;const m=a.useHtmlLabels||o1(Oe().flowchart.htmlLabels);f?w=f:w="node default";const b=i.insert("g").attr("class",w).attr("id",a.domId||a.id),E=b.insert("g").attr("class","label").attr("style",a.labelStyle);let _;a.labelText===void 0?_="":_=typeof a.labelText=="string"?a.labelText:a.labelText[0];const A=E.node();let I;a.labelType==="markdown"?I=EY(E,Q1(uF(_),Oe()),{useHtmlLabels:m,width:a.width||Oe().flowchart.wrappingWidth,classes:"markdown-node-label"}):I=A.appendChild(gp(Q1(uF(_),Oe()),a.labelStyle,!1,p));let B=I.getBBox();const N=a.padding/2;if(o1(Oe().flowchart.htmlLabels)){const R=I.children[0],z=yr(I),W=R.getElementsByTagName("img");if(W){const et=_.replace(/]*>/g,"").trim()==="";await Promise.all([...W].map(st=>new Promise(at=>{function bt(){if(st.style.display="flex",st.style.flexDirection="column",et){const mt=Oe().fontSize?Oe().fontSize:window.getComputedStyle(document.body).fontSize,yt=5;st.style.width=parseInt(mt,10)*yt+"px"}else st.style.width="100%";at(st)}setTimeout(()=>{st.complete&&bt()}),st.addEventListener("error",bt),st.addEventListener("load",bt)})))}B=R.getBoundingClientRect(),z.attr("width",B.width),z.attr("height",B.height)}return m?E.attr("transform","translate("+-B.width/2+", "+-B.height/2+")"):E.attr("transform","translate(0, "+-B.height/2+")"),a.centerLabel&&E.attr("transform","translate("+-B.width/2+", "+-B.height/2+")"),E.insert("rect",":first-child"),{shapeSvg:b,bbox:B,halfPadding:N,label:E}},tf=(i,a)=>{const f=a.node().getBBox();i.width=f.width,i.height=f.height};function F5(i,a,f,p){return i.insert("polygon",":first-child").attr("points",p.map(function(w){return w.x+","+w.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-a/2+","+f/2+")")}let Ho={},hm={},lBt={};const T$e=()=>{hm={},lBt={},Ho={}},TY=(i,a)=>(Ut.trace("In isDecendant",a," ",i," = ",hm[a].includes(i)),!!hm[a].includes(i)),C$e=(i,a)=>(Ut.info("Decendants of ",a," is ",hm[a]),Ut.info("Edge is ",i),i.v===a||i.w===a?!1:hm[a]?hm[a].includes(i.v)||TY(i.v,a)||TY(i.w,a)||hm[a].includes(i.w):(Ut.debug("Tilt, ",a,",not in decendants"),!1)),hBt=(i,a,f,p)=>{Ut.warn("Copying children of ",i,"root",p,"data",a.node(i),p);const w=a.children(i)||[];i!==p&&w.push(i),Ut.warn("Copying (nodes) clusterId",i,"nodes",w),w.forEach(m=>{if(a.children(m).length>0)hBt(m,a,f,p);else{const b=a.node(m);Ut.info("cp ",m," to ",p," with parent ",i),f.setNode(m,b),p!==a.parent(m)&&(Ut.warn("Setting parent",m,a.parent(m)),f.setParent(m,a.parent(m))),i!==p&&m!==i?(Ut.debug("Setting parent",m,i),f.setParent(m,i)):(Ut.info("In copy ",i,"root",p,"data",a.node(i),p),Ut.debug("Not Setting parent for node=",m,"cluster!==rootId",i!==p,"node!==clusterId",m!==i));const E=a.edges(m);Ut.debug("Copying Edges",E),E.forEach(_=>{Ut.info("Edge",_);const A=a.edge(_.v,_.w,_.name);Ut.info("Edge data",A,p);try{C$e(_,p)?(Ut.info("Copying as ",_.v,_.w,A,_.name),f.setEdge(_.v,_.w,A,_.name),Ut.info("newGraph edges ",f.edges(),f.edge(f.edges()[0]))):Ut.info("Skipping copy of edge ",_.v,"-->",_.w," rootId: ",p," clusterId:",i)}catch(I){Ut.error(I)}})}Ut.debug("Removing node",m),a.removeNode(m)})},fBt=(i,a)=>{const f=a.children(i);let p=[...f];for(const w of f)lBt[w]=i,p=[...p,...fBt(w,a)];return p},CF=(i,a)=>{Ut.trace("Searching",i);const f=a.children(i);if(Ut.trace("Searching children of id ",i,f),f.length<1)return Ut.trace("This is a valid node",i),i;for(const p of f){const w=CF(p,a);if(w)return Ut.trace("Found replacement for",i," => ",w),w}},CY=i=>!Ho[i]||!Ho[i].externalConnections?i:Ho[i]?Ho[i].id:i,_$e=(i,a)=>{if(!i||a>10){Ut.debug("Opting out, no graph ");return}else Ut.debug("Opting in, graph ");i.nodes().forEach(function(f){i.children(f).length>0&&(Ut.warn("Cluster identified",f," Replacement id in edges: ",CF(f,i)),hm[f]=fBt(f,i),Ho[f]={id:CF(f,i),clusterData:i.node(f)})}),i.nodes().forEach(function(f){const p=i.children(f),w=i.edges();p.length>0?(Ut.debug("Cluster identified",f,hm),w.forEach(m=>{if(m.v!==f&&m.w!==f){const b=TY(m.v,f),E=TY(m.w,f);b^E&&(Ut.warn("Edge: ",m," leaves cluster ",f),Ut.warn("Decendants of XXX ",f,": ",hm[f]),Ho[f].externalConnections=!0)}})):Ut.debug("Not a cluster ",f,hm)}),i.edges().forEach(function(f){const p=i.edge(f);Ut.warn("Edge "+f.v+" -> "+f.w+": "+JSON.stringify(f)),Ut.warn("Edge "+f.v+" -> "+f.w+": "+JSON.stringify(i.edge(f)));let w=f.v,m=f.w;if(Ut.warn("Fix XXX",Ho,"ids:",f.v,f.w,"Translating: ",Ho[f.v]," --- ",Ho[f.w]),Ho[f.v]&&Ho[f.w]&&Ho[f.v]===Ho[f.w]){Ut.warn("Fixing and trixing link to self - removing XXX",f.v,f.w,f.name),Ut.warn("Fixing and trixing - removing XXX",f.v,f.w,f.name),w=CY(f.v),m=CY(f.w),i.removeEdge(f.v,f.w,f.name);const b=f.w+"---"+f.v;i.setNode(b,{domId:b,id:b,labelStyle:"",labelText:p.label,padding:0,shape:"labelRect",style:""});const E=structuredClone(p),_=structuredClone(p);E.label="",E.arrowTypeEnd="none",_.label="",E.fromCluster=f.v,_.toCluster=f.v,i.setEdge(w,b,E,f.name+"-cyclic-special"),i.setEdge(b,m,_,f.name+"-cyclic-special")}else(Ho[f.v]||Ho[f.w])&&(Ut.warn("Fixing and trixing - removing XXX",f.v,f.w,f.name),w=CY(f.v),m=CY(f.w),i.removeEdge(f.v,f.w,f.name),w!==f.v&&(p.fromCluster=f.v),m!==f.w&&(p.toCluster=f.w),Ut.warn("Fix Replacing with XXX",w,m,f.name),i.setEdge(w,m,p,f.name))}),Ut.warn("Adjusted Graph",P5(i)),dBt(i,0),Ut.trace(Ho)},dBt=(i,a)=>{if(Ut.warn("extractor - ",a,P5(i),i.children("D")),a>10){Ut.error("Bailing out");return}let f=i.nodes(),p=!1;for(const w of f){const m=i.children(w);p=p||m.length>0}if(!p){Ut.debug("Done, no node has children",i.nodes());return}Ut.debug("Nodes = ",f,a);for(const w of f)if(Ut.debug("Extracting node",w,Ho,Ho[w]&&!Ho[w].externalConnections,!i.parent(w),i.node(w),i.children("D")," Depth ",a),!Ho[w])Ut.debug("Not a cluster",w,a);else if(!Ho[w].externalConnections&&i.children(w)&&i.children(w).length>0){Ut.warn("Cluster without external connections, without a parent and with children",w,a);let b=i.graph().rankdir==="TB"?"LR":"TB";Ho[w]&&Ho[w].clusterData&&Ho[w].clusterData.dir&&(b=Ho[w].clusterData.dir,Ut.warn("Fixing dir",Ho[w].clusterData.dir,b));const E=new c1({multigraph:!0,compound:!0}).setGraph({rankdir:b,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});Ut.warn("Old graph before copy",P5(i)),hBt(w,i,E,w),i.setNode(w,{clusterNode:!0,id:w,clusterData:Ho[w].clusterData,labelText:Ho[w].labelText,graph:E}),Ut.warn("New graph after copy node: (",w,")",P5(E)),Ut.debug("Old graph after copy",P5(i))}else Ut.warn("Cluster ** ",w," **not meeting the criteria !externalConnections:",!Ho[w].externalConnections," no parent: ",!i.parent(w)," children ",i.children(w)&&i.children(w).length>0,i.children("D"),a),Ut.debug(Ho);f=i.nodes(),Ut.warn("New list of nodes",f);for(const w of f){const m=i.node(w);Ut.warn(" Now next level",w,m),m.clusterNode&&dBt(m.graph,a+1)}},gBt=(i,a)=>{if(a.length===0)return[];let f=Object.assign(a);return a.forEach(p=>{const w=i.children(p),m=gBt(i,w);f=[...f,...m]}),f},S$e=i=>gBt(i,i.children());function A$e(i,a){return i.intersect(a)}function pBt(i,a,f,p){var w=i.x,m=i.y,b=w-p.x,E=m-p.y,_=Math.sqrt(a*a*E*E+f*f*b*b),A=Math.abs(a*f*b/_);p.x0}function D$e(i,a,f){var p=i.x,w=i.y,m=[],b=Number.POSITIVE_INFINITY,E=Number.POSITIVE_INFINITY;typeof a.forEach=="function"?a.forEach(function(z){b=Math.min(b,z.x),E=Math.min(E,z.y)}):(b=Math.min(b,a.x),E=Math.min(E,a.y));for(var _=p-i.width/2-b,A=w-i.height/2-E,I=0;I1&&m.sort(function(z,W){var et=z.x-f.x,st=z.y-f.y,at=Math.sqrt(et*et+st*st),bt=W.x-f.x,mt=W.y-f.y,yt=Math.sqrt(bt*bt+mt*mt);return at{var f=i.x,p=i.y,w=a.x-f,m=a.y-p,b=i.width/2,E=i.height/2,_,A;return Math.abs(m)*b>Math.abs(w)*E?(m<0&&(E=-E),_=m===0?0:E*w/m,A=E):(w<0&&(b=-b),_=b,A=w===0?0:b*m/w),{x:f+_,y:p+A}},kh={node:A$e,circle:L$e,ellipse:pBt,polygon:D$e,rect:_F},I$e=async(i,a)=>{a.useHtmlLabels||Oe().flowchart.htmlLabels||(a.centerLabel=!0);const{shapeSvg:p,bbox:w,halfPadding:m}=await Nd(i,a,"node "+a.classes,!0);Ut.info("Classes = ",a.classes);const b=p.insert("rect",":first-child");return b.attr("rx",a.rx).attr("ry",a.ry).attr("x",-w.width/2-m).attr("y",-w.height/2-m).attr("width",w.width+a.padding).attr("height",w.height+a.padding),tf(a,b),a.intersect=function(E){return kh.rect(a,E)},p},wBt=i=>i?" "+i:"",jb=(i,a)=>`${a||"node default"}${wBt(i.classes)} ${wBt(i.class)}`,vBt=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Nd(i,a,jb(a,void 0),!0),w=p.width+a.padding,m=p.height+a.padding,b=w+m,E=[{x:b/2,y:0},{x:b,y:-b/2},{x:b/2,y:-b},{x:0,y:-b/2}];Ut.info("Question main (Circle)");const _=F5(f,b,b,E);return _.attr("style",a.style),tf(a,_),a.intersect=function(A){return Ut.warn("Intersect called"),kh.polygon(a,E,A)},f},O$e=(i,a)=>{const f=i.insert("g").attr("class","node default").attr("id",a.domId||a.id),p=28,w=[{x:0,y:p/2},{x:p/2,y:0},{x:0,y:-p/2},{x:-p/2,y:0}];return f.insert("polygon",":first-child").attr("points",w.map(function(b){return b.x+","+b.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),a.width=28,a.height=28,a.intersect=function(b){return kh.circle(a,14,b)},f},P$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Nd(i,a,jb(a,void 0),!0),w=4,m=p.height+a.padding,b=m/w,E=p.width+2*b+a.padding,_=[{x:b,y:0},{x:E-b,y:0},{x:E,y:-m/2},{x:E-b,y:-m},{x:b,y:-m},{x:0,y:-m/2}],A=F5(f,E,m,_);return A.attr("style",a.style),tf(a,A),a.intersect=function(I){return kh.polygon(a,_,I)},f},F$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Nd(i,a,jb(a,void 0),!0),w=p.width+a.padding,m=p.height+a.padding,b=[{x:-m/2,y:0},{x:w,y:0},{x:w,y:-m},{x:-m/2,y:-m},{x:0,y:-m/2}];return F5(f,w,m,b).attr("style",a.style),a.width=w+m,a.height=m,a.intersect=function(_){return kh.polygon(a,b,_)},f},N$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Nd(i,a,jb(a),!0),w=p.width+a.padding,m=p.height+a.padding,b=[{x:-2*m/6,y:0},{x:w-m/6,y:0},{x:w+2*m/6,y:-m},{x:m/6,y:-m}],E=F5(f,w,m,b);return E.attr("style",a.style),tf(a,E),a.intersect=function(_){return kh.polygon(a,b,_)},f},B$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Nd(i,a,jb(a,void 0),!0),w=p.width+a.padding,m=p.height+a.padding,b=[{x:2*m/6,y:0},{x:w+m/6,y:0},{x:w-2*m/6,y:-m},{x:-m/6,y:-m}],E=F5(f,w,m,b);return E.attr("style",a.style),tf(a,E),a.intersect=function(_){return kh.polygon(a,b,_)},f},R$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Nd(i,a,jb(a,void 0),!0),w=p.width+a.padding,m=p.height+a.padding,b=[{x:-2*m/6,y:0},{x:w+2*m/6,y:0},{x:w-m/6,y:-m},{x:m/6,y:-m}],E=F5(f,w,m,b);return E.attr("style",a.style),tf(a,E),a.intersect=function(_){return kh.polygon(a,b,_)},f},j$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Nd(i,a,jb(a,void 0),!0),w=p.width+a.padding,m=p.height+a.padding,b=[{x:m/6,y:0},{x:w-m/6,y:0},{x:w+2*m/6,y:-m},{x:-2*m/6,y:-m}],E=F5(f,w,m,b);return E.attr("style",a.style),tf(a,E),a.intersect=function(_){return kh.polygon(a,b,_)},f},$$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Nd(i,a,jb(a,void 0),!0),w=p.width+a.padding,m=p.height+a.padding,b=[{x:0,y:0},{x:w+m/2,y:0},{x:w,y:-m/2},{x:w+m/2,y:-m},{x:0,y:-m}],E=F5(f,w,m,b);return E.attr("style",a.style),tf(a,E),a.intersect=function(_){return kh.polygon(a,b,_)},f},z$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Nd(i,a,jb(a,void 0),!0),w=p.width+a.padding,m=w/2,b=m/(2.5+w/50),E=p.height+b+a.padding,_="M 0,"+b+" a "+m+","+b+" 0,0,0 "+w+" 0 a "+m+","+b+" 0,0,0 "+-w+" 0 l 0,"+E+" a "+m+","+b+" 0,0,0 "+w+" 0 l 0,"+-E,A=f.attr("label-offset-y",b).insert("path",":first-child").attr("style",a.style).attr("d",_).attr("transform","translate("+-w/2+","+-(E/2+b)+")");return tf(a,A),a.intersect=function(I){const B=kh.rect(a,I),N=B.x-a.x;if(m!=0&&(Math.abs(N)a.height/2-b)){let R=b*b*(1-N*N/(m*m));R!=0&&(R=Math.sqrt(R)),R=b-R,I.y-a.y>0&&(R=-R),B.y+=R}return B},f},q$e=async(i,a)=>{const{shapeSvg:f,bbox:p,halfPadding:w}=await Nd(i,a,"node "+a.classes+" "+a.class,!0),m=f.insert("rect",":first-child"),b=p.width+a.padding,E=p.height+a.padding;if(m.attr("class","basic label-container").attr("style",a.style).attr("rx",a.rx).attr("ry",a.ry).attr("x",-p.width/2-w).attr("y",-p.height/2-w).attr("width",b).attr("height",E),a.props){const _=new Set(Object.keys(a.props));a.props.borders&&(mBt(m,a.props.borders,b,E),_.delete("borders")),_.forEach(A=>{Ut.warn(`Unknown node property ${A}`)})}return tf(a,m),a.intersect=function(_){return kh.rect(a,_)},f},H$e=async(i,a)=>{const{shapeSvg:f}=await Nd(i,a,"label",!0);Ut.trace("Classes = ",a.class);const p=f.insert("rect",":first-child"),w=0,m=0;if(p.attr("width",w).attr("height",m),f.attr("class","label edgeLabel"),a.props){const b=new Set(Object.keys(a.props));a.props.borders&&(mBt(p,a.props.borders,w,m),b.delete("borders")),b.forEach(E=>{Ut.warn(`Unknown node property ${E}`)})}return tf(a,p),a.intersect=function(b){return kh.rect(a,b)},f};function mBt(i,a,f,p){const w=[],m=E=>{w.push(E,0)},b=E=>{w.push(0,E)};a.includes("t")?(Ut.debug("add top border"),m(f)):b(f),a.includes("r")?(Ut.debug("add right border"),m(p)):b(p),a.includes("b")?(Ut.debug("add bottom border"),m(f)):b(f),a.includes("l")?(Ut.debug("add left border"),m(p)):b(p),i.attr("stroke-dasharray",w.join(" "))}const V$e=(i,a)=>{let f;a.classes?f="node "+a.classes:f="node default";const p=i.insert("g").attr("class",f).attr("id",a.domId||a.id),w=p.insert("rect",":first-child"),m=p.insert("line"),b=p.insert("g").attr("class","label"),E=a.labelText.flat?a.labelText.flat():a.labelText;let _="";typeof E=="object"?_=E[0]:_=E,Ut.info("Label text abc79",_,E,typeof E=="object");const A=b.node().appendChild(gp(_,a.labelStyle,!0,!0));let I={width:0,height:0};if(o1(Oe().flowchart.htmlLabels)){const W=A.children[0],et=yr(A);I=W.getBoundingClientRect(),et.attr("width",I.width),et.attr("height",I.height)}Ut.info("Text 2",E);const B=E.slice(1,E.length);let N=A.getBBox();const R=b.node().appendChild(gp(B.join?B.join("
"):B,a.labelStyle,!0,!0));if(o1(Oe().flowchart.htmlLabels)){const W=R.children[0],et=yr(R);I=W.getBoundingClientRect(),et.attr("width",I.width),et.attr("height",I.height)}const z=a.padding/2;return yr(R).attr("transform","translate( "+(I.width>N.width?0:(N.width-I.width)/2)+", "+(N.height+z+5)+")"),yr(A).attr("transform","translate( "+(I.width{const{shapeSvg:f,bbox:p}=await Nd(i,a,jb(a,void 0),!0),w=p.height+a.padding,m=p.width+w/4+a.padding,b=f.insert("rect",":first-child").attr("style",a.style).attr("rx",w/2).attr("ry",w/2).attr("x",-m/2).attr("y",-w/2).attr("width",m).attr("height",w);return tf(a,b),a.intersect=function(E){return kh.rect(a,E)},f},U$e=async(i,a)=>{const{shapeSvg:f,bbox:p,halfPadding:w}=await Nd(i,a,jb(a,void 0),!0),m=f.insert("circle",":first-child");return m.attr("style",a.style).attr("rx",a.rx).attr("ry",a.ry).attr("r",p.width/2+w).attr("width",p.width+a.padding).attr("height",p.height+a.padding),Ut.info("Circle main"),tf(a,m),a.intersect=function(b){return Ut.info("Circle intersect",a,p.width/2+w,b),kh.circle(a,p.width/2+w,b)},f},W$e=async(i,a)=>{const{shapeSvg:f,bbox:p,halfPadding:w}=await Nd(i,a,jb(a,void 0),!0),m=5,b=f.insert("g",":first-child"),E=b.insert("circle"),_=b.insert("circle");return b.attr("class",a.class),E.attr("style",a.style).attr("rx",a.rx).attr("ry",a.ry).attr("r",p.width/2+w+m).attr("width",p.width+a.padding+m*2).attr("height",p.height+a.padding+m*2),_.attr("style",a.style).attr("rx",a.rx).attr("ry",a.ry).attr("r",p.width/2+w).attr("width",p.width+a.padding).attr("height",p.height+a.padding),Ut.info("DoubleCircle main"),tf(a,E),a.intersect=function(A){return Ut.info("DoubleCircle intersect",a,p.width/2+w+m,A),kh.circle(a,p.width/2+w+m,A)},f},Y$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Nd(i,a,jb(a,void 0),!0),w=p.width+a.padding,m=p.height+a.padding,b=[{x:0,y:0},{x:w,y:0},{x:w,y:-m},{x:0,y:-m},{x:0,y:0},{x:-8,y:0},{x:w+8,y:0},{x:w+8,y:-m},{x:-8,y:-m},{x:-8,y:0}],E=F5(f,w,m,b);return E.attr("style",a.style),tf(a,E),a.intersect=function(_){return kh.polygon(a,b,_)},f},K$e=(i,a)=>{const f=i.insert("g").attr("class","node default").attr("id",a.domId||a.id),p=f.insert("circle",":first-child");return p.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),tf(a,p),a.intersect=function(w){return kh.circle(a,7,w)},f},yBt=(i,a,f)=>{const p=i.insert("g").attr("class","node default").attr("id",a.domId||a.id);let w=70,m=10;f==="LR"&&(w=10,m=70);const b=p.append("rect").attr("x",-1*w/2).attr("y",-1*m/2).attr("width",w).attr("height",m).attr("class","fork-join");return tf(a,b),a.height=a.height+a.padding/2,a.width=a.width+a.padding/2,a.intersect=function(E){return kh.rect(a,E)},p},xBt={rhombus:vBt,question:vBt,rect:q$e,labelRect:H$e,rectWithTitle:V$e,choice:O$e,circle:U$e,doublecircle:W$e,stadium:G$e,hexagon:P$e,rect_left_inv_arrow:F$e,lean_right:N$e,lean_left:B$e,trapezoid:R$e,inv_trapezoid:j$e,rect_right_inv_arrow:$$e,cylinder:z$e,start:K$e,end:(i,a)=>{const f=i.insert("g").attr("class","node default").attr("id",a.domId||a.id),p=f.insert("circle",":first-child"),w=f.insert("circle",":first-child");return w.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),p.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),tf(a,w),a.intersect=function(m){return kh.circle(a,7,m)},f},note:I$e,subroutine:Y$e,fork:yBt,join:yBt,class_box:(i,a)=>{const f=a.padding/2,p=4,w=8;let m;a.classes?m="node "+a.classes:m="node default";const b=i.insert("g").attr("class",m).attr("id",a.domId||a.id),E=b.insert("rect",":first-child"),_=b.insert("line"),A=b.insert("line");let I=0,B=p;const N=b.insert("g").attr("class","label");let R=0;const z=a.classData.annotations&&a.classData.annotations[0],W=a.classData.annotations[0]?"«"+a.classData.annotations[0]+"»":"",et=N.node().appendChild(gp(W,a.labelStyle,!0,!0));let st=et.getBBox();if(o1(Oe().flowchart.htmlLabels)){const vt=et.children[0],X=yr(et);st=vt.getBoundingClientRect(),X.attr("width",st.width),X.attr("height",st.height)}a.classData.annotations[0]&&(B+=st.height+p,I+=st.width);let at=a.classData.label;a.classData.type!==void 0&&a.classData.type!==""&&(Oe().flowchart.htmlLabels?at+="<"+a.classData.type+">":at+="<"+a.classData.type+">");const bt=N.node().appendChild(gp(at,a.labelStyle,!0,!0));yr(bt).attr("class","classTitle");let mt=bt.getBBox();if(o1(Oe().flowchart.htmlLabels)){const vt=bt.children[0],X=yr(bt);mt=vt.getBoundingClientRect(),X.attr("width",mt.width),X.attr("height",mt.height)}B+=mt.height+p,mt.width>I&&(I=mt.width);const yt=[];a.classData.members.forEach(vt=>{const X=vt.getDisplayDetails();let pt=X.displayText;Oe().flowchart.htmlLabels&&(pt=pt.replace(//g,">"));const U=N.node().appendChild(gp(pt,X.cssStyle?X.cssStyle:a.labelStyle,!0,!0));let Tt=U.getBBox();if(o1(Oe().flowchart.htmlLabels)){const nt=U.children[0],It=yr(U);Tt=nt.getBoundingClientRect(),It.attr("width",Tt.width),It.attr("height",Tt.height)}Tt.width>I&&(I=Tt.width),B+=Tt.height+p,yt.push(U)}),B+=w;const ft=[];if(a.classData.methods.forEach(vt=>{const X=vt.getDisplayDetails();let pt=X.displayText;Oe().flowchart.htmlLabels&&(pt=pt.replace(//g,">"));const U=N.node().appendChild(gp(pt,X.cssStyle?X.cssStyle:a.labelStyle,!0,!0));let Tt=U.getBBox();if(o1(Oe().flowchart.htmlLabels)){const nt=U.children[0],It=yr(U);Tt=nt.getBoundingClientRect(),It.attr("width",Tt.width),It.attr("height",Tt.height)}Tt.width>I&&(I=Tt.width),B+=Tt.height+p,ft.push(U)}),B+=w,z){let vt=(I-st.width)/2;yr(et).attr("transform","translate( "+(-1*I/2+vt)+", "+-1*B/2+")"),R=st.height+p}let ut=(I-mt.width)/2;return yr(bt).attr("transform","translate( "+(-1*I/2+ut)+", "+(-1*B/2+R)+")"),R+=mt.height+p,_.attr("class","divider").attr("x1",-I/2-f).attr("x2",I/2+f).attr("y1",-B/2-f+w+R).attr("y2",-B/2-f+w+R),R+=w,yt.forEach(vt=>{yr(vt).attr("transform","translate( "+-I/2+", "+(-1*B/2+R+w/2)+")");const X=vt==null?void 0:vt.getBBox();R+=((X==null?void 0:X.height)??0)+p}),R+=w,A.attr("class","divider").attr("x1",-I/2-f).attr("x2",I/2+f).attr("y1",-B/2-f+w+R).attr("y2",-B/2-f+w+R),R+=w,ft.forEach(vt=>{yr(vt).attr("transform","translate( "+-I/2+", "+(-1*B/2+R)+")");const X=vt==null?void 0:vt.getBBox();R+=((X==null?void 0:X.height)??0)+p}),E.attr("class","outer title-state").attr("x",-I/2-f).attr("y",-(B/2)-f).attr("width",I+a.padding).attr("height",B+a.padding),tf(a,E),a.intersect=function(vt){return kh.rect(a,vt)},b}};let cL={};const kBt=async(i,a,f)=>{let p,w;if(a.link){let m;Oe().securityLevel==="sandbox"?m="_top":a.linkTarget&&(m=a.linkTarget||"_blank"),p=i.insert("svg:a").attr("xlink:href",a.link).attr("target",m),w=await xBt[a.shape](p,a,f)}else w=await xBt[a.shape](i,a,f),p=w;return a.tooltip&&w.attr("title",a.tooltip),a.class&&w.attr("class","node default "+a.class),cL[a.id]=p,a.haveCallback&&cL[a.id].attr("class",cL[a.id].attr("class")+" clickable"),p},X$e=(i,a)=>{cL[a.id]=i},Q$e=()=>{cL={}},EBt=i=>{const a=cL[i.id];Ut.trace("Transforming node",i.diff,i,"translate("+(i.x-i.width/2-5)+", "+i.width/2+")");const f=8,p=i.diff||0;return i.clusterNode?a.attr("transform","translate("+(i.x+p-i.width/2)+", "+(i.y-i.height/2-f)+")"):a.attr("transform","translate("+i.x+", "+i.y+")"),p},Z$e={rect:(i,a)=>{Ut.info("Creating subgraph rect for ",a.id,a);const f=i.insert("g").attr("class","cluster"+(a.class?" "+a.class:"")).attr("id",a.id),p=f.insert("rect",":first-child"),w=o1(Oe().flowchart.htmlLabels),m=f.insert("g").attr("class","cluster-label"),b=a.labelType==="markdown"?EY(m,a.labelText,{style:a.labelStyle,useHtmlLabels:w}):m.node().appendChild(gp(a.labelText,a.labelStyle,void 0,!0));let E=b.getBBox();if(o1(Oe().flowchart.htmlLabels)){const N=b.children[0],R=yr(b);E=N.getBoundingClientRect(),R.attr("width",E.width),R.attr("height",E.height)}const _=0*a.padding,A=_/2,I=a.width<=E.width+_?E.width+_:a.width;a.width<=E.width+_?a.diff=(E.width-a.width)/2-a.padding/2:a.diff=-a.padding/2,Ut.trace("Data ",a,JSON.stringify(a)),p.attr("style",a.style).attr("rx",a.rx).attr("ry",a.ry).attr("x",a.x-I/2).attr("y",a.y-a.height/2-A).attr("width",I).attr("height",a.height+_),w?m.attr("transform","translate("+(a.x-E.width/2)+", "+(a.y-a.height/2)+")"):m.attr("transform","translate("+a.x+", "+(a.y-a.height/2)+")");const B=p.node().getBBox();return a.width=B.width,a.height=B.height,a.intersect=function(N){return _F(a,N)},f},roundedWithTitle:(i,a)=>{const f=i.insert("g").attr("class",a.classes).attr("id",a.id),p=f.insert("rect",":first-child"),w=f.insert("g").attr("class","cluster-label"),m=f.append("rect"),b=w.node().appendChild(gp(a.labelText,a.labelStyle,void 0,!0));let E=b.getBBox();if(o1(Oe().flowchart.htmlLabels)){const N=b.children[0],R=yr(b);E=N.getBoundingClientRect(),R.attr("width",E.width),R.attr("height",E.height)}E=b.getBBox();const _=0*a.padding,A=_/2,I=a.width<=E.width+a.padding?E.width+a.padding:a.width;a.width<=E.width+a.padding?a.diff=(E.width+a.padding*0-a.width)/2:a.diff=-a.padding/2,p.attr("class","outer").attr("x",a.x-I/2-A).attr("y",a.y-a.height/2-A).attr("width",I+_).attr("height",a.height+_),m.attr("class","inner").attr("x",a.x-I/2-A).attr("y",a.y-a.height/2-A+E.height-1).attr("width",I+_).attr("height",a.height+_-E.height-3),w.attr("transform","translate("+(a.x-E.width/2)+", "+(a.y-a.height/2-a.padding/3+(o1(Oe().flowchart.htmlLabels)?5:3))+")");const B=p.node().getBBox();return a.height=B.height,a.intersect=function(N){return _F(a,N)},f},noteGroup:(i,a)=>{const f=i.insert("g").attr("class","note-cluster").attr("id",a.id),p=f.insert("rect",":first-child"),w=0*a.padding,m=w/2;p.attr("rx",a.rx).attr("ry",a.ry).attr("x",a.x-a.width/2-m).attr("y",a.y-a.height/2-m).attr("width",a.width+w).attr("height",a.height+w).attr("fill","none");const b=p.node().getBBox();return a.width=b.width,a.height=b.height,a.intersect=function(E){return _F(a,E)},f},divider:(i,a)=>{const f=i.insert("g").attr("class",a.classes).attr("id",a.id),p=f.insert("rect",":first-child"),w=0*a.padding,m=w/2;p.attr("class","divider").attr("x",a.x-a.width/2-m).attr("y",a.y-a.height/2).attr("width",a.width+w).attr("height",a.height+w);const b=p.node().getBBox();return a.width=b.width,a.height=b.height,a.diff=-a.padding/2,a.intersect=function(E){return _F(a,E)},f}};let TBt={};const J$e=(i,a)=>{Ut.trace("Inserting cluster");const f=a.shape||"rect";TBt[a.id]=Z$e[f](i,a)},tze=()=>{TBt={}},vk={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:5.3};function _Y(i,a){i=SY(i),a=SY(a);const[f,p]=[i.x,i.y],[w,m]=[a.x,a.y],b=w-f,E=m-p;return{angle:Math.atan(E/b),deltaX:b,deltaY:E}}const SY=i=>Array.isArray(i)?{x:i[0],y:i[1]}:i,CBt=i=>({x:function(a,f,p){let w=0;if(f===0&&Object.hasOwn(vk,i.arrowTypeStart)){const{angle:m,deltaX:b}=_Y(p[0],p[1]);w=vk[i.arrowTypeStart]*Math.cos(m)*(b>=0?1:-1)}else if(f===p.length-1&&Object.hasOwn(vk,i.arrowTypeEnd)){const{angle:m,deltaX:b}=_Y(p[p.length-1],p[p.length-2]);w=vk[i.arrowTypeEnd]*Math.cos(m)*(b>=0?1:-1)}return SY(a).x+w},y:function(a,f,p){let w=0;if(f===0&&Object.hasOwn(vk,i.arrowTypeStart)){const{angle:m,deltaY:b}=_Y(p[0],p[1]);w=vk[i.arrowTypeStart]*Math.abs(Math.sin(m))*(b>=0?1:-1)}else if(f===p.length-1&&Object.hasOwn(vk,i.arrowTypeEnd)){const{angle:m,deltaY:b}=_Y(p[p.length-1],p[p.length-2]);w=vk[i.arrowTypeEnd]*Math.abs(Math.sin(m))*(b>=0?1:-1)}return SY(a).y+w}});let AY={},Bd={};const eze=()=>{AY={},Bd={}},_Bt=(i,a)=>{const f=o1(Oe().flowchart.htmlLabels),p=a.labelType==="markdown"?EY(i,a.label,{style:a.labelStyle,useHtmlLabels:f,addSvgBackground:!0}):gp(a.label,a.labelStyle);Ut.info("abc82",a,a.labelType);const w=i.insert("g").attr("class","edgeLabel"),m=w.insert("g").attr("class","label");m.node().appendChild(p);let b=p.getBBox();if(f){const _=p.children[0],A=yr(p);b=_.getBoundingClientRect(),A.attr("width",b.width),A.attr("height",b.height)}m.attr("transform","translate("+-b.width/2+", "+-b.height/2+")"),AY[a.id]=w,a.width=b.width,a.height=b.height;let E;if(a.startLabelLeft){const _=gp(a.startLabelLeft,a.labelStyle),A=i.insert("g").attr("class","edgeTerminals"),I=A.insert("g").attr("class","inner");E=I.node().appendChild(_);const B=_.getBBox();I.attr("transform","translate("+-B.width/2+", "+-B.height/2+")"),Bd[a.id]||(Bd[a.id]={}),Bd[a.id].startLeft=A,LY(E,a.startLabelLeft)}if(a.startLabelRight){const _=gp(a.startLabelRight,a.labelStyle),A=i.insert("g").attr("class","edgeTerminals"),I=A.insert("g").attr("class","inner");E=A.node().appendChild(_),I.node().appendChild(_);const B=_.getBBox();I.attr("transform","translate("+-B.width/2+", "+-B.height/2+")"),Bd[a.id]||(Bd[a.id]={}),Bd[a.id].startRight=A,LY(E,a.startLabelRight)}if(a.endLabelLeft){const _=gp(a.endLabelLeft,a.labelStyle),A=i.insert("g").attr("class","edgeTerminals"),I=A.insert("g").attr("class","inner");E=I.node().appendChild(_);const B=_.getBBox();I.attr("transform","translate("+-B.width/2+", "+-B.height/2+")"),A.node().appendChild(_),Bd[a.id]||(Bd[a.id]={}),Bd[a.id].endLeft=A,LY(E,a.endLabelLeft)}if(a.endLabelRight){const _=gp(a.endLabelRight,a.labelStyle),A=i.insert("g").attr("class","edgeTerminals"),I=A.insert("g").attr("class","inner");E=I.node().appendChild(_);const B=_.getBBox();I.attr("transform","translate("+-B.width/2+", "+-B.height/2+")"),A.node().appendChild(_),Bd[a.id]||(Bd[a.id]={}),Bd[a.id].endRight=A,LY(E,a.endLabelRight)}return p};function LY(i,a){Oe().flowchart.htmlLabels&&i&&(i.style.width=a.length*9+"px",i.style.height="12px")}const nze=(i,a)=>{Ut.info("Moving label abc78 ",i.id,i.label,AY[i.id]);let f=a.updatedPath?a.updatedPath:a.originalPath;if(i.label){const p=AY[i.id];let w=i.x,m=i.y;if(f){const b=$a.calcLabelPosition(f);Ut.info("Moving label "+i.label+" from (",w,",",m,") to (",b.x,",",b.y,") abc78"),a.updatedPath&&(w=b.x,m=b.y)}p.attr("transform","translate("+w+", "+m+")")}if(i.startLabelLeft){const p=Bd[i.id].startLeft;let w=i.x,m=i.y;if(f){const b=$a.calcTerminalLabelPosition(i.arrowTypeStart?10:0,"start_left",f);w=b.x,m=b.y}p.attr("transform","translate("+w+", "+m+")")}if(i.startLabelRight){const p=Bd[i.id].startRight;let w=i.x,m=i.y;if(f){const b=$a.calcTerminalLabelPosition(i.arrowTypeStart?10:0,"start_right",f);w=b.x,m=b.y}p.attr("transform","translate("+w+", "+m+")")}if(i.endLabelLeft){const p=Bd[i.id].endLeft;let w=i.x,m=i.y;if(f){const b=$a.calcTerminalLabelPosition(i.arrowTypeEnd?10:0,"end_left",f);w=b.x,m=b.y}p.attr("transform","translate("+w+", "+m+")")}if(i.endLabelRight){const p=Bd[i.id].endRight;let w=i.x,m=i.y;if(f){const b=$a.calcTerminalLabelPosition(i.arrowTypeEnd?10:0,"end_right",f);w=b.x,m=b.y}p.attr("transform","translate("+w+", "+m+")")}},rze=(i,a)=>{const f=i.x,p=i.y,w=Math.abs(a.x-f),m=Math.abs(a.y-p),b=i.width/2,E=i.height/2;return w>=b||m>=E},ize=(i,a,f)=>{Ut.warn(`intersection calc abc89: - outsidePoint: ${JSON.stringify(a)} - insidePoint : ${JSON.stringify(f)} - node : x:${i.x} y:${i.y} w:${i.width} h:${i.height}`);const p=i.x,w=i.y,m=Math.abs(p-f.x),b=i.width/2;let E=f.xMath.abs(p-a.x)*_){let B=f.y{Ut.warn("abc88 cutPathAtIntersect",i,a);let f=[],p=i[0],w=!1;return i.forEach(m=>{if(Ut.info("abc88 checking point",m,a),!rze(a,m)&&!w){const b=ize(a,p,m);Ut.warn("abc88 inside",m,p,b),Ut.warn("abc88 intersection",b);let E=!1;f.forEach(_=>{E=E||_.x===b.x&&_.y===b.y}),f.some(_=>_.x===b.x&&_.y===b.y)?Ut.warn("abc88 no intersect",b,f):f.push(b),w=!0}else Ut.warn("abc88 outside",m,p),p=m,w||f.push(m)}),Ut.warn("abc88 returning points",f),f},sze=function(i,a,f,p,w,m,b){let E=f.points,_=!1;const A=m.node(a.v);var I=m.node(a.w);Ut.info("abc88 InsertEdge: ",f),I.intersect&&A.intersect&&(E=E.slice(1,f.points.length-1),E.unshift(A.intersect(E[0])),Ut.info("Last point",E[E.length-1],I,I.intersect(E[E.length-1])),E.push(I.intersect(E[E.length-1]))),f.toCluster&&(Ut.info("to cluster abc88",p[f.toCluster]),E=SBt(f.points,p[f.toCluster].node),_=!0),f.fromCluster&&(Ut.info("from cluster abc88",p[f.fromCluster]),E=SBt(E.reverse(),p[f.fromCluster].node).reverse(),_=!0);const B=E.filter(mt=>!Number.isNaN(mt.y));let N=HP;f.curve&&(w==="graph"||w==="flowchart")&&(N=f.curve);const{x:R,y:z}=CBt(f),W=E5().x(R).y(z).curve(N);let et;switch(f.thickness){case"normal":et="edge-thickness-normal";break;case"thick":et="edge-thickness-thick";break;case"invisible":et="edge-thickness-thick";break;default:et=""}switch(f.pattern){case"solid":et+=" edge-pattern-solid";break;case"dotted":et+=" edge-pattern-dotted";break;case"dashed":et+=" edge-pattern-dashed";break}const st=i.append("path").attr("d",W(B)).attr("id",f.id).attr("class"," "+et+(f.classes?" "+f.classes:"")).attr("style",f.style);let at="";switch((Oe().flowchart.arrowMarkerAbsolute||Oe().state.arrowMarkerAbsolute)&&(at=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,at=at.replace(/\(/g,"\\("),at=at.replace(/\)/g,"\\)")),Ut.info("arrowTypeStart",f.arrowTypeStart),Ut.info("arrowTypeEnd",f.arrowTypeEnd),f.arrowTypeStart){case"arrow_cross":st.attr("marker-start","url("+at+"#"+b+"_"+w+"-crossStart)");break;case"arrow_point":st.attr("marker-start","url("+at+"#"+b+"_"+w+"-pointStart)");break;case"arrow_barb":st.attr("marker-start","url("+at+"#"+b+"_"+w+"-barbStart)");break;case"arrow_circle":st.attr("marker-start","url("+at+"#"+b+"_"+w+"-circleStart)");break;case"aggregation":st.attr("marker-start","url("+at+"#"+b+"_"+w+"-aggregationStart)");break;case"extension":st.attr("marker-start","url("+at+"#"+b+"_"+w+"-extensionStart)");break;case"composition":st.attr("marker-start","url("+at+"#"+b+"_"+w+"-compositionStart)");break;case"dependency":st.attr("marker-start","url("+at+"#"+b+"_"+w+"-dependencyStart)");break;case"lollipop":st.attr("marker-start","url("+at+"#"+b+"_"+w+"-lollipopStart)");break}switch(f.arrowTypeEnd){case"arrow_cross":st.attr("marker-end","url("+at+"#"+b+"_"+w+"-crossEnd)");break;case"arrow_point":st.attr("marker-end","url("+at+"#"+b+"_"+w+"-pointEnd)");break;case"arrow_barb":st.attr("marker-end","url("+at+"#"+b+"_"+w+"-barbEnd)");break;case"arrow_circle":st.attr("marker-end","url("+at+"#"+b+"_"+w+"-circleEnd)");break;case"aggregation":st.attr("marker-end","url("+at+"#"+b+"_"+w+"-aggregationEnd)");break;case"extension":st.attr("marker-end","url("+at+"#"+b+"_"+w+"-extensionEnd)");break;case"composition":st.attr("marker-end","url("+at+"#"+b+"_"+w+"-compositionEnd)");break;case"dependency":st.attr("marker-end","url("+at+"#"+b+"_"+w+"-dependencyEnd)");break;case"lollipop":st.attr("marker-end","url("+at+"#"+b+"_"+w+"-lollipopEnd)");break}let bt={};return _&&(bt.updatedPath=E),bt.originalPath=f.points,bt},ABt=async(i,a,f,p,w)=>{Ut.info("Graph in recursive render: XXX",P5(a),w);const m=a.graph().rankdir;Ut.trace("Dir in recursive render - dir:",m);const b=i.insert("g").attr("class","root");a.nodes()?Ut.info("Recursive render XXX",a.nodes()):Ut.info("No nodes found for",a),a.edges().length>0&&Ut.trace("Recursive edges",a.edge(a.edges()[0]));const E=b.insert("g").attr("class","clusters"),_=b.insert("g").attr("class","edgePaths"),A=b.insert("g").attr("class","edgeLabels"),I=b.insert("g").attr("class","nodes");await Promise.all(a.nodes().map(async function(N){const R=a.node(N);if(w!==void 0){const z=JSON.parse(JSON.stringify(w.clusterData));Ut.info("Setting data for cluster XXX (",N,") ",z,w),a.setNode(w.id,z),a.parent(N)||(Ut.trace("Setting parent",N,w.id),a.setParent(N,w.id,z))}if(Ut.info("(Insert) Node XXX"+N+": "+JSON.stringify(a.node(N))),R&&R.clusterNode){Ut.info("Cluster identified",N,R.width,a.node(N));const z=await ABt(I,R.graph,f,p,a.node(N)),W=z.elem;tf(R,W),R.diff=z.diff||0,Ut.info("Node bounds (abc123)",N,R,R.width,R.x,R.y),X$e(W,R),Ut.warn("Recursive render complete ",W,R)}else a.children(N).length>0?(Ut.info("Cluster - the non recursive path XXX",N,R.id,R,a),Ut.info(CF(R.id,a)),Ho[R.id]={id:CF(R.id,a),node:R}):(Ut.info("Node - the non recursive path",N,R.id,R),await kBt(I,a.node(N),m))})),a.edges().forEach(function(N){const R=a.edge(N.v,N.w,N.name);Ut.info("Edge "+N.v+" -> "+N.w+": "+JSON.stringify(N)),Ut.info("Edge "+N.v+" -> "+N.w+": ",N," ",JSON.stringify(a.edge(N))),Ut.info("Fix",Ho,"ids:",N.v,N.w,"Translateing: ",Ho[N.v],Ho[N.w]),_Bt(A,R)}),a.edges().forEach(function(N){Ut.info("Edge "+N.v+" -> "+N.w+": "+JSON.stringify(N))}),Ut.info("#############################################"),Ut.info("### Layout ###"),Ut.info("#############################################"),Ut.info(a),aL(a),Ut.info("Graph after layout:",P5(a));let B=0;return S$e(a).forEach(function(N){const R=a.node(N);Ut.info("Position "+N+": "+JSON.stringify(a.node(N))),Ut.info("Position "+N+": ("+R.x,","+R.y,") width: ",R.width," height: ",R.height),R&&R.clusterNode?EBt(R):a.children(N).length>0?(J$e(E,R),Ho[R.id].node=R):EBt(R)}),a.edges().forEach(function(N){const R=a.edge(N);Ut.info("Edge "+N.v+" -> "+N.w+": "+JSON.stringify(R),R);const z=sze(_,N,R,Ho,f,a,p);nze(R,z)}),a.nodes().forEach(function(N){const R=a.node(N);Ut.info(N,R.type,R.diff),R.type==="group"&&(B=R.diff)}),{elem:b,diff:B}},N0t=async(i,a,f,p,w)=>{PNt(i,f,p,w),Q$e(),eze(),tze(),T$e(),Ut.warn("Graph at first:",JSON.stringify(P5(a))),_$e(a),Ut.warn("Graph after:",JSON.stringify(P5(a))),await ABt(i,a,p,w)},LBt={},aze=function(i){const a=Object.keys(i);for(const f of a)LBt[f]=i[f]},MBt=function(i,a,f,p,w,m){const b=p.select(`[id="${f}"]`);Object.keys(i).forEach(function(_){const A=i[_];let I="default";A.classes.length>0&&(I=A.classes.join(" ")),I=I+" flowchart-label";const B=im(A.styles);let N=A.text!==void 0?A.text:A.id,R;if(Ut.info("vertex",A,A.labelType),A.labelType==="markdown")Ut.info("vertex",A,A.labelType);else if(o1(Oe().flowchart.htmlLabels)){const et={label:N.replace(/fa[blrs]?:fa-[\w-]+/g,st=>``)};R=b0t(b,et).node(),R.parentNode.removeChild(R)}else{const et=w.createElementNS("http://www.w3.org/2000/svg","text");et.setAttribute("style",B.labelStyle.replace("color:","fill:"));const st=N.split(Kr.lineBreakRegex);for(const at of st){const bt=w.createElementNS("http://www.w3.org/2000/svg","tspan");bt.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),bt.setAttribute("dy","1em"),bt.setAttribute("x","1"),bt.textContent=at,et.appendChild(bt)}R=et}let z=0,W="";switch(A.type){case"round":z=5,W="rect";break;case"square":W="rect";break;case"diamond":W="question";break;case"hexagon":W="hexagon";break;case"odd":W="rect_left_inv_arrow";break;case"lean_right":W="lean_right";break;case"lean_left":W="lean_left";break;case"trapezoid":W="trapezoid";break;case"inv_trapezoid":W="inv_trapezoid";break;case"odd_right":W="rect_left_inv_arrow";break;case"circle":W="circle";break;case"ellipse":W="ellipse";break;case"stadium":W="stadium";break;case"subroutine":W="subroutine";break;case"cylinder":W="cylinder";break;case"group":W="rect";break;case"doublecircle":W="doublecircle";break;default:W="rect"}a.setNode(A.id,{labelStyle:B.labelStyle,shape:W,labelText:N,labelType:A.labelType,rx:z,ry:z,class:I,style:B.style,id:A.id,link:A.link,linkTarget:A.linkTarget,tooltip:m.db.getTooltip(A.id)||"",domId:m.db.lookUpDomId(A.id),haveCallback:A.haveCallback,width:A.type==="group"?500:void 0,dir:A.dir,type:A.type,props:A.props,padding:Oe().flowchart.padding}),Ut.info("setNode",{labelStyle:B.labelStyle,labelType:A.labelType,shape:W,labelText:N,rx:z,ry:z,class:I,style:B.style,id:A.id,domId:m.db.lookUpDomId(A.id),width:A.type==="group"?500:void 0,type:A.type,dir:A.dir,props:A.props,padding:Oe().flowchart.padding})})},DBt=function(i,a,f){Ut.info("abc78 edges = ",i);let p=0,w={},m,b;if(i.defaultStyle!==void 0){const E=im(i.defaultStyle);m=E.style,b=E.labelStyle}i.forEach(function(E){p++;const _="L-"+E.start+"-"+E.end;w[_]===void 0?(w[_]=0,Ut.info("abc78 new entry",_,w[_])):(w[_]++,Ut.info("abc78 new entry",_,w[_]));let A=_+"-"+w[_];Ut.info("abc78 new link id to be used is",_,A,w[_]);const I="LS-"+E.start,B="LE-"+E.end,N={style:"",labelStyle:""};switch(N.minlen=E.length||1,E.type==="arrow_open"?N.arrowhead="none":N.arrowhead="normal",N.arrowTypeStart="arrow_open",N.arrowTypeEnd="arrow_open",E.type){case"double_arrow_cross":N.arrowTypeStart="arrow_cross";case"arrow_cross":N.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":N.arrowTypeStart="arrow_point";case"arrow_point":N.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":N.arrowTypeStart="arrow_circle";case"arrow_circle":N.arrowTypeEnd="arrow_circle";break}let R="",z="";switch(E.stroke){case"normal":R="fill:none;",m!==void 0&&(R=m),b!==void 0&&(z=b),N.thickness="normal",N.pattern="solid";break;case"dotted":N.thickness="normal",N.pattern="dotted",N.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":N.thickness="thick",N.pattern="solid",N.style="stroke-width: 3.5px;fill:none;";break;case"invisible":N.thickness="invisible",N.pattern="solid",N.style="stroke-width: 0;fill:none;";break}if(E.style!==void 0){const W=im(E.style);R=W.style,z=W.labelStyle}N.style=N.style+=R,N.labelStyle=N.labelStyle+=z,E.interpolate!==void 0?N.curve=ew(E.interpolate,cg):i.defaultInterpolate!==void 0?N.curve=ew(i.defaultInterpolate,cg):N.curve=ew(LBt.curve,cg),E.text===void 0?E.style!==void 0&&(N.arrowheadStyle="fill: #333"):(N.arrowheadStyle="fill: #333",N.labelpos="c"),N.labelType=E.labelType,N.label=E.text.replace(Kr.lineBreakRegex,` -`),E.style===void 0&&(N.style=N.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),N.labelStyle=N.labelStyle.replace("color:","fill:"),N.id=A,N.classes="flowchart-link "+I+" "+B,a.setEdge(E.start,E.end,N,p)})},B0t={setConf:aze,addVertices:MBt,addEdges:DBt,getClasses:function(i,a){return a.db.getClasses()},draw:async function(i,a,f,p){Ut.info("Drawing flowchart");let w=p.db.getDirection();w===void 0&&(w="TD");const{securityLevel:m,flowchart:b}=Oe(),E=b.nodeSpacing||50,_=b.rankSpacing||50;let A;m==="sandbox"&&(A=yr("#i"+a));const I=yr(m==="sandbox"?A.nodes()[0].contentDocument.body:"body"),B=m==="sandbox"?A.nodes()[0].contentDocument:document,N=new c1({multigraph:!0,compound:!0}).setGraph({rankdir:w,nodesep:E,ranksep:_,marginx:0,marginy:0}).setDefaultEdgeLabel(function(){return{}});let R;const z=p.db.getSubGraphs();Ut.info("Subgraphs - ",z);for(let yt=z.length-1;yt>=0;yt--)R=z[yt],Ut.info("Subgraph - ",R),p.db.addVertex(R.id,{text:R.title,type:R.labelType},"group",void 0,R.classes,R.dir);const W=p.db.getVertices(),et=p.db.getEdges();Ut.info("Edges",et);let st=0;for(st=z.length-1;st>=0;st--){R=z[st],sMt("cluster").append("text");for(let yt=0;yt{const f=cCe,p=f(i,"r"),w=f(i,"g"),m=f(i,"b");return FA(p,w,m,a)},IBt=i=>`.label { +`;break}case-2:{b=s?" ":" ";break}case-1:{if(!s&&p)continue;b=" ";break}default:b=String.fromCharCode(v)}p=v===-2,d.push(b)}return d.join("")}const yZt=Object.freeze(Object.defineProperty({__proto__:null,attentionMarkers:{null:[42,95]},contentInitial:{91:kJt},disable:{null:[]},document:{42:q2,43:q2,45:q2,48:q2,49:q2,50:q2,51:q2,52:q2,53:q2,54:q2,55:q2,56:q2,57:q2,62:GVe},flow:{35:AJt,42:XQ,45:[rUe,XQ],60:IJt,61:rUe,95:XQ,96:QVe,126:QVe},flowInitial:{[-2]:Ime,[-1]:Ime,32:Ime},insideSpan:{null:[Mme,dZt]},string:{38:YVe,92:KVe},text:{[-5]:Nme,[-4]:Nme,[-3]:Nme,33:XJt,38:YVe,42:Mme,60:[ZQt,jJt],91:JJt,92:[SJt,KVe],93:Ome,95:Mme,96:fJt}},Symbol.toStringTag,{value:"Module"}));function xZt(i){const u=FQt([yZt,...(i||{}).extensions||[]]),d={defined:[],lazy:{},constructs:u,content:p(GQt),document:p(WQt),flow:p(hZt),string:p(gZt),text:p(pZt)};return d;function p(v){return b;function b(y){return mZt(d,v,y)}}}const aUe=/[\0\t\n\r]/g;function kZt(){let i=1,s="",u=!0,d;return p;function p(v,b,y){const T=[];let _,A,P,R,F;for(v=s+v.toString(b),P=0,s="",u&&(v.charCodeAt(0)===65279&&P++,u=void 0);P13&&u<32||u>126&&u<160||u>55295&&u<57344||u>64975&&u<65008||(u&65535)===65535||(u&65535)===65534||u>1114111?"�":String.fromCharCode(u)}const TZt=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function CZt(i){return i.replace(TZt,SZt)}function SZt(i,s,u){if(s)return s;if(u.charCodeAt(0)===35){const p=u.charCodeAt(1),v=p===120||p===88;return oUe(u.slice(v?2:1),v?16:10)}return Dme(u)||i}function QQ(i){return!i||typeof i!="object"?"":"position"in i||"type"in i?cUe(i.position):"start"in i||"end"in i?cUe(i):"line"in i||"column"in i?Pme(i):""}function Pme(i){return uUe(i&&i.line)+":"+uUe(i&&i.column)}function cUe(i){return Pme(i&&i.start)+"-"+Pme(i&&i.end)}function uUe(i){return i&&typeof i=="number"?i:1}const lUe={}.hasOwnProperty,hUe=function(i,s,u){return typeof s!="string"&&(u=s,s=void 0),_Zt(u)(EZt(xZt(u).document().write(kZt()(i,s,!0))))};function _Zt(i){const s={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:y(Ma),autolinkProtocol:W,autolinkEmail:W,atxHeading:y(zr),blockQuote:y(Qe),characterEscape:W,characterReference:W,codeFenced:y(Dt),codeFencedFenceInfo:T,codeFencedFenceMeta:T,codeIndented:y(Dt,T),codeText:y(kt,T),codeTextData:W,data:W,codeFlowValue:W,definition:y(On),definitionDestinationString:T,definitionLabelString:T,definitionTitleString:T,emphasis:y(ht),hardBreakEscape:y(yt),hardBreakTrailing:y(yt),htmlFlow:y(ji,T),htmlFlowData:W,htmlText:y(ji,T),htmlTextData:W,image:y(xi),label:T,link:y(Ma),listItem:y(ao),listItemValue:j,listOrdered:y(zs,F),listUnordered:y(zs),paragraph:y(Tr),reference:_t,referenceString:T,resourceDestinationString:T,resourceTitleString:T,setextHeading:y(zr),strong:y(Fn),thematicBreak:y(Un)},exit:{atxHeading:A(),atxHeadingSequence:se,autolink:A(),autolinkEmail:Pt,autolinkProtocol:xt,blockQuote:A(),characterEscapeValue:xe,characterReferenceMarkerHexadecimal:Gt,characterReferenceMarkerNumeric:Gt,characterReferenceValue:ln,codeFenced:A(oe),codeFencedFence:ie,codeFencedFenceInfo:K,codeFencedFenceMeta:ee,codeFlowValue:xe,codeIndented:A(pe),codeText:A(Ie),codeTextData:xe,data:xe,definition:A(),definitionDestinationString:ne,definitionLabelString:be,definitionTitleString:ae,emphasis:A(),hardBreakEscape:A(Fe),hardBreakTrailing:A(Fe),htmlFlow:A(Pe),htmlFlowData:xe,htmlText:A(je),htmlTextData:xe,image:A(Ce),label:Ke,labelText:ke,lineEnding:U,link:A(Se),listItem:A(),listOrdered:A(),listUnordered:A(),paragraph:A(),referenceString:Et,resourceDestinationString:Ft,resourceTitleString:Ne,resource:gn,setextHeading:A(ge),setextHeadingLineSequence:X,setextHeadingText:de,strong:A(),thematicBreak:A()}};fUe(s,(i||{}).mdastExtensions||[]);const u={};return d;function d(At){let wt={type:"root",children:[]};const on={stack:[wt],tokenStack:[],config:s,enter:_,exit:P,buffer:T,resume:R,setData:v,getData:b},fn=[];let An=-1;for(;++An0){const oo=on.tokenStack[on.tokenStack.length-1];(oo[1]||dUe).call(on,void 0,oo[0])}for(wt.position={start:N9(At.length>0?At[0][1].start:{line:1,column:1,offset:0}),end:N9(At.length>0?At[At.length-2][1].end:{line:1,column:1,offset:0})},An=-1;++An{A!==0&&(p++,d.push([])),_.split(" ").forEach(P=>{P&&d[p].push({content:P,type:y})})}):(b.type==="strong"||b.type==="emphasis")&&b.children.forEach(T=>{v(T,b.type)})}return u.forEach(b=>{b.type==="paragraph"&&b.children.forEach(y=>{v(y)})}),d}function DZt(i){const{children:s}=hUe(i);function u(d){return d.type==="text"?d.value.replace(/\n/g,"
"):d.type==="strong"?`${d.children.map(u).join("")}`:d.type==="emphasis"?`${d.children.map(u).join("")}`:d.type==="paragraph"?`

${d.children.map(u).join("")}

`:`Unsupported markdown: ${d.type}`}return s.map(u).join("")}function IZt(i){return Intl.Segmenter?[...new Intl.Segmenter().segment(i)].map(s=>s.segment):[...i]}function OZt(i,s){const u=IZt(s.content);return gUe(i,[],u,s.type)}function gUe(i,s,u,d){if(u.length===0)return[{content:s.join(""),type:d},{content:"",type:d}];const[p,...v]=u,b=[...s,p];return i([{content:b.join(""),type:d}])?gUe(i,b,v,d):(s.length===0&&p&&(s.push(p),u.shift()),[{content:s.join(""),type:d},{content:u.join(""),type:d}])}function NZt(i,s){if(i.some(({content:u})=>u.includes(` +`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return Bme(i,s)}function Bme(i,s,u=[],d=[]){if(i.length===0)return d.length>0&&u.push(d),u.length>0?u:[];let p="";i[0].content===" "&&(p=" ",i.shift());const v=i.shift()??{content:" ",type:"normal"},b=[...d];if(p!==""&&b.push({content:p,type:"normal"}),b.push(v),s(b))return Bme(i,s,u,b);if(d.length>0)u.push(d),i.unshift(v);else if(v.content){const[y,T]=OZt(s,v);u.push([y]),T.content&&i.unshift(T)}return Bme(i,s,u)}function PZt(i,s){s&&i.attr("style",s)}function BZt(i,s,u,d,p=!1){const v=i.append("foreignObject"),b=v.append("xhtml:div"),y=s.label,T=s.isNode?"nodeLabel":"edgeLabel";b.html(` + "+y+""),PZt(b,s.labelStyle),b.style("display","table-cell"),b.style("white-space","nowrap"),b.style("max-width",u+"px"),b.attr("xmlns","http://www.w3.org/1999/xhtml"),p&&b.attr("class","labelBkg");let _=b.node().getBoundingClientRect();return _.width===u&&(b.style("display","table"),b.style("white-space","break-spaces"),b.style("width",u+"px"),_=b.node().getBoundingClientRect()),v.style("width",_.width),v.style("height",_.height),v.node()}function Fme(i,s,u){return i.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",s*u-.1+"em").attr("dy",u+"em")}function FZt(i,s,u){const d=i.append("text"),p=Fme(d,1,s);Rme(p,u);const v=p.node().getComputedTextLength();return d.remove(),v}function RZt(i,s,u){var b;const d=i.append("text"),p=Fme(d,1,s);Rme(p,[{content:u,type:"normal"}]);const v=(b=p.node())==null?void 0:b.getBoundingClientRect();return v&&d.remove(),v}function jZt(i,s,u,d=!1){const v=s.append("g"),b=v.insert("rect").attr("class","background"),y=v.append("text").attr("y","-10.1");let T=0;for(const _ of u){const A=R=>FZt(v,1.1,R)<=i,P=A(_)?[_]:NZt(_,A);for(const R of P){const F=Fme(y,T,1.1);Rme(F,R),T++}}if(d){const _=y.node().getBBox(),A=2;return b.attr("x",-A).attr("y",-A).attr("width",_.width+2*A).attr("height",_.height+2*A),v.node()}else return y.node()}function Rme(i,s){i.text(""),s.forEach((u,d)=>{const p=i.append("tspan").attr("font-style",u.type==="emphasis"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",u.type==="strong"?"bold":"normal");d===0?p.text(u.content):p.text(" "+u.content)})}const JQ=(i,s="",{style:u="",isTitle:d=!1,classes:p="",useHtmlLabels:v=!0,isNode:b=!0,width:y=200,addSvgBackground:T=!1}={})=>{if(Xe.info("createText",s,u,d,p,v,b,T),v){const _=DZt(s),A={isNode:b,label:ZF(_).replace(/fa[blrs]?:fa-[\w-]+/g,R=>``),labelStyle:u.replace("fill:","color:")};return BZt(i,A,y,p,T)}else{const _=MZt(s);return jZt(y,i,_,T)}},g1=async(i,s,u,d)=>{let p;const v=s.useHtmlLabels||f1(qt().flowchart.htmlLabels);u?p=u:p="node default";const b=i.insert("g").attr("class",p).attr("id",s.domId||s.id),y=b.insert("g").attr("class","label").attr("style",s.labelStyle);let T;s.labelText===void 0?T="":T=typeof s.labelText=="string"?s.labelText:s.labelText[0];const _=y.node();let A;s.labelType==="markdown"?A=JQ(y,Yf(ZF(T),qt()),{useHtmlLabels:v,width:s.width||qt().flowchart.wrappingWidth,classes:"markdown-node-label"}):A=_.appendChild($2(Yf(ZF(T),qt()),s.labelStyle,!1,d));let P=A.getBBox();const R=s.padding/2;if(f1(qt().flowchart.htmlLabels)){const F=A.children[0],j=Ir(A),K=F.getElementsByTagName("img");if(K){const ee=T.replace(/]*>/g,"").trim()==="";await Promise.all([...K].map(ie=>new Promise(oe=>{function pe(){if(ie.style.display="flex",ie.style.flexDirection="column",ee){const be=qt().fontSize?qt().fontSize:window.getComputedStyle(document.body).fontSize,ae=5,ne=parseInt(be,10)*ae+"px";ie.style.minWidth=ne,ie.style.maxWidth=ne}else ie.style.width="100%";oe(ie)}setTimeout(()=>{ie.complete&&pe()}),ie.addEventListener("error",pe),ie.addEventListener("load",pe)})))}P=F.getBoundingClientRect(),j.attr("width",P.width),j.attr("height",P.height)}return v?y.attr("transform","translate("+-P.width/2+", "+-P.height/2+")"):y.attr("transform","translate(0, "+-P.height/2+")"),s.centerLabel&&y.attr("transform","translate("+-P.width/2+", "+-P.height/2+")"),y.insert("rect",":first-child"),{shapeSvg:b,bbox:P,halfPadding:R,label:y}},Kh=(i,s)=>{const u=s.node().getBBox();i.width=u.width,i.height=u.height};function r5(i,s,u,d){return i.insert("polygon",":first-child").attr("points",d.map(function(p){return p.x+","+p.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-s/2+","+u/2+")")}let Mo={},V3={},pUe={};const $Zt=()=>{V3={},pUe={},Mo={}},ZQ=(i,s)=>(Xe.trace("In isDescendant",s," ",i," = ",V3[s].includes(i)),!!V3[s].includes(i)),zZt=(i,s)=>(Xe.info("Descendants of ",s," is ",V3[s]),Xe.info("Edge is ",i),i.v===s||i.w===s?!1:V3[s]?V3[s].includes(i.v)||ZQ(i.v,s)||ZQ(i.w,s)||V3[s].includes(i.w):(Xe.debug("Tilt, ",s,",not in descendants"),!1)),bUe=(i,s,u,d)=>{Xe.warn("Copying children of ",i,"root",d,"data",s.node(i),d);const p=s.children(i)||[];i!==d&&p.push(i),Xe.warn("Copying (nodes) clusterId",i,"nodes",p),p.forEach(v=>{if(s.children(v).length>0)bUe(v,s,u,d);else{const b=s.node(v);Xe.info("cp ",v," to ",d," with parent ",i),u.setNode(v,b),d!==s.parent(v)&&(Xe.warn("Setting parent",v,s.parent(v)),u.setParent(v,s.parent(v))),i!==d&&v!==i?(Xe.debug("Setting parent",v,i),u.setParent(v,i)):(Xe.info("In copy ",i,"root",d,"data",s.node(i),d),Xe.debug("Not Setting parent for node=",v,"cluster!==rootId",i!==d,"node!==clusterId",v!==i));const y=s.edges(v);Xe.debug("Copying Edges",y),y.forEach(T=>{Xe.info("Edge",T);const _=s.edge(T.v,T.w,T.name);Xe.info("Edge data",_,d);try{zZt(T,d)?(Xe.info("Copying as ",T.v,T.w,_,T.name),u.setEdge(T.v,T.w,_,T.name),Xe.info("newGraph edges ",u.edges(),u.edge(u.edges()[0]))):Xe.info("Skipping copy of edge ",T.v,"-->",T.w," rootId: ",d," clusterId:",i)}catch(A){Xe.error(A)}})}Xe.debug("Removing node",v),s.removeNode(v)})},mUe=(i,s)=>{const u=s.children(i);let d=[...u];for(const p of u)pUe[p]=i,d=[...d,...mUe(p,s)];return d},MR=(i,s)=>{Xe.trace("Searching",i);const u=s.children(i);if(Xe.trace("Searching children of id ",i,u),u.length<1)return Xe.trace("This is a valid node",i),i;for(const d of u){const p=MR(d,s);if(p)return Xe.trace("Found replacement for",i," => ",p),p}},eJ=i=>!Mo[i]||!Mo[i].externalConnections?i:Mo[i]?Mo[i].id:i,qZt=(i,s)=>{if(!i||s>10){Xe.debug("Opting out, no graph ");return}else Xe.debug("Opting in, graph ");i.nodes().forEach(function(u){i.children(u).length>0&&(Xe.warn("Cluster identified",u," Replacement id in edges: ",MR(u,i)),V3[u]=mUe(u,i),Mo[u]={id:MR(u,i),clusterData:i.node(u)})}),i.nodes().forEach(function(u){const d=i.children(u),p=i.edges();d.length>0?(Xe.debug("Cluster identified",u,V3),p.forEach(v=>{if(v.v!==u&&v.w!==u){const b=ZQ(v.v,u),y=ZQ(v.w,u);b^y&&(Xe.warn("Edge: ",v," leaves cluster ",u),Xe.warn("Descendants of XXX ",u,": ",V3[u]),Mo[u].externalConnections=!0)}})):Xe.debug("Not a cluster ",u,V3)});for(let u of Object.keys(Mo)){const d=Mo[u].id,p=i.parent(d);p!==u&&Mo[p]&&!Mo[p].externalConnections&&(Mo[u].id=p)}i.edges().forEach(function(u){const d=i.edge(u);Xe.warn("Edge "+u.v+" -> "+u.w+": "+JSON.stringify(u)),Xe.warn("Edge "+u.v+" -> "+u.w+": "+JSON.stringify(i.edge(u)));let p=u.v,v=u.w;if(Xe.warn("Fix XXX",Mo,"ids:",u.v,u.w,"Translating: ",Mo[u.v]," --- ",Mo[u.w]),Mo[u.v]&&Mo[u.w]&&Mo[u.v]===Mo[u.w]){Xe.warn("Fixing and trixing link to self - removing XXX",u.v,u.w,u.name),Xe.warn("Fixing and trixing - removing XXX",u.v,u.w,u.name),p=eJ(u.v),v=eJ(u.w),i.removeEdge(u.v,u.w,u.name);const b=u.w+"---"+u.v;i.setNode(b,{domId:b,id:b,labelStyle:"",labelText:d.label,padding:0,shape:"labelRect",style:""});const y=structuredClone(d),T=structuredClone(d);y.label="",y.arrowTypeEnd="none",T.label="",y.fromCluster=u.v,T.toCluster=u.v,i.setEdge(p,b,y,u.name+"-cyclic-special"),i.setEdge(b,v,T,u.name+"-cyclic-special")}else if(Mo[u.v]||Mo[u.w]){if(Xe.warn("Fixing and trixing - removing XXX",u.v,u.w,u.name),p=eJ(u.v),v=eJ(u.w),i.removeEdge(u.v,u.w,u.name),p!==u.v){const b=i.parent(p);Mo[b].externalConnections=!0,d.fromCluster=u.v}if(v!==u.w){const b=i.parent(v);Mo[b].externalConnections=!0,d.toCluster=u.w}Xe.warn("Fix Replacing with XXX",p,v,u.name),i.setEdge(p,v,d,u.name)}}),Xe.warn("Adjusted Graph",q7(i)),vUe(i,0),Xe.trace(Mo)},vUe=(i,s)=>{if(Xe.warn("extractor - ",s,q7(i),i.children("D")),s>10){Xe.error("Bailing out");return}let u=i.nodes(),d=!1;for(const p of u){const v=i.children(p);d=d||v.length>0}if(!d){Xe.debug("Done, no node has children",i.nodes());return}Xe.debug("Nodes = ",u,s);for(const p of u)if(Xe.debug("Extracting node",p,Mo,Mo[p]&&!Mo[p].externalConnections,!i.parent(p),i.node(p),i.children("D")," Depth ",s),!Mo[p])Xe.debug("Not a cluster",p,s);else if(!Mo[p].externalConnections&&i.children(p)&&i.children(p).length>0){Xe.warn("Cluster without external connections, without a parent and with children",p,s);let b=i.graph().rankdir==="TB"?"LR":"TB";Mo[p]&&Mo[p].clusterData&&Mo[p].clusterData.dir&&(b=Mo[p].clusterData.dir,Xe.warn("Fixing dir",Mo[p].clusterData.dir,b));const y=new B0({multigraph:!0,compound:!0}).setGraph({rankdir:b,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});Xe.warn("Old graph before copy",q7(i)),bUe(p,i,y,p),i.setNode(p,{clusterNode:!0,id:p,clusterData:Mo[p].clusterData,labelText:Mo[p].labelText,graph:y}),Xe.warn("New graph after copy node: (",p,")",q7(y)),Xe.debug("Old graph after copy",q7(i))}else Xe.warn("Cluster ** ",p," **not meeting the criteria !externalConnections:",!Mo[p].externalConnections," no parent: ",!i.parent(p)," children ",i.children(p)&&i.children(p).length>0,i.children("D"),s),Xe.debug(Mo);u=i.nodes(),Xe.warn("New list of nodes",u);for(const p of u){const v=i.node(p);Xe.warn(" Now next level",p,v),v.clusterNode&&vUe(v.graph,s+1)}},wUe=(i,s)=>{if(s.length===0)return[];let u=Object.assign(s);return s.forEach(d=>{const p=i.children(d),v=wUe(i,p);u=[...u,...v]}),u},HZt=i=>wUe(i,i.children());function VZt(i,s){return i.intersect(s)}function yUe(i,s,u,d){var p=i.x,v=i.y,b=p-d.x,y=v-d.y,T=Math.sqrt(s*s*y*y+u*u*b*b),_=Math.abs(s*u*b/T);d.x0}function KZt(i,s,u){var d=i.x,p=i.y,v=[],b=Number.POSITIVE_INFINITY,y=Number.POSITIVE_INFINITY;typeof s.forEach=="function"?s.forEach(function(j){b=Math.min(b,j.x),y=Math.min(y,j.y)}):(b=Math.min(b,s.x),y=Math.min(y,s.y));for(var T=d-i.width/2-b,_=p-i.height/2-y,A=0;A1&&v.sort(function(j,K){var ee=j.x-u.x,ie=j.y-u.y,oe=Math.sqrt(ee*ee+ie*ie),pe=K.x-u.x,be=K.y-u.y,ae=Math.sqrt(pe*pe+be*be);return oe{var u=i.x,d=i.y,p=s.x-u,v=s.y-d,b=i.width/2,y=i.height/2,T,_;return Math.abs(v)*b>Math.abs(p)*y?(v<0&&(y=-y),T=v===0?0:y*p/v,_=y):(p<0&&(b=-b),T=b,_=p===0?0:b*v/p),{x:u+T,y:d+_}},yh={node:VZt,circle:UZt,ellipse:yUe,polygon:KZt,rect:DR},WZt=async(i,s)=>{s.useHtmlLabels||qt().flowchart.htmlLabels||(s.centerLabel=!0);const{shapeSvg:d,bbox:p,halfPadding:v}=await g1(i,s,"node "+s.classes,!0);Xe.info("Classes = ",s.classes);const b=d.insert("rect",":first-child");return b.attr("rx",s.rx).attr("ry",s.ry).attr("x",-p.width/2-v).attr("y",-p.height/2-v).attr("width",p.width+s.padding).attr("height",p.height+s.padding),Kh(s,b),s.intersect=function(y){return yh.rect(s,y)},d},YZt=i=>{const s=new Set;for(const u of i)switch(u){case"x":s.add("right"),s.add("left");break;case"y":s.add("up"),s.add("down");break;default:s.add(u);break}return s},XZt=(i,s,u)=>{const d=YZt(i),p=2,v=s.height+2*u.padding,b=v/p,y=s.width+2*b+u.padding,T=u.padding/2;return d.has("right")&&d.has("left")&&d.has("up")&&d.has("down")?[{x:0,y:0},{x:b,y:0},{x:y/2,y:2*T},{x:y-b,y:0},{x:y,y:0},{x:y,y:-v/3},{x:y+2*T,y:-v/2},{x:y,y:-2*v/3},{x:y,y:-v},{x:y-b,y:-v},{x:y/2,y:-v-2*T},{x:b,y:-v},{x:0,y:-v},{x:0,y:-2*v/3},{x:-2*T,y:-v/2},{x:0,y:-v/3}]:d.has("right")&&d.has("left")&&d.has("up")?[{x:b,y:0},{x:y-b,y:0},{x:y,y:-v/2},{x:y-b,y:-v},{x:b,y:-v},{x:0,y:-v/2}]:d.has("right")&&d.has("left")&&d.has("down")?[{x:0,y:0},{x:b,y:-v},{x:y-b,y:-v},{x:y,y:0}]:d.has("right")&&d.has("up")&&d.has("down")?[{x:0,y:0},{x:y,y:-b},{x:y,y:-v+b},{x:0,y:-v}]:d.has("left")&&d.has("up")&&d.has("down")?[{x:y,y:0},{x:0,y:-b},{x:0,y:-v+b},{x:y,y:-v}]:d.has("right")&&d.has("left")?[{x:b,y:0},{x:b,y:-T},{x:y-b,y:-T},{x:y-b,y:0},{x:y,y:-v/2},{x:y-b,y:-v},{x:y-b,y:-v+T},{x:b,y:-v+T},{x:b,y:-v},{x:0,y:-v/2}]:d.has("up")&&d.has("down")?[{x:y/2,y:0},{x:0,y:-T},{x:b,y:-T},{x:b,y:-v+T},{x:0,y:-v+T},{x:y/2,y:-v},{x:y,y:-v+T},{x:y-b,y:-v+T},{x:y-b,y:-T},{x:y,y:-T}]:d.has("right")&&d.has("up")?[{x:0,y:0},{x:y,y:-b},{x:0,y:-v}]:d.has("right")&&d.has("down")?[{x:0,y:0},{x:y,y:0},{x:0,y:-v}]:d.has("left")&&d.has("up")?[{x:y,y:0},{x:0,y:-b},{x:y,y:-v}]:d.has("left")&&d.has("down")?[{x:y,y:0},{x:0,y:0},{x:y,y:-v}]:d.has("right")?[{x:b,y:-T},{x:b,y:-T},{x:y-b,y:-T},{x:y-b,y:0},{x:y,y:-v/2},{x:y-b,y:-v},{x:y-b,y:-v+T},{x:b,y:-v+T},{x:b,y:-v+T}]:d.has("left")?[{x:b,y:0},{x:b,y:-T},{x:y-b,y:-T},{x:y-b,y:-v+T},{x:b,y:-v+T},{x:b,y:-v},{x:0,y:-v/2}]:d.has("up")?[{x:b,y:-T},{x:b,y:-v+T},{x:0,y:-v+T},{x:y/2,y:-v},{x:y,y:-v+T},{x:y-b,y:-v+T},{x:y-b,y:-T}]:d.has("down")?[{x:y/2,y:0},{x:0,y:-T},{x:b,y:-T},{x:b,y:-v+T},{x:y-b,y:-v+T},{x:y-b,y:-T},{x:y,y:-T}]:[{x:0,y:0}]},kUe=i=>i?" "+i:"",dm=(i,s)=>`${s||"node default"}${kUe(i.classes)} ${kUe(i.class)}`,EUe=async(i,s)=>{const{shapeSvg:u,bbox:d}=await g1(i,s,dm(s,void 0),!0),p=d.width+s.padding,v=d.height+s.padding,b=p+v,y=[{x:b/2,y:0},{x:b,y:-b/2},{x:b/2,y:-b},{x:0,y:-b/2}];Xe.info("Question main (Circle)");const T=r5(u,b,b,y);return T.attr("style",s.style),Kh(s,T),s.intersect=function(_){return Xe.warn("Intersect called"),yh.polygon(s,y,_)},u},QZt=(i,s)=>{const u=i.insert("g").attr("class","node default").attr("id",s.domId||s.id),d=28,p=[{x:0,y:d/2},{x:d/2,y:0},{x:0,y:-d/2},{x:-d/2,y:0}];return u.insert("polygon",":first-child").attr("points",p.map(function(b){return b.x+","+b.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),s.width=28,s.height=28,s.intersect=function(b){return yh.circle(s,14,b)},u},JZt=async(i,s)=>{const{shapeSvg:u,bbox:d}=await g1(i,s,dm(s,void 0),!0),p=4,v=d.height+s.padding,b=v/p,y=d.width+2*b+s.padding,T=[{x:b,y:0},{x:y-b,y:0},{x:y,y:-v/2},{x:y-b,y:-v},{x:b,y:-v},{x:0,y:-v/2}],_=r5(u,y,v,T);return _.attr("style",s.style),Kh(s,_),s.intersect=function(A){return yh.polygon(s,T,A)},u},ZZt=async(i,s)=>{const{shapeSvg:u,bbox:d}=await g1(i,s,void 0,!0),p=2,v=d.height+2*s.padding,b=v/p,y=d.width+2*b+s.padding,T=XZt(s.directions,d,s),_=r5(u,y,v,T);return _.attr("style",s.style),Kh(s,_),s.intersect=function(A){return yh.polygon(s,T,A)},u},een=async(i,s)=>{const{shapeSvg:u,bbox:d}=await g1(i,s,dm(s,void 0),!0),p=d.width+s.padding,v=d.height+s.padding,b=[{x:-v/2,y:0},{x:p,y:0},{x:p,y:-v},{x:-v/2,y:-v},{x:0,y:-v/2}];return r5(u,p,v,b).attr("style",s.style),s.width=p+v,s.height=v,s.intersect=function(T){return yh.polygon(s,b,T)},u},ten=async(i,s)=>{const{shapeSvg:u,bbox:d}=await g1(i,s,dm(s),!0),p=d.width+s.padding,v=d.height+s.padding,b=[{x:-2*v/6,y:0},{x:p-v/6,y:0},{x:p+2*v/6,y:-v},{x:v/6,y:-v}],y=r5(u,p,v,b);return y.attr("style",s.style),Kh(s,y),s.intersect=function(T){return yh.polygon(s,b,T)},u},nen=async(i,s)=>{const{shapeSvg:u,bbox:d}=await g1(i,s,dm(s,void 0),!0),p=d.width+s.padding,v=d.height+s.padding,b=[{x:2*v/6,y:0},{x:p+v/6,y:0},{x:p-2*v/6,y:-v},{x:-v/6,y:-v}],y=r5(u,p,v,b);return y.attr("style",s.style),Kh(s,y),s.intersect=function(T){return yh.polygon(s,b,T)},u},ren=async(i,s)=>{const{shapeSvg:u,bbox:d}=await g1(i,s,dm(s,void 0),!0),p=d.width+s.padding,v=d.height+s.padding,b=[{x:-2*v/6,y:0},{x:p+2*v/6,y:0},{x:p-v/6,y:-v},{x:v/6,y:-v}],y=r5(u,p,v,b);return y.attr("style",s.style),Kh(s,y),s.intersect=function(T){return yh.polygon(s,b,T)},u},ien=async(i,s)=>{const{shapeSvg:u,bbox:d}=await g1(i,s,dm(s,void 0),!0),p=d.width+s.padding,v=d.height+s.padding,b=[{x:v/6,y:0},{x:p-v/6,y:0},{x:p+2*v/6,y:-v},{x:-2*v/6,y:-v}],y=r5(u,p,v,b);return y.attr("style",s.style),Kh(s,y),s.intersect=function(T){return yh.polygon(s,b,T)},u},sen=async(i,s)=>{const{shapeSvg:u,bbox:d}=await g1(i,s,dm(s,void 0),!0),p=d.width+s.padding,v=d.height+s.padding,b=[{x:0,y:0},{x:p+v/2,y:0},{x:p,y:-v/2},{x:p+v/2,y:-v},{x:0,y:-v}],y=r5(u,p,v,b);return y.attr("style",s.style),Kh(s,y),s.intersect=function(T){return yh.polygon(s,b,T)},u},aen=async(i,s)=>{const{shapeSvg:u,bbox:d}=await g1(i,s,dm(s,void 0),!0),p=d.width+s.padding,v=p/2,b=v/(2.5+p/50),y=d.height+b+s.padding,T="M 0,"+b+" a "+v+","+b+" 0,0,0 "+p+" 0 a "+v+","+b+" 0,0,0 "+-p+" 0 l 0,"+y+" a "+v+","+b+" 0,0,0 "+p+" 0 l 0,"+-y,_=u.attr("label-offset-y",b).insert("path",":first-child").attr("style",s.style).attr("d",T).attr("transform","translate("+-p/2+","+-(y/2+b)+")");return Kh(s,_),s.intersect=function(A){const P=yh.rect(s,A),R=P.x-s.x;if(v!=0&&(Math.abs(R)s.height/2-b)){let F=b*b*(1-R*R/(v*v));F!=0&&(F=Math.sqrt(F)),F=b-F,A.y-s.y>0&&(F=-F),P.y+=F}return P},u},oen=async(i,s)=>{const{shapeSvg:u,bbox:d,halfPadding:p}=await g1(i,s,"node "+s.classes+" "+s.class,!0),v=u.insert("rect",":first-child"),b=s.positioned?s.width:d.width+s.padding,y=s.positioned?s.height:d.height+s.padding,T=s.positioned?-b/2:-d.width/2-p,_=s.positioned?-y/2:-d.height/2-p;if(v.attr("class","basic label-container").attr("style",s.style).attr("rx",s.rx).attr("ry",s.ry).attr("x",T).attr("y",_).attr("width",b).attr("height",y),s.props){const A=new Set(Object.keys(s.props));s.props.borders&&(jme(v,s.props.borders,b,y),A.delete("borders")),A.forEach(P=>{Xe.warn(`Unknown node property ${P}`)})}return Kh(s,v),s.intersect=function(A){return yh.rect(s,A)},u},cen=async(i,s)=>{const{shapeSvg:u,bbox:d,halfPadding:p}=await g1(i,s,"node "+s.classes,!0),v=u.insert("rect",":first-child"),b=s.positioned?s.width:d.width+s.padding,y=s.positioned?s.height:d.height+s.padding,T=s.positioned?-b/2:-d.width/2-p,_=s.positioned?-y/2:-d.height/2-p;if(v.attr("class","basic cluster composite label-container").attr("style",s.style).attr("rx",s.rx).attr("ry",s.ry).attr("x",T).attr("y",_).attr("width",b).attr("height",y),s.props){const A=new Set(Object.keys(s.props));s.props.borders&&(jme(v,s.props.borders,b,y),A.delete("borders")),A.forEach(P=>{Xe.warn(`Unknown node property ${P}`)})}return Kh(s,v),s.intersect=function(A){return yh.rect(s,A)},u},uen=async(i,s)=>{const{shapeSvg:u}=await g1(i,s,"label",!0);Xe.trace("Classes = ",s.class);const d=u.insert("rect",":first-child"),p=0,v=0;if(d.attr("width",p).attr("height",v),u.attr("class","label edgeLabel"),s.props){const b=new Set(Object.keys(s.props));s.props.borders&&(jme(d,s.props.borders,p,v),b.delete("borders")),b.forEach(y=>{Xe.warn(`Unknown node property ${y}`)})}return Kh(s,d),s.intersect=function(b){return yh.rect(s,b)},u};function jme(i,s,u,d){const p=[],v=y=>{p.push(y,0)},b=y=>{p.push(0,y)};s.includes("t")?(Xe.debug("add top border"),v(u)):b(u),s.includes("r")?(Xe.debug("add right border"),v(d)):b(d),s.includes("b")?(Xe.debug("add bottom border"),v(u)):b(u),s.includes("l")?(Xe.debug("add left border"),v(d)):b(d),i.attr("stroke-dasharray",p.join(" "))}const len=(i,s)=>{let u;s.classes?u="node "+s.classes:u="node default";const d=i.insert("g").attr("class",u).attr("id",s.domId||s.id),p=d.insert("rect",":first-child"),v=d.insert("line"),b=d.insert("g").attr("class","label"),y=s.labelText.flat?s.labelText.flat():s.labelText;let T="";typeof y=="object"?T=y[0]:T=y,Xe.info("Label text abc79",T,y,typeof y=="object");const _=b.node().appendChild($2(T,s.labelStyle,!0,!0));let A={width:0,height:0};if(f1(qt().flowchart.htmlLabels)){const K=_.children[0],ee=Ir(_);A=K.getBoundingClientRect(),ee.attr("width",A.width),ee.attr("height",A.height)}Xe.info("Text 2",y);const P=y.slice(1,y.length);let R=_.getBBox();const F=b.node().appendChild($2(P.join?P.join("
"):P,s.labelStyle,!0,!0));if(f1(qt().flowchart.htmlLabels)){const K=F.children[0],ee=Ir(F);A=K.getBoundingClientRect(),ee.attr("width",A.width),ee.attr("height",A.height)}const j=s.padding/2;return Ir(F).attr("transform","translate( "+(A.width>R.width?0:(R.width-A.width)/2)+", "+(R.height+j+5)+")"),Ir(_).attr("transform","translate( "+(A.width{const{shapeSvg:u,bbox:d}=await g1(i,s,dm(s,void 0),!0),p=d.height+s.padding,v=d.width+p/4+s.padding,b=u.insert("rect",":first-child").attr("style",s.style).attr("rx",p/2).attr("ry",p/2).attr("x",-v/2).attr("y",-p/2).attr("width",v).attr("height",p);return Kh(s,b),s.intersect=function(y){return yh.rect(s,y)},u},fen=async(i,s)=>{const{shapeSvg:u,bbox:d,halfPadding:p}=await g1(i,s,dm(s,void 0),!0),v=u.insert("circle",":first-child");return v.attr("style",s.style).attr("rx",s.rx).attr("ry",s.ry).attr("r",d.width/2+p).attr("width",d.width+s.padding).attr("height",d.height+s.padding),Xe.info("Circle main"),Kh(s,v),s.intersect=function(b){return Xe.info("Circle intersect",s,d.width/2+p,b),yh.circle(s,d.width/2+p,b)},u},den=async(i,s)=>{const{shapeSvg:u,bbox:d,halfPadding:p}=await g1(i,s,dm(s,void 0),!0),v=5,b=u.insert("g",":first-child"),y=b.insert("circle"),T=b.insert("circle");return b.attr("class",s.class),y.attr("style",s.style).attr("rx",s.rx).attr("ry",s.ry).attr("r",d.width/2+p+v).attr("width",d.width+s.padding+v*2).attr("height",d.height+s.padding+v*2),T.attr("style",s.style).attr("rx",s.rx).attr("ry",s.ry).attr("r",d.width/2+p).attr("width",d.width+s.padding).attr("height",d.height+s.padding),Xe.info("DoubleCircle main"),Kh(s,y),s.intersect=function(_){return Xe.info("DoubleCircle intersect",s,d.width/2+p+v,_),yh.circle(s,d.width/2+p+v,_)},u},gen=async(i,s)=>{const{shapeSvg:u,bbox:d}=await g1(i,s,dm(s,void 0),!0),p=d.width+s.padding,v=d.height+s.padding,b=[{x:0,y:0},{x:p,y:0},{x:p,y:-v},{x:0,y:-v},{x:0,y:0},{x:-8,y:0},{x:p+8,y:0},{x:p+8,y:-v},{x:-8,y:-v},{x:-8,y:0}],y=r5(u,p,v,b);return y.attr("style",s.style),Kh(s,y),s.intersect=function(T){return yh.polygon(s,b,T)},u},pen=(i,s)=>{const u=i.insert("g").attr("class","node default").attr("id",s.domId||s.id),d=u.insert("circle",":first-child");return d.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),Kh(s,d),s.intersect=function(p){return yh.circle(s,7,p)},u},TUe=(i,s,u)=>{const d=i.insert("g").attr("class","node default").attr("id",s.domId||s.id);let p=70,v=10;u==="LR"&&(p=10,v=70);const b=d.append("rect").attr("x",-1*p/2).attr("y",-1*v/2).attr("width",p).attr("height",v).attr("class","fork-join");return Kh(s,b),s.height=s.height+s.padding/2,s.width=s.width+s.padding/2,s.intersect=function(y){return yh.rect(s,y)},d},CUe={rhombus:EUe,composite:cen,question:EUe,rect:oen,labelRect:uen,rectWithTitle:len,choice:QZt,circle:fen,doublecircle:den,stadium:hen,hexagon:JZt,block_arrow:ZZt,rect_left_inv_arrow:een,lean_right:ten,lean_left:nen,trapezoid:ren,inv_trapezoid:ien,rect_right_inv_arrow:sen,cylinder:aen,start:pen,end:(i,s)=>{const u=i.insert("g").attr("class","node default").attr("id",s.domId||s.id),d=u.insert("circle",":first-child"),p=u.insert("circle",":first-child");return p.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),d.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),Kh(s,p),s.intersect=function(v){return yh.circle(s,7,v)},u},note:WZt,subroutine:gen,fork:TUe,join:TUe,class_box:(i,s)=>{const u=s.padding/2,d=4,p=8;let v;s.classes?v="node "+s.classes:v="node default";const b=i.insert("g").attr("class",v).attr("id",s.domId||s.id),y=b.insert("rect",":first-child"),T=b.insert("line"),_=b.insert("line");let A=0,P=d;const R=b.insert("g").attr("class","label");let F=0;const j=s.classData.annotations&&s.classData.annotations[0],K=s.classData.annotations[0]?"«"+s.classData.annotations[0]+"»":"",ee=R.node().appendChild($2(K,s.labelStyle,!0,!0));let ie=ee.getBBox();if(f1(qt().flowchart.htmlLabels)){const de=ee.children[0],X=Ir(ee);ie=de.getBoundingClientRect(),X.attr("width",ie.width),X.attr("height",ie.height)}s.classData.annotations[0]&&(P+=ie.height+d,A+=ie.width);let oe=s.classData.label;s.classData.type!==void 0&&s.classData.type!==""&&(qt().flowchart.htmlLabels?oe+="<"+s.classData.type+">":oe+="<"+s.classData.type+">");const pe=R.node().appendChild($2(oe,s.labelStyle,!0,!0));Ir(pe).attr("class","classTitle");let be=pe.getBBox();if(f1(qt().flowchart.htmlLabels)){const de=pe.children[0],X=Ir(pe);be=de.getBoundingClientRect(),X.attr("width",be.width),X.attr("height",be.height)}P+=be.height+d,be.width>A&&(A=be.width);const ae=[];s.classData.members.forEach(de=>{const X=de.getDisplayDetails();let ge=X.displayText;qt().flowchart.htmlLabels&&(ge=ge.replace(//g,">"));const W=R.node().appendChild($2(ge,X.cssStyle?X.cssStyle:s.labelStyle,!0,!0));let xe=W.getBBox();if(f1(qt().flowchart.htmlLabels)){const U=W.children[0],Fe=Ir(W);xe=U.getBoundingClientRect(),Fe.attr("width",xe.width),Fe.attr("height",xe.height)}xe.width>A&&(A=xe.width),P+=xe.height+d,ae.push(W)}),P+=p;const ne=[];if(s.classData.methods.forEach(de=>{const X=de.getDisplayDetails();let ge=X.displayText;qt().flowchart.htmlLabels&&(ge=ge.replace(//g,">"));const W=R.node().appendChild($2(ge,X.cssStyle?X.cssStyle:s.labelStyle,!0,!0));let xe=W.getBBox();if(f1(qt().flowchart.htmlLabels)){const U=W.children[0],Fe=Ir(W);xe=U.getBoundingClientRect(),Fe.attr("width",xe.width),Fe.attr("height",xe.height)}xe.width>A&&(A=xe.width),P+=xe.height+d,ne.push(W)}),P+=p,j){let de=(A-ie.width)/2;Ir(ee).attr("transform","translate( "+(-1*A/2+de)+", "+-1*P/2+")"),F=ie.height+d}let se=(A-be.width)/2;return Ir(pe).attr("transform","translate( "+(-1*A/2+se)+", "+(-1*P/2+F)+")"),F+=be.height+d,T.attr("class","divider").attr("x1",-A/2-u).attr("x2",A/2+u).attr("y1",-P/2-u+p+F).attr("y2",-P/2-u+p+F),F+=p,ae.forEach(de=>{Ir(de).attr("transform","translate( "+-A/2+", "+(-1*P/2+F+p/2)+")");const X=de==null?void 0:de.getBBox();F+=((X==null?void 0:X.height)??0)+d}),F+=p,_.attr("class","divider").attr("x1",-A/2-u).attr("x2",A/2+u).attr("y1",-P/2-u+p+F).attr("y2",-P/2-u+p+F),F+=p,ne.forEach(de=>{Ir(de).attr("transform","translate( "+-A/2+", "+(-1*P/2+F)+")");const X=de==null?void 0:de.getBBox();F+=((X==null?void 0:X.height)??0)+d}),y.attr("style",s.style).attr("class","outer title-state").attr("x",-A/2-u).attr("y",-(P/2)-u).attr("width",A+s.padding).attr("height",P+s.padding),Kh(s,y),s.intersect=function(de){return yh.rect(s,de)},b}};let VD={};const tJ=async(i,s,u)=>{let d,p;if(s.link){let v;qt().securityLevel==="sandbox"?v="_top":s.linkTarget&&(v=s.linkTarget||"_blank"),d=i.insert("svg:a").attr("xlink:href",s.link).attr("target",v),p=await CUe[s.shape](d,s,u)}else p=await CUe[s.shape](i,s,u),d=p;return s.tooltip&&p.attr("title",s.tooltip),s.class&&p.attr("class","node default "+s.class),d.attr("data-node","true"),d.attr("data-id",s.id),VD[s.id]=d,s.haveCallback&&VD[s.id].attr("class",VD[s.id].attr("class")+" clickable"),d},ben=(i,s)=>{VD[s.id]=i},men=()=>{VD={}},$me=i=>{const s=VD[i.id];Xe.trace("Transforming node",i.diff,i,"translate("+(i.x-i.width/2-5)+", "+i.width/2+")");const u=8,d=i.diff||0;return i.clusterNode?s.attr("transform","translate("+(i.x+d-i.width/2)+", "+(i.y-i.height/2-u)+")"):s.attr("transform","translate("+i.x+", "+i.y+")"),d},nJ=({flowchart:i})=>{var p,v;const s=((p=i==null?void 0:i.subGraphTitleMargin)==null?void 0:p.top)??0,u=((v=i==null?void 0:i.subGraphTitleMargin)==null?void 0:v.bottom)??0,d=s+u;return{subGraphTitleTopMargin:s,subGraphTitleBottomMargin:u,subGraphTitleTotalMargin:d}},ven={rect:(i,s)=>{Xe.info("Creating subgraph rect for ",s.id,s);const u=qt(),d=i.insert("g").attr("class","cluster"+(s.class?" "+s.class:"")).attr("id",s.id),p=d.insert("rect",":first-child"),v=f1(u.flowchart.htmlLabels),b=d.insert("g").attr("class","cluster-label"),y=s.labelType==="markdown"?JQ(b,s.labelText,{style:s.labelStyle,useHtmlLabels:v}):b.node().appendChild($2(s.labelText,s.labelStyle,void 0,!0));let T=y.getBBox();if(f1(u.flowchart.htmlLabels)){const j=y.children[0],K=Ir(y);T=j.getBoundingClientRect(),K.attr("width",T.width),K.attr("height",T.height)}const _=0*s.padding,A=_/2,P=s.width<=T.width+_?T.width+_:s.width;s.width<=T.width+_?s.diff=(T.width-s.width)/2-s.padding/2:s.diff=-s.padding/2,Xe.trace("Data ",s,JSON.stringify(s)),p.attr("style",s.style).attr("rx",s.rx).attr("ry",s.ry).attr("x",s.x-P/2).attr("y",s.y-s.height/2-A).attr("width",P).attr("height",s.height+_);const{subGraphTitleTopMargin:R}=nJ(u);v?b.attr("transform",`translate(${s.x-T.width/2}, ${s.y-s.height/2+R})`):b.attr("transform",`translate(${s.x}, ${s.y-s.height/2+R})`);const F=p.node().getBBox();return s.width=F.width,s.height=F.height,s.intersect=function(j){return DR(s,j)},d},roundedWithTitle:(i,s)=>{const u=qt(),d=i.insert("g").attr("class",s.classes).attr("id",s.id),p=d.insert("rect",":first-child"),v=d.insert("g").attr("class","cluster-label"),b=d.append("rect"),y=v.node().appendChild($2(s.labelText,s.labelStyle,void 0,!0));let T=y.getBBox();if(f1(u.flowchart.htmlLabels)){const j=y.children[0],K=Ir(y);T=j.getBoundingClientRect(),K.attr("width",T.width),K.attr("height",T.height)}T=y.getBBox();const _=0*s.padding,A=_/2,P=s.width<=T.width+s.padding?T.width+s.padding:s.width;s.width<=T.width+s.padding?s.diff=(T.width+s.padding*0-s.width)/2:s.diff=-s.padding/2,p.attr("class","outer").attr("x",s.x-P/2-A).attr("y",s.y-s.height/2-A).attr("width",P+_).attr("height",s.height+_),b.attr("class","inner").attr("x",s.x-P/2-A).attr("y",s.y-s.height/2-A+T.height-1).attr("width",P+_).attr("height",s.height+_-T.height-3);const{subGraphTitleTopMargin:R}=nJ(u);v.attr("transform",`translate(${s.x-T.width/2}, ${s.y-s.height/2-s.padding/3+(f1(u.flowchart.htmlLabels)?5:3)+R})`);const F=p.node().getBBox();return s.height=F.height,s.intersect=function(j){return DR(s,j)},d},noteGroup:(i,s)=>{const u=i.insert("g").attr("class","note-cluster").attr("id",s.id),d=u.insert("rect",":first-child"),p=0*s.padding,v=p/2;d.attr("rx",s.rx).attr("ry",s.ry).attr("x",s.x-s.width/2-v).attr("y",s.y-s.height/2-v).attr("width",s.width+p).attr("height",s.height+p).attr("fill","none");const b=d.node().getBBox();return s.width=b.width,s.height=b.height,s.intersect=function(y){return DR(s,y)},u},divider:(i,s)=>{const u=i.insert("g").attr("class",s.classes).attr("id",s.id),d=u.insert("rect",":first-child"),p=0*s.padding,v=p/2;d.attr("class","divider").attr("x",s.x-s.width/2-v).attr("y",s.y-s.height/2).attr("width",s.width+p).attr("height",s.height+p);const b=d.node().getBBox();return s.width=b.width,s.height=b.height,s.diff=-s.padding/2,s.intersect=function(y){return DR(s,y)},u}};let SUe={};const wen=(i,s)=>{Xe.trace("Inserting cluster");const u=s.shape||"rect";SUe[s.id]=ven[u](i,s)},yen=()=>{SUe={}},P9={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:5.3};function rJ(i,s){if(i===void 0||s===void 0)return{angle:0,deltaX:0,deltaY:0};i=iJ(i),s=iJ(s);const[u,d]=[i.x,i.y],[p,v]=[s.x,s.y],b=p-u,y=v-d;return{angle:Math.atan(y/b),deltaX:b,deltaY:y}}const iJ=i=>Array.isArray(i)?{x:i[0],y:i[1]}:i,_Ue=i=>({x:function(s,u,d){let p=0;if(u===0&&Object.hasOwn(P9,i.arrowTypeStart)){const{angle:v,deltaX:b}=rJ(d[0],d[1]);p=P9[i.arrowTypeStart]*Math.cos(v)*(b>=0?1:-1)}else if(u===d.length-1&&Object.hasOwn(P9,i.arrowTypeEnd)){const{angle:v,deltaX:b}=rJ(d[d.length-1],d[d.length-2]);p=P9[i.arrowTypeEnd]*Math.cos(v)*(b>=0?1:-1)}return iJ(s).x+p},y:function(s,u,d){let p=0;if(u===0&&Object.hasOwn(P9,i.arrowTypeStart)){const{angle:v,deltaY:b}=rJ(d[0],d[1]);p=P9[i.arrowTypeStart]*Math.abs(Math.sin(v))*(b>=0?1:-1)}else if(u===d.length-1&&Object.hasOwn(P9,i.arrowTypeEnd)){const{angle:v,deltaY:b}=rJ(d[d.length-1],d[d.length-2]);p=P9[i.arrowTypeEnd]*Math.abs(Math.sin(v))*(b>=0?1:-1)}return iJ(s).y+p}}),AUe=(i,s,u,d,p)=>{s.arrowTypeStart&&LUe(i,"start",s.arrowTypeStart,u,d,p),s.arrowTypeEnd&&LUe(i,"end",s.arrowTypeEnd,u,d,p)},xen={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},LUe=(i,s,u,d,p,v)=>{const b=xen[u];if(!b){Xe.warn(`Unknown arrow type: ${u}`);return}const y=s==="start"?"Start":"End";i.attr(`marker-${s}`,`url(${d}#${p}_${v}-${b}${y})`)};let sJ={},Vd={};const ken=()=>{sJ={},Vd={}},zme=(i,s)=>{const u=f1(qt().flowchart.htmlLabels),d=s.labelType==="markdown"?JQ(i,s.label,{style:s.labelStyle,useHtmlLabels:u,addSvgBackground:!0}):$2(s.label,s.labelStyle),p=i.insert("g").attr("class","edgeLabel"),v=p.insert("g").attr("class","label");v.node().appendChild(d);let b=d.getBBox();if(u){const T=d.children[0],_=Ir(d);b=T.getBoundingClientRect(),_.attr("width",b.width),_.attr("height",b.height)}v.attr("transform","translate("+-b.width/2+", "+-b.height/2+")"),sJ[s.id]=p,s.width=b.width,s.height=b.height;let y;if(s.startLabelLeft){const T=$2(s.startLabelLeft,s.labelStyle),_=i.insert("g").attr("class","edgeTerminals"),A=_.insert("g").attr("class","inner");y=A.node().appendChild(T);const P=T.getBBox();A.attr("transform","translate("+-P.width/2+", "+-P.height/2+")"),Vd[s.id]||(Vd[s.id]={}),Vd[s.id].startLeft=_,aJ(y,s.startLabelLeft)}if(s.startLabelRight){const T=$2(s.startLabelRight,s.labelStyle),_=i.insert("g").attr("class","edgeTerminals"),A=_.insert("g").attr("class","inner");y=_.node().appendChild(T),A.node().appendChild(T);const P=T.getBBox();A.attr("transform","translate("+-P.width/2+", "+-P.height/2+")"),Vd[s.id]||(Vd[s.id]={}),Vd[s.id].startRight=_,aJ(y,s.startLabelRight)}if(s.endLabelLeft){const T=$2(s.endLabelLeft,s.labelStyle),_=i.insert("g").attr("class","edgeTerminals"),A=_.insert("g").attr("class","inner");y=A.node().appendChild(T);const P=T.getBBox();A.attr("transform","translate("+-P.width/2+", "+-P.height/2+")"),_.node().appendChild(T),Vd[s.id]||(Vd[s.id]={}),Vd[s.id].endLeft=_,aJ(y,s.endLabelLeft)}if(s.endLabelRight){const T=$2(s.endLabelRight,s.labelStyle),_=i.insert("g").attr("class","edgeTerminals"),A=_.insert("g").attr("class","inner");y=A.node().appendChild(T);const P=T.getBBox();A.attr("transform","translate("+-P.width/2+", "+-P.height/2+")"),_.node().appendChild(T),Vd[s.id]||(Vd[s.id]={}),Vd[s.id].endRight=_,aJ(y,s.endLabelRight)}return d};function aJ(i,s){qt().flowchart.htmlLabels&&i&&(i.style.width=s.length*9+"px",i.style.height="12px")}const MUe=(i,s)=>{Xe.debug("Moving label abc88 ",i.id,i.label,sJ[i.id],s);let u=s.updatedPath?s.updatedPath:s.originalPath;const d=qt(),{subGraphTitleTotalMargin:p}=nJ(d);if(i.label){const v=sJ[i.id];let b=i.x,y=i.y;if(u){const T=Ao.calcLabelPosition(u);Xe.debug("Moving label "+i.label+" from (",b,",",y,") to (",T.x,",",T.y,") abc88"),s.updatedPath&&(b=T.x,y=T.y)}v.attr("transform",`translate(${b}, ${y+p/2})`)}if(i.startLabelLeft){const v=Vd[i.id].startLeft;let b=i.x,y=i.y;if(u){const T=Ao.calcTerminalLabelPosition(i.arrowTypeStart?10:0,"start_left",u);b=T.x,y=T.y}v.attr("transform",`translate(${b}, ${y})`)}if(i.startLabelRight){const v=Vd[i.id].startRight;let b=i.x,y=i.y;if(u){const T=Ao.calcTerminalLabelPosition(i.arrowTypeStart?10:0,"start_right",u);b=T.x,y=T.y}v.attr("transform",`translate(${b}, ${y})`)}if(i.endLabelLeft){const v=Vd[i.id].endLeft;let b=i.x,y=i.y;if(u){const T=Ao.calcTerminalLabelPosition(i.arrowTypeEnd?10:0,"end_left",u);b=T.x,y=T.y}v.attr("transform",`translate(${b}, ${y})`)}if(i.endLabelRight){const v=Vd[i.id].endRight;let b=i.x,y=i.y;if(u){const T=Ao.calcTerminalLabelPosition(i.arrowTypeEnd?10:0,"end_right",u);b=T.x,y=T.y}v.attr("transform",`translate(${b}, ${y})`)}},Een=(i,s)=>{const u=i.x,d=i.y,p=Math.abs(s.x-u),v=Math.abs(s.y-d),b=i.width/2,y=i.height/2;return p>=b||v>=y},Ten=(i,s,u)=>{Xe.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(s)} + insidePoint : ${JSON.stringify(u)} + node : x:${i.x} y:${i.y} w:${i.width} h:${i.height}`);const d=i.x,p=i.y,v=Math.abs(d-u.x),b=i.width/2;let y=u.xMath.abs(d-s.x)*T){let P=u.y{Xe.debug("abc88 cutPathAtIntersect",i,s);let u=[],d=i[0],p=!1;return i.forEach(v=>{if(!Een(s,v)&&!p){const b=Ten(s,d,v);let y=!1;u.forEach(T=>{y=y||T.x===b.x&&T.y===b.y}),u.some(T=>T.x===b.x&&T.y===b.y)||u.push(b),p=!0}else d=v,p||u.push(v)}),u},IUe=function(i,s,u,d,p,v,b){let y=u.points;Xe.debug("abc88 InsertEdge: edge=",u,"e=",s);let T=!1;const _=v.node(s.v);var A=v.node(s.w);A!=null&&A.intersect&&(_!=null&&_.intersect)&&(y=y.slice(1,u.points.length-1),y.unshift(_.intersect(y[0])),y.push(A.intersect(y[y.length-1]))),u.toCluster&&(Xe.debug("to cluster abc88",d[u.toCluster]),y=DUe(u.points,d[u.toCluster].node),T=!0),u.fromCluster&&(Xe.debug("from cluster abc88",d[u.fromCluster]),y=DUe(y.reverse(),d[u.fromCluster].node).reverse(),T=!0);const P=y.filter(be=>!Number.isNaN(be.y));let R=FF;u.curve&&(p==="graph"||p==="flowchart")&&(R=u.curve);const{x:F,y:j}=_Ue(u),K=k7().x(F).y(j).curve(R);let ee;switch(u.thickness){case"normal":ee="edge-thickness-normal";break;case"thick":ee="edge-thickness-thick";break;case"invisible":ee="edge-thickness-thick";break;default:ee=""}switch(u.pattern){case"solid":ee+=" edge-pattern-solid";break;case"dotted":ee+=" edge-pattern-dotted";break;case"dashed":ee+=" edge-pattern-dashed";break}const ie=i.append("path").attr("d",K(P)).attr("id",u.id).attr("class"," "+ee+(u.classes?" "+u.classes:"")).attr("style",u.style);let oe="";(qt().flowchart.arrowMarkerAbsolute||qt().state.arrowMarkerAbsolute)&&(oe=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,oe=oe.replace(/\(/g,"\\("),oe=oe.replace(/\)/g,"\\)")),AUe(ie,u,oe,b,p);let pe={};return T&&(pe.updatedPath=y),pe.originalPath=u.points,pe},OUe=async(i,s,u,d,p,v)=>{Xe.info("Graph in recursive render: XXX",q7(s),p);const b=s.graph().rankdir;Xe.trace("Dir in recursive render - dir:",b);const y=i.insert("g").attr("class","root");s.nodes()?Xe.info("Recursive render XXX",s.nodes()):Xe.info("No nodes found for",s),s.edges().length>0&&Xe.trace("Recursive edges",s.edge(s.edges()[0]));const T=y.insert("g").attr("class","clusters"),_=y.insert("g").attr("class","edgePaths"),A=y.insert("g").attr("class","edgeLabels"),P=y.insert("g").attr("class","nodes");await Promise.all(s.nodes().map(async function(j){const K=s.node(j);if(p!==void 0){const ee=JSON.parse(JSON.stringify(p.clusterData));Xe.info("Setting data for cluster XXX (",j,") ",ee,p),s.setNode(p.id,ee),s.parent(j)||(Xe.trace("Setting parent",j,p.id),s.setParent(j,p.id,ee))}if(Xe.info("(Insert) Node XXX"+j+": "+JSON.stringify(s.node(j))),K&&K.clusterNode){Xe.info("Cluster identified",j,K.width,s.node(j));const ee=await OUe(P,K.graph,u,d,s.node(j),v),ie=ee.elem;Kh(K,ie),K.diff=ee.diff||0,Xe.info("Node bounds (abc123)",j,K,K.width,K.x,K.y),ben(ie,K),Xe.warn("Recursive render complete ",ie,K)}else s.children(j).length>0?(Xe.info("Cluster - the non recursive path XXX",j,K.id,K,s),Xe.info(MR(K.id,s)),Mo[K.id]={id:MR(K.id,s),node:K}):(Xe.info("Node - the non recursive path",j,K.id,K),await tJ(P,s.node(j),b))})),s.edges().forEach(function(j){const K=s.edge(j.v,j.w,j.name);Xe.info("Edge "+j.v+" -> "+j.w+": "+JSON.stringify(j)),Xe.info("Edge "+j.v+" -> "+j.w+": ",j," ",JSON.stringify(s.edge(j))),Xe.info("Fix",Mo,"ids:",j.v,j.w,"Translating: ",Mo[j.v],Mo[j.w]),zme(A,K)}),s.edges().forEach(function(j){Xe.info("Edge "+j.v+" -> "+j.w+": "+JSON.stringify(j))}),Xe.info("#############################################"),Xe.info("### Layout ###"),Xe.info("#############################################"),Xe.info(s),qD(s),Xe.info("Graph after layout:",q7(s));let R=0;const{subGraphTitleTotalMargin:F}=nJ(v);return HZt(s).forEach(function(j){const K=s.node(j);Xe.info("Position "+j+": "+JSON.stringify(s.node(j))),Xe.info("Position "+j+": ("+K.x,","+K.y,") width: ",K.width," height: ",K.height),K&&K.clusterNode?(K.y+=F,$me(K)):s.children(j).length>0?(K.height+=F,wen(T,K),Mo[K.id].node=K):(K.y+=F/2,$me(K))}),s.edges().forEach(function(j){const K=s.edge(j);Xe.info("Edge "+j.v+" -> "+j.w+": "+JSON.stringify(K),K),K.points.forEach(ie=>ie.y+=F/2);const ee=IUe(_,j,K,Mo,u,s,d);MUe(K,ee)}),s.nodes().forEach(function(j){const K=s.node(j);Xe.info(j,K.type,K.diff),K.type==="group"&&(R=K.diff)}),{elem:y,diff:R}},qme=async(i,s,u,d,p)=>{Sme(i,u,d,p),men(),ken(),yen(),$Zt(),Xe.warn("Graph at first:",JSON.stringify(q7(s))),qZt(s),Xe.warn("Graph after:",JSON.stringify(q7(s)));const v=qt();await OUe(i,s,d,p,void 0,v)},NUe={},Cen=function(i){const s=Object.keys(i);for(const u of s)NUe[u]=i[u]},PUe=async function(i,s,u,d,p,v){const b=d.select(`[id="${u}"]`),y=Object.keys(i);for(const T of y){const _=i[T];let A="default";_.classes.length>0&&(A=_.classes.join(" ")),A=A+" flowchart-label";const P=om(_.styles);let R=_.text!==void 0?_.text:_.id,F;if(Xe.info("vertex",_,_.labelType),_.labelType==="markdown")Xe.info("vertex",_,_.labelType);else if(f1(qt().flowchart.htmlLabels))F=vme(b,{label:R}).node(),F.parentNode.removeChild(F);else{const ie=p.createElementNS("http://www.w3.org/2000/svg","text");ie.setAttribute("style",P.labelStyle.replace("color:","fill:"));const oe=R.split(ci.lineBreakRegex);for(const pe of oe){const be=p.createElementNS("http://www.w3.org/2000/svg","tspan");be.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),be.setAttribute("dy","1em"),be.setAttribute("x","1"),be.textContent=pe,ie.appendChild(be)}F=ie}let j=0,K="";switch(_.type){case"round":j=5,K="rect";break;case"square":K="rect";break;case"diamond":K="question";break;case"hexagon":K="hexagon";break;case"odd":K="rect_left_inv_arrow";break;case"lean_right":K="lean_right";break;case"lean_left":K="lean_left";break;case"trapezoid":K="trapezoid";break;case"inv_trapezoid":K="inv_trapezoid";break;case"odd_right":K="rect_left_inv_arrow";break;case"circle":K="circle";break;case"ellipse":K="ellipse";break;case"stadium":K="stadium";break;case"subroutine":K="subroutine";break;case"cylinder":K="cylinder";break;case"group":K="rect";break;case"doublecircle":K="doublecircle";break;default:K="rect"}const ee=await CC(R,qt());s.setNode(_.id,{labelStyle:P.labelStyle,shape:K,labelText:ee,labelType:_.labelType,rx:j,ry:j,class:A,style:P.style,id:_.id,link:_.link,linkTarget:_.linkTarget,tooltip:v.db.getTooltip(_.id)||"",domId:v.db.lookUpDomId(_.id),haveCallback:_.haveCallback,width:_.type==="group"?500:void 0,dir:_.dir,type:_.type,props:_.props,padding:qt().flowchart.padding}),Xe.info("setNode",{labelStyle:P.labelStyle,labelType:_.labelType,shape:K,labelText:ee,rx:j,ry:j,class:A,style:P.style,id:_.id,domId:v.db.lookUpDomId(_.id),width:_.type==="group"?500:void 0,type:_.type,dir:_.dir,props:_.props,padding:qt().flowchart.padding})}},BUe=async function(i,s,u){Xe.info("abc78 edges = ",i);let d=0,p={},v,b;if(i.defaultStyle!==void 0){const y=om(i.defaultStyle);v=y.style,b=y.labelStyle}for(const y of i){d++;const T="L-"+y.start+"-"+y.end;p[T]===void 0?(p[T]=0,Xe.info("abc78 new entry",T,p[T])):(p[T]++,Xe.info("abc78 new entry",T,p[T]));let _=T+"-"+p[T];Xe.info("abc78 new link id to be used is",T,_,p[T]);const A="LS-"+y.start,P="LE-"+y.end,R={style:"",labelStyle:""};switch(R.minlen=y.length||1,y.type==="arrow_open"?R.arrowhead="none":R.arrowhead="normal",R.arrowTypeStart="arrow_open",R.arrowTypeEnd="arrow_open",y.type){case"double_arrow_cross":R.arrowTypeStart="arrow_cross";case"arrow_cross":R.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":R.arrowTypeStart="arrow_point";case"arrow_point":R.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":R.arrowTypeStart="arrow_circle";case"arrow_circle":R.arrowTypeEnd="arrow_circle";break}let F="",j="";switch(y.stroke){case"normal":F="fill:none;",v!==void 0&&(F=v),b!==void 0&&(j=b),R.thickness="normal",R.pattern="solid";break;case"dotted":R.thickness="normal",R.pattern="dotted",R.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":R.thickness="thick",R.pattern="solid",R.style="stroke-width: 3.5px;fill:none;";break;case"invisible":R.thickness="invisible",R.pattern="solid",R.style="stroke-width: 0;fill:none;";break}if(y.style!==void 0){const K=om(y.style);F=K.style,j=K.labelStyle}R.style=R.style+=F,R.labelStyle=R.labelStyle+=j,y.interpolate!==void 0?R.curve=Ov(y.interpolate,kp):i.defaultInterpolate!==void 0?R.curve=Ov(i.defaultInterpolate,kp):R.curve=Ov(NUe.curve,kp),y.text===void 0?y.style!==void 0&&(R.arrowheadStyle="fill: #333"):(R.arrowheadStyle="fill: #333",R.labelpos="c"),R.labelType=y.labelType,R.label=await CC(y.text.replace(ci.lineBreakRegex,` +`),qt()),y.style===void 0&&(R.style=R.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),R.labelStyle=R.labelStyle.replace("color:","fill:"),R.id=_,R.classes="flowchart-link "+A+" "+P,s.setEdge(y.start,y.end,R,d)}},Hme={setConf:Cen,addVertices:PUe,addEdges:BUe,getClasses:function(i,s){return s.db.getClasses()},draw:async function(i,s,u,d){Xe.info("Drawing flowchart");let p=d.db.getDirection();p===void 0&&(p="TD");const{securityLevel:v,flowchart:b}=qt(),y=b.nodeSpacing||50,T=b.rankSpacing||50;let _;v==="sandbox"&&(_=Ir("#i"+s));const A=Ir(v==="sandbox"?_.nodes()[0].contentDocument.body:"body"),P=v==="sandbox"?_.nodes()[0].contentDocument:document,R=new B0({multigraph:!0,compound:!0}).setGraph({rankdir:p,nodesep:y,ranksep:T,marginx:0,marginy:0}).setDefaultEdgeLabel(function(){return{}});let F;const j=d.db.getSubGraphs();Xe.info("Subgraphs - ",j);for(let ae=j.length-1;ae>=0;ae--)F=j[ae],Xe.info("Subgraph - ",F),d.db.addVertex(F.id,{text:F.title,type:F.labelType},"group",void 0,F.classes,F.dir);const K=d.db.getVertices(),ee=d.db.getEdges();Xe.info("Edges",ee);let ie=0;for(ie=j.length-1;ie>=0;ie--){F=j[ie],_Be("cluster").append("text");for(let ae=0;ae{const u=ARe,d=u(i,"r"),p=u(i,"g"),v=u(i,"b");return SC(d,p,v,s)},FUe=i=>`.label { font-family: ${i.fontFamily}; color: ${i.nodeTextColor||i.textColor}; } @@ -145,6 +413,12 @@ Expecting `+T3.join(", ")+", got '"+(this.terminals_[f1]||f1)+"'":wm="Parse erro // text-anchor: start; // } + .node .katex path { + fill: #000; + stroke: #000; + stroke-width: 1px; + } + .node .label { text-align: center; } @@ -178,7 +452,7 @@ Expecting `+T3.join(", ")+", got '"+(this.terminals_[f1]||f1)+"'":wm="Parse erro /* For html labels only */ .labelBkg { - background-color: ${oze(i.edgeLabelBackground,.5)}; + background-color: ${Sen(i.edgeLabelBackground,.5)}; // background-color: } @@ -218,12 +492,12 @@ Expecting `+T3.join(", ")+", got '"+(this.terminals_[f1]||f1)+"'":wm="Parse erro font-size: 18px; fill: ${i.textColor}; } -`,cze=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Hdt,db:wT,renderer:B0t,styles:IBt,init:i=>{i.flowchart||(i.flowchart={}),i.flowchart.arrowMarkerAbsolute=i.arrowMarkerAbsolute,hRe.setConf(i.flowchart),wT.clear(),wT.setGen("gen-1")}}},Symbol.toStringTag,{value:"Module"})),uze=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Hdt,db:wT,renderer:B0t,styles:IBt,init:i=>{i.flowchart||(i.flowchart={}),i.flowchart.arrowMarkerAbsolute=i.arrowMarkerAbsolute,cAe({flowchart:{arrowMarkerAbsolute:i.arrowMarkerAbsolute}}),B0t.setConf(i.flowchart),wT.clear(),wT.setGen("gen-2")}}},Symbol.toStringTag,{value:"Module"}));var R0t=function(){var i=function(vt,X,pt,U){for(pt=pt||{},U=vt.length;U--;pt[vt[U]]=X);return pt},a=[6,8,10,20,22,24,26,27,28],f=[1,10],p=[1,11],w=[1,12],m=[1,13],b=[1,14],E=[1,15],_=[1,21],A=[1,22],I=[1,23],B=[1,24],N=[1,25],R=[6,8,10,13,15,18,19,20,22,24,26,27,28,41,42,43,44,45],z=[1,34],W=[27,28,46,47],et=[41,42,43,44,45],st=[17,34],at=[1,54],bt=[1,53],mt=[17,34,36,38],yt={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,":":13,role:14,BLOCK_START:15,attributes:16,BLOCK_STOP:17,SQS:18,SQE:19,title:20,title_value:21,acc_title:22,acc_title_value:23,acc_descr:24,acc_descr_value:25,acc_descr_multiline_value:26,ALPHANUM:27,ENTITY_NAME:28,attribute:29,attributeType:30,attributeName:31,attributeKeyTypeList:32,attributeComment:33,ATTRIBUTE_WORD:34,attributeKeyType:35,COMMA:36,ATTRIBUTE_KEY:37,COMMENT:38,cardinality:39,relType:40,ZERO_OR_ONE:41,ZERO_OR_MORE:42,ONE_OR_MORE:43,ONLY_ONE:44,MD_PARENT:45,NON_IDENTIFYING:46,IDENTIFYING:47,WORD:48,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:":",15:"BLOCK_START",17:"BLOCK_STOP",18:"SQS",19:"SQE",20:"title",21:"title_value",22:"acc_title",23:"acc_title_value",24:"acc_descr",25:"acc_descr_value",26:"acc_descr_multiline_value",27:"ALPHANUM",28:"ENTITY_NAME",34:"ATTRIBUTE_WORD",36:"COMMA",37:"ATTRIBUTE_KEY",38:"COMMENT",41:"ZERO_OR_ONE",42:"ZERO_OR_MORE",43:"ONE_OR_MORE",44:"ONLY_ONE",45:"MD_PARENT",46:"NON_IDENTIFYING",47:"IDENTIFYING",48:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,4],[9,3],[9,1],[9,7],[9,6],[9,4],[9,2],[9,2],[9,2],[9,1],[11,1],[11,1],[16,1],[16,2],[29,2],[29,3],[29,3],[29,4],[30,1],[31,1],[32,1],[32,3],[35,1],[33,1],[12,3],[39,1],[39,1],[39,1],[39,1],[39,1],[40,1],[40,1],[14,1],[14,1],[14,1]],performAction:function(X,pt,U,Tt,nt,It,Ot){var Bt=It.length-1;switch(nt){case 1:break;case 2:this.$=[];break;case 3:It[Bt-1].push(It[Bt]),this.$=It[Bt-1];break;case 4:case 5:this.$=It[Bt];break;case 6:case 7:this.$=[];break;case 8:Tt.addEntity(It[Bt-4]),Tt.addEntity(It[Bt-2]),Tt.addRelationship(It[Bt-4],It[Bt],It[Bt-2],It[Bt-3]);break;case 9:Tt.addEntity(It[Bt-3]),Tt.addAttributes(It[Bt-3],It[Bt-1]);break;case 10:Tt.addEntity(It[Bt-2]);break;case 11:Tt.addEntity(It[Bt]);break;case 12:Tt.addEntity(It[Bt-6],It[Bt-4]),Tt.addAttributes(It[Bt-6],It[Bt-1]);break;case 13:Tt.addEntity(It[Bt-5],It[Bt-3]);break;case 14:Tt.addEntity(It[Bt-3],It[Bt-1]);break;case 15:case 16:this.$=It[Bt].trim(),Tt.setAccTitle(this.$);break;case 17:case 18:this.$=It[Bt].trim(),Tt.setAccDescription(this.$);break;case 19:case 43:this.$=It[Bt];break;case 20:case 41:case 42:this.$=It[Bt].replace(/"/g,"");break;case 21:case 29:this.$=[It[Bt]];break;case 22:It[Bt].push(It[Bt-1]),this.$=It[Bt];break;case 23:this.$={attributeType:It[Bt-1],attributeName:It[Bt]};break;case 24:this.$={attributeType:It[Bt-2],attributeName:It[Bt-1],attributeKeyTypeList:It[Bt]};break;case 25:this.$={attributeType:It[Bt-2],attributeName:It[Bt-1],attributeComment:It[Bt]};break;case 26:this.$={attributeType:It[Bt-3],attributeName:It[Bt-2],attributeKeyTypeList:It[Bt-1],attributeComment:It[Bt]};break;case 27:case 28:case 31:this.$=It[Bt];break;case 30:It[Bt-2].push(It[Bt]),this.$=It[Bt-2];break;case 32:this.$=It[Bt].replace(/"/g,"");break;case 33:this.$={cardA:It[Bt],relType:It[Bt-1],cardB:It[Bt-2]};break;case 34:this.$=Tt.Cardinality.ZERO_OR_ONE;break;case 35:this.$=Tt.Cardinality.ZERO_OR_MORE;break;case 36:this.$=Tt.Cardinality.ONE_OR_MORE;break;case 37:this.$=Tt.Cardinality.ONLY_ONE;break;case 38:this.$=Tt.Cardinality.MD_PARENT;break;case 39:this.$=Tt.Identification.NON_IDENTIFYING;break;case 40:this.$=Tt.Identification.IDENTIFYING;break}},table:[{3:1,4:[1,2]},{1:[3]},i(a,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,20:f,22:p,24:w,26:m,27:b,28:E},i(a,[2,7],{1:[2,1]}),i(a,[2,3]),{9:16,11:9,20:f,22:p,24:w,26:m,27:b,28:E},i(a,[2,5]),i(a,[2,6]),i(a,[2,11],{12:17,39:20,15:[1,18],18:[1,19],41:_,42:A,43:I,44:B,45:N}),{21:[1,26]},{23:[1,27]},{25:[1,28]},i(a,[2,18]),i(R,[2,19]),i(R,[2,20]),i(a,[2,4]),{11:29,27:b,28:E},{16:30,17:[1,31],29:32,30:33,34:z},{11:35,27:b,28:E},{40:36,46:[1,37],47:[1,38]},i(W,[2,34]),i(W,[2,35]),i(W,[2,36]),i(W,[2,37]),i(W,[2,38]),i(a,[2,15]),i(a,[2,16]),i(a,[2,17]),{13:[1,39]},{17:[1,40]},i(a,[2,10]),{16:41,17:[2,21],29:32,30:33,34:z},{31:42,34:[1,43]},{34:[2,27]},{19:[1,44]},{39:45,41:_,42:A,43:I,44:B,45:N},i(et,[2,39]),i(et,[2,40]),{14:46,27:[1,49],28:[1,48],48:[1,47]},i(a,[2,9]),{17:[2,22]},i(st,[2,23],{32:50,33:51,35:52,37:at,38:bt}),i([17,34,37,38],[2,28]),i(a,[2,14],{15:[1,55]}),i([27,28],[2,33]),i(a,[2,8]),i(a,[2,41]),i(a,[2,42]),i(a,[2,43]),i(st,[2,24],{33:56,36:[1,57],38:bt}),i(st,[2,25]),i(mt,[2,29]),i(st,[2,32]),i(mt,[2,31]),{16:58,17:[1,59],29:32,30:33,34:z},i(st,[2,26]),{35:60,37:at},{17:[1,61]},i(a,[2,13]),i(mt,[2,30]),i(a,[2,12])],defaultActions:{34:[2,27],41:[2,22]},parseError:function(X,pt){if(pt.recoverable)this.trace(X);else{var U=new Error(X);throw U.hash=pt,U}},parse:function(X){var pt=this,U=[0],Tt=[],nt=[null],It=[],Ot=this.table,Bt="",Et=0,Z=0,Ct=2,xt=1,Ht=It.slice.call(arguments,1),Le=Object.create(this.lexer),Ft={yy:{}};for(var gn in this.yy)Object.prototype.hasOwnProperty.call(this.yy,gn)&&(Ft.yy[gn]=this.yy[gn]);Le.setInput(X,Ft.yy),Ft.yy.lexer=Le,Ft.yy.parser=this,typeof Le.yylloc>"u"&&(Le.yylloc={});var Se=Le.yylloc;It.push(Se);var me=Le.options&&Le.options.ranges;typeof Ft.yy.parseError=="function"?this.parseError=Ft.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ve(){var on;return on=Tt.pop()||Le.lex()||xt,typeof on!="number"&&(on instanceof Array&&(Tt=on,on=Tt.pop()),on=pt.symbols_[on]||on),on}for(var Ye,ce,ke,zt,re={},se,Pe,te,Me;;){if(ce=U[U.length-1],this.defaultActions[ce]?ke=this.defaultActions[ce]:((Ye===null||typeof Ye>"u")&&(Ye=Ve()),ke=Ot[ce]&&Ot[ce][Ye]),typeof ke>"u"||!ke.length||!ke[0]){var de="";Me=[];for(se in Ot[ce])this.terminals_[se]&&se>Ct&&Me.push("'"+this.terminals_[se]+"'");Le.showPosition?de="Parse error on line "+(Et+1)+`: -`+Le.showPosition()+` -Expecting `+Me.join(", ")+", got '"+(this.terminals_[Ye]||Ye)+"'":de="Parse error on line "+(Et+1)+": Unexpected "+(Ye==xt?"end of input":"'"+(this.terminals_[Ye]||Ye)+"'"),this.parseError(de,{text:Le.match,token:this.terminals_[Ye]||Ye,line:Le.yylineno,loc:Se,expected:Me})}if(ke[0]instanceof Array&&ke.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ce+", token: "+Ye);switch(ke[0]){case 1:U.push(Ye),nt.push(Le.yytext),It.push(Le.yylloc),U.push(ke[1]),Ye=null,Z=Le.yyleng,Bt=Le.yytext,Et=Le.yylineno,Se=Le.yylloc;break;case 2:if(Pe=this.productions_[ke[1]][1],re.$=nt[nt.length-Pe],re._$={first_line:It[It.length-(Pe||1)].first_line,last_line:It[It.length-1].last_line,first_column:It[It.length-(Pe||1)].first_column,last_column:It[It.length-1].last_column},me&&(re._$.range=[It[It.length-(Pe||1)].range[0],It[It.length-1].range[1]]),zt=this.performAction.apply(re,[Bt,Z,Et,Ft.yy,ke[1],nt,It].concat(Ht)),typeof zt<"u")return zt;Pe&&(U=U.slice(0,-1*Pe*2),nt=nt.slice(0,-1*Pe),It=It.slice(0,-1*Pe)),U.push(this.productions_[ke[1]][0]),nt.push(re.$),It.push(re._$),te=Ot[U[U.length-2]][U[U.length-1]],U.push(te);break;case 3:return!0}}return!0}},ft=function(){var vt={EOF:1,parseError:function(pt,U){if(this.yy.parser)this.yy.parser.parseError(pt,U);else throw new Error(pt)},setInput:function(X,pt){return this.yy=pt||this.yy||{},this._input=X,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var X=this._input[0];this.yytext+=X,this.yyleng++,this.offset++,this.match+=X,this.matched+=X;var pt=X.match(/(?:\r\n?|\n).*/g);return pt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),X},unput:function(X){var pt=X.length,U=X.split(/(?:\r\n?|\n)/g);this._input=X+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-pt),this.offset-=pt;var Tt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),U.length-1&&(this.yylineno-=U.length-1);var nt=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:U?(U.length===Tt.length?this.yylloc.first_column:0)+Tt[Tt.length-U.length].length-U[0].length:this.yylloc.first_column-pt},this.options.ranges&&(this.yylloc.range=[nt[0],nt[0]+this.yyleng-pt]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(X){this.unput(this.match.slice(X))},pastInput:function(){var X=this.matched.substr(0,this.matched.length-this.match.length);return(X.length>20?"...":"")+X.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var X=this.match;return X.length<20&&(X+=this._input.substr(0,20-X.length)),(X.substr(0,20)+(X.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var X=this.pastInput(),pt=new Array(X.length+1).join("-");return X+this.upcomingInput()+` -`+pt+"^"},test_match:function(X,pt){var U,Tt,nt;if(this.options.backtrack_lexer&&(nt={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(nt.yylloc.range=this.yylloc.range.slice(0))),Tt=X[0].match(/(?:\r\n?|\n).*/g),Tt&&(this.yylineno+=Tt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Tt?Tt[Tt.length-1].length-Tt[Tt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+X[0].length},this.yytext+=X[0],this.match+=X[0],this.matches=X,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(X[0].length),this.matched+=X[0],U=this.performAction.call(this,this.yy,this,pt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),U)return U;if(this._backtrack){for(var It in nt)this[It]=nt[It];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var X,pt,U,Tt;this._more||(this.yytext="",this.match="");for(var nt=this._currentRules(),It=0;Itpt[0].length)){if(pt=U,Tt=It,this.options.backtrack_lexer){if(X=this.test_match(U,nt[It]),X!==!1)return X;if(this._backtrack){pt=!1;continue}else return!1}else if(!this.options.flex)break}return pt?(X=this.test_match(pt,nt[Tt]),X!==!1?X:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var pt=this.next();return pt||this.lex()},begin:function(pt){this.conditionStack.push(pt)},popState:function(){var pt=this.conditionStack.length-1;return pt>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(pt){return pt=this.conditionStack.length-1-Math.abs(pt||0),pt>=0?this.conditionStack[pt]:"INITIAL"},pushState:function(pt){this.begin(pt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(pt,U,Tt,nt){switch(Tt){case 0:return this.begin("acc_title"),22;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),24;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 10;case 8:break;case 9:return 8;case 10:return 28;case 11:return 48;case 12:return 4;case 13:return this.begin("block"),15;case 14:return 36;case 15:break;case 16:return 37;case 17:return 34;case 18:return 34;case 19:return 38;case 20:break;case 21:return this.popState(),17;case 22:return U.yytext[0];case 23:return 18;case 24:return 19;case 25:return 41;case 26:return 43;case 27:return 43;case 28:return 43;case 29:return 41;case 30:return 41;case 31:return 42;case 32:return 42;case 33:return 42;case 34:return 42;case 35:return 42;case 36:return 43;case 37:return 42;case 38:return 43;case 39:return 44;case 40:return 44;case 41:return 44;case 42:return 44;case 43:return 41;case 44:return 42;case 45:return 43;case 46:return 45;case 47:return 46;case 48:return 47;case 49:return 47;case 50:return 46;case 51:return 46;case 52:return 46;case 53:return 27;case 54:return U.yytext[0];case 55:return 6}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:,)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:(.*?)[~](.*?)*[~])/i,/^(?:[\*A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\s*u\b)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z_][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[14,15,16,17,18,19,20,21,22],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55],inclusive:!0}}};return vt}();yt.lexer=ft;function ut(){this.yy={}}return ut.prototype=yt,yt.Parser=ut,new ut}();R0t.parser=R0t;const lze=R0t;let mk={},j0t=[];const hze={ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"},fze={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},OBt=function(i,a=void 0){return mk[i]===void 0?(mk[i]={attributes:[],alias:a},Ut.info("Added new entity :",i)):mk[i]&&!mk[i].alias&&a&&(mk[i].alias=a,Ut.info(`Add alias '${a}' to entity '${i}'`)),mk[i]},dze={Cardinality:hze,Identification:fze,getConfig:()=>Oe().er,addEntity:OBt,addAttributes:function(i,a){let f=OBt(i),p;for(p=a.length-1;p>=0;p--)f.attributes.push(a[p]),Ut.debug("Added attribute ",a[p].attributeName)},getEntities:()=>mk,addRelationship:function(i,a,f,p){let w={entityA:i,roleA:a,entityB:f,relSpec:p};j0t.push(w),Ut.debug("Added new relationship :",w)},getRelationships:()=>j0t,clear:function(){mk={},j0t=[],hg()},setAccTitle:E0,getAccTitle:fg,setAccDescription:dg,getAccDescription:gg,setDiagramTitle:Nb,getDiagramTitle:pg},fm={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END",MD_PARENT_END:"MD_PARENT_END",MD_PARENT_START:"MD_PARENT_START"},dm={ERMarkers:fm,insertMarkers:function(i,a){let f;i.append("defs").append("marker").attr("id",fm.MD_PARENT_START).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",fm.MD_PARENT_END).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",fm.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),i.append("defs").append("marker").attr("id",fm.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),f=i.append("defs").append("marker").attr("id",fm.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),f.append("circle").attr("stroke",a.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),f.append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M9,0 L9,18"),f=i.append("defs").append("marker").attr("id",fm.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),f.append("circle").attr("stroke",a.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),f.append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M21,0 L21,18"),i.append("defs").append("marker").attr("id",fm.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),i.append("defs").append("marker").attr("id",fm.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),f=i.append("defs").append("marker").attr("id",fm.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),f.append("circle").attr("stroke",a.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),f.append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),f=i.append("defs").append("marker").attr("id",fm.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),f.append("circle").attr("stroke",a.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),f.append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")}},gze=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function pze(i){return typeof i=="string"&&gze.test(i)}const Rd=[];for(let i=0;i<256;++i)Rd.push((i+256).toString(16).slice(1));function bze(i,a=0){return(Rd[i[a+0]]+Rd[i[a+1]]+Rd[i[a+2]]+Rd[i[a+3]]+"-"+Rd[i[a+4]]+Rd[i[a+5]]+"-"+Rd[i[a+6]]+Rd[i[a+7]]+"-"+Rd[i[a+8]]+Rd[i[a+9]]+"-"+Rd[i[a+10]]+Rd[i[a+11]]+Rd[i[a+12]]+Rd[i[a+13]]+Rd[i[a+14]]+Rd[i[a+15]]).toLowerCase()}function wze(i){if(!pze(i))throw TypeError("Invalid UUID");let a;const f=new Uint8Array(16);return f[0]=(a=parseInt(i.slice(0,8),16))>>>24,f[1]=a>>>16&255,f[2]=a>>>8&255,f[3]=a&255,f[4]=(a=parseInt(i.slice(9,13),16))>>>8,f[5]=a&255,f[6]=(a=parseInt(i.slice(14,18),16))>>>8,f[7]=a&255,f[8]=(a=parseInt(i.slice(19,23),16))>>>8,f[9]=a&255,f[10]=(a=parseInt(i.slice(24,36),16))/1099511627776&255,f[11]=a/4294967296&255,f[12]=a>>>24&255,f[13]=a>>>16&255,f[14]=a>>>8&255,f[15]=a&255,f}function vze(i){i=unescape(encodeURIComponent(i));const a=[];for(let f=0;f>>32-a}function Eze(i){const a=[1518500249,1859775393,2400959708,3395469782],f=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof i=="string"){const b=unescape(encodeURIComponent(i));i=[];for(let E=0;E>>0;N=B,B=I,I=$0t(A,30)>>>0,A=_,_=W}f[0]=f[0]+_>>>0,f[1]=f[1]+A>>>0,f[2]=f[2]+I>>>0,f[3]=f[3]+B>>>0,f[4]=f[4]+N>>>0}return[f[0]>>24&255,f[0]>>16&255,f[0]>>8&255,f[0]&255,f[1]>>24&255,f[1]>>16&255,f[1]>>8&255,f[1]&255,f[2]>>24&255,f[2]>>16&255,f[2]>>8&255,f[2]&255,f[3]>>24&255,f[3]>>16&255,f[3]>>8&255,f[3]&255,f[4]>>24&255,f[4]>>16&255,f[4]>>8&255,f[4]&255]}const Tze=xze("v5",80,Eze),Cze=/[^\dA-Za-z](\W)*/g;let u1={},SF=new Map;const _ze=function(i){const a=Object.keys(i);for(const f of a)u1[f]=i[f]},Sze=(i,a,f)=>{const p=u1.entityPadding/3,w=u1.entityPadding/3,m=u1.fontSize*.85,b=a.node().getBBox(),E=[];let _=!1,A=!1,I=0,B=0,N=0,R=0,z=b.height+p*2,W=1;f.forEach(bt=>{bt.attributeKeyTypeList!==void 0&&bt.attributeKeyTypeList.length>0&&(_=!0),bt.attributeComment!==void 0&&(A=!0)}),f.forEach(bt=>{const mt=`${a.node().id}-attr-${W}`;let yt=0;const ft=YP(bt.attributeType),ut=i.append("text").classed("er entityLabel",!0).attr("id",`${mt}-type`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",Oe().fontFamily).style("font-size",m+"px").text(ft),vt=i.append("text").classed("er entityLabel",!0).attr("id",`${mt}-name`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",Oe().fontFamily).style("font-size",m+"px").text(bt.attributeName),X={};X.tn=ut,X.nn=vt;const pt=ut.node().getBBox(),U=vt.node().getBBox();if(I=Math.max(I,pt.width),B=Math.max(B,U.width),yt=Math.max(pt.height,U.height),_){const Tt=bt.attributeKeyTypeList!==void 0?bt.attributeKeyTypeList.join(","):"",nt=i.append("text").classed("er entityLabel",!0).attr("id",`${mt}-key`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",Oe().fontFamily).style("font-size",m+"px").text(Tt);X.kn=nt;const It=nt.node().getBBox();N=Math.max(N,It.width),yt=Math.max(yt,It.height)}if(A){const Tt=i.append("text").classed("er entityLabel",!0).attr("id",`${mt}-comment`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",Oe().fontFamily).style("font-size",m+"px").text(bt.attributeComment||"");X.cn=Tt;const nt=Tt.node().getBBox();R=Math.max(R,nt.width),yt=Math.max(yt,nt.height)}X.height=yt,E.push(X),z+=yt+p*2,W+=1});let et=4;_&&(et+=2),A&&(et+=2);const st=I+B+N+R,at={width:Math.max(u1.minEntityWidth,Math.max(b.width+u1.entityPadding*2,st+w*et)),height:f.length>0?z:Math.max(u1.minEntityHeight,b.height+u1.entityPadding*2)};if(f.length>0){const bt=Math.max(0,(at.width-st-w*et)/(et/2));a.attr("transform","translate("+at.width/2+","+(p+b.height/2)+")");let mt=b.height+p*2,yt="attributeBoxOdd";E.forEach(ft=>{const ut=mt+p+ft.height/2;ft.tn.attr("transform","translate("+w+","+ut+")");const vt=i.insert("rect","#"+ft.tn.node().id).classed(`er ${yt}`,!0).attr("x",0).attr("y",mt).attr("width",I+w*2+bt).attr("height",ft.height+p*2),X=parseFloat(vt.attr("x"))+parseFloat(vt.attr("width"));ft.nn.attr("transform","translate("+(X+w)+","+ut+")");const pt=i.insert("rect","#"+ft.nn.node().id).classed(`er ${yt}`,!0).attr("x",X).attr("y",mt).attr("width",B+w*2+bt).attr("height",ft.height+p*2);let U=parseFloat(pt.attr("x"))+parseFloat(pt.attr("width"));if(_){ft.kn.attr("transform","translate("+(U+w)+","+ut+")");const Tt=i.insert("rect","#"+ft.kn.node().id).classed(`er ${yt}`,!0).attr("x",U).attr("y",mt).attr("width",N+w*2+bt).attr("height",ft.height+p*2);U=parseFloat(Tt.attr("x"))+parseFloat(Tt.attr("width"))}A&&(ft.cn.attr("transform","translate("+(U+w)+","+ut+")"),i.insert("rect","#"+ft.cn.node().id).classed(`er ${yt}`,"true").attr("x",U).attr("y",mt).attr("width",R+w*2+bt).attr("height",ft.height+p*2)),mt+=ft.height+p*2,yt=yt==="attributeBoxOdd"?"attributeBoxEven":"attributeBoxOdd"})}else at.height=Math.max(u1.minEntityHeight,z),a.attr("transform","translate("+at.width/2+","+at.height/2+")");return at},Aze=function(i,a,f){const p=Object.keys(a);let w;return p.forEach(function(m){const b=Pze(m,"entity");SF.set(m,b);const E=i.append("g").attr("id",b);w=w===void 0?b:w;const _="text-"+b,A=E.append("text").classed("er entityLabel",!0).attr("id",_).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","middle").style("font-family",Oe().fontFamily).style("font-size",u1.fontSize+"px").text(a[m].alias??m),{width:I,height:B}=Sze(E,A,a[m].attributes),R=E.insert("rect","#"+_).classed("er entityBox",!0).attr("x",0).attr("y",0).attr("width",I).attr("height",B).node().getBBox();f.setNode(b,{width:R.width,height:R.height,shape:"rect",id:b})}),w},Lze=function(i,a){a.nodes().forEach(function(f){f!==void 0&&a.node(f)!==void 0&&i.select("#"+f).attr("transform","translate("+(a.node(f).x-a.node(f).width/2)+","+(a.node(f).y-a.node(f).height/2)+" )")})},PBt=function(i){return(i.entityA+i.roleA+i.entityB).replace(/\s/g,"")},Mze=function(i,a){return i.forEach(function(f){a.setEdge(SF.get(f.entityA),SF.get(f.entityB),{relationship:f},PBt(f))}),i};let FBt=0;const Dze=function(i,a,f,p,w){FBt++;const m=f.edge(SF.get(a.entityA),SF.get(a.entityB),PBt(a)),b=E5().x(function(z){return z.x}).y(function(z){return z.y}).curve(HP),E=i.insert("path","#"+p).classed("er relationshipLine",!0).attr("d",b(m.points)).style("stroke",u1.stroke).style("fill","none");a.relSpec.relType===w.db.Identification.NON_IDENTIFYING&&E.attr("stroke-dasharray","8,8");let _="";switch(u1.arrowMarkerAbsolute&&(_=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,_=_.replace(/\(/g,"\\("),_=_.replace(/\)/g,"\\)")),a.relSpec.cardA){case w.db.Cardinality.ZERO_OR_ONE:E.attr("marker-end","url("+_+"#"+dm.ERMarkers.ZERO_OR_ONE_END+")");break;case w.db.Cardinality.ZERO_OR_MORE:E.attr("marker-end","url("+_+"#"+dm.ERMarkers.ZERO_OR_MORE_END+")");break;case w.db.Cardinality.ONE_OR_MORE:E.attr("marker-end","url("+_+"#"+dm.ERMarkers.ONE_OR_MORE_END+")");break;case w.db.Cardinality.ONLY_ONE:E.attr("marker-end","url("+_+"#"+dm.ERMarkers.ONLY_ONE_END+")");break;case w.db.Cardinality.MD_PARENT:E.attr("marker-end","url("+_+"#"+dm.ERMarkers.MD_PARENT_END+")");break}switch(a.relSpec.cardB){case w.db.Cardinality.ZERO_OR_ONE:E.attr("marker-start","url("+_+"#"+dm.ERMarkers.ZERO_OR_ONE_START+")");break;case w.db.Cardinality.ZERO_OR_MORE:E.attr("marker-start","url("+_+"#"+dm.ERMarkers.ZERO_OR_MORE_START+")");break;case w.db.Cardinality.ONE_OR_MORE:E.attr("marker-start","url("+_+"#"+dm.ERMarkers.ONE_OR_MORE_START+")");break;case w.db.Cardinality.ONLY_ONE:E.attr("marker-start","url("+_+"#"+dm.ERMarkers.ONLY_ONE_START+")");break;case w.db.Cardinality.MD_PARENT:E.attr("marker-start","url("+_+"#"+dm.ERMarkers.MD_PARENT_START+")");break}const A=E.node().getTotalLength(),I=E.node().getPointAtLength(A*.5),B="rel"+FBt,R=i.append("text").classed("er relationshipLabel",!0).attr("id",B).attr("x",I.x).attr("y",I.y).style("text-anchor","middle").style("dominant-baseline","middle").style("font-family",Oe().fontFamily).style("font-size",u1.fontSize+"px").text(a.roleA).node().getBBox();i.insert("rect","#"+B).classed("er relationshipLabelBox",!0).attr("x",I.x-R.width/2).attr("y",I.y-R.height/2).attr("width",R.width).attr("height",R.height)},Ize=function(i,a,f,p){u1=Oe().er,Ut.info("Drawing ER diagram");const w=Oe().securityLevel;let m;w==="sandbox"&&(m=yr("#i"+a));const E=yr(w==="sandbox"?m.nodes()[0].contentDocument.body:"body").select(`[id='${a}']`);dm.insertMarkers(E,u1);let _;_=new c1({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:u1.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}});const A=Aze(E,p.db.getEntities(),_),I=Mze(p.db.getRelationships(),_);aL(_),Lze(E,_),I.forEach(function(W){Dze(E,W,_,A,p)});const B=u1.diagramPadding;$a.insertTitle(E,"entityTitleText",u1.titleTopMargin,p.db.getDiagramTitle());const N=E.node().getBBox(),R=N.width+B*2,z=N.height+B*2;k0(E,z,R,u1.useMaxWidth),E.attr("viewBox",`${N.x-B} ${N.y-B} ${R} ${z}`)},Oze="28e9f9db-3c8d-5aa5-9faf-44286ae5937c";function Pze(i="",a=""){const f=i.replace(Cze,"");return`${NBt(a)}${NBt(f)}${Tze(i,Oze)}`}function NBt(i=""){return i.length>0?`${i}-`:""}const Fze=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:lze,db:dze,renderer:{setConf:_ze,draw:Ize},styles:i=>` +`,_en=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Gbe,db:HC,renderer:Hme,styles:FUe,init:i=>{i.flowchart||(i.flowchart={}),i.flowchart.arrowMarkerAbsolute=i.arrowMarkerAbsolute,_Qt.setConf(i.flowchart),HC.clear(),HC.setGen("gen-1")}}},Symbol.toStringTag,{value:"Module"})),Aen=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Gbe,db:HC,renderer:Hme,styles:FUe,init:i=>{i.flowchart||(i.flowchart={}),i.flowchart.arrowMarkerAbsolute=i.arrowMarkerAbsolute,_jt({flowchart:{arrowMarkerAbsolute:i.arrowMarkerAbsolute}}),Hme.setConf(i.flowchart),HC.clear(),HC.setGen("gen-2")}}},Symbol.toStringTag,{value:"Module"}));var Vme=function(){var i=function(de,X,ge,W){for(ge=ge||{},W=de.length;W--;ge[de[W]]=X);return ge},s=[6,8,10,20,22,24,26,27,28],u=[1,10],d=[1,11],p=[1,12],v=[1,13],b=[1,14],y=[1,15],T=[1,21],_=[1,22],A=[1,23],P=[1,24],R=[1,25],F=[6,8,10,13,15,18,19,20,22,24,26,27,28,41,42,43,44,45],j=[1,34],K=[27,28,46,47],ee=[41,42,43,44,45],ie=[17,34],oe=[1,54],pe=[1,53],be=[17,34,36,38],ae={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,":":13,role:14,BLOCK_START:15,attributes:16,BLOCK_STOP:17,SQS:18,SQE:19,title:20,title_value:21,acc_title:22,acc_title_value:23,acc_descr:24,acc_descr_value:25,acc_descr_multiline_value:26,ALPHANUM:27,ENTITY_NAME:28,attribute:29,attributeType:30,attributeName:31,attributeKeyTypeList:32,attributeComment:33,ATTRIBUTE_WORD:34,attributeKeyType:35,COMMA:36,ATTRIBUTE_KEY:37,COMMENT:38,cardinality:39,relType:40,ZERO_OR_ONE:41,ZERO_OR_MORE:42,ONE_OR_MORE:43,ONLY_ONE:44,MD_PARENT:45,NON_IDENTIFYING:46,IDENTIFYING:47,WORD:48,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:":",15:"BLOCK_START",17:"BLOCK_STOP",18:"SQS",19:"SQE",20:"title",21:"title_value",22:"acc_title",23:"acc_title_value",24:"acc_descr",25:"acc_descr_value",26:"acc_descr_multiline_value",27:"ALPHANUM",28:"ENTITY_NAME",34:"ATTRIBUTE_WORD",36:"COMMA",37:"ATTRIBUTE_KEY",38:"COMMENT",41:"ZERO_OR_ONE",42:"ZERO_OR_MORE",43:"ONE_OR_MORE",44:"ONLY_ONE",45:"MD_PARENT",46:"NON_IDENTIFYING",47:"IDENTIFYING",48:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,4],[9,3],[9,1],[9,7],[9,6],[9,4],[9,2],[9,2],[9,2],[9,1],[11,1],[11,1],[16,1],[16,2],[29,2],[29,3],[29,3],[29,4],[30,1],[31,1],[32,1],[32,3],[35,1],[33,1],[12,3],[39,1],[39,1],[39,1],[39,1],[39,1],[40,1],[40,1],[14,1],[14,1],[14,1]],performAction:function(X,ge,W,xe,U,Fe,Pe){var je=Fe.length-1;switch(U){case 1:break;case 2:this.$=[];break;case 3:Fe[je-1].push(Fe[je]),this.$=Fe[je-1];break;case 4:case 5:this.$=Fe[je];break;case 6:case 7:this.$=[];break;case 8:xe.addEntity(Fe[je-4]),xe.addEntity(Fe[je-2]),xe.addRelationship(Fe[je-4],Fe[je],Fe[je-2],Fe[je-3]);break;case 9:xe.addEntity(Fe[je-3]),xe.addAttributes(Fe[je-3],Fe[je-1]);break;case 10:xe.addEntity(Fe[je-2]);break;case 11:xe.addEntity(Fe[je]);break;case 12:xe.addEntity(Fe[je-6],Fe[je-4]),xe.addAttributes(Fe[je-6],Fe[je-1]);break;case 13:xe.addEntity(Fe[je-5],Fe[je-3]);break;case 14:xe.addEntity(Fe[je-3],Fe[je-1]);break;case 15:case 16:this.$=Fe[je].trim(),xe.setAccTitle(this.$);break;case 17:case 18:this.$=Fe[je].trim(),xe.setAccDescription(this.$);break;case 19:case 43:this.$=Fe[je];break;case 20:case 41:case 42:this.$=Fe[je].replace(/"/g,"");break;case 21:case 29:this.$=[Fe[je]];break;case 22:Fe[je].push(Fe[je-1]),this.$=Fe[je];break;case 23:this.$={attributeType:Fe[je-1],attributeName:Fe[je]};break;case 24:this.$={attributeType:Fe[je-2],attributeName:Fe[je-1],attributeKeyTypeList:Fe[je]};break;case 25:this.$={attributeType:Fe[je-2],attributeName:Fe[je-1],attributeComment:Fe[je]};break;case 26:this.$={attributeType:Fe[je-3],attributeName:Fe[je-2],attributeKeyTypeList:Fe[je-1],attributeComment:Fe[je]};break;case 27:case 28:case 31:this.$=Fe[je];break;case 30:Fe[je-2].push(Fe[je]),this.$=Fe[je-2];break;case 32:this.$=Fe[je].replace(/"/g,"");break;case 33:this.$={cardA:Fe[je],relType:Fe[je-1],cardB:Fe[je-2]};break;case 34:this.$=xe.Cardinality.ZERO_OR_ONE;break;case 35:this.$=xe.Cardinality.ZERO_OR_MORE;break;case 36:this.$=xe.Cardinality.ONE_OR_MORE;break;case 37:this.$=xe.Cardinality.ONLY_ONE;break;case 38:this.$=xe.Cardinality.MD_PARENT;break;case 39:this.$=xe.Identification.NON_IDENTIFYING;break;case 40:this.$=xe.Identification.IDENTIFYING;break}},table:[{3:1,4:[1,2]},{1:[3]},i(s,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,20:u,22:d,24:p,26:v,27:b,28:y},i(s,[2,7],{1:[2,1]}),i(s,[2,3]),{9:16,11:9,20:u,22:d,24:p,26:v,27:b,28:y},i(s,[2,5]),i(s,[2,6]),i(s,[2,11],{12:17,39:20,15:[1,18],18:[1,19],41:T,42:_,43:A,44:P,45:R}),{21:[1,26]},{23:[1,27]},{25:[1,28]},i(s,[2,18]),i(F,[2,19]),i(F,[2,20]),i(s,[2,4]),{11:29,27:b,28:y},{16:30,17:[1,31],29:32,30:33,34:j},{11:35,27:b,28:y},{40:36,46:[1,37],47:[1,38]},i(K,[2,34]),i(K,[2,35]),i(K,[2,36]),i(K,[2,37]),i(K,[2,38]),i(s,[2,15]),i(s,[2,16]),i(s,[2,17]),{13:[1,39]},{17:[1,40]},i(s,[2,10]),{16:41,17:[2,21],29:32,30:33,34:j},{31:42,34:[1,43]},{34:[2,27]},{19:[1,44]},{39:45,41:T,42:_,43:A,44:P,45:R},i(ee,[2,39]),i(ee,[2,40]),{14:46,27:[1,49],28:[1,48],48:[1,47]},i(s,[2,9]),{17:[2,22]},i(ie,[2,23],{32:50,33:51,35:52,37:oe,38:pe}),i([17,34,37,38],[2,28]),i(s,[2,14],{15:[1,55]}),i([27,28],[2,33]),i(s,[2,8]),i(s,[2,41]),i(s,[2,42]),i(s,[2,43]),i(ie,[2,24],{33:56,36:[1,57],38:pe}),i(ie,[2,25]),i(be,[2,29]),i(ie,[2,32]),i(be,[2,31]),{16:58,17:[1,59],29:32,30:33,34:j},i(ie,[2,26]),{35:60,37:oe},{17:[1,61]},i(s,[2,13]),i(be,[2,30]),i(s,[2,12])],defaultActions:{34:[2,27],41:[2,22]},parseError:function(X,ge){if(ge.recoverable)this.trace(X);else{var W=new Error(X);throw W.hash=ge,W}},parse:function(X){var ge=this,W=[0],xe=[],U=[null],Fe=[],Pe=this.table,je="",Ie=0,Se=0,Ce=2,ke=1,Ke=Fe.slice.call(arguments,1),Ft=Object.create(this.lexer),Ne={yy:{}};for(var gn in this.yy)Object.prototype.hasOwnProperty.call(this.yy,gn)&&(Ne.yy[gn]=this.yy[gn]);Ft.setInput(X,Ne.yy),Ne.yy.lexer=Ft,Ne.yy.parser=this,typeof Ft.yylloc>"u"&&(Ft.yylloc={});var _t=Ft.yylloc;Fe.push(_t);var Et=Ft.options&&Ft.options.ranges;typeof Ne.yy.parseError=="function"?this.parseError=Ne.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Gt(){var ji;return ji=xe.pop()||Ft.lex()||ke,typeof ji!="number"&&(ji instanceof Array&&(xe=ji,ji=xe.pop()),ji=ge.symbols_[ji]||ji),ji}for(var ln,xt,Pt,Qe,Dt={},kt,On,ht,zr;;){if(xt=W[W.length-1],this.defaultActions[xt]?Pt=this.defaultActions[xt]:((ln===null||typeof ln>"u")&&(ln=Gt()),Pt=Pe[xt]&&Pe[xt][ln]),typeof Pt>"u"||!Pt.length||!Pt[0]){var yt="";zr=[];for(kt in Pe[xt])this.terminals_[kt]&&kt>Ce&&zr.push("'"+this.terminals_[kt]+"'");Ft.showPosition?yt="Parse error on line "+(Ie+1)+`: +`+Ft.showPosition()+` +Expecting `+zr.join(", ")+", got '"+(this.terminals_[ln]||ln)+"'":yt="Parse error on line "+(Ie+1)+": Unexpected "+(ln==ke?"end of input":"'"+(this.terminals_[ln]||ln)+"'"),this.parseError(yt,{text:Ft.match,token:this.terminals_[ln]||ln,line:Ft.yylineno,loc:_t,expected:zr})}if(Pt[0]instanceof Array&&Pt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+xt+", token: "+ln);switch(Pt[0]){case 1:W.push(ln),U.push(Ft.yytext),Fe.push(Ft.yylloc),W.push(Pt[1]),ln=null,Se=Ft.yyleng,je=Ft.yytext,Ie=Ft.yylineno,_t=Ft.yylloc;break;case 2:if(On=this.productions_[Pt[1]][1],Dt.$=U[U.length-On],Dt._$={first_line:Fe[Fe.length-(On||1)].first_line,last_line:Fe[Fe.length-1].last_line,first_column:Fe[Fe.length-(On||1)].first_column,last_column:Fe[Fe.length-1].last_column},Et&&(Dt._$.range=[Fe[Fe.length-(On||1)].range[0],Fe[Fe.length-1].range[1]]),Qe=this.performAction.apply(Dt,[je,Se,Ie,Ne.yy,Pt[1],U,Fe].concat(Ke)),typeof Qe<"u")return Qe;On&&(W=W.slice(0,-1*On*2),U=U.slice(0,-1*On),Fe=Fe.slice(0,-1*On)),W.push(this.productions_[Pt[1]][0]),U.push(Dt.$),Fe.push(Dt._$),ht=Pe[W[W.length-2]][W[W.length-1]],W.push(ht);break;case 3:return!0}}return!0}},ne=function(){var de={EOF:1,parseError:function(ge,W){if(this.yy.parser)this.yy.parser.parseError(ge,W);else throw new Error(ge)},setInput:function(X,ge){return this.yy=ge||this.yy||{},this._input=X,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var X=this._input[0];this.yytext+=X,this.yyleng++,this.offset++,this.match+=X,this.matched+=X;var ge=X.match(/(?:\r\n?|\n).*/g);return ge?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),X},unput:function(X){var ge=X.length,W=X.split(/(?:\r\n?|\n)/g);this._input=X+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ge),this.offset-=ge;var xe=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),W.length-1&&(this.yylineno-=W.length-1);var U=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:W?(W.length===xe.length?this.yylloc.first_column:0)+xe[xe.length-W.length].length-W[0].length:this.yylloc.first_column-ge},this.options.ranges&&(this.yylloc.range=[U[0],U[0]+this.yyleng-ge]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(X){this.unput(this.match.slice(X))},pastInput:function(){var X=this.matched.substr(0,this.matched.length-this.match.length);return(X.length>20?"...":"")+X.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var X=this.match;return X.length<20&&(X+=this._input.substr(0,20-X.length)),(X.substr(0,20)+(X.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var X=this.pastInput(),ge=new Array(X.length+1).join("-");return X+this.upcomingInput()+` +`+ge+"^"},test_match:function(X,ge){var W,xe,U;if(this.options.backtrack_lexer&&(U={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(U.yylloc.range=this.yylloc.range.slice(0))),xe=X[0].match(/(?:\r\n?|\n).*/g),xe&&(this.yylineno+=xe.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:xe?xe[xe.length-1].length-xe[xe.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+X[0].length},this.yytext+=X[0],this.match+=X[0],this.matches=X,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(X[0].length),this.matched+=X[0],W=this.performAction.call(this,this.yy,this,ge,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),W)return W;if(this._backtrack){for(var Fe in U)this[Fe]=U[Fe];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var X,ge,W,xe;this._more||(this.yytext="",this.match="");for(var U=this._currentRules(),Fe=0;Fege[0].length)){if(ge=W,xe=Fe,this.options.backtrack_lexer){if(X=this.test_match(W,U[Fe]),X!==!1)return X;if(this._backtrack){ge=!1;continue}else return!1}else if(!this.options.flex)break}return ge?(X=this.test_match(ge,U[xe]),X!==!1?X:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var ge=this.next();return ge||this.lex()},begin:function(ge){this.conditionStack.push(ge)},popState:function(){var ge=this.conditionStack.length-1;return ge>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(ge){return ge=this.conditionStack.length-1-Math.abs(ge||0),ge>=0?this.conditionStack[ge]:"INITIAL"},pushState:function(ge){this.begin(ge)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(ge,W,xe,U){switch(xe){case 0:return this.begin("acc_title"),22;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),24;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 10;case 8:break;case 9:return 8;case 10:return 28;case 11:return 48;case 12:return 4;case 13:return this.begin("block"),15;case 14:return 36;case 15:break;case 16:return 37;case 17:return 34;case 18:return 34;case 19:return 38;case 20:break;case 21:return this.popState(),17;case 22:return W.yytext[0];case 23:return 18;case 24:return 19;case 25:return 41;case 26:return 43;case 27:return 43;case 28:return 43;case 29:return 41;case 30:return 41;case 31:return 42;case 32:return 42;case 33:return 42;case 34:return 42;case 35:return 42;case 36:return 43;case 37:return 42;case 38:return 43;case 39:return 44;case 40:return 44;case 41:return 44;case 42:return 44;case 43:return 41;case 44:return 42;case 45:return 43;case 46:return 45;case 47:return 46;case 48:return 47;case 49:return 47;case 50:return 46;case 51:return 46;case 52:return 46;case 53:return 27;case 54:return W.yytext[0];case 55:return 6}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:,)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:(.*?)[~](.*?)*[~])/i,/^(?:[\*A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\s*u\b)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z_][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[14,15,16,17,18,19,20,21,22],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55],inclusive:!0}}};return de}();ae.lexer=ne;function se(){this.yy={}}return se.prototype=ae,ae.Parser=se,new se}();Vme.parser=Vme;const Len=Vme;let B9={},Ume=[];const Men={ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"},Den={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},RUe=function(i,s=void 0){return B9[i]===void 0?(B9[i]={attributes:[],alias:s},Xe.info("Added new entity :",i)):B9[i]&&!B9[i].alias&&s&&(B9[i].alias=s,Xe.info(`Add alias '${s}' to entity '${i}'`)),B9[i]},Ien={Cardinality:Men,Identification:Den,getConfig:()=>qt().er,addEntity:RUe,addAttributes:function(i,s){let u=RUe(i),d;for(d=s.length-1;d>=0;d--)u.attributes.push(s[d]),Xe.debug("Added attribute ",s[d].attributeName)},getEntities:()=>B9,addRelationship:function(i,s,u,d){let p={entityA:i,roleA:s,entityB:u,relSpec:d};Ume.push(p),Xe.debug("Added new relationship :",p)},getRelationships:()=>Ume,clear:function(){B9={},Ume=[],Pg()},setAccTitle:Bg,getAccTitle:Cp,setAccDescription:Sp,getAccDescription:_p,setDiagramTitle:cm,getDiagramTitle:Ap},U3={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END",MD_PARENT_END:"MD_PARENT_END",MD_PARENT_START:"MD_PARENT_START"},G3={ERMarkers:U3,insertMarkers:function(i,s){let u;i.append("defs").append("marker").attr("id",U3.MD_PARENT_START).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",U3.MD_PARENT_END).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",U3.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",s.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),i.append("defs").append("marker").attr("id",U3.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",s.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),u=i.append("defs").append("marker").attr("id",U3.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),u.append("circle").attr("stroke",s.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),u.append("path").attr("stroke",s.stroke).attr("fill","none").attr("d","M9,0 L9,18"),u=i.append("defs").append("marker").attr("id",U3.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),u.append("circle").attr("stroke",s.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),u.append("path").attr("stroke",s.stroke).attr("fill","none").attr("d","M21,0 L21,18"),i.append("defs").append("marker").attr("id",U3.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",s.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),i.append("defs").append("marker").attr("id",U3.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",s.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),u=i.append("defs").append("marker").attr("id",U3.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),u.append("circle").attr("stroke",s.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),u.append("path").attr("stroke",s.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),u=i.append("defs").append("marker").attr("id",U3.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),u.append("circle").attr("stroke",s.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),u.append("path").attr("stroke",s.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")}},Oen=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Nen(i){return typeof i=="string"&&Oen.test(i)}const Ud=[];for(let i=0;i<256;++i)Ud.push((i+256).toString(16).slice(1));function Pen(i,s=0){return Ud[i[s+0]]+Ud[i[s+1]]+Ud[i[s+2]]+Ud[i[s+3]]+"-"+Ud[i[s+4]]+Ud[i[s+5]]+"-"+Ud[i[s+6]]+Ud[i[s+7]]+"-"+Ud[i[s+8]]+Ud[i[s+9]]+"-"+Ud[i[s+10]]+Ud[i[s+11]]+Ud[i[s+12]]+Ud[i[s+13]]+Ud[i[s+14]]+Ud[i[s+15]]}function Ben(i){if(!Nen(i))throw TypeError("Invalid UUID");let s;const u=new Uint8Array(16);return u[0]=(s=parseInt(i.slice(0,8),16))>>>24,u[1]=s>>>16&255,u[2]=s>>>8&255,u[3]=s&255,u[4]=(s=parseInt(i.slice(9,13),16))>>>8,u[5]=s&255,u[6]=(s=parseInt(i.slice(14,18),16))>>>8,u[7]=s&255,u[8]=(s=parseInt(i.slice(19,23),16))>>>8,u[9]=s&255,u[10]=(s=parseInt(i.slice(24,36),16))/1099511627776&255,u[11]=s/4294967296&255,u[12]=s>>>24&255,u[13]=s>>>16&255,u[14]=s>>>8&255,u[15]=s&255,u}function Fen(i){i=unescape(encodeURIComponent(i));const s=[];for(let u=0;u>>32-s}function qen(i){const s=[1518500249,1859775393,2400959708,3395469782],u=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof i=="string"){const b=unescape(encodeURIComponent(i));i=[];for(let y=0;y>>0;R=P,P=A,A=Gme(_,30)>>>0,_=T,T=K}u[0]=u[0]+T>>>0,u[1]=u[1]+_>>>0,u[2]=u[2]+A>>>0,u[3]=u[3]+P>>>0,u[4]=u[4]+R>>>0}return[u[0]>>24&255,u[0]>>16&255,u[0]>>8&255,u[0]&255,u[1]>>24&255,u[1]>>16&255,u[1]>>8&255,u[1]&255,u[2]>>24&255,u[2]>>16&255,u[2]>>8&255,u[2]&255,u[3]>>24&255,u[3]>>16&255,u[3]>>8&255,u[3]&255,u[4]>>24&255,u[4]>>16&255,u[4]>>8&255,u[4]&255]}const Hen=$en("v5",80,qen),Ven=/[^\dA-Za-z](\W)*/g;let p1={},IR=new Map;const Uen=function(i){const s=Object.keys(i);for(const u of s)p1[u]=i[u]},Gen=(i,s,u)=>{const d=p1.entityPadding/3,p=p1.entityPadding/3,v=p1.fontSize*.85,b=s.node().getBBox(),y=[];let T=!1,_=!1,A=0,P=0,R=0,F=0,j=b.height+d*2,K=1;u.forEach(pe=>{pe.attributeKeyTypeList!==void 0&&pe.attributeKeyTypeList.length>0&&(T=!0),pe.attributeComment!==void 0&&(_=!0)}),u.forEach(pe=>{const be=`${s.node().id}-attr-${K}`;let ae=0;const ne=qF(pe.attributeType),se=i.append("text").classed("er entityLabel",!0).attr("id",`${be}-type`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",qt().fontFamily).style("font-size",v+"px").text(ne),de=i.append("text").classed("er entityLabel",!0).attr("id",`${be}-name`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",qt().fontFamily).style("font-size",v+"px").text(pe.attributeName),X={};X.tn=se,X.nn=de;const ge=se.node().getBBox(),W=de.node().getBBox();if(A=Math.max(A,ge.width),P=Math.max(P,W.width),ae=Math.max(ge.height,W.height),T){const xe=pe.attributeKeyTypeList!==void 0?pe.attributeKeyTypeList.join(","):"",U=i.append("text").classed("er entityLabel",!0).attr("id",`${be}-key`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",qt().fontFamily).style("font-size",v+"px").text(xe);X.kn=U;const Fe=U.node().getBBox();R=Math.max(R,Fe.width),ae=Math.max(ae,Fe.height)}if(_){const xe=i.append("text").classed("er entityLabel",!0).attr("id",`${be}-comment`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",qt().fontFamily).style("font-size",v+"px").text(pe.attributeComment||"");X.cn=xe;const U=xe.node().getBBox();F=Math.max(F,U.width),ae=Math.max(ae,U.height)}X.height=ae,y.push(X),j+=ae+d*2,K+=1});let ee=4;T&&(ee+=2),_&&(ee+=2);const ie=A+P+R+F,oe={width:Math.max(p1.minEntityWidth,Math.max(b.width+p1.entityPadding*2,ie+p*ee)),height:u.length>0?j:Math.max(p1.minEntityHeight,b.height+p1.entityPadding*2)};if(u.length>0){const pe=Math.max(0,(oe.width-ie-p*ee)/(ee/2));s.attr("transform","translate("+oe.width/2+","+(d+b.height/2)+")");let be=b.height+d*2,ae="attributeBoxOdd";y.forEach(ne=>{const se=be+d+ne.height/2;ne.tn.attr("transform","translate("+p+","+se+")");const de=i.insert("rect","#"+ne.tn.node().id).classed(`er ${ae}`,!0).attr("x",0).attr("y",be).attr("width",A+p*2+pe).attr("height",ne.height+d*2),X=parseFloat(de.attr("x"))+parseFloat(de.attr("width"));ne.nn.attr("transform","translate("+(X+p)+","+se+")");const ge=i.insert("rect","#"+ne.nn.node().id).classed(`er ${ae}`,!0).attr("x",X).attr("y",be).attr("width",P+p*2+pe).attr("height",ne.height+d*2);let W=parseFloat(ge.attr("x"))+parseFloat(ge.attr("width"));if(T){ne.kn.attr("transform","translate("+(W+p)+","+se+")");const xe=i.insert("rect","#"+ne.kn.node().id).classed(`er ${ae}`,!0).attr("x",W).attr("y",be).attr("width",R+p*2+pe).attr("height",ne.height+d*2);W=parseFloat(xe.attr("x"))+parseFloat(xe.attr("width"))}_&&(ne.cn.attr("transform","translate("+(W+p)+","+se+")"),i.insert("rect","#"+ne.cn.node().id).classed(`er ${ae}`,"true").attr("x",W).attr("y",be).attr("width",F+p*2+pe).attr("height",ne.height+d*2)),be+=ne.height+d*2,ae=ae==="attributeBoxOdd"?"attributeBoxEven":"attributeBoxOdd"})}else oe.height=Math.max(p1.minEntityHeight,j),s.attr("transform","translate("+oe.width/2+","+oe.height/2+")");return oe},Ken=function(i,s,u){const d=Object.keys(s);let p;return d.forEach(function(v){const b=Zen(v,"entity");IR.set(v,b);const y=i.append("g").attr("id",b);p=p===void 0?b:p;const T="text-"+b,_=y.append("text").classed("er entityLabel",!0).attr("id",T).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","middle").style("font-family",qt().fontFamily).style("font-size",p1.fontSize+"px").text(s[v].alias??v),{width:A,height:P}=Gen(y,_,s[v].attributes),F=y.insert("rect","#"+T).classed("er entityBox",!0).attr("x",0).attr("y",0).attr("width",A).attr("height",P).node().getBBox();u.setNode(b,{width:F.width,height:F.height,shape:"rect",id:b})}),p},Wen=function(i,s){s.nodes().forEach(function(u){u!==void 0&&s.node(u)!==void 0&&i.select("#"+u).attr("transform","translate("+(s.node(u).x-s.node(u).width/2)+","+(s.node(u).y-s.node(u).height/2)+" )")})},jUe=function(i){return(i.entityA+i.roleA+i.entityB).replace(/\s/g,"")},Yen=function(i,s){return i.forEach(function(u){s.setEdge(IR.get(u.entityA),IR.get(u.entityB),{relationship:u},jUe(u))}),i};let $Ue=0;const Xen=function(i,s,u,d,p){$Ue++;const v=u.edge(IR.get(s.entityA),IR.get(s.entityB),jUe(s)),b=k7().x(function(j){return j.x}).y(function(j){return j.y}).curve(FF),y=i.insert("path","#"+d).classed("er relationshipLine",!0).attr("d",b(v.points)).style("stroke",p1.stroke).style("fill","none");s.relSpec.relType===p.db.Identification.NON_IDENTIFYING&&y.attr("stroke-dasharray","8,8");let T="";switch(p1.arrowMarkerAbsolute&&(T=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,T=T.replace(/\(/g,"\\("),T=T.replace(/\)/g,"\\)")),s.relSpec.cardA){case p.db.Cardinality.ZERO_OR_ONE:y.attr("marker-end","url("+T+"#"+G3.ERMarkers.ZERO_OR_ONE_END+")");break;case p.db.Cardinality.ZERO_OR_MORE:y.attr("marker-end","url("+T+"#"+G3.ERMarkers.ZERO_OR_MORE_END+")");break;case p.db.Cardinality.ONE_OR_MORE:y.attr("marker-end","url("+T+"#"+G3.ERMarkers.ONE_OR_MORE_END+")");break;case p.db.Cardinality.ONLY_ONE:y.attr("marker-end","url("+T+"#"+G3.ERMarkers.ONLY_ONE_END+")");break;case p.db.Cardinality.MD_PARENT:y.attr("marker-end","url("+T+"#"+G3.ERMarkers.MD_PARENT_END+")");break}switch(s.relSpec.cardB){case p.db.Cardinality.ZERO_OR_ONE:y.attr("marker-start","url("+T+"#"+G3.ERMarkers.ZERO_OR_ONE_START+")");break;case p.db.Cardinality.ZERO_OR_MORE:y.attr("marker-start","url("+T+"#"+G3.ERMarkers.ZERO_OR_MORE_START+")");break;case p.db.Cardinality.ONE_OR_MORE:y.attr("marker-start","url("+T+"#"+G3.ERMarkers.ONE_OR_MORE_START+")");break;case p.db.Cardinality.ONLY_ONE:y.attr("marker-start","url("+T+"#"+G3.ERMarkers.ONLY_ONE_START+")");break;case p.db.Cardinality.MD_PARENT:y.attr("marker-start","url("+T+"#"+G3.ERMarkers.MD_PARENT_START+")");break}const _=y.node().getTotalLength(),A=y.node().getPointAtLength(_*.5),P="rel"+$Ue,F=i.append("text").classed("er relationshipLabel",!0).attr("id",P).attr("x",A.x).attr("y",A.y).style("text-anchor","middle").style("dominant-baseline","middle").style("font-family",qt().fontFamily).style("font-size",p1.fontSize+"px").text(s.roleA).node().getBBox();i.insert("rect","#"+P).classed("er relationshipLabelBox",!0).attr("x",A.x-F.width/2).attr("y",A.y-F.height/2).attr("width",F.width).attr("height",F.height)},Qen=function(i,s,u,d){p1=qt().er,Xe.info("Drawing ER diagram");const p=qt().securityLevel;let v;p==="sandbox"&&(v=Ir("#i"+s));const y=Ir(p==="sandbox"?v.nodes()[0].contentDocument.body:"body").select(`[id='${s}']`);G3.insertMarkers(y,p1);let T;T=new B0({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:p1.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}});const _=Ken(y,d.db.getEntities(),T),A=Yen(d.db.getRelationships(),T);qD(T),Wen(y,T),A.forEach(function(K){Xen(y,K,T,_,d)});const P=p1.diagramPadding;Ao.insertTitle(y,"entityTitleText",p1.titleTopMargin,d.db.getDiagramTitle());const R=y.node().getBBox(),F=R.width+P*2,j=R.height+P*2;Ng(y,j,F,p1.useMaxWidth),y.attr("viewBox",`${R.x-P} ${R.y-P} ${F} ${j}`)},Jen="28e9f9db-3c8d-5aa5-9faf-44286ae5937c";function Zen(i="",s=""){const u=i.replace(Ven,"");return`${zUe(s)}${zUe(u)}${Hen(i,Jen)}`}function zUe(i=""){return i.length>0?`${i}-`:""}const etn=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Len,db:Ien,renderer:{setConf:Uen,draw:Qen},styles:i=>` .entityBox { fill: ${i.mainBkg}; stroke: ${i.nodeBorder}; @@ -268,25 +542,25 @@ Expecting `+Me.join(", ")+", got '"+(this.terminals_[Ye]||Ye)+"'":de="Parse erro stroke-width: 1; } -`}},Symbol.toStringTag,{value:"Module"}));var z0t=function(){var i=function(yt,ft,ut,vt){for(ut=ut||{},vt=yt.length;vt--;ut[yt[vt]]=ft);return ut},a=[1,3],f=[1,6],p=[1,4],w=[1,5],m=[2,5],b=[1,12],E=[5,7,13,19,21,23,24,26,28,31,36,39,46],_=[7,13,19,21,23,24,26,28,31,36,39],A=[7,12,13,19,21,23,24,26,28,31,36,39],I=[7,13,46],B=[1,42],N=[1,41],R=[7,13,29,32,34,37,46],z=[1,55],W=[1,56],et=[1,57],st=[7,13,32,34,41,46],at={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,GG:5,document:6,EOF:7,":":8,DIR:9,options:10,body:11,OPT:12,NL:13,line:14,statement:15,commitStatement:16,mergeStatement:17,cherryPickStatement:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,section:24,branchStatement:25,CHECKOUT:26,ref:27,BRANCH:28,ORDER:29,NUM:30,CHERRY_PICK:31,COMMIT_ID:32,STR:33,COMMIT_TAG:34,EMPTYSTR:35,MERGE:36,COMMIT_TYPE:37,commitType:38,COMMIT:39,commit_arg:40,COMMIT_MSG:41,NORMAL:42,REVERSE:43,HIGHLIGHT:44,ID:45,";":46,$accept:0,$end:1},terminals_:{2:"error",5:"GG",7:"EOF",8:":",9:"DIR",12:"OPT",13:"NL",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"section",26:"CHECKOUT",28:"BRANCH",29:"ORDER",30:"NUM",31:"CHERRY_PICK",32:"COMMIT_ID",33:"STR",34:"COMMIT_TAG",35:"EMPTYSTR",36:"MERGE",37:"COMMIT_TYPE",39:"COMMIT",41:"COMMIT_MSG",42:"NORMAL",43:"REVERSE",44:"HIGHLIGHT",45:"ID",46:";"},productions_:[0,[3,2],[3,3],[3,4],[3,5],[6,0],[6,2],[10,2],[10,1],[11,0],[11,2],[14,2],[14,1],[15,1],[15,1],[15,1],[15,2],[15,2],[15,1],[15,1],[15,1],[15,2],[25,2],[25,4],[18,3],[18,5],[18,5],[18,5],[18,5],[17,2],[17,4],[17,4],[17,4],[17,6],[17,6],[17,6],[17,6],[17,6],[17,6],[17,8],[17,8],[17,8],[17,8],[17,8],[17,8],[16,2],[16,3],[16,3],[16,5],[16,5],[16,3],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,3],[16,5],[16,5],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[40,0],[40,1],[38,1],[38,1],[38,1],[27,1],[27,1],[4,1],[4,1],[4,1]],performAction:function(ft,ut,vt,X,pt,U,Tt){var nt=U.length-1;switch(pt){case 2:return U[nt];case 3:return U[nt-1];case 4:return X.setDirection(U[nt-3]),U[nt-1];case 6:X.setOptions(U[nt-1]),this.$=U[nt];break;case 7:U[nt-1]+=U[nt],this.$=U[nt-1];break;case 9:this.$=[];break;case 10:U[nt-1].push(U[nt]),this.$=U[nt-1];break;case 11:this.$=U[nt-1];break;case 16:this.$=U[nt].trim(),X.setAccTitle(this.$);break;case 17:case 18:this.$=U[nt].trim(),X.setAccDescription(this.$);break;case 19:X.addSection(U[nt].substr(8)),this.$=U[nt].substr(8);break;case 21:X.checkout(U[nt]);break;case 22:X.branch(U[nt]);break;case 23:X.branch(U[nt-2],U[nt]);break;case 24:X.cherryPick(U[nt],"",void 0);break;case 25:X.cherryPick(U[nt-2],"",U[nt]);break;case 26:case 28:X.cherryPick(U[nt-2],"","");break;case 27:X.cherryPick(U[nt],"",U[nt-2]);break;case 29:X.merge(U[nt],"","","");break;case 30:X.merge(U[nt-2],U[nt],"","");break;case 31:X.merge(U[nt-2],"",U[nt],"");break;case 32:X.merge(U[nt-2],"","",U[nt]);break;case 33:X.merge(U[nt-4],U[nt],"",U[nt-2]);break;case 34:X.merge(U[nt-4],"",U[nt],U[nt-2]);break;case 35:X.merge(U[nt-4],"",U[nt-2],U[nt]);break;case 36:X.merge(U[nt-4],U[nt-2],U[nt],"");break;case 37:X.merge(U[nt-4],U[nt-2],"",U[nt]);break;case 38:X.merge(U[nt-4],U[nt],U[nt-2],"");break;case 39:X.merge(U[nt-6],U[nt-4],U[nt-2],U[nt]);break;case 40:X.merge(U[nt-6],U[nt],U[nt-4],U[nt-2]);break;case 41:X.merge(U[nt-6],U[nt-4],U[nt],U[nt-2]);break;case 42:X.merge(U[nt-6],U[nt-2],U[nt-4],U[nt]);break;case 43:X.merge(U[nt-6],U[nt],U[nt-2],U[nt-4]);break;case 44:X.merge(U[nt-6],U[nt-2],U[nt],U[nt-4]);break;case 45:X.commit(U[nt]);break;case 46:X.commit("","",X.commitType.NORMAL,U[nt]);break;case 47:X.commit("","",U[nt],"");break;case 48:X.commit("","",U[nt],U[nt-2]);break;case 49:X.commit("","",U[nt-2],U[nt]);break;case 50:X.commit("",U[nt],X.commitType.NORMAL,"");break;case 51:X.commit("",U[nt-2],X.commitType.NORMAL,U[nt]);break;case 52:X.commit("",U[nt],X.commitType.NORMAL,U[nt-2]);break;case 53:X.commit("",U[nt-2],U[nt],"");break;case 54:X.commit("",U[nt],U[nt-2],"");break;case 55:X.commit("",U[nt-4],U[nt-2],U[nt]);break;case 56:X.commit("",U[nt-4],U[nt],U[nt-2]);break;case 57:X.commit("",U[nt-2],U[nt-4],U[nt]);break;case 58:X.commit("",U[nt],U[nt-4],U[nt-2]);break;case 59:X.commit("",U[nt],U[nt-2],U[nt-4]);break;case 60:X.commit("",U[nt-2],U[nt],U[nt-4]);break;case 61:X.commit(U[nt],"",X.commitType.NORMAL,"");break;case 62:X.commit(U[nt],"",X.commitType.NORMAL,U[nt-2]);break;case 63:X.commit(U[nt-2],"",X.commitType.NORMAL,U[nt]);break;case 64:X.commit(U[nt-2],"",U[nt],"");break;case 65:X.commit(U[nt],"",U[nt-2],"");break;case 66:X.commit(U[nt],U[nt-2],X.commitType.NORMAL,"");break;case 67:X.commit(U[nt-2],U[nt],X.commitType.NORMAL,"");break;case 68:X.commit(U[nt-4],"",U[nt-2],U[nt]);break;case 69:X.commit(U[nt-4],"",U[nt],U[nt-2]);break;case 70:X.commit(U[nt-2],"",U[nt-4],U[nt]);break;case 71:X.commit(U[nt],"",U[nt-4],U[nt-2]);break;case 72:X.commit(U[nt],"",U[nt-2],U[nt-4]);break;case 73:X.commit(U[nt-2],"",U[nt],U[nt-4]);break;case 74:X.commit(U[nt-4],U[nt],U[nt-2],"");break;case 75:X.commit(U[nt-4],U[nt-2],U[nt],"");break;case 76:X.commit(U[nt-2],U[nt],U[nt-4],"");break;case 77:X.commit(U[nt],U[nt-2],U[nt-4],"");break;case 78:X.commit(U[nt],U[nt-4],U[nt-2],"");break;case 79:X.commit(U[nt-2],U[nt-4],U[nt],"");break;case 80:X.commit(U[nt-4],U[nt],X.commitType.NORMAL,U[nt-2]);break;case 81:X.commit(U[nt-4],U[nt-2],X.commitType.NORMAL,U[nt]);break;case 82:X.commit(U[nt-2],U[nt],X.commitType.NORMAL,U[nt-4]);break;case 83:X.commit(U[nt],U[nt-2],X.commitType.NORMAL,U[nt-4]);break;case 84:X.commit(U[nt],U[nt-4],X.commitType.NORMAL,U[nt-2]);break;case 85:X.commit(U[nt-2],U[nt-4],X.commitType.NORMAL,U[nt]);break;case 86:X.commit(U[nt-6],U[nt-4],U[nt-2],U[nt]);break;case 87:X.commit(U[nt-6],U[nt-4],U[nt],U[nt-2]);break;case 88:X.commit(U[nt-6],U[nt-2],U[nt-4],U[nt]);break;case 89:X.commit(U[nt-6],U[nt],U[nt-4],U[nt-2]);break;case 90:X.commit(U[nt-6],U[nt-2],U[nt],U[nt-4]);break;case 91:X.commit(U[nt-6],U[nt],U[nt-2],U[nt-4]);break;case 92:X.commit(U[nt-4],U[nt-6],U[nt-2],U[nt]);break;case 93:X.commit(U[nt-4],U[nt-6],U[nt],U[nt-2]);break;case 94:X.commit(U[nt-2],U[nt-6],U[nt-4],U[nt]);break;case 95:X.commit(U[nt],U[nt-6],U[nt-4],U[nt-2]);break;case 96:X.commit(U[nt-2],U[nt-6],U[nt],U[nt-4]);break;case 97:X.commit(U[nt],U[nt-6],U[nt-2],U[nt-4]);break;case 98:X.commit(U[nt],U[nt-4],U[nt-2],U[nt-6]);break;case 99:X.commit(U[nt-2],U[nt-4],U[nt],U[nt-6]);break;case 100:X.commit(U[nt],U[nt-2],U[nt-4],U[nt-6]);break;case 101:X.commit(U[nt-2],U[nt],U[nt-4],U[nt-6]);break;case 102:X.commit(U[nt-4],U[nt-2],U[nt],U[nt-6]);break;case 103:X.commit(U[nt-4],U[nt],U[nt-2],U[nt-6]);break;case 104:X.commit(U[nt-2],U[nt-4],U[nt-6],U[nt]);break;case 105:X.commit(U[nt],U[nt-4],U[nt-6],U[nt-2]);break;case 106:X.commit(U[nt-2],U[nt],U[nt-6],U[nt-4]);break;case 107:X.commit(U[nt],U[nt-2],U[nt-6],U[nt-4]);break;case 108:X.commit(U[nt-4],U[nt-2],U[nt-6],U[nt]);break;case 109:X.commit(U[nt-4],U[nt],U[nt-6],U[nt-2]);break;case 110:this.$="";break;case 111:this.$=U[nt];break;case 112:this.$=X.commitType.NORMAL;break;case 113:this.$=X.commitType.REVERSE;break;case 114:this.$=X.commitType.HIGHLIGHT;break}},table:[{3:1,4:2,5:a,7:f,13:p,46:w},{1:[3]},{3:7,4:2,5:a,7:f,13:p,46:w},{6:8,7:m,8:[1,9],9:[1,10],10:11,13:b},i(E,[2,117]),i(E,[2,118]),i(E,[2,119]),{1:[2,1]},{7:[1,13]},{6:14,7:m,10:11,13:b},{8:[1,15]},i(_,[2,9],{11:16,12:[1,17]}),i(A,[2,8]),{1:[2,2]},{7:[1,18]},{6:19,7:m,10:11,13:b},{7:[2,6],13:[1,22],14:20,15:21,16:23,17:24,18:25,19:[1,26],21:[1,27],23:[1,28],24:[1,29],25:30,26:[1,31],28:[1,35],31:[1,34],36:[1,33],39:[1,32]},i(A,[2,7]),{1:[2,3]},{7:[1,36]},i(_,[2,10]),{4:37,7:f,13:p,46:w},i(_,[2,12]),i(I,[2,13]),i(I,[2,14]),i(I,[2,15]),{20:[1,38]},{22:[1,39]},i(I,[2,18]),i(I,[2,19]),i(I,[2,20]),{27:40,33:B,45:N},i(I,[2,110],{40:43,32:[1,46],33:[1,48],34:[1,44],37:[1,45],41:[1,47]}),{27:49,33:B,45:N},{32:[1,50],34:[1,51]},{27:52,33:B,45:N},{1:[2,4]},i(_,[2,11]),i(I,[2,16]),i(I,[2,17]),i(I,[2,21]),i(R,[2,115]),i(R,[2,116]),i(I,[2,45]),{33:[1,53]},{38:54,42:z,43:W,44:et},{33:[1,58]},{33:[1,59]},i(I,[2,111]),i(I,[2,29],{32:[1,60],34:[1,62],37:[1,61]}),{33:[1,63]},{33:[1,64],35:[1,65]},i(I,[2,22],{29:[1,66]}),i(I,[2,46],{32:[1,68],37:[1,67],41:[1,69]}),i(I,[2,47],{32:[1,71],34:[1,70],41:[1,72]}),i(st,[2,112]),i(st,[2,113]),i(st,[2,114]),i(I,[2,50],{34:[1,73],37:[1,74],41:[1,75]}),i(I,[2,61],{32:[1,78],34:[1,76],37:[1,77]}),{33:[1,79]},{38:80,42:z,43:W,44:et},{33:[1,81]},i(I,[2,24],{34:[1,82]}),{32:[1,83]},{32:[1,84]},{30:[1,85]},{38:86,42:z,43:W,44:et},{33:[1,87]},{33:[1,88]},{33:[1,89]},{33:[1,90]},{33:[1,91]},{33:[1,92]},{38:93,42:z,43:W,44:et},{33:[1,94]},{33:[1,95]},{38:96,42:z,43:W,44:et},{33:[1,97]},i(I,[2,30],{34:[1,99],37:[1,98]}),i(I,[2,31],{32:[1,101],34:[1,100]}),i(I,[2,32],{32:[1,102],37:[1,103]}),{33:[1,104],35:[1,105]},{33:[1,106]},{33:[1,107]},i(I,[2,23]),i(I,[2,48],{32:[1,108],41:[1,109]}),i(I,[2,52],{37:[1,110],41:[1,111]}),i(I,[2,62],{32:[1,113],37:[1,112]}),i(I,[2,49],{32:[1,114],41:[1,115]}),i(I,[2,54],{34:[1,116],41:[1,117]}),i(I,[2,65],{32:[1,119],34:[1,118]}),i(I,[2,51],{37:[1,120],41:[1,121]}),i(I,[2,53],{34:[1,122],41:[1,123]}),i(I,[2,66],{34:[1,125],37:[1,124]}),i(I,[2,63],{32:[1,127],37:[1,126]}),i(I,[2,64],{32:[1,129],34:[1,128]}),i(I,[2,67],{34:[1,131],37:[1,130]}),{38:132,42:z,43:W,44:et},{33:[1,133]},{33:[1,134]},{33:[1,135]},{33:[1,136]},{38:137,42:z,43:W,44:et},i(I,[2,25]),i(I,[2,26]),i(I,[2,27]),i(I,[2,28]),{33:[1,138]},{33:[1,139]},{38:140,42:z,43:W,44:et},{33:[1,141]},{38:142,42:z,43:W,44:et},{33:[1,143]},{33:[1,144]},{33:[1,145]},{33:[1,146]},{33:[1,147]},{33:[1,148]},{33:[1,149]},{38:150,42:z,43:W,44:et},{33:[1,151]},{33:[1,152]},{33:[1,153]},{38:154,42:z,43:W,44:et},{33:[1,155]},{38:156,42:z,43:W,44:et},{33:[1,157]},{33:[1,158]},{33:[1,159]},{38:160,42:z,43:W,44:et},{33:[1,161]},i(I,[2,36],{34:[1,162]}),i(I,[2,37],{37:[1,163]}),i(I,[2,35],{32:[1,164]}),i(I,[2,38],{34:[1,165]}),i(I,[2,33],{37:[1,166]}),i(I,[2,34],{32:[1,167]}),i(I,[2,59],{41:[1,168]}),i(I,[2,72],{32:[1,169]}),i(I,[2,60],{41:[1,170]}),i(I,[2,83],{37:[1,171]}),i(I,[2,73],{32:[1,172]}),i(I,[2,82],{37:[1,173]}),i(I,[2,58],{41:[1,174]}),i(I,[2,71],{32:[1,175]}),i(I,[2,57],{41:[1,176]}),i(I,[2,77],{34:[1,177]}),i(I,[2,70],{32:[1,178]}),i(I,[2,76],{34:[1,179]}),i(I,[2,56],{41:[1,180]}),i(I,[2,84],{37:[1,181]}),i(I,[2,55],{41:[1,182]}),i(I,[2,78],{34:[1,183]}),i(I,[2,79],{34:[1,184]}),i(I,[2,85],{37:[1,185]}),i(I,[2,69],{32:[1,186]}),i(I,[2,80],{37:[1,187]}),i(I,[2,68],{32:[1,188]}),i(I,[2,74],{34:[1,189]}),i(I,[2,75],{34:[1,190]}),i(I,[2,81],{37:[1,191]}),{33:[1,192]},{38:193,42:z,43:W,44:et},{33:[1,194]},{33:[1,195]},{38:196,42:z,43:W,44:et},{33:[1,197]},{33:[1,198]},{33:[1,199]},{33:[1,200]},{38:201,42:z,43:W,44:et},{33:[1,202]},{38:203,42:z,43:W,44:et},{33:[1,204]},{33:[1,205]},{33:[1,206]},{33:[1,207]},{33:[1,208]},{33:[1,209]},{33:[1,210]},{38:211,42:z,43:W,44:et},{33:[1,212]},{33:[1,213]},{33:[1,214]},{38:215,42:z,43:W,44:et},{33:[1,216]},{38:217,42:z,43:W,44:et},{33:[1,218]},{33:[1,219]},{33:[1,220]},{38:221,42:z,43:W,44:et},i(I,[2,39]),i(I,[2,41]),i(I,[2,40]),i(I,[2,42]),i(I,[2,44]),i(I,[2,43]),i(I,[2,100]),i(I,[2,101]),i(I,[2,98]),i(I,[2,99]),i(I,[2,103]),i(I,[2,102]),i(I,[2,107]),i(I,[2,106]),i(I,[2,105]),i(I,[2,104]),i(I,[2,109]),i(I,[2,108]),i(I,[2,97]),i(I,[2,96]),i(I,[2,95]),i(I,[2,94]),i(I,[2,92]),i(I,[2,93]),i(I,[2,91]),i(I,[2,90]),i(I,[2,89]),i(I,[2,88]),i(I,[2,86]),i(I,[2,87])],defaultActions:{7:[2,1],13:[2,2],18:[2,3],36:[2,4]},parseError:function(ft,ut){if(ut.recoverable)this.trace(ft);else{var vt=new Error(ft);throw vt.hash=ut,vt}},parse:function(ft){var ut=this,vt=[0],X=[],pt=[null],U=[],Tt=this.table,nt="",It=0,Ot=0,Bt=2,Et=1,Z=U.slice.call(arguments,1),Ct=Object.create(this.lexer),xt={yy:{}};for(var Ht in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ht)&&(xt.yy[Ht]=this.yy[Ht]);Ct.setInput(ft,xt.yy),xt.yy.lexer=Ct,xt.yy.parser=this,typeof Ct.yylloc>"u"&&(Ct.yylloc={});var Le=Ct.yylloc;U.push(Le);var Ft=Ct.options&&Ct.options.ranges;typeof xt.yy.parseError=="function"?this.parseError=xt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function gn(){var te;return te=X.pop()||Ct.lex()||Et,typeof te!="number"&&(te instanceof Array&&(X=te,te=X.pop()),te=ut.symbols_[te]||te),te}for(var Se,me,Ve,Ye,ce={},ke,zt,re,se;;){if(me=vt[vt.length-1],this.defaultActions[me]?Ve=this.defaultActions[me]:((Se===null||typeof Se>"u")&&(Se=gn()),Ve=Tt[me]&&Tt[me][Se]),typeof Ve>"u"||!Ve.length||!Ve[0]){var Pe="";se=[];for(ke in Tt[me])this.terminals_[ke]&&ke>Bt&&se.push("'"+this.terminals_[ke]+"'");Ct.showPosition?Pe="Parse error on line "+(It+1)+`: -`+Ct.showPosition()+` -Expecting `+se.join(", ")+", got '"+(this.terminals_[Se]||Se)+"'":Pe="Parse error on line "+(It+1)+": Unexpected "+(Se==Et?"end of input":"'"+(this.terminals_[Se]||Se)+"'"),this.parseError(Pe,{text:Ct.match,token:this.terminals_[Se]||Se,line:Ct.yylineno,loc:Le,expected:se})}if(Ve[0]instanceof Array&&Ve.length>1)throw new Error("Parse Error: multiple actions possible at state: "+me+", token: "+Se);switch(Ve[0]){case 1:vt.push(Se),pt.push(Ct.yytext),U.push(Ct.yylloc),vt.push(Ve[1]),Se=null,Ot=Ct.yyleng,nt=Ct.yytext,It=Ct.yylineno,Le=Ct.yylloc;break;case 2:if(zt=this.productions_[Ve[1]][1],ce.$=pt[pt.length-zt],ce._$={first_line:U[U.length-(zt||1)].first_line,last_line:U[U.length-1].last_line,first_column:U[U.length-(zt||1)].first_column,last_column:U[U.length-1].last_column},Ft&&(ce._$.range=[U[U.length-(zt||1)].range[0],U[U.length-1].range[1]]),Ye=this.performAction.apply(ce,[nt,Ot,It,xt.yy,Ve[1],pt,U].concat(Z)),typeof Ye<"u")return Ye;zt&&(vt=vt.slice(0,-1*zt*2),pt=pt.slice(0,-1*zt),U=U.slice(0,-1*zt)),vt.push(this.productions_[Ve[1]][0]),pt.push(ce.$),U.push(ce._$),re=Tt[vt[vt.length-2]][vt[vt.length-1]],vt.push(re);break;case 3:return!0}}return!0}},bt=function(){var yt={EOF:1,parseError:function(ut,vt){if(this.yy.parser)this.yy.parser.parseError(ut,vt);else throw new Error(ut)},setInput:function(ft,ut){return this.yy=ut||this.yy||{},this._input=ft,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var ft=this._input[0];this.yytext+=ft,this.yyleng++,this.offset++,this.match+=ft,this.matched+=ft;var ut=ft.match(/(?:\r\n?|\n).*/g);return ut?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ft},unput:function(ft){var ut=ft.length,vt=ft.split(/(?:\r\n?|\n)/g);this._input=ft+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ut),this.offset-=ut;var X=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),vt.length-1&&(this.yylineno-=vt.length-1);var pt=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:vt?(vt.length===X.length?this.yylloc.first_column:0)+X[X.length-vt.length].length-vt[0].length:this.yylloc.first_column-ut},this.options.ranges&&(this.yylloc.range=[pt[0],pt[0]+this.yyleng-ut]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(ft){this.unput(this.match.slice(ft))},pastInput:function(){var ft=this.matched.substr(0,this.matched.length-this.match.length);return(ft.length>20?"...":"")+ft.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var ft=this.match;return ft.length<20&&(ft+=this._input.substr(0,20-ft.length)),(ft.substr(0,20)+(ft.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var ft=this.pastInput(),ut=new Array(ft.length+1).join("-");return ft+this.upcomingInput()+` -`+ut+"^"},test_match:function(ft,ut){var vt,X,pt;if(this.options.backtrack_lexer&&(pt={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(pt.yylloc.range=this.yylloc.range.slice(0))),X=ft[0].match(/(?:\r\n?|\n).*/g),X&&(this.yylineno+=X.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:X?X[X.length-1].length-X[X.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ft[0].length},this.yytext+=ft[0],this.match+=ft[0],this.matches=ft,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(ft[0].length),this.matched+=ft[0],vt=this.performAction.call(this,this.yy,this,ut,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),vt)return vt;if(this._backtrack){for(var U in pt)this[U]=pt[U];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ft,ut,vt,X;this._more||(this.yytext="",this.match="");for(var pt=this._currentRules(),U=0;Uut[0].length)){if(ut=vt,X=U,this.options.backtrack_lexer){if(ft=this.test_match(vt,pt[U]),ft!==!1)return ft;if(this._backtrack){ut=!1;continue}else return!1}else if(!this.options.flex)break}return ut?(ft=this.test_match(ut,pt[X]),ft!==!1?ft:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var ut=this.next();return ut||this.lex()},begin:function(ut){this.conditionStack.push(ut)},popState:function(){var ut=this.conditionStack.length-1;return ut>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(ut){return ut=this.conditionStack.length-1-Math.abs(ut||0),ut>=0?this.conditionStack[ut]:"INITIAL"},pushState:function(ut){this.begin(ut)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(ut,vt,X,pt){switch(X){case 0:return this.begin("acc_title"),19;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),21;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 13;case 8:break;case 9:break;case 10:return 5;case 11:return 39;case 12:return 32;case 13:return 37;case 14:return 41;case 15:return 42;case 16:return 43;case 17:return 44;case 18:return 34;case 19:return 28;case 20:return 29;case 21:return 36;case 22:return 31;case 23:return 26;case 24:return 9;case 25:return 9;case 26:return 8;case 27:return"CARET";case 28:this.begin("options");break;case 29:this.popState();break;case 30:return 12;case 31:return 35;case 32:this.begin("string");break;case 33:this.popState();break;case 34:return 33;case 35:return 30;case 36:return 45;case 37:return 7}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit(?=\s|$))/i,/^(?:id:)/i,/^(?:type:)/i,/^(?:msg:)/i,/^(?:NORMAL\b)/i,/^(?:REVERSE\b)/i,/^(?:HIGHLIGHT\b)/i,/^(?:tag:)/i,/^(?:branch(?=\s|$))/i,/^(?:order:)/i,/^(?:merge(?=\s|$))/i,/^(?:cherry-pick(?=\s|$))/i,/^(?:checkout(?=\s|$))/i,/^(?:LR\b)/i,/^(?:TB\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:[ \r\n\t]+end\b)/i,/^(?:[\s\S]+(?=[ \r\n\t]+end))/i,/^(?:["]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[0-9]+(?=\s|$))/i,/^(?:\w([-\./\w]*[-\w])?)/i,/^(?:$)/i,/^(?:\s+)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},options:{rules:[29,30],inclusive:!1},string:{rules:[33,34],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,31,32,35,36,37,38],inclusive:!0}}};return yt}();at.lexer=bt;function mt(){this.yy={}}return mt.prototype=at,at.Parser=mt,new mt}();z0t.parser=z0t;const Nze=z0t;let MY=Oe().gitGraph.mainBranchName,Bze=Oe().gitGraph.mainBranchOrder,l1={},vg=null,AF={};AF[MY]={name:MY,order:Bze};let Nf={};Nf[MY]=vg;let J1=MY,BBt="LR",ET=0;function q0t(){return GIt({length:7})}function Rze(i,a){const f=Object.create(null);return i.reduce((p,w)=>{const m=a(w);return f[m]||(f[m]=!0,p.push(w)),p},[])}const jze=function(i){BBt=i};let RBt={};const $ze=function(i){Ut.debug("options str",i),i=i&&i.trim(),i=i||"{}";try{RBt=JSON.parse(i)}catch(a){Ut.error("error while parsing gitGraph options",a.message)}},zze=function(){return RBt},qze=function(i,a,f,p){Ut.debug("Entering commit:",i,a,f,p),a=Kr.sanitizeText(a,Oe()),i=Kr.sanitizeText(i,Oe()),p=Kr.sanitizeText(p,Oe());const w={id:a||ET+"-"+q0t(),message:i,seq:ET++,type:f||LF.NORMAL,tag:p||"",parents:vg==null?[]:[vg.id],branch:J1};vg=w,l1[w.id]=w,Nf[J1]=w.id,Ut.debug("in pushCommit "+w.id)},Hze=function(i,a){if(i=Kr.sanitizeText(i,Oe()),Nf[i]===void 0)Nf[i]=vg!=null?vg.id:null,AF[i]={name:i,order:a?parseInt(a,10):null},jBt(i),Ut.debug("in createBranch");else{let f=new Error('Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout '+i+'")');throw f.hash={text:"branch "+i,token:"branch "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+i+'"']},f}},Vze=function(i,a,f,p){i=Kr.sanitizeText(i,Oe()),a=Kr.sanitizeText(a,Oe());const w=l1[Nf[J1]],m=l1[Nf[i]];if(J1===i){let E=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw E.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},E}else if(w===void 0||!w){let E=new Error('Incorrect usage of "merge". Current branch ('+J1+")has no commits");throw E.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["commit"]},E}else if(Nf[i]===void 0){let E=new Error('Incorrect usage of "merge". Branch to be merged ('+i+") does not exist");throw E.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch "+i]},E}else if(m===void 0||!m){let E=new Error('Incorrect usage of "merge". Branch to be merged ('+i+") has no commits");throw E.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"commit"']},E}else if(w===m){let E=new Error('Incorrect usage of "merge". Both branches have same head');throw E.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},E}else if(a&&l1[a]!==void 0){let E=new Error('Incorrect usage of "merge". Commit with id:'+a+" already exists, use different custom Id");throw E.hash={text:"merge "+i+a+f+p,token:"merge "+i+a+f+p,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["merge "+i+" "+a+"_UNIQUE "+f+" "+p]},E}const b={id:a||ET+"-"+q0t(),message:"merged branch "+i+" into "+J1,seq:ET++,parents:[vg==null?null:vg.id,Nf[i]],branch:J1,type:LF.MERGE,customType:f,customId:!!a,tag:p||""};vg=b,l1[b.id]=b,Nf[J1]=b.id,Ut.debug(Nf),Ut.debug("in mergeBranch")},Gze=function(i,a,f){if(Ut.debug("Entering cherryPick:",i,a,f),i=Kr.sanitizeText(i,Oe()),a=Kr.sanitizeText(a,Oe()),f=Kr.sanitizeText(f,Oe()),!i||l1[i]===void 0){let m=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw m.hash={text:"cherryPick "+i+" "+a,token:"cherryPick "+i+" "+a,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},m}let p=l1[i],w=p.branch;if(p.type===LF.MERGE){let m=new Error('Incorrect usage of "cherryPick". Source commit should not be a merge commit');throw m.hash={text:"cherryPick "+i+" "+a,token:"cherryPick "+i+" "+a,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},m}if(!a||l1[a]===void 0){if(w===J1){let E=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw E.hash={text:"cherryPick "+i+" "+a,token:"cherryPick "+i+" "+a,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},E}const m=l1[Nf[J1]];if(m===void 0||!m){let E=new Error('Incorrect usage of "cherry-pick". Current branch ('+J1+")has no commits");throw E.hash={text:"cherryPick "+i+" "+a,token:"cherryPick "+i+" "+a,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},E}const b={id:ET+"-"+q0t(),message:"cherry-picked "+p+" into "+J1,seq:ET++,parents:[vg==null?null:vg.id,p.id],branch:J1,type:LF.CHERRY_PICK,tag:f??"cherry-pick:"+p.id};vg=b,l1[b.id]=b,Nf[J1]=b.id,Ut.debug(Nf),Ut.debug("in cherryPick")}},jBt=function(i){if(i=Kr.sanitizeText(i,Oe()),Nf[i]===void 0){let a=new Error('Trying to checkout branch which is not yet created. (Help try using "branch '+i+'")');throw a.hash={text:"checkout "+i,token:"checkout "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"branch '+i+'"']},a}else{J1=i;const a=Nf[J1];vg=l1[a]}};function $Bt(i,a,f){const p=i.indexOf(a);p===-1?i.push(f):i.splice(p,1,f)}function zBt(i){const a=i.reduce((w,m)=>w.seq>m.seq?w:m,i[0]);let f="";i.forEach(function(w){w===a?f+=" *":f+=" |"});const p=[f,a.id,a.seq];for(let w in Nf)Nf[w]===a.id&&p.push(w);if(Ut.debug(p.join(" ")),a.parents&&a.parents.length==2){const w=l1[a.parents[0]];$Bt(i,a,w),i.push(l1[a.parents[1]])}else{if(a.parents.length==0)return;{const w=l1[a.parents];$Bt(i,a,w)}}i=Rze(i,w=>w.id),zBt(i)}const Uze=function(){Ut.debug(l1);const i=qBt()[0];zBt([i])},Wze=function(){l1={},vg=null;let i=Oe().gitGraph.mainBranchName,a=Oe().gitGraph.mainBranchOrder;Nf={},Nf[i]=null,AF={},AF[i]={name:i,order:a},J1=i,ET=0,hg()},Yze=function(){return Object.values(AF).map((a,f)=>a.order!==null?a:{...a,order:parseFloat(`0.${f}`,10)}).sort((a,f)=>a.order-f.order).map(({name:a})=>({name:a}))},Kze=function(){return Nf},Xze=function(){return l1},qBt=function(){const i=Object.keys(l1).map(function(a){return l1[a]});return i.forEach(function(a){Ut.debug(a.id)}),i.sort((a,f)=>a.seq-f.seq),i},Qze=function(){return J1},Zze=function(){return BBt},Jze=function(){return vg},LF={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},tqe={getConfig:()=>Oe().gitGraph,setDirection:jze,setOptions:$ze,getOptions:zze,commit:qze,branch:Hze,merge:Vze,cherryPick:Gze,checkout:jBt,prettyPrint:Uze,clear:Wze,getBranchesAsObjArray:Yze,getBranches:Kze,getCommits:Xze,getCommitsArray:qBt,getCurrentBranch:Qze,getDirection:Zze,getHead:Jze,setAccTitle:E0,getAccTitle:fg,getAccDescription:gg,setAccDescription:dg,setDiagramTitle:Nb,getDiagramTitle:pg,commitType:LF};let MF={};const $b={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},TT=8;let td={},DF={},DY=[],IF=0,C0="LR";const eqe=()=>{td={},DF={},MF={},IF=0,DY=[],C0="LR"},HBt=i=>{const a=document.createElementNS("http://www.w3.org/2000/svg","text");let f=[];typeof i=="string"?f=i.split(/\\n|\n|/gi):Array.isArray(i)?f=i:f=[];for(const p of f){const w=document.createElementNS("http://www.w3.org/2000/svg","tspan");w.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),w.setAttribute("dy","1em"),w.setAttribute("x","0"),w.setAttribute("class","row"),w.textContent=p.trim(),a.appendChild(w)}return a},VBt=(i,a,f)=>{const p=Oe().gitGraph,w=i.append("g").attr("class","commit-bullets"),m=i.append("g").attr("class","commit-labels");let b=0;C0==="TB"&&(b=30),Object.keys(a).sort((A,I)=>a[A].seq-a[I].seq).forEach(A=>{const I=a[A],B=C0==="TB"?b+10:td[I.branch].pos,N=C0==="TB"?td[I.branch].pos:b+10;if(f){let R,z=I.customType!==void 0&&I.customType!==""?I.customType:I.type;switch(z){case $b.NORMAL:R="commit-normal";break;case $b.REVERSE:R="commit-reverse";break;case $b.HIGHLIGHT:R="commit-highlight";break;case $b.MERGE:R="commit-merge";break;case $b.CHERRY_PICK:R="commit-cherry-pick";break;default:R="commit-normal"}if(z===$b.HIGHLIGHT){const W=w.append("rect");W.attr("x",N-10),W.attr("y",B-10),W.attr("height",20),W.attr("width",20),W.attr("class",`commit ${I.id} commit-highlight${td[I.branch].index%TT} ${R}-outer`),w.append("rect").attr("x",N-6).attr("y",B-6).attr("height",12).attr("width",12).attr("class",`commit ${I.id} commit${td[I.branch].index%TT} ${R}-inner`)}else if(z===$b.CHERRY_PICK)w.append("circle").attr("cx",N).attr("cy",B).attr("r",10).attr("class",`commit ${I.id} ${R}`),w.append("circle").attr("cx",N-3).attr("cy",B+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${I.id} ${R}`),w.append("circle").attr("cx",N+3).attr("cy",B+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${I.id} ${R}`),w.append("line").attr("x1",N+3).attr("y1",B+1).attr("x2",N).attr("y2",B-5).attr("stroke","#fff").attr("class",`commit ${I.id} ${R}`),w.append("line").attr("x1",N-3).attr("y1",B+1).attr("x2",N).attr("y2",B-5).attr("stroke","#fff").attr("class",`commit ${I.id} ${R}`);else{const W=w.append("circle");if(W.attr("cx",N),W.attr("cy",B),W.attr("r",I.type===$b.MERGE?9:10),W.attr("class",`commit ${I.id} commit${td[I.branch].index%TT}`),z===$b.MERGE){const et=w.append("circle");et.attr("cx",N),et.attr("cy",B),et.attr("r",6),et.attr("class",`commit ${R} ${I.id} commit${td[I.branch].index%TT}`)}z===$b.REVERSE&&w.append("path").attr("d",`M ${N-5},${B-5}L${N+5},${B+5}M${N-5},${B+5}L${N+5},${B-5}`).attr("class",`commit ${R} ${I.id} commit${td[I.branch].index%TT}`)}}if(C0==="TB"?DF[I.id]={x:N,y:b+10}:DF[I.id]={x:b+10,y:B},f){if(I.type!==$b.CHERRY_PICK&&(I.customId&&I.type===$b.MERGE||I.type!==$b.MERGE)&&p.showCommitLabel){const W=m.append("g"),et=W.insert("rect").attr("class","commit-label-bkg"),st=W.append("text").attr("x",b).attr("y",B+25).attr("class","commit-label").text(I.id);let at=st.node().getBBox();if(et.attr("x",b+10-at.width/2-2).attr("y",B+13.5).attr("width",at.width+2*2).attr("height",at.height+2*2),C0==="TB"&&(et.attr("x",N-(at.width+4*4+5)).attr("y",B-12),st.attr("x",N-(at.width+4*4)).attr("y",B+at.height-12)),C0!=="TB"&&st.attr("x",b+10-at.width/2),p.rotateCommitLabel)if(C0==="TB")st.attr("transform","rotate(-45, "+N+", "+B+")"),et.attr("transform","rotate(-45, "+N+", "+B+")");else{let bt=-7.5-(at.width+10)/25*9.5,mt=10+at.width/25*8.5;W.attr("transform","translate("+bt+", "+mt+") rotate(-45, "+b+", "+B+")")}}if(I.tag){const W=m.insert("polygon"),et=m.append("circle"),st=m.append("text").attr("y",B-16).attr("class","tag-label").text(I.tag);let at=st.node().getBBox();st.attr("x",b+10-at.width/2);const bt=at.height/2,mt=B-19.2;W.attr("class","tag-label-bkg").attr("points",` - ${b-at.width/2-4/2},${mt+2} - ${b-at.width/2-4/2},${mt-2} - ${b+10-at.width/2-4},${mt-bt-2} - ${b+10+at.width/2+4},${mt-bt-2} - ${b+10+at.width/2+4},${mt+bt+2} - ${b+10-at.width/2-4},${mt+bt+2}`),et.attr("cx",b-at.width/2+4/2).attr("cy",mt).attr("r",1.5).attr("class","tag-hole"),C0==="TB"&&(W.attr("class","tag-label-bkg").attr("points",` - ${N},${b+2} - ${N},${b-2} - ${N+10},${b-bt-2} - ${N+10+at.width+4},${b-bt-2} - ${N+10+at.width+4},${b+bt+2} - ${N+10},${b+bt+2}`).attr("transform","translate(12,12) rotate(45, "+N+","+b+")"),et.attr("cx",N+4/2).attr("cy",b).attr("transform","translate(12,12) rotate(45, "+N+","+b+")"),st.attr("x",N+5).attr("y",b+3).attr("transform","translate(14,14) rotate(45, "+N+","+b+")"))}}b+=50,b>IF&&(IF=b)})},nqe=(i,a,f)=>Object.keys(f).filter(m=>f[m].branch===a.branch&&f[m].seq>i.seq&&f[m].seq0,OF=(i,a,f=0)=>{const p=i+Math.abs(i-a)/2;if(f>5)return p;if(DY.every(b=>Math.abs(b-p)>=10))return DY.push(p),p;const m=Math.abs(i-a);return OF(i,a-m/5,f+1)},rqe=(i,a,f,p)=>{const w=DF[a.id],m=DF[f.id],b=nqe(a,f,p);let E="",_="",A=0,I=0,B=td[f.branch].index,N;if(b){E="A 10 10, 0, 0, 0,",_="A 10 10, 0, 0, 1,",A=10,I=10,B=td[f.branch].index;const R=w.ym.x&&(E="A 20 20, 0, 0, 0,",_="A 20 20, 0, 0, 1,",A=20,I=20,B=td[a.branch].index,N=`M ${w.x} ${w.y} L ${w.x} ${m.y-A} ${_} ${w.x-I} ${m.y} L ${m.x} ${m.y}`),w.x===m.x&&(B=td[a.branch].index,N=`M ${w.x} ${w.y} L ${w.x+A} ${w.y} ${E} ${w.x+I} ${m.y+A} L ${m.x} ${m.y}`)):(w.ym.y&&(E="A 20 20, 0, 0, 0,",A=20,I=20,B=td[a.branch].index,N=`M ${w.x} ${w.y} L ${m.x-A} ${w.y} ${E} ${m.x} ${w.y-I} L ${m.x} ${m.y}`),w.y===m.y&&(B=td[a.branch].index,N=`M ${w.x} ${w.y} L ${w.x} ${m.y-A} ${E} ${w.x+I} ${m.y} L ${m.x} ${m.y}`));i.append("path").attr("d",N).attr("class","arrow arrow"+B%TT)},iqe=(i,a)=>{const f=i.append("g").attr("class","commit-arrows");Object.keys(a).forEach(p=>{const w=a[p];w.parents&&w.parents.length>0&&w.parents.forEach(m=>{rqe(f,a[m],w,a)})})},sqe=(i,a)=>{const f=Oe().gitGraph,p=i.append("g");a.forEach((w,m)=>{const b=m%TT,E=td[w.name].pos,_=p.append("line");_.attr("x1",0),_.attr("y1",E),_.attr("x2",IF),_.attr("y2",E),_.attr("class","branch branch"+b),C0==="TB"&&(_.attr("y1",30),_.attr("x1",E),_.attr("y2",IF),_.attr("x2",E)),DY.push(E);let A=w.name;const I=HBt(A),B=p.insert("rect"),R=p.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+b);R.node().appendChild(I);let z=I.getBBox();B.attr("class","branchLabelBkg label"+b).attr("rx",4).attr("ry",4).attr("x",-z.width-4-(f.rotateCommitLabel===!0?30:0)).attr("y",-z.height/2+8).attr("width",z.width+18).attr("height",z.height+4),R.attr("transform","translate("+(-z.width-14-(f.rotateCommitLabel===!0?30:0))+", "+(E-z.height/2-1)+")"),C0==="TB"&&(B.attr("x",E-z.width/2-10).attr("y",0),R.attr("transform","translate("+(E-z.width/2-5)+", 0)")),C0!=="TB"&&B.attr("transform","translate(-19, "+(E-z.height/2)+")")})},aqe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Nze,db:tqe,renderer:{draw:function(i,a,f,p){eqe();const w=Oe(),m=w.gitGraph;Ut.debug("in gitgraph renderer",i+` -`,"id:",a,f),MF=p.db.getCommits();const b=p.db.getBranchesAsObjArray();C0=p.db.getDirection();const E=yr(`[id="${a}"]`);let _=0;b.forEach((A,I)=>{const B=HBt(A.name),N=E.append("g"),R=N.insert("g").attr("class","branchLabel"),z=R.insert("g").attr("class","label branch-label");z.node().appendChild(B);let W=B.getBBox();td[A.name]={pos:_,index:I},_+=50+(m.rotateCommitLabel?40:0)+(C0==="TB"?W.width/2:0),z.remove(),R.remove(),N.remove()}),VBt(E,MF,!1),m.showBranches&&sqe(E,b),iqe(E,MF),VBt(E,MF,!0),$a.insertTitle(E,"gitTitleText",m.titleTopMargin,p.db.getDiagramTitle()),AOt(void 0,E,m.diagramPadding,m.useMaxWidth??w.useMaxWidth)}},styles:i=>` +`}},Symbol.toStringTag,{value:"Module"}));var Kme=function(){var i=function(ae,ne,se,de){for(se=se||{},de=ae.length;de--;se[ae[de]]=ne);return se},s=[1,3],u=[1,6],d=[1,4],p=[1,5],v=[2,5],b=[1,12],y=[5,7,13,19,21,23,24,26,28,31,37,40,47],T=[7,13,19,21,23,24,26,28,31,37,40],_=[7,12,13,19,21,23,24,26,28,31,37,40],A=[7,13,47],P=[1,42],R=[1,41],F=[7,13,29,32,35,38,47],j=[1,55],K=[1,56],ee=[1,57],ie=[7,13,32,35,42,47],oe={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,GG:5,document:6,EOF:7,":":8,DIR:9,options:10,body:11,OPT:12,NL:13,line:14,statement:15,commitStatement:16,mergeStatement:17,cherryPickStatement:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,section:24,branchStatement:25,CHECKOUT:26,ref:27,BRANCH:28,ORDER:29,NUM:30,CHERRY_PICK:31,COMMIT_ID:32,STR:33,PARENT_COMMIT:34,COMMIT_TAG:35,EMPTYSTR:36,MERGE:37,COMMIT_TYPE:38,commitType:39,COMMIT:40,commit_arg:41,COMMIT_MSG:42,NORMAL:43,REVERSE:44,HIGHLIGHT:45,ID:46,";":47,$accept:0,$end:1},terminals_:{2:"error",5:"GG",7:"EOF",8:":",9:"DIR",12:"OPT",13:"NL",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"section",26:"CHECKOUT",28:"BRANCH",29:"ORDER",30:"NUM",31:"CHERRY_PICK",32:"COMMIT_ID",33:"STR",34:"PARENT_COMMIT",35:"COMMIT_TAG",36:"EMPTYSTR",37:"MERGE",38:"COMMIT_TYPE",40:"COMMIT",42:"COMMIT_MSG",43:"NORMAL",44:"REVERSE",45:"HIGHLIGHT",46:"ID",47:";"},productions_:[0,[3,2],[3,3],[3,4],[3,5],[6,0],[6,2],[10,2],[10,1],[11,0],[11,2],[14,2],[14,1],[15,1],[15,1],[15,1],[15,2],[15,2],[15,1],[15,1],[15,1],[15,2],[25,2],[25,4],[18,3],[18,5],[18,5],[18,7],[18,7],[18,5],[18,5],[18,5],[18,7],[18,7],[18,7],[18,7],[17,2],[17,4],[17,4],[17,4],[17,6],[17,6],[17,6],[17,6],[17,6],[17,6],[17,8],[17,8],[17,8],[17,8],[17,8],[17,8],[16,2],[16,3],[16,3],[16,5],[16,5],[16,3],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,3],[16,5],[16,5],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[41,0],[41,1],[39,1],[39,1],[39,1],[27,1],[27,1],[4,1],[4,1],[4,1]],performAction:function(ne,se,de,X,ge,W,xe){var U=W.length-1;switch(ge){case 2:return W[U];case 3:return W[U-1];case 4:return X.setDirection(W[U-3]),W[U-1];case 6:X.setOptions(W[U-1]),this.$=W[U];break;case 7:W[U-1]+=W[U],this.$=W[U-1];break;case 9:this.$=[];break;case 10:W[U-1].push(W[U]),this.$=W[U-1];break;case 11:this.$=W[U-1];break;case 16:this.$=W[U].trim(),X.setAccTitle(this.$);break;case 17:case 18:this.$=W[U].trim(),X.setAccDescription(this.$);break;case 19:X.addSection(W[U].substr(8)),this.$=W[U].substr(8);break;case 21:X.checkout(W[U]);break;case 22:X.branch(W[U]);break;case 23:X.branch(W[U-2],W[U]);break;case 24:X.cherryPick(W[U],"",void 0);break;case 25:X.cherryPick(W[U-2],"",void 0,W[U]);break;case 26:X.cherryPick(W[U-2],"",W[U]);break;case 27:X.cherryPick(W[U-4],"",W[U],W[U-2]);break;case 28:X.cherryPick(W[U-4],"",W[U-2],W[U]);break;case 29:X.cherryPick(W[U],"",W[U-2]);break;case 30:X.cherryPick(W[U],"","");break;case 31:X.cherryPick(W[U-2],"","");break;case 32:X.cherryPick(W[U-4],"","",W[U-2]);break;case 33:X.cherryPick(W[U-4],"","",W[U]);break;case 34:X.cherryPick(W[U-2],"",W[U-4],W[U]);break;case 35:X.cherryPick(W[U-2],"","",W[U]);break;case 36:X.merge(W[U],"","","");break;case 37:X.merge(W[U-2],W[U],"","");break;case 38:X.merge(W[U-2],"",W[U],"");break;case 39:X.merge(W[U-2],"","",W[U]);break;case 40:X.merge(W[U-4],W[U],"",W[U-2]);break;case 41:X.merge(W[U-4],"",W[U],W[U-2]);break;case 42:X.merge(W[U-4],"",W[U-2],W[U]);break;case 43:X.merge(W[U-4],W[U-2],W[U],"");break;case 44:X.merge(W[U-4],W[U-2],"",W[U]);break;case 45:X.merge(W[U-4],W[U],W[U-2],"");break;case 46:X.merge(W[U-6],W[U-4],W[U-2],W[U]);break;case 47:X.merge(W[U-6],W[U],W[U-4],W[U-2]);break;case 48:X.merge(W[U-6],W[U-4],W[U],W[U-2]);break;case 49:X.merge(W[U-6],W[U-2],W[U-4],W[U]);break;case 50:X.merge(W[U-6],W[U],W[U-2],W[U-4]);break;case 51:X.merge(W[U-6],W[U-2],W[U],W[U-4]);break;case 52:X.commit(W[U]);break;case 53:X.commit("","",X.commitType.NORMAL,W[U]);break;case 54:X.commit("","",W[U],"");break;case 55:X.commit("","",W[U],W[U-2]);break;case 56:X.commit("","",W[U-2],W[U]);break;case 57:X.commit("",W[U],X.commitType.NORMAL,"");break;case 58:X.commit("",W[U-2],X.commitType.NORMAL,W[U]);break;case 59:X.commit("",W[U],X.commitType.NORMAL,W[U-2]);break;case 60:X.commit("",W[U-2],W[U],"");break;case 61:X.commit("",W[U],W[U-2],"");break;case 62:X.commit("",W[U-4],W[U-2],W[U]);break;case 63:X.commit("",W[U-4],W[U],W[U-2]);break;case 64:X.commit("",W[U-2],W[U-4],W[U]);break;case 65:X.commit("",W[U],W[U-4],W[U-2]);break;case 66:X.commit("",W[U],W[U-2],W[U-4]);break;case 67:X.commit("",W[U-2],W[U],W[U-4]);break;case 68:X.commit(W[U],"",X.commitType.NORMAL,"");break;case 69:X.commit(W[U],"",X.commitType.NORMAL,W[U-2]);break;case 70:X.commit(W[U-2],"",X.commitType.NORMAL,W[U]);break;case 71:X.commit(W[U-2],"",W[U],"");break;case 72:X.commit(W[U],"",W[U-2],"");break;case 73:X.commit(W[U],W[U-2],X.commitType.NORMAL,"");break;case 74:X.commit(W[U-2],W[U],X.commitType.NORMAL,"");break;case 75:X.commit(W[U-4],"",W[U-2],W[U]);break;case 76:X.commit(W[U-4],"",W[U],W[U-2]);break;case 77:X.commit(W[U-2],"",W[U-4],W[U]);break;case 78:X.commit(W[U],"",W[U-4],W[U-2]);break;case 79:X.commit(W[U],"",W[U-2],W[U-4]);break;case 80:X.commit(W[U-2],"",W[U],W[U-4]);break;case 81:X.commit(W[U-4],W[U],W[U-2],"");break;case 82:X.commit(W[U-4],W[U-2],W[U],"");break;case 83:X.commit(W[U-2],W[U],W[U-4],"");break;case 84:X.commit(W[U],W[U-2],W[U-4],"");break;case 85:X.commit(W[U],W[U-4],W[U-2],"");break;case 86:X.commit(W[U-2],W[U-4],W[U],"");break;case 87:X.commit(W[U-4],W[U],X.commitType.NORMAL,W[U-2]);break;case 88:X.commit(W[U-4],W[U-2],X.commitType.NORMAL,W[U]);break;case 89:X.commit(W[U-2],W[U],X.commitType.NORMAL,W[U-4]);break;case 90:X.commit(W[U],W[U-2],X.commitType.NORMAL,W[U-4]);break;case 91:X.commit(W[U],W[U-4],X.commitType.NORMAL,W[U-2]);break;case 92:X.commit(W[U-2],W[U-4],X.commitType.NORMAL,W[U]);break;case 93:X.commit(W[U-6],W[U-4],W[U-2],W[U]);break;case 94:X.commit(W[U-6],W[U-4],W[U],W[U-2]);break;case 95:X.commit(W[U-6],W[U-2],W[U-4],W[U]);break;case 96:X.commit(W[U-6],W[U],W[U-4],W[U-2]);break;case 97:X.commit(W[U-6],W[U-2],W[U],W[U-4]);break;case 98:X.commit(W[U-6],W[U],W[U-2],W[U-4]);break;case 99:X.commit(W[U-4],W[U-6],W[U-2],W[U]);break;case 100:X.commit(W[U-4],W[U-6],W[U],W[U-2]);break;case 101:X.commit(W[U-2],W[U-6],W[U-4],W[U]);break;case 102:X.commit(W[U],W[U-6],W[U-4],W[U-2]);break;case 103:X.commit(W[U-2],W[U-6],W[U],W[U-4]);break;case 104:X.commit(W[U],W[U-6],W[U-2],W[U-4]);break;case 105:X.commit(W[U],W[U-4],W[U-2],W[U-6]);break;case 106:X.commit(W[U-2],W[U-4],W[U],W[U-6]);break;case 107:X.commit(W[U],W[U-2],W[U-4],W[U-6]);break;case 108:X.commit(W[U-2],W[U],W[U-4],W[U-6]);break;case 109:X.commit(W[U-4],W[U-2],W[U],W[U-6]);break;case 110:X.commit(W[U-4],W[U],W[U-2],W[U-6]);break;case 111:X.commit(W[U-2],W[U-4],W[U-6],W[U]);break;case 112:X.commit(W[U],W[U-4],W[U-6],W[U-2]);break;case 113:X.commit(W[U-2],W[U],W[U-6],W[U-4]);break;case 114:X.commit(W[U],W[U-2],W[U-6],W[U-4]);break;case 115:X.commit(W[U-4],W[U-2],W[U-6],W[U]);break;case 116:X.commit(W[U-4],W[U],W[U-6],W[U-2]);break;case 117:this.$="";break;case 118:this.$=W[U];break;case 119:this.$=X.commitType.NORMAL;break;case 120:this.$=X.commitType.REVERSE;break;case 121:this.$=X.commitType.HIGHLIGHT;break}},table:[{3:1,4:2,5:s,7:u,13:d,47:p},{1:[3]},{3:7,4:2,5:s,7:u,13:d,47:p},{6:8,7:v,8:[1,9],9:[1,10],10:11,13:b},i(y,[2,124]),i(y,[2,125]),i(y,[2,126]),{1:[2,1]},{7:[1,13]},{6:14,7:v,10:11,13:b},{8:[1,15]},i(T,[2,9],{11:16,12:[1,17]}),i(_,[2,8]),{1:[2,2]},{7:[1,18]},{6:19,7:v,10:11,13:b},{7:[2,6],13:[1,22],14:20,15:21,16:23,17:24,18:25,19:[1,26],21:[1,27],23:[1,28],24:[1,29],25:30,26:[1,31],28:[1,35],31:[1,34],37:[1,33],40:[1,32]},i(_,[2,7]),{1:[2,3]},{7:[1,36]},i(T,[2,10]),{4:37,7:u,13:d,47:p},i(T,[2,12]),i(A,[2,13]),i(A,[2,14]),i(A,[2,15]),{20:[1,38]},{22:[1,39]},i(A,[2,18]),i(A,[2,19]),i(A,[2,20]),{27:40,33:P,46:R},i(A,[2,117],{41:43,32:[1,46],33:[1,48],35:[1,44],38:[1,45],42:[1,47]}),{27:49,33:P,46:R},{32:[1,50],35:[1,51]},{27:52,33:P,46:R},{1:[2,4]},i(T,[2,11]),i(A,[2,16]),i(A,[2,17]),i(A,[2,21]),i(F,[2,122]),i(F,[2,123]),i(A,[2,52]),{33:[1,53]},{39:54,43:j,44:K,45:ee},{33:[1,58]},{33:[1,59]},i(A,[2,118]),i(A,[2,36],{32:[1,60],35:[1,62],38:[1,61]}),{33:[1,63]},{33:[1,64],36:[1,65]},i(A,[2,22],{29:[1,66]}),i(A,[2,53],{32:[1,68],38:[1,67],42:[1,69]}),i(A,[2,54],{32:[1,71],35:[1,70],42:[1,72]}),i(ie,[2,119]),i(ie,[2,120]),i(ie,[2,121]),i(A,[2,57],{35:[1,73],38:[1,74],42:[1,75]}),i(A,[2,68],{32:[1,78],35:[1,76],38:[1,77]}),{33:[1,79]},{39:80,43:j,44:K,45:ee},{33:[1,81]},i(A,[2,24],{34:[1,82],35:[1,83]}),{32:[1,84]},{32:[1,85]},{30:[1,86]},{39:87,43:j,44:K,45:ee},{33:[1,88]},{33:[1,89]},{33:[1,90]},{33:[1,91]},{33:[1,92]},{33:[1,93]},{39:94,43:j,44:K,45:ee},{33:[1,95]},{33:[1,96]},{39:97,43:j,44:K,45:ee},{33:[1,98]},i(A,[2,37],{35:[1,100],38:[1,99]}),i(A,[2,38],{32:[1,102],35:[1,101]}),i(A,[2,39],{32:[1,103],38:[1,104]}),{33:[1,105]},{33:[1,106],36:[1,107]},{33:[1,108]},{33:[1,109]},i(A,[2,23]),i(A,[2,55],{32:[1,110],42:[1,111]}),i(A,[2,59],{38:[1,112],42:[1,113]}),i(A,[2,69],{32:[1,115],38:[1,114]}),i(A,[2,56],{32:[1,116],42:[1,117]}),i(A,[2,61],{35:[1,118],42:[1,119]}),i(A,[2,72],{32:[1,121],35:[1,120]}),i(A,[2,58],{38:[1,122],42:[1,123]}),i(A,[2,60],{35:[1,124],42:[1,125]}),i(A,[2,73],{35:[1,127],38:[1,126]}),i(A,[2,70],{32:[1,129],38:[1,128]}),i(A,[2,71],{32:[1,131],35:[1,130]}),i(A,[2,74],{35:[1,133],38:[1,132]}),{39:134,43:j,44:K,45:ee},{33:[1,135]},{33:[1,136]},{33:[1,137]},{33:[1,138]},{39:139,43:j,44:K,45:ee},i(A,[2,25],{35:[1,140]}),i(A,[2,26],{34:[1,141]}),i(A,[2,31],{34:[1,142]}),i(A,[2,29],{34:[1,143]}),i(A,[2,30],{34:[1,144]}),{33:[1,145]},{33:[1,146]},{39:147,43:j,44:K,45:ee},{33:[1,148]},{39:149,43:j,44:K,45:ee},{33:[1,150]},{33:[1,151]},{33:[1,152]},{33:[1,153]},{33:[1,154]},{33:[1,155]},{33:[1,156]},{39:157,43:j,44:K,45:ee},{33:[1,158]},{33:[1,159]},{33:[1,160]},{39:161,43:j,44:K,45:ee},{33:[1,162]},{39:163,43:j,44:K,45:ee},{33:[1,164]},{33:[1,165]},{33:[1,166]},{39:167,43:j,44:K,45:ee},{33:[1,168]},i(A,[2,43],{35:[1,169]}),i(A,[2,44],{38:[1,170]}),i(A,[2,42],{32:[1,171]}),i(A,[2,45],{35:[1,172]}),i(A,[2,40],{38:[1,173]}),i(A,[2,41],{32:[1,174]}),{33:[1,175],36:[1,176]},{33:[1,177]},{33:[1,178]},{33:[1,179]},{33:[1,180]},i(A,[2,66],{42:[1,181]}),i(A,[2,79],{32:[1,182]}),i(A,[2,67],{42:[1,183]}),i(A,[2,90],{38:[1,184]}),i(A,[2,80],{32:[1,185]}),i(A,[2,89],{38:[1,186]}),i(A,[2,65],{42:[1,187]}),i(A,[2,78],{32:[1,188]}),i(A,[2,64],{42:[1,189]}),i(A,[2,84],{35:[1,190]}),i(A,[2,77],{32:[1,191]}),i(A,[2,83],{35:[1,192]}),i(A,[2,63],{42:[1,193]}),i(A,[2,91],{38:[1,194]}),i(A,[2,62],{42:[1,195]}),i(A,[2,85],{35:[1,196]}),i(A,[2,86],{35:[1,197]}),i(A,[2,92],{38:[1,198]}),i(A,[2,76],{32:[1,199]}),i(A,[2,87],{38:[1,200]}),i(A,[2,75],{32:[1,201]}),i(A,[2,81],{35:[1,202]}),i(A,[2,82],{35:[1,203]}),i(A,[2,88],{38:[1,204]}),{33:[1,205]},{39:206,43:j,44:K,45:ee},{33:[1,207]},{33:[1,208]},{39:209,43:j,44:K,45:ee},{33:[1,210]},i(A,[2,27]),i(A,[2,32]),i(A,[2,28]),i(A,[2,33]),i(A,[2,34]),i(A,[2,35]),{33:[1,211]},{33:[1,212]},{33:[1,213]},{39:214,43:j,44:K,45:ee},{33:[1,215]},{39:216,43:j,44:K,45:ee},{33:[1,217]},{33:[1,218]},{33:[1,219]},{33:[1,220]},{33:[1,221]},{33:[1,222]},{33:[1,223]},{39:224,43:j,44:K,45:ee},{33:[1,225]},{33:[1,226]},{33:[1,227]},{39:228,43:j,44:K,45:ee},{33:[1,229]},{39:230,43:j,44:K,45:ee},{33:[1,231]},{33:[1,232]},{33:[1,233]},{39:234,43:j,44:K,45:ee},i(A,[2,46]),i(A,[2,48]),i(A,[2,47]),i(A,[2,49]),i(A,[2,51]),i(A,[2,50]),i(A,[2,107]),i(A,[2,108]),i(A,[2,105]),i(A,[2,106]),i(A,[2,110]),i(A,[2,109]),i(A,[2,114]),i(A,[2,113]),i(A,[2,112]),i(A,[2,111]),i(A,[2,116]),i(A,[2,115]),i(A,[2,104]),i(A,[2,103]),i(A,[2,102]),i(A,[2,101]),i(A,[2,99]),i(A,[2,100]),i(A,[2,98]),i(A,[2,97]),i(A,[2,96]),i(A,[2,95]),i(A,[2,93]),i(A,[2,94])],defaultActions:{7:[2,1],13:[2,2],18:[2,3],36:[2,4]},parseError:function(ne,se){if(se.recoverable)this.trace(ne);else{var de=new Error(ne);throw de.hash=se,de}},parse:function(ne){var se=this,de=[0],X=[],ge=[null],W=[],xe=this.table,U="",Fe=0,Pe=0,je=2,Ie=1,Se=W.slice.call(arguments,1),Ce=Object.create(this.lexer),ke={yy:{}};for(var Ke in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ke)&&(ke.yy[Ke]=this.yy[Ke]);Ce.setInput(ne,ke.yy),ke.yy.lexer=Ce,ke.yy.parser=this,typeof Ce.yylloc>"u"&&(Ce.yylloc={});var Ft=Ce.yylloc;W.push(Ft);var Ne=Ce.options&&Ce.options.ranges;typeof ke.yy.parseError=="function"?this.parseError=ke.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function gn(){var ht;return ht=X.pop()||Ce.lex()||Ie,typeof ht!="number"&&(ht instanceof Array&&(X=ht,ht=X.pop()),ht=se.symbols_[ht]||ht),ht}for(var _t,Et,Gt,ln,xt={},Pt,Qe,Dt,kt;;){if(Et=de[de.length-1],this.defaultActions[Et]?Gt=this.defaultActions[Et]:((_t===null||typeof _t>"u")&&(_t=gn()),Gt=xe[Et]&&xe[Et][_t]),typeof Gt>"u"||!Gt.length||!Gt[0]){var On="";kt=[];for(Pt in xe[Et])this.terminals_[Pt]&&Pt>je&&kt.push("'"+this.terminals_[Pt]+"'");Ce.showPosition?On="Parse error on line "+(Fe+1)+`: +`+Ce.showPosition()+` +Expecting `+kt.join(", ")+", got '"+(this.terminals_[_t]||_t)+"'":On="Parse error on line "+(Fe+1)+": Unexpected "+(_t==Ie?"end of input":"'"+(this.terminals_[_t]||_t)+"'"),this.parseError(On,{text:Ce.match,token:this.terminals_[_t]||_t,line:Ce.yylineno,loc:Ft,expected:kt})}if(Gt[0]instanceof Array&&Gt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Et+", token: "+_t);switch(Gt[0]){case 1:de.push(_t),ge.push(Ce.yytext),W.push(Ce.yylloc),de.push(Gt[1]),_t=null,Pe=Ce.yyleng,U=Ce.yytext,Fe=Ce.yylineno,Ft=Ce.yylloc;break;case 2:if(Qe=this.productions_[Gt[1]][1],xt.$=ge[ge.length-Qe],xt._$={first_line:W[W.length-(Qe||1)].first_line,last_line:W[W.length-1].last_line,first_column:W[W.length-(Qe||1)].first_column,last_column:W[W.length-1].last_column},Ne&&(xt._$.range=[W[W.length-(Qe||1)].range[0],W[W.length-1].range[1]]),ln=this.performAction.apply(xt,[U,Pe,Fe,ke.yy,Gt[1],ge,W].concat(Se)),typeof ln<"u")return ln;Qe&&(de=de.slice(0,-1*Qe*2),ge=ge.slice(0,-1*Qe),W=W.slice(0,-1*Qe)),de.push(this.productions_[Gt[1]][0]),ge.push(xt.$),W.push(xt._$),Dt=xe[de[de.length-2]][de[de.length-1]],de.push(Dt);break;case 3:return!0}}return!0}},pe=function(){var ae={EOF:1,parseError:function(se,de){if(this.yy.parser)this.yy.parser.parseError(se,de);else throw new Error(se)},setInput:function(ne,se){return this.yy=se||this.yy||{},this._input=ne,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var ne=this._input[0];this.yytext+=ne,this.yyleng++,this.offset++,this.match+=ne,this.matched+=ne;var se=ne.match(/(?:\r\n?|\n).*/g);return se?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ne},unput:function(ne){var se=ne.length,de=ne.split(/(?:\r\n?|\n)/g);this._input=ne+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-se),this.offset-=se;var X=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),de.length-1&&(this.yylineno-=de.length-1);var ge=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:de?(de.length===X.length?this.yylloc.first_column:0)+X[X.length-de.length].length-de[0].length:this.yylloc.first_column-se},this.options.ranges&&(this.yylloc.range=[ge[0],ge[0]+this.yyleng-se]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(ne){this.unput(this.match.slice(ne))},pastInput:function(){var ne=this.matched.substr(0,this.matched.length-this.match.length);return(ne.length>20?"...":"")+ne.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var ne=this.match;return ne.length<20&&(ne+=this._input.substr(0,20-ne.length)),(ne.substr(0,20)+(ne.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var ne=this.pastInput(),se=new Array(ne.length+1).join("-");return ne+this.upcomingInput()+` +`+se+"^"},test_match:function(ne,se){var de,X,ge;if(this.options.backtrack_lexer&&(ge={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ge.yylloc.range=this.yylloc.range.slice(0))),X=ne[0].match(/(?:\r\n?|\n).*/g),X&&(this.yylineno+=X.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:X?X[X.length-1].length-X[X.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ne[0].length},this.yytext+=ne[0],this.match+=ne[0],this.matches=ne,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(ne[0].length),this.matched+=ne[0],de=this.performAction.call(this,this.yy,this,se,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),de)return de;if(this._backtrack){for(var W in ge)this[W]=ge[W];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ne,se,de,X;this._more||(this.yytext="",this.match="");for(var ge=this._currentRules(),W=0;Wse[0].length)){if(se=de,X=W,this.options.backtrack_lexer){if(ne=this.test_match(de,ge[W]),ne!==!1)return ne;if(this._backtrack){se=!1;continue}else return!1}else if(!this.options.flex)break}return se?(ne=this.test_match(se,ge[X]),ne!==!1?ne:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var se=this.next();return se||this.lex()},begin:function(se){this.conditionStack.push(se)},popState:function(){var se=this.conditionStack.length-1;return se>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(se){return se=this.conditionStack.length-1-Math.abs(se||0),se>=0?this.conditionStack[se]:"INITIAL"},pushState:function(se){this.begin(se)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(se,de,X,ge){switch(X){case 0:return this.begin("acc_title"),19;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),21;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 13;case 8:break;case 9:break;case 10:return 5;case 11:return 40;case 12:return 32;case 13:return 38;case 14:return 42;case 15:return 43;case 16:return 44;case 17:return 45;case 18:return 35;case 19:return 28;case 20:return 29;case 21:return 37;case 22:return 31;case 23:return 34;case 24:return 26;case 25:return 9;case 26:return 9;case 27:return 8;case 28:return"CARET";case 29:this.begin("options");break;case 30:this.popState();break;case 31:return 12;case 32:return 36;case 33:this.begin("string");break;case 34:this.popState();break;case 35:return 33;case 36:return 30;case 37:return 46;case 38:return 7}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit(?=\s|$))/i,/^(?:id:)/i,/^(?:type:)/i,/^(?:msg:)/i,/^(?:NORMAL\b)/i,/^(?:REVERSE\b)/i,/^(?:HIGHLIGHT\b)/i,/^(?:tag:)/i,/^(?:branch(?=\s|$))/i,/^(?:order:)/i,/^(?:merge(?=\s|$))/i,/^(?:cherry-pick(?=\s|$))/i,/^(?:parent:)/i,/^(?:checkout(?=\s|$))/i,/^(?:LR\b)/i,/^(?:TB\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:[ \r\n\t]+end\b)/i,/^(?:[\s\S]+(?=[ \r\n\t]+end))/i,/^(?:["]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[0-9]+(?=\s|$))/i,/^(?:\w([-\./\w]*[-\w])?)/i,/^(?:$)/i,/^(?:\s+)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},options:{rules:[30,31],inclusive:!1},string:{rules:[34,35],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,32,33,36,37,38,39],inclusive:!0}}};return ae}();oe.lexer=pe;function be(){this.yy={}}return be.prototype=oe,oe.Parser=be,new be}();Kme.parser=Kme;const ttn=Kme;let oJ=qt().gitGraph.mainBranchName,ntn=qt().gitGraph.mainBranchOrder,b1={},Np=null,OR={};OR[oJ]={name:oJ,order:ntn};let F0={};F0[oJ]=Np;let sd=oJ,qUe="LR",YC=0;function Wme(){return mje({length:7})}function rtn(i,s){const u=Object.create(null);return i.reduce((d,p)=>{const v=s(p);return u[v]||(u[v]=!0,d.push(p)),d},[])}const itn=function(i){qUe=i};let HUe={};const stn=function(i){Xe.debug("options str",i),i=i&&i.trim(),i=i||"{}";try{HUe=JSON.parse(i)}catch(s){Xe.error("error while parsing gitGraph options",s.message)}},atn=function(){return HUe},otn=function(i,s,u,d){Xe.debug("Entering commit:",i,s,u,d),s=ci.sanitizeText(s,qt()),i=ci.sanitizeText(i,qt()),d=ci.sanitizeText(d,qt());const p={id:s||YC+"-"+Wme(),message:i,seq:YC++,type:u||UD.NORMAL,tag:d||"",parents:Np==null?[]:[Np.id],branch:sd};Np=p,b1[p.id]=p,F0[sd]=p.id,Xe.debug("in pushCommit "+p.id)},ctn=function(i,s){if(i=ci.sanitizeText(i,qt()),F0[i]===void 0)F0[i]=Np!=null?Np.id:null,OR[i]={name:i,order:s?parseInt(s,10):null},VUe(i),Xe.debug("in createBranch");else{let u=new Error('Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout '+i+'")');throw u.hash={text:"branch "+i,token:"branch "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+i+'"']},u}},utn=function(i,s,u,d){i=ci.sanitizeText(i,qt()),s=ci.sanitizeText(s,qt());const p=b1[F0[sd]],v=b1[F0[i]];if(sd===i){let y=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw y.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},y}else if(p===void 0||!p){let y=new Error('Incorrect usage of "merge". Current branch ('+sd+")has no commits");throw y.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["commit"]},y}else if(F0[i]===void 0){let y=new Error('Incorrect usage of "merge". Branch to be merged ('+i+") does not exist");throw y.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch "+i]},y}else if(v===void 0||!v){let y=new Error('Incorrect usage of "merge". Branch to be merged ('+i+") has no commits");throw y.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"commit"']},y}else if(p===v){let y=new Error('Incorrect usage of "merge". Both branches have same head');throw y.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},y}else if(s&&b1[s]!==void 0){let y=new Error('Incorrect usage of "merge". Commit with id:'+s+" already exists, use different custom Id");throw y.hash={text:"merge "+i+s+u+d,token:"merge "+i+s+u+d,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["merge "+i+" "+s+"_UNIQUE "+u+" "+d]},y}const b={id:s||YC+"-"+Wme(),message:"merged branch "+i+" into "+sd,seq:YC++,parents:[Np==null?null:Np.id,F0[i]],branch:sd,type:UD.MERGE,customType:u,customId:!!s,tag:d||""};Np=b,b1[b.id]=b,F0[sd]=b.id,Xe.debug(F0),Xe.debug("in mergeBranch")},ltn=function(i,s,u,d){if(Xe.debug("Entering cherryPick:",i,s,u),i=ci.sanitizeText(i,qt()),s=ci.sanitizeText(s,qt()),u=ci.sanitizeText(u,qt()),d=ci.sanitizeText(d,qt()),!i||b1[i]===void 0){let b=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw b.hash={text:"cherryPick "+i+" "+s,token:"cherryPick "+i+" "+s,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},b}let p=b1[i],v=p.branch;if(d&&!(Array.isArray(p.parents)&&p.parents.includes(d)))throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");if(p.type===UD.MERGE&&!d)throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!s||b1[s]===void 0){if(v===sd){let T=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw T.hash={text:"cherryPick "+i+" "+s,token:"cherryPick "+i+" "+s,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},T}const b=b1[F0[sd]];if(b===void 0||!b){let T=new Error('Incorrect usage of "cherry-pick". Current branch ('+sd+")has no commits");throw T.hash={text:"cherryPick "+i+" "+s,token:"cherryPick "+i+" "+s,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},T}const y={id:YC+"-"+Wme(),message:"cherry-picked "+p+" into "+sd,seq:YC++,parents:[Np==null?null:Np.id,p.id],branch:sd,type:UD.CHERRY_PICK,tag:u??`cherry-pick:${p.id}${p.type===UD.MERGE?`|parent:${d}`:""}`};Np=y,b1[y.id]=y,F0[sd]=y.id,Xe.debug(F0),Xe.debug("in cherryPick")}},VUe=function(i){if(i=ci.sanitizeText(i,qt()),F0[i]===void 0){let s=new Error('Trying to checkout branch which is not yet created. (Help try using "branch '+i+'")');throw s.hash={text:"checkout "+i,token:"checkout "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"branch '+i+'"']},s}else{sd=i;const s=F0[sd];Np=b1[s]}};function UUe(i,s,u){const d=i.indexOf(s);d===-1?i.push(u):i.splice(d,1,u)}function GUe(i){const s=i.reduce((p,v)=>p.seq>v.seq?p:v,i[0]);let u="";i.forEach(function(p){p===s?u+=" *":u+=" |"});const d=[u,s.id,s.seq];for(let p in F0)F0[p]===s.id&&d.push(p);if(Xe.debug(d.join(" ")),s.parents&&s.parents.length==2){const p=b1[s.parents[0]];UUe(i,s,p),i.push(b1[s.parents[1]])}else{if(s.parents.length==0)return;{const p=b1[s.parents];UUe(i,s,p)}}i=rtn(i,p=>p.id),GUe(i)}const htn=function(){Xe.debug(b1);const i=KUe()[0];GUe([i])},ftn=function(){b1={},Np=null;let i=qt().gitGraph.mainBranchName,s=qt().gitGraph.mainBranchOrder;F0={},F0[i]=null,OR={},OR[i]={name:i,order:s},sd=i,YC=0,Pg()},dtn=function(){return Object.values(OR).map((s,u)=>s.order!==null?s:{...s,order:parseFloat(`0.${u}`,10)}).sort((s,u)=>s.order-u.order).map(({name:s})=>({name:s}))},gtn=function(){return F0},ptn=function(){return b1},KUe=function(){const i=Object.keys(b1).map(function(s){return b1[s]});return i.forEach(function(s){Xe.debug(s.id)}),i.sort((s,u)=>s.seq-u.seq),i},btn=function(){return sd},mtn=function(){return qUe},vtn=function(){return Np},UD={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},wtn={getConfig:()=>qt().gitGraph,setDirection:itn,setOptions:stn,getOptions:atn,commit:otn,branch:ctn,merge:utn,cherryPick:ltn,checkout:VUe,prettyPrint:htn,clear:ftn,getBranchesAsObjArray:dtn,getBranches:gtn,getCommits:ptn,getCommitsArray:KUe,getCurrentBranch:btn,getDirection:mtn,getHead:vtn,setAccTitle:Bg,getAccTitle:Cp,getAccDescription:_p,setAccDescription:Sp,setDiagramTitle:cm,getDiagramTitle:Ap,commitType:UD};let NR={};const ad={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},XC=8;let H2={},H7={},cJ=[],PR=0,R0="LR";const ytn=()=>{H2={},H7={},NR={},PR=0,cJ=[],R0="LR"},WUe=i=>{const s=document.createElementNS("http://www.w3.org/2000/svg","text");let u=[];typeof i=="string"?u=i.split(/\\n|\n|/gi):Array.isArray(i)?u=i:u=[];for(const d of u){const p=document.createElementNS("http://www.w3.org/2000/svg","tspan");p.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),p.setAttribute("dy","1em"),p.setAttribute("x","0"),p.setAttribute("class","row"),p.textContent=d.trim(),s.appendChild(p)}return s},xtn=i=>{let s="",u=0;return i.forEach(d=>{const p=R0==="TB"?H7[d].y:H7[d].x;p>=u&&(s=d,u=p)}),s||void 0},YUe=(i,s,u)=>{const d=qt().gitGraph,p=i.append("g").attr("class","commit-bullets"),v=i.append("g").attr("class","commit-labels");let b=0;R0==="TB"&&(b=30);const T=Object.keys(s).sort((R,F)=>s[R].seq-s[F].seq),_=d.parallelCommits,A=10,P=40;T.forEach(R=>{const F=s[R];if(_)if(F.parents.length){const ie=xtn(F.parents);b=R0==="TB"?H7[ie].y+P:H7[ie].x+P}else b=0,R0==="TB"&&(b=30);const j=b+A,K=R0==="TB"?j:H2[F.branch].pos,ee=R0==="TB"?H2[F.branch].pos:j;if(u){let ie,oe=F.customType!==void 0&&F.customType!==""?F.customType:F.type;switch(oe){case ad.NORMAL:ie="commit-normal";break;case ad.REVERSE:ie="commit-reverse";break;case ad.HIGHLIGHT:ie="commit-highlight";break;case ad.MERGE:ie="commit-merge";break;case ad.CHERRY_PICK:ie="commit-cherry-pick";break;default:ie="commit-normal"}if(oe===ad.HIGHLIGHT){const pe=p.append("rect");pe.attr("x",ee-10),pe.attr("y",K-10),pe.attr("height",20),pe.attr("width",20),pe.attr("class",`commit ${F.id} commit-highlight${H2[F.branch].index%XC} ${ie}-outer`),p.append("rect").attr("x",ee-6).attr("y",K-6).attr("height",12).attr("width",12).attr("class",`commit ${F.id} commit${H2[F.branch].index%XC} ${ie}-inner`)}else if(oe===ad.CHERRY_PICK)p.append("circle").attr("cx",ee).attr("cy",K).attr("r",10).attr("class",`commit ${F.id} ${ie}`),p.append("circle").attr("cx",ee-3).attr("cy",K+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${F.id} ${ie}`),p.append("circle").attr("cx",ee+3).attr("cy",K+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${F.id} ${ie}`),p.append("line").attr("x1",ee+3).attr("y1",K+1).attr("x2",ee).attr("y2",K-5).attr("stroke","#fff").attr("class",`commit ${F.id} ${ie}`),p.append("line").attr("x1",ee-3).attr("y1",K+1).attr("x2",ee).attr("y2",K-5).attr("stroke","#fff").attr("class",`commit ${F.id} ${ie}`);else{const pe=p.append("circle");if(pe.attr("cx",ee),pe.attr("cy",K),pe.attr("r",F.type===ad.MERGE?9:10),pe.attr("class",`commit ${F.id} commit${H2[F.branch].index%XC}`),oe===ad.MERGE){const be=p.append("circle");be.attr("cx",ee),be.attr("cy",K),be.attr("r",6),be.attr("class",`commit ${ie} ${F.id} commit${H2[F.branch].index%XC}`)}oe===ad.REVERSE&&p.append("path").attr("d",`M ${ee-5},${K-5}L${ee+5},${K+5}M${ee-5},${K+5}L${ee+5},${K-5}`).attr("class",`commit ${ie} ${F.id} commit${H2[F.branch].index%XC}`)}}if(R0==="TB"?H7[F.id]={x:ee,y:j}:H7[F.id]={x:j,y:K},u){if(F.type!==ad.CHERRY_PICK&&(F.customId&&F.type===ad.MERGE||F.type!==ad.MERGE)&&d.showCommitLabel){const pe=v.append("g"),be=pe.insert("rect").attr("class","commit-label-bkg"),ae=pe.append("text").attr("x",b).attr("y",K+25).attr("class","commit-label").text(F.id);let ne=ae.node().getBBox();if(be.attr("x",j-ne.width/2-2).attr("y",K+13.5).attr("width",ne.width+2*2).attr("height",ne.height+2*2),R0==="TB"&&(be.attr("x",ee-(ne.width+4*4+5)).attr("y",K-12),ae.attr("x",ee-(ne.width+4*4)).attr("y",K+ne.height-12)),R0!=="TB"&&ae.attr("x",j-ne.width/2),d.rotateCommitLabel)if(R0==="TB")ae.attr("transform","rotate(-45, "+ee+", "+K+")"),be.attr("transform","rotate(-45, "+ee+", "+K+")");else{let se=-7.5-(ne.width+10)/25*9.5,de=10+ne.width/25*8.5;pe.attr("transform","translate("+se+", "+de+") rotate(-45, "+b+", "+K+")")}}if(F.tag){const pe=v.insert("polygon"),be=v.append("circle"),ae=v.append("text").attr("y",K-16).attr("class","tag-label").text(F.tag);let ne=ae.node().getBBox();ae.attr("x",j-ne.width/2);const se=ne.height/2,de=K-19.2;pe.attr("class","tag-label-bkg").attr("points",` + ${b-ne.width/2-4/2},${de+2} + ${b-ne.width/2-4/2},${de-2} + ${j-ne.width/2-4},${de-se-2} + ${j+ne.width/2+4},${de-se-2} + ${j+ne.width/2+4},${de+se+2} + ${j-ne.width/2-4},${de+se+2}`),be.attr("cx",b-ne.width/2+4/2).attr("cy",de).attr("r",1.5).attr("class","tag-hole"),R0==="TB"&&(pe.attr("class","tag-label-bkg").attr("points",` + ${ee},${b+2} + ${ee},${b-2} + ${ee+A},${b-se-2} + ${ee+A+ne.width+4},${b-se-2} + ${ee+A+ne.width+4},${b+se+2} + ${ee+A},${b+se+2}`).attr("transform","translate(12,12) rotate(45, "+ee+","+b+")"),be.attr("cx",ee+4/2).attr("cy",b).attr("transform","translate(12,12) rotate(45, "+ee+","+b+")"),ae.attr("x",ee+5).attr("y",b+3).attr("transform","translate(14,14) rotate(45, "+ee+","+b+")"))}}b+=P+A,b>PR&&(PR=b)})},ktn=(i,s,u,d,p)=>{const b=(R0==="TB"?u.x_.branch===b,T=_=>_.seq>i.seq&&_.seqT(_)&&y(_))},BR=(i,s,u=0)=>{const d=i+Math.abs(i-s)/2;if(u>5)return d;if(cJ.every(b=>Math.abs(b-d)>=10))return cJ.push(d),d;const v=Math.abs(i-s);return BR(i,s-v/5,u+1)},Etn=(i,s,u,d)=>{const p=H7[s.id],v=H7[u.id],b=ktn(s,u,p,v,d);let y="",T="",_=0,A=0,P=H2[u.branch].index;u.type===ad.MERGE&&s.id!==u.parents[0]&&(P=H2[s.branch].index);let R;if(b){y="A 10 10, 0, 0, 0,",T="A 10 10, 0, 0, 1,",_=10,A=10;const F=p.yv.x&&(y="A 20 20, 0, 0, 0,",T="A 20 20, 0, 0, 1,",_=20,A=20,u.type===ad.MERGE&&s.id!==u.parents[0]?R=`M ${p.x} ${p.y} L ${p.x} ${v.y-_} ${T} ${p.x-A} ${v.y} L ${v.x} ${v.y}`:R=`M ${p.x} ${p.y} L ${v.x+_} ${p.y} ${y} ${v.x} ${p.y+A} L ${v.x} ${v.y}`),p.x===v.x&&(R=`M ${p.x} ${p.y} L ${v.x} ${v.y}`)):(p.yv.y&&(u.type===ad.MERGE&&s.id!==u.parents[0]?R=`M ${p.x} ${p.y} L ${v.x-_} ${p.y} ${y} ${v.x} ${p.y-A} L ${v.x} ${v.y}`:R=`M ${p.x} ${p.y} L ${p.x} ${v.y+_} ${T} ${p.x+A} ${v.y} L ${v.x} ${v.y}`),p.y===v.y&&(R=`M ${p.x} ${p.y} L ${v.x} ${v.y}`));i.append("path").attr("d",R).attr("class","arrow arrow"+P%XC)},Ttn=(i,s)=>{const u=i.append("g").attr("class","commit-arrows");Object.keys(s).forEach(d=>{const p=s[d];p.parents&&p.parents.length>0&&p.parents.forEach(v=>{Etn(u,s[v],p,s)})})},Ctn=(i,s)=>{const u=qt().gitGraph,d=i.append("g");s.forEach((p,v)=>{const b=v%XC,y=H2[p.name].pos,T=d.append("line");T.attr("x1",0),T.attr("y1",y),T.attr("x2",PR),T.attr("y2",y),T.attr("class","branch branch"+b),R0==="TB"&&(T.attr("y1",30),T.attr("x1",y),T.attr("y2",PR),T.attr("x2",y)),cJ.push(y);let _=p.name;const A=WUe(_),P=d.insert("rect"),F=d.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+b);F.node().appendChild(A);let j=A.getBBox();P.attr("class","branchLabelBkg label"+b).attr("rx",4).attr("ry",4).attr("x",-j.width-4-(u.rotateCommitLabel===!0?30:0)).attr("y",-j.height/2+8).attr("width",j.width+18).attr("height",j.height+4),F.attr("transform","translate("+(-j.width-14-(u.rotateCommitLabel===!0?30:0))+", "+(y-j.height/2-1)+")"),R0==="TB"&&(P.attr("x",y-j.width/2-10).attr("y",0),F.attr("transform","translate("+(y-j.width/2-5)+", 0)")),R0!=="TB"&&P.attr("transform","translate(-19, "+(y-j.height/2)+")")})},Stn=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:ttn,db:wtn,renderer:{draw:function(i,s,u,d){ytn();const p=qt(),v=p.gitGraph;Xe.debug("in gitgraph renderer",i+` +`,"id:",s,u),NR=d.db.getCommits();const b=d.db.getBranchesAsObjArray();R0=d.db.getDirection();const y=Ir(`[id="${s}"]`);let T=0;b.forEach((_,A)=>{const P=WUe(_.name),R=y.append("g"),F=R.insert("g").attr("class","branchLabel"),j=F.insert("g").attr("class","label branch-label");j.node().appendChild(P);let K=P.getBBox();H2[_.name]={pos:T,index:A},T+=50+(v.rotateCommitLabel?40:0)+(R0==="TB"?K.width/2:0),j.remove(),F.remove(),R.remove()}),YUe(y,NR,!1),v.showBranches&&Ctn(y,b),Ttn(y,NR),YUe(y,NR,!0),Ao.insertTitle(y,"gitTitleText",v.titleTopMargin,d.db.getDiagramTitle()),e$e(void 0,y,v.diagramPadding,v.useMaxWidth??p.useMaxWidth)}},styles:i=>` .commit-id, .commit-msg, .branch-label { @@ -295,12 +569,12 @@ Expecting `+se.join(", ")+", got '"+(this.terminals_[Se]||Se)+"'":Pe="Parse erro font-family: 'trebuchet ms', verdana, arial, sans-serif; font-family: var(--mermaid-font-family); } - ${[0,1,2,3,4,5,6,7].map(a=>` - .branch-label${a} { fill: ${i["gitBranchLabel"+a]}; } - .commit${a} { stroke: ${i["git"+a]}; fill: ${i["git"+a]}; } - .commit-highlight${a} { stroke: ${i["gitInv"+a]}; fill: ${i["gitInv"+a]}; } - .label${a} { fill: ${i["git"+a]}; } - .arrow${a} { stroke: ${i["git"+a]}; } + ${[0,1,2,3,4,5,6,7].map(s=>` + .branch-label${s} { fill: ${i["gitBranchLabel"+s]}; } + .commit${s} { stroke: ${i["git"+s]}; fill: ${i["git"+s]}; } + .commit-highlight${s} { stroke: ${i["gitInv"+s]}; fill: ${i["gitInv"+s]}; } + .label${s} { fill: ${i["git"+s]}; } + .arrow${s} { stroke: ${i["git"+s]}; } `).join(` `)} @@ -337,16 +611,16 @@ Expecting `+se.join(", ")+", got '"+(this.terminals_[Se]||Se)+"'":Pe="Parse erro font-size: 18px; fill: ${i.textColor}; } -`}},Symbol.toStringTag,{value:"Module"}));var H0t=function(){var i=function(U,Tt,nt,It){for(nt=nt||{},It=U.length;It--;nt[U[It]]=Tt);return nt},a=[6,8,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,32,33,35,37],f=[1,25],p=[1,26],w=[1,27],m=[1,28],b=[1,29],E=[1,30],_=[1,31],A=[1,9],I=[1,10],B=[1,11],N=[1,12],R=[1,13],z=[1,14],W=[1,15],et=[1,16],st=[1,18],at=[1,19],bt=[1,20],mt=[1,21],yt=[1,22],ft=[1,24],ut=[1,32],vt={trace:function(){},yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,dateFormat:19,inclusiveEndDates:20,topAxis:21,axisFormat:22,tickInterval:23,excludes:24,includes:25,todayMarker:26,title:27,acc_title:28,acc_title_value:29,acc_descr:30,acc_descr_value:31,acc_descr_multiline_value:32,section:33,clickStatement:34,taskTxt:35,taskData:36,click:37,callbackname:38,callbackargs:39,href:40,clickStatementDebug:41,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",19:"dateFormat",20:"inclusiveEndDates",21:"topAxis",22:"axisFormat",23:"tickInterval",24:"excludes",25:"includes",26:"todayMarker",27:"title",28:"acc_title",29:"acc_title_value",30:"acc_descr",31:"acc_descr_value",32:"acc_descr_multiline_value",33:"section",35:"taskTxt",36:"taskData",37:"click",38:"callbackname",39:"callbackargs",40:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[34,2],[34,3],[34,3],[34,4],[34,3],[34,4],[34,2],[41,2],[41,3],[41,3],[41,4],[41,3],[41,4],[41,2]],performAction:function(Tt,nt,It,Ot,Bt,Et,Z){var Ct=Et.length-1;switch(Bt){case 1:return Et[Ct-1];case 2:this.$=[];break;case 3:Et[Ct-1].push(Et[Ct]),this.$=Et[Ct-1];break;case 4:case 5:this.$=Et[Ct];break;case 6:case 7:this.$=[];break;case 8:Ot.setWeekday("monday");break;case 9:Ot.setWeekday("tuesday");break;case 10:Ot.setWeekday("wednesday");break;case 11:Ot.setWeekday("thursday");break;case 12:Ot.setWeekday("friday");break;case 13:Ot.setWeekday("saturday");break;case 14:Ot.setWeekday("sunday");break;case 15:Ot.setDateFormat(Et[Ct].substr(11)),this.$=Et[Ct].substr(11);break;case 16:Ot.enableInclusiveEndDates(),this.$=Et[Ct].substr(18);break;case 17:Ot.TopAxis(),this.$=Et[Ct].substr(8);break;case 18:Ot.setAxisFormat(Et[Ct].substr(11)),this.$=Et[Ct].substr(11);break;case 19:Ot.setTickInterval(Et[Ct].substr(13)),this.$=Et[Ct].substr(13);break;case 20:Ot.setExcludes(Et[Ct].substr(9)),this.$=Et[Ct].substr(9);break;case 21:Ot.setIncludes(Et[Ct].substr(9)),this.$=Et[Ct].substr(9);break;case 22:Ot.setTodayMarker(Et[Ct].substr(12)),this.$=Et[Ct].substr(12);break;case 24:Ot.setDiagramTitle(Et[Ct].substr(6)),this.$=Et[Ct].substr(6);break;case 25:this.$=Et[Ct].trim(),Ot.setAccTitle(this.$);break;case 26:case 27:this.$=Et[Ct].trim(),Ot.setAccDescription(this.$);break;case 28:Ot.addSection(Et[Ct].substr(8)),this.$=Et[Ct].substr(8);break;case 30:Ot.addTask(Et[Ct-1],Et[Ct]),this.$="task";break;case 31:this.$=Et[Ct-1],Ot.setClickEvent(Et[Ct-1],Et[Ct],null);break;case 32:this.$=Et[Ct-2],Ot.setClickEvent(Et[Ct-2],Et[Ct-1],Et[Ct]);break;case 33:this.$=Et[Ct-2],Ot.setClickEvent(Et[Ct-2],Et[Ct-1],null),Ot.setLink(Et[Ct-2],Et[Ct]);break;case 34:this.$=Et[Ct-3],Ot.setClickEvent(Et[Ct-3],Et[Ct-2],Et[Ct-1]),Ot.setLink(Et[Ct-3],Et[Ct]);break;case 35:this.$=Et[Ct-2],Ot.setClickEvent(Et[Ct-2],Et[Ct],null),Ot.setLink(Et[Ct-2],Et[Ct-1]);break;case 36:this.$=Et[Ct-3],Ot.setClickEvent(Et[Ct-3],Et[Ct-1],Et[Ct]),Ot.setLink(Et[Ct-3],Et[Ct-2]);break;case 37:this.$=Et[Ct-1],Ot.setLink(Et[Ct-1],Et[Ct]);break;case 38:case 44:this.$=Et[Ct-1]+" "+Et[Ct];break;case 39:case 40:case 42:this.$=Et[Ct-2]+" "+Et[Ct-1]+" "+Et[Ct];break;case 41:case 43:this.$=Et[Ct-3]+" "+Et[Ct-2]+" "+Et[Ct-1]+" "+Et[Ct];break}},table:[{3:1,4:[1,2]},{1:[3]},i(a,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:f,13:p,14:w,15:m,16:b,17:E,18:_,19:A,20:I,21:B,22:N,23:R,24:z,25:W,26:et,27:st,28:at,30:bt,32:mt,33:yt,34:23,35:ft,37:ut},i(a,[2,7],{1:[2,1]}),i(a,[2,3]),{9:33,11:17,12:f,13:p,14:w,15:m,16:b,17:E,18:_,19:A,20:I,21:B,22:N,23:R,24:z,25:W,26:et,27:st,28:at,30:bt,32:mt,33:yt,34:23,35:ft,37:ut},i(a,[2,5]),i(a,[2,6]),i(a,[2,15]),i(a,[2,16]),i(a,[2,17]),i(a,[2,18]),i(a,[2,19]),i(a,[2,20]),i(a,[2,21]),i(a,[2,22]),i(a,[2,23]),i(a,[2,24]),{29:[1,34]},{31:[1,35]},i(a,[2,27]),i(a,[2,28]),i(a,[2,29]),{36:[1,36]},i(a,[2,8]),i(a,[2,9]),i(a,[2,10]),i(a,[2,11]),i(a,[2,12]),i(a,[2,13]),i(a,[2,14]),{38:[1,37],40:[1,38]},i(a,[2,4]),i(a,[2,25]),i(a,[2,26]),i(a,[2,30]),i(a,[2,31],{39:[1,39],40:[1,40]}),i(a,[2,37],{38:[1,41]}),i(a,[2,32],{40:[1,42]}),i(a,[2,33]),i(a,[2,35],{39:[1,43]}),i(a,[2,34]),i(a,[2,36])],defaultActions:{},parseError:function(Tt,nt){if(nt.recoverable)this.trace(Tt);else{var It=new Error(Tt);throw It.hash=nt,It}},parse:function(Tt){var nt=this,It=[0],Ot=[],Bt=[null],Et=[],Z=this.table,Ct="",xt=0,Ht=0,Le=2,Ft=1,gn=Et.slice.call(arguments,1),Se=Object.create(this.lexer),me={yy:{}};for(var Ve in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ve)&&(me.yy[Ve]=this.yy[Ve]);Se.setInput(Tt,me.yy),me.yy.lexer=Se,me.yy.parser=this,typeof Se.yylloc>"u"&&(Se.yylloc={});var Ye=Se.yylloc;Et.push(Ye);var ce=Se.options&&Se.options.ranges;typeof me.yy.parseError=="function"?this.parseError=me.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ke(){var ws;return ws=Ot.pop()||Se.lex()||Ft,typeof ws!="number"&&(ws instanceof Array&&(Ot=ws,ws=Ot.pop()),ws=nt.symbols_[ws]||ws),ws}for(var zt,re,se,Pe,te={},Me,de,on,ni;;){if(re=It[It.length-1],this.defaultActions[re]?se=this.defaultActions[re]:((zt===null||typeof zt>"u")&&(zt=ke()),se=Z[re]&&Z[re][zt]),typeof se>"u"||!se.length||!se[0]){var Ks="";ni=[];for(Me in Z[re])this.terminals_[Me]&&Me>Le&&ni.push("'"+this.terminals_[Me]+"'");Se.showPosition?Ks="Parse error on line "+(xt+1)+`: -`+Se.showPosition()+` -Expecting `+ni.join(", ")+", got '"+(this.terminals_[zt]||zt)+"'":Ks="Parse error on line "+(xt+1)+": Unexpected "+(zt==Ft?"end of input":"'"+(this.terminals_[zt]||zt)+"'"),this.parseError(Ks,{text:Se.match,token:this.terminals_[zt]||zt,line:Se.yylineno,loc:Ye,expected:ni})}if(se[0]instanceof Array&&se.length>1)throw new Error("Parse Error: multiple actions possible at state: "+re+", token: "+zt);switch(se[0]){case 1:It.push(zt),Bt.push(Se.yytext),Et.push(Se.yylloc),It.push(se[1]),zt=null,Ht=Se.yyleng,Ct=Se.yytext,xt=Se.yylineno,Ye=Se.yylloc;break;case 2:if(de=this.productions_[se[1]][1],te.$=Bt[Bt.length-de],te._$={first_line:Et[Et.length-(de||1)].first_line,last_line:Et[Et.length-1].last_line,first_column:Et[Et.length-(de||1)].first_column,last_column:Et[Et.length-1].last_column},ce&&(te._$.range=[Et[Et.length-(de||1)].range[0],Et[Et.length-1].range[1]]),Pe=this.performAction.apply(te,[Ct,Ht,xt,me.yy,se[1],Bt,Et].concat(gn)),typeof Pe<"u")return Pe;de&&(It=It.slice(0,-1*de*2),Bt=Bt.slice(0,-1*de),Et=Et.slice(0,-1*de)),It.push(this.productions_[se[1]][0]),Bt.push(te.$),Et.push(te._$),on=Z[It[It.length-2]][It[It.length-1]],It.push(on);break;case 3:return!0}}return!0}},X=function(){var U={EOF:1,parseError:function(nt,It){if(this.yy.parser)this.yy.parser.parseError(nt,It);else throw new Error(nt)},setInput:function(Tt,nt){return this.yy=nt||this.yy||{},this._input=Tt,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Tt=this._input[0];this.yytext+=Tt,this.yyleng++,this.offset++,this.match+=Tt,this.matched+=Tt;var nt=Tt.match(/(?:\r\n?|\n).*/g);return nt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Tt},unput:function(Tt){var nt=Tt.length,It=Tt.split(/(?:\r\n?|\n)/g);this._input=Tt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-nt),this.offset-=nt;var Ot=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),It.length-1&&(this.yylineno-=It.length-1);var Bt=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:It?(It.length===Ot.length?this.yylloc.first_column:0)+Ot[Ot.length-It.length].length-It[0].length:this.yylloc.first_column-nt},this.options.ranges&&(this.yylloc.range=[Bt[0],Bt[0]+this.yyleng-nt]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Tt){this.unput(this.match.slice(Tt))},pastInput:function(){var Tt=this.matched.substr(0,this.matched.length-this.match.length);return(Tt.length>20?"...":"")+Tt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Tt=this.match;return Tt.length<20&&(Tt+=this._input.substr(0,20-Tt.length)),(Tt.substr(0,20)+(Tt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Tt=this.pastInput(),nt=new Array(Tt.length+1).join("-");return Tt+this.upcomingInput()+` -`+nt+"^"},test_match:function(Tt,nt){var It,Ot,Bt;if(this.options.backtrack_lexer&&(Bt={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Bt.yylloc.range=this.yylloc.range.slice(0))),Ot=Tt[0].match(/(?:\r\n?|\n).*/g),Ot&&(this.yylineno+=Ot.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Ot?Ot[Ot.length-1].length-Ot[Ot.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Tt[0].length},this.yytext+=Tt[0],this.match+=Tt[0],this.matches=Tt,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Tt[0].length),this.matched+=Tt[0],It=this.performAction.call(this,this.yy,this,nt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),It)return It;if(this._backtrack){for(var Et in Bt)this[Et]=Bt[Et];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Tt,nt,It,Ot;this._more||(this.yytext="",this.match="");for(var Bt=this._currentRules(),Et=0;Etnt[0].length)){if(nt=It,Ot=Et,this.options.backtrack_lexer){if(Tt=this.test_match(It,Bt[Et]),Tt!==!1)return Tt;if(this._backtrack){nt=!1;continue}else return!1}else if(!this.options.flex)break}return nt?(Tt=this.test_match(nt,Bt[Ot]),Tt!==!1?Tt:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var nt=this.next();return nt||this.lex()},begin:function(nt){this.conditionStack.push(nt)},popState:function(){var nt=this.conditionStack.length-1;return nt>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(nt){return nt=this.conditionStack.length-1-Math.abs(nt||0),nt>=0?this.conditionStack[nt]:"INITIAL"},pushState:function(nt){this.begin(nt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(nt,It,Ot,Bt){switch(Ot){case 0:return this.begin("open_directive"),"open_directive";case 1:return this.begin("acc_title"),28;case 2:return this.popState(),"acc_title_value";case 3:return this.begin("acc_descr"),30;case 4:return this.popState(),"acc_descr_value";case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:break;case 9:break;case 10:break;case 11:return 10;case 12:break;case 13:break;case 14:break;case 15:this.begin("href");break;case 16:this.popState();break;case 17:return 40;case 18:this.begin("callbackname");break;case 19:this.popState();break;case 20:this.popState(),this.begin("callbackargs");break;case 21:return 38;case 22:this.popState();break;case 23:return 39;case 24:this.begin("click");break;case 25:this.popState();break;case 26:return 37;case 27:return 4;case 28:return 19;case 29:return 20;case 30:return 21;case 31:return 22;case 32:return 23;case 33:return 25;case 34:return 24;case 35:return 26;case 36:return 12;case 37:return 13;case 38:return 14;case 39:return 15;case 40:return 16;case 41:return 17;case 42:return 18;case 43:return"date";case 44:return 27;case 45:return"accDescription";case 46:return 33;case 47:return 35;case 48:return 36;case 49:return":";case 50:return 6;case 51:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},callbackargs:{rules:[22,23],inclusive:!1},callbackname:{rules:[19,20,21],inclusive:!1},href:{rules:[16,17],inclusive:!1},click:{rules:[25,26],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,18,24,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],inclusive:!0}}};return U}();vt.lexer=X;function pt(){this.yy={}}return pt.prototype=vt,vt.Parser=pt,new pt}();H0t.parser=H0t;const oqe=H0t;var GBt={exports:{}};(function(i,a){(function(f,p){i.exports=p()})(b0,function(){var f="day";return function(p,w,m){var b=function(A){return A.add(4-A.isoWeekday(),f)},E=w.prototype;E.isoWeekYear=function(){return b(this).year()},E.isoWeek=function(A){if(!this.$utils().u(A))return this.add(7*(A-this.isoWeek()),f);var I,B,N,R,z=b(this),W=(I=this.isoWeekYear(),B=this.$u,N=(B?m.utc:m)().year(I).startOf("year"),R=4-N.isoWeekday(),N.isoWeekday()>4&&(R+=7),N.add(R,f));return z.diff(W,"week")+1},E.isoWeekday=function(A){return this.$utils().u(A)?this.day()||7:this.day(this.day()%7?A:A-7)};var _=E.startOf;E.startOf=function(A,I){var B=this.$utils(),N=!!B.u(I)||I;return B.p(A)==="isoweek"?N?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):_.bind(this)(A,I)}}})})(GBt);var cqe=GBt.exports;const uqe=G7(cqe);var UBt={exports:{}};(function(i,a){(function(f,p){i.exports=p()})(b0,function(){var f={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},p=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,w=/\d\d/,m=/\d\d?/,b=/\d*[^-_:/,()\s\d]+/,E={},_=function(W){return(W=+W)+(W>68?1900:2e3)},A=function(W){return function(et){this[W]=+et}},I=[/[+-]\d\d:?(\d\d)?|Z/,function(W){(this.zone||(this.zone={})).offset=function(et){if(!et||et==="Z")return 0;var st=et.match(/([+-]|\d\d)/g),at=60*st[1]+(+st[2]||0);return at===0?0:st[0]==="+"?-at:at}(W)}],B=function(W){var et=E[W];return et&&(et.indexOf?et:et.s.concat(et.f))},N=function(W,et){var st,at=E.meridiem;if(at){for(var bt=1;bt<=24;bt+=1)if(W.indexOf(at(bt,0,et))>-1){st=bt>12;break}}else st=W===(et?"pm":"PM");return st},R={A:[b,function(W){this.afternoon=N(W,!1)}],a:[b,function(W){this.afternoon=N(W,!0)}],S:[/\d/,function(W){this.milliseconds=100*+W}],SS:[w,function(W){this.milliseconds=10*+W}],SSS:[/\d{3}/,function(W){this.milliseconds=+W}],s:[m,A("seconds")],ss:[m,A("seconds")],m:[m,A("minutes")],mm:[m,A("minutes")],H:[m,A("hours")],h:[m,A("hours")],HH:[m,A("hours")],hh:[m,A("hours")],D:[m,A("day")],DD:[w,A("day")],Do:[b,function(W){var et=E.ordinal,st=W.match(/\d+/);if(this.day=st[0],et)for(var at=1;at<=31;at+=1)et(at).replace(/\[|\]/g,"")===W&&(this.day=at)}],M:[m,A("month")],MM:[w,A("month")],MMM:[b,function(W){var et=B("months"),st=(B("monthsShort")||et.map(function(at){return at.slice(0,3)})).indexOf(W)+1;if(st<1)throw new Error;this.month=st%12||st}],MMMM:[b,function(W){var et=B("months").indexOf(W)+1;if(et<1)throw new Error;this.month=et%12||et}],Y:[/[+-]?\d+/,A("year")],YY:[w,function(W){this.year=_(W)}],YYYY:[/\d{4}/,A("year")],Z:I,ZZ:I};function z(W){var et,st;et=W,st=E&&E.formats;for(var at=(W=et.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(X,pt,U){var Tt=U&&U.toUpperCase();return pt||st[U]||f[U]||st[Tt].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(nt,It,Ot){return It||Ot.slice(1)})})).match(p),bt=at.length,mt=0;mt-1)return new Date((Et==="X"?1e3:1)*Bt);var Ct=z(Et)(Bt),xt=Ct.year,Ht=Ct.month,Le=Ct.day,Ft=Ct.hours,gn=Ct.minutes,Se=Ct.seconds,me=Ct.milliseconds,Ve=Ct.zone,Ye=new Date,ce=Le||(xt||Ht?1:Ye.getDate()),ke=xt||Ye.getFullYear(),zt=0;xt&&!Ht||(zt=Ht>0?Ht-1:Ye.getMonth());var re=Ft||0,se=gn||0,Pe=Se||0,te=me||0;return Ve?new Date(Date.UTC(ke,zt,ce,re,se,Pe,te+60*Ve.offset*1e3)):Z?new Date(Date.UTC(ke,zt,ce,re,se,Pe,te)):new Date(ke,zt,ce,re,se,Pe,te)}catch{return new Date("")}}(yt,vt,ft),this.init(),Tt&&Tt!==!0&&(this.$L=this.locale(Tt).$L),U&&yt!=this.format(vt)&&(this.$d=new Date("")),E={}}else if(vt instanceof Array)for(var nt=vt.length,It=1;It<=nt;It+=1){ut[1]=vt[It-1];var Ot=st.apply(this,ut);if(Ot.isValid()){this.$d=Ot.$d,this.$L=Ot.$L,this.init();break}It===nt&&(this.$d=new Date(""))}else bt.call(this,mt)}}})})(UBt);var lqe=UBt.exports;const hqe=G7(lqe);var WBt={exports:{}};(function(i,a){(function(f,p){i.exports=p()})(b0,function(){return function(f,p){var w=p.prototype,m=w.format;w.format=function(b){var E=this,_=this.$locale();if(!this.isValid())return m.bind(this)(b);var A=this.$utils(),I=(b||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(B){switch(B){case"Q":return Math.ceil((E.$M+1)/3);case"Do":return _.ordinal(E.$D);case"gggg":return E.weekYear();case"GGGG":return E.isoWeekYear();case"wo":return _.ordinal(E.week(),"W");case"w":case"ww":return A.s(E.week(),B==="w"?1:2,"0");case"W":case"WW":return A.s(E.isoWeek(),B==="W"?1:2,"0");case"k":case"kk":return A.s(String(E.$H===0?24:E.$H),B==="k"?1:2,"0");case"X":return Math.floor(E.$d.getTime()/1e3);case"x":return E.$d.getTime();case"z":return"["+E.offsetName()+"]";case"zzz":return"["+E.offsetName("long")+"]";default:return B}});return m.bind(this)(I)}}})})(WBt);var fqe=WBt.exports;const dqe=G7(fqe);w0.extend(uqe),w0.extend(hqe),w0.extend(dqe);let x3="",V0t="",G0t,U0t="",PF=[],FF=[],W0t={},Y0t=[],IY=[],uL="",K0t="";const YBt=["active","done","crit","milestone"];let X0t=[],NF=!1,Q0t=!1,Z0t="sunday",J0t=0;const gqe=function(){Y0t=[],IY=[],uL="",X0t=[],OY=0,egt=void 0,PY=void 0,h1=[],x3="",V0t="",K0t="",G0t=void 0,U0t="",PF=[],FF=[],NF=!1,Q0t=!1,J0t=0,W0t={},hg(),Z0t="sunday"},pqe=function(i){V0t=i},bqe=function(){return V0t},wqe=function(i){G0t=i},vqe=function(){return G0t},mqe=function(i){U0t=i},yqe=function(){return U0t},xqe=function(i){x3=i},kqe=function(){NF=!0},Eqe=function(){return NF},Tqe=function(){Q0t=!0},Cqe=function(){return Q0t},_qe=function(i){K0t=i},Sqe=function(){return K0t},Aqe=function(){return x3},Lqe=function(i){PF=i.toLowerCase().split(/[\s,]+/)},Mqe=function(){return PF},Dqe=function(i){FF=i.toLowerCase().split(/[\s,]+/)},Iqe=function(){return FF},Oqe=function(){return W0t},Pqe=function(i){uL=i,Y0t.push(i)},Fqe=function(){return Y0t},Nqe=function(){let i=tRt();const a=10;let f=0;for(;!i&&f=6&&f.includes("weekends")||f.includes(i.format("dddd").toLowerCase())?!0:f.includes(i.format(a.trim()))},Bqe=function(i){Z0t=i},Rqe=function(){return Z0t},XBt=function(i,a,f,p){if(!f.length||i.manualEndTime)return;let w;i.startTime instanceof Date?w=w0(i.startTime):w=w0(i.startTime,a,!0),w=w.add(1,"d");let m;i.endTime instanceof Date?m=w0(i.endTime):m=w0(i.endTime,a,!0);const[b,E]=jqe(w,m,a,f,p);i.endTime=b.toDate(),i.renderEndTime=E},jqe=function(i,a,f,p,w){let m=!1,b=null;for(;i<=a;)m||(b=a.toDate()),m=KBt(i,f,p,w),m&&(a=a.add(1,"d")),i=i.add(1,"d");return[a,b]},tgt=function(i,a,f){f=f.trim();const w=/^after\s+([\d\w- ]+)/.exec(f.trim());if(w!==null){let b=null;if(w[1].split(" ").forEach(function(E){let _=hL(E);_!==void 0&&(b?_.endTime>b.endTime&&(b=_):b=_)}),b)return b.endTime;{const E=new Date;return E.setHours(0,0,0,0),E}}let m=w0(f,a.trim(),!0);if(m.isValid())return m.toDate();{Ut.debug("Invalid date:"+f),Ut.debug("With date format:"+a.trim());const b=new Date(f);if(b===void 0||isNaN(b.getTime())||b.getFullYear()<-1e4||b.getFullYear()>1e4)throw new Error("Invalid date:"+f);return b}},QBt=function(i){const a=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(i.trim());return a!==null?[Number.parseFloat(a[1]),a[2]]:[NaN,"ms"]},ZBt=function(i,a,f,p=!1){f=f.trim();let w=w0(f,a.trim(),!0);if(w.isValid())return p&&(w=w.add(1,"d")),w.toDate();let m=w0(i);const[b,E]=QBt(f);if(!Number.isNaN(b)){const _=m.add(b,E);_.isValid()&&(m=_)}return m.toDate()};let OY=0;const lL=function(i){return i===void 0?(OY=OY+1,"task"+OY):i},$qe=function(i,a){let f;a.substr(0,1)===":"?f=a.substr(1,a.length):f=a;const p=f.split(","),w={};rRt(p,w,YBt);for(let b=0;b{window.open(f,"_self")}),W0t[p]=f)}),eRt(i,"clickable")},eRt=function(i,a){i.split(",").forEach(function(f){let p=hL(f);p!==void 0&&p.classes.push(a)})},Gqe=function(i,a,f){if(Oe().securityLevel!=="loose"||a===void 0)return;let p=[];if(typeof f=="string"){p=f.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let m=0;m{$a.runFunc(a,...p)})},nRt=function(i,a){X0t.push(function(){const f=document.querySelector(`[id="${i}"]`);f!==null&&f.addEventListener("click",function(){a()})},function(){const f=document.querySelector(`[id="${i}-text"]`);f!==null&&f.addEventListener("click",function(){a()})})},Uqe={getConfig:()=>Oe().gantt,clear:gqe,setDateFormat:xqe,getDateFormat:Aqe,enableInclusiveEndDates:kqe,endDatesAreInclusive:Eqe,enableTopAxis:Tqe,topAxisEnabled:Cqe,setAxisFormat:pqe,getAxisFormat:bqe,setTickInterval:wqe,getTickInterval:vqe,setTodayMarker:mqe,getTodayMarker:yqe,setAccTitle:E0,getAccTitle:fg,setDiagramTitle:Nb,getDiagramTitle:pg,setDisplayMode:_qe,getDisplayMode:Sqe,setAccDescription:dg,getAccDescription:gg,addSection:Pqe,getSections:Fqe,getTasks:Nqe,addTask:qqe,findTaskById:hL,addTaskOrg:Hqe,setIncludes:Lqe,getIncludes:Mqe,setExcludes:Dqe,getExcludes:Iqe,setClickEvent:function(i,a,f){i.split(",").forEach(function(p){Gqe(p,a,f)}),eRt(i,"clickable")},setLink:Vqe,getLinks:Oqe,bindFunctions:function(i){X0t.forEach(function(a){a(i)})},parseDuration:QBt,isInvalidDate:KBt,setWeekday:Bqe,getWeekday:Rqe};function rRt(i,a,f){let p=!0;for(;p;)p=!1,f.forEach(function(w){const m="^\\s*"+w+"\\s*$",b=new RegExp(m);i[0].match(b)&&(a[w]=!0,i.shift(1),p=!0)})}const Wqe=function(){Ut.debug("Something is calling, setConf, remove the call")},iRt={monday:BP,tuesday:JMt,wednesday:tDt,thursday:tT,friday:eDt,saturday:nDt,sunday:NP},Yqe=(i,a)=>{let f=[...i].map(()=>-1/0),p=[...i].sort((m,b)=>m.startTime-b.startTime||m.order-b.order),w=0;for(const m of p)for(let b=0;b=f[b]){f[b]=m.endTime,m.order=b+a,b>w&&(w=b);break}return w};let N5;const Kqe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:oqe,db:Uqe,renderer:{setConf:Wqe,draw:function(i,a,f,p){const w=Oe().gantt,m=Oe().securityLevel;let b;m==="sandbox"&&(b=yr("#i"+a));const E=yr(m==="sandbox"?b.nodes()[0].contentDocument.body:"body"),_=m==="sandbox"?b.nodes()[0].contentDocument:document,A=_.getElementById(a);N5=A.parentElement.offsetWidth,N5===void 0&&(N5=1200),w.useWidth!==void 0&&(N5=w.useWidth);const I=p.db.getTasks();let B=[];for(const vt of I)B.push(vt.type);B=ut(B);const N={};let R=2*w.topPadding;if(p.db.getDisplayMode()==="compact"||w.displayMode==="compact"){const vt={};for(const pt of I)vt[pt.section]===void 0?vt[pt.section]=[pt]:vt[pt.section].push(pt);let X=0;for(const pt of Object.keys(vt)){const U=Yqe(vt[pt],X)+1;X+=U,R+=U*(w.barHeight+w.barGap),N[pt]=U}}else{R+=I.length*(w.barHeight+w.barGap);for(const vt of B)N[vt]=I.filter(X=>X.type===vt).length}A.setAttribute("viewBox","0 0 "+N5+" "+R);const z=E.select(`[id="${a}"]`),W=Y7e().domain([Mxe(I,function(vt){return vt.startTime}),Lxe(I,function(vt){return vt.endTime})]).rangeRound([0,N5-w.leftPadding-w.rightPadding]);function et(vt,X){const pt=vt.startTime,U=X.startTime;let Tt=0;return pt>U?Tt=1:ptxt.order))].map(xt=>vt.find(Ht=>Ht.order===xt));z.append("g").selectAll("rect").data(Bt).enter().append("rect").attr("x",0).attr("y",function(xt,Ht){return Ht=xt.order,Ht*X+pt-2}).attr("width",function(){return It-w.rightPadding/2}).attr("height",X).attr("class",function(xt){for(const[Ht,Le]of B.entries())if(xt.type===Le)return"section section"+Ht%w.numberSectionStyles;return"section section0"});const Et=z.append("g").selectAll("rect").data(vt).enter(),Z=p.db.getLinks();if(Et.append("rect").attr("id",function(xt){return xt.id}).attr("rx",3).attr("ry",3).attr("x",function(xt){return xt.milestone?W(xt.startTime)+U+.5*(W(xt.endTime)-W(xt.startTime))-.5*Tt:W(xt.startTime)+U}).attr("y",function(xt,Ht){return Ht=xt.order,Ht*X+pt}).attr("width",function(xt){return xt.milestone?Tt:W(xt.renderEndTime||xt.endTime)-W(xt.startTime)}).attr("height",Tt).attr("transform-origin",function(xt,Ht){return Ht=xt.order,(W(xt.startTime)+U+.5*(W(xt.endTime)-W(xt.startTime))).toString()+"px "+(Ht*X+pt+.5*Tt).toString()+"px"}).attr("class",function(xt){const Ht="task";let Le="";xt.classes.length>0&&(Le=xt.classes.join(" "));let Ft=0;for(const[Se,me]of B.entries())xt.type===me&&(Ft=Se%w.numberSectionStyles);let gn="";return xt.active?xt.crit?gn+=" activeCrit":gn=" active":xt.done?xt.crit?gn=" doneCrit":gn=" done":xt.crit&&(gn+=" crit"),gn.length===0&&(gn=" task"),xt.milestone&&(gn=" milestone "+gn),gn+=Ft,gn+=" "+Le,Ht+gn}),Et.append("text").attr("id",function(xt){return xt.id+"-text"}).text(function(xt){return xt.task}).attr("font-size",w.fontSize).attr("x",function(xt){let Ht=W(xt.startTime),Le=W(xt.renderEndTime||xt.endTime);xt.milestone&&(Ht+=.5*(W(xt.endTime)-W(xt.startTime))-.5*Tt),xt.milestone&&(Le=Ht+Tt);const Ft=this.getBBox().width;return Ft>Le-Ht?Le+Ft+1.5*w.leftPadding>It?Ht+U-5:Le+U+5:(Le-Ht)/2+Ht+U}).attr("y",function(xt,Ht){return Ht=xt.order,Ht*X+w.barHeight/2+(w.fontSize/2-2)+pt}).attr("text-height",Tt).attr("class",function(xt){const Ht=W(xt.startTime);let Le=W(xt.endTime);xt.milestone&&(Le=Ht+Tt);const Ft=this.getBBox().width;let gn="";xt.classes.length>0&&(gn=xt.classes.join(" "));let Se=0;for(const[Ve,Ye]of B.entries())xt.type===Ye&&(Se=Ve%w.numberSectionStyles);let me="";return xt.active&&(xt.crit?me="activeCritText"+Se:me="activeText"+Se),xt.done?xt.crit?me=me+" doneCritText"+Se:me=me+" doneText"+Se:xt.crit&&(me=me+" critText"+Se),xt.milestone&&(me+=" milestoneText"),Ft>Le-Ht?Le+Ft+1.5*w.leftPadding>It?gn+" taskTextOutsideLeft taskTextOutside"+Se+" "+me:gn+" taskTextOutsideRight taskTextOutside"+Se+" "+me+" width-"+Ft:gn+" taskText taskText"+Se+" "+me+" width-"+Ft}),Oe().securityLevel==="sandbox"){let xt;xt=yr("#i"+a);const Ht=xt.nodes()[0].contentDocument;Et.filter(function(Le){return Z[Le.id]!==void 0}).each(function(Le){var Ft=Ht.querySelector("#"+Le.id),gn=Ht.querySelector("#"+Le.id+"-text");const Se=Ft.parentNode;var me=Ht.createElement("a");me.setAttribute("xlink:href",Z[Le.id]),me.setAttribute("target","_top"),Se.appendChild(me),me.appendChild(Ft),me.appendChild(gn)})}}function bt(vt,X,pt,U,Tt,nt,It,Ot){if(It.length===0&&Ot.length===0)return;let Bt,Et;for(const{startTime:Ft,endTime:gn}of nt)(Bt===void 0||FtEt)&&(Et=gn);if(!Bt||!Et)return;if(w0(Et).diff(w0(Bt),"year")>5){Ut.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");return}const Z=p.db.getDateFormat(),Ct=[];let xt=null,Ht=w0(Bt);for(;Ht.valueOf()<=Et;)p.db.isInvalidDate(Ht,Z,It,Ot)?xt?xt.end=Ht:xt={start:Ht,end:Ht}:xt&&(Ct.push(xt),xt=null),Ht=Ht.add(1,"d");z.append("g").selectAll("rect").data(Ct).enter().append("rect").attr("id",function(Ft){return"exclude-"+Ft.start.format("YYYY-MM-DD")}).attr("x",function(Ft){return W(Ft.start)+pt}).attr("y",w.gridLineStartPadding).attr("width",function(Ft){const gn=Ft.end.add(1,"day");return W(gn)-W(Ft.start)}).attr("height",Tt-X-w.gridLineStartPadding).attr("transform-origin",function(Ft,gn){return(W(Ft.start)+pt+.5*(W(Ft.end)-W(Ft.start))).toString()+"px "+(gn*vt+.5*Tt).toString()+"px"}).attr("class","exclude-range")}function mt(vt,X,pt,U){let Tt=jxe(W).tickSize(-U+X+w.gridLineStartPadding).tickFormat(ZU(p.db.getAxisFormat()||w.axisFormat||"%Y-%m-%d"));const It=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(p.db.getTickInterval()||w.tickInterval);if(It!==null){const Ot=It[1],Bt=It[2],Et=p.db.getWeekday()||w.weekday;switch(Bt){case"millisecond":Tt.ticks(LA.every(Ot));break;case"second":Tt.ticks(sk.every(Ot));break;case"minute":Tt.ticks(PP.every(Ot));break;case"hour":Tt.ticks(FP.every(Ot));break;case"day":Tt.ticks(Z7.every(Ot));break;case"week":Tt.ticks(iRt[Et].every(Ot));break;case"month":Tt.ticks(RP.every(Ot));break}}if(z.append("g").attr("class","grid").attr("transform","translate("+vt+", "+(U-50)+")").call(Tt).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),p.db.topAxisEnabled()||w.topAxis){let Ot=Rxe(W).tickSize(-U+X+w.gridLineStartPadding).tickFormat(ZU(p.db.getAxisFormat()||w.axisFormat||"%Y-%m-%d"));if(It!==null){const Bt=It[1],Et=It[2],Z=p.db.getWeekday()||w.weekday;switch(Et){case"millisecond":Ot.ticks(LA.every(Bt));break;case"second":Ot.ticks(sk.every(Bt));break;case"minute":Ot.ticks(PP.every(Bt));break;case"hour":Ot.ticks(FP.every(Bt));break;case"day":Ot.ticks(Z7.every(Bt));break;case"week":Ot.ticks(iRt[Z].every(Bt));break;case"month":Ot.ticks(RP.every(Bt));break}}z.append("g").attr("class","grid").attr("transform","translate("+vt+", "+X+")").call(Ot).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}function yt(vt,X){let pt=0;const U=Object.keys(N).map(Tt=>[Tt,N[Tt]]);z.append("g").selectAll("text").data(U).enter().append(function(Tt){const nt=Tt[0].split(Kr.lineBreakRegex),It=-(nt.length-1)/2,Ot=_.createElementNS("http://www.w3.org/2000/svg","text");Ot.setAttribute("dy",It+"em");for(const[Bt,Et]of nt.entries()){const Z=_.createElementNS("http://www.w3.org/2000/svg","tspan");Z.setAttribute("alignment-baseline","central"),Z.setAttribute("x","10"),Bt>0&&Z.setAttribute("dy","1em"),Z.textContent=Et,Ot.appendChild(Z)}return Ot}).attr("x",10).attr("y",function(Tt,nt){if(nt>0)for(let It=0;It` +`}},Symbol.toStringTag,{value:"Module"}));var Yme=function(){var i=function(W,xe,U,Fe){for(U=U||{},Fe=W.length;Fe--;U[W[Fe]]=xe);return U},s=[6,8,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,32,33,35,37],u=[1,25],d=[1,26],p=[1,27],v=[1,28],b=[1,29],y=[1,30],T=[1,31],_=[1,9],A=[1,10],P=[1,11],R=[1,12],F=[1,13],j=[1,14],K=[1,15],ee=[1,16],ie=[1,18],oe=[1,19],pe=[1,20],be=[1,21],ae=[1,22],ne=[1,24],se=[1,32],de={trace:function(){},yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,dateFormat:19,inclusiveEndDates:20,topAxis:21,axisFormat:22,tickInterval:23,excludes:24,includes:25,todayMarker:26,title:27,acc_title:28,acc_title_value:29,acc_descr:30,acc_descr_value:31,acc_descr_multiline_value:32,section:33,clickStatement:34,taskTxt:35,taskData:36,click:37,callbackname:38,callbackargs:39,href:40,clickStatementDebug:41,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",19:"dateFormat",20:"inclusiveEndDates",21:"topAxis",22:"axisFormat",23:"tickInterval",24:"excludes",25:"includes",26:"todayMarker",27:"title",28:"acc_title",29:"acc_title_value",30:"acc_descr",31:"acc_descr_value",32:"acc_descr_multiline_value",33:"section",35:"taskTxt",36:"taskData",37:"click",38:"callbackname",39:"callbackargs",40:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[34,2],[34,3],[34,3],[34,4],[34,3],[34,4],[34,2],[41,2],[41,3],[41,3],[41,4],[41,3],[41,4],[41,2]],performAction:function(xe,U,Fe,Pe,je,Ie,Se){var Ce=Ie.length-1;switch(je){case 1:return Ie[Ce-1];case 2:this.$=[];break;case 3:Ie[Ce-1].push(Ie[Ce]),this.$=Ie[Ce-1];break;case 4:case 5:this.$=Ie[Ce];break;case 6:case 7:this.$=[];break;case 8:Pe.setWeekday("monday");break;case 9:Pe.setWeekday("tuesday");break;case 10:Pe.setWeekday("wednesday");break;case 11:Pe.setWeekday("thursday");break;case 12:Pe.setWeekday("friday");break;case 13:Pe.setWeekday("saturday");break;case 14:Pe.setWeekday("sunday");break;case 15:Pe.setDateFormat(Ie[Ce].substr(11)),this.$=Ie[Ce].substr(11);break;case 16:Pe.enableInclusiveEndDates(),this.$=Ie[Ce].substr(18);break;case 17:Pe.TopAxis(),this.$=Ie[Ce].substr(8);break;case 18:Pe.setAxisFormat(Ie[Ce].substr(11)),this.$=Ie[Ce].substr(11);break;case 19:Pe.setTickInterval(Ie[Ce].substr(13)),this.$=Ie[Ce].substr(13);break;case 20:Pe.setExcludes(Ie[Ce].substr(9)),this.$=Ie[Ce].substr(9);break;case 21:Pe.setIncludes(Ie[Ce].substr(9)),this.$=Ie[Ce].substr(9);break;case 22:Pe.setTodayMarker(Ie[Ce].substr(12)),this.$=Ie[Ce].substr(12);break;case 24:Pe.setDiagramTitle(Ie[Ce].substr(6)),this.$=Ie[Ce].substr(6);break;case 25:this.$=Ie[Ce].trim(),Pe.setAccTitle(this.$);break;case 26:case 27:this.$=Ie[Ce].trim(),Pe.setAccDescription(this.$);break;case 28:Pe.addSection(Ie[Ce].substr(8)),this.$=Ie[Ce].substr(8);break;case 30:Pe.addTask(Ie[Ce-1],Ie[Ce]),this.$="task";break;case 31:this.$=Ie[Ce-1],Pe.setClickEvent(Ie[Ce-1],Ie[Ce],null);break;case 32:this.$=Ie[Ce-2],Pe.setClickEvent(Ie[Ce-2],Ie[Ce-1],Ie[Ce]);break;case 33:this.$=Ie[Ce-2],Pe.setClickEvent(Ie[Ce-2],Ie[Ce-1],null),Pe.setLink(Ie[Ce-2],Ie[Ce]);break;case 34:this.$=Ie[Ce-3],Pe.setClickEvent(Ie[Ce-3],Ie[Ce-2],Ie[Ce-1]),Pe.setLink(Ie[Ce-3],Ie[Ce]);break;case 35:this.$=Ie[Ce-2],Pe.setClickEvent(Ie[Ce-2],Ie[Ce],null),Pe.setLink(Ie[Ce-2],Ie[Ce-1]);break;case 36:this.$=Ie[Ce-3],Pe.setClickEvent(Ie[Ce-3],Ie[Ce-1],Ie[Ce]),Pe.setLink(Ie[Ce-3],Ie[Ce-2]);break;case 37:this.$=Ie[Ce-1],Pe.setLink(Ie[Ce-1],Ie[Ce]);break;case 38:case 44:this.$=Ie[Ce-1]+" "+Ie[Ce];break;case 39:case 40:case 42:this.$=Ie[Ce-2]+" "+Ie[Ce-1]+" "+Ie[Ce];break;case 41:case 43:this.$=Ie[Ce-3]+" "+Ie[Ce-2]+" "+Ie[Ce-1]+" "+Ie[Ce];break}},table:[{3:1,4:[1,2]},{1:[3]},i(s,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:u,13:d,14:p,15:v,16:b,17:y,18:T,19:_,20:A,21:P,22:R,23:F,24:j,25:K,26:ee,27:ie,28:oe,30:pe,32:be,33:ae,34:23,35:ne,37:se},i(s,[2,7],{1:[2,1]}),i(s,[2,3]),{9:33,11:17,12:u,13:d,14:p,15:v,16:b,17:y,18:T,19:_,20:A,21:P,22:R,23:F,24:j,25:K,26:ee,27:ie,28:oe,30:pe,32:be,33:ae,34:23,35:ne,37:se},i(s,[2,5]),i(s,[2,6]),i(s,[2,15]),i(s,[2,16]),i(s,[2,17]),i(s,[2,18]),i(s,[2,19]),i(s,[2,20]),i(s,[2,21]),i(s,[2,22]),i(s,[2,23]),i(s,[2,24]),{29:[1,34]},{31:[1,35]},i(s,[2,27]),i(s,[2,28]),i(s,[2,29]),{36:[1,36]},i(s,[2,8]),i(s,[2,9]),i(s,[2,10]),i(s,[2,11]),i(s,[2,12]),i(s,[2,13]),i(s,[2,14]),{38:[1,37],40:[1,38]},i(s,[2,4]),i(s,[2,25]),i(s,[2,26]),i(s,[2,30]),i(s,[2,31],{39:[1,39],40:[1,40]}),i(s,[2,37],{38:[1,41]}),i(s,[2,32],{40:[1,42]}),i(s,[2,33]),i(s,[2,35],{39:[1,43]}),i(s,[2,34]),i(s,[2,36])],defaultActions:{},parseError:function(xe,U){if(U.recoverable)this.trace(xe);else{var Fe=new Error(xe);throw Fe.hash=U,Fe}},parse:function(xe){var U=this,Fe=[0],Pe=[],je=[null],Ie=[],Se=this.table,Ce="",ke=0,Ke=0,Ft=2,Ne=1,gn=Ie.slice.call(arguments,1),_t=Object.create(this.lexer),Et={yy:{}};for(var Gt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Gt)&&(Et.yy[Gt]=this.yy[Gt]);_t.setInput(xe,Et.yy),Et.yy.lexer=_t,Et.yy.parser=this,typeof _t.yylloc>"u"&&(_t.yylloc={});var ln=_t.yylloc;Ie.push(ln);var xt=_t.options&&_t.options.ranges;typeof Et.yy.parseError=="function"?this.parseError=Et.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Pt(){var zs;return zs=Pe.pop()||_t.lex()||Ne,typeof zs!="number"&&(zs instanceof Array&&(Pe=zs,zs=Pe.pop()),zs=U.symbols_[zs]||zs),zs}for(var Qe,Dt,kt,On,ht={},zr,yt,ji,xi;;){if(Dt=Fe[Fe.length-1],this.defaultActions[Dt]?kt=this.defaultActions[Dt]:((Qe===null||typeof Qe>"u")&&(Qe=Pt()),kt=Se[Dt]&&Se[Dt][Qe]),typeof kt>"u"||!kt.length||!kt[0]){var Ma="";xi=[];for(zr in Se[Dt])this.terminals_[zr]&&zr>Ft&&xi.push("'"+this.terminals_[zr]+"'");_t.showPosition?Ma="Parse error on line "+(ke+1)+`: +`+_t.showPosition()+` +Expecting `+xi.join(", ")+", got '"+(this.terminals_[Qe]||Qe)+"'":Ma="Parse error on line "+(ke+1)+": Unexpected "+(Qe==Ne?"end of input":"'"+(this.terminals_[Qe]||Qe)+"'"),this.parseError(Ma,{text:_t.match,token:this.terminals_[Qe]||Qe,line:_t.yylineno,loc:ln,expected:xi})}if(kt[0]instanceof Array&&kt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Dt+", token: "+Qe);switch(kt[0]){case 1:Fe.push(Qe),je.push(_t.yytext),Ie.push(_t.yylloc),Fe.push(kt[1]),Qe=null,Ke=_t.yyleng,Ce=_t.yytext,ke=_t.yylineno,ln=_t.yylloc;break;case 2:if(yt=this.productions_[kt[1]][1],ht.$=je[je.length-yt],ht._$={first_line:Ie[Ie.length-(yt||1)].first_line,last_line:Ie[Ie.length-1].last_line,first_column:Ie[Ie.length-(yt||1)].first_column,last_column:Ie[Ie.length-1].last_column},xt&&(ht._$.range=[Ie[Ie.length-(yt||1)].range[0],Ie[Ie.length-1].range[1]]),On=this.performAction.apply(ht,[Ce,Ke,ke,Et.yy,kt[1],je,Ie].concat(gn)),typeof On<"u")return On;yt&&(Fe=Fe.slice(0,-1*yt*2),je=je.slice(0,-1*yt),Ie=Ie.slice(0,-1*yt)),Fe.push(this.productions_[kt[1]][0]),je.push(ht.$),Ie.push(ht._$),ji=Se[Fe[Fe.length-2]][Fe[Fe.length-1]],Fe.push(ji);break;case 3:return!0}}return!0}},X=function(){var W={EOF:1,parseError:function(U,Fe){if(this.yy.parser)this.yy.parser.parseError(U,Fe);else throw new Error(U)},setInput:function(xe,U){return this.yy=U||this.yy||{},this._input=xe,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var xe=this._input[0];this.yytext+=xe,this.yyleng++,this.offset++,this.match+=xe,this.matched+=xe;var U=xe.match(/(?:\r\n?|\n).*/g);return U?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),xe},unput:function(xe){var U=xe.length,Fe=xe.split(/(?:\r\n?|\n)/g);this._input=xe+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-U),this.offset-=U;var Pe=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Fe.length-1&&(this.yylineno-=Fe.length-1);var je=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Fe?(Fe.length===Pe.length?this.yylloc.first_column:0)+Pe[Pe.length-Fe.length].length-Fe[0].length:this.yylloc.first_column-U},this.options.ranges&&(this.yylloc.range=[je[0],je[0]+this.yyleng-U]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(xe){this.unput(this.match.slice(xe))},pastInput:function(){var xe=this.matched.substr(0,this.matched.length-this.match.length);return(xe.length>20?"...":"")+xe.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var xe=this.match;return xe.length<20&&(xe+=this._input.substr(0,20-xe.length)),(xe.substr(0,20)+(xe.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var xe=this.pastInput(),U=new Array(xe.length+1).join("-");return xe+this.upcomingInput()+` +`+U+"^"},test_match:function(xe,U){var Fe,Pe,je;if(this.options.backtrack_lexer&&(je={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(je.yylloc.range=this.yylloc.range.slice(0))),Pe=xe[0].match(/(?:\r\n?|\n).*/g),Pe&&(this.yylineno+=Pe.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Pe?Pe[Pe.length-1].length-Pe[Pe.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+xe[0].length},this.yytext+=xe[0],this.match+=xe[0],this.matches=xe,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(xe[0].length),this.matched+=xe[0],Fe=this.performAction.call(this,this.yy,this,U,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Fe)return Fe;if(this._backtrack){for(var Ie in je)this[Ie]=je[Ie];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var xe,U,Fe,Pe;this._more||(this.yytext="",this.match="");for(var je=this._currentRules(),Ie=0;IeU[0].length)){if(U=Fe,Pe=Ie,this.options.backtrack_lexer){if(xe=this.test_match(Fe,je[Ie]),xe!==!1)return xe;if(this._backtrack){U=!1;continue}else return!1}else if(!this.options.flex)break}return U?(xe=this.test_match(U,je[Pe]),xe!==!1?xe:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var U=this.next();return U||this.lex()},begin:function(U){this.conditionStack.push(U)},popState:function(){var U=this.conditionStack.length-1;return U>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(U){return U=this.conditionStack.length-1-Math.abs(U||0),U>=0?this.conditionStack[U]:"INITIAL"},pushState:function(U){this.begin(U)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(U,Fe,Pe,je){switch(Pe){case 0:return this.begin("open_directive"),"open_directive";case 1:return this.begin("acc_title"),28;case 2:return this.popState(),"acc_title_value";case 3:return this.begin("acc_descr"),30;case 4:return this.popState(),"acc_descr_value";case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:break;case 9:break;case 10:break;case 11:return 10;case 12:break;case 13:break;case 14:this.begin("href");break;case 15:this.popState();break;case 16:return 40;case 17:this.begin("callbackname");break;case 18:this.popState();break;case 19:this.popState(),this.begin("callbackargs");break;case 20:return 38;case 21:this.popState();break;case 22:return 39;case 23:this.begin("click");break;case 24:this.popState();break;case 25:return 37;case 26:return 4;case 27:return 19;case 28:return 20;case 29:return 21;case 30:return 22;case 31:return 23;case 32:return 25;case 33:return 24;case 34:return 26;case 35:return 12;case 36:return 13;case 37:return 14;case 38:return 15;case 39:return 16;case 40:return 17;case 41:return 18;case 42:return"date";case 43:return 27;case 44:return"accDescription";case 45:return 33;case 46:return 35;case 47:return 36;case 48:return":";case 49:return 6;case 50:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^\n]+)/i,/^(?:[^:\n]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},callbackargs:{rules:[21,22],inclusive:!1},callbackname:{rules:[18,19,20],inclusive:!1},href:{rules:[15,16],inclusive:!1},click:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,17,23,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50],inclusive:!0}}};return W}();de.lexer=X;function ge(){this.yy={}}return ge.prototype=de,de.Parser=ge,new ge}();Yme.parser=Yme;const _tn=Yme;var XUe={exports:{}};(function(i,s){(function(u,d){i.exports=d()})(Ag,function(){var u="day";return function(d,p,v){var b=function(_){return _.add(4-_.isoWeekday(),u)},y=p.prototype;y.isoWeekYear=function(){return b(this).year()},y.isoWeek=function(_){if(!this.$utils().u(_))return this.add(7*(_-this.isoWeek()),u);var A,P,R,F,j=b(this),K=(A=this.isoWeekYear(),P=this.$u,R=(P?v.utc:v)().year(A).startOf("year"),F=4-R.isoWeekday(),R.isoWeekday()>4&&(F+=7),R.add(F,u));return j.diff(K,"week")+1},y.isoWeekday=function(_){return this.$utils().u(_)?this.day()||7:this.day(this.day()%7?_:_-7)};var T=y.startOf;y.startOf=function(_,A){var P=this.$utils(),R=!!P.u(A)||A;return P.p(_)==="isoweek"?R?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):T.bind(this)(_,A)}}})})(XUe);var Atn=XUe.exports;const Ltn=hC(Atn);var QUe={exports:{}};(function(i,s){(function(u,d){i.exports=d()})(Ag,function(){var u={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},d=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,p=/\d\d/,v=/\d\d?/,b=/\d*[^-_:/,()\s\d]+/,y={},T=function(K){return(K=+K)+(K>68?1900:2e3)},_=function(K){return function(ee){this[K]=+ee}},A=[/[+-]\d\d:?(\d\d)?|Z/,function(K){(this.zone||(this.zone={})).offset=function(ee){if(!ee||ee==="Z")return 0;var ie=ee.match(/([+-]|\d\d)/g),oe=60*ie[1]+(+ie[2]||0);return oe===0?0:ie[0]==="+"?-oe:oe}(K)}],P=function(K){var ee=y[K];return ee&&(ee.indexOf?ee:ee.s.concat(ee.f))},R=function(K,ee){var ie,oe=y.meridiem;if(oe){for(var pe=1;pe<=24;pe+=1)if(K.indexOf(oe(pe,0,ee))>-1){ie=pe>12;break}}else ie=K===(ee?"pm":"PM");return ie},F={A:[b,function(K){this.afternoon=R(K,!1)}],a:[b,function(K){this.afternoon=R(K,!0)}],S:[/\d/,function(K){this.milliseconds=100*+K}],SS:[p,function(K){this.milliseconds=10*+K}],SSS:[/\d{3}/,function(K){this.milliseconds=+K}],s:[v,_("seconds")],ss:[v,_("seconds")],m:[v,_("minutes")],mm:[v,_("minutes")],H:[v,_("hours")],h:[v,_("hours")],HH:[v,_("hours")],hh:[v,_("hours")],D:[v,_("day")],DD:[p,_("day")],Do:[b,function(K){var ee=y.ordinal,ie=K.match(/\d+/);if(this.day=ie[0],ee)for(var oe=1;oe<=31;oe+=1)ee(oe).replace(/\[|\]/g,"")===K&&(this.day=oe)}],M:[v,_("month")],MM:[p,_("month")],MMM:[b,function(K){var ee=P("months"),ie=(P("monthsShort")||ee.map(function(oe){return oe.slice(0,3)})).indexOf(K)+1;if(ie<1)throw new Error;this.month=ie%12||ie}],MMMM:[b,function(K){var ee=P("months").indexOf(K)+1;if(ee<1)throw new Error;this.month=ee%12||ee}],Y:[/[+-]?\d+/,_("year")],YY:[p,function(K){this.year=T(K)}],YYYY:[/\d{4}/,_("year")],Z:A,ZZ:A};function j(K){var ee,ie;ee=K,ie=y&&y.formats;for(var oe=(K=ee.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(X,ge,W){var xe=W&&W.toUpperCase();return ge||ie[W]||u[W]||ie[xe].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(U,Fe,Pe){return Fe||Pe.slice(1)})})).match(d),pe=oe.length,be=0;be-1)return new Date((Ie==="X"?1e3:1)*je);var Ce=j(Ie)(je),ke=Ce.year,Ke=Ce.month,Ft=Ce.day,Ne=Ce.hours,gn=Ce.minutes,_t=Ce.seconds,Et=Ce.milliseconds,Gt=Ce.zone,ln=new Date,xt=Ft||(ke||Ke?1:ln.getDate()),Pt=ke||ln.getFullYear(),Qe=0;ke&&!Ke||(Qe=Ke>0?Ke-1:ln.getMonth());var Dt=Ne||0,kt=gn||0,On=_t||0,ht=Et||0;return Gt?new Date(Date.UTC(Pt,Qe,xt,Dt,kt,On,ht+60*Gt.offset*1e3)):Se?new Date(Date.UTC(Pt,Qe,xt,Dt,kt,On,ht)):new Date(Pt,Qe,xt,Dt,kt,On,ht)}catch{return new Date("")}}(ae,de,ne),this.init(),xe&&xe!==!0&&(this.$L=this.locale(xe).$L),W&&ae!=this.format(de)&&(this.$d=new Date("")),y={}}else if(de instanceof Array)for(var U=de.length,Fe=1;Fe<=U;Fe+=1){se[1]=de[Fe-1];var Pe=ie.apply(this,se);if(Pe.isValid()){this.$d=Pe.$d,this.$L=Pe.$L,this.init();break}Fe===U&&(this.$d=new Date(""))}else pe.call(this,be)}}})})(QUe);var Mtn=QUe.exports;const Dtn=hC(Mtn);var JUe={exports:{}};(function(i,s){(function(u,d){i.exports=d()})(Ag,function(){return function(u,d){var p=d.prototype,v=p.format;p.format=function(b){var y=this,T=this.$locale();if(!this.isValid())return v.bind(this)(b);var _=this.$utils(),A=(b||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(P){switch(P){case"Q":return Math.ceil((y.$M+1)/3);case"Do":return T.ordinal(y.$D);case"gggg":return y.weekYear();case"GGGG":return y.isoWeekYear();case"wo":return T.ordinal(y.week(),"W");case"w":case"ww":return _.s(y.week(),P==="w"?1:2,"0");case"W":case"WW":return _.s(y.isoWeek(),P==="W"?1:2,"0");case"k":case"kk":return _.s(String(y.$H===0?24:y.$H),P==="k"?1:2,"0");case"X":return Math.floor(y.$d.getTime()/1e3);case"x":return y.$d.getTime();case"z":return"["+y.offsetName()+"]";case"zzz":return"["+y.offsetName("long")+"]";default:return P}});return v.bind(this)(A)}}})})(JUe);var Itn=JUe.exports;const Otn=hC(Itn);Lg.extend(Ltn),Lg.extend(Dtn),Lg.extend(Otn);let i5="",Xme="",Qme,Jme="",FR=[],RR=[],Zme={},eve=[],uJ=[],GD="",tve="";const ZUe=["active","done","crit","milestone"];let nve=[],jR=!1,rve=!1,ive="sunday",sve=0;const Ntn=function(){eve=[],uJ=[],GD="",nve=[],lJ=0,ove=void 0,hJ=void 0,m1=[],i5="",Xme="",tve="",Qme=void 0,Jme="",FR=[],RR=[],jR=!1,rve=!1,sve=0,Zme={},Pg(),ive="sunday"},Ptn=function(i){Xme=i},Btn=function(){return Xme},Ftn=function(i){Qme=i},Rtn=function(){return Qme},jtn=function(i){Jme=i},$tn=function(){return Jme},ztn=function(i){i5=i},qtn=function(){jR=!0},Htn=function(){return jR},Vtn=function(){rve=!0},Utn=function(){return rve},Gtn=function(i){tve=i},Ktn=function(){return tve},Wtn=function(){return i5},Ytn=function(i){FR=i.toLowerCase().split(/[\s,]+/)},Xtn=function(){return FR},Qtn=function(i){RR=i.toLowerCase().split(/[\s,]+/)},Jtn=function(){return RR},Ztn=function(){return Zme},enn=function(i){GD=i,eve.push(i)},tnn=function(){return eve},nnn=function(){let i=sGe();const s=10;let u=0;for(;!i&&u=6&&u.includes("weekends")||u.includes(i.format("dddd").toLowerCase())?!0:u.includes(i.format(s.trim()))},rnn=function(i){ive=i},inn=function(){return ive},tGe=function(i,s,u,d){if(!u.length||i.manualEndTime)return;let p;i.startTime instanceof Date?p=Lg(i.startTime):p=Lg(i.startTime,s,!0),p=p.add(1,"d");let v;i.endTime instanceof Date?v=Lg(i.endTime):v=Lg(i.endTime,s,!0);const[b,y]=snn(p,v,s,u,d);i.endTime=b.toDate(),i.renderEndTime=y},snn=function(i,s,u,d,p){let v=!1,b=null;for(;i<=s;)v||(b=s.toDate()),v=eGe(i,u,d,p),v&&(s=s.add(1,"d")),i=i.add(1,"d");return[s,b]},ave=function(i,s,u){u=u.trim();const p=/^after\s+(?[\d\w- ]+)/.exec(u);if(p!==null){let b=null;for(const T of p.groups.ids.split(" ")){let _=QC(T);_!==void 0&&(!b||_.endTime>b.endTime)&&(b=_)}if(b)return b.endTime;const y=new Date;return y.setHours(0,0,0,0),y}let v=Lg(u,s.trim(),!0);if(v.isValid())return v.toDate();{Xe.debug("Invalid date:"+u),Xe.debug("With date format:"+s.trim());const b=new Date(u);if(b===void 0||isNaN(b.getTime())||b.getFullYear()<-1e4||b.getFullYear()>1e4)throw new Error("Invalid date:"+u);return b}},nGe=function(i){const s=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(i.trim());return s!==null?[Number.parseFloat(s[1]),s[2]]:[NaN,"ms"]},rGe=function(i,s,u,d=!1){u=u.trim();const v=/^until\s+(?[\d\w- ]+)/.exec(u);if(v!==null){let A=null;for(const R of v.groups.ids.split(" ")){let F=QC(R);F!==void 0&&(!A||F.startTime{window.open(u,"_self")}),Zme[d]=u)}),aGe(i,"clickable")},aGe=function(i,s){i.split(",").forEach(function(u){let d=QC(u);d!==void 0&&d.classes.push(s)})},hnn=function(i,s,u){if(qt().securityLevel!=="loose"||s===void 0)return;let d=[];if(typeof u=="string"){d=u.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let v=0;v{Ao.runFunc(s,...d)})},oGe=function(i,s){nve.push(function(){const u=document.querySelector(`[id="${i}"]`);u!==null&&u.addEventListener("click",function(){s()})},function(){const u=document.querySelector(`[id="${i}-text"]`);u!==null&&u.addEventListener("click",function(){s()})})},fnn={getConfig:()=>qt().gantt,clear:Ntn,setDateFormat:ztn,getDateFormat:Wtn,enableInclusiveEndDates:qtn,endDatesAreInclusive:Htn,enableTopAxis:Vtn,topAxisEnabled:Utn,setAxisFormat:Ptn,getAxisFormat:Btn,setTickInterval:Ftn,getTickInterval:Rtn,setTodayMarker:jtn,getTodayMarker:$tn,setAccTitle:Bg,getAccTitle:Cp,setDiagramTitle:cm,getDiagramTitle:Ap,setDisplayMode:Gtn,getDisplayMode:Ktn,setAccDescription:Sp,getAccDescription:_p,addSection:enn,getSections:tnn,getTasks:nnn,addTask:cnn,findTaskById:QC,addTaskOrg:unn,setIncludes:Ytn,getIncludes:Xtn,setExcludes:Qtn,getExcludes:Jtn,setClickEvent:function(i,s,u){i.split(",").forEach(function(d){hnn(d,s,u)}),aGe(i,"clickable")},setLink:lnn,getLinks:Ztn,bindFunctions:function(i){nve.forEach(function(s){s(i)})},parseDuration:nGe,isInvalidDate:eGe,setWeekday:rnn,getWeekday:inn};function cGe(i,s,u){let d=!0;for(;d;)d=!1,u.forEach(function(p){const v="^\\s*"+p+"\\s*$",b=new RegExp(v);i[0].match(b)&&(s[p]=!0,i.shift(1),d=!0)})}const dnn=function(){Xe.debug("Something is calling, setConf, remove the call")},uGe={monday:DF,tuesday:xFe,wednesday:kFe,thursday:yC,friday:EFe,saturday:TFe,sunday:MF},gnn=(i,s)=>{let u=[...i].map(()=>-1/0),d=[...i].sort((v,b)=>v.startTime-b.startTime||v.order-b.order),p=0;for(const v of d)for(let b=0;b=u[b]){u[b]=v.endTime,v.order=b+s,b>p&&(p=b);break}return p};let V7;const pnn=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:_tn,db:fnn,renderer:{setConf:dnn,draw:function(i,s,u,d){const p=qt().gantt,v=qt().securityLevel;let b;v==="sandbox"&&(b=Ir("#i"+s));const y=Ir(v==="sandbox"?b.nodes()[0].contentDocument.body:"body"),T=v==="sandbox"?b.nodes()[0].contentDocument:document,_=T.getElementById(s);V7=_.parentElement.offsetWidth,V7===void 0&&(V7=1200),p.useWidth!==void 0&&(V7=p.useWidth);const A=d.db.getTasks();let P=[];for(const de of A)P.push(de.type);P=se(P);const R={};let F=2*p.topPadding;if(d.db.getDisplayMode()==="compact"||p.displayMode==="compact"){const de={};for(const ge of A)de[ge.section]===void 0?de[ge.section]=[ge]:de[ge.section].push(ge);let X=0;for(const ge of Object.keys(de)){const W=gnn(de[ge],X)+1;X+=W,F+=W*(p.barHeight+p.barGap),R[ge]=W}}else{F+=A.length*(p.barHeight+p.barGap);for(const de of P)R[de]=A.filter(X=>X.type===de).length}_.setAttribute("viewBox","0 0 "+V7+" "+F);const j=y.select(`[id="${s}"]`),K=fNt().domain([WAt(A,function(de){return de.startTime}),KAt(A,function(de){return de.endTime})]).rangeRound([0,V7-p.leftPadding-p.rightPadding]);function ee(de,X){const ge=de.startTime,W=X.startTime;let xe=0;return ge>W?xe=1:geke.order))].map(ke=>de.find(Ke=>Ke.order===ke));j.append("g").selectAll("rect").data(je).enter().append("rect").attr("x",0).attr("y",function(ke,Ke){return Ke=ke.order,Ke*X+ge-2}).attr("width",function(){return Fe-p.rightPadding/2}).attr("height",X).attr("class",function(ke){for(const[Ke,Ft]of P.entries())if(ke.type===Ft)return"section section"+Ke%p.numberSectionStyles;return"section section0"});const Ie=j.append("g").selectAll("rect").data(de).enter(),Se=d.db.getLinks();if(Ie.append("rect").attr("id",function(ke){return ke.id}).attr("rx",3).attr("ry",3).attr("x",function(ke){return ke.milestone?K(ke.startTime)+W+.5*(K(ke.endTime)-K(ke.startTime))-.5*xe:K(ke.startTime)+W}).attr("y",function(ke,Ke){return Ke=ke.order,Ke*X+ge}).attr("width",function(ke){return ke.milestone?xe:K(ke.renderEndTime||ke.endTime)-K(ke.startTime)}).attr("height",xe).attr("transform-origin",function(ke,Ke){return Ke=ke.order,(K(ke.startTime)+W+.5*(K(ke.endTime)-K(ke.startTime))).toString()+"px "+(Ke*X+ge+.5*xe).toString()+"px"}).attr("class",function(ke){const Ke="task";let Ft="";ke.classes.length>0&&(Ft=ke.classes.join(" "));let Ne=0;for(const[_t,Et]of P.entries())ke.type===Et&&(Ne=_t%p.numberSectionStyles);let gn="";return ke.active?ke.crit?gn+=" activeCrit":gn=" active":ke.done?ke.crit?gn=" doneCrit":gn=" done":ke.crit&&(gn+=" crit"),gn.length===0&&(gn=" task"),ke.milestone&&(gn=" milestone "+gn),gn+=Ne,gn+=" "+Ft,Ke+gn}),Ie.append("text").attr("id",function(ke){return ke.id+"-text"}).text(function(ke){return ke.task}).attr("font-size",p.fontSize).attr("x",function(ke){let Ke=K(ke.startTime),Ft=K(ke.renderEndTime||ke.endTime);ke.milestone&&(Ke+=.5*(K(ke.endTime)-K(ke.startTime))-.5*xe),ke.milestone&&(Ft=Ke+xe);const Ne=this.getBBox().width;return Ne>Ft-Ke?Ft+Ne+1.5*p.leftPadding>Fe?Ke+W-5:Ft+W+5:(Ft-Ke)/2+Ke+W}).attr("y",function(ke,Ke){return Ke=ke.order,Ke*X+p.barHeight/2+(p.fontSize/2-2)+ge}).attr("text-height",xe).attr("class",function(ke){const Ke=K(ke.startTime);let Ft=K(ke.endTime);ke.milestone&&(Ft=Ke+xe);const Ne=this.getBBox().width;let gn="";ke.classes.length>0&&(gn=ke.classes.join(" "));let _t=0;for(const[Gt,ln]of P.entries())ke.type===ln&&(_t=Gt%p.numberSectionStyles);let Et="";return ke.active&&(ke.crit?Et="activeCritText"+_t:Et="activeText"+_t),ke.done?ke.crit?Et=Et+" doneCritText"+_t:Et=Et+" doneText"+_t:ke.crit&&(Et=Et+" critText"+_t),ke.milestone&&(Et+=" milestoneText"),Ne>Ft-Ke?Ft+Ne+1.5*p.leftPadding>Fe?gn+" taskTextOutsideLeft taskTextOutside"+_t+" "+Et:gn+" taskTextOutsideRight taskTextOutside"+_t+" "+Et+" width-"+Ne:gn+" taskText taskText"+_t+" "+Et+" width-"+Ne}),qt().securityLevel==="sandbox"){let ke;ke=Ir("#i"+s);const Ke=ke.nodes()[0].contentDocument;Ie.filter(function(Ft){return Se[Ft.id]!==void 0}).each(function(Ft){var Ne=Ke.querySelector("#"+Ft.id),gn=Ke.querySelector("#"+Ft.id+"-text");const _t=Ne.parentNode;var Et=Ke.createElement("a");Et.setAttribute("xlink:href",Se[Ft.id]),Et.setAttribute("target","_top"),_t.appendChild(Et),Et.appendChild(Ne),Et.appendChild(gn)})}}function pe(de,X,ge,W,xe,U,Fe,Pe){if(Fe.length===0&&Pe.length===0)return;let je,Ie;for(const{startTime:Ne,endTime:gn}of U)(je===void 0||NeIe)&&(Ie=gn);if(!je||!Ie)return;if(Lg(Ie).diff(Lg(je),"year")>5){Xe.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");return}const Se=d.db.getDateFormat(),Ce=[];let ke=null,Ke=Lg(je);for(;Ke.valueOf()<=Ie;)d.db.isInvalidDate(Ke,Se,Fe,Pe)?ke?ke.end=Ke:ke={start:Ke,end:Ke}:ke&&(Ce.push(ke),ke=null),Ke=Ke.add(1,"d");j.append("g").selectAll("rect").data(Ce).enter().append("rect").attr("id",function(Ne){return"exclude-"+Ne.start.format("YYYY-MM-DD")}).attr("x",function(Ne){return K(Ne.start)+ge}).attr("y",p.gridLineStartPadding).attr("width",function(Ne){const gn=Ne.end.add(1,"day");return K(gn)-K(Ne.start)}).attr("height",xe-X-p.gridLineStartPadding).attr("transform-origin",function(Ne,gn){return(K(Ne.start)+ge+.5*(K(Ne.end)-K(Ne.start))).toString()+"px "+(gn*de+.5*xe).toString()+"px"}).attr("class","exclude-range")}function be(de,X,ge,W){let xe=rLt(K).tickSize(-W+X+p.gridLineStartPadding).tickFormat(sX(d.db.getAxisFormat()||p.axisFormat||"%Y-%m-%d"));const Fe=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(d.db.getTickInterval()||p.tickInterval);if(Fe!==null){const Pe=Fe[1],je=Fe[2],Ie=d.db.getWeekday()||p.weekday;switch(je){case"millisecond":xe.ticks(aD.every(Pe));break;case"second":xe.ticks(b9.every(Pe));break;case"minute":xe.ticks(AF.every(Pe));break;case"hour":xe.ticks(LF.every(Pe));break;case"day":xe.ticks(vC.every(Pe));break;case"week":xe.ticks(uGe[Ie].every(Pe));break;case"month":xe.ticks(IF.every(Pe));break}}if(j.append("g").attr("class","grid").attr("transform","translate("+de+", "+(W-50)+")").call(xe).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),d.db.topAxisEnabled()||p.topAxis){let Pe=nLt(K).tickSize(-W+X+p.gridLineStartPadding).tickFormat(sX(d.db.getAxisFormat()||p.axisFormat||"%Y-%m-%d"));if(Fe!==null){const je=Fe[1],Ie=Fe[2],Se=d.db.getWeekday()||p.weekday;switch(Ie){case"millisecond":Pe.ticks(aD.every(je));break;case"second":Pe.ticks(b9.every(je));break;case"minute":Pe.ticks(AF.every(je));break;case"hour":Pe.ticks(LF.every(je));break;case"day":Pe.ticks(vC.every(je));break;case"week":Pe.ticks(uGe[Se].every(je));break;case"month":Pe.ticks(IF.every(je));break}}j.append("g").attr("class","grid").attr("transform","translate("+de+", "+X+")").call(Pe).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}function ae(de,X){let ge=0;const W=Object.keys(R).map(xe=>[xe,R[xe]]);j.append("g").selectAll("text").data(W).enter().append(function(xe){const U=xe[0].split(ci.lineBreakRegex),Fe=-(U.length-1)/2,Pe=T.createElementNS("http://www.w3.org/2000/svg","text");Pe.setAttribute("dy",Fe+"em");for(const[je,Ie]of U.entries()){const Se=T.createElementNS("http://www.w3.org/2000/svg","tspan");Se.setAttribute("alignment-baseline","central"),Se.setAttribute("x","10"),je>0&&Se.setAttribute("dy","1em"),Se.textContent=Ie,Pe.appendChild(Se)}return Pe}).attr("x",10).attr("y",function(xe,U){if(U>0)for(let Fe=0;Fe` .mermaid-main-font { - font-family: "trebuchet ms", verdana, arial, sans-serif; - font-family: var(--mermaid-font-family); + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); } + .exclude-range { fill: ${i.excludeBkgColor}; } @@ -388,11 +662,7 @@ Expecting `+ni.join(", ")+", got '"+(this.terminals_[zt]||zt)+"'":Ks="Parse erro .sectionTitle { text-anchor: start; - // font-size: ${i.ganttFontSize}; - // text-height: 14px; - font-family: 'trebuchet ms', verdana, arial, sans-serif; - font-family: var(--mermaid-font-family); - + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); } @@ -402,10 +672,11 @@ Expecting `+ni.join(", ")+", got '"+(this.terminals_[zt]||zt)+"'":Ks="Parse erro stroke: ${i.gridColor}; opacity: 0.8; shape-rendering: crispEdges; - text { - font-family: ${i.fontFamily}; - fill: ${i.textColor}; - } + } + + .grid .tick text { + font-family: ${i.fontFamily}; + fill: ${i.textColor}; } .grid path { @@ -432,33 +703,27 @@ Expecting `+ni.join(", ")+", got '"+(this.terminals_[zt]||zt)+"'":Ks="Parse erro .taskText { text-anchor: middle; - font-family: 'trebuchet ms', verdana, arial, sans-serif; - font-family: var(--mermaid-font-family); + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); } - // .taskText:not([font-size]) { - // font-size: ${i.ganttFontSize}; - // } - .taskTextOutsideRight { fill: ${i.taskTextDarkColor}; text-anchor: start; - // font-size: ${i.ganttFontSize}; - font-family: 'trebuchet ms', verdana, arial, sans-serif; - font-family: var(--mermaid-font-family); - + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); } .taskTextOutsideLeft { fill: ${i.taskTextDarkColor}; text-anchor: end; - // font-size: ${i.ganttFontSize}; } + /* Special case clickable */ + .task.clickable { cursor: pointer; } + .taskText.clickable { cursor: pointer; fill: ${i.taskTextClickableColor} !important; @@ -477,6 +742,7 @@ Expecting `+ni.join(", ")+", got '"+(this.terminals_[zt]||zt)+"'":Ks="Parse erro font-weight: bold; } + /* Specific task settings for the sections*/ .taskText0, @@ -598,22 +864,21 @@ Expecting `+ni.join(", ")+", got '"+(this.terminals_[zt]||zt)+"'":Ks="Parse erro .titleText { text-anchor: middle; font-size: 18px; - fill: ${i.textColor} ; - font-family: 'trebuchet ms', verdana, arial, sans-serif; - font-family: var(--mermaid-font-family); + fill: ${i.titleColor||i.textColor}; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); } -`}},Symbol.toStringTag,{value:"Module"}));var ngt=function(){var i=function(m,b,E,_){for(E=E||{},_=m.length;_--;E[m[_]]=b);return E},a=[6,9,10],f={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(b,E,_,A,I,B,N){switch(B.length-1,I){case 1:return A;case 4:break;case 6:A.setInfo(!0);break}},table:[{3:1,4:[1,2]},{1:[3]},i(a,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},i(a,[2,3]),i(a,[2,4]),i(a,[2,5]),i(a,[2,6])],defaultActions:{4:[2,1]},parseError:function(b,E){if(E.recoverable)this.trace(b);else{var _=new Error(b);throw _.hash=E,_}},parse:function(b){var E=this,_=[0],A=[],I=[null],B=[],N=this.table,R="",z=0,W=0,et=2,st=1,at=B.slice.call(arguments,1),bt=Object.create(this.lexer),mt={yy:{}};for(var yt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,yt)&&(mt.yy[yt]=this.yy[yt]);bt.setInput(b,mt.yy),mt.yy.lexer=bt,mt.yy.parser=this,typeof bt.yylloc>"u"&&(bt.yylloc={});var ft=bt.yylloc;B.push(ft);var ut=bt.options&&bt.options.ranges;typeof mt.yy.parseError=="function"?this.parseError=mt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function vt(){var Ct;return Ct=A.pop()||bt.lex()||st,typeof Ct!="number"&&(Ct instanceof Array&&(A=Ct,Ct=A.pop()),Ct=E.symbols_[Ct]||Ct),Ct}for(var X,pt,U,Tt,nt={},It,Ot,Bt,Et;;){if(pt=_[_.length-1],this.defaultActions[pt]?U=this.defaultActions[pt]:((X===null||typeof X>"u")&&(X=vt()),U=N[pt]&&N[pt][X]),typeof U>"u"||!U.length||!U[0]){var Z="";Et=[];for(It in N[pt])this.terminals_[It]&&It>et&&Et.push("'"+this.terminals_[It]+"'");bt.showPosition?Z="Parse error on line "+(z+1)+`: -`+bt.showPosition()+` -Expecting `+Et.join(", ")+", got '"+(this.terminals_[X]||X)+"'":Z="Parse error on line "+(z+1)+": Unexpected "+(X==st?"end of input":"'"+(this.terminals_[X]||X)+"'"),this.parseError(Z,{text:bt.match,token:this.terminals_[X]||X,line:bt.yylineno,loc:ft,expected:Et})}if(U[0]instanceof Array&&U.length>1)throw new Error("Parse Error: multiple actions possible at state: "+pt+", token: "+X);switch(U[0]){case 1:_.push(X),I.push(bt.yytext),B.push(bt.yylloc),_.push(U[1]),X=null,W=bt.yyleng,R=bt.yytext,z=bt.yylineno,ft=bt.yylloc;break;case 2:if(Ot=this.productions_[U[1]][1],nt.$=I[I.length-Ot],nt._$={first_line:B[B.length-(Ot||1)].first_line,last_line:B[B.length-1].last_line,first_column:B[B.length-(Ot||1)].first_column,last_column:B[B.length-1].last_column},ut&&(nt._$.range=[B[B.length-(Ot||1)].range[0],B[B.length-1].range[1]]),Tt=this.performAction.apply(nt,[R,W,z,mt.yy,U[1],I,B].concat(at)),typeof Tt<"u")return Tt;Ot&&(_=_.slice(0,-1*Ot*2),I=I.slice(0,-1*Ot),B=B.slice(0,-1*Ot)),_.push(this.productions_[U[1]][0]),I.push(nt.$),B.push(nt._$),Bt=N[_[_.length-2]][_[_.length-1]],_.push(Bt);break;case 3:return!0}}return!0}},p=function(){var m={EOF:1,parseError:function(E,_){if(this.yy.parser)this.yy.parser.parseError(E,_);else throw new Error(E)},setInput:function(b,E){return this.yy=E||this.yy||{},this._input=b,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var b=this._input[0];this.yytext+=b,this.yyleng++,this.offset++,this.match+=b,this.matched+=b;var E=b.match(/(?:\r\n?|\n).*/g);return E?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),b},unput:function(b){var E=b.length,_=b.split(/(?:\r\n?|\n)/g);this._input=b+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-E),this.offset-=E;var A=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),_.length-1&&(this.yylineno-=_.length-1);var I=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:_?(_.length===A.length?this.yylloc.first_column:0)+A[A.length-_.length].length-_[0].length:this.yylloc.first_column-E},this.options.ranges&&(this.yylloc.range=[I[0],I[0]+this.yyleng-E]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(b){this.unput(this.match.slice(b))},pastInput:function(){var b=this.matched.substr(0,this.matched.length-this.match.length);return(b.length>20?"...":"")+b.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var b=this.match;return b.length<20&&(b+=this._input.substr(0,20-b.length)),(b.substr(0,20)+(b.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var b=this.pastInput(),E=new Array(b.length+1).join("-");return b+this.upcomingInput()+` -`+E+"^"},test_match:function(b,E){var _,A,I;if(this.options.backtrack_lexer&&(I={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(I.yylloc.range=this.yylloc.range.slice(0))),A=b[0].match(/(?:\r\n?|\n).*/g),A&&(this.yylineno+=A.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:A?A[A.length-1].length-A[A.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],_=this.performAction.call(this,this.yy,this,E,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),_)return _;if(this._backtrack){for(var B in I)this[B]=I[B];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var b,E,_,A;this._more||(this.yytext="",this.match="");for(var I=this._currentRules(),B=0;BE[0].length)){if(E=_,A=B,this.options.backtrack_lexer){if(b=this.test_match(_,I[B]),b!==!1)return b;if(this._backtrack){E=!1;continue}else return!1}else if(!this.options.flex)break}return E?(b=this.test_match(E,I[A]),b!==!1?b:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var E=this.next();return E||this.lex()},begin:function(E){this.conditionStack.push(E)},popState:function(){var E=this.conditionStack.length-1;return E>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(E){return E=this.conditionStack.length-1-Math.abs(E||0),E>=0?this.conditionStack[E]:"INITIAL"},pushState:function(E){this.begin(E)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(E,_,A,I){switch(A){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};return m}();f.lexer=p;function w(){this.yy={}}return w.prototype=f,f.Parser=w,new w}();ngt.parser=ngt;const Xqe=ngt,sRt={info:!1};let rgt=sRt.info;const Qqe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Xqe,db:{clear:()=>{rgt=sRt.info},setInfo:i=>{rgt=i},getInfo:()=>rgt},renderer:{draw:(i,a,f)=>{Ut.debug(`rendering info diagram -`+i);const p=VW(a);k0(p,100,400,!0),p.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${f}`)}}}},Symbol.toStringTag,{value:"Module"}));var igt=function(){var i=function(bt,mt,yt,ft){for(yt=yt||{},ft=bt.length;ft--;yt[bt[ft]]=mt);return yt},a=[1,3],f=[1,4],p=[1,5],w=[1,6],m=[1,10,12,14,16,18,19,20,21,22],b=[2,4],E=[1,5,10,12,14,16,18,19,20,21,22],_=[20,21,22],A=[2,7],I=[1,12],B=[1,13],N=[1,14],R=[1,15],z=[1,16],W=[1,17],et={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,PIE:5,document:6,showData:7,line:8,statement:9,txt:10,value:11,title:12,title_value:13,acc_title:14,acc_title_value:15,acc_descr:16,acc_descr_value:17,acc_descr_multiline_value:18,section:19,NEWLINE:20,";":21,EOF:22,$accept:0,$end:1},terminals_:{2:"error",5:"PIE",7:"showData",10:"txt",11:"value",12:"title",13:"title_value",14:"acc_title",15:"acc_title_value",16:"acc_descr",17:"acc_descr_value",18:"acc_descr_multiline_value",19:"section",20:"NEWLINE",21:";",22:"EOF"},productions_:[0,[3,2],[3,2],[3,3],[6,0],[6,2],[8,2],[9,0],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[4,1],[4,1],[4,1]],performAction:function(mt,yt,ft,ut,vt,X,pt){var U=X.length-1;switch(vt){case 3:ut.setShowData(!0);break;case 6:this.$=X[U-1];break;case 8:ut.addSection(X[U-1],ut.cleanupValue(X[U]));break;case 9:this.$=X[U].trim(),ut.setDiagramTitle(this.$);break;case 10:this.$=X[U].trim(),ut.setAccTitle(this.$);break;case 11:case 12:this.$=X[U].trim(),ut.setAccDescription(this.$);break;case 13:ut.addSection(X[U].substr(8)),this.$=X[U].substr(8);break}},table:[{3:1,4:2,5:a,20:f,21:p,22:w},{1:[3]},{3:7,4:2,5:a,20:f,21:p,22:w},i(m,b,{6:8,7:[1,9]}),i(E,[2,14]),i(E,[2,15]),i(E,[2,16]),{1:[2,1]},i(_,A,{8:10,9:11,1:[2,2],10:I,12:B,14:N,16:R,18:z,19:W}),i(m,b,{6:18}),i(m,[2,5]),{4:19,20:f,21:p,22:w},{11:[1,20]},{13:[1,21]},{15:[1,22]},{17:[1,23]},i(_,[2,12]),i(_,[2,13]),i(_,A,{8:10,9:11,1:[2,3],10:I,12:B,14:N,16:R,18:z,19:W}),i(m,[2,6]),i(_,[2,8]),i(_,[2,9]),i(_,[2,10]),i(_,[2,11])],defaultActions:{7:[2,1]},parseError:function(mt,yt){if(yt.recoverable)this.trace(mt);else{var ft=new Error(mt);throw ft.hash=yt,ft}},parse:function(mt){var yt=this,ft=[0],ut=[],vt=[null],X=[],pt=this.table,U="",Tt=0,nt=0,It=2,Ot=1,Bt=X.slice.call(arguments,1),Et=Object.create(this.lexer),Z={yy:{}};for(var Ct in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ct)&&(Z.yy[Ct]=this.yy[Ct]);Et.setInput(mt,Z.yy),Z.yy.lexer=Et,Z.yy.parser=this,typeof Et.yylloc>"u"&&(Et.yylloc={});var xt=Et.yylloc;X.push(xt);var Ht=Et.options&&Et.options.ranges;typeof Z.yy.parseError=="function"?this.parseError=Z.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Le(){var se;return se=ut.pop()||Et.lex()||Ot,typeof se!="number"&&(se instanceof Array&&(ut=se,se=ut.pop()),se=yt.symbols_[se]||se),se}for(var Ft,gn,Se,me,Ve={},Ye,ce,ke,zt;;){if(gn=ft[ft.length-1],this.defaultActions[gn]?Se=this.defaultActions[gn]:((Ft===null||typeof Ft>"u")&&(Ft=Le()),Se=pt[gn]&&pt[gn][Ft]),typeof Se>"u"||!Se.length||!Se[0]){var re="";zt=[];for(Ye in pt[gn])this.terminals_[Ye]&&Ye>It&&zt.push("'"+this.terminals_[Ye]+"'");Et.showPosition?re="Parse error on line "+(Tt+1)+`: -`+Et.showPosition()+` -Expecting `+zt.join(", ")+", got '"+(this.terminals_[Ft]||Ft)+"'":re="Parse error on line "+(Tt+1)+": Unexpected "+(Ft==Ot?"end of input":"'"+(this.terminals_[Ft]||Ft)+"'"),this.parseError(re,{text:Et.match,token:this.terminals_[Ft]||Ft,line:Et.yylineno,loc:xt,expected:zt})}if(Se[0]instanceof Array&&Se.length>1)throw new Error("Parse Error: multiple actions possible at state: "+gn+", token: "+Ft);switch(Se[0]){case 1:ft.push(Ft),vt.push(Et.yytext),X.push(Et.yylloc),ft.push(Se[1]),Ft=null,nt=Et.yyleng,U=Et.yytext,Tt=Et.yylineno,xt=Et.yylloc;break;case 2:if(ce=this.productions_[Se[1]][1],Ve.$=vt[vt.length-ce],Ve._$={first_line:X[X.length-(ce||1)].first_line,last_line:X[X.length-1].last_line,first_column:X[X.length-(ce||1)].first_column,last_column:X[X.length-1].last_column},Ht&&(Ve._$.range=[X[X.length-(ce||1)].range[0],X[X.length-1].range[1]]),me=this.performAction.apply(Ve,[U,nt,Tt,Z.yy,Se[1],vt,X].concat(Bt)),typeof me<"u")return me;ce&&(ft=ft.slice(0,-1*ce*2),vt=vt.slice(0,-1*ce),X=X.slice(0,-1*ce)),ft.push(this.productions_[Se[1]][0]),vt.push(Ve.$),X.push(Ve._$),ke=pt[ft[ft.length-2]][ft[ft.length-1]],ft.push(ke);break;case 3:return!0}}return!0}},st=function(){var bt={EOF:1,parseError:function(yt,ft){if(this.yy.parser)this.yy.parser.parseError(yt,ft);else throw new Error(yt)},setInput:function(mt,yt){return this.yy=yt||this.yy||{},this._input=mt,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var mt=this._input[0];this.yytext+=mt,this.yyleng++,this.offset++,this.match+=mt,this.matched+=mt;var yt=mt.match(/(?:\r\n?|\n).*/g);return yt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),mt},unput:function(mt){var yt=mt.length,ft=mt.split(/(?:\r\n?|\n)/g);this._input=mt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-yt),this.offset-=yt;var ut=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ft.length-1&&(this.yylineno-=ft.length-1);var vt=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ft?(ft.length===ut.length?this.yylloc.first_column:0)+ut[ut.length-ft.length].length-ft[0].length:this.yylloc.first_column-yt},this.options.ranges&&(this.yylloc.range=[vt[0],vt[0]+this.yyleng-yt]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(mt){this.unput(this.match.slice(mt))},pastInput:function(){var mt=this.matched.substr(0,this.matched.length-this.match.length);return(mt.length>20?"...":"")+mt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var mt=this.match;return mt.length<20&&(mt+=this._input.substr(0,20-mt.length)),(mt.substr(0,20)+(mt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var mt=this.pastInput(),yt=new Array(mt.length+1).join("-");return mt+this.upcomingInput()+` -`+yt+"^"},test_match:function(mt,yt){var ft,ut,vt;if(this.options.backtrack_lexer&&(vt={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(vt.yylloc.range=this.yylloc.range.slice(0))),ut=mt[0].match(/(?:\r\n?|\n).*/g),ut&&(this.yylineno+=ut.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ut?ut[ut.length-1].length-ut[ut.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+mt[0].length},this.yytext+=mt[0],this.match+=mt[0],this.matches=mt,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(mt[0].length),this.matched+=mt[0],ft=this.performAction.call(this,this.yy,this,yt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ft)return ft;if(this._backtrack){for(var X in vt)this[X]=vt[X];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var mt,yt,ft,ut;this._more||(this.yytext="",this.match="");for(var vt=this._currentRules(),X=0;Xyt[0].length)){if(yt=ft,ut=X,this.options.backtrack_lexer){if(mt=this.test_match(ft,vt[X]),mt!==!1)return mt;if(this._backtrack){yt=!1;continue}else return!1}else if(!this.options.flex)break}return yt?(mt=this.test_match(yt,vt[ut]),mt!==!1?mt:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var yt=this.next();return yt||this.lex()},begin:function(yt){this.conditionStack.push(yt)},popState:function(){var yt=this.conditionStack.length-1;return yt>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(yt){return yt=this.conditionStack.length-1-Math.abs(yt||0),yt>=0?this.conditionStack[yt]:"INITIAL"},pushState:function(yt){this.begin(yt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(yt,ft,ut,vt){switch(ut){case 0:break;case 1:break;case 2:return 20;case 3:break;case 4:break;case 5:return this.begin("title"),12;case 6:return this.popState(),"title_value";case 7:return this.begin("acc_title"),14;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),16;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:this.begin("string");break;case 15:this.popState();break;case 16:return"txt";case 17:return 5;case 18:return 7;case 19:return"value";case 20:return 22}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[6],inclusive:!1},string:{rules:[15,16],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,7,9,11,14,17,18,19,20],inclusive:!0}}};return bt}();et.lexer=st;function at(){this.yy={}}return at.prototype=et,et.Parser=at,new at}();igt.parser=igt;const Zqe=igt,aRt=Zh.pie,FY={sections:{},showData:!1,config:aRt};let NY=FY.sections,sgt=FY.showData;const Jqe=structuredClone(aRt),tHe={getConfig:()=>structuredClone(Jqe),clear:()=>{NY=structuredClone(FY.sections),sgt=FY.showData,hg()},setDiagramTitle:Nb,getDiagramTitle:pg,setAccTitle:E0,getAccTitle:fg,setAccDescription:dg,getAccDescription:gg,addSection:(i,a)=>{i=Q1(i,Oe()),NY[i]===void 0&&(NY[i]=a,Ut.debug(`added new section: ${i}, with value: ${a}`))},getSections:()=>NY,cleanupValue:i=>(i.substring(0,1)===":"&&(i=i.substring(1).trim()),Number(i.trim())),setShowData:i=>{sgt=i},getShowData:()=>sgt},eHe=i=>` +`}},Symbol.toStringTag,{value:"Module"}));var cve=function(){var i=function(v,b,y,T){for(y=y||{},T=v.length;T--;y[v[T]]=b);return y},s=[6,9,10],u={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(b,y,T,_,A,P,R){switch(P.length-1,A){case 1:return _;case 4:break;case 6:_.setInfo(!0);break}},table:[{3:1,4:[1,2]},{1:[3]},i(s,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},i(s,[2,3]),i(s,[2,4]),i(s,[2,5]),i(s,[2,6])],defaultActions:{4:[2,1]},parseError:function(b,y){if(y.recoverable)this.trace(b);else{var T=new Error(b);throw T.hash=y,T}},parse:function(b){var y=this,T=[0],_=[],A=[null],P=[],R=this.table,F="",j=0,K=0,ee=2,ie=1,oe=P.slice.call(arguments,1),pe=Object.create(this.lexer),be={yy:{}};for(var ae in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ae)&&(be.yy[ae]=this.yy[ae]);pe.setInput(b,be.yy),be.yy.lexer=pe,be.yy.parser=this,typeof pe.yylloc>"u"&&(pe.yylloc={});var ne=pe.yylloc;P.push(ne);var se=pe.options&&pe.options.ranges;typeof be.yy.parseError=="function"?this.parseError=be.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function de(){var Ce;return Ce=_.pop()||pe.lex()||ie,typeof Ce!="number"&&(Ce instanceof Array&&(_=Ce,Ce=_.pop()),Ce=y.symbols_[Ce]||Ce),Ce}for(var X,ge,W,xe,U={},Fe,Pe,je,Ie;;){if(ge=T[T.length-1],this.defaultActions[ge]?W=this.defaultActions[ge]:((X===null||typeof X>"u")&&(X=de()),W=R[ge]&&R[ge][X]),typeof W>"u"||!W.length||!W[0]){var Se="";Ie=[];for(Fe in R[ge])this.terminals_[Fe]&&Fe>ee&&Ie.push("'"+this.terminals_[Fe]+"'");pe.showPosition?Se="Parse error on line "+(j+1)+`: +`+pe.showPosition()+` +Expecting `+Ie.join(", ")+", got '"+(this.terminals_[X]||X)+"'":Se="Parse error on line "+(j+1)+": Unexpected "+(X==ie?"end of input":"'"+(this.terminals_[X]||X)+"'"),this.parseError(Se,{text:pe.match,token:this.terminals_[X]||X,line:pe.yylineno,loc:ne,expected:Ie})}if(W[0]instanceof Array&&W.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ge+", token: "+X);switch(W[0]){case 1:T.push(X),A.push(pe.yytext),P.push(pe.yylloc),T.push(W[1]),X=null,K=pe.yyleng,F=pe.yytext,j=pe.yylineno,ne=pe.yylloc;break;case 2:if(Pe=this.productions_[W[1]][1],U.$=A[A.length-Pe],U._$={first_line:P[P.length-(Pe||1)].first_line,last_line:P[P.length-1].last_line,first_column:P[P.length-(Pe||1)].first_column,last_column:P[P.length-1].last_column},se&&(U._$.range=[P[P.length-(Pe||1)].range[0],P[P.length-1].range[1]]),xe=this.performAction.apply(U,[F,K,j,be.yy,W[1],A,P].concat(oe)),typeof xe<"u")return xe;Pe&&(T=T.slice(0,-1*Pe*2),A=A.slice(0,-1*Pe),P=P.slice(0,-1*Pe)),T.push(this.productions_[W[1]][0]),A.push(U.$),P.push(U._$),je=R[T[T.length-2]][T[T.length-1]],T.push(je);break;case 3:return!0}}return!0}},d=function(){var v={EOF:1,parseError:function(y,T){if(this.yy.parser)this.yy.parser.parseError(y,T);else throw new Error(y)},setInput:function(b,y){return this.yy=y||this.yy||{},this._input=b,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var b=this._input[0];this.yytext+=b,this.yyleng++,this.offset++,this.match+=b,this.matched+=b;var y=b.match(/(?:\r\n?|\n).*/g);return y?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),b},unput:function(b){var y=b.length,T=b.split(/(?:\r\n?|\n)/g);this._input=b+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-y),this.offset-=y;var _=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),T.length-1&&(this.yylineno-=T.length-1);var A=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:T?(T.length===_.length?this.yylloc.first_column:0)+_[_.length-T.length].length-T[0].length:this.yylloc.first_column-y},this.options.ranges&&(this.yylloc.range=[A[0],A[0]+this.yyleng-y]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(b){this.unput(this.match.slice(b))},pastInput:function(){var b=this.matched.substr(0,this.matched.length-this.match.length);return(b.length>20?"...":"")+b.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var b=this.match;return b.length<20&&(b+=this._input.substr(0,20-b.length)),(b.substr(0,20)+(b.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var b=this.pastInput(),y=new Array(b.length+1).join("-");return b+this.upcomingInput()+` +`+y+"^"},test_match:function(b,y){var T,_,A;if(this.options.backtrack_lexer&&(A={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(A.yylloc.range=this.yylloc.range.slice(0))),_=b[0].match(/(?:\r\n?|\n).*/g),_&&(this.yylineno+=_.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:_?_[_.length-1].length-_[_.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],T=this.performAction.call(this,this.yy,this,y,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),T)return T;if(this._backtrack){for(var P in A)this[P]=A[P];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var b,y,T,_;this._more||(this.yytext="",this.match="");for(var A=this._currentRules(),P=0;Py[0].length)){if(y=T,_=P,this.options.backtrack_lexer){if(b=this.test_match(T,A[P]),b!==!1)return b;if(this._backtrack){y=!1;continue}else return!1}else if(!this.options.flex)break}return y?(b=this.test_match(y,A[_]),b!==!1?b:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var y=this.next();return y||this.lex()},begin:function(y){this.conditionStack.push(y)},popState:function(){var y=this.conditionStack.length-1;return y>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(y){return y=this.conditionStack.length-1-Math.abs(y||0),y>=0?this.conditionStack[y]:"INITIAL"},pushState:function(y){this.begin(y)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(y,T,_,A){switch(_){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};return v}();u.lexer=d;function p(){this.yy={}}return p.prototype=u,u.Parser=p,new p}();cve.parser=cve;const bnn=cve,lGe={info:!1};let uve=lGe.info;const mnn=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:bnn,db:{clear:()=>{uve=lGe.info},setInfo:i=>{uve=i},getInfo:()=>uve},renderer:{draw:(i,s,u)=>{Xe.debug(`rendering info diagram +`+i);const d=rR(s);Ng(d,100,400,!0),d.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${u}`)}}}},Symbol.toStringTag,{value:"Module"}));var lve=function(){var i=function(pe,be,ae,ne){for(ae=ae||{},ne=pe.length;ne--;ae[pe[ne]]=be);return ae},s=[1,3],u=[1,4],d=[1,5],p=[1,6],v=[1,10,12,14,16,18,19,20,21,22],b=[2,4],y=[1,5,10,12,14,16,18,19,20,21,22],T=[20,21,22],_=[2,7],A=[1,12],P=[1,13],R=[1,14],F=[1,15],j=[1,16],K=[1,17],ee={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,PIE:5,document:6,showData:7,line:8,statement:9,txt:10,value:11,title:12,title_value:13,acc_title:14,acc_title_value:15,acc_descr:16,acc_descr_value:17,acc_descr_multiline_value:18,section:19,NEWLINE:20,";":21,EOF:22,$accept:0,$end:1},terminals_:{2:"error",5:"PIE",7:"showData",10:"txt",11:"value",12:"title",13:"title_value",14:"acc_title",15:"acc_title_value",16:"acc_descr",17:"acc_descr_value",18:"acc_descr_multiline_value",19:"section",20:"NEWLINE",21:";",22:"EOF"},productions_:[0,[3,2],[3,2],[3,3],[6,0],[6,2],[8,2],[9,0],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[4,1],[4,1],[4,1]],performAction:function(be,ae,ne,se,de,X,ge){var W=X.length-1;switch(de){case 3:se.setShowData(!0);break;case 6:this.$=X[W-1];break;case 8:se.addSection(X[W-1],se.cleanupValue(X[W]));break;case 9:this.$=X[W].trim(),se.setDiagramTitle(this.$);break;case 10:this.$=X[W].trim(),se.setAccTitle(this.$);break;case 11:case 12:this.$=X[W].trim(),se.setAccDescription(this.$);break;case 13:se.addSection(X[W].substr(8)),this.$=X[W].substr(8);break}},table:[{3:1,4:2,5:s,20:u,21:d,22:p},{1:[3]},{3:7,4:2,5:s,20:u,21:d,22:p},i(v,b,{6:8,7:[1,9]}),i(y,[2,14]),i(y,[2,15]),i(y,[2,16]),{1:[2,1]},i(T,_,{8:10,9:11,1:[2,2],10:A,12:P,14:R,16:F,18:j,19:K}),i(v,b,{6:18}),i(v,[2,5]),{4:19,20:u,21:d,22:p},{11:[1,20]},{13:[1,21]},{15:[1,22]},{17:[1,23]},i(T,[2,12]),i(T,[2,13]),i(T,_,{8:10,9:11,1:[2,3],10:A,12:P,14:R,16:F,18:j,19:K}),i(v,[2,6]),i(T,[2,8]),i(T,[2,9]),i(T,[2,10]),i(T,[2,11])],defaultActions:{7:[2,1]},parseError:function(be,ae){if(ae.recoverable)this.trace(be);else{var ne=new Error(be);throw ne.hash=ae,ne}},parse:function(be){var ae=this,ne=[0],se=[],de=[null],X=[],ge=this.table,W="",xe=0,U=0,Fe=2,Pe=1,je=X.slice.call(arguments,1),Ie=Object.create(this.lexer),Se={yy:{}};for(var Ce in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ce)&&(Se.yy[Ce]=this.yy[Ce]);Ie.setInput(be,Se.yy),Se.yy.lexer=Ie,Se.yy.parser=this,typeof Ie.yylloc>"u"&&(Ie.yylloc={});var ke=Ie.yylloc;X.push(ke);var Ke=Ie.options&&Ie.options.ranges;typeof Se.yy.parseError=="function"?this.parseError=Se.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ft(){var kt;return kt=se.pop()||Ie.lex()||Pe,typeof kt!="number"&&(kt instanceof Array&&(se=kt,kt=se.pop()),kt=ae.symbols_[kt]||kt),kt}for(var Ne,gn,_t,Et,Gt={},ln,xt,Pt,Qe;;){if(gn=ne[ne.length-1],this.defaultActions[gn]?_t=this.defaultActions[gn]:((Ne===null||typeof Ne>"u")&&(Ne=Ft()),_t=ge[gn]&&ge[gn][Ne]),typeof _t>"u"||!_t.length||!_t[0]){var Dt="";Qe=[];for(ln in ge[gn])this.terminals_[ln]&&ln>Fe&&Qe.push("'"+this.terminals_[ln]+"'");Ie.showPosition?Dt="Parse error on line "+(xe+1)+`: +`+Ie.showPosition()+` +Expecting `+Qe.join(", ")+", got '"+(this.terminals_[Ne]||Ne)+"'":Dt="Parse error on line "+(xe+1)+": Unexpected "+(Ne==Pe?"end of input":"'"+(this.terminals_[Ne]||Ne)+"'"),this.parseError(Dt,{text:Ie.match,token:this.terminals_[Ne]||Ne,line:Ie.yylineno,loc:ke,expected:Qe})}if(_t[0]instanceof Array&&_t.length>1)throw new Error("Parse Error: multiple actions possible at state: "+gn+", token: "+Ne);switch(_t[0]){case 1:ne.push(Ne),de.push(Ie.yytext),X.push(Ie.yylloc),ne.push(_t[1]),Ne=null,U=Ie.yyleng,W=Ie.yytext,xe=Ie.yylineno,ke=Ie.yylloc;break;case 2:if(xt=this.productions_[_t[1]][1],Gt.$=de[de.length-xt],Gt._$={first_line:X[X.length-(xt||1)].first_line,last_line:X[X.length-1].last_line,first_column:X[X.length-(xt||1)].first_column,last_column:X[X.length-1].last_column},Ke&&(Gt._$.range=[X[X.length-(xt||1)].range[0],X[X.length-1].range[1]]),Et=this.performAction.apply(Gt,[W,U,xe,Se.yy,_t[1],de,X].concat(je)),typeof Et<"u")return Et;xt&&(ne=ne.slice(0,-1*xt*2),de=de.slice(0,-1*xt),X=X.slice(0,-1*xt)),ne.push(this.productions_[_t[1]][0]),de.push(Gt.$),X.push(Gt._$),Pt=ge[ne[ne.length-2]][ne[ne.length-1]],ne.push(Pt);break;case 3:return!0}}return!0}},ie=function(){var pe={EOF:1,parseError:function(ae,ne){if(this.yy.parser)this.yy.parser.parseError(ae,ne);else throw new Error(ae)},setInput:function(be,ae){return this.yy=ae||this.yy||{},this._input=be,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var be=this._input[0];this.yytext+=be,this.yyleng++,this.offset++,this.match+=be,this.matched+=be;var ae=be.match(/(?:\r\n?|\n).*/g);return ae?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),be},unput:function(be){var ae=be.length,ne=be.split(/(?:\r\n?|\n)/g);this._input=be+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ae),this.offset-=ae;var se=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ne.length-1&&(this.yylineno-=ne.length-1);var de=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ne?(ne.length===se.length?this.yylloc.first_column:0)+se[se.length-ne.length].length-ne[0].length:this.yylloc.first_column-ae},this.options.ranges&&(this.yylloc.range=[de[0],de[0]+this.yyleng-ae]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(be){this.unput(this.match.slice(be))},pastInput:function(){var be=this.matched.substr(0,this.matched.length-this.match.length);return(be.length>20?"...":"")+be.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var be=this.match;return be.length<20&&(be+=this._input.substr(0,20-be.length)),(be.substr(0,20)+(be.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var be=this.pastInput(),ae=new Array(be.length+1).join("-");return be+this.upcomingInput()+` +`+ae+"^"},test_match:function(be,ae){var ne,se,de;if(this.options.backtrack_lexer&&(de={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(de.yylloc.range=this.yylloc.range.slice(0))),se=be[0].match(/(?:\r\n?|\n).*/g),se&&(this.yylineno+=se.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:se?se[se.length-1].length-se[se.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+be[0].length},this.yytext+=be[0],this.match+=be[0],this.matches=be,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(be[0].length),this.matched+=be[0],ne=this.performAction.call(this,this.yy,this,ae,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ne)return ne;if(this._backtrack){for(var X in de)this[X]=de[X];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var be,ae,ne,se;this._more||(this.yytext="",this.match="");for(var de=this._currentRules(),X=0;Xae[0].length)){if(ae=ne,se=X,this.options.backtrack_lexer){if(be=this.test_match(ne,de[X]),be!==!1)return be;if(this._backtrack){ae=!1;continue}else return!1}else if(!this.options.flex)break}return ae?(be=this.test_match(ae,de[se]),be!==!1?be:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var ae=this.next();return ae||this.lex()},begin:function(ae){this.conditionStack.push(ae)},popState:function(){var ae=this.conditionStack.length-1;return ae>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(ae){return ae=this.conditionStack.length-1-Math.abs(ae||0),ae>=0?this.conditionStack[ae]:"INITIAL"},pushState:function(ae){this.begin(ae)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(ae,ne,se,de){switch(se){case 0:break;case 1:break;case 2:return 20;case 3:break;case 4:break;case 5:return this.begin("title"),12;case 6:return this.popState(),"title_value";case 7:return this.begin("acc_title"),14;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),16;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:this.begin("string");break;case 15:this.popState();break;case 16:return"txt";case 17:return 5;case 18:return 7;case 19:return"value";case 20:return 22}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[6],inclusive:!1},string:{rules:[15,16],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,7,9,11,14,17,18,19,20],inclusive:!0}}};return pe}();ee.lexer=ie;function oe(){this.yy={}}return oe.prototype=ee,ee.Parser=oe,new oe}();lve.parser=lve;const vnn=lve,hGe=sh.pie,fJ={sections:{},showData:!1,config:hGe};let dJ=fJ.sections,hve=fJ.showData;const wnn=structuredClone(hGe),ynn={getConfig:()=>structuredClone(wnn),clear:()=>{dJ=structuredClone(fJ.sections),hve=fJ.showData,Pg()},setDiagramTitle:cm,getDiagramTitle:Ap,setAccTitle:Bg,getAccTitle:Cp,setAccDescription:Sp,getAccDescription:_p,addSection:(i,s)=>{i=Yf(i,qt()),dJ[i]===void 0&&(dJ[i]=s,Xe.debug(`added new section: ${i}, with value: ${s}`))},getSections:()=>dJ,cleanupValue:i=>(i.substring(0,1)===":"&&(i=i.substring(1).trim()),Number(i.trim())),setShowData:i=>{hve=i},getShowData:()=>hve},xnn=i=>` .pieCircle{ stroke: ${i.pieStrokeColor}; stroke-width : ${i.pieStrokeWidth}; @@ -641,25 +906,25 @@ Expecting `+zt.join(", ")+", got '"+(this.terminals_[Ft]||Ft)+"'":re="Parse erro font-family: ${i.fontFamily}; font-size: ${i.pieLegendTextSize}; } -`,nHe=i=>{const a=Object.entries(i).map(p=>({label:p[0],value:p[1]})).sort((p,w)=>w.value-p.value);return uTe().value(p=>p.value)(a)},rHe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Zqe,db:tHe,renderer:{draw:(i,a,f,p)=>{var pt,U;Ut.debug(`rendering pie chart -`+i);const w=p.db,m=Oe(),b=rF(w.getConfig(),m.pie),E=450,_=((U=(pt=document.getElementById(a))==null?void 0:pt.parentElement)==null?void 0:U.offsetWidth)??b.useWidth,A=VW(a);A.attr("viewBox",`0 0 ${_} ${E}`),k0(A,E,_,b.useMaxWidth);const I=40,B=18,N=4,R=A.append("g");R.attr("transform","translate("+_/2+","+E/2+")");const{themeVariables:z}=m;let[W]=VA(z.pieOuterStrokeWidth);W??(W=2);const et=b.textPosition,st=Math.min(_,E)/2-I,at=OA().innerRadius(0).outerRadius(st),bt=OA().innerRadius(st*et).outerRadius(st*et);R.append("circle").attr("cx",0).attr("cy",0).attr("r",st+W/2).attr("class","pieOuterCircle");const mt=w.getSections(),yt=nHe(mt),ft=[z.pie1,z.pie2,z.pie3,z.pie4,z.pie5,z.pie6,z.pie7,z.pie8,z.pie9,z.pie10,z.pie11,z.pie12],ut=XU(ft);R.selectAll("mySlices").data(yt).enter().append("path").attr("d",at).attr("fill",Tt=>ut(Tt.data.label)).attr("class","pieCircle");let vt=0;Object.keys(mt).forEach(Tt=>{vt+=mt[Tt]}),R.selectAll("mySlices").data(yt).enter().append("text").text(Tt=>(Tt.data.value/vt*100).toFixed(0)+"%").attr("transform",Tt=>"translate("+bt.centroid(Tt)+")").style("text-anchor","middle").attr("class","slice"),R.append("text").text(w.getDiagramTitle()).attr("x",0).attr("y",-(E-50)/2).attr("class","pieTitleText");const X=R.selectAll(".legend").data(ut.domain()).enter().append("g").attr("class","legend").attr("transform",(Tt,nt)=>{const It=B+N,Ot=It*ut.domain().length/2,Bt=12*B,Et=nt*It-Ot;return"translate("+Bt+","+Et+")"});X.append("rect").attr("width",B).attr("height",B).style("fill",ut).style("stroke",ut),X.data(yt).append("text").attr("x",B+N).attr("y",B-N).text(Tt=>{const{label:nt,value:It}=Tt.data;return w.getShowData()?`${nt} [${It}]`:nt})}},styles:eHe}},Symbol.toStringTag,{value:"Module"}));var agt=function(){var i=function(Se,me,Ve,Ye){for(Ve=Ve||{},Ye=Se.length;Ye--;Ve[Se[Ye]]=me);return Ve},a=[1,3],f=[1,4],p=[1,5],w=[1,6],m=[1,7],b=[1,5,13,15,17,19,20,25,27,28,29,30,31,32,33,34,37,38,40,41,42,43,44,45,46,47,48,49,50],E=[1,5,6,13,15,17,19,20,25,27,28,29,30,31,32,33,34,37,38,40,41,42,43,44,45,46,47,48,49,50],_=[32,33,34],A=[2,7],I=[1,13],B=[1,17],N=[1,18],R=[1,19],z=[1,20],W=[1,21],et=[1,22],st=[1,23],at=[1,24],bt=[1,25],mt=[1,26],yt=[1,27],ft=[1,30],ut=[1,31],vt=[1,32],X=[1,33],pt=[1,34],U=[1,35],Tt=[1,36],nt=[1,37],It=[1,38],Ot=[1,39],Bt=[1,40],Et=[1,41],Z=[1,42],Ct=[1,57],xt=[1,58],Ht=[5,22,26,32,33,34,40,41,42,43,44,45,46,47,48,49,50,51],Le={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,SPACE:5,QUADRANT:6,document:7,line:8,statement:9,axisDetails:10,quadrantDetails:11,points:12,title:13,title_value:14,acc_title:15,acc_title_value:16,acc_descr:17,acc_descr_value:18,acc_descr_multiline_value:19,section:20,text:21,point_start:22,point_x:23,point_y:24,"X-AXIS":25,"AXIS-TEXT-DELIMITER":26,"Y-AXIS":27,QUADRANT_1:28,QUADRANT_2:29,QUADRANT_3:30,QUADRANT_4:31,NEWLINE:32,SEMI:33,EOF:34,alphaNumToken:35,textNoTagsToken:36,STR:37,MD_STR:38,alphaNum:39,PUNCTUATION:40,AMP:41,NUM:42,ALPHA:43,COMMA:44,PLUS:45,EQUALS:46,MULT:47,DOT:48,BRKT:49,UNDERSCORE:50,MINUS:51,$accept:0,$end:1},terminals_:{2:"error",5:"SPACE",6:"QUADRANT",13:"title",14:"title_value",15:"acc_title",16:"acc_title_value",17:"acc_descr",18:"acc_descr_value",19:"acc_descr_multiline_value",20:"section",22:"point_start",23:"point_x",24:"point_y",25:"X-AXIS",26:"AXIS-TEXT-DELIMITER",27:"Y-AXIS",28:"QUADRANT_1",29:"QUADRANT_2",30:"QUADRANT_3",31:"QUADRANT_4",32:"NEWLINE",33:"SEMI",34:"EOF",37:"STR",38:"MD_STR",40:"PUNCTUATION",41:"AMP",42:"NUM",43:"ALPHA",44:"COMMA",45:"PLUS",46:"EQUALS",47:"MULT",48:"DOT",49:"BRKT",50:"UNDERSCORE",51:"MINUS"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[9,0],[9,2],[9,1],[9,1],[9,1],[9,2],[9,2],[9,2],[9,1],[9,1],[12,4],[10,4],[10,3],[10,2],[10,4],[10,3],[10,2],[11,2],[11,2],[11,2],[11,2],[4,1],[4,1],[4,1],[21,1],[21,2],[21,1],[21,1],[39,1],[39,2],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[36,1],[36,1],[36,1]],performAction:function(me,Ve,Ye,ce,ke,zt,re){var se=zt.length-1;switch(ke){case 12:this.$=zt[se].trim(),ce.setDiagramTitle(this.$);break;case 13:this.$=zt[se].trim(),ce.setAccTitle(this.$);break;case 14:case 15:this.$=zt[se].trim(),ce.setAccDescription(this.$);break;case 16:ce.addSection(zt[se].substr(8)),this.$=zt[se].substr(8);break;case 17:ce.addPoint(zt[se-3],zt[se-1],zt[se]);break;case 18:ce.setXAxisLeftText(zt[se-2]),ce.setXAxisRightText(zt[se]);break;case 19:zt[se-1].text+=" ⟶ ",ce.setXAxisLeftText(zt[se-1]);break;case 20:ce.setXAxisLeftText(zt[se]);break;case 21:ce.setYAxisBottomText(zt[se-2]),ce.setYAxisTopText(zt[se]);break;case 22:zt[se-1].text+=" ⟶ ",ce.setYAxisBottomText(zt[se-1]);break;case 23:ce.setYAxisBottomText(zt[se]);break;case 24:ce.setQuadrant1Text(zt[se]);break;case 25:ce.setQuadrant2Text(zt[se]);break;case 26:ce.setQuadrant3Text(zt[se]);break;case 27:ce.setQuadrant4Text(zt[se]);break;case 31:this.$={text:zt[se],type:"text"};break;case 32:this.$={text:zt[se-1].text+""+zt[se],type:zt[se-1].type};break;case 33:this.$={text:zt[se],type:"text"};break;case 34:this.$={text:zt[se],type:"markdown"};break;case 35:this.$=zt[se];break;case 36:this.$=zt[se-1]+""+zt[se];break}},table:[{3:1,4:2,5:a,6:f,32:p,33:w,34:m},{1:[3]},{3:8,4:2,5:a,6:f,32:p,33:w,34:m},{3:9,4:2,5:a,6:f,32:p,33:w,34:m},i(b,[2,4],{7:10}),i(E,[2,28]),i(E,[2,29]),i(E,[2,30]),{1:[2,1]},{1:[2,2]},i(_,A,{8:11,9:12,10:14,11:15,12:16,21:28,35:29,1:[2,3],5:I,13:B,15:N,17:R,19:z,20:W,25:et,27:st,28:at,29:bt,30:mt,31:yt,37:ft,38:ut,40:vt,41:X,42:pt,43:U,44:Tt,45:nt,46:It,47:Ot,48:Bt,49:Et,50:Z}),i(b,[2,5]),{4:43,32:p,33:w,34:m},i(_,A,{10:14,11:15,12:16,21:28,35:29,9:44,5:I,13:B,15:N,17:R,19:z,20:W,25:et,27:st,28:at,29:bt,30:mt,31:yt,37:ft,38:ut,40:vt,41:X,42:pt,43:U,44:Tt,45:nt,46:It,47:Ot,48:Bt,49:Et,50:Z}),i(_,[2,9]),i(_,[2,10]),i(_,[2,11]),{14:[1,45]},{16:[1,46]},{18:[1,47]},i(_,[2,15]),i(_,[2,16]),{21:48,35:29,37:ft,38:ut,40:vt,41:X,42:pt,43:U,44:Tt,45:nt,46:It,47:Ot,48:Bt,49:Et,50:Z},{21:49,35:29,37:ft,38:ut,40:vt,41:X,42:pt,43:U,44:Tt,45:nt,46:It,47:Ot,48:Bt,49:Et,50:Z},{21:50,35:29,37:ft,38:ut,40:vt,41:X,42:pt,43:U,44:Tt,45:nt,46:It,47:Ot,48:Bt,49:Et,50:Z},{21:51,35:29,37:ft,38:ut,40:vt,41:X,42:pt,43:U,44:Tt,45:nt,46:It,47:Ot,48:Bt,49:Et,50:Z},{21:52,35:29,37:ft,38:ut,40:vt,41:X,42:pt,43:U,44:Tt,45:nt,46:It,47:Ot,48:Bt,49:Et,50:Z},{21:53,35:29,37:ft,38:ut,40:vt,41:X,42:pt,43:U,44:Tt,45:nt,46:It,47:Ot,48:Bt,49:Et,50:Z},{5:Ct,22:[1,54],35:56,36:55,40:vt,41:X,42:pt,43:U,44:Tt,45:nt,46:It,47:Ot,48:Bt,49:Et,50:Z,51:xt},i(Ht,[2,31]),i(Ht,[2,33]),i(Ht,[2,34]),i(Ht,[2,37]),i(Ht,[2,38]),i(Ht,[2,39]),i(Ht,[2,40]),i(Ht,[2,41]),i(Ht,[2,42]),i(Ht,[2,43]),i(Ht,[2,44]),i(Ht,[2,45]),i(Ht,[2,46]),i(Ht,[2,47]),i(b,[2,6]),i(_,[2,8]),i(_,[2,12]),i(_,[2,13]),i(_,[2,14]),i(_,[2,20],{36:55,35:56,5:Ct,26:[1,59],40:vt,41:X,42:pt,43:U,44:Tt,45:nt,46:It,47:Ot,48:Bt,49:Et,50:Z,51:xt}),i(_,[2,23],{36:55,35:56,5:Ct,26:[1,60],40:vt,41:X,42:pt,43:U,44:Tt,45:nt,46:It,47:Ot,48:Bt,49:Et,50:Z,51:xt}),i(_,[2,24],{36:55,35:56,5:Ct,40:vt,41:X,42:pt,43:U,44:Tt,45:nt,46:It,47:Ot,48:Bt,49:Et,50:Z,51:xt}),i(_,[2,25],{36:55,35:56,5:Ct,40:vt,41:X,42:pt,43:U,44:Tt,45:nt,46:It,47:Ot,48:Bt,49:Et,50:Z,51:xt}),i(_,[2,26],{36:55,35:56,5:Ct,40:vt,41:X,42:pt,43:U,44:Tt,45:nt,46:It,47:Ot,48:Bt,49:Et,50:Z,51:xt}),i(_,[2,27],{36:55,35:56,5:Ct,40:vt,41:X,42:pt,43:U,44:Tt,45:nt,46:It,47:Ot,48:Bt,49:Et,50:Z,51:xt}),{23:[1,61]},i(Ht,[2,32]),i(Ht,[2,48]),i(Ht,[2,49]),i(Ht,[2,50]),i(_,[2,19],{35:29,21:62,37:ft,38:ut,40:vt,41:X,42:pt,43:U,44:Tt,45:nt,46:It,47:Ot,48:Bt,49:Et,50:Z}),i(_,[2,22],{35:29,21:63,37:ft,38:ut,40:vt,41:X,42:pt,43:U,44:Tt,45:nt,46:It,47:Ot,48:Bt,49:Et,50:Z}),{24:[1,64]},i(_,[2,18],{36:55,35:56,5:Ct,40:vt,41:X,42:pt,43:U,44:Tt,45:nt,46:It,47:Ot,48:Bt,49:Et,50:Z,51:xt}),i(_,[2,21],{36:55,35:56,5:Ct,40:vt,41:X,42:pt,43:U,44:Tt,45:nt,46:It,47:Ot,48:Bt,49:Et,50:Z,51:xt}),i(_,[2,17])],defaultActions:{8:[2,1],9:[2,2]},parseError:function(me,Ve){if(Ve.recoverable)this.trace(me);else{var Ye=new Error(me);throw Ye.hash=Ve,Ye}},parse:function(me){var Ve=this,Ye=[0],ce=[],ke=[null],zt=[],re=this.table,se="",Pe=0,te=0,Me=2,de=1,on=zt.slice.call(arguments,1),ni=Object.create(this.lexer),Ks={yy:{}};for(var ws in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ws)&&(Ks.yy[ws]=this.yy[ws]);ni.setInput(me,Ks.yy),Ks.yy.lexer=ni,Ks.yy.parser=this,typeof ni.yylloc>"u"&&(ni.yylloc={});var fo=ni.yylloc;zt.push(fo);var Xi=ni.options&&ni.options.ranges;typeof Ks.yy.parseError=="function"?this.parseError=Ks.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Er(){var Gs;return Gs=ce.pop()||ni.lex()||de,typeof Gs!="number"&&(Gs instanceof Array&&(ce=Gs,Gs=ce.pop()),Gs=Ve.symbols_[Gs]||Gs),Gs}for(var Xn,di,Ee,Kn,He={},Ti,pn,Es,qa;;){if(di=Ye[Ye.length-1],this.defaultActions[di]?Ee=this.defaultActions[di]:((Xn===null||typeof Xn>"u")&&(Xn=Er()),Ee=re[di]&&re[di][Xn]),typeof Ee>"u"||!Ee.length||!Ee[0]){var Ma="";qa=[];for(Ti in re[di])this.terminals_[Ti]&&Ti>Me&&qa.push("'"+this.terminals_[Ti]+"'");ni.showPosition?Ma="Parse error on line "+(Pe+1)+`: -`+ni.showPosition()+` -Expecting `+qa.join(", ")+", got '"+(this.terminals_[Xn]||Xn)+"'":Ma="Parse error on line "+(Pe+1)+": Unexpected "+(Xn==de?"end of input":"'"+(this.terminals_[Xn]||Xn)+"'"),this.parseError(Ma,{text:ni.match,token:this.terminals_[Xn]||Xn,line:ni.yylineno,loc:fo,expected:qa})}if(Ee[0]instanceof Array&&Ee.length>1)throw new Error("Parse Error: multiple actions possible at state: "+di+", token: "+Xn);switch(Ee[0]){case 1:Ye.push(Xn),ke.push(ni.yytext),zt.push(ni.yylloc),Ye.push(Ee[1]),Xn=null,te=ni.yyleng,se=ni.yytext,Pe=ni.yylineno,fo=ni.yylloc;break;case 2:if(pn=this.productions_[Ee[1]][1],He.$=ke[ke.length-pn],He._$={first_line:zt[zt.length-(pn||1)].first_line,last_line:zt[zt.length-1].last_line,first_column:zt[zt.length-(pn||1)].first_column,last_column:zt[zt.length-1].last_column},Xi&&(He._$.range=[zt[zt.length-(pn||1)].range[0],zt[zt.length-1].range[1]]),Kn=this.performAction.apply(He,[se,te,Pe,Ks.yy,Ee[1],ke,zt].concat(on)),typeof Kn<"u")return Kn;pn&&(Ye=Ye.slice(0,-1*pn*2),ke=ke.slice(0,-1*pn),zt=zt.slice(0,-1*pn)),Ye.push(this.productions_[Ee[1]][0]),ke.push(He.$),zt.push(He._$),Es=re[Ye[Ye.length-2]][Ye[Ye.length-1]],Ye.push(Es);break;case 3:return!0}}return!0}},Ft=function(){var Se={EOF:1,parseError:function(Ve,Ye){if(this.yy.parser)this.yy.parser.parseError(Ve,Ye);else throw new Error(Ve)},setInput:function(me,Ve){return this.yy=Ve||this.yy||{},this._input=me,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var me=this._input[0];this.yytext+=me,this.yyleng++,this.offset++,this.match+=me,this.matched+=me;var Ve=me.match(/(?:\r\n?|\n).*/g);return Ve?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),me},unput:function(me){var Ve=me.length,Ye=me.split(/(?:\r\n?|\n)/g);this._input=me+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ve),this.offset-=Ve;var ce=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Ye.length-1&&(this.yylineno-=Ye.length-1);var ke=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Ye?(Ye.length===ce.length?this.yylloc.first_column:0)+ce[ce.length-Ye.length].length-Ye[0].length:this.yylloc.first_column-Ve},this.options.ranges&&(this.yylloc.range=[ke[0],ke[0]+this.yyleng-Ve]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(me){this.unput(this.match.slice(me))},pastInput:function(){var me=this.matched.substr(0,this.matched.length-this.match.length);return(me.length>20?"...":"")+me.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var me=this.match;return me.length<20&&(me+=this._input.substr(0,20-me.length)),(me.substr(0,20)+(me.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var me=this.pastInput(),Ve=new Array(me.length+1).join("-");return me+this.upcomingInput()+` -`+Ve+"^"},test_match:function(me,Ve){var Ye,ce,ke;if(this.options.backtrack_lexer&&(ke={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ke.yylloc.range=this.yylloc.range.slice(0))),ce=me[0].match(/(?:\r\n?|\n).*/g),ce&&(this.yylineno+=ce.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ce?ce[ce.length-1].length-ce[ce.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+me[0].length},this.yytext+=me[0],this.match+=me[0],this.matches=me,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(me[0].length),this.matched+=me[0],Ye=this.performAction.call(this,this.yy,this,Ve,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Ye)return Ye;if(this._backtrack){for(var zt in ke)this[zt]=ke[zt];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var me,Ve,Ye,ce;this._more||(this.yytext="",this.match="");for(var ke=this._currentRules(),zt=0;ztVe[0].length)){if(Ve=Ye,ce=zt,this.options.backtrack_lexer){if(me=this.test_match(Ye,ke[zt]),me!==!1)return me;if(this._backtrack){Ve=!1;continue}else return!1}else if(!this.options.flex)break}return Ve?(me=this.test_match(Ve,ke[ce]),me!==!1?me:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Ve=this.next();return Ve||this.lex()},begin:function(Ve){this.conditionStack.push(Ve)},popState:function(){var Ve=this.conditionStack.length-1;return Ve>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Ve){return Ve=this.conditionStack.length-1-Math.abs(Ve||0),Ve>=0?this.conditionStack[Ve]:"INITIAL"},pushState:function(Ve){this.begin(Ve)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Ve,Ye,ce,ke){switch(ce){case 0:break;case 1:break;case 2:return 32;case 3:break;case 4:return this.begin("title"),13;case 5:return this.popState(),"title_value";case 6:return this.begin("acc_title"),15;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),17;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 25;case 14:return 27;case 15:return 26;case 16:return 28;case 17:return 29;case 18:return 30;case 19:return 31;case 20:this.begin("md_string");break;case 21:return"MD_STR";case 22:this.popState();break;case 23:this.begin("string");break;case 24:this.popState();break;case 25:return"STR";case 26:return this.begin("point_start"),22;case 27:return this.begin("point_x"),23;case 28:this.popState();break;case 29:this.popState(),this.begin("point_y");break;case 30:return this.popState(),24;case 31:return 6;case 32:return 43;case 33:return"COLON";case 34:return 45;case 35:return 44;case 36:return 46;case 37:return 46;case 38:return 47;case 39:return 49;case 40:return 50;case 41:return 48;case 42:return 41;case 43:return 51;case 44:return 42;case 45:return 5;case 46:return 33;case 47:return 40;case 48:return 34}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\s*:\s*\[\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?:\s*\] *)/i,/^(?:\s*,\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s)/i,/^(?:;)/i,/^(?:[!"#$%&'*+,-.`?\\_/])/i,/^(?:$)/i],conditions:{point_y:{rules:[30],inclusive:!1},point_x:{rules:[29],inclusive:!1},point_start:{rules:[27,28],inclusive:!1},acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},title:{rules:[5],inclusive:!1},md_string:{rules:[21,22],inclusive:!1},string:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,23,26,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],inclusive:!0}}};return Se}();Le.lexer=Ft;function gn(){this.yy={}}return gn.prototype=Le,Le.Parser=gn,new gn}();agt.parser=agt;const iHe=agt,mg=X1t();class sHe{constructor(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){var a,f,p,w,m,b,E,_,A,I,B,N,R,z,W,et,st,at;return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:((a=Zh.quadrantChart)==null?void 0:a.chartWidth)||500,chartWidth:((f=Zh.quadrantChart)==null?void 0:f.chartHeight)||500,titlePadding:((p=Zh.quadrantChart)==null?void 0:p.titlePadding)||10,titleFontSize:((w=Zh.quadrantChart)==null?void 0:w.titleFontSize)||20,quadrantPadding:((m=Zh.quadrantChart)==null?void 0:m.quadrantPadding)||5,xAxisLabelPadding:((b=Zh.quadrantChart)==null?void 0:b.xAxisLabelPadding)||5,yAxisLabelPadding:((E=Zh.quadrantChart)==null?void 0:E.yAxisLabelPadding)||5,xAxisLabelFontSize:((_=Zh.quadrantChart)==null?void 0:_.xAxisLabelFontSize)||16,yAxisLabelFontSize:((A=Zh.quadrantChart)==null?void 0:A.yAxisLabelFontSize)||16,quadrantLabelFontSize:((I=Zh.quadrantChart)==null?void 0:I.quadrantLabelFontSize)||16,quadrantTextTopPadding:((B=Zh.quadrantChart)==null?void 0:B.quadrantTextTopPadding)||5,pointTextPadding:((N=Zh.quadrantChart)==null?void 0:N.pointTextPadding)||5,pointLabelFontSize:((R=Zh.quadrantChart)==null?void 0:R.pointLabelFontSize)||12,pointRadius:((z=Zh.quadrantChart)==null?void 0:z.pointRadius)||5,xAxisPosition:((W=Zh.quadrantChart)==null?void 0:W.xAxisPosition)||"top",yAxisPosition:((et=Zh.quadrantChart)==null?void 0:et.yAxisPosition)||"left",quadrantInternalBorderStrokeWidth:((st=Zh.quadrantChart)==null?void 0:st.quadrantInternalBorderStrokeWidth)||1,quadrantExternalBorderStrokeWidth:((at=Zh.quadrantChart)==null?void 0:at.quadrantExternalBorderStrokeWidth)||2}}getDefaultThemeConfig(){return{quadrant1Fill:mg.quadrant1Fill,quadrant2Fill:mg.quadrant2Fill,quadrant3Fill:mg.quadrant3Fill,quadrant4Fill:mg.quadrant4Fill,quadrant1TextFill:mg.quadrant1TextFill,quadrant2TextFill:mg.quadrant2TextFill,quadrant3TextFill:mg.quadrant3TextFill,quadrant4TextFill:mg.quadrant4TextFill,quadrantPointFill:mg.quadrantPointFill,quadrantPointTextFill:mg.quadrantPointTextFill,quadrantXAxisTextFill:mg.quadrantXAxisTextFill,quadrantYAxisTextFill:mg.quadrantYAxisTextFill,quadrantTitleFill:mg.quadrantTitleFill,quadrantInternalBorderStrokeFill:mg.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:mg.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),Ut.info("clear called")}setData(a){this.data={...this.data,...a}}addPoints(a){this.data.points=[...a,...this.data.points]}setConfig(a){Ut.trace("setConfig called with: ",a),this.config={...this.config,...a}}setThemeConfig(a){Ut.trace("setThemeConfig called with: ",a),this.themeConfig={...this.themeConfig,...a}}calculateSpace(a,f,p,w){const m=this.config.xAxisLabelPadding*2+this.config.xAxisLabelFontSize,b={top:a==="top"&&f?m:0,bottom:a==="bottom"&&f?m:0},E=this.config.yAxisLabelPadding*2+this.config.yAxisLabelFontSize,_={left:this.config.yAxisPosition==="left"&&p?E:0,right:this.config.yAxisPosition==="right"&&p?E:0},A=this.config.titleFontSize+this.config.titlePadding*2,I={top:w?A:0},B=this.config.quadrantPadding+_.left,N=this.config.quadrantPadding+b.top+I.top,R=this.config.chartWidth-this.config.quadrantPadding*2-_.left-_.right,z=this.config.chartHeight-this.config.quadrantPadding*2-b.top-b.bottom-I.top,W=R/2,et=z/2;return{xAxisSpace:b,yAxisSpace:_,titleSpace:I,quadrantSpace:{quadrantLeft:B,quadrantTop:N,quadrantWidth:R,quadrantHalfWidth:W,quadrantHeight:z,quadrantHalfHeight:et}}}getAxisLabels(a,f,p,w){const{quadrantSpace:m,titleSpace:b}=w,{quadrantHalfHeight:E,quadrantHeight:_,quadrantLeft:A,quadrantHalfWidth:I,quadrantTop:B,quadrantWidth:N}=m,R=!!this.data.xAxisRightText,z=!!this.data.yAxisTopText,W=[];return this.data.xAxisLeftText&&f&&W.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:A+(R?I/2:0),y:a==="top"?this.config.xAxisLabelPadding+b.top:this.config.xAxisLabelPadding+B+_+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:R?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&f&&W.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:A+I+(R?I/2:0),y:a==="top"?this.config.xAxisLabelPadding+b.top:this.config.xAxisLabelPadding+B+_+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:R?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&p&&W.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+A+N+this.config.quadrantPadding,y:B+_-(z?E/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:z?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&p&&W.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+A+N+this.config.quadrantPadding,y:B+E-(z?E/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:z?"center":"left",horizontalPos:"top",rotation:-90}),W}getQuadrants(a){const{quadrantSpace:f}=a,{quadrantHalfHeight:p,quadrantLeft:w,quadrantHalfWidth:m,quadrantTop:b}=f,E=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:w+m,y:b,width:m,height:p,fill:this.themeConfig.quadrant1Fill},{text:{text:this.data.quadrant2Text,fill:this.themeConfig.quadrant2TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:w,y:b,width:m,height:p,fill:this.themeConfig.quadrant2Fill},{text:{text:this.data.quadrant3Text,fill:this.themeConfig.quadrant3TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:w,y:b+p,width:m,height:p,fill:this.themeConfig.quadrant3Fill},{text:{text:this.data.quadrant4Text,fill:this.themeConfig.quadrant4TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:w+m,y:b+p,width:m,height:p,fill:this.themeConfig.quadrant4Fill}];for(const _ of E)_.text.x=_.x+_.width/2,this.data.points.length===0?(_.text.y=_.y+_.height/2,_.text.horizontalPos="middle"):(_.text.y=_.y+this.config.quadrantTextTopPadding,_.text.horizontalPos="top");return E}getQuadrantPoints(a){const{quadrantSpace:f}=a,{quadrantHeight:p,quadrantLeft:w,quadrantTop:m,quadrantWidth:b}=f,E=AA().domain([0,1]).range([w,b+w]),_=AA().domain([0,1]).range([p+m,m]);return this.data.points.map(I=>({x:E(I.x),y:_(I.y),fill:this.themeConfig.quadrantPointFill,radius:this.config.pointRadius,text:{text:I.text,fill:this.themeConfig.quadrantPointTextFill,x:E(I.x),y:_(I.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0}}))}getBorders(a){const f=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:p}=a,{quadrantHalfHeight:w,quadrantHeight:m,quadrantLeft:b,quadrantHalfWidth:E,quadrantTop:_,quadrantWidth:A}=p;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b-f,y1:_,x2:b+A+f,y2:_},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b+A,y1:_+f,x2:b+A,y2:_+m-f},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b-f,y1:_+m,x2:b+A+f,y2:_+m},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b,y1:_+f,x2:b,y2:_+m-f},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:b+E,y1:_+f,x2:b+E,y2:_+m-f},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:b+f,y1:_+w,x2:b+A-f,y2:_+w}]}getTitle(a){if(a)return{text:this.data.titleText,fill:this.themeConfig.quadrantTitleFill,fontSize:this.config.titleFontSize,horizontalPos:"top",verticalPos:"center",rotation:0,y:this.config.titlePadding,x:this.config.chartWidth/2}}build(){const a=this.config.showXAxis&&!!(this.data.xAxisLeftText||this.data.xAxisRightText),f=this.config.showYAxis&&!!(this.data.yAxisTopText||this.data.yAxisBottomText),p=this.config.showTitle&&!!this.data.titleText,w=this.data.points.length>0?"bottom":this.config.xAxisPosition,m=this.calculateSpace(w,a,f,p);return{points:this.getQuadrantPoints(m),quadrants:this.getQuadrants(m),axisLabels:this.getAxisLabels(w,a,f,m),borderLines:this.getBorders(m),title:this.getTitle(p)}}}const aHe=Oe();function B5(i){return Q1(i.trim(),aHe)}const _0=new sHe;function oHe(i){_0.setData({quadrant1Text:B5(i.text)})}function cHe(i){_0.setData({quadrant2Text:B5(i.text)})}function uHe(i){_0.setData({quadrant3Text:B5(i.text)})}function lHe(i){_0.setData({quadrant4Text:B5(i.text)})}function hHe(i){_0.setData({xAxisLeftText:B5(i.text)})}function fHe(i){_0.setData({xAxisRightText:B5(i.text)})}function dHe(i){_0.setData({yAxisTopText:B5(i.text)})}function gHe(i){_0.setData({yAxisBottomText:B5(i.text)})}function pHe(i,a,f){_0.addPoints([{x:a,y:f,text:B5(i.text)}])}function bHe(i){_0.setConfig({chartWidth:i})}function wHe(i){_0.setConfig({chartHeight:i})}function vHe(){const i=Oe(),{themeVariables:a,quadrantChart:f}=i;return f&&_0.setConfig(f),_0.setThemeConfig({quadrant1Fill:a.quadrant1Fill,quadrant2Fill:a.quadrant2Fill,quadrant3Fill:a.quadrant3Fill,quadrant4Fill:a.quadrant4Fill,quadrant1TextFill:a.quadrant1TextFill,quadrant2TextFill:a.quadrant2TextFill,quadrant3TextFill:a.quadrant3TextFill,quadrant4TextFill:a.quadrant4TextFill,quadrantPointFill:a.quadrantPointFill,quadrantPointTextFill:a.quadrantPointTextFill,quadrantXAxisTextFill:a.quadrantXAxisTextFill,quadrantYAxisTextFill:a.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:a.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:a.quadrantInternalBorderStrokeFill,quadrantTitleFill:a.quadrantTitleFill}),_0.setData({titleText:pg()}),_0.build()}const mHe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:iHe,db:{setWidth:bHe,setHeight:wHe,setQuadrant1Text:oHe,setQuadrant2Text:cHe,setQuadrant3Text:uHe,setQuadrant4Text:lHe,setXAxisLeftText:hHe,setXAxisRightText:fHe,setYAxisTopText:dHe,setYAxisBottomText:gHe,addPoint:pHe,getQuadrantData:vHe,clear:function(){_0.clear(),hg()},setAccTitle:E0,getAccTitle:fg,setDiagramTitle:Nb,getDiagramTitle:pg,getAccDescription:gg,setAccDescription:dg},renderer:{draw:(i,a,f,p)=>{var vt,X,pt;function w(U){return U==="top"?"hanging":"middle"}function m(U){return U==="left"?"start":"middle"}function b(U){return`translate(${U.x}, ${U.y}) rotate(${U.rotation||0})`}const E=Oe();Ut.debug(`Rendering quadrant chart -`+i);const _=E.securityLevel;let A;_==="sandbox"&&(A=yr("#i"+a));const B=yr(_==="sandbox"?A.nodes()[0].contentDocument.body:"body").select(`[id="${a}"]`),N=B.append("g").attr("class","main"),R=((vt=E.quadrantChart)==null?void 0:vt.chartWidth)||500,z=((X=E.quadrantChart)==null?void 0:X.chartHeight)||500;k0(B,z,R,((pt=E.quadrantChart)==null?void 0:pt.useMaxWidth)||!0),B.attr("viewBox","0 0 "+R+" "+z),p.db.setHeight(z),p.db.setWidth(R);const W=p.db.getQuadrantData(),et=N.append("g").attr("class","quadrants"),st=N.append("g").attr("class","border"),at=N.append("g").attr("class","data-points"),bt=N.append("g").attr("class","labels"),mt=N.append("g").attr("class","title");W.title&&mt.append("text").attr("x",0).attr("y",0).attr("fill",W.title.fill).attr("font-size",W.title.fontSize).attr("dominant-baseline",w(W.title.horizontalPos)).attr("text-anchor",m(W.title.verticalPos)).attr("transform",b(W.title)).text(W.title.text),W.borderLines&&st.selectAll("line").data(W.borderLines).enter().append("line").attr("x1",U=>U.x1).attr("y1",U=>U.y1).attr("x2",U=>U.x2).attr("y2",U=>U.y2).style("stroke",U=>U.strokeFill).style("stroke-width",U=>U.strokeWidth);const yt=et.selectAll("g.quadrant").data(W.quadrants).enter().append("g").attr("class","quadrant");yt.append("rect").attr("x",U=>U.x).attr("y",U=>U.y).attr("width",U=>U.width).attr("height",U=>U.height).attr("fill",U=>U.fill),yt.append("text").attr("x",0).attr("y",0).attr("fill",U=>U.text.fill).attr("font-size",U=>U.text.fontSize).attr("dominant-baseline",U=>w(U.text.horizontalPos)).attr("text-anchor",U=>m(U.text.verticalPos)).attr("transform",U=>b(U.text)).text(U=>U.text.text),bt.selectAll("g.label").data(W.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text(U=>U.text).attr("fill",U=>U.fill).attr("font-size",U=>U.fontSize).attr("dominant-baseline",U=>w(U.horizontalPos)).attr("text-anchor",U=>m(U.verticalPos)).attr("transform",U=>b(U));const ut=at.selectAll("g.data-point").data(W.points).enter().append("g").attr("class","data-point");ut.append("circle").attr("cx",U=>U.x).attr("cy",U=>U.y).attr("r",U=>U.radius).attr("fill",U=>U.fill),ut.append("text").attr("x",0).attr("y",0).text(U=>U.text.text).attr("fill",U=>U.text.fill).attr("font-size",U=>U.text.fontSize).attr("dominant-baseline",U=>w(U.text.horizontalPos)).attr("text-anchor",U=>m(U.text.verticalPos)).attr("transform",U=>b(U.text))}},styles:()=>""}},Symbol.toStringTag,{value:"Module"}));var ogt=function(){var i=function(Ot,Bt,Et,Z){for(Et=Et||{},Z=Ot.length;Z--;Et[Ot[Z]]=Bt);return Et},a=[1,10,12,14,16,18,19,21,23],f=[2,6],p=[1,3],w=[1,5],m=[1,6],b=[1,7],E=[1,5,10,12,14,16,18,19,21,23,34,35,36],_=[1,25],A=[1,26],I=[1,28],B=[1,29],N=[1,30],R=[1,31],z=[1,32],W=[1,33],et=[1,34],st=[1,35],at=[1,36],bt=[1,37],mt=[1,43],yt=[1,42],ft=[1,47],ut=[1,50],vt=[1,10,12,14,16,18,19,21,23,34,35,36],X=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],pt=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],U=[1,64],Tt={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:function(Bt,Et,Z,Ct,xt,Ht,Le){var Ft=Ht.length-1;switch(xt){case 5:Ct.setOrientation(Ht[Ft]);break;case 9:Ct.setDiagramTitle(Ht[Ft].text.trim());break;case 12:Ct.setLineData({text:"",type:"text"},Ht[Ft]);break;case 13:Ct.setLineData(Ht[Ft-1],Ht[Ft]);break;case 14:Ct.setBarData({text:"",type:"text"},Ht[Ft]);break;case 15:Ct.setBarData(Ht[Ft-1],Ht[Ft]);break;case 16:this.$=Ht[Ft].trim(),Ct.setAccTitle(this.$);break;case 17:case 18:this.$=Ht[Ft].trim(),Ct.setAccDescription(this.$);break;case 19:this.$=Ht[Ft-1];break;case 20:this.$=[Number(Ht[Ft-2]),...Ht[Ft]];break;case 21:this.$=[Number(Ht[Ft])];break;case 22:Ct.setXAxisTitle(Ht[Ft]);break;case 23:Ct.setXAxisTitle(Ht[Ft-1]);break;case 24:Ct.setXAxisTitle({type:"text",text:""});break;case 25:Ct.setXAxisBand(Ht[Ft]);break;case 26:Ct.setXAxisRangeData(Number(Ht[Ft-2]),Number(Ht[Ft]));break;case 27:this.$=Ht[Ft-1];break;case 28:this.$=[Ht[Ft-2],...Ht[Ft]];break;case 29:this.$=[Ht[Ft]];break;case 30:Ct.setYAxisTitle(Ht[Ft]);break;case 31:Ct.setYAxisTitle(Ht[Ft-1]);break;case 32:Ct.setYAxisTitle({type:"text",text:""});break;case 33:Ct.setYAxisRangeData(Number(Ht[Ft-2]),Number(Ht[Ft]));break;case 37:this.$={text:Ht[Ft],type:"text"};break;case 38:this.$={text:Ht[Ft],type:"text"};break;case 39:this.$={text:Ht[Ft],type:"markdown"};break;case 40:this.$=Ht[Ft];break;case 41:this.$=Ht[Ft-1]+""+Ht[Ft];break}},table:[i(a,f,{3:1,4:2,7:4,5:p,34:w,35:m,36:b}),{1:[3]},i(a,f,{4:2,7:4,3:8,5:p,34:w,35:m,36:b}),i(a,f,{4:2,7:4,6:9,3:10,5:p,8:[1,11],34:w,35:m,36:b}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},i(E,[2,34]),i(E,[2,35]),i(E,[2,36]),{1:[2,1]},i(a,f,{4:2,7:4,3:21,5:p,34:w,35:m,36:b}),{1:[2,3]},i(E,[2,5]),i(a,[2,7],{4:22,34:w,35:m,36:b}),{11:23,37:24,38:_,39:A,40:27,41:I,42:B,43:N,44:R,45:z,46:W,47:et,48:st,49:at,50:bt},{11:39,13:38,24:mt,27:yt,29:40,30:41,37:24,38:_,39:A,40:27,41:I,42:B,43:N,44:R,45:z,46:W,47:et,48:st,49:at,50:bt},{11:45,15:44,27:ft,33:46,37:24,38:_,39:A,40:27,41:I,42:B,43:N,44:R,45:z,46:W,47:et,48:st,49:at,50:bt},{11:49,17:48,24:ut,37:24,38:_,39:A,40:27,41:I,42:B,43:N,44:R,45:z,46:W,47:et,48:st,49:at,50:bt},{11:52,17:51,24:ut,37:24,38:_,39:A,40:27,41:I,42:B,43:N,44:R,45:z,46:W,47:et,48:st,49:at,50:bt},{20:[1,53]},{22:[1,54]},i(vt,[2,18]),{1:[2,2]},i(vt,[2,8]),i(vt,[2,9]),i(X,[2,37],{40:55,41:I,42:B,43:N,44:R,45:z,46:W,47:et,48:st,49:at,50:bt}),i(X,[2,38]),i(X,[2,39]),i(pt,[2,40]),i(pt,[2,42]),i(pt,[2,43]),i(pt,[2,44]),i(pt,[2,45]),i(pt,[2,46]),i(pt,[2,47]),i(pt,[2,48]),i(pt,[2,49]),i(pt,[2,50]),i(pt,[2,51]),i(vt,[2,10]),i(vt,[2,22],{30:41,29:56,24:mt,27:yt}),i(vt,[2,24]),i(vt,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:_,39:A,40:27,41:I,42:B,43:N,44:R,45:z,46:W,47:et,48:st,49:at,50:bt},i(vt,[2,11]),i(vt,[2,30],{33:60,27:ft}),i(vt,[2,32]),{31:[1,61]},i(vt,[2,12]),{17:62,24:ut},{25:63,27:U},i(vt,[2,14]),{17:65,24:ut},i(vt,[2,16]),i(vt,[2,17]),i(pt,[2,41]),i(vt,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},i(vt,[2,31]),{27:[1,69]},i(vt,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},i(vt,[2,15]),i(vt,[2,26]),i(vt,[2,27]),{11:59,32:72,37:24,38:_,39:A,40:27,41:I,42:B,43:N,44:R,45:z,46:W,47:et,48:st,49:at,50:bt},i(vt,[2,33]),i(vt,[2,19]),{25:73,27:U},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:function(Bt,Et){if(Et.recoverable)this.trace(Bt);else{var Z=new Error(Bt);throw Z.hash=Et,Z}},parse:function(Bt){var Et=this,Z=[0],Ct=[],xt=[null],Ht=[],Le=this.table,Ft="",gn=0,Se=0,me=2,Ve=1,Ye=Ht.slice.call(arguments,1),ce=Object.create(this.lexer),ke={yy:{}};for(var zt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,zt)&&(ke.yy[zt]=this.yy[zt]);ce.setInput(Bt,ke.yy),ke.yy.lexer=ce,ke.yy.parser=this,typeof ce.yylloc>"u"&&(ce.yylloc={});var re=ce.yylloc;Ht.push(re);var se=ce.options&&ce.options.ranges;typeof ke.yy.parseError=="function"?this.parseError=ke.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Pe(){var Xn;return Xn=Ct.pop()||ce.lex()||Ve,typeof Xn!="number"&&(Xn instanceof Array&&(Ct=Xn,Xn=Ct.pop()),Xn=Et.symbols_[Xn]||Xn),Xn}for(var te,Me,de,on,ni={},Ks,ws,fo,Xi;;){if(Me=Z[Z.length-1],this.defaultActions[Me]?de=this.defaultActions[Me]:((te===null||typeof te>"u")&&(te=Pe()),de=Le[Me]&&Le[Me][te]),typeof de>"u"||!de.length||!de[0]){var Er="";Xi=[];for(Ks in Le[Me])this.terminals_[Ks]&&Ks>me&&Xi.push("'"+this.terminals_[Ks]+"'");ce.showPosition?Er="Parse error on line "+(gn+1)+`: -`+ce.showPosition()+` -Expecting `+Xi.join(", ")+", got '"+(this.terminals_[te]||te)+"'":Er="Parse error on line "+(gn+1)+": Unexpected "+(te==Ve?"end of input":"'"+(this.terminals_[te]||te)+"'"),this.parseError(Er,{text:ce.match,token:this.terminals_[te]||te,line:ce.yylineno,loc:re,expected:Xi})}if(de[0]instanceof Array&&de.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Me+", token: "+te);switch(de[0]){case 1:Z.push(te),xt.push(ce.yytext),Ht.push(ce.yylloc),Z.push(de[1]),te=null,Se=ce.yyleng,Ft=ce.yytext,gn=ce.yylineno,re=ce.yylloc;break;case 2:if(ws=this.productions_[de[1]][1],ni.$=xt[xt.length-ws],ni._$={first_line:Ht[Ht.length-(ws||1)].first_line,last_line:Ht[Ht.length-1].last_line,first_column:Ht[Ht.length-(ws||1)].first_column,last_column:Ht[Ht.length-1].last_column},se&&(ni._$.range=[Ht[Ht.length-(ws||1)].range[0],Ht[Ht.length-1].range[1]]),on=this.performAction.apply(ni,[Ft,Se,gn,ke.yy,de[1],xt,Ht].concat(Ye)),typeof on<"u")return on;ws&&(Z=Z.slice(0,-1*ws*2),xt=xt.slice(0,-1*ws),Ht=Ht.slice(0,-1*ws)),Z.push(this.productions_[de[1]][0]),xt.push(ni.$),Ht.push(ni._$),fo=Le[Z[Z.length-2]][Z[Z.length-1]],Z.push(fo);break;case 3:return!0}}return!0}},nt=function(){var Ot={EOF:1,parseError:function(Et,Z){if(this.yy.parser)this.yy.parser.parseError(Et,Z);else throw new Error(Et)},setInput:function(Bt,Et){return this.yy=Et||this.yy||{},this._input=Bt,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Bt=this._input[0];this.yytext+=Bt,this.yyleng++,this.offset++,this.match+=Bt,this.matched+=Bt;var Et=Bt.match(/(?:\r\n?|\n).*/g);return Et?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Bt},unput:function(Bt){var Et=Bt.length,Z=Bt.split(/(?:\r\n?|\n)/g);this._input=Bt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Et),this.offset-=Et;var Ct=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Z.length-1&&(this.yylineno-=Z.length-1);var xt=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Z?(Z.length===Ct.length?this.yylloc.first_column:0)+Ct[Ct.length-Z.length].length-Z[0].length:this.yylloc.first_column-Et},this.options.ranges&&(this.yylloc.range=[xt[0],xt[0]+this.yyleng-Et]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Bt){this.unput(this.match.slice(Bt))},pastInput:function(){var Bt=this.matched.substr(0,this.matched.length-this.match.length);return(Bt.length>20?"...":"")+Bt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Bt=this.match;return Bt.length<20&&(Bt+=this._input.substr(0,20-Bt.length)),(Bt.substr(0,20)+(Bt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Bt=this.pastInput(),Et=new Array(Bt.length+1).join("-");return Bt+this.upcomingInput()+` -`+Et+"^"},test_match:function(Bt,Et){var Z,Ct,xt;if(this.options.backtrack_lexer&&(xt={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(xt.yylloc.range=this.yylloc.range.slice(0))),Ct=Bt[0].match(/(?:\r\n?|\n).*/g),Ct&&(this.yylineno+=Ct.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Ct?Ct[Ct.length-1].length-Ct[Ct.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Bt[0].length},this.yytext+=Bt[0],this.match+=Bt[0],this.matches=Bt,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Bt[0].length),this.matched+=Bt[0],Z=this.performAction.call(this,this.yy,this,Et,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Z)return Z;if(this._backtrack){for(var Ht in xt)this[Ht]=xt[Ht];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Bt,Et,Z,Ct;this._more||(this.yytext="",this.match="");for(var xt=this._currentRules(),Ht=0;HtEt[0].length)){if(Et=Z,Ct=Ht,this.options.backtrack_lexer){if(Bt=this.test_match(Z,xt[Ht]),Bt!==!1)return Bt;if(this._backtrack){Et=!1;continue}else return!1}else if(!this.options.flex)break}return Et?(Bt=this.test_match(Et,xt[Ct]),Bt!==!1?Bt:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Et=this.next();return Et||this.lex()},begin:function(Et){this.conditionStack.push(Et)},popState:function(){var Et=this.conditionStack.length-1;return Et>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Et){return Et=this.conditionStack.length-1-Math.abs(Et||0),Et>=0?this.conditionStack[Et]:"INITIAL"},pushState:function(Et){this.begin(Et)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Et,Z,Ct,xt){switch(Ct){case 0:break;case 1:break;case 2:return this.popState(),34;case 3:return this.popState(),34;case 4:return 34;case 5:break;case 6:return 10;case 7:return this.pushState("acc_title"),19;case 8:return this.popState(),"acc_title_value";case 9:return this.pushState("acc_descr"),21;case 10:return this.popState(),"acc_descr_value";case 11:this.pushState("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 5;case 15:return 8;case 16:return this.pushState("axis_data"),"X_AXIS";case 17:return this.pushState("axis_data"),"Y_AXIS";case 18:return this.pushState("axis_band_data"),24;case 19:return 31;case 20:return this.pushState("data"),16;case 21:return this.pushState("data"),18;case 22:return this.pushState("data_inner"),24;case 23:return 27;case 24:return this.popState(),26;case 25:this.popState();break;case 26:this.pushState("string");break;case 27:this.popState();break;case 28:return"STR";case 29:return 24;case 30:return 26;case 31:return 43;case 32:return"COLON";case 33:return 44;case 34:return 28;case 35:return 45;case 36:return 46;case 37:return 48;case 38:return 50;case 39:return 47;case 40:return 41;case 41:return 49;case 42:return 42;case 43:break;case 44:return 35;case 45:return 36}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:(\r?\n))/i,/^(?:(\r?\n))/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:\{)/i,/^(?:[^\}]*)/i,/^(?:xychart-beta\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\b)/i,/^(?:y-axis\b)/i,/^(?:\[)/i,/^(?:-->)/i,/^(?:line\b)/i,/^(?:bar\b)/i,/^(?:\[)/i,/^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i,/^(?:\])/i,/^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n\(\?:`))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s+)/i,/^(?:;)/i,/^(?:$)/i],conditions:{data_inner:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,23,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},data:{rules:[0,1,3,4,5,6,7,9,11,14,15,16,17,20,21,22,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_band_data:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_data:{rules:[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20,21,23,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[],inclusive:!1},md_string:{rules:[],inclusive:!1},string:{rules:[27,28],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0}}};return Ot}();Tt.lexer=nt;function It(){this.yy={}}return It.prototype=Tt,Tt.Parser=It,new It}();ogt.parser=ogt;const yHe=ogt;function oRt(i){return i.type==="bar"}function cRt(i){return i.type==="band"}function BF(i){return i.type==="linear"}class uRt{constructor(a){this.parentGroup=a}getMaxDimension(a,f){if(!this.parentGroup)return{width:a.reduce((m,b)=>Math.max(b.length,m),0)*f,height:f};const p={width:0,height:0},w=this.parentGroup.append("g").attr("visibility","hidden").attr("font-size",f);for(const m of a){const b=k$e(w,1,m),E=b?b.width:m.length*f,_=b?b.height:f;p.width=Math.max(p.width,E),p.height=Math.max(p.height,_)}return w.remove(),p}}const lRt=.7,hRt=.2;class fRt{constructor(a,f,p,w){this.axisConfig=a,this.title=f,this.textDimensionCalculator=p,this.axisThemeConfig=w,this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left",this.showTitle=!1,this.showLabel=!1,this.showTick=!1,this.showAxisLine=!1,this.outerPadding=0,this.titleTextHeight=0,this.labelTextHeight=0,this.range=[0,10],this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left"}setRange(a){this.range=a,this.axisPosition==="left"||this.axisPosition==="right"?this.boundingRect.height=a[1]-a[0]:this.boundingRect.width=a[1]-a[0],this.recalculateScale()}getRange(){return[this.range[0]+this.outerPadding,this.range[1]-this.outerPadding]}setAxisPosition(a){this.axisPosition=a,this.setRange(this.range)}getTickDistance(){const a=this.getRange();return Math.abs(a[0]-a[1])/this.getTickValues().length}getAxisOuterPadding(){return this.outerPadding}getLabelDimension(){return this.textDimensionCalculator.getMaxDimension(this.getTickValues().map(a=>a.toString()),this.axisConfig.labelFontSize)}recalculateOuterPaddingToDrawBar(){lRt*this.getTickDistance()>this.outerPadding*2&&(this.outerPadding=Math.floor(lRt*this.getTickDistance()/2)),this.recalculateScale()}calculateSpaceIfDrawnHorizontally(a){let f=a.height;if(this.axisConfig.showAxisLine&&f>this.axisConfig.axisLineWidth&&(f-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){const p=this.getLabelDimension(),w=hRt*a.width;this.outerPadding=Math.min(p.width/2,w);const m=p.height+this.axisConfig.labelPadding*2;this.labelTextHeight=p.height,m<=f&&(f-=m,this.showLabel=!0)}if(this.axisConfig.showTick&&f>=this.axisConfig.tickLength&&(this.showTick=!0,f-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){const p=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),w=p.height+this.axisConfig.titlePadding*2;this.titleTextHeight=p.height,w<=f&&(f-=w,this.showTitle=!0)}this.boundingRect.width=a.width,this.boundingRect.height=a.height-f}calculateSpaceIfDrawnVertical(a){let f=a.width;if(this.axisConfig.showAxisLine&&f>this.axisConfig.axisLineWidth&&(f-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){const p=this.getLabelDimension(),w=hRt*a.height;this.outerPadding=Math.min(p.height/2,w);const m=p.width+this.axisConfig.labelPadding*2;m<=f&&(f-=m,this.showLabel=!0)}if(this.axisConfig.showTick&&f>=this.axisConfig.tickLength&&(this.showTick=!0,f-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){const p=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),w=p.height+this.axisConfig.titlePadding*2;this.titleTextHeight=p.height,w<=f&&(f-=w,this.showTitle=!0)}this.boundingRect.width=a.width-f,this.boundingRect.height=a.height}calculateSpace(a){return this.axisPosition==="left"||this.axisPosition==="right"?this.calculateSpaceIfDrawnVertical(a):this.calculateSpaceIfDrawnHorizontally(a),this.recalculateScale(),{width:this.boundingRect.width,height:this.boundingRect.height}}setBoundingBoxXY(a){this.boundingRect.x=a.x,this.boundingRect.y=a.y}getDrawableElementsForLeftAxis(){const a=[];if(this.showAxisLine){const f=this.boundingRect.x+this.boundingRect.width-this.axisConfig.axisLineWidth/2;a.push({type:"path",groupTexts:["left-axis","axisl-line"],data:[{path:`M ${f},${this.boundingRect.y} L ${f},${this.boundingRect.y+this.boundingRect.height} `,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&a.push({type:"text",groupTexts:["left-axis","label"],data:this.getTickValues().map(f=>({text:f.toString(),x:this.boundingRect.x+this.boundingRect.width-(this.showLabel?this.axisConfig.labelPadding:0)-(this.showTick?this.axisConfig.tickLength:0)-(this.showAxisLine?this.axisConfig.axisLineWidth:0),y:this.getScaleValue(f),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"middle",horizontalPos:"right"}))}),this.showTick){const f=this.boundingRect.x+this.boundingRect.width-(this.showAxisLine?this.axisConfig.axisLineWidth:0);a.push({type:"path",groupTexts:["left-axis","ticks"],data:this.getTickValues().map(p=>({path:`M ${f},${this.getScaleValue(p)} L ${f-this.axisConfig.tickLength},${this.getScaleValue(p)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&a.push({type:"text",groupTexts:["left-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.axisConfig.titlePadding,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:270,verticalPos:"top",horizontalPos:"center"}]}),a}getDrawableElementsForBottomAxis(){const a=[];if(this.showAxisLine){const f=this.boundingRect.y+this.axisConfig.axisLineWidth/2;a.push({type:"path",groupTexts:["bottom-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${f} L ${this.boundingRect.x+this.boundingRect.width},${f}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&a.push({type:"text",groupTexts:["bottom-axis","label"],data:this.getTickValues().map(f=>({text:f.toString(),x:this.getScaleValue(f),y:this.boundingRect.y+this.axisConfig.labelPadding+(this.showTick?this.axisConfig.tickLength:0)+(this.showAxisLine?this.axisConfig.axisLineWidth:0),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){const f=this.boundingRect.y+(this.showAxisLine?this.axisConfig.axisLineWidth:0);a.push({type:"path",groupTexts:["bottom-axis","ticks"],data:this.getTickValues().map(p=>({path:`M ${this.getScaleValue(p)},${f} L ${this.getScaleValue(p)},${f+this.axisConfig.tickLength}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&a.push({type:"text",groupTexts:["bottom-axis","title"],data:[{text:this.title,x:this.range[0]+(this.range[1]-this.range[0])/2,y:this.boundingRect.y+this.boundingRect.height-this.axisConfig.titlePadding-this.titleTextHeight,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),a}getDrawableElementsForTopAxis(){const a=[];if(this.showAxisLine){const f=this.boundingRect.y+this.boundingRect.height-this.axisConfig.axisLineWidth/2;a.push({type:"path",groupTexts:["top-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${f} L ${this.boundingRect.x+this.boundingRect.width},${f}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&a.push({type:"text",groupTexts:["top-axis","label"],data:this.getTickValues().map(f=>({text:f.toString(),x:this.getScaleValue(f),y:this.boundingRect.y+(this.showTitle?this.titleTextHeight+this.axisConfig.titlePadding*2:0)+this.axisConfig.labelPadding,fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){const f=this.boundingRect.y;a.push({type:"path",groupTexts:["top-axis","ticks"],data:this.getTickValues().map(p=>({path:`M ${this.getScaleValue(p)},${f+this.boundingRect.height-(this.showAxisLine?this.axisConfig.axisLineWidth:0)} L ${this.getScaleValue(p)},${f+this.boundingRect.height-this.axisConfig.tickLength-(this.showAxisLine?this.axisConfig.axisLineWidth:0)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&a.push({type:"text",groupTexts:["top-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.axisConfig.titlePadding,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),a}getDrawableElements(){if(this.axisPosition==="left")return this.getDrawableElementsForLeftAxis();if(this.axisPosition==="right")throw Error("Drawing of right axis is not implemented");return this.axisPosition==="bottom"?this.getDrawableElementsForBottomAxis():this.axisPosition==="top"?this.getDrawableElementsForTopAxis():[]}}class xHe extends fRt{constructor(a,f,p,w,m){super(a,w,m,f),this.categories=p,this.scale=S1t().domain(this.categories).range(this.getRange())}setRange(a){super.setRange(a)}recalculateScale(){this.scale=S1t().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(.5),Ut.trace("BandAxis axis final categories, range: ",this.categories,this.getRange())}getTickValues(){return this.categories}getScaleValue(a){return this.scale(a)||this.getRange()[0]}}class kHe extends fRt{constructor(a,f,p,w,m){super(a,w,m,f),this.domain=p,this.scale=AA().domain(this.domain).range(this.getRange())}getTickValues(){return this.scale.ticks()}recalculateScale(){const a=[...this.domain];this.axisPosition==="left"&&a.reverse(),this.scale=AA().domain(a).range(this.getRange())}getScaleValue(a){return this.scale(a)}}function dRt(i,a,f,p){const w=new uRt(p);return cRt(i)?new xHe(a,f,i.categories,i.title,w):new kHe(a,f,[i.min,i.max],i.title,w)}class EHe{constructor(a,f,p,w){this.textDimensionCalculator=a,this.chartConfig=f,this.chartData=p,this.chartThemeConfig=w,this.boundingRect={x:0,y:0,width:0,height:0},this.showChartTitle=!1}setBoundingBoxXY(a){this.boundingRect.x=a.x,this.boundingRect.y=a.y}calculateSpace(a){const f=this.textDimensionCalculator.getMaxDimension([this.chartData.title],this.chartConfig.titleFontSize),p=Math.max(f.width,a.width),w=f.height+2*this.chartConfig.titlePadding;return f.width<=p&&f.height<=w&&this.chartConfig.showTitle&&this.chartData.title&&(this.boundingRect.width=p,this.boundingRect.height=w,this.showChartTitle=!0),{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){const a=[];return this.showChartTitle&&a.push({groupTexts:["chart-title"],type:"text",data:[{fontSize:this.chartConfig.titleFontSize,text:this.chartData.title,verticalPos:"middle",horizontalPos:"center",x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.chartThemeConfig.titleColor,rotation:0}]}),a}}function THe(i,a,f,p){const w=new uRt(p);return new EHe(w,i,a,f)}class CHe{constructor(a,f,p,w,m){this.plotData=a,this.xAxis=f,this.yAxis=p,this.orientation=w,this.plotIndex=m}getDrawableElement(){const a=this.plotData.data.map(p=>[this.xAxis.getScaleValue(p[0]),this.yAxis.getScaleValue(p[1])]);let f;return this.orientation==="horizontal"?f=E5().y(p=>p[0]).x(p=>p[1])(a):f=E5().x(p=>p[0]).y(p=>p[1])(a),f?[{groupTexts:["plot",`line-plot-${this.plotIndex}`],type:"path",data:[{path:f,strokeFill:this.plotData.strokeFill,strokeWidth:this.plotData.strokeWidth}]}]:[]}}class _He{constructor(a,f,p,w,m,b){this.barData=a,this.boundingRect=f,this.xAxis=p,this.yAxis=w,this.orientation=m,this.plotIndex=b}getDrawableElement(){const a=this.barData.data.map(m=>[this.xAxis.getScaleValue(m[0]),this.yAxis.getScaleValue(m[1])]),f=.05,p=Math.min(this.xAxis.getAxisOuterPadding()*2,this.xAxis.getTickDistance())*(1-f),w=p/2;return this.orientation==="horizontal"?[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:a.map(m=>({x:this.boundingRect.x,y:m[0]-w,height:p,width:m[1]-this.boundingRect.x,fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]:[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:a.map(m=>({x:m[0]-w,y:m[1],width:p,height:this.boundingRect.y+this.boundingRect.height-m[1],fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]}}class SHe{constructor(a,f,p){this.chartConfig=a,this.chartData=f,this.chartThemeConfig=p,this.boundingRect={x:0,y:0,width:0,height:0}}setAxes(a,f){this.xAxis=a,this.yAxis=f}setBoundingBoxXY(a){this.boundingRect.x=a.x,this.boundingRect.y=a.y}calculateSpace(a){return this.boundingRect.width=a.width,this.boundingRect.height=a.height,{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){if(!(this.xAxis&&this.yAxis))throw Error("Axes must be passed to render Plots");const a=[];for(const[f,p]of this.chartData.plots.entries())switch(p.type){case"line":{const w=new CHe(p,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,f);a.push(...w.getDrawableElement())}break;case"bar":{const w=new _He(p,this.boundingRect,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,f);a.push(...w.getDrawableElement())}break}return a}}function AHe(i,a,f){return new SHe(i,a,f)}class LHe{constructor(a,f,p,w){this.chartConfig=a,this.chartData=f,this.componentStore={title:THe(a,f,p,w),plot:AHe(a,f,p),xAxis:dRt(f.xAxis,a.xAxis,{titleColor:p.xAxisTitleColor,labelColor:p.xAxisLabelColor,tickColor:p.xAxisTickColor,axisLineColor:p.xAxisLineColor},w),yAxis:dRt(f.yAxis,a.yAxis,{titleColor:p.yAxisTitleColor,labelColor:p.yAxisLabelColor,tickColor:p.yAxisTickColor,axisLineColor:p.yAxisLineColor},w)}}calculateVerticalSpace(){let a=this.chartConfig.width,f=this.chartConfig.height,p=0,w=0,m=Math.floor(a*this.chartConfig.plotReservedSpacePercent/100),b=Math.floor(f*this.chartConfig.plotReservedSpacePercent/100),E=this.componentStore.plot.calculateSpace({width:m,height:b});a-=E.width,f-=E.height,E=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:f}),w=E.height,f-=E.height,this.componentStore.xAxis.setAxisPosition("bottom"),E=this.componentStore.xAxis.calculateSpace({width:a,height:f}),f-=E.height,this.componentStore.yAxis.setAxisPosition("left"),E=this.componentStore.yAxis.calculateSpace({width:a,height:f}),p=E.width,a-=E.width,a>0&&(m+=a,a=0),f>0&&(b+=f,f=0),this.componentStore.plot.calculateSpace({width:m,height:b}),this.componentStore.plot.setBoundingBoxXY({x:p,y:w}),this.componentStore.xAxis.setRange([p,p+m]),this.componentStore.xAxis.setBoundingBoxXY({x:p,y:w+b}),this.componentStore.yAxis.setRange([w,w+b]),this.componentStore.yAxis.setBoundingBoxXY({x:0,y:w}),this.chartData.plots.some(_=>oRt(_))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateHorizonatalSpace(){let a=this.chartConfig.width,f=this.chartConfig.height,p=0,w=0,m=0,b=Math.floor(a*this.chartConfig.plotReservedSpacePercent/100),E=Math.floor(f*this.chartConfig.plotReservedSpacePercent/100),_=this.componentStore.plot.calculateSpace({width:b,height:E});a-=_.width,f-=_.height,_=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:f}),p=_.height,f-=_.height,this.componentStore.xAxis.setAxisPosition("left"),_=this.componentStore.xAxis.calculateSpace({width:a,height:f}),a-=_.width,w=_.width,this.componentStore.yAxis.setAxisPosition("top"),_=this.componentStore.yAxis.calculateSpace({width:a,height:f}),f-=_.height,m=p+_.height,a>0&&(b+=a,a=0),f>0&&(E+=f,f=0),this.componentStore.plot.calculateSpace({width:b,height:E}),this.componentStore.plot.setBoundingBoxXY({x:w,y:m}),this.componentStore.yAxis.setRange([w,w+b]),this.componentStore.yAxis.setBoundingBoxXY({x:w,y:p}),this.componentStore.xAxis.setRange([m,m+E]),this.componentStore.xAxis.setBoundingBoxXY({x:0,y:m}),this.chartData.plots.some(A=>oRt(A))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateSpace(){this.chartConfig.chartOrientation==="horizontal"?this.calculateHorizonatalSpace():this.calculateVerticalSpace()}getDrawableElement(){this.calculateSpace();const a=[];this.componentStore.plot.setAxes(this.componentStore.xAxis,this.componentStore.yAxis);for(const f of Object.values(this.componentStore))a.push(...f.getDrawableElements());return a}}class MHe{static build(a,f,p,w){return new LHe(a,f,p,w).getDrawableElement()}}let RF=0,gRt,jF=bRt(),$F=pRt(),fu=wRt(),cgt=$F.plotColorPalette.split(",").map(i=>i.trim()),BY=!1,ugt=!1;function pRt(){const i=X1t(),a=Fd();return rF(i.xyChart,a.themeVariables.xyChart)}function bRt(){const i=Fd();return rF(Zh.xyChart,i.xyChart)}function wRt(){return{yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]}}function lgt(i){const a=Fd();return Q1(i.trim(),a)}function DHe(i){gRt=i}function IHe(i){i==="horizontal"?jF.chartOrientation="horizontal":jF.chartOrientation="vertical"}function OHe(i){fu.xAxis.title=lgt(i.text)}function vRt(i,a){fu.xAxis={type:"linear",title:fu.xAxis.title,min:i,max:a},BY=!0}function PHe(i){fu.xAxis={type:"band",title:fu.xAxis.title,categories:i.map(a=>lgt(a.text))},BY=!0}function FHe(i){fu.yAxis.title=lgt(i.text)}function NHe(i,a){fu.yAxis={type:"linear",title:fu.yAxis.title,min:i,max:a},ugt=!0}function BHe(i){const a=Math.min(...i),f=Math.max(...i),p=BF(fu.yAxis)?fu.yAxis.min:1/0,w=BF(fu.yAxis)?fu.yAxis.max:-1/0;fu.yAxis={type:"linear",title:fu.yAxis.title,min:Math.min(p,a),max:Math.max(w,f)}}function mRt(i){let a=[];if(i.length===0)return a;if(!BY){const f=BF(fu.xAxis)?fu.xAxis.min:1/0,p=BF(fu.xAxis)?fu.xAxis.max:-1/0;vRt(Math.min(f,1),Math.max(p,i.length))}if(ugt||BHe(i),cRt(fu.xAxis)&&(a=fu.xAxis.categories.map((f,p)=>[f,i[p]])),BF(fu.xAxis)){const f=fu.xAxis.min,p=fu.xAxis.max,w=(p-f+1)/i.length,m=[];for(let b=f;b<=p;b+=w)m.push(`${b}`);a=m.map((b,E)=>[b,i[E]])}return a}function yRt(i){return cgt[i===0?0:i%cgt.length]}function RHe(i,a){const f=mRt(a);fu.plots.push({type:"line",strokeFill:yRt(RF),strokeWidth:2,data:f}),RF++}function jHe(i,a){const f=mRt(a);fu.plots.push({type:"bar",fill:yRt(RF),data:f}),RF++}function $He(){if(fu.plots.length===0)throw Error("No Plot to render, please provide a plot with some data");return fu.title=pg(),MHe.build(jF,fu,$F,gRt)}function zHe(){return $F}function qHe(){return jF}const HHe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:yHe,db:{getDrawableElem:$He,clear:function(){hg(),RF=0,jF=bRt(),fu=wRt(),$F=pRt(),cgt=$F.plotColorPalette.split(",").map(i=>i.trim()),BY=!1,ugt=!1},setAccTitle:E0,getAccTitle:fg,setDiagramTitle:Nb,getDiagramTitle:pg,getAccDescription:gg,setAccDescription:dg,setOrientation:IHe,setXAxisTitle:OHe,setXAxisRangeData:vRt,setXAxisBand:PHe,setYAxisTitle:FHe,setYAxisRangeData:NHe,setLineData:RHe,setBarData:jHe,setTmpSVGG:DHe,getChartThemeConfig:zHe,getChartConfig:qHe},renderer:{draw:(i,a,f,p)=>{const w=p.db,m=w.getChartThemeConfig(),b=w.getChartConfig();function E(et){return et==="top"?"text-before-edge":"middle"}function _(et){return et==="left"?"start":et==="right"?"end":"middle"}function A(et){return`translate(${et.x}, ${et.y}) rotate(${et.rotation||0})`}Ut.debug(`Rendering xychart chart -`+i);const I=VW(a),B=I.append("g").attr("class","main"),N=B.append("rect").attr("width",b.width).attr("height",b.height).attr("class","background");k0(I,b.height,b.width,!0),I.attr("viewBox",`0 0 ${b.width} ${b.height}`),N.attr("fill",m.backgroundColor),w.setTmpSVGG(I.append("g").attr("class","mermaid-tmp-group"));const R=w.getDrawableElem(),z={};function W(et){let st=B,at="";for(const[bt]of et.entries()){let mt=B;bt>0&&z[at]&&(mt=z[at]),at+=et[bt],st=z[at],st||(st=z[at]=mt.append("g").attr("class",et[bt]))}return st}for(const et of R){if(et.data.length===0)continue;const st=W(et.groupTexts);switch(et.type){case"rect":st.selectAll("rect").data(et.data).enter().append("rect").attr("x",at=>at.x).attr("y",at=>at.y).attr("width",at=>at.width).attr("height",at=>at.height).attr("fill",at=>at.fill).attr("stroke",at=>at.strokeFill).attr("stroke-width",at=>at.strokeWidth);break;case"text":st.selectAll("text").data(et.data).enter().append("text").attr("x",0).attr("y",0).attr("fill",at=>at.fill).attr("font-size",at=>at.fontSize).attr("dominant-baseline",at=>E(at.verticalPos)).attr("text-anchor",at=>_(at.horizontalPos)).attr("transform",at=>A(at)).text(at=>at.text);break;case"path":st.selectAll("path").data(et.data).enter().append("path").attr("d",at=>at.path).attr("fill",at=>at.fill?at.fill:"none").attr("stroke",at=>at.strokeFill).attr("stroke-width",at=>at.strokeWidth);break}}}}}},Symbol.toStringTag,{value:"Module"}));var hgt=function(){var i=function(Se,me,Ve,Ye){for(Ve=Ve||{},Ye=Se.length;Ye--;Ve[Se[Ye]]=me);return Ve},a=[1,3],f=[1,4],p=[1,5],w=[1,6],m=[5,6,8,9,11,13,31,32,33,34,35,36,44,62,63],b=[1,18],E=[2,7],_=[1,22],A=[1,23],I=[1,24],B=[1,25],N=[1,26],R=[1,27],z=[1,20],W=[1,28],et=[1,29],st=[62,63],at=[5,8,9,11,13,31,32,33,34,35,36,44,51,53,62,63],bt=[1,47],mt=[1,48],yt=[1,49],ft=[1,50],ut=[1,51],vt=[1,52],X=[1,53],pt=[53,54],U=[1,64],Tt=[1,60],nt=[1,61],It=[1,62],Ot=[1,63],Bt=[1,65],Et=[1,69],Z=[1,70],Ct=[1,67],xt=[1,68],Ht=[5,8,9,11,13,31,32,33,34,35,36,44,62,63],Le={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,requirementType:17,requirementName:18,STRUCT_START:19,requirementBody:20,ID:21,COLONSEP:22,id:23,TEXT:24,text:25,RISK:26,riskLevel:27,VERIFYMTHD:28,verifyType:29,STRUCT_STOP:30,REQUIREMENT:31,FUNCTIONAL_REQUIREMENT:32,INTERFACE_REQUIREMENT:33,PERFORMANCE_REQUIREMENT:34,PHYSICAL_REQUIREMENT:35,DESIGN_CONSTRAINT:36,LOW_RISK:37,MED_RISK:38,HIGH_RISK:39,VERIFY_ANALYSIS:40,VERIFY_DEMONSTRATION:41,VERIFY_INSPECTION:42,VERIFY_TEST:43,ELEMENT:44,elementName:45,elementBody:46,TYPE:47,type:48,DOCREF:49,ref:50,END_ARROW_L:51,relationship:52,LINE:53,END_ARROW_R:54,CONTAINS:55,COPIES:56,DERIVES:57,SATISFIES:58,VERIFIES:59,REFINES:60,TRACES:61,unqString:62,qString:63,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",19:"STRUCT_START",21:"ID",22:"COLONSEP",24:"TEXT",26:"RISK",28:"VERIFYMTHD",30:"STRUCT_STOP",31:"REQUIREMENT",32:"FUNCTIONAL_REQUIREMENT",33:"INTERFACE_REQUIREMENT",34:"PERFORMANCE_REQUIREMENT",35:"PHYSICAL_REQUIREMENT",36:"DESIGN_CONSTRAINT",37:"LOW_RISK",38:"MED_RISK",39:"HIGH_RISK",40:"VERIFY_ANALYSIS",41:"VERIFY_DEMONSTRATION",42:"VERIFY_INSPECTION",43:"VERIFY_TEST",44:"ELEMENT",47:"TYPE",49:"DOCREF",51:"END_ARROW_L",53:"LINE",54:"END_ARROW_R",55:"CONTAINS",56:"COPIES",57:"DERIVES",58:"SATISFIES",59:"VERIFIES",60:"REFINES",61:"TRACES",62:"unqString",63:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[14,5],[20,5],[20,5],[20,5],[20,5],[20,2],[20,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[27,1],[27,1],[27,1],[29,1],[29,1],[29,1],[29,1],[15,5],[46,5],[46,5],[46,2],[46,1],[16,5],[16,5],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[18,1],[18,1],[23,1],[23,1],[25,1],[25,1],[45,1],[45,1],[48,1],[48,1],[50,1],[50,1]],performAction:function(me,Ve,Ye,ce,ke,zt,re){var se=zt.length-1;switch(ke){case 4:this.$=zt[se].trim(),ce.setAccTitle(this.$);break;case 5:case 6:this.$=zt[se].trim(),ce.setAccDescription(this.$);break;case 7:this.$=[];break;case 13:ce.addRequirement(zt[se-3],zt[se-4]);break;case 14:ce.setNewReqId(zt[se-2]);break;case 15:ce.setNewReqText(zt[se-2]);break;case 16:ce.setNewReqRisk(zt[se-2]);break;case 17:ce.setNewReqVerifyMethod(zt[se-2]);break;case 20:this.$=ce.RequirementType.REQUIREMENT;break;case 21:this.$=ce.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 22:this.$=ce.RequirementType.INTERFACE_REQUIREMENT;break;case 23:this.$=ce.RequirementType.PERFORMANCE_REQUIREMENT;break;case 24:this.$=ce.RequirementType.PHYSICAL_REQUIREMENT;break;case 25:this.$=ce.RequirementType.DESIGN_CONSTRAINT;break;case 26:this.$=ce.RiskLevel.LOW_RISK;break;case 27:this.$=ce.RiskLevel.MED_RISK;break;case 28:this.$=ce.RiskLevel.HIGH_RISK;break;case 29:this.$=ce.VerifyType.VERIFY_ANALYSIS;break;case 30:this.$=ce.VerifyType.VERIFY_DEMONSTRATION;break;case 31:this.$=ce.VerifyType.VERIFY_INSPECTION;break;case 32:this.$=ce.VerifyType.VERIFY_TEST;break;case 33:ce.addElement(zt[se-3]);break;case 34:ce.setNewElementType(zt[se-2]);break;case 35:ce.setNewElementDocRef(zt[se-2]);break;case 38:ce.addRelationship(zt[se-2],zt[se],zt[se-4]);break;case 39:ce.addRelationship(zt[se-2],zt[se-4],zt[se]);break;case 40:this.$=ce.Relationships.CONTAINS;break;case 41:this.$=ce.Relationships.COPIES;break;case 42:this.$=ce.Relationships.DERIVES;break;case 43:this.$=ce.Relationships.SATISFIES;break;case 44:this.$=ce.Relationships.VERIFIES;break;case 45:this.$=ce.Relationships.REFINES;break;case 46:this.$=ce.Relationships.TRACES;break}},table:[{3:1,4:2,6:a,9:f,11:p,13:w},{1:[3]},{3:8,4:2,5:[1,7],6:a,9:f,11:p,13:w},{5:[1,9]},{10:[1,10]},{12:[1,11]},i(m,[2,6]),{3:12,4:2,6:a,9:f,11:p,13:w},{1:[2,2]},{4:17,5:b,7:13,8:E,9:f,11:p,13:w,14:14,15:15,16:16,17:19,23:21,31:_,32:A,33:I,34:B,35:N,36:R,44:z,62:W,63:et},i(m,[2,4]),i(m,[2,5]),{1:[2,1]},{8:[1,30]},{4:17,5:b,7:31,8:E,9:f,11:p,13:w,14:14,15:15,16:16,17:19,23:21,31:_,32:A,33:I,34:B,35:N,36:R,44:z,62:W,63:et},{4:17,5:b,7:32,8:E,9:f,11:p,13:w,14:14,15:15,16:16,17:19,23:21,31:_,32:A,33:I,34:B,35:N,36:R,44:z,62:W,63:et},{4:17,5:b,7:33,8:E,9:f,11:p,13:w,14:14,15:15,16:16,17:19,23:21,31:_,32:A,33:I,34:B,35:N,36:R,44:z,62:W,63:et},{4:17,5:b,7:34,8:E,9:f,11:p,13:w,14:14,15:15,16:16,17:19,23:21,31:_,32:A,33:I,34:B,35:N,36:R,44:z,62:W,63:et},{4:17,5:b,7:35,8:E,9:f,11:p,13:w,14:14,15:15,16:16,17:19,23:21,31:_,32:A,33:I,34:B,35:N,36:R,44:z,62:W,63:et},{18:36,62:[1,37],63:[1,38]},{45:39,62:[1,40],63:[1,41]},{51:[1,42],53:[1,43]},i(st,[2,20]),i(st,[2,21]),i(st,[2,22]),i(st,[2,23]),i(st,[2,24]),i(st,[2,25]),i(at,[2,49]),i(at,[2,50]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{19:[1,44]},{19:[2,47]},{19:[2,48]},{19:[1,45]},{19:[2,53]},{19:[2,54]},{52:46,55:bt,56:mt,57:yt,58:ft,59:ut,60:vt,61:X},{52:54,55:bt,56:mt,57:yt,58:ft,59:ut,60:vt,61:X},{5:[1,55]},{5:[1,56]},{53:[1,57]},i(pt,[2,40]),i(pt,[2,41]),i(pt,[2,42]),i(pt,[2,43]),i(pt,[2,44]),i(pt,[2,45]),i(pt,[2,46]),{54:[1,58]},{5:U,20:59,21:Tt,24:nt,26:It,28:Ot,30:Bt},{5:Et,30:Z,46:66,47:Ct,49:xt},{23:71,62:W,63:et},{23:72,62:W,63:et},i(Ht,[2,13]),{22:[1,73]},{22:[1,74]},{22:[1,75]},{22:[1,76]},{5:U,20:77,21:Tt,24:nt,26:It,28:Ot,30:Bt},i(Ht,[2,19]),i(Ht,[2,33]),{22:[1,78]},{22:[1,79]},{5:Et,30:Z,46:80,47:Ct,49:xt},i(Ht,[2,37]),i(Ht,[2,38]),i(Ht,[2,39]),{23:81,62:W,63:et},{25:82,62:[1,83],63:[1,84]},{27:85,37:[1,86],38:[1,87],39:[1,88]},{29:89,40:[1,90],41:[1,91],42:[1,92],43:[1,93]},i(Ht,[2,18]),{48:94,62:[1,95],63:[1,96]},{50:97,62:[1,98],63:[1,99]},i(Ht,[2,36]),{5:[1,100]},{5:[1,101]},{5:[2,51]},{5:[2,52]},{5:[1,102]},{5:[2,26]},{5:[2,27]},{5:[2,28]},{5:[1,103]},{5:[2,29]},{5:[2,30]},{5:[2,31]},{5:[2,32]},{5:[1,104]},{5:[2,55]},{5:[2,56]},{5:[1,105]},{5:[2,57]},{5:[2,58]},{5:U,20:106,21:Tt,24:nt,26:It,28:Ot,30:Bt},{5:U,20:107,21:Tt,24:nt,26:It,28:Ot,30:Bt},{5:U,20:108,21:Tt,24:nt,26:It,28:Ot,30:Bt},{5:U,20:109,21:Tt,24:nt,26:It,28:Ot,30:Bt},{5:Et,30:Z,46:110,47:Ct,49:xt},{5:Et,30:Z,46:111,47:Ct,49:xt},i(Ht,[2,14]),i(Ht,[2,15]),i(Ht,[2,16]),i(Ht,[2,17]),i(Ht,[2,34]),i(Ht,[2,35])],defaultActions:{8:[2,2],12:[2,1],30:[2,3],31:[2,8],32:[2,9],33:[2,10],34:[2,11],35:[2,12],37:[2,47],38:[2,48],40:[2,53],41:[2,54],83:[2,51],84:[2,52],86:[2,26],87:[2,27],88:[2,28],90:[2,29],91:[2,30],92:[2,31],93:[2,32],95:[2,55],96:[2,56],98:[2,57],99:[2,58]},parseError:function(me,Ve){if(Ve.recoverable)this.trace(me);else{var Ye=new Error(me);throw Ye.hash=Ve,Ye}},parse:function(me){var Ve=this,Ye=[0],ce=[],ke=[null],zt=[],re=this.table,se="",Pe=0,te=0,Me=2,de=1,on=zt.slice.call(arguments,1),ni=Object.create(this.lexer),Ks={yy:{}};for(var ws in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ws)&&(Ks.yy[ws]=this.yy[ws]);ni.setInput(me,Ks.yy),Ks.yy.lexer=ni,Ks.yy.parser=this,typeof ni.yylloc>"u"&&(ni.yylloc={});var fo=ni.yylloc;zt.push(fo);var Xi=ni.options&&ni.options.ranges;typeof Ks.yy.parseError=="function"?this.parseError=Ks.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Er(){var Gs;return Gs=ce.pop()||ni.lex()||de,typeof Gs!="number"&&(Gs instanceof Array&&(ce=Gs,Gs=ce.pop()),Gs=Ve.symbols_[Gs]||Gs),Gs}for(var Xn,di,Ee,Kn,He={},Ti,pn,Es,qa;;){if(di=Ye[Ye.length-1],this.defaultActions[di]?Ee=this.defaultActions[di]:((Xn===null||typeof Xn>"u")&&(Xn=Er()),Ee=re[di]&&re[di][Xn]),typeof Ee>"u"||!Ee.length||!Ee[0]){var Ma="";qa=[];for(Ti in re[di])this.terminals_[Ti]&&Ti>Me&&qa.push("'"+this.terminals_[Ti]+"'");ni.showPosition?Ma="Parse error on line "+(Pe+1)+`: -`+ni.showPosition()+` -Expecting `+qa.join(", ")+", got '"+(this.terminals_[Xn]||Xn)+"'":Ma="Parse error on line "+(Pe+1)+": Unexpected "+(Xn==de?"end of input":"'"+(this.terminals_[Xn]||Xn)+"'"),this.parseError(Ma,{text:ni.match,token:this.terminals_[Xn]||Xn,line:ni.yylineno,loc:fo,expected:qa})}if(Ee[0]instanceof Array&&Ee.length>1)throw new Error("Parse Error: multiple actions possible at state: "+di+", token: "+Xn);switch(Ee[0]){case 1:Ye.push(Xn),ke.push(ni.yytext),zt.push(ni.yylloc),Ye.push(Ee[1]),Xn=null,te=ni.yyleng,se=ni.yytext,Pe=ni.yylineno,fo=ni.yylloc;break;case 2:if(pn=this.productions_[Ee[1]][1],He.$=ke[ke.length-pn],He._$={first_line:zt[zt.length-(pn||1)].first_line,last_line:zt[zt.length-1].last_line,first_column:zt[zt.length-(pn||1)].first_column,last_column:zt[zt.length-1].last_column},Xi&&(He._$.range=[zt[zt.length-(pn||1)].range[0],zt[zt.length-1].range[1]]),Kn=this.performAction.apply(He,[se,te,Pe,Ks.yy,Ee[1],ke,zt].concat(on)),typeof Kn<"u")return Kn;pn&&(Ye=Ye.slice(0,-1*pn*2),ke=ke.slice(0,-1*pn),zt=zt.slice(0,-1*pn)),Ye.push(this.productions_[Ee[1]][0]),ke.push(He.$),zt.push(He._$),Es=re[Ye[Ye.length-2]][Ye[Ye.length-1]],Ye.push(Es);break;case 3:return!0}}return!0}},Ft=function(){var Se={EOF:1,parseError:function(Ve,Ye){if(this.yy.parser)this.yy.parser.parseError(Ve,Ye);else throw new Error(Ve)},setInput:function(me,Ve){return this.yy=Ve||this.yy||{},this._input=me,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var me=this._input[0];this.yytext+=me,this.yyleng++,this.offset++,this.match+=me,this.matched+=me;var Ve=me.match(/(?:\r\n?|\n).*/g);return Ve?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),me},unput:function(me){var Ve=me.length,Ye=me.split(/(?:\r\n?|\n)/g);this._input=me+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ve),this.offset-=Ve;var ce=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Ye.length-1&&(this.yylineno-=Ye.length-1);var ke=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Ye?(Ye.length===ce.length?this.yylloc.first_column:0)+ce[ce.length-Ye.length].length-Ye[0].length:this.yylloc.first_column-Ve},this.options.ranges&&(this.yylloc.range=[ke[0],ke[0]+this.yyleng-Ve]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(me){this.unput(this.match.slice(me))},pastInput:function(){var me=this.matched.substr(0,this.matched.length-this.match.length);return(me.length>20?"...":"")+me.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var me=this.match;return me.length<20&&(me+=this._input.substr(0,20-me.length)),(me.substr(0,20)+(me.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var me=this.pastInput(),Ve=new Array(me.length+1).join("-");return me+this.upcomingInput()+` -`+Ve+"^"},test_match:function(me,Ve){var Ye,ce,ke;if(this.options.backtrack_lexer&&(ke={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ke.yylloc.range=this.yylloc.range.slice(0))),ce=me[0].match(/(?:\r\n?|\n).*/g),ce&&(this.yylineno+=ce.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ce?ce[ce.length-1].length-ce[ce.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+me[0].length},this.yytext+=me[0],this.match+=me[0],this.matches=me,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(me[0].length),this.matched+=me[0],Ye=this.performAction.call(this,this.yy,this,Ve,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Ye)return Ye;if(this._backtrack){for(var zt in ke)this[zt]=ke[zt];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var me,Ve,Ye,ce;this._more||(this.yytext="",this.match="");for(var ke=this._currentRules(),zt=0;ztVe[0].length)){if(Ve=Ye,ce=zt,this.options.backtrack_lexer){if(me=this.test_match(Ye,ke[zt]),me!==!1)return me;if(this._backtrack){Ve=!1;continue}else return!1}else if(!this.options.flex)break}return Ve?(me=this.test_match(Ve,ke[ce]),me!==!1?me:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Ve=this.next();return Ve||this.lex()},begin:function(Ve){this.conditionStack.push(Ve)},popState:function(){var Ve=this.conditionStack.length-1;return Ve>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Ve){return Ve=this.conditionStack.length-1-Math.abs(Ve||0),Ve>=0?this.conditionStack[Ve]:"INITIAL"},pushState:function(Ve){this.begin(Ve)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Ve,Ye,ce,ke){switch(ce){case 0:return"title";case 1:return this.begin("acc_title"),9;case 2:return this.popState(),"acc_title_value";case 3:return this.begin("acc_descr"),11;case 4:return this.popState(),"acc_descr_value";case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:return 5;case 9:break;case 10:break;case 11:break;case 12:return 8;case 13:return 6;case 14:return 19;case 15:return 30;case 16:return 22;case 17:return 21;case 18:return 24;case 19:return 26;case 20:return 28;case 21:return 31;case 22:return 32;case 23:return 33;case 24:return 34;case 25:return 35;case 26:return 36;case 27:return 37;case 28:return 38;case 29:return 39;case 30:return 40;case 31:return 41;case 32:return 42;case 33:return 43;case 34:return 44;case 35:return 55;case 36:return 56;case 37:return 57;case 38:return 58;case 39:return 59;case 40:return 60;case 41:return 61;case 42:return 47;case 43:return 49;case 44:return 51;case 45:return 54;case 46:return 53;case 47:this.begin("string");break;case 48:this.popState();break;case 49:return"qString";case 50:return Ye.yytext=Ye.yytext.trim(),62}},rules:[/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[48,49],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,50],inclusive:!0}}};return Se}();Le.lexer=Ft;function gn(){this.yy={}}return gn.prototype=Le,Le.Parser=gn,new gn}();hgt.parser=hgt;const VHe=hgt;let fgt=[],wp={},zF={},yk={},qF={};const GHe={RequirementType:{REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"},RiskLevel:{LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"},VerifyType:{VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"},Relationships:{CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"},getConfig:()=>Oe().req,addRequirement:(i,a)=>(zF[i]===void 0&&(zF[i]={name:i,type:a,id:wp.id,text:wp.text,risk:wp.risk,verifyMethod:wp.verifyMethod}),wp={},zF[i]),getRequirements:()=>zF,setNewReqId:i=>{wp!==void 0&&(wp.id=i)},setNewReqText:i=>{wp!==void 0&&(wp.text=i)},setNewReqRisk:i=>{wp!==void 0&&(wp.risk=i)},setNewReqVerifyMethod:i=>{wp!==void 0&&(wp.verifyMethod=i)},setAccTitle:E0,getAccTitle:fg,setAccDescription:dg,getAccDescription:gg,addElement:i=>(qF[i]===void 0&&(qF[i]={name:i,type:yk.type,docRef:yk.docRef},Ut.info("Added new requirement: ",i)),yk={},qF[i]),getElements:()=>qF,setNewElementType:i=>{yk!==void 0&&(yk.type=i)},setNewElementDocRef:i=>{yk!==void 0&&(yk.docRef=i)},addRelationship:(i,a,f)=>{fgt.push({type:i,src:a,dst:f})},getRelationships:()=>fgt,clear:()=>{fgt=[],wp={},zF={},yk={},qF={},hg()}},UHe=i=>` +`,knn=i=>{const s=Object.entries(i).map(d=>({label:d[0],value:d[1]})).sort((d,p)=>p.value-d.value);return SNt().value(d=>d.value)(s)},Enn=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:vnn,db:ynn,renderer:{draw:(i,s,u,d)=>{Xe.debug(`rendering pie chart +`+i);const p=d.db,v=qt(),b=JF(p.getConfig(),v.pie),y=40,T=18,_=4,A=450,P=A,R=rR(s),F=R.append("g"),j=p.getSections();F.attr("transform","translate("+P/2+","+A/2+")");const{themeVariables:K}=v;let[ee]=NC(K.pieOuterStrokeWidth);ee??(ee=2);const ie=b.textPosition,oe=Math.min(P,A)/2-y,pe=lD().innerRadius(0).outerRadius(oe),be=lD().innerRadius(oe*ie).outerRadius(oe*ie);F.append("circle").attr("cx",0).attr("cy",0).attr("r",oe+ee/2).attr("class","pieOuterCircle");const ae=knn(j),ne=[K.pie1,K.pie2,K.pie3,K.pie4,K.pie5,K.pie6,K.pie7,K.pie8,K.pie9,K.pie10,K.pie11,K.pie12],se=_F(ne);F.selectAll("mySlices").data(ae).enter().append("path").attr("d",pe).attr("fill",xe=>se(xe.data.label)).attr("class","pieCircle");let de=0;Object.keys(j).forEach(xe=>{de+=j[xe]}),F.selectAll("mySlices").data(ae).enter().append("text").text(xe=>(xe.data.value/de*100).toFixed(0)+"%").attr("transform",xe=>"translate("+be.centroid(xe)+")").style("text-anchor","middle").attr("class","slice"),F.append("text").text(p.getDiagramTitle()).attr("x",0).attr("y",-(A-50)/2).attr("class","pieTitleText");const X=F.selectAll(".legend").data(se.domain()).enter().append("g").attr("class","legend").attr("transform",(xe,U)=>{const Fe=T+_,Pe=Fe*se.domain().length/2,je=12*T,Ie=U*Fe-Pe;return"translate("+je+","+Ie+")"});X.append("rect").attr("width",T).attr("height",T).style("fill",se).style("stroke",se),X.data(ae).append("text").attr("x",T+_).attr("y",T-_).text(xe=>{const{label:U,value:Fe}=xe.data;return p.getShowData()?`${U} [${Fe}]`:U});const ge=Math.max(...X.selectAll("text").nodes().map(xe=>(xe==null?void 0:xe.getBoundingClientRect().width)??0)),W=P+y+T+_+ge;R.attr("viewBox",`0 0 ${W} ${A}`),Ng(R,A,W,b.useMaxWidth)}},styles:xnn}},Symbol.toStringTag,{value:"Module"}));var fve=function(){var i=function(_t,Et,Gt,ln){for(Gt=Gt||{},ln=_t.length;ln--;Gt[_t[ln]]=Et);return Gt},s=[1,3],u=[1,4],d=[1,5],p=[1,6],v=[1,7],b=[1,5,13,15,17,19,20,25,27,28,29,30,31,32,33,34,37,38,40,41,42,43,44,45,46,47,48,49,50],y=[1,5,6,13,15,17,19,20,25,27,28,29,30,31,32,33,34,37,38,40,41,42,43,44,45,46,47,48,49,50],T=[32,33,34],_=[2,7],A=[1,13],P=[1,17],R=[1,18],F=[1,19],j=[1,20],K=[1,21],ee=[1,22],ie=[1,23],oe=[1,24],pe=[1,25],be=[1,26],ae=[1,27],ne=[1,30],se=[1,31],de=[1,32],X=[1,33],ge=[1,34],W=[1,35],xe=[1,36],U=[1,37],Fe=[1,38],Pe=[1,39],je=[1,40],Ie=[1,41],Se=[1,42],Ce=[1,57],ke=[1,58],Ke=[5,22,26,32,33,34,40,41,42,43,44,45,46,47,48,49,50,51],Ft={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,SPACE:5,QUADRANT:6,document:7,line:8,statement:9,axisDetails:10,quadrantDetails:11,points:12,title:13,title_value:14,acc_title:15,acc_title_value:16,acc_descr:17,acc_descr_value:18,acc_descr_multiline_value:19,section:20,text:21,point_start:22,point_x:23,point_y:24,"X-AXIS":25,"AXIS-TEXT-DELIMITER":26,"Y-AXIS":27,QUADRANT_1:28,QUADRANT_2:29,QUADRANT_3:30,QUADRANT_4:31,NEWLINE:32,SEMI:33,EOF:34,alphaNumToken:35,textNoTagsToken:36,STR:37,MD_STR:38,alphaNum:39,PUNCTUATION:40,AMP:41,NUM:42,ALPHA:43,COMMA:44,PLUS:45,EQUALS:46,MULT:47,DOT:48,BRKT:49,UNDERSCORE:50,MINUS:51,$accept:0,$end:1},terminals_:{2:"error",5:"SPACE",6:"QUADRANT",13:"title",14:"title_value",15:"acc_title",16:"acc_title_value",17:"acc_descr",18:"acc_descr_value",19:"acc_descr_multiline_value",20:"section",22:"point_start",23:"point_x",24:"point_y",25:"X-AXIS",26:"AXIS-TEXT-DELIMITER",27:"Y-AXIS",28:"QUADRANT_1",29:"QUADRANT_2",30:"QUADRANT_3",31:"QUADRANT_4",32:"NEWLINE",33:"SEMI",34:"EOF",37:"STR",38:"MD_STR",40:"PUNCTUATION",41:"AMP",42:"NUM",43:"ALPHA",44:"COMMA",45:"PLUS",46:"EQUALS",47:"MULT",48:"DOT",49:"BRKT",50:"UNDERSCORE",51:"MINUS"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[9,0],[9,2],[9,1],[9,1],[9,1],[9,2],[9,2],[9,2],[9,1],[9,1],[12,4],[10,4],[10,3],[10,2],[10,4],[10,3],[10,2],[11,2],[11,2],[11,2],[11,2],[4,1],[4,1],[4,1],[21,1],[21,2],[21,1],[21,1],[39,1],[39,2],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[36,1],[36,1],[36,1]],performAction:function(Et,Gt,ln,xt,Pt,Qe,Dt){var kt=Qe.length-1;switch(Pt){case 12:this.$=Qe[kt].trim(),xt.setDiagramTitle(this.$);break;case 13:this.$=Qe[kt].trim(),xt.setAccTitle(this.$);break;case 14:case 15:this.$=Qe[kt].trim(),xt.setAccDescription(this.$);break;case 16:xt.addSection(Qe[kt].substr(8)),this.$=Qe[kt].substr(8);break;case 17:xt.addPoint(Qe[kt-3],Qe[kt-1],Qe[kt]);break;case 18:xt.setXAxisLeftText(Qe[kt-2]),xt.setXAxisRightText(Qe[kt]);break;case 19:Qe[kt-1].text+=" ⟶ ",xt.setXAxisLeftText(Qe[kt-1]);break;case 20:xt.setXAxisLeftText(Qe[kt]);break;case 21:xt.setYAxisBottomText(Qe[kt-2]),xt.setYAxisTopText(Qe[kt]);break;case 22:Qe[kt-1].text+=" ⟶ ",xt.setYAxisBottomText(Qe[kt-1]);break;case 23:xt.setYAxisBottomText(Qe[kt]);break;case 24:xt.setQuadrant1Text(Qe[kt]);break;case 25:xt.setQuadrant2Text(Qe[kt]);break;case 26:xt.setQuadrant3Text(Qe[kt]);break;case 27:xt.setQuadrant4Text(Qe[kt]);break;case 31:this.$={text:Qe[kt],type:"text"};break;case 32:this.$={text:Qe[kt-1].text+""+Qe[kt],type:Qe[kt-1].type};break;case 33:this.$={text:Qe[kt],type:"text"};break;case 34:this.$={text:Qe[kt],type:"markdown"};break;case 35:this.$=Qe[kt];break;case 36:this.$=Qe[kt-1]+""+Qe[kt];break}},table:[{3:1,4:2,5:s,6:u,32:d,33:p,34:v},{1:[3]},{3:8,4:2,5:s,6:u,32:d,33:p,34:v},{3:9,4:2,5:s,6:u,32:d,33:p,34:v},i(b,[2,4],{7:10}),i(y,[2,28]),i(y,[2,29]),i(y,[2,30]),{1:[2,1]},{1:[2,2]},i(T,_,{8:11,9:12,10:14,11:15,12:16,21:28,35:29,1:[2,3],5:A,13:P,15:R,17:F,19:j,20:K,25:ee,27:ie,28:oe,29:pe,30:be,31:ae,37:ne,38:se,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se}),i(b,[2,5]),{4:43,32:d,33:p,34:v},i(T,_,{10:14,11:15,12:16,21:28,35:29,9:44,5:A,13:P,15:R,17:F,19:j,20:K,25:ee,27:ie,28:oe,29:pe,30:be,31:ae,37:ne,38:se,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se}),i(T,[2,9]),i(T,[2,10]),i(T,[2,11]),{14:[1,45]},{16:[1,46]},{18:[1,47]},i(T,[2,15]),i(T,[2,16]),{21:48,35:29,37:ne,38:se,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se},{21:49,35:29,37:ne,38:se,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se},{21:50,35:29,37:ne,38:se,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se},{21:51,35:29,37:ne,38:se,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se},{21:52,35:29,37:ne,38:se,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se},{21:53,35:29,37:ne,38:se,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se},{5:Ce,22:[1,54],35:56,36:55,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se,51:ke},i(Ke,[2,31]),i(Ke,[2,33]),i(Ke,[2,34]),i(Ke,[2,37]),i(Ke,[2,38]),i(Ke,[2,39]),i(Ke,[2,40]),i(Ke,[2,41]),i(Ke,[2,42]),i(Ke,[2,43]),i(Ke,[2,44]),i(Ke,[2,45]),i(Ke,[2,46]),i(Ke,[2,47]),i(b,[2,6]),i(T,[2,8]),i(T,[2,12]),i(T,[2,13]),i(T,[2,14]),i(T,[2,20],{36:55,35:56,5:Ce,26:[1,59],40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se,51:ke}),i(T,[2,23],{36:55,35:56,5:Ce,26:[1,60],40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se,51:ke}),i(T,[2,24],{36:55,35:56,5:Ce,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se,51:ke}),i(T,[2,25],{36:55,35:56,5:Ce,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se,51:ke}),i(T,[2,26],{36:55,35:56,5:Ce,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se,51:ke}),i(T,[2,27],{36:55,35:56,5:Ce,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se,51:ke}),{23:[1,61]},i(Ke,[2,32]),i(Ke,[2,48]),i(Ke,[2,49]),i(Ke,[2,50]),i(T,[2,19],{35:29,21:62,37:ne,38:se,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se}),i(T,[2,22],{35:29,21:63,37:ne,38:se,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se}),{24:[1,64]},i(T,[2,18],{36:55,35:56,5:Ce,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se,51:ke}),i(T,[2,21],{36:55,35:56,5:Ce,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se,51:ke}),i(T,[2,17])],defaultActions:{8:[2,1],9:[2,2]},parseError:function(Et,Gt){if(Gt.recoverable)this.trace(Et);else{var ln=new Error(Et);throw ln.hash=Gt,ln}},parse:function(Et){var Gt=this,ln=[0],xt=[],Pt=[null],Qe=[],Dt=this.table,kt="",On=0,ht=0,zr=2,yt=1,ji=Qe.slice.call(arguments,1),xi=Object.create(this.lexer),Ma={yy:{}};for(var zs in this.yy)Object.prototype.hasOwnProperty.call(this.yy,zs)&&(Ma.yy[zs]=this.yy[zs]);xi.setInput(Et,Ma.yy),Ma.yy.lexer=xi,Ma.yy.parser=this,typeof xi.yylloc>"u"&&(xi.yylloc={});var ao=xi.yylloc;Qe.push(ao);var Tr=xi.options&&xi.options.ranges;typeof Ma.yy.parseError=="function"?this.parseError=Ma.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Fn(){var Pa;return Pa=xt.pop()||xi.lex()||yt,typeof Pa!="number"&&(Pa instanceof Array&&(xt=Pa,Pa=xt.pop()),Pa=Gt.symbols_[Pa]||Pa),Pa}for(var qn,Un,At,wt,on={},fn,An,oo,jo;;){if(Un=ln[ln.length-1],this.defaultActions[Un]?At=this.defaultActions[Un]:((qn===null||typeof qn>"u")&&(qn=Fn()),At=Dt[Un]&&Dt[Un][qn]),typeof At>"u"||!At.length||!At[0]){var $o="";jo=[];for(fn in Dt[Un])this.terminals_[fn]&&fn>zr&&jo.push("'"+this.terminals_[fn]+"'");xi.showPosition?$o="Parse error on line "+(On+1)+`: +`+xi.showPosition()+` +Expecting `+jo.join(", ")+", got '"+(this.terminals_[qn]||qn)+"'":$o="Parse error on line "+(On+1)+": Unexpected "+(qn==yt?"end of input":"'"+(this.terminals_[qn]||qn)+"'"),this.parseError($o,{text:xi.match,token:this.terminals_[qn]||qn,line:xi.yylineno,loc:ao,expected:jo})}if(At[0]instanceof Array&&At.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Un+", token: "+qn);switch(At[0]){case 1:ln.push(qn),Pt.push(xi.yytext),Qe.push(xi.yylloc),ln.push(At[1]),qn=null,ht=xi.yyleng,kt=xi.yytext,On=xi.yylineno,ao=xi.yylloc;break;case 2:if(An=this.productions_[At[1]][1],on.$=Pt[Pt.length-An],on._$={first_line:Qe[Qe.length-(An||1)].first_line,last_line:Qe[Qe.length-1].last_line,first_column:Qe[Qe.length-(An||1)].first_column,last_column:Qe[Qe.length-1].last_column},Tr&&(on._$.range=[Qe[Qe.length-(An||1)].range[0],Qe[Qe.length-1].range[1]]),wt=this.performAction.apply(on,[kt,ht,On,Ma.yy,At[1],Pt,Qe].concat(ji)),typeof wt<"u")return wt;An&&(ln=ln.slice(0,-1*An*2),Pt=Pt.slice(0,-1*An),Qe=Qe.slice(0,-1*An)),ln.push(this.productions_[At[1]][0]),Pt.push(on.$),Qe.push(on._$),oo=Dt[ln[ln.length-2]][ln[ln.length-1]],ln.push(oo);break;case 3:return!0}}return!0}},Ne=function(){var _t={EOF:1,parseError:function(Gt,ln){if(this.yy.parser)this.yy.parser.parseError(Gt,ln);else throw new Error(Gt)},setInput:function(Et,Gt){return this.yy=Gt||this.yy||{},this._input=Et,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Et=this._input[0];this.yytext+=Et,this.yyleng++,this.offset++,this.match+=Et,this.matched+=Et;var Gt=Et.match(/(?:\r\n?|\n).*/g);return Gt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Et},unput:function(Et){var Gt=Et.length,ln=Et.split(/(?:\r\n?|\n)/g);this._input=Et+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Gt),this.offset-=Gt;var xt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ln.length-1&&(this.yylineno-=ln.length-1);var Pt=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ln?(ln.length===xt.length?this.yylloc.first_column:0)+xt[xt.length-ln.length].length-ln[0].length:this.yylloc.first_column-Gt},this.options.ranges&&(this.yylloc.range=[Pt[0],Pt[0]+this.yyleng-Gt]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Et){this.unput(this.match.slice(Et))},pastInput:function(){var Et=this.matched.substr(0,this.matched.length-this.match.length);return(Et.length>20?"...":"")+Et.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Et=this.match;return Et.length<20&&(Et+=this._input.substr(0,20-Et.length)),(Et.substr(0,20)+(Et.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Et=this.pastInput(),Gt=new Array(Et.length+1).join("-");return Et+this.upcomingInput()+` +`+Gt+"^"},test_match:function(Et,Gt){var ln,xt,Pt;if(this.options.backtrack_lexer&&(Pt={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Pt.yylloc.range=this.yylloc.range.slice(0))),xt=Et[0].match(/(?:\r\n?|\n).*/g),xt&&(this.yylineno+=xt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:xt?xt[xt.length-1].length-xt[xt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Et[0].length},this.yytext+=Et[0],this.match+=Et[0],this.matches=Et,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Et[0].length),this.matched+=Et[0],ln=this.performAction.call(this,this.yy,this,Gt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ln)return ln;if(this._backtrack){for(var Qe in Pt)this[Qe]=Pt[Qe];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Et,Gt,ln,xt;this._more||(this.yytext="",this.match="");for(var Pt=this._currentRules(),Qe=0;QeGt[0].length)){if(Gt=ln,xt=Qe,this.options.backtrack_lexer){if(Et=this.test_match(ln,Pt[Qe]),Et!==!1)return Et;if(this._backtrack){Gt=!1;continue}else return!1}else if(!this.options.flex)break}return Gt?(Et=this.test_match(Gt,Pt[xt]),Et!==!1?Et:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Gt=this.next();return Gt||this.lex()},begin:function(Gt){this.conditionStack.push(Gt)},popState:function(){var Gt=this.conditionStack.length-1;return Gt>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Gt){return Gt=this.conditionStack.length-1-Math.abs(Gt||0),Gt>=0?this.conditionStack[Gt]:"INITIAL"},pushState:function(Gt){this.begin(Gt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Gt,ln,xt,Pt){switch(xt){case 0:break;case 1:break;case 2:return 32;case 3:break;case 4:return this.begin("title"),13;case 5:return this.popState(),"title_value";case 6:return this.begin("acc_title"),15;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),17;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 25;case 14:return 27;case 15:return 26;case 16:return 28;case 17:return 29;case 18:return 30;case 19:return 31;case 20:this.begin("md_string");break;case 21:return"MD_STR";case 22:this.popState();break;case 23:this.begin("string");break;case 24:this.popState();break;case 25:return"STR";case 26:return this.begin("point_start"),22;case 27:return this.begin("point_x"),23;case 28:this.popState();break;case 29:this.popState(),this.begin("point_y");break;case 30:return this.popState(),24;case 31:return 6;case 32:return 43;case 33:return"COLON";case 34:return 45;case 35:return 44;case 36:return 46;case 37:return 46;case 38:return 47;case 39:return 49;case 40:return 50;case 41:return 48;case 42:return 41;case 43:return 51;case 44:return 42;case 45:return 5;case 46:return 33;case 47:return 40;case 48:return 34}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\s*:\s*\[\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?:\s*\] *)/i,/^(?:\s*,\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s)/i,/^(?:;)/i,/^(?:[!"#$%&'*+,-.`?\\_/])/i,/^(?:$)/i],conditions:{point_y:{rules:[30],inclusive:!1},point_x:{rules:[29],inclusive:!1},point_start:{rules:[27,28],inclusive:!1},acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},title:{rules:[5],inclusive:!1},md_string:{rules:[21,22],inclusive:!1},string:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,23,26,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],inclusive:!0}}};return _t}();Ft.lexer=Ne;function gn(){this.yy={}}return gn.prototype=Ft,Ft.Parser=gn,new gn}();fve.parser=fve;const Tnn=fve,Pp=f2e();class Cnn{constructor(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){var s,u,d,p,v,b,y,T,_,A,P,R,F,j,K,ee,ie,oe;return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:((s=sh.quadrantChart)==null?void 0:s.chartWidth)||500,chartWidth:((u=sh.quadrantChart)==null?void 0:u.chartHeight)||500,titlePadding:((d=sh.quadrantChart)==null?void 0:d.titlePadding)||10,titleFontSize:((p=sh.quadrantChart)==null?void 0:p.titleFontSize)||20,quadrantPadding:((v=sh.quadrantChart)==null?void 0:v.quadrantPadding)||5,xAxisLabelPadding:((b=sh.quadrantChart)==null?void 0:b.xAxisLabelPadding)||5,yAxisLabelPadding:((y=sh.quadrantChart)==null?void 0:y.yAxisLabelPadding)||5,xAxisLabelFontSize:((T=sh.quadrantChart)==null?void 0:T.xAxisLabelFontSize)||16,yAxisLabelFontSize:((_=sh.quadrantChart)==null?void 0:_.yAxisLabelFontSize)||16,quadrantLabelFontSize:((A=sh.quadrantChart)==null?void 0:A.quadrantLabelFontSize)||16,quadrantTextTopPadding:((P=sh.quadrantChart)==null?void 0:P.quadrantTextTopPadding)||5,pointTextPadding:((R=sh.quadrantChart)==null?void 0:R.pointTextPadding)||5,pointLabelFontSize:((F=sh.quadrantChart)==null?void 0:F.pointLabelFontSize)||12,pointRadius:((j=sh.quadrantChart)==null?void 0:j.pointRadius)||5,xAxisPosition:((K=sh.quadrantChart)==null?void 0:K.xAxisPosition)||"top",yAxisPosition:((ee=sh.quadrantChart)==null?void 0:ee.yAxisPosition)||"left",quadrantInternalBorderStrokeWidth:((ie=sh.quadrantChart)==null?void 0:ie.quadrantInternalBorderStrokeWidth)||1,quadrantExternalBorderStrokeWidth:((oe=sh.quadrantChart)==null?void 0:oe.quadrantExternalBorderStrokeWidth)||2}}getDefaultThemeConfig(){return{quadrant1Fill:Pp.quadrant1Fill,quadrant2Fill:Pp.quadrant2Fill,quadrant3Fill:Pp.quadrant3Fill,quadrant4Fill:Pp.quadrant4Fill,quadrant1TextFill:Pp.quadrant1TextFill,quadrant2TextFill:Pp.quadrant2TextFill,quadrant3TextFill:Pp.quadrant3TextFill,quadrant4TextFill:Pp.quadrant4TextFill,quadrantPointFill:Pp.quadrantPointFill,quadrantPointTextFill:Pp.quadrantPointTextFill,quadrantXAxisTextFill:Pp.quadrantXAxisTextFill,quadrantYAxisTextFill:Pp.quadrantYAxisTextFill,quadrantTitleFill:Pp.quadrantTitleFill,quadrantInternalBorderStrokeFill:Pp.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:Pp.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),Xe.info("clear called")}setData(s){this.data={...this.data,...s}}addPoints(s){this.data.points=[...s,...this.data.points]}setConfig(s){Xe.trace("setConfig called with: ",s),this.config={...this.config,...s}}setThemeConfig(s){Xe.trace("setThemeConfig called with: ",s),this.themeConfig={...this.themeConfig,...s}}calculateSpace(s,u,d,p){const v=this.config.xAxisLabelPadding*2+this.config.xAxisLabelFontSize,b={top:s==="top"&&u?v:0,bottom:s==="bottom"&&u?v:0},y=this.config.yAxisLabelPadding*2+this.config.yAxisLabelFontSize,T={left:this.config.yAxisPosition==="left"&&d?y:0,right:this.config.yAxisPosition==="right"&&d?y:0},_=this.config.titleFontSize+this.config.titlePadding*2,A={top:p?_:0},P=this.config.quadrantPadding+T.left,R=this.config.quadrantPadding+b.top+A.top,F=this.config.chartWidth-this.config.quadrantPadding*2-T.left-T.right,j=this.config.chartHeight-this.config.quadrantPadding*2-b.top-b.bottom-A.top,K=F/2,ee=j/2;return{xAxisSpace:b,yAxisSpace:T,titleSpace:A,quadrantSpace:{quadrantLeft:P,quadrantTop:R,quadrantWidth:F,quadrantHalfWidth:K,quadrantHeight:j,quadrantHalfHeight:ee}}}getAxisLabels(s,u,d,p){const{quadrantSpace:v,titleSpace:b}=p,{quadrantHalfHeight:y,quadrantHeight:T,quadrantLeft:_,quadrantHalfWidth:A,quadrantTop:P,quadrantWidth:R}=v,F=!!this.data.xAxisRightText,j=!!this.data.yAxisTopText,K=[];return this.data.xAxisLeftText&&u&&K.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:_+(F?A/2:0),y:s==="top"?this.config.xAxisLabelPadding+b.top:this.config.xAxisLabelPadding+P+T+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:F?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&u&&K.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:_+A+(F?A/2:0),y:s==="top"?this.config.xAxisLabelPadding+b.top:this.config.xAxisLabelPadding+P+T+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:F?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&d&&K.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+_+R+this.config.quadrantPadding,y:P+T-(j?y/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:j?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&d&&K.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+_+R+this.config.quadrantPadding,y:P+y-(j?y/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:j?"center":"left",horizontalPos:"top",rotation:-90}),K}getQuadrants(s){const{quadrantSpace:u}=s,{quadrantHalfHeight:d,quadrantLeft:p,quadrantHalfWidth:v,quadrantTop:b}=u,y=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:p+v,y:b,width:v,height:d,fill:this.themeConfig.quadrant1Fill},{text:{text:this.data.quadrant2Text,fill:this.themeConfig.quadrant2TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:p,y:b,width:v,height:d,fill:this.themeConfig.quadrant2Fill},{text:{text:this.data.quadrant3Text,fill:this.themeConfig.quadrant3TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:p,y:b+d,width:v,height:d,fill:this.themeConfig.quadrant3Fill},{text:{text:this.data.quadrant4Text,fill:this.themeConfig.quadrant4TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:p+v,y:b+d,width:v,height:d,fill:this.themeConfig.quadrant4Fill}];for(const T of y)T.text.x=T.x+T.width/2,this.data.points.length===0?(T.text.y=T.y+T.height/2,T.text.horizontalPos="middle"):(T.text.y=T.y+this.config.quadrantTextTopPadding,T.text.horizontalPos="top");return y}getQuadrantPoints(s){const{quadrantSpace:u}=s,{quadrantHeight:d,quadrantLeft:p,quadrantTop:v,quadrantWidth:b}=u,y=sD().domain([0,1]).range([p,b+p]),T=sD().domain([0,1]).range([d+v,v]);return this.data.points.map(A=>({x:y(A.x),y:T(A.y),fill:this.themeConfig.quadrantPointFill,radius:this.config.pointRadius,text:{text:A.text,fill:this.themeConfig.quadrantPointTextFill,x:y(A.x),y:T(A.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0}}))}getBorders(s){const u=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:d}=s,{quadrantHalfHeight:p,quadrantHeight:v,quadrantLeft:b,quadrantHalfWidth:y,quadrantTop:T,quadrantWidth:_}=d;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b-u,y1:T,x2:b+_+u,y2:T},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b+_,y1:T+u,x2:b+_,y2:T+v-u},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b-u,y1:T+v,x2:b+_+u,y2:T+v},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b,y1:T+u,x2:b,y2:T+v-u},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:b+y,y1:T+u,x2:b+y,y2:T+v-u},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:b+u,y1:T+p,x2:b+_-u,y2:T+p}]}getTitle(s){if(s)return{text:this.data.titleText,fill:this.themeConfig.quadrantTitleFill,fontSize:this.config.titleFontSize,horizontalPos:"top",verticalPos:"center",rotation:0,y:this.config.titlePadding,x:this.config.chartWidth/2}}build(){const s=this.config.showXAxis&&!!(this.data.xAxisLeftText||this.data.xAxisRightText),u=this.config.showYAxis&&!!(this.data.yAxisTopText||this.data.yAxisBottomText),d=this.config.showTitle&&!!this.data.titleText,p=this.data.points.length>0?"bottom":this.config.xAxisPosition,v=this.calculateSpace(p,s,u,d);return{points:this.getQuadrantPoints(v),quadrants:this.getQuadrants(v),axisLabels:this.getAxisLabels(p,s,u,v),borderLines:this.getBorders(v),title:this.getTitle(d)}}}const Snn=qt();function U7(i){return Yf(i.trim(),Snn)}const Rg=new Cnn;function _nn(i){Rg.setData({quadrant1Text:U7(i.text)})}function Ann(i){Rg.setData({quadrant2Text:U7(i.text)})}function Lnn(i){Rg.setData({quadrant3Text:U7(i.text)})}function Mnn(i){Rg.setData({quadrant4Text:U7(i.text)})}function Dnn(i){Rg.setData({xAxisLeftText:U7(i.text)})}function Inn(i){Rg.setData({xAxisRightText:U7(i.text)})}function Onn(i){Rg.setData({yAxisTopText:U7(i.text)})}function Nnn(i){Rg.setData({yAxisBottomText:U7(i.text)})}function Pnn(i,s,u){Rg.addPoints([{x:s,y:u,text:U7(i.text)}])}function Bnn(i){Rg.setConfig({chartWidth:i})}function Fnn(i){Rg.setConfig({chartHeight:i})}function Rnn(){const i=qt(),{themeVariables:s,quadrantChart:u}=i;return u&&Rg.setConfig(u),Rg.setThemeConfig({quadrant1Fill:s.quadrant1Fill,quadrant2Fill:s.quadrant2Fill,quadrant3Fill:s.quadrant3Fill,quadrant4Fill:s.quadrant4Fill,quadrant1TextFill:s.quadrant1TextFill,quadrant2TextFill:s.quadrant2TextFill,quadrant3TextFill:s.quadrant3TextFill,quadrant4TextFill:s.quadrant4TextFill,quadrantPointFill:s.quadrantPointFill,quadrantPointTextFill:s.quadrantPointTextFill,quadrantXAxisTextFill:s.quadrantXAxisTextFill,quadrantYAxisTextFill:s.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:s.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:s.quadrantInternalBorderStrokeFill,quadrantTitleFill:s.quadrantTitleFill}),Rg.setData({titleText:Ap()}),Rg.build()}const jnn=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Tnn,db:{setWidth:Bnn,setHeight:Fnn,setQuadrant1Text:_nn,setQuadrant2Text:Ann,setQuadrant3Text:Lnn,setQuadrant4Text:Mnn,setXAxisLeftText:Dnn,setXAxisRightText:Inn,setYAxisTopText:Onn,setYAxisBottomText:Nnn,addPoint:Pnn,getQuadrantData:Rnn,clear:function(){Rg.clear(),Pg()},setAccTitle:Bg,getAccTitle:Cp,setDiagramTitle:cm,getDiagramTitle:Ap,getAccDescription:_p,setAccDescription:Sp},renderer:{draw:(i,s,u,d)=>{var de,X,ge;function p(W){return W==="top"?"hanging":"middle"}function v(W){return W==="left"?"start":"middle"}function b(W){return`translate(${W.x}, ${W.y}) rotate(${W.rotation||0})`}const y=qt();Xe.debug(`Rendering quadrant chart +`+i);const T=y.securityLevel;let _;T==="sandbox"&&(_=Ir("#i"+s));const P=Ir(T==="sandbox"?_.nodes()[0].contentDocument.body:"body").select(`[id="${s}"]`),R=P.append("g").attr("class","main"),F=((de=y.quadrantChart)==null?void 0:de.chartWidth)||500,j=((X=y.quadrantChart)==null?void 0:X.chartHeight)||500;Ng(P,j,F,((ge=y.quadrantChart)==null?void 0:ge.useMaxWidth)||!0),P.attr("viewBox","0 0 "+F+" "+j),d.db.setHeight(j),d.db.setWidth(F);const K=d.db.getQuadrantData(),ee=R.append("g").attr("class","quadrants"),ie=R.append("g").attr("class","border"),oe=R.append("g").attr("class","data-points"),pe=R.append("g").attr("class","labels"),be=R.append("g").attr("class","title");K.title&&be.append("text").attr("x",0).attr("y",0).attr("fill",K.title.fill).attr("font-size",K.title.fontSize).attr("dominant-baseline",p(K.title.horizontalPos)).attr("text-anchor",v(K.title.verticalPos)).attr("transform",b(K.title)).text(K.title.text),K.borderLines&&ie.selectAll("line").data(K.borderLines).enter().append("line").attr("x1",W=>W.x1).attr("y1",W=>W.y1).attr("x2",W=>W.x2).attr("y2",W=>W.y2).style("stroke",W=>W.strokeFill).style("stroke-width",W=>W.strokeWidth);const ae=ee.selectAll("g.quadrant").data(K.quadrants).enter().append("g").attr("class","quadrant");ae.append("rect").attr("x",W=>W.x).attr("y",W=>W.y).attr("width",W=>W.width).attr("height",W=>W.height).attr("fill",W=>W.fill),ae.append("text").attr("x",0).attr("y",0).attr("fill",W=>W.text.fill).attr("font-size",W=>W.text.fontSize).attr("dominant-baseline",W=>p(W.text.horizontalPos)).attr("text-anchor",W=>v(W.text.verticalPos)).attr("transform",W=>b(W.text)).text(W=>W.text.text),pe.selectAll("g.label").data(K.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text(W=>W.text).attr("fill",W=>W.fill).attr("font-size",W=>W.fontSize).attr("dominant-baseline",W=>p(W.horizontalPos)).attr("text-anchor",W=>v(W.verticalPos)).attr("transform",W=>b(W));const se=oe.selectAll("g.data-point").data(K.points).enter().append("g").attr("class","data-point");se.append("circle").attr("cx",W=>W.x).attr("cy",W=>W.y).attr("r",W=>W.radius).attr("fill",W=>W.fill),se.append("text").attr("x",0).attr("y",0).text(W=>W.text.text).attr("fill",W=>W.text.fill).attr("font-size",W=>W.text.fontSize).attr("dominant-baseline",W=>p(W.text.horizontalPos)).attr("text-anchor",W=>v(W.text.verticalPos)).attr("transform",W=>b(W.text))}},styles:()=>""}},Symbol.toStringTag,{value:"Module"}));var dve=function(){var i=function(Pe,je,Ie,Se){for(Ie=Ie||{},Se=Pe.length;Se--;Ie[Pe[Se]]=je);return Ie},s=[1,10,12,14,16,18,19,21,23],u=[2,6],d=[1,3],p=[1,5],v=[1,6],b=[1,7],y=[1,5,10,12,14,16,18,19,21,23,34,35,36],T=[1,25],_=[1,26],A=[1,28],P=[1,29],R=[1,30],F=[1,31],j=[1,32],K=[1,33],ee=[1,34],ie=[1,35],oe=[1,36],pe=[1,37],be=[1,43],ae=[1,42],ne=[1,47],se=[1,50],de=[1,10,12,14,16,18,19,21,23,34,35,36],X=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],ge=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],W=[1,64],xe={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:function(je,Ie,Se,Ce,ke,Ke,Ft){var Ne=Ke.length-1;switch(ke){case 5:Ce.setOrientation(Ke[Ne]);break;case 9:Ce.setDiagramTitle(Ke[Ne].text.trim());break;case 12:Ce.setLineData({text:"",type:"text"},Ke[Ne]);break;case 13:Ce.setLineData(Ke[Ne-1],Ke[Ne]);break;case 14:Ce.setBarData({text:"",type:"text"},Ke[Ne]);break;case 15:Ce.setBarData(Ke[Ne-1],Ke[Ne]);break;case 16:this.$=Ke[Ne].trim(),Ce.setAccTitle(this.$);break;case 17:case 18:this.$=Ke[Ne].trim(),Ce.setAccDescription(this.$);break;case 19:this.$=Ke[Ne-1];break;case 20:this.$=[Number(Ke[Ne-2]),...Ke[Ne]];break;case 21:this.$=[Number(Ke[Ne])];break;case 22:Ce.setXAxisTitle(Ke[Ne]);break;case 23:Ce.setXAxisTitle(Ke[Ne-1]);break;case 24:Ce.setXAxisTitle({type:"text",text:""});break;case 25:Ce.setXAxisBand(Ke[Ne]);break;case 26:Ce.setXAxisRangeData(Number(Ke[Ne-2]),Number(Ke[Ne]));break;case 27:this.$=Ke[Ne-1];break;case 28:this.$=[Ke[Ne-2],...Ke[Ne]];break;case 29:this.$=[Ke[Ne]];break;case 30:Ce.setYAxisTitle(Ke[Ne]);break;case 31:Ce.setYAxisTitle(Ke[Ne-1]);break;case 32:Ce.setYAxisTitle({type:"text",text:""});break;case 33:Ce.setYAxisRangeData(Number(Ke[Ne-2]),Number(Ke[Ne]));break;case 37:this.$={text:Ke[Ne],type:"text"};break;case 38:this.$={text:Ke[Ne],type:"text"};break;case 39:this.$={text:Ke[Ne],type:"markdown"};break;case 40:this.$=Ke[Ne];break;case 41:this.$=Ke[Ne-1]+""+Ke[Ne];break}},table:[i(s,u,{3:1,4:2,7:4,5:d,34:p,35:v,36:b}),{1:[3]},i(s,u,{4:2,7:4,3:8,5:d,34:p,35:v,36:b}),i(s,u,{4:2,7:4,6:9,3:10,5:d,8:[1,11],34:p,35:v,36:b}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},i(y,[2,34]),i(y,[2,35]),i(y,[2,36]),{1:[2,1]},i(s,u,{4:2,7:4,3:21,5:d,34:p,35:v,36:b}),{1:[2,3]},i(y,[2,5]),i(s,[2,7],{4:22,34:p,35:v,36:b}),{11:23,37:24,38:T,39:_,40:27,41:A,42:P,43:R,44:F,45:j,46:K,47:ee,48:ie,49:oe,50:pe},{11:39,13:38,24:be,27:ae,29:40,30:41,37:24,38:T,39:_,40:27,41:A,42:P,43:R,44:F,45:j,46:K,47:ee,48:ie,49:oe,50:pe},{11:45,15:44,27:ne,33:46,37:24,38:T,39:_,40:27,41:A,42:P,43:R,44:F,45:j,46:K,47:ee,48:ie,49:oe,50:pe},{11:49,17:48,24:se,37:24,38:T,39:_,40:27,41:A,42:P,43:R,44:F,45:j,46:K,47:ee,48:ie,49:oe,50:pe},{11:52,17:51,24:se,37:24,38:T,39:_,40:27,41:A,42:P,43:R,44:F,45:j,46:K,47:ee,48:ie,49:oe,50:pe},{20:[1,53]},{22:[1,54]},i(de,[2,18]),{1:[2,2]},i(de,[2,8]),i(de,[2,9]),i(X,[2,37],{40:55,41:A,42:P,43:R,44:F,45:j,46:K,47:ee,48:ie,49:oe,50:pe}),i(X,[2,38]),i(X,[2,39]),i(ge,[2,40]),i(ge,[2,42]),i(ge,[2,43]),i(ge,[2,44]),i(ge,[2,45]),i(ge,[2,46]),i(ge,[2,47]),i(ge,[2,48]),i(ge,[2,49]),i(ge,[2,50]),i(ge,[2,51]),i(de,[2,10]),i(de,[2,22],{30:41,29:56,24:be,27:ae}),i(de,[2,24]),i(de,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:T,39:_,40:27,41:A,42:P,43:R,44:F,45:j,46:K,47:ee,48:ie,49:oe,50:pe},i(de,[2,11]),i(de,[2,30],{33:60,27:ne}),i(de,[2,32]),{31:[1,61]},i(de,[2,12]),{17:62,24:se},{25:63,27:W},i(de,[2,14]),{17:65,24:se},i(de,[2,16]),i(de,[2,17]),i(ge,[2,41]),i(de,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},i(de,[2,31]),{27:[1,69]},i(de,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},i(de,[2,15]),i(de,[2,26]),i(de,[2,27]),{11:59,32:72,37:24,38:T,39:_,40:27,41:A,42:P,43:R,44:F,45:j,46:K,47:ee,48:ie,49:oe,50:pe},i(de,[2,33]),i(de,[2,19]),{25:73,27:W},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:function(je,Ie){if(Ie.recoverable)this.trace(je);else{var Se=new Error(je);throw Se.hash=Ie,Se}},parse:function(je){var Ie=this,Se=[0],Ce=[],ke=[null],Ke=[],Ft=this.table,Ne="",gn=0,_t=0,Et=2,Gt=1,ln=Ke.slice.call(arguments,1),xt=Object.create(this.lexer),Pt={yy:{}};for(var Qe in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Qe)&&(Pt.yy[Qe]=this.yy[Qe]);xt.setInput(je,Pt.yy),Pt.yy.lexer=xt,Pt.yy.parser=this,typeof xt.yylloc>"u"&&(xt.yylloc={});var Dt=xt.yylloc;Ke.push(Dt);var kt=xt.options&&xt.options.ranges;typeof Pt.yy.parseError=="function"?this.parseError=Pt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function On(){var qn;return qn=Ce.pop()||xt.lex()||Gt,typeof qn!="number"&&(qn instanceof Array&&(Ce=qn,qn=Ce.pop()),qn=Ie.symbols_[qn]||qn),qn}for(var ht,zr,yt,ji,xi={},Ma,zs,ao,Tr;;){if(zr=Se[Se.length-1],this.defaultActions[zr]?yt=this.defaultActions[zr]:((ht===null||typeof ht>"u")&&(ht=On()),yt=Ft[zr]&&Ft[zr][ht]),typeof yt>"u"||!yt.length||!yt[0]){var Fn="";Tr=[];for(Ma in Ft[zr])this.terminals_[Ma]&&Ma>Et&&Tr.push("'"+this.terminals_[Ma]+"'");xt.showPosition?Fn="Parse error on line "+(gn+1)+`: +`+xt.showPosition()+` +Expecting `+Tr.join(", ")+", got '"+(this.terminals_[ht]||ht)+"'":Fn="Parse error on line "+(gn+1)+": Unexpected "+(ht==Gt?"end of input":"'"+(this.terminals_[ht]||ht)+"'"),this.parseError(Fn,{text:xt.match,token:this.terminals_[ht]||ht,line:xt.yylineno,loc:Dt,expected:Tr})}if(yt[0]instanceof Array&&yt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+zr+", token: "+ht);switch(yt[0]){case 1:Se.push(ht),ke.push(xt.yytext),Ke.push(xt.yylloc),Se.push(yt[1]),ht=null,_t=xt.yyleng,Ne=xt.yytext,gn=xt.yylineno,Dt=xt.yylloc;break;case 2:if(zs=this.productions_[yt[1]][1],xi.$=ke[ke.length-zs],xi._$={first_line:Ke[Ke.length-(zs||1)].first_line,last_line:Ke[Ke.length-1].last_line,first_column:Ke[Ke.length-(zs||1)].first_column,last_column:Ke[Ke.length-1].last_column},kt&&(xi._$.range=[Ke[Ke.length-(zs||1)].range[0],Ke[Ke.length-1].range[1]]),ji=this.performAction.apply(xi,[Ne,_t,gn,Pt.yy,yt[1],ke,Ke].concat(ln)),typeof ji<"u")return ji;zs&&(Se=Se.slice(0,-1*zs*2),ke=ke.slice(0,-1*zs),Ke=Ke.slice(0,-1*zs)),Se.push(this.productions_[yt[1]][0]),ke.push(xi.$),Ke.push(xi._$),ao=Ft[Se[Se.length-2]][Se[Se.length-1]],Se.push(ao);break;case 3:return!0}}return!0}},U=function(){var Pe={EOF:1,parseError:function(Ie,Se){if(this.yy.parser)this.yy.parser.parseError(Ie,Se);else throw new Error(Ie)},setInput:function(je,Ie){return this.yy=Ie||this.yy||{},this._input=je,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var je=this._input[0];this.yytext+=je,this.yyleng++,this.offset++,this.match+=je,this.matched+=je;var Ie=je.match(/(?:\r\n?|\n).*/g);return Ie?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),je},unput:function(je){var Ie=je.length,Se=je.split(/(?:\r\n?|\n)/g);this._input=je+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ie),this.offset-=Ie;var Ce=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Se.length-1&&(this.yylineno-=Se.length-1);var ke=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Se?(Se.length===Ce.length?this.yylloc.first_column:0)+Ce[Ce.length-Se.length].length-Se[0].length:this.yylloc.first_column-Ie},this.options.ranges&&(this.yylloc.range=[ke[0],ke[0]+this.yyleng-Ie]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(je){this.unput(this.match.slice(je))},pastInput:function(){var je=this.matched.substr(0,this.matched.length-this.match.length);return(je.length>20?"...":"")+je.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var je=this.match;return je.length<20&&(je+=this._input.substr(0,20-je.length)),(je.substr(0,20)+(je.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var je=this.pastInput(),Ie=new Array(je.length+1).join("-");return je+this.upcomingInput()+` +`+Ie+"^"},test_match:function(je,Ie){var Se,Ce,ke;if(this.options.backtrack_lexer&&(ke={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ke.yylloc.range=this.yylloc.range.slice(0))),Ce=je[0].match(/(?:\r\n?|\n).*/g),Ce&&(this.yylineno+=Ce.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Ce?Ce[Ce.length-1].length-Ce[Ce.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+je[0].length},this.yytext+=je[0],this.match+=je[0],this.matches=je,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(je[0].length),this.matched+=je[0],Se=this.performAction.call(this,this.yy,this,Ie,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Se)return Se;if(this._backtrack){for(var Ke in ke)this[Ke]=ke[Ke];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var je,Ie,Se,Ce;this._more||(this.yytext="",this.match="");for(var ke=this._currentRules(),Ke=0;KeIe[0].length)){if(Ie=Se,Ce=Ke,this.options.backtrack_lexer){if(je=this.test_match(Se,ke[Ke]),je!==!1)return je;if(this._backtrack){Ie=!1;continue}else return!1}else if(!this.options.flex)break}return Ie?(je=this.test_match(Ie,ke[Ce]),je!==!1?je:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Ie=this.next();return Ie||this.lex()},begin:function(Ie){this.conditionStack.push(Ie)},popState:function(){var Ie=this.conditionStack.length-1;return Ie>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Ie){return Ie=this.conditionStack.length-1-Math.abs(Ie||0),Ie>=0?this.conditionStack[Ie]:"INITIAL"},pushState:function(Ie){this.begin(Ie)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Ie,Se,Ce,ke){switch(Ce){case 0:break;case 1:break;case 2:return this.popState(),34;case 3:return this.popState(),34;case 4:return 34;case 5:break;case 6:return 10;case 7:return this.pushState("acc_title"),19;case 8:return this.popState(),"acc_title_value";case 9:return this.pushState("acc_descr"),21;case 10:return this.popState(),"acc_descr_value";case 11:this.pushState("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 5;case 15:return 8;case 16:return this.pushState("axis_data"),"X_AXIS";case 17:return this.pushState("axis_data"),"Y_AXIS";case 18:return this.pushState("axis_band_data"),24;case 19:return 31;case 20:return this.pushState("data"),16;case 21:return this.pushState("data"),18;case 22:return this.pushState("data_inner"),24;case 23:return 27;case 24:return this.popState(),26;case 25:this.popState();break;case 26:this.pushState("string");break;case 27:this.popState();break;case 28:return"STR";case 29:return 24;case 30:return 26;case 31:return 43;case 32:return"COLON";case 33:return 44;case 34:return 28;case 35:return 45;case 36:return 46;case 37:return 48;case 38:return 50;case 39:return 47;case 40:return 41;case 41:return 49;case 42:return 42;case 43:break;case 44:return 35;case 45:return 36}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:(\r?\n))/i,/^(?:(\r?\n))/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:\{)/i,/^(?:[^\}]*)/i,/^(?:xychart-beta\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\b)/i,/^(?:y-axis\b)/i,/^(?:\[)/i,/^(?:-->)/i,/^(?:line\b)/i,/^(?:bar\b)/i,/^(?:\[)/i,/^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i,/^(?:\])/i,/^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n\(\?:`))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s+)/i,/^(?:;)/i,/^(?:$)/i],conditions:{data_inner:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,23,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},data:{rules:[0,1,3,4,5,6,7,9,11,14,15,16,17,20,21,22,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_band_data:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_data:{rules:[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20,21,23,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[],inclusive:!1},md_string:{rules:[],inclusive:!1},string:{rules:[27,28],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0}}};return Pe}();xe.lexer=U;function Fe(){this.yy={}}return Fe.prototype=xe,xe.Parser=Fe,new Fe}();dve.parser=dve;const $nn=dve;function fGe(i){return i.type==="bar"}function dGe(i){return i.type==="band"}function $R(i){return i.type==="linear"}class gGe{constructor(s){this.parentGroup=s}getMaxDimension(s,u){if(!this.parentGroup)return{width:s.reduce((v,b)=>Math.max(b.length,v),0)*u,height:u};const d={width:0,height:0},p=this.parentGroup.append("g").attr("visibility","hidden").attr("font-size",u);for(const v of s){const b=RZt(p,1,v),y=b?b.width:v.length*u,T=b?b.height:u;d.width=Math.max(d.width,y),d.height=Math.max(d.height,T)}return p.remove(),d}}const pGe=.7,bGe=.2;class mGe{constructor(s,u,d,p){this.axisConfig=s,this.title=u,this.textDimensionCalculator=d,this.axisThemeConfig=p,this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left",this.showTitle=!1,this.showLabel=!1,this.showTick=!1,this.showAxisLine=!1,this.outerPadding=0,this.titleTextHeight=0,this.labelTextHeight=0,this.range=[0,10],this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left"}setRange(s){this.range=s,this.axisPosition==="left"||this.axisPosition==="right"?this.boundingRect.height=s[1]-s[0]:this.boundingRect.width=s[1]-s[0],this.recalculateScale()}getRange(){return[this.range[0]+this.outerPadding,this.range[1]-this.outerPadding]}setAxisPosition(s){this.axisPosition=s,this.setRange(this.range)}getTickDistance(){const s=this.getRange();return Math.abs(s[0]-s[1])/this.getTickValues().length}getAxisOuterPadding(){return this.outerPadding}getLabelDimension(){return this.textDimensionCalculator.getMaxDimension(this.getTickValues().map(s=>s.toString()),this.axisConfig.labelFontSize)}recalculateOuterPaddingToDrawBar(){pGe*this.getTickDistance()>this.outerPadding*2&&(this.outerPadding=Math.floor(pGe*this.getTickDistance()/2)),this.recalculateScale()}calculateSpaceIfDrawnHorizontally(s){let u=s.height;if(this.axisConfig.showAxisLine&&u>this.axisConfig.axisLineWidth&&(u-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){const d=this.getLabelDimension(),p=bGe*s.width;this.outerPadding=Math.min(d.width/2,p);const v=d.height+this.axisConfig.labelPadding*2;this.labelTextHeight=d.height,v<=u&&(u-=v,this.showLabel=!0)}if(this.axisConfig.showTick&&u>=this.axisConfig.tickLength&&(this.showTick=!0,u-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){const d=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),p=d.height+this.axisConfig.titlePadding*2;this.titleTextHeight=d.height,p<=u&&(u-=p,this.showTitle=!0)}this.boundingRect.width=s.width,this.boundingRect.height=s.height-u}calculateSpaceIfDrawnVertical(s){let u=s.width;if(this.axisConfig.showAxisLine&&u>this.axisConfig.axisLineWidth&&(u-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){const d=this.getLabelDimension(),p=bGe*s.height;this.outerPadding=Math.min(d.height/2,p);const v=d.width+this.axisConfig.labelPadding*2;v<=u&&(u-=v,this.showLabel=!0)}if(this.axisConfig.showTick&&u>=this.axisConfig.tickLength&&(this.showTick=!0,u-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){const d=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),p=d.height+this.axisConfig.titlePadding*2;this.titleTextHeight=d.height,p<=u&&(u-=p,this.showTitle=!0)}this.boundingRect.width=s.width-u,this.boundingRect.height=s.height}calculateSpace(s){return this.axisPosition==="left"||this.axisPosition==="right"?this.calculateSpaceIfDrawnVertical(s):this.calculateSpaceIfDrawnHorizontally(s),this.recalculateScale(),{width:this.boundingRect.width,height:this.boundingRect.height}}setBoundingBoxXY(s){this.boundingRect.x=s.x,this.boundingRect.y=s.y}getDrawableElementsForLeftAxis(){const s=[];if(this.showAxisLine){const u=this.boundingRect.x+this.boundingRect.width-this.axisConfig.axisLineWidth/2;s.push({type:"path",groupTexts:["left-axis","axisl-line"],data:[{path:`M ${u},${this.boundingRect.y} L ${u},${this.boundingRect.y+this.boundingRect.height} `,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&s.push({type:"text",groupTexts:["left-axis","label"],data:this.getTickValues().map(u=>({text:u.toString(),x:this.boundingRect.x+this.boundingRect.width-(this.showLabel?this.axisConfig.labelPadding:0)-(this.showTick?this.axisConfig.tickLength:0)-(this.showAxisLine?this.axisConfig.axisLineWidth:0),y:this.getScaleValue(u),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"middle",horizontalPos:"right"}))}),this.showTick){const u=this.boundingRect.x+this.boundingRect.width-(this.showAxisLine?this.axisConfig.axisLineWidth:0);s.push({type:"path",groupTexts:["left-axis","ticks"],data:this.getTickValues().map(d=>({path:`M ${u},${this.getScaleValue(d)} L ${u-this.axisConfig.tickLength},${this.getScaleValue(d)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&s.push({type:"text",groupTexts:["left-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.axisConfig.titlePadding,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:270,verticalPos:"top",horizontalPos:"center"}]}),s}getDrawableElementsForBottomAxis(){const s=[];if(this.showAxisLine){const u=this.boundingRect.y+this.axisConfig.axisLineWidth/2;s.push({type:"path",groupTexts:["bottom-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${u} L ${this.boundingRect.x+this.boundingRect.width},${u}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&s.push({type:"text",groupTexts:["bottom-axis","label"],data:this.getTickValues().map(u=>({text:u.toString(),x:this.getScaleValue(u),y:this.boundingRect.y+this.axisConfig.labelPadding+(this.showTick?this.axisConfig.tickLength:0)+(this.showAxisLine?this.axisConfig.axisLineWidth:0),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){const u=this.boundingRect.y+(this.showAxisLine?this.axisConfig.axisLineWidth:0);s.push({type:"path",groupTexts:["bottom-axis","ticks"],data:this.getTickValues().map(d=>({path:`M ${this.getScaleValue(d)},${u} L ${this.getScaleValue(d)},${u+this.axisConfig.tickLength}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&s.push({type:"text",groupTexts:["bottom-axis","title"],data:[{text:this.title,x:this.range[0]+(this.range[1]-this.range[0])/2,y:this.boundingRect.y+this.boundingRect.height-this.axisConfig.titlePadding-this.titleTextHeight,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),s}getDrawableElementsForTopAxis(){const s=[];if(this.showAxisLine){const u=this.boundingRect.y+this.boundingRect.height-this.axisConfig.axisLineWidth/2;s.push({type:"path",groupTexts:["top-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${u} L ${this.boundingRect.x+this.boundingRect.width},${u}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&s.push({type:"text",groupTexts:["top-axis","label"],data:this.getTickValues().map(u=>({text:u.toString(),x:this.getScaleValue(u),y:this.boundingRect.y+(this.showTitle?this.titleTextHeight+this.axisConfig.titlePadding*2:0)+this.axisConfig.labelPadding,fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){const u=this.boundingRect.y;s.push({type:"path",groupTexts:["top-axis","ticks"],data:this.getTickValues().map(d=>({path:`M ${this.getScaleValue(d)},${u+this.boundingRect.height-(this.showAxisLine?this.axisConfig.axisLineWidth:0)} L ${this.getScaleValue(d)},${u+this.boundingRect.height-this.axisConfig.tickLength-(this.showAxisLine?this.axisConfig.axisLineWidth:0)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&s.push({type:"text",groupTexts:["top-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.axisConfig.titlePadding,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),s}getDrawableElements(){if(this.axisPosition==="left")return this.getDrawableElementsForLeftAxis();if(this.axisPosition==="right")throw Error("Drawing of right axis is not implemented");return this.axisPosition==="bottom"?this.getDrawableElementsForBottomAxis():this.axisPosition==="top"?this.getDrawableElementsForTopAxis():[]}}class znn extends mGe{constructor(s,u,d,p,v){super(s,p,v,u),this.categories=d,this.scale=qpe().domain(this.categories).range(this.getRange())}setRange(s){super.setRange(s)}recalculateScale(){this.scale=qpe().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(.5),Xe.trace("BandAxis axis final categories, range: ",this.categories,this.getRange())}getTickValues(){return this.categories}getScaleValue(s){return this.scale(s)||this.getRange()[0]}}class qnn extends mGe{constructor(s,u,d,p,v){super(s,p,v,u),this.domain=d,this.scale=sD().domain(this.domain).range(this.getRange())}getTickValues(){return this.scale.ticks()}recalculateScale(){const s=[...this.domain];this.axisPosition==="left"&&s.reverse(),this.scale=sD().domain(s).range(this.getRange())}getScaleValue(s){return this.scale(s)}}function vGe(i,s,u,d){const p=new gGe(d);return dGe(i)?new znn(s,u,i.categories,i.title,p):new qnn(s,u,[i.min,i.max],i.title,p)}class Hnn{constructor(s,u,d,p){this.textDimensionCalculator=s,this.chartConfig=u,this.chartData=d,this.chartThemeConfig=p,this.boundingRect={x:0,y:0,width:0,height:0},this.showChartTitle=!1}setBoundingBoxXY(s){this.boundingRect.x=s.x,this.boundingRect.y=s.y}calculateSpace(s){const u=this.textDimensionCalculator.getMaxDimension([this.chartData.title],this.chartConfig.titleFontSize),d=Math.max(u.width,s.width),p=u.height+2*this.chartConfig.titlePadding;return u.width<=d&&u.height<=p&&this.chartConfig.showTitle&&this.chartData.title&&(this.boundingRect.width=d,this.boundingRect.height=p,this.showChartTitle=!0),{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){const s=[];return this.showChartTitle&&s.push({groupTexts:["chart-title"],type:"text",data:[{fontSize:this.chartConfig.titleFontSize,text:this.chartData.title,verticalPos:"middle",horizontalPos:"center",x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.chartThemeConfig.titleColor,rotation:0}]}),s}}function Vnn(i,s,u,d){const p=new gGe(d);return new Hnn(p,i,s,u)}class Unn{constructor(s,u,d,p,v){this.plotData=s,this.xAxis=u,this.yAxis=d,this.orientation=p,this.plotIndex=v}getDrawableElement(){const s=this.plotData.data.map(d=>[this.xAxis.getScaleValue(d[0]),this.yAxis.getScaleValue(d[1])]);let u;return this.orientation==="horizontal"?u=k7().y(d=>d[0]).x(d=>d[1])(s):u=k7().x(d=>d[0]).y(d=>d[1])(s),u?[{groupTexts:["plot",`line-plot-${this.plotIndex}`],type:"path",data:[{path:u,strokeFill:this.plotData.strokeFill,strokeWidth:this.plotData.strokeWidth}]}]:[]}}class Gnn{constructor(s,u,d,p,v,b){this.barData=s,this.boundingRect=u,this.xAxis=d,this.yAxis=p,this.orientation=v,this.plotIndex=b}getDrawableElement(){const s=this.barData.data.map(v=>[this.xAxis.getScaleValue(v[0]),this.yAxis.getScaleValue(v[1])]),u=.05,d=Math.min(this.xAxis.getAxisOuterPadding()*2,this.xAxis.getTickDistance())*(1-u),p=d/2;return this.orientation==="horizontal"?[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:s.map(v=>({x:this.boundingRect.x,y:v[0]-p,height:d,width:v[1]-this.boundingRect.x,fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]:[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:s.map(v=>({x:v[0]-p,y:v[1],width:d,height:this.boundingRect.y+this.boundingRect.height-v[1],fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]}}class Knn{constructor(s,u,d){this.chartConfig=s,this.chartData=u,this.chartThemeConfig=d,this.boundingRect={x:0,y:0,width:0,height:0}}setAxes(s,u){this.xAxis=s,this.yAxis=u}setBoundingBoxXY(s){this.boundingRect.x=s.x,this.boundingRect.y=s.y}calculateSpace(s){return this.boundingRect.width=s.width,this.boundingRect.height=s.height,{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){if(!(this.xAxis&&this.yAxis))throw Error("Axes must be passed to render Plots");const s=[];for(const[u,d]of this.chartData.plots.entries())switch(d.type){case"line":{const p=new Unn(d,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,u);s.push(...p.getDrawableElement())}break;case"bar":{const p=new Gnn(d,this.boundingRect,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,u);s.push(...p.getDrawableElement())}break}return s}}function Wnn(i,s,u){return new Knn(i,s,u)}class Ynn{constructor(s,u,d,p){this.chartConfig=s,this.chartData=u,this.componentStore={title:Vnn(s,u,d,p),plot:Wnn(s,u,d),xAxis:vGe(u.xAxis,s.xAxis,{titleColor:d.xAxisTitleColor,labelColor:d.xAxisLabelColor,tickColor:d.xAxisTickColor,axisLineColor:d.xAxisLineColor},p),yAxis:vGe(u.yAxis,s.yAxis,{titleColor:d.yAxisTitleColor,labelColor:d.yAxisLabelColor,tickColor:d.yAxisTickColor,axisLineColor:d.yAxisLineColor},p)}}calculateVerticalSpace(){let s=this.chartConfig.width,u=this.chartConfig.height,d=0,p=0,v=Math.floor(s*this.chartConfig.plotReservedSpacePercent/100),b=Math.floor(u*this.chartConfig.plotReservedSpacePercent/100),y=this.componentStore.plot.calculateSpace({width:v,height:b});s-=y.width,u-=y.height,y=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:u}),p=y.height,u-=y.height,this.componentStore.xAxis.setAxisPosition("bottom"),y=this.componentStore.xAxis.calculateSpace({width:s,height:u}),u-=y.height,this.componentStore.yAxis.setAxisPosition("left"),y=this.componentStore.yAxis.calculateSpace({width:s,height:u}),d=y.width,s-=y.width,s>0&&(v+=s,s=0),u>0&&(b+=u,u=0),this.componentStore.plot.calculateSpace({width:v,height:b}),this.componentStore.plot.setBoundingBoxXY({x:d,y:p}),this.componentStore.xAxis.setRange([d,d+v]),this.componentStore.xAxis.setBoundingBoxXY({x:d,y:p+b}),this.componentStore.yAxis.setRange([p,p+b]),this.componentStore.yAxis.setBoundingBoxXY({x:0,y:p}),this.chartData.plots.some(T=>fGe(T))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateHorizontalSpace(){let s=this.chartConfig.width,u=this.chartConfig.height,d=0,p=0,v=0,b=Math.floor(s*this.chartConfig.plotReservedSpacePercent/100),y=Math.floor(u*this.chartConfig.plotReservedSpacePercent/100),T=this.componentStore.plot.calculateSpace({width:b,height:y});s-=T.width,u-=T.height,T=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:u}),d=T.height,u-=T.height,this.componentStore.xAxis.setAxisPosition("left"),T=this.componentStore.xAxis.calculateSpace({width:s,height:u}),s-=T.width,p=T.width,this.componentStore.yAxis.setAxisPosition("top"),T=this.componentStore.yAxis.calculateSpace({width:s,height:u}),u-=T.height,v=d+T.height,s>0&&(b+=s,s=0),u>0&&(y+=u,u=0),this.componentStore.plot.calculateSpace({width:b,height:y}),this.componentStore.plot.setBoundingBoxXY({x:p,y:v}),this.componentStore.yAxis.setRange([p,p+b]),this.componentStore.yAxis.setBoundingBoxXY({x:p,y:d}),this.componentStore.xAxis.setRange([v,v+y]),this.componentStore.xAxis.setBoundingBoxXY({x:0,y:v}),this.chartData.plots.some(_=>fGe(_))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateSpace(){this.chartConfig.chartOrientation==="horizontal"?this.calculateHorizontalSpace():this.calculateVerticalSpace()}getDrawableElement(){this.calculateSpace();const s=[];this.componentStore.plot.setAxes(this.componentStore.xAxis,this.componentStore.yAxis);for(const u of Object.values(this.componentStore))s.push(...u.getDrawableElements());return s}}class Xnn{static build(s,u,d,p){return new Ynn(s,u,d,p).getDrawableElement()}}let zR=0,wGe,qR=xGe(),HR=yGe(),el=kGe(),gve=HR.plotColorPalette.split(",").map(i=>i.trim()),gJ=!1,pve=!1;function yGe(){const i=f2e(),s=Vh();return JF(i.xyChart,s.themeVariables.xyChart)}function xGe(){const i=Vh();return JF(sh.xyChart,i.xyChart)}function kGe(){return{yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]}}function bve(i){const s=Vh();return Yf(i.trim(),s)}function Qnn(i){wGe=i}function Jnn(i){i==="horizontal"?qR.chartOrientation="horizontal":qR.chartOrientation="vertical"}function Znn(i){el.xAxis.title=bve(i.text)}function EGe(i,s){el.xAxis={type:"linear",title:el.xAxis.title,min:i,max:s},gJ=!0}function ern(i){el.xAxis={type:"band",title:el.xAxis.title,categories:i.map(s=>bve(s.text))},gJ=!0}function trn(i){el.yAxis.title=bve(i.text)}function nrn(i,s){el.yAxis={type:"linear",title:el.yAxis.title,min:i,max:s},pve=!0}function rrn(i){const s=Math.min(...i),u=Math.max(...i),d=$R(el.yAxis)?el.yAxis.min:1/0,p=$R(el.yAxis)?el.yAxis.max:-1/0;el.yAxis={type:"linear",title:el.yAxis.title,min:Math.min(d,s),max:Math.max(p,u)}}function TGe(i){let s=[];if(i.length===0)return s;if(!gJ){const u=$R(el.xAxis)?el.xAxis.min:1/0,d=$R(el.xAxis)?el.xAxis.max:-1/0;EGe(Math.min(u,1),Math.max(d,i.length))}if(pve||rrn(i),dGe(el.xAxis)&&(s=el.xAxis.categories.map((u,d)=>[u,i[d]])),$R(el.xAxis)){const u=el.xAxis.min,d=el.xAxis.max,p=(d-u+1)/i.length,v=[];for(let b=u;b<=d;b+=p)v.push(`${b}`);s=v.map((b,y)=>[b,i[y]])}return s}function CGe(i){return gve[i===0?0:i%gve.length]}function irn(i,s){const u=TGe(s);el.plots.push({type:"line",strokeFill:CGe(zR),strokeWidth:2,data:u}),zR++}function srn(i,s){const u=TGe(s);el.plots.push({type:"bar",fill:CGe(zR),data:u}),zR++}function arn(){if(el.plots.length===0)throw Error("No Plot to render, please provide a plot with some data");return el.title=Ap(),Xnn.build(qR,el,HR,wGe)}function orn(){return HR}function crn(){return qR}const urn=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:$nn,db:{getDrawableElem:arn,clear:function(){Pg(),zR=0,qR=xGe(),el=kGe(),HR=yGe(),gve=HR.plotColorPalette.split(",").map(i=>i.trim()),gJ=!1,pve=!1},setAccTitle:Bg,getAccTitle:Cp,setDiagramTitle:cm,getDiagramTitle:Ap,getAccDescription:_p,setAccDescription:Sp,setOrientation:Jnn,setXAxisTitle:Znn,setXAxisRangeData:EGe,setXAxisBand:ern,setYAxisTitle:trn,setYAxisRangeData:nrn,setLineData:irn,setBarData:srn,setTmpSVGG:Qnn,getChartThemeConfig:orn,getChartConfig:crn},renderer:{draw:(i,s,u,d)=>{const p=d.db,v=p.getChartThemeConfig(),b=p.getChartConfig();function y(ee){return ee==="top"?"text-before-edge":"middle"}function T(ee){return ee==="left"?"start":ee==="right"?"end":"middle"}function _(ee){return`translate(${ee.x}, ${ee.y}) rotate(${ee.rotation||0})`}Xe.debug(`Rendering xychart chart +`+i);const A=rR(s),P=A.append("g").attr("class","main"),R=P.append("rect").attr("width",b.width).attr("height",b.height).attr("class","background");Ng(A,b.height,b.width,!0),A.attr("viewBox",`0 0 ${b.width} ${b.height}`),R.attr("fill",v.backgroundColor),p.setTmpSVGG(A.append("g").attr("class","mermaid-tmp-group"));const F=p.getDrawableElem(),j={};function K(ee){let ie=P,oe="";for(const[pe]of ee.entries()){let be=P;pe>0&&j[oe]&&(be=j[oe]),oe+=ee[pe],ie=j[oe],ie||(ie=j[oe]=be.append("g").attr("class",ee[pe]))}return ie}for(const ee of F){if(ee.data.length===0)continue;const ie=K(ee.groupTexts);switch(ee.type){case"rect":ie.selectAll("rect").data(ee.data).enter().append("rect").attr("x",oe=>oe.x).attr("y",oe=>oe.y).attr("width",oe=>oe.width).attr("height",oe=>oe.height).attr("fill",oe=>oe.fill).attr("stroke",oe=>oe.strokeFill).attr("stroke-width",oe=>oe.strokeWidth);break;case"text":ie.selectAll("text").data(ee.data).enter().append("text").attr("x",0).attr("y",0).attr("fill",oe=>oe.fill).attr("font-size",oe=>oe.fontSize).attr("dominant-baseline",oe=>y(oe.verticalPos)).attr("text-anchor",oe=>T(oe.horizontalPos)).attr("transform",oe=>_(oe)).text(oe=>oe.text);break;case"path":ie.selectAll("path").data(ee.data).enter().append("path").attr("d",oe=>oe.path).attr("fill",oe=>oe.fill?oe.fill:"none").attr("stroke",oe=>oe.strokeFill).attr("stroke-width",oe=>oe.strokeWidth);break}}}}}},Symbol.toStringTag,{value:"Module"}));var mve=function(){var i=function(_t,Et,Gt,ln){for(Gt=Gt||{},ln=_t.length;ln--;Gt[_t[ln]]=Et);return Gt},s=[1,3],u=[1,4],d=[1,5],p=[1,6],v=[5,6,8,9,11,13,31,32,33,34,35,36,44,62,63],b=[1,18],y=[2,7],T=[1,22],_=[1,23],A=[1,24],P=[1,25],R=[1,26],F=[1,27],j=[1,20],K=[1,28],ee=[1,29],ie=[62,63],oe=[5,8,9,11,13,31,32,33,34,35,36,44,51,53,62,63],pe=[1,47],be=[1,48],ae=[1,49],ne=[1,50],se=[1,51],de=[1,52],X=[1,53],ge=[53,54],W=[1,64],xe=[1,60],U=[1,61],Fe=[1,62],Pe=[1,63],je=[1,65],Ie=[1,69],Se=[1,70],Ce=[1,67],ke=[1,68],Ke=[5,8,9,11,13,31,32,33,34,35,36,44,62,63],Ft={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,requirementType:17,requirementName:18,STRUCT_START:19,requirementBody:20,ID:21,COLONSEP:22,id:23,TEXT:24,text:25,RISK:26,riskLevel:27,VERIFYMTHD:28,verifyType:29,STRUCT_STOP:30,REQUIREMENT:31,FUNCTIONAL_REQUIREMENT:32,INTERFACE_REQUIREMENT:33,PERFORMANCE_REQUIREMENT:34,PHYSICAL_REQUIREMENT:35,DESIGN_CONSTRAINT:36,LOW_RISK:37,MED_RISK:38,HIGH_RISK:39,VERIFY_ANALYSIS:40,VERIFY_DEMONSTRATION:41,VERIFY_INSPECTION:42,VERIFY_TEST:43,ELEMENT:44,elementName:45,elementBody:46,TYPE:47,type:48,DOCREF:49,ref:50,END_ARROW_L:51,relationship:52,LINE:53,END_ARROW_R:54,CONTAINS:55,COPIES:56,DERIVES:57,SATISFIES:58,VERIFIES:59,REFINES:60,TRACES:61,unqString:62,qString:63,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",19:"STRUCT_START",21:"ID",22:"COLONSEP",24:"TEXT",26:"RISK",28:"VERIFYMTHD",30:"STRUCT_STOP",31:"REQUIREMENT",32:"FUNCTIONAL_REQUIREMENT",33:"INTERFACE_REQUIREMENT",34:"PERFORMANCE_REQUIREMENT",35:"PHYSICAL_REQUIREMENT",36:"DESIGN_CONSTRAINT",37:"LOW_RISK",38:"MED_RISK",39:"HIGH_RISK",40:"VERIFY_ANALYSIS",41:"VERIFY_DEMONSTRATION",42:"VERIFY_INSPECTION",43:"VERIFY_TEST",44:"ELEMENT",47:"TYPE",49:"DOCREF",51:"END_ARROW_L",53:"LINE",54:"END_ARROW_R",55:"CONTAINS",56:"COPIES",57:"DERIVES",58:"SATISFIES",59:"VERIFIES",60:"REFINES",61:"TRACES",62:"unqString",63:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[14,5],[20,5],[20,5],[20,5],[20,5],[20,2],[20,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[27,1],[27,1],[27,1],[29,1],[29,1],[29,1],[29,1],[15,5],[46,5],[46,5],[46,2],[46,1],[16,5],[16,5],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[18,1],[18,1],[23,1],[23,1],[25,1],[25,1],[45,1],[45,1],[48,1],[48,1],[50,1],[50,1]],performAction:function(Et,Gt,ln,xt,Pt,Qe,Dt){var kt=Qe.length-1;switch(Pt){case 4:this.$=Qe[kt].trim(),xt.setAccTitle(this.$);break;case 5:case 6:this.$=Qe[kt].trim(),xt.setAccDescription(this.$);break;case 7:this.$=[];break;case 13:xt.addRequirement(Qe[kt-3],Qe[kt-4]);break;case 14:xt.setNewReqId(Qe[kt-2]);break;case 15:xt.setNewReqText(Qe[kt-2]);break;case 16:xt.setNewReqRisk(Qe[kt-2]);break;case 17:xt.setNewReqVerifyMethod(Qe[kt-2]);break;case 20:this.$=xt.RequirementType.REQUIREMENT;break;case 21:this.$=xt.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 22:this.$=xt.RequirementType.INTERFACE_REQUIREMENT;break;case 23:this.$=xt.RequirementType.PERFORMANCE_REQUIREMENT;break;case 24:this.$=xt.RequirementType.PHYSICAL_REQUIREMENT;break;case 25:this.$=xt.RequirementType.DESIGN_CONSTRAINT;break;case 26:this.$=xt.RiskLevel.LOW_RISK;break;case 27:this.$=xt.RiskLevel.MED_RISK;break;case 28:this.$=xt.RiskLevel.HIGH_RISK;break;case 29:this.$=xt.VerifyType.VERIFY_ANALYSIS;break;case 30:this.$=xt.VerifyType.VERIFY_DEMONSTRATION;break;case 31:this.$=xt.VerifyType.VERIFY_INSPECTION;break;case 32:this.$=xt.VerifyType.VERIFY_TEST;break;case 33:xt.addElement(Qe[kt-3]);break;case 34:xt.setNewElementType(Qe[kt-2]);break;case 35:xt.setNewElementDocRef(Qe[kt-2]);break;case 38:xt.addRelationship(Qe[kt-2],Qe[kt],Qe[kt-4]);break;case 39:xt.addRelationship(Qe[kt-2],Qe[kt-4],Qe[kt]);break;case 40:this.$=xt.Relationships.CONTAINS;break;case 41:this.$=xt.Relationships.COPIES;break;case 42:this.$=xt.Relationships.DERIVES;break;case 43:this.$=xt.Relationships.SATISFIES;break;case 44:this.$=xt.Relationships.VERIFIES;break;case 45:this.$=xt.Relationships.REFINES;break;case 46:this.$=xt.Relationships.TRACES;break}},table:[{3:1,4:2,6:s,9:u,11:d,13:p},{1:[3]},{3:8,4:2,5:[1,7],6:s,9:u,11:d,13:p},{5:[1,9]},{10:[1,10]},{12:[1,11]},i(v,[2,6]),{3:12,4:2,6:s,9:u,11:d,13:p},{1:[2,2]},{4:17,5:b,7:13,8:y,9:u,11:d,13:p,14:14,15:15,16:16,17:19,23:21,31:T,32:_,33:A,34:P,35:R,36:F,44:j,62:K,63:ee},i(v,[2,4]),i(v,[2,5]),{1:[2,1]},{8:[1,30]},{4:17,5:b,7:31,8:y,9:u,11:d,13:p,14:14,15:15,16:16,17:19,23:21,31:T,32:_,33:A,34:P,35:R,36:F,44:j,62:K,63:ee},{4:17,5:b,7:32,8:y,9:u,11:d,13:p,14:14,15:15,16:16,17:19,23:21,31:T,32:_,33:A,34:P,35:R,36:F,44:j,62:K,63:ee},{4:17,5:b,7:33,8:y,9:u,11:d,13:p,14:14,15:15,16:16,17:19,23:21,31:T,32:_,33:A,34:P,35:R,36:F,44:j,62:K,63:ee},{4:17,5:b,7:34,8:y,9:u,11:d,13:p,14:14,15:15,16:16,17:19,23:21,31:T,32:_,33:A,34:P,35:R,36:F,44:j,62:K,63:ee},{4:17,5:b,7:35,8:y,9:u,11:d,13:p,14:14,15:15,16:16,17:19,23:21,31:T,32:_,33:A,34:P,35:R,36:F,44:j,62:K,63:ee},{18:36,62:[1,37],63:[1,38]},{45:39,62:[1,40],63:[1,41]},{51:[1,42],53:[1,43]},i(ie,[2,20]),i(ie,[2,21]),i(ie,[2,22]),i(ie,[2,23]),i(ie,[2,24]),i(ie,[2,25]),i(oe,[2,49]),i(oe,[2,50]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{19:[1,44]},{19:[2,47]},{19:[2,48]},{19:[1,45]},{19:[2,53]},{19:[2,54]},{52:46,55:pe,56:be,57:ae,58:ne,59:se,60:de,61:X},{52:54,55:pe,56:be,57:ae,58:ne,59:se,60:de,61:X},{5:[1,55]},{5:[1,56]},{53:[1,57]},i(ge,[2,40]),i(ge,[2,41]),i(ge,[2,42]),i(ge,[2,43]),i(ge,[2,44]),i(ge,[2,45]),i(ge,[2,46]),{54:[1,58]},{5:W,20:59,21:xe,24:U,26:Fe,28:Pe,30:je},{5:Ie,30:Se,46:66,47:Ce,49:ke},{23:71,62:K,63:ee},{23:72,62:K,63:ee},i(Ke,[2,13]),{22:[1,73]},{22:[1,74]},{22:[1,75]},{22:[1,76]},{5:W,20:77,21:xe,24:U,26:Fe,28:Pe,30:je},i(Ke,[2,19]),i(Ke,[2,33]),{22:[1,78]},{22:[1,79]},{5:Ie,30:Se,46:80,47:Ce,49:ke},i(Ke,[2,37]),i(Ke,[2,38]),i(Ke,[2,39]),{23:81,62:K,63:ee},{25:82,62:[1,83],63:[1,84]},{27:85,37:[1,86],38:[1,87],39:[1,88]},{29:89,40:[1,90],41:[1,91],42:[1,92],43:[1,93]},i(Ke,[2,18]),{48:94,62:[1,95],63:[1,96]},{50:97,62:[1,98],63:[1,99]},i(Ke,[2,36]),{5:[1,100]},{5:[1,101]},{5:[2,51]},{5:[2,52]},{5:[1,102]},{5:[2,26]},{5:[2,27]},{5:[2,28]},{5:[1,103]},{5:[2,29]},{5:[2,30]},{5:[2,31]},{5:[2,32]},{5:[1,104]},{5:[2,55]},{5:[2,56]},{5:[1,105]},{5:[2,57]},{5:[2,58]},{5:W,20:106,21:xe,24:U,26:Fe,28:Pe,30:je},{5:W,20:107,21:xe,24:U,26:Fe,28:Pe,30:je},{5:W,20:108,21:xe,24:U,26:Fe,28:Pe,30:je},{5:W,20:109,21:xe,24:U,26:Fe,28:Pe,30:je},{5:Ie,30:Se,46:110,47:Ce,49:ke},{5:Ie,30:Se,46:111,47:Ce,49:ke},i(Ke,[2,14]),i(Ke,[2,15]),i(Ke,[2,16]),i(Ke,[2,17]),i(Ke,[2,34]),i(Ke,[2,35])],defaultActions:{8:[2,2],12:[2,1],30:[2,3],31:[2,8],32:[2,9],33:[2,10],34:[2,11],35:[2,12],37:[2,47],38:[2,48],40:[2,53],41:[2,54],83:[2,51],84:[2,52],86:[2,26],87:[2,27],88:[2,28],90:[2,29],91:[2,30],92:[2,31],93:[2,32],95:[2,55],96:[2,56],98:[2,57],99:[2,58]},parseError:function(Et,Gt){if(Gt.recoverable)this.trace(Et);else{var ln=new Error(Et);throw ln.hash=Gt,ln}},parse:function(Et){var Gt=this,ln=[0],xt=[],Pt=[null],Qe=[],Dt=this.table,kt="",On=0,ht=0,zr=2,yt=1,ji=Qe.slice.call(arguments,1),xi=Object.create(this.lexer),Ma={yy:{}};for(var zs in this.yy)Object.prototype.hasOwnProperty.call(this.yy,zs)&&(Ma.yy[zs]=this.yy[zs]);xi.setInput(Et,Ma.yy),Ma.yy.lexer=xi,Ma.yy.parser=this,typeof xi.yylloc>"u"&&(xi.yylloc={});var ao=xi.yylloc;Qe.push(ao);var Tr=xi.options&&xi.options.ranges;typeof Ma.yy.parseError=="function"?this.parseError=Ma.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Fn(){var Pa;return Pa=xt.pop()||xi.lex()||yt,typeof Pa!="number"&&(Pa instanceof Array&&(xt=Pa,Pa=xt.pop()),Pa=Gt.symbols_[Pa]||Pa),Pa}for(var qn,Un,At,wt,on={},fn,An,oo,jo;;){if(Un=ln[ln.length-1],this.defaultActions[Un]?At=this.defaultActions[Un]:((qn===null||typeof qn>"u")&&(qn=Fn()),At=Dt[Un]&&Dt[Un][qn]),typeof At>"u"||!At.length||!At[0]){var $o="";jo=[];for(fn in Dt[Un])this.terminals_[fn]&&fn>zr&&jo.push("'"+this.terminals_[fn]+"'");xi.showPosition?$o="Parse error on line "+(On+1)+`: +`+xi.showPosition()+` +Expecting `+jo.join(", ")+", got '"+(this.terminals_[qn]||qn)+"'":$o="Parse error on line "+(On+1)+": Unexpected "+(qn==yt?"end of input":"'"+(this.terminals_[qn]||qn)+"'"),this.parseError($o,{text:xi.match,token:this.terminals_[qn]||qn,line:xi.yylineno,loc:ao,expected:jo})}if(At[0]instanceof Array&&At.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Un+", token: "+qn);switch(At[0]){case 1:ln.push(qn),Pt.push(xi.yytext),Qe.push(xi.yylloc),ln.push(At[1]),qn=null,ht=xi.yyleng,kt=xi.yytext,On=xi.yylineno,ao=xi.yylloc;break;case 2:if(An=this.productions_[At[1]][1],on.$=Pt[Pt.length-An],on._$={first_line:Qe[Qe.length-(An||1)].first_line,last_line:Qe[Qe.length-1].last_line,first_column:Qe[Qe.length-(An||1)].first_column,last_column:Qe[Qe.length-1].last_column},Tr&&(on._$.range=[Qe[Qe.length-(An||1)].range[0],Qe[Qe.length-1].range[1]]),wt=this.performAction.apply(on,[kt,ht,On,Ma.yy,At[1],Pt,Qe].concat(ji)),typeof wt<"u")return wt;An&&(ln=ln.slice(0,-1*An*2),Pt=Pt.slice(0,-1*An),Qe=Qe.slice(0,-1*An)),ln.push(this.productions_[At[1]][0]),Pt.push(on.$),Qe.push(on._$),oo=Dt[ln[ln.length-2]][ln[ln.length-1]],ln.push(oo);break;case 3:return!0}}return!0}},Ne=function(){var _t={EOF:1,parseError:function(Gt,ln){if(this.yy.parser)this.yy.parser.parseError(Gt,ln);else throw new Error(Gt)},setInput:function(Et,Gt){return this.yy=Gt||this.yy||{},this._input=Et,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Et=this._input[0];this.yytext+=Et,this.yyleng++,this.offset++,this.match+=Et,this.matched+=Et;var Gt=Et.match(/(?:\r\n?|\n).*/g);return Gt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Et},unput:function(Et){var Gt=Et.length,ln=Et.split(/(?:\r\n?|\n)/g);this._input=Et+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Gt),this.offset-=Gt;var xt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ln.length-1&&(this.yylineno-=ln.length-1);var Pt=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ln?(ln.length===xt.length?this.yylloc.first_column:0)+xt[xt.length-ln.length].length-ln[0].length:this.yylloc.first_column-Gt},this.options.ranges&&(this.yylloc.range=[Pt[0],Pt[0]+this.yyleng-Gt]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Et){this.unput(this.match.slice(Et))},pastInput:function(){var Et=this.matched.substr(0,this.matched.length-this.match.length);return(Et.length>20?"...":"")+Et.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Et=this.match;return Et.length<20&&(Et+=this._input.substr(0,20-Et.length)),(Et.substr(0,20)+(Et.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Et=this.pastInput(),Gt=new Array(Et.length+1).join("-");return Et+this.upcomingInput()+` +`+Gt+"^"},test_match:function(Et,Gt){var ln,xt,Pt;if(this.options.backtrack_lexer&&(Pt={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Pt.yylloc.range=this.yylloc.range.slice(0))),xt=Et[0].match(/(?:\r\n?|\n).*/g),xt&&(this.yylineno+=xt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:xt?xt[xt.length-1].length-xt[xt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Et[0].length},this.yytext+=Et[0],this.match+=Et[0],this.matches=Et,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Et[0].length),this.matched+=Et[0],ln=this.performAction.call(this,this.yy,this,Gt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ln)return ln;if(this._backtrack){for(var Qe in Pt)this[Qe]=Pt[Qe];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Et,Gt,ln,xt;this._more||(this.yytext="",this.match="");for(var Pt=this._currentRules(),Qe=0;QeGt[0].length)){if(Gt=ln,xt=Qe,this.options.backtrack_lexer){if(Et=this.test_match(ln,Pt[Qe]),Et!==!1)return Et;if(this._backtrack){Gt=!1;continue}else return!1}else if(!this.options.flex)break}return Gt?(Et=this.test_match(Gt,Pt[xt]),Et!==!1?Et:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Gt=this.next();return Gt||this.lex()},begin:function(Gt){this.conditionStack.push(Gt)},popState:function(){var Gt=this.conditionStack.length-1;return Gt>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Gt){return Gt=this.conditionStack.length-1-Math.abs(Gt||0),Gt>=0?this.conditionStack[Gt]:"INITIAL"},pushState:function(Gt){this.begin(Gt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Gt,ln,xt,Pt){switch(xt){case 0:return"title";case 1:return this.begin("acc_title"),9;case 2:return this.popState(),"acc_title_value";case 3:return this.begin("acc_descr"),11;case 4:return this.popState(),"acc_descr_value";case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:return 5;case 9:break;case 10:break;case 11:break;case 12:return 8;case 13:return 6;case 14:return 19;case 15:return 30;case 16:return 22;case 17:return 21;case 18:return 24;case 19:return 26;case 20:return 28;case 21:return 31;case 22:return 32;case 23:return 33;case 24:return 34;case 25:return 35;case 26:return 36;case 27:return 37;case 28:return 38;case 29:return 39;case 30:return 40;case 31:return 41;case 32:return 42;case 33:return 43;case 34:return 44;case 35:return 55;case 36:return 56;case 37:return 57;case 38:return 58;case 39:return 59;case 40:return 60;case 41:return 61;case 42:return 47;case 43:return 49;case 44:return 51;case 45:return 54;case 46:return 53;case 47:this.begin("string");break;case 48:this.popState();break;case 49:return"qString";case 50:return ln.yytext=ln.yytext.trim(),62}},rules:[/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[48,49],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,50],inclusive:!0}}};return _t}();Ft.lexer=Ne;function gn(){this.yy={}}return gn.prototype=Ft,Ft.Parser=gn,new gn}();mve.parser=mve;const lrn=mve;let vve=[],V2={},VR={},F9={},UR={};const hrn={RequirementType:{REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"},RiskLevel:{LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"},VerifyType:{VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"},Relationships:{CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"},getConfig:()=>qt().req,addRequirement:(i,s)=>(VR[i]===void 0&&(VR[i]={name:i,type:s,id:V2.id,text:V2.text,risk:V2.risk,verifyMethod:V2.verifyMethod}),V2={},VR[i]),getRequirements:()=>VR,setNewReqId:i=>{V2!==void 0&&(V2.id=i)},setNewReqText:i=>{V2!==void 0&&(V2.text=i)},setNewReqRisk:i=>{V2!==void 0&&(V2.risk=i)},setNewReqVerifyMethod:i=>{V2!==void 0&&(V2.verifyMethod=i)},setAccTitle:Bg,getAccTitle:Cp,setAccDescription:Sp,getAccDescription:_p,addElement:i=>(UR[i]===void 0&&(UR[i]={name:i,type:F9.type,docRef:F9.docRef},Xe.info("Added new requirement: ",i)),F9={},UR[i]),getElements:()=>UR,setNewElementType:i=>{F9!==void 0&&(F9.type=i)},setNewElementDocRef:i=>{F9!==void 0&&(F9.docRef=i)},addRelationship:(i,s,u)=>{vve.push({type:i,src:s,dst:u})},getRelationships:()=>vve,clear:()=>{vve=[],V2={},VR={},F9={},UR={},Pg()}},frn=i=>` marker { fill: ${i.relationColor}; @@ -702,15 +967,15 @@ Expecting `+qa.join(", ")+", got '"+(this.terminals_[Xn]||Xn)+"'":Ma="Parse erro fill: ${i.relationLabelColor}; } -`,dgt={CONTAINS:"contains",ARROW:"arrow"},xRt={ReqMarkers:dgt,insertLineEndings:(i,a)=>{let f=i.append("defs").append("marker").attr("id",dgt.CONTAINS+"_line_ending").attr("refX",0).attr("refY",a.line_height/2).attr("markerWidth",a.line_height).attr("markerHeight",a.line_height).attr("orient","auto").append("g");f.append("circle").attr("cx",a.line_height/2).attr("cy",a.line_height/2).attr("r",a.line_height/2).attr("fill","none"),f.append("line").attr("x1",0).attr("x2",a.line_height).attr("y1",a.line_height/2).attr("y2",a.line_height/2).attr("stroke-width",1),f.append("line").attr("y1",0).attr("y2",a.line_height).attr("x1",a.line_height/2).attr("x2",a.line_height/2).attr("stroke-width",1),i.append("defs").append("marker").attr("id",dgt.ARROW+"_line_ending").attr("refX",a.line_height).attr("refY",.5*a.line_height).attr("markerWidth",a.line_height).attr("markerHeight",a.line_height).attr("orient","auto").append("path").attr("d",`M0,0 - L${a.line_height},${a.line_height/2} - M${a.line_height},${a.line_height/2} - L0,${a.line_height}`).attr("stroke-width",1)}};let Eh={},kRt=0;const ERt=(i,a)=>i.insert("rect","#"+a).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",Eh.rect_min_width+"px").attr("height",Eh.rect_min_height+"px"),TRt=(i,a,f)=>{let p=Eh.rect_min_width/2,w=i.append("text").attr("class","req reqLabel reqTitle").attr("id",a).attr("x",p).attr("y",Eh.rect_padding).attr("dominant-baseline","hanging"),m=0;f.forEach(A=>{m==0?w.append("tspan").attr("text-anchor","middle").attr("x",Eh.rect_min_width/2).attr("dy",0).text(A):w.append("tspan").attr("text-anchor","middle").attr("x",Eh.rect_min_width/2).attr("dy",Eh.line_height*.75).text(A),m++});let b=1.5*Eh.rect_padding,E=m*Eh.line_height*.75,_=b+E;return i.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",Eh.rect_min_width).attr("y1",_).attr("y2",_),{titleNode:w,y:_}},CRt=(i,a,f,p)=>{let w=i.append("text").attr("class","req reqLabel").attr("id",a).attr("x",Eh.rect_padding).attr("y",p).attr("dominant-baseline","hanging"),m=0;const b=30;let E=[];return f.forEach(_=>{let A=_.length;for(;A>b&&m<3;){let I=_.substring(0,b);_=_.substring(b,_.length),A=_.length,E[E.length]=I,m++}if(m==3){let I=E[E.length-1];E[E.length-1]=I.substring(0,I.length-4)+"..."}else E[E.length]=_;m=0}),E.forEach(_=>{w.append("tspan").attr("x",Eh.rect_padding).attr("dy",Eh.line_height).text(_)}),w},WHe=(i,a,f,p)=>{const w=a.node().getTotalLength(),m=a.node().getPointAtLength(w*.5),b="rel"+kRt;kRt++;const _=i.append("text").attr("class","req relationshipLabel").attr("id",b).attr("x",m.x).attr("y",m.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(p).node().getBBox();i.insert("rect","#"+b).attr("class","req reqLabelBox").attr("x",m.x-_.width/2).attr("y",m.y-_.height/2).attr("width",_.width).attr("height",_.height).attr("fill","white").attr("fill-opacity","85%")},YHe=function(i,a,f,p,w){const m=f.edge(fL(a.src),fL(a.dst)),b=E5().x(function(_){return _.x}).y(function(_){return _.y}),E=i.insert("path","#"+p).attr("class","er relationshipLine").attr("d",b(m.points)).attr("fill","none");a.type==w.db.Relationships.CONTAINS?E.attr("marker-start","url("+Kr.getUrl(Eh.arrowMarkerAbsolute)+"#"+a.type+"_line_ending)"):(E.attr("stroke-dasharray","10,7"),E.attr("marker-end","url("+Kr.getUrl(Eh.arrowMarkerAbsolute)+"#"+xRt.ReqMarkers.ARROW+"_line_ending)")),WHe(i,E,Eh,`<<${a.type}>>`)},KHe=(i,a,f)=>{Object.keys(i).forEach(p=>{let w=i[p];p=fL(p),Ut.info("Added new requirement: ",p);const m=f.append("g").attr("id",p),b="req-"+p,E=ERt(m,b);let _=TRt(m,p+"_title",[`<<${w.type}>>`,`${w.name}`]);CRt(m,p+"_body",[`Id: ${w.id}`,`Text: ${w.text}`,`Risk: ${w.risk}`,`Verification: ${w.verifyMethod}`],_.y);const A=E.node().getBBox();a.setNode(p,{width:A.width,height:A.height,shape:"rect",id:p})})},XHe=(i,a,f)=>{Object.keys(i).forEach(p=>{let w=i[p];const m=fL(p),b=f.append("g").attr("id",m),E="element-"+m,_=ERt(b,E);let A=TRt(b,E+"_title",["<>",`${p}`]);CRt(b,E+"_body",[`Type: ${w.type||"Not Specified"}`,`Doc Ref: ${w.docRef||"None"}`],A.y);const I=_.node().getBBox();a.setNode(m,{width:I.width,height:I.height,shape:"rect",id:m})})},QHe=(i,a)=>(i.forEach(function(f){let p=fL(f.src),w=fL(f.dst);a.setEdge(p,w,{relationship:f})}),i),ZHe=function(i,a){a.nodes().forEach(function(f){f!==void 0&&a.node(f)!==void 0&&(i.select("#"+f),i.select("#"+f).attr("transform","translate("+(a.node(f).x-a.node(f).width/2)+","+(a.node(f).y-a.node(f).height/2)+" )"))})},fL=i=>i.replace(/\s/g,"").replace(/\./g,"_"),JHe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:VHe,db:GHe,renderer:{draw:(i,a,f,p)=>{Eh=Oe().requirement;const w=Eh.securityLevel;let m;w==="sandbox"&&(m=yr("#i"+a));const E=yr(w==="sandbox"?m.nodes()[0].contentDocument.body:"body").select(`[id='${a}']`);xRt.insertLineEndings(E,Eh);const _=new c1({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:Eh.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}});let A=p.db.getRequirements(),I=p.db.getElements(),B=p.db.getRelationships();KHe(A,_,E),XHe(I,_,E),QHe(B,_),aL(_),ZHe(E,_),B.forEach(function(et){YHe(E,et,_,a,p)});const N=Eh.rect_padding,R=E.node().getBBox(),z=R.width+N*2,W=R.height+N*2;k0(E,W,z,Eh.useMaxWidth),E.attr("viewBox",`${R.x-N} ${R.y-N} ${z} ${W}`)}},styles:UHe}},Symbol.toStringTag,{value:"Module"}));var ggt=function(){var i=function(ce,ke,zt,re){for(zt=zt||{},re=ce.length;re--;zt[ce[re]]=ke);return zt},a=[1,2],f=[1,3],p=[1,4],w=[2,4],m=[1,9],b=[1,11],E=[1,13],_=[1,14],A=[1,16],I=[1,17],B=[1,18],N=[1,24],R=[1,25],z=[1,26],W=[1,27],et=[1,28],st=[1,29],at=[1,30],bt=[1,31],mt=[1,32],yt=[1,33],ft=[1,34],ut=[1,35],vt=[1,36],X=[1,37],pt=[1,38],U=[1,39],Tt=[1,41],nt=[1,42],It=[1,43],Ot=[1,44],Bt=[1,45],Et=[1,46],Z=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,54,59,60,61,62,70],Ct=[4,5,16,50,52,53],xt=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],Ht=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,54,59,60,61,62,70],Le=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,54,59,60,61,62,70],Ft=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,54,59,60,61,62,70],gn=[68,69,70],Se=[1,120],me={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,box_section:10,box_line:11,participant_statement:12,create:13,box:14,restOfLine:15,end:16,signal:17,autonumber:18,NUM:19,off:20,activate:21,actor:22,deactivate:23,note_statement:24,links_statement:25,link_statement:26,properties_statement:27,details_statement:28,title:29,legacy_title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,note:54,placement:55,text2:56,over:57,actor_pair:58,links:59,link:60,properties:61,details:62,spaceList:63,",":64,left_of:65,right_of:66,signaltype:67,"+":68,"-":69,ACTOR:70,SOLID_OPEN_ARROW:71,DOTTED_OPEN_ARROW:72,SOLID_ARROW:73,DOTTED_ARROW:74,SOLID_CROSS:75,DOTTED_CROSS:76,SOLID_POINT:77,DOTTED_POINT:78,TXT:79,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",54:"note",57:"over",59:"links",60:"link",61:"properties",62:"details",64:",",65:"left_of",66:"right_of",68:"+",69:"-",70:"ACTOR",71:"SOLID_OPEN_ARROW",72:"DOTTED_OPEN_ARROW",73:"SOLID_ARROW",74:"DOTTED_ARROW",75:"SOLID_CROSS",76:"DOTTED_CROSS",77:"SOLID_POINT",78:"DOTTED_POINT",79:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[63,2],[63,1],[58,3],[58,1],[55,1],[55,1],[17,5],[17,5],[17,4],[22,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[56,1]],performAction:function(ke,zt,re,se,Pe,te,Me){var de=te.length-1;switch(Pe){case 3:return se.apply(te[de]),te[de];case 4:case 9:this.$=[];break;case 5:case 10:te[de-1].push(te[de]),this.$=te[de-1];break;case 6:case 7:case 11:case 12:this.$=te[de];break;case 8:case 13:this.$=[];break;case 15:te[de].type="createParticipant",this.$=te[de];break;case 16:te[de-1].unshift({type:"boxStart",boxData:se.parseBoxData(te[de-2])}),te[de-1].push({type:"boxEnd",boxText:te[de-2]}),this.$=te[de-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(te[de-2]),sequenceIndexStep:Number(te[de-1]),sequenceVisible:!0,signalType:se.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(te[de-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:se.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:se.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:se.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:se.LINETYPE.ACTIVE_START,actor:te[de-1]};break;case 23:this.$={type:"activeEnd",signalType:se.LINETYPE.ACTIVE_END,actor:te[de-1]};break;case 29:se.setDiagramTitle(te[de].substring(6)),this.$=te[de].substring(6);break;case 30:se.setDiagramTitle(te[de].substring(7)),this.$=te[de].substring(7);break;case 31:this.$=te[de].trim(),se.setAccTitle(this.$);break;case 32:case 33:this.$=te[de].trim(),se.setAccDescription(this.$);break;case 34:te[de-1].unshift({type:"loopStart",loopText:se.parseMessage(te[de-2]),signalType:se.LINETYPE.LOOP_START}),te[de-1].push({type:"loopEnd",loopText:te[de-2],signalType:se.LINETYPE.LOOP_END}),this.$=te[de-1];break;case 35:te[de-1].unshift({type:"rectStart",color:se.parseMessage(te[de-2]),signalType:se.LINETYPE.RECT_START}),te[de-1].push({type:"rectEnd",color:se.parseMessage(te[de-2]),signalType:se.LINETYPE.RECT_END}),this.$=te[de-1];break;case 36:te[de-1].unshift({type:"optStart",optText:se.parseMessage(te[de-2]),signalType:se.LINETYPE.OPT_START}),te[de-1].push({type:"optEnd",optText:se.parseMessage(te[de-2]),signalType:se.LINETYPE.OPT_END}),this.$=te[de-1];break;case 37:te[de-1].unshift({type:"altStart",altText:se.parseMessage(te[de-2]),signalType:se.LINETYPE.ALT_START}),te[de-1].push({type:"altEnd",signalType:se.LINETYPE.ALT_END}),this.$=te[de-1];break;case 38:te[de-1].unshift({type:"parStart",parText:se.parseMessage(te[de-2]),signalType:se.LINETYPE.PAR_START}),te[de-1].push({type:"parEnd",signalType:se.LINETYPE.PAR_END}),this.$=te[de-1];break;case 39:te[de-1].unshift({type:"parStart",parText:se.parseMessage(te[de-2]),signalType:se.LINETYPE.PAR_OVER_START}),te[de-1].push({type:"parEnd",signalType:se.LINETYPE.PAR_END}),this.$=te[de-1];break;case 40:te[de-1].unshift({type:"criticalStart",criticalText:se.parseMessage(te[de-2]),signalType:se.LINETYPE.CRITICAL_START}),te[de-1].push({type:"criticalEnd",signalType:se.LINETYPE.CRITICAL_END}),this.$=te[de-1];break;case 41:te[de-1].unshift({type:"breakStart",breakText:se.parseMessage(te[de-2]),signalType:se.LINETYPE.BREAK_START}),te[de-1].push({type:"breakEnd",optText:se.parseMessage(te[de-2]),signalType:se.LINETYPE.BREAK_END}),this.$=te[de-1];break;case 43:this.$=te[de-3].concat([{type:"option",optionText:se.parseMessage(te[de-1]),signalType:se.LINETYPE.CRITICAL_OPTION},te[de]]);break;case 45:this.$=te[de-3].concat([{type:"and",parText:se.parseMessage(te[de-1]),signalType:se.LINETYPE.PAR_AND},te[de]]);break;case 47:this.$=te[de-3].concat([{type:"else",altText:se.parseMessage(te[de-1]),signalType:se.LINETYPE.ALT_ELSE},te[de]]);break;case 48:te[de-3].draw="participant",te[de-3].type="addParticipant",te[de-3].description=se.parseMessage(te[de-1]),this.$=te[de-3];break;case 49:te[de-1].draw="participant",te[de-1].type="addParticipant",this.$=te[de-1];break;case 50:te[de-3].draw="actor",te[de-3].type="addParticipant",te[de-3].description=se.parseMessage(te[de-1]),this.$=te[de-3];break;case 51:te[de-1].draw="actor",te[de-1].type="addParticipant",this.$=te[de-1];break;case 52:te[de-1].type="destroyParticipant",this.$=te[de-1];break;case 53:this.$=[te[de-1],{type:"addNote",placement:te[de-2],actor:te[de-1].actor,text:te[de]}];break;case 54:te[de-2]=[].concat(te[de-1],te[de-1]).slice(0,2),te[de-2][0]=te[de-2][0].actor,te[de-2][1]=te[de-2][1].actor,this.$=[te[de-1],{type:"addNote",placement:se.PLACEMENT.OVER,actor:te[de-2].slice(0,2),text:te[de]}];break;case 55:this.$=[te[de-1],{type:"addLinks",actor:te[de-1].actor,text:te[de]}];break;case 56:this.$=[te[de-1],{type:"addALink",actor:te[de-1].actor,text:te[de]}];break;case 57:this.$=[te[de-1],{type:"addProperties",actor:te[de-1].actor,text:te[de]}];break;case 58:this.$=[te[de-1],{type:"addDetails",actor:te[de-1].actor,text:te[de]}];break;case 61:this.$=[te[de-2],te[de]];break;case 62:this.$=te[de];break;case 63:this.$=se.PLACEMENT.LEFTOF;break;case 64:this.$=se.PLACEMENT.RIGHTOF;break;case 65:this.$=[te[de-4],te[de-1],{type:"addMessage",from:te[de-4].actor,to:te[de-1].actor,signalType:te[de-3],msg:te[de],activate:!0},{type:"activeStart",signalType:se.LINETYPE.ACTIVE_START,actor:te[de-1]}];break;case 66:this.$=[te[de-4],te[de-1],{type:"addMessage",from:te[de-4].actor,to:te[de-1].actor,signalType:te[de-3],msg:te[de]},{type:"activeEnd",signalType:se.LINETYPE.ACTIVE_END,actor:te[de-4]}];break;case 67:this.$=[te[de-3],te[de-1],{type:"addMessage",from:te[de-3].actor,to:te[de-1].actor,signalType:te[de-2],msg:te[de]}];break;case 68:this.$={type:"addParticipant",actor:te[de]};break;case 69:this.$=se.LINETYPE.SOLID_OPEN;break;case 70:this.$=se.LINETYPE.DOTTED_OPEN;break;case 71:this.$=se.LINETYPE.SOLID;break;case 72:this.$=se.LINETYPE.DOTTED;break;case 73:this.$=se.LINETYPE.SOLID_CROSS;break;case 74:this.$=se.LINETYPE.DOTTED_CROSS;break;case 75:this.$=se.LINETYPE.SOLID_POINT;break;case 76:this.$=se.LINETYPE.DOTTED_POINT;break;case 77:this.$=se.parseMessage(te[de].trim().substring(1));break}},table:[{3:1,4:a,5:f,6:p},{1:[3]},{3:5,4:a,5:f,6:p},{3:6,4:a,5:f,6:p},i([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],w,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:m,5:b,8:8,9:10,12:12,13:E,14:_,17:15,18:A,21:I,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:N,30:R,31:z,33:W,35:et,36:st,37:at,38:bt,39:mt,41:yt,43:ft,44:ut,46:vt,50:X,52:pt,53:U,54:Tt,59:nt,60:It,61:Ot,62:Bt,70:Et},i(Z,[2,5]),{9:47,12:12,13:E,14:_,17:15,18:A,21:I,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:N,30:R,31:z,33:W,35:et,36:st,37:at,38:bt,39:mt,41:yt,43:ft,44:ut,46:vt,50:X,52:pt,53:U,54:Tt,59:nt,60:It,61:Ot,62:Bt,70:Et},i(Z,[2,7]),i(Z,[2,8]),i(Z,[2,14]),{12:48,50:X,52:pt,53:U},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:Et},{22:55,70:Et},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},i(Z,[2,29]),i(Z,[2,30]),{32:[1,61]},{34:[1,62]},i(Z,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,70:Et},{22:72,70:Et},{22:73,70:Et},{67:74,71:[1,75],72:[1,76],73:[1,77],74:[1,78],75:[1,79],76:[1,80],77:[1,81],78:[1,82]},{55:83,57:[1,84],65:[1,85],66:[1,86]},{22:87,70:Et},{22:88,70:Et},{22:89,70:Et},{22:90,70:Et},i([5,51,64,71,72,73,74,75,76,77,78,79],[2,68]),i(Z,[2,6]),i(Z,[2,15]),i(Ct,[2,9],{10:91}),i(Z,[2,17]),{5:[1,93],19:[1,92]},{5:[1,94]},i(Z,[2,21]),{5:[1,95]},{5:[1,96]},i(Z,[2,24]),i(Z,[2,25]),i(Z,[2,26]),i(Z,[2,27]),i(Z,[2,28]),i(Z,[2,31]),i(Z,[2,32]),i(xt,w,{7:97}),i(xt,w,{7:98}),i(xt,w,{7:99}),i(Ht,w,{40:100,7:101}),i(Le,w,{42:102,7:103}),i(Le,w,{7:103,42:104}),i(Ft,w,{45:105,7:106}),i(xt,w,{7:107}),{5:[1,109],51:[1,108]},{5:[1,111],51:[1,110]},{5:[1,112]},{22:115,68:[1,113],69:[1,114],70:Et},i(gn,[2,69]),i(gn,[2,70]),i(gn,[2,71]),i(gn,[2,72]),i(gn,[2,73]),i(gn,[2,74]),i(gn,[2,75]),i(gn,[2,76]),{22:116,70:Et},{22:118,58:117,70:Et},{70:[2,63]},{70:[2,64]},{56:119,79:Se},{56:121,79:Se},{56:122,79:Se},{56:123,79:Se},{4:[1,126],5:[1,128],11:125,12:127,16:[1,124],50:X,52:pt,53:U},{5:[1,129]},i(Z,[2,19]),i(Z,[2,20]),i(Z,[2,22]),i(Z,[2,23]),{4:m,5:b,8:8,9:10,12:12,13:E,14:_,16:[1,130],17:15,18:A,21:I,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:N,30:R,31:z,33:W,35:et,36:st,37:at,38:bt,39:mt,41:yt,43:ft,44:ut,46:vt,50:X,52:pt,53:U,54:Tt,59:nt,60:It,61:Ot,62:Bt,70:Et},{4:m,5:b,8:8,9:10,12:12,13:E,14:_,16:[1,131],17:15,18:A,21:I,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:N,30:R,31:z,33:W,35:et,36:st,37:at,38:bt,39:mt,41:yt,43:ft,44:ut,46:vt,50:X,52:pt,53:U,54:Tt,59:nt,60:It,61:Ot,62:Bt,70:Et},{4:m,5:b,8:8,9:10,12:12,13:E,14:_,16:[1,132],17:15,18:A,21:I,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:N,30:R,31:z,33:W,35:et,36:st,37:at,38:bt,39:mt,41:yt,43:ft,44:ut,46:vt,50:X,52:pt,53:U,54:Tt,59:nt,60:It,61:Ot,62:Bt,70:Et},{16:[1,133]},{4:m,5:b,8:8,9:10,12:12,13:E,14:_,16:[2,46],17:15,18:A,21:I,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:N,30:R,31:z,33:W,35:et,36:st,37:at,38:bt,39:mt,41:yt,43:ft,44:ut,46:vt,49:[1,134],50:X,52:pt,53:U,54:Tt,59:nt,60:It,61:Ot,62:Bt,70:Et},{16:[1,135]},{4:m,5:b,8:8,9:10,12:12,13:E,14:_,16:[2,44],17:15,18:A,21:I,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:N,30:R,31:z,33:W,35:et,36:st,37:at,38:bt,39:mt,41:yt,43:ft,44:ut,46:vt,48:[1,136],50:X,52:pt,53:U,54:Tt,59:nt,60:It,61:Ot,62:Bt,70:Et},{16:[1,137]},{16:[1,138]},{4:m,5:b,8:8,9:10,12:12,13:E,14:_,16:[2,42],17:15,18:A,21:I,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:N,30:R,31:z,33:W,35:et,36:st,37:at,38:bt,39:mt,41:yt,43:ft,44:ut,46:vt,47:[1,139],50:X,52:pt,53:U,54:Tt,59:nt,60:It,61:Ot,62:Bt,70:Et},{4:m,5:b,8:8,9:10,12:12,13:E,14:_,16:[1,140],17:15,18:A,21:I,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:N,30:R,31:z,33:W,35:et,36:st,37:at,38:bt,39:mt,41:yt,43:ft,44:ut,46:vt,50:X,52:pt,53:U,54:Tt,59:nt,60:It,61:Ot,62:Bt,70:Et},{15:[1,141]},i(Z,[2,49]),{15:[1,142]},i(Z,[2,51]),i(Z,[2,52]),{22:143,70:Et},{22:144,70:Et},{56:145,79:Se},{56:146,79:Se},{56:147,79:Se},{64:[1,148],79:[2,62]},{5:[2,55]},{5:[2,77]},{5:[2,56]},{5:[2,57]},{5:[2,58]},i(Z,[2,16]),i(Ct,[2,10]),{12:149,50:X,52:pt,53:U},i(Ct,[2,12]),i(Ct,[2,13]),i(Z,[2,18]),i(Z,[2,34]),i(Z,[2,35]),i(Z,[2,36]),i(Z,[2,37]),{15:[1,150]},i(Z,[2,38]),{15:[1,151]},i(Z,[2,39]),i(Z,[2,40]),{15:[1,152]},i(Z,[2,41]),{5:[1,153]},{5:[1,154]},{56:155,79:Se},{56:156,79:Se},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:157,70:Et},i(Ct,[2,11]),i(Ht,w,{7:101,40:158}),i(Le,w,{7:103,42:159}),i(Ft,w,{7:106,45:160}),i(Z,[2,48]),i(Z,[2,50]),{5:[2,65]},{5:[2,66]},{79:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],85:[2,63],86:[2,64],119:[2,55],120:[2,77],121:[2,56],122:[2,57],123:[2,58],145:[2,67],146:[2,53],147:[2,54],155:[2,65],156:[2,66],157:[2,61],158:[2,47],159:[2,45],160:[2,43]},parseError:function(ke,zt){if(zt.recoverable)this.trace(ke);else{var re=new Error(ke);throw re.hash=zt,re}},parse:function(ke){var zt=this,re=[0],se=[],Pe=[null],te=[],Me=this.table,de="",on=0,ni=0,Ks=2,ws=1,fo=te.slice.call(arguments,1),Xi=Object.create(this.lexer),Er={yy:{}};for(var Xn in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Xn)&&(Er.yy[Xn]=this.yy[Xn]);Xi.setInput(ke,Er.yy),Er.yy.lexer=Xi,Er.yy.parser=this,typeof Xi.yylloc>"u"&&(Xi.yylloc={});var di=Xi.yylloc;te.push(di);var Ee=Xi.options&&Xi.options.ranges;typeof Er.yy.parseError=="function"?this.parseError=Er.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Kn(){var zs;return zs=se.pop()||Xi.lex()||ws,typeof zs!="number"&&(zs instanceof Array&&(se=zs,zs=se.pop()),zs=zt.symbols_[zs]||zs),zs}for(var He,Ti,pn,Es,qa={},Ma,Gs,Po,vs;;){if(Ti=re[re.length-1],this.defaultActions[Ti]?pn=this.defaultActions[Ti]:((He===null||typeof He>"u")&&(He=Kn()),pn=Me[Ti]&&Me[Ti][He]),typeof pn>"u"||!pn.length||!pn[0]){var ru="";vs=[];for(Ma in Me[Ti])this.terminals_[Ma]&&Ma>Ks&&vs.push("'"+this.terminals_[Ma]+"'");Xi.showPosition?ru="Parse error on line "+(on+1)+`: -`+Xi.showPosition()+` -Expecting `+vs.join(", ")+", got '"+(this.terminals_[He]||He)+"'":ru="Parse error on line "+(on+1)+": Unexpected "+(He==ws?"end of input":"'"+(this.terminals_[He]||He)+"'"),this.parseError(ru,{text:Xi.match,token:this.terminals_[He]||He,line:Xi.yylineno,loc:di,expected:vs})}if(pn[0]instanceof Array&&pn.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Ti+", token: "+He);switch(pn[0]){case 1:re.push(He),Pe.push(Xi.yytext),te.push(Xi.yylloc),re.push(pn[1]),He=null,ni=Xi.yyleng,de=Xi.yytext,on=Xi.yylineno,di=Xi.yylloc;break;case 2:if(Gs=this.productions_[pn[1]][1],qa.$=Pe[Pe.length-Gs],qa._$={first_line:te[te.length-(Gs||1)].first_line,last_line:te[te.length-1].last_line,first_column:te[te.length-(Gs||1)].first_column,last_column:te[te.length-1].last_column},Ee&&(qa._$.range=[te[te.length-(Gs||1)].range[0],te[te.length-1].range[1]]),Es=this.performAction.apply(qa,[de,ni,on,Er.yy,pn[1],Pe,te].concat(fo)),typeof Es<"u")return Es;Gs&&(re=re.slice(0,-1*Gs*2),Pe=Pe.slice(0,-1*Gs),te=te.slice(0,-1*Gs)),re.push(this.productions_[pn[1]][0]),Pe.push(qa.$),te.push(qa._$),Po=Me[re[re.length-2]][re[re.length-1]],re.push(Po);break;case 3:return!0}}return!0}},Ve=function(){var ce={EOF:1,parseError:function(zt,re){if(this.yy.parser)this.yy.parser.parseError(zt,re);else throw new Error(zt)},setInput:function(ke,zt){return this.yy=zt||this.yy||{},this._input=ke,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var ke=this._input[0];this.yytext+=ke,this.yyleng++,this.offset++,this.match+=ke,this.matched+=ke;var zt=ke.match(/(?:\r\n?|\n).*/g);return zt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ke},unput:function(ke){var zt=ke.length,re=ke.split(/(?:\r\n?|\n)/g);this._input=ke+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-zt),this.offset-=zt;var se=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),re.length-1&&(this.yylineno-=re.length-1);var Pe=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:re?(re.length===se.length?this.yylloc.first_column:0)+se[se.length-re.length].length-re[0].length:this.yylloc.first_column-zt},this.options.ranges&&(this.yylloc.range=[Pe[0],Pe[0]+this.yyleng-zt]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(ke){this.unput(this.match.slice(ke))},pastInput:function(){var ke=this.matched.substr(0,this.matched.length-this.match.length);return(ke.length>20?"...":"")+ke.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var ke=this.match;return ke.length<20&&(ke+=this._input.substr(0,20-ke.length)),(ke.substr(0,20)+(ke.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var ke=this.pastInput(),zt=new Array(ke.length+1).join("-");return ke+this.upcomingInput()+` -`+zt+"^"},test_match:function(ke,zt){var re,se,Pe;if(this.options.backtrack_lexer&&(Pe={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Pe.yylloc.range=this.yylloc.range.slice(0))),se=ke[0].match(/(?:\r\n?|\n).*/g),se&&(this.yylineno+=se.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:se?se[se.length-1].length-se[se.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ke[0].length},this.yytext+=ke[0],this.match+=ke[0],this.matches=ke,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(ke[0].length),this.matched+=ke[0],re=this.performAction.call(this,this.yy,this,zt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),re)return re;if(this._backtrack){for(var te in Pe)this[te]=Pe[te];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ke,zt,re,se;this._more||(this.yytext="",this.match="");for(var Pe=this._currentRules(),te=0;tezt[0].length)){if(zt=re,se=te,this.options.backtrack_lexer){if(ke=this.test_match(re,Pe[te]),ke!==!1)return ke;if(this._backtrack){zt=!1;continue}else return!1}else if(!this.options.flex)break}return zt?(ke=this.test_match(zt,Pe[se]),ke!==!1?ke:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var zt=this.next();return zt||this.lex()},begin:function(zt){this.conditionStack.push(zt)},popState:function(){var zt=this.conditionStack.length-1;return zt>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(zt){return zt=this.conditionStack.length-1-Math.abs(zt||0),zt>=0?this.conditionStack[zt]:"INITIAL"},pushState:function(zt){this.begin(zt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(zt,re,se,Pe){switch(se){case 0:return 5;case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:return 19;case 7:return this.begin("LINE"),14;case 8:return this.begin("ID"),50;case 9:return this.begin("ID"),52;case 10:return 13;case 11:return this.begin("ID"),53;case 12:return re.yytext=re.yytext.trim(),this.begin("ALIAS"),70;case 13:return this.popState(),this.popState(),this.begin("LINE"),51;case 14:return this.popState(),this.popState(),5;case 15:return this.begin("LINE"),36;case 16:return this.begin("LINE"),37;case 17:return this.begin("LINE"),38;case 18:return this.begin("LINE"),39;case 19:return this.begin("LINE"),49;case 20:return this.begin("LINE"),41;case 21:return this.begin("LINE"),43;case 22:return this.begin("LINE"),48;case 23:return this.begin("LINE"),44;case 24:return this.begin("LINE"),47;case 25:return this.begin("LINE"),46;case 26:return this.popState(),15;case 27:return 16;case 28:return 65;case 29:return 66;case 30:return 59;case 31:return 60;case 32:return 61;case 33:return 62;case 34:return 57;case 35:return 54;case 36:return this.begin("ID"),21;case 37:return this.begin("ID"),23;case 38:return 29;case 39:return 30;case 40:return this.begin("acc_title"),31;case 41:return this.popState(),"acc_title_value";case 42:return this.begin("acc_descr"),33;case 43:return this.popState(),"acc_descr_value";case 44:this.begin("acc_descr_multiline");break;case 45:this.popState();break;case 46:return"acc_descr_multiline_value";case 47:return 6;case 48:return 18;case 49:return 20;case 50:return 64;case 51:return 5;case 52:return re.yytext=re.yytext.trim(),70;case 53:return 73;case 54:return 74;case 55:return 71;case 56:return 72;case 57:return 75;case 58:return 76;case 59:return 77;case 60:return 78;case 61:return 79;case 62:return 68;case 63:return 69;case 64:return 5;case 65:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:create\b)/i,/^(?:destroy\b)/i,/^(?:[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:par_over\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[45,46],inclusive:!1},acc_descr:{rules:[43],inclusive:!1},acc_title:{rules:[41],inclusive:!1},ID:{rules:[2,3,12],inclusive:!1},ALIAS:{rules:[2,3,13,14],inclusive:!1},LINE:{rules:[2,3,26],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,6,7,8,9,10,11,15,16,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,44,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65],inclusive:!0}}};return ce}();me.lexer=Ve;function Ye(){this.yy={}}return Ye.prototype=me,me.Parser=Ye,new Ye}();ggt.parser=ggt;const tVe=ggt;let HF,R5={},pgt={},bgt={},dL=[],zb=[],RY=!1,wgt,j5,VF,gL;const eVe=function(i){dL.push({name:i.text,wrap:i.wrap===void 0&&CT()||!!i.wrap,fill:i.color,actorKeys:[]}),j5=dL.slice(-1)[0]},vgt=function(i,a,f,p){let w=j5;const m=R5[i];if(m){if(j5&&m.box&&j5!==m.box)throw new Error("A same participant should only be defined in one Box: "+m.name+" can't be in '"+m.box.name+"' and in '"+j5.name+"' at the same time.");if(w=m.box?m.box:j5,m.box=w,m&&a===m.name&&f==null)return}(f==null||f.text==null)&&(f={text:a,wrap:null,type:p}),(p==null||f.text==null)&&(f={text:a,wrap:null,type:p}),R5[i]={box:w,name:a,description:f.text,wrap:f.wrap===void 0&&CT()||!!f.wrap,prevActor:HF,links:{},properties:{},actorCnt:null,rectData:null,type:p||"participant"},HF&&R5[HF]&&(R5[HF].nextActor=i),j5&&j5.actorKeys.push(i),HF=i},nVe=i=>{let a,f=0;for(a=0;a>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},b}return zb.push({from:i,to:a,message:f.text,wrap:f.wrap===void 0&&CT()||!!f.wrap,type:p,activate:w}),!0},iVe=function(){return dL.length>0},sVe=function(){return dL.some(i=>i.name)},aVe=function(){return zb},oVe=function(){return dL},cVe=function(){return R5},uVe=function(){return pgt},lVe=function(){return bgt},GF=function(i){return R5[i]},hVe=function(){return Object.keys(R5)},fVe=function(){RY=!0},dVe=function(){RY=!1},gVe=()=>RY,pVe=function(i){wgt=i},CT=()=>wgt!==void 0?wgt:Oe().sequence.wrap,bVe=function(){R5={},pgt={},bgt={},dL=[],zb=[],RY=!1,hg()},wVe=function(i){const a=i.trim(),f={text:a.replace(/^:?(?:no)?wrap:/,"").trim(),wrap:a.match(/^:?wrap:/)!==null?!0:a.match(/^:?nowrap:/)!==null?!1:void 0};return Ut.debug("parseMessage:",f),f},vVe=function(i){const a=i.match(/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/);let f=a!=null&&a[1]?a[1].trim():"transparent",p=a!=null&&a[2]?a[2].trim():void 0;if(window&&window.CSS)window.CSS.supports("color",f)||(f="transparent",p=i.trim());else{const m=new Option().style;m.color=f,m.color!==f&&(f="transparent",p=i.trim())}return{color:f,text:p!==void 0?Q1(p.replace(/^:?(?:no)?wrap:/,""),Oe()):void 0,wrap:p!==void 0?p.match(/^:?wrap:/)!==null?!0:p.match(/^:?nowrap:/)!==null?!1:void 0:void 0}},UF={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31,PAR_OVER_START:32},mVe={FILLED:0,OPEN:1},yVe={LEFTOF:0,RIGHTOF:1,OVER:2},_Rt=function(i,a,f){f.text,f.wrap===void 0&&CT()||f.wrap;const p=[].concat(i,i);zb.push({from:p[0],to:p[1],message:f.text,wrap:f.wrap===void 0&&CT()||!!f.wrap,type:UF.NOTE,placement:a})},SRt=function(i,a){const f=GF(i);try{let p=Q1(a.text,Oe());p=p.replace(/&/g,"&"),p=p.replace(/=/g,"=");const w=JSON.parse(p);mgt(f,w)}catch(p){Ut.error("error while parsing actor link text",p)}},xVe=function(i,a){const f=GF(i);try{const b={};let E=Q1(a.text,Oe());var p=E.indexOf("@");E=E.replace(/&/g,"&"),E=E.replace(/=/g,"=");var w=E.slice(0,p-1).trim(),m=E.slice(p+1).trim();b[w]=m,mgt(f,b)}catch(b){Ut.error("error while parsing actor link text",b)}};function mgt(i,a){if(i.links==null)i.links=a;else for(let f in a)i.links[f]=a[f]}const ARt=function(i,a){const f=GF(i);try{let p=Q1(a.text,Oe());const w=JSON.parse(p);LRt(f,w)}catch(p){Ut.error("error while parsing actor properties text",p)}};function LRt(i,a){if(i.properties==null)i.properties=a;else for(let f in a)i.properties[f]=a[f]}function kVe(){j5=void 0}const MRt=function(i,a){const f=GF(i),p=document.getElementById(a.text);try{const w=p.innerHTML,m=JSON.parse(w);m.properties&&LRt(f,m.properties),m.links&&mgt(f,m.links)}catch(w){Ut.error("error while parsing actor details text",w)}},EVe=function(i,a){if(i!==void 0&&i.properties!==void 0)return i.properties[a]},DRt=function(i){if(Array.isArray(i))i.forEach(function(a){DRt(a)});else switch(i.type){case"sequenceIndex":zb.push({from:void 0,to:void 0,message:{start:i.sequenceIndex,step:i.sequenceIndexStep,visible:i.sequenceVisible},wrap:!1,type:i.signalType});break;case"addParticipant":vgt(i.actor,i.actor,i.description,i.draw);break;case"createParticipant":if(R5[i.actor])throw new Error("It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior");VF=i.actor,vgt(i.actor,i.actor,i.description,i.draw),pgt[i.actor]=zb.length;break;case"destroyParticipant":gL=i.actor,bgt[i.actor]=zb.length;break;case"activeStart":ef(i.actor,void 0,void 0,i.signalType);break;case"activeEnd":ef(i.actor,void 0,void 0,i.signalType);break;case"addNote":_Rt(i.actor,i.placement,i.text);break;case"addLinks":SRt(i.actor,i.text);break;case"addALink":xVe(i.actor,i.text);break;case"addProperties":ARt(i.actor,i.text);break;case"addDetails":MRt(i.actor,i.text);break;case"addMessage":if(VF){if(i.to!==VF)throw new Error("The created participant "+VF+" does not have an associated creating message after its declaration. Please check the sequence diagram.");VF=void 0}else if(gL){if(i.to!==gL&&i.from!==gL)throw new Error("The destroyed participant "+gL+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");gL=void 0}ef(i.from,i.to,i.msg,i.signalType,i.activate);break;case"boxStart":eVe(i.boxData);break;case"boxEnd":kVe();break;case"loopStart":ef(void 0,void 0,i.loopText,i.signalType);break;case"loopEnd":ef(void 0,void 0,void 0,i.signalType);break;case"rectStart":ef(void 0,void 0,i.color,i.signalType);break;case"rectEnd":ef(void 0,void 0,void 0,i.signalType);break;case"optStart":ef(void 0,void 0,i.optText,i.signalType);break;case"optEnd":ef(void 0,void 0,void 0,i.signalType);break;case"altStart":ef(void 0,void 0,i.altText,i.signalType);break;case"else":ef(void 0,void 0,i.altText,i.signalType);break;case"altEnd":ef(void 0,void 0,void 0,i.signalType);break;case"setAccTitle":E0(i.text);break;case"parStart":ef(void 0,void 0,i.parText,i.signalType);break;case"and":ef(void 0,void 0,i.parText,i.signalType);break;case"parEnd":ef(void 0,void 0,void 0,i.signalType);break;case"criticalStart":ef(void 0,void 0,i.criticalText,i.signalType);break;case"option":ef(void 0,void 0,i.optionText,i.signalType);break;case"criticalEnd":ef(void 0,void 0,void 0,i.signalType);break;case"breakStart":ef(void 0,void 0,i.breakText,i.signalType);break;case"breakEnd":ef(void 0,void 0,void 0,i.signalType);break}},IRt={addActor:vgt,addMessage:rVe,addSignal:ef,addLinks:SRt,addDetails:MRt,addProperties:ARt,autoWrap:CT,setWrap:pVe,enableSequenceNumbers:fVe,disableSequenceNumbers:dVe,showSequenceNumbers:gVe,getMessages:aVe,getActors:cVe,getCreatedActors:uVe,getDestroyedActors:lVe,getActor:GF,getActorKeys:hVe,getActorProperty:EVe,getAccTitle:fg,getBoxes:oVe,getDiagramTitle:pg,setDiagramTitle:Nb,getConfig:()=>Oe().sequence,clear:bVe,parseMessage:wVe,parseBoxData:vVe,LINETYPE:UF,ARROWTYPE:mVe,PLACEMENT:yVe,addNote:_Rt,setAccTitle:E0,apply:DRt,setAccDescription:dg,getAccDescription:gg,hasAtLeastOneBox:iVe,hasAtLeastOneBoxWithTitle:sVe},TVe=i=>`.actor { +`,wve={CONTAINS:"contains",ARROW:"arrow"},SGe={ReqMarkers:wve,insertLineEndings:(i,s)=>{let u=i.append("defs").append("marker").attr("id",wve.CONTAINS+"_line_ending").attr("refX",0).attr("refY",s.line_height/2).attr("markerWidth",s.line_height).attr("markerHeight",s.line_height).attr("orient","auto").append("g");u.append("circle").attr("cx",s.line_height/2).attr("cy",s.line_height/2).attr("r",s.line_height/2).attr("fill","none"),u.append("line").attr("x1",0).attr("x2",s.line_height).attr("y1",s.line_height/2).attr("y2",s.line_height/2).attr("stroke-width",1),u.append("line").attr("y1",0).attr("y2",s.line_height).attr("x1",s.line_height/2).attr("x2",s.line_height/2).attr("stroke-width",1),i.append("defs").append("marker").attr("id",wve.ARROW+"_line_ending").attr("refX",s.line_height).attr("refY",.5*s.line_height).attr("markerWidth",s.line_height).attr("markerHeight",s.line_height).attr("orient","auto").append("path").attr("d",`M0,0 + L${s.line_height},${s.line_height/2} + M${s.line_height},${s.line_height/2} + L0,${s.line_height}`).attr("stroke-width",1)}};let Tf={},_Ge=0;const AGe=(i,s)=>i.insert("rect","#"+s).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",Tf.rect_min_width+"px").attr("height",Tf.rect_min_height+"px"),LGe=(i,s,u)=>{let d=Tf.rect_min_width/2,p=i.append("text").attr("class","req reqLabel reqTitle").attr("id",s).attr("x",d).attr("y",Tf.rect_padding).attr("dominant-baseline","hanging"),v=0;u.forEach(_=>{v==0?p.append("tspan").attr("text-anchor","middle").attr("x",Tf.rect_min_width/2).attr("dy",0).text(_):p.append("tspan").attr("text-anchor","middle").attr("x",Tf.rect_min_width/2).attr("dy",Tf.line_height*.75).text(_),v++});let b=1.5*Tf.rect_padding,y=v*Tf.line_height*.75,T=b+y;return i.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",Tf.rect_min_width).attr("y1",T).attr("y2",T),{titleNode:p,y:T}},MGe=(i,s,u,d)=>{let p=i.append("text").attr("class","req reqLabel").attr("id",s).attr("x",Tf.rect_padding).attr("y",d).attr("dominant-baseline","hanging"),v=0;const b=30;let y=[];return u.forEach(T=>{let _=T.length;for(;_>b&&v<3;){let A=T.substring(0,b);T=T.substring(b,T.length),_=T.length,y[y.length]=A,v++}if(v==3){let A=y[y.length-1];y[y.length-1]=A.substring(0,A.length-4)+"..."}else y[y.length]=T;v=0}),y.forEach(T=>{p.append("tspan").attr("x",Tf.rect_padding).attr("dy",Tf.line_height).text(T)}),p},drn=(i,s,u,d)=>{const p=s.node().getTotalLength(),v=s.node().getPointAtLength(p*.5),b="rel"+_Ge;_Ge++;const T=i.append("text").attr("class","req relationshipLabel").attr("id",b).attr("x",v.x).attr("y",v.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(d).node().getBBox();i.insert("rect","#"+b).attr("class","req reqLabelBox").attr("x",v.x-T.width/2).attr("y",v.y-T.height/2).attr("width",T.width).attr("height",T.height).attr("fill","white").attr("fill-opacity","85%")},grn=function(i,s,u,d,p){const v=u.edge(WD(s.src),WD(s.dst)),b=k7().x(function(T){return T.x}).y(function(T){return T.y}),y=i.insert("path","#"+d).attr("class","er relationshipLine").attr("d",b(v.points)).attr("fill","none");s.type==p.db.Relationships.CONTAINS?y.attr("marker-start","url("+ci.getUrl(Tf.arrowMarkerAbsolute)+"#"+s.type+"_line_ending)"):(y.attr("stroke-dasharray","10,7"),y.attr("marker-end","url("+ci.getUrl(Tf.arrowMarkerAbsolute)+"#"+SGe.ReqMarkers.ARROW+"_line_ending)")),drn(i,y,Tf,`<<${s.type}>>`)},prn=(i,s,u)=>{Object.keys(i).forEach(d=>{let p=i[d];d=WD(d),Xe.info("Added new requirement: ",d);const v=u.append("g").attr("id",d),b="req-"+d,y=AGe(v,b);let T=LGe(v,d+"_title",[`<<${p.type}>>`,`${p.name}`]);MGe(v,d+"_body",[`Id: ${p.id}`,`Text: ${p.text}`,`Risk: ${p.risk}`,`Verification: ${p.verifyMethod}`],T.y);const _=y.node().getBBox();s.setNode(d,{width:_.width,height:_.height,shape:"rect",id:d})})},brn=(i,s,u)=>{Object.keys(i).forEach(d=>{let p=i[d];const v=WD(d),b=u.append("g").attr("id",v),y="element-"+v,T=AGe(b,y);let _=LGe(b,y+"_title",["<>",`${d}`]);MGe(b,y+"_body",[`Type: ${p.type||"Not Specified"}`,`Doc Ref: ${p.docRef||"None"}`],_.y);const A=T.node().getBBox();s.setNode(v,{width:A.width,height:A.height,shape:"rect",id:v})})},mrn=(i,s)=>(i.forEach(function(u){let d=WD(u.src),p=WD(u.dst);s.setEdge(d,p,{relationship:u})}),i),vrn=function(i,s){s.nodes().forEach(function(u){u!==void 0&&s.node(u)!==void 0&&(i.select("#"+u),i.select("#"+u).attr("transform","translate("+(s.node(u).x-s.node(u).width/2)+","+(s.node(u).y-s.node(u).height/2)+" )"))})},WD=i=>i.replace(/\s/g,"").replace(/\./g,"_"),wrn=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:lrn,db:hrn,renderer:{draw:(i,s,u,d)=>{Tf=qt().requirement;const p=Tf.securityLevel;let v;p==="sandbox"&&(v=Ir("#i"+s));const y=Ir(p==="sandbox"?v.nodes()[0].contentDocument.body:"body").select(`[id='${s}']`);SGe.insertLineEndings(y,Tf);const T=new B0({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:Tf.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}});let _=d.db.getRequirements(),A=d.db.getElements(),P=d.db.getRelationships();prn(_,T,y),brn(A,T,y),mrn(P,T),qD(T),vrn(y,T),P.forEach(function(ee){grn(y,ee,T,s,d)});const R=Tf.rect_padding,F=y.node().getBBox(),j=F.width+R*2,K=F.height+R*2;Ng(y,K,j,Tf.useMaxWidth),y.attr("viewBox",`${F.x-R} ${F.y-R} ${j} ${K}`)}},styles:frn}},Symbol.toStringTag,{value:"Module"}));var yve=function(){var i=function(xt,Pt,Qe,Dt){for(Qe=Qe||{},Dt=xt.length;Dt--;Qe[xt[Dt]]=Pt);return Qe},s=[1,2],u=[1,3],d=[1,4],p=[2,4],v=[1,9],b=[1,11],y=[1,13],T=[1,14],_=[1,16],A=[1,17],P=[1,18],R=[1,24],F=[1,25],j=[1,26],K=[1,27],ee=[1,28],ie=[1,29],oe=[1,30],pe=[1,31],be=[1,32],ae=[1,33],ne=[1,34],se=[1,35],de=[1,36],X=[1,37],ge=[1,38],W=[1,39],xe=[1,41],U=[1,42],Fe=[1,43],Pe=[1,44],je=[1,45],Ie=[1,46],Se=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,54,59,60,61,62,70],Ce=[4,5,16,50,52,53],ke=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],Ke=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,54,59,60,61,62,70],Ft=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,54,59,60,61,62,70],Ne=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,54,59,60,61,62,70],gn=[68,69,70],_t=[1,120],Et={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,box_section:10,box_line:11,participant_statement:12,create:13,box:14,restOfLine:15,end:16,signal:17,autonumber:18,NUM:19,off:20,activate:21,actor:22,deactivate:23,note_statement:24,links_statement:25,link_statement:26,properties_statement:27,details_statement:28,title:29,legacy_title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,note:54,placement:55,text2:56,over:57,actor_pair:58,links:59,link:60,properties:61,details:62,spaceList:63,",":64,left_of:65,right_of:66,signaltype:67,"+":68,"-":69,ACTOR:70,SOLID_OPEN_ARROW:71,DOTTED_OPEN_ARROW:72,SOLID_ARROW:73,DOTTED_ARROW:74,SOLID_CROSS:75,DOTTED_CROSS:76,SOLID_POINT:77,DOTTED_POINT:78,TXT:79,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",54:"note",57:"over",59:"links",60:"link",61:"properties",62:"details",64:",",65:"left_of",66:"right_of",68:"+",69:"-",70:"ACTOR",71:"SOLID_OPEN_ARROW",72:"DOTTED_OPEN_ARROW",73:"SOLID_ARROW",74:"DOTTED_ARROW",75:"SOLID_CROSS",76:"DOTTED_CROSS",77:"SOLID_POINT",78:"DOTTED_POINT",79:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[63,2],[63,1],[58,3],[58,1],[55,1],[55,1],[17,5],[17,5],[17,4],[22,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[56,1]],performAction:function(Pt,Qe,Dt,kt,On,ht,zr){var yt=ht.length-1;switch(On){case 3:return kt.apply(ht[yt]),ht[yt];case 4:case 9:this.$=[];break;case 5:case 10:ht[yt-1].push(ht[yt]),this.$=ht[yt-1];break;case 6:case 7:case 11:case 12:this.$=ht[yt];break;case 8:case 13:this.$=[];break;case 15:ht[yt].type="createParticipant",this.$=ht[yt];break;case 16:ht[yt-1].unshift({type:"boxStart",boxData:kt.parseBoxData(ht[yt-2])}),ht[yt-1].push({type:"boxEnd",boxText:ht[yt-2]}),this.$=ht[yt-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(ht[yt-2]),sequenceIndexStep:Number(ht[yt-1]),sequenceVisible:!0,signalType:kt.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(ht[yt-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:kt.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:kt.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:kt.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:kt.LINETYPE.ACTIVE_START,actor:ht[yt-1]};break;case 23:this.$={type:"activeEnd",signalType:kt.LINETYPE.ACTIVE_END,actor:ht[yt-1]};break;case 29:kt.setDiagramTitle(ht[yt].substring(6)),this.$=ht[yt].substring(6);break;case 30:kt.setDiagramTitle(ht[yt].substring(7)),this.$=ht[yt].substring(7);break;case 31:this.$=ht[yt].trim(),kt.setAccTitle(this.$);break;case 32:case 33:this.$=ht[yt].trim(),kt.setAccDescription(this.$);break;case 34:ht[yt-1].unshift({type:"loopStart",loopText:kt.parseMessage(ht[yt-2]),signalType:kt.LINETYPE.LOOP_START}),ht[yt-1].push({type:"loopEnd",loopText:ht[yt-2],signalType:kt.LINETYPE.LOOP_END}),this.$=ht[yt-1];break;case 35:ht[yt-1].unshift({type:"rectStart",color:kt.parseMessage(ht[yt-2]),signalType:kt.LINETYPE.RECT_START}),ht[yt-1].push({type:"rectEnd",color:kt.parseMessage(ht[yt-2]),signalType:kt.LINETYPE.RECT_END}),this.$=ht[yt-1];break;case 36:ht[yt-1].unshift({type:"optStart",optText:kt.parseMessage(ht[yt-2]),signalType:kt.LINETYPE.OPT_START}),ht[yt-1].push({type:"optEnd",optText:kt.parseMessage(ht[yt-2]),signalType:kt.LINETYPE.OPT_END}),this.$=ht[yt-1];break;case 37:ht[yt-1].unshift({type:"altStart",altText:kt.parseMessage(ht[yt-2]),signalType:kt.LINETYPE.ALT_START}),ht[yt-1].push({type:"altEnd",signalType:kt.LINETYPE.ALT_END}),this.$=ht[yt-1];break;case 38:ht[yt-1].unshift({type:"parStart",parText:kt.parseMessage(ht[yt-2]),signalType:kt.LINETYPE.PAR_START}),ht[yt-1].push({type:"parEnd",signalType:kt.LINETYPE.PAR_END}),this.$=ht[yt-1];break;case 39:ht[yt-1].unshift({type:"parStart",parText:kt.parseMessage(ht[yt-2]),signalType:kt.LINETYPE.PAR_OVER_START}),ht[yt-1].push({type:"parEnd",signalType:kt.LINETYPE.PAR_END}),this.$=ht[yt-1];break;case 40:ht[yt-1].unshift({type:"criticalStart",criticalText:kt.parseMessage(ht[yt-2]),signalType:kt.LINETYPE.CRITICAL_START}),ht[yt-1].push({type:"criticalEnd",signalType:kt.LINETYPE.CRITICAL_END}),this.$=ht[yt-1];break;case 41:ht[yt-1].unshift({type:"breakStart",breakText:kt.parseMessage(ht[yt-2]),signalType:kt.LINETYPE.BREAK_START}),ht[yt-1].push({type:"breakEnd",optText:kt.parseMessage(ht[yt-2]),signalType:kt.LINETYPE.BREAK_END}),this.$=ht[yt-1];break;case 43:this.$=ht[yt-3].concat([{type:"option",optionText:kt.parseMessage(ht[yt-1]),signalType:kt.LINETYPE.CRITICAL_OPTION},ht[yt]]);break;case 45:this.$=ht[yt-3].concat([{type:"and",parText:kt.parseMessage(ht[yt-1]),signalType:kt.LINETYPE.PAR_AND},ht[yt]]);break;case 47:this.$=ht[yt-3].concat([{type:"else",altText:kt.parseMessage(ht[yt-1]),signalType:kt.LINETYPE.ALT_ELSE},ht[yt]]);break;case 48:ht[yt-3].draw="participant",ht[yt-3].type="addParticipant",ht[yt-3].description=kt.parseMessage(ht[yt-1]),this.$=ht[yt-3];break;case 49:ht[yt-1].draw="participant",ht[yt-1].type="addParticipant",this.$=ht[yt-1];break;case 50:ht[yt-3].draw="actor",ht[yt-3].type="addParticipant",ht[yt-3].description=kt.parseMessage(ht[yt-1]),this.$=ht[yt-3];break;case 51:ht[yt-1].draw="actor",ht[yt-1].type="addParticipant",this.$=ht[yt-1];break;case 52:ht[yt-1].type="destroyParticipant",this.$=ht[yt-1];break;case 53:this.$=[ht[yt-1],{type:"addNote",placement:ht[yt-2],actor:ht[yt-1].actor,text:ht[yt]}];break;case 54:ht[yt-2]=[].concat(ht[yt-1],ht[yt-1]).slice(0,2),ht[yt-2][0]=ht[yt-2][0].actor,ht[yt-2][1]=ht[yt-2][1].actor,this.$=[ht[yt-1],{type:"addNote",placement:kt.PLACEMENT.OVER,actor:ht[yt-2].slice(0,2),text:ht[yt]}];break;case 55:this.$=[ht[yt-1],{type:"addLinks",actor:ht[yt-1].actor,text:ht[yt]}];break;case 56:this.$=[ht[yt-1],{type:"addALink",actor:ht[yt-1].actor,text:ht[yt]}];break;case 57:this.$=[ht[yt-1],{type:"addProperties",actor:ht[yt-1].actor,text:ht[yt]}];break;case 58:this.$=[ht[yt-1],{type:"addDetails",actor:ht[yt-1].actor,text:ht[yt]}];break;case 61:this.$=[ht[yt-2],ht[yt]];break;case 62:this.$=ht[yt];break;case 63:this.$=kt.PLACEMENT.LEFTOF;break;case 64:this.$=kt.PLACEMENT.RIGHTOF;break;case 65:this.$=[ht[yt-4],ht[yt-1],{type:"addMessage",from:ht[yt-4].actor,to:ht[yt-1].actor,signalType:ht[yt-3],msg:ht[yt],activate:!0},{type:"activeStart",signalType:kt.LINETYPE.ACTIVE_START,actor:ht[yt-1]}];break;case 66:this.$=[ht[yt-4],ht[yt-1],{type:"addMessage",from:ht[yt-4].actor,to:ht[yt-1].actor,signalType:ht[yt-3],msg:ht[yt]},{type:"activeEnd",signalType:kt.LINETYPE.ACTIVE_END,actor:ht[yt-4]}];break;case 67:this.$=[ht[yt-3],ht[yt-1],{type:"addMessage",from:ht[yt-3].actor,to:ht[yt-1].actor,signalType:ht[yt-2],msg:ht[yt]}];break;case 68:this.$={type:"addParticipant",actor:ht[yt]};break;case 69:this.$=kt.LINETYPE.SOLID_OPEN;break;case 70:this.$=kt.LINETYPE.DOTTED_OPEN;break;case 71:this.$=kt.LINETYPE.SOLID;break;case 72:this.$=kt.LINETYPE.DOTTED;break;case 73:this.$=kt.LINETYPE.SOLID_CROSS;break;case 74:this.$=kt.LINETYPE.DOTTED_CROSS;break;case 75:this.$=kt.LINETYPE.SOLID_POINT;break;case 76:this.$=kt.LINETYPE.DOTTED_POINT;break;case 77:this.$=kt.parseMessage(ht[yt].trim().substring(1));break}},table:[{3:1,4:s,5:u,6:d},{1:[3]},{3:5,4:s,5:u,6:d},{3:6,4:s,5:u,6:d},i([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],p,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:v,5:b,8:8,9:10,12:12,13:y,14:T,17:15,18:_,21:A,22:40,23:P,24:19,25:20,26:21,27:22,28:23,29:R,30:F,31:j,33:K,35:ee,36:ie,37:oe,38:pe,39:be,41:ae,43:ne,44:se,46:de,50:X,52:ge,53:W,54:xe,59:U,60:Fe,61:Pe,62:je,70:Ie},i(Se,[2,5]),{9:47,12:12,13:y,14:T,17:15,18:_,21:A,22:40,23:P,24:19,25:20,26:21,27:22,28:23,29:R,30:F,31:j,33:K,35:ee,36:ie,37:oe,38:pe,39:be,41:ae,43:ne,44:se,46:de,50:X,52:ge,53:W,54:xe,59:U,60:Fe,61:Pe,62:je,70:Ie},i(Se,[2,7]),i(Se,[2,8]),i(Se,[2,14]),{12:48,50:X,52:ge,53:W},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:Ie},{22:55,70:Ie},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},i(Se,[2,29]),i(Se,[2,30]),{32:[1,61]},{34:[1,62]},i(Se,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,70:Ie},{22:72,70:Ie},{22:73,70:Ie},{67:74,71:[1,75],72:[1,76],73:[1,77],74:[1,78],75:[1,79],76:[1,80],77:[1,81],78:[1,82]},{55:83,57:[1,84],65:[1,85],66:[1,86]},{22:87,70:Ie},{22:88,70:Ie},{22:89,70:Ie},{22:90,70:Ie},i([5,51,64,71,72,73,74,75,76,77,78,79],[2,68]),i(Se,[2,6]),i(Se,[2,15]),i(Ce,[2,9],{10:91}),i(Se,[2,17]),{5:[1,93],19:[1,92]},{5:[1,94]},i(Se,[2,21]),{5:[1,95]},{5:[1,96]},i(Se,[2,24]),i(Se,[2,25]),i(Se,[2,26]),i(Se,[2,27]),i(Se,[2,28]),i(Se,[2,31]),i(Se,[2,32]),i(ke,p,{7:97}),i(ke,p,{7:98}),i(ke,p,{7:99}),i(Ke,p,{40:100,7:101}),i(Ft,p,{42:102,7:103}),i(Ft,p,{7:103,42:104}),i(Ne,p,{45:105,7:106}),i(ke,p,{7:107}),{5:[1,109],51:[1,108]},{5:[1,111],51:[1,110]},{5:[1,112]},{22:115,68:[1,113],69:[1,114],70:Ie},i(gn,[2,69]),i(gn,[2,70]),i(gn,[2,71]),i(gn,[2,72]),i(gn,[2,73]),i(gn,[2,74]),i(gn,[2,75]),i(gn,[2,76]),{22:116,70:Ie},{22:118,58:117,70:Ie},{70:[2,63]},{70:[2,64]},{56:119,79:_t},{56:121,79:_t},{56:122,79:_t},{56:123,79:_t},{4:[1,126],5:[1,128],11:125,12:127,16:[1,124],50:X,52:ge,53:W},{5:[1,129]},i(Se,[2,19]),i(Se,[2,20]),i(Se,[2,22]),i(Se,[2,23]),{4:v,5:b,8:8,9:10,12:12,13:y,14:T,16:[1,130],17:15,18:_,21:A,22:40,23:P,24:19,25:20,26:21,27:22,28:23,29:R,30:F,31:j,33:K,35:ee,36:ie,37:oe,38:pe,39:be,41:ae,43:ne,44:se,46:de,50:X,52:ge,53:W,54:xe,59:U,60:Fe,61:Pe,62:je,70:Ie},{4:v,5:b,8:8,9:10,12:12,13:y,14:T,16:[1,131],17:15,18:_,21:A,22:40,23:P,24:19,25:20,26:21,27:22,28:23,29:R,30:F,31:j,33:K,35:ee,36:ie,37:oe,38:pe,39:be,41:ae,43:ne,44:se,46:de,50:X,52:ge,53:W,54:xe,59:U,60:Fe,61:Pe,62:je,70:Ie},{4:v,5:b,8:8,9:10,12:12,13:y,14:T,16:[1,132],17:15,18:_,21:A,22:40,23:P,24:19,25:20,26:21,27:22,28:23,29:R,30:F,31:j,33:K,35:ee,36:ie,37:oe,38:pe,39:be,41:ae,43:ne,44:se,46:de,50:X,52:ge,53:W,54:xe,59:U,60:Fe,61:Pe,62:je,70:Ie},{16:[1,133]},{4:v,5:b,8:8,9:10,12:12,13:y,14:T,16:[2,46],17:15,18:_,21:A,22:40,23:P,24:19,25:20,26:21,27:22,28:23,29:R,30:F,31:j,33:K,35:ee,36:ie,37:oe,38:pe,39:be,41:ae,43:ne,44:se,46:de,49:[1,134],50:X,52:ge,53:W,54:xe,59:U,60:Fe,61:Pe,62:je,70:Ie},{16:[1,135]},{4:v,5:b,8:8,9:10,12:12,13:y,14:T,16:[2,44],17:15,18:_,21:A,22:40,23:P,24:19,25:20,26:21,27:22,28:23,29:R,30:F,31:j,33:K,35:ee,36:ie,37:oe,38:pe,39:be,41:ae,43:ne,44:se,46:de,48:[1,136],50:X,52:ge,53:W,54:xe,59:U,60:Fe,61:Pe,62:je,70:Ie},{16:[1,137]},{16:[1,138]},{4:v,5:b,8:8,9:10,12:12,13:y,14:T,16:[2,42],17:15,18:_,21:A,22:40,23:P,24:19,25:20,26:21,27:22,28:23,29:R,30:F,31:j,33:K,35:ee,36:ie,37:oe,38:pe,39:be,41:ae,43:ne,44:se,46:de,47:[1,139],50:X,52:ge,53:W,54:xe,59:U,60:Fe,61:Pe,62:je,70:Ie},{4:v,5:b,8:8,9:10,12:12,13:y,14:T,16:[1,140],17:15,18:_,21:A,22:40,23:P,24:19,25:20,26:21,27:22,28:23,29:R,30:F,31:j,33:K,35:ee,36:ie,37:oe,38:pe,39:be,41:ae,43:ne,44:se,46:de,50:X,52:ge,53:W,54:xe,59:U,60:Fe,61:Pe,62:je,70:Ie},{15:[1,141]},i(Se,[2,49]),{15:[1,142]},i(Se,[2,51]),i(Se,[2,52]),{22:143,70:Ie},{22:144,70:Ie},{56:145,79:_t},{56:146,79:_t},{56:147,79:_t},{64:[1,148],79:[2,62]},{5:[2,55]},{5:[2,77]},{5:[2,56]},{5:[2,57]},{5:[2,58]},i(Se,[2,16]),i(Ce,[2,10]),{12:149,50:X,52:ge,53:W},i(Ce,[2,12]),i(Ce,[2,13]),i(Se,[2,18]),i(Se,[2,34]),i(Se,[2,35]),i(Se,[2,36]),i(Se,[2,37]),{15:[1,150]},i(Se,[2,38]),{15:[1,151]},i(Se,[2,39]),i(Se,[2,40]),{15:[1,152]},i(Se,[2,41]),{5:[1,153]},{5:[1,154]},{56:155,79:_t},{56:156,79:_t},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:157,70:Ie},i(Ce,[2,11]),i(Ke,p,{7:101,40:158}),i(Ft,p,{7:103,42:159}),i(Ne,p,{7:106,45:160}),i(Se,[2,48]),i(Se,[2,50]),{5:[2,65]},{5:[2,66]},{79:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],85:[2,63],86:[2,64],119:[2,55],120:[2,77],121:[2,56],122:[2,57],123:[2,58],145:[2,67],146:[2,53],147:[2,54],155:[2,65],156:[2,66],157:[2,61],158:[2,47],159:[2,45],160:[2,43]},parseError:function(Pt,Qe){if(Qe.recoverable)this.trace(Pt);else{var Dt=new Error(Pt);throw Dt.hash=Qe,Dt}},parse:function(Pt){var Qe=this,Dt=[0],kt=[],On=[null],ht=[],zr=this.table,yt="",ji=0,xi=0,Ma=2,zs=1,ao=ht.slice.call(arguments,1),Tr=Object.create(this.lexer),Fn={yy:{}};for(var qn in this.yy)Object.prototype.hasOwnProperty.call(this.yy,qn)&&(Fn.yy[qn]=this.yy[qn]);Tr.setInput(Pt,Fn.yy),Fn.yy.lexer=Tr,Fn.yy.parser=this,typeof Tr.yylloc>"u"&&(Tr.yylloc={});var Un=Tr.yylloc;ht.push(Un);var At=Tr.options&&Tr.options.ranges;typeof Fn.yy.parseError=="function"?this.parseError=Fn.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function wt(){var da;return da=kt.pop()||Tr.lex()||zs,typeof da!="number"&&(da instanceof Array&&(kt=da,da=kt.pop()),da=Qe.symbols_[da]||da),da}for(var on,fn,An,oo,jo={},$o,Pa,wo,_s;;){if(fn=Dt[Dt.length-1],this.defaultActions[fn]?An=this.defaultActions[fn]:((on===null||typeof on>"u")&&(on=wt()),An=zr[fn]&&zr[fn][on]),typeof An>"u"||!An.length||!An[0]){var tl="";_s=[];for($o in zr[fn])this.terminals_[$o]&&$o>Ma&&_s.push("'"+this.terminals_[$o]+"'");Tr.showPosition?tl="Parse error on line "+(ji+1)+`: +`+Tr.showPosition()+` +Expecting `+_s.join(", ")+", got '"+(this.terminals_[on]||on)+"'":tl="Parse error on line "+(ji+1)+": Unexpected "+(on==zs?"end of input":"'"+(this.terminals_[on]||on)+"'"),this.parseError(tl,{text:Tr.match,token:this.terminals_[on]||on,line:Tr.yylineno,loc:Un,expected:_s})}if(An[0]instanceof Array&&An.length>1)throw new Error("Parse Error: multiple actions possible at state: "+fn+", token: "+on);switch(An[0]){case 1:Dt.push(on),On.push(Tr.yytext),ht.push(Tr.yylloc),Dt.push(An[1]),on=null,xi=Tr.yyleng,yt=Tr.yytext,ji=Tr.yylineno,Un=Tr.yylloc;break;case 2:if(Pa=this.productions_[An[1]][1],jo.$=On[On.length-Pa],jo._$={first_line:ht[ht.length-(Pa||1)].first_line,last_line:ht[ht.length-1].last_line,first_column:ht[ht.length-(Pa||1)].first_column,last_column:ht[ht.length-1].last_column},At&&(jo._$.range=[ht[ht.length-(Pa||1)].range[0],ht[ht.length-1].range[1]]),oo=this.performAction.apply(jo,[yt,xi,ji,Fn.yy,An[1],On,ht].concat(ao)),typeof oo<"u")return oo;Pa&&(Dt=Dt.slice(0,-1*Pa*2),On=On.slice(0,-1*Pa),ht=ht.slice(0,-1*Pa)),Dt.push(this.productions_[An[1]][0]),On.push(jo.$),ht.push(jo._$),wo=zr[Dt[Dt.length-2]][Dt[Dt.length-1]],Dt.push(wo);break;case 3:return!0}}return!0}},Gt=function(){var xt={EOF:1,parseError:function(Qe,Dt){if(this.yy.parser)this.yy.parser.parseError(Qe,Dt);else throw new Error(Qe)},setInput:function(Pt,Qe){return this.yy=Qe||this.yy||{},this._input=Pt,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Pt=this._input[0];this.yytext+=Pt,this.yyleng++,this.offset++,this.match+=Pt,this.matched+=Pt;var Qe=Pt.match(/(?:\r\n?|\n).*/g);return Qe?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Pt},unput:function(Pt){var Qe=Pt.length,Dt=Pt.split(/(?:\r\n?|\n)/g);this._input=Pt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Qe),this.offset-=Qe;var kt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Dt.length-1&&(this.yylineno-=Dt.length-1);var On=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Dt?(Dt.length===kt.length?this.yylloc.first_column:0)+kt[kt.length-Dt.length].length-Dt[0].length:this.yylloc.first_column-Qe},this.options.ranges&&(this.yylloc.range=[On[0],On[0]+this.yyleng-Qe]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Pt){this.unput(this.match.slice(Pt))},pastInput:function(){var Pt=this.matched.substr(0,this.matched.length-this.match.length);return(Pt.length>20?"...":"")+Pt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Pt=this.match;return Pt.length<20&&(Pt+=this._input.substr(0,20-Pt.length)),(Pt.substr(0,20)+(Pt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Pt=this.pastInput(),Qe=new Array(Pt.length+1).join("-");return Pt+this.upcomingInput()+` +`+Qe+"^"},test_match:function(Pt,Qe){var Dt,kt,On;if(this.options.backtrack_lexer&&(On={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(On.yylloc.range=this.yylloc.range.slice(0))),kt=Pt[0].match(/(?:\r\n?|\n).*/g),kt&&(this.yylineno+=kt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:kt?kt[kt.length-1].length-kt[kt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Pt[0].length},this.yytext+=Pt[0],this.match+=Pt[0],this.matches=Pt,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Pt[0].length),this.matched+=Pt[0],Dt=this.performAction.call(this,this.yy,this,Qe,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Dt)return Dt;if(this._backtrack){for(var ht in On)this[ht]=On[ht];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Pt,Qe,Dt,kt;this._more||(this.yytext="",this.match="");for(var On=this._currentRules(),ht=0;htQe[0].length)){if(Qe=Dt,kt=ht,this.options.backtrack_lexer){if(Pt=this.test_match(Dt,On[ht]),Pt!==!1)return Pt;if(this._backtrack){Qe=!1;continue}else return!1}else if(!this.options.flex)break}return Qe?(Pt=this.test_match(Qe,On[kt]),Pt!==!1?Pt:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Qe=this.next();return Qe||this.lex()},begin:function(Qe){this.conditionStack.push(Qe)},popState:function(){var Qe=this.conditionStack.length-1;return Qe>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Qe){return Qe=this.conditionStack.length-1-Math.abs(Qe||0),Qe>=0?this.conditionStack[Qe]:"INITIAL"},pushState:function(Qe){this.begin(Qe)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Qe,Dt,kt,On){switch(kt){case 0:return 5;case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:return 19;case 7:return this.begin("LINE"),14;case 8:return this.begin("ID"),50;case 9:return this.begin("ID"),52;case 10:return 13;case 11:return this.begin("ID"),53;case 12:return Dt.yytext=Dt.yytext.trim(),this.begin("ALIAS"),70;case 13:return this.popState(),this.popState(),this.begin("LINE"),51;case 14:return this.popState(),this.popState(),5;case 15:return this.begin("LINE"),36;case 16:return this.begin("LINE"),37;case 17:return this.begin("LINE"),38;case 18:return this.begin("LINE"),39;case 19:return this.begin("LINE"),49;case 20:return this.begin("LINE"),41;case 21:return this.begin("LINE"),43;case 22:return this.begin("LINE"),48;case 23:return this.begin("LINE"),44;case 24:return this.begin("LINE"),47;case 25:return this.begin("LINE"),46;case 26:return this.popState(),15;case 27:return 16;case 28:return 65;case 29:return 66;case 30:return 59;case 31:return 60;case 32:return 61;case 33:return 62;case 34:return 57;case 35:return 54;case 36:return this.begin("ID"),21;case 37:return this.begin("ID"),23;case 38:return 29;case 39:return 30;case 40:return this.begin("acc_title"),31;case 41:return this.popState(),"acc_title_value";case 42:return this.begin("acc_descr"),33;case 43:return this.popState(),"acc_descr_value";case 44:this.begin("acc_descr_multiline");break;case 45:this.popState();break;case 46:return"acc_descr_multiline_value";case 47:return 6;case 48:return 18;case 49:return 20;case 50:return 64;case 51:return 5;case 52:return Dt.yytext=Dt.yytext.trim(),70;case 53:return 73;case 54:return 74;case 55:return 71;case 56:return 72;case 57:return 75;case 58:return 76;case 59:return 77;case 60:return 78;case 61:return 79;case 62:return 68;case 63:return 69;case 64:return 5;case 65:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:create\b)/i,/^(?:destroy\b)/i,/^(?:[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:par_over\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[45,46],inclusive:!1},acc_descr:{rules:[43],inclusive:!1},acc_title:{rules:[41],inclusive:!1},ID:{rules:[2,3,12],inclusive:!1},ALIAS:{rules:[2,3,13,14],inclusive:!1},LINE:{rules:[2,3,26],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,6,7,8,9,10,11,15,16,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,44,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65],inclusive:!0}}};return xt}();Et.lexer=Gt;function ln(){this.yy={}}return ln.prototype=Et,Et.Parser=ln,new ln}();yve.parser=yve;const yrn=yve;class xrn{constructor(s){this.init=s,this.records=this.init()}reset(){this.records=this.init()}}const Ds=new xrn(()=>({prevActor:void 0,actors:{},createdActors:{},destroyedActors:{},boxes:[],messages:[],notes:[],sequenceNumbersEnabled:!1,wrapEnabled:void 0,currentBox:void 0,lastCreated:void 0,lastDestroyed:void 0})),krn=function(i){Ds.records.boxes.push({name:i.text,wrap:i.wrap===void 0&&JC()||!!i.wrap,fill:i.color,actorKeys:[]}),Ds.records.currentBox=Ds.records.boxes.slice(-1)[0]},xve=function(i,s,u,d){let p=Ds.records.currentBox;const v=Ds.records.actors[i];if(v){if(Ds.records.currentBox&&v.box&&Ds.records.currentBox!==v.box)throw new Error("A same participant should only be defined in one Box: "+v.name+" can't be in '"+v.box.name+"' and in '"+Ds.records.currentBox.name+"' at the same time.");if(p=v.box?v.box:Ds.records.currentBox,v.box=p,v&&s===v.name&&u==null)return}(u==null||u.text==null)&&(u={text:s,wrap:null,type:d}),(d==null||u.text==null)&&(u={text:s,wrap:null,type:d}),Ds.records.actors[i]={box:p,name:s,description:u.text,wrap:u.wrap===void 0&&JC()||!!u.wrap,prevActor:Ds.records.prevActor,links:{},properties:{},actorCnt:null,rectData:null,type:d||"participant"},Ds.records.prevActor&&Ds.records.actors[Ds.records.prevActor]&&(Ds.records.actors[Ds.records.prevActor].nextActor=i),Ds.records.currentBox&&Ds.records.currentBox.actorKeys.push(i),Ds.records.prevActor=i},Ern=i=>{let s,u=0;for(s=0;s>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},b}return Ds.records.messages.push({from:i,to:s,message:u.text,wrap:u.wrap===void 0&&JC()||!!u.wrap,type:d,activate:p}),!0},Crn=function(){return Ds.records.boxes.length>0},Srn=function(){return Ds.records.boxes.some(i=>i.name)},_rn=function(){return Ds.records.messages},Arn=function(){return Ds.records.boxes},Lrn=function(){return Ds.records.actors},Mrn=function(){return Ds.records.createdActors},Drn=function(){return Ds.records.destroyedActors},GR=function(i){return Ds.records.actors[i]},Irn=function(){return Object.keys(Ds.records.actors)},Orn=function(){Ds.records.sequenceNumbersEnabled=!0},Nrn=function(){Ds.records.sequenceNumbersEnabled=!1},Prn=()=>Ds.records.sequenceNumbersEnabled,Brn=function(i){Ds.records.wrapEnabled=i},JC=()=>Ds.records.wrapEnabled!==void 0?Ds.records.wrapEnabled:qt().sequence.wrap,Frn=function(){Ds.reset(),Pg()},Rrn=function(i){const s=i.trim(),u={text:s.replace(/^:?(?:no)?wrap:/,"").trim(),wrap:s.match(/^:?wrap:/)!==null?!0:s.match(/^:?nowrap:/)!==null?!1:void 0};return Xe.debug("parseMessage:",u),u},jrn=function(i){const s=i.match(/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/);let u=s!=null&&s[1]?s[1].trim():"transparent",d=s!=null&&s[2]?s[2].trim():void 0;if(window&&window.CSS)window.CSS.supports("color",u)||(u="transparent",d=i.trim());else{const p=new Option().style;p.color=u,p.color!==u&&(u="transparent",d=i.trim())}return{color:u,text:d!==void 0?Yf(d.replace(/^:?(?:no)?wrap:/,""),qt()):void 0,wrap:d!==void 0?d.match(/^:?wrap:/)!==null?!0:d.match(/^:?nowrap:/)!==null?!1:void 0:void 0}},KR={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31,PAR_OVER_START:32},$rn={FILLED:0,OPEN:1},zrn={LEFTOF:0,RIGHTOF:1,OVER:2},DGe=function(i,s,u){const d={actor:i,placement:s,message:u.text,wrap:u.wrap===void 0&&JC()||!!u.wrap},p=[].concat(i,i);Ds.records.notes.push(d),Ds.records.messages.push({from:p[0],to:p[1],message:u.text,wrap:u.wrap===void 0&&JC()||!!u.wrap,type:KR.NOTE,placement:s})},IGe=function(i,s){const u=GR(i);try{let d=Yf(s.text,qt());d=d.replace(/&/g,"&"),d=d.replace(/=/g,"=");const p=JSON.parse(d);kve(u,p)}catch(d){Xe.error("error while parsing actor link text",d)}},qrn=function(i,s){const u=GR(i);try{const b={};let y=Yf(s.text,qt());var d=y.indexOf("@");y=y.replace(/&/g,"&"),y=y.replace(/=/g,"=");var p=y.slice(0,d-1).trim(),v=y.slice(d+1).trim();b[p]=v,kve(u,b)}catch(b){Xe.error("error while parsing actor link text",b)}};function kve(i,s){if(i.links==null)i.links=s;else for(let u in s)i.links[u]=s[u]}const OGe=function(i,s){const u=GR(i);try{let d=Yf(s.text,qt());const p=JSON.parse(d);NGe(u,p)}catch(d){Xe.error("error while parsing actor properties text",d)}};function NGe(i,s){if(i.properties==null)i.properties=s;else for(let u in s)i.properties[u]=s[u]}function Hrn(){Ds.records.currentBox=void 0}const PGe=function(i,s){const u=GR(i),d=document.getElementById(s.text);try{const p=d.innerHTML,v=JSON.parse(p);v.properties&&NGe(u,v.properties),v.links&&kve(u,v.links)}catch(p){Xe.error("error while parsing actor details text",p)}},Vrn=function(i,s){if(i!==void 0&&i.properties!==void 0)return i.properties[s]},BGe=function(i){if(Array.isArray(i))i.forEach(function(s){BGe(s)});else switch(i.type){case"sequenceIndex":Ds.records.messages.push({from:void 0,to:void 0,message:{start:i.sequenceIndex,step:i.sequenceIndexStep,visible:i.sequenceVisible},wrap:!1,type:i.signalType});break;case"addParticipant":xve(i.actor,i.actor,i.description,i.draw);break;case"createParticipant":if(Ds.records.actors[i.actor])throw new Error("It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior");Ds.records.lastCreated=i.actor,xve(i.actor,i.actor,i.description,i.draw),Ds.records.createdActors[i.actor]=Ds.records.messages.length;break;case"destroyParticipant":Ds.records.lastDestroyed=i.actor,Ds.records.destroyedActors[i.actor]=Ds.records.messages.length;break;case"activeStart":Jf(i.actor,void 0,void 0,i.signalType);break;case"activeEnd":Jf(i.actor,void 0,void 0,i.signalType);break;case"addNote":DGe(i.actor,i.placement,i.text);break;case"addLinks":IGe(i.actor,i.text);break;case"addALink":qrn(i.actor,i.text);break;case"addProperties":OGe(i.actor,i.text);break;case"addDetails":PGe(i.actor,i.text);break;case"addMessage":if(Ds.records.lastCreated){if(i.to!==Ds.records.lastCreated)throw new Error("The created participant "+Ds.records.lastCreated+" does not have an associated creating message after its declaration. Please check the sequence diagram.");Ds.records.lastCreated=void 0}else if(Ds.records.lastDestroyed){if(i.to!==Ds.records.lastDestroyed&&i.from!==Ds.records.lastDestroyed)throw new Error("The destroyed participant "+Ds.records.lastDestroyed+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");Ds.records.lastDestroyed=void 0}Jf(i.from,i.to,i.msg,i.signalType,i.activate);break;case"boxStart":krn(i.boxData);break;case"boxEnd":Hrn();break;case"loopStart":Jf(void 0,void 0,i.loopText,i.signalType);break;case"loopEnd":Jf(void 0,void 0,void 0,i.signalType);break;case"rectStart":Jf(void 0,void 0,i.color,i.signalType);break;case"rectEnd":Jf(void 0,void 0,void 0,i.signalType);break;case"optStart":Jf(void 0,void 0,i.optText,i.signalType);break;case"optEnd":Jf(void 0,void 0,void 0,i.signalType);break;case"altStart":Jf(void 0,void 0,i.altText,i.signalType);break;case"else":Jf(void 0,void 0,i.altText,i.signalType);break;case"altEnd":Jf(void 0,void 0,void 0,i.signalType);break;case"setAccTitle":Bg(i.text);break;case"parStart":Jf(void 0,void 0,i.parText,i.signalType);break;case"and":Jf(void 0,void 0,i.parText,i.signalType);break;case"parEnd":Jf(void 0,void 0,void 0,i.signalType);break;case"criticalStart":Jf(void 0,void 0,i.criticalText,i.signalType);break;case"option":Jf(void 0,void 0,i.optionText,i.signalType);break;case"criticalEnd":Jf(void 0,void 0,void 0,i.signalType);break;case"breakStart":Jf(void 0,void 0,i.breakText,i.signalType);break;case"breakEnd":Jf(void 0,void 0,void 0,i.signalType);break}},FGe={addActor:xve,addMessage:Trn,addSignal:Jf,addLinks:IGe,addDetails:PGe,addProperties:OGe,autoWrap:JC,setWrap:Brn,enableSequenceNumbers:Orn,disableSequenceNumbers:Nrn,showSequenceNumbers:Prn,getMessages:_rn,getActors:Lrn,getCreatedActors:Mrn,getDestroyedActors:Drn,getActor:GR,getActorKeys:Irn,getActorProperty:Vrn,getAccTitle:Cp,getBoxes:Arn,getDiagramTitle:Ap,setDiagramTitle:cm,getConfig:()=>qt().sequence,clear:Frn,parseMessage:Rrn,parseBoxData:jrn,LINETYPE:KR,ARROWTYPE:$rn,PLACEMENT:zrn,addNote:DGe,setAccTitle:Bg,apply:BGe,setAccDescription:Sp,getAccDescription:_p,hasAtLeastOneBox:Crn,hasAtLeastOneBoxWithTitle:Srn},Urn=i=>`.actor { stroke: ${i.actorBorder}; fill: ${i.actorBkg}; } @@ -826,12 +1091,12 @@ Expecting `+vs.join(", ")+", got '"+(this.terminals_[He]||He)+"'":ru="Parse erro fill: ${i.actorBkg}; stroke-width: 2px; } -`,_T=18*2,ygt=function(i,a){return JW(i,a)},ORt=(i,a)=>{vAe(()=>{const f=document.querySelectorAll(i);f.length!==0&&(f[0].addEventListener("mouseover",function(){AVe("actor"+a+"_popup")}),f[0].addEventListener("mouseout",function(){LVe("actor"+a+"_popup")}))})},CVe=function(i,a,f,p,w){if(a.links===void 0||a.links===null||Object.keys(a.links).length===0)return{height:0,width:0};const m=a.links,b=a.actorCnt,E=a.rectData;var _="none";w&&(_="block !important");const A=i.append("g");A.attr("id","actor"+b+"_popup"),A.attr("class","actorPopupMenu"),A.attr("display",_),ORt("#actor"+b+"_popup",b);var I="";E.class!==void 0&&(I=" "+E.class);let B=E.width>f?E.width:f;const N=A.append("rect");if(N.attr("class","actorPopupMenuPanel"+I),N.attr("x",E.x),N.attr("y",E.height),N.attr("fill",E.fill),N.attr("stroke",E.stroke),N.attr("width",B),N.attr("height",E.height),N.attr("rx",E.rx),N.attr("ry",E.ry),m!=null){var R=20;for(let et in m){var z=A.append("a"),W=ik(m[et]);z.attr("xlink:href",W),z.attr("target","_blank"),GVe(p)(et,z,E.x+10,E.height+R,B,20,{class:"actor"},p),R+=30}}return N.attr("height",R),{height:E.height+R,width:B}},_Ve=function(i){return"var pu = document.getElementById('"+i+"'); if (pu != null) { pu.style.display = 'block'; }"},SVe=function(i){return"var pu = document.getElementById('"+i+"'); if (pu != null) { pu.style.display = 'none'; }"},AVe=function(i){var a=document.getElementById(i);a!=null&&(a.style.display="block")},LVe=function(i){var a=document.getElementById(i);a!=null&&(a.style.display="none")},pL=function(i,a){let f=0,p=0;const w=a.text.split(Kr.lineBreakRegex),[m,b]=VA(a.fontSize);let E=[],_=0,A=()=>a.y;if(a.valign!==void 0&&a.textMargin!==void 0&&a.textMargin>0)switch(a.valign){case"top":case"start":A=()=>Math.round(a.y+a.textMargin);break;case"middle":case"center":A=()=>Math.round(a.y+(f+p+a.textMargin)/2);break;case"bottom":case"end":A=()=>Math.round(a.y+(f+p+2*a.textMargin)-a.textMargin);break}if(a.anchor!==void 0&&a.textMargin!==void 0&&a.width!==void 0)switch(a.anchor){case"left":case"start":a.x=Math.round(a.x+a.textMargin),a.anchor="start",a.dominantBaseline="middle",a.alignmentBaseline="middle";break;case"middle":case"center":a.x=Math.round(a.x+a.width/2),a.anchor="middle",a.dominantBaseline="middle",a.alignmentBaseline="middle";break;case"right":case"end":a.x=Math.round(a.x+a.width-a.textMargin),a.anchor="end",a.dominantBaseline="middle",a.alignmentBaseline="middle";break}for(let[I,B]of w.entries()){a.textMargin!==void 0&&a.textMargin===0&&m!==void 0&&(_=I*m);const N=i.append("text");N.attr("x",a.x),N.attr("y",A()),a.anchor!==void 0&&N.attr("text-anchor",a.anchor).attr("dominant-baseline",a.dominantBaseline).attr("alignment-baseline",a.alignmentBaseline),a.fontFamily!==void 0&&N.style("font-family",a.fontFamily),b!==void 0&&N.style("font-size",b),a.fontWeight!==void 0&&N.style("font-weight",a.fontWeight),a.fill!==void 0&&N.attr("fill",a.fill),a.class!==void 0&&N.attr("class",a.class),a.dy!==void 0?N.attr("dy",a.dy):_!==0&&N.attr("dy",_);const R=B||jIt;if(a.tspan){const z=N.append("tspan");z.attr("x",a.x),a.fill!==void 0&&z.attr("fill",a.fill),z.text(R)}else N.text(R);a.valign!==void 0&&a.textMargin!==void 0&&a.textMargin>0&&(p+=(N._groups||N)[0][0].getBBox().height,f=p),E.push(N)}return E},PRt=function(i,a){function f(w,m,b,E,_){return w+","+m+" "+(w+b)+","+m+" "+(w+b)+","+(m+E-_)+" "+(w+b-_*1.2)+","+(m+E)+" "+w+","+(m+E)}const p=i.append("polygon");return p.attr("points",f(a.x,a.y,a.width,a.height,7)),p.attr("class","labelBox"),a.y=a.y+a.height/2,pL(i,a),p};let gm=-1;const FRt=(i,a,f,p)=>{i.select&&f.forEach(w=>{const m=a[w],b=i.select("#actor"+m.actorCnt);!p.mirrorActors&&m.stopy?b.attr("y2",m.stopy+m.height/2):p.mirrorActors&&b.attr("y2",m.stopy)})},MVe=function(i,a,f,p){const w=p?a.stopy:a.starty,m=a.x+a.width/2,b=w+5,E=i.append("g").lower();var _=E;p||(gm++,_.append("line").attr("id","actor"+gm).attr("x1",m).attr("y1",b).attr("x2",m).attr("y2",2e3).attr("class","actor-line").attr("class","200").attr("stroke-width","0.5px").attr("stroke","#999"),_=E.append("g"),a.actorCnt=gm,a.links!=null&&(_.attr("id","root-"+gm),ORt("#root-"+gm,gm)));const A=bT();var I="actor";a.properties!=null&&a.properties.class?I=a.properties.class:A.fill="#eaeaea",A.x=a.x,A.y=w,A.width=a.width,A.height=a.height,A.class=I,A.rx=3,A.ry=3;const B=ygt(_,A);if(a.rectData=A,a.properties!=null&&a.properties.icon){const R=a.properties.icon.trim();R.charAt(0)==="@"?$De(_,A.x+A.width-20,A.y+10,R.substr(1)):jDe(_,A.x+A.width-20,A.y+10,R)}xgt(f)(a.description,_,A.x,A.y,A.width,A.height,{class:"actor"},f);let N=a.height;if(B.node){const R=B.node().getBBox();a.height=R.height,N=R.height}return N},DVe=function(i,a,f,p){const w=p?a.stopy:a.starty,m=a.x+a.width/2,b=w+80;i.lower(),p||(gm++,i.append("line").attr("id","actor"+gm).attr("x1",m).attr("y1",b).attr("x2",m).attr("y2",2e3).attr("class","actor-line").attr("class","200").attr("stroke-width","0.5px").attr("stroke","#999"),a.actorCnt=gm);const E=i.append("g");E.attr("class","actor-man");const _=bT();_.x=a.x,_.y=w,_.fill="#eaeaea",_.width=a.width,_.height=a.height,_.class="actor",_.rx=3,_.ry=3,E.append("line").attr("id","actor-man-torso"+gm).attr("x1",m).attr("y1",w+25).attr("x2",m).attr("y2",w+45),E.append("line").attr("id","actor-man-arms"+gm).attr("x1",m-_T/2).attr("y1",w+33).attr("x2",m+_T/2).attr("y2",w+33),E.append("line").attr("x1",m-_T/2).attr("y1",w+60).attr("x2",m).attr("y2",w+45),E.append("line").attr("x1",m).attr("y1",w+45).attr("x2",m+_T/2-2).attr("y2",w+60);const A=E.append("circle");A.attr("cx",a.x+a.width/2),A.attr("cy",w+10),A.attr("r",15),A.attr("width",a.width),A.attr("height",a.height);const I=E.node().getBBox();return a.height=I.height,xgt(f)(a.description,E,_.x,_.y+35,_.width,_.height,{class:"actor"},f),a.height},IVe=function(i,a,f,p){switch(a.type){case"actor":return DVe(i,a,f,p);case"participant":return MVe(i,a,f,p)}},OVe=function(i,a,f){const w=i.append("g");NRt(w,a),a.name&&xgt(f)(a.name,w,a.x,a.y+(a.textMaxHeight||0)/2,a.width,0,{class:"text"},f),w.lower()},PVe=function(i){return i.append("g")},FVe=function(i,a,f,p,w){const m=bT(),b=a.anchored;m.x=a.startx,m.y=a.starty,m.class="activation"+w%3,m.width=a.stopx-a.startx,m.height=f-a.starty,ygt(b,m)},NVe=function(i,a,f,p){const{boxMargin:w,boxTextMargin:m,labelBoxHeight:b,labelBoxWidth:E,messageFontFamily:_,messageFontSize:A,messageFontWeight:I}=p,B=i.append("g"),N=function(W,et,st,at){return B.append("line").attr("x1",W).attr("y1",et).attr("x2",st).attr("y2",at).attr("class","loopLine")};N(a.startx,a.starty,a.stopx,a.starty),N(a.stopx,a.starty,a.stopx,a.stopy),N(a.startx,a.stopy,a.stopx,a.stopy),N(a.startx,a.starty,a.startx,a.stopy),a.sections!==void 0&&a.sections.forEach(function(W){N(a.startx,W.y,a.stopx,W.y).style("stroke-dasharray","3, 3")});let R=Rdt();R.text=f,R.x=a.startx,R.y=a.starty,R.fontFamily=_,R.fontSize=A,R.fontWeight=I,R.anchor="middle",R.valign="middle",R.tspan=!1,R.width=E||50,R.height=b||20,R.textMargin=m,R.class="labelText",PRt(B,R),R=BRt(),R.text=a.title,R.x=a.startx+E/2+(a.stopx-a.startx)/2,R.y=a.starty+w+m,R.anchor="middle",R.valign="middle",R.textMargin=m,R.class="loopText",R.fontFamily=_,R.fontSize=A,R.fontWeight=I,R.wrap=!0;let z=pL(B,R);return a.sectionTitles!==void 0&&a.sectionTitles.forEach(function(W,et){if(W.message){R.text=W.message,R.x=a.startx+(a.stopx-a.startx)/2,R.y=a.sections[et].y+w+m,R.class="loopText",R.anchor="middle",R.valign="middle",R.tspan=!1,R.fontFamily=_,R.fontSize=A,R.fontWeight=I,R.wrap=a.wrap,z=pL(B,R);let st=Math.round(z.map(at=>(at._groups||at)[0][0].getBBox().height).reduce((at,bt)=>at+bt));a.sections[et].height+=st-(w+m)}}),a.height=Math.round(a.stopy-a.starty),B},NRt=function(i,a){mPt(i,a)},BVe=function(i){i.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},RVe=function(i){i.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},jVe=function(i){i.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},$Ve=function(i){i.append("defs").append("marker").attr("id","arrowhead").attr("refX",7.9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},zVe=function(i){i.append("defs").append("marker").attr("id","filled-head").attr("refX",15.5).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},qVe=function(i){i.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},HVe=function(i){i.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",4.5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},BRt=function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},VVe=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},xgt=function(){function i(w,m,b,E,_,A,I){const B=m.append("text").attr("x",b+_/2).attr("y",E+A/2+5).style("text-anchor","middle").text(w);p(B,I)}function a(w,m,b,E,_,A,I,B){const{actorFontSize:N,actorFontFamily:R,actorFontWeight:z}=B,[W,et]=VA(N),st=w.split(Kr.lineBreakRegex);for(let at=0;ati.height||0))+(this.loops.length===0?0:this.loops.map(i=>i.height||0).reduce((i,a)=>i+a))+(this.messages.length===0?0:this.messages.map(i=>i.height||0).reduce((i,a)=>i+a))+(this.notes.length===0?0:this.notes.map(i=>i.height||0).reduce((i,a)=>i+a))},clear:function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},addBox:function(i){this.boxes.push(i)},addActor:function(i){this.actors.push(i)},addLoop:function(i){this.loops.push(i)},addMessage:function(i){this.messages.push(i)},addNote:function(i){this.notes.push(i)},lastActor:function(){return this.actors[this.actors.length-1]},lastLoop:function(){return this.loops[this.loops.length-1]},lastMessage:function(){return this.messages[this.messages.length-1]},lastNote:function(){return this.notes[this.notes.length-1]},actors:[],boxes:[],loops:[],messages:[],notes:[]},init:function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,jRt(Oe())},updateVal:function(i,a,f,p){i[a]===void 0?i[a]=f:i[a]=p(f,i[a])},updateBounds:function(i,a,f,p){const w=this;let m=0;function b(E){return function(A){m++;const I=w.sequenceItems.length-m+1;w.updateVal(A,"starty",a-I*fn.boxMargin,Math.min),w.updateVal(A,"stopy",p+I*fn.boxMargin,Math.max),w.updateVal(Fr.data,"startx",i-I*fn.boxMargin,Math.min),w.updateVal(Fr.data,"stopx",f+I*fn.boxMargin,Math.max),E!=="activation"&&(w.updateVal(A,"startx",i-I*fn.boxMargin,Math.min),w.updateVal(A,"stopx",f+I*fn.boxMargin,Math.max),w.updateVal(Fr.data,"starty",a-I*fn.boxMargin,Math.min),w.updateVal(Fr.data,"stopy",p+I*fn.boxMargin,Math.max))}}this.sequenceItems.forEach(b()),this.activations.forEach(b("activation"))},insert:function(i,a,f,p){const w=Kr.getMin(i,f),m=Kr.getMax(i,f),b=Kr.getMin(a,p),E=Kr.getMax(a,p);this.updateVal(Fr.data,"startx",w,Math.min),this.updateVal(Fr.data,"starty",b,Math.min),this.updateVal(Fr.data,"stopx",m,Math.max),this.updateVal(Fr.data,"stopy",E,Math.max),this.updateBounds(w,b,m,E)},newActivation:function(i,a,f){const p=f[i.from.actor],w=jY(i.from.actor).length||0,m=p.x+p.width/2+(w-1)*fn.activationWidth/2;this.activations.push({startx:m,starty:this.verticalPos+2,stopx:m+fn.activationWidth,stopy:void 0,actor:i.from.actor,anchored:nf.anchorElement(a)})},endActivation:function(i){const a=this.activations.map(function(f){return f.actor}).lastIndexOf(i.from.actor);return this.activations.splice(a,1)[0]},createLoop:function(i={message:void 0,wrap:!1,width:void 0},a){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:i.message,wrap:i.wrap,width:i.width,height:0,fill:a}},newLoop:function(i={message:void 0,wrap:!1,width:void 0},a){this.sequenceItems.push(this.createLoop(i,a))},endLoop:function(){return this.sequenceItems.pop()},isLoopOverlap:function(){return this.sequenceItems.length?this.sequenceItems[this.sequenceItems.length-1].overlap:!1},addSectionToLoop:function(i){const a=this.sequenceItems.pop();a.sections=a.sections||[],a.sectionTitles=a.sectionTitles||[],a.sections.push({y:Fr.getVerticalPos(),height:0}),a.sectionTitles.push(i),this.sequenceItems.push(a)},saveVerticalPos:function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},resetVerticalPos:function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},bumpVerticalPos:function(i){this.verticalPos=this.verticalPos+i,this.data.stopy=Kr.getMax(this.data.stopy,this.verticalPos)},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return{bounds:this.data,models:this.models}}},UVe=function(i,a){Fr.bumpVerticalPos(fn.boxMargin),a.height=fn.boxMargin,a.starty=Fr.getVerticalPos();const f=bT();f.x=a.startx,f.y=a.starty,f.width=a.width||fn.width,f.class="note";const p=i.append("g"),w=nf.drawRect(p,f),m=Rdt();m.x=a.startx,m.y=a.starty,m.width=f.width,m.dy="1em",m.text=a.message,m.class="noteText",m.fontFamily=fn.noteFontFamily,m.fontSize=fn.noteFontSize,m.fontWeight=fn.noteFontWeight,m.anchor=fn.noteAlign,m.textMargin=fn.noteMargin,m.valign="center";const b=pL(p,m),E=Math.round(b.map(_=>(_._groups||_)[0][0].getBBox().height).reduce((_,A)=>_+A));w.attr("height",E+2*fn.noteMargin),a.height+=E+2*fn.noteMargin,Fr.bumpVerticalPos(E+2*fn.noteMargin),a.stopy=a.starty+E+2*fn.noteMargin,a.stopx=a.startx+f.width,Fr.insert(a.startx,a.starty,a.stopx,a.stopy),Fr.models.addNote(a)},ST=i=>({fontFamily:i.messageFontFamily,fontSize:i.messageFontSize,fontWeight:i.messageFontWeight}),bL=i=>({fontFamily:i.noteFontFamily,fontSize:i.noteFontSize,fontWeight:i.noteFontWeight}),kgt=i=>({fontFamily:i.actorFontFamily,fontSize:i.actorFontSize,fontWeight:i.actorFontWeight});function WVe(i,a){Fr.bumpVerticalPos(10);const{startx:f,stopx:p,message:w}=a,m=Kr.splitBreaks(w).length,b=$a.calculateTextDimensions(w,ST(fn)),E=b.height/m;a.height+=E,Fr.bumpVerticalPos(E);let _,A=b.height-10;const I=b.width;if(f===p){_=Fr.getVerticalPos()+A,fn.rightAngles||(A+=fn.boxMargin,_=Fr.getVerticalPos()+A),A+=30;const B=Kr.getMax(I/2,fn.width/2);Fr.insert(f-B,Fr.getVerticalPos()-10+A,p+B,Fr.getVerticalPos()+30+A)}else A+=fn.boxMargin,_=Fr.getVerticalPos()+A,Fr.insert(f,_-10,p,_);return Fr.bumpVerticalPos(A),a.height+=A,a.stopy=a.starty+a.height,Fr.insert(a.fromBounds,a.starty,a.toBounds,a.stopy),_}const YVe=function(i,a,f,p){const{startx:w,stopx:m,starty:b,message:E,type:_,sequenceIndex:A,sequenceVisible:I}=a,B=$a.calculateTextDimensions(E,ST(fn)),N=Rdt();N.x=w,N.y=b+10,N.width=m-w,N.class="messageText",N.dy="1em",N.text=E,N.fontFamily=fn.messageFontFamily,N.fontSize=fn.messageFontSize,N.fontWeight=fn.messageFontWeight,N.anchor=fn.messageAlign,N.valign="center",N.textMargin=fn.wrapPadding,N.tspan=!1,pL(i,N);const R=B.width;let z;w===m?fn.rightAngles?z=i.append("path").attr("d",`M ${w},${f} H ${w+Kr.getMax(fn.width/2,R/2)} V ${f+25} H ${w}`):z=i.append("path").attr("d","M "+w+","+f+" C "+(w+60)+","+(f-10)+" "+(w+60)+","+(f+30)+" "+w+","+(f+20)):(z=i.append("line"),z.attr("x1",w),z.attr("y1",f),z.attr("x2",m),z.attr("y2",f)),_===p.db.LINETYPE.DOTTED||_===p.db.LINETYPE.DOTTED_CROSS||_===p.db.LINETYPE.DOTTED_POINT||_===p.db.LINETYPE.DOTTED_OPEN?(z.style("stroke-dasharray","3, 3"),z.attr("class","messageLine1")):z.attr("class","messageLine0");let W="";fn.arrowMarkerAbsolute&&(W=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,W=W.replace(/\(/g,"\\("),W=W.replace(/\)/g,"\\)")),z.attr("stroke-width",2),z.attr("stroke","none"),z.style("fill","none"),(_===p.db.LINETYPE.SOLID||_===p.db.LINETYPE.DOTTED)&&z.attr("marker-end","url("+W+"#arrowhead)"),(_===p.db.LINETYPE.SOLID_POINT||_===p.db.LINETYPE.DOTTED_POINT)&&z.attr("marker-end","url("+W+"#filled-head)"),(_===p.db.LINETYPE.SOLID_CROSS||_===p.db.LINETYPE.DOTTED_CROSS)&&z.attr("marker-end","url("+W+"#crosshead)"),(I||fn.showSequenceNumbers)&&(z.attr("marker-start","url("+W+"#sequencenumber)"),i.append("text").attr("x",w).attr("y",f+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(A))},KVe=function(i,a,f,p,w,m,b){let E=0,_=0,A,I=0;for(const B of p){const N=a[B],R=N.box;A&&A!=R&&(b||Fr.models.addBox(A),_+=fn.boxMargin+A.margin),R&&R!=A&&(b||(R.x=E+_,R.y=w),_+=R.margin),N.width=N.width||fn.width,N.height=Kr.getMax(N.height||fn.height,fn.height),N.margin=N.margin||fn.actorMargin,I=Kr.getMax(I,N.height),f[N.name]&&(_+=N.width/2),N.x=E+_,N.starty=Fr.getVerticalPos(),Fr.insert(N.x,w,N.x+N.width,N.height),E+=N.width+_,N.box&&(N.box.width=E+R.margin-N.box.x),_=N.margin,A=N.box,Fr.models.addActor(N)}A&&!b&&Fr.models.addBox(A),Fr.bumpVerticalPos(I)},Egt=function(i,a,f,p){if(p){let w=0;Fr.bumpVerticalPos(fn.boxMargin*2);for(const m of f){const b=a[m];b.stopy||(b.stopy=Fr.getVerticalPos());const E=nf.drawActor(i,b,fn,!0);w=Kr.getMax(w,E)}Fr.bumpVerticalPos(w+fn.boxMargin)}else for(const w of f){const m=a[w];nf.drawActor(i,m,fn,!1)}},RRt=function(i,a,f,p){let w=0,m=0;for(const b of f){const E=a[b],_=JVe(E),A=nf.drawPopup(i,E,_,fn,fn.forceMenus,p);A.height>w&&(w=A.height),A.width+E.x>m&&(m=A.width+E.x)}return{maxHeight:w,maxWidth:m}},jRt=function(i){Z1(fn,i),i.fontFamily&&(fn.actorFontFamily=fn.noteFontFamily=fn.messageFontFamily=i.fontFamily),i.fontSize&&(fn.actorFontSize=fn.noteFontSize=fn.messageFontSize=i.fontSize),i.fontWeight&&(fn.actorFontWeight=fn.noteFontWeight=fn.messageFontWeight=i.fontWeight)},jY=function(i){return Fr.activations.filter(function(a){return a.actor===i})},$Rt=function(i,a){const f=a[i],p=jY(i),w=p.reduce(function(b,E){return Kr.getMin(b,E.startx)},f.x+f.width/2-1),m=p.reduce(function(b,E){return Kr.getMax(b,E.stopx)},f.x+f.width/2+1);return[w,m]};function k3(i,a,f,p,w){Fr.bumpVerticalPos(f);let m=p;if(a.id&&a.message&&i[a.id]){const b=i[a.id].width,E=ST(fn);a.message=$a.wrapLabel(`[${a.message}]`,b-2*fn.wrapPadding,E),a.width=b,a.wrap=!0;const _=$a.calculateTextDimensions(a.message,E),A=Kr.getMax(_.height,fn.labelBoxHeight);m=p+A,Ut.debug(`${A} - ${a.message}`)}w(a),Fr.bumpVerticalPos(m)}function XVe(i,a,f,p,w,m,b){function E(A,I){A.x{Et.add(Z.from),Et.add(Z.to)}),z=z.filter(Z=>Et.has(Z))}KVe(A,I,B,z,0,W,!1);const mt=rGe(W,I,bt,p);nf.insertArrowHead(A),nf.insertArrowCrossHead(A),nf.insertArrowFilledHead(A),nf.insertSequenceNumber(A);function yt(Et,Z){const Ct=Fr.endActivation(Et);Ct.starty+18>Z&&(Ct.starty=Z-6,Z+=12),nf.drawActivation(A,Ct,Z,fn,jY(Et.from.actor).length),Fr.insert(Ct.startx,Z-10,Ct.stopx,Z)}let ft=1,ut=1;const vt=[],X=[];W.forEach(function(Et,Z){let Ct,xt,Ht;switch(Et.type){case p.db.LINETYPE.NOTE:Fr.resetVerticalPos(),xt=Et.noteModel,UVe(A,xt);break;case p.db.LINETYPE.ACTIVE_START:Fr.newActivation(Et,A,I);break;case p.db.LINETYPE.ACTIVE_END:yt(Et,Fr.getVerticalPos());break;case p.db.LINETYPE.LOOP_START:k3(mt,Et,fn.boxMargin,fn.boxMargin+fn.boxTextMargin,Le=>Fr.newLoop(Le));break;case p.db.LINETYPE.LOOP_END:Ct=Fr.endLoop(),nf.drawLoop(A,Ct,"loop",fn),Fr.bumpVerticalPos(Ct.stopy-Fr.getVerticalPos()),Fr.models.addLoop(Ct);break;case p.db.LINETYPE.RECT_START:k3(mt,Et,fn.boxMargin,fn.boxMargin,Le=>Fr.newLoop(void 0,Le.message));break;case p.db.LINETYPE.RECT_END:Ct=Fr.endLoop(),X.push(Ct),Fr.models.addLoop(Ct),Fr.bumpVerticalPos(Ct.stopy-Fr.getVerticalPos());break;case p.db.LINETYPE.OPT_START:k3(mt,Et,fn.boxMargin,fn.boxMargin+fn.boxTextMargin,Le=>Fr.newLoop(Le));break;case p.db.LINETYPE.OPT_END:Ct=Fr.endLoop(),nf.drawLoop(A,Ct,"opt",fn),Fr.bumpVerticalPos(Ct.stopy-Fr.getVerticalPos()),Fr.models.addLoop(Ct);break;case p.db.LINETYPE.ALT_START:k3(mt,Et,fn.boxMargin,fn.boxMargin+fn.boxTextMargin,Le=>Fr.newLoop(Le));break;case p.db.LINETYPE.ALT_ELSE:k3(mt,Et,fn.boxMargin+fn.boxTextMargin,fn.boxMargin,Le=>Fr.addSectionToLoop(Le));break;case p.db.LINETYPE.ALT_END:Ct=Fr.endLoop(),nf.drawLoop(A,Ct,"alt",fn),Fr.bumpVerticalPos(Ct.stopy-Fr.getVerticalPos()),Fr.models.addLoop(Ct);break;case p.db.LINETYPE.PAR_START:case p.db.LINETYPE.PAR_OVER_START:k3(mt,Et,fn.boxMargin,fn.boxMargin+fn.boxTextMargin,Le=>Fr.newLoop(Le)),Fr.saveVerticalPos();break;case p.db.LINETYPE.PAR_AND:k3(mt,Et,fn.boxMargin+fn.boxTextMargin,fn.boxMargin,Le=>Fr.addSectionToLoop(Le));break;case p.db.LINETYPE.PAR_END:Ct=Fr.endLoop(),nf.drawLoop(A,Ct,"par",fn),Fr.bumpVerticalPos(Ct.stopy-Fr.getVerticalPos()),Fr.models.addLoop(Ct);break;case p.db.LINETYPE.AUTONUMBER:ft=Et.message.start||ft,ut=Et.message.step||ut,Et.message.visible?p.db.enableSequenceNumbers():p.db.disableSequenceNumbers();break;case p.db.LINETYPE.CRITICAL_START:k3(mt,Et,fn.boxMargin,fn.boxMargin+fn.boxTextMargin,Le=>Fr.newLoop(Le));break;case p.db.LINETYPE.CRITICAL_OPTION:k3(mt,Et,fn.boxMargin+fn.boxTextMargin,fn.boxMargin,Le=>Fr.addSectionToLoop(Le));break;case p.db.LINETYPE.CRITICAL_END:Ct=Fr.endLoop(),nf.drawLoop(A,Ct,"critical",fn),Fr.bumpVerticalPos(Ct.stopy-Fr.getVerticalPos()),Fr.models.addLoop(Ct);break;case p.db.LINETYPE.BREAK_START:k3(mt,Et,fn.boxMargin,fn.boxMargin+fn.boxTextMargin,Le=>Fr.newLoop(Le));break;case p.db.LINETYPE.BREAK_END:Ct=Fr.endLoop(),nf.drawLoop(A,Ct,"break",fn),Fr.bumpVerticalPos(Ct.stopy-Fr.getVerticalPos()),Fr.models.addLoop(Ct);break;default:try{Ht=Et.msgModel,Ht.starty=Fr.getVerticalPos(),Ht.sequenceIndex=ft,Ht.sequenceVisible=p.db.showSequenceNumbers();const Le=WVe(A,Ht);XVe(Et,Ht,Le,Z,I,B,N),vt.push({messageModel:Ht,lineStartY:Le}),Fr.models.addMessage(Ht)}catch(Le){Ut.error("error while drawing message",Le)}}[p.db.LINETYPE.SOLID_OPEN,p.db.LINETYPE.DOTTED_OPEN,p.db.LINETYPE.SOLID,p.db.LINETYPE.DOTTED,p.db.LINETYPE.SOLID_CROSS,p.db.LINETYPE.DOTTED_CROSS,p.db.LINETYPE.SOLID_POINT,p.db.LINETYPE.DOTTED_POINT].includes(Et.type)&&(ft=ft+ut)}),Ut.debug("createdActors",B),Ut.debug("destroyedActors",N),Egt(A,I,z,!1),vt.forEach(Et=>YVe(A,Et.messageModel,Et.lineStartY,p)),fn.mirrorActors&&Egt(A,I,z,!0),X.forEach(Et=>nf.drawBackgroundRect(A,Et)),FRt(A,I,z,fn),Fr.models.boxes.forEach(function(Et){Et.height=Fr.getVerticalPos()-Et.y,Fr.insert(Et.x,Et.y,Et.x+Et.width,Et.height),Et.startx=Et.x,Et.starty=Et.y,Et.stopx=Et.startx+Et.width,Et.stopy=Et.starty+Et.height,Et.stroke="rgb(0,0,0, 0.5)",nf.drawBox(A,Et,fn)}),st&&Fr.bumpVerticalPos(fn.boxMargin);const pt=RRt(A,I,z,_),{bounds:U}=Fr.getBounds();let Tt=U.stopy-U.starty;Tt{const b=i[m];b.wrap&&(b.description=$a.wrapLabel(b.description,fn.width-2*fn.wrapPadding,kgt(fn)));const E=$a.calculateTextDimensions(b.description,kgt(fn));b.width=b.wrap?fn.width:Kr.getMax(fn.width,E.width+2*fn.wrapPadding),b.height=b.wrap?Kr.getMax(E.height,fn.height):fn.height,p=Kr.getMax(p,b.height)});for(const m in a){const b=i[m];if(!b)continue;const E=i[b.nextActor];if(!E){const B=a[m]+fn.actorMargin-b.width/2;b.margin=Kr.getMax(B,fn.actorMargin);continue}const A=a[m]+fn.actorMargin-b.width/2-E.width/2;b.margin=Kr.getMax(A,fn.actorMargin)}let w=0;return f.forEach(m=>{const b=ST(fn);let E=m.actorKeys.reduce((I,B)=>I+=i[B].width+(i[B].margin||0),0);E-=2*fn.boxTextMargin,m.wrap&&(m.name=$a.wrapLabel(m.name,E-2*fn.wrapPadding,b));const _=$a.calculateTextDimensions(m.name,b);w=Kr.getMax(_.height,w);const A=Kr.getMax(E,_.width+2*fn.wrapPadding);if(m.margin=fn.boxTextMargin,Em.textMaxHeight=w),Kr.getMax(p,fn.height)}const eGe=function(i,a,f){const p=a[i.from].x,w=a[i.to].x,m=i.wrap&&i.message;let b=$a.calculateTextDimensions(m?$a.wrapLabel(i.message,fn.width,bL(fn)):i.message,bL(fn));const E={width:m?fn.width:Kr.getMax(fn.width,b.width+2*fn.noteMargin),height:0,startx:a[i.from].x,stopx:0,starty:0,stopy:0,message:i.message};return i.placement===f.db.PLACEMENT.RIGHTOF?(E.width=m?Kr.getMax(fn.width,b.width):Kr.getMax(a[i.from].width/2+a[i.to].width/2,b.width+2*fn.noteMargin),E.startx=p+(a[i.from].width+fn.actorMargin)/2):i.placement===f.db.PLACEMENT.LEFTOF?(E.width=m?Kr.getMax(fn.width,b.width+2*fn.noteMargin):Kr.getMax(a[i.from].width/2+a[i.to].width/2,b.width+2*fn.noteMargin),E.startx=p-E.width+(a[i.from].width-fn.actorMargin)/2):i.to===i.from?(b=$a.calculateTextDimensions(m?$a.wrapLabel(i.message,Kr.getMax(fn.width,a[i.from].width),bL(fn)):i.message,bL(fn)),E.width=m?Kr.getMax(fn.width,a[i.from].width):Kr.getMax(a[i.from].width,fn.width,b.width+2*fn.noteMargin),E.startx=p+(a[i.from].width-E.width)/2):(E.width=Math.abs(p+a[i.from].width/2-(w+a[i.to].width/2))+fn.actorMargin,E.startx=p2,B=W=>E?-W:W;i.from===i.to?A=_:(i.activate&&!I&&(A+=B(fn.activationWidth/2-1)),[f.db.LINETYPE.SOLID_OPEN,f.db.LINETYPE.DOTTED_OPEN].includes(i.type)||(A+=B(3)));const N=[p,w,m,b],R=Math.abs(_-A);i.wrap&&i.message&&(i.message=$a.wrapLabel(i.message,Kr.getMax(R+2*fn.wrapPadding,fn.width),ST(fn)));const z=$a.calculateTextDimensions(i.message,ST(fn));return{width:Kr.getMax(i.wrap?0:z.width+2*fn.wrapPadding,R+2*fn.wrapPadding,fn.width),height:0,startx:_,stopx:A,starty:0,stopy:0,message:i.message,type:i.type,wrap:i.wrap,fromBounds:Math.min.apply(null,N),toBounds:Math.max.apply(null,N)}},rGe=function(i,a,f,p){const w={},m=[];let b,E,_;return i.forEach(function(A){switch(A.id=$a.random({length:10}),A.type){case p.db.LINETYPE.LOOP_START:case p.db.LINETYPE.ALT_START:case p.db.LINETYPE.OPT_START:case p.db.LINETYPE.PAR_START:case p.db.LINETYPE.PAR_OVER_START:case p.db.LINETYPE.CRITICAL_START:case p.db.LINETYPE.BREAK_START:m.push({id:A.id,msg:A.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case p.db.LINETYPE.ALT_ELSE:case p.db.LINETYPE.PAR_AND:case p.db.LINETYPE.CRITICAL_OPTION:A.message&&(b=m.pop(),w[b.id]=b,w[A.id]=b,m.push(b));break;case p.db.LINETYPE.LOOP_END:case p.db.LINETYPE.ALT_END:case p.db.LINETYPE.OPT_END:case p.db.LINETYPE.PAR_END:case p.db.LINETYPE.CRITICAL_END:case p.db.LINETYPE.BREAK_END:b=m.pop(),w[b.id]=b;break;case p.db.LINETYPE.ACTIVE_START:{const B=a[A.from?A.from.actor:A.to.actor],N=jY(A.from?A.from.actor:A.to.actor).length,R=B.x+B.width/2+(N-1)*fn.activationWidth/2,z={startx:R,stopx:R+fn.activationWidth,actor:A.from.actor,enabled:!0};Fr.activations.push(z)}break;case p.db.LINETYPE.ACTIVE_END:{const B=Fr.activations.map(N=>N.actor).lastIndexOf(A.from.actor);delete Fr.activations.splice(B,1)[0]}break}A.placement!==void 0?(E=eGe(A,a,p),A.noteModel=E,m.forEach(B=>{b=B,b.from=Kr.getMin(b.from,E.startx),b.to=Kr.getMax(b.to,E.startx+E.width),b.width=Kr.getMax(b.width,Math.abs(b.from-b.to))-fn.labelBoxWidth})):(_=nGe(A,a,p),A.msgModel=_,_.startx&&_.stopx&&m.length>0&&m.forEach(B=>{if(b=B,_.startx===_.stopx){const N=a[A.from],R=a[A.to];b.from=Kr.getMin(N.x-_.width/2,N.x-N.width/2,b.from),b.to=Kr.getMax(R.x+_.width/2,R.x+N.width/2,b.to),b.width=Kr.getMax(b.width,Math.abs(b.to-b.from))-fn.labelBoxWidth}else b.from=Kr.getMin(_.startx,b.from),b.to=Kr.getMax(_.stopx,b.to),b.width=Kr.getMax(b.width,_.width)-fn.labelBoxWidth}))}),Fr.activations=[],Ut.debug("Loop type widths:",w),w},iGe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:tVe,db:IRt,renderer:{bounds:Fr,drawActors:Egt,drawActorsPopup:RRt,setConf:jRt,draw:QVe},styles:TVe,init:({wrap:i})=>{IRt.setWrap(i)}}},Symbol.toStringTag,{value:"Module"}));var Tgt=function(){var i=function(ke,zt,re,se){for(re=re||{},se=ke.length;se--;re[ke[se]]=zt);return re},a=[1,16],f=[1,17],p=[1,18],w=[1,37],m=[1,38],b=[1,24],E=[1,22],_=[1,23],A=[1,29],I=[1,30],B=[1,31],N=[1,32],R=[1,33],z=[1,34],W=[1,25],et=[1,26],st=[1,27],at=[1,28],bt=[1,42],mt=[1,39],yt=[1,40],ft=[1,41],ut=[1,43],vt=[1,9],X=[1,8,9],pt=[1,54],U=[1,55],Tt=[1,56],nt=[1,57],It=[1,58],Ot=[1,59],Bt=[1,60],Et=[1,8,9,38],Z=[1,71],Ct=[1,8,9,12,13,21,36,38,41,58,59,60,61,62,63,64,69,71],xt=[1,8,9,12,13,19,21,36,38,41,45,58,59,60,61,62,63,64,69,71,84,86,87,88,89],Ht=[13,84,86,87,88,89],Le=[13,63,64,84,86,87,88,89],Ft=[13,58,59,60,61,62,84,86,87,88,89],gn=[1,90],Se=[1,8,9,36,38,41],me=[1,8,9,21],Ve={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,className:17,classLiteralName:18,GENERICTYPE:19,relationStatement:20,LABEL:21,namespaceStatement:22,classStatement:23,memberStatement:24,annotationStatement:25,clickStatement:26,cssClassStatement:27,noteStatement:28,direction:29,acc_title:30,acc_title_value:31,acc_descr:32,acc_descr_value:33,acc_descr_multiline_value:34,namespaceIdentifier:35,STRUCT_START:36,classStatements:37,STRUCT_STOP:38,NAMESPACE:39,classIdentifier:40,STYLE_SEPARATOR:41,members:42,CLASS:43,ANNOTATION_START:44,ANNOTATION_END:45,MEMBER:46,SEPARATOR:47,relation:48,NOTE_FOR:49,noteText:50,NOTE:51,direction_tb:52,direction_bt:53,direction_rl:54,direction_lr:55,relationType:56,lineType:57,AGGREGATION:58,EXTENSION:59,COMPOSITION:60,DEPENDENCY:61,LOLLIPOP:62,LINE:63,DOTTED_LINE:64,CALLBACK:65,LINK:66,LINK_TARGET:67,CLICK:68,CALLBACK_NAME:69,CALLBACK_ARGS:70,HREF:71,CSSCLASS:72,commentToken:73,textToken:74,graphCodeTokens:75,textNoTagsToken:76,TAGSTART:77,TAGEND:78,"==":79,"--":80,PCT:81,DEFAULT:82,SPACE:83,MINUS:84,keywords:85,UNICODE_TEXT:86,NUM:87,ALPHA:88,BQUOTE_STR:89,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",19:"GENERICTYPE",21:"LABEL",30:"acc_title",31:"acc_title_value",32:"acc_descr",33:"acc_descr_value",34:"acc_descr_multiline_value",36:"STRUCT_START",38:"STRUCT_STOP",39:"NAMESPACE",41:"STYLE_SEPARATOR",43:"CLASS",44:"ANNOTATION_START",45:"ANNOTATION_END",46:"MEMBER",47:"SEPARATOR",49:"NOTE_FOR",51:"NOTE",52:"direction_tb",53:"direction_bt",54:"direction_rl",55:"direction_lr",58:"AGGREGATION",59:"EXTENSION",60:"COMPOSITION",61:"DEPENDENCY",62:"LOLLIPOP",63:"LINE",64:"DOTTED_LINE",65:"CALLBACK",66:"LINK",67:"LINK_TARGET",68:"CLICK",69:"CALLBACK_NAME",70:"CALLBACK_ARGS",71:"HREF",72:"CSSCLASS",75:"graphCodeTokens",77:"TAGSTART",78:"TAGEND",79:"==",80:"--",81:"PCT",82:"DEFAULT",83:"SPACE",84:"MINUS",85:"keywords",86:"UNICODE_TEXT",87:"NUM",88:"ALPHA",89:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,2],[17,1],[17,1],[17,2],[17,2],[17,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[22,4],[22,5],[35,2],[37,1],[37,2],[37,3],[23,1],[23,3],[23,4],[23,6],[40,2],[40,3],[25,4],[42,1],[42,2],[24,1],[24,2],[24,1],[24,1],[20,3],[20,4],[20,4],[20,5],[28,3],[28,2],[29,1],[29,1],[29,1],[29,1],[48,3],[48,2],[48,2],[48,1],[56,1],[56,1],[56,1],[56,1],[56,1],[57,1],[57,1],[26,3],[26,4],[26,3],[26,4],[26,4],[26,5],[26,3],[26,4],[26,4],[26,5],[26,4],[26,5],[26,5],[26,6],[27,3],[73,1],[73,1],[74,1],[74,1],[74,1],[74,1],[74,1],[74,1],[74,1],[76,1],[76,1],[76,1],[76,1],[16,1],[16,1],[16,1],[16,1],[18,1],[50,1]],performAction:function(zt,re,se,Pe,te,Me,de){var on=Me.length-1;switch(te){case 8:this.$=Me[on-1];break;case 9:case 11:case 12:this.$=Me[on];break;case 10:case 13:this.$=Me[on-1]+Me[on];break;case 14:case 15:this.$=Me[on-1]+"~"+Me[on]+"~";break;case 16:Pe.addRelation(Me[on]);break;case 17:Me[on-1].title=Pe.cleanupLabel(Me[on]),Pe.addRelation(Me[on-1]);break;case 26:this.$=Me[on].trim(),Pe.setAccTitle(this.$);break;case 27:case 28:this.$=Me[on].trim(),Pe.setAccDescription(this.$);break;case 29:Pe.addClassesToNamespace(Me[on-3],Me[on-1]);break;case 30:Pe.addClassesToNamespace(Me[on-4],Me[on-1]);break;case 31:this.$=Me[on],Pe.addNamespace(Me[on]);break;case 32:this.$=[Me[on]];break;case 33:this.$=[Me[on-1]];break;case 34:Me[on].unshift(Me[on-2]),this.$=Me[on];break;case 36:Pe.setCssClass(Me[on-2],Me[on]);break;case 37:Pe.addMembers(Me[on-3],Me[on-1]);break;case 38:Pe.setCssClass(Me[on-5],Me[on-3]),Pe.addMembers(Me[on-5],Me[on-1]);break;case 39:this.$=Me[on],Pe.addClass(Me[on]);break;case 40:this.$=Me[on-1],Pe.addClass(Me[on-1]),Pe.setClassLabel(Me[on-1],Me[on]);break;case 41:Pe.addAnnotation(Me[on],Me[on-2]);break;case 42:this.$=[Me[on]];break;case 43:Me[on].push(Me[on-1]),this.$=Me[on];break;case 44:break;case 45:Pe.addMember(Me[on-1],Pe.cleanupLabel(Me[on]));break;case 46:break;case 47:break;case 48:this.$={id1:Me[on-2],id2:Me[on],relation:Me[on-1],relationTitle1:"none",relationTitle2:"none"};break;case 49:this.$={id1:Me[on-3],id2:Me[on],relation:Me[on-1],relationTitle1:Me[on-2],relationTitle2:"none"};break;case 50:this.$={id1:Me[on-3],id2:Me[on],relation:Me[on-2],relationTitle1:"none",relationTitle2:Me[on-1]};break;case 51:this.$={id1:Me[on-4],id2:Me[on],relation:Me[on-2],relationTitle1:Me[on-3],relationTitle2:Me[on-1]};break;case 52:Pe.addNote(Me[on],Me[on-1]);break;case 53:Pe.addNote(Me[on]);break;case 54:Pe.setDirection("TB");break;case 55:Pe.setDirection("BT");break;case 56:Pe.setDirection("RL");break;case 57:Pe.setDirection("LR");break;case 58:this.$={type1:Me[on-2],type2:Me[on],lineType:Me[on-1]};break;case 59:this.$={type1:"none",type2:Me[on],lineType:Me[on-1]};break;case 60:this.$={type1:Me[on-1],type2:"none",lineType:Me[on]};break;case 61:this.$={type1:"none",type2:"none",lineType:Me[on]};break;case 62:this.$=Pe.relationType.AGGREGATION;break;case 63:this.$=Pe.relationType.EXTENSION;break;case 64:this.$=Pe.relationType.COMPOSITION;break;case 65:this.$=Pe.relationType.DEPENDENCY;break;case 66:this.$=Pe.relationType.LOLLIPOP;break;case 67:this.$=Pe.lineType.LINE;break;case 68:this.$=Pe.lineType.DOTTED_LINE;break;case 69:case 75:this.$=Me[on-2],Pe.setClickEvent(Me[on-1],Me[on]);break;case 70:case 76:this.$=Me[on-3],Pe.setClickEvent(Me[on-2],Me[on-1]),Pe.setTooltip(Me[on-2],Me[on]);break;case 71:this.$=Me[on-2],Pe.setLink(Me[on-1],Me[on]);break;case 72:this.$=Me[on-3],Pe.setLink(Me[on-2],Me[on-1],Me[on]);break;case 73:this.$=Me[on-3],Pe.setLink(Me[on-2],Me[on-1]),Pe.setTooltip(Me[on-2],Me[on]);break;case 74:this.$=Me[on-4],Pe.setLink(Me[on-3],Me[on-2],Me[on]),Pe.setTooltip(Me[on-3],Me[on-1]);break;case 77:this.$=Me[on-3],Pe.setClickEvent(Me[on-2],Me[on-1],Me[on]);break;case 78:this.$=Me[on-4],Pe.setClickEvent(Me[on-3],Me[on-2],Me[on-1]),Pe.setTooltip(Me[on-3],Me[on]);break;case 79:this.$=Me[on-3],Pe.setLink(Me[on-2],Me[on]);break;case 80:this.$=Me[on-4],Pe.setLink(Me[on-3],Me[on-1],Me[on]);break;case 81:this.$=Me[on-4],Pe.setLink(Me[on-3],Me[on-1]),Pe.setTooltip(Me[on-3],Me[on]);break;case 82:this.$=Me[on-5],Pe.setLink(Me[on-4],Me[on-2],Me[on]),Pe.setTooltip(Me[on-4],Me[on-1]);break;case 83:Pe.setCssClass(Me[on-1],Me[on]);break}},table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:35,17:19,18:36,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:a,32:f,34:p,35:20,39:w,40:21,43:m,44:b,46:E,47:_,49:A,51:I,52:B,53:N,54:R,55:z,65:W,66:et,68:st,72:at,84:bt,86:mt,87:yt,88:ft,89:ut},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},i(vt,[2,5],{8:[1,44]}),{8:[1,45]},i(X,[2,16],{21:[1,46]}),i(X,[2,18]),i(X,[2,19]),i(X,[2,20]),i(X,[2,21]),i(X,[2,22]),i(X,[2,23]),i(X,[2,24]),i(X,[2,25]),{31:[1,47]},{33:[1,48]},i(X,[2,28]),i(X,[2,44],{48:49,56:52,57:53,13:[1,50],21:[1,51],58:pt,59:U,60:Tt,61:nt,62:It,63:Ot,64:Bt}),{36:[1,61]},i(Et,[2,35],{36:[1,63],41:[1,62]}),i(X,[2,46]),i(X,[2,47]),{16:64,84:bt,86:mt,87:yt,88:ft},{16:35,17:65,18:36,84:bt,86:mt,87:yt,88:ft,89:ut},{16:35,17:66,18:36,84:bt,86:mt,87:yt,88:ft,89:ut},{16:35,17:67,18:36,84:bt,86:mt,87:yt,88:ft,89:ut},{13:[1,68]},{16:35,17:69,18:36,84:bt,86:mt,87:yt,88:ft,89:ut},{13:Z,50:70},i(X,[2,54]),i(X,[2,55]),i(X,[2,56]),i(X,[2,57]),i(Ct,[2,11],{16:35,18:36,17:72,19:[1,73],84:bt,86:mt,87:yt,88:ft,89:ut}),i(Ct,[2,12],{19:[1,74]}),{15:75,16:76,84:bt,86:mt,87:yt,88:ft},{16:35,17:77,18:36,84:bt,86:mt,87:yt,88:ft,89:ut},i(xt,[2,97]),i(xt,[2,98]),i(xt,[2,99]),i(xt,[2,100]),i([1,8,9,12,13,19,21,36,38,41,58,59,60,61,62,63,64,69,71],[2,101]),i(vt,[2,6],{10:5,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,17:19,35:20,40:21,16:35,18:36,5:78,30:a,32:f,34:p,39:w,43:m,44:b,46:E,47:_,49:A,51:I,52:B,53:N,54:R,55:z,65:W,66:et,68:st,72:at,84:bt,86:mt,87:yt,88:ft,89:ut}),{5:79,10:5,16:35,17:19,18:36,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:a,32:f,34:p,35:20,39:w,40:21,43:m,44:b,46:E,47:_,49:A,51:I,52:B,53:N,54:R,55:z,65:W,66:et,68:st,72:at,84:bt,86:mt,87:yt,88:ft,89:ut},i(X,[2,17]),i(X,[2,26]),i(X,[2,27]),{13:[1,81],16:35,17:80,18:36,84:bt,86:mt,87:yt,88:ft,89:ut},{48:82,56:52,57:53,58:pt,59:U,60:Tt,61:nt,62:It,63:Ot,64:Bt},i(X,[2,45]),{57:83,63:Ot,64:Bt},i(Ht,[2,61],{56:84,58:pt,59:U,60:Tt,61:nt,62:It}),i(Le,[2,62]),i(Le,[2,63]),i(Le,[2,64]),i(Le,[2,65]),i(Le,[2,66]),i(Ft,[2,67]),i(Ft,[2,68]),{8:[1,86],23:87,37:85,40:21,43:m},{16:88,84:bt,86:mt,87:yt,88:ft},{42:89,46:gn},{45:[1,91]},{13:[1,92]},{13:[1,93]},{69:[1,94],71:[1,95]},{16:96,84:bt,86:mt,87:yt,88:ft},{13:Z,50:97},i(X,[2,53]),i(X,[2,102]),i(Ct,[2,13]),i(Ct,[2,14]),i(Ct,[2,15]),{36:[2,31]},{15:98,16:76,36:[2,9],84:bt,86:mt,87:yt,88:ft},i(Se,[2,39],{11:99,12:[1,100]}),i(vt,[2,7]),{9:[1,101]},i(me,[2,48]),{16:35,17:102,18:36,84:bt,86:mt,87:yt,88:ft,89:ut},{13:[1,104],16:35,17:103,18:36,84:bt,86:mt,87:yt,88:ft,89:ut},i(Ht,[2,60],{56:105,58:pt,59:U,60:Tt,61:nt,62:It}),i(Ht,[2,59]),{38:[1,106]},{23:87,37:107,40:21,43:m},{8:[1,108],38:[2,32]},i(Et,[2,36],{36:[1,109]}),{38:[1,110]},{38:[2,42],42:111,46:gn},{16:35,17:112,18:36,84:bt,86:mt,87:yt,88:ft,89:ut},i(X,[2,69],{13:[1,113]}),i(X,[2,71],{13:[1,115],67:[1,114]}),i(X,[2,75],{13:[1,116],70:[1,117]}),{13:[1,118]},i(X,[2,83]),i(X,[2,52]),{36:[2,10]},i(Se,[2,40]),{13:[1,119]},{1:[2,4]},i(me,[2,50]),i(me,[2,49]),{16:35,17:120,18:36,84:bt,86:mt,87:yt,88:ft,89:ut},i(Ht,[2,58]),i(X,[2,29]),{38:[1,121]},{23:87,37:122,38:[2,33],40:21,43:m},{42:123,46:gn},i(Et,[2,37]),{38:[2,43]},i(X,[2,41]),i(X,[2,70]),i(X,[2,72]),i(X,[2,73],{67:[1,124]}),i(X,[2,76]),i(X,[2,77],{13:[1,125]}),i(X,[2,79],{13:[1,127],67:[1,126]}),{14:[1,128]},i(me,[2,51]),i(X,[2,30]),{38:[2,34]},{38:[1,129]},i(X,[2,74]),i(X,[2,78]),i(X,[2,80]),i(X,[2,81],{67:[1,130]}),i(Se,[2,8]),i(Et,[2,38]),i(X,[2,82])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],75:[2,31],98:[2,10],101:[2,4],111:[2,43],122:[2,34]},parseError:function(zt,re){if(re.recoverable)this.trace(zt);else{var se=new Error(zt);throw se.hash=re,se}},parse:function(zt){var re=this,se=[0],Pe=[],te=[null],Me=[],de=this.table,on="",ni=0,Ks=0,ws=2,fo=1,Xi=Me.slice.call(arguments,1),Er=Object.create(this.lexer),Xn={yy:{}};for(var di in this.yy)Object.prototype.hasOwnProperty.call(this.yy,di)&&(Xn.yy[di]=this.yy[di]);Er.setInput(zt,Xn.yy),Xn.yy.lexer=Er,Xn.yy.parser=this,typeof Er.yylloc>"u"&&(Er.yylloc={});var Ee=Er.yylloc;Me.push(Ee);var Kn=Er.options&&Er.options.ranges;typeof Xn.yy.parseError=="function"?this.parseError=Xn.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function He(){var Du;return Du=Pe.pop()||Er.lex()||fo,typeof Du!="number"&&(Du instanceof Array&&(Pe=Du,Du=Pe.pop()),Du=re.symbols_[Du]||Du),Du}for(var Ti,pn,Es,qa,Ma={},Gs,Po,vs,ru;;){if(pn=se[se.length-1],this.defaultActions[pn]?Es=this.defaultActions[pn]:((Ti===null||typeof Ti>"u")&&(Ti=He()),Es=de[pn]&&de[pn][Ti]),typeof Es>"u"||!Es.length||!Es[0]){var zs="";ru=[];for(Gs in de[pn])this.terminals_[Gs]&&Gs>ws&&ru.push("'"+this.terminals_[Gs]+"'");Er.showPosition?zs="Parse error on line "+(ni+1)+`: -`+Er.showPosition()+` -Expecting `+ru.join(", ")+", got '"+(this.terminals_[Ti]||Ti)+"'":zs="Parse error on line "+(ni+1)+": Unexpected "+(Ti==fo?"end of input":"'"+(this.terminals_[Ti]||Ti)+"'"),this.parseError(zs,{text:Er.match,token:this.terminals_[Ti]||Ti,line:Er.yylineno,loc:Ee,expected:ru})}if(Es[0]instanceof Array&&Es.length>1)throw new Error("Parse Error: multiple actions possible at state: "+pn+", token: "+Ti);switch(Es[0]){case 1:se.push(Ti),te.push(Er.yytext),Me.push(Er.yylloc),se.push(Es[1]),Ti=null,Ks=Er.yyleng,on=Er.yytext,ni=Er.yylineno,Ee=Er.yylloc;break;case 2:if(Po=this.productions_[Es[1]][1],Ma.$=te[te.length-Po],Ma._$={first_line:Me[Me.length-(Po||1)].first_line,last_line:Me[Me.length-1].last_line,first_column:Me[Me.length-(Po||1)].first_column,last_column:Me[Me.length-1].last_column},Kn&&(Ma._$.range=[Me[Me.length-(Po||1)].range[0],Me[Me.length-1].range[1]]),qa=this.performAction.apply(Ma,[on,Ks,ni,Xn.yy,Es[1],te,Me].concat(Xi)),typeof qa<"u")return qa;Po&&(se=se.slice(0,-1*Po*2),te=te.slice(0,-1*Po),Me=Me.slice(0,-1*Po)),se.push(this.productions_[Es[1]][0]),te.push(Ma.$),Me.push(Ma._$),vs=de[se[se.length-2]][se[se.length-1]],se.push(vs);break;case 3:return!0}}return!0}},Ye=function(){var ke={EOF:1,parseError:function(re,se){if(this.yy.parser)this.yy.parser.parseError(re,se);else throw new Error(re)},setInput:function(zt,re){return this.yy=re||this.yy||{},this._input=zt,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var zt=this._input[0];this.yytext+=zt,this.yyleng++,this.offset++,this.match+=zt,this.matched+=zt;var re=zt.match(/(?:\r\n?|\n).*/g);return re?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),zt},unput:function(zt){var re=zt.length,se=zt.split(/(?:\r\n?|\n)/g);this._input=zt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-re),this.offset-=re;var Pe=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),se.length-1&&(this.yylineno-=se.length-1);var te=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:se?(se.length===Pe.length?this.yylloc.first_column:0)+Pe[Pe.length-se.length].length-se[0].length:this.yylloc.first_column-re},this.options.ranges&&(this.yylloc.range=[te[0],te[0]+this.yyleng-re]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(zt){this.unput(this.match.slice(zt))},pastInput:function(){var zt=this.matched.substr(0,this.matched.length-this.match.length);return(zt.length>20?"...":"")+zt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var zt=this.match;return zt.length<20&&(zt+=this._input.substr(0,20-zt.length)),(zt.substr(0,20)+(zt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var zt=this.pastInput(),re=new Array(zt.length+1).join("-");return zt+this.upcomingInput()+` -`+re+"^"},test_match:function(zt,re){var se,Pe,te;if(this.options.backtrack_lexer&&(te={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(te.yylloc.range=this.yylloc.range.slice(0))),Pe=zt[0].match(/(?:\r\n?|\n).*/g),Pe&&(this.yylineno+=Pe.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Pe?Pe[Pe.length-1].length-Pe[Pe.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+zt[0].length},this.yytext+=zt[0],this.match+=zt[0],this.matches=zt,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(zt[0].length),this.matched+=zt[0],se=this.performAction.call(this,this.yy,this,re,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),se)return se;if(this._backtrack){for(var Me in te)this[Me]=te[Me];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var zt,re,se,Pe;this._more||(this.yytext="",this.match="");for(var te=this._currentRules(),Me=0;Mere[0].length)){if(re=se,Pe=Me,this.options.backtrack_lexer){if(zt=this.test_match(se,te[Me]),zt!==!1)return zt;if(this._backtrack){re=!1;continue}else return!1}else if(!this.options.flex)break}return re?(zt=this.test_match(re,te[Pe]),zt!==!1?zt:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var re=this.next();return re||this.lex()},begin:function(re){this.conditionStack.push(re)},popState:function(){var re=this.conditionStack.length-1;return re>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(re){return re=this.conditionStack.length-1-Math.abs(re||0),re>=0?this.conditionStack[re]:"INITIAL"},pushState:function(re){this.begin(re)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(re,se,Pe,te){switch(Pe){case 0:return 52;case 1:return 53;case 2:return 54;case 3:return 55;case 4:break;case 5:break;case 6:return this.begin("acc_title"),30;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),32;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 8;case 14:break;case 15:return 7;case 16:return 7;case 17:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 19:this.popState();break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 69;case 22:this.popState();break;case 23:return 70;case 24:this.popState();break;case 25:return"STR";case 26:this.begin("string");break;case 27:return this.begin("namespace"),39;case 28:return this.popState(),8;case 29:break;case 30:return this.begin("namespace-body"),36;case 31:return this.popState(),38;case 32:return"EOF_IN_STRUCT";case 33:return 8;case 34:break;case 35:return"EDGE_STATE";case 36:return this.begin("class"),43;case 37:return this.popState(),8;case 38:break;case 39:return this.popState(),this.popState(),38;case 40:return this.begin("class-body"),36;case 41:return this.popState(),38;case 42:return"EOF_IN_STRUCT";case 43:return"EDGE_STATE";case 44:return"OPEN_IN_STRUCT";case 45:break;case 46:return"MEMBER";case 47:return 72;case 48:return 65;case 49:return 66;case 50:return 68;case 51:return 49;case 52:return 51;case 53:return 44;case 54:return 45;case 55:return 71;case 56:this.popState();break;case 57:return"GENERICTYPE";case 58:this.begin("generic");break;case 59:this.popState();break;case 60:return"BQUOTE_STR";case 61:this.begin("bqstring");break;case 62:return 67;case 63:return 67;case 64:return 67;case 65:return 67;case 66:return 59;case 67:return 59;case 68:return 61;case 69:return 61;case 70:return 60;case 71:return 58;case 72:return 62;case 73:return 63;case 74:return 64;case 75:return 21;case 76:return 41;case 77:return 84;case 78:return"DOT";case 79:return"PLUS";case 80:return 81;case 81:return"EQUALS";case 82:return"EQUALS";case 83:return 88;case 84:return 12;case 85:return 14;case 86:return"PUNCTUATION";case 87:return 87;case 88:return 86;case 89:return 83;case 90:return 9}},rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,31,32,33,34,35,36,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},namespace:{rules:[26,27,28,29,30,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},"class-body":{rules:[26,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},class:{rules:[26,37,38,39,40,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},acc_descr:{rules:[9,26,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},acc_title:{rules:[7,26,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},callback_args:{rules:[22,23,26,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},callback_name:{rules:[19,20,21,26,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},href:{rules:[26,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},struct:{rules:[26,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},generic:{rules:[26,47,48,49,50,51,52,53,54,55,56,57,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},bqstring:{rules:[26,47,48,49,50,51,52,53,54,55,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},string:{rules:[24,25,26,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,36,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!0}}};return ke}();Ve.lexer=Ye;function ce(){this.yy={}}return ce.prototype=Ve,Ve.Parser=ce,new ce}();Tgt.parser=Tgt;const zRt=Tgt,qRt=["#","+","~","-",""];class HRt{constructor(a,f){this.memberType=f,this.visibility="",this.classifier="";const p=Q1(a,Oe());this.parseMember(p)}getDisplayDetails(){let a=this.visibility+YP(this.id);this.memberType==="method"&&(a+=`(${YP(this.parameters.trim())})`,this.returnType&&(a+=" : "+YP(this.returnType))),a=a.trim();const f=this.parseClassifier();return{displayText:a,cssStyle:f}}parseMember(a){let f="";if(this.memberType==="method"){const p=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/,w=a.match(p);if(w){const m=w[1]?w[1].trim():"";if(qRt.includes(m)&&(this.visibility=m),this.id=w[2].trim(),this.parameters=w[3]?w[3].trim():"",f=w[4]?w[4].trim():"",this.returnType=w[5]?w[5].trim():"",f===""){const b=this.returnType.substring(this.returnType.length-1);b.match(/[$*]/)&&(f=b,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{const p=a.length,w=a.substring(0,1),m=a.substring(p-1);qRt.includes(w)&&(this.visibility=w),m.match(/[*?]/)&&(f=m),this.id=a.substring(this.visibility===""?0:1,f===""?p:p-1)}this.classifier=f}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}}const $Y="classId-";let Cgt=[],Jl={},zY=[],VRt=0,xk={},_gt=0,WF=[];const AT=i=>Kr.sanitizeText(i,Oe()),wL=function(i){const a=Kr.sanitizeText(i,Oe());let f="",p=a;if(a.indexOf("~")>0){const w=a.split("~");p=AT(w[0]),f=AT(w[1])}return{className:p,type:f}},sGe=function(i,a){const f=Kr.sanitizeText(i,Oe());a&&(a=AT(a));const{className:p}=wL(f);Jl[p].label=a},qY=function(i){const a=Kr.sanitizeText(i,Oe()),{className:f,type:p}=wL(a);if(Object.hasOwn(Jl,f))return;const w=Kr.sanitizeText(f,Oe());Jl[w]={id:w,type:p,label:w,cssClasses:[],methods:[],members:[],annotations:[],domId:$Y+w+"-"+VRt},VRt++},GRt=function(i){const a=Kr.sanitizeText(i,Oe());if(a in Jl)return Jl[a].domId;throw new Error("Class not found: "+a)},aGe=function(){Cgt=[],Jl={},zY=[],WF=[],WF.push(WRt),xk={},_gt=0,hg()},oGe=function(i){return Jl[i]},cGe=function(){return Jl},uGe=function(){return Cgt},lGe=function(){return zY},hGe=function(i){Ut.debug("Adding relation: "+JSON.stringify(i)),qY(i.id1),qY(i.id2),i.id1=wL(i.id1).className,i.id2=wL(i.id2).className,i.relationTitle1=Kr.sanitizeText(i.relationTitle1.trim(),Oe()),i.relationTitle2=Kr.sanitizeText(i.relationTitle2.trim(),Oe()),Cgt.push(i)},fGe=function(i,a){const f=wL(i).className;Jl[f].annotations.push(a)},URt=function(i,a){qY(i);const f=wL(i).className,p=Jl[f];if(typeof a=="string"){const w=a.trim();w.startsWith("<<")&&w.endsWith(">>")?p.annotations.push(AT(w.substring(2,w.length-2))):w.indexOf(")")>0?p.methods.push(new HRt(w,"method")):w&&p.members.push(new HRt(w,"attribute"))}},dGe=function(i,a){Array.isArray(a)&&(a.reverse(),a.forEach(f=>URt(i,f)))},gGe=function(i,a){const f={id:`note${zY.length}`,class:a,text:i};zY.push(f)},pGe=function(i){return i.startsWith(":")&&(i=i.substring(1)),AT(i.trim())},Sgt=function(i,a){i.split(",").forEach(function(f){let p=f;f[0].match(/\d/)&&(p=$Y+p),Jl[p]!==void 0&&Jl[p].cssClasses.push(a)})},bGe=function(i,a){i.split(",").forEach(function(f){a!==void 0&&(Jl[f].tooltip=AT(a))})},wGe=function(i,a){return a?xk[a].classes[i].tooltip:Jl[i].tooltip},vGe=function(i,a,f){const p=Oe();i.split(",").forEach(function(w){let m=w;w[0].match(/\d/)&&(m=$Y+m),Jl[m]!==void 0&&(Jl[m].link=$a.formatUrl(a,p),p.securityLevel==="sandbox"?Jl[m].linkTarget="_top":typeof f=="string"?Jl[m].linkTarget=AT(f):Jl[m].linkTarget="_blank")}),Sgt(i,"clickable")},mGe=function(i,a,f){i.split(",").forEach(function(p){yGe(p,a,f),Jl[p].haveCallback=!0}),Sgt(i,"clickable")},yGe=function(i,a,f){const p=Kr.sanitizeText(i,Oe());if(Oe().securityLevel!=="loose"||a===void 0)return;const m=p;if(Jl[m]!==void 0){const b=GRt(m);let E=[];if(typeof f=="string"){E=f.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let _=0;_")),w.classed("hover",!0)}).on("mouseout",function(){a.transition().duration(500).style("opacity",0),yr(this).classed("hover",!1)})};WF.push(WRt);let YRt="TB";const HY={setAccTitle:E0,getAccTitle:fg,getAccDescription:gg,setAccDescription:dg,getConfig:()=>Oe().class,addClass:qY,bindFunctions:xGe,clear:aGe,getClass:oGe,getClasses:cGe,getNotes:lGe,addAnnotation:fGe,addNote:gGe,getRelations:uGe,addRelation:hGe,getDirection:()=>YRt,setDirection:i=>{YRt=i},addMember:URt,addMembers:dGe,cleanupLabel:pGe,lineType:kGe,relationType:EGe,setClickEvent:mGe,setCssClass:Sgt,setLink:vGe,getTooltip:wGe,setTooltip:bGe,lookUpDomId:GRt,setDiagramTitle:Nb,getDiagramTitle:pg,setClassLabel:sGe,addNamespace:function(i){xk[i]===void 0&&(xk[i]={id:i,classes:{},children:{},domId:$Y+i+"-"+_gt},_gt++)},addClassesToNamespace:function(i,a){xk[i]!==void 0&&a.map(f=>{Jl[f].parent=i,xk[i].classes[f]=Jl[f]})},getNamespace:function(i){return xk[i]},getNamespaces:function(){return xk}},KRt=i=>`g.classGroup text { +`,ZC=18*2,RGe="actor-top",jGe="actor-bottom",Eve=function(i,s){return AQ(i,s)},Grn=function(i,s,u,d,p){if(s.links===void 0||s.links===null||Object.keys(s.links).length===0)return{height:0,width:0};const v=s.links,b=s.actorCnt,y=s.rectData;var T="none";p&&(T="block !important");const _=i.append("g");_.attr("id","actor"+b+"_popup"),_.attr("class","actorPopupMenu"),_.attr("display",T);var A="";y.class!==void 0&&(A=" "+y.class);let P=y.width>u?y.width:u;const R=_.append("rect");if(R.attr("class","actorPopupMenuPanel"+A),R.attr("x",y.x),R.attr("y",y.height),R.attr("fill",y.fill),R.attr("stroke",y.stroke),R.attr("width",P),R.attr("height",y.height),R.attr("rx",y.rx),R.attr("ry",y.ry),v!=null){var F=20;for(let ee in v){var j=_.append("a"),K=p9.sanitizeUrl(v[ee]);j.attr("xlink:href",K),j.attr("target","_blank"),uin(d)(ee,j,y.x+10,y.height+F,P,20,{class:"actor"},d),F+=30}}return R.attr("height",F),{height:y.height+F,width:P}},Krn=function(i){return"var pu = document.getElementById('"+i+"'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }"},pJ=async function(i,s,u=null){let d=i.append("foreignObject");const p=await CC(s.text,Vh()),b=d.append("xhtml:div").attr("style","width: fit-content;").attr("xmlns","http://www.w3.org/1999/xhtml").html(p).node().getBoundingClientRect();if(d.attr("height",Math.round(b.height)).attr("width",Math.round(b.width)),s.class==="noteText"){const y=i.node().firstChild;y.setAttribute("height",b.height+2*s.textMargin);const T=y.getBBox();d.attr("x",Math.round(T.x+T.width/2-b.width/2)).attr("y",Math.round(T.y+T.height/2-b.height/2))}else if(u){let{startx:y,stopx:T,starty:_}=u;if(y>T){const A=y;y=T,T=A}d.attr("x",Math.round(y+Math.abs(y-T)/2-b.width/2)),s.class==="loopText"?d.attr("y",Math.round(_)):d.attr("y",Math.round(_-b.height))}return[d]},YD=function(i,s){let u=0,d=0;const p=s.text.split(ci.lineBreakRegex),[v,b]=NC(s.fontSize);let y=[],T=0,_=()=>s.y;if(s.valign!==void 0&&s.textMargin!==void 0&&s.textMargin>0)switch(s.valign){case"top":case"start":_=()=>Math.round(s.y+s.textMargin);break;case"middle":case"center":_=()=>Math.round(s.y+(u+d+s.textMargin)/2);break;case"bottom":case"end":_=()=>Math.round(s.y+(u+d+2*s.textMargin)-s.textMargin);break}if(s.anchor!==void 0&&s.textMargin!==void 0&&s.width!==void 0)switch(s.anchor){case"left":case"start":s.x=Math.round(s.x+s.textMargin),s.anchor="start",s.dominantBaseline="middle",s.alignmentBaseline="middle";break;case"middle":case"center":s.x=Math.round(s.x+s.width/2),s.anchor="middle",s.dominantBaseline="middle",s.alignmentBaseline="middle";break;case"right":case"end":s.x=Math.round(s.x+s.width-s.textMargin),s.anchor="end",s.dominantBaseline="middle",s.alignmentBaseline="middle";break}for(let[A,P]of p.entries()){s.textMargin!==void 0&&s.textMargin===0&&v!==void 0&&(T=A*v);const R=i.append("text");R.attr("x",s.x),R.attr("y",_()),s.anchor!==void 0&&R.attr("text-anchor",s.anchor).attr("dominant-baseline",s.dominantBaseline).attr("alignment-baseline",s.alignmentBaseline),s.fontFamily!==void 0&&R.style("font-family",s.fontFamily),b!==void 0&&R.style("font-size",b),s.fontWeight!==void 0&&R.style("font-weight",s.fontWeight),s.fill!==void 0&&R.attr("fill",s.fill),s.class!==void 0&&R.attr("class",s.class),s.dy!==void 0?R.attr("dy",s.dy):T!==0&&R.attr("dy",T);const F=P||hje;if(s.tspan){const j=R.append("tspan");j.attr("x",s.x),s.fill!==void 0&&j.attr("fill",s.fill),j.text(F)}else R.text(F);s.valign!==void 0&&s.textMargin!==void 0&&s.textMargin>0&&(d+=(R._groups||R)[0][0].getBBox().height,u=d),y.push(R)}return y},$Ge=function(i,s){function u(p,v,b,y,T){return p+","+v+" "+(p+b)+","+v+" "+(p+b)+","+(v+y-T)+" "+(p+b-T*1.2)+","+(v+y)+" "+p+","+(v+y)}const d=i.append("polygon");return d.attr("points",u(s.x,s.y,s.width,s.height,7)),d.attr("class","labelBox"),s.y=s.y+s.height/2,YD(i,s),d};let s5=-1;const zGe=(i,s,u,d)=>{i.select&&u.forEach(p=>{const v=s[p],b=i.select("#actor"+v.actorCnt);!d.mirrorActors&&v.stopy?b.attr("y2",v.stopy+v.height/2):d.mirrorActors&&b.attr("y2",v.stopy)})},Wrn=async function(i,s,u,d){const p=d?s.stopy:s.starty,v=s.x+s.width/2,b=p+5,y=i.append("g").lower();var T=y;d||(s5++,Object.keys(s.links||{}).length&&!u.forceMenus&&T.attr("onclick",Krn(`actor${s5}_popup`)).attr("cursor","pointer"),T.append("line").attr("id","actor"+s5).attr("x1",v).attr("y1",b).attr("x2",v).attr("y2",2e3).attr("class","actor-line").attr("class","200").attr("stroke-width","0.5px").attr("stroke","#999"),T=y.append("g"),s.actorCnt=s5,s.links!=null&&T.attr("id","root-"+s5));const _=qC();var A="actor";s.properties!=null&&s.properties.class?A=s.properties.class:_.fill="#eaeaea",d?A+=` ${jGe}`:A+=` ${RGe}`,_.x=s.x,_.y=p,_.width=s.width,_.height=s.height,_.class=A,_.rx=3,_.ry=3,_.name=s.name;const P=Eve(T,_);if(s.rectData=_,s.properties!=null&&s.properties.icon){const F=s.properties.icon.trim();F.charAt(0)==="@"?rUt(T,_.x+_.width-20,_.y+10,F.substr(1)):nUt(T,_.x+_.width-20,_.y+10,F)}await Tve(u,Dv(s.description))(s.description,T,_.x,_.y,_.width,_.height,{class:"actor"},u);let R=s.height;if(P.node){const F=P.node().getBBox();s.height=F.height,R=F.height}return R},Yrn=async function(i,s,u,d){const p=d?s.stopy:s.starty,v=s.x+s.width/2,b=p+80;i.lower(),d||(s5++,i.append("line").attr("id","actor"+s5).attr("x1",v).attr("y1",b).attr("x2",v).attr("y2",2e3).attr("class","actor-line").attr("class","200").attr("stroke-width","0.5px").attr("stroke","#999"),s.actorCnt=s5);const y=i.append("g");let T="actor-man";d?T+=` ${jGe}`:T+=` ${RGe}`,y.attr("class",T),y.attr("name",s.name);const _=qC();_.x=s.x,_.y=p,_.fill="#eaeaea",_.width=s.width,_.height=s.height,_.class="actor",_.rx=3,_.ry=3,y.append("line").attr("id","actor-man-torso"+s5).attr("x1",v).attr("y1",p+25).attr("x2",v).attr("y2",p+45),y.append("line").attr("id","actor-man-arms"+s5).attr("x1",v-ZC/2).attr("y1",p+33).attr("x2",v+ZC/2).attr("y2",p+33),y.append("line").attr("x1",v-ZC/2).attr("y1",p+60).attr("x2",v).attr("y2",p+45),y.append("line").attr("x1",v).attr("y1",p+45).attr("x2",v+ZC/2-2).attr("y2",p+60);const A=y.append("circle");A.attr("cx",s.x+s.width/2),A.attr("cy",p+10),A.attr("r",15),A.attr("width",s.width),A.attr("height",s.height);const P=y.node().getBBox();return s.height=P.height,await Tve(u,Dv(s.description))(s.description,y,_.x,_.y+35,_.width,_.height,{class:"actor"},u),s.height},Xrn=async function(i,s,u,d){switch(s.type){case"actor":return await Yrn(i,s,u,d);case"participant":return await Wrn(i,s,u,d)}},Qrn=async function(i,s,u){const p=i.append("g");qGe(p,s),s.name&&await Tve(u)(s.name,p,s.x,s.y+(s.textMaxHeight||0)/2,s.width,0,{class:"text"},u),p.lower()},Jrn=function(i){return i.append("g")},Zrn=function(i,s,u,d,p){const v=qC(),b=s.anchored;v.x=s.startx,v.y=s.starty,v.class="activation"+p%3,v.width=s.stopx-s.startx,v.height=u-s.starty,Eve(b,v)},ein=async function(i,s,u,d){const{boxMargin:p,boxTextMargin:v,labelBoxHeight:b,labelBoxWidth:y,messageFontFamily:T,messageFontSize:_,messageFontWeight:A}=d,P=i.append("g"),R=function(K,ee,ie,oe){return P.append("line").attr("x1",K).attr("y1",ee).attr("x2",ie).attr("y2",oe).attr("class","loopLine")};R(s.startx,s.starty,s.stopx,s.starty),R(s.stopx,s.starty,s.stopx,s.stopy),R(s.startx,s.stopy,s.stopx,s.stopy),R(s.startx,s.starty,s.startx,s.stopy),s.sections!==void 0&&s.sections.forEach(function(K){R(s.startx,K.y,s.stopx,K.y).style("stroke-dasharray","3, 3")});let F=zbe();F.text=u,F.x=s.startx,F.y=s.starty,F.fontFamily=T,F.fontSize=_,F.fontWeight=A,F.anchor="middle",F.valign="middle",F.tspan=!1,F.width=y||50,F.height=b||20,F.textMargin=v,F.class="labelText",$Ge(P,F),F=HGe(),F.text=s.title,F.x=s.startx+y/2+(s.stopx-s.startx)/2,F.y=s.starty+p+v,F.anchor="middle",F.valign="middle",F.textMargin=v,F.class="loopText",F.fontFamily=T,F.fontSize=_,F.fontWeight=A,F.wrap=!0;let j=Dv(F.text)?await pJ(P,F,s):YD(P,F);if(s.sectionTitles!==void 0){for(const[K,ee]of Object.entries(s.sectionTitles))if(ee.message){F.text=ee.message,F.x=s.startx+(s.stopx-s.startx)/2,F.y=s.sections[K].y+p+v,F.class="loopText",F.anchor="middle",F.valign="middle",F.tspan=!1,F.fontFamily=T,F.fontSize=_,F.fontWeight=A,F.wrap=s.wrap,Dv(F.text)?(s.starty=s.sections[K].y,await pJ(P,F,s)):YD(P,F);let ie=Math.round(j.map(oe=>(oe._groups||oe)[0][0].getBBox().height).reduce((oe,pe)=>oe+pe));s.sections[K].height+=ie-(p+v)}}return s.height=Math.round(s.stopy-s.starty),P},qGe=function(i,s){Tqe(i,s)},tin=function(i){i.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},nin=function(i){i.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},rin=function(i){i.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},iin=function(i){i.append("defs").append("marker").attr("id","arrowhead").attr("refX",7.9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},sin=function(i){i.append("defs").append("marker").attr("id","filled-head").attr("refX",15.5).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},ain=function(i){i.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},oin=function(i){i.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",4.5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},HGe=function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},cin=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},Tve=function(){function i(v,b,y,T,_,A,P){const R=b.append("text").attr("x",y+_/2).attr("y",T+A/2+5).style("text-anchor","middle").text(v);p(R,P)}function s(v,b,y,T,_,A,P,R){const{actorFontSize:F,actorFontFamily:j,actorFontWeight:K}=R,[ee,ie]=NC(F),oe=v.split(ci.lineBreakRegex);for(let pe=0;pei.height||0))+(this.loops.length===0?0:this.loops.map(i=>i.height||0).reduce((i,s)=>i+s))+(this.messages.length===0?0:this.messages.map(i=>i.height||0).reduce((i,s)=>i+s))+(this.notes.length===0?0:this.notes.map(i=>i.height||0).reduce((i,s)=>i+s))},clear:function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},addBox:function(i){this.boxes.push(i)},addActor:function(i){this.actors.push(i)},addLoop:function(i){this.loops.push(i)},addMessage:function(i){this.messages.push(i)},addNote:function(i){this.notes.push(i)},lastActor:function(){return this.actors[this.actors.length-1]},lastLoop:function(){return this.loops[this.loops.length-1]},lastMessage:function(){return this.messages[this.messages.length-1]},lastNote:function(){return this.notes[this.notes.length-1]},actors:[],boxes:[],loops:[],messages:[],notes:[]},init:function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,UGe(qt())},updateVal:function(i,s,u,d){i[s]===void 0?i[s]=u:i[s]=d(u,i[s])},updateBounds:function(i,s,u,d){const p=this;let v=0;function b(y){return function(_){v++;const A=p.sequenceItems.length-v+1;p.updateVal(_,"starty",s-A*En.boxMargin,Math.min),p.updateVal(_,"stopy",d+A*En.boxMargin,Math.max),p.updateVal(ni.data,"startx",i-A*En.boxMargin,Math.min),p.updateVal(ni.data,"stopx",u+A*En.boxMargin,Math.max),y!=="activation"&&(p.updateVal(_,"startx",i-A*En.boxMargin,Math.min),p.updateVal(_,"stopx",u+A*En.boxMargin,Math.max),p.updateVal(ni.data,"starty",s-A*En.boxMargin,Math.min),p.updateVal(ni.data,"stopy",d+A*En.boxMargin,Math.max))}}this.sequenceItems.forEach(b()),this.activations.forEach(b("activation"))},insert:function(i,s,u,d){const p=ci.getMin(i,u),v=ci.getMax(i,u),b=ci.getMin(s,d),y=ci.getMax(s,d);this.updateVal(ni.data,"startx",p,Math.min),this.updateVal(ni.data,"starty",b,Math.min),this.updateVal(ni.data,"stopx",v,Math.max),this.updateVal(ni.data,"stopy",y,Math.max),this.updateBounds(p,b,v,y)},newActivation:function(i,s,u){const d=u[i.from.actor],p=bJ(i.from.actor).length||0,v=d.x+d.width/2+(p-1)*En.activationWidth/2;this.activations.push({startx:v,starty:this.verticalPos+2,stopx:v+En.activationWidth,stopy:void 0,actor:i.from.actor,anchored:Zf.anchorElement(s)})},endActivation:function(i){const s=this.activations.map(function(u){return u.actor}).lastIndexOf(i.from.actor);return this.activations.splice(s,1)[0]},createLoop:function(i={message:void 0,wrap:!1,width:void 0},s){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:i.message,wrap:i.wrap,width:i.width,height:0,fill:s}},newLoop:function(i={message:void 0,wrap:!1,width:void 0},s){this.sequenceItems.push(this.createLoop(i,s))},endLoop:function(){return this.sequenceItems.pop()},isLoopOverlap:function(){return this.sequenceItems.length?this.sequenceItems[this.sequenceItems.length-1].overlap:!1},addSectionToLoop:function(i){const s=this.sequenceItems.pop();s.sections=s.sections||[],s.sectionTitles=s.sectionTitles||[],s.sections.push({y:ni.getVerticalPos(),height:0}),s.sectionTitles.push(i),this.sequenceItems.push(s)},saveVerticalPos:function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},resetVerticalPos:function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},bumpVerticalPos:function(i){this.verticalPos=this.verticalPos+i,this.data.stopy=ci.getMax(this.data.stopy,this.verticalPos)},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return{bounds:this.data,models:this.models}}},lin=async function(i,s){ni.bumpVerticalPos(En.boxMargin),s.height=En.boxMargin,s.starty=ni.getVerticalPos();const u=qC();u.x=s.startx,u.y=s.starty,u.width=s.width||En.width,u.class="note";const d=i.append("g"),p=Zf.drawRect(d,u),v=zbe();v.x=s.startx,v.y=s.starty,v.width=u.width,v.dy="1em",v.text=s.message,v.class="noteText",v.fontFamily=En.noteFontFamily,v.fontSize=En.noteFontSize,v.fontWeight=En.noteFontWeight,v.anchor=En.noteAlign,v.textMargin=En.noteMargin,v.valign="center";const b=Dv(v.text)?await pJ(d,v):YD(d,v),y=Math.round(b.map(T=>(T._groups||T)[0][0].getBBox().height).reduce((T,_)=>T+_));p.attr("height",y+2*En.noteMargin),s.height+=y+2*En.noteMargin,ni.bumpVerticalPos(y+2*En.noteMargin),s.stopy=s.starty+y+2*En.noteMargin,s.stopx=s.startx+u.width,ni.insert(s.startx,s.starty,s.stopx,s.stopy),ni.models.addNote(s)},eS=i=>({fontFamily:i.messageFontFamily,fontSize:i.messageFontSize,fontWeight:i.messageFontWeight}),XD=i=>({fontFamily:i.noteFontFamily,fontSize:i.noteFontSize,fontWeight:i.noteFontWeight}),Cve=i=>({fontFamily:i.actorFontFamily,fontSize:i.actorFontSize,fontWeight:i.actorFontWeight});async function hin(i,s){ni.bumpVerticalPos(10);const{startx:u,stopx:d,message:p}=s,v=ci.splitBreaks(p).length,b=Dv(p),y=b?await HF(p,qt()):Ao.calculateTextDimensions(p,eS(En));if(!b){const P=y.height/v;s.height+=P,ni.bumpVerticalPos(P)}let T,_=y.height-10;const A=y.width;if(u===d){T=ni.getVerticalPos()+_,En.rightAngles||(_+=En.boxMargin,T=ni.getVerticalPos()+_),_+=30;const P=ci.getMax(A/2,En.width/2);ni.insert(u-P,ni.getVerticalPos()-10+_,d+P,ni.getVerticalPos()+30+_)}else _+=En.boxMargin,T=ni.getVerticalPos()+_,ni.insert(u,T-10,d,T);return ni.bumpVerticalPos(_),s.height+=_,s.stopy=s.starty+s.height,ni.insert(s.fromBounds,s.starty,s.toBounds,s.stopy),T}const fin=async function(i,s,u,d){const{startx:p,stopx:v,starty:b,message:y,type:T,sequenceIndex:_,sequenceVisible:A}=s,P=Ao.calculateTextDimensions(y,eS(En)),R=zbe();R.x=p,R.y=b+10,R.width=v-p,R.class="messageText",R.dy="1em",R.text=y,R.fontFamily=En.messageFontFamily,R.fontSize=En.messageFontSize,R.fontWeight=En.messageFontWeight,R.anchor=En.messageAlign,R.valign="center",R.textMargin=En.wrapPadding,R.tspan=!1,Dv(R.text)?await pJ(i,R,{startx:p,stopx:v,starty:u}):YD(i,R);const F=P.width;let j;p===v?En.rightAngles?j=i.append("path").attr("d",`M ${p},${u} H ${p+ci.getMax(En.width/2,F/2)} V ${u+25} H ${p}`):j=i.append("path").attr("d","M "+p+","+u+" C "+(p+60)+","+(u-10)+" "+(p+60)+","+(u+30)+" "+p+","+(u+20)):(j=i.append("line"),j.attr("x1",p),j.attr("y1",u),j.attr("x2",v),j.attr("y2",u)),T===d.db.LINETYPE.DOTTED||T===d.db.LINETYPE.DOTTED_CROSS||T===d.db.LINETYPE.DOTTED_POINT||T===d.db.LINETYPE.DOTTED_OPEN?(j.style("stroke-dasharray","3, 3"),j.attr("class","messageLine1")):j.attr("class","messageLine0");let K="";En.arrowMarkerAbsolute&&(K=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,K=K.replace(/\(/g,"\\("),K=K.replace(/\)/g,"\\)")),j.attr("stroke-width",2),j.attr("stroke","none"),j.style("fill","none"),(T===d.db.LINETYPE.SOLID||T===d.db.LINETYPE.DOTTED)&&j.attr("marker-end","url("+K+"#arrowhead)"),(T===d.db.LINETYPE.SOLID_POINT||T===d.db.LINETYPE.DOTTED_POINT)&&j.attr("marker-end","url("+K+"#filled-head)"),(T===d.db.LINETYPE.SOLID_CROSS||T===d.db.LINETYPE.DOTTED_CROSS)&&j.attr("marker-end","url("+K+"#crosshead)"),(A||En.showSequenceNumbers)&&(j.attr("marker-start","url("+K+"#sequencenumber)"),i.append("text").attr("x",p).attr("y",u+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(_))},din=async function(i,s,u,d,p,v,b){let y=0,T=0,_,A=0;for(const P of d){const R=s[P],F=R.box;_&&_!=F&&(b||ni.models.addBox(_),T+=En.boxMargin+_.margin),F&&F!=_&&(b||(F.x=y+T,F.y=p),T+=F.margin),R.width=R.width||En.width,R.height=ci.getMax(R.height||En.height,En.height),R.margin=R.margin||En.actorMargin,A=ci.getMax(A,R.height),u[R.name]&&(T+=R.width/2),R.x=y+T,R.starty=ni.getVerticalPos(),ni.insert(R.x,p,R.x+R.width,R.height),y+=R.width+T,R.box&&(R.box.width=y+F.margin-R.box.x),T=R.margin,_=R.box,ni.models.addActor(R)}_&&!b&&ni.models.addBox(_),ni.bumpVerticalPos(A)},Sve=async function(i,s,u,d){if(d){let p=0;ni.bumpVerticalPos(En.boxMargin*2);for(const v of u){const b=s[v];b.stopy||(b.stopy=ni.getVerticalPos());const y=await Zf.drawActor(i,b,En,!0);p=ci.getMax(p,y)}ni.bumpVerticalPos(p+En.boxMargin)}else for(const p of u){const v=s[p];await Zf.drawActor(i,v,En,!1)}},VGe=function(i,s,u,d){let p=0,v=0;for(const b of u){const y=s[b],T=min(y),_=Zf.drawPopup(i,y,T,En,En.forceMenus,d);_.height>p&&(p=_.height),_.width+y.x>v&&(v=_.width+y.x)}return{maxHeight:p,maxWidth:v}},UGe=function(i){id(En,i),i.fontFamily&&(En.actorFontFamily=En.noteFontFamily=En.messageFontFamily=i.fontFamily),i.fontSize&&(En.actorFontSize=En.noteFontSize=En.messageFontSize=i.fontSize),i.fontWeight&&(En.actorFontWeight=En.noteFontWeight=En.messageFontWeight=i.fontWeight)},bJ=function(i){return ni.activations.filter(function(s){return s.actor===i})},GGe=function(i,s){const u=s[i],d=bJ(i),p=d.reduce(function(b,y){return ci.getMin(b,y.startx)},u.x+u.width/2-1),v=d.reduce(function(b,y){return ci.getMax(b,y.stopx)},u.x+u.width/2+1);return[p,v]};function a5(i,s,u,d,p){ni.bumpVerticalPos(u);let v=d;if(s.id&&s.message&&i[s.id]){const b=i[s.id].width,y=eS(En);s.message=Ao.wrapLabel(`[${s.message}]`,b-2*En.wrapPadding,y),s.width=b,s.wrap=!0;const T=Ao.calculateTextDimensions(s.message,y),_=ci.getMax(T.height,En.labelBoxHeight);v=d+_,Xe.debug(`${_} - ${s.message}`)}p(s),ni.bumpVerticalPos(v)}function gin(i,s,u,d,p,v,b){function y(_,A){_.x{Se.add(Ce.from),Se.add(Ce.to)}),j=j.filter(Ce=>Se.has(Ce))}await din(_,A,P,j,0,K,!1);const be=await xin(K,A,pe,d);Zf.insertArrowHead(_),Zf.insertArrowCrossHead(_),Zf.insertArrowFilledHead(_),Zf.insertSequenceNumber(_);function ae(Se,Ce){const ke=ni.endActivation(Se);ke.starty+18>Ce&&(ke.starty=Ce-6,Ce+=12),Zf.drawActivation(_,ke,Ce,En,bJ(Se.from.actor).length),ni.insert(ke.startx,Ce-10,ke.stopx,Ce)}let ne=1,se=1;const de=[],X=[];let ge=0;for(const Se of K){let Ce,ke,Ke;switch(Se.type){case d.db.LINETYPE.NOTE:ni.resetVerticalPos(),ke=Se.noteModel,await lin(_,ke);break;case d.db.LINETYPE.ACTIVE_START:ni.newActivation(Se,_,A);break;case d.db.LINETYPE.ACTIVE_END:ae(Se,ni.getVerticalPos());break;case d.db.LINETYPE.LOOP_START:a5(be,Se,En.boxMargin,En.boxMargin+En.boxTextMargin,Ft=>ni.newLoop(Ft));break;case d.db.LINETYPE.LOOP_END:Ce=ni.endLoop(),await Zf.drawLoop(_,Ce,"loop",En),ni.bumpVerticalPos(Ce.stopy-ni.getVerticalPos()),ni.models.addLoop(Ce);break;case d.db.LINETYPE.RECT_START:a5(be,Se,En.boxMargin,En.boxMargin,Ft=>ni.newLoop(void 0,Ft.message));break;case d.db.LINETYPE.RECT_END:Ce=ni.endLoop(),X.push(Ce),ni.models.addLoop(Ce),ni.bumpVerticalPos(Ce.stopy-ni.getVerticalPos());break;case d.db.LINETYPE.OPT_START:a5(be,Se,En.boxMargin,En.boxMargin+En.boxTextMargin,Ft=>ni.newLoop(Ft));break;case d.db.LINETYPE.OPT_END:Ce=ni.endLoop(),await Zf.drawLoop(_,Ce,"opt",En),ni.bumpVerticalPos(Ce.stopy-ni.getVerticalPos()),ni.models.addLoop(Ce);break;case d.db.LINETYPE.ALT_START:a5(be,Se,En.boxMargin,En.boxMargin+En.boxTextMargin,Ft=>ni.newLoop(Ft));break;case d.db.LINETYPE.ALT_ELSE:a5(be,Se,En.boxMargin+En.boxTextMargin,En.boxMargin,Ft=>ni.addSectionToLoop(Ft));break;case d.db.LINETYPE.ALT_END:Ce=ni.endLoop(),await Zf.drawLoop(_,Ce,"alt",En),ni.bumpVerticalPos(Ce.stopy-ni.getVerticalPos()),ni.models.addLoop(Ce);break;case d.db.LINETYPE.PAR_START:case d.db.LINETYPE.PAR_OVER_START:a5(be,Se,En.boxMargin,En.boxMargin+En.boxTextMargin,Ft=>ni.newLoop(Ft)),ni.saveVerticalPos();break;case d.db.LINETYPE.PAR_AND:a5(be,Se,En.boxMargin+En.boxTextMargin,En.boxMargin,Ft=>ni.addSectionToLoop(Ft));break;case d.db.LINETYPE.PAR_END:Ce=ni.endLoop(),await Zf.drawLoop(_,Ce,"par",En),ni.bumpVerticalPos(Ce.stopy-ni.getVerticalPos()),ni.models.addLoop(Ce);break;case d.db.LINETYPE.AUTONUMBER:ne=Se.message.start||ne,se=Se.message.step||se,Se.message.visible?d.db.enableSequenceNumbers():d.db.disableSequenceNumbers();break;case d.db.LINETYPE.CRITICAL_START:a5(be,Se,En.boxMargin,En.boxMargin+En.boxTextMargin,Ft=>ni.newLoop(Ft));break;case d.db.LINETYPE.CRITICAL_OPTION:a5(be,Se,En.boxMargin+En.boxTextMargin,En.boxMargin,Ft=>ni.addSectionToLoop(Ft));break;case d.db.LINETYPE.CRITICAL_END:Ce=ni.endLoop(),await Zf.drawLoop(_,Ce,"critical",En),ni.bumpVerticalPos(Ce.stopy-ni.getVerticalPos()),ni.models.addLoop(Ce);break;case d.db.LINETYPE.BREAK_START:a5(be,Se,En.boxMargin,En.boxMargin+En.boxTextMargin,Ft=>ni.newLoop(Ft));break;case d.db.LINETYPE.BREAK_END:Ce=ni.endLoop(),await Zf.drawLoop(_,Ce,"break",En),ni.bumpVerticalPos(Ce.stopy-ni.getVerticalPos()),ni.models.addLoop(Ce);break;default:try{Ke=Se.msgModel,Ke.starty=ni.getVerticalPos(),Ke.sequenceIndex=ne,Ke.sequenceVisible=d.db.showSequenceNumbers();const Ft=await hin(_,Ke);gin(Se,Ke,Ft,ge,A,P,R),de.push({messageModel:Ke,lineStartY:Ft}),ni.models.addMessage(Ke)}catch(Ft){Xe.error("error while drawing message",Ft)}}[d.db.LINETYPE.SOLID_OPEN,d.db.LINETYPE.DOTTED_OPEN,d.db.LINETYPE.SOLID,d.db.LINETYPE.DOTTED,d.db.LINETYPE.SOLID_CROSS,d.db.LINETYPE.DOTTED_CROSS,d.db.LINETYPE.SOLID_POINT,d.db.LINETYPE.DOTTED_POINT].includes(Se.type)&&(ne=ne+se),ge++}Xe.debug("createdActors",P),Xe.debug("destroyedActors",R),await Sve(_,A,j,!1);for(const Se of de)await fin(_,Se.messageModel,Se.lineStartY,d);En.mirrorActors&&await Sve(_,A,j,!0),X.forEach(Se=>Zf.drawBackgroundRect(_,Se)),zGe(_,A,j,En);for(const Se of ni.models.boxes)Se.height=ni.getVerticalPos()-Se.y,ni.insert(Se.x,Se.y,Se.x+Se.width,Se.height),Se.startx=Se.x,Se.starty=Se.y,Se.stopx=Se.startx+Se.width,Se.stopy=Se.starty+Se.height,Se.stroke="rgb(0,0,0, 0.5)",await Zf.drawBox(_,Se,En);ie&&ni.bumpVerticalPos(En.boxMargin);const W=VGe(_,A,j,T),{bounds:xe}=ni.getBounds();let U=xe.stopy-xe.starty;U{const b=eS(En);let y=v.actorKeys.reduce((A,P)=>A+=i[P].width+(i[P].margin||0),0);y-=2*En.boxTextMargin,v.wrap&&(v.name=Ao.wrapLabel(v.name,y-2*En.wrapPadding,b));const T=Ao.calculateTextDimensions(v.name,b);p=ci.getMax(T.height,p);const _=ci.getMax(y,T.width+2*En.wrapPadding);if(v.margin=En.boxTextMargin,y<_){const A=(_-y)/2;v.margin+=A}}),u.forEach(v=>v.textMaxHeight=p),ci.getMax(d,En.height)}const win=async function(i,s,u){const d=s[i.from].x,p=s[i.to].x,v=i.wrap&&i.message;let b=Dv(i.message)?await HF(i.message,qt()):Ao.calculateTextDimensions(v?Ao.wrapLabel(i.message,En.width,XD(En)):i.message,XD(En));const y={width:v?En.width:ci.getMax(En.width,b.width+2*En.noteMargin),height:0,startx:s[i.from].x,stopx:0,starty:0,stopy:0,message:i.message};return i.placement===u.db.PLACEMENT.RIGHTOF?(y.width=v?ci.getMax(En.width,b.width):ci.getMax(s[i.from].width/2+s[i.to].width/2,b.width+2*En.noteMargin),y.startx=d+(s[i.from].width+En.actorMargin)/2):i.placement===u.db.PLACEMENT.LEFTOF?(y.width=v?ci.getMax(En.width,b.width+2*En.noteMargin):ci.getMax(s[i.from].width/2+s[i.to].width/2,b.width+2*En.noteMargin),y.startx=d-y.width+(s[i.from].width-En.actorMargin)/2):i.to===i.from?(b=Ao.calculateTextDimensions(v?Ao.wrapLabel(i.message,ci.getMax(En.width,s[i.from].width),XD(En)):i.message,XD(En)),y.width=v?ci.getMax(En.width,s[i.from].width):ci.getMax(s[i.from].width,En.width,b.width+2*En.noteMargin),y.startx=d+(s[i.from].width-y.width)/2):(y.width=Math.abs(d+s[i.from].width/2-(p+s[i.to].width/2))+En.actorMargin,y.startx=d2,P=K=>y?-K:K;i.from===i.to?_=T:(i.activate&&!A&&(_+=P(En.activationWidth/2-1)),[u.db.LINETYPE.SOLID_OPEN,u.db.LINETYPE.DOTTED_OPEN].includes(i.type)||(_+=P(3)));const R=[d,p,v,b],F=Math.abs(T-_);i.wrap&&i.message&&(i.message=Ao.wrapLabel(i.message,ci.getMax(F+2*En.wrapPadding,En.width),eS(En)));const j=Ao.calculateTextDimensions(i.message,eS(En));return{width:ci.getMax(i.wrap?0:j.width+2*En.wrapPadding,F+2*En.wrapPadding,En.width),height:0,startx:T,stopx:_,starty:0,stopy:0,message:i.message,type:i.type,wrap:i.wrap,fromBounds:Math.min.apply(null,R),toBounds:Math.max.apply(null,R)}},xin=async function(i,s,u,d){const p={},v=[];let b,y,T;for(const _ of i){switch(_.id=Ao.random({length:10}),_.type){case d.db.LINETYPE.LOOP_START:case d.db.LINETYPE.ALT_START:case d.db.LINETYPE.OPT_START:case d.db.LINETYPE.PAR_START:case d.db.LINETYPE.PAR_OVER_START:case d.db.LINETYPE.CRITICAL_START:case d.db.LINETYPE.BREAK_START:v.push({id:_.id,msg:_.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case d.db.LINETYPE.ALT_ELSE:case d.db.LINETYPE.PAR_AND:case d.db.LINETYPE.CRITICAL_OPTION:_.message&&(b=v.pop(),p[b.id]=b,p[_.id]=b,v.push(b));break;case d.db.LINETYPE.LOOP_END:case d.db.LINETYPE.ALT_END:case d.db.LINETYPE.OPT_END:case d.db.LINETYPE.PAR_END:case d.db.LINETYPE.CRITICAL_END:case d.db.LINETYPE.BREAK_END:b=v.pop(),p[b.id]=b;break;case d.db.LINETYPE.ACTIVE_START:{const P=s[_.from?_.from.actor:_.to.actor],R=bJ(_.from?_.from.actor:_.to.actor).length,F=P.x+P.width/2+(R-1)*En.activationWidth/2,j={startx:F,stopx:F+En.activationWidth,actor:_.from.actor,enabled:!0};ni.activations.push(j)}break;case d.db.LINETYPE.ACTIVE_END:{const P=ni.activations.map(R=>R.actor).lastIndexOf(_.from.actor);delete ni.activations.splice(P,1)[0]}break}_.placement!==void 0?(y=await win(_,s,d),_.noteModel=y,v.forEach(P=>{b=P,b.from=ci.getMin(b.from,y.startx),b.to=ci.getMax(b.to,y.startx+y.width),b.width=ci.getMax(b.width,Math.abs(b.from-b.to))-En.labelBoxWidth})):(T=yin(_,s,d),_.msgModel=T,T.startx&&T.stopx&&v.length>0&&v.forEach(P=>{if(b=P,T.startx===T.stopx){const R=s[_.from],F=s[_.to];b.from=ci.getMin(R.x-T.width/2,R.x-R.width/2,b.from),b.to=ci.getMax(F.x+T.width/2,F.x+R.width/2,b.to),b.width=ci.getMax(b.width,Math.abs(b.to-b.from))-En.labelBoxWidth}else b.from=ci.getMin(T.startx,b.from),b.to=ci.getMax(T.stopx,b.to),b.width=ci.getMax(b.width,T.width)-En.labelBoxWidth}))}return ni.activations=[],Xe.debug("Loop type widths:",p),p},kin=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:yrn,db:FGe,renderer:{bounds:ni,drawActors:Sve,drawActorsPopup:VGe,setConf:UGe,draw:pin},styles:Urn,init:({wrap:i})=>{FGe.setWrap(i)}}},Symbol.toStringTag,{value:"Module"}));var _ve=function(){var i=function(ao,Tr,Fn,qn){for(Fn=Fn||{},qn=ao.length;qn--;Fn[ao[qn]]=Tr);return Fn},s=[1,17],u=[1,18],d=[1,19],p=[1,39],v=[1,40],b=[1,25],y=[1,23],T=[1,24],_=[1,31],A=[1,32],P=[1,33],R=[1,34],F=[1,35],j=[1,36],K=[1,26],ee=[1,27],ie=[1,28],oe=[1,29],pe=[1,43],be=[1,30],ae=[1,42],ne=[1,44],se=[1,41],de=[1,45],X=[1,9],ge=[1,8,9],W=[1,56],xe=[1,57],U=[1,58],Fe=[1,59],Pe=[1,60],je=[1,61],Ie=[1,62],Se=[1,8,9,39],Ce=[1,74],ke=[1,8,9,12,13,21,37,39,42,59,60,61,62,63,64,65,70,72],Ke=[1,8,9,12,13,19,21,37,39,42,46,59,60,61,62,63,64,65,70,72,74,80,95,97,98],Ft=[13,74,80,95,97,98],Ne=[13,64,65,74,80,95,97,98],gn=[13,59,60,61,62,63,74,80,95,97,98],_t=[1,93],Et=[1,110],Gt=[1,108],ln=[1,102],xt=[1,103],Pt=[1,104],Qe=[1,105],Dt=[1,106],kt=[1,107],On=[1,109],ht=[1,8,9,37,39,42],zr=[1,8,9,21],yt=[1,8,9,78],ji=[1,8,9,21,73,74,78,80,81,82,83,84,85],xi={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,className:17,classLiteralName:18,GENERICTYPE:19,relationStatement:20,LABEL:21,namespaceStatement:22,classStatement:23,memberStatement:24,annotationStatement:25,clickStatement:26,styleStatement:27,cssClassStatement:28,noteStatement:29,direction:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,namespaceIdentifier:36,STRUCT_START:37,classStatements:38,STRUCT_STOP:39,NAMESPACE:40,classIdentifier:41,STYLE_SEPARATOR:42,members:43,CLASS:44,ANNOTATION_START:45,ANNOTATION_END:46,MEMBER:47,SEPARATOR:48,relation:49,NOTE_FOR:50,noteText:51,NOTE:52,direction_tb:53,direction_bt:54,direction_rl:55,direction_lr:56,relationType:57,lineType:58,AGGREGATION:59,EXTENSION:60,COMPOSITION:61,DEPENDENCY:62,LOLLIPOP:63,LINE:64,DOTTED_LINE:65,CALLBACK:66,LINK:67,LINK_TARGET:68,CLICK:69,CALLBACK_NAME:70,CALLBACK_ARGS:71,HREF:72,STYLE:73,ALPHA:74,stylesOpt:75,CSSCLASS:76,style:77,COMMA:78,styleComponent:79,NUM:80,COLON:81,UNIT:82,SPACE:83,BRKT:84,PCT:85,commentToken:86,textToken:87,graphCodeTokens:88,textNoTagsToken:89,TAGSTART:90,TAGEND:91,"==":92,"--":93,DEFAULT:94,MINUS:95,keywords:96,UNICODE_TEXT:97,BQUOTE_STR:98,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",19:"GENERICTYPE",21:"LABEL",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",37:"STRUCT_START",39:"STRUCT_STOP",40:"NAMESPACE",42:"STYLE_SEPARATOR",44:"CLASS",45:"ANNOTATION_START",46:"ANNOTATION_END",47:"MEMBER",48:"SEPARATOR",50:"NOTE_FOR",52:"NOTE",53:"direction_tb",54:"direction_bt",55:"direction_rl",56:"direction_lr",59:"AGGREGATION",60:"EXTENSION",61:"COMPOSITION",62:"DEPENDENCY",63:"LOLLIPOP",64:"LINE",65:"DOTTED_LINE",66:"CALLBACK",67:"LINK",68:"LINK_TARGET",69:"CLICK",70:"CALLBACK_NAME",71:"CALLBACK_ARGS",72:"HREF",73:"STYLE",74:"ALPHA",76:"CSSCLASS",78:"COMMA",80:"NUM",81:"COLON",82:"UNIT",83:"SPACE",84:"BRKT",85:"PCT",88:"graphCodeTokens",90:"TAGSTART",91:"TAGEND",92:"==",93:"--",94:"DEFAULT",95:"MINUS",96:"keywords",97:"UNICODE_TEXT",98:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,2],[17,1],[17,1],[17,2],[17,2],[17,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[22,4],[22,5],[36,2],[38,1],[38,2],[38,3],[23,1],[23,3],[23,4],[23,6],[41,2],[41,3],[25,4],[43,1],[43,2],[24,1],[24,2],[24,1],[24,1],[20,3],[20,4],[20,4],[20,5],[29,3],[29,2],[30,1],[30,1],[30,1],[30,1],[49,3],[49,2],[49,2],[49,1],[57,1],[57,1],[57,1],[57,1],[57,1],[58,1],[58,1],[26,3],[26,4],[26,3],[26,4],[26,4],[26,5],[26,3],[26,4],[26,4],[26,5],[26,4],[26,5],[26,5],[26,6],[27,3],[28,3],[75,1],[75,3],[77,1],[77,2],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[86,1],[86,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[89,1],[89,1],[89,1],[89,1],[16,1],[16,1],[16,1],[16,1],[18,1],[51,1]],performAction:function(Tr,Fn,qn,Un,At,wt,on){var fn=wt.length-1;switch(At){case 8:this.$=wt[fn-1];break;case 9:case 11:case 12:this.$=wt[fn];break;case 10:case 13:this.$=wt[fn-1]+wt[fn];break;case 14:case 15:this.$=wt[fn-1]+"~"+wt[fn]+"~";break;case 16:Un.addRelation(wt[fn]);break;case 17:wt[fn-1].title=Un.cleanupLabel(wt[fn]),Un.addRelation(wt[fn-1]);break;case 27:this.$=wt[fn].trim(),Un.setAccTitle(this.$);break;case 28:case 29:this.$=wt[fn].trim(),Un.setAccDescription(this.$);break;case 30:Un.addClassesToNamespace(wt[fn-3],wt[fn-1]);break;case 31:Un.addClassesToNamespace(wt[fn-4],wt[fn-1]);break;case 32:this.$=wt[fn],Un.addNamespace(wt[fn]);break;case 33:this.$=[wt[fn]];break;case 34:this.$=[wt[fn-1]];break;case 35:wt[fn].unshift(wt[fn-2]),this.$=wt[fn];break;case 37:Un.setCssClass(wt[fn-2],wt[fn]);break;case 38:Un.addMembers(wt[fn-3],wt[fn-1]);break;case 39:Un.setCssClass(wt[fn-5],wt[fn-3]),Un.addMembers(wt[fn-5],wt[fn-1]);break;case 40:this.$=wt[fn],Un.addClass(wt[fn]);break;case 41:this.$=wt[fn-1],Un.addClass(wt[fn-1]),Un.setClassLabel(wt[fn-1],wt[fn]);break;case 42:Un.addAnnotation(wt[fn],wt[fn-2]);break;case 43:this.$=[wt[fn]];break;case 44:wt[fn].push(wt[fn-1]),this.$=wt[fn];break;case 45:break;case 46:Un.addMember(wt[fn-1],Un.cleanupLabel(wt[fn]));break;case 47:break;case 48:break;case 49:this.$={id1:wt[fn-2],id2:wt[fn],relation:wt[fn-1],relationTitle1:"none",relationTitle2:"none"};break;case 50:this.$={id1:wt[fn-3],id2:wt[fn],relation:wt[fn-1],relationTitle1:wt[fn-2],relationTitle2:"none"};break;case 51:this.$={id1:wt[fn-3],id2:wt[fn],relation:wt[fn-2],relationTitle1:"none",relationTitle2:wt[fn-1]};break;case 52:this.$={id1:wt[fn-4],id2:wt[fn],relation:wt[fn-2],relationTitle1:wt[fn-3],relationTitle2:wt[fn-1]};break;case 53:Un.addNote(wt[fn],wt[fn-1]);break;case 54:Un.addNote(wt[fn]);break;case 55:Un.setDirection("TB");break;case 56:Un.setDirection("BT");break;case 57:Un.setDirection("RL");break;case 58:Un.setDirection("LR");break;case 59:this.$={type1:wt[fn-2],type2:wt[fn],lineType:wt[fn-1]};break;case 60:this.$={type1:"none",type2:wt[fn],lineType:wt[fn-1]};break;case 61:this.$={type1:wt[fn-1],type2:"none",lineType:wt[fn]};break;case 62:this.$={type1:"none",type2:"none",lineType:wt[fn]};break;case 63:this.$=Un.relationType.AGGREGATION;break;case 64:this.$=Un.relationType.EXTENSION;break;case 65:this.$=Un.relationType.COMPOSITION;break;case 66:this.$=Un.relationType.DEPENDENCY;break;case 67:this.$=Un.relationType.LOLLIPOP;break;case 68:this.$=Un.lineType.LINE;break;case 69:this.$=Un.lineType.DOTTED_LINE;break;case 70:case 76:this.$=wt[fn-2],Un.setClickEvent(wt[fn-1],wt[fn]);break;case 71:case 77:this.$=wt[fn-3],Un.setClickEvent(wt[fn-2],wt[fn-1]),Un.setTooltip(wt[fn-2],wt[fn]);break;case 72:this.$=wt[fn-2],Un.setLink(wt[fn-1],wt[fn]);break;case 73:this.$=wt[fn-3],Un.setLink(wt[fn-2],wt[fn-1],wt[fn]);break;case 74:this.$=wt[fn-3],Un.setLink(wt[fn-2],wt[fn-1]),Un.setTooltip(wt[fn-2],wt[fn]);break;case 75:this.$=wt[fn-4],Un.setLink(wt[fn-3],wt[fn-2],wt[fn]),Un.setTooltip(wt[fn-3],wt[fn-1]);break;case 78:this.$=wt[fn-3],Un.setClickEvent(wt[fn-2],wt[fn-1],wt[fn]);break;case 79:this.$=wt[fn-4],Un.setClickEvent(wt[fn-3],wt[fn-2],wt[fn-1]),Un.setTooltip(wt[fn-3],wt[fn]);break;case 80:this.$=wt[fn-3],Un.setLink(wt[fn-2],wt[fn]);break;case 81:this.$=wt[fn-4],Un.setLink(wt[fn-3],wt[fn-1],wt[fn]);break;case 82:this.$=wt[fn-4],Un.setLink(wt[fn-3],wt[fn-1]),Un.setTooltip(wt[fn-3],wt[fn]);break;case 83:this.$=wt[fn-5],Un.setLink(wt[fn-4],wt[fn-2],wt[fn]),Un.setTooltip(wt[fn-4],wt[fn-1]);break;case 84:this.$=wt[fn-2],Un.setCssStyle(wt[fn-1],wt[fn]);break;case 85:Un.setCssClass(wt[fn-1],wt[fn]);break;case 86:this.$=[wt[fn]];break;case 87:wt[fn-2].push(wt[fn]),this.$=wt[fn-2];break;case 89:this.$=wt[fn-1]+wt[fn];break}},table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:37,17:20,18:38,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,31:s,33:u,35:d,36:21,40:p,41:22,44:v,45:b,47:y,48:T,50:_,52:A,53:P,54:R,55:F,56:j,66:K,67:ee,69:ie,73:oe,74:pe,76:be,80:ae,95:ne,97:se,98:de},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},i(X,[2,5],{8:[1,46]}),{8:[1,47]},i(ge,[2,16],{21:[1,48]}),i(ge,[2,18]),i(ge,[2,19]),i(ge,[2,20]),i(ge,[2,21]),i(ge,[2,22]),i(ge,[2,23]),i(ge,[2,24]),i(ge,[2,25]),i(ge,[2,26]),{32:[1,49]},{34:[1,50]},i(ge,[2,29]),i(ge,[2,45],{49:51,57:54,58:55,13:[1,52],21:[1,53],59:W,60:xe,61:U,62:Fe,63:Pe,64:je,65:Ie}),{37:[1,63]},i(Se,[2,36],{37:[1,65],42:[1,64]}),i(ge,[2,47]),i(ge,[2,48]),{16:66,74:pe,80:ae,95:ne,97:se},{16:37,17:67,18:38,74:pe,80:ae,95:ne,97:se,98:de},{16:37,17:68,18:38,74:pe,80:ae,95:ne,97:se,98:de},{16:37,17:69,18:38,74:pe,80:ae,95:ne,97:se,98:de},{74:[1,70]},{13:[1,71]},{16:37,17:72,18:38,74:pe,80:ae,95:ne,97:se,98:de},{13:Ce,51:73},i(ge,[2,55]),i(ge,[2,56]),i(ge,[2,57]),i(ge,[2,58]),i(ke,[2,11],{16:37,18:38,17:75,19:[1,76],74:pe,80:ae,95:ne,97:se,98:de}),i(ke,[2,12],{19:[1,77]}),{15:78,16:79,74:pe,80:ae,95:ne,97:se},{16:37,17:80,18:38,74:pe,80:ae,95:ne,97:se,98:de},i(Ke,[2,112]),i(Ke,[2,113]),i(Ke,[2,114]),i(Ke,[2,115]),i([1,8,9,12,13,19,21,37,39,42,59,60,61,62,63,64,65,70,72],[2,116]),i(X,[2,6],{10:5,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,17:20,36:21,41:22,16:37,18:38,5:81,31:s,33:u,35:d,40:p,44:v,45:b,47:y,48:T,50:_,52:A,53:P,54:R,55:F,56:j,66:K,67:ee,69:ie,73:oe,74:pe,76:be,80:ae,95:ne,97:se,98:de}),{5:82,10:5,16:37,17:20,18:38,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,31:s,33:u,35:d,36:21,40:p,41:22,44:v,45:b,47:y,48:T,50:_,52:A,53:P,54:R,55:F,56:j,66:K,67:ee,69:ie,73:oe,74:pe,76:be,80:ae,95:ne,97:se,98:de},i(ge,[2,17]),i(ge,[2,27]),i(ge,[2,28]),{13:[1,84],16:37,17:83,18:38,74:pe,80:ae,95:ne,97:se,98:de},{49:85,57:54,58:55,59:W,60:xe,61:U,62:Fe,63:Pe,64:je,65:Ie},i(ge,[2,46]),{58:86,64:je,65:Ie},i(Ft,[2,62],{57:87,59:W,60:xe,61:U,62:Fe,63:Pe}),i(Ne,[2,63]),i(Ne,[2,64]),i(Ne,[2,65]),i(Ne,[2,66]),i(Ne,[2,67]),i(gn,[2,68]),i(gn,[2,69]),{8:[1,89],23:90,38:88,41:22,44:v},{16:91,74:pe,80:ae,95:ne,97:se},{43:92,47:_t},{46:[1,94]},{13:[1,95]},{13:[1,96]},{70:[1,97],72:[1,98]},{21:Et,73:Gt,74:ln,75:99,77:100,79:101,80:xt,81:Pt,82:Qe,83:Dt,84:kt,85:On},{74:[1,111]},{13:Ce,51:112},i(ge,[2,54]),i(ge,[2,117]),i(ke,[2,13]),i(ke,[2,14]),i(ke,[2,15]),{37:[2,32]},{15:113,16:79,37:[2,9],74:pe,80:ae,95:ne,97:se},i(ht,[2,40],{11:114,12:[1,115]}),i(X,[2,7]),{9:[1,116]},i(zr,[2,49]),{16:37,17:117,18:38,74:pe,80:ae,95:ne,97:se,98:de},{13:[1,119],16:37,17:118,18:38,74:pe,80:ae,95:ne,97:se,98:de},i(Ft,[2,61],{57:120,59:W,60:xe,61:U,62:Fe,63:Pe}),i(Ft,[2,60]),{39:[1,121]},{23:90,38:122,41:22,44:v},{8:[1,123],39:[2,33]},i(Se,[2,37],{37:[1,124]}),{39:[1,125]},{39:[2,43],43:126,47:_t},{16:37,17:127,18:38,74:pe,80:ae,95:ne,97:se,98:de},i(ge,[2,70],{13:[1,128]}),i(ge,[2,72],{13:[1,130],68:[1,129]}),i(ge,[2,76],{13:[1,131],71:[1,132]}),{13:[1,133]},i(ge,[2,84],{78:[1,134]}),i(yt,[2,86],{79:135,21:Et,73:Gt,74:ln,80:xt,81:Pt,82:Qe,83:Dt,84:kt,85:On}),i(ji,[2,88]),i(ji,[2,90]),i(ji,[2,91]),i(ji,[2,92]),i(ji,[2,93]),i(ji,[2,94]),i(ji,[2,95]),i(ji,[2,96]),i(ji,[2,97]),i(ji,[2,98]),i(ge,[2,85]),i(ge,[2,53]),{37:[2,10]},i(ht,[2,41]),{13:[1,136]},{1:[2,4]},i(zr,[2,51]),i(zr,[2,50]),{16:37,17:137,18:38,74:pe,80:ae,95:ne,97:se,98:de},i(Ft,[2,59]),i(ge,[2,30]),{39:[1,138]},{23:90,38:139,39:[2,34],41:22,44:v},{43:140,47:_t},i(Se,[2,38]),{39:[2,44]},i(ge,[2,42]),i(ge,[2,71]),i(ge,[2,73]),i(ge,[2,74],{68:[1,141]}),i(ge,[2,77]),i(ge,[2,78],{13:[1,142]}),i(ge,[2,80],{13:[1,144],68:[1,143]}),{21:Et,73:Gt,74:ln,77:145,79:101,80:xt,81:Pt,82:Qe,83:Dt,84:kt,85:On},i(ji,[2,89]),{14:[1,146]},i(zr,[2,52]),i(ge,[2,31]),{39:[2,35]},{39:[1,147]},i(ge,[2,75]),i(ge,[2,79]),i(ge,[2,81]),i(ge,[2,82],{68:[1,148]}),i(yt,[2,87],{79:135,21:Et,73:Gt,74:ln,80:xt,81:Pt,82:Qe,83:Dt,84:kt,85:On}),i(ht,[2,8]),i(Se,[2,39]),i(ge,[2,83])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],78:[2,32],113:[2,10],116:[2,4],126:[2,44],139:[2,35]},parseError:function(Tr,Fn){if(Fn.recoverable)this.trace(Tr);else{var qn=new Error(Tr);throw qn.hash=Fn,qn}},parse:function(Tr){var Fn=this,qn=[0],Un=[],At=[null],wt=[],on=this.table,fn="",An=0,oo=0,jo=2,$o=1,Pa=wt.slice.call(arguments,1),wo=Object.create(this.lexer),_s={yy:{}};for(var tl in this.yy)Object.prototype.hasOwnProperty.call(this.yy,tl)&&(_s.yy[tl]=this.yy[tl]);wo.setInput(Tr,_s.yy),_s.yy.lexer=wo,_s.yy.parser=this,typeof wo.yylloc>"u"&&(wo.yylloc={});var da=wo.yylloc;wt.push(da);var j0=wo.options&&wo.options.ranges;typeof _s.yy.parseError=="function"?this.parseError=_s.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function pm(){var ga;return ga=Un.pop()||wo.lex()||$o,typeof ga!="number"&&(ga instanceof Array&&(Un=ga,ga=Un.pop()),ga=Fn.symbols_[ga]||ga),ga}for(var Ml,Xc,Bc,ja,Ou={},Sa,Po,Fc,xa;;){if(Xc=qn[qn.length-1],this.defaultActions[Xc]?Bc=this.defaultActions[Xc]:((Ml===null||typeof Ml>"u")&&(Ml=pm()),Bc=on[Xc]&&on[Xc][Ml]),typeof Bc>"u"||!Bc.length||!Bc[0]){var Ba="";xa=[];for(Sa in on[Xc])this.terminals_[Sa]&&Sa>jo&&xa.push("'"+this.terminals_[Sa]+"'");wo.showPosition?Ba="Parse error on line "+(An+1)+`: +`+wo.showPosition()+` +Expecting `+xa.join(", ")+", got '"+(this.terminals_[Ml]||Ml)+"'":Ba="Parse error on line "+(An+1)+": Unexpected "+(Ml==$o?"end of input":"'"+(this.terminals_[Ml]||Ml)+"'"),this.parseError(Ba,{text:wo.match,token:this.terminals_[Ml]||Ml,line:wo.yylineno,loc:da,expected:xa})}if(Bc[0]instanceof Array&&Bc.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Xc+", token: "+Ml);switch(Bc[0]){case 1:qn.push(Ml),At.push(wo.yytext),wt.push(wo.yylloc),qn.push(Bc[1]),Ml=null,oo=wo.yyleng,fn=wo.yytext,An=wo.yylineno,da=wo.yylloc;break;case 2:if(Po=this.productions_[Bc[1]][1],Ou.$=At[At.length-Po],Ou._$={first_line:wt[wt.length-(Po||1)].first_line,last_line:wt[wt.length-1].last_line,first_column:wt[wt.length-(Po||1)].first_column,last_column:wt[wt.length-1].last_column},j0&&(Ou._$.range=[wt[wt.length-(Po||1)].range[0],wt[wt.length-1].range[1]]),ja=this.performAction.apply(Ou,[fn,oo,An,_s.yy,Bc[1],At,wt].concat(Pa)),typeof ja<"u")return ja;Po&&(qn=qn.slice(0,-1*Po*2),At=At.slice(0,-1*Po),wt=wt.slice(0,-1*Po)),qn.push(this.productions_[Bc[1]][0]),At.push(Ou.$),wt.push(Ou._$),Fc=on[qn[qn.length-2]][qn[qn.length-1]],qn.push(Fc);break;case 3:return!0}}return!0}},Ma=function(){var ao={EOF:1,parseError:function(Fn,qn){if(this.yy.parser)this.yy.parser.parseError(Fn,qn);else throw new Error(Fn)},setInput:function(Tr,Fn){return this.yy=Fn||this.yy||{},this._input=Tr,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Tr=this._input[0];this.yytext+=Tr,this.yyleng++,this.offset++,this.match+=Tr,this.matched+=Tr;var Fn=Tr.match(/(?:\r\n?|\n).*/g);return Fn?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Tr},unput:function(Tr){var Fn=Tr.length,qn=Tr.split(/(?:\r\n?|\n)/g);this._input=Tr+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Fn),this.offset-=Fn;var Un=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),qn.length-1&&(this.yylineno-=qn.length-1);var At=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:qn?(qn.length===Un.length?this.yylloc.first_column:0)+Un[Un.length-qn.length].length-qn[0].length:this.yylloc.first_column-Fn},this.options.ranges&&(this.yylloc.range=[At[0],At[0]+this.yyleng-Fn]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Tr){this.unput(this.match.slice(Tr))},pastInput:function(){var Tr=this.matched.substr(0,this.matched.length-this.match.length);return(Tr.length>20?"...":"")+Tr.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Tr=this.match;return Tr.length<20&&(Tr+=this._input.substr(0,20-Tr.length)),(Tr.substr(0,20)+(Tr.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Tr=this.pastInput(),Fn=new Array(Tr.length+1).join("-");return Tr+this.upcomingInput()+` +`+Fn+"^"},test_match:function(Tr,Fn){var qn,Un,At;if(this.options.backtrack_lexer&&(At={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(At.yylloc.range=this.yylloc.range.slice(0))),Un=Tr[0].match(/(?:\r\n?|\n).*/g),Un&&(this.yylineno+=Un.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Un?Un[Un.length-1].length-Un[Un.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Tr[0].length},this.yytext+=Tr[0],this.match+=Tr[0],this.matches=Tr,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Tr[0].length),this.matched+=Tr[0],qn=this.performAction.call(this,this.yy,this,Fn,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),qn)return qn;if(this._backtrack){for(var wt in At)this[wt]=At[wt];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Tr,Fn,qn,Un;this._more||(this.yytext="",this.match="");for(var At=this._currentRules(),wt=0;wtFn[0].length)){if(Fn=qn,Un=wt,this.options.backtrack_lexer){if(Tr=this.test_match(qn,At[wt]),Tr!==!1)return Tr;if(this._backtrack){Fn=!1;continue}else return!1}else if(!this.options.flex)break}return Fn?(Tr=this.test_match(Fn,At[Un]),Tr!==!1?Tr:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Fn=this.next();return Fn||this.lex()},begin:function(Fn){this.conditionStack.push(Fn)},popState:function(){var Fn=this.conditionStack.length-1;return Fn>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Fn){return Fn=this.conditionStack.length-1-Math.abs(Fn||0),Fn>=0?this.conditionStack[Fn]:"INITIAL"},pushState:function(Fn){this.begin(Fn)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(Fn,qn,Un,At){switch(Un){case 0:return 53;case 1:return 54;case 2:return 55;case 3:return 56;case 4:break;case 5:break;case 6:return this.begin("acc_title"),31;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),33;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 8;case 14:break;case 15:return 7;case 16:return 7;case 17:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 19:this.popState();break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 70;case 22:this.popState();break;case 23:return 71;case 24:this.popState();break;case 25:return"STR";case 26:this.begin("string");break;case 27:return 73;case 28:return this.begin("namespace"),40;case 29:return this.popState(),8;case 30:break;case 31:return this.begin("namespace-body"),37;case 32:return this.popState(),39;case 33:return"EOF_IN_STRUCT";case 34:return 8;case 35:break;case 36:return"EDGE_STATE";case 37:return this.begin("class"),44;case 38:return this.popState(),8;case 39:break;case 40:return this.popState(),this.popState(),39;case 41:return this.begin("class-body"),37;case 42:return this.popState(),39;case 43:return"EOF_IN_STRUCT";case 44:return"EDGE_STATE";case 45:return"OPEN_IN_STRUCT";case 46:break;case 47:return"MEMBER";case 48:return 76;case 49:return 66;case 50:return 67;case 51:return 69;case 52:return 50;case 53:return 52;case 54:return 45;case 55:return 46;case 56:return 72;case 57:this.popState();break;case 58:return"GENERICTYPE";case 59:this.begin("generic");break;case 60:this.popState();break;case 61:return"BQUOTE_STR";case 62:this.begin("bqstring");break;case 63:return 68;case 64:return 68;case 65:return 68;case 66:return 68;case 67:return 60;case 68:return 60;case 69:return 62;case 70:return 62;case 71:return 61;case 72:return 59;case 73:return 63;case 74:return 64;case 75:return 65;case 76:return 21;case 77:return 42;case 78:return 95;case 79:return"DOT";case 80:return"PLUS";case 81:return 81;case 82:return 78;case 83:return 84;case 84:return 84;case 85:return 85;case 86:return"EQUALS";case 87:return"EQUALS";case 88:return 74;case 89:return 12;case 90:return 14;case 91:return"PUNCTUATION";case 92:return 80;case 93:return 97;case 94:return 83;case 95:return 83;case 96:return 9}},rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:style\b)/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?::)/,/^(?:,)/,/^(?:#)/,/^(?:#)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,32,33,34,35,36,37,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},namespace:{rules:[26,28,29,30,31,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},"class-body":{rules:[26,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},class:{rules:[26,38,39,40,41,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_descr:{rules:[9,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_title:{rules:[7,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},callback_args:{rules:[22,23,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},callback_name:{rules:[19,20,21,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},href:{rules:[26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},struct:{rules:[26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},generic:{rules:[26,48,49,50,51,52,53,54,55,56,57,58,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},bqstring:{rules:[26,48,49,50,51,52,53,54,55,56,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},string:{rules:[24,25,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,37,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96],inclusive:!0}}};return ao}();xi.lexer=Ma;function zs(){this.yy={}}return zs.prototype=xi,xi.Parser=zs,new zs}();_ve.parser=_ve;const KGe=_ve,WGe=["#","+","~","-",""];class YGe{constructor(s,u){this.memberType=u,this.visibility="",this.classifier="";const d=Yf(s,qt());this.parseMember(d)}getDisplayDetails(){let s=this.visibility+qF(this.id);this.memberType==="method"&&(s+=`(${qF(this.parameters.trim())})`,this.returnType&&(s+=" : "+qF(this.returnType))),s=s.trim();const u=this.parseClassifier();return{displayText:s,cssStyle:u}}parseMember(s){let u="";if(this.memberType==="method"){const d=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/,p=s.match(d);if(p){const v=p[1]?p[1].trim():"";if(WGe.includes(v)&&(this.visibility=v),this.id=p[2].trim(),this.parameters=p[3]?p[3].trim():"",u=p[4]?p[4].trim():"",this.returnType=p[5]?p[5].trim():"",u===""){const b=this.returnType.substring(this.returnType.length-1);b.match(/[$*]/)&&(u=b,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{const d=s.length,p=s.substring(0,1),v=s.substring(d-1);WGe.includes(p)&&(this.visibility=p),v.match(/[$*]/)&&(u=v),this.id=s.substring(this.visibility===""?0:1,u===""?d:d-1)}this.classifier=u}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}}const mJ="classId-";let Ave=[],xh={},vJ=[],XGe=0,R9={},Lve=0,WR=[];const tS=i=>ci.sanitizeText(i,qt()),nS=function(i){const s=ci.sanitizeText(i,qt());let u="",d=s;if(s.indexOf("~")>0){const p=s.split("~");d=tS(p[0]),u=tS(p[1])}return{className:d,type:u}},Ein=function(i,s){const u=ci.sanitizeText(i,qt());s&&(s=tS(s));const{className:d}=nS(u);xh[d].label=s},wJ=function(i){const s=ci.sanitizeText(i,qt()),{className:u,type:d}=nS(s);if(Object.hasOwn(xh,u))return;const p=ci.sanitizeText(u,qt());xh[p]={id:p,type:d,label:p,cssClasses:[],methods:[],members:[],annotations:[],styles:[],domId:mJ+p+"-"+XGe},XGe++},QGe=function(i){const s=ci.sanitizeText(i,qt());if(s in xh)return xh[s].domId;throw new Error("Class not found: "+s)},Tin=function(){Ave=[],xh={},vJ=[],WR=[],WR.push(ZGe),R9={},Lve=0,Pg()},Cin=function(i){return xh[i]},Sin=function(){return xh},_in=function(){return Ave},Ain=function(){return vJ},Lin=function(i){Xe.debug("Adding relation: "+JSON.stringify(i)),wJ(i.id1),wJ(i.id2),i.id1=nS(i.id1).className,i.id2=nS(i.id2).className,i.relationTitle1=ci.sanitizeText(i.relationTitle1.trim(),qt()),i.relationTitle2=ci.sanitizeText(i.relationTitle2.trim(),qt()),Ave.push(i)},Min=function(i,s){const u=nS(i).className;xh[u].annotations.push(s)},JGe=function(i,s){wJ(i);const u=nS(i).className,d=xh[u];if(typeof s=="string"){const p=s.trim();p.startsWith("<<")&&p.endsWith(">>")?d.annotations.push(tS(p.substring(2,p.length-2))):p.indexOf(")")>0?d.methods.push(new YGe(p,"method")):p&&d.members.push(new YGe(p,"attribute"))}},Din=function(i,s){Array.isArray(s)&&(s.reverse(),s.forEach(u=>JGe(i,u)))},Iin=function(i,s){const u={id:`note${vJ.length}`,class:s,text:i};vJ.push(u)},Oin=function(i){return i.startsWith(":")&&(i=i.substring(1)),tS(i.trim())},Mve=function(i,s){i.split(",").forEach(function(u){let d=u;u[0].match(/\d/)&&(d=mJ+d),xh[d]!==void 0&&xh[d].cssClasses.push(s)})},Nin=function(i,s){i.split(",").forEach(function(u){s!==void 0&&(xh[u].tooltip=tS(s))})},Pin=function(i,s){return s?R9[s].classes[i].tooltip:xh[i].tooltip},Bin=function(i,s,u){const d=qt();i.split(",").forEach(function(p){let v=p;p[0].match(/\d/)&&(v=mJ+v),xh[v]!==void 0&&(xh[v].link=Ao.formatUrl(s,d),d.securityLevel==="sandbox"?xh[v].linkTarget="_top":typeof u=="string"?xh[v].linkTarget=tS(u):xh[v].linkTarget="_blank")}),Mve(i,"clickable")},Fin=function(i,s,u){i.split(",").forEach(function(d){Rin(d,s,u),xh[d].haveCallback=!0}),Mve(i,"clickable")},Rin=function(i,s,u){const d=ci.sanitizeText(i,qt());if(qt().securityLevel!=="loose"||s===void 0)return;const v=d;if(xh[v]!==void 0){const b=QGe(v);let y=[];if(typeof u=="string"){y=u.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let T=0;T")),p.classed("hover",!0)}).on("mouseout",function(){s.transition().duration(500).style("opacity",0),Ir(this).classed("hover",!1)})};WR.push(ZGe);let eKe="TB";const yJ={setAccTitle:Bg,getAccTitle:Cp,getAccDescription:_p,setAccDescription:Sp,getConfig:()=>qt().class,addClass:wJ,bindFunctions:jin,clear:Tin,getClass:Cin,getClasses:Sin,getNotes:Ain,addAnnotation:Min,addNote:Iin,getRelations:_in,addRelation:Lin,getDirection:()=>eKe,setDirection:i=>{eKe=i},addMember:JGe,addMembers:Din,cleanupLabel:Oin,lineType:$in,relationType:zin,setClickEvent:Fin,setCssClass:Mve,setLink:Bin,getTooltip:Pin,setTooltip:Nin,lookUpDomId:QGe,setDiagramTitle:cm,getDiagramTitle:Ap,setClassLabel:Ein,addNamespace:function(i){R9[i]===void 0&&(R9[i]={id:i,classes:{},children:{},domId:mJ+i+"-"+Lve},Lve++)},addClassesToNamespace:function(i,s){if(R9[i]!==void 0)for(const u of s){const{className:d}=nS(u);xh[d].parent=i,R9[i].classes[d]=xh[d]}},getNamespace:function(i){return R9[i]},getNamespaces:function(){return R9},setCssStyle:function(i,s){const u=xh[i];if(!(!s||!u))for(const d of s)d.includes(",")?u.styles.push(...d.split(",")):u.styles.push(d)}},tKe=i=>`g.classGroup text { fill: ${i.nodeBorder||i.classText}; stroke: none; font-family: ${i.fontFamily}; @@ -977,6 +1242,7 @@ g.classGroup line { .edgeTerminals { font-size: 11px; + line-height: initial; } .classTitleText { @@ -984,14 +1250,14 @@ g.classGroup line { font-size: 18px; fill: ${i.textColor}; } -`;let XRt=0;const TGe=function(i,a,f,p,w){const m=function(at){switch(at){case w.db.relationType.AGGREGATION:return"aggregation";case w.db.relationType.EXTENSION:return"extension";case w.db.relationType.COMPOSITION:return"composition";case w.db.relationType.DEPENDENCY:return"dependency";case w.db.relationType.LOLLIPOP:return"lollipop"}};a.points=a.points.filter(at=>!Number.isNaN(at.y));const b=a.points,E=E5().x(function(at){return at.x}).y(function(at){return at.y}).curve(HP),_=i.append("path").attr("d",E(b)).attr("id","edge"+XRt).attr("class","relation");let A="";p.arrowMarkerAbsolute&&(A=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,A=A.replace(/\(/g,"\\("),A=A.replace(/\)/g,"\\)")),f.relation.lineType==1&&_.attr("class","relation dashed-line"),f.relation.lineType==10&&_.attr("class","relation dotted-line"),f.relation.type1!=="none"&&_.attr("marker-start","url("+A+"#"+m(f.relation.type1)+"Start)"),f.relation.type2!=="none"&&_.attr("marker-end","url("+A+"#"+m(f.relation.type2)+"End)");let I,B;const N=a.points.length;let R=$a.calcLabelPosition(a.points);I=R.x,B=R.y;let z,W,et,st;if(N%2!==0&&N>1){let at=$a.calcCardinalityPosition(f.relation.type1!=="none",a.points,a.points[0]),bt=$a.calcCardinalityPosition(f.relation.type2!=="none",a.points,a.points[N-1]);Ut.debug("cardinality_1_point "+JSON.stringify(at)),Ut.debug("cardinality_2_point "+JSON.stringify(bt)),z=at.x,W=at.y,et=bt.x,st=bt.y}if(f.title!==void 0){const at=i.append("g").attr("class","classLabel"),bt=at.append("text").attr("class","label").attr("x",I).attr("y",B).attr("fill","red").attr("text-anchor","middle").text(f.title);window.label=bt;const mt=bt.node().getBBox();at.insert("rect",":first-child").attr("class","box").attr("x",mt.x-p.padding/2).attr("y",mt.y-p.padding/2).attr("width",mt.width+p.padding).attr("height",mt.height+p.padding)}Ut.info("Rendering relation "+JSON.stringify(f)),f.relationTitle1!==void 0&&f.relationTitle1!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",z).attr("y",W).attr("fill","black").attr("font-size","6").text(f.relationTitle1),f.relationTitle2!==void 0&&f.relationTitle2!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",et).attr("y",st).attr("fill","black").attr("font-size","6").text(f.relationTitle2),XRt++},CGe=function(i,a,f,p){Ut.debug("Rendering class ",a,f);const w=a.id,m={id:w,label:a.id,width:0,height:0},b=i.append("g").attr("id",p.db.lookUpDomId(w)).attr("class","classGroup");let E;a.link?E=b.append("svg:a").attr("xlink:href",a.link).attr("target",a.linkTarget).append("text").attr("y",f.textHeight+f.padding).attr("x",0):E=b.append("text").attr("y",f.textHeight+f.padding).attr("x",0);let _=!0;a.annotations.forEach(function(bt){const mt=E.append("tspan").text("«"+bt+"»");_||mt.attr("dy",f.textHeight),_=!1});let A=QRt(a);const I=E.append("tspan").text(A).attr("class","title");_||I.attr("dy",f.textHeight);const B=E.node().getBBox().height;let N,R,z;if(a.members.length>0){N=b.append("line").attr("x1",0).attr("y1",f.padding+B+f.dividerMargin/2).attr("y2",f.padding+B+f.dividerMargin/2);const bt=b.append("text").attr("x",f.padding).attr("y",B+f.dividerMargin+f.textHeight).attr("fill","white").attr("class","classText");_=!0,a.members.forEach(function(mt){ZRt(bt,mt,_,f),_=!1}),R=bt.node().getBBox()}if(a.methods.length>0){z=b.append("line").attr("x1",0).attr("y1",f.padding+B+f.dividerMargin+R.height).attr("y2",f.padding+B+f.dividerMargin+R.height);const bt=b.append("text").attr("x",f.padding).attr("y",B+2*f.dividerMargin+R.height+f.textHeight).attr("fill","white").attr("class","classText");_=!0,a.methods.forEach(function(mt){ZRt(bt,mt,_,f),_=!1})}const W=b.node().getBBox();var et=" ";a.cssClasses.length>0&&(et=et+a.cssClasses.join(" "));const at=b.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",W.width+2*f.padding).attr("height",W.height+f.padding+.5*f.dividerMargin).attr("class",et).node().getBBox().width;return E.node().childNodes.forEach(function(bt){bt.setAttribute("x",(at-bt.getBBox().width)/2)}),a.tooltip&&E.insert("title").text(a.tooltip),N&&N.attr("x2",at),z&&z.attr("x2",at),m.width=at,m.height=W.height+f.padding+.5*f.dividerMargin,m},QRt=function(i){let a=i.id;return i.type&&(a+="<"+YP(i.type)+">"),a},_Ge=function(i,a,f,p){Ut.debug("Rendering note ",a,f);const w=a.id,m={id:w,text:a.text,width:0,height:0},b=i.append("g").attr("id",w).attr("class","classGroup");let E=b.append("text").attr("y",f.textHeight+f.padding).attr("x",0);const _=JSON.parse(`"${a.text}"`).split(` -`);_.forEach(function(N){Ut.debug(`Adding line: ${N}`),E.append("tspan").text(N).attr("class","title").attr("dy",f.textHeight)});const A=b.node().getBBox(),B=b.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",A.width+2*f.padding).attr("height",A.height+_.length*f.textHeight+f.padding+.5*f.dividerMargin).node().getBBox().width;return E.node().childNodes.forEach(function(N){N.setAttribute("x",(B-N.getBBox().width)/2)}),m.width=B,m.height=A.height+_.length*f.textHeight+f.padding+.5*f.dividerMargin,m},ZRt=function(i,a,f,p){const{displayText:w,cssStyle:m}=a.getDisplayDetails(),b=i.append("tspan").attr("x",p.padding).text(w);m!==""&&b.attr("style",a.cssStyle),f||b.attr("dy",p.textHeight)},Agt={getClassTitleString:QRt,drawClass:CGe,drawEdge:TGe,drawNote:_Ge};let VY={};const GY=20,YF=function(i){const a=Object.entries(VY).find(f=>f[1].label===i);if(a)return a[0]},SGe=function(i){i.append("defs").append("marker").attr("id","extensionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),i.append("defs").append("marker").attr("id","extensionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),i.append("defs").append("marker").attr("id","compositionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","compositionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","aggregationStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","aggregationEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","dependencyStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},AGe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:zRt,db:HY,renderer:{draw:function(i,a,f,p){const w=Oe().class;VY={},Ut.info("Rendering diagram "+i);const m=Oe().securityLevel;let b;m==="sandbox"&&(b=yr("#i"+a));const E=yr(m==="sandbox"?b.nodes()[0].contentDocument.body:"body"),_=E.select(`[id='${a}']`);SGe(_);const A=new c1({multigraph:!0});A.setGraph({isMultiGraph:!0}),A.setDefaultEdgeLabel(function(){return{}});const I=p.db.getClasses(),B=Object.keys(I);for(const at of B){const bt=I[at],mt=Agt.drawClass(_,bt,w,p);VY[mt.id]=mt,A.setNode(mt.id,mt),Ut.info("Org height: "+mt.height)}p.db.getRelations().forEach(function(at){Ut.info("tjoho"+YF(at.id1)+YF(at.id2)+JSON.stringify(at)),A.setEdge(YF(at.id1),YF(at.id2),{relation:at},at.title||"DEFAULT")}),p.db.getNotes().forEach(function(at){Ut.debug(`Adding note: ${JSON.stringify(at)}`);const bt=Agt.drawNote(_,at,w,p);VY[bt.id]=bt,A.setNode(bt.id,bt),at.class&&at.class in I&&A.setEdge(at.id,YF(at.class),{relation:{id1:at.id,id2:at.class,relation:{type1:"none",type2:"none",lineType:10}}},"DEFAULT")}),aL(A),A.nodes().forEach(function(at){at!==void 0&&A.node(at)!==void 0&&(Ut.debug("Node "+at+": "+JSON.stringify(A.node(at))),E.select("#"+(p.db.lookUpDomId(at)||at)).attr("transform","translate("+(A.node(at).x-A.node(at).width/2)+","+(A.node(at).y-A.node(at).height/2)+" )"))}),A.edges().forEach(function(at){at!==void 0&&A.edge(at)!==void 0&&(Ut.debug("Edge "+at.v+" -> "+at.w+": "+JSON.stringify(A.edge(at))),Agt.drawEdge(_,A.edge(at),A.edge(at).relation,w,p))});const z=_.node().getBBox(),W=z.width+GY*2,et=z.height+GY*2;k0(_,et,W,w.useMaxWidth);const st=`${z.x-GY} ${z.y-GY} ${W} ${et}`;Ut.debug(`viewBox ${st}`),_.attr("viewBox",st)}},styles:KRt,init:i=>{i.class||(i.class={}),i.class.arrowMarkerAbsolute=i.arrowMarkerAbsolute,HY.clear()}}},Symbol.toStringTag,{value:"Module"})),Lgt=i=>Kr.sanitizeText(i,Oe());let Mgt={dividerMargin:10,padding:5,textHeight:10,curve:void 0};const LGe=function(i,a,f,p){const w=Object.keys(i);Ut.info("keys:",w),Ut.info(i),w.forEach(function(m){var A,I;const b=i[m],_={shape:"rect",id:b.id,domId:b.domId,labelText:Lgt(b.id),labelStyle:"",style:"fill: none; stroke: black",padding:((A=Oe().flowchart)==null?void 0:A.padding)??((I=Oe().class)==null?void 0:I.padding)};a.setNode(b.id,_),JRt(b.classes,a,f,p,b.id),Ut.info("setNode",_)})},JRt=function(i,a,f,p,w){const m=Object.keys(i);Ut.info("keys:",m),Ut.info(i),m.filter(b=>i[b].parent==w).forEach(function(b){var z,W;const E=i[b],_=E.cssClasses.join(" "),A={labelStyle:"",style:""},I=E.label??E.id,B=0,N="class_box",R={labelStyle:A.labelStyle,shape:N,labelText:Lgt(I),classData:E,rx:B,ry:B,class:_,style:A.style,id:E.id,domId:E.domId,tooltip:p.db.getTooltip(E.id,w)||"",haveCallback:E.haveCallback,link:E.link,width:E.type==="group"?500:void 0,type:E.type,padding:((z=Oe().flowchart)==null?void 0:z.padding)??((W=Oe().class)==null?void 0:W.padding)};a.setNode(E.id,R),w&&a.setParent(E.id,w),Ut.info("setNode",R)})},MGe=function(i,a,f,p){Ut.info(i),i.forEach(function(w,m){var W,et;const b=w,E="",_={labelStyle:"",style:""},A=b.text,I=0,B="note",N={labelStyle:_.labelStyle,shape:B,labelText:Lgt(A),noteData:b,rx:I,ry:I,class:E,style:_.style,id:b.id,domId:b.id,tooltip:"",type:"note",padding:((W=Oe().flowchart)==null?void 0:W.padding)??((et=Oe().class)==null?void 0:et.padding)};if(a.setNode(b.id,N),Ut.info("setNode",N),!b.class||!(b.class in p))return;const R=f+m,z={id:`edgeNote${R}`,classes:"relation",pattern:"dotted",arrowhead:"none",startLabelRight:"",endLabelLeft:"",arrowTypeStart:"none",arrowTypeEnd:"none",style:"fill:none",labelStyle:"",curve:ew(Mgt.curve,cg)};a.setEdge(b.id,b.class,z,R)})},DGe=function(i,a){const f=Oe().flowchart;let p=0;i.forEach(function(w){var b;p++;const m={classes:"relation",pattern:w.relation.lineType==1?"dashed":"solid",id:"id"+p,arrowhead:w.type==="arrow_open"?"none":"normal",startLabelRight:w.relationTitle1==="none"?"":w.relationTitle1,endLabelLeft:w.relationTitle2==="none"?"":w.relationTitle2,arrowTypeStart:tjt(w.relation.type1),arrowTypeEnd:tjt(w.relation.type2),style:"fill:none",labelStyle:"",curve:ew(f==null?void 0:f.curve,cg)};if(Ut.info(m,w),w.style!==void 0){const E=im(w.style);m.style=E.style,m.labelStyle=E.labelStyle}w.text=w.title,w.text===void 0?w.style!==void 0&&(m.arrowheadStyle="fill: #333"):(m.arrowheadStyle="fill: #333",m.labelpos="c",((b=Oe().flowchart)==null?void 0:b.htmlLabels)??Oe().htmlLabels?(m.labelType="html",m.label=''+w.text+""):(m.labelType="text",m.label=w.text.replace(Kr.lineBreakRegex,` -`),w.style===void 0&&(m.style=m.style||"stroke: #333; stroke-width: 1.5px;fill:none"),m.labelStyle=m.labelStyle.replace("color:","fill:"))),a.setEdge(w.id1,w.id2,m,p)})},IGe=function(i){Mgt={...Mgt,...i}},OGe=async function(i,a,f,p){Ut.info("Drawing class - ",a);const w=Oe().flowchart??Oe().class,m=Oe().securityLevel;Ut.info("config:",w);const b=(w==null?void 0:w.nodeSpacing)??50,E=(w==null?void 0:w.rankSpacing)??50,_=new c1({multigraph:!0,compound:!0}).setGraph({rankdir:p.db.getDirection(),nodesep:b,ranksep:E,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),A=p.db.getNamespaces(),I=p.db.getClasses(),B=p.db.getRelations(),N=p.db.getNotes();Ut.info(B),LGe(A,_,a,p),JRt(I,_,a,p),DGe(B,_),MGe(N,_,B.length+1,I);let R;m==="sandbox"&&(R=yr("#i"+a));const z=yr(m==="sandbox"?R.nodes()[0].contentDocument.body:"body"),W=z.select(`[id="${a}"]`),et=z.select("#"+a+" g");if(await N0t(et,_,["aggregation","extension","composition","dependency","lollipop"],"classDiagram",a),$a.insertTitle(W,"classTitleText",(w==null?void 0:w.titleTopMargin)??5,p.db.getDiagramTitle()),fT(_,W,w==null?void 0:w.diagramPadding,w==null?void 0:w.useMaxWidth),!(w!=null&&w.htmlLabels)){const st=m==="sandbox"?R.nodes()[0].contentDocument:document,at=st.querySelectorAll('[id="'+a+'"] .edgeLabel .label');for(const bt of at){const mt=bt.getBBox(),yt=st.createElementNS("http://www.w3.org/2000/svg","rect");yt.setAttribute("rx",0),yt.setAttribute("ry",0),yt.setAttribute("width",mt.width),yt.setAttribute("height",mt.height),bt.insertBefore(yt,bt.firstChild)}}};function tjt(i){let a;switch(i){case 0:a="aggregation";break;case 1:a="extension";break;case 2:a="composition";break;case 3:a="dependency";break;case 4:a="lollipop";break;default:a="none"}return a}const PGe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:zRt,db:HY,renderer:{setConf:IGe,draw:OGe},styles:KRt,init:i=>{i.class||(i.class={}),i.class.arrowMarkerAbsolute=i.arrowMarkerAbsolute,HY.clear()}}},Symbol.toStringTag,{value:"Module"}));var Dgt=function(){var i=function(Et,Z,Ct,xt){for(Ct=Ct||{},xt=Et.length;xt--;Ct[Et[xt]]=Z);return Ct},a=[1,2],f=[1,3],p=[1,4],w=[2,4],m=[1,9],b=[1,11],E=[1,15],_=[1,16],A=[1,17],I=[1,18],B=[1,30],N=[1,19],R=[1,20],z=[1,21],W=[1,22],et=[1,23],st=[1,25],at=[1,26],bt=[1,27],mt=[1,28],yt=[1,29],ft=[1,32],ut=[1,33],vt=[1,34],X=[1,35],pt=[1,31],U=[1,4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],Tt=[1,4,5,13,14,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],nt=[4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],It={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,cssClassStatement:11,idStatement:12,DESCR:13,"-->":14,HIDE_EMPTY:15,scale:16,WIDTH:17,COMPOSIT_STATE:18,STRUCT_START:19,STRUCT_STOP:20,STATE_DESCR:21,AS:22,ID:23,FORK:24,JOIN:25,CHOICE:26,CONCURRENT:27,note:28,notePosition:29,NOTE_TEXT:30,direction:31,acc_title:32,acc_title_value:33,acc_descr:34,acc_descr_value:35,acc_descr_multiline_value:36,classDef:37,CLASSDEF_ID:38,CLASSDEF_STYLEOPTS:39,DEFAULT:40,class:41,CLASSENTITY_IDS:42,STYLECLASS:43,direction_tb:44,direction_bt:45,direction_rl:46,direction_lr:47,eol:48,";":49,EDGE_STATE:50,STYLE_SEPARATOR:51,left_of:52,right_of:53,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",13:"DESCR",14:"-->",15:"HIDE_EMPTY",16:"scale",17:"WIDTH",18:"COMPOSIT_STATE",19:"STRUCT_START",20:"STRUCT_STOP",21:"STATE_DESCR",22:"AS",23:"ID",24:"FORK",25:"JOIN",26:"CHOICE",27:"CONCURRENT",28:"note",30:"NOTE_TEXT",32:"acc_title",33:"acc_title_value",34:"acc_descr",35:"acc_descr_value",36:"acc_descr_multiline_value",37:"classDef",38:"CLASSDEF_ID",39:"CLASSDEF_STYLEOPTS",40:"DEFAULT",41:"class",42:"CLASSENTITY_IDS",43:"STYLECLASS",44:"direction_tb",45:"direction_bt",46:"direction_rl",47:"direction_lr",49:";",50:"EDGE_STATE",51:"STYLE_SEPARATOR",52:"left_of",53:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[10,3],[10,3],[11,3],[31,1],[31,1],[31,1],[31,1],[48,1],[48,1],[12,1],[12,1],[12,3],[12,3],[29,1],[29,1]],performAction:function(Z,Ct,xt,Ht,Le,Ft,gn){var Se=Ft.length-1;switch(Le){case 3:return Ht.setRootDoc(Ft[Se]),Ft[Se];case 4:this.$=[];break;case 5:Ft[Se]!="nl"&&(Ft[Se-1].push(Ft[Se]),this.$=Ft[Se-1]);break;case 6:case 7:this.$=Ft[Se];break;case 8:this.$="nl";break;case 11:this.$=Ft[Se];break;case 12:const ce=Ft[Se-1];ce.description=Ht.trimColon(Ft[Se]),this.$=ce;break;case 13:this.$={stmt:"relation",state1:Ft[Se-2],state2:Ft[Se]};break;case 14:const ke=Ht.trimColon(Ft[Se]);this.$={stmt:"relation",state1:Ft[Se-3],state2:Ft[Se-1],description:ke};break;case 18:this.$={stmt:"state",id:Ft[Se-3],type:"default",description:"",doc:Ft[Se-1]};break;case 19:var me=Ft[Se],Ve=Ft[Se-2].trim();if(Ft[Se].match(":")){var Ye=Ft[Se].split(":");me=Ye[0],Ve=[Ve,Ye[1]]}this.$={stmt:"state",id:me,type:"default",description:Ve};break;case 20:this.$={stmt:"state",id:Ft[Se-3],type:"default",description:Ft[Se-5],doc:Ft[Se-1]};break;case 21:this.$={stmt:"state",id:Ft[Se],type:"fork"};break;case 22:this.$={stmt:"state",id:Ft[Se],type:"join"};break;case 23:this.$={stmt:"state",id:Ft[Se],type:"choice"};break;case 24:this.$={stmt:"state",id:Ht.getDividerId(),type:"divider"};break;case 25:this.$={stmt:"state",id:Ft[Se-1].trim(),note:{position:Ft[Se-2].trim(),text:Ft[Se].trim()}};break;case 28:this.$=Ft[Se].trim(),Ht.setAccTitle(this.$);break;case 29:case 30:this.$=Ft[Se].trim(),Ht.setAccDescription(this.$);break;case 31:case 32:this.$={stmt:"classDef",id:Ft[Se-1].trim(),classes:Ft[Se].trim()};break;case 33:this.$={stmt:"applyClass",id:Ft[Se-1].trim(),styleClass:Ft[Se].trim()};break;case 34:Ht.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 35:Ht.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 36:Ht.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 37:Ht.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 40:case 41:this.$={stmt:"state",id:Ft[Se].trim(),type:"default",description:""};break;case 42:this.$={stmt:"state",id:Ft[Se-2].trim(),classes:[Ft[Se].trim()],type:"default",description:""};break;case 43:this.$={stmt:"state",id:Ft[Se-2].trim(),classes:[Ft[Se].trim()],type:"default",description:""};break}},table:[{3:1,4:a,5:f,6:p},{1:[3]},{3:5,4:a,5:f,6:p},{3:6,4:a,5:f,6:p},i([1,4,5,15,16,18,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],w,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:m,5:b,8:8,9:10,10:12,11:13,12:14,15:E,16:_,18:A,21:I,23:B,24:N,25:R,26:z,27:W,28:et,31:24,32:st,34:at,36:bt,37:mt,41:yt,44:ft,45:ut,46:vt,47:X,50:pt},i(U,[2,5]),{9:36,10:12,11:13,12:14,15:E,16:_,18:A,21:I,23:B,24:N,25:R,26:z,27:W,28:et,31:24,32:st,34:at,36:bt,37:mt,41:yt,44:ft,45:ut,46:vt,47:X,50:pt},i(U,[2,7]),i(U,[2,8]),i(U,[2,9]),i(U,[2,10]),i(U,[2,11],{13:[1,37],14:[1,38]}),i(U,[2,15]),{17:[1,39]},i(U,[2,17],{19:[1,40]}),{22:[1,41]},i(U,[2,21]),i(U,[2,22]),i(U,[2,23]),i(U,[2,24]),{29:42,30:[1,43],52:[1,44],53:[1,45]},i(U,[2,27]),{33:[1,46]},{35:[1,47]},i(U,[2,30]),{38:[1,48],40:[1,49]},{42:[1,50]},i(Tt,[2,40],{51:[1,51]}),i(Tt,[2,41],{51:[1,52]}),i(U,[2,34]),i(U,[2,35]),i(U,[2,36]),i(U,[2,37]),i(U,[2,6]),i(U,[2,12]),{12:53,23:B,50:pt},i(U,[2,16]),i(nt,w,{7:54}),{23:[1,55]},{23:[1,56]},{22:[1,57]},{23:[2,44]},{23:[2,45]},i(U,[2,28]),i(U,[2,29]),{39:[1,58]},{39:[1,59]},{43:[1,60]},{23:[1,61]},{23:[1,62]},i(U,[2,13],{13:[1,63]}),{4:m,5:b,8:8,9:10,10:12,11:13,12:14,15:E,16:_,18:A,20:[1,64],21:I,23:B,24:N,25:R,26:z,27:W,28:et,31:24,32:st,34:at,36:bt,37:mt,41:yt,44:ft,45:ut,46:vt,47:X,50:pt},i(U,[2,19],{19:[1,65]}),{30:[1,66]},{23:[1,67]},i(U,[2,31]),i(U,[2,32]),i(U,[2,33]),i(Tt,[2,42]),i(Tt,[2,43]),i(U,[2,14]),i(U,[2,18]),i(nt,w,{7:68}),i(U,[2,25]),i(U,[2,26]),{4:m,5:b,8:8,9:10,10:12,11:13,12:14,15:E,16:_,18:A,20:[1,69],21:I,23:B,24:N,25:R,26:z,27:W,28:et,31:24,32:st,34:at,36:bt,37:mt,41:yt,44:ft,45:ut,46:vt,47:X,50:pt},i(U,[2,20])],defaultActions:{5:[2,1],6:[2,2],44:[2,44],45:[2,45]},parseError:function(Z,Ct){if(Ct.recoverable)this.trace(Z);else{var xt=new Error(Z);throw xt.hash=Ct,xt}},parse:function(Z){var Ct=this,xt=[0],Ht=[],Le=[null],Ft=[],gn=this.table,Se="",me=0,Ve=0,Ye=2,ce=1,ke=Ft.slice.call(arguments,1),zt=Object.create(this.lexer),re={yy:{}};for(var se in this.yy)Object.prototype.hasOwnProperty.call(this.yy,se)&&(re.yy[se]=this.yy[se]);zt.setInput(Z,re.yy),re.yy.lexer=zt,re.yy.parser=this,typeof zt.yylloc>"u"&&(zt.yylloc={});var Pe=zt.yylloc;Ft.push(Pe);var te=zt.options&&zt.options.ranges;typeof re.yy.parseError=="function"?this.parseError=re.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Me(){var Ee;return Ee=Ht.pop()||zt.lex()||ce,typeof Ee!="number"&&(Ee instanceof Array&&(Ht=Ee,Ee=Ht.pop()),Ee=Ct.symbols_[Ee]||Ee),Ee}for(var de,on,ni,Ks,ws={},fo,Xi,Er,Xn;;){if(on=xt[xt.length-1],this.defaultActions[on]?ni=this.defaultActions[on]:((de===null||typeof de>"u")&&(de=Me()),ni=gn[on]&&gn[on][de]),typeof ni>"u"||!ni.length||!ni[0]){var di="";Xn=[];for(fo in gn[on])this.terminals_[fo]&&fo>Ye&&Xn.push("'"+this.terminals_[fo]+"'");zt.showPosition?di="Parse error on line "+(me+1)+`: -`+zt.showPosition()+` -Expecting `+Xn.join(", ")+", got '"+(this.terminals_[de]||de)+"'":di="Parse error on line "+(me+1)+": Unexpected "+(de==ce?"end of input":"'"+(this.terminals_[de]||de)+"'"),this.parseError(di,{text:zt.match,token:this.terminals_[de]||de,line:zt.yylineno,loc:Pe,expected:Xn})}if(ni[0]instanceof Array&&ni.length>1)throw new Error("Parse Error: multiple actions possible at state: "+on+", token: "+de);switch(ni[0]){case 1:xt.push(de),Le.push(zt.yytext),Ft.push(zt.yylloc),xt.push(ni[1]),de=null,Ve=zt.yyleng,Se=zt.yytext,me=zt.yylineno,Pe=zt.yylloc;break;case 2:if(Xi=this.productions_[ni[1]][1],ws.$=Le[Le.length-Xi],ws._$={first_line:Ft[Ft.length-(Xi||1)].first_line,last_line:Ft[Ft.length-1].last_line,first_column:Ft[Ft.length-(Xi||1)].first_column,last_column:Ft[Ft.length-1].last_column},te&&(ws._$.range=[Ft[Ft.length-(Xi||1)].range[0],Ft[Ft.length-1].range[1]]),Ks=this.performAction.apply(ws,[Se,Ve,me,re.yy,ni[1],Le,Ft].concat(ke)),typeof Ks<"u")return Ks;Xi&&(xt=xt.slice(0,-1*Xi*2),Le=Le.slice(0,-1*Xi),Ft=Ft.slice(0,-1*Xi)),xt.push(this.productions_[ni[1]][0]),Le.push(ws.$),Ft.push(ws._$),Er=gn[xt[xt.length-2]][xt[xt.length-1]],xt.push(Er);break;case 3:return!0}}return!0}},Ot=function(){var Et={EOF:1,parseError:function(Ct,xt){if(this.yy.parser)this.yy.parser.parseError(Ct,xt);else throw new Error(Ct)},setInput:function(Z,Ct){return this.yy=Ct||this.yy||{},this._input=Z,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Z=this._input[0];this.yytext+=Z,this.yyleng++,this.offset++,this.match+=Z,this.matched+=Z;var Ct=Z.match(/(?:\r\n?|\n).*/g);return Ct?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Z},unput:function(Z){var Ct=Z.length,xt=Z.split(/(?:\r\n?|\n)/g);this._input=Z+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ct),this.offset-=Ct;var Ht=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),xt.length-1&&(this.yylineno-=xt.length-1);var Le=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:xt?(xt.length===Ht.length?this.yylloc.first_column:0)+Ht[Ht.length-xt.length].length-xt[0].length:this.yylloc.first_column-Ct},this.options.ranges&&(this.yylloc.range=[Le[0],Le[0]+this.yyleng-Ct]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Z){this.unput(this.match.slice(Z))},pastInput:function(){var Z=this.matched.substr(0,this.matched.length-this.match.length);return(Z.length>20?"...":"")+Z.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Z=this.match;return Z.length<20&&(Z+=this._input.substr(0,20-Z.length)),(Z.substr(0,20)+(Z.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Z=this.pastInput(),Ct=new Array(Z.length+1).join("-");return Z+this.upcomingInput()+` -`+Ct+"^"},test_match:function(Z,Ct){var xt,Ht,Le;if(this.options.backtrack_lexer&&(Le={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Le.yylloc.range=this.yylloc.range.slice(0))),Ht=Z[0].match(/(?:\r\n?|\n).*/g),Ht&&(this.yylineno+=Ht.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Ht?Ht[Ht.length-1].length-Ht[Ht.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Z[0].length},this.yytext+=Z[0],this.match+=Z[0],this.matches=Z,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Z[0].length),this.matched+=Z[0],xt=this.performAction.call(this,this.yy,this,Ct,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),xt)return xt;if(this._backtrack){for(var Ft in Le)this[Ft]=Le[Ft];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Z,Ct,xt,Ht;this._more||(this.yytext="",this.match="");for(var Le=this._currentRules(),Ft=0;FtCt[0].length)){if(Ct=xt,Ht=Ft,this.options.backtrack_lexer){if(Z=this.test_match(xt,Le[Ft]),Z!==!1)return Z;if(this._backtrack){Ct=!1;continue}else return!1}else if(!this.options.flex)break}return Ct?(Z=this.test_match(Ct,Le[Ht]),Z!==!1?Z:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Ct=this.next();return Ct||this.lex()},begin:function(Ct){this.conditionStack.push(Ct)},popState:function(){var Ct=this.conditionStack.length-1;return Ct>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Ct){return Ct=this.conditionStack.length-1-Math.abs(Ct||0),Ct>=0?this.conditionStack[Ct]:"INITIAL"},pushState:function(Ct){this.begin(Ct)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Ct,xt,Ht,Le){switch(Ht){case 0:return 40;case 1:return 44;case 2:return 45;case 3:return 46;case 4:return 47;case 5:break;case 6:break;case 7:return 5;case 8:break;case 9:break;case 10:break;case 11:break;case 12:return this.pushState("SCALE"),16;case 13:return 17;case 14:this.popState();break;case 15:return this.begin("acc_title"),32;case 16:return this.popState(),"acc_title_value";case 17:return this.begin("acc_descr"),34;case 18:return this.popState(),"acc_descr_value";case 19:this.begin("acc_descr_multiline");break;case 20:this.popState();break;case 21:return"acc_descr_multiline_value";case 22:return this.pushState("CLASSDEF"),37;case 23:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 24:return this.popState(),this.pushState("CLASSDEFID"),38;case 25:return this.popState(),39;case 26:return this.pushState("CLASS"),41;case 27:return this.popState(),this.pushState("CLASS_STYLE"),42;case 28:return this.popState(),43;case 29:return this.pushState("SCALE"),16;case 30:return 17;case 31:this.popState();break;case 32:this.pushState("STATE");break;case 33:return this.popState(),xt.yytext=xt.yytext.slice(0,-8).trim(),24;case 34:return this.popState(),xt.yytext=xt.yytext.slice(0,-8).trim(),25;case 35:return this.popState(),xt.yytext=xt.yytext.slice(0,-10).trim(),26;case 36:return this.popState(),xt.yytext=xt.yytext.slice(0,-8).trim(),24;case 37:return this.popState(),xt.yytext=xt.yytext.slice(0,-8).trim(),25;case 38:return this.popState(),xt.yytext=xt.yytext.slice(0,-10).trim(),26;case 39:return 44;case 40:return 45;case 41:return 46;case 42:return 47;case 43:this.pushState("STATE_STRING");break;case 44:return this.pushState("STATE_ID"),"AS";case 45:return this.popState(),"ID";case 46:this.popState();break;case 47:return"STATE_DESCR";case 48:return 18;case 49:this.popState();break;case 50:return this.popState(),this.pushState("struct"),19;case 51:break;case 52:return this.popState(),20;case 53:break;case 54:return this.begin("NOTE"),28;case 55:return this.popState(),this.pushState("NOTE_ID"),52;case 56:return this.popState(),this.pushState("NOTE_ID"),53;case 57:this.popState(),this.pushState("FLOATING_NOTE");break;case 58:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 59:break;case 60:return"NOTE_TEXT";case 61:return this.popState(),"ID";case 62:return this.popState(),this.pushState("NOTE_TEXT"),23;case 63:return this.popState(),xt.yytext=xt.yytext.substr(2).trim(),30;case 64:return this.popState(),xt.yytext=xt.yytext.slice(0,-8).trim(),30;case 65:return 6;case 66:return 6;case 67:return 15;case 68:return 50;case 69:return 23;case 70:return xt.yytext=xt.yytext.trim(),13;case 71:return 14;case 72:return 27;case 73:return 51;case 74:return 5;case 75:return"INVALID"}},rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},struct:{rules:[9,10,22,26,32,39,40,41,42,51,52,53,54,68,69,70,71,72],inclusive:!1},FLOATING_NOTE_ID:{rules:[61],inclusive:!1},FLOATING_NOTE:{rules:[58,59,60],inclusive:!1},NOTE_TEXT:{rules:[63,64],inclusive:!1},NOTE_ID:{rules:[62],inclusive:!1},NOTE:{rules:[55,56,57],inclusive:!1},CLASS_STYLE:{rules:[28],inclusive:!1},CLASS:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[25],inclusive:!1},CLASSDEF:{rules:[23,24],inclusive:!1},acc_descr_multiline:{rules:[20,21],inclusive:!1},acc_descr:{rules:[18],inclusive:!1},acc_title:{rules:[16],inclusive:!1},SCALE:{rules:[13,14,30,31],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[45],inclusive:!1},STATE_STRING:{rules:[46,47],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,33,34,35,36,37,38,43,44,48,49,50],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,10,11,12,15,17,19,22,26,29,32,50,54,65,66,67,68,69,70,71,73,74,75],inclusive:!0}}};return Et}();It.lexer=Ot;function Bt(){this.yy={}}return Bt.prototype=It,It.Parser=Bt,new Bt}();Dgt.parser=Dgt;const ejt=Dgt,FGe="LR",NGe="TB",UY="state",Igt="relation",BGe="classDef",RGe="applyClass",KF="default",njt="divider",Ogt="[*]",rjt="start",ijt=Ogt,sjt="end",ajt="color",ojt="fill",jGe="bgFill",$Ge=",";function cjt(){return{}}let ujt=FGe,WY=[],XF=cjt();const ljt=()=>({relations:[],states:{},documents:{}});let YY={root:ljt()},S0=YY.root,QF=0,hjt=0;const zGe={LINE:0,DOTTED_LINE:1},qGe={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},KY=i=>JSON.parse(JSON.stringify(i)),HGe=i=>{Ut.info("Setting root doc",i),WY=i},VGe=()=>WY,XY=(i,a,f)=>{if(a.stmt===Igt)XY(i,a.state1,!0),XY(i,a.state2,!1);else if(a.stmt===UY&&(a.id==="[*]"?(a.id=f?i.id+"_start":i.id+"_end",a.start=f):a.id=a.id.trim()),a.doc){const p=[];let w=[],m;for(m=0;m0&&w.length>0){const b={stmt:UY,id:VIt(),type:"divider",doc:KY(w)};p.push(KY(b)),a.doc=p}a.doc.forEach(b=>XY(a,b,!0))}},GGe=()=>(XY({id:"root"},{id:"root",doc:WY},!0),{id:"root",doc:WY}),UGe=i=>{let a;i.doc?a=i.doc:a=i,Ut.info(a),fjt(!0),Ut.info("Extract",a),a.forEach(f=>{switch(f.stmt){case UY:LT(f.id.trim(),f.type,f.doc,f.description,f.note,f.classes,f.styles,f.textStyles);break;case Igt:djt(f.state1,f.state2,f.description);break;case BGe:gjt(f.id.trim(),f.classes);break;case RGe:Bgt(f.id.trim(),f.styleClass);break}})},LT=function(i,a=KF,f=null,p=null,w=null,m=null,b=null,E=null){const _=i==null?void 0:i.trim();S0.states[_]===void 0?(Ut.info("Adding state ",_,p),S0.states[_]={id:_,descriptions:[],type:a,doc:f,note:w,classes:[],styles:[],textStyles:[]}):(S0.states[_].doc||(S0.states[_].doc=f),S0.states[_].type||(S0.states[_].type=a)),p&&(Ut.info("Setting state description",_,p),typeof p=="string"&&Ngt(_,p.trim()),typeof p=="object"&&p.forEach(A=>Ngt(_,A.trim()))),w&&(S0.states[_].note=w,S0.states[_].note.text=Kr.sanitizeText(S0.states[_].note.text,Oe())),m&&(Ut.info("Setting state classes",_,m),(typeof m=="string"?[m]:m).forEach(I=>Bgt(_,I.trim()))),b&&(Ut.info("Setting state styles",_,b),(typeof b=="string"?[b]:b).forEach(I=>nUe(_,I.trim()))),E&&(Ut.info("Setting state styles",_,b),(typeof E=="string"?[E]:E).forEach(I=>rUe(_,I.trim())))},fjt=function(i){YY={root:ljt()},S0=YY.root,QF=0,XF=cjt(),i||hg()},ZF=function(i){return S0.states[i]},WGe=function(){return S0.states},YGe=function(){Ut.info("Documents = ",YY)},KGe=function(){return S0.relations};function Pgt(i=""){let a=i;return i===Ogt&&(QF++,a=`${rjt}${QF}`),a}function Fgt(i="",a=KF){return i===Ogt?rjt:a}function XGe(i=""){let a=i;return i===ijt&&(QF++,a=`${sjt}${QF}`),a}function QGe(i="",a=KF){return i===ijt?sjt:a}function ZGe(i,a,f){let p=Pgt(i.id.trim()),w=Fgt(i.id.trim(),i.type),m=Pgt(a.id.trim()),b=Fgt(a.id.trim(),a.type);LT(p,w,i.doc,i.description,i.note,i.classes,i.styles,i.textStyles),LT(m,b,a.doc,a.description,a.note,a.classes,a.styles,a.textStyles),S0.relations.push({id1:p,id2:m,relationTitle:Kr.sanitizeText(f,Oe())})}const djt=function(i,a,f){if(typeof i=="object")ZGe(i,a,f);else{const p=Pgt(i.trim()),w=Fgt(i),m=XGe(a.trim()),b=QGe(a);LT(p,w),LT(m,b),S0.relations.push({id1:p,id2:m,title:Kr.sanitizeText(f,Oe())})}},Ngt=function(i,a){const f=S0.states[i],p=a.startsWith(":")?a.replace(":","").trim():a;f.descriptions.push(Kr.sanitizeText(p,Oe()))},JGe=function(i){return i.substring(0,1)===":"?i.substr(2).trim():i.trim()},tUe=()=>(hjt++,"divider-id-"+hjt),gjt=function(i,a=""){XF[i]===void 0&&(XF[i]={id:i,styles:[],textStyles:[]});const f=XF[i];a!=null&&a.split($Ge).forEach(p=>{const w=p.replace(/([^;]*);/,"$1").trim();if(p.match(ajt)){const b=w.replace(ojt,jGe).replace(ajt,ojt);f.textStyles.push(b)}f.styles.push(w)})},eUe=function(){return XF},Bgt=function(i,a){i.split(",").forEach(function(f){let p=ZF(f);if(p===void 0){const w=f.trim();LT(w),p=ZF(w)}p.classes.push(a)})},nUe=function(i,a){const f=ZF(i);f!==void 0&&f.textStyles.push(a)},rUe=function(i,a){const f=ZF(i);f!==void 0&&f.textStyles.push(a)},$5={getConfig:()=>Oe().state,addState:LT,clear:fjt,getState:ZF,getStates:WGe,getRelations:KGe,getClasses:eUe,getDirection:()=>ujt,addRelation:djt,getDividerId:tUe,setDirection:i=>{ujt=i},cleanupLabel:JGe,lineType:zGe,relationType:qGe,logDocuments:YGe,getRootDoc:VGe,setRootDoc:HGe,getRootDocV2:GGe,extract:UGe,trimColon:i=>i&&i[0]===":"?i.substr(1).trim():i.trim(),getAccTitle:fg,setAccTitle:E0,getAccDescription:gg,setAccDescription:dg,addStyleClass:gjt,setCssClass:Bgt,addDescription:Ngt,setDiagramTitle:Nb,getDiagramTitle:pg},pjt=i=>` +`;let nKe=0;const qin=function(i,s,u,d,p){const v=function(oe){switch(oe){case p.db.relationType.AGGREGATION:return"aggregation";case p.db.relationType.EXTENSION:return"extension";case p.db.relationType.COMPOSITION:return"composition";case p.db.relationType.DEPENDENCY:return"dependency";case p.db.relationType.LOLLIPOP:return"lollipop"}};s.points=s.points.filter(oe=>!Number.isNaN(oe.y));const b=s.points,y=k7().x(function(oe){return oe.x}).y(function(oe){return oe.y}).curve(FF),T=i.append("path").attr("d",y(b)).attr("id","edge"+nKe).attr("class","relation");let _="";d.arrowMarkerAbsolute&&(_=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,_=_.replace(/\(/g,"\\("),_=_.replace(/\)/g,"\\)")),u.relation.lineType==1&&T.attr("class","relation dashed-line"),u.relation.lineType==10&&T.attr("class","relation dotted-line"),u.relation.type1!=="none"&&T.attr("marker-start","url("+_+"#"+v(u.relation.type1)+"Start)"),u.relation.type2!=="none"&&T.attr("marker-end","url("+_+"#"+v(u.relation.type2)+"End)");let A,P;const R=s.points.length;let F=Ao.calcLabelPosition(s.points);A=F.x,P=F.y;let j,K,ee,ie;if(R%2!==0&&R>1){let oe=Ao.calcCardinalityPosition(u.relation.type1!=="none",s.points,s.points[0]),pe=Ao.calcCardinalityPosition(u.relation.type2!=="none",s.points,s.points[R-1]);Xe.debug("cardinality_1_point "+JSON.stringify(oe)),Xe.debug("cardinality_2_point "+JSON.stringify(pe)),j=oe.x,K=oe.y,ee=pe.x,ie=pe.y}if(u.title!==void 0){const oe=i.append("g").attr("class","classLabel"),pe=oe.append("text").attr("class","label").attr("x",A).attr("y",P).attr("fill","red").attr("text-anchor","middle").text(u.title);window.label=pe;const be=pe.node().getBBox();oe.insert("rect",":first-child").attr("class","box").attr("x",be.x-d.padding/2).attr("y",be.y-d.padding/2).attr("width",be.width+d.padding).attr("height",be.height+d.padding)}Xe.info("Rendering relation "+JSON.stringify(u)),u.relationTitle1!==void 0&&u.relationTitle1!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",j).attr("y",K).attr("fill","black").attr("font-size","6").text(u.relationTitle1),u.relationTitle2!==void 0&&u.relationTitle2!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",ee).attr("y",ie).attr("fill","black").attr("font-size","6").text(u.relationTitle2),nKe++},Hin=function(i,s,u,d){Xe.debug("Rendering class ",s,u);const p=s.id,v={id:p,label:s.id,width:0,height:0},b=i.append("g").attr("id",d.db.lookUpDomId(p)).attr("class","classGroup");let y;s.link?y=b.append("svg:a").attr("xlink:href",s.link).attr("target",s.linkTarget).append("text").attr("y",u.textHeight+u.padding).attr("x",0):y=b.append("text").attr("y",u.textHeight+u.padding).attr("x",0);let T=!0;s.annotations.forEach(function(pe){const be=y.append("tspan").text("«"+pe+"»");T||be.attr("dy",u.textHeight),T=!1});let _=rKe(s);const A=y.append("tspan").text(_).attr("class","title");T||A.attr("dy",u.textHeight);const P=y.node().getBBox().height;let R,F,j;if(s.members.length>0){R=b.append("line").attr("x1",0).attr("y1",u.padding+P+u.dividerMargin/2).attr("y2",u.padding+P+u.dividerMargin/2);const pe=b.append("text").attr("x",u.padding).attr("y",P+u.dividerMargin+u.textHeight).attr("fill","white").attr("class","classText");T=!0,s.members.forEach(function(be){iKe(pe,be,T,u),T=!1}),F=pe.node().getBBox()}if(s.methods.length>0){j=b.append("line").attr("x1",0).attr("y1",u.padding+P+u.dividerMargin+F.height).attr("y2",u.padding+P+u.dividerMargin+F.height);const pe=b.append("text").attr("x",u.padding).attr("y",P+2*u.dividerMargin+F.height+u.textHeight).attr("fill","white").attr("class","classText");T=!0,s.methods.forEach(function(be){iKe(pe,be,T,u),T=!1})}const K=b.node().getBBox();var ee=" ";s.cssClasses.length>0&&(ee=ee+s.cssClasses.join(" "));const oe=b.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",K.width+2*u.padding).attr("height",K.height+u.padding+.5*u.dividerMargin).attr("class",ee).node().getBBox().width;return y.node().childNodes.forEach(function(pe){pe.setAttribute("x",(oe-pe.getBBox().width)/2)}),s.tooltip&&y.insert("title").text(s.tooltip),R&&R.attr("x2",oe),j&&j.attr("x2",oe),v.width=oe,v.height=K.height+u.padding+.5*u.dividerMargin,v},rKe=function(i){let s=i.id;return i.type&&(s+="<"+qF(i.type)+">"),s},Vin=function(i,s,u,d){Xe.debug("Rendering note ",s,u);const p=s.id,v={id:p,text:s.text,width:0,height:0},b=i.append("g").attr("id",p).attr("class","classGroup");let y=b.append("text").attr("y",u.textHeight+u.padding).attr("x",0);const T=JSON.parse(`"${s.text}"`).split(` +`);T.forEach(function(R){Xe.debug(`Adding line: ${R}`),y.append("tspan").text(R).attr("class","title").attr("dy",u.textHeight)});const _=b.node().getBBox(),P=b.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",_.width+2*u.padding).attr("height",_.height+T.length*u.textHeight+u.padding+.5*u.dividerMargin).node().getBBox().width;return y.node().childNodes.forEach(function(R){R.setAttribute("x",(P-R.getBBox().width)/2)}),v.width=P,v.height=_.height+T.length*u.textHeight+u.padding+.5*u.dividerMargin,v},iKe=function(i,s,u,d){const{displayText:p,cssStyle:v}=s.getDisplayDetails(),b=i.append("tspan").attr("x",d.padding).text(p);v!==""&&b.attr("style",s.cssStyle),u||b.attr("dy",d.textHeight)},Dve={getClassTitleString:rKe,drawClass:Hin,drawEdge:qin,drawNote:Vin};let xJ={};const kJ=20,YR=function(i){const s=Object.entries(xJ).find(u=>u[1].label===i);if(s)return s[0]},Uin=function(i){i.append("defs").append("marker").attr("id","extensionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),i.append("defs").append("marker").attr("id","extensionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),i.append("defs").append("marker").attr("id","compositionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","compositionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","aggregationStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","aggregationEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","dependencyStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},Gin=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:KGe,db:yJ,renderer:{draw:function(i,s,u,d){const p=qt().class;xJ={},Xe.info("Rendering diagram "+i);const v=qt().securityLevel;let b;v==="sandbox"&&(b=Ir("#i"+s));const y=Ir(v==="sandbox"?b.nodes()[0].contentDocument.body:"body"),T=y.select(`[id='${s}']`);Uin(T);const _=new B0({multigraph:!0});_.setGraph({isMultiGraph:!0}),_.setDefaultEdgeLabel(function(){return{}});const A=d.db.getClasses(),P=Object.keys(A);for(const oe of P){const pe=A[oe],be=Dve.drawClass(T,pe,p,d);xJ[be.id]=be,_.setNode(be.id,be),Xe.info("Org height: "+be.height)}d.db.getRelations().forEach(function(oe){Xe.info("tjoho"+YR(oe.id1)+YR(oe.id2)+JSON.stringify(oe)),_.setEdge(YR(oe.id1),YR(oe.id2),{relation:oe},oe.title||"DEFAULT")}),d.db.getNotes().forEach(function(oe){Xe.debug(`Adding note: ${JSON.stringify(oe)}`);const pe=Dve.drawNote(T,oe,p,d);xJ[pe.id]=pe,_.setNode(pe.id,pe),oe.class&&oe.class in A&&_.setEdge(oe.id,YR(oe.class),{relation:{id1:oe.id,id2:oe.class,relation:{type1:"none",type2:"none",lineType:10}}},"DEFAULT")}),qD(_),_.nodes().forEach(function(oe){oe!==void 0&&_.node(oe)!==void 0&&(Xe.debug("Node "+oe+": "+JSON.stringify(_.node(oe))),y.select("#"+(d.db.lookUpDomId(oe)||oe)).attr("transform","translate("+(_.node(oe).x-_.node(oe).width/2)+","+(_.node(oe).y-_.node(oe).height/2)+" )"))}),_.edges().forEach(function(oe){oe!==void 0&&_.edge(oe)!==void 0&&(Xe.debug("Edge "+oe.v+" -> "+oe.w+": "+JSON.stringify(_.edge(oe))),Dve.drawEdge(T,_.edge(oe),_.edge(oe).relation,p,d))});const j=T.node().getBBox(),K=j.width+kJ*2,ee=j.height+kJ*2;Ng(T,ee,K,p.useMaxWidth);const ie=`${j.x-kJ} ${j.y-kJ} ${K} ${ee}`;Xe.debug(`viewBox ${ie}`),T.attr("viewBox",ie)}},styles:tKe,init:i=>{i.class||(i.class={}),i.class.arrowMarkerAbsolute=i.arrowMarkerAbsolute,yJ.clear()}}},Symbol.toStringTag,{value:"Module"})),Ive=i=>ci.sanitizeText(i,qt());let Ove={dividerMargin:10,padding:5,textHeight:10,curve:void 0};const Kin=function(i,s,u,d){const p=Object.keys(i);Xe.info("keys:",p),Xe.info(i),p.forEach(function(v){var _,A;const b=i[v],T={shape:"rect",id:b.id,domId:b.domId,labelText:Ive(b.id),labelStyle:"",style:"fill: none; stroke: black",padding:((_=qt().flowchart)==null?void 0:_.padding)??((A=qt().class)==null?void 0:A.padding)};s.setNode(b.id,T),sKe(b.classes,s,u,d,b.id),Xe.info("setNode",T)})},sKe=function(i,s,u,d,p){const v=Object.keys(i);Xe.info("keys:",v),Xe.info(i),v.filter(b=>i[b].parent==p).forEach(function(b){var j,K;const y=i[b],T=y.cssClasses.join(" "),_=om(y.styles),A=y.label??y.id,P=0,R="class_box",F={labelStyle:_.labelStyle,shape:R,labelText:Ive(A),classData:y,rx:P,ry:P,class:T,style:_.style,id:y.id,domId:y.domId,tooltip:d.db.getTooltip(y.id,p)||"",haveCallback:y.haveCallback,link:y.link,width:y.type==="group"?500:void 0,type:y.type,padding:((j=qt().flowchart)==null?void 0:j.padding)??((K=qt().class)==null?void 0:K.padding)};s.setNode(y.id,F),p&&s.setParent(y.id,p),Xe.info("setNode",F)})},Win=function(i,s,u,d){Xe.info(i),i.forEach(function(p,v){var K,ee;const b=p,y="",T={labelStyle:"",style:""},_=b.text,A=0,P="note",R={labelStyle:T.labelStyle,shape:P,labelText:Ive(_),noteData:b,rx:A,ry:A,class:y,style:T.style,id:b.id,domId:b.id,tooltip:"",type:"note",padding:((K=qt().flowchart)==null?void 0:K.padding)??((ee=qt().class)==null?void 0:ee.padding)};if(s.setNode(b.id,R),Xe.info("setNode",R),!b.class||!(b.class in d))return;const F=u+v,j={id:`edgeNote${F}`,classes:"relation",pattern:"dotted",arrowhead:"none",startLabelRight:"",endLabelLeft:"",arrowTypeStart:"none",arrowTypeEnd:"none",style:"fill:none",labelStyle:"",curve:Ov(Ove.curve,kp)};s.setEdge(b.id,b.class,j,F)})},Yin=function(i,s){const u=qt().flowchart;let d=0;i.forEach(function(p){var b;d++;const v={classes:"relation",pattern:p.relation.lineType==1?"dashed":"solid",id:`id_${p.id1}_${p.id2}_${d}`,arrowhead:p.type==="arrow_open"?"none":"normal",startLabelRight:p.relationTitle1==="none"?"":p.relationTitle1,endLabelLeft:p.relationTitle2==="none"?"":p.relationTitle2,arrowTypeStart:aKe(p.relation.type1),arrowTypeEnd:aKe(p.relation.type2),style:"fill:none",labelStyle:"",curve:Ov(u==null?void 0:u.curve,kp)};if(Xe.info(v,p),p.style!==void 0){const y=om(p.style);v.style=y.style,v.labelStyle=y.labelStyle}p.text=p.title,p.text===void 0?p.style!==void 0&&(v.arrowheadStyle="fill: #333"):(v.arrowheadStyle="fill: #333",v.labelpos="c",((b=qt().flowchart)==null?void 0:b.htmlLabels)??qt().htmlLabels?(v.labelType="html",v.label=''+p.text+""):(v.labelType="text",v.label=p.text.replace(ci.lineBreakRegex,` +`),p.style===void 0&&(v.style=v.style||"stroke: #333; stroke-width: 1.5px;fill:none"),v.labelStyle=v.labelStyle.replace("color:","fill:"))),s.setEdge(p.id1,p.id2,v,d)})},Xin=function(i){Ove={...Ove,...i}},Qin=async function(i,s,u,d){Xe.info("Drawing class - ",s);const p=qt().flowchart??qt().class,v=qt().securityLevel;Xe.info("config:",p);const b=(p==null?void 0:p.nodeSpacing)??50,y=(p==null?void 0:p.rankSpacing)??50,T=new B0({multigraph:!0,compound:!0}).setGraph({rankdir:d.db.getDirection(),nodesep:b,ranksep:y,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),_=d.db.getNamespaces(),A=d.db.getClasses(),P=d.db.getRelations(),R=d.db.getNotes();Xe.info(P),Kin(_,T,s,d),sKe(A,T,s,d),Yin(P,T),Win(R,T,P.length+1,A);let F;v==="sandbox"&&(F=Ir("#i"+s));const j=Ir(v==="sandbox"?F.nodes()[0].contentDocument.body:"body"),K=j.select(`[id="${s}"]`),ee=j.select("#"+s+" g");if(await qme(ee,T,["aggregation","extension","composition","dependency","lollipop"],"classDiagram",s),Ao.insertTitle(K,"classTitleText",(p==null?void 0:p.titleTopMargin)??5,d.db.getDiagramTitle()),y9(T,K,p==null?void 0:p.diagramPadding,p==null?void 0:p.useMaxWidth),!(p!=null&&p.htmlLabels)){const ie=v==="sandbox"?F.nodes()[0].contentDocument:document,oe=ie.querySelectorAll('[id="'+s+'"] .edgeLabel .label');for(const pe of oe){const be=pe.getBBox(),ae=ie.createElementNS("http://www.w3.org/2000/svg","rect");ae.setAttribute("rx",0),ae.setAttribute("ry",0),ae.setAttribute("width",be.width),ae.setAttribute("height",be.height),pe.insertBefore(ae,pe.firstChild)}}};function aKe(i){let s;switch(i){case 0:s="aggregation";break;case 1:s="extension";break;case 2:s="composition";break;case 3:s="dependency";break;case 4:s="lollipop";break;default:s="none"}return s}const Jin=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:KGe,db:yJ,renderer:{setConf:Xin,draw:Qin},styles:tKe,init:i=>{i.class||(i.class={}),i.class.arrowMarkerAbsolute=i.arrowMarkerAbsolute,yJ.clear()}}},Symbol.toStringTag,{value:"Module"}));var Nve=function(){var i=function(Ie,Se,Ce,ke){for(Ce=Ce||{},ke=Ie.length;ke--;Ce[Ie[ke]]=Se);return Ce},s=[1,2],u=[1,3],d=[1,4],p=[2,4],v=[1,9],b=[1,11],y=[1,15],T=[1,16],_=[1,17],A=[1,18],P=[1,30],R=[1,19],F=[1,20],j=[1,21],K=[1,22],ee=[1,23],ie=[1,25],oe=[1,26],pe=[1,27],be=[1,28],ae=[1,29],ne=[1,32],se=[1,33],de=[1,34],X=[1,35],ge=[1,31],W=[1,4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],xe=[1,4,5,13,14,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],U=[4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],Fe={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,cssClassStatement:11,idStatement:12,DESCR:13,"-->":14,HIDE_EMPTY:15,scale:16,WIDTH:17,COMPOSIT_STATE:18,STRUCT_START:19,STRUCT_STOP:20,STATE_DESCR:21,AS:22,ID:23,FORK:24,JOIN:25,CHOICE:26,CONCURRENT:27,note:28,notePosition:29,NOTE_TEXT:30,direction:31,acc_title:32,acc_title_value:33,acc_descr:34,acc_descr_value:35,acc_descr_multiline_value:36,classDef:37,CLASSDEF_ID:38,CLASSDEF_STYLEOPTS:39,DEFAULT:40,class:41,CLASSENTITY_IDS:42,STYLECLASS:43,direction_tb:44,direction_bt:45,direction_rl:46,direction_lr:47,eol:48,";":49,EDGE_STATE:50,STYLE_SEPARATOR:51,left_of:52,right_of:53,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",13:"DESCR",14:"-->",15:"HIDE_EMPTY",16:"scale",17:"WIDTH",18:"COMPOSIT_STATE",19:"STRUCT_START",20:"STRUCT_STOP",21:"STATE_DESCR",22:"AS",23:"ID",24:"FORK",25:"JOIN",26:"CHOICE",27:"CONCURRENT",28:"note",30:"NOTE_TEXT",32:"acc_title",33:"acc_title_value",34:"acc_descr",35:"acc_descr_value",36:"acc_descr_multiline_value",37:"classDef",38:"CLASSDEF_ID",39:"CLASSDEF_STYLEOPTS",40:"DEFAULT",41:"class",42:"CLASSENTITY_IDS",43:"STYLECLASS",44:"direction_tb",45:"direction_bt",46:"direction_rl",47:"direction_lr",49:";",50:"EDGE_STATE",51:"STYLE_SEPARATOR",52:"left_of",53:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[10,3],[10,3],[11,3],[31,1],[31,1],[31,1],[31,1],[48,1],[48,1],[12,1],[12,1],[12,3],[12,3],[29,1],[29,1]],performAction:function(Se,Ce,ke,Ke,Ft,Ne,gn){var _t=Ne.length-1;switch(Ft){case 3:return Ke.setRootDoc(Ne[_t]),Ne[_t];case 4:this.$=[];break;case 5:Ne[_t]!="nl"&&(Ne[_t-1].push(Ne[_t]),this.$=Ne[_t-1]);break;case 6:case 7:this.$=Ne[_t];break;case 8:this.$="nl";break;case 11:this.$=Ne[_t];break;case 12:const xt=Ne[_t-1];xt.description=Ke.trimColon(Ne[_t]),this.$=xt;break;case 13:this.$={stmt:"relation",state1:Ne[_t-2],state2:Ne[_t]};break;case 14:const Pt=Ke.trimColon(Ne[_t]);this.$={stmt:"relation",state1:Ne[_t-3],state2:Ne[_t-1],description:Pt};break;case 18:this.$={stmt:"state",id:Ne[_t-3],type:"default",description:"",doc:Ne[_t-1]};break;case 19:var Et=Ne[_t],Gt=Ne[_t-2].trim();if(Ne[_t].match(":")){var ln=Ne[_t].split(":");Et=ln[0],Gt=[Gt,ln[1]]}this.$={stmt:"state",id:Et,type:"default",description:Gt};break;case 20:this.$={stmt:"state",id:Ne[_t-3],type:"default",description:Ne[_t-5],doc:Ne[_t-1]};break;case 21:this.$={stmt:"state",id:Ne[_t],type:"fork"};break;case 22:this.$={stmt:"state",id:Ne[_t],type:"join"};break;case 23:this.$={stmt:"state",id:Ne[_t],type:"choice"};break;case 24:this.$={stmt:"state",id:Ke.getDividerId(),type:"divider"};break;case 25:this.$={stmt:"state",id:Ne[_t-1].trim(),note:{position:Ne[_t-2].trim(),text:Ne[_t].trim()}};break;case 28:this.$=Ne[_t].trim(),Ke.setAccTitle(this.$);break;case 29:case 30:this.$=Ne[_t].trim(),Ke.setAccDescription(this.$);break;case 31:case 32:this.$={stmt:"classDef",id:Ne[_t-1].trim(),classes:Ne[_t].trim()};break;case 33:this.$={stmt:"applyClass",id:Ne[_t-1].trim(),styleClass:Ne[_t].trim()};break;case 34:Ke.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 35:Ke.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 36:Ke.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 37:Ke.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 40:case 41:this.$={stmt:"state",id:Ne[_t].trim(),type:"default",description:""};break;case 42:this.$={stmt:"state",id:Ne[_t-2].trim(),classes:[Ne[_t].trim()],type:"default",description:""};break;case 43:this.$={stmt:"state",id:Ne[_t-2].trim(),classes:[Ne[_t].trim()],type:"default",description:""};break}},table:[{3:1,4:s,5:u,6:d},{1:[3]},{3:5,4:s,5:u,6:d},{3:6,4:s,5:u,6:d},i([1,4,5,15,16,18,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],p,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:v,5:b,8:8,9:10,10:12,11:13,12:14,15:y,16:T,18:_,21:A,23:P,24:R,25:F,26:j,27:K,28:ee,31:24,32:ie,34:oe,36:pe,37:be,41:ae,44:ne,45:se,46:de,47:X,50:ge},i(W,[2,5]),{9:36,10:12,11:13,12:14,15:y,16:T,18:_,21:A,23:P,24:R,25:F,26:j,27:K,28:ee,31:24,32:ie,34:oe,36:pe,37:be,41:ae,44:ne,45:se,46:de,47:X,50:ge},i(W,[2,7]),i(W,[2,8]),i(W,[2,9]),i(W,[2,10]),i(W,[2,11],{13:[1,37],14:[1,38]}),i(W,[2,15]),{17:[1,39]},i(W,[2,17],{19:[1,40]}),{22:[1,41]},i(W,[2,21]),i(W,[2,22]),i(W,[2,23]),i(W,[2,24]),{29:42,30:[1,43],52:[1,44],53:[1,45]},i(W,[2,27]),{33:[1,46]},{35:[1,47]},i(W,[2,30]),{38:[1,48],40:[1,49]},{42:[1,50]},i(xe,[2,40],{51:[1,51]}),i(xe,[2,41],{51:[1,52]}),i(W,[2,34]),i(W,[2,35]),i(W,[2,36]),i(W,[2,37]),i(W,[2,6]),i(W,[2,12]),{12:53,23:P,50:ge},i(W,[2,16]),i(U,p,{7:54}),{23:[1,55]},{23:[1,56]},{22:[1,57]},{23:[2,44]},{23:[2,45]},i(W,[2,28]),i(W,[2,29]),{39:[1,58]},{39:[1,59]},{43:[1,60]},{23:[1,61]},{23:[1,62]},i(W,[2,13],{13:[1,63]}),{4:v,5:b,8:8,9:10,10:12,11:13,12:14,15:y,16:T,18:_,20:[1,64],21:A,23:P,24:R,25:F,26:j,27:K,28:ee,31:24,32:ie,34:oe,36:pe,37:be,41:ae,44:ne,45:se,46:de,47:X,50:ge},i(W,[2,19],{19:[1,65]}),{30:[1,66]},{23:[1,67]},i(W,[2,31]),i(W,[2,32]),i(W,[2,33]),i(xe,[2,42]),i(xe,[2,43]),i(W,[2,14]),i(W,[2,18]),i(U,p,{7:68}),i(W,[2,25]),i(W,[2,26]),{4:v,5:b,8:8,9:10,10:12,11:13,12:14,15:y,16:T,18:_,20:[1,69],21:A,23:P,24:R,25:F,26:j,27:K,28:ee,31:24,32:ie,34:oe,36:pe,37:be,41:ae,44:ne,45:se,46:de,47:X,50:ge},i(W,[2,20])],defaultActions:{5:[2,1],6:[2,2],44:[2,44],45:[2,45]},parseError:function(Se,Ce){if(Ce.recoverable)this.trace(Se);else{var ke=new Error(Se);throw ke.hash=Ce,ke}},parse:function(Se){var Ce=this,ke=[0],Ke=[],Ft=[null],Ne=[],gn=this.table,_t="",Et=0,Gt=0,ln=2,xt=1,Pt=Ne.slice.call(arguments,1),Qe=Object.create(this.lexer),Dt={yy:{}};for(var kt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,kt)&&(Dt.yy[kt]=this.yy[kt]);Qe.setInput(Se,Dt.yy),Dt.yy.lexer=Qe,Dt.yy.parser=this,typeof Qe.yylloc>"u"&&(Qe.yylloc={});var On=Qe.yylloc;Ne.push(On);var ht=Qe.options&&Qe.options.ranges;typeof Dt.yy.parseError=="function"?this.parseError=Dt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function zr(){var At;return At=Ke.pop()||Qe.lex()||xt,typeof At!="number"&&(At instanceof Array&&(Ke=At,At=Ke.pop()),At=Ce.symbols_[At]||At),At}for(var yt,ji,xi,Ma,zs={},ao,Tr,Fn,qn;;){if(ji=ke[ke.length-1],this.defaultActions[ji]?xi=this.defaultActions[ji]:((yt===null||typeof yt>"u")&&(yt=zr()),xi=gn[ji]&&gn[ji][yt]),typeof xi>"u"||!xi.length||!xi[0]){var Un="";qn=[];for(ao in gn[ji])this.terminals_[ao]&&ao>ln&&qn.push("'"+this.terminals_[ao]+"'");Qe.showPosition?Un="Parse error on line "+(Et+1)+`: +`+Qe.showPosition()+` +Expecting `+qn.join(", ")+", got '"+(this.terminals_[yt]||yt)+"'":Un="Parse error on line "+(Et+1)+": Unexpected "+(yt==xt?"end of input":"'"+(this.terminals_[yt]||yt)+"'"),this.parseError(Un,{text:Qe.match,token:this.terminals_[yt]||yt,line:Qe.yylineno,loc:On,expected:qn})}if(xi[0]instanceof Array&&xi.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ji+", token: "+yt);switch(xi[0]){case 1:ke.push(yt),Ft.push(Qe.yytext),Ne.push(Qe.yylloc),ke.push(xi[1]),yt=null,Gt=Qe.yyleng,_t=Qe.yytext,Et=Qe.yylineno,On=Qe.yylloc;break;case 2:if(Tr=this.productions_[xi[1]][1],zs.$=Ft[Ft.length-Tr],zs._$={first_line:Ne[Ne.length-(Tr||1)].first_line,last_line:Ne[Ne.length-1].last_line,first_column:Ne[Ne.length-(Tr||1)].first_column,last_column:Ne[Ne.length-1].last_column},ht&&(zs._$.range=[Ne[Ne.length-(Tr||1)].range[0],Ne[Ne.length-1].range[1]]),Ma=this.performAction.apply(zs,[_t,Gt,Et,Dt.yy,xi[1],Ft,Ne].concat(Pt)),typeof Ma<"u")return Ma;Tr&&(ke=ke.slice(0,-1*Tr*2),Ft=Ft.slice(0,-1*Tr),Ne=Ne.slice(0,-1*Tr)),ke.push(this.productions_[xi[1]][0]),Ft.push(zs.$),Ne.push(zs._$),Fn=gn[ke[ke.length-2]][ke[ke.length-1]],ke.push(Fn);break;case 3:return!0}}return!0}},Pe=function(){var Ie={EOF:1,parseError:function(Ce,ke){if(this.yy.parser)this.yy.parser.parseError(Ce,ke);else throw new Error(Ce)},setInput:function(Se,Ce){return this.yy=Ce||this.yy||{},this._input=Se,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Se=this._input[0];this.yytext+=Se,this.yyleng++,this.offset++,this.match+=Se,this.matched+=Se;var Ce=Se.match(/(?:\r\n?|\n).*/g);return Ce?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Se},unput:function(Se){var Ce=Se.length,ke=Se.split(/(?:\r\n?|\n)/g);this._input=Se+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ce),this.offset-=Ce;var Ke=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ke.length-1&&(this.yylineno-=ke.length-1);var Ft=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ke?(ke.length===Ke.length?this.yylloc.first_column:0)+Ke[Ke.length-ke.length].length-ke[0].length:this.yylloc.first_column-Ce},this.options.ranges&&(this.yylloc.range=[Ft[0],Ft[0]+this.yyleng-Ce]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Se){this.unput(this.match.slice(Se))},pastInput:function(){var Se=this.matched.substr(0,this.matched.length-this.match.length);return(Se.length>20?"...":"")+Se.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Se=this.match;return Se.length<20&&(Se+=this._input.substr(0,20-Se.length)),(Se.substr(0,20)+(Se.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Se=this.pastInput(),Ce=new Array(Se.length+1).join("-");return Se+this.upcomingInput()+` +`+Ce+"^"},test_match:function(Se,Ce){var ke,Ke,Ft;if(this.options.backtrack_lexer&&(Ft={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Ft.yylloc.range=this.yylloc.range.slice(0))),Ke=Se[0].match(/(?:\r\n?|\n).*/g),Ke&&(this.yylineno+=Ke.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Ke?Ke[Ke.length-1].length-Ke[Ke.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Se[0].length},this.yytext+=Se[0],this.match+=Se[0],this.matches=Se,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Se[0].length),this.matched+=Se[0],ke=this.performAction.call(this,this.yy,this,Ce,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ke)return ke;if(this._backtrack){for(var Ne in Ft)this[Ne]=Ft[Ne];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Se,Ce,ke,Ke;this._more||(this.yytext="",this.match="");for(var Ft=this._currentRules(),Ne=0;NeCe[0].length)){if(Ce=ke,Ke=Ne,this.options.backtrack_lexer){if(Se=this.test_match(ke,Ft[Ne]),Se!==!1)return Se;if(this._backtrack){Ce=!1;continue}else return!1}else if(!this.options.flex)break}return Ce?(Se=this.test_match(Ce,Ft[Ke]),Se!==!1?Se:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Ce=this.next();return Ce||this.lex()},begin:function(Ce){this.conditionStack.push(Ce)},popState:function(){var Ce=this.conditionStack.length-1;return Ce>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Ce){return Ce=this.conditionStack.length-1-Math.abs(Ce||0),Ce>=0?this.conditionStack[Ce]:"INITIAL"},pushState:function(Ce){this.begin(Ce)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Ce,ke,Ke,Ft){switch(Ke){case 0:return 40;case 1:return 44;case 2:return 45;case 3:return 46;case 4:return 47;case 5:break;case 6:break;case 7:return 5;case 8:break;case 9:break;case 10:break;case 11:break;case 12:return this.pushState("SCALE"),16;case 13:return 17;case 14:this.popState();break;case 15:return this.begin("acc_title"),32;case 16:return this.popState(),"acc_title_value";case 17:return this.begin("acc_descr"),34;case 18:return this.popState(),"acc_descr_value";case 19:this.begin("acc_descr_multiline");break;case 20:this.popState();break;case 21:return"acc_descr_multiline_value";case 22:return this.pushState("CLASSDEF"),37;case 23:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 24:return this.popState(),this.pushState("CLASSDEFID"),38;case 25:return this.popState(),39;case 26:return this.pushState("CLASS"),41;case 27:return this.popState(),this.pushState("CLASS_STYLE"),42;case 28:return this.popState(),43;case 29:return this.pushState("SCALE"),16;case 30:return 17;case 31:this.popState();break;case 32:this.pushState("STATE");break;case 33:return this.popState(),ke.yytext=ke.yytext.slice(0,-8).trim(),24;case 34:return this.popState(),ke.yytext=ke.yytext.slice(0,-8).trim(),25;case 35:return this.popState(),ke.yytext=ke.yytext.slice(0,-10).trim(),26;case 36:return this.popState(),ke.yytext=ke.yytext.slice(0,-8).trim(),24;case 37:return this.popState(),ke.yytext=ke.yytext.slice(0,-8).trim(),25;case 38:return this.popState(),ke.yytext=ke.yytext.slice(0,-10).trim(),26;case 39:return 44;case 40:return 45;case 41:return 46;case 42:return 47;case 43:this.pushState("STATE_STRING");break;case 44:return this.pushState("STATE_ID"),"AS";case 45:return this.popState(),"ID";case 46:this.popState();break;case 47:return"STATE_DESCR";case 48:return 18;case 49:this.popState();break;case 50:return this.popState(),this.pushState("struct"),19;case 51:break;case 52:return this.popState(),20;case 53:break;case 54:return this.begin("NOTE"),28;case 55:return this.popState(),this.pushState("NOTE_ID"),52;case 56:return this.popState(),this.pushState("NOTE_ID"),53;case 57:this.popState(),this.pushState("FLOATING_NOTE");break;case 58:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 59:break;case 60:return"NOTE_TEXT";case 61:return this.popState(),"ID";case 62:return this.popState(),this.pushState("NOTE_TEXT"),23;case 63:return this.popState(),ke.yytext=ke.yytext.substr(2).trim(),30;case 64:return this.popState(),ke.yytext=ke.yytext.slice(0,-8).trim(),30;case 65:return 6;case 66:return 6;case 67:return 15;case 68:return 50;case 69:return 23;case 70:return ke.yytext=ke.yytext.trim(),13;case 71:return 14;case 72:return 27;case 73:return 51;case 74:return 5;case 75:return"INVALID"}},rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},struct:{rules:[9,10,22,26,32,39,40,41,42,51,52,53,54,68,69,70,71,72],inclusive:!1},FLOATING_NOTE_ID:{rules:[61],inclusive:!1},FLOATING_NOTE:{rules:[58,59,60],inclusive:!1},NOTE_TEXT:{rules:[63,64],inclusive:!1},NOTE_ID:{rules:[62],inclusive:!1},NOTE:{rules:[55,56,57],inclusive:!1},CLASS_STYLE:{rules:[28],inclusive:!1},CLASS:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[25],inclusive:!1},CLASSDEF:{rules:[23,24],inclusive:!1},acc_descr_multiline:{rules:[20,21],inclusive:!1},acc_descr:{rules:[18],inclusive:!1},acc_title:{rules:[16],inclusive:!1},SCALE:{rules:[13,14,30,31],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[45],inclusive:!1},STATE_STRING:{rules:[46,47],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,33,34,35,36,37,38,43,44,48,49,50],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,10,11,12,15,17,19,22,26,29,32,50,54,65,66,67,68,69,70,71,73,74,75],inclusive:!0}}};return Ie}();Fe.lexer=Pe;function je(){this.yy={}}return je.prototype=Fe,Fe.Parser=je,new je}();Nve.parser=Nve;const oKe=Nve,Zin="LR",esn="TB",EJ="state",Pve="relation",tsn="classDef",nsn="applyClass",XR="default",cKe="divider",Bve="[*]",uKe="start",lKe=Bve,hKe="end",fKe="color",dKe="fill",rsn="bgFill",isn=",";function gKe(){return{}}let pKe=Zin,TJ=[],QR=gKe();const bKe=()=>({relations:[],states:{},documents:{}});let CJ={root:bKe()},jg=CJ.root,JR=0,mKe=0;const ssn={LINE:0,DOTTED_LINE:1},asn={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},SJ=i=>JSON.parse(JSON.stringify(i)),osn=i=>{Xe.info("Setting root doc",i),TJ=i},csn=()=>TJ,_J=(i,s,u)=>{if(s.stmt===Pve)_J(i,s.state1,!0),_J(i,s.state2,!1);else if(s.stmt===EJ&&(s.id==="[*]"?(s.id=u?i.id+"_start":i.id+"_end",s.start=u):s.id=s.id.trim()),s.doc){const d=[];let p=[],v;for(v=0;v0&&p.length>0){const b={stmt:EJ,id:bje(),type:"divider",doc:SJ(p)};d.push(SJ(b)),s.doc=d}s.doc.forEach(b=>_J(s,b,!0))}},usn=()=>(_J({id:"root"},{id:"root",doc:TJ},!0),{id:"root",doc:TJ}),lsn=i=>{let s;i.doc?s=i.doc:s=i,Xe.info(s),vKe(!0),Xe.info("Extract",s),s.forEach(u=>{switch(u.stmt){case EJ:rS(u.id.trim(),u.type,u.doc,u.description,u.note,u.classes,u.styles,u.textStyles);break;case Pve:wKe(u.state1,u.state2,u.description);break;case tsn:yKe(u.id.trim(),u.classes);break;case nsn:$ve(u.id.trim(),u.styleClass);break}})},rS=function(i,s=XR,u=null,d=null,p=null,v=null,b=null,y=null){const T=i==null?void 0:i.trim();jg.states[T]===void 0?(Xe.info("Adding state ",T,d),jg.states[T]={id:T,descriptions:[],type:s,doc:u,note:p,classes:[],styles:[],textStyles:[]}):(jg.states[T].doc||(jg.states[T].doc=u),jg.states[T].type||(jg.states[T].type=s)),d&&(Xe.info("Setting state description",T,d),typeof d=="string"&&jve(T,d.trim()),typeof d=="object"&&d.forEach(_=>jve(T,_.trim()))),p&&(jg.states[T].note=p,jg.states[T].note.text=ci.sanitizeText(jg.states[T].note.text,qt())),v&&(Xe.info("Setting state classes",T,v),(typeof v=="string"?[v]:v).forEach(A=>$ve(T,A.trim()))),b&&(Xe.info("Setting state styles",T,b),(typeof b=="string"?[b]:b).forEach(A=>ysn(T,A.trim()))),y&&(Xe.info("Setting state styles",T,b),(typeof y=="string"?[y]:y).forEach(A=>xsn(T,A.trim())))},vKe=function(i){CJ={root:bKe()},jg=CJ.root,JR=0,QR=gKe(),i||Pg()},ZR=function(i){return jg.states[i]},hsn=function(){return jg.states},fsn=function(){Xe.info("Documents = ",CJ)},dsn=function(){return jg.relations};function Fve(i=""){let s=i;return i===Bve&&(JR++,s=`${uKe}${JR}`),s}function Rve(i="",s=XR){return i===Bve?uKe:s}function gsn(i=""){let s=i;return i===lKe&&(JR++,s=`${hKe}${JR}`),s}function psn(i="",s=XR){return i===lKe?hKe:s}function bsn(i,s,u){let d=Fve(i.id.trim()),p=Rve(i.id.trim(),i.type),v=Fve(s.id.trim()),b=Rve(s.id.trim(),s.type);rS(d,p,i.doc,i.description,i.note,i.classes,i.styles,i.textStyles),rS(v,b,s.doc,s.description,s.note,s.classes,s.styles,s.textStyles),jg.relations.push({id1:d,id2:v,relationTitle:ci.sanitizeText(u,qt())})}const wKe=function(i,s,u){if(typeof i=="object")bsn(i,s,u);else{const d=Fve(i.trim()),p=Rve(i),v=gsn(s.trim()),b=psn(s);rS(d,p),rS(v,b),jg.relations.push({id1:d,id2:v,title:ci.sanitizeText(u,qt())})}},jve=function(i,s){const u=jg.states[i],d=s.startsWith(":")?s.replace(":","").trim():s;u.descriptions.push(ci.sanitizeText(d,qt()))},msn=function(i){return i.substring(0,1)===":"?i.substr(2).trim():i.trim()},vsn=()=>(mKe++,"divider-id-"+mKe),yKe=function(i,s=""){QR[i]===void 0&&(QR[i]={id:i,styles:[],textStyles:[]});const u=QR[i];s!=null&&s.split(isn).forEach(d=>{const p=d.replace(/([^;]*);/,"$1").trim();if(d.match(fKe)){const b=p.replace(dKe,rsn).replace(fKe,dKe);u.textStyles.push(b)}u.styles.push(p)})},wsn=function(){return QR},$ve=function(i,s){i.split(",").forEach(function(u){let d=ZR(u);if(d===void 0){const p=u.trim();rS(p),d=ZR(p)}d.classes.push(s)})},ysn=function(i,s){const u=ZR(i);u!==void 0&&u.textStyles.push(s)},xsn=function(i,s){const u=ZR(i);u!==void 0&&u.textStyles.push(s)},G7={getConfig:()=>qt().state,addState:rS,clear:vKe,getState:ZR,getStates:hsn,getRelations:dsn,getClasses:wsn,getDirection:()=>pKe,addRelation:wKe,getDividerId:vsn,setDirection:i=>{pKe=i},cleanupLabel:msn,lineType:ssn,relationType:asn,logDocuments:fsn,getRootDoc:csn,setRootDoc:osn,getRootDocV2:usn,extract:lsn,trimColon:i=>i&&i[0]===":"?i.substr(1).trim():i.trim(),getAccTitle:Cp,setAccTitle:Bg,getAccDescription:_p,setAccDescription:Sp,addStyleClass:yKe,setCssClass:$ve,addDescription:jve,setDiagramTitle:cm,getDiagramTitle:Ap},xKe=i=>` defs #statediagram-barbEnd { fill: ${i.transitionColor}; stroke: ${i.transitionColor}; @@ -1192,12 +1458,12 @@ g.stateGroup line { font-size: 18px; fill: ${i.textColor}; } -`,Rgt={},iUe=(i,a)=>{Rgt[i]=a},sUe=i=>Rgt[i],bjt=()=>Object.keys(Rgt),aUe={get:sUe,set:iUe,keys:bjt,size:()=>bjt().length},oUe=i=>i.append("circle").attr("class","start-state").attr("r",Oe().state.sizeUnit).attr("cx",Oe().state.padding+Oe().state.sizeUnit).attr("cy",Oe().state.padding+Oe().state.sizeUnit),cUe=i=>i.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",Oe().state.textHeight).attr("class","divider").attr("x2",Oe().state.textHeight*2).attr("y1",0).attr("y2",0),uUe=(i,a)=>{const f=i.append("text").attr("x",2*Oe().state.padding).attr("y",Oe().state.textHeight+2*Oe().state.padding).attr("font-size",Oe().state.fontSize).attr("class","state-title").text(a.id),p=f.node().getBBox();return i.insert("rect",":first-child").attr("x",Oe().state.padding).attr("y",Oe().state.padding).attr("width",p.width+2*Oe().state.padding).attr("height",p.height+2*Oe().state.padding).attr("rx",Oe().state.radius),f},lUe=(i,a)=>{const f=function(N,R,z){const W=N.append("tspan").attr("x",2*Oe().state.padding).text(R);z||W.attr("dy",Oe().state.textHeight)},w=i.append("text").attr("x",2*Oe().state.padding).attr("y",Oe().state.textHeight+1.3*Oe().state.padding).attr("font-size",Oe().state.fontSize).attr("class","state-title").text(a.descriptions[0]).node().getBBox(),m=w.height,b=i.append("text").attr("x",Oe().state.padding).attr("y",m+Oe().state.padding*.4+Oe().state.dividerMargin+Oe().state.textHeight).attr("class","state-description");let E=!0,_=!0;a.descriptions.forEach(function(N){E||(f(b,N,_),_=!1),E=!1});const A=i.append("line").attr("x1",Oe().state.padding).attr("y1",Oe().state.padding+m+Oe().state.dividerMargin/2).attr("y2",Oe().state.padding+m+Oe().state.dividerMargin/2).attr("class","descr-divider"),I=b.node().getBBox(),B=Math.max(I.width,w.width);return A.attr("x2",B+3*Oe().state.padding),i.insert("rect",":first-child").attr("x",Oe().state.padding).attr("y",Oe().state.padding).attr("width",B+2*Oe().state.padding).attr("height",I.height+m+2*Oe().state.padding).attr("rx",Oe().state.radius),i},hUe=(i,a,f)=>{const p=Oe().state.padding,w=2*Oe().state.padding,m=i.node().getBBox(),b=m.width,E=m.x,_=i.append("text").attr("x",0).attr("y",Oe().state.titleShift).attr("font-size",Oe().state.fontSize).attr("class","state-title").text(a.id),I=_.node().getBBox().width+w;let B=Math.max(I,b);B===b&&(B=B+w);let N;const R=i.node().getBBox();a.doc,N=E-p,I>b&&(N=(b-B)/2+p),Math.abs(E-R.x)b&&(N=E-(I-b)/2);const z=1-Oe().state.textHeight;return i.insert("rect",":first-child").attr("x",N).attr("y",z).attr("class",f?"alt-composit":"composit").attr("width",B).attr("height",R.height+Oe().state.textHeight+Oe().state.titleShift+1).attr("rx","0"),_.attr("x",N+p),I<=b&&_.attr("x",E+(B-w)/2-I/2+p),i.insert("rect",":first-child").attr("x",N).attr("y",Oe().state.titleShift-Oe().state.textHeight-Oe().state.padding).attr("width",B).attr("height",Oe().state.textHeight*3).attr("rx",Oe().state.radius),i.insert("rect",":first-child").attr("x",N).attr("y",Oe().state.titleShift-Oe().state.textHeight-Oe().state.padding).attr("width",B).attr("height",R.height+3+2*Oe().state.textHeight).attr("rx",Oe().state.radius),i},fUe=i=>(i.append("circle").attr("class","end-state-outer").attr("r",Oe().state.sizeUnit+Oe().state.miniPadding).attr("cx",Oe().state.padding+Oe().state.sizeUnit+Oe().state.miniPadding).attr("cy",Oe().state.padding+Oe().state.sizeUnit+Oe().state.miniPadding),i.append("circle").attr("class","end-state-inner").attr("r",Oe().state.sizeUnit).attr("cx",Oe().state.padding+Oe().state.sizeUnit+2).attr("cy",Oe().state.padding+Oe().state.sizeUnit+2)),dUe=(i,a)=>{let f=Oe().state.forkWidth,p=Oe().state.forkHeight;if(a.parentId){let w=f;f=p,p=w}return i.append("rect").style("stroke","black").style("fill","black").attr("width",f).attr("height",p).attr("x",Oe().state.padding).attr("y",Oe().state.padding)},gUe=(i,a,f,p)=>{let w=0;const m=p.append("text");m.style("text-anchor","start"),m.attr("class","noteText");let b=i.replace(/\r\n/g,"
");b=b.replace(/\n/g,"
");const E=b.split(Kr.lineBreakRegex);let _=1.25*Oe().state.noteMargin;for(const A of E){const I=A.trim();if(I.length>0){const B=m.append("tspan");if(B.text(I),_===0){const N=B.node().getBBox();_+=N.height}w+=_,B.attr("x",a+Oe().state.noteMargin),B.attr("y",f+w+1.25*Oe().state.noteMargin)}}return{textWidth:m.node().getBBox().width,textHeight:w}},pUe=(i,a)=>{a.attr("class","state-note");const f=a.append("rect").attr("x",0).attr("y",Oe().state.padding),p=a.append("g"),{textWidth:w,textHeight:m}=gUe(i,0,0,p);return f.attr("height",m+2*Oe().state.noteMargin),f.attr("width",w+Oe().state.noteMargin*2),f},wjt=function(i,a){const f=a.id,p={id:f,label:a.id,width:0,height:0},w=i.append("g").attr("id",f).attr("class","stateGroup");a.type==="start"&&oUe(w),a.type==="end"&&fUe(w),(a.type==="fork"||a.type==="join")&&dUe(w,a),a.type==="note"&&pUe(a.note.text,w),a.type==="divider"&&cUe(w),a.type==="default"&&a.descriptions.length===0&&uUe(w,a),a.type==="default"&&a.descriptions.length>0&&lUe(w,a);const m=w.node().getBBox();return p.width=m.width+2*Oe().state.padding,p.height=m.height+2*Oe().state.padding,aUe.set(f,p),p};let vjt=0;const bUe=function(i,a,f){const p=function(_){switch(_){case $5.relationType.AGGREGATION:return"aggregation";case $5.relationType.EXTENSION:return"extension";case $5.relationType.COMPOSITION:return"composition";case $5.relationType.DEPENDENCY:return"dependency"}};a.points=a.points.filter(_=>!Number.isNaN(_.y));const w=a.points,m=E5().x(function(_){return _.x}).y(function(_){return _.y}).curve(HP),b=i.append("path").attr("d",m(w)).attr("id","edge"+vjt).attr("class","transition");let E="";if(Oe().state.arrowMarkerAbsolute&&(E=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,E=E.replace(/\(/g,"\\("),E=E.replace(/\)/g,"\\)")),b.attr("marker-end","url("+E+"#"+p($5.relationType.DEPENDENCY)+"End)"),f.title!==void 0){const _=i.append("g").attr("class","stateLabel"),{x:A,y:I}=$a.calcLabelPosition(a.points),B=Kr.getRows(f.title);let N=0;const R=[];let z=0,W=0;for(let at=0;at<=B.length;at++){const bt=_.append("text").attr("text-anchor","middle").text(B[at]).attr("x",A).attr("y",I+N),mt=bt.node().getBBox();z=Math.max(z,mt.width),W=Math.min(W,mt.x),Ut.info(mt.x,A,I+N),N===0&&(N=bt.node().getBBox().height,Ut.info("Title height",N,I)),R.push(bt)}let et=N*B.length;if(B.length>1){const at=(B.length-1)*N*.5;R.forEach((bt,mt)=>bt.attr("y",I+mt*N-at)),et=N*B.length}const st=_.node().getBBox();_.insert("rect",":first-child").attr("class","box").attr("x",A-z/2-Oe().state.padding/2).attr("y",I-et/2-Oe().state.padding/2-3.5).attr("width",z+Oe().state.padding).attr("height",et+Oe().state.padding),Ut.info(st)}vjt++};let qb;const jgt={},wUe=function(){},vUe=function(i){i.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},mUe=function(i,a,f,p){qb=Oe().state;const w=Oe().securityLevel;let m;w==="sandbox"&&(m=yr("#i"+a));const b=yr(w==="sandbox"?m.nodes()[0].contentDocument.body:"body"),E=w==="sandbox"?m.nodes()[0].contentDocument:document;Ut.debug("Rendering diagram "+i);const _=b.select(`[id='${a}']`);vUe(_);const A=p.db.getRootDoc();mjt(A,_,void 0,!1,b,E,p);const I=qb.padding,B=_.node().getBBox(),N=B.width+I*2,R=B.height+I*2,z=N*1.75;k0(_,R,z,qb.useMaxWidth),_.attr("viewBox",`${B.x-qb.padding} ${B.y-qb.padding} `+N+" "+R)},yUe=i=>i?i.length*qb.fontSizeFactor:1,mjt=(i,a,f,p,w,m,b)=>{const E=new c1({compound:!0,multigraph:!0});let _,A=!0;for(_=0;_{const mt=bt.parentElement;let yt=0,ft=0;mt&&(mt.parentElement&&(yt=mt.parentElement.getBBox().width),ft=parseInt(mt.getAttribute("data-x-shift"),10),Number.isNaN(ft)&&(ft=0)),bt.setAttribute("x1",0-ft+8),bt.setAttribute("x2",yt-ft-8)})):Ut.debug("No Node "+st+": "+JSON.stringify(E.node(st)))});let W=z.getBBox();E.edges().forEach(function(st){st!==void 0&&E.edge(st)!==void 0&&(Ut.debug("Edge "+st.v+" -> "+st.w+": "+JSON.stringify(E.edge(st))),bUe(a,E.edge(st),E.edge(st).relation))}),W=z.getBBox();const et={id:f||"root",label:f||"root",width:0,height:0};return et.width=W.width+2*qb.padding,et.height=W.height+2*qb.padding,Ut.debug("Doc rendered",et,E),et},xUe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:ejt,db:$5,renderer:{setConf:wUe,draw:mUe},styles:pjt,init:i=>{i.state||(i.state={}),i.state.arrowMarkerAbsolute=i.arrowMarkerAbsolute,$5.clear()}}},Symbol.toStringTag,{value:"Module"})),QY="rect",$gt="rectWithTitle",kUe="start",EUe="end",TUe="divider",CUe="roundedWithTitle",_Ue="note",SUe="noteGroup",vL="statediagram",AUe=`${vL}-state`,yjt="transition",LUe="note",MUe=`${yjt} note-edge`,DUe=`${vL}-${LUe}`,IUe=`${vL}-cluster`,OUe=`${vL}-cluster-alt`,xjt="parent",kjt="note",PUe="state",zgt="----",FUe=`${zgt}${kjt}`,Ejt=`${zgt}${xjt}`,Tjt="fill:none",Cjt="fill: #333",_jt="c",Sjt="text",Ajt="normal";let ZY={},kk=0;const NUe=function(i){const a=Object.keys(i);for(const f of a)i[f]},BUe=function(i,a){return a.db.extract(a.db.getRootDocV2()),a.db.getClasses()};function RUe(i){return i==null?"":i.classes?i.classes.join(" "):""}function qgt(i="",a=0,f="",p=zgt){const w=f!==null&&f.length>0?`${p}${f}`:"";return`${PUe}-${i}${w}-${a}`}const JF=(i,a,f,p,w,m)=>{const b=f.id,E=RUe(p[b]);if(b!=="root"){let _=QY;f.start===!0&&(_=kUe),f.start===!1&&(_=EUe),f.type!==KF&&(_=f.type),ZY[b]||(ZY[b]={id:b,shape:_,description:Kr.sanitizeText(b,Oe()),classes:`${E} ${AUe}`});const A=ZY[b];f.description&&(Array.isArray(A.description)?(A.shape=$gt,A.description.push(f.description)):A.description.length>0?(A.shape=$gt,A.description===b?A.description=[f.description]:A.description=[A.description,f.description]):(A.shape=QY,A.description=f.description),A.description=Kr.sanitizeTextOrArray(A.description,Oe())),A.description.length===1&&A.shape===$gt&&(A.shape=QY),!A.type&&f.doc&&(Ut.info("Setting cluster for ",b,Hgt(f)),A.type="group",A.dir=Hgt(f),A.shape=f.type===njt?TUe:CUe,A.classes=A.classes+" "+IUe+" "+(m?OUe:""));const I={labelStyle:"",shape:A.shape,labelText:A.description,classes:A.classes,style:"",id:b,dir:A.dir,domId:qgt(b,kk),type:A.type,padding:15};if(I.centerLabel=!0,f.note){const B={labelStyle:"",shape:_Ue,labelText:f.note.text,classes:DUe,style:"",id:b+FUe+"-"+kk,domId:qgt(b,kk,kjt),type:A.type,padding:15},N={labelStyle:"",shape:SUe,labelText:f.note.text,classes:A.classes,style:"",id:b+Ejt,domId:qgt(b,kk,xjt),type:"group",padding:0};kk++;const R=b+Ejt;i.setNode(R,N),i.setNode(B.id,B),i.setNode(b,I),i.setParent(b,R),i.setParent(B.id,R);let z=b,W=B.id;f.note.position==="left of"&&(z=B.id,W=b),i.setEdge(z,W,{arrowhead:"none",arrowType:"",style:Tjt,labelStyle:"",classes:MUe,arrowheadStyle:Cjt,labelpos:_jt,labelType:Sjt,thickness:Ajt})}else i.setNode(b,I)}a&&a.id!=="root"&&(Ut.trace("Setting node ",b," to be child of its parent ",a.id),i.setParent(b,a.id)),f.doc&&(Ut.trace("Adding nodes children "),jUe(i,f,f.doc,p,w,!m))},jUe=(i,a,f,p,w,m)=>{Ut.trace("items",f),f.forEach(b=>{switch(b.stmt){case UY:JF(i,a,b,p,w,m);break;case KF:JF(i,a,b,p,w,m);break;case Igt:{JF(i,a,b.state1,p,w,m),JF(i,a,b.state2,p,w,m);const E={id:"edge"+kk,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:Tjt,labelStyle:"",label:Kr.sanitizeText(b.description,Oe()),arrowheadStyle:Cjt,labelpos:_jt,labelType:Sjt,thickness:Ajt,classes:yjt};i.setEdge(b.state1.id,b.state2.id,E,kk),kk++}break}})},Hgt=(i,a=NGe)=>{let f=a;if(i.doc)for(let p=0;p{i.state||(i.state={}),i.state.arrowMarkerAbsolute=i.arrowMarkerAbsolute,$5.clear()}}},Symbol.toStringTag,{value:"Module"}));var Vgt=function(){var i=function(B,N,R,z){for(R=R||{},z=B.length;z--;R[B[z]]=N);return R},a=[6,8,10,11,12,14,16,17,18],f=[1,9],p=[1,10],w=[1,11],m=[1,12],b=[1,13],E=[1,14],_={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:function(N,R,z,W,et,st,at){var bt=st.length-1;switch(et){case 1:return st[bt-1];case 2:this.$=[];break;case 3:st[bt-1].push(st[bt]),this.$=st[bt-1];break;case 4:case 5:this.$=st[bt];break;case 6:case 7:this.$=[];break;case 8:W.setDiagramTitle(st[bt].substr(6)),this.$=st[bt].substr(6);break;case 9:this.$=st[bt].trim(),W.setAccTitle(this.$);break;case 10:case 11:this.$=st[bt].trim(),W.setAccDescription(this.$);break;case 12:W.addSection(st[bt].substr(8)),this.$=st[bt].substr(8);break;case 13:W.addTask(st[bt-1],st[bt]),this.$="task";break}},table:[{3:1,4:[1,2]},{1:[3]},i(a,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:f,12:p,14:w,16:m,17:b,18:E},i(a,[2,7],{1:[2,1]}),i(a,[2,3]),{9:15,11:f,12:p,14:w,16:m,17:b,18:E},i(a,[2,5]),i(a,[2,6]),i(a,[2,8]),{13:[1,16]},{15:[1,17]},i(a,[2,11]),i(a,[2,12]),{19:[1,18]},i(a,[2,4]),i(a,[2,9]),i(a,[2,10]),i(a,[2,13])],defaultActions:{},parseError:function(N,R){if(R.recoverable)this.trace(N);else{var z=new Error(N);throw z.hash=R,z}},parse:function(N){var R=this,z=[0],W=[],et=[null],st=[],at=this.table,bt="",mt=0,yt=0,ft=2,ut=1,vt=st.slice.call(arguments,1),X=Object.create(this.lexer),pt={yy:{}};for(var U in this.yy)Object.prototype.hasOwnProperty.call(this.yy,U)&&(pt.yy[U]=this.yy[U]);X.setInput(N,pt.yy),pt.yy.lexer=X,pt.yy.parser=this,typeof X.yylloc>"u"&&(X.yylloc={});var Tt=X.yylloc;st.push(Tt);var nt=X.options&&X.options.ranges;typeof pt.yy.parseError=="function"?this.parseError=pt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function It(){var Se;return Se=W.pop()||X.lex()||ut,typeof Se!="number"&&(Se instanceof Array&&(W=Se,Se=W.pop()),Se=R.symbols_[Se]||Se),Se}for(var Ot,Bt,Et,Z,Ct={},xt,Ht,Le,Ft;;){if(Bt=z[z.length-1],this.defaultActions[Bt]?Et=this.defaultActions[Bt]:((Ot===null||typeof Ot>"u")&&(Ot=It()),Et=at[Bt]&&at[Bt][Ot]),typeof Et>"u"||!Et.length||!Et[0]){var gn="";Ft=[];for(xt in at[Bt])this.terminals_[xt]&&xt>ft&&Ft.push("'"+this.terminals_[xt]+"'");X.showPosition?gn="Parse error on line "+(mt+1)+`: +`,zve={},ksn=(i,s)=>{zve[i]=s},Esn=i=>zve[i],kKe=()=>Object.keys(zve),Tsn={get:Esn,set:ksn,keys:kKe,size:()=>kKe().length},Csn=i=>i.append("circle").attr("class","start-state").attr("r",qt().state.sizeUnit).attr("cx",qt().state.padding+qt().state.sizeUnit).attr("cy",qt().state.padding+qt().state.sizeUnit),Ssn=i=>i.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",qt().state.textHeight).attr("class","divider").attr("x2",qt().state.textHeight*2).attr("y1",0).attr("y2",0),_sn=(i,s)=>{const u=i.append("text").attr("x",2*qt().state.padding).attr("y",qt().state.textHeight+2*qt().state.padding).attr("font-size",qt().state.fontSize).attr("class","state-title").text(s.id),d=u.node().getBBox();return i.insert("rect",":first-child").attr("x",qt().state.padding).attr("y",qt().state.padding).attr("width",d.width+2*qt().state.padding).attr("height",d.height+2*qt().state.padding).attr("rx",qt().state.radius),u},Asn=(i,s)=>{const u=function(R,F,j){const K=R.append("tspan").attr("x",2*qt().state.padding).text(F);j||K.attr("dy",qt().state.textHeight)},p=i.append("text").attr("x",2*qt().state.padding).attr("y",qt().state.textHeight+1.3*qt().state.padding).attr("font-size",qt().state.fontSize).attr("class","state-title").text(s.descriptions[0]).node().getBBox(),v=p.height,b=i.append("text").attr("x",qt().state.padding).attr("y",v+qt().state.padding*.4+qt().state.dividerMargin+qt().state.textHeight).attr("class","state-description");let y=!0,T=!0;s.descriptions.forEach(function(R){y||(u(b,R,T),T=!1),y=!1});const _=i.append("line").attr("x1",qt().state.padding).attr("y1",qt().state.padding+v+qt().state.dividerMargin/2).attr("y2",qt().state.padding+v+qt().state.dividerMargin/2).attr("class","descr-divider"),A=b.node().getBBox(),P=Math.max(A.width,p.width);return _.attr("x2",P+3*qt().state.padding),i.insert("rect",":first-child").attr("x",qt().state.padding).attr("y",qt().state.padding).attr("width",P+2*qt().state.padding).attr("height",A.height+v+2*qt().state.padding).attr("rx",qt().state.radius),i},Lsn=(i,s,u)=>{const d=qt().state.padding,p=2*qt().state.padding,v=i.node().getBBox(),b=v.width,y=v.x,T=i.append("text").attr("x",0).attr("y",qt().state.titleShift).attr("font-size",qt().state.fontSize).attr("class","state-title").text(s.id),A=T.node().getBBox().width+p;let P=Math.max(A,b);P===b&&(P=P+p);let R;const F=i.node().getBBox();s.doc,R=y-d,A>b&&(R=(b-P)/2+d),Math.abs(y-F.x)b&&(R=y-(A-b)/2);const j=1-qt().state.textHeight;return i.insert("rect",":first-child").attr("x",R).attr("y",j).attr("class",u?"alt-composit":"composit").attr("width",P).attr("height",F.height+qt().state.textHeight+qt().state.titleShift+1).attr("rx","0"),T.attr("x",R+d),A<=b&&T.attr("x",y+(P-p)/2-A/2+d),i.insert("rect",":first-child").attr("x",R).attr("y",qt().state.titleShift-qt().state.textHeight-qt().state.padding).attr("width",P).attr("height",qt().state.textHeight*3).attr("rx",qt().state.radius),i.insert("rect",":first-child").attr("x",R).attr("y",qt().state.titleShift-qt().state.textHeight-qt().state.padding).attr("width",P).attr("height",F.height+3+2*qt().state.textHeight).attr("rx",qt().state.radius),i},Msn=i=>(i.append("circle").attr("class","end-state-outer").attr("r",qt().state.sizeUnit+qt().state.miniPadding).attr("cx",qt().state.padding+qt().state.sizeUnit+qt().state.miniPadding).attr("cy",qt().state.padding+qt().state.sizeUnit+qt().state.miniPadding),i.append("circle").attr("class","end-state-inner").attr("r",qt().state.sizeUnit).attr("cx",qt().state.padding+qt().state.sizeUnit+2).attr("cy",qt().state.padding+qt().state.sizeUnit+2)),Dsn=(i,s)=>{let u=qt().state.forkWidth,d=qt().state.forkHeight;if(s.parentId){let p=u;u=d,d=p}return i.append("rect").style("stroke","black").style("fill","black").attr("width",u).attr("height",d).attr("x",qt().state.padding).attr("y",qt().state.padding)},Isn=(i,s,u,d)=>{let p=0;const v=d.append("text");v.style("text-anchor","start"),v.attr("class","noteText");let b=i.replace(/\r\n/g,"
");b=b.replace(/\n/g,"
");const y=b.split(ci.lineBreakRegex);let T=1.25*qt().state.noteMargin;for(const _ of y){const A=_.trim();if(A.length>0){const P=v.append("tspan");if(P.text(A),T===0){const R=P.node().getBBox();T+=R.height}p+=T,P.attr("x",s+qt().state.noteMargin),P.attr("y",u+p+1.25*qt().state.noteMargin)}}return{textWidth:v.node().getBBox().width,textHeight:p}},Osn=(i,s)=>{s.attr("class","state-note");const u=s.append("rect").attr("x",0).attr("y",qt().state.padding),d=s.append("g"),{textWidth:p,textHeight:v}=Isn(i,0,0,d);return u.attr("height",v+2*qt().state.noteMargin),u.attr("width",p+qt().state.noteMargin*2),u},EKe=function(i,s){const u=s.id,d={id:u,label:s.id,width:0,height:0},p=i.append("g").attr("id",u).attr("class","stateGroup");s.type==="start"&&Csn(p),s.type==="end"&&Msn(p),(s.type==="fork"||s.type==="join")&&Dsn(p,s),s.type==="note"&&Osn(s.note.text,p),s.type==="divider"&&Ssn(p),s.type==="default"&&s.descriptions.length===0&&_sn(p,s),s.type==="default"&&s.descriptions.length>0&&Asn(p,s);const v=p.node().getBBox();return d.width=v.width+2*qt().state.padding,d.height=v.height+2*qt().state.padding,Tsn.set(u,d),d};let TKe=0;const Nsn=function(i,s,u){const d=function(T){switch(T){case G7.relationType.AGGREGATION:return"aggregation";case G7.relationType.EXTENSION:return"extension";case G7.relationType.COMPOSITION:return"composition";case G7.relationType.DEPENDENCY:return"dependency"}};s.points=s.points.filter(T=>!Number.isNaN(T.y));const p=s.points,v=k7().x(function(T){return T.x}).y(function(T){return T.y}).curve(FF),b=i.append("path").attr("d",v(p)).attr("id","edge"+TKe).attr("class","transition");let y="";if(qt().state.arrowMarkerAbsolute&&(y=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,y=y.replace(/\(/g,"\\("),y=y.replace(/\)/g,"\\)")),b.attr("marker-end","url("+y+"#"+d(G7.relationType.DEPENDENCY)+"End)"),u.title!==void 0){const T=i.append("g").attr("class","stateLabel"),{x:_,y:A}=Ao.calcLabelPosition(s.points),P=ci.getRows(u.title);let R=0;const F=[];let j=0,K=0;for(let oe=0;oe<=P.length;oe++){const pe=T.append("text").attr("text-anchor","middle").text(P[oe]).attr("x",_).attr("y",A+R),be=pe.node().getBBox();j=Math.max(j,be.width),K=Math.min(K,be.x),Xe.info(be.x,_,A+R),R===0&&(R=pe.node().getBBox().height,Xe.info("Title height",R,A)),F.push(pe)}let ee=R*P.length;if(P.length>1){const oe=(P.length-1)*R*.5;F.forEach((pe,be)=>pe.attr("y",A+be*R-oe)),ee=R*P.length}const ie=T.node().getBBox();T.insert("rect",":first-child").attr("class","box").attr("x",_-j/2-qt().state.padding/2).attr("y",A-ee/2-qt().state.padding/2-3.5).attr("width",j+qt().state.padding).attr("height",ee+qt().state.padding),Xe.info(ie)}TKe++};let gm;const qve={},Psn=function(){},Bsn=function(i){i.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},Fsn=function(i,s,u,d){gm=qt().state;const p=qt().securityLevel;let v;p==="sandbox"&&(v=Ir("#i"+s));const b=Ir(p==="sandbox"?v.nodes()[0].contentDocument.body:"body"),y=p==="sandbox"?v.nodes()[0].contentDocument:document;Xe.debug("Rendering diagram "+i);const T=b.select(`[id='${s}']`);Bsn(T);const _=d.db.getRootDoc();CKe(_,T,void 0,!1,b,y,d);const A=gm.padding,P=T.node().getBBox(),R=P.width+A*2,F=P.height+A*2,j=R*1.75;Ng(T,F,j,gm.useMaxWidth),T.attr("viewBox",`${P.x-gm.padding} ${P.y-gm.padding} `+R+" "+F)},Rsn=i=>i?i.length*gm.fontSizeFactor:1,CKe=(i,s,u,d,p,v,b)=>{const y=new B0({compound:!0,multigraph:!0});let T,_=!0;for(T=0;T{const be=pe.parentElement;let ae=0,ne=0;be&&(be.parentElement&&(ae=be.parentElement.getBBox().width),ne=parseInt(be.getAttribute("data-x-shift"),10),Number.isNaN(ne)&&(ne=0)),pe.setAttribute("x1",0-ne+8),pe.setAttribute("x2",ae-ne-8)})):Xe.debug("No Node "+ie+": "+JSON.stringify(y.node(ie)))});let K=j.getBBox();y.edges().forEach(function(ie){ie!==void 0&&y.edge(ie)!==void 0&&(Xe.debug("Edge "+ie.v+" -> "+ie.w+": "+JSON.stringify(y.edge(ie))),Nsn(s,y.edge(ie),y.edge(ie).relation))}),K=j.getBBox();const ee={id:u||"root",label:u||"root",width:0,height:0};return ee.width=K.width+2*gm.padding,ee.height=K.height+2*gm.padding,Xe.debug("Doc rendered",ee,y),ee},jsn=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:oKe,db:G7,renderer:{setConf:Psn,draw:Fsn},styles:xKe,init:i=>{i.state||(i.state={}),i.state.arrowMarkerAbsolute=i.arrowMarkerAbsolute,G7.clear()}}},Symbol.toStringTag,{value:"Module"})),AJ="rect",Hve="rectWithTitle",$sn="start",zsn="end",qsn="divider",Hsn="roundedWithTitle",Vsn="note",Usn="noteGroup",QD="statediagram",Gsn=`${QD}-state`,SKe="transition",Ksn="note",Wsn=`${SKe} note-edge`,Ysn=`${QD}-${Ksn}`,Xsn=`${QD}-cluster`,Qsn=`${QD}-cluster-alt`,_Ke="parent",AKe="note",Jsn="state",Vve="----",Zsn=`${Vve}${AKe}`,LKe=`${Vve}${_Ke}`,MKe="fill:none",DKe="fill: #333",IKe="c",OKe="text",NKe="normal";let LJ={},j9=0;const ean=function(i){const s=Object.keys(i);for(const u of s)i[u]},tan=function(i,s){return s.db.extract(s.db.getRootDocV2()),s.db.getClasses()};function nan(i){return i==null?"":i.classes?i.classes.join(" "):""}function Uve(i="",s=0,u="",d=Vve){const p=u!==null&&u.length>0?`${d}${u}`:"";return`${Jsn}-${i}${p}-${s}`}const ej=(i,s,u,d,p,v)=>{const b=u.id,y=nan(d[b]);if(b!=="root"){let T=AJ;u.start===!0&&(T=$sn),u.start===!1&&(T=zsn),u.type!==XR&&(T=u.type),LJ[b]||(LJ[b]={id:b,shape:T,description:ci.sanitizeText(b,qt()),classes:`${y} ${Gsn}`});const _=LJ[b];u.description&&(Array.isArray(_.description)?(_.shape=Hve,_.description.push(u.description)):_.description.length>0?(_.shape=Hve,_.description===b?_.description=[u.description]:_.description=[_.description,u.description]):(_.shape=AJ,_.description=u.description),_.description=ci.sanitizeTextOrArray(_.description,qt())),_.description.length===1&&_.shape===Hve&&(_.shape=AJ),!_.type&&u.doc&&(Xe.info("Setting cluster for ",b,Gve(u)),_.type="group",_.dir=Gve(u),_.shape=u.type===cKe?qsn:Hsn,_.classes=_.classes+" "+Xsn+" "+(v?Qsn:""));const A={labelStyle:"",shape:_.shape,labelText:_.description,classes:_.classes,style:"",id:b,dir:_.dir,domId:Uve(b,j9),type:_.type,padding:15};if(A.centerLabel=!0,u.note){const P={labelStyle:"",shape:Vsn,labelText:u.note.text,classes:Ysn,style:"",id:b+Zsn+"-"+j9,domId:Uve(b,j9,AKe),type:_.type,padding:15},R={labelStyle:"",shape:Usn,labelText:u.note.text,classes:_.classes,style:"",id:b+LKe,domId:Uve(b,j9,_Ke),type:"group",padding:0};j9++;const F=b+LKe;i.setNode(F,R),i.setNode(P.id,P),i.setNode(b,A),i.setParent(b,F),i.setParent(P.id,F);let j=b,K=P.id;u.note.position==="left of"&&(j=P.id,K=b),i.setEdge(j,K,{arrowhead:"none",arrowType:"",style:MKe,labelStyle:"",classes:Wsn,arrowheadStyle:DKe,labelpos:IKe,labelType:OKe,thickness:NKe})}else i.setNode(b,A)}s&&s.id!=="root"&&(Xe.trace("Setting node ",b," to be child of its parent ",s.id),i.setParent(b,s.id)),u.doc&&(Xe.trace("Adding nodes children "),ran(i,u,u.doc,d,p,!v))},ran=(i,s,u,d,p,v)=>{Xe.trace("items",u),u.forEach(b=>{switch(b.stmt){case EJ:ej(i,s,b,d,p,v);break;case XR:ej(i,s,b,d,p,v);break;case Pve:{ej(i,s,b.state1,d,p,v),ej(i,s,b.state2,d,p,v);const y={id:"edge"+j9,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:MKe,labelStyle:"",label:ci.sanitizeText(b.description,qt()),arrowheadStyle:DKe,labelpos:IKe,labelType:OKe,thickness:NKe,classes:SKe};i.setEdge(b.state1.id,b.state2.id,y,j9),j9++}break}})},Gve=(i,s=esn)=>{let u=s;if(i.doc)for(let d=0;d{i.state||(i.state={}),i.state.arrowMarkerAbsolute=i.arrowMarkerAbsolute,G7.clear()}}},Symbol.toStringTag,{value:"Module"}));var Kve=function(){var i=function(P,R,F,j){for(F=F||{},j=P.length;j--;F[P[j]]=R);return F},s=[6,8,10,11,12,14,16,17,18],u=[1,9],d=[1,10],p=[1,11],v=[1,12],b=[1,13],y=[1,14],T={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:function(R,F,j,K,ee,ie,oe){var pe=ie.length-1;switch(ee){case 1:return ie[pe-1];case 2:this.$=[];break;case 3:ie[pe-1].push(ie[pe]),this.$=ie[pe-1];break;case 4:case 5:this.$=ie[pe];break;case 6:case 7:this.$=[];break;case 8:K.setDiagramTitle(ie[pe].substr(6)),this.$=ie[pe].substr(6);break;case 9:this.$=ie[pe].trim(),K.setAccTitle(this.$);break;case 10:case 11:this.$=ie[pe].trim(),K.setAccDescription(this.$);break;case 12:K.addSection(ie[pe].substr(8)),this.$=ie[pe].substr(8);break;case 13:K.addTask(ie[pe-1],ie[pe]),this.$="task";break}},table:[{3:1,4:[1,2]},{1:[3]},i(s,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:u,12:d,14:p,16:v,17:b,18:y},i(s,[2,7],{1:[2,1]}),i(s,[2,3]),{9:15,11:u,12:d,14:p,16:v,17:b,18:y},i(s,[2,5]),i(s,[2,6]),i(s,[2,8]),{13:[1,16]},{15:[1,17]},i(s,[2,11]),i(s,[2,12]),{19:[1,18]},i(s,[2,4]),i(s,[2,9]),i(s,[2,10]),i(s,[2,13])],defaultActions:{},parseError:function(R,F){if(F.recoverable)this.trace(R);else{var j=new Error(R);throw j.hash=F,j}},parse:function(R){var F=this,j=[0],K=[],ee=[null],ie=[],oe=this.table,pe="",be=0,ae=0,ne=2,se=1,de=ie.slice.call(arguments,1),X=Object.create(this.lexer),ge={yy:{}};for(var W in this.yy)Object.prototype.hasOwnProperty.call(this.yy,W)&&(ge.yy[W]=this.yy[W]);X.setInput(R,ge.yy),ge.yy.lexer=X,ge.yy.parser=this,typeof X.yylloc>"u"&&(X.yylloc={});var xe=X.yylloc;ie.push(xe);var U=X.options&&X.options.ranges;typeof ge.yy.parseError=="function"?this.parseError=ge.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Fe(){var _t;return _t=K.pop()||X.lex()||se,typeof _t!="number"&&(_t instanceof Array&&(K=_t,_t=K.pop()),_t=F.symbols_[_t]||_t),_t}for(var Pe,je,Ie,Se,Ce={},ke,Ke,Ft,Ne;;){if(je=j[j.length-1],this.defaultActions[je]?Ie=this.defaultActions[je]:((Pe===null||typeof Pe>"u")&&(Pe=Fe()),Ie=oe[je]&&oe[je][Pe]),typeof Ie>"u"||!Ie.length||!Ie[0]){var gn="";Ne=[];for(ke in oe[je])this.terminals_[ke]&&ke>ne&&Ne.push("'"+this.terminals_[ke]+"'");X.showPosition?gn="Parse error on line "+(be+1)+`: `+X.showPosition()+` -Expecting `+Ft.join(", ")+", got '"+(this.terminals_[Ot]||Ot)+"'":gn="Parse error on line "+(mt+1)+": Unexpected "+(Ot==ut?"end of input":"'"+(this.terminals_[Ot]||Ot)+"'"),this.parseError(gn,{text:X.match,token:this.terminals_[Ot]||Ot,line:X.yylineno,loc:Tt,expected:Ft})}if(Et[0]instanceof Array&&Et.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Bt+", token: "+Ot);switch(Et[0]){case 1:z.push(Ot),et.push(X.yytext),st.push(X.yylloc),z.push(Et[1]),Ot=null,yt=X.yyleng,bt=X.yytext,mt=X.yylineno,Tt=X.yylloc;break;case 2:if(Ht=this.productions_[Et[1]][1],Ct.$=et[et.length-Ht],Ct._$={first_line:st[st.length-(Ht||1)].first_line,last_line:st[st.length-1].last_line,first_column:st[st.length-(Ht||1)].first_column,last_column:st[st.length-1].last_column},nt&&(Ct._$.range=[st[st.length-(Ht||1)].range[0],st[st.length-1].range[1]]),Z=this.performAction.apply(Ct,[bt,yt,mt,pt.yy,Et[1],et,st].concat(vt)),typeof Z<"u")return Z;Ht&&(z=z.slice(0,-1*Ht*2),et=et.slice(0,-1*Ht),st=st.slice(0,-1*Ht)),z.push(this.productions_[Et[1]][0]),et.push(Ct.$),st.push(Ct._$),Le=at[z[z.length-2]][z[z.length-1]],z.push(Le);break;case 3:return!0}}return!0}},A=function(){var B={EOF:1,parseError:function(R,z){if(this.yy.parser)this.yy.parser.parseError(R,z);else throw new Error(R)},setInput:function(N,R){return this.yy=R||this.yy||{},this._input=N,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var N=this._input[0];this.yytext+=N,this.yyleng++,this.offset++,this.match+=N,this.matched+=N;var R=N.match(/(?:\r\n?|\n).*/g);return R?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),N},unput:function(N){var R=N.length,z=N.split(/(?:\r\n?|\n)/g);this._input=N+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-R),this.offset-=R;var W=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),z.length-1&&(this.yylineno-=z.length-1);var et=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:z?(z.length===W.length?this.yylloc.first_column:0)+W[W.length-z.length].length-z[0].length:this.yylloc.first_column-R},this.options.ranges&&(this.yylloc.range=[et[0],et[0]+this.yyleng-R]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(N){this.unput(this.match.slice(N))},pastInput:function(){var N=this.matched.substr(0,this.matched.length-this.match.length);return(N.length>20?"...":"")+N.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var N=this.match;return N.length<20&&(N+=this._input.substr(0,20-N.length)),(N.substr(0,20)+(N.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var N=this.pastInput(),R=new Array(N.length+1).join("-");return N+this.upcomingInput()+` -`+R+"^"},test_match:function(N,R){var z,W,et;if(this.options.backtrack_lexer&&(et={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(et.yylloc.range=this.yylloc.range.slice(0))),W=N[0].match(/(?:\r\n?|\n).*/g),W&&(this.yylineno+=W.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:W?W[W.length-1].length-W[W.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+N[0].length},this.yytext+=N[0],this.match+=N[0],this.matches=N,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(N[0].length),this.matched+=N[0],z=this.performAction.call(this,this.yy,this,R,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),z)return z;if(this._backtrack){for(var st in et)this[st]=et[st];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var N,R,z,W;this._more||(this.yytext="",this.match="");for(var et=this._currentRules(),st=0;stR[0].length)){if(R=z,W=st,this.options.backtrack_lexer){if(N=this.test_match(z,et[st]),N!==!1)return N;if(this._backtrack){R=!1;continue}else return!1}else if(!this.options.flex)break}return R?(N=this.test_match(R,et[W]),N!==!1?N:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var R=this.next();return R||this.lex()},begin:function(R){this.conditionStack.push(R)},popState:function(){var R=this.conditionStack.length-1;return R>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(R){return R=this.conditionStack.length-1-Math.abs(R||0),R>=0?this.conditionStack[R]:"INITIAL"},pushState:function(R){this.begin(R)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(R,z,W,et){switch(W){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}};return B}();_.lexer=A;function I(){this.yy={}}return I.prototype=_,_.Parser=I,new I}();Vgt.parser=Vgt;const zUe=Vgt;let mL="";const Ggt=[],tN=[],eN=[],qUe=function(){Ggt.length=0,tN.length=0,mL="",eN.length=0,hg()},HUe=function(i){mL=i,Ggt.push(i)},VUe=function(){return Ggt},GUe=function(){let i=Ljt();const a=100;let f=0;for(;!i&&f{f.people&&i.push(...f.people)}),[...new Set(i)].sort()},WUe=function(i,a){const f=a.substr(1).split(":");let p=0,w=[];f.length===1?(p=Number(f[0]),w=[]):(p=Number(f[0]),w=f[1].split(","));const m=w.map(E=>E.trim()),b={section:mL,type:mL,people:m,task:i,score:p};eN.push(b)},YUe=function(i){const a={section:mL,type:mL,description:i,task:i,classes:[]};tN.push(a)},Ljt=function(){const i=function(f){return eN[f].processed};let a=!0;for(const[f,p]of eN.entries())i(f),a=a&&p.processed;return a},Mjt={getConfig:()=>Oe().journey,clear:qUe,setDiagramTitle:Nb,getDiagramTitle:pg,setAccTitle:E0,getAccTitle:fg,setAccDescription:dg,getAccDescription:gg,addSection:HUe,getSections:VUe,getTasks:GUe,addTask:WUe,addTaskOrg:YUe,getActors:function(){return UUe()}},KUe=i=>`.label { +Expecting `+Ne.join(", ")+", got '"+(this.terminals_[Pe]||Pe)+"'":gn="Parse error on line "+(be+1)+": Unexpected "+(Pe==se?"end of input":"'"+(this.terminals_[Pe]||Pe)+"'"),this.parseError(gn,{text:X.match,token:this.terminals_[Pe]||Pe,line:X.yylineno,loc:xe,expected:Ne})}if(Ie[0]instanceof Array&&Ie.length>1)throw new Error("Parse Error: multiple actions possible at state: "+je+", token: "+Pe);switch(Ie[0]){case 1:j.push(Pe),ee.push(X.yytext),ie.push(X.yylloc),j.push(Ie[1]),Pe=null,ae=X.yyleng,pe=X.yytext,be=X.yylineno,xe=X.yylloc;break;case 2:if(Ke=this.productions_[Ie[1]][1],Ce.$=ee[ee.length-Ke],Ce._$={first_line:ie[ie.length-(Ke||1)].first_line,last_line:ie[ie.length-1].last_line,first_column:ie[ie.length-(Ke||1)].first_column,last_column:ie[ie.length-1].last_column},U&&(Ce._$.range=[ie[ie.length-(Ke||1)].range[0],ie[ie.length-1].range[1]]),Se=this.performAction.apply(Ce,[pe,ae,be,ge.yy,Ie[1],ee,ie].concat(de)),typeof Se<"u")return Se;Ke&&(j=j.slice(0,-1*Ke*2),ee=ee.slice(0,-1*Ke),ie=ie.slice(0,-1*Ke)),j.push(this.productions_[Ie[1]][0]),ee.push(Ce.$),ie.push(Ce._$),Ft=oe[j[j.length-2]][j[j.length-1]],j.push(Ft);break;case 3:return!0}}return!0}},_=function(){var P={EOF:1,parseError:function(F,j){if(this.yy.parser)this.yy.parser.parseError(F,j);else throw new Error(F)},setInput:function(R,F){return this.yy=F||this.yy||{},this._input=R,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var R=this._input[0];this.yytext+=R,this.yyleng++,this.offset++,this.match+=R,this.matched+=R;var F=R.match(/(?:\r\n?|\n).*/g);return F?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),R},unput:function(R){var F=R.length,j=R.split(/(?:\r\n?|\n)/g);this._input=R+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-F),this.offset-=F;var K=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),j.length-1&&(this.yylineno-=j.length-1);var ee=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:j?(j.length===K.length?this.yylloc.first_column:0)+K[K.length-j.length].length-j[0].length:this.yylloc.first_column-F},this.options.ranges&&(this.yylloc.range=[ee[0],ee[0]+this.yyleng-F]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(R){this.unput(this.match.slice(R))},pastInput:function(){var R=this.matched.substr(0,this.matched.length-this.match.length);return(R.length>20?"...":"")+R.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var R=this.match;return R.length<20&&(R+=this._input.substr(0,20-R.length)),(R.substr(0,20)+(R.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var R=this.pastInput(),F=new Array(R.length+1).join("-");return R+this.upcomingInput()+` +`+F+"^"},test_match:function(R,F){var j,K,ee;if(this.options.backtrack_lexer&&(ee={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ee.yylloc.range=this.yylloc.range.slice(0))),K=R[0].match(/(?:\r\n?|\n).*/g),K&&(this.yylineno+=K.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:K?K[K.length-1].length-K[K.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+R[0].length},this.yytext+=R[0],this.match+=R[0],this.matches=R,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(R[0].length),this.matched+=R[0],j=this.performAction.call(this,this.yy,this,F,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),j)return j;if(this._backtrack){for(var ie in ee)this[ie]=ee[ie];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var R,F,j,K;this._more||(this.yytext="",this.match="");for(var ee=this._currentRules(),ie=0;ieF[0].length)){if(F=j,K=ie,this.options.backtrack_lexer){if(R=this.test_match(j,ee[ie]),R!==!1)return R;if(this._backtrack){F=!1;continue}else return!1}else if(!this.options.flex)break}return F?(R=this.test_match(F,ee[K]),R!==!1?R:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var F=this.next();return F||this.lex()},begin:function(F){this.conditionStack.push(F)},popState:function(){var F=this.conditionStack.length-1;return F>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(F){return F=this.conditionStack.length-1-Math.abs(F||0),F>=0?this.conditionStack[F]:"INITIAL"},pushState:function(F){this.begin(F)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(F,j,K,ee){switch(K){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}};return P}();T.lexer=_;function A(){this.yy={}}return A.prototype=T,T.Parser=A,new A}();Kve.parser=Kve;const san=Kve;let JD="";const Wve=[],tj=[],nj=[],aan=function(){Wve.length=0,tj.length=0,JD="",nj.length=0,Pg()},oan=function(i){JD=i,Wve.push(i)},can=function(){return Wve},uan=function(){let i=PKe();const s=100;let u=0;for(;!i&&u{u.people&&i.push(...u.people)}),[...new Set(i)].sort()},han=function(i,s){const u=s.substr(1).split(":");let d=0,p=[];u.length===1?(d=Number(u[0]),p=[]):(d=Number(u[0]),p=u[1].split(","));const v=p.map(y=>y.trim()),b={section:JD,type:JD,people:v,task:i,score:d};nj.push(b)},fan=function(i){const s={section:JD,type:JD,description:i,task:i,classes:[]};tj.push(s)},PKe=function(){const i=function(u){return nj[u].processed};let s=!0;for(const[u,d]of nj.entries())i(u),s=s&&d.processed;return s},BKe={getConfig:()=>qt().journey,clear:aan,setDiagramTitle:cm,getDiagramTitle:Ap,setAccTitle:Bg,getAccTitle:Cp,setAccDescription:Sp,getAccDescription:_p,addSection:oan,getSections:can,getTasks:uan,addTask:han,addTaskOrg:fan,getActors:function(){return lan()}},dan=i=>`.label { font-family: 'trebuchet ms', verdana, arial, sans-serif; font-family: var(--mermaid-font-family); color: ${i.textColor}; @@ -1330,38 +1596,38 @@ Expecting `+Ft.join(", ")+", got '"+(this.terminals_[Ot]||Ot)+"'":gn="Parse erro .actor-5 { ${i.actor5?`fill: ${i.actor5}`:""}; } -`,Ugt=function(i,a){return JW(i,a)},XUe=function(i,a){const p=i.append("circle").attr("cx",a.cx).attr("cy",a.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),w=i.append("g");w.append("circle").attr("cx",a.cx-15/3).attr("cy",a.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),w.append("circle").attr("cx",a.cx+15/3).attr("cy",a.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function m(_){const A=OA().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);_.append("path").attr("class","mouth").attr("d",A).attr("transform","translate("+a.cx+","+(a.cy+2)+")")}function b(_){const A=OA().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);_.append("path").attr("class","mouth").attr("d",A).attr("transform","translate("+a.cx+","+(a.cy+7)+")")}function E(_){_.append("line").attr("class","mouth").attr("stroke",2).attr("x1",a.cx-5).attr("y1",a.cy+7).attr("x2",a.cx+5).attr("y2",a.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return a.score>3?m(w):a.score<3?b(w):E(w),p},Djt=function(i,a){const f=i.append("circle");return f.attr("cx",a.cx),f.attr("cy",a.cy),f.attr("class","actor-"+a.pos),f.attr("fill",a.fill),f.attr("stroke",a.stroke),f.attr("r",a.r),f.class!==void 0&&f.attr("class",f.class),a.title!==void 0&&f.append("title").text(a.title),f},Ijt=function(i,a){return RDe(i,a)},QUe=function(i,a){function f(w,m,b,E,_){return w+","+m+" "+(w+b)+","+m+" "+(w+b)+","+(m+E-_)+" "+(w+b-_*1.2)+","+(m+E)+" "+w+","+(m+E)}const p=i.append("polygon");p.attr("points",f(a.x,a.y,50,20,7)),p.attr("class","labelBox"),a.y=a.y+a.labelMargin,a.x=a.x+.5*a.labelMargin,Ijt(i,a)},ZUe=function(i,a,f){const p=i.append("g"),w=bT();w.x=a.x,w.y=a.y,w.fill=a.fill,w.width=f.width*a.taskCount+f.diagramMarginX*(a.taskCount-1),w.height=f.height,w.class="journey-section section-type-"+a.num,w.rx=3,w.ry=3,Ugt(p,w),Pjt(f)(a.text,p,w.x,w.y,w.width,w.height,{class:"journey-section section-type-"+a.num},f,a.colour)};let Ojt=-1;const JUe=function(i,a,f){const p=a.x+f.width/2,w=i.append("g");Ojt++;const m=300+5*30;w.append("line").attr("id","task"+Ojt).attr("x1",p).attr("y1",a.y).attr("x2",p).attr("y2",m).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),XUe(w,{cx:p,cy:300+(5-a.score)*30,score:a.score});const b=bT();b.x=a.x,b.y=a.y,b.fill=a.fill,b.width=f.width,b.height=f.height,b.class="task task-type-"+a.num,b.rx=3,b.ry=3,Ugt(w,b);let E=a.x+14;a.people.forEach(_=>{const A=a.actors[_].color,I={cx:E,cy:a.y,r:7,fill:A,stroke:"#000",title:_,pos:a.actors[_].position};Djt(w,I),E+=10}),Pjt(f)(a.task,w,b.x,b.y,b.width,b.height,{class:"task"},f,a.colour)},tWe=function(i,a){mPt(i,a)},Pjt=function(){function i(w,m,b,E,_,A,I,B){const N=m.append("text").attr("x",b+_/2).attr("y",E+A/2+5).style("font-color",B).style("text-anchor","middle").text(w);p(N,I)}function a(w,m,b,E,_,A,I,B,N){const{taskFontSize:R,taskFontFamily:z}=B,W=w.split(//gi);for(let et=0;et{const w=z5[p].color,m={cx:20,cy:f,r:7,fill:w,stroke:"#000",pos:z5[p].position};nN.drawCircle(i,m);const b={x:40,y:f+7,fill:"#666",text:p,textMargin:a.boxTextMargin|5};nN.drawText(i,b),f+=20})}const JY=Oe().journey,MT=JY.leftMargin,rWe=function(i,a,f,p){const w=Oe().journey,m=Oe().securityLevel;let b;m==="sandbox"&&(b=yr("#i"+a));const E=yr(m==="sandbox"?b.nodes()[0].contentDocument.body:"body");aw.init();const _=E.select("#"+a);nN.initGraphics(_);const A=p.db.getTasks(),I=p.db.getDiagramTitle(),B=p.db.getActors();for(const st in z5)delete z5[st];let N=0;B.forEach(st=>{z5[st]={color:w.actorColours[N%w.actorColours.length],position:N},N++}),nWe(_),aw.insert(0,0,MT,Object.keys(z5).length*50),iWe(_,A,0);const R=aw.getBounds();I&&_.append("text").text(I).attr("x",MT).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);const z=R.stopy-R.starty+2*w.diagramMarginY,W=MT+R.stopx+2*w.diagramMarginX;k0(_,z,W,w.useMaxWidth),_.append("line").attr("x1",MT).attr("y1",w.height*4).attr("x2",W-MT-4).attr("y2",w.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");const et=I?70:0;_.attr("viewBox",`${R.startx} -25 ${W} ${z+et}`),_.attr("preserveAspectRatio","xMinYMin meet"),_.attr("height",z+et+25)},aw={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(i,a,f,p){i[a]===void 0?i[a]=f:i[a]=p(f,i[a])},updateBounds:function(i,a,f,p){const w=Oe().journey,m=this;let b=0;function E(_){return function(I){b++;const B=m.sequenceItems.length-b+1;m.updateVal(I,"starty",a-B*w.boxMargin,Math.min),m.updateVal(I,"stopy",p+B*w.boxMargin,Math.max),m.updateVal(aw.data,"startx",i-B*w.boxMargin,Math.min),m.updateVal(aw.data,"stopx",f+B*w.boxMargin,Math.max),_!=="activation"&&(m.updateVal(I,"startx",i-B*w.boxMargin,Math.min),m.updateVal(I,"stopx",f+B*w.boxMargin,Math.max),m.updateVal(aw.data,"starty",a-B*w.boxMargin,Math.min),m.updateVal(aw.data,"stopy",p+B*w.boxMargin,Math.max))}}this.sequenceItems.forEach(E())},insert:function(i,a,f,p){const w=Math.min(i,f),m=Math.max(i,f),b=Math.min(a,p),E=Math.max(a,p);this.updateVal(aw.data,"startx",w,Math.min),this.updateVal(aw.data,"starty",b,Math.min),this.updateVal(aw.data,"stopx",m,Math.max),this.updateVal(aw.data,"stopy",E,Math.max),this.updateBounds(w,b,m,E)},bumpVerticalPos:function(i){this.verticalPos=this.verticalPos+i,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},Wgt=JY.sectionFills,Fjt=JY.sectionColours,iWe=function(i,a,f){const p=Oe().journey;let w="";const m=p.height*2+p.diagramMarginY,b=f+m;let E=0,_="#CCC",A="black",I=0;for(const[B,N]of a.entries()){if(w!==N.section){_=Wgt[E%Wgt.length],I=E%Wgt.length,A=Fjt[E%Fjt.length];let z=0;const W=N.section;for(let st=B;st(z5[W]&&(z[W]=z5[W]),z),{});N.x=B*p.taskMargin+B*p.width+MT,N.y=b,N.width=p.diagramMarginX,N.height=p.diagramMarginY,N.colour=A,N.fill=_,N.num=I,N.actors=R,nN.drawTask(i,N,p),aw.insert(N.x,N.y,N.x+N.width+p.taskMargin,300+5*30)}},Njt={setConf:eWe,draw:rWe},sWe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:zUe,db:Mjt,renderer:Njt,styles:KUe,init:i=>{Njt.setConf(i.journey),Mjt.clear()}}},Symbol.toStringTag,{value:"Module"})),aWe=(i,a,f)=>{const{parentById:p}=f,w=new Set;let m=i;for(;m;){if(w.add(m),m===a)return m;m=p[m]}for(m=a;m;){if(w.has(m))return m;m=p[m]}return"root"};function tK(i){throw new Error('Could not dynamically require "'+i+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var Bjt={exports:{}};(function(i,a){(function(f){i.exports=f()})(function(){return function(){function f(p,w,m){function b(A,I){if(!w[A]){if(!p[A]){var B=typeof tK=="function"&&tK;if(!I&&B)return B(A,!0);if(E)return E(A,!0);var N=new Error("Cannot find module '"+A+"'");throw N.code="MODULE_NOT_FOUND",N}var R=w[A]={exports:{}};p[A][0].call(R.exports,function(z){var W=p[A][1][z];return b(W||z)},R,R.exports,f,p,w,m)}return w[A].exports}for(var E=typeof tK=="function"&&tK,_=0;_0&&arguments[0]!==void 0?arguments[0]:{},N=B.defaultLayoutOptions,R=N===void 0?{}:N,z=B.algorithms,W=z===void 0?["layered","stress","mrtree","radial","force","disco","sporeOverlap","sporeCompaction","rectpacking"]:z,et=B.workerFactory,st=B.workerUrl;if(b(this,A),this.defaultLayoutOptions=R,this.initialized=!1,typeof st>"u"&&typeof et>"u")throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'.");var at=et;typeof st<"u"&&typeof et>"u"&&(at=function(yt){return new Worker(yt)});var bt=at(st);if(typeof bt.postMessage!="function")throw new TypeError("Created worker does not provide the required 'postMessage' function.");this.worker=new _(bt),this.worker.postMessage({cmd:"register",algorithms:W}).then(function(mt){return I.initialized=!0}).catch(console.err)}return m(A,[{key:"layout",value:function(B){var N=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},R=N.layoutOptions,z=R===void 0?this.defaultLayoutOptions:R,W=N.logging,et=W===void 0?!1:W,st=N.measureExecutionTime,at=st===void 0?!1:st;return B?this.worker.postMessage({cmd:"layout",graph:B,layoutOptions:z,options:{logging:et,measureExecutionTime:at}}):Promise.reject(new Error("Missing mandatory parameter 'graph'."))}},{key:"knownLayoutAlgorithms",value:function(){return this.worker.postMessage({cmd:"algorithms"})}},{key:"knownLayoutOptions",value:function(){return this.worker.postMessage({cmd:"options"})}},{key:"knownLayoutCategories",value:function(){return this.worker.postMessage({cmd:"categories"})}},{key:"terminateWorker",value:function(){this.worker.terminate()}}]),A}();w.default=E;var _=function(){function A(I){var B=this;if(b(this,A),I===void 0)throw new Error("Missing mandatory parameter 'worker'.");this.resolvers={},this.worker=I,this.worker.onmessage=function(N){setTimeout(function(){B.receive(B,N)},0)}}return m(A,[{key:"postMessage",value:function(B){var N=this.id||0;this.id=N+1,B.id=N;var R=this;return new Promise(function(z,W){R.resolvers[N]=function(et,st){et?(R.convertGwtStyleError(et),W(et)):z(st)},R.worker.postMessage(B)})}},{key:"receive",value:function(B,N){var R=N.data,z=B.resolvers[R.id];z&&(delete B.resolvers[R.id],R.error?z(R.error):z(null,R.data))}},{key:"terminate",value:function(){this.worker.terminate&&this.worker.terminate()}},{key:"convertGwtStyleError",value:function(B){if(B){var N=B.__java$exception;N&&(N.cause&&N.cause.backingJsObject&&(B.cause=N.cause.backingJsObject,this.convertGwtStyleError(B.cause)),delete B.__java$exception)}}}]),A}()},{}],2:[function(f,p,w){(function(m){(function(){var b;typeof window<"u"?b=window:typeof m<"u"?b=m:typeof self<"u"&&(b=self);var E;function _(){}function A(){}function I(){}function B(){}function N(){}function R(){}function z(){}function W(){}function et(){}function st(){}function at(){}function bt(){}function mt(){}function yt(){}function ft(){}function ut(){}function vt(){}function X(){}function pt(){}function U(){}function Tt(){}function nt(){}function It(){}function Ot(){}function Bt(){}function Et(){}function Z(){}function Ct(){}function xt(){}function Ht(){}function Le(){}function Ft(){}function gn(){}function Se(){}function me(){}function Ve(){}function Ye(){}function ce(){}function ke(){}function zt(){}function re(){}function se(){}function Pe(){}function te(){}function Me(){}function de(){}function on(){}function ni(){}function Ks(){}function ws(){}function fo(){}function Xi(){}function Er(){}function Xn(){}function di(){}function Ee(){}function Kn(){}function He(){}function Ti(){}function pn(){}function Es(){}function qa(){}function Ma(){}function Gs(){}function Po(){}function vs(){}function ru(){}function zs(){}function Du(){}function pm(){}function uw(){}function Wu(){}function th(){}function Fa(){}function Ml(){}function ha(){}function bc(){}function Cc(){}function pa(){}function Da(){}function Ha(){}function Dl(){}function _c(){}function lw(){}function eh(){}function ed(){}function jd(){}function nd(){}function $d(){}function A0(){}function Bi(){}function cn(){}function kr(){}function Ei(){}function Jo(){}function wc(){}function rf(){}function Oc(){}function sf(){}function af(){}function Qi(){}function Ts(){}function ka(){}function xi(){}function Yc(){}function Ce(){}function vp(){}function Be(){}function Bf(){}function yg(){}function bm(){}function Ek(){}function E3(){}function Il(){}function L0(){}function hw(){}function H5(){}function Hb(){}function V5(){}function f1(){}function rd(){}function id(){}function G5(){}function fw(){}function U5(){}function mp(){}function W5(){}function T3(){}function wm(){}function xg(){}function EL(){}function vl(){}function iN(){}function Sc(){}function cK(){}function Vb(){}function uK(){}function PT(){}function lK(){}function sN(){}function Rf(){}function vm(){}function TL(){}function aN(){}function yp(){}function mm(){}function hK(){}function Gb(){}function fK(){}function dK(){}function Y5(){}function FT(){}function oN(){}function Tk(){}function gK(){}function Ck(){}function pK(){}function bK(){}function wK(){}function vK(){}function mK(){}function yK(){}function xK(){}function kK(){}function EK(){}function TK(){}function CK(){}function CL(){}function _K(){}function SK(){}function NT(){}function cN(){}function K5(){}function AK(){}function LK(){}function MK(){}function DK(){}function IK(){}function BT(){}function _L(){}function uN(){}function C3(){}function _3(){}function OK(){}function of(){}function X5(){}function PK(){}function _k(){}function zd(){}function FK(){}function NK(){}function BK(){}function RK(){}function RT(){}function SL(){}function lN(){}function AL(){}function Q5(){}function jK(){}function hN(){}function fN(){}function $K(){}function zK(){}function qK(){}function HK(){}function VK(){}function GK(){}function qd(){}function dw(){}function UK(){}function dN(){}function gN(){}function WK(){}function S3(){}function Sk(){}function LL(){}function ym(){}function Ak(){}function YK(){}function jT(){}function sd(){}function pN(){}function ML(){}function Lk(){}function DL(){}function bN(){}function KK(){}function IL(){}function XK(){}function QK(){}function wN(){}function Z5(){}function vN(){}function J5(){}function ZK(){}function OL(){}function JK(){}function tX(){}function eX(){}function nX(){}function mN(){}function rX(){}function iX(){}function sX(){}function yN(){}function aX(){}function oX(){}function cX(){}function xN(){}function uX(){}function lX(){}function kN(){}function EN(){}function TN(){}function hX(){}function fX(){}function Mk(){}function tx(){}function $T(){}function dX(){}function PL(){}function zT(){}function FL(){}function CN(){}function _N(){}function gX(){}function pX(){}function bX(){}function SN(){}function AN(){}function wX(){}function vX(){}function mX(){}function yX(){}function xX(){}function LN(){}function kX(){}function EX(){}function TX(){}function CX(){}function MN(){}function qT(){}function _X(){}function SX(){}function DN(){}function AX(){}function LX(){}function MX(){}function DX(){}function IX(){}function OX(){}function IN(){}function PX(){}function ON(){}function FX(){}function NX(){}function BX(){}function HT(){}function RX(){}function VT(){}function jX(){}function PN(){}function FN(){}function NN(){}function BN(){}function gw(){}function RN(){}function jN(){}function $N(){}function zN(){}function $X(){}function ex(){}function GT(){}function A3(){}function zX(){}function qX(){}function UT(){}function HX(){}function VX(){}function GX(){}function UX(){}function WX(){}function YX(){}function KX(){}function XX(){}function QX(){}function ZX(){}function JX(){}function NL(){}function qN(){}function tQ(){}function eQ(){}function nQ(){}function HN(){}function rQ(){}function iQ(){}function sQ(){}function aQ(){}function oQ(){}function cQ(){}function VN(){}function GN(){}function uQ(){}function UN(){}function WN(){}function lQ(){}function hQ(){}function fQ(){}function BL(){}function dQ(){}function Dk(){}function gQ(){}function pQ(){}function bQ(){}function YN(){}function wQ(){}function vQ(){}function mQ(){}function yQ(){}function xQ(){}function kQ(){}function EQ(){}function TQ(){}function CQ(){}function _Q(){}function SQ(){}function AQ(){}function nx(){}function KN(){}function LQ(){}function MQ(){}function DQ(){}function XN(){}function IQ(){}function WT(){}function OQ(){}function PQ(){}function FQ(){}function NQ(){}function BQ(){}function RQ(){}function jQ(){}function $Q(){}function zQ(){}function qQ(){}function rx(){}function HQ(){}function VQ(){}function GQ(){}function UQ(){}function WQ(){}function YQ(){}function KQ(){}function XQ(){}function YT(){}function QQ(){}function ZQ(){}function JQ(){}function tZ(){}function eZ(){}function nZ(){}function rZ(){}function iZ(){}function ix(){}function QN(){}function sZ(){}function RL(){}function aZ(){}function oZ(){}function cZ(){}function uZ(){}function lZ(){}function hZ(){}function fZ(){}function ZN(){}function dZ(){}function JN(){}function gZ(){}function tB(){}function eB(){}function nB(){}function pZ(){}function bZ(){}function KT(){}function jL(){}function XT(){}function wZ(){}function vZ(){}function $L(){}function mZ(){}function yZ(){}function rB(){}function xZ(){}function kZ(){}function EZ(){}function TZ(){}function CZ(){}function _Z(){}function SZ(){}function AZ(){}function LZ(){}function MZ(){}function kg(){}function DZ(){}function xm(){}function iB(){}function IZ(){}function OZ(){}function PZ(){}function FZ(){}function NZ(){}function BZ(){}function RZ(){}function jZ(){}function $Z(){}function Ac(){}function zZ(){}function QT(){}function tc(){}function Kc(){}function zi(){}function zL(){}function qZ(){}function HZ(){}function VZ(){}function sx(){}function km(){}function Ue(){}function GZ(){}function UZ(){}function WZ(){}function YZ(){}function KZ(){}function sB(){}function XZ(){}function QZ(){}function qL(){}function ZZ(){}function Yu(){}function Iu(){}function JZ(){}function tJ(){}function eJ(){}function Em(){}function pw(){}function xp(){}function ad(){}function ax(){}function ZT(){}function Ik(){}function aB(){}function nJ(){}function Ok(){}function oB(){}function rJ(){}function JT(){}function ox(){}function cx(){}function kp(){}function cB(){}function Pk(){}function uB(){}function lB(){}function ux(){}function Ub(){}function M0(){}function Ep(){}function L3(){}function Fk(){}function tC(){}function hB(){}function iJ(){}function fB(){}function dB(){}function gB(){}function Nk(){}function pB(){}function bB(){}function sJ(){}function Bk(){}function Rk(){}function Tm(){}function HL(){}function aJ(){}function oJ(){}function cJ(){}function uJ(){}function lJ(){}function hJ(){}function fJ(){}function dJ(){}function wB(){}function gJ(){}function pJ(){}function bJ(){}function vB(){}function jk(){}function eC(){}function mB(){}function wJ(){}function yB(){}function xB(){}function vJ(){}function nC(){}function Cm(){}function kB(){}function EB(){}function mJ(){}function yJ(){}function rC(){}function TB(){}function CB(){}function uc(){}function xJ(){}function _B(){}function iC(){}function kJ(){}function EJ(){}function sC(){}function SB(){}function aC(){}function oC(){}function jf(){}function VL(){}function GL(){}function lx(){}function TJ(){}function CJ(){}function _J(){}function SJ(){}function _m(){}function AB(){}function hx(){}function d1(){}function LB(){}function MB(){}function DB(){}function IB(){}function OB(){}function PB(){}function $f(){}function du(){}function AJ(){}function LJ(){}function MJ(){}function gu(){}function cC(){}function FB(){}function NB(){}function fx(){}function DJ(){}function $k(){}function IJ(){}function BB(){}function OJ(){}function PJ(){}function uC(){}function RB(){}function UL(){}function lC(){}function FJ(){}function NJ(){}function WL(){}function hC(){}function g1(){}function zk(){}function BJ(){}function qk(){}function YL(){}function Wb(){}function fC(){}function KL(){}function zf(){}function dC(){}function p1(){}function b1(){}function RJ(){}function jJ(){}function M3(){}function Hk(){}function Vk(){}function gC(){}function $J(){}function dx(){}function XL(){}function jB(){}function zJ(){}function pC(){PC()}function qJ(){Rit()}function $B(){o_()}function QL(){sq()}function HJ(){q4t()}function bC(){Jf()}function VJ(){J3t()}function GJ(){iI()}function UJ(){EM()}function WJ(){kM()}function YJ(){KM()}function zB(){BVt()}function KJ(){r6()}function XJ(){$R()}function QJ(){YJt()}function qB(){one()}function ZJ(){_te()}function JJ(){HQt()}function wC(){oE()}function ttt(){nb()}function ett(){cne()}function ntt(){NZt()}function rtt(){Fxt()}function itt(){Kse()}function stt(){VQt()}function HB(){Te()}function att(){qQt()}function VB(){une()}function ott(){fre()}function ZL(){UQt()}function ctt(){Dte()}function GB(){RVt()}function utt(){E5t()}function UB(){uy()}function ltt(){Nne()}function WB(){cI()}function YB(){dat()}function KB(){yst()}function JL(){gv()}function D3(){myt()}function vC(){GQt()}function od(){rle()}function XB(){y5t()}function Gk(){sat()}function tM(){V$()}function htt(){fq()}function Tp(){ui()}function QB(){Sz()}function ZB(){S3t()}function JB(){Dq()}function nh(){IYt()}function eM(){kit()}function tR(){oxt()}function Uk(t){On(t)}function mC(t){this.a=t}function Wk(t){this.a=t}function eR(t){this.a=t}function gx(t){this.a=t}function bw(t){this.a=t}function Yk(t){this.a=t}function nR(t){this.a=t}function ftt(t){this.a=t}function nM(t){this.a=t}function I3(t){this.a=t}function rM(t){this.a=t}function yC(t){this.a=t}function dtt(t){this.a=t}function xC(t){this.a=t}function kC(t){this.a=t}function px(t){this.a=t}function iM(t){this.a=t}function sM(t){this.a=t}function gtt(t){this.a=t}function ptt(t){this.a=t}function btt(t){this.a=t}function rR(t){this.b=t}function wtt(t){this.c=t}function vtt(t){this.a=t}function mtt(t){this.a=t}function ytt(t){this.a=t}function xtt(t){this.a=t}function ktt(t){this.a=t}function Ett(t){this.a=t}function Ttt(t){this.a=t}function Ctt(t){this.a=t}function bx(t){this.a=t}function _tt(t){this.a=t}function Kk(t){this.a=t}function Th(t){this.a=t}function Stt(t){this.a=t}function wx(t){this.a=t}function Xk(t){this.a=t}function EC(t){this.a=t}function Qk(t){this.a=t}function Eg(){this.a=[]}function Att(t,e){t.a=e}function cpt(t,e){t.a=e}function upt(t,e){t.b=e}function lpt(t,e){t.b=e}function hpt(t,e){t.b=e}function aM(t,e){t.j=e}function fpt(t,e){t.g=e}function dpt(t,e){t.i=e}function Ltt(t,e){t.c=e}function w1(t,e){t.d=e}function Mtt(t,e){t.d=e}function gpt(t,e){t.c=e}function D0(t,e){t.k=e}function Dtt(t,e){t.c=e}function iR(t,e){t.c=e}function sR(t,e){t.a=e}function Itt(t,e){t.a=e}function ppt(t,e){t.f=e}function bpt(t,e){t.a=e}function ww(t,e){t.b=e}function oM(t,e){t.d=e}function TC(t,e){t.i=e}function aR(t,e){t.o=e}function wpt(t,e){t.r=e}function vpt(t,e){t.a=e}function oR(t,e){t.b=e}function vw(t,e){t.e=e}function Ott(t,e){t.f=e}function CC(t,e){t.g=e}function vx(t,e){t.e=e}function mpt(t,e){t.f=e}function Zk(t,e){t.f=e}function Ptt(t,e){t.n=e}function Tg(t,e){t.a=e}function ypt(t,e){t.a=e}function O3(t,e){t.c=e}function Ftt(t,e){t.c=e}function Ntt(t,e){t.d=e}function cR(t,e){t.e=e}function uR(t,e){t.g=e}function Btt(t,e){t.a=e}function Jk(t,e){t.c=e}function _C(t,e){t.d=e}function xpt(t,e){t.e=e}function Rtt(t,e){t.f=e}function jtt(t,e){t.j=e}function $tt(t,e){t.a=e}function kpt(t,e){t.b=e}function vc(t,e){t.a=e}function lR(t){t.b=t.a}function ztt(t){t.c=t.d.d}function mx(t){this.d=t}function Cg(t){this.a=t}function Sm(t){this.a=t}function cM(t){this.a=t}function v1(t){this.a=t}function yx(t){this.a=t}function qtt(t){this.a=t}function hR(t){this.a=t}function P3(t){this.a=t}function uM(t){this.a=t}function Am(t){this.a=t}function fR(t){this.a=t}function m1(t){this.a=t}function y(t){this.a=t}function g(t){this.a=t}function x(t){this.b=t}function T(t){this.b=t}function L(t){this.b=t}function O(t){this.a=t}function P(t){this.a=t}function $(t){this.a=t}function q(t){this.c=t}function S(t){this.c=t}function V(t){this.c=t}function Y(t){this.a=t}function rt(t){this.a=t}function ot(t){this.a=t}function ht(t){this.a=t}function dt(t){this.a=t}function Lt(t){this.a=t}function kt(t){this.a=t}function Dt(t){this.a=t}function Pt(t){this.a=t}function $t(t){this.a=t}function Zt(t){this.a=t}function Yt(t){this.a=t}function qt(t){this.a=t}function ne(t){this.a=t}function Gt(t){this.a=t}function ge(t){this.a=t}function be(t){this.a=t}function ie(t){this.a=t}function Fe(t){this.a=t}function we(t){this.a=t}function bn(t){this.a=t}function ze(t){this.a=t}function Ge(t){this.a=t}function En(t){this.a=t}function In(t){this.a=t}function Yn(t){this.a=t}function Sn(t){this.a=t}function Wn(t){this.a=t}function rr(t){this.a=t}function wr(t){this.a=t}function ur(t){this.a=t}function er(t){this.a=t}function vn(t){this.a=t}function gr(t){this.a=t}function fr(t){this.a=t}function Jr(t){this.a=t}function vi(t){this.a=t}function Xs(t){this.a=t}function Ea(t){this.a=t}function Ci(t){this.a=t}function hi(t){this.a=t}function gs(t){this.a=t}function qi(t){this.a=t}function Si(t){this.a=t}function Ui(t){this.a=t}function Va(t){this.e=t}function Qs(t){this.a=t}function qs(t){this.a=t}function Tr(t){this.a=t}function Qt(t){this.a=t}function jn(t){this.a=t}function Sr(t){this.a=t}function ir(t){this.a=t}function sr(t){this.a=t}function Ia(t){this.a=t}function $r(t){this.a=t}function Yi(t){this.a=t}function Fo(t){this.a=t}function Pc(t){this.a=t}function Za(t){this.a=t}function mc(t){this.a=t}function Ta(t){this.a=t}function Ja(t){this.a=t}function ml(t){this.a=t}function qf(t){this.a=t}function Cp(t){this.a=t}function _p(t){this.a=t}function Hf(t){this.a=t}function _g(t){this.a=t}function cd(t){this.a=t}function mw(t){this.a=t}function Lm(t){this.a=t}function xx(t){this.a=t}function F3(t){this.a=t}function kx(t){this.a=t}function SC(t){this.a=t}function N3(t){this.a=t}function Hd(t){this.a=t}function y1(t){this.a=t}function Vd(t){this.a=t}function AC(t){this.a=t}function Yb(t){this.a=t}function dR(t){this.a=t}function Htt(t){this.a=t}function Vtt(t){this.a=t}function Gtt(t){this.a=t}function Utt(t){this.a=t}function Wtt(t){this.a=t}function Ytt(t){this.a=t}function Ktt(t){this.a=t}function t8(t){this.a=t}function lM(t){this.a=t}function LC(t){this.a=t}function gR(t){this.a=t}function pR(t){this.a=t}function Xtt(t){this.a=t}function Sp(t){this.a=t}function hM(t){this.a=t}function bR(t){this.a=t}function e8(t){this.c=t}function Ap(t){this.b=t}function Qtt(t){this.a=t}function S$t(t){this.a=t}function A$t(t){this.a=t}function L$t(t){this.a=t}function M$t(t){this.a=t}function D$t(t){this.a=t}function I$t(t){this.a=t}function O$t(t){this.a=t}function P$t(t){this.a=t}function F$t(t){this.a=t}function N$t(t){this.a=t}function B$t(t){this.a=t}function R$t(t){this.a=t}function j$t(t){this.a=t}function $$t(t){this.a=t}function z$t(t){this.a=t}function q$t(t){this.a=t}function H$t(t){this.a=t}function V$t(t){this.a=t}function G$t(t){this.a=t}function U$t(t){this.a=t}function W$t(t){this.a=t}function Y$t(t){this.a=t}function K$t(t){this.a=t}function Lp(t){this.a=t}function Ex(t){this.a=t}function X$t(t){this.a=t}function Q$t(t){this.a=t}function Z$t(t){this.a=t}function J$t(t){this.a=t}function tzt(t){this.a=t}function ezt(t){this.a=t}function nzt(t){this.a=t}function rzt(t){this.a=t}function izt(t){this.a=t}function szt(t){this.a=t}function azt(t){this.a=t}function ozt(t){this.a=t}function czt(t){this.a=t}function uzt(t){this.a=t}function lzt(t){this.a=t}function hzt(t){this.a=t}function wR(t){this.a=t}function fzt(t){this.a=t}function dzt(t){this.a=t}function gzt(t){this.a=t}function pzt(t){this.a=t}function bzt(t){this.a=t}function wzt(t){this.a=t}function vzt(t){this.a=t}function mzt(t){this.a=t}function yzt(t){this.a=t}function xzt(t){this.a=t}function kzt(t){this.a=t}function Ezt(t){this.a=t}function Tzt(t){this.a=t}function Czt(t){this.a=t}function _zt(t){this.a=t}function Szt(t){this.a=t}function Azt(t){this.a=t}function Lzt(t){this.a=t}function Mzt(t){this.a=t}function Dzt(t){this.a=t}function Izt(t){this.a=t}function Ozt(t){this.a=t}function Pzt(t){this.a=t}function Fzt(t){this.a=t}function Nzt(t){this.a=t}function Bzt(t){this.a=t}function Rzt(t){this.a=t}function jzt(t){this.a=t}function Ept(t){this.a=t}function Vi(t){this.b=t}function $zt(t){this.f=t}function Tpt(t){this.a=t}function zzt(t){this.a=t}function qzt(t){this.a=t}function Hzt(t){this.a=t}function Vzt(t){this.a=t}function Gzt(t){this.a=t}function Uzt(t){this.a=t}function Wzt(t){this.a=t}function Yzt(t){this.a=t}function fM(t){this.a=t}function Kzt(t){this.a=t}function Xzt(t){this.b=t}function Cpt(t){this.c=t}function vR(t){this.e=t}function Qzt(t){this.a=t}function mR(t){this.a=t}function yR(t){this.a=t}function Ztt(t){this.a=t}function Zzt(t){this.a=t}function Jzt(t){this.d=t}function _pt(t){this.a=t}function Spt(t){this.a=t}function yw(t){this.e=t}function WYe(){this.a=0}function B3(){IUt(this)}function he(){ant(this)}function _r(){Xu(this)}function Jtt(){NXt(this)}function tqt(){}function xw(){this.c=oLt}function YYe(t,e){e.Wb(t)}function eqt(t,e){t.b+=e}function nqt(t){t.b=new wet}function it(t){return t.e}function KYe(t){return t.a}function XYe(t){return t.a}function QYe(t){return t.a}function ZYe(t){return t.a}function JYe(t){return t.a}function tKe(){return null}function eKe(){return null}function nKe(){dbt(),dxn()}function rKe(t){t.b.tf(t.e)}function MC(t,e){t.b=e-t.b}function DC(t,e){t.a=e-t.a}function rqt(t,e){e.ad(t.a)}function iKe(t,e){Bs(e,t)}function sKe(t,e,n){t.Od(n,e)}function dM(t,e){t.e=e,e.b=t}function Apt(t){gd(),this.a=t}function iqt(t){gd(),this.a=t}function sqt(t){gd(),this.a=t}function Lpt(t){Wm(),this.a=t}function aqt(t){I8(),Out.be(t)}function Kb(){pWt.call(this)}function Mpt(){pWt.call(this)}function Dpt(){Kb.call(this)}function tet(){Kb.call(this)}function oqt(){Kb.call(this)}function gM(){Kb.call(this)}function Ou(){Kb.call(this)}function IC(){Kb.call(this)}function Or(){Kb.call(this)}function rh(){Kb.call(this)}function cqt(){Kb.call(this)}function lc(){Kb.call(this)}function uqt(){Kb.call(this)}function lqt(){this.a=this}function xR(){this.Bb|=256}function hqt(){this.b=new dUt}function Ipt(){Ipt=Z,new _r}function Opt(){Dpt.call(this)}function fqt(t,e){t.length=e}function kR(t,e){le(t.a,e)}function aKe(t,e){V4t(t.c,e)}function oKe(t,e){Fs(t.b,e)}function cKe(t,e){Jz(t.a,e)}function uKe(t,e){Wit(t.a,e)}function n8(t,e){mi(t.e,e)}function Tx(t){pq(t.c,t.b)}function lKe(t,e){t.kc().Nb(e)}function Ppt(t){this.a=chn(t)}function Hs(){this.a=new _r}function dqt(){this.a=new _r}function ER(){this.a=new he}function eet(){this.a=new he}function Fpt(){this.a=new he}function Ch(){this.a=new uw}function Xb(){this.a=new VJt}function Npt(){this.a=new H5}function Bpt(){this.a=new LVt}function gqt(){this.a=new wZt}function Rpt(){this.a=new OQt}function jpt(){this.a=new rYt}function pqt(){this.a=new he}function $pt(){this.a=new he}function bqt(){this.a=new he}function wqt(){this.a=new he}function vqt(){this.d=new he}function mqt(){this.a=new Hs}function yqt(){this.a=new _r}function xqt(){this.b=new _r}function kqt(){this.b=new he}function zpt(){this.e=new he}function Eqt(){this.d=new he}function Tqt(){this.a=new ttt}function Cqt(){he.call(this)}function qpt(){ER.call(this)}function _qt(){Ij.call(this)}function Sqt(){$pt.call(this)}function net(){OC.call(this)}function OC(){tqt.call(this)}function Cx(){tqt.call(this)}function Hpt(){Cx.call(this)}function Aqt(){lQt.call(this)}function Lqt(){lQt.call(this)}function Mqt(){Xpt.call(this)}function Dqt(){Xpt.call(this)}function Iqt(){Xpt.call(this)}function Oqt(){Qpt.call(this)}function Pu(){Zi.call(this)}function Vpt(){Em.call(this)}function Gpt(){Em.call(this)}function Pqt(){Xqt.call(this)}function Fqt(){Xqt.call(this)}function Nqt(){_r.call(this)}function Bqt(){_r.call(this)}function Rqt(){_r.call(this)}function jqt(){Hs.call(this)}function ret(){ine.call(this)}function $qt(){xR.call(this)}function iet(){x2t.call(this)}function set(){x2t.call(this)}function Upt(){_r.call(this)}function aet(){_r.call(this)}function zqt(){_r.call(this)}function Wpt(){Pk.call(this)}function qqt(){Pk.call(this)}function Hqt(){Wpt.call(this)}function Vqt(){XL.call(this)}function Gqt(t){Lee.call(this,t)}function Uqt(t){Lee.call(this,t)}function Ypt(t){nM.call(this,t)}function Kpt(t){mVt.call(this,t)}function hKe(t){Kpt.call(this,t)}function fKe(t){mVt.call(this,t)}function r8(){this.a=new Zi}function Xpt(){this.a=new Hs}function Qpt(){this.a=new _r}function Wqt(){this.a=new he}function Yqt(){this.j=new he}function Zpt(){this.a=new nB}function Kqt(){this.a=new VHt}function Xqt(){this.a=new cB}function oet(){oet=Z,Sut=new gHt}function cet(){cet=Z,_ut=new dHt}function PC(){PC=Z,Cut=new A}function TR(){TR=Z,Mut=new dWt}function dKe(t){Kpt.call(this,t)}function gKe(t){Kpt.call(this,t)}function Qqt(t){$rt.call(this,t)}function Zqt(t){$rt.call(this,t)}function Jqt(t){CYt.call(this,t)}function uet(t){Pgn.call(this,t)}function kw(t){Om.call(this,t)}function FC(t){NR.call(this,t)}function Jpt(t){NR.call(this,t)}function tHt(t){NR.call(this,t)}function Vo(t){jKt.call(this,t)}function eHt(t){Vo.call(this,t)}function _x(){Qk.call(this,{})}function CR(t){w8(),this.a=t}function NC(t){t.b=null,t.c=0}function pKe(t,e){t.e=e,nue(t,e)}function bKe(t,e){t.a=e,ypn(t)}function het(t,e,n){t.a[e.g]=n}function wKe(t,e,n){Ndn(n,t,e)}function vKe(t,e){HZe(e.i,t.n)}function nHt(t,e){Vun(t).td(e)}function mKe(t,e){return t*t/e}function rHt(t,e){return t.g-e.g}function yKe(t){return new EC(t)}function xKe(t){return new Um(t)}function _R(t){Vo.call(this,t)}function yo(t){Vo.call(this,t)}function iHt(t){Vo.call(this,t)}function fet(t){jKt.call(this,t)}function det(t){wyt(),this.a=t}function sHt(t){DYt(),this.a=t}function Mm(t){Vnt(),this.f=t}function get(t){Vnt(),this.f=t}function i8(t){Vo.call(this,t)}function Fn(t){Vo.call(this,t)}function No(t){Vo.call(this,t)}function aHt(t){Vo.call(this,t)}function Sx(t){Vo.call(this,t)}function je(t){return On(t),t}function Xt(t){return On(t),t}function pM(t){return On(t),t}function tbt(t){return On(t),t}function kKe(t){return On(t),t}function BC(t){return t.b==t.c}function Dm(t){return!!t&&t.b}function EKe(t){return!!t&&t.k}function TKe(t){return!!t&&t.j}function yl(t){On(t),this.a=t}function ebt(t){return g2(t),t}function RC(t){dvt(t,t.length)}function Sg(t){Vo.call(this,t)}function ud(t){Vo.call(this,t)}function pet(t){Vo.call(this,t)}function R3(t){Vo.call(this,t)}function jC(t){Vo.call(this,t)}function Nr(t){Vo.call(this,t)}function bet(t){j2t.call(this,t,0)}function wet(){Wvt.call(this,12,3)}function nbt(){nbt=Z,rEt=new pt}function oHt(){oHt=Z,nEt=new _}function SR(){SR=Z,cS=new mt}function cHt(){cHt=Z,Bge=new ft}function uHt(){throw it(new Or)}function rbt(){throw it(new Or)}function lHt(){throw it(new Or)}function CKe(){throw it(new Or)}function _Ke(){throw it(new Or)}function SKe(){throw it(new Or)}function vet(){this.a=Br(Lr(Ya))}function Ax(t){gd(),this.a=Lr(t)}function hHt(t,e){t.Td(e),e.Sd(t)}function AKe(t,e){t.a.ec().Mc(e)}function LKe(t,e,n){t.c.lf(e,n)}function ibt(t){yo.call(this,t)}function ld(t){Fn.call(this,t)}function Ag(){yx.call(this,"")}function $C(){yx.call(this,"")}function Mp(){yx.call(this,"")}function Im(){yx.call(this,"")}function sbt(t){yo.call(this,t)}function s8(t){T.call(this,t)}function met(t){Ej.call(this,t)}function fHt(t){s8.call(this,t)}function dHt(){xC.call(this,null)}function gHt(){xC.call(this,null)}function AR(){AR=Z,I8()}function pHt(){pHt=Z,Wge=u0n()}function bHt(t){return t.a?t.b:0}function MKe(t){return t.a?t.b:0}function DKe(t,e){return t.a-e.a}function IKe(t,e){return t.a-e.a}function OKe(t,e){return t.a-e.a}function LR(t,e){return Bmt(t,e)}function ct(t,e){return NQt(t,e)}function PKe(t,e){return e in t.a}function wHt(t,e){return t.f=e,t}function FKe(t,e){return t.b=e,t}function vHt(t,e){return t.c=e,t}function NKe(t,e){return t.g=e,t}function abt(t,e){return t.a=e,t}function obt(t,e){return t.f=e,t}function BKe(t,e){return t.k=e,t}function cbt(t,e){return t.a=e,t}function RKe(t,e){return t.e=e,t}function ubt(t,e){return t.e=e,t}function jKe(t,e){return t.f=e,t}function $Ke(t,e){t.b=!0,t.d=e}function zKe(t,e){t.b=new xo(e)}function qKe(t,e,n){e.td(t.a[n])}function HKe(t,e,n){e.we(t.a[n])}function VKe(t,e){return t.b-e.b}function GKe(t,e){return t.g-e.g}function UKe(t,e){return t.s-e.s}function WKe(t,e){return t?0:e-1}function mHt(t,e){return t?0:e-1}function YKe(t,e){return t?e-1:0}function KKe(t,e){return e.Yf(t)}function Ew(t,e){return t.b=e,t}function MR(t,e){return t.a=e,t}function Tw(t,e){return t.c=e,t}function Cw(t,e){return t.d=e,t}function _w(t,e){return t.e=e,t}function lbt(t,e){return t.f=e,t}function zC(t,e){return t.a=e,t}function a8(t,e){return t.b=e,t}function o8(t,e){return t.c=e,t}function Ze(t,e){return t.c=e,t}function kn(t,e){return t.b=e,t}function Je(t,e){return t.d=e,t}function tn(t,e){return t.e=e,t}function XKe(t,e){return t.f=e,t}function en(t,e){return t.g=e,t}function nn(t,e){return t.a=e,t}function rn(t,e){return t.i=e,t}function sn(t,e){return t.j=e,t}function yHt(t,e){return t.k=e,t}function QKe(t,e){return t.j=e,t}function ZKe(t,e){nb(),Uo(e,t)}function JKe(t,e,n){Wen(t.a,e,n)}function xHt(t){RXt.call(this,t)}function hbt(t){RXt.call(this,t)}function DR(t){Snt.call(this,t)}function kHt(t){bhn.call(this,t)}function Dp(t){Qw.call(this,t)}function EHt(t){prt.call(this,t)}function THt(t){prt.call(this,t)}function CHt(){b2t.call(this,"")}function Ca(){this.a=0,this.b=0}function _Ht(){this.b=0,this.a=0}function SHt(t,e){t.b=0,ry(t,e)}function tXe(t,e){t.c=e,t.b=!0}function AHt(t,e){return t.c._b(e)}function Vf(t){return t.e&&t.e()}function yet(t){return t?t.d:null}function LHt(t,e){return eie(t.b,e)}function eXe(t){return t?t.g:null}function nXe(t){return t?t.i:null}function Ip(t){return P0(t),t.o}function Sw(){Sw=Z,G4e=ydn()}function MHt(){MHt=Z,na=I0n()}function c8(){c8=Z,aLt=kdn()}function DHt(){DHt=Z,L5e=xdn()}function fbt(){fbt=Z,pc=wpn()}function dbt(){dbt=Z,Ab=K8()}function IHt(){throw it(new Or)}function OHt(){throw it(new Or)}function PHt(){throw it(new Or)}function FHt(){throw it(new Or)}function NHt(){throw it(new Or)}function BHt(){throw it(new Or)}function IR(t){this.a=new Lx(t)}function gbt(t){Ihe(),_xn(this,t)}function Op(t){this.a=new Ynt(t)}function j3(t,e){for(;t.ye(e););}function pbt(t,e){for(;t.sd(e););}function $3(t,e){return t.a+=e,t}function xet(t,e){return t.a+=e,t}function Lg(t,e){return t.a+=e,t}function Aw(t,e){return t.a+=e,t}function qC(t){return Vp(t),t.a}function OR(t){return t.b!=t.d.c}function RHt(t){return t.l|t.m<<22}function bbt(t,e){return t.d[e.p]}function jHt(t,e){return avn(t,e)}function wbt(t,e,n){t.splice(e,n)}function $Ht(t){t.c?Eue(t):Tue(t)}function PR(t){this.a=0,this.b=t}function zHt(){this.a=new vI(m_t)}function qHt(){this.b=new vI(s_t)}function HHt(){this.b=new vI(Zht)}function VHt(){this.b=new vI(Zht)}function GHt(){throw it(new Or)}function UHt(){throw it(new Or)}function WHt(){throw it(new Or)}function YHt(){throw it(new Or)}function KHt(){throw it(new Or)}function XHt(){throw it(new Or)}function QHt(){throw it(new Or)}function ZHt(){throw it(new Or)}function JHt(){throw it(new Or)}function tVt(){throw it(new Or)}function rXe(){throw it(new lc)}function iXe(){throw it(new lc)}function bM(t){this.a=new eVt(t)}function eVt(t){pcn(this,t,p0n())}function wM(t){return!t||kXt(t)}function vM(t){return Y1[t]!=-1}function sXe(){ZH!=0&&(ZH=0),JH=-1}function nVt(){Tut==null&&(Tut=[])}function aXe(t,e){tat(Wt(t.a),e)}function oXe(t,e){tat(Wt(t.a),e)}function mM(t,e){K3.call(this,t,e)}function u8(t,e){mM.call(this,t,e)}function vbt(t,e){this.b=t,this.c=e}function rVt(t,e){this.b=t,this.a=e}function iVt(t,e){this.a=t,this.b=e}function sVt(t,e){this.a=t,this.b=e}function aVt(t,e){this.a=t,this.b=e}function oVt(t,e){this.a=t,this.b=e}function cVt(t,e){this.a=t,this.b=e}function uVt(t,e){this.a=t,this.b=e}function lVt(t,e){this.a=t,this.b=e}function hVt(t,e){this.a=t,this.b=e}function fVt(t,e){this.b=t,this.a=e}function dVt(t,e){this.b=t,this.a=e}function gVt(t,e){this.b=t,this.a=e}function pVt(t,e){this.b=t,this.a=e}function Vr(t,e){this.f=t,this.g=e}function l8(t,e){this.e=t,this.d=e}function Lw(t,e){this.g=t,this.i=e}function ket(t,e){this.a=t,this.b=e}function bVt(t,e){this.a=t,this.f=e}function wVt(t,e){this.b=t,this.c=e}function cXe(t,e){this.a=t,this.b=e}function vVt(t,e){this.a=t,this.b=e}function Eet(t,e){this.a=t,this.b=e}function mVt(t){A2t(t.dc()),this.c=t}function FR(t){this.b=u(Lr(t),83)}function yVt(t){this.a=u(Lr(t),83)}function Om(t){this.a=u(Lr(t),15)}function xVt(t){this.a=u(Lr(t),15)}function NR(t){this.b=u(Lr(t),47)}function BR(){this.q=new b.Date}function Gd(){Gd=Z,vEt=new Ct}function h8(){h8=Z,a7=new Ot}function HC(t){return t.f.c+t.g.c}function yM(t,e){return t.b.Hc(e)}function kVt(t,e){return t.b.Ic(e)}function EVt(t,e){return t.b.Qc(e)}function TVt(t,e){return t.b.Hc(e)}function CVt(t,e){return t.c.uc(e)}function I0(t,e){return t.a._b(e)}function _Vt(t,e){return yi(t.c,e)}function SVt(t,e){return Tl(t.b,e)}function AVt(t,e){return t>e&&e0}function Cet(t,e){return yc(t,e)<0}function KC(t,e){return t.a.get(e)}function xXe(t,e){return e.split(t)}function WVt(t,e){return Tl(t.e,e)}function _bt(t){return On(t),!1}function WR(t){_n.call(this,t,21)}function kXe(t,e){TQt.call(this,t,e)}function YR(t,e){Vr.call(this,t,e)}function _et(t,e){Vr.call(this,t,e)}function Sbt(t){ort(),CYt.call(this,t)}function Abt(t,e){AKt(t,t.length,e)}function CM(t,e){rXt(t,t.length,e)}function EXe(t,e,n){e.ud(t.a.Ge(n))}function TXe(t,e,n){e.we(t.a.Fe(n))}function CXe(t,e,n){e.td(t.a.Kb(n))}function _Xe(t,e,n){t.Mb(n)&&e.td(n)}function XC(t,e,n){t.splice(e,0,n)}function SXe(t,e){return Nu(t.e,e)}function KR(t,e){this.d=t,this.e=e}function YVt(t,e){this.b=t,this.a=e}function KVt(t,e){this.b=t,this.a=e}function Lbt(t,e){this.b=t,this.a=e}function XVt(t,e){this.a=t,this.b=e}function QVt(t,e){this.a=t,this.b=e}function ZVt(t,e){this.a=t,this.b=e}function JVt(t,e){this.a=t,this.b=e}function Dx(t,e){this.a=t,this.b=e}function Mbt(t,e){this.b=t,this.a=e}function Dbt(t,e){this.b=t,this.a=e}function XR(t,e){Vr.call(this,t,e)}function QR(t,e){Vr.call(this,t,e)}function Ibt(t,e){Vr.call(this,t,e)}function Obt(t,e){Vr.call(this,t,e)}function z3(t,e){Vr.call(this,t,e)}function Aet(t,e){Vr.call(this,t,e)}function Let(t,e){Vr.call(this,t,e)}function Met(t,e){Vr.call(this,t,e)}function ZR(t,e){Vr.call(this,t,e)}function Pbt(t,e){Vr.call(this,t,e)}function Det(t,e){Vr.call(this,t,e)}function _M(t,e){Vr.call(this,t,e)}function JR(t,e){Vr.call(this,t,e)}function Iet(t,e){Vr.call(this,t,e)}function QC(t,e){Vr.call(this,t,e)}function Fbt(t,e){Vr.call(this,t,e)}function ms(t,e){Vr.call(this,t,e)}function tj(t,e){Vr.call(this,t,e)}function tGt(t,e){this.a=t,this.b=e}function eGt(t,e){this.a=t,this.b=e}function nGt(t,e){this.a=t,this.b=e}function rGt(t,e){this.a=t,this.b=e}function iGt(t,e){this.a=t,this.b=e}function sGt(t,e){this.a=t,this.b=e}function aGt(t,e){this.a=t,this.b=e}function oGt(t,e){this.a=t,this.b=e}function cGt(t,e){this.a=t,this.b=e}function Nbt(t,e){this.b=t,this.a=e}function uGt(t,e){this.b=t,this.a=e}function lGt(t,e){this.b=t,this.a=e}function hGt(t,e){this.b=t,this.a=e}function g8(t,e){this.c=t,this.d=e}function fGt(t,e){this.e=t,this.d=e}function dGt(t,e){this.a=t,this.b=e}function gGt(t,e){this.b=e,this.c=t}function ej(t,e){Vr.call(this,t,e)}function SM(t,e){Vr.call(this,t,e)}function Oet(t,e){Vr.call(this,t,e)}function ZC(t,e){Vr.call(this,t,e)}function Bbt(t,e){Vr.call(this,t,e)}function Pet(t,e){Vr.call(this,t,e)}function Fet(t,e){Vr.call(this,t,e)}function AM(t,e){Vr.call(this,t,e)}function Rbt(t,e){Vr.call(this,t,e)}function Net(t,e){Vr.call(this,t,e)}function JC(t,e){Vr.call(this,t,e)}function jbt(t,e){Vr.call(this,t,e)}function t9(t,e){Vr.call(this,t,e)}function e9(t,e){Vr.call(this,t,e)}function Fm(t,e){Vr.call(this,t,e)}function Bet(t,e){Vr.call(this,t,e)}function Ret(t,e){Vr.call(this,t,e)}function $bt(t,e){Vr.call(this,t,e)}function n9(t,e){Vr.call(this,t,e)}function jet(t,e){Vr.call(this,t,e)}function nj(t,e){Vr.call(this,t,e)}function LM(t,e){Vr.call(this,t,e)}function MM(t,e){Vr.call(this,t,e)}function Ix(t,e){Vr.call(this,t,e)}function $et(t,e){Vr.call(this,t,e)}function zbt(t,e){Vr.call(this,t,e)}function zet(t,e){Vr.call(this,t,e)}function qet(t,e){Vr.call(this,t,e)}function qbt(t,e){Vr.call(this,t,e)}function Het(t,e){Vr.call(this,t,e)}function Vet(t,e){Vr.call(this,t,e)}function Get(t,e){Vr.call(this,t,e)}function Uet(t,e){Vr.call(this,t,e)}function Hbt(t,e){Vr.call(this,t,e)}function pGt(t,e){this.b=t,this.a=e}function bGt(t,e){this.a=t,this.b=e}function wGt(t,e){this.a=t,this.b=e}function vGt(t,e){this.a=t,this.b=e}function mGt(t,e){this.a=t,this.b=e}function Vbt(t,e){Vr.call(this,t,e)}function Gbt(t,e){Vr.call(this,t,e)}function yGt(t,e){this.b=t,this.d=e}function Ubt(t,e){Vr.call(this,t,e)}function Wbt(t,e){Vr.call(this,t,e)}function xGt(t,e){this.a=t,this.b=e}function kGt(t,e){this.a=t,this.b=e}function rj(t,e){Vr.call(this,t,e)}function r9(t,e){Vr.call(this,t,e)}function Ybt(t,e){Vr.call(this,t,e)}function Kbt(t,e){Vr.call(this,t,e)}function Xbt(t,e){Vr.call(this,t,e)}function Wet(t,e){Vr.call(this,t,e)}function Qbt(t,e){Vr.call(this,t,e)}function Yet(t,e){Vr.call(this,t,e)}function ij(t,e){Vr.call(this,t,e)}function Ket(t,e){Vr.call(this,t,e)}function Xet(t,e){Vr.call(this,t,e)}function DM(t,e){Vr.call(this,t,e)}function Qet(t,e){Vr.call(this,t,e)}function Zbt(t,e){Vr.call(this,t,e)}function IM(t,e){Vr.call(this,t,e)}function Jbt(t,e){Vr.call(this,t,e)}function AXe(t,e){return Nu(t.c,e)}function LXe(t,e){return Nu(e.b,t)}function MXe(t,e){return-t.b.Je(e)}function t2t(t,e){return Nu(t.g,e)}function OM(t,e){Vr.call(this,t,e)}function Ox(t,e){Vr.call(this,t,e)}function EGt(t,e){this.a=t,this.b=e}function TGt(t,e){this.a=t,this.b=e}function $e(t,e){this.a=t,this.b=e}function i9(t,e){Vr.call(this,t,e)}function s9(t,e){Vr.call(this,t,e)}function PM(t,e){Vr.call(this,t,e)}function Zet(t,e){Vr.call(this,t,e)}function sj(t,e){Vr.call(this,t,e)}function a9(t,e){Vr.call(this,t,e)}function Jet(t,e){Vr.call(this,t,e)}function aj(t,e){Vr.call(this,t,e)}function q3(t,e){Vr.call(this,t,e)}function FM(t,e){Vr.call(this,t,e)}function o9(t,e){Vr.call(this,t,e)}function c9(t,e){Vr.call(this,t,e)}function NM(t,e){Vr.call(this,t,e)}function oj(t,e){Vr.call(this,t,e)}function H3(t,e){Vr.call(this,t,e)}function cj(t,e){Vr.call(this,t,e)}function CGt(t,e){this.a=t,this.b=e}function _Gt(t,e){this.a=t,this.b=e}function SGt(t,e){this.a=t,this.b=e}function AGt(t,e){this.a=t,this.b=e}function LGt(t,e){this.a=t,this.b=e}function MGt(t,e){this.a=t,this.b=e}function fa(t,e){this.a=t,this.b=e}function uj(t,e){Vr.call(this,t,e)}function DGt(t,e){this.a=t,this.b=e}function IGt(t,e){this.a=t,this.b=e}function OGt(t,e){this.a=t,this.b=e}function PGt(t,e){this.a=t,this.b=e}function FGt(t,e){this.a=t,this.b=e}function NGt(t,e){this.a=t,this.b=e}function BGt(t,e){this.b=t,this.a=e}function RGt(t,e){this.b=t,this.a=e}function jGt(t,e){this.b=t,this.a=e}function $Gt(t,e){this.b=t,this.a=e}function zGt(t,e){this.a=t,this.b=e}function qGt(t,e){this.a=t,this.b=e}function DXe(t,e){own(t.a,u(e,56))}function HGt(t,e){mon(t.a,u(e,11))}function IXe(t,e){return k8(),e!=t}function VGt(){return pHt(),new Wge}function GGt(){_rt(),this.b=new Hs}function UGt(){kq(),this.a=new Hs}function WGt(){Uvt(),evt.call(this)}function Px(t,e){Vr.call(this,t,e)}function YGt(t,e){this.a=t,this.b=e}function KGt(t,e){this.a=t,this.b=e}function lj(t,e){this.a=t,this.b=e}function XGt(t,e){this.a=t,this.b=e}function QGt(t,e){this.a=t,this.b=e}function ZGt(t,e){this.a=t,this.b=e}function JGt(t,e){this.d=t,this.b=e}function e2t(t,e){this.d=t,this.e=e}function tUt(t,e){this.f=t,this.c=e}function BM(t,e){this.b=t,this.c=e}function n2t(t,e){this.i=t,this.g=e}function eUt(t,e){this.e=t,this.a=e}function nUt(t,e){this.a=t,this.b=e}function r2t(t,e){t.i=null,fz(t,e)}function OXe(t,e){t&&ki(dP,t,e)}function rUt(t,e){return ist(t.a,e)}function hj(t){return XD(t.c,t.b)}function ec(t){return t?t.dd():null}function Vt(t){return t??null}function Nm(t){return typeof t===b6}function Bm(t){return typeof t===Nxt}function ra(t){return typeof t===Vat}function Np(t,e){return t.Hd().Xb(e)}function fj(t,e){return Kcn(t.Kc(),e)}function Dw(t,e){return yc(t,e)==0}function PXe(t,e){return yc(t,e)>=0}function u9(t,e){return yc(t,e)!=0}function FXe(t){return""+(On(t),t)}function RM(t,e){return t.substr(e)}function iUt(t){return cl(t),t.d.gc()}function tnt(t){return Dbn(t,t.c),t}function dj(t){return k9(t==null),t}function l9(t,e){return t.a+=""+e,t}function go(t,e){return t.a+=""+e,t}function h9(t,e){return t.a+=""+e,t}function hc(t,e){return t.a+=""+e,t}function Gr(t,e){return t.a+=""+e,t}function i2t(t,e){return t.a+=""+e,t}function sUt(t,e){fs(t,e,t.a,t.a.a)}function Zb(t,e){fs(t,e,t.c.b,t.c)}function NXe(t,e,n){gae(e,Wst(t,n))}function BXe(t,e,n){gae(e,Wst(t,n))}function RXe(t,e){Mon(new nr(t),e)}function aUt(t,e){t.q.setTime(Yw(e))}function oUt(t,e){lvt.call(this,t,e)}function cUt(t,e){lvt.call(this,t,e)}function ent(t,e){lvt.call(this,t,e)}function uUt(t){Xu(this),Y9(this,t)}function s2t(t){return An(t,0),null}function Gf(t){return t.a=0,t.b=0,t}function lUt(t,e){return t.a=e.g+1,t}function jXe(t,e){return t.j[e.p]==2}function a2t(t){return xnn(u(t,79))}function hUt(){hUt=Z,zpe=Wr(lst())}function fUt(){fUt=Z,i2e=Wr(Yce())}function dUt(){this.b=new Lx(ty(12))}function gUt(){this.b=0,this.a=!1}function pUt(){this.b=0,this.a=!1}function f9(t){this.a=t,pC.call(this)}function bUt(t){this.a=t,pC.call(this)}function mn(t,e){Ps.call(this,t,e)}function nnt(t,e){qm.call(this,t,e)}function V3(t,e){n2t.call(this,t,e)}function rnt(t,e){tE.call(this,t,e)}function wUt(t,e){jM.call(this,t,e)}function ii(t,e){GR(),ki(dU,t,e)}function int(t,e){return Pl(t.a,0,e)}function vUt(t,e){return t.a.a.a.cc(e)}function mUt(t,e){return Vt(t)===Vt(e)}function $Xe(t,e){return Ms(t.a,e.a)}function zXe(t,e){return pu(t.a,e.a)}function qXe(t,e){return tXt(t.a,e.a)}function hd(t,e){return t.indexOf(e)}function Iw(t,e){return t==e?0:t?1:-1}function gj(t){return t<10?"0"+t:""+t}function HXe(t){return Lr(t),new f9(t)}function yUt(t){return iu(t.l,t.m,t.h)}function p8(t){return ps((On(t),t))}function VXe(t){return ps((On(t),t))}function xUt(t,e){return pu(t.g,e.g)}function Bo(t){return typeof t===Nxt}function GXe(t){return t==Lv||t==Fy}function UXe(t){return t==Lv||t==Py}function o2t(t){return Ro(t.b.b,t,0)}function kUt(t){this.a=VGt(),this.b=t}function EUt(t){this.a=VGt(),this.b=t}function WXe(t,e){return le(t.a,e),e}function YXe(t,e){return le(t.c,e),t}function TUt(t,e){return $l(t.a,e),t}function KXe(t,e){return df(),e.a+=t}function XXe(t,e){return df(),e.a+=t}function QXe(t,e){return df(),e.c+=t}function c2t(t,e){$8(t,0,t.length,e)}function O0(){kt.call(this,new a2)}function CUt(){Wj.call(this,0,0,0,0)}function Fx(){ah.call(this,0,0,0,0)}function xo(t){this.a=t.a,this.b=t.b}function Bp(t){return t==zh||t==Cf}function b8(t){return t==rg||t==ng}function _Ut(t){return t==n5||t==e5}function G3(t){return t!=G1&&t!=Tb}function xl(t){return t.Lg()&&t.Mg()}function SUt(t){return u$(u(t,118))}function pj(t){return $l(new Vs,t)}function AUt(t,e){return new tE(e,t)}function ZXe(t,e){return new tE(e,t)}function u2t(t,e,n){iz(t,e),sz(t,n)}function bj(t,e,n){tv(t,e),Jw(t,n)}function x1(t,e,n){ku(t,e),Eu(t,n)}function wj(t,e,n){V8(t,e),U8(t,n)}function vj(t,e,n){G8(t,e),W8(t,n)}function snt(t,e){aE(t,e),Y8(t,t.D)}function l2t(t){tUt.call(this,t,!0)}function LUt(t,e,n){J2t.call(this,t,e,n)}function Rp(t){rb(),Jcn.call(this,t)}function MUt(){YR.call(this,"Head",1)}function DUt(){YR.call(this,"Tail",3)}function ant(t){t.c=Nt(Qn,De,1,0,5,1)}function IUt(t){t.a=Nt(Qn,De,1,8,5,1)}function OUt(t){xu(t.xf(),new ur(t))}function U3(t){return t!=null?Hi(t):0}function JXe(t,e){return ey(e,T1(t))}function tQe(t,e){return ey(e,T1(t))}function eQe(t,e){return t[t.length]=e}function nQe(t,e){return t[t.length]=e}function h2t(t){return een(t.b.Kc(),t.a)}function rQe(t,e){return hz(srt(t.d),e)}function iQe(t,e){return hz(srt(t.g),e)}function sQe(t,e){return hz(srt(t.j),e)}function eo(t,e){Ps.call(this,t.b,e)}function Ow(t){Wj.call(this,t,t,t,t)}function f2t(t){return t.b&&Sat(t),t.a}function d2t(t){return t.b&&Sat(t),t.c}function aQe(t,e){$1||(t.b=e)}function ont(t,e,n){return ts(t,e,n),n}function PUt(t,e,n){ts(t.c[e.g],e.g,n)}function oQe(t,e,n){u(t.c,69).Xh(e,n)}function cQe(t,e,n){x1(n,n.i+t,n.j+e)}function uQe(t,e){Dr(Lc(t.a),YQt(e))}function lQe(t,e){Dr(al(t.a),KQt(e))}function d9(t){gi(),yw.call(this,t)}function hQe(t){return t==null?0:Hi(t)}function FUt(){FUt=Z,Dht=new i_(_ft)}function Pr(){Pr=Z,new NUt,new he}function NUt(){new _r,new _r,new _r}function g2t(){g2t=Z,Ipt(),iEt=new _r}function k1(){k1=Z,b.Math.log(2)}function ih(){ih=Z,p0=(qVt(),Q4e)}function fQe(){throw it(new Sg(kge))}function dQe(){throw it(new Sg(kge))}function gQe(){throw it(new Sg(Ege))}function pQe(){throw it(new Sg(Ege))}function BUt(t){this.a=t,Iwt.call(this,t)}function cnt(t){this.a=t,FR.call(this,t)}function unt(t){this.a=t,FR.call(this,t)}function Zs(t,e){$nt(t.c,t.c.length,e)}function Go(t){return t.ae?1:0}function jUt(t,e){return yc(t,e)>0?t:e}function iu(t,e,n){return{l:t,m:e,h:n}}function bQe(t,e){t.a!=null&&HGt(e,t.a)}function $Ut(t){t.a=new xt,t.c=new xt}function mj(t){this.b=t,this.a=new he}function zUt(t){this.b=new Ce,this.a=t}function b2t(t){cwt.call(this),this.a=t}function qUt(){YR.call(this,"Range",2)}function HUt(){l4t(),this.a=new vI(I7t)}function wQe(t,e){Lr(e),Q3(t).Jc(new st)}function vQe(t,e){return Fl(),e.n.b+=t}function mQe(t,e,n){return ki(t.g,n,e)}function yQe(t,e,n){return ki(t.k,n,e)}function xQe(t,e){return ki(t.a,e.a,e)}function W3(t,e,n){return M3t(e,n,t.c)}function w2t(t){return new $e(t.c,t.d)}function kQe(t){return new $e(t.c,t.d)}function nc(t){return new $e(t.a,t.b)}function VUt(t,e){return G4n(t.a,e,null)}function EQe(t){Oa(t,null),oa(t,null)}function GUt(t){Art(t,null),Lrt(t,null)}function UUt(){jM.call(this,null,null)}function WUt(){Sj.call(this,null,null)}function v2t(t){this.a=t,_r.call(this)}function TQe(t){this.b=(wn(),new q(t))}function yj(t){t.j=Nt(wEt,ee,310,0,0,1)}function CQe(t,e,n){t.c.Vc(e,u(n,133))}function _Qe(t,e,n){t.c.ji(e,u(n,133))}function YUt(t,e){xr(t),t.Gc(u(e,15))}function g9(t,e){return o4n(t.c,t.b,e)}function SQe(t,e){return new bWt(t.Kc(),e)}function lnt(t,e){return _un(t.Kc(),e)!=-1}function m2t(t,e){return t.a.Bc(e)!=null}function xj(t){return t.Ob()?t.Pb():null}function KUt(t){return Mh(t,0,t.length)}function _t(t,e){return t!=null&&gst(t,e)}function AQe(t,e){t.q.setHours(e),E_(t,e)}function XUt(t,e){t.c&&(Hwt(e),kQt(e))}function LQe(t,e,n){u(t.Kb(n),164).Nb(e)}function MQe(t,e,n){return R4n(t,e,n),n}function QUt(t,e,n){t.a=e^1502,t.b=n^Eot}function hnt(t,e,n){return t.a[e.g][n.g]}function E1(t,e){return t.a[e.c.p][e.p]}function DQe(t,e){return t.e[e.c.p][e.p]}function IQe(t,e){return t.c[e.c.p][e.p]}function OQe(t,e){return t.j[e.p]=q2n(e)}function PQe(t,e){return kmt(t.f,e.tg())}function FQe(t,e){return kmt(t.b,e.tg())}function NQe(t,e){return t.a0?e*e/t:e*e*100}function oZe(t,e){return t>0?e/(t*t):e*100}function cZe(t,e,n){return le(e,yie(t,n))}function uZe(t,e,n){V$(),t.Xe(e)&&n.td(t)}function m8(t,e,n){var r;r=t.Zc(e),r.Rb(n)}function jm(t,e,n){return t.a+=e,t.b+=n,t}function lZe(t,e,n){return t.a*=e,t.b*=n,t}function qM(t,e,n){return t.a-=e,t.b-=n,t}function H2t(t,e){return t.a=e.a,t.b=e.b,t}function Mj(t){return t.a=-t.a,t.b=-t.b,t}function AWt(t){this.c=t,this.a=1,this.b=1}function LWt(t){this.c=t,ku(t,0),Eu(t,0)}function MWt(t){Zi.call(this),V9(this,t)}function DWt(t){qat(),nqt(this),this.mf(t)}function IWt(t,e){YC(),jM.call(this,t,e)}function V2t(t,e){Mg(),Sj.call(this,t,e)}function OWt(t,e){Mg(),Sj.call(this,t,e)}function PWt(t,e){Mg(),V2t.call(this,t,e)}function kl(t,e,n){_l.call(this,t,e,n,2)}function vnt(t,e){ih(),Uj.call(this,t,e)}function FWt(t,e){ih(),vnt.call(this,t,e)}function G2t(t,e){ih(),vnt.call(this,t,e)}function NWt(t,e){ih(),G2t.call(this,t,e)}function U2t(t,e){ih(),Uj.call(this,t,e)}function BWt(t,e){ih(),U2t.call(this,t,e)}function RWt(t,e){ih(),Uj.call(this,t,e)}function hZe(t,e){return t.c.Fc(u(e,133))}function W2t(t,e,n){return Pq(TD(t,e),n)}function fZe(t,e,n){return e.Qk(t.e,t.c,n)}function dZe(t,e,n){return e.Rk(t.e,t.c,n)}function mnt(t,e){return Zp(t.e,u(e,49))}function gZe(t,e,n){n_(al(t.a),e,KQt(n))}function pZe(t,e,n){n_(Lc(t.a),e,YQt(n))}function Y2t(t,e){e.$modCount=t.$modCount}function m9(){m9=Z,HS=new Vi("root")}function y8(){y8=Z,pP=new Pqt,new Fqt}function jWt(){this.a=new Uw,this.b=new Uw}function K2t(){ine.call(this),this.Bb|=Ka}function $Wt(){Vr.call(this,"GROW_TREE",0)}function bZe(t){return t==null?null:P5n(t)}function wZe(t){return t==null?null:qgn(t)}function vZe(t){return t==null?null:$o(t)}function mZe(t){return t==null?null:$o(t)}function P0(t){t.o==null&&b2n(t)}function Re(t){return k9(t==null||Nm(t)),t}function ye(t){return k9(t==null||Bm(t)),t}function Br(t){return k9(t==null||ra(t)),t}function X2t(t){this.q=new b.Date(Yw(t))}function HM(t,e){this.c=t,l8.call(this,t,e)}function Dj(t,e){this.a=t,HM.call(this,t,e)}function yZe(t,e){this.d=t,ztt(this),this.b=e}function Q2t(t,e){Xrt.call(this,t),this.a=e}function Z2t(t,e){Xrt.call(this,t),this.a=e}function xZe(t){C3t.call(this,0,0),this.f=t}function J2t(t,e,n){q$.call(this,t,e,n,null)}function zWt(t,e,n){q$.call(this,t,e,n,null)}function kZe(t,e,n){return t.ue(e,n)<=0?n:e}function EZe(t,e,n){return t.ue(e,n)<=0?e:n}function TZe(t,e){return u(Xw(t.b,e),149)}function CZe(t,e){return u(Xw(t.c,e),229)}function ynt(t){return u(Ne(t.a,t.b),287)}function qWt(t){return new $e(t.c,t.d+t.a)}function HWt(t){return Fl(),_Ut(u(t,197))}function $m(){$m=Z,o7t=un((Al(),K2))}function _Ze(t,e){e.a?hvn(t,e):fnt(t.a,e.b)}function VWt(t,e){$1||le(t.a,e)}function SZe(t,e){return kM(),J8(e.d.i,t)}function AZe(t,e){return r6(),new Uue(e,t)}function dd(t,e){return sD(e,n6t),t.f=e,t}function twt(t,e,n){return n=Hl(t,e,3,n),n}function ewt(t,e,n){return n=Hl(t,e,6,n),n}function nwt(t,e,n){return n=Hl(t,e,9,n),n}function VM(t,e,n){++t.j,t.Ki(),Yrt(t,e,n)}function GWt(t,e,n){++t.j,t.Hi(e,t.oi(e,n))}function UWt(t,e,n){var r;r=t.Zc(e),r.Rb(n)}function WWt(t,e,n){return bxt(t.c,t.b,e,n)}function rwt(t,e){return(e&wi)%t.d.length}function Ps(t,e){Vi.call(this,t),this.a=e}function iwt(t,e){Cpt.call(this,t),this.a=e}function xnt(t,e){Cpt.call(this,t),this.a=e}function YWt(t,e){this.c=t,Qw.call(this,e)}function KWt(t,e){this.a=t,Xzt.call(this,e)}function GM(t,e){this.a=t,Xzt.call(this,e)}function XWt(t){this.a=(jl(t,ky),new Xc(t))}function QWt(t){this.a=(jl(t,ky),new Xc(t))}function UM(t){return!t.a&&(t.a=new at),t.a}function ZWt(t){return t>8?0:t+1}function LZe(t,e){return Nn(),t==e?0:t?1:-1}function swt(t,e,n){return zx(t,u(e,22),n)}function MZe(t,e,n){return t.apply(e,n)}function JWt(t,e,n){return t.a+=Mh(e,0,n),t}function awt(t,e){var n;return n=t.e,t.e=e,n}function DZe(t,e){var n;n=t[kot],n.call(t,e)}function IZe(t,e){var n;n=t[kot],n.call(t,e)}function zm(t,e){t.a.Vc(t.b,e),++t.b,t.c=-1}function tYt(t){Xu(t.e),t.d.b=t.d,t.d.a=t.d}function WM(t){t.b?WM(t.b):t.f.c.zc(t.e,t.d)}function OZe(t,e,n){Qb(),Att(t,e.Ce(t.a,n))}function PZe(t,e){return yet(Nie(t.a,e,!0))}function FZe(t,e){return yet(Bie(t.a,e,!0))}function ff(t,e){return LR(new Array(e),t)}function knt(t){return String.fromCharCode(t)}function NZe(t){return t==null?null:t.message}function eYt(){this.a=new he,this.b=new he}function nYt(){this.a=new H5,this.b=new hqt}function rYt(){this.b=new Ca,this.c=new he}function owt(){this.d=new Ca,this.e=new Ca}function cwt(){this.n=new Ca,this.o=new Ca}function Ij(){this.n=new Cx,this.i=new Fx}function iYt(){this.a=new XJ,this.b=new ZX}function sYt(){this.a=new he,this.d=new he}function aYt(){this.b=new Hs,this.a=new Hs}function oYt(){this.b=new _r,this.a=new _r}function cYt(){this.b=new qHt,this.a=new GQ}function uYt(){Ij.call(this),this.a=new Ca}function y9(t){oun.call(this,t,(U$(),jut))}function uwt(t,e,n,r){Wj.call(this,t,e,n,r)}function BZe(t,e,n){n!=null&&uz(e,Cst(t,n))}function RZe(t,e,n){n!=null&&lz(e,Cst(t,n))}function lwt(t,e,n){return n=Hl(t,e,11,n),n}function Li(t,e){return t.a+=e.a,t.b+=e.b,t}function ia(t,e){return t.a-=e.a,t.b-=e.b,t}function jZe(t,e){return t.n.a=(On(e),e+10)}function $Ze(t,e){return t.n.a=(On(e),e+10)}function zZe(t,e){return e==t||yE(mq(e),t)}function lYt(t,e){return ki(t.a,e,"")==null}function qZe(t,e){return kM(),!J8(e.d.i,t)}function HZe(t,e){Bp(t.f)?a2n(t,e):V0n(t,e)}function VZe(t,e){var n;return n=e.Hh(t.a),n}function qm(t,e){yo.call(this,J_+t+D2+e)}function Rx(t,e,n,r){fe.call(this,t,e,n,r)}function hwt(t,e,n,r){fe.call(this,t,e,n,r)}function hYt(t,e,n,r){hwt.call(this,t,e,n,r)}function fYt(t,e,n,r){r$.call(this,t,e,n,r)}function Ent(t,e,n,r){r$.call(this,t,e,n,r)}function fwt(t,e,n,r){r$.call(this,t,e,n,r)}function dYt(t,e,n,r){Ent.call(this,t,e,n,r)}function dwt(t,e,n,r){Ent.call(this,t,e,n,r)}function Cn(t,e,n,r){fwt.call(this,t,e,n,r)}function gYt(t,e,n,r){dwt.call(this,t,e,n,r)}function pYt(t,e,n,r){hvt.call(this,t,e,n,r)}function bYt(t,e,n){this.a=t,j2t.call(this,e,n)}function wYt(t,e,n){this.c=e,this.b=n,this.a=t}function GZe(t,e,n){return t.d=u(e.Kb(n),164)}function gwt(t,e){return t.Aj().Nh().Kh(t,e)}function pwt(t,e){return t.Aj().Nh().Ih(t,e)}function vYt(t,e){return On(t),Vt(t)===Vt(e)}function hn(t,e){return On(t),Vt(t)===Vt(e)}function Tnt(t,e){return yet(Nie(t.a,e,!1))}function Cnt(t,e){return yet(Bie(t.a,e,!1))}function UZe(t,e){return t.b.sd(new QVt(t,e))}function WZe(t,e){return t.b.sd(new ZVt(t,e))}function mYt(t,e){return t.b.sd(new JVt(t,e))}function bwt(t,e,n){return t.lastIndexOf(e,n)}function YZe(t,e,n){return Ms(t[e.b],t[n.b])}function KZe(t,e){return Jt(e,(Te(),DO),t)}function XZe(t,e){return pu(e.a.d.p,t.a.d.p)}function QZe(t,e){return pu(t.a.d.p,e.a.d.p)}function ZZe(t,e){return Ms(t.c-t.s,e.c-e.s)}function yYt(t){return t.c?Ro(t.c.a,t,0):-1}function JZe(t){return t<100?null:new Dp(t)}function jx(t){return t==Y2||t==g0||t==Gc}function xYt(t,e){return _t(e,15)&&Sue(t.c,e)}function tJe(t,e){$1||e&&(t.d=e)}function _nt(t,e){var n;return n=e,!!jyt(t,n)}function wwt(t,e){this.c=t,Jnt.call(this,t,e)}function kYt(t){this.c=t,ent.call(this,qq,0)}function EYt(t,e){sen.call(this,t,t.length,e)}function eJe(t,e,n){return u(t.c,69).lk(e,n)}function Oj(t,e,n){return u(t.c,69).mk(e,n)}function nJe(t,e,n){return fZe(t,u(e,332),n)}function vwt(t,e,n){return dZe(t,u(e,332),n)}function rJe(t,e,n){return xae(t,u(e,332),n)}function TYt(t,e,n){return egn(t,u(e,332),n)}function x9(t,e){return e==null?null:sy(t.b,e)}function mwt(t){return Bm(t)?(On(t),t):t.ke()}function Pj(t){return!isNaN(t)&&!isFinite(t)}function CYt(t){gd(),this.a=(wn(),new s8(t))}function YM(t){k8(),this.d=t,this.a=new B3}function sh(t,e,n){this.a=t,this.b=e,this.c=n}function _Yt(t,e,n){this.a=t,this.b=e,this.c=n}function SYt(t,e,n){this.d=t,this.b=n,this.a=e}function Snt(t){$Ut(this),Ah(this),Ua(this,t)}function Bu(t){ant(this),Pwt(this.c,0,t.Pc())}function AYt(t){Cl(t.a),Cte(t.c,t.b),t.b=null}function LYt(t){this.a=t,Gd(),Tu(Date.now())}function MYt(){MYt=Z,REt=new _,aV=new _}function Ant(){Ant=Z,LEt=new Ht,Yge=new Le}function DYt(){DYt=Z,n5e=Nt(Qn,De,1,0,5,1)}function IYt(){IYt=Z,y5e=Nt(Qn,De,1,0,5,1)}function ywt(){ywt=Z,x5e=Nt(Qn,De,1,0,5,1)}function gd(){gd=Z,new Apt((wn(),wn(),io))}function iJe(t){return U$(),Ur((Nte(),Qge),t)}function sJe(t){return O1(),Ur((ete(),rpe),t)}function aJe(t){return Gz(),Ur((cJt(),upe),t)}function oJe(t){return Q$(),Ur((uJt(),lpe),t)}function cJe(t){return Cq(),Ur((Kne(),hpe),t)}function uJe(t){return Kf(),Ur((ZJt(),gpe),t)}function lJe(t){return Qu(),Ur((JJt(),bpe),t)}function hJe(t){return yu(),Ur((tte(),vpe),t)}function fJe(t){return $q(),Ur((hUt(),zpe),t)}function dJe(t){return rv(),Ur((Rte(),Hpe),t)}function gJe(t){return u6(),Ur((jte(),Gpe),t)}function pJe(t){return c_(),Ur(($te(),Ype),t)}function bJe(t){return jR(),Ur(($Zt(),Kpe),t)}function wJe(t){return Z$(),Ur((lJt(),fbe),t)}function vJe(t){return q9(),Ur((nte(),Obe),t)}function mJe(t){return Wa(),Ur((bee(),Bbe),t)}function yJe(t){return nE(),Ur((Bte(),qbe),t)}function xJe(t){return iv(),Ur((rte(),Ybe),t)}function xwt(t,e){if(!t)throw it(new Fn(e))}function kJe(t){return Vn(),Ur((Bee(),Zbe),t)}function kwt(t){Wj.call(this,t.d,t.c,t.a,t.b)}function Lnt(t){Wj.call(this,t.d,t.c,t.a,t.b)}function Ewt(t,e,n){this.b=t,this.c=e,this.a=n}function Fj(t,e,n){this.b=t,this.a=e,this.c=n}function OYt(t,e,n){this.a=t,this.b=e,this.c=n}function Twt(t,e,n){this.a=t,this.b=e,this.c=n}function PYt(t,e,n){this.a=t,this.b=e,this.c=n}function Cwt(t,e,n){this.a=t,this.b=e,this.c=n}function FYt(t,e,n){this.b=t,this.a=e,this.c=n}function Nj(t,e,n){this.e=e,this.b=t,this.d=n}function EJe(t,e,n){return Qb(),t.a.Od(e,n),e}function Mnt(t){var e;return e=new Wu,e.e=t,e}function _wt(t){var e;return e=new vqt,e.b=t,e}function KM(){KM=Z,mV=new BK,yV=new RK}function df(){df=Z,f2e=new SX,d2e=new DN}function TJe(t){return Tz(),Ur((qte(),o2e),t)}function CJe(t){return I1(),Ur((Vte(),b2e),t)}function _Je(t){return Eq(),Ur((Rne(),T2e),t)}function SJe(t){return h6(),Ur(($ee(),C2e),t)}function AJe(t){return H$(),Ur((bJt(),_2e),t)}function LJe(t){return n6(),Ur((ite(),S2e),t)}function MJe(t){return b4(),Ur((hee(),v2e),t)}function DJe(t){return nv(),Ur((ote(),E2e),t)}function IJe(t){return oz(),Ur((ste(),A2e),t)}function OJe(t){return x2(),Ur((uee(),L2e),t)}function PJe(t){return LD(),Ur((fJt(),M2e),t)}function FJe(t){return d2(),Ur((ate(),I2e),t)}function NJe(t){return dq(),Ur((Vee(),O2e),t)}function BJe(t){return xD(),Ur((dJt(),P2e),t)}function RJe(t){return oI(),Ur((qee(),F2e),t)}function jJe(t){return kE(),Ur((zee(),N2e),t)}function $Je(t){return oo(),Ur((lre(),B2e),t)}function zJe(t){return eE(),Ur((ute(),R2e),t)}function qJe(t){return q0(),Ur((cte(),$2e),t)}function HJe(t){return I$(),Ur((wJt(),z2e),t)}function VJe(t){return dh(),Ur((fee(),q2e),t)}function GJe(t){return uq(),Ur((Hee(),rme),t)}function UJe(t){return Z9(),Ur((lte(),ime),t)}function WJe(t){return cy(),Ur((Gte(),sme),t)}function YJe(t){return so(),Ur((dte(),hme),t)}function KJe(t){return y4(),Ur((Bne(),ome),t)}function XJe(t){return V0(),Ur((fte(),cme),t)}function QJe(t){return CD(),Ur((pJt(),ume),t)}function ZJe(t){return yz(),Ur((hte(),fme),t)}function JJe(t){return u_(),Ur((lee(),ame),t)}function ttn(t){return pD(),Ur((gJt(),dme),t)}function etn(t){return cE(),Ur((pte(),gme),t)}function ntn(t){return vz(),Ur((bte(),pme),t)}function rtn(t){return Cz(),Ur((gte(),bme),t)}function itn(t){return ev(),Ur((wte(),Lme),t)}function stn(t){return $9(),Ur((mJt(),Pme),t)}function atn(t){return bd(),Ur((yJt(),zme),t)}function otn(t){return C1(),Ur((xJt(),Hme),t)}function ctn(t){return Uf(),Ur((vJt(),iye),t)}function utn(t){return Gw(),Ur((kJt(),hye),t)}function ltn(t){return wE(),Ur((zte(),fye),t)}function htn(t){return p_(),Ur((Gee(),gye),t)}function ftn(t){return T$(),Ur((CJt(),Aye),t)}function dtn(t){return pz(),Ur((TJt(),Pye),t)}function gtn(t){return A$(),Ur((EJt(),Lye),t)}function ptn(t){return Nz(),Ur((vte(),Nye),t)}function btn(t){return G$(),Ur((_Jt(),Bye),t)}function wtn(t){return HD(),Ur((mte(),Rye),t)}function vtn(t){return eq(),Ur((Hte(),Jye),t)}function mtn(t){return mz(),Ur((xte(),t3e),t)}function ytn(t){return Fz(),Ur((yte(),e3e),t)}function xtn(t){return AE(),Ur((pee(),x3e),t)}function ktn(t){return KD(),Ur((kte(),k3e),t)}function Etn(t){return zR(),Ur((RZt(),E3e),t)}function Ttn(t){return qR(),Ur((BZt(),C3e),t)}function Ctn(t){return bD(),Ur((AJt(),_3e),t)}function _tn(t){return uI(),Ur((dee(),S3e),t)}function Stn(t){return UC(),Ur((jZt(),H3e),t)}function Atn(t){return jD(),Ur((SJt(),V3e),t)}function Ltn(t){return Qf(),Ur((gee(),X3e),t)}function Mtn(t){return Ug(),Ur((jne(),Z3e),t)}function Dtn(t){return t0(),Ur((jee(),J3e),t)}function Itn(t){return hy(),Ur((Ree(),s4e),t)}function Otn(t){return ro(),Ur((fUt(),i2e),t)}function Ptn(t){return X8(),Ur((hJt(),r2e),t)}function Ftn(t){return ao(),Ur((wee(),y4e),t)}function Ntn(t){return M1(),Ur((Tte(),x4e),t)}function Btn(t){return W0(),Ur((Yte(),k4e),t)}function Rtn(t){return hq(),Ur((Wee(),E4e),t)}function jtn(t){return G0(),Ur((Ete(),C4e),t)}function $tn(t){return zl(),Ur((Wte(),S4e),t)}function ztn(t){return py(),Ur((Yne(),A4e),t)}function qtn(t){return l4(),Ur((vee(),L4e),t)}function Htn(t){return ua(),Ur((Oee(),M4e),t)}function Vtn(t){return Zu(),Ur((Uee(),D4e),t)}function Gtn(t){return Al(),Ur((Xte(),B4e),t)}function Utn(t){return ll(),Ur((hre(),R4e),t)}function Wtn(t){return ve(),Ur((mee(),I4e),t)}function Ytn(t){return jz(),Ur((Kte(),j4e),t)}function Ktn(t){return Sl(),Ur((Ute(),q4e),t)}function Xtn(t){return CE(),Ur(($ne(),e5e),t)}function Qtn(t,e){return On(t),t+(On(e),e)}function Ztn(t,e){return Gd(),Dr(Wt(t.a),e)}function Jtn(t,e){return Gd(),Dr(Wt(t.a),e)}function Dnt(t,e){this.c=t,this.a=e,this.b=e-t}function NYt(t,e,n){this.a=t,this.b=e,this.c=n}function Swt(t,e,n){this.a=t,this.b=e,this.c=n}function Awt(t,e,n){this.a=t,this.b=e,this.c=n}function BYt(t,e,n){this.a=t,this.b=e,this.c=n}function RYt(t,e,n){this.a=t,this.b=e,this.c=n}function Ig(t,e,n){this.e=t,this.a=e,this.c=n}function jYt(t,e,n){ih(),$vt.call(this,t,e,n)}function Int(t,e,n){ih(),Tvt.call(this,t,e,n)}function Lwt(t,e,n){ih(),Tvt.call(this,t,e,n)}function Mwt(t,e,n){ih(),Tvt.call(this,t,e,n)}function $Yt(t,e,n){ih(),Int.call(this,t,e,n)}function Dwt(t,e,n){ih(),Int.call(this,t,e,n)}function zYt(t,e,n){ih(),Dwt.call(this,t,e,n)}function qYt(t,e,n){ih(),Lwt.call(this,t,e,n)}function HYt(t,e,n){ih(),Mwt.call(this,t,e,n)}function XM(t,e){return Lr(t),Lr(e),new lVt(t,e)}function $x(t,e){return Lr(t),Lr(e),new nKt(t,e)}function ten(t,e){return Lr(t),Lr(e),new rKt(t,e)}function een(t,e){return Lr(t),Lr(e),new fVt(t,e)}function u(t,e){return k9(t==null||gst(t,e)),t}function x8(t){var e;return e=new he,oit(e,t),e}function nen(t){var e;return e=new Hs,oit(e,t),e}function VYt(t){var e;return e=new Bpt,xit(e,t),e}function QM(t){var e;return e=new Zi,xit(e,t),e}function ren(t){return!t.e&&(t.e=new he),t.e}function ien(t){return!t.c&&(t.c=new Tm),t.c}function le(t,e){return t.c[t.c.length]=e,!0}function GYt(t,e){this.c=t,this.b=e,this.a=!1}function Iwt(t){this.d=t,ztt(this),this.b=Xen(t.d)}function UYt(){this.a=";,;",this.b="",this.c=""}function sen(t,e,n){WKt.call(this,e,n),this.a=t}function WYt(t,e,n){this.b=t,oUt.call(this,e,n)}function Owt(t,e,n){this.c=t,KR.call(this,e,n)}function Pwt(t,e,n){n5t(n,0,t,e,n.length,!1)}function Wd(t,e,n,r,s){t.b=e,t.c=n,t.d=r,t.a=s}function aen(t,e){e&&(t.b=e,t.a=(Vp(e),e.a))}function Fwt(t,e,n,r,s){t.d=e,t.c=n,t.a=r,t.b=s}function Nwt(t){var e,n;e=t.b,n=t.c,t.b=n,t.c=e}function Bwt(t){var e,n;n=t.d,e=t.a,t.d=e,t.a=n}function Rwt(t){return Kp(fnn(Bo(t)?Lh(t):t))}function oen(t,e){return pu(uKt(t.d),uKt(e.d))}function cen(t,e){return e==(ve(),Bn)?t.c:t.d}function k8(){k8=Z,r_t=(ve(),Bn),CG=Hn}function YYt(){this.b=Xt(ye(Ie((Jf(),nlt))))}function KYt(t){return Qb(),Nt(Qn,De,1,t,5,1)}function uen(t){return new $e(t.c+t.b,t.d+t.a)}function len(t,e){return $R(),pu(t.d.p,e.d.p)}function Ont(t){return Zn(t.b!=0),lh(t,t.a.a)}function hen(t){return Zn(t.b!=0),lh(t,t.c.b)}function jwt(t,e){if(!t)throw it(new iHt(e))}function Bj(t,e){if(!t)throw it(new Fn(e))}function $wt(t,e,n){g8.call(this,t,e),this.b=n}function ZM(t,e,n){e2t.call(this,t,e),this.c=n}function XYt(t,e,n){See.call(this,e,n),this.d=t}function zwt(t){ywt(),Pk.call(this),this.th(t)}function QYt(t,e,n){this.a=t,V3.call(this,e,n)}function ZYt(t,e,n){this.a=t,V3.call(this,e,n)}function Rj(t,e,n){e2t.call(this,t,e),this.c=n}function JYt(){B8(),Mnn.call(this,(Pp(),Yh))}function tKt(t){return t!=null&&!tst(t,oA,cA)}function fen(t,e){return(uie(t)<<4|uie(e))&ys}function den(t,e){return c$(),kst(t,e),new SXt(t,e)}function Jb(t,e){var n;t.n&&(n=e,le(t.f,n))}function E8(t,e,n){var r;r=new Um(n),Yf(t,e,r)}function gen(t,e){var n;return n=t.c,syt(t,e),n}function qwt(t,e){return e<0?t.g=-1:t.g=e,t}function jj(t,e){return Zon(t),t.a*=e,t.b*=e,t}function eKt(t,e,n,r,s){t.c=e,t.d=n,t.b=r,t.a=s}function ri(t,e){return fs(t,e,t.c.b,t.c),!0}function Hwt(t){t.a.b=t.b,t.b.a=t.a,t.a=t.b=null}function Pnt(t){this.b=t,this.a=Rw(this.b.a).Ed()}function nKt(t,e){this.b=t,this.a=e,pC.call(this)}function rKt(t,e){this.a=t,this.b=e,pC.call(this)}function iKt(t,e){WKt.call(this,e,1040),this.a=t}function JM(t){return t==0||isNaN(t)?t:t<0?-1:1}function pen(t){return Ux(),e0(t)==es(tb(t))}function ben(t){return Ux(),tb(t)==es(e0(t))}function Bw(t,e){return d_(t,new g8(e.a,e.b))}function wen(t){return!Ga(t)&&t.c.i.c==t.d.i.c}function $j(t){var e;return e=t.n,t.a.b+e.d+e.a}function sKt(t){var e;return e=t.n,t.e.b+e.d+e.a}function Vwt(t){var e;return e=t.n,t.e.a+e.b+e.c}function aKt(t){return gi(),new Yd(0,t)}function ven(t){return t.a?t.a:grt(t)}function k9(t){if(!t)throw it(new i8(null))}function oKt(){oKt=Z,$ft=(wn(),new O(put))}function zj(){zj=Z,new z3t((oet(),Sut),(cet(),_ut))}function cKt(){cKt=Z,fEt=Nt(ja,ee,19,256,0,1)}function Fnt(t,e,n,r){b3t.call(this,t,e,n,r,0,0)}function men(t,e,n){return ki(t.b,u(n.b,17),e)}function yen(t,e,n){return ki(t.b,u(n.b,17),e)}function xen(t,e){return le(t,new $e(e.a,e.b))}function ken(t,e){return t.c=e)throw it(new Opt)}function inn(t,e,n){return ts(e,0,Ywt(e[0],n[0])),e}function snn(t,e,n){e.Ye(n,Xt(ye(tr(t.b,n)))*t.a)}function UKt(t,e,n){return k4(),Q8(t,e)&&Q8(t,n)}function S9(t){return Zu(),!t.Hc(sg)&&!t.Hc(Cb)}function e$(t){return new $e(t.c+t.b/2,t.d+t.a/2)}function Wnt(t,e){return e.kh()?Zp(t.b,u(e,49)):e}function lvt(t,e){this.e=t,this.d=e&64?e|md:e}function WKt(t,e){this.c=0,this.d=t,this.b=e|64|md}function n$(t){this.b=new Xc(11),this.a=(Z3(),t)}function Ynt(t){this.b=null,this.a=(Z3(),t||_Et)}function YKt(t){this.a=wse(t.a),this.b=new Bu(t.b)}function KKt(t){this.b=t,Nx.call(this,t),ZUt(this)}function XKt(t){this.b=t,$M.call(this,t),JUt(this)}function Gm(t,e,n){this.a=t,Rx.call(this,e,n,5,6)}function hvt(t,e,n,r){this.b=t,As.call(this,e,n,r)}function Js(t,e,n,r,s){Jrt.call(this,t,e,n,r,s,-1)}function A9(t,e,n,r,s){mD.call(this,t,e,n,r,s,-1)}function fe(t,e,n,r){As.call(this,t,e,n),this.b=r}function r$(t,e,n,r){ZM.call(this,t,e,n),this.b=r}function QKt(t){tUt.call(this,t,!1),this.a=!1}function ZKt(t,e){this.b=t,wtt.call(this,t.b),this.a=e}function JKt(t,e){Wm(),cXe.call(this,t,Dz(new yl(e)))}function i$(t,e){return gi(),new Cvt(t,e,0)}function Knt(t,e){return gi(),new Cvt(6,t,e)}function ann(t,e){return hn(t.substr(0,e.length),e)}function Tl(t,e){return ra(e)?wrt(t,e):!!Lo(t.f,e)}function ba(t,e){for(On(e);t.Ob();)e.td(t.Pb())}function X3(t,e,n){rb(),this.e=t,this.d=e,this.a=n}function Og(t,e,n,r){var s;s=t.i,s.i=e,s.a=n,s.b=r}function fvt(t){var e;for(e=t;e.f;)e=e.f;return e}function Hx(t){var e;return e=Q9(t),Zn(e!=null),e}function onn(t){var e;return e=Uln(t),Zn(e!=null),e}function C8(t,e){var n;return n=t.a.gc(),Emt(e,n),n-e}function dvt(t,e){var n;for(n=0;n0?b.Math.log(t/e):-100}function tXt(t,e){return yc(t,e)<0?-1:yc(t,e)>0?1:0}function vvt(t,e,n){return Gle(t,u(e,46),u(n,167))}function eXt(t,e){return u(cvt(Rw(t.a)).Xb(e),42).cd()}function bnn(t,e){return jon(e,t.length),new iKt(t,e)}function Jnt(t,e){this.d=t,nr.call(this,t),this.e=e}function jw(t){this.d=(On(t),t),this.a=0,this.c=qq}function mvt(t,e){yw.call(this,1),this.a=t,this.b=e}function nXt(t,e){return t.c?nXt(t.c,e):le(t.b,e),t}function wnn(t,e,n){var r;return r=Jm(t,e),Brt(t,e,n),r}function yvt(t,e){var n;return n=t.slice(0,e),Bmt(n,t)}function rXt(t,e,n){var r;for(r=0;r=t.g}function crt(t,e,n){var r;return r=mit(t,e,n),Y5t(t,r)}function Vx(t,e){var n;n=t.a.length,Jm(t,n),Brt(t,n,e)}function vXt(t,e){var n;n=console[t],n.call(console,e)}function mXt(t,e){var n;++t.j,n=t.Vi(),t.Ii(t.oi(n,e))}function Lnn(t,e,n){u(e.b,65),xu(e.a,new Swt(t,n,e))}function Tvt(t,e,n){vR.call(this,e),this.a=t,this.b=n}function Cvt(t,e,n){yw.call(this,t),this.a=e,this.b=n}function _vt(t,e,n){this.a=t,Cpt.call(this,e),this.b=n}function yXt(t,e,n){this.a=t,nmt.call(this,8,e,null,n)}function Mnn(t){this.a=(On(Yr),Yr),this.b=t,new Upt}function xXt(t){this.c=t,this.b=this.c.a,this.a=this.c.e}function Svt(t){this.c=t,this.b=t.a.d.a,Y2t(t.a.e,this)}function Cl(t){Rm(t.c!=-1),t.d.$c(t.c),t.b=t.c,t.c=-1}function D9(t){return b.Math.sqrt(t.a*t.a+t.b*t.b)}function zw(t,e){return T8(e,t.a.c.length),Ne(t.a,e)}function pd(t,e){return Vt(t)===Vt(e)||t!=null&&yi(t,e)}function Dnn(t){return 0>=t?new mbt:wcn(t-1)}function Inn(t){return s3?wrt(s3,t):!1}function kXt(t){return t?t.dc():!t.Kc().Ob()}function Na(t){return!t.a&&t.c?t.c.b:t.a}function Onn(t){return!t.a&&(t.a=new As(_b,t,4)),t.a}function qw(t){return!t.d&&(t.d=new As(ho,t,1)),t.d}function On(t){if(t==null)throw it(new IC);return t}function I9(t){t.c?t.c.He():(t.d=!0,Rwn(t))}function Vp(t){t.c?Vp(t.c):(w2(t),t.d=!0)}function EXt(t){Dvt(t.a),t.b=Nt(Qn,De,1,t.b.length,5,1)}function Pnn(t,e){return pu(e.j.c.length,t.j.c.length)}function Fnn(t,e){t.c<0||t.b.b=0?t.Bh(n):i5t(t,e)}function TXt(t){var e,n;return e=t.c.i.c,n=t.d.i.c,e==n}function Bnn(t){if(t.p!=4)throw it(new Ou);return t.e}function Rnn(t){if(t.p!=3)throw it(new Ou);return t.e}function jnn(t){if(t.p!=6)throw it(new Ou);return t.f}function $nn(t){if(t.p!=6)throw it(new Ou);return t.k}function znn(t){if(t.p!=3)throw it(new Ou);return t.j}function qnn(t){if(t.p!=4)throw it(new Ou);return t.j}function Avt(t){return!t.b&&(t.b=new mR(new aet)),t.b}function Hw(t){return t.c==-2&&Jk(t,agn(t.g,t.b)),t.c}function A8(t,e){var n;return n=rrt("",t),n.n=e,n.i=1,n}function Hnn(t,e){qnt(u(e.b,65),t),xu(e.a,new Jr(t))}function Vnn(t,e){Dr((!t.a&&(t.a=new GM(t,t)),t.a),e)}function CXt(t,e){this.b=t,Jnt.call(this,t,e),ZUt(this)}function _Xt(t,e){this.b=t,wwt.call(this,t,e),JUt(this)}function Lvt(t,e,n,r){Lw.call(this,t,e),this.d=n,this.a=r}function o$(t,e,n,r){Lw.call(this,t,n),this.a=e,this.f=r}function SXt(t,e){TQe.call(this,vcn(Lr(t),Lr(e))),this.a=e}function AXt(){N4t.call(this,O2,(DHt(),L5e)),f4n(this)}function LXt(){N4t.call(this,Bh,(c8(),aLt)),x3n(this)}function MXt(){Vr.call(this,"DELAUNAY_TRIANGULATION",0)}function Gnn(t){return String.fromCharCode.apply(null,t)}function ki(t,e,n){return ra(e)?ko(t,e,n):au(t.f,e,n)}function Mvt(t){return wn(),t?t.ve():(Z3(),Z3(),AEt)}function Unn(t,e,n){return i6(),n.pg(t,u(e.cd(),146))}function DXt(t,e){return zj(),new z3t(new fWt(t),new hWt(e))}function Wnn(t){return jl(t,Yat),J$(Pa(Pa(5,t),t/10|0))}function c$(){c$=Z,Age=new uet(lt(ct(P2,1),Hq,42,0,[]))}function IXt(t){return!t.d&&(t.d=new T(t.c.Cc())),t.d}function L8(t){return!t.a&&(t.a=new fHt(t.c.vc())),t.a}function OXt(t){return!t.b&&(t.b=new s8(t.c.ec())),t.b}function Xd(t,e){for(;e-- >0;)t=t<<1|(t<0?1:0);return t}function Fc(t,e){return Vt(t)===Vt(e)||t!=null&&yi(t,e)}function Ynn(t,e){return Nn(),u(e.b,19).ar&&++r,r}function N0(t){var e,n;return n=(e=new xw,e),H8(n,t),n}function drt(t){var e,n;return n=(e=new xw,e),j4t(n,t),n}function urn(t,e){var n;return n=tr(t.f,e),byt(e,n),null}function grt(t){var e;return e=ycn(t),e||null}function HXt(t){return!t.b&&(t.b=new fe(Ys,t,12,3)),t.b}function lrn(t){return t!=null&&yM(gU,t.toLowerCase())}function hrn(t,e){return Ms(Ru(t)*El(t),Ru(e)*El(e))}function frn(t,e){return Ms(Ru(t)*El(t),Ru(e)*El(e))}function drn(t,e){return Ms(t.d.c+t.d.b/2,e.d.c+e.d.b/2)}function grn(t,e){return Ms(t.g.c+t.g.b/2,e.g.c+e.g.b/2)}function VXt(t,e,n){n.a?Eu(t,e.b-t.f/2):ku(t,e.a-t.g/2)}function GXt(t,e,n,r){this.a=t,this.b=e,this.c=n,this.d=r}function UXt(t,e,n,r){this.a=t,this.b=e,this.c=n,this.d=r}function n2(t,e,n,r){this.e=t,this.a=e,this.c=n,this.d=r}function WXt(t,e,n,r){this.a=t,this.c=e,this.d=n,this.b=r}function YXt(t,e,n,r){ih(),$Jt.call(this,e,n,r),this.a=t}function KXt(t,e,n,r){ih(),$Jt.call(this,e,n,r),this.a=t}function XXt(t,e){this.a=t,yZe.call(this,t,u(t.d,15).Zc(e))}function prt(t){this.f=t,this.c=this.f.e,t.f>0&&cae(this)}function QXt(t,e,n,r){this.b=t,this.c=r,ent.call(this,e,n)}function ZXt(t){return Zn(t.b=0&&hn(t.substr(n,e.length),e)}function Gp(t,e,n,r,s,o,h){return new jrt(t.e,e,n,r,s,o,h)}function pQt(t,e,n,r,s,o){this.a=t,fit.call(this,e,n,r,s,o)}function bQt(t,e,n,r,s,o){this.a=t,fit.call(this,e,n,r,s,o)}function wQt(t,e){this.g=t,this.d=lt(ct(l0,1),Yg,10,0,[e])}function Pg(t,e){this.e=t,this.a=Qn,this.b=$ue(e),this.c=e}function vQt(t,e){Ij.call(this),Gmt(this),this.a=t,this.c=e}function aD(t,e,n,r){ts(t.c[e.g],n.g,r),ts(t.c[n.g],e.g,r)}function yrt(t,e,n,r){ts(t.c[e.g],e.g,n),ts(t.b[e.g],e.g,r)}function Nrn(){return pD(),lt(ct(Y9t,1),oe,376,0,[Sht,BO])}function Brn(){return xD(),lt(ct($Tt,1),oe,479,0,[jTt,WV])}function Rrn(){return LD(),lt(ct(BTt,1),oe,419,0,[GV,NTt])}function jrn(){return H$(),lt(ct(LTt,1),oe,422,0,[ATt,Alt])}function $rn(){return I$(),lt(ct(JTt,1),oe,420,0,[Hlt,ZTt])}function zrn(){return CD(),lt(ct(V9t,1),oe,421,0,[Tht,Cht])}function qrn(){return $9(),lt(ct(Ome,1),oe,523,0,[BS,NS])}function Hrn(){return Uf(),lt(ct(rye,1),oe,520,0,[Ky,mb])}function Vrn(){return bd(),lt(ct($me,1),oe,516,0,[zv,ep])}function Grn(){return C1(),lt(ct(qme,1),oe,515,0,[H2,H1])}function Urn(){return Gw(),lt(ct(lye,1),oe,455,0,[yb,r5])}function Wrn(){return A$(),lt(ct(v_t,1),oe,425,0,[qht,w_t])}function Yrn(){return T$(),lt(ct(b_t,1),oe,480,0,[zht,p_t])}function Krn(){return pz(),lt(ct(m_t,1),oe,495,0,[FG,D7])}function Xrn(){return G$(),lt(ct(x_t,1),oe,426,0,[y_t,Uht])}function Qrn(){return jD(),lt(ct(TSt,1),oe,429,0,[VG,ESt])}function Zrn(){return bD(),lt(ct(nSt,1),oe,430,0,[eft,qG])}function Jrn(){return Gz(),lt(ct(zEt,1),oe,428,0,[qut,$Et])}function tin(){return Q$(),lt(ct(HEt,1),oe,427,0,[qEt,Hut])}function ein(){return Z$(),lt(ct(w7t,1),oe,424,0,[tlt,gV])}function nin(){return X8(),lt(ct(n2e,1),oe,511,0,[yO,dlt])}function m$(t,e,n,r){return n>=0?t.jh(e,n,r):t.Sg(null,n,r)}function xrt(t){return t.b.b==0?t.a.$e():Ont(t.b)}function rin(t){if(t.p!=5)throw it(new Ou);return Ar(t.f)}function iin(t){if(t.p!=5)throw it(new Ou);return Ar(t.k)}function jvt(t){return Vt(t.a)===Vt((kit(),Bft))&&s4n(t),t.a}function mQt(t){this.a=u(Lr(t),271),this.b=(wn(),new I2t(t))}function yQt(t,e){vpt(this,new $e(t.a,t.b)),oR(this,QM(e))}function Gw(){Gw=Z,yb=new Wbt(y6,0),r5=new Wbt(x6,1)}function bd(){bd=Z,zv=new Gbt(x6,0),ep=new Gbt(y6,1)}function Uw(){gKe.call(this,new Lx(ty(12))),A2t(!0),this.a=2}function krt(t,e,n){gi(),yw.call(this,t),this.b=e,this.a=n}function $vt(t,e,n){ih(),vR.call(this,e),this.a=t,this.b=n}function xQt(t){Ij.call(this),Gmt(this),this.a=t,this.c=!0}function kQt(t){var e;e=t.c.d.b,t.b=e,t.a=t.c.d,e.a=t.c.d.b=t}function y$(t){var e;hcn(t.a),OUt(t.a),e=new er(t.a),p3t(e)}function sin(t,e){Due(t,!0),xu(t.e.wf(),new Ewt(t,!0,e))}function x$(t,e){return eJt(e),ccn(t,Nt(Cr,Xr,25,e,15,1),e)}function ain(t,e){return Ux(),t==es(e0(e))||t==es(tb(e))}function Nc(t,e){return e==null?ec(Lo(t.f,null)):KC(t.g,e)}function oin(t){return t.b==0?null:(Zn(t.b!=0),lh(t,t.a.a))}function ps(t){return Math.max(Math.min(t,wi),-2147483648)|0}function cin(t,e){var n=Iut[t.charCodeAt(0)];return n??t}function k$(t,e){return g$(t,"set1"),g$(e,"set2"),new vVt(t,e)}function uin(t,e){var n;return n=rcn(t.f,e),Li(Mj(n),t.f.d)}function P9(t,e){var n,r;return n=e,r=new zt,mhe(t,n,r),r.d}function Ert(t,e,n,r){var s;s=new uYt,e.a[n.g]=s,zx(t.b,r,s)}function zvt(t,e,n){var r;r=t.Yg(e),r>=0?t.sh(r,n):M5t(t,e,n)}function J3(t,e,n){C$(),t&&ki(Pft,t,e),t&&ki(dP,t,n)}function EQt(t,e,n){this.i=new he,this.b=t,this.g=e,this.a=n}function E$(t,e,n){this.c=new he,this.e=t,this.f=e,this.b=n}function qvt(t,e,n){this.a=new he,this.e=t,this.f=e,this.c=n}function TQt(t,e){yj(this),this.f=e,this.g=t,d$(this),this._d()}function oD(t,e){var n;n=t.q.getHours(),t.q.setDate(e),E_(t,n)}function CQt(t,e){var n;for(Lr(e),n=t.a;n;n=n.c)e.Od(n.g,n.i)}function _Qt(t){var e;return e=new IR(ty(t.length)),Oyt(e,t),e}function lin(t){function e(){}return e.prototype=t||{},new e}function hin(t,e){return ere(t,e)?(Jee(t),!0):!1}function B0(t,e){if(e==null)throw it(new IC);return cfn(t,e)}function fin(t){if(t.qe())return null;var e=t.n;return QH[e]}function cD(t){return t.Db>>16!=3?null:u(t.Cb,33)}function T1(t){return t.Db>>16!=9?null:u(t.Cb,33)}function SQt(t){return t.Db>>16!=6?null:u(t.Cb,79)}function AQt(t){return t.Db>>16!=7?null:u(t.Cb,235)}function LQt(t){return t.Db>>16!=7?null:u(t.Cb,160)}function es(t){return t.Db>>16!=11?null:u(t.Cb,33)}function MQt(t,e){var n;return n=t.Yg(e),n>=0?t.lh(n):Zst(t,e)}function DQt(t,e){var n;return n=new Wwt(e),Iae(n,t),new Bu(n)}function Hvt(t){var e;return e=t.d,e=t.si(t.f),Dr(t,e),e.Ob()}function IQt(t,e){return t.b+=e.b,t.c+=e.c,t.d+=e.d,t.a+=e.a,t}function Trt(t,e){return b.Math.abs(t)0}function OQt(){this.a=new O0,this.e=new Hs,this.g=0,this.i=0}function PQt(t){this.a=t,this.b=Nt(Mme,ee,1944,t.e.length,0,2)}function Crt(t,e,n){var r;r=xre(t,e,n),t.b=new gz(r.c.length)}function C1(){C1=Z,H2=new Vbt(Dot,0),H1=new Vbt("UP",1)}function T$(){T$=Z,zht=new Ybt(Y1e,0),p_t=new Ybt("FAN",1)}function C$(){C$=Z,Pft=new _r,dP=new _r,OXe(Uge,new JT)}function gin(t){if(t.p!=0)throw it(new Ou);return u9(t.f,0)}function pin(t){if(t.p!=0)throw it(new Ou);return u9(t.k,0)}function FQt(t){return t.Db>>16!=3?null:u(t.Cb,147)}function O8(t){return t.Db>>16!=6?null:u(t.Cb,235)}function Ym(t){return t.Db>>16!=17?null:u(t.Cb,26)}function NQt(t,e){var n=t.a=t.a||[];return n[e]||(n[e]=t.le(e))}function bin(t,e){var n;return n=t.a.get(e),n??new Array}function win(t,e){var n;n=t.q.getHours(),t.q.setMonth(e),E_(t,n)}function ko(t,e,n){return e==null?au(t.f,null,n):sv(t.g,e,n)}function F9(t,e,n,r,s,o){return new z0(t.e,e,t.aj(),n,r,s,o)}function uD(t,e,n){return t.a=Pl(t.a,0,e)+(""+n)+RM(t.a,e),t}function vin(t,e,n){return le(t.a,(c$(),kst(e,n),new Lw(e,n))),t}function Vvt(t){return M2t(t.c),t.e=t.a=t.c,t.c=t.c.c,++t.d,t.a.f}function BQt(t){return M2t(t.e),t.c=t.a=t.e,t.e=t.e.e,--t.d,t.a.f}function oa(t,e){t.d&&mu(t.d.e,t),t.d=e,t.d&&le(t.d.e,t)}function Oa(t,e){t.c&&mu(t.c.g,t),t.c=e,t.c&&le(t.c.g,t)}function Eo(t,e){t.c&&mu(t.c.a,t),t.c=e,t.c&&le(t.c.a,t)}function Uo(t,e){t.i&&mu(t.i.j,t),t.i=e,t.i&&le(t.i.j,t)}function RQt(t,e,n){this.a=e,this.c=t,this.b=(Lr(n),new Bu(n))}function jQt(t,e,n){this.a=e,this.c=t,this.b=(Lr(n),new Bu(n))}function $Qt(t,e){this.a=t,this.c=nc(this.a),this.b=new v$(e)}function min(t){var e;return w2(t),e=new Hs,Ri(t,new Ge(e))}function Km(t,e){if(t<0||t>e)throw it(new yo(Kxt+t+Xxt+e))}function Gvt(t,e){return MKt(t.a,e)?pvt(t,u(e,22).g,null):null}function yin(t){return qit(),Nn(),u(t.a,81).d.e!=0}function zQt(){zQt=Z,Dge=Wr((TR(),lt(ct(Mge,1),oe,538,0,[Mut])))}function qQt(){qQt=Z,wme=Ku(new Vs,(Wa(),Io),(ro(),xO))}function Uvt(){Uvt=Z,vme=Ku(new Vs,(Wa(),Io),(ro(),xO))}function HQt(){HQt=Z,yme=Ku(new Vs,(Wa(),Io),(ro(),xO))}function VQt(){VQt=Z,Fme=bi(new Vs,(Wa(),Io),(ro(),pS))}function Fl(){Fl=Z,Rme=bi(new Vs,(Wa(),Io),(ro(),pS))}function GQt(){GQt=Z,jme=bi(new Vs,(Wa(),Io),(ro(),pS))}function _rt(){_rt=Z,Vme=bi(new Vs,(Wa(),Io),(ro(),pS))}function UQt(){UQt=Z,Mye=Ku(new Vs,(wE(),jS),(p_(),Iht))}function i2(t,e,n,r){this.c=t,this.d=r,Art(this,e),Lrt(this,n)}function Yx(t){this.c=new Zi,this.b=t.b,this.d=t.c,this.a=t.a}function Srt(t){this.a=b.Math.cos(t),this.b=b.Math.sin(t)}function Art(t,e){t.a&&mu(t.a.k,t),t.a=e,t.a&&le(t.a.k,t)}function Lrt(t,e){t.b&&mu(t.b.f,t),t.b=e,t.b&&le(t.b.f,t)}function WQt(t,e){Lnn(t,t.b,t.c),u(t.b.b,65),e&&u(e.b,65).b}function xin(t,e){c3t(t,e),_t(t.Cb,88)&&gy(sl(u(t.Cb,88)),2)}function Mrt(t,e){_t(t.Cb,88)&&gy(sl(u(t.Cb,88)),4),Qc(t,e)}function _$(t,e){_t(t.Cb,179)&&(u(t.Cb,179).tb=null),Qc(t,e)}function Bc(t,e){return to(),ait(e)?new qj(e,t):new BM(e,t)}function kin(t,e){var n,r;n=e.c,r=n!=null,r&&Vx(t,new Um(e.c))}function YQt(t){var e,n;return n=(c8(),e=new xw,e),H8(n,t),n}function KQt(t){var e,n;return n=(c8(),e=new xw,e),H8(n,t),n}function XQt(t,e){var n;return n=new Sh(t),e.c[e.c.length]=n,n}function QQt(t,e){var n;return n=u(sy(Wx(t.a),e),14),n?n.gc():0}function ZQt(t){var e;return w2(t),e=(Z3(),Z3(),SEt),ez(t,e)}function JQt(t){for(var e;;)if(e=t.Pb(),!t.Ob())return e}function Wvt(t,e){fKe.call(this,new Lx(ty(t))),jl(e,ffe),this.a=e}function Qd(t,e,n){aie(e,n,t.gc()),this.c=t,this.a=e,this.b=n-e}function tZt(t,e,n){var r;aie(e,n,t.c.length),r=n-e,wbt(t.c,e,r)}function Ein(t,e){QUt(t,Ar(Ns($p(e,24),Uq)),Ar(Ns(e,Uq)))}function An(t,e){if(t<0||t>=e)throw it(new yo(Kxt+t+Xxt+e))}function Rr(t,e){if(t<0||t>=e)throw it(new sbt(Kxt+t+Xxt+e))}function _n(t,e){this.b=(On(t),t),this.a=e&Ey?e:e|64|md}function eZt(t){IUt(this),fqt(this.a,Dyt(b.Math.max(8,t))<<1)}function _1(t){return Yo(lt(ct(Ws,1),ee,8,0,[t.i.n,t.n,t.a]))}function Tin(){return O1(),lt(ct(fl,1),oe,132,0,[BEt,Ul,Iy])}function Cin(){return Kf(),lt(ct(Oy,1),oe,232,0,[sc,eu,ac])}function _in(){return Qu(),lt(ct(ppe,1),oe,461,0,[Md,fb,kf])}function Sin(){return yu(),lt(ct(wpe,1),oe,462,0,[n1,db,Ef])}function Ain(){return iv(),lt(ct(F7t,1),oe,423,0,[q4,P7t,llt])}function Lin(){return q9(),lt(ct(D7t,1),oe,379,0,[ilt,rlt,slt])}function Min(){return Z9(),lt(ct(P9t,1),oe,378,0,[vht,O9t,yG])}function Din(){return n6(),lt(ct(DTt,1),oe,314,0,[P6,EO,MTt])}function Iin(){return oz(),lt(ct(OTt,1),oe,337,0,[ITt,VV,Llt])}function Oin(){return d2(),lt(ct(D2e,1),oe,450,0,[Ilt,w7,U4])}function Pin(){return nv(),lt(ct(mlt,1),oe,361,0,[Dv,pb,Mv])}function Fin(){return q0(),lt(ct(j2e,1),oe,303,0,[CO,Y4,F6])}function Nin(){return eE(),lt(ct(qlt,1),oe,292,0,[$lt,zlt,TO])}function Bin(){return so(),lt(ct(lme,1),oe,452,0,[OS,tl,nu])}function Rin(){return V0(),lt(ct(H9t,1),oe,339,0,[vb,q9t,Eht])}function jin(){return yz(),lt(ct(W9t,1),oe,375,0,[G9t,_ht,U9t])}function $in(){return Cz(),lt(ct(t_t,1),oe,377,0,[Mht,L7,Yy])}function zin(){return cE(),lt(ct(X9t,1),oe,336,0,[Aht,K9t,PS])}function qin(){return vz(),lt(ct(J9t,1),oe,338,0,[Z9t,Lht,Q9t])}function Hin(){return ev(),lt(ct(Ame,1),oe,454,0,[RO,FS,TG])}function Vin(){return Nz(),lt(ct(Fye,1),oe,442,0,[Ght,Hht,Vht])}function Gin(){return HD(),lt(ct(T_t,1),oe,380,0,[NG,k_t,E_t])}function Uin(){return Fz(),lt(ct(q_t,1),oe,381,0,[z_t,Qht,$_t])}function Win(){return mz(),lt(ct(R_t,1),oe,293,0,[Xht,B_t,N_t])}function Yin(){return KD(),lt(ct(Zht,1),oe,437,0,[jG,$G,zG])}function Kin(){return G0(),lt(ct(DAt,1),oe,334,0,[tU,sp,ZS])}function Xin(){return M1(),lt(ct(mAt,1),oe,272,0,[P7,Zy,F7])}function Qin(t,e){return v2n(t,e,_t(e,99)&&(u(e,18).Bb&Ka)!=0)}function Zin(t,e,n){var r;return r=__(t,e,!1),r.b<=e&&r.a<=n}function nZt(t,e,n){var r;r=new NQ,r.b=e,r.a=n,++e.b,le(t.d,r)}function Jin(t,e){var n;return n=(On(t),t).g,q2t(!!n),On(e),n(e)}function Yvt(t,e){var n,r;return r=C8(t,e),n=t.a.Zc(r),new wVt(t,n)}function tsn(t){return t.Db>>16!=6?null:u(eat(t),235)}function esn(t){if(t.p!=2)throw it(new Ou);return Ar(t.f)&ys}function nsn(t){if(t.p!=2)throw it(new Ou);return Ar(t.k)&ys}function rsn(t){return t.a==(B8(),vU)&&Btt(t,P2n(t.g,t.b)),t.a}function Kx(t){return t.d==(B8(),vU)&&_C(t,Smn(t.g,t.b)),t.d}function J(t){return Zn(t.ar?1:0}function rZt(t,e){var n,r;return n=eit(e),r=n,u(tr(t.c,r),19).a}function iZt(t,e){var n;for(n=t+"";n.length0&&t.a[--t.d]==0;);t.a[t.d++]==0&&(t.e=0)}function EZt(t){return t.a?t.e.length==0?t.a.a:t.a.a+(""+t.e):t.c}function gsn(t){return!!t.a&&al(t.a.a).i!=0&&!(t.b&&mst(t.b))}function psn(t){return!!t.u&&Lc(t.u.a).i!=0&&!(t.n&&vst(t.n))}function TZt(t){return Bnt(t.e.Hd().gc()*t.c.Hd().gc(),16,new gx(t))}function bsn(t,e){return tXt(Tu(t.q.getTime()),Tu(e.q.getTime()))}function wd(t){return u(P1(t,Nt(hlt,Wot,17,t.c.length,0,1)),474)}function lD(t){return u(P1(t,Nt(l0,Yg,10,t.c.length,0,1)),193)}function wsn(t){return Fl(),!Ga(t)&&!(!Ga(t)&&t.c.i.c==t.d.i.c)}function CZt(t,e,n){var r;r=(Lr(t),new Bu(t)),W1n(new RQt(r,e,n))}function hD(t,e,n){var r;r=(Lr(t),new Bu(t)),Y1n(new jQt(r,e,n))}function _Zt(t,e){var n;return n=1-e,t.a[n]=dz(t.a[n],n),dz(t,e)}function SZt(t,e){var n;t.e=new Zpt,n=wy(e),Zs(n,t.c),yue(t,n,0)}function ca(t,e,n,r){var s;s=new iB,s.a=e,s.b=n,s.c=r,ri(t.a,s)}function xe(t,e,n,r){var s;s=new iB,s.a=e,s.b=n,s.c=r,ri(t.b,s)}function pf(t){var e,n,r;return e=new oXt,n=yat(e,t),n5n(e),r=n,r}function tmt(){var t,e,n;return e=(n=(t=new xw,t),n),le(bLt,e),e}function L$(t){return t.j.c=Nt(Qn,De,1,0,5,1),Dvt(t.c),Qnn(t.a),t}function t4(t){return GC(),_t(t.g,10)?u(t.g,10):null}function vsn(t){return Q3(t).dc()?!1:(wQe(t,new ut),!0)}function msn(t){if(!("stack"in t))try{throw t}catch{}return t}function fD(t,e){if(t<0||t>=e)throw it(new yo(Ipn(t,e)));return t}function AZt(t,e,n){if(t<0||en)throw it(new yo(rpn(t,e,n)))}function Prt(t,e){if(Fs(t.a,e),e.d)throw it(new Vo(Pfe));e.d=t}function Frt(t,e){if(e.$modCount!=t.$modCount)throw it(new rh)}function LZt(t,e){return _t(e,42)?Tst(t.a,u(e,42)):!1}function MZt(t,e){return _t(e,42)?Tst(t.a,u(e,42)):!1}function DZt(t,e){return _t(e,42)?Tst(t.a,u(e,42)):!1}function ysn(t,e){return t.a<=t.b?(e.ud(t.a++),!0):!1}function Yw(t){var e;return Bo(t)?(e=t,e==-0?0:e):Lon(t)}function M$(t){var e;return Vp(t),e=new Ye,j3(t.a,new bn(e)),e}function IZt(t){var e;return Vp(t),e=new Ve,j3(t.a,new we(e)),e}function da(t,e){this.a=t,mx.call(this,t),Km(e,t.gc()),this.b=e}function emt(t){this.e=t,this.b=this.e.a.entries(),this.a=new Array}function xsn(t){return Bnt(t.e.Hd().gc()*t.c.Hd().gc(),273,new eR(t))}function D$(t){return new Xc((jl(t,Yat),J$(Pa(Pa(5,t),t/10|0))))}function OZt(t){return u(P1(t,Nt(Jbe,h1e,11,t.c.length,0,1)),1943)}function ksn(t,e,n){return n.f.c.length>0?vvt(t.a,e,n):vvt(t.b,e,n)}function Esn(t,e,n){t.d&&mu(t.d.e,t),t.d=e,t.d&&Hm(t.d.e,n,t)}function Nrt(t,e){bxn(e,t),Bwt(t.d),Bwt(u(Q(t,(Te(),dG)),207))}function B9(t,e){pxn(e,t),Nwt(t.d),Nwt(u(Q(t,(Te(),dG)),207))}function Kw(t,e){var n,r;return n=B0(t,e),r=null,n&&(r=n.fe()),r}function P8(t,e){var n,r;return n=Jm(t,e),r=null,n&&(r=n.ie()),r}function R9(t,e){var n,r;return n=B0(t,e),r=null,n&&(r=n.ie()),r}function R0(t,e){var n,r;return n=B0(t,e),r=null,n&&(r=U4t(n)),r}function Tsn(t,e,n){var r;return r=pE(n),Aq(t.g,r,e),Aq(t.i,e,n),e}function Csn(t,e,n){var r;r=Jhn();try{return MZe(t,e,n)}finally{Nsn(r)}}function PZt(t){var e;e=t.Wg(),this.a=_t(e,69)?u(e,69).Zh():e.Kc()}function Vs(){Yqt.call(this),this.j.c=Nt(Qn,De,1,0,5,1),this.a=-1}function nmt(t,e,n,r){this.d=t,this.n=e,this.g=n,this.o=r,this.p=-1}function FZt(t,e,n,r){this.e=r,this.d=null,this.c=t,this.a=e,this.b=n}function rmt(t,e,n){this.d=new bR(this),this.e=t,this.i=e,this.f=n}function I$(){I$=Z,Hlt=new $bt(qE,0),ZTt=new $bt("TOP_LEFT",1)}function NZt(){NZt=Z,n_t=DXt(pe(1),pe(4)),e_t=DXt(pe(1),pe(2))}function BZt(){BZt=Z,C3e=Wr((qR(),lt(ct(T3e,1),oe,551,0,[tft])))}function RZt(){RZt=Z,E3e=Wr((zR(),lt(ct(eSt,1),oe,482,0,[Jht])))}function jZt(){jZt=Z,H3e=Wr((UC(),lt(ct(kSt,1),oe,530,0,[VO])))}function $Zt(){$Zt=Z,Kpe=Wr((jR(),lt(ct(l7t,1),oe,481,0,[Kut])))}function _sn(){return rv(),lt(ct(qpe,1),oe,406,0,[hO,lO,Wut,Yut])}function Ssn(){return U$(),lt(ct(sV,1),oe,297,0,[jut,OEt,PEt,FEt])}function Asn(){return c_(),lt(ct(Wpe,1),oe,394,0,[bO,lV,hV,wO])}function Lsn(){return u6(),lt(ct(Vpe,1),oe,323,0,[dO,fO,gO,pO])}function Msn(){return nE(),lt(ct(zbe,1),oe,405,0,[Lv,Fy,Py,z4])}function Dsn(){return Tz(),lt(ct(a2e,1),oe,360,0,[wlt,BV,RV,kO])}function zZt(t,e,n,r){return _t(n,54)?new SWt(t,e,n,r):new ovt(t,e,n,r)}function Isn(){return I1(),lt(ct(p2e,1),oe,411,0,[O6,f7,d7,vlt])}function Osn(t){var e;return t.j==(ve(),mr)&&(e=uce(t),Nu(e,Hn))}function Psn(t,e){var n;n=e.a,Oa(n,e.c.d),oa(n,e.d.d),ny(n.a,t.n)}function qZt(t,e){return u(Nw(Jj(u(Ai(t.k,e),15).Oc(),H4)),113)}function HZt(t,e){return u(Nw(t$(u(Ai(t.k,e),15).Oc(),H4)),113)}function Fsn(t){return new _n(Icn(u(t.a.dd(),14).gc(),t.a.cd()),16)}function F8(t){return _t(t,14)?u(t,14).dc():!t.Kc().Ob()}function Xx(t){return GC(),_t(t.g,145)?u(t.g,145):null}function VZt(t){if(t.e.g!=t.b)throw it(new rh);return!!t.c&&t.d>0}function ti(t){return Zn(t.b!=t.d.c),t.c=t.b,t.b=t.b.a,++t.a,t.c.c}function imt(t,e){On(e),ts(t.a,t.c,e),t.c=t.c+1&t.a.length-1,Gse(t)}function Up(t,e){On(e),t.b=t.b-1&t.a.length-1,ts(t.a,t.b,e),Gse(t)}function GZt(t,e){var n;for(n=t.j.c.length;n0&&Dc(t.g,0,e,0,t.i),e}function KZt(t,e){GR();var n;return n=u(tr(dU,t),55),!n||n.wj(e)}function Ysn(t){if(t.p!=1)throw it(new Ou);return Ar(t.f)<<24>>24}function Ksn(t){if(t.p!=1)throw it(new Ou);return Ar(t.k)<<24>>24}function Xsn(t){if(t.p!=7)throw it(new Ou);return Ar(t.k)<<16>>16}function Qsn(t){if(t.p!=7)throw it(new Ou);return Ar(t.f)<<16>>16}function j0(t){var e;for(e=0;t.Ob();)t.Pb(),e=Pa(e,1);return J$(e)}function XZt(t,e){var n;return n=new Im,t.xd(n),n.a+="..",e.yd(n),n.a}function Zsn(t,e,n){var r;r=u(tr(t.g,n),57),le(t.a.c,new fa(e,r))}function Jsn(t,e,n){return Unt(ye(ec(Lo(t.f,e))),ye(ec(Lo(t.f,n))))}function O$(t,e,n){return Mq(t,e,n,_t(e,99)&&(u(e,18).Bb&Ka)!=0)}function tan(t,e,n){return DE(t,e,n,_t(e,99)&&(u(e,18).Bb&Ka)!=0)}function ean(t,e,n){return T2n(t,e,n,_t(e,99)&&(u(e,18).Bb&Ka)!=0)}function omt(t,e){return t==(Vn(),Os)&&e==Os?4:t==Os||e==Os?8:32}function QZt(t,e){return Vt(e)===Vt(t)?"(this Map)":e==null?_u:$o(e)}function nan(t,e){return u(e==null?ec(Lo(t.f,null)):KC(t.g,e),281)}function ZZt(t,e,n){var r;return r=pE(n),ki(t.b,r,e),ki(t.c,e,n),e}function JZt(t,e){var n;for(n=e;n;)jm(t,n.i,n.j),n=es(n);return t}function cmt(t,e){var n;return n=iD(x8(new nit(t,e))),Vj(new nit(t,e)),n}function Zd(t,e){to();var n;return n=u(t,66).Mj(),Ngn(n,e),n.Ok(e)}function ran(t,e,n,r,s){var o;o=L2n(s,n,r),le(e,Spn(s,o)),vgn(t,s,e)}function tJt(t,e,n){t.i=0,t.e=0,e!=n&&(Cre(t,e,n),Tre(t,e,n))}function umt(t,e){var n;n=t.q.getHours(),t.q.setFullYear(e+ab),E_(t,n)}function ian(t,e,n){if(n){var r=n.ee();t.a[e]=r(n)}else delete t.a[e]}function Brt(t,e,n){if(n){var r=n.ee();n=r(n)}else n=void 0;t.a[e]=n}function eJt(t){if(t<0)throw it(new aHt("Negative array size: "+t))}function Lc(t){return t.n||(sl(t),t.n=new PKt(t,ho,t),Ao(t)),t.n}function j9(t){return Zn(t.a=0&&t.a[n]===e[n];n--);return n<0}function aJt(t,e){oE();var n;return n=t.j.g-e.j.g,n!=0?n:0}function oJt(t,e){return On(e),t.a!=null?Hen(e.Kb(t.a)):iV}function P$(t){var e;return t?new Wwt(t):(e=new O0,xit(e,t),e)}function Bl(t,e){var n;return e.b.Kb(Jte(t,e.c.Ee(),(n=new In(e),n)))}function F$(t){M4t(),QUt(this,Ar(Ns($p(t,24),Uq)),Ar(Ns(t,Uq)))}function cJt(){cJt=Z,upe=Wr((Gz(),lt(ct(zEt,1),oe,428,0,[qut,$Et])))}function uJt(){uJt=Z,lpe=Wr((Q$(),lt(ct(HEt,1),oe,427,0,[qEt,Hut])))}function lJt(){lJt=Z,fbe=Wr((Z$(),lt(ct(w7t,1),oe,424,0,[tlt,gV])))}function hJt(){hJt=Z,r2e=Wr((X8(),lt(ct(n2e,1),oe,511,0,[yO,dlt])))}function fJt(){fJt=Z,M2e=Wr((LD(),lt(ct(BTt,1),oe,419,0,[GV,NTt])))}function dJt(){dJt=Z,P2e=Wr((xD(),lt(ct($Tt,1),oe,479,0,[jTt,WV])))}function gJt(){gJt=Z,dme=Wr((pD(),lt(ct(Y9t,1),oe,376,0,[Sht,BO])))}function pJt(){pJt=Z,ume=Wr((CD(),lt(ct(V9t,1),oe,421,0,[Tht,Cht])))}function bJt(){bJt=Z,_2e=Wr((H$(),lt(ct(LTt,1),oe,422,0,[ATt,Alt])))}function wJt(){wJt=Z,z2e=Wr((I$(),lt(ct(JTt,1),oe,420,0,[Hlt,ZTt])))}function vJt(){vJt=Z,iye=Wr((Uf(),lt(ct(rye,1),oe,520,0,[Ky,mb])))}function mJt(){mJt=Z,Pme=Wr(($9(),lt(ct(Ome,1),oe,523,0,[BS,NS])))}function yJt(){yJt=Z,zme=Wr((bd(),lt(ct($me,1),oe,516,0,[zv,ep])))}function xJt(){xJt=Z,Hme=Wr((C1(),lt(ct(qme,1),oe,515,0,[H2,H1])))}function kJt(){kJt=Z,hye=Wr((Gw(),lt(ct(lye,1),oe,455,0,[yb,r5])))}function EJt(){EJt=Z,Lye=Wr((A$(),lt(ct(v_t,1),oe,425,0,[qht,w_t])))}function TJt(){TJt=Z,Pye=Wr((pz(),lt(ct(m_t,1),oe,495,0,[FG,D7])))}function CJt(){CJt=Z,Aye=Wr((T$(),lt(ct(b_t,1),oe,480,0,[zht,p_t])))}function _Jt(){_Jt=Z,Bye=Wr((G$(),lt(ct(x_t,1),oe,426,0,[y_t,Uht])))}function SJt(){SJt=Z,V3e=Wr((jD(),lt(ct(TSt,1),oe,429,0,[VG,ESt])))}function AJt(){AJt=Z,_3e=Wr((bD(),lt(ct(nSt,1),oe,430,0,[eft,qG])))}function $9(){$9=Z,BS=new Hbt("UPPER",0),NS=new Hbt("LOWER",1)}function can(t,e){var n;n=new _x,r2(n,"x",e.a),r2(n,"y",e.b),Vx(t,n)}function uan(t,e){var n;n=new _x,r2(n,"x",e.a),r2(n,"y",e.b),Vx(t,n)}function lan(t,e){var n,r;r=!1;do n=bre(t,e),r=r|n;while(n);return r}function fmt(t,e){var n,r;for(n=e,r=0;n>0;)r+=t.a[n],n-=n&-n;return r}function LJt(t,e){var n;for(n=e;n;)jm(t,-n.i,-n.j),n=es(n);return t}function va(t,e){var n,r;for(On(e),r=t.Kc();r.Ob();)n=r.Pb(),e.td(n)}function MJt(t,e){var n;return n=e.cd(),new Lw(n,t.e.pc(n,u(e.dd(),14)))}function fs(t,e,n,r){var s;s=new xt,s.c=e,s.b=n,s.a=r,r.b=n.a=s,++t.b}function ch(t,e,n){var r;return r=(An(e,t.c.length),t.c[e]),t.c[e]=n,r}function han(t,e,n){return u(e==null?au(t.f,null,n):sv(t.g,e,n),281)}function zrt(t){return t.c&&t.d?Kvt(t.c)+"->"+Kvt(t.d):"e_"+Pw(t)}function N8(t,e){return(w2(t),qC(new Tn(t,new Nmt(e,t.a)))).sd(o7)}function fan(){return Wa(),lt(ct(I7t,1),oe,356,0,[Dd,gb,cu,qc,Io])}function dan(){return ve(),lt(ct(Xa,1),xc,61,0,[Zo,Pn,Hn,mr,Bn])}function gan(t){return AR(),function(){return Csn(t,this,arguments)}}function pan(){return Date.now?Date.now():new Date().getTime()}function Ga(t){return!t.c||!t.d?!1:!!t.c.i&&t.c.i==t.d.i}function DJt(t){if(!t.c.Sb())throw it(new lc);return t.a=!0,t.c.Ub()}function dD(t){t.i=0,CM(t.b,null),CM(t.c,null),t.a=null,t.e=null,++t.g}function dmt(t){kXe.call(this,t==null?_u:$o(t),_t(t,78)?u(t,78):null)}function IJt(t){rfe(),nqt(this),this.a=new Zi,$yt(this,t),ri(this.a,t)}function OJt(){ant(this),this.b=new $e(as,as),this.a=new $e(Cs,Cs)}function PJt(t,e){this.c=0,this.b=e,cUt.call(this,t,17493),this.a=this.c}function qrt(t){N$(),!$1&&(this.c=t,this.e=!0,this.a=new he)}function N$(){N$=Z,$1=!0,Jge=!1,tpe=!1,npe=!1,epe=!1}function gmt(t,e){return _t(e,149)?hn(t.c,u(e,149).c):!1}function pmt(t,e){var n;return n=0,t&&(n+=t.f.a/2),e&&(n+=e.f.a/2),n}function Hrt(t,e){var n;return n=u(Xw(t.d,e),23),n||u(Xw(t.e,e),23)}function FJt(t){this.b=t,nr.call(this,t),this.a=u(Dn(this.b.a,4),126)}function NJt(t){this.b=t,Bx.call(this,t),this.a=u(Dn(this.b.a,4),126)}function sl(t){return t.t||(t.t=new Uzt(t),n_(new sHt(t),0,t.t)),t.t}function ban(){return ao(),lt(ct(XS,1),oe,103,0,[h0,Cf,zh,ng,rg])}function wan(){return l4(),lt(ct(tA,1),oe,249,0,[Eb,iP,IAt,JS,OAt])}function van(){return Qf(),lt(ct(ip,1),oe,175,0,[qn,ea,Pd,V2,rp])}function man(){return uI(),lt(ct(aSt,1),oe,316,0,[rSt,nft,sSt,rft,iSt])}function yan(){return u_(),lt(ct(N9t,1),oe,315,0,[F9t,xht,kht,DS,IS])}function xan(){return x2(),lt(ct(FTt,1),oe,335,0,[Mlt,PTt,Dlt,vS,wS])}function kan(){return AE(),lt(ct(y3e,1),oe,355,0,[i5,G6,GS,VS,US])}function Ean(){return b4(),lt(ct(w2e,1),oe,363,0,[$V,qV,HV,zV,jV])}function Tan(){return dh(),lt(ct(fCt,1),oe,163,0,[MO,ES,bb,TS,jy])}function B8(){B8=Z;var t,e;wU=(c8(),e=new xR,e),vU=(t=new ret,t)}function BJt(t){var e;return t.c||(e=t.r,_t(e,88)&&(t.c=u(e,26))),t.c}function Can(t){return t.e=3,t.d=t.Yb(),t.e!=2?(t.e=0,!0):!1}function Vrt(t){var e,n,r;return e=t&hl,n=t>>22&hl,r=t<0?Z0:0,iu(e,n,r)}function _an(t){var e,n,r,s;for(n=t,r=0,s=n.length;r0?Fie(t,e):rue(t,-e)}function bmt(t,e){return e==0||t.e==0?t:e>0?rue(t,e):Fie(t,-e)}function Mr(t){if(zr(t))return t.c=t.a,t.a.Pb();throw it(new lc)}function jJt(t){var e,n;return e=t.c.i,n=t.d.i,e.k==(Vn(),ks)&&n.k==ks}function Grt(t){var e;return e=new Vw,Mo(e,t),Jt(e,(Te(),So),null),e}function Urt(t,e,n){var r;return r=t.Yg(e),r>=0?t._g(r,n,!0):dv(t,e,n)}function wmt(t,e,n,r){var s;for(s=0;se)throw it(new yo(J4t(t,e,"index")));return t}function Wrt(t,e,n,r){var s;return s=Nt(Cr,Xr,25,e,15,1),j0n(s,t,e,n,r),s}function Aan(t,e){var n;n=t.q.getHours()+(e/60|0),t.q.setMinutes(e),E_(t,n)}function Lan(t,e){return b.Math.min(Wp(e.a,t.d.d.c),Wp(e.b,t.d.d.c))}function Jx(t,e){return ra(e)?e==null?b5t(t.f,null):Zne(t.g,e):b5t(t.f,e)}function L1(t){this.c=t,this.a=new S(this.c.a),this.b=new S(this.c.b)}function B$(){this.e=new he,this.c=new he,this.d=new he,this.b=new he}function VJt(){this.g=new Fpt,this.b=new Fpt,this.a=new he,this.k=new he}function GJt(t,e,n){this.a=t,this.c=e,this.d=n,le(e.e,this),le(n.b,this)}function UJt(t,e){oUt.call(this,e.rd(),e.qd()&-6),On(t),this.a=t,this.b=e}function WJt(t,e){cUt.call(this,e.rd(),e.qd()&-6),On(t),this.a=t,this.b=e}function Tmt(t,e){ent.call(this,e.rd(),e.qd()&-6),On(t),this.a=t,this.b=e}function R$(t,e,n){this.a=t,this.b=e,this.c=n,le(t.t,this),le(e.i,this)}function j$(){this.b=new Zi,this.a=new Zi,this.b=new Zi,this.a=new Zi}function $$(){$$=Z,WS=new Vi("org.eclipse.elk.labels.labelManager")}function YJt(){YJt=Z,ETt=new Ps("separateLayerConnections",(Tz(),wlt))}function Uf(){Uf=Z,Ky=new Ubt("REGULAR",0),mb=new Ubt("CRITICAL",1)}function pD(){pD=Z,Sht=new qbt("STACKED",0),BO=new qbt("SEQUENCED",1)}function bD(){bD=Z,eft=new Zbt("FIXED",0),qG=new Zbt("CENTER_NODE",1)}function Man(t,e){var n;return n=P4n(t,e),t.b=new gz(n.c.length),U3n(t,n)}function Dan(t,e,n){var r;return++t.e,--t.f,r=u(t.d[e].$c(n),133),r.dd()}function KJt(t){var e;return t.a||(e=t.r,_t(e,148)&&(t.a=u(e,148))),t.a}function Cmt(t){if(t.a){if(t.e)return Cmt(t.e)}else return t;return null}function Ian(t,e){return t.pe.p?-1:0}function z$(t,e){return On(e),t.c=0,"Initial capacity must not be negative")}function ZJt(){ZJt=Z,gpe=Wr((Kf(),lt(ct(Oy,1),oe,232,0,[sc,eu,ac])))}function JJt(){JJt=Z,bpe=Wr((Qu(),lt(ct(ppe,1),oe,461,0,[Md,fb,kf])))}function tte(){tte=Z,vpe=Wr((yu(),lt(ct(wpe,1),oe,462,0,[n1,db,Ef])))}function ete(){ete=Z,rpe=Wr((O1(),lt(ct(fl,1),oe,132,0,[BEt,Ul,Iy])))}function nte(){nte=Z,Obe=Wr((q9(),lt(ct(D7t,1),oe,379,0,[ilt,rlt,slt])))}function rte(){rte=Z,Ybe=Wr((iv(),lt(ct(F7t,1),oe,423,0,[q4,P7t,llt])))}function ite(){ite=Z,S2e=Wr((n6(),lt(ct(DTt,1),oe,314,0,[P6,EO,MTt])))}function ste(){ste=Z,A2e=Wr((oz(),lt(ct(OTt,1),oe,337,0,[ITt,VV,Llt])))}function ate(){ate=Z,I2e=Wr((d2(),lt(ct(D2e,1),oe,450,0,[Ilt,w7,U4])))}function ote(){ote=Z,E2e=Wr((nv(),lt(ct(mlt,1),oe,361,0,[Dv,pb,Mv])))}function cte(){cte=Z,$2e=Wr((q0(),lt(ct(j2e,1),oe,303,0,[CO,Y4,F6])))}function ute(){ute=Z,R2e=Wr((eE(),lt(ct(qlt,1),oe,292,0,[$lt,zlt,TO])))}function lte(){lte=Z,ime=Wr((Z9(),lt(ct(P9t,1),oe,378,0,[vht,O9t,yG])))}function hte(){hte=Z,fme=Wr((yz(),lt(ct(W9t,1),oe,375,0,[G9t,_ht,U9t])))}function fte(){fte=Z,cme=Wr((V0(),lt(ct(H9t,1),oe,339,0,[vb,q9t,Eht])))}function dte(){dte=Z,hme=Wr((so(),lt(ct(lme,1),oe,452,0,[OS,tl,nu])))}function gte(){gte=Z,bme=Wr((Cz(),lt(ct(t_t,1),oe,377,0,[Mht,L7,Yy])))}function pte(){pte=Z,gme=Wr((cE(),lt(ct(X9t,1),oe,336,0,[Aht,K9t,PS])))}function bte(){bte=Z,pme=Wr((vz(),lt(ct(J9t,1),oe,338,0,[Z9t,Lht,Q9t])))}function wte(){wte=Z,Lme=Wr((ev(),lt(ct(Ame,1),oe,454,0,[RO,FS,TG])))}function vte(){vte=Z,Nye=Wr((Nz(),lt(ct(Fye,1),oe,442,0,[Ght,Hht,Vht])))}function mte(){mte=Z,Rye=Wr((HD(),lt(ct(T_t,1),oe,380,0,[NG,k_t,E_t])))}function yte(){yte=Z,e3e=Wr((Fz(),lt(ct(q_t,1),oe,381,0,[z_t,Qht,$_t])))}function xte(){xte=Z,t3e=Wr((mz(),lt(ct(R_t,1),oe,293,0,[Xht,B_t,N_t])))}function kte(){kte=Z,k3e=Wr((KD(),lt(ct(Zht,1),oe,437,0,[jG,$G,zG])))}function Ete(){Ete=Z,C4e=Wr((G0(),lt(ct(DAt,1),oe,334,0,[tU,sp,ZS])))}function Tte(){Tte=Z,x4e=Wr((M1(),lt(ct(mAt,1),oe,272,0,[P7,Zy,F7])))}function jan(){return ua(),lt(ct(PAt,1),oe,98,0,[Tb,G1,B7,Y2,g0,Gc])}function o2(t,e){return!t.o&&(t.o=new _l((Jc(),Sb),Hv,t,0)),ist(t.o,e)}function $an(t){return!t.g&&(t.g=new Ik),!t.g.d&&(t.g.d=new Hzt(t)),t.g.d}function zan(t){return!t.g&&(t.g=new Ik),!t.g.a&&(t.g.a=new Vzt(t)),t.g.a}function qan(t){return!t.g&&(t.g=new Ik),!t.g.b&&(t.g.b=new qzt(t)),t.g.b}function wD(t){return!t.g&&(t.g=new Ik),!t.g.c&&(t.g.c=new Gzt(t)),t.g.c}function Han(t,e,n){var r,s;for(s=new tE(e,t),r=0;rn||e=0?t._g(n,!0,!0):dv(t,e,!0)}function aon(t,e){return Ms(Xt(ye(Q(t,(ae(),Fv)))),Xt(ye(Q(e,Fv))))}function Dte(){Dte=Z,Dye=uv(uv(VR(new Vs,(wE(),RS)),(p_(),LG)),Oht)}function oon(t,e,n){var r;return r=xre(t,e,n),t.b=new gz(r.c.length),z5t(t,r)}function con(t){if(t.b<=0)throw it(new lc);return--t.b,t.a-=t.c.c,pe(t.a)}function uon(t){var e;if(!t.a)throw it(new FXt);return e=t.a,t.a=es(t.a),e}function lon(t){for(;!t.a;)if(!mYt(t.c,new ze(t)))return!1;return!0}function e6(t){var e;return Lr(t),_t(t,198)?(e=u(t,198),e):new btt(t)}function hon(t){V$(),u(t.We((ui(),Qy)),174).Fc((Zu(),sP)),t.Ye(kft,null)}function V$(){V$=Z,W3e=new LZ,K3e=new MZ,Y3e=Kun((ui(),kft),W3e,xb,K3e)}function G$(){G$=Z,y_t=new Qbt("LEAF_NUMBER",0),Uht=new Qbt("NODE_SIZE",1)}function fon(t,e,n){t.a=e,t.c=n,t.b.a.$b(),Ah(t.d),t.e.a.c=Nt(Qn,De,1,0,5,1)}function tit(t){t.a=Nt(Cr,Xr,25,t.b+1,15,1),t.c=Nt(Cr,Xr,25,t.b,15,1),t.d=0}function don(t,e){t.a.ue(e.d,t.b)>0&&(le(t.c,new $wt(e.c,e.d,t.d)),t.b=e.d)}function Fmt(t,e){if(t.g==null||e>=t.i)throw it(new nnt(e,t.i));return t.g[e]}function Ite(t,e,n){if(sE(t,n),n!=null&&!t.wj(n))throw it(new tet);return n}function Ote(t){var e;if(t.Ek())for(e=t.i-1;e>=0;--e)At(t,e);return amt(t)}function gon(t){var e,n;if(!t.b)return null;for(n=t.b;e=n.a[0];)n=e;return n}function pon(t,e){var n,r;return eJt(e),n=(r=t.slice(0,e),Bmt(r,t)),n.length=e,n}function $8(t,e,n,r){var s;r=(Z3(),r||_Et),s=t.slice(e,n),t5t(s,t,e,n,-e,r)}function uh(t,e,n,r,s){return e<0?dv(t,n,r):u(n,66).Nj().Pj(t,t.yh(),e,r,s)}function bon(t){return _t(t,172)?""+u(t,172).a:t==null?null:$o(t)}function won(t){return _t(t,172)?""+u(t,172).a:t==null?null:$o(t)}function Pte(t,e){if(e.a)throw it(new Vo(Pfe));Fs(t.a,e),e.a=t,!t.j&&(t.j=e)}function Nmt(t,e){ent.call(this,e.rd(),e.qd()&-16449),On(t),this.a=t,this.c=e}function Fte(t,e){var n,r;return r=e/t.c.Hd().gc()|0,n=e%t.c.Hd().gc(),t6(t,r,n)}function Qu(){Qu=Z,Md=new Let(y6,0),fb=new Let(qE,1),kf=new Let(x6,2)}function U$(){U$=Z,jut=new YR("All",0),OEt=new MUt,PEt=new qUt,FEt=new DUt}function Nte(){Nte=Z,Qge=Wr((U$(),lt(ct(sV,1),oe,297,0,[jut,OEt,PEt,FEt])))}function Bte(){Bte=Z,qbe=Wr((nE(),lt(ct(zbe,1),oe,405,0,[Lv,Fy,Py,z4])))}function Rte(){Rte=Z,Hpe=Wr((rv(),lt(ct(qpe,1),oe,406,0,[hO,lO,Wut,Yut])))}function jte(){jte=Z,Gpe=Wr((u6(),lt(ct(Vpe,1),oe,323,0,[dO,fO,gO,pO])))}function $te(){$te=Z,Ype=Wr((c_(),lt(ct(Wpe,1),oe,394,0,[bO,lV,hV,wO])))}function zte(){zte=Z,fye=Wr((wE(),lt(ct(s_t,1),oe,393,0,[AG,RS,$O,jS])))}function qte(){qte=Z,o2e=Wr((Tz(),lt(ct(a2e,1),oe,360,0,[wlt,BV,RV,kO])))}function Hte(){Hte=Z,Jye=Wr((eq(),lt(ct(F_t,1),oe,340,0,[Kht,O_t,P_t,I_t])))}function Vte(){Vte=Z,b2e=Wr((I1(),lt(ct(p2e,1),oe,411,0,[O6,f7,d7,vlt])))}function Gte(){Gte=Z,sme=Wr((cy(),lt(ct(yht,1),oe,197,0,[xG,mht,n5,e5])))}function Ute(){Ute=Z,q4e=Wr((Sl(),lt(ct(z4e,1),oe,396,0,[Ql,qAt,zAt,HAt])))}function Wte(){Wte=Z,S4e=Wr((zl(),lt(ct(_4e,1),oe,285,0,[rP,f0,kb,nP])))}function Yte(){Yte=Z,k4e=Wr((W0(),lt(ct(_ft,1),oe,218,0,[Cft,eP,N7,X6])))}function Kte(){Kte=Z,j4e=Wr((jz(),lt(ct($At,1),oe,311,0,[Lft,BAt,jAt,RAt])))}function Xte(){Xte=Z,B4e=Wr((Al(),lt(ct(rA,1),oe,374,0,[oP,K2,aP,Jy])))}function Qte(){Qte=Z,Dq(),TLt=as,V5e=Cs,CLt=new P3(as),G5e=new P3(Cs)}function xD(){xD=Z,jTt=new jbt(J0,0),WV=new jbt("IMPROVE_STRAIGHTNESS",1)}function von(t,e){return k8(),le(t,new fa(e,pe(e.e.c.length+e.g.c.length)))}function mon(t,e){return k8(),le(t,new fa(e,pe(e.e.c.length+e.g.c.length)))}function Bmt(t,e){return _D(e)!=10&<(ol(e),e.hm,e.__elementTypeId$,_D(e),t),t}function mu(t,e){var n;return n=Ro(t,e,0),n==-1?!1:(Fg(t,n),!0)}function Zte(t,e){var n;return n=u(Jx(t.e,e),387),n?(Hwt(n),n.e):null}function z8(t){var e;return Bo(t)&&(e=0-t,!isNaN(e))?e:Kp(rE(t))}function Ro(t,e,n){for(;n=0?Xz(t,n,!0,!0):dv(t,e,!0)}function qmt(t,e){GC();var n,r;return n=Xx(t),r=Xx(e),!!n&&!!r&&!gse(n.k,r.k)}function kon(t,e){ku(t,e==null||Pj((On(e),e))||isNaN((On(e),e))?0:(On(e),e))}function Eon(t,e){Eu(t,e==null||Pj((On(e),e))||isNaN((On(e),e))?0:(On(e),e))}function Ton(t,e){tv(t,e==null||Pj((On(e),e))||isNaN((On(e),e))?0:(On(e),e))}function Con(t,e){Jw(t,e==null||Pj((On(e),e))||isNaN((On(e),e))?0:(On(e),e))}function ree(t){(this.q?this.q:(wn(),wn(),u0)).Ac(t.q?t.q:(wn(),wn(),u0))}function _on(t,e){return _t(e,99)&&u(e,18).Bb&Ka?new rnt(e,t):new tE(e,t)}function Son(t,e){return _t(e,99)&&u(e,18).Bb&Ka?new rnt(e,t):new tE(e,t)}function iee(t,e){c7t=new vp,Upe=e,hS=t,u(hS.b,65),Amt(hS,c7t,null),Qle(hS)}function sit(t,e,n){var r;return r=t.g[e],p9(t,e,t.oi(e,n)),t.gi(e,n,r),t.ci(),r}function X$(t,e){var n;return n=t.Xc(e),n>=0?(t.$c(n),!0):!1}function ait(t){var e;return t.d!=t.r&&(e=Dh(t),t.e=!!e&&e.Cj()==j0e,t.d=e),t.e}function oit(t,e){var n;for(Lr(t),Lr(e),n=!1;e.Ob();)n=n|t.Fc(e.Pb());return n}function Xw(t,e){var n;return n=u(tr(t.e,e),387),n?(XUt(t,n),n.e):null}function see(t){var e,n;return e=t/60|0,n=t%60,n==0?""+e:""+e+":"+(""+n)}function Wo(t,e){var n,r;return w2(t),r=new Tmt(e,t.a),n=new kYt(r),new Tn(t,n)}function Jm(t,e){var n=t.a[e],r=(_it(),Put)[typeof n];return r?r(n):Uyt(typeof n)}function Aon(t){switch(t.g){case 0:return wi;case 1:return-1;default:return 0}}function Lon(t){return u4t(t,(q8(),oEt))<0?-GQe(rE(t)):t.l+t.m*m6+t.h*C2}function _D(t){return t.__elementTypeCategory$==null?10:t.__elementTypeCategory$}function cit(t){var e;return e=t.b.c.length==0?null:Ne(t.b,0),e!=null&&vit(t,0),e}function aee(t,e){for(;e[0]=0;)++e[0]}function SD(t,e){this.e=e,this.a=Jne(t),this.a<54?this.f=Yw(t):this.c=JD(t)}function oee(t,e,n,r){gi(),yw.call(this,26),this.c=t,this.a=e,this.d=n,this.b=r}function Jd(t,e,n){var r,s;for(r=10,s=0;st.a[r]&&(r=n);return r}function Fon(t,e){var n;return n=av(t.e.c,e.e.c),n==0?Ms(t.e.d,e.e.d):n}function e4(t,e){return e.e==0||t.e==0?s7:(TE(),uat(t,e))}function Non(t,e){if(!t)throw it(new Fn(jwn("Enum constant undefined: %s",e)))}function H9(){H9=Z,Gbe=new xg,Ube=new T3,Hbe=new cK,Vbe=new Vb,Wbe=new uK}function Q$(){Q$=Z,qEt=new Obt("BY_SIZE",0),Hut=new Obt("BY_SIZE_AND_SHAPE",1)}function Z$(){Z$=Z,tlt=new Pbt("EADES",0),gV=new Pbt("FRUCHTERMAN_REINGOLD",1)}function LD(){LD=Z,GV=new Rbt("READING_DIRECTION",0),NTt=new Rbt("ROTATION",1)}function uee(){uee=Z,L2e=Wr((x2(),lt(ct(FTt,1),oe,335,0,[Mlt,PTt,Dlt,vS,wS])))}function lee(){lee=Z,ame=Wr((u_(),lt(ct(N9t,1),oe,315,0,[F9t,xht,kht,DS,IS])))}function hee(){hee=Z,v2e=Wr((b4(),lt(ct(w2e,1),oe,363,0,[$V,qV,HV,zV,jV])))}function fee(){fee=Z,q2e=Wr((dh(),lt(ct(fCt,1),oe,163,0,[MO,ES,bb,TS,jy])))}function dee(){dee=Z,S3e=Wr((uI(),lt(ct(aSt,1),oe,316,0,[rSt,nft,sSt,rft,iSt])))}function gee(){gee=Z,X3e=Wr((Qf(),lt(ct(ip,1),oe,175,0,[qn,ea,Pd,V2,rp])))}function pee(){pee=Z,x3e=Wr((AE(),lt(ct(y3e,1),oe,355,0,[i5,G6,GS,VS,US])))}function bee(){bee=Z,Bbe=Wr((Wa(),lt(ct(I7t,1),oe,356,0,[Dd,gb,cu,qc,Io])))}function wee(){wee=Z,y4e=Wr((ao(),lt(ct(XS,1),oe,103,0,[h0,Cf,zh,ng,rg])))}function vee(){vee=Z,L4e=Wr((l4(),lt(ct(tA,1),oe,249,0,[Eb,iP,IAt,JS,OAt])))}function mee(){mee=Z,I4e=Wr((ve(),lt(ct(Xa,1),xc,61,0,[Zo,Pn,Hn,mr,Bn])))}function uit(t,e){var n;return n=u(tr(t.a,e),134),n||(n=new ka,ki(t.a,e,n)),n}function yee(t){var e;return e=u(Q(t,(ae(),Iv)),305),e?e.a==t:!1}function xee(t){var e;return e=u(Q(t,(ae(),Iv)),305),e?e.i==t:!1}function kee(t,e){return On(e),uvt(t),t.d.Ob()?(e.td(t.d.Pb()),!0):!1}function J$(t){return yc(t,wi)>0?wi:yc(t,Sa)<0?Sa:Ar(t)}function ty(t){return t<3?(jl(t,bfe),t+1):t=0&&e=-.01&&t.a<=B1&&(t.a=0),t.b>=-.01&&t.b<=B1&&(t.b=0),t}function Tee(t,e){return e==(Ant(),Ant(),Yge)?t.toLocaleLowerCase():t.toLowerCase()}function Vmt(t){return(t.i&2?"interface ":t.i&1?"":"class ")+(P0(t),t.o)}function Co(t){var e,n;n=(e=new iet,e),Dr((!t.q&&(t.q=new fe(Wh,t,11,10)),t.q),n)}function Bon(t,e){var n;return n=e>0?e-1:e,yHt(QKe(Kee(qwt(new r8,n),t.n),t.j),t.k)}function Ron(t,e,n,r){var s;t.j=-1,d5t(t,W4t(t,e,n),(to(),s=u(e,66).Mj(),s.Ok(r)))}function Cee(t){this.g=t,this.f=new he,this.a=b.Math.min(this.g.c.c,this.g.d.c)}function _ee(t){this.b=new he,this.a=new he,this.c=new he,this.d=new he,this.e=t}function See(t,e){this.a=new _r,this.e=new _r,this.b=(Z9(),yG),this.c=t,this.b=e}function Aee(t,e,n){Ij.call(this),Gmt(this),this.a=t,this.c=n,this.b=e.d,this.f=e.e}function Lee(t){this.d=t,this.c=t.c.vc().Kc(),this.b=null,this.a=null,this.e=(TR(),Mut)}function Qw(t){if(t<0)throw it(new Fn("Illegal Capacity: "+t));this.g=this.ri(t)}function jon(t,e){if(0>t||t>e)throw it(new ibt("fromIndex: 0, toIndex: "+t+Uxt+e))}function $on(t){var e;if(t.a==t.b.a)throw it(new lc);return e=t.a,t.c=e,t.a=t.a.e,e}function tz(t){var e;Rm(!!t.c),e=t.c.a,lh(t.d,t.c),t.b==t.c?t.b=e:--t.a,t.c=null}function ez(t,e){var n;return w2(t),n=new QXt(t,t.a.rd(),t.a.qd()|4,e),new Tn(t,n)}function zon(t,e){var n,r;return n=u(sy(t.d,e),14),n?(r=e,t.e.pc(r,n)):null}function nz(t,e){var n,r;for(r=t.Kc();r.Ob();)n=u(r.Pb(),70),Jt(n,(ae(),j6),e)}function qon(t){var e;return e=Xt(ye(Q(t,(Te(),Jg)))),e<0&&(e=0,Jt(t,Jg,e)),e}function Hon(t,e,n){var r;r=b.Math.max(0,t.b/2-.5),h_(n,r,1),le(e,new eGt(n,r))}function Von(t,e,n){var r;return r=t.a.e[u(e.a,10).p]-t.a.e[u(n.a,10).p],ps(JM(r))}function Mee(t,e,n,r,s,o){var h;h=Grt(r),Oa(h,s),oa(h,o),ln(t.a,r,new Fj(h,e,n.f))}function Dee(t,e){var n;if(n=mI(t.Tg(),e),!n)throw it(new Fn(lb+e+Wct));return n}function ey(t,e){var n;for(n=t;es(n);)if(n=es(n),n==e)return!0;return!1}function Gon(t,e){var n,r,s;for(r=e.a.cd(),n=u(e.a.dd(),14).gc(),s=0;s0&&(t.a/=e,t.b/=e),t}function Rl(t){var e;return t.w?t.w:(e=tsn(t),e&&!e.kh()&&(t.w=e),e)}function Jon(t){var e;return t==null?null:(e=u(t,190),tgn(e,e.length))}function At(t,e){if(t.g==null||e>=t.i)throw it(new nnt(e,t.i));return t.li(e,t.g[e])}function tcn(t){var e,n;for(e=t.a.d.j,n=t.c.d.j;e!=n;)vf(t.b,e),e=Oz(e);vf(t.b,e)}function ecn(t){var e;for(e=0;e=14&&e<=16))),t}function Fee(t,e,n){var r=function(){return t.apply(r,arguments)};return e.apply(r,n),r}function Nee(t,e,n){var r,s;r=e;do s=Xt(t.p[r.p])+n,t.p[r.p]=s,r=t.a[r.p];while(r!=e)}function H8(t,e){var n,r;r=t.a,n=Fln(t,e,null),r!=e&&!t.e&&(n=PE(t,e,n)),n&&n.Fi()}function Umt(t,e){return k1(),wf(sb),b.Math.abs(t-e)<=sb||t==e||isNaN(t)&&isNaN(e)}function Wmt(t,e){return k1(),wf(sb),b.Math.abs(t-e)<=sb||t==e||isNaN(t)&&isNaN(e)}function icn(t,e){return nb(),pu(t.b.c.length-t.e.c.length,e.b.c.length-e.e.c.length)}function n4(t,e){return nXe(U9(t,e,Ar(_a(i0,Xd(Ar(_a(e==null?0:Hi(e),s0)),15)))))}function Bee(){Bee=Z,Zbe=Wr((Vn(),lt(ct(flt,1),oe,267,0,[Os,ta,ks,Hc,Ll,z1])))}function Ree(){Ree=Z,s4e=Wr((hy(),lt(ct(dft,1),oe,291,0,[fft,XO,KO,hft,WO,YO])))}function jee(){jee=Z,J3e=Wr((t0(),lt(ct(LSt,1),oe,248,0,[uft,GO,UO,WG,GG,UG])))}function $ee(){$ee=Z,C2e=Wr((h6(),lt(ct(b7,1),oe,227,0,[p7,bS,g7,Ny,G4,V4])))}function zee(){zee=Z,N2e=Wr((kE(),lt(ct(QTt,1),oe,275,0,[mS,WTt,XTt,KTt,YTt,UTt])))}function qee(){qee=Z,F2e=Wr((oI(),lt(ct(GTt,1),oe,274,0,[YV,qTt,VTt,zTt,HTt,Rlt])))}function Hee(){Hee=Z,rme=Wr((uq(),lt(ct(I9t,1),oe,313,0,[wht,M9t,bht,L9t,D9t,mG])))}function Vee(){Vee=Z,O2e=Wr((dq(),lt(ct(RTt,1),oe,276,0,[Plt,Olt,Nlt,Flt,Blt,UV])))}function Gee(){Gee=Z,gye=Wr((p_(),lt(ct(dye,1),oe,327,0,[LG,Oht,Fht,Pht,Nht,Iht])))}function Uee(){Uee=Z,D4e=Wr((Zu(),lt(ct(eU,1),oe,273,0,[Cb,sg,sP,nA,eA,Q6])))}function Wee(){Wee=Z,E4e=Wr((hq(),lt(ct(CAt,1),oe,312,0,[Sft,kAt,TAt,yAt,EAt,xAt])))}function scn(){return py(),lt(ct(lo,1),oe,93,0,[_f,ig,Sf,Lf,d0,Hh,Yl,Af,qh])}function iz(t,e){var n;n=t.a,t.a=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qm(t,0,n,t.a))}function sz(t,e){var n;n=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qm(t,1,n,t.b))}function V8(t,e){var n;n=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qm(t,3,n,t.b))}function Jw(t,e){var n;n=t.f,t.f=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qm(t,3,n,t.f))}function tv(t,e){var n;n=t.g,t.g=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qm(t,4,n,t.g))}function ku(t,e){var n;n=t.i,t.i=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qm(t,5,n,t.i))}function Eu(t,e){var n;n=t.j,t.j=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qm(t,6,n,t.j))}function G8(t,e){var n;n=t.j,t.j=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qm(t,1,n,t.j))}function U8(t,e){var n;n=t.c,t.c=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qm(t,4,n,t.c))}function W8(t,e){var n;n=t.k,t.k=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qm(t,2,n,t.k))}function hit(t,e){var n;n=t.d,t.d=e,t.Db&4&&!(t.Db&1)&&mi(t,new Rrt(t,2,n,t.d))}function Rg(t,e){var n;n=t.s,t.s=e,t.Db&4&&!(t.Db&1)&&mi(t,new Rrt(t,4,n,t.s))}function ry(t,e){var n;n=t.t,t.t=e,t.Db&4&&!(t.Db&1)&&mi(t,new Rrt(t,5,n,t.t))}function Y8(t,e){var n;n=t.F,t.F=e,t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,5,n,e))}function MD(t,e){var n;return n=u(tr((GR(),dU),t),55),n?n.xj(e):Nt(Qn,De,1,e,5,1)}function H0(t,e){var n,r;return n=e in t.a,n&&(r=B0(t,e).he(),r)?r.a:null}function acn(t,e){var n,r,s;return n=(r=(Sw(),s=new ZT,s),e&&F5t(r,e),r),nyt(n,t),n}function Yee(t,e,n){if(sE(t,n),!t.Bk()&&n!=null&&!t.wj(n))throw it(new tet);return n}function Kee(t,e){return t.n=e,t.n?(t.f=new he,t.e=new he):(t.f=null,t.e=null),t}function jr(t,e,n,r,s,o){var h;return h=rrt(t,e),Qee(n,h),h.i=s?8:0,h.f=r,h.e=s,h.g=o,h}function Ymt(t,e,n,r,s){this.d=e,this.k=r,this.f=s,this.o=-1,this.p=1,this.c=t,this.a=n}function Kmt(t,e,n,r,s){this.d=e,this.k=r,this.f=s,this.o=-1,this.p=2,this.c=t,this.a=n}function Xmt(t,e,n,r,s){this.d=e,this.k=r,this.f=s,this.o=-1,this.p=6,this.c=t,this.a=n}function Qmt(t,e,n,r,s){this.d=e,this.k=r,this.f=s,this.o=-1,this.p=7,this.c=t,this.a=n}function Zmt(t,e,n,r,s){this.d=e,this.j=r,this.e=s,this.o=-1,this.p=4,this.c=t,this.a=n}function Xee(t,e){var n,r,s,o;for(r=e,s=0,o=r.length;s=0),afn(t.d,t.c)<0&&(t.a=t.a-1&t.d.a.length-1,t.b=t.d.c),t.c=-1}function Jmt(t){return t.a<54?t.f<0?-1:t.f>0?1:0:(!t.c&&(t.c=VD(t.f)),t.c).e}function wf(t){if(!(t>=0))throw it(new Fn("tolerance ("+t+") must be >= 0"));return t}function K8(){return oft||(oft=new jue,o4(oft,lt(ct($4,1),De,130,0,[new Tp]))),oft}function so(){so=Z,OS=new zet(N_,0),tl=new zet("INPUT",1),nu=new zet("OUTPUT",2)}function oz(){oz=Z,ITt=new Fet("ARD",0),VV=new Fet("MSD",1),Llt=new Fet("MANUAL",2)}function ev(){ev=Z,RO=new Uet("BARYCENTER",0),FS=new Uet(E1e,1),TG=new Uet(T1e,2)}function DD(t,e){var n;if(n=t.gc(),e<0||e>n)throw it(new qm(e,n));return new wwt(t,e)}function tne(t,e){var n;return _t(e,42)?t.c.Mc(e):(n=ist(t,e),qz(t,e),n)}function bo(t,e,n){return b2(t,e),Qc(t,n),Rg(t,0),ry(t,1),qg(t,!0),zg(t,!0),t}function jl(t,e){if(t<0)throw it(new Fn(e+" cannot be negative but was: "+t));return t}function ene(t,e){var n,r;for(n=0,r=t.gc();n0?u(Ne(n.a,r-1),10):null}function G9(t,e){var n;n=t.k,t.k=e,t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,2,n,t.k))}function uz(t,e){var n;n=t.f,t.f=e,t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,8,n,t.f))}function lz(t,e){var n;n=t.i,t.i=e,t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,7,n,t.i))}function nyt(t,e){var n;n=t.a,t.a=e,t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,8,n,t.a))}function ryt(t,e){var n;n=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,0,n,t.b))}function iyt(t,e){var n;n=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,0,n,t.b))}function syt(t,e){var n;n=t.c,t.c=e,t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,1,n,t.c))}function ayt(t,e){var n;n=t.c,t.c=e,t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,1,n,t.c))}function dit(t,e){var n;n=t.c,t.c=e,t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,4,n,t.c))}function oyt(t,e){var n;n=t.d,t.d=e,t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,1,n,t.d))}function git(t,e){var n;n=t.D,t.D=e,t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,2,n,t.D))}function pit(t,e){t.r>0&&t.c0&&t.g!=0&&pit(t.i,e/t.r*t.i.d))}function pcn(t,e,n){var r;t.b=e,t.a=n,r=(t.a&512)==512?new Vqt:new XL,t.c=Dvn(r,t.b,t.a)}function lne(t,e){return X0(t.e,e)?(to(),ait(e)?new qj(e,t):new BM(e,t)):new nUt(e,t)}function hz(t,e){return eXe(W9(t.a,e,Ar(_a(i0,Xd(Ar(_a(e==null?0:Hi(e),s0)),15)))))}function bcn(t,e,n){return Zm(t,new ge(e),new Kn,new be(n),lt(ct(fl,1),oe,132,0,[]))}function wcn(t){var e,n;return 0>t?new mbt:(e=t+1,n=new PJt(e,t),new Z2t(null,n))}function vcn(t,e){wn();var n;return n=new Lx(1),ra(t)?ko(n,t,e):au(n.f,t,e),new q(n)}function mcn(t,e){var n,r;return n=t.o+t.p,r=e.o+e.p,ne?(e<<=1,e>0?e:D_):e}function bit(t){switch(L2t(t.e!=3),t.e){case 2:return!1;case 0:return!0}return Can(t)}function fne(t,e){var n;return _t(e,8)?(n=u(e,8),t.a==n.a&&t.b==n.b):!1}function wit(t,e,n){var r,s,o;return o=e>>5,s=e&31,r=Ns(Vm(t.n[n][o],Ar(F0(s,1))),3),r}function xcn(t,e){var n,r;for(r=e.vc().Kc();r.Ob();)n=u(r.Pb(),42),aq(t,n.cd(),n.dd())}function kcn(t,e){var n;n=new vp,u(e.b,65),u(e.b,65),u(e.b,65),xu(e.a,new Awt(t,n,e))}function cyt(t,e){var n;n=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,21,n,t.b))}function uyt(t,e){var n;n=t.d,t.d=e,t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,11,n,t.d))}function fz(t,e){var n;n=t.j,t.j=e,t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,13,n,t.j))}function dne(t,e,n){var r,s,o;for(o=t.a.length-1,s=t.b,r=0;r>>31;r!=0&&(t[n]=r)}function Icn(t,e){wn();var n,r;for(r=new he,n=0;n0&&(this.g=this.ri(this.i+(this.i/8|0)+1),t.Qc(this.g))}function ss(t,e){Rj.call(this,E5e,t,e),this.b=this,this.a=ou(t.Tg(),yn(this.e.Tg(),this.c))}function Y9(t,e){var n,r;for(On(e),r=e.vc().Kc();r.Ob();)n=u(r.Pb(),42),t.zc(n.cd(),n.dd())}function qcn(t,e,n){var r;for(r=n.Kc();r.Ob();)if(!O$(t,e,r.Pb()))return!1;return!0}function Hcn(t,e,n,r,s){var o;return n&&(o=Gi(e.Tg(),t.c),s=n.gh(e,-1-(o==-1?r:o),null,s)),s}function Vcn(t,e,n,r,s){var o;return n&&(o=Gi(e.Tg(),t.c),s=n.ih(e,-1-(o==-1?r:o),null,s)),s}function Ine(t){var e;if(t.b==-2){if(t.e==0)e=-1;else for(e=0;t.a[e]==0;e++);t.b=e}return t.b}function One(t){switch(t.g){case 2:return ve(),Bn;case 4:return ve(),Hn;default:return t}}function Pne(t){switch(t.g){case 1:return ve(),mr;case 3:return ve(),Pn;default:return t}}function Gcn(t){var e,n,r;return t.j==(ve(),Pn)&&(e=uce(t),n=Nu(e,Hn),r=Nu(e,Bn),r||r&&n)}function Ucn(t){var e,n;return e=u(t.e&&t.e(),9),n=u(yvt(e,e.length),9),new sh(e,n,e.length)}function Wcn(t,e){vr(e,k1e,1),p3t(dXe(new er((VC(),new hrt(t,!1,!1,new aN))))),or(e)}function ID(t,e){return Nn(),ra(t)?kmt(t,Br(e)):Bm(t)?Unt(t,ye(e)):Nm(t)?Qen(t,Re(e)):t.wd(e)}function pyt(t,e){e.q=t,t.d=b.Math.max(t.d,e.r),t.b+=e.d+(t.a.c.length==0?0:t.c),le(t.a,e)}function Q8(t,e){var n,r,s,o;return s=t.c,n=t.c+t.b,o=t.d,r=t.d+t.a,e.a>s&&e.ao&&e.b1||t.Ob())return++t.a,t.g=0,e=t.i,t.Ob(),e;throw it(new lc)}function sun(t){FUt();var e;return GVt(Dht,t)||(e=new RQ,e.a=t,swt(Dht,t,e)),u(po(Dht,t),635)}function Lh(t){var e,n,r,s;return s=t,r=0,s<0&&(s+=C2,r=Z0),n=ps(s/m6),e=ps(s-n*m6),iu(e,n,r)}function OD(t){var e,n,r;for(r=0,n=new Mx(t.a);n.a>22),s=t.h+e.h+(r>>22),iu(n&hl,r&hl,s&Z0)}function tre(t,e){var n,r,s;return n=t.l-e.l,r=t.m-e.m+(n>>22),s=t.h-e.h+(r>>22),iu(n&hl,r&hl,s&Z0)}function BD(t){var e;return t<128?(e=(pKt(),hEt)[t],!e&&(e=hEt[t]=new hR(t)),e):new hR(t)}function Wi(t){var e;return _t(t,78)?t:(e=t&&t.__java$exception,e||(e=new Hre(t),aqt(e)),e)}function RD(t){if(_t(t,186))return u(t,118);if(t)return null;throw it(new Sx(Kde))}function ere(t,e){if(e==null)return!1;for(;t.a!=t.b;)if(yi(e,Mz(t)))return!0;return!1}function xyt(t){return t.a.Ob()?!0:t.a!=t.d?!1:(t.a=new emt(t.e.f),t.a.Ob())}function Ls(t,e){var n,r;return n=e.Pc(),r=n.length,r==0?!1:(Pwt(t.c,t.c.length,n),!0)}function yun(t,e,n){var r,s;for(s=e.vc().Kc();s.Ob();)r=u(s.Pb(),42),t.yc(r.cd(),r.dd(),n);return t}function nre(t,e){var n,r;for(r=new S(t.b);r.a=0,"Negative initial capacity"),Bj(e>=0,"Non-positive load factor"),Xu(this)}function Sit(t,e,n){return t>=128?!1:t<64?u9(Ns(F0(1,t),n),0):u9(Ns(F0(1,t-64),e),0)}function Lun(t,e){return!t||!e||t==e?!1:av(t.b.c,e.b.c+e.b.b)<0&&av(e.b.c,t.b.c+t.b.b)<0}function gre(t){var e,n,r;return n=t.n,r=t.o,e=t.d,new ah(n.a-e.b,n.b-e.d,r.a+(e.b+e.c),r.b+(e.d+e.a))}function Mun(t){var e,n,r,s;for(n=t.a,r=0,s=n.length;rr)throw it(new qm(e,r));return t.hi()&&(n=DQt(t,n)),t.Vh(e,n)}function zD(t,e,n){return n==null?(!t.q&&(t.q=new _r),Jx(t.q,e)):(!t.q&&(t.q=new _r),ki(t.q,e,n)),t}function Jt(t,e,n){return n==null?(!t.q&&(t.q=new _r),Jx(t.q,e)):(!t.q&&(t.q=new _r),ki(t.q,e,n)),t}function pre(t){var e,n;return n=new B$,Mo(n,t),Jt(n,(Yp(),I6),t),e=new _r,Pyn(t,n,e),a5n(t,n,e),n}function Oun(t){k4();var e,n,r;for(n=Nt(Ws,ee,8,2,0,1),r=0,e=0;e<2;e++)r+=.5,n[e]=g1n(r,t);return n}function bre(t,e){var n,r,s,o;for(n=!1,r=t.a[e].length,o=0;o>=1);return e}function vre(t){var e,n;return n=pI(t.h),n==32?(e=pI(t.m),e==32?pI(t.l)+32:e+20-10):n-12}function Q9(t){var e;return e=t.a[t.b],e==null?null:(ts(t.a,t.b,null),t.b=t.b+1&t.a.length-1,e)}function mre(t){var e,n;return e=t.t-t.k[t.o.p]*t.d+t.j[t.o.p]>t.f,n=t.u+t.e[t.o.p]*t.d>t.f*t.s*t.d,e||n}function _z(t,e,n){var r,s;return r=new Qrt(e,n),s=new zt,t.b=lue(t,t.b,r,s),s.b||++t.c,t.b.b=!1,s.d}function yre(t,e,n){var r,s,o,h;for(h=t_(e,n),o=0,s=h.Kc();s.Ob();)r=u(s.Pb(),11),ki(t.c,r,pe(o++))}function Xp(t){var e,n;for(n=new S(t.a.b);n.an&&(n=t[e]);return n}function xre(t,e,n){var r;return r=new he,R5t(t,e,r,(ve(),Hn),!0,!1),R5t(t,n,r,Bn,!1,!1),r}function Lit(t,e,n){var r,s,o,h;return o=null,h=e,s=Kw(h,"labels"),r=new zGt(t,n),o=(Zbn(r.a,r.b,s),s),o}function Fun(t,e,n,r){var s;return s=C5t(t,e,n,r),!s&&(s=Nln(t,n,r),s&&!C4(t,e,s))?null:s}function Nun(t,e,n,r){var s;return s=_5t(t,e,n,r),!s&&(s=Uit(t,n,r),s&&!C4(t,e,s))?null:s}function kre(t,e){var n;for(n=0;n1||e>=0&&t.b<3)}function qD(t){var e,n,r;for(e=new Pu,r=ei(t,0);r.b!=r.d.c;)n=u(ti(r),8),m8(e,0,new xo(n));return e}function g2(t){var e,n;for(n=new S(t.a.b);n.ar?1:0}function $yt(t,e){return Uce(t,e)?(ln(t.b,u(Q(e,(ae(),By)),21),e),ri(t.a,e),!0):!1}function Yun(t){var e,n;e=u(Q(t,(ae(),Ju)),10),e&&(n=e.c,mu(n.a,e),n.a.c.length==0&&mu(Na(e).b,n))}function Are(t){return $1?Nt(Zge,Mfe,572,0,0,1):u(P1(t.a,Nt(Zge,Mfe,572,t.a.c.length,0,1)),842)}function Kun(t,e,n,r){return c$(),new uet(lt(ct(P2,1),Hq,42,0,[(kst(t,e),new Lw(t,e)),(kst(n,r),new Lw(n,r))]))}function a4(t,e,n){var r,s;return s=(r=new iet,r),bo(s,e,n),Dr((!t.q&&(t.q=new fe(Wh,t,11,10)),t.q),s),s}function Oit(t){var e,n,r,s;for(s=xXe(Z4e,t),n=s.length,r=Nt(Ae,ee,2,n,6,1),e=0;e=t.b.c.length||(zyt(t,2*e+1),n=2*e+2,n=0&&t[r]===e[r];r--);return r<0?0:Cet(Ns(t[r],co),Ns(e[r],co))?-1:1}function Xun(t,e){var n,r;for(r=ei(t,0);r.b!=r.d.c;)n=u(ti(r),214),n.e.length>0&&(e.td(n),n.i&&Vln(n))}function Fit(t,e){var n,r;return r=u(Dn(t.a,4),126),n=Nt(Fft,lut,415,e,0,1),r!=null&&Dc(r,0,n,0,r.length),n}function Mre(t,e){var n;return n=new fat((t.f&256)!=0,t.i,t.a,t.d,(t.f&16)!=0,t.j,t.g,e),t.e!=null||(n.c=t),n}function Qun(t,e){var n,r;for(r=t.Zb().Cc().Kc();r.Ob();)if(n=u(r.Pb(),14),n.Hc(e))return!0;return!1}function Nit(t,e,n,r,s){var o,h;for(h=n;h<=s;h++)for(o=e;o<=r;o++)if(f4(t,o,h))return!0;return!1}function Dre(t,e,n){var r,s,o,h;for(On(n),h=!1,o=t.Zc(e),s=n.Kc();s.Ob();)r=s.Pb(),o.Rb(r),h=!0;return h}function Zun(t,e){var n;return t===e?!0:_t(e,83)?(n=u(e,83),H4t(Rw(t),n.vc())):!1}function Ire(t,e,n){var r,s;for(s=n.Kc();s.Ob();)if(r=u(s.Pb(),42),t.re(e,r.dd()))return!0;return!1}function Ore(t,e,n){return t.d[e.p][n.p]||(Yfn(t,e,n),t.d[e.p][n.p]=!0,t.d[n.p][e.p]=!0),t.a[e.p][n.p]}function sE(t,e){if(!t.ai()&&e==null)throw it(new Fn("The 'no null' constraint is violated"));return e}function aE(t,e){t.D==null&&t.B!=null&&(t.D=t.B,t.B=null),git(t,e==null?null:(On(e),e)),t.C&&t.yk(null)}function Jun(t,e){var n;return!t||t==e||!Us(e,(ae(),Pv))?!1:(n=u(Q(e,(ae(),Pv)),10),n!=t)}function Bit(t){switch(t.i){case 2:return!0;case 1:return!1;case-1:++t.c;default:return t.pl()}}function Pre(t){switch(t.i){case-2:return!0;case-1:return!1;case 1:--t.c;default:return t.ql()}}function Fre(t){TQt.call(this,"The given string does not match the expected format for individual spacings.",t)}function Sl(){Sl=Z,Ql=new uj("ELK",0),qAt=new uj("JSON",1),zAt=new uj("DOT",2),HAt=new uj("SVG",3)}function HD(){HD=Z,NG=new Yet(J0,0),k_t=new Yet("RADIAL_COMPACTION",1),E_t=new Yet("WEDGE_COMPACTION",2)}function O1(){O1=Z,BEt=new _et("CONCURRENT",0),Ul=new _et("IDENTITY_FINISH",1),Iy=new _et("UNORDERED",2)}function Rit(){Rit=Z,f7t=(jR(),Kut),h7t=new mn(o6t,f7t),Xpe=new Vi(c6t),Qpe=new Vi(u6t),Zpe=new Vi(l6t)}function oE(){oE=Z,CTt=new J5,_Tt=new ZK,l2e=new OL,u2e=new JK,c2e=new tX,TTt=(On(c2e),new gn)}function cE(){cE=Z,Aht=new Het("CONSERVATIVE",0),K9t=new Het("CONSERVATIVE_SOFT",1),PS=new Het("SLOPPY",2)}function Sz(){Sz=Z,MAt=new Ow(15),T4e=new eo((ui(),U2),MAt),QS=Y6,_At=o4e,SAt=G2,LAt=c5,AAt=XG}function jit(t,e,n){var r,s,o;for(r=new Zi,o=ei(n,0);o.b!=o.d.c;)s=u(ti(o),8),ri(r,new xo(s));Dre(t,e,r)}function tln(t){var e,n,r;for(e=0,r=Nt(Ws,ee,8,t.b,0,1),n=ei(t,0);n.b!=n.d.c;)r[e++]=u(ti(n),8);return r}function Hyt(t){var e;return e=(!t.a&&(t.a=new fe(ag,t,9,5)),t.a),e.i!=0?vXe(u(At(e,0),678)):null}function eln(t,e){var n;return n=Pa(t,e),Cet(Drt(t,e),0)|PXe(Drt(t,n),0)?n:Pa(qq,Drt(Vm(n,63),1))}function nln(t,e){var n;n=Ie((nst(),vG))!=null&&e.wg()!=null?Xt(ye(e.wg()))/Xt(ye(Ie(vG))):1,ki(t.b,e,n)}function rln(t,e){var n,r;return n=u(t.d.Bc(e),14),n?(r=t.e.hc(),r.Gc(n),t.e.d-=n.gc(),n.$b(),r):null}function Vyt(t,e){var n,r;if(r=t.c[e],r!=0)for(t.c[e]=0,t.d-=r,n=e+1;n0)return T8(e-1,t.a.c.length),Fg(t.a,e-1);throw it(new cqt)}function iln(t,e,n){if(e<0)throw it(new yo(sde+e));ee)throw it(new Fn(Wq+t+Dfe+e));if(t<0||e>n)throw it(new ibt(Wq+t+Yxt+e+Uxt+n))}function Rre(t){if(!t.a||!(t.a.i&8))throw it(new No("Enumeration class expected for layout option "+t.f))}function iy(t){var e;++t.j,t.i==0?t.g=null:t.ikH?t-n>kH:n-t>kH}function zit(t,e){return!t||e&&!t.j||_t(t,124)&&u(t,124).a.b==0?0:t.Re()}function Lz(t,e){return!t||e&&!t.k||_t(t,124)&&u(t,124).a.a==0?0:t.Se()}function VD(t){return rb(),t<0?t!=-1?new j3t(-1,-t):But:t<=10?CEt[ps(t)]:new j3t(1,t)}function Uyt(t){throw _it(),it(new eHt("Unexpected typeof result '"+t+"'; please report this bug to the GWT team"))}function Hre(t){oHt(),yj(this),d$(this),this.e=t,nue(this,t),this.g=t==null?_u:$o(t),this.a="",this.b=t,this.a=""}function Wyt(){this.a=new vZ,this.f=new X$t(this),this.b=new Q$t(this),this.i=new Z$t(this),this.e=new J$t(this)}function Vre(){dKe.call(this,new Mmt(ty(16))),jl(2,ffe),this.b=2,this.a=new Lvt(null,null,0,null),dM(this.a,this.a)}function Z9(){Z9=Z,vht=new jet("DUMMY_NODE_OVER",0),O9t=new jet("DUMMY_NODE_UNDER",1),yG=new jet("EQUAL",2)}function qit(){qit=Z,olt=_Qt(lt(ct(XS,1),oe,103,0,[(ao(),zh),Cf])),clt=_Qt(lt(ct(XS,1),oe,103,0,[rg,ng]))}function Hit(t){return(ve(),Au).Hc(t.j)?Xt(ye(Q(t,(ae(),k7)))):Yo(lt(ct(Ws,1),ee,8,0,[t.i.n,t.n,t.a])).b}function uln(t){var e,n,r,s;for(r=t.b.a,n=r.a.ec().Kc();n.Ob();)e=u(n.Pb(),561),s=new Nce(e,t.e,t.f),le(t.g,s)}function b2(t,e){var n,r,s;r=t.nk(e,null),s=null,e&&(s=(c8(),n=new xw,n),H8(s,t.r)),r=F1(t,s,r),r&&r.Fi()}function lln(t,e){var n,r;for(r=ul(t.d,1)!=0,n=!0;n;)n=!1,n=e.c.Tf(e.e,r),n=n|yI(t,e,r,!1),r=!r;hyt(t)}function Yyt(t,e){var n,r,s;return r=!1,n=e.q.d,e.ds&&(bae(e.q,s),r=n!=e.q.d)),r}function Gre(t,e){var n,r,s,o,h,d,v,k;return v=e.i,k=e.j,r=t.f,s=r.i,o=r.j,h=v-s,d=k-o,n=b.Math.sqrt(h*h+d*d),n}function Kyt(t,e){var n,r;return r=Hz(t),r||(n=(Fat(),woe(e)),r=new Jzt(n),Dr(r.Vk(),t)),r}function GD(t,e){var n,r;return n=u(t.c.Bc(e),14),n?(r=t.hc(),r.Gc(n),t.d-=n.gc(),n.$b(),t.mc(r)):t.jc()}function Ure(t,e){var n;for(n=0;n=t.c.b:t.a<=t.c.b))throw it(new lc);return e=t.a,t.a+=t.c.c,++t.b,pe(e)}function dln(t){var e;return e=new Cee(t),hD(t.a,Wbe,new yl(lt(ct(mO,1),De,369,0,[e]))),e.d&&le(e.f,e.d),e.f}function Vit(t){var e;return e=new b2t(t.a),Mo(e,t),Jt(e,(ae(),_i),t),e.o.a=t.g,e.o.b=t.f,e.n.a=t.i,e.n.b=t.j,e}function gln(t,e,n,r){var s,o;for(o=t.Kc();o.Ob();)s=u(o.Pb(),70),s.n.a=e.a+(r.a-s.o.a)/2,s.n.b=e.b,e.b+=s.o.b+n}function pln(t,e,n){var r,s;for(s=e.a.a.ec().Kc();s.Ob();)if(r=u(s.Pb(),57),sQt(t,r,n))return!0;return!1}function bln(t){var e,n;for(n=new S(t.r);n.a=0?e:-e;r>0;)r%2==0?(n*=n,r=r/2|0):(s*=n,r-=1);return e<0?1/s:s}function yln(t,e){var n,r,s;for(s=1,n=t,r=e>=0?e:-e;r>0;)r%2==0?(n*=n,r=r/2|0):(s*=n,r-=1);return e<0?1/s:s}function Jre(t){var e,n;if(t!=null)for(n=0;n0&&(n=u(Ne(t.a,t.a.c.length-1),570),$yt(n,e))||le(t.a,new IJt(e))}function Cln(t){df();var e,n;e=t.d.c-t.e.c,n=u(t.g,145),xu(n.b,new AC(e)),xu(n.c,new Yb(e)),va(n.i,new dR(e))}function rie(t){var e;return e=new Mp,e.a+="VerticalSegment ",hc(e,t.e),e.a+=" ",Gr(e,_2t(new vet,new S(t.k))),e.a}function _ln(t){var e;return e=u(Xw(t.c.c,""),229),e||(e=new Yx(o8(a8(new xm,""),"Other")),m2(t.c.c,"",e)),e}function J9(t){var e;return t.Db&64?mf(t):(e=new _h(mf(t)),e.a+=" (name: ",go(e,t.zb),e.a+=")",e.a)}function t3t(t,e,n){var r,s;return s=t.sb,t.sb=e,t.Db&4&&!(t.Db&1)&&(r=new Js(t,1,4,s,e),n?n.Ei(r):n=r),n}function Git(t,e){var n,r,s;for(n=0,s=Ko(t,e).Kc();s.Ob();)r=u(s.Pb(),11),n+=Q(r,(ae(),Ju))!=null?1:0;return n}function c4(t,e,n){var r,s,o;for(r=0,o=ei(t,0);o.b!=o.d.c&&(s=Xt(ye(ti(o))),!(s>n));)s>=e&&++r;return r}function Sln(t,e,n){var r,s;return r=new z0(t.e,3,13,null,(s=e.c,s||(dn(),W1)),Hg(t,e),!1),n?n.Ei(r):n=r,n}function Aln(t,e,n){var r,s;return r=new z0(t.e,4,13,(s=e.c,s||(dn(),W1)),null,Hg(t,e),!1),n?n.Ei(r):n=r,n}function e3t(t,e,n){var r,s;return s=t.r,t.r=e,t.Db&4&&!(t.Db&1)&&(r=new Js(t,1,8,s,t.r),n?n.Ei(r):n=r),n}function $g(t,e){var n,r;return n=u(e,676),r=n.vk(),!r&&n.wk(r=_t(e,88)?new JGt(t,u(e,26)):new yZt(t,u(e,148))),r}function UD(t,e,n){var r;t.qi(t.i+1),r=t.oi(e,n),e!=t.i&&Dc(t.g,e,t.g,e+1,t.i-e),ts(t.g,e,r),++t.i,t.bi(e,n),t.ci()}function Lln(t,e){var n;return e.a&&(n=e.a.a.length,t.a?Gr(t.a,t.b):t.a=new Ol(t.d),kZt(t.a,e.a,e.d.length,n)),t}function Mln(t,e){var n,r,s,o;if(e.vi(t.a),o=u(Dn(t.a,8),1936),o!=null)for(n=o,r=0,s=n.length;rn)throw it(new yo(Wq+t+Yxt+e+", size: "+n));if(t>e)throw it(new Fn(Wq+t+Dfe+e))}function fh(t,e,n){if(e<0)i5t(t,n);else{if(!n.Ij())throw it(new Fn(lb+n.ne()+X_));u(n,66).Nj().Vj(t,t.yh(),e)}}function Oln(t,e,n,r,s,o,h,d){var v;for(v=n;o=r||e=65&&t<=70?t-65+10:t>=97&&t<=102?t-97+10:t>=48&&t<=57?t-48:0}function lie(t){var e;return t.Db&64?mf(t):(e=new _h(mf(t)),e.a+=" (source: ",go(e,t.d),e.a+=")",e.a)}function Fln(t,e,n){var r,s;return s=t.a,t.a=e,t.Db&4&&!(t.Db&1)&&(r=new Js(t,1,5,s,t.a),n?T4t(n,r):n=r),n}function zg(t,e){var n;n=(t.Bb&256)!=0,e?t.Bb|=256:t.Bb&=-257,t.Db&4&&!(t.Db&1)&&mi(t,new bf(t,1,2,n,e))}function r3t(t,e){var n;n=(t.Bb&256)!=0,e?t.Bb|=256:t.Bb&=-257,t.Db&4&&!(t.Db&1)&&mi(t,new bf(t,1,8,n,e))}function Iz(t,e){var n;n=(t.Bb&256)!=0,e?t.Bb|=256:t.Bb&=-257,t.Db&4&&!(t.Db&1)&&mi(t,new bf(t,1,8,n,e))}function qg(t,e){var n;n=(t.Bb&512)!=0,e?t.Bb|=512:t.Bb&=-513,t.Db&4&&!(t.Db&1)&&mi(t,new bf(t,1,3,n,e))}function i3t(t,e){var n;n=(t.Bb&512)!=0,e?t.Bb|=512:t.Bb&=-513,t.Db&4&&!(t.Db&1)&&mi(t,new bf(t,1,9,n,e))}function e_(t,e){var n;return t.b==-1&&t.a&&(n=t.a.Gj(),t.b=n?t.c.Xg(t.a.aj(),n):Gi(t.c.Tg(),t.a)),t.c.Og(t.b,e)}function pe(t){var e,n;return t>-129&&t<128?(e=t+128,n=(cKt(),fEt)[e],!n&&(n=fEt[e]=new uM(t)),n):new uM(t)}function uE(t){var e,n;return t>-129&&t<128?(e=t+128,n=(gKt(),bEt)[e],!n&&(n=bEt[e]=new fR(t)),n):new fR(t)}function s3t(t){var e,n;return e=t.k,e==(Vn(),ks)?(n=u(Q(t,(ae(),oc)),61),n==(ve(),Pn)||n==mr):!1}function Nln(t,e,n){var r,s,o;return o=(s=_E(t.b,e),s),o&&(r=u(Pq(TD(t,o),""),26),r)?C5t(t,r,e,n):null}function Uit(t,e,n){var r,s,o;return o=(s=_E(t.b,e),s),o&&(r=u(Pq(TD(t,o),""),26),r)?_5t(t,r,e,n):null}function hie(t,e){var n,r;for(r=new nr(t);r.e!=r.i.gc();)if(n=u(dr(r),138),Vt(e)===Vt(n))return!0;return!1}function n_(t,e,n){var r;if(r=t.gc(),e>r)throw it(new qm(e,r));if(t.hi()&&t.Hc(n))throw it(new Fn(eO));t.Xh(e,n)}function Bln(t,e){var n;if(n=n4(t.i,e),n==null)throw it(new ud("Node did not exist in input."));return byt(e,n),null}function Rln(t,e){var n;if(n=mI(t,e),_t(n,322))return u(n,34);throw it(new Fn(lb+e+"' is not a valid attribute"))}function jln(t,e,n){var r,s;for(s=_t(e,99)&&u(e,18).Bb&Ka?new rnt(e,t):new tE(e,t),r=0;re?1:t==e?t==0?Ms(1/t,1/e):0:isNaN(t)?isNaN(e)?0:1:-1}function Yln(t,e){vr(e,"Sort end labels",1),ls(Ri(Wo(new Tn(null,new _n(t.b,16)),new cN),new K5),new AK),or(e)}function r_(t,e,n){var r,s;return t.ej()?(s=t.fj(),r=Jst(t,e,n),t.$i(t.Zi(7,pe(n),r,e,s)),r):Jst(t,e,n)}function Wit(t,e){var n,r,s;t.d==null?(++t.e,--t.f):(s=e.cd(),n=e.Sh(),r=(n&wi)%t.d.length,Dan(t,r,Lce(t,r,n,s)))}function lE(t,e){var n;n=(t.Bb&xf)!=0,e?t.Bb|=xf:t.Bb&=-1025,t.Db&4&&!(t.Db&1)&&mi(t,new bf(t,1,10,n,e))}function hE(t,e){var n;n=(t.Bb&Ey)!=0,e?t.Bb|=Ey:t.Bb&=-4097,t.Db&4&&!(t.Db&1)&&mi(t,new bf(t,1,12,n,e))}function fE(t,e){var n;n=(t.Bb&Hu)!=0,e?t.Bb|=Hu:t.Bb&=-8193,t.Db&4&&!(t.Db&1)&&mi(t,new bf(t,1,15,n,e))}function dE(t,e){var n;n=(t.Bb&Dy)!=0,e?t.Bb|=Dy:t.Bb&=-2049,t.Db&4&&!(t.Db&1)&&mi(t,new bf(t,1,11,n,e))}function Kln(t,e){var n;return n=Ms(t.b.c,e.b.c),n!=0||(n=Ms(t.a.a,e.a.a),n!=0)?n:Ms(t.a.b,e.a.b)}function Xln(t,e){var n;if(n=tr(t.k,e),n==null)throw it(new ud("Port did not exist in input."));return byt(e,n),null}function Qln(t){var e,n;for(n=Pce(Rl(t)).Kc();n.Ob();)if(e=Br(n.Pb()),k_(t,e))return san((HVt(),l5e),e);return null}function Zln(t,e){var n,r,s,o,h;for(h=ou(t.e.Tg(),e),o=0,n=u(t.g,119),s=0;s>10)+RI&ys,e[1]=(t&1023)+56320&ys,Mh(e,0,e.length)}function Pz(t){var e,n;return n=u(Q(t,(Te(),Wl)),103),n==(ao(),h0)?(e=Xt(ye(Q(t,rG))),e>=1?Cf:ng):n}function ehn(t){switch(u(Q(t,(Te(),eg)),218).g){case 1:return new YX;case 3:return new JX;default:return new WX}}function w2(t){if(t.c)w2(t.c);else if(t.d)throw it(new No("Stream already terminated, can't be modified or used"))}function Xit(t){var e;return t.Db&64?mf(t):(e=new _h(mf(t)),e.a+=" (identifier: ",go(e,t.k),e.a+=")",e.a)}function pie(t,e,n){var r,s;return r=(Sw(),s=new xp,s),iz(r,e),sz(r,n),t&&Dr((!t.a&&(t.a=new As(Gh,t,5)),t.a),r),r}function Qit(t,e,n,r){var s,o;return On(r),On(n),s=t.xc(e),o=s==null?n:MVt(u(s,15),u(n,14)),o==null?t.Bc(e):t.zc(e,o),o}function un(t){var e,n,r,s;return n=(e=u(Vf((r=t.gm,s=r.f,s==Hr?r:s)),9),new sh(e,u(ff(e,e.length),9),0)),vf(n,t),n}function nhn(t,e,n){var r,s;for(s=t.a.ec().Kc();s.Ob();)if(r=u(s.Pb(),10),ND(n,u(Ne(e,r.p),14)))return r;return null}function rhn(t,e,n){var r;try{Bun(t,e,n)}catch(s){throw s=Wi(s),_t(s,597)?(r=s,it(new dmt(r))):it(s)}return e}function Jp(t,e){var n;return Bo(t)&&Bo(e)&&(n=t-e,BI>1,t.k=n-1>>1}function Zit(){M4t();var t,e,n;n=Jxn+++Date.now(),t=ps(b.Math.floor(n*$I))&Uq,e=ps(n-t*Gxt),this.a=t^1502,this.b=e^Eot}function U0(t){var e,n,r;for(e=new he,r=new S(t.j);r.a34028234663852886e22?as:e<-34028234663852886e22?Cs:e}function bie(t){return t-=t>>1&1431655765,t=(t>>2&858993459)+(t&858993459),t=(t>>4)+t&252645135,t+=t>>8,t+=t>>16,t&63}function wie(t){var e,n,r,s;for(e=new QWt(t.Hd().gc()),s=0,r=e6(t.Hd().Kc());r.Ob();)n=r.Pb(),vin(e,n,pe(s++));return Hgn(e.a)}function uhn(t,e){var n,r,s;for(s=new _r,r=e.vc().Kc();r.Ob();)n=u(r.Pb(),42),ki(s,n.cd(),tun(t,u(n.dd(),15)));return s}function h3t(t,e){t.n.c.length==0&&le(t.n,new E$(t.s,t.t,t.i)),le(t.b,e),W3t(u(Ne(t.n,t.n.c.length-1),211),e),Sle(t,e)}function u4(t){return(t.c!=t.b.b||t.i!=t.g.b)&&(t.a.c=Nt(Qn,De,1,0,5,1),Ls(t.a,t.b),Ls(t.a,t.g),t.c=t.b.b,t.i=t.g.b),t.a}function Jit(t,e){var n,r,s;for(s=0,r=u(e.Kb(t),20).Kc();r.Ob();)n=u(r.Pb(),17),je(Re(Q(n,(ae(),q1))))||++s;return s}function lhn(t,e){var n,r,s;r=t4(e),s=Xt(ye(oy(r,(Te(),Tf)))),n=b.Math.max(0,s/2-.5),h_(e,n,1),le(t,new uGt(e,n))}function dh(){dh=Z,MO=new MM(J0,0),ES=new MM("FIRST",1),bb=new MM(C1e,2),TS=new MM("LAST",3),jy=new MM(_1e,4)}function W0(){W0=Z,Cft=new sj(N_,0),eP=new sj("POLYLINE",1),N7=new sj("ORTHOGONAL",2),X6=new sj("SPLINES",3)}function Fz(){Fz=Z,z_t=new Xet("ASPECT_RATIO_DRIVEN",0),Qht=new Xet("MAX_SCALE_DRIVEN",1),$_t=new Xet("AREA_DRIVEN",2)}function KD(){KD=Z,jG=new Qet("P1_STRUCTURE",0),$G=new Qet("P2_PROCESSING_ORDER",1),zG=new Qet("P3_EXECUTION",2)}function Nz(){Nz=Z,Ght=new Wet("OVERLAP_REMOVAL",0),Hht=new Wet("COMPACTION",1),Vht=new Wet("GRAPH_SIZE_CALCULATION",2)}function av(t,e){return k1(),wf(sb),b.Math.abs(t-e)<=sb||t==e||isNaN(t)&&isNaN(e)?0:te?1:Iw(isNaN(t),isNaN(e))}function vie(t,e){var n,r;for(n=ei(t,0);n.b!=n.d.c;){if(r=pM(ye(ti(n))),r==e)return;if(r>e){Ort(n);break}}eD(n,e)}function an(t,e){var n,r,s,o,h;if(n=e.f,m2(t.c.d,n,e),e.g!=null)for(s=e.g,o=0,h=s.length;oe&&r.ue(t[o-1],t[o])>0;--o)h=t[o],ts(t,o,t[o-1]),ts(t,o-1,h)}function gh(t,e,n,r){if(e<0)M5t(t,n,r);else{if(!n.Ij())throw it(new Fn(lb+n.ne()+X_));u(n,66).Nj().Tj(t,t.yh(),e,r)}}function Bz(t,e){if(e==t.d)return t.e;if(e==t.e)return t.d;throw it(new Fn("Node "+e+" not part of edge "+t))}function fhn(t,e){switch(e.g){case 2:return t.b;case 1:return t.c;case 4:return t.d;case 3:return t.a;default:return!1}}function mie(t,e){switch(e.g){case 2:return t.b;case 1:return t.c;case 4:return t.d;case 3:return t.a;default:return!1}}function f3t(t,e,n,r){switch(e){case 3:return t.f;case 4:return t.g;case 5:return t.i;case 6:return t.j}return n3t(t,e,n,r)}function dhn(t){return t.k!=(Vn(),Os)?!1:N8(new Tn(null,new jw(new ar(lr(Ds(t).a.Kc(),new z)))),new $N)}function ghn(t){return t.e==null?t:(!t.c&&(t.c=new fat((t.f&256)!=0,t.i,t.a,t.d,(t.f&16)!=0,t.j,t.g,null)),t.c)}function phn(t,e){return t.h==NI&&t.m==0&&t.l==0?(e&&(hb=iu(0,0,0)),yUt((q8(),aEt))):(e&&(hb=iu(t.l,t.m,t.h)),iu(0,0,0))}function $o(t){var e;return Array.isArray(t)&&t.im===Et?Ip(ol(t))+"@"+(e=Hi(t)>>>0,e.toString(16)):t.toString()}function i_(t){var e;this.a=(e=u(t.e&&t.e(),9),new sh(e,u(ff(e,e.length),9),0)),this.b=Nt(Qn,De,1,this.a.a.length,5,1)}function bhn(t){var e,n,r;for(this.a=new O0,r=new S(t);r.a0&&(Rr(e-1,t.length),t.charCodeAt(e-1)==58)&&!tst(t,oA,cA))}function tst(t,e,n){var r,s;for(r=0,s=t.length;r=s)return e.c+n;return e.c+e.b.gc()}function xhn(t,e){y8();var n,r,s,o;for(r=Ote(t),s=e,$8(r,0,r.length,s),n=0;n0&&(r+=s,++n);return n>1&&(r+=t.d*(n-1)),r}function g3t(t){var e,n,r;for(r=new Ag,r.a+="[",e=0,n=t.gc();e0&&this.b>0&&Kwt(this.c,this.b,this.a)}function w3t(t){nst(),this.c=A1(lt(ct(w6n,1),De,831,0,[eme])),this.b=new _r,this.a=t,ki(this.b,vG,1),xu(nme,new czt(this))}function yie(t,e){var n;return t.d?Tl(t.b,e)?u(tr(t.b,e),51):(n=e.Kf(),ki(t.b,e,n),n):e.Kf()}function v3t(t,e){var n;return Vt(t)===Vt(e)?!0:_t(e,91)?(n=u(e,91),t.e==n.e&&t.d==n.d&&oan(t,n.a)):!1}function a6(t){switch(ve(),t.g){case 4:return Pn;case 1:return Hn;case 3:return mr;case 2:return Bn;default:return Zo}}function m3t(t,e){switch(e){case 3:return t.f!=0;case 4:return t.g!=0;case 5:return t.i!=0;case 6:return t.j!=0}return vyt(t,e)}function Shn(t){switch(t.g){case 0:return new gZ;case 1:return new tB;default:throw it(new Fn(Ict+(t.f!=null?t.f:""+t.g)))}}function xie(t){switch(t.g){case 0:return new JN;case 1:return new eB;default:throw it(new Fn(Yot+(t.f!=null?t.f:""+t.g)))}}function kie(t){switch(t.g){case 0:return new Qpt;case 1:return new Oqt;default:throw it(new Fn(_H+(t.f!=null?t.f:""+t.g)))}}function Ahn(t){switch(t.g){case 1:return new uZ;case 2:return new jWt;default:throw it(new Fn(Ict+(t.f!=null?t.f:""+t.g)))}}function Lhn(t){var e,n;if(t.b)return t.b;for(n=$1?null:t.d;n;){if(e=$1?null:n.b,e)return e;n=$1?null:n.d}return d8(),NEt}function Mhn(t){var e,n,r;return t.e==0?0:(e=t.d<<5,n=t.a[t.d-1],t.e<0&&(r=Ine(t),r==t.d-1&&(--n,n=n|0)),e-=pI(n),e)}function Dhn(t){var e,n,r;return t>5,e=t&31,r=Nt(Cr,Xr,25,n+1,15,1),r[n]=1<3;)s*=10,--o;t=(t+(s>>1))/s|0}return r.i=t,!0}function Ohn(t){return qit(),Nn(),!!(mie(u(t.a,81).j,u(t.b,103))||u(t.a,81).d.e!=0&&mie(u(t.a,81).j,u(t.b,103)))}function Phn(t){V$(),u(t.We((ui(),xb)),174).Hc((ll(),iU))&&(u(t.We(Qy),174).Fc((Zu(),Q6)),u(t.We(xb),174).Mc(iU))}function Tie(t,e){var n,r;if(e){for(n=0;n=0;--r)for(e=n[r],s=0;s>1,this.k=e-1>>1}function $hn(t,e){vr(e,"End label post-processing",1),ls(Ri(Wo(new Tn(null,new _n(t.b,16)),new kK),new EK),new TK),or(e)}function zhn(t,e,n){var r,s;return r=Xt(t.p[e.i.p])+Xt(t.d[e.i.p])+e.n.b+e.a.b,s=Xt(t.p[n.i.p])+Xt(t.d[n.i.p])+n.n.b+n.a.b,s-r}function qhn(t,e,n){var r,s;for(r=Ns(n,co),s=0;yc(r,0)!=0&&s0&&(Rr(0,e.length),e.charCodeAt(0)==43)?e.substr(1):e))}function Vhn(t){var e;return t==null?null:new Rp((e=$c(t,!0),e.length>0&&(Rr(0,e.length),e.charCodeAt(0)==43)?e.substr(1):e))}function _3t(t,e){var n;return t.i>0&&(e.lengtht.i&&ts(e,t.i,null),e}function Zc(t,e,n){var r,s,o;return t.ej()?(r=t.i,o=t.fj(),UD(t,r,e),s=t.Zi(3,null,e,r,o),n?n.Ei(s):n=s):UD(t,t.i,e),n}function Ghn(t,e,n){var r,s;return r=new z0(t.e,4,10,(s=e.c,_t(s,88)?u(s,26):(dn(),Kh)),null,Hg(t,e),!1),n?n.Ei(r):n=r,n}function Uhn(t,e,n){var r,s;return r=new z0(t.e,3,10,null,(s=e.c,_t(s,88)?u(s,26):(dn(),Kh)),Hg(t,e),!1),n?n.Ei(r):n=r,n}function Sie(t){$m();var e;return e=new xo(u(t.e.We((ui(),c5)),8)),t.B.Hc((ll(),R7))&&(e.a<=0&&(e.a=20),e.b<=0&&(e.b=20)),e}function Aie(t){cy();var e;return(t.q?t.q:(wn(),wn(),u0))._b((Te(),Bv))?e=u(Q(t,Bv),197):e=u(Q(Na(t),AS),197),e}function oy(t,e){var n,r;return r=null,Us(t,(Te(),bG))&&(n=u(Q(t,bG),94),n.Xe(e)&&(r=n.We(e))),r==null&&(r=Q(Na(t),e)),r}function Lie(t,e){var n,r,s;return _t(e,42)?(n=u(e,42),r=n.cd(),s=sy(t.Rc(),r),pd(s,n.dd())&&(s!=null||t.Rc()._b(r))):!1}function ist(t,e){var n,r,s;return t.f>0?(t.qj(),r=e==null?0:Hi(e),s=(r&wi)%t.d.length,n=Lce(t,s,r,e),n!=-1):!1}function Xf(t,e){var n,r,s;return t.f>0&&(t.qj(),r=e==null?0:Hi(e),s=(r&wi)%t.d.length,n=l5t(t,s,r,e),n)?n.dd():null}function XD(t,e){var n,r,s,o;for(o=ou(t.e.Tg(),e),n=u(t.g,119),s=0;s1?S1(F0(e.a[1],32),Ns(e.a[0],co)):Ns(e.a[0],co),Yw(_a(e.e,n))))}function QD(t,e){var n;return Bo(t)&&Bo(e)&&(n=t%e,BI>5,e&=31,s=t.d+n+(e==0?0:1),r=Nt(Cr,Xr,25,s,15,1),W0n(r,t.a,n,e),o=new X3(t.e,s,r),N9(o),o}function A3t(t,e,n){var r,s;r=u(Nc(z7,e),117),s=u(Nc(gA,e),117),n?(ko(z7,t,r),ko(gA,t,s)):(ko(gA,t,r),ko(z7,t,s))}function Nie(t,e,n){var r,s,o;for(s=null,o=t.b;o;){if(r=t.a.ue(e,o.d),n&&r==0)return o;r>=0?o=o.a[1]:(s=o,o=o.a[0])}return s}function Bie(t,e,n){var r,s,o;for(s=null,o=t.b;o;){if(r=t.a.ue(e,o.d),n&&r==0)return o;r<=0?o=o.a[0]:(s=o,o=o.a[1])}return s}function Qhn(t,e,n,r){var s,o,h;return s=!1,I4n(t.f,n,r)&&(kfn(t.f,t.a[e][n],t.a[e][r]),o=t.a[e],h=o[r],o[r]=o[n],o[n]=h,s=!0),s}function L3t(t,e,n,r,s){var o,h,d;for(h=s;e.b!=e.c;)o=u(Hx(e),10),d=u(Ko(o,r).Xb(0),11),t.d[d.p]=h++,n.c[n.c.length]=d;return h}function M3t(t,e,n){var r,s,o,h,d;return h=t.k,d=e.k,r=n[h.g][d.g],s=ye(oy(t,r)),o=ye(oy(e,r)),b.Math.max((On(s),s),(On(o),o))}function Zhn(t,e,n){var r,s,o,h;for(r=n/t.c.length,s=0,h=new S(t);h.a2e3&&(Pge=t,JH=b.setTimeout(sXe,10))),ZH++==0?(Oon((nbt(),rEt)),!0):!1}function tfn(t,e){var n,r,s;for(r=new ar(lr(Ds(t).a.Kc(),new z));zr(r);)if(n=u(Mr(r),17),s=n.d.i,s.c==e)return!1;return!0}function D3t(t,e){var n,r;if(_t(e,245)){r=u(e,245);try{return n=t.vd(r),n==0}catch(s){if(s=Wi(s),!_t(s,205))throw it(s)}}return!1}function efn(){return Error.stackTraceLimit>0?(b.Error.stackTraceLimit=Error.stackTraceLimit=64,!0):"stack"in new Error}function nfn(t,e){return k1(),k1(),wf(sb),(b.Math.abs(t-e)<=sb||t==e||isNaN(t)&&isNaN(e)?0:te?1:Iw(isNaN(t),isNaN(e)))>0}function I3t(t,e){return k1(),k1(),wf(sb),(b.Math.abs(t-e)<=sb||t==e||isNaN(t)&&isNaN(e)?0:te?1:Iw(isNaN(t),isNaN(e)))<0}function $ie(t,e){return k1(),k1(),wf(sb),(b.Math.abs(t-e)<=sb||t==e||isNaN(t)&&isNaN(e)?0:te?1:Iw(isNaN(t),isNaN(e)))<=0}function ast(t,e){for(var n=0;!e[n]||e[n]=="";)n++;for(var r=e[n++];nvot)return n.fh();if(r=n.Zg(),r||n==t)break}return r}function O3t(t){return C$(),_t(t,156)?u(tr(dP,Uge),288).vg(t):Tl(dP,ol(t))?u(tr(dP,ol(t)),288).vg(t):null}function ifn(t){if(Vz(XE,t))return Nn(),r7;if(Vz(Vct,t))return Nn(),F2;throw it(new Fn("Expecting true or false"))}function sfn(t,e){if(e.c==t)return e.d;if(e.d==t)return e.c;throw it(new Fn("Input edge is not connected to the input port."))}function Uie(t,e){return t.e>e.e?1:t.ee.d?t.e:t.d=48&&t<48+b.Math.min(10,10)?t-48:t>=97&&t<97?t-97+10:t>=65&&t<65?t-65+10:-1}function Yie(t,e){var n;return Vt(e)===Vt(t)?!0:!_t(e,21)||(n=u(e,21),n.gc()!=t.gc())?!1:t.Ic(n)}function afn(t,e){var n,r,s,o;return r=t.a.length-1,n=e-t.b&r,o=t.c-e&r,s=t.c-t.b&r,TWt(n=o?(sln(t,e),-1):(aln(t,e),1)}function ofn(t,e){var n,r;for(n=(Rr(e,t.length),t.charCodeAt(e)),r=e+1;re.e?1:t.fe.f?1:Hi(t)-Hi(e)}function Vz(t,e){return On(t),e==null?!1:hn(t,e)?!0:t.length==e.length&&hn(t.toLowerCase(),e.toLowerCase())}function bfn(t,e){var n,r,s,o;for(r=0,s=e.gc();r0&&yc(t,128)<0?(e=Ar(t)+128,n=(dKt(),dEt)[e],!n&&(n=dEt[e]=new Am(t)),n):new Am(t)}function Xie(t,e){var n,r;return n=e.Hh(t.a),n&&(r=Br(Xf((!n.b&&(n.b=new kl((dn(),Qa),cc,n)),n.b),ci)),r!=null)?r:e.ne()}function wfn(t,e){var n,r;return n=e.Hh(t.a),n&&(r=Br(Xf((!n.b&&(n.b=new kl((dn(),Qa),cc,n)),n.b),ci)),r!=null)?r:e.ne()}function vfn(t,e){_rt();var n,r;for(r=new ar(lr(U0(t).a.Kc(),new z));zr(r);)if(n=u(Mr(r),17),n.d.i==e||n.c.i==e)return n;return null}function N3t(t,e,n){this.c=t,this.f=new he,this.e=new Ca,this.j=new Gwt,this.n=new Gwt,this.b=e,this.g=new ah(e.c,e.d,e.b,e.a),this.a=n}function ost(t){var e,n,r,s;for(this.a=new O0,this.d=new Hs,this.e=0,n=t,r=0,s=n.length;r0):!1}function Jie(t){var e;Vt(qe(t,(ui(),s5)))===Vt((G0(),tU))&&(es(t)?(e=u(qe(es(t),s5),334),wo(t,s5,e)):wo(t,s5,ZS))}function kfn(t,e,n){var r,s;qst(t.e,e,n,(ve(),Bn)),qst(t.i,e,n,Hn),t.a&&(s=u(Q(e,(ae(),_i)),11),r=u(Q(n,_i),11),Irt(t.g,s,r))}function tse(t,e,n){var r,s,o;r=e.c.p,o=e.p,t.b[r][o]=new wQt(t,e),n&&(t.a[r][o]=new e8(e),s=u(Q(e,(ae(),Pv)),10),s&&ln(t.d,s,e))}function ese(t,e){var n,r,s;if(le(dV,t),e.Fc(t),n=u(tr(Jut,t),21),n)for(s=n.Kc();s.Ob();)r=u(s.Pb(),33),Ro(dV,r,0)!=-1||ese(r,e)}function Efn(t,e,n){var r;(Jge?(Lhn(t),!0):tpe||npe?(d8(),!0):epe&&(d8(),!1))&&(r=new LYt(e),r.b=n,_gn(t,r))}function cst(t,e){var n;n=!t.A.Hc((Al(),K2))||t.q==(ua(),Gc),t.u.Hc((Zu(),sg))?n?G5n(t,e):Dhe(t,e):t.u.Hc(Cb)&&(n?l5n(t,e):Ghe(t,e))}function bE(t,e){var n,r;if(++t.j,e!=null&&(n=(r=t.a.Cb,_t(r,97)?u(r,97).Jg():null),vbn(e,n))){o6(t.a,4,n);return}o6(t.a,4,u(e,126))}function nse(t,e,n){return new ah(b.Math.min(t.a,e.a)-n/2,b.Math.min(t.b,e.b)-n/2,b.Math.abs(t.a-e.a)+n,b.Math.abs(t.b-e.b)+n)}function Tfn(t,e){var n,r;return n=pu(t.a.c.p,e.a.c.p),n!=0?n:(r=pu(t.a.d.i.p,e.a.d.i.p),r!=0?r:pu(e.a.d.p,t.a.d.p))}function Cfn(t,e,n){var r,s,o,h;return o=e.j,h=n.j,o!=h?o.g-h.g:(r=t.f[e.p],s=t.f[n.p],r==0&&s==0?0:r==0?-1:s==0?1:Ms(r,s))}function rse(t,e,n){var r,s,o;if(!n[e.d])for(n[e.d]=!0,s=new S(u4(e));s.a=s)return s;for(e=e>0?e:0;er&&ts(e,r,null),e}function sse(t,e){var n,r;for(r=t.a.length,e.lengthr&&ts(e,r,null),e}function m2(t,e,n){var r,s,o;return s=u(tr(t.e,e),387),s?(o=awt(s,n),XUt(t,s),o):(r=new Owt(t,e,n),ki(t.e,e,r),kQt(r),null)}function Afn(t){var e;if(t==null)return null;if(e=k2n($c(t,!0)),e==null)throw it(new pet("Invalid hexBinary value: '"+t+"'"));return e}function JD(t){return rb(),yc(t,0)<0?yc(t,-1)!=0?new x4t(-1,z8(t)):But:yc(t,10)<=0?CEt[Ar(t)]:new x4t(1,t)}function lst(){return $q(),lt(ct($pe,1),oe,159,0,[Rpe,Bpe,jpe,Lpe,Ape,Mpe,Ope,Ipe,Dpe,Npe,Fpe,Ppe,_pe,Cpe,Spe,Epe,kpe,Tpe,ype,mpe,xpe,Uut])}function ase(t){var e;this.d=new he,this.j=new Ca,this.g=new Ca,e=t.g.b,this.f=u(Q(Na(e),(Te(),Wl)),103),this.e=Xt(ye(Wz(e,Wy)))}function ose(t){this.b=new he,this.e=new he,this.d=t,this.a=!qC(Ri(new Tn(null,new jw(new L1(t.b))),new Zt(new zN))).sd((Qb(),o7))}function Qf(){Qf=Z,qn=new OM("PARENTS",0),ea=new OM("NODES",1),Pd=new OM("EDGES",2),V2=new OM("PORTS",3),rp=new OM("LABELS",4)}function l4(){l4=Z,Eb=new FM("DISTRIBUTED",0),iP=new FM("JUSTIFIED",1),IAt=new FM("BEGIN",2),JS=new FM(qE,3),OAt=new FM("END",4)}function Lfn(t){var e;switch(e=t.yi(null),e){case 10:return 0;case 15:return 1;case 14:return 2;case 11:return 3;case 21:return 4}return-1}function hst(t){switch(t.g){case 1:return ao(),rg;case 4:return ao(),zh;case 2:return ao(),Cf;case 3:return ao(),ng}return ao(),h0}function Mfn(t,e,n){var r;switch(r=n.q.getFullYear()-ab+ab,r<0&&(r=-r),e){case 1:t.a+=r;break;case 2:Jd(t,r%100,2);break;default:Jd(t,r,e)}}function ei(t,e){var n,r;if(Km(e,t.b),e>=t.b>>1)for(r=t.c,n=t.b;n>e;--n)r=r.b;else for(r=t.a.a,n=0;n=64&&e<128&&(s=S1(s,F0(1,e-64)));return s}function Wz(t,e){var n,r;return r=null,Us(t,(ui(),K6))&&(n=u(Q(t,K6),94),n.Xe(e)&&(r=n.We(e))),r==null&&Na(t)&&(r=Q(Na(t),e)),r}function lse(t,e){var n,r,s;s=e.d.i,r=s.k,!(r==(Vn(),Os)||r==z1)&&(n=new ar(lr(Ds(s).a.Kc(),new z)),zr(n)&&ki(t.k,e,u(Mr(n),17)))}function fst(t,e){var n,r,s;return r=yn(t.Tg(),e),n=e-t.Ah(),n<0?(s=t.Yg(r),s>=0?t.lh(s):Zst(t,r)):n<0?Zst(t,r):u(r,66).Nj().Sj(t,t.yh(),n)}function Ie(t){var e;if(_t(t.a,4)){if(e=O3t(t.a),e==null)throw it(new No(ode+t.b+"'. "+ade+(P0(gP),gP.k)+d8t));return e}else return t.a}function Ofn(t){var e;if(t==null)return null;if(e=J5n($c(t,!0)),e==null)throw it(new pet("Invalid base64Binary value: '"+t+"'"));return e}function dr(t){var e;try{return e=t.i.Xb(t.e),t.mj(),t.g=t.e++,e}catch(n){throw n=Wi(n),_t(n,73)?(t.mj(),it(new lc)):it(n)}}function dst(t){var e;try{return e=t.c.ki(t.e),t.mj(),t.g=t.e++,e}catch(n){throw n=Wi(n),_t(n,73)?(t.mj(),it(new lc)):it(n)}}function o_(){o_=Z,p7t=(ui(),hAt),Qut=HSt,Jpe=W6,g7t=U2,rbe=(sq(),WEt),nbe=GEt,ibe=KEt,ebe=VEt,tbe=(Rit(),h7t),Xut=Xpe,d7t=Qpe,fV=Zpe}function Yz(t){switch(kbt(),this.c=new he,this.d=t,t.g){case 0:case 2:this.a=Mvt(O7t),this.b=as;break;case 3:case 1:this.a=O7t,this.b=Cs}}function hse(t,e,n){var r,s;if(t.c)ku(t.c,t.c.i+e),Eu(t.c,t.c.j+n);else for(s=new S(t.b);s.a0&&(le(t.b,new GYt(e.a,n)),r=e.a.length,0r&&(e.a+=KUt(Nt(xh,yd,25,-r,15,1))))}function fse(t,e){var n,r,s;for(n=t.o,s=u(u(Ai(t.r,e),21),84).Kc();s.Ob();)r=u(s.Pb(),111),r.e.a=N1n(r,n.a),r.e.b=n.b*Xt(ye(r.b.We(uV)))}function Ffn(t,e){var n,r,s,o;return s=t.k,n=Xt(ye(Q(t,(ae(),Fv)))),o=e.k,r=Xt(ye(Q(e,Fv))),o!=(Vn(),ks)?-1:s!=ks?1:n==r?0:n=0?t.hh(e,n,r):(t.eh()&&(r=(s=t.Vg(),s>=0?t.Qg(r):t.eh().ih(t,-1-s,null,r))),t.Sg(e,n,r))}function R3t(t,e){switch(e){case 7:!t.e&&(t.e=new Cn(Ys,t,7,4)),xr(t.e);return;case 8:!t.d&&(t.d=new Cn(Ys,t,8,5)),xr(t.d);return}T3t(t,e)}function Zf(t,e){var n;n=t.Zc(e);try{return n.Pb()}catch(r){throw r=Wi(r),_t(r,109)?it(new yo("Can't get element "+e)):it(r)}}function j3t(t,e){this.e=t,e=0&&(n.d=t.t);break;case 3:t.t>=0&&(n.a=t.t)}t.C&&(n.b=t.C.b,n.c=t.C.c)}function u6(){u6=Z,dO=new QR(Kq,0),fO=new QR(Iot,1),gO=new QR(Oot,2),pO=new QR(Pot,3),dO.a=!1,fO.a=!0,gO.a=!1,pO.a=!0}function c_(){c_=Z,bO=new XR(Kq,0),lV=new XR(Iot,1),hV=new XR(Oot,2),wO=new XR(Pot,3),bO.a=!1,lV.a=!0,hV.a=!1,wO.a=!0}function $fn(t){var e;e=t.a;do e=u(Mr(new ar(lr(jo(e).a.Kc(),new z))),17).c.i,e.k==(Vn(),ta)&&t.b.Fc(e);while(e.k==(Vn(),ta));t.b=l2(t.b)}function zfn(t){var e,n,r;for(r=t.c.a,t.p=(Lr(r),new Bu(r)),n=new S(r);n.an.b)return!0}return!1}function gst(t,e){return ra(t)?!!Sge[e]:t.hm?!!t.hm[e]:Bm(t)?!!_ge[e]:Nm(t)?!!Cge[e]:!1}function wo(t,e,n){return n==null?(!t.o&&(t.o=new _l((Jc(),Sb),Hv,t,0)),qz(t.o,e)):(!t.o&&(t.o=new _l((Jc(),Sb),Hv,t,0)),aq(t.o,e,n)),t}function Gfn(t,e,n,r){var s,o;o=e.Xe((ui(),o5))?u(e.We(o5),21):t.j,s=Pln(o),s!=($q(),Uut)&&(n&&!P3t(s)||V4t(E2n(t,s,r),e))}function Xz(t,e,n,r){var s,o,h;return o=yn(t.Tg(),e),s=e-t.Ah(),s<0?(h=t.Yg(o),h>=0?t._g(h,n,!0):dv(t,o,n)):u(o,66).Nj().Pj(t,t.yh(),s,n,r)}function Ufn(t,e,n,r){var s,o,h;n.mh(e)&&(to(),ait(e)?(s=u(n.ah(e),153),bfn(t,s)):(o=(h=e,h?u(r,49).xh(h):null),o&&YYe(n.ah(e),o)))}function Wfn(t){switch(t.g){case 1:return rv(),hO;case 3:return rv(),lO;case 2:return rv(),Yut;case 4:return rv(),Wut;default:return null}}function $3t(t){switch(typeof t){case Vat:return Vg(t);case Nxt:return ps(t);case b6:return Nn(),t?1231:1237;default:return t==null?0:Pw(t)}}function Yfn(t,e,n){if(t.e)switch(t.b){case 1:Ern(t.c,e,n);break;case 0:Trn(t.c,e,n)}else tJt(t.c,e,n);t.a[e.p][n.p]=t.c.i,t.a[n.p][e.p]=t.c.e}function wse(t){var e,n;if(t==null)return null;for(n=Nt(l0,ee,193,t.length,0,2),e=0;e=0)return s;if(t.Fk()){for(r=0;r=s)throw it(new qm(e,s));if(t.hi()&&(r=t.Xc(n),r>=0&&r!=e))throw it(new Fn(eO));return t.mi(e,n)}function z3t(t,e){if(this.a=u(Lr(t),245),this.b=u(Lr(e),245),t.vd(e)>0||t==(cet(),_ut)||e==(oet(),Sut))throw it(new Fn("Invalid range: "+XZt(t,e)))}function vse(t){var e,n;for(this.b=new he,this.c=t,this.a=!1,n=new S(t.a);n.a0),(e&-e)==e)return ps(e*ul(t,31)*4656612873077393e-25);do n=ul(t,31),r=n%e;while(n-r+(e-1)<0);return ps(r)}function Vg(t){MYt();var e,n,r;return n=":"+t,r=aV[n],r!=null?ps((On(r),r)):(r=REt[n],e=r==null?$wn(t):ps((On(r),r)),prn(),aV[n]=e,e)}function yse(t,e,n){vr(n,"Compound graph preprocessor",1),t.a=new Uw,_he(t,e,null),S3n(t,e),uwn(t),Jt(e,(ae(),rCt),t.a),t.a=null,Xu(t.b),or(n)}function Qfn(t,e,n){switch(n.g){case 1:t.a=e.a/2,t.b=0;break;case 2:t.a=e.a,t.b=e.b/2;break;case 3:t.a=e.a/2,t.b=e.b;break;case 4:t.a=0,t.b=e.b/2}}function Zfn(t){var e,n,r;for(r=u(Ai(t.a,(b4(),qV)),15).Kc();r.Ob();)n=u(r.Pb(),101),e=t4t(n),_8(t,n,e[0],(nv(),Mv),0),_8(t,n,e[1],Dv,1)}function Jfn(t){var e,n,r;for(r=u(Ai(t.a,(b4(),HV)),15).Kc();r.Ob();)n=u(r.Pb(),101),e=t4t(n),_8(t,n,e[0],(nv(),Mv),0),_8(t,n,e[1],Dv,1)}function pst(t){switch(t.g){case 0:return null;case 1:return new yne;case 2:return new Zpt;default:throw it(new Fn(Ict+(t.f!=null?t.f:""+t.g)))}}function tI(t,e,n){var r,s;for(xun(t,e-t.s,n-t.t),s=new S(t.n);s.a1&&(o=Xfn(t,e)),o}function bst(t){var e;return t.f&&t.f.kh()&&(e=u(t.f,49),t.f=u(Zp(t,e),82),t.f!=e&&t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,9,8,e,t.f))),t.f}function wst(t){var e;return t.i&&t.i.kh()&&(e=u(t.i,49),t.i=u(Zp(t,e),82),t.i!=e&&t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,9,7,e,t.i))),t.i}function no(t){var e;return t.b&&t.b.Db&64&&(e=t.b,t.b=u(Zp(t,e),18),t.b!=e&&t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,9,21,e,t.b))),t.b}function Jz(t,e){var n,r,s;t.d==null?(++t.e,++t.f):(r=e.Sh(),bwn(t,t.f+1),s=(r&wi)%t.d.length,n=t.d[s],!n&&(n=t.d[s]=t.uj()),n.Fc(e),++t.f)}function V3t(t,e,n){var r;return e.Kj()?!1:e.Zj()!=-2?(r=e.zj(),r==null?n==null:yi(r,n)):e.Hj()==t.e.Tg()&&n==null}function tq(){var t;jl(16,bfe),t=hne(16),this.b=Nt(Lut,PI,317,t,0,1),this.c=Nt(Lut,PI,317,t,0,1),this.a=null,this.e=null,this.i=0,this.f=t-1,this.g=0}function Y0(t){cwt.call(this),this.k=(Vn(),Os),this.j=(jl(6,ky),new Xc(6)),this.b=(jl(2,ky),new Xc(2)),this.d=new net,this.f=new Hpt,this.a=t}function e1n(t){var e,n;t.c.length<=1||(e=vue(t,(ve(),mr)),aoe(t,u(e.a,19).a,u(e.b,19).a),n=vue(t,Bn),aoe(t,u(n.a,19).a,u(n.b,19).a))}function u_(){u_=Z,F9t=new LM("SIMPLE",0),xht=new LM(Xot,1),kht=new LM("LINEAR_SEGMENTS",2),DS=new LM("BRANDES_KOEPF",3),IS=new LM(q1e,4)}function G3t(t,e,n){jx(u(Q(e,(Te(),cs)),98))||(jmt(t,e,Gg(e,n)),jmt(t,e,Gg(e,(ve(),mr))),jmt(t,e,Gg(e,Pn)),wn(),Zs(e.j,new hM(t)))}function xse(t,e,n,r){var s,o,h;for(s=u(Ai(r?t.a:t.b,e),21),h=s.Kc();h.Ob();)if(o=u(h.Pb(),33),Tq(t,n,o))return!0;return!1}function vst(t){var e,n;for(n=new nr(t);n.e!=n.i.gc();)if(e=u(dr(n),87),e.e||(!e.d&&(e.d=new As(ho,e,1)),e.d).i!=0)return!0;return!1}function mst(t){var e,n;for(n=new nr(t);n.e!=n.i.gc();)if(e=u(dr(n),87),e.e||(!e.d&&(e.d=new As(ho,e,1)),e.d).i!=0)return!0;return!1}function n1n(t){var e,n,r;for(e=0,r=new S(t.c.a);r.a102?-1:t<=57?t-48:t<65?-1:t<=70?t-65+10:t<97?-1:t-97+10}function kst(t,e){if(t==null)throw it(new Sx("null key in entry: null="+e));if(e==null)throw it(new Sx("null value in entry: "+t+"=null"))}function r1n(t,e){for(var n,r;t.Ob();)if(!e.Ob()||(n=t.Pb(),r=e.Pb(),!(Vt(n)===Vt(r)||n!=null&&yi(n,r))))return!1;return!e.Ob()}function Ese(t,e){var n;return n=lt(ct(aa,1),vo,25,15,[zit(t.a[0],e),zit(t.a[1],e),zit(t.a[2],e)]),t.d&&(n[0]=b.Math.max(n[0],n[2]),n[2]=n[0]),n}function Tse(t,e){var n;return n=lt(ct(aa,1),vo,25,15,[Lz(t.a[0],e),Lz(t.a[1],e),Lz(t.a[2],e)]),t.d&&(n[0]=b.Math.max(n[0],n[2]),n[2]=n[0]),n}function x2(){x2=Z,Mlt=new AM("GREEDY",0),PTt=new AM(A1e,1),Dlt=new AM(Xot,2),vS=new AM("MODEL_ORDER",3),wS=new AM("GREEDY_MODEL_ORDER",4)}function Cse(t,e){var n,r,s;for(t.b[e.g]=1,r=ei(e.d,0);r.b!=r.d.c;)n=u(ti(r),188),s=n.c,t.b[s.g]==1?ri(t.a,n):t.b[s.g]==2?t.b[s.g]=1:Cse(t,s)}function i1n(t,e){var n,r,s;for(s=new Xc(e.gc()),r=e.Kc();r.Ob();)n=u(r.Pb(),286),n.c==n.f?EE(t,n,n.c):npn(t,n)||(s.c[s.c.length]=n);return s}function s1n(t,e,n){var r,s,o,h,d;for(d=t.r+e,t.r+=e,t.d+=n,r=n/t.n.c.length,s=0,h=new S(t.n);h.ao&&ts(e,o,null),e}function m1n(t,e){var n,r;if(r=t.gc(),e==null){for(n=0;n0&&(v+=s),k[C]=h,h+=d*(v+r)}function Ose(t){var e,n,r;for(r=t.f,t.n=Nt(aa,vo,25,r,15,1),t.d=Nt(aa,vo,25,r,15,1),e=0;e0?t.c:0),++s;t.b=r,t.d=o}function _1n(t,e){var n,r,s,o,h;for(r=0,s=0,n=0,h=new S(e);h.a0?t.g:0),++n;t.c=s,t.d=r}function Rse(t,e){var n;return n=lt(ct(aa,1),vo,25,15,[H3t(t,(Kf(),sc),e),H3t(t,eu,e),H3t(t,ac,e)]),t.f&&(n[0]=b.Math.max(n[0],n[2]),n[2]=n[0]),n}function S1n(t,e,n){var r;try{Sq(t,e+t.j,n+t.k,!1,!0)}catch(s){throw s=Wi(s),_t(s,73)?(r=s,it(new yo(r.g+Qq+e+Ya+n+")."))):it(s)}}function A1n(t,e,n){var r;try{Sq(t,e+t.j,n+t.k,!0,!1)}catch(s){throw s=Wi(s),_t(s,73)?(r=s,it(new yo(r.g+Qq+e+Ya+n+")."))):it(s)}}function jse(t){var e;Us(t,(Te(),Nv))&&(e=u(Q(t,Nv),21),e.Hc((py(),_f))?(e.Mc(_f),e.Fc(Sf)):e.Hc(Sf)&&(e.Mc(Sf),e.Fc(_f)))}function $se(t){var e;Us(t,(Te(),Nv))&&(e=u(Q(t,Nv),21),e.Hc((py(),Lf))?(e.Mc(Lf),e.Fc(Hh)):e.Hc(Hh)&&(e.Mc(Hh),e.Fc(Lf)))}function L1n(t,e,n){vr(n,"Self-Loop ordering",1),ls(wu(Ri(Ri(Wo(new Tn(null,new _n(e.b,16)),new mN),new rX),new iX),new sX),new Lm(t)),or(n)}function nI(t,e,n,r){var s,o;for(s=e;s0&&(s.b+=e),s}function rq(t,e){var n,r,s;for(s=new Ca,r=t.Kc();r.Ob();)n=u(r.Pb(),37),x_(n,0,s.b),s.b+=n.f.b+e,s.a=b.Math.max(s.a,n.f.a);return s.a>0&&(s.a+=e),s}function qse(t){var e,n,r;for(r=wi,n=new S(t.a);n.a>16==6?t.Cb.ih(t,5,i1,e):(r=no(u(yn((n=u(Dn(t,16),26),n||t.zh()),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function P1n(t){I8();var e=t.e;if(e&&e.stack){var n=e.stack,r=e+` +`,Yve=function(i,s){return AQ(i,s)},gan=function(i,s){const d=i.append("circle").attr("cx",s.cx).attr("cy",s.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),p=i.append("g");p.append("circle").attr("cx",s.cx-15/3).attr("cy",s.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),p.append("circle").attr("cx",s.cx+15/3).attr("cy",s.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function v(T){const _=lD().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);T.append("path").attr("class","mouth").attr("d",_).attr("transform","translate("+s.cx+","+(s.cy+2)+")")}function b(T){const _=lD().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);T.append("path").attr("class","mouth").attr("d",_).attr("transform","translate("+s.cx+","+(s.cy+7)+")")}function y(T){T.append("line").attr("class","mouth").attr("stroke",2).attr("x1",s.cx-5).attr("y1",s.cy+7).attr("x2",s.cx+5).attr("y2",s.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return s.score>3?v(p):s.score<3?b(p):y(p),d},FKe=function(i,s){const u=i.append("circle");return u.attr("cx",s.cx),u.attr("cy",s.cy),u.attr("class","actor-"+s.pos),u.attr("fill",s.fill),u.attr("stroke",s.stroke),u.attr("r",s.r),u.class!==void 0&&u.attr("class",u.class),s.title!==void 0&&u.append("title").text(s.title),u},RKe=function(i,s){return tUt(i,s)},pan=function(i,s){function u(p,v,b,y,T){return p+","+v+" "+(p+b)+","+v+" "+(p+b)+","+(v+y-T)+" "+(p+b-T*1.2)+","+(v+y)+" "+p+","+(v+y)}const d=i.append("polygon");d.attr("points",u(s.x,s.y,50,20,7)),d.attr("class","labelBox"),s.y=s.y+s.labelMargin,s.x=s.x+.5*s.labelMargin,RKe(i,s)},ban=function(i,s,u){const d=i.append("g"),p=qC();p.x=s.x,p.y=s.y,p.fill=s.fill,p.width=u.width*s.taskCount+u.diagramMarginX*(s.taskCount-1),p.height=u.height,p.class="journey-section section-type-"+s.num,p.rx=3,p.ry=3,Yve(d,p),$Ke(u)(s.text,d,p.x,p.y,p.width,p.height,{class:"journey-section section-type-"+s.num},u,s.colour)};let jKe=-1;const man=function(i,s,u){const d=s.x+u.width/2,p=i.append("g");jKe++;const v=300+5*30;p.append("line").attr("id","task"+jKe).attr("x1",d).attr("y1",s.y).attr("x2",d).attr("y2",v).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),gan(p,{cx:d,cy:300+(5-s.score)*30,score:s.score});const b=qC();b.x=s.x,b.y=s.y,b.fill=s.fill,b.width=u.width,b.height=u.height,b.class="task task-type-"+s.num,b.rx=3,b.ry=3,Yve(p,b);let y=s.x+14;s.people.forEach(T=>{const _=s.actors[T].color,A={cx:y,cy:s.y,r:7,fill:_,stroke:"#000",title:T,pos:s.actors[T].position};FKe(p,A),y+=10}),$Ke(u)(s.task,p,b.x,b.y,b.width,b.height,{class:"task"},u,s.colour)},van=function(i,s){Tqe(i,s)},$Ke=function(){function i(p,v,b,y,T,_,A,P){const R=v.append("text").attr("x",b+T/2).attr("y",y+_/2+5).style("font-color",P).style("text-anchor","middle").text(p);d(R,A)}function s(p,v,b,y,T,_,A,P,R){const{taskFontSize:F,taskFontFamily:j}=P,K=p.split(//gi);for(let ee=0;ee{const p=K7[d].color,v={cx:20,cy:u,r:7,fill:p,stroke:"#000",pos:K7[d].position};rj.drawCircle(i,v);const b={x:40,y:u+7,fill:"#666",text:d,textMargin:s.boxTextMargin|5};rj.drawText(i,b),u+=20})}const MJ=qt().journey,iS=MJ.leftMargin,xan=function(i,s,u,d){const p=qt().journey,v=qt().securityLevel;let b;v==="sandbox"&&(b=Ir("#i"+s));const y=Ir(v==="sandbox"?b.nodes()[0].contentDocument.body:"body");qv.init();const T=y.select("#"+s);rj.initGraphics(T);const _=d.db.getTasks(),A=d.db.getDiagramTitle(),P=d.db.getActors();for(const ie in K7)delete K7[ie];let R=0;P.forEach(ie=>{K7[ie]={color:p.actorColours[R%p.actorColours.length],position:R},R++}),yan(T),qv.insert(0,0,iS,Object.keys(K7).length*50),kan(T,_,0);const F=qv.getBounds();A&&T.append("text").text(A).attr("x",iS).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);const j=F.stopy-F.starty+2*p.diagramMarginY,K=iS+F.stopx+2*p.diagramMarginX;Ng(T,j,K,p.useMaxWidth),T.append("line").attr("x1",iS).attr("y1",p.height*4).attr("x2",K-iS-4).attr("y2",p.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");const ee=A?70:0;T.attr("viewBox",`${F.startx} -25 ${K} ${j+ee}`),T.attr("preserveAspectRatio","xMinYMin meet"),T.attr("height",j+ee+25)},qv={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(i,s,u,d){i[s]===void 0?i[s]=u:i[s]=d(u,i[s])},updateBounds:function(i,s,u,d){const p=qt().journey,v=this;let b=0;function y(T){return function(A){b++;const P=v.sequenceItems.length-b+1;v.updateVal(A,"starty",s-P*p.boxMargin,Math.min),v.updateVal(A,"stopy",d+P*p.boxMargin,Math.max),v.updateVal(qv.data,"startx",i-P*p.boxMargin,Math.min),v.updateVal(qv.data,"stopx",u+P*p.boxMargin,Math.max),T!=="activation"&&(v.updateVal(A,"startx",i-P*p.boxMargin,Math.min),v.updateVal(A,"stopx",u+P*p.boxMargin,Math.max),v.updateVal(qv.data,"starty",s-P*p.boxMargin,Math.min),v.updateVal(qv.data,"stopy",d+P*p.boxMargin,Math.max))}}this.sequenceItems.forEach(y())},insert:function(i,s,u,d){const p=Math.min(i,u),v=Math.max(i,u),b=Math.min(s,d),y=Math.max(s,d);this.updateVal(qv.data,"startx",p,Math.min),this.updateVal(qv.data,"starty",b,Math.min),this.updateVal(qv.data,"stopx",v,Math.max),this.updateVal(qv.data,"stopy",y,Math.max),this.updateBounds(p,b,v,y)},bumpVerticalPos:function(i){this.verticalPos=this.verticalPos+i,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},Xve=MJ.sectionFills,zKe=MJ.sectionColours,kan=function(i,s,u){const d=qt().journey;let p="";const v=d.height*2+d.diagramMarginY,b=u+v;let y=0,T="#CCC",_="black",A=0;for(const[P,R]of s.entries()){if(p!==R.section){T=Xve[y%Xve.length],A=y%Xve.length,_=zKe[y%zKe.length];let j=0;const K=R.section;for(let ie=P;ie(K7[K]&&(j[K]=K7[K]),j),{});R.x=P*d.taskMargin+P*d.width+iS,R.y=b,R.width=d.diagramMarginX,R.height=d.diagramMarginY,R.colour=_,R.fill=T,R.num=A,R.actors=F,rj.drawTask(i,R,d),qv.insert(R.x,R.y,R.x+R.width+d.taskMargin,300+5*30)}},qKe={setConf:wan,draw:xan},Ean=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:san,db:BKe,renderer:qKe,styles:dan,init:i=>{qKe.setConf(i.journey),BKe.clear()}}},Symbol.toStringTag,{value:"Module"})),Tan=(i,s,u)=>{const{parentById:d}=u,p=new Set;let v=i;for(;v;){if(p.add(v),v===s)return v;v=d[v]}for(v=s;v;){if(p.has(v))return v;v=d[v]}return"root"};function DJ(i){throw new Error('Could not dynamically require "'+i+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var HKe={exports:{}};(function(i,s){(function(u){i.exports=u()})(function(){return function(){function u(d,p,v){function b(_,A){if(!p[_]){if(!d[_]){var P=typeof DJ=="function"&&DJ;if(!A&&P)return P(_,!0);if(y)return y(_,!0);var R=new Error("Cannot find module '"+_+"'");throw R.code="MODULE_NOT_FOUND",R}var F=p[_]={exports:{}};d[_][0].call(F.exports,function(j){var K=d[_][1][j];return b(K||j)},F,F.exports,u,d,p,v)}return p[_].exports}for(var y=typeof DJ=="function"&&DJ,T=0;T0&&arguments[0]!==void 0?arguments[0]:{},R=P.defaultLayoutOptions,F=R===void 0?{}:R,j=P.algorithms,K=j===void 0?["layered","stress","mrtree","radial","force","disco","sporeOverlap","sporeCompaction","rectpacking"]:j,ee=P.workerFactory,ie=P.workerUrl;if(b(this,_),this.defaultLayoutOptions=F,this.initialized=!1,typeof ie>"u"&&typeof ee>"u")throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'.");var oe=ee;typeof ie<"u"&&typeof ee>"u"&&(oe=function(ae){return new Worker(ae)});var pe=oe(ie);if(typeof pe.postMessage!="function")throw new TypeError("Created worker does not provide the required 'postMessage' function.");this.worker=new T(pe),this.worker.postMessage({cmd:"register",algorithms:K}).then(function(be){return A.initialized=!0}).catch(console.err)}return v(_,[{key:"layout",value:function(P){var R=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},F=R.layoutOptions,j=F===void 0?this.defaultLayoutOptions:F,K=R.logging,ee=K===void 0?!1:K,ie=R.measureExecutionTime,oe=ie===void 0?!1:ie;return P?this.worker.postMessage({cmd:"layout",graph:P,layoutOptions:j,options:{logging:ee,measureExecutionTime:oe}}):Promise.reject(new Error("Missing mandatory parameter 'graph'."))}},{key:"knownLayoutAlgorithms",value:function(){return this.worker.postMessage({cmd:"algorithms"})}},{key:"knownLayoutOptions",value:function(){return this.worker.postMessage({cmd:"options"})}},{key:"knownLayoutCategories",value:function(){return this.worker.postMessage({cmd:"categories"})}},{key:"terminateWorker",value:function(){this.worker.terminate()}}]),_}();p.default=y;var T=function(){function _(A){var P=this;if(b(this,_),A===void 0)throw new Error("Missing mandatory parameter 'worker'.");this.resolvers={},this.worker=A,this.worker.onmessage=function(R){setTimeout(function(){P.receive(P,R)},0)}}return v(_,[{key:"postMessage",value:function(P){var R=this.id||0;this.id=R+1,P.id=R;var F=this;return new Promise(function(j,K){F.resolvers[R]=function(ee,ie){ee?(F.convertGwtStyleError(ee),K(ee)):j(ie)},F.worker.postMessage(P)})}},{key:"receive",value:function(P,R){var F=R.data,j=P.resolvers[F.id];j&&(delete P.resolvers[F.id],F.error?j(F.error):j(null,F.data))}},{key:"terminate",value:function(){this.worker.terminate&&this.worker.terminate()}},{key:"convertGwtStyleError",value:function(P){if(P){var R=P.__java$exception;R&&(R.cause&&R.cause.backingJsObject&&(P.cause=R.cause.backingJsObject,this.convertGwtStyleError(P.cause)),delete P.__java$exception)}}}]),_}()},{}],2:[function(u,d,p){(function(v){(function(){var b;typeof window<"u"?b=window:typeof v<"u"?b=v:typeof self<"u"&&(b=self);var y;function T(){}function _(){}function A(){}function P(){}function R(){}function F(){}function j(){}function K(){}function ee(){}function ie(){}function oe(){}function pe(){}function be(){}function ae(){}function ne(){}function se(){}function de(){}function X(){}function ge(){}function W(){}function xe(){}function U(){}function Fe(){}function Pe(){}function je(){}function Ie(){}function Se(){}function Ce(){}function ke(){}function Ke(){}function Ft(){}function Ne(){}function gn(){}function _t(){}function Et(){}function Gt(){}function ln(){}function xt(){}function Pt(){}function Qe(){}function Dt(){}function kt(){}function On(){}function ht(){}function zr(){}function yt(){}function ji(){}function xi(){}function Ma(){}function zs(){}function ao(){}function Tr(){}function Fn(){}function qn(){}function Un(){}function At(){}function wt(){}function on(){}function fn(){}function An(){}function oo(){}function jo(){}function $o(){}function Pa(){}function wo(){}function _s(){}function tl(){}function da(){}function j0(){}function pm(){}function Ml(){}function Xc(){}function Bc(){}function ja(){}function Ou(){}function Sa(){}function Po(){}function Fc(){}function xa(){}function Ba(){}function ga(){}function kh(){}function lu(){}function o5(){}function Wh(){}function od(){}function Gd(){}function cd(){}function Kd(){}function $g(){}function as(){}function wn(){}function Zr(){}function Zi(){}function nu(){}function vu(){}function Dl(){}function Yh(){}function w1(){}function $0(){}function Wi(){}function Bs(){}function Qa(){}function Bi(){}function Nu(){}function Ot(){}function W3(){}function Kt(){}function z0(){}function Bp(){}function Y3(){}function $9(){}function c5(){}function Eh(){}function zg(){}function bm(){}function z9(){}function mm(){}function u5(){}function y1(){}function ud(){}function ld(){}function q9(){}function Vv(){}function Y7(){}function G2(){}function X7(){}function l5(){}function X3(){}function Fp(){}function nI(){}function ch(){}function oS(){}function hu(){}function $J(){}function vm(){}function zJ(){}function oj(){}function qJ(){}function cj(){}function q0(){}function Q3(){}function cS(){}function uj(){}function K2(){}function J3(){}function HJ(){}function wm(){}function VJ(){}function UJ(){}function Q7(){}function uS(){}function lj(){}function H9(){}function GJ(){}function V9(){}function KJ(){}function WJ(){}function YJ(){}function XJ(){}function QJ(){}function JJ(){}function ZJ(){}function eZ(){}function tZ(){}function nZ(){}function rZ(){}function rI(){}function iZ(){}function sZ(){}function lS(){}function hj(){}function J7(){}function aZ(){}function oZ(){}function cZ(){}function uZ(){}function lZ(){}function hS(){}function iI(){}function fj(){}function h5(){}function f5(){}function hZ(){}function t0(){}function Z7(){}function fZ(){}function U9(){}function Wd(){}function dZ(){}function gZ(){}function pZ(){}function dj(){}function bZ(){}function fS(){}function dS(){}function gj(){}function sI(){}function e8(){}function mZ(){}function pj(){}function bj(){}function vZ(){}function wZ(){}function yZ(){}function xZ(){}function kZ(){}function EZ(){}function Yd(){}function Uv(){}function TZ(){}function gS(){}function pS(){}function CZ(){}function d5(){}function G9(){}function aI(){}function Z3(){}function K9(){}function SZ(){}function bS(){}function hd(){}function mj(){}function oI(){}function W9(){}function cI(){}function vj(){}function _Z(){}function uI(){}function AZ(){}function LZ(){}function wj(){}function t8(){}function yj(){}function n8(){}function MZ(){}function lI(){}function DZ(){}function IZ(){}function OZ(){}function NZ(){}function xj(){}function PZ(){}function BZ(){}function kj(){}function FZ(){}function RZ(){}function jZ(){}function $Z(){}function Ej(){}function zZ(){}function qZ(){}function Tj(){}function Cj(){}function Sj(){}function HZ(){}function VZ(){}function Y9(){}function r8(){}function mS(){}function UZ(){}function hI(){}function vS(){}function fI(){}function _j(){}function Aj(){}function GZ(){}function KZ(){}function WZ(){}function Lj(){}function Mj(){}function YZ(){}function XZ(){}function QZ(){}function JZ(){}function ZZ(){}function Dj(){}function eee(){}function tee(){}function nee(){}function ree(){}function Ij(){}function wS(){}function iee(){}function see(){}function Oj(){}function aee(){}function oee(){}function cee(){}function uee(){}function lee(){}function hee(){}function Nj(){}function fee(){}function Pj(){}function dee(){}function gee(){}function pee(){}function yS(){}function bee(){}function xS(){}function mee(){}function Bj(){}function Fj(){}function Rj(){}function jj(){}function Gv(){}function $j(){}function zj(){}function qj(){}function Hj(){}function vee(){}function i8(){}function dI(){}function g5(){}function wee(){}function yee(){}function kS(){}function Vj(){}function xee(){}function kee(){}function Eee(){}function Tee(){}function Cee(){}function See(){}function _ee(){}function Aee(){}function Lee(){}function Mee(){}function ES(){}function Uj(){}function Dee(){}function Iee(){}function Oee(){}function Nee(){}function Pee(){}function Gj(){}function Kj(){}function Bee(){}function Wj(){}function Yj(){}function Fee(){}function Ree(){}function jee(){}function $ee(){}function zee(){}function qee(){}function Hee(){}function Vee(){}function gI(){}function Uee(){}function X9(){}function Xj(){}function Gee(){}function Kee(){}function Wee(){}function Yee(){}function Xee(){}function Qee(){}function Jee(){}function Zee(){}function ete(){}function tte(){}function nte(){}function rte(){}function ite(){}function ste(){}function ate(){}function s8(){}function Qj(){}function ote(){}function cte(){}function ute(){}function Jj(){}function lte(){}function TS(){}function hte(){}function fte(){}function dte(){}function gte(){}function pte(){}function bte(){}function mte(){}function vte(){}function wte(){}function yte(){}function a8(){}function xte(){}function kte(){}function Ete(){}function Tte(){}function Cte(){}function Ste(){}function _te(){}function Ate(){}function CS(){}function Lte(){}function Mte(){}function Dte(){}function Ite(){}function Ote(){}function Nte(){}function Pte(){}function Bte(){}function o8(){}function Zj(){}function Fte(){}function pI(){}function Rte(){}function jte(){}function $te(){}function zte(){}function qte(){}function Hte(){}function Vte(){}function e$(){}function Ute(){}function t$(){}function Gte(){}function n$(){}function r$(){}function i$(){}function Kte(){}function Wte(){}function s$(){}function Yte(){}function a$(){}function Xte(){}function Qte(){}function bI(){}function Jte(){}function Zte(){}function ene(){}function tne(){}function nne(){}function o$(){}function rne(){}function ine(){}function sne(){}function pwe(){}function ane(){}function one(){}function cne(){}function une(){}function lne(){}function hne(){}function fne(){}function dne(){}function gne(){}function pne(){}function bne(){}function mne(){}function vne(){}function wne(){}function yne(){}function xne(){}function fu(){}function kne(){}function SS(){}function Rc(){}function Pu(){}function hs(){}function mI(){}function Ene(){}function Tne(){}function Cne(){}function c8(){}function ym(){}function Q9(){}function Sne(){}function vI(){}function _ne(){}function Ane(){}function Lne(){}function c$(){}function Mne(){}function Dne(){}function wI(){}function Ine(){}function uh(){}function gl(){}function u$(){}function One(){}function Nne(){}function ey(){}function p5(){}function ty(){}function Rp(){}function u8(){}function yI(){}function l$(){}function h$(){}function Pne(){}function x1(){}function f$(){}function ny(){}function J9(){}function xI(){}function l8(){}function W2(){}function d$(){}function g$(){}function p$(){}function Bne(){}function h8(){}function ry(){}function jp(){}function Y2(){}function b5(){}function Z9(){}function _S(){}function kI(){}function Fne(){}function Rne(){}function b$(){}function m$(){}function Ut(){}function ek(){}function v$(){}function w$(){}function jne(){}function tk(){}function nk(){}function y$(){}function $ne(){}function zne(){}function qne(){}function Hne(){}function Vne(){}function Une(){}function EI(){}function Gne(){}function Kne(){}function x$(){}function AS(){}function Wne(){}function TI(){}function rk(){}function ik(){}function sk(){}function k$(){}function Yne(){}function E$(){}function T$(){}function Xne(){}function LS(){}function X2(){}function C$(){}function S$(){}function MS(){}function Qne(){}function m5(){}function _$(){}function CI(){}function Qc(){}function SI(){}function _I(){}function DS(){}function Jne(){}function Zne(){}function IS(){}function ere(){}function OS(){}function NS(){}function H0(){}function AI(){}function LI(){}function f8(){}function tre(){}function nre(){}function rre(){}function ire(){}function Xd(){}function PS(){}function d8(){}function k1(){}function A$(){}function L$(){}function M$(){}function D$(){}function I$(){}function O$(){}function V0(){}function nl(){}function sre(){}function are(){}function ore(){}function rl(){}function BS(){}function N$(){}function P$(){}function g8(){}function cre(){}function ak(){}function ure(){}function B$(){}function lre(){}function hre(){}function FS(){}function F$(){}function MI(){}function RS(){}function fre(){}function dre(){}function DI(){}function jS(){}function E1(){}function ok(){}function gre(){}function ck(){}function II(){}function xm(){}function $S(){}function OI(){}function U0(){}function zS(){}function T1(){}function C1(){}function pre(){}function bre(){}function v5(){}function uk(){}function lk(){}function qS(){}function mre(){}function vre(){}function p8(){}function R$(){}function j$(){}function wre(){}function $$(){}function yre(){}function z$(){}function NI(){}function xre(){}function HS(){}function kre(){}function Ere(){}function Tre(){}function Cre(){}function Sre(){}function q$(){}function _re(){}function Are(){}function Lre(){}function H$(){}function Mre(){}function Dre(){}function VS(){}function Ire(){}function Ore(){}function Nre(){}function Pre(){}function Bre(){}function Fre(){}function V$(){}function Rre(){}function U$(){}function jre(){}function PI(){}function $re(){}function G$(){}function zre(){}function K$(){}function qre(){}function W$(){}function Y$(){}function X$(){}function BI(){}function w5(){}function US(){}function S1(){}function Q$(){}function hk(){}function FI(){}function J$(){}function km(){}function Z$(){}function GS(){o_()}function Hre(){iO()}function ez(){dU()}function tz(){Lce()}function nz(){IA()}function KS(){Xxe()}function WS(){b0()}function rz(){axe()}function iz(){VN()}function b8(){sO()}function Kv(){OO()}function fk(){het()}function sz(){lx()}function Vre(){$ut()}function az(){s7e()}function m8(){Aot()}function RI(){a7e()}function oz(){mlt()}function Ure(){_ot()}function cz(){TE()}function YS(){eft()}function XS(){Zht()}function jI(){Ect()}function Gre(){tft()}function Kre(){Cb()}function Wre(){eq()}function Yre(){Yke()}function Xre(){Nt()}function Qre(){nft()}function Jre(){Lft()}function Zre(){Lot()}function eie(){egt()}function tie(){Mot()}function nie(){gmt()}function rie(){_9e()}function iie(){tp()}function sie(){p1t()}function v8(){Hc()}function aie(){jot()}function dk(){ux()}function Cf(){uke()}function oie(){Sb()}function gk(){lke()}function QS(){z1()}function cie(){YN()}function uie(){tle()}function lie(){lue()}function Sf(){pit()}function hie(){ZH()}function fie(){wU()}function uz(){pi()}function die(){PV()}function lz(){B8e()}function hz(){lce()}function fz(){zU()}function dz(){xke()}function n0(e){nr(e)}function gz(e){this.a=e}function JS(e){this.a=e}function pz(e){this.a=e}function bz(e){this.a=e}function gie(e){this.a=e}function pie(e){this.a=e}function mz(e){this.a=e}function bie(e){this.a=e}function vz(e){this.a=e}function Q2(e){this.a=e}function mie(e){this.a=e}function vie(e){this.a=e}function $I(e){this.a=e}function wie(e){this.a=e}function yie(e){this.a=e}function pk(e){this.a=e}function J2(e){this.a=e}function wz(e){this.a=e}function bk(e){this.a=e}function y5(e){this.a=e}function zI(e){this.a=e}function w8(e){this.a=e}function qI(e){this.b=e}function qg(e){this.c=e}function xie(e){this.a=e}function iy(e){this.a=e}function yz(e){this.a=e}function xz(e){this.a=e}function HI(e){this.a=e}function VI(e){this.a=e}function kz(e){this.a=e}function y8(e){this.a=e}function mk(e){this.a=e}function kie(e){this.a=e}function Ez(e){this.a=e}function Tz(e){this.a=e}function Cz(e){this.a=e}function Sz(e){this.a=e}function jc(e){this.a=e}function vk(e){this.a=e}function wk(e){this.a=e}function $p(){this.a=[]}function Eie(e,t){e.a=t}function Tie(e,t){e.a=t}function Cie(e,t){e.b=t}function Sie(e,t){e.b=t}function _ie(e,t){e.b=t}function _z(e,t){e.j=t}function bwe(e,t){e.g=t}function Az(e,t){e.i=t}function Aie(e,t){e.c=t}function x8(e,t){e.c=t}function mwe(e,t){e.d=t}function k8(e,t){e.d=t}function x(e,t){e.k=t}function m(e,t){e.c=t}function k(e,t){e.c=t}function S(e,t){e.a=t}function M(e,t){e.a=t}function O(e,t){e.f=t}function N(e,t){e.a=t}function $(e,t){e.b=t}function H(e,t){e.d=t}function q(e,t){e.i=t}function Y(e,t){e.o=t}function Z(e,t){e.r=t}function ce(e,t){e.a=t}function ve(e,t){e.b=t}function me(e,t){e.e=t}function Le(e,t){e.f=t}function _e(e,t){e.g=t}function Ee(e,t){e.e=t}function Be(e,t){e.f=t}function Re(e,t){e.f=t}function Ve(e,t){e.a=t}function ct(e,t){e.b=t}function st(e,t){e.n=t}function Ye(e,t){e.a=t}function mt(e,t){e.c=t}function Je(e,t){e.c=t}function Lt(e,t){e.c=t}function Mt(e,t){e.a=t}function ut(e,t){e.a=t}function Wt(e,t){e.d=t}function Tt(e,t){e.d=t}function _n(e,t){e.e=t}function hn(e,t){e.e=t}function Yt(e,t){e.g=t}function Dn(e,t){e.f=t}function ir(e,t){e.j=t}function vr(e,t){e.a=t}function Nn(e,t){e.a=t}function pr(e,t){e.b=t}function Er(e){e.b=e.a}function Mr(e){e.c=e.d.d}function Cr(e){this.a=e}function Or(e){this.a=e}function Wn(e){this.a=e}function br(e){this.a=e}function Sr(e){this.a=e}function Nr(e){this.a=e}function Si(e){this.a=e}function ys(e){this.a=e}function pa(e){this.a=e}function Mi(e){this.a=e}function gi(e){this.a=e}function fs(e){this.a=e}function Fs(e){this.a=e}function xs(e){this.a=e}function Rs(e){this.b=e}function yo(e){this.b=e}function $a(e){this.b=e}function Da(e){this.a=e}function Bo(e){this.a=e}function tr(e){this.c=e}function G(e){this.c=e}function Jn(e){this.c=e}function kr(e){this.d=e}function lr(e){this.a=e}function Vt(e){this.a=e}function Hs(e){this.a=e}function wr(e){this.a=e}function Es(e){this.a=e}function go(e){this.a=e}function $c(e){this.a=e}function za(e){this.a=e}function Sc(e){this.a=e}function ba(e){this.a=e}function xo(e){this.a=e}function lh(e){this.a=e}function Wl(e){this.a=e}function Z2(e){this.a=e}function eb(e){this.a=e}function G0(e){this.a=e}function zp(e){this.a=e}function fd(e){this.a=e}function Wv(e){this.a=e}function sy(e){this.a=e}function E8(e){this.a=e}function x5(e){this.a=e}function T8(e){this.a=e}function ZS(e){this.a=e}function k5(e){this.a=e}function Qd(e){this.a=e}function _1(e){this.a=e}function Jd(e){this.a=e}function Yv(e){this.a=e}function Em(e){this.a=e}function Lz(e){this.a=e}function Lie(e){this.a=e}function Mie(e){this.a=e}function e_(e){this.a=e}function Die(e){this.a=e}function Iie(e){this.a=e}function E5(e){this.a=e}function Mz(e){this.a=e}function yk(e){this.a=e}function UI(e){this.a=e}function t_(e){this.a=e}function Dz(e){this.a=e}function Iz(e){this.a=e}function Oie(e){this.a=e}function qp(e){this.a=e}function n_(e){this.a=e}function GI(e){this.a=e}function Tm(e){this.a=e}function Zd(e){this.e=e}function T5(e){this.a=e}function jWe(e){this.a=e}function C8(e){this.a=e}function vwe(e){this.a=e}function $We(e){this.a=e}function zWe(e){this.a=e}function qWe(e){this.a=e}function HWe(e){this.a=e}function VWe(e){this.a=e}function UWe(e){this.a=e}function GWe(e){this.a=e}function KWe(e){this.a=e}function WWe(e){this.a=e}function YWe(e){this.a=e}function XWe(e){this.a=e}function wwe(e){this.a=e}function QWe(e){this.a=e}function JWe(e){this.a=e}function ZWe(e){this.a=e}function eYe(e){this.a=e}function tYe(e){this.a=e}function nYe(e){this.a=e}function rYe(e){this.a=e}function iYe(e){this.a=e}function sYe(e){this.a=e}function aYe(e){this.a=e}function oYe(e){this.a=e}function cYe(e){this.a=e}function uYe(e){this.a=e}function lYe(e){this.a=e}function hYe(e){this.a=e}function fYe(e){this.a=e}function dYe(e){this.a=e}function gYe(e){this.a=e}function pYe(e){this.a=e}function bYe(e){this.a=e}function mYe(e){this.a=e}function vYe(e){this.a=e}function wYe(e){this.a=e}function yYe(e){this.a=e}function xYe(e){this.a=e}function kYe(e){this.a=e}function EYe(e){this.a=e}function TYe(e){this.a=e}function CYe(e){this.a=e}function SYe(e){this.a=e}function _Ye(e){this.a=e}function AYe(e){this.a=e}function LYe(e){this.a=e}function MYe(e){this.a=e}function DYe(e){this.a=e}function IYe(e){this.a=e}function OYe(e){this.a=e}function NYe(e){this.a=e}function PYe(e){this.c=e}function BYe(e){this.b=e}function FYe(e){this.a=e}function RYe(e){this.a=e}function jYe(e){this.a=e}function $Ye(e){this.a=e}function zYe(e){this.a=e}function qYe(e){this.a=e}function HYe(e){this.a=e}function VYe(e){this.a=e}function UYe(e){this.a=e}function GYe(e){this.a=e}function KYe(e){this.a=e}function WYe(e){this.a=e}function YYe(e){this.a=e}function XYe(e){this.a=e}function QYe(e){this.a=e}function JYe(e){this.a=e}function ZYe(e){this.a=e}function eXe(e){this.a=e}function tXe(e){this.a=e}function nXe(e){this.a=e}function rXe(e){this.a=e}function iXe(e){this.a=e}function sXe(e){this.a=e}function aXe(e){this.a=e}function oXe(e){this.a=e}function cXe(e){this.a=e}function uXe(e){this.a=e}function Hg(e){this.a=e}function C5(e){this.a=e}function lXe(e){this.a=e}function hXe(e){this.a=e}function fXe(e){this.a=e}function dXe(e){this.a=e}function gXe(e){this.a=e}function pXe(e){this.a=e}function bXe(e){this.a=e}function mXe(e){this.a=e}function vXe(e){this.a=e}function wXe(e){this.a=e}function yXe(e){this.a=e}function xXe(e){this.a=e}function kXe(e){this.a=e}function EXe(e){this.a=e}function TXe(e){this.a=e}function CXe(e){this.a=e}function SXe(e){this.a=e}function _Xe(e){this.a=e}function AXe(e){this.a=e}function LXe(e){this.a=e}function MXe(e){this.a=e}function DXe(e){this.a=e}function IXe(e){this.a=e}function OXe(e){this.a=e}function NXe(e){this.a=e}function PXe(e){this.a=e}function Oz(e){this.a=e}function BXe(e){this.f=e}function FXe(e){this.a=e}function RXe(e){this.a=e}function jXe(e){this.a=e}function $Xe(e){this.a=e}function zXe(e){this.a=e}function qXe(e){this.a=e}function HXe(e){this.a=e}function VXe(e){this.a=e}function UXe(e){this.a=e}function GXe(e){this.a=e}function KXe(e){this.a=e}function WXe(e){this.a=e}function YXe(e){this.a=e}function XXe(e){this.a=e}function QXe(e){this.a=e}function JXe(e){this.a=e}function ZXe(e){this.a=e}function eQe(e){this.a=e}function tQe(e){this.a=e}function nQe(e){this.a=e}function rQe(e){this.a=e}function iQe(e){this.a=e}function sQe(e){this.a=e}function aQe(e){this.a=e}function oQe(e){this.a=e}function cQe(e){this.a=e}function uQe(e){this.a=e}function lQe(e){this.a=e}function Nie(e){this.a=e}function ywe(e){this.a=e}function Ui(e){this.b=e}function hQe(e){this.a=e}function fQe(e){this.a=e}function dQe(e){this.a=e}function gQe(e){this.a=e}function pQe(e){this.a=e}function bQe(e){this.a=e}function mQe(e){this.a=e}function vQe(e){this.b=e}function wQe(e){this.a=e}function KI(e){this.a=e}function yQe(e){this.a=e}function xQe(e){this.a=e}function xwe(e){this.c=e}function Nz(e){this.e=e}function Pz(e){this.a=e}function Bz(e){this.a=e}function Pie(e){this.a=e}function kQe(e){this.d=e}function EQe(e){this.a=e}function kwe(e){this.a=e}function Ewe(e){this.a=e}function Xv(e){this.e=e}function Dcn(){this.a=0}function Pr(){Nl(this)}function bt(){Yse(this)}function Bie(){cat(this)}function TQe(){}function Qv(){this.c=LPe}function CQe(e,t){e.b+=t}function Icn(e,t){t.Wb(e)}function Ocn(e){return e.a}function Ncn(e){return e.a}function Pcn(e){return e.a}function Bcn(e){return e.a}function Fcn(e){return e.a}function ue(e){return e.e}function Rcn(){return null}function jcn(){return null}function $cn(){c3e(),wIn()}function zcn(e){e.b.Of(e.e)}function SQe(e){e.b=new nse}function r_(e,t){e.b=t-e.b}function i_(e,t){e.a=t-e.a}function $n(e,t){e.push(t)}function _Qe(e,t){e.sort(t)}function AQe(e,t){t.jd(e.a)}function qcn(e,t){la(t,e)}function Hcn(e,t,n){e.Yd(n,t)}function WI(e,t){e.e=t,t.b=e}function Twe(e){wd(),this.a=e}function LQe(e){wd(),this.a=e}function MQe(e){wd(),this.a=e}function Fie(e){ww(),this.a=e}function DQe(e){Xk(),S0e.le(e)}function Cwe(){Cwe=U,new Pr}function Cm(){Jnt.call(this)}function Swe(){Jnt.call(this)}function _we(){Cm.call(this)}function Rie(){Cm.call(this)}function IQe(){Cm.call(this)}function YI(){Cm.call(this)}function pl(){Cm.call(this)}function S8(){Cm.call(this)}function Qr(){Cm.call(this)}function Xh(){Cm.call(this)}function OQe(){Cm.call(this)}function _c(){Cm.call(this)}function NQe(){Cm.call(this)}function PQe(){this.a=this}function Fz(){this.Bb|=256}function BQe(){this.b=new Utt}function ay(e,t){e.length=t}function Rz(e,t){vt(e.a,t)}function Vcn(e,t){Jxe(e.c,t)}function Ucn(e,t){na(e.b,t)}function Gcn(e,t){oU(e.a,t)}function Kcn(e,t){Fce(e.a,t)}function xk(e,t){Ni(e.e,t)}function _8(e){EU(e.c,e.b)}function Wcn(e,t){e.kc().Nb(t)}function Awe(e){this.a=$4n(e)}function Ks(){this.a=new Pr}function FQe(){this.a=new Pr}function Lwe(){this.a=new net}function jz(){this.a=new bt}function jie(){this.a=new bt}function Mwe(){this.a=new bt}function _f(){this.a=new pm}function Sm(){this.a=new Nut}function Dwe(){this.a=new bm}function Iwe(){this.a=new Sot}function Owe(){this.a=new Rrt}function RQe(){this.a=new bt}function jQe(){this.a=new bt}function $Qe(){this.a=new bt}function Nwe(){this.a=new bt}function zQe(){this.d=new bt}function qQe(){this.a=new Got}function HQe(){this.a=new Ks}function VQe(){this.a=new Pr}function UQe(){this.b=new Pr}function GQe(){this.b=new bt}function Pwe(){this.e=new bt}function KQe(){this.a=new Kre}function WQe(){this.d=new bt}function YQe(){Qat.call(this)}function XQe(){Qat.call(this)}function QQe(){bt.call(this)}function Bwe(){_we.call(this)}function Fwe(){jz.call(this)}function JQe(){Vq.call(this)}function ZQe(){Nwe.call(this)}function s_(){TQe.call(this)}function $ie(){s_.call(this)}function A8(){TQe.call(this)}function Rwe(){A8.call(this)}function eJe(){qwe.call(this)}function tJe(){qwe.call(this)}function nJe(){qwe.call(this)}function rJe(){Hwe.call(this)}function a_(){Wne.call(this)}function jwe(){Wne.call(this)}function bl(){os.call(this)}function iJe(){wJe.call(this)}function sJe(){wJe.call(this)}function aJe(){Pr.call(this)}function oJe(){Pr.call(this)}function cJe(){Pr.call(this)}function zie(){sft.call(this)}function uJe(){Ks.call(this)}function lJe(){Fz.call(this)}function qie(){kye.call(this)}function $we(){Pr.call(this)}function Hie(){kye.call(this)}function Vie(){Pr.call(this)}function hJe(){Pr.call(this)}function zwe(){m5.call(this)}function fJe(){zwe.call(this)}function dJe(){m5.call(this)}function gJe(){J$.call(this)}function qwe(){this.a=new Ks}function pJe(){this.a=new Pr}function bJe(){this.a=new bt}function Hwe(){this.a=new Pr}function L8(){this.a=new os}function mJe(){this.j=new bt}function vJe(){this.a=new bZe}function wJe(){this.a=new Qne}function Vwe(){this.a=new hs}function o_(){o_=U,v0e=new _}function Uie(){Uie=U,w0e=new xJe}function Gie(){Gie=U,y0e=new yJe}function yJe(){pk.call(this,"")}function xJe(){pk.call(this,"")}function kJe(e){Aht.call(this,e)}function EJe(e){Aht.call(this,e)}function Uwe(e){vz.call(this,e)}function Gwe(e){UZe.call(this,e)}function Ycn(e){UZe.call(this,e)}function Xcn(e){Gwe.call(this,e)}function Qcn(e){Gwe.call(this,e)}function Jcn(e){Gwe.call(this,e)}function TJe(e){Toe.call(this,e)}function CJe(e){Toe.call(this,e)}function SJe(e){ait.call(this,e)}function _Je(e){p3e.call(this,e)}function c_(e){Xz.call(this,e)}function Kwe(e){Xz.call(this,e)}function AJe(e){Xz.call(this,e)}function Wwe(e){y9n.call(this,e)}function Ywe(e){Wwe.call(this,e)}function Ac(e){_st.call(this,e)}function LJe(e){Ac.call(this,e)}function M8(){wk.call(this,{})}function MJe(){MJe=U,d6t=new W}function $z(){$z=U,E0e=new Ant}function DJe(){DJe=U,USe=new T}function Xwe(){Xwe=U,GSe=new ae}function zz(){zz=U,NL=new de}function Kie(e){Ok(),this.a=e}function Wie(e){E7e(),this.a=e}function Jv(e){Iae(),this.f=e}function Yie(e){Iae(),this.f=e}function IJe(e){git(),this.a=e}function OJe(e){e.b=null,e.c=0}function Zcn(e,t){e.e=t,gbt(e,t)}function eun(e,t){e.a=t,okn(e)}function Xie(e,t,n){e.a[t.g]=n}function tun(e,t,n){k8n(n,e,t)}function nun(e,t){Qfn(t.i,e.n)}function NJe(e,t){xyn(e).Cd(t)}function run(e,t){e.a.ec().Mc(t)}function PJe(e,t){return e.g-t.g}function iun(e,t){return e*e/t}function Rt(e){return nr(e),e}function ze(e){return nr(e),e}function XI(e){return nr(e),e}function sun(e){return new vk(e)}function aun(e){return new yy(e)}function Qwe(e){return nr(e),e}function oun(e){return nr(e),e}function qz(e){Ac.call(this,e)}function tc(e){Ac.call(this,e)}function BJe(e){Ac.call(this,e)}function Qie(e){_st.call(this,e)}function kk(e){Ac.call(this,e)}function Yn(e){Ac.call(this,e)}function nc(e){Ac.call(this,e)}function FJe(e){Ac.call(this,e)}function D8(e){Ac.call(this,e)}function Hp(e){Ac.call(this,e)}function Vp(e){Ac.call(this,e)}function I8(e){Ac.call(this,e)}function dd(e){Ac.call(this,e)}function Jie(e){Ac.call(this,e)}function ri(e){Ac.call(this,e)}function Il(e){nr(e),this.a=e}function Jwe(e){return Um(e),e}function u_(e){l5e(e,e.length)}function l_(e){return e.b==e.c}function oy(e){return!!e&&e.b}function cun(e){return!!e&&e.k}function uun(e){return!!e&&e.j}function lun(e,t,n){e.c.Ef(t,n)}function RJe(e,t){e.be(t),t.ae(e)}function O8(e){wd(),this.a=Xr(e)}function Zie(){this.a=ei(Xr(Co))}function jJe(){throw ue(new Qr)}function hun(){throw ue(new Qr)}function Zwe(){throw ue(new Qr)}function $Je(){throw ue(new Qr)}function fun(){throw ue(new Qr)}function dun(){throw ue(new Qr)}function Hz(){Hz=U,Xk()}function Up(){Nr.call(this,"")}function h_(){Nr.call(this,"")}function tb(){Nr.call(this,"")}function S5(){Nr.call(this,"")}function e3e(e){tc.call(this,e)}function t3e(e){tc.call(this,e)}function gd(e){Yn.call(this,e)}function Ek(e){$a.call(this,e)}function zJe(e){Ek.call(this,e)}function ese(e){jq.call(this,e)}function tse(e){Nye.call(this,e,0)}function nse(){G5e.call(this,12,3)}function le(e,t){return yot(e,t)}function Vz(e,t){return joe(e,t)}function gun(e,t){return e.a-t.a}function pun(e,t){return e.a-t.a}function bun(e,t){return e.a-t.a}function mun(e,t){return t in e.a}function qJe(e){return e.a?e.b:0}function vun(e){return e.a?e.b:0}function wun(e,t,n){t.Cd(e.a[n])}function yun(e,t,n){t.Pe(e.a[n])}function xun(e,t){e.b=new Eo(t)}function kun(e,t){return e.b=t,e}function HJe(e,t){return e.c=t,e}function VJe(e,t){return e.f=t,e}function Eun(e,t){return e.g=t,e}function n3e(e,t){return e.a=t,e}function r3e(e,t){return e.f=t,e}function Tun(e,t){return e.k=t,e}function i3e(e,t){return e.a=t,e}function Cun(e,t){return e.e=t,e}function s3e(e,t){return e.e=t,e}function Sun(e,t){return e.f=t,e}function _un(e,t){e.b=!0,e.d=t}function Aun(e,t){return e.b-t.b}function Lun(e,t){return e.g-t.g}function Mun(e,t){return e?0:t-1}function UJe(e,t){return e?0:t-1}function Dun(e,t){return e?t-1:0}function Iun(e,t){return e.s-t.s}function Oun(e,t){return t.rg(e)}function Zv(e,t){return e.b=t,e}function Uz(e,t){return e.a=t,e}function ew(e,t){return e.c=t,e}function tw(e,t){return e.d=t,e}function nw(e,t){return e.e=t,e}function a3e(e,t){return e.f=t,e}function f_(e,t){return e.a=t,e}function Tk(e,t){return e.b=t,e}function Ck(e,t){return e.c=t,e}function Qt(e,t){return e.c=t,e}function yn(e,t){return e.b=t,e}function Jt(e,t){return e.d=t,e}function Zt(e,t){return e.e=t,e}function Nun(e,t){return e.f=t,e}function en(e,t){return e.g=t,e}function tn(e,t){return e.a=t,e}function nn(e,t){return e.i=t,e}function rn(e,t){return e.j=t,e}function Pun(e,t){Cb(),Mc(t,e)}function Bun(e,t,n){Jdn(e.a,t,n)}function Gz(e){dae.call(this,e)}function GJe(e){t5n.call(this,e)}function KJe(e){Aat.call(this,e)}function o3e(e){Aat.call(this,e)}function nb(e){Lw.call(this,e)}function WJe(e){noe.call(this,e)}function YJe(e){noe.call(this,e)}function XJe(){bye.call(this,"")}function qa(){this.a=0,this.b=0}function QJe(){this.b=0,this.a=0}function JJe(e,t){e.b=0,My(e,t)}function ZJe(e,t){return e.k=t,e}function Fun(e,t){return e.j=t,e}function Run(e,t){e.c=t,e.b=!0}function eZe(){eZe=U,S6t=Y8n()}function rb(){rb=U,w_t=a8n()}function tZe(){tZe=U,La=vxn()}function c3e(){c3e=U,Qb=hE()}function Sk(){Sk=U,APe=o8n()}function nZe(){nZe=U,rAt=c8n()}function u3e(){u3e=U,tu=ikn()}function K0(e){return e.e&&e.e()}function rZe(e){return e.l|e.m<<22}function iZe(e,t){return e.c._b(t)}function sZe(e,t){return i1t(e.b,t)}function rse(e){return e?e.d:null}function jun(e){return e?e.g:null}function $un(e){return e?e.i:null}function _m(e){return Gg(e),e.o}function _5(e,t){return e.a+=t,e}function ise(e,t){return e.a+=t,e}function Gp(e,t){return e.a+=t,e}function rw(e,t){return e.a+=t,e}function l3e(e,t){for(;e.Bd(t););}function Kz(e){this.a=new N8(e)}function aZe(){throw ue(new Qr)}function oZe(){throw ue(new Qr)}function cZe(){throw ue(new Qr)}function uZe(){throw ue(new Qr)}function lZe(){throw ue(new Qr)}function hZe(){throw ue(new Qr)}function Kp(e){this.a=new Pae(e)}function fZe(){this.a=new UA(EIe)}function dZe(){this.b=new UA(qDe)}function gZe(){this.a=new UA(KIe)}function pZe(){this.b=new UA(pge)}function bZe(){this.b=new UA(pge)}function Wz(e){this.a=0,this.b=e}function h3e(e){Gvt(),IIn(this,e)}function _k(e){return fb(e),e.a}function QI(e){return e.b!=e.d.c}function f3e(e,t){return e.d[t.p]}function mZe(e,t){return YCn(e,t)}function d3e(e,t,n){e.splice(t,n)}function A5(e,t){for(;e.Re(t););}function vZe(e){e.c?Ibt(e):Obt(e)}function wZe(){throw ue(new Qr)}function yZe(){throw ue(new Qr)}function xZe(){throw ue(new Qr)}function kZe(){throw ue(new Qr)}function EZe(){throw ue(new Qr)}function TZe(){throw ue(new Qr)}function CZe(){throw ue(new Qr)}function SZe(){throw ue(new Qr)}function _Ze(){throw ue(new Qr)}function AZe(){throw ue(new Qr)}function zun(){throw ue(new _c)}function qun(){throw ue(new _c)}function JI(e){this.a=new LZe(e)}function LZe(e){Gwn(this,e,T9n())}function ZI(e){return!e||oat(e)}function eO(e){return nd[e]!=-1}function Hun(){aK!=0&&(aK=0),oK=-1}function MZe(){m0e==null&&(m0e=[])}function tO(e,t){q5.call(this,e,t)}function Ak(e,t){tO.call(this,e,t)}function DZe(e,t){this.a=e,this.b=t}function IZe(e,t){this.a=e,this.b=t}function OZe(e,t){this.a=e,this.b=t}function NZe(e,t){this.a=e,this.b=t}function PZe(e,t){this.a=e,this.b=t}function BZe(e,t){this.a=e,this.b=t}function FZe(e,t){this.a=e,this.b=t}function Lk(e,t){this.e=e,this.d=t}function g3e(e,t){this.b=e,this.c=t}function RZe(e,t){this.b=e,this.a=t}function jZe(e,t){this.b=e,this.a=t}function $Ze(e,t){this.b=e,this.a=t}function zZe(e,t){this.b=e,this.a=t}function qZe(e,t){this.a=e,this.b=t}function sse(e,t){this.a=e,this.b=t}function HZe(e,t){this.a=e,this.f=t}function iw(e,t){this.g=e,this.i=t}function Ur(e,t){this.f=e,this.g=t}function VZe(e,t){this.b=e,this.c=t}function UZe(e){Tye(e.dc()),this.c=e}function Vun(e,t){this.a=e,this.b=t}function GZe(e,t){this.a=e,this.b=t}function KZe(e){this.a=l(Xr(e),15)}function p3e(e){this.a=l(Xr(e),15)}function WZe(e){this.a=l(Xr(e),85)}function Yz(e){this.b=l(Xr(e),85)}function Xz(e){this.b=l(Xr(e),51)}function Qz(){this.q=new b.Date}function ase(e,t){this.a=e,this.b=t}function YZe(e,t){return Hu(e.b,t)}function nO(e,t){return e.b.Hc(t)}function XZe(e,t){return e.b.Ic(t)}function QZe(e,t){return e.b.Qc(t)}function JZe(e,t){return e.b.Hc(t)}function ZZe(e,t){return e.c.uc(t)}function eet(e,t){return Pi(e.c,t)}function W0(e,t){return e.a._b(t)}function tet(e,t){return e>t&&t0}function fse(e,t){return iu(e,t)<0}function vet(e,t){return Aae(e.a,t)}function uln(e,t){xot.call(this,e,t)}function k3e(e){Kae(),ait.call(this,e)}function E3e(e,t){gst(e,e.length,t)}function aO(e,t){qst(e,e.length,t)}function y_(e,t){return e.a.get(t)}function wet(e,t){return Hu(e.e,t)}function T3e(e){return nr(e),!1}function C3e(e){this.a=l(Xr(e),229)}function aq(e){kn.call(this,e,21)}function oq(e,t){Ur.call(this,e,t)}function dse(e,t){Ur.call(this,e,t)}function yet(e,t){this.b=e,this.a=t}function cq(e,t){this.d=e,this.e=t}function xet(e,t){this.a=e,this.b=t}function ket(e,t){this.a=e,this.b=t}function Eet(e,t){this.a=e,this.b=t}function Tet(e,t){this.a=e,this.b=t}function B8(e,t){this.a=e,this.b=t}function Cet(e,t){this.b=e,this.a=t}function S3e(e,t){this.b=e,this.a=t}function _3e(e,t){Ur.call(this,e,t)}function A3e(e,t){Ur.call(this,e,t)}function L5(e,t){Ur.call(this,e,t)}function gse(e,t){Ur.call(this,e,t)}function pse(e,t){Ur.call(this,e,t)}function bse(e,t){Ur.call(this,e,t)}function uq(e,t){Ur.call(this,e,t)}function L3e(e,t){this.b=e,this.a=t}function lq(e,t){Ur.call(this,e,t)}function M3e(e,t){this.b=e,this.a=t}function hq(e,t){Ur.call(this,e,t)}function _et(e,t){this.b=e,this.a=t}function D3e(e,t){Ur.call(this,e,t)}function mse(e,t){Ur.call(this,e,t)}function oO(e,t){Ur.call(this,e,t)}function x_(e,t,n){e.splice(t,0,n)}function lln(e,t,n){e.Mb(n)&&t.Cd(n)}function hln(e,t,n){t.Pe(e.a.Ye(n))}function fln(e,t,n){t.Dd(e.a.Ze(n))}function dln(e,t,n){t.Cd(e.a.Kb(n))}function gln(e,t){return vl(e.c,t)}function pln(e,t){return vl(e.e,t)}function fq(e,t){Ur.call(this,e,t)}function dq(e,t){Ur.call(this,e,t)}function k_(e,t){Ur.call(this,e,t)}function I3e(e,t){Ur.call(this,e,t)}function Ws(e,t){Ur.call(this,e,t)}function gq(e,t){Ur.call(this,e,t)}function Aet(e,t){this.a=e,this.b=t}function Let(e,t){this.a=e,this.b=t}function Met(e,t){this.a=e,this.b=t}function Det(e,t){this.a=e,this.b=t}function Iet(e,t){this.a=e,this.b=t}function Oet(e,t){this.a=e,this.b=t}function Net(e,t){this.b=e,this.a=t}function Pet(e,t){this.b=e,this.a=t}function O3e(e,t){this.b=e,this.a=t}function Ik(e,t){this.c=e,this.d=t}function Bet(e,t){this.e=e,this.d=t}function Fet(e,t){this.a=e,this.b=t}function Ret(e,t){this.a=e,this.b=t}function jet(e,t){this.a=e,this.b=t}function $et(e,t){this.b=e,this.a=t}function zet(e,t){this.b=t,this.c=e}function pq(e,t){Ur.call(this,e,t)}function cO(e,t){Ur.call(this,e,t)}function vse(e,t){Ur.call(this,e,t)}function N3e(e,t){Ur.call(this,e,t)}function E_(e,t){Ur.call(this,e,t)}function wse(e,t){Ur.call(this,e,t)}function yse(e,t){Ur.call(this,e,t)}function uO(e,t){Ur.call(this,e,t)}function P3e(e,t){Ur.call(this,e,t)}function xse(e,t){Ur.call(this,e,t)}function T_(e,t){Ur.call(this,e,t)}function B3e(e,t){Ur.call(this,e,t)}function C_(e,t){Ur.call(this,e,t)}function S_(e,t){Ur.call(this,e,t)}function uy(e,t){Ur.call(this,e,t)}function kse(e,t){Ur.call(this,e,t)}function Ese(e,t){Ur.call(this,e,t)}function F3e(e,t){Ur.call(this,e,t)}function lO(e,t){Ur.call(this,e,t)}function M5(e,t){Ur.call(this,e,t)}function Tse(e,t){Ur.call(this,e,t)}function bq(e,t){Ur.call(this,e,t)}function hO(e,t){Ur.call(this,e,t)}function ly(e,t){Ur.call(this,e,t)}function mq(e,t){Ur.call(this,e,t)}function R3e(e,t){Ur.call(this,e,t)}function Cse(e,t){Ur.call(this,e,t)}function Sse(e,t){Ur.call(this,e,t)}function _se(e,t){Ur.call(this,e,t)}function Ase(e,t){Ur.call(this,e,t)}function Lse(e,t){Ur.call(this,e,t)}function Mse(e,t){Ur.call(this,e,t)}function Dse(e,t){Ur.call(this,e,t)}function qet(e,t){this.b=e,this.a=t}function j3e(e,t){Ur.call(this,e,t)}function Het(e,t){this.a=e,this.b=t}function Vet(e,t){this.a=e,this.b=t}function Uet(e,t){this.a=e,this.b=t}function $3e(e,t){Ur.call(this,e,t)}function z3e(e,t){Ur.call(this,e,t)}function Get(e,t){this.a=e,this.b=t}function bln(e,t){return jk(),t!=e}function fO(e){return mr(e.a),e.b}function Ise(e){return EEn(e,e.c),e}function Ket(){return eZe(),new S6t}function Wet(){Yq(),this.a=new i4e}function Yet(){IU(),this.a=new Ks}function Xet(){foe(),this.b=new Ks}function Qet(e,t){this.b=e,this.d=t}function Jet(e,t){this.a=e,this.b=t}function Zet(e,t){this.a=e,this.b=t}function ett(e,t){this.a=e,this.b=t}function ttt(e,t){this.b=e,this.a=t}function q3e(e,t){Ur.call(this,e,t)}function H3e(e,t){Ur.call(this,e,t)}function vq(e,t){Ur.call(this,e,t)}function ow(e,t){Ur.call(this,e,t)}function Ose(e,t){Ur.call(this,e,t)}function wq(e,t){Ur.call(this,e,t)}function V3e(e,t){Ur.call(this,e,t)}function U3e(e,t){Ur.call(this,e,t)}function dO(e,t){Ur.call(this,e,t)}function G3e(e,t){Ur.call(this,e,t)}function Nse(e,t){Ur.call(this,e,t)}function yq(e,t){Ur.call(this,e,t)}function Pse(e,t){Ur.call(this,e,t)}function Bse(e,t){Ur.call(this,e,t)}function Fse(e,t){Ur.call(this,e,t)}function Rse(e,t){Ur.call(this,e,t)}function K3e(e,t){Ur.call(this,e,t)}function jse(e,t){Ur.call(this,e,t)}function W3e(e,t){Ur.call(this,e,t)}function gO(e,t){Ur.call(this,e,t)}function $se(e,t){Ur.call(this,e,t)}function Y3e(e,t){Ur.call(this,e,t)}function pO(e,t){Ur.call(this,e,t)}function X3e(e,t){Ur.call(this,e,t)}function ntt(e,t){this.b=e,this.a=t}function rtt(e,t){this.b=e,this.a=t}function itt(e,t){this.b=e,this.a=t}function stt(e,t){this.b=e,this.a=t}function Q3e(e,t){this.a=e,this.b=t}function att(e,t){this.a=e,this.b=t}function ott(e,t){this.a=e,this.b=t}function lt(e,t){this.a=e,this.b=t}function __(e,t){Ur.call(this,e,t)}function bO(e,t){Ur.call(this,e,t)}function F8(e,t){Ur.call(this,e,t)}function A_(e,t){Ur.call(this,e,t)}function mO(e,t){Ur.call(this,e,t)}function zse(e,t){Ur.call(this,e,t)}function xq(e,t){Ur.call(this,e,t)}function L_(e,t){Ur.call(this,e,t)}function qse(e,t){Ur.call(this,e,t)}function kq(e,t){Ur.call(this,e,t)}function D5(e,t){Ur.call(this,e,t)}function vO(e,t){Ur.call(this,e,t)}function M_(e,t){Ur.call(this,e,t)}function D_(e,t){Ur.call(this,e,t)}function wO(e,t){Ur.call(this,e,t)}function Eq(e,t){Ur.call(this,e,t)}function I5(e,t){Ur.call(this,e,t)}function Hse(e,t){Ur.call(this,e,t)}function ctt(e,t){Ur.call(this,e,t)}function Tq(e,t){Ur.call(this,e,t)}function utt(e,t){this.a=e,this.b=t}function ltt(e,t){this.a=e,this.b=t}function htt(e,t){this.a=e,this.b=t}function ftt(e,t){this.a=e,this.b=t}function dtt(e,t){this.a=e,this.b=t}function gtt(e,t){this.a=e,this.b=t}function ca(e,t){this.a=e,this.b=t}function ptt(e,t){this.a=e,this.b=t}function btt(e,t){this.a=e,this.b=t}function mtt(e,t){this.a=e,this.b=t}function vtt(e,t){this.a=e,this.b=t}function wtt(e,t){this.a=e,this.b=t}function ytt(e,t){this.a=e,this.b=t}function xtt(e,t){this.b=e,this.a=t}function ktt(e,t){this.b=e,this.a=t}function Ett(e,t){this.b=e,this.a=t}function Ttt(e,t){this.b=e,this.a=t}function Ctt(e,t){this.a=e,this.b=t}function Stt(e,t){this.a=e,this.b=t}function Cq(e,t){Ur.call(this,e,t)}function _tt(e,t){this.a=e,this.b=t}function Att(e,t){this.a=e,this.b=t}function R8(e,t){Ur.call(this,e,t)}function Ltt(e,t){this.f=e,this.c=t}function J3e(e,t){return vl(e.g,t)}function mln(e,t){return vl(t.b,e)}function Mtt(e,t){return Kce(e.a,t)}function vln(e,t){return-e.b.af(t)}function wln(e,t){e&&ki(lF,e,t)}function Z3e(e,t){e.i=null,xV(e,t)}function yln(e,t,n){xgt(t,jue(e,n))}function xln(e,t,n){xgt(t,jue(e,n))}function kln(e,t){XTn(e.a,l(t,58))}function Dtt(e,t){Gvn(e.a,l(t,12))}function Sq(e,t){this.a=e,this.b=t}function Itt(e,t){this.a=e,this.b=t}function Ott(e,t){this.a=e,this.b=t}function Ntt(e,t){this.a=e,this.b=t}function Ptt(e,t){this.a=e,this.b=t}function Btt(e,t){this.d=e,this.b=t}function Ftt(e,t){this.e=e,this.a=t}function yO(e,t){this.b=e,this.c=t}function eye(e,t){this.i=e,this.g=t}function tye(e,t){this.d=e,this.e=t}function Eln(e,t){own(new or(e),t)}function _q(e){return FN(e.c,e.b)}function hc(e){return e?e.md():null}function qe(e){return e??null}function Ia(e){return typeof e===Ile}function hy(e){return typeof e===Cx}function fy(e){return typeof e===Qke}function cw(e,t){return iu(e,t)==0}function Aq(e,t){return iu(e,t)>=0}function I_(e,t){return iu(e,t)!=0}function Lq(e,t){return T3n(e.Kc(),t)}function ab(e,t){return e.Rd().Xb(t)}function Rtt(e){return Ql(e),e.d.gc()}function Mq(e){return V_(e==null),e}function O_(e,t){return e.a+=""+t,e}function Xo(e,t){return e.a+=""+t,e}function N_(e,t){return e.a+=""+t,e}function wu(e,t){return e.a+=""+t,e}function hi(e,t){return e.a+=""+t,e}function nye(e,t){return e.a+=""+t,e}function Tln(e){return""+(nr(e),e)}function jtt(e){Nl(this),bA(this,e)}function $tt(){U5e(),Q4e.call(this)}function ztt(e,t){n5e.call(this,e,t)}function qtt(e,t){n5e.call(this,e,t)}function Dq(e,t){n5e.call(this,e,t)}function ko(e,t){Cs(e,t,e.c.b,e.c)}function O5(e,t){Cs(e,t,e.a,e.a.a)}function rye(e){return Sn(e,0),null}function Htt(){this.b=0,this.a=!1}function Vtt(){this.b=0,this.a=!1}function Utt(){this.b=new N8(Ay(12))}function Gtt(){Gtt=U,y7t=Kr(eue())}function Ktt(){Ktt=U,q8t=Kr(rbt())}function Wtt(){Wtt=U,hTt=Kr(Bft())}function iye(){iye=U,Cwe(),KSe=new Pr}function Y0(e){return e.a=0,e.b=0,e}function Ytt(e,t){return e.a=t.g+1,e}function Vse(e,t){my.call(this,e,t)}function pn(e,t){vs.call(this,e,t)}function N5(e,t){eye.call(this,e,t)}function Xtt(e,t){TO.call(this,e,t)}function Use(e,t){mE.call(this,e,t)}function wi(e,t){iq(),ki(kY,e,t)}function Qtt(e,t){e.q.setTime(Fm(t))}function Cln(e){b.clearTimeout(e)}function Sln(e){return Xr(e),new P_(e)}function Jtt(e,t){return qe(e)===qe(t)}function Ztt(e,t){return e.a.a.a.cc(t)}function Gse(e,t){return tf(e.a,0,t)}function sye(e){return Lgn(l(e,74))}function j8(e){return ua((nr(e),e))}function _ln(e){return ua((nr(e),e))}function ent(e){return qu(e.l,e.m,e.h)}function aye(e,t){return ru(e.a,t.a)}function Aln(e,t){return $st(e.a,t.a)}function Lln(e,t){return Yi(e.a,t.a)}function pd(e,t){return e.indexOf(t)}function Mln(e,t){return e.j[t.p]==2}function uw(e,t){return e==t?0:e?1:-1}function Iq(e){return e<10?"0"+e:""+e}function wc(e){return typeof e===Qke}function Dln(e){return e==s3||e==o4}function Iln(e){return e==s3||e==a4}function tnt(e,t){return ru(e.g,t.g)}function oye(e){return gc(e.b.b,e,0)}function nnt(){sH.call(this,0,0,0,0)}function bd(){wr.call(this,new e2)}function cye(e,t){nE(e,0,e.length,t)}function Oln(e,t){return vt(e.a,t),t}function Nln(e,t){return u0(),t.a+=e}function Pln(e,t){return u0(),t.a+=e}function Bln(e,t){return u0(),t.c+=e}function Fln(e,t){return vt(e.c,t),e}function uye(e,t){return Dh(e.a,t),e}function rnt(e){this.a=Ket(),this.b=e}function int(e){this.a=Ket(),this.b=e}function Eo(e){this.a=e.a,this.b=e.b}function P_(e){this.a=e,GS.call(this)}function snt(e){this.a=e,GS.call(this)}function $8(){ef.call(this,0,0,0,0)}function Oq(e){return Dh(new Xs,e)}function ant(e){return EH(l(e,123))}function hh(e){return e.vh()&&e.wh()}function P5(e){return e!=Z1&&e!=Wb}function Ug(e){return e==uc||e==vc}function B5(e){return e==wf||e==Q1}function ont(e){return e==G6||e==U6}function Rln(e,t){return ru(e.g,t.g)}function cnt(e,t){return new mE(t,e)}function jln(e,t){return new mE(t,e)}function lye(e){return adn(e.b.Kc(),e.a)}function Kse(e,t){CE(e,t),lE(e,e.D)}function Wse(e,t,n){dV(e,t),fV(e,n)}function F5(e,t,n){Dw(e,t),Mw(e,n)}function Qh(e,t,n){Uu(e,t),Gu(e,n)}function xO(e,t,n){aE(e,t),cE(e,n)}function kO(e,t,n){oE(e,t),uE(e,n)}function unt(e,t,n){Gye.call(this,e,t,n)}function hye(e){Ltt.call(this,e,!0)}function lnt(){oq.call(this,"Tail",3)}function hnt(){oq.call(this,"Head",1)}function ob(e){Cd(),y3n.call(this,e)}function lw(e){sH.call(this,e,e,e,e)}function Yse(e){e.c=We(wa,Rn,1,0,5,1)}function fye(e){return e.b&&gle(e),e.a}function dye(e){return e.b&&gle(e),e.c}function $ln(e,t){G1||(e.b=t)}function zln(e,t){return e[e.length]=t}function qln(e,t){return e[e.length]=t}function Hln(e,t){return Ly(t,M1(e))}function Vln(e,t){return Ly(t,M1(e))}function Uln(e,t){return vV(Uae(e.d),t)}function Gln(e,t){return vV(Uae(e.g),t)}function Kln(e,t){return vV(Uae(e.j),t)}function Ha(e,t){vs.call(this,e.b,t)}function Wln(e,t){qr(du(e.a),Iot(t))}function Yln(e,t){qr(Xl(e.a),Oot(t))}function Xln(e,t,n){Qh(n,n.i+e,n.j+t)}function fnt(e,t,n){Ts(e.c[t.g],t.g,n)}function Qln(e,t,n){l(e.c,71).Gi(t,n)}function Xse(e,t,n){return Ts(e,t,n),n}function dnt(e){Vu(e.Sf(),new Mie(e))}function R5(e){return e!=null?es(e):0}function Jln(e){return e==null?0:es(e)}function B_(e){Di(),Xv.call(this,e)}function gnt(e){this.a=e,_4e.call(this,e)}function A1(){A1=U,b.Math.log(2)}function Jh(){Jh=U,Sg=(bet(),C_t)}function pnt(){pnt=U,Mde=new LA(Vge)}function Jr(){Jr=U,new bnt,new bt}function bnt(){new Pr,new Pr,new Pr}function Zln(){throw ue(new Hp(Q5t))}function ehn(){throw ue(new Hp(Q5t))}function thn(){throw ue(new Hp(J5t))}function nhn(){throw ue(new Hp(J5t))}function Qse(e){this.a=e,Yz.call(this,e)}function Jse(e){this.a=e,Yz.call(this,e)}function mnt(e,t){ww(),this.a=e,this.b=t}function rhn(e,t){Xr(t),V5(e).Jc(new ie)}function Vs(e,t){Lae(e.c,e.c.length,t)}function Lc(e){return e.at?1:0}function pye(e,t){return iu(e,t)>0?e:t}function qu(e,t,n){return{l:e,m:t,h:n}}function ihn(e,t){e.a!=null&&Dtt(t,e.a)}function shn(e){po(e,null),Fa(e,null)}function ahn(e,t,n){return ki(e.g,n,t)}function j5(e,t,n){return R8e(t,n,e.c)}function ohn(e,t,n){return ki(e.k,n,t)}function chn(e,t,n){return KMn(e,t,n),n}function uhn(e,t){return Sh(),t.n.b+=e}function wnt(e){R5e.call(this),this.b=e}function bye(e){r4e.call(this),this.a=e}function ynt(){oq.call(this,"Range",2)}function Nq(e){this.b=e,this.a=new bt}function xnt(e){this.b=new Nu,this.a=e}function knt(e){e.a=new _t,e.c=new _t}function Ent(e){e.a=new Pr,e.d=new Pr}function Tnt(e){doe(e,null),goe(e,null)}function Cnt(e,t){return YMn(e.a,t,null)}function lhn(e,t){return ki(e.a,t.a,t)}function Ja(e){return new lt(e.a,e.b)}function mye(e){return new lt(e.c,e.d)}function hhn(e){return new lt(e.c,e.d)}function F_(e,t){return oMn(e.c,e.b,t)}function De(e,t){return e!=null&&iue(e,t)}function Zse(e,t){return eyn(e.Kc(),t)!=-1}function Pq(e){return e.Ob()?e.Pb():null}function fhn(e){this.b=(Cn(),new tr(e))}function vye(e){this.a=e,Pr.call(this)}function Snt(){TO.call(this,null,null)}function _nt(){qq.call(this,null,null)}function Ant(){Ur.call(this,"INSTANCE",0)}function Lnt(){mxe(),this.a=new UA(gAe)}function Mnt(e){return If(e,0,e.length)}function dhn(e,t){return new Wnt(e.Kc(),t)}function wye(e,t){return e.a.Bc(t)!=null}function Dnt(e,t){$r(e),e.Gc(l(t,15))}function ghn(e,t,n){e.c.bd(t,l(n,136))}function phn(e,t,n){e.c.Ui(t,l(n,136))}function Int(e,t){e.c&&($4e(t),iot(t))}function bhn(e,t){e.q.setHours(t),XA(e,t)}function mhn(e,t){dw(t,e.a.a.a,e.a.a.b)}function vhn(e,t,n,r){Ts(e.a[t.g],n.g,r)}function eae(e,t,n){return e.a[t.g][n.g]}function whn(e,t){return e.e[t.c.p][t.p]}function yhn(e,t){return e.c[t.c.p][t.p]}function L1(e,t){return e.a[t.c.p][t.p]}function xhn(e,t){return e.j[t.p]=ITn(t)}function tae(e,t){return e.a.Bc(t)!=null}function khn(e,t){return ze(Ge(t.a))<=e}function Ehn(e,t){return ze(Ge(t.a))>=e}function Thn(e,t){return E6e(e.f,t.Pg())}function z8(e,t){return e.a*t.a+e.b*t.b}function Chn(e,t){return e.a0?t/(e*e):t*100}function Xhn(e,t){return e>0?t*t/e:t*t*100}function dy(e,t){return l(B1(e.a,t),34)}function Qhn(e,t){return Cb(),xn(e,t.e,t)}function Jhn(e,t,n){return tq(),n.Mg(e,t)}function Zhn(e){return tp(),e.e.a+e.f.a/2}function efn(e,t,n){return tp(),n.e.a-e*t}function tfn(e){return tp(),e.e.b+e.f.b/2}function nfn(e,t,n){return tp(),n.e.b-e*t}function crt(e){e.d=new srt(e),e.e=new Pr}function urt(){this.a=new Cw,this.b=new Cw}function lrt(e){this.c=e,this.a=1,this.b=1}function hrt(e){Mle(),SQe(this),this.Ff(e)}function rfn(e,t,n){ZH(),e.pf(t)&&n.Cd(e)}function ifn(e,t,n){return vt(t,k1t(e,n))}function dw(e,t,n){return e.a+=t,e.b+=n,e}function sfn(e,t,n){return e.a*=t,e.b*=n,e}function Fye(e,t){return e.a=t.a,e.b=t.b,e}function Hq(e){return e.a=-e.a,e.b=-e.b,e}function z_(e,t,n){return e.a-=t,e.b-=n,e}function frt(e){os.call(this),fA(this,e)}function drt(){Ur.call(this,"GROW_TREE",0)}function grt(){Ur.call(this,"POLYOMINO",0)}function dh(e,t,n){xl.call(this,e,t,n,2)}function afn(e,t,n){_A(du(e.a),t,Iot(n))}function prt(e,t){w_(),TO.call(this,e,t)}function Rye(e,t){Wp(),qq.call(this,e,t)}function brt(e,t){Wp(),Rye.call(this,e,t)}function mrt(e,t){Wp(),qq.call(this,e,t)}function ofn(e,t){return e.c.Fc(l(t,136))}function cfn(e,t,n){_A(Xl(e.a),t,Oot(n))}function vrt(e){this.c=e,Uu(e,0),Gu(e,0)}function oae(e,t){Jh(),cH.call(this,e,t)}function wrt(e,t){Jh(),oae.call(this,e,t)}function jye(e,t){Jh(),oae.call(this,e,t)}function $ye(e,t){Jh(),cH.call(this,e,t)}function yrt(e,t){Jh(),jye.call(this,e,t)}function xrt(e,t){Jh(),$ye.call(this,e,t)}function krt(e,t){Jh(),cH.call(this,e,t)}function ufn(e,t,n){return t.zl(e.e,e.c,n)}function lfn(e,t,n){return t.Al(e.e,e.c,n)}function zye(e,t,n){return VU(lN(e,t),n)}function cae(e,t){return yb(e.e,l(t,54))}function hfn(e){return e==null?null:BDn(e)}function ffn(e){return e==null?null:L9n(e)}function dfn(e){return e==null?null:xc(e)}function gfn(e){return e==null?null:xc(e)}function Bt(e){return V_(e==null||hy(e)),e}function Ge(e){return V_(e==null||fy(e)),e}function ei(e){return V_(e==null||Ia(e)),e}function Gg(e){e.o==null&&oTn(e)}function qye(e){if(!e)throw ue(new YI)}function pfn(e){if(!e)throw ue(new Rie)}function mr(e){if(!e)throw ue(new _c)}function gy(e){if(!e)throw ue(new pl)}function Ert(e){if(!e)throw ue(new Xh)}function Fk(){Fk=U,fF=new iJe,new sJe}function H5(){H5=U,Y6=new Ui("root")}function Hye(){sft.call(this),this.Bb|=Io}function bfn(e,t){this.d=e,Mr(this),this.b=t}function Vye(e,t){Poe.call(this,e),this.a=t}function Uye(e,t){Poe.call(this,e),this.a=t}function Gye(e,t,n){YH.call(this,e,t,n,null)}function Trt(e,t,n){YH.call(this,e,t,n,null)}function _O(e,t){this.c=e,Lk.call(this,e,t)}function q_(e,t){this.a=e,_O.call(this,e,t)}function Kye(e){this.q=new b.Date(Fm(e))}function Crt(e){return e>8?0:e+1}function Srt(e,t){G1||vt(e.a,t)}function mfn(e,t){return sO(),bE(t.d.i,e)}function vfn(e,t){return lx(),new nmt(t,e)}function wfn(e,t,n){return e.Ne(t,n)<=0?n:t}function yfn(e,t,n){return e.Ne(t,n)<=0?t:n}function xfn(e,t){return l(B1(e.b,t),143)}function kfn(e,t){return l(B1(e.c,t),233)}function uae(e){return l(jt(e.a,e.b),294)}function _rt(e){return new lt(e.c,e.d+e.a)}function Art(e){return nr(e),e?1231:1237}function Lrt(e){return Sh(),ont(l(e,203))}function py(){py=U,q_e=un((mh(),Cv))}function Efn(e,t){t.a?_En(e,t):tae(e.a,t.b)}function AO(e,t,n){++e.j,e.tj(),Noe(e,t,n)}function Mrt(e,t,n){++e.j,e.qj(t,e.Zi(t,n))}function Drt(e,t,n){var r;r=e.fd(t),r.Rb(n)}function Wye(e,t,n){return n=Nh(e,t,6,n),n}function Yye(e,t,n){return n=Nh(e,t,3,n),n}function Xye(e,t,n){return n=Nh(e,t,9,n),n}function vd(e,t){return UO(t,yEe),e.f=t,e}function Qye(e,t){return(t&Ii)%e.d.length}function Irt(e,t,n){return Mke(e.c,e.b,t,n)}function Ort(e,t){this.c=e,Lw.call(this,t)}function Nrt(e,t){this.a=e,vQe.call(this,t)}function LO(e,t){this.a=e,vQe.call(this,t)}function vs(e,t){Ui.call(this,e),this.a=t}function Jye(e,t){xwe.call(this,e),this.a=t}function lae(e,t){xwe.call(this,e),this.a=t}function Tfn(e){I8e.call(this,0,0),this.f=e}function Prt(e,t,n){return e.a+=If(t,0,n),e}function MO(e){return!e.a&&(e.a=new ge),e.a}function Zye(e,t){var n;return n=e.e,e.e=t,n}function e4e(e,t){var n;return n=t,!!e.Fe(n)}function Cfn(e,t){return Hn(),e==t?0:e?1:-1}function by(e,t){e.a.bd(e.b,t),++e.b,e.c=-1}function DO(e){e.b?DO(e.b):e.f.c.zc(e.e,e.d)}function Brt(e){Nl(e.e),e.d.b=e.d,e.d.a=e.d}function Sfn(e,t,n){Am(),Eie(e,t.Ve(e.a,n))}function t4e(e,t,n){return Q8(e,l(t,22),n)}function c0(e,t){return Vz(new Array(t),e)}function _fn(e){return Yr(ub(e,32))^Yr(e)}function hae(e){return String.fromCharCode(e)}function Afn(e){return e==null?null:e.message}function Lfn(e,t,n){return e.apply(t,n)}function Mfn(e,t){var n;n=e[lhe],n.call(e,t)}function Dfn(e,t){var n;n=e[lhe],n.call(e,t)}function Ifn(e,t){return sO(),!bE(t.d.i,e)}function n4e(e,t,n,r){sH.call(this,e,t,n,r)}function Frt(){Vq.call(this),this.a=new qa}function r4e(){this.n=new qa,this.o=new qa}function Rrt(){this.b=new qa,this.c=new bt}function jrt(){this.a=new bt,this.b=new bt}function $rt(){this.a=new bm,this.b=new BQe}function i4e(){this.b=new e2,this.a=new e2}function zrt(){this.b=new Ks,this.a=new Ks}function qrt(){this.b=new Pr,this.a=new Pr}function Hrt(){this.b=new dZe,this.a=new CS}function Vrt(){this.a=new Wre,this.b=new Aee}function Urt(){this.a=new bt,this.d=new bt}function Vq(){this.n=new A8,this.i=new $8}function Grt(e){this.a=(Mh(e,Yy),new Bu(e))}function Krt(e){this.a=(Mh(e,Yy),new Bu(e))}function Ofn(e){return e<100?null:new nb(e)}function Nfn(e,t){return e.n.a=(nr(t),t+10)}function Pfn(e,t){return e.n.a=(nr(t),t+10)}function Bfn(e,t){return t==e||jE(_U(t),e)}function Wrt(e,t){return ki(e.a,t,"")==null}function Ffn(e,t){var n;return n=t.qi(e.a),n}function Oi(e,t){return e.a+=t.a,e.b+=t.b,e}function ma(e,t){return e.a-=t.a,e.b-=t.b,e}function Rfn(e){return ay(e.j.c,0),e.a=-1,e}function s4e(e,t,n){return n=Nh(e,t,11,n),n}function jfn(e,t,n){n!=null&&wV(t,pue(e,n))}function $fn(e,t,n){n!=null&&yV(t,pue(e,n))}function V8(e,t,n,r){nt.call(this,e,t,n,r)}function a4e(e,t,n,r){nt.call(this,e,t,n,r)}function Yrt(e,t,n,r){a4e.call(this,e,t,n,r)}function Xrt(e,t,n,r){pH.call(this,e,t,n,r)}function fae(e,t,n,r){pH.call(this,e,t,n,r)}function o4e(e,t,n,r){pH.call(this,e,t,n,r)}function Qrt(e,t,n,r){fae.call(this,e,t,n,r)}function c4e(e,t,n,r){fae.call(this,e,t,n,r)}function Ln(e,t,n,r){o4e.call(this,e,t,n,r)}function Jrt(e,t,n,r){c4e.call(this,e,t,n,r)}function Zrt(e,t,n,r){a5e.call(this,e,t,n,r)}function my(e,t){tc.call(this,CL+e+av+t)}function u4e(e,t){return e.jk().wi().ri(e,t)}function l4e(e,t){return e.jk().wi().ti(e,t)}function eit(e,t){return nr(e),qe(e)===qe(t)}function vn(e,t){return nr(e),qe(e)===qe(t)}function zfn(e,t){return e.b.Bd(new ket(e,t))}function qfn(e,t){return e.b.Bd(new Eet(e,t))}function tit(e,t){return e.b.Bd(new Tet(e,t))}function Hfn(e,t){return e.e=l(e.d.Kb(t),159)}function h4e(e,t,n){return e.lastIndexOf(t,n)}function Vfn(e,t,n){return Yi(e[t.a],e[n.a])}function Ufn(e,t){return rt(t,(Nt(),TB),e)}function Gfn(e,t){return ru(t.a.d.p,e.a.d.p)}function Kfn(e,t){return ru(e.a.d.p,t.a.d.p)}function Wfn(e,t){return Yi(e.c-e.s,t.c-t.s)}function Yfn(e,t){return Yi(e.b.e.a,t.b.e.a)}function Xfn(e,t){return Yi(e.c.e.a,t.c.e.a)}function nit(e){return e.c?gc(e.c.a,e,0):-1}function U8(e){return e==Tv||e==Tg||e==Mu}function f4e(e,t){this.c=e,jae.call(this,e,t)}function rit(e,t,n){this.a=e,Nye.call(this,t,n)}function iit(e){this.c=e,Dq.call(this,EP,0)}function sit(e,t,n){this.c=t,this.b=n,this.a=e}function IO(e){jk(),this.d=e,this.a=new z5}function ait(e){wd(),this.a=(Cn(),new Ek(e))}function Qfn(e,t){Ug(e.f)?ZEn(e,t):Mxn(e,t)}function oit(e,t){ldn.call(this,e,e.length,t)}function Jfn(e,t){G1||t&&(e.d=t)}function cit(e,t){return De(t,15)&&Bbt(e.c,t)}function Zfn(e,t,n){return l(e.c,71).Wk(t,n)}function Uq(e,t,n){return l(e.c,71).Xk(t,n)}function e0n(e,t,n){return ufn(e,l(t,343),n)}function d4e(e,t,n){return lfn(e,l(t,343),n)}function t0n(e,t,n){return Lgt(e,l(t,343),n)}function uit(e,t,n){return Hxn(e,l(t,343),n)}function H_(e,t){return t==null?null:Oy(e.b,t)}function g4e(e){return fy(e)?(nr(e),e):e.ue()}function Gq(e){return!isNaN(e)&&!isFinite(e)}function dae(e){knt(this),Ch(this),Ka(this,e)}function Ol(e){Yse(this),M4e(this.c,0,e.Pc())}function Zh(e,t,n){this.a=e,this.b=t,this.c=n}function lit(e,t,n){this.a=e,this.b=t,this.c=n}function hit(e,t,n){this.d=e,this.b=n,this.a=t}function fit(e){this.a=e,Vg(),Zc(Date.now())}function dit(e){ph(e.a),L6e(e.c,e.b),e.b=null}function gae(){gae=U,p_e=new Et,_6t=new Gt}function git(){git=U,M_t=We(wa,Rn,1,0,5,1)}function pit(){pit=U,W_t=We(wa,Rn,1,0,5,1)}function p4e(){p4e=U,Y_t=We(wa,Rn,1,0,5,1)}function wd(){wd=U,new Twe((Cn(),Cn(),_o))}function n0n(e){return rE(),Gr((xlt(),M6t),e)}function r0n(e){return Fl(),Gr((hlt(),B6t),e)}function i0n(e){return ZV(),Gr((Xct(),q6t),e)}function s0n(e){return aV(),Gr((Qct(),H6t),e)}function a0n(e){return PU(),Gr((Xft(),V6t),e)}function o0n(e){return t1(),Gr((ult(),K6t),e)}function c0n(e){return Bl(),Gr((clt(),Y6t),e)}function u0n(e){return ol(),Gr((llt(),Q6t),e)}function l0n(e){return YU(),Gr((Gtt(),y7t),e)}function h0n(e){return Pw(),Gr((Elt(),k7t),e)}function f0n(e){return bx(),Gr((Clt(),T7t),e)}function d0n(e){return NA(),Gr((Tlt(),_7t),e)}function g0n(e){return Zz(),Gr((kct(),A7t),e)}function p0n(e){return oV(),Gr((Jct(),U7t),e)}function b0n(e){return lA(),Gr((flt(),m8t),e)}function m0n(e){return uo(),Gr((aht(),x8t),e)}function v0n(e){return wE(),Gr((_lt(),S8t),e)}function w0n(e){return Km(),Gr((Slt(),I8t),e)}function b4e(e,t){if(!e)throw ue(new Yn(t))}function Rk(e){if(!e)throw ue(new nc(Jke))}function pae(e,t){if(e!=t)throw ue(new Xh)}function bit(e,t,n){this.a=e,this.b=t,this.c=n}function m4e(e,t,n){this.a=e,this.b=t,this.c=n}function mit(e,t,n){this.a=e,this.b=t,this.c=n}function Kq(e,t,n){this.b=e,this.a=t,this.c=n}function v4e(e,t,n){this.b=e,this.c=t,this.a=n}function w4e(e,t,n){this.a=e,this.b=t,this.c=n}function Wq(e,t,n){this.e=t,this.b=e,this.d=n}function vit(e,t,n){this.b=e,this.a=t,this.c=n}function y0n(e,t,n){return Am(),e.a.Yd(t,n),t}function bae(e){var t;return t=new Ml,t.e=e,t}function y4e(e){var t;return t=new zQe,t.b=e,t}function OO(){OO=U,CK=new pZ,SK=new dj}function Yq(){Yq=U,K8t=new SZ,G8t=new bS}function u0(){u0=U,J8t=new iee,Z8t=new see}function x0n(e){return Ow(),Gr((Hut(),uxt),e)}function k0n(e){return vo(),Gr((Ktt(),q8t),e)}function E0n(e){return IV(),Gr((Llt(),U8t),e)}function T0n(e){return R1(),Gr((Alt(),nxt),e)}function C0n(e){return Ry(),Gr((oht(),ixt),e)}function S0n(e){return OU(),Gr((Pft(),lxt),e)}function _0n(e){return yx(),Gr((Iht(),hxt),e)}function A0n(e){return JH(),Gr((sut(),fxt),e)}function L0n(e){return dA(),Gr((zut(),dxt),e)}function M0n(e){return pV(),Gr((qut(),gxt),e)}function D0n(e){return l2(),Gr((cht(),pxt),e)}function I0n(e){return pN(),Gr((tut(),bxt),e)}function O0n(e){return zE(),Gr((Pht(),kxt),e)}function N0n(e){return Ho(),Gr((f0t(),Ext),e)}function P0n(e){return vE(),Gr((Uut(),Txt),e)}function B0n(e){return ep(),Gr((Gut(),Sxt),e)}function F0n(e){return zH(),Gr((eut(),_xt),e)}function R0n(e){return WN(),Gr((Nht(),xxt),e)}function j0n(e){return Vm(),Gr((Vut(),vxt),e)}function $0n(e){return yU(),Gr((Oht(),wxt),e)}function z0n(e){return cN(),Gr((nut(),yxt),e)}function q0n(e){return hf(),Gr((lht(),Axt),e)}function H0n(e){return p2(),Gr((Kft(),Jkt),e)}function V0n(e){return EA(),Gr((Kut(),Zkt),e)}function U0n(e){return By(),Gr((Mlt(),eEt),e)}function G0n(e){return OA(),Gr((uht(),tEt),e)}function K0n(e){return Nf(),Gr((d0t(),nEt),e)}function W0n(e){return Ed(),Gr((Dlt(),rEt),e)}function Y0n(e){return dN(),Gr((rut(),iEt),e)}function X0n(e){return qo(),Gr((Xut(),aEt),e)}function Q0n(e){return LV(),Gr((Wut(),oEt),e)}function J0n(e){return yA(),Gr((Yut(),cEt),e)}function Z0n(e){return SE(),Gr((Qut(),uEt),e)}function e1n(e){return gV(),Gr((Jut(),lEt),e)}function t1n(e){return OV(),Gr((Zut(),hEt),e)}function n1n(e){return Iw(),Gr((olt(),_Et),e)}function r1n(e){return oA(),Gr((iut(),IEt),e)}function i1n(e){return xd(),Gr((cut(),jEt),e)}function s1n(e){return D1(),Gr((uut(),zEt),e)}function a1n(e){return J0(),Gr((lut(),nTt),e)}function o1n(e){return Sw(),Gr((hut(),uTt),e)}function c1n(e){return wx(),Gr((Rlt(),lTt),e)}function u1n(e){return WA(),Gr((Wtt(),hTt),e)}function l1n(e){return xA(),Gr((elt(),fTt),e)}function h1n(e){return kA(),Gr((Flt(),PTt),e)}function f1n(e){return RH(),Gr((aut(),BTt),e)}function d1n(e){return kV(),Gr((out(),zTt),e)}function g1n(e){return bU(),Gr((hht(),HTt),e)}function p1n(e){return LN(),Gr((tlt(),UTt),e)}function b1n(e){return eV(),Gr((fut(),VTt),e)}function m1n(e){return uU(),Gr((Blt(),hCt),e)}function v1n(e){return AV(),Gr((nlt(),fCt),e)}function w1n(e){return WV(),Gr((rlt(),dCt),e)}function y1n(e){return sU(),Gr((ilt(),pCt),e)}function x1n(e){return qV(),Gr((slt(),vCt),e)}function k1n(e){return GH(),Gr((dut(),jCt),e)}function E1n(e){return dE(),Gr((Zct(),z8t),e)}function T1n(e){return Zn(),Gr((Bht(),B8t),e)}function C1n(e){return tV(),Gr((alt(),$Ct),e)}function S1n(e){return fce(),Gr((gut(),zCt),e)}function _1n(e){return VA(),Gr((fht(),HCt),e)}function A1n(e){return nq(),Gr((Mct(),UCt),e)}function L1n(e){return PN(),Gr((glt(),VCt),e)}function M1n(e){return rq(),Gr((Dct(),KCt),e)}function D1n(e){return rN(),Gr((put(),WCt),e)}function I1n(e){return XN(),Gr((dht(),YCt),e)}function O1n(e){return b_(),Gr((Ict(),hSt),e)}function N1n(e){return CN(),Gr((but(),fSt),e)}function P1n(e){return r1(),Gr((pht(),vSt),e)}function B1n(e){return g2(),Gr((Oft(),ySt),e)}function F1n(e){return og(),Gr((Fht(),xSt),e)}function R1n(e){return Ym(),Gr((Rht(),_St),e)}function j1n(e){return Js(),Gr((ght(),GSt),e)}function $1n(e){return F1(),Gr((plt(),KSt),e)}function z1n(e){return ip(),Gr((jlt(),WSt),e)}function q1n(e){return vU(),Gr((jht(),YSt),e)}function H1n(e){return rp(),Gr((dlt(),QSt),e)}function V1n(e){return Ih(),Gr(($lt(),ZSt),e)}function U1n(e){return qy(),Gr((Yft(),e_t),e)}function G1n(e){return t6(),Gr((bht(),t_t),e)}function K1n(e){return Ra(),Gr(($ht(),n_t),e)}function W1n(e){return Rl(),Gr((zht(),r_t),e)}function Y1n(e){return Ct(),Gr((mht(),i_t),e)}function X1n(e){return mh(),Gr((zlt(),u_t),e)}function Q1n(e){return Zl(),Gr((Wft(),l_t),e)}function J1n(e){return dx(),Gr((blt(),h_t),e)}function Z1n(e,t){return nr(e),e+(nr(t),t)}function edn(e){return mae(),Gr((mut(),f_t),e)}function tdn(e){return VV(),Gr((qlt(),d_t),e)}function ndn(e){return NV(),Gr((Hlt(),b_t),e)}function jk(){jk=U,$De=(Ct(),er),DW=ar}function mae(){mae=U,rPe=new Wit,iPe=new Ost}function rdn(e){return!e.e&&(e.e=new bt),e.e}function vae(e,t){this.c=e,this.a=t,this.b=t-e}function wit(e,t,n){this.a=e,this.b=t,this.c=n}function wae(e,t,n){this.a=e,this.b=t,this.c=n}function x4e(e,t,n){this.a=e,this.b=t,this.c=n}function k4e(e,t,n){this.a=e,this.b=t,this.c=n}function yit(e,t,n){this.a=e,this.b=t,this.c=n}function xit(e,t,n){this.a=e,this.b=t,this.c=n}function Xp(e,t,n){this.e=e,this.a=t,this.c=n}function kit(e,t,n){Jh(),$5e.call(this,e,t,n)}function yae(e,t,n){Jh(),E5e.call(this,e,t,n)}function E4e(e,t,n){Jh(),E5e.call(this,e,t,n)}function T4e(e,t,n){Jh(),E5e.call(this,e,t,n)}function Eit(e,t,n){Jh(),yae.call(this,e,t,n)}function C4e(e,t,n){Jh(),yae.call(this,e,t,n)}function Tit(e,t,n){Jh(),C4e.call(this,e,t,n)}function Cit(e,t,n){Jh(),E4e.call(this,e,t,n)}function Sit(e,t,n){Jh(),T4e.call(this,e,t,n)}function xae(e){sH.call(this,e.d,e.c,e.a,e.b)}function S4e(e){sH.call(this,e.d,e.c,e.a,e.b)}function _4e(e){this.d=e,Mr(this),this.b=ngn(e.d)}function idn(e){return HE(),Gr((Nft(),L_t),e)}function NO(e,t){return Xr(e),Xr(t),new IZe(e,t)}function G8(e,t){return Xr(e),Xr(t),new jit(e,t)}function sdn(e,t){return Xr(e),Xr(t),new $it(e,t)}function adn(e,t){return Xr(e),Xr(t),new zZe(e,t)}function kae(e){return mr(e.b!=0),af(e,e.a.a)}function odn(e){return mr(e.b!=0),af(e,e.c.b)}function cdn(e){return!e.c&&(e.c=new Xd),e.c}function $k(e){var t;return t=new bt,Goe(t,e),t}function udn(e){var t;return t=new Ks,Goe(t,e),t}function _it(e){var t;return t=new Lwe,sce(t,e),t}function PO(e){var t;return t=new os,sce(t,e),t}function l(e,t){return V_(e==null||iue(e,t)),e}function ldn(e,t,n){Sst.call(this,t,n),this.a=e}function Ait(e,t){this.c=e,this.b=t,this.a=!1}function Lit(){this.a=";,;",this.b="",this.c=""}function Mit(e,t,n){this.b=e,ztt.call(this,t,n)}function A4e(e,t,n){this.c=e,cq.call(this,t,n)}function L4e(e,t,n){Ik.call(this,e,t),this.b=n}function M4e(e,t,n){k9e(n,0,e,t,n.length,!1)}function tg(e,t,n,r,a){e.b=t,e.c=n,e.d=r,e.a=a}function D4e(e,t,n,r,a){e.d=t,e.c=n,e.a=r,e.b=a}function hdn(e,t){t&&(e.b=t,e.a=(fb(t),t.a))}function BO(e,t){if(!e)throw ue(new Yn(t))}function K8(e,t){if(!e)throw ue(new nc(t))}function I4e(e,t){if(!e)throw ue(new BJe(t))}function fdn(e,t){return eq(),ru(e.d.p,t.d.p)}function ddn(e,t){return tp(),Yi(e.e.b,t.e.b)}function gdn(e,t){return tp(),Yi(e.e.a,t.e.a)}function pdn(e,t){return ru(Uit(e.d),Uit(t.d))}function Xq(e,t){return t&&yH(e,t.d)?t:null}function bdn(e,t){return t==(Ct(),er)?e.c:e.d}function O4e(e){return mb(pgn(wc(e)?Mf(e):e))}function mdn(e){return new lt(e.c+e.b,e.d+e.a)}function Dit(e){return e!=null&&!Hce(e,$M,zM)}function vdn(e,t){return(u1t(e)<<4|u1t(t))&Zs}function Iit(e,t,n,r,a){e.c=t,e.d=n,e.b=r,e.a=a}function N4e(e){var t,n;t=e.b,n=e.c,e.b=n,e.c=t}function P4e(e){var t,n;n=e.d,t=e.a,e.d=t,e.a=n}function wdn(e,t){var n;return n=e.c,d7e(e,t),n}function B4e(e,t){return t<0?e.g=-1:e.g=t,e}function Qq(e,t){return _wn(e),e.a*=t,e.b*=t,e}function Oit(e,t,n){_ht.call(this,t,n),this.d=e}function FO(e,t,n){tye.call(this,e,t),this.c=n}function Jq(e,t,n){tye.call(this,e,t),this.c=n}function F4e(e){p4e(),m5.call(this),this.ci(e)}function Nit(){eE(),$gn.call(this,(ib(),Gf))}function Pit(e){return Di(),new ng(0,e)}function Bit(){Bit=U,spe=(Cn(),new Da(c0e))}function Zq(){Zq=U,new W8e((Gie(),y0e),(Uie(),w0e))}function Fit(){Fit=U,t_e=We(ro,dt,17,256,0,1)}function Rit(){this.b=ze(Ge(It((b0(),Z0e))))}function Eae(e){this.b=e,this.a=Mm(this.b.a).Od()}function jit(e,t){this.b=e,this.a=t,GS.call(this)}function $it(e,t){this.a=e,this.b=t,GS.call(this)}function zit(e,t,n){this.a=e,N5.call(this,t,n)}function qit(e,t,n){this.a=e,N5.call(this,t,n)}function zk(e,t,n){var r;r=new yy(n),e1(e,t,r)}function R4e(e,t,n){var r;return r=e[t],e[t]=n,r}function eH(e){var t;return t=e.slice(),joe(t,e)}function tH(e){var t;return t=e.n,e.a.b+t.d+t.a}function Hit(e){var t;return t=e.n,e.e.b+t.d+t.a}function j4e(e){var t;return t=e.n,e.e.a+t.b+t.c}function $4e(e){e.a.b=e.b,e.b.a=e.a,e.a=e.b=null}function ui(e,t){return Cs(e,t,e.c.b,e.c),!0}function ydn(e){return e.a?e.a:Qae(e)}function xdn(e){return tx(),cg(e)==ds(Eb(e))}function kdn(e){return tx(),Eb(e)==ds(cg(e))}function gw(e,t){return RA(e,new Ik(t.a,t.b))}function Edn(e,t){return kH(),fue(e,t),new hat(e,t)}function Tdn(e,t){return e.c=t)throw ue(new Bwe)}function vy(e,t){return ON(e,(nr(t),new xo(t)))}function Y8(e,t){return ON(e,(nr(t),new lh(t)))}function Ast(e,t,n){return XIn(e,l(t,12),l(n,12))}function Lst(e){return kl(),l(e,12).g.c.length!=0}function Mst(e){return kl(),l(e,12).e.c.length!=0}function cgn(e,t){return lx(),Yi(t.a.o.a,e.a.o.a)}function ugn(e,t){t.Bb&eu&&!e.a.o&&(e.a.o=t)}function lgn(e,t){t.Ug("General 'Rotator",1),TDn(e)}function hgn(e,t,n){t.qf(n,ze(Ge(cr(e.b,n)))*e.a)}function Dst(e,t,n){return h6(),gE(e,t)&&gE(e,n)}function W_(e){return Rl(),!e.Hc(vp)&&!e.Hc(Yb)}function fgn(e){return e.e?_6e(e.e):null}function Y_(e){return wc(e)?""+e:Pbt(e)}function s5e(e){var t;for(t=e;t.f;)t=t.f;return t}function dgn(e,t,n){return Ts(t,0,U4e(t[0],n[0])),t}function Qp(e,t,n,r){var a;a=e.i,a.i=t,a.a=n,a.b=r}function nt(e,t,n,r){Ys.call(this,e,t,n),this.b=r}function _a(e,t,n,r,a){Foe.call(this,e,t,n,r,a,-1)}function X_(e,t,n,r,a){sN.call(this,e,t,n,r,a,-1)}function pH(e,t,n,r){FO.call(this,e,t,n),this.b=r}function Ist(e){Ltt.call(this,e,!1),this.a=!1}function Ost(){ctt.call(this,"LOOKAHEAD_LAYOUT",1)}function Nst(e){this.b=e,q8.call(this,e),jnt(this)}function Pst(e){this.b=e,CO.call(this,e),$nt(this)}function wy(e,t,n){this.a=e,V8.call(this,t,n,5,6)}function a5e(e,t,n,r){this.b=e,Ys.call(this,t,n,r)}function Bst(e,t){this.b=e,qg.call(this,e.b),this.a=t}function Fst(e){this.a=ydt(e.a),this.b=new Ol(e.b)}function o5e(e,t){ww(),Vun.call(this,e,RV(new Il(t)))}function bH(e,t){return Di(),new k5e(e,t,0)}function Bae(e,t){return Di(),new k5e(6,e,t)}function Za(e,t){for(nr(t);e.Ob();)t.Cd(e.Pb())}function Hu(e,t){return Ia(t)?soe(e,t):!!zo(e.f,t)}function Fae(e,t){return t.Vh()?yb(e.b,l(t,54)):t}function ggn(e,t){return vn(e.substr(0,t.length),t)}function rg(e){return new hr(new Aye(e.a.length,e.a))}function mH(e){return new lt(e.c+e.b/2,e.d+e.a/2)}function pgn(e){return qu(~e.l&eh,~e.m&eh,~e.h&hp)}function Rae(e){return typeof e===wP||typeof e===Ole}function Nl(e){e.f=new rnt(e),e.i=new int(e),++e.g}function Rst(e){if(!e)throw ue(new _c);return e.d}function X8(e){var t;return t=wA(e),mr(t!=null),t}function bgn(e){var t;return t=I4n(e),mr(t!=null),t}function Hk(e,t){var n;return n=e.a.gc(),k6e(t,n),n-t}function na(e,t){var n;return n=e.a.zc(t,e),n==null}function jO(e,t){return e.a.zc(t,(Hn(),Pb))==null}function c5e(e){return new bn(null,xgn(e,e.length))}function u5e(e,t,n){return svt(e,l(t,42),l(n,176))}function Q8(e,t,n){return d0(e.a,t),R4e(e.b,t.g,n)}function mgn(e,t,n){qk(n,e.a.c.length),rf(e.a,n,t)}function He(e,t,n,r){B0t(t,n,e.length),vgn(e,t,n,r)}function vgn(e,t,n,r){var a;for(a=t;a0?b.Math.log(e/t):-100}function $st(e,t){return iu(e,t)<0?-1:iu(e,t)>0?1:0}function $O(e,t){Dnt(e,De(t,160)?t:l(t,2036).Rl())}function d5e(e,t){if(e==null)throw ue(new D8(t))}function xgn(e,t){return Ewn(t,e.length),new Kit(e,t)}function g5e(e,t){return t?Ka(e,t):!1}function kgn(){return $z(),he(le(a6t,1),it,549,0,[E0e])}function J_(e){return e.e==0?e:new Im(-e.e,e.d,e.a)}function Egn(e,t){return Yi(e.c.c+e.c.b,t.c.c+t.c.b)}function zO(e,t){Cs(e.d,t,e.b.b,e.b),++e.a,e.c=null}function zst(e,t){return e.c?zst(e.c,t):vt(e.b,t),e}function Tgn(e,t,n){var r;return r=_y(e,t),xoe(e,t,n),r}function qst(e,t,n){var r;for(r=0;r=e.g}function Ts(e,t,n){return pfn(n==null||lAn(e,n)),e[t]=n}function w5e(e,t){return Xn(t,e.length+1),e.substr(t)}function Wae(e,t){for(nr(t);e.c=e?new b3e:Kwn(e-1)}function eo(e){return!e.a&&e.c?e.c.b:e.a}function T5e(e){return De(e,616)?e:new oot(e)}function fb(e){e.c?fb(e.c):(xb(e),e.d=!0)}function tA(e){e.c?e.c.$e():(e.d=!0,hCn(e))}function cat(e){e.b=!1,e.c=!1,e.d=!1,e.a=!1}function uat(e){var t,n;return t=e.c.i.c,n=e.d.i.c,t==n}function Hgn(e,t){var n;n=e.Ih(t),n>=0?e.ki(n):d9e(e,t)}function lat(e,t){e.c<0||e.b.b0;)e=e<<1|(e<0?1:0);return e}function vat(e,t){var n;return n=new yu(e),$n(t.c,n),n}function wat(e,t){e.u.Hc((Rl(),vp))&&Wkn(e,t),fvn(e,t)}function Jc(e,t){return qe(e)===qe(t)||e!=null&&Pi(e,t)}function Qo(e,t){return Aae(e.a,t)?e.b[l(t,22).g]:null}function npn(){return Zz(),he(le(U_e,1),it,489,0,[G0e])}function rpn(){return nq(),he(le(wOe,1),it,490,0,[bge])}function ipn(){return rq(),he(le(GCt,1),it,558,0,[mge])}function spn(){return b_(),he(le($Oe,1),it,539,0,[qB])}function EH(e){return!e.n&&(e.n=new nt(ec,e,1,7)),e.n}function Xae(e){return!e.c&&(e.c=new nt(Hl,e,9,9)),e.c}function A5e(e){return!e.c&&(e.c=new Ln(_r,e,5,8)),e.c}function apn(e){return!e.b&&(e.b=new Ln(_r,e,4,7)),e.b}function qO(e){return e.j.c.length=0,M5e(e.c),Rfn(e.a),e}function Wk(e){return e.e==ET&&hn(e,e6n(e.g,e.b)),e.e}function HO(e){return e.f==ET&&Dn(e,U7n(e.g,e.b)),e.f}function Ei(e,t,n,r){return qft(e,t,n,!1),jV(e,r),e}function yat(e,t){this.b=e,jae.call(this,e,t),jnt(this)}function xat(e,t){this.b=e,f4e.call(this,e,t),$nt(this)}function nA(e){this.d=e,this.a=this.d.b,this.b=this.d.c}function L5e(e,t){this.b=e,this.c=t,this.a=new P8(this.b)}function co(e,t){return Xn(t,e.length),e.charCodeAt(t)}function opn(e,t){b8e(e,ze(np(t,"x")),ze(np(t,"y")))}function cpn(e,t){b8e(e,ze(np(t,"x")),ze(np(t,"y")))}function Fi(e,t){return xb(e),new bn(e,new $6e(t,e.a))}function fc(e,t){return xb(e),new bn(e,new C6e(t,e.a))}function xy(e,t){return xb(e),new Vye(e,new Mut(t,e.a))}function TH(e,t){return xb(e),new Uye(e,new Dut(t,e.a))}function upn(e,t){return new Uat(l(Xr(e),50),l(Xr(t),50))}function lpn(e,t){return Yi(e.d.c+e.d.b/2,t.d.c+t.d.b/2)}function kat(e,t,n){n.a?Gu(e,t.b-e.f/2):Uu(e,t.a-e.g/2)}function hpn(e,t){return Yi(e.g.c+e.g.b/2,t.g.c+t.g.b/2)}function fpn(e,t){return w3e(),Yi((nr(e),e),(nr(t),t))}function dpn(e){return e!=null&&nO(EY,e.toLowerCase())}function M5e(e){var t;for(t=e.Kc();t.Ob();)t.Pb(),t.Qb()}function V5(e){var t;return t=e.b,!t&&(e.b=t=new mie(e)),t}function Qae(e){var t;return t=Qwn(e),t||null}function Eat(e,t){var n,r;return n=e/t,r=ua(n),n>r&&++r,r}function gpn(e,t,n){var r;r=l(e.d.Kb(n),159),r&&r.Nb(t)}function ppn(e,t,n){mLn(e.a,n),W3n(n),REn(e.b,n),RLn(t,n)}function CH(e,t,n,r){this.a=e,this.c=t,this.b=n,this.d=r}function D5e(e,t,n,r){this.c=e,this.b=t,this.a=n,this.d=r}function Tat(e,t,n,r){this.c=e,this.b=t,this.d=n,this.a=r}function ef(e,t,n,r){this.c=e,this.d=t,this.b=n,this.a=r}function Cat(e,t,n,r){this.a=e,this.d=t,this.c=n,this.b=r}function Jae(e,t,n,r){this.a=e,this.e=t,this.d=n,this.c=r}function Sat(e,t,n,r){this.a=e,this.c=t,this.d=n,this.b=r}function Zae(e,t,n){this.a=iEe,this.d=e,this.b=t,this.c=n}function Z8(e,t,n,r){Ur.call(this,e,t),this.a=n,this.b=r}function _at(e,t){this.d=(nr(e),e),this.a=16449,this.c=t}function Aat(e){this.a=new bt,this.e=We(Vr,dt,53,e,0,2)}function bpn(e){e.Ug("No crossing minimization",1),e.Vg()}function Lat(){Ac.call(this,"There is no more element.")}function Mat(e,t,n,r){this.a=e,this.b=t,this.c=n,this.d=r}function Dat(e,t,n,r){this.a=e,this.b=t,this.c=n,this.d=r}function Om(e,t,n,r){this.e=e,this.a=t,this.c=n,this.d=r}function Iat(e,t,n,r){this.a=e,this.c=t,this.d=n,this.b=r}function Oat(e,t,n,r){Jh(),Iut.call(this,t,n,r),this.a=e}function Nat(e,t,n,r){Jh(),Iut.call(this,t,n,r),this.a=e}function eoe(e,t,n){var r,a;return r=Vke(e),a=t.ti(n,r),a}function Kg(e){var t,n;return n=(t=new Qv,t),sE(n,e),n}function toe(e){var t,n;return n=(t=new Qv,t),Kxe(n,e),n}function mpn(e,t){var n;return n=cr(e.f,t),S7e(t,n),null}function Pat(e){return!e.b&&(e.b=new nt(js,e,12,3)),e.b}function Bat(e){return V_(e==null||Rae(e)&&e.Tm!==xe),e}function SH(e){return e.n&&(e.e!==Fwt&&e.je(),e.j=null),e}function Yk(e){if(Ql(e.d),e.d.d!=e.c)throw ue(new Xh)}function I5e(e){return mr(e.b0&&ggt(this)}function Fat(e,t){this.a=e,bfn.call(this,e,l(e.d,15).fd(t))}function vpn(e,t){return Yi(wl(e)*gh(e),wl(t)*gh(t))}function wpn(e,t){return Yi(wl(e)*gh(e),wl(t)*gh(t))}function ypn(e){return qw(e)&&Rt(Bt(at(e,(Nt(),gv))))}function xpn(e,t){return xn(e,l(Q(t,(Nt(),HT)),17),t)}function kpn(e,t){return l(Q(e,(ft(),Wx)),15).Fc(t),t}function O5e(e,t){return e.b=t.b,e.c=t.c,e.d=t.d,e.a=t.a,e}function Rat(e,t,n,r){this.b=e,this.c=r,Dq.call(this,t,n)}function Epn(e,t,n){e.i=0,e.e=0,t!=n&&x0t(e,t,n)}function Tpn(e,t,n){e.i=0,e.e=0,t!=n&&k0t(e,t,n)}function Cpn(e,t,n){return p_(),J4n(l(cr(e.e,t),529),n)}function ex(e){var t;return t=e.f,t||(e.f=new Lk(e,e.c))}function jat(e,t){return e6(e.j,t.s,t.c)+e6(t.e,e.s,e.c)}function $at(e,t){e.e&&!e.e.a&&(CQe(e.e,t),$at(e.e,t))}function zat(e,t){e.d&&!e.d.a&&(CQe(e.d,t),zat(e.d,t))}function Spn(e,t){return-Yi(wl(e)*gh(e),wl(t)*gh(t))}function _pn(e){return l(e.ld(),149).Pg()+":"+xc(e.md())}function qat(){Nue(this,new fz),this.wb=(lb(),Vn),Sk()}function Hat(e){this.b=new bt,ra(this.b,this.b),this.a=e}function N5e(e,t){new os,this.a=new bl,this.b=e,this.c=t}function Ew(){Ew=U,d_e=new Ke,D0e=new Ke,g_e=new Ft}function Cn(){Cn=U,_o=new je,mg=new Se,hK=new Ce}function P5e(){P5e=U,j6t=new wo,z6t=new X4e,$6t=new _s}function tx(){tx=U,wK=new bt,X0e=new Pr,Y0e=new bt}function _H(e,t){if(e==null)throw ue(new D8(t));return e}function AH(e){return!e.a&&(e.a=new nt(Ai,e,10,11)),e.a}function qi(e){return!e.q&&(e.q=new nt(Uf,e,11,10)),e.q}function tt(e){return!e.s&&(e.s=new nt(dl,e,21,17)),e.s}function Apn(e){return Xr(e),Mdt(new hr(dr(e.a.Kc(),new j)))}function Lpn(e,t){return bh(e),bh(t),PJe(l(e,22),l(t,22))}function Nm(e,t,n){var r,a;r=g4e(n),a=new vk(r),e1(e,t,a)}function roe(e,t,n,r,a,o){sN.call(this,e,t,n,r,a,o?-2:-1)}function Vat(e,t,n,r){tye.call(this,t,n),this.b=e,this.a=r}function Uat(e,t){Xcn.call(this,new Pae(e)),this.a=e,this.b=t}function B5e(e){this.b=e,this.c=e,e.e=null,e.c=null,this.a=1}function Mpn(e){u0();var t;t=l(e.g,10),t.n.a=e.d.c+t.d.b}function Xk(){Xk=U;var e,t;t=!F5n(),e=new se,S0e=t?new ne:e}function ioe(e){return Cn(),De(e,59)?new ese(e):new jq(e)}function LH(e){return De(e,16)?new U_(l(e,16)):udn(e.Kc())}function Dpn(e){return new qnt(e,e.e.Rd().gc()*e.c.Rd().gc())}function Ipn(e){return new Hnt(e,e.e.Rd().gc()*e.c.Rd().gc())}function F5e(e){return e&&e.hashCode?e.hashCode():fw(e)}function soe(e,t){return t==null?!!zo(e.f,null):Wdn(e.i,t)}function Opn(e,t){var n;return n=wye(e.a,t),n&&(t.d=null),n}function Gat(e,t,n){return e.f?e.f.ef(t,n):!1}function VO(e,t,n,r){Ts(e.c[t.g],n.g,r),Ts(e.c[n.g],t.g,r)}function aoe(e,t,n,r){Ts(e.c[t.g],t.g,n),Ts(e.b[t.g],t.g,r)}function Npn(e,t,n){return ze(Ge(n.a))<=e&&ze(Ge(n.b))>=t}function Kat(e,t){this.g=e,this.d=he(le(wg,1),m2,10,0,[t])}function Wat(e){this.c=e,this.b=new Kp(l(Xr(new tl),50))}function Yat(e){this.c=e,this.b=new Kp(l(Xr(new l5),50))}function Xat(e){this.b=e,this.a=new Kp(l(Xr(new Bi),50))}function Qat(){this.b=new Ks,this.d=new os,this.e=new Fwe}function R5e(){this.c=new qa,this.d=new qa,this.e=new qa}function Tw(){this.a=new bl,this.b=(Mh(3,Yy),new Bu(3))}function Jp(e,t){this.e=e,this.a=wa,this.b=Qbt(t),this.c=t}function MH(e){this.c=e.c,this.d=e.d,this.b=e.b,this.a=e.a}function Jat(e,t,n,r,a,o){this.a=e,Joe.call(this,t,n,r,a,o)}function Zat(e,t,n,r,a,o){this.a=e,Joe.call(this,t,n,r,a,o)}function db(e,t,n,r,a,o,f){return new Eoe(e.e,t,n,r,a,o,f)}function Ppn(e,t,n){return n>=0&&vn(e.substr(n,t.length),t)}function eot(e,t){return De(t,149)&&vn(e.b,l(t,149).Pg())}function Bpn(e,t){return e.a?t.Gh().Kc():l(t.Gh(),71).Ii()}function tot(e,t){var n;return n=e.b.Qc(t),Yct(n,e.b.gc()),n}function UO(e,t){if(e==null)throw ue(new D8(t));return e}function dc(e){return e.u||(Yl(e),e.u=new Nrt(e,e)),e.u}function ooe(e){this.a=(Cn(),De(e,59)?new ese(e):new jq(e))}function sl(e){var t;return t=l(Kn(e,16),29),t||e.ii()}function DH(e,t){var n;return n=_m(e.Rm),t==null?n:n+": "+t}function tf(e,t,n){return Ga(t,n,e.length),e.substr(t,n-t)}function not(e,t){Vq.call(this),Y6e(this),this.a=e,this.c=t}function Fpn(e){e&&DH(e,e.ie())}function Rpn(e){Hz(),b.setTimeout(function(){throw e},0)}function jpn(){return ZV(),he(le(k_e,1),it,436,0,[j0e,x_e])}function $pn(){return aV(),he(le(T_e,1),it,435,0,[E_e,$0e])}function zpn(){return oV(),he(le(J_e,1),it,432,0,[Q0e,yK])}function qpn(){return dE(),he(le($8t,1),it,517,0,[dB,h1e])}function Hpn(){return zH(),he(le(PLe,1),it,429,0,[z1e,NLe])}function Vpn(){return pN(),he(le(wLe,1),it,428,0,[XK,vLe])}function Upn(){return JH(),he(le(hLe,1),it,431,0,[lLe,S1e])}function Gpn(){return dN(),he(le(_De,1),it,430,0,[kde,Ede])}function Kpn(){return oA(),he(le(DEt,1),it,531,0,[uM,cM])}function Wpn(){return kV(),he(le(EIe,1),it,501,0,[$W,X6])}function Ypn(){return xd(),he(le(REt,1),it,523,0,[w3,T2])}function Xpn(){return D1(),he(le($Et,1),it,522,0,[wv,Y1])}function Qpn(){return J0(),he(le(tTt,1),it,528,0,[E4,qb])}function Jpn(){return cN(),he(le(kLe,1),it,488,0,[xLe,JK])}function Zpn(){return GH(),he(le(fOe,1),it,491,0,[dge,hOe])}function e2n(){return fce(),he(le(vOe,1),it,492,0,[bOe,mOe])}function t2n(){return RH(),he(le(kIe,1),it,433,0,[Ude,xIe])}function n2n(){return eV(),he(le(CIe,1),it,434,0,[TIe,Qde])}function r2n(){return Sw(),he(le(cTt,1),it,465,0,[Hb,K6])}function i2n(){return rN(),he(le(yOe,1),it,438,0,[vge,QW])}function s2n(){return CN(),he(le(qOe,1),it,437,0,[ZW,zOe])}function a2n(){return mae(),he(le(gY,1),it,347,0,[rPe,iPe])}function IH(e,t,n,r){return n>=0?e.Uh(t,n,r):e.Ch(null,n,r)}function GO(e){return e.b.b==0?e.a.sf():kae(e.b)}function o2n(e){if(e.p!=5)throw ue(new pl);return Yr(e.f)}function c2n(e){if(e.p!=5)throw ue(new pl);return Yr(e.k)}function j5e(e){return qe(e.a)===qe((lce(),npe))&&aMn(e),e.a}function u2n(e,t){e.b=t,e.c>0&&e.b>0&&(e.g=aH(e.c,e.b,e.a))}function l2n(e,t){e.c=t,e.c>0&&e.b>0&&(e.g=aH(e.c,e.b,e.a))}function rot(e,t){ce(this,new lt(e.a,e.b)),ve(this,PO(t))}function Cw(){Qcn.call(this,new N8(Ay(12))),Tye(!0),this.a=2}function coe(e,t,n){Di(),Xv.call(this,e),this.b=t,this.a=n}function $5e(e,t,n){Jh(),Nz.call(this,t),this.a=e,this.b=n}function iot(e){var t;t=e.c.d.b,e.b=t,e.a=e.c.d,t.a=e.c.d.b=e}function h2n(e){return e.b==0?null:(mr(e.b!=0),af(e,e.a.a))}function xu(e,t){return t==null?hc(zo(e.f,null)):y_(e.i,t)}function sot(e,t,n,r,a){return new Bue(e,(rE(),P0e),t,n,r,a)}function OH(e,t){return Gct(t),Pwn(e,We(Vr,di,28,t,15,1),t)}function NH(e,t){return _H(e,"set1"),_H(t,"set2"),new GZe(e,t)}function f2n(e,t){var n=C0e[e.charCodeAt(0)];return n??e}function aot(e,t){var n,r;return n=t,r=new xt,Ovt(e,n,r),r.d}function uoe(e,t,n,r){var a;a=new Frt,t.a[n.g]=a,Q8(e.b,r,a)}function d2n(e,t){var n;return n=Iwn(e.f,t),Oi(Hq(n),e.f.d)}function KO(e){var t;Hwn(e.a),dnt(e.a),t=new e_(e.a),S8e(t)}function g2n(e,t){zbt(e,!0),Vu(e.e.Rf(),new v4e(e,!0,t))}function p2n(e,t){return tx(),e==ds(cg(t))||e==ds(Eb(t))}function b2n(e,t){return tp(),l(Q(t,(Hc(),$d)),17).a==e}function ua(e){return Math.max(Math.min(e,Ii),-2147483648)|0}function oot(e){this.a=l(Xr(e),277),this.b=(Cn(),new Dye(e))}function cot(e,t,n){this.i=new bt,this.b=e,this.g=t,this.a=n}function z5e(e,t,n){this.a=new bt,this.e=e,this.f=t,this.c=n}function PH(e,t,n){this.c=new bt,this.e=e,this.f=t,this.b=n}function uot(e){Vq.call(this),Y6e(this),this.a=e,this.c=!0}function m2n(e){function t(){}return t.prototype=e||{},new t}function v2n(e){if(e.Ae())return null;var t=e.n;return sK[t]}function WO(e){return e.Db>>16!=3?null:l(e.Cb,27)}function M1(e){return e.Db>>16!=9?null:l(e.Cb,27)}function lot(e){return e.Db>>16!=6?null:l(e.Cb,74)}function Sw(){Sw=U,Hb=new H3e(Mx,0),K6=new H3e(Dx,1)}function xd(){xd=U,w3=new $3e(Dx,0),T2=new $3e(Mx,1)}function D1(){D1=U,wv=new z3e(whe,0),Y1=new z3e("UP",1)}function hot(){hot=U,o6t=Kr(($z(),he(le(a6t,1),it,549,0,[E0e])))}function fot(e){var t;return t=new Kz(Ay(e.length)),j7e(t,e),t}function dot(e,t){return e.b+=t.b,e.c+=t.c,e.d+=t.d,e.a+=t.a,e}function w2n(e,t){return Zft(e,t)?(Yht(e),!0):!1}function Wg(e,t){if(t==null)throw ue(new S8);return j5n(e,t)}function YO(e,t){var n;n=e.q.getHours(),e.q.setDate(t),XA(e,n)}function q5e(e,t,n){var r;r=e.Ih(t),r>=0?e.bi(r,n):$9e(e,t,n)}function got(e,t){var n;return n=e.Ih(t),n>=0?e.Wh(n):que(e,t)}function pot(e,t){var n;for(Xr(t),n=e.a;n;n=n.c)t.Yd(n.g,n.i)}function loe(e,t,n){var r;r=w0t(e,t,n),e.b=new TV(r.c.length)}function U5(e,t,n){BH(),e&&ki(Zge,e,t),e&&ki(lF,e,n)}function y2n(e,t){return Yq(),Hn(),l(t.a,17).a0}function H5e(e){var t;return t=e.d,t=e.bj(e.f),qr(e,t),t.Ob()}function bot(e,t){var n;return n=new K4e(t),zgt(n,e),new Ol(n)}function E2n(e){if(e.p!=0)throw ue(new pl);return I_(e.f,0)}function T2n(e){if(e.p!=0)throw ue(new pl);return I_(e.k,0)}function mot(e){return e.Db>>16!=7?null:l(e.Cb,241)}function Qk(e){return e.Db>>16!=6?null:l(e.Cb,241)}function vot(e){return e.Db>>16!=7?null:l(e.Cb,167)}function ds(e){return e.Db>>16!=11?null:l(e.Cb,27)}function ky(e){return e.Db>>16!=17?null:l(e.Cb,29)}function wot(e){return e.Db>>16!=3?null:l(e.Cb,155)}function V5e(e){var t;return xb(e),t=new Ks,Fi(e,new k5(t))}function yot(e,t){var n=e.a=e.a||[];return n[t]||(n[t]=e.ve(t))}function C2n(e,t){var n;n=e.q.getHours(),e.q.setMonth(t),XA(e,n)}function xot(e,t){Fq(this),this.f=t,this.g=e,SH(this),this.je()}function kot(e,t){this.a=e,this.c=Ja(this.a),this.b=new MH(t)}function Eot(e,t,n){this.a=t,this.c=e,this.b=(Xr(n),new Ol(n))}function Tot(e,t,n){this.a=t,this.c=e,this.b=(Xr(n),new Ol(n))}function Cot(e){this.a=e,this.b=We(AEt,dt,2043,e.e.length,0,2)}function Sot(){this.a=new bd,this.e=new Ks,this.g=0,this.i=0}function BH(){BH=U,Zge=new Pr,lF=new Pr,wln(C6t,new LS)}function _ot(){_ot=U,fEt=yl(new Xs,(uo(),mc),(vo(),gB))}function U5e(){U5e=U,dEt=yl(new Xs,(uo(),mc),(vo(),gB))}function Aot(){Aot=U,pEt=yl(new Xs,(uo(),mc),(vo(),gB))}function Lot(){Lot=U,OEt=fi(new Xs,(uo(),mc),(vo(),zL))}function Sh(){Sh=U,BEt=fi(new Xs,(uo(),mc),(vo(),zL))}function Mot(){Mot=U,FEt=fi(new Xs,(uo(),mc),(vo(),zL))}function foe(){foe=U,qEt=fi(new Xs,(uo(),mc),(vo(),zL))}function rA(e,t,n,r,a,o){return new Zg(e.e,t,e.Lj(),n,r,a,o)}function rc(e,t,n){return t==null?ju(e.f,null,n):Bw(e.i,t,n)}function po(e,t){e.c&&al(e.c.g,e),e.c=t,e.c&&vt(e.c.g,e)}function Va(e,t){e.c&&al(e.c.a,e),e.c=t,e.c&&vt(e.c.a,e)}function Mc(e,t){e.i&&al(e.i.j,e),e.i=t,e.i&&vt(e.i.j,e)}function Fa(e,t){e.d&&al(e.d.e,e),e.d=t,e.d&&vt(e.d.e,e)}function doe(e,t){e.a&&al(e.a.k,e),e.a=t,e.a&&vt(e.a.k,e)}function goe(e,t){e.b&&al(e.b.f,e),e.b=t,e.b&&vt(e.b.f,e)}function Dot(e,t){Fgn(e,e.b,e.c),l(e.b.b,68),t&&l(t.b,68).b}function S2n(e,t){return Yi(l(e.c,65).c.e.b,l(t.c,65).c.e.b)}function _2n(e,t){return Yi(l(e.c,65).c.e.a,l(t.c,65).c.e.a)}function A2n(e){return Mce(),Hn(),l(e.a,86).d.e!=0}function FH(e,t){De(e.Cb,184)&&(l(e.Cb,184).tb=null),Fu(e,t)}function poe(e,t){De(e.Cb,90)&&zy(Yl(l(e.Cb,90)),4),Fu(e,t)}function L2n(e,t){m8e(e,t),De(e.Cb,90)&&zy(Yl(l(e.Cb,90)),2)}function M2n(e,t){var n,r;n=t.c,r=n!=null,r&&J8(e,new yy(t.c))}function Iot(e){var t,n;return n=(Sk(),t=new Qv,t),sE(n,e),n}function Oot(e){var t,n;return n=(Sk(),t=new Qv,t),sE(n,e),n}function Not(e){for(var t;;)if(t=e.Pb(),!e.Ob())return t}function D2n(e,t,n){return vt(e.a,(kH(),fue(t,n),new iw(t,n))),e}function ku(e,t){return Fo(),Voe(t)?new nH(t,e):new yO(t,e)}function XO(e){return Cd(),iu(e,0)>=0?kb(e):J_(kb(r2(e)))}function I2n(e){var t;return t=l(eH(e.b),9),new Zh(e.a,t,e.c)}function Pot(e,t){var n;return n=l(Oy(ex(e.a),t),16),n?n.gc():0}function Bot(e,t,n){var r;o1t(t,n,e.c.length),r=n-t,d3e(e.c,t,r)}function Zp(e,t,n){o1t(t,n,e.gc()),this.c=e,this.a=t,this.b=n-t}function nx(e){this.c=new os,this.b=e.b,this.d=e.c,this.a=e.a}function boe(e){this.a=b.Math.cos(e),this.b=b.Math.sin(e)}function Pm(e,t,n,r){this.c=e,this.d=r,doe(this,t),goe(this,n)}function G5e(e,t){Ycn.call(this,new N8(Ay(e))),Mh(t,Dwt),this.a=t}function Fot(e,t,n){return new Bue(e,(rE(),N0e),null,!1,t,n)}function Rot(e,t,n){return new Bue(e,(rE(),B0e),t,n,null,!1)}function O2n(){return Fl(),he(le(oc,1),it,108,0,[y_e,Ec,i4])}function N2n(){return ol(),he(le(X6t,1),it,472,0,[a1,Fb,w0])}function P2n(){return Bl(),he(le(W6t,1),it,471,0,[Fd,Bb,v0])}function B2n(){return t1(),he(le(s4,1),it,237,0,[Gc,$u,Kc])}function F2n(){return lA(),he(le(dAe,1),it,391,0,[t1e,e1e,n1e])}function R2n(){return Ow(),he(le(m1e,1),it,372,0,[o3,Rb,a3])}function j2n(){return dA(),he(le(dLe,1),it,322,0,[HL,mB,fLe])}function $2n(){return pV(),he(le(pLe,1),it,351,0,[gLe,YK,_1e])}function z2n(){return Vm(),he(le(mxt,1),it,460,0,[M1e,FT,P6])}function q2n(){return vE(),he(le($1e,1),it,299,0,[R1e,j1e,vB])}function H2n(){return ep(),he(le(Cxt,1),it,311,0,[wB,F6,Ux])}function V2n(){return EA(),he(le(mDe,1),it,390,0,[pde,bDe,SW])}function U2n(){return qo(),he(le(sEt,1),it,463,0,[sM,$l,zu])}function G2n(){return LV(),he(le(MDe,1),it,387,0,[ADe,Tde,LDe])}function K2n(){return yA(),he(le(DDe,1),it,349,0,[Sde,Cde,MB])}function W2n(){return SE(),he(le(ODe,1),it,350,0,[_de,IDe,aM])}function Y2n(){return gV(),he(le(BDe,1),it,352,0,[PDe,Ade,NDe])}function X2n(){return OV(),he(le(FDe,1),it,388,0,[Lde,XT,k4])}function Q2n(){return Iw(),he(le(SEt,1),it,464,0,[DB,oM,MW])}function I1(e){return Ic(he(le(Ea,1),dt,8,0,[e.i.n,e.n,e.a]))}function J2n(){return xA(),he(le(eIe,1),it,392,0,[ZDe,Ide,OB])}function jot(){jot=U,FTt=yl(new Xs,(wx(),hM),(WA(),VDe))}function RH(){RH=U,Ude=new V3e("DFS",0),xIe=new V3e("BFS",1)}function $ot(e,t,n){var r;r=new hte,r.b=t,r.a=n,++t.b,vt(e.d,r)}function Z2n(e,t,n){var r;r=new Eo(n.d),Oi(r,e),b8e(t,r.a,r.b)}function ebn(e,t){Ont(e,Yr(va(bw(t,24),ZU)),Yr(va(t,ZU)))}function Ey(e,t){if(e<0||e>t)throw ue(new tc(dEe+e+gEe+t))}function Sn(e,t){if(e<0||e>=t)throw ue(new tc(dEe+e+gEe+t))}function Xn(e,t){if(e<0||e>=t)throw ue(new e3e(dEe+e+gEe+t))}function kn(e,t){this.b=(nr(e),e),this.a=t&Xy?t:t|64|_d}function K5e(e){var t;return xb(e),t=(Ew(),Ew(),D0e),lV(e,t)}function tbn(e,t,n){var r;return r=ZA(e,t,!1),r.b<=t&&r.a<=n}function nbn(){return tV(),he(le(pOe,1),it,439,0,[gge,gOe,dOe])}function rbn(){return qV(),he(le(XIe,1),it,394,0,[YIe,uge,WIe])}function ibn(){return WV(),he(le(KIe,1),it,445,0,[RB,VW,rge])}function sbn(){return sU(),he(le(gCt,1),it,456,0,[ige,age,sge])}function abn(){return LN(),he(le(AIe,1),it,393,0,[zW,SIe,_Ie])}function obn(){return AV(),he(le(GIe,1),it,300,0,[nge,UIe,VIe])}function cbn(){return rp(),he(le(YNe,1),it,346,0,[oY,A2,DM])}function ubn(){return PN(),he(le(pge,1),it,444,0,[WW,YW,XW])}function lbn(){return F1(),he(le(FNe,1),it,278,0,[nC,_4,rC])}function hbn(){return dx(),he(le(nPe,1),it,280,0,[tPe,L4,dY])}function _w(e){return Xr(e),De(e,16)?new Ol(l(e,16)):$k(e.Kc())}function W5e(e,t){return e&&e.equals?e.equals(t):qe(e)===qe(t)}function va(e,t){return mb(rgn(wc(e)?Mf(e):e,wc(t)?Mf(t):t))}function Q0(e,t){return mb(ign(wc(e)?Mf(e):e,wc(t)?Mf(t):t))}function moe(e,t){return mb(sgn(wc(e)?Mf(e):e,wc(t)?Mf(t):t))}function fbn(e,t){var n;return n=(nr(e),e).g,qye(!!n),nr(t),n(t)}function zot(e,t){var n,r;return r=Hk(e,t),n=e.a.fd(r),new VZe(e,n)}function dbn(e){return e.Db>>16!=6?null:l(Uue(e),241)}function gbn(e){if(e.p!=2)throw ue(new pl);return Yr(e.f)&Zs}function pbn(e){if(e.p!=2)throw ue(new pl);return Yr(e.k)&Zs}function re(e){return mr(e.ar?1:0}function Uot(e,t){var n,r;return n=$oe(t),r=n,l(cr(e.c,r),17).a}function voe(e,t,n){var r;r=e.d[t.p],e.d[t.p]=e.d[n.p],e.d[n.p]=r}function Sbn(e,t,n){var r;e.n&&t&&n&&(r=new Kne,vt(e.e,r))}function woe(e,t){if(na(e.a,t),t.d)throw ue(new Ac(e3t));t.d=e}function Q5e(e,t){this.a=new bt,this.d=new bt,this.f=e,this.c=t}function Got(){this.c=new Lnt,this.a=new Put,this.b=new UQe,uet()}function Kot(){hx(),this.b=new Pr,this.a=new Pr,this.c=new bt}function Wot(e,t,n){this.d=e,this.j=t,this.e=n,this.o=-1,this.p=3}function Yot(e,t,n){this.d=e,this.k=t,this.f=n,this.o=-1,this.p=5}function Xot(e,t,n,r,a,o){Q6e.call(this,e,t,n,r,a),o&&(this.o=-2)}function Qot(e,t,n,r,a,o){J6e.call(this,e,t,n,r,a),o&&(this.o=-2)}function Jot(e,t,n,r,a,o){p6e.call(this,e,t,n,r,a),o&&(this.o=-2)}function Zot(e,t,n,r,a,o){t7e.call(this,e,t,n,r,a),o&&(this.o=-2)}function ect(e,t,n,r,a,o){b6e.call(this,e,t,n,r,a),o&&(this.o=-2)}function tct(e,t,n,r,a,o){Z6e.call(this,e,t,n,r,a),o&&(this.o=-2)}function nct(e,t,n,r,a,o){e7e.call(this,e,t,n,r,a),o&&(this.o=-2)}function rct(e,t,n,r,a,o){m6e.call(this,e,t,n,r,a),o&&(this.o=-2)}function ict(e,t,n,r){Nz.call(this,n),this.b=e,this.c=t,this.d=r}function sct(e,t){this.f=e,this.a=(eE(),SY),this.c=SY,this.b=t}function act(e,t){this.g=e,this.d=(eE(),_Y),this.a=_Y,this.b=t}function J5e(e,t){!e.c&&(e.c=new Ls(e,0)),HU(e.c,(Gi(),HM),t)}function _bn(e,t){return uTn(e,t,De(t,102)&&(l(t,19).Bb&Io)!=0)}function Abn(e,t){return $st(Zc(e.q.getTime()),Zc(t.q.getTime()))}function oct(e){return Cae(e.e.Rd().gc()*e.c.Rd().gc(),16,new pie(e))}function Lbn(e){return!!e.u&&du(e.u.a).i!=0&&!(e.n&&cue(e.n))}function Mbn(e){return!!e.a&&Xl(e.a.a).i!=0&&!(e.b&&uue(e.b))}function Z5e(e,t){return t==0?!!e.o&&e.o.f!=0:nue(e,t)}function Dbn(e,t,n){var r;return r=l(e.Zb().xc(t),16),!!r&&r.Hc(n)}function cct(e,t,n){var r;return r=l(e.Zb().xc(t),16),!!r&&r.Mc(n)}function uct(e,t){var n;return n=1-t,e.a[n]=EV(e.a[n],n),EV(e,t)}function lct(e,t){var n,r;return r=va(e,Vo),n=l0(t,32),Q0(n,r)}function hct(e,t,n){var r;r=(Xr(e),new Ol(e)),O7n(new Eot(r,t,n))}function QO(e,t,n){var r;r=(Xr(e),new Ol(e)),N7n(new Tot(r,t,n))}function zc(e,t,n,r,a,o){return qft(e,t,n,o),c8e(e,r),u8e(e,a),e}function fct(e,t,n,r){return e.a+=""+tf(t==null?ul:xc(t),n,r),e}function Ua(e,t){this.a=e,kr.call(this,e),Ey(t,e.gc()),this.b=t}function dct(e){this.a=We(wa,Rn,1,P7e(b.Math.max(8,e))<<1,5,1)}function JO(e){return l(j1(e,We(wg,m2,10,e.c.length,0,1)),199)}function kd(e){return l(j1(e,We(u1e,Bhe,18,e.c.length,0,1)),483)}function gct(e){return e.a?e.e.length==0?e.a.a:e.a.a+(""+e.e):e.c}function iA(e){for(;e.d>0&&e.a[--e.d]==0;);e.a[e.d++]==0&&(e.e=0)}function pct(e){return mr(e.b.b!=e.d.a),e.c=e.b=e.b.b,--e.a,e.c.c}function Ibn(e,t,n){e.a=t,e.c=n,e.b.a.$b(),Ch(e.d),ay(e.e.a.c,0)}function bct(e,t){var n;e.e=new Vwe,n=Hy(t),Vs(n,e.c),Mbt(e,n,0)}function Qs(e,t,n,r){var a;a=new J9,a.a=t,a.b=n,a.c=r,ui(e.a,a)}function gt(e,t,n,r){var a;a=new J9,a.a=t,a.b=n,a.c=r,ui(e.b,a)}function mct(e,t,n){if(e<0||tn)throw ue(new tc(U9n(e,t,n)))}function ZO(e,t){if(e<0||e>=t)throw ue(new tc(kkn(e,t)));return e}function Obn(e){if(!("stack"in e))try{throw e}catch{}return e}function G5(e){return p_(),De(e.g,10)?l(e.g,10):null}function Nbn(e){return V5(e).dc()?!1:(rhn(e,new oe),!0)}function Fm(e){var t;return wc(e)?(t=e,t==-0?0:t):Yvn(e)}function vct(e,t){return De(t,44)?gue(e.a,l(t,44)):!1}function wct(e,t){return De(t,44)?gue(e.a,l(t,44)):!1}function yct(e,t){return De(t,44)?gue(e.a,l(t,44)):!1}function e6e(e){var t;return fb(e),t=new Ne,A5(e.a,new x5(t)),t}function t6e(){var e,t,n;return t=(n=(e=new Qv,e),n),vt(RPe,t),t}function jH(e){var t;return fb(e),t=new gn,A5(e.a,new T8(t)),t}function Pbn(e,t){return e.a<=e.b?(t.Dd(e.a++),!0):!1}function xct(e){oce.call(this,e,(rE(),O0e),null,!1,null,!1)}function kct(){kct=U,A7t=Kr((Zz(),he(le(U_e,1),it,489,0,[G0e])))}function Ect(){Ect=U,jDe=pat(pt(1),pt(4)),RDe=pat(pt(1),pt(2))}function Bbn(e,t){return new wae(t,z_(Ja(t.e),e,e),(Hn(),!0))}function $H(e){return new Bu((Mh(e,Fle),cV(bo(bo(5,e),e/10|0))))}function Fbn(e){return Cae(e.e.Rd().gc()*e.c.Rd().gc(),273,new gie(e))}function Tct(e){return l(j1(e,We(F8t,I3t,12,e.c.length,0,1)),2042)}function Rbn(e){return Sh(),!Do(e)&&!(!Do(e)&&e.c.i.c==e.d.i.c)}function jbn(e,t){return ux(),l(Q(t,(Hc(),W6)),17).a>=e.gc()}function sA(e,t){xIn(t,e),N4e(e.d),N4e(l(Q(e,(Nt(),wW)),214))}function yoe(e,t){kIn(t,e),P4e(e.d),P4e(l(Q(e,(Nt(),wW)),214))}function $bn(e,t,n){e.d&&al(e.d.e,e),e.d=t,e.d&&pw(e.d.e,n,e)}function zbn(e,t,n){return n.f.c.length>0?u5e(e.a,t,n):u5e(e.b,t,n)}function qbn(e,t,n){var r;r=s6n();try{return Lfn(e,t,n)}finally{Nmn(r)}}function Aw(e,t){var n,r;return n=Wg(e,t),r=null,n&&(r=n.pe()),r}function aA(e,t){var n,r;return n=Wg(e,t),r=null,n&&(r=n.se()),r}function Jk(e,t){var n,r;return n=_y(e,t),r=null,n&&(r=n.se()),r}function Yg(e,t){var n,r;return n=Wg(e,t),r=null,n&&(r=e9e(n)),r}function Hbn(e,t,n){var r;return r=NE(n),RU(e.g,r,t),RU(e.i,t,n),t}function n6e(e,t,n){this.d=new OYe(this),this.e=e,this.i=t,this.f=n}function Cct(e,t,n,r){this.e=null,this.c=e,this.d=t,this.a=n,this.b=r}function Sct(e,t,n,r){Ent(this),this.c=e,this.e=t,this.f=n,this.b=r}function r6e(e,t,n,r){this.d=e,this.n=t,this.g=n,this.o=r,this.p=-1}function _ct(e,t,n,r){return De(n,59)?new rrt(e,t,n,r):new r5e(e,t,n,r)}function Zk(e){return De(e,16)?l(e,16).dc():!e.Kc().Ob()}function Act(e){if(e.e.g!=e.b)throw ue(new Xh);return!!e.c&&e.d>0}function Br(e){return mr(e.b!=e.d.c),e.c=e.b,e.b=e.b.a,++e.a,e.c.c}function i6e(e,t){nr(t),Ts(e.a,e.c,t),e.c=e.c+1&e.a.length-1,Xdt(e)}function gb(e,t){nr(t),e.b=e.b-1&e.a.length-1,Ts(e.a,e.b,t),Xdt(e)}function Lct(e){var t;t=e.Gh(),this.a=De(t,71)?l(t,71).Ii():t.Kc()}function Vbn(e){return new kn(Lwn(l(e.a.md(),16).gc(),e.a.ld()),16)}function Mct(){Mct=U,UCt=Kr((nq(),he(le(wOe,1),it,490,0,[bge])))}function Dct(){Dct=U,KCt=Kr((rq(),he(le(GCt,1),it,558,0,[mge])))}function Ict(){Ict=U,hSt=Kr((b_(),he(le($Oe,1),it,539,0,[qB])))}function Ubn(){return Km(),he(le(mAe,1),it,389,0,[c4,bAe,o1e,c1e])}function Gbn(){return rE(),he(le(fK,1),it,304,0,[O0e,N0e,P0e,B0e])}function Kbn(){return bx(),he(le(E7t,1),it,332,0,[aB,sB,oB,cB])}function Wbn(){return NA(),he(le(S7t,1),it,406,0,[uB,bK,mK,lB])}function Ybn(){return Pw(),he(le(x7t,1),it,417,0,[iB,rB,V0e,U0e])}function Xbn(){return wE(),he(le(C8t,1),it,416,0,[s3,o4,a4,M6])}function Qbn(){return R1(),he(le(txt,1),it,421,0,[Vx,MT,DT,b1e])}function Jbn(){return IV(),he(le(V8t,1),it,371,0,[p1e,HK,VK,pB])}function Zbn(){return By(),he(le(mde,1),it,203,0,[_W,bde,G6,U6])}function emn(){return Ed(),he(le(SDe,1),it,284,0,[E2,CDe,yde,xde])}function tmn(e){var t;return e.j==(Ct(),Dr)&&(t=v2t(e),vl(t,ar))}function nmn(e,t){var n;n=t.a,po(n,t.c.d),Fa(n,t.d.d),Dy(n.a,e.n)}function s6e(e,t){var n;return n=l(B1(e.b,t),67),!n&&(n=new os),n}function ix(e){return p_(),De(e.g,154)?l(e.g,154):null}function rmn(e){e.a=null,e.e=null,ay(e.b.c,0),ay(e.f.c,0),e.c=null}function zH(){zH=U,z1e=new F3e(cT,0),NLe=new F3e("TOP_LEFT",1)}function oA(){oA=U,uM=new j3e("UPPER",0),cM=new j3e("LOWER",1)}function imn(e,t){return z8(new lt(t.e.a+t.f.a/2,t.e.b+t.f.b/2),e)}function Oct(e,t){return l(fh(vy(l($i(e.k,t),15).Oc(),I6)),113)}function Nct(e,t){return l(fh(Y8(l($i(e.k,t),15).Oc(),I6)),113)}function smn(){return wx(),he(le(qDe,1),it,405,0,[NW,lM,hM,fM])}function amn(){return kA(),he(le(yIe,1),it,353,0,[Vde,jW,Hde,qde])}function omn(){return uU(),he(le(HIe,1),it,354,0,[tge,zIe,qIe,$Ie])}function cmn(){return mh(),he(le(BM,1),it,386,0,[iF,Cv,rF,A4])}function umn(){return Ih(),he(le(JSt,1),it,291,0,[eF,kg,Gb,ZB])}function lmn(){return ip(),he(le(Vge,1),it,223,0,[Hge,JB,iC,s9])}function hmn(){return VV(),he(le(cPe,1),it,320,0,[Kge,sPe,oPe,aPe])}function fmn(){return NV(),he(le(p_t,1),it,415,0,[Wge,lPe,uPe,hPe])}function dmn(e){return BH(),Hu(Zge,e)?l(cr(Zge,e),341).Qg():null}function nf(e,t,n){return t<0?que(e,n):l(n,69).wk().Bk(e,e.hi(),t)}function gmn(e,t,n){var r;return r=NE(n),RU(e.j,r,t),ki(e.k,t,n),t}function pmn(e,t,n){var r;return r=NE(n),RU(e.d,r,t),ki(e.e,t,n),t}function Pct(e){var t,n;return t=(rb(),n=new TI,n),e&&AU(t,e),t}function a6e(e){var t;return t=e.aj(e.i),e.i>0&&pu(e.g,0,t,0,e.i),t}function Bct(e,t){var n;for(n=e.j.c.length;n>24}function mmn(e){if(e.p!=1)throw ue(new pl);return Yr(e.k)<<24>>24}function vmn(e){if(e.p!=7)throw ue(new pl);return Yr(e.k)<<16>>16}function wmn(e){if(e.p!=7)throw ue(new pl);return Yr(e.f)<<16>>16}function K5(e,t){return t.e==0||e.e==0?BL:(GE(),Que(e,t))}function jct(e,t){return qe(t)===qe(e)?"(this Map)":t==null?ul:xc(t)}function ymn(e,t,n){return Nae(Ge(hc(zo(e.f,t))),Ge(hc(zo(e.f,n))))}function xmn(e,t,n){var r;r=l(cr(e.g,n),60),vt(e.a.c,new ca(t,r))}function $ct(e,t,n){e.i=0,e.e=0,t!=n&&(k0t(e,t,n),x0t(e,t,n))}function kmn(e,t,n,r,a){var o;o=ETn(a,n,r),vt(t,pkn(a,o)),a9n(e,a,t)}function o6e(e,t,n,r,a){this.i=e,this.a=t,this.e=n,this.j=r,this.f=a}function zct(e,t){R5e.call(this),this.a=e,this.b=t,vt(this.a.b,this)}function qct(e){this.b=new Pr,this.c=new Pr,this.d=new Pr,this.a=e}function Hct(e,t){var n;return n=new S5,e.Gd(n),n.a+="..",t.Hd(n),n.a}function Vct(e,t){var n;for(n=t;n;)dw(e,n.i,n.j),n=ds(n);return e}function Uct(e,t,n){var r;return r=NE(n),ki(e.b,r,t),ki(e.c,t,n),t}function Xg(e){var t;for(t=0;e.Ob();)e.Pb(),t=bo(t,1);return cV(t)}function sg(e,t){Fo();var n;return n=l(e,69).vk(),k9n(n,t),n.xl(t)}function Emn(e,t,n){if(n){var r=n.oe();e.a[t]=r(n)}else delete e.a[t]}function c6e(e,t){var n;n=e.q.getHours(),e.q.setFullYear(t+Lb),XA(e,n)}function Tmn(e,t){return l(t==null?hc(zo(e.f,null)):y_(e.i,t),288)}function u6e(e,t){return e==(Zn(),Ps)&&t==Ps?4:e==Ps||t==Ps?8:32}function qH(e,t,n){return $U(e,t,n,De(t,102)&&(l(t,19).Bb&Io)!=0)}function Cmn(e,t,n){return XE(e,t,n,De(t,102)&&(l(t,19).Bb&Io)!=0)}function Smn(e,t,n){return bTn(e,t,n,De(t,102)&&(l(t,19).Bb&Io)!=0)}function l6e(e){e.b!=e.c&&(e.a=We(wa,Rn,1,8,5,1),e.b=0,e.c=0)}function cA(e){return mr(e.a=0&&e.a[n]===t[n];n--);return n<0}function HH(e){var t;return e?new K4e(e):(t=new bd,sce(t,e),t)}function Omn(e,t){var n,r;r=!1;do n=h0t(e,t),r=r|n;while(n);return r}function Nmn(e){e&&awn((Xwe(),GSe)),--aK,e&&oK!=-1&&(Cln(oK),oK=-1)}function VH(e){Rxe(),Ont(this,Yr(va(bw(e,24),ZU)),Yr(va(e,ZU)))}function Xct(){Xct=U,q6t=Kr((ZV(),he(le(k_e,1),it,436,0,[j0e,x_e])))}function Qct(){Qct=U,H6t=Kr((aV(),he(le(T_e,1),it,435,0,[E_e,$0e])))}function Jct(){Jct=U,U7t=Kr((oV(),he(le(J_e,1),it,432,0,[Q0e,yK])))}function Zct(){Zct=U,z8t=Kr((dE(),he(le($8t,1),it,517,0,[dB,h1e])))}function eut(){eut=U,_xt=Kr((zH(),he(le(PLe,1),it,429,0,[z1e,NLe])))}function tut(){tut=U,bxt=Kr((pN(),he(le(wLe,1),it,428,0,[XK,vLe])))}function nut(){nut=U,yxt=Kr((cN(),he(le(kLe,1),it,488,0,[xLe,JK])))}function rut(){rut=U,iEt=Kr((dN(),he(le(_De,1),it,430,0,[kde,Ede])))}function iut(){iut=U,IEt=Kr((oA(),he(le(DEt,1),it,531,0,[uM,cM])))}function sut(){sut=U,fxt=Kr((JH(),he(le(hLe,1),it,431,0,[lLe,S1e])))}function aut(){aut=U,BTt=Kr((RH(),he(le(kIe,1),it,433,0,[Ude,xIe])))}function out(){out=U,zTt=Kr((kV(),he(le(EIe,1),it,501,0,[$W,X6])))}function cut(){cut=U,jEt=Kr((xd(),he(le(REt,1),it,523,0,[w3,T2])))}function uut(){uut=U,zEt=Kr((D1(),he(le($Et,1),it,522,0,[wv,Y1])))}function lut(){lut=U,nTt=Kr((J0(),he(le(tTt,1),it,528,0,[E4,qb])))}function hut(){hut=U,uTt=Kr((Sw(),he(le(cTt,1),it,465,0,[Hb,K6])))}function fut(){fut=U,VTt=Kr((eV(),he(le(CIe,1),it,434,0,[TIe,Qde])))}function dut(){dut=U,jCt=Kr((GH(),he(le(fOe,1),it,491,0,[dge,hOe])))}function gut(){gut=U,zCt=Kr((fce(),he(le(vOe,1),it,492,0,[bOe,mOe])))}function put(){put=U,WCt=Kr((rN(),he(le(yOe,1),it,438,0,[vge,QW])))}function but(){but=U,fSt=Kr((CN(),he(le(qOe,1),it,437,0,[ZW,zOe])))}function mut(){mut=U,f_t=Kr((mae(),he(le(gY,1),it,347,0,[rPe,iPe])))}function Pmn(){return Js(),he(le(LM,1),it,88,0,[J1,vc,uc,Q1,wf])}function Bmn(){return Ct(),he(le(Oo,1),au,64,0,[Pc,Qn,ar,Dr,er])}function Fmn(e,t,n){return l(t==null?ju(e.f,null,n):Bw(e.i,t,n),288)}function Rmn(e){return(e.k==(Zn(),Ps)||e.k==Us)&&ns(e,(ft(),KL))}function Coe(e){return e.c&&e.d?X5e(e.c)+"->"+X5e(e.d):"e_"+fw(e)}function to(e,t){var n,r;for(nr(t),r=e.Kc();r.Ob();)n=r.Pb(),t.Cd(n)}function jmn(e,t){var n;n=new M8,Nm(n,"x",t.a),Nm(n,"y",t.b),J8(e,n)}function $mn(e,t){var n;n=new M8,Nm(n,"x",t.a),Nm(n,"y",t.b),J8(e,n)}function vut(e,t){var n;for(n=t;n;)dw(e,-n.i,-n.j),n=ds(n);return e}function f6e(e,t){var n,r;for(n=t,r=0;n>0;)r+=e.a[n],n-=n&-n;return r}function rf(e,t,n){var r;return r=(Sn(t,e.c.length),e.c[t]),e.c[t]=n,r}function d6e(e,t,n){e.a.c.length=0,hMn(e,t,n),e.a.c.length==0||j_n(e,t)}function eN(e){e.i=0,aO(e.b,null),aO(e.c,null),e.a=null,e.e=null,++e.g}function UH(){UH=U,G1=!0,I6t=!1,O6t=!1,P6t=!1,N6t=!1}function Soe(e){UH(),!G1&&(this.c=e,this.e=!0,this.a=new bt)}function wut(e,t){this.c=0,this.b=t,qtt.call(this,e,17493),this.a=this.c}function yut(e){kwt(),SQe(this),this.a=new os,G7e(this,e),ui(this.a,e)}function xut(){Yse(this),this.b=new lt(gs,gs),this.a=new lt(ia,ia)}function GH(){GH=U,dge=new K3e(HEe,0),hOe=new K3e("TARGET_WIDTH",1)}function W5(e,t){return(xb(e),_k(new bn(e,new $6e(t,e.a)))).Bd(zx)}function zmn(){return uo(),he(le(gAe,1),it,367,0,[y0,vg,bu,_u,mc])}function qmn(){return Ry(),he(le(rxt,1),it,375,0,[bB,KK,WK,GK,UK])}function Hmn(){return l2(),he(le(mLe,1),it,348,0,[A1e,bLe,L1e,BT,PT])}function Vmn(){return OA(),he(le(wDe,1),it,323,0,[vDe,vde,wde,rM,iM])}function Umn(){return hf(),he(le(WLe,1),it,171,0,[EB,YL,$b,XL,d4])}function Gmn(){return bU(),he(le(qTt,1),it,368,0,[Yde,Gde,Xde,Kde,Wde])}function Kmn(){return VA(),he(le(qCt,1),it,373,0,[Q6,e9,xM,yM,zB])}function Wmn(){return XN(),he(le(TOe,1),it,324,0,[xOe,wge,EOe,yge,kOe])}function Ymn(){return r1(),he(le(xg,1),it,170,0,[Pn,ha,zd,yv,S2])}function Xmn(){return t6(),he(le(OM,1),it,256,0,[Kb,tF,XNe,IM,QNe])}function Qmn(e){return Hz(),function(){return qbn(e,this,arguments)}}function Do(e){return!e.c||!e.d?!1:!!e.c.i&&e.c.i==e.d.i}function g6e(e,t){return De(t,143)?vn(e.c,l(t,143).c):!1}function Yl(e){return e.t||(e.t=new bQe(e),_A(new IJe(e),0,e.t)),e.t}function kut(e){this.b=e,or.call(this,e),this.a=l(Kn(this.b.a,4),129)}function Eut(e){this.b=e,H8.call(this,e),this.a=l(Kn(this.b.a,4),129)}function h0(e,t,n,r,a){Out.call(this,t,r,a),this.c=e,this.b=n}function p6e(e,t,n,r,a){Wot.call(this,t,r,a),this.c=e,this.a=n}function b6e(e,t,n,r,a){Yot.call(this,t,r,a),this.c=e,this.a=n}function m6e(e,t,n,r,a){Out.call(this,t,r,a),this.c=e,this.a=n}function _oe(e,t){var n;return n=l(B1(e.d,t),23),n||l(B1(e.e,t),23)}function Tut(e,t){var n,r;return n=t.ld(),r=e.Fe(n),!!r&&Jc(r.e,t.md())}function Cut(e,t){var n;return n=t.ld(),new iw(n,e.e.pc(n,l(t.md(),16)))}function Jmn(e,t){var n;return n=e.a.get(t),n??We(wa,Rn,1,0,5,1)}function Sut(e){var t;return t=e.length,vn(sr.substr(sr.length-t,t),e)}function xr(e){if(jr(e))return e.c=e.a,e.a.Pb();throw ue(new _c)}function v6e(e,t){return t==0||e.e==0?e:t>0?pbt(e,t):j1t(e,-t)}function sx(e,t){return t==0||e.e==0?e:t>0?j1t(e,t):pbt(e,-t)}function w6e(e){uln.call(this,e==null?ul:xc(e),De(e,82)?l(e,82):null)}function _ut(e){var t;return e.c||(t=e.r,De(t,90)&&(e.c=l(t,29))),e.c}function Aoe(e){var t;return t=new Tw,pc(t,e),rt(t,(Nt(),cc),null),t}function Aut(e){var t,n;return t=e.c.i,n=e.d.i,t.k==(Zn(),Us)&&n.k==Us}function Loe(e){var t,n,r;return t=e&eh,n=e>>22&eh,r=e<0?hp:0,qu(t,n,r)}function Zmn(e){var t,n,r,a;for(n=e,r=0,a=n.length;r=0?e.Lh(r,n,!0):Hw(e,t,n)}function tvn(e,t,n){return Yi(z8(BE(e),Ja(t.b)),z8(BE(e),Ja(n.b)))}function nvn(e,t,n){return Yi(z8(BE(e),Ja(t.e)),z8(BE(e),Ja(n.e)))}function rvn(e,t){return b.Math.min(pb(t.a,e.d.d.c),pb(t.b,e.d.d.c))}function tN(e,t){e._i(e.i+1),R_(e,e.i,e.Zi(e.i,t)),e.Mi(e.i++,t),e.Ni()}function uA(e){var t,n;++e.j,t=e.g,n=e.i,e.g=null,e.i=0,e.Oi(n,t),e.Ni()}function Lut(e,t,n){var r;r=new vye(e.a),bA(r,e.a.a),ju(r.f,t,n),e.a.a=r}function y6e(e,t,n,r){var a;for(a=0;at)throw ue(new tc(u9e(e,t,"index")));return e}function t2(e,t){var n;return n=(Sn(t,e.c.length),e.c[t]),d3e(e.c,t,1),n}function E6e(e,t){var n,r;return n=(nr(e),e),r=(nr(t),t),n==r?0:nt.p?-1:0}function Fut(e){var t;return e.a||(t=e.r,De(t,156)&&(e.a=l(t,156))),e.a}function uvn(e,t,n){var r;return++e.e,--e.f,r=l(e.d[t].gd(n),136),r.md()}function lvn(e){var t,n;return t=e.ld(),n=l(e.md(),16),NO(n.Nc(),new bie(t))}function Rut(e,t){return Hu(e.a,t)?(ax(e.a,t),!0):!1}function ox(e,t,n){return ZO(t,e.e.Rd().gc()),ZO(n,e.c.Rd().gc()),e.a[t][n]}function WH(e,t,n){this.a=e,this.b=t,this.c=n,vt(e.t,this),vt(t.i,this)}function YH(e,t,n,r){this.f=e,this.e=t,this.d=n,this.b=r,this.c=r?r.d:null}function nN(){this.b=new os,this.a=new os,this.b=new os,this.a=new os}function eE(){eE=U;var e,t;SY=(Sk(),t=new Fz,t),_Y=(e=new zie,e)}function hvn(e){var t;return xb(e),t=new Mit(e,e.a.e,e.a.d|4),new Vye(e,t)}function jut(e){var t;for(fb(e),t=0;e.a.Bd(new An);)t=bo(t,1);return t}function XH(e,t){return nr(t),e.c=0,"Initial capacity must not be negative")}function QH(){QH=U,kM=new Ui("org.eclipse.elk.labels.labelManager")}function $ut(){$ut=U,sLe=new vs("separateLayerConnections",(IV(),p1e))}function J0(){J0=U,E4=new q3e("REGULAR",0),qb=new q3e("CRITICAL",1)}function rN(){rN=U,vge=new Y3e("FIXED",0),QW=new Y3e("CENTER_NODE",1)}function JH(){JH=U,lLe=new N3e("QUADRATIC",0),S1e=new N3e("SCANLINE",1)}function zut(){zut=U,dxt=Kr((dA(),he(le(dLe,1),it,322,0,[HL,mB,fLe])))}function qut(){qut=U,gxt=Kr((pV(),he(le(pLe,1),it,351,0,[gLe,YK,_1e])))}function Hut(){Hut=U,uxt=Kr((Ow(),he(le(m1e,1),it,372,0,[o3,Rb,a3])))}function Vut(){Vut=U,vxt=Kr((Vm(),he(le(mxt,1),it,460,0,[M1e,FT,P6])))}function Uut(){Uut=U,Txt=Kr((vE(),he(le($1e,1),it,299,0,[R1e,j1e,vB])))}function Gut(){Gut=U,Sxt=Kr((ep(),he(le(Cxt,1),it,311,0,[wB,F6,Ux])))}function Kut(){Kut=U,Zkt=Kr((EA(),he(le(mDe,1),it,390,0,[pde,bDe,SW])))}function Wut(){Wut=U,oEt=Kr((LV(),he(le(MDe,1),it,387,0,[ADe,Tde,LDe])))}function Yut(){Yut=U,cEt=Kr((yA(),he(le(DDe,1),it,349,0,[Sde,Cde,MB])))}function Xut(){Xut=U,aEt=Kr((qo(),he(le(sEt,1),it,463,0,[sM,$l,zu])))}function Qut(){Qut=U,uEt=Kr((SE(),he(le(ODe,1),it,350,0,[_de,IDe,aM])))}function Jut(){Jut=U,lEt=Kr((gV(),he(le(BDe,1),it,352,0,[PDe,Ade,NDe])))}function Zut(){Zut=U,hEt=Kr((OV(),he(le(FDe,1),it,388,0,[Lde,XT,k4])))}function elt(){elt=U,fTt=Kr((xA(),he(le(eIe,1),it,392,0,[ZDe,Ide,OB])))}function tlt(){tlt=U,UTt=Kr((LN(),he(le(AIe,1),it,393,0,[zW,SIe,_Ie])))}function nlt(){nlt=U,fCt=Kr((AV(),he(le(GIe,1),it,300,0,[nge,UIe,VIe])))}function rlt(){rlt=U,dCt=Kr((WV(),he(le(KIe,1),it,445,0,[RB,VW,rge])))}function ilt(){ilt=U,pCt=Kr((sU(),he(le(gCt,1),it,456,0,[ige,age,sge])))}function slt(){slt=U,vCt=Kr((qV(),he(le(XIe,1),it,394,0,[YIe,uge,WIe])))}function alt(){alt=U,$Ct=Kr((tV(),he(le(pOe,1),it,439,0,[gge,gOe,dOe])))}function olt(){olt=U,_Et=Kr((Iw(),he(le(SEt,1),it,464,0,[DB,oM,MW])))}function clt(){clt=U,Y6t=Kr((Bl(),he(le(W6t,1),it,471,0,[Fd,Bb,v0])))}function ult(){ult=U,K6t=Kr((t1(),he(le(s4,1),it,237,0,[Gc,$u,Kc])))}function llt(){llt=U,Q6t=Kr((ol(),he(le(X6t,1),it,472,0,[a1,Fb,w0])))}function hlt(){hlt=U,B6t=Kr((Fl(),he(le(oc,1),it,108,0,[y_e,Ec,i4])))}function flt(){flt=U,m8t=Kr((lA(),he(le(dAe,1),it,391,0,[t1e,e1e,n1e])))}function dlt(){dlt=U,QSt=Kr((rp(),he(le(YNe,1),it,346,0,[oY,A2,DM])))}function glt(){glt=U,VCt=Kr((PN(),he(le(pge,1),it,444,0,[WW,YW,XW])))}function plt(){plt=U,KSt=Kr((F1(),he(le(FNe,1),it,278,0,[nC,_4,rC])))}function blt(){blt=U,h_t=Kr((dx(),he(le(nPe,1),it,280,0,[tPe,L4,dY])))}function P1(e,t){return!e.o&&(e.o=new xl((su(),Cg),L2,e,0)),Kce(e.o,t)}function fvn(e,t){var n;e.C&&(n=l(Qo(e.b,t),127).n,n.d=e.C.d,n.a=e.C.a)}function A6e(e){var t,n,r,a;a=e.d,t=e.a,n=e.b,r=e.c,e.d=n,e.a=r,e.b=a,e.c=t}function dvn(e){return!e.g&&(e.g=new MS),!e.g.b&&(e.g.b=new fQe(e)),e.g.b}function iN(e){return!e.g&&(e.g=new MS),!e.g.c&&(e.g.c=new pQe(e)),e.g.c}function gvn(e){return!e.g&&(e.g=new MS),!e.g.d&&(e.g.d=new dQe(e)),e.g.d}function pvn(e){return!e.g&&(e.g=new MS),!e.g.a&&(e.g.a=new gQe(e)),e.g.a}function bvn(e,t,n,r){return n&&(r=n.Rh(t,ms(n.Dh(),e.c.uk()),null,r)),r}function mvn(e,t,n,r){return n&&(r=n.Th(t,ms(n.Dh(),e.c.uk()),null,r)),r}function Ooe(e,t,n,r){var a;return a=We(Vr,di,28,t+1,15,1),xAn(a,e,t,n,r),a}function We(e,t,n,r,a,o){var f;return f=zdt(a,r),a!=10&&he(le(e,o),t,n,a,f),f}function vvn(e,t,n){var r,a;for(a=new mE(t,e),r=0;rn||t=0?e.Lh(n,!0,!0):Hw(e,t,!0)}function Pvn(e,t,n){var r;return r=w0t(e,t,n),e.b=new TV(r.c.length),Q9e(e,r)}function Bvn(e){if(e.b<=0)throw ue(new _c);return--e.b,e.a-=e.c.c,pt(e.a)}function Fvn(e){var t;if(!e.a)throw ue(new Lat);return t=e.a,e.a=ds(e.a),t}function Rvn(e){for(;!e.a;)if(!tit(e.c,new ZS(e)))return!1;return!0}function cx(e){var t;return Xr(e),De(e,204)?(t=l(e,204),t):new w8(e)}function jvn(e){ZH(),l(e.of((pi(),S4)),181).Fc((Rl(),nF)),e.qf($ge,null)}function ZH(){ZH=U,pSt=new l$,mSt=new h$,bSt=_yn((pi(),$ge),pSt,Ub,mSt)}function eV(){eV=U,TIe=new G3e("LEAF_NUMBER",0),Qde=new G3e("NODE_SIZE",1)}function Roe(e){e.a=We(Vr,di,28,e.b+1,15,1),e.c=We(Vr,di,28,e.b,15,1),e.d=0}function $vn(e,t){e.a.Ne(t.d,e.b)>0&&(vt(e.c,new L4e(t.c,t.d,e.d)),e.b=t.d)}function R6e(e,t){if(e.g==null||t>=e.i)throw ue(new Vse(t,e.i));return e.g[t]}function ylt(e,t,n){if(EE(e,n),n!=null&&!e.fk(n))throw ue(new Rie);return n}function joe(e,t){return gN(t)!=10&&he(bh(t),t.Sm,t.__elementTypeId$,gN(t),e),e}function nE(e,t,n,r){var a;r=(Ew(),r||d_e),a=e.slice(t,n),l9e(a,e,t,n,-t,r)}function sf(e,t,n,r,a){return t<0?Hw(e,n,r):l(n,69).wk().yk(e,e.hi(),t,r,a)}function zvn(e,t){return Yi(ze(Ge(Q(e,(ft(),l3)))),ze(Ge(Q(t,l3))))}function xlt(){xlt=U,M6t=Kr((rE(),he(le(fK,1),it,304,0,[O0e,N0e,P0e,B0e])))}function rE(){rE=U,O0e=new oq("All",0),N0e=new hnt,P0e=new ynt,B0e=new lnt}function Bl(){Bl=U,Fd=new pse(Mx,0),Bb=new pse(cT,1),v0=new pse(Dx,2)}function klt(){klt=U,zU(),GPe=gs,vAt=ia,KPe=new pa(gs),wAt=new pa(ia)}function Elt(){Elt=U,k7t=Kr((Pw(),he(le(x7t,1),it,417,0,[iB,rB,V0e,U0e])))}function Tlt(){Tlt=U,_7t=Kr((NA(),he(le(S7t,1),it,406,0,[uB,bK,mK,lB])))}function Clt(){Clt=U,T7t=Kr((bx(),he(le(E7t,1),it,332,0,[aB,sB,oB,cB])))}function Slt(){Slt=U,I8t=Kr((Km(),he(le(mAe,1),it,389,0,[c4,bAe,o1e,c1e])))}function _lt(){_lt=U,S8t=Kr((wE(),he(le(C8t,1),it,416,0,[s3,o4,a4,M6])))}function Alt(){Alt=U,nxt=Kr((R1(),he(le(txt,1),it,421,0,[Vx,MT,DT,b1e])))}function Llt(){Llt=U,U8t=Kr((IV(),he(le(V8t,1),it,371,0,[p1e,HK,VK,pB])))}function Mlt(){Mlt=U,eEt=Kr((By(),he(le(mde,1),it,203,0,[_W,bde,G6,U6])))}function Dlt(){Dlt=U,rEt=Kr((Ed(),he(le(SDe,1),it,284,0,[E2,CDe,yde,xde])))}function cN(){cN=U,xLe=new B3e(Id,0),JK=new B3e("IMPROVE_STRAIGHTNESS",1)}function Ilt(e,t){var n,r;return r=t/e.c.Rd().gc()|0,n=t%e.c.Rd().gc(),ox(e,r,n)}function Olt(e){var t;if(e.nl())for(t=e.i-1;t>=0;--t)Oe(e,t);return a6e(e)}function j6e(e){var t,n;if(!e.b)return null;for(n=e.b;t=n.a[0];)n=t;return n}function Nlt(e){var t,n;if(!e.b)return null;for(n=e.b;t=n.a[1];)n=t;return n}function qvn(e){return De(e,180)?""+l(e,180).a:e==null?null:xc(e)}function Hvn(e){return De(e,180)?""+l(e,180).a:e==null?null:xc(e)}function Plt(e,t){if(t.a)throw ue(new Ac(e3t));na(e.a,t),t.a=e,!e.j&&(e.j=t)}function $6e(e,t){Dq.call(this,t.zd(),t.yd()&-16449),nr(e),this.a=e,this.c=t}function Vvn(e,t){return new wae(t,dw(Ja(t.e),t.f.a+e,t.f.b+e),(Hn(),!1))}function Uvn(e,t){return jk(),vt(e,new ca(t,pt(t.e.c.length+t.g.c.length)))}function Gvn(e,t){return jk(),vt(e,new ca(t,pt(t.e.c.length+t.g.c.length)))}function Blt(){Blt=U,hCt=Kr((uU(),he(le(HIe,1),it,354,0,[tge,zIe,qIe,$Ie])))}function Flt(){Flt=U,PTt=Kr((kA(),he(le(yIe,1),it,353,0,[Vde,jW,Hde,qde])))}function Rlt(){Rlt=U,lTt=Kr((wx(),he(le(qDe,1),it,405,0,[NW,lM,hM,fM])))}function jlt(){jlt=U,WSt=Kr((ip(),he(le(Vge,1),it,223,0,[Hge,JB,iC,s9])))}function $lt(){$lt=U,ZSt=Kr((Ih(),he(le(JSt,1),it,291,0,[eF,kg,Gb,ZB])))}function zlt(){zlt=U,u_t=Kr((mh(),he(le(BM,1),it,386,0,[iF,Cv,rF,A4])))}function qlt(){qlt=U,d_t=Kr((VV(),he(le(cPe,1),it,320,0,[Kge,sPe,oPe,aPe])))}function Hlt(){Hlt=U,b_t=Kr((NV(),he(le(p_t,1),it,415,0,[Wge,lPe,uPe,hPe])))}function tV(){tV=U,gge=new jse(vyt,0),gOe=new jse(cCe,1),dOe=new jse(Id,2)}function Sy(e,t,n,r,a){return nr(e),nr(t),nr(n),nr(r),nr(a),new h5e(e,t,r)}function Vlt(e,t){var n;return n=l(ax(e.e,t),400),n?($4e(n),n.e):null}function al(e,t){var n;return n=gc(e,t,0),n==-1?!1:(t2(e,n),!0)}function Ult(e,t,n){var r;return fb(e),r=new on,r.a=t,e.a.Nb(new Cet(r,n)),r.a}function Kvn(e){var t;return fb(e),t=We(Na,Zo,28,0,15,1),A5(e.a,new E8(t)),t}function z6e(e){var t;if(!tce(e))throw ue(new _c);return e.e=1,t=e.d,e.d=null,t}function r2(e){var t;return wc(e)&&(t=0-e,!isNaN(t))?t:mb(xE(e))}function gc(e,t,n){for(;n=0?rU(e,n,!0,!0):Hw(e,t,!0)}function H6e(e){var t;return t=jm(Kn(e,32)),t==null&&(Ku(e),t=jm(Kn(e,32))),t}function V6e(e){var t;return e.Oh()||(t=yr(e.Dh())-e.ji(),e.$h().Mk(t)),e.zh()}function Qlt(e,t){H_e=new Ot,C7t=t,RL=e,l(RL.b,68),D6e(RL,H_e,null),fvt(RL)}function lA(){lA=U,t1e=new mse("XY",0),e1e=new mse("X",1),n1e=new mse("Y",2)}function ol(){ol=U,a1=new bse("TOP",0),Fb=new bse(cT,1),w0=new bse(xEe,2)}function ep(){ep=U,wB=new Ese(Id,0),F6=new Ese("TOP",1),Ux=new Ese(xEe,2)}function dN(){dN=U,kde=new R3e("INPUT_ORDER",0),Ede=new R3e("PORT_DEGREE",1)}function iE(){iE=U,WSe=qu(eh,eh,524287),g6t=qu(0,0,SP),YSe=Loe(1),Loe(2),XSe=Loe(0)}function Voe(e){var t;return e.d!=e.r&&(t=Of(e),e.e=!!t&&t.lk()==g5t,e.d=t),e.e}function Uoe(e,t,n){var r;return r=e.g[t],R_(e,t,e.Zi(t,n)),e.Ri(t,n,r),e.Ni(),r}function sV(e,t){var n;return n=e.dd(t),n>=0?(e.gd(n),!0):!1}function Goe(e,t){var n;for(Xr(e),Xr(t),n=!1;t.Ob();)n=n|e.Fc(t.Pb());return n}function B1(e,t){var n;return n=l(cr(e.e,t),400),n?(Int(e,n),n.e):null}function Jlt(e){var t,n;return t=e/60|0,n=e%60,n==0?""+t:""+t+":"+(""+n)}function _y(e,t){var n=e.a[t],r=(vce(),_0e)[typeof n];return r?r(n):Z7e(typeof n)}function Dc(e,t){var n,r;return xb(e),r=new C6e(t,e.a),n=new iit(r),new bn(e,n)}function Koe(e){var t;return t=e.b.c.length==0?null:jt(e.b,0),t!=null&&rce(e,0),t}function Qvn(e,t){var n,r,a;a=t.c.i,n=l(cr(e.f,a),60),r=n.d.c-n.e.c,k7e(t.a,r,0)}function U6e(e,t){var n;for(++e.d,++e.c[t],n=t+1;n=0;)++t[0]}function Jvn(e,t){Uu(e,t==null||Gq((nr(t),t))||isNaN((nr(t),t))?0:(nr(t),t))}function Zvn(e,t){Gu(e,t==null||Gq((nr(t),t))||isNaN((nr(t),t))?0:(nr(t),t))}function ewn(e,t){Dw(e,t==null||Gq((nr(t),t))||isNaN((nr(t),t))?0:(nr(t),t))}function twn(e,t){Mw(e,t==null||Gq((nr(t),t))||isNaN((nr(t),t))?0:(nr(t),t))}function nwn(e,t,n){return z8(new lt(n.e.a+n.f.a/2,n.e.b+n.f.b/2),e)==(nr(t),t)}function rwn(e,t){return De(t,102)&&l(t,19).Bb&Io?new Use(t,e):new mE(t,e)}function iwn(e,t){return De(t,102)&&l(t,19).Bb&Io?new Use(t,e):new mE(t,e)}function gN(e){return e.__elementTypeCategory$==null?10:e.__elementTypeCategory$}function tht(e,t){return t==(gae(),gae(),_6t)?e.toLocaleLowerCase():e.toLowerCase()}function nht(e){if(!e.e)throw ue(new _c);return e.c=e.a=e.e,e.e=e.e.e,--e.d,e.a.f}function G6e(e){if(!e.c)throw ue(new _c);return e.e=e.a=e.c,e.c=e.c.c,++e.d,e.a.f}function rht(e){var t;for(++e.a,t=e.c.a.length;e.ae.a[r]&&(r=n);return r}function iht(e){var t;return t=l(Q(e,(ft(),c3)),313),t?t.a==e:!1}function sht(e){var t;return t=l(Q(e,(ft(),c3)),313),t?t.i==e:!1}function aht(){aht=U,x8t=Kr((uo(),he(le(gAe,1),it,367,0,[y0,vg,bu,_u,mc])))}function oht(){oht=U,ixt=Kr((Ry(),he(le(rxt,1),it,375,0,[bB,KK,WK,GK,UK])))}function cht(){cht=U,pxt=Kr((l2(),he(le(mLe,1),it,348,0,[A1e,bLe,L1e,BT,PT])))}function uht(){uht=U,tEt=Kr((OA(),he(le(wDe,1),it,323,0,[vDe,vde,wde,rM,iM])))}function lht(){lht=U,Axt=Kr((hf(),he(le(WLe,1),it,171,0,[EB,YL,$b,XL,d4])))}function hht(){hht=U,HTt=Kr((bU(),he(le(qTt,1),it,368,0,[Yde,Gde,Xde,Kde,Wde])))}function fht(){fht=U,HCt=Kr((VA(),he(le(qCt,1),it,373,0,[Q6,e9,xM,yM,zB])))}function dht(){dht=U,YCt=Kr((XN(),he(le(TOe,1),it,324,0,[xOe,wge,EOe,yge,kOe])))}function ght(){ght=U,GSt=Kr((Js(),he(le(LM,1),it,88,0,[J1,vc,uc,Q1,wf])))}function pht(){pht=U,vSt=Kr((r1(),he(le(xg,1),it,170,0,[Pn,ha,zd,yv,S2])))}function bht(){bht=U,t_t=Kr((t6(),he(le(OM,1),it,256,0,[Kb,tF,XNe,IM,QNe])))}function mht(){mht=U,i_t=Kr((Ct(),he(le(Oo,1),au,64,0,[Pc,Qn,ar,Dr,er])))}function aV(){aV=U,E_e=new A3e("BY_SIZE",0),$0e=new A3e("BY_SIZE_AND_SHAPE",1)}function oV(){oV=U,Q0e=new D3e("EADES",0),yK=new D3e("FRUCHTERMAN_REINGOLD",1)}function pN(){pN=U,XK=new P3e("READING_DIRECTION",0),vLe=new P3e("ROTATION",1)}function hA(){hA=U,L8t=new nI,M8t=new $J,_8t=new vm,A8t=new hu,D8t=new zJ}function vht(e){this.b=new bt,this.a=new bt,this.c=new bt,this.d=new bt,this.e=e}function wht(e){this.g=e,this.f=new bt,this.a=b.Math.min(this.g.c.c,this.g.d.c)}function yht(e,t,n){Vq.call(this),Y6e(this),this.a=e,this.c=n,this.b=t.d,this.f=t.e}function lwn(e,t,n){var r,a;for(a=new G(n);a.a=0&&t0?t-1:t,ZJe(Fun(Vht(B4e(new L8,n),e.n),e.j),e.k)}function sc(e){var t,n;n=(t=new qie,t),qr((!e.q&&(e.q=new nt(Uf,e,11,10)),e.q),n)}function K6e(e){return(e.i&2?"interface ":e.i&1?"":"class ")+(Gg(e),e.o)}function cV(e){return iu(e,Ii)>0?Ii:iu(e,lo)<0?lo:Yr(e)}function Ay(e){return e<3?(Mh(e,Pwt),e+1):e=-.01&&e.a<=H1&&(e.a=0),e.b>=-.01&&e.b<=H1&&(e.b=0),e}function Y5(e){h6();var t,n;for(n=hCe,t=0;tn&&(n=e[t]);return n}function Tht(e,t){var n;if(n=oP(e.Dh(),t),!n)throw ue(new Yn(Ob+t+$fe));return n}function Ly(e,t){var n;for(n=e;ds(n);)if(n=ds(n),n==t)return!0;return!1}function xwn(e,t){var n,r,a;for(r=t.a.ld(),n=l(t.a.md(),16).gc(),a=0;ae||e>t)throw ue(new t3e("fromIndex: 0, toIndex: "+e+uEe+t))}function Lw(e){if(e<0)throw ue(new Yn("Illegal Capacity: "+e));this.g=this.aj(e)}function W6e(e,t){return A1(),f0(Ab),b.Math.abs(e-t)<=Ab||e==t||isNaN(e)&&isNaN(t)}function Xoe(e,t){var n,r,a,o;for(r=e.d,a=0,o=r.length;a0&&(e.a/=t,e.b/=t),e}function Ah(e){var t;return e.w?e.w:(t=dbn(e),t&&!t.Vh()&&(e.w=t),t)}function sE(e,t){var n,r;r=e.a,n=m4n(e,t,null),r!=t&&!e.e&&(n=ZE(e,t,n)),n&&n.oj()}function Lht(e,t,n){var r,a;r=t;do a=ze(e.p[r.p])+n,e.p[r.p]=a,r=e.a[r.p];while(r!=t)}function Mht(e,t,n){var r=function(){return e.apply(r,arguments)};return t.apply(r,n),r}function Awn(e){var t;return e==null?null:(t=l(e,195),$xn(t,t.length))}function Oe(e,t){if(e.g==null||t>=e.i)throw ue(new Vse(t,e.i));return e.Wi(t,e.g[t])}function Lwn(e,t){Cn();var n,r;for(r=new bt,n=0;n=14&&t<=16))),e}function Gr(e,t){var n;return nr(t),n=e[":"+t],BO(!!n,"Enum constant undefined: "+t),n}function Fr(e,t,n,r,a,o){var f;return f=Gae(e,t),Uht(n,f),f.i=a?8:0,f.f=r,f.e=a,f.g=o,f}function Q6e(e,t,n,r,a){this.d=t,this.k=r,this.f=a,this.o=-1,this.p=1,this.c=e,this.a=n}function J6e(e,t,n,r,a){this.d=t,this.k=r,this.f=a,this.o=-1,this.p=2,this.c=e,this.a=n}function Z6e(e,t,n,r,a){this.d=t,this.k=r,this.f=a,this.o=-1,this.p=6,this.c=e,this.a=n}function e7e(e,t,n,r,a){this.d=t,this.k=r,this.f=a,this.o=-1,this.p=7,this.c=e,this.a=n}function t7e(e,t,n,r,a){this.d=t,this.j=r,this.e=a,this.o=-1,this.p=4,this.c=e,this.a=n}function Ght(e,t){var n,r,a,o;for(r=t,a=0,o=r.length;a=0))throw ue(new Yn("tolerance ("+e+") must be >= 0"));return e}function Wht(e,t){var n;return De(t,44)?e.c.Mc(t):(n=Kce(e,t),YV(e,t),n)}function Jo(e,t,n){return Gm(e,t),Fu(e,n),i2(e,0),My(e,1),u2(e,!0),c2(e,!0),e}function mN(e,t){var n;if(n=e.gc(),t<0||t>n)throw ue(new my(t,n));return new f4e(e,t)}function bV(e,t){e.b=b.Math.max(e.b,t.d),e.e+=t.r+(e.a.c.length==0?0:e.c),vt(e.a,t)}function Yht(e){gy(e.c>=0),H5n(e.d,e.c)<0&&(e.a=e.a-1&e.d.a.length-1,e.b=e.d.c),e.c=-1}function mV(e){var t,n;for(n=e.c.Cc().Kc();n.Ob();)t=l(n.Pb(),16),t.$b();e.c.$b(),e.d=0}function jwn(e){var t,n,r,a;for(n=e.a,r=0,a=n.length;r=0}function c7e(e,t){e.r>0&&e.c0&&e.g!=0&&c7e(e.i,t/e.r*e.i.d))}function u7e(e,t){var n;n=e.c,e.c=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,1,n,e.c))}function Zoe(e,t){var n;n=e.c,e.c=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,4,n,e.c))}function fE(e,t){var n;n=e.k,e.k=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,2,n,e.k))}function ece(e,t){var n;n=e.D,e.D=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,2,n,e.D))}function wV(e,t){var n;n=e.f,e.f=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,8,n,e.f))}function yV(e,t){var n;n=e.i,e.i=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,7,n,e.i))}function l7e(e,t){var n;n=e.a,e.a=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,8,n,e.a))}function h7e(e,t){var n;n=e.b,e.b=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,0,n,e.b))}function f7e(e,t){var n;n=e.b,e.b=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,0,n,e.b))}function d7e(e,t){var n;n=e.c,e.c=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,1,n,e.c))}function g7e(e,t){var n;n=e.d,e.d=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,1,n,e.d))}function Gwn(e,t,n){var r;e.b=t,e.a=n,r=(e.a&512)==512?new gJe:new J$,e.c=aSn(r,e.b,e.a)}function oft(e,t){return up(e.e,t)?(Fo(),Voe(t)?new nH(t,e):new yO(t,e)):new Ptt(t,e)}function Kwn(e){var t,n;return 0>e?new b3e:(t=e+1,n=new wut(t,e),new Uye(null,n))}function Wwn(e,t){Cn();var n;return n=new N8(1),Ia(e)?rc(n,e,t):ju(n.f,e,t),new tr(n)}function Ywn(e,t){var n,r;return n=e.c,r=t.e[e.p],r>0?l(jt(n.a,r-1),10):null}function Xwn(e,t){var n,r;return n=e.o+e.p,r=t.o+t.p,nt?(t<<=1,t>0?t:rL):t}function tce(e){switch(Cye(e.e!=3),e.e){case 2:return!1;case 0:return!0}return svn(e)}function uft(e,t){var n;return De(t,8)?(n=l(t,8),e.a==n.a&&e.b==n.b):!1}function Jwn(e,t){var n;n=new Ot,l(t.b,68),l(t.b,68),l(t.b,68),Vu(t.a,new k4e(e,n,t))}function lft(e,t){var n,r;for(r=t.vc().Kc();r.Ob();)n=l(r.Pb(),44),GN(e,n.ld(),n.md())}function p7e(e,t){var n;n=e.d,e.d=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,11,n,e.d))}function xV(e,t){var n;n=e.j,e.j=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,13,n,e.j))}function b7e(e,t){var n;n=e.b,e.b=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,21,n,e.b))}function Zwn(e,t){(UH(),G1?null:t.c).length==0&&Srt(t,new Dt),rc(e.a,G1?null:t.c,t)}function e3n(e,t){t.Ug("Hierarchical port constraint processing",1),v6n(e),RIn(e),t.Vg()}function Ow(){Ow=U,o3=new vse("START",0),Rb=new vse("MIDDLE",1),a3=new vse("END",2)}function kV(){kV=U,$W=new U3e("P1_NODE_PLACEMENT",0),X6=new U3e("P2_EDGE_ROUTING",1)}function bb(){bb=U,Hx=new Ui(NEe),EK=new Ui(C3t),$L=new Ui(S3t),hB=new Ui(_3t)}function Nw(e){var t;return pae(e.f.g,e.d),mr(e.b),e.c=e.a,t=l(e.a.Pb(),44),e.b=L7e(e),t}function m7e(e){var t;return e.b==null?(Wp(),Wp(),dF):(t=e.ul()?e.tl():e.sl(),t)}function hft(e,t){var n;return n=t==null?-1:gc(e.b,t,0),n<0?!1:(rce(e,n),!0)}function d0(e,t){var n;return nr(t),n=t.g,e.b[n]?!1:(Ts(e.b,n,t),++e.c,!0)}function EV(e,t){var n,r;return n=1-t,r=e.a[n],e.a[n]=r.a[t],r.a[t]=e,e.b=!0,r.b=!1,r}function t3n(e,t){var n,r;for(r=t.Kc();r.Ob();)n=l(r.Pb(),272),e.b=!0,na(e.e,n),n.b=e}function n3n(e,t){var n,r;return n=l(Q(e,(Nt(),w4)),8),r=l(Q(t,w4),8),Yi(n.b,r.b)}function nce(e,t,n){var r,a,o;return o=t>>5,a=t&31,r=va(ub(e.n[n][o],Yr(l0(a,1))),3),r}function fft(e,t,n){var r,a,o;for(o=e.a.length-1,a=e.b,r=0;r0?1:0:(!e.c&&(e.c=XO(Zc(e.f))),e.c).e}function xft(e,t){t?e.B==null&&(e.B=e.D,e.D=null):e.B!=null&&(e.D=e.B,e.B=null)}function a3n(e,t){return wE(),e==s3&&t==o4||e==o4&&t==s3||e==M6&&t==a4||e==a4&&t==M6}function o3n(e,t){return wE(),e==s3&&t==a4||e==s3&&t==M6||e==o4&&t==M6||e==o4&&t==a4}function kft(e,t){return A1(),f0(H1),b.Math.abs(0-t)<=H1||t==0||isNaN(0)&&isNaN(t)?0:e/t}function Eft(e,t){return ze(Ge(fh(ON(fc(new bn(null,new kn(e.c.b,16)),new AYe(e)),t))))}function x7e(e,t){return ze(Ge(fh(ON(fc(new bn(null,new kn(e.c.b,16)),new _Ye(e)),t))))}function c3n(){return Ho(),he(le(F1e,1),it,259,0,[eW,vf,UL,tW,$T,B6,GL,RT,jT,nW])}function u3n(){return Nf(),he(le(TDe,1),it,243,0,[AW,AB,LB,xDe,kDe,yDe,EDe,LW,v3,x4])}function l3n(e,t){var n;t.Ug("General Compactor",1),n=p5n(l(at(e,(Sb(),Zde)),393)),n.Cg(e)}function h3n(e,t){var n,r;return n=l(at(e,(Sb(),qW)),17),r=l(at(t,qW),17),ru(n.a,r.a)}function k7e(e,t,n){var r,a;for(a=Rr(e,0);a.b!=a.d.c;)r=l(Br(a),8),r.a+=t,r.b+=n;return e}function gA(e,t,n){var r;for(r=e.b[n&e.f];r;r=r.b)if(n==r.a&&yd(t,r.g))return r;return null}function pA(e,t,n){var r;for(r=e.c[n&e.f];r;r=r.d)if(n==r.f&&yd(t,r.i))return r;return null}function f3n(e,t,n){var r,a,o;for(r=0,a=0;a>>31;r!=0&&(e[n]=r)}function oce(e,t,n,r,a,o){var f;this.c=e,f=new bt,txe(e,f,t,e.b,n,r,a,o),this.a=new Ua(f,0)}function Tft(){this.c=new Wz(0),this.b=new Wz(lCe),this.d=new Wz(hyt),this.a=new Wz(Lhe)}function of(e,t,n,r,a,o,f){Ur.call(this,e,t),this.d=n,this.e=r,this.c=a,this.b=o,this.a=O1(f)}function Os(e,t,n,r,a,o,f,g,w,E,C,L,B){return Lpt(e,t,n,r,a,o,f,g,w,E,C,L,B),$ce(e,!1),e}function d3n(e){return e.b.c.i.k==(Zn(),Us)?l(Q(e.b.c.i,(ft(),zi)),12):e.b.c}function Cft(e){return e.b.d.i.k==(Zn(),Us)?l(Q(e.b.d.i,(ft(),zi)),12):e.b.d}function g3n(e){var t;return t=jH(e),cw(t.a,0)?(Jz(),Jz(),A6t):(Jz(),new art(t.b))}function cce(e){var t;return t=e6e(e),cw(t.a,0)?(cy(),cy(),I0e):(cy(),new sae(t.b))}function uce(e){var t;return t=e6e(e),cw(t.a,0)?(cy(),cy(),I0e):(cy(),new sae(t.c))}function Sft(e){switch(e.g){case 2:return Ct(),er;case 4:return Ct(),ar;default:return e}}function _ft(e){switch(e.g){case 1:return Ct(),Dr;case 3:return Ct(),Qn;default:return e}}function Aft(e){switch(e.g){case 0:return new Mne;case 1:return new Dne;default:return null}}function lx(){lx=U,g1e=new vs("edgelabelcenterednessanalysis.includelabel",(Hn(),Pb))}function E7e(){E7e=U,CEt=Td(Ytt(fi(fi(new Xs,(uo(),bu),(vo(),PK)),_u,MK),mc),NK)}function Lft(){Lft=U,LEt=Td(Ytt(fi(fi(new Xs,(uo(),bu),(vo(),PK)),_u,MK),mc),NK)}function lce(){lce=U,qM=new uJe,npe=he(le(dl,1),S6,179,0,[]),X_t=he(le(Uf,1),LSe,62,0,[])}function dE(){dE=U,dB=new I3e("TO_INTERNAL_LTR",0),h1e=new I3e("TO_INPUT_DIRECTION",1)}function kl(){kl=U,EAe=new K2,xAe=new J3,kAe=new HJ,yAe=new wm,TAe=new VJ,CAe=new UJ}function p3n(e,t){t.Ug(q3t,1),S8e(Zun(new e_((g_(),new Jae(e,!1,!1,new cS))))),t.Vg()}function b3n(e,t,n){n.Ug("DFS Treeifying phase",1),O5n(e,t),DCn(e,t),e.a=null,e.b=null,n.Vg()}function vN(e,t){return Hn(),Ia(e)?E6e(e,ei(t)):fy(e)?Nae(e,Ge(t)):hy(e)?agn(e,Bt(t)):e.Fd(t)}function bA(e,t){var n,r;for(nr(t),r=t.vc().Kc();r.Ob();)n=l(r.Pb(),44),e.zc(n.ld(),n.md())}function m3n(e,t,n){var r;for(r=n.Kc();r.Ob();)if(!qH(e,t,r.Pb()))return!1;return!0}function v3n(e,t,n,r,a){var o;return n&&(o=ms(t.Dh(),e.c),a=n.Rh(t,-1-(o==-1?r:o),null,a)),a}function w3n(e,t,n,r,a){var o;return n&&(o=ms(t.Dh(),e.c),a=n.Th(t,-1-(o==-1?r:o),null,a)),a}function Mft(e){var t;if(e.b==-2){if(e.e==0)t=-1;else for(t=0;e.a[t]==0;t++);e.b=t}return e.b}function y3n(e){if(nr(e),e.length==0)throw ue(new gd("Zero length BigInteger"));S_n(this,e)}function T7e(e){this.i=e.gc(),this.i>0&&(this.g=this.aj(this.i+(this.i/8|0)+1),e.Qc(this.g))}function Dft(e,t,n){this.g=e,this.d=t,this.e=n,this.a=new bt,Ikn(this),Cn(),Vs(this.a,null)}function C7e(e,t){t.q=e,e.d=b.Math.max(e.d,t.r),e.b+=t.d+(e.a.c.length==0?0:e.c),vt(e.a,t)}function gE(e,t){var n,r,a,o;return a=e.c,n=e.c+e.b,o=e.d,r=e.d+e.a,t.a>a&&t.ao&&t.ba?n=a:Xn(t,n+1),e.a=tf(e.a,0,t)+(""+r)+w5e(e.a,n)}function $ft(e,t){e.a=bo(e.a,1),e.c=b.Math.min(e.c,t),e.b=b.Math.max(e.b,t),e.d=bo(e.d,t)}function _3n(e,t){return t1||e.Ob())return++e.a,e.g=0,t=e.i,e.Ob(),t;throw ue(new _c)}function Vft(e){switch(e.a.g){case 1:return new Yet;case 3:return new Ydt;default:return new nie}}function _7e(e,t){switch(t){case 1:return!!e.n&&e.n.i!=0;case 2:return e.k!=null}return Z5e(e,t)}function Zc(e){return _P>22),a=e.h+t.h+(r>>22),qu(n&eh,r&eh,a&hp)}function Jft(e,t){var n,r,a;return n=e.l-t.l,r=e.m-t.m+(n>>22),a=e.h-t.h+(r>>22),qu(n&eh,r&eh,a&hp)}function W3n(e){var t,n;for(zDn(e),n=new G(e.d);n.ar)throw ue(new my(t,r));return e.Si()&&(n=bot(e,n)),e.Ei(t,n)}function yE(e,t,n,r,a){var o,f;for(f=n;f<=a;f++)for(o=t;o<=r;o++)r6(e,o,f)||FU(e,o,f,!0,!1)}function cyn(e){h6();var t,n,r;for(n=We(Ea,dt,8,2,0,1),r=0,t=0;t<2;t++)r+=.5,n[t]=t7n(r,e);return n}function xE(e){var t,n,r;return t=~e.l+1&eh,n=~e.m+(t==0?1:0)&eh,r=~e.h+(t==0&&n==0?1:0)&hp,qu(t,n,r)}function P7e(e){var t;if(e<0)return lo;if(e==0)return 0;for(t=rL;!(t&e);t>>=1);return t}function mce(e,t,n){return e>=128?!1:e<64?I_(va(l0(1,e),n),0):I_(va(l0(1,e-64),t),0)}function _N(e,t,n){return n==null?(!e.q&&(e.q=new Pr),ax(e.q,t)):(!e.q&&(e.q=new Pr),ki(e.q,t,n)),e}function rt(e,t,n){return n==null?(!e.q&&(e.q=new Pr),ax(e.q,t)):(!e.q&&(e.q=new Pr),ki(e.q,t,n)),e}function u0t(e){var t,n;return n=new KH,pc(n,e),rt(n,(bb(),Hx),e),t=new Pr,FAn(e,n,t),hDn(e,n,t),n}function l0t(e){var t,n;return t=e.t-e.k[e.o.p]*e.d+e.j[e.o.p]>e.f,n=e.u+e.e[e.o.p]*e.d>e.f*e.s*e.d,t||n}function h0t(e,t){var n,r,a,o;for(n=!1,r=e.a[t].length,o=0;o=0,"Negative initial capacity"),BO(t>=0,"Non-positive load factor"),Nl(this)}function lyn(e,t,n,r,a){var o,f;if(f=e.length,o=n.length,t<0||r<0||a<0||t+a>f||r+a>o)throw ue(new _we)}function j7e(e,t){Cn();var n,r,a,o,f;for(f=!1,r=t,a=0,o=r.length;a1||t>=0&&e.b<3)}function yce(e){var t,n,r;t=~e.l+1&eh,n=~e.m+(t==0?1:0)&eh,r=~e.h+(t==0&&n==0?1:0)&hp,e.l=t,e.m=n,e.h=r}function q7e(e){Cn();var t,n,r;for(r=1,n=e.Kc();n.Ob();)t=n.Pb(),r=31*r+(t!=null?es(t):0),r=r|0;return r}function pyn(e,t,n,r,a){var o;return o=D9e(e,t),n&&yce(o),a&&(e=c7n(e,t),r?Nb=xE(e):Nb=qu(e.l,e.m,e.h)),o}function x0t(e,t,n){e.g=Rue(e,t,(Ct(),ar),e.b),e.d=Rue(e,n,ar,e.b),!(e.g.c==0||e.d.c==0)&&Jgt(e)}function k0t(e,t,n){e.g=Rue(e,t,(Ct(),er),e.j),e.d=Rue(e,n,er,e.j),!(e.g.c==0||e.d.c==0)&&Jgt(e)}function H7e(e,t){switch(t){case 7:return!!e.e&&e.e.i!=0;case 8:return!!e.d&&e.d.i!=0}return _8e(e,t)}function byn(e,t){switch(t.g){case 0:De(e.b,641)||(e.b=new jft);break;case 1:De(e.b,642)||(e.b=new Rit)}}function E0t(e){switch(e.g){case 0:return new One;default:throw ue(new Yn(FG+(e.f!=null?e.f:""+e.g)))}}function T0t(e){switch(e.g){case 0:return new gl;default:throw ue(new Yn(FG+(e.f!=null?e.f:""+e.g)))}}function myn(e,t,n){return!_k(Fi(new bn(null,new kn(e.c,16)),new Wl(new ltt(t,n)))).Bd((Am(),zx))}function C0t(e,t){return z8(BE(l(Q(t,(Hc(),y3)),88)),new lt(e.c.e.a-e.b.e.a,e.c.e.b-e.b.e.b))<=0}function vyn(e,t){for(;e.g==null&&!e.c?H5e(e):e.g==null||e.i!=0&&l(e.g[e.i-1],51).Ob();)kln(t,CU(e))}function Um(e){var t,n;for(n=new G(e.a.b);n.ar?1:0}function xyn(e){return vt(e.c,(hx(),gSt)),W6e(e.a,ze(Ge(It((Gce(),TW)))))?new Hne:new OXe(e)}function kyn(e){for(;!e.d||!e.d.Ob();)if(e.b&&!l_(e.b))e.d=l(X8(e.b),51);else return null;return e.d}function U7e(e){switch(e.g){case 1:return hyt;default:case 2:return 0;case 3:return Lhe;case 4:return lCe}}function Eyn(){Di();var e;return cpe||(e=Hhn(_b("M",!0)),e=oH(_b("M",!1),e),cpe=e,cpe)}function NV(){NV=U,Wge=new Cq("ELK",0),lPe=new Cq("JSON",1),uPe=new Cq("DOT",2),hPe=new Cq("SVG",3)}function yA(){yA=U,Sde=new _se("STACKED",0),Cde=new _se("REVERSE_STACKED",1),MB=new _se("SEQUENCED",2)}function xA(){xA=U,ZDe=new Ose(Id,0),Ide=new Ose("MIDDLE_TO_MIDDLE",1),OB=new Ose("AVOID_OVERLAP",2)}function TE(){TE=U,oLe=new MZ,cLe=new lI,X8t=new yj,Y8t=new DZ,W8t=new n8,aLe=(nr(W8t),new ke)}function PV(){PV=U,WNe=new lw(15),XSt=new Ha((pi(),_2),WNe),MM=n9,VNe=LSt,UNe=kv,KNe=i7,GNe=C4}function Q5(e,t){var n,r,a,o,f;for(r=t,a=0,o=r.length;a=e.b.c.length||(K7e(e,2*t+1),n=2*t+2,n0&&(t.Cd(n),n.i&&C4n(n))}function W7e(e,t,n){var r;for(r=n-1;r>=0&&e[r]===t[r];r--);return r<0?0:fse(va(e[r],Vo),va(t[r],Vo))?-1:1}function A0t(e,t,n){var r,a;this.g=e,this.c=t,this.a=this,this.d=this,a=cft(n),r=We(c6t,TP,227,a,0,1),this.b=r}function Cce(e,t,n,r,a){var o,f;for(f=n;f<=a;f++)for(o=t;o<=r;o++)if(r6(e,o,f))return!0;return!1}function Lyn(e,t){var n,r;for(r=e.Zb().Cc().Kc();r.Ob();)if(n=l(r.Pb(),16),n.Hc(t))return!0;return!1}function L0t(e,t,n){var r,a,o,f;for(nr(n),f=!1,o=e.fd(t),a=n.Kc();a.Ob();)r=a.Pb(),o.Rb(r),f=!0;return f}function Sce(e,t){var n,r;return r=l(Kn(e.a,4),129),n=We(epe,r0e,424,t,0,1),r!=null&&pu(r,0,n,0,r.length),n}function M0t(e,t){var n;return n=new ele((e.f&256)!=0,e.i,e.a,e.d,(e.f&16)!=0,e.j,e.g,t),e.e!=null||(n.c=e),n}function Myn(e,t){var n;return e===t?!0:De(t,85)?(n=l(t,85),Qxe(Mm(e),n.vc())):!1}function D0t(e,t,n){var r,a;for(a=n.Kc();a.Ob();)if(r=l(a.Pb(),44),e.Be(t,r.md()))return!0;return!1}function I0t(e,t,n){return e.d[t.p][n.p]||(O6n(e,t,n),e.d[t.p][n.p]=!0,e.d[n.p][t.p]=!0),e.a[t.p][n.p]}function Dyn(e,t){var n;return!e||e==t||!ns(t,(ft(),u3))?!1:(n=l(Q(t,(ft(),u3)),10),n!=e)}function _ce(e){switch(e.i){case 2:return!0;case 1:return!1;case-1:++e.c;default:return e.$l()}}function O0t(e){switch(e.i){case-2:return!0;case-1:return!1;case 1:--e.c;default:return e._l()}}function N0t(e){xot.call(this,"The given string does not match the expected format for individual spacings.",e)}function Iyn(e,t){var n;t.Ug("Min Size Preprocessing",1),n=a9e(e),Hi(e,(ug(),mM),n.a),Hi(e,UW,n.b),t.Vg()}function Oyn(e){var t,n,r;for(t=0,r=We(Ea,dt,8,e.b,0,1),n=Rr(e,0);n.b!=n.d.c;)r[t++]=l(Br(n),8);return r}function Ace(e,t,n){var r,a,o;for(r=new os,o=Rr(n,0);o.b!=o.d.c;)a=l(Br(o),8),ui(r,new Eo(a));L0t(e,t,r)}function Nyn(e,t){var n;return n=bo(e,t),fse(moe(e,t),0)|Aq(moe(e,n),0)?n:bo(EP,moe(ub(n,63),1))}function Pyn(e,t){var n,r;return n=l(e.d.Bc(t),16),n?(r=e.e.hc(),r.Gc(n),e.e.d-=n.gc(),n.$b(),r):null}function P0t(e){var t;if(t=e.a.c.length,t>0)return qk(t-1,e.a.c.length),t2(e.a,t-1);throw ue(new OQe)}function B0t(e,t,n){if(e>t)throw ue(new Yn(eG+e+Qwt+t));if(e<0||t>n)throw ue(new t3e(eG+e+fEe+t+uEe+n))}function CE(e,t){e.D==null&&e.B!=null&&(e.D=e.B,e.B=null),ece(e,t==null?null:(nr(t),t)),e.C&&e.hl(null)}function Byn(e,t){var n;n=It((Gce(),TW))!=null&&t.Sg()!=null?ze(Ge(t.Sg()))/ze(Ge(It(TW))):1,ki(e.b,t,n)}function Y7e(e,t){var n,r;if(r=e.c[t],r!=0)for(e.c[t]=0,e.d-=r,n=t+1;nMG?e-n>MG:n-e>MG}function K0t(e,t){var n;for(n=0;na&&(Egt(t.q,a),r=n!=t.q.d)),r}function W0t(e,t){var n,r,a,o,f,g,w,E;return w=t.i,E=t.j,r=e.f,a=r.i,o=r.j,f=w-a,g=E-o,n=b.Math.sqrt(f*f+g*g),n}function t8e(e,t){var n,r;return r=XV(e),r||(n=(kle(),P2t(t)),r=new kQe(n),qr(r.El(),e)),r}function DN(e,t){var n,r;return n=l(e.c.Bc(t),16),n?(r=e.hc(),r.Gc(n),e.d-=n.gc(),n.$b(),e.mc(r)):e.jc()}function Kyn(e,t){var n,r;for(r=Jl(e.d,1)!=0,n=!0;n;)n=!1,n=t.c.mg(t.e,r),n=n|cP(e,t,r,!1),r=!r;w7e(e)}function Y0t(e,t,n,r){var a,o;e.a=t,o=r?0:1,e.f=(a=new cpt(e.c,e.a,n,o),new $bt(n,e.a,a,e.e,e.b,e.c==(Iw(),oM)))}function FV(e){var t;return mr(e.a!=e.b),t=e.d.a[e.a],Ert(e.b==e.d.c&&t!=null),e.c=e.a,e.a=e.a+1&e.d.a.length-1,t}function X0t(e){var t;if(e.c!=0)return e.c;for(t=0;t=e.c.b:e.a<=e.c.b))throw ue(new _c);return t=e.a,e.a+=e.c.c,++e.b,pt(t)}function Oce(e){var t;return t=new bye(e.a),pc(t,e),rt(t,(ft(),zi),e),t.o.a=e.g,t.o.b=e.f,t.n.a=e.i,t.n.b=e.j,t}function Nce(e){return(Ct(),hl).Hc(e.j)?ze(Ge(Q(e,(ft(),zT)))):Ic(he(le(Ea,1),dt,8,0,[e.i.n,e.n,e.a])).b}function Yyn(e){var t;return t=Oq(TEt),l(Q(e,(ft(),Lu)),21).Hc((Ho(),$T))&&fi(t,(uo(),bu),(vo(),RK)),t}function Xyn(e){var t,n,r,a;for(a=new Ks,r=new G(e);r.a=0?t:-t;r>0;)r%2==0?(n*=n,r=r/2|0):(a*=n,r-=1);return t<0?1/a:a}function t4n(e,t){var n,r,a;for(a=1,n=e,r=t>=0?t:-t;r>0;)r%2==0?(n*=n,r=r/2|0):(a*=n,r-=1);return t<0?1/a:a}function yb(e,t){var n,r,a,o;return o=(a=e?XV(e):null,Dpt((r=t,a&&a.Gl(),r))),o==t&&(n=XV(e),n&&n.Gl()),o}function Q0t(e,t,n){var r,a;return a=e.f,e.f=t,e.Db&4&&!(e.Db&1)&&(r=new _a(e,1,0,a,t),n?n.nj(r):n=r),n}function J0t(e,t,n){var r,a;return a=e.b,e.b=t,e.Db&4&&!(e.Db&1)&&(r=new _a(e,1,3,a,t),n?n.nj(r):n=r),n}function r8e(e,t,n){var r,a;return a=e.a,e.a=t,e.Db&4&&!(e.Db&1)&&(r=new _a(e,1,1,a,t),n?n.nj(r):n=r),n}function Z0t(e){var t,n;if(e!=null)for(n=0;n=r||t-129&&e<128?(Fit(),t=e+128,n=t_e[t],!n&&(n=t_e[t]=new Cr(e)),n):new Cr(e)}function _E(e){var t,n;return e>-129&&e<128?(est(),t=e+128,n=s_e[t],!n&&(n=s_e[t]=new Wn(e)),n):new Wn(e)}function n1t(e,t){var n;e.a.c.length>0&&(n=l(jt(e.a,e.a.c.length-1),579),G7e(n,t))||vt(e.a,new yut(t))}function o4n(e){u0();var t,n;t=e.d.c-e.e.c,n=l(e.g,154),Vu(n.b,new pYe(t)),Vu(n.c,new bYe(t)),to(n.i,new mYe(t))}function r1t(e){var t;return t=new tb,t.a+="VerticalSegment ",wu(t,e.e),t.a+=" ",hi(t,Eye(new Zie,new G(e.k))),t.a}function Pce(e,t){var n,r,a;for(n=0,a=Oc(e,t).Kc();a.Ob();)r=l(a.Pb(),12),n+=Q(r,(ft(),jl))!=null?1:0;return n}function e6(e,t,n){var r,a,o;for(r=0,o=Rr(e,0);o.b!=o.d.c&&(a=ze(Ge(Br(o))),!(a>n));)a>=t&&++r;return r}function i1t(e,t){Xr(e);try{return e._b(t)}catch(n){if(n=bs(n),De(n,212)||De(n,169))return!1;throw ue(n)}}function s8e(e,t){Xr(e);try{return e.Hc(t)}catch(n){if(n=bs(n),De(n,212)||De(n,169))return!1;throw ue(n)}}function c4n(e,t){Xr(e);try{return e.Mc(t)}catch(n){if(n=bs(n),De(n,212)||De(n,169))return!1;throw ue(n)}}function Oy(e,t){Xr(e);try{return e.xc(t)}catch(n){if(n=bs(n),De(n,212)||De(n,169))return null;throw ue(n)}}function u4n(e,t){Xr(e);try{return e.Bc(t)}catch(n){if(n=bs(n),De(n,212)||De(n,169))return null;throw ue(n)}}function TA(e,t){switch(t.g){case 2:case 1:return Oc(e,t);case 3:case 4:return lf(Oc(e,t))}return Cn(),Cn(),_o}function CA(e){var t;return e.Db&64?g0(e):(t=new Af(g0(e)),t.a+=" (name: ",Xo(t,e.zb),t.a+=")",t.a)}function l4n(e){var t;return t=l(B1(e.c.c,""),233),t||(t=new nx(Ck(Tk(new ny,""),"Other")),h2(e.c.c,"",t)),t}function a8e(e,t,n){var r,a;return a=e.sb,e.sb=t,e.Db&4&&!(e.Db&1)&&(r=new _a(e,1,4,a,t),n?n.nj(r):n=r),n}function o8e(e,t,n){var r,a;return a=e.r,e.r=t,e.Db&4&&!(e.Db&1)&&(r=new _a(e,1,8,a,e.r),n?n.nj(r):n=r),n}function h4n(e,t,n){var r,a;return r=new Zg(e.e,4,13,(a=t.c,a||(Tn(),td)),null,f2(e,t),!1),n?n.nj(r):n=r,n}function f4n(e,t,n){var r,a;return r=new Zg(e.e,3,13,null,(a=t.c,a||(Tn(),td)),f2(e,t),!1),n?n.nj(r):n=r,n}function o2(e,t){var n,r;return n=l(t,691),r=n.el(),!r&&n.fl(r=De(t,90)?new Btt(e,l(t,29)):new sct(e,l(t,156))),r}function IN(e,t,n){var r;e._i(e.i+1),r=e.Zi(t,n),t!=e.i&&pu(e.g,t,e.g,t+1,e.i-t),Ts(e.g,t,r),++e.i,e.Mi(t,n),e.Ni()}function d4n(e,t){var n;return t.a&&(n=t.a.a.length,e.a?hi(e.a,e.b):e.a=new Th(e.d),fct(e.a,t.a,t.d.length,n)),e}function g4n(e,t){var n;e.c=t,e.a=w5n(t),e.a<54&&(e.f=(n=t.d>1?lct(t.a[0],t.a[1]):lct(t.a[0],0),Fm(t.e>0?n:r2(n))))}function ON(e,t){var n;return n=new on,e.a.Bd(n)?(Ok(),new Kie(nr(Ult(e,n.a,t)))):(fb(e),Ok(),Ok(),b_e)}function s1t(e,t){var n;e.c.length!=0&&(n=l(j1(e,We(wg,m2,10,e.c.length,0,1)),199),cye(n,new U9),Jpt(n,t))}function a1t(e,t){var n;e.c.length!=0&&(n=l(j1(e,We(wg,m2,10,e.c.length,0,1)),199),cye(n,new Wd),Jpt(n,t))}function Pi(e,t){return Ia(e)?vn(e,t):fy(e)?eit(e,t):hy(e)?(nr(e),qe(e)===qe(t)):t5e(e)?e.Fb(t):W4e(e)?Jtt(e,t):W5e(e,t)}function cf(e,t,n){if(t<0)d9e(e,n);else{if(!n.rk())throw ue(new Yn(Ob+n.xe()+kL));l(n,69).wk().Ek(e,e.hi(),t)}}function o1t(e,t,n){if(e<0||t>n)throw ue(new tc(eG+e+fEe+t+", size: "+n));if(e>t)throw ue(new Yn(eG+e+Qwt+t))}function c1t(e){var t;return e.Db&64?g0(e):(t=new Af(g0(e)),t.a+=" (source: ",Xo(t,e.d),t.a+=")",t.a)}function u1t(e){return e>=65&&e<=70?e-65+10:e>=97&&e<=102?e-97+10:e>=48&&e<=57?e-48:0}function p4n(e){YU();var t,n,r,a;for(n=eue(),r=0,a=n.length;r=0?kb(e):J_(kb(r2(e))))}function f1t(e,t,n,r,a,o){this.e=new bt,this.f=(qo(),sM),vt(this.e,e),this.d=t,this.a=n,this.b=r,this.f=a,this.c=o}function v4n(e,t,n){e.n=Lm(nm,[dt,ahe],[376,28],14,[n,ua(b.Math.ceil(t/32))],2),e.o=t,e.p=n,e.j=t-1>>1,e.k=n-1>>1}function d1t(e){return e-=e>>1&1431655765,e=(e>>2&858993459)+(e&858993459),e=(e>>4)+e&252645135,e+=e>>8,e+=e>>16,e&63}function g1t(e,t){var n,r;for(r=new or(e);r.e!=r.i.gc();)if(n=l(gr(r),142),qe(t)===qe(n))return!0;return!1}function w4n(e,t,n){var r,a,o;return o=(a=VE(e.b,t),a),o&&(r=l(VU(lN(e,o),""),29),r)?P9e(e,r,t,n):null}function Bce(e,t,n){var r,a,o;return o=(a=VE(e.b,t),a),o&&(r=l(VU(lN(e,o),""),29),r)?B9e(e,r,t,n):null}function y4n(e,t){var n;if(n=X5(e.i,t),n==null)throw ue(new dd("Node did not exist in input."));return S7e(t,n),null}function x4n(e,t){var n;if(n=oP(e,t),De(n,331))return l(n,35);throw ue(new Yn(Ob+t+"' is not a valid attribute"))}function _A(e,t,n){var r;if(r=e.gc(),t>r)throw ue(new my(t,r));if(e.Si()&&e.Hc(n))throw ue(new Yn(WP));e.Gi(t,n)}function k4n(e,t){t.Ug("Sort end labels",1),Is(Fi(Dc(new bn(null,new kn(e.b,16)),new hj),new J7),new aZ),t.Vg()}function Js(){Js=U,J1=new mO(cL,0),vc=new mO(Dx,1),uc=new mO(Mx,2),Q1=new mO(whe,3),wf=new mO("UP",4)}function PN(){PN=U,WW=new $se("P1_STRUCTURE",0),YW=new $se("P2_PROCESSING_ORDER",1),XW=new $se("P3_EXECUTION",2)}function p1t(){p1t=U,jTt=Td(Td(v_(Td(Td(v_(fi(new Xs,(wx(),lM),(WA(),Dde)),hM),YDe),QDe),fM),UDe),JDe)}function E4n(e){switch(l(Q(e,(ft(),hv)),311).g){case 1:rt(e,hv,(ep(),Ux));break;case 2:rt(e,hv,(ep(),F6))}}function T4n(e){switch(e){case 0:return new nJe;case 1:return new eJe;case 2:return new tJe;default:throw ue(new YI)}}function b1t(e){switch(e.g){case 2:return vc;case 1:return uc;case 4:return Q1;case 3:return wf;default:return J1}}function h8e(e,t){switch(e.b.g){case 0:case 1:return t;case 2:case 3:return new ef(t.d,0,t.a,t.b);default:return null}}function f8e(e){switch(e.g){case 1:return er;case 2:return Qn;case 3:return ar;case 4:return Dr;default:return Pc}}function BN(e){switch(e.g){case 1:return Dr;case 2:return er;case 3:return Qn;case 4:return ar;default:return Pc}}function $V(e){switch(e.g){case 1:return ar;case 2:return Dr;case 3:return er;case 4:return Qn;default:return Pc}}function d8e(e,t,n,r){switch(t){case 1:return!e.n&&(e.n=new nt(ec,e,1,7)),e.n;case 2:return e.k}return sxe(e,t,n,r)}function AA(e,t,n){var r,a;return e.Pj()?(a=e.Qj(),r=Hue(e,t,n),e.Jj(e.Ij(7,pt(n),r,t,a)),r):Hue(e,t,n)}function Fce(e,t){var n,r,a;e.d==null?(++e.e,--e.f):(a=t.ld(),n=t.Bi(),r=(n&Ii)%e.d.length,uvn(e,r,j2t(e,r,n,a)))}function AE(e,t){var n;n=(e.Bb&m0)!=0,t?e.Bb|=m0:e.Bb&=-1025,e.Db&4&&!(e.Db&1)&&Ni(e,new h0(e,1,10,n,t))}function LE(e,t){var n;n=(e.Bb&Xy)!=0,t?e.Bb|=Xy:e.Bb&=-4097,e.Db&4&&!(e.Db&1)&&Ni(e,new h0(e,1,12,n,t))}function ME(e,t){var n;n=(e.Bb&Sl)!=0,t?e.Bb|=Sl:e.Bb&=-8193,e.Db&4&&!(e.Db&1)&&Ni(e,new h0(e,1,15,n,t))}function DE(e,t){var n;n=(e.Bb&r4)!=0,t?e.Bb|=r4:e.Bb&=-2049,e.Db&4&&!(e.Db&1)&&Ni(e,new h0(e,1,11,n,t))}function C4n(e){var t;e.g&&(t=e.c.kg()?e.f:e.a,Y9e(t.a,e.o,!0),Y9e(t.a,e.o,!1),rt(e.o,(Nt(),Ms),(Ra(),Tv)))}function S4n(e){var t;if(!e.a)throw ue(new nc("Cannot offset an unassigned cut."));t=e.c-e.b,e.b+=t,zat(e,t),$at(e,t)}function _4n(e,t){var n;if(n=cr(e.k,t),n==null)throw ue(new dd("Port did not exist in input."));return S7e(t,n),null}function A4n(e){var t,n;for(n=B2t(Ah(e)).Kc();n.Ob();)if(t=ei(n.Pb()),YA(e,t))return Lmn((met(),R_t),t);return null}function m1t(e){var t,n;for(n=e.p.a.ec().Kc();n.Ob();)if(t=l(n.Pb(),218),t.f&&e.b[t.c]<-1e-10)return t;return null}function L4n(e){var t,n;for(n=hb(new tb,91),t=!0;e.Ob();)t||(n.a+=Co),t=!1,wu(n,e.Pb());return(n.a+="]",n).a}function M4n(e){var t,n,r;for(t=new bt,r=new G(e.b);r.at?1:e==t?e==0?Yi(1/e,1/t):0:isNaN(e)?isNaN(t)?0:1:-1}function I4n(e){var t;return t=e.a[e.c-1&e.a.length-1],t==null?null:(e.c=e.c-1&e.a.length-1,Ts(e.a,e.c,null),t)}function O4n(e){var t,n,r;for(r=0,n=e.length,t=0;t=1?vc:Q1):n}function F4n(e){switch(l(Q(e,(Nt(),bp)),223).g){case 1:return new Tee;case 3:return new Lee;default:return new Eee}}function xb(e){if(e.c)xb(e.c);else if(e.d)throw ue(new nc("Stream already terminated, can't be modified or used"))}function Bw(e,t,n){var r;return r=e.a.get(t),e.a.set(t,n===void 0?null:n),r===void 0?(++e.c,++e.b.g):++e.d,r}function R4n(e,t,n){var r,a;for(a=e.a.ec().Kc();a.Ob();)if(r=l(a.Pb(),10),EN(n,l(jt(t,r.p),16)))return r;return null}function p8e(e,t,n){var r;return r=0,t&&(B5(e.a)?r+=t.f.a/2:r+=t.f.b/2),n&&(B5(e.a)?r+=n.f.a/2:r+=n.f.b/2),r}function j4n(e,t,n){var r;r=n,!r&&(r=B4e(new L8,0)),r.Ug(L3t,2),kdt(e.b,t,r.eh(1)),eMn(e,t,r.eh(1)),rIn(t,r.eh(1)),r.Vg()}function b8e(e,t,n){var r,a;return r=(rb(),a=new AS,a),dV(r,t),fV(r,n),e&&qr((!e.a&&(e.a=new Ys(qh,e,5)),e.a),r),r}function jce(e){var t;return e.Db&64?g0(e):(t=new Af(g0(e)),t.a+=" (identifier: ",Xo(t,e.k),t.a+=")",t.a)}function $ce(e,t){var n;n=(e.Bb&eu)!=0,t?e.Bb|=eu:e.Bb&=-32769,e.Db&4&&!(e.Db&1)&&Ni(e,new h0(e,1,18,n,t))}function m8e(e,t){var n;n=(e.Bb&eu)!=0,t?e.Bb|=eu:e.Bb&=-32769,e.Db&4&&!(e.Db&1)&&Ni(e,new h0(e,1,18,n,t))}function IE(e,t){var n;n=(e.Bb&_d)!=0,t?e.Bb|=_d:e.Bb&=-16385,e.Db&4&&!(e.Db&1)&&Ni(e,new h0(e,1,16,n,t))}function v8e(e,t){var n;n=(e.Bb&Io)!=0,t?e.Bb|=Io:e.Bb&=-65537,e.Db&4&&!(e.Db&1)&&Ni(e,new h0(e,1,20,n,t))}function w8e(e){var t;return t=We(kf,Ad,28,2,15,1),e-=Io,t[0]=(e>>10)+AP&Zs,t[1]=(e&1023)+56320&Zs,If(t,0,t.length)}function $4n(e){var t;return t=jy(e),t>34028234663852886e22?gs:t<-34028234663852886e22?ia:t}function bo(e,t){var n;return wc(e)&&wc(t)&&(n=e+t,_P"+Bm(t.c):"e_"+es(t),e.b&&e.c?Bm(e.b)+"->"+Bm(e.c):"e_"+es(e))}function H4n(e,t){return vn(t.b&&t.c?Bm(t.b)+"->"+Bm(t.c):"e_"+es(t),e.b&&e.c?Bm(e.b)+"->"+Bm(e.c):"e_"+es(e))}function Fw(e,t){return A1(),f0(Ab),b.Math.abs(e-t)<=Ab||e==t||isNaN(e)&&isNaN(t)?0:et?1:uw(isNaN(e),isNaN(t))}function ip(){ip=U,Hge=new xq(cL,0),JB=new xq("POLYLINE",1),iC=new xq("ORTHOGONAL",2),s9=new xq("SPLINES",3)}function qV(){qV=U,YIe=new Rse("ASPECT_RATIO_DRIVEN",0),uge=new Rse("MAX_SCALE_DRIVEN",1),WIe=new Rse("AREA_DRIVEN",2)}function V4n(e,t,n){var r;try{dyn(e,t,n)}catch(a){throw a=bs(a),De(a,606)?(r=a,ue(new w6e(r))):ue(a)}return t}function U4n(e){var t,n,r;for(n=0,r=e.length;nt&&r.Ne(e[o-1],e[o])>0;--o)f=e[o],Ts(e,o,e[o-1]),Ts(e,o-1,f)}function sn(e,t){var n,r,a,o,f;if(n=t.f,h2(e.c.d,n,t),t.g!=null)for(a=t.g,o=0,f=a.length;ot){pct(n);break}}zO(n,t)}function Y4n(e,t){var n,r,a;r=G5(t),a=ze(Ge(Py(r,(Nt(),x0)))),n=b.Math.max(0,a/2-.5),FA(t,n,1),vt(e,new Net(t,n))}function X4n(e,t,n){var r;n.Ug("Straight Line Edge Routing",1),n.dh(t,yCe),r=l(at(t,(H5(),Y6)),27),rvt(e,r),n.dh(t,OG)}function y8e(e,t){e.n.c.length==0&&vt(e.n,new PH(e.s,e.t,e.i)),vt(e.b,t),exe(l(jt(e.n,e.n.c.length-1),209),t),jmt(e,t)}function LA(e){var t;this.a=(t=l(e.e&&e.e(),9),new Zh(t,l(c0(t,t.length),9),0)),this.b=We(wa,Rn,1,this.a.a.length,5,1)}function xc(e){var t;return Array.isArray(e)&&e.Tm===xe?_m(bh(e))+"@"+(t=es(e)>>>0,t.toString(16)):e.toString()}function Q4n(e,t){return e.h==SP&&e.m==0&&e.l==0?(t&&(Nb=qu(0,0,0)),ent((iE(),YSe))):(t&&(Nb=qu(e.l,e.m,e.h)),qu(0,0,0))}function J4n(e,t){switch(t.g){case 2:return e.b;case 1:return e.c;case 4:return e.d;case 3:return e.a;default:return!1}}function x1t(e,t){switch(t.g){case 2:return e.b;case 1:return e.c;case 4:return e.d;case 3:return e.a;default:return!1}}function x8e(e,t,n,r){switch(t){case 3:return e.f;case 4:return e.g;case 5:return e.i;case 6:return e.j}return d8e(e,t,n,r)}function HV(e,t){if(t==e.d)return e.e;if(t==e.e)return e.d;throw ue(new Yn("Node "+t+" not part of edge "+e))}function Z4n(e,t){var n;if(n=oP(e.Dh(),t),De(n,102))return l(n,19);throw ue(new Yn(Ob+t+"' is not a valid reference"))}function uf(e,t,n,r){if(t<0)$9e(e,n,r);else{if(!n.rk())throw ue(new Yn(Ob+n.xe()+kL));l(n,69).wk().Ck(e,e.hi(),t,r)}}function Ql(e){var t;if(e.b){if(Ql(e.b),e.b.d!=e.c)throw ue(new Xh)}else e.d.dc()&&(t=l(e.f.c.xc(e.e),16),t&&(e.d=t))}function e5n(e){py();var t,n,r,a;for(t=e.o.b,r=l(l($i(e.r,(Ct(),Dr)),21),87).Kc();r.Ob();)n=l(r.Pb(),117),a=n.e,a.b+=t}function t5n(e){var t,n,r;for(this.a=new bd,r=new G(e);r.a=a)return t.c+n;return t.c+t.b.gc()}function r5n(e,t){Fk();var n,r,a,o;for(r=Olt(e),a=t,nE(r,0,r.length,a),n=0;n0&&(r+=a,++n);return n>1&&(r+=e.d*(n-1)),r}function s5n(e){var t,n,r,a,o;return o=jxe(e),n=ZI(e.c),r=!n,r&&(a=new $p,e1(o,"knownLayouters",a),t=new uQe(a),to(e.c,t)),o}function T8e(e){var t,n,r;for(r=new Up,r.a+="[",t=0,n=e.gc();t0&&(Xn(t-1,e.length),e.charCodeAt(t-1)==58)&&!Hce(e,$M,zM))}function C8e(e,t){var n;return qe(e)===qe(t)?!0:De(t,92)?(n=l(t,92),e.e==n.e&&e.d==n.d&&Imn(e,n.a)):!1}function gx(e){switch(Ct(),e.g){case 4:return Qn;case 1:return ar;case 3:return Dr;case 2:return er;default:return Pc}}function u5n(e){var t,n;if(e.b)return e.b;for(n=G1?null:e.d;n;){if(t=G1?null:n.b,t)return t;n=G1?null:n.d}return Dk(),w_e}function S8e(e){var t,n,r;for(r=ze(Ge(e.a.of((pi(),iY)))),n=new G(e.a.Sf());n.a>5,t=e&31,r=We(Vr,di,28,n+1,15,1),r[n]=1<3;)a*=10,--o;e=(e+(a>>1))/a|0}return r.i=e,!0}function ms(e,t){var n,r,a;if(n=(e.i==null&&Sd(e),e.i),r=t.Lj(),r!=-1){for(a=n.length;r=0;--r)for(t=n[r],a=0;a>1,this.k=t-1>>1}function T5n(e){ZH(),l(e.of((pi(),Ub)),181).Hc((Zl(),hY))&&(l(e.of(S4),181).Fc((Rl(),a9)),l(e.of(Ub),181).Mc(hY))}function A1t(e){var t,n;t=e.d==(yx(),IT),n=Lxe(e),t&&!n||!t&&n?rt(e.a,(Nt(),Rd),(og(),VB)):rt(e.a,(Nt(),Rd),(og(),HB))}function Gce(){Gce=U,tq(),TW=(Nt(),m3),Qkt=O1(he(le(Cge,1),oCe,149,0,[SB,x0,H6,b3,y4,cde,GT,KT,ude,tM,q6,vv,V6]))}function C5n(e,t){var n;return n=l(yc(e,Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[(Fl(),Ec)]))),15),n.Qc(Yit(n.gc()))}function L1t(e,t){var n,r;if(r=new ba(e.a.ad(t,!0)),r.a.gc()<=1)throw ue(new S8);return n=r.a.ec().Kc(),n.Pb(),l(n.Pb(),40)}function S5n(e,t,n){var r,a;return r=ze(e.p[t.i.p])+ze(e.d[t.i.p])+t.n.b+t.a.b,a=ze(e.p[n.i.p])+ze(e.d[n.i.p])+n.n.b+n.a.b,a-r}function O8e(e,t){var n;return e.i>0&&(t.lengthe.i&&Ts(t,e.i,null),t}function UV(e){var t;return e.Db&64?CA(e):(t=new Af(CA(e)),t.a+=" (instanceClassName: ",Xo(t,e.D),t.a+=")",t.a)}function GV(e){var t,n,r,a;for(a=0,n=0,r=e.length;n0?(e._j(),r=t==null?0:es(t),a=(r&Ii)%e.d.length,n=j2t(e,a,r,t),n!=-1):!1}function M1t(e,t){var n,r;e.a=bo(e.a,1),e.c=b.Math.min(e.c,t),e.b=b.Math.max(e.b,t),e.d+=t,n=t-e.f,r=e.e+n,e.f=r-e.e-n,e.e=r}function N8e(e,t){switch(t){case 3:Mw(e,0);return;case 4:Dw(e,0);return;case 5:Uu(e,0);return;case 6:Gu(e,0);return}i8e(e,t)}function Rw(e,t){switch(t.g){case 1:return G8(e.j,(kl(),xAe));case 2:return G8(e.j,(kl(),EAe));default:return Cn(),Cn(),_o}}function P8e(e){ww();var t;switch(t=e.Pc(),t.length){case 0:return x0e;case 1:return new Sae(Xr(t[0]));default:return new ooe(U4n(t))}}function D1t(e,t){e.Xj();try{e.d.bd(e.e++,t),e.f=e.d.j,e.g=-1}catch(n){throw n=bs(n),De(n,77)?ue(new Xh):ue(n)}}function Wce(){Wce=U,ipe=new NS,MPe=new H0,DPe=new AI,IPe=new LI,OPe=new f8,NPe=new tre,PPe=new nre,BPe=new rre,FPe=new ire}function KV(e,t){iye();var n,r;return n=MO((zz(),zz(),NL)),r=null,t==n&&(r=l(xu(KSe,e),624)),r||(r=new Xst(e),t==n&&rc(KSe,e,r)),r}function I1t(e){By();var t;return(e.q?e.q:(Cn(),Cn(),mg))._b((Nt(),g3))?t=l(Q(e,g3),203):t=l(Q(eo(e),eM),203),t}function Py(e,t){var n,r;return r=null,ns(e,(Nt(),kW))&&(n=l(Q(e,kW),96),n.pf(t)&&(r=n.of(t))),r==null&&(r=Q(eo(e),t)),r}function O1t(e,t){var n,r,a;return De(t,44)?(n=l(t,44),r=n.ld(),a=Oy(e.Rc(),r),yd(a,n.md())&&(a!=null||e.Rc()._b(r))):!1}function n1(e,t){var n,r,a;return e.f>0&&(e._j(),r=t==null?0:es(t),a=(r&Ii)%e.d.length,n=y9e(e,a,r,t),n)?n.md():null}function Ru(e,t,n){var r,a,o;return e.Pj()?(r=e.i,o=e.Qj(),IN(e,r,t),a=e.Ij(3,null,t,r,o),n?n.nj(a):n=a):IN(e,e.i,t),n}function A5n(e,t,n){var r,a;return r=new Zg(e.e,4,10,(a=t.c,De(a,90)?l(a,29):(Tn(),Kf)),null,f2(e,t),!1),n?n.nj(r):n=r,n}function L5n(e,t,n){var r,a;return r=new Zg(e.e,3,10,null,(a=t.c,De(a,90)?l(a,29):(Tn(),Kf)),f2(e,t),!1),n?n.nj(r):n=r,n}function N1t(e){py();var t;return t=new Eo(l(e.e.of((pi(),i7)),8)),e.B.Hc((Zl(),aC))&&(t.a<=0&&(t.a=20),t.b<=0&&(t.b=20)),t}function kb(e){Cd();var t,n;return n=Yr(e),t=Yr(ub(e,32)),t!=0?new qot(n,t):n>10||n<0?new Qg(1,n):y6t[n]}function RN(e,t){var n;return wc(e)&&wc(t)&&(n=e%t,_P=0?o=o.a[1]:(a=o,o=o.a[0])}return a}function $N(e,t,n){var r,a,o;for(a=null,o=e.b;o;){if(r=e.a.Ne(t,o.d),n&&r==0)return o;r<=0?o=o.a[0]:(a=o,o=o.a[1])}return a}function P5n(e,t,n,r){var a,o,f;return a=!1,RMn(e.f,n,r)&&(r6n(e.f,e.a[t][n],e.a[t][r]),o=e.a[t],f=o[r],o[r]=o[n],o[n]=f,a=!0),a}function R1t(e,t,n){var r,a,o,f;for(a=l(cr(e.b,n),183),r=0,f=new G(t.j);f.a>5,t&=31,a=e.d+n+(t==0?0:1),r=We(Vr,di,28,a,15,1),Oxn(r,e.a,n,t),o=new Im(e.e,a,r),iA(o),o}function B5n(e,t){var n,r,a;for(r=new hr(dr(qs(e).a.Kc(),new j));jr(r);)if(n=l(xr(r),18),a=n.d.i,a.c==t)return!1;return!0}function R8e(e,t,n){var r,a,o,f,g;return f=e.k,g=t.k,r=n[f.g][g.g],a=Ge(Py(e,r)),o=Ge(Py(t,r)),b.Math.max((nr(a),a),(nr(o),o))}function F5n(){return Error.stackTraceLimit>0?(b.Error.stackTraceLimit=Error.stackTraceLimit=64,!0):"stack"in new Error}function R5n(e,t){return A1(),A1(),f0(Ab),(b.Math.abs(e-t)<=Ab||e==t||isNaN(e)&&isNaN(t)?0:et?1:uw(isNaN(e),isNaN(t)))>0}function j8e(e,t){return A1(),A1(),f0(Ab),(b.Math.abs(e-t)<=Ab||e==t||isNaN(e)&&isNaN(t)?0:et?1:uw(isNaN(e),isNaN(t)))<0}function $1t(e,t){return A1(),A1(),f0(Ab),(b.Math.abs(e-t)<=Ab||e==t||isNaN(e)&&isNaN(t)?0:et?1:uw(isNaN(e),isNaN(t)))<=0}function Xce(e,t){for(var n=0;!t[n]||t[n]=="";)n++;for(var r=t[n++];n0&&this.b>0&&(this.g=aH(this.c,this.b,this.a))}function j5n(e,t){var n=e.a,r;t=String(t),n.hasOwnProperty(t)&&(r=n[t]);var a=(vce(),_0e)[typeof r],o=a?a(r):Z7e(typeof r);return o}function NE(e){var t,n,r;if(r=null,t=Pd in e.a,n=!t,n)throw ue(new dd("Every element must have an id."));return r=xx(Wg(e,Pd)),r}function jw(e){var t,n;for(n=fpt(e),t=null;e.c==2;)Li(e),t||(t=(Di(),Di(),new B_(2)),Qm(t,n),n=t),n.Jm(fpt(e));return n}function YV(e,t){var n,r,a;return e._j(),r=t==null?0:es(t),a=(r&Ii)%e.d.length,n=y9e(e,a,r,t),n?(Wht(e,n),n.md()):null}function K1t(e,t){return e.e>t.e?1:e.et.d?e.e:e.d=48&&e<48+b.Math.min(10,10)?e-48:e>=97&&e<97?e-97+10:e>=65&&e<65?e-65+10:-1}function $5n(e,t){if(t.c==e)return t.d;if(t.d==e)return t.c;throw ue(new Yn("Input edge is not connected to the input port."))}function z5n(e){if(QV(wT,e))return Hn(),ST;if(QV(Ffe,e))return Hn(),Pb;throw ue(new Yn("Expecting true or false"))}function q8e(e){switch(typeof e){case Ile:return s2(e);case Qke:return j8(e);case Cx:return Art(e);default:return e==null?0:fw(e)}}function Td(e,t){if(e.a<0)throw ue(new nc("Did not call before(...) or after(...) before calling add(...)."));return Bye(e,e.a,t),e}function H8e(e){return BH(),De(e,162)?l(cr(lF,C6t),295).Rg(e):Hu(lF,bh(e))?l(cr(lF,bh(e)),295).Rg(e):null}function Ku(e){var t,n;return e.Db&32||(n=(t=l(Kn(e,16),29),yr(t||e.ii())-yr(e.ii())),n!=0&&px(e,32,We(wa,Rn,1,n,5,1))),e}function px(e,t,n){var r;e.Db&t?n==null?TEn(e,t):(r=mue(e,t),r==-1?e.Eb=n:Ts(jm(e.Eb),r,n)):n!=null&&KCn(e,t,n)}function q5n(e,t,n,r){var a,o;t.c.length!=0&&(a=FTn(n,r),o=Rkn(t),Is(lV(new bn(null,new kn(o,1)),new a8),new Cat(e,n,a,r)))}function H5n(e,t){var n,r,a,o;return r=e.a.length-1,n=t-e.b&r,o=e.c-t&r,a=e.c-e.b&r,Ert(n=o?(zyn(e,t),-1):($yn(e,t),1)}function XV(e){var t,n,r;if(r=e.Jh(),!r)for(t=0,n=e.Ph();n;n=n.Ph()){if(++t>ohe)return n.Qh();if(r=n.Jh(),r||n==e)break}return r}function Y1t(e,t){var n;return qe(t)===qe(e)?!0:!De(t,21)||(n=l(t,21),n.gc()!=e.gc())?!1:e.Ic(n)}function V5n(e,t){return e.et.e?1:e.ft.f?1:es(e)-es(t)}function QV(e,t){return nr(e),t==null?!1:vn(e,t)?!0:e.length==t.length&&vn(e.toLowerCase(),t.toLowerCase())}function ap(e){var t,n;return iu(e,-129)>0&&iu(e,128)<0?(Zit(),t=Yr(e)+128,n=n_e[t],!n&&(n=n_e[t]=new Or(e)),n):new Or(e)}function Km(){Km=U,c4=new dq(Id,0),bAe=new dq("INSIDE_PORT_SIDE_GROUPS",1),o1e=new dq("GROUP_MODEL_ORDER",2),c1e=new dq($Ee,3)}function U5n(e){var t;return e.b||Run(e,(t=Ffn(e.e,e.a),!t||!vn(Ffe,n1((!t.b&&(t.b=new dh((Tn(),No),Yc,t)),t.b),"qualified")))),e.c}function G5n(e,t){var n,r;for(n=(Xn(t,e.length),e.charCodeAt(t)),r=t+1;r2e3&&(l6t=e,oK=b.setTimeout(Hun,10))),aK++==0?(swn((Xwe(),GSe)),!0):!1}function a6n(e,t,n){var r;(I6t?(u5n(e),!0):O6t||P6t?(Dk(),!0):N6t&&(Dk(),!1))&&(r=new fit(t),r.b=n,g9n(e,r))}function Jce(e,t){var n;n=!e.A.Hc((mh(),Cv))||e.q==(Ra(),Mu),e.u.Hc((Rl(),vp))?n?YDn(e,t):Vvt(e,t):e.u.Hc(Yb)&&(n?pDn(e,t):swt(e,t))}function tdt(e){var t;qe(at(e,(pi(),n7)))===qe((rp(),oY))&&(ds(e)?(t=l(at(ds(e),n7),346),Hi(e,n7,t)):Hi(e,n7,DM))}function o6n(e){var t,n;return ns(e.d.i,(Nt(),HT))?(t=l(Q(e.c.i,HT),17),n=l(Q(e.d.i,HT),17),ru(t.a,n.a)>0):!1}function ndt(e,t,n){return new ef(b.Math.min(e.a,t.a)-n/2,b.Math.min(e.b,t.b)-n/2,b.Math.abs(e.a-t.a)+n,b.Math.abs(e.b-t.b)+n)}function rdt(e){var t;this.d=new bt,this.j=new qa,this.g=new qa,t=e.g.b,this.f=l(Q(eo(t),(Nt(),Rh)),88),this.e=ze(Ge(tU(t,y4)))}function idt(e){this.d=new bt,this.e=new e2,this.c=We(Vr,di,28,(Ct(),he(le(Oo,1),au,64,0,[Pc,Qn,ar,Dr,er])).length,15,1),this.b=e}function G8e(e,t,n){var r;switch(r=n[e.g][t],e.g){case 1:case 3:return new lt(0,r);case 2:case 4:return new lt(r,0);default:return null}}function sdt(e,t,n){var r,a;a=l(GO(t.f),205);try{a.rf(e,n),lat(t.f,a)}catch(o){throw o=bs(o),De(o,103)?(r=o,ue(r)):ue(o)}}function adt(e,t,n){var r,a,o,f,g,w;return r=null,g=Fke(hE(),t),o=null,g&&(a=null,w=Pke(g,n),f=null,w!=null&&(f=e.qf(g,w)),a=f,o=a),r=o,r}function Zce(e,t,n,r){var a;if(a=e.length,t>=a)return a;for(t=t>0?t:0;tr&&Ts(t,r,null),t}function odt(e,t){var n,r;for(r=e.a.length,t.lengthr&&Ts(t,r,null),t}function PE(e,t){var n,r;if(++e.j,t!=null&&(n=(r=e.a.Cb,De(r,99)?l(r,99).th():null),fEn(t,n))){px(e.a,4,n);return}px(e.a,4,l(t,129))}function c6n(e){var t;if(e==null)return null;if(t=dTn(Tu(e,!0)),t==null)throw ue(new Jie("Invalid hexBinary value: '"+e+"'"));return t}function JV(e,t,n){var r;t.a.length>0&&(vt(e.b,new Ait(t.a,n)),r=t.a.length,0r&&(t.a+=Mnt(We(kf,Ad,28,-r,15,1))))}function cdt(e,t,n){var r,a,o;if(!n[t.d])for(n[t.d]=!0,a=new G(Z5(t));a.a=e.b>>1)for(r=e.c,n=e.b;n>t;--n)r=r.b;else for(r=e.a.a,n=0;n=0?e.Wh(a):que(e,r)):n<0?que(e,r):l(r,69).wk().Bk(e,e.hi(),n)}function fdt(e){var t,n,r;for(r=(!e.o&&(e.o=new xl((su(),Cg),L2,e,0)),e.o),n=r.c.Kc();n.e!=n.i.gc();)t=l(n.Yj(),44),t.md();return iN(r)}function It(e){var t;if(De(e.a,4)){if(t=H8e(e.a),t==null)throw ue(new nc(Nyt+e.b+"'. "+Oyt+(Gg(hF),hF.k)+JCe));return t}else return e.a}function b6n(e,t){var n,r;if(e.j.length!=t.j.length)return!1;for(n=0,r=e.j.length;n=64&&t<128&&(a=Q0(a,l0(1,t-64)));return a}function tU(e,t){var n,r;return r=null,ns(e,(pi(),r9))&&(n=l(Q(e,r9),96),n.pf(t)&&(r=n.of(t))),r==null&&eo(e)&&(r=Q(eo(e),t)),r}function m6n(e,t){var n;return n=l(Q(e,(Nt(),cc)),75),Zse(t,O8t)?n?Ch(n):(n=new bl,rt(e,cc,n)):n&&rt(e,cc,null),n}function IA(){IA=U,X_e=(pi(),_Ne),W0e=oNe,I7t=Z6,Y_e=_2,B7t=(dU(),A_e),P7t=S_e,F7t=M_e,N7t=C_e,O7t=(Lce(),G_e),K0e=L7t,W_e=M7t,vK=D7t}function nU(e){switch(w3e(),this.c=new bt,this.d=e,e.g){case 0:case 2:this.a=_5e(pAe),this.b=gs;break;case 3:case 1:this.a=pAe,this.b=ia}}function v6n(e){var t;U8(l(Q(e,(Nt(),Ms)),101))&&(t=e.b,e2t((Sn(0,t.c.length),l(t.c[0],30))),e2t(l(jt(t,t.c.length-1),30)))}function w6n(e,t){t.Ug("Self-Loop post-processing",1),Is(Fi(Fi(Dc(new bn(null,new kn(e.b,16)),new RZ),new jZ),new $Z),new Ej),t.Vg()}function ddt(e,t,n){var r,a;if(e.c)Uu(e.c,e.c.i+t),Gu(e.c,e.c.j+n);else for(a=new G(e.b);a.a=0&&(n.d=e.t);break;case 3:e.t>=0&&(n.a=e.t)}e.C&&(n.b=e.C.b,n.c=e.C.c)}function OA(){OA=U,vDe=new hO(cCe,0),vde=new hO($he,1),wde=new hO("LINEAR_SEGMENTS",2),rM=new hO("BRANDES_KOEPF",3),iM=new hO(cyt,4)}function NA(){NA=U,uB=new hq(nG,0),bK=new hq(yhe,1),mK=new hq(xhe,2),lB=new hq(khe,3),uB.a=!1,bK.a=!0,mK.a=!1,lB.a=!0}function bx(){bx=U,aB=new lq(nG,0),sB=new lq(yhe,1),oB=new lq(xhe,2),cB=new lq(khe,3),aB.a=!1,sB.a=!0,oB.a=!1,cB.a=!0}function mx(e,t,n,r){var a;return n>=0?e.Sh(t,n,r):(e.Ph()&&(r=(a=e.Fh(),a>=0?e.Ah(r):e.Ph().Th(e,-1-a,null,r))),e.Ch(t,n,r))}function K8e(e,t){switch(t){case 7:!e.e&&(e.e=new Ln(js,e,7,4)),$r(e.e);return;case 8:!e.d&&(e.d=new Ln(js,e,8,5)),$r(e.d);return}N8e(e,t)}function Hi(e,t,n){return n==null?(!e.o&&(e.o=new xl((su(),Cg),L2,e,0)),YV(e.o,t)):(!e.o&&(e.o=new xl((su(),Cg),L2,e,0)),GN(e.o,t,n)),e}function mdt(e,t){Cn();var n,r,a,o;for(n=e,o=t,De(e,21)&&!De(t,21)&&(n=t,o=e),a=n.Kc();a.Ob();)if(r=a.Pb(),o.Hc(r))return!1;return!0}function T6n(e,t,n,r){if(t.an.b)return!0}return!1}function iue(e,t){return Ia(e)?!!r6t[t]:e.Sm?!!e.Sm[t]:fy(e)?!!n6t[t]:hy(e)?!!t6t[t]:!1}function C6n(e){var t;t=e.a;do t=l(xr(new hr(dr(ka(t).a.Kc(),new j))),18).c.i,t.k==(Zn(),Aa)&&e.b.Fc(t);while(t.k==(Zn(),Aa));e.b=lf(e.b)}function vdt(e,t){var n,r,a;for(a=e,r=new hr(dr(ka(t).a.Kc(),new j));jr(r);)n=l(xr(r),18),n.c.i.c&&(a=b.Math.max(a,n.c.i.c.p));return a}function S6n(e,t){var n,r,a;for(a=0,r=l(l($i(e.r,t),21),87).Kc();r.Ob();)n=l(r.Pb(),117),a+=n.d.d+n.b.Mf().b+n.d.a,r.Ob()&&(a+=e.w);return a}function _6n(e,t){var n,r,a;for(a=0,r=l(l($i(e.r,t),21),87).Kc();r.Ob();)n=l(r.Pb(),117),a+=n.d.b+n.b.Mf().a+n.d.c,r.Ob()&&(a+=e.w);return a}function wdt(e){var t,n,r,a;if(r=0,a=Hy(e),a.c.length==0)return 1;for(n=new G(a);n.a=0?e.Lh(f,n,!0):Hw(e,o,n)):l(o,69).wk().yk(e,e.hi(),a,n,r)}function D6n(e,t,n,r){var a,o;o=t.pf((pi(),r7))?l(t.of(r7),21):e.j,a=p4n(o),a!=(YU(),H0e)&&(n&&!$8e(a)||Jxe(gTn(e,a,r),t))}function I6n(e){switch(e.g){case 1:return Pw(),iB;case 3:return Pw(),rB;case 2:return Pw(),U0e;case 4:return Pw(),V0e;default:return null}}function O6n(e,t,n){if(e.e)switch(e.b){case 1:Epn(e.c,t,n);break;case 0:Tpn(e.c,t,n)}else $ct(e.c,t,n);e.a[t.p][n.p]=e.c.i,e.a[n.p][t.p]=e.c.e}function ydt(e){var t,n;if(e==null)return null;for(n=We(wg,dt,199,e.length,0,2),t=0;t=0)return a;if(e.ol()){for(r=0;r=a)throw ue(new my(t,a));if(e.Si()&&(r=e.dd(n),r>=0&&r!=t))throw ue(new Yn(WP));return e.Xi(t,n)}function W8e(e,t){if(this.a=l(Xr(e),253),this.b=l(Xr(t),253),e.Ed(t)>0||e==(Uie(),w0e)||t==(Gie(),y0e))throw ue(new Yn("Invalid range: "+Hct(e,t)))}function xdt(e){var t,n;for(this.b=new bt,this.c=e,this.a=!1,n=new G(e.a);n.a0),(t&-t)==t)return ua(t*Jl(e,31)*4656612873077393e-25);do n=Jl(e,31),r=n%t;while(n-r+(t-1)<0);return ua(r)}function j6n(e,t,n){switch(n.g){case 1:e.a=t.a/2,e.b=0;break;case 2:e.a=t.a,e.b=t.b/2;break;case 3:e.a=t.a/2,e.b=t.b;break;case 4:e.a=0,e.b=t.b/2}}function zN(e,t,n,r){var a,o;for(a=t;a1&&(o=P6n(e,t)),o}function Tdt(e){var t;return t=ze(Ge(at(e,(pi(),QB))))*b.Math.sqrt((!e.a&&(e.a=new nt(Ai,e,10,11)),e.a).i),new lt(t,t/ze(Ge(at(e,sY))))}function aue(e){var t;return e.f&&e.f.Vh()&&(t=l(e.f,54),e.f=l(yb(e,t),84),e.f!=t&&e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,9,8,t,e.f))),e.f}function oue(e){var t;return e.i&&e.i.Vh()&&(t=l(e.i,54),e.i=l(yb(e,t),84),e.i!=t&&e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,9,7,t,e.i))),e.i}function Ro(e){var t;return e.b&&e.b.Db&64&&(t=e.b,e.b=l(yb(e,t),19),e.b!=t&&e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,9,21,t,e.b))),e.b}function oU(e,t){var n,r,a;e.d==null?(++e.e,++e.f):(r=t.Bi(),cCn(e,e.f+1),a=(r&Ii)%e.d.length,n=e.d[a],!n&&(n=e.d[a]=e.dk()),n.Fc(t),++e.f)}function Q8e(e,t,n){var r;return t.tk()?!1:t.Ik()!=-2?(r=t.ik(),r==null?n==null:Pi(r,n)):t.qk()==e.e.Dh()&&n==null}function cU(){var e;Mh(16,Pwt),e=cft(16),this.b=We(k0e,TP,303,e,0,1),this.c=We(k0e,TP,303,e,0,1),this.a=null,this.e=null,this.i=0,this.f=e-1,this.g=0}function op(e){r4e.call(this),this.k=(Zn(),Ps),this.j=(Mh(6,Yy),new Bu(6)),this.b=(Mh(2,Yy),new Bu(2)),this.d=new $ie,this.f=new Rwe,this.a=e}function z6n(e){var t,n;e.c.length<=1||(t=Abt(e,(Ct(),Dr)),ppt(e,l(t.a,17).a,l(t.b,17).a),n=Abt(e,er),ppt(e,l(n.a,17).a,l(n.b,17).a))}function q6n(e,t,n){var r,a;for(a=e.a.b,r=a.c.length;r102?-1:e<=57?e-48:e<65?-1:e<=70?e-65+10:e<97?-1:e-97+10}function fue(e,t){if(e==null)throw ue(new D8("null key in entry: null="+t));if(t==null)throw ue(new D8("null value in entry: "+e+"=null"))}function U6n(e,t){for(var n,r;e.Ob();)if(!t.Ob()||(n=e.Pb(),r=t.Pb(),!(qe(n)===qe(r)||n!=null&&Pi(n,r))))return!1;return!t.Ob()}function _dt(e,t){var n;return n=he(le(Na,1),Zo,28,15,[Dce(e.a[0],t),Dce(e.a[1],t),Dce(e.a[2],t)]),e.d&&(n[0]=b.Math.max(n[0],n[2]),n[2]=n[0]),n}function Adt(e,t){var n;return n=he(le(Na,1),Zo,28,15,[BV(e.a[0],t),BV(e.a[1],t),BV(e.a[2],t)]),e.d&&(n[0]=b.Math.max(n[0],n[2]),n[2]=n[0]),n}function Z8e(e,t,n){U8(l(Q(t,(Nt(),Ms)),101))||(d6e(e,t,d2(t,n)),d6e(e,t,d2(t,(Ct(),Dr))),d6e(e,t,d2(t,Qn)),Cn(),Vs(t.j,new IYe(e)))}function Ldt(e){var t,n;for(e.c||lMn(e),n=new bl,t=new G(e.a),re(t);t.a0&&(Xn(0,t.length),t.charCodeAt(0)==43)?(Xn(1,t.length+1),t.substr(1)):t))}function s7n(e){var t;return e==null?null:new ob((t=Tu(e,!0),t.length>0&&(Xn(0,t.length),t.charCodeAt(0)==43)?(Xn(1,t.length+1),t.substr(1)):t))}function txe(e,t,n,r,a,o,f,g){var w,E;r&&(w=r.a[0],w&&txe(e,t,n,w,a,o,f,g),xue(e,n,r.d,a,o,f,g)&&t.Fc(r),E=r.a[1],E&&txe(e,t,n,E,a,o,f,g))}function r6(e,t,n){try{return cw(nce(e,t,n),1)}catch(r){throw r=bs(r),De(r,333)?ue(new tc(Ehe+e.o+"*"+e.p+The+t+Co+n+Che)):ue(r)}}function Ndt(e,t,n){try{return cw(nce(e,t,n),0)}catch(r){throw r=bs(r),De(r,333)?ue(new tc(Ehe+e.o+"*"+e.p+The+t+Co+n+Che)):ue(r)}}function Pdt(e,t,n){try{return cw(nce(e,t,n),2)}catch(r){throw r=bs(r),De(r,333)?ue(new tc(Ehe+e.o+"*"+e.p+The+t+Co+n+Che)):ue(r)}}function Bdt(e,t){if(e.g==-1)throw ue(new pl);e.Xj();try{e.d.hd(e.g,t),e.f=e.d.j}catch(n){throw n=bs(n),De(n,77)?ue(new Xh):ue(n)}}function a7n(e){var t,n,r,a,o;for(r=new G(e.b);r.ao&&Ts(t,o,null),t}function o7n(e,t){var n,r;if(r=e.gc(),t==null){for(n=0;n0&&(w+=a),E[C]=f,f+=g*(w+r)}function Rdt(e){var t,n,r;for(r=e.f,e.n=We(Na,Zo,28,r,15,1),e.d=We(Na,Zo,28,r,15,1),t=0;t0?e.c:0),++a;e.b=r,e.d=o}function Hdt(e,t){var n;return n=he(le(Na,1),Zo,28,15,[X8e(e,(t1(),Gc),t),X8e(e,$u,t),X8e(e,Kc,t)]),e.f&&(n[0]=b.Math.max(n[0],n[2]),n[2]=n[0]),n}function p7n(e,t,n){var r;try{FU(e,t+e.j,n+e.k,!1,!0)}catch(a){throw a=bs(a),De(a,77)?(r=a,ue(new tc(r.g+iG+t+Co+n+")."))):ue(a)}}function b7n(e,t,n){var r;try{FU(e,t+e.j,n+e.k,!0,!1)}catch(a){throw a=bs(a),De(a,77)?(r=a,ue(new tc(r.g+iG+t+Co+n+")."))):ue(a)}}function Vdt(e){var t;ns(e,(Nt(),d3))&&(t=l(Q(e,d3),21),t.Hc((qy(),E0))?(t.Mc(E0),t.Fc(T0)):t.Hc(T0)&&(t.Mc(T0),t.Fc(E0)))}function Udt(e){var t;ns(e,(Nt(),d3))&&(t=l(Q(e,d3),21),t.Hc((qy(),S0))?(t.Mc(S0),t.Fc(qf)):t.Hc(qf)&&(t.Mc(qf),t.Fc(S0)))}function vue(e,t,n,r){var a,o,f,g;return e.a==null&&v9n(e,t),f=t.b.j.c.length,o=n.d.p,g=r.d.p,a=g-1,a<0&&(a=f-1),o<=a?e.a[a]-e.a[o]:e.a[f-1]-e.a[o]+e.a[a]}function m7n(e){var t,n;if(!e.b)for(e.b=$H(l(e.f,27).kh().i),n=new or(l(e.f,27).kh());n.e!=n.i.gc();)t=l(gr(n),135),vt(e.b,new Yie(t));return e.b}function v7n(e){var t,n;if(!e.e)for(e.e=$H(Xae(l(e.f,27)).i),n=new or(Xae(l(e.f,27)));n.e!=n.i.gc();)t=l(gr(n),123),vt(e.e,new BXe(t));return e.e}function Gdt(e){var t,n;if(!e.a)for(e.a=$H(AH(l(e.f,27)).i),n=new or(AH(l(e.f,27)));n.e!=n.i.gc();)t=l(gr(n),27),vt(e.a,new rae(e,t));return e.a}function zw(e){var t;if(!e.C&&(e.D!=null||e.B!=null))if(t=sDn(e),t)e.hl(t);else try{e.hl(null)}catch(n){if(n=bs(n),!De(n,63))throw ue(n)}return e.C}function w7n(e){switch(e.q.g){case 5:bgt(e,(Ct(),Qn)),bgt(e,Dr);break;case 4:vvt(e,(Ct(),Qn)),vvt(e,Dr);break;default:xpt(e,(Ct(),Qn)),xpt(e,Dr)}}function y7n(e){switch(e.q.g){case 5:mgt(e,(Ct(),ar)),mgt(e,er);break;case 4:wvt(e,(Ct(),ar)),wvt(e,er);break;default:kpt(e,(Ct(),ar)),kpt(e,er)}}function i6(e,t){var n,r,a;for(a=new qa,r=e.Kc();r.Ob();)n=l(r.Pb(),36),KE(n,a.a,0),a.a+=n.f.a+t,a.b=b.Math.max(a.b,n.f.b);return a.b>0&&(a.b+=t),a}function hU(e,t){var n,r,a;for(a=new qa,r=e.Kc();r.Ob();)n=l(r.Pb(),36),KE(n,0,a.b),a.b+=n.f.b+t,a.a=b.Math.max(a.a,n.f.a);return a.a>0&&(a.a+=t),a}function Kdt(e){var t,n,r;for(r=Ii,n=new G(e.a);n.a>16==6?e.Cb.Th(e,5,u1,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||e.ii()),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function x7n(e){Xk();var t=e.e;if(t&&t.stack){var n=t.stack,r=t+` `;return n.substring(0,r.length)==r&&(n=n.substring(r.length)),n.split(` -`)}return[]}function F1n(t){var e;return e=(sne(),jge),e[t>>>28]|e[t>>24&15]<<4|e[t>>20&15]<<8|e[t>>16&15]<<12|e[t>>12&15]<<16|e[t>>8&15]<<20|e[t>>4&15]<<24|e[t&15]<<28}function Gse(t){var e,n,r;t.b==t.c&&(r=t.a.length,n=Dyt(b.Math.max(8,r))<<1,t.b!=0?(e=ff(t.a,n),dne(t,e,r),t.a=e,t.b=0):fqt(t.a,n),t.c=r)}function N1n(t,e){var n;return n=t.b,n.Xe((ui(),dl))?n.Hf()==(ve(),Bn)?-n.rf().a-Xt(ye(n.We(dl))):e+Xt(ye(n.We(dl))):n.Hf()==(ve(),Bn)?-n.rf().a:e}function rI(t){var e;return t.b.c.length!=0&&u(Ne(t.b,0),70).a?u(Ne(t.b,0),70).a:(e=grt(t),e??""+(t.c?Ro(t.c.a,t,0):-1))}function iq(t){var e;return t.f.c.length!=0&&u(Ne(t.f,0),70).a?u(Ne(t.f,0),70).a:(e=grt(t),e??""+(t.i?Ro(t.i.j,t,0):-1))}function B1n(t,e){var n,r;if(e<0||e>=t.gc())return null;for(n=e;n0?t.c:0),s=b.Math.max(s,e.d),++r;t.e=o,t.b=s}function j1n(t){var e,n;if(!t.b)for(t.b=D$(u(t.f,118).Ag().i),n=new nr(u(t.f,118).Ag());n.e!=n.i.gc();)e=u(dr(n),137),le(t.b,new get(e));return t.b}function $1n(t,e){var n,r,s;if(e.dc())return y8(),y8(),pP;for(n=new YWt(t,e.gc()),s=new nr(t);s.e!=s.i.gc();)r=dr(s),e.Hc(r)&&Dr(n,r);return n}function Z3t(t,e,n,r){return e==0?r?(!t.o&&(t.o=new _l((Jc(),Sb),Hv,t,0)),t.o):(!t.o&&(t.o=new _l((Jc(),Sb),Hv,t,0)),wD(t.o)):Xz(t,e,n,r)}function Mst(t){var e,n;if(t.rb)for(e=0,n=t.rb.i;e>22),s+=r>>22,s<0)?!1:(t.l=n&hl,t.m=r&hl,t.h=s&Z0,!0)}function V1n(t,e,n,r,s,o,h){var d,v;return!(e.Ae()&&(v=t.a.ue(n,r),v<0||!s&&v==0)||e.Be()&&(d=t.a.ue(n,o),d>0||!h&&d==0))}function G1n(t,e){oE();var n;if(n=t.j.g-e.j.g,n!=0)return 0;switch(t.j.g){case 2:return Jit(e,_Tt)-Jit(t,_Tt);case 4:return Jit(t,CTt)-Jit(e,CTt)}return 0}function U1n(t){switch(t.g){case 0:return Olt;case 1:return Plt;case 2:return Flt;case 3:return Nlt;case 4:return UV;case 5:return Blt;default:return null}}function _o(t,e,n){var r,s;return r=(s=new set,b2(s,e),Qc(s,n),Dr((!t.c&&(t.c=new fe(Vv,t,12,10)),t.c),s),s),Rg(r,0),ry(r,1),qg(r,!0),zg(r,!0),r}function l6(t,e){var n,r;if(e>=t.i)throw it(new nnt(e,t.i));return++t.j,n=t.g[e],r=t.i-e-1,r>0&&Dc(t.g,e+1,t.g,e,r),ts(t.g,--t.i,null),t.fi(e,n),t.ci(),n}function Use(t,e){var n,r;return t.Db>>16==17?t.Cb.ih(t,21,Uh,e):(r=no(u(yn((n=u(Dn(t,16),26),n||t.zh()),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function W1n(t){var e,n,r,s;for(wn(),Zs(t.c,t.a),s=new S(t.c);s.an.a.c.length))throw it(new Fn("index must be >= 0 and <= layer node count"));t.c&&mu(t.c.a,t),t.c=n,n&&Hm(n.a,e,t)}function Qse(t,e){var n,r,s;for(r=new ar(lr(U0(t).a.Kc(),new z));zr(r);)return n=u(Mr(r),17),s=u(e.Kb(n),10),new Wk(Lr(s.n.b+s.o.b/2));return PC(),PC(),Cut}function Zse(t,e){this.c=new _r,this.a=t,this.b=e,this.d=u(Q(t,(ae(),Q4)),304),Vt(Q(t,(Te(),h9t)))===Vt((xD(),WV))?this.e=new Lqt:this.e=new Aqt}function J1n(t,e){var n,r,s,o;for(o=0,r=new S(t);r.a>16==6?t.Cb.ih(t,6,Ys,e):(r=no(u(yn((n=u(Dn(t,16),26),n||(Jc(),aU)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function i4t(t,e){var n,r;return t.Db>>16==7?t.Cb.ih(t,1,lP,e):(r=no(u(yn((n=u(Dn(t,16),26),n||(Jc(),GAt)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function s4t(t,e){var n,r;return t.Db>>16==9?t.Cb.ih(t,9,rs,e):(r=no(u(yn((n=u(Dn(t,16),26),n||(Jc(),WAt)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function tae(t,e){var n,r;return t.Db>>16==5?t.Cb.ih(t,9,pU,e):(r=no(u(yn((n=u(Dn(t,16),26),n||(dn(),op)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function a4t(t,e){var n,r;return t.Db>>16==3?t.Cb.ih(t,0,fP,e):(r=no(u(yn((n=u(Dn(t,16),26),n||(dn(),ap)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function eae(t,e){var n,r;return t.Db>>16==7?t.Cb.ih(t,6,i1,e):(r=no(u(yn((n=u(Dn(t,16),26),n||(dn(),up)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function nae(){this.a=new oB,this.g=new tq,this.j=new tq,this.b=new _r,this.d=new tq,this.i=new tq,this.k=new _r,this.c=new _r,this.e=new _r,this.f=new _r}function rdn(t,e,n){var r,s,o;for(n<0&&(n=0),o=t.i,s=n;svot)return vE(t,r);if(r==t)return!0}}return!1}function sdn(t){switch(Cj(),t.q.g){case 5:$oe(t,(ve(),Pn)),$oe(t,mr);break;case 4:Fce(t,(ve(),Pn)),Fce(t,mr);break;default:Fhe(t,(ve(),Pn)),Fhe(t,mr)}}function adn(t){switch(Cj(),t.q.g){case 5:ece(t,(ve(),Hn)),ece(t,Bn);break;case 4:fse(t,(ve(),Hn)),fse(t,Bn);break;default:Nhe(t,(ve(),Hn)),Nhe(t,Bn)}}function odn(t){var e,n;e=u(Q(t,(Jf(),ybe)),19),e?(n=e.a,n==0?Jt(t,(Yp(),wV),new Zit):Jt(t,(Yp(),wV),new F$(n))):Jt(t,(Yp(),wV),new F$(1))}function cdn(t,e){var n;switch(n=t.i,e.g){case 1:return-(t.n.b+t.o.b);case 2:return t.n.a-n.o.a;case 3:return t.n.b-n.o.b;case 4:return-(t.n.a+t.o.a)}return 0}function udn(t,e){switch(t.g){case 0:return e==(dh(),bb)?BV:RV;case 1:return e==(dh(),bb)?BV:kO;case 2:return e==(dh(),bb)?kO:RV;default:return kO}}function sI(t,e){var n,r,s;for(mu(t.a,e),t.e-=e.r+(t.a.c.length==0?0:t.c),s=Ukt,r=new S(t.a);r.a>16==3?t.Cb.ih(t,12,rs,e):(r=no(u(yn((n=u(Dn(t,16),26),n||(Jc(),VAt)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function c4t(t,e){var n,r;return t.Db>>16==11?t.Cb.ih(t,10,rs,e):(r=no(u(yn((n=u(Dn(t,16),26),n||(Jc(),UAt)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function rae(t,e){var n,r;return t.Db>>16==10?t.Cb.ih(t,11,Uh,e):(r=no(u(yn((n=u(Dn(t,16),26),n||(dn(),cp)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function iae(t,e){var n,r;return t.Db>>16==10?t.Cb.ih(t,12,Wh,e):(r=no(u(yn((n=u(Dn(t,16),26),n||(dn(),i3)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Dh(t){var e;return!(t.Bb&1)&&t.r&&t.r.kh()&&(e=u(t.r,49),t.r=u(Zp(t,e),138),t.r!=e&&t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,9,8,e,t.r))),t.r}function Ist(t,e,n){var r;return r=lt(ct(aa,1),vo,25,15,[O4t(t,(Kf(),sc),e,n),O4t(t,eu,e,n),O4t(t,ac,e,n)]),t.f&&(r[0]=b.Math.max(r[0],r[2]),r[2]=r[0]),r}function ldn(t,e){var n,r,s;if(s=i1n(t,e),s.c.length!=0)for(Zs(s,new WK),n=s.c.length,r=0;r>19,k=e.h>>19,v!=k?k-v:(s=t.h,d=e.h,s!=d?s-d:(r=t.m,h=e.m,r!=h?r-h:(n=t.l,o=e.l,n-o)))}function sq(){sq=Z,XEt=(Cq(),Vut),KEt=new mn(Qxt,XEt),YEt=(Q$(),Hut),WEt=new mn(Zxt,YEt),UEt=(Gz(),qut),GEt=new mn(Jxt,UEt),VEt=new mn(t6t,(Nn(),!0))}function h_(t,e,n){var r,s;r=e*n,_t(t.g,145)?(s=Xx(t),s.f.d?s.f.a||(t.d.a+=r+B1):(t.d.d-=r+B1,t.d.a+=r+B1)):_t(t.g,10)&&(t.d.d-=r,t.d.a+=2*r)}function sae(t,e,n){var r,s,o,h,d;for(s=t[n.g],d=new S(e.d);d.a0?t.g:0),++n;e.b=r,e.e=s}function aae(t){var e,n,r;if(r=t.b,AVt(t.i,r.length)){for(n=r.length*2,t.b=Nt(Lut,PI,317,n,0,1),t.c=Nt(Lut,PI,317,n,0,1),t.f=n-1,t.i=0,e=t.a;e;e=e.c)fI(t,e,e);++t.g}}function vdn(t,e,n,r){var s,o,h,d;for(s=0;sh&&(d=h/r),s>o&&(v=o/s),fd(t,b.Math.min(d,v)),t}function ydn(){Dq();var t,e;try{if(e=u(m4t((Pp(),Yh),ZE),2014),e)return e}catch(n){if(n=Wi(n),_t(n,102))t=n,avt((Pr(),t));else throw it(n)}return new ax}function xdn(){Qte();var t,e;try{if(e=u(m4t((Pp(),Yh),O2),2024),e)return e}catch(n){if(n=Wi(n),_t(n,102))t=n,avt((Pr(),t));else throw it(n)}return new _m}function kdn(){Dq();var t,e;try{if(e=u(m4t((Pp(),Yh),Bh),1941),e)return e}catch(n){if(n=Wi(n),_t(n,102))t=n,avt((Pr(),t));else throw it(n)}return new aJ}function Edn(t,e,n){var r,s;return s=t.e,t.e=e,t.Db&4&&!(t.Db&1)&&(r=new Js(t,1,4,s,e),n?n.Ei(r):n=r),s!=e&&(e?n=PE(t,vq(t,e),n):n=PE(t,t.a,n)),n}function oae(){BR.call(this),this.e=-1,this.a=!1,this.p=Sa,this.k=-1,this.c=-1,this.b=-1,this.g=!1,this.f=-1,this.j=-1,this.n=-1,this.i=-1,this.d=-1,this.o=Sa}function Tdn(t,e){var n,r,s;if(r=t.b.d.d,t.a||(r+=t.b.d.a),s=e.b.d.d,e.a||(s+=e.b.d.a),n=Ms(r,s),n==0){if(!t.a&&e.a)return-1;if(!e.a&&t.a)return 1}return n}function Cdn(t,e){var n,r,s;if(r=t.b.b.d,t.a||(r+=t.b.b.a),s=e.b.b.d,e.a||(s+=e.b.b.a),n=Ms(r,s),n==0){if(!t.a&&e.a)return-1;if(!e.a&&t.a)return 1}return n}function _dn(t,e){var n,r,s;if(r=t.b.g.d,t.a||(r+=t.b.g.a),s=e.b.g.d,e.a||(s+=e.b.g.a),n=Ms(r,s),n==0){if(!t.a&&e.a)return-1;if(!e.a&&t.a)return 1}return n}function l4t(){l4t=Z,Pbe=Ku(bi(bi(bi(new Vs,(Wa(),qc),(ro(),hTt)),qc,fTt),Io,dTt),Io,tTt),Nbe=bi(bi(new Vs,qc,W7t),qc,eTt),Fbe=Ku(new Vs,Io,rTt)}function Sdn(t){var e,n,r,s,o;for(e=u(Q(t,(ae(),kS)),83),o=t.n,r=e.Cc().Kc();r.Ob();)n=u(r.Pb(),306),s=n.i,s.c+=o.a,s.d+=o.b,n.c?Eue(n):Tue(n);Jt(t,kS,null)}function Adn(t,e,n){var r,s;switch(s=t.b,r=s.d,e.g){case 1:return-r.d-n;case 2:return s.o.a+r.c+n;case 3:return s.o.b+r.a+n;case 4:return-r.b-n;default:return-1}}function Ldn(t){var e,n,r,s,o;if(r=0,s=VE,t.b)for(e=0;e<360;e++)n=e*.017453292519943295,txt(t,t.d,0,0,O4,n),o=t.b.ig(t.d),o0&&(h=(o&wi)%t.d.length,s=l5t(t,h,o,e),s)?(d=s.ed(n),d):(r=t.tj(o,e,n),t.c.Fc(r),null)}function d4t(t,e){var n,r,s,o;switch($g(t,e)._k()){case 3:case 2:{for(n=T4(e),s=0,o=n.i;s=0;r--)if(hn(t[r].d,e)||hn(t[r].d,n)){t.length>=r+1&&t.splice(0,r+1);break}return t}function aI(t,e){var n;return Bo(t)&&Bo(e)&&(n=t/e,BI0&&(t.b+=2,t.a+=r):(t.b+=1,t.a+=b.Math.min(r,s))}function gae(t,e){var n,r;if(r=!1,ra(e)&&(r=!0,Vx(t,new Um(Br(e)))),r||_t(e,236)&&(r=!0,Vx(t,(n=mwt(u(e,236)),new EC(n)))),!r)throw it(new fet(A8t))}function Wdn(t,e,n,r){var s,o,h;return s=new z0(t.e,1,10,(h=e.c,_t(h,88)?u(h,26):(dn(),Kh)),(o=n.c,_t(o,88)?u(o,26):(dn(),Kh)),Hg(t,e),!1),r?r.Ei(s):r=s,r}function b4t(t){var e,n;switch(u(Q(Na(t),(Te(),r9t)),420).g){case 0:return e=t.n,n=t.o,new $e(e.a+n.a/2,e.b+n.b/2);case 1:return new xo(t.n);default:return null}}function oI(){oI=Z,YV=new t9(J0,0),qTt=new t9("LEFTUP",1),VTt=new t9("RIGHTUP",2),zTt=new t9("LEFTDOWN",3),HTt=new t9("RIGHTDOWN",4),Rlt=new t9("BALANCED",5)}function Ydn(t,e,n){var r,s,o;if(r=Ms(t.a[e.p],t.a[n.p]),r==0){if(s=u(Q(e,(ae(),R6)),15),o=u(Q(n,R6),15),s.Hc(n))return-1;if(o.Hc(e))return 1}return r}function Kdn(t){switch(t.g){case 1:return new hZ;case 2:return new fZ;case 3:return new lZ;case 0:return null;default:throw it(new Fn(Ict+(t.f!=null?t.f:""+t.g)))}}function w4t(t,e,n){switch(e){case 1:!t.n&&(t.n=new fe(qo,t,1,7)),xr(t.n),!t.n&&(t.n=new fe(qo,t,1,7)),is(t.n,u(n,14));return;case 2:G9(t,Br(n));return}Byt(t,e,n)}function v4t(t,e,n){switch(e){case 3:Jw(t,Xt(ye(n)));return;case 4:tv(t,Xt(ye(n)));return;case 5:ku(t,Xt(ye(n)));return;case 6:Eu(t,Xt(ye(n)));return}w4t(t,e,n)}function oq(t,e,n){var r,s,o;o=(r=new set,r),s=F1(o,e,null),s&&s.Fi(),Qc(o,n),Dr((!t.c&&(t.c=new fe(Vv,t,12,10)),t.c),o),Rg(o,0),ry(o,1),qg(o,!0),zg(o,!0)}function m4t(t,e){var n,r,s;return n=KC(t.g,e),_t(n,235)?(s=u(n,235),s.Qh()==null,s.Nh()):_t(n,498)?(r=u(n,1938),s=r.b,s):null}function Xdn(t,e,n,r){var s,o;return Lr(e),Lr(n),o=u(x9(t.d,e),19),nee(!!o,"Row %s not in %s",e,t.e),s=u(x9(t.b,n),19),nee(!!s,"Column %s not in %s",n,t.c),ore(t,o.a,s.a,r)}function pae(t,e,n,r,s,o,h){var d,v,k,C,M;if(C=s[o],k=o==h-1,d=k?r:0,M=Nse(d,C),r!=10&<(ct(t,h-o),e[o],n[o],d,M),!k)for(++o,v=0;v1||d==-1?(o=u(v,15),s.Wb(rfn(t,o))):s.Wb(yat(t,u(v,56)))))}function r0n(t,e,n,r){nVt();var s=Tut;function o(){for(var h=0;hLct)return n;s>-1e-6&&++n}return n}function k4t(t,e){var n;e!=t.b?(n=null,t.b&&(n=m$(t.b,t,-4,n)),e&&(n=c6(e,t,-4,n)),n=Qre(t,e,n),n&&n.Fi()):t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,3,e,e))}function vae(t,e){var n;e!=t.f?(n=null,t.f&&(n=m$(t.f,t,-1,n)),e&&(n=c6(e,t,-1,n)),n=Zre(t,e,n),n&&n.Fi()):t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,0,e,e))}function mae(t){var e,n,r;if(t==null)return null;if(n=u(t,15),n.dc())return"";for(r=new Ag,e=n.Kc();e.Ob();)go(r,(Ii(),Br(e.Pb()))),r.a+=" ";return int(r,r.a.length-1)}function yae(t){var e,n,r;if(t==null)return null;if(n=u(t,15),n.dc())return"";for(r=new Ag,e=n.Kc();e.Ob();)go(r,(Ii(),Br(e.Pb()))),r.a+=" ";return int(r,r.a.length-1)}function h0n(t,e,n){var r,s;return r=t.c[e.c.p][e.p],s=t.c[n.c.p][n.p],r.a!=null&&s.a!=null?Unt(r.a,s.a):r.a!=null?-1:s.a!=null?1:0}function f0n(t,e){var n,r,s,o,h,d;if(e)for(o=e.a.length,n=new e2(o),d=(n.b-n.a)*n.c<0?(Fp(),Ib):new jp(n);d.Ob();)h=u(d.Pb(),19),s=P8(e,h.a),r=new xzt(t),ern(r.a,s)}function d0n(t,e){var n,r,s,o,h,d;if(e)for(o=e.a.length,n=new e2(o),d=(n.b-n.a)*n.c<0?(Fp(),Ib):new jp(n);d.Ob();)h=u(d.Pb(),19),s=P8(e,h.a),r=new fzt(t),trn(r.a,s)}function g0n(t){var e;if(t!=null&&t.length>0&&wa(t,t.length-1)==33)try{return e=woe(Pl(t,0,t.length-1)),e.e==null}catch(n){if(n=Wi(n),!_t(n,32))throw it(n)}return!1}function xae(t,e,n){var r,s,o;return r=e.ak(),o=e.dd(),s=r.$j()?Gp(t,3,r,null,o,DE(t,r,o,_t(r,99)&&(u(r,18).Bb&Ka)!=0),!0):Gp(t,1,r,r.zj(),o,-1,!0),n?n.Ei(s):n=s,n}function p0n(){var t,e,n;for(e=0,t=0;t<1;t++){if(n=g5t((Rr(t,1),"X".charCodeAt(t))),n==0)throw it(new Nr("Unknown Option: "+"X".substr(t)));e|=n}return e}function b0n(t,e,n){var r,s,o;switch(r=Na(e),s=Pz(r),o=new Mc,Uo(o,e),n.g){case 1:Bs(o,YD(a6(s)));break;case 2:Bs(o,a6(s))}return Jt(o,(Te(),Vy),ye(Q(t,Vy))),o}function E4t(t){var e,n;return e=u(Mr(new ar(lr(jo(t.a).a.Kc(),new z))),17),n=u(Mr(new ar(lr(Ds(t.a).a.Kc(),new z))),17),je(Re(Q(e,(ae(),q1))))||je(Re(Q(n,q1)))}function b4(){b4=Z,$V=new SM("ONE_SIDE",0),qV=new SM("TWO_SIDES_CORNER",1),HV=new SM("TWO_SIDES_OPPOSING",2),zV=new SM("THREE_SIDES",3),jV=new SM("FOUR_SIDES",4)}function Nst(t,e,n,r,s){var o,h;o=u(Bl(Ri(e.Oc(),new VX),c2(new ke,new ce,new Xn,lt(ct(fl,1),oe,132,0,[(O1(),Ul)]))),15),h=u(h2(t.b,n,r),15),s==0?h.Wc(0,o):h.Gc(o)}function w0n(t,e){var n,r,s,o,h;for(o=new S(e.a);o.a0&&Wse(this,this.c-1,(ve(),Hn)),this.c0&&t[0].length>0&&(this.c=je(Re(Q(Na(t[0][0]),(ae(),sCt))))),this.a=Nt(Tme,ee,2018,t.length,0,2),this.b=Nt(Cme,ee,2019,t.length,0,2),this.d=new Vre}function k0n(t){return t.c.length==0?!1:(An(0,t.c.length),u(t.c[0],17)).c.i.k==(Vn(),ta)?!0:N8(wu(new Tn(null,new _n(t,16)),new mQ),new yQ)}function E0n(t,e,n){return vr(n,"Tree layout",1),L$(t.b),Kd(t.b,(wE(),AG),AG),Kd(t.b,RS,RS),Kd(t.b,$O,$O),Kd(t.b,jS,jS),t.a=Fq(t.b,e),Zwn(t,e,Rc(n,1)),or(n),e}function Eae(t,e){var n,r,s,o,h,d,v;for(d=wy(e),o=e.f,v=e.g,h=b.Math.sqrt(o*o+v*v),s=0,r=new S(d);r.a=0?(n=aI(t,Gq),r=QD(t,Gq)):(e=Vm(t,1),n=aI(e,5e8),r=QD(e,5e8),r=Pa(F0(r,1),Ns(t,1))),S1(F0(r,32),Ns(n,co))}function _ae(t,e,n){var r,s;switch(r=(Zn(e.b!=0),u(lh(e,e.a.a),8)),n.g){case 0:r.b=0;break;case 2:r.b=t.f;break;case 3:r.a=0;break;default:r.a=t.g}return s=ei(e,0),eD(s,r),e}function Sae(t,e,n,r){var s,o,h,d,v;switch(v=t.b,o=e.d,h=o.j,d=B3t(h,v.d[h.g],n),s=Li(nc(o.n),o.a),o.j.g){case 1:case 3:d.a+=s.a;break;case 2:case 4:d.b+=s.b}fs(r,d,r.c.b,r.c)}function F0n(t,e,n){var r,s,o,h;for(h=Ro(t.e,e,0),o=new zpt,o.b=n,r=new da(t.e,h);r.b1;e>>=1)e&1&&(r=e4(r,n)),n.d==1?n=e4(n,n):n=new Qie(ale(n.a,n.d,Nt(Cr,Xr,25,n.d<<1,15,1)));return r=e4(r,n),r}function M4t(){M4t=Z;var t,e,n,r;for(DEt=Nt(aa,vo,25,25,15,1),IEt=Nt(aa,vo,25,33,15,1),r=152587890625e-16,e=32;e>=0;e--)IEt[e]=r,r*=.5;for(n=1,t=24;t>=0;t--)DEt[t]=n,n*=.5}function z0n(t){var e,n;if(je(Re(qe(t,(Te(),Hy))))){for(n=new ar(lr(K0(t).a.Kc(),new z));zr(n);)if(e=u(Mr(n),79),fv(e)&&je(Re(qe(e,j2))))return!0}return!1}function Aae(t,e){var n,r,s;Fs(t.f,e)&&(e.b=t,r=e.c,Ro(t.j,r,0)!=-1||le(t.j,r),s=e.d,Ro(t.j,s,0)!=-1||le(t.j,s),n=e.a.b,n.c.length!=0&&(!t.i&&(t.i=new ase(t)),run(t.i,n)))}function q0n(t){var e,n,r,s,o;return n=t.c.d,r=n.j,s=t.d.d,o=s.j,r==o?n.p=0&&hn(t.substr(e,3),"GMT")||e>=0&&hn(t.substr(e,3),"UTC"))&&(n[0]=e+3),rxt(t,n,r)}function V0n(t,e){var n,r,s,o,h;for(o=t.g.a,h=t.g.b,r=new S(t.d);r.an;o--)t[o]|=e[o-n-1]>>>h,t[o-1]=e[o-n-1]<=t.f)break;o.c[o.c.length]=n}return o}function I4t(t){var e,n,r,s;for(e=null,s=new S(t.wf());s.a0&&Dc(t.g,e,t.g,e+r,d),h=n.Kc(),t.i+=r,s=0;so&&ann(k,Tee(n[d],LEt))&&(s=d,o=v);return s>=0&&(r[0]=e+o),s}function Q0n(t,e){var n;if(n=xUt(t.b.Hf(),e.b.Hf()),n!=0)return n;switch(t.b.Hf().g){case 1:case 2:return pu(t.b.sf(),e.b.sf());case 3:case 4:return pu(e.b.sf(),t.b.sf())}return 0}function Z0n(t){var e,n,r;for(r=t.e.c.length,t.a=t2(Cr,[ee,Xr],[48,25],15,[r,r],2),n=new S(t.c);n.a>4&15,o=t[r]&15,h[s++]=YAt[n],h[s++]=YAt[o];return Mh(h,0,h.length)}function egn(t,e,n){var r,s,o;return r=e.ak(),o=e.dd(),s=r.$j()?Gp(t,4,r,o,null,DE(t,r,o,_t(r,99)&&(u(r,18).Bb&Ka)!=0),!0):Gp(t,r.Kj()?2:1,r,o,r.zj(),-1,!0),n?n.Ei(s):n=s,n}function Cu(t){var e,n;return t>=Ka?(e=RI+(t-Ka>>10&1023)&ys,n=56320+(t-Ka&1023)&ys,String.fromCharCode(e)+(""+String.fromCharCode(n))):String.fromCharCode(t&ys)}function ngn(t,e){$m();var n,r,s,o;return s=u(u(Ai(t.r,e),21),84),s.gc()>=2?(r=u(s.Kc().Pb(),111),n=t.u.Hc((Zu(),nA)),o=t.u.Hc(Q6),!r.a&&!n&&(s.gc()==2||o)):!1}function Dae(t,e,n,r,s){var o,h,d;for(o=gue(t,e,n,r,s),d=!1;!o;)bq(t,s,!0),d=!0,o=gue(t,e,n,r,s);d&&bq(t,s,!1),h=Cit(s),h.c.length!=0&&(t.d&&t.d.lg(h),Dae(t,s,n,r,h))}function hq(){hq=Z,Sft=new a9(J0,0),kAt=new a9("DIRECTED",1),TAt=new a9("UNDIRECTED",2),yAt=new a9("ASSOCIATION",3),EAt=new a9("GENERALIZATION",4),xAt=new a9("DEPENDENCY",5)}function rgn(t,e){var n;if(!T1(t))throw it(new No(_de));switch(n=T1(t),e.g){case 1:return-(t.j+t.f);case 2:return t.i-n.g;case 3:return t.j-n.f;case 4:return-(t.i+t.g)}return 0}function xE(t,e){var n,r;for(On(e),r=t.b.c.length,le(t.b,e);r>0;){if(n=r,r=(r-1)/2|0,t.a.ue(Ne(t.b,r),e)<=0)return ch(t.b,n,e),!0;ch(t.b,n,Ne(t.b,r))}return ch(t.b,r,e),!0}function O4t(t,e,n,r){var s,o;if(s=0,n)s=Lz(t.a[n.g][e.g],r);else for(o=0;o=d)}function P4t(t,e,n,r){var s;if(s=!1,ra(r)&&(s=!0,E8(e,n,Br(r))),s||Nm(r)&&(s=!0,P4t(t,e,n,r)),s||_t(r,236)&&(s=!0,r2(e,n,u(r,236))),!s)throw it(new fet(A8t))}function sgn(t,e){var n,r,s;if(n=e.Hh(t.a),n&&(s=Xf((!n.b&&(n.b=new kl((dn(),Qa),cc,n)),n.b),Nh),s!=null)){for(r=1;r<($u(),vLt).length;++r)if(hn(vLt[r],s))return r}return 0}function agn(t,e){var n,r,s;if(n=e.Hh(t.a),n&&(s=Xf((!n.b&&(n.b=new kl((dn(),Qa),cc,n)),n.b),Nh),s!=null)){for(r=1;r<($u(),mLt).length;++r)if(hn(mLt[r],s))return r}return 0}function Iae(t,e){var n,r,s,o;if(On(e),o=t.a.gc(),o0?1:0;o.a[s]!=n;)o=o.a[s],s=t.a.ue(n.d,o.d)>0?1:0;o.a[s]=r,r.b=n.b,r.a[0]=n.a[0],r.a[1]=n.a[1],n.a[0]=null,n.a[1]=null}function ugn(t){Zu();var e,n;return e=ji(sg,lt(ct(eU,1),oe,273,0,[Cb])),!(OD(k$(e,t))>1||(n=ji(nA,lt(ct(eU,1),oe,273,0,[eA,Q6])),OD(k$(n,t))>1))}function N4t(t,e){var n;n=Nc((Pp(),Yh),t),_t(n,498)?ko(Yh,t,new QGt(this,e)):ko(Yh,t,this),Hst(this,e),e==(c8(),aLt)?(this.wb=u(this,1939),u(e,1941)):this.wb=(Hp(),Ln)}function lgn(t){var e,n,r;if(t==null)return null;for(e=null,n=0;n=Wg?"error":r>=900?"warn":r>=800?"info":"log"),vXt(n,t.a),t.b&&N5t(e,n,t.b,"Exception: ",!0))}function Q(t,e){var n,r;return r=(!t.q&&(t.q=new _r),tr(t.q,e)),r??(n=e.wg(),_t(n,4)&&(n==null?(!t.q&&(t.q=new _r),Jx(t.q,e)):(!t.q&&(t.q=new _r),ki(t.q,e,n))),n)}function Wa(){Wa=Z,Dd=new _M("P1_CYCLE_BREAKING",0),gb=new _M("P2_LAYERING",1),cu=new _M("P3_NODE_ORDERING",2),qc=new _M("P4_NODE_PLACEMENT",3),Io=new _M("P5_EDGE_ROUTING",4)}function Nae(t,e){var n,r,s,o,h;for(s=e==1?clt:olt,r=s.a.ec().Kc();r.Ob();)for(n=u(r.Pb(),103),h=u(Ai(t.f.c,n),21).Kc();h.Ob();)o=u(h.Pb(),46),mu(t.b.b,o.b),mu(t.b.a,u(o.b,81).d)}function hgn(t,e){H9();var n;if(t.c==e.c){if(t.b==e.b||Ncn(t.b,e.b)){if(n=GXe(t.b)?1:-1,t.a&&!e.a)return n;if(!t.a&&e.a)return-n}return pu(t.b.g,e.b.g)}else return Ms(t.c,e.c)}function fgn(t,e){var n;vr(e,"Hierarchical port position processing",1),n=t.b,n.c.length>0&&ele((An(0,n.c.length),u(n.c[0],29)),t),n.c.length>1&&ele(u(Ne(n,n.c.length-1),29),t),or(e)}function Bae(t,e){var n,r,s;if(R4t(t,e))return!0;for(r=new S(e);r.a=s||e<0)throw it(new yo(iut+e+D2+s));if(n>=s||n<0)throw it(new yo(sut+n+D2+s));return e!=n?r=(o=t.Ti(n),t.Hi(e,o),o):r=t.Oi(n),r}function $ae(t){var e,n,r;if(r=t,t)for(e=0,n=t.Ug();n;n=n.Ug()){if(++e>vot)return $ae(n);if(r=n,n==t)throw it(new No("There is a cycle in the containment hierarchy of "+t))}return r}function eb(t){var e,n,r;for(r=new f2(Ya,"[","]"),n=t.Kc();n.Ob();)e=n.Pb(),$0(r,Vt(e)===Vt(t)?"(this Collection)":e==null?_u:$o(e));return r.a?r.e.length==0?r.a.a:r.a.a+(""+r.e):r.c}function R4t(t,e){var n,r;if(r=!1,e.gc()<2)return!1;for(n=0;nr&&(Rr(e-1,t.length),t.charCodeAt(e-1)<=32);)--e;return r>0||e1&&(t.j.b+=t.e)):(t.j.a+=n.a,t.j.b=b.Math.max(t.j.b,n.b),t.d.c.length>1&&(t.j.a+=t.e))}function nb(){nb=Z,y2e=lt(ct(Xa,1),xc,61,0,[(ve(),Pn),Hn,mr]),m2e=lt(ct(Xa,1),xc,61,0,[Hn,mr,Bn]),x2e=lt(ct(Xa,1),xc,61,0,[mr,Bn,Pn]),k2e=lt(ct(Xa,1),xc,61,0,[Bn,Pn,Hn])}function ggn(t,e,n,r){var s,o,h,d,v,k,C;if(h=t.c.d,d=t.d.d,h.j!=d.j)for(C=t.b,s=h.j,v=null;s!=d.j;)v=e==0?Oz(s):o3t(s),o=B3t(s,C.d[s.g],n),k=B3t(v,C.d[v.g],n),ri(r,Li(o,k)),s=v}function pgn(t,e,n,r){var s,o,h,d,v;return h=Yse(t.a,e,n),d=u(h.a,19).a,o=u(h.b,19).a,r&&(v=u(Q(e,(ae(),Ju)),10),s=u(Q(n,Ju),10),v&&s&&(tJt(t.b,v,s),d+=t.b.i,o+=t.b.e)),d>o}function qae(t){var e,n,r,s,o,h,d,v,k;for(this.a=wse(t),this.b=new he,n=t,r=0,s=n.length;rynt(t.d).c?(t.i+=t.g.c,sst(t.d)):ynt(t.d).c>ynt(t.g).c?(t.e+=t.d.c,sst(t.g)):(t.i+=mKt(t.g),t.e+=mKt(t.d),sst(t.g),sst(t.d))}function vgn(t,e,n){var r,s,o,h;for(o=e.q,h=e.r,new i2((Uf(),mb),e,o,1),new i2(mb,o,h,1),s=new S(n);s.ad&&(v=d/r),s>o&&(k=o/s),h=b.Math.min(v,k),t.a+=h*(e.a-t.a),t.b+=h*(e.b-t.b)}function kgn(t,e,n,r,s){var o,h;for(h=!1,o=u(Ne(n.b,0),33);Byn(t,e,o,r,s)&&(h=!0,e0n(n,o),n.b.c.length!=0);)o=u(Ne(n.b,0),33);return n.b.c.length==0&&sI(n.j,n),h&&nq(e.q),h}function Egn(t,e){k4();var n,r,s,o;if(e.b<2)return!1;for(o=ei(e,0),n=u(ti(o),8),r=n;o.b!=o.d.c;){if(s=u(ti(o),8),cat(t,r,s))return!0;r=s}return!!cat(t,r,n)}function $4t(t,e,n,r){var s,o;return n==0?(!t.o&&(t.o=new _l((Jc(),Sb),Hv,t,0)),Oj(t.o,e,r)):(o=u(yn((s=u(Dn(t,16),26),s||t.zh()),n),66),o.Nj().Rj(t,su(t),n-Jn(t.zh()),e,r))}function Hst(t,e){var n;e!=t.sb?(n=null,t.sb&&(n=u(t.sb,49).ih(t,1,sA,n)),e&&(n=u(e,49).gh(t,1,sA,n)),n=t3t(t,e,n),n&&n.Fi()):t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,4,e,e))}function Tgn(t,e){var n,r,s,o;if(e)s=H0(e,"x"),n=new vzt(t),V8(n.a,(On(s),s)),o=H0(e,"y"),r=new mzt(t),U8(r.a,(On(o),o));else throw it(new ud("All edge sections need an end point."))}function Cgn(t,e){var n,r,s,o;if(e)s=H0(e,"x"),n=new pzt(t),G8(n.a,(On(s),s)),o=H0(e,"y"),r=new bzt(t),W8(r.a,(On(o),o));else throw it(new ud("All edge sections need a start point."))}function _gn(t,e){var n,r,s,o,h,d,v;for(r=Are(t),o=0,d=r.length;o>22-e,s=t.h<>22-e):e<44?(n=0,r=t.l<>44-e):(n=0,r=0,s=t.l<t)throw it(new Fn("k must be smaller than n"));return e==0||e==t?1:t==0?0:g4t(t)/(g4t(e)*g4t(t-e))}function z4t(t,e){var n,r,s,o;for(n=new l2t(t);n.g==null&&!n.c?Hvt(n):n.g==null||n.i!=0&&u(n.g[n.i-1],47).Ob();)if(o=u(wq(n),56),_t(o,160))for(r=u(o,160),s=0;s>4],e[n*2+1]=yU[o&15];return Mh(e,0,e.length)}function Hgn(t){c$();var e,n,r;switch(r=t.c.length,r){case 0:return Age;case 1:return e=u(Ioe(new S(t)),42),den(e.cd(),e.dd());default:return n=u(P1(t,Nt(P2,Hq,42,t.c.length,0,1)),165),new uet(n)}}function Vgn(t){var e,n,r,s,o,h;for(e=new B3,n=new B3,Up(e,t),Up(n,t);n.b!=n.c;)for(s=u(Hx(n),37),h=new S(s.a);h.a0&&kI(t,n,e),s):_bn(t,e,n)}function Xae(t,e,n){var r,s,o,h;if(e.b!=0){for(r=new Zi,h=ei(e,0);h.b!=h.d.c;)o=u(ti(h),86),Ua(r,Eyt(o)),s=o.e,s.a=u(Q(o,(fc(),$ht)),19).a,s.b=u(Q(o,o_t),19).a;Xae(t,r,Rc(n,r.b/t.a|0))}}function Qae(t,e){var n,r,s,o,h;if(t.e<=e||Zin(t,t.g,e))return t.g;for(o=t.r,r=t.g,h=t.r,s=(o-r)/2+r;r+11&&(t.e.b+=t.a)):(t.e.a+=n.a,t.e.b=b.Math.max(t.e.b,n.b),t.d.c.length>1&&(t.e.a+=t.a))}function Kgn(t){var e,n,r,s;switch(s=t.i,e=s.b,r=s.j,n=s.g,s.a.g){case 0:n.a=(t.g.b.o.a-r.a)/2;break;case 1:n.a=e.d.n.a+e.d.a.a;break;case 2:n.a=e.d.n.a+e.d.a.a-r.a;break;case 3:n.b=e.d.n.b+e.d.a.b}}function Zae(t,e,n,r,s){if(rr&&(t.a=r),t.bs&&(t.b=s),t}function Xgn(t){if(_t(t,149))return Cwn(u(t,149));if(_t(t,229))return khn(u(t,229));if(_t(t,23))return Lgn(u(t,23));throw it(new Fn(L8t+eb(new yl(lt(ct(Qn,1),De,1,5,[t])))))}function Qgn(t,e,n,r,s){var o,h,d;for(o=!0,h=0;h>>s|n[h+r+1]<>>s,++h}return o}function G4t(t,e,n,r){var s,o,h;if(e.k==(Vn(),ta)){for(o=new ar(lr(jo(e).a.Kc(),new z));zr(o);)if(s=u(Mr(o),17),h=s.c.i.k,h==ta&&t.c.a[s.c.i.c.p]==r&&t.c.a[e.c.p]==n)return!0}return!1}function Zgn(t,e){var n,r,s,o;return e&=63,n=t.h&Z0,e<22?(o=n>>>e,s=t.m>>e|n<<22-e,r=t.l>>e|t.m<<22-e):e<44?(o=0,s=n>>>e-22,r=t.m>>e-22|t.h<<44-e):(o=0,s=0,r=n>>>e-44),iu(r&hl,s&hl,o&Z0)}function Jae(t,e,n,r){var s;this.b=r,this.e=t==(ev(),FS),s=e[n],this.d=t2(pl,[ee,o0],[177,25],16,[s.length,s.length],2),this.a=t2(Cr,[ee,Xr],[48,25],15,[s.length,s.length],2),this.c=new S4t(e,n)}function Jgn(t){var e,n,r;for(t.k=new Wvt((ve(),lt(ct(Xa,1),xc,61,0,[Zo,Pn,Hn,mr,Bn])).length,t.j.c.length),r=new S(t.j);r.a=n)return EE(t,e,r.p),!0;return!1}function eoe(t){var e;return t.Db&64?Vst(t):(e=new Ol(v8t),!t.a||Gr(Gr((e.a+=' "',e),t.a),'"'),Gr(Aw(Gr(Aw(Gr(Aw(Gr(Aw((e.a+=" (",e),t.i),","),t.j)," | "),t.g),","),t.f),")"),e.a)}function noe(t,e,n){var r,s,o,h,d;for(d=ou(t.e.Tg(),e),s=u(t.g,119),r=0,h=0;hn?J4t(t,n,"start index"):e<0||e>n?J4t(e,n,"end index"):y_("end index (%s) must not be less than start index (%s)",lt(ct(Qn,1),De,1,5,[pe(e),pe(t)]))}function ioe(t,e){var n,r,s,o;for(r=0,s=t.length;r0&&soe(t,o,n));e.p=0}function Xe(t){var e;this.c=new Zi,this.f=t.e,this.e=t.d,this.i=t.g,this.d=t.c,this.b=t.b,this.k=t.j,this.a=t.a,t.i?this.j=t.i:this.j=(e=u(Vf(ip),9),new sh(e,u(ff(e,e.length),9),0)),this.g=t.f}function spn(t){var e,n,r,s;for(e=qp(Gr(new Ol("Predicates."),"and"),40),n=!0,s=new mx(t);s.b0?d[h-1]:Nt(l0,Yg,10,0,0,1),s=d[h],k=h=0?t.Bh(s):i5t(t,r);else throw it(new Fn(lb+r.ne()+X_));else throw it(new Fn(Bde+e+Rde));else fh(t,n,r)}function U4t(t){var e,n;if(n=null,e=!1,_t(t,204)&&(e=!0,n=u(t,204).a),e||_t(t,258)&&(e=!0,n=""+u(t,258).a),e||_t(t,483)&&(e=!0,n=""+u(t,483).a),!e)throw it(new fet(A8t));return n}function uoe(t,e){var n,r;if(t.f){for(;e.Ob();)if(n=u(e.Pb(),72),r=n.ak(),_t(r,99)&&u(r,18).Bb&dc&&(!t.e||r.Gj()!=j7||r.aj()!=0)&&n.dd()!=null)return e.Ub(),!0;return!1}else return e.Ob()}function loe(t,e){var n,r;if(t.f){for(;e.Sb();)if(n=u(e.Ub(),72),r=n.ak(),_t(r,99)&&u(r,18).Bb&dc&&(!t.e||r.Gj()!=j7||r.aj()!=0)&&n.dd()!=null)return e.Pb(),!0;return!1}else return e.Sb()}function W4t(t,e,n){var r,s,o,h,d,v;for(v=ou(t.e.Tg(),e),r=0,d=t.i,s=u(t.g,119),h=0;h1&&(e.c[e.c.length]=o))}function upn(t){var e,n,r,s;for(n=new Zi,Ua(n,t.o),r=new qpt;n.b!=0;)e=u(n.b==0?null:(Zn(n.b!=0),lh(n,n.a.a)),508),s=Hhe(t,e,!0),s&&le(r.a,e);for(;r.a.c.length!=0;)e=u(Nre(r),508),Hhe(t,e,!1)}function Ug(){Ug=Z,_St=new Ox(N_,0),La=new Ox("BOOLEAN",1),gc=new Ox("INT",2),I7=new Ox("STRING",3),Oo=new Ox("DOUBLE",4),us=new Ox("ENUM",5),U6=new Ox("ENUMSET",6),V1=new Ox("OBJECT",7)}function g_(t,e){var n,r,s,o,h;r=b.Math.min(t.c,e.c),o=b.Math.min(t.d,e.d),s=b.Math.max(t.c+t.b,e.c+e.b),h=b.Math.max(t.d+t.a,e.d+e.a),s=(s/2|0))for(this.e=r?r.c:null,this.d=s;n++0;)Vvt(this);this.b=e,this.a=null}function fpn(t,e){var n,r;e.a?Fwn(t,e):(n=u(Cnt(t.b,e.b),57),n&&n==t.a[e.b.f]&&n.a&&n.a!=e.b.a&&n.c.Fc(e.b),r=u(Tnt(t.b,e.b),57),r&&t.a[r.f]==e.b&&r.a&&r.a!=e.b.a&&e.b.c.Fc(r),fnt(t.b,e.b))}function foe(t,e){var n,r;if(n=u(po(t.b,e),124),u(u(Ai(t.r,e),21),84).dc()){n.n.b=0,n.n.c=0;return}n.n.b=t.C.b,n.n.c=t.C.c,t.A.Hc((Al(),K2))&&Nue(t,e),r=qfn(t,e),lat(t,e)==(l4(),Eb)&&(r+=2*t.w),n.a.a=r}function doe(t,e){var n,r;if(n=u(po(t.b,e),124),u(u(Ai(t.r,e),21),84).dc()){n.n.d=0,n.n.a=0;return}n.n.d=t.C.d,n.n.a=t.C.a,t.A.Hc((Al(),K2))&&Bue(t,e),r=Hfn(t,e),lat(t,e)==(l4(),Eb)&&(r+=2*t.w),n.a.b=r}function dpn(t,e){var n,r,s,o;for(o=new he,r=new S(e);r.an.a&&(r.Hc((hy(),WO))?s=(e.a-n.a)/2:r.Hc(YO)&&(s=e.a-n.a)),e.b>n.b&&(r.Hc((hy(),XO))?o=(e.b-n.b)/2:r.Hc(KO)&&(o=e.b-n.b)),F4t(t,s,o)}function xoe(t,e,n,r,s,o,h,d,v,k,C,M,j){_t(t.Cb,88)&&gy(sl(u(t.Cb,88)),4),Qc(t,n),t.f=h,hE(t,d),dE(t,v),lE(t,k),fE(t,C),qg(t,M),gE(t,j),zg(t,!0),Rg(t,s),t.ok(o),b2(t,e),r!=null&&(t.i=null,fz(t,r))}function koe(t){var e,n;if(t.f){for(;t.n>0;){if(e=u(t.k.Xb(t.n-1),72),n=e.ak(),_t(n,99)&&u(n,18).Bb&dc&&(!t.e||n.Gj()!=j7||n.aj()!=0)&&e.dd()!=null)return!0;--t.n}return!1}else return t.n>0}function J4t(t,e,n){if(t<0)return y_(afe,lt(ct(Qn,1),De,1,5,[n,pe(t)]));if(e<0)throw it(new Fn(ofe+e));return y_("%s (%s) must not be greater than size (%s)",lt(ct(Qn,1),De,1,5,[n,pe(t),pe(e)]))}function t5t(t,e,n,r,s,o){var h,d,v,k;if(h=r-n,h<7){hhn(e,n,r,o);return}if(v=n+s,d=r+s,k=v+(d-v>>1),t5t(e,t,v,k,-s,o),t5t(e,t,k,d,-s,o),o.ue(t[k-1],t[k])<=0){for(;n=0?t.sh(o,n):M5t(t,s,n);else throw it(new Fn(lb+s.ne()+X_));else throw it(new Fn(Bde+e+Rde));else gh(t,r,s,n)}function Eoe(t){var e,n,r,s;if(n=u(t,49).qh(),n)try{if(r=null,e=_E((Pp(),Yh),sle(ghn(n))),e&&(s=e.rh(),s&&(r=s.Wk(kKe(n.e)))),r&&r!=t)return Eoe(r)}catch(o){if(o=Wi(o),!_t(o,60))throw it(o)}return t}function au(t,e,n){var r,s,o,h;if(h=e==null?0:t.b.se(e),s=(r=t.a.get(h),r??new Array),s.length==0)t.a.set(h,s);else if(o=jre(t,e,s),o)return o.ed(n);return ts(s,s.length,new KR(e,n)),++t.c,w$(t.b),null}function Toe(t,e){var n,r;return L$(t.a),Kd(t.a,(pz(),FG),FG),Kd(t.a,D7,D7),r=new Vs,bi(r,D7,(Nz(),Ght)),Vt(qe(e,(uy(),Yht)))!==Vt((HD(),NG))&&bi(r,D7,Hht),bi(r,D7,Vht),TUt(t.a,r),n=Fq(t.a,e),n}function Coe(t){if(!t)return cHt(),Bge;var e=t.valueOf?t.valueOf():t;if(e!==t){var n=Put[typeof e];return n?n(e):Uyt(typeof e)}else return t instanceof Array||t instanceof b.Array?new wx(t):new Qk(t)}function _oe(t,e,n){var r,s,o;switch(o=t.o,r=u(po(t.p,n),244),s=r.i,s.b=gI(r),s.a=dI(r),s.b=b.Math.max(s.b,o.a),s.b>o.a&&!e&&(s.b=o.a),s.c=-(s.b-o.a)/2,n.g){case 1:s.d=-s.a;break;case 3:s.d=o.b}Eat(r),Tat(r)}function Soe(t,e,n){var r,s,o;switch(o=t.o,r=u(po(t.p,n),244),s=r.i,s.b=gI(r),s.a=dI(r),s.a=b.Math.max(s.a,o.b),s.a>o.b&&!e&&(s.a=o.b),s.d=-(s.a-o.b)/2,n.g){case 4:s.c=-s.b;break;case 2:s.c=o.a}Eat(r),Tat(r)}function Apn(t,e){var n,r,s,o,h;if(!e.dc()){if(s=u(e.Xb(0),128),e.gc()==1){tue(t,s,s,1,0,e);return}for(n=1;n0)try{s=ql(e,Sa,wi)}catch(o){throw o=Wi(o),_t(o,127)?(r=o,it(new W$(r))):it(o)}return n=(!t.a&&(t.a=new Ztt(t)),t.a),s=0?u(At(n,s),56):null}function Ipn(t,e){if(t<0)return y_(afe,lt(ct(Qn,1),De,1,5,["index",pe(t)]));if(e<0)throw it(new Fn(ofe+e));return y_("%s (%s) must be less than size (%s)",lt(ct(Qn,1),De,1,5,["index",pe(t),pe(e)]))}function Opn(t){var e,n,r,s,o;if(t==null)return _u;for(o=new f2(Ya,"[","]"),n=t,r=0,s=n.length;r0)for(h=t.c.d,d=t.d.d,s=fd(ia(new $e(d.a,d.b),h),1/(r+1)),o=new $e(h.a,h.b),n=new S(t.a);n.a=0?t._g(n,!0,!0):dv(t,s,!0),153)),u(r,215).ol(e);else throw it(new Fn(lb+e.ne()+X_))}function s5t(t){var e,n;return t>-0x800000000000&&t<0x800000000000?t==0?0:(e=t<0,e&&(t=-t),n=ps(b.Math.floor(b.Math.log(t)/.6931471805599453)),(!e||t!=b.Math.pow(2,n))&&++n,n):Jne(Tu(t))}function Upn(t){var e,n,r,s,o,h,d;for(o=new O0,n=new S(t);n.a2&&d.e.b+d.j.b<=2&&(s=d,r=h),o.a.zc(s,o),s.q=r);return o}function Foe(t,e){var n,r,s;return r=new Y0(t),Mo(r,e),Jt(r,(ae(),eG),e),Jt(r,(Te(),cs),(ua(),Gc)),Jt(r,Id,(t0(),UG)),D0(r,(Vn(),ks)),n=new Mc,Uo(n,r),Bs(n,(ve(),Bn)),s=new Mc,Uo(s,r),Bs(s,Hn),r}function Noe(t){switch(t.g){case 0:return new det((ev(),RO));case 1:return new VB;case 2:return new ltt;default:throw it(new Fn("No implementation is available for the crossing minimizer "+(t.f!=null?t.f:""+t.g)))}}function Boe(t,e){var n,r,s,o,h;for(t.c[e.p]=!0,le(t.a,e),h=new S(e.j);h.a=o)h.$b();else for(s=h.Kc(),r=0;r0?rbt():h<0&&zoe(t,e,-h),!0):!1}function dI(t){var e,n,r,s,o,h,d;if(d=0,t.b==0){for(h=Ese(t,!0),e=0,r=h,s=0,o=r.length;s0&&(d+=n,++e);e>1&&(d+=t.c*(e-1))}else d=bHt(Sne(l$(Ri(Qnt(t.a),new Ml),new ha)));return d>0?d+t.n.d+t.n.a:0}function gI(t){var e,n,r,s,o,h,d;if(d=0,t.b==0)d=bHt(Sne(l$(Ri(Qnt(t.a),new th),new Fa)));else{for(h=Tse(t,!0),e=0,r=h,s=0,o=r.length;s0&&(d+=n,++e);e>1&&(d+=t.c*(e-1))}return d>0?d+t.n.b+t.n.c:0}function tbn(t,e){var n,r,s,o;for(o=u(po(t.b,e),124),n=o.a,s=u(u(Ai(t.r,e),21),84).Kc();s.Ob();)r=u(s.Pb(),111),r.c&&(n.a=b.Math.max(n.a,Vwt(r.c)));if(n.a>0)switch(e.g){case 2:o.n.c=t.s;break;case 4:o.n.b=t.s}}function ebn(t,e){var n,r,s;return n=u(Q(e,(Jf(),c7)),19).a-u(Q(t,c7),19).a,n==0?(r=ia(nc(u(Q(t,(Yp(),vO)),8)),u(Q(t,dS),8)),s=ia(nc(u(Q(e,vO),8)),u(Q(e,dS),8)),Ms(r.a*r.b,s.a*s.b)):n}function nbn(t,e){var n,r,s;return n=u(Q(e,(gv(),PG)),19).a-u(Q(t,PG),19).a,n==0?(r=ia(nc(u(Q(t,(fc(),zO)),8)),u(Q(t,$S),8)),s=ia(nc(u(Q(e,zO),8)),u(Q(e,$S),8)),Ms(r.a*r.b,s.a*s.b)):n}function qoe(t){var e,n;return n=new Mp,n.a+="e_",e=hun(t),e!=null&&(n.a+=""+e),t.c&&t.d&&(Gr((n.a+=" ",n),iq(t.c)),Gr(hc((n.a+="[",n),t.c.i),"]"),Gr((n.a+=Uot,n),iq(t.d)),Gr(hc((n.a+="[",n),t.d.i),"]")),n.a}function Hoe(t){switch(t.g){case 0:return new ZL;case 1:return new ctt;case 2:return new ott;case 3:return new GB;default:throw it(new Fn("No implementation is available for the layout phase "+(t.f!=null?t.f:""+t.g)))}}function o5t(t,e,n,r,s){var o;switch(o=0,s.g){case 1:o=b.Math.max(0,e.b+t.b-(n.b+r));break;case 3:o=b.Math.max(0,-t.b-r);break;case 2:o=b.Math.max(0,-t.a-r);break;case 4:o=b.Math.max(0,e.a+t.a-(n.a+r))}return o}function rbn(t,e,n){var r,s,o,h,d;if(n)for(s=n.a.length,r=new e2(s),d=(r.b-r.a)*r.c<0?(Fp(),Ib):new jp(r);d.Ob();)h=u(d.Pb(),19),o=P8(n,h.a),k8t in o.a||nut in o.a?gmn(t,o,e):yxn(t,o,e),zQe(u(tr(t.b,pE(o)),79))}function c5t(t){var e,n;switch(t.b){case-1:return!0;case 0:return n=t.t,n>1||n==-1?(t.b=-1,!0):(e=Dh(t),e&&(to(),e.Cj()==j0e)?(t.b=-1,!0):(t.b=1,!1));default:case 1:return!1}}function ibn(t,e){var n,r,s,o,h;for(r=(!e.s&&(e.s=new fe(Mu,e,21,17)),e.s),o=null,s=0,h=r.i;s=0&&r=0?t._g(n,!0,!0):dv(t,s,!0),153)),u(r,215).ll(e);throw it(new Fn(lb+e.ne()+Wct))}function ubn(){Tbt();var t;return T5e?u(_E((Pp(),Yh),Bh),1939):(ii(P2,new jf),V4n(),t=u(_t(Nc((Pp(),Yh),Bh),547)?Nc(Yh,Bh):new LXt,547),T5e=!0,$xn(t),Gxn(t),ki((Ebt(),sLt),t,new oJ),ko(Yh,Bh,t),t)}function lbn(t,e){var n,r,s,o;t.j=-1,xl(t.e)?(n=t.i,o=t.i!=0,gD(t,e),r=new z0(t.e,3,t.c,null,e,n,o),s=e.Qk(t.e,t.c,null),s=xae(t,e,s),s?(s.Ei(r),s.Fi()):mi(t.e,r)):(gD(t,e),s=e.Qk(t.e,t.c,null),s&&s.Fi())}function gq(t,e){var n,r,s;if(s=0,r=e[0],r>=t.length)return-1;for(n=(Rr(r,t.length),t.charCodeAt(r));n>=48&&n<=57&&(s=s*10+(n-48),++r,!(r>=t.length));)n=(Rr(r,t.length),t.charCodeAt(r));return r>e[0]?e[0]=r:s=-1,s}function hbn(t){var e,n,r,s,o;return s=u(t.a,19).a,o=u(t.b,19).a,n=s,r=o,e=b.Math.max(b.Math.abs(s),b.Math.abs(o)),s<=0&&s==o?(n=0,r=o-1):s==-e&&o!=e?(n=o,r=s,o>=0&&++n):(n=-o,r=s),new fa(pe(n),pe(r))}function fbn(t,e,n,r){var s,o,h,d,v,k;for(s=0;s=0&&k>=0&&v=t.i)throw it(new yo(iut+e+D2+t.i));if(n>=t.i)throw it(new yo(sut+n+D2+t.i));return r=t.g[n],e!=n&&(e>16),e=r>>16&16,n=16-e,t=t>>e,r=t-256,e=r>>16&8,n+=e,t<<=e,r=t-Ey,e=r>>16&4,n+=e,t<<=e,r=t-md,e=r>>16&2,n+=e,t<<=e,r=t>>14,e=r&~(r>>1),n+2-e)}function gbn(t){Ux();var e,n,r,s;for(dV=new he,Jut=new _r,Zut=new he,e=(!t.a&&(t.a=new fe(rs,t,10,11)),t.a),U5n(e),s=new nr(e);s.e!=s.i.gc();)r=u(dr(s),33),Ro(dV,r,0)==-1&&(n=new he,le(Zut,n),ese(r,n));return Zut}function pbn(t,e,n){var r,s,o,h;t.a=n.b.d,_t(e,352)?(s=x4(u(e,79),!1,!1),o=lI(s),r=new Ea(t),va(o,r),CI(o,s),e.We((ui(),a5))!=null&&va(u(e.We(a5),74),r)):(h=u(e,470),h.Hg(h.Dg()+t.a.a),h.Ig(h.Eg()+t.a.b))}function Goe(t,e){var n,r,s,o,h,d,v,k;for(k=Xt(ye(Q(e,(Te(),LS)))),v=t[0].n.a+t[0].o.a+t[0].d.c+k,d=1;d=0?n:(d=D9(ia(new $e(h.c+h.b/2,h.d+h.a/2),new $e(o.c+o.b/2,o.d+o.a/2))),-(dle(o,h)-1)*d)}function wbn(t,e,n){var r;ls(new Tn(null,(!n.a&&(n.a=new fe(Ji,n,6,6)),new _n(n.a,16))),new LGt(t,e)),ls(new Tn(null,(!n.n&&(n.n=new fe(qo,n,1,7)),new _n(n.n,16))),new MGt(t,e)),r=u(qe(n,(ui(),a5)),74),r&&dyt(r,t,e)}function dv(t,e,n){var r,s,o;if(o=C4(($u(),ya),t.Tg(),e),o)return to(),u(o,66).Oj()||(o=Kx(To(ya,o))),s=(r=t.Yg(o),u(r>=0?t._g(r,!0,!0):dv(t,o,!0),153)),u(s,215).hl(e,n);throw it(new Fn(lb+e.ne()+Wct))}function l5t(t,e,n,r){var s,o,h,d,v;if(s=t.d[e],s){if(o=s.g,v=s.i,r!=null){for(d=0;d=n&&(r=e,k=(v.c+v.a)/2,h=k-n,v.c<=k-n&&(s=new Dnt(v.c,h),Hm(t,r++,s)),d=k+n,d<=v.a&&(o=new Dnt(d,v.a),Km(r,t.c.length),XC(t.c,r,o)))}function h5t(t){var e;if(!t.c&&t.g==null)t.d=t.si(t.f),Dr(t,t.d),e=t.d;else{if(t.g==null)return!0;if(t.i==0)return!1;e=u(t.g[t.i-1],47)}return e==t.b&&null.km>=null.jm()?(wq(t),h5t(t)):e.Ob()}function xbn(t,e,n){var r,s,o,h,d;if(d=n,!d&&(d=qwt(new r8,0)),vr(d,c1e,1),dhe(t.c,e),h=F4n(t.a,e),h.gc()==1)Kle(u(h.Xb(0),37),d);else for(o=1/h.gc(),s=h.Kc();s.Ob();)r=u(s.Pb(),37),Kle(r,Rc(d,o));LKe(t.a,h,e),Fvn(e),or(d)}function Yoe(t){if(this.a=t,t.c.i.k==(Vn(),ks))this.c=t.c,this.d=u(Q(t.c.i,(ae(),oc)),61);else if(t.d.i.k==ks)this.c=t.d,this.d=u(Q(t.d.i,(ae(),oc)),61);else throw it(new Fn("Edge "+t+" is not an external edge."))}function Koe(t,e){var n,r,s;s=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,3,s,t.b)),e?e!=t&&(Qc(t,e.zb),hit(t,e.d),n=(r=e.c,r??e.zb),dit(t,n==null||hn(n,e.zb)?null:n)):(Qc(t,null),hit(t,0),dit(t,null))}function Xoe(t){var e,n;if(t.f){for(;t.n=h)throw it(new qm(e,h));return s=n[e],h==1?r=null:(r=Nt(Fft,lut,415,h-1,0,1),Dc(n,0,r,0,e),o=h-e-1,o>0&&Dc(n,e+1,r,e,o)),bE(t,r),moe(t,e,s),s}function d6(){d6=Z,tk=u(At(Wt((fbt(),pc).qb),6),34),J6=u(At(Wt(pc.qb),3),34),zft=u(At(Wt(pc.qb),4),34),qft=u(At(Wt(pc.qb),5),18),cq(tk),cq(J6),cq(zft),cq(qft),A5e=new yl(lt(ct(Mu,1),B4,170,0,[tk,J6]))}function tce(t,e){var n;this.d=new OC,this.b=e,this.e=new xo(e.qf()),n=t.u.Hc((Zu(),sP)),t.u.Hc(sg)?t.D?this.a=n&&!e.If():this.a=!0:t.u.Hc(Cb)?n?this.a=!(e.zf().Kc().Ob()||e.Bf().Kc().Ob()):this.a=!1:this.a=!1}function ece(t,e){var n,r,s,o;for(n=t.o.a,o=u(u(Ai(t.r,e),21),84).Kc();o.Ob();)s=u(o.Pb(),111),s.e.a=(r=s.b,r.Xe((ui(),dl))?r.Hf()==(ve(),Bn)?-r.rf().a-Xt(ye(r.We(dl))):n+Xt(ye(r.We(dl))):r.Hf()==(ve(),Bn)?-r.rf().a:n)}function nce(t,e){var n,r,s,o;n=u(Q(t,(Te(),Wl)),103),o=u(qe(e,C7),61),s=u(Q(t,cs),98),s!=(ua(),G1)&&s!=Tb?o==(ve(),Zo)&&(o=uxt(e,n),o==Zo&&(o=a6(n))):(r=Yle(e),r>0?o=a6(n):o=YD(a6(n))),wo(e,C7,o)}function Cbn(t,e){var n,r,s,o,h;for(h=t.j,e.a!=e.b&&Zs(h,new ex),s=h.c.length/2|0,r=0;r0&&kI(t,n,e),o):r.a!=null?(kI(t,e,n),-1):s.a!=null?(kI(t,n,e),1):0}function rce(t,e){var n,r,s,o;t.ej()?(n=t.Vi(),o=t.fj(),++t.j,t.Hi(n,t.oi(n,e)),r=t.Zi(3,null,e,n,o),t.bj()?(s=t.cj(e,null),s?(s.Ei(r),s.Fi()):t.$i(r)):t.$i(r)):(mXt(t,e),t.bj()&&(s=t.cj(e,null),s&&s.Fi()))}function pq(t,e){var n,r,s,o,h;for(h=ou(t.e.Tg(),e),s=new ox,n=u(t.g,119),o=t.i;--o>=0;)r=n[o],h.rl(r.ak())&&Dr(s,r);!Uhe(t,s)&&xl(t.e)&&n8(t,e.$j()?Gp(t,6,e,(wn(),io),null,-1,!1):Gp(t,e.Kj()?2:1,e,null,null,-1,!1))}function TE(){TE=Z;var t,e;for(D6=Nt(j4,ee,91,32,0,1),lS=Nt(j4,ee,91,32,0,1),t=1,e=0;e<=18;e++)D6[e]=JD(t),lS[e]=JD(F0(t,e)),t=_a(t,5);for(;eh)||e.q&&(r=e.C,h=r.c.c.a-r.o.a/2,s=r.n.a-n,s>h)))}function Abn(t,e){var n;vr(e,"Partition preprocessing",1),n=u(Bl(Ri(Wo(Ri(new Tn(null,new _n(t.a,16)),new QK),new wN),new Z5),c2(new ke,new ce,new Xn,lt(ct(fl,1),oe,132,0,[(O1(),Ul)]))),15),ls(n.Oc(),new vN),or(e)}function ice(t){_rt();var e,n,r,s,o,h,d;for(n=new a2,s=new S(t.e.b);s.a1?t.e*=Xt(t.a):t.f/=Xt(t.a),uln(t),gfn(t),Xvn(t),Jt(t.b,(o_(),fV),t.g)}function cce(t,e,n){var r,s,o,h,d,v;for(r=0,v=n,e||(r=n*(t.c.length-1),v*=-1),o=new S(t);o.a=0?(e||(e=new $C,r>0&&go(e,t.substr(0,r))),e.a+="\\",S8(e,n&ys)):e&&S8(e,n&ys);return e?e.a:t}function Bbn(t){var e;if(!t.a)throw it(new No("IDataType class expected for layout option "+t.f));if(e=Gsn(t.a),e==null)throw it(new No("Couldn't create new instance of property '"+t.f+"'. "+ade+(P0(gP),gP.k)+d8t));return u(e,414)}function eat(t){var e,n,r,s,o;return o=t.eh(),o&&o.kh()&&(s=Zp(t,o),s!=o)?(n=t.Vg(),r=(e=t.Vg(),e>=0?t.Qg(null):t.eh().ih(t,-1-e,null,null)),t.Rg(u(s,49),n),r&&r.Fi(),t.Lg()&&t.Mg()&&n>-1&&mi(t,new Js(t,9,n,o,s)),s):o}function dce(t){var e,n,r,s,o,h,d,v;for(h=0,o=t.f.e,r=0;r>5,s>=t.d)return t.e<0;if(n=t.a[s],e=1<<(e&31),t.e<0){if(r=Ine(t),s>16)),15).Xc(o),d0&&(!(Bp(t.a.c)&&e.n.d)&&!(b8(t.a.c)&&e.n.b)&&(e.g.d+=b.Math.max(0,r/2-.5)),!(Bp(t.a.c)&&e.n.a)&&!(b8(t.a.c)&&e.n.c)&&(e.g.a-=r-1))}function bce(t){var e,n,r,s,o;if(s=new he,o=ule(t,s),e=u(Q(t,(ae(),Ju)),10),e)for(r=new S(e.j);r.a>e,o=t.m>>e|n<<22-e,s=t.l>>e|t.m<<22-e):e<44?(h=r?Z0:0,o=n>>e-22,s=t.m>>e-22|n<<44-e):(h=r?Z0:0,o=r?hl:0,s=n>>e-44),iu(s&hl,o&hl,h&Z0)}function nat(t){var e,n,r,s,o,h;for(this.c=new he,this.d=t,r=as,s=as,e=Cs,n=Cs,h=ei(t,0);h.b!=h.d.c;)o=u(ti(h),8),r=b.Math.min(r,o.a),s=b.Math.min(s,o.b),e=b.Math.max(e,o.a),n=b.Math.max(n,o.b);this.a=new ah(r,s,e-r,n-s)}function mce(t,e){var n,r,s,o,h,d;for(o=new S(t.b);o.a0&&_t(e,42)&&(t.a.qj(),k=u(e,42),v=k.cd(),o=v==null?0:Hi(v),h=rwt(t.a,o),n=t.a.d[h],n)){for(r=u(n.g,367),C=n.i,d=0;d=2)for(n=s.Kc(),e=ye(n.Pb());n.Ob();)o=e,e=ye(n.Pb()),r=b.Math.min(r,(On(e),e-(On(o),o)));return r}function Ybn(t,e){var n,r,s,o,h;r=new Zi,fs(r,e,r.c.b,r.c);do for(n=(Zn(r.b!=0),u(lh(r,r.a.a),86)),t.b[n.g]=1,o=ei(n.d,0);o.b!=o.d.c;)s=u(ti(o),188),h=s.c,t.b[h.g]==1?ri(t.a,s):t.b[h.g]==2?t.b[h.g]=1:fs(r,h,r.c.b,r.c);while(r.b!=0)}function Kbn(t,e){var n,r,s;if(Vt(e)===Vt(Lr(t)))return!0;if(!_t(e,15)||(r=u(e,15),s=t.gc(),s!=r.gc()))return!1;if(_t(r,54)){for(n=0;n0&&(s=n),h=new S(t.f.e);h.a0?(e-=1,n-=1):r>=0&&s<0?(e+=1,n+=1):r>0&&s>=0?(e-=1,n+=1):(e+=1,n-=1),new fa(pe(e),pe(n))}function d2n(t,e){return t.ce.c?1:t.be.b?1:t.a!=e.a?Hi(t.a)-Hi(e.a):t.d==($9(),BS)&&e.d==NS?-1:t.d==NS&&e.d==BS?1:0}function _ce(t,e){var n,r,s,o,h;return o=e.a,o.c.i==e.b?h=o.d:h=o.c,o.c.i==e.b?r=o.c:r=o.d,s=zhn(t.a,h,r),s>0&&s0):s<0&&-s0):!1}function g2n(t,e,n,r){var s,o,h,d,v,k,C,M;for(s=(e-t.d)/t.c.c.length,o=0,t.a+=n,t.d=e,M=new S(t.c);M.a>24;return h}function b2n(t){if(t.pe()){var e=t.c;e.qe()?t.o="["+e.n:e.pe()?t.o="["+e.ne():t.o="[L"+e.ne()+";",t.b=e.me()+"[]",t.k=e.oe()+"[]";return}var n=t.j,r=t.d;r=r.split("/"),t.o=ast(".",[n,ast("$",r)]),t.b=ast(".",[n,ast(".",r)]),t.k=r[r.length-1]}function w2n(t,e){var n,r,s,o,h;for(h=null,o=new S(t.e.a);o.a=0;e-=2)for(n=0;n<=e;n+=2)(t.b[n]>t.b[n+2]||t.b[n]===t.b[n+2]&&t.b[n+1]>t.b[n+3])&&(r=t.b[n+2],t.b[n+2]=t.b[n],t.b[n]=r,r=t.b[n+3],t.b[n+3]=t.b[n+1],t.b[n+1]=r);t.c=!0}}function Sce(t,e){var n,r,s,o,h,d,v,k;for(h=e==1?clt:olt,o=h.a.ec().Kc();o.Ob();)for(s=u(o.Pb(),103),v=u(Ai(t.f.c,s),21).Kc();v.Ob();)switch(d=u(v.Pb(),46),r=u(d.b,81),k=u(d.a,189),n=k.c,s.g){case 2:case 1:r.g.d+=n;break;case 4:case 3:r.g.c+=n}}function y2n(t,e){var n,r,s,o,h,d,v,k,C;for(k=-1,C=0,h=t,d=0,v=h.length;d0&&++C;++k}return C}function mf(t){var e,n;return n=new Ol(Ip(t.gm)),n.a+="@",Gr(n,(e=Hi(t)>>>0,e.toString(16))),t.kh()?(n.a+=" (eProxyURI: ",hc(n,t.qh()),t.$g()&&(n.a+=" eClass: ",hc(n,t.$g())),n.a+=")"):t.$g()&&(n.a+=" (eClass: ",hc(n,t.$g()),n.a+=")"),n.a}function v_(t){var e,n,r,s;if(t.e)throw it(new No((P0(zut),Sot+zut.k+Aot)));for(t.d==(ao(),h0)&&Bq(t,zh),n=new S(t.a.a);n.a>24}return n}function E2n(t,e,n){var r,s,o;if(s=u(po(t.i,e),306),!s)if(s=new Aee(t.d,e,n),zx(t.i,e,s),P3t(e))jQe(t.a,e.c,e.b,s);else switch(o=lpn(e),r=u(po(t.p,o),244),o.g){case 1:case 3:s.j=!0,het(r,e.b,s);break;case 4:case 2:s.k=!0,het(r,e.c,s)}return s}function T2n(t,e,n,r){var s,o,h,d,v,k;if(d=new ox,v=ou(t.e.Tg(),e),s=u(t.g,119),to(),u(e,66).Oj())for(h=0;h=0)return s;for(o=1,d=new S(e.j);d.a0&&e.ue((An(s-1,t.c.length),u(t.c[s-1],10)),o)>0;)ch(t,s,(An(s-1,t.c.length),u(t.c[s-1],10))),--s;An(s,t.c.length),t.c[s]=o}n.a=new _r,n.b=new _r}function C2n(t,e,n){var r,s,o,h,d,v,k,C;for(C=(r=u(e.e&&e.e(),9),new sh(r,u(ff(r,r.length),9),0)),v=vy(n,"[\\[\\]\\s,]+"),o=v,h=0,d=o.length;h0&&(!(Bp(t.a.c)&&e.n.d)&&!(b8(t.a.c)&&e.n.b)&&(e.g.d-=b.Math.max(0,r/2-.5)),!(Bp(t.a.c)&&e.n.a)&&!(b8(t.a.c)&&e.n.c)&&(e.g.a+=b.Math.max(0,r-1)))}function Ice(t,e,n){var r,s;if((t.c-t.b&t.a.length-1)==2)e==(ve(),Pn)||e==Hn?(nz(u(Q9(t),15),(zl(),f0)),nz(u(Q9(t),15),kb)):(nz(u(Q9(t),15),(zl(),kb)),nz(u(Q9(t),15),f0));else for(s=new O9(t);s.a!=s.b;)r=u(Mz(s),15),nz(r,n)}function S2n(t,e){var n,r,s,o,h,d,v;for(s=x8(new Tpt(t)),d=new da(s,s.c.length),o=x8(new Tpt(e)),v=new da(o,o.c.length),h=null;d.b>0&&v.b>0&&(n=(Zn(d.b>0),u(d.a.Xb(d.c=--d.b),33)),r=(Zn(v.b>0),u(v.a.Xb(v.c=--v.b),33)),n==r);)h=n;return h}function ul(t,e){var n,r,s,o,h,d;return o=t.a*Eot+t.b*1502,d=t.b*Eot+11,n=b.Math.floor(d*$I),o+=n,d-=n*Gxt,o%=Gxt,t.a=o,t.b=d,e<=24?b.Math.floor(t.a*DEt[e]):(s=t.a*(1<=2147483648&&(r-=mot),r)}function Oce(t,e,n){var r,s,o,h;rZt(t,e)>rZt(t,n)?(r=Ko(n,(ve(),Hn)),t.d=r.dc()?0:Nnt(u(r.Xb(0),11)),h=Ko(e,Bn),t.b=h.dc()?0:Nnt(u(h.Xb(0),11))):(s=Ko(n,(ve(),Bn)),t.d=s.dc()?0:Nnt(u(s.Xb(0),11)),o=Ko(e,Hn),t.b=o.dc()?0:Nnt(u(o.Xb(0),11)))}function Pce(t){var e,n,r,s,o,h,d;if(t&&(e=t.Hh(Bh),e&&(h=Br(Xf((!e.b&&(e.b=new kl((dn(),Qa),cc,e)),e.b),"conversionDelegates")),h!=null))){for(d=new he,r=vy(h,"\\w+"),s=0,o=r.length;st.c));h++)s.a>=t.s&&(o<0&&(o=h),d=h);return v=(t.s+t.c)/2,o>=0&&(r=lmn(t,e,o,d),v=mXe((An(r,e.c.length),u(e.c[r],329))),ybn(e,r,n)),v}function sat(){sat=Z,l3e=new eo((ui(),W6),1.3),G_t=GSt,Z_t=new Ow(15),w3e=new eo(U2,Z_t),m3e=new eo(W2,15),h3e=YG,g3e=G2,p3e=c5,b3e=xb,d3e=o5,K_t=tP,v3e=Qy,Q_t=(y5t(),o3e),Y_t=s3e,X_t=a3e,J_t=c3e,U_t=i3e,W_t=KG,f3e=WSt,HO=r3e,V_t=n3e,tSt=u3e}function Ir(t,e,n){var r,s,o,h,d,v,k;for(h=(o=new lB,o),oyt(h,(On(e),e)),k=(!h.b&&(h.b=new kl((dn(),Qa),cc,h)),h.b),v=1;v0&&r4n(this,s)}function S5t(t,e,n,r,s,o){var h,d,v;if(!s[e.b]){for(s[e.b]=!0,h=r,!h&&(h=new B$),le(h.e,e),v=o[e.b].Kc();v.Ob();)d=u(v.Pb(),282),!(d.d==n||d.c==n)&&(d.c!=e&&S5t(t,d.c,e,h,s,o),d.d!=e&&S5t(t,d.d,e,h,s,o),le(h.c,d),Ls(h.d,d.b));return h}return null}function M2n(t){var e,n,r,s,o,h,d;for(e=0,s=new S(t.e);s.a=2}function D2n(t,e){var n,r,s,o;for(vr(e,"Self-Loop pre-processing",1),r=new S(t.a);r.a1||(e=ji(_f,lt(ct(lo,1),oe,93,0,[ig,Sf])),OD(k$(e,t))>1)||(r=ji(Lf,lt(ct(lo,1),oe,93,0,[d0,Hh])),OD(k$(r,t))>1))}function P2n(t,e){var n,r,s;return n=e.Hh(t.a),n&&(s=Br(Xf((!n.b&&(n.b=new kl((dn(),Qa),cc,n)),n.b),"affiliation")),s!=null)?(r=Tj(s,Cu(35)),r==-1?Uit(t,C9(t,Rl(e.Hj())),s):r==0?Uit(t,null,s.substr(1)):Uit(t,s.substr(0,r),s.substr(r+1))):null}function F2n(t){var e,n,r;try{return t==null?_u:$o(t)}catch(s){if(s=Wi(s),_t(s,102))return e=s,r=Ip(ol(t))+"@"+(n=(Gd(),$3t(t)>>>0),n.toString(16)),Efn(kun(),(d8(),"Exception during lenientFormat for "+r),e),"<"+r+" threw "+Ip(e.gm)+">";throw it(s)}}function Bce(t){switch(t.g){case 0:return new ett;case 1:return new qB;case 2:return new jVt;case 3:return new BL;case 4:return new aYt;case 5:return new ntt;default:throw it(new Fn("No implementation is available for the layerer "+(t.f!=null?t.f:""+t.g)))}}function A5t(t,e,n){var r,s,o;for(o=new S(t.t);o.a0&&(r.b.n-=r.c,r.b.n<=0&&r.b.u>0&&ri(e,r.b));for(s=new S(t.i);s.a0&&(r.a.u-=r.c,r.a.u<=0&&r.a.n>0&&ri(n,r.a))}function wq(t){var e,n,r,s,o;if(t.g==null&&(t.d=t.si(t.f),Dr(t,t.d),t.c))return o=t.f,o;if(e=u(t.g[t.i-1],47),s=e.Pb(),t.e=e,n=t.si(s),n.Ob())t.d=n,Dr(t,n);else for(t.d=null;!e.Ob()&&(ts(t.g,--t.i,null),t.i!=0);)r=u(t.g[t.i-1],47),e=r;return s}function N2n(t,e){var n,r,s,o,h,d;if(r=e,s=r.ak(),X0(t.e,s)){if(s.hi()&&O$(t,s,r.dd()))return!1}else for(d=ou(t.e.Tg(),s),n=u(t.g,119),o=0;o1||n>1)return 2;return e+n==1?2:0}function jce(t,e,n){var r,s,o,h,d;for(vr(n,"ELK Force",1),je(Re(qe(e,(Jf(),y7t))))||y$((r=new rr((Pm(),new Mm(e))),r)),d=pre(e),odn(d),$un(t,u(Q(d,m7t),424)),h=Ale(t.a,d),o=h.Kc();o.Ob();)s=u(o.Pb(),231),kmn(t.b,s,Rc(n,1/h.gc()));d=zhe(h),Rhe(d),or(n)}function H2n(t,e){var n,r,s,o,h;if(vr(e,"Breaking Point Processor",1),u5n(t),je(Re(Q(t,(Te(),S9t))))){for(s=new S(t.b);s.a=0?t._g(r,!0,!0):dv(t,o,!0),153)),u(s,215).ml(e,n)}else throw it(new Fn(lb+e.ne()+X_))}function W2n(t,e){var n,r,s,o,h;for(n=new he,s=Wo(new Tn(null,new _n(t,16)),new ZQ),o=Wo(new Tn(null,new _n(t,16)),new JQ),h=yon(Fan(l$(_wn(lt(ct(n6n,1),De,833,0,[s,o])),new tZ))),r=1;r=2*e&&le(n,new Dnt(h[r-1]+e,h[r]-e));return n}function Y2n(t,e,n){vr(n,"Eades radial",1),n.n&&e&&gf(n,pf(e),(Sl(),Ql)),t.d=u(qe(e,(m9(),HS)),33),t.c=Xt(ye(qe(e,(uy(),RG)))),t.e=pst(u(qe(e,qO),293)),t.a=Shn(u(qe(e,D_t),426)),t.b=Kdn(u(qe(e,M_t),340)),Ldn(t),n.n&&e&&gf(n,pf(e),(Sl(),Ql))}function K2n(t,e,n){var r,s,o,h,d,v,k,C;if(n)for(o=n.a.length,r=new e2(o),d=(r.b-r.a)*r.c<0?(Fp(),Ib):new jp(r);d.Ob();)h=u(d.Pb(),19),s=P8(n,h.a),s&&(v=Wsn(t,(k=(Sw(),C=new Gpt,C),e&&D5t(k,e),k),s),G9(v,R0(s,Ad)),lq(s,v),e5t(s,v),Lit(t,s,v))}function mq(t){var e,n,r,s,o,h;if(!t.j){if(h=new tC,e=uA,o=e.a.zc(t,e),o==null){for(r=new nr(Ao(t));r.e!=r.i.gc();)n=u(dr(r),26),s=mq(n),is(h,s),Dr(h,n);e.a.Bc(t)!=null}iy(h),t.j=new V3((u(At(Wt((Hp(),Ln).o),11),18),h.i),h.g),sl(t).b&=-33}return t.j}function X2n(t){var e,n,r,s;if(t==null)return null;if(r=$c(t,!0),s=oO.length,hn(r.substr(r.length-s,s),oO)){if(n=r.length,n==4){if(e=(Rr(0,r.length),r.charCodeAt(0)),e==43)return CLt;if(e==45)return G5e}else if(n==3)return CLt}return new Ppt(r)}function Q2n(t){var e,n,r;return n=t.l,n&n-1||(r=t.m,r&r-1)||(e=t.h,e&e-1)||e==0&&r==0&&n==0?-1:e==0&&r==0&&n!=0?tyt(n):e==0&&r!=0&&n==0?tyt(r)+22:e!=0&&r==0&&n==0?tyt(e)+44:-1}function Z2n(t,e){var n,r,s,o,h;for(vr(e,"Edge joining",1),n=je(Re(Q(t,(Te(),dht)))),s=new S(t.b);s.a1)for(s=new S(t.a);s.a0),o.a.Xb(o.c=--o.b),zm(o,s),Zn(o.b3&&Jd(t,0,e-3))}function nwn(t){var e,n,r,s;return Vt(Q(t,(Te(),qy)))===Vt((G0(),sp))?!t.e&&Vt(Q(t,DO))!==Vt((eE(),TO)):(r=u(Q(t,eht),292),s=je(Re(Q(t,nht)))||Vt(Q(t,_S))===Vt((n6(),EO)),e=u(Q(t,VCt),19).a,n=t.a.c.length,!s&&r!=(eE(),TO)&&(e==0||e>n))}function rwn(t){var e,n;for(n=0;n0);n++);if(n>0&&n0);e++);return e>0&&n>16!=6&&e){if(vE(t,e))throw it(new Fn(Q_+sce(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?r4t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=c6(e,t,6,r)),r=ewt(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,6,e,e))}function D5t(t,e){var n,r;if(e!=t.Cb||t.Db>>16!=9&&e){if(vE(t,e))throw it(new Fn(Q_+zue(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?s4t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=c6(e,t,9,r)),r=nwt(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,9,e,e))}function oat(t,e){var n,r;if(e!=t.Cb||t.Db>>16!=3&&e){if(vE(t,e))throw it(new Fn(Q_+$le(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?o4t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=c6(e,t,12,r)),r=twt(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,3,e,e))}function SE(t){var e,n,r,s,o;if(r=Dh(t),o=t.j,o==null&&r)return t.$j()?null:r.zj();if(_t(r,148)){if(n=r.Aj(),n&&(s=n.Nh(),s!=t.i)){if(e=u(r,148),e.Ej())try{t.g=s.Kh(e,o)}catch(h){if(h=Wi(h),_t(h,78))t.g=null;else throw it(h)}t.i=s}return t.g}return null}function qce(t){var e;return e=new he,le(e,new Dx(new $e(t.c,t.d),new $e(t.c+t.b,t.d))),le(e,new Dx(new $e(t.c,t.d),new $e(t.c,t.d+t.a))),le(e,new Dx(new $e(t.c+t.b,t.d+t.a),new $e(t.c+t.b,t.d))),le(e,new Dx(new $e(t.c+t.b,t.d+t.a),new $e(t.c,t.d+t.a))),e}function Hce(t,e,n,r){var s,o,h;if(h=p4t(e,n),r.c[r.c.length]=e,t.j[h.p]==-1||t.j[h.p]==2||t.a[e.p])return r;for(t.j[h.p]=-1,o=new ar(lr(U0(h).a.Kc(),new z));zr(o);)if(s=u(Mr(o),17),!(!(!Ga(s)&&!(!Ga(s)&&s.c.i.c==s.d.i.c))||s==e))return Hce(t,s,h,r);return r}function iwn(t,e,n){var r,s,o;for(o=e.a.ec().Kc();o.Ob();)s=u(o.Pb(),79),r=u(tr(t.b,s),266),!r&&(es(e0(s))==es(tb(s))?mvn(t,s,n):e0(s)==es(tb(s))?tr(t.c,s)==null&&tr(t.b,tb(s))!=null&&khe(t,s,n,!1):tr(t.d,s)==null&&tr(t.b,e0(s))!=null&&khe(t,s,n,!0))}function swn(t,e){var n,r,s,o,h,d,v;for(s=t.Kc();s.Ob();)for(r=u(s.Pb(),10),d=new Mc,Uo(d,r),Bs(d,(ve(),Hn)),Jt(d,(ae(),nG),(Nn(),!0)),h=e.Kc();h.Ob();)o=u(h.Pb(),10),v=new Mc,Uo(v,o),Bs(v,Bn),Jt(v,nG,!0),n=new Vw,Jt(n,nG,!0),Oa(n,d),oa(n,v)}function awn(t,e,n,r){var s,o,h,d;s=Rie(t,e,n),o=Rie(t,n,e),h=u(tr(t.c,e),112),d=u(tr(t.c,n),112),sr.b.g&&(o.c[o.c.length]=r);return o}function AE(){AE=Z,i5=new DM("CANDIDATE_POSITION_LAST_PLACED_RIGHT",0),G6=new DM("CANDIDATE_POSITION_LAST_PLACED_BELOW",1),GS=new DM("CANDIDATE_POSITION_WHOLE_DRAWING_RIGHT",2),VS=new DM("CANDIDATE_POSITION_WHOLE_DRAWING_BELOW",3),US=new DM("WHOLE_DRAWING",4)}function own(t,e){if(_t(e,239))return Bln(t,u(e,33));if(_t(e,186))return Xln(t,u(e,118));if(_t(e,354))return urn(t,u(e,137));if(_t(e,352))return Oyn(t,u(e,79));if(e)return null;throw it(new Fn(L8t+eb(new yl(lt(ct(Qn,1),De,1,5,[e])))))}function cwn(t){var e,n,r,s,o,h,d;for(o=new Zi,s=new S(t.d.a);s.a1)for(e=Fw((n=new Xb,++t.b,n),t.d),d=ei(o,0);d.b!=d.d.c;)h=u(ti(d),121),yf(lf(uf(hf(cf(new Ch,1),0),e),h))}function I5t(t,e){var n,r;if(e!=t.Cb||t.Db>>16!=11&&e){if(vE(t,e))throw it(new Fn(Q_+X5t(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?c4t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=c6(e,t,10,r)),r=lwt(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,11,e,e))}function uwn(t){var e,n,r,s;for(r=new p2(new Cg(t.b).a);r.b;)n=Zw(r),s=u(n.cd(),11),e=u(n.dd(),10),Jt(e,(ae(),_i),s),Jt(s,Ju,e),Jt(s,SO,(Nn(),!0)),Bs(s,u(Q(e,oc),61)),Q(e,oc),Jt(s.i,(Te(),cs),(ua(),B7)),u(Q(Na(s.i),Vc),21).Fc((oo(),y7))}function lwn(t,e,n){var r,s,o,h,d,v;if(o=0,h=0,t.c)for(v=new S(t.d.i.j);v.ao.a?-1:s.av){for(C=t.d,t.d=Nt(XAt,R8t,63,2*v+4,0,1),o=0;o=9223372036854776e3?(q8(),sEt):(s=!1,t<0&&(s=!0,t=-t),r=0,t>=C2&&(r=ps(t/C2),t-=r*C2),n=0,t>=m6&&(n=ps(t/m6),t-=n*m6),e=ps(t),o=iu(e,n,r),s&&Ait(o),o)}function ywn(t,e){var n,r,s,o;for(n=!e||!t.u.Hc((Zu(),sg)),o=0,s=new S(t.e.Cf());s.a=-e&&r==e?new fa(pe(n-1),pe(r)):new fa(pe(n),pe(r-1))}function Yce(){return ro(),lt(ct(l6n,1),oe,77,0,[J7t,X7t,gS,glt,vTt,CV,FV,h7,bTt,oTt,gTt,l7,wTt,iTt,mTt,V7t,LV,plt,EV,IV,xTt,DV,G7t,pTt,kTt,OV,yTt,TV,eTt,fTt,hTt,NV,Y7t,kV,SV,W7t,u7,uTt,sTt,dTt,pS,Q7t,K7t,lTt,aTt,AV,PV,U7t,MV,cTt,_V,nTt,tTt,xO,xV,rTt,Z7t])}function Twn(t,e,n){t.d=0,t.b=0,e.k==(Vn(),Hc)&&n.k==Hc&&u(Q(e,(ae(),_i)),10)==u(Q(n,_i),10)&&(eit(e).j==(ve(),Pn)?Oce(t,e,n):Oce(t,n,e)),e.k==Hc&&n.k==ta?eit(e).j==(ve(),Pn)?t.d=1:t.b=1:n.k==Hc&&e.k==ta&&(eit(n).j==(ve(),Pn)?t.b=1:t.d=1),h1n(t,e,n)}function Cwn(t){var e,n,r,s,o,h,d,v,k,C,M;return M=D4t(t),e=t.a,v=e!=null,v&&E8(M,"category",t.a),s=wM(new Sm(t.d)),h=!s,h&&(k=new Eg,Yf(M,"knownOptions",k),n=new Nzt(k),va(new Sm(t.d),n)),o=wM(t.g),d=!o,d&&(C=new Eg,Yf(M,"supportedFeatures",C),r=new Bzt(C),va(t.g,r)),M}function _wn(t){var e,n,r,s,o,h,d,v,k;for(r=!1,e=336,n=0,o=new XWt(t.length),d=t,v=0,k=d.length;v>16!=7&&e){if(vE(t,e))throw it(new Fn(Q_+eoe(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?i4t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=u(e,49).gh(t,1,lP,r)),r=nvt(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,7,e,e))}function Kce(t,e){var n,r;if(e!=t.Cb||t.Db>>16!=3&&e){if(vE(t,e))throw it(new Fn(Q_+lie(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?a4t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=u(e,49).gh(t,0,fP,r)),r=rvt(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,3,e,e))}function uat(t,e){TE();var n,r,s,o,h,d,v,k,C;return e.d>t.d&&(d=t,t=e,e=d),e.d<63?bvn(t,e):(h=(t.d&-2)<<4,k=bmt(t,h),C=bmt(e,h),r=Cat(t,Qx(k,h)),s=Cat(e,Qx(C,h)),v=uat(k,C),n=uat(r,s),o=uat(Cat(k,r),Cat(s,C)),o=Oat(Oat(o,v),n),o=Qx(o,h),v=Qx(v,h<<1),Oat(Oat(v,o),n))}function Awn(t,e,n){var r,s,o,h,d;for(h=t_(t,n),d=Nt(l0,Yg,10,e.length,0,1),r=0,o=h.Kc();o.Ob();)s=u(o.Pb(),11),je(Re(Q(s,(ae(),SO))))&&(d[r++]=u(Q(s,Ju),10));if(r=0;o+=n?1:-1)h=h|e.c.Sf(v,o,n,r&&!je(Re(Q(e.j,(ae(),Ov))))&&!je(Re(Q(e.j,(ae(),X4))))),h=h|e.q._f(v,o,n),h=h|Pue(t,v[o],n,r);return Fs(t.c,e),h}function xq(t,e,n){var r,s,o,h,d,v,k,C,M,j;for(C=OZt(t.j),M=0,j=C.length;M1&&(t.a=!0),Ven(u(n.b,65),Li(nc(u(e.b,65).c),fd(ia(nc(u(n.b,65).a),u(e.b,65).a),s))),WQt(t,e),Xce(t,n)}function Qce(t){var e,n,r,s,o,h,d;for(o=new S(t.a.a);o.a0&&o>0?h.p=e++:r>0?h.p=n++:o>0?h.p=s++:h.p=n++}wn(),Zs(t.j,new DL)}function Own(t){var e,n;n=null,e=u(Ne(t.g,0),17);do{if(n=e.d.i,Us(n,(ae(),$h)))return u(Q(n,$h),11).i;if(n.k!=(Vn(),Os)&&zr(new ar(lr(Ds(n).a.Kc(),new z))))e=u(Mr(new ar(lr(Ds(n).a.Kc(),new z))),17);else if(n.k!=Os)return null}while(n&&n.k!=(Vn(),Os));return n}function Pwn(t,e){var n,r,s,o,h,d,v,k,C;for(d=e.j,h=e.g,v=u(Ne(d,d.c.length-1),113),C=(An(0,d.c.length),u(d.c[0],113)),k=Ast(t,h,v,C),o=1;ok&&(v=n,C=s,k=r);e.a=C,e.c=v}function Fwn(t,e){var n,r;if(r=tD(t.b,e.b),!r)throw it(new No("Invalid hitboxes for scanline constraint calculation."));(ire(e.b,u(FZe(t.b,e.b),57))||ire(e.b,u(PZe(t.b,e.b),57)))&&(Gd(),e.b+""),t.a[e.b.f]=u(Cnt(t.b,e.b),57),n=u(Tnt(t.b,e.b),57),n&&(t.a[n.f]=e.b)}function yf(t){if(!t.a.d||!t.a.e)throw it(new No((P0(fpe),fpe.k+" must have a source and target "+(P0(a7t),a7t.k)+" specified.")));if(t.a.d==t.a.e)throw it(new No("Network simplex does not support self-loops: "+t.a+" "+t.a.d+" "+t.a.e));return _j(t.a.d.g,t.a),_j(t.a.e.b,t.a),t.a}function Nwn(t,e,n){var r,s,o,h,d,v,k;for(k=new Op(new F$t(t)),h=lt(ct(Jbe,1),h1e,11,0,[e,n]),d=0,v=h.length;dv-t.b&&dv-t.a&&d0&&++H;++j}return H}function Uwn(t,e){var n,r,s,o,h;for(h=u(Q(e,(gv(),d_t)),425),o=ei(e.b,0);o.b!=o.d.c;)if(s=u(ti(o),86),t.b[s.g]==0){switch(h.g){case 0:Cse(t,s);break;case 1:Ybn(t,s)}t.b[s.g]=2}for(r=ei(t.a,0);r.b!=r.d.c;)n=u(ti(r),188),ay(n.b.d,n,!0),ay(n.c.b,n,!0);Jt(e,(fc(),a_t),t.a)}function ou(t,e){to();var n,r,s,o;return e?e==(Ii(),H5e)||(e==D5e||e==X2||e==M5e)&&t!=ELt?new Axt(t,e):(r=u(e,677),n=r.pk(),n||(M8(To(($u(),ya),e)),n=r.pk()),o=(!n.i&&(n.i=new _r),n.i),s=u(ec(Lo(o.f,t)),1942),!s&&ki(o,t,s=new Axt(t,e)),s):S5e}function Wwn(t,e){var n,r,s,o,h,d,v,k,C;for(v=u(Q(t,(ae(),_i)),11),k=Yo(lt(ct(Ws,1),ee,8,0,[v.i.n,v.n,v.a])).a,C=t.i.n.b,n=wd(t.e),s=n,o=0,h=s.length;o0?o.a?(d=o.b.rf().a,n>d&&(s=(n-d)/2,o.d.b=s,o.d.c=s)):o.d.c=t.s+n:S9(t.u)&&(r=I4t(o.b),r.c<0&&(o.d.b=-r.c),r.c+r.b>o.b.rf().a&&(o.d.c=r.c+r.b-o.b.rf().a))}function Qwn(t,e){var n,r,s,o;for(vr(e,"Semi-Interactive Crossing Minimization Processor",1),n=!1,s=new S(t.b);s.a=0){if(e==n)return new fa(pe(-e-1),pe(-e-1));if(e==-n)return new fa(pe(-e),pe(n+1))}return b.Math.abs(e)>b.Math.abs(n)?e<0?new fa(pe(-e),pe(n)):new fa(pe(-e),pe(n+1)):new fa(pe(e+1),pe(n))}function tvn(t){var e,n;n=u(Q(t,(Te(),uu)),163),e=u(Q(t,(ae(),B2)),303),n==(dh(),bb)?(Jt(t,uu,MO),Jt(t,B2,(q0(),Y4))):n==jy?(Jt(t,uu,MO),Jt(t,B2,(q0(),F6))):e==(q0(),Y4)?(Jt(t,uu,bb),Jt(t,B2,CO)):e==F6&&(Jt(t,uu,jy),Jt(t,B2,CO))}function kq(){kq=Z,jO=new jQ,Zme=bi(new Vs,(Wa(),cu),(ro(),EV)),eye=Ku(bi(new Vs,cu,DV),Io,MV),nye=uv(uv(VR(Ku(bi(new Vs,Dd,FV),Io,PV),qc),OV),NV),Jme=Ku(bi(bi(bi(new Vs,gb,CV),qc,SV),qc,u7),Io,_V),tye=Ku(bi(bi(new Vs,qc,u7),qc,kV),Io,xV)}function m_(){m_=Z,sye=bi(Ku(new Vs,(Wa(),Io),(ro(),nTt)),cu,EV),uye=uv(uv(VR(Ku(bi(new Vs,Dd,FV),Io,PV),qc),OV),NV),aye=Ku(bi(bi(bi(new Vs,gb,CV),qc,SV),qc,u7),Io,_V),cye=bi(bi(new Vs,cu,DV),Io,MV),oye=Ku(bi(bi(new Vs,qc,u7),qc,kV),Io,xV)}function evn(t,e,n,r,s){var o,h;(!Ga(e)&&e.c.i.c==e.d.i.c||!fne(Yo(lt(ct(Ws,1),ee,8,0,[s.i.n,s.n,s.a])),n))&&!Ga(e)&&(e.c==s?m8(e.a,0,new xo(n)):ri(e.a,new xo(n)),r&&!I0(t.a,n)&&(h=u(Q(e,(Te(),So)),74),h||(h=new Pu,Jt(e,So,h)),o=new xo(n),fs(h,o,h.c.b,h.c),Fs(t.a,o)))}function nvn(t){var e,n;for(n=new ar(lr(jo(t).a.Kc(),new z));zr(n);)if(e=u(Mr(n),17),e.c.i.k!=(Vn(),Ll))throw it(new R3(Kot+rI(t)+"' has its layer constraint set to FIRST, but has at least one incoming edge that does not come from a FIRST_SEPARATE node. That must not happen."))}function rvn(t,e,n){var r,s,o,h,d,v,k;if(s=bie(t.Db&254),s==0)t.Eb=n;else{if(s==1)d=Nt(Qn,De,1,2,5,1),o=Sst(t,e),o==0?(d[0]=n,d[1]=t.Eb):(d[0]=t.Eb,d[1]=n);else for(d=Nt(Qn,De,1,s+1,5,1),h=u2(t.Eb),r=2,v=0,k=0;r<=128;r<<=1)r==e?d[k++]=n:t.Db&r&&(d[k++]=h[v++]);t.Eb=d}t.Db|=e}function Jce(t,e,n){var r,s,o,h;for(this.b=new he,s=0,r=0,h=new S(t);h.a0&&(o=u(Ne(this.b,0),167),s+=o.o,r+=o.p),s*=2,r*=2,e>1?s=ps(b.Math.ceil(s*e)):r=ps(b.Math.ceil(r/e)),this.a=new C3t(s,r)}function tue(t,e,n,r,s,o){var h,d,v,k,C,M,j,H,G,K,tt,gt;for(C=r,e.j&&e.o?(H=u(tr(t.f,e.A),57),K=H.d.c+H.d.b,--C):K=e.a.c+e.a.b,M=s,n.q&&n.o?(H=u(tr(t.f,n.C),57),k=H.d.c,++M):k=n.a.c,tt=k-K,v=b.Math.max(2,M-C),d=tt/v,G=K+d,j=C;j=0;h+=s?1:-1){for(d=e[h],v=r==(ve(),Hn)?s?Ko(d,r):l2(Ko(d,r)):s?l2(Ko(d,r)):Ko(d,r),o&&(t.c[d.p]=v.gc()),M=v.Kc();M.Ob();)C=u(M.Pb(),11),t.d[C.p]=k++;Ls(n,v)}}function eue(t,e,n){var r,s,o,h,d,v,k,C;for(o=Xt(ye(t.b.Kc().Pb())),k=Xt(ye(fun(e.b))),r=fd(nc(t.a),k-n),s=fd(nc(e.a),n-o),C=Li(r,s),fd(C,1/(k-o)),this.a=C,this.b=new he,d=!0,h=t.b.Kc(),h.Pb();h.Ob();)v=Xt(ye(h.Pb())),d&&v-n>Lct&&(this.b.Fc(n),d=!1),this.b.Fc(v);d&&this.b.Fc(n)}function ivn(t){var e,n,r,s;if(pmn(t,t.n),t.d.c.length>0){for(RC(t.c);w5t(t,u(J(new S(t.e.a)),121))>5,e&=31,r>=t.d)return t.e<0?(rb(),But):(rb(),s7);if(o=t.d-r,s=Nt(Cr,Xr,25,o+1,15,1),Qgn(s,o,t.a,r,e),t.e<0){for(n=0;n0&&t.a[n]<<32-e){for(n=0;n=0?!1:(n=C4(($u(),ya),s,e),n?(r=n.Zj(),(r>1||r==-1)&&Hw(To(ya,n))!=3):!0)):!1}function cvn(t,e,n,r){var s,o,h,d,v;return d=Do(u(At((!e.b&&(e.b=new Cn(br,e,4,7)),e.b),0),82)),v=Do(u(At((!e.c&&(e.c=new Cn(br,e,5,8)),e.c),0),82)),es(d)==es(v)||ey(v,d)?null:(h=cD(e),h==n?r:(o=u(tr(t.a,h),10),o&&(s=o.e,s)?s:null))}function uvn(t,e){var n;switch(n=u(Q(t,(Te(),uG)),276),vr(e,"Label side selection ("+n+")",1),n.g){case 0:mce(t,(zl(),f0));break;case 1:mce(t,(zl(),kb));break;case 2:Ple(t,(zl(),f0));break;case 3:Ple(t,(zl(),kb));break;case 4:pue(t,(zl(),f0));break;case 5:pue(t,(zl(),kb))}or(e)}function j5t(t,e,n){var r,s,o,h,d,v;if(r=YKe(n,t.length),h=t[r],h[0].k==(Vn(),ks))for(o=mHt(n,h.length),v=e.j,s=0;s0&&(n[0]+=t.d,h-=n[0]),n[2]>0&&(n[2]+=t.d,h-=n[2]),o=b.Math.max(0,h),n[1]=b.Math.max(n[1],h),vmt(t,eu,s.c+r.b+n[0]-(n[1]-h)/2,n),e==eu&&(t.c.b=o,t.c.c=s.c+r.b+(o-h)/2)}function fue(){this.c=Nt(aa,vo,25,(ve(),lt(ct(Xa,1),xc,61,0,[Zo,Pn,Hn,mr,Bn])).length,15,1),this.b=Nt(aa,vo,25,lt(ct(Xa,1),xc,61,0,[Zo,Pn,Hn,mr,Bn]).length,15,1),this.a=Nt(aa,vo,25,lt(ct(Xa,1),xc,61,0,[Zo,Pn,Hn,mr,Bn]).length,15,1),Abt(this.c,as),Abt(this.b,Cs),Abt(this.a,Cs)}function jc(t,e,n){var r,s,o,h;if(e<=n?(s=e,o=n):(s=n,o=e),r=0,t.b==null)t.b=Nt(Cr,Xr,25,2,15,1),t.b[0]=s,t.b[1]=o,t.c=!0;else{if(r=t.b.length,t.b[r-1]+1==s){t.b[r-1]=o;return}h=Nt(Cr,Xr,25,r+2,15,1),Dc(t.b,0,h,0,r),t.b=h,t.b[r-1]>=s&&(t.c=!1,t.a=!1),t.b[r++]=s,t.b[r]=o,t.c||v4(t)}}function wvn(t,e,n){var r,s,o,h,d,v,k;for(k=e.d,t.a=new Xc(k.c.length),t.c=new _r,d=new S(k);d.a=0?t._g(k,!1,!0):dv(t,n,!1),58));t:for(o=M.Kc();o.Ob();){for(s=u(o.Pb(),56),C=0;C1;)by(s,s.i-1);return r}function kvn(t,e){var n,r,s,o,h,d,v;for(vr(e,"Comment post-processing",1),o=new S(t.b);o.at.d[h.p]&&(n+=fmt(t.b,o),Up(t.a,pe(o)));for(;!BC(t.a);)Hmt(t.b,u(Hx(t.a),19).a)}return n}function bue(t,e,n){var r,s,o,h;for(o=(!e.a&&(e.a=new fe(rs,e,10,11)),e.a).i,s=new nr((!e.a&&(e.a=new fe(rs,e,10,11)),e.a));s.e!=s.i.gc();)r=u(dr(s),33),(!r.a&&(r.a=new fe(rs,r,10,11)),r.a).i==0||(o+=bue(t,r,!1));if(n)for(h=es(e);h;)o+=(!h.a&&(h.a=new fe(rs,h,10,11)),h.a).i,h=es(h);return o}function by(t,e){var n,r,s,o;return t.ej()?(r=null,s=t.fj(),t.ij()&&(r=t.kj(t.pi(e),null)),n=t.Zi(4,o=l6(t,e),null,e,s),t.bj()&&o!=null&&(r=t.dj(o,r)),r?(r.Ei(n),r.Fi()):t.$i(n),o):(o=l6(t,e),t.bj()&&o!=null&&(r=t.dj(o,null),r&&r.Fi()),o)}function Tvn(t){var e,n,r,s,o,h,d,v,k,C;for(k=t.a,e=new Hs,v=0,r=new S(t.d);r.ad.d&&(C=d.d+d.a+k));n.c.d=C,e.a.zc(n,e),v=b.Math.max(v,n.c.d+n.c.a)}return v}function oo(){oo=Z,KV=new Fm("COMMENTS",0),vh=new Fm("EXTERNAL_PORTS",1),yS=new Fm("HYPEREDGES",2),XV=new Fm("HYPERNODES",3),y7=new Fm("NON_FREE_PORTS",4),W4=new Fm("NORTH_SOUTH_PORTS",5),xS=new Fm(M1e,6),v7=new Fm("CENTER_LABELS",7),m7=new Fm("END_LABELS",8),QV=new Fm("PARTITIONS",9)}function wy(t){var e,n,r,s,o;for(s=new he,e=new E9((!t.a&&(t.a=new fe(rs,t,10,11)),t.a)),r=new ar(lr(K0(t).a.Kc(),new z));zr(r);)n=u(Mr(r),79),_t(At((!n.b&&(n.b=new Cn(br,n,4,7)),n.b),0),186)||(o=Do(u(At((!n.c&&(n.c=new Cn(br,n,5,8)),n.c),0),82)),e.a._b(o)||(s.c[s.c.length]=o));return s}function Cvn(t){var e,n,r,s,o,h;for(o=new Hs,e=new E9((!t.a&&(t.a=new fe(rs,t,10,11)),t.a)),s=new ar(lr(K0(t).a.Kc(),new z));zr(s);)r=u(Mr(s),79),_t(At((!r.b&&(r.b=new Cn(br,r,4,7)),r.b),0),186)||(h=Do(u(At((!r.c&&(r.c=new Cn(br,r,5,8)),r.c),0),82)),e.a._b(h)||(n=o.a.zc(h,o),n==null));return o}function _vn(t,e,n,r,s){return r<0?(r=w4(t,s,lt(ct(Ae,1),ee,2,6,[Qat,Zat,Jat,tot,w6,eot,not,rot,iot,sot,aot,oot]),e),r<0&&(r=w4(t,s,lt(ct(Ae,1),ee,2,6,["Jan","Feb","Mar","Apr",w6,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),e)),r<0?!1:(n.k=r,!0)):r>0?(n.k=r-1,!0):!1}function Svn(t,e,n,r,s){return r<0?(r=w4(t,s,lt(ct(Ae,1),ee,2,6,[Qat,Zat,Jat,tot,w6,eot,not,rot,iot,sot,aot,oot]),e),r<0&&(r=w4(t,s,lt(ct(Ae,1),ee,2,6,["Jan","Feb","Mar","Apr",w6,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),e)),r<0?!1:(n.k=r,!0)):r>0?(n.k=r-1,!0):!1}function Avn(t,e,n,r,s,o){var h,d,v,k;if(d=32,r<0){if(e[0]>=t.length||(d=wa(t,e[0]),d!=43&&d!=45)||(++e[0],r=gq(t,e),r<0))return!1;d==45&&(r=-r)}return d==32&&e[0]-n==2&&s.b==2&&(v=new BR,k=v.q.getFullYear()-ab+ab-80,h=k%100,o.a=r==h,r+=(k/100|0)*100+(r=k&&(v=r);v&&(C=b.Math.max(C,v.a.o.a)),C>j&&(M=k,j=C)}return M}function Dvn(t,e,n){var r,s,o;if(t.e=n,t.d=0,t.b=0,t.f=1,t.i=e,(t.e&16)==16&&(t.i=wmn(t.i)),t.j=t.i.length,fi(t),o=cv(t),t.d!=t.j)throw it(new Nr(qr((Pr(),Zde))));if(t.g){for(r=0;rJ1e?Zs(v,t.b):r<=J1e&&r>tde?Zs(v,t.d):r<=tde&&r>ede?Zs(v,t.c):r<=ede&&Zs(v,t.a),o=yue(t,v,o);return s}function rb(){rb=Z;var t;for(eV=new Ng(1,1),Rut=new Ng(1,10),s7=new Ng(0,0),But=new Ng(-1,1),CEt=lt(ct(j4,1),ee,91,0,[s7,eV,new Ng(1,2),new Ng(1,3),new Ng(1,4),new Ng(1,5),new Ng(1,6),new Ng(1,7),new Ng(1,8),new Ng(1,9),Rut]),nV=Nt(j4,ee,91,32,0,1),t=0;t1,d&&(r=new $e(s,n.b),ri(e.a,r)),V9(e.a,lt(ct(Ws,1),ee,8,0,[j,M]))}function Cue(t){Mw(t,new k2(_w(Ew(Cw(Tw(new kg,AH),"ELK Randomizer"),'Distributes the nodes randomly on the plane, leading to very obfuscating layouts. Can be useful to demonstrate the power of "real" layout algorithms.'),new ZZ))),xe(t,AH,xv,FAt),xe(t,AH,Cy,15),xe(t,AH,tH,pe(0)),xe(t,AH,E6,GE)}function q5t(){q5t=Z;var t,e,n,r,s,o;for(dA=Nt(Gu,N4,25,255,15,1),yU=Nt(xh,yd,25,16,15,1),e=0;e<255;e++)dA[e]=-1;for(n=57;n>=48;n--)dA[n]=n-48<<24>>24;for(r=70;r>=65;r--)dA[r]=r-65+10<<24>>24;for(s=102;s>=97;s--)dA[s]=s-97+10<<24>>24;for(o=0;o<10;o++)yU[o]=48+o&ys;for(t=10;t<=15;t++)yU[t]=65+t-10&ys}function Tq(t,e,n){var r,s,o,h,d,v,k,C;return d=e.i-t.g/2,v=n.i-t.g/2,k=e.j-t.g/2,C=n.j-t.g/2,o=e.g+t.g/2,h=n.g+t.g/2,r=e.f+t.g/2,s=n.f+t.g/2,d>19)return"-"+_ue(rE(t));for(n=t,r="";!(n.l==0&&n.m==0&&n.h==0);){if(s=Vrt(Gq),n=yxt(n,s,!0),e=""+RHt(hb),!(n.l==0&&n.m==0&&n.h==0))for(o=9-e.length;o>0;o--)e="0"+e;r=e+r}return r}function Bvn(){if(!Object.create||!Object.getOwnPropertyNames)return!1;var t="__proto__",e=Object.create(null);if(e[t]!==void 0)return!1;var n=Object.getOwnPropertyNames(e);return!(n.length!=0||(e[t]=42,e[t]!==42)||Object.getOwnPropertyNames(e).length==0)}function Rvn(t){var e,n,r,s,o,h,d;for(e=!1,n=0,s=new S(t.d.b);s.a=t.a||!L4t(e,n))return-1;if(F8(u(r.Kb(e),20)))return 1;for(s=0,h=u(r.Kb(e),20).Kc();h.Ob();)if(o=u(h.Pb(),17),v=o.c.i==e?o.d.i:o.c.i,d=V5t(t,v,n,r),d==-1||(s=b.Math.max(s,d),s>t.c-1))return-1;return s+1}function Sue(t,e){var n,r,s,o,h,d;if(Vt(e)===Vt(t))return!0;if(!_t(e,15)||(r=u(e,15),d=t.gc(),r.gc()!=d))return!1;if(h=r.Kc(),t.ni()){for(n=0;n0){if(t.qj(),e!=null){for(o=0;o>24;case 97:case 98:case 99:case 100:case 101:case 102:return t-97+10<<24>>24;case 65:case 66:case 67:case 68:case 69:case 70:return t-65+10<<24>>24;default:throw it(new ld("Invalid hexadecimal"))}}function qvn(t,e,n){var r,s,o,h;for(vr(n,"Processor order nodes",2),t.a=Xt(ye(Q(e,(gv(),g_t)))),s=new Zi,h=ei(e.b,0);h.b!=h.d.c;)o=u(ti(h),86),je(Re(Q(o,(fc(),Xy))))&&fs(s,o,s.c.b,s.c);r=(Zn(s.b!=0),u(s.a.a.c,86)),Wle(t,r),!n.b&&pit(n,1),K5t(t,r,0-Xt(ye(Q(r,(fc(),IG))))/2,0),!n.b&&pit(n,1),or(n)}function Cq(){Cq=Z,i7t=new z3("SPIRAL",0),t7t=new z3("LINE_BY_LINE",1),e7t=new z3("MANHATTAN",2),JEt=new z3("JITTER",3),Vut=new z3("QUADRANTS_LINE_BY_LINE",4),r7t=new z3("QUADRANTS_MANHATTAN",5),n7t=new z3("QUADRANTS_JITTER",6),ZEt=new z3("COMBINE_LINE_BY_LINE_MANHATTAN",7),QEt=new z3("COMBINE_JITTER_MANHATTAN",8)}function Lue(t,e,n,r){var s,o,h,d,v,k;for(v=Ost(t,n),k=Ost(e,n),s=!1;v&&k&&(r||R1n(v,k,n));)h=Ost(v,n),d=Ost(k,n),kD(e),kD(t),o=v.c,Bat(v,!1),Bat(k,!1),n?(ly(e,k.p,o),e.p=k.p,ly(t,v.p+1,o),t.p=v.p):(ly(t,v.p,o),t.p=v.p,ly(e,k.p+1,o),e.p=k.p),Eo(v,null),Eo(k,null),v=h,k=d,s=!0;return s}function Hvn(t,e,n,r){var s,o,h,d,v;for(s=!1,o=!1,d=new S(r.j);d.a=e.length)throw it(new yo("Greedy SwitchDecider: Free layer not in graph."));this.c=e[t],this.e=new YM(r),mit(this.e,this.c,(ve(),Bn)),this.i=new YM(r),mit(this.i,this.c,Hn),this.f=new SKt(this.c),this.a=!o&&s.i&&!s.s&&this.c[0].k==(Vn(),ks),this.a&&apn(this,t,e.length)}function Due(t,e){var n,r,s,o,h,d;o=!t.B.Hc((ll(),cP)),h=t.B.Hc(Aft),t.a=new _ie(h,o,t.c),t.n&&Pvt(t.a.n,t.n),het(t.g,(Kf(),eu),t.a),e||(r=new a_(1,o,t.c),r.n.a=t.k,zx(t.p,(ve(),Pn),r),s=new a_(1,o,t.c),s.n.d=t.k,zx(t.p,mr,s),d=new a_(0,o,t.c),d.n.c=t.k,zx(t.p,Bn,d),n=new a_(0,o,t.c),n.n.b=t.k,zx(t.p,Hn,n))}function Gvn(t){var e,n,r;switch(e=u(Q(t.d,(Te(),eg)),218),e.g){case 2:n=xxn(t);break;case 3:n=(r=new he,ls(Ri(wu(Wo(Wo(new Tn(null,new _n(t.d.b,16)),new NX),new BX),new HT),new _X),new Utt(r)),r);break;default:throw it(new No("Compaction not supported for "+e+" edges."))}H3n(t,n),va(new Sm(t.g),new Vtt(t))}function Uvn(t,e){var n;return n=new ka,e&&Mo(n,u(tr(t.a,lP),94)),_t(e,470)&&Mo(n,u(tr(t.a,hP),94)),_t(e,354)?(Mo(n,u(tr(t.a,qo),94)),n):(_t(e,82)&&Mo(n,u(tr(t.a,br),94)),_t(e,239)?(Mo(n,u(tr(t.a,rs),94)),n):_t(e,186)?(Mo(n,u(tr(t.a,gl),94)),n):(_t(e,352)&&Mo(n,u(tr(t.a,Ys),94)),n))}function Jf(){Jf=Z,c7=new eo((ui(),ZG),pe(1)),bV=new eo(W2,80),kbe=new eo(fAt,5),dbe=new eo(W6,GE),ybe=new eo(Eft,pe(1)),xbe=new eo(Tft,(Nn(),!0)),x7t=new Ow(50),vbe=new eo(U2,x7t),v7t=KG,k7t=KS,gbe=new eo(gft,!1),y7t=tP,wbe=xb,bbe=G2,pbe=o5,mbe=Qy,m7t=(q4t(),abe),nlt=lbe,pV=sbe,elt=obe,E7t=ube}function Wvn(t){var e,n,r,s,o,h,d,v;for(v=new OJt,d=new S(t.a);d.a0&&e=0)return!1;if(e.p=n.b,le(n.e,e),s==(Vn(),ta)||s==Hc){for(h=new S(e.j);h.a1||h==-1)&&(o|=16),s.Bb&dc&&(o|=64)),n.Bb&Ka&&(o|=Dy),o|=xf):_t(e,457)?o|=512:(r=e.Bj(),r&&r.i&1&&(o|=256)),t.Bb&512&&(o|=128),o}function y_(t,e){var n,r,s,o,h;for(t=t==null?_u:(On(t),t),s=0;st.d[d.p]&&(n+=fmt(t.b,o),Up(t.a,pe(o)))):++h;for(n+=t.b.d*h;!BC(t.a);)Hmt(t.b,u(Hx(t.a),19).a)}return n}function nmn(t,e){var n;return t.f==$ft?(n=Hw(To(($u(),ya),e)),t.e?n==4&&e!=(d6(),tk)&&e!=(d6(),J6)&&e!=(d6(),zft)&&e!=(d6(),qft):n==2):t.d&&(t.d.Hc(e)||t.d.Hc(Kx(To(($u(),ya),e)))||t.d.Hc(C4(($u(),ya),t.b,e)))?!0:t.f&&O5t(($u(),t.f),rD(To(ya,e)))?(n=Hw(To(ya,e)),t.e?n==4:n==2):!1}function rmn(t,e,n,r){var s,o,h,d,v,k,C,M;return h=u(qe(n,(ui(),Y6)),8),v=h.a,C=h.b+t,s=b.Math.atan2(C,v),s<0&&(s+=O4),s+=e,s>O4&&(s-=O4),d=u(qe(r,Y6),8),k=d.a,M=d.b+t,o=b.Math.atan2(M,k),o<0&&(o+=O4),o+=e,o>O4&&(o-=O4),k1(),wf(1e-10),b.Math.abs(s-o)<=1e-10||s==o||isNaN(s)&&isNaN(o)?0:so?1:Iw(isNaN(s),isNaN(o))}function gat(t){var e,n,r,s,o,h,d;for(d=new _r,r=new S(t.a.b);r.a=t.o)throw it(new Opt);d=e>>5,h=e&31,o=F0(1,Ar(F0(h,1))),s?t.n[n][d]=S1(t.n[n][d],o):t.n[n][d]=Ns(t.n[n][d],Rwt(o)),o=F0(o,1),r?t.n[n][d]=S1(t.n[n][d],o):t.n[n][d]=Ns(t.n[n][d],Rwt(o))}catch(v){throw v=Wi(v),_t(v,320)?it(new yo(Fot+t.o+"*"+t.p+Not+e+Ya+n+Bot)):it(v)}}function K5t(t,e,n,r){var s,o,h;e&&(o=Xt(ye(Q(e,(fc(),np))))+r,h=n+Xt(ye(Q(e,IG)))/2,Jt(e,$ht,pe(Ar(Tu(b.Math.round(o))))),Jt(e,o_t,pe(Ar(Tu(b.Math.round(h))))),e.d.b==0||K5t(t,u(xj((s=ei(new Lp(e).a.d,0),new Ex(s))),86),n+Xt(ye(Q(e,IG)))+t.a,r+Xt(ye(Q(e,M7)))),Q(e,jht)!=null&&K5t(t,u(Q(e,jht),86),n,r))}function smn(t,e){var n,r,s,o,h,d,v,k,C,M,j;for(v=Na(e.a),s=Xt(ye(Q(v,(Te(),q2))))*2,C=Xt(ye(Q(v,t5))),k=b.Math.max(s,C),o=Nt(aa,vo,25,e.f-e.c+1,15,1),r=-k,n=0,d=e.b.Kc();d.Ob();)h=u(d.Pb(),10),r+=t.a[h.c.p]+k,o[n++]=r;for(r+=t.a[e.a.c.p]+k,o[n++]=r,j=new S(e.e);j.a0&&(r=(!t.n&&(t.n=new fe(qo,t,1,7)),u(At(t.n,0),137)).a,!r||Gr(Gr((e.a+=' "',e),r),'"'))),Gr(Aw(Gr(Aw(Gr(Aw(Gr(Aw((e.a+=" (",e),t.i),","),t.j)," | "),t.g),","),t.f),")"),e.a)}function zue(t){var e,n,r;return t.Db&64?Vst(t):(e=new Ol(y8t),n=t.k,n?Gr(Gr((e.a+=' "',e),n),'"'):(!t.n&&(t.n=new fe(qo,t,1,7)),t.n.i>0&&(r=(!t.n&&(t.n=new fe(qo,t,1,7)),u(At(t.n,0),137)).a,!r||Gr(Gr((e.a+=' "',e),r),'"'))),Gr(Aw(Gr(Aw(Gr(Aw(Gr(Aw((e.a+=" (",e),t.i),","),t.j)," | "),t.g),","),t.f),")"),e.a)}function bat(t,e){var n,r,s,o,h,d,v;if(e==null||e.length==0)return null;if(s=u(Nc(t.a,e),149),!s){for(r=(d=new v1(t.b).a.vc().Kc(),new m1(d));r.a.Ob();)if(n=(o=u(r.a.Pb(),42),u(o.dd(),149)),h=n.c,v=e.length,hn(h.substr(h.length-v,v),e)&&(e.length==h.length||wa(h,h.length-e.length-1)==46)){if(s)return null;s=n}s&&ko(t.a,e,s)}return s}function cmn(t,e){var n,r,s,o;return n=new eh,r=u(Bl(wu(new Tn(null,new _n(t.f,16)),n),Zm(new on,new ni,new di,new Ee,lt(ct(fl,1),oe,132,0,[(O1(),Iy),Ul]))),21),s=r.gc(),r=u(Bl(wu(new Tn(null,new _n(e.f,16)),n),Zm(new on,new ni,new di,new Ee,lt(ct(fl,1),oe,132,0,[Iy,Ul]))),21),o=r.gc(),ss.p?(Bs(o,mr),o.d&&(d=o.o.b,e=o.a.b,o.a.b=d-e)):o.j==mr&&s.p>t.p&&(Bs(o,Pn),o.d&&(d=o.o.b,e=o.a.b,o.a.b=-(d-e)));break}return s}function lmn(t,e,n,r){var s,o,h,d,v,k,C,M,j,H,G;if(o=n,n1,d&&(r=new $e(s,n.b),ri(e.a,r)),V9(e.a,lt(ct(Ws,1),ee,8,0,[j,M]))}function wat(t,e,n){var r,s,o,h,d,v;if(e)if(n<=-1){if(r=yn(e.Tg(),-1-n),_t(r,99))return u(r,18);for(h=u(e.ah(r),153),d=0,v=h.gc();d0){for(s=v.length;s>0&&v[s-1]=="";)--s;s=40,h&&xyn(t),C3n(t),ivn(t),n=fie(t),r=0;n&&r0&&ri(t.f,o)):(t.c[h]-=k+1,t.c[h]<=0&&t.a[h]>0&&ri(t.e,o))))}function Nmn(t){var e,n,r,s,o,h,d,v,k;for(d=new Op(u(Lr(new jd),62)),k=Cs,n=new S(t.d);n.a=0&&vn?e:n;k<=M;++k)k==n?d=r++:(o=s[k],C=G.rl(o.ak()),k==e&&(v=k==M&&!C?r-1:r),C&&++r);return j=u(r_(t,e,n),72),d!=v&&n8(t,new mD(t.e,7,h,pe(d),H.dd(),v)),j}}else return u(Jst(t,e,n),72);return u(r_(t,e,n),72)}function $mn(t,e){var n,r,s,o,h,d,v;for(vr(e,"Port order processing",1),v=u(Q(t,(Te(),v9t)),421),r=new S(t.b);r.a=0&&(d=H1n(t,h),!(d&&(k<22?v.l|=1<>>1,h.m=C>>>1|(M&1)<<21,h.l=j>>>1|(C&1)<<21,--k;return n&&Ait(v),o&&(r?(hb=rE(t),s&&(hb=tre(hb,(q8(),aEt)))):hb=iu(t.l,t.m,t.h)),v}function Hmn(t,e){var n,r,s,o,h,d,v,k,C,M;for(k=t.e[e.c.p][e.p]+1,v=e.c.a.c.length+1,d=new S(t.a);d.a0&&(Rr(0,t.length),t.charCodeAt(0)==45||(Rr(0,t.length),t.charCodeAt(0)==43))?1:0,r=h;rn)throw it(new ld(yv+t+'"'));return d}function Vmn(t){var e,n,r,s,o,h,d;for(h=new Zi,o=new S(t.a);o.a1)&&e==1&&u(t.a[t.b],10).k==(Vn(),Ll)?p6(u(t.a[t.b],10),(zl(),f0)):r&&(!n||(t.c-t.b&t.a.length-1)>1)&&e==1&&u(t.a[t.c-1&t.a.length-1],10).k==(Vn(),Ll)?p6(u(t.a[t.c-1&t.a.length-1],10),(zl(),kb)):(t.c-t.b&t.a.length-1)==2?(p6(u(Q9(t),10),(zl(),f0)),p6(u(Q9(t),10),kb)):R2n(t,s),lmt(t)}function Wmn(t,e,n){var r,s,o,h,d;for(o=0,s=new nr((!t.a&&(t.a=new fe(rs,t,10,11)),t.a));s.e!=s.i.gc();)r=u(dr(s),33),h="",(!r.n&&(r.n=new fe(qo,r,1,7)),r.n).i==0||(h=u(At((!r.n&&(r.n=new fe(qo,r,1,7)),r.n),0),137).a),d=new Dit(o++,e,h),Mo(d,r),Jt(d,(fc(),qS),r),d.e.b=r.j+r.f/2,d.f.a=b.Math.max(r.g,1),d.e.a=r.i+r.g/2,d.f.b=b.Math.max(r.f,1),ri(e.b,d),au(n.f,r,d)}function Ymn(t){var e,n,r,s,o;r=u(Q(t,(ae(),_i)),33),o=u(qe(r,(Te(),$2)),174).Hc((Al(),K2)),t.e||(s=u(Q(t,Vc),21),e=new $e(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a),s.Hc((oo(),vh))?(wo(r,cs,(ua(),Gc)),wv(r,e.a,e.b,!1,!0)):je(Re(qe(r,uht)))||wv(r,e.a,e.b,!0,!0)),o?wo(r,$2,un(K2)):wo(r,$2,(n=u(Vf(rA),9),new sh(n,u(ff(n,n.length),9),0)))}function rxt(t,e,n){var r,s,o,h;if(e[0]>=t.length)return n.o=0,!0;switch(wa(t,e[0])){case 43:s=1;break;case 45:s=-1;break;default:return n.o=0,!0}if(++e[0],o=e[0],h=gq(t,e),h==0&&e[0]==o)return!1;if(e[0]=0&&d!=n&&(o=new Js(t,1,d,h,null),r?r.Ei(o):r=o),n>=0&&(o=new Js(t,1,n,d==n?h:null,e),r?r.Ei(o):r=o)),r}function sle(t){var e,n,r;if(t.b==null){if(r=new Ag,t.i!=null&&(go(r,t.i),r.a+=":"),t.f&256){for(t.f&256&&t.a!=null&&(lrn(t.i)||(r.a+="//"),go(r,t.a)),t.d!=null&&(r.a+="/",go(r,t.d)),t.f&16&&(r.a+="/"),e=0,n=t.j.length;ej?!1:(M=(v=__(r,j,!1),v.a),C+d+M<=e.b&&(vD(n,o-n.s),n.c=!0,vD(r,o-n.s),tI(r,n.s,n.t+n.d+d),r.k=!0,pyt(n.q,r),H=!0,s&&(az(e,r),r.j=e,t.c.length>h&&(sI((An(h,t.c.length),u(t.c[h],200)),r),(An(h,t.c.length),u(t.c[h],200)).a.c.length==0&&Fg(t,h)))),H)}function nyn(t,e){var n,r,s,o,h,d;if(vr(e,"Partition midprocessing",1),s=new Uw,ls(Ri(new Tn(null,new _n(t.a,16)),new KK),new mw(s)),s.d!=0){for(d=u(Bl(ZQt((o=s.i,new Tn(null,(o||(s.i=new K3(s,s.c))).Nc()))),c2(new ke,new ce,new Xn,lt(ct(fl,1),oe,132,0,[(O1(),Ul)]))),15),r=d.Kc(),n=u(r.Pb(),19);r.Ob();)h=u(r.Pb(),19),swn(u(Ai(s,n),21),u(Ai(s,h),21)),n=h;or(e)}}function cle(t,e,n){var r,s,o,h,d,v,k,C;if(e.p==0){for(e.p=1,h=n,h||(s=new he,o=(r=u(Vf(Xa),9),new sh(r,u(ff(r,r.length),9),0)),h=new fa(s,o)),u(h.a,15).Fc(e),e.k==(Vn(),ks)&&u(h.b,21).Fc(u(Q(e,(ae(),oc)),61)),v=new S(e.j);v.a0){if(s=u(t.Ab.g,1934),e==null){for(o=0;o1)for(r=new S(s);r.an.s&&dd&&(d=s,C.c=Nt(Qn,De,1,0,5,1)),s==d&&le(C,new fa(n.c.i,n)));wn(),Zs(C,t.c),Hm(t.b,v.p,C)}}function cyn(t,e){var n,r,s,o,h,d,v,k,C;for(h=new S(e.b);h.ad&&(d=s,C.c=Nt(Qn,De,1,0,5,1)),s==d&&le(C,new fa(n.d.i,n)));wn(),Zs(C,t.c),Hm(t.f,v.p,C)}}function lle(t){Mw(t,new k2(_w(Ew(Cw(Tw(new kg,Tv),"ELK Box"),"Algorithm for packing of unconnected boxes, i.e. graphs without edges."),new qZ))),xe(t,Tv,xv,PSt),xe(t,Tv,Cy,15),xe(t,Tv,VI,pe(0)),xe(t,Tv,CH,Ie(DSt)),xe(t,Tv,D4,Ie(e4e)),xe(t,Tv,T6,Ie(n4e)),xe(t,Tv,E6,cde),xe(t,Tv,GI,Ie(ISt)),xe(t,Tv,C6,Ie(OSt)),xe(t,Tv,g8t,Ie(lft)),xe(t,Tv,mH,Ie(t4e))}function hle(t,e){var n,r,s,o,h,d,v,k,C;if(s=t.i,h=s.o.a,o=s.o.b,h<=0&&o<=0)return ve(),Zo;switch(k=t.n.a,C=t.n.b,d=t.o.a,n=t.o.b,e.g){case 2:case 1:if(k<0)return ve(),Bn;if(k+d>h)return ve(),Hn;break;case 4:case 3:if(C<0)return ve(),Pn;if(C+n>o)return ve(),mr}return v=(k+d/2)/h,r=(C+n/2)/o,v+r<=1&&v-r<=0?(ve(),Bn):v+r>=1&&v-r>=0?(ve(),Hn):r<.5?(ve(),Pn):(ve(),mr)}function uyn(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G,K;for(n=!1,C=Xt(ye(Q(e,(Te(),$v)))),G=sb*C,s=new S(e.b);s.av+G&&(K=M.g+j.g,j.a=(j.g*j.a+M.g*M.a)/K,j.g=K,M.f=j,n=!0)),o=d,M=j;return n}function fle(t,e,n,r,s,o,h){var d,v,k,C,M,j;for(j=new Fx,k=e.Kc();k.Ob();)for(d=u(k.Pb(),839),M=new S(d.wf());M.a0?d.a?(k=d.b.rf().b,s>k&&(t.v||d.c.d.c.length==1?(h=(s-k)/2,d.d.d=h,d.d.a=h):(n=u(Ne(d.c.d,0),181).rf().b,r=(n-k)/2,d.d.d=b.Math.max(0,r),d.d.a=s-r-k))):d.d.a=t.t+s:S9(t.u)&&(o=I4t(d.b),o.d<0&&(d.d.d=-o.d),o.d+o.a>d.b.rf().b&&(d.d.a=o.d+o.a-d.b.rf().b))}function fyn(t,e){var n;switch(_D(t)){case 6:return ra(e);case 7:return Bm(e);case 8:return Nm(e);case 3:return Array.isArray(e)&&(n=_D(e),!(n>=14&&n<=16));case 11:return e!=null&&typeof e===Gat;case 12:return e!=null&&(typeof e===MI||typeof e==Gat);case 0:return gst(e,t.__elementTypeId$);case 2:return Znt(e)&&e.im!==Et;case 1:return Znt(e)&&e.im!==Et||gst(e,t.__elementTypeId$);default:return!0}}function dle(t,e){var n,r,s,o;return r=b.Math.min(b.Math.abs(t.c-(e.c+e.b)),b.Math.abs(t.c+t.b-e.c)),o=b.Math.min(b.Math.abs(t.d-(e.d+e.a)),b.Math.abs(t.d+t.a-e.d)),n=b.Math.abs(t.c+t.b/2-(e.c+e.b/2)),n>t.b/2+e.b/2||(s=b.Math.abs(t.d+t.a/2-(e.d+e.a/2)),s>t.a/2+e.a/2)?1:n==0&&s==0?0:n==0?o/s+1:s==0?r/n+1:b.Math.min(r/n,o/s)+1}function gle(t,e){var n,r,s,o,h,d;return s=Jmt(t),d=Jmt(e),s==d?t.e==e.e&&t.a<54&&e.a<54?t.fe.f?1:0:(r=t.e-e.e,n=(t.d>0?t.d:b.Math.floor((t.a-1)*Cfe)+1)-(e.d>0?e.d:b.Math.floor((e.a-1)*Cfe)+1),n>r+1?s:n0&&(h=e4(h,Nle(r))),Uie(o,h))):s0&&t.d!=(q9(),slt)&&(d+=h*(r.d.a+t.a[e.b][r.b]*(e.d.a-r.d.a)/n)),n>0&&t.d!=(q9(),rlt)&&(v+=h*(r.d.b+t.a[e.b][r.b]*(e.d.b-r.d.b)/n)));switch(t.d.g){case 1:return new $e(d/o,e.d.b);case 2:return new $e(e.d.a,v/o);default:return new $e(d/o,v/o)}}function ple(t,e){oE();var n,r,s,o,h;if(h=u(Q(t.i,(Te(),cs)),98),o=t.j.g-e.j.g,o!=0||!(h==(ua(),Y2)||h==g0||h==Gc))return 0;if(h==(ua(),Y2)&&(n=u(Q(t,tp),19),r=u(Q(e,tp),19),n&&r&&(s=n.a-r.a,s!=0)))return s;switch(t.j.g){case 1:return Ms(t.n.a,e.n.a);case 2:return Ms(t.n.b,e.n.b);case 3:return Ms(e.n.a,t.n.a);case 4:return Ms(e.n.b,t.n.b);default:throw it(new No(E6t))}}function ble(t){var e,n,r,s,o,h;for(n=(!t.a&&(t.a=new As(Gh,t,5)),t.a).i+2,h=new Xc(n),le(h,new $e(t.j,t.k)),ls(new Tn(null,(!t.a&&(t.a=new As(Gh,t,5)),new _n(t.a,16))),new lzt(h)),le(h,new $e(t.b,t.c)),e=1;e0&&($D(v,!1,(ao(),zh)),$D(v,!0,Cf)),xu(e.g,new oGt(t,n)),ki(t.g,e,n)}function vle(){vle=Z;var t;for(gEt=lt(ct(Cr,1),Xr,25,15,[-1,-1,30,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5]),Fut=Nt(Cr,Xr,25,37,15,1),$ge=lt(ct(Cr,1),Xr,25,15,[-1,-1,63,40,32,28,25,23,21,20,19,19,18,18,17,17,16,16,16,15,15,15,15,14,14,14,14,14,14,13,13,13,13,13,13,13,13]),pEt=Nt(Ob,wot,25,37,14,1),t=2;t<=36;t++)Fut[t]=ps(b.Math.pow(t,gEt[t])),pEt[t]=aI(qq,Fut[t])}function gyn(t){var e;if((!t.a&&(t.a=new fe(Ji,t,6,6)),t.a).i!=1)throw it(new Fn(Sde+(!t.a&&(t.a=new fe(Ji,t,6,6)),t.a).i));return e=new Pu,RD(u(At((!t.b&&(t.b=new Cn(br,t,4,7)),t.b),0),82))&&Ua(e,tfe(t,RD(u(At((!t.b&&(t.b=new Cn(br,t,4,7)),t.b),0),82)),!1)),RD(u(At((!t.c&&(t.c=new Cn(br,t,5,8)),t.c),0),82))&&Ua(e,tfe(t,RD(u(At((!t.c&&(t.c=new Cn(br,t,5,8)),t.c),0),82)),!0)),e}function mle(t,e){var n,r,s,o,h;for(e.d?s=t.a.c==(bd(),zv)?jo(e.b):Ds(e.b):s=t.a.c==(bd(),ep)?jo(e.b):Ds(e.b),o=!1,r=new ar(lr(s.a.Kc(),new z));zr(r);)if(n=u(Mr(r),17),h=je(t.a.f[t.a.g[e.b.p].p]),!(!h&&!Ga(n)&&n.c.i.c==n.d.i.c)&&!(je(t.a.n[t.a.g[e.b.p].p])||je(t.a.n[t.a.g[e.b.p].p]))&&(o=!0,I0(t.b,t.a.g[T1n(n,e.b).p])))return e.c=!0,e.a=n,e;return e.c=o,e.a=null,e}function pyn(t,e,n,r,s){var o,h,d,v,k,C,M;for(wn(),Zs(t,new XZ),d=new da(t,0),M=new he,o=0;d.bo*2?(C=new rz(M),k=Ru(h)/El(h),v=zat(C,e,new Cx,n,r,s,k),Li(Gf(C.e),v),M.c=Nt(Qn,De,1,0,5,1),o=0,M.c[M.c.length]=C,M.c[M.c.length]=h,o=Ru(C)*El(C)+Ru(h)*El(h)):(M.c[M.c.length]=h,o+=Ru(h)*El(h));return M}function sxt(t,e,n){var r,s,o,h,d,v,k;if(r=n.gc(),r==0)return!1;if(t.ej())if(v=t.fj(),y3t(t,e,n),h=r==1?t.Zi(3,null,n.Kc().Pb(),e,v):t.Zi(5,null,n,e,v),t.bj()){for(d=r<100?null:new Dp(r),o=e+r,s=e;s0){for(h=0;h>16==-15&&t.Cb.nh()&&rit(new Jrt(t.Cb,9,13,n,t.c,Hg(al(u(t.Cb,59)),t))):_t(t.Cb,88)&&t.Db>>16==-23&&t.Cb.nh()&&(e=t.c,_t(e,88)||(e=(dn(),Kh)),_t(n,88)||(n=(dn(),Kh)),rit(new Jrt(t.Cb,9,10,n,e,Hg(Lc(u(t.Cb,26)),t)))))),t.c}function byn(t,e){var n,r,s,o,h,d,v,k,C,M;for(vr(e,"Hypernodes processing",1),s=new S(t.b);s.an);return s}function xle(t,e){var n,r,s;r=ul(t.d,1)!=0,!je(Re(Q(e.j,(ae(),Ov))))&&!je(Re(Q(e.j,X4)))||Vt(Q(e.j,(Te(),wb)))===Vt((V0(),vb))?e.c.Tf(e.e,r):r=je(Re(Q(e.j,Ov))),yI(t,e,r,!0),je(Re(Q(e.j,X4)))&&Jt(e.j,X4,(Nn(),!1)),je(Re(Q(e.j,Ov)))&&(Jt(e.j,Ov,(Nn(),!1)),Jt(e.j,X4,!0)),n=Kst(t,e);do{if(hyt(t),n==0)return 0;r=!r,s=n,yI(t,e,r,!1),n=Kst(t,e)}while(s>n);return s}function kle(t,e,n){var r,s,o,h,d,v,k,C,M,j,H,G;if(e==n)return!0;if(e=p5t(t,e),n=p5t(t,n),r=xst(e),r){if(C=xst(n),C!=r)return C?(v=r.Dj(),G=C.Dj(),v==G&&v!=null):!1;if(h=(!e.d&&(e.d=new As(ho,e,1)),e.d),o=h.i,j=(!n.d&&(n.d=new As(ho,n,1)),n.d),o==j.i){for(k=0;k0,d=Bz(e,o),N2t(n?d.b:d.g,e),u4(d).c.length==1&&fs(r,d,r.c.b,r.c),s=new fa(o,e),Up(t.o,s),mu(t.e.a,o))}function _le(t,e){var n,r,s,o,h,d,v;return r=b.Math.abs(e$(t.b).a-e$(e.b).a),d=b.Math.abs(e$(t.b).b-e$(e.b).b),s=0,v=0,n=1,h=1,r>t.b.b/2+e.b.b/2&&(s=b.Math.min(b.Math.abs(t.b.c-(e.b.c+e.b.b)),b.Math.abs(t.b.c+t.b.b-e.b.c)),n=1-s/r),d>t.b.a/2+e.b.a/2&&(v=b.Math.min(b.Math.abs(t.b.d-(e.b.d+e.b.a)),b.Math.abs(t.b.d+t.b.a-e.b.d)),h=1-v/d),o=b.Math.min(n,h),(1-o)*b.Math.sqrt(r*r+d*d)}function kyn(t){var e,n,r,s;for($at(t,t.e,t.f,(Gw(),yb),!0,t.c,t.i),$at(t,t.e,t.f,yb,!1,t.c,t.i),$at(t,t.e,t.f,r5,!0,t.c,t.i),$at(t,t.e,t.f,r5,!1,t.c,t.i),Tyn(t,t.c,t.e,t.f,t.i),r=new da(t.i,0);r.b=65;n--)Y1[n]=n-65<<24>>24;for(r=122;r>=97;r--)Y1[r]=r-97+26<<24>>24;for(s=57;s>=48;s--)Y1[s]=s-48+52<<24>>24;for(Y1[43]=62,Y1[47]=63,o=0;o<=25;o++)lp[o]=65+o&ys;for(h=26,v=0;h<=51;++h,v++)lp[h]=97+v&ys;for(t=52,d=0;t<=61;++t,d++)lp[t]=48+d&ys;lp[62]=43,lp[63]=47}function Eyn(t,e){var n,r,s,o,h,d,v,k,C,M,j,H;if(t.dc())return new Ca;for(k=0,M=0,s=t.Kc();s.Ob();)r=u(s.Pb(),37),o=r.f,k=b.Math.max(k,o.a),M+=o.a*o.b;for(k=b.Math.max(k,b.Math.sqrt(M)*Xt(ye(Q(u(t.Kc().Pb(),37),(Te(),rG))))),j=0,H=0,v=0,n=e,d=t.Kc();d.Ob();)h=u(d.Pb(),37),C=h.f,j+C.a>k&&(j=0,H+=v+e,v=0),x_(h,j,H),n=b.Math.max(n,j+C.a),v=b.Math.max(v,C.b),j+=C.a+e;return new $e(n+e,H+v+e)}function Tyn(t,e,n,r,s){var o,h,d,v,k,C,M;for(h=new S(e);h.ao)return ve(),Hn;break;case 4:case 3:if(v<0)return ve(),Pn;if(v+t.f>s)return ve(),mr}return h=(d+t.g/2)/o,n=(v+t.f/2)/s,h+n<=1&&h-n<=0?(ve(),Bn):h+n>=1&&h-n>=0?(ve(),Hn):n<.5?(ve(),Pn):(ve(),mr)}function Cyn(t,e,n,r,s){var o,h;if(o=Pa(Ns(e[0],co),Ns(r[0],co)),t[0]=Ar(o),o=$p(o,32),n>=s){for(h=1;h0&&(s.b[h++]=0,s.b[h++]=o.b[0]-1),e=1;e0&&(oM(v,v.d-s.d),s.c==(Uf(),mb)&&bpt(v,v.a-s.d),v.d<=0&&v.i>0&&fs(e,v,e.c.b,e.c)));for(o=new S(t.f);o.a0&&(TC(d,d.i-s.d),s.c==(Uf(),mb)&&ww(d,d.b-s.d),d.i<=0&&d.d>0&&fs(n,d,n.c.b,n.c)))}function _yn(t,e,n){var r,s,o,h,d,v,k,C;for(vr(n,"Processor compute fanout",1),Xu(t.b),Xu(t.a),d=null,o=ei(e.b,0);!d&&o.b!=o.d.c;)k=u(ti(o),86),je(Re(Q(k,(fc(),Xy))))&&(d=k);for(v=new Zi,fs(v,d,v.c.b,v.c),Bhe(t,v),C=ei(e.b,0);C.b!=C.d.c;)k=u(ti(C),86),h=Br(Q(k,(fc(),zS))),s=Nc(t.b,h)!=null?u(Nc(t.b,h),19).a:0,Jt(k,MG,pe(s)),r=1+(Nc(t.a,h)!=null?u(Nc(t.a,h),19).a:0),Jt(k,pye,pe(r));or(n)}function Syn(t,e,n,r,s){var o,h,d,v,k,C,M,j,H,G;for(j=l0n(t,n),v=0;v0),r.a.Xb(r.c=--r.b),M>j+v&&Cl(r);for(h=new S(H);h.a0),r.a.Xb(r.c=--r.b)}}function Ayn(){gi();var t,e,n,r,s,o;if(Vft)return Vft;for(t=new Nl(4),yy(t,ib(kut,!0)),L_(t,ib("M",!0)),L_(t,ib("C",!0)),o=new Nl(4),r=0;r<11;r++)jc(o,r,r);return e=new Nl(4),yy(e,ib("M",!0)),jc(e,4448,4607),jc(e,65438,65439),s=new d9(2),E2(s,t),E2(s,pA),n=new d9(2),n.$l(Yj(o,ib("L",!0))),n.$l(e),n=new Xm(3,n),n=new mvt(s,n),Vft=n,Vft}function Lyn(t){var e,n;if(e=Br(qe(t,(ui(),YS))),!qne(e,t)&&!o2(t,O7)&&((!t.a&&(t.a=new fe(rs,t,10,11)),t.a).i!=0||je(Re(qe(t,ZO)))))if(e==null||fy(e).length==0){if(!qne(Gn,t))throw n=Gr(Gr(new Ol("Unable to load default layout algorithm "),Gn)," for unconfigured node "),Nq(t,n),it(new R3(n.a))}else throw n=Gr(Gr(new Ol("Layout algorithm '"),e),"' not found for "),Nq(t,n),it(new R3(n.a))}function Eat(t){var e,n,r,s,o,h,d,v,k,C,M,j,H;if(n=t.i,e=t.n,t.b==0)for(H=n.c+e.b,j=n.b-e.b-e.c,h=t.a,v=0,C=h.length;v0&&(M-=r[0]+t.c,r[0]+=t.c),r[2]>0&&(M-=r[2]+t.c),r[1]=b.Math.max(r[1],M),Xj(t.a[1],n.c+e.b+r[0]-(r[1]-M)/2,r[1]);for(o=t.a,d=0,k=o.length;d0?(t.n.c.length-1)*t.i:0,r=new S(t.n);r.a1)for(r=ei(s,0);r.b!=r.d.c;)for(n=u(ti(r),231),o=0,v=new S(n.e);v.a0&&(e[0]+=t.c,M-=e[0]),e[2]>0&&(M-=e[2]+t.c),e[1]=b.Math.max(e[1],M),Qj(t.a[1],r.d+n.d+e[0]-(e[1]-M)/2,e[1]);else for(G=r.d+n.d,H=r.a-n.d-n.a,h=t.a,v=0,C=h.length;v=0&&o!=n))throw it(new Fn(eO));for(s=0,v=0;v0||av(s.b.d,t.b.d+t.b.a)==0&&r.b<0||av(s.b.d+s.b.a,t.b.d)==0&&r.b>0){d=0;break}}else d=b.Math.min(d,Moe(t,s,r));d=b.Math.min(d,Mle(t,o,d,r))}return d}function CI(t,e){var n,r,s,o,h,d,v;if(t.b<2)throw it(new Fn("The vector chain must contain at least a source and a target point."));for(s=(Zn(t.b!=0),u(t.a.a.c,8)),vj(e,s.a,s.b),v=new Nx((!e.a&&(e.a=new As(Gh,e,5)),e.a)),h=ei(t,1);h.aXt(E1(h.g,h.d[0]).a)?(Zn(v.b>0),v.a.Xb(v.c=--v.b),zm(v,h),s=!0):d.e&&d.e.gc()>0&&(o=(!d.e&&(d.e=new he),d.e).Mc(e),k=(!d.e&&(d.e=new he),d.e).Mc(n),(o||k)&&((!d.e&&(d.e=new he),d.e).Fc(h),++h.c));s||(r.c[r.c.length]=h)}function Ole(t){var e,n,r;if(G3(u(Q(t,(Te(),cs)),98)))for(n=new S(t.j);n.a>>0,"0"+e.toString(16)),r="\\x"+Pl(n,n.length-2,n.length)):t>=Ka?(n=(e=t>>>0,"0"+e.toString(16)),r="\\v"+Pl(n,n.length-6,n.length)):r=""+String.fromCharCode(t&ys)}return r}function Cat(t,e){var n,r,s,o,h,d,v,k,C,M;if(h=t.e,v=e.e,v==0)return t;if(h==0)return e.e==0?e:new X3(-e.e,e.d,e.a);if(o=t.d,d=e.d,o+d==2)return n=Ns(t.a[0],co),r=Ns(e.a[0],co),h<0&&(n=z8(n)),v<0&&(r=z8(r)),JD(Jp(n,r));if(s=o!=d?o>d?1:-1:qyt(t.a,e.a,o),s==-1)M=-v,C=h==v?Wrt(e.a,d,t.a,o):Krt(e.a,d,t.a,o);else if(M=h,h==v){if(s==0)return rb(),s7;C=Wrt(t.a,o,e.a,d)}else C=Krt(t.a,o,e.a,d);return k=new X3(M,C.length,C),N9(k),k}function fxt(t){var e,n,r,s,o,h;for(this.e=new he,this.a=new he,n=t.b-1;n<3;n++)m8(t,0,u(Zf(t,0),8));if(t.b<4)throw it(new Fn("At (least dimension + 1) control points are necessary!"));for(this.b=3,this.d=!0,this.c=!1,x2n(this,t.b+this.b-1),h=new he,o=new S(this.e),e=0;e=e.o&&n.f<=e.f||e.a*.5<=n.f&&e.a*1.5>=n.f){if(h=u(Ne(e.n,e.n.c.length-1),211),h.e+h.d+n.g+s<=r&&(o=u(Ne(e.n,e.n.c.length-1),211),o.f-t.f+n.f<=t.b||t.a.c.length==1))return h3t(e,n),!0;if(e.s+n.g<=r&&(e.t+e.d+n.f+s<=t.b||t.a.c.length==1))return le(e.b,n),d=u(Ne(e.n,e.n.c.length-1),211),le(e.n,new E$(e.s,d.f+d.a+e.i,e.i)),W3t(u(Ne(e.n,e.n.c.length-1),211),n),Sle(e,n),!0}return!1}function Fle(t,e,n){var r,s,o,h;return t.ej()?(s=null,o=t.fj(),r=t.Zi(1,h=sit(t,e,n),n,e,o),t.bj()&&!(t.ni()&&h!=null?yi(h,n):Vt(h)===Vt(n))?(h!=null&&(s=t.dj(h,s)),s=t.cj(n,s),t.ij()&&(s=t.lj(h,n,s)),s?(s.Ei(r),s.Fi()):t.$i(r)):(t.ij()&&(s=t.lj(h,n,s)),s?(s.Ei(r),s.Fi()):t.$i(r)),h):(h=sit(t,e,n),t.bj()&&!(t.ni()&&h!=null?yi(h,n):Vt(h)===Vt(n))&&(s=null,h!=null&&(s=t.dj(h,null)),s=t.cj(n,s),s&&s.Fi()),h)}function E_(t,e){var n,r,s,o,h,d,v,k;e%=24,t.q.getHours()!=e&&(r=new b.Date(t.q.getTime()),r.setDate(r.getDate()+1),d=t.q.getTimezoneOffset()-r.getTimezoneOffset(),d>0&&(v=d/60|0,k=d%60,s=t.q.getDate(),n=t.q.getHours(),n+v>=24&&++s,o=new b.Date(t.q.getFullYear(),t.q.getMonth(),s,e+v,t.q.getMinutes()+k,t.q.getSeconds(),t.q.getMilliseconds()),t.q.setTime(o.getTime()))),h=t.q.getTime(),t.q.setTime(h+36e5),t.q.getHours()!=e&&t.q.setTime(h)}function Ryn(t,e){var n,r,s,o,h;if(vr(e,"Path-Like Graph Wrapping",1),t.b.c.length==0){or(e);return}if(s=new m5t(t),h=(s.i==null&&(s.i=fyt(s,new VN)),Xt(s.i)*s.f),n=h/(s.i==null&&(s.i=fyt(s,new VN)),Xt(s.i)),s.b>n){or(e);return}switch(u(Q(t,(Te(),ght)),337).g){case 2:o=new UN;break;case 0:o=new HN;break;default:o=new WN}if(r=o.Vf(t,s),!o.Wf())switch(u(Q(t,wG),338).g){case 2:r=Doe(s,r);break;case 1:r=Mae(s,r)}F3n(t,s,r),or(e)}function jyn(t,e){var n,r,s,o;if(Ein(t.d,t.e),t.c.a.$b(),Xt(ye(Q(e.j,(Te(),aG))))!=0||Xt(ye(Q(e.j,aG)))!=0)for(n=VE,Vt(Q(e.j,wb))!==Vt((V0(),vb))&&Jt(e.j,(ae(),Ov),(Nn(),!0)),o=u(Q(e.j,MS),19).a,s=0;ss&&++k,le(h,(An(d+k,e.c.length),u(e.c[d+k],19))),v+=(An(d+k,e.c.length),u(e.c[d+k],19)).a-r,++n;n1&&(v>Ru(d)*El(d)/2||h.b==0)&&(M=new rz(j),C=Ru(d)/El(d),k=zat(M,e,new Cx,n,r,s,C),Li(Gf(M.e),k),d=M,H.c[H.c.length]=M,v=0,j.c=Nt(Qn,De,1,0,5,1)));return Ls(H,j),H}function qyn(t,e,n,r){var s,o,h,d,v,k,C,M,j,H,G,K;if(n.mh(e)&&(C=(H=e,H?u(r,49).xh(H):null),C))if(K=n.bh(e,t.a),G=e.t,G>1||G==-1)if(M=u(K,69),j=u(C,69),M.dc())j.$b();else for(h=!!no(e),o=0,d=t.a?M.Kc():M.Zh();d.Ob();)k=u(d.Pb(),56),s=u(Xw(t,k),56),s?(h?(v=j.Xc(s),v==-1?j.Xh(o,s):o!=v&&j.ji(o,s)):j.Xh(o,s),++o):t.b&&!h&&(j.Xh(o,k),++o);else K==null?C.Wb(null):(s=Xw(t,K),s==null?t.b&&!no(e)&&C.Wb(K):C.Wb(s))}function Hyn(t,e){var n,r,s,o,h,d,v,k;for(n=new NK,s=new ar(lr(jo(e).a.Kc(),new z));zr(s);)if(r=u(Mr(s),17),!Ga(r)&&(d=r.c.i,L4t(d,yV))){if(k=V5t(t,d,yV,mV),k==-1)continue;n.b=b.Math.max(n.b,k),!n.a&&(n.a=new he),le(n.a,d)}for(h=new ar(lr(Ds(e).a.Kc(),new z));zr(h);)if(o=u(Mr(h),17),!Ga(o)&&(v=o.d.i,L4t(v,mV))){if(k=V5t(t,v,mV,yV),k==-1)continue;n.d=b.Math.max(n.d,k),!n.c&&(n.c=new he),le(n.c,v)}return n}function Nle(t){TE();var e,n,r,s;if(e=ps(t),t1e6)throw it(new _R("power of ten too big"));if(t<=wi)return Qx(bI(D6[1],e),e);for(r=bI(D6[1],wi),s=r,n=Tu(t-wi),e=ps(t%wi);yc(n,wi)>0;)s=e4(s,r),n=Jp(n,wi);for(s=e4(s,bI(D6[1],e)),s=Qx(s,wi),n=Tu(t-wi);yc(n,wi)>0;)s=Qx(s,wi),n=Jp(n,wi);return s=Qx(s,e),s}function Vyn(t,e){var n,r,s,o,h,d,v,k,C;for(vr(e,"Hierarchical port dummy size processing",1),v=new he,C=new he,r=Xt(ye(Q(t,(Te(),J4)))),n=r*2,o=new S(t.b);o.ak&&r>k)C=d,k=Xt(e.p[d.p])+Xt(e.d[d.p])+d.o.b+d.d.a;else{s=!1,n.n&&Jb(n,"bk node placement breaks on "+d+" which should have been after "+C);break}if(!s)break}return n.n&&Jb(n,e+" is feasible: "+s),s}function Kyn(t,e,n,r){var s,o,h,d,v,k,C;for(d=-1,C=new S(t);C.a=tt&&t.e[v.p]>G*t.b||St>=n*tt)&&(j.c[j.c.length]=d,d=new he,Ua(h,o),o.a.$b(),k-=C,H=b.Math.max(H,k*t.b+K),k+=St,Mt=St,St=0,C=0,K=0);return new fa(H,j)}function Jyn(t){var e,n,r,s,o,h,d,v,k,C,M,j,H;for(n=(k=new v1(t.c.b).a.vc().Kc(),new m1(k));n.a.Ob();)e=(d=u(n.a.Pb(),42),u(d.dd(),149)),s=e.a,s==null&&(s=""),r=CZe(t.c,s),!r&&s.length==0&&(r=_ln(t)),r&&!ay(r.c,e,!1)&&ri(r.c,e);for(h=ei(t.a,0);h.b!=h.d.c;)o=u(ti(h),478),C=Hrt(t.c,o.a),H=Hrt(t.c,o.b),C&&H&&ri(C.c,new fa(H,o.c));for(Ah(t.a),j=ei(t.b,0);j.b!=j.d.c;)M=u(ti(j),478),e=TZe(t.c,M.a),v=Hrt(t.c,M.b),e&&v&&gXe(e,v,M.c);Ah(t.b)}function t3n(t,e,n){var r,s,o,h,d,v,k,C,M,j,H;o=new Qk(t),h=new nae,s=(dD(h.g),dD(h.j),Xu(h.b),dD(h.d),dD(h.i),Xu(h.k),Xu(h.c),Xu(h.e),H=joe(h,o,null),Ace(h,o),H),e&&(k=new Qk(e),d=l3n(k),z4t(s,lt(ct(CSt,1),De,527,0,[d]))),j=!1,M=!1,n&&(k=new Qk(n),IH in k.a&&(j=B0(k,IH).ge().a),Qde in k.a&&(M=B0(k,Qde).ge().a)),C=yHt(Kee(new r8,j),M),Wgn(new CZ,s,C),IH in o.a&&Yf(o,IH,null),(j||M)&&(v=new _x,Ile(C,v,j,M),Yf(o,IH,v)),r=new Szt(h),zun(new l2t(s),r)}function e3n(t,e,n){var r,s,o,h,d,v,k,C,M;for(h=new oae,k=lt(ct(Cr,1),Xr,25,15,[0]),s=-1,o=0,r=0,v=0;v0){if(s<0&&C.a&&(s=v,o=k[0],r=0),s>=0){if(d=C.b,v==s&&(d-=r++,d==0))return 0;if(!jhe(e,k,C,d,h)){v=s-1,k[0]=o;continue}}else if(s=-1,!jhe(e,k,C,0,h))return 0}else{if(s=-1,wa(C.c,0)==32){if(M=k[0],aee(e,k),k[0]>M)continue}else if(Frn(e,C.c,k[0])){k[0]+=C.c.length;continue}return 0}return F5n(h,n)?k[0]:0}function C_(t){var e,n,r,s,o,h,d,v;if(!t.f){if(v=new M0,d=new M0,e=uA,h=e.a.zc(t,e),h==null){for(o=new nr(Ao(t));o.e!=o.i.gc();)s=u(dr(o),26),is(v,C_(s));e.a.Bc(t)!=null,e.a.gc()==0}for(r=(!t.s&&(t.s=new fe(Mu,t,21,17)),new nr(t.s));r.e!=r.i.gc();)n=u(dr(r),170),_t(n,99)&&Dr(d,u(n,18));iy(d),t.r=new ZYt(t,(u(At(Wt((Hp(),Ln).o),6),18),d.i),d.g),is(v,t.r),iy(v),t.f=new V3((u(At(Wt(Ln.o),5),18),v.i),v.g),sl(t).b&=-3}return t.f}function n3n(t){var e,n,r,s,o,h,d,v,k,C,M,j,H,G;for(h=t.o,r=Nt(Cr,Xr,25,h,15,1),s=Nt(Cr,Xr,25,h,15,1),n=t.p,e=Nt(Cr,Xr,25,n,15,1),o=Nt(Cr,Xr,25,n,15,1),k=0;k=0&&!f4(t,C,M);)--M;s[C]=M}for(H=0;H=0&&!f4(t,d,G);)--d;o[G]=d}for(v=0;ve[j]&&jr[v]&&Sq(t,v,j,!1,!0)}function dxt(t){var e,n,r,s,o,h,d,v;n=je(Re(Q(t,(Jf(),gbe)))),o=t.a.c.d,d=t.a.d.d,n?(h=fd(ia(new $e(d.a,d.b),o),.5),v=fd(nc(t.e),.5),e=ia(Li(new $e(o.a,o.b),h),v),H2t(t.d,e)):(s=Xt(ye(Q(t.a,kbe))),r=t.d,o.a>=d.a?o.b>=d.b?(r.a=d.a+(o.a-d.a)/2+s,r.b=d.b+(o.b-d.b)/2-s-t.e.b):(r.a=d.a+(o.a-d.a)/2+s,r.b=o.b+(d.b-o.b)/2+s):o.b>=d.b?(r.a=o.a+(d.a-o.a)/2+s,r.b=d.b+(o.b-d.b)/2+s):(r.a=o.a+(d.a-o.a)/2+s,r.b=o.b+(d.b-o.b)/2-s-t.e.b))}function $c(t,e){var n,r,s,o,h,d,v;if(t==null)return null;if(o=t.length,o==0)return"";for(v=Nt(xh,yd,25,o,15,1),Lmt(0,o,t.length),Lmt(0,o,v.length),iXt(t,0,o,v,0),n=null,d=e,s=0,h=0;s0?Pl(n.a,0,o-1):""):t.substr(0,o-1):n?n.a:t}function jle(t){Mw(t,new k2(_w(Ew(Cw(Tw(new kg,A2),"ELK DisCo"),"Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out."),new yg))),xe(t,A2,jot,Ie(p7t)),xe(t,A2,$ot,Ie(Qut)),xe(t,A2,E6,Ie(Jpe)),xe(t,A2,xv,Ie(g7t)),xe(t,A2,Zxt,Ie(rbe)),xe(t,A2,Jxt,Ie(nbe)),xe(t,A2,Qxt,Ie(ibe)),xe(t,A2,t6t,Ie(ebe)),xe(t,A2,o6t,Ie(tbe)),xe(t,A2,c6t,Ie(Xut)),xe(t,A2,u6t,Ie(d7t)),xe(t,A2,l6t,Ie(fV))}function gxt(t,e,n,r){var s,o,h,d,v,k,C,M,j;if(o=new Y0(t),D0(o,(Vn(),Hc)),Jt(o,(Te(),cs),(ua(),Gc)),s=0,e){for(h=new Mc,Jt(h,(ae(),_i),e),Jt(o,_i,e.i),Bs(h,(ve(),Bn)),Uo(h,o),j=wd(e.e),k=j,C=0,M=k.length;C0)if(n-=r.length-e,n>=0){for(s.a+="0.";n>N2.length;n-=N2.length)wKt(s,N2);JWt(s,N2,ps(n)),Gr(s,r.substr(e))}else n=e-n,Gr(s,Pl(r,e,ps(n))),s.a+=".",Gr(s,RM(r,ps(n)));else{for(Gr(s,r.substr(e));n<-N2.length;n+=N2.length)wKt(s,N2);JWt(s,N2,ps(-n))}return s.a}function pxt(t,e,n,r){var s,o,h,d,v,k,C,M,j;return v=ia(new $e(n.a,n.b),t),k=v.a*e.b-v.b*e.a,C=e.a*r.b-e.b*r.a,M=(v.a*r.b-v.b*r.a)/C,j=k/C,C==0?k==0?(s=Li(new $e(n.a,n.b),fd(new $e(r.a,r.b),.5)),o=Wp(t,s),h=Wp(Li(new $e(t.a,t.b),e),s),d=b.Math.sqrt(r.a*r.a+r.b*r.b)*.5,o=0&&M<=1&&j>=0&&j<=1?Li(new $e(t.a,t.b),fd(new $e(e.a,e.b),M)):null}function i3n(t,e,n){var r,s,o,h,d;if(r=u(Q(t,(Te(),tht)),21),n.a>e.a&&(r.Hc((hy(),WO))?t.c.a+=(n.a-e.a)/2:r.Hc(YO)&&(t.c.a+=n.a-e.a)),n.b>e.b&&(r.Hc((hy(),XO))?t.c.b+=(n.b-e.b)/2:r.Hc(KO)&&(t.c.b+=n.b-e.b)),u(Q(t,(ae(),Vc)),21).Hc((oo(),vh))&&(n.a>e.a||n.b>e.b))for(d=new S(t.a);d.ae.a&&(r.Hc((hy(),WO))?t.c.a+=(n.a-e.a)/2:r.Hc(YO)&&(t.c.a+=n.a-e.a)),n.b>e.b&&(r.Hc((hy(),XO))?t.c.b+=(n.b-e.b)/2:r.Hc(KO)&&(t.c.b+=n.b-e.b)),u(Q(t,(ae(),Vc)),21).Hc((oo(),vh))&&(n.a>e.a||n.b>e.b))for(h=new S(t.a);h.ae&&(s=0,o+=C.b+n,M.c[M.c.length]=C,C=new Zvt(o,n),r=new Iit(0,C.f,C,n),az(C,r),s=0),r.b.c.length==0||v.f>=r.o&&v.f<=r.f||r.a*.5<=v.f&&r.a*1.5>=v.f?h3t(r,v):(h=new Iit(r.s+r.r+n,C.f,C,n),az(C,h),h3t(h,v)),s=v.i+v.g;return M.c[M.c.length]=C,M}function T4(t){var e,n,r,s,o,h,d,v;if(!t.a){if(t.o=null,v=new Wzt(t),e=new Ep,n=uA,d=n.a.zc(t,n),d==null){for(h=new nr(Ao(t));h.e!=h.i.gc();)o=u(dr(h),26),is(v,T4(o));n.a.Bc(t)!=null,n.a.gc()==0}for(s=(!t.s&&(t.s=new fe(Mu,t,21,17)),new nr(t.s));s.e!=s.i.gc();)r=u(dr(s),170),_t(r,322)&&Dr(e,u(r,34));iy(e),t.k=new QYt(t,(u(At(Wt((Hp(),Ln).o),7),18),e.i),e.g),is(v,t.k),iy(v),t.a=new V3((u(At(Wt(Ln.o),4),18),v.i),v.g),sl(t).b&=-2}return t.a}function c3n(t,e,n,r,s,o,h){var d,v,k,C,M,j;return M=!1,v=Wce(n.q,e.f+e.b-n.q.f),j=s-(n.q.e+v-h),j=(An(o,t.c.length),u(t.c[o],200)).e,C=(d=__(r,j,!1),d.a),C>e.b&&!k)?!1:((k||C<=e.b)&&(k&&C>e.b?(n.d=C,vD(n,Qae(n,C))):(bae(n.q,v),n.c=!0),vD(r,s-(n.s+n.r)),tI(r,n.q.e+n.q.d,e.f),az(e,r),t.c.length>o&&(sI((An(o,t.c.length),u(t.c[o],200)),r),(An(o,t.c.length),u(t.c[o],200)).a.c.length==0&&Fg(t,o)),M=!0),M)}function bxt(t,e,n,r){var s,o,h,d,v,k,C;if(C=ou(t.e.Tg(),e),s=0,o=u(t.g,119),v=null,to(),u(e,66).Oj()){for(d=0;dt.o.a&&(C=(v-t.o.a)/2,d.b=b.Math.max(d.b,C),d.c=b.Math.max(d.c,C))}}function l3n(t){var e,n,r,s,o,h,d,v;for(o=new vZt,YXe(o,(i6(),G3e)),r=(s=yit(t,Nt(Ae,ee,2,0,6,1)),new mx(new yl(new Eet(t,s).b)));r.b0?t.i:0)>e&&v>0&&(o=0,h+=v+t.i,s=b.Math.max(s,j),r+=v+t.i,v=0,j=0,n&&(++M,le(t.n,new E$(t.s,h,t.i))),d=0),j+=k.g+(d>0?t.i:0),v=b.Math.max(v,k.f),n&&W3t(u(Ne(t.n,M),211),k),o+=k.g+(d>0?t.i:0),++d;return s=b.Math.max(s,j),r+=v,n&&(t.r=s,t.d=r,Q3t(t.j)),new ah(t.s,t.t,s,r)}function Dc(t,e,n,r,s){Gd();var o,h,d,v,k,C,M,j,H;if(bvt(t,"src"),bvt(n,"dest"),j=ol(t),v=ol(n),jwt((j.i&4)!=0,"srcType is not an array"),jwt((v.i&4)!=0,"destType is not an array"),M=j.c,h=v.c,jwt(M.i&1?M==h:(h.i&1)==0,"Array types don't match"),H=t.length,k=n.length,e<0||r<0||s<0||e+s>H||r+s>k)throw it(new Dpt);if(!(M.i&1)&&j!=v)if(C=u2(t),o=u2(n),Vt(t)===Vt(n)&&er;)ts(o,d,C[--e]);else for(d=r+s;r0&&n5t(t,e,n,r,s,!0)}function Lat(){Lat=Z,qge=lt(ct(Cr,1),Xr,25,15,[Sa,1162261467,D_,1220703125,362797056,1977326743,D_,387420489,Gq,214358881,429981696,815730721,1475789056,170859375,268435456,410338673,612220032,893871739,128e7,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729e6,887503681,D_,1291467969,1544804416,1838265625,60466176]),Hge=lt(ct(Cr,1),Xr,25,15,[-1,-1,31,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5])}function h3n(t){var e,n,r,s,o,h,d,v;for(s=new S(t.b);s.a=t.b.length?(o[s++]=h.b[r++],o[s++]=h.b[r++]):r>=h.b.length?(o[s++]=t.b[n++],o[s++]=t.b[n++]):h.b[r]0?t.i:0)),++e;for(Ehn(t.n,v),t.d=n,t.r=r,t.g=0,t.f=0,t.e=0,t.o=as,t.p=as,o=new S(t.b);o.a0&&(s=(!t.n&&(t.n=new fe(qo,t,1,7)),u(At(t.n,0),137)).a,!s||Gr(Gr((e.a+=' "',e),s),'"'))),n=(!t.b&&(t.b=new Cn(br,t,4,7)),!(t.b.i<=1&&(!t.c&&(t.c=new Cn(br,t,5,8)),t.c.i<=1))),n?e.a+=" [":e.a+=" ",Gr(e,_2t(new vet,new nr(t.b))),n&&(e.a+="]"),e.a+=Uot,n&&(e.a+="["),Gr(e,_2t(new vet,new nr(t.c))),n&&(e.a+="]"),e.a)}function Mat(t,e){var n,r,s,o,h,d,v;if(t.a){if(d=t.a.ne(),v=null,d!=null?e.a+=""+d:(h=t.a.Dj(),h!=null&&(o=hd(h,Cu(91)),o!=-1?(v=h.substr(o),e.a+=""+Pl(h==null?_u:(On(h),h),0,o)):e.a+=""+h)),t.d&&t.d.i!=0){for(s=!0,e.a+="<",r=new nr(t.d);r.e!=r.i.gc();)n=u(dr(r),87),s?s=!1:e.a+=Ya,Mat(n,e);e.a+=">"}v!=null&&(e.a+=""+v)}else t.e?(d=t.e.zb,d!=null&&(e.a+=""+d)):(e.a+="?",t.b?(e.a+=" super ",Mat(t.b,e)):t.f&&(e.a+=" extends ",Mat(t.f,e)))}function g3n(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt,ue,_e,We,Qe,Rn;for(Kt=t.c,ue=e.c,n=Ro(Kt.a,t,0),r=Ro(ue.a,e,0),St=u(ov(t,(so(),tl)).Kc().Pb(),11),Qe=u(ov(t,nu).Kc().Pb(),11),Rt=u(ov(e,tl).Kc().Pb(),11),Rn=u(ov(e,nu).Kc().Pb(),11),gt=wd(St.e),_e=wd(Qe.g),Mt=wd(Rt.e),We=wd(Rn.g),ly(t,r,ue),h=Mt,C=0,G=h.length;CC?new i2((Uf(),Ky),n,e,k-C):k>0&&C>0&&(new i2((Uf(),Ky),e,n,0),new i2(Ky,n,e,0))),h)}function qle(t,e){var n,r,s,o,h,d;for(h=new p2(new Cg(t.f.b).a);h.b;){if(o=Zw(h),s=u(o.cd(),594),e==1){if(s.gf()!=(ao(),rg)&&s.gf()!=ng)continue}else if(s.gf()!=(ao(),zh)&&s.gf()!=Cf)continue;switch(r=u(u(o.dd(),46).b,81),d=u(u(o.dd(),46).a,189),n=d.c,s.gf().g){case 2:r.g.c=t.e.a,r.g.b=b.Math.max(1,r.g.b+n);break;case 1:r.g.c=r.g.c+n,r.g.b=b.Math.max(1,r.g.b-n);break;case 4:r.g.d=t.e.b,r.g.a=b.Math.max(1,r.g.a+n);break;case 3:r.g.d=r.g.d+n,r.g.a=b.Math.max(1,r.g.a-n)}}}function p3n(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G,K;for(d=Nt(Cr,Xr,25,e.b.c.length,15,1),k=Nt(flt,oe,267,e.b.c.length,0,1),v=Nt(l0,Yg,10,e.b.c.length,0,1),M=t.a,j=0,H=M.length;j0&&v[r]&&(G=W3(t.b,v[r],s)),K=b.Math.max(K,s.c.c.b+G);for(o=new S(C.e);o.a1)throw it(new Fn(aO));v||(o=Zd(e,r.Kc().Pb()),h.Fc(o))}return Syt(t,W4t(t,e,n),h)}function v3n(t,e){var n,r,s,o;for(ecn(e.b.j),ls(wu(new Tn(null,new _n(e.d,16)),new XX),new QX),o=new S(e.d);o.at.o.b||(n=Ko(t,Hn),d=e.d+e.a+(n.gc()-1)*h,d>t.o.b)))}function Oat(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G;if(h=t.e,v=e.e,h==0)return e;if(v==0)return t;if(o=t.d,d=e.d,o+d==2)return n=Ns(t.a[0],co),r=Ns(e.a[0],co),h==v?(C=Pa(n,r),G=Ar(C),H=Ar(Vm(C,32)),H==0?new Ng(h,G):new X3(h,2,lt(ct(Cr,1),Xr,25,15,[G,H]))):JD(h<0?Jp(r,n):Jp(n,r));if(h==v)j=h,M=o>=d?Krt(t.a,o,e.a,d):Krt(e.a,d,t.a,o);else{if(s=o!=d?o>d?1:-1:qyt(t.a,e.a,o),s==0)return rb(),s7;s==1?(j=h,M=Wrt(t.a,o,e.a,d)):(j=v,M=Wrt(e.a,d,t.a,o))}return k=new X3(j,M.length,M),N9(k),k}function Pat(t,e,n,r,s,o,h){var d,v,k,C,M,j,H;return M=je(Re(Q(e,(Te(),l9t)))),j=null,o==(so(),tl)&&r.c.i==n?j=r.c:o==nu&&r.d.i==n&&(j=r.d),k=h,!k||!M||j?(C=(ve(),Zo),j?C=j.j:G3(u(Q(n,cs),98))&&(C=o==tl?Bn:Hn),v=k3n(t,e,n,o,C,r),d=Grt((Na(n),r)),o==tl?(Oa(d,u(Ne(v.j,0),11)),oa(d,s)):(Oa(d,s),oa(d,u(Ne(v.j,0),11))),k=new oie(r,d,v,u(Q(v,(ae(),_i)),11),o,!j)):(le(k.e,r),H=b.Math.max(Xt(ye(Q(k.d,Jg))),Xt(ye(Q(r,Jg)))),Jt(k.d,Jg,H)),ln(t.a,r,new Fj(k.d,e,o)),k}function Pq(t,e){var n,r,s,o,h,d,v,k,C,M;if(C=null,t.d&&(C=u(Nc(t.d,e),138)),!C){if(o=t.a.Mh(),M=o.i,!t.d||HC(t.d)!=M){for(v=new _r,t.d&&Y9(v,t.d),k=v.f.c+v.g.c,d=k;d0?(H=(G-1)*n,d&&(H+=r),C&&(H+=r),H=t.b[s+1])s+=2;else if(n0)for(r=new Bu(u(Ai(t.a,o),21)),wn(),Zs(r,new Si(e)),s=new da(o.b,0);s.bKt)?(v=2,h=wi):v==0?(v=1,h=_e):(v=0,h=_e)):(H=_e>=h||h-_e0?1:Iw(isNaN(r),isNaN(0)))>=0^(wf(_d),(b.Math.abs(d)<=_d||d==0||isNaN(d)&&isNaN(0)?0:d<0?-1:d>0?1:Iw(isNaN(d),isNaN(0)))>=0)?b.Math.max(d,r):(wf(_d),(b.Math.abs(r)<=_d||r==0||isNaN(r)&&isNaN(0)?0:r<0?-1:r>0?1:Iw(isNaN(r),isNaN(0)))>0?b.Math.sqrt(d*d+r*r):-b.Math.sqrt(d*d+r*r))}function E2(t,e){var n,r,s,o,h,d;if(e){if(!t.a&&(t.a=new ER),t.e==2){kR(t.a,e);return}if(e.e==1){for(s=0;s=Ka?go(n,l3t(r)):S8(n,r&ys),h=new krt(10,null,0),unn(t.a,h,d-1)):(n=(h.bm().length+o,new $C),go(n,h.bm())),e.e==0?(r=e._l(),r>=Ka?go(n,l3t(r)):S8(n,r&ys)):go(n,e.bm()),u(h,521).b=n.a}}function Xle(t){var e,n,r,s,o;return t.g!=null?t.g:t.a<32?(t.g=W5n(Tu(t.f),ps(t.e)),t.g):(s=Hat((!t.c&&(t.c=VD(t.f)),t.c),0),t.e==0?s:(e=(!t.c&&(t.c=VD(t.f)),t.c).e<0?2:1,n=s.length,r=-t.e+n-e,o=new Mp,o.a+=""+s,t.e>0&&r>=-6?r>=0?uD(o,n-ps(t.e),String.fromCharCode(46)):(o.a=Pl(o.a,0,e-1)+"0."+RM(o.a,e-1),uD(o,e+1,Mh(N2,0,-ps(r)-1))):(n-e>=1&&(uD(o,e,String.fromCharCode(46)),++n),uD(o,n,String.fromCharCode(69)),r>0&&uD(o,++n,String.fromCharCode(43)),uD(o,++n,""+_9(Tu(r)))),t.g=o.a,t.g))}function F3n(t,e,n){var r,s,o,h,d,v,k,C,M,j,H,G,K,tt;if(!n.dc()){for(d=0,j=0,r=n.Kc(),G=u(r.Pb(),19).a;d1&&(v=k.mg(v,t.a,d));return v.c.length==1?u(Ne(v,v.c.length-1),220):v.c.length==2?T3n((An(0,v.c.length),u(v.c[0],220)),(An(1,v.c.length),u(v.c[1],220)),h,o):null}function Qle(t){var e,n,r,s,o,h;for(xu(t.a,new xi),n=new S(t.a);n.a=b.Math.abs(r.b)?(r.b=0,o.d+o.a>h.d&&o.dh.c&&o.c0){if(e=new n2t(t.i,t.g),n=t.i,o=n<100?null:new Dp(n),t.ij())for(r=0;r0){for(d=t.g,k=t.i,z9(t),o=k<100?null:new Dp(k),r=0;r>13|(t.m&15)<<9,s=t.m>>4&8191,o=t.m>>17|(t.h&255)<<5,h=(t.h&1048320)>>8,d=e.l&8191,v=e.l>>13|(e.m&15)<<9,k=e.m>>4&8191,C=e.m>>17|(e.h&255)<<5,M=(e.h&1048320)>>8,We=n*d,Qe=r*d,Rn=s*d,zn=o*d,hr=h*d,v!=0&&(Qe+=n*v,Rn+=r*v,zn+=s*v,hr+=o*v),k!=0&&(Rn+=n*k,zn+=r*k,hr+=s*k),C!=0&&(zn+=n*C,hr+=r*C),M!=0&&(hr+=n*M),H=We&hl,G=(Qe&511)<<13,j=H+G,tt=We>>22,gt=Qe>>9,Mt=(Rn&262143)<<4,St=(zn&31)<<17,K=tt+gt+Mt+St,Kt=Rn>>18,ue=zn>>5,_e=(hr&4095)<<8,Rt=Kt+ue+_e,K+=j>>22,j&=hl,Rt+=K>>22,K&=hl,Rt&=Z0,iu(j,K,Rt)}function Zle(t){var e,n,r,s,o,h,d;if(d=u(Ne(t.j,0),11),d.g.c.length!=0&&d.e.c.length!=0)throw it(new No("Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges."));if(d.g.c.length!=0){for(o=as,n=new S(d.g);n.a4)if(t.wj(e)){if(t.rk()){if(s=u(e,49),r=s.Ug(),v=r==t.e&&(t.Dk()?s.Og(s.Vg(),t.zk())==t.Ak():-1-s.Vg()==t.aj()),t.Ek()&&!v&&!r&&s.Zg()){for(o=0;o0&&(k=t.n.a/o);break;case 2:case 4:s=t.i.o.b,s>0&&(k=t.n.b/s)}Jt(t,(ae(),Fv),k)}if(v=t.o,h=t.a,r)h.a=r.a,h.b=r.b,t.d=!0;else if(e!=G1&&e!=Tb&&d!=Zo)switch(d.g){case 1:h.a=v.a/2;break;case 2:h.a=v.a,h.b=v.b/2;break;case 3:h.a=v.a/2,h.b=v.b;break;case 4:h.b=v.b/2}else h.a=v.a/2,h.b=v.b/2}function A_(t){var e,n,r,s,o,h,d,v,k,C;if(t.ej())if(C=t.Vi(),v=t.fj(),C>0)if(e=new gyt(t.Gi()),n=C,o=n<100?null:new Dp(n),VM(t,n,e.g),s=n==1?t.Zi(4,At(e,0),null,0,v):t.Zi(6,e,null,-1,v),t.bj()){for(r=new nr(e);r.e!=r.i.gc();)o=t.dj(dr(r),o);o?(o.Ei(s),o.Fi()):t.$i(s)}else o?(o.Ei(s),o.Fi()):t.$i(s);else VM(t,t.Vi(),t.Wi()),t.$i(t.Zi(6,(wn(),io),null,-1,v));else if(t.bj())if(C=t.Vi(),C>0){for(d=t.Wi(),k=C,VM(t,C,d),o=k<100?null:new Dp(k),r=0;rt.d[h.p]&&(n+=fmt(t.b,o)*u(v.b,19).a,Up(t.a,pe(o)));for(;!BC(t.a);)Hmt(t.b,u(Hx(t.a),19).a)}return n}function W3n(t,e,n,r){var s,o,h,d,v,k,C,M,j,H,G,K,tt;for(M=new xo(u(qe(t,(fq(),OSt)),8)),M.a=b.Math.max(M.a-n.b-n.c,0),M.b=b.Math.max(M.b-n.d-n.a,0),s=ye(qe(t,MSt)),(s==null||(On(s),s<=0))&&(s=1.3),d=new he,G=new nr((!t.a&&(t.a=new fe(rs,t,10,11)),t.a));G.e!=G.i.gc();)H=u(dr(G),33),h=new LWt(H),d.c[d.c.length]=h;switch(j=u(qe(t,lft),311),j.g){case 3:tt=pyn(d,e,M.a,M.b,(k=r,On(s),k));break;case 1:tt=zyn(d,e,M.a,M.b,(C=r,On(s),C));break;default:tt=X3n(d,e,M.a,M.b,(v=r,On(s),v))}o=new rz(tt),K=zat(o,e,n,M.a,M.b,r,(On(s),s)),wv(t,K.a,K.b,!1,!0)}function Y3n(t,e){var n,r,s,o;n=e.b,o=new Bu(n.j),s=0,r=n.j,r.c=Nt(Qn,De,1,0,5,1),$w(u(h2(t.b,(ve(),Pn),(nv(),Dv)),15),n),s=nI(o,s,new jX,r),$w(u(h2(t.b,Pn,pb),15),n),s=nI(o,s,new VT,r),$w(u(h2(t.b,Pn,Mv),15),n),$w(u(h2(t.b,Hn,Dv),15),n),$w(u(h2(t.b,Hn,pb),15),n),s=nI(o,s,new PN,r),$w(u(h2(t.b,Hn,Mv),15),n),$w(u(h2(t.b,mr,Dv),15),n),s=nI(o,s,new FN,r),$w(u(h2(t.b,mr,pb),15),n),s=nI(o,s,new NN,r),$w(u(h2(t.b,mr,Mv),15),n),$w(u(h2(t.b,Bn,Dv),15),n),s=nI(o,s,new qX,r),$w(u(h2(t.b,Bn,pb),15),n),$w(u(h2(t.b,Bn,Mv),15),n)}function K3n(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G,K;for(vr(e,"Layer size calculation",1),C=as,k=Cs,s=!1,d=new S(t.b);d.a.5?gt-=h*2*(G-.5):G<.5&&(gt+=o*2*(.5-G)),s=d.d.b,gttt.a-K-C&&(gt=tt.a-K-C),d.n.a=e+gt}}function X3n(t,e,n,r,s){var o,h,d,v,k,C,M,j,H,G,K,tt;for(d=Nt(aa,vo,25,t.c.length,15,1),j=new n$(new sB),e4t(j,t),k=0,K=new he;j.b.c.length!=0;)if(h=u(j.b.c.length==0?null:Ne(j.b,0),157),k>1&&Ru(h)*El(h)/2>d[0]){for(o=0;od[o];)++o;G=new Qd(K,0,o+1),M=new rz(G),C=Ru(h)/El(h),v=zat(M,e,new Cx,n,r,s,C),Li(Gf(M.e),v),R8(xE(j,M)),H=new Qd(K,o+1,K.c.length),e4t(j,H),K.c=Nt(Qn,De,1,0,5,1),k=0,AKt(d,d.length,0)}else tt=j.b.c.length==0?null:Ne(j.b,0),tt!=null&&vit(j,0),k>0&&(d[k]=d[k-1]),d[k]+=Ru(h)*El(h),++k,K.c[K.c.length]=h;return K}function Q3n(t){var e,n,r,s,o;if(r=u(Q(t,(Te(),uu)),163),r==(dh(),bb)){for(n=new ar(lr(jo(t).a.Kc(),new z));zr(n);)if(e=u(Mr(n),17),!jJt(e))throw it(new R3(Kot+rI(t)+"' has its layer constraint set to FIRST_SEPARATE, but has at least one incoming edge. FIRST_SEPARATE nodes must not have incoming edges."))}else if(r==jy){for(o=new ar(lr(Ds(t).a.Kc(),new z));zr(o);)if(s=u(Mr(o),17),!jJt(s))throw it(new R3(Kot+rI(t)+"' has its layer constraint set to LAST_SEPARATE, but has at least one outgoing edge. LAST_SEPARATE nodes must not have outgoing edges."))}}function Z3n(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G;for(vr(e,"Label dummy removal",1),r=Xt(ye(Q(t,(Te(),V6)))),s=Xt(ye(Q(t,Wy))),k=u(Q(t,Wl),103),v=new S(t.b);v.a0&&soe(t,d,M);for(s=new S(M);s.a>19&&(e=rE(e),v=!v),h=Q2n(e),o=!1,s=!1,r=!1,t.h==NI&&t.m==0&&t.l==0)if(s=!0,o=!0,h==-1)t=yUt((q8(),sEt)),r=!0,v=!v;else return d=v5t(t,h),v&&Ait(d),n&&(hb=iu(0,0,0)),d;else t.h>>19&&(o=!0,t=rE(t),r=!0,v=!v);return h!=-1?Run(t,h,v,o,n):u4t(t,e)<0?(n&&(o?hb=rE(t):hb=iu(t.l,t.m,t.h)),iu(0,0,0)):qmn(r?t:iu(t.l,t.m,t.h),e,v,o,s,n)}function Fq(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G;if(t.e&&t.c.ce.f||e.g>t.f)){for(n=0,r=0,h=t.w.a.ec().Kc();h.Ob();)s=u(h.Pb(),11),$it(Yo(lt(ct(Ws,1),ee,8,0,[s.i.n,s.n,s.a])).b,e.g,e.f)&&++n;for(d=t.r.a.ec().Kc();d.Ob();)s=u(d.Pb(),11),$it(Yo(lt(ct(Ws,1),ee,8,0,[s.i.n,s.n,s.a])).b,e.g,e.f)&&--n;for(v=e.w.a.ec().Kc();v.Ob();)s=u(v.Pb(),11),$it(Yo(lt(ct(Ws,1),ee,8,0,[s.i.n,s.n,s.a])).b,t.g,t.f)&&++r;for(o=e.r.a.ec().Kc();o.Ob();)s=u(o.Pb(),11),$it(Yo(lt(ct(Ws,1),ee,8,0,[s.i.n,s.n,s.a])).b,t.g,t.f)&&--r;n=0)return s=ohn(t,e.substr(1,h-1)),C=e.substr(h+1,v-(h+1)),nxn(t,C,s)}else{if(n=-1,lEt==null&&(lEt=new RegExp("\\d")),lEt.test(String.fromCharCode(d))&&(n=bwt(e,Cu(46),v-1),n>=0)){r=u(Urt(t,Dee(t,e.substr(1,n-1)),!1),58),k=0;try{k=ql(e.substr(n+1),Sa,wi)}catch(j){throw j=Wi(j),_t(j,127)?(o=j,it(new W$(o))):it(j)}if(k=0)return n;switch(Hw(To(t,n))){case 2:{if(hn("",$g(t,n.Hj()).ne())){if(v=rD(To(t,n)),d=M8(To(t,n)),C=C5t(t,e,v,d),C)return C;for(s=Z5t(t,e),h=0,M=s.gc();h1)throw it(new Fn(aO));for(C=ou(t.e.Tg(),e),r=u(t.g,119),h=0;h1,k=new L1(j.b);Go(k.a)||Go(k.b);)v=u(Go(k.a)?J(k.a):J(k.b),17),M=v.c==j?v.d:v.c,b.Math.abs(Yo(lt(ct(Ws,1),ee,8,0,[M.i.n,M.n,M.a])).b-h.b)>1&&evn(t,v,h,o,j)}}function l4n(t){var e,n,r,s,o,h;if(s=new da(t.e,0),r=new da(t.a,0),t.d)for(n=0;nLct;){for(o=e,h=0;b.Math.abs(e-o)0),s.a.Xb(s.c=--s.b),Syn(t,t.b-h,o,r,s),Zn(s.b0),r.a.Xb(r.c=--r.b)}if(!t.d)for(n=0;n0?(t.f[C.p]=H/(C.e.c.length+C.g.c.length),t.c=b.Math.min(t.c,t.f[C.p]),t.b=b.Math.max(t.b,t.f[C.p])):d&&(t.f[C.p]=H)}}function f4n(t){t.b=null,t.bb=null,t.fb=null,t.qb=null,t.a=null,t.c=null,t.d=null,t.e=null,t.f=null,t.n=null,t.M=null,t.L=null,t.Q=null,t.R=null,t.K=null,t.db=null,t.eb=null,t.g=null,t.i=null,t.j=null,t.k=null,t.gb=null,t.o=null,t.p=null,t.q=null,t.r=null,t.$=null,t.ib=null,t.S=null,t.T=null,t.t=null,t.s=null,t.u=null,t.v=null,t.w=null,t.B=null,t.A=null,t.C=null,t.D=null,t.F=null,t.G=null,t.H=null,t.I=null,t.J=null,t.P=null,t.Z=null,t.U=null,t.V=null,t.W=null,t.X=null,t.Y=null,t._=null,t.ab=null,t.cb=null,t.hb=null,t.nb=null,t.lb=null,t.mb=null,t.ob=null,t.pb=null,t.jb=null,t.kb=null,t.N=!1,t.O=!1}function d4n(t,e,n){var r,s,o,h;for(vr(n,"Graph transformation ("+t.a+")",1),h=Ww(e.a),o=new S(e.b);o.a0&&(t.a=v+(H-1)*o,e.c.b+=t.a,e.f.b+=t.a)),G.a.gc()!=0&&(j=new ert(1,o),H=Txt(j,e,G,K,e.f.b+v-e.c.b),H>0&&(e.f.b+=v+(H-1)*o))}function OE(t,e){var n,r,s,o;o=t.F,e==null?(t.F=null,aE(t,null)):(t.F=(On(e),e),r=hd(e,Cu(60)),r!=-1?(s=e.substr(0,r),hd(e,Cu(46))==-1&&!hn(s,b6)&&!hn(s,tS)&&!hn(s,FH)&&!hn(s,eS)&&!hn(s,nS)&&!hn(s,rS)&&!hn(s,iS)&&!hn(s,sS)&&(s=$0e),n=Tj(e,Cu(62)),n!=-1&&(s+=""+e.substr(n+1)),aE(t,s)):(s=e,hd(e,Cu(46))==-1&&(r=hd(e,Cu(91)),r!=-1&&(s=e.substr(0,r)),!hn(s,b6)&&!hn(s,tS)&&!hn(s,FH)&&!hn(s,eS)&&!hn(s,nS)&&!hn(s,rS)&&!hn(s,iS)&&!hn(s,sS)?(s=$0e,r!=-1&&(s+=""+e.substr(r))):s=e),aE(t,s),s==e&&(t.F=t.D))),t.Db&4&&!(t.Db&1)&&mi(t,new Js(t,1,5,o,e))}function p4n(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St;if(K=e.b.c.length,!(K<3)){for(H=Nt(Cr,Xr,25,K,15,1),M=0,C=new S(e.b);C.ah)&&Fs(t.b,u(tt.b,17));++d}o=h}}}function xxt(t,e){var n;if(e==null||hn(e,_u)||e.length==0&&t.k!=(Ug(),U6))return null;switch(t.k.g){case 1:return Vz(e,XE)?(Nn(),r7):Vz(e,Vct)?(Nn(),F2):null;case 2:try{return pe(ql(e,Sa,wi))}catch(r){if(r=Wi(r),_t(r,127))return null;throw it(r)}case 4:try{return dy(e)}catch(r){if(r=Wi(r),_t(r,127))return null;throw it(r)}case 3:return e;case 5:return Rre(t),Voe(t,e);case 6:return Rre(t),C2n(t,t.a,e);case 7:try{return n=Bbn(t),n.Jf(e),n}catch(r){if(r=Wi(r),_t(r,32))return null;throw it(r)}default:throw it(new No("Invalid type set for this layout option."))}}function b4n(t){H9();var e,n,r,s,o,h,d;for(d=new pqt,n=new S(t);n.a=d.b.c)&&(d.b=e),(!d.c||e.c<=d.c.c)&&(d.d=d.c,d.c=e),(!d.e||e.d>=d.e.d)&&(d.e=e),(!d.f||e.d<=d.f.d)&&(d.f=e);return r=new Yz((nE(),Lv)),hD(t,Ube,new yl(lt(ct(mO,1),De,369,0,[r]))),h=new Yz(Fy),hD(t,Gbe,new yl(lt(ct(mO,1),De,369,0,[h]))),s=new Yz(Py),hD(t,Vbe,new yl(lt(ct(mO,1),De,369,0,[s]))),o=new Yz(z4),hD(t,Hbe,new yl(lt(ct(mO,1),De,369,0,[o]))),aat(r.c,Lv),aat(s.c,Py),aat(o.c,z4),aat(h.c,Fy),d.a.c=Nt(Qn,De,1,0,5,1),Ls(d.a,r.c),Ls(d.a,l2(s.c)),Ls(d.a,o.c),Ls(d.a,l2(h.c)),d}function kxt(t){var e;switch(t.d){case 1:{if(t.hj())return t.o!=-2;break}case 2:{if(t.hj())return t.o==-2;break}case 3:case 5:case 4:case 6:case 7:return t.o>-2;default:return!1}switch(e=t.gj(),t.p){case 0:return e!=null&&je(Re(e))!=u9(t.k,0);case 1:return e!=null&&u(e,217).a!=Ar(t.k)<<24>>24;case 2:return e!=null&&u(e,172).a!=(Ar(t.k)&ys);case 6:return e!=null&&u9(u(e,162).a,t.k);case 5:return e!=null&&u(e,19).a!=Ar(t.k);case 7:return e!=null&&u(e,184).a!=Ar(t.k)<<16>>16;case 3:return e!=null&&Xt(ye(e))!=t.j;case 4:return e!=null&&u(e,155).a!=t.j;default:return e==null?t.n!=null:!yi(e,t.n)}}function AI(t,e,n){var r,s,o,h;return t.Fk()&&t.Ek()&&(h=Wnt(t,u(n,56)),Vt(h)!==Vt(n))?(t.Oi(e),t.Ui(e,Ite(t,e,h)),t.rk()&&(o=(s=u(n,49),t.Dk()?t.Bk()?s.ih(t.b,no(u(yn(vu(t.b),t.aj()),18)).n,u(yn(vu(t.b),t.aj()).Yj(),26).Bj(),null):s.ih(t.b,Gi(s.Tg(),no(u(yn(vu(t.b),t.aj()),18))),null,null):s.ih(t.b,-1-t.aj(),null,null)),!u(h,49).eh()&&(o=(r=u(h,49),t.Dk()?t.Bk()?r.gh(t.b,no(u(yn(vu(t.b),t.aj()),18)).n,u(yn(vu(t.b),t.aj()).Yj(),26).Bj(),o):r.gh(t.b,Gi(r.Tg(),no(u(yn(vu(t.b),t.aj()),18))),null,o):r.gh(t.b,-1-t.aj(),null,o))),o&&o.Fi()),xl(t.b)&&t.$i(t.Zi(9,n,h,e,!1)),h):n}function nhe(t,e,n){var r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt;for(C=Xt(ye(Q(t,(Te(),jv)))),r=Xt(ye(Q(t,x9t))),j=new Yu,Jt(j,jv,C+r),k=e,gt=k.d,K=k.c.i,Mt=k.d.i,tt=o2t(K.c),St=o2t(Mt.c),s=new he,M=tt;M<=St;M++)d=new Y0(t),D0(d,(Vn(),ta)),Jt(d,(ae(),_i),k),Jt(d,cs,(ua(),Gc)),Jt(d,bG,j),H=u(Ne(t.b,M),29),M==tt?ly(d,H.a.c.length-n,H):Eo(d,H),Rt=Xt(ye(Q(k,Jg))),Rt<0&&(Rt=0,Jt(k,Jg,Rt)),d.o.b=Rt,G=b.Math.floor(Rt/2),h=new Mc,Bs(h,(ve(),Bn)),Uo(h,d),h.n.b=G,v=new Mc,Bs(v,Hn),Uo(v,d),v.n.b=G,oa(k,h),o=new Vw,Mo(o,k),Jt(o,So,null),Oa(o,v),oa(o,gt),mdn(d,k,o),s.c[s.c.length]=o,k=o;return s}function Bat(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St;for(v=u(Gg(t,(ve(),Bn)).Kc().Pb(),11).e,H=u(Gg(t,Hn).Kc().Pb(),11).g,d=v.c.length,St=_1(u(Ne(t.j,0),11));d-- >0;){for(K=(An(0,v.c.length),u(v.c[0],17)),s=(An(0,H.c.length),u(H.c[0],17)),Mt=s.d.e,o=Ro(Mt,s,0),Esn(K,s.d,o),Oa(s,null),oa(s,null),G=K.a,e&&ri(G,new xo(St)),r=ei(s.a,0);r.b!=r.d.c;)n=u(ti(r),8),ri(G,new xo(n));for(gt=K.b,j=new S(s.b);j.a0&&(h=b.Math.max(h,Mne(t.C.b+r.d.b,s))),C=r,M=s,j=o;t.C&&t.C.c>0&&(H=j+t.C.c,k&&(H+=C.d.c),h=b.Math.max(h,(k1(),wf(B1),b.Math.abs(M-1)<=B1||M==1||isNaN(M)&&isNaN(1)?0:H/(1-M)))),n.n.b=0,n.a.a=h}function ihe(t,e){var n,r,s,o,h,d,v,k,C,M,j,H;if(n=u(po(t.b,e),124),v=u(u(Ai(t.r,e),21),84),v.dc()){n.n.d=0,n.n.a=0;return}for(k=t.u.Hc((Zu(),sg)),h=0,t.A.Hc((Al(),K2))&&Bue(t,e),d=v.Kc(),C=null,j=0,M=0;d.Ob();)r=u(d.Pb(),111),o=Xt(ye(r.b.We((Cj(),uV)))),s=r.b.rf().b,C?(H=M+C.d.a+t.w+r.d.d,h=b.Math.max(h,(k1(),wf(B1),b.Math.abs(j-o)<=B1||j==o||isNaN(j)&&isNaN(o)?0:H/(o-j)))):t.C&&t.C.d>0&&(h=b.Math.max(h,Mne(t.C.d+r.d.d,o))),C=r,j=o,M=s;t.C&&t.C.a>0&&(H=M+t.C.a,k&&(H+=C.d.a),h=b.Math.max(h,(k1(),wf(B1),b.Math.abs(j-1)<=B1||j==1||isNaN(j)&&isNaN(1)?0:H/(1-j)))),n.n.d=0,n.a.b=h}function she(t,e,n){var r,s,o,h,d,v;for(this.g=t,d=e.d.length,v=n.d.length,this.d=Nt(l0,Yg,10,d+v,0,1),h=0;h0?lit(this,this.f/this.a):E1(e.g,e.d[0]).a!=null&&E1(n.g,n.d[0]).a!=null?lit(this,(Xt(E1(e.g,e.d[0]).a)+Xt(E1(n.g,n.d[0]).a))/2):E1(e.g,e.d[0]).a!=null?lit(this,E1(e.g,e.d[0]).a):E1(n.g,n.d[0]).a!=null&&lit(this,E1(n.g,n.d[0]).a)}function w4n(t,e){var n,r,s,o,h,d,v,k,C,M;for(t.a=new dXt(Ucn(XS)),r=new S(e.a);r.a=1&&(tt-h>0&&M>=0?(v.n.a+=K,v.n.b+=o*h):tt-h<0&&C>=0&&(v.n.a+=K*tt,v.n.b+=o));t.o.a=e.a,t.o.b=e.b,Jt(t,(Te(),$2),(Al(),r=u(Vf(rA),9),new sh(r,u(ff(r,r.length),9),0)))}function x4n(t,e,n,r,s,o){var h;if(!(e==null||!tst(e,nLt,rLt)))throw it(new Fn("invalid scheme: "+e));if(!t&&!(n!=null&&hd(n,Cu(35))==-1&&n.length>0&&(Rr(0,n.length),n.charCodeAt(0)!=47)))throw it(new Fn("invalid opaquePart: "+n));if(t&&!(e!=null&&yM(gU,e.toLowerCase()))&&!(n==null||!tst(n,oA,cA)))throw it(new Fn(S0e+n));if(t&&e!=null&&yM(gU,e.toLowerCase())&&!g0n(n))throw it(new Fn(S0e+n));if(!vhn(r))throw it(new Fn("invalid device: "+r));if(!hln(s))throw h=s==null?"invalid segments: null":"invalid segment: "+oln(s),it(new Fn(h));if(!(o==null||hd(o,Cu(35))==-1))throw it(new Fn("invalid query: "+o))}function k4n(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt;for(vr(e,"Calculate Graph Size",1),e.n&&t&&gf(e,pf(t),(Sl(),Ql)),d=VE,v=VE,o=Ukt,h=Ukt,M=new nr((!t.a&&(t.a=new fe(rs,t,10,11)),t.a));M.e!=M.i.gc();)k=u(dr(M),33),G=k.i,K=k.j,gt=k.g,r=k.f,s=u(qe(k,(ui(),JO)),142),d=b.Math.min(d,G-s.b),v=b.Math.min(v,K-s.d),o=b.Math.max(o,G+gt+s.c),h=b.Math.max(h,K+r+s.a);for(H=u(qe(t,(ui(),U2)),116),j=new $e(d-H.b,v-H.d),C=new nr((!t.a&&(t.a=new fe(rs,t,10,11)),t.a));C.e!=C.i.gc();)k=u(dr(C),33),ku(k,k.i-j.a),Eu(k,k.j-j.b);tt=o-d+(H.b+H.c),n=h-v+(H.d+H.a),tv(t,tt),Jw(t,n),e.n&&t&&gf(e,pf(t),(Sl(),Ql))}function che(t){var e,n,r,s,o,h,d,v,k,C;for(r=new he,h=new S(t.e.a);h.a0){Kz(t,n,0),n.a+=String.fromCharCode(r),s=ofn(e,o),Kz(t,n,s),o+=s-1;continue}r==39?o+11)for(K=Nt(Cr,Xr,25,t.b.b.c.length,15,1),M=0,k=new S(t.b.b);k.a=d&&s<=v)d<=s&&o<=v?(n[C++]=s,n[C++]=o,r+=2):d<=s?(n[C++]=s,n[C++]=v,t.b[r]=v+1,h+=2):o<=v?(n[C++]=d,n[C++]=o,r+=2):(n[C++]=d,n[C++]=v,t.b[r]=v+1);else if(vsb)&&d<10);ubt(t.c,new W5),uhe(t),hnn(t.c),m4n(t.f)}function _4n(t,e,n){var r,s,o,h,d,v,k,C,M,j,H,G,K,tt;if(je(Re(Q(n,(Te(),Hy)))))for(d=new S(n.j);d.a=2){for(v=ei(n,0),h=u(ti(v),8),d=u(ti(v),8);d.a0&&$D(k,!0,(ao(),Cf)),d.k==(Vn(),ks)&&NXt(k),ki(t.f,d,e)}}function M4n(t,e,n){var r,s,o,h,d,v,k,C,M,j;switch(vr(n,"Node promotion heuristic",1),t.g=e,N5n(t),t.q=u(Q(e,(Te(),oht)),260),C=u(Q(t.g,o9t),19).a,o=new pN,t.q.g){case 2:case 1:IE(t,o);break;case 3:for(t.q=(y4(),EG),IE(t,o),v=0,d=new S(t.a);d.at.j&&(t.q=FO,IE(t,o));break;case 4:for(t.q=(y4(),EG),IE(t,o),k=0,s=new S(t.b);s.at.k&&(t.q=NO,IE(t,o));break;case 6:j=ps(b.Math.ceil(t.f.length*C/100)),IE(t,new _p(j));break;case 5:M=ps(b.Math.ceil(t.d*C/100)),IE(t,new Hf(M));break;default:IE(t,o)}Evn(t,e),or(n)}function hhe(t,e,n){var r,s,o,h;this.j=t,this.e=_4t(t),this.o=this.j.e,this.i=!!this.o,this.p=this.i?u(Ne(n,Na(this.o).p),214):null,s=u(Q(t,(ae(),Vc)),21),this.g=s.Hc((oo(),vh)),this.b=new he,this.d=new Oie(this.e),h=u(Q(this.j,$6),230),this.q=cun(e,h,this.e),this.k=new PQt(this),o=A1(lt(ct(g2e,1),De,225,0,[this,this.d,this.k,this.q])),e==(ev(),RO)&&!je(Re(Q(t,(Te(),$y))))?(r=new A4t(this.e),o.c[o.c.length]=r,this.c=new rmt(r,h,u(this.q,402))):e==RO&&je(Re(Q(t,(Te(),$y))))?(r=new A4t(this.e),o.c[o.c.length]=r,this.c=new bne(r,h,u(this.q,402))):this.c=new gGt(e,this),le(o,this.c),Ule(o,this.e),this.s=fxn(this.k)}function D4n(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt;for(M=u(xj((h=ei(new Lp(e).a.d,0),new Ex(h))),86),G=M?u(Q(M,(fc(),Rht)),86):null,s=1;M&&G;){for(v=0,Rt=0,n=M,r=G,d=0;d=t.i?(++t.i,le(t.a,pe(1)),le(t.b,C)):(r=t.c[e.p][1],ch(t.a,k,pe(u(Ne(t.a,k),19).a+1-r)),ch(t.b,k,Xt(ye(Ne(t.b,k)))+C-r*t.e)),(t.q==(y4(),FO)&&(u(Ne(t.a,k),19).a>t.j||u(Ne(t.a,k-1),19).a>t.j)||t.q==NO&&(Xt(ye(Ne(t.b,k)))>t.k||Xt(ye(Ne(t.b,k-1)))>t.k))&&(v=!1),h=new ar(lr(jo(e).a.Kc(),new z));zr(h);)o=u(Mr(h),17),d=o.c.i,t.f[d.p]==k&&(M=fhe(t,d),s=s+u(M.a,19).a,v=v&&je(Re(M.b)));return t.f[e.p]=k,s=s+t.c[e.p][0],new fa(pe(s),(Nn(),!!v))}function Txt(t,e,n,r,s){var o,h,d,v,k,C,M,j,H,G,K,tt,gt;for(M=new _r,h=new he,Poe(t,n,t.d.fg(),h,M),Poe(t,r,t.d.gg(),h,M),t.b=.2*(K=Ece(Wo(new Tn(null,new _n(h,16)),new eZ)),tt=Ece(Wo(new Tn(null,new _n(h,16)),new nZ)),b.Math.min(K,tt)),o=0,d=0;d=2&&(gt=Gce(h,!0,j),!t.e&&(t.e=new K$t(t)),ufn(t.e,gt,h,t.b)),Cae(h,j),W4n(h),H=-1,C=new S(h);C.ad)}function O4n(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G,K;for(n=u(Q(t,(Te(),cs)),98),h=t.f,o=t.d,d=h.a+o.b+o.c,v=0-o.d-t.c.b,C=h.b+o.d+o.a-t.c.b,k=new he,M=new he,s=new S(e);s.a0),u(C.a.Xb(C.c=--C.b),17));o!=r&&C.b>0;)t.a[o.p]=!0,t.a[r.p]=!0,o=(Zn(C.b>0),u(C.a.Xb(C.c=--C.b),17));C.b>0&&Cl(C)}}function bhe(t,e,n){var r,s,o,h,d,v,k,C,M;if(t.a!=e.Aj())throw it(new Fn(QE+e.ne()+Cv));if(r=$g(($u(),ya),e).$k(),r)return r.Aj().Nh().Ih(r,n);if(h=$g(ya,e).al(),h){if(n==null)return null;if(d=u(n,15),d.dc())return"";for(M=new Ag,o=d.Kc();o.Ob();)s=o.Pb(),go(M,h.Aj().Nh().Ih(h,s)),M.a+=" ";return int(M,M.a.length-1)}if(C=$g(ya,e).bl(),!C.dc()){for(k=C.Kc();k.Ob();)if(v=u(k.Pb(),148),v.wj(n))try{if(M=v.Aj().Nh().Ih(v,n),M!=null)return M}catch(j){if(j=Wi(j),!_t(j,102))throw it(j)}throw it(new Fn("Invalid value: '"+n+"' for datatype :"+e.ne()))}return u(e,834).Fj(),n==null?null:_t(n,172)?""+u(n,172).a:ol(n)==tV?VUt(aA[0],u(n,199)):$o(n)}function j4n(t){var e,n,r,s,o,h,d,v,k,C;for(k=new Zi,d=new Zi,o=new S(t);o.a-1){for(s=ei(d,0);s.b!=s.d.c;)r=u(ti(s),128),r.v=h;for(;d.b!=0;)for(r=u(Dst(d,0),128),n=new S(r.i);n.a0&&(n+=v.n.a+v.o.a/2,++M),G=new S(v.j);G.a0&&(n/=M),gt=Nt(aa,vo,25,r.a.c.length,15,1),d=0,k=new S(r.a);k.a=d&&s<=v)d<=s&&o<=v?r+=2:d<=s?(t.b[r]=v+1,h+=2):o<=v?(n[C++]=s,n[C++]=d-1,r+=2):(n[C++]=s,n[C++]=d-1,t.b[r]=v+1,h+=2);else if(v0?s-=864e5:s+=864e5,v=new X2t(Pa(Tu(e.q.getTime()),s))),C=new Im,k=t.a.length,o=0;o=97&&r<=122||r>=65&&r<=90){for(h=o+1;h=k)throw it(new Fn("Missing trailing '"));h+10&&n.c==0&&(!e&&(e=new he),e.c[e.c.length]=n);if(e)for(;e.c.length!=0;){if(n=u(Fg(e,0),233),n.b&&n.b.c.length>0){for(o=(!n.b&&(n.b=new he),new S(n.b));o.aRo(t,n,0))return new fa(s,n)}else if(Xt(E1(s.g,s.d[0]).a)>Xt(E1(n.g,n.d[0]).a))return new fa(s,n)}for(d=(!n.e&&(n.e=new he),n.e).Kc();d.Ob();)h=u(d.Pb(),233),v=(!h.b&&(h.b=new he),h.b),Km(0,v.c.length),XC(v.c,0,n),h.c==v.c.length&&(e.c[e.c.length]=h)}return null}function xhe(t,e){var n,r,s,o,h,d,v,k,C;if(t==null)return _u;if(v=e.a.zc(t,e),v!=null)return"[...]";for(n=new f2(Ya,"[","]"),s=t,o=0,h=s.length;o=14&&C<=16))?e.a._b(r)?(n.a?Gr(n.a,n.b):n.a=new Ol(n.d),h9(n.a,"[...]")):(d=u2(r),k=new E9(e),$0(n,xhe(d,k))):_t(r,177)?$0(n,Npn(u(r,177))):_t(r,190)?$0(n,C0n(u(r,190))):_t(r,195)?$0(n,Fgn(u(r,195))):_t(r,2012)?$0(n,_0n(u(r,2012))):_t(r,48)?$0(n,Fpn(u(r,48))):_t(r,364)?$0(n,Kpn(u(r,364))):_t(r,832)?$0(n,Ppn(u(r,832))):_t(r,104)&&$0(n,Opn(u(r,104))):$0(n,r==null?_u:$o(r));return n.a?n.e.length==0?n.a.a:n.a.a+(""+n.e):n.c}function khe(t,e,n,r){var s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St;for(d=x4(e,!1,!1),gt=lI(d),r&&(gt=qD(gt)),St=Xt(ye(qe(e,(o_(),Qut)))),tt=(Zn(gt.b!=0),u(gt.a.a.c,8)),M=u(Zf(gt,1),8),gt.b>2?(C=new he,Ls(C,new Qd(gt,1,gt.b)),o=efe(C,St+t.a),Mt=new nat(o),Mo(Mt,e),n.c[n.c.length]=Mt):r?Mt=u(tr(t.b,e0(e)),266):Mt=u(tr(t.b,tb(e)),266),v=e0(e),r&&(v=tb(e)),h=epn(tt,v),k=St+t.a,h.a?(k+=b.Math.abs(tt.b-M.b),K=new $e(M.a,(M.b+tt.b)/2)):(k+=b.Math.abs(tt.a-M.a),K=new $e((M.a+tt.a)/2,M.b)),r?ki(t.d,e,new K3t(Mt,h,K,k)):ki(t.c,e,new K3t(Mt,h,K,k)),ki(t.b,e,Mt),G=(!e.n&&(e.n=new fe(qo,e,1,7)),e.n),H=new nr(G);H.e!=H.i.gc();)j=u(dr(H),137),s=xI(t,j,!0,0,0),n.c[n.c.length]=s}function W4n(t){var e,n,r,s,o,h,d,v,k,C;for(k=new he,d=new he,h=new S(t);h.a-1){for(o=new S(d);o.a0)&&(aR(v,b.Math.min(v.o,s.o-1)),TC(v,v.i-1),v.i==0&&(d.c[d.c.length]=v))}}function PE(t,e,n){var r,s,o,h,d,v,k;if(k=t.c,!e&&(e=oLt),t.c=e,t.Db&4&&!(t.Db&1)&&(v=new Js(t,1,2,k,t.c),n?n.Ei(v):n=v),k!=e){if(_t(t.Cb,284))t.Db>>16==-10?n=u(t.Cb,284).nk(e,n):t.Db>>16==-15&&(!e&&(e=(dn(),W1)),!k&&(k=(dn(),W1)),t.Cb.nh()&&(v=new z0(t.Cb,1,13,k,e,Hg(al(u(t.Cb,59)),t),!1),n?n.Ei(v):n=v));else if(_t(t.Cb,88))t.Db>>16==-23&&(_t(e,88)||(e=(dn(),Kh)),_t(k,88)||(k=(dn(),Kh)),t.Cb.nh()&&(v=new z0(t.Cb,1,10,k,e,Hg(Lc(u(t.Cb,26)),t),!1),n?n.Ei(v):n=v));else if(_t(t.Cb,444))for(d=u(t.Cb,836),h=(!d.b&&(d.b=new mR(new aet)),d.b),o=(r=new p2(new Cg(h.a).a),new yR(r));o.a.b;)s=u(Zw(o.a).cd(),87),n=PE(s,vq(s,d),n)}return n}function Y4n(t,e){var n,r,s,o,h,d,v,k,C,M,j;for(h=je(Re(qe(t,(Te(),Hy)))),j=u(qe(t,Gy),21),v=!1,k=!1,M=new nr((!t.c&&(t.c=new fe(gl,t,9,9)),t.c));M.e!=M.i.gc()&&(!v||!k);){for(o=u(dr(M),118),d=0,s=zp(D1(lt(ct(j1,1),De,20,0,[(!o.d&&(o.d=new Cn(Ys,o,8,5)),o.d),(!o.e&&(o.e=new Cn(Ys,o,7,4)),o.e)])));zr(s)&&(r=u(Mr(s),79),C=h&&fv(r)&&je(Re(qe(r,j2))),n=Jle((!r.b&&(r.b=new Cn(br,r,4,7)),r.b),o)?t==es(Do(u(At((!r.c&&(r.c=new Cn(br,r,5,8)),r.c),0),82))):t==es(Do(u(At((!r.b&&(r.b=new Cn(br,r,4,7)),r.b),0),82))),!((C||n)&&(++d,d>1))););(d>0||j.Hc((Zu(),sg))&&(!o.n&&(o.n=new fe(qo,o,1,7)),o.n).i>0)&&(v=!0),d>1&&(k=!0)}v&&e.Fc((oo(),vh)),k&&e.Fc((oo(),yS))}function Ehe(t){var e,n,r,s,o,h,d,v,k,C,M,j;if(j=u(qe(t,(ui(),G2)),21),j.dc())return null;if(d=0,h=0,j.Hc((Al(),oP))){for(C=u(qe(t,KS),98),r=2,n=2,s=2,o=2,e=es(t)?u(qe(es(t),qv),103):u(qe(t,qv),103),k=new nr((!t.c&&(t.c=new fe(gl,t,9,9)),t.c));k.e!=k.i.gc();)if(v=u(dr(k),118),M=u(qe(v,u5),61),M==(ve(),Zo)&&(M=uxt(v,e),wo(v,u5,M)),C==(ua(),Gc))switch(M.g){case 1:r=b.Math.max(r,v.i+v.g);break;case 2:n=b.Math.max(n,v.j+v.f);break;case 3:s=b.Math.max(s,v.i+v.g);break;case 4:o=b.Math.max(o,v.j+v.f)}else switch(M.g){case 1:r+=v.g+2;break;case 2:n+=v.f+2;break;case 3:s+=v.g+2;break;case 4:o+=v.f+2}d=b.Math.max(r,s),h=b.Math.max(n,o)}return wv(t,d,h,!0,!0)}function Rat(t,e,n,r,s){var o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt;for(Mt=u(Bl(ez(Ri(new Tn(null,new _n(e.d,16)),new t8(n)),new lM(n)),c2(new ke,new ce,new Xn,lt(ct(fl,1),oe,132,0,[(O1(),Ul)]))),15),M=wi,C=Sa,v=new S(e.b.j);v.a0,k?k&&(j=gt.p,h?++j:--j,M=u(Ne(gt.c.a,j),10),r=gre(M),H=!(cat(r,ue,n[0])||UKt(r,ue,n[0]))):H=!0),G=!1,Kt=e.D.i,Kt&&Kt.c&&d.e&&(C=h&&Kt.p>0||!h&&Kt.p0&&(e.a+=Ya),Nq(u(dr(d),160),e);for(e.a+=Uot,v=new Nx((!r.c&&(r.c=new Cn(br,r,5,8)),r.c));v.e!=v.i.gc();)v.e>0&&(e.a+=Ya),Nq(u(dr(v),160),e);e.a+=")"}}function t5n(t,e,n){var r,s,o,h,d,v,k,C,M,j,H;if(o=u(Q(t,(ae(),_i)),79),!!o){for(r=t.a,s=new xo(n),Li(s,Vdn(t)),J8(t.d.i,t.c.i)?(j=t.c,M=Yo(lt(ct(Ws,1),ee,8,0,[j.n,j.a])),ia(M,n)):M=_1(t.c),fs(r,M,r.a,r.a.a),H=_1(t.d),Q(t,Qlt)!=null&&Li(H,u(Q(t,Qlt),8)),fs(r,H,r.c.b,r.c),ny(r,s),h=x4(o,!0,!0),uz(h,u(At((!o.b&&(o.b=new Cn(br,o,4,7)),o.b),0),82)),lz(h,u(At((!o.c&&(o.c=new Cn(br,o,5,8)),o.c),0),82)),CI(r,h),C=new S(t.b);C.a=0){for(v=null,d=new da(C.a,k+1);d.bh?1:Iw(isNaN(0),isNaN(h)))<0&&(wf(_d),(b.Math.abs(h-1)<=_d||h==1||isNaN(h)&&isNaN(1)?0:h<1?-1:h>1?1:Iw(isNaN(h),isNaN(1)))<0)&&(wf(_d),(b.Math.abs(0-d)<=_d||d==0||isNaN(0)&&isNaN(d)?0:0d?1:Iw(isNaN(0),isNaN(d)))<0)&&(wf(_d),(b.Math.abs(d-1)<=_d||d==1||isNaN(d)&&isNaN(1)?0:d<1?-1:d>1?1:Iw(isNaN(d),isNaN(1)))<0)),o)}function n5n(t){var e,n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt,ue;for(M=new Svt(new Dt(t));M.b!=M.c.a.d;)for(C=Ate(M),d=u(C.d,56),e=u(C.e,56),h=d.Tg(),K=0,Rt=(h.i==null&&vd(h),h.i).length;K=0&&K=k.c.c.length?C=omt((Vn(),Os),ta):C=omt((Vn(),ta),ta),C*=2,o=n.a.g,n.a.g=b.Math.max(o,o+(C-o)),h=n.b.g,n.b.g=b.Math.max(h,h+(C-h)),s=e}}function s5n(t,e,n,r,s){var o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt;for(Kt=VYt(t),C=new he,d=t.c.length,M=d-1,j=d+1;Kt.a.c!=0;){for(;n.b!=0;)St=(Zn(n.b!=0),u(lh(n,n.a.a),112)),P9(Kt.a,St)!=null,St.g=M--,lxt(St,e,n,r);for(;e.b!=0;)Rt=(Zn(e.b!=0),u(lh(e,e.a.a),112)),P9(Kt.a,Rt)!=null,Rt.g=j++,lxt(Rt,e,n,r);for(k=Sa,gt=(h=new y9(new w9(new y(Kt.a).a).b),new g(h));TM(gt.a.a);){if(tt=(o=Lj(gt.a),u(o.cd(),112)),!r&&tt.b>0&&tt.a<=0){C.c=Nt(Qn,De,1,0,5,1),C.c[C.c.length]=tt;break}K=tt.i-tt.d,K>=k&&(K>k&&(C.c=Nt(Qn,De,1,0,5,1),k=K),C.c[C.c.length]=tt)}C.c.length!=0&&(v=u(Ne(C,Zz(s,C.c.length)),112),P9(Kt.a,v)!=null,v.g=j++,lxt(v,e,n,r),C.c=Nt(Qn,De,1,0,5,1))}for(Mt=t.c.length+1,G=new S(t);G.a0&&(j.d+=C.n.d,j.d+=C.d),j.a>0&&(j.a+=C.n.a,j.a+=C.d),j.b>0&&(j.b+=C.n.b,j.b+=C.d),j.c>0&&(j.c+=C.n.c,j.c+=C.d),j}function Che(t,e,n){var r,s,o,h,d,v,k,C,M,j,H,G;for(j=n.d,M=n.c,o=new $e(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a),h=o.b,k=new S(t.a);k.a0&&(t.c[e.c.p][e.p].d+=ul(t.i,24)*$I*.07000000029802322-.03500000014901161,t.c[e.c.p][e.p].a=t.c[e.c.p][e.p].d/t.c[e.c.p][e.p].b)}}function d5n(t){var e,n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt;for(G=new S(t);G.ar.d,r.d=b.Math.max(r.d,e),d&&n&&(r.d=b.Math.max(r.d,r.a),r.a=r.d+s);break;case 3:n=e>r.a,r.a=b.Math.max(r.a,e),d&&n&&(r.a=b.Math.max(r.a,r.d),r.d=r.a+s);break;case 2:n=e>r.c,r.c=b.Math.max(r.c,e),d&&n&&(r.c=b.Math.max(r.b,r.c),r.b=r.c+s);break;case 4:n=e>r.b,r.b=b.Math.max(r.b,e),d&&n&&(r.b=b.Math.max(r.b,r.c),r.c=r.b+s)}}}function w5n(t){var e,n,r,s,o,h,d,v,k,C,M;for(k=new S(t);k.a0||C.j==Bn&&C.e.c.length-C.g.c.length<0)){e=!1;break}for(s=new S(C.g);s.a=k&&Kt>=tt&&(j+=G.n.b+K.n.b+K.a.b-Rt,++d));if(n)for(h=new S(Mt.e);h.a=k&&Kt>=tt&&(j+=G.n.b+K.n.b+K.a.b-Rt,++d))}d>0&&(ue+=j/d,++H)}H>0?(e.a=s*ue/H,e.g=H):(e.a=0,e.g=0)}function m5n(t,e){var n,r,s,o,h,d,v,k,C,M,j;for(s=new S(t.a.b);s.aCs||e.o==H2&&C0&&ku(gt,Rt*ue),Kt>0&&Eu(gt,Kt*_e);for(K9(t.b,new hw),e=new he,d=new p2(new Cg(t.c).a);d.b;)h=Zw(d),r=u(h.cd(),79),n=u(h.dd(),395).a,s=x4(r,!1,!1),M=_ae(e0(r),lI(s),n),CI(M,s),St=Rae(r),St&&Ro(e,St,0)==-1&&(e.c[e.c.length]=St,VXt(St,(Zn(M.b!=0),u(M.a.a.c,8)),n));for(tt=new p2(new Cg(t.d).a);tt.b;)K=Zw(tt),r=u(K.cd(),79),n=u(K.dd(),395).a,s=x4(r,!1,!1),M=_ae(tb(r),qD(lI(s)),n),M=qD(M),CI(M,s),St=jae(r),St&&Ro(e,St,0)==-1&&(e.c[e.c.length]=St,VXt(St,(Zn(M.b!=0),u(M.c.b.c,8)),n))}function Ahe(t,e,n,r){var s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt,ue,_e;if(n.c.length!=0){for(H=new he,j=new S(n);j.a1)for(H=new vxt(G,St,r),va(St,new xGt(t,H)),h.c[h.c.length]=H,M=St.a.ec().Kc();M.Ob();)C=u(M.Pb(),46),mu(o,C.b);if(d.a.gc()>1)for(H=new vxt(G,d,r),va(d,new kGt(t,H)),h.c[h.c.length]=H,M=d.a.ec().Kc();M.Ob();)C=u(M.Pb(),46),mu(o,C.b)}}function Mhe(t){Mw(t,new k2(MR(_w(Ew(Cw(Tw(new kg,Sd),"ELK Radial"),'A radial layout provider which is based on the algorithm of Peter Eades published in "Drawing free trees.", published by International Institute for Advanced Study of Social Information Science, Fujitsu Limited in 1991. The radial layouter takes a tree and places the nodes in radial order around the root. The nodes of the same tree level are placed on the same radius.'),new dZ),Sd))),xe(t,Sd,yH,Ie(Qye)),xe(t,Sd,Cy,Ie(Zye)),xe(t,Sd,D4,Ie(Wye)),xe(t,Sd,C6,Ie(Yye)),xe(t,Sd,T6,Ie(Kye)),xe(t,Sd,UE,Ie(Uye)),xe(t,Sd,j_,Ie(L_t)),xe(t,Sd,WE,Ie(Xye)),xe(t,Sd,Pct,Ie(Wht)),xe(t,Sd,Oct,Ie(Yht)),xe(t,Sd,Zkt,Ie(M_t)),xe(t,Sd,Ykt,Ie(BG)),xe(t,Sd,Kkt,Ie(RG)),xe(t,Sd,Xkt,Ie(qO)),xe(t,Sd,Qkt,Ie(D_t))}function Sxt(t){var e;if(this.r=nrn(new bc,new Cc),this.b=new i_(u(Lr(Xa),290)),this.p=new i_(u(Lr(Xa),290)),this.i=new i_(u(Lr($pe),290)),this.e=t,this.o=new xo(t.rf()),this.D=t.Df()||je(Re(t.We((ui(),ZO)))),this.A=u(t.We((ui(),G2)),21),this.B=u(t.We(xb),21),this.q=u(t.We(KS),98),this.u=u(t.We(Qy),21),!ugn(this.u))throw it(new R3("Invalid port label placement: "+this.u));if(this.v=je(Re(t.We(uAt))),this.j=u(t.We(o5),21),!O2n(this.j))throw it(new R3("Invalid node label placement: "+this.j));this.n=u(l_(t,XSt),116),this.k=Xt(ye(l_(t,JG))),this.d=Xt(ye(l_(t,dAt))),this.w=Xt(ye(l_(t,vAt))),this.s=Xt(ye(l_(t,gAt))),this.t=Xt(ye(l_(t,pAt))),this.C=u(l_(t,bAt),142),this.c=2*this.d,e=!this.B.Hc((ll(),cP)),this.f=new a_(0,e,0),this.g=new a_(1,e,0),het(this.f,(Kf(),eu),this.g)}function A5n(t,e,n,r,s){var o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt,ue,_e,We,Qe,Rn;for(St=0,G=0,H=0,j=1,Mt=new nr((!t.a&&(t.a=new fe(rs,t,10,11)),t.a));Mt.e!=Mt.i.gc();)tt=u(dr(Mt),33),j+=j0(new ar(lr(K0(tt).a.Kc(),new z))),We=tt.g,G=b.Math.max(G,We),M=tt.f,H=b.Math.max(H,M),St+=We*M;for(K=(!t.a&&(t.a=new fe(rs,t,10,11)),t.a).i,h=St+2*r*r*j*K,o=b.Math.sqrt(h),v=b.Math.max(o*n,G),d=b.Math.max(o/n,H),gt=new nr((!t.a&&(t.a=new fe(rs,t,10,11)),t.a));gt.e!=gt.i.gc();)tt=u(dr(gt),33),Qe=s.b+(ul(e,26)*I_+ul(e,27)*O_)*(v-tt.g),Rn=s.b+(ul(e,26)*I_+ul(e,27)*O_)*(d-tt.f),ku(tt,Qe),Eu(tt,Rn);for(_e=v+(s.b+s.c),ue=d+(s.d+s.a),Kt=new nr((!t.a&&(t.a=new fe(rs,t,10,11)),t.a));Kt.e!=Kt.i.gc();)for(Rt=u(dr(Kt),33),C=new ar(lr(K0(Rt).a.Kc(),new z));zr(C);)k=u(Mr(C),79),w_(k)||Lxn(k,e,_e,ue);_e+=s.b+s.c,ue+=s.d+s.a,wv(t,_e,ue,!1,!0)}function Rq(t){var e,n,r,s,o,h,d,v,k,C,M;if(t==null)throw it(new ld(_u));if(k=t,o=t.length,v=!1,o>0&&(e=(Rr(0,t.length),t.charCodeAt(0)),(e==45||e==43)&&(t=t.substr(1),--o,v=e==45)),o==0)throw it(new ld(yv+k+'"'));for(;t.length>0&&(Rr(0,t.length),t.charCodeAt(0)==48);)t=t.substr(1),--o;if(o>(vle(),$ge)[10])throw it(new ld(yv+k+'"'));for(s=0;s0&&(M=-parseInt(t.substr(0,r),10),t=t.substr(r),o-=r,n=!1);o>=h;){if(r=parseInt(t.substr(0,h),10),t=t.substr(h),o-=h,n)n=!1;else{if(yc(M,d)<0)throw it(new ld(yv+k+'"'));M=_a(M,C)}M=Jp(M,r)}if(yc(M,0)>0)throw it(new ld(yv+k+'"'));if(!v&&(M=z8(M),yc(M,0)<0))throw it(new ld(yv+k+'"'));return M}function Axt(t,e){oKt();var n,r,s,o,h,d,v;if(this.a=new v2t(this),this.b=t,this.c=e,this.f=Xnt(To(($u(),ya),e)),this.f.dc())if((d=d4t(ya,t))==e)for(this.e=!0,this.d=new he,this.f=new Ok,this.f.Fc(O2),u(Pq(TD(ya,Rl(t)),""),26)==t&&this.f.Fc(C9(ya,Rl(t))),s=vat(ya,t).Kc();s.Ob();)switch(r=u(s.Pb(),170),Hw(To(ya,r))){case 4:{this.d.Fc(r);break}case 5:{this.f.Gc(Xnt(To(ya,r)));break}}else if(to(),u(e,66).Oj())for(this.e=!0,this.f=null,this.d=new he,h=0,v=(t.i==null&&vd(t),t.i).length;h=0&&h0&&(u(po(t.b,e),124).a.b=n)}function L5n(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt;for(vr(e,"Comment pre-processing",1),n=0,v=new S(t.a);v.a0&&(v=(Rr(0,e.length),e.charCodeAt(0)),v!=64)){if(v==37&&(M=e.lastIndexOf("%"),k=!1,M!=0&&(M==j-1||(k=(Rr(M+1,e.length),e.charCodeAt(M+1)==46))))){if(h=e.substr(1,M-1),St=hn("%",h)?null:Mxt(h),r=0,k)try{r=ql(e.substr(M+2),Sa,wi)}catch(Rt){throw Rt=Wi(Rt),_t(Rt,127)?(d=Rt,it(new W$(d))):it(Rt)}for(tt=lyt(t.Wg());tt.Ob();)if(G=kz(tt),_t(G,510)&&(s=u(G,590),Mt=s.d,(St==null?Mt==null:hn(St,Mt))&&r--==0))return s;return null}if(C=e.lastIndexOf("."),H=C==-1?e:e.substr(0,C),n=0,C!=-1)try{n=ql(e.substr(C+1),Sa,wi)}catch(Rt){if(Rt=Wi(Rt),_t(Rt,127))H=e;else throw it(Rt)}for(H=hn("%",H)?null:Mxt(H),K=lyt(t.Wg());K.Ob();)if(G=kz(K),_t(G,191)&&(o=u(G,191),gt=o.ne(),(H==null?gt==null:hn(H,gt))&&n--==0))return o;return null}return ehe(t,e)}function I5n(t){var e,n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt,ue,_e,We,Qe,Rn,zn;for(ue=new he,G=new S(t.b);G.a=e.length)return{done:!0};var s=e[r++];return{value:[s,n.get(s)],done:!1}}}},Bvn()||(t.prototype.createObject=function(){return{}},t.prototype.get=function(e){return this.obj[":"+e]},t.prototype.set=function(e,n){this.obj[":"+e]=n},t.prototype[kot]=function(e){delete this.obj[":"+e]},t.prototype.keys=function(){var e=[];for(var n in this.obj)n.charCodeAt(0)==58&&e.push(n.substring(1));return e}),t}function P5n(t){cxt();var e,n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt;if(t==null)return null;if(M=t.length*8,M==0)return"";for(d=M%24,H=M/24|0,j=d!=0?H+1:H,o=null,o=Nt(xh,yd,25,j*4,15,1),k=0,C=0,e=0,n=0,r=0,h=0,s=0,v=0;v>24,k=(e&3)<<24>>24,G=e&-128?(e>>2^192)<<24>>24:e>>2<<24>>24,K=n&-128?(n>>4^240)<<24>>24:n>>4<<24>>24,tt=r&-128?(r>>6^252)<<24>>24:r>>6<<24>>24,o[h++]=lp[G],o[h++]=lp[K|k<<4],o[h++]=lp[C<<2|tt],o[h++]=lp[r&63];return d==8?(e=t[s],k=(e&3)<<24>>24,G=e&-128?(e>>2^192)<<24>>24:e>>2<<24>>24,o[h++]=lp[G],o[h++]=lp[k<<4],o[h++]=61,o[h++]=61):d==16&&(e=t[s],n=t[s+1],C=(n&15)<<24>>24,k=(e&3)<<24>>24,G=e&-128?(e>>2^192)<<24>>24:e>>2<<24>>24,K=n&-128?(n>>4^240)<<24>>24:n>>4<<24>>24,o[h++]=lp[G],o[h++]=lp[K|k<<4],o[h++]=lp[C<<2],o[h++]=61),Mh(o,0,o.length)}function F5n(t,e){var n,r,s,o,h,d,v;if(t.e==0&&t.p>0&&(t.p=-(t.p-1)),t.p>Sa&&umt(e,t.p-ab),h=e.q.getDate(),oD(e,1),t.k>=0&&win(e,t.k),t.c>=0?oD(e,t.c):t.k>=0?(v=new Myt(e.q.getFullYear()-ab,e.q.getMonth(),35),r=35-v.q.getDate(),oD(e,b.Math.min(r,h))):oD(e,h),t.f<0&&(t.f=e.q.getHours()),t.b>0&&t.f<12&&(t.f+=12),AQe(e,t.f==24&&t.g?0:t.f),t.j>=0&&Aan(e,t.j),t.n>=0&&Uan(e,t.n),t.i>=0&&aUt(e,Pa(_a(aI(Tu(e.q.getTime()),Wg),Wg),t.i)),t.a&&(s=new BR,umt(s,s.q.getFullYear()-ab-80),Cet(Tu(e.q.getTime()),Tu(s.q.getTime()))&&umt(e,s.q.getFullYear()-ab+100)),t.d>=0){if(t.c==-1)n=(7+t.d-e.q.getDay())%7,n>3&&(n-=7),d=e.q.getMonth(),oD(e,e.q.getDate()+n),e.q.getMonth()!=d&&oD(e,e.q.getDate()+(n>0?-7:7));else if(e.q.getDay()!=t.d)return!1}return t.o>Sa&&(o=e.q.getTimezoneOffset(),aUt(e,Pa(Tu(e.q.getTime()),(t.o-o)*60*Wg))),!0}function Ohe(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt;if(s=Q(e,(ae(),_i)),!!_t(s,239)){for(G=u(s,33),K=e.e,j=new xo(e.c),o=e.d,j.a+=o.b,j.b+=o.d,Rt=u(qe(G,(Te(),pG)),174),Nu(Rt,(ll(),nU))&&(H=u(qe(G,d9t),116),cpt(H,o.a),Mtt(H,o.d),upt(H,o.b),gpt(H,o.c)),n=new he,C=new S(e.a);C.a0&&le(t.p,C),le(t.o,C);e-=r,H=v+e,k+=e*t.e,ch(t.a,d,pe(H)),ch(t.b,d,k),t.j=b.Math.max(t.j,H),t.k=b.Math.max(t.k,k),t.d+=e,e+=K}}function ve(){ve=Z;var t;Zo=new NM(N_,0),Pn=new NM(Kq,1),Hn=new NM(Iot,2),mr=new NM(Oot,3),Bn=new NM(Pot,4),U1=(wn(),new s8((t=u(Vf(Xa),9),new sh(t,u(ff(t,t.length),9),0)))),Mf=jg(ji(Pn,lt(ct(Xa,1),xc,61,0,[]))),mh=jg(ji(Hn,lt(ct(Xa,1),xc,61,0,[]))),Kl=jg(ji(mr,lt(ct(Xa,1),xc,61,0,[]))),Vh=jg(ji(Bn,lt(ct(Xa,1),xc,61,0,[]))),Au=jg(ji(Pn,lt(ct(Xa,1),xc,61,0,[mr]))),lu=jg(ji(Hn,lt(ct(Xa,1),xc,61,0,[Bn]))),Df=jg(ji(Pn,lt(ct(Xa,1),xc,61,0,[Bn]))),el=jg(ji(Pn,lt(ct(Xa,1),xc,61,0,[Hn]))),Xl=jg(ji(mr,lt(ct(Xa,1),xc,61,0,[Bn]))),yh=jg(ji(Hn,lt(ct(Xa,1),xc,61,0,[mr]))),nl=jg(ji(Pn,lt(ct(Xa,1),xc,61,0,[Hn,Bn]))),Su=jg(ji(Hn,lt(ct(Xa,1),xc,61,0,[mr,Bn]))),Lu=jg(ji(Pn,lt(ct(Xa,1),xc,61,0,[mr,Bn]))),Vu=jg(ji(Pn,lt(ct(Xa,1),xc,61,0,[Hn,mr]))),Uc=jg(ji(Pn,lt(ct(Xa,1),xc,61,0,[Hn,mr,Bn])))}function Bhe(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St;if(e.b!=0){for(H=new Zi,d=null,G=null,r=ps(b.Math.floor(b.Math.log(e.b)*b.Math.LOG10E)+1),v=0,St=ei(e,0);St.b!=St.d.c;)for(gt=u(ti(St),86),Vt(G)!==Vt(Q(gt,(fc(),zS)))&&(G=Br(Q(gt,zS)),v=0),G!=null?d=G+iZt(v++,r):d=iZt(v++,r),Jt(gt,zS,d),tt=(s=ei(new Lp(gt).a.d,0),new Ex(s));OR(tt.a);)K=u(ti(tt.a),188).c,fs(H,K,H.c.b,H.c),Jt(K,zS,d);for(j=new _r,h=0;h=v){Zn(gt.b>0),gt.a.Xb(gt.c=--gt.b);break}else K.a>k&&(s?(Ls(s.b,K.b),s.a=b.Math.max(s.a,K.a),Cl(gt)):(le(K.b,M),K.c=b.Math.min(K.c,k),K.a=b.Math.max(K.a,v),s=K));s||(s=new kqt,s.c=k,s.a=v,zm(gt,s),le(s.b,M))}for(d=e.b,C=0,tt=new S(r);tt.ad?1:0:(t.b&&(t.b._b(o)&&(s=u(t.b.xc(o),19).a),t.b._b(v)&&(d=u(t.b.xc(v),19).a)),sd?1:0)):e.e.c.length!=0&&n.g.c.length!=0?1:-1}function j5n(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt,ue,_e;for(vr(e,S1e,1),K=new he,ue=new he,k=new S(t.b);k.a0&&(St-=H),mxt(h,St),C=0,j=new S(h.a);j.a0),d.a.Xb(d.c=--d.b)),v=.4*r*C,!o&&d.be.d.c){if(H=t.c[e.a.d],tt=t.c[M.a.d],H==tt)continue;yf(lf(uf(hf(cf(new Ch,1),100),H),tt))}}}}}function Mxt(t){Fat();var e,n,r,s,o,h,d,v;if(t==null)return null;if(s=hd(t,Cu(37)),s<0)return t;for(v=new Ol(t.substr(0,s)),e=Nt(Gu,N4,25,4,15,1),d=0,r=0,h=t.length;ss+2&&Sit((Rr(s+1,t.length),t.charCodeAt(s+1)),tLt,eLt)&&Sit((Rr(s+2,t.length),t.charCodeAt(s+2)),tLt,eLt))if(n=fen((Rr(s+1,t.length),t.charCodeAt(s+1)),(Rr(s+2,t.length),t.charCodeAt(s+2))),s+=2,r>0?(n&192)==128?e[d++]=n<<24>>24:r=0:n>=128&&((n&224)==192?(e[d++]=n<<24>>24,r=2):(n&240)==224?(e[d++]=n<<24>>24,r=3):(n&248)==240&&(e[d++]=n<<24>>24,r=4)),r>0){if(d==r){switch(d){case 2:{qp(v,((e[0]&31)<<6|e[1]&63)&ys);break}case 3:{qp(v,((e[0]&15)<<12|(e[1]&63)<<6|e[2]&63)&ys);break}}d=0,r=0}}else{for(o=0;o0){if(h+r>t.length)return!1;d=gq(t.substr(0,h+r),e)}else d=gq(t,e);switch(o){case 71:return d=w4(t,h,lt(ct(Ae,1),ee,2,6,[mfe,yfe]),e),s.e=d,!0;case 77:return _vn(t,e,s,d,h);case 76:return Svn(t,e,s,d,h);case 69:return vpn(t,e,h,s);case 99:return mpn(t,e,h,s);case 97:return d=w4(t,h,lt(ct(Ae,1),ee,2,6,["AM","PM"]),e),s.b=d,!0;case 121:return Avn(t,e,h,d,n,s);case 100:return d<=0?!1:(s.c=d,!0);case 83:return d<0?!1:Ihn(d,h,e[0],s);case 104:d==12&&(d=0);case 75:case 72:return d<0?!1:(s.f=d,s.g=!1,!0);case 107:return d<0?!1:(s.f=d,s.g=!0,!0);case 109:return d<0?!1:(s.j=d,!0);case 115:return d<0?!1:(s.n=d,!0);case 90:if(hue&&(G.c=ue-G.b),le(h.d,new Hnt(G,a3t(h,G))),Mt=e==Pn?b.Math.max(Mt,K.b+k.b.rf().b):b.Math.min(Mt,K.b));for(Mt+=e==Pn?t.t:-t.t,St=k3t((h.e=Mt,h)),St>0&&(u(po(t.b,e),124).a.b=St),C=j.Kc();C.Ob();)k=u(C.Pb(),111),!(!k.c||k.c.d.c.length<=0)&&(G=k.c.i,G.c-=k.e.a,G.d-=k.e.b)}function U5n(t){var e,n,r,s,o,h,d,v,k,C,M,j,H;for(e=new _r,v=new nr(t);v.e!=v.i.gc();){for(d=u(dr(v),33),n=new Hs,ki(Jut,d,n),H=new bm,s=u(Bl(new Tn(null,new jw(new ar(lr(wI(d).a.Kc(),new z)))),LKt(H,c2(new ke,new ce,new Xn,lt(ct(fl,1),oe,132,0,[(O1(),Ul)])))),83),Zee(n,u(s.xc((Nn(),!0)),14),new Ek),r=u(Bl(Ri(u(s.xc(!1),15).Lc(),new E3),c2(new ke,new ce,new Xn,lt(ct(fl,1),oe,132,0,[Ul]))),15),h=r.Kc();h.Ob();)o=u(h.Pb(),79),j=Rae(o),j&&(k=u(ec(Lo(e.f,j)),21),k||(k=iue(j),au(e.f,j,k)),Ua(n,k));for(s=u(Bl(new Tn(null,new jw(new ar(lr(K0(d).a.Kc(),new z)))),LKt(H,c2(new ke,new ce,new Xn,lt(ct(fl,1),oe,132,0,[Ul])))),83),Zee(n,u(s.xc(!0),14),new Il),r=u(Bl(Ri(u(s.xc(!1),15).Lc(),new L0),c2(new ke,new ce,new Xn,lt(ct(fl,1),oe,132,0,[Ul]))),15),M=r.Kc();M.Ob();)C=u(M.Pb(),79),j=jae(C),j&&(k=u(ec(Lo(e.f,j)),21),k||(k=iue(j),au(e.f,j,k)),Ua(n,k))}}function W5n(t,e){Lat();var n,r,s,o,h,d,v,k,C,M,j,H,G,K;if(v=yc(t,0)<0,v&&(t=z8(t)),yc(t,0)==0)switch(e){case 0:return"0";case 1:return $E;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return H=new Mp,e<0?H.a+="0E+":H.a+="0E",H.a+=e==Sa?"2147483648":""+-e,H.a}C=18,M=Nt(xh,yd,25,C+1,15,1),n=C,K=t;do k=K,K=aI(K,10),M[--n]=Ar(Pa(48,Jp(k,_a(K,10))))&ys;while(yc(K,0)!=0);if(s=Jp(Jp(Jp(C,n),e),1),e==0)return v&&(M[--n]=45),Mh(M,n,C-n);if(e>0&&yc(s,-6)>=0){if(yc(s,0)>=0){for(o=n+Ar(s),d=C-1;d>=o;d--)M[d+1]=M[d];return M[++o]=46,v&&(M[--n]=45),Mh(M,n,C-n+1)}for(h=2;Cet(h,Pa(z8(s),1));h++)M[--n]=48;return M[--n]=46,M[--n]=48,v&&(M[--n]=45),Mh(M,n,C-n)}return G=n+1,r=C,j=new Im,v&&(j.a+="-"),r-G>=1?(qp(j,M[n]),j.a+=".",j.a+=Mh(M,n+1,C-n-1)):j.a+=Mh(M,n,C-n),j.a+="E",yc(s,0)>0&&(j.a+="+"),j.a+=""+_9(s),j.a}function Y5n(t,e,n){var r,s,o,h,d,v,k,C,M,j,H;if(t.e.a.$b(),t.f.a.$b(),t.c.c=Nt(Qn,De,1,0,5,1),t.i.c=Nt(Qn,De,1,0,5,1),t.g.a.$b(),e)for(h=new S(e.a);h.a=1&&(Kt-k>0&&G>=0?(ku(M,M.i+Rt),Eu(M,M.j+v*k)):Kt-k<0&&H>=0&&(ku(M,M.i+Rt*Kt),Eu(M,M.j+v)));return wo(t,(ui(),G2),(Al(),o=u(Vf(rA),9),new sh(o,u(ff(o,o.length),9),0))),new $e(ue,C)}function $he(t){var e,n,r,s,o,h,d,v,k,C,M,j,H,G;if(H=es(Do(u(At((!t.b&&(t.b=new Cn(br,t,4,7)),t.b),0),82))),G=es(Do(u(At((!t.c&&(t.c=new Cn(br,t,5,8)),t.c),0),82))),M=H==G,d=new Ca,e=u(qe(t,(Sz(),_At)),74),e&&e.b>=2){if((!t.a&&(t.a=new fe(Ji,t,6,6)),t.a).i==0)n=(Sw(),s=new ad,s),Dr((!t.a&&(t.a=new fe(Ji,t,6,6)),t.a),n);else if((!t.a&&(t.a=new fe(Ji,t,6,6)),t.a).i>1)for(j=new Nx((!t.a&&(t.a=new fe(Ji,t,6,6)),t.a));j.e!=j.i.gc();)f_(j);CI(e,u(At((!t.a&&(t.a=new fe(Ji,t,6,6)),t.a),0),202))}if(M)for(r=new nr((!t.a&&(t.a=new fe(Ji,t,6,6)),t.a));r.e!=r.i.gc();)for(n=u(dr(r),202),k=new nr((!n.a&&(n.a=new As(Gh,n,5)),n.a));k.e!=k.i.gc();)v=u(dr(k),469),d.a=b.Math.max(d.a,v.a),d.b=b.Math.max(d.b,v.b);for(h=new nr((!t.n&&(t.n=new fe(qo,t,1,7)),t.n));h.e!=h.i.gc();)o=u(dr(h),137),C=u(qe(o,QS),8),C&&x1(o,C.a,C.b),M&&(d.a=b.Math.max(d.a,o.i+o.g),d.b=b.Math.max(d.b,o.j+o.f));return d}function K5n(t,e,n){var r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt,ue,_e,We;for(St=e.c.length,s=new E4(t.a,n,null,null),We=Nt(aa,vo,25,St,15,1),K=Nt(aa,vo,25,St,15,1),G=Nt(aa,vo,25,St,15,1),tt=0,d=0;dWe[v]&&(tt=v),M=new S(t.a.b);M.aH&&(o&&(Zb(ue,j),Zb(We,pe(k.b-1))),pi=n.b,js+=j+e,j=0,C=b.Math.max(C,n.b+n.c+hr)),ku(d,pi),Eu(d,js),C=b.Math.max(C,pi+hr+n.c),j=b.Math.max(j,M),pi+=hr+e;if(C=b.Math.max(C,r),zn=js+j+n.a,znEd,Qe=b.Math.abs(j.b-G.b)>Ed,(!n&&We&&Qe||n&&(We||Qe))&&ri(tt.a,Rt)),Ua(tt.a,r),r.b==0?j=Rt:j=(Zn(r.b!=0),u(r.c.b.c,8)),dun(H,M,K),Lne(s)==_e&&(Na(_e.i)!=s.a&&(K=new Ca,Y4t(K,Na(_e.i),Mt)),Jt(tt,Qlt,K)),Bgn(H,tt,Mt),C.a.zc(H,C);Oa(tt,Kt),oa(tt,_e)}for(k=C.a.ec().Kc();k.Ob();)v=u(k.Pb(),17),Oa(v,null),oa(v,null);or(e)}function zhe(t){var e,n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt;if(t.gc()==1)return u(t.Xb(0),231);if(t.gc()<=0)return new B$;for(s=t.Kc();s.Ob();){for(n=u(s.Pb(),231),G=0,C=wi,M=wi,v=Sa,k=Sa,H=new S(n.e);H.ad&&(St=0,Rt+=h+gt,h=0),Fmn(K,n,St,Rt),e=b.Math.max(e,St+tt.a),h=b.Math.max(h,tt.b),St+=tt.a+gt;return K}function qhe(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G;switch(C=new Pu,t.a.g){case 3:j=u(Q(e.e,(ae(),R2)),15),H=u(Q(e.j,R2),15),G=u(Q(e.f,R2),15),n=u(Q(e.e,Z4),15),r=u(Q(e.j,Z4),15),s=u(Q(e.f,Z4),15),h=new he,Ls(h,j),H.Jc(new cQ),Ls(h,_t(H,152)?Zx(u(H,152)):_t(H,131)?u(H,131).a:_t(H,54)?new kw(H):new Om(H)),Ls(h,G),o=new he,Ls(o,n),Ls(o,_t(r,152)?Zx(u(r,152)):_t(r,131)?u(r,131).a:_t(r,54)?new kw(r):new Om(r)),Ls(o,s),Jt(e.f,R2,h),Jt(e.f,Z4,o),Jt(e.f,hCt,e.f),Jt(e.e,R2,null),Jt(e.e,Z4,null),Jt(e.j,R2,null),Jt(e.j,Z4,null);break;case 1:Ua(C,e.e.a),ri(C,e.i.n),Ua(C,l2(e.j.a)),ri(C,e.a.n),Ua(C,e.f.a);break;default:Ua(C,e.e.a),Ua(C,l2(e.j.a)),Ua(C,e.f.a)}Ah(e.f.a),Ua(e.f.a,C),Oa(e.f,e.e.c),d=u(Q(e.e,(Te(),So)),74),k=u(Q(e.j,So),74),v=u(Q(e.f,So),74),(d||k||v)&&(M=new Pu,wvt(M,v),wvt(M,k),wvt(M,d),Jt(e.f,So,M)),Oa(e.j,null),oa(e.j,null),Oa(e.e,null),oa(e.e,null),Eo(e.a,null),Eo(e.i,null),e.g&&qhe(t,e.g)}function J5n(t){cxt();var e,n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt;if(t==null||(o=K$(t),G=$ln(o),G%4!=0))return null;if(K=G/4|0,K==0)return Nt(Gu,N4,25,0,15,1);for(M=null,e=0,n=0,r=0,s=0,h=0,d=0,v=0,k=0,H=0,j=0,C=0,M=Nt(Gu,N4,25,K*3,15,1);H>4)<<24>>24,M[j++]=((n&15)<<4|r>>2&15)<<24>>24,M[j++]=(r<<6|s)<<24>>24}return!vM(h=o[C++])||!vM(d=o[C++])?null:(e=Y1[h],n=Y1[d],v=o[C++],k=o[C++],Y1[v]==-1||Y1[k]==-1?v==61&&k==61?n&15?null:(tt=Nt(Gu,N4,25,H*3+1,15,1),Dc(M,0,tt,0,H*3),tt[j]=(e<<2|n>>4)<<24>>24,tt):v!=61&&k==61?(r=Y1[v],r&3?null:(tt=Nt(Gu,N4,25,H*3+2,15,1),Dc(M,0,tt,0,H*3),tt[j++]=(e<<2|n>>4)<<24>>24,tt[j]=((n&15)<<4|r>>2&15)<<24>>24,tt)):null:(r=Y1[v],s=Y1[k],M[j++]=(e<<2|n>>4)<<24>>24,M[j++]=((n&15)<<4|r>>2&15)<<24>>24,M[j++]=(r<<6|s)<<24>>24,M))}function txn(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt;for(vr(e,S1e,1),G=u(Q(t,(Te(),eg)),218),s=new S(t.b);s.a=2){for(K=!0,j=new S(o.j),n=u(J(j),11),H=null;j.a0&&(s=u(Ne(tt.c.a,ue-1),10),h=t.i[s.p],We=b.Math.ceil(W3(t.n,s,tt)),o=Kt.a.e-tt.d.d-(h.a.e+s.o.b+s.d.a)-We),k=as,ue0&&_e.a.e.e-_e.a.a-(_e.b.e.e-_e.b.a)<0,G=St.a.e.e-St.a.a-(St.b.e.e-St.b.a)<0&&_e.a.e.e-_e.a.a-(_e.b.e.e-_e.b.a)>0,H=St.a.e.e+St.b.a<_e.b.e.e+_e.a.a,j=St.a.e.e+St.b.a>_e.b.e.e+_e.a.a,Rt=0,!K&&!G&&(j?o+M>0?Rt=M:k-r>0&&(Rt=r):H&&(o+d>0?Rt=d:k-Mt>0&&(Rt=Mt))),Kt.a.e+=Rt,Kt.b&&(Kt.d.e+=Rt),!1))}function Vhe(t,e,n){var r,s,o,h,d,v,k,C,M,j;if(r=new ah(e.qf().a,e.qf().b,e.rf().a,e.rf().b),s=new Fx,t.c)for(h=new S(e.wf());h.ak&&(r.a+=KUt(Nt(xh,yd,25,-k,15,1))),r.a+="Is",hd(v,Cu(32))>=0)for(s=0;s=r.o.b/2}else Mt=!M;Mt?(gt=u(Q(r,(ae(),z6)),15),gt?j?o=gt:(s=u(Q(r,N6),15),s?gt.gc()<=s.gc()?o=gt:o=s:(o=new he,Jt(r,N6,o))):(o=new he,Jt(r,z6,o))):(s=u(Q(r,(ae(),N6)),15),s?M?o=s:(gt=u(Q(r,z6),15),gt?s.gc()<=gt.gc()?o=s:o=gt:(o=new he,Jt(r,z6,o))):(o=new he,Jt(r,N6,o))),o.Fc(t),Jt(t,(ae(),ZV),n),e.d==n?(oa(e,null),n.e.c.length+n.g.c.length==0&&Uo(n,null),Yun(n)):(Oa(e,null),n.e.c.length+n.g.c.length==0&&Uo(n,null)),Ah(e.a)}function ixn(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt,ue,_e,We,Qe,Rn,zn,hr,pi;for(Mt=new da(t.b,0),C=e.Kc(),G=0,k=u(C.Pb(),19).a,Kt=0,n=new Hs,_e=new O0;Mt.b=t.a&&(r=Hyn(t,Mt),C=b.Math.max(C,r.b),Rt=b.Math.max(Rt,r.d),le(d,new fa(Mt,r)));for(We=new he,k=0;k0),tt.a.Xb(tt.c=--tt.b),Qe=new Sh(t.b),zm(tt,Qe),Zn(tt.b0?(k=0,tt&&(k+=d),k+=(Qe-1)*h,St&&(k+=d),We&&St&&(k=b.Math.max(k,qwn(St,h,Mt,_e))),k0){for(j=C<100?null:new Dp(C),k=new gyt(e),G=k.g,gt=Nt(Cr,Xr,25,C,15,1),r=0,Rt=new Qw(C),s=0;s=0;)if(H!=null?yi(H,G[v]):Vt(H)===Vt(G[v])){gt.length<=r&&(tt=gt,gt=Nt(Cr,Xr,25,2*gt.length,15,1),Dc(tt,0,gt,0,r)),gt[r++]=s,Dr(Rt,G[v]);break t}if(H=H,Vt(H)===Vt(d))break}}if(k=Rt,G=Rt.g,C=r,r>gt.length&&(tt=gt,gt=Nt(Cr,Xr,25,r,15,1),Dc(tt,0,gt,0,r)),r>0){for(St=!0,o=0;o=0;)l6(t,gt[h]);if(r!=C){for(s=C;--s>=r;)l6(k,s);tt=gt,gt=Nt(Cr,Xr,25,r,15,1),Dc(tt,0,gt,0,r)}e=k}}}else for(e=$1n(t,e),s=t.i;--s>=0;)e.Hc(t.g[s])&&(l6(t,s),St=!0);if(St){if(gt!=null){for(n=e.gc(),M=n==1?F9(t,4,e.Kc().Pb(),null,gt[0],K):F9(t,6,e,gt,gt[0],K),j=n<100?null:new Dp(n),s=e.Kc();s.Ob();)H=s.Pb(),j=vwt(t,u(H,72),j);j?(j.Ei(M),j.Fi()):mi(t.e,M)}else{for(j=JZe(e.gc()),s=e.Kc();s.Ob();)H=s.Pb(),j=vwt(t,u(H,72),j);j&&j.Fi()}return!0}else return!1}function uxn(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St;for(n=new vse(e),n.a||Umn(e),k=Wvn(e),v=new Uw,tt=new fue,K=new S(e.a);K.a0||n.o==H1&&s0?(M=u(Ne(j.c.a,h-1),10),We=W3(t.b,j,M),tt=j.n.b-j.d.d-(M.n.b+M.o.b+M.d.a+We)):tt=j.n.b-j.d.d,k=b.Math.min(tt,k),hh?LE(t,e,n):LE(t,n,e),sh?1:0}return r=u(Q(e,(ae(),Tc)),19).a,o=u(Q(n,Tc),19).a,r>o?LE(t,e,n):LE(t,n,e),ro?1:0}function Dxt(t,e,n,r){var s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt;if(je(Re(qe(e,(ui(),QG)))))return wn(),wn(),io;if(k=(!e.a&&(e.a=new fe(rs,e,10,11)),e.a).i!=0,M=Qpn(e),C=!M.dc(),k||C){if(s=u(qe(e,O7),149),!s)throw it(new R3("Resolved algorithm is not set; apply a LayoutAlgorithmResolver before computing layout."));if(Mt=t2t(s,(CE(),lU)),Jie(e),!k&&C&&!Mt)return wn(),wn(),io;if(v=new he,Vt(qe(e,s5))===Vt((G0(),sp))&&(t2t(s,cU)||t2t(s,oU)))for(H=Fue(t,e),G=new Zi,Ua(G,(!e.a&&(e.a=new fe(rs,e,10,11)),e.a));G.b!=0;)j=u(G.b==0?null:(Zn(G.b!=0),lh(G,G.a.a)),33),Jie(j),gt=Vt(qe(j,s5))===Vt(ZS),gt||o2(j,YS)&&!gmt(s,qe(j,O7))?(d=Dxt(t,j,n,r),Ls(v,d),wo(j,s5,ZS),Zue(j)):Ua(G,(!j.a&&(j.a=new fe(rs,j,10,11)),j.a));else for(H=(!e.a&&(e.a=new fe(rs,e,10,11)),e.a).i,h=new nr((!e.a&&(e.a=new fe(rs,e,10,11)),e.a));h.e!=h.i.gc();)o=u(dr(h),33),d=Dxt(t,o,n,r),Ls(v,d),Zue(o);for(tt=new S(v);tt.a=0?H=a6(d):H=YD(a6(d)),t.Ye(C7,H)),k=new Ca,j=!1,t.Xe(Rv)?(H2t(k,u(t.We(Rv),8)),j=!0):RQe(k,h.a/2,h.b/2),H.g){case 4:Jt(C,uu,(dh(),bb)),Jt(C,tG,(d2(),U4)),C.o.b=h.b,K<0&&(C.o.a=-K),Bs(M,(ve(),Hn)),j||(k.a=h.a),k.a-=h.a;break;case 2:Jt(C,uu,(dh(),jy)),Jt(C,tG,(d2(),w7)),C.o.b=h.b,K<0&&(C.o.a=-K),Bs(M,(ve(),Bn)),j||(k.a=0);break;case 1:Jt(C,B2,(q0(),Y4)),C.o.a=h.a,K<0&&(C.o.b=-K),Bs(M,(ve(),mr)),j||(k.b=h.b),k.b-=h.b;break;case 3:Jt(C,B2,(q0(),F6)),C.o.a=h.a,K<0&&(C.o.b=-K),Bs(M,(ve(),Pn)),j||(k.b=0)}if(H2t(M.n,k),Jt(C,Rv,k),e==Y2||e==g0||e==Gc){if(G=0,e==Y2&&t.Xe(tp))switch(H.g){case 1:case 2:G=u(t.We(tp),19).a;break;case 3:case 4:G=-u(t.We(tp),19).a}else switch(H.g){case 4:case 2:G=o.b,e==g0&&(G/=s.b);break;case 1:case 3:G=o.a,e==g0&&(G/=s.a)}Jt(C,Fv,G)}return Jt(C,oc,H),C}function fxn(t){var e,n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt,ue,_e,We,Qe;if(n=Xt(ye(Q(t.a.j,(Te(),GCt)))),n<-1||!t.a.i||jx(u(Q(t.a.o,cs),98))||Ko(t.a.o,(ve(),Hn)).gc()<2&&Ko(t.a.o,Bn).gc()<2)return!0;if(t.a.c.Rf())return!1;for(Kt=0,Rt=0,St=new he,v=t.a.e,k=0,C=v.length;k=n}function dxn(){dbt();function t(r){var s=this;this.dispatch=function(o){var h=o.data;switch(h.cmd){case"algorithms":var d=x3t((wn(),new T(new v1(Ab.b))));r.postMessage({id:h.id,data:d});break;case"categories":var v=x3t((wn(),new T(new v1(Ab.c))));r.postMessage({id:h.id,data:v});break;case"options":var k=x3t((wn(),new T(new v1(Ab.d))));r.postMessage({id:h.id,data:k});break;case"register":y4n(h.algorithms),r.postMessage({id:h.id});break;case"layout":t3n(h.graph,h.layoutOptions||{},h.options||{}),r.postMessage({id:h.id,data:h.graph});break}},this.saveDispatch=function(o){try{s.dispatch(o)}catch(h){r.postMessage({id:o.data.id,error:h})}}}function e(r){var s=this;this.dispatcher=new t({postMessage:function(o){s.onmessage({data:o})}}),this.postMessage=function(o){setTimeout(function(){s.dispatcher.saveDispatch({data:o})},0)}}if(typeof document===_ot&&typeof self!==_ot){var n=new t(self);self.onmessage=n.saveDispatch}else typeof p!==_ot&&p.exports&&(Object.defineProperty(w,"__esModule",{value:!0}),p.exports={default:e,Worker:e})}function gxn(t){t.N||(t.N=!0,t.b=ic(t,0),ns(t.b,0),ns(t.b,1),ns(t.b,2),t.bb=ic(t,1),ns(t.bb,0),ns(t.bb,1),t.fb=ic(t,2),ns(t.fb,3),ns(t.fb,4),Fi(t.fb,5),t.qb=ic(t,3),ns(t.qb,0),Fi(t.qb,1),Fi(t.qb,2),ns(t.qb,3),ns(t.qb,4),Fi(t.qb,5),ns(t.qb,6),t.a=oi(t,4),t.c=oi(t,5),t.d=oi(t,6),t.e=oi(t,7),t.f=oi(t,8),t.g=oi(t,9),t.i=oi(t,10),t.j=oi(t,11),t.k=oi(t,12),t.n=oi(t,13),t.o=oi(t,14),t.p=oi(t,15),t.q=oi(t,16),t.s=oi(t,17),t.r=oi(t,18),t.t=oi(t,19),t.u=oi(t,20),t.v=oi(t,21),t.w=oi(t,22),t.B=oi(t,23),t.A=oi(t,24),t.C=oi(t,25),t.D=oi(t,26),t.F=oi(t,27),t.G=oi(t,28),t.H=oi(t,29),t.J=oi(t,30),t.I=oi(t,31),t.K=oi(t,32),t.M=oi(t,33),t.L=oi(t,34),t.P=oi(t,35),t.Q=oi(t,36),t.R=oi(t,37),t.S=oi(t,38),t.T=oi(t,39),t.U=oi(t,40),t.V=oi(t,41),t.X=oi(t,42),t.W=oi(t,43),t.Y=oi(t,44),t.Z=oi(t,45),t.$=oi(t,46),t._=oi(t,47),t.ab=oi(t,48),t.cb=oi(t,49),t.db=oi(t,50),t.eb=oi(t,51),t.gb=oi(t,52),t.hb=oi(t,53),t.ib=oi(t,54),t.jb=oi(t,55),t.kb=oi(t,56),t.lb=oi(t,57),t.mb=oi(t,58),t.nb=oi(t,59),t.ob=oi(t,60),t.pb=oi(t,61))}function pxn(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt;if(Mt=0,e.f.a==0)for(tt=new S(t);tt.ak&&(An(k,e.c.length),u(e.c[k],200)).a.c.length==0;)mu(e,(An(k,e.c.length),e.c[k]));if(!v){--o;continue}if(eyn(e,C,s,v,j,n,k,r)){M=!0;continue}if(j){if(c3n(e,C,s,v,n,k,r)){M=!0;continue}else if(Yyt(C,s)){s.c=!0,M=!0;continue}}else if(Yyt(C,s)){s.c=!0,M=!0;continue}if(M)continue}if(Yyt(C,s)){s.c=!0,M=!0,v&&(v.k=!1);continue}else nq(s.q)}return M}function zat(t,e,n,r,s,o,h){var d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt,ue,_e,We,Qe,Rn,zn,hr,pi,js;for(K=0,Rn=0,k=new S(t.b);k.aK&&(o&&(Zb(ue,H),Zb(We,pe(C.b-1)),le(t.d,G),d.c=Nt(Qn,De,1,0,5,1)),pi=n.b,js+=H+e,H=0,M=b.Math.max(M,n.b+n.c+hr)),d.c[d.c.length]=v,hse(v,pi,js),M=b.Math.max(M,pi+hr+n.c),H=b.Math.max(H,j),pi+=hr+e,G=v;if(Ls(t.a,d),le(t.d,u(Ne(d,d.c.length-1),157)),M=b.Math.max(M,r),zn=js+H+n.a,zn1&&(h=b.Math.min(h,b.Math.abs(u(Zf(d.a,1),8).b-C.b)))));else for(K=new S(e.j);K.as&&(o=j.a-s,h=wi,r.c=Nt(Qn,De,1,0,5,1),s=j.a),j.a>=s&&(r.c[r.c.length]=d,d.a.b>1&&(h=b.Math.min(h,b.Math.abs(u(Zf(d.a,d.a.b-2),8).b-j.b)))));if(r.c.length!=0&&o>e.o.a/2&&h>e.o.b/2){for(H=new Mc,Uo(H,e),Bs(H,(ve(),Pn)),H.n.a=e.o.a/2,gt=new Mc,Uo(gt,e),Bs(gt,mr),gt.n.a=e.o.a/2,gt.n.b=e.o.b,v=new S(r);v.a=k.b?Oa(d,gt):Oa(d,H)):(k=u(hen(d.a),8),tt=d.a.b==0?_1(d.c):u(Aj(d.a),8),tt.b>=k.b?oa(d,gt):oa(d,H)),M=u(Q(d,(Te(),So)),74),M&&ay(M,k,!0);e.n.a=s-e.o.a/2}}function yxn(t,e,n){var r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt,ue,_e,We,Qe,Rn,zn,hr,pi,js,Zl,Xh;if(Rn=null,hr=e,zn=ZZt(t,YZt(n),hr),G9(zn,R0(hr,Ad)),pi=u(n4(t.g,f6(B0(hr,Xct))),33),j=B0(hr,"sourcePort"),r=null,j&&(r=f6(j)),js=u(n4(t.j,r),118),!pi)throw d=pE(hr),G="An edge must have a source node (edge id: '"+d,K=G+JE,it(new ud(K));if(js&&!pd(T1(js),pi))throw v=R0(hr,Ad),tt="The source port of an edge must be a port of the edge's source node (edge id: '"+v,gt=tt+JE,it(new ud(gt));if(We=(!zn.b&&(zn.b=new Cn(br,zn,4,7)),zn.b),o=null,js?o=js:o=pi,Dr(We,o),Zl=u(n4(t.g,f6(B0(hr,M8t))),33),H=B0(hr,"targetPort"),s=null,H&&(s=f6(H)),Xh=u(n4(t.j,s),118),!Zl)throw M=pE(hr),Mt="An edge must have a target node (edge id: '"+M,St=Mt+JE,it(new ud(St));if(Xh&&!pd(T1(Xh),Zl))throw k=R0(hr,Ad),Rt="The target port of an edge must be a port of the edge's target node (edge id: '"+k,Kt=Rt+JE,it(new ud(Kt));if(Qe=(!zn.c&&(zn.c=new Cn(br,zn,5,8)),zn.c),h=null,Xh?h=Xh:h=Zl,Dr(Qe,h),(!zn.b&&(zn.b=new Cn(br,zn,4,7)),zn.b).i==0||(!zn.c&&(zn.c=new Cn(br,zn,5,8)),zn.c).i==0)throw C=R0(hr,Ad),ue=Vde+C,_e=ue+JE,it(new ud(_e));return lq(hr,zn),l2n(hr,zn),Rn=Lit(t,hr,zn),Rn}function Khe(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt,ue,_e,We,Qe,Rn;return M=Eyn(bu(t,(ve(),U1)),e),G=d4(bu(t,Mf),e),Rt=d4(bu(t,Kl),e),We=rq(bu(t,Vh),e),j=rq(bu(t,mh),e),Mt=d4(bu(t,Df),e),K=d4(bu(t,el),e),ue=d4(bu(t,Xl),e),Kt=d4(bu(t,yh),e),Qe=rq(bu(t,lu),e),gt=d4(bu(t,Au),e),St=d4(bu(t,nl),e),_e=d4(bu(t,Su),e),Rn=rq(bu(t,Lu),e),H=rq(bu(t,Vu),e),tt=d4(bu(t,Uc),e),n=s4(lt(ct(aa,1),vo,25,15,[Mt.a,We.a,ue.a,Rn.a])),r=s4(lt(ct(aa,1),vo,25,15,[G.a,M.a,Rt.a,tt.a])),s=gt.a,o=s4(lt(ct(aa,1),vo,25,15,[K.a,j.a,Kt.a,H.a])),k=s4(lt(ct(aa,1),vo,25,15,[Mt.b,G.b,K.b,St.b])),v=s4(lt(ct(aa,1),vo,25,15,[We.b,M.b,j.b,tt.b])),C=Qe.b,d=s4(lt(ct(aa,1),vo,25,15,[ue.b,Rt.b,Kt.b,_e.b])),Bg(bu(t,U1),n+s,k+C),Bg(bu(t,Uc),n+s,k+C),Bg(bu(t,Mf),n+s,0),Bg(bu(t,Kl),n+s,k+C+v),Bg(bu(t,Vh),0,k+C),Bg(bu(t,mh),n+s+r,k+C),Bg(bu(t,el),n+s+r,0),Bg(bu(t,Xl),0,k+C+v),Bg(bu(t,yh),n+s+r,k+C+v),Bg(bu(t,lu),0,k),Bg(bu(t,Au),n,0),Bg(bu(t,Su),0,k+C+v),Bg(bu(t,Vu),n+s+r,0),h=new Ca,h.a=s4(lt(ct(aa,1),vo,25,15,[n+r+s+o,Qe.a,St.a,_e.a])),h.b=s4(lt(ct(aa,1),vo,25,15,[k+v+C+d,gt.b,Rn.b,H.b])),h}function xxn(t){var e,n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt;for(K=new he,j=new S(t.d.b);j.as.d.d+s.d.a?C.f.d=!0:(C.f.d=!0,C.f.a=!0))),r.b!=r.d.c&&(e=n);C&&(o=u(tr(t.f,h.d.i),57),e.bo.d.d+o.d.a?C.f.d=!0:(C.f.d=!0,C.f.a=!0))}for(d=new ar(lr(jo(H).a.Kc(),new z));zr(d);)h=u(Mr(d),17),h.a.b!=0&&(e=u(Aj(h.a),8),h.d.j==(ve(),Pn)&&(tt=new T_(e,new $e(e.a,s.d.d),s,h),tt.f.a=!0,tt.a=h.d,K.c[K.c.length]=tt),h.d.j==mr&&(tt=new T_(e,new $e(e.a,s.d.d+s.d.a),s,h),tt.f.d=!0,tt.a=h.d,K.c[K.c.length]=tt))}return K}function kxn(t,e,n){var r,s,o,h,d,v,k,C,M;if(vr(n,"Network simplex node placement",1),t.e=e,t.n=u(Q(e,(ae(),Q4)),304),j3n(t),m0n(t),ls(Wo(new Tn(null,new _n(t.e.b,16)),new EQ),new q$t(t)),ls(Ri(Wo(Ri(Wo(new Tn(null,new _n(t.e.b,16)),new WT),new OQ),new PQ),new FQ),new z$t(t)),je(Re(Q(t.e,(Te(),SS))))&&(h=Rc(n,1),vr(h,"Straight Edges Pre-Processing",1),i5n(t),or(h)),t1n(t.f),o=u(Q(e,MS),19).a*t.f.a.c.length,mat(abt(obt(Mnt(t.f),o),!1),Rc(n,1)),t.d.a.gc()!=0){for(h=Rc(n,1),vr(h,"Flexible Where Space Processing",1),d=u(Nw(t$(wu(new Tn(null,new _n(t.f.a,16)),new TQ),new wQ)),19).a,v=u(Nw(Jj(wu(new Tn(null,new _n(t.f.a,16)),new CQ),new vQ)),19).a,k=v-d,C=Fw(new Xb,t.f),M=Fw(new Xb,t.f),yf(lf(uf(cf(hf(new Ch,2e4),k),C),M)),ls(Ri(Ri(Qnt(t.i),new _Q),new SQ),new jXt(d,C,k,M)),s=t.d.a.ec().Kc();s.Ob();)r=u(s.Pb(),213),r.g=1;mat(abt(obt(Mnt(t.f),o),!1),Rc(h,1)),or(h)}je(Re(Q(e,SS)))&&(h=Rc(n,1),vr(h,"Straight Edges Post-Processing",1),upn(t),or(h)),q4n(t),t.e=null,t.f=null,t.i=null,t.c=null,Xu(t.k),t.j=null,t.a=null,t.o=null,t.d.a.$b(),or(n)}function Exn(t,e,n){var r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt;for(d=new S(t.a.b);d.a0)if(r=M.gc(),k=ps(b.Math.floor((r+1)/2))-1,s=ps(b.Math.ceil((r+1)/2))-1,e.o==H1)for(C=s;C>=k;C--)e.a[Rt.p]==Rt&&(K=u(M.Xb(C),46),G=u(K.a,10),!I0(n,K.b)&&H>t.b.e[G.p]&&(e.a[G.p]=Rt,e.g[Rt.p]=e.g[G.p],e.a[Rt.p]=e.g[Rt.p],e.f[e.g[Rt.p].p]=(Nn(),!!(je(e.f[e.g[Rt.p].p])&Rt.k==(Vn(),ta))),H=t.b.e[G.p]));else for(C=k;C<=s;C++)e.a[Rt.p]==Rt&&(gt=u(M.Xb(C),46),tt=u(gt.a,10),!I0(n,gt.b)&&H=G&&(Mt>G&&(H.c=Nt(Qn,De,1,0,5,1),G=Mt),H.c[H.c.length]=h);H.c.length!=0&&(j=u(Ne(H,Zz(e,H.c.length)),128),zn.a.Bc(j)!=null,j.s=K++,A5t(j,Qe,ue),H.c=Nt(Qn,De,1,0,5,1))}for(Rt=t.c.length+1,d=new S(t);d.aRn.s&&(Cl(n),mu(Rn.i,r),r.c>0&&(r.a=Rn,le(Rn.t,r),r.b=_e,le(_e.i,r)))}function Ixt(t){var e,n,r,s,o;switch(e=t.c,e){case 11:return t.Ml();case 12:return t.Ol();case 14:return t.Ql();case 15:return t.Tl();case 16:return t.Rl();case 17:return t.Ul();case 21:return fi(t),gi(),gi(),pA;case 10:switch(t.a){case 65:return t.yl();case 90:return t.Dl();case 122:return t.Kl();case 98:return t.El();case 66:return t.zl();case 60:return t.Jl();case 62:return t.Hl()}}switch(o=vxn(t),e=t.c,e){case 3:return t.Zl(o);case 4:return t.Xl(o);case 5:return t.Yl(o);case 0:if(t.a==123&&t.d=48&&e<=57){for(r=e-48;s=48&&e<=57;)if(r=r*10+e-48,r<0)throw it(new Nr(qr((Pr(),N8t))))}else throw it(new Nr(qr((Pr(),v0e))));if(n=r,e==44){if(s>=t.j)throw it(new Nr(qr((Pr(),y0e))));if((e=wa(t.i,s++))>=48&&e<=57){for(n=e-48;s=48&&e<=57;)if(n=n*10+e-48,n<0)throw it(new Nr(qr((Pr(),N8t))));if(r>n)throw it(new Nr(qr((Pr(),x0e))))}else n=-1}if(e!=125)throw it(new Nr(qr((Pr(),m0e))));t.sl(s)?(o=(gi(),gi(),new Xm(9,o)),t.d=s+1):(o=(gi(),gi(),new Xm(3,o)),t.d=s),o.dm(r),o.cm(n),fi(t)}}return o}function Xhe(t,e,n,r,s){var o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt,ue,_e,We,Qe,Rn,zn;for(K=new Xc(e.b),Rt=new Xc(e.b),j=new Xc(e.b),We=new Xc(e.b),tt=new Xc(e.b),_e=ei(e,0);_e.b!=_e.d.c;)for(Kt=u(ti(_e),11),d=new S(Kt.g);d.a0,gt=Kt.g.c.length>0,k&>?j.c[j.c.length]=Kt:k?K.c[K.c.length]=Kt:gt&&(Rt.c[Rt.c.length]=Kt);for(G=new S(K);G.a1)for(G=new Nx((!t.a&&(t.a=new fe(Ji,t,6,6)),t.a));G.e!=G.i.gc();)f_(G);for(h=u(At((!t.a&&(t.a=new fe(Ji,t,6,6)),t.a),0),202),tt=pi,pi>Kt+Rt?tt=Kt+Rt:piue+K?gt=ue+K:jsKt-Rt&&ttue-K&>pi+hr?We=pi+hr:Ktjs+_e?Qe=js+_e:uepi-hr&&Wejs-_e&&Qen&&(j=n-1),H=xP+ul(e,24)*$I*M-M/2,H<0?H=1:H>r&&(H=r-1),s=(Sw(),v=new xp,v),iz(s,j),sz(s,H),Dr((!h.a&&(h.a=new As(Gh,h,5)),h.a),s)}function Te(){Te=Z,lht=(ui(),p4e),y9t=b4e,OO=hAt,Tf=w4e,V6=fAt,jv=v4e,Wy=dAt,S7=gAt,A7=pAt,hht=JG,$v=W2,fht=m4e,LS=vAt,bG=K6,IO=(Fxt(),fve),J4=dve,q2=gve,t5=pve,Zve=new eo(ZG,pe(0)),_7=uve,m9t=lve,H6=hve,A9t=Bve,x9t=vve,k9t=xve,ght=Ave,E9t=Tve,T9t=_ve,wG=zve,pht=Rve,_9t=Ove,C9t=Dve,S9t=Fve,Bv=rve,AS=ive,sht=xwe,QCt=Ewe,g9t=new Ow(12),d9t=new eo(U2,g9t),YCt=(W0(),N7),eg=new eo(zSt,YCt),Vy=new eo(dl,0),Jve=new eo(Eft,pe(1)),rG=new eo(W6,GE),z2=QG,cs=KS,C7=u5,Gve=QO,Id=a4e,qy=s5,tme=new eo(Tft,(Nn(),!0)),Hy=ZO,j2=bft,$2=G2,pG=xb,uht=XG,WCt=(ao(),h0),Wl=new eo(qv,WCt),Nv=o5,dG=XSt,Gy=Qy,Qve=kft,w9t=uAt,b9t=(l4(),iP),new eo(iAt,b9t),Yve=vft,Kve=mft,Xve=yft,Wve=wft,dht=wve,c9t=Gwe,oht=Vwe,MS=bve,uu=Bwe,zy=dwe,_S=fwe,$y=J2e,VCt=twe,eht=iwe,DO=ewe,nht=lwe,u9t=Uwe,l9t=Wwe,r9t=Dwe,gG=ove,cht=Xwe,aht=_we,f9t=eve,XCt=mwe,iht=ywe,tht=YG,h9t=Ywe,sG=U2e,zCt=G2e,iG=V2e,t9t=Lwe,JCt=Awe,e9t=Mwe,E7=c5,So=a5,Jg=HSt,Od=pft,rht=gft,GCt=awe,tp=xft,CS=u4e,lG=l4e,Rv=aAt,p9t=h4e,T7=f4e,s9t=jwe,a9t=zwe,Uy=Y6,Zlt=H2e,o9t=Hwe,uG=bwe,cG=pwe,fG=JO,i9t=Pwe,SS=Zwe,PO=bAt,UCt=gwe,v9t=cve,KCt=wwe,Uve=Nwe,Vve=cwe,n9t=WSt,hG=Rwe,oG=uwe,wb=Z2e,HCt=X2e,aG=Y2e,qCt=K2e,Jlt=Q2e,q6=W2e,ZCt=Swe}function Hat(t,e){Lat();var n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt,ue,_e,We,Qe,Rn,zn,hr,pi;if(We=t.e,G=t.d,s=t.a,We==0)switch(e){case 0:return"0";case 1:return $E;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return ue=new Mp,e<0?ue.a+="0E+":ue.a+="0E",ue.a+=-e,ue.a}if(St=G*10+1+7,Rt=Nt(xh,yd,25,St+1,15,1),n=St,G==1)if(d=s[0],d<0){pi=Ns(d,co);do K=pi,pi=aI(pi,10),Rt[--n]=48+Ar(Jp(K,_a(pi,10)))&ys;while(yc(pi,0)!=0)}else{pi=d;do K=pi,pi=pi/10|0,Rt[--n]=48+(K-pi*10)&ys;while(pi!=0)}else{Rn=Nt(Cr,Xr,25,G,15,1),hr=G,Dc(s,0,Rn,0,hr);t:for(;;){for(_e=0,k=hr-1;k>=0;k--)zn=Pa(F0(_e,32),Ns(Rn[k],co)),gt=P0n(zn),Rn[k]=Ar(gt),_e=Ar($p(gt,32));Mt=Ar(_e),tt=n;do Rt[--n]=48+Mt%10&ys;while((Mt=Mt/10|0)!=0&&n!=0);for(r=9-tt+n,v=0;v0;v++)Rt[--n]=48;for(M=hr-1;Rn[M]==0;M--)if(M==0)break t;hr=M+1}for(;Rt[n]==48;)++n}if(H=We<0,h=St-n-e-1,e==0)return H&&(Rt[--n]=45),Mh(Rt,n,St-n);if(e>0&&h>=-6){if(h>=0){for(C=n+h,j=St-1;j>=C;j--)Rt[j+1]=Rt[j];return Rt[++C]=46,H&&(Rt[--n]=45),Mh(Rt,n,St-n+1)}for(M=2;M<-h+1;M++)Rt[--n]=48;return Rt[--n]=46,Rt[--n]=48,H&&(Rt[--n]=45),Mh(Rt,n,St-n)}return Qe=n+1,o=St,Kt=new Im,H&&(Kt.a+="-"),o-Qe>=1?(qp(Kt,Rt[n]),Kt.a+=".",Kt.a+=Mh(Rt,n+1,St-n-1)):Kt.a+=Mh(Rt,n,St-n),Kt.a+="E",h>0&&(Kt.a+="+"),Kt.a+=""+h,Kt.a}function Jhe(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt,ue;switch(t.c=e,t.g=new _r,n=(Pm(),new Mm(t.c)),r=new er(n),p3t(r),St=Br(qe(t.c,(cI(),lSt))),v=u(qe(t.c,sft),316),Kt=u(qe(t.c,aft),429),h=u(qe(t.c,oSt),482),Rt=u(qe(t.c,ift),430),t.j=Xt(ye(qe(t.c,M3e))),d=t.a,v.g){case 0:d=t.a;break;case 1:d=t.b;break;case 2:d=t.i;break;case 3:d=t.e;break;case 4:d=t.f;break;default:throw it(new Fn(_H+(v.f!=null?v.f:""+v.g)))}if(t.d=new EQt(d,Kt,h),Jt(t.d,(Z8(),fS),Re(qe(t.c,A3e))),t.d.c=je(Re(qe(t.c,cSt))),p$(t.c).i==0)return t.d;for(M=new nr(p$(t.c));M.e!=M.i.gc();){for(C=u(dr(M),33),H=C.g/2,j=C.f/2,ue=new $e(C.i+H,C.j+j);Tl(t.g,ue);)jm(ue,(b.Math.random()-.5)*Ed,(b.Math.random()-.5)*Ed);K=u(qe(C,(ui(),JO)),142),tt=new $Qt(ue,new ah(ue.a-H-t.j/2-K.b,ue.b-j-t.j/2-K.d,C.g+t.j+(K.b+K.c),C.f+t.j+(K.d+K.a))),le(t.d.i,tt),ki(t.g,ue,new fa(tt,C))}switch(Rt.g){case 0:if(St==null)t.d.d=u(Ne(t.d.i,0),65);else for(Mt=new S(t.d.i);Mt.a1&&fs(C,gt,C.c.b,C.c),tz(s)));gt=Mt}return C}function Mxn(t,e,n){var r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt,ue,_e,We,Qe,Rn,zn,hr,pi,js,Zl,Xh,K1;for(vr(n,"Greedy cycle removal",1),St=e.a,K1=St.c.length,t.a=Nt(Cr,Xr,25,K1,15,1),t.c=Nt(Cr,Xr,25,K1,15,1),t.b=Nt(Cr,Xr,25,K1,15,1),k=0,gt=new S(St);gt.a0?hr+1:1);for(h=new S(ue.g);h.a0?hr+1:1)}t.c[k]==0?ri(t.e,K):t.a[k]==0&&ri(t.f,K),++k}for(G=-1,H=1,M=new he,t.d=u(Q(e,(ae(),$6)),230);K1>0;){for(;t.e.b!=0;)js=u(Ont(t.e),10),t.b[js.p]=G--,ext(t,js),--K1;for(;t.f.b!=0;)Zl=u(Ont(t.f),10),t.b[Zl.p]=H++,ext(t,Zl),--K1;if(K1>0){for(j=Sa,Mt=new S(St);Mt.a=j&&(Rt>j&&(M.c=Nt(Qn,De,1,0,5,1),j=Rt),M.c[M.c.length]=K));C=t.Zf(M),t.b[C.p]=H++,ext(t,C),--K1}}for(pi=St.c.length+1,k=0;kt.b[Xh]&&(bv(r,!0),Jt(e,_O,(Nn(),!0)));t.a=null,t.c=null,t.b=null,Ah(t.f),Ah(t.e),or(n)}function efe(t,e){var n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt;for(r=new he,d=new he,tt=e/2,H=t.gc(),s=u(t.Xb(0),8),gt=u(t.Xb(1),8),G=rat(s.a,s.b,gt.a,gt.b,tt),le(r,(An(0,G.c.length),u(G.c[0],8))),le(d,(An(1,G.c.length),u(G.c[1],8))),k=2;k=0;v--)ri(n,(An(v,h.c.length),u(h.c[v],8)));return n}function Dxn(t){var e,n,r,s,o,h,d,v,k,C,M,j,H;if(h=!0,M=null,r=null,s=null,e=!1,H=o5e,k=null,o=null,d=0,v=ust(t,d,nLt,rLt),v=0&&hn(t.substr(d,2),"//")?(d+=2,v=ust(t,d,oA,cA),r=t.substr(d,v-d),d=v):M!=null&&(d==t.length||(Rr(d,t.length),t.charCodeAt(d)!=47))&&(h=!1,v=O2t(t,Cu(35),d),v==-1&&(v=t.length),r=t.substr(d,v-d),d=v);if(!n&&d0&&wa(C,C.length-1)==58&&(s=C,d=v)),d=t.j){t.a=-1,t.c=1;return}if(e=wa(t.i,t.d++),t.a=e,t.b==1){switch(e){case 92:if(r=10,t.d>=t.j)throw it(new Nr(qr((Pr(),OH))));t.a=wa(t.i,t.d++);break;case 45:(t.e&512)==512&&t.d=t.j||wa(t.i,t.d)!=63)break;if(++t.d>=t.j)throw it(new Nr(qr((Pr(),out))));switch(e=wa(t.i,t.d++),e){case 58:r=13;break;case 61:r=14;break;case 33:r=15;break;case 91:r=19;break;case 62:r=18;break;case 60:if(t.d>=t.j)throw it(new Nr(qr((Pr(),out))));if(e=wa(t.i,t.d++),e==61)r=16;else if(e==33)r=17;else throw it(new Nr(qr((Pr(),t0e))));break;case 35:for(;t.d=t.j)throw it(new Nr(qr((Pr(),OH))));t.a=wa(t.i,t.d++);break;default:r=0}t.c=r}function Oxn(t){var e,n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt,ue,_e,We,Qe,Rn,zn,hr;if(_e=u(Q(t,(Te(),cs)),98),_e!=(ua(),G1)&&_e!=Tb){for(G=t.b,H=G.c.length,C=new Xc((jl(H+2,Yat),J$(Pa(Pa(5,H+2),(H+2)/10|0)))),K=new Xc((jl(H+2,Yat),J$(Pa(Pa(5,H+2),(H+2)/10|0)))),le(C,new _r),le(C,new _r),le(K,new he),le(K,new he),ue=new he,e=0;e=Kt||!tfn(gt,r))&&(r=XQt(e,C)),Eo(gt,r),o=new ar(lr(jo(gt).a.Kc(),new z));zr(o);)s=u(Mr(o),17),!t.a[s.p]&&(K=s.c.i,--t.e[K.p],t.e[K.p]==0&&R8(xE(H,K)));for(k=C.c.length-1;k>=0;--k)le(e.b,(An(k,C.c.length),u(C.c[k],29)));e.a.c=Nt(Qn,De,1,0,5,1),or(n)}function nfe(t){var e,n,r,s,o,h,d,v,k;for(t.b=1,fi(t),e=null,t.c==0&&t.a==94?(fi(t),e=(gi(),gi(),new Nl(4)),jc(e,0,e7),d=new Nl(4)):d=(gi(),gi(),new Nl(4)),s=!0;(k=t.c)!=1;){if(k==0&&t.a==93&&!s){e&&(L_(e,d),d=e);break}if(n=t.a,r=!1,k==10)switch(n){case 100:case 68:case 119:case 87:case 115:case 83:yy(d,ME(n)),r=!0;break;case 105:case 73:case 99:case 67:n=(yy(d,ME(n)),-1),n<0&&(r=!0);break;case 112:case 80:if(v=u5t(t,n),!v)throw it(new Nr(qr((Pr(),cut))));yy(d,v),r=!0;break;default:n=H5t(t)}else if(k==24&&!s){if(e&&(L_(e,d),d=e),o=nfe(t),L_(d,o),t.c!=0||t.a!=93)throw it(new Nr(qr((Pr(),l0e))));break}if(fi(t),!r){if(k==0){if(n==91)throw it(new Nr(qr((Pr(),P8t))));if(n==93)throw it(new Nr(qr((Pr(),F8t))));if(n==45&&!s&&t.a!=93)throw it(new Nr(qr((Pr(),uut))))}if(t.c!=0||t.a!=45||n==45&&s)jc(d,n,n);else{if(fi(t),(k=t.c)==1)throw it(new Nr(qr((Pr(),PH))));if(k==0&&t.a==93)jc(d,n,n),jc(d,45,45);else{if(k==0&&t.a==93||k==24)throw it(new Nr(qr((Pr(),uut))));if(h=t.a,k==0){if(h==91)throw it(new Nr(qr((Pr(),P8t))));if(h==93)throw it(new Nr(qr((Pr(),F8t))));if(h==45)throw it(new Nr(qr((Pr(),uut))))}else k==10&&(h=H5t(t));if(fi(t),n>h)throw it(new Nr(qr((Pr(),d0e))));jc(d,n,h)}}}s=!1}if(t.c==1)throw it(new Nr(qr((Pr(),PH))));return v4(d),S_(d),t.b=0,fi(t),d}function Fxn(t){Ir(t.c,Yr,lt(ct(Ae,1),ee,2,6,[Aa,"http://www.w3.org/2001/XMLSchema#decimal"])),Ir(t.d,Yr,lt(ct(Ae,1),ee,2,6,[Aa,"http://www.w3.org/2001/XMLSchema#integer"])),Ir(t.e,Yr,lt(ct(Ae,1),ee,2,6,[Aa,"http://www.w3.org/2001/XMLSchema#boolean"])),Ir(t.f,Yr,lt(ct(Ae,1),ee,2,6,[Aa,"EBoolean",ci,"EBoolean:Object"])),Ir(t.i,Yr,lt(ct(Ae,1),ee,2,6,[Aa,"http://www.w3.org/2001/XMLSchema#byte"])),Ir(t.g,Yr,lt(ct(Ae,1),ee,2,6,[Aa,"http://www.w3.org/2001/XMLSchema#hexBinary"])),Ir(t.j,Yr,lt(ct(Ae,1),ee,2,6,[Aa,"EByte",ci,"EByte:Object"])),Ir(t.n,Yr,lt(ct(Ae,1),ee,2,6,[Aa,"EChar",ci,"EChar:Object"])),Ir(t.t,Yr,lt(ct(Ae,1),ee,2,6,[Aa,"http://www.w3.org/2001/XMLSchema#double"])),Ir(t.u,Yr,lt(ct(Ae,1),ee,2,6,[Aa,"EDouble",ci,"EDouble:Object"])),Ir(t.F,Yr,lt(ct(Ae,1),ee,2,6,[Aa,"http://www.w3.org/2001/XMLSchema#float"])),Ir(t.G,Yr,lt(ct(Ae,1),ee,2,6,[Aa,"EFloat",ci,"EFloat:Object"])),Ir(t.I,Yr,lt(ct(Ae,1),ee,2,6,[Aa,"http://www.w3.org/2001/XMLSchema#int"])),Ir(t.J,Yr,lt(ct(Ae,1),ee,2,6,[Aa,"EInt",ci,"EInt:Object"])),Ir(t.N,Yr,lt(ct(Ae,1),ee,2,6,[Aa,"http://www.w3.org/2001/XMLSchema#long"])),Ir(t.O,Yr,lt(ct(Ae,1),ee,2,6,[Aa,"ELong",ci,"ELong:Object"])),Ir(t.Z,Yr,lt(ct(Ae,1),ee,2,6,[Aa,"http://www.w3.org/2001/XMLSchema#short"])),Ir(t.$,Yr,lt(ct(Ae,1),ee,2,6,[Aa,"EShort",ci,"EShort:Object"])),Ir(t._,Yr,lt(ct(Ae,1),ee,2,6,[Aa,"http://www.w3.org/2001/XMLSchema#string"]))}function Nxn(t){var e,n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt,ue,_e,We,Qe,Rn,zn,hr;if(t.c.length==1)return An(0,t.c.length),u(t.c[0],135);if(t.c.length<=0)return new j$;for(v=new S(t);v.aM&&(zn=0,hr+=C+_e,C=0),U2n(Kt,h,zn,hr),e=b.Math.max(e,zn+ue.a),C=b.Math.max(C,ue.b),zn+=ue.a+_e;for(Rt=new _r,n=new _r,Qe=new S(t);Qe.aiat(o))&&(M=o);for(!M&&(M=(An(0,tt.c.length),u(tt.c[0],180))),K=new S(e.b);K.a=-1900?1:0,n>=4?Gr(t,lt(ct(Ae,1),ee,2,6,[mfe,yfe])[d]):Gr(t,lt(ct(Ae,1),ee,2,6,["BC","AD"])[d]);break;case 121:Mfn(t,n,r);break;case 77:Pmn(t,n,r);break;case 107:v=s.q.getHours(),v==0?Jd(t,24,n):Jd(t,v,n);break;case 83:ewn(t,n,s);break;case 69:C=r.q.getDay(),n==5?Gr(t,lt(ct(Ae,1),ee,2,6,["S","M","T","W","T","F","S"])[C]):n==4?Gr(t,lt(ct(Ae,1),ee,2,6,[cot,uot,lot,hot,fot,dot,got])[C]):Gr(t,lt(ct(Ae,1),ee,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[C]);break;case 97:s.q.getHours()>=12&&s.q.getHours()<24?Gr(t,lt(ct(Ae,1),ee,2,6,["AM","PM"])[1]):Gr(t,lt(ct(Ae,1),ee,2,6,["AM","PM"])[0]);break;case 104:M=s.q.getHours()%12,M==0?Jd(t,12,n):Jd(t,M,n);break;case 75:j=s.q.getHours()%12,Jd(t,j,n);break;case 72:H=s.q.getHours(),Jd(t,H,n);break;case 99:G=r.q.getDay(),n==5?Gr(t,lt(ct(Ae,1),ee,2,6,["S","M","T","W","T","F","S"])[G]):n==4?Gr(t,lt(ct(Ae,1),ee,2,6,[cot,uot,lot,hot,fot,dot,got])[G]):n==3?Gr(t,lt(ct(Ae,1),ee,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[G]):Jd(t,G,1);break;case 76:K=r.q.getMonth(),n==5?Gr(t,lt(ct(Ae,1),ee,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[K]):n==4?Gr(t,lt(ct(Ae,1),ee,2,6,[Qat,Zat,Jat,tot,w6,eot,not,rot,iot,sot,aot,oot])[K]):n==3?Gr(t,lt(ct(Ae,1),ee,2,6,["Jan","Feb","Mar","Apr",w6,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[K]):Jd(t,K+1,n);break;case 81:tt=r.q.getMonth()/3|0,n<4?Gr(t,lt(ct(Ae,1),ee,2,6,["Q1","Q2","Q3","Q4"])[tt]):Gr(t,lt(ct(Ae,1),ee,2,6,["1st quarter","2nd quarter","3rd quarter","4th quarter"])[tt]);break;case 100:gt=r.q.getDate(),Jd(t,gt,n);break;case 109:k=s.q.getMinutes(),Jd(t,k,n);break;case 115:h=s.q.getSeconds(),Jd(t,h,n);break;case 122:n<4?Gr(t,o.c[0]):Gr(t,o.c[1]);break;case 118:Gr(t,o.b);break;case 90:n<3?Gr(t,Vpn(o)):n==3?Gr(t,Wpn(o)):Gr(t,Ypn(o.a));break;default:return!1}return!0}function Pxt(t,e,n,r){var s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt,ue,_e,We,Qe,Rn,zn,hr,pi;if(Hue(e),v=u(At((!e.b&&(e.b=new Cn(br,e,4,7)),e.b),0),82),C=u(At((!e.c&&(e.c=new Cn(br,e,5,8)),e.c),0),82),d=Do(v),k=Do(C),h=(!e.a&&(e.a=new fe(Ji,e,6,6)),e.a).i==0?null:u(At((!e.a&&(e.a=new fe(Ji,e,6,6)),e.a),0),202),_e=u(tr(t.a,d),10),zn=u(tr(t.a,k),10),We=null,hr=null,_t(v,186)&&(ue=u(tr(t.a,v),299),_t(ue,11)?We=u(ue,11):_t(ue,10)&&(_e=u(ue,10),We=u(Ne(_e.j,0),11))),_t(C,186)&&(Rn=u(tr(t.a,C),299),_t(Rn,11)?hr=u(Rn,11):_t(Rn,10)&&(zn=u(Rn,10),hr=u(Ne(zn.j,0),11))),!_e||!zn)throw it(new jC("The source or the target of edge "+e+" could not be found. This usually happens when an edge connects a node laid out by ELK Layered to a node in another level of hierarchy laid out by either another instance of ELK Layered or another layout algorithm alltogether. The former can be solved by setting the hierarchyHandling option to INCLUDE_CHILDREN."));for(K=new Vw,Mo(K,e),Jt(K,(ae(),_i),e),Jt(K,(Te(),So),null),H=u(Q(r,Vc),21),_e==zn&&H.Fc((oo(),xS)),We||(Kt=(so(),nu),Qe=null,h&&G3(u(Q(_e,cs),98))&&(Qe=new $e(h.j,h.k),JZt(Qe,cD(e)),LJt(Qe,n),ey(k,d)&&(Kt=tl,Li(Qe,_e.n))),We=zle(_e,Qe,Kt,r)),hr||(Kt=(so(),tl),pi=null,h&&G3(u(Q(zn,cs),98))&&(pi=new $e(h.b,h.c),JZt(pi,cD(e)),LJt(pi,n)),hr=zle(zn,pi,Kt,Na(zn))),Oa(K,We),oa(K,hr),(We.e.c.length>1||We.g.c.length>1||hr.e.c.length>1||hr.g.c.length>1)&&H.Fc((oo(),yS)),j=new nr((!e.n&&(e.n=new fe(qo,e,1,7)),e.n));j.e!=j.i.gc();)if(M=u(dr(j),137),!je(Re(qe(M,z2)))&&M.a)switch(tt=Vit(M),le(K.b,tt),u(Q(tt,Od),272).g){case 1:case 2:H.Fc((oo(),m7));break;case 0:H.Fc((oo(),v7)),Jt(tt,Od,(M1(),P7))}if(o=u(Q(r,_S),314),gt=u(Q(r,gG),315),s=o==(n6(),EO)||gt==(u_(),xht),h&&(!h.a&&(h.a=new As(Gh,h,5)),h.a).i!=0&&s){for(Mt=lI(h),G=new Pu,Rt=ei(Mt,0);Rt.b!=Rt.d.c;)St=u(ti(Rt),8),ri(G,new xo(St));Jt(K,aCt,G)}return K}function $xn(t){t.gb||(t.gb=!0,t.b=ic(t,0),ns(t.b,18),Fi(t.b,19),t.a=ic(t,1),ns(t.a,1),Fi(t.a,2),Fi(t.a,3),Fi(t.a,4),Fi(t.a,5),t.o=ic(t,2),ns(t.o,8),ns(t.o,9),Fi(t.o,10),Fi(t.o,11),Fi(t.o,12),Fi(t.o,13),Fi(t.o,14),Fi(t.o,15),Fi(t.o,16),Fi(t.o,17),Fi(t.o,18),Fi(t.o,19),Fi(t.o,20),Fi(t.o,21),Fi(t.o,22),Fi(t.o,23),Co(t.o),Co(t.o),Co(t.o),Co(t.o),Co(t.o),Co(t.o),Co(t.o),Co(t.o),Co(t.o),Co(t.o),t.p=ic(t,3),ns(t.p,2),ns(t.p,3),ns(t.p,4),ns(t.p,5),Fi(t.p,6),Fi(t.p,7),Co(t.p),Co(t.p),t.q=ic(t,4),ns(t.q,8),t.v=ic(t,5),Fi(t.v,9),Co(t.v),Co(t.v),Co(t.v),t.w=ic(t,6),ns(t.w,2),ns(t.w,3),ns(t.w,4),Fi(t.w,5),t.B=ic(t,7),Fi(t.B,1),Co(t.B),Co(t.B),Co(t.B),t.Q=ic(t,8),Fi(t.Q,0),Co(t.Q),t.R=ic(t,9),ns(t.R,1),t.S=ic(t,10),Co(t.S),Co(t.S),Co(t.S),Co(t.S),Co(t.S),Co(t.S),Co(t.S),Co(t.S),Co(t.S),Co(t.S),Co(t.S),Co(t.S),Co(t.S),Co(t.S),Co(t.S),t.T=ic(t,11),Fi(t.T,10),Fi(t.T,11),Fi(t.T,12),Fi(t.T,13),Fi(t.T,14),Co(t.T),Co(t.T),t.U=ic(t,12),ns(t.U,2),ns(t.U,3),Fi(t.U,4),Fi(t.U,5),Fi(t.U,6),Fi(t.U,7),Co(t.U),t.V=ic(t,13),Fi(t.V,10),t.W=ic(t,14),ns(t.W,18),ns(t.W,19),ns(t.W,20),Fi(t.W,21),Fi(t.W,22),Fi(t.W,23),t.bb=ic(t,15),ns(t.bb,10),ns(t.bb,11),ns(t.bb,12),ns(t.bb,13),ns(t.bb,14),ns(t.bb,15),ns(t.bb,16),Fi(t.bb,17),Co(t.bb),Co(t.bb),t.eb=ic(t,16),ns(t.eb,2),ns(t.eb,3),ns(t.eb,4),ns(t.eb,5),ns(t.eb,6),ns(t.eb,7),Fi(t.eb,8),Fi(t.eb,9),t.ab=ic(t,17),ns(t.ab,0),ns(t.ab,1),t.H=ic(t,18),Fi(t.H,0),Fi(t.H,1),Fi(t.H,2),Fi(t.H,3),Fi(t.H,4),Fi(t.H,5),Co(t.H),t.db=ic(t,19),Fi(t.db,2),t.c=oi(t,20),t.d=oi(t,21),t.e=oi(t,22),t.f=oi(t,23),t.i=oi(t,24),t.g=oi(t,25),t.j=oi(t,26),t.k=oi(t,27),t.n=oi(t,28),t.r=oi(t,29),t.s=oi(t,30),t.t=oi(t,31),t.u=oi(t,32),t.fb=oi(t,33),t.A=oi(t,34),t.C=oi(t,35),t.D=oi(t,36),t.F=oi(t,37),t.G=oi(t,38),t.I=oi(t,39),t.J=oi(t,40),t.L=oi(t,41),t.M=oi(t,42),t.N=oi(t,43),t.O=oi(t,44),t.P=oi(t,45),t.X=oi(t,46),t.Y=oi(t,47),t.Z=oi(t,48),t.$=oi(t,49),t._=oi(t,50),t.cb=oi(t,51),t.K=oi(t,52))}function ui(){ui=Z;var t,e;YS=new Vi(ude),O7=new Vi(lde),NSt=(t0(),uft),a4e=new mn(xkt,NSt),W6=new mn(E6,null),o4e=new Vi(p8t),RSt=(hy(),ji(fft,lt(ct(dft,1),oe,291,0,[hft]))),YG=new mn(mH,RSt),QO=new mn(JI,(Nn(),!1)),jSt=(ao(),h0),qv=new mn(Tkt,jSt),qSt=(W0(),Cft),zSt=new mn(QI,qSt),GSt=new mn(CH,!1),USt=(G0(),tU),s5=new mn(vH,USt),nAt=new Ow(12),U2=new mn(xv,nAt),KG=new mn(GI,!1),WSt=new mn(_ct,!1),tP=new mn(j_,!1),oAt=(ua(),Tb),KS=new mn(Got,oAt),Y6=new Vi(yH),ZG=new Vi(VI),Eft=new Vi(tH),Tft=new Vi(R_),YSt=new Pu,a5=new mn(Okt,YSt),u4e=new mn(Nkt,!1),l4e=new mn(Bkt,!1),KSt=new OC,JO=new mn(jkt,KSt),QG=new mn(mkt,!1),g4e=new mn(hde,1),new mn(fde,!0),pe(0),new mn(dde,pe(100)),new mn(gde,!1),pe(0),new mn(pde,pe(4e3)),pe(0),new mn(bde,pe(400)),new mn(wde,!1),new mn(vde,!1),new mn(mde,!0),new mn(yde,!1),BSt=(jz(),Lft),c4e=new mn(g8t,BSt),p4e=new mn(okt,10),b4e=new mn(ckt,10),hAt=new mn(jot,20),w4e=new mn(ukt,10),fAt=new mn(Vot,2),v4e=new mn(lkt,10),dAt=new mn(hkt,0),JG=new mn(gkt,5),gAt=new mn(fkt,1),pAt=new mn(dkt,1),W2=new mn(Cy,20),m4e=new mn(pkt,10),vAt=new mn(bkt,10),K6=new Vi(wkt),wAt=new CUt,bAt=new mn($kt,wAt),f4e=new Vi(Cct),rAt=!1,h4e=new mn(Tct,rAt),QSt=new Ow(5),XSt=new mn(Ckt,QSt),ZSt=(py(),e=u(Vf(lo),9),new sh(e,u(ff(e,e.length),9),0)),o5=new mn(UE,ZSt),sAt=(l4(),Eb),iAt=new mn(Akt,sAt),vft=new Vi(Lkt),mft=new Vi(Mkt),yft=new Vi(Dkt),wft=new Vi(Ikt),JSt=(t=u(Vf(rA),9),new sh(t,u(ff(t,t.length),9),0)),G2=new mn(D4,JSt),eAt=un((ll(),R7)),xb=new mn(T6,eAt),tAt=new $e(0,0),c5=new mn(C6,tAt),XG=new mn(Ect,!1),$St=(M1(),P7),pft=new mn(Pkt,$St),gft=new mn(eH,!1),pe(1),new mn(xde,null),aAt=new Vi(Rkt),xft=new Vi(Fkt),lAt=(ve(),Zo),u5=new mn(ykt,lAt),dl=new Vi(vkt),cAt=(Zu(),un(Cb)),Qy=new mn(WE,cAt),kft=new mn(_kt,!1),uAt=new mn(Skt,!0),ZO=new mn(kkt,!1),bft=new mn(Ekt,!1),HSt=new mn($ot,1),VSt=(hq(),Sft),new mn(kde,VSt),d4e=!0}function ae(){ae=Z;var t,e;_i=new Vi(w6t),nCt=new Vi("coordinateOrigin"),Klt=new Vi("processors"),eCt=new Ps("compoundNode",(Nn(),!1)),SO=new Ps("insideConnections",!1),aCt=new Vi("originalBendpoints"),oCt=new Vi("originalDummyNodePosition"),cCt=new Vi("originalLabelEdge"),LO=new Vi("representedLabels"),kS=new Vi("endLabels"),B6=new Vi("endLabel.origin"),j6=new Ps("labelSide",(zl(),rP)),K4=new Ps("maxEdgeThickness",0),q1=new Ps("reversed",!1),$6=new Vi(i1e),r1=new Ps("longEdgeSource",null),$h=new Ps("longEdgeTarget",null),Ry=new Ps("longEdgeHasLabelDummies",!1),AO=new Ps("longEdgeBeforeLabelDummy",!1),tG=new Ps("edgeConstraint",(d2(),Ilt)),Pv=new Vi("inLayerLayoutUnit"),B2=new Ps("inLayerConstraint",(q0(),CO)),R6=new Ps("inLayerSuccessorConstraint",new he),sCt=new Ps("inLayerSuccessorConstraintBetweenNonDummies",!1),Ju=new Vi("portDummy"),JV=new Ps("crossingHint",pe(0)),Vc=new Ps("graphProperties",(e=u(Vf(jlt),9),new sh(e,u(ff(e,e.length),9),0))),oc=new Ps("externalPortSide",(ve(),Zo)),iCt=new Ps("externalPortSize",new Ca),Vlt=new Vi("externalPortReplacedDummies"),eG=new Vi("externalPortReplacedDummy"),By=new Ps("externalPortConnections",(t=u(Vf(Xa),9),new sh(t,u(ff(t,t.length),9),0))),Fv=new Ps(Xfe,0),tCt=new Vi("barycenterAssociates"),z6=new Vi("TopSideComments"),N6=new Vi("BottomSideComments"),ZV=new Vi("CommentConnectionPort"),Ult=new Ps("inputCollect",!1),Ylt=new Ps("outputCollect",!1),_O=new Ps("cyclic",!1),rCt=new Vi("crossHierarchyMap"),Qlt=new Vi("targetOffset"),new Ps("splineLabelSize",new Ca),Q4=new Vi("spacings"),nG=new Ps("partitionConstraint",!1),Iv=new Vi("breakingPoint.info"),hCt=new Vi("splines.survivingEdge"),R2=new Vi("splines.route.start"),Z4=new Vi("splines.edgeChain"),lCt=new Vi("originalPortConstraints"),x7=new Vi("selfLoopHolder"),k7=new Vi("splines.nsPortY"),Tc=new Vi("modelOrder"),Wlt=new Vi("longEdgeTargetNode"),Ov=new Ps(D1e,!1),X4=new Ps(D1e,!1),Glt=new Vi("layerConstraints.hiddenNodes"),uCt=new Vi("layerConstraints.opposidePort"),Xlt=new Vi("targetNode.modelOrder")}function Fxt(){Fxt=Z,kCt=(LD(),GV),gwe=new mn(C6t,kCt),_we=new mn(_6t,(Nn(),!1)),ACt=(I$(),Hlt),Dwe=new mn(sH,ACt),Uwe=new mn(S6t,!1),Wwe=new mn(A6t,!0),H2e=new mn(L6t,!1),NCt=(CD(),Tht),cve=new mn(M6t,NCt),pe(1),bve=new mn(D6t,pe(7)),wve=new mn(I6t,!1),Swe=new mn(O6t,!1),xCt=(x2(),Mlt),dwe=new mn(Qot,xCt),DCt=(uq(),wht),Gwe=new mn(KI,DCt),LCt=(dh(),MO),Bwe=new mn(P6t,LCt),pe(-1),Nwe=new mn(F6t,pe(-1)),pe(-1),Rwe=new mn(N6t,pe(-1)),pe(-1),jwe=new mn(Zot,pe(4)),pe(-1),zwe=new mn(Jot,pe(2)),MCt=(y4(),kG),Vwe=new mn(tct,MCt),pe(0),Hwe=new mn(ect,pe(0)),Pwe=new mn(nct,pe(wi)),yCt=(n6(),P6),fwe=new mn(H_,yCt),J2e=new mn(B6t,!1),awe=new mn(rct,.1),lwe=new mn(ict,!1),pe(-1),cwe=new mn(R6t,pe(-1)),pe(-1),uwe=new mn(j6t,pe(-1)),pe(0),twe=new mn($6t,pe(40)),mCt=(eE(),zlt),iwe=new mn(sct,mCt),vCt=TO,ewe=new mn(aH,vCt),FCt=(u_(),DS),ove=new mn(I4,FCt),Zwe=new Vi(oH),ICt=(xD(),WV),Ywe=new mn(act,ICt),OCt=(oI(),YV),Xwe=new mn(oct,OCt),eve=new mn(cct,.3),rve=new Vi(uct),PCt=(cy(),xG),ive=new mn(lct,PCt),CCt=(yz(),_ht),mwe=new mn(z6t,CCt),_Ct=(pD(),Sht),ywe=new mn(q6t,_Ct),SCt=(cE(),PS),xwe=new mn(cH,SCt),Ewe=new mn(uH,.2),wwe=new mn(hct,2),fve=new mn(H6t,null),gve=new mn(V6t,10),dve=new mn(G6t,10),pve=new mn(U6t,20),pe(0),uve=new mn(W6t,pe(0)),pe(0),lve=new mn(Y6t,pe(0)),pe(0),hve=new mn(K6t,pe(0)),V2e=new mn(fct,!1),gCt=(kE(),mS),U2e=new mn(X6t,gCt),dCt=(H$(),Alt),G2e=new mn(Q6t,dCt),Lwe=new mn(lH,!1),pe(0),Awe=new mn(dct,pe(16)),pe(0),Mwe=new mn(gct,pe(5)),jCt=(Cz(),Mht),Bve=new mn(tg,jCt),vve=new mn(hH,10),xve=new mn(fH,1),RCt=(oz(),VV),Ave=new mn(V_,RCt),Tve=new Vi(pct),BCt=pe(1),pe(0),_ve=new mn(bct,BCt),$Ct=(vz(),Lht),zve=new mn(dH,$Ct),Rve=new Vi(gH),Ove=new mn(pH,!0),Dve=new mn(bH,2),Fve=new mn(wct,!0),TCt=(dq(),UV),bwe=new mn(Z6t,TCt),ECt=(h6(),p7),pwe=new mn(J6t,ECt),wCt=(V0(),vb),Z2e=new mn(wH,wCt),Q2e=new mn(tkt,!1),pCt=(iv(),q4),W2e=new mn(vct,pCt),bCt=(Z9(),vht),X2e=new mn(ekt,bCt),Y2e=new mn(mct,0),K2e=new mn(yct,0),Owe=Dlt,Iwe=EO,$we=mG,qwe=mG,Fwe=bht,owe=(G0(),sp),hwe=P6,swe=P6,nwe=P6,rwe=sp,Jwe=IS,tve=DS,Kwe=DS,Qwe=DS,nve=kht,ave=IS,sve=IS,kwe=(W0(),X6),Twe=X6,Cwe=PS,vwe=eP,mve=L7,yve=Yy,kve=L7,Eve=Yy,Lve=L7,Mve=Yy,Cve=Llt,Sve=VV,qve=L7,Hve=Yy,jve=L7,$ve=Yy,Pve=Yy,Ive=Yy,Nve=Yy}function ro(){ro=Z,J7t=new ms("DIRECTION_PREPROCESSOR",0),X7t=new ms("COMMENT_PREPROCESSOR",1),gS=new ms("EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER",2),glt=new ms("INTERACTIVE_EXTERNAL_PORT_POSITIONER",3),vTt=new ms("PARTITION_PREPROCESSOR",4),CV=new ms("LABEL_DUMMY_INSERTER",5),FV=new ms("SELF_LOOP_PREPROCESSOR",6),h7=new ms("LAYER_CONSTRAINT_PREPROCESSOR",7),bTt=new ms("PARTITION_MIDPROCESSOR",8),oTt=new ms("HIGH_DEGREE_NODE_LAYER_PROCESSOR",9),gTt=new ms("NODE_PROMOTION",10),l7=new ms("LAYER_CONSTRAINT_POSTPROCESSOR",11),wTt=new ms("PARTITION_POSTPROCESSOR",12),iTt=new ms("HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR",13),mTt=new ms("SEMI_INTERACTIVE_CROSSMIN_PROCESSOR",14),V7t=new ms("BREAKING_POINT_INSERTER",15),LV=new ms("LONG_EDGE_SPLITTER",16),plt=new ms("PORT_SIDE_PROCESSOR",17),EV=new ms("INVERTED_PORT_PROCESSOR",18),IV=new ms("PORT_LIST_SORTER",19),xTt=new ms("SORT_BY_INPUT_ORDER_OF_MODEL",20),DV=new ms("NORTH_SOUTH_PORT_PREPROCESSOR",21),G7t=new ms("BREAKING_POINT_PROCESSOR",22),pTt=new ms(E1e,23),kTt=new ms(T1e,24),OV=new ms("SELF_LOOP_PORT_RESTORER",25),yTt=new ms("SINGLE_EDGE_GRAPH_WRAPPER",26),TV=new ms("IN_LAYER_CONSTRAINT_PROCESSOR",27),eTt=new ms("END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR",28),fTt=new ms("LABEL_AND_NODE_SIZE_PROCESSOR",29),hTt=new ms("INNERMOST_NODE_MARGIN_CALCULATOR",30),NV=new ms("SELF_LOOP_ROUTER",31),Y7t=new ms("COMMENT_NODE_MARGIN_CALCULATOR",32),kV=new ms("END_LABEL_PREPROCESSOR",33),SV=new ms("LABEL_DUMMY_SWITCHER",34),W7t=new ms("CENTER_LABEL_MANAGEMENT_PROCESSOR",35),u7=new ms("LABEL_SIDE_SELECTOR",36),uTt=new ms("HYPEREDGE_DUMMY_MERGER",37),sTt=new ms("HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR",38),dTt=new ms("LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR",39),pS=new ms("HIERARCHICAL_PORT_POSITION_PROCESSOR",40),Q7t=new ms("CONSTRAINTS_POSTPROCESSOR",41),K7t=new ms("COMMENT_POSTPROCESSOR",42),lTt=new ms("HYPERNODE_PROCESSOR",43),aTt=new ms("HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER",44),AV=new ms("LONG_EDGE_JOINER",45),PV=new ms("SELF_LOOP_POSTPROCESSOR",46),U7t=new ms("BREAKING_POINT_REMOVER",47),MV=new ms("NORTH_SOUTH_PORT_POSTPROCESSOR",48),cTt=new ms("HORIZONTAL_COMPACTOR",49),_V=new ms("LABEL_DUMMY_REMOVER",50),nTt=new ms("FINAL_SPLINE_BENDPOINTS_CALCULATOR",51),tTt=new ms("END_LABEL_SORTER",52),xO=new ms("REVERSED_EDGE_RESTORER",53),xV=new ms("END_LABEL_POSTPROCESSOR",54),rTt=new ms("HIERARCHICAL_NODE_RESIZER",55),Z7t=new ms("DIRECTION_POSTPROCESSOR",56)}function zxn(t,e,n){var r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt,ue,_e,We,Qe,Rn,zn,hr,pi,js,Zl,Xh,K1,kU,xP,bA,kP,H7,Gft,ixe,Uft,hp,Yv,V7,EP,TP,nk,Wft,wA,sxe,BLt,Kv,vA,Yft,rk,mA,o3,yA,Kft,axe;for(BLt=0,pi=e,Xh=0,xP=pi.length;Xh0&&(t.a[hp.p]=BLt++)}for(mA=0,js=n,K1=0,bA=js.length;K10;){for(hp=(Zn(TP.b>0),u(TP.a.Xb(TP.c=--TP.b),11)),EP=0,d=new S(hp.e);d.a0&&(hp.j==(ve(),Pn)?(t.a[hp.p]=mA,++mA):(t.a[hp.p]=mA+kP+Gft,++Gft))}mA+=Gft}for(V7=new _r,G=new O0,hr=e,Zl=0,kU=hr.length;Zlk.b&&(k.b=nk)):hp.i.c==sxe&&(nkk.c&&(k.c=nk));for($8(K,0,K.length,null),rk=Nt(Cr,Xr,25,K.length,15,1),r=Nt(Cr,Xr,25,mA+1,15,1),gt=0;gt0;)_e%2>0&&(s+=Kft[_e+1]),_e=(_e-1)/2|0,++Kft[_e];for(Qe=Nt(Ime,De,362,K.length*2,0,1),Rt=0;Rt'?":hn(t0e,t)?"'(?<' or '(? toIndex: ",Yxt=", toIndex: ",Kxt="Index: ",Xxt=", Size: ",zE="org.eclipse.elk.alg.common",Oi={62:1},Ife="org.eclipse.elk.alg.common.compaction",Ofe="Scanline/EventHandler",a0="org.eclipse.elk.alg.common.compaction.oned",Pfe="CNode belongs to another CGroup.",Ffe="ISpacingsHandler/1",Sot="The ",Aot=" instance has been finished already.",Nfe="The direction ",Bfe=" is not supported by the CGraph instance.",Rfe="OneDimensionalCompactor",jfe="OneDimensionalCompactor/lambda$0$Type",$fe="Quadruplet",zfe="ScanlineConstraintCalculator",qfe="ScanlineConstraintCalculator/ConstraintsScanlineHandler",Hfe="ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type",Vfe="ScanlineConstraintCalculator/Timestamp",Gfe="ScanlineConstraintCalculator/lambda$0$Type",xd={169:1,45:1},Lot="org.eclipse.elk.alg.common.compaction.options",Qo="org.eclipse.elk.core.data",Qxt="org.eclipse.elk.polyomino.traversalStrategy",Zxt="org.eclipse.elk.polyomino.lowLevelSort",Jxt="org.eclipse.elk.polyomino.highLevelSort",t6t="org.eclipse.elk.polyomino.fill",Oh={130:1},Mot="polyomino",F_="org.eclipse.elk.alg.common.networksimplex",o0={177:1,3:1,4:1},Ufe="org.eclipse.elk.alg.common.nodespacing",_2="org.eclipse.elk.alg.common.nodespacing.cellsystem",qE="CENTER",Wfe={212:1,326:1},e6t={3:1,4:1,5:1,595:1},y6="LEFT",x6="RIGHT",n6t="Vertical alignment cannot be null",r6t="BOTTOM",Yq="org.eclipse.elk.alg.common.nodespacing.internal",N_="UNDEFINED",B1=.01,zI="org.eclipse.elk.alg.common.nodespacing.internal.algorithm",Yfe="LabelPlacer/lambda$0$Type",Kfe="LabelPlacer/lambda$1$Type",Xfe="portRatioOrPosition",HE="org.eclipse.elk.alg.common.overlaps",Dot="DOWN",kd="org.eclipse.elk.alg.common.polyomino",Kq="NORTH",Iot="EAST",Oot="SOUTH",Pot="WEST",Xq="org.eclipse.elk.alg.common.polyomino.structures",i6t="Direction",Fot="Grid is only of size ",Not=". Requested point (",Bot=") is out of bounds.",Qq=" Given center based coordinates were (",qI="org.eclipse.elk.graph.properties",Qfe="IPropertyHolder",s6t={3:1,94:1,134:1},k6="org.eclipse.elk.alg.common.spore",Zfe="org.eclipse.elk.alg.common.utils",S2={209:1},L4="org.eclipse.elk.core",Jfe="Connected Components Compaction",t1e="org.eclipse.elk.alg.disco",Zq="org.eclipse.elk.alg.disco.graph",Rot="org.eclipse.elk.alg.disco.options",a6t="CompactionStrategy",o6t="org.eclipse.elk.disco.componentCompaction.strategy",c6t="org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm",u6t="org.eclipse.elk.disco.debug.discoGraph",l6t="org.eclipse.elk.disco.debug.discoPolys",e1e="componentCompaction",A2="org.eclipse.elk.disco",jot="org.eclipse.elk.spacing.componentComponent",$ot="org.eclipse.elk.edge.thickness",E6="org.eclipse.elk.aspectRatio",xv="org.eclipse.elk.padding",M4="org.eclipse.elk.alg.disco.transform",zot=1.5707963267948966,VE=17976931348623157e292,Ty={3:1,4:1,5:1,192:1},h6t={3:1,6:1,4:1,5:1,106:1,120:1},f6t="org.eclipse.elk.alg.force",d6t="ComponentsProcessor",n1e="ComponentsProcessor/1",HI="org.eclipse.elk.alg.force.graph",r1e="Component Layout",g6t="org.eclipse.elk.alg.force.model",Jq="org.eclipse.elk.force.model",p6t="org.eclipse.elk.force.iterations",b6t="org.eclipse.elk.force.repulsivePower",qot="org.eclipse.elk.force.temperature",Ed=.001,Hot="org.eclipse.elk.force.repulsion",B_="org.eclipse.elk.alg.force.options",GE=1.600000023841858,Vl="org.eclipse.elk.force",VI="org.eclipse.elk.priority",Cy="org.eclipse.elk.spacing.nodeNode",Vot="org.eclipse.elk.spacing.edgeLabel",tH="org.eclipse.elk.randomSeed",R_="org.eclipse.elk.separateConnectedComponents",GI="org.eclipse.elk.interactive",Got="org.eclipse.elk.portConstraints",eH="org.eclipse.elk.edgeLabels.inline",j_="org.eclipse.elk.omitNodeMicroLayout",T6="org.eclipse.elk.nodeSize.options",D4="org.eclipse.elk.nodeSize.constraints",UE="org.eclipse.elk.nodeLabels.placement",WE="org.eclipse.elk.portLabels.placement",w6t="origin",i1e="random",s1e="boundingBox.upLeft",a1e="boundingBox.lowRight",v6t="org.eclipse.elk.stress.fixed",m6t="org.eclipse.elk.stress.desiredEdgeLength",y6t="org.eclipse.elk.stress.dimension",x6t="org.eclipse.elk.stress.epsilon",k6t="org.eclipse.elk.stress.iterationLimit",ob="org.eclipse.elk.stress",o1e="ELK Stress",C6="org.eclipse.elk.nodeSize.minimum",nH="org.eclipse.elk.alg.force.stress",c1e="Layered layout",_6="org.eclipse.elk.alg.layered",UI="org.eclipse.elk.alg.layered.compaction.components",$_="org.eclipse.elk.alg.layered.compaction.oned",rH="org.eclipse.elk.alg.layered.compaction.oned.algs",L2="org.eclipse.elk.alg.layered.compaction.recthull",Td="org.eclipse.elk.alg.layered.components",J0="NONE",xc={3:1,6:1,4:1,9:1,5:1,122:1},u1e={3:1,6:1,4:1,5:1,141:1,106:1,120:1},iH="org.eclipse.elk.alg.layered.compound",os={51:1},tu="org.eclipse.elk.alg.layered.graph",Uot=" -> ",l1e="Not supported by LGraph",E6t="Port side is undefined",Wot={3:1,6:1,4:1,5:1,474:1,141:1,106:1,120:1},Yg={3:1,6:1,4:1,5:1,141:1,193:1,203:1,106:1,120:1},h1e={3:1,6:1,4:1,5:1,141:1,1943:1,203:1,106:1,120:1},f1e=`([{"' \r -`,d1e=`)]}"' \r -`,g1e="The given string contains parts that cannot be parsed as numbers.",WI="org.eclipse.elk.core.math",p1e={3:1,4:1,142:1,207:1,414:1},b1e={3:1,4:1,116:1,207:1,414:1},Gn="org.eclipse.elk.layered",Kg="org.eclipse.elk.alg.layered.graph.transform",w1e="ElkGraphImporter",v1e="ElkGraphImporter/lambda$0$Type",m1e="ElkGraphImporter/lambda$1$Type",y1e="ElkGraphImporter/lambda$2$Type",x1e="ElkGraphImporter/lambda$4$Type",k1e="Node margin calculation",$n="org.eclipse.elk.alg.layered.intermediate",E1e="ONE_SIDED_GREEDY_SWITCH",T1e="TWO_SIDED_GREEDY_SWITCH",Yot="No implementation is available for the layout processor ",T6t="IntermediateProcessorStrategy",Kot="Node '",C1e="FIRST_SEPARATE",_1e="LAST_SEPARATE",S1e="Odd port side processing",_s="org.eclipse.elk.alg.layered.intermediate.compaction",z_="org.eclipse.elk.alg.layered.intermediate.greedyswitch",c0="org.eclipse.elk.alg.layered.p3order.counting",YI={225:1},S6="org.eclipse.elk.alg.layered.intermediate.loops",Gl="org.eclipse.elk.alg.layered.intermediate.loops.ordering",cb="org.eclipse.elk.alg.layered.intermediate.loops.routing",q_="org.eclipse.elk.alg.layered.intermediate.preserveorder",Cd="org.eclipse.elk.alg.layered.intermediate.wrapping",kc="org.eclipse.elk.alg.layered.options",Xot="INTERACTIVE",A1e="DEPTH_FIRST",L1e="EDGE_LENGTH",M1e="SELF_LOOPS",D1e="firstTryWithInitialOrder",C6t="org.eclipse.elk.layered.directionCongruency",_6t="org.eclipse.elk.layered.feedbackEdges",sH="org.eclipse.elk.layered.interactiveReferencePoint",S6t="org.eclipse.elk.layered.mergeEdges",A6t="org.eclipse.elk.layered.mergeHierarchyEdges",L6t="org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides",M6t="org.eclipse.elk.layered.portSortingStrategy",D6t="org.eclipse.elk.layered.thoroughness",I6t="org.eclipse.elk.layered.unnecessaryBendpoints",O6t="org.eclipse.elk.layered.generatePositionAndLayerIds",Qot="org.eclipse.elk.layered.cycleBreaking.strategy",KI="org.eclipse.elk.layered.layering.strategy",P6t="org.eclipse.elk.layered.layering.layerConstraint",F6t="org.eclipse.elk.layered.layering.layerChoiceConstraint",N6t="org.eclipse.elk.layered.layering.layerId",Zot="org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth",Jot="org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor",tct="org.eclipse.elk.layered.layering.nodePromotion.strategy",ect="org.eclipse.elk.layered.layering.nodePromotion.maxIterations",nct="org.eclipse.elk.layered.layering.coffmanGraham.layerBound",H_="org.eclipse.elk.layered.crossingMinimization.strategy",B6t="org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder",rct="org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness",ict="org.eclipse.elk.layered.crossingMinimization.semiInteractive",R6t="org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint",j6t="org.eclipse.elk.layered.crossingMinimization.positionId",$6t="org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold",sct="org.eclipse.elk.layered.crossingMinimization.greedySwitch.type",aH="org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type",I4="org.eclipse.elk.layered.nodePlacement.strategy",oH="org.eclipse.elk.layered.nodePlacement.favorStraightEdges",act="org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening",oct="org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment",cct="org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening",uct="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility",lct="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default",z6t="org.eclipse.elk.layered.edgeRouting.selfLoopDistribution",q6t="org.eclipse.elk.layered.edgeRouting.selfLoopOrdering",cH="org.eclipse.elk.layered.edgeRouting.splines.mode",uH="org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor",hct="org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth",H6t="org.eclipse.elk.layered.spacing.baseValue",V6t="org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers",G6t="org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers",U6t="org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers",W6t="org.eclipse.elk.layered.priority.direction",Y6t="org.eclipse.elk.layered.priority.shortness",K6t="org.eclipse.elk.layered.priority.straightness",fct="org.eclipse.elk.layered.compaction.connectedComponents",X6t="org.eclipse.elk.layered.compaction.postCompaction.strategy",Q6t="org.eclipse.elk.layered.compaction.postCompaction.constraints",lH="org.eclipse.elk.layered.highDegreeNodes.treatment",dct="org.eclipse.elk.layered.highDegreeNodes.threshold",gct="org.eclipse.elk.layered.highDegreeNodes.treeHeight",tg="org.eclipse.elk.layered.wrapping.strategy",hH="org.eclipse.elk.layered.wrapping.additionalEdgeSpacing",fH="org.eclipse.elk.layered.wrapping.correctionFactor",V_="org.eclipse.elk.layered.wrapping.cutting.strategy",pct="org.eclipse.elk.layered.wrapping.cutting.cuts",bct="org.eclipse.elk.layered.wrapping.cutting.msd.freedom",dH="org.eclipse.elk.layered.wrapping.validify.strategy",gH="org.eclipse.elk.layered.wrapping.validify.forbiddenIndices",pH="org.eclipse.elk.layered.wrapping.multiEdge.improveCuts",bH="org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty",wct="org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges",Z6t="org.eclipse.elk.layered.edgeLabels.sideSelection",J6t="org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy",wH="org.eclipse.elk.layered.considerModelOrder.strategy",tkt="org.eclipse.elk.layered.considerModelOrder.noModelOrder",vct="org.eclipse.elk.layered.considerModelOrder.components",ekt="org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy",mct="org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence",yct="org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence",xct="layering",I1e="layering.minWidth",O1e="layering.nodePromotion",XI="crossingMinimization",vH="org.eclipse.elk.hierarchyHandling",P1e="crossingMinimization.greedySwitch",F1e="nodePlacement",N1e="nodePlacement.bk",B1e="edgeRouting",QI="org.eclipse.elk.edgeRouting",R1="spacing",nkt="priority",rkt="compaction",R1e="compaction.postCompaction",j1e="Specifies whether and how post-process compaction is applied.",ikt="highDegreeNodes",skt="wrapping",$1e="wrapping.cutting",z1e="wrapping.validify",akt="wrapping.multiEdge",kct="edgeLabels",ZI="considerModelOrder",okt="org.eclipse.elk.spacing.commentComment",ckt="org.eclipse.elk.spacing.commentNode",ukt="org.eclipse.elk.spacing.edgeEdge",lkt="org.eclipse.elk.spacing.edgeNode",hkt="org.eclipse.elk.spacing.labelLabel",fkt="org.eclipse.elk.spacing.labelPortHorizontal",dkt="org.eclipse.elk.spacing.labelPortVertical",gkt="org.eclipse.elk.spacing.labelNode",pkt="org.eclipse.elk.spacing.nodeSelfLoop",bkt="org.eclipse.elk.spacing.portPort",wkt="org.eclipse.elk.spacing.individual",vkt="org.eclipse.elk.port.borderOffset",mkt="org.eclipse.elk.noLayout",ykt="org.eclipse.elk.port.side",JI="org.eclipse.elk.debugMode",xkt="org.eclipse.elk.alignment",kkt="org.eclipse.elk.insideSelfLoops.activate",Ekt="org.eclipse.elk.insideSelfLoops.yo",Ect="org.eclipse.elk.nodeSize.fixedGraphSize",Tkt="org.eclipse.elk.direction",Ckt="org.eclipse.elk.nodeLabels.padding",_kt="org.eclipse.elk.portLabels.nextToPortIfPossible",Skt="org.eclipse.elk.portLabels.treatAsGroup",Akt="org.eclipse.elk.portAlignment.default",Lkt="org.eclipse.elk.portAlignment.north",Mkt="org.eclipse.elk.portAlignment.south",Dkt="org.eclipse.elk.portAlignment.west",Ikt="org.eclipse.elk.portAlignment.east",mH="org.eclipse.elk.contentAlignment",Okt="org.eclipse.elk.junctionPoints",Pkt="org.eclipse.elk.edgeLabels.placement",Fkt="org.eclipse.elk.port.index",Nkt="org.eclipse.elk.commentBox",Bkt="org.eclipse.elk.hypernode",Rkt="org.eclipse.elk.port.anchor",Tct="org.eclipse.elk.partitioning.activate",Cct="org.eclipse.elk.partitioning.partition",yH="org.eclipse.elk.position",jkt="org.eclipse.elk.margins",$kt="org.eclipse.elk.spacing.portsSurrounding",_ct="org.eclipse.elk.interactiveLayout",Ec="org.eclipse.elk.core.util",zkt={3:1,4:1,5:1,593:1},q1e="NETWORK_SIMPLEX",zc={123:1,51:1},xH="org.eclipse.elk.alg.layered.p1cycles",_y="org.eclipse.elk.alg.layered.p2layers",qkt={402:1,225:1},H1e={832:1,3:1,4:1},qu="org.eclipse.elk.alg.layered.p3order",uo="org.eclipse.elk.alg.layered.p4nodes",V1e={3:1,4:1,5:1,840:1},_d=1e-5,ub="org.eclipse.elk.alg.layered.p4nodes.bk",Sct="org.eclipse.elk.alg.layered.p5edges",t1="org.eclipse.elk.alg.layered.p5edges.orthogonal",Act="org.eclipse.elk.alg.layered.p5edges.orthogonal.direction",Lct=1e-6,Sy="org.eclipse.elk.alg.layered.p5edges.splines",Mct=.09999999999999998,kH=1e-8,G1e=4.71238898038469,U1e=3.141592653589793,G_="org.eclipse.elk.alg.mrtree",U_="org.eclipse.elk.alg.mrtree.graph",A6="org.eclipse.elk.alg.mrtree.intermediate",W1e="Set neighbors in level",Y1e="DESCENDANTS",Hkt="org.eclipse.elk.mrtree.weighting",Vkt="org.eclipse.elk.mrtree.searchOrder",EH="org.eclipse.elk.alg.mrtree.options",Xg="org.eclipse.elk.mrtree",K1e="org.eclipse.elk.tree",Gkt="org.eclipse.elk.alg.radial",O4=6.283185307179586,Ukt=5e-324,X1e="org.eclipse.elk.alg.radial.intermediate",Dct="org.eclipse.elk.alg.radial.intermediate.compaction",Q1e={3:1,4:1,5:1,106:1},Wkt="org.eclipse.elk.alg.radial.intermediate.optimization",Ict="No implementation is available for the layout option ",W_="org.eclipse.elk.alg.radial.options",Ykt="org.eclipse.elk.radial.orderId",Kkt="org.eclipse.elk.radial.radius",Oct="org.eclipse.elk.radial.compactor",Pct="org.eclipse.elk.radial.compactionStepSize",Xkt="org.eclipse.elk.radial.sorter",Qkt="org.eclipse.elk.radial.wedgeCriteria",Zkt="org.eclipse.elk.radial.optimizationCriteria",Sd="org.eclipse.elk.radial",Z1e="org.eclipse.elk.alg.radial.p1position.wedge",Jkt="org.eclipse.elk.alg.radial.sorting",J1e=5.497787143782138,tde=3.9269908169872414,ede=2.356194490192345,nde="org.eclipse.elk.alg.rectpacking",TH="org.eclipse.elk.alg.rectpacking.firstiteration",Fct="org.eclipse.elk.alg.rectpacking.options",t8t="org.eclipse.elk.rectpacking.optimizationGoal",e8t="org.eclipse.elk.rectpacking.lastPlaceShift",n8t="org.eclipse.elk.rectpacking.currentPosition",r8t="org.eclipse.elk.rectpacking.desiredPosition",i8t="org.eclipse.elk.rectpacking.onlyFirstIteration",s8t="org.eclipse.elk.rectpacking.rowCompaction",Nct="org.eclipse.elk.rectpacking.expandToAspectRatio",a8t="org.eclipse.elk.rectpacking.targetWidth",CH="org.eclipse.elk.expandNodes",Ph="org.eclipse.elk.rectpacking",tO="org.eclipse.elk.alg.rectpacking.util",_H="No implementation available for ",Ay="org.eclipse.elk.alg.spore",Ly="org.eclipse.elk.alg.spore.options",kv="org.eclipse.elk.sporeCompaction",Bct="org.eclipse.elk.underlyingLayoutAlgorithm",o8t="org.eclipse.elk.processingOrder.treeConstruction",c8t="org.eclipse.elk.processingOrder.spanningTreeCostFunction",Rct="org.eclipse.elk.processingOrder.preferredRoot",jct="org.eclipse.elk.processingOrder.rootSelection",$ct="org.eclipse.elk.structure.structureExtractionStrategy",u8t="org.eclipse.elk.compaction.compactionStrategy",l8t="org.eclipse.elk.compaction.orthogonal",h8t="org.eclipse.elk.overlapRemoval.maxIterations",f8t="org.eclipse.elk.overlapRemoval.runScanline",zct="processingOrder",rde="overlapRemoval",YE="org.eclipse.elk.sporeOverlap",ide="org.eclipse.elk.alg.spore.p1structure",qct="org.eclipse.elk.alg.spore.p2processingorder",Hct="org.eclipse.elk.alg.spore.p3execution",sde="Invalid index: ",KE="org.eclipse.elk.core.alg",P4={331:1},My={288:1},ade="Make sure its type is registered with the ",d8t=" utility class.",XE="true",Vct="false",ode="Couldn't clone property '",Ev=.05,Fh="org.eclipse.elk.core.options",cde=1.2999999523162842,Tv="org.eclipse.elk.box",g8t="org.eclipse.elk.box.packingMode",ude="org.eclipse.elk.algorithm",lde="org.eclipse.elk.resolvedAlgorithm",p8t="org.eclipse.elk.bendPoints",Uxn="org.eclipse.elk.labelManager",hde="org.eclipse.elk.scaleFactor",fde="org.eclipse.elk.animate",dde="org.eclipse.elk.animTimeFactor",gde="org.eclipse.elk.layoutAncestors",pde="org.eclipse.elk.maxAnimTime",bde="org.eclipse.elk.minAnimTime",wde="org.eclipse.elk.progressBar",vde="org.eclipse.elk.validateGraph",mde="org.eclipse.elk.validateOptions",yde="org.eclipse.elk.zoomToFit",Wxn="org.eclipse.elk.font.name",xde="org.eclipse.elk.font.size",kde="org.eclipse.elk.edge.type",Ede="partitioning",Tde="nodeLabels",SH="portAlignment",Gct="nodeSize",Uct="port",b8t="portLabels",Cde="insideSelfLoops",Y_="org.eclipse.elk.fixed",AH="org.eclipse.elk.random",_de="port must have a parent node to calculate the port side",Sde="The edge needs to have exactly one edge section. Found: ",K_="org.eclipse.elk.core.util.adapters",ph="org.eclipse.emf.ecore",F4="org.eclipse.elk.graph",Ade="EMapPropertyHolder",Lde="ElkBendPoint",Mde="ElkGraphElement",Dde="ElkConnectableShape",w8t="ElkEdge",Ide="ElkEdgeSection",Ode="EModelElement",Pde="ENamedElement",v8t="ElkLabel",m8t="ElkNode",y8t="ElkPort",Fde={92:1,90:1},L6="org.eclipse.emf.common.notify.impl",lb="The feature '",X_="' is not a valid changeable feature",Nde="Expecting null",Wct="' is not a valid feature",Bde="The feature ID",Rde=" is not a valid feature ID",dc=32768,jde={105:1,92:1,90:1,56:1,49:1,97:1},Mn="org.eclipse.emf.ecore.impl",M2="org.eclipse.elk.graph.impl",Q_="Recursive containment not allowed for ",QE="The datatype '",Cv="' is not a valid classifier",Yct="The value '",N4={190:1,3:1,4:1},Kct="The class '",ZE="http://www.eclipse.org/elk/ElkGraph",xf=1024,x8t="property",Z_="value",Xct="source",$de="properties",zde="identifier",Qct="height",Zct="width",Jct="parent",tut="text",eut="children",qde="hierarchical",k8t="sources",nut="targets",E8t="sections",LH="bendPoints",T8t="outgoingShape",C8t="incomingShape",_8t="outgoingSections",S8t="incomingSections",Ra="org.eclipse.emf.common.util",A8t="Severe implementation error in the Json to ElkGraph importer.",Ad="id",ma="org.eclipse.elk.graph.json",L8t="Unhandled parameter types: ",Hde="startPoint",Vde="An edge must have at least one source and one target (edge id: '",JE="').",Gde="Referenced edge section does not exist: ",Ude=" (edge id: '",M8t="target",Wde="sourcePoint",Yde="targetPoint",MH="group",ci="name",Kde="connectableShape cannot be null",Xde="edge cannot be null",rut="Passed edge is not 'simple'.",DH="org.eclipse.elk.graph.util",eO="The 'no duplicates' constraint is violated",iut="targetIndex=",D2=", size=",sut="sourceIndex=",Ld={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1},aut={3:1,4:1,20:1,28:1,52:1,14:1,47:1,15:1,54:1,67:1,63:1,58:1,588:1},IH="logging",Qde="measureExecutionTime",Zde="parser.parse.1",Jde="parser.parse.2",OH="parser.next.1",out="parser.next.2",t0e="parser.next.3",e0e="parser.next.4",I2="parser.factor.1",D8t="parser.factor.2",n0e="parser.factor.3",r0e="parser.factor.4",i0e="parser.factor.5",s0e="parser.factor.6",a0e="parser.atom.1",o0e="parser.atom.2",c0e="parser.atom.3",I8t="parser.atom.4",cut="parser.atom.5",O8t="parser.cc.1",PH="parser.cc.2",u0e="parser.cc.3",l0e="parser.cc.5",P8t="parser.cc.6",F8t="parser.cc.7",uut="parser.cc.8",h0e="parser.ope.1",f0e="parser.ope.2",d0e="parser.ope.3",Qg="parser.descape.1",g0e="parser.descape.2",p0e="parser.descape.3",b0e="parser.descape.4",w0e="parser.descape.5",bh="parser.process.1",v0e="parser.quantifier.1",m0e="parser.quantifier.2",y0e="parser.quantifier.3",x0e="parser.quantifier.4",N8t="parser.quantifier.5",k0e="org.eclipse.emf.common.notify",B8t={415:1,672:1},E0e={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1},nO={366:1,143:1},J_="index=",lut={3:1,4:1,5:1,126:1},T0e={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,58:1},R8t={3:1,6:1,4:1,5:1,192:1},C0e={3:1,4:1,5:1,165:1,367:1},_0e=";/?:@&=+$,",S0e="invalid authority: ",A0e="EAnnotation",L0e="ETypedElement",M0e="EStructuralFeature",D0e="EAttribute",I0e="EClassifier",O0e="EEnumLiteral",P0e="EGenericType",F0e="EOperation",N0e="EParameter",B0e="EReference",R0e="ETypeParameter",$i="org.eclipse.emf.ecore.util",hut={76:1},j8t={3:1,20:1,14:1,15:1,58:1,589:1,76:1,69:1,95:1},j0e="org.eclipse.emf.ecore.util.FeatureMap$Entry",Hu=8192,Dy=2048,tS="byte",FH="char",eS="double",nS="float",rS="int",iS="long",sS="short",$0e="java.lang.Object",B4={3:1,4:1,5:1,247:1},$8t={3:1,4:1,5:1,673:1},z0e={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,69:1},zo={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,69:1,95:1},rO="mixed",Yr="http:///org/eclipse/emf/ecore/util/ExtendedMetaData",Nh="kind",q0e={3:1,4:1,5:1,674:1},z8t={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,76:1,69:1,95:1},NH={20:1,28:1,52:1,14:1,15:1,58:1,69:1},BH={47:1,125:1,279:1},RH={72:1,332:1},jH="The value of type '",$H="' must be of type '",R4=1316,Bh="http://www.eclipse.org/emf/2002/Ecore",zH=-32768,_v="constraints",Aa="baseType",H0e="getEStructuralFeature",V0e="getFeatureID",aS="feature",G0e="getOperationID",q8t="operation",U0e="defaultValue",W0e="eTypeParameters",Y0e="isInstance",K0e="getEEnumLiteral",X0e="eContainingClass",si={55:1},Q0e={3:1,4:1,5:1,119:1},Z0e="org.eclipse.emf.ecore.resource",J0e={92:1,90:1,591:1,1935:1},fut="org.eclipse.emf.ecore.resource.impl",H8t="unspecified",iO="simple",qH="attribute",tge="attributeWildcard",HH="element",dut="elementWildcard",e1="collapse",gut="itemType",VH="namespace",sO="##targetNamespace",Rh="whiteSpace",V8t="wildcards",O2="http://www.eclipse.org/emf/2003/XMLType",put="##any",t7="uninitialized",aO="The multiplicity constraint is violated",GH="org.eclipse.emf.ecore.xml.type",ege="ProcessingInstruction",nge="SimpleAnyType",rge="XMLTypeDocumentRoot",xs="org.eclipse.emf.ecore.xml.type.impl",oO="INF",ige="processing",sge="ENTITIES_._base",G8t="minLength",U8t="ENTITY",UH="NCName",age="IDREFS_._base",W8t="integer",but="token",wut="pattern",oge="[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*",Y8t="\\i\\c*",cge="[\\i-[:]][\\c-[:]]*",uge="nonPositiveInteger",cO="maxInclusive",K8t="NMTOKEN",lge="NMTOKENS_._base",X8t="nonNegativeInteger",uO="minInclusive",hge="normalizedString",fge="unsignedByte",dge="unsignedInt",gge="18446744073709551615",pge="unsignedShort",bge="processingInstruction",Zg="org.eclipse.emf.ecore.xml.type.internal",e7=1114111,wge="Internal Error: shorthands: \\u",oS="xml:isDigit",vut="xml:isWord",mut="xml:isSpace",yut="xml:isNameChar",xut="xml:isInitialNameChar",vge="09٠٩۰۹०९০৯੦੯૦૯୦୯௧௯౦౯೦೯൦൯๐๙໐໙༠༩",mge="AZazÀÖØöøıĴľŁňŊžƀǃǍǰǴǵǺȗɐʨʻˁΆΆΈΊΌΌΎΡΣώϐϖϚϚϜϜϞϞϠϠϢϳЁЌЎяёќўҁҐӄӇӈӋӌӐӫӮӵӸӹԱՖՙՙաֆאתװײءغفيٱڷںھۀێېۓەەۥۦअहऽऽक़ॡঅঌএঐওনপরললশহড়ঢ়য়ৡৰৱਅਊਏਐਓਨਪਰਲਲ਼ਵਸ਼ਸਹਖ਼ੜਫ਼ਫ਼ੲੴઅઋઍઍએઑઓનપરલળવહઽઽૠૠଅଌଏଐଓନପରଲଳଶହଽଽଡ଼ଢ଼ୟୡஅஊஎஐஒகஙசஜஜஞடணதநபமவஷஹఅఌఎఐఒనపళవహౠౡಅಌಎಐಒನಪಳವಹೞೞೠೡഅഌഎഐഒനപഹൠൡกฮะะาำเๅກຂຄຄງຈຊຊຍຍດທນຟມຣລລວວສຫອຮະະາຳຽຽເໄཀཇཉཀྵႠჅაჶᄀᄀᄂᄃᄅᄇᄉᄉᄋᄌᄎᄒᄼᄼᄾᄾᅀᅀᅌᅌᅎᅎᅐᅐᅔᅕᅙᅙᅟᅡᅣᅣᅥᅥᅧᅧᅩᅩᅭᅮᅲᅳᅵᅵᆞᆞᆨᆨᆫᆫᆮᆯᆷᆸᆺᆺᆼᇂᇫᇫᇰᇰᇹᇹḀẛẠỹἀἕἘἝἠὅὈὍὐὗὙὙὛὛὝὝὟώᾀᾴᾶᾼιιῂῄῆῌῐΐῖΊῠῬῲῴῶῼΩΩKÅ℮℮ↀↂ〇〇〡〩ぁゔァヺㄅㄬ一龥가힣",yge="Private Use",kut="ASSIGNED",Eut="\0€ÿĀſƀɏɐʯʰ˿̀ͯͰϿЀӿ԰֏֐׿؀ۿ܀ݏހ޿ऀॿঀ৿਀੿઀૿଀୿஀௿ఀ౿ಀ೿ഀൿ඀෿฀๿຀໿ༀ࿿က႟Ⴀჿᄀᇿሀ፿Ꭰ᏿᐀ᙿ ᚟ᚠ᛿ក៿᠀᢯Ḁỿἀ῿ ⁰₟₠⃏⃐⃿℀⅏⅐↏←⇿∀⋿⌀⏿␀␿⑀⑟①⓿─╿▀▟■◿☀⛿✀➿⠀⣿⺀⻿⼀⿟⿰⿿ 〿぀ゟ゠ヿ㄀ㄯ㄰㆏㆐㆟ㆠㆿ㈀㋿㌀㏿㐀䶵一鿿ꀀ꒏꒐꓏가힣豈﫿ffﭏﭐ﷿︠︯︰﹏﹐﹯ﹰ﻾\uFEFF\uFEFF＀￯",Q8t="UNASSIGNED",n7={3:1,117:1},xge="org.eclipse.emf.ecore.xml.type.util",WH={3:1,4:1,5:1,368:1},Z8t="org.eclipse.xtext.xbase.lib",kge="Cannot add elements to a Range",Ege="Cannot set elements in a Range",Tge="Cannot remove elements from a Range",YH="locale",KH="default",XH="user.agent",l,QH,Tut;b.goog=b.goog||{},b.goog.global=b.goog.global||b,mgn(),D(1,null,{},_),l.Fb=function(e){return mUt(this,e)},l.Gb=function(){return this.gm},l.Hb=function(){return Pw(this)},l.Ib=function(){var e;return Ip(ol(this))+"@"+(e=Hi(this)>>>0,e.toString(16))},l.equals=function(t){return this.Fb(t)},l.hashCode=function(){return this.Hb()},l.toString=function(){return this.Ib()};var Cge,_ge,Sge;D(290,1,{290:1,2026:1},Lyt),l.le=function(e){var n;return n=new Lyt,n.i=4,e>1?n.c=NQt(this,e-1):n.c=this,n},l.me=function(){return P0(this),this.b},l.ne=function(){return Ip(this)},l.oe=function(){return P0(this),this.k},l.pe=function(){return(this.i&4)!=0},l.qe=function(){return(this.i&1)!=0},l.Ib=function(){return Vmt(this)},l.i=0;var Qn=F(Xo,"Object",1),J8t=F(Xo,"Class",290);D(1998,1,DI),F(II,"Optional",1998),D(1170,1998,DI,A),l.Fb=function(e){return e===this},l.Hb=function(){return 2040732332},l.Ib=function(){return"Optional.absent()"},l.Jb=function(e){return Lr(e),PC(),Cut};var Cut;F(II,"Absent",1170),D(628,1,{},vet),F(II,"Joiner",628);var Yxn=Ki(II,"Predicate");D(582,1,{169:1,582:1,3:1,45:1},mC),l.Mb=function(e){return kre(this,e)},l.Lb=function(e){return kre(this,e)},l.Fb=function(e){var n;return _t(e,582)?(n=u(e,582),k5t(this.a,n.a)):!1},l.Hb=function(){return Pyt(this.a)+306654252},l.Ib=function(){return spn(this.a)},F(II,"Predicates/AndPredicate",582),D(408,1998,{408:1,3:1},Wk),l.Fb=function(e){var n;return _t(e,408)?(n=u(e,408),yi(this.a,n.a)):!1},l.Hb=function(){return 1502476572+Hi(this.a)},l.Ib=function(){return cfe+this.a+")"},l.Jb=function(e){return new Wk(g$(e.Kb(this.a),"the Function passed to Optional.transform() must not return null."))},F(II,"Present",408),D(198,1,FE),l.Nb=function(e){ba(this,e)},l.Qb=function(){uHt()},F(Ke,"UnmodifiableIterator",198),D(1978,198,NE),l.Qb=function(){uHt()},l.Rb=function(e){throw it(new Or)},l.Wb=function(e){throw it(new Or)},F(Ke,"UnmodifiableListIterator",1978),D(386,1978,NE),l.Ob=function(){return this.c0},l.Pb=function(){if(this.c>=this.d)throw it(new lc);return this.Xb(this.c++)},l.Tb=function(){return this.c},l.Ub=function(){if(this.c<=0)throw it(new lc);return this.Xb(--this.c)},l.Vb=function(){return this.c-1},l.c=0,l.d=0,F(Ke,"AbstractIndexedListIterator",386),D(699,198,FE),l.Ob=function(){return bit(this)},l.Pb=function(){return Rmt(this)},l.e=1,F(Ke,"AbstractIterator",699),D(1986,1,{224:1}),l.Zb=function(){var e;return e=this.f,e||(this.f=this.ac())},l.Fb=function(e){return Pit(this,e)},l.Hb=function(){return Hi(this.Zb())},l.dc=function(){return this.gc()==0},l.ec=function(){return qx(this)},l.Ib=function(){return $o(this.Zb())},F(Ke,"AbstractMultimap",1986),D(726,1986,T2),l.$b=function(){cz(this)},l._b=function(e){return AHt(this,e)},l.ac=function(){return new l8(this,this.c)},l.ic=function(e){return this.hc()},l.bc=function(){return new K3(this,this.c)},l.jc=function(){return this.mc(this.hc())},l.kc=function(){return new Uqt(this)},l.lc=function(){return zst(this.c.vc().Nc(),new B,64,this.d)},l.cc=function(e){return Ai(this,e)},l.fc=function(e){return GD(this,e)},l.gc=function(){return this.d},l.mc=function(e){return wn(),new T(e)},l.nc=function(){return new Gqt(this)},l.oc=function(){return zst(this.c.Cc().Nc(),new I,64,this.d)},l.pc=function(e,n){return new q$(this,e,n,null)},l.d=0,F(Ke,"AbstractMapBasedMultimap",726),D(1631,726,T2),l.hc=function(){return new Xc(this.a)},l.jc=function(){return wn(),wn(),io},l.cc=function(e){return u(Ai(this,e),15)},l.fc=function(e){return u(GD(this,e),15)},l.Zb=function(){return Wx(this)},l.Fb=function(e){return Pit(this,e)},l.qc=function(e){return u(Ai(this,e),15)},l.rc=function(e){return u(GD(this,e),15)},l.mc=function(e){return iD(u(e,15))},l.pc=function(e,n){return zZt(this,e,u(n,15),null)},F(Ke,"AbstractListMultimap",1631),D(732,1,sa),l.Nb=function(e){ba(this,e)},l.Ob=function(){return this.c.Ob()||this.e.Ob()},l.Pb=function(){var e;return this.e.Ob()||(e=u(this.c.Pb(),42),this.b=e.cd(),this.a=u(e.dd(),14),this.e=this.a.Kc()),this.sc(this.b,this.e.Pb())},l.Qb=function(){this.e.Qb(),this.a.dc()&&this.c.Qb(),--this.d.d},F(Ke,"AbstractMapBasedMultimap/Itr",732),D(1099,732,sa,Gqt),l.sc=function(e,n){return n},F(Ke,"AbstractMapBasedMultimap/1",1099),D(1100,1,{},I),l.Kb=function(e){return u(e,14).Nc()},F(Ke,"AbstractMapBasedMultimap/1methodref$spliterator$Type",1100),D(1101,732,sa,Uqt),l.sc=function(e,n){return new Lw(e,n)},F(Ke,"AbstractMapBasedMultimap/2",1101);var tEt=Ki(pr,"Map");D(1967,1,mv),l.wc=function(e){K9(this,e)},l.yc=function(e,n,r){return Qit(this,e,n,r)},l.$b=function(){this.vc().$b()},l.tc=function(e){return Tst(this,e)},l._b=function(e){return!!C4t(this,e,!1)},l.uc=function(e){var n,r,s;for(r=this.vc().Kc();r.Ob();)if(n=u(r.Pb(),42),s=n.dd(),Vt(e)===Vt(s)||e!=null&&yi(e,s))return!0;return!1},l.Fb=function(e){var n,r,s;if(e===this)return!0;if(!_t(e,83)||(s=u(e,83),this.gc()!=s.gc()))return!1;for(r=s.vc().Kc();r.Ob();)if(n=u(r.Pb(),42),!this.tc(n))return!1;return!0},l.xc=function(e){return ec(C4t(this,e,!1))},l.Hb=function(){return Tyt(this.vc())},l.dc=function(){return this.gc()==0},l.ec=function(){return new Sm(this)},l.zc=function(e,n){throw it(new Sg("Put not supported on this map"))},l.Ac=function(e){Y9(this,e)},l.Bc=function(e){return ec(C4t(this,e,!0))},l.gc=function(){return this.vc().gc()},l.Ib=function(){return Tae(this)},l.Cc=function(){return new v1(this)},F(pr,"AbstractMap",1967),D(1987,1967,mv),l.bc=function(){return new FR(this)},l.vc=function(){return $Kt(this)},l.ec=function(){var e;return e=this.g,e||(this.g=this.bc())},l.Cc=function(){var e;return e=this.i,e||(this.i=new yVt(this))},F(Ke,"Maps/ViewCachingAbstractMap",1987),D(389,1987,mv,l8),l.xc=function(e){return zon(this,e)},l.Bc=function(e){return rln(this,e)},l.$b=function(){this.d==this.e.c?this.e.$b():Vj(new Uwt(this))},l._b=function(e){return eie(this.d,e)},l.Ec=function(){return new Yk(this)},l.Dc=function(){return this.Ec()},l.Fb=function(e){return this===e||yi(this.d,e)},l.Hb=function(){return Hi(this.d)},l.ec=function(){return this.e.ec()},l.gc=function(){return this.d.gc()},l.Ib=function(){return $o(this.d)},F(Ke,"AbstractMapBasedMultimap/AsMap",389);var j1=Ki(Xo,"Iterable");D(28,1,xy),l.Jc=function(e){va(this,e)},l.Lc=function(){return this.Oc()},l.Nc=function(){return new _n(this,0)},l.Oc=function(){return new Tn(null,this.Nc())},l.Fc=function(e){throw it(new Sg("Add not supported on this collection"))},l.Gc=function(e){return Ua(this,e)},l.$b=function(){Dvt(this)},l.Hc=function(e){return ay(this,e,!1)},l.Ic=function(e){return ND(this,e)},l.dc=function(){return this.gc()==0},l.Mc=function(e){return ay(this,e,!0)},l.Pc=function(){return svt(this)},l.Qc=function(e){return eI(this,e)},l.Ib=function(){return eb(this)},F(pr,"AbstractCollection",28);var jh=Ki(pr,"Set");D(N1,28,zu),l.Nc=function(){return new _n(this,1)},l.Fb=function(e){return Yie(this,e)},l.Hb=function(){return Tyt(this)},F(pr,"AbstractSet",N1),D(1970,N1,zu),F(Ke,"Sets/ImprovedAbstractSet",1970),D(1971,1970,zu),l.$b=function(){this.Rc().$b()},l.Hc=function(e){return Lie(this,e)},l.dc=function(){return this.Rc().dc()},l.Mc=function(e){var n;return this.Hc(e)?(n=u(e,42),this.Rc().ec().Mc(n.cd())):!1},l.gc=function(){return this.Rc().gc()},F(Ke,"Maps/EntrySet",1971),D(1097,1971,zu,Yk),l.Hc=function(e){return Jyt(this.a.d.vc(),e)},l.Kc=function(){return new Uwt(this.a)},l.Rc=function(){return this.a},l.Mc=function(e){var n;return Jyt(this.a.d.vc(),e)?(n=u(e,42),San(this.a.e,n.cd()),!0):!1},l.Nc=function(){return XM(this.a.d.vc().Nc(),new nR(this.a))},F(Ke,"AbstractMapBasedMultimap/AsMap/AsMapEntries",1097),D(1098,1,{},nR),l.Kb=function(e){return MJt(this.a,u(e,42))},F(Ke,"AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type",1098),D(730,1,sa,Uwt),l.Nb=function(e){ba(this,e)},l.Pb=function(){var e;return e=u(this.b.Pb(),42),this.a=u(e.dd(),14),MJt(this.c,e)},l.Ob=function(){return this.b.Ob()},l.Qb=function(){i4(!!this.a),this.b.Qb(),this.c.e.d-=this.a.gc(),this.a.$b(),this.a=null},F(Ke,"AbstractMapBasedMultimap/AsMap/AsMapIterator",730),D(532,1970,zu,FR),l.$b=function(){this.b.$b()},l.Hc=function(e){return this.b._b(e)},l.Jc=function(e){Lr(e),this.b.wc(new Ctt(e))},l.dc=function(){return this.b.dc()},l.Kc=function(){return new FC(this.b.vc().Kc())},l.Mc=function(e){return this.b._b(e)?(this.b.Bc(e),!0):!1},l.gc=function(){return this.b.gc()},F(Ke,"Maps/KeySet",532),D(318,532,zu,K3),l.$b=function(){var e;Vj((e=this.b.vc().Kc(),new vbt(this,e)))},l.Ic=function(e){return this.b.ec().Ic(e)},l.Fb=function(e){return this===e||yi(this.b.ec(),e)},l.Hb=function(){return Hi(this.b.ec())},l.Kc=function(){var e;return e=this.b.vc().Kc(),new vbt(this,e)},l.Mc=function(e){var n,r;return r=0,n=u(this.b.Bc(e),14),n&&(r=n.gc(),n.$b(),this.a.d-=r),r>0},l.Nc=function(){return this.b.ec().Nc()},F(Ke,"AbstractMapBasedMultimap/KeySet",318),D(731,1,sa,vbt),l.Nb=function(e){ba(this,e)},l.Ob=function(){return this.c.Ob()},l.Pb=function(){return this.a=u(this.c.Pb(),42),this.a.cd()},l.Qb=function(){var e;i4(!!this.a),e=u(this.a.dd(),14),this.c.Qb(),this.b.a.d-=e.gc(),e.$b(),this.a=null},F(Ke,"AbstractMapBasedMultimap/KeySet/1",731),D(491,389,{83:1,161:1},HM),l.bc=function(){return this.Sc()},l.ec=function(){return this.Tc()},l.Sc=function(){return new mM(this.c,this.Uc())},l.Tc=function(){var e;return e=this.b,e||(this.b=this.Sc())},l.Uc=function(){return u(this.d,161)},F(Ke,"AbstractMapBasedMultimap/SortedAsMap",491),D(542,491,ufe,Dj),l.bc=function(){return new u8(this.a,u(u(this.d,161),171))},l.Sc=function(){return new u8(this.a,u(u(this.d,161),171))},l.ec=function(){var e;return e=this.b,u(e||(this.b=new u8(this.a,u(u(this.d,161),171))),271)},l.Tc=function(){var e;return e=this.b,u(e||(this.b=new u8(this.a,u(u(this.d,161),171))),271)},l.Uc=function(){return u(u(this.d,161),171)},F(Ke,"AbstractMapBasedMultimap/NavigableAsMap",542),D(490,318,lfe,mM),l.Nc=function(){return this.b.ec().Nc()},F(Ke,"AbstractMapBasedMultimap/SortedKeySet",490),D(388,490,Bxt,u8),F(Ke,"AbstractMapBasedMultimap/NavigableKeySet",388),D(541,28,xy,q$),l.Fc=function(e){var n,r;return cl(this),r=this.d.dc(),n=this.d.Fc(e),n&&(++this.f.d,r&&WM(this)),n},l.Gc=function(e){var n,r,s;return e.dc()?!1:(s=(cl(this),this.d.gc()),n=this.d.Gc(e),n&&(r=this.d.gc(),this.f.d+=r-s,s==0&&WM(this)),n)},l.$b=function(){var e;e=(cl(this),this.d.gc()),e!=0&&(this.d.$b(),this.f.d-=e,Kj(this))},l.Hc=function(e){return cl(this),this.d.Hc(e)},l.Ic=function(e){return cl(this),this.d.Ic(e)},l.Fb=function(e){return e===this?!0:(cl(this),yi(this.d,e))},l.Hb=function(){return cl(this),Hi(this.d)},l.Kc=function(){return cl(this),new Iwt(this)},l.Mc=function(e){var n;return cl(this),n=this.d.Mc(e),n&&(--this.f.d,Kj(this)),n},l.gc=function(){return iUt(this)},l.Nc=function(){return cl(this),this.d.Nc()},l.Ib=function(){return cl(this),$o(this.d)},F(Ke,"AbstractMapBasedMultimap/WrappedCollection",541);var wh=Ki(pr,"List");D(728,541,{20:1,28:1,14:1,15:1},ovt),l.ad=function(e){r4(this,e)},l.Nc=function(){return cl(this),this.d.Nc()},l.Vc=function(e,n){var r;cl(this),r=this.d.dc(),u(this.d,15).Vc(e,n),++this.a.d,r&&WM(this)},l.Wc=function(e,n){var r,s,o;return n.dc()?!1:(o=(cl(this),this.d.gc()),r=u(this.d,15).Wc(e,n),r&&(s=this.d.gc(),this.a.d+=s-o,o==0&&WM(this)),r)},l.Xb=function(e){return cl(this),u(this.d,15).Xb(e)},l.Xc=function(e){return cl(this),u(this.d,15).Xc(e)},l.Yc=function(){return cl(this),new BUt(this)},l.Zc=function(e){return cl(this),new XXt(this,e)},l.$c=function(e){var n;return cl(this),n=u(this.d,15).$c(e),--this.a.d,Kj(this),n},l._c=function(e,n){return cl(this),u(this.d,15)._c(e,n)},l.bd=function(e,n){return cl(this),zZt(this.a,this.e,u(this.d,15).bd(e,n),this.b?this.b:this)},F(Ke,"AbstractMapBasedMultimap/WrappedList",728),D(1096,728,{20:1,28:1,14:1,15:1,54:1},SWt),F(Ke,"AbstractMapBasedMultimap/RandomAccessWrappedList",1096),D(620,1,sa,Iwt),l.Nb=function(e){ba(this,e)},l.Ob=function(){return D8(this),this.b.Ob()},l.Pb=function(){return D8(this),this.b.Pb()},l.Qb=function(){lWt(this)},F(Ke,"AbstractMapBasedMultimap/WrappedCollection/WrappedIterator",620),D(729,620,n0,BUt,XXt),l.Qb=function(){lWt(this)},l.Rb=function(e){var n;n=iUt(this.a)==0,(D8(this),u(this.b,125)).Rb(e),++this.a.a.d,n&&WM(this.a)},l.Sb=function(){return(D8(this),u(this.b,125)).Sb()},l.Tb=function(){return(D8(this),u(this.b,125)).Tb()},l.Ub=function(){return(D8(this),u(this.b,125)).Ub()},l.Vb=function(){return(D8(this),u(this.b,125)).Vb()},l.Wb=function(e){(D8(this),u(this.b,125)).Wb(e)},F(Ke,"AbstractMapBasedMultimap/WrappedList/WrappedListIterator",729),D(727,541,lfe,J2t),l.Nc=function(){return cl(this),this.d.Nc()},F(Ke,"AbstractMapBasedMultimap/WrappedSortedSet",727),D(1095,727,Bxt,LUt),F(Ke,"AbstractMapBasedMultimap/WrappedNavigableSet",1095),D(1094,541,zu,zWt),l.Nc=function(){return cl(this),this.d.Nc()},F(Ke,"AbstractMapBasedMultimap/WrappedSet",1094),D(1103,1,{},B),l.Kb=function(e){return Oan(u(e,42))},F(Ke,"AbstractMapBasedMultimap/lambda$1$Type",1103),D(1102,1,{},ftt),l.Kb=function(e){return new Lw(this.a,e)},F(Ke,"AbstractMapBasedMultimap/lambda$2$Type",1102);var P2=Ki(pr,"Map/Entry");D(345,1,zq),l.Fb=function(e){var n;return _t(e,42)?(n=u(e,42),pd(this.cd(),n.cd())&&pd(this.dd(),n.dd())):!1},l.Hb=function(){var e,n;return e=this.cd(),n=this.dd(),(e==null?0:Hi(e))^(n==null?0:Hi(n))},l.ed=function(e){throw it(new Or)},l.Ib=function(){return this.cd()+"="+this.dd()},F(Ke,hfe,345),D(1988,28,xy),l.$b=function(){this.fd().$b()},l.Hc=function(e){var n;return _t(e,42)?(n=u(e,42),dsn(this.fd(),n.cd(),n.dd())):!1},l.Mc=function(e){var n;return _t(e,42)?(n=u(e,42),xZt(this.fd(),n.cd(),n.dd())):!1},l.gc=function(){return this.fd().d},F(Ke,"Multimaps/Entries",1988),D(733,1988,xy,nM),l.Kc=function(){return this.a.kc()},l.fd=function(){return this.a},l.Nc=function(){return this.a.lc()},F(Ke,"AbstractMultimap/Entries",733),D(734,733,zu,Ypt),l.Nc=function(){return this.a.lc()},l.Fb=function(e){return H4t(this,e)},l.Hb=function(){return kne(this)},F(Ke,"AbstractMultimap/EntrySet",734),D(735,28,xy,I3),l.$b=function(){this.a.$b()},l.Hc=function(e){return Qun(this.a,e)},l.Kc=function(){return this.a.nc()},l.gc=function(){return this.a.d},l.Nc=function(){return this.a.oc()},F(Ke,"AbstractMultimap/Values",735),D(1989,28,{835:1,20:1,28:1,14:1}),l.Jc=function(e){Lr(e),Q3(this).Jc(new Ttt(e))},l.Nc=function(){var e;return e=Q3(this).Nc(),zst(e,new vt,64|e.qd()&1296,this.a.d)},l.Fc=function(e){return rbt(),!0},l.Gc=function(e){return Lr(this),Lr(e),_t(e,543)?vsn(u(e,835)):!e.dc()&&oit(this,e.Kc())},l.Hc=function(e){var n;return n=u(sy(Wx(this.a),e),14),(n?n.gc():0)>0},l.Fb=function(e){return h2n(this,e)},l.Hb=function(){return Hi(Q3(this))},l.dc=function(){return Q3(this).dc()},l.Mc=function(e){return zoe(this,e,1)>0},l.Ib=function(){return $o(Q3(this))},F(Ke,"AbstractMultiset",1989),D(1991,1970,zu),l.$b=function(){cz(this.a.a)},l.Hc=function(e){var n,r;return _t(e,492)?(r=u(e,416),u(r.a.dd(),14).gc()<=0?!1:(n=QQt(this.a,r.a.cd()),n==u(r.a.dd(),14).gc())):!1},l.Mc=function(e){var n,r,s,o;return _t(e,492)&&(r=u(e,416),n=r.a.cd(),s=u(r.a.dd(),14).gc(),s!=0)?(o=this.a,Jpn(o,n,s)):!1},F(Ke,"Multisets/EntrySet",1991),D(1109,1991,zu,rM),l.Kc=function(){return new tHt($Kt(Wx(this.a.a)).Kc())},l.gc=function(){return Wx(this.a.a).gc()},F(Ke,"AbstractMultiset/EntrySet",1109),D(619,726,T2),l.hc=function(){return this.gd()},l.jc=function(){return this.hd()},l.cc=function(e){return this.jd(e)},l.fc=function(e){return this.kd(e)},l.Zb=function(){var e;return e=this.f,e||(this.f=this.ac())},l.hd=function(){return wn(),wn(),rV},l.Fb=function(e){return Pit(this,e)},l.jd=function(e){return u(Ai(this,e),21)},l.kd=function(e){return u(GD(this,e),21)},l.mc=function(e){return wn(),new s8(u(e,21))},l.pc=function(e,n){return new zWt(this,e,u(n,21))},F(Ke,"AbstractSetMultimap",619),D(1657,619,T2),l.hc=function(){return new Op(this.b)},l.gd=function(){return new Op(this.b)},l.jc=function(){return kvt(new Op(this.b))},l.hd=function(){return kvt(new Op(this.b))},l.cc=function(e){return u(u(Ai(this,e),21),84)},l.jd=function(e){return u(u(Ai(this,e),21),84)},l.fc=function(e){return u(u(GD(this,e),21),84)},l.kd=function(e){return u(u(GD(this,e),21),84)},l.mc=function(e){return _t(e,271)?kvt(u(e,271)):(wn(),new I2t(u(e,84)))},l.Zb=function(){var e;return e=this.f,e||(this.f=_t(this.c,171)?new Dj(this,u(this.c,171)):_t(this.c,161)?new HM(this,u(this.c,161)):new l8(this,this.c))},l.pc=function(e,n){return _t(n,271)?new LUt(this,e,u(n,271)):new J2t(this,e,u(n,84))},F(Ke,"AbstractSortedSetMultimap",1657),D(1658,1657,T2),l.Zb=function(){var e;return e=this.f,u(u(e||(this.f=_t(this.c,171)?new Dj(this,u(this.c,171)):_t(this.c,161)?new HM(this,u(this.c,161)):new l8(this,this.c)),161),171)},l.ec=function(){var e;return e=this.i,u(u(e||(this.i=_t(this.c,171)?new u8(this,u(this.c,171)):_t(this.c,161)?new mM(this,u(this.c,161)):new K3(this,this.c)),84),271)},l.bc=function(){return _t(this.c,171)?new u8(this,u(this.c,171)):_t(this.c,161)?new mM(this,u(this.c,161)):new K3(this,this.c)},F(Ke,"AbstractSortedKeySortedSetMultimap",1658),D(2010,1,{1947:1}),l.Fb=function(e){return qdn(this,e)},l.Hb=function(){var e;return Tyt((e=this.g,e||(this.g=new yC(this))))},l.Ib=function(){var e;return Tae((e=this.f,e||(this.f=new T2t(this))))},F(Ke,"AbstractTable",2010),D(665,N1,zu,yC),l.$b=function(){lHt()},l.Hc=function(e){var n,r;return _t(e,468)?(n=u(e,682),r=u(sy(uXt(this.a),Np(n.c.e,n.b)),83),!!r&&Jyt(r.vc(),new Lw(Np(n.c.c,n.a),t6(n.c,n.b,n.a)))):!1},l.Kc=function(){return _rn(this.a)},l.Mc=function(e){var n,r;return _t(e,468)?(n=u(e,682),r=u(sy(uXt(this.a),Np(n.c.e,n.b)),83),!!r&&Tln(r.vc(),new Lw(Np(n.c.c,n.a),t6(n.c,n.b,n.a)))):!1},l.gc=function(){return xKt(this.a)},l.Nc=function(){return xsn(this.a)},F(Ke,"AbstractTable/CellSet",665),D(1928,28,xy,dtt),l.$b=function(){lHt()},l.Hc=function(e){return O0n(this.a,e)},l.Kc=function(){return Srn(this.a)},l.gc=function(){return xKt(this.a)},l.Nc=function(){return TZt(this.a)},F(Ke,"AbstractTable/Values",1928),D(1632,1631,T2),F(Ke,"ArrayListMultimapGwtSerializationDependencies",1632),D(513,1632,T2,wet,Wvt),l.hc=function(){return new Xc(this.a)},l.a=0,F(Ke,"ArrayListMultimap",513),D(664,2010,{664:1,1947:1,3:1},Qoe),F(Ke,"ArrayTable",664),D(1924,386,NE,iWt),l.Xb=function(e){return new Ayt(this.a,e)},F(Ke,"ArrayTable/1",1924),D(1925,1,{},eR),l.ld=function(e){return new Ayt(this.a,e)},F(Ke,"ArrayTable/1methodref$getCell$Type",1925),D(2011,1,{682:1}),l.Fb=function(e){var n;return e===this?!0:_t(e,468)?(n=u(e,682),pd(Np(this.c.e,this.b),Np(n.c.e,n.b))&&pd(Np(this.c.c,this.a),Np(n.c.c,n.a))&&pd(t6(this.c,this.b,this.a),t6(n.c,n.b,n.a))):!1},l.Hb=function(){return Az(lt(ct(Qn,1),De,1,5,[Np(this.c.e,this.b),Np(this.c.c,this.a),t6(this.c,this.b,this.a)]))},l.Ib=function(){return"("+Np(this.c.e,this.b)+","+Np(this.c.c,this.a)+")="+t6(this.c,this.b,this.a)},F(Ke,"Tables/AbstractCell",2011),D(468,2011,{468:1,682:1},Ayt),l.a=0,l.b=0,l.d=0,F(Ke,"ArrayTable/2",468),D(1927,1,{},gx),l.ld=function(e){return Fte(this.a,e)},F(Ke,"ArrayTable/2methodref$getValue$Type",1927),D(1926,386,NE,sWt),l.Xb=function(e){return Fte(this.a,e)},F(Ke,"ArrayTable/3",1926),D(1979,1967,mv),l.$b=function(){Vj(this.kc())},l.vc=function(){return new bx(this)},l.lc=function(){return new BXt(this.kc(),this.gc())},F(Ke,"Maps/IteratorBasedAbstractMap",1979),D(828,1979,mv),l.$b=function(){throw it(new Or)},l._b=function(e){return LHt(this.c,e)},l.kc=function(){return new aWt(this,this.c.b.c.gc())},l.lc=function(){return Bnt(this.c.b.c.gc(),16,new bw(this))},l.xc=function(e){var n;return n=u(x9(this.c,e),19),n?this.nd(n.a):null},l.dc=function(){return this.c.b.c.dc()},l.ec=function(){return Gnt(this.c)},l.zc=function(e,n){var r;if(r=u(x9(this.c,e),19),!r)throw it(new Fn(this.md()+" "+e+" not in "+Gnt(this.c)));return this.od(r.a,n)},l.Bc=function(e){throw it(new Or)},l.gc=function(){return this.c.b.c.gc()},F(Ke,"ArrayTable/ArrayMap",828),D(1923,1,{},bw),l.ld=function(e){return hXt(this.a,e)},F(Ke,"ArrayTable/ArrayMap/0methodref$getEntry$Type",1923),D(1921,345,zq,uVt),l.cd=function(){return qQe(this.a,this.b)},l.dd=function(){return this.a.nd(this.b)},l.ed=function(e){return this.a.od(this.b,e)},l.b=0,F(Ke,"ArrayTable/ArrayMap/1",1921),D(1922,386,NE,aWt),l.Xb=function(e){return hXt(this.a,e)},F(Ke,"ArrayTable/ArrayMap/2",1922),D(1920,828,mv,ZKt),l.md=function(){return"Column"},l.nd=function(e){return t6(this.b,this.a,e)},l.od=function(e,n){return ore(this.b,this.a,e,n)},l.a=0,F(Ke,"ArrayTable/Row",1920),D(829,828,mv,T2t),l.nd=function(e){return new ZKt(this.a,e)},l.zc=function(e,n){return u(n,83),CKe()},l.od=function(e,n){return u(n,83),_Ke()},l.md=function(){return"Row"},F(Ke,"ArrayTable/RowMap",829),D(1120,1,Ih,lVt),l.qd=function(){return this.a.qd()&-262},l.rd=function(){return this.a.rd()},l.Nb=function(e){this.a.Nb(new sVt(e,this.b))},l.sd=function(e){return this.a.sd(new iVt(e,this.b))},F(Ke,"CollectSpliterators/1",1120),D(1121,1,Un,iVt),l.td=function(e){this.a.td(this.b.Kb(e))},F(Ke,"CollectSpliterators/1/lambda$0$Type",1121),D(1122,1,Un,sVt),l.td=function(e){this.a.td(this.b.Kb(e))},F(Ke,"CollectSpliterators/1/lambda$1$Type",1122),D(1123,1,Ih,FZt),l.qd=function(){return this.a},l.rd=function(){return this.d&&(this.b=jUt(this.b,this.d.rd())),jUt(this.b,0)},l.Nb=function(e){this.d&&(this.d.Nb(e),this.d=null),this.c.Nb(new rVt(this.e,e)),this.b=0},l.sd=function(e){for(;;){if(this.d&&this.d.sd(e))return u9(this.b,qq)&&(this.b=Jp(this.b,1)),!0;if(this.d=null,!this.c.sd(new aVt(this,this.e)))return!1}},l.a=0,l.b=0,F(Ke,"CollectSpliterators/1FlatMapSpliterator",1123),D(1124,1,Un,aVt),l.td=function(e){GZe(this.a,this.b,e)},F(Ke,"CollectSpliterators/1FlatMapSpliterator/lambda$0$Type",1124),D(1125,1,Un,rVt),l.td=function(e){LQe(this.b,this.a,e)},F(Ke,"CollectSpliterators/1FlatMapSpliterator/lambda$1$Type",1125),D(1117,1,Ih,wYt),l.qd=function(){return 16464|this.b},l.rd=function(){return this.a.rd()},l.Nb=function(e){this.a.xe(new cVt(e,this.c))},l.sd=function(e){return this.a.ye(new oVt(e,this.c))},l.b=0,F(Ke,"CollectSpliterators/1WithCharacteristics",1117),D(1118,1,OI,oVt),l.ud=function(e){this.a.td(this.b.ld(e))},F(Ke,"CollectSpliterators/1WithCharacteristics/lambda$0$Type",1118),D(1119,1,OI,cVt),l.ud=function(e){this.a.td(this.b.ld(e))},F(Ke,"CollectSpliterators/1WithCharacteristics/lambda$1$Type",1119),D(245,1,Uat),l.wd=function(e){return this.vd(u(e,245))},l.vd=function(e){var n;return e==(oet(),Sut)?1:e==(cet(),_ut)?-1:(n=(zj(),ID(this.a,e.a)),n!=0?n:_t(this,519)==_t(e,519)?0:_t(this,519)?1:-1)},l.zd=function(){return this.a},l.Fb=function(e){return D3t(this,e)},F(Ke,"Cut",245),D(1761,245,Uat,dHt),l.vd=function(e){return e==this?0:1},l.xd=function(e){throw it(new Mpt)},l.yd=function(e){e.a+="+∞)"},l.zd=function(){throw it(new No(dfe))},l.Hb=function(){return Gd(),$3t(this)},l.Ad=function(e){return!1},l.Ib=function(){return"+∞"};var _ut;F(Ke,"Cut/AboveAll",1761),D(519,245,{245:1,519:1,3:1,35:1},hWt),l.xd=function(e){hc((e.a+="(",e),this.a)},l.yd=function(e){qp(hc(e,this.a),93)},l.Hb=function(){return~Hi(this.a)},l.Ad=function(e){return zj(),ID(this.a,e)<0},l.Ib=function(){return"/"+this.a+"\\"},F(Ke,"Cut/AboveValue",519),D(1760,245,Uat,gHt),l.vd=function(e){return e==this?0:-1},l.xd=function(e){e.a+="(-∞"},l.yd=function(e){throw it(new Mpt)},l.zd=function(){throw it(new No(dfe))},l.Hb=function(){return Gd(),$3t(this)},l.Ad=function(e){return!0},l.Ib=function(){return"-∞"};var Sut;F(Ke,"Cut/BelowAll",1760),D(1762,245,Uat,fWt),l.xd=function(e){hc((e.a+="[",e),this.a)},l.yd=function(e){qp(hc(e,this.a),41)},l.Hb=function(){return Hi(this.a)},l.Ad=function(e){return zj(),ID(this.a,e)<=0},l.Ib=function(){return"\\"+this.a+"/"},F(Ke,"Cut/BelowValue",1762),D(537,1,r0),l.Jc=function(e){va(this,e)},l.Ib=function(){return thn(u(g$(this,"use Optional.orNull() instead of Optional.or(null)"),20).Kc())},F(Ke,"FluentIterable",537),D(433,537,r0,f9),l.Kc=function(){return new ar(lr(this.a.Kc(),new z))},F(Ke,"FluentIterable/2",433),D(1046,537,r0,bUt),l.Kc=function(){return zp(this)},F(Ke,"FluentIterable/3",1046),D(708,386,NE,C2t),l.Xb=function(e){return this.a[e].Kc()},F(Ke,"FluentIterable/3/1",708),D(1972,1,{}),l.Ib=function(){return $o(this.Bd().b)},F(Ke,"ForwardingObject",1972),D(1973,1972,gfe),l.Bd=function(){return this.Cd()},l.Jc=function(e){va(this,e)},l.Lc=function(){return this.Oc()},l.Nc=function(){return new _n(this,0)},l.Oc=function(){return new Tn(null,this.Nc())},l.Fc=function(e){return this.Cd(),OHt()},l.Gc=function(e){return this.Cd(),PHt()},l.$b=function(){this.Cd(),FHt()},l.Hc=function(e){return this.Cd().Hc(e)},l.Ic=function(e){return this.Cd().Ic(e)},l.dc=function(){return this.Cd().b.dc()},l.Kc=function(){return this.Cd().Kc()},l.Mc=function(e){return this.Cd(),NHt()},l.gc=function(){return this.Cd().b.gc()},l.Pc=function(){return this.Cd().Pc()},l.Qc=function(e){return this.Cd().Qc(e)},F(Ke,"ForwardingCollection",1973),D(1980,28,Rxt),l.Kc=function(){return this.Ed()},l.Fc=function(e){throw it(new Or)},l.Gc=function(e){throw it(new Or)},l.$b=function(){throw it(new Or)},l.Hc=function(e){return e!=null&&ay(this,e,!1)},l.Dd=function(){switch(this.gc()){case 0:return Wm(),Wm(),Aut;case 1:return Wm(),new Rnt(Lr(this.Ed().Pb()));default:return new JKt(this,this.Pc())}},l.Mc=function(e){throw it(new Or)},F(Ke,"ImmutableCollection",1980),D(712,1980,Rxt,Apt),l.Kc=function(){return e6(this.a.Kc())},l.Hc=function(e){return e!=null&&this.a.Hc(e)},l.Ic=function(e){return this.a.Ic(e)},l.dc=function(){return this.a.dc()},l.Ed=function(){return e6(this.a.Kc())},l.gc=function(){return this.a.gc()},l.Pc=function(){return this.a.Pc()},l.Qc=function(e){return this.a.Qc(e)},l.Ib=function(){return $o(this.a)},F(Ke,"ForwardingImmutableCollection",712),D(152,1980,M_),l.Kc=function(){return this.Ed()},l.Yc=function(){return this.Fd(0)},l.Zc=function(e){return this.Fd(e)},l.ad=function(e){r4(this,e)},l.Nc=function(){return new _n(this,16)},l.bd=function(e,n){return this.Gd(e,n)},l.Vc=function(e,n){throw it(new Or)},l.Wc=function(e,n){throw it(new Or)},l.Fb=function(e){return Kbn(this,e)},l.Hb=function(){return aun(this)},l.Xc=function(e){return e==null?-1:m1n(this,e)},l.Ed=function(){return this.Fd(0)},l.Fd=function(e){return $2t(this,e)},l.$c=function(e){throw it(new Or)},l._c=function(e,n){throw it(new Or)},l.Gd=function(e,n){var r;return Dz((r=new xVt(this),new Qd(r,e,n)))};var Aut;F(Ke,"ImmutableList",152),D(2006,152,M_),l.Kc=function(){return e6(this.Hd().Kc())},l.bd=function(e,n){return Dz(this.Hd().bd(e,n))},l.Hc=function(e){return e!=null&&this.Hd().Hc(e)},l.Ic=function(e){return this.Hd().Ic(e)},l.Fb=function(e){return yi(this.Hd(),e)},l.Xb=function(e){return Np(this,e)},l.Hb=function(){return Hi(this.Hd())},l.Xc=function(e){return this.Hd().Xc(e)},l.dc=function(){return this.Hd().dc()},l.Ed=function(){return e6(this.Hd().Kc())},l.gc=function(){return this.Hd().gc()},l.Gd=function(e,n){return Dz(this.Hd().bd(e,n))},l.Pc=function(){return this.Hd().Qc(Nt(Qn,De,1,this.Hd().gc(),5,1))},l.Qc=function(e){return this.Hd().Qc(e)},l.Ib=function(){return $o(this.Hd())},F(Ke,"ForwardingImmutableList",2006),D(714,1,BE),l.vc=function(){return Rw(this)},l.wc=function(e){K9(this,e)},l.ec=function(){return Gnt(this)},l.yc=function(e,n,r){return Qit(this,e,n,r)},l.Cc=function(){return this.Ld()},l.$b=function(){throw it(new Or)},l._b=function(e){return this.xc(e)!=null},l.uc=function(e){return this.Ld().Hc(e)},l.Jd=function(){return new iqt(this)},l.Kd=function(){return new sqt(this)},l.Fb=function(e){return Zun(this,e)},l.Hb=function(){return Rw(this).Hb()},l.dc=function(){return this.gc()==0},l.zc=function(e,n){return SKe()},l.Bc=function(e){throw it(new Or)},l.Ib=function(){return Mgn(this)},l.Ld=function(){return this.e?this.e:this.e=this.Kd()},l.c=null,l.d=null,l.e=null;var Age;F(Ke,"ImmutableMap",714),D(715,714,BE),l._b=function(e){return LHt(this,e)},l.uc=function(e){return CVt(this.b,e)},l.Id=function(){return tie(new kC(this))},l.Jd=function(){return tie(OXt(this.b))},l.Kd=function(){return gd(),new Apt(IXt(this.b))},l.Fb=function(e){return _Vt(this.b,e)},l.xc=function(e){return x9(this,e)},l.Hb=function(){return Hi(this.b.c)},l.dc=function(){return this.b.c.dc()},l.gc=function(){return this.b.c.gc()},l.Ib=function(){return $o(this.b.c)},F(Ke,"ForwardingImmutableMap",715),D(1974,1973,Wat),l.Bd=function(){return this.Md()},l.Cd=function(){return this.Md()},l.Nc=function(){return new _n(this,1)},l.Fb=function(e){return e===this||this.Md().Fb(e)},l.Hb=function(){return this.Md().Hb()},F(Ke,"ForwardingSet",1974),D(1069,1974,Wat,kC),l.Bd=function(){return L8(this.a.b)},l.Cd=function(){return L8(this.a.b)},l.Hc=function(e){if(_t(e,42)&&u(e,42).cd()==null)return!1;try{return TVt(L8(this.a.b),e)}catch(n){if(n=Wi(n),_t(n,205))return!1;throw it(n)}},l.Md=function(){return L8(this.a.b)},l.Qc=function(e){var n;return n=gQt(L8(this.a.b),e),L8(this.a.b).b.gc()=0?"+":"")+(r/60|0),n=gj(b.Math.abs(r)%60),(Pae(),Vge)[this.q.getDay()]+" "+Gge[this.q.getMonth()]+" "+gj(this.q.getDate())+" "+gj(this.q.getHours())+":"+gj(this.q.getMinutes())+":"+gj(this.q.getSeconds())+" GMT"+e+n+" "+this.q.getFullYear()};var tV=F(pr,"Date",199);D(1915,199,Efe,oae),l.a=!1,l.b=0,l.c=0,l.d=0,l.e=0,l.f=0,l.g=!1,l.i=0,l.j=0,l.k=0,l.n=0,l.o=0,l.p=0,F("com.google.gwt.i18n.shared.impl","DateRecord",1915),D(1966,1,{}),l.fe=function(){return null},l.ge=function(){return null},l.he=function(){return null},l.ie=function(){return null},l.je=function(){return null},F(v6,"JSONValue",1966),D(216,1966,{216:1},Eg,wx),l.Fb=function(e){return _t(e,216)?Xvt(this.a,u(e,216).a):!1},l.ee=function(){return KYe},l.Hb=function(){return Bvt(this.a)},l.fe=function(){return this},l.Ib=function(){var e,n,r;for(r=new Ol("["),n=0,e=this.a.length;n0&&(r.a+=","),hc(r,Jm(this,n));return r.a+="]",r.a},F(v6,"JSONArray",216),D(483,1966,{483:1},Xk),l.ee=function(){return XYe},l.ge=function(){return this},l.Ib=function(){return Nn(),""+this.a},l.a=!1;var Fge,Nge;F(v6,"JSONBoolean",483),D(985,60,Q0,eHt),F(v6,"JSONException",985),D(1023,1966,{},ft),l.ee=function(){return eKe},l.Ib=function(){return _u};var Bge;F(v6,"JSONNull",1023),D(258,1966,{258:1},EC),l.Fb=function(e){return _t(e,258)?this.a==u(e,258).a:!1},l.ee=function(){return QYe},l.Hb=function(){return p8(this.a)},l.he=function(){return this},l.Ib=function(){return this.a+""},l.a=0,F(v6,"JSONNumber",258),D(183,1966,{183:1},_x,Qk),l.Fb=function(e){return _t(e,183)?Xvt(this.a,u(e,183).a):!1},l.ee=function(){return ZYe},l.Hb=function(){return Bvt(this.a)},l.ie=function(){return this},l.Ib=function(){var e,n,r,s,o,h,d;for(d=new Ol("{"),e=!0,h=yit(this,Nt(Ae,ee,2,0,6,1)),r=h,s=0,o=r.length;s=0?":"+this.c:"")+")"},l.c=0;var wEt=F(Xo,"StackTraceElement",310);Sge={3:1,475:1,35:1,2:1};var Ae=F(Xo,jxt,2);D(107,418,{475:1},Ag,$C,_h),F(Xo,"StringBuffer",107),D(100,418,{475:1},Mp,Im,Ol),F(Xo,"StringBuilder",100),D(687,73,bot,sbt),F(Xo,"StringIndexOutOfBoundsException",687),D(2043,1,{});var vEt;D(844,1,{},Ft),l.Kb=function(e){return u(e,78).e},F(Xo,"Throwable/lambda$0$Type",844),D(41,60,{3:1,102:1,60:1,78:1,41:1},Or,Sg),F(Xo,"UnsupportedOperationException",41),D(240,236,{3:1,35:1,236:1,240:1},SD,gbt),l.wd=function(e){return gle(this,u(e,240))},l.ke=function(){return dy(Xle(this))},l.Fb=function(e){var n;return this===e?!0:_t(e,240)?(n=u(e,240),this.e==n.e&&gle(this,n)==0):!1},l.Hb=function(){var e;return this.b!=0?this.b:this.a<54?(e=Tu(this.f),this.b=Ar(Ns(e,-1)),this.b=33*this.b+Ar(Ns($p(e,32),-1)),this.b=17*this.b+ps(this.e),this.b):(this.b=17*Yre(this.c)+ps(this.e),this.b)},l.Ib=function(){return Xle(this)},l.a=0,l.b=0,l.d=0,l.e=0,l.f=0;var zge,N2,mEt,yEt,xEt,kEt,EEt,TEt,Nut=F("java.math","BigDecimal",240);D(91,236,{3:1,35:1,236:1,91:1},j3t,Ng,X3,x4t,Qie,Rp),l.wd=function(e){return Uie(this,u(e,91))},l.ke=function(){return dy(Hat(this,0))},l.Fb=function(e){return v3t(this,e)},l.Hb=function(){return Yre(this)},l.Ib=function(){return Hat(this,0)},l.b=-2,l.c=0,l.d=0,l.e=0;var But,eV,CEt,Rut,nV,s7,j4=F("java.math","BigInteger",91),qge,Hge,D6,lS;D(488,1967,mv),l.$b=function(){Xu(this)},l._b=function(e){return Tl(this,e)},l.uc=function(e){return Ire(this,e,this.g)||Ire(this,e,this.f)},l.vc=function(){return new Cg(this)},l.xc=function(e){return tr(this,e)},l.zc=function(e,n){return ki(this,e,n)},l.Bc=function(e){return Jx(this,e)},l.gc=function(){return HC(this)},F(pr,"AbstractHashMap",488),D(261,N1,zu,Cg),l.$b=function(){this.a.$b()},l.Hc=function(e){return MZt(this,e)},l.Kc=function(){return new p2(this.a)},l.Mc=function(e){var n;return MZt(this,e)?(n=u(e,42).cd(),this.a.Bc(n),!0):!1},l.gc=function(){return this.a.gc()},F(pr,"AbstractHashMap/EntrySet",261),D(262,1,sa,p2),l.Nb=function(e){ba(this,e)},l.Pb=function(){return Zw(this)},l.Ob=function(){return this.b},l.Qb=function(){Ste(this)},l.b=!1,F(pr,"AbstractHashMap/EntrySetIterator",262),D(417,1,sa,mx),l.Nb=function(e){ba(this,e)},l.Ob=function(){return TM(this)},l.Pb=function(){return ZXt(this)},l.Qb=function(){Cl(this)},l.b=0,l.c=-1,F(pr,"AbstractList/IteratorImpl",417),D(96,417,n0,da),l.Qb=function(){Cl(this)},l.Rb=function(e){zm(this,e)},l.Sb=function(){return this.b>0},l.Tb=function(){return this.b},l.Ub=function(){return Zn(this.b>0),this.a.Xb(this.c=--this.b)},l.Vb=function(){return this.b-1},l.Wb=function(e){Rm(this.c!=-1),this.a._c(this.c,e)},F(pr,"AbstractList/ListIteratorImpl",96),D(219,52,jE,Qd),l.Vc=function(e,n){Km(e,this.b),this.c.Vc(this.a+e,n),++this.b},l.Xb=function(e){return An(e,this.b),this.c.Xb(this.a+e)},l.$c=function(e){var n;return An(e,this.b),n=this.c.$c(this.a+e),--this.b,n},l._c=function(e,n){return An(e,this.b),this.c._c(this.a+e,n)},l.gc=function(){return this.b},l.a=0,l.b=0,F(pr,"AbstractList/SubList",219),D(384,N1,zu,Sm),l.$b=function(){this.a.$b()},l.Hc=function(e){return this.a._b(e)},l.Kc=function(){var e;return e=this.a.vc().Kc(),new cM(e)},l.Mc=function(e){return this.a._b(e)?(this.a.Bc(e),!0):!1},l.gc=function(){return this.a.gc()},F(pr,"AbstractMap/1",384),D(691,1,sa,cM),l.Nb=function(e){ba(this,e)},l.Ob=function(){return this.a.Ob()},l.Pb=function(){var e;return e=u(this.a.Pb(),42),e.cd()},l.Qb=function(){this.a.Qb()},F(pr,"AbstractMap/1/1",691),D(226,28,xy,v1),l.$b=function(){this.a.$b()},l.Hc=function(e){return this.a.uc(e)},l.Kc=function(){var e;return e=this.a.vc().Kc(),new m1(e)},l.gc=function(){return this.a.gc()},F(pr,"AbstractMap/2",226),D(294,1,sa,m1),l.Nb=function(e){ba(this,e)},l.Ob=function(){return this.a.Ob()},l.Pb=function(){var e;return e=u(this.a.Pb(),42),e.dd()},l.Qb=function(){this.a.Qb()},F(pr,"AbstractMap/2/1",294),D(484,1,{484:1,42:1}),l.Fb=function(e){var n;return _t(e,42)?(n=u(e,42),Fc(this.d,n.cd())&&Fc(this.e,n.dd())):!1},l.cd=function(){return this.d},l.dd=function(){return this.e},l.Hb=function(){return U3(this.d)^U3(this.e)},l.ed=function(e){return awt(this,e)},l.Ib=function(){return this.d+"="+this.e},F(pr,"AbstractMap/AbstractEntry",484),D(383,484,{484:1,383:1,42:1},KR),F(pr,"AbstractMap/SimpleEntry",383),D(1984,1,yot),l.Fb=function(e){var n;return _t(e,42)?(n=u(e,42),Fc(this.cd(),n.cd())&&Fc(this.dd(),n.dd())):!1},l.Hb=function(){return U3(this.cd())^U3(this.dd())},l.Ib=function(){return this.cd()+"="+this.dd()},F(pr,hfe,1984),D(1992,1967,ufe),l.tc=function(e){return RJt(this,e)},l._b=function(e){return _nt(this,e)},l.vc=function(){return new x(this)},l.xc=function(e){var n;return n=e,ec(jyt(this,n))},l.ec=function(){return new y(this)},F(pr,"AbstractNavigableMap",1992),D(739,N1,zu,x),l.Hc=function(e){return _t(e,42)&&RJt(this.b,u(e,42))},l.Kc=function(){return new y9(this.b)},l.Mc=function(e){var n;return _t(e,42)?(n=u(e,42),Cte(this.b,n)):!1},l.gc=function(){return this.b.c},F(pr,"AbstractNavigableMap/EntrySet",739),D(493,N1,Bxt,y),l.Nc=function(){return new WR(this)},l.$b=function(){NC(this.a)},l.Hc=function(e){return _nt(this.a,e)},l.Kc=function(){var e;return e=new y9(new w9(this.a).b),new g(e)},l.Mc=function(e){return _nt(this.a,e)?(P9(this.a,e),!0):!1},l.gc=function(){return this.a.c},F(pr,"AbstractNavigableMap/NavigableKeySet",493),D(494,1,sa,g),l.Nb=function(e){ba(this,e)},l.Ob=function(){return TM(this.a.a)},l.Pb=function(){var e;return e=Lj(this.a),e.cd()},l.Qb=function(){AYt(this.a)},F(pr,"AbstractNavigableMap/NavigableKeySet/1",494),D(2004,28,xy),l.Fc=function(e){return R8(xE(this,e)),!0},l.Gc=function(e){return On(e),Bj(e!=this,"Can't add a queue to itself"),Ua(this,e)},l.$b=function(){for(;cit(this)!=null;);},F(pr,"AbstractQueue",2004),D(302,28,{4:1,20:1,28:1,14:1},B3,eZt),l.Fc=function(e){return imt(this,e),!0},l.$b=function(){lmt(this)},l.Hc=function(e){return ere(new O9(this),e)},l.dc=function(){return BC(this)},l.Kc=function(){return new O9(this)},l.Mc=function(e){return hin(new O9(this),e)},l.gc=function(){return this.c-this.b&this.a.length-1},l.Nc=function(){return new _n(this,272)},l.Qc=function(e){var n;return n=this.c-this.b&this.a.length-1,e.lengthn&&ts(e,n,null),e},l.b=0,l.c=0,F(pr,"ArrayDeque",302),D(446,1,sa,O9),l.Nb=function(e){ba(this,e)},l.Ob=function(){return this.a!=this.b},l.Pb=function(){return Mz(this)},l.Qb=function(){Jee(this)},l.a=0,l.b=0,l.c=-1,F(pr,"ArrayDeque/IteratorImpl",446),D(12,52,_fe,he,Xc,Bu),l.Vc=function(e,n){Hm(this,e,n)},l.Fc=function(e){return le(this,e)},l.Wc=function(e,n){return Gyt(this,e,n)},l.Gc=function(e){return Ls(this,e)},l.$b=function(){this.c=Nt(Qn,De,1,0,5,1)},l.Hc=function(e){return Ro(this,e,0)!=-1},l.Jc=function(e){xu(this,e)},l.Xb=function(e){return Ne(this,e)},l.Xc=function(e){return Ro(this,e,0)},l.dc=function(){return this.c.length==0},l.Kc=function(){return new S(this)},l.$c=function(e){return Fg(this,e)},l.Mc=function(e){return mu(this,e)},l.Ud=function(e,n){tZt(this,e,n)},l._c=function(e,n){return ch(this,e,n)},l.gc=function(){return this.c.length},l.ad=function(e){Zs(this,e)},l.Pc=function(){return pnt(this)},l.Qc=function(e){return P1(this,e)};var Kxn=F(pr,"ArrayList",12);D(7,1,sa,S),l.Nb=function(e){ba(this,e)},l.Ob=function(){return Go(this)},l.Pb=function(){return J(this)},l.Qb=function(){L9(this)},l.a=0,l.b=-1,F(pr,"ArrayList/1",7),D(2013,b.Function,{},Tt),l.te=function(e,n){return Ms(e,n)},D(154,52,Sfe,yl),l.Hc=function(e){return ene(this,e)!=-1},l.Jc=function(e){var n,r,s,o;for(On(e),r=this.a,s=0,o=r.length;s>>0,e.toString(16)))},l.f=0,l.i=Cs;var oV=F(a0,"CNode",57);D(814,1,{},jpt),F(a0,"CNode/CNodeBuilder",814);var spe;D(1525,1,{},Po),l.Oe=function(e,n){return 0},l.Pe=function(e,n){return 0},F(a0,Ffe,1525),D(1790,1,{},vs),l.Le=function(e){var n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt;for(C=as,s=new S(e.a.b);s.as.d.c||s.d.c==h.d.c&&s.d.b0?e+this.n.d+this.n.a:0},l.Se=function(){var e,n,r,s,o;if(o=0,this.e)this.b?o=this.b.a:this.a[1][1]&&(o=this.a[1][1].Se());else if(this.g)o=d3t(this,Ist(this,null,!0));else for(n=(Kf(),lt(ct(Oy,1),oe,232,0,[sc,eu,ac])),r=0,s=n.length;r0?o+this.n.b+this.n.c:0},l.Te=function(){var e,n,r,s,o;if(this.g)for(e=Ist(this,null,!1),r=(Kf(),lt(ct(Oy,1),oe,232,0,[sc,eu,ac])),s=0,o=r.length;s0&&(s[0]+=this.d,r-=s[0]),s[2]>0&&(s[2]+=this.d,r-=s[2]),this.c.a=b.Math.max(0,r),this.c.d=n.d+e.d+(this.c.a-r)/2,s[1]=b.Math.max(s[1],r),wmt(this,eu,n.d+e.d+s[0]-(s[1]-r)/2,s)},l.b=null,l.d=0,l.e=!1,l.f=!1,l.g=!1;var Gut=0,cV=0;F(_2,"GridContainerCell",1473),D(461,22,{3:1,35:1,22:1,461:1},Let);var fb,Md,kf,ppe=jr(_2,"HorizontalLabelAlignment",461,Hr,_in,lJe),bpe;D(306,212,{212:1,306:1},xQt,Aee,vQt),l.Re=function(){return sKt(this)},l.Se=function(){return Vwt(this)},l.a=0,l.c=!1;var s6n=F(_2,"LabelCell",306);D(244,326,{212:1,326:1,244:1},a_),l.Re=function(){return dI(this)},l.Se=function(){return gI(this)},l.Te=function(){Eat(this)},l.Ue=function(){Tat(this)},l.b=0,l.c=0,l.d=!1,F(_2,"StripContainerCell",244),D(1626,1,li,th),l.Mb=function(e){return EKe(u(e,212))},F(_2,"StripContainerCell/lambda$0$Type",1626),D(1627,1,{},Fa),l.Fe=function(e){return u(e,212).Se()},F(_2,"StripContainerCell/lambda$1$Type",1627),D(1628,1,li,Ml),l.Mb=function(e){return TKe(u(e,212))},F(_2,"StripContainerCell/lambda$2$Type",1628),D(1629,1,{},ha),l.Fe=function(e){return u(e,212).Re()},F(_2,"StripContainerCell/lambda$3$Type",1629),D(462,22,{3:1,35:1,22:1,462:1},Met);var Ef,db,n1,wpe=jr(_2,"VerticalLabelAlignment",462,Hr,Sin,hJe),vpe;D(789,1,{},Sxt),l.c=0,l.d=0,l.k=0,l.s=0,l.t=0,l.v=!1,l.w=0,l.D=!1,F(Yq,"NodeContext",789),D(1471,1,Oi,bc),l.ue=function(e,n){return xUt(u(e,61),u(n,61))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(Yq,"NodeContext/0methodref$comparePortSides$Type",1471),D(1472,1,Oi,Cc),l.ue=function(e,n){return Q0n(u(e,111),u(n,111))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(Yq,"NodeContext/1methodref$comparePortContexts$Type",1472),D(159,22,{3:1,35:1,22:1,159:1},hh);var mpe,ype,xpe,kpe,Epe,Tpe,Cpe,_pe,Spe,Ape,Lpe,Mpe,Dpe,Ipe,Ope,Ppe,Fpe,Npe,Bpe,Rpe,jpe,Uut,$pe=jr(Yq,"NodeLabelLocation",159,Hr,lst,fJe),zpe;D(111,1,{111:1},tce),l.a=!1,F(Yq,"PortContext",111),D(1476,1,Un,pa),l.td=function(e){$Ht(u(e,306))},F(zI,Yfe,1476),D(1477,1,li,Da),l.Mb=function(e){return!!u(e,111).c},F(zI,Kfe,1477),D(1478,1,Un,Ha),l.td=function(e){$Ht(u(e,111).c)},F(zI,"LabelPlacer/lambda$2$Type",1478);var o7t;D(1475,1,Un,_c),l.td=function(e){$m(),rKe(u(e,111))},F(zI,"NodeLabelAndSizeUtilities/lambda$0$Type",1475),D(790,1,Un,Ewt),l.td=function(e){pXe(this.b,this.c,this.a,u(e,181))},l.a=!1,l.c=!1,F(zI,"NodeLabelCellCreator/lambda$0$Type",790),D(1474,1,Un,vn),l.td=function(e){aKe(this.a,u(e,181))},F(zI,"PortContextCreator/lambda$0$Type",1474);var uV;D(1829,1,{},lw),F(HE,"GreedyRectangleStripOverlapRemover",1829),D(1830,1,Oi,Dl),l.ue=function(e,n){return WQe(u(e,222),u(n,222))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(HE,"GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type",1830),D(1786,1,{},vqt),l.a=5,l.e=0,F(HE,"RectangleStripOverlapRemover",1786),D(1787,1,Oi,ed),l.ue=function(e,n){return YQe(u(e,222),u(n,222))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(HE,"RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type",1787),D(1789,1,Oi,jd),l.ue=function(e,n){return vnn(u(e,222),u(n,222))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(HE,"RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type",1789),D(406,22,{3:1,35:1,22:1,406:1},ZR);var lO,Wut,Yut,hO,qpe=jr(HE,"RectangleStripOverlapRemover/OverlapRemovalDirection",406,Hr,_sn,dJe),Hpe;D(222,1,{222:1},Hnt),F(HE,"RectangleStripOverlapRemover/RectangleNode",222),D(1788,1,Un,gr),l.td=function(e){k1n(this.a,u(e,222))},F(HE,"RectangleStripOverlapRemover/lambda$1$Type",1788),D(1304,1,Oi,nd),l.ue=function(e,n){return A3n(u(e,167),u(n,167))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(kd,"PolyominoCompactor/CornerCasesGreaterThanRestComparator",1304),D(1307,1,{},$d),l.Kb=function(e){return u(e,324).a},F(kd,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type",1307),D(1308,1,li,A0),l.Mb=function(e){return u(e,323).a},F(kd,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type",1308),D(1309,1,li,Bi),l.Mb=function(e){return u(e,323).a},F(kd,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type",1309),D(1302,1,Oi,cn),l.ue=function(e,n){return cmn(u(e,167),u(n,167))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(kd,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator",1302),D(1305,1,{},eh),l.Kb=function(e){return u(e,324).a},F(kd,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type",1305),D(767,1,Oi,kr),l.ue=function(e,n){return lun(u(e,167),u(n,167))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(kd,"PolyominoCompactor/MinNumOfExtensionsComparator",767),D(1300,1,Oi,Ei),l.ue=function(e,n){return mcn(u(e,321),u(n,321))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(kd,"PolyominoCompactor/MinPerimeterComparator",1300),D(1301,1,Oi,Jo),l.ue=function(e,n){return Kfn(u(e,321),u(n,321))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(kd,"PolyominoCompactor/MinPerimeterComparatorWithShape",1301),D(1303,1,Oi,wc),l.ue=function(e,n){return Dmn(u(e,167),u(n,167))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(kd,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator",1303),D(1306,1,{},rf),l.Kb=function(e){return u(e,324).a},F(kd,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type",1306),D(777,1,{},Mbt),l.Ce=function(e,n){return ksn(this,u(e,46),u(n,167))},F(kd,"SuccessorCombination",777),D(644,1,{},Oc),l.Ce=function(e,n){var r;return hbn((r=u(e,46),u(n,167),r))},F(kd,"SuccessorJitter",644),D(643,1,{},sf),l.Ce=function(e,n){var r;return Jwn((r=u(e,46),u(n,167),r))},F(kd,"SuccessorLineByLine",643),D(568,1,{},af),l.Ce=function(e,n){var r;return f2n((r=u(e,46),u(n,167),r))},F(kd,"SuccessorManhattan",568),D(1356,1,{},Qi),l.Ce=function(e,n){var r;return Ewn((r=u(e,46),u(n,167),r))},F(kd,"SuccessorMaxNormWindingInMathPosSense",1356),D(400,1,{},fr),l.Ce=function(e,n){return vvt(this,e,n)},l.c=!1,l.d=!1,l.e=!1,l.f=!1,F(kd,"SuccessorQuadrantsGeneric",400),D(1357,1,{},Ts),l.Kb=function(e){return u(e,324).a},F(kd,"SuccessorQuadrantsGeneric/lambda$0$Type",1357),D(323,22,{3:1,35:1,22:1,323:1},QR),l.a=!1;var fO,dO,gO,pO,Vpe=jr(Xq,i6t,323,Hr,Lsn,gJe),Gpe;D(1298,1,{}),l.Ib=function(){var e,n,r,s,o,h;for(r=" ",e=pe(0),o=0;o=0?"b"+e+"["+zrt(this.a)+"]":"b["+zrt(this.a)+"]"):"b_"+Pw(this)},F(HI,"FBendpoint",559),D(282,134,{3:1,282:1,94:1,134:1},eYt),l.Ib=function(){return zrt(this)},F(HI,"FEdge",282),D(231,134,{3:1,231:1,94:1,134:1},B$);var o6n=F(HI,"FGraph",231);D(447,357,{3:1,447:1,357:1,94:1,134:1},iJt),l.Ib=function(){return this.b==null||this.b.length==0?"l["+zrt(this.a)+"]":"l_"+this.b},F(HI,"FLabel",447),D(144,357,{3:1,144:1,357:1,94:1,134:1},gXt),l.Ib=function(){return Kvt(this)},l.b=0,F(HI,"FNode",144),D(2003,1,{}),l.bf=function(e){axt(this,e)},l.cf=function(){Bse(this)},l.d=0,F(g6t,"AbstractForceModel",2003),D(631,2003,{631:1},Wne),l.af=function(e,n){var r,s,o,h,d;return Ooe(this.f,e,n),o=ia(nc(n.d),e.d),d=b.Math.sqrt(o.a*o.a+o.b*o.b),s=b.Math.max(0,d-D9(e.e)/2-D9(n.e)/2),r=Ere(this.e,e,n),r>0?h=-pnn(s,this.c)*r:h=oZe(s,this.b)*u(Q(e,(Jf(),c7)),19).a,fd(o,h/d),o},l.bf=function(e){axt(this,e),this.a=u(Q(e,(Jf(),pV)),19).a,this.c=Xt(ye(Q(e,bV))),this.b=Xt(ye(Q(e,elt)))},l.df=function(e){return e0&&(h-=mKe(s,this.a)*r),fd(o,h*this.b/d),o},l.bf=function(e){var n,r,s,o,h,d,v;for(axt(this,e),this.b=Xt(ye(Q(e,(Jf(),nlt)))),this.c=this.b/u(Q(e,pV),19).a,s=e.e.c.length,h=0,o=0,v=new S(e.e);v.a0},l.a=0,l.b=0,l.c=0,F(g6t,"FruchtermanReingoldModel",632),D(849,1,Oh,HJ),l.Qe=function(e){an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Jq),""),"Force Model"),"Determines the model for force calculation."),b7t),(Ug(),us)),w7t),un((Qf(),qn))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,p6t),""),"Iterations"),"The number of iterations on the force model."),pe(300)),gc),ja),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,b6t),""),"Repulsive Power"),"Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model"),pe(0)),gc),ja),un(Pd)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,qot),""),"FR Temperature"),"The temperature is used as a scaling factor for particle displacements."),Ed),Oo),la),un(qn)))),ca(e,qot,Jq,hbe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Hot),""),"Eades Repulsion"),"Factor for repulsive forces in Eades' model."),5),Oo),la),un(qn)))),ca(e,Hot,Jq,cbe),Phe((new bC,e))};var sbe,abe,b7t,obe,cbe,ube,lbe,hbe;F(B_,"ForceMetaDataProvider",849),D(424,22,{3:1,35:1,22:1,424:1},Pbt);var tlt,gV,w7t=jr(B_,"ForceModelStrategy",424,Hr,ein,wJe),fbe;D(988,1,Oh,bC),l.Qe=function(e){Phe(e)};var dbe,gbe,v7t,pV,m7t,pbe,bbe,wbe,y7t,vbe,x7t,k7t,mbe,c7,ybe,elt,E7t,xbe,kbe,bV,nlt;F(B_,"ForceOptions",988),D(989,1,{},V5),l.$e=function(){var e;return e=new Npt,e},l._e=function(e){},F(B_,"ForceOptions/ForceFactory",989);var vO,dS,I6,wV;D(850,1,Oh,VJ),l.Qe=function(e){an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,v6t),""),"Fixed Position"),"Prevent that the node is moved by the layout algorithm."),(Nn(),!1)),(Ug(),La)),Rs),un((Qf(),ea))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,m6t),""),"Desired Edge Length"),"Either specified for parent nodes or for individual edges, where the latter takes higher precedence."),100),Oo),la),ji(qn,lt(ct(ip,1),oe,175,0,[Pd]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,y6t),""),"Layout Dimension"),"Dimensions that are permitted to be altered during layout."),T7t),us),D7t),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,x6t),""),"Stress Epsilon"),"Termination criterion for the iterative process."),Ed),Oo),la),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,k6t),""),"Iteration Limit"),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),pe(wi)),gc),ja),un(qn)))),vhe((new GJ,e))};var Ebe,Tbe,T7t,Cbe,_be,Sbe;F(B_,"StressMetaDataProvider",850),D(992,1,Oh,GJ),l.Qe=function(e){vhe(e)};var vV,C7t,_7t,S7t,A7t,L7t,Abe,Lbe,Mbe,Dbe,M7t,Ibe;F(B_,"StressOptions",992),D(993,1,{},f1),l.$e=function(){var e;return e=new nYt,e},l._e=function(e){},F(B_,"StressOptions/StressFactory",993),D(1128,209,S2,nYt),l.Ze=function(e,n){var r,s,o,h,d;for(vr(n,o1e,1),je(Re(qe(e,(iI(),A7t))))?je(Re(qe(e,M7t)))||y$((r=new rr((Pm(),new Mm(e))),r)):jce(new Npt,e,Rc(n,1)),o=pre(e),s=Ale(this.a,o),d=s.Kc();d.Ob();)h=u(d.Pb(),231),!(h.e.c.length<=1)&&(_3n(this.b,h),i2n(this.b),xu(h.d,new rd));o=zhe(s),Rhe(o),or(n)},F(nH,"StressLayoutProvider",1128),D(1129,1,Un,rd),l.td=function(e){dxt(u(e,447))},F(nH,"StressLayoutProvider/lambda$0$Type",1129),D(990,1,{},hqt),l.c=0,l.e=0,l.g=0,F(nH,"StressMajorization",990),D(379,22,{3:1,35:1,22:1,379:1},Det);var rlt,ilt,slt,D7t=jr(nH,"StressMajorization/Dimension",379,Hr,Lin,vJe),Obe;D(991,1,Oi,Ci),l.ue=function(e,n){return YZe(this.a,u(e,144),u(n,144))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(nH,"StressMajorization/lambda$0$Type",991),D(1229,1,{},wZt),F(_6,"ElkLayered",1229),D(1230,1,Un,id),l.td=function(e){sbn(u(e,37))},F(_6,"ElkLayered/lambda$0$Type",1230),D(1231,1,Un,hi),l.td=function(e){KZe(this.a,u(e,37))},F(_6,"ElkLayered/lambda$1$Type",1231),D(1263,1,{},HUt);var Pbe,Fbe,Nbe;F(_6,"GraphConfigurator",1263),D(759,1,Un,gs),l.td=function(e){Gae(this.a,u(e,10))},F(_6,"GraphConfigurator/lambda$0$Type",759),D(760,1,{},G5),l.Kb=function(e){return l4t(),new Tn(null,new _n(u(e,29).a,16))},F(_6,"GraphConfigurator/lambda$1$Type",760),D(761,1,Un,qi),l.td=function(e){Gae(this.a,u(e,10))},F(_6,"GraphConfigurator/lambda$2$Type",761),D(1127,209,S2,gqt),l.Ze=function(e,n){var r;r=Wyn(new yqt,e),Vt(qe(e,(Te(),qy)))===Vt((G0(),sp))?Chn(this.a,r,n):xbn(this.a,r,n),Ohe(new WJ,r)},F(_6,"LayeredLayoutProvider",1127),D(356,22,{3:1,35:1,22:1,356:1},_M);var Dd,gb,cu,qc,Io,I7t=jr(_6,"LayeredPhases",356,Hr,fan,mJe),Bbe;D(1651,1,{},nne),l.i=0;var Rbe;F(UI,"ComponentsToCGraphTransformer",1651);var jbe;D(1652,1,{},fw),l.ef=function(e,n){return b.Math.min(e.a!=null?Xt(e.a):e.c.i,n.a!=null?Xt(n.a):n.c.i)},l.ff=function(e,n){return b.Math.min(e.a!=null?Xt(e.a):e.c.i,n.a!=null?Xt(n.a):n.c.i)},F(UI,"ComponentsToCGraphTransformer/1",1652),D(81,1,{81:1}),l.i=0,l.k=!0,l.o=Cs;var alt=F($_,"CNode",81);D(460,81,{460:1,81:1},F2t,N3t),l.Ib=function(){return""},F(UI,"ComponentsToCGraphTransformer/CRectNode",460),D(1623,1,{},U5);var olt,clt;F(UI,"OneDimensionalComponentsCompaction",1623),D(1624,1,{},mp),l.Kb=function(e){return yin(u(e,46))},l.Fb=function(e){return this===e},F(UI,"OneDimensionalComponentsCompaction/lambda$0$Type",1624),D(1625,1,{},W5),l.Kb=function(e){return Ohn(u(e,46))},l.Fb=function(e){return this===e},F(UI,"OneDimensionalComponentsCompaction/lambda$1$Type",1625),D(1654,1,{},dXt),F($_,"CGraph",1654),D(189,1,{189:1},ost),l.b=0,l.c=0,l.e=0,l.g=!0,l.i=Cs,F($_,"CGroup",189),D(1653,1,{},EL),l.ef=function(e,n){return b.Math.max(e.a!=null?Xt(e.a):e.c.i,n.a!=null?Xt(n.a):n.c.i)},l.ff=function(e,n){return b.Math.max(e.a!=null?Xt(e.a):e.c.i,n.a!=null?Xt(n.a):n.c.i)},F($_,Ffe,1653),D(1655,1,{},Uoe),l.d=!1;var $be,ult=F($_,Rfe,1655);D(1656,1,{},vl),l.Kb=function(e){return xbt(),Nn(),u(u(e,46).a,81).d.e!=0},l.Fb=function(e){return this===e},F($_,jfe,1656),D(823,1,{},Gwt),l.a=!1,l.b=!1,l.c=!1,l.d=!1,F($_,$fe,823),D(1825,1,{},DKt),F(rH,zfe,1825);var mO=Ki(L2,Ofe);D(1826,1,{369:1},cQt),l.Ke=function(e){gvn(this,u(e,466))},F(rH,qfe,1826),D(1827,1,Oi,iN),l.ue=function(e,n){return grn(u(e,81),u(n,81))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(rH,Hfe,1827),D(466,1,{466:1},Nbt),l.a=!1,F(rH,Vfe,466),D(1828,1,Oi,Sc),l.ue=function(e,n){return _dn(u(e,466),u(n,466))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(rH,Gfe,1828),D(140,1,{140:1},g8,$wt),l.Fb=function(e){var n;return e==null||c6n!=ol(e)?!1:(n=u(e,140),Fc(this.c,n.c)&&Fc(this.d,n.d))},l.Hb=function(){return Az(lt(ct(Qn,1),De,1,5,[this.c,this.d]))},l.Ib=function(){return"("+this.c+Ya+this.d+(this.a?"cx":"")+this.b+")"},l.a=!0,l.c=0,l.d=0;var c6n=F(L2,"Point",140);D(405,22,{3:1,35:1,22:1,405:1},JR);var Lv,Py,z4,Fy,zbe=jr(L2,"Point/Quadrant",405,Hr,Msn,yJe),qbe;D(1642,1,{},pqt),l.b=null,l.c=null,l.d=null,l.e=null,l.f=null;var Hbe,Vbe,Gbe,Ube,Wbe;F(L2,"RectilinearConvexHull",1642),D(574,1,{369:1},Yz),l.Ke=function(e){don(this,u(e,140))},l.b=0;var O7t;F(L2,"RectilinearConvexHull/MaximalElementsEventHandler",574),D(1644,1,Oi,wm),l.ue=function(e,n){return rrn(ye(e),ye(n))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(L2,"RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type",1644),D(1643,1,{369:1},Cee),l.Ke=function(e){Swn(this,u(e,140))},l.a=0,l.b=null,l.c=null,l.d=null,l.e=null,F(L2,"RectilinearConvexHull/RectangleEventHandler",1643),D(1645,1,Oi,xg),l.ue=function(e,n){return asn(u(e,140),u(n,140))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(L2,"RectilinearConvexHull/lambda$0$Type",1645),D(1646,1,Oi,T3),l.ue=function(e,n){return osn(u(e,140),u(n,140))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(L2,"RectilinearConvexHull/lambda$1$Type",1646),D(1647,1,Oi,cK),l.ue=function(e,n){return usn(u(e,140),u(n,140))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(L2,"RectilinearConvexHull/lambda$2$Type",1647),D(1648,1,Oi,Vb),l.ue=function(e,n){return csn(u(e,140),u(n,140))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(L2,"RectilinearConvexHull/lambda$3$Type",1648),D(1649,1,Oi,uK),l.ue=function(e,n){return hgn(u(e,140),u(n,140))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(L2,"RectilinearConvexHull/lambda$4$Type",1649),D(1650,1,{},jQt),F(L2,"Scanline",1650),D(2005,1,{}),F(Td,"AbstractGraphPlacer",2005),D(325,1,{325:1},DWt),l.mf=function(e){return this.nf(e)?(ln(this.b,u(Q(e,(ae(),By)),21),e),!0):!1},l.nf=function(e){var n,r,s,o;for(n=u(Q(e,(ae(),By)),21),o=u(Ai(Pi,n),21),s=o.Kc();s.Ob();)if(r=u(s.Pb(),21),!u(Ai(this.b,r),15).dc())return!1;return!0};var Pi;F(Td,"ComponentGroup",325),D(765,2005,{},$pt),l.of=function(e){var n,r;for(r=new S(this.a);r.aG&&(ue=0,_e+=H+o,H=0),gt=d.c,x_(d,ue+gt.a,_e+gt.b),Gf(gt),r=b.Math.max(r,ue+St.a),H=b.Math.max(H,St.b),ue+=St.a+o;if(n.f.a=r,n.f.b=_e+H,je(Re(Q(h,iG)))){for(s=new PT,Oxt(s,e,o),j=e.Kc();j.Ob();)M=u(j.Pb(),37),Li(Gf(M.c),s.e);Li(Gf(n.f),s.a)}Omt(n,e)},F(Td,"SimpleRowGraphPlacer",1291),D(1292,1,Oi,Rf),l.ue=function(e,n){return uun(u(e,37),u(n,37))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(Td,"SimpleRowGraphPlacer/1",1292);var Kbe;D(1262,1,xd,vm),l.Lb=function(e){var n;return n=u(Q(u(e,243).b,(Te(),So)),74),!!n&&n.b!=0},l.Fb=function(e){return this===e},l.Mb=function(e){var n;return n=u(Q(u(e,243).b,(Te(),So)),74),!!n&&n.b!=0},F(iH,"CompoundGraphPostprocessor/1",1262),D(1261,1,os,xqt),l.pf=function(e,n){yse(this,u(e,37),n)},F(iH,"CompoundGraphPreprocessor",1261),D(441,1,{441:1},oie),l.c=!1,F(iH,"CompoundGraphPreprocessor/ExternalPort",441),D(243,1,{243:1},Fj),l.Ib=function(){return bnt(this.c)+":"+qoe(this.b)},F(iH,"CrossHierarchyEdge",243),D(763,1,Oi,Si),l.ue=function(e,n){return Z1n(this,u(e,243),u(n,243))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(iH,"CrossHierarchyEdgeComparator",763),D(299,134,{3:1,299:1,94:1,134:1}),l.p=0,F(tu,"LGraphElement",299),D(17,299,{3:1,17:1,299:1,94:1,134:1},Vw),l.Ib=function(){return qoe(this)};var hlt=F(tu,"LEdge",17);D(37,299,{3:1,20:1,37:1,299:1,94:1,134:1},eyt),l.Jc=function(e){va(this,e)},l.Kc=function(){return new S(this.b)},l.Ib=function(){return this.b.c.length==0?"G-unlayered"+eb(this.a):this.a.c.length==0?"G-layered"+eb(this.b):"G[layerless"+eb(this.a)+", layers"+eb(this.b)+"]"};var Xbe=F(tu,"LGraph",37),Qbe;D(657,1,{}),l.qf=function(){return this.e.n},l.We=function(e){return Q(this.e,e)},l.rf=function(){return this.e.o},l.sf=function(){return this.e.p},l.Xe=function(e){return Us(this.e,e)},l.tf=function(e){this.e.n.a=e.a,this.e.n.b=e.b},l.uf=function(e){this.e.o.a=e.a,this.e.o.b=e.b},l.vf=function(e){this.e.p=e},F(tu,"LGraphAdapters/AbstractLShapeAdapter",657),D(577,1,{839:1},Ui),l.wf=function(){var e,n;if(!this.b)for(this.b=Ud(this.a.b.c.length),n=new S(this.a.b);n.a0&&Wre((Rr(n-1,e.length),e.charCodeAt(n-1)),d1e);)--n;if(h> ",e),iq(r)),Gr(hc((e.a+="[",e),r.i),"]")),e.a},l.c=!0,l.d=!1;var R7t,j7t,$7t,z7t,q7t,H7t,Jbe=F(tu,"LPort",11);D(397,1,r0,Qs),l.Jc=function(e){va(this,e)},l.Kc=function(){var e;return e=new S(this.a.e),new qs(e)},F(tu,"LPort/1",397),D(1290,1,sa,qs),l.Nb=function(e){ba(this,e)},l.Pb=function(){return u(J(this.a),17).c},l.Ob=function(){return Go(this.a)},l.Qb=function(){L9(this.a)},F(tu,"LPort/1/1",1290),D(359,1,r0,Tr),l.Jc=function(e){va(this,e)},l.Kc=function(){var e;return e=new S(this.a.g),new Qt(e)},F(tu,"LPort/2",359),D(762,1,sa,Qt),l.Nb=function(e){ba(this,e)},l.Pb=function(){return u(J(this.a),17).d},l.Ob=function(){return Go(this.a)},l.Qb=function(){L9(this.a)},F(tu,"LPort/2/1",762),D(1283,1,r0,cGt),l.Jc=function(e){va(this,e)},l.Kc=function(){return new L1(this)},F(tu,"LPort/CombineIter",1283),D(201,1,sa,L1),l.Nb=function(e){ba(this,e)},l.Qb=function(){IHt()},l.Ob=function(){return v9(this)},l.Pb=function(){return Go(this.a)?J(this.a):J(this.b)},F(tu,"LPort/CombineIter/1",201),D(1285,1,xd,yp),l.Lb=function(e){return HKt(e)},l.Fb=function(e){return this===e},l.Mb=function(e){return ju(),u(e,11).e.c.length!=0},F(tu,"LPort/lambda$0$Type",1285),D(1284,1,xd,mm),l.Lb=function(e){return VKt(e)},l.Fb=function(e){return this===e},l.Mb=function(e){return ju(),u(e,11).g.c.length!=0},F(tu,"LPort/lambda$1$Type",1284),D(1286,1,xd,hK),l.Lb=function(e){return ju(),u(e,11).j==(ve(),Pn)},l.Fb=function(e){return this===e},l.Mb=function(e){return ju(),u(e,11).j==(ve(),Pn)},F(tu,"LPort/lambda$2$Type",1286),D(1287,1,xd,Gb),l.Lb=function(e){return ju(),u(e,11).j==(ve(),Hn)},l.Fb=function(e){return this===e},l.Mb=function(e){return ju(),u(e,11).j==(ve(),Hn)},F(tu,"LPort/lambda$3$Type",1287),D(1288,1,xd,fK),l.Lb=function(e){return ju(),u(e,11).j==(ve(),mr)},l.Fb=function(e){return this===e},l.Mb=function(e){return ju(),u(e,11).j==(ve(),mr)},F(tu,"LPort/lambda$4$Type",1288),D(1289,1,xd,dK),l.Lb=function(e){return ju(),u(e,11).j==(ve(),Bn)},l.Fb=function(e){return this===e},l.Mb=function(e){return ju(),u(e,11).j==(ve(),Bn)},F(tu,"LPort/lambda$5$Type",1289),D(29,299,{3:1,20:1,299:1,29:1,94:1,134:1},Sh),l.Jc=function(e){va(this,e)},l.Kc=function(){return new S(this.a)},l.Ib=function(){return"L_"+Ro(this.b.b,this,0)+eb(this.a)},F(tu,"Layer",29),D(1342,1,{},yqt),F(Kg,w1e,1342),D(1346,1,{},Y5),l.Kb=function(e){return Do(u(e,82))},F(Kg,"ElkGraphImporter/0methodref$connectableShapeToNode$Type",1346),D(1349,1,{},FT),l.Kb=function(e){return Do(u(e,82))},F(Kg,"ElkGraphImporter/1methodref$connectableShapeToNode$Type",1349),D(1343,1,Un,jn),l.td=function(e){nce(this.a,u(e,118))},F(Kg,v1e,1343),D(1344,1,Un,Sr),l.td=function(e){nce(this.a,u(e,118))},F(Kg,m1e,1344),D(1345,1,{},oN),l.Kb=function(e){return new Tn(null,new _n(Znn(u(e,79)),16))},F(Kg,y1e,1345),D(1347,1,li,ir),l.Mb=function(e){return JXe(this.a,u(e,33))},F(Kg,x1e,1347),D(1348,1,{},Tk),l.Kb=function(e){return new Tn(null,new _n(Jnn(u(e,79)),16))},F(Kg,"ElkGraphImporter/lambda$5$Type",1348),D(1350,1,li,sr),l.Mb=function(e){return tQe(this.a,u(e,33))},F(Kg,"ElkGraphImporter/lambda$7$Type",1350),D(1351,1,li,gK),l.Mb=function(e){return brn(u(e,79))},F(Kg,"ElkGraphImporter/lambda$8$Type",1351),D(1278,1,{},WJ);var t2e;F(Kg,"ElkGraphLayoutTransferrer",1278),D(1279,1,li,Ia),l.Mb=function(e){return qZe(this.a,u(e,17))},F(Kg,"ElkGraphLayoutTransferrer/lambda$0$Type",1279),D(1280,1,Un,$r),l.td=function(e){kM(),le(this.a,u(e,17))},F(Kg,"ElkGraphLayoutTransferrer/lambda$1$Type",1280),D(1281,1,li,Yi),l.Mb=function(e){return SZe(this.a,u(e,17))},F(Kg,"ElkGraphLayoutTransferrer/lambda$2$Type",1281),D(1282,1,Un,Fo),l.td=function(e){kM(),le(this.a,u(e,17))},F(Kg,"ElkGraphLayoutTransferrer/lambda$3$Type",1282),D(1485,1,os,Ck),l.pf=function(e,n){Lcn(u(e,37),n)},F($n,"CommentNodeMarginCalculator",1485),D(1486,1,{},pK),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},F($n,"CommentNodeMarginCalculator/lambda$0$Type",1486),D(1487,1,Un,bK),l.td=function(e){u3n(u(e,10))},F($n,"CommentNodeMarginCalculator/lambda$1$Type",1487),D(1488,1,os,wK),l.pf=function(e,n){kvn(u(e,37),n)},F($n,"CommentPostprocessor",1488),D(1489,1,os,vK),l.pf=function(e,n){L5n(u(e,37),n)},F($n,"CommentPreprocessor",1489),D(1490,1,os,mK),l.pf=function(e,n){G2n(u(e,37),n)},F($n,"ConstraintsPostprocessor",1490),D(1491,1,os,yK),l.pf=function(e,n){Zcn(u(e,37),n)},F($n,"EdgeAndLayerConstraintEdgeReverser",1491),D(1492,1,os,xK),l.pf=function(e,n){$hn(u(e,37),n)},F($n,"EndLabelPostprocessor",1492),D(1493,1,{},kK),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},F($n,"EndLabelPostprocessor/lambda$0$Type",1493),D(1494,1,li,EK),l.Mb=function(e){return Prn(u(e,10))},F($n,"EndLabelPostprocessor/lambda$1$Type",1494),D(1495,1,Un,TK),l.td=function(e){Sdn(u(e,10))},F($n,"EndLabelPostprocessor/lambda$2$Type",1495),D(1496,1,os,CK),l.pf=function(e,n){bpn(u(e,37),n)},F($n,"EndLabelPreprocessor",1496),D(1497,1,{},CL),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},F($n,"EndLabelPreprocessor/lambda$0$Type",1497),D(1498,1,Un,PYt),l.td=function(e){bXe(this.a,this.b,this.c,u(e,10))},l.a=0,l.b=0,l.c=!1,F($n,"EndLabelPreprocessor/lambda$1$Type",1498),D(1499,1,li,_K),l.Mb=function(e){return Vt(Q(u(e,70),(Te(),Od)))===Vt((M1(),F7))},F($n,"EndLabelPreprocessor/lambda$2$Type",1499),D(1500,1,Un,Pc),l.td=function(e){ri(this.a,u(e,70))},F($n,"EndLabelPreprocessor/lambda$3$Type",1500),D(1501,1,li,SK),l.Mb=function(e){return Vt(Q(u(e,70),(Te(),Od)))===Vt((M1(),Zy))},F($n,"EndLabelPreprocessor/lambda$4$Type",1501),D(1502,1,Un,Za),l.td=function(e){ri(this.a,u(e,70))},F($n,"EndLabelPreprocessor/lambda$5$Type",1502),D(1551,1,os,UJ),l.pf=function(e,n){Yln(u(e,37),n)};var e2e;F($n,"EndLabelSorter",1551),D(1552,1,Oi,NT),l.ue=function(e,n){return Tfn(u(e,456),u(n,456))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F($n,"EndLabelSorter/1",1552),D(456,1,{456:1},tQt),F($n,"EndLabelSorter/LabelGroup",456),D(1553,1,{},cN),l.Kb=function(e){return EM(),new Tn(null,new _n(u(e,29).a,16))},F($n,"EndLabelSorter/lambda$0$Type",1553),D(1554,1,li,K5),l.Mb=function(e){return EM(),u(e,10).k==(Vn(),Os)},F($n,"EndLabelSorter/lambda$1$Type",1554),D(1555,1,Un,AK),l.td=function(e){Sgn(u(e,10))},F($n,"EndLabelSorter/lambda$2$Type",1555),D(1556,1,li,LK),l.Mb=function(e){return EM(),Vt(Q(u(e,70),(Te(),Od)))===Vt((M1(),Zy))},F($n,"EndLabelSorter/lambda$3$Type",1556),D(1557,1,li,MK),l.Mb=function(e){return EM(),Vt(Q(u(e,70),(Te(),Od)))===Vt((M1(),F7))},F($n,"EndLabelSorter/lambda$4$Type",1557),D(1503,1,os,DK),l.pf=function(e,n){y3n(this,u(e,37))},l.b=0,l.c=0,F($n,"FinalSplineBendpointsCalculator",1503),D(1504,1,{},IK),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},F($n,"FinalSplineBendpointsCalculator/lambda$0$Type",1504),D(1505,1,{},BT),l.Kb=function(e){return new Tn(null,new jw(new ar(lr(Ds(u(e,10)).a.Kc(),new z))))},F($n,"FinalSplineBendpointsCalculator/lambda$1$Type",1505),D(1506,1,li,_L),l.Mb=function(e){return!Ga(u(e,17))},F($n,"FinalSplineBendpointsCalculator/lambda$2$Type",1506),D(1507,1,li,uN),l.Mb=function(e){return Us(u(e,17),(ae(),R2))},F($n,"FinalSplineBendpointsCalculator/lambda$3$Type",1507),D(1508,1,Un,mc),l.td=function(e){Omn(this.a,u(e,128))},F($n,"FinalSplineBendpointsCalculator/lambda$4$Type",1508),D(1509,1,Un,C3),l.td=function(e){Yst(u(e,17).a)},F($n,"FinalSplineBendpointsCalculator/lambda$5$Type",1509),D(792,1,os,Ta),l.pf=function(e,n){d4n(this,u(e,37),n)},F($n,"GraphTransformer",792),D(511,22,{3:1,35:1,22:1,511:1},Fbt);var dlt,yO,n2e=jr($n,"GraphTransformer/Mode",511,Hr,nin,Ptn),r2e;D(1510,1,os,_3),l.pf=function(e,n){Hwn(u(e,37),n)},F($n,"HierarchicalNodeResizingProcessor",1510),D(1511,1,os,OK),l.pf=function(e,n){Tcn(u(e,37),n)},F($n,"HierarchicalPortConstraintProcessor",1511),D(1512,1,Oi,of),l.ue=function(e,n){return Ffn(u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F($n,"HierarchicalPortConstraintProcessor/NodeComparator",1512),D(1513,1,os,X5),l.pf=function(e,n){Vyn(u(e,37),n)},F($n,"HierarchicalPortDummySizeProcessor",1513),D(1514,1,os,PK),l.pf=function(e,n){zvn(this,u(e,37),n)},l.a=0,F($n,"HierarchicalPortOrthogonalEdgeRouter",1514),D(1515,1,Oi,_k),l.ue=function(e,n){return UQe(u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F($n,"HierarchicalPortOrthogonalEdgeRouter/1",1515),D(1516,1,Oi,zd),l.ue=function(e,n){return aon(u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F($n,"HierarchicalPortOrthogonalEdgeRouter/2",1516),D(1517,1,os,FK),l.pf=function(e,n){fgn(u(e,37),n)},F($n,"HierarchicalPortPositionProcessor",1517),D(1518,1,os,YJ),l.pf=function(e,n){oxn(this,u(e,37))},l.a=0,l.c=0;var mV,yV;F($n,"HighDegreeNodeLayeringProcessor",1518),D(571,1,{571:1},NK),l.b=-1,l.d=-1,F($n,"HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation",571),D(1519,1,{},BK),l.Kb=function(e){return KM(),jo(u(e,10))},l.Fb=function(e){return this===e},F($n,"HighDegreeNodeLayeringProcessor/lambda$0$Type",1519),D(1520,1,{},RK),l.Kb=function(e){return KM(),Ds(u(e,10))},l.Fb=function(e){return this===e},F($n,"HighDegreeNodeLayeringProcessor/lambda$1$Type",1520),D(1526,1,os,RT),l.pf=function(e,n){vyn(this,u(e,37),n)},F($n,"HyperedgeDummyMerger",1526),D(793,1,{},Cwt),l.a=!1,l.b=!1,l.c=!1,F($n,"HyperedgeDummyMerger/MergeState",793),D(1527,1,{},SL),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},F($n,"HyperedgeDummyMerger/lambda$0$Type",1527),D(1528,1,{},lN),l.Kb=function(e){return new Tn(null,new _n(u(e,10).j,16))},F($n,"HyperedgeDummyMerger/lambda$1$Type",1528),D(1529,1,Un,AL),l.td=function(e){u(e,11).p=-1},F($n,"HyperedgeDummyMerger/lambda$2$Type",1529),D(1530,1,os,Q5),l.pf=function(e,n){byn(u(e,37),n)},F($n,"HypernodesProcessor",1530),D(1531,1,os,jK),l.pf=function(e,n){wyn(u(e,37),n)},F($n,"InLayerConstraintProcessor",1531),D(1532,1,os,hN),l.pf=function(e,n){Wcn(u(e,37),n)},F($n,"InnermostNodeMarginCalculator",1532),D(1533,1,os,fN),l.pf=function(e,n){T5n(this,u(e,37))},l.a=Cs,l.b=Cs,l.c=as,l.d=as;var u6n=F($n,"InteractiveExternalPortPositioner",1533);D(1534,1,{},$K),l.Kb=function(e){return u(e,17).d.i},l.Fb=function(e){return this===e},F($n,"InteractiveExternalPortPositioner/lambda$0$Type",1534),D(1535,1,{},Ja),l.Kb=function(e){return KQe(this.a,ye(e))},l.Fb=function(e){return this===e},F($n,"InteractiveExternalPortPositioner/lambda$1$Type",1535),D(1536,1,{},zK),l.Kb=function(e){return u(e,17).c.i},l.Fb=function(e){return this===e},F($n,"InteractiveExternalPortPositioner/lambda$2$Type",1536),D(1537,1,{},ml),l.Kb=function(e){return XQe(this.a,ye(e))},l.Fb=function(e){return this===e},F($n,"InteractiveExternalPortPositioner/lambda$3$Type",1537),D(1538,1,{},qf),l.Kb=function(e){return jZe(this.a,ye(e))},l.Fb=function(e){return this===e},F($n,"InteractiveExternalPortPositioner/lambda$4$Type",1538),D(1539,1,{},Cp),l.Kb=function(e){return $Ze(this.a,ye(e))},l.Fb=function(e){return this===e},F($n,"InteractiveExternalPortPositioner/lambda$5$Type",1539),D(77,22,{3:1,35:1,22:1,77:1,234:1},ms),l.Kf=function(){switch(this.g){case 15:return new rQ;case 22:return new iQ;case 47:return new oQ;case 28:case 35:return new S3;case 32:return new Ck;case 42:return new wK;case 1:return new vK;case 41:return new mK;case 56:return new Ta((X8(),yO));case 0:return new Ta((X8(),dlt));case 2:return new yK;case 54:return new xK;case 33:return new CK;case 51:return new DK;case 55:return new _3;case 13:return new OK;case 38:return new X5;case 44:return new PK;case 40:return new FK;case 9:return new YJ;case 49:return new yWt;case 37:return new RT;case 43:return new Q5;case 27:return new jK;case 30:return new hN;case 3:return new fN;case 18:return new HK;case 29:return new VK;case 5:return new zB;case 50:return new qK;case 34:return new KJ;case 36:return new Sk;case 52:return new UJ;case 11:return new ym;case 7:return new QJ;case 39:return new Ak;case 45:return new YK;case 16:return new jT;case 10:return new sd;case 48:return new ML;case 21:return new Lk;case 23:return new det((ev(),FS));case 8:return new bN;case 12:return new IL;case 4:return new XK;case 19:return new wC;case 17:return new eX;case 53:return new nX;case 6:return new EN;case 25:return new Tqt;case 46:return new aX;case 31:return new iYt;case 14:return new PL;case 26:return new lQ;case 20:return new gX;case 24:return new det((ev(),TG));default:throw it(new Fn(Yot+(this.f!=null?this.f:""+this.g)))}};var V7t,G7t,U7t,W7t,Y7t,K7t,X7t,Q7t,Z7t,J7t,gS,xV,kV,tTt,eTt,nTt,rTt,iTt,sTt,aTt,pS,oTt,cTt,uTt,lTt,hTt,glt,EV,TV,fTt,CV,_V,SV,u7,l7,h7,dTt,AV,LV,gTt,MV,DV,pTt,bTt,wTt,vTt,IV,plt,xO,OV,PV,FV,NV,mTt,yTt,xTt,kTt,l6n=jr($n,T6t,77,Hr,Yce,Otn),i2e;D(1540,1,os,HK),l.pf=function(e,n){_5n(u(e,37),n)},F($n,"InvertedPortProcessor",1540),D(1541,1,os,VK),l.pf=function(e,n){_mn(u(e,37),n)},F($n,"LabelAndNodeSizeProcessor",1541),D(1542,1,li,GK),l.Mb=function(e){return u(e,10).k==(Vn(),Os)},F($n,"LabelAndNodeSizeProcessor/lambda$0$Type",1542),D(1543,1,li,qd),l.Mb=function(e){return u(e,10).k==(Vn(),ks)},F($n,"LabelAndNodeSizeProcessor/lambda$1$Type",1543),D(1544,1,Un,FYt),l.td=function(e){wXe(this.b,this.a,this.c,u(e,10))},l.a=!1,l.c=!1,F($n,"LabelAndNodeSizeProcessor/lambda$2$Type",1544),D(1545,1,os,zB),l.pf=function(e,n){X4n(u(e,37),n)};var s2e;F($n,"LabelDummyInserter",1545),D(1546,1,xd,dw),l.Lb=function(e){return Vt(Q(u(e,70),(Te(),Od)))===Vt((M1(),P7))},l.Fb=function(e){return this===e},l.Mb=function(e){return Vt(Q(u(e,70),(Te(),Od)))===Vt((M1(),P7))},F($n,"LabelDummyInserter/1",1546),D(1547,1,os,qK),l.pf=function(e,n){Z3n(u(e,37),n)},F($n,"LabelDummyRemover",1547),D(1548,1,li,UK),l.Mb=function(e){return je(Re(Q(u(e,70),(Te(),rht))))},F($n,"LabelDummyRemover/lambda$0$Type",1548),D(1359,1,os,KJ),l.pf=function(e,n){S4n(this,u(e,37),n)},l.a=null;var blt;F($n,"LabelDummySwitcher",1359),D(286,1,{286:1},Uue),l.c=0,l.d=null,l.f=0,F($n,"LabelDummySwitcher/LabelDummyInfo",286),D(1360,1,{},dN),l.Kb=function(e){return r6(),new Tn(null,new _n(u(e,29).a,16))},F($n,"LabelDummySwitcher/lambda$0$Type",1360),D(1361,1,li,gN),l.Mb=function(e){return r6(),u(e,10).k==(Vn(),Ll)},F($n,"LabelDummySwitcher/lambda$1$Type",1361),D(1362,1,{},_g),l.Kb=function(e){return AZe(this.a,u(e,10))},F($n,"LabelDummySwitcher/lambda$2$Type",1362),D(1363,1,Un,cd),l.td=function(e){Snn(this.a,u(e,286))},F($n,"LabelDummySwitcher/lambda$3$Type",1363),D(1364,1,Oi,WK),l.ue=function(e,n){return enn(u(e,286),u(n,286))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F($n,"LabelDummySwitcher/lambda$4$Type",1364),D(791,1,os,S3),l.pf=function(e,n){Ran(u(e,37),n)},F($n,"LabelManagementProcessor",791),D(1549,1,os,Sk),l.pf=function(e,n){uvn(u(e,37),n)},F($n,"LabelSideSelector",1549),D(1550,1,li,LL),l.Mb=function(e){return je(Re(Q(u(e,70),(Te(),rht))))},F($n,"LabelSideSelector/lambda$0$Type",1550),D(1558,1,os,ym),l.pf=function(e,n){Gyn(u(e,37),n)},F($n,"LayerConstraintPostprocessor",1558),D(1559,1,os,QJ),l.pf=function(e,n){s2n(u(e,37),n)};var ETt;F($n,"LayerConstraintPreprocessor",1559),D(360,22,{3:1,35:1,22:1,360:1},tj);var kO,BV,RV,wlt,a2e=jr($n,"LayerConstraintPreprocessor/HiddenNodeConnections",360,Hr,Dsn,TJe),o2e;D(1560,1,os,Ak),l.pf=function(e,n){K3n(u(e,37),n)},F($n,"LayerSizeAndGraphHeightCalculator",1560),D(1561,1,os,YK),l.pf=function(e,n){Z2n(u(e,37),n)},F($n,"LongEdgeJoiner",1561),D(1562,1,os,jT),l.pf=function(e,n){M3n(u(e,37),n)},F($n,"LongEdgeSplitter",1562),D(1563,1,os,sd),l.pf=function(e,n){M4n(this,u(e,37),n)},l.d=0,l.e=0,l.i=0,l.j=0,l.k=0,l.n=0,F($n,"NodePromotion",1563),D(1564,1,{},pN),l.Kb=function(e){return u(e,46),Nn(),!0},l.Fb=function(e){return this===e},F($n,"NodePromotion/lambda$0$Type",1564),D(1565,1,{},_p),l.Kb=function(e){return Ynn(this.a,u(e,46))},l.Fb=function(e){return this===e},l.a=0,F($n,"NodePromotion/lambda$1$Type",1565),D(1566,1,{},Hf),l.Kb=function(e){return Knn(this.a,u(e,46))},l.Fb=function(e){return this===e},l.a=0,F($n,"NodePromotion/lambda$2$Type",1566),D(1567,1,os,ML),l.pf=function(e,n){txn(u(e,37),n)},F($n,"NorthSouthPortPostprocessor",1567),D(1568,1,os,Lk),l.pf=function(e,n){j5n(u(e,37),n)},F($n,"NorthSouthPortPreprocessor",1568),D(1569,1,Oi,DL),l.ue=function(e,n){return gun(u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F($n,"NorthSouthPortPreprocessor/lambda$0$Type",1569),D(1570,1,os,bN),l.pf=function(e,n){nyn(u(e,37),n)},F($n,"PartitionMidprocessor",1570),D(1571,1,li,KK),l.Mb=function(e){return Us(u(e,10),(Te(),T7))},F($n,"PartitionMidprocessor/lambda$0$Type",1571),D(1572,1,Un,mw),l.td=function(e){wrn(this.a,u(e,10))},F($n,"PartitionMidprocessor/lambda$1$Type",1572),D(1573,1,os,IL),l.pf=function(e,n){vwn(u(e,37),n)},F($n,"PartitionPostprocessor",1573),D(1574,1,os,XK),l.pf=function(e,n){Abn(u(e,37),n)},F($n,"PartitionPreprocessor",1574),D(1575,1,li,QK),l.Mb=function(e){return Us(u(e,10),(Te(),T7))},F($n,"PartitionPreprocessor/lambda$0$Type",1575),D(1576,1,{},wN),l.Kb=function(e){return new Tn(null,new jw(new ar(lr(Ds(u(e,10)).a.Kc(),new z))))},F($n,"PartitionPreprocessor/lambda$1$Type",1576),D(1577,1,li,Z5),l.Mb=function(e){return xfn(u(e,17))},F($n,"PartitionPreprocessor/lambda$2$Type",1577),D(1578,1,Un,vN),l.td=function(e){Tun(u(e,17))},F($n,"PartitionPreprocessor/lambda$3$Type",1578),D(1579,1,os,wC),l.pf=function(e,n){$mn(u(e,37),n)};var TTt,c2e,u2e,l2e,CTt,_Tt;F($n,"PortListSorter",1579),D(1580,1,{},J5),l.Kb=function(e){return oE(),u(e,11).e},F($n,"PortListSorter/lambda$0$Type",1580),D(1581,1,{},ZK),l.Kb=function(e){return oE(),u(e,11).g},F($n,"PortListSorter/lambda$1$Type",1581),D(1582,1,Oi,OL),l.ue=function(e,n){return aJt(u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F($n,"PortListSorter/lambda$2$Type",1582),D(1583,1,Oi,JK),l.ue=function(e,n){return G1n(u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F($n,"PortListSorter/lambda$3$Type",1583),D(1584,1,Oi,tX),l.ue=function(e,n){return ple(u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F($n,"PortListSorter/lambda$4$Type",1584),D(1585,1,os,eX),l.pf=function(e,n){Jbn(u(e,37),n)},F($n,"PortSideProcessor",1585),D(1586,1,os,nX),l.pf=function(e,n){tmn(u(e,37),n)},F($n,"ReversedEdgeRestorer",1586),D(1591,1,os,Tqt),l.pf=function(e,n){L1n(this,u(e,37),n)},F($n,"SelfLoopPortRestorer",1591),D(1592,1,{},mN),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},F($n,"SelfLoopPortRestorer/lambda$0$Type",1592),D(1593,1,li,rX),l.Mb=function(e){return u(e,10).k==(Vn(),Os)},F($n,"SelfLoopPortRestorer/lambda$1$Type",1593),D(1594,1,li,iX),l.Mb=function(e){return Us(u(e,10),(ae(),x7))},F($n,"SelfLoopPortRestorer/lambda$2$Type",1594),D(1595,1,{},sX),l.Kb=function(e){return u(Q(u(e,10),(ae(),x7)),403)},F($n,"SelfLoopPortRestorer/lambda$3$Type",1595),D(1596,1,Un,Lm),l.td=function(e){Rgn(this.a,u(e,403))},F($n,"SelfLoopPortRestorer/lambda$4$Type",1596),D(794,1,Un,yN),l.td=function(e){Jgn(u(e,101))},F($n,"SelfLoopPortRestorer/lambda$5$Type",794),D(1597,1,os,aX),l.pf=function(e,n){Rfn(u(e,37),n)},F($n,"SelfLoopPostProcessor",1597),D(1598,1,{},oX),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},F($n,"SelfLoopPostProcessor/lambda$0$Type",1598),D(1599,1,li,cX),l.Mb=function(e){return u(e,10).k==(Vn(),Os)},F($n,"SelfLoopPostProcessor/lambda$1$Type",1599),D(1600,1,li,xN),l.Mb=function(e){return Us(u(e,10),(ae(),x7))},F($n,"SelfLoopPostProcessor/lambda$2$Type",1600),D(1601,1,Un,uX),l.td=function(e){Gdn(u(e,10))},F($n,"SelfLoopPostProcessor/lambda$3$Type",1601),D(1602,1,{},lX),l.Kb=function(e){return new Tn(null,new _n(u(e,101).f,1))},F($n,"SelfLoopPostProcessor/lambda$4$Type",1602),D(1603,1,Un,xx),l.td=function(e){Psn(this.a,u(e,409))},F($n,"SelfLoopPostProcessor/lambda$5$Type",1603),D(1604,1,li,kN),l.Mb=function(e){return!!u(e,101).i},F($n,"SelfLoopPostProcessor/lambda$6$Type",1604),D(1605,1,Un,F3),l.td=function(e){vKe(this.a,u(e,101))},F($n,"SelfLoopPostProcessor/lambda$7$Type",1605),D(1587,1,os,EN),l.pf=function(e,n){D2n(u(e,37),n)},F($n,"SelfLoopPreProcessor",1587),D(1588,1,{},TN),l.Kb=function(e){return new Tn(null,new _n(u(e,101).f,1))},F($n,"SelfLoopPreProcessor/lambda$0$Type",1588),D(1589,1,{},hX),l.Kb=function(e){return u(e,409).a},F($n,"SelfLoopPreProcessor/lambda$1$Type",1589),D(1590,1,Un,fX),l.td=function(e){EQe(u(e,17))},F($n,"SelfLoopPreProcessor/lambda$2$Type",1590),D(1606,1,os,iYt),l.pf=function(e,n){Agn(this,u(e,37),n)},F($n,"SelfLoopRouter",1606),D(1607,1,{},Mk),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},F($n,"SelfLoopRouter/lambda$0$Type",1607),D(1608,1,li,tx),l.Mb=function(e){return u(e,10).k==(Vn(),Os)},F($n,"SelfLoopRouter/lambda$1$Type",1608),D(1609,1,li,$T),l.Mb=function(e){return Us(u(e,10),(ae(),x7))},F($n,"SelfLoopRouter/lambda$2$Type",1609),D(1610,1,{},dX),l.Kb=function(e){return u(Q(u(e,10),(ae(),x7)),403)},F($n,"SelfLoopRouter/lambda$3$Type",1610),D(1611,1,Un,tGt),l.td=function(e){crn(this.a,this.b,u(e,403))},F($n,"SelfLoopRouter/lambda$4$Type",1611),D(1612,1,os,PL),l.pf=function(e,n){Qwn(u(e,37),n)},F($n,"SemiInteractiveCrossMinProcessor",1612),D(1613,1,li,zT),l.Mb=function(e){return u(e,10).k==(Vn(),Os)},F($n,"SemiInteractiveCrossMinProcessor/lambda$0$Type",1613),D(1614,1,li,FL),l.Mb=function(e){return yKt(u(e,10))._b((Te(),Uy))},F($n,"SemiInteractiveCrossMinProcessor/lambda$1$Type",1614),D(1615,1,Oi,CN),l.ue=function(e,n){return _cn(u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F($n,"SemiInteractiveCrossMinProcessor/lambda$2$Type",1615),D(1616,1,{},_N),l.Ce=function(e,n){return Crn(u(e,10),u(n,10))},F($n,"SemiInteractiveCrossMinProcessor/lambda$3$Type",1616),D(1618,1,os,gX),l.pf=function(e,n){Uyn(u(e,37),n)},F($n,"SortByInputModelProcessor",1618),D(1619,1,li,pX),l.Mb=function(e){return u(e,11).g.c.length!=0},F($n,"SortByInputModelProcessor/lambda$0$Type",1619),D(1620,1,Un,kx),l.td=function(e){ipn(this.a,u(e,11))},F($n,"SortByInputModelProcessor/lambda$1$Type",1620),D(1693,803,{},pne),l.Me=function(e){var n,r,s,o;switch(this.c=e,this.a.g){case 2:n=new he,ls(Ri(new Tn(null,new _n(this.c.a.b,16)),new MN),new sGt(this,n)),hI(this,new AN),xu(n,new wX),n.c=Nt(Qn,De,1,0,5,1),ls(Ri(new Tn(null,new _n(this.c.a.b,16)),new vX),new N3(n)),hI(this,new mX),xu(n,new yX),n.c=Nt(Qn,De,1,0,5,1),r=RUt(Ane(l$(new Tn(null,new _n(this.c.a.b,16)),new Hd(this))),new xX),ls(new Tn(null,new _n(this.c.a.a,16)),new nGt(r,n)),hI(this,new kX),xu(n,new bX),n.c=Nt(Qn,De,1,0,5,1);break;case 3:s=new he,hI(this,new SN),o=RUt(Ane(l$(new Tn(null,new _n(this.c.a.b,16)),new SC(this))),new LN),ls(Ri(new Tn(null,new _n(this.c.a.b,16)),new EX),new iGt(o,s)),hI(this,new TX),xu(s,new CX),s.c=Nt(Qn,De,1,0,5,1);break;default:throw it(new uqt)}},l.b=0,F(_s,"EdgeAwareScanlineConstraintCalculation",1693),D(1694,1,xd,SN),l.Lb=function(e){return _t(u(e,57).g,145)},l.Fb=function(e){return this===e},l.Mb=function(e){return _t(u(e,57).g,145)},F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$0$Type",1694),D(1695,1,{},SC),l.Fe=function(e){return Bpn(this.a,u(e,57))},F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$1$Type",1695),D(1703,1,Vq,eGt),l.Vd=function(){h_(this.a,this.b,-1)},l.b=0,F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$10$Type",1703),D(1705,1,xd,AN),l.Lb=function(e){return _t(u(e,57).g,145)},l.Fb=function(e){return this===e},l.Mb=function(e){return _t(u(e,57).g,145)},F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$11$Type",1705),D(1706,1,Un,wX),l.td=function(e){u(e,365).Vd()},F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$12$Type",1706),D(1707,1,li,vX),l.Mb=function(e){return _t(u(e,57).g,10)},F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$13$Type",1707),D(1709,1,Un,N3),l.td=function(e){lhn(this.a,u(e,57))},F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$14$Type",1709),D(1708,1,Vq,uGt),l.Vd=function(){h_(this.b,this.a,-1)},l.a=0,F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$15$Type",1708),D(1710,1,xd,mX),l.Lb=function(e){return _t(u(e,57).g,10)},l.Fb=function(e){return this===e},l.Mb=function(e){return _t(u(e,57).g,10)},F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$16$Type",1710),D(1711,1,Un,yX),l.td=function(e){u(e,365).Vd()},F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$17$Type",1711),D(1712,1,{},Hd),l.Fe=function(e){return Rpn(this.a,u(e,57))},F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$18$Type",1712),D(1713,1,{},xX),l.De=function(){return 0},F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$19$Type",1713),D(1696,1,{},LN),l.De=function(){return 0},F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$2$Type",1696),D(1715,1,Un,nGt),l.td=function(e){Gen(this.a,this.b,u(e,307))},l.a=0,F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$20$Type",1715),D(1714,1,Vq,rGt),l.Vd=function(){Cce(this.a,this.b,-1)},l.b=0,F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$21$Type",1714),D(1716,1,xd,kX),l.Lb=function(e){return u(e,57),!0},l.Fb=function(e){return this===e},l.Mb=function(e){return u(e,57),!0},F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$22$Type",1716),D(1717,1,Un,bX),l.td=function(e){u(e,365).Vd()},F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$23$Type",1717),D(1697,1,li,EX),l.Mb=function(e){return _t(u(e,57).g,10)},F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$3$Type",1697),D(1699,1,Un,iGt),l.td=function(e){Uen(this.a,this.b,u(e,57))},l.a=0,F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$4$Type",1699),D(1698,1,Vq,lGt),l.Vd=function(){h_(this.b,this.a,-1)},l.a=0,F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$5$Type",1698),D(1700,1,xd,TX),l.Lb=function(e){return u(e,57),!0},l.Fb=function(e){return this===e},l.Mb=function(e){return u(e,57),!0},F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$6$Type",1700),D(1701,1,Un,CX),l.td=function(e){u(e,365).Vd()},F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$7$Type",1701),D(1702,1,li,MN),l.Mb=function(e){return _t(u(e,57).g,145)},F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$8$Type",1702),D(1704,1,Un,sGt),l.td=function(e){Hon(this.a,this.b,u(e,57))},F(_s,"EdgeAwareScanlineConstraintCalculation/lambda$9$Type",1704),D(1521,1,os,yWt),l.pf=function(e,n){B3n(this,u(e,37),n)};var h2e;F(_s,"HorizontalGraphCompactor",1521),D(1522,1,{},y1),l.Oe=function(e,n){var r,s,o;return qmt(e,n)||(r=t4(e),s=t4(n),r&&r.k==(Vn(),ks)||s&&s.k==(Vn(),ks))?0:(o=u(Q(this.a.a,(ae(),Q4)),304),QQe(o,r?r.k:(Vn(),ta),s?s.k:(Vn(),ta)))},l.Pe=function(e,n){var r,s,o;return qmt(e,n)?1:(r=t4(e),s=t4(n),o=u(Q(this.a.a,(ae(),Q4)),304),B2t(o,r?r.k:(Vn(),ta),s?s.k:(Vn(),ta)))},F(_s,"HorizontalGraphCompactor/1",1522),D(1523,1,{},qT),l.Ne=function(e,n){return GC(),e.a.i==0},F(_s,"HorizontalGraphCompactor/lambda$0$Type",1523),D(1524,1,{},Vd),l.Ne=function(e,n){return xrn(this.a,e,n)},F(_s,"HorizontalGraphCompactor/lambda$1$Type",1524),D(1664,1,{},tee);var f2e,d2e;F(_s,"LGraphToCGraphTransformer",1664),D(1672,1,li,_X),l.Mb=function(e){return e!=null},F(_s,"LGraphToCGraphTransformer/0methodref$nonNull$Type",1672),D(1665,1,{},SX),l.Kb=function(e){return df(),$o(Q(u(u(e,57).g,10),(ae(),_i)))},F(_s,"LGraphToCGraphTransformer/lambda$0$Type",1665),D(1666,1,{},DN),l.Kb=function(e){return df(),rie(u(u(e,57).g,145))},F(_s,"LGraphToCGraphTransformer/lambda$1$Type",1666),D(1675,1,li,AX),l.Mb=function(e){return df(),_t(u(e,57).g,10)},F(_s,"LGraphToCGraphTransformer/lambda$10$Type",1675),D(1676,1,Un,LX),l.td=function(e){yrn(u(e,57))},F(_s,"LGraphToCGraphTransformer/lambda$11$Type",1676),D(1677,1,li,MX),l.Mb=function(e){return df(),_t(u(e,57).g,145)},F(_s,"LGraphToCGraphTransformer/lambda$12$Type",1677),D(1681,1,Un,DX),l.td=function(e){Cln(u(e,57))},F(_s,"LGraphToCGraphTransformer/lambda$13$Type",1681),D(1678,1,Un,AC),l.td=function(e){KXe(this.a,u(e,8))},l.a=0,F(_s,"LGraphToCGraphTransformer/lambda$14$Type",1678),D(1679,1,Un,Yb),l.td=function(e){QXe(this.a,u(e,110))},l.a=0,F(_s,"LGraphToCGraphTransformer/lambda$15$Type",1679),D(1680,1,Un,dR),l.td=function(e){XXe(this.a,u(e,8))},l.a=0,F(_s,"LGraphToCGraphTransformer/lambda$16$Type",1680),D(1682,1,{},IX),l.Kb=function(e){return df(),new Tn(null,new jw(new ar(lr(Ds(u(e,10)).a.Kc(),new z))))},F(_s,"LGraphToCGraphTransformer/lambda$17$Type",1682),D(1683,1,li,OX),l.Mb=function(e){return df(),Ga(u(e,17))},F(_s,"LGraphToCGraphTransformer/lambda$18$Type",1683),D(1684,1,Un,Htt),l.td=function(e){Don(this.a,u(e,17))},F(_s,"LGraphToCGraphTransformer/lambda$19$Type",1684),D(1668,1,Un,Vtt),l.td=function(e){hsn(this.a,u(e,145))},F(_s,"LGraphToCGraphTransformer/lambda$2$Type",1668),D(1685,1,{},IN),l.Kb=function(e){return df(),new Tn(null,new _n(u(e,29).a,16))},F(_s,"LGraphToCGraphTransformer/lambda$20$Type",1685),D(1686,1,{},PX),l.Kb=function(e){return df(),new Tn(null,new jw(new ar(lr(Ds(u(e,10)).a.Kc(),new z))))},F(_s,"LGraphToCGraphTransformer/lambda$21$Type",1686),D(1687,1,{},ON),l.Kb=function(e){return df(),u(Q(u(e,17),(ae(),R2)),15)},F(_s,"LGraphToCGraphTransformer/lambda$22$Type",1687),D(1688,1,li,FX),l.Mb=function(e){return JQe(u(e,15))},F(_s,"LGraphToCGraphTransformer/lambda$23$Type",1688),D(1689,1,Un,Gtt),l.td=function(e){Apn(this.a,u(e,15))},F(_s,"LGraphToCGraphTransformer/lambda$24$Type",1689),D(1667,1,Un,aGt),l.td=function(e){Zsn(this.a,this.b,u(e,145))},F(_s,"LGraphToCGraphTransformer/lambda$3$Type",1667),D(1669,1,{},NX),l.Kb=function(e){return df(),new Tn(null,new _n(u(e,29).a,16))},F(_s,"LGraphToCGraphTransformer/lambda$4$Type",1669),D(1670,1,{},BX),l.Kb=function(e){return df(),new Tn(null,new jw(new ar(lr(Ds(u(e,10)).a.Kc(),new z))))},F(_s,"LGraphToCGraphTransformer/lambda$5$Type",1670),D(1671,1,{},HT),l.Kb=function(e){return df(),u(Q(u(e,17),(ae(),R2)),15)},F(_s,"LGraphToCGraphTransformer/lambda$6$Type",1671),D(1673,1,Un,Utt),l.td=function(e){abn(this.a,u(e,15))},F(_s,"LGraphToCGraphTransformer/lambda$8$Type",1673),D(1674,1,Un,oGt),l.td=function(e){mQe(this.a,this.b,u(e,145))},F(_s,"LGraphToCGraphTransformer/lambda$9$Type",1674),D(1663,1,{},RX),l.Le=function(e){var n,r,s,o,h;for(this.a=e,this.d=new eet,this.c=Nt(a7t,De,121,this.a.a.a.c.length,0,1),this.b=0,r=new S(this.a.a.a);r.a=tt&&(le(h,pe(M)),St=b.Math.max(St,Rt[M-1]-j),v+=K,gt+=Rt[M-1]-gt,j=Rt[M-1],K=k[M]),K=b.Math.max(K,k[M]),++M;v+=K}G=b.Math.min(1/St,1/n.b/v),G>s&&(s=G,r=h)}return r},l.Wf=function(){return!1},F(Cd,"MSDCutIndexHeuristic",802),D(1617,1,os,lQ),l.pf=function(e,n){Ryn(u(e,37),n)},F(Cd,"SingleEdgeGraphWrapper",1617),D(227,22,{3:1,35:1,22:1,227:1},ZC);var V4,g7,p7,Ny,bS,G4,b7=jr(kc,"CenterEdgeLabelPlacementStrategy",227,Hr,Kan,SJe),C2e;D(422,22,{3:1,35:1,22:1,422:1},Bbt);var ATt,Alt,LTt=jr(kc,"ConstraintCalculationStrategy",422,Hr,jrn,AJe),_2e;D(314,22,{3:1,35:1,22:1,314:1,246:1,234:1},Pet),l.Kf=function(){return Noe(this)},l.Xf=function(){return Noe(this)};var EO,P6,MTt,DTt=jr(kc,"CrossingMinimizationStrategy",314,Hr,Din,LJe),S2e;D(337,22,{3:1,35:1,22:1,337:1},Fet);var ITt,Llt,VV,OTt=jr(kc,"CuttingStrategy",337,Hr,Iin,IJe),A2e;D(335,22,{3:1,35:1,22:1,335:1,246:1,234:1},AM),l.Kf=function(){return kce(this)},l.Xf=function(){return kce(this)};var PTt,Mlt,wS,Dlt,vS,FTt=jr(kc,"CycleBreakingStrategy",335,Hr,xan,OJe),L2e;D(419,22,{3:1,35:1,22:1,419:1},Rbt);var GV,NTt,BTt=jr(kc,"DirectionCongruency",419,Hr,Rrn,PJe),M2e;D(450,22,{3:1,35:1,22:1,450:1},Net);var w7,Ilt,U4,D2e=jr(kc,"EdgeConstraint",450,Hr,Oin,FJe),I2e;D(276,22,{3:1,35:1,22:1,276:1},JC);var Olt,Plt,Flt,Nlt,UV,Blt,RTt=jr(kc,"EdgeLabelSideSelection",276,Hr,Jan,NJe),O2e;D(479,22,{3:1,35:1,22:1,479:1},jbt);var WV,jTt,$Tt=jr(kc,"EdgeStraighteningStrategy",479,Hr,Brn,BJe),P2e;D(274,22,{3:1,35:1,22:1,274:1},t9);var Rlt,zTt,qTt,YV,HTt,VTt,GTt=jr(kc,"FixedAlignment",274,Hr,Qan,RJe),F2e;D(275,22,{3:1,35:1,22:1,275:1},e9);var UTt,WTt,YTt,KTt,mS,XTt,QTt=jr(kc,"GraphCompactionStrategy",275,Hr,Xan,jJe),N2e;D(256,22,{3:1,35:1,22:1,256:1},Fm);var v7,KV,m7,vh,yS,XV,y7,W4,QV,xS,jlt=jr(kc,"GraphProperties",256,Hr,Rcn,$Je),B2e;D(292,22,{3:1,35:1,22:1,292:1},Bet);var TO,$lt,zlt,qlt=jr(kc,"GreedySwitchType",292,Hr,Nin,zJe),R2e;D(303,22,{3:1,35:1,22:1,303:1},Ret);var F6,CO,Y4,j2e=jr(kc,"InLayerConstraint",303,Hr,Fin,qJe),$2e;D(420,22,{3:1,35:1,22:1,420:1},$bt);var Hlt,ZTt,JTt=jr(kc,"InteractiveReferencePoint",420,Hr,$rn,HJe),z2e,tCt,N6,Iv,ZV,eCt,nCt,JV,rCt,_O,tG,kS,B6,By,Vlt,eG,oc,iCt,Ov,Vc,Glt,Ult,SO,B2,Pv,R6,sCt,j6,AO,Ry,r1,$h,Wlt,K4,Tc,_i,aCt,oCt,cCt,uCt,lCt,Ylt,nG,Ju,Fv,Klt,$6,LO,q1,X4,x7,Q4,Z4,k7,R2,hCt,Xlt,Qlt,z6;D(163,22,{3:1,35:1,22:1,163:1},MM);var ES,bb,TS,jy,MO,fCt=jr(kc,"LayerConstraint",163,Hr,Tan,VJe),q2e;D(848,1,Oh,rtt),l.Qe=function(e){an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,C6t),""),"Direction Congruency"),"Specifies how drawings of the same graph with different layout directions compare to each other: either a natural reading direction is preserved or the drawings are rotated versions of each other."),kCt),(Ug(),us)),BTt),un((Qf(),qn))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,_6t),""),"Feedback Edges"),"Whether feedback edges should be highlighted by routing around the nodes."),(Nn(),!1)),La),Rs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,sH),""),"Interactive Reference Point"),"Determines which point of a node is considered by interactive layout phases."),ACt),us),JTt),un(qn)))),ca(e,sH,Qot,Owe),ca(e,sH,H_,Iwe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,S6t),""),"Merge Edges"),"Edges that have no ports are merged so they touch the connected nodes at the same points. When this option is disabled, one port is created for each edge directly connected to a node. When it is enabled, all such incoming edges share an input port, and all outgoing edges share an output port."),!1),La),Rs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,A6t),""),"Merge Hierarchy-Crossing Edges"),"If hierarchical layout is active, hierarchy-crossing edges use as few hierarchical ports as possible. They are broken by the algorithm, with hierarchical ports inserted as required. Usually, one such port is created for each edge at each hierarchy crossing point. With this option set to true, we try to create as few hierarchical ports as possible in the process. In particular, all edges that form a hyperedge can share a port."),!0),La),Rs),un(qn)))),an(e,new Xe(XKe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,L6t),""),"Allow Non-Flow Ports To Switch Sides"),"Specifies whether non-flow ports may switch sides if their node's port constraints are either FIXED_SIDE or FIXED_ORDER. A non-flow port is a port on a side that is not part of the currently configured layout flow. For instance, given a left-to-right layout direction, north and south ports would be considered non-flow ports. Further note that the underlying criterium whether to switch sides or not solely relies on the minimization of edge crossings. Hence, edge length and other aesthetics criteria are not addressed."),!1),La),Rs),un(V2)),lt(ct(Ae,1),ee,2,6,["org.eclipse.elk.layered.northOrSouthPort"])))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,M6t),""),"Port Sorting Strategy"),"Only relevant for nodes with FIXED_SIDE port constraints. Determines the way a node's ports are distributed on the sides of a node if their order is not prescribed. The option is set on parent nodes."),NCt),us),V9t),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,D6t),""),"Thoroughness"),"How much effort should be spent to produce a nice layout."),pe(7)),gc),ja),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,I6t),""),"Add Unnecessary Bendpoints"),"Adds bend points even if an edge does not change direction. If true, each long edge dummy will contribute a bend point to its edges and hierarchy-crossing edges will always get a bend point where they cross hierarchy boundaries. By default, bend points are only added where an edge changes direction."),!1),La),Rs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,O6t),""),"Generate Position and Layer IDs"),"If enabled position id and layer id are generated, which are usually only used internally when setting the interactiveLayout option. This option should be specified on the root node."),!1),La),Rs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Qot),"cycleBreaking"),"Cycle Breaking Strategy"),"Strategy for cycle breaking. Cycle breaking looks for cycles in the graph and determines which edges to reverse to break the cycles. Reversed edges will end up pointing to the opposite direction of regular edges (that is, reversed edges will point left if edges usually point right)."),xCt),us),FTt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,KI),xct),"Node Layering Strategy"),"Strategy for node layering."),DCt),us),I9t),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,P6t),xct),"Layer Constraint"),"Determines a constraint on the placement of the node regarding the layering."),LCt),us),fCt),un(ea)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,F6t),xct),"Layer Choice Constraint"),"Allows to set a constraint regarding the layer placement of a node. Let i be the value of teh constraint. Assumed the drawing has n layers and i < n. If set to i, it expresses that the node should be placed in i-th layer. Should i>=n be true then the node is placed in the last layer of the drawing. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),pe(-1)),gc),ja),un(ea)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,N6t),xct),"Layer ID"),"Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),pe(-1)),gc),ja),un(ea)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Zot),I1e),"Upper Bound On Width [MinWidth Layerer]"),"Defines a loose upper bound on the width of the MinWidth layerer. If set to '-1' multiple values are tested and the best result is selected."),pe(4)),gc),ja),un(qn)))),ca(e,Zot,KI,$we),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Jot),I1e),"Upper Layer Estimation Scaling Factor [MinWidth Layerer]"),"Multiplied with Upper Bound On Width for defining an upper bound on the width of layers which haven't been determined yet, but whose maximum width had been (roughly) estimated by the MinWidth algorithm. Compensates for too high estimations. If set to '-1' multiple values are tested and the best result is selected."),pe(2)),gc),ja),un(qn)))),ca(e,Jot,KI,qwe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,tct),O1e),"Node Promotion Strategy"),"Reduces number of dummy nodes after layering phase (if possible)."),MCt),us),z9t),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ect),O1e),"Max Node Promotion Iterations"),"Limits the number of iterations for node promotion."),pe(0)),gc),ja),un(qn)))),ca(e,ect,tct,null),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,nct),"layering.coffmanGraham"),"Layer Bound"),"The maximum number of nodes allowed per layer."),pe(wi)),gc),ja),un(qn)))),ca(e,nct,KI,Fwe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,H_),XI),"Crossing Minimization Strategy"),"Strategy for crossing minimization."),yCt),us),DTt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,B6t),XI),"Force Node Model Order"),"The node order given by the model does not change to produce a better layout. E.g. if node A is before node B in the model this is not changed during crossing minimization. This assumes that the node model order is already respected before crossing minimization. This can be achieved by setting considerModelOrder.strategy to NODES_AND_EDGES."),!1),La),Rs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,rct),XI),"Hierarchical Sweepiness"),"How likely it is to use cross-hierarchy (1) vs bottom-up (-1)."),.1),Oo),la),un(qn)))),ca(e,rct,vH,owe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ict),XI),"Semi-Interactive Crossing Minimization"),"Preserves the order of nodes within a layer but still minimizes crossings between edges connecting long edge dummies. Derives the desired order from positions specified by the 'org.eclipse.elk.position' layout option. Requires a crossing minimization strategy that is able to process 'in-layer' constraints."),!1),La),Rs),un(qn)))),ca(e,ict,H_,hwe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,R6t),XI),"Position Choice Constraint"),"Allows to set a constraint regarding the position placement of a node in a layer. Assumed the layer in which the node placed includes n other nodes and i < n. If set to i, it expresses that the node should be placed at the i-th position. Should i>=n be true then the node is placed at the last position in the layer. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),pe(-1)),gc),ja),un(ea)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,j6t),XI),"Position ID"),"Position within a layer that was determined by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),pe(-1)),gc),ja),un(ea)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,$6t),P1e),"Greedy Switch Activation Threshold"),"By default it is decided automatically if the greedy switch is activated or not. The decision is based on whether the size of the input graph (without dummy nodes) is smaller than the value of this option. A '0' enforces the activation."),pe(40)),gc),ja),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,sct),P1e),"Greedy Switch Crossing Minimization"),"Greedy Switch strategy for crossing minimization. The greedy switch heuristic is executed after the regular crossing minimization as a post-processor. Note that if 'hierarchyHandling' is set to 'INCLUDE_CHILDREN', the 'greedySwitchHierarchical.type' option must be used."),mCt),us),qlt),un(qn)))),ca(e,sct,H_,swe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,aH),"crossingMinimization.greedySwitchHierarchical"),"Greedy Switch Crossing Minimization (hierarchical)"),"Activates the greedy switch heuristic in case hierarchical layout is used. The differences to the non-hierarchical case (see 'greedySwitch.type') are: 1) greedy switch is inactive by default, 3) only the option value set on the node at which hierarchical layout starts is relevant, and 2) if it's activated by the user, it properly addresses hierarchy-crossing edges."),vCt),us),qlt),un(qn)))),ca(e,aH,H_,nwe),ca(e,aH,vH,rwe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,I4),F1e),"Node Placement Strategy"),"Strategy for node placement."),FCt),us),N9t),un(qn)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,oH),F1e),"Favor Straight Edges Over Balancing"),"Favor straight edges over a balanced node placement. The default behavior is determined automatically based on the used 'edgeRouting'. For an orthogonal style it is set to true, for all other styles to false."),La),Rs),un(qn)))),ca(e,oH,I4,Jwe),ca(e,oH,I4,tve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,act),N1e),"BK Edge Straightening"),"Specifies whether the Brandes Koepf node placer tries to increase the number of straight edges at the expense of diagram size. There is a subtle difference to the 'favorStraightEdges' option, which decides whether a balanced placement of the nodes is desired, or not. In bk terms this means combining the four alignments into a single balanced one, or not. This option on the other hand tries to straighten additional edges during the creation of each of the four alignments."),ICt),us),$Tt),un(qn)))),ca(e,act,I4,Kwe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,oct),N1e),"BK Fixed Alignment"),"Tells the BK node placer to use a certain alignment (out of its four) instead of the one producing the smallest height, or the combination of all four."),OCt),us),GTt),un(qn)))),ca(e,oct,I4,Qwe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,cct),"nodePlacement.linearSegments"),"Linear Segments Deflection Dampening"),"Dampens the movement of nodes to keep the diagram from getting too large."),.3),Oo),la),un(qn)))),ca(e,cct,I4,nve),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,uct),"nodePlacement.networkSimplex"),"Node Flexibility"),"Aims at shorter and straighter edges. Two configurations are possible: (a) allow ports to move freely on the side they are assigned to (the order is always defined beforehand), (b) additionally allow to enlarge a node wherever it helps. If this option is not configured for a node, the 'nodeFlexibility.default' value is used, which is specified for the node's parent."),us),yht),un(ea)))),ca(e,uct,I4,ave),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,lct),"nodePlacement.networkSimplex.nodeFlexibility"),"Node Flexibility Default"),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),PCt),us),yht),un(qn)))),ca(e,lct,I4,sve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,z6t),B1e),"Self-Loop Distribution"),"Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE."),CCt),us),W9t),un(ea)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,q6t),B1e),"Self-Loop Ordering"),"Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE."),_Ct),us),Y9t),un(ea)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,cH),"edgeRouting.splines"),"Spline Routing Mode"),"Specifies the way control points are assembled for each individual edge. CONSERVATIVE ensures that edges are properly routed around the nodes but feels rather orthogonal at times. SLOPPY uses fewer control points to obtain curvier edge routes but may result in edges overlapping nodes."),SCt),us),X9t),un(qn)))),ca(e,cH,QI,kwe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,uH),"edgeRouting.splines.sloppy"),"Sloppy Spline Layer Spacing Factor"),"Spacing factor for routing area between layers when using sloppy spline routing."),.2),Oo),la),un(qn)))),ca(e,uH,QI,Twe),ca(e,uH,cH,Cwe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,hct),"edgeRouting.polyline"),"Sloped Edge Zone Width"),"Width of the strip to the left and to the right of each layer where the polyline edge router is allowed to refrain from ensuring that edges are routed horizontally. This prevents awkward bend points for nodes that extent almost to the edge of their layer."),2),Oo),la),un(qn)))),ca(e,hct,QI,vwe),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,H6t),R1),"Spacing Base Value"),"An optional base value for all other layout options of the 'spacing' group. It can be used to conveniently alter the overall 'spaciousness' of the drawing. Whenever an explicit value is set for the other layout options, this base value will have no effect. The base value is not inherited, i.e. it must be set for each hierarchical node."),Oo),la),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,V6t),R1),"Edge Node Between Layers Spacing"),"The spacing to be preserved between nodes and edges that are routed next to the node's layer. For the spacing between nodes and edges that cross the node's layer 'spacing.edgeNode' is used."),10),Oo),la),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,G6t),R1),"Edge Edge Between Layer Spacing"),"Spacing to be preserved between pairs of edges that are routed between the same pair of layers. Note that 'spacing.edgeEdge' is used for the spacing between pairs of edges crossing the same layer."),10),Oo),la),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,U6t),R1),"Node Node Between Layers Spacing"),"The spacing to be preserved between any pair of nodes of two adjacent layers. Note that 'spacing.nodeNode' is used for the spacing between nodes within the layer itself."),20),Oo),la),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,W6t),nkt),"Direction Priority"),"Defines how important it is to have a certain edge point into the direction of the overall layout. This option is evaluated during the cycle breaking phase."),pe(0)),gc),ja),un(Pd)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Y6t),nkt),"Shortness Priority"),"Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase."),pe(0)),gc),ja),un(Pd)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,K6t),nkt),"Straightness Priority"),"Defines how important it is to keep an edge straight, i.e. aligned with one of the two axes. This option is evaluated during node placement."),pe(0)),gc),ja),un(Pd)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,fct),rkt),Jfe),"Tries to further compact components (disconnected sub-graphs)."),!1),La),Rs),un(qn)))),ca(e,fct,R_,!0),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,X6t),R1e),"Post Compaction Strategy"),j1e),gCt),us),QTt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Q6t),R1e),"Post Compaction Constraint Calculation"),j1e),dCt),us),LTt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,lH),ikt),"High Degree Node Treatment"),"Makes room around high degree nodes to place leafs and trees."),!1),La),Rs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,dct),ikt),"High Degree Node Threshold"),"Whether a node is considered to have a high degree."),pe(16)),gc),ja),un(qn)))),ca(e,dct,lH,!0),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,gct),ikt),"High Degree Node Maximum Tree Height"),"Maximum height of a subtree connected to a high degree node to be moved to separate layers."),pe(5)),gc),ja),un(qn)))),ca(e,gct,lH,!0),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,tg),skt),"Graph Wrapping Strategy"),"For certain graphs and certain prescribed drawing areas it may be desirable to split the laid out graph into chunks that are placed side by side. The edges that connect different chunks are 'wrapped' around from the end of one chunk to the start of the other chunk. The points between the chunks are referred to as 'cuts'."),jCt),us),t_t),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,hH),skt),"Additional Wrapped Edges Spacing"),"To visually separate edges that are wrapped from regularly routed edges an additional spacing value can be specified in form of this layout option. The spacing is added to the regular edgeNode spacing."),10),Oo),la),un(qn)))),ca(e,hH,tg,mve),ca(e,hH,tg,yve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,fH),skt),"Correction Factor for Wrapping"),"At times and for certain types of graphs the executed wrapping may produce results that are consistently biased in the same fashion: either wrapping to often or to rarely. This factor can be used to correct the bias. Internally, it is simply multiplied with the 'aspect ratio' layout option."),1),Oo),la),un(qn)))),ca(e,fH,tg,kve),ca(e,fH,tg,Eve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,V_),$1e),"Cutting Strategy"),"The strategy by which the layer indexes are determined at which the layering crumbles into chunks."),RCt),us),OTt),un(qn)))),ca(e,V_,tg,Lve),ca(e,V_,tg,Mve),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,pct),$1e),"Manually Specified Cuts"),"Allows the user to specify her own cuts for a certain graph."),V1),wh),un(qn)))),ca(e,pct,V_,Cve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,bct),"wrapping.cutting.msd"),"MSD Freedom"),"The MSD cutting strategy starts with an initial guess on the number of chunks the graph should be split into. The freedom specifies how much the strategy may deviate from this guess. E.g. if an initial number of 3 is computed, a freedom of 1 allows 2, 3, and 4 cuts."),BCt),gc),ja),un(qn)))),ca(e,bct,V_,Sve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,dH),z1e),"Validification Strategy"),"When wrapping graphs, one can specify indices that are not allowed as split points. The validification strategy makes sure every computed split point is allowed."),$Ct),us),J9t),un(qn)))),ca(e,dH,tg,qve),ca(e,dH,tg,Hve),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,gH),z1e),"Valid Indices for Wrapping"),null),V1),wh),un(qn)))),ca(e,gH,tg,jve),ca(e,gH,tg,$ve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,pH),akt),"Improve Cuts"),"For general graphs it is important that not too many edges wrap backwards. Thus a compromise between evenly-distributed cuts and the total number of cut edges is sought."),!0),La),Rs),un(qn)))),ca(e,pH,tg,Pve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,bH),akt),"Distance Penalty When Improving Cuts"),null),2),Oo),la),un(qn)))),ca(e,bH,tg,Ive),ca(e,bH,pH,!0),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,wct),akt),"Improve Wrapped Edges"),"The initial wrapping is performed in a very simple way. As a consequence, edges that wrap from one chunk to another may be unnecessarily long. Activating this option tries to shorten such edges."),!0),La),Rs),un(qn)))),ca(e,wct,tg,Nve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Z6t),kct),"Edge Label Side Selection"),"Method to decide on edge label sides."),TCt),us),RTt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,J6t),kct),"Edge Center Label Placement Strategy"),"Determines in which layer center labels of long edges should be placed."),ECt),us),b7),ji(qn,lt(ct(ip,1),oe,175,0,[rp]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,wH),ZI),"Consider Model Order"),"Preserves the order of nodes and edges in the model file if this does not lead to additional edge crossings. Depending on the strategy this is not always possible since the node and edge order might be conflicting."),wCt),us),H9t),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,tkt),ZI),"No Model Order"),"Set on a node to not set a model order for this node even though it is a real node."),!1),La),Rs),un(ea)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,vct),ZI),"Consider Model Order for Components"),"If set to NONE the usual ordering strategy (by cumulative node priority and size of nodes) is used. INSIDE_PORT_SIDES orders the components with external ports only inside the groups with the same port side. FORCE_MODEL_ORDER enforces the mode order on components. This option might produce bad alignments and sub optimal drawings in terms of used area since the ordering should be respected."),pCt),us),F7t),un(qn)))),ca(e,vct,R_,null),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ekt),ZI),"Long Edge Ordering Strategy"),"Indicates whether long edges are sorted under, over, or equal to nodes that have no connection to a previous layer in a left-to-right or right-to-left layout. Under and over changes to right and left in a vertical layout."),bCt),us),P9t),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,mct),ZI),"Crossing Counter Node Order Influence"),"Indicates with what percentage (1 for 100%) violations of the node model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal node order. Defaults to no influence (0)."),0),Oo),la),un(qn)))),ca(e,mct,wH,null),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,yct),ZI),"Crossing Counter Port Order Influence"),"Indicates with what percentage (1 for 100%) violations of the port model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal port order. Defaults to no influence (0)."),0),Oo),la),un(qn)))),ca(e,yct,wH,null),ife((new HB,e))};var H2e,V2e,G2e,dCt,U2e,gCt,W2e,pCt,Y2e,K2e,X2e,bCt,Q2e,Z2e,wCt,J2e,twe,ewe,vCt,nwe,rwe,iwe,mCt,swe,awe,owe,cwe,uwe,lwe,hwe,fwe,yCt,dwe,xCt,gwe,kCt,pwe,ECt,bwe,TCt,wwe,vwe,mwe,CCt,ywe,_Ct,xwe,SCt,kwe,Ewe,Twe,Cwe,_we,Swe,Awe,Lwe,Mwe,Dwe,ACt,Iwe,Owe,Pwe,Fwe,Nwe,Bwe,LCt,Rwe,jwe,$we,zwe,qwe,Hwe,Vwe,MCt,Gwe,DCt,Uwe,Wwe,Ywe,ICt,Kwe,Xwe,OCt,Qwe,Zwe,Jwe,tve,eve,nve,rve,ive,PCt,sve,ave,ove,FCt,cve,NCt,uve,lve,hve,fve,dve,gve,pve,bve,wve,vve,mve,yve,xve,kve,Eve,Tve,Cve,_ve,BCt,Sve,Ave,RCt,Lve,Mve,Dve,Ive,Ove,Pve,Fve,Nve,Bve,jCt,Rve,jve,$ve,zve,$Ct,qve,Hve;F(kc,"LayeredMetaDataProvider",848),D(986,1,Oh,HB),l.Qe=function(e){ife(e)};var Id,Zlt,rG,CS,iG,zCt,sG,q6,aG,qCt,HCt,Jlt,wb,tht,$y,VCt,DO,eht,GCt,Vve,oG,nht,_S,zy,Gve,Wl,UCt,WCt,cG,rht,Od,uG,eg,YCt,KCt,XCt,iht,sht,QCt,Jg,aht,ZCt,qy,JCt,t9t,e9t,lG,Hy,j2,n9t,r9t,So,i9t,Uve,uu,hG,s9t,a9t,o9t,oht,c9t,fG,u9t,l9t,dG,Nv,h9t,cht,SS,f9t,Bv,AS,gG,$2,uht,E7,pG,z2,d9t,g9t,p9t,T7,b9t,Wve,Yve,Kve,Xve,Rv,Vy,cs,tp,Qve,Gy,w9t,C7,v9t,Uy,Zve,_7,m9t,H6,Jve,tme,IO,lht,y9t,OO,Tf,J4,V6,jv,q2,bG,Wy,hht,S7,A7,$v,t5,fht,PO,LS,MS,dht,x9t,k9t,E9t,T9t,ght,C9t,_9t,S9t,A9t,pht,wG;F(kc,"LayeredOptions",986),D(987,1,{},fQ),l.$e=function(){var e;return e=new gqt,e},l._e=function(e){},F(kc,"LayeredOptions/LayeredFactory",987),D(1372,1,{}),l.a=0;var eme;F(Ec,"ElkSpacings/AbstractSpacingsBuilder",1372),D(779,1372,{},w3t);var vG,nme;F(kc,"LayeredSpacings/LayeredSpacingsBuilder",779),D(313,22,{3:1,35:1,22:1,313:1,246:1,234:1},n9),l.Kf=function(){return Bce(this)},l.Xf=function(){return Bce(this)};var bht,L9t,M9t,mG,wht,D9t,I9t=jr(kc,"LayeringStrategy",313,Hr,Zan,GJe),rme;D(378,22,{3:1,35:1,22:1,378:1},jet);var vht,O9t,yG,P9t=jr(kc,"LongEdgeOrderingStrategy",378,Hr,Min,UJe),ime;D(197,22,{3:1,35:1,22:1,197:1},nj);var e5,n5,xG,mht,yht=jr(kc,"NodeFlexibility",197,Hr,Bsn,WJe),sme;D(315,22,{3:1,35:1,22:1,315:1,246:1,234:1},LM),l.Kf=function(){return xce(this)},l.Xf=function(){return xce(this)};var DS,xht,kht,IS,F9t,N9t=jr(kc,"NodePlacementStrategy",315,Hr,yan,JJe),ame;D(260,22,{3:1,35:1,22:1,260:1},Ix);var B9t,FO,R9t,j9t,NO,$9t,kG,EG,z9t=jr(kc,"NodePromotionStrategy",260,Hr,Qon,KJe),ome;D(339,22,{3:1,35:1,22:1,339:1},$et);var q9t,vb,Eht,H9t=jr(kc,"OrderingStrategy",339,Hr,Rin,XJe),cme;D(421,22,{3:1,35:1,22:1,421:1},zbt);var Tht,Cht,V9t=jr(kc,"PortSortingStrategy",421,Hr,zrn,QJe),ume;D(452,22,{3:1,35:1,22:1,452:1},zet);var tl,nu,OS,lme=jr(kc,"PortType",452,Hr,Bin,YJe),hme;D(375,22,{3:1,35:1,22:1,375:1},qet);var G9t,_ht,U9t,W9t=jr(kc,"SelfLoopDistributionStrategy",375,Hr,jin,ZJe),fme;D(376,22,{3:1,35:1,22:1,376:1},qbt);var BO,Sht,Y9t=jr(kc,"SelfLoopOrderingStrategy",376,Hr,Nrn,ttn),dme;D(304,1,{304:1},ahe),F(kc,"Spacings",304),D(336,22,{3:1,35:1,22:1,336:1},Het);var Aht,K9t,PS,X9t=jr(kc,"SplineRoutingMode",336,Hr,zin,etn),gme;D(338,22,{3:1,35:1,22:1,338:1},Vet);var Lht,Q9t,Z9t,J9t=jr(kc,"ValidifyStrategy",338,Hr,qin,ntn),pme;D(377,22,{3:1,35:1,22:1,377:1},Get);var Yy,Mht,L7,t_t=jr(kc,"WrappingStrategy",377,Hr,$in,rtn),bme;D(1383,1,zc,att),l.Yf=function(e){return u(e,37),wme},l.pf=function(e,n){I3n(this,u(e,37),n)};var wme;F(xH,"DepthFirstCycleBreaker",1383),D(782,1,zc,evt),l.Yf=function(e){return u(e,37),vme},l.pf=function(e,n){Mxn(this,u(e,37),n)},l.Zf=function(e){return u(Ne(e,Zz(this.d,e.c.length)),10)};var vme;F(xH,"GreedyCycleBreaker",782),D(1386,782,zc,WGt),l.Zf=function(e){var n,r,s,o;for(o=null,n=wi,s=new S(e);s.a1&&(je(Re(Q(Na((An(0,e.c.length),u(e.c[0],10))),(Te(),$y))))?Dce(e,this.d,u(this,660)):(wn(),Zs(e,this.d)),Qne(this.e,e))},l.Sf=function(e,n,r,s){var o,h,d,v,k,C,M;for(n!=kKt(r,e.length)&&(h=e[n-(r?1:-1)],_mt(this.f,h,r?(so(),nu):(so(),tl))),o=e[n][0],M=!s||o.k==(Vn(),ks),C=A1(e[n]),this.ag(C,M,!1,r),d=0,k=new S(C);k.a"),e0?Crt(this.a,e[n-1],e[n]):!r&&n1&&(je(Re(Q(Na((An(0,e.c.length),u(e.c[0],10))),(Te(),$y))))?Dce(e,this.d,this):(wn(),Zs(e,this.d)),je(Re(Q(Na((An(0,e.c.length),u(e.c[0],10))),$y)))||Qne(this.e,e))},F(qu,"ModelOrderBarycenterHeuristic",660),D(1803,1,Oi,D$t),l.ue=function(e,n){return Ugn(this.a,u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(qu,"ModelOrderBarycenterHeuristic/lambda$0$Type",1803),D(1403,1,zc,ltt),l.Yf=function(e){var n;return u(e,37),n=pj(Dme),bi(n,(Wa(),cu),(ro(),IV)),n},l.pf=function(e,n){Drn((u(e,37),n))};var Dme;F(qu,"NoCrossingMinimizer",1403),D(796,402,qkt,hbt),l.$f=function(e,n,r){var s,o,h,d,v,k,C,M,j,H,G;switch(j=this.g,r.g){case 1:{for(o=0,h=0,M=new S(e.j);M.a1&&(o.j==(ve(),Hn)?this.b[e]=!0:o.j==Bn&&e>0&&(this.b[e-1]=!0))},l.f=0,F(c0,"AllCrossingsCounter",1798),D(587,1,{},gz),l.b=0,l.d=0,F(c0,"BinaryIndexedTree",587),D(524,1,{},YM);var r_t,CG;F(c0,"CrossingsCounter",524),D(1906,1,Oi,I$t),l.ue=function(e,n){return Pen(this.a,u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(c0,"CrossingsCounter/lambda$0$Type",1906),D(1907,1,Oi,O$t),l.ue=function(e,n){return Fen(this.a,u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(c0,"CrossingsCounter/lambda$1$Type",1907),D(1908,1,Oi,P$t),l.ue=function(e,n){return Nen(this.a,u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(c0,"CrossingsCounter/lambda$2$Type",1908),D(1909,1,Oi,F$t),l.ue=function(e,n){return Ben(this.a,u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(c0,"CrossingsCounter/lambda$3$Type",1909),D(1910,1,Un,N$t),l.td=function(e){von(this.a,u(e,11))},F(c0,"CrossingsCounter/lambda$4$Type",1910),D(1911,1,li,B$t),l.Mb=function(e){return IXe(this.a,u(e,11))},F(c0,"CrossingsCounter/lambda$5$Type",1911),D(1912,1,Un,R$t),l.td=function(e){HGt(this,e)},F(c0,"CrossingsCounter/lambda$6$Type",1912),D(1913,1,Un,pGt),l.td=function(e){var n;k8(),Up(this.b,(n=this.a,u(e,11),n))},F(c0,"CrossingsCounter/lambda$7$Type",1913),D(826,1,xd,YN),l.Lb=function(e){return k8(),Us(u(e,11),(ae(),Ju))},l.Fb=function(e){return this===e},l.Mb=function(e){return k8(),Us(u(e,11),(ae(),Ju))},F(c0,"CrossingsCounter/lambda$8$Type",826),D(1905,1,{},j$t),F(c0,"HyperedgeCrossingsCounter",1905),D(467,1,{35:1,467:1},sYt),l.wd=function(e){return pfn(this,u(e,467))},l.b=0,l.c=0,l.e=0,l.f=0;var h6n=F(c0,"HyperedgeCrossingsCounter/Hyperedge",467);D(362,1,{35:1,362:1},f$),l.wd=function(e){return d2n(this,u(e,362))},l.b=0,l.c=0;var Ime=F(c0,"HyperedgeCrossingsCounter/HyperedgeCorner",362);D(523,22,{3:1,35:1,22:1,523:1},Hbt);var NS,BS,Ome=jr(c0,"HyperedgeCrossingsCounter/HyperedgeCorner/Type",523,Hr,qrn,stn),Pme;D(1405,1,zc,stt),l.Yf=function(e){return u(Q(u(e,37),(ae(),Vc)),21).Hc((oo(),vh))?Fme:null},l.pf=function(e,n){Pdn(this,u(e,37),n)};var Fme;F(uo,"InteractiveNodePlacer",1405),D(1406,1,zc,itt),l.Yf=function(e){return u(Q(u(e,37),(ae(),Vc)),21).Hc((oo(),vh))?Nme:null},l.pf=function(e,n){v1n(this,u(e,37),n)};var Nme,_G,SG;F(uo,"LinearSegmentsNodePlacer",1406),D(257,1,{35:1,257:1},zpt),l.wd=function(e){return VKe(this,u(e,257))},l.Fb=function(e){var n;return _t(e,257)?(n=u(e,257),this.b==n.b):!1},l.Hb=function(){return this.b},l.Ib=function(){return"ls"+eb(this.e)},l.a=0,l.b=0,l.c=-1,l.d=-1,l.g=0;var Bme=F(uo,"LinearSegmentsNodePlacer/LinearSegment",257);D(1408,1,zc,IKt),l.Yf=function(e){return u(Q(u(e,37),(ae(),Vc)),21).Hc((oo(),vh))?Rme:null},l.pf=function(e,n){kxn(this,u(e,37),n)},l.b=0,l.g=0;var Rme;F(uo,"NetworkSimplexPlacer",1408),D(1427,1,Oi,wQ),l.ue=function(e,n){return pu(u(e,19).a,u(n,19).a)},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(uo,"NetworkSimplexPlacer/0methodref$compare$Type",1427),D(1429,1,Oi,vQ),l.ue=function(e,n){return pu(u(e,19).a,u(n,19).a)},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(uo,"NetworkSimplexPlacer/1methodref$compare$Type",1429),D(649,1,{649:1},bGt);var f6n=F(uo,"NetworkSimplexPlacer/EdgeRep",649);D(401,1,{401:1},Ovt),l.b=!1;var d6n=F(uo,"NetworkSimplexPlacer/NodeRep",401);D(508,12,{3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1,508:1},Cqt),F(uo,"NetworkSimplexPlacer/Path",508),D(1409,1,{},mQ),l.Kb=function(e){return u(e,17).d.i.k},F(uo,"NetworkSimplexPlacer/Path/lambda$0$Type",1409),D(1410,1,li,yQ),l.Mb=function(e){return u(e,267)==(Vn(),ta)},F(uo,"NetworkSimplexPlacer/Path/lambda$1$Type",1410),D(1411,1,{},xQ),l.Kb=function(e){return u(e,17).d.i},F(uo,"NetworkSimplexPlacer/Path/lambda$2$Type",1411),D(1412,1,li,$$t),l.Mb=function(e){return HWt(Aie(u(e,10)))},F(uo,"NetworkSimplexPlacer/Path/lambda$3$Type",1412),D(1413,1,li,kQ),l.Mb=function(e){return Een(u(e,11))},F(uo,"NetworkSimplexPlacer/lambda$0$Type",1413),D(1414,1,Un,wGt),l.td=function(e){yQe(this.a,this.b,u(e,11))},F(uo,"NetworkSimplexPlacer/lambda$1$Type",1414),D(1423,1,Un,z$t),l.td=function(e){$pn(this.a,u(e,17))},F(uo,"NetworkSimplexPlacer/lambda$10$Type",1423),D(1424,1,{},EQ),l.Kb=function(e){return Fl(),new Tn(null,new _n(u(e,29).a,16))},F(uo,"NetworkSimplexPlacer/lambda$11$Type",1424),D(1425,1,Un,q$t),l.td=function(e){Nvn(this.a,u(e,10))},F(uo,"NetworkSimplexPlacer/lambda$12$Type",1425),D(1426,1,{},TQ),l.Kb=function(e){return Fl(),pe(u(e,121).e)},F(uo,"NetworkSimplexPlacer/lambda$13$Type",1426),D(1428,1,{},CQ),l.Kb=function(e){return Fl(),pe(u(e,121).e)},F(uo,"NetworkSimplexPlacer/lambda$15$Type",1428),D(1430,1,li,_Q),l.Mb=function(e){return Fl(),u(e,401).c.k==(Vn(),Os)},F(uo,"NetworkSimplexPlacer/lambda$17$Type",1430),D(1431,1,li,SQ),l.Mb=function(e){return Fl(),u(e,401).c.j.c.length>1},F(uo,"NetworkSimplexPlacer/lambda$18$Type",1431),D(1432,1,Un,jXt),l.td=function(e){_hn(this.c,this.b,this.d,this.a,u(e,401))},l.c=0,l.d=0,F(uo,"NetworkSimplexPlacer/lambda$19$Type",1432),D(1415,1,{},AQ),l.Kb=function(e){return Fl(),new Tn(null,new _n(u(e,29).a,16))},F(uo,"NetworkSimplexPlacer/lambda$2$Type",1415),D(1433,1,Un,H$t),l.td=function(e){vQe(this.a,u(e,11))},l.a=0,F(uo,"NetworkSimplexPlacer/lambda$20$Type",1433),D(1434,1,{},nx),l.Kb=function(e){return Fl(),new Tn(null,new _n(u(e,29).a,16))},F(uo,"NetworkSimplexPlacer/lambda$21$Type",1434),D(1435,1,Un,V$t),l.td=function(e){OQe(this.a,u(e,10))},F(uo,"NetworkSimplexPlacer/lambda$22$Type",1435),D(1436,1,li,KN),l.Mb=function(e){return HWt(e)},F(uo,"NetworkSimplexPlacer/lambda$23$Type",1436),D(1437,1,{},LQ),l.Kb=function(e){return Fl(),new Tn(null,new _n(u(e,29).a,16))},F(uo,"NetworkSimplexPlacer/lambda$24$Type",1437),D(1438,1,li,G$t),l.Mb=function(e){return jXe(this.a,u(e,10))},F(uo,"NetworkSimplexPlacer/lambda$25$Type",1438),D(1439,1,Un,vGt),l.td=function(e){cpn(this.a,this.b,u(e,10))},F(uo,"NetworkSimplexPlacer/lambda$26$Type",1439),D(1440,1,li,MQ),l.Mb=function(e){return Fl(),!Ga(u(e,17))},F(uo,"NetworkSimplexPlacer/lambda$27$Type",1440),D(1441,1,li,DQ),l.Mb=function(e){return Fl(),!Ga(u(e,17))},F(uo,"NetworkSimplexPlacer/lambda$28$Type",1441),D(1442,1,{},U$t),l.Ce=function(e,n){return MQe(this.a,u(e,29),u(n,29))},F(uo,"NetworkSimplexPlacer/lambda$29$Type",1442),D(1416,1,{},XN),l.Kb=function(e){return Fl(),new Tn(null,new jw(new ar(lr(Ds(u(e,10)).a.Kc(),new z))))},F(uo,"NetworkSimplexPlacer/lambda$3$Type",1416),D(1417,1,li,IQ),l.Mb=function(e){return Fl(),wsn(u(e,17))},F(uo,"NetworkSimplexPlacer/lambda$4$Type",1417),D(1418,1,Un,W$t),l.td=function(e){Fyn(this.a,u(e,17))},F(uo,"NetworkSimplexPlacer/lambda$5$Type",1418),D(1419,1,{},WT),l.Kb=function(e){return Fl(),new Tn(null,new _n(u(e,29).a,16))},F(uo,"NetworkSimplexPlacer/lambda$6$Type",1419),D(1420,1,li,OQ),l.Mb=function(e){return Fl(),u(e,10).k==(Vn(),Os)},F(uo,"NetworkSimplexPlacer/lambda$7$Type",1420),D(1421,1,{},PQ),l.Kb=function(e){return Fl(),new Tn(null,new jw(new ar(lr(U0(u(e,10)).a.Kc(),new z))))},F(uo,"NetworkSimplexPlacer/lambda$8$Type",1421),D(1422,1,li,FQ),l.Mb=function(e){return Fl(),wen(u(e,17))},F(uo,"NetworkSimplexPlacer/lambda$9$Type",1422),D(1404,1,zc,vC),l.Yf=function(e){return u(Q(u(e,37),(ae(),Vc)),21).Hc((oo(),vh))?jme:null},l.pf=function(e,n){b3n(u(e,37),n)};var jme;F(uo,"SimpleNodePlacer",1404),D(180,1,{180:1},E4),l.Ib=function(){var e;return e="",this.c==(bd(),zv)?e+=x6:this.c==ep&&(e+=y6),this.o==(C1(),H2)?e+=Dot:this.o==H1?e+="UP":e+="BALANCED",e},F(ub,"BKAlignedLayout",180),D(516,22,{3:1,35:1,22:1,516:1},Gbt);var ep,zv,$me=jr(ub,"BKAlignedLayout/HDirection",516,Hr,Vrn,atn),zme;D(515,22,{3:1,35:1,22:1,515:1},Vbt);var H2,H1,qme=jr(ub,"BKAlignedLayout/VDirection",515,Hr,Grn,otn),Hme;D(1634,1,{},mGt),F(ub,"BKAligner",1634),D(1637,1,{},Zse),F(ub,"BKCompactor",1637),D(654,1,{654:1},NQ),l.a=0,F(ub,"BKCompactor/ClassEdge",654),D(458,1,{458:1},Eqt),l.a=null,l.b=0,F(ub,"BKCompactor/ClassNode",458),D(1407,1,zc,GGt),l.Yf=function(e){return u(Q(u(e,37),(ae(),Vc)),21).Hc((oo(),vh))?Vme:null},l.pf=function(e,n){Bxn(this,u(e,37),n)},l.d=!1;var Vme;F(ub,"BKNodePlacer",1407),D(1635,1,{},BQ),l.d=0,F(ub,"NeighborhoodInformation",1635),D(1636,1,Oi,Y$t),l.ue=function(e,n){return Von(this,u(e,46),u(n,46))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(ub,"NeighborhoodInformation/NeighborComparator",1636),D(808,1,{}),F(ub,"ThresholdStrategy",808),D(1763,808,{},Aqt),l.bg=function(e,n,r){return this.a.o==(C1(),H1)?as:Cs},l.cg=function(){},F(ub,"ThresholdStrategy/NullThresholdStrategy",1763),D(579,1,{579:1},yGt),l.c=!1,l.d=!1,F(ub,"ThresholdStrategy/Postprocessable",579),D(1764,808,{},Lqt),l.bg=function(e,n,r){var s,o,h;return o=n==r,s=this.a.a[r.p]==n,o||s?(h=e,this.a.c==(bd(),zv)?(o&&(h=Dat(this,n,!0)),!isNaN(h)&&!isFinite(h)&&s&&(h=Dat(this,r,!1))):(o&&(h=Dat(this,n,!0)),!isNaN(h)&&!isFinite(h)&&s&&(h=Dat(this,r,!1))),h):e},l.cg=function(){for(var e,n,r,s,o;this.d.b!=0;)o=u(oin(this.d),579),s=mle(this,o),s.a&&(e=s.a,r=je(this.a.f[this.a.g[o.b.p].p]),!(!r&&!Ga(e)&&e.c.i.c==e.d.i.c)&&(n=_ce(this,o),n||WXe(this.e,o)));for(;this.e.a.c.length!=0;)_ce(this,u(Nre(this.e),579))},F(ub,"ThresholdStrategy/SimpleThresholdStrategy",1764),D(635,1,{635:1,246:1,234:1},RQ),l.Kf=function(){return Une(this)},l.Xf=function(){return Une(this)};var Dht;F(Sct,"EdgeRouterFactory",635),D(1458,1,zc,od),l.Yf=function(e){return pvn(u(e,37))},l.pf=function(e,n){E3n(u(e,37),n)};var Gme,Ume,Wme,Yme,Kme,i_t,Xme,Qme;F(Sct,"OrthogonalEdgeRouter",1458),D(1451,1,zc,UGt),l.Yf=function(e){return jdn(u(e,37))},l.pf=function(e,n){H5n(this,u(e,37),n)};var Zme,Jme,tye,eye,jO,nye;F(Sct,"PolylineEdgeRouter",1451),D(1452,1,xd,jQ),l.Lb=function(e){return yyt(u(e,10))},l.Fb=function(e){return this===e},l.Mb=function(e){return yyt(u(e,10))},F(Sct,"PolylineEdgeRouter/1",1452),D(1809,1,li,$Q),l.Mb=function(e){return u(e,129).c==(Uf(),mb)},F(t1,"HyperEdgeCycleDetector/lambda$0$Type",1809),D(1810,1,{},zQ),l.Ge=function(e){return u(e,129).d},F(t1,"HyperEdgeCycleDetector/lambda$1$Type",1810),D(1811,1,li,qQ),l.Mb=function(e){return u(e,129).c==(Uf(),mb)},F(t1,"HyperEdgeCycleDetector/lambda$2$Type",1811),D(1812,1,{},rx),l.Ge=function(e){return u(e,129).d},F(t1,"HyperEdgeCycleDetector/lambda$3$Type",1812),D(1813,1,{},HQ),l.Ge=function(e){return u(e,129).d},F(t1,"HyperEdgeCycleDetector/lambda$4$Type",1813),D(1814,1,{},VQ),l.Ge=function(e){return u(e,129).d},F(t1,"HyperEdgeCycleDetector/lambda$5$Type",1814),D(112,1,{35:1,112:1},PD),l.wd=function(e){return GKe(this,u(e,112))},l.Fb=function(e){var n;return _t(e,112)?(n=u(e,112),this.g==n.g):!1},l.Hb=function(){return this.g},l.Ib=function(){var e,n,r,s;for(e=new Ol("{"),s=new S(this.n);s.a"+this.b+" ("+nZe(this.c)+")"},l.d=0,F(t1,"HyperEdgeSegmentDependency",129),D(520,22,{3:1,35:1,22:1,520:1},Ubt);var mb,Ky,rye=jr(t1,"HyperEdgeSegmentDependency/DependencyType",520,Hr,Hrn,ctn),iye;D(1815,1,{},K$t),F(t1,"HyperEdgeSegmentSplitter",1815),D(1816,1,{},_Ht),l.a=0,l.b=0,F(t1,"HyperEdgeSegmentSplitter/AreaRating",1816),D(329,1,{329:1},Dnt),l.a=0,l.b=0,l.c=0,F(t1,"HyperEdgeSegmentSplitter/FreeArea",329),D(1817,1,Oi,QQ),l.ue=function(e,n){return ZZe(u(e,112),u(n,112))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(t1,"HyperEdgeSegmentSplitter/lambda$0$Type",1817),D(1818,1,Un,$Xt),l.td=function(e){ran(this.a,this.d,this.c,this.b,u(e,112))},l.b=0,F(t1,"HyperEdgeSegmentSplitter/lambda$1$Type",1818),D(1819,1,{},ZQ),l.Kb=function(e){return new Tn(null,new _n(u(e,112).e,16))},F(t1,"HyperEdgeSegmentSplitter/lambda$2$Type",1819),D(1820,1,{},JQ),l.Kb=function(e){return new Tn(null,new _n(u(e,112).j,16))},F(t1,"HyperEdgeSegmentSplitter/lambda$3$Type",1820),D(1821,1,{},tZ),l.Fe=function(e){return Xt(ye(e))},F(t1,"HyperEdgeSegmentSplitter/lambda$4$Type",1821),D(655,1,{},ert),l.a=0,l.b=0,l.c=0,F(t1,"OrthogonalRoutingGenerator",655),D(1638,1,{},eZ),l.Kb=function(e){return new Tn(null,new _n(u(e,112).e,16))},F(t1,"OrthogonalRoutingGenerator/lambda$0$Type",1638),D(1639,1,{},nZ),l.Kb=function(e){return new Tn(null,new _n(u(e,112).j,16))},F(t1,"OrthogonalRoutingGenerator/lambda$1$Type",1639),D(661,1,{}),F(Act,"BaseRoutingDirectionStrategy",661),D(1807,661,{},Mqt),l.dg=function(e,n,r){var s,o,h,d,v,k,C,M,j,H,G,K,tt;if(!(e.r&&!e.q))for(M=n+e.o*r,C=new S(e.n);C.aEd&&(h=M,o=e,s=new $e(j,h),ri(d.a,s),pv(this,d,o,s,!1),H=e.r,H&&(G=Xt(ye(Zf(H.e,0))),s=new $e(G,h),ri(d.a,s),pv(this,d,o,s,!1),h=n+H.o*r,o=H,s=new $e(G,h),ri(d.a,s),pv(this,d,o,s,!1)),s=new $e(tt,h),ri(d.a,s),pv(this,d,o,s,!1)))},l.eg=function(e){return e.i.n.a+e.n.a+e.a.a},l.fg=function(){return ve(),mr},l.gg=function(){return ve(),Pn},F(Act,"NorthToSouthRoutingStrategy",1807),D(1808,661,{},Dqt),l.dg=function(e,n,r){var s,o,h,d,v,k,C,M,j,H,G,K,tt;if(!(e.r&&!e.q))for(M=n-e.o*r,C=new S(e.n);C.aEd&&(h=M,o=e,s=new $e(j,h),ri(d.a,s),pv(this,d,o,s,!1),H=e.r,H&&(G=Xt(ye(Zf(H.e,0))),s=new $e(G,h),ri(d.a,s),pv(this,d,o,s,!1),h=n-H.o*r,o=H,s=new $e(G,h),ri(d.a,s),pv(this,d,o,s,!1)),s=new $e(tt,h),ri(d.a,s),pv(this,d,o,s,!1)))},l.eg=function(e){return e.i.n.a+e.n.a+e.a.a},l.fg=function(){return ve(),Pn},l.gg=function(){return ve(),mr},F(Act,"SouthToNorthRoutingStrategy",1808),D(1806,661,{},Iqt),l.dg=function(e,n,r){var s,o,h,d,v,k,C,M,j,H,G,K,tt;if(!(e.r&&!e.q))for(M=n+e.o*r,C=new S(e.n);C.aEd&&(h=M,o=e,s=new $e(h,j),ri(d.a,s),pv(this,d,o,s,!0),H=e.r,H&&(G=Xt(ye(Zf(H.e,0))),s=new $e(h,G),ri(d.a,s),pv(this,d,o,s,!0),h=n+H.o*r,o=H,s=new $e(h,G),ri(d.a,s),pv(this,d,o,s,!0)),s=new $e(h,tt),ri(d.a,s),pv(this,d,o,s,!0)))},l.eg=function(e){return e.i.n.b+e.n.b+e.a.b},l.fg=function(){return ve(),Hn},l.gg=function(){return ve(),Bn},F(Act,"WestToEastRoutingStrategy",1806),D(813,1,{},fxt),l.Ib=function(){return eb(this.a)},l.b=0,l.c=!1,l.d=!1,l.f=0,F(Sy,"NubSpline",813),D(407,1,{407:1},eue,yQt),F(Sy,"NubSpline/PolarCP",407),D(1453,1,zc,Vse),l.Yf=function(e){return A0n(u(e,37))},l.pf=function(e,n){cxn(this,u(e,37),n)};var sye,aye,oye,cye,uye;F(Sy,"SplineEdgeRouter",1453),D(268,1,{268:1},R$),l.Ib=function(){return this.a+" ->("+this.c+") "+this.b},l.c=0,F(Sy,"SplineEdgeRouter/Dependency",268),D(455,22,{3:1,35:1,22:1,455:1},Wbt);var yb,r5,lye=jr(Sy,"SplineEdgeRouter/SideToProcess",455,Hr,Urn,utn),hye;D(1454,1,li,XQ),l.Mb=function(e){return m_(),!u(e,128).o},F(Sy,"SplineEdgeRouter/lambda$0$Type",1454),D(1455,1,{},KQ),l.Ge=function(e){return m_(),u(e,128).v+1},F(Sy,"SplineEdgeRouter/lambda$1$Type",1455),D(1456,1,Un,xGt),l.td=function(e){men(this.a,this.b,u(e,46))},F(Sy,"SplineEdgeRouter/lambda$2$Type",1456),D(1457,1,Un,kGt),l.td=function(e){yen(this.a,this.b,u(e,46))},F(Sy,"SplineEdgeRouter/lambda$3$Type",1457),D(128,1,{35:1,128:1},voe,vxt),l.wd=function(e){return UKe(this,u(e,128))},l.b=0,l.e=!1,l.f=0,l.g=0,l.j=!1,l.k=!1,l.n=0,l.o=!1,l.p=!1,l.q=!1,l.s=0,l.u=0,l.v=0,l.F=0,F(Sy,"SplineSegment",128),D(459,1,{459:1},YT),l.a=0,l.b=!1,l.c=!1,l.d=!1,l.e=!1,l.f=0,F(Sy,"SplineSegment/EdgeInformation",459),D(1234,1,{},GQ),F(G_,d6t,1234),D(1235,1,Oi,UQ),l.ue=function(e,n){return nbn(u(e,135),u(n,135))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(G_,n1e,1235),D(1233,1,{},qHt),F(G_,"MrTree",1233),D(393,22,{3:1,35:1,22:1,393:1,246:1,234:1},rj),l.Kf=function(){return Hoe(this)},l.Xf=function(){return Hoe(this)};var AG,RS,$O,jS,s_t=jr(G_,"TreeLayoutPhases",393,Hr,Rsn,ltn),fye;D(1130,209,S2,cYt),l.Ze=function(e,n){var r,s,o,h,d,v,k;for(je(Re(qe(e,(gv(),h_t))))||y$((r=new rr((Pm(),new Mm(e))),r)),d=(v=new j$,Mo(v,e),Jt(v,(fc(),qS),e),k=new _r,Wmn(e,v,k),lyn(e,v,k),v),h=ryn(this.a,d),o=new S(h);o.a"+S$(this.c):"e_"+Hi(this)},F(U_,"TEdge",188),D(135,134,{3:1,135:1,94:1,134:1},j$),l.Ib=function(){var e,n,r,s,o;for(o=null,s=ei(this.b,0);s.b!=s.d.c;)r=u(ti(s),86),o+=(r.c==null||r.c.length==0?"n_"+r.g:"n_"+r.c)+` -`;for(n=ei(this.a,0);n.b!=n.d.c;)e=u(ti(n),188),o+=(e.b&&e.c?S$(e.b)+"->"+S$(e.c):"e_"+Hi(e))+` -`;return o};var g6n=F(U_,"TGraph",135);D(633,502,{3:1,502:1,633:1,94:1,134:1}),F(U_,"TShape",633),D(86,633,{3:1,502:1,86:1,633:1,94:1,134:1},Dit),l.Ib=function(){return S$(this)};var p6n=F(U_,"TNode",86);D(255,1,r0,Lp),l.Jc=function(e){va(this,e)},l.Kc=function(){var e;return e=ei(this.a.d,0),new Ex(e)},F(U_,"TNode/2",255),D(358,1,sa,Ex),l.Nb=function(e){ba(this,e)},l.Pb=function(){return u(ti(this.a),188).c},l.Ob=function(){return OR(this.a)},l.Qb=function(){tz(this.a)},F(U_,"TNode/2/1",358),D(1840,1,os,oYt),l.pf=function(e,n){_yn(this,u(e,135),n)},F(A6,"FanProcessor",1840),D(327,22,{3:1,35:1,22:1,327:1,234:1},r9),l.Kf=function(){switch(this.g){case 0:return new Wqt;case 1:return new oYt;case 2:return new ix;case 3:return new rZ;case 4:return new sZ;case 5:return new RL;default:throw it(new Fn(Yot+(this.f!=null?this.f:""+this.g)))}};var Iht,Oht,Pht,Fht,Nht,LG,dye=jr(A6,T6t,327,Hr,ton,htn),gye;D(1843,1,os,rZ),l.pf=function(e,n){c2n(this,u(e,135),n)},l.a=0,F(A6,"LevelHeightProcessor",1843),D(1844,1,r0,iZ),l.Jc=function(e){va(this,e)},l.Kc=function(){return wn(),h8(),a7},F(A6,"LevelHeightProcessor/1",1844),D(1841,1,os,ix),l.pf=function(e,n){ppn(this,u(e,135),n)},l.a=0,F(A6,"NeighborsProcessor",1841),D(1842,1,r0,QN),l.Jc=function(e){va(this,e)},l.Kc=function(){return wn(),h8(),a7},F(A6,"NeighborsProcessor/1",1842),D(1845,1,os,sZ),l.pf=function(e,n){o2n(this,u(e,135),n)},l.a=0,F(A6,"NodePositionProcessor",1845),D(1839,1,os,Wqt),l.pf=function(e,n){O3n(this,u(e,135))},F(A6,"RootProcessor",1839),D(1846,1,os,RL),l.pf=function(e,n){qln(u(e,135))},F(A6,"Untreeifyer",1846);var zO,$S,pye,Bht,MG,zS,Rht,DG,IG,M7,qS,OG,np,a_t,bye,jht,Xy,$ht,o_t;D(851,1,Oh,D3),l.Qe=function(e){an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Hkt),""),"Weighting of Nodes"),"Which weighting to use when computing a node order."),u_t),(Ug(),us)),b_t),un((Qf(),qn))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Vkt),""),"Search Order"),"Which search order to use when computing a spanning tree."),c_t),us),v_t),un(qn)))),phe((new JL,e))};var wye,c_t,vye,u_t;F(EH,"MrTreeMetaDataProvider",851),D(994,1,Oh,JL),l.Qe=function(e){phe(e)};var mye,l_t,yye,xye,kye,Eye,h_t,Tye,f_t,Cye,PG,d_t,_ye,g_t,Sye;F(EH,"MrTreeOptions",994),D(995,1,{},aZ),l.$e=function(){var e;return e=new cYt,e},l._e=function(e){},F(EH,"MrTreeOptions/MrtreeFactory",995),D(480,22,{3:1,35:1,22:1,480:1},Ybt);var zht,p_t,b_t=jr(EH,"OrderWeighting",480,Hr,Yrn,ftn),Aye;D(425,22,{3:1,35:1,22:1,425:1},Kbt);var w_t,qht,v_t=jr(EH,"TreeifyingOrder",425,Hr,Wrn,gtn),Lye;D(1459,1,zc,ZL),l.Yf=function(e){return u(e,135),Mye},l.pf=function(e,n){zcn(this,u(e,135),n)};var Mye;F("org.eclipse.elk.alg.mrtree.p1treeify","DFSTreeifyer",1459),D(1460,1,zc,ctt),l.Yf=function(e){return u(e,135),Dye},l.pf=function(e,n){Cpn(this,u(e,135),n)};var Dye;F("org.eclipse.elk.alg.mrtree.p2order","NodeOrderer",1460),D(1461,1,zc,ott),l.Yf=function(e){return u(e,135),Iye},l.pf=function(e,n){qvn(this,u(e,135),n)},l.a=0;var Iye;F("org.eclipse.elk.alg.mrtree.p3place","NodePlacer",1461),D(1462,1,zc,GB),l.Yf=function(e){return u(e,135),Oye},l.pf=function(e,n){gdn(u(e,135),n)};var Oye;F("org.eclipse.elk.alg.mrtree.p4route","EdgeRouter",1462);var HS;D(495,22,{3:1,35:1,22:1,495:1,246:1,234:1},Xbt),l.Kf=function(){return xie(this)},l.Xf=function(){return xie(this)};var FG,D7,m_t=jr(Gkt,"RadialLayoutPhases",495,Hr,Krn,dtn),Pye;D(1131,209,S2,zHt),l.Ze=function(e,n){var r,s,o,h,d,v;if(r=Toe(this,e),vr(n,"Radial layout",r.c.length),je(Re(qe(e,(uy(),L_t))))||y$((s=new rr((Pm(),new Mm(e))),s)),v=D0n(e),wo(e,(m9(),HS),v),!v)throw it(new Fn("The given graph is not a tree!"));for(o=Xt(ye(qe(e,RG))),o==0&&(o=Roe(e)),wo(e,RG,o),d=new S(Toe(this,e));d.a0&&Ure((Rr(n-1,e.length),e.charCodeAt(n-1)),d1e);)--n;if(s>=n)throw it(new Fn("The given string does not contain any numbers."));if(o=vy(e.substr(s,n-s),`,|;|\r| -`),o.length!=2)throw it(new Fn("Exactly two numbers are expected, "+o.length+" were found."));try{this.a=dy(fy(o[0])),this.b=dy(fy(o[1]))}catch(h){throw h=Wi(h),_t(h,127)?(r=h,it(new Fn(g1e+r))):it(h)}},l.Ib=function(){return"("+this.a+","+this.b+")"},l.a=0,l.b=0;var Ws=F(WI,"KVector",8);D(74,68,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1,74:1,414:1},Pu,DR,MWt),l.Pc=function(){return tln(this)},l.Jf=function(e){var n,r,s,o,h,d;s=vy(e,`,|;|\\(|\\)|\\[|\\]|\\{|\\}| | | -`),Ah(this);try{for(r=0,h=0,o=0,d=0;r0&&(h%2==0?o=dy(s[r]):d=dy(s[r]),h>0&&h%2!=0&&ri(this,new $e(o,d)),++h),++r}catch(v){throw v=Wi(v),_t(v,127)?(n=v,it(new Fn("The given string does not match the expected format for vectors."+n))):it(v)}},l.Ib=function(){var e,n,r;for(e=new Ol("("),n=ei(this,0);n.b!=n.d.c;)r=u(ti(n),8),Gr(e,r.a+","+r.b),n.b!=n.d.c&&(e.a+="; ");return(e.a+=")",e).a};var ASt=F(WI,"KVectorChain",74);D(248,22,{3:1,35:1,22:1,248:1},i9);var uft,GG,UG,GO,UO,WG,LSt=jr(Fh,"Alignment",248,Hr,Yan,Dtn),J3e;D(979,1,Oh,htt),l.Qe=function(e){lle(e)};var MSt,lft,t4e,DSt,ISt,e4e,OSt,n4e,r4e,PSt,FSt,i4e;F(Fh,"BoxLayouterOptions",979),D(980,1,{},qZ),l.$e=function(){var e;return e=new YZ,e},l._e=function(e){},F(Fh,"BoxLayouterOptions/BoxFactory",980),D(291,22,{3:1,35:1,22:1,291:1},s9);var WO,hft,YO,KO,XO,fft,dft=jr(Fh,"ContentAlignment",291,Hr,Wan,Itn),s4e;D(684,1,Oh,Tp),l.Qe=function(e){an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,ude),""),"Layout Algorithm"),"Select a specific layout algorithm."),(Ug(),I7)),Ae),un((Qf(),qn))))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,lde),""),"Resolved Layout Algorithm"),"Meta data associated with the selected algorithm."),V1),v6n),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,xkt),""),"Alignment"),"Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm."),NSt),us),LSt),un(ea)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,E6),""),"Aspect Ratio"),"The desired aspect ratio of the drawing, that is the quotient of width by height."),Oo),la),un(qn)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,p8t),""),"Bend Points"),"A fixed list of bend points for the edge. This is used by the 'Fixed Layout' algorithm to specify a pre-defined routing for an edge. The vector chain must include the source point, any bend points, and the target point, so it must have at least two points."),V1),ASt),un(Pd)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,mH),""),"Content Alignment"),"Specifies how the content of a node are aligned. Each node can individually control the alignment of its contents. I.e. if a node should be aligned top left in its parent node, the parent node should specify that option."),RSt),U6),dft),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,JI),""),"Debug Mode"),"Whether additional debug information shall be generated."),(Nn(),!1)),La),Rs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Tkt),""),i6t),"Overall direction of edges: horizontal (right / left) or vertical (down / up)."),jSt),us),XS),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,QI),""),"Edge Routing"),"What kind of edge routing style should be applied for the content of a parent node. Algorithms may also set this option to single edges in order to mark them as splines. The bend point list of edges with this option set to SPLINES must be interpreted as control points for a piecewise cubic spline."),qSt),us),_ft),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,CH),""),"Expand Nodes"),"If active, nodes are expanded to fill the area of their parent."),!1),La),Rs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,vH),""),"Hierarchy Handling"),"Determines whether separate layout runs are triggered for different compound nodes in a hierarchical graph. Setting a node's hierarchy handling to `INCLUDE_CHILDREN` will lay out that node and all of its descendants in a single layout run, until a descendant is encountered which has its hierarchy handling set to `SEPARATE_CHILDREN`. In general, `SEPARATE_CHILDREN` will ensure that a new layout run is triggered for a node with that setting. Including multiple levels of hierarchy in a single layout run may allow cross-hierarchical edges to be laid out properly. If the root node is set to `INHERIT` (or not set at all), the default behavior is `SEPARATE_CHILDREN`."),USt),us),DAt),ji(qn,lt(ct(ip,1),oe,175,0,[ea]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,xv),""),"Padding"),"The padding to be left to a parent element's border when placing child elements. This can also serve as an output option of a layout algorithm if node size calculation is setup appropriately."),nAt),V1),B7t),ji(qn,lt(ct(ip,1),oe,175,0,[ea]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,GI),""),"Interactive"),"Whether the algorithm should be run in interactive mode for the content of a parent node. What this means exactly depends on how the specific algorithm interprets this option. Usually in the interactive mode algorithms try to modify the current layout as little as possible."),!1),La),Rs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,_ct),""),"interactive Layout"),"Whether the graph should be changeable interactively and by setting constraints"),!1),La),Rs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,j_),""),"Omit Node Micro Layout"),"Node micro layout comprises the computation of node dimensions (if requested), the placement of ports and their labels, and the placement of node labels. The functionality is implemented independent of any specific layout algorithm and shouldn't have any negative impact on the layout algorithm's performance itself. Yet, if any unforeseen behavior occurs, this option allows to deactivate the micro layout."),!1),La),Rs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Got),""),"Port Constraints"),"Defines constraints of the position of the ports of a node."),oAt),us),PAt),un(ea)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,yH),""),"Position"),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),V1),Ws),ji(ea,lt(ct(ip,1),oe,175,0,[V2,rp]))))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,VI),""),"Priority"),"Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used."),gc),ja),ji(ea,lt(ct(ip,1),oe,175,0,[Pd]))))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,tH),""),"Randomization Seed"),"Seed used for pseudo-random number generators to control the layout algorithm. If the value is 0, the seed shall be determined pseudo-randomly (e.g. from the system time)."),gc),ja),un(qn)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,R_),""),"Separate Connected Components"),"Whether each connected component should be processed separately."),La),Rs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Okt),""),"Junction Points"),"This option is not used as option, but as output of the layout algorithms. It is attached to edges and determines the points where junction symbols should be drawn in order to represent hyperedges with orthogonal routing. Whether such points are computed depends on the chosen layout algorithm and edge routing style. The points are put into the vector chain with no specific order."),YSt),V1),ASt),un(Pd)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Nkt),""),"Comment Box"),"Whether the node should be regarded as a comment box instead of a regular node. In that case its placement should be similar to how labels are handled. Any edges incident to a comment box specify to which graph elements the comment is related."),!1),La),Rs),un(ea)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Bkt),""),"Hypernode"),"Whether the node should be handled as a hypernode."),!1),La),Rs),un(ea)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Uxn),""),"Label Manager"),"Label managers can shorten labels upon a layout algorithm's request."),V1),E6n),ji(qn,lt(ct(ip,1),oe,175,0,[rp]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,jkt),""),"Margins"),"Margins define additional space around the actual bounds of a graph element. For instance, ports or labels being placed on the outside of a node's border might introduce such a margin. The margin is used to guarantee non-overlap of other graph elements with those ports or labels."),KSt),V1),N7t),un(ea)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,mkt),""),"No Layout"),"No layout is done for the associated element. This is used to mark parts of a diagram to avoid their inclusion in the layout graph, or to mark parts of the layout graph to prevent layout engines from processing them. If you wish to exclude the contents of a compound node from automatic layout, while the node itself is still considered on its own layer, use the 'Fixed Layout' algorithm for that node."),!1),La),Rs),ji(ea,lt(ct(ip,1),oe,175,0,[Pd,V2,rp]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,hde),""),"Scale Factor"),"The scaling factor to be applied to the corresponding node in recursive layout. It causes the corresponding node's size to be adjusted, and its ports and labels to be sized and placed accordingly after the layout of that node has been determined (and before the node itself and its siblings are arranged). The scaling is not reverted afterwards, so the resulting layout graph contains the adjusted size and position data. This option is currently not supported if 'Layout Hierarchy' is set."),1),Oo),la),un(ea)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,fde),""),"Animate"),"Whether the shift from the old layout to the new computed layout shall be animated."),!0),La),Rs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,dde),""),"Animation Time Factor"),"Factor for computation of animation time. The higher the value, the longer the animation time. If the value is 0, the resulting time is always equal to the minimum defined by 'Minimal Animation Time'."),pe(100)),gc),ja),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,gde),""),"Layout Ancestors"),"Whether the hierarchy levels on the path from the selected element to the root of the diagram shall be included in the layout process."),!1),La),Rs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,pde),""),"Maximal Animation Time"),"The maximal time for animations, in milliseconds."),pe(4e3)),gc),ja),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,bde),""),"Minimal Animation Time"),"The minimal time for animations, in milliseconds."),pe(400)),gc),ja),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,wde),""),"Progress Bar"),"Whether a progress bar shall be displayed during layout computations."),!1),La),Rs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,vde),""),"Validate Graph"),"Whether the graph shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!1),La),Rs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,mde),""),"Validate Options"),"Whether layout options shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!0),La),Rs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,yde),""),"Zoom to Fit"),"Whether the zoom level shall be set to view the whole diagram after layout."),!1),La),Rs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,g8t),"box"),"Box Layout Mode"),"Configures the packing mode used by the {@link BoxLayoutProvider}. If SIMPLE is not required (neither priorities are used nor the interactive mode), GROUP_DEC can improve the packing and decrease the area. GROUP_MIXED and GROUP_INC may, in very specific scenarios, work better."),BSt),us),$At),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,okt),R1),"Comment Comment Spacing"),"Spacing to be preserved between a comment box and other comment boxes connected to the same node. The space left between comment boxes of different nodes is controlled by the node-node spacing."),10),Oo),la),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ckt),R1),"Comment Node Spacing"),"Spacing to be preserved between a node and its connected comment boxes. The space left between a node and the comments of another node is controlled by the node-node spacing."),10),Oo),la),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,jot),R1),"Components Spacing"),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),20),Oo),la),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ukt),R1),"Edge Spacing"),"Spacing to be preserved between any two edges. Note that while this can somewhat easily be satisfied for the segments of orthogonally drawn edges, it is harder for general polylines or splines."),10),Oo),la),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Vot),R1),"Edge Label Spacing"),"The minimal distance to be preserved between a label and the edge it is associated with. Note that the placement of a label is influenced by the 'edgelabels.placement' option."),2),Oo),la),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,lkt),R1),"Edge Node Spacing"),"Spacing to be preserved between nodes and edges."),10),Oo),la),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,hkt),R1),"Label Spacing"),"Determines the amount of space to be left between two labels of the same graph element."),0),Oo),la),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,gkt),R1),"Label Node Spacing"),"Spacing to be preserved between labels and the border of node they are associated with. Note that the placement of a label is influenced by the 'nodelabels.placement' option."),5),Oo),la),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,fkt),R1),"Horizontal spacing between Label and Port"),"Horizontal spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),Oo),la),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,dkt),R1),"Vertical spacing between Label and Port"),"Vertical spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),Oo),la),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Cy),R1),"Node Spacing"),"The minimal distance to be preserved between each two nodes."),20),Oo),la),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,pkt),R1),"Node Self Loop Spacing"),"Spacing to be preserved between a node and its self loops."),10),Oo),la),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,bkt),R1),"Port Spacing"),"Spacing between pairs of ports of the same node."),10),Oo),la),ji(qn,lt(ct(ip,1),oe,175,0,[ea]))))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,wkt),R1),"Individual Spacing"),"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent."),V1),$4e),ji(ea,lt(ct(ip,1),oe,175,0,[Pd,V2,rp]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,$kt),R1),"Additional Port Space"),"Additional space around the sets of ports on each node side. For each side of a node, this option can reserve additional space before and after the ports on each side. For example, a top spacing of 20 makes sure that the first port on the western and eastern side is 20 units away from the northern border."),wAt),V1),N7t),un(qn)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Cct),Ede),"Layout Partition"),"Partition to which the node belongs. This requires Layout Partitioning to be active. Nodes with lower partition IDs will appear to the left of nodes with higher partition IDs (assuming a left-to-right layout direction)."),gc),ja),ji(qn,lt(ct(ip,1),oe,175,0,[ea]))))),ca(e,Cct,Tct,d4e),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Tct),Ede),"Layout Partitioning"),"Whether to activate partitioned layout. This will allow to group nodes through the Layout Partition option. a pair of nodes with different partition indices is then placed such that the node with lower index is placed to the left of the other node (with left-to-right layout direction). Depending on the layout algorithm, this may only be guaranteed to work if all nodes have a layout partition configured, or at least if edges that cross partitions are not part of a partition-crossing cycle."),rAt),La),Rs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Ckt),Tde),"Node Label Padding"),"Define padding for node labels that are placed inside of a node."),QSt),V1),B7t),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,UE),Tde),"Node Label Placement"),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),ZSt),U6),lo),ji(ea,lt(ct(ip,1),oe,175,0,[rp]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Akt),SH),"Port Alignment"),"Defines the default port distribution for a node. May be overridden for each side individually."),sAt),us),tA),un(ea)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Lkt),SH),"Port Alignment (North)"),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),us),tA),un(ea)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Mkt),SH),"Port Alignment (South)"),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),us),tA),un(ea)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Dkt),SH),"Port Alignment (West)"),"Defines how ports on the western side are placed, overriding the node's general port alignment."),us),tA),un(ea)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Ikt),SH),"Port Alignment (East)"),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),us),tA),un(ea)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,D4),Gct),"Node Size Constraints"),"What should be taken into account when calculating a node's size. Empty size constraints specify that a node's size is already fixed and should not be changed."),JSt),U6),rA),un(ea)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,T6),Gct),"Node Size Options"),"Options modifying the behavior of the size constraints set on a node. Each member of the set specifies something that should be taken into account when calculating node sizes. The empty set corresponds to no further modifications."),eAt),U6),NAt),un(ea)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,C6),Gct),"Node Size Minimum"),"The minimal size to which a node can be reduced."),tAt),V1),Ws),un(ea)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Ect),Gct),"Fixed Graph Size"),"By default, the fixed layout provider will enlarge a graph until it is large enough to contain its children. If this option is set, it won't do so."),!1),La),Rs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Pkt),kct),"Edge Label Placement"),"Gives a hint on where to put edge labels."),$St),us),mAt),un(rp)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,eH),kct),"Inline Edge Labels"),"If true, an edge label is placed directly on its edge. May only apply to center edge labels. This kind of label placement is only advisable if the label's rendering is such that it is not crossed by its edge and thus stays legible."),!1),La),Rs),un(rp)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Wxn),"font"),"Font Name"),"Font name used for a label."),I7),Ae),un(rp)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,xde),"font"),"Font Size"),"Font size used for a label."),gc),ja),un(rp)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Rkt),Uct),"Port Anchor Offset"),"The offset to the port position where connections shall be attached."),V1),Ws),un(V2)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Fkt),Uct),"Port Index"),"The index of a port in the fixed order around a node. The order is assumed as clockwise, starting with the leftmost port on the top side. This option must be set if 'Port Constraints' is set to FIXED_ORDER and no specific positions are given for the ports. Additionally, the option 'Port Side' must be defined in this case."),gc),ja),un(V2)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ykt),Uct),"Port Side"),"The side of a node on which a port is situated. This option must be set if 'Port Constraints' is set to FIXED_SIDE or FIXED_ORDER and no specific positions are given for the ports."),lAt),us),Xa),un(V2)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,vkt),Uct),"Port Border Offset"),"The offset of ports on the node border. With a positive offset the port is moved outside of the node, while with a negative offset the port is moved towards the inside. An offset of 0 means that the port is placed directly on the node border, i.e. if the port side is north, the port's south border touches the nodes's north border; if the port side is east, the port's west border touches the nodes's east border; if the port side is south, the port's north border touches the node's south border; if the port side is west, the port's east border touches the node's west border."),Oo),la),un(V2)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,WE),b8t),"Port Label Placement"),"Decides on a placement method for port labels; if empty, the node label's position is not modified."),cAt),U6),eU),un(ea)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,_kt),b8t),"Port Labels Next to Port"),"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE."),!1),La),Rs),un(ea)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Skt),b8t),"Treat Port Labels as Group"),"If this option is true (default), the labels of a port will be treated as a group when it comes to centering them next to their port. If this option is false, only the first label will be centered next to the port, with the others being placed below. This only applies to labels of eastern and western ports and will have no effect if labels are not placed next to their port."),!0),La),Rs),un(ea)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,kkt),Cde),"Activate Inside Self Loops"),"Whether this node allows to route self loops inside of it instead of around it. If set to true, this will make the node a compound node if it isn't already, and will require the layout algorithm to support compound nodes with hierarchical ports."),!1),La),Rs),un(ea)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Ekt),Cde),"Inside Self Loop"),"Whether a self loop should be routed inside a node instead of around that node."),!1),La),Rs),un(Pd)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,$ot),"edge"),"Edge Thickness"),"The thickness of an edge. This is a hint on the line width used to draw an edge, possibly requiring more space to be reserved for it."),1),Oo),la),un(Pd)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,kde),"edge"),"Edge Type"),"The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations."),VSt),us),CAt),un(Pd)))),WC(e,new Yx(zC(o8(a8(new xm,Gn),"Layered"),'The layer-based method was introduced by Sugiyama, Tagawa and Toda in 1981. It emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers, which are sometimes called "hierarchies", and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.'))),WC(e,new Yx(zC(o8(a8(new xm,"org.eclipse.elk.orthogonal"),"Orthogonal"),`Orthogonal methods that follow the "topology-shape-metrics" approach by Batini, Nardelli and Tamassia '86. The first phase determines the topology of the drawing by applying a planarization technique, which results in a planar representation of the graph. The orthogonal shape is computed in the second phase, which aims at minimizing the number of edge bends, and is called orthogonalization. The third phase leads to concrete coordinates for nodes and edge bend points by applying a compaction method, thus defining the metrics.`))),WC(e,new Yx(zC(o8(a8(new xm,Vl),"Force"),"Layout algorithms that follow physical analogies by simulating a system of attractive and repulsive forces. The first successful method of this kind was proposed by Eades in 1984."))),WC(e,new Yx(zC(o8(a8(new xm,"org.eclipse.elk.circle"),"Circle"),"Circular layout algorithms emphasize cycles or biconnected components of a graph by arranging them in circles. This is useful if a drawing is desired where such components are clearly grouped, or where cycles are shown as prominent OPTIONS of the graph."))),WC(e,new Yx(zC(o8(a8(new xm,K1e),"Tree"),"Specialized layout methods for trees, i.e. acyclic graphs. The regular structure of graphs that have no undirected cycles can be emphasized using an algorithm of this type."))),WC(e,new Yx(zC(o8(a8(new xm,"org.eclipse.elk.planar"),"Planar"),"Algorithms that require a planar or upward planar graph. Most of these algorithms are theoretically interesting, but not practically usable."))),WC(e,new Yx(zC(o8(a8(new xm,Sd),"Radial"),"Radial layout algorithms usually position the nodes of the graph on concentric circles."))),Kue((new QB,e)),lle((new htt,e)),Cue((new ZB,e))};var YS,a4e,NSt,W6,o4e,c4e,BSt,u4e,YG,RSt,QO,qv,jSt,gft,pft,$St,zSt,qSt,HSt,VSt,GSt,s5,USt,l4e,ZO,bft,KG,WSt,a5,YSt,JO,KSt,XSt,QSt,o5,ZSt,G2,JSt,XG,c5,tAt,xb,eAt,QG,tP,U2,nAt,h4e,rAt,f4e,d4e,iAt,sAt,wft,vft,mft,yft,aAt,dl,KS,oAt,xft,kft,Qy,cAt,uAt,u5,lAt,Y6,ZG,Eft,O7,g4e,Tft,p4e,b4e,hAt,w4e,fAt,v4e,K6,dAt,JG,gAt,pAt,W2,m4e,bAt,wAt,vAt;F(Fh,"CoreOptions",684),D(103,22,{3:1,35:1,22:1,103:1},PM);var ng,zh,Cf,h0,rg,XS=jr(Fh,i6t,103,Hr,ban,Ftn),y4e;D(272,22,{3:1,35:1,22:1,272:1},Zet);var P7,Zy,F7,mAt=jr(Fh,"EdgeLabelPlacement",272,Hr,Xin,Ntn),x4e;D(218,22,{3:1,35:1,22:1,218:1},sj);var N7,eP,X6,Cft,_ft=jr(Fh,"EdgeRouting",218,Hr,qsn,Btn),k4e;D(312,22,{3:1,35:1,22:1,312:1},a9);var yAt,xAt,kAt,EAt,Sft,TAt,CAt=jr(Fh,"EdgeType",312,Hr,non,Rtn),E4e;D(977,1,Oh,QB),l.Qe=function(e){Kue(e)};var _At,SAt,AAt,LAt,T4e,MAt,QS;F(Fh,"FixedLayouterOptions",977),D(978,1,{},qL),l.$e=function(){var e;return e=new UZ,e},l._e=function(e){},F(Fh,"FixedLayouterOptions/FixedFactory",978),D(334,22,{3:1,35:1,22:1,334:1},Jet);var sp,tU,ZS,DAt=jr(Fh,"HierarchyHandling",334,Hr,Kin,jtn),C4e;D(285,22,{3:1,35:1,22:1,285:1},aj);var f0,kb,nP,rP,_4e=jr(Fh,"LabelSide",285,Hr,zsn,$tn),S4e;D(93,22,{3:1,35:1,22:1,93:1},q3);var ig,_f,qh,Sf,Yl,Af,Hh,d0,Lf,lo=jr(Fh,"NodeLabelPlacement",93,Hr,scn,ztn),A4e;D(249,22,{3:1,35:1,22:1,249:1},FM);var IAt,JS,Eb,OAt,iP,tA=jr(Fh,"PortAlignment",249,Hr,wan,qtn),L4e;D(98,22,{3:1,35:1,22:1,98:1},o9);var Y2,Gc,g0,B7,G1,Tb,PAt=jr(Fh,"PortConstraints",98,Hr,jan,Htn),M4e;D(273,22,{3:1,35:1,22:1,273:1},c9);var eA,nA,sg,sP,Cb,Q6,eU=jr(Fh,"PortLabelPlacement",273,Hr,eon,Vtn),D4e;D(61,22,{3:1,35:1,22:1,61:1},NM);var Hn,Pn,mh,yh,Su,lu,U1,Mf,el,Vu,Uc,nl,Au,Lu,Df,Kl,Xl,Vh,mr,Zo,Bn,Xa=jr(Fh,"PortSide",61,Hr,dan,Wtn),I4e;D(981,1,Oh,ZB),l.Qe=function(e){Cue(e)};var O4e,P4e,FAt,F4e,N4e;F(Fh,"RandomLayouterOptions",981),D(982,1,{},ZZ),l.$e=function(){var e;return e=new tJ,e},l._e=function(e){},F(Fh,"RandomLayouterOptions/RandomFactory",982),D(374,22,{3:1,35:1,22:1,374:1},oj);var Jy,aP,oP,K2,rA=jr(Fh,"SizeConstraint",374,Hr,$sn,Gtn),B4e;D(259,22,{3:1,35:1,22:1,259:1},H3);var cP,nU,R7,Aft,uP,iA,rU,iU,sU,NAt=jr(Fh,"SizeOptions",259,Hr,fcn,Utn),R4e;D(370,1,{1949:1},r8),l.b=!1,l.c=0,l.d=-1,l.e=null,l.f=null,l.g=-1,l.j=!1,l.k=!1,l.n=!1,l.o=0,l.q=0,l.r=0,F(Ec,"BasicProgressMonitor",370),D(972,209,S2,YZ),l.Ze=function(e,n){var r,s,o,h,d,v,k,C,M;switch(vr(n,"Box layout",2),o=pM(ye(qe(e,(fq(),i4e)))),h=u(qe(e,r4e),116),r=je(Re(qe(e,DSt))),s=je(Re(qe(e,ISt))),u(qe(e,lft),311).g){case 0:d=(v=new Bu((!e.a&&(e.a=new fe(rs,e,10,11)),e.a)),wn(),Zs(v,new ozt(s)),v),k=Q4t(e),C=ye(qe(e,MSt)),(C==null||(On(C),C<=0))&&(C=1.3),M=Q5n(d,o,h,k.a,k.b,r,(On(C),C)),wv(e,M.a,M.b,!1,!0);break;default:W3n(e,o,h,r)}or(n)},F(Ec,"BoxLayoutProvider",972),D(973,1,Oi,ozt),l.ue=function(e,n){return pwn(this,u(e,33),u(n,33))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},l.a=!1,F(Ec,"BoxLayoutProvider/1",973),D(157,1,{157:1},rz,LWt),l.Ib=function(){return this.c?X5t(this.c):eb(this.b)},F(Ec,"BoxLayoutProvider/Group",157),D(311,22,{3:1,35:1,22:1,311:1},cj);var BAt,RAt,jAt,Lft,$At=jr(Ec,"BoxLayoutProvider/PackingMode",311,Hr,Hsn,Ytn),j4e;D(974,1,Oi,KZ),l.ue=function(e,n){return vrn(u(e,157),u(n,157))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(Ec,"BoxLayoutProvider/lambda$0$Type",974),D(975,1,Oi,sB),l.ue=function(e,n){return hrn(u(e,157),u(n,157))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(Ec,"BoxLayoutProvider/lambda$1$Type",975),D(976,1,Oi,XZ),l.ue=function(e,n){return frn(u(e,157),u(n,157))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(Ec,"BoxLayoutProvider/lambda$2$Type",976),D(1365,1,{831:1},QZ),l.qg=function(e,n){return HR(),!_t(n,160)||jHt((i6(),u(e,160)),n)},F(Ec,"ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type",1365),D(1366,1,Un,czt),l.td=function(e){nln(this.a,u(e,146))},F(Ec,"ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type",1366),D(1367,1,Un,WZ),l.td=function(e){u(e,94),HR()},F(Ec,"ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type",1367),D(1371,1,Un,uzt),l.td=function(e){Scn(this.a,u(e,94))},F(Ec,"ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type",1371),D(1369,1,li,CGt),l.Mb=function(e){return qun(this.a,this.b,u(e,146))},F(Ec,"ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type",1369),D(1368,1,li,_Gt),l.Mb=function(e){return sZe(this.a,this.b,u(e,831))},F(Ec,"ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type",1368),D(1370,1,Un,SGt),l.td=function(e){snn(this.a,this.b,u(e,146))},F(Ec,"ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type",1370),D(935,1,{},GZ),l.Kb=function(e){return SUt(e)},l.Fb=function(e){return this===e},F(Ec,"ElkUtil/lambda$0$Type",935),D(936,1,Un,AGt),l.td=function(e){wbn(this.a,this.b,u(e,79))},l.a=0,l.b=0,F(Ec,"ElkUtil/lambda$1$Type",936),D(937,1,Un,LGt),l.td=function(e){wKe(this.a,this.b,u(e,202))},l.a=0,l.b=0,F(Ec,"ElkUtil/lambda$2$Type",937),D(938,1,Un,MGt),l.td=function(e){cQe(this.a,this.b,u(e,137))},l.a=0,l.b=0,F(Ec,"ElkUtil/lambda$3$Type",938),D(939,1,Un,lzt),l.td=function(e){xen(this.a,u(e,469))},F(Ec,"ElkUtil/lambda$4$Type",939),D(342,1,{35:1,342:1},WYe),l.wd=function(e){return NQe(this,u(e,236))},l.Fb=function(e){var n;return _t(e,342)?(n=u(e,342),this.a==n.a):!1},l.Hb=function(){return ps(this.a)},l.Ib=function(){return this.a+" (exclusive)"},l.a=0,F(Ec,"ExclusiveBounds/ExclusiveLowerBound",342),D(1138,209,S2,UZ),l.Ze=function(e,n){var r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt,St,Rt,Kt,ue,_e,We,Qe;for(vr(n,"Fixed Layout",1),h=u(qe(e,(ui(),zSt)),218),j=0,H=0,St=new nr((!e.a&&(e.a=new fe(rs,e,10,11)),e.a));St.e!=St.i.gc();){for(gt=u(dr(St),33),Qe=u(qe(gt,(Sz(),QS)),8),Qe&&(x1(gt,Qe.a,Qe.b),u(qe(gt,SAt),174).Hc((Al(),Jy))&&(G=u(qe(gt,LAt),8),G.a>0&&G.b>0&&wv(gt,G.a,G.b,!0,!0))),j=b.Math.max(j,gt.i+gt.g),H=b.Math.max(H,gt.j+gt.f),C=new nr((!gt.n&&(gt.n=new fe(qo,gt,1,7)),gt.n));C.e!=C.i.gc();)v=u(dr(C),137),Qe=u(qe(v,QS),8),Qe&&x1(v,Qe.a,Qe.b),j=b.Math.max(j,gt.i+v.i+v.g),H=b.Math.max(H,gt.j+v.j+v.f);for(ue=new nr((!gt.c&&(gt.c=new fe(gl,gt,9,9)),gt.c));ue.e!=ue.i.gc();)for(Kt=u(dr(ue),118),Qe=u(qe(Kt,QS),8),Qe&&x1(Kt,Qe.a,Qe.b),_e=gt.i+Kt.i,We=gt.j+Kt.j,j=b.Math.max(j,_e+Kt.g),H=b.Math.max(H,We+Kt.f),k=new nr((!Kt.n&&(Kt.n=new fe(qo,Kt,1,7)),Kt.n));k.e!=k.i.gc();)v=u(dr(k),137),Qe=u(qe(v,QS),8),Qe&&x1(v,Qe.a,Qe.b),j=b.Math.max(j,_e+v.i+v.g),H=b.Math.max(H,We+v.j+v.f);for(o=new ar(lr(K0(gt).a.Kc(),new z));zr(o);)r=u(Mr(o),79),M=$he(r),j=b.Math.max(j,M.a),H=b.Math.max(H,M.b);for(s=new ar(lr(wI(gt).a.Kc(),new z));zr(s);)r=u(Mr(s),79),es(e0(r))!=e&&(M=$he(r),j=b.Math.max(j,M.a),H=b.Math.max(H,M.b))}if(h==(W0(),N7))for(Mt=new nr((!e.a&&(e.a=new fe(rs,e,10,11)),e.a));Mt.e!=Mt.i.gc();)for(gt=u(dr(Mt),33),s=new ar(lr(K0(gt).a.Kc(),new z));zr(s);)r=u(Mr(s),79),d=gyn(r),d.b==0?wo(r,a5,null):wo(r,a5,d);je(Re(qe(e,(Sz(),AAt))))||(Rt=u(qe(e,T4e),116),tt=j+Rt.b+Rt.c,K=H+Rt.d+Rt.a,wv(e,tt,K,!0,!0)),or(n)},F(Ec,"FixedLayoutProvider",1138),D(373,134,{3:1,414:1,373:1,94:1,134:1},Yu,ree),l.Jf=function(e){var n,r,s,o,h,d,v,k,C;if(e)try{for(k=vy(e,";,;"),h=k,d=0,v=h.length;d>16&ys|n^s<<16},l.Kc=function(){return new hzt(this)},l.Ib=function(){return this.a==null&&this.b==null?"pair(null,null)":this.a==null?"pair(null,"+$o(this.b)+")":this.b==null?"pair("+$o(this.a)+",null)":"pair("+$o(this.a)+","+$o(this.b)+")"},F(Ec,"Pair",46),D(983,1,sa,hzt),l.Nb=function(e){ba(this,e)},l.Ob=function(){return!this.c&&(!this.b&&this.a.a!=null||this.a.b!=null)},l.Pb=function(){if(!this.c&&!this.b&&this.a.a!=null)return this.b=!0,this.a.a;if(!this.c&&this.a.b!=null)return this.c=!0,this.a.b;throw it(new lc)},l.Qb=function(){throw this.c&&this.a.b!=null?this.a.b=null:this.b&&this.a.a!=null&&(this.a.a=null),it(new Ou)},l.b=!1,l.c=!1,F(Ec,"Pair/1",983),D(448,1,{448:1},zXt),l.Fb=function(e){return Fc(this.a,u(e,448).a)&&Fc(this.c,u(e,448).c)&&Fc(this.d,u(e,448).d)&&Fc(this.b,u(e,448).b)},l.Hb=function(){return Az(lt(ct(Qn,1),De,1,5,[this.a,this.c,this.d,this.b]))},l.Ib=function(){return"("+this.a+Ya+this.c+Ya+this.d+Ya+this.b+")"},F(Ec,"Quadruple",448),D(1126,209,S2,tJ),l.Ze=function(e,n){var r,s,o,h,d;if(vr(n,"Random Layout",1),(!e.a&&(e.a=new fe(rs,e,10,11)),e.a).i==0){or(n);return}h=u(qe(e,(S3t(),F4e)),19),h&&h.a!=0?o=new F$(h.a):o=new Zit,r=pM(ye(qe(e,O4e))),d=pM(ye(qe(e,N4e))),s=u(qe(e,P4e),116),A5n(e,o,r,d,s),or(n)},F(Ec,"RandomLayoutProvider",1126);var H4e;D(553,1,{}),l.qf=function(){return new $e(this.f.i,this.f.j)},l.We=function(e){return dQt(e,(ui(),dl))?qe(this.f,V4e):qe(this.f,e)},l.rf=function(){return new $e(this.f.g,this.f.f)},l.sf=function(){return this.g},l.Xe=function(e){return o2(this.f,e)},l.tf=function(e){ku(this.f,e.a),Eu(this.f,e.b)},l.uf=function(e){tv(this.f,e.a),Jw(this.f,e.b)},l.vf=function(e){this.g=e},l.g=0;var V4e;F(K_,"ElkGraphAdapters/AbstractElkGraphElementAdapter",553),D(554,1,{839:1},wR),l.wf=function(){var e,n;if(!this.b)for(this.b=D$(u$(this.a).i),n=new nr(u$(this.a));n.e!=n.i.gc();)e=u(dr(n),137),le(this.b,new get(e));return this.b},l.b=null,F(K_,"ElkGraphAdapters/ElkEdgeAdapter",554),D(301,553,{},Mm),l.xf=function(){return zse(this)},l.a=null,F(K_,"ElkGraphAdapters/ElkGraphAdapter",301),D(630,553,{181:1},get),F(K_,"ElkGraphAdapters/ElkLabelAdapter",630),D(629,553,{680:1},gnt),l.wf=function(){return M1n(this)},l.Af=function(){var e;return e=u(qe(this.f,(ui(),JO)),142),!e&&(e=new OC),e},l.Cf=function(){return D1n(this)},l.Ef=function(e){var n;n=new Lnt(e),wo(this.f,(ui(),JO),n)},l.Ff=function(e){wo(this.f,(ui(),U2),new kwt(e))},l.yf=function(){return this.d},l.zf=function(){var e,n;if(!this.a)for(this.a=new he,n=new ar(lr(wI(u(this.f,33)).a.Kc(),new z));zr(n);)e=u(Mr(n),79),le(this.a,new wR(e));return this.a},l.Bf=function(){var e,n;if(!this.c)for(this.c=new he,n=new ar(lr(K0(u(this.f,33)).a.Kc(),new z));zr(n);)e=u(Mr(n),79),le(this.c,new wR(e));return this.c},l.Df=function(){return p$(u(this.f,33)).i!=0||je(Re(u(this.f,33).We((ui(),ZO))))},l.Gf=function(){xon(this,(Pm(),H4e))},l.a=null,l.b=null,l.c=null,l.d=null,l.e=null,F(K_,"ElkGraphAdapters/ElkNodeAdapter",629),D(1266,553,{838:1},$zt),l.wf=function(){return j1n(this)},l.zf=function(){var e,n;if(!this.a)for(this.a=Ud(u(this.f,118).xg().i),n=new nr(u(this.f,118).xg());n.e!=n.i.gc();)e=u(dr(n),79),le(this.a,new wR(e));return this.a},l.Bf=function(){var e,n;if(!this.c)for(this.c=Ud(u(this.f,118).yg().i),n=new nr(u(this.f,118).yg());n.e!=n.i.gc();)e=u(dr(n),79),le(this.c,new wR(e));return this.c},l.Hf=function(){return u(u(this.f,118).We((ui(),u5)),61)},l.If=function(){var e,n,r,s,o,h,d,v;for(s=T1(u(this.f,118)),r=new nr(u(this.f,118).yg());r.e!=r.i.gc();)for(e=u(dr(r),79),v=new nr((!e.c&&(e.c=new Cn(br,e,5,8)),e.c));v.e!=v.i.gc();){if(d=u(dr(v),82),ey(Do(d),s))return!0;if(Do(d)==s&&je(Re(qe(e,(ui(),bft)))))return!0}for(n=new nr(u(this.f,118).xg());n.e!=n.i.gc();)for(e=u(dr(n),79),h=new nr((!e.b&&(e.b=new Cn(br,e,4,7)),e.b));h.e!=h.i.gc();)if(o=u(dr(h),82),ey(Do(o),s))return!0;return!1},l.a=null,l.b=null,l.c=null,F(K_,"ElkGraphAdapters/ElkPortAdapter",1266),D(1267,1,Oi,eJ),l.ue=function(e,n){return omn(u(e,118),u(n,118))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(K_,"ElkGraphAdapters/PortComparator",1267);var _b=Ki(ph,"EObject"),j7=Ki(F4,Ade),Gh=Ki(F4,Lde),lP=Ki(F4,Mde),hP=Ki(F4,"ElkShape"),br=Ki(F4,Dde),Ys=Ki(F4,w8t),Ji=Ki(F4,Ide),fP=Ki(ph,Ode),sA=Ki(ph,"EFactory"),G4e,Mft=Ki(ph,Pde),i1=Ki(ph,"EPackage"),na,U4e,W4e,VAt,aU,Y4e,GAt,UAt,WAt,Sb,K4e,X4e,qo=Ki(F4,v8t),rs=Ki(F4,m8t),gl=Ki(F4,y8t);D(90,1,Fde),l.Jg=function(){return this.Kg(),null},l.Kg=function(){return null},l.Lg=function(){return this.Kg(),!1},l.Mg=function(){return!1},l.Ng=function(e){mi(this,e)},F(L6,"BasicNotifierImpl",90),D(97,90,jde),l.nh=function(){return xl(this)},l.Og=function(e,n){return e},l.Pg=function(){throw it(new Or)},l.Qg=function(e){var n;return n=no(u(yn(this.Tg(),this.Vg()),18)),this.eh().ih(this,n.n,n.f,e)},l.Rg=function(e,n){throw it(new Or)},l.Sg=function(e,n,r){return Hl(this,e,n,r)},l.Tg=function(){var e;return this.Pg()&&(e=this.Pg().ck(),e)?e:this.zh()},l.Ug=function(){return eat(this)},l.Vg=function(){throw it(new Or)},l.Wg=function(){var e,n;return n=this.ph().dk(),!n&&this.Pg().ik(n=(YC(),e=jvt(vd(this.Tg())),e==null?Rft:new jM(this,e))),n},l.Xg=function(e,n){return e},l.Yg=function(e){var n;return n=e.Gj(),n?e.aj():Gi(this.Tg(),e)},l.Zg=function(){var e;return e=this.Pg(),e?e.fk():null},l.$g=function(){return this.Pg()?this.Pg().ck():null},l._g=function(e,n,r){return Xz(this,e,n,r)},l.ah=function(e){return j8(this,e)},l.bh=function(e,n){return Urt(this,e,n)},l.dh=function(){var e;return e=this.Pg(),!!e&&e.gk()},l.eh=function(){throw it(new Or)},l.fh=function(){return Hz(this)},l.gh=function(e,n,r,s){return c6(this,e,n,s)},l.hh=function(e,n,r){var s;return s=u(yn(this.Tg(),n),66),s.Nj().Qj(this,this.yh(),n-this.Ah(),e,r)},l.ih=function(e,n,r,s){return m$(this,e,n,s)},l.jh=function(e,n,r){var s;return s=u(yn(this.Tg(),n),66),s.Nj().Rj(this,this.yh(),n-this.Ah(),e,r)},l.kh=function(){return!!this.Pg()&&!!this.Pg().ek()},l.lh=function(e){return fst(this,e)},l.mh=function(e){return MQt(this,e)},l.oh=function(e){return ehe(this,e)},l.ph=function(){throw it(new Or)},l.qh=function(){return this.Pg()?this.Pg().ek():null},l.rh=function(){return Hz(this)},l.sh=function(e,n){Xst(this,e,n)},l.th=function(e){this.ph().hk(e)},l.uh=function(e){this.ph().kk(e)},l.vh=function(e){this.ph().jk(e)},l.wh=function(e,n){var r,s,o,h;return h=this.Zg(),h&&e&&(n=Ba(h.Vk(),this,n),h.Zk(this)),s=this.eh(),s&&(wat(this,this.eh(),this.Vg()).Bb&Ka?(o=s.fh(),o&&(e?!h&&o.Zk(this):o.Yk(this))):(n=(r=this.Vg(),r>=0?this.Qg(n):this.eh().ih(this,-1-r,null,n)),n=this.Sg(null,-1,n))),this.uh(e),n},l.xh=function(e){var n,r,s,o,h,d,v,k;if(r=this.Tg(),h=Gi(r,e),n=this.Ah(),h>=n)return u(e,66).Nj().Uj(this,this.yh(),h-n);if(h<=-1)if(d=C4(($u(),ya),r,e),d){if(to(),u(d,66).Oj()||(d=Kx(To(ya,d))),o=(s=this.Yg(d),u(s>=0?this._g(s,!0,!0):dv(this,d,!0),153)),k=d.Zj(),k>1||k==-1)return u(u(o,215).hl(e,!1),76)}else throw it(new Fn(lb+e.ne()+Wct));else if(e.$j())return s=this.Yg(e),u(s>=0?this._g(s,!1,!0):dv(this,e,!1),76);return v=new XGt(this,e),v},l.yh=function(){return $mt(this)},l.zh=function(){return(Hp(),Ln).S},l.Ah=function(){return Jn(this.zh())},l.Bh=function(e){Gst(this,e)},l.Ib=function(){return mf(this)},F(Mn,"BasicEObjectImpl",97);var Q4e;D(114,97,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1}),l.Ch=function(e){var n;return n=zmt(this),n[e]},l.Dh=function(e,n){var r;r=zmt(this),ts(r,e,n)},l.Eh=function(e){var n;n=zmt(this),ts(n,e,null)},l.Jg=function(){return u(Dn(this,4),126)},l.Kg=function(){throw it(new Or)},l.Lg=function(){return(this.Db&4)!=0},l.Pg=function(){throw it(new Or)},l.Fh=function(e){o6(this,2,e)},l.Rg=function(e,n){this.Db=n<<16|this.Db&255,this.Fh(e)},l.Tg=function(){return vu(this)},l.Vg=function(){return this.Db>>16},l.Wg=function(){var e,n;return YC(),n=jvt(vd((e=u(Dn(this,16),26),e||this.zh()))),n==null?Rft:new jM(this,n)},l.Mg=function(){return(this.Db&1)==0},l.Zg=function(){return u(Dn(this,128),1935)},l.$g=function(){return u(Dn(this,16),26)},l.dh=function(){return(this.Db&32)!=0},l.eh=function(){return u(Dn(this,2),49)},l.kh=function(){return(this.Db&64)!=0},l.ph=function(){throw it(new Or)},l.qh=function(){return u(Dn(this,64),281)},l.th=function(e){o6(this,16,e)},l.uh=function(e){o6(this,128,e)},l.vh=function(e){o6(this,64,e)},l.yh=function(){return su(this)},l.Db=0,F(Mn,"MinimalEObjectImpl",114),D(115,114,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),l.Fh=function(e){this.Cb=e},l.eh=function(){return this.Cb},F(Mn,"MinimalEObjectImpl/Container",115),D(1985,115,{105:1,413:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),l._g=function(e,n,r){return Z3t(this,e,n,r)},l.jh=function(e,n,r){return $4t(this,e,n,r)},l.lh=function(e){return Qvt(this,e)},l.sh=function(e,n){Byt(this,e,n)},l.zh=function(){return Jc(),X4e},l.Bh=function(e){_yt(this,e)},l.Ve=function(){return cse(this)},l.We=function(e){return qe(this,e)},l.Xe=function(e){return o2(this,e)},l.Ye=function(e,n){return wo(this,e,n)},F(M2,"EMapPropertyHolderImpl",1985),D(567,115,{105:1,469:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},xp),l._g=function(e,n,r){switch(e){case 0:return this.a;case 1:return this.b}return Xz(this,e,n,r)},l.lh=function(e){switch(e){case 0:return this.a!=0;case 1:return this.b!=0}return fst(this,e)},l.sh=function(e,n){switch(e){case 0:iz(this,Xt(ye(n)));return;case 1:sz(this,Xt(ye(n)));return}Xst(this,e,n)},l.zh=function(){return Jc(),U4e},l.Bh=function(e){switch(e){case 0:iz(this,0);return;case 1:sz(this,0);return}Gst(this,e)},l.Ib=function(){var e;return this.Db&64?mf(this):(e=new _h(mf(this)),e.a+=" (x: ",$3(e,this.a),e.a+=", y: ",$3(e,this.b),e.a+=")",e.a)},l.a=0,l.b=0,F(M2,"ElkBendPointImpl",567),D(723,1985,{105:1,413:1,160:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),l._g=function(e,n,r){return n3t(this,e,n,r)},l.hh=function(e,n,r){return jst(this,e,n,r)},l.jh=function(e,n,r){return Eit(this,e,n,r)},l.lh=function(e){return vyt(this,e)},l.sh=function(e,n){w4t(this,e,n)},l.zh=function(){return Jc(),Y4e},l.Bh=function(e){Zyt(this,e)},l.zg=function(){return this.k},l.Ag=function(){return u$(this)},l.Ib=function(){return Xit(this)},l.k=null,F(M2,"ElkGraphElementImpl",723),D(724,723,{105:1,413:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),l._g=function(e,n,r){return f3t(this,e,n,r)},l.lh=function(e){return m3t(this,e)},l.sh=function(e,n){v4t(this,e,n)},l.zh=function(){return Jc(),K4e},l.Bh=function(e){T3t(this,e)},l.Bg=function(){return this.f},l.Cg=function(){return this.g},l.Dg=function(){return this.i},l.Eg=function(){return this.j},l.Fg=function(e,n){bj(this,e,n)},l.Gg=function(e,n){x1(this,e,n)},l.Hg=function(e){ku(this,e)},l.Ig=function(e){Eu(this,e)},l.Ib=function(){return Vst(this)},l.f=0,l.g=0,l.i=0,l.j=0,F(M2,"ElkShapeImpl",724),D(725,724,{105:1,413:1,82:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),l._g=function(e,n,r){return U3t(this,e,n,r)},l.hh=function(e,n,r){return h4t(this,e,n,r)},l.jh=function(e,n,r){return f4t(this,e,n,r)},l.lh=function(e){return Fyt(this,e)},l.sh=function(e,n){x5t(this,e,n)},l.zh=function(){return Jc(),W4e},l.Bh=function(e){R3t(this,e)},l.xg=function(){return!this.d&&(this.d=new Cn(Ys,this,8,5)),this.d},l.yg=function(){return!this.e&&(this.e=new Cn(Ys,this,7,4)),this.e},F(M2,"ElkConnectableShapeImpl",725),D(352,723,{105:1,413:1,79:1,160:1,352:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},pw),l.Qg=function(e){return o4t(this,e)},l._g=function(e,n,r){switch(e){case 3:return cD(this);case 4:return!this.b&&(this.b=new Cn(br,this,4,7)),this.b;case 5:return!this.c&&(this.c=new Cn(br,this,5,8)),this.c;case 6:return!this.a&&(this.a=new fe(Ji,this,6,6)),this.a;case 7:return Nn(),!this.b&&(this.b=new Cn(br,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new Cn(br,this,5,8)),this.c.i<=1));case 8:return Nn(),!!w_(this);case 9:return Nn(),!!fv(this);case 10:return Nn(),!this.b&&(this.b=new Cn(br,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new Cn(br,this,5,8)),this.c.i!=0)}return n3t(this,e,n,r)},l.hh=function(e,n,r){var s;switch(n){case 3:return this.Cb&&(r=(s=this.Db>>16,s>=0?o4t(this,r):this.Cb.ih(this,-1-s,null,r))),twt(this,u(e,33),r);case 4:return!this.b&&(this.b=new Cn(br,this,4,7)),Zc(this.b,e,r);case 5:return!this.c&&(this.c=new Cn(br,this,5,8)),Zc(this.c,e,r);case 6:return!this.a&&(this.a=new fe(Ji,this,6,6)),Zc(this.a,e,r)}return jst(this,e,n,r)},l.jh=function(e,n,r){switch(n){case 3:return twt(this,null,r);case 4:return!this.b&&(this.b=new Cn(br,this,4,7)),Ba(this.b,e,r);case 5:return!this.c&&(this.c=new Cn(br,this,5,8)),Ba(this.c,e,r);case 6:return!this.a&&(this.a=new fe(Ji,this,6,6)),Ba(this.a,e,r)}return Eit(this,e,n,r)},l.lh=function(e){switch(e){case 3:return!!cD(this);case 4:return!!this.b&&this.b.i!=0;case 5:return!!this.c&&this.c.i!=0;case 6:return!!this.a&&this.a.i!=0;case 7:return!this.b&&(this.b=new Cn(br,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new Cn(br,this,5,8)),this.c.i<=1));case 8:return w_(this);case 9:return fv(this);case 10:return!this.b&&(this.b=new Cn(br,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new Cn(br,this,5,8)),this.c.i!=0)}return vyt(this,e)},l.sh=function(e,n){switch(e){case 3:oat(this,u(n,33));return;case 4:!this.b&&(this.b=new Cn(br,this,4,7)),xr(this.b),!this.b&&(this.b=new Cn(br,this,4,7)),is(this.b,u(n,14));return;case 5:!this.c&&(this.c=new Cn(br,this,5,8)),xr(this.c),!this.c&&(this.c=new Cn(br,this,5,8)),is(this.c,u(n,14));return;case 6:!this.a&&(this.a=new fe(Ji,this,6,6)),xr(this.a),!this.a&&(this.a=new fe(Ji,this,6,6)),is(this.a,u(n,14));return}w4t(this,e,n)},l.zh=function(){return Jc(),VAt},l.Bh=function(e){switch(e){case 3:oat(this,null);return;case 4:!this.b&&(this.b=new Cn(br,this,4,7)),xr(this.b);return;case 5:!this.c&&(this.c=new Cn(br,this,5,8)),xr(this.c);return;case 6:!this.a&&(this.a=new fe(Ji,this,6,6)),xr(this.a);return}Zyt(this,e)},l.Ib=function(){return $le(this)},F(M2,"ElkEdgeImpl",352),D(439,1985,{105:1,413:1,202:1,439:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},ad),l.Qg=function(e){return r4t(this,e)},l._g=function(e,n,r){switch(e){case 1:return this.j;case 2:return this.k;case 3:return this.b;case 4:return this.c;case 5:return!this.a&&(this.a=new As(Gh,this,5)),this.a;case 6:return SQt(this);case 7:return n?wst(this):this.i;case 8:return n?bst(this):this.f;case 9:return!this.g&&(this.g=new Cn(Ji,this,9,10)),this.g;case 10:return!this.e&&(this.e=new Cn(Ji,this,10,9)),this.e;case 11:return this.d}return Z3t(this,e,n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 6:return this.Cb&&(r=(o=this.Db>>16,o>=0?r4t(this,r):this.Cb.ih(this,-1-o,null,r))),ewt(this,u(e,79),r);case 9:return!this.g&&(this.g=new Cn(Ji,this,9,10)),Zc(this.g,e,r);case 10:return!this.e&&(this.e=new Cn(Ji,this,10,9)),Zc(this.e,e,r)}return h=u(yn((s=u(Dn(this,16),26),s||(Jc(),aU)),n),66),h.Nj().Qj(this,su(this),n-Jn((Jc(),aU)),e,r)},l.jh=function(e,n,r){switch(n){case 5:return!this.a&&(this.a=new As(Gh,this,5)),Ba(this.a,e,r);case 6:return ewt(this,null,r);case 9:return!this.g&&(this.g=new Cn(Ji,this,9,10)),Ba(this.g,e,r);case 10:return!this.e&&(this.e=new Cn(Ji,this,10,9)),Ba(this.e,e,r)}return $4t(this,e,n,r)},l.lh=function(e){switch(e){case 1:return this.j!=0;case 2:return this.k!=0;case 3:return this.b!=0;case 4:return this.c!=0;case 5:return!!this.a&&this.a.i!=0;case 6:return!!SQt(this);case 7:return!!this.i;case 8:return!!this.f;case 9:return!!this.g&&this.g.i!=0;case 10:return!!this.e&&this.e.i!=0;case 11:return this.d!=null}return Qvt(this,e)},l.sh=function(e,n){switch(e){case 1:G8(this,Xt(ye(n)));return;case 2:W8(this,Xt(ye(n)));return;case 3:V8(this,Xt(ye(n)));return;case 4:U8(this,Xt(ye(n)));return;case 5:!this.a&&(this.a=new As(Gh,this,5)),xr(this.a),!this.a&&(this.a=new As(Gh,this,5)),is(this.a,u(n,14));return;case 6:zce(this,u(n,79));return;case 7:lz(this,u(n,82));return;case 8:uz(this,u(n,82));return;case 9:!this.g&&(this.g=new Cn(Ji,this,9,10)),xr(this.g),!this.g&&(this.g=new Cn(Ji,this,9,10)),is(this.g,u(n,14));return;case 10:!this.e&&(this.e=new Cn(Ji,this,10,9)),xr(this.e),!this.e&&(this.e=new Cn(Ji,this,10,9)),is(this.e,u(n,14));return;case 11:uyt(this,Br(n));return}Byt(this,e,n)},l.zh=function(){return Jc(),aU},l.Bh=function(e){switch(e){case 1:G8(this,0);return;case 2:W8(this,0);return;case 3:V8(this,0);return;case 4:U8(this,0);return;case 5:!this.a&&(this.a=new As(Gh,this,5)),xr(this.a);return;case 6:zce(this,null);return;case 7:lz(this,null);return;case 8:uz(this,null);return;case 9:!this.g&&(this.g=new Cn(Ji,this,9,10)),xr(this.g);return;case 10:!this.e&&(this.e=new Cn(Ji,this,10,9)),xr(this.e);return;case 11:uyt(this,null);return}_yt(this,e)},l.Ib=function(){return sce(this)},l.b=0,l.c=0,l.d=null,l.j=0,l.k=0,F(M2,"ElkEdgeSectionImpl",439),D(150,115,{105:1,92:1,90:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1}),l._g=function(e,n,r){var s;return e==0?(!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),this.Ab):uh(this,e-Jn(this.zh()),yn((s=u(Dn(this,16),26),s||this.zh()),e),n,r)},l.hh=function(e,n,r){var s,o;return n==0?(!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),Zc(this.Ab,e,r)):(o=u(yn((s=u(Dn(this,16),26),s||this.zh()),n),66),o.Nj().Qj(this,su(this),n-Jn(this.zh()),e,r))},l.jh=function(e,n,r){var s,o;return n==0?(!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),Ba(this.Ab,e,r)):(o=u(yn((s=u(Dn(this,16),26),s||this.zh()),n),66),o.Nj().Rj(this,su(this),n-Jn(this.zh()),e,r))},l.lh=function(e){var n;return e==0?!!this.Ab&&this.Ab.i!=0:oh(this,e-Jn(this.zh()),yn((n=u(Dn(this,16),26),n||this.zh()),e))},l.oh=function(e){return Lxt(this,e)},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),is(this.Ab,u(n,14));return}gh(this,e-Jn(this.zh()),yn((r=u(Dn(this,16),26),r||this.zh()),e),n)},l.uh=function(e){o6(this,128,e)},l.zh=function(){return dn(),p5e},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab);return}fh(this,e-Jn(this.zh()),yn((n=u(Dn(this,16),26),n||this.zh()),e))},l.Gh=function(){this.Bb|=1},l.Hh=function(e){return k_(this,e)},l.Bb=0,F(Mn,"EModelElementImpl",150),D(704,150,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},JB),l.Ih=function(e,n){return bhe(this,e,n)},l.Jh=function(e){var n,r,s,o,h;if(this.a!=Rl(e)||e.Bb&256)throw it(new Fn(Kct+e.zb+Cv));for(s=Ao(e);Lc(s.a).i!=0;){if(r=u(AI(s,0,(n=u(At(Lc(s.a),0),87),h=n.c,_t(h,88)?u(h,26):(dn(),Kh))),26),hv(r))return o=Rl(r).Nh().Jh(r),u(o,49).th(e),o;s=Ao(r)}return(e.D!=null?e.D:e.B)=="java.util.Map$Entry"?new hKt(e):new zwt(e)},l.Kh=function(e,n){return vv(this,e,n)},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),this.Ab;case 1:return this.a}return uh(this,e-Jn((dn(),Db)),yn((s=u(Dn(this,16),26),s||Db),e),n,r)},l.hh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),Zc(this.Ab,e,r);case 1:return this.a&&(r=u(this.a,49).ih(this,4,i1,r)),Xyt(this,u(e,235),r)}return o=u(yn((s=u(Dn(this,16),26),s||(dn(),Db)),n),66),o.Nj().Qj(this,su(this),n-Jn((dn(),Db)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),Ba(this.Ab,e,r);case 1:return Xyt(this,null,r)}return o=u(yn((s=u(Dn(this,16),26),s||(dn(),Db)),n),66),o.Nj().Rj(this,su(this),n-Jn((dn(),Db)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return!!this.a}return oh(this,e-Jn((dn(),Db)),yn((n=u(Dn(this,16),26),n||Db),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),is(this.Ab,u(n,14));return;case 1:zae(this,u(n,235));return}gh(this,e-Jn((dn(),Db)),yn((r=u(Dn(this,16),26),r||Db),e),n)},l.zh=function(){return dn(),Db},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab);return;case 1:zae(this,null);return}fh(this,e-Jn((dn(),Db)),yn((n=u(Dn(this,16),26),n||Db),e))};var aA,YAt,Z4e;F(Mn,"EFactoryImpl",704),D(xf,704,{105:1,2014:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},ax),l.Ih=function(e,n){switch(e.yj()){case 12:return u(n,146).tg();case 13:return $o(n);default:throw it(new Fn(QE+e.ne()+Cv))}},l.Jh=function(e){var n,r,s,o,h,d,v,k;switch(e.G==-1&&(e.G=(n=Rl(e),n?Hg(n.Mh(),e):-1)),e.G){case 4:return h=new ZT,h;case 6:return d=new Vpt,d;case 7:return v=new Gpt,v;case 8:return s=new pw,s;case 9:return r=new xp,r;case 10:return o=new ad,o;case 11:return k=new aB,k;default:throw it(new Fn(Kct+e.zb+Cv))}},l.Kh=function(e,n){switch(e.yj()){case 13:case 12:return null;default:throw it(new Fn(QE+e.ne()+Cv))}},F(M2,"ElkGraphFactoryImpl",xf),D(438,150,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1}),l.Wg=function(){var e,n;return n=(e=u(Dn(this,16),26),jvt(vd(e||this.zh()))),n==null?(YC(),YC(),Rft):new IWt(this,n)},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),this.Ab;case 1:return this.ne()}return uh(this,e-Jn(this.zh()),yn((s=u(Dn(this,16),26),s||this.zh()),e),n,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null}return oh(this,e-Jn(this.zh()),yn((n=u(Dn(this,16),26),n||this.zh()),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),is(this.Ab,u(n,14));return;case 1:this.Lh(Br(n));return}gh(this,e-Jn(this.zh()),yn((r=u(Dn(this,16),26),r||this.zh()),e),n)},l.zh=function(){return dn(),b5e},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab);return;case 1:this.Lh(null);return}fh(this,e-Jn(this.zh()),yn((n=u(Dn(this,16),26),n||this.zh()),e))},l.ne=function(){return this.zb},l.Lh=function(e){Qc(this,e)},l.Ib=function(){return J9(this)},l.zb=null,F(Mn,"ENamedElementImpl",438),D(179,438,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},fQt),l.Qg=function(e){return eae(this,e)},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.yb;case 3:return this.xb;case 4:return this.sb;case 5:return!this.rb&&(this.rb=new Gm(this,s1,this)),this.rb;case 6:return!this.vb&&(this.vb=new Rx(i1,this,6,7)),this.vb;case 7:return n?this.Db>>16==7?u(this.Cb,235):null:AQt(this)}return uh(this,e-Jn((dn(),up)),yn((s=u(Dn(this,16),26),s||up),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),Zc(this.Ab,e,r);case 4:return this.sb&&(r=u(this.sb,49).ih(this,1,sA,r)),t3t(this,u(e,471),r);case 5:return!this.rb&&(this.rb=new Gm(this,s1,this)),Zc(this.rb,e,r);case 6:return!this.vb&&(this.vb=new Rx(i1,this,6,7)),Zc(this.vb,e,r);case 7:return this.Cb&&(r=(o=this.Db>>16,o>=0?eae(this,r):this.Cb.ih(this,-1-o,null,r))),Hl(this,e,7,r)}return h=u(yn((s=u(Dn(this,16),26),s||(dn(),up)),n),66),h.Nj().Qj(this,su(this),n-Jn((dn(),up)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),Ba(this.Ab,e,r);case 4:return t3t(this,null,r);case 5:return!this.rb&&(this.rb=new Gm(this,s1,this)),Ba(this.rb,e,r);case 6:return!this.vb&&(this.vb=new Rx(i1,this,6,7)),Ba(this.vb,e,r);case 7:return Hl(this,null,7,r)}return o=u(yn((s=u(Dn(this,16),26),s||(dn(),up)),n),66),o.Nj().Rj(this,su(this),n-Jn((dn(),up)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.yb!=null;case 3:return this.xb!=null;case 4:return!!this.sb;case 5:return!!this.rb&&this.rb.i!=0;case 6:return!!this.vb&&this.vb.i!=0;case 7:return!!AQt(this)}return oh(this,e-Jn((dn(),up)),yn((n=u(Dn(this,16),26),n||up),e))},l.oh=function(e){var n;return n=Lwn(this,e),n||Lxt(this,e)},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),is(this.Ab,u(n,14));return;case 1:Qc(this,Br(n));return;case 2:wz(this,Br(n));return;case 3:bz(this,Br(n));return;case 4:Hst(this,u(n,471));return;case 5:!this.rb&&(this.rb=new Gm(this,s1,this)),xr(this.rb),!this.rb&&(this.rb=new Gm(this,s1,this)),is(this.rb,u(n,14));return;case 6:!this.vb&&(this.vb=new Rx(i1,this,6,7)),xr(this.vb),!this.vb&&(this.vb=new Rx(i1,this,6,7)),is(this.vb,u(n,14));return}gh(this,e-Jn((dn(),up)),yn((r=u(Dn(this,16),26),r||up),e),n)},l.vh=function(e){var n,r;if(e&&this.rb)for(r=new nr(this.rb);r.e!=r.i.gc();)n=dr(r),_t(n,351)&&(u(n,351).w=null);o6(this,64,e)},l.zh=function(){return dn(),up},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab);return;case 1:Qc(this,null);return;case 2:wz(this,null);return;case 3:bz(this,null);return;case 4:Hst(this,null);return;case 5:!this.rb&&(this.rb=new Gm(this,s1,this)),xr(this.rb);return;case 6:!this.vb&&(this.vb=new Rx(i1,this,6,7)),xr(this.vb);return}fh(this,e-Jn((dn(),up)),yn((n=u(Dn(this,16),26),n||up),e))},l.Gh=function(){Mst(this)},l.Mh=function(){return!this.rb&&(this.rb=new Gm(this,s1,this)),this.rb},l.Nh=function(){return this.sb},l.Oh=function(){return this.ub},l.Ph=function(){return this.xb},l.Qh=function(){return this.yb},l.Rh=function(e){this.ub=e},l.Ib=function(){var e;return this.Db&64?J9(this):(e=new _h(J9(this)),e.a+=" (nsURI: ",go(e,this.yb),e.a+=", nsPrefix: ",go(e,this.xb),e.a+=")",e.a)},l.xb=null,l.yb=null,F(Mn,"EPackageImpl",179),D(555,179,{105:1,2016:1,555:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},gce),l.q=!1,l.r=!1;var J4e=!1;F(M2,"ElkGraphPackageImpl",555),D(354,724,{105:1,413:1,160:1,137:1,470:1,354:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},ZT),l.Qg=function(e){return i4t(this,e)},l._g=function(e,n,r){switch(e){case 7:return LQt(this);case 8:return this.a}return f3t(this,e,n,r)},l.hh=function(e,n,r){var s;switch(n){case 7:return this.Cb&&(r=(s=this.Db>>16,s>=0?i4t(this,r):this.Cb.ih(this,-1-s,null,r))),nvt(this,u(e,160),r)}return jst(this,e,n,r)},l.jh=function(e,n,r){return n==7?nvt(this,null,r):Eit(this,e,n,r)},l.lh=function(e){switch(e){case 7:return!!LQt(this);case 8:return!hn("",this.a)}return m3t(this,e)},l.sh=function(e,n){switch(e){case 7:F5t(this,u(n,160));return;case 8:nyt(this,Br(n));return}v4t(this,e,n)},l.zh=function(){return Jc(),GAt},l.Bh=function(e){switch(e){case 7:F5t(this,null);return;case 8:nyt(this,"");return}T3t(this,e)},l.Ib=function(){return eoe(this)},l.a="",F(M2,"ElkLabelImpl",354),D(239,725,{105:1,413:1,82:1,160:1,33:1,470:1,239:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Vpt),l.Qg=function(e){return c4t(this,e)},l._g=function(e,n,r){switch(e){case 9:return!this.c&&(this.c=new fe(gl,this,9,9)),this.c;case 10:return!this.a&&(this.a=new fe(rs,this,10,11)),this.a;case 11:return es(this);case 12:return!this.b&&(this.b=new fe(Ys,this,12,3)),this.b;case 13:return Nn(),!this.a&&(this.a=new fe(rs,this,10,11)),this.a.i>0}return U3t(this,e,n,r)},l.hh=function(e,n,r){var s;switch(n){case 9:return!this.c&&(this.c=new fe(gl,this,9,9)),Zc(this.c,e,r);case 10:return!this.a&&(this.a=new fe(rs,this,10,11)),Zc(this.a,e,r);case 11:return this.Cb&&(r=(s=this.Db>>16,s>=0?c4t(this,r):this.Cb.ih(this,-1-s,null,r))),lwt(this,u(e,33),r);case 12:return!this.b&&(this.b=new fe(Ys,this,12,3)),Zc(this.b,e,r)}return h4t(this,e,n,r)},l.jh=function(e,n,r){switch(n){case 9:return!this.c&&(this.c=new fe(gl,this,9,9)),Ba(this.c,e,r);case 10:return!this.a&&(this.a=new fe(rs,this,10,11)),Ba(this.a,e,r);case 11:return lwt(this,null,r);case 12:return!this.b&&(this.b=new fe(Ys,this,12,3)),Ba(this.b,e,r)}return f4t(this,e,n,r)},l.lh=function(e){switch(e){case 9:return!!this.c&&this.c.i!=0;case 10:return!!this.a&&this.a.i!=0;case 11:return!!es(this);case 12:return!!this.b&&this.b.i!=0;case 13:return!this.a&&(this.a=new fe(rs,this,10,11)),this.a.i>0}return Fyt(this,e)},l.sh=function(e,n){switch(e){case 9:!this.c&&(this.c=new fe(gl,this,9,9)),xr(this.c),!this.c&&(this.c=new fe(gl,this,9,9)),is(this.c,u(n,14));return;case 10:!this.a&&(this.a=new fe(rs,this,10,11)),xr(this.a),!this.a&&(this.a=new fe(rs,this,10,11)),is(this.a,u(n,14));return;case 11:I5t(this,u(n,33));return;case 12:!this.b&&(this.b=new fe(Ys,this,12,3)),xr(this.b),!this.b&&(this.b=new fe(Ys,this,12,3)),is(this.b,u(n,14));return}x5t(this,e,n)},l.zh=function(){return Jc(),UAt},l.Bh=function(e){switch(e){case 9:!this.c&&(this.c=new fe(gl,this,9,9)),xr(this.c);return;case 10:!this.a&&(this.a=new fe(rs,this,10,11)),xr(this.a);return;case 11:I5t(this,null);return;case 12:!this.b&&(this.b=new fe(Ys,this,12,3)),xr(this.b);return}R3t(this,e)},l.Ib=function(){return X5t(this)},F(M2,"ElkNodeImpl",239),D(186,725,{105:1,413:1,82:1,160:1,118:1,470:1,186:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Gpt),l.Qg=function(e){return s4t(this,e)},l._g=function(e,n,r){return e==9?T1(this):U3t(this,e,n,r)},l.hh=function(e,n,r){var s;switch(n){case 9:return this.Cb&&(r=(s=this.Db>>16,s>=0?s4t(this,r):this.Cb.ih(this,-1-s,null,r))),nwt(this,u(e,33),r)}return h4t(this,e,n,r)},l.jh=function(e,n,r){return n==9?nwt(this,null,r):f4t(this,e,n,r)},l.lh=function(e){return e==9?!!T1(this):Fyt(this,e)},l.sh=function(e,n){switch(e){case 9:D5t(this,u(n,33));return}x5t(this,e,n)},l.zh=function(){return Jc(),WAt},l.Bh=function(e){switch(e){case 9:D5t(this,null);return}R3t(this,e)},l.Ib=function(){return zue(this)},F(M2,"ElkPortImpl",186);var t5e=Ki(Ra,"BasicEMap/Entry");D(1092,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,114:1,115:1},aB),l.Fb=function(e){return this===e},l.cd=function(){return this.b},l.Hb=function(){return Pw(this)},l.Uh=function(e){ryt(this,u(e,146))},l._g=function(e,n,r){switch(e){case 0:return this.b;case 1:return this.c}return Xz(this,e,n,r)},l.lh=function(e){switch(e){case 0:return!!this.b;case 1:return this.c!=null}return fst(this,e)},l.sh=function(e,n){switch(e){case 0:ryt(this,u(n,146));return;case 1:ayt(this,n);return}Xst(this,e,n)},l.zh=function(){return Jc(),Sb},l.Bh=function(e){switch(e){case 0:ryt(this,null);return;case 1:ayt(this,null);return}Gst(this,e)},l.Sh=function(){var e;return this.a==-1&&(e=this.b,this.a=e?Hi(e):0),this.a},l.dd=function(){return this.c},l.Th=function(e){this.a=e},l.ed=function(e){var n;return n=this.c,ayt(this,e),n},l.Ib=function(){var e;return this.Db&64?mf(this):(e=new Mp,Gr(Gr(Gr(e,this.b?this.b.tg():_u),Uot),b9(this.c)),e.a)},l.a=-1,l.c=null;var Hv=F(M2,"ElkPropertyToValueMapEntryImpl",1092);D(984,1,{},oB),F(ma,"JsonAdapter",984),D(210,60,Q0,ud),F(ma,"JsonImportException",210),D(857,1,{},nae),F(ma,"JsonImporter",857),D(891,1,{},DGt),F(ma,"JsonImporter/lambda$0$Type",891),D(892,1,{},IGt),F(ma,"JsonImporter/lambda$1$Type",892),D(900,1,{},fzt),F(ma,"JsonImporter/lambda$10$Type",900),D(902,1,{},OGt),F(ma,"JsonImporter/lambda$11$Type",902),D(903,1,{},PGt),F(ma,"JsonImporter/lambda$12$Type",903),D(909,1,{},UXt),F(ma,"JsonImporter/lambda$13$Type",909),D(908,1,{},GXt),F(ma,"JsonImporter/lambda$14$Type",908),D(904,1,{},FGt),F(ma,"JsonImporter/lambda$15$Type",904),D(905,1,{},NGt),F(ma,"JsonImporter/lambda$16$Type",905),D(906,1,{},BGt),F(ma,"JsonImporter/lambda$17$Type",906),D(907,1,{},RGt),F(ma,"JsonImporter/lambda$18$Type",907),D(912,1,{},dzt),F(ma,"JsonImporter/lambda$19$Type",912),D(893,1,{},gzt),F(ma,"JsonImporter/lambda$2$Type",893),D(910,1,{},pzt),F(ma,"JsonImporter/lambda$20$Type",910),D(911,1,{},bzt),F(ma,"JsonImporter/lambda$21$Type",911),D(915,1,{},wzt),F(ma,"JsonImporter/lambda$22$Type",915),D(913,1,{},vzt),F(ma,"JsonImporter/lambda$23$Type",913),D(914,1,{},mzt),F(ma,"JsonImporter/lambda$24$Type",914),D(917,1,{},yzt),F(ma,"JsonImporter/lambda$25$Type",917),D(916,1,{},xzt),F(ma,"JsonImporter/lambda$26$Type",916),D(918,1,Un,jGt),l.td=function(e){ion(this.b,this.a,Br(e))},F(ma,"JsonImporter/lambda$27$Type",918),D(919,1,Un,$Gt),l.td=function(e){son(this.b,this.a,Br(e))},F(ma,"JsonImporter/lambda$28$Type",919),D(920,1,{},zGt),F(ma,"JsonImporter/lambda$29$Type",920),D(896,1,{},kzt),F(ma,"JsonImporter/lambda$3$Type",896),D(921,1,{},qGt),F(ma,"JsonImporter/lambda$30$Type",921),D(922,1,{},Ezt),F(ma,"JsonImporter/lambda$31$Type",922),D(923,1,{},Tzt),F(ma,"JsonImporter/lambda$32$Type",923),D(924,1,{},Czt),F(ma,"JsonImporter/lambda$33$Type",924),D(925,1,{},_zt),F(ma,"JsonImporter/lambda$34$Type",925),D(859,1,{},Szt),F(ma,"JsonImporter/lambda$35$Type",859),D(929,1,{},BYt),F(ma,"JsonImporter/lambda$36$Type",929),D(926,1,Un,Azt),l.td=function(e){can(this.a,u(e,469))},F(ma,"JsonImporter/lambda$37$Type",926),D(927,1,Un,YGt),l.td=function(e){NXe(this.a,this.b,u(e,202))},F(ma,"JsonImporter/lambda$38$Type",927),D(928,1,Un,KGt),l.td=function(e){BXe(this.a,this.b,u(e,202))},F(ma,"JsonImporter/lambda$39$Type",928),D(894,1,{},Lzt),F(ma,"JsonImporter/lambda$4$Type",894),D(930,1,Un,Mzt),l.td=function(e){uan(this.a,u(e,8))},F(ma,"JsonImporter/lambda$40$Type",930),D(895,1,{},Dzt),F(ma,"JsonImporter/lambda$5$Type",895),D(899,1,{},Izt),F(ma,"JsonImporter/lambda$6$Type",899),D(897,1,{},Ozt),F(ma,"JsonImporter/lambda$7$Type",897),D(898,1,{},Pzt),F(ma,"JsonImporter/lambda$8$Type",898),D(901,1,{},Fzt),F(ma,"JsonImporter/lambda$9$Type",901),D(948,1,Un,Nzt),l.td=function(e){Vx(this.a,new Um(Br(e)))},F(ma,"JsonMetaDataConverter/lambda$0$Type",948),D(949,1,Un,Bzt),l.td=function(e){Cnn(this.a,u(e,237))},F(ma,"JsonMetaDataConverter/lambda$1$Type",949),D(950,1,Un,Rzt),l.td=function(e){kin(this.a,u(e,149))},F(ma,"JsonMetaDataConverter/lambda$2$Type",950),D(951,1,Un,jzt),l.td=function(e){_nn(this.a,u(e,175))},F(ma,"JsonMetaDataConverter/lambda$3$Type",951),D(237,22,{3:1,35:1,22:1,237:1},Px);var oU,cU,Dft,uU,lU,hU,Ift,Oft,fU=jr(qI,"GraphFeature",237,Hr,Yon,Xtn),e5e;D(13,1,{35:1,146:1},Vi,Ps,mn,eo),l.wd=function(e){return FQe(this,u(e,146))},l.Fb=function(e){return dQt(this,e)},l.wg=function(){return Ie(this)},l.tg=function(){return this.b},l.Hb=function(){return Vg(this.b)},l.Ib=function(){return this.b},F(qI,"Property",13),D(818,1,Oi,Ept),l.ue=function(e,n){return Jln(this,u(e,94),u(n,94))},l.Fb=function(e){return this===e},l.ve=function(){return new dt(this)},F(qI,"PropertyHolderComparator",818),D(695,1,sa,Tpt),l.Nb=function(e){ba(this,e)},l.Pb=function(){return uon(this)},l.Qb=function(){IHt()},l.Ob=function(){return!!this.a},F(DH,"ElkGraphUtil/AncestorIterator",695);var KAt=Ki(Ra,"EList");D(67,52,{20:1,28:1,52:1,14:1,15:1,67:1,58:1}),l.Vc=function(e,n){n_(this,e,n)},l.Fc=function(e){return Dr(this,e)},l.Wc=function(e,n){return Syt(this,e,n)},l.Gc=function(e){return is(this,e)},l.Zh=function(){return new Bx(this)},l.$h=function(){return new $M(this)},l._h=function(e){return DD(this,e)},l.ai=function(){return!0},l.bi=function(e,n){},l.ci=function(){},l.di=function(e,n){Yrt(this,e,n)},l.ei=function(e,n,r){},l.fi=function(e,n){},l.gi=function(e,n,r){},l.Fb=function(e){return Sue(this,e)},l.Hb=function(){return kyt(this)},l.hi=function(){return!1},l.Kc=function(){return new nr(this)},l.Yc=function(){return new Nx(this)},l.Zc=function(e){var n;if(n=this.gc(),e<0||e>n)throw it(new qm(e,n));return new Jnt(this,e)},l.ji=function(e,n){this.ii(e,this.Xc(n))},l.Mc=function(e){return X$(this,e)},l.li=function(e,n){return n},l._c=function(e,n){return h4(this,e,n)},l.Ib=function(){return g3t(this)},l.ni=function(){return!0},l.oi=function(e,n){return sE(this,n)},F(Ra,"AbstractEList",67),D(63,67,Ld,ox,Qw,gyt),l.Vh=function(e,n){return $st(this,e,n)},l.Wh=function(e){return Lse(this,e)},l.Xh=function(e,n){UD(this,e,n)},l.Yh=function(e){gD(this,e)},l.pi=function(e){return Fmt(this,e)},l.$b=function(){z9(this)},l.Hc=function(e){return yE(this,e)},l.Xb=function(e){return At(this,e)},l.qi=function(e){var n,r,s;++this.j,r=this.g==null?0:this.g.length,e>r&&(s=this.g,n=r+(r/2|0)+4,n=0?(this.$c(n),!0):!1},l.mi=function(e,n){return this.Ui(e,this.oi(e,n))},l.gc=function(){return this.Vi()},l.Pc=function(){return this.Wi()},l.Qc=function(e){return this.Xi(e)},l.Ib=function(){return this.Yi()},F(Ra,"DelegatingEList",1995),D(1996,1995,E0e),l.Vh=function(e,n){return sxt(this,e,n)},l.Wh=function(e){return this.Vh(this.Vi(),e)},l.Xh=function(e,n){fce(this,e,n)},l.Yh=function(e){rce(this,e)},l.ai=function(){return!this.bj()},l.$b=function(){A_(this)},l.Zi=function(e,n,r,s,o){return new pQt(this,e,n,r,s,o)},l.$i=function(e){mi(this.Ai(),e)},l._i=function(){return null},l.aj=function(){return-1},l.Ai=function(){return null},l.bj=function(){return!1},l.cj=function(e,n){return n},l.dj=function(e,n){return n},l.ej=function(){return!1},l.fj=function(){return!this.Ri()},l.ii=function(e,n){var r,s;return this.ej()?(s=this.fj(),r=B4t(this,e,n),this.$i(this.Zi(7,pe(n),r,e,s)),r):B4t(this,e,n)},l.$c=function(e){var n,r,s,o;return this.ej()?(r=null,s=this.fj(),n=this.Zi(4,o=Hj(this,e),null,e,s),this.bj()&&o?(r=this.dj(o,r),r?(r.Ei(n),r.Fi()):this.$i(n)):r?(r.Ei(n),r.Fi()):this.$i(n),o):(o=Hj(this,e),this.bj()&&o&&(r=this.dj(o,null),r&&r.Fi()),o)},l.mi=function(e,n){return yle(this,e,n)},F(L6,"DelegatingNotifyingListImpl",1996),D(143,1,nO),l.Ei=function(e){return T4t(this,e)},l.Fi=function(){rit(this)},l.xi=function(){return this.d},l._i=function(){return null},l.gj=function(){return null},l.yi=function(e){return-1},l.zi=function(){return aue(this)},l.Ai=function(){return null},l.Bi=function(){return $5t(this)},l.Ci=function(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o},l.hj=function(){return!1},l.Di=function(e){var n,r,s,o,h,d,v,k,C,M,j;switch(this.d){case 1:case 2:switch(o=e.xi(),o){case 1:case 2:if(h=e.Ai(),Vt(h)===Vt(this.Ai())&&this.yi(null)==e.yi(null))return this.g=e.zi(),e.xi()==1&&(this.d=1),!0}case 4:{switch(o=e.xi(),o){case 4:{if(h=e.Ai(),Vt(h)===Vt(this.Ai())&&this.yi(null)==e.yi(null))return C=kxt(this),k=this.o<0?this.o<-2?-2-this.o-1:-1:this.o,d=e.Ci(),this.d=6,j=new Qw(2),k<=d?(Dr(j,this.n),Dr(j,e.Bi()),this.g=lt(ct(Cr,1),Xr,25,15,[this.o=k,d+1])):(Dr(j,e.Bi()),Dr(j,this.n),this.g=lt(ct(Cr,1),Xr,25,15,[this.o=d,k])),this.n=j,C||(this.o=-2-this.o-1),!0;break}}break}case 6:{switch(o=e.xi(),o){case 4:{if(h=e.Ai(),Vt(h)===Vt(this.Ai())&&this.yi(null)==e.yi(null)){for(C=kxt(this),d=e.Ci(),M=u(this.g,48),s=Nt(Cr,Xr,25,M.length+1,15,1),n=0;n>>0,n.toString(16))),s.a+=" (eventType: ",this.d){case 1:{s.a+="SET";break}case 2:{s.a+="UNSET";break}case 3:{s.a+="ADD";break}case 5:{s.a+="ADD_MANY";break}case 4:{s.a+="REMOVE";break}case 6:{s.a+="REMOVE_MANY";break}case 7:{s.a+="MOVE";break}case 8:{s.a+="REMOVING_ADAPTER";break}case 9:{s.a+="RESOLVE";break}default:{xet(s,this.d);break}}if(Yue(this)&&(s.a+=", touch: true"),s.a+=", position: ",xet(s,this.o<0?this.o<-2?-2-this.o-1:-1:this.o),s.a+=", notifier: ",l9(s,this.Ai()),s.a+=", feature: ",l9(s,this._i()),s.a+=", oldValue: ",l9(s,$5t(this)),s.a+=", newValue: ",this.d==6&&_t(this.g,48)){for(r=u(this.g,48),s.a+="[",e=0;e10?((!this.b||this.c.j!=this.a)&&(this.b=new E9(this),this.a=this.j),I0(this.b,e)):yE(this,e)},l.ni=function(){return!0},l.a=0,F(Ra,"AbstractEList/1",953),D(295,73,bot,qm),F(Ra,"AbstractEList/BasicIndexOutOfBoundsException",295),D(40,1,sa,nr),l.Nb=function(e){ba(this,e)},l.mj=function(){if(this.i.j!=this.f)throw it(new rh)},l.nj=function(){return dr(this)},l.Ob=function(){return this.e!=this.i.gc()},l.Pb=function(){return this.nj()},l.Qb=function(){f_(this)},l.e=0,l.f=0,l.g=-1,F(Ra,"AbstractEList/EIterator",40),D(278,40,n0,Nx,Jnt),l.Qb=function(){f_(this)},l.Rb=function(e){Die(this,e)},l.oj=function(){var e;try{return e=this.d.Xb(--this.e),this.mj(),this.g=this.e,e}catch(n){throw n=Wi(n),_t(n,73)?(this.mj(),it(new lc)):it(n)}},l.pj=function(e){Ise(this,e)},l.Sb=function(){return this.e!=0},l.Tb=function(){return this.e},l.Ub=function(){return this.oj()},l.Vb=function(){return this.e-1},l.Wb=function(e){this.pj(e)},F(Ra,"AbstractEList/EListIterator",278),D(341,40,sa,Bx),l.nj=function(){return dst(this)},l.Qb=function(){throw it(new Or)},F(Ra,"AbstractEList/NonResolvingEIterator",341),D(385,278,n0,$M,wwt),l.Rb=function(e){throw it(new Or)},l.nj=function(){var e;try{return e=this.c.ki(this.e),this.mj(),this.g=this.e++,e}catch(n){throw n=Wi(n),_t(n,73)?(this.mj(),it(new lc)):it(n)}},l.oj=function(){var e;try{return e=this.c.ki(--this.e),this.mj(),this.g=this.e,e}catch(n){throw n=Wi(n),_t(n,73)?(this.mj(),it(new lc)):it(n)}},l.Qb=function(){throw it(new Or)},l.Wb=function(e){throw it(new Or)},F(Ra,"AbstractEList/NonResolvingEListIterator",385),D(1982,67,T0e),l.Vh=function(e,n){var r,s,o,h,d,v,k,C,M,j,H;if(o=n.gc(),o!=0){for(C=u(Dn(this.a,4),126),M=C==null?0:C.length,H=M+o,s=Fit(this,H),j=M-e,j>0&&Dc(C,e,s,e+o,j),k=n.Kc(),d=0;dr)throw it(new qm(e,r));return new _Xt(this,e)},l.$b=function(){var e,n;++this.j,e=u(Dn(this.a,4),126),n=e==null?0:e.length,bE(this,null),Yrt(this,n,e)},l.Hc=function(e){var n,r,s,o,h;if(n=u(Dn(this.a,4),126),n!=null){if(e!=null){for(s=n,o=0,h=s.length;o=r)throw it(new qm(e,r));return n[e]},l.Xc=function(e){var n,r,s;if(n=u(Dn(this.a,4),126),n!=null){if(e!=null){for(r=0,s=n.length;rr)throw it(new qm(e,r));return new CXt(this,e)},l.ii=function(e,n){var r,s,o;if(r=jie(this),o=r==null?0:r.length,e>=o)throw it(new yo(iut+e+D2+o));if(n>=o)throw it(new yo(sut+n+D2+o));return s=r[n],e!=n&&(e0&&Dc(e,0,n,0,r),n},l.Qc=function(e){var n,r,s;return n=u(Dn(this.a,4),126),s=n==null?0:n.length,s>0&&(e.lengths&&ts(e,s,null),e};var n5e;F(Ra,"ArrayDelegatingEList",1982),D(1038,40,sa,FJt),l.mj=function(){if(this.b.j!=this.f||Vt(u(Dn(this.b.a,4),126))!==Vt(this.a))throw it(new rh)},l.Qb=function(){f_(this),this.a=u(Dn(this.b.a,4),126)},F(Ra,"ArrayDelegatingEList/EIterator",1038),D(706,278,n0,KKt,CXt),l.mj=function(){if(this.b.j!=this.f||Vt(u(Dn(this.b.a,4),126))!==Vt(this.a))throw it(new rh)},l.pj=function(e){Ise(this,e),this.a=u(Dn(this.b.a,4),126)},l.Qb=function(){f_(this),this.a=u(Dn(this.b.a,4),126)},F(Ra,"ArrayDelegatingEList/EListIterator",706),D(1039,341,sa,NJt),l.mj=function(){if(this.b.j!=this.f||Vt(u(Dn(this.b.a,4),126))!==Vt(this.a))throw it(new rh)},F(Ra,"ArrayDelegatingEList/NonResolvingEIterator",1039),D(707,385,n0,XKt,_Xt),l.mj=function(){if(this.b.j!=this.f||Vt(u(Dn(this.b.a,4),126))!==Vt(this.a))throw it(new rh)},F(Ra,"ArrayDelegatingEList/NonResolvingEListIterator",707),D(606,295,bot,nnt),F(Ra,"BasicEList/BasicIndexOutOfBoundsException",606),D(696,63,Ld,n2t),l.Vc=function(e,n){throw it(new Or)},l.Fc=function(e){throw it(new Or)},l.Wc=function(e,n){throw it(new Or)},l.Gc=function(e){throw it(new Or)},l.$b=function(){throw it(new Or)},l.qi=function(e){throw it(new Or)},l.Kc=function(){return this.Zh()},l.Yc=function(){return this.$h()},l.Zc=function(e){return this._h(e)},l.ii=function(e,n){throw it(new Or)},l.ji=function(e,n){throw it(new Or)},l.$c=function(e){throw it(new Or)},l.Mc=function(e){throw it(new Or)},l._c=function(e,n){throw it(new Or)},F(Ra,"BasicEList/UnmodifiableEList",696),D(705,1,{3:1,20:1,14:1,15:1,58:1,589:1}),l.Vc=function(e,n){CQe(this,e,u(n,42))},l.Fc=function(e){return hZe(this,u(e,42))},l.Jc=function(e){va(this,e)},l.Xb=function(e){return u(At(this.c,e),133)},l.ii=function(e,n){return u(this.c.ii(e,n),42)},l.ji=function(e,n){_Qe(this,e,u(n,42))},l.Lc=function(){return new Tn(null,new _n(this,16))},l.$c=function(e){return u(this.c.$c(e),42)},l._c=function(e,n){return mnn(this,e,u(n,42))},l.ad=function(e){r4(this,e)},l.Nc=function(){return new _n(this,16)},l.Oc=function(){return new Tn(null,new _n(this,16))},l.Wc=function(e,n){return this.c.Wc(e,n)},l.Gc=function(e){return this.c.Gc(e)},l.$b=function(){this.c.$b()},l.Hc=function(e){return this.c.Hc(e)},l.Ic=function(e){return ND(this.c,e)},l.qj=function(){var e,n,r;if(this.d==null){for(this.d=Nt(XAt,R8t,63,2*this.f+1,0,1),r=this.e,this.f=0,n=this.c.Kc();n.e!=n.i.gc();)e=u(n.nj(),133),Jz(this,e);this.e=r}},l.Fb=function(e){return xYt(this,e)},l.Hb=function(){return kyt(this.c)},l.Xc=function(e){return this.c.Xc(e)},l.rj=function(){this.c=new zzt(this)},l.dc=function(){return this.f==0},l.Kc=function(){return this.c.Kc()},l.Yc=function(){return this.c.Yc()},l.Zc=function(e){return this.c.Zc(e)},l.sj=function(){return wD(this)},l.tj=function(e,n,r){return new RYt(e,n,r)},l.uj=function(){return new kp},l.Mc=function(e){return tne(this,e)},l.gc=function(){return this.f},l.bd=function(e,n){return new Qd(this.c,e,n)},l.Pc=function(){return this.c.Pc()},l.Qc=function(e){return this.c.Qc(e)},l.Ib=function(){return g3t(this.c)},l.e=0,l.f=0,F(Ra,"BasicEMap",705),D(1033,63,Ld,zzt),l.bi=function(e,n){cKe(this,u(n,133))},l.ei=function(e,n,r){var s;++(s=this,u(n,133),s).a.e},l.fi=function(e,n){uKe(this,u(n,133))},l.gi=function(e,n,r){ZQe(this,u(n,133),u(r,133))},l.di=function(e,n){Vne(this.a)},F(Ra,"BasicEMap/1",1033),D(1034,63,Ld,kp),l.ri=function(e){return Nt(y6n,C0e,612,e,0,1)},F(Ra,"BasicEMap/2",1034),D(1035,N1,zu,qzt),l.$b=function(){this.a.c.$b()},l.Hc=function(e){return ist(this.a,e)},l.Kc=function(){return this.a.f==0?(y8(),pP.a):new EHt(this.a)},l.Mc=function(e){var n;return n=this.a.f,qz(this.a,e),this.a.f!=n},l.gc=function(){return this.a.f},F(Ra,"BasicEMap/3",1035),D(1036,28,xy,Hzt),l.$b=function(){this.a.c.$b()},l.Hc=function(e){return Aue(this.a,e)},l.Kc=function(){return this.a.f==0?(y8(),pP.a):new THt(this.a)},l.gc=function(){return this.a.f},F(Ra,"BasicEMap/4",1036),D(1037,N1,zu,Vzt),l.$b=function(){this.a.c.$b()},l.Hc=function(e){var n,r,s,o,h,d,v,k,C;if(this.a.f>0&&_t(e,42)&&(this.a.qj(),k=u(e,42),v=k.cd(),o=v==null?0:Hi(v),h=rwt(this.a,o),n=this.a.d[h],n)){for(r=u(n.g,367),C=n.i,d=0;d"+this.c},l.a=0;var y6n=F(Ra,"BasicEMap/EntryImpl",612);D(536,1,{},Ik),F(Ra,"BasicEMap/View",536);var pP;D(768,1,{}),l.Fb=function(e){return k5t((wn(),io),e)},l.Hb=function(){return Pyt((wn(),io))},l.Ib=function(){return eb((wn(),io))},F(Ra,"ECollections/BasicEmptyUnmodifiableEList",768),D(1312,1,n0,cB),l.Nb=function(e){ba(this,e)},l.Rb=function(e){throw it(new Or)},l.Ob=function(){return!1},l.Sb=function(){return!1},l.Pb=function(){throw it(new lc)},l.Tb=function(){return 0},l.Ub=function(){throw it(new lc)},l.Vb=function(){return-1},l.Qb=function(){throw it(new Or)},l.Wb=function(e){throw it(new Or)},F(Ra,"ECollections/BasicEmptyUnmodifiableEList/1",1312),D(1310,768,{20:1,14:1,15:1,58:1},Pqt),l.Vc=function(e,n){GHt()},l.Fc=function(e){return UHt()},l.Wc=function(e,n){return WHt()},l.Gc=function(e){return YHt()},l.$b=function(){KHt()},l.Hc=function(e){return!1},l.Ic=function(e){return!1},l.Jc=function(e){va(this,e)},l.Xb=function(e){return s2t((wn(),e)),null},l.Xc=function(e){return-1},l.dc=function(){return!0},l.Kc=function(){return this.a},l.Yc=function(){return this.a},l.Zc=function(e){return this.a},l.ii=function(e,n){return XHt()},l.ji=function(e,n){QHt()},l.Lc=function(){return new Tn(null,new _n(this,16))},l.$c=function(e){return ZHt()},l.Mc=function(e){return JHt()},l._c=function(e,n){return tVt()},l.gc=function(){return 0},l.ad=function(e){r4(this,e)},l.Nc=function(){return new _n(this,16)},l.Oc=function(){return new Tn(null,new _n(this,16))},l.bd=function(e,n){return wn(),new Qd(io,e,n)},l.Pc=function(){return svt((wn(),io))},l.Qc=function(e){return wn(),eI(io,e)},F(Ra,"ECollections/EmptyUnmodifiableEList",1310),D(1311,768,{20:1,14:1,15:1,58:1,589:1},Fqt),l.Vc=function(e,n){GHt()},l.Fc=function(e){return UHt()},l.Wc=function(e,n){return WHt()},l.Gc=function(e){return YHt()},l.$b=function(){KHt()},l.Hc=function(e){return!1},l.Ic=function(e){return!1},l.Jc=function(e){va(this,e)},l.Xb=function(e){return s2t((wn(),e)),null},l.Xc=function(e){return-1},l.dc=function(){return!0},l.Kc=function(){return this.a},l.Yc=function(){return this.a},l.Zc=function(e){return this.a},l.ii=function(e,n){return XHt()},l.ji=function(e,n){QHt()},l.Lc=function(){return new Tn(null,new _n(this,16))},l.$c=function(e){return ZHt()},l.Mc=function(e){return JHt()},l._c=function(e,n){return tVt()},l.gc=function(){return 0},l.ad=function(e){r4(this,e)},l.Nc=function(){return new _n(this,16)},l.Oc=function(){return new Tn(null,new _n(this,16))},l.bd=function(e,n){return wn(),new Qd(io,e,n)},l.Pc=function(){return svt((wn(),io))},l.Qc=function(e){return wn(),eI(io,e)},l.sj=function(){return wn(),wn(),u0},F(Ra,"ECollections/EmptyUnmodifiableEMap",1311);var ZAt=Ki(Ra,"Enumerator"),dU;D(281,1,{281:1},fat),l.Fb=function(e){var n;return this===e?!0:_t(e,281)?(n=u(e,281),this.f==n.f&&$en(this.i,n.i)&&jnt(this.a,this.f&256?n.f&256?n.a:null:n.f&256?null:n.a)&&jnt(this.d,n.d)&&jnt(this.g,n.g)&&jnt(this.e,n.e)&&Pfn(this,n)):!1},l.Hb=function(){return this.f},l.Ib=function(){return sle(this)},l.f=0;var r5e=0,i5e=0,s5e=0,a5e=0,JAt=0,tLt=0,eLt=0,nLt=0,rLt=0,o5e,oA=0,cA=0,c5e=0,u5e=0,gU,iLt;F(Ra,"URI",281),D(1091,43,A4,Nqt),l.zc=function(e,n){return u(ko(this,Br(e),u(n,281)),281)},F(Ra,"URI/URICache",1091),D(497,63,Ld,Ok,Gj),l.hi=function(){return!0},F(Ra,"UniqueEList",497),D(581,60,Q0,W$),F(Ra,"WrappedException",581);var Zr=Ki(ph,A0e),t3=Ki(ph,L0e),Mu=Ki(ph,M0e),e3=Ki(ph,D0e),s1=Ki(ph,I0e),Uh=Ki(ph,"EClass"),Nft=Ki(ph,"EDataType"),l5e;D(1183,43,A4,Bqt),l.xc=function(e){return ra(e)?Nc(this,e):ec(Lo(this.f,e))},F(ph,"EDataType/Internal/ConversionDelegate/Factory/Registry/Impl",1183);var pU=Ki(ph,"EEnum"),ag=Ki(ph,O0e),ho=Ki(ph,P0e),Wh=Ki(ph,F0e),Yh,Vv=Ki(ph,N0e),n3=Ki(ph,B0e);D(1029,1,{},nJ),l.Ib=function(){return"NIL"},F(ph,"EStructuralFeature/Internal/DynamicValueHolder/1",1029);var h5e;D(1028,43,A4,Rqt),l.xc=function(e){return ra(e)?Nc(this,e):ec(Lo(this.f,e))},F(ph,"EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl",1028);var hu=Ki(ph,R0e),Z6=Ki(ph,"EValidator/PatternMatcher"),sLt,aLt,Ln,ap,r3,Lb,f5e,d5e,g5e,Mb,op,Db,Gv,W1,p5e,b5e,Kh,cp,w5e,up,i3,l5,Qa,v5e,m5e,Uv,bU=Ki($i,"FeatureMap/Entry");D(535,1,{72:1},lj),l.ak=function(){return this.a},l.dd=function(){return this.b},F(Mn,"BasicEObjectImpl/1",535),D(1027,1,hut,XGt),l.Wj=function(e){return Urt(this.a,this.b,e)},l.fj=function(){return MQt(this.a,this.b)},l.Wb=function(e){zvt(this.a,this.b,e)},l.Xj=function(){Nnn(this.a,this.b)},F(Mn,"BasicEObjectImpl/4",1027),D(1983,1,{108:1}),l.bk=function(e){this.e=e==0?y5e:Nt(Qn,De,1,e,5,1)},l.Ch=function(e){return this.e[e]},l.Dh=function(e,n){this.e[e]=n},l.Eh=function(e){this.e[e]=null},l.ck=function(){return this.c},l.dk=function(){throw it(new Or)},l.ek=function(){throw it(new Or)},l.fk=function(){return this.d},l.gk=function(){return this.e!=null},l.hk=function(e){this.c=e},l.ik=function(e){throw it(new Or)},l.jk=function(e){throw it(new Or)},l.kk=function(e){this.d=e};var y5e;F(Mn,"BasicEObjectImpl/EPropertiesHolderBaseImpl",1983),D(185,1983,{108:1},nh),l.dk=function(){return this.a},l.ek=function(){return this.b},l.ik=function(e){this.a=e},l.jk=function(e){this.b=e},F(Mn,"BasicEObjectImpl/EPropertiesHolderImpl",185),D(506,97,jde,Pk),l.Kg=function(){return this.f},l.Pg=function(){return this.k},l.Rg=function(e,n){this.g=e,this.i=n},l.Tg=function(){return this.j&2?this.ph().ck():this.zh()},l.Vg=function(){return this.i},l.Mg=function(){return(this.j&1)!=0},l.eh=function(){return this.g},l.kh=function(){return(this.j&4)!=0},l.ph=function(){return!this.k&&(this.k=new nh),this.k},l.th=function(e){this.ph().hk(e),e?this.j|=2:this.j&=-3},l.vh=function(e){this.ph().jk(e),e?this.j|=4:this.j&=-5},l.zh=function(){return(Hp(),Ln).S},l.i=0,l.j=1,F(Mn,"EObjectImpl",506),D(780,506,{105:1,92:1,90:1,56:1,108:1,49:1,97:1},zwt),l.Ch=function(e){return this.e[e]},l.Dh=function(e,n){this.e[e]=n},l.Eh=function(e){this.e[e]=null},l.Tg=function(){return this.d},l.Yg=function(e){return Gi(this.d,e)},l.$g=function(){return this.d},l.dh=function(){return this.e!=null},l.ph=function(){return!this.k&&(this.k=new uB),this.k},l.th=function(e){this.d=e},l.yh=function(){var e;return this.e==null&&(e=Jn(this.d),this.e=e==0?x5e:Nt(Qn,De,1,e,5,1)),this},l.Ah=function(){return 0};var x5e;F(Mn,"DynamicEObjectImpl",780),D(1376,780,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1},hKt),l.Fb=function(e){return this===e},l.Hb=function(){return Pw(this)},l.th=function(e){this.d=e,this.b=mI(e,"key"),this.c=mI(e,Z_)},l.Sh=function(){var e;return this.a==-1&&(e=iit(this,this.b),this.a=e==null?0:Hi(e)),this.a},l.cd=function(){return iit(this,this.b)},l.dd=function(){return iit(this,this.c)},l.Th=function(e){this.a=e},l.Uh=function(e){zvt(this,this.b,e)},l.ed=function(e){var n;return n=iit(this,this.c),zvt(this,this.c,e),n},l.a=0,F(Mn,"DynamicEObjectImpl/BasicEMapEntry",1376),D(1377,1,{108:1},uB),l.bk=function(e){throw it(new Or)},l.Ch=function(e){throw it(new Or)},l.Dh=function(e,n){throw it(new Or)},l.Eh=function(e){throw it(new Or)},l.ck=function(){throw it(new Or)},l.dk=function(){return this.a},l.ek=function(){return this.b},l.fk=function(){return this.c},l.gk=function(){throw it(new Or)},l.hk=function(e){throw it(new Or)},l.ik=function(e){this.a=e},l.jk=function(e){this.b=e},l.kk=function(e){this.c=e},F(Mn,"DynamicEObjectImpl/DynamicEPropertiesHolderImpl",1377),D(510,150,{105:1,92:1,90:1,590:1,147:1,56:1,108:1,49:1,97:1,510:1,150:1,114:1,115:1},lB),l.Qg=function(e){return a4t(this,e)},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),this.Ab;case 1:return this.d;case 2:return r?(!this.b&&(this.b=new kl((dn(),Qa),cc,this)),this.b):(!this.b&&(this.b=new kl((dn(),Qa),cc,this)),wD(this.b));case 3:return FQt(this);case 4:return!this.a&&(this.a=new As(_b,this,4)),this.a;case 5:return!this.c&&(this.c=new Y3(_b,this,5)),this.c}return uh(this,e-Jn((dn(),ap)),yn((s=u(Dn(this,16),26),s||ap),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),Zc(this.Ab,e,r);case 3:return this.Cb&&(r=(o=this.Db>>16,o>=0?a4t(this,r):this.Cb.ih(this,-1-o,null,r))),rvt(this,u(e,147),r)}return h=u(yn((s=u(Dn(this,16),26),s||(dn(),ap)),n),66),h.Nj().Qj(this,su(this),n-Jn((dn(),ap)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),Ba(this.Ab,e,r);case 2:return!this.b&&(this.b=new kl((dn(),Qa),cc,this)),Oj(this.b,e,r);case 3:return rvt(this,null,r);case 4:return!this.a&&(this.a=new As(_b,this,4)),Ba(this.a,e,r)}return o=u(yn((s=u(Dn(this,16),26),s||(dn(),ap)),n),66),o.Nj().Rj(this,su(this),n-Jn((dn(),ap)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.d!=null;case 2:return!!this.b&&this.b.f!=0;case 3:return!!FQt(this);case 4:return!!this.a&&this.a.i!=0;case 5:return!!this.c&&this.c.i!=0}return oh(this,e-Jn((dn(),ap)),yn((n=u(Dn(this,16),26),n||ap),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),is(this.Ab,u(n,14));return;case 1:Cen(this,Br(n));return;case 2:!this.b&&(this.b=new kl((dn(),Qa),cc,this)),xz(this.b,n);return;case 3:Kce(this,u(n,147));return;case 4:!this.a&&(this.a=new As(_b,this,4)),xr(this.a),!this.a&&(this.a=new As(_b,this,4)),is(this.a,u(n,14));return;case 5:!this.c&&(this.c=new Y3(_b,this,5)),xr(this.c),!this.c&&(this.c=new Y3(_b,this,5)),is(this.c,u(n,14));return}gh(this,e-Jn((dn(),ap)),yn((r=u(Dn(this,16),26),r||ap),e),n)},l.zh=function(){return dn(),ap},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab);return;case 1:oyt(this,null);return;case 2:!this.b&&(this.b=new kl((dn(),Qa),cc,this)),this.b.c.$b();return;case 3:Kce(this,null);return;case 4:!this.a&&(this.a=new As(_b,this,4)),xr(this.a);return;case 5:!this.c&&(this.c=new Y3(_b,this,5)),xr(this.c);return}fh(this,e-Jn((dn(),ap)),yn((n=u(Dn(this,16),26),n||ap),e))},l.Ib=function(){return lie(this)},l.d=null,F(Mn,"EAnnotationImpl",510),D(151,705,j8t,_l),l.Xh=function(e,n){oQe(this,e,u(n,42))},l.lk=function(e,n){return eJe(this,u(e,42),n)},l.pi=function(e){return u(u(this.c,69).pi(e),133)},l.Zh=function(){return u(this.c,69).Zh()},l.$h=function(){return u(this.c,69).$h()},l._h=function(e){return u(this.c,69)._h(e)},l.mk=function(e,n){return Oj(this,e,n)},l.Wj=function(e){return u(this.c,76).Wj(e)},l.rj=function(){},l.fj=function(){return u(this.c,76).fj()},l.tj=function(e,n,r){var s;return s=u(Rl(this.b).Nh().Jh(this.b),133),s.Th(e),s.Uh(n),s.ed(r),s},l.uj=function(){return new _pt(this)},l.Wb=function(e){xz(this,e)},l.Xj=function(){u(this.c,76).Xj()},F($i,"EcoreEMap",151),D(158,151,j8t,kl),l.qj=function(){var e,n,r,s,o,h;if(this.d==null){for(h=Nt(XAt,R8t,63,2*this.f+1,0,1),r=this.c.Kc();r.e!=r.i.gc();)n=u(r.nj(),133),s=n.Sh(),o=(s&wi)%h.length,e=h[o],!e&&(e=h[o]=new _pt(this)),e.Fc(n);this.d=h}},F(Mn,"EAnnotationImpl/1",158),D(284,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,472:1,49:1,97:1,150:1,284:1,114:1,115:1}),l._g=function(e,n,r){var s,o;switch(e){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Nn(),!!(this.Bb&256);case 3:return Nn(),!!(this.Bb&512);case 4:return pe(this.s);case 5:return pe(this.t);case 6:return Nn(),!!this.$j();case 7:return Nn(),o=this.s,o>=1;case 8:return n?Dh(this):this.r;case 9:return this.q}return uh(this,e-Jn(this.zh()),yn((s=u(Dn(this,16),26),s||this.zh()),e),n,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),Ba(this.Ab,e,r);case 9:return nrt(this,r)}return o=u(yn((s=u(Dn(this,16),26),s||this.zh()),n),66),o.Nj().Rj(this,su(this),n-Jn(this.zh()),e,r)},l.lh=function(e){var n,r;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.$j();case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&qw(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&qw(this.q).i==0)}return oh(this,e-Jn(this.zh()),yn((n=u(Dn(this,16),26),n||this.zh()),e))},l.sh=function(e,n){var r,s;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),is(this.Ab,u(n,14));return;case 1:this.Lh(Br(n));return;case 2:zg(this,je(Re(n)));return;case 3:qg(this,je(Re(n)));return;case 4:Rg(this,u(n,19).a);return;case 5:this.ok(u(n,19).a);return;case 8:b2(this,u(n,138));return;case 9:s=F1(this,u(n,87),null),s&&s.Fi();return}gh(this,e-Jn(this.zh()),yn((r=u(Dn(this,16),26),r||this.zh()),e),n)},l.zh=function(){return dn(),m5e},l.Bh=function(e){var n,r;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab);return;case 1:this.Lh(null);return;case 2:zg(this,!0);return;case 3:qg(this,!0);return;case 4:Rg(this,0);return;case 5:this.ok(1);return;case 8:b2(this,null);return;case 9:r=F1(this,null,null),r&&r.Fi();return}fh(this,e-Jn(this.zh()),yn((n=u(Dn(this,16),26),n||this.zh()),e))},l.Gh=function(){Dh(this),this.Bb|=1},l.Yj=function(){return Dh(this)},l.Zj=function(){return this.t},l.$j=function(){var e;return e=this.t,e>1||e==-1},l.hi=function(){return(this.Bb&512)!=0},l.nk=function(e,n){return e3t(this,e,n)},l.ok=function(e){ry(this,e)},l.Ib=function(){return f5t(this)},l.s=0,l.t=1,F(Mn,"ETypedElementImpl",284),D(449,284,{105:1,92:1,90:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,449:1,284:1,114:1,115:1,677:1}),l.Qg=function(e){return Use(this,e)},l._g=function(e,n,r){var s,o;switch(e){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Nn(),!!(this.Bb&256);case 3:return Nn(),!!(this.Bb&512);case 4:return pe(this.s);case 5:return pe(this.t);case 6:return Nn(),!!this.$j();case 7:return Nn(),o=this.s,o>=1;case 8:return n?Dh(this):this.r;case 9:return this.q;case 10:return Nn(),!!(this.Bb&xf);case 11:return Nn(),!!(this.Bb&Dy);case 12:return Nn(),!!(this.Bb&Ey);case 13:return this.j;case 14:return SE(this);case 15:return Nn(),!!(this.Bb&Hu);case 16:return Nn(),!!(this.Bb&md);case 17:return Ym(this)}return uh(this,e-Jn(this.zh()),yn((s=u(Dn(this,16),26),s||this.zh()),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),Zc(this.Ab,e,r);case 17:return this.Cb&&(r=(o=this.Db>>16,o>=0?Use(this,r):this.Cb.ih(this,-1-o,null,r))),Hl(this,e,17,r)}return h=u(yn((s=u(Dn(this,16),26),s||this.zh()),n),66),h.Nj().Qj(this,su(this),n-Jn(this.zh()),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),Ba(this.Ab,e,r);case 9:return nrt(this,r);case 17:return Hl(this,null,17,r)}return o=u(yn((s=u(Dn(this,16),26),s||this.zh()),n),66),o.Nj().Rj(this,su(this),n-Jn(this.zh()),e,r)},l.lh=function(e){var n,r;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.$j();case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&qw(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&qw(this.q).i==0);case 10:return(this.Bb&xf)==0;case 11:return(this.Bb&Dy)!=0;case 12:return(this.Bb&Ey)!=0;case 13:return this.j!=null;case 14:return SE(this)!=null;case 15:return(this.Bb&Hu)!=0;case 16:return(this.Bb&md)!=0;case 17:return!!Ym(this)}return oh(this,e-Jn(this.zh()),yn((n=u(Dn(this,16),26),n||this.zh()),e))},l.sh=function(e,n){var r,s;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),is(this.Ab,u(n,14));return;case 1:Mrt(this,Br(n));return;case 2:zg(this,je(Re(n)));return;case 3:qg(this,je(Re(n)));return;case 4:Rg(this,u(n,19).a);return;case 5:this.ok(u(n,19).a);return;case 8:b2(this,u(n,138));return;case 9:s=F1(this,u(n,87),null),s&&s.Fi();return;case 10:lE(this,je(Re(n)));return;case 11:dE(this,je(Re(n)));return;case 12:hE(this,je(Re(n)));return;case 13:r2t(this,Br(n));return;case 15:fE(this,je(Re(n)));return;case 16:gE(this,je(Re(n)));return}gh(this,e-Jn(this.zh()),yn((r=u(Dn(this,16),26),r||this.zh()),e),n)},l.zh=function(){return dn(),v5e},l.Bh=function(e){var n,r;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab);return;case 1:_t(this.Cb,88)&&gy(sl(u(this.Cb,88)),4),Qc(this,null);return;case 2:zg(this,!0);return;case 3:qg(this,!0);return;case 4:Rg(this,0);return;case 5:this.ok(1);return;case 8:b2(this,null);return;case 9:r=F1(this,null,null),r&&r.Fi();return;case 10:lE(this,!0);return;case 11:dE(this,!1);return;case 12:hE(this,!1);return;case 13:this.i=null,fz(this,null);return;case 15:fE(this,!1);return;case 16:gE(this,!1);return}fh(this,e-Jn(this.zh()),yn((n=u(Dn(this,16),26),n||this.zh()),e))},l.Gh=function(){M8(To(($u(),ya),this)),Dh(this),this.Bb|=1},l.Gj=function(){return this.f},l.zj=function(){return SE(this)},l.Hj=function(){return Ym(this)},l.Lj=function(){return null},l.pk=function(){return this.k},l.aj=function(){return this.n},l.Mj=function(){return cq(this)},l.Nj=function(){var e,n,r,s,o,h,d,v,k;return this.p||(r=Ym(this),(r.i==null&&vd(r),r.i).length,s=this.Lj(),s&&Jn(Ym(s)),o=Dh(this),d=o.Bj(),e=d?d.i&1?d==pl?Rs:d==Cr?ja:d==a3?i7:d==aa?la:d==Ob?Sv:d==g5?Av:d==Gu?M6:uS:d:null,n=SE(this),v=o.zj(),shn(this),this.Bb&md&&((h=d4t(($u(),ya),r))&&h!=this||(h=Kx(To(ya,this))))?this.p=new ZGt(this,h):this.$j()?this.rk()?s?this.Bb&Hu?e?this.sk()?this.p=new n2(47,e,this,s):this.p=new n2(5,e,this,s):this.sk()?this.p=new s2(46,this,s):this.p=new s2(4,this,s):e?this.sk()?this.p=new n2(49,e,this,s):this.p=new n2(7,e,this,s):this.sk()?this.p=new s2(48,this,s):this.p=new s2(6,this,s):this.Bb&Hu?e?e==P2?this.p=new Ig(50,t5e,this):this.sk()?this.p=new Ig(43,e,this):this.p=new Ig(1,e,this):this.sk()?this.p=new Pg(42,this):this.p=new Pg(0,this):e?e==P2?this.p=new Ig(41,t5e,this):this.sk()?this.p=new Ig(45,e,this):this.p=new Ig(3,e,this):this.sk()?this.p=new Pg(44,this):this.p=new Pg(2,this):_t(o,148)?e==bU?this.p=new Pg(40,this):this.Bb&512?this.Bb&Hu?e?this.p=new Ig(9,e,this):this.p=new Pg(8,this):e?this.p=new Ig(11,e,this):this.p=new Pg(10,this):this.Bb&Hu?e?this.p=new Ig(13,e,this):this.p=new Pg(12,this):e?this.p=new Ig(15,e,this):this.p=new Pg(14,this):s?(k=s.t,k>1||k==-1?this.sk()?this.Bb&Hu?e?this.p=new n2(25,e,this,s):this.p=new s2(24,this,s):e?this.p=new n2(27,e,this,s):this.p=new s2(26,this,s):this.Bb&Hu?e?this.p=new n2(29,e,this,s):this.p=new s2(28,this,s):e?this.p=new n2(31,e,this,s):this.p=new s2(30,this,s):this.sk()?this.Bb&Hu?e?this.p=new n2(33,e,this,s):this.p=new s2(32,this,s):e?this.p=new n2(35,e,this,s):this.p=new s2(34,this,s):this.Bb&Hu?e?this.p=new n2(37,e,this,s):this.p=new s2(36,this,s):e?this.p=new n2(39,e,this,s):this.p=new s2(38,this,s)):this.sk()?this.Bb&Hu?e?this.p=new Ig(17,e,this):this.p=new Pg(16,this):e?this.p=new Ig(19,e,this):this.p=new Pg(18,this):this.Bb&Hu?e?this.p=new Ig(21,e,this):this.p=new Pg(20,this):e?this.p=new Ig(23,e,this):this.p=new Pg(22,this):this.qk()?this.sk()?this.p=new jYt(u(o,26),this,s):this.p=new $vt(u(o,26),this,s):_t(o,148)?e==bU?this.p=new Pg(40,this):this.Bb&Hu?e?this.p=new BKt(n,v,this,(rst(),d==Cr?dLt:d==pl?cLt:d==Ob?gLt:d==a3?fLt:d==aa?hLt:d==g5?pLt:d==Gu?uLt:d==xh?lLt:jft)):this.p=new KXt(u(o,148),n,v,this):e?this.p=new NKt(n,v,this,(rst(),d==Cr?dLt:d==pl?cLt:d==Ob?gLt:d==a3?fLt:d==aa?hLt:d==g5?pLt:d==Gu?uLt:d==xh?lLt:jft)):this.p=new YXt(u(o,148),n,v,this):this.rk()?s?this.Bb&Hu?this.sk()?this.p=new zYt(u(o,26),this,s):this.p=new Dwt(u(o,26),this,s):this.sk()?this.p=new $Yt(u(o,26),this,s):this.p=new Int(u(o,26),this,s):this.Bb&Hu?this.sk()?this.p=new NWt(u(o,26),this):this.p=new G2t(u(o,26),this):this.sk()?this.p=new FWt(u(o,26),this):this.p=new vnt(u(o,26),this):this.sk()?s?this.Bb&Hu?this.p=new qYt(u(o,26),this,s):this.p=new Lwt(u(o,26),this,s):this.Bb&Hu?this.p=new BWt(u(o,26),this):this.p=new U2t(u(o,26),this):s?this.Bb&Hu?this.p=new HYt(u(o,26),this,s):this.p=new Mwt(u(o,26),this,s):this.Bb&Hu?this.p=new RWt(u(o,26),this):this.p=new Uj(u(o,26),this)),this.p},l.Ij=function(){return(this.Bb&xf)!=0},l.qk=function(){return!1},l.rk=function(){return!1},l.Jj=function(){return(this.Bb&md)!=0},l.Oj=function(){return ait(this)},l.sk=function(){return!1},l.Kj=function(){return(this.Bb&Hu)!=0},l.tk=function(e){this.k=e},l.Lh=function(e){Mrt(this,e)},l.Ib=function(){return _q(this)},l.e=!1,l.n=0,F(Mn,"EStructuralFeatureImpl",449),D(322,449,{105:1,92:1,90:1,34:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,322:1,150:1,449:1,284:1,114:1,115:1,677:1},ret),l._g=function(e,n,r){var s,o;switch(e){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Nn(),!!(this.Bb&256);case 3:return Nn(),!!(this.Bb&512);case 4:return pe(this.s);case 5:return pe(this.t);case 6:return Nn(),!!c5t(this);case 7:return Nn(),o=this.s,o>=1;case 8:return n?Dh(this):this.r;case 9:return this.q;case 10:return Nn(),!!(this.Bb&xf);case 11:return Nn(),!!(this.Bb&Dy);case 12:return Nn(),!!(this.Bb&Ey);case 13:return this.j;case 14:return SE(this);case 15:return Nn(),!!(this.Bb&Hu);case 16:return Nn(),!!(this.Bb&md);case 17:return Ym(this);case 18:return Nn(),!!(this.Bb&dc);case 19:return n?Tit(this):KJt(this)}return uh(this,e-Jn((dn(),r3)),yn((s=u(Dn(this,16),26),s||r3),e),n,r)},l.lh=function(e){var n,r;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return c5t(this);case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&qw(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&qw(this.q).i==0);case 10:return(this.Bb&xf)==0;case 11:return(this.Bb&Dy)!=0;case 12:return(this.Bb&Ey)!=0;case 13:return this.j!=null;case 14:return SE(this)!=null;case 15:return(this.Bb&Hu)!=0;case 16:return(this.Bb&md)!=0;case 17:return!!Ym(this);case 18:return(this.Bb&dc)!=0;case 19:return!!KJt(this)}return oh(this,e-Jn((dn(),r3)),yn((n=u(Dn(this,16),26),n||r3),e))},l.sh=function(e,n){var r,s;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),is(this.Ab,u(n,14));return;case 1:Mrt(this,Br(n));return;case 2:zg(this,je(Re(n)));return;case 3:qg(this,je(Re(n)));return;case 4:Rg(this,u(n,19).a);return;case 5:SHt(this,u(n,19).a);return;case 8:b2(this,u(n,138));return;case 9:s=F1(this,u(n,87),null),s&&s.Fi();return;case 10:lE(this,je(Re(n)));return;case 11:dE(this,je(Re(n)));return;case 12:hE(this,je(Re(n)));return;case 13:r2t(this,Br(n));return;case 15:fE(this,je(Re(n)));return;case 16:gE(this,je(Re(n)));return;case 18:Kit(this,je(Re(n)));return}gh(this,e-Jn((dn(),r3)),yn((r=u(Dn(this,16),26),r||r3),e),n)},l.zh=function(){return dn(),r3},l.Bh=function(e){var n,r;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab);return;case 1:_t(this.Cb,88)&&gy(sl(u(this.Cb,88)),4),Qc(this,null);return;case 2:zg(this,!0);return;case 3:qg(this,!0);return;case 4:Rg(this,0);return;case 5:this.b=0,ry(this,1);return;case 8:b2(this,null);return;case 9:r=F1(this,null,null),r&&r.Fi();return;case 10:lE(this,!0);return;case 11:dE(this,!1);return;case 12:hE(this,!1);return;case 13:this.i=null,fz(this,null);return;case 15:fE(this,!1);return;case 16:gE(this,!1);return;case 18:Kit(this,!1);return}fh(this,e-Jn((dn(),r3)),yn((n=u(Dn(this,16),26),n||r3),e))},l.Gh=function(){Tit(this),M8(To(($u(),ya),this)),Dh(this),this.Bb|=1},l.$j=function(){return c5t(this)},l.nk=function(e,n){return this.b=0,this.a=null,e3t(this,e,n)},l.ok=function(e){SHt(this,e)},l.Ib=function(){var e;return this.Db&64?_q(this):(e=new _h(_q(this)),e.a+=" (iD: ",Lg(e,(this.Bb&dc)!=0),e.a+=")",e.a)},l.b=0,F(Mn,"EAttributeImpl",322),D(351,438,{105:1,92:1,90:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1}),l.uk=function(e){return e.Tg()==this},l.Qg=function(e){return Lst(this,e)},l.Rg=function(e,n){this.w=null,this.Db=n<<16|this.Db&255,this.Cb=e},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return hv(this);case 4:return this.zj();case 5:return this.F;case 6:return n?Rl(this):O8(this);case 7:return!this.A&&(this.A=new Fu(hu,this,7)),this.A}return uh(this,e-Jn(this.zh()),yn((s=u(Dn(this,16),26),s||this.zh()),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),Zc(this.Ab,e,r);case 6:return this.Cb&&(r=(o=this.Db>>16,o>=0?Lst(this,r):this.Cb.ih(this,-1-o,null,r))),Hl(this,e,6,r)}return h=u(yn((s=u(Dn(this,16),26),s||this.zh()),n),66),h.Nj().Qj(this,su(this),n-Jn(this.zh()),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),Ba(this.Ab,e,r);case 6:return Hl(this,null,6,r);case 7:return!this.A&&(this.A=new Fu(hu,this,7)),Ba(this.A,e,r)}return o=u(yn((s=u(Dn(this,16),26),s||this.zh()),n),66),o.Nj().Rj(this,su(this),n-Jn(this.zh()),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return!!hv(this);case 4:return this.zj()!=null;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return!!O8(this);case 7:return!!this.A&&this.A.i!=0}return oh(this,e-Jn(this.zh()),yn((n=u(Dn(this,16),26),n||this.zh()),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),is(this.Ab,u(n,14));return;case 1:_$(this,Br(n));return;case 2:snt(this,Br(n));return;case 5:OE(this,Br(n));return;case 7:!this.A&&(this.A=new Fu(hu,this,7)),xr(this.A),!this.A&&(this.A=new Fu(hu,this,7)),is(this.A,u(n,14));return}gh(this,e-Jn(this.zh()),yn((r=u(Dn(this,16),26),r||this.zh()),e),n)},l.zh=function(){return dn(),f5e},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab);return;case 1:_t(this.Cb,179)&&(u(this.Cb,179).tb=null),Qc(this,null);return;case 2:aE(this,null),Y8(this,this.D);return;case 5:OE(this,null);return;case 7:!this.A&&(this.A=new Fu(hu,this,7)),xr(this.A);return}fh(this,e-Jn(this.zh()),yn((n=u(Dn(this,16),26),n||this.zh()),e))},l.yj=function(){var e;return this.G==-1&&(this.G=(e=Rl(this),e?Hg(e.Mh(),this):-1)),this.G},l.zj=function(){return null},l.Aj=function(){return Rl(this)},l.vk=function(){return this.v},l.Bj=function(){return hv(this)},l.Cj=function(){return this.D!=null?this.D:this.B},l.Dj=function(){return this.F},l.wj=function(e){return xat(this,e)},l.wk=function(e){this.v=e},l.xk=function(e){Cne(this,e)},l.yk=function(e){this.C=e},l.Lh=function(e){_$(this,e)},l.Ib=function(){return Rz(this)},l.C=null,l.D=null,l.G=-1,F(Mn,"EClassifierImpl",351),D(88,351,{105:1,92:1,90:1,26:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,88:1,351:1,150:1,473:1,114:1,115:1,676:1},eM),l.uk=function(e){return zZe(this,e.Tg())},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return hv(this);case 4:return null;case 5:return this.F;case 6:return n?Rl(this):O8(this);case 7:return!this.A&&(this.A=new Fu(hu,this,7)),this.A;case 8:return Nn(),!!(this.Bb&256);case 9:return Nn(),!!(this.Bb&512);case 10:return Ao(this);case 11:return!this.q&&(this.q=new fe(Wh,this,11,10)),this.q;case 12:return T4(this);case 13:return C_(this);case 14:return C_(this),this.r;case 15:return T4(this),this.k;case 16:return Z4t(this);case 17:return _at(this);case 18:return vd(this);case 19:return mq(this);case 20:return T4(this),this.o;case 21:return!this.s&&(this.s=new fe(Mu,this,21,17)),this.s;case 22:return Lc(this);case 23:return hat(this)}return uh(this,e-Jn((dn(),Lb)),yn((s=u(Dn(this,16),26),s||Lb),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),Zc(this.Ab,e,r);case 6:return this.Cb&&(r=(o=this.Db>>16,o>=0?Lst(this,r):this.Cb.ih(this,-1-o,null,r))),Hl(this,e,6,r);case 11:return!this.q&&(this.q=new fe(Wh,this,11,10)),Zc(this.q,e,r);case 21:return!this.s&&(this.s=new fe(Mu,this,21,17)),Zc(this.s,e,r)}return h=u(yn((s=u(Dn(this,16),26),s||(dn(),Lb)),n),66),h.Nj().Qj(this,su(this),n-Jn((dn(),Lb)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),Ba(this.Ab,e,r);case 6:return Hl(this,null,6,r);case 7:return!this.A&&(this.A=new Fu(hu,this,7)),Ba(this.A,e,r);case 11:return!this.q&&(this.q=new fe(Wh,this,11,10)),Ba(this.q,e,r);case 21:return!this.s&&(this.s=new fe(Mu,this,21,17)),Ba(this.s,e,r);case 22:return Ba(Lc(this),e,r)}return o=u(yn((s=u(Dn(this,16),26),s||(dn(),Lb)),n),66),o.Nj().Rj(this,su(this),n-Jn((dn(),Lb)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return!!hv(this);case 4:return!1;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return!!O8(this);case 7:return!!this.A&&this.A.i!=0;case 8:return(this.Bb&256)!=0;case 9:return(this.Bb&512)!=0;case 10:return!!this.u&&Lc(this.u.a).i!=0&&!(this.n&&vst(this.n));case 11:return!!this.q&&this.q.i!=0;case 12:return T4(this).i!=0;case 13:return C_(this).i!=0;case 14:return C_(this),this.r.i!=0;case 15:return T4(this),this.k.i!=0;case 16:return Z4t(this).i!=0;case 17:return _at(this).i!=0;case 18:return vd(this).i!=0;case 19:return mq(this).i!=0;case 20:return T4(this),!!this.o;case 21:return!!this.s&&this.s.i!=0;case 22:return!!this.n&&vst(this.n);case 23:return hat(this).i!=0}return oh(this,e-Jn((dn(),Lb)),yn((n=u(Dn(this,16),26),n||Lb),e))},l.oh=function(e){var n;return n=this.i==null||this.q&&this.q.i!=0?null:mI(this,e),n||Lxt(this,e)},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),is(this.Ab,u(n,14));return;case 1:_$(this,Br(n));return;case 2:snt(this,Br(n));return;case 5:OE(this,Br(n));return;case 7:!this.A&&(this.A=new Fu(hu,this,7)),xr(this.A),!this.A&&(this.A=new Fu(hu,this,7)),is(this.A,u(n,14));return;case 8:r3t(this,je(Re(n)));return;case 9:i3t(this,je(Re(n)));return;case 10:A_(Ao(this)),is(Ao(this),u(n,14));return;case 11:!this.q&&(this.q=new fe(Wh,this,11,10)),xr(this.q),!this.q&&(this.q=new fe(Wh,this,11,10)),is(this.q,u(n,14));return;case 21:!this.s&&(this.s=new fe(Mu,this,21,17)),xr(this.s),!this.s&&(this.s=new fe(Mu,this,21,17)),is(this.s,u(n,14));return;case 22:xr(Lc(this)),is(Lc(this),u(n,14));return}gh(this,e-Jn((dn(),Lb)),yn((r=u(Dn(this,16),26),r||Lb),e),n)},l.zh=function(){return dn(),Lb},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab);return;case 1:_t(this.Cb,179)&&(u(this.Cb,179).tb=null),Qc(this,null);return;case 2:aE(this,null),Y8(this,this.D);return;case 5:OE(this,null);return;case 7:!this.A&&(this.A=new Fu(hu,this,7)),xr(this.A);return;case 8:r3t(this,!1);return;case 9:i3t(this,!1);return;case 10:this.u&&A_(this.u);return;case 11:!this.q&&(this.q=new fe(Wh,this,11,10)),xr(this.q);return;case 21:!this.s&&(this.s=new fe(Mu,this,21,17)),xr(this.s);return;case 22:this.n&&xr(this.n);return}fh(this,e-Jn((dn(),Lb)),yn((n=u(Dn(this,16),26),n||Lb),e))},l.Gh=function(){var e,n;if(T4(this),C_(this),Z4t(this),_at(this),vd(this),mq(this),hat(this),z9(ien(sl(this))),this.s)for(e=0,n=this.s.i;e=0;--n)At(this,n);return _3t(this,e)},l.Xj=function(){xr(this)},l.oi=function(e,n){return Yee(this,e,n)},F($i,"EcoreEList",622),D(496,622,zo,ZM),l.ai=function(){return!1},l.aj=function(){return this.c},l.bj=function(){return!1},l.Fk=function(){return!0},l.hi=function(){return!0},l.li=function(e,n){return n},l.ni=function(){return!1},l.c=0,F($i,"EObjectEList",496),D(85,496,zo,As),l.bj=function(){return!0},l.Dk=function(){return!1},l.rk=function(){return!0},F($i,"EObjectContainmentEList",85),D(545,85,zo,kj),l.ci=function(){this.b=!0},l.fj=function(){return this.b},l.Xj=function(){var e;xr(this),xl(this.e)?(e=this.b,this.b=!1,mi(this.e,new bf(this.e,2,this.c,e,!1))):this.b=!1},l.b=!1,F($i,"EObjectContainmentEList/Unsettable",545),D(1140,545,zo,PKt),l.ii=function(e,n){var r,s;return r=u(r_(this,e,n),87),xl(this.e)&&n8(this,new mD(this.a,7,(dn(),d5e),pe(n),(s=r.c,_t(s,88)?u(s,26):Kh),e)),r},l.jj=function(e,n){return Uhn(this,u(e,87),n)},l.kj=function(e,n){return Ghn(this,u(e,87),n)},l.lj=function(e,n,r){return Wdn(this,u(e,87),u(n,87),r)},l.Zi=function(e,n,r,s,o){switch(e){case 3:return F9(this,e,n,r,s,this.i>1);case 5:return F9(this,e,n,r,s,this.i-u(r,15).gc()>0);default:return new z0(this.e,e,this.c,n,r,s,!0)}},l.ij=function(){return!0},l.fj=function(){return vst(this)},l.Xj=function(){xr(this)},F(Mn,"EClassImpl/1",1140),D(1154,1153,B8t),l.ui=function(e){var n,r,s,o,h,d,v;if(r=e.xi(),r!=8){if(s=Lfn(e),s==0)switch(r){case 1:case 9:{v=e.Bi(),v!=null&&(n=sl(u(v,473)),!n.c&&(n.c=new Tm),X$(n.c,e.Ai())),d=e.zi(),d!=null&&(o=u(d,473),o.Bb&1||(n=sl(o),!n.c&&(n.c=new Tm),Dr(n.c,u(e.Ai(),26))));break}case 3:{d=e.zi(),d!=null&&(o=u(d,473),o.Bb&1||(n=sl(o),!n.c&&(n.c=new Tm),Dr(n.c,u(e.Ai(),26))));break}case 5:{if(d=e.zi(),d!=null)for(h=u(d,14).Kc();h.Ob();)o=u(h.Pb(),473),o.Bb&1||(n=sl(o),!n.c&&(n.c=new Tm),Dr(n.c,u(e.Ai(),26)));break}case 4:{v=e.Bi(),v!=null&&(o=u(v,473),o.Bb&1||(n=sl(o),!n.c&&(n.c=new Tm),X$(n.c,e.Ai())));break}case 6:{if(v=e.Bi(),v!=null)for(h=u(v,14).Kc();h.Ob();)o=u(h.Pb(),473),o.Bb&1||(n=sl(o),!n.c&&(n.c=new Tm),X$(n.c,e.Ai()));break}}this.Hk(s)}},l.Hk=function(e){Oue(this,e)},l.b=63,F(Mn,"ESuperAdapter",1154),D(1155,1154,B8t,Uzt),l.Hk=function(e){gy(this,e)},F(Mn,"EClassImpl/10",1155),D(1144,696,zo),l.Vh=function(e,n){return $st(this,e,n)},l.Wh=function(e){return Lse(this,e)},l.Xh=function(e,n){UD(this,e,n)},l.Yh=function(e){gD(this,e)},l.pi=function(e){return Fmt(this,e)},l.mi=function(e,n){return sit(this,e,n)},l.lk=function(e,n){throw it(new Or)},l.Zh=function(){return new Bx(this)},l.$h=function(){return new $M(this)},l._h=function(e){return DD(this,e)},l.mk=function(e,n){throw it(new Or)},l.Wj=function(e){return this},l.fj=function(){return this.i!=0},l.Wb=function(e){throw it(new Or)},l.Xj=function(){throw it(new Or)},F($i,"EcoreEList/UnmodifiableEList",1144),D(319,1144,zo,V3),l.ni=function(){return!1},F($i,"EcoreEList/UnmodifiableEList/FastCompare",319),D(1147,319,zo,wre),l.Xc=function(e){var n,r,s;if(_t(e,170)&&(n=u(e,170),r=n.aj(),r!=-1)){for(s=this.i;r4)if(this.wj(e)){if(this.rk()){if(s=u(e,49),r=s.Ug(),v=r==this.b&&(this.Dk()?s.Og(s.Vg(),u(yn(vu(this.b),this.aj()).Yj(),26).Bj())==no(u(yn(vu(this.b),this.aj()),18)).n:-1-s.Vg()==this.aj()),this.Ek()&&!v&&!r&&s.Zg()){for(o=0;o1||s==-1)):!1},l.Dk=function(){var e,n,r;return n=yn(vu(this.b),this.aj()),_t(n,99)?(e=u(n,18),r=no(e),!!r):!1},l.Ek=function(){var e,n;return n=yn(vu(this.b),this.aj()),_t(n,99)?(e=u(n,18),(e.Bb&Ka)!=0):!1},l.Xc=function(e){var n,r,s,o;if(s=this.Qi(e),s>=0)return s;if(this.Fk()){for(r=0,o=this.Vi();r=0;--e)AI(this,e,this.Oi(e));return this.Wi()},l.Qc=function(e){var n;if(this.Ek())for(n=this.Vi()-1;n>=0;--n)AI(this,n,this.Oi(n));return this.Xi(e)},l.Xj=function(){A_(this)},l.oi=function(e,n){return Ite(this,e,n)},F($i,"DelegatingEcoreEList",742),D(1150,742,z8t,KWt),l.Hi=function(e,n){pZe(this,e,u(n,26))},l.Ii=function(e){uQe(this,u(e,26))},l.Oi=function(e){var n,r;return n=u(At(Lc(this.a),e),87),r=n.c,_t(r,88)?u(r,26):(dn(),Kh)},l.Ti=function(e){var n,r;return n=u(by(Lc(this.a),e),87),r=n.c,_t(r,88)?u(r,26):(dn(),Kh)},l.Ui=function(e,n){return b1n(this,e,u(n,26))},l.ai=function(){return!1},l.Zi=function(e,n,r,s,o){return null},l.Ji=function(){return new Yzt(this)},l.Ki=function(){xr(Lc(this.a))},l.Li=function(e){return cie(this,e)},l.Mi=function(e){var n,r;for(r=e.Kc();r.Ob();)if(n=r.Pb(),!cie(this,n))return!1;return!0},l.Ni=function(e){var n,r,s;if(_t(e,15)&&(s=u(e,15),s.gc()==Lc(this.a).i)){for(n=s.Kc(),r=new nr(this);n.Ob();)if(Vt(n.Pb())!==Vt(dr(r)))return!1;return!0}return!1},l.Pi=function(){var e,n,r,s,o;for(r=1,n=new nr(Lc(this.a));n.e!=n.i.gc();)e=u(dr(n),87),s=(o=e.c,_t(o,88)?u(o,26):(dn(),Kh)),r=31*r+(s?Pw(s):0);return r},l.Qi=function(e){var n,r,s,o;for(s=0,r=new nr(Lc(this.a));r.e!=r.i.gc();){if(n=u(dr(r),87),Vt(e)===Vt((o=n.c,_t(o,88)?u(o,26):(dn(),Kh))))return s;++s}return-1},l.Ri=function(){return Lc(this.a).i==0},l.Si=function(){return null},l.Vi=function(){return Lc(this.a).i},l.Wi=function(){var e,n,r,s,o,h;for(h=Lc(this.a).i,o=Nt(Qn,De,1,h,5,1),r=0,n=new nr(Lc(this.a));n.e!=n.i.gc();)e=u(dr(n),87),o[r++]=(s=e.c,_t(s,88)?u(s,26):(dn(),Kh));return o},l.Xi=function(e){var n,r,s,o,h,d,v;for(v=Lc(this.a).i,e.lengthv&&ts(e,v,null),s=0,r=new nr(Lc(this.a));r.e!=r.i.gc();)n=u(dr(r),87),h=(d=n.c,_t(d,88)?u(d,26):(dn(),Kh)),ts(e,s++,h);return e},l.Yi=function(){var e,n,r,s,o;for(o=new Ag,o.a+="[",e=Lc(this.a),n=0,s=Lc(this.a).i;n>16,o>=0?Lst(this,r):this.Cb.ih(this,-1-o,null,r))),Hl(this,e,6,r);case 9:return!this.a&&(this.a=new fe(ag,this,9,5)),Zc(this.a,e,r)}return h=u(yn((s=u(Dn(this,16),26),s||(dn(),Mb)),n),66),h.Nj().Qj(this,su(this),n-Jn((dn(),Mb)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),Ba(this.Ab,e,r);case 6:return Hl(this,null,6,r);case 7:return!this.A&&(this.A=new Fu(hu,this,7)),Ba(this.A,e,r);case 9:return!this.a&&(this.a=new fe(ag,this,9,5)),Ba(this.a,e,r)}return o=u(yn((s=u(Dn(this,16),26),s||(dn(),Mb)),n),66),o.Nj().Rj(this,su(this),n-Jn((dn(),Mb)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return!!hv(this);case 4:return!!Hyt(this);case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return!!O8(this);case 7:return!!this.A&&this.A.i!=0;case 8:return(this.Bb&256)==0;case 9:return!!this.a&&this.a.i!=0}return oh(this,e-Jn((dn(),Mb)),yn((n=u(Dn(this,16),26),n||Mb),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),is(this.Ab,u(n,14));return;case 1:_$(this,Br(n));return;case 2:snt(this,Br(n));return;case 5:OE(this,Br(n));return;case 7:!this.A&&(this.A=new Fu(hu,this,7)),xr(this.A),!this.A&&(this.A=new Fu(hu,this,7)),is(this.A,u(n,14));return;case 8:Iz(this,je(Re(n)));return;case 9:!this.a&&(this.a=new fe(ag,this,9,5)),xr(this.a),!this.a&&(this.a=new fe(ag,this,9,5)),is(this.a,u(n,14));return}gh(this,e-Jn((dn(),Mb)),yn((r=u(Dn(this,16),26),r||Mb),e),n)},l.zh=function(){return dn(),Mb},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab);return;case 1:_t(this.Cb,179)&&(u(this.Cb,179).tb=null),Qc(this,null);return;case 2:aE(this,null),Y8(this,this.D);return;case 5:OE(this,null);return;case 7:!this.A&&(this.A=new Fu(hu,this,7)),xr(this.A);return;case 8:Iz(this,!0);return;case 9:!this.a&&(this.a=new fe(ag,this,9,5)),xr(this.a);return}fh(this,e-Jn((dn(),Mb)),yn((n=u(Dn(this,16),26),n||Mb),e))},l.Gh=function(){var e,n;if(this.a)for(e=0,n=this.a.i;e>16==5?u(this.Cb,671):null}return uh(this,e-Jn((dn(),op)),yn((s=u(Dn(this,16),26),s||op),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),Zc(this.Ab,e,r);case 5:return this.Cb&&(r=(o=this.Db>>16,o>=0?tae(this,r):this.Cb.ih(this,-1-o,null,r))),Hl(this,e,5,r)}return h=u(yn((s=u(Dn(this,16),26),s||(dn(),op)),n),66),h.Nj().Qj(this,su(this),n-Jn((dn(),op)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),Ba(this.Ab,e,r);case 5:return Hl(this,null,5,r)}return o=u(yn((s=u(Dn(this,16),26),s||(dn(),op)),n),66),o.Nj().Rj(this,su(this),n-Jn((dn(),op)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.d!=0;case 3:return!!this.b;case 4:return this.c!=null;case 5:return!!(this.Db>>16==5&&u(this.Cb,671))}return oh(this,e-Jn((dn(),op)),yn((n=u(Dn(this,16),26),n||op),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),is(this.Ab,u(n,14));return;case 1:Qc(this,Br(n));return;case 2:hit(this,u(n,19).a);return;case 3:Koe(this,u(n,1940));return;case 4:dit(this,Br(n));return}gh(this,e-Jn((dn(),op)),yn((r=u(Dn(this,16),26),r||op),e),n)},l.zh=function(){return dn(),op},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab);return;case 1:Qc(this,null);return;case 2:hit(this,0);return;case 3:Koe(this,null);return;case 4:dit(this,null);return}fh(this,e-Jn((dn(),op)),yn((n=u(Dn(this,16),26),n||op),e))},l.Ib=function(){var e;return e=this.c,e??this.zb},l.b=null,l.c=null,l.d=0,F(Mn,"EEnumLiteralImpl",573);var x6n=Ki(Mn,"EFactoryImpl/InternalEDateTimeFormat");D(489,1,{2015:1},fM),F(Mn,"EFactoryImpl/1ClientInternalEDateTimeFormat",489),D(241,115,{105:1,92:1,90:1,87:1,56:1,108:1,49:1,97:1,241:1,114:1,115:1},xw),l.Sg=function(e,n,r){var s;return r=Hl(this,e,n,r),this.e&&_t(e,170)&&(s=vq(this,this.e),s!=this.c&&(r=PE(this,s,r))),r},l._g=function(e,n,r){var s;switch(e){case 0:return this.f;case 1:return!this.d&&(this.d=new As(ho,this,1)),this.d;case 2:return n?Lq(this):this.c;case 3:return this.b;case 4:return this.e;case 5:return n?xst(this):this.a}return uh(this,e-Jn((dn(),Gv)),yn((s=u(Dn(this,16),26),s||Gv),e),n,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return Zre(this,null,r);case 1:return!this.d&&(this.d=new As(ho,this,1)),Ba(this.d,e,r);case 3:return Qre(this,null,r)}return o=u(yn((s=u(Dn(this,16),26),s||(dn(),Gv)),n),66),o.Nj().Rj(this,su(this),n-Jn((dn(),Gv)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.f;case 1:return!!this.d&&this.d.i!=0;case 2:return!!this.c;case 3:return!!this.b;case 4:return!!this.e;case 5:return!!this.a}return oh(this,e-Jn((dn(),Gv)),yn((n=u(Dn(this,16),26),n||Gv),e))},l.sh=function(e,n){var r;switch(e){case 0:vae(this,u(n,87));return;case 1:!this.d&&(this.d=new As(ho,this,1)),xr(this.d),!this.d&&(this.d=new As(ho,this,1)),is(this.d,u(n,14));return;case 3:k4t(this,u(n,87));return;case 4:j4t(this,u(n,836));return;case 5:H8(this,u(n,138));return}gh(this,e-Jn((dn(),Gv)),yn((r=u(Dn(this,16),26),r||Gv),e),n)},l.zh=function(){return dn(),Gv},l.Bh=function(e){var n;switch(e){case 0:vae(this,null);return;case 1:!this.d&&(this.d=new As(ho,this,1)),xr(this.d);return;case 3:k4t(this,null);return;case 4:j4t(this,null);return;case 5:H8(this,null);return}fh(this,e-Jn((dn(),Gv)),yn((n=u(Dn(this,16),26),n||Gv),e))},l.Ib=function(){var e;return e=new Ol(mf(this)),e.a+=" (expression: ",Mat(this,e),e.a+=")",e.a};var oLt;F(Mn,"EGenericTypeImpl",241),D(1969,1964,NH),l.Xh=function(e,n){UWt(this,e,n)},l.lk=function(e,n){return UWt(this,this.gc(),e),n},l.pi=function(e){return Zf(this.Gi(),e)},l.Zh=function(){return this.$h()},l.Gi=function(){return new Zzt(this)},l.$h=function(){return this._h(0)},l._h=function(e){return this.Gi().Zc(e)},l.mk=function(e,n){return ay(this,e,!0),n},l.ii=function(e,n){var r,s;return s=Dst(this,n),r=this.Zc(e),r.Rb(s),s},l.ji=function(e,n){var r;ay(this,n,!0),r=this.Zc(e),r.Rb(n)},F($i,"AbstractSequentialInternalEList",1969),D(486,1969,NH,jM),l.pi=function(e){return Zf(this.Gi(),e)},l.Zh=function(){return this.b==null?(Mg(),Mg(),bP):this.Jk()},l.Gi=function(){return new wUt(this.a,this.b)},l.$h=function(){return this.b==null?(Mg(),Mg(),bP):this.Jk()},l._h=function(e){var n,r;if(this.b==null){if(e<0||e>1)throw it(new yo(J_+e+", size=0"));return Mg(),Mg(),bP}for(r=this.Jk(),n=0;n0;)if(n=this.c[--this.d],(!this.e||n.Gj()!=j7||n.aj()!=0)&&(!this.Mk()||this.b.mh(n))){if(h=this.b.bh(n,this.Lk()),this.f=(to(),u(n,66).Oj()),this.f||n.$j()){if(this.Lk()?(s=u(h,15),this.k=s):(s=u(h,69),this.k=this.j=s),_t(this.k,54)?(this.o=this.k.gc(),this.n=this.o):this.p=this.j?this.j._h(this.k.gc()):this.k.Zc(this.k.gc()),this.p?loe(this,this.p):koe(this))return o=this.p?this.p.Ub():this.j?this.j.pi(--this.n):this.k.Xb(--this.n),this.f?(e=u(o,72),e.ak(),r=e.dd(),this.i=r):(r=o,this.i=r),this.g=-3,!0}else if(h!=null)return this.k=null,this.p=null,r=h,this.i=r,this.g=-2,!0}return this.k=null,this.p=null,this.g=-1,!1}else return o=this.p?this.p.Ub():this.j?this.j.pi(--this.n):this.k.Xb(--this.n),this.f?(e=u(o,72),e.ak(),r=e.dd(),this.i=r):(r=o,this.i=r),this.g=-3,!0}},l.Pb=function(){return kz(this)},l.Tb=function(){return this.a},l.Ub=function(){var e;if(this.g<-1||this.Sb())return--this.a,this.g=0,e=this.i,this.Sb(),e;throw it(new lc)},l.Vb=function(){return this.a-1},l.Qb=function(){throw it(new Or)},l.Lk=function(){return!1},l.Wb=function(e){throw it(new Or)},l.Mk=function(){return!0},l.a=0,l.d=0,l.f=!1,l.g=0,l.n=0,l.o=0;var bP;F($i,"EContentsEList/FeatureIteratorImpl",279),D(697,279,BH,V2t),l.Lk=function(){return!0},F($i,"EContentsEList/ResolvingFeatureIteratorImpl",697),D(1157,697,BH,PWt),l.Mk=function(){return!1},F(Mn,"ENamedElementImpl/1/1",1157),D(1158,279,BH,OWt),l.Mk=function(){return!1},F(Mn,"ENamedElementImpl/1/2",1158),D(36,143,nO,Qm,Rrt,Js,Jrt,z0,bf,Ymt,cZt,Kmt,uZt,mmt,lZt,Zmt,hZt,ymt,fZt,Xmt,dZt,A9,mD,brt,Qmt,gZt,xmt,pZt),l._i=function(){return Imt(this)},l.gj=function(){var e;return e=Imt(this),e?e.zj():null},l.yi=function(e){return this.b==-1&&this.a&&(this.b=this.c.Xg(this.a.aj(),this.a.Gj())),this.c.Og(this.b,e)},l.Ai=function(){return this.c},l.hj=function(){var e;return e=Imt(this),e?e.Kj():!1},l.b=-1,F(Mn,"ENotificationImpl",36),D(399,284,{105:1,92:1,90:1,147:1,191:1,56:1,59:1,108:1,472:1,49:1,97:1,150:1,399:1,284:1,114:1,115:1},iet),l.Qg=function(e){return rae(this,e)},l._g=function(e,n,r){var s,o,h;switch(e){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Nn(),!!(this.Bb&256);case 3:return Nn(),!!(this.Bb&512);case 4:return pe(this.s);case 5:return pe(this.t);case 6:return Nn(),h=this.t,h>1||h==-1;case 7:return Nn(),o=this.s,o>=1;case 8:return n?Dh(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?u(this.Cb,26):null;case 11:return!this.d&&(this.d=new Fu(hu,this,11)),this.d;case 12:return!this.c&&(this.c=new fe(Vv,this,12,10)),this.c;case 13:return!this.a&&(this.a=new GM(this,this)),this.a;case 14:return al(this)}return uh(this,e-Jn((dn(),cp)),yn((s=u(Dn(this,16),26),s||cp),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),Zc(this.Ab,e,r);case 10:return this.Cb&&(r=(o=this.Db>>16,o>=0?rae(this,r):this.Cb.ih(this,-1-o,null,r))),Hl(this,e,10,r);case 12:return!this.c&&(this.c=new fe(Vv,this,12,10)),Zc(this.c,e,r)}return h=u(yn((s=u(Dn(this,16),26),s||(dn(),cp)),n),66),h.Nj().Qj(this,su(this),n-Jn((dn(),cp)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),Ba(this.Ab,e,r);case 9:return nrt(this,r);case 10:return Hl(this,null,10,r);case 11:return!this.d&&(this.d=new Fu(hu,this,11)),Ba(this.d,e,r);case 12:return!this.c&&(this.c=new fe(Vv,this,12,10)),Ba(this.c,e,r);case 14:return Ba(al(this),e,r)}return o=u(yn((s=u(Dn(this,16),26),s||(dn(),cp)),n),66),o.Nj().Rj(this,su(this),n-Jn((dn(),cp)),e,r)},l.lh=function(e){var n,r,s;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return s=this.t,s>1||s==-1;case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&qw(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&qw(this.q).i==0);case 10:return!!(this.Db>>16==10&&u(this.Cb,26));case 11:return!!this.d&&this.d.i!=0;case 12:return!!this.c&&this.c.i!=0;case 13:return!!this.a&&al(this.a.a).i!=0&&!(this.b&&mst(this.b));case 14:return!!this.b&&mst(this.b)}return oh(this,e-Jn((dn(),cp)),yn((n=u(Dn(this,16),26),n||cp),e))},l.sh=function(e,n){var r,s;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),is(this.Ab,u(n,14));return;case 1:Qc(this,Br(n));return;case 2:zg(this,je(Re(n)));return;case 3:qg(this,je(Re(n)));return;case 4:Rg(this,u(n,19).a);return;case 5:ry(this,u(n,19).a);return;case 8:b2(this,u(n,138));return;case 9:s=F1(this,u(n,87),null),s&&s.Fi();return;case 11:!this.d&&(this.d=new Fu(hu,this,11)),xr(this.d),!this.d&&(this.d=new Fu(hu,this,11)),is(this.d,u(n,14));return;case 12:!this.c&&(this.c=new fe(Vv,this,12,10)),xr(this.c),!this.c&&(this.c=new fe(Vv,this,12,10)),is(this.c,u(n,14));return;case 13:!this.a&&(this.a=new GM(this,this)),A_(this.a),!this.a&&(this.a=new GM(this,this)),is(this.a,u(n,14));return;case 14:xr(al(this)),is(al(this),u(n,14));return}gh(this,e-Jn((dn(),cp)),yn((r=u(Dn(this,16),26),r||cp),e),n)},l.zh=function(){return dn(),cp},l.Bh=function(e){var n,r;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab);return;case 1:Qc(this,null);return;case 2:zg(this,!0);return;case 3:qg(this,!0);return;case 4:Rg(this,0);return;case 5:ry(this,1);return;case 8:b2(this,null);return;case 9:r=F1(this,null,null),r&&r.Fi();return;case 11:!this.d&&(this.d=new Fu(hu,this,11)),xr(this.d);return;case 12:!this.c&&(this.c=new fe(Vv,this,12,10)),xr(this.c);return;case 13:this.a&&A_(this.a);return;case 14:this.b&&xr(this.b);return}fh(this,e-Jn((dn(),cp)),yn((n=u(Dn(this,16),26),n||cp),e))},l.Gh=function(){var e,n;if(this.c)for(e=0,n=this.c.i;ev&&ts(e,v,null),s=0,r=new nr(al(this.a));r.e!=r.i.gc();)n=u(dr(r),87),h=(d=n.c,d||(dn(),W1)),ts(e,s++,h);return e},l.Yi=function(){var e,n,r,s,o;for(o=new Ag,o.a+="[",e=al(this.a),n=0,s=al(this.a).i;n1);case 5:return F9(this,e,n,r,s,this.i-u(r,15).gc()>0);default:return new z0(this.e,e,this.c,n,r,s,!0)}},l.ij=function(){return!0},l.fj=function(){return mst(this)},l.Xj=function(){xr(this)},F(Mn,"EOperationImpl/2",1341),D(498,1,{1938:1,498:1},QGt),F(Mn,"EPackageImpl/1",498),D(16,85,zo,fe),l.zk=function(){return this.d},l.Ak=function(){return this.b},l.Dk=function(){return!0},l.b=0,F($i,"EObjectContainmentWithInverseEList",16),D(353,16,zo,Rx),l.Ek=function(){return!0},l.li=function(e,n){return g6(this,e,u(n,56))},F($i,"EObjectContainmentWithInverseEList/Resolving",353),D(298,353,zo,Gm),l.ci=function(){this.a.tb=null},F(Mn,"EPackageImpl/2",298),D(1228,1,{},hB),F(Mn,"EPackageImpl/3",1228),D(718,43,A4,Upt),l._b=function(e){return ra(e)?wrt(this,e):!!Lo(this.f,e)},F(Mn,"EPackageRegistryImpl",718),D(509,284,{105:1,92:1,90:1,147:1,191:1,56:1,2017:1,108:1,472:1,49:1,97:1,150:1,509:1,284:1,114:1,115:1},set),l.Qg=function(e){return iae(this,e)},l._g=function(e,n,r){var s,o,h;switch(e){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Nn(),!!(this.Bb&256);case 3:return Nn(),!!(this.Bb&512);case 4:return pe(this.s);case 5:return pe(this.t);case 6:return Nn(),h=this.t,h>1||h==-1;case 7:return Nn(),o=this.s,o>=1;case 8:return n?Dh(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?u(this.Cb,59):null}return uh(this,e-Jn((dn(),i3)),yn((s=u(Dn(this,16),26),s||i3),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),Zc(this.Ab,e,r);case 10:return this.Cb&&(r=(o=this.Db>>16,o>=0?iae(this,r):this.Cb.ih(this,-1-o,null,r))),Hl(this,e,10,r)}return h=u(yn((s=u(Dn(this,16),26),s||(dn(),i3)),n),66),h.Nj().Qj(this,su(this),n-Jn((dn(),i3)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),Ba(this.Ab,e,r);case 9:return nrt(this,r);case 10:return Hl(this,null,10,r)}return o=u(yn((s=u(Dn(this,16),26),s||(dn(),i3)),n),66),o.Nj().Rj(this,su(this),n-Jn((dn(),i3)),e,r)},l.lh=function(e){var n,r,s;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return s=this.t,s>1||s==-1;case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&qw(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&qw(this.q).i==0);case 10:return!!(this.Db>>16==10&&u(this.Cb,59))}return oh(this,e-Jn((dn(),i3)),yn((n=u(Dn(this,16),26),n||i3),e))},l.zh=function(){return dn(),i3},F(Mn,"EParameterImpl",509),D(99,449,{105:1,92:1,90:1,147:1,191:1,56:1,18:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,99:1,449:1,284:1,114:1,115:1,677:1},K2t),l._g=function(e,n,r){var s,o,h,d;switch(e){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Nn(),!!(this.Bb&256);case 3:return Nn(),!!(this.Bb&512);case 4:return pe(this.s);case 5:return pe(this.t);case 6:return Nn(),d=this.t,d>1||d==-1;case 7:return Nn(),o=this.s,o>=1;case 8:return n?Dh(this):this.r;case 9:return this.q;case 10:return Nn(),!!(this.Bb&xf);case 11:return Nn(),!!(this.Bb&Dy);case 12:return Nn(),!!(this.Bb&Ey);case 13:return this.j;case 14:return SE(this);case 15:return Nn(),!!(this.Bb&Hu);case 16:return Nn(),!!(this.Bb&md);case 17:return Ym(this);case 18:return Nn(),!!(this.Bb&dc);case 19:return Nn(),h=no(this),!!(h&&h.Bb&dc);case 20:return Nn(),!!(this.Bb&Ka);case 21:return n?no(this):this.b;case 22:return n?Iyt(this):BJt(this);case 23:return!this.a&&(this.a=new Y3(e3,this,23)),this.a}return uh(this,e-Jn((dn(),l5)),yn((s=u(Dn(this,16),26),s||l5),e),n,r)},l.lh=function(e){var n,r,s,o;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return o=this.t,o>1||o==-1;case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&qw(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&qw(this.q).i==0);case 10:return(this.Bb&xf)==0;case 11:return(this.Bb&Dy)!=0;case 12:return(this.Bb&Ey)!=0;case 13:return this.j!=null;case 14:return SE(this)!=null;case 15:return(this.Bb&Hu)!=0;case 16:return(this.Bb&md)!=0;case 17:return!!Ym(this);case 18:return(this.Bb&dc)!=0;case 19:return s=no(this),!!s&&(s.Bb&dc)!=0;case 20:return(this.Bb&Ka)==0;case 21:return!!this.b;case 22:return!!BJt(this);case 23:return!!this.a&&this.a.i!=0}return oh(this,e-Jn((dn(),l5)),yn((n=u(Dn(this,16),26),n||l5),e))},l.sh=function(e,n){var r,s;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),is(this.Ab,u(n,14));return;case 1:Mrt(this,Br(n));return;case 2:zg(this,je(Re(n)));return;case 3:qg(this,je(Re(n)));return;case 4:Rg(this,u(n,19).a);return;case 5:ry(this,u(n,19).a);return;case 8:b2(this,u(n,138));return;case 9:s=F1(this,u(n,87),null),s&&s.Fi();return;case 10:lE(this,je(Re(n)));return;case 11:dE(this,je(Re(n)));return;case 12:hE(this,je(Re(n)));return;case 13:r2t(this,Br(n));return;case 15:fE(this,je(Re(n)));return;case 16:gE(this,je(Re(n)));return;case 18:xin(this,je(Re(n)));return;case 20:u3t(this,je(Re(n)));return;case 21:cyt(this,u(n,18));return;case 23:!this.a&&(this.a=new Y3(e3,this,23)),xr(this.a),!this.a&&(this.a=new Y3(e3,this,23)),is(this.a,u(n,14));return}gh(this,e-Jn((dn(),l5)),yn((r=u(Dn(this,16),26),r||l5),e),n)},l.zh=function(){return dn(),l5},l.Bh=function(e){var n,r;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab);return;case 1:_t(this.Cb,88)&&gy(sl(u(this.Cb,88)),4),Qc(this,null);return;case 2:zg(this,!0);return;case 3:qg(this,!0);return;case 4:Rg(this,0);return;case 5:ry(this,1);return;case 8:b2(this,null);return;case 9:r=F1(this,null,null),r&&r.Fi();return;case 10:lE(this,!0);return;case 11:dE(this,!1);return;case 12:hE(this,!1);return;case 13:this.i=null,fz(this,null);return;case 15:fE(this,!1);return;case 16:gE(this,!1);return;case 18:c3t(this,!1),_t(this.Cb,88)&&gy(sl(u(this.Cb,88)),2);return;case 20:u3t(this,!0);return;case 21:cyt(this,null);return;case 23:!this.a&&(this.a=new Y3(e3,this,23)),xr(this.a);return}fh(this,e-Jn((dn(),l5)),yn((n=u(Dn(this,16),26),n||l5),e))},l.Gh=function(){Iyt(this),M8(To(($u(),ya),this)),Dh(this),this.Bb|=1},l.Lj=function(){return no(this)},l.qk=function(){var e;return e=no(this),!!e&&(e.Bb&dc)!=0},l.rk=function(){return(this.Bb&dc)!=0},l.sk=function(){return(this.Bb&Ka)!=0},l.nk=function(e,n){return this.c=null,e3t(this,e,n)},l.Ib=function(){var e;return this.Db&64?_q(this):(e=new _h(_q(this)),e.a+=" (containment: ",Lg(e,(this.Bb&dc)!=0),e.a+=", resolveProxies: ",Lg(e,(this.Bb&Ka)!=0),e.a+=")",e.a)},F(Mn,"EReferenceImpl",99),D(548,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,548:1,114:1,115:1},iJ),l.Fb=function(e){return this===e},l.cd=function(){return this.b},l.dd=function(){return this.c},l.Hb=function(){return Pw(this)},l.Uh=function(e){_en(this,Br(e))},l.ed=function(e){return gen(this,Br(e))},l._g=function(e,n,r){var s;switch(e){case 0:return this.b;case 1:return this.c}return uh(this,e-Jn((dn(),Qa)),yn((s=u(Dn(this,16),26),s||Qa),e),n,r)},l.lh=function(e){var n;switch(e){case 0:return this.b!=null;case 1:return this.c!=null}return oh(this,e-Jn((dn(),Qa)),yn((n=u(Dn(this,16),26),n||Qa),e))},l.sh=function(e,n){var r;switch(e){case 0:Sen(this,Br(n));return;case 1:syt(this,Br(n));return}gh(this,e-Jn((dn(),Qa)),yn((r=u(Dn(this,16),26),r||Qa),e),n)},l.zh=function(){return dn(),Qa},l.Bh=function(e){var n;switch(e){case 0:iyt(this,null);return;case 1:syt(this,null);return}fh(this,e-Jn((dn(),Qa)),yn((n=u(Dn(this,16),26),n||Qa),e))},l.Sh=function(){var e;return this.a==-1&&(e=this.b,this.a=e==null?0:Vg(e)),this.a},l.Th=function(e){this.a=e},l.Ib=function(){var e;return this.Db&64?mf(this):(e=new _h(mf(this)),e.a+=" (key: ",go(e,this.b),e.a+=", value: ",go(e,this.c),e.a+=")",e.a)},l.a=-1,l.b=null,l.c=null;var cc=F(Mn,"EStringToStringMapEntryImpl",548),E5e=Ki($i,"FeatureMap/Entry/Internal");D(565,1,RH),l.Ok=function(e){return this.Pk(u(e,49))},l.Pk=function(e){return this.Ok(e)},l.Fb=function(e){var n,r;return this===e?!0:_t(e,72)?(n=u(e,72),n.ak()==this.c?(r=this.dd(),r==null?n.dd()==null:yi(r,n.dd())):!1):!1},l.ak=function(){return this.c},l.Hb=function(){var e;return e=this.dd(),Hi(this.c)^(e==null?0:Hi(e))},l.Ib=function(){var e,n;return e=this.c,n=Rl(e.Hj()).Ph(),e.ne(),(n!=null&&n.length!=0?n+":"+e.ne():e.ne())+"="+this.dd()},F(Mn,"EStructuralFeatureImpl/BasicFeatureMapEntry",565),D(776,565,RH,iwt),l.Pk=function(e){return new iwt(this.c,e)},l.dd=function(){return this.a},l.Qk=function(e,n,r){return Hcn(this,e,this.a,n,r)},l.Rk=function(e,n,r){return Vcn(this,e,this.a,n,r)},F(Mn,"EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry",776),D(1314,1,{},ZGt),l.Pj=function(e,n,r,s,o){var h;return h=u(j8(e,this.b),215),h.nl(this.a).Wj(s)},l.Qj=function(e,n,r,s,o){var h;return h=u(j8(e,this.b),215),h.el(this.a,s,o)},l.Rj=function(e,n,r,s,o){var h;return h=u(j8(e,this.b),215),h.fl(this.a,s,o)},l.Sj=function(e,n,r){var s;return s=u(j8(e,this.b),215),s.nl(this.a).fj()},l.Tj=function(e,n,r,s){var o;o=u(j8(e,this.b),215),o.nl(this.a).Wb(s)},l.Uj=function(e,n,r){return u(j8(e,this.b),215).nl(this.a)},l.Vj=function(e,n,r){var s;s=u(j8(e,this.b),215),s.nl(this.a).Xj()},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator",1314),D(89,1,{},Ig,n2,Pg,s2),l.Pj=function(e,n,r,s,o){var h;if(h=n.Ch(r),h==null&&n.Dh(r,h=jq(this,e)),!o)switch(this.e){case 50:case 41:return u(h,589).sj();case 40:return u(h,215).kl()}return h},l.Qj=function(e,n,r,s,o){var h,d;return d=n.Ch(r),d==null&&n.Dh(r,d=jq(this,e)),h=u(d,69).lk(s,o),h},l.Rj=function(e,n,r,s,o){var h;return h=n.Ch(r),h!=null&&(o=u(h,69).mk(s,o)),o},l.Sj=function(e,n,r){var s;return s=n.Ch(r),s!=null&&u(s,76).fj()},l.Tj=function(e,n,r,s){var o;o=u(n.Ch(r),76),!o&&n.Dh(r,o=jq(this,e)),o.Wb(s)},l.Uj=function(e,n,r){var s,o;return o=n.Ch(r),o==null&&n.Dh(r,o=jq(this,e)),_t(o,76)?u(o,76):(s=u(n.Ch(r),15),new Qzt(s))},l.Vj=function(e,n,r){var s;s=u(n.Ch(r),76),!s&&n.Dh(r,s=jq(this,e)),s.Xj()},l.b=0,l.e=0,F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateMany",89),D(504,1,{}),l.Qj=function(e,n,r,s,o){throw it(new Or)},l.Rj=function(e,n,r,s,o){throw it(new Or)},l.Uj=function(e,n,r){return new WXt(this,e,n,r)};var p0;F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingle",504),D(1331,1,hut,WXt),l.Wj=function(e){return this.a.Pj(this.c,this.d,this.b,e,!0)},l.fj=function(){return this.a.Sj(this.c,this.d,this.b)},l.Wb=function(e){this.a.Tj(this.c,this.d,this.b,e)},l.Xj=function(){this.a.Vj(this.c,this.d,this.b)},l.b=0,F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingle/1",1331),D(769,504,{},$vt),l.Pj=function(e,n,r,s,o){return wat(e,e.eh(),e.Vg())==this.b?this.sk()&&s?eat(e):e.eh():null},l.Qj=function(e,n,r,s,o){var h,d;return e.eh()&&(o=(h=e.Vg(),h>=0?e.Qg(o):e.eh().ih(e,-1-h,null,o))),d=Gi(e.Tg(),this.e),e.Sg(s,d,o)},l.Rj=function(e,n,r,s,o){var h;return h=Gi(e.Tg(),this.e),e.Sg(null,h,o)},l.Sj=function(e,n,r){var s;return s=Gi(e.Tg(),this.e),!!e.eh()&&e.Vg()==s},l.Tj=function(e,n,r,s){var o,h,d,v,k;if(s!=null&&!xat(this.a,s))throw it(new i8(jH+(_t(s,56)?y4t(u(s,56).Tg()):Vmt(ol(s)))+$H+this.a+"'"));if(o=e.eh(),d=Gi(e.Tg(),this.e),Vt(s)!==Vt(o)||e.Vg()!=d&&s!=null){if(vE(e,u(s,56)))throw it(new Fn(Q_+e.Ib()));k=null,o&&(k=(h=e.Vg(),h>=0?e.Qg(k):e.eh().ih(e,-1-h,null,k))),v=u(s,49),v&&(k=v.gh(e,Gi(v.Tg(),this.b),null,k)),k=e.Sg(v,d,k),k&&k.Fi()}else e.Lg()&&e.Mg()&&mi(e,new Js(e,1,d,s,s))},l.Vj=function(e,n,r){var s,o,h,d;s=e.eh(),s?(d=(o=e.Vg(),o>=0?e.Qg(null):e.eh().ih(e,-1-o,null,null)),h=Gi(e.Tg(),this.e),d=e.Sg(null,h,d),d&&d.Fi()):e.Lg()&&e.Mg()&&mi(e,new A9(e,1,this.e,null,null))},l.sk=function(){return!1},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainer",769),D(1315,769,{},jYt),l.sk=function(){return!0},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving",1315),D(563,504,{}),l.Pj=function(e,n,r,s,o){var h;return h=n.Ch(r),h==null?this.b:Vt(h)===Vt(p0)?null:h},l.Sj=function(e,n,r){var s;return s=n.Ch(r),s!=null&&(Vt(s)===Vt(p0)||!yi(s,this.b))},l.Tj=function(e,n,r,s){var o,h;e.Lg()&&e.Mg()?(o=(h=n.Ch(r),h==null?this.b:Vt(h)===Vt(p0)?null:h),s==null?this.c!=null?(n.Dh(r,null),s=this.b):this.b!=null?n.Dh(r,p0):n.Dh(r,null):(this.Sk(s),n.Dh(r,s)),mi(e,this.d.Tk(e,1,this.e,o,s))):s==null?this.c!=null?n.Dh(r,null):this.b!=null?n.Dh(r,p0):n.Dh(r,null):(this.Sk(s),n.Dh(r,s))},l.Vj=function(e,n,r){var s,o;e.Lg()&&e.Mg()?(s=(o=n.Ch(r),o==null?this.b:Vt(o)===Vt(p0)?null:o),n.Eh(r),mi(e,this.d.Tk(e,1,this.e,s,this.b))):n.Eh(r)},l.Sk=function(e){throw it(new oqt)},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData",563),D(R4,1,{},fB),l.Tk=function(e,n,r,s,o){return new A9(e,n,r,s,o)},l.Uk=function(e,n,r,s,o,h){return new brt(e,n,r,s,o,h)};var cLt,uLt,lLt,hLt,fLt,dLt,gLt,jft,pLt;F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator",R4),D(1332,R4,{},dB),l.Tk=function(e,n,r,s,o){return new xmt(e,n,r,je(Re(s)),je(Re(o)))},l.Uk=function(e,n,r,s,o,h){return new pZt(e,n,r,je(Re(s)),je(Re(o)),h)},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1",1332),D(1333,R4,{},gB),l.Tk=function(e,n,r,s,o){return new Ymt(e,n,r,u(s,217).a,u(o,217).a)},l.Uk=function(e,n,r,s,o,h){return new cZt(e,n,r,u(s,217).a,u(o,217).a,h)},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2",1333),D(1334,R4,{},Nk),l.Tk=function(e,n,r,s,o){return new Kmt(e,n,r,u(s,172).a,u(o,172).a)},l.Uk=function(e,n,r,s,o,h){return new uZt(e,n,r,u(s,172).a,u(o,172).a,h)},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3",1334),D(1335,R4,{},pB),l.Tk=function(e,n,r,s,o){return new mmt(e,n,r,Xt(ye(s)),Xt(ye(o)))},l.Uk=function(e,n,r,s,o,h){return new lZt(e,n,r,Xt(ye(s)),Xt(ye(o)),h)},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4",1335),D(1336,R4,{},bB),l.Tk=function(e,n,r,s,o){return new Zmt(e,n,r,u(s,155).a,u(o,155).a)},l.Uk=function(e,n,r,s,o,h){return new hZt(e,n,r,u(s,155).a,u(o,155).a,h)},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5",1336),D(1337,R4,{},sJ),l.Tk=function(e,n,r,s,o){return new ymt(e,n,r,u(s,19).a,u(o,19).a)},l.Uk=function(e,n,r,s,o,h){return new fZt(e,n,r,u(s,19).a,u(o,19).a,h)},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6",1337),D(1338,R4,{},Bk),l.Tk=function(e,n,r,s,o){return new Xmt(e,n,r,u(s,162).a,u(o,162).a)},l.Uk=function(e,n,r,s,o,h){return new dZt(e,n,r,u(s,162).a,u(o,162).a,h)},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7",1338),D(1339,R4,{},Rk),l.Tk=function(e,n,r,s,o){return new Qmt(e,n,r,u(s,184).a,u(o,184).a)},l.Uk=function(e,n,r,s,o,h){return new gZt(e,n,r,u(s,184).a,u(o,184).a,h)},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8",1339),D(1317,563,{},YXt),l.Sk=function(e){if(!this.a.wj(e))throw it(new i8(jH+ol(e)+$H+this.a+"'"))},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic",1317),D(1318,563,{},NKt),l.Sk=function(e){},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic",1318),D(770,563,{}),l.Sj=function(e,n,r){var s;return s=n.Ch(r),s!=null},l.Tj=function(e,n,r,s){var o,h;e.Lg()&&e.Mg()?(o=!0,h=n.Ch(r),h==null?(o=!1,h=this.b):Vt(h)===Vt(p0)&&(h=null),s==null?this.c!=null?(n.Dh(r,null),s=this.b):n.Dh(r,p0):(this.Sk(s),n.Dh(r,s)),mi(e,this.d.Uk(e,1,this.e,h,s,!o))):s==null?this.c!=null?n.Dh(r,null):n.Dh(r,p0):(this.Sk(s),n.Dh(r,s))},l.Vj=function(e,n,r){var s,o;e.Lg()&&e.Mg()?(s=!0,o=n.Ch(r),o==null?(s=!1,o=this.b):Vt(o)===Vt(p0)&&(o=null),n.Eh(r),mi(e,this.d.Uk(e,2,this.e,o,this.b,s))):n.Eh(r)},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable",770),D(1319,770,{},KXt),l.Sk=function(e){if(!this.a.wj(e))throw it(new i8(jH+ol(e)+$H+this.a+"'"))},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic",1319),D(1320,770,{},BKt),l.Sk=function(e){},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic",1320),D(398,504,{},Uj),l.Pj=function(e,n,r,s,o){var h,d,v,k,C;if(C=n.Ch(r),this.Kj()&&Vt(C)===Vt(p0))return null;if(this.sk()&&s&&C!=null){if(v=u(C,49),v.kh()&&(k=Zp(e,v),v!=k)){if(!xat(this.a,k))throw it(new i8(jH+ol(k)+$H+this.a+"'"));n.Dh(r,C=k),this.rk()&&(h=u(k,49),d=v.ih(e,this.b?Gi(v.Tg(),this.b):-1-Gi(e.Tg(),this.e),null,null),!h.eh()&&(d=h.gh(e,this.b?Gi(h.Tg(),this.b):-1-Gi(e.Tg(),this.e),null,d)),d&&d.Fi()),e.Lg()&&e.Mg()&&mi(e,new A9(e,9,this.e,v,k))}return C}else return C},l.Qj=function(e,n,r,s,o){var h,d;return d=n.Ch(r),Vt(d)===Vt(p0)&&(d=null),n.Dh(r,s),this.bj()?Vt(d)!==Vt(s)&&d!=null&&(h=u(d,49),o=h.ih(e,Gi(h.Tg(),this.b),null,o)):this.rk()&&d!=null&&(o=u(d,49).ih(e,-1-Gi(e.Tg(),this.e),null,o)),e.Lg()&&e.Mg()&&(!o&&(o=new Dp(4)),o.Ei(new A9(e,1,this.e,d,s))),o},l.Rj=function(e,n,r,s,o){var h;return h=n.Ch(r),Vt(h)===Vt(p0)&&(h=null),n.Eh(r),e.Lg()&&e.Mg()&&(!o&&(o=new Dp(4)),this.Kj()?o.Ei(new A9(e,2,this.e,h,null)):o.Ei(new A9(e,1,this.e,h,null))),o},l.Sj=function(e,n,r){var s;return s=n.Ch(r),s!=null},l.Tj=function(e,n,r,s){var o,h,d,v,k;if(s!=null&&!xat(this.a,s))throw it(new i8(jH+(_t(s,56)?y4t(u(s,56).Tg()):Vmt(ol(s)))+$H+this.a+"'"));k=n.Ch(r),v=k!=null,this.Kj()&&Vt(k)===Vt(p0)&&(k=null),d=null,this.bj()?Vt(k)!==Vt(s)&&(k!=null&&(o=u(k,49),d=o.ih(e,Gi(o.Tg(),this.b),null,d)),s!=null&&(o=u(s,49),d=o.gh(e,Gi(o.Tg(),this.b),null,d))):this.rk()&&Vt(k)!==Vt(s)&&(k!=null&&(d=u(k,49).ih(e,-1-Gi(e.Tg(),this.e),null,d)),s!=null&&(d=u(s,49).gh(e,-1-Gi(e.Tg(),this.e),null,d))),s==null&&this.Kj()?n.Dh(r,p0):n.Dh(r,s),e.Lg()&&e.Mg()?(h=new brt(e,1,this.e,k,s,this.Kj()&&!v),d?(d.Ei(h),d.Fi()):mi(e,h)):d&&d.Fi()},l.Vj=function(e,n,r){var s,o,h,d,v;v=n.Ch(r),d=v!=null,this.Kj()&&Vt(v)===Vt(p0)&&(v=null),h=null,v!=null&&(this.bj()?(s=u(v,49),h=s.ih(e,Gi(s.Tg(),this.b),null,h)):this.rk()&&(h=u(v,49).ih(e,-1-Gi(e.Tg(),this.e),null,h))),n.Eh(r),e.Lg()&&e.Mg()?(o=new brt(e,this.Kj()?2:1,this.e,v,null,d),h?(h.Ei(o),h.Fi()):mi(e,o)):h&&h.Fi()},l.bj=function(){return!1},l.rk=function(){return!1},l.sk=function(){return!1},l.Kj=function(){return!1},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObject",398),D(564,398,{},vnt),l.rk=function(){return!0},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment",564),D(1323,564,{},FWt),l.sk=function(){return!0},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving",1323),D(772,564,{},G2t),l.Kj=function(){return!0},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable",772),D(1325,772,{},NWt),l.sk=function(){return!0},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving",1325),D(640,564,{},Int),l.bj=function(){return!0},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse",640),D(1324,640,{},$Yt),l.sk=function(){return!0},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving",1324),D(773,640,{},Dwt),l.Kj=function(){return!0},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable",773),D(1326,773,{},zYt),l.sk=function(){return!0},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving",1326),D(641,398,{},U2t),l.sk=function(){return!0},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving",641),D(1327,641,{},BWt),l.Kj=function(){return!0},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable",1327),D(774,641,{},Lwt),l.bj=function(){return!0},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse",774),D(1328,774,{},qYt),l.Kj=function(){return!0},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable",1328),D(1321,398,{},RWt),l.Kj=function(){return!0},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable",1321),D(771,398,{},Mwt),l.bj=function(){return!0},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse",771),D(1322,771,{},HYt),l.Kj=function(){return!0},F(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable",1322),D(775,565,RH,_vt),l.Pk=function(e){return new _vt(this.a,this.c,e)},l.dd=function(){return this.b},l.Qk=function(e,n,r){return Van(this,e,this.b,r)},l.Rk=function(e,n,r){return Gan(this,e,this.b,r)},F(Mn,"EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry",775),D(1329,1,hut,Qzt),l.Wj=function(e){return this.a},l.fj=function(){return _t(this.a,95)?u(this.a,95).fj():!this.a.dc()},l.Wb=function(e){this.a.$b(),this.a.Gc(u(e,15))},l.Xj=function(){_t(this.a,95)?u(this.a,95).Xj():this.a.$b()},F(Mn,"EStructuralFeatureImpl/SettingMany",1329),D(1330,565,RH,rJt),l.Ok=function(e){return new xnt((Ii(),fA),this.b.Ih(this.a,e))},l.dd=function(){return null},l.Qk=function(e,n,r){return r},l.Rk=function(e,n,r){return r},F(Mn,"EStructuralFeatureImpl/SimpleContentFeatureMapEntry",1330),D(642,565,RH,xnt),l.Ok=function(e){return new xnt(this.c,e)},l.dd=function(){return this.a},l.Qk=function(e,n,r){return r},l.Rk=function(e,n,r){return r},F(Mn,"EStructuralFeatureImpl/SimpleFeatureMapEntry",642),D(391,497,Ld,Tm),l.ri=function(e){return Nt(Uh,De,26,e,0,1)},l.ni=function(){return!1},F(Mn,"ESuperAdapter/1",391),D(444,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,836:1,49:1,97:1,150:1,444:1,114:1,115:1},HL),l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return!this.a&&(this.a=new T9(this,ho,this)),this.a}return uh(this,e-Jn((dn(),Uv)),yn((s=u(Dn(this,16),26),s||Uv),e),n,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),Ba(this.Ab,e,r);case 2:return!this.a&&(this.a=new T9(this,ho,this)),Ba(this.a,e,r)}return o=u(yn((s=u(Dn(this,16),26),s||(dn(),Uv)),n),66),o.Nj().Rj(this,su(this),n-Jn((dn(),Uv)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return!!this.a&&this.a.i!=0}return oh(this,e-Jn((dn(),Uv)),yn((n=u(Dn(this,16),26),n||Uv),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),is(this.Ab,u(n,14));return;case 1:Qc(this,Br(n));return;case 2:!this.a&&(this.a=new T9(this,ho,this)),xr(this.a),!this.a&&(this.a=new T9(this,ho,this)),is(this.a,u(n,14));return}gh(this,e-Jn((dn(),Uv)),yn((r=u(Dn(this,16),26),r||Uv),e),n)},l.zh=function(){return dn(),Uv},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new fe(Zr,this,0,3)),xr(this.Ab);return;case 1:Qc(this,null);return;case 2:!this.a&&(this.a=new T9(this,ho,this)),xr(this.a);return}fh(this,e-Jn((dn(),Uv)),yn((n=u(Dn(this,16),26),n||Uv),e))},F(Mn,"ETypeParameterImpl",444),D(445,85,zo,T9),l.cj=function(e,n){return G0n(this,u(e,87),n)},l.dj=function(e,n){return U0n(this,u(e,87),n)},F(Mn,"ETypeParameterImpl/1",445),D(634,43,A4,aet),l.ec=function(){return new mR(this)},F(Mn,"ETypeParameterImpl/2",634),D(556,N1,zu,mR),l.Fc=function(e){return lYt(this,u(e,87))},l.Gc=function(e){var n,r,s;for(s=!1,r=e.Kc();r.Ob();)n=u(r.Pb(),87),ki(this.a,n,"")==null&&(s=!0);return s},l.$b=function(){Xu(this.a)},l.Hc=function(e){return Tl(this.a,e)},l.Kc=function(){var e;return e=new p2(new Cg(this.a).a),new yR(e)},l.Mc=function(e){return XJt(this,e)},l.gc=function(){return HC(this.a)},F(Mn,"ETypeParameterImpl/2/1",556),D(557,1,sa,yR),l.Nb=function(e){ba(this,e)},l.Pb=function(){return u(Zw(this.a).cd(),87)},l.Ob=function(){return this.a.b},l.Qb=function(){Ste(this.a)},F(Mn,"ETypeParameterImpl/2/1/1",557),D(1276,43,A4,zqt),l._b=function(e){return ra(e)?wrt(this,e):!!Lo(this.f,e)},l.xc=function(e){var n,r;return n=ra(e)?Nc(this,e):ec(Lo(this.f,e)),_t(n,837)?(r=u(n,837),n=r._j(),ki(this,u(e,235),n),n):n??(e==null?(Tet(),C5e):null)},F(Mn,"EValidatorRegistryImpl",1276),D(1313,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,1941:1,49:1,97:1,150:1,114:1,115:1},aJ),l.Ih=function(e,n){switch(e.yj()){case 21:case 22:case 23:case 24:case 26:case 31:case 32:case 37:case 38:case 39:case 40:case 43:case 44:case 48:case 49:case 20:return n==null?null:$o(n);case 25:return Jon(n);case 27:return bon(n);case 28:return won(n);case 29:return n==null?null:VUt(aA[0],u(n,199));case 41:return n==null?"":Ip(u(n,290));case 42:return $o(n);case 50:return Br(n);default:throw it(new Fn(QE+e.ne()+Cv))}},l.Jh=function(e){var n,r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt;switch(e.G==-1&&(e.G=(H=Rl(e),H?Hg(H.Mh(),e):-1)),e.G){case 0:return r=new ret,r;case 1:return n=new lB,n;case 2:return s=new eM,s;case 4:return o=new xR,o;case 5:return h=new $qt,h;case 6:return d=new lqt,d;case 7:return v=new JB,v;case 10:return C=new Pk,C;case 11:return M=new iet,M;case 12:return j=new fQt,j;case 13:return G=new set,G;case 14:return K=new K2t,K;case 17:return tt=new iJ,tt;case 18:return k=new xw,k;case 19:return gt=new HL,gt;default:throw it(new Fn(Kct+e.zb+Cv))}},l.Kh=function(e,n){switch(e.yj()){case 20:return n==null?null:new gbt(n);case 21:return n==null?null:new Rp(n);case 23:case 22:return n==null?null:ifn(n);case 26:case 24:return n==null?null:AD(ql(n,-128,127)<<24>>24);case 25:return p2n(n);case 27:return z1n(n);case 28:return q1n(n);case 29:return lgn(n);case 32:case 31:return n==null?null:dy(n);case 38:case 37:return n==null?null:new Ppt(n);case 40:case 39:return n==null?null:pe(ql(n,Sa,wi));case 41:return null;case 42:return n==null,null;case 44:case 43:return n==null?null:v2(Rq(n));case 49:case 48:return n==null?null:uE(ql(n,zH,32767)<<16>>16);case 50:return n;default:throw it(new Fn(QE+e.ne()+Cv))}},F(Mn,"EcoreFactoryImpl",1313),D(547,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,1939:1,49:1,97:1,150:1,179:1,547:1,114:1,115:1,675:1},LXt),l.gb=!1,l.hb=!1;var bLt,T5e=!1;F(Mn,"EcorePackageImpl",547),D(1184,1,{837:1},oJ),l._j=function(){return gWt(),_5e},F(Mn,"EcorePackageImpl/1",1184),D(1193,1,si,cJ),l.wj=function(e){return _t(e,147)},l.xj=function(e){return Nt(fP,De,147,e,0,1)},F(Mn,"EcorePackageImpl/10",1193),D(1194,1,si,uJ),l.wj=function(e){return _t(e,191)},l.xj=function(e){return Nt(Mft,De,191,e,0,1)},F(Mn,"EcorePackageImpl/11",1194),D(1195,1,si,lJ),l.wj=function(e){return _t(e,56)},l.xj=function(e){return Nt(_b,De,56,e,0,1)},F(Mn,"EcorePackageImpl/12",1195),D(1196,1,si,hJ),l.wj=function(e){return _t(e,399)},l.xj=function(e){return Nt(Wh,$8t,59,e,0,1)},F(Mn,"EcorePackageImpl/13",1196),D(1197,1,si,fJ),l.wj=function(e){return _t(e,235)},l.xj=function(e){return Nt(i1,De,235,e,0,1)},F(Mn,"EcorePackageImpl/14",1197),D(1198,1,si,dJ),l.wj=function(e){return _t(e,509)},l.xj=function(e){return Nt(Vv,De,2017,e,0,1)},F(Mn,"EcorePackageImpl/15",1198),D(1199,1,si,wB),l.wj=function(e){return _t(e,99)},l.xj=function(e){return Nt(n3,B4,18,e,0,1)},F(Mn,"EcorePackageImpl/16",1199),D(1200,1,si,gJ),l.wj=function(e){return _t(e,170)},l.xj=function(e){return Nt(Mu,B4,170,e,0,1)},F(Mn,"EcorePackageImpl/17",1200),D(1201,1,si,pJ),l.wj=function(e){return _t(e,472)},l.xj=function(e){return Nt(t3,De,472,e,0,1)},F(Mn,"EcorePackageImpl/18",1201),D(1202,1,si,bJ),l.wj=function(e){return _t(e,548)},l.xj=function(e){return Nt(cc,C0e,548,e,0,1)},F(Mn,"EcorePackageImpl/19",1202),D(1185,1,si,vB),l.wj=function(e){return _t(e,322)},l.xj=function(e){return Nt(e3,B4,34,e,0,1)},F(Mn,"EcorePackageImpl/2",1185),D(1203,1,si,jk),l.wj=function(e){return _t(e,241)},l.xj=function(e){return Nt(ho,q0e,87,e,0,1)},F(Mn,"EcorePackageImpl/20",1203),D(1204,1,si,eC),l.wj=function(e){return _t(e,444)},l.xj=function(e){return Nt(hu,De,836,e,0,1)},F(Mn,"EcorePackageImpl/21",1204),D(1205,1,si,mB),l.wj=function(e){return Nm(e)},l.xj=function(e){return Nt(Rs,ee,476,e,8,1)},F(Mn,"EcorePackageImpl/22",1205),D(1206,1,si,wJ),l.wj=function(e){return _t(e,190)},l.xj=function(e){return Nt(Gu,ee,190,e,0,2)},F(Mn,"EcorePackageImpl/23",1206),D(1207,1,si,yB),l.wj=function(e){return _t(e,217)},l.xj=function(e){return Nt(M6,ee,217,e,0,1)},F(Mn,"EcorePackageImpl/24",1207),D(1208,1,si,xB),l.wj=function(e){return _t(e,172)},l.xj=function(e){return Nt(uS,ee,172,e,0,1)},F(Mn,"EcorePackageImpl/25",1208),D(1209,1,si,vJ),l.wj=function(e){return _t(e,199)},l.xj=function(e){return Nt(tV,ee,199,e,0,1)},F(Mn,"EcorePackageImpl/26",1209),D(1210,1,si,nC),l.wj=function(e){return!1},l.xj=function(e){return Nt(PLt,De,2110,e,0,1)},F(Mn,"EcorePackageImpl/27",1210),D(1211,1,si,Cm),l.wj=function(e){return Bm(e)},l.xj=function(e){return Nt(la,ee,333,e,7,1)},F(Mn,"EcorePackageImpl/28",1211),D(1212,1,si,kB),l.wj=function(e){return _t(e,58)},l.xj=function(e){return Nt(KAt,Ty,58,e,0,1)},F(Mn,"EcorePackageImpl/29",1212),D(1186,1,si,EB),l.wj=function(e){return _t(e,510)},l.xj=function(e){return Nt(Zr,{3:1,4:1,5:1,1934:1},590,e,0,1)},F(Mn,"EcorePackageImpl/3",1186),D(1213,1,si,mJ),l.wj=function(e){return _t(e,573)},l.xj=function(e){return Nt(ZAt,De,1940,e,0,1)},F(Mn,"EcorePackageImpl/30",1213),D(1214,1,si,yJ),l.wj=function(e){return _t(e,153)},l.xj=function(e){return Nt(xLt,Ty,153,e,0,1)},F(Mn,"EcorePackageImpl/31",1214),D(1215,1,si,rC),l.wj=function(e){return _t(e,72)},l.xj=function(e){return Nt(bU,Q0e,72,e,0,1)},F(Mn,"EcorePackageImpl/32",1215),D(1216,1,si,TB),l.wj=function(e){return _t(e,155)},l.xj=function(e){return Nt(i7,ee,155,e,0,1)},F(Mn,"EcorePackageImpl/33",1216),D(1217,1,si,CB),l.wj=function(e){return _t(e,19)},l.xj=function(e){return Nt(ja,ee,19,e,0,1)},F(Mn,"EcorePackageImpl/34",1217),D(1218,1,si,uc),l.wj=function(e){return _t(e,290)},l.xj=function(e){return Nt(J8t,De,290,e,0,1)},F(Mn,"EcorePackageImpl/35",1218),D(1219,1,si,xJ),l.wj=function(e){return _t(e,162)},l.xj=function(e){return Nt(Sv,ee,162,e,0,1)},F(Mn,"EcorePackageImpl/36",1219),D(1220,1,si,_B),l.wj=function(e){return _t(e,83)},l.xj=function(e){return Nt(tEt,De,83,e,0,1)},F(Mn,"EcorePackageImpl/37",1220),D(1221,1,si,iC),l.wj=function(e){return _t(e,591)},l.xj=function(e){return Nt(wLt,De,591,e,0,1)},F(Mn,"EcorePackageImpl/38",1221),D(1222,1,si,kJ),l.wj=function(e){return!1},l.xj=function(e){return Nt(FLt,De,2111,e,0,1)},F(Mn,"EcorePackageImpl/39",1222),D(1187,1,si,EJ),l.wj=function(e){return _t(e,88)},l.xj=function(e){return Nt(Uh,De,26,e,0,1)},F(Mn,"EcorePackageImpl/4",1187),D(1223,1,si,sC),l.wj=function(e){return _t(e,184)},l.xj=function(e){return Nt(Av,ee,184,e,0,1)},F(Mn,"EcorePackageImpl/40",1223),D(1224,1,si,SB),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(Mn,"EcorePackageImpl/41",1224),D(1225,1,si,aC),l.wj=function(e){return _t(e,588)},l.xj=function(e){return Nt(QAt,De,588,e,0,1)},F(Mn,"EcorePackageImpl/42",1225),D(1226,1,si,oC),l.wj=function(e){return!1},l.xj=function(e){return Nt(NLt,ee,2112,e,0,1)},F(Mn,"EcorePackageImpl/43",1226),D(1227,1,si,jf),l.wj=function(e){return _t(e,42)},l.xj=function(e){return Nt(P2,Hq,42,e,0,1)},F(Mn,"EcorePackageImpl/44",1227),D(1188,1,si,VL),l.wj=function(e){return _t(e,138)},l.xj=function(e){return Nt(s1,De,138,e,0,1)},F(Mn,"EcorePackageImpl/5",1188),D(1189,1,si,GL),l.wj=function(e){return _t(e,148)},l.xj=function(e){return Nt(Nft,De,148,e,0,1)},F(Mn,"EcorePackageImpl/6",1189),D(1190,1,si,lx),l.wj=function(e){return _t(e,457)},l.xj=function(e){return Nt(pU,De,671,e,0,1)},F(Mn,"EcorePackageImpl/7",1190),D(1191,1,si,TJ),l.wj=function(e){return _t(e,573)},l.xj=function(e){return Nt(ag,De,678,e,0,1)},F(Mn,"EcorePackageImpl/8",1191),D(1192,1,si,CJ),l.wj=function(e){return _t(e,471)},l.xj=function(e){return Nt(sA,De,471,e,0,1)},F(Mn,"EcorePackageImpl/9",1192),D(1025,1982,T0e,sHt),l.bi=function(e,n){Mln(this,u(n,415))},l.fi=function(e,n){moe(this,e,u(n,415))},F(Mn,"MinimalEObjectImpl/1ArrayDelegatingAdapterList",1025),D(1026,143,nO,yXt),l.Ai=function(){return this.a.a},F(Mn,"MinimalEObjectImpl/1ArrayDelegatingAdapterList/1",1026),D(1053,1052,{},NUt),F("org.eclipse.emf.ecore.plugin","EcorePlugin",1053);var wLt=Ki(Z0e,"Resource");D(781,1378,J0e),l.Yk=function(e){},l.Zk=function(e){},l.Vk=function(){return!this.a&&(this.a=new Ztt(this)),this.a},l.Wk=function(e){var n,r,s,o,h;if(s=e.length,s>0)if(Rr(0,e.length),e.charCodeAt(0)==47){for(h=new Xc(4),o=1,n=1;n0&&(e=e.substr(0,r)));return Zpn(this,e)},l.Xk=function(){return this.c},l.Ib=function(){var e;return Ip(this.gm)+"@"+(e=Hi(this)>>>0,e.toString(16))+" uri='"+this.d+"'"},l.b=!1,F(fut,"ResourceImpl",781),D(1379,781,J0e,Jzt),F(fut,"BinaryResourceImpl",1379),D(1169,694,aut),l.si=function(e){return _t(e,56)?Orn(this,u(e,56)):_t(e,591)?new nr(u(e,591).Vk()):Vt(e)===Vt(this.f)?u(e,14).Kc():(y8(),pP.a)},l.Ob=function(){return h5t(this)},l.a=!1,F($i,"EcoreUtil/ContentTreeIterator",1169),D(1380,1169,aut,QKt),l.si=function(e){return Vt(e)===Vt(this.f)?u(e,15).Kc():new PZt(u(e,56))},F(fut,"ResourceImpl/5",1380),D(648,1994,z0e,Ztt),l.Hc=function(e){return this.i<=4?yE(this,e):_t(e,49)&&u(e,49).Zg()==this.a},l.bi=function(e,n){e==this.i-1&&(this.a.b||(this.a.b=!0))},l.di=function(e,n){e==0?this.a.b||(this.a.b=!0):Yrt(this,e,n)},l.fi=function(e,n){},l.gi=function(e,n,r){},l.aj=function(){return 2},l.Ai=function(){return this.a},l.bj=function(){return!0},l.cj=function(e,n){var r;return r=u(e,49),n=r.wh(this.a,n),n},l.dj=function(e,n){var r;return r=u(e,49),r.wh(null,n)},l.ej=function(){return!1},l.hi=function(){return!0},l.ri=function(e){return Nt(_b,De,56,e,0,1)},l.ni=function(){return!1},F(fut,"ResourceImpl/ContentsEList",648),D(957,1964,jE,Zzt),l.Zc=function(e){return this.a._h(e)},l.gc=function(){return this.a.gc()},F($i,"AbstractSequentialInternalEList/1",957);var vLt,mLt,ya,yLt;D(624,1,{},JYt);var wU,vU;F($i,"BasicExtendedMetaData",624),D(1160,1,{},JGt),l.$k=function(){return null},l._k=function(){return this.a==-2&&Tg(this,sgn(this.d,this.b)),this.a},l.al=function(){return null},l.bl=function(){return wn(),wn(),io},l.ne=function(){return this.c==t7&&O3(this,Xie(this.d,this.b)),this.c},l.cl=function(){return 0},l.a=-2,l.c=t7,F($i,"BasicExtendedMetaData/EClassExtendedMetaDataImpl",1160),D(1161,1,{},yZt),l.$k=function(){return this.a==(B8(),wU)&&ypt(this,xwn(this.f,this.b)),this.a},l._k=function(){return 0},l.al=function(){return this.c==(B8(),wU)&&Ftt(this,kwn(this.f,this.b)),this.c},l.bl=function(){return!this.d&&Ntt(this,xmn(this.f,this.b)),this.d},l.ne=function(){return this.e==t7&&cR(this,Xie(this.f,this.b)),this.e},l.cl=function(){return this.g==-2&&uR(this,T0n(this.f,this.b)),this.g},l.e=t7,l.g=-2,F($i,"BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl",1161),D(1159,1,{},eUt),l.b=!1,l.c=!1,F($i,"BasicExtendedMetaData/EPackageExtendedMetaDataImpl",1159),D(1162,1,{},mZt),l.c=-2,l.e=t7,l.f=t7,F($i,"BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl",1162),D(585,622,zo,Rj),l.aj=function(){return this.c},l.Fk=function(){return!1},l.li=function(e,n){return n},l.c=0,F($i,"EDataTypeEList",585);var xLt=Ki($i,"FeatureMap");D(75,585,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},ss),l.Vc=function(e,n){wwn(this,e,u(n,72))},l.Fc=function(e){return N2n(this,u(e,72))},l.Yh=function(e){knn(this,u(e,72))},l.cj=function(e,n){return nJe(this,u(e,72),n)},l.dj=function(e,n){return vwt(this,u(e,72),n)},l.ii=function(e,n){return jmn(this,e,n)},l.li=function(e,n){return v4n(this,e,u(n,72))},l._c=function(e,n){return ovn(this,e,u(n,72))},l.jj=function(e,n){return rJe(this,u(e,72),n)},l.kj=function(e,n){return TYt(this,u(e,72),n)},l.lj=function(e,n,r){return o0n(this,u(e,72),u(n,72),r)},l.oi=function(e,n){return Rst(this,e,u(n,72))},l.dl=function(e,n){return J5t(this,e,n)},l.Wc=function(e,n){var r,s,o,h,d,v,k,C,M;for(C=new Qw(n.gc()),o=n.Kc();o.Ob();)if(s=u(o.Pb(),72),h=s.ak(),X0(this.e,h))(!h.hi()||!O$(this,h,s.dd())&&!yE(C,s))&&Dr(C,s);else{for(M=ou(this.e.Tg(),h),r=u(this.g,119),d=!0,v=0;v=0;)if(n=e[this.c],this.k.rl(n.ak()))return this.j=this.f?n:n.dd(),this.i=-2,!0;return this.i=-1,this.g=-1,!1},F($i,"BasicFeatureMap/FeatureEIterator",410),D(662,410,n0,rnt),l.Lk=function(){return!0},F($i,"BasicFeatureMap/ResolvingFeatureEIterator",662),D(955,486,NH,UUt),l.Gi=function(){return this},F($i,"EContentsEList/1",955),D(956,486,NH,wUt),l.Lk=function(){return!1},F($i,"EContentsEList/2",956),D(954,279,BH,WUt),l.Nk=function(e){},l.Ob=function(){return!1},l.Sb=function(){return!1},F($i,"EContentsEList/FeatureIteratorImpl/1",954),D(825,585,zo,E2t),l.ci=function(){this.a=!0},l.fj=function(){return this.a},l.Xj=function(){var e;xr(this),xl(this.e)?(e=this.a,this.a=!1,mi(this.e,new bf(this.e,2,this.c,e,!1))):this.a=!1},l.a=!1,F($i,"EDataTypeEList/Unsettable",825),D(1849,585,zo,eWt),l.hi=function(){return!0},F($i,"EDataTypeUniqueEList",1849),D(1850,825,zo,nWt),l.hi=function(){return!0},F($i,"EDataTypeUniqueEList/Unsettable",1850),D(139,85,zo,Fu),l.Ek=function(){return!0},l.li=function(e,n){return g6(this,e,u(n,56))},F($i,"EObjectContainmentEList/Resolving",139),D(1163,545,zo,tWt),l.Ek=function(){return!0},l.li=function(e,n){return g6(this,e,u(n,56))},F($i,"EObjectContainmentEList/Unsettable/Resolving",1163),D(748,16,zo,hwt),l.ci=function(){this.a=!0},l.fj=function(){return this.a},l.Xj=function(){var e;xr(this),xl(this.e)?(e=this.a,this.a=!1,mi(this.e,new bf(this.e,2,this.c,e,!1))):this.a=!1},l.a=!1,F($i,"EObjectContainmentWithInverseEList/Unsettable",748),D(1173,748,zo,hYt),l.Ek=function(){return!0},l.li=function(e,n){return g6(this,e,u(n,56))},F($i,"EObjectContainmentWithInverseEList/Unsettable/Resolving",1173),D(743,496,zo,k2t),l.ci=function(){this.a=!0},l.fj=function(){return this.a},l.Xj=function(){var e;xr(this),xl(this.e)?(e=this.a,this.a=!1,mi(this.e,new bf(this.e,2,this.c,e,!1))):this.a=!1},l.a=!1,F($i,"EObjectEList/Unsettable",743),D(328,496,zo,Y3),l.Ek=function(){return!0},l.li=function(e,n){return g6(this,e,u(n,56))},F($i,"EObjectResolvingEList",328),D(1641,743,zo,rWt),l.Ek=function(){return!0},l.li=function(e,n){return g6(this,e,u(n,56))},F($i,"EObjectResolvingEList/Unsettable",1641),D(1381,1,{},_J);var C5e;F($i,"EObjectValidator",1381),D(546,496,zo,r$),l.zk=function(){return this.d},l.Ak=function(){return this.b},l.bj=function(){return!0},l.Dk=function(){return!0},l.b=0,F($i,"EObjectWithInverseEList",546),D(1176,546,zo,fYt),l.Ck=function(){return!0},F($i,"EObjectWithInverseEList/ManyInverse",1176),D(625,546,zo,Ent),l.ci=function(){this.a=!0},l.fj=function(){return this.a},l.Xj=function(){var e;xr(this),xl(this.e)?(e=this.a,this.a=!1,mi(this.e,new bf(this.e,2,this.c,e,!1))):this.a=!1},l.a=!1,F($i,"EObjectWithInverseEList/Unsettable",625),D(1175,625,zo,dYt),l.Ck=function(){return!0},F($i,"EObjectWithInverseEList/Unsettable/ManyInverse",1175),D(749,546,zo,fwt),l.Ek=function(){return!0},l.li=function(e,n){return g6(this,e,u(n,56))},F($i,"EObjectWithInverseResolvingEList",749),D(31,749,zo,Cn),l.Ck=function(){return!0},F($i,"EObjectWithInverseResolvingEList/ManyInverse",31),D(750,625,zo,dwt),l.Ek=function(){return!0},l.li=function(e,n){return g6(this,e,u(n,56))},F($i,"EObjectWithInverseResolvingEList/Unsettable",750),D(1174,750,zo,gYt),l.Ck=function(){return!0},F($i,"EObjectWithInverseResolvingEList/Unsettable/ManyInverse",1174),D(1164,622,zo),l.ai=function(){return(this.b&1792)==0},l.ci=function(){this.b|=1},l.Bk=function(){return(this.b&4)!=0},l.bj=function(){return(this.b&40)!=0},l.Ck=function(){return(this.b&16)!=0},l.Dk=function(){return(this.b&8)!=0},l.Ek=function(){return(this.b&Dy)!=0},l.rk=function(){return(this.b&32)!=0},l.Fk=function(){return(this.b&xf)!=0},l.wj=function(e){return this.d?KZt(this.d,e):this.ak().Yj().wj(e)},l.fj=function(){return this.b&2?(this.b&1)!=0:this.i!=0},l.hi=function(){return(this.b&128)!=0},l.Xj=function(){var e;xr(this),this.b&2&&(xl(this.e)?(e=(this.b&1)!=0,this.b&=-2,n8(this,new bf(this.e,2,Gi(this.e.Tg(),this.ak()),e,!1))):this.b&=-2)},l.ni=function(){return(this.b&1536)==0},l.b=0,F($i,"EcoreEList/Generic",1164),D(1165,1164,zo,iQt),l.ak=function(){return this.a},F($i,"EcoreEList/Dynamic",1165),D(747,63,Ld,_pt),l.ri=function(e){return MD(this.a.a,e)},F($i,"EcoreEMap/1",747),D(746,85,zo,hvt),l.bi=function(e,n){Jz(this.b,u(n,133))},l.di=function(e,n){Vne(this.b)},l.ei=function(e,n,r){var s;++(s=this.b,u(n,133),s).e},l.fi=function(e,n){Wit(this.b,u(n,133))},l.gi=function(e,n,r){Wit(this.b,u(r,133)),Vt(r)===Vt(n)&&u(r,133).Th(hQe(u(n,133).cd())),Jz(this.b,u(n,133))},F($i,"EcoreEMap/DelegateEObjectContainmentEList",746),D(1171,151,j8t,rne),F($i,"EcoreEMap/Unsettable",1171),D(1172,746,zo,pYt),l.ci=function(){this.a=!0},l.fj=function(){return this.a},l.Xj=function(){var e;xr(this),xl(this.e)?(e=this.a,this.a=!1,mi(this.e,new bf(this.e,2,this.c,e,!1))):this.a=!1},l.a=!1,F($i,"EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList",1172),D(1168,228,A4,oXt),l.a=!1,l.b=!1,F($i,"EcoreUtil/Copier",1168),D(745,1,sa,PZt),l.Nb=function(e){ba(this,e)},l.Ob=function(){return Mie(this)},l.Pb=function(){var e;return Mie(this),e=this.b,this.b=null,e},l.Qb=function(){this.a.Qb()},F($i,"EcoreUtil/ProperContentIterator",745),D(1382,1381,{},tR);var _5e;F($i,"EcoreValidator",1382);var S5e;Ki($i,"FeatureMapUtil/Validator"),D(1260,1,{1942:1},SJ),l.rl=function(e){return!0},F($i,"FeatureMapUtil/1",1260),D(757,1,{1942:1},Axt),l.rl=function(e){var n;return this.c==e?!0:(n=Re(tr(this.a,e)),n==null?nmn(this,e)?(qJt(this.a,e,(Nn(),r7)),!0):(qJt(this.a,e,(Nn(),F2)),!1):n==(Nn(),r7))},l.e=!1;var $ft;F($i,"FeatureMapUtil/BasicValidator",757),D(758,43,A4,v2t),F($i,"FeatureMapUtil/BasicValidator/Cache",758),D(501,52,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,69:1,95:1},BM),l.Vc=function(e,n){sue(this.c,this.b,e,n)},l.Fc=function(e){return J5t(this.c,this.b,e)},l.Wc=function(e,n){return w3n(this.c,this.b,e,n)},l.Gc=function(e){return g9(this,e)},l.Xh=function(e,n){Ron(this.c,this.b,e,n)},l.lk=function(e,n){return W5t(this.c,this.b,e,n)},l.pi=function(e){return Iq(this.c,this.b,e,!1)},l.Zh=function(){return AUt(this.c,this.b)},l.$h=function(){return ZXe(this.c,this.b)},l._h=function(e){return Han(this.c,this.b,e)},l.mk=function(e,n){return WWt(this,e,n)},l.$b=function(){Tx(this)},l.Hc=function(e){return O$(this.c,this.b,e)},l.Ic=function(e){return qcn(this.c,this.b,e)},l.Xb=function(e){return Iq(this.c,this.b,e,!0)},l.Wj=function(e){return this},l.Xc=function(e){return tan(this.c,this.b,e)},l.dc=function(){return hj(this)},l.fj=function(){return!XD(this.c,this.b)},l.Kc=function(){return _on(this.c,this.b)},l.Yc=function(){return Son(this.c,this.b)},l.Zc=function(e){return jln(this.c,this.b,e)},l.ii=function(e,n){return Ele(this.c,this.b,e,n)},l.ji=function(e,n){Ban(this.c,this.b,e,n)},l.$c=function(e){return noe(this.c,this.b,e)},l.Mc=function(e){return Emn(this.c,this.b,e)},l._c=function(e,n){return Lle(this.c,this.b,e,n)},l.Wb=function(e){pq(this.c,this.b),g9(this,u(e,15))},l.gc=function(){return Zln(this.c,this.b)},l.Pc=function(){return Qin(this.c,this.b)},l.Qc=function(e){return ean(this.c,this.b,e)},l.Ib=function(){var e,n;for(n=new Ag,n.a+="[",e=AUt(this.c,this.b);Bit(e);)go(n,b9(Qz(e))),Bit(e)&&(n.a+=Ya);return n.a+="]",n.a},l.Xj=function(){pq(this.c,this.b)},F($i,"FeatureMapUtil/FeatureEList",501),D(627,36,nO,jrt),l.yi=function(e){return e_(this,e)},l.Di=function(e){var n,r,s,o,h,d,v;switch(this.d){case 1:case 2:{if(h=e.Ai(),Vt(h)===Vt(this.c)&&e_(this,null)==e.yi(null))return this.g=e.zi(),e.xi()==1&&(this.d=1),!0;break}case 3:{switch(o=e.xi(),o){case 3:{if(h=e.Ai(),Vt(h)===Vt(this.c)&&e_(this,null)==e.yi(null))return this.d=5,n=new Qw(2),Dr(n,this.g),Dr(n,e.zi()),this.g=n,!0;break}}break}case 5:{switch(o=e.xi(),o){case 3:{if(h=e.Ai(),Vt(h)===Vt(this.c)&&e_(this,null)==e.yi(null))return r=u(this.g,14),r.Fc(e.zi()),!0;break}}break}case 4:{switch(o=e.xi(),o){case 3:{if(h=e.Ai(),Vt(h)===Vt(this.c)&&e_(this,null)==e.yi(null))return this.d=1,this.g=e.zi(),!0;break}case 4:{if(h=e.Ai(),Vt(h)===Vt(this.c)&&e_(this,null)==e.yi(null))return this.d=6,v=new Qw(2),Dr(v,this.n),Dr(v,e.Bi()),this.n=v,d=lt(ct(Cr,1),Xr,25,15,[this.o,e.Ci()]),this.g=d,!0;break}}break}case 6:{switch(o=e.xi(),o){case 4:{if(h=e.Ai(),Vt(h)===Vt(this.c)&&e_(this,null)==e.yi(null))return r=u(this.n,14),r.Fc(e.Bi()),d=u(this.g,48),s=Nt(Cr,Xr,25,d.length+1,15,1),Dc(d,0,s,0,d.length),s[d.length]=e.Ci(),this.g=s,!0;break}}break}}return!1},F($i,"FeatureMapUtil/FeatureENotificationImpl",627),D(552,501,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},qj),l.dl=function(e,n){return J5t(this.c,e,n)},l.el=function(e,n,r){return W5t(this.c,e,n,r)},l.fl=function(e,n,r){return bxt(this.c,e,n,r)},l.gl=function(){return this},l.hl=function(e,n){return SI(this.c,e,n)},l.il=function(e){return u(Iq(this.c,this.b,e,!1),72).ak()},l.jl=function(e){return u(Iq(this.c,this.b,e,!1),72).dd()},l.kl=function(){return this.a},l.ll=function(e){return!XD(this.c,e)},l.ml=function(e,n){Oq(this.c,e,n)},l.nl=function(e){return lne(this.c,e)},l.ol=function(e){Pse(this.c,e)},F($i,"FeatureMapUtil/FeatureFeatureMap",552),D(1259,1,hut,nUt),l.Wj=function(e){return Iq(this.b,this.a,-1,e)},l.fj=function(){return!XD(this.b,this.a)},l.Wb=function(e){Oq(this.b,this.a,e)},l.Xj=function(){pq(this.b,this.a)},F($i,"FeatureMapUtil/FeatureValue",1259);var J6,zft,qft,tk,A5e,wP=Ki(GH,"AnyType");D(666,60,Q0,pet),F(GH,"InvalidDatatypeValueException",666);var mU=Ki(GH,ege),vP=Ki(GH,nge),kLt=Ki(GH,rge),L5e,pc,ELt,X2,M5e,D5e,I5e,O5e,P5e,F5e,N5e,B5e,R5e,j5e,$5e,h5,z5e,f5,lA,q5e,Wv,mP,yP,H5e,hA,fA;D(830,506,{105:1,92:1,90:1,56:1,49:1,97:1,843:1},Wpt),l._g=function(e,n,r){switch(e){case 0:return r?(!this.c&&(this.c=new ss(this,0)),this.c):(!this.c&&(this.c=new ss(this,0)),this.c.b);case 1:return r?(!this.c&&(this.c=new ss(this,0)),u(Bc(this.c,(Ii(),X2)),153)):(!this.c&&(this.c=new ss(this,0)),u(u(Bc(this.c,(Ii(),X2)),153),215)).kl();case 2:return r?(!this.b&&(this.b=new ss(this,2)),this.b):(!this.b&&(this.b=new ss(this,2)),this.b.b)}return uh(this,e-Jn(this.zh()),yn(this.j&2?(!this.k&&(this.k=new nh),this.k).ck():this.zh(),e),n,r)},l.jh=function(e,n,r){var s;switch(n){case 0:return!this.c&&(this.c=new ss(this,0)),EI(this.c,e,r);case 1:return(!this.c&&(this.c=new ss(this,0)),u(u(Bc(this.c,(Ii(),X2)),153),69)).mk(e,r);case 2:return!this.b&&(this.b=new ss(this,2)),EI(this.b,e,r)}return s=u(yn(this.j&2?(!this.k&&(this.k=new nh),this.k).ck():this.zh(),n),66),s.Nj().Rj(this,$mt(this),n-Jn(this.zh()),e,r)},l.lh=function(e){switch(e){case 0:return!!this.c&&this.c.i!=0;case 1:return!(!this.c&&(this.c=new ss(this,0)),u(Bc(this.c,(Ii(),X2)),153)).dc();case 2:return!!this.b&&this.b.i!=0}return oh(this,e-Jn(this.zh()),yn(this.j&2?(!this.k&&(this.k=new nh),this.k).ck():this.zh(),e))},l.sh=function(e,n){switch(e){case 0:!this.c&&(this.c=new ss(this,0)),nD(this.c,n);return;case 1:(!this.c&&(this.c=new ss(this,0)),u(u(Bc(this.c,(Ii(),X2)),153),215)).Wb(n);return;case 2:!this.b&&(this.b=new ss(this,2)),nD(this.b,n);return}gh(this,e-Jn(this.zh()),yn(this.j&2?(!this.k&&(this.k=new nh),this.k).ck():this.zh(),e),n)},l.zh=function(){return Ii(),ELt},l.Bh=function(e){switch(e){case 0:!this.c&&(this.c=new ss(this,0)),xr(this.c);return;case 1:(!this.c&&(this.c=new ss(this,0)),u(Bc(this.c,(Ii(),X2)),153)).$b();return;case 2:!this.b&&(this.b=new ss(this,2)),xr(this.b);return}fh(this,e-Jn(this.zh()),yn(this.j&2?(!this.k&&(this.k=new nh),this.k).ck():this.zh(),e))},l.Ib=function(){var e;return this.j&4?mf(this):(e=new _h(mf(this)),e.a+=" (mixed: ",l9(e,this.c),e.a+=", anyAttribute: ",l9(e,this.b),e.a+=")",e.a)},F(xs,"AnyTypeImpl",830),D(667,506,{105:1,92:1,90:1,56:1,49:1,97:1,2021:1,667:1},AB),l._g=function(e,n,r){switch(e){case 0:return this.a;case 1:return this.b}return uh(this,e-Jn((Ii(),h5)),yn(this.j&2?(!this.k&&(this.k=new nh),this.k).ck():h5,e),n,r)},l.lh=function(e){switch(e){case 0:return this.a!=null;case 1:return this.b!=null}return oh(this,e-Jn((Ii(),h5)),yn(this.j&2?(!this.k&&(this.k=new nh),this.k).ck():h5,e))},l.sh=function(e,n){switch(e){case 0:$tt(this,Br(n));return;case 1:kpt(this,Br(n));return}gh(this,e-Jn((Ii(),h5)),yn(this.j&2?(!this.k&&(this.k=new nh),this.k).ck():h5,e),n)},l.zh=function(){return Ii(),h5},l.Bh=function(e){switch(e){case 0:this.a=null;return;case 1:this.b=null;return}fh(this,e-Jn((Ii(),h5)),yn(this.j&2?(!this.k&&(this.k=new nh),this.k).ck():h5,e))},l.Ib=function(){var e;return this.j&4?mf(this):(e=new _h(mf(this)),e.a+=" (data: ",go(e,this.a),e.a+=", target: ",go(e,this.b),e.a+=")",e.a)},l.a=null,l.b=null,F(xs,"ProcessingInstructionImpl",667),D(668,830,{105:1,92:1,90:1,56:1,49:1,97:1,843:1,2022:1,668:1},Hqt),l._g=function(e,n,r){switch(e){case 0:return r?(!this.c&&(this.c=new ss(this,0)),this.c):(!this.c&&(this.c=new ss(this,0)),this.c.b);case 1:return r?(!this.c&&(this.c=new ss(this,0)),u(Bc(this.c,(Ii(),X2)),153)):(!this.c&&(this.c=new ss(this,0)),u(u(Bc(this.c,(Ii(),X2)),153),215)).kl();case 2:return r?(!this.b&&(this.b=new ss(this,2)),this.b):(!this.b&&(this.b=new ss(this,2)),this.b.b);case 3:return!this.c&&(this.c=new ss(this,0)),Br(SI(this.c,(Ii(),lA),!0));case 4:return gwt(this.a,(!this.c&&(this.c=new ss(this,0)),Br(SI(this.c,(Ii(),lA),!0))));case 5:return this.a}return uh(this,e-Jn((Ii(),f5)),yn(this.j&2?(!this.k&&(this.k=new nh),this.k).ck():f5,e),n,r)},l.lh=function(e){switch(e){case 0:return!!this.c&&this.c.i!=0;case 1:return!(!this.c&&(this.c=new ss(this,0)),u(Bc(this.c,(Ii(),X2)),153)).dc();case 2:return!!this.b&&this.b.i!=0;case 3:return!this.c&&(this.c=new ss(this,0)),Br(SI(this.c,(Ii(),lA),!0))!=null;case 4:return gwt(this.a,(!this.c&&(this.c=new ss(this,0)),Br(SI(this.c,(Ii(),lA),!0))))!=null;case 5:return!!this.a}return oh(this,e-Jn((Ii(),f5)),yn(this.j&2?(!this.k&&(this.k=new nh),this.k).ck():f5,e))},l.sh=function(e,n){switch(e){case 0:!this.c&&(this.c=new ss(this,0)),nD(this.c,n);return;case 1:(!this.c&&(this.c=new ss(this,0)),u(u(Bc(this.c,(Ii(),X2)),153),215)).Wb(n);return;case 2:!this.b&&(this.b=new ss(this,2)),nD(this.b,n);return;case 3:Jvt(this,Br(n));return;case 4:Jvt(this,pwt(this.a,n));return;case 5:vc(this,u(n,148));return}gh(this,e-Jn((Ii(),f5)),yn(this.j&2?(!this.k&&(this.k=new nh),this.k).ck():f5,e),n)},l.zh=function(){return Ii(),f5},l.Bh=function(e){switch(e){case 0:!this.c&&(this.c=new ss(this,0)),xr(this.c);return;case 1:(!this.c&&(this.c=new ss(this,0)),u(Bc(this.c,(Ii(),X2)),153)).$b();return;case 2:!this.b&&(this.b=new ss(this,2)),xr(this.b);return;case 3:!this.c&&(this.c=new ss(this,0)),Oq(this.c,(Ii(),lA),null);return;case 4:Jvt(this,pwt(this.a,null));return;case 5:this.a=null;return}fh(this,e-Jn((Ii(),f5)),yn(this.j&2?(!this.k&&(this.k=new nh),this.k).ck():f5,e))},F(xs,"SimpleAnyTypeImpl",668),D(669,506,{105:1,92:1,90:1,56:1,49:1,97:1,2023:1,669:1},qqt),l._g=function(e,n,r){switch(e){case 0:return r?(!this.a&&(this.a=new ss(this,0)),this.a):(!this.a&&(this.a=new ss(this,0)),this.a.b);case 1:return r?(!this.b&&(this.b=new _l((dn(),Qa),cc,this,1)),this.b):(!this.b&&(this.b=new _l((dn(),Qa),cc,this,1)),wD(this.b));case 2:return r?(!this.c&&(this.c=new _l((dn(),Qa),cc,this,2)),this.c):(!this.c&&(this.c=new _l((dn(),Qa),cc,this,2)),wD(this.c));case 3:return!this.a&&(this.a=new ss(this,0)),Bc(this.a,(Ii(),mP));case 4:return!this.a&&(this.a=new ss(this,0)),Bc(this.a,(Ii(),yP));case 5:return!this.a&&(this.a=new ss(this,0)),Bc(this.a,(Ii(),hA));case 6:return!this.a&&(this.a=new ss(this,0)),Bc(this.a,(Ii(),fA))}return uh(this,e-Jn((Ii(),Wv)),yn(this.j&2?(!this.k&&(this.k=new nh),this.k).ck():Wv,e),n,r)},l.jh=function(e,n,r){var s;switch(n){case 0:return!this.a&&(this.a=new ss(this,0)),EI(this.a,e,r);case 1:return!this.b&&(this.b=new _l((dn(),Qa),cc,this,1)),Oj(this.b,e,r);case 2:return!this.c&&(this.c=new _l((dn(),Qa),cc,this,2)),Oj(this.c,e,r);case 5:return!this.a&&(this.a=new ss(this,0)),WWt(Bc(this.a,(Ii(),hA)),e,r)}return s=u(yn(this.j&2?(!this.k&&(this.k=new nh),this.k).ck():(Ii(),Wv),n),66),s.Nj().Rj(this,$mt(this),n-Jn((Ii(),Wv)),e,r)},l.lh=function(e){switch(e){case 0:return!!this.a&&this.a.i!=0;case 1:return!!this.b&&this.b.f!=0;case 2:return!!this.c&&this.c.f!=0;case 3:return!this.a&&(this.a=new ss(this,0)),!hj(Bc(this.a,(Ii(),mP)));case 4:return!this.a&&(this.a=new ss(this,0)),!hj(Bc(this.a,(Ii(),yP)));case 5:return!this.a&&(this.a=new ss(this,0)),!hj(Bc(this.a,(Ii(),hA)));case 6:return!this.a&&(this.a=new ss(this,0)),!hj(Bc(this.a,(Ii(),fA)))}return oh(this,e-Jn((Ii(),Wv)),yn(this.j&2?(!this.k&&(this.k=new nh),this.k).ck():Wv,e))},l.sh=function(e,n){switch(e){case 0:!this.a&&(this.a=new ss(this,0)),nD(this.a,n);return;case 1:!this.b&&(this.b=new _l((dn(),Qa),cc,this,1)),xz(this.b,n);return;case 2:!this.c&&(this.c=new _l((dn(),Qa),cc,this,2)),xz(this.c,n);return;case 3:!this.a&&(this.a=new ss(this,0)),Tx(Bc(this.a,(Ii(),mP))),!this.a&&(this.a=new ss(this,0)),g9(Bc(this.a,mP),u(n,14));return;case 4:!this.a&&(this.a=new ss(this,0)),Tx(Bc(this.a,(Ii(),yP))),!this.a&&(this.a=new ss(this,0)),g9(Bc(this.a,yP),u(n,14));return;case 5:!this.a&&(this.a=new ss(this,0)),Tx(Bc(this.a,(Ii(),hA))),!this.a&&(this.a=new ss(this,0)),g9(Bc(this.a,hA),u(n,14));return;case 6:!this.a&&(this.a=new ss(this,0)),Tx(Bc(this.a,(Ii(),fA))),!this.a&&(this.a=new ss(this,0)),g9(Bc(this.a,fA),u(n,14));return}gh(this,e-Jn((Ii(),Wv)),yn(this.j&2?(!this.k&&(this.k=new nh),this.k).ck():Wv,e),n)},l.zh=function(){return Ii(),Wv},l.Bh=function(e){switch(e){case 0:!this.a&&(this.a=new ss(this,0)),xr(this.a);return;case 1:!this.b&&(this.b=new _l((dn(),Qa),cc,this,1)),this.b.c.$b();return;case 2:!this.c&&(this.c=new _l((dn(),Qa),cc,this,2)),this.c.c.$b();return;case 3:!this.a&&(this.a=new ss(this,0)),Tx(Bc(this.a,(Ii(),mP)));return;case 4:!this.a&&(this.a=new ss(this,0)),Tx(Bc(this.a,(Ii(),yP)));return;case 5:!this.a&&(this.a=new ss(this,0)),Tx(Bc(this.a,(Ii(),hA)));return;case 6:!this.a&&(this.a=new ss(this,0)),Tx(Bc(this.a,(Ii(),fA)));return}fh(this,e-Jn((Ii(),Wv)),yn(this.j&2?(!this.k&&(this.k=new nh),this.k).ck():Wv,e))},l.Ib=function(){var e;return this.j&4?mf(this):(e=new _h(mf(this)),e.a+=" (mixed: ",l9(e,this.a),e.a+=")",e.a)},F(xs,"XMLTypeDocumentRootImpl",669),D(1919,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1,2024:1},_m),l.Ih=function(e,n){switch(e.yj()){case 7:case 8:case 9:case 10:case 16:case 22:case 23:case 24:case 25:case 26:case 32:case 33:case 34:case 36:case 37:case 44:case 45:case 50:case 51:case 53:case 55:case 56:case 57:case 58:case 60:case 61:case 4:return n==null?null:$o(n);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return Br(n);case 6:return bZe(u(n,190));case 12:case 47:case 49:case 11:return bhe(this,e,n);case 13:return n==null?null:r3n(u(n,240));case 15:case 14:return n==null?null:dnn(Xt(ye(n)));case 17:return mae((Ii(),n));case 18:return mae(n);case 21:case 20:return n==null?null:gnn(u(n,155).a);case 27:return wZe(u(n,190));case 30:return Fse((Ii(),u(n,15)));case 31:return Fse(u(n,15));case 40:return mZe((Ii(),n));case 42:return yae((Ii(),n));case 43:return yae(n);case 59:case 48:return vZe((Ii(),n));default:throw it(new Fn(QE+e.ne()+Cv))}},l.Jh=function(e){var n,r,s,o,h;switch(e.G==-1&&(e.G=(r=Rl(e),r?Hg(r.Mh(),e):-1)),e.G){case 0:return n=new Wpt,n;case 1:return s=new AB,s;case 2:return o=new Hqt,o;case 3:return h=new qqt,h;default:throw it(new Fn(Kct+e.zb+Cv))}},l.Kh=function(e,n){var r,s,o,h,d,v,k,C,M,j,H,G,K,tt,gt,Mt;switch(e.yj()){case 5:case 52:case 4:return n;case 6:return Ofn(n);case 8:case 7:return n==null?null:y0n(n);case 9:return n==null?null:AD(ql((s=$c(n,!0),s.length>0&&(Rr(0,s.length),s.charCodeAt(0)==43)?s.substr(1):s),-128,127)<<24>>24);case 10:return n==null?null:AD(ql((o=$c(n,!0),o.length>0&&(Rr(0,o.length),o.charCodeAt(0)==43)?o.substr(1):o),-128,127)<<24>>24);case 11:return Br(vv(this,(Ii(),I5e),n));case 12:return Br(vv(this,(Ii(),O5e),n));case 13:return n==null?null:new gbt($c(n,!0));case 15:case 14:return z2n(n);case 16:return Br(vv(this,(Ii(),P5e),n));case 17:return zie((Ii(),n));case 18:return zie(n);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return $c(n,!0);case 21:case 20:return X2n(n);case 22:return Br(vv(this,(Ii(),F5e),n));case 23:return Br(vv(this,(Ii(),N5e),n));case 24:return Br(vv(this,(Ii(),B5e),n));case 25:return Br(vv(this,(Ii(),R5e),n));case 26:return Br(vv(this,(Ii(),j5e),n));case 27:return Afn(n);case 30:return qie((Ii(),n));case 31:return qie(n);case 32:return n==null?null:pe(ql((M=$c(n,!0),M.length>0&&(Rr(0,M.length),M.charCodeAt(0)==43)?M.substr(1):M),Sa,wi));case 33:return n==null?null:new Rp((j=$c(n,!0),j.length>0&&(Rr(0,j.length),j.charCodeAt(0)==43)?j.substr(1):j));case 34:return n==null?null:pe(ql((H=$c(n,!0),H.length>0&&(Rr(0,H.length),H.charCodeAt(0)==43)?H.substr(1):H),Sa,wi));case 36:return n==null?null:v2(Rq((G=$c(n,!0),G.length>0&&(Rr(0,G.length),G.charCodeAt(0)==43)?G.substr(1):G)));case 37:return n==null?null:v2(Rq((K=$c(n,!0),K.length>0&&(Rr(0,K.length),K.charCodeAt(0)==43)?K.substr(1):K)));case 40:return Vhn((Ii(),n));case 42:return Hie((Ii(),n));case 43:return Hie(n);case 44:return n==null?null:new Rp((tt=$c(n,!0),tt.length>0&&(Rr(0,tt.length),tt.charCodeAt(0)==43)?tt.substr(1):tt));case 45:return n==null?null:new Rp((gt=$c(n,!0),gt.length>0&&(Rr(0,gt.length),gt.charCodeAt(0)==43)?gt.substr(1):gt));case 46:return $c(n,!1);case 47:return Br(vv(this,(Ii(),$5e),n));case 59:case 48:return Hhn((Ii(),n));case 49:return Br(vv(this,(Ii(),z5e),n));case 50:return n==null?null:uE(ql((Mt=$c(n,!0),Mt.length>0&&(Rr(0,Mt.length),Mt.charCodeAt(0)==43)?Mt.substr(1):Mt),zH,32767)<<16>>16);case 51:return n==null?null:uE(ql((h=$c(n,!0),h.length>0&&(Rr(0,h.length),h.charCodeAt(0)==43)?h.substr(1):h),zH,32767)<<16>>16);case 53:return Br(vv(this,(Ii(),q5e),n));case 55:return n==null?null:uE(ql((d=$c(n,!0),d.length>0&&(Rr(0,d.length),d.charCodeAt(0)==43)?d.substr(1):d),zH,32767)<<16>>16);case 56:return n==null?null:uE(ql((v=$c(n,!0),v.length>0&&(Rr(0,v.length),v.charCodeAt(0)==43)?v.substr(1):v),zH,32767)<<16>>16);case 57:return n==null?null:v2(Rq((k=$c(n,!0),k.length>0&&(Rr(0,k.length),k.charCodeAt(0)==43)?k.substr(1):k)));case 58:return n==null?null:v2(Rq((C=$c(n,!0),C.length>0&&(Rr(0,C.length),C.charCodeAt(0)==43)?C.substr(1):C)));case 60:return n==null?null:pe(ql((r=$c(n,!0),r.length>0&&(Rr(0,r.length),r.charCodeAt(0)==43)?r.substr(1):r),Sa,wi));case 61:return n==null?null:pe(ql($c(n,!0),Sa,wi));default:throw it(new Fn(QE+e.ne()+Cv))}};var V5e,TLt,G5e,CLt;F(xs,"XMLTypeFactoryImpl",1919),D(586,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1,1945:1,586:1},AXt),l.N=!1,l.O=!1;var U5e=!1;F(xs,"XMLTypePackageImpl",586),D(1852,1,{837:1},hx),l._j=function(){return oxt(),exe},F(xs,"XMLTypePackageImpl/1",1852),D(1861,1,si,d1),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/10",1861),D(1862,1,si,LB),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/11",1862),D(1863,1,si,MB),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/12",1863),D(1864,1,si,DB),l.wj=function(e){return Bm(e)},l.xj=function(e){return Nt(la,ee,333,e,7,1)},F(xs,"XMLTypePackageImpl/13",1864),D(1865,1,si,IB),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/14",1865),D(1866,1,si,OB),l.wj=function(e){return _t(e,15)},l.xj=function(e){return Nt(wh,Ty,15,e,0,1)},F(xs,"XMLTypePackageImpl/15",1866),D(1867,1,si,PB),l.wj=function(e){return _t(e,15)},l.xj=function(e){return Nt(wh,Ty,15,e,0,1)},F(xs,"XMLTypePackageImpl/16",1867),D(1868,1,si,$f),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/17",1868),D(1869,1,si,du),l.wj=function(e){return _t(e,155)},l.xj=function(e){return Nt(i7,ee,155,e,0,1)},F(xs,"XMLTypePackageImpl/18",1869),D(1870,1,si,AJ),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/19",1870),D(1853,1,si,LJ),l.wj=function(e){return _t(e,843)},l.xj=function(e){return Nt(wP,De,843,e,0,1)},F(xs,"XMLTypePackageImpl/2",1853),D(1871,1,si,MJ),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/20",1871),D(1872,1,si,gu),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/21",1872),D(1873,1,si,cC),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/22",1873),D(1874,1,si,FB),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/23",1874),D(1875,1,si,NB),l.wj=function(e){return _t(e,190)},l.xj=function(e){return Nt(Gu,ee,190,e,0,2)},F(xs,"XMLTypePackageImpl/24",1875),D(1876,1,si,fx),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/25",1876),D(1877,1,si,DJ),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/26",1877),D(1878,1,si,$k),l.wj=function(e){return _t(e,15)},l.xj=function(e){return Nt(wh,Ty,15,e,0,1)},F(xs,"XMLTypePackageImpl/27",1878),D(1879,1,si,IJ),l.wj=function(e){return _t(e,15)},l.xj=function(e){return Nt(wh,Ty,15,e,0,1)},F(xs,"XMLTypePackageImpl/28",1879),D(1880,1,si,BB),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/29",1880),D(1854,1,si,OJ),l.wj=function(e){return _t(e,667)},l.xj=function(e){return Nt(mU,De,2021,e,0,1)},F(xs,"XMLTypePackageImpl/3",1854),D(1881,1,si,PJ),l.wj=function(e){return _t(e,19)},l.xj=function(e){return Nt(ja,ee,19,e,0,1)},F(xs,"XMLTypePackageImpl/30",1881),D(1882,1,si,uC),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/31",1882),D(1883,1,si,RB),l.wj=function(e){return _t(e,162)},l.xj=function(e){return Nt(Sv,ee,162,e,0,1)},F(xs,"XMLTypePackageImpl/32",1883),D(1884,1,si,UL),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/33",1884),D(1885,1,si,lC),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/34",1885),D(1886,1,si,FJ),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/35",1886),D(1887,1,si,NJ),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/36",1887),D(1888,1,si,WL),l.wj=function(e){return _t(e,15)},l.xj=function(e){return Nt(wh,Ty,15,e,0,1)},F(xs,"XMLTypePackageImpl/37",1888),D(1889,1,si,hC),l.wj=function(e){return _t(e,15)},l.xj=function(e){return Nt(wh,Ty,15,e,0,1)},F(xs,"XMLTypePackageImpl/38",1889),D(1890,1,si,g1),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/39",1890),D(1855,1,si,zk),l.wj=function(e){return _t(e,668)},l.xj=function(e){return Nt(vP,De,2022,e,0,1)},F(xs,"XMLTypePackageImpl/4",1855),D(1891,1,si,BJ),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/40",1891),D(1892,1,si,qk),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/41",1892),D(1893,1,si,YL),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/42",1893),D(1894,1,si,Wb),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/43",1894),D(1895,1,si,fC),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/44",1895),D(1896,1,si,KL),l.wj=function(e){return _t(e,184)},l.xj=function(e){return Nt(Av,ee,184,e,0,1)},F(xs,"XMLTypePackageImpl/45",1896),D(1897,1,si,zf),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/46",1897),D(1898,1,si,dC),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/47",1898),D(1899,1,si,p1),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/48",1899),D(ab,1,si,b1),l.wj=function(e){return _t(e,184)},l.xj=function(e){return Nt(Av,ee,184,e,0,1)},F(xs,"XMLTypePackageImpl/49",ab),D(1856,1,si,RJ),l.wj=function(e){return _t(e,669)},l.xj=function(e){return Nt(kLt,De,2023,e,0,1)},F(xs,"XMLTypePackageImpl/5",1856),D(1901,1,si,jJ),l.wj=function(e){return _t(e,162)},l.xj=function(e){return Nt(Sv,ee,162,e,0,1)},F(xs,"XMLTypePackageImpl/50",1901),D(1902,1,si,M3),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/51",1902),D(1903,1,si,Hk),l.wj=function(e){return _t(e,19)},l.xj=function(e){return Nt(ja,ee,19,e,0,1)},F(xs,"XMLTypePackageImpl/52",1903),D(1857,1,si,Vk),l.wj=function(e){return ra(e)},l.xj=function(e){return Nt(Ae,ee,2,e,6,1)},F(xs,"XMLTypePackageImpl/6",1857),D(1858,1,si,gC),l.wj=function(e){return _t(e,190)},l.xj=function(e){return Nt(Gu,ee,190,e,0,2)},F(xs,"XMLTypePackageImpl/7",1858),D(1859,1,si,$J),l.wj=function(e){return Nm(e)},l.xj=function(e){return Nt(Rs,ee,476,e,8,1)},F(xs,"XMLTypePackageImpl/8",1859),D(1860,1,si,dx),l.wj=function(e){return _t(e,217)},l.xj=function(e){return Nt(M6,ee,217,e,0,1)},F(xs,"XMLTypePackageImpl/9",1860);var Y1,lp,dA,yU,wt;D(50,60,Q0,Nr),F(Zg,"RegEx/ParseException",50),D(820,1,{},XL),l.sl=function(e){return er*16)throw it(new Nr(qr((Pr(),g0e))));r=r*16+o}while(!0);if(this.a!=125)throw it(new Nr(qr((Pr(),p0e))));if(r>e7)throw it(new Nr(qr((Pr(),b0e))));e=r}else{if(o=0,this.c!=0||(o=y2(this.a))<0)throw it(new Nr(qr((Pr(),Qg))));if(r=o,fi(this),this.c!=0||(o=y2(this.a))<0)throw it(new Nr(qr((Pr(),Qg))));r=r*16+o,e=r}break;case 117:if(s=0,fi(this),this.c!=0||(s=y2(this.a))<0)throw it(new Nr(qr((Pr(),Qg))));if(n=s,fi(this),this.c!=0||(s=y2(this.a))<0)throw it(new Nr(qr((Pr(),Qg))));if(n=n*16+s,fi(this),this.c!=0||(s=y2(this.a))<0)throw it(new Nr(qr((Pr(),Qg))));if(n=n*16+s,fi(this),this.c!=0||(s=y2(this.a))<0)throw it(new Nr(qr((Pr(),Qg))));n=n*16+s,e=n;break;case 118:if(fi(this),this.c!=0||(s=y2(this.a))<0)throw it(new Nr(qr((Pr(),Qg))));if(n=s,fi(this),this.c!=0||(s=y2(this.a))<0)throw it(new Nr(qr((Pr(),Qg))));if(n=n*16+s,fi(this),this.c!=0||(s=y2(this.a))<0)throw it(new Nr(qr((Pr(),Qg))));if(n=n*16+s,fi(this),this.c!=0||(s=y2(this.a))<0)throw it(new Nr(qr((Pr(),Qg))));if(n=n*16+s,fi(this),this.c!=0||(s=y2(this.a))<0)throw it(new Nr(qr((Pr(),Qg))));if(n=n*16+s,fi(this),this.c!=0||(s=y2(this.a))<0)throw it(new Nr(qr((Pr(),Qg))));if(n=n*16+s,n>e7)throw it(new Nr(qr((Pr(),"parser.descappe.4"))));e=n;break;case 65:case 90:case 122:throw it(new Nr(qr((Pr(),w0e))))}return e},l.ul=function(e){var n,r;switch(e){case 100:r=(this.e&32)==32?ib("Nd",!0):(gi(),xU);break;case 68:r=(this.e&32)==32?ib("Nd",!1):(gi(),DLt);break;case 119:r=(this.e&32)==32?ib("IsWord",!0):(gi(),q7);break;case 87:r=(this.e&32)==32?ib("IsWord",!1):(gi(),OLt);break;case 115:r=(this.e&32)==32?ib("IsSpace",!0):(gi(),ek);break;case 83:r=(this.e&32)==32?ib("IsSpace",!1):(gi(),ILt);break;default:throw it(new Vo((n=e,wge+n.toString(16))))}return r},l.vl=function(e){var n,r,s,o,h,d,v,k,C,M,j,H;for(this.b=1,fi(this),n=null,this.c==0&&this.a==94?(fi(this),e?M=(gi(),gi(),new Nl(5)):(n=(gi(),gi(),new Nl(4)),jc(n,0,e7),M=new Nl(4))):M=(gi(),gi(),new Nl(4)),o=!0;(H=this.c)!=1&&!(H==0&&this.a==93&&!o);){if(o=!1,r=this.a,s=!1,H==10)switch(r){case 100:case 68:case 119:case 87:case 115:case 83:yy(M,this.ul(r)),s=!0;break;case 105:case 73:case 99:case 67:r=this.Ll(M,r),r<0&&(s=!0);break;case 112:case 80:if(j=u5t(this,r),!j)throw it(new Nr(qr((Pr(),cut))));yy(M,j),s=!0;break;default:r=this.tl()}else if(H==20){if(d=v8(this.i,58,this.d),d<0)throw it(new Nr(qr((Pr(),O8t))));if(v=!0,wa(this.i,this.d)==94&&(++this.d,v=!1),h=Pl(this.i,this.d,d),k=Lte(h,v,(this.e&512)==512),!k)throw it(new Nr(qr((Pr(),u0e))));if(yy(M,k),s=!0,d+1>=this.j||wa(this.i,d+1)!=93)throw it(new Nr(qr((Pr(),O8t))));this.d=d+2}if(fi(this),!s)if(this.c!=0||this.a!=45)jc(M,r,r);else{if(fi(this),(H=this.c)==1)throw it(new Nr(qr((Pr(),PH))));H==0&&this.a==93?(jc(M,r,r),jc(M,45,45)):(C=this.a,H==10&&(C=this.tl()),fi(this),jc(M,r,C))}(this.e&xf)==xf&&this.c==0&&this.a==44&&fi(this)}if(this.c==1)throw it(new Nr(qr((Pr(),PH))));return n&&(L_(n,M),M=n),v4(M),S_(M),this.b=0,fi(this),M},l.wl=function(){var e,n,r,s;for(r=this.vl(!1);(s=this.c)!=7;)if(e=this.a,s==0&&(e==45||e==38)||s==4){if(fi(this),this.c!=9)throw it(new Nr(qr((Pr(),h0e))));if(n=this.vl(!1),s==4)yy(r,n);else if(e==45)L_(r,n);else if(e==38)lhe(r,n);else throw it(new Vo("ASSERT"))}else throw it(new Nr(qr((Pr(),f0e))));return fi(this),r},l.xl=function(){var e,n;return e=this.a-48,n=(gi(),gi(),new krt(12,null,e)),!this.g&&(this.g=new ER),kR(this.g,new Spt(e)),fi(this),n},l.yl=function(){return fi(this),gi(),K5e},l.zl=function(){return fi(this),gi(),Y5e},l.Al=function(){throw it(new Nr(qr((Pr(),bh))))},l.Bl=function(){throw it(new Nr(qr((Pr(),bh))))},l.Cl=function(){return fi(this),Gun()},l.Dl=function(){return fi(this),gi(),Q5e},l.El=function(){return fi(this),gi(),J5e},l.Fl=function(){var e;if(this.d>=this.j||((e=wa(this.i,this.d++))&65504)!=64)throw it(new Nr(qr((Pr(),a0e))));return fi(this),gi(),gi(),new Yd(0,e-64)},l.Gl=function(){return fi(this),Ayn()},l.Hl=function(){return fi(this),gi(),txe},l.Il=function(){var e;return e=(gi(),gi(),new Yd(0,105)),fi(this),e},l.Jl=function(){return fi(this),gi(),Z5e},l.Kl=function(){return fi(this),gi(),X5e},l.Ll=function(e,n){return this.tl()},l.Ml=function(){return fi(this),gi(),LLt},l.Nl=function(){var e,n,r,s,o;if(this.d+1>=this.j)throw it(new Nr(qr((Pr(),r0e))));if(s=-1,n=null,e=wa(this.i,this.d),49<=e&&e<=57){if(s=e-48,!this.g&&(this.g=new ER),kR(this.g,new Spt(s)),++this.d,wa(this.i,this.d)!=41)throw it(new Nr(qr((Pr(),I2))));++this.d}else switch(e==63&&--this.d,fi(this),n=Ixt(this),n.e){case 20:case 21:case 22:case 23:break;case 8:if(this.c!=7)throw it(new Nr(qr((Pr(),I2))));break;default:throw it(new Nr(qr((Pr(),i0e))))}if(fi(this),o=cv(this),r=null,o.e==2){if(o.em()!=2)throw it(new Nr(qr((Pr(),s0e))));r=o.am(1),o=o.am(0)}if(this.c!=7)throw it(new Nr(qr((Pr(),I2))));return fi(this),gi(),gi(),new oee(s,n,o,r)},l.Ol=function(){return fi(this),gi(),MLt},l.Pl=function(){var e;if(fi(this),e=i$(24,cv(this)),this.c!=7)throw it(new Nr(qr((Pr(),I2))));return fi(this),e},l.Ql=function(){var e;if(fi(this),e=i$(20,cv(this)),this.c!=7)throw it(new Nr(qr((Pr(),I2))));return fi(this),e},l.Rl=function(){var e;if(fi(this),e=i$(22,cv(this)),this.c!=7)throw it(new Nr(qr((Pr(),I2))));return fi(this),e},l.Sl=function(){var e,n,r,s,o;for(e=0,r=0,n=-1;this.d=this.j)throw it(new Nr(qr((Pr(),D8t))));if(n==45){for(++this.d;this.d=this.j)throw it(new Nr(qr((Pr(),D8t))))}if(n==58){if(++this.d,fi(this),s=fXt(cv(this),e,r),this.c!=7)throw it(new Nr(qr((Pr(),I2))));fi(this)}else if(n==41)++this.d,fi(this),s=fXt(cv(this),e,r);else throw it(new Nr(qr((Pr(),n0e))));return s},l.Tl=function(){var e;if(fi(this),e=i$(21,cv(this)),this.c!=7)throw it(new Nr(qr((Pr(),I2))));return fi(this),e},l.Ul=function(){var e;if(fi(this),e=i$(23,cv(this)),this.c!=7)throw it(new Nr(qr((Pr(),I2))));return fi(this),e},l.Vl=function(){var e,n;if(fi(this),e=this.f++,n=Knt(cv(this),e),this.c!=7)throw it(new Nr(qr((Pr(),I2))));return fi(this),n},l.Wl=function(){var e;if(fi(this),e=Knt(cv(this),0),this.c!=7)throw it(new Nr(qr((Pr(),I2))));return fi(this),e},l.Xl=function(e){return fi(this),this.c==5?(fi(this),Yj(e,(gi(),gi(),new Xm(9,e)))):Yj(e,(gi(),gi(),new Xm(3,e)))},l.Yl=function(e){var n;return fi(this),n=(gi(),gi(),new d9(2)),this.c==5?(fi(this),E2(n,pA),E2(n,e)):(E2(n,e),E2(n,pA)),n},l.Zl=function(e){return fi(this),this.c==5?(fi(this),gi(),gi(),new Xm(9,e)):(gi(),gi(),new Xm(3,e))},l.a=0,l.b=0,l.c=0,l.d=0,l.e=0,l.f=1,l.g=null,l.j=0,F(Zg,"RegEx/RegexParser",820),D(1824,820,{},Vqt),l.sl=function(e){return!1},l.tl=function(){return H5t(this)},l.ul=function(e){return ME(e)},l.vl=function(e){return nfe(this)},l.wl=function(){throw it(new Nr(qr((Pr(),bh))))},l.xl=function(){throw it(new Nr(qr((Pr(),bh))))},l.yl=function(){throw it(new Nr(qr((Pr(),bh))))},l.zl=function(){throw it(new Nr(qr((Pr(),bh))))},l.Al=function(){return fi(this),ME(67)},l.Bl=function(){return fi(this),ME(73)},l.Cl=function(){throw it(new Nr(qr((Pr(),bh))))},l.Dl=function(){throw it(new Nr(qr((Pr(),bh))))},l.El=function(){throw it(new Nr(qr((Pr(),bh))))},l.Fl=function(){return fi(this),ME(99)},l.Gl=function(){throw it(new Nr(qr((Pr(),bh))))},l.Hl=function(){throw it(new Nr(qr((Pr(),bh))))},l.Il=function(){return fi(this),ME(105)},l.Jl=function(){throw it(new Nr(qr((Pr(),bh))))},l.Kl=function(){throw it(new Nr(qr((Pr(),bh))))},l.Ll=function(e,n){return yy(e,ME(n)),-1},l.Ml=function(){return fi(this),gi(),gi(),new Yd(0,94)},l.Nl=function(){throw it(new Nr(qr((Pr(),bh))))},l.Ol=function(){return fi(this),gi(),gi(),new Yd(0,36)},l.Pl=function(){throw it(new Nr(qr((Pr(),bh))))},l.Ql=function(){throw it(new Nr(qr((Pr(),bh))))},l.Rl=function(){throw it(new Nr(qr((Pr(),bh))))},l.Sl=function(){throw it(new Nr(qr((Pr(),bh))))},l.Tl=function(){throw it(new Nr(qr((Pr(),bh))))},l.Ul=function(){throw it(new Nr(qr((Pr(),bh))))},l.Vl=function(){var e;if(fi(this),e=Knt(cv(this),0),this.c!=7)throw it(new Nr(qr((Pr(),I2))));return fi(this),e},l.Wl=function(){throw it(new Nr(qr((Pr(),bh))))},l.Xl=function(e){return fi(this),Yj(e,(gi(),gi(),new Xm(3,e)))},l.Yl=function(e){var n;return fi(this),n=(gi(),gi(),new d9(2)),E2(n,e),E2(n,pA),n},l.Zl=function(e){return fi(this),gi(),gi(),new Xm(3,e)};var d5=null,$7=null;F(Zg,"RegEx/ParserForXMLSchema",1824),D(117,1,n7,yw),l.$l=function(e){throw it(new Vo("Not supported."))},l._l=function(){return-1},l.am=function(e){return null},l.bm=function(){return null},l.cm=function(e){},l.dm=function(e){},l.em=function(){return 0},l.Ib=function(){return this.fm(0)},l.fm=function(e){return this.e==11?".":""},l.e=0;var _Lt,z7,gA,W5e,SLt,s3=null,xU,Hft=null,ALt,pA,Vft=null,LLt,MLt,DLt,ILt,OLt,Y5e,ek,K5e,X5e,Q5e,Z5e,q7,J5e,txe,k6n=F(Zg,"RegEx/Token",117);D(136,117,{3:1,136:1,117:1},Nl),l.fm=function(e){var n,r,s;if(this.e==4)if(this==ALt)r=".";else if(this==xU)r="\\d";else if(this==q7)r="\\w";else if(this==ek)r="\\s";else{for(s=new Ag,s.a+="[",n=0;n0&&(s.a+=","),this.b[n]===this.b[n+1]?go(s,_I(this.b[n])):(go(s,_I(this.b[n])),s.a+="-",go(s,_I(this.b[n+1])));s.a+="]",r=s.a}else if(this==DLt)r="\\D";else if(this==OLt)r="\\W";else if(this==ILt)r="\\S";else{for(s=new Ag,s.a+="[^",n=0;n0&&(s.a+=","),this.b[n]===this.b[n+1]?go(s,_I(this.b[n])):(go(s,_I(this.b[n])),s.a+="-",go(s,_I(this.b[n+1])));s.a+="]",r=s.a}return r},l.a=!1,l.c=!1,F(Zg,"RegEx/RangeToken",136),D(584,1,{584:1},Spt),l.a=0,F(Zg,"RegEx/RegexParser/ReferencePosition",584),D(583,1,{3:1,583:1},eVt),l.Fb=function(e){var n;return e==null||!_t(e,583)?!1:(n=u(e,583),hn(this.b,n.b)&&this.a==n.a)},l.Hb=function(){return Vg(this.b+"/"+B5t(this.a))},l.Ib=function(){return this.c.fm(this.a)},l.a=0,F(Zg,"RegEx/RegularExpression",583),D(223,117,n7,Yd),l._l=function(){return this.a},l.fm=function(e){var n,r,s;switch(this.e){case 0:switch(this.a){case 124:case 42:case 43:case 63:case 40:case 41:case 46:case 91:case 123:case 92:s="\\"+knt(this.a&ys);break;case 12:s="\\f";break;case 10:s="\\n";break;case 13:s="\\r";break;case 9:s="\\t";break;case 27:s="\\e";break;default:this.a>=Ka?(r=(n=this.a>>>0,"0"+n.toString(16)),s="\\v"+Pl(r,r.length-6,r.length)):s=""+knt(this.a&ys)}break;case 8:this==LLt||this==MLt?s=""+knt(this.a&ys):s="\\"+knt(this.a&ys);break;default:s=null}return s},l.a=0,F(Zg,"RegEx/Token/CharToken",223),D(309,117,n7,Xm),l.am=function(e){return this.a},l.cm=function(e){this.b=e},l.dm=function(e){this.c=e},l.em=function(){return 1},l.fm=function(e){var n;if(this.e==3)if(this.c<0&&this.b<0)n=this.a.fm(e)+"*";else if(this.c==this.b)n=this.a.fm(e)+"{"+this.c+"}";else if(this.c>=0&&this.b>=0)n=this.a.fm(e)+"{"+this.c+","+this.b+"}";else if(this.c>=0&&this.b<0)n=this.a.fm(e)+"{"+this.c+",}";else throw it(new Vo("Token#toString(): CLOSURE "+this.c+Ya+this.b));else if(this.c<0&&this.b<0)n=this.a.fm(e)+"*?";else if(this.c==this.b)n=this.a.fm(e)+"{"+this.c+"}?";else if(this.c>=0&&this.b>=0)n=this.a.fm(e)+"{"+this.c+","+this.b+"}?";else if(this.c>=0&&this.b<0)n=this.a.fm(e)+"{"+this.c+",}?";else throw it(new Vo("Token#toString(): NONGREEDYCLOSURE "+this.c+Ya+this.b));return n},l.b=0,l.c=0,F(Zg,"RegEx/Token/ClosureToken",309),D(821,117,n7,mvt),l.am=function(e){return e==0?this.a:this.b},l.em=function(){return 2},l.fm=function(e){var n;return this.b.e==3&&this.b.am(0)==this.a?n=this.a.fm(e)+"+":this.b.e==9&&this.b.am(0)==this.a?n=this.a.fm(e)+"+?":n=this.a.fm(e)+(""+this.b.fm(e)),n},F(Zg,"RegEx/Token/ConcatToken",821),D(1822,117,n7,oee),l.am=function(e){if(e==0)return this.d;if(e==1)return this.b;throw it(new Vo("Internal Error: "+e))},l.em=function(){return this.b?2:1},l.fm=function(e){var n;return this.c>0?n="(?("+this.c+")":this.a.e==8?n="(?("+this.a+")":n="(?"+this.a,this.b?n+=this.d+"|"+this.b+")":n+=this.d+")",n},l.c=0,F(Zg,"RegEx/Token/ConditionToken",1822),D(1823,117,n7,oZt),l.am=function(e){return this.b},l.em=function(){return 1},l.fm=function(e){return"(?"+(this.a==0?"":B5t(this.a))+(this.c==0?"":B5t(this.c))+":"+this.b.fm(e)+")"},l.a=0,l.c=0,F(Zg,"RegEx/Token/ModifierToken",1823),D(822,117,n7,Cvt),l.am=function(e){return this.a},l.em=function(){return 1},l.fm=function(e){var n;switch(n=null,this.e){case 6:this.b==0?n="(?:"+this.a.fm(e)+")":n="("+this.a.fm(e)+")";break;case 20:n="(?="+this.a.fm(e)+")";break;case 21:n="(?!"+this.a.fm(e)+")";break;case 22:n="(?<="+this.a.fm(e)+")";break;case 23:n="(?"+this.a.fm(e)+")"}return n},l.b=0,F(Zg,"RegEx/Token/ParenToken",822),D(521,117,{3:1,117:1,521:1},krt),l.bm=function(){return this.b},l.fm=function(e){return this.e==12?"\\"+this.a:Nbn(this.b)},l.a=0,F(Zg,"RegEx/Token/StringToken",521),D(465,117,n7,d9),l.$l=function(e){E2(this,e)},l.am=function(e){return u(zw(this.a,e),117)},l.em=function(){return this.a?this.a.a.c.length:0},l.fm=function(e){var n,r,s,o,h;if(this.e==1){if(this.a.a.c.length==2)n=u(zw(this.a,0),117),r=u(zw(this.a,1),117),r.e==3&&r.am(0)==n?o=n.fm(e)+"+":r.e==9&&r.am(0)==n?o=n.fm(e)+"+?":o=n.fm(e)+(""+r.fm(e));else{for(h=new Ag,s=0;s=this.c.b:this.a<=this.c.b},l.Sb=function(){return this.b>0},l.Tb=function(){return this.b},l.Vb=function(){return this.b-1},l.Qb=function(){throw it(new Sg(Tge))},l.a=0,l.b=0,F(Z8t,"ExclusiveRange/RangeIterator",254);var xh=A8(FH,"C"),Cr=A8(rS,"I"),pl=A8(b6,"Z"),Ob=A8(iS,"J"),Gu=A8(tS,"B"),aa=A8(eS,"D"),a3=A8(nS,"F"),g5=A8(sS,"S"),E6n=Ki("org.eclipse.elk.core.labels","ILabelManager"),PLt=Ki(Ra,"DiagnosticChain"),FLt=Ki(Z0e,"ResourceSet"),NLt=F(Ra,"InvocationTargetException",null),nxe=(AR(),gan),rxe=rxe=r0n;ucn(nKe),Fcn("permProps",[[[YH,KH],[XH,"gecko1_8"]],[[YH,KH],[XH,"ie10"]],[[YH,KH],[XH,"ie8"]],[[YH,KH],[XH,"ie9"]],[[YH,KH],[XH,"safari"]]]),rxe(null,"elk",null)}).call(this)}).call(this,typeof b0<"u"?b0:typeof self<"u"?self:typeof window<"u"?window:{})},{}],3:[function(f,p,w){function m(I,B){if(!(I instanceof B))throw new TypeError("Cannot call a class as a function")}function b(I,B){if(!I)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return B&&(typeof B=="object"||typeof B=="function")?B:I}function E(I,B){if(typeof B!="function"&&B!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof B);I.prototype=Object.create(B&&B.prototype,{constructor:{value:I,enumerable:!1,writable:!0,configurable:!0}}),B&&(Object.setPrototypeOf?Object.setPrototypeOf(I,B):I.__proto__=B)}var _=f("./elk-api.js").default,A=function(I){E(B,I);function B(){var N=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};m(this,B);var R=Object.assign({},N),z=!1;try{f.resolve("web-worker"),z=!0}catch{}if(N.workerUrl)if(z){var W=f("web-worker");R.workerFactory=function(at){return new W(at)}}else console.warn(`Web worker requested but 'web-worker' package not installed. +`)}return[]}function k7n(e){var t;return t=(Qht(),p6t),t[e>>>28]|t[e>>24&15]<<4|t[e>>20&15]<<8|t[e>>16&15]<<12|t[e>>12&15]<<16|t[e>>8&15]<<20|t[e>>4&15]<<24|t[e&15]<<28}function Xdt(e){var t,n,r;e.b==e.c&&(r=e.a.length,n=P7e(b.Math.max(8,r))<<1,e.b!=0?(t=c0(e.a,n),fft(e,t,r),e.a=t,e.b=0):ay(e.a,n),e.c=r)}function E7n(e,t){var n;return n=e.b,n.pf((pi(),rh))?n.ag()==(Ct(),er)?-n.Mf().a-ze(Ge(n.of(rh))):t+ze(Ge(n.of(rh))):n.ag()==(Ct(),er)?-n.Mf().a:t}function HN(e){var t;return e.b.c.length!=0&&l(jt(e.b,0),72).a?l(jt(e.b,0),72).a:(t=Qae(e),t??""+(e.c?gc(e.c.a,e,0):-1))}function fU(e){var t;return e.f.c.length!=0&&l(jt(e.f,0),72).a?l(jt(e.f,0),72).a:(t=Qae(e),t??""+(e.i?gc(e.i.j,e,0):-1))}function T7n(e,t){var n,r;if(t<0||t>=e.gc())return null;for(n=t;n0?e.c:0),a=b.Math.max(a,t.d),++r;e.e=o,e.b=a}function S7n(e){var t,n;if(!e.b)for(e.b=$H(l(e.f,123).kh().i),n=new or(l(e.f,123).kh());n.e!=n.i.gc();)t=l(gr(n),135),vt(e.b,new Yie(t));return e.b}function _7n(e,t){var n,r,a;if(t.dc())return Fk(),Fk(),fF;for(n=new Ort(e,t.gc()),a=new or(e);a.e!=a.i.gc();)r=gr(a),t.Hc(r)&&qr(n,r);return n}function sxe(e,t,n,r){return t==0?r?(!e.o&&(e.o=new xl((su(),Cg),L2,e,0)),e.o):(!e.o&&(e.o=new xl((su(),Cg),L2,e,0)),iN(e.o)):rU(e,t,n,r)}function yue(e){var t,n;if(e.rb)for(t=0,n=e.rb.i;t>22),a+=r>>22,a<0)?!1:(e.l=n&eh,e.m=r&eh,e.h=a&hp,!0)}function xue(e,t,n,r,a,o,f){var g,w;return!(t.Te()&&(w=e.a.Ne(n,r),w<0||!a&&w==0)||t.Ue()&&(g=e.a.Ne(n,o),g>0||!f&&g==0))}function D7n(e,t){TE();var n;if(n=e.j.g-t.j.g,n!=0)return 0;switch(e.j.g){case 2:return zce(t,cLe)-zce(e,cLe);case 4:return zce(e,oLe)-zce(t,oLe)}return 0}function I7n(e){switch(e.g){case 0:return D1e;case 1:return I1e;case 2:return O1e;case 3:return N1e;case 4:return QK;case 5:return P1e;default:return null}}function ac(e,t,n){var r,a;return r=(a=new Hie,Gm(a,t),Fu(a,n),qr((!e.c&&(e.c=new nt(k3,e,12,10)),e.c),a),a),i2(r,0),My(r,1),u2(r,!0),c2(r,!0),r}function vx(e,t){var n,r;if(t>=e.i)throw ue(new Vse(t,e.i));return++e.j,n=e.g[t],r=e.i-t-1,r>0&&pu(e.g,t+1,e.g,t,r),Ts(e.g,--e.i,null),e.Qi(t,n),e.Ni(),n}function Qdt(e,t){var n,r;return e.Db>>16==17?e.Cb.Th(e,21,Vf,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||e.ii()),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function O7n(e){var t,n,r,a;for(Cn(),Vs(e.c,e.a),a=new G(e.c);a.an.a.c.length))throw ue(new Yn("index must be >= 0 and <= layer node count"));e.c&&al(e.c.a,e),e.c=n,n&&pw(n.a,t,e)}function ngt(e,t){var n,r,a;for(r=new hr(dr(sp(e).a.Kc(),new j));jr(r);)return n=l(xr(r),18),a=l(t.Kb(n),10),new JS(Xr(a.n.b+a.o.b/2));return o_(),o_(),v0e}function rgt(e,t){this.c=new Pr,this.a=e,this.b=t,this.d=l(Q(e,(ft(),$6)),312),qe(Q(e,(Nt(),GMe)))===qe((cN(),JK))?this.e=new XQe:this.e=new YQe}function BA(e,t){var n,r;return r=null,e.pf((pi(),r9))&&(n=l(e.of(r9),96),n.pf(t)&&(r=n.of(t))),r==null&&e.Tf()&&(r=e.Tf().of(t)),r==null&&(r=It(t)),r}function kue(e,t){var n,r;n=e.fd(t);try{return r=n.Pb(),n.Qb(),r}catch(a){throw a=bs(a),De(a,112)?ue(new tc("Can't remove element "+t)):ue(a)}}function z7n(e,t){var n,r,a;if(r=new Qz,a=new R7e(r.q.getFullYear()-Lb,r.q.getMonth(),r.q.getDate()),n=JAn(e,t,a),n==0||n0?t:0),++n;return new lt(r,a)}function lxe(e,t){var n,r;return e.Db>>16==6?e.Cb.Th(e,6,js,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||(su(),pY)),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function hxe(e,t){var n,r;return e.Db>>16==7?e.Cb.Th(e,1,oF,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||(su(),dPe)),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function fxe(e,t){var n,r;return e.Db>>16==9?e.Cb.Th(e,9,Ai,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||(su(),pPe)),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function agt(e,t){var n,r;return e.Db>>16==5?e.Cb.Th(e,9,TY,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||(Tn(),D2)),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function ogt(e,t){var n,r;return e.Db>>16==7?e.Cb.Th(e,6,u1,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||(Tn(),O2)),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function dxe(e,t){var n,r;return e.Db>>16==3?e.Cb.Th(e,0,uF,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||(Tn(),M2)),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function cgt(){this.a=new T$,this.g=new cU,this.j=new cU,this.b=new Pr,this.d=new cU,this.i=new cU,this.k=new Pr,this.c=new Pr,this.e=new Pr,this.f=new Pr}function V7n(e,t,n){var r,a,o;for(n<0&&(n=0),o=e.i,a=n;aohe)return FE(e,r);if(r==e)return!0}}return!1}function G7n(e){switch(zq(),e.q.g){case 5:Vpt(e,(Ct(),Qn)),Vpt(e,Dr);break;case 4:U2t(e,(Ct(),Qn)),U2t(e,Dr);break;default:Wvt(e,(Ct(),Qn)),Wvt(e,Dr)}}function K7n(e){switch(zq(),e.q.g){case 5:u2t(e,(Ct(),ar)),u2t(e,er);break;case 4:gdt(e,(Ct(),ar)),gdt(e,er);break;default:Yvt(e,(Ct(),ar)),Yvt(e,er)}}function W7n(e){var t,n;t=l(Q(e,(b0(),e8t)),17),t?(n=t.a,n==0?rt(e,(bb(),EK),new Uce):rt(e,(bb(),EK),new VH(n))):rt(e,(bb(),EK),new VH(1))}function Y7n(e,t){var n;switch(n=e.i,t.g){case 1:return-(e.n.b+e.o.b);case 2:return e.n.a-n.o.a;case 3:return e.n.b-n.o.b;case 4:return-(e.n.a+e.o.a)}return 0}function X7n(e,t){switch(e.g){case 0:return t==(hf(),$b)?HK:VK;case 1:return t==(hf(),$b)?HK:pB;case 2:return t==(hf(),$b)?pB:VK;default:return pB}}function UN(e,t){var n,r,a;for(al(e.a,t),e.e-=t.r+(e.a.c.length==0?0:e.c),a=xCe,r=new G(e.a);r.a>16==3?e.Cb.Th(e,12,Ai,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||(su(),fPe)),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function pxe(e,t){var n,r;return e.Db>>16==11?e.Cb.Th(e,10,Ai,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||(su(),gPe)),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function ugt(e,t){var n,r;return e.Db>>16==10?e.Cb.Th(e,11,Vf,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||(Tn(),I2)),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function lgt(e,t){var n,r;return e.Db>>16==10?e.Cb.Th(e,12,Uf,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||(Tn(),N4)),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function Of(e){var t;return!(e.Bb&1)&&e.r&&e.r.Vh()&&(t=l(e.r,54),e.r=l(yb(e,t),142),e.r!=t&&e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,9,8,t,e.r))),e.r}function Eue(e,t,n){var r;return r=he(le(Na,1),Zo,28,15,[zxe(e,(t1(),Gc),t,n),zxe(e,$u,t,n),zxe(e,Kc,t,n)]),e.f&&(r[0]=b.Math.max(r[0],r[2]),r[2]=r[0]),r}function Q7n(e,t){var n,r,a;if(a=x6n(e,t),a.c.length!=0)for(Vs(a,new pS),n=a.c.length,r=0;r>19,E=t.h>>19,w!=E?E-w:(a=e.h,g=t.h,a!=g?a-g:(r=e.m,f=t.m,r!=f?r-f:(n=e.l,o=t.l,n-o)))}function dU(){dU=U,D_e=(PU(),z0e),M_e=new pn(pEe,D_e),L_e=(aV(),$0e),A_e=new pn(bEe,L_e),__e=(ZV(),j0e),S_e=new pn(mEe,__e),C_e=new pn(vEe,(Hn(),!0))}function FA(e,t,n){var r,a;r=t*n,De(e.g,154)?(a=ix(e),a.f.d?a.f.a||(e.d.a+=r+H1):(e.d.d-=r+H1,e.d.a+=r+H1)):De(e.g,10)&&(e.d.d-=r,e.d.a+=2*r)}function hgt(e,t,n){var r,a,o,f,g;for(a=e[n.g],g=new G(t.d);g.a0?e.b:0),++n;t.b=r,t.e=a}function fgt(e){var t,n,r;if(r=e.b,tet(e.i,r.length)){for(n=r.length*2,e.b=We(k0e,TP,303,n,0,1),e.c=We(k0e,TP,303,n,0,1),e.f=n-1,e.i=0,t=e.a;t;t=t.c)eP(e,t,t);++e.g}}function i8n(e,t,n,r){var a,o,f,g;for(a=0;af&&(g=f/r),a>o&&(w=o/a),md(e,b.Math.min(g,w)),e}function a8n(){zU();var e,t;try{if(t=l(Sxe((ib(),Gf),xT),2113),t)return t}catch(n){if(n=bs(n),De(n,103))e=n,p5e((Jr(),e));else throw ue(n)}return new ik}function o8n(){zU();var e,t;try{if(t=l(Sxe((ib(),Gf),Ff),2040),t)return t}catch(n){if(n=bs(n),De(n,103))e=n,p5e((Jr(),e));else throw ue(n)}return new d8}function c8n(){klt();var e,t;try{if(t=l(Sxe((ib(),Gf),cv),2122),t)return t}catch(n){if(n=bs(n),De(n,103))e=n,p5e((Jr(),e));else throw ue(n)}return new uk}function u8n(e,t,n){var r,a;return a=e.e,e.e=t,e.Db&4&&!(e.Db&1)&&(r=new _a(e,1,4,a,t),n?n.nj(r):n=r),a!=t&&(t?n=ZE(e,SU(e,t),n):n=ZE(e,e.a,n)),n}function dgt(){Qz.call(this),this.e=-1,this.a=!1,this.p=lo,this.k=-1,this.c=-1,this.b=-1,this.g=!1,this.f=-1,this.j=-1,this.n=-1,this.i=-1,this.d=-1,this.o=lo}function l8n(e,t){var n,r,a;if(r=e.b.d.d,e.a||(r+=e.b.d.a),a=t.b.d.d,t.a||(a+=t.b.d.a),n=Yi(r,a),n==0){if(!e.a&&t.a)return-1;if(!t.a&&e.a)return 1}return n}function h8n(e,t){var n,r,a;if(r=e.b.b.d,e.a||(r+=e.b.b.a),a=t.b.b.d,t.a||(a+=t.b.b.a),n=Yi(r,a),n==0){if(!e.a&&t.a)return-1;if(!t.a&&e.a)return 1}return n}function f8n(e,t){var n,r,a;if(r=e.b.g.d,e.a||(r+=e.b.g.a),a=t.b.g.d,t.a||(a+=t.b.g.a),n=Yi(r,a),n==0){if(!e.a&&t.a)return-1;if(!t.a&&e.a)return 1}return n}function mxe(){mxe=U,v8t=yl(fi(fi(fi(new Xs,(uo(),_u),(vo(),KAe)),_u,WAe),mc,YAe),mc,BAe),y8t=fi(fi(new Xs,_u,LAe),_u,FAe),w8t=yl(new Xs,mc,jAe)}function d8n(e){var t,n,r,a,o;for(t=l(Q(e,(ft(),KL)),85),o=e.n,r=t.Cc().Kc();r.Ob();)n=l(r.Pb(),314),a=n.i,a.c+=o.a,a.d+=o.b,n.c?Ibt(n):Obt(n);rt(e,KL,null)}function g8n(e,t,n){var r,a;switch(a=e.b,r=a.d,t.g){case 1:return-r.d-n;case 2:return a.o.a+r.c+n;case 3:return a.o.b+r.a+n;case 4:return-r.b-n;default:return-1}}function p8n(e,t,n){var r,a;for(n.Ug("Interactive node placement",1),e.a=l(Q(t,(ft(),$6)),312),a=new G(t.b);a.a0&&(f=(o&Ii)%e.d.length,a=y9e(e,f,o,t),a)?(g=a.nd(n),g):(r=e.ck(o,t,n),e.c.Fc(r),null)}function yxe(e,t){var n,r,a,o;switch(o2(e,t).Kl()){case 3:case 2:{for(n=d6(t),a=0,o=n.i;a=0;r--)if(vn(e[r].d,t)||vn(e[r].d,n)){e.length>=r+1&&e.splice(0,r+1);break}return e}function KN(e,t){var n;return wc(e)&&wc(t)&&(n=e/t,_P0&&(e.b+=2,e.a+=r):(e.b+=1,e.a+=b.Math.min(r,a))}function ygt(e){var t;t=l(Q(l(ff(e.b,0),40),(Hc(),gIe)),107),rt(e,(Qi(),QT),new lt(0,0)),hmt(new nN,e,t.b+t.c-ze(Ge(Q(e,Bde))),t.d+t.a-ze(Ge(Q(e,Fde))))}function xgt(e,t){var n,r;if(r=!1,Ia(t)&&(r=!0,J8(e,new yy(ei(t)))),r||De(t,242)&&(r=!0,J8(e,(n=g4e(l(t,242)),new vk(n)))),!r)throw ue(new Qie(mSe))}function I8n(e,t,n,r){var a,o,f;return a=new Zg(e.e,1,10,(f=t.c,De(f,90)?l(f,29):(Tn(),Kf)),(o=n.c,De(o,90)?l(o,29):(Tn(),Kf)),f2(e,t),!1),r?r.nj(a):r=a,r}function Exe(e){var t,n;switch(l(Q(eo(e),(Nt(),jMe)),429).g){case 0:return t=e.n,n=e.o,new lt(t.a+n.a/2,t.b+n.b/2);case 1:return new Eo(e.n);default:return null}}function WN(){WN=U,ZK=new C_(Id,0),TLe=new C_("LEFTUP",1),SLe=new C_("RIGHTUP",2),ELe=new C_("LEFTDOWN",3),CLe=new C_("RIGHTDOWN",4),B1e=new C_("BALANCED",5)}function O8n(e,t,n){var r,a,o;if(r=Yi(e.a[t.p],e.a[n.p]),r==0){if(a=l(Q(t,(ft(),Wx)),15),o=l(Q(n,Wx),15),a.Hc(n))return-1;if(o.Hc(t))return 1}return r}function N8n(e){switch(e.g){case 1:return new vne;case 2:return new wne;case 3:return new mne;case 0:return null;default:throw ue(new Yn(Efe+(e.f!=null?e.f:""+e.g)))}}function Txe(e,t,n){switch(t){case 1:!e.n&&(e.n=new nt(ec,e,1,7)),$r(e.n),!e.n&&(e.n=new nt(ec,e,1,7)),As(e.n,l(n,16));return;case 2:fE(e,ei(n));return}V7e(e,t,n)}function Cxe(e,t,n){switch(t){case 3:Mw(e,ze(Ge(n)));return;case 4:Dw(e,ze(Ge(n)));return;case 5:Uu(e,ze(Ge(n)));return;case 6:Gu(e,ze(Ge(n)));return}Txe(e,t,n)}function gU(e,t,n){var r,a,o;o=(r=new Hie,r),a=$1(o,t,null),a&&a.oj(),Fu(o,n),qr((!e.c&&(e.c=new nt(k3,e,12,10)),e.c),o),i2(o,0),My(o,1),u2(o,!0),c2(o,!0)}function Sxe(e,t){var n,r,a;return n=y_(e.i,t),De(n,241)?(a=l(n,241),a.zi()==null,a.wi()):De(n,507)?(r=l(n,2037),a=r.b,a):null}function P8n(e,t,n,r){var a,o;return Xr(t),Xr(n),o=l(H_(e.d,t),17),Wlt(!!o,"Row %s not in %s",t,e.e),a=l(H_(e.b,n),17),Wlt(!!a,"Column %s not in %s",n,e.c),s0t(e,o.a,a.a,r)}function kgt(e,t,n,r,a,o,f){var g,w,E,C,L;if(C=a[o],E=o==f-1,g=E?r:0,L=zdt(g,C),r!=10&&he(le(e,f-o),t[o],n[o],g,L),!E)for(++o,w=0;w1||g==-1?(o=l(w,15),a.Wb(v5n(e,o))):a.Wb(cle(e,l(w,58)))))}function q8n(e,t,n,r){MZe();var a=m0e;function o(){for(var f=0;f0)return!1;return!0}function U8n(e){var t,n,r,a,o;for(r=new qm(new Sr(e.b).a);r.b;)n=Nw(r),t=l(n.ld(),10),o=l(l(n.md(),42).a,10),a=l(l(n.md(),42).b,8),Oi(Y0(t.n),Oi(Ja(o.n),a))}function G8n(e){switch(l(Q(e.b,(Nt(),IMe)),387).g){case 1:Is(fc(Dc(new bn(null,new kn(e.d,16)),new dI),new g5),new wee);break;case 2:zSn(e);break;case 0:wkn(e)}}function K8n(e,t,n){var r,a,o;for(r=n,!r&&(r=new L8),r.Ug("Layout",e.a.c.length),o=new G(e.a);o.awfe)return n;a>-1e-6&&++n}return n}function Axe(e,t){var n;t!=e.b?(n=null,e.b&&(n=IH(e.b,e,-4,n)),t&&(n=mx(t,e,-4,n)),n=J0t(e,t,n),n&&n.oj()):e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,3,t,t))}function Cgt(e,t){var n;t!=e.f?(n=null,e.f&&(n=IH(e.f,e,-1,n)),t&&(n=mx(t,e,-1,n)),n=Q0t(e,t,n),n&&n.oj()):e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,0,t,t))}function Q8n(e,t,n,r){var a,o,f,g;return hh(e.e)&&(a=t.Lk(),g=t.md(),o=n.md(),f=db(e,1,a,g,o,a.Jk()?XE(e,a,o,De(a,102)&&(l(a,19).Bb&Io)!=0):-1,!0),r?r.nj(f):r=f),r}function Sgt(e){var t,n,r;if(e==null)return null;if(n=l(e,15),n.dc())return"";for(r=new Up,t=n.Kc();t.Ob();)Xo(r,(Gi(),ei(t.Pb()))),r.a+=" ";return Gse(r,r.a.length-1)}function _gt(e){var t,n,r;if(e==null)return null;if(n=l(e,15),n.dc())return"";for(r=new Up,t=n.Kc();t.Ob();)Xo(r,(Gi(),ei(t.Pb()))),r.a+=" ";return Gse(r,r.a.length-1)}function J8n(e,t,n){var r,a;return r=e.c[t.c.p][t.p],a=e.c[n.c.p][n.p],r.a!=null&&a.a!=null?Nae(r.a,a.a):r.a!=null?-1:a.a!=null?1:0}function Z8n(e,t,n){return n.Ug("Tree layout",1),qO(e.b),X0(e.b,(wx(),NW),NW),X0(e.b,lM,lM),X0(e.b,hM,hM),X0(e.b,fM,fM),e.a=bP(e.b,t),K8n(e,t,n.eh(1)),n.Vg(),t}function exn(e,t){var n,r,a,o,f,g;if(t)for(o=t.a.length,n=new Dm(o),g=(n.b-n.a)*n.c<0?(sb(),tm):new cb(n);g.Ob();)f=l(g.Pb(),17),a=Jk(t,f.a),r=new GXe(e),cpn(r.a,a)}function txn(e,t){var n,r,a,o,f,g;if(t)for(o=t.a.length,n=new Dm(o),g=(n.b-n.a)*n.c<0?(sb(),tm):new cb(n);g.Ob();)f=l(g.Pb(),17),a=Jk(t,f.a),r=new FXe(e),opn(r.a,a)}function nxn(e){var t;if(e!=null&&e.length>0&&co(e,e.length-1)==33)try{return t=P2t(tf(e,0,e.length-1)),t.e==null}catch(n){if(n=bs(n),!De(n,33))throw ue(n)}return!1}function rxn(e,t,n){var r,a,o;switch(r=eo(t),a=zV(r),o=new gu,Mc(o,t),n.g){case 1:la(o,BN(gx(a)));break;case 2:la(o,gx(a))}return rt(o,(Nt(),m4),Ge(Q(e,m4))),o}function Lxe(e){var t,n;return t=l(xr(new hr(dr(ka(e.a).a.Kc(),new j))),18),n=l(xr(new hr(dr(qs(e.a).a.Kc(),new j))),18),Rt(Bt(Q(t,(ft(),W1))))||Rt(Bt(Q(n,W1)))}function Ry(){Ry=U,bB=new cO("ONE_SIDE",0),KK=new cO("TWO_SIDES_CORNER",1),WK=new cO("TWO_SIDES_OPPOSING",2),GK=new cO("THREE_SIDES",3),UK=new cO("FOUR_SIDES",4)}function Agt(e,t){var n,r,a,o;for(o=new bt,a=0,r=t.Kc();r.Ob();){for(n=pt(l(r.Pb(),17).a+a);n.a=e.f)break;$n(o.c,n)}return o}function ixn(e,t){var n,r,a,o,f;for(o=new G(t.a);o.a0&&Jdt(this,this.c-1,(Ct(),ar)),this.c0&&e[0].length>0&&(this.c=Rt(Bt(Q(eo(e[0][0]),(ft(),zLe))))),this.a=We(kEt,dt,2117,e.length,0,2),this.b=We(EEt,dt,2118,e.length,0,2),this.d=new G0t}function uxn(e){return e.c.length==0?!1:(Sn(0,e.c.length),l(e.c[0],18)).c.i.k==(Zn(),Aa)?!0:W5(fc(new bn(null,new kn(e,16)),new Wee),new Yee)}function Dgt(e,t){var n,r,a,o,f,g,w;for(g=Hy(t),o=t.f,w=t.g,f=b.Math.sqrt(o*o+w*w),a=0,r=new G(g);r.a=0?(n=KN(e,JU),r=RN(e,JU)):(t=ub(e,1),n=KN(t,5e8),r=RN(t,5e8),r=bo(l0(r,1),va(e,1))),Q0(l0(r,32),va(n,Vo))}function Ngt(e,t,n){var r,a;switch(r=(mr(t.b!=0),l(af(t,t.a.a),8)),n.g){case 0:r.b=0;break;case 2:r.b=e.f;break;case 3:r.a=0;break;default:r.a=e.g}return a=Rr(t,0),zO(a,r),t}function Pgt(e,t,n,r){var a,o,f,g,w;switch(w=e.b,o=t.d,f=o.j,g=G8e(f,w.d[f.g],n),a=Oi(Ja(o.n),o.a),o.j.g){case 1:case 3:g.a+=a.a;break;case 2:case 4:g.b+=a.b}Cs(r,g,r.c.b,r.c)}function xxn(e,t,n){var r,a,o,f;for(f=gc(e.e,t,0),o=new Pwe,o.b=n,r=new Ua(e.e,f);r.b1;t>>=1)t&1&&(r=K5(r,n)),n.d==1?n=K5(n,n):n=new Q1t(mmt(n.a,n.d,We(Vr,di,28,n.d<<1,15,1)));return r=K5(r,n),r}function Rxe(){Rxe=U;var e,t,n,r;for(m_e=We(Na,Zo,28,25,15,1),v_e=We(Na,Zo,28,33,15,1),r=152587890625e-16,t=32;t>=0;t--)v_e[t]=r,r*=.5;for(n=1,e=24;e>=0;e--)m_e[e]=n,n*=.5}function _xn(e){var t,n;if(Rt(Bt(at(e,(Nt(),b4))))){for(n=new hr(dr(cp(e).a.Kc(),new j));jr(n);)if(t=l(xr(n),74),qw(t)&&Rt(Bt(at(t,gv))))return!0}return!1}function Bgt(e,t){var n,r,a;na(e.f,t)&&(t.b=e,r=t.c,gc(e.j,r,0)!=-1||vt(e.j,r),a=t.d,gc(e.j,a,0)!=-1||vt(e.j,a),n=t.a.b,n.c.length!=0&&(!e.i&&(e.i=new rdt(e)),I3n(e.i,n)))}function Axn(e){var t,n,r,a,o;return n=e.c.d,r=n.j,a=e.d.d,o=a.j,r==o?n.p=0&&vn(e.substr(t,3),"GMT")||t>=0&&vn(e.substr(t,3),"UTC"))&&(n[0]=t+3),mke(e,n,r)}function Mxn(e,t){var n,r,a,o,f;for(o=e.g.a,f=e.g.b,r=new G(e.d);r.an;o--)e[o]|=t[o-n-1]>>>f,e[o-1]=t[o-n-1]<0&&pu(e.g,t,e.g,t+r,g),f=n.Kc(),e.i+=r,a=0;a>4&15,o=e[r]&15,f[a++]=bPe[n],f[a++]=bPe[o];return If(f,0,f.length)}function cl(e){var t,n;return e>=Io?(t=AP+(e-Io>>10&1023)&Zs,n=56320+(e-Io&1023)&Zs,String.fromCharCode(t)+(""+String.fromCharCode(n))):String.fromCharCode(e&Zs)}function zxn(e,t){py();var n,r,a,o;return a=l(l($i(e.r,t),21),87),a.gc()>=2?(r=l(a.Kc().Pb(),117),n=e.u.Hc((Rl(),PM)),o=e.u.Hc(a9),!r.a&&!n&&(a.gc()==2||o)):!1}function jgt(e,t,n,r,a){var o,f,g;for(o=Tbt(e,t,n,r,a),g=!1;!o;)TU(e,a,!0),g=!0,o=Tbt(e,t,n,r,a);g&&TU(e,a,!1),f=bce(a),f.c.length!=0&&(e.d&&e.d.Gg(f),jgt(e,a,n,r,f))}function vU(){vU=U,Uge=new L_(Id,0),$Ne=new L_("DIRECTED",1),qNe=new L_("UNDIRECTED",2),RNe=new L_("ASSOCIATION",3),zNe=new L_("GENERALIZATION",4),jNe=new L_("DEPENDENCY",5)}function qxn(e,t){var n;if(!M1(e))throw ue(new nc(t4t));switch(n=M1(e),t.g){case 1:return-(e.j+e.f);case 2:return e.i-n.g;case 3:return e.j-n.f;case 4:return-(e.i+e.g)}return 0}function Hxn(e,t,n){var r,a,o;return r=t.Lk(),o=t.md(),a=r.Jk()?db(e,4,r,o,null,XE(e,r,o,De(r,102)&&(l(r,19).Bb&Io)!=0),!0):db(e,r.tk()?2:1,r,o,r.ik(),-1,!0),n?n.nj(a):n=a,n}function $E(e,t){var n,r;for(nr(t),r=e.b.c.length,vt(e.b,t);r>0;){if(n=r,r=(r-1)/2|0,e.a.Ne(jt(e.b,r),t)<=0)return rf(e.b,n,t),!0;rf(e.b,n,jt(e.b,r))}return rf(e.b,r,t),!0}function zxe(e,t,n,r){var a,o;if(a=0,n)a=BV(e.a[n.g][t.g],r);else for(o=0;o=g)}function $gt(e){switch(e.g){case 0:return new Sne;case 1:return new _ne;default:throw ue(new Yn("No implementation is available for the width approximator "+(e.f!=null?e.f:""+e.g)))}}function qxe(e,t,n,r){var a;if(a=!1,Ia(r)&&(a=!0,zk(t,n,ei(r))),a||hy(r)&&(a=!0,qxe(e,t,n,r)),a||De(r,242)&&(a=!0,Nm(t,n,l(r,242))),!a)throw ue(new Qie(mSe))}function Uxn(e,t){var n,r,a;if(n=t.qi(e.a),n&&(a=n1((!n.b&&(n.b=new dh((Tn(),No),Yc,n)),n.b),Bf),a!=null)){for(r=1;r<(El(),$Pe).length;++r)if(vn($Pe[r],a))return r}return 0}function Gxn(e,t){var n,r,a;if(n=t.qi(e.a),n&&(a=n1((!n.b&&(n.b=new dh((Tn(),No),Yc,n)),n.b),Bf),a!=null)){for(r=1;r<(El(),zPe).length;++r)if(vn(zPe[r],a))return r}return 0}function zgt(e,t){var n,r,a,o;if(nr(t),o=e.a.gc(),o0?1:0;o.a[a]!=n;)o=o.a[a],a=e.a.Ne(n.d,o.d)>0?1:0;o.a[a]=r,r.b=n.b,r.a[0]=n.a[0],r.a[1]=n.a[1],n.a[0]=null,n.a[1]=null}function Yxn(e){var t,n,r,a;for(t=new bt,n=We(ih,pg,28,e.a.c.length,16,1),l5e(n,n.length),a=new G(e.a);a.a0&&dmt((Sn(0,n.c.length),l(n.c[0],30)),e),n.c.length>1&&dmt(l(jt(n,n.c.length-1),30),e),t.Vg()}function Qxn(e){Rl();var t,n;return t=rs(vp,he(le(cY,1),it,279,0,[Yb])),!(yN(NH(t,e))>1||(n=rs(PM,he(le(cY,1),it,279,0,[NM,a9])),yN(NH(n,e))>1))}function Vxe(e,t){var n;n=xu((ib(),Gf),e),De(n,507)?rc(Gf,e,new Ott(this,t)):rc(Gf,e,this),Nue(this,t),t==(Sk(),APe)?(this.wb=l(this,2038),l(t,2040)):this.wb=(lb(),Vn)}function Jxn(e){var t,n,r;if(e==null)return null;for(t=null,n=0;n=b2?"error":r>=900?"warn":r>=800?"info":"log"),eat(n,e.a),e.b&&G9e(t,n,e.b,"Exception: ",!0))}function Q(e,t){var n,r;return r=(!e.q&&(e.q=new Pr),cr(e.q,t)),r??(n=t.Sg(),De(n,4)&&(n==null?(!e.q&&(e.q=new Pr),ax(e.q,t)):(!e.q&&(e.q=new Pr),ki(e.q,t,n))),n)}function uo(){uo=U,y0=new oO("P1_CYCLE_BREAKING",0),vg=new oO("P2_LAYERING",1),bu=new oO("P3_NODE_ORDERING",2),_u=new oO("P4_NODE_PLACEMENT",3),mc=new oO("P5_EDGE_ROUTING",4)}function Zxn(e,t){hA();var n;if(e.c==t.c){if(e.b==t.b||a3n(e.b,t.b)){if(n=Dln(e.b)?1:-1,e.a&&!t.a)return n;if(!e.a&&t.a)return-n}return ru(e.b.g,t.b.g)}else return Yi(e.c,t.c)}function Ggt(e,t){var n,r,a;if(Gxe(e,t))return!0;for(r=new G(t);r.a=a||t<0)throw ue(new tc(Qfe+t+av+a));if(n>=a||n<0)throw ue(new tc(Jfe+n+av+a));return t!=n?r=(o=e.Cj(n),e.qj(t,o),o):r=e.xj(n),r}function Ygt(e){var t,n,r;if(r=e,e)for(t=0,n=e.Eh();n;n=n.Eh()){if(++t>ohe)return Ygt(n);if(r=n,n==e)throw ue(new nc("There is a cycle in the containment hierarchy of "+e))}return r}function Tb(e){var t,n,r;for(r=new Hm(Co,"[","]"),n=e.Kc();n.Ob();)t=n.Pb(),Jg(r,qe(t)===qe(e)?"(this Collection)":t==null?ul:xc(t));return r.a?r.e.length==0?r.a.a:r.a.a+(""+r.e):r.c}function Gxe(e,t){var n,r;if(r=!1,t.gc()<2)return!1;for(n=0;n1&&(e.j.b+=e.e)):(e.j.a+=n.a,e.j.b=b.Math.max(e.j.b,n.b),e.d.c.length>1&&(e.j.a+=e.e))}function Cb(){Cb=U,axt=he(le(Oo,1),au,64,0,[(Ct(),Qn),ar,Dr]),sxt=he(le(Oo,1),au,64,0,[ar,Dr,er]),oxt=he(le(Oo,1),au,64,0,[Dr,er,Qn]),cxt=he(le(Oo,1),au,64,0,[er,Qn,ar])}function t9n(e,t,n,r){var a,o,f,g,w,E,C;if(f=e.c.d,g=e.d.d,f.j!=g.j)for(C=e.b,a=f.j,w=null;a!=g.j;)w=t==0?$V(a):f8e(a),o=G8e(a,C.d[a.g],n),E=G8e(w,C.d[w.g],n),ui(r,Oi(o,E)),a=w}function n9n(e,t,n,r){var a,o,f,g,w;return f=Zdt(e.a,t,n),g=l(f.a,17).a,o=l(f.b,17).a,r&&(w=l(Q(t,(ft(),jl)),10),a=l(Q(n,jl),10),w&&a&&($ct(e.b,w,a),g+=e.b.i,o+=e.b.e)),g>o}function Qgt(e){var t,n,r,a,o,f,g,w,E;for(this.a=ydt(e),this.b=new bt,n=e,r=0,a=n.length;ruae(e.d).c?(e.i+=e.g.c,Yce(e.d)):uae(e.d).c>uae(e.g).c?(e.e+=e.d.c,Yce(e.g)):(e.i+=cst(e.g),e.e+=cst(e.d),Yce(e.g),Yce(e.d))}function a9n(e,t,n){var r,a,o,f;for(o=t.q,f=t.r,new Pm((J0(),qb),t,o,1),new Pm(qb,o,f,1),a=new G(n);a.ag&&(w=g/r),a>o&&(E=o/a),f=b.Math.min(w,E),e.a+=f*(t.a-e.a),e.b+=f*(t.b-e.b)}function l9n(e,t,n,r,a){var o,f;for(f=!1,o=l(jt(n.b,0),27);jAn(e,t,o,r,a)&&(f=!0,$8n(n,o),n.b.c.length!=0);)o=l(jt(n.b,0),27);return n.b.c.length==0&&UN(n.j,n),f&&lU(t.q),f}function h9n(e,t){h6();var n,r,a,o;if(t.b<2)return!1;for(o=Rr(t,0),n=l(Br(o),8),r=n;o.b!=o.d.c;){if(a=l(Br(o),8),Xue(e,r,a))return!0;r=a}return!!Xue(e,r,n)}function Wxe(e,t,n,r){var a,o;return n==0?(!e.o&&(e.o=new xl((su(),Cg),L2,e,0)),Uq(e.o,t,r)):(o=l(Mn((a=l(Kn(e,16),29),a||e.ii()),n),69),o.wk().Ak(e,Ku(e),n-yr(e.ii()),t,r))}function Nue(e,t){var n;t!=e.sb?(n=null,e.sb&&(n=l(e.sb,54).Th(e,1,RM,n)),t&&(n=l(t,54).Rh(e,1,RM,n)),n=a8e(e,t,n),n&&n.oj()):e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,4,t,t))}function f9n(e,t){var n,r,a,o;if(t)a=np(t,"x"),n=new HXe(e),aE(n.a,(nr(a),a)),o=np(t,"y"),r=new VXe(e),cE(r.a,(nr(o),o));else throw ue(new dd("All edge sections need an end point."))}function d9n(e,t){var n,r,a,o;if(t)a=np(t,"x"),n=new $Xe(e),oE(n.a,(nr(a),a)),o=np(t,"y"),r=new zXe(e),uE(r.a,(nr(o),o));else throw ue(new dd("All edge sections need a start point."))}function g9n(e,t){var n,r,a,o,f,g,w;for(r=_0t(e),o=0,g=r.length;o>22-t,a=e.h<>22-t):t<44?(n=0,r=e.l<>44-t):(n=0,r=0,a=e.l<e)throw ue(new Yn("k must be smaller than n"));return t==0||t==e?1:e==0?0:xxe(e)/(xxe(t)*xxe(e-t))}function Yxe(e,t){var n,r,a,o;for(n=new hye(e);n.g==null&&!n.c?H5e(n):n.g==null||n.i!=0&&l(n.g[n.i-1],51).Ob();)if(o=l(CU(n),58),De(o,167))for(r=l(o,167),a=0;a>4],t[n*2+1]=LY[o&15];return If(t,0,t.length)}function M9n(e){kH();var t,n,r;switch(r=e.c.length,r){case 0:return i6t;case 1:return t=l(Rpt(new G(e)),44),Edn(t.ld(),t.md());default:return n=l(j1(e,We(uv,XU,44,e.c.length,0,1)),173),new Wwe(n)}}function D9n(e){var t,n,r,a,o,f;for(t=new z5,n=new z5,gb(t,e),gb(n,e);n.b!=n.c;)for(a=l(X8(n),36),f=new G(a.a);f.a0&&lP(e,n,t),a):wEn(e,t,n)}function Sb(){Sb=U,uCt=(pi(),n9),lCt=Ev,sCt=kv,aCt=i7,oCt=Ub,iCt=r7,NIe=YB,cCt=S4,Jde=(uke(),KTt),Zde=WTt,BIe=JTt,ege=tCt,FIe=ZTt,RIe=eCt,PIe=YTt,qW=XTt,HW=QTt,FB=nCt,jIe=rCt,OIe=GTt}function spt(e,t){var n,r,a,o,f;if(e.e<=t||tbn(e,e.g,t))return e.g;for(o=e.r,r=e.g,f=e.r,a=(o-r)/2+r;r+11&&(e.e.b+=e.a)):(e.e.a+=n.a,e.e.b=b.Math.max(e.e.b,n.b),e.d.c.length>1&&(e.e.a+=e.a))}function B9n(e){var t,n,r,a;switch(a=e.i,t=a.b,r=a.j,n=a.g,a.a.g){case 0:n.a=(e.g.b.o.a-r.a)/2;break;case 1:n.a=t.d.n.a+t.d.a.a;break;case 2:n.a=t.d.n.a+t.d.a.a-r.a;break;case 3:n.b=t.d.n.b+t.d.a.b}}function F9n(e,t,n){var r,a,o;for(a=new hr(dr(sp(n).a.Kc(),new j));jr(a);)r=l(xr(a),18),!Do(r)&&!(!Do(r)&&r.c.i.c==r.d.i.c)&&(o=Y2t(e,r,n,new QQe),o.c.length>1&&$n(t.c,o))}function opt(e,t,n,r,a){if(rr&&(e.a=r),e.ba&&(e.b=a),e}function R9n(e){if(De(e,143))return pCn(l(e,143));if(De(e,233))return s5n(l(e,233));if(De(e,23))return b9n(l(e,23));throw ue(new Yn(vSe+Tb(new Il(he(le(wa,1),Rn,1,5,[e])))))}function j9n(e,t,n,r,a){var o,f,g;for(o=!0,f=0;f>>a|n[f+r+1]<>>a,++f}return o}function Zxe(e,t,n,r){var a,o,f;if(t.k==(Zn(),Aa)){for(o=new hr(dr(ka(t).a.Kc(),new j));jr(o);)if(a=l(xr(o),18),f=a.c.i.k,f==Aa&&e.c.a[a.c.i.c.p]==r&&e.c.a[t.c.p]==n)return!0}return!1}function $9n(e,t){var n,r,a,o;return t&=63,n=e.h&hp,t<22?(o=n>>>t,a=e.m>>t|n<<22-t,r=e.l>>t|e.m<<22-t):t<44?(o=0,a=n>>>t-22,r=e.m>>t-22|e.h<<44-t):(o=0,a=0,r=n>>>t-44),qu(r&eh,a&eh,o&hp)}function cpt(e,t,n,r){var a;this.b=r,this.e=e==(Iw(),oM),a=t[n],this.d=Lm(ih,[dt,pg],[183,28],16,[a.length,a.length],2),this.a=Lm(Vr,[dt,di],[53,28],15,[a.length,a.length],2),this.c=new Nxe(t,n)}function z9n(e){var t,n,r;for(e.k=new G5e((Ct(),he(le(Oo,1),au,64,0,[Pc,Qn,ar,Dr,er])).length,e.j.c.length),r=new G(e.j);r.a=n)return qE(e,t,r.p),!0;return!1}function o6(e,t,n,r){var a,o,f,g,w,E;for(f=n.length,o=0,a=-1,E=tht((Xn(t,e.length+1),e.substr(t)),(gae(),p_e)),g=0;go&&ggn(E,tht(n[g],p_e))&&(a=g,o=w);return a>=0&&(r[0]=t+o),a}function lpt(e){var t;return e.Db&64?Pue(e):(t=new Th(oSe),!e.a||hi(hi((t.a+=' "',t),e.a),'"'),hi(rw(hi(rw(hi(rw(hi(rw((t.a+=" (",t),e.i),","),e.j)," | "),e.g),","),e.f),")"),t.a)}function hpt(e,t,n){var r,a,o,f,g;for(g=Wu(e.e.Dh(),t),a=l(e.g,124),r=0,f=0;fn?u9e(e,n,"start index"):t<0||t>n?u9e(t,n,"end index"):KA("end index (%s) must not be less than start index (%s)",he(le(wa,1),Rn,1,5,[pt(t),pt(e)]))}function dpt(e,t){var n,r,a,o;for(r=0,a=e.length;r0&&gpt(e,o,n));t.p=0}function Xt(e){var t;this.c=new os,this.f=e.e,this.e=e.d,this.i=e.g,this.d=e.c,this.b=e.b,this.k=e.j,this.a=e.a,e.i?this.j=e.i:this.j=(t=l(K0(xg),9),new Zh(t,l(c0(t,t.length),9),0)),this.g=e.f}function K9n(e){var t,n,r,a;for(t=hb(hi(new Th("Predicates."),"and"),40),n=!0,a=new kr(e);a.b0?g[f-1]:We(wg,m2,10,0,0,1),a=g[f],E=f=0?e.ki(a):d9e(e,r);else throw ue(new Yn(Ob+r.xe()+kL));else throw ue(new Yn(f4t+t+d4t));else cf(e,n,r)}function e9e(e){var t,n;if(n=null,t=!1,De(e,211)&&(t=!0,n=l(e,211).a),t||De(e,263)&&(t=!0,n=""+l(e,263).a),t||De(e,493)&&(t=!0,n=""+l(e,493).a),!t)throw ue(new Qie(mSe));return n}function t9e(e,t,n){var r,a,o,f,g,w;for(w=Wu(e.e.Dh(),t),r=0,g=e.i,a=l(e.g,124),f=0;f=e.d.b.c.length&&(t=new yu(e.d),t.p=r.p-1,vt(e.d.b,t),n=new yu(e.d),n.p=r.p,vt(e.d.b,n)),Va(r,l(jt(e.d.b,r.p),30))}function i9e(e,t,n){var r,a,o;if(!e.b[t.g]){for(e.b[t.g]=!0,r=n,!r&&(r=new nN),ui(r.b,t),o=e.a[t.g].Kc();o.Ob();)a=l(o.Pb(),65),a.b!=t&&i9e(e,a.b,r),a.c!=t&&i9e(e,a.c,r),ui(r.a,a);return r}return null}function Q9n(e){switch(e.g){case 0:case 1:case 2:return Ct(),Qn;case 3:case 4:case 5:return Ct(),Dr;case 6:case 7:case 8:return Ct(),er;case 9:case 10:case 11:return Ct(),ar;default:return Ct(),Pc}}function J9n(e,t){var n;return e.c.length==0?!1:(n=I1t((Sn(0,e.c.length),l(e.c[0],18)).c.i),Sh(),n==(By(),G6)||n==U6?!0:W5(fc(new bn(null,new kn(e,16)),new Xee),new XYe(t)))}function jue(e,t){if(De(t,207))return Gln(e,l(t,27));if(De(t,193))return Kln(e,l(t,123));if(De(t,452))return Uln(e,l(t,166));throw ue(new Yn(vSe+Tb(new Il(he(le(wa,1),Rn,1,5,[t])))))}function ypt(e,t,n){var r,a;if(this.f=e,r=l(cr(e.b,t),260),a=r?r.a:0,k6e(n,a),n>=(a/2|0))for(this.e=r?r.c:null,this.d=a;n++0;)G6e(this);this.b=t,this.a=null}function Z9n(e,t){var n,r;t.a?OCn(e,t):(n=l(cse(e.b,t.b),60),n&&n==e.a[t.b.f]&&n.a&&n.a!=t.b.a&&n.c.Fc(t.b),r=l(ose(e.b,t.b),60),r&&e.a[r.f]==t.b&&r.a&&r.a!=t.b.a&&t.b.c.Fc(r),tae(e.b,t.b))}function xpt(e,t){var n,r;if(n=l(Qo(e.b,t),127),l(l($i(e.r,t),21),87).dc()){n.n.b=0,n.n.c=0;return}n.n.b=e.C.b,n.n.c=e.C.c,e.A.Hc((mh(),Cv))&&Kbt(e,t),r=_6n(e,t),Jue(e,t)==(t6(),Kb)&&(r+=2*e.w),n.a.a=r}function kpt(e,t){var n,r;if(n=l(Qo(e.b,t),127),l(l($i(e.r,t),21),87).dc()){n.n.d=0,n.n.a=0;return}n.n.d=e.C.d,n.n.a=e.C.a,e.A.Hc((mh(),Cv))&&Wbt(e,t),r=S6n(e,t),Jue(e,t)==(t6(),Kb)&&(r+=2*e.w),n.a.b=r}function ekn(e,t){var n,r,a,o;for(o=new bt,r=new G(t);r.ar&&(Xn(t-1,e.length),e.charCodeAt(t-1)<=32);)--t;return r>0||tn.a&&(r.Hc((Ym(),EM))?a=(t.a-n.a)/2:r.Hc(TM)&&(a=t.a-n.a)),t.b>n.b&&(r.Hc((Ym(),SM))?o=(t.b-n.b)/2:r.Hc(CM)&&(o=t.b-n.b)),Hxe(e,a,o)}function Lpt(e,t,n,r,a,o,f,g,w,E,C,L,B){De(e.Cb,90)&&zy(Yl(l(e.Cb,90)),4),Fu(e,n),e.f=f,LE(e,g),DE(e,w),AE(e,E),ME(e,C),u2(e,L),IE(e,B),c2(e,!0),i2(e,a),e.Zk(o),Gm(e,t),r!=null&&(e.i=null,xV(e,r))}function u9e(e,t,n){if(e<0)return KA(Swt,he(le(wa,1),Rn,1,5,[n,pt(e)]));if(t<0)throw ue(new Yn(_wt+t));return KA("%s (%s) must not be greater than size (%s)",he(le(wa,1),Rn,1,5,[n,pt(e),pt(t)]))}function l9e(e,t,n,r,a,o){var f,g,w,E;if(f=r-n,f<7){W4n(t,n,r,o);return}if(w=n+a,g=r+a,E=w+(g-w>>1),l9e(t,e,w,E,-a,o),l9e(t,e,E,g,-a,o),o.Ne(e[E-1],e[E])<=0){for(;n=0?e.bi(o,n):$9e(e,a,n);else throw ue(new Yn(Ob+a.xe()+kL));else throw ue(new Yn(f4t+t+d4t));else uf(e,r,a,n)}function Mpt(e){var t,n;if(e.f){for(;e.n>0;){if(t=l(e.k.Xb(e.n-1),76),n=t.Lk(),De(n,102)&&l(n,19).Bb&eu&&(!e.e||n.pk()!=oC||n.Lj()!=0)&&t.md()!=null)return!0;--e.n}return!1}else return e.n>0}function Dpt(e){var t,n,r,a;if(n=l(e,54)._h(),n)try{if(r=null,t=VE((ib(),Gf),bmt(a5n(n))),t&&(a=t.ai(),a&&(r=a.Fl(oun(n.e)))),r&&r!=e)return Dpt(r)}catch(o){if(o=bs(o),!De(o,63))throw ue(o)}return e}function bkn(e,t,n){var r,a,o;n.Ug("Remove overlaps",1),n.dh(t,yCe),r=l(at(t,(H5(),Y6)),27),e.f=r,e.a=sue(l(at(t,(Sb(),FB)),300)),a=Ge(at(t,(pi(),Ev))),_e(e,(nr(a),a)),o=Hy(r),Rvt(e,t,o,n),n.dh(t,OG)}function mkn(e){var t,n,r;if(Rt(Bt(at(e,(pi(),KB))))){for(r=new bt,n=new hr(dr(cp(e).a.Kc(),new j));jr(n);)t=l(xr(n),74),qw(t)&&Rt(Bt(at(t,Oge)))&&$n(r.c,t);return r}else return Cn(),Cn(),_o}function Ipt(e){if(!e)return MJe(),d6t;var t=e.valueOf?e.valueOf():e;if(t!==e){var n=_0e[typeof t];return n?n(t):Z7e(typeof t)}else return e instanceof Array||e instanceof b.Array?new Sz(e):new wk(e)}function Opt(e,t,n){var r,a,o;switch(o=e.o,r=l(Qo(e.p,n),252),a=r.i,a.b=nP(r),a.a=tP(r),a.b=b.Math.max(a.b,o.a),a.b>o.a&&!t&&(a.b=o.a),a.c=-(a.b-o.a)/2,n.g){case 1:a.d=-a.a;break;case 3:a.d=o.b}hle(r),fle(r)}function Npt(e,t,n){var r,a,o;switch(o=e.o,r=l(Qo(e.p,n),252),a=r.i,a.b=nP(r),a.a=tP(r),a.a=b.Math.max(a.a,o.b),a.a>o.b&&!t&&(a.a=o.b),a.d=-(a.a-o.b)/2,n.g){case 4:a.c=-a.b;break;case 2:a.c=o.a}hle(r),fle(r)}function vkn(e,t){var n,r,a,o,f;if(!t.dc()){if(a=l(t.Xb(0),131),t.gc()==1){hbt(e,a,a,1,0,t);return}for(n=1;n0)try{a=Oh(t,lo,Ii)}catch(o){throw o=bs(o),De(o,130)?(r=o,ue(new nV(r))):ue(o)}return n=(!e.a&&(e.a=new Pie(e)),e.a),a=0?l(Oe(n,a),58):null}function kkn(e,t){if(e<0)return KA(Swt,he(le(wa,1),Rn,1,5,["index",pt(e)]));if(t<0)throw ue(new Yn(_wt+t));return KA("%s (%s) must be less than size (%s)",he(le(wa,1),Rn,1,5,["index",pt(e),pt(t)]))}function Ekn(e){var t,n,r,a,o;if(e==null)return ul;for(o=new Hm(Co,"[","]"),n=e,r=0,a=n.length;r=0?e.Lh(n,!0,!0):Hw(e,a,!0),160)),l(r,220).Zl(t);else throw ue(new Yn(Ob+t.xe()+kL))}function g9e(e){var t,n;return e>-0x800000000000&&e<0x800000000000?e==0?0:(t=e<0,t&&(e=-e),n=ua(b.Math.floor(b.Math.log(e)/.6931471805599453)),(!t||e!=b.Math.pow(2,n))&&++n,n):Qft(Zc(e))}function Rkn(e){var t,n,r,a,o,f,g;for(o=new bd,n=new G(e);n.a2&&g.e.b+g.j.b<=2&&(a=g,r=f),o.a.zc(a,o),a.q=r);return o}function jkn(e,t,n){n.Ug("Eades radial",1),n.dh(t,OG),e.d=l(at(t,(H5(),Y6)),27),e.c=ze(Ge(at(t,(Sb(),HW)))),e.e=sue(l(at(t,FB),300)),e.a=g5n(l(at(t,jIe),434)),e.b=N8n(l(at(t,PIe),354)),b8n(e),n.dh(t,OG)}function $kn(e,t){if(t.Ug("Target Width Setter",1),P1(e,(z1(),fge)))Hi(e,(ug(),T4),Ge(at(e,fge)));else throw ue(new Vp("A target width has to be set if the TargetWidthWidthApproximator should be used."));t.Vg()}function jpt(e,t){var n,r,a;return r=new op(e),pc(r,t),rt(r,(ft(),aW),t),rt(r,(Nt(),Ms),(Ra(),Mu)),rt(r,Rd,(og(),tY)),x(r,(Zn(),Us)),n=new gu,Mc(n,r),la(n,(Ct(),er)),a=new gu,Mc(a,r),la(a,ar),r}function $pt(e){switch(e.g){case 0:return new Wie((Iw(),DB));case 1:return new Qre;case 2:return new Jre;default:throw ue(new Yn("No implementation is available for the crossing minimizer "+(e.f!=null?e.f:""+e.g)))}}function zpt(e,t){var n,r,a,o,f;for(e.c[t.p]=!0,vt(e.a,t),f=new G(t.j);f.a=o)f.$b();else for(a=f.Kc(),r=0;r0?Zwe():f<0&&Upt(e,t,-f),!0):!1}function tP(e){var t,n,r,a,o,f,g;if(g=0,e.b==0){for(f=_dt(e,!0),t=0,r=f,a=0,o=r.length;a0&&(g+=n,++t);t>1&&(g+=e.c*(t-1))}else g=qJe(cce(xy(Fi(c5e(e.a),new ja),new Ou)));return g>0?g+e.n.d+e.n.a:0}function nP(e){var t,n,r,a,o,f,g;if(g=0,e.b==0)g=qJe(cce(xy(Fi(c5e(e.a),new Xc),new Bc)));else{for(f=Adt(e,!0),t=0,r=f,a=0,o=r.length;a0&&(g+=n,++t);t>1&&(g+=e.c*(t-1))}return g>0?g+e.n.b+e.n.c:0}function Kkn(e){var t,n;if(e.c.length!=2)throw ue(new nc("Order only allowed for two paths."));t=(Sn(0,e.c.length),l(e.c[0],18)),n=(Sn(1,e.c.length),l(e.c[1],18)),t.d.i!=n.c.i&&(e.c.length=0,$n(e.c,n),$n(e.c,t))}function Gpt(e,t,n){var r;for(F5(n,t.g,t.f),Qh(n,t.i,t.j),r=0;r<(!t.a&&(t.a=new nt(Ai,t,10,11)),t.a).i;r++)Gpt(e,l(Oe((!t.a&&(t.a=new nt(Ai,t,10,11)),t.a),r),27),l(Oe((!n.a&&(n.a=new nt(Ai,n,10,11)),n.a),r),27))}function Wkn(e,t){var n,r,a,o;for(o=l(Qo(e.b,t),127),n=o.a,a=l(l($i(e.r,t),21),87).Kc();a.Ob();)r=l(a.Pb(),117),r.c&&(n.a=b.Math.max(n.a,j4e(r.c)));if(n.a>0)switch(t.g){case 2:o.n.c=e.s;break;case 4:o.n.b=e.s}}function Ykn(e,t){var n,r,a;return n=l(Q(t,(b0(),qx)),17).a-l(Q(e,qx),17).a,n==0?(r=ma(Ja(l(Q(e,(bb(),hB)),8)),l(Q(e,$L),8)),a=ma(Ja(l(Q(t,hB),8)),l(Q(t,$L),8)),Yi(r.a*r.b,a.a*a.b)):n}function Xkn(e,t){var n,r,a;return n=l(Q(t,(Hc(),RW)),17).a-l(Q(e,RW),17).a,n==0?(r=ma(Ja(l(Q(e,(Qi(),NB)),8)),l(Q(e,QT),8)),a=ma(Ja(l(Q(t,NB),8)),l(Q(t,QT),8)),Yi(r.a*r.b,a.a*a.b)):n}function Kpt(e){var t,n;return n=new tb,n.a+="e_",t=H3n(e),t!=null&&(n.a+=""+t),e.c&&e.d&&(hi((n.a+=" ",n),fU(e.c)),hi(wu((n.a+="[",n),e.c.i),"]"),hi((n.a+=Phe,n),fU(e.d)),hi(wu((n.a+="[",n),e.d.i),"]")),n.a}function Wpt(e){switch(e.g){case 0:return new aie;case 1:return new dk;case 2:return new sie;case 3:return new iie;default:throw ue(new Yn("No implementation is available for the layout phase "+(e.f!=null?e.f:""+e.g)))}}function m9e(e,t,n,r,a){var o;switch(o=0,a.g){case 1:o=b.Math.max(0,t.b+e.b-(n.b+r));break;case 3:o=b.Math.max(0,-e.b-r);break;case 2:o=b.Math.max(0,-e.a-r);break;case 4:o=b.Math.max(0,t.a+e.a-(n.a+r))}return o}function Qkn(e,t,n){var r,a,o,f,g;if(n)for(a=n.a.length,r=new Dm(a),g=(r.b-r.a)*r.c<0?(sb(),tm):new cb(r);g.Ob();)f=l(g.Pb(),17),o=Jk(n,f.a),hSe in o.a||Yfe in o.a?h_n(e,o,t):MIn(e,o,t),Lhn(l(cr(e.b,NE(o)),74))}function v9e(e){var t,n;switch(e.b){case-1:return!0;case 0:return n=e.t,n>1||n==-1?(e.b=-1,!0):(t=Of(e),t&&(Fo(),t.lk()==g5t)?(e.b=-1,!0):(e.b=1,!1));default:case 1:return!1}}function w9e(e,t){var n,r,a,o;if(Li(e),e.c!=0||e.a!=123)throw ue(new ri(ai((Jr(),B4t))));if(o=t==112,r=e.d,n=Nk(e.i,125,r),n<0)throw ue(new ri(ai((Jr(),F4t))));return a=tf(e.i,r,n),e.d=n+1,vlt(a,o,(e.e&512)==512)}function Ypt(e){var t,n,r,a,o,f,g;if(r=e.a.c.length,r>0)for(f=e.c.d,g=e.d.d,a=md(ma(new lt(g.a,g.b),f),1/(r+1)),o=new lt(f.a,f.b),n=new G(e.a);n.a=0&&r=0?e.Lh(n,!0,!0):Hw(e,a,!0),160)),l(r,220).Wl(t);throw ue(new Yn(Ob+t.xe()+$fe))}function tEn(){x3e();var e;return J_t?l(VE((ib(),Gf),Ff),2038):(wi(uv,new OI),XMn(),e=l(De(xu((ib(),Gf),Ff),560)?xu(Gf,Ff):new fat,560),J_t=!0,QIn(e),iOn(e),ki((y3e(),_Pe),e,new k1),rc(Gf,Ff,e),e)}function nEn(e,t){var n,r,a,o;e.j=-1,hh(e.e)?(n=e.i,o=e.i!=0,tN(e,t),r=new Zg(e.e,3,e.c,null,t,n,o),a=t.zl(e.e,e.c,null),a=Lgt(e,t,a),a?(a.nj(r),a.oj()):Ni(e.e,r)):(tN(e,t),a=t.zl(e.e,e.c,null),a&&a.oj())}function kU(e,t){var n,r,a;if(a=0,r=t[0],r>=e.length)return-1;for(n=(Xn(r,e.length),e.charCodeAt(r));n>=48&&n<=57&&(a=a*10+(n-48),++r,!(r>=e.length));)n=(Xn(r,e.length),e.charCodeAt(r));return r>t[0]?t[0]=r:a=-1,a}function rEn(e){var t,n,r,a,o;return a=l(e.a,17).a,o=l(e.b,17).a,n=a,r=o,t=b.Math.max(b.Math.abs(a),b.Math.abs(o)),a<=0&&a==o?(n=0,r=o-1):a==-t&&o!=t?(n=o,r=a,o>=0&&++n):(n=-o,r=a),new ca(pt(n),pt(r))}function iEn(e,t,n,r){var a,o,f,g,w,E;for(a=0;a=0&&E>=0&&w=e.i)throw ue(new tc(Qfe+t+av+e.i));if(n>=e.i)throw ue(new tc(Jfe+n+av+e.i));return r=e.g[n],t!=n&&(t>16),t=r>>16&16,n=16-t,e=e>>t,r=e-256,t=r>>16&8,n+=t,e<<=t,r=e-Xy,t=r>>16&4,n+=t,e<<=t,r=e-_d,t=r>>16&2,n+=t,e<<=t,r=e>>14,t=r&~(r>>1),n+2-t)}function aEn(e){tx();var t,n,r,a;for(wK=new bt,X0e=new Pr,Y0e=new bt,t=(!e.a&&(e.a=new nt(Ai,e,10,11)),e.a),XDn(t),a=new or(t);a.e!=a.i.gc();)r=l(gr(a),27),gc(wK,r,0)==-1&&(n=new bt,vt(Y0e,n),Z1t(r,n));return Y0e}function oEn(e,t,n){var r,a,o,f;e.a=n.b.d,De(t,326)?(a=l6(l(t,74),!1,!1),o=QN(a),r=new t_(e),to(o,r),dP(o,a),t.of((pi(),x3))!=null&&to(l(t.of(x3),75),r)):(f=l(t,422),f.rh(f.nh()+e.a.a),f.sh(f.oh()+e.a.b))}function cEn(e,t){var n,r,a;for(a=new bt,r=Rr(t.a,0);r.b!=r.d.c;)n=l(Br(r),65),n.c.g==e.g&&qe(Q(n.b,(Hc(),$d)))!==qe(Q(n.c,$d))&&!W5(new bn(null,new kn(a,16)),new cXe(n))&&$n(a.c,n);return Vs(a,new Mte),a}function Qpt(e,t,n){var r,a,o,f;return De(t,153)&&De(n,153)?(o=l(t,153),f=l(n,153),e.a[o.a][f.a]+e.a[f.a][o.a]):De(t,250)&&De(n,250)&&(r=l(t,250),a=l(n,250),r.a==a.a)?l(Q(a.a,(b0(),qx)),17).a:0}function Jpt(e,t){var n,r,a,o,f,g,w,E;for(E=ze(Ge(Q(t,(Nt(),tM)))),w=e[0].n.a+e[0].o.a+e[0].d.c+E,g=1;g=0?n:(g=eA(ma(new lt(f.c+f.b/2,f.d+f.a/2),new lt(o.c+o.b/2,o.d+o.a/2))),-(Tmt(o,f)-1)*g)}function lEn(e,t,n){var r;Is(new bn(null,(!n.a&&(n.a=new nt(cs,n,6,6)),new kn(n.a,16))),new dtt(e,t)),Is(new bn(null,(!n.n&&(n.n=new nt(ec,n,1,7)),new kn(n.n,16))),new gtt(e,t)),r=l(at(n,(pi(),x3)),75),r&&k7e(r,e,t)}function Hw(e,t,n){var r,a,o;if(o=g6((El(),io),e.Dh(),t),o)return Fo(),l(o,69).xk()||(o=rx(ic(io,o))),a=(r=e.Ih(o),l(r>=0?e.Lh(r,!0,!0):Hw(e,o,!0),160)),l(a,220).Sl(t,n);throw ue(new Yn(Ob+t.xe()+$fe))}function y9e(e,t,n,r){var a,o,f,g,w;if(a=e.d[t],a){if(o=a.g,w=a.i,r!=null){for(g=0;g=n&&(r=t,E=(w.c+w.a)/2,f=E-n,w.c<=E-n&&(a=new vae(w.c,f),pw(e,r++,a)),g=E+n,g<=w.a&&(o=new vae(g,w.a),Ey(r,e.c.length),x_(e.c,r,o)))}function t2t(e,t,n){var r,a,o,f,g,w;if(!t.dc()){for(a=new os,w=t.Kc();w.Ob();)for(g=l(w.Pb(),40),ki(e.a,pt(g.g),pt(n)),f=(r=Rr(new Hg(g).a.d,0),new C5(r));QI(f.a);)o=l(Br(f.a),65).c,Cs(a,o,a.c.b,a.c);t2t(e,a,n+1)}}function x9e(e){var t;if(!e.c&&e.g==null)e.d=e.bj(e.f),qr(e,e.d),t=e.d;else{if(e.g==null)return!0;if(e.i==0)return!1;t=l(e.g[e.i-1],51)}return t==e.b&&null.Vm>=null.Um()?(CU(e),x9e(e)):t.Ob()}function n2t(e){if(this.a=e,e.c.i.k==(Zn(),Us))this.c=e.c,this.d=l(Q(e.c.i,(ft(),Wc)),64);else if(e.d.i.k==Us)this.c=e.d,this.d=l(Q(e.d.i,(ft(),Wc)),64);else throw ue(new Yn("Edge "+e+" is not an external edge."))}function r2t(e,t){var n,r,a;a=e.b,e.b=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,3,a,e.b)),t?t!=e&&(Fu(e,t.zb),Qoe(e,t.d),n=(r=t.c,r??t.zb),Zoe(e,n==null||vn(n,t.zb)?null:n)):(Fu(e,null),Qoe(e,0),Zoe(e,null))}function i2t(e,t){var n;this.e=(ww(),Xr(e),ww(),P8e(e)),this.c=(Xr(t),P8e(t)),Tye(this.e.Rd().dc()==this.c.Rd().dc()),this.d=w1t(this.e),this.b=w1t(this.c),n=Lm(wa,[dt,Rn],[5,1],5,[this.e.Rd().gc(),this.c.Rd().gc()],2),this.a=n,jwn(this)}function s2t(e){!C0e&&(C0e=cIn());var t=e.replace(/[\x00-\x1f\xad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200b-\u200f\u2028-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb"\\]/g,function(n){return f2n(n)});return'"'+t+'"'}function k9e(e,t,n,r,a,o){var f,g,w,E,C;if(a!=0)for(qe(e)===qe(n)&&(e=e.slice(t,t+a),t=0),w=n,g=t,E=t+a;g=f)throw ue(new my(t,f));return a=n[t],f==1?r=null:(r=We(epe,r0e,424,f-1,0,1),pu(n,0,r,0,t),o=f-t-1,o>0&&pu(n,t+1,r,t,o)),PE(e,r),Apt(e,t,a),a}function o2t(e){var t,n;if(e.f){for(;e.n0?o=gx(n):o=BN(gx(n))),Hi(t,VT,o)}function mEn(e,t){var n;t.Ug("Partition preprocessing",1),n=l(yc(Fi(Dc(Fi(new bn(null,new kn(e.a,16)),new AZ),new LZ),new wj),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[(Fl(),Ec)]))),15),Is(n.Oc(),new t8),t.Vg()}function vEn(e,t){var n,r,a,o,f;for(f=e.j,t.a!=t.b&&Vs(f,new kS),a=f.c.length/2|0,r=0;r0&&lP(e,n,t),o):r.a!=null?(lP(e,t,n),-1):a.a!=null?(lP(e,n,t),1):0}function yEn(e,t){var n,r,a,o,f;for(a=t.b.b,e.a=We(mf,Qy,15,a,0,1),e.b=We(ih,pg,28,a,16,1),f=Rr(t.b,0);f.b!=f.d.c;)o=l(Br(f),40),e.a[o.g]=new os;for(r=Rr(t.a,0);r.b!=r.d.c;)n=l(Br(r),65),e.a[n.b.g].Fc(n),e.a[n.c.g].Fc(n)}function h2t(e,t){var n,r,a,o;e.Pj()?(n=e.Ej(),o=e.Qj(),++e.j,e.qj(n,e.Zi(n,t)),r=e.Ij(3,null,t,n,o),e.Mj()?(a=e.Nj(t,null),a?(a.nj(r),a.oj()):e.Jj(r)):e.Jj(r)):(tat(e,t),e.Mj()&&(a=e.Nj(t,null),a&&a.oj()))}function E9e(e,t,n){var r,a,o;e.Pj()?(o=e.Qj(),IN(e,t,n),r=e.Ij(3,null,n,t,o),e.Mj()?(a=e.Nj(n,null),e.Tj()&&(a=e.Uj(n,a)),a?(a.nj(r),a.oj()):e.Jj(r)):e.Jj(r)):(IN(e,t,n),e.Mj()&&(a=e.Nj(n,null),a&&a.oj()))}function EU(e,t){var n,r,a,o,f;for(f=Wu(e.e.Dh(),t),a=new X2,n=l(e.g,124),o=e.i;--o>=0;)r=n[o],f.am(r.Lk())&&qr(a,r);!awt(e,a)&&hh(e.e)&&xk(e,t.Jk()?db(e,6,t,(Cn(),_o),null,-1,!1):db(e,t.tk()?2:1,t,null,null,-1,!1))}function xEn(e,t){var n,r,a,o,f;return e.a==(zE(),VL)?!0:(o=t.a.c,n=t.a.c+t.a.b,!(t.j&&(r=t.A,f=r.c.c.a-r.o.a/2,a=o-(r.n.a+r.o.a),a>f)||t.q&&(r=t.C,f=r.c.c.a-r.o.a/2,a=r.n.a-n,a>f)))}function f2t(e){foe();var t,n,r,a,o,f,g;for(n=new e2,a=new G(e.e.b);a.a1?e.e*=ze(e.a):e.f/=ze(e.a),Hyn(e),Y5n(e),GSn(e),rt(e.b,(IA(),vK),e.g)}function b2t(e,t,n){var r,a,o,f,g,w;for(r=0,w=n,t||(r=n*(e.c.length-1),w*=-1),o=new G(e);o.a=0?e.Ah(null):e.Ph().Th(e,-1-t,null,null)),e.Bh(l(a,54),n),r&&r.oj(),e.vh()&&e.wh()&&n>-1&&Ni(e,new _a(e,9,n,o,a)),a):o}function S9e(e,t){var n,r,a,o,f;for(o=e.b.Ce(t),r=(n=e.a.get(o),n??We(wa,Rn,1,0,5,1)),f=0;f>5,a>=e.d)return e.e<0;if(n=e.a[a],t=1<<(t&31),e.e<0){if(r=Mft(e),a>16)),15).dd(o),g0&&(!(Ug(e.a.c)&&t.n.d)&&!(B5(e.a.c)&&t.n.b)&&(t.g.d+=b.Math.max(0,r/2-.5)),!(Ug(e.a.c)&&t.n.a)&&!(B5(e.a.c)&&t.n.c)&&(t.g.a-=r-1))}function C2t(e){var t,n,r,a,o;if(a=new bt,o=ymt(e,a),t=l(Q(e,(ft(),jl)),10),t)for(r=new G(t.j);r.a>t,o=e.m>>t|n<<22-t,a=e.l>>t|e.m<<22-t):t<44?(f=r?hp:0,o=n>>t-22,a=e.m>>t-22|n<<44-t):(f=r?hp:0,o=r?eh:0,a=n>>t-44),qu(a&eh,o&eh,f&hp)}function Gue(e){var t,n,r,a,o,f;for(this.c=new bt,this.d=e,r=gs,a=gs,t=ia,n=ia,f=Rr(e,0);f.b!=f.d.c;)o=l(Br(f),8),r=b.Math.min(r,o.a),a=b.Math.min(a,o.b),t=b.Math.max(t,o.a),n=b.Math.max(n,o.b);this.a=new ef(r,a,t-r,n-a)}function _2t(e,t){var n,r,a,o,f,g;for(o=new G(e.b);o.a0&&De(t,44)&&(e.a._j(),E=l(t,44),w=E.ld(),o=w==null?0:es(w),f=Qye(e.a,o),n=e.a.d[f],n)){for(r=l(n.g,379),C=n.i,g=0;g=2)for(n=a.Kc(),t=Ge(n.Pb());n.Ob();)o=t,t=Ge(n.Pb()),r=b.Math.min(r,(nr(t),t-(nr(o),o)));return r}function HEn(e,t){var n,r,a;for(a=new bt,r=Rr(t.a,0);r.b!=r.d.c;)n=l(Br(r),65),n.b.g==e.g&&!vn(n.b.c,DG)&&qe(Q(n.b,(Hc(),$d)))!==qe(Q(n.c,$d))&&!W5(new bn(null,new kn(a,16)),new uXe(n))&&$n(a.c,n);return Vs(a,new Nte),a}function VEn(e,t){var n,r,a;if(qe(t)===qe(Xr(e)))return!0;if(!De(t,15)||(r=l(t,15),a=e.gc(),a!=r.gc()))return!1;if(De(r,59)){for(n=0;n0&&(a=n),f=new G(e.f.e);f.a0?(t-=1,n-=1):r>=0&&a<0?(t+=1,n+=1):r>0&&a>=0?(t-=1,n+=1):(t+=1,n-=1),new ca(pt(t),pt(n))}function iTn(e,t){return e.ct.c?1:e.bt.b?1:e.a!=t.a?es(e.a)-es(t.a):e.d==(oA(),uM)&&t.d==cM?-1:e.d==cM&&t.d==uM?1:0}function N2t(e,t){var n,r,a,o,f;return o=t.a,o.c.i==t.b?f=o.d:f=o.c,o.c.i==t.b?r=o.c:r=o.d,a=S5n(e.a,f,r),a>0&&a0):a<0&&-a0):!1}function sTn(e,t,n,r){var a,o,f,g,w,E,C,L;for(a=(t-e.d)/e.c.c.length,o=0,e.a+=n,e.d=t,L=new G(e.c);L.a>24;return f}function oTn(e){if(e.ze()){var t=e.c;t.Ae()?e.o="["+t.n:t.ze()?e.o="["+t.xe():e.o="[L"+t.xe()+";",e.b=t.we()+"[]",e.k=t.ye()+"[]";return}var n=e.j,r=e.d;r=r.split("/"),e.o=Xce(".",[n,Xce("$",r)]),e.b=Xce(".",[n,Xce(".",r)]),e.k=r[r.length-1]}function cTn(e,t){var n,r,a,o,f;for(f=null,o=new G(e.e.a);o.a=0;t-=2)for(n=0;n<=t;n+=2)(e.b[n]>e.b[n+2]||e.b[n]===e.b[n+2]&&e.b[n+1]>e.b[n+3])&&(r=e.b[n+2],e.b[n+2]=e.b[n],e.b[n]=r,r=e.b[n+3],e.b[n+3]=e.b[n+1],e.b[n+1]=r);e.c=!0}}function hTn(e,t){var n,r,a,o,f,g,w,E,C;for(E=-1,C=0,f=e,g=0,w=f.length;g0&&++C;++E}return C}function g0(e){var t,n;return n=new Th(_m(e.Rm)),n.a+="@",hi(n,(t=es(e)>>>0,t.toString(16))),e.Vh()?(n.a+=" (eProxyURI: ",wu(n,e._h()),e.Kh()&&(n.a+=" eClass: ",wu(n,e.Kh())),n.a+=")"):e.Kh()&&(n.a+=" (eClass: ",wu(n,e.Kh()),n.a+=")"),n.a}function HA(e){var t,n,r,a;if(e.e)throw ue(new nc((Gg(R0e),phe+R0e.k+bhe)));for(e.d==(Js(),J1)&&UU(e,uc),n=new G(e.a.a);n.a>24}return n}function gTn(e,t,n){var r,a,o;if(a=l(Qo(e.i,t),314),!a)if(a=new yht(e.d,t,n),Q8(e.i,t,a),$8e(t))vhn(e.a,t.c,t.b,a);else switch(o=Q9n(t),r=l(Qo(e.p,o),252),o.g){case 1:case 3:a.j=!0,Xie(r,t.b,a);break;case 4:case 2:a.k=!0,Xie(r,t.c,a)}return a}function pTn(e,t){var n,r,a,o,f,g,w,E,C;for(w=eg(e.c-e.b&e.a.length-1),E=null,C=null,o=new nA(e);o.a!=o.b;)a=l(FV(o),10),n=(g=l(Q(a,(ft(),o1)),12),g?g.i:null),r=(f=l(Q(a,$f),12),f?f.i:null),(E!=n||C!=r)&&(m2t(w,t),E=n,C=r),$n(w.c,a);m2t(w,t)}function bTn(e,t,n,r){var a,o,f,g,w,E;if(g=new X2,w=Wu(e.e.Dh(),t),a=l(e.g,124),Fo(),l(t,69).xk())for(f=0;f=0)return a;for(o=1,g=new G(t.j);g.a=0)return a;for(o=1,g=new G(t.j);g.a0&&t.Ne((Sn(a-1,e.c.length),l(e.c[a-1],10)),o)>0;)rf(e,a,(Sn(a-1,e.c.length),l(e.c[a-1],10))),--a;Sn(a,e.c.length),e.c[a]=o}n.a=new Pr,n.b=new Pr}function mTn(e,t,n){var r,a,o,f,g,w,E,C;for(C=(r=l(t.e&&t.e(),9),new Zh(r,l(c0(r,r.length),9),0)),w=Gy(n,"[\\[\\]\\s,]+"),o=w,f=0,g=o.length;f=0?(t||(t=new h_,r>0&&Xo(t,(Ga(0,r,e.length),e.substr(0,r)))),t.a+="\\",Uk(t,n&Zs)):t&&Uk(t,n&Zs);return t?t.a:e}function wTn(e){var t,n,r;for(n=new G(e.a.a.b);n.a0&&(!(Ug(e.a.c)&&t.n.d)&&!(B5(e.a.c)&&t.n.b)&&(t.g.d-=b.Math.max(0,r/2-.5)),!(Ug(e.a.c)&&t.n.a)&&!(B5(e.a.c)&&t.n.c)&&(t.g.a+=b.Math.max(0,r-1)))}function H2t(e,t,n){var r,a;if((e.c-e.b&e.a.length-1)==2)t==(Ct(),Qn)||t==ar?(uV(l(wA(e),15),(Ih(),kg)),uV(l(wA(e),15),Gb)):(uV(l(wA(e),15),(Ih(),Gb)),uV(l(wA(e),15),kg));else for(a=new nA(e);a.a!=a.b;)r=l(FV(a),15),uV(r,n)}function yTn(e,t){var n,r,a,o,f,g,w;for(a=$k(new ywe(e)),g=new Ua(a,a.c.length),o=$k(new ywe(t)),w=new Ua(o,o.c.length),f=null;g.b>0&&w.b>0&&(n=(mr(g.b>0),l(g.a.Xb(g.c=--g.b),27)),r=(mr(w.b>0),l(w.a.Xb(w.c=--w.b),27)),n==r);)f=n;return f}function V2t(e,t,n){var r,a,o,f;Uot(e,t)>Uot(e,n)?(r=Oc(n,(Ct(),ar)),e.d=r.dc()?0:Tae(l(r.Xb(0),12)),f=Oc(t,er),e.b=f.dc()?0:Tae(l(f.Xb(0),12))):(a=Oc(n,(Ct(),er)),e.d=a.dc()?0:Tae(l(a.Xb(0),12)),o=Oc(t,ar),e.b=o.dc()?0:Tae(l(o.Xb(0),12)))}function U2t(e,t){var n,r,a,o;for(n=e.o.a,o=l(l($i(e.r,t),21),87).Kc();o.Ob();)a=l(o.Pb(),117),a.e.a=n*ze(Ge(a.b.of(pK))),a.e.b=(r=a.b,r.pf((pi(),rh))?r.ag()==(Ct(),Qn)?-r.Mf().b-ze(Ge(r.of(rh))):ze(Ge(r.of(rh))):r.ag()==(Ct(),Qn)?-r.Mf().b:0)}function xTn(e,t){var n,r,a,o;for(t.Ug("Self-Loop pre-processing",1),r=new G(e.a);r.ae.c));f++)a.a>=e.s&&(o<0&&(o=f),g=f);return w=(e.s+e.c)/2,o>=0&&(r=u_n(e,t,o,g),w=oln((Sn(r,t.c.length),l(t.c[r],339))),gEn(t,r,n)),w}function Wr(e,t,n){var r,a,o,f,g,w,E;for(f=(o=new CI,o),g7e(f,(nr(t),t)),E=(!f.b&&(f.b=new dh((Tn(),No),Yc,f)),f.b),w=1;w0&&sMn(this,a)}function F9e(e,t,n,r,a,o){var f,g,w;if(!a[t.a]){for(a[t.a]=!0,f=r,!f&&(f=new KH),vt(f.e,t),w=o[t.a].Kc();w.Ob();)g=l(w.Pb(),290),!(g.d==n||g.c==n)&&(g.c!=t&&F9e(e,g.c,t,f,a,o),g.d!=t&&F9e(e,g.d,t,f,a,o),vt(f.c,g),ra(f.d,g.b));return f}return null}function TTn(e){var t,n,r,a,o,f,g;for(t=0,a=new G(e.e);a.a=2}function CTn(e,t,n,r,a){var o,f,g,w,E,C;for(o=e.c.d.j,f=l(ff(n,0),8),C=1;C1||(t=rs(E0,he(le(Ko,1),it,95,0,[mp,T0])),yN(NH(t,e))>1)||(r=rs(S0,he(le(Ko,1),it,95,0,[Eg,qf])),yN(NH(r,e))>1))}function R9e(e,t,n){var r,a,o;for(o=new G(e.t);o.a0&&(r.b.n-=r.c,r.b.n<=0&&r.b.u>0&&ui(t,r.b));for(a=new G(e.i);a.a0&&(r.a.u-=r.c,r.a.u<=0&&r.a.n>0&&ui(n,r.a))}function CU(e){var t,n,r,a,o;if(e.g==null&&(e.d=e.bj(e.f),qr(e,e.d),e.c))return o=e.f,o;if(t=l(e.g[e.i-1],51),a=t.Pb(),e.e=t,n=e.bj(a),n.Ob())e.d=n,qr(e,n);else for(e.d=null;!t.Ob()&&(Ts(e.g,--e.i,null),e.i!=0);)r=l(e.g[e.i-1],51),t=r;return a}function _Tn(e,t){var n,r,a,o,f,g;if(r=t,a=r.Lk(),up(e.e,a)){if(a.Si()&&qH(e,a,r.md()))return!1}else for(g=Wu(e.e.Dh(),a),n=l(e.g,124),o=0;o1||n>1)return 2;return t+n==1?2:0}function Jl(e,t){var n,r,a,o,f,g;return o=e.a*hhe+e.b*1502,g=e.b*hhe+11,n=b.Math.floor(g*MP),o+=n,g-=n*cEe,o%=cEe,e.a=o,e.b=g,t<=24?b.Math.floor(e.a*m_e[t]):(a=e.a*(1<=2147483648&&(r-=4294967296),r)}function X2t(e,t,n){var r,a,o,f,g,w,E;for(o=new bt,E=new os,f=new os,YAn(e,E,f,t),_Mn(e,E,f,t,n),w=new G(e);w.ar.b.g&&$n(o.c,r);return o}function OTn(e,t,n){var r,a,o,f,g,w;for(g=e.c,f=(n.q?n.q:(Cn(),Cn(),mg)).vc().Kc();f.Ob();)o=l(f.Pb(),44),r=!_k(Fi(new bn(null,new kn(g,16)),new Wl(new att(t,o)))).Bd((Am(),zx)),r&&(w=o.md(),De(w,4)&&(a=H8e(w),a!=null&&(w=a)),t.qf(l(o.ld(),149),w))}function NTn(e,t,n){var r,a;if(qO(e.b),X0(e.b,(PN(),WW),(b_(),qB)),X0(e.b,YW,t.g),X0(e.b,XW,t.a),e.a=bP(e.b,t),n.Ug("Compaction by shrinking a tree",e.a.c.length),t.i.c.length>1)for(a=new G(e.a);a.a=0?e.Lh(r,!0,!0):Hw(e,o,!0),160)),l(a,220).Xl(t,n)}else throw ue(new Yn(Ob+t.xe()+kL))}function SU(e,t){var n,r,a,o,f;if(t){for(o=De(e.Cb,90)||De(e.Cb,102),f=!o&&De(e.Cb,331),r=new or((!t.a&&(t.a=new G_(t,Wo,t)),t.a));r.e!=r.i.gc();)if(n=l(gr(r),89),a=jU(n),o?De(a,90):f?De(a,156):a)return a;return o?(Tn(),Kf):(Tn(),td)}else return null}function PTn(e,t){var n,r,a,o;for(t.Ug("Resize child graph to fit parent.",1),r=new G(e.b);r.a=2*t&&vt(n,new vae(f[r-1]+t,f[r]-t));return n}function RTn(e,t,n){var r,a,o,f,g,w,E,C;if(n)for(o=n.a.length,r=new Dm(o),g=(r.b-r.a)*r.c<0?(sb(),tm):new cb(r);g.Ob();)f=l(g.Pb(),17),a=Jk(n,f.a),a&&(w=gmn(e,(E=(rb(),C=new jwe,C),t&&z9e(E,t),E),a),fE(w,Yg(a,Pd)),mU(a,w),h9e(a,w),wce(e,a,w))}function _U(e){var t,n,r,a,o,f;if(!e.j){if(f=new IS,t=qM,o=t.a.zc(e,t),o==null){for(r=new or(dc(e));r.e!=r.i.gc();)n=l(gr(r),29),a=_U(n),As(f,a),qr(f,n);t.a.Bc(e)!=null}Iy(f),e.j=new N5((l(Oe(tt((lb(),Vn).o),11),19),f.i),f.g),Yl(e).b&=-33}return e.j}function jTn(e){var t,n,r,a;if(e==null)return null;if(r=Tu(e,!0),a=eB.length,vn(r.substr(r.length-a,a),eB)){if(n=r.length,n==4){if(t=(Xn(0,r.length),r.charCodeAt(0)),t==43)return KPe;if(t==45)return wAt}else if(n==3)return KPe}return new Awe(r)}function $Tn(e){var t,n,r;return n=e.l,n&n-1||(r=e.m,r&r-1)||(t=e.h,t&t-1)||t==0&&r==0&&n==0?-1:t==0&&r==0&&n!=0?i7e(n):t==0&&r!=0&&n==0?i7e(r)+22:t!=0&&r==0&&n==0?i7e(t)+44:-1}function u6(e,t){var n,r,a,o,f;for(a=t.a&e.f,o=null,r=e.b[a];;r=r.b){if(r==t){o?o.b=t.b:e.b[a]=t.b;break}o=r}for(f=t.f&e.f,o=null,n=e.c[f];;n=n.d){if(n==t){o?o.d=t.d:e.c[f]=t.d;break}o=n}t.e?t.e.c=t.c:e.a=t.c,t.c?t.c.e=t.e:e.e=t.e,--e.i,++e.g}function zTn(e,t){var n;t.d?t.d.b=t.b:e.a=t.b,t.b?t.b.d=t.d:e.e=t.d,!t.e&&!t.c?(n=l(Lf(l(ax(e.b,t.a),260)),260),n.a=0,++e.c):(n=l(Lf(l(cr(e.b,t.a),260)),260),--n.a,t.e?t.e.c=t.c:n.b=l(Lf(t.c),511),t.c?t.c.e=t.e:n.c=l(Lf(t.e),511)),--e.d}function qTn(e){var t,n,r,a,o,f,g,w,E,C;for(n=e.o,t=e.p,f=Ii,a=lo,g=Ii,o=lo,E=0;E0),o.a.Xb(o.c=--o.b),by(o,a),mr(o.b3&&ag(e,0,t-3))}function VTn(e){var t,n,r,a;return qe(Q(e,(Nt(),p4)))===qe((rp(),A2))?!e.e&&qe(Q(e,TB))!==qe((vE(),vB)):(r=l(Q(e,Z1e),299),a=Rt(Bt(Q(e,ede)))||qe(Q(e,JL))===qe((dA(),mB)),t=l(Q(e,SMe),17).a,n=e.a.c.length,!a&&r!=(vE(),vB)&&(t==0||t>n))}function UTn(e){var t,n;for(n=0;n0);n++);if(n>0&&n0);t++);return t>0&&n>16!=6&&t){if(FE(e,t))throw ue(new Yn(EL+d2t(e)));r=null,e.Cb&&(r=(n=e.Db>>16,n>=0?lxe(e,r):e.Cb.Th(e,-1-n,null,r))),t&&(r=mx(t,e,6,r)),r=Wye(e,t,r),r&&r.oj()}else e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,6,t,t))}function AU(e,t){var n,r;if(t!=e.Cb||e.Db>>16!=3&&t){if(FE(e,t))throw ue(new Yn(EL+evt(e)));r=null,e.Cb&&(r=(n=e.Db>>16,n>=0?gxe(e,r):e.Cb.Th(e,-1-n,null,r))),t&&(r=mx(t,e,12,r)),r=Yye(e,t,r),r&&r.oj()}else e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,3,t,t))}function z9e(e,t){var n,r;if(t!=e.Cb||e.Db>>16!=9&&t){if(FE(e,t))throw ue(new Yn(EL+Jbt(e)));r=null,e.Cb&&(r=(n=e.Db>>16,n>=0?fxe(e,r):e.Cb.Th(e,-1-n,null,r))),t&&(r=mx(t,e,9,r)),r=Xye(e,t,r),r&&r.oj()}else e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,9,t,t))}function UE(e){var t,n,r,a,o;if(r=Of(e),o=e.j,o==null&&r)return e.Jk()?null:r.ik();if(De(r,156)){if(n=r.jk(),n&&(a=n.wi(),a!=e.i)){if(t=l(r,156),t.nk())try{e.g=a.ti(t,o)}catch(f){if(f=bs(f),De(f,82))e.g=null;else throw ue(f)}e.i=a}return e.g}return null}function ebt(e){var t;return t=new bt,vt(t,new B8(new lt(e.c,e.d),new lt(e.c+e.b,e.d))),vt(t,new B8(new lt(e.c,e.d),new lt(e.c,e.d+e.a))),vt(t,new B8(new lt(e.c+e.b,e.d+e.a),new lt(e.c+e.b,e.d))),vt(t,new B8(new lt(e.c+e.b,e.d+e.a),new lt(e.c,e.d+e.a))),t}function GTn(e){var t,n,r;if(e==null)return ul;try{return xc(e)}catch(a){if(a=bs(a),De(a,103))return t=a,r=_m(bh(e))+"@"+(n=(Vg(),q8e(e)>>>0),n.toString(16)),a6n(U3n(),(Dk(),"Exception during lenientFormat for "+r),t),"<"+r+" threw "+_m(t.Rm)+">";throw ue(a)}}function KTn(e,t,n){var r,a,o;for(o=t.a.ec().Kc();o.Ob();)a=l(o.Pb(),74),r=l(cr(e.b,a),272),!r&&(ds(cg(a))==ds(Eb(a))?NCn(e,a,n):cg(a)==ds(Eb(a))?cr(e.c,a)==null&&cr(e.b,Eb(a))!=null&&Ivt(e,a,n,!1):cr(e.d,a)==null&&cr(e.b,cg(a))!=null&&Ivt(e,a,n,!0))}function WTn(e,t){var n,r,a,o,f,g,w;for(a=e.Kc();a.Ob();)for(r=l(a.Pb(),10),g=new gu,Mc(g,r),la(g,(Ct(),ar)),rt(g,(ft(),oW),(Hn(),!0)),f=t.Kc();f.Ob();)o=l(f.Pb(),10),w=new gu,Mc(w,o),la(w,er),rt(w,oW,!0),n=new Tw,rt(n,oW,!0),po(n,g),Fa(n,w)}function YTn(e,t,n,r){var a,o,f,g;a=R1t(e,t,n),o=R1t(e,n,t),f=l(cr(e.c,t),118),g=l(cr(e.c,n),118),a1)for(t=hw((n=new Sm,++e.b,n),e.d),g=Rr(o,0);g.b!=g.d.c;)f=l(Br(g),125),p0(s0(i0(a0(r0(new _f,1),0),t),f))}function JTn(e,t,n){var r,a,o,f,g;for(n.Ug("Breaking Point Removing",1),e.a=l(Q(t,(Nt(),bp)),223),o=new G(t.b);o.a>16!=11&&t){if(FE(e,t))throw ue(new Yn(EL+oke(e)));r=null,e.Cb&&(r=(n=e.Db>>16,n>=0?pxe(e,r):e.Cb.Th(e,-1-n,null,r))),t&&(r=mx(t,e,10,r)),r=s4e(e,t,r),r&&r.oj()}else e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,11,t,t))}function ZTn(e){var t,n,r,a;for(r=new qm(new Sr(e.b).a);r.b;)n=Nw(r),a=l(n.ld(),12),t=l(n.md(),10),rt(t,(ft(),zi),a),rt(a,jl,t),rt(a,xB,(Hn(),!0)),la(a,l(Q(t,Wc),64)),Q(t,Wc),rt(a.i,(Nt(),Ms),(Ra(),sC)),l(Q(eo(a.i),Lu),21).Fc((Ho(),$T))}function eCn(e,t,n){var r,a,o,f,g,w;if(o=0,f=0,e.c)for(w=new G(e.d.i.j);w.ao.a?-1:a.aw){for(C=e.d,e.d=We(vPe,_Se,66,2*w+4,0,1),o=0;o=9223372036854776e3?(iE(),WSe):(a=!1,e<0&&(a=!0,e=-e),r=0,e>=Zm&&(r=ua(e/Zm),e-=r*Zm),n=0,e>=Lx&&(n=ua(e/Lx),e-=n*Lx),t=ua(e),o=qu(t,n,r),a&&yce(o),o)}function hCn(e){var t,n,r,a,o;if(o=new bt,Vu(e.b,new Jd(o)),e.b.c.length=0,o.c.length!=0){for(t=(Sn(0,o.c.length),l(o.c[0],82)),n=1,r=o.c.length;n=-t&&r==t?new ca(pt(n-1),pt(r)):new ca(pt(n),pt(r-1))}function rbt(){return vo(),he(le(EOn,1),it,81,0,[PAe,IAe,D6,f1e,eLe,DK,zK,l4,JAe,HAe,XAe,u4,ZAe,$Ae,tLe,SAe,PK,d1e,LK,RK,rLe,FK,_Ae,QAe,iLe,jK,nLe,MK,FAe,WAe,KAe,qK,MAe,AK,OK,LAe,LT,UAe,zAe,YAe,zL,OAe,DAe,GAe,qAe,NK,$K,AAe,BK,VAe,IK,RAe,BAe,gB,_K,jAe,NAe])}function gCn(e,t,n){e.d=0,e.b=0,t.k==(Zn(),Au)&&n.k==Au&&l(Q(t,(ft(),zi)),10)==l(Q(n,zi),10)&&($oe(t).j==(Ct(),Qn)?V2t(e,t,n):V2t(e,n,t)),t.k==Au&&n.k==Aa?$oe(t).j==(Ct(),Qn)?e.d=1:e.b=1:n.k==Au&&t.k==Aa&&($oe(n).j==(Ct(),Qn)?e.b=1:e.d=1),J6n(e,t,n)}function pCn(e){var t,n,r,a,o,f,g,w,E,C,L;return L=jxe(e),t=e.a,w=t!=null,w&&zk(L,"category",e.a),a=ZI(new br(e.d)),f=!a,f&&(E=new $p,e1(L,"knownOptions",E),n=new oQe(E),to(new br(e.d),n)),o=ZI(e.g),g=!o,g&&(C=new $p,e1(L,"supportedFeatures",C),r=new cQe(C),to(e.g,r)),L}function bCn(e){var t,n,r,a,o,f,g,w,E;for(r=!1,t=336,n=0,o=new Grt(e.length),g=e,w=0,E=g.length;w>16!=7&&t){if(FE(e,t))throw ue(new Yn(EL+lpt(e)));r=null,e.Cb&&(r=(n=e.Db>>16,n>=0?hxe(e,r):e.Cb.Th(e,-1-n,null,r))),t&&(r=l(t,54).Rh(e,1,oF,r)),r=J4e(e,t,r),r&&r.oj()}else e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,7,t,t))}function ibt(e,t){var n,r;if(t!=e.Cb||e.Db>>16!=3&&t){if(FE(e,t))throw ue(new Yn(EL+c1t(e)));r=null,e.Cb&&(r=(n=e.Db>>16,n>=0?dxe(e,r):e.Cb.Th(e,-1-n,null,r))),t&&(r=l(t,54).Rh(e,0,uF,r)),r=Z4e(e,t,r),r&&r.oj()}else e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,3,t,t))}function Que(e,t){GE();var n,r,a,o,f,g,w,E,C;return t.d>e.d&&(g=e,e=t,t=g),t.d<63?iSn(e,t):(f=(e.d&-2)<<4,E=v6e(e,f),C=v6e(t,f),r=mle(e,sx(E,f)),a=mle(t,sx(C,f)),w=Que(E,C),n=Que(r,a),o=Que(mle(E,r),mle(a,C)),o=Tle(Tle(o,w),n),o=sx(o,f),w=sx(w,f<<1),Tle(Tle(w,o),n))}function p2(){p2=U,gde=new M5(cyt,0),fDe=new M5("LONGEST_PATH",1),dDe=new M5("LONGEST_PATH_SOURCE",2),dde=new M5("COFFMAN_GRAHAM",3),hDe=new M5($he,4),gDe=new M5("STRETCH_WIDTH",5),CW=new M5("MIN_WIDTH",6),WT=new M5("BF_MODEL_ORDER",7),YT=new M5("DF_MODEL_ORDER",8)}function vCn(e,t,n){var r,a,o,f,g;for(f=TA(e,n),g=We(wg,m2,10,t.length,0,1),r=0,o=f.Kc();o.Ob();)a=l(o.Pb(),12),Rt(Bt(Q(a,(ft(),xB))))&&(g[r++]=l(Q(a,jl),10));if(r=0;o+=n?1:-1)f=f|t.c.lg(w,o,n,r&&!Rt(Bt(Q(t.j,(ft(),jb))))&&!Rt(Bt(Q(t.j,(ft(),j6))))),f=f|t.q.ug(w,o,n),f=f|Ubt(e,w[o],n,r);return na(e.c,t),f}function DU(e,t,n){var r,a,o,f,g,w,E,C,L,B;for(C=Tct(e.j),L=0,B=C.length;L1&&(e.a=!0),Qdn(l(n.b,68),Oi(Ja(l(t.b,68).c),md(ma(Ja(l(n.b,68).a),l(t.b,68).a),a))),Dot(e,t),sbt(e,n)}function abt(e){var t,n,r,a,o,f,g;for(o=new G(e.a.a);o.a0&&o>0?f.p=t++:r>0?f.p=n++:o>0?f.p=a++:f.p=n++}Cn(),Vs(e.j,new W9)}function ECn(e){var t,n;n=null,t=l(jt(e.g,0),18);do{if(n=t.d.i,ns(n,(ft(),$f)))return l(Q(n,$f),12).i;if(n.k!=(Zn(),Ps)&&jr(new hr(dr(qs(n).a.Kc(),new j))))t=l(xr(new hr(dr(qs(n).a.Kc(),new j))),18);else if(n.k!=Ps)return null}while(n&&n.k!=(Zn(),Ps));return n}function TCn(e,t){var n,r,a,o,f,g,w,E,C;for(g=t.j,f=t.g,w=l(jt(g,g.c.length-1),113),C=(Sn(0,g.c.length),l(g.c[0],113)),E=vue(e,f,w,C),o=1;oE&&(w=n,C=a,E=r);t.a=C,t.c=w}function CCn(e,t,n){var r,a,o,f,g,w,E;for(E=new Kp(new UYe(e)),f=he(le(F8t,1),I3t,12,0,[t,n]),g=0,w=f.length;gw-e.b&&gw-e.a&&g0?o.a?(g=o.b.Mf().a,n>g&&(a=(n-g)/2,o.d.b=a,o.d.c=a)):o.d.c=e.s+n:W_(e.u)&&(r=$xe(o.b),r.c<0&&(o.d.b=-r.c),r.c+r.b>o.b.Mf().a&&(o.d.c=r.c+r.b-o.b.Mf().a))}function qCn(e,t){var n,r,a,o,f;f=new bt,n=t;do o=l(cr(e.b,n),131),o.B=n.c,o.D=n.d,$n(f.c,o),n=l(cr(e.k,n),18);while(n);return r=(Sn(0,f.c.length),l(f.c[0],131)),r.j=!0,r.A=l(r.d.a.ec().Kc().Pb(),18).c.i,a=l(jt(f,f.c.length-1),131),a.q=!0,a.C=l(a.d.a.ec().Kc().Pb(),18).d.i,f}function HCn(e){var t,n;if(t=l(e.a,17).a,n=l(e.b,17).a,t>=0){if(t==n)return new ca(pt(-t-1),pt(-t-1));if(t==-n)return new ca(pt(-t),pt(n+1))}return b.Math.abs(t)>b.Math.abs(n)?t<0?new ca(pt(-t),pt(n)):new ca(pt(-t),pt(n+1)):new ca(pt(t+1),pt(n))}function VCn(e){var t,n;n=l(Q(e,(Nt(),Qu)),171),t=l(Q(e,(ft(),hv)),311),n==(hf(),$b)?(rt(e,Qu,EB),rt(e,hv,(ep(),F6))):n==d4?(rt(e,Qu,EB),rt(e,hv,(ep(),Ux))):t==(ep(),F6)?(rt(e,Qu,$b),rt(e,hv,wB)):t==Ux&&(rt(e,Qu,d4),rt(e,hv,wB))}function IU(){IU=U,IB=new pte,XEt=fi(new Xs,(uo(),bu),(vo(),LK)),ZEt=yl(fi(new Xs,bu,FK),mc,BK),eTt=Td(Td(v_(yl(fi(new Xs,y0,zK),mc,$K),_u),jK),qK),QEt=yl(fi(fi(fi(new Xs,vg,DK),_u,OK),_u,LT),mc,IK),JEt=yl(fi(fi(new Xs,_u,LT),_u,AK),mc,_K)}function GA(){GA=U,rTt=fi(yl(new Xs,(uo(),mc),(vo(),RAe)),bu,LK),oTt=Td(Td(v_(yl(fi(new Xs,y0,zK),mc,$K),_u),jK),qK),iTt=yl(fi(fi(fi(new Xs,vg,DK),_u,OK),_u,LT),mc,IK),aTt=fi(fi(new Xs,bu,FK),mc,BK),sTt=yl(fi(fi(new Xs,_u,LT),_u,AK),mc,_K)}function UCn(e,t,n,r,a){var o,f;(!Do(t)&&t.c.i.c==t.d.i.c||!uft(Ic(he(le(Ea,1),dt,8,0,[a.i.n,a.n,a.a])),n))&&!Do(t)&&(t.c==a?Pk(t.a,0,new Eo(n)):ui(t.a,new Eo(n)),r&&!W0(e.a,n)&&(f=l(Q(t,(Nt(),cc)),75),f||(f=new bl,rt(t,cc,f)),o=new Eo(n),Cs(f,o,f.c.b,f.c),na(e.a,o)))}function ubt(e,t){var n,r,a,o;for(o=Yr(mo(fg,ig(Yr(mo(t==null?0:es(t),dg)),15))),n=o&e.b.length-1,a=null,r=e.b[n];r;a=r,r=r.a)if(r.d==o&&yd(r.i,t))return a?a.a=r.a:e.b[n]=r.a,RJe(l(Lf(r.c),604),l(Lf(r.f),604)),WI(l(Lf(r.b),227),l(Lf(r.e),227)),--e.f,++e.e,!0;return!1}function GCn(e){var t,n;for(n=new hr(dr(ka(e).a.Kc(),new j));jr(n);)if(t=l(xr(n),18),t.c.i.k!=(Zn(),cu))throw ue(new Vp(jhe+HN(e)+"' has its layer constraint set to FIRST, but has at least one incoming edge that does not come from a FIRST_SEPARATE node. That must not happen."))}function KCn(e,t,n){var r,a,o,f,g,w,E;if(a=d1t(e.Db&254),a==0)e.Eb=n;else{if(a==1)g=We(wa,Rn,1,2,5,1),o=mue(e,t),o==0?(g[0]=n,g[1]=e.Eb):(g[0]=e.Eb,g[1]=n);else for(g=We(wa,Rn,1,a+1,5,1),f=jm(e.Eb),r=2,w=0,E=0;r<=128;r<<=1)r==t?g[E++]=n:e.Db&r&&(g[E++]=f[w++]);e.Eb=g}e.Db|=t}function lbt(e,t,n){var r,a,o,f;for(this.b=new bt,a=0,r=0,f=new G(e);f.a0&&(o=l(jt(this.b,0),176),a+=o.o,r+=o.p),a*=2,r*=2,t>1?a=ua(b.Math.ceil(a*t)):r=ua(b.Math.ceil(r/t)),this.a=new I8e(a,r)}function hbt(e,t,n,r,a,o){var f,g,w,E,C,L,B,z,V,J,te,fe;for(C=r,t.j&&t.o?(z=l(cr(e.f,t.A),60),J=z.d.c+z.d.b,--C):J=t.a.c+t.a.b,L=a,n.q&&n.o?(z=l(cr(e.f,n.C),60),E=z.d.c,++L):E=n.a.c,te=E-J,w=b.Math.max(2,L-C),g=te/w,V=J+g,B=C;B=0;f+=a?1:-1){for(g=t[f],w=r==(Ct(),ar)?a?Oc(g,r):lf(Oc(g,r)):a?lf(Oc(g,r)):Oc(g,r),o&&(e.c[g.p]=w.gc()),L=w.Kc();L.Ob();)C=l(L.Pb(),12),e.d[C.p]=E++;ra(n,w)}}function dbt(e,t,n){var r,a,o,f,g,w,E,C;for(o=ze(Ge(e.b.Kc().Pb())),E=ze(Ge(V3n(t.b))),r=md(Ja(e.a),E-n),a=md(Ja(t.a),n-o),C=Oi(r,a),md(C,1/(E-o)),this.a=C,this.b=new bt,g=!0,f=e.b.Kc(),f.Pb();f.Ob();)w=ze(Ge(f.Pb())),g&&w-n>wfe&&(this.b.Fc(n),g=!1),this.b.Fc(w);g&&this.b.Fc(n)}function WCn(e){var t,n,r,a;if(f_n(e,e.n),e.d.c.length>0){for(u_(e.c);L9e(e,l(re(new G(e.e.a)),125))>5,t&=31,r>=e.d)return e.e<0?(Cd(),w6t):(Cd(),BL);if(o=e.d-r,a=We(Vr,di,28,o+1,15,1),j9n(a,o,e.a,r,t),e.e<0){for(n=0;n0&&e.a[n]<<32-t){for(n=0;n=0?!1:(n=g6((El(),io),a,t),n?(r=n.Ik(),(r>1||r==-1)&&kw(ic(io,n))!=3):!0)):!1}function JCn(e,t,n,r){var a,o,f,g,w;return g=bc(l(Oe((!t.b&&(t.b=new Ln(_r,t,4,7)),t.b),0),84)),w=bc(l(Oe((!t.c&&(t.c=new Ln(_r,t,5,8)),t.c),0),84)),ds(g)==ds(w)||Ly(w,g)?null:(f=WO(t),f==n?r:(o=l(cr(e.a,f),10),o&&(a=o.e,a)?a:null))}function ZCn(e,t,n){var r,a,o,f,g;for(n.Ug("Longest path to source layering",1),e.a=t,g=e.a.a,e.b=We(Vr,di,28,g.c.length,15,1),r=0,f=new G(g);f.a0&&(n[0]+=e.d,f-=n[0]),n[2]>0&&(n[2]+=e.d,f-=n[2]),o=b.Math.max(0,f),n[1]=b.Math.max(n[1],f),y6e(e,$u,a.c+r.b+n[0]-(n[1]-f)/2,n),t==$u&&(e.c.b=o,e.c.c=a.c+r.b+(o-f)/2)}function Ebt(){this.c=We(Na,Zo,28,(Ct(),he(le(Oo,1),au,64,0,[Pc,Qn,ar,Dr,er])).length,15,1),this.b=We(Na,Zo,28,he(le(Oo,1),au,64,0,[Pc,Qn,ar,Dr,er]).length,15,1),this.a=We(Na,Zo,28,he(le(Oo,1),au,64,0,[Pc,Qn,ar,Dr,er]).length,15,1),E3e(this.c,gs),E3e(this.b,ia),E3e(this.a,ia)}function Eu(e,t,n){var r,a,o,f;if(t<=n?(a=t,o=n):(a=n,o=t),r=0,e.b==null)e.b=We(Vr,di,28,2,15,1),e.b[0]=a,e.b[1]=o,e.c=!0;else{if(r=e.b.length,e.b[r-1]+1==a){e.b[r-1]=o;return}f=We(Vr,di,28,r+2,15,1),pu(e.b,0,f,0,r),e.b=f,e.b[r-1]>=a&&(e.c=!1,e.a=!1),e.b[r++]=a,e.b[r]=o,e.c||c6(e)}}function sSn(e,t,n){var r,a,o,f,g,w,E;for(E=t.d,e.a=new Bu(E.c.length),e.c=new Pr,g=new G(E);g.a=0?e.Lh(E,!1,!0):Hw(e,n,!1),61));e:for(o=L.Kc();o.Ob();){for(a=l(o.Pb(),58),C=0;C1;)Vy(a,a.i-1);return r}function Cbt(e,t){var n,r,a,o,f,g,w;for(n=new z5,o=new G(e.b);o.ae.d[f.p]&&(n+=f6e(e.b,o),gb(e.a,pt(o)));for(;!l_(e.a);)U6e(e.b,l(X8(e.a),17).a)}return n}function hSn(e){var t,n,r,a,o,f,g,w,E;for(e.a=new i4e,E=0,a=0,r=new G(e.i.b);r.ag.d&&(C=g.d+g.a+E));n.c.d=C,t.a.zc(n,t),w=b.Math.max(w,n.c.d+n.c.a)}return w}function Ho(){Ho=U,eW=new uy("COMMENTS",0),vf=new uy("EXTERNAL_PORTS",1),UL=new uy("HYPEREDGES",2),tW=new uy("HYPERNODES",3),$T=new uy("NON_FREE_PORTS",4),B6=new uy("NORTH_SOUTH_PORTS",5),GL=new uy(X3t,6),RT=new uy("CENTER_LABELS",7),jT=new uy("END_LABELS",8),nW=new uy("PARTITIONS",9)}function dSn(e,t,n,r,a){return r<0?(r=o6(e,a,he(le(zt,1),dt,2,6,[$le,zle,qle,Hle,_x,Vle,Ule,Gle,Kle,Wle,Yle,Xle]),t),r<0&&(r=o6(e,a,he(le(zt,1),dt,2,6,["Jan","Feb","Mar","Apr",_x,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),t)),r<0?!1:(n.k=r,!0)):r>0?(n.k=r-1,!0):!1}function gSn(e,t,n,r,a){return r<0?(r=o6(e,a,he(le(zt,1),dt,2,6,[$le,zle,qle,Hle,_x,Vle,Ule,Gle,Kle,Wle,Yle,Xle]),t),r<0&&(r=o6(e,a,he(le(zt,1),dt,2,6,["Jan","Feb","Mar","Apr",_x,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),t)),r<0?!1:(n.k=r,!0)):r>0?(n.k=r-1,!0):!1}function pSn(e,t,n,r,a,o){var f,g,w,E;if(g=32,r<0){if(t[0]>=e.length||(g=co(e,t[0]),g!=43&&g!=45)||(++t[0],r=kU(e,t),r<0))return!1;g==45&&(r=-r)}return g==32&&t[0]-n==2&&a.b==2&&(w=new Qz,E=w.q.getFullYear()-Lb+Lb-80,f=E%100,o.a=r==f,r+=(E/100|0)*100+(r=0?kb(e):J_(kb(r2(e)))),FL[t]=Aq(l0(e,t),0)?kb(l0(e,t)):J_(kb(r2(l0(e,t)))),e=mo(e,5);for(;t=E&&(w=r);w&&(C=b.Math.max(C,w.a.o.a)),C>B&&(L=E,B=C)}return L}function xSn(e){var t,n,r,a,o,f,g;for(o=new Kp(l(Xr(new Wh),50)),g=ia,n=new G(e.d);n.akyt?Vs(w,e.b):r<=kyt&&r>Eyt?Vs(w,e.d):r<=Eyt&&r>Tyt?Vs(w,e.c):r<=Tyt&&Vs(w,e.a),o=Mbt(e,w,o);return a}function Dbt(e,t,n,r){var a,o,f,g,w,E;for(a=(r.c+r.a)/2,Ch(t.j),ui(t.j,a),Ch(n.e),ui(n.e,a),E=new QJe,g=new G(e.f);g.a1,g&&(r=new lt(a,n.b),ui(t.a,r)),fA(t.a,he(le(Ea,1),dt,8,0,[B,L]))}function J9e(e,t,n){var r,a;for(t=48;n--)GM[n]=n-48<<24>>24;for(r=70;r>=65;r--)GM[r]=r-65+10<<24>>24;for(a=102;a>=97;a--)GM[a]=a-97+10<<24>>24;for(o=0;o<10;o++)LY[o]=48+o&Zs;for(e=10;e<=15;e++)LY[e]=65+e-10&Zs}function CSn(e,t){t.Ug("Process graph bounds",1),rt(e,(Qi(),Bde),fO(uce(xy(new bn(null,new kn(e.b,16)),new zte)))),rt(e,Fde,fO(uce(xy(new bn(null,new kn(e.b,16)),new qte)))),rt(e,rIe,fO(cce(xy(new bn(null,new kn(e.b,16)),new Hte)))),rt(e,iIe,fO(cce(xy(new bn(null,new kn(e.b,16)),new Vte)))),t.Vg()}function SSn(e){var t,n,r,a,o;a=l(Q(e,(Nt(),bv)),21),o=l(Q(e,xW),21),n=new lt(e.f.a+e.d.b+e.d.c,e.f.b+e.d.d+e.d.a),t=new Eo(n),a.Hc((mh(),A4))&&(r=l(Q(e,qT),8),o.Hc((Zl(),aC))&&(r.a<=0&&(r.a=20),r.b<=0&&(r.b=20)),t.a=b.Math.max(n.a,r.a),t.b=b.Math.max(n.b,r.b)),Rt(Bt(Q(e,ade)))||nLn(e,n,t)}function _Sn(e,t){var n,r,a,o;for(o=Oc(t,(Ct(),Dr)).Kc();o.Ob();)r=l(o.Pb(),12),n=l(Q(r,(ft(),jl)),10),n&&p0(s0(i0(a0(r0(new _f,0),.1),e.i[t.p].d),e.i[n.p].a));for(a=Oc(t,Qn).Kc();a.Ob();)r=l(a.Pb(),12),n=l(Q(r,(ft(),jl)),10),n&&p0(s0(i0(a0(r0(new _f,0),.1),e.i[n.p].d),e.i[t.p].a))}function Zue(e){var t,n,r,a,o,f;if(!e.c){if(f=new Qc,t=qM,o=t.a.zc(e,t),o==null){for(r=new or(du(e));r.e!=r.i.gc();)n=l(gr(r),89),a=jU(n),De(a,90)&&As(f,Zue(l(a,29))),qr(f,n);t.a.Bc(e)!=null,t.a.gc()==0}k5n(f),Iy(f),e.c=new N5((l(Oe(tt((lb(),Vn).o),15),19),f.i),f.g),Yl(e).b&=-33}return e.c}function eke(e){var t;if(e.c!=10)throw ue(new ri(ai((Jr(),VG))));switch(t=e.a,t){case 110:t=10;break;case 114:t=13;break;case 116:t=9;break;case 92:case 124:case 46:case 94:case 45:case 63:case 42:case 43:case 123:case 125:case 40:case 41:case 91:case 93:break;default:throw ue(new ri(ai((Jr(),bf))))}return t}function Pbt(e){var t,n,r,a,o;if(e.l==0&&e.m==0&&e.h==0)return"0";if(e.h==SP&&e.m==0&&e.l==0)return"-9223372036854775808";if(e.h>>19)return"-"+Pbt(xE(e));for(n=e,r="";!(n.l==0&&n.m==0&&n.h==0);){if(a=Loe(JU),n=Nke(n,a,!0),t=""+rZe(Nb),!(n.l==0&&n.m==0&&n.h==0))for(o=9-t.length;o>0;o--)t="0"+t;r=t+r}return r}function ASn(e){var t,n,r,a,o,f,g;for(t=!1,n=0,a=new G(e.d.b);a.a=e.a||!Bxe(t,n))return-1;if(Zk(l(r.Kb(t),20)))return 1;for(a=0,f=l(r.Kb(t),20).Kc();f.Ob();)if(o=l(f.Pb(),18),w=o.c.i==t?o.d.i:o.c.i,g=tke(e,w,n,r),g==-1||(a=b.Math.max(a,g),a>e.c-1))return-1;return a+1}function Bbt(e,t){var n,r,a,o,f,g;if(qe(t)===qe(e))return!0;if(!De(t,15)||(r=l(t,15),g=e.gc(),r.gc()!=g))return!1;if(f=r.Kc(),e.Yi()){for(n=0;n0){if(e._j(),t!=null){for(o=0;o>24;case 97:case 98:case 99:case 100:case 101:case 102:return e-97+10<<24>>24;case 65:case 66:case 67:case 68:case 69:case 70:return e-65+10<<24>>24;default:throw ue(new gd("Invalid hexadecimal"))}}function PU(){PU=U,j_e=new L5("SPIRAL",0),P_e=new L5("LINE_BY_LINE",1),B_e=new L5("MANHATTAN",2),N_e=new L5("JITTER",3),z0e=new L5("QUADRANTS_LINE_BY_LINE",4),R_e=new L5("QUADRANTS_MANHATTAN",5),F_e=new L5("QUADRANTS_JITTER",6),O_e=new L5("COMBINE_LINE_BY_LINE_MANHATTAN",7),I_e=new L5("COMBINE_JITTER_MANHATTAN",8)}function Rbt(e,t,n,r){var a,o,f,g,w,E;for(w=Tue(e,n),E=Tue(t,n),a=!1;w&&E&&(r||C7n(w,E,n));)f=Tue(w,n),g=Tue(E,n),uN(t),uN(e),o=w.c,Cle(w,!1),Cle(E,!1),n?(Fy(t,E.p,o),t.p=E.p,Fy(e,w.p+1,o),e.p=w.p):(Fy(e,w.p,o),e.p=w.p,Fy(t,E.p+1,o),t.p=E.p),Va(w,null),Va(E,null),w=f,E=g,a=!0;return a}function jbt(e){switch(e.g){case 0:return new Gre;case 1:return new XS;case 3:return new fet;case 4:return new zee;case 5:return new zrt;case 6:return new jI;case 2:return new YS;case 7:return new az;case 8:return new RI;default:throw ue(new Yn("No implementation is available for the layerer "+(e.f!=null?e.f:""+e.g)))}}function NSn(e,t,n,r){var a,o,f,g,w;for(a=!1,o=!1,g=new G(r.j);g.a=t.length)throw ue(new tc("Greedy SwitchDecider: Free layer not in graph."));this.c=t[e],this.e=new IO(r),ice(this.e,this.c,(Ct(),er)),this.i=new IO(r),ice(this.i,this.c,ar),this.f=new ist(this.c),this.a=!o&&a.i&&!a.s&&this.c[0].k==(Zn(),Us),this.a&&W9n(this,e,t.length)}function zbt(e,t){var n,r,a,o,f,g;o=!e.B.Hc((Zl(),sF)),f=e.B.Hc(Gge),e.a=new _1t(f,o,e.c),e.n&&O5e(e.a.n,e.n),Xie(e.g,(t1(),$u),e.a),t||(r=new DA(1,o,e.c),r.n.a=e.k,Q8(e.p,(Ct(),Qn),r),a=new DA(1,o,e.c),a.n.d=e.k,Q8(e.p,Dr,a),g=new DA(0,o,e.c),g.n.c=e.k,Q8(e.p,er,g),n=new DA(0,o,e.c),n.n.b=e.k,Q8(e.p,ar,n))}function BSn(e){var t,n,r;switch(t=l(Q(e.d,(Nt(),bp)),223),t.g){case 2:n=TIn(e);break;case 3:n=(r=new bt,Is(Fi(fc(Dc(Dc(new bn(null,new kn(e.d.b,16)),new dee),new gee),new pee),new wS),new xYe(r)),r);break;default:throw ue(new nc("Compaction not supported for "+t+" edges."))}GLn(e,n),to(new br(e.g),new wYe(e))}function FSn(e,t){var n,r,a,o,f,g,w;if(t.Ug("Process directions",1),n=l(Q(e,(Hc(),y3)),88),n!=(Js(),Q1))for(a=Rr(e.b,0);a.b!=a.d.c;){switch(r=l(Br(a),40),g=l(Q(r,(Qi(),PB)),17).a,w=l(Q(r,BB),17).a,n.g){case 4:w*=-1;break;case 1:o=g,g=w,w=o;break;case 2:f=g,g=-w,w=f}rt(r,PB,pt(g)),rt(r,BB,pt(w))}t.Vg()}function RSn(e,t){var n;return n=new Bs,t&&pc(n,l(cr(e.a,oF),96)),De(t,422)&&pc(n,l(cr(e.a,cF),96)),De(t,366)?(pc(n,l(cr(e.a,ec),96)),n):(De(t,84)&&pc(n,l(cr(e.a,_r),96)),De(t,207)?(pc(n,l(cr(e.a,Ai),96)),n):De(t,193)?(pc(n,l(cr(e.a,Hl),96)),n):(De(t,326)&&pc(n,l(cr(e.a,js),96)),n))}function jSn(e){var t,n,r,a,o,f,g,w;for(w=new xut,g=new G(e.a);g.a0&&t=0)return!1;if(t.p=n.b,vt(n.e,t),a==(Zn(),Aa)||a==Au){for(f=new G(t.j);f.ae.d[g.p]&&(n+=f6e(e.b,o),gb(e.a,pt(o)))):++f;for(n+=e.b.d*f;!l_(e.a);)U6e(e.b,l(X8(e.a),17).a)}return n}function Qbt(e){var t,n,r,a,o,f;return o=0,t=Of(e),t.kk()&&(o|=4),e.Bb&Sl&&(o|=2),De(e,102)?(n=l(e,19),a=Ro(n),n.Bb&eu&&(o|=32),a&&(yr(ky(a)),o|=8,f=a.t,(f>1||f==-1)&&(o|=16),a.Bb&eu&&(o|=64)),n.Bb&Io&&(o|=r4),o|=m0):De(t,469)?o|=512:(r=t.kk(),r&&r.i&1&&(o|=256)),e.Bb&512&&(o|=128),o}function QSn(e,t){var n;return e.f==spe?(n=kw(ic((El(),io),t)),e.e?n==4&&t!=(kx(),u9)&&t!=(kx(),c9)&&t!=(kx(),ape)&&t!=(kx(),ope):n==2):e.d&&(e.d.Hc(t)||e.d.Hc(rx(ic((El(),io),t)))||e.d.Hc(g6((El(),io),e.b,t)))?!0:e.f&&q9e((El(),e.f),HO(ic(io,t)))?(n=kw(ic(io,t)),e.e?n==4:n==2):!1}function JSn(e){var t,n,r,a,o,f,g,w,E,C,L,B,z;for(B=-1,z=0,E=e,C=0,L=E.length;C0&&++z;++B}return z}function ZSn(e,t,n,r){var a,o,f,g,w,E,C,L;return f=l(at(n,(pi(),n9)),8),w=f.a,C=f.b+e,a=b.Math.atan2(C,w),a<0&&(a+=iv),a+=t,a>iv&&(a-=iv),g=l(at(r,n9),8),E=g.a,L=g.b+e,o=b.Math.atan2(L,E),o<0&&(o+=iv),o+=t,o>iv&&(o-=iv),A1(),f0(1e-10),b.Math.abs(a-o)<=1e-10||a==o||isNaN(a)&&isNaN(o)?0:ao?1:uw(isNaN(a),isNaN(o))}function nle(e){var t,n,r,a,o,f,g;for(g=new Pr,r=new G(e.a.b);r.a=e.o)throw ue(new Bwe);g=t>>5,f=t&31,o=l0(1,Yr(l0(f,1))),a?e.n[n][g]=Q0(e.n[n][g],o):e.n[n][g]=va(e.n[n][g],O4e(o)),o=l0(o,1),r?e.n[n][g]=Q0(e.n[n][g],o):e.n[n][g]=va(e.n[n][g],O4e(o))}catch(w){throw w=bs(w),De(w,333)?ue(new tc(Ehe+e.o+"*"+e.p+The+t+Co+n+Che)):ue(w)}}function n_n(e,t,n,r){var a,o,f,g,w,E,C,L,B;for(B=new Kp(new VYe(e)),g=he(le(wg,1),m2,10,0,[t,n]),w=0,E=g.length;w0&&(r=(!e.n&&(e.n=new nt(ec,e,1,7)),l(Oe(e.n,0),135)).a,!r||hi(hi((t.a+=' "',t),r),'"'))),hi(rw(hi(rw(hi(rw(hi(rw((t.a+=" (",t),e.i),","),e.j)," | "),e.g),","),e.f),")"),t.a)}function Jbt(e){var t,n,r;return e.Db&64?Pue(e):(t=new Th(uSe),n=e.k,n?hi(hi((t.a+=' "',t),n),'"'):(!e.n&&(e.n=new nt(ec,e,1,7)),e.n.i>0&&(r=(!e.n&&(e.n=new nt(ec,e,1,7)),l(Oe(e.n,0),135)).a,!r||hi(hi((t.a+=' "',t),r),'"'))),hi(rw(hi(rw(hi(rw(hi(rw((t.a+=" (",t),e.i),","),e.j)," | "),e.g),","),e.f),")"),t.a)}function s_n(e,t){var n,r,a,o,f;for(t==(yA(),Cde)&&JN(l($i(e.a,(Ry(),bB)),15)),a=l($i(e.a,(Ry(),bB)),15).Kc();a.Ob();)switch(r=l(a.Pb(),105),n=l(jt(r.j,0),113).d.j,o=new Ol(r.j),Vs(o,new Rj),t.g){case 2:Lue(e,o,n,(Ow(),Rb),1);break;case 1:case 0:f=UTn(o),Lue(e,new Zp(o,0,f),n,(Ow(),Rb),0),Lue(e,new Zp(o,f,o.c.length),n,Rb,1)}}function ile(e,t){var n,r,a,o,f,g,w;if(t==null||t.length==0)return null;if(a=l(xu(e.a,t),143),!a){for(r=(g=new gi(e.b).a.vc().Kc(),new fs(g));r.a.Ob();)if(n=(o=l(r.a.Pb(),44),l(o.md(),143)),f=n.c,w=t.length,vn(f.substr(f.length-w,w),t)&&(t.length==f.length||co(f,f.length-t.length-1)==46)){if(a)return null;a=n}a&&rc(e.a,t,a)}return a}function a_n(e,t){var n,r,a,o;return n=new as,r=l(yc(fc(new bn(null,new kn(e.f,16)),n),Sy(new yt,new ji,new qn,new Un,he(le(oc,1),it,108,0,[(Fl(),i4),Ec]))),21),a=r.gc(),r=l(yc(fc(new bn(null,new kn(t.f,16)),n),Sy(new yt,new ji,new qn,new Un,he(le(oc,1),it,108,0,[i4,Ec]))),21),o=r.gc(),aa.p?(la(o,Dr),o.d&&(g=o.o.b,t=o.a.b,o.a.b=g-t)):o.j==Dr&&a.p>e.p&&(la(o,Qn),o.d&&(g=o.o.b,t=o.a.b,o.a.b=-(g-t)));break}return a}function uP(e,t,n,r,a){var o,f,g,w,E,C,L;if(!(De(t,207)||De(t,366)||De(t,193)))throw ue(new Yn("Method only works for ElkNode-, ElkLabel and ElkPort-objects."));return f=e.a/2,w=t.i+r-f,C=t.j+a-f,E=w+t.g+e.a,L=C+t.f+e.a,o=new bl,ui(o,new lt(w,C)),ui(o,new lt(w,L)),ui(o,new lt(E,L)),ui(o,new lt(E,C)),g=new Gue(o),pc(g,t),n&&ki(e.b,t,g),g}function KE(e,t,n){var r,a,o,f,g,w,E,C,L,B;for(o=new lt(t,n),C=new G(e.a);C.a1,g&&(r=new lt(a,n.b),ui(t.a,r)),fA(t.a,he(le(Ea,1),dt,8,0,[B,L]))}function Nf(){Nf=U,AW=new ly(Id,0),AB=new ly("NIKOLOV",1),LB=new ly("NIKOLOV_PIXEL",2),xDe=new ly("NIKOLOV_IMPROVED",3),kDe=new ly("NIKOLOV_IMPROVED_PIXEL",4),yDe=new ly("DUMMYNODE_PERCENTAGE",5),EDe=new ly("NODECOUNT_PERCENTAGE",6),LW=new ly("NO_BOUNDARY",7),v3=new ly("MODEL_ORDER_LEFT_TO_RIGHT",8),x4=new ly("MODEL_ORDER_RIGHT_TO_LEFT",9)}function b_n(e){var t,n,r,a,o;for(r=e.length,t=new h_,o=0;o=40,f&&mAn(e),SLn(e),WCn(e),n=m1t(e),r=0;n&&r0&&ui(e.f,o)):(e.c[f]-=E+1,e.c[f]<=0&&e.a[f]>0&&ui(e.e,o))))}function hmt(e,t,n,r){var a,o,f,g,w,E,C;for(w=new lt(n,r),ma(w,l(Q(t,(Qi(),QT)),8)),C=Rr(t.b,0);C.b!=C.d.c;)E=l(Br(C),40),Oi(E.e,w),ui(e.b,E);for(g=l(yc(V5e(new bn(null,new kn(t.a,16))),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[(Fl(),Ec)]))),15).Kc();g.Ob();){for(f=l(g.Pb(),65),o=Rr(f.a,0);o.b!=o.d.c;)a=l(Br(o),8),a.a+=w.a,a.b+=w.b;ui(e.a,f)}}function bke(e,t){var n,r,a,o;if(0<(De(e,16)?l(e,16).gc():Xg(e.Kc()))){if(a=t,1=0&&wo*2?(C=new hV(L),E=wl(f)/gh(f),w=Lle(C,t,new A8,n,r,a,E),Oi(Y0(C.e),w),L.c.length=0,o=0,$n(L.c,C),$n(L.c,f),o=wl(C)*gh(C)+wl(f)*gh(f)):($n(L.c,f),o+=wl(f)*gh(f));return L}function dmt(e,t){var n,r,a,o,f,g;if(g=l(Q(t,(Nt(),Ms)),101),g==(Ra(),Tg)||g==Mu)for(a=new lt(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a).b,f=new G(e.a);f.an?t:n;E<=L;++E)E==n?g=r++:(o=a[E],C=V.am(o.Lk()),E==t&&(w=E==L&&!C?r-1:r),C&&++r);return B=l(AA(e,t,n),76),g!=w&&xk(e,new sN(e.e,7,f,pt(g),z.md(),w)),B}}else return l(Hue(e,t,n),76);return l(AA(e,t,n),76)}function B_n(e,t){var n,r,a,o,f,g,w;for(t.Ug("Port order processing",1),w=l(Q(e,(Nt(),ZMe)),430),r=new G(e.b);r.a=0&&(g=M7n(e,f),!(g&&(E<22?w.l|=1<>>1,f.m=C>>>1|(L&1)<<21,f.l=B>>>1|(C&1)<<21,--E;return n&&yce(w),o&&(r?(Nb=xE(e),a&&(Nb=Jft(Nb,(iE(),YSe)))):Nb=qu(e.l,e.m,e.h)),w}function j_n(e,t){var n,r,a,o,f,g,w,E,C,L;for(E=e.e[t.c.p][t.p]+1,w=t.c.a.c.length+1,g=new G(e.a);g.a0&&(Xn(0,e.length),e.charCodeAt(0)==45||(Xn(0,e.length),e.charCodeAt(0)==43))?1:0,r=f;rn)throw ue(new gd(Yw+e+'"'));return g}function $_n(e){var t,n,r,a,o,f,g;for(f=new os,o=new G(e.a);o.a1)&&t==1&&l(e.a[e.b],10).k==(Zn(),cu)?Tx(l(e.a[e.b],10),(Ih(),kg)):r&&(!n||(e.c-e.b&e.a.length-1)>1)&&t==1&&l(e.a[e.c-1&e.a.length-1],10).k==(Zn(),cu)?Tx(l(e.a[e.c-1&e.a.length-1],10),(Ih(),Gb)):(e.c-e.b&e.a.length-1)==2?(Tx(l(wA(e),10),(Ih(),kg)),Tx(l(wA(e),10),Gb)):pTn(e,a),l6e(e)}function H_n(e,t,n){var r,a,o,f,g;for(o=0,a=new or((!e.a&&(e.a=new nt(Ai,e,10,11)),e.a));a.e!=a.i.gc();)r=l(gr(a),27),f="",(!r.n&&(r.n=new nt(ec,r,1,7)),r.n).i==0||(f=l(Oe((!r.n&&(r.n=new nt(ec,r,1,7)),r.n),0),135).a),g=new xce(o++,t,f),pc(g,r),rt(g,(Qi(),gM),r),g.e.b=r.j+r.f/2,g.f.a=b.Math.max(r.g,1),g.e.a=r.i+r.g/2,g.f.b=b.Math.max(r.f,1),ui(t.b,g),ju(n.f,r,g)}function V_n(e){var t,n,r,a,o;r=l(Q(e,(ft(),zi)),27),o=l(at(r,(Nt(),bv)),181).Hc((mh(),Cv)),e.e||(a=l(Q(e,Lu),21),t=new lt(e.f.a+e.d.b+e.d.c,e.f.b+e.d.d+e.d.a),a.Hc((Ho(),vf))?(Hi(r,Ms,(Ra(),Mu)),Gw(r,t.a,t.b,!1,!0)):Rt(Bt(at(r,ade)))||Gw(r,t.a,t.b,!0,!0)),o?Hi(r,bv,un(Cv)):Hi(r,bv,(n=l(K0(BM),9),new Zh(n,l(c0(n,n.length),9),0)))}function mke(e,t,n){var r,a,o,f;if(t[0]>=e.length)return n.o=0,!0;switch(co(e,t[0])){case 43:a=1;break;case 45:a=-1;break;default:return n.o=0,!0}if(++t[0],o=t[0],f=kU(e,t),f==0&&t[0]==o)return!1;if(t[0]g&&(g=a,C.c.length=0),a==g&&vt(C,new ca(n.c.i,n)));Cn(),Vs(C,e.c),pw(e.b,w.p,C)}}function W_n(e,t){var n,r,a,o,f,g,w,E,C;for(f=new G(t.b);f.ag&&(g=a,C.c.length=0),a==g&&vt(C,new ca(n.d.i,n)));Cn(),Vs(C,e.c),pw(e.f,w.p,C)}}function Y_n(e,t){var n,r,a,o,f,g,w,E;if(E=Bt(Q(t,(Hc(),MTt))),E==null||(nr(E),E)){for(yEn(e,t),a=new bt,w=Rr(t.b,0);w.b!=w.d.c;)f=l(Br(w),40),n=i9e(e,f,null),n&&(pc(n,t),$n(a.c,n));if(e.a=null,e.b=null,a.c.length>1)for(r=new G(a);r.a=0&&g!=n&&(o=new _a(e,1,g,f,null),r?r.nj(o):r=o),n>=0&&(o=new _a(e,1,n,g==n?f:null,t),r?r.nj(o):r=o)),r}function bmt(e){var t,n,r;if(e.b==null){if(r=new Up,e.i!=null&&(Xo(r,e.i),r.a+=":"),e.f&256){for(e.f&256&&e.a!=null&&(dpn(e.i)||(r.a+="//"),Xo(r,e.a)),e.d!=null&&(r.a+="/",Xo(r,e.d)),e.f&16&&(r.a+="/"),t=0,n=e.j.length;tB?!1:(L=(w=ZA(r,B,!1),w.a),C+g+L<=t.b&&(aN(n,o-n.s),n.c=!0,aN(r,o-n.s),qN(r,n.s,n.t+n.d+g),r.k=!0,C7e(n.q,r),z=!0,a&&(bV(t,r),r.j=t,e.c.length>f&&(UN((Sn(f,e.c.length),l(e.c[f],186)),r),(Sn(f,e.c.length),l(e.c[f],186)).a.c.length==0&&t2(e,f)))),z)}function nAn(e,t){var n,r,a,o,f,g;if(t.Ug("Partition midprocessing",1),a=new Cw,Is(Fi(new bn(null,new kn(e.a,16)),new vj),new cYe(a)),a.d!=0){for(g=l(yc(K5e((o=a.i,new bn(null,(o||(a.i=new q5(a,a.c))).Nc()))),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[(Fl(),Ec)]))),15),r=g.Kc(),n=l(r.Pb(),17);r.Ob();)f=l(r.Pb(),17),WTn(l($i(a,n),21),l($i(a,f),21)),n=f;t.Vg()}}function wmt(e,t,n){var r,a,o,f,g,w,E,C;if(t.p==0){for(t.p=1,f=n,f||(a=new bt,o=(r=l(K0(Oo),9),new Zh(r,l(c0(r,r.length),9),0)),f=new ca(a,o)),l(f.a,15).Fc(t),t.k==(Zn(),Us)&&l(f.b,21).Fc(l(Q(t,(ft(),Wc)),64)),w=new G(t.j);w.a0){if(a=l(e.Ab.g,2033),t==null){for(o=0;on.s&&gf)return Ct(),ar;break;case 4:case 3:if(C<0)return Ct(),Qn;if(C+n>o)return Ct(),Dr}return w=(E+g/2)/f,r=(C+n/2)/o,w+r<=1&&w-r<=0?(Ct(),er):w+r>=1&&w-r>=0?(Ct(),ar):r<.5?(Ct(),Qn):(Ct(),Dr)}function oAn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J;for(n=!1,C=ze(Ge(Q(t,(Nt(),m3)))),V=Ab*C,a=new G(t.b);a.aw+V&&(J=L.g+B.g,B.a=(B.g*B.a+L.g*L.a)/J,B.g=J,L.f=B,n=!0)),o=g,L=B;return n}function Emt(e,t,n,r,a,o,f){var g,w,E,C,L,B;for(B=new $8,E=t.Kc();E.Ob();)for(g=l(E.Pb(),853),L=new G(g.Rf());L.a0?g.a?(E=g.b.Mf().b,a>E&&(e.v||g.c.d.c.length==1?(f=(a-E)/2,g.d.d=f,g.d.a=f):(n=l(jt(g.c.d,0),187).Mf().b,r=(n-E)/2,g.d.d=b.Math.max(0,r),g.d.a=a-r-E))):g.d.a=e.t+a:W_(e.u)&&(o=$xe(g.b),o.d<0&&(g.d.d=-o.d),o.d+o.a>g.b.Mf().b&&(g.d.a=o.d+o.a-g.b.Mf().b))}function b0(){b0=U,qx=new Ha((pi(),XB),pt(1)),kK=new Ha(Ev,80),n8t=new Ha(ANe,5),G7t=new Ha(Z6,lT),e8t=new Ha(zge,pt(1)),t8t=new Ha(qge,(Hn(),!0)),nAe=new lw(50),J7t=new Ha(_2,nAe),Z_e=WB,rAe=_M,K7t=new Ha(Dge,!1),tAe=YB,X7t=C4,Q7t=Ub,Y7t=kv,W7t=r7,Z7t=S4,eAe=(Xxe(),j7t),Z0e=H7t,xK=R7t,J0e=$7t,iAe=q7t,s8t=AM,a8t=aY,i8t=QB,r8t=sY,sAe=(dx(),L4),new Ha(i9,sAe)}function lAn(e,t){var n;switch(gN(e)){case 6:return Ia(t);case 7:return fy(t);case 8:return hy(t);case 3:return Array.isArray(t)&&(n=gN(t),!(n>=14&&n<=16));case 11:return t!=null&&typeof t===Ole;case 12:return t!=null&&(typeof t===wP||typeof t==Ole);case 0:return iue(t,e.__elementTypeId$);case 2:return Rae(t)&&t.Tm!==xe;case 1:return Rae(t)&&t.Tm!==xe||iue(t,e.__elementTypeId$);default:return!0}}function Tmt(e,t){var n,r,a,o;return r=b.Math.min(b.Math.abs(e.c-(t.c+t.b)),b.Math.abs(e.c+e.b-t.c)),o=b.Math.min(b.Math.abs(e.d-(t.d+t.a)),b.Math.abs(e.d+e.a-t.d)),n=b.Math.abs(e.c+e.b/2-(t.c+t.b/2)),n>e.b/2+t.b/2||(a=b.Math.abs(e.d+e.a/2-(t.d+t.a/2)),a>e.a/2+t.a/2)?1:n==0&&a==0?0:n==0?o/a+1:a==0?r/n+1:b.Math.min(r/n,o/a)+1}function hAn(e,t){var n,r,a,o,f,g,w;for(o=0,g=0,w=0,a=new G(e.f.e);a.a0&&e.d!=(lA(),n1e)&&(g+=f*(r.d.a+e.a[t.a][r.a]*(t.d.a-r.d.a)/n)),n>0&&e.d!=(lA(),e1e)&&(w+=f*(r.d.b+e.a[t.a][r.a]*(t.d.b-r.d.b)/n)));switch(e.d.g){case 1:return new lt(g/o,t.d.b);case 2:return new lt(t.d.a,w/o);default:return new lt(g/o,w/o)}}function Cmt(e){var t,n,r,a,o,f;for(n=(!e.a&&(e.a=new Ys(qh,e,5)),e.a).i+2,f=new Bu(n),vt(f,new lt(e.j,e.k)),Is(new bn(null,(!e.a&&(e.a=new Ys(qh,e,5)),new kn(e.a,16))),new NXe(f)),vt(f,new lt(e.b,e.c)),t=1;t0&&(SN(w,!1,(Js(),uc)),SN(w,!0,vc)),Vu(t.g,new jet(e,n)),ki(e.g,t,n)}function Amt(){Amt=U;var e;for(r_e=he(le(Vr,1),di,28,15,[-1,-1,30,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5]),A0e=We(Vr,di,28,37,15,1),b6t=he(le(Vr,1),di,28,15,[-1,-1,63,40,32,28,25,23,21,20,19,19,18,18,17,17,16,16,16,15,15,15,15,14,14,14,14,14,14,13,13,13,13,13,13,13,13]),i_e=We(nm,ahe,28,37,14,1),e=2;e<=36;e++)A0e[e]=ua(b.Math.pow(e,r_e[e])),i_e[e]=KN(EP,A0e[e])}function fAn(e){var t;if((!e.a&&(e.a=new nt(cs,e,6,6)),e.a).i!=1)throw ue(new Yn(n4t+(!e.a&&(e.a=new nt(cs,e,6,6)),e.a).i));return t=new bl,TN(l(Oe((!e.b&&(e.b=new Ln(_r,e,4,7)),e.b),0),84))&&Ka(t,bwt(e,TN(l(Oe((!e.b&&(e.b=new Ln(_r,e,4,7)),e.b),0),84)),!1)),TN(l(Oe((!e.c&&(e.c=new Ln(_r,e,5,8)),e.c),0),84))&&Ka(t,bwt(e,TN(l(Oe((!e.c&&(e.c=new Ln(_r,e,5,8)),e.c),0),84)),!0)),t}function Lmt(e,t){var n,r,a,o,f;for(t.d?a=e.a.c==(xd(),w3)?ka(t.b):qs(t.b):a=e.a.c==(xd(),T2)?ka(t.b):qs(t.b),o=!1,r=new hr(dr(a.a.Kc(),new j));jr(r);)if(n=l(xr(r),18),f=Rt(e.a.f[e.a.g[t.b.p].p]),!(!f&&!Do(n)&&n.c.i.c==n.d.i.c)&&!(Rt(e.a.n[e.a.g[t.b.p].p])||Rt(e.a.n[e.a.g[t.b.p].p]))&&(o=!0,W0(e.b,e.a.g[f7n(n,t.b).p])))return t.c=!0,t.a=n,t;return t.c=o,t.a=null,t}function wke(e,t,n){var r,a,o,f,g,w,E;if(r=n.gc(),r==0)return!1;if(e.Pj())if(w=e.Qj(),A8e(e,t,n),f=r==1?e.Ij(3,null,n.Kc().Pb(),t,w):e.Ij(5,null,n,t,w),e.Mj()){for(g=r<100?null:new nb(r),o=t+r,a=t;a0){for(f=0;f>16==-15&&e.Cb.Yh()&&qoe(new Foe(e.Cb,9,13,n,e.c,f2(Xl(l(e.Cb,62)),e))):De(e.Cb,90)&&e.Db>>16==-23&&e.Cb.Yh()&&(t=e.c,De(t,90)||(t=(Tn(),Kf)),De(n,90)||(n=(Tn(),Kf)),qoe(new Foe(e.Cb,9,10,n,t,f2(du(l(e.Cb,29)),e)))))),e.c}function pAn(e,t,n){var r,a,o,f,g,w,E,C,L;for(n.Ug("Hyperedge merging",1),jEn(e,t),w=new Ua(t.b,0);w.b0,g=HV(t,o),Iye(n?g.b:g.g,t),Z5(g).c.length==1&&Cs(r,g,r.c.b,r.c),a=new ca(o,t),gb(e.o,a),al(e.e.a,o))}function Bmt(e,t){var n,r,a,o,f,g,w;return r=b.Math.abs(mH(e.b).a-mH(t.b).a),g=b.Math.abs(mH(e.b).b-mH(t.b).b),a=0,w=0,n=1,f=1,r>e.b.b/2+t.b.b/2&&(a=b.Math.min(b.Math.abs(e.b.c-(t.b.c+t.b.b)),b.Math.abs(e.b.c+e.b.b-t.b.c)),n=1-a/r),g>e.b.a/2+t.b.a/2&&(w=b.Math.min(b.Math.abs(e.b.d-(t.b.d+t.b.a)),b.Math.abs(e.b.d+e.b.a-t.b.d)),f=1-w/g),o=b.Math.min(n,f),(1-o)*b.Math.sqrt(r*r+g*g)}function vAn(e){var t,n,r,a;for(Ale(e,e.e,e.f,(Sw(),Hb),!0,e.c,e.i),Ale(e,e.e,e.f,Hb,!1,e.c,e.i),Ale(e,e.e,e.f,K6,!0,e.c,e.i),Ale(e,e.e,e.f,K6,!1,e.c,e.i),gAn(e,e.c,e.e,e.f,e.i),r=new Ua(e.i,0);r.b=65;n--)nd[n]=n-65<<24>>24;for(r=122;r>=97;r--)nd[r]=r-97+26<<24>>24;for(a=57;a>=48;a--)nd[a]=a-48+52<<24>>24;for(nd[43]=62,nd[47]=63,o=0;o<=25;o++)N2[o]=65+o&Zs;for(f=26,w=0;f<=51;++f,w++)N2[f]=97+w&Zs;for(e=52,g=0;e<=61;++e,g++)N2[e]=48+g&Zs;N2[62]=43,N2[63]=47}function Fmt(e,t){var n,r,a,o,f,g;return a=y7e(e),g=y7e(t),a==g?e.e==t.e&&e.a<54&&t.a<54?e.ft.f?1:0:(r=e.e-t.e,n=(e.d>0?e.d:b.Math.floor((e.a-1)*Vwt)+1)-(t.d>0?t.d:b.Math.floor((t.a-1)*Vwt)+1),n>r+1?a:n0&&(f=K5(f,Wmt(r))),K1t(o,f))):aE&&(B=0,z+=w+t,w=0),KE(f,B,z),n=b.Math.max(n,B+C.a),w=b.Math.max(w,C.b),B+=C.a+t;return new lt(n+t,z+w+t)}function Eke(e,t){var n,r,a,o,f,g,w;if(!M1(e))throw ue(new nc(t4t));if(r=M1(e),o=r.g,a=r.f,o<=0&&a<=0)return Ct(),Pc;switch(g=e.i,w=e.j,t.g){case 2:case 1:if(g<0)return Ct(),er;if(g+e.g>o)return Ct(),ar;break;case 4:case 3:if(w<0)return Ct(),Qn;if(w+e.f>a)return Ct(),Dr}return f=(g+e.g/2)/o,n=(w+e.f/2)/a,f+n<=1&&f-n<=0?(Ct(),er):f+n>=1&&f-n>=0?(Ct(),ar):n<.5?(Ct(),Qn):(Ct(),Dr)}function xAn(e,t,n,r,a){var o,f;if(o=bo(va(t[0],Vo),va(r[0],Vo)),e[0]=Yr(o),o=bw(o,32),n>=a){for(f=1;f0&&(a.b[f++]=0,a.b[f++]=o.b[0]-1),t=1;t0&&(H(w,w.d-a.d),a.c==(J0(),qb)&&N(w,w.a-a.d),w.d<=0&&w.i>0&&Cs(t,w,t.c.b,t.c)));for(o=new G(e.f);o.a0&&(q(g,g.i-a.d),a.c==(J0(),qb)&&$(g,g.b-a.d),g.i<=0&&g.d>0&&Cs(n,g,n.c.b,n.c)))}function TAn(e,t,n,r,a){var o,f,g,w,E,C,L,B,z;for(Cn(),Vs(e,new tk),f=PO(e),z=new bt,B=new bt,g=null,w=0;f.b!=0;)o=l(f.b==0?null:(mr(f.b!=0),af(f,f.a.a)),163),!g||wl(g)*gh(g)/21&&(w>wl(g)*gh(g)/2||f.b==0)&&(L=new hV(B),C=wl(g)/gh(g),E=Lle(L,t,new A8,n,r,a,C),Oi(Y0(L.e),E),g=L,$n(z.c,L),w=0,B.c.length=0));return ra(z,B),z}function pu(e,t,n,r,a){Vg();var o,f,g,w,E,C,L;if(d5e(e,"src"),d5e(n,"dest"),L=bh(e),w=bh(n),I4e((L.i&4)!=0,"srcType is not an array"),I4e((w.i&4)!=0,"destType is not an array"),C=L.c,f=w.c,I4e(C.i&1?C==f:(f.i&1)==0,"Array types don't match"),lyn(e,t,n,r,a),!(C.i&1)&&L!=w)if(E=jm(e),o=jm(n),qe(e)===qe(n)&&tr;)Ts(o,g,E[--t]);else for(g=r+a;r0),r.a.Xb(r.c=--r.b),L>B+w&&ph(r);for(f=new G(z);f.a0),r.a.Xb(r.c=--r.b)}}function SAn(){Di();var e,t,n,r,a,o;if(upe)return upe;for(e=new _h(4),Ky(e,_b(p0e,!0)),nL(e,_b("M",!0)),nL(e,_b("C",!0)),o=new _h(4),r=0;r<11;r++)Eu(o,r,r);return t=new _h(4),Ky(t,_b("M",!0)),Eu(t,4448,4607),Eu(t,65438,65439),a=new B_(2),Qm(a,e),Qm(a,WM),n=new B_(2),n.Jm(oH(o,_b("L",!0))),n.Jm(t),n=new Ty(3,n),n=new f5e(a,n),upe=n,upe}function Gy(e,t){var n,r,a,o,f,g,w,E;for(n=new RegExp(t,"g"),w=We(zt,dt,2,0,6,1),r=0,E=e,o=null;;)if(g=n.exec(E),g==null||E==""){w[r]=E;break}else f=g.index,w[r]=(Ga(0,f,E.length),E.substr(0,f)),E=tf(E,f+g[0].length,E.length),n.lastIndex=0,o==E&&(w[r]=(Ga(0,1,E.length),E.substr(0,1)),E=(Xn(1,E.length+1),E.substr(1))),o=E,++r;if(e.length>0){for(a=w.length;a>0&&w[a-1]=="";)--a;a0&&(L-=r[0]+e.c,r[0]+=e.c),r[2]>0&&(L-=r[2]+e.c),r[1]=b.Math.max(r[1],L),hH(e.a[1],n.c+t.b+r[0]-(r[1]-L)/2,r[1]);for(o=e.a,g=0,E=o.length;g0?(e.n.c.length-1)*e.i:0,r=new G(e.n);r.a1)for(r=Rr(a,0);r.b!=r.d.c;)for(n=l(Br(r),235),o=0,w=new G(n.e);w.a0&&(t[0]+=e.c,L-=t[0]),t[2]>0&&(L-=t[2]+e.c),t[1]=b.Math.max(t[1],L),fH(e.a[1],r.d+n.d+t[0]-(t[1]-L)/2,t[1]);else for(V=r.d+n.d,z=r.a-n.d-n.a,f=e.a,w=0,C=f.length;w0||Fw(a.b.d,e.b.d+e.b.a)==0&&r.b<0||Fw(a.b.d+a.b.a,e.b.d)==0&&r.b>0){g=0;break}}else g=b.Math.min(g,Bpt(e,a,r));g=b.Math.min(g,zmt(e,o,g,r))}return g}function dP(e,t){var n,r,a,o,f,g,w;if(e.b<2)throw ue(new Yn("The vector chain must contain at least a source and a target point."));for(a=(mr(e.b!=0),l(e.a.a.c,8)),kO(t,a.a,a.b),w=new q8((!t.a&&(t.a=new Ys(qh,t,5)),t.a)),f=Rr(e,1);f.a=0&&o!=n))throw ue(new Yn(WP));for(a=0,w=0;wze(L1(f.g,f.d[0]).a)?(mr(w.b>0),w.a.Xb(w.c=--w.b),by(w,f),a=!0):g.e&&g.e.gc()>0&&(o=(!g.e&&(g.e=new bt),g.e).Mc(t),E=(!g.e&&(g.e=new bt),g.e).Mc(n),(o||E)&&((!g.e&&(g.e=new bt),g.e).Fc(f),++f.c));a||$n(r.c,f)}function OAn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe;return L=e.a.i+e.a.g/2,B=e.a.i+e.a.g/2,V=t.i+t.g/2,te=t.j+t.f/2,g=new lt(V,te),E=l(at(t,(pi(),n9)),8),E.a=E.a+L,E.b=E.b+B,o=(g.b-E.b)/(g.a-E.a),r=g.b-o*g.a,J=n.i+n.g/2,fe=n.j+n.f/2,w=new lt(J,fe),C=l(at(n,n9),8),C.a=C.a+L,C.b=C.b+B,f=(w.b-C.b)/(w.a-C.a),a=w.b-f*w.a,z=(r-a)/(f-o),E.a>>0,"0"+t.toString(16)),r="\\x"+tf(n,n.length-2,n.length)):e>=Io?(n=(t=e>>>0,"0"+t.toString(16)),r="\\v"+tf(n,n.length-6,n.length)):r=""+String.fromCharCode(e&Zs)}return r}function Umt(e){var t,n,r;if(P5(l(Q(e,(Nt(),Ms)),101)))for(n=new G(e.j);n.a=t.o&&n.f<=t.f||t.a*.5<=n.f&&t.a*1.5>=n.f){if(f=l(jt(t.n,t.n.c.length-1),209),f.e+f.d+n.g+a<=r&&(o=l(jt(t.n,t.n.c.length-1),209),o.f-e.f+n.f<=e.b||e.a.c.length==1))return y8e(t,n),!0;if(t.s+n.g<=r&&(t.t+t.d+n.f+a<=e.b||e.a.c.length==1))return vt(t.b,n),g=l(jt(t.n,t.n.c.length-1),209),vt(t.n,new PH(t.s,g.f+g.a+t.i,t.i)),exe(l(jt(t.n,t.n.c.length-1),209),n),jmt(t,n),!0}return!1}function Kmt(e,t,n){var r,a,o,f;return e.Pj()?(a=null,o=e.Qj(),r=e.Ij(1,f=Uoe(e,t,n),n,t,o),e.Mj()&&!(e.Yi()&&f!=null?Pi(f,n):qe(f)===qe(n))?(f!=null&&(a=e.Oj(f,a)),a=e.Nj(n,a),e.Tj()&&(a=e.Wj(f,n,a)),a?(a.nj(r),a.oj()):e.Jj(r)):(e.Tj()&&(a=e.Wj(f,n,a)),a?(a.nj(r),a.oj()):e.Jj(r)),f):(f=Uoe(e,t,n),e.Mj()&&!(e.Yi()&&f!=null?Pi(f,n):qe(f)===qe(n))&&(a=null,f!=null&&(a=e.Oj(f,null)),a=e.Nj(n,a),a&&a.oj()),f)}function $An(e,t){var n,r,a,o,f;if(t.Ug("Path-Like Graph Wrapping",1),e.b.c.length==0){t.Vg();return}if(a=new M9e(e),f=(a.i==null&&(a.i=x7e(a,new Gj)),ze(a.i)*a.f),n=f/(a.i==null&&(a.i=x7e(a,new Gj)),ze(a.i)),a.b>n){t.Vg();return}switch(l(Q(e,(Nt(),hde)),351).g){case 2:o=new Wj;break;case 0:o=new ES;break;default:o=new Yj}if(r=o.og(e,a),!o.pg())switch(l(Q(e,EW),352).g){case 2:r=Fpt(a,r);break;case 1:r=Agt(a,r)}BLn(e,a,r),t.Vg()}function XA(e,t){var n,r,a,o,f,g,w,E;t%=24,e.q.getHours()!=t&&(r=new b.Date(e.q.getTime()),r.setDate(r.getDate()+1),g=e.q.getTimezoneOffset()-r.getTimezoneOffset(),g>0&&(w=g/60|0,E=g%60,a=e.q.getDate(),n=e.q.getHours(),n+w>=24&&++a,o=new b.Date(e.q.getFullYear(),e.q.getMonth(),a,t+w,e.q.getMinutes()+E,e.q.getSeconds(),e.q.getMilliseconds()),e.q.setTime(o.getTime()))),f=e.q.getTime(),e.q.setTime(f+36e5),e.q.getHours()!=t&&e.q.setTime(f)}function zAn(e,t){var n,r,a,o;if(ebn(e.d,e.e),e.c.a.$b(),ze(Ge(Q(t.j,(Nt(),hW))))!=0||ze(Ge(Q(t.j,hW)))!=0)for(n=y6,qe(Q(t.j,yg))!==qe((Ed(),E2))&&rt(t.j,(ft(),jb),(Hn(),!0)),o=l(Q(t.j,nM),17).a,a=0;aa&&++E,vt(f,(Sn(g+E,t.c.length),l(t.c[g+E],17))),w+=(Sn(g+E,t.c.length),l(t.c[g+E],17)).a-r,++n;n=te&&e.e[w.p]>V*e.b||Me>=n*te)&&($n(B.c,g),g=new bt,Ka(f,o),o.a.$b(),E-=C,z=b.Math.max(z,E*e.b+J),E+=Me,Te=Me,Me=0,C=0,J=0);return new ca(z,B)}function dle(e){var t,n,r,a,o,f,g;if(!e.d){if(g=new Jne,t=qM,o=t.a.zc(e,t),o==null){for(r=new or(dc(e));r.e!=r.i.gc();)n=l(gr(r),29),As(g,dle(n));t.a.Bc(e)!=null,t.a.gc()==0}for(f=g.i,a=(!e.q&&(e.q=new nt(Uf,e,11,10)),new or(e.q));a.e!=a.i.gc();++f)l(gr(a),411);As(g,(!e.q&&(e.q=new nt(Uf,e,11,10)),e.q)),Iy(g),e.d=new N5((l(Oe(tt((lb(),Vn).o),9),19),g.i),g.g),e.e=l(g.g,688),e.e==null&&(e.e=X_t),Yl(e).b&=-17}return e.d}function XE(e,t,n,r){var a,o,f,g,w,E;if(E=Wu(e.e.Dh(),t),w=0,a=l(e.g,124),Fo(),l(t,69).xk()){for(f=0;f1||V==-1)if(L=l(J,71),B=l(C,71),L.dc())B.$b();else for(f=!!Ro(t),o=0,g=e.a?L.Kc():L.Ii();g.Ob();)E=l(g.Pb(),58),a=l(B1(e,E),58),a?(f?(w=B.dd(a),w==-1?B.Gi(o,a):o!=w&&B.Ui(o,a)):B.Gi(o,a),++o):e.b&&!f&&(B.Gi(o,E),++o);else J==null?C.Wb(null):(a=B1(e,J),a==null?e.b&&!Ro(t)&&C.Wb(J):C.Wb(a))}function GAn(e,t){var n,r,a,o,f,g,w,E;for(n=new gZ,a=new hr(dr(ka(t).a.Kc(),new j));jr(a);)if(r=l(xr(a),18),!Do(r)&&(g=r.c.i,Bxe(g,SK))){if(E=tke(e,g,SK,CK),E==-1)continue;n.b=b.Math.max(n.b,E),!n.a&&(n.a=new bt),vt(n.a,g)}for(f=new hr(dr(qs(t).a.Kc(),new j));jr(f);)if(o=l(xr(f),18),!Do(o)&&(w=o.d.i,Bxe(w,CK))){if(E=tke(e,w,CK,SK),E==-1)continue;n.d=b.Math.max(n.d,E),!n.c&&(n.c=new bt),vt(n.c,w)}return n}function KAn(e,t,n,r){var a,o,f,g,w,E,C;if(n.d.i!=t.i){for(a=new op(e),x(a,(Zn(),Aa)),rt(a,(ft(),zi),n),rt(a,(Nt(),Ms),(Ra(),Mu)),$n(r.c,a),f=new gu,Mc(f,a),la(f,(Ct(),er)),g=new gu,Mc(g,a),la(g,ar),C=n.d,Fa(n,f),o=new Tw,pc(o,n),rt(o,cc,null),po(o,g),Fa(o,C),E=new Ua(n.b,0);E.b1e6)throw ue(new qz("power of ten too big"));if(e<=Ii)return sx(iP($x[1],t),t);for(r=iP($x[1],Ii),a=r,n=Zc(e-Ii),t=ua(e%Ii);iu(n,Ii)>0;)a=K5(a,r),n=Df(n,Ii);for(a=K5(a,iP($x[1],t)),a=sx(a,Ii),n=Zc(e-Ii);iu(n,Ii)>0;)a=sx(a,Ii),n=Df(n,Ii);return a=sx(a,t),a}function Ymt(e){var t,n,r,a,o,f,g,w,E,C;for(w=new G(e.a);w.aE&&r>E)C=g,E=ze(t.p[g.p])+ze(t.d[g.p])+g.o.b+g.d.a;else{a=!1,n._g()&&n.bh("bk node placement breaks on "+g+" which should have been after "+C);break}if(!a)break}return n._g()&&n.bh(t+" is feasible: "+a),a}function _ke(e,t,n,r){var a,o,f,g,w,E,C,L,B;if(o=new op(e),x(o,(Zn(),Au)),rt(o,(Nt(),Ms),(Ra(),Mu)),a=0,t){for(f=new gu,rt(f,(ft(),zi),t),rt(o,zi,t.i),la(f,(Ct(),er)),Mc(f,o),B=kd(t.e),E=B,C=0,L=E.length;C0){if(a<0&&C.a&&(a=w,o=E[0],r=0),a>=0){if(g=C.b,w==a&&(g-=r++,g==0))return 0;if(!Zvt(t,E,C,g,f)){w=a-1,E[0]=o;continue}}else if(a=-1,!Zvt(t,E,C,0,f))return 0}else{if(a=-1,co(C.c,0)==32){if(L=E[0],eht(t,E),E[0]>L)continue}else if(Ppn(t,C.c,E[0])){E[0]+=C.c.length;continue}return 0}return FDn(f,n)?E[0]:0}function ZAn(e,t,n){var r,a,o,f,g,w,E,C,L,B;for(C=new gH(new Dz(n)),g=We(ih,pg,28,e.f.e.c.length,16,1),l5e(g,g.length),n[t.a]=0,E=new G(e.f.e);E.a=0&&!r6(e,C,L);)--L;a[C]=L}for(z=0;z=0&&!r6(e,g,V);)--g;o[V]=g}for(w=0;wt[B]&&Br[w]&&FU(e,w,B,!1,!0)}function Ake(e){var t,n,r,a,o,f,g,w;n=Rt(Bt(Q(e,(b0(),K7t)))),o=e.a.c.d,g=e.a.d.d,n?(f=md(ma(new lt(g.a,g.b),o),.5),w=md(Ja(e.e),.5),t=ma(Oi(new lt(o.a,o.b),f),w),Fye(e.d,t)):(a=ze(Ge(Q(e.a,n8t))),r=e.d,o.a>=g.a?o.b>=g.b?(r.a=g.a+(o.a-g.a)/2+a,r.b=g.b+(o.b-g.b)/2-a-e.e.b):(r.a=g.a+(o.a-g.a)/2+a,r.b=o.b+(g.b-o.b)/2+a):o.b>=g.b?(r.a=o.a+(g.a-o.a)/2+a,r.b=g.b+(o.b-g.b)/2+a):(r.a=o.a+(g.a-o.a)/2+a,r.b=o.b+(g.b-o.b)/2-a-e.e.b))}function JA(e){var t,n,r,a,o,f,g,w;if(!e.f){if(w=new _I,g=new _I,t=qM,f=t.a.zc(e,t),f==null){for(o=new or(dc(e));o.e!=o.i.gc();)a=l(gr(o),29),As(w,JA(a));t.a.Bc(e)!=null,t.a.gc()==0}for(r=(!e.s&&(e.s=new nt(dl,e,21,17)),new or(e.s));r.e!=r.i.gc();)n=l(gr(r),179),De(n,102)&&qr(g,l(n,19));Iy(g),e.r=new zit(e,(l(Oe(tt((lb(),Vn).o),6),19),g.i),g.g),As(w,e.r),Iy(w),e.f=new N5((l(Oe(tt(Vn.o),5),19),w.i),w.g),Yl(e).b&=-3}return e.f}function Qmt(e){sw(e,new Xm(nw(Zv(tw(ew(new x1,nv),"ELK DisCo"),"Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out."),new z0))),gt(e,nv,_he,It(X_e)),gt(e,nv,Ahe,It(W0e)),gt(e,nv,Ox,It(I7t)),gt(e,nv,Xw,It(Y_e)),gt(e,nv,bEe,It(B7t)),gt(e,nv,mEe,It(P7t)),gt(e,nv,pEe,It(F7t)),gt(e,nv,vEe,It(N7t)),gt(e,nv,CEe,It(O7t)),gt(e,nv,SEe,It(K0e)),gt(e,nv,_Ee,It(W_e)),gt(e,nv,AEe,It(vK))}function zU(){zU=U,bPe=he(le(kf,1),Ad,28,15,[48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70]),S_t=new RegExp(`[ +\r\f]+`);try{jM=he(le(POn,1),Rn,2114,0,[new KI((iye(),KV("yyyy-MM-dd'T'HH:mm:ss'.'SSSZ",MO((zz(),zz(),NL))))),new KI(KV("yyyy-MM-dd'T'HH:mm:ss'.'SSS",MO(NL))),new KI(KV("yyyy-MM-dd'T'HH:mm:ss",MO(NL))),new KI(KV("yyyy-MM-dd'T'HH:mm",MO(NL))),new KI(KV("yyyy-MM-dd",MO(NL)))])}catch(e){if(e=bs(e),!De(e,82))throw ue(e)}}function tLn(e,t){var n,r,a,o;if(a=Jl(e.d,1)!=0,r=cke(e,t),r==0&&Rt(Bt(Q(t.j,(ft(),jb)))))return 0;!Rt(Bt(Q(t.j,(ft(),jb))))&&!Rt(Bt(Q(t.j,j6)))||qe(Q(t.j,(Nt(),yg)))===qe((Ed(),E2))?t.c.mg(t.e,a):a=Rt(Bt(Q(t.j,jb))),cP(e,t,a,!0),Rt(Bt(Q(t.j,j6)))&&rt(t.j,j6,(Hn(),!1)),Rt(Bt(Q(t.j,jb)))&&(rt(t.j,jb,(Hn(),!1)),rt(t.j,j6,!0)),n=cke(e,t);do{if(w7e(e),n==0)return 0;a=!a,o=n,cP(e,t,a,!1),n=cke(e,t)}while(o>n);return o}function Jmt(e,t){var n,r,a,o;if(a=Jl(e.d,1)!=0,r=xU(e,t),r==0&&Rt(Bt(Q(t.j,(ft(),jb)))))return 0;!Rt(Bt(Q(t.j,(ft(),jb))))&&!Rt(Bt(Q(t.j,j6)))||qe(Q(t.j,(Nt(),yg)))===qe((Ed(),E2))?t.c.mg(t.e,a):a=Rt(Bt(Q(t.j,jb))),cP(e,t,a,!0),Rt(Bt(Q(t.j,j6)))&&rt(t.j,j6,(Hn(),!1)),Rt(Bt(Q(t.j,jb)))&&(rt(t.j,jb,(Hn(),!1)),rt(t.j,j6,!0)),n=xU(e,t);do{if(w7e(e),n==0)return 0;a=!a,o=n,cP(e,t,a,!1),n=xU(e,t)}while(o>n);return o}function Lke(e,t,n,r){var a,o,f,g,w,E,C,L,B;return w=ma(new lt(n.a,n.b),e),E=w.a*t.b-w.b*t.a,C=t.a*r.b-t.b*r.a,L=(w.a*r.b-w.b*r.a)/C,B=E/C,C==0?E==0?(a=Oi(new lt(n.a,n.b),md(new lt(r.a,r.b),.5)),o=pb(e,a),f=pb(Oi(new lt(e.a,e.b),t),a),g=b.Math.sqrt(r.a*r.a+r.b*r.b)*.5,o=0&&L<=1&&B>=0&&B<=1?Oi(new lt(e.a,e.b),md(new lt(t.a,t.b),L)):null}function nLn(e,t,n){var r,a,o,f,g;if(r=l(Q(e,(Nt(),J1e)),21),n.a>t.a&&(r.Hc((Ym(),EM))?e.c.a+=(n.a-t.a)/2:r.Hc(TM)&&(e.c.a+=n.a-t.a)),n.b>t.b&&(r.Hc((Ym(),SM))?e.c.b+=(n.b-t.b)/2:r.Hc(CM)&&(e.c.b+=n.b-t.b)),l(Q(e,(ft(),Lu)),21).Hc((Ho(),vf))&&(n.a>t.a||n.b>t.b))for(g=new G(e.a);g.at.a&&(r.Hc((Ym(),EM))?e.c.a+=(n.a-t.a)/2:r.Hc(TM)&&(e.c.a+=n.a-t.a)),n.b>t.b&&(r.Hc((Ym(),SM))?e.c.b+=(n.b-t.b)/2:r.Hc(CM)&&(e.c.b+=n.b-t.b)),l(Q(e,(ft(),Lu)),21).Hc((Ho(),vf))&&(n.a>t.a||n.b>t.b))for(f=new G(e.a);f.a0?e.i:0)>t&&w>0&&(o=0,f+=w+e.i,a=b.Math.max(a,B),r+=w+e.i,w=0,B=0,n&&(++L,vt(e.n,new PH(e.s,f,e.i))),g=0),B+=E.g+(g>0?e.i:0),w=b.Math.max(w,E.f),n&&exe(l(jt(e.n,L),209),E),o+=E.g+(g>0?e.i:0),++g;return a=b.Math.max(a,B),r+=w,n&&(e.r=a,e.d=r,ixe(e.j)),new ef(e.s,e.t,a,r)}function gle(e){var t,n,r,a,o,f,g,w,E,C,L,B;for(e.b=!1,L=gs,w=ia,B=gs,E=ia,r=e.e.a.ec().Kc();r.Ob();)for(n=l(r.Pb(),272),a=n.a,L=b.Math.min(L,a.c),w=b.Math.max(w,a.c+a.b),B=b.Math.min(B,a.d),E=b.Math.max(E,a.d+a.a),f=new G(n.c);f.ae.o.a&&(C=(w-e.o.a)/2,g.b=b.Math.max(g.b,C),g.c=b.Math.max(g.c,C))}}function aLn(e){var t,n,r,a,o,f,g,w;for(o=new Kot,Fln(o,(hx(),dSt)),r=(a=ace(e,We(zt,dt,2,0,6,1)),new kr(new Il(new ase(e,a).b)));r.bg?1:-1:W7e(e.a,t.a,o),a==-1)L=-w,C=f==w?Doe(t.a,g,e.a,o):Ooe(t.a,g,e.a,o);else if(L=f,f==w){if(a==0)return Cd(),BL;C=Doe(e.a,o,t.a,g)}else C=Ooe(e.a,o,t.a,g);return E=new Im(L,C.length,C),iA(E),E}function oLn(e,t){var n,r,a,o;if(o=Pmt(t),!t.c&&(t.c=new nt(Hl,t,9,9)),Is(new bn(null,(!t.c&&(t.c=new nt(Hl,t,9,9)),new kn(t.c,16))),new $We(o)),a=l(Q(o,(ft(),Lu)),21),ZMn(t,a),a.Hc((Ho(),vf)))for(r=new or((!t.c&&(t.c=new nt(Hl,t,9,9)),t.c));r.e!=r.i.gc();)n=l(gr(r),123),ADn(e,t,o,n);return l(at(t,(Nt(),bv)),181).gc()!=0&&_bt(t,o),Rt(Bt(Q(o,XMe)))&&a.Fc(nW),ns(o,CB)&&NJe(new D8e(ze(Ge(Q(o,CB)))),o),qe(at(t,p4))===qe((rp(),A2))?JIn(e,t,o):BIn(e,t,o),o}function cLn(e){var t,n,r,a,o,f,g,w;for(a=new G(e.b);a.a0?tf(n.a,0,o-1):""):(Ga(0,o-1,e.length),e.substr(0,o-1)):n?n.a:e}function uLn(e,t){var n,r,a,o,f,g,w;for(t.Ug("Sort By Input Model "+Q(e,(Nt(),yg)),1),a=0,r=new G(e.b);r.a=e.b.length?(o[a++]=f.b[r++],o[a++]=f.b[r++]):r>=f.b.length?(o[a++]=e.b[n++],o[a++]=e.b[n++]):f.b[r]0?e.i:0)),++t;for(g8e(e.n,w),e.d=n,e.r=r,e.g=0,e.f=0,e.e=0,e.o=gs,e.p=gs,o=new G(e.b);o.a0&&(a=(!e.n&&(e.n=new nt(ec,e,1,7)),l(Oe(e.n,0),135)).a,!a||hi(hi((t.a+=' "',t),a),'"'))),n=(!e.b&&(e.b=new Ln(_r,e,4,7)),!(e.b.i<=1&&(!e.c&&(e.c=new Ln(_r,e,5,8)),e.c.i<=1))),n?t.a+=" [":t.a+=" ",hi(t,Eye(new Zie,new or(e.b))),n&&(t.a+="]"),t.a+=Phe,n&&(t.a+="["),hi(t,Eye(new Zie,new or(e.c))),n&&(t.a+="]"),t.a)}function hLn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn;for(Ze=e.c,ot=t.c,n=gc(Ze.a,e,0),r=gc(ot.a,t,0),Me=l(Rw(e,(qo(),$l)).Kc().Pb(),12),an=l(Rw(e,zu).Kc().Pb(),12),$e=l(Rw(t,$l).Kc().Pb(),12),Bn=l(Rw(t,zu).Kc().Pb(),12),fe=kd(Me.e),St=kd(an.g),Te=kd($e.e),cn=kd(Bn.g),Fy(e,r,ot),f=Te,C=0,V=f.length;CC?new Pm((J0(),E4),n,t,E-C):E>0&&C>0&&(new Pm((J0(),E4),t,n,0),new Pm(E4,n,t,0))),f)}function gLn(e,t,n){var r,a,o;for(e.a=new bt,o=Rr(t.b,0);o.b!=o.d.c;){for(a=l(Br(o),40);l(Q(a,(Hc(),$d)),17).a>e.a.c.length-1;)vt(e.a,new ca(y6,hCe));r=l(Q(a,$d),17).a,n==(Js(),uc)||n==vc?(a.e.aze(Ge(l(jt(e.a,r),42).b))&&ct(l(jt(e.a,r),42),a.e.a+a.f.a)):(a.e.bze(Ge(l(jt(e.a,r),42).b))&&ct(l(jt(e.a,r),42),a.e.b+a.f.b))}}function tvt(e,t,n,r){var a,o,f,g,w,E,C;if(o=zV(r),g=Rt(Bt(Q(r,(Nt(),VMe)))),(g||Rt(Bt(Q(e,bW))))&&!P5(l(Q(e,Ms),101)))a=gx(o),w=vke(e,n,n==(qo(),zu)?a:BN(a));else switch(w=new gu,Mc(w,e),t?(C=w.n,C.a=t.a-e.n.a,C.b=t.b-e.n.b,opt(C,0,0,e.o.a,e.o.b),la(w,kmt(w,o))):(a=gx(o),la(w,n==(qo(),zu)?a:BN(a))),f=l(Q(r,(ft(),Lu)),21),E=w.j,o.g){case 2:case 1:(E==(Ct(),Qn)||E==Dr)&&f.Fc((Ho(),B6));break;case 4:case 3:(E==(Ct(),ar)||E==er)&&f.Fc((Ho(),B6))}return w}function nvt(e,t){var n,r,a,o,f,g;for(f=new qm(new Sr(e.f.b).a);f.b;){if(o=Nw(f),a=l(o.ld(),602),t==1){if(a.Af()!=(Js(),wf)&&a.Af()!=Q1)continue}else if(a.Af()!=(Js(),uc)&&a.Af()!=vc)continue;switch(r=l(l(o.md(),42).b,86),g=l(l(o.md(),42).a,194),n=g.c,a.Af().g){case 2:r.g.c=e.e.a,r.g.b=b.Math.max(1,r.g.b+n);break;case 1:r.g.c=r.g.c+n,r.g.b=b.Math.max(1,r.g.b-n);break;case 4:r.g.d=e.e.b,r.g.a=b.Math.max(1,r.g.a+n);break;case 3:r.g.d=r.g.d+n,r.g.a=b.Math.max(1,r.g.a-n)}}}function pLn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J;for(g=We(Vr,di,28,t.b.c.length,15,1),E=We(l1e,it,273,t.b.c.length,0,1),w=We(wg,m2,10,t.b.c.length,0,1),L=e.a,B=0,z=L.length;B0&&w[r]&&(V=j5(e.b,w[r],a)),J=b.Math.max(J,a.c.c.b+V);for(o=new G(C.e);o.a1)throw ue(new Yn(ZP));w||(o=sg(t,r.Kc().Pb()),f.Fc(o))}return N7e(e,t9e(e,t,n),f)}function HU(e,t,n){var r,a,o,f,g,w,E,C;if(up(e.e,t))w=(Fo(),l(t,69).xk()?new nH(t,e):new yO(t,e)),EU(w.c,w.b),F_(w,l(n,16));else{for(C=Wu(e.e.Dh(),t),r=l(e.g,124),f=0;f"}w!=null&&(t.a+=""+w)}else e.e?(g=e.e.zb,g!=null&&(t.a+=""+g)):(t.a+="?",e.b?(t.a+=" super ",wle(e.b,t)):e.f&&(t.a+=" extends ",wle(e.f,t)))}function xLn(e){e.b=null,e.a=null,e.o=null,e.q=null,e.v=null,e.w=null,e.B=null,e.p=null,e.Q=null,e.R=null,e.S=null,e.T=null,e.U=null,e.V=null,e.W=null,e.bb=null,e.eb=null,e.ab=null,e.H=null,e.db=null,e.c=null,e.d=null,e.f=null,e.n=null,e.r=null,e.s=null,e.u=null,e.G=null,e.J=null,e.e=null,e.j=null,e.i=null,e.g=null,e.k=null,e.t=null,e.F=null,e.I=null,e.L=null,e.M=null,e.O=null,e.P=null,e.$=null,e.N=null,e.Z=null,e.cb=null,e.K=null,e.D=null,e.A=null,e.C=null,e._=null,e.fb=null,e.X=null,e.Y=null,e.gb=!1,e.hb=!1}function kLn(e){var t,n,r,a;if(r=Dle((!e.c&&(e.c=XO(Zc(e.f))),e.c),0),e.e==0||e.a==0&&e.f!=-1&&e.e<0)return r;if(t=y7e(e)<0?1:0,n=e.e,a=(r.length+1+b.Math.abs(ua(e.e)),new S5),t==1&&(a.a+="-"),e.e>0)if(n-=r.length-t,n>=0){for(a.a+="0.";n>lv.length;n-=lv.length)Qit(a,lv);Prt(a,lv,ua(n)),hi(a,(Xn(t,r.length+1),r.substr(t)))}else n=t-n,hi(a,tf(r,t,ua(n))),a.a+=".",hi(a,w5e(r,ua(n)));else{for(hi(a,(Xn(t,r.length+1),r.substr(t)));n<-lv.length;n+=lv.length)Qit(a,lv);Prt(a,lv,ua(-n))}return a.a}function yle(e){var t,n,r,a,o,f,g,w,E;return!(e.k!=(Zn(),Ps)||e.j.c.length<=1||(o=l(Q(e,(Nt(),Ms)),101),o==(Ra(),Mu))||(a=(By(),(e.q?e.q:(Cn(),Cn(),mg))._b(g3)?r=l(Q(e,g3),203):r=l(Q(eo(e),eM),203),r),a==_W)||!(a==G6||a==U6)&&(f=ze(Ge(Py(e,tM))),t=l(Q(e,_B),140),!t&&(t=new n4e(f,f,f,f)),E=Oc(e,(Ct(),er)),w=t.d+t.a+(E.gc()-1)*f,w>e.o.b||(n=Oc(e,ar),g=t.d+t.a+(n.gc()-1)*f,g>e.o.b)))}function ELn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te;t.Ug("Orthogonal edge routing",1),E=ze(Ge(Q(e,(Nt(),V6)))),n=ze(Ge(Q(e,q6))),r=ze(Ge(Q(e,vv))),B=new Hae(0,n),te=0,f=new Ua(e.b,0),g=null,C=null,w=null,L=null;do C=f.b0?(z=(V-1)*n,g&&(z+=r),C&&(z+=r),zt||Rt(Bt(at(w,(z1(),$B)))))&&(a=0,o+=C.b+n,$n(L.c,C),C=new Q5e(o,n),r=new kce(0,C.f,C,n),bV(C,r),a=0),r.b.c.length==0||!Rt(Bt(at(ds(w),(z1(),hge))))&&(w.f>=r.o&&w.f<=r.f||r.a*.5<=w.f&&r.a*1.5>=w.f)?y8e(r,w):(f=new kce(r.s+r.r+n,C.f,C,n),bV(C,f),y8e(f,w)),a=w.i+w.g;return $n(L.c,C),L}function eL(e){var t,n,r,a;if(!(e.b==null||e.b.length<=2)&&!e.a){for(t=0,a=0;a=e.b[a+1])a+=2;else if(n0)for(r=new Ol(l($i(e.a,o),21)),Cn(),Vs(r,new GI(t)),a=new Ua(o.b,0);a.b0&&r>=-6?r>=0?EO(o,n-ua(e.e),String.fromCharCode(46)):(hce(o,t-1,t-1,"0."),EO(o,t+1,If(lv,0,-ua(r)-1))):(n-t>=1&&(EO(o,t,String.fromCharCode(46)),++n),EO(o,n,String.fromCharCode(69)),r>0&&EO(o,++n,String.fromCharCode(43)),EO(o,++n,""+Y_(Zc(r)))),e.g=o.a,e.g))}function OLn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St;r=ze(Ge(Q(t,(Nt(),KMe)))),Ze=l(Q(t,nM),17).a,B=4,a=3,ot=20/Ze,z=!1,w=0,f=Ii;do{for(o=w!=1,L=w!=0,St=0,te=e.a,Te=0,$e=te.length;Te<$e;++Te)V=te[Te],V.f=null,yDn(e,V,o,L,r),St+=b.Math.abs(V.a);do g=oAn(e,t);while(g);for(J=e.a,fe=0,Me=J.length;feZe)?(w=2,f=Ii):w==0?(w=1,f=St):(w=0,f=St)):(z=St>=f||f-St0?1:uw(isNaN(r),isNaN(0)))>=0^(f0(Nd),(b.Math.abs(g)<=Nd||g==0||isNaN(g)&&isNaN(0)?0:g<0?-1:g>0?1:uw(isNaN(g),isNaN(0)))>=0)?b.Math.max(g,r):(f0(Nd),(b.Math.abs(r)<=Nd||r==0||isNaN(r)&&isNaN(0)?0:r<0?-1:r>0?1:uw(isNaN(r),isNaN(0)))>0?b.Math.sqrt(g*g+r*r):-b.Math.sqrt(g*g+r*r))}function Qm(e,t){var n,r,a,o,f,g;if(t){if(!e.a&&(e.a=new jz),e.e==2){Rz(e.a,t);return}if(t.e==1){for(a=0;a=Io?Xo(n,w8e(r)):Uk(n,r&Zs),f=new coe(10,null,0),mgn(e.a,f,g-1)):(n=(f.Mm().length+o,new h_),Xo(n,f.Mm())),t.e==0?(r=t.Km(),r>=Io?Xo(n,w8e(r)):Uk(n,r&Zs)):Xo(n,t.Mm()),l(f,530).b=n.a}}function BLn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te;if(!n.dc()){for(g=0,B=0,r=n.Kc(),V=l(r.Pb(),17).a;g1&&(w=E.Hg(w,e.a,g));return w.c.length==1?l(jt(w,w.c.length-1),238):w.c.length==2?CLn((Sn(0,w.c.length),l(w.c[0],238)),(Sn(1,w.c.length),l(w.c[1],238)),f,o):null}function $Ln(e,t,n){var r,a,o,f,g,w,E;for(n.Ug("Find roots",1),e.a.c.length=0,a=Rr(t.b,0);a.b!=a.d.c;)r=l(Br(a),40),r.b.b==0&&(rt(r,(Qi(),Vb),(Hn(),!0)),vt(e.a,r));switch(e.a.c.length){case 0:o=new xce(0,t,"DUMMY_ROOT"),rt(o,(Qi(),Vb),(Hn(),!0)),rt(o,Nde,!0),ui(t.b,o);break;case 1:break;default:for(f=new xce(0,t,DG),w=new G(e.a);w.a=b.Math.abs(r.b)?(r.b=0,o.d+o.a>f.d&&o.df.c&&o.c0){if(t=new eye(e.i,e.g),n=e.i,o=n<100?null:new nb(n),e.Tj())for(r=0;r0){for(g=e.g,E=e.i,uA(e),o=E<100?null:new nb(E),r=0;r>13|(e.m&15)<<9,a=e.m>>4&8191,o=e.m>>17|(e.h&255)<<5,f=(e.h&1048320)>>8,g=t.l&8191,w=t.l>>13|(t.m&15)<<9,E=t.m>>4&8191,C=t.m>>17|(t.h&255)<<5,L=(t.h&1048320)>>8,cn=n*g,an=r*g,Bn=a*g,jn=o*g,ur=f*g,w!=0&&(an+=n*w,Bn+=r*w,jn+=a*w,ur+=o*w),E!=0&&(Bn+=n*E,jn+=r*E,ur+=a*E),C!=0&&(jn+=n*C,ur+=r*C),L!=0&&(ur+=n*L),z=cn&eh,V=(an&511)<<13,B=z+V,te=cn>>22,fe=an>>9,Te=(Bn&262143)<<4,Me=(jn&31)<<17,J=te+fe+Te+Me,Ze=Bn>>18,ot=jn>>5,St=(ur&4095)<<8,$e=Ze+ot+St,J+=B>>22,B&=eh,$e+=J>>22,J&=eh,$e&=hp,qu(B,J,$e)}function dvt(e){var t,n,r,a,o,f,g;if(g=l(jt(e.j,0),12),g.g.c.length!=0&&g.e.c.length!=0)throw ue(new nc("Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges."));if(g.g.c.length!=0){for(o=gs,n=new G(g.g);n.a4)if(e.fk(t)){if(e.al()){if(a=l(t,54),r=a.Eh(),w=r==e.e&&(e.ml()?a.yh(a.Fh(),e.il())==e.jl():-1-a.Fh()==e.Lj()),e.nl()&&!w&&!r&&a.Jh()){for(o=0;o0&&gpt(e,g,L);for(a=new G(L);a.ae.d[f.p]&&(n+=f6e(e.b,o)*l(w.b,17).a,gb(e.a,pt(o)));for(;!l_(e.a);)U6e(e.b,l(X8(e.a),17).a)}return n}function ULn(e,t){var n,r,a,o,f,g,w,E,C,L;if(C=l(Q(e,(ft(),Wc)),64),r=l(jt(e.j,0),12),C==(Ct(),Qn)?la(r,Dr):C==Dr&&la(r,Qn),l(Q(t,(Nt(),bv)),181).Hc((mh(),Cv))){if(w=ze(Ge(Q(e,GT))),E=ze(Ge(Q(e,KT))),f=ze(Ge(Q(e,y4))),g=l(Q(t,v4),21),g.Hc((Rl(),vp)))for(n=E,L=e.o.a/2-r.n.a,o=new G(r.f);o.a0&&(E=e.n.a/o);break;case 2:case 4:a=e.i.o.b,a>0&&(E=e.n.b/a)}rt(e,(ft(),l3),E)}if(w=e.o,f=e.a,r)f.a=r.a,f.b=r.b,e.d=!0;else if(t!=Z1&&t!=Wb&&g!=Pc)switch(g.g){case 1:f.a=w.a/2;break;case 2:f.a=w.a,f.b=w.b/2;break;case 3:f.a=w.a/2,f.b=w.b;break;case 4:f.b=w.b/2}else f.a=w.a/2,f.b=w.b/2}function tL(e){var t,n,r,a,o,f,g,w,E,C;if(e.Pj())if(C=e.Ej(),w=e.Qj(),C>0)if(t=new T7e(e.pj()),n=C,o=n<100?null:new nb(n),AO(e,n,t.g),a=n==1?e.Ij(4,Oe(t,0),null,0,w):e.Ij(6,t,null,-1,w),e.Mj()){for(r=new or(t);r.e!=r.i.gc();)o=e.Oj(gr(r),o);o?(o.nj(a),o.oj()):e.Jj(a)}else o?(o.nj(a),o.oj()):e.Jj(a);else AO(e,e.Ej(),e.Fj()),e.Jj(e.Ij(6,(Cn(),_o),null,-1,w));else if(e.Mj())if(C=e.Ej(),C>0){for(g=e.Fj(),E=C,AO(e,C,g),o=E<100?null:new nb(E),r=0;r1&&wl(f)*gh(f)/2>g[0]){for(o=0;og[o];)++o;V=new Zp(J,0,o+1),L=new hV(V),C=wl(f)/gh(f),w=Lle(L,t,new A8,n,r,a,C),Oi(Y0(L.e),w),K8($E(B,L),aT),z=new Zp(J,o+1,J.c.length),cxe(B,z),J.c.length=0,E=0,gst(g,g.length,0)}else te=B.b.c.length==0?null:jt(B.b,0),te!=null&&rce(B,0),E>0&&(g[E]=g[E-1]),g[E]+=wl(f)*gh(f),++E,$n(J.c,f);return J}function QLn(e,t){var n,r,a,o;n=t.b,o=new Ol(n.j),a=0,r=n.j,r.c.length=0,mw(l(zm(e.b,(Ct(),Qn),(Ow(),o3)),15),n),a=zN(o,a,new Gv,r),mw(l(zm(e.b,Qn,Rb),15),n),a=zN(o,a,new bee,r),mw(l(zm(e.b,Qn,a3),15),n),mw(l(zm(e.b,ar,o3),15),n),mw(l(zm(e.b,ar,Rb),15),n),a=zN(o,a,new $j,r),mw(l(zm(e.b,ar,a3),15),n),mw(l(zm(e.b,Dr,o3),15),n),a=zN(o,a,new zj,r),mw(l(zm(e.b,Dr,Rb),15),n),a=zN(o,a,new qj,r),mw(l(zm(e.b,Dr,a3),15),n),mw(l(zm(e.b,er,o3),15),n),a=zN(o,a,new Bj,r),mw(l(zm(e.b,er,Rb),15),n),mw(l(zm(e.b,er,a3),15),n)}function JLn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z;for(g=new G(t);g.a.5?fe-=f*2*(V-.5):V<.5&&(fe+=o*2*(.5-V)),a=g.d.b,fete.a-J-C&&(fe=te.a-J-C),g.n.a=t+fe}}function nMn(e){var t,n,r,a,o;if(r=l(Q(e,(Nt(),Qu)),171),r==(hf(),$b)){for(n=new hr(dr(ka(e).a.Kc(),new j));jr(n);)if(t=l(xr(n),18),!Aut(t))throw ue(new Vp(jhe+HN(e)+"' has its layer constraint set to FIRST_SEPARATE, but has at least one incoming edge. FIRST_SEPARATE nodes must not have incoming edges."))}else if(r==d4){for(o=new hr(dr(qs(e).a.Kc(),new j));jr(o);)if(a=l(xr(o),18),!Aut(a))throw ue(new Vp(jhe+HN(e)+"' has its layer constraint set to LAST_SEPARATE, but has at least one outgoing edge. LAST_SEPARATE nodes must not have outgoing edges."))}}function bP(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V;if(e.e&&e.c.c>19&&(t=xE(t),w=!w),f=$Tn(t),o=!1,a=!1,r=!1,e.h==SP&&e.m==0&&e.l==0)if(a=!0,o=!0,f==-1)e=ent((iE(),WSe)),r=!0,w=!w;else return g=D9e(e,f),w&&yce(g),n&&(Nb=qu(0,0,0)),g;else e.h>>19&&(o=!0,e=xE(e),r=!0,w=!w);return f!=-1?pyn(e,f,w,o,n):bxe(e,t)<0?(n&&(o?Nb=xE(e):Nb=qu(e.l,e.m,e.h)),qu(0,0,0)):R_n(r?e:qu(e.l,e.m,e.h),t,w,o,a,n)}function Tle(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V;if(f=e.e,w=t.e,f==0)return t;if(w==0)return e;if(o=e.d,g=t.d,o+g==2)return n=va(e.a[0],Vo),r=va(t.a[0],Vo),f==w?(C=bo(n,r),V=Yr(C),z=Yr(ub(C,32)),z==0?new Qg(f,V):new Im(f,2,he(le(Vr,1),di,28,15,[V,z]))):(Cd(),Aq(f<0?Df(r,n):Df(n,r),0)?kb(f<0?Df(r,n):Df(n,r)):J_(kb(r2(f<0?Df(r,n):Df(n,r)))));if(f==w)B=f,L=o>=g?Ooe(e.a,o,t.a,g):Ooe(t.a,g,e.a,o);else{if(a=o!=g?o>g?1:-1:W7e(e.a,t.a,o),a==0)return Cd(),BL;a==1?(B=f,L=Doe(e.a,o,t.a,g)):(B=w,L=Doe(t.a,g,e.a,o))}return E=new Im(B,L.length,L),iA(E),E}function iMn(e,t){var n,r,a,o,f,g,w;if(!(e.g>t.f||t.g>e.f)){for(n=0,r=0,f=e.w.a.ec().Kc();f.Ob();)a=l(f.Pb(),12),Ice(Ic(he(le(Ea,1),dt,8,0,[a.i.n,a.n,a.a])).b,t.g,t.f)&&++n;for(g=e.r.a.ec().Kc();g.Ob();)a=l(g.Pb(),12),Ice(Ic(he(le(Ea,1),dt,8,0,[a.i.n,a.n,a.a])).b,t.g,t.f)&&--n;for(w=t.w.a.ec().Kc();w.Ob();)a=l(w.Pb(),12),Ice(Ic(he(le(Ea,1),dt,8,0,[a.i.n,a.n,a.a])).b,e.g,e.f)&&++r;for(o=t.r.a.ec().Kc();o.Ob();)a=l(o.Pb(),12),Ice(Ic(he(le(Ea,1),dt,8,0,[a.i.n,a.n,a.a])).b,e.g,e.f)&&--r;n=0)return n;switch(kw(ic(e,n))){case 2:{if(vn("",o2(e,n.qk()).xe())){if(w=HO(ic(e,n)),g=Wk(ic(e,n)),C=P9e(e,t,w,g),C)return C;for(a=hke(e,t),f=0,L=a.gc();f1)throw ue(new Yn(ZP));for(C=Wu(e.e.Dh(),t),r=l(e.g,124),f=0;f1,E=new N1(B.b);Lc(E.a)||Lc(E.b);)w=l(Lc(E.a)?re(E.a):re(E.b),18),L=w.c==B?w.d:w.c,b.Math.abs(Ic(he(le(Ea,1),dt,8,0,[L.i.n,L.n,L.a])).b-f.b)>1&&UCn(e,w,f,o,B)}}function lMn(e){var t,n,r,a,o,f;if(a=new Ua(e.e,0),r=new Ua(e.a,0),e.d)for(n=0;nwfe;){for(o=t,f=0;b.Math.abs(t-o)0),a.a.Xb(a.c=--a.b),CAn(e,e.b-f,o,r,a),mr(a.b0),r.a.Xb(r.c=--r.b)}if(!e.d)for(n=0;n0?(e.f[C.p]=z/(C.e.c.length+C.g.c.length),e.c=b.Math.min(e.c,e.f[C.p]),e.b=b.Math.max(e.b,e.f[C.p])):g&&(e.f[C.p]=z)}}function fMn(e){e.b=null,e.bb=null,e.fb=null,e.qb=null,e.a=null,e.c=null,e.d=null,e.e=null,e.f=null,e.n=null,e.M=null,e.L=null,e.Q=null,e.R=null,e.K=null,e.db=null,e.eb=null,e.g=null,e.i=null,e.j=null,e.k=null,e.gb=null,e.o=null,e.p=null,e.q=null,e.r=null,e.$=null,e.ib=null,e.S=null,e.T=null,e.t=null,e.s=null,e.u=null,e.v=null,e.w=null,e.B=null,e.A=null,e.C=null,e.D=null,e.F=null,e.G=null,e.H=null,e.I=null,e.J=null,e.P=null,e.Z=null,e.U=null,e.V=null,e.W=null,e.X=null,e.Y=null,e._=null,e.ab=null,e.cb=null,e.hb=null,e.nb=null,e.lb=null,e.mb=null,e.ob=null,e.pb=null,e.jb=null,e.kb=null,e.N=!1,e.O=!1}function dMn(e,t,n){var r,a,o,f;for(n.Ug("Graph transformation ("+e.a+")",1),f=_w(t.a),o=new G(t.b);o.a=g.b.c)&&(g.b=t),(!g.c||t.c<=g.c.c)&&(g.d=g.c,g.c=t),(!g.e||t.d>=g.e.d)&&(g.e=t),(!g.f||t.d<=g.f.d)&&(g.f=t);return r=new nU((wE(),s3)),QO(e,M8t,new Il(he(le(fB,1),Rn,382,0,[r]))),f=new nU(o4),QO(e,L8t,new Il(he(le(fB,1),Rn,382,0,[f]))),a=new nU(a4),QO(e,A8t,new Il(he(le(fB,1),Rn,382,0,[a]))),o=new nU(M6),QO(e,_8t,new Il(he(le(fB,1),Rn,382,0,[o]))),Yue(r.c,s3),Yue(a.c,a4),Yue(o.c,M6),Yue(f.c,o4),g.a.c.length=0,ra(g.a,r.c),ra(g.a,lf(a.c)),ra(g.a,o.c),ra(g.a,lf(f.c)),g}function bMn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V;for(t.Ug(Ayt,1),z=ze(Ge(at(e,(ug(),T4)))),f=ze(Ge(at(e,(z1(),wM)))),g=l(at(e,vM),107),v7e((!e.a&&(e.a=new nt(Ai,e,10,11)),e.a)),C=uvt((!e.a&&(e.a=new nt(Ai,e,10,11)),e.a),z,f),!e.a&&(e.a=new nt(Ai,e,10,11)),E=new G(C);E.a0&&(e.a=w+(z-1)*o,t.c.b+=e.a,t.f.b+=e.a)),V.a.gc()!=0&&(B=new Hae(1,o),z=Rke(B,t,V,J,t.f.b+w-t.c.b),z>0&&(t.f.b+=w+(z-1)*o))}function bvt(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e;for(C=ze(Ge(Q(e,(Nt(),b3)))),r=ze(Ge(Q(e,rDe))),B=new EI,rt(B,b3,C+r),E=t,fe=E.d,J=E.c.i,Te=E.d.i,te=oye(J.c),Me=oye(Te.c),a=new bt,L=te;L<=Me;L++)g=new op(e),x(g,(Zn(),Aa)),rt(g,(ft(),zi),E),rt(g,Ms,(Ra(),Mu)),rt(g,kW,B),z=l(jt(e.b,L),30),L==te?Fy(g,z.a.c.length-n,z):Va(g,z),$e=ze(Ge(Q(E,x2))),$e<0&&($e=0,rt(E,x2,$e)),g.o.b=$e,V=b.Math.floor($e/2),f=new gu,la(f,(Ct(),er)),Mc(f,g),f.n.b=V,w=new gu,la(w,ar),Mc(w,g),w.n.b=V,Fa(E,f),o=new Tw,pc(o,E),rt(o,cc,null),po(o,w),Fa(o,fe),s8n(g,E,o),$n(a.c,o),E=o;return a}function Cle(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me;for(w=l(d2(e,(Ct(),er)).Kc().Pb(),12).e,z=l(d2(e,ar).Kc().Pb(),12).g,g=w.c.length,Me=I1(l(jt(e.j,0),12));g-- >0;){for(J=(Sn(0,w.c.length),l(w.c[0],18)),a=(Sn(0,z.c.length),l(z.c[0],18)),Te=a.d.e,o=gc(Te,a,0),$bn(J,a.d,o),po(a,null),Fa(a,null),V=J.a,t&&ui(V,new Eo(Me)),r=Rr(a.a,0);r.b!=r.d.c;)n=l(Br(r),8),ui(V,new Eo(n));for(fe=J.b,B=new G(a.b);B.af)&&na(e.b,l(te.b,18));++g}o=f}}}function Pke(e,t){var n;if(t==null||vn(t,ul)||t.length==0&&e.k!=(g2(),t9))return null;switch(e.k.g){case 1:return QV(t,wT)?(Hn(),ST):QV(t,Ffe)?(Hn(),Pb):null;case 2:try{return pt(Oh(t,lo,Ii))}catch(r){if(r=bs(r),De(r,130))return null;throw ue(r)}case 4:try{return jy(t)}catch(r){if(r=bs(r),De(r,130))return null;throw ue(r)}case 3:return t;case 5:return F0t(e),Xpt(e,t);case 6:return F0t(e),mTn(e,e.a,t);case 7:try{return n=AEn(e),n.cg(t),n}catch(r){if(r=bs(r),De(r,33))return null;throw ue(r)}default:throw ue(new nc("Invalid type set for this layout option."))}}function Bke(e){var t;switch(e.d){case 1:{if(e.Sj())return e.o!=-2;break}case 2:{if(e.Sj())return e.o==-2;break}case 3:case 5:case 4:case 6:case 7:return e.o>-2;default:return!1}switch(t=e.Rj(),e.p){case 0:return t!=null&&Rt(Bt(t))!=I_(e.k,0);case 1:return t!=null&&l(t,222).a!=Yr(e.k)<<24>>24;case 2:return t!=null&&l(t,180).a!=(Yr(e.k)&Zs);case 6:return t!=null&&I_(l(t,168).a,e.k);case 5:return t!=null&&l(t,17).a!=Yr(e.k);case 7:return t!=null&&l(t,191).a!=Yr(e.k)<<16>>16;case 3:return t!=null&&ze(Ge(t))!=e.j;case 4:return t!=null&&l(t,161).a!=e.j;default:return t==null?e.n!=null:!Pi(t,e.n)}}function mP(e,t,n){var r,a,o,f;return e.ol()&&e.nl()&&(f=Fae(e,l(n,58)),qe(f)!==qe(n))?(e.xj(t),e.Dj(t,ylt(e,t,f)),e.al()&&(o=(a=l(n,54),e.ml()?e.kl()?a.Th(e.b,Ro(l(Mn(sl(e.b),e.Lj()),19)).n,l(Mn(sl(e.b),e.Lj()).Hk(),29).kk(),null):a.Th(e.b,ms(a.Dh(),Ro(l(Mn(sl(e.b),e.Lj()),19))),null,null):a.Th(e.b,-1-e.Lj(),null,null)),!l(f,54).Ph()&&(o=(r=l(f,54),e.ml()?e.kl()?r.Rh(e.b,Ro(l(Mn(sl(e.b),e.Lj()),19)).n,l(Mn(sl(e.b),e.Lj()).Hk(),29).kk(),o):r.Rh(e.b,ms(r.Dh(),Ro(l(Mn(sl(e.b),e.Lj()),19))),null,o):r.Rh(e.b,-1-e.Lj(),null,o))),o&&o.oj()),hh(e.b)&&e.Jj(e.Ij(9,n,f,t,!1)),f):n}function mvt(e){var t,n,r,a,o,f,g,w,E,C;for(r=new bt,f=new G(e.e.a);f.a0&&(f=b.Math.max(f,kft(e.C.b+r.d.b,a))),C=r,L=a,B=o;e.C&&e.C.c>0&&(z=B+e.C.c,E&&(z+=C.d.c),f=b.Math.max(f,(A1(),f0(H1),b.Math.abs(L-1)<=H1||L==1||isNaN(L)&&isNaN(1)?0:z/(1-L)))),n.n.b=0,n.a.a=f}function wvt(e,t){var n,r,a,o,f,g,w,E,C,L,B,z;if(n=l(Qo(e.b,t),127),w=l(l($i(e.r,t),21),87),w.dc()){n.n.d=0,n.n.a=0;return}for(E=e.u.Hc((Rl(),vp)),f=0,e.A.Hc((mh(),Cv))&&Wbt(e,t),g=w.Kc(),C=null,B=0,L=0;g.Ob();)r=l(g.Pb(),117),o=ze(Ge(r.b.of((zq(),pK)))),a=r.b.Mf().b,C?(z=L+C.d.a+e.w+r.d.d,f=b.Math.max(f,(A1(),f0(H1),b.Math.abs(B-o)<=H1||B==o||isNaN(B)&&isNaN(o)?0:z/(o-B)))):e.C&&e.C.d>0&&(f=b.Math.max(f,kft(e.C.d+r.d.d,o))),C=r,B=o,L=a;e.C&&e.C.a>0&&(z=L+e.C.a,E&&(z+=C.d.a),f=b.Math.max(f,(A1(),f0(H1),b.Math.abs(B-1)<=H1||B==1||isNaN(B)&&isNaN(1)?0:z/(1-B)))),n.n.d=0,n.a.b=f}function wMn(e,t,n,r,a,o,f,g){var w,E,C,L,B,z,V,J,te,fe;if(V=!1,E=H9e(n.q,t.f+t.b-n.q.f),z=r.f>t.b&&g,fe=a-(n.q.e+E-f),L=(w=ZA(r,fe,!1),w.a),z&&L>r.f)return!1;if(z){for(B=0,te=new G(t.d);te.a=(Sn(o,e.c.length),l(e.c[o],186)).e,!z&&L>t.b&&!C)?!1:((C||z||L<=t.b)&&(C&&L>t.b?(n.d=L,aN(n,spt(n,L))):(Egt(n.q,E),n.c=!0),aN(r,a-(n.s+n.r)),qN(r,n.q.e+n.q.d,t.f),bV(t,r),e.c.length>o&&(UN((Sn(o,e.c.length),l(e.c[o],186)),r),(Sn(o,e.c.length),l(e.c[o],186)).a.c.length==0&&t2(e,o)),V=!0),V)}function yvt(e,t,n){var r,a,o,f,g,w;for(this.g=e,g=t.d.length,w=n.d.length,this.d=We(wg,m2,10,g+w,0,1),f=0;f0?Xoe(this,this.f/this.a):L1(t.g,t.d[0]).a!=null&&L1(n.g,n.d[0]).a!=null?Xoe(this,(ze(L1(t.g,t.d[0]).a)+ze(L1(n.g,n.d[0]).a))/2):L1(t.g,t.d[0]).a!=null?Xoe(this,L1(t.g,t.d[0]).a):L1(n.g,n.d[0]).a!=null&&Xoe(this,L1(n.g,n.d[0]).a)}function yMn(e,t){var n,r,a,o,f,g,w,E,C,L;for(e.a=new Zst(nyn(LM)),r=new G(t.a);r.a=1&&(te-f>0&&L>=0?(w.n.a+=J,w.n.b+=o*f):te-f<0&&C>=0&&(w.n.a+=J*te,w.n.b+=o));e.o.a=t.a,e.o.b=t.b,rt(e,(Nt(),bv),(mh(),r=l(K0(BM),9),new Zh(r,l(c0(r,r.length),9),0)))}function EMn(e,t,n,r,a,o){var f;if(!(t==null||!Hce(t,TPe,CPe)))throw ue(new Yn("invalid scheme: "+t));if(!e&&!(n!=null&&pd(n,cl(35))==-1&&n.length>0&&(Xn(0,n.length),n.charCodeAt(0)!=47)))throw ue(new Yn("invalid opaquePart: "+n));if(e&&!(t!=null&&nO(EY,t.toLowerCase()))&&!(n==null||!Hce(n,$M,zM)))throw ue(new Yn(n5t+n));if(e&&t!=null&&nO(EY,t.toLowerCase())&&!nxn(n))throw ue(new Yn(n5t+n));if(!c5n(r))throw ue(new Yn("invalid device: "+r));if(!Gyn(a))throw f=a==null?"invalid segments: null":"invalid segment: "+qyn(a),ue(new Yn(f));if(!(o==null||pd(o,cl(35))==-1))throw ue(new Yn("invalid query: "+o))}function TMn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe;if(n.Ug("Network simplex layering",1),e.b=t,fe=l(Q(t,(Nt(),nM)),17).a*4,te=e.b.a,te.c.length<1){n.Vg();return}for(o=k_n(e,te),J=null,a=Rr(o,0);a.b!=a.d.c;){for(r=l(Br(a),15),g=fe*ua(b.Math.sqrt(r.gc())),f=F_n(r),ole(n3e(Tun(r3e(bae(f),g),J),!0),n.eh(1)),B=e.b.b,V=new G(f.a);V.a1)for(J=We(Vr,di,28,e.b.b.c.length,15,1),L=0,E=new G(e.b.b);E.a0){JV(e,n,0),n.a+=String.fromCharCode(r),a=G5n(t,o),JV(e,n,a),o+=a-1;continue}r==39?o+10&&V.a<=0){w.c.length=0,$n(w.c,V);break}z=V.i-V.d,z>=g&&(z>g&&(w.c.length=0,g=z),$n(w.c,V))}w.c.length!=0&&(f=l(jt(w,aU(a,w.c.length)),118),Me.a.Bc(f)!=null,f.g=C++,Tke(f,t,n,r),w.c.length=0)}for(te=e.c.length+1,B=new G(e);B.aia||t.o==wv&&C=g&&a<=w)g<=a&&o<=w?(n[C++]=a,n[C++]=o,r+=2):g<=a?(n[C++]=a,n[C++]=w,e.b[r]=w+1,f+=2):o<=w?(n[C++]=g,n[C++]=o,r+=2):(n[C++]=g,n[C++]=w,e.b[r]=w+1);else if(wAb)&&g<10);s3e(e.c,new Y7),Tvt(e),wgn(e.c),gMn(e.f)}function OMn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J;for(n=l(Q(e,(Nt(),Ms)),101),f=e.f,o=e.d,g=f.a+o.b+o.c,w=0-o.d-e.c.b,C=f.b+o.d+o.a-e.c.b,E=new bt,L=new bt,a=new G(t);a.a=2){for(w=Rr(n,0),f=l(Br(w),8),g=l(Br(w),8);g.a0&&SN(E,!0,(Js(),vc)),g.k==(Zn(),Us)&&cat(E),ki(e.f,g,t)}}function BMn(e){var t,n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e;for(a=l(Q(e,(Qi(),gM)),27),E=Ii,C=Ii,g=lo,w=lo,Me=Rr(e.b,0);Me.b!=Me.d.c;)fe=l(Br(Me),40),z=fe.e,V=fe.f,E=b.Math.min(E,z.a-V.a/2),C=b.Math.min(C,z.b-V.b/2),g=b.Math.max(g,z.a+V.a/2),w=b.Math.max(w,z.b+V.b/2);for(B=l(at(a,(Hc(),gIe)),107),Te=Rr(e.b,0);Te.b!=Te.d.c;)fe=l(Br(Te),40),L=Q(fe,gM),De(L,207)&&(o=l(L,27),Qh(o,fe.e.a,fe.e.b),aP(o,fe));for(te=Rr(e.a,0);te.b!=te.d.c;)J=l(Br(te),65),r=l(Q(J,gM),74),r&&(t=J.a,n=l6(r,!0,!0),dP(t,n));$e=g-E+(B.b+B.c),f=w-C+(B.d+B.a),Rt(Bt(at(a,(pi(),C4))))||Gw(a,$e,f,!1,!1),Hi(a,t7,$e-(B.b+B.c)),Hi(a,e7,f-(B.d+B.a))}function Svt(e,t){var n,r,a,o,f,g,w,E,C,L;for(w=!0,a=0,E=e.g[t.p],C=t.o.b+e.o,n=e.d[t.p][2],rf(e.b,E,pt(l(jt(e.b,E),17).a-1+n)),rf(e.c,E,ze(Ge(jt(e.c,E)))-C+n*e.f),++E,E>=e.j?(++e.j,vt(e.b,pt(1)),vt(e.c,C)):(r=e.d[t.p][1],rf(e.b,E,pt(l(jt(e.b,E),17).a+1-r)),rf(e.c,E,ze(Ge(jt(e.c,E)))+C-r*e.f)),(e.r==(Nf(),AB)&&(l(jt(e.b,E),17).a>e.k||l(jt(e.b,E-1),17).a>e.k)||e.r==LB&&(ze(Ge(jt(e.c,E)))>e.n||ze(Ge(jt(e.c,E-1)))>e.n))&&(w=!1),f=new hr(dr(ka(t).a.Kc(),new j));jr(f);)o=l(xr(f),18),g=o.c.i,e.g[g.p]==E&&(L=Svt(e,g),a=a+l(L.a,17).a,w=w&&Rt(Bt(L.b)));return e.g[t.p]=E,a=a+e.d[t.p][0],new ca(pt(a),(Hn(),!!w))}function _vt(e,t){var n,r,a,o,f;n=ze(Ge(Q(t,(Nt(),x0)))),n<2&&rt(t,x0,2),r=l(Q(t,Rh),88),r==(Js(),J1)&&rt(t,Rh,zV(t)),a=l(Q(t,Vkt),17),a.a==0?rt(t,(ft(),Xx),new Uce):rt(t,(ft(),Xx),new VH(a.a)),o=Bt(Q(t,ZL)),o==null&&rt(t,ZL,(Hn(),qe(Q(t,bp))===qe((ip(),iC)))),Is(new bn(null,new kn(t.a,16)),new qp(e)),Is(Dc(new bn(null,new kn(t.b,16)),new u5),new n_(e)),f=new xvt(t),rt(t,(ft(),$6),f),qO(e.a),X0(e.a,(uo(),y0),l(Q(t,dv),188)),X0(e.a,vg,l(Q(t,pv),188)),X0(e.a,bu,l(Q(t,JL),188)),X0(e.a,_u,l(Q(t,yW),188)),X0(e.a,mc,B3n(l(Q(t,bp),223))),uye(e.a,DIn(t)),rt(t,K1e,bP(e.a,t))}function Rke(e,t,n,r,a){var o,f,g,w,E,C,L,B,z,V,J,te,fe;for(L=new Pr,f=new bt,Spt(e,n,e.d.Ag(),f,L),Spt(e,r,e.d.Bg(),f,L),e.b=.2*(J=D2t(Dc(new bn(null,new kn(f,16)),new Tte)),te=D2t(Dc(new bn(null,new kn(f,16)),new Cte)),b.Math.min(J,te)),o=0,g=0;g=2&&(fe=X2t(f,!0,B),!e.e&&(e.e=new sXe(e)),q5n(e.e,fe,f,e.b)),Ogt(f,B),qMn(f),z=-1,C=new G(f);C.ag)}function Avt(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te;for(E=gs,C=gs,g=ia,w=ia,B=new G(t.i);B.a-1){for(a=Rr(g,0);a.b!=a.d.c;)r=l(Br(a),131),r.v=f;for(;g.b!=0;)for(r=l(kue(g,0),131),n=new G(r.i);n.a-1){for(o=new G(g);o.a0)&&(Y(w,b.Math.min(w.o,a.o-1)),q(w,w.i-1),w.i==0&&$n(g.c,w))}}function Mvt(e,t,n,r,a){var o,f,g,w;return w=gs,f=!1,g=Lke(e,ma(new lt(t.a,t.b),e),Oi(new lt(n.a,n.b),a),ma(new lt(r.a,r.b),n)),o=!!g&&!(b.Math.abs(g.a-e.a)<=Zw&&b.Math.abs(g.b-e.b)<=Zw||b.Math.abs(g.a-t.a)<=Zw&&b.Math.abs(g.b-t.b)<=Zw),g=Lke(e,ma(new lt(t.a,t.b),e),n,a),g&&((b.Math.abs(g.a-e.a)<=Zw&&b.Math.abs(g.b-e.b)<=Zw)==(b.Math.abs(g.a-t.a)<=Zw&&b.Math.abs(g.b-t.b)<=Zw)||o?w=b.Math.min(w,eA(ma(g,n))):f=!0),g=Lke(e,ma(new lt(t.a,t.b),e),r,a),g&&(f||(b.Math.abs(g.a-e.a)<=Zw&&b.Math.abs(g.b-e.b)<=Zw)==(b.Math.abs(g.a-t.a)<=Zw&&b.Math.abs(g.b-t.b)<=Zw)||o)&&(w=b.Math.min(w,eA(ma(g,r)))),w}function Dvt(e){sw(e,new Xm(Uz(nw(Zv(tw(ew(new x1,Mb),A3t),"Minimizes the stress within a layout using stress majorization. Stress exists if the euclidean distance between a pair of nodes doesn't match their graph theoretic distance, that is, the shortest path between the two nodes. The method allows to specify individual edge lengths."),new y1),Yu))),gt(e,Mb,hL,It(lAe)),gt(e,Mb,cG,(Hn(),!0)),gt(e,Mb,x6,It(d8t)),gt(e,Mb,Px,It(g8t)),gt(e,Mb,Nx,It(p8t)),gt(e,Mb,fT,It(f8t)),gt(e,Mb,fL,It(fAe)),gt(e,Mb,dT,It(b8t)),gt(e,Mb,PEe,It(uAe)),gt(e,Mb,FEe,It(oAe)),gt(e,Mb,REe,It(cAe)),gt(e,Mb,jEe,It(hAe)),gt(e,Mb,BEe,It(TK))}function HMn(e){var t,n,r,a,o,f,g,w;for(t=null,r=new G(e);r.a0&&n.c==0&&(!t&&(t=new bt),$n(t.c,n));if(t)for(;t.c.length!=0;){if(n=l(t2(t,0),239),n.b&&n.b.c.length>0){for(o=(!n.b&&(n.b=new bt),new G(n.b));o.agc(e,n,0))return new ca(a,n)}else if(ze(L1(a.g,a.d[0]).a)>ze(L1(n.g,n.d[0]).a))return new ca(a,n)}for(g=(!n.e&&(n.e=new bt),n.e).Kc();g.Ob();)f=l(g.Pb(),239),w=(!f.b&&(f.b=new bt),f.b),Ey(0,w.c.length),x_(w.c,0,n),f.c==w.c.length&&$n(t.c,f)}return null}function VMn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe;for(t.Ug("Interactive crossing minimization",1),f=0,o=new G(e.b);o.a0&&(n+=w.n.a+w.o.a/2,++L),V=new G(w.j);V.a0&&(n/=L),fe=We(Na,Zo,28,r.a.c.length,15,1),g=0,E=new G(r.a);E.a=g&&a<=w)g<=a&&o<=w?r+=2:g<=a?(e.b[r]=w+1,f+=2):o<=w?(n[C++]=a,n[C++]=g-1,r+=2):(n[C++]=a,n[C++]=g-1,e.b[r]=w+1,f+=2);else if(w2?(C=new bt,ra(C,new Zp(fe,1,fe.b)),o=vwt(C,Me+e.a),Te=new Gue(o),pc(Te,t),$n(n.c,Te)):r?Te=l(cr(e.b,cg(t)),272):Te=l(cr(e.b,Eb(t)),272),w=cg(t),r&&(w=Eb(t)),f=H9n(te,w),E=Me+e.a,f.a?(E+=b.Math.abs(te.b-L.b),J=new lt(L.a,(L.b+te.b)/2)):(E+=b.Math.abs(te.a-L.a),J=new lt((L.a+te.a)/2,L.b)),r?ki(e.d,t,new nxe(Te,f,J,E)):ki(e.c,t,new nxe(Te,f,J,E)),ki(e.b,t,Te),V=(!t.n&&(t.n=new nt(ec,t,1,7)),t.n),z=new or(V);z.e!=z.i.gc();)B=l(gr(z),135),a=uP(e,B,!0,0,0),$n(n.c,a)}function UMn(e){var t,n,r,a,o,f,g;if(!e.A.dc()){if(e.A.Hc((mh(),iF))&&(l(Qo(e.b,(Ct(),Qn)),127).k=!0,l(Qo(e.b,Dr),127).k=!0,t=e.q!=(Ra(),Tg)&&e.q!=Mu,_z(l(Qo(e.b,ar),127),t),_z(l(Qo(e.b,er),127),t),_z(e.g,t),e.A.Hc(Cv)&&(l(Qo(e.b,Qn),127).j=!0,l(Qo(e.b,Dr),127).j=!0,l(Qo(e.b,ar),127).k=!0,l(Qo(e.b,er),127).k=!0,e.g.k=!0)),e.A.Hc(rF))for(e.a.j=!0,e.a.k=!0,e.g.j=!0,e.g.k=!0,g=e.B.Hc((Zl(),FM)),a=eue(),o=0,f=a.length;o0),l(C.a.Xb(C.c=--C.b),18));o!=r&&C.b>0;)e.a[o.p]=!0,e.a[r.p]=!0,o=(mr(C.b>0),l(C.a.Xb(C.c=--C.b),18));C.b>0&&ph(C)}}function Ovt(e,t,n){var r,a,o,f,g,w,E,C,L,B,z;if(!e.b)return!1;for(f=null,B=null,w=new Boe(null,null),a=1,w.a[1]=e.b,L=w;L.a[a];)E=a,g=B,B=L,L=L.a[a],r=e.a.Ne(t,L.d),a=r<0?0:1,r==0&&(!n.c||Jc(L.e,n.d))&&(f=L),!(L&&L.b)&&!oy(L.a[a])&&(oy(L.a[1-a])?B=B.a[E]=EV(L,a):oy(L.a[1-a])||(z=B.a[1-E],z&&(!oy(z.a[1-E])&&!oy(z.a[E])?(B.b=!1,z.b=!0,L.b=!0):(o=g.a[1]==B?1:0,oy(z.a[E])?g.a[o]=uct(B,E):oy(z.a[1-E])&&(g.a[o]=EV(B,E)),L.b=g.a[o].b=!0,g.a[o].a[0].b=!1,g.a[o].a[1].b=!1))));return f&&(n.b=!0,n.d=f.e,L!=f&&(C=new Boe(L.d,L.e),Wxn(e,w,f,C),B==f&&(B=C)),B.a[B.a[1]==L?1:0]=L.a[L.a[0]?0:1],--e.c),e.b=w.a[1],e.b&&(e.b.b=!1),n.b}function WMn(e){var t,n,r,a,o,f,g,w,E,C,L,B;for(a=new G(e.a.a.b);a.a0?a-=864e5:a+=864e5,w=new Kye(bo(Zc(t.q.getTime()),a))),C=new S5,E=e.a.length,o=0;o=97&&r<=122||r>=65&&r<=90){for(f=o+1;f=E)throw ue(new Yn("Missing trailing '"));f+1=14&&C<=16))?t.a._b(r)?(n.a?hi(n.a,n.b):n.a=new Th(n.d),N_(n.a,"[...]")):(g=jm(r),E=new U_(t),Jg(n,Pvt(g,E))):De(r,183)?Jg(n,Skn(l(r,183))):De(r,195)?Jg(n,hxn(l(r,195))):De(r,201)?Jg(n,x9n(l(r,201))):De(r,2111)?Jg(n,fxn(l(r,2111))):De(r,53)?Jg(n,Ckn(l(r,53))):De(r,376)?Jg(n,Hkn(l(r,376))):De(r,846)?Jg(n,Tkn(l(r,846))):De(r,109)&&Jg(n,Ekn(l(r,109))):Jg(n,r==null?ul:xc(r));return n.a?n.e.length==0?n.a.a:n.a.a+(""+n.e):n.c}function JE(e,t){var n,r,a,o;o=e.F,t==null?(e.F=null,CE(e,null)):(e.F=(nr(t),t),r=pd(t,cl(60)),r!=-1?(a=(Ga(0,r,t.length),t.substr(0,r)),pd(t,cl(46))==-1&&!vn(a,Cx)&&!vn(a,SL)&&!vn(a,GG)&&!vn(a,_L)&&!vn(a,AL)&&!vn(a,LL)&&!vn(a,ML)&&!vn(a,DL)&&(a=p5t),n=Rq(t,cl(62)),n!=-1&&(a+=""+(Xn(n+1,t.length+1),t.substr(n+1))),CE(e,a)):(a=t,pd(t,cl(46))==-1&&(r=pd(t,cl(91)),r!=-1&&(a=(Ga(0,r,t.length),t.substr(0,r))),!vn(a,Cx)&&!vn(a,SL)&&!vn(a,GG)&&!vn(a,_L)&&!vn(a,AL)&&!vn(a,LL)&&!vn(a,ML)&&!vn(a,DL)?(a=p5t,r!=-1&&(a+=""+(Xn(r,t.length+1),t.substr(r)))):a=t),CE(e,a),a==t&&(e.F=e.D))),e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,5,o,t))}function Bvt(e,t){var n,r,a,o,f,g,w,E,C,L;if(w=t.length-1,g=(Xn(w,t.length),t.charCodeAt(w)),g==93){if(f=pd(t,cl(91)),f>=0)return a=Z4n(e,(Ga(1,f,t.length),t.substr(1,f-1))),C=(Ga(f+1,w,t.length),t.substr(f+1,w-(f+1))),CIn(e,C,a)}else{if(n=-1,ZSe==null&&(ZSe=new RegExp("\\d")),ZSe.test(String.fromCharCode(g))&&(n=h4e(t,cl(46),w-1),n>=0)){r=l(Moe(e,Tht(e,(Ga(1,n,t.length),t.substr(1,n-1))),!1),61),E=0;try{E=Oh((Xn(n+1,t.length+1),t.substr(n+1)),lo,Ii)}catch(B){throw B=bs(B),De(B,130)?(o=B,ue(new nV(o))):ue(B)}if(E>16==-10?n=l(e.Cb,292).Yk(t,n):e.Db>>16==-15&&(!t&&(t=(Tn(),td)),!E&&(E=(Tn(),td)),e.Cb.Yh()&&(w=new Zg(e.Cb,1,13,E,t,f2(Xl(l(e.Cb,62)),e),!1),n?n.nj(w):n=w));else if(De(e.Cb,90))e.Db>>16==-23&&(De(t,90)||(t=(Tn(),Kf)),De(E,90)||(E=(Tn(),Kf)),e.Cb.Yh()&&(w=new Zg(e.Cb,1,10,E,t,f2(du(l(e.Cb,29)),e),!1),n?n.nj(w):n=w));else if(De(e.Cb,457))for(g=l(e.Cb,850),f=(!g.b&&(g.b=new Pz(new Vie)),g.b),o=(r=new qm(new Sr(f.a).a),new Bz(r));o.a.b;)a=l(Nw(o.a).ld(),89),n=ZE(a,SU(a,g),n)}return n}function ZMn(e,t){var n,r,a,o,f,g,w,E,C,L,B;for(f=Rt(Bt(at(e,(Nt(),b4)))),B=l(at(e,v4),21),w=!1,E=!1,L=new or((!e.c&&(e.c=new nt(Hl,e,9,9)),e.c));L.e!=L.i.gc()&&(!w||!E);){for(o=l(gr(L),123),g=0,a=rg(Lh(he(le(Fh,1),Rn,20,0,[(!o.d&&(o.d=new Ln(js,o,8,5)),o.d),(!o.e&&(o.e=new Ln(js,o,7,4)),o.e)])));jr(a)&&(r=l(xr(a),74),C=f&&qw(r)&&Rt(Bt(at(r,gv))),n=gvt((!r.b&&(r.b=new Ln(_r,r,4,7)),r.b),o)?e==ds(bc(l(Oe((!r.c&&(r.c=new Ln(_r,r,5,8)),r.c),0),84))):e==ds(bc(l(Oe((!r.b&&(r.b=new Ln(_r,r,4,7)),r.b),0),84))),!((C||n)&&(++g,g>1))););(g>0||B.Hc((Rl(),vp))&&(!o.n&&(o.n=new nt(ec,o,1,7)),o.n).i>0)&&(w=!0),g>1&&(E=!0)}w&&t.Fc((Ho(),vf)),E&&t.Fc((Ho(),UL))}function Fvt(e){var t,n,r,a,o,f,g,w,E,C,L,B;if(B=l(at(e,(pi(),kv)),21),B.dc())return null;if(g=0,f=0,B.Hc((mh(),iF))){for(C=l(at(e,_M),101),r=2,n=2,a=2,o=2,t=ds(e)?l(at(ds(e),xv),88):l(at(e,xv),88),E=new or((!e.c&&(e.c=new nt(Hl,e,9,9)),e.c));E.e!=E.i.gc();)if(w=l(gr(E),123),L=l(at(w,s7),64),L==(Ct(),Pc)&&(L=Eke(w,t),Hi(w,s7,L)),C==(Ra(),Mu))switch(L.g){case 1:r=b.Math.max(r,w.i+w.g);break;case 2:n=b.Math.max(n,w.j+w.f);break;case 3:a=b.Math.max(a,w.i+w.g);break;case 4:o=b.Math.max(o,w.j+w.f)}else switch(L.g){case 1:r+=w.g+2;break;case 2:n+=w.f+2;break;case 3:a+=w.g+2;break;case 4:o+=w.f+2}g=b.Math.max(r,a),f=b.Math.max(n,o)}return Gw(e,g,f,!0,!0)}function Sle(e,t,n,r,a){var o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e;for(Te=l(yc(lV(Fi(new bn(null,new kn(t.d,16)),new CYe(n)),new SYe(n)),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[(Fl(),Ec)]))),15),L=Ii,C=lo,w=new G(t.b.j);w.a0,E?E&&(B=fe.p,f?++B:--B,L=l(jt(fe.c.a,B),10),r=o0t(L),z=!(Xue(r,ot,n[0])||Dst(r,ot,n[0]))):z=!0),V=!1,Ze=t.D.i,Ze&&Ze.c&&g.e&&(C=f&&Ze.p>0||!f&&Ze.p=0){for(w=null,g=new Ua(C.a,E+1);g.bf?1:uw(isNaN(0),isNaN(f)))<0&&(f0(Nd),(b.Math.abs(f-1)<=Nd||f==1||isNaN(f)&&isNaN(1)?0:f<1?-1:f>1?1:uw(isNaN(f),isNaN(1)))<0)&&(f0(Nd),(b.Math.abs(0-g)<=Nd||g==0||isNaN(0)&&isNaN(g)?0:0g?1:uw(isNaN(0),isNaN(g)))<0)&&(f0(Nd),(b.Math.abs(g-1)<=Nd||g==1||isNaN(g)&&isNaN(1)?0:g<1?-1:g>1?1:uw(isNaN(g),isNaN(1)))<0)),o)}function sDn(e){var t,n,r,a;if(n=e.D!=null?e.D:e.B,t=pd(n,cl(91)),t!=-1){r=(Ga(0,t,n.length),n.substr(0,t)),a=new Up;do a.a+="[";while((t=Nk(n,91,++t))!=-1);vn(r,Cx)?a.a+="Z":vn(r,SL)?a.a+="B":vn(r,GG)?a.a+="C":vn(r,_L)?a.a+="D":vn(r,AL)?a.a+="F":vn(r,LL)?a.a+="I":vn(r,ML)?a.a+="J":vn(r,DL)?a.a+="S":(a.a+="L",a.a+=""+r,a.a+=";");try{return null}catch(o){if(o=bs(o),!De(o,63))throw ue(o)}}else if(pd(n,cl(46))==-1){if(vn(n,Cx))return ih;if(vn(n,SL))return Al;if(vn(n,GG))return kf;if(vn(n,_L))return Na;if(vn(n,AL))return B4;if(vn(n,LL))return Vr;if(vn(n,ML))return nm;if(vn(n,DL))return h7}return null}function aDn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St;for(e.e=t,g=aEn(t),ot=new bt,r=new G(g);r.a=0&&J=E.c.c.length?C=u6e((Zn(),Ps),Aa):C=u6e((Zn(),Aa),Aa),C*=2,o=n.a.g,n.a.g=b.Math.max(o,o+(C-o)),f=n.b.g,n.b.g=b.Math.max(f,f+(C-f)),a=t}}function lDn(e){var t,n,r,a;for(Is(Fi(new bn(null,new kn(e.a.b,16)),new Oj),new aee),U8n(e),Is(Fi(new bn(null,new kn(e.a.b,16)),new oee),new cee),e.c==(ip(),s9)&&(Is(Fi(Dc(new bn(null,new kn(new br(e.f),1)),new uee),new lee),new vYe(e)),Is(Fi(fc(Dc(Dc(new bn(null,new kn(e.d.b,16)),new hee),new Nj),new fee),new Pj),new yYe(e))),a=new lt(gs,gs),t=new lt(ia,ia),r=new G(e.a.b);r.a0&&(t.a+=Co),GU(l(gr(g),167),t);for(t.a+=Phe,w=new q8((!r.c&&(r.c=new Ln(_r,r,5,8)),r.c));w.e!=w.i.gc();)w.e>0&&(t.a+=Co),GU(l(gr(w),167),t);t.a+=")"}}function hDn(e,t,n){var r,a,o,f,g,w,E,C;for(w=new or((!e.a&&(e.a=new nt(Ai,e,10,11)),e.a));w.e!=w.i.gc();)for(g=l(gr(w),27),a=new hr(dr(cp(g).a.Kc(),new j));jr(a);){if(r=l(xr(a),74),!r.b&&(r.b=new Ln(_r,r,4,7)),!(r.b.i<=1&&(!r.c&&(r.c=new Ln(_r,r,5,8)),r.c.i<=1)))throw ue(new I8("Graph must not contain hyperedges."));if(!qA(r)&&g!=bc(l(Oe((!r.c&&(r.c=new Ln(_r,r,5,8)),r.c),0),84)))for(E=new jrt,pc(E,r),rt(E,(bb(),Hx),r),Aie(E,l(hc(zo(n.f,g)),153)),k8(E,l(cr(n,bc(l(Oe((!r.c&&(r.c=new Ln(_r,r,5,8)),r.c),0),84))),153)),vt(t.c,E),f=new or((!r.n&&(r.n=new nt(ec,r,1,7)),r.n));f.e!=f.i.gc();)o=l(gr(f),135),C=new zct(E,o.a),pc(C,o),rt(C,Hx,o),C.e.a=b.Math.max(o.g,1),C.e.b=b.Math.max(o.f,1),Ake(C),vt(t.d,C)}}function fDn(e,t,n){var r,a,o,f,g,w,E,C,L,B;switch(n.Ug("Node promotion heuristic",1),e.i=t,e.r=l(Q(t,(Nt(),zb)),243),e.r!=(Nf(),v3)&&e.r!=x4?jDn(e):hSn(e),C=l(Q(e.i,HMe),17).a,o=new hd,e.r.g){case 2:case 1:QE(e,o);break;case 3:for(e.r=LW,QE(e,o),w=0,g=new G(e.b);g.ae.k&&(e.r=AB,QE(e,o));break;case 4:for(e.r=LW,QE(e,o),E=0,a=new G(e.c);a.ae.n&&(e.r=LB,QE(e,o));break;case 6:B=ua(b.Math.ceil(e.g.length*C/100)),QE(e,new aYe(B));break;case 5:L=ua(b.Math.ceil(e.e*C/100)),QE(e,new oYe(L));break;case 8:xwt(e,!0);break;case 9:xwt(e,!1);break;default:QE(e,o)}e.r!=v3&&e.r!=x4?PCn(e,t):t_n(e,t),n.Vg()}function dDn(e){var t,n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me;for(L=e.b,C=new Ua(L,0),by(C,new yu(e)),Te=!1,f=1;C.b0&&(B.d+=C.n.d,B.d+=C.d),B.a>0&&(B.a+=C.n.a,B.a+=C.d),B.b>0&&(B.b+=C.n.b,B.b+=C.d),B.c>0&&(B.c+=C.n.c,B.c+=C.d),B}function jvt(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V;for(B=n.d,L=n.c,o=new lt(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a),f=o.b,E=new G(e.a);E.a0&&(e.c[t.c.p][t.p].d+=Jl(e.i,24)*MP*.07000000029802322-.03500000014901161,e.c[t.c.p][t.p].a=e.c[t.c.p][t.p].d/e.c[t.c.p][t.p].b)}}function bDn(e){var t,n,r,a,o,f,g,w,E,C,L,B,z,V,J,te;for(V=new G(e);V.ar.d,r.d=b.Math.max(r.d,t),g&&n&&(r.d=b.Math.max(r.d,r.a),r.a=r.d+a);break;case 3:n=t>r.a,r.a=b.Math.max(r.a,t),g&&n&&(r.a=b.Math.max(r.a,r.d),r.d=r.a+a);break;case 2:n=t>r.c,r.c=b.Math.max(r.c,t),g&&n&&(r.c=b.Math.max(r.b,r.c),r.b=r.c+a);break;case 4:n=t>r.b,r.b=b.Math.max(r.b,t),g&&n&&(r.b=b.Math.max(r.b,r.c),r.c=r.b+a)}}}function zvt(e,t){var n,r,a,o,f,g,w,E,C;return E="",t.length==0?e.ne(iEe,Rle,-1,-1):(C=$y(t),vn(C.substr(0,3),"at ")&&(C=(Xn(3,C.length+1),C.substr(3))),C=C.replace(/\[.*?\]/g,""),f=C.indexOf("("),f==-1?(f=C.indexOf("@"),f==-1?(E=C,C=""):(E=$y((Xn(f+1,C.length+1),C.substr(f+1))),C=$y((Ga(0,f,C.length),C.substr(0,f))))):(n=C.indexOf(")",f),E=(Ga(f+1,n,C.length),C.substr(f+1,n-(f+1))),C=$y((Ga(0,f,C.length),C.substr(0,f)))),f=pd(C,cl(46)),f!=-1&&(C=(Xn(f+1,C.length+1),C.substr(f+1))),(C.length==0||vn(C,"Anonymous function"))&&(C=Rle),g=Rq(E,cl(58)),a=h4e(E,cl(58),g-1),w=-1,r=-1,o=iEe,g!=-1&&a!=-1&&(o=(Ga(0,a,E.length),E.substr(0,a)),w=irt((Ga(a+1,g,E.length),E.substr(a+1,g-(a+1)))),r=irt((Xn(g+1,E.length+1),E.substr(g+1)))),e.ne(o,C,w,r))}function wDn(e){var t,n,r,a,o,f,g,w,E,C,L;for(E=new G(e);E.a0||C.j==er&&C.e.c.length-C.g.c.length<0)){t=!1;break}for(a=new G(C.g);a.a=E&&Ze>=te&&(B+=V.n.b+J.n.b+J.a.b-$e,++g));if(n)for(f=new G(Te.e);f.a=E&&Ze>=te&&(B+=V.n.b+J.n.b+J.a.b-$e,++g))}g>0&&(ot+=B/g,++z)}z>0?(t.a=a*ot/z,t.g=z):(t.a=0,t.g=0)}function xDn(e){var t,n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St;for(o=e.f.b,B=o.a,C=o.b,V=e.e.g,z=e.e.f,F5(e.e,o.a,o.b),ot=B/V,St=C/z,E=new or(EH(e.e));E.e!=E.i.gc();)w=l(gr(E),135),Uu(w,w.i*ot),Gu(w,w.j*St);for(Te=new or(Xae(e.e));Te.e!=Te.i.gc();)fe=l(gr(Te),123),$e=fe.i,Ze=fe.j,$e>0&&Uu(fe,$e*ot),Ze>0&&Gu(fe,Ze*St);for(mA(e.b,new zg),t=new bt,g=new qm(new Sr(e.c).a);g.b;)f=Nw(g),r=l(f.ld(),74),n=l(f.md(),407).a,a=l6(r,!1,!1),L=Ngt(cg(r),QN(a),n),dP(L,a),Me=Kgt(r),Me&&gc(t,Me,0)==-1&&($n(t.c,Me),kat(Me,(mr(L.b!=0),l(L.a.a.c,8)),n));for(te=new qm(new Sr(e.d).a);te.b;)J=Nw(te),r=l(J.ld(),74),n=l(J.md(),407).a,a=l6(r,!1,!1),L=Ngt(Eb(r),AN(QN(a)),n),L=AN(L),dP(L,a),Me=Wgt(r),Me&&gc(t,Me,0)==-1&&($n(t.c,Me),kat(Me,(mr(L.b!=0),l(L.c.b.c,8)),n))}function qvt(e,t,n,r){var a,o,f,g,w;return g=new zke(t),fCn(g,r),a=!0,e&&e.pf((pi(),xv))&&(o=l(e.of((pi(),xv)),88),a=o==(Js(),J1)||o==uc||o==vc),zbt(g,!1),Vu(g.e.Rf(),new v4e(g,!1,a)),uoe(g,g.f,(t1(),Gc),(Ct(),Qn)),uoe(g,g.f,Kc,Dr),uoe(g,g.g,Gc,er),uoe(g,g.g,Kc,ar),bdt(g,Qn),bdt(g,Dr),wat(g,ar),wat(g,er),py(),f=g.A.Hc((mh(),A4))&&g.B.Hc((Zl(),aF))?N1t(g):null,f&&xun(g.a,f),vDn(g),w7n(g),y7n(g),UMn(g),w_n(g),G7n(g),Jce(g,Qn),Jce(g,Dr),XSn(g),wLn(g),n&&(e5n(g),K7n(g),Jce(g,ar),Jce(g,er),w=g.B.Hc((Zl(),FM)),Opt(g,w,Qn),Opt(g,w,Dr),Npt(g,w,ar),Npt(g,w,er),Is(new bn(null,new kn(new gi(g.i),0)),new Fc),Is(Fi(new bn(null,b5e(g.r).a.oc()),new xa),new Ba),oxn(g),g.e.Pf(g.o),Is(new bn(null,b5e(g.r).a.oc()),new ga)),g.o}function kDn(e){var t,n,r,a,o,f,g,w,E,C,L,B,z,V,J;for(E=gs,r=new G(e.a.b);r.a1)for(z=new Ike(V,Me,r),to(Me,new Jet(e,z)),$n(f.c,z),L=Me.a.ec().Kc();L.Ob();)C=l(L.Pb(),42),al(o,C.b);if(g.a.gc()>1)for(z=new Ike(V,g,r),to(g,new Zet(e,z)),$n(f.c,z),L=g.a.ec().Kc();L.Ob();)C=l(L.Pb(),42),al(o,C.b)}}function SDn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe;if(J=e.n,te=e.o,B=e.d,L=ze(Ge(Py(e,(Nt(),ode)))),t){for(C=L*(t.gc()-1),z=0,w=t.Kc();w.Ob();)f=l(w.Pb(),10),C+=f.o.a,z=b.Math.max(z,f.o.b);for(fe=J.a-(C-te.a)/2,o=J.b-B.d+z,r=te.a/(t.gc()+1),a=r,g=t.Kc();g.Ob();)f=l(g.Pb(),10),f.n.a=fe,f.n.b=o-f.o.b,fe+=f.o.a+L,E=Q2t(f),E.n.a=f.o.a/2-E.a.a,E.n.b=f.o.b,V=l(Q(f,(ft(),rW)),12),V.e.c.length+V.g.c.length==1&&(V.n.a=a-V.a.a,V.n.b=0,Mc(V,e)),a+=r}if(n){for(C=L*(n.gc()-1),z=0,w=n.Kc();w.Ob();)f=l(w.Pb(),10),C+=f.o.a,z=b.Math.max(z,f.o.b);for(fe=J.a-(C-te.a)/2,o=J.b+te.b+B.a-z,r=te.a/(n.gc()+1),a=r,g=n.Kc();g.Ob();)f=l(g.Pb(),10),f.n.a=fe,f.n.b=o,fe+=f.o.a+L,E=Q2t(f),E.n.a=f.o.a/2-E.a.a,E.n.b=0,V=l(Q(f,(ft(),rW)),12),V.e.c.length+V.g.c.length==1&&(V.n.a=a-V.a.a,V.n.b=te.b,Mc(V,e)),a+=r}}function _Dn(e,t){var n,r,a,o,f,g;if(l(Q(t,(ft(),Lu)),21).Hc((Ho(),vf))){for(g=new G(t.a);g.a=0&&f0&&(l(Qo(e.b,t),127).a.b=n)}function IDn(e,t,n,r){var a,o,f,g,w,E,C,L,B,z,V,J;if(B=ze(Ge(Q(e,(Nt(),GT)))),z=ze(Ge(Q(e,KT))),L=ze(Ge(Q(e,y4))),g=e.o,o=l(jt(e.j,0),12),f=o.n,J=Y9n(o,L),!!J){if(t.Hc((Rl(),vp)))switch(l(Q(e,(ft(),Wc)),64).g){case 1:J.c=(g.a-J.b)/2-f.a,J.d=z;break;case 3:J.c=(g.a-J.b)/2-f.a,J.d=-z-J.a;break;case 2:n&&o.e.c.length==0&&o.g.c.length==0?(C=r?J.a:l(jt(o.f,0),72).o.b,J.d=(g.b-C)/2-f.b):J.d=g.b+z-f.b,J.c=-B-J.b;break;case 4:n&&o.e.c.length==0&&o.g.c.length==0?(C=r?J.a:l(jt(o.f,0),72).o.b,J.d=(g.b-C)/2-f.b):J.d=g.b+z-f.b,J.c=B}else if(t.Hc(Yb))switch(l(Q(e,(ft(),Wc)),64).g){case 1:case 3:J.c=f.a+B;break;case 2:case 4:n&&!o.c?(C=r?J.a:l(jt(o.f,0),72).o.b,J.d=(g.b-C)/2-f.b):J.d=f.b+z}for(a=J.d,E=new G(o.f);E.a=t.length)return{done:!0};var a=t[r++];return{value:[a,n.get(a)],done:!1}}}},LSn()||(e.prototype.createObject=function(){return{}},e.prototype.get=function(t){return this.obj[":"+t]},e.prototype.set=function(t,n){this.obj[":"+t]=n},e.prototype[lhe]=function(t){delete this.obj[":"+t]},e.prototype.keys=function(){var t=[];for(var n in this.obj)n.charCodeAt(0)==58&&t.push(n.substring(1));return t}),e}function Qi(){Qi=U,gM=new Ui(NEe),new vs("DEPTH",pt(0)),Pde=new vs("FAN",pt(0)),nIe=new vs(gyt,pt(0)),Vb=new vs("ROOT",(Hn(),!1)),Rde=new vs("LEFTNEIGHBOR",null),dTt=new vs("RIGHTNEIGHBOR",null),BW=new vs("LEFTSIBLING",null),jde=new vs("RIGHTSIBLING",null),Nde=new vs("DUMMY",!1),new vs("LEVEL",pt(0)),sIe=new vs("REMOVABLE_EDGES",new os),PB=new vs("XCOOR",pt(0)),BB=new vs("YCOOR",pt(0)),FW=new vs("LEVELHEIGHT",0),c1=new vs("LEVELMIN",0),k0=new vs("LEVELMAX",0),Bde=new vs("GRAPH_XMIN",0),Fde=new vs("GRAPH_YMIN",0),rIe=new vs("GRAPH_XMAX",0),iIe=new vs("GRAPH_YMAX",0),tIe=new vs("COMPACT_LEVEL_ASCENSION",!1),Ode=new vs("COMPACT_CONSTRAINTS",new bt),dM=new vs("ID",""),pM=new vs("POSITION",pt(0)),C2=new vs("PRELIM",0),JT=new vs("MODIFIER",0),QT=new Ui(S3t),NB=new Ui(_3t)}function BDn(e){kke();var t,n,r,a,o,f,g,w,E,C,L,B,z,V,J,te;if(e==null)return null;if(L=e.length*8,L==0)return"";for(g=L%24,z=L/24|0,B=g!=0?z+1:z,o=null,o=We(kf,Ad,28,B*4,15,1),E=0,C=0,t=0,n=0,r=0,f=0,a=0,w=0;w>24,E=(t&3)<<24>>24,V=t&-128?(t>>2^192)<<24>>24:t>>2<<24>>24,J=n&-128?(n>>4^240)<<24>>24:n>>4<<24>>24,te=r&-128?(r>>6^252)<<24>>24:r>>6<<24>>24,o[f++]=N2[V],o[f++]=N2[J|E<<4],o[f++]=N2[C<<2|te],o[f++]=N2[r&63];return g==8?(t=e[a],E=(t&3)<<24>>24,V=t&-128?(t>>2^192)<<24>>24:t>>2<<24>>24,o[f++]=N2[V],o[f++]=N2[E<<4],o[f++]=61,o[f++]=61):g==16&&(t=e[a],n=e[a+1],C=(n&15)<<24>>24,E=(t&3)<<24>>24,V=t&-128?(t>>2^192)<<24>>24:t>>2<<24>>24,J=n&-128?(n>>4^240)<<24>>24:n>>4<<24>>24,o[f++]=N2[V],o[f++]=N2[J|E<<4],o[f++]=N2[C<<2],o[f++]=61),If(o,0,o.length)}function FDn(e,t){var n,r,a,o,f,g,w;if(e.e==0&&e.p>0&&(e.p=-(e.p-1)),e.p>lo&&c6e(t,e.p-Lb),f=t.q.getDate(),YO(t,1),e.k>=0&&C2n(t,e.k),e.c>=0?YO(t,e.c):e.k>=0?(w=new R7e(t.q.getFullYear()-Lb,t.q.getMonth(),35),r=35-w.q.getDate(),YO(t,b.Math.min(r,f))):YO(t,f),e.f<0&&(e.f=t.q.getHours()),e.b>0&&e.f<12&&(e.f+=12),bhn(t,e.f==24&&e.g?0:e.f),e.j>=0&&ovn(t,e.j),e.n>=0&&wvn(t,e.n),e.i>=0&&Qtt(t,bo(mo(KN(Zc(t.q.getTime()),b2),b2),e.i)),e.a&&(a=new Qz,c6e(a,a.q.getFullYear()-Lb-80),fse(Zc(t.q.getTime()),Zc(a.q.getTime()))&&c6e(t,a.q.getFullYear()-Lb+100)),e.d>=0){if(e.c==-1)n=(7+e.d-t.q.getDay())%7,n>3&&(n-=7),g=t.q.getMonth(),YO(t,t.q.getDate()+n),t.q.getMonth()!=g&&YO(t,t.q.getDate()+(n>0?-7:7));else if(t.q.getDay()!=e.d)return!1}return e.o>lo&&(o=t.q.getTimezoneOffset(),Qtt(t,bo(Zc(t.q.getTime()),(e.o-o)*60*b2))),!0}function Kvt(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e;if(a=Q(t,(ft(),zi)),!!De(a,207)){for(V=l(a,27),J=t.e,B=new Eo(t.c),o=t.d,B.a+=o.b,B.b+=o.d,$e=l(at(V,(Nt(),xW)),181),vl($e,(Zl(),uY))&&(z=l(at(V,WMe),107),Tie(z,o.a),mwe(z,o.d),Cie(z,o.b),x8(z,o.c)),n=new bt,C=new G(t.a);C.ar.c.length-1;)vt(r,new ca(y6,hCe));n=l(Q(a,$d),17).a,Ug(l(Q(e,y3),88))?(a.e.aze(Ge((Sn(n,r.c.length),l(r.c[n],42)).b))&&ct((Sn(n,r.c.length),l(r.c[n],42)),a.e.a+a.f.a)):(a.e.bze(Ge((Sn(n,r.c.length),l(r.c[n],42)).b))&&ct((Sn(n,r.c.length),l(r.c[n],42)),a.e.b+a.f.b))}for(o=Rr(e.b,0);o.b!=o.d.c;)a=l(Br(o),40),n=l(Q(a,(Hc(),$d)),17).a,rt(a,(Qi(),c1),Ge((Sn(n,r.c.length),l(r.c[n],42)).a)),rt(a,k0,Ge((Sn(n,r.c.length),l(r.c[n],42)).b));t.Vg()}function jDn(e){var t,n,r,a,o,f,g,w,E,C,L,B,z,V,J;for(e.o=ze(Ge(Q(e.i,(Nt(),m3)))),e.f=ze(Ge(Q(e.i,vv))),e.j=e.i.b.c.length,g=e.j-1,B=0,e.k=0,e.n=0,e.b=O1(We(ro,dt,17,e.j,0,1)),e.c=O1(We(ta,dt,345,e.j,7,1)),f=new G(e.i.b);f.a0&&vt(e.q,C),vt(e.p,C);t-=r,z=w+t,E+=t*e.f,rf(e.b,g,pt(z)),rf(e.c,g,E),e.k=b.Math.max(e.k,z),e.n=b.Math.max(e.n,E),e.e+=t,t+=J}}function Ct(){Ct=U;var e;Pc=new wO(cL,0),Qn=new wO(nG,1),ar=new wO(yhe,2),Dr=new wO(xhe,3),er=new wO(khe,4),ed=(Cn(),new Ek((e=l(K0(Oo),9),new Zh(e,l(c0(e,e.length),9),0)))),_0=a2(rs(Qn,he(le(Oo,1),au,64,0,[]))),yf=a2(rs(ar,he(le(Oo,1),au,64,0,[]))),$h=a2(rs(Dr,he(le(Oo,1),au,64,0,[]))),Hf=a2(rs(er,he(le(Oo,1),au,64,0,[]))),hl=a2(rs(Qn,he(le(Oo,1),au,64,0,[Dr]))),Ju=a2(rs(ar,he(le(Oo,1),au,64,0,[er]))),A0=a2(rs(Qn,he(le(Oo,1),au,64,0,[er]))),zl=a2(rs(Qn,he(le(Oo,1),au,64,0,[ar]))),zh=a2(rs(Dr,he(le(Oo,1),au,64,0,[er]))),xf=a2(rs(ar,he(le(Oo,1),au,64,0,[Dr]))),ql=a2(rs(Qn,he(le(Oo,1),au,64,0,[ar,er]))),ll=a2(rs(ar,he(le(Oo,1),au,64,0,[Dr,er]))),fl=a2(rs(Qn,he(le(Oo,1),au,64,0,[Dr,er]))),_l=a2(rs(Qn,he(le(Oo,1),au,64,0,[ar,Dr]))),Du=a2(rs(Qn,he(le(Oo,1),au,64,0,[ar,Dr,er])))}function $Dn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St;for(t.Ug(K3t,1),J=new bt,ot=new bt,E=new G(e.b);E.a0&&(Me-=z),Oke(f,Me),C=0,B=new G(f.a);B.a0),g.a.Xb(g.c=--g.b)),w=.4*r*C,!o&&g.b0&&(w=(Xn(0,t.length),t.charCodeAt(0)),w!=64)){if(w==37&&(L=t.lastIndexOf("%"),E=!1,L!=0&&(L==B-1||(E=(Xn(L+1,t.length),t.charCodeAt(L+1)==46))))){if(f=(Ga(1,L,t.length),t.substr(1,L-1)),Me=vn("%",f)?null:Vke(f),r=0,E)try{r=Oh((Xn(L+2,t.length+1),t.substr(L+2)),lo,Ii)}catch($e){throw $e=bs($e),De($e,130)?(g=$e,ue(new nV(g))):ue($e)}for(te=m7e(e.Gh());te.Ob();)if(V=MV(te),De(V,519)&&(a=l(V,598),Te=a.d,(Me==null?Te==null:vn(Me,Te))&&r--==0))return a;return null}if(C=t.lastIndexOf("."),z=C==-1?t:(Ga(0,C,t.length),t.substr(0,C)),n=0,C!=-1)try{n=Oh((Xn(C+1,t.length+1),t.substr(C+1)),lo,Ii)}catch($e){if($e=bs($e),De($e,130))z=t;else throw ue($e)}for(z=vn("%",z)?null:Vke(z),J=m7e(e.Gh());J.Ob();)if(V=MV(J),De(V,197)&&(o=l(V,197),fe=o.xe(),(z==null?fe==null:vn(z,fe))&&n--==0))return o;return null}return Bvt(e,t)}function WDn(e){var t,n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te;for(C=new Pr,w=new Cw,r=new G(e.a.a.b);r.at.d.c){if(z=e.c[t.a.d],te=e.c[L.a.d],z==te)continue;p0(s0(i0(a0(r0(new _f,1),100),z),te))}}}}}function YDn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot;if(B=l(l($i(e.r,t),21),87),t==(Ct(),ar)||t==er){Vvt(e,t);return}for(o=t==Qn?(Pw(),rB):(Pw(),iB),$e=t==Qn?(ol(),a1):(ol(),w0),n=l(Qo(e.b,t),127),r=n.i,a=r.c+Y5(he(le(Na,1),Zo,28,15,[n.n.b,e.C.b,e.k])),fe=r.c+r.b-Y5(he(le(Na,1),Zo,28,15,[n.n.c,e.C.c,e.k])),f=i3e(y4e(o),e.t),Te=t==Qn?ia:gs,L=B.Kc();L.Ob();)E=l(L.Pb(),117),!(!E.c||E.c.d.c.length<=0)&&(te=E.b.Mf(),J=E.e,z=E.c,V=z.i,V.b=(w=z.n,z.e.a+w.b+w.c),V.a=(g=z.n,z.e.b+g.d+g.a),UO($e,yEe),z.f=$e,Z0(z,(Bl(),v0)),V.c=J.a-(V.b-te.a)/2,Ze=b.Math.min(a,J.a),ot=b.Math.max(fe,J.a+te.a),V.cot&&(V.c=ot-V.b),vt(f.d,new Dae(V,h8e(f,V))),Te=t==Qn?b.Math.max(Te,J.b+E.b.Mf().b):b.Math.min(Te,J.b));for(Te+=t==Qn?e.t:-e.t,Me=M8e((f.e=Te,f)),Me>0&&(l(Qo(e.b,t),127).a.b=Me),C=B.Kc();C.Ob();)E=l(C.Pb(),117),!(!E.c||E.c.d.c.length<=0)&&(V=E.c.i,V.c-=E.e.a,V.d-=E.e.b)}function XDn(e){var t,n,r,a,o,f,g,w,E,C,L,B,z;for(t=new Pr,w=new or(e);w.e!=w.i.gc();){for(g=l(gr(w),27),n=new Ks,ki(X0e,g,n),z=new Bp,a=l(yc(new bn(null,new vw(new hr(dr(sP(g).a.Kc(),new j)))),dst(z,Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[(Fl(),Ec)])))),85),Kht(n,l(a.xc((Hn(),!0)),16),new Y3),r=l(yc(Fi(l(a.xc(!1),15).Lc(),new $9),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[Ec]))),15),f=r.Kc();f.Ob();)o=l(f.Pb(),74),B=Kgt(o),B&&(E=l(hc(zo(t.f,B)),21),E||(E=bbt(B),ju(t.f,B,E)),Ka(n,E));for(a=l(yc(new bn(null,new vw(new hr(dr(cp(g).a.Kc(),new j)))),dst(z,Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[Ec])))),85),Kht(n,l(a.xc(!0),16),new c5),r=l(yc(Fi(l(a.xc(!1),15).Lc(),new Eh),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[Ec]))),15),L=r.Kc();L.Ob();)C=l(L.Pb(),74),B=Wgt(C),B&&(E=l(hc(zo(t.f,B)),21),E||(E=bbt(B),ju(t.f,B,E)),Ka(n,E))}}function QDn(e,t){ble();var n,r,a,o,f,g,w,E,C,L,B,z,V,J;if(w=iu(e,0)<0,w&&(e=r2(e)),iu(e,0)==0)switch(t){case 0:return"0";case 1:return sT;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return z=new tb,t<0?z.a+="0E+":z.a+="0E",z.a+=t==lo?"2147483648":""+-t,z.a}C=18,L=We(kf,Ad,28,C+1,15,1),n=C,J=e;do E=J,J=KN(J,10),L[--n]=Yr(bo(48,Df(E,mo(J,10))))&Zs;while(iu(J,0)!=0);if(a=Df(Df(Df(C,n),t),1),t==0)return w&&(L[--n]=45),If(L,n,C-n);if(t>0&&iu(a,-6)>=0){if(iu(a,0)>=0){for(o=n+Yr(a),g=C-1;g>=o;g--)L[g+1]=L[g];return L[++o]=46,w&&(L[--n]=45),If(L,n,C-n+1)}for(f=2;fse(f,bo(r2(a),1));f++)L[--n]=48;return L[--n]=46,L[--n]=48,w&&(L[--n]=45),If(L,n,C-n)}return V=n+1,r=C,B=new S5,w&&(B.a+="-"),r-V>=1?(hb(B,L[n]),B.a+=".",B.a+=If(L,n+1,C-n-1)):B.a+=If(L,n,C-n),B.a+="E",iu(a,0)>0&&(B.a+="+"),B.a+=""+Y_(a),B.a}function Gw(e,t,n,r,a){var o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot;if(te=new lt(e.g,e.f),J=a9e(e),J.a=b.Math.max(J.a,t),J.b=b.Math.max(J.b,n),ot=J.a/te.a,C=J.b/te.b,$e=J.a-te.a,w=J.b-te.b,r)for(f=ds(e)?l(at(ds(e),(pi(),xv)),88):l(at(e,(pi(),xv)),88),g=qe(at(e,(pi(),_M)))===qe((Ra(),Mu)),Te=new or((!e.c&&(e.c=new nt(Hl,e,9,9)),e.c));Te.e!=Te.i.gc();)switch(fe=l(gr(Te),123),Me=l(at(fe,s7),64),Me==(Ct(),Pc)&&(Me=Eke(fe,f),Hi(fe,s7,Me)),Me.g){case 1:g||Uu(fe,fe.i*ot);break;case 2:Uu(fe,fe.i+$e),g||Gu(fe,fe.j*C);break;case 3:g||Uu(fe,fe.i*ot),Gu(fe,fe.j+w);break;case 4:g||Gu(fe,fe.j*C)}if(F5(e,J.a,J.b),a)for(B=new or((!e.n&&(e.n=new nt(ec,e,1,7)),e.n));B.e!=B.i.gc();)L=l(gr(B),135),z=L.i+L.g/2,V=L.j+L.f/2,Ze=z/te.a,E=V/te.b,Ze+E>=1&&(Ze-E>0&&V>=0?(Uu(L,L.i+$e),Gu(L,L.j+w*E)):Ze-E<0&&z>=0&&(Uu(L,L.i+$e*Ze),Gu(L,L.j+w)));return Hi(e,(pi(),kv),(mh(),o=l(K0(BM),9),new Zh(o,l(c0(o,o.length),9),0))),new lt(ot,C)}function Qvt(e){sw(e,new Xm(Uz(nw(Zv(tw(ew(new x1,gf),"ELK Radial"),'A radial layout provider which is based on the algorithm of Peter Eades published in "Drawing free trees.", published by International Institute for Advanced Study of Social Information Science, Fujitsu Limited in 1991. The radial layouter takes a tree and places the nodes in radial order around the root. The nodes of the same tree level are placed on the same radius.'),new fu),gf))),gt(e,gf,_G,It(uCt)),gt(e,gf,Jy,It(lCt)),gt(e,gf,x6,It(sCt)),gt(e,gf,Px,It(aCt)),gt(e,gf,Nx,It(oCt)),gt(e,gf,fT,It(iCt)),gt(e,gf,fL,It(NIe)),gt(e,gf,dT,It(cCt)),gt(e,gf,Cfe,It(Jde)),gt(e,gf,Tfe,It(Zde)),gt(e,gf,NG,It(BIe)),gt(e,gf,Sfe,It(ege)),gt(e,gf,_fe,It(FIe)),gt(e,gf,MCe,It(RIe)),gt(e,gf,LCe,It(PIe)),gt(e,gf,CCe,It(qW)),gt(e,gf,SCe,It(HW)),gt(e,gf,_Ce,It(FB)),gt(e,gf,ACe,It(jIe)),gt(e,gf,TCe,It(OIe))}function KU(e){var t,n,r,a,o,f,g,w,E,C,L;if(e==null)throw ue(new gd(ul));if(E=e,o=e.length,w=!1,o>0&&(t=(Xn(0,e.length),e.charCodeAt(0)),(t==45||t==43)&&(e=(Xn(1,e.length+1),e.substr(1)),--o,w=t==45)),o==0)throw ue(new gd(Yw+E+'"'));for(;e.length>0&&(Xn(0,e.length),e.charCodeAt(0)==48);)e=(Xn(1,e.length+1),e.substr(1)),--o;if(o>(Amt(),b6t)[10])throw ue(new gd(Yw+E+'"'));for(a=0;a0&&(L=-parseInt((Ga(0,r,e.length),e.substr(0,r)),10),e=(Xn(r,e.length+1),e.substr(r)),o-=r,n=!1);o>=f;){if(r=parseInt((Ga(0,f,e.length),e.substr(0,f)),10),e=(Xn(f,e.length+1),e.substr(f)),o-=f,n)n=!1;else{if(iu(L,g)<0)throw ue(new gd(Yw+E+'"'));L=mo(L,C)}L=Df(L,r)}if(iu(L,0)>0)throw ue(new gd(Yw+E+'"'));if(!w&&(L=r2(L),iu(L,0)<0))throw ue(new gd(Yw+E+'"'));return L}function Vke(e){kle();var t,n,r,a,o,f,g,w;if(e==null)return null;if(a=pd(e,cl(37)),a<0)return e;for(w=new Th((Ga(0,a,e.length),e.substr(0,a))),t=We(Al,C6,28,4,15,1),g=0,r=0,f=e.length;aa+2&&mce((Xn(a+1,e.length),e.charCodeAt(a+1)),kPe,EPe)&&mce((Xn(a+2,e.length),e.charCodeAt(a+2)),kPe,EPe))if(n=vdn((Xn(a+1,e.length),e.charCodeAt(a+1)),(Xn(a+2,e.length),e.charCodeAt(a+2))),a+=2,r>0?(n&192)==128?t[g++]=n<<24>>24:r=0:n>=128&&((n&224)==192?(t[g++]=n<<24>>24,r=2):(n&240)==224?(t[g++]=n<<24>>24,r=3):(n&248)==240&&(t[g++]=n<<24>>24,r=4)),r>0){if(g==r){switch(g){case 2:{hb(w,((t[0]&31)<<6|t[1]&63)&Zs);break}case 3:{hb(w,((t[0]&15)<<12|(t[1]&63)<<6|t[2]&63)&Zs);break}}g=0,r=0}}else{for(o=0;o=2){if((!e.a&&(e.a=new nt(cs,e,6,6)),e.a).i==0)n=(rb(),a=new rk,a),qr((!e.a&&(e.a=new nt(cs,e,6,6)),e.a),n);else if((!e.a&&(e.a=new nt(cs,e,6,6)),e.a).i>1)for(B=new q8((!e.a&&(e.a=new nt(cs,e,6,6)),e.a));B.e!=B.i.gc();)jA(B);dP(t,l(Oe((!e.a&&(e.a=new nt(cs,e,6,6)),e.a),0),166))}if(L)for(r=new or((!e.a&&(e.a=new nt(cs,e,6,6)),e.a));r.e!=r.i.gc();)for(n=l(gr(r),166),E=new or((!n.a&&(n.a=new Ys(qh,n,5)),n.a));E.e!=E.i.gc();)w=l(gr(E),377),g.a=b.Math.max(g.a,w.a),g.b=b.Math.max(g.b,w.b);for(f=new or((!e.n&&(e.n=new nt(ec,e,1,7)),e.n));f.e!=f.i.gc();)o=l(gr(f),135),C=l(at(o,MM),8),C&&Qh(o,C.a,C.b),L&&(g.a=b.Math.max(g.a,o.i+o.g),g.b=b.Math.max(g.b,o.j+o.f));return g}function Zvt(e,t,n,r,a){var o,f,g;if(eht(e,t),f=t[0],o=co(n.c,0),g=-1,z7e(n))if(r>0){if(f+r>e.length)return!1;g=kU((Ga(0,f+r,e.length),e.substr(0,f+r)),t)}else g=kU(e,t);switch(o){case 71:return g=o6(e,f,he(le(zt,1),dt,2,6,[Rwt,jwt]),t),a.e=g,!0;case 77:return dSn(e,t,a,g,f);case 76:return gSn(e,t,a,g,f);case 69:return skn(e,t,f,a);case 99:return akn(e,t,f,a);case 97:return g=o6(e,f,he(le(zt,1),dt,2,6,["AM","PM"]),t),a.b=g,!0;case 121:return pSn(e,t,f,g,n,a);case 100:return g<=0?!1:(a.c=g,!0);case 83:return g<0?!1:x5n(g,f,t[0],a);case 104:g==12&&(g=0);case 75:case 72:return g<0?!1:(a.f=g,a.g=!1,!0);case 107:return g<0?!1:(a.f=g,a.g=!0,!0);case 109:return g<0?!1:(a.j=g,!0);case 115:return g<0?!1:(a.n=g,!0);case 90:if(fcn[w]&&(te=w),L=new G(e.a.b);L.a1;){if(a=aCn(t),L=o.g,V=l(at(t,vM),107),J=ze(Ge(at(t,KW))),(!t.a&&(t.a=new nt(Ai,t,10,11)),t.a).i>1&&ze(Ge(at(t,(ug(),cge))))!=gs&&(o.c+(V.b+V.c))/(o.b+(V.d+V.a))1&&ze(Ge(at(t,(ug(),oge))))!=gs&&(o.c+(V.b+V.c))/(o.b+(V.d+V.a))>J&&Hi(a,(ug(),T4),b.Math.max(ze(Ge(at(t,mM))),ze(Ge(at(a,T4)))-ze(Ge(at(t,oge))))),z=new Q3e(r,C),w=wwt(z,a,B),E=w.g,E>=L&&E==E){for(f=0;f<(!a.a&&(a.a=new nt(Ai,a,10,11)),a.a).i;f++)Gpt(e,l(Oe((!a.a&&(a.a=new nt(Ai,a,10,11)),a.a),f),27),l(Oe((!t.a&&(t.a=new nt(Ai,t,10,11)),t.a),f),27));Sht(t,z),l2n(o,w.c),u2n(o,w.b)}--g}Hi(t,(ug(),ZT),o.b),Hi(t,Zx,o.c),n.Vg()}function tIn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te;for(t.Ug("Interactive node layering",1),n=new bt,B=new G(e.a);B.a=g){mr(Te.b>0),Te.a.Xb(Te.c=--Te.b);break}else te.a>w&&(r?(ra(r.b,te.b),r.a=b.Math.max(r.a,te.a),ph(Te)):(vt(te.b,C),te.c=b.Math.min(te.c,w),te.a=b.Math.max(te.a,g),r=te));r||(r=new GQe,r.c=w,r.a=g,by(Te,r),vt(r.b,C))}for(f=e.b,E=0,fe=new G(n);fe.az&&(o&&(ko(ot,B),ko(cn,pt(E.b-1))),oi=n.b,ws+=B+t,B=0,C=b.Math.max(C,n.b+n.c+ur)),Uu(g,oi),Gu(g,ws),C=b.Math.max(C,oi+ur+n.c),B=b.Math.max(B,L),oi+=ur+t;if(C=b.Math.max(C,r),jn=ws+B+n.a,jnDd,an=b.Math.abs(B.b-V.b)>Dd,(!n&&cn&&an||n&&(cn||an))&&ui(te.a,$e)),Ka(te.a,r),r.b==0?B=$e:B=(mr(r.b!=0),l(r.c.b.c,8)),z3n(z,L,J),Cft(a)==St&&(eo(St.i)!=a.a&&(J=new qa,n9e(J,eo(St.i),Te)),rt(te,Y1e,J)),E9n(z,te,Te),C.a.zc(z,C);po(te,Ze),Fa(te,St)}for(E=C.a.ec().Kc();E.Ob();)w=l(E.Pb(),18),po(w,null),Fa(w,null);t.Vg()}function iIn(e,t){var n,r,a,o,f,g,w,E,C,L,B;for(a=l(Q(e,(Hc(),y3)),88),C=a==(Js(),uc)||a==vc?Q1:vc,n=l(yc(Fi(new bn(null,new kn(e.b,16)),new pI),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[(Fl(),Ec)]))),15),w=l(yc(fc(n.Oc(),new dXe(t)),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[Ec]))),15),w.Gc(l(yc(fc(n.Oc(),new gXe(t)),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[Ec]))),16)),w.jd(new pXe(C)),B=new Kp(new bXe(a)),r=new Pr,g=w.Kc();g.Ob();)f=l(g.Pb(),240),E=l(f.a,40),Rt(Bt(f.c))?(B.a.zc(E,(Hn(),Pb))==null,new ba(B.a.Zc(E,!1)).a.gc()>0&&ki(r,E,l(new ba(B.a.Zc(E,!1)).a.Vc(),40)),new ba(B.a.ad(E,!0)).a.gc()>1&&ki(r,L1t(B,E),E)):(new ba(B.a.Zc(E,!1)).a.gc()>0&&(o=l(new ba(B.a.Zc(E,!1)).a.Vc(),40),qe(o)===qe(hc(zo(r.f,E)))&&l(Q(E,(Qi(),Ode)),15).Fc(o)),new ba(B.a.ad(E,!0)).a.gc()>1&&(L=L1t(B,E),qe(hc(zo(r.f,L)))===qe(E)&&l(Q(L,(Qi(),Ode)),15).Fc(E)),B.a.Bc(E)!=null)}function ewt(e){var t,n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e;if(e.gc()==1)return l(e.Xb(0),235);if(e.gc()<=0)return new KH;for(a=e.Kc();a.Ob();){for(n=l(a.Pb(),235),V=0,C=Ii,L=Ii,w=lo,E=lo,z=new G(n.e);z.ag&&(Me=0,$e+=f+fe,f=0),D_n(J,n,Me,$e),t=b.Math.max(t,Me+te.a),f=b.Math.max(f,te.b),Me+=te.a+fe;return J}function sIn(e){kke();var t,n,r,a,o,f,g,w,E,C,L,B,z,V,J,te;if(e==null||(o=iV(e),V=O4n(o),V%4!=0))return null;if(J=V/4|0,J==0)return We(Al,C6,28,0,15,1);for(L=null,t=0,n=0,r=0,a=0,f=0,g=0,w=0,E=0,z=0,B=0,C=0,L=We(Al,C6,28,J*3,15,1);z>4)<<24>>24,L[B++]=((n&15)<<4|r>>2&15)<<24>>24,L[B++]=(r<<6|a)<<24>>24}return!eO(f=o[C++])||!eO(g=o[C++])?null:(t=nd[f],n=nd[g],w=o[C++],E=o[C++],nd[w]==-1||nd[E]==-1?w==61&&E==61?n&15?null:(te=We(Al,C6,28,z*3+1,15,1),pu(L,0,te,0,z*3),te[B]=(t<<2|n>>4)<<24>>24,te):w!=61&&E==61?(r=nd[w],r&3?null:(te=We(Al,C6,28,z*3+2,15,1),pu(L,0,te,0,z*3),te[B++]=(t<<2|n>>4)<<24>>24,te[B]=((n&15)<<4|r>>2&15)<<24>>24,te)):null:(r=nd[w],a=nd[E],L[B++]=(t<<2|n>>4)<<24>>24,L[B++]=((n&15)<<4|r>>2&15)<<24>>24,L[B++]=(r<<6|a)<<24>>24,L))}function aIn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze;for(t.Ug(K3t,1),V=l(Q(e,(Nt(),bp)),223),a=new G(e.b);a.a=2){for(J=!0,B=new G(o.j),n=l(re(B),12),z=null;B.a0)if(r=L.gc(),E=ua(b.Math.floor((r+1)/2))-1,a=ua(b.Math.ceil((r+1)/2))-1,t.o==Y1)for(C=a;C>=E;C--)t.a[$e.p]==$e&&(J=l(L.Xb(C),42),V=l(J.a,10),!W0(n,J.b)&&z>e.b.e[V.p]&&(t.a[V.p]=$e,t.g[$e.p]=t.g[V.p],t.a[$e.p]=t.g[$e.p],t.f[t.g[$e.p].p]=(Hn(),!!(Rt(t.f[t.g[$e.p].p])&$e.k==(Zn(),Aa))),z=e.b.e[V.p]));else for(C=E;C<=a;C++)t.a[$e.p]==$e&&(fe=l(L.Xb(C),42),te=l(fe.a,10),!W0(n,fe.b)&&z0&&(a=l(jt(te.c.a,ot-1),10),f=e.i[a.p],cn=b.Math.ceil(j5(e.n,a,te)),o=Ze.a.e-te.d.d-(f.a.e+a.o.b+a.d.a)-cn),E=gs,ot0&&St.a.e.e-St.a.a-(St.b.e.e-St.b.a)<0,V=Me.a.e.e-Me.a.a-(Me.b.e.e-Me.b.a)<0&&St.a.e.e-St.a.a-(St.b.e.e-St.b.a)>0,z=Me.a.e.e+Me.b.aSt.b.e.e+St.a.a,$e=0,!J&&!V&&(B?o+L>0?$e=L:E-r>0&&($e=r):z&&(o+g>0?$e=g:E-Te>0&&($e=Te))),Ze.a.e+=$e,Ze.b&&(Ze.d.e+=$e),!1))}function nwt(e,t,n){var r,a,o,f,g,w,E,C,L,B;if(r=new ef(t.Lf().a,t.Lf().b,t.Mf().a,t.Mf().b),a=new $8,e.c)for(f=new G(t.Rf());f.aE&&(r.a+=Mnt(We(kf,Ad,28,-E,15,1))),r.a+="Is",pd(w,cl(32))>=0)for(a=0;a=r.o.b/2}else Te=!L;Te?(fe=l(Q(r,(ft(),Qx)),15),fe?B?o=fe:(a=l(Q(r,Gx),15),a?fe.gc()<=a.gc()?o=fe:o=a:(o=new bt,rt(r,Gx,o))):(o=new bt,rt(r,Qx,o))):(a=l(Q(r,(ft(),Gx)),15),a?L?o=a:(fe=l(Q(r,Qx),15),fe?a.gc()<=fe.gc()?o=a:o=fe:(o=new bt,rt(r,Qx,o))):(o=new bt,rt(r,Gx,o))),o.Fc(e),rt(e,(ft(),rW),n),t.d==n?(Fa(t,null),n.e.c.length+n.g.c.length==0&&Mc(n,null),Tyn(n)):(po(t,null),n.e.c.length+n.g.c.length==0&&Mc(n,null)),Ch(t.a)}function lIn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn,jn,ur,oi,ws;for(n.Ug("MinWidth layering",1),z=t.b,St=t.a,ws=l(Q(t,(Nt(),zMe)),17).a,g=l(Q(t,qMe),17).a,e.b=ze(Ge(Q(t,x0))),e.d=gs,$e=new G(St);$e.a<$e.c.c.length;)Te=l(re($e),10),Te.k==(Zn(),Ps)&&(Bn=Te.o.b,e.d=b.Math.min(e.d,Bn));for(e.d=b.Math.max(1,e.d),cn=St.c.length,e.c=We(Vr,di,28,cn,15,1),e.f=We(Vr,di,28,cn,15,1),e.e=We(Na,Zo,28,cn,15,1),E=0,e.a=0,Ze=new G(St);Ze.a0?(E=0,te&&(E+=g),E+=(an-1)*f,Me&&(E+=g),cn&&Me&&(E=b.Math.max(E,MCn(Me,f,Te,St))),E=e.a&&(r=GAn(e,Te),C=b.Math.max(C,r.b),$e=b.Math.max($e,r.d),vt(g,new ca(Te,r)));for(cn=new bt,E=0;E0),te.a.Xb(te.c=--te.b),an=new yu(e.b),by(te,an),mr(te.b0){for(B=C<100?null:new nb(C),E=new T7e(t),V=E.g,fe=We(Vr,di,28,C,15,1),r=0,$e=new Lw(C),a=0;a=0;)if(z!=null?Pi(z,V[w]):qe(z)===qe(V[w])){fe.length<=r&&(te=fe,fe=We(Vr,di,28,2*fe.length,15,1),pu(te,0,fe,0,r)),fe[r++]=a,qr($e,V[w]);break e}if(z=z,qe(z)===qe(g))break}}if(E=$e,V=$e.g,C=r,r>fe.length&&(te=fe,fe=We(Vr,di,28,r,15,1),pu(te,0,fe,0,r)),r>0){for(Me=!0,o=0;o=0;)vx(e,fe[f]);if(r!=C){for(a=C;--a>=r;)vx(E,a);te=fe,fe=We(Vr,di,28,r,15,1),pu(te,0,fe,0,r)}t=E}}}else for(t=_7n(e,t),a=e.i;--a>=0;)t.Hc(e.g[a])&&(vx(e,a),Me=!0);if(Me){if(fe!=null){for(n=t.gc(),L=n==1?rA(e,4,t.Kc().Pb(),null,fe[0],J):rA(e,6,t,fe,fe[0],J),B=n<100?null:new nb(n),a=t.Kc();a.Ob();)z=a.Pb(),B=d4e(e,l(z,76),B);B?(B.nj(L),B.oj()):Ni(e.e,L)}else{for(B=Ofn(t.gc()),a=t.Kc();a.Ob();)z=a.Pb(),B=d4e(e,l(z,76),B);B&&B.oj()}return!0}else return!1}function dIn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me;for(n=new xdt(t),n.a||q_n(t),E=jSn(t),w=new Cw,te=new Ebt,J=new G(t.a);J.a0||n.o==Y1&&a=n}function pIn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn,jn,ur;for(Me=t,Te=new Cw,$e=new Cw,C=Aw(Me,fSe),r=new Mat(e,n,Te,$e),P9n(r.a,r.b,r.c,r.d,C),w=(St=Te.i,St||(Te.i=new q5(Te,Te.c))),an=w.Kc();an.Ob();)for(cn=l(an.Pb(),166),a=l($i(Te,cn),21),J=a.Kc();J.Ob();)if(V=J.Pb(),Ze=l(X5(e.d,V),166),Ze)g=(!cn.e&&(cn.e=new Ln(cs,cn,10,9)),cn.e),qr(g,Ze);else throw f=Yg(Me,Pd),B=y4t+V+x4t+f,z=B+kT,ue(new dd(z));for(E=(ot=$e.i,ot||($e.i=new q5($e,$e.c))),jn=E.Kc();jn.Ob();)for(Bn=l(jn.Pb(),166),o=l($i($e,Bn),21),fe=o.Kc();fe.Ob();)if(te=fe.Pb(),Ze=l(X5(e.d,te),166),Ze)L=(!Bn.g&&(Bn.g=new Ln(cs,Bn,9,10)),Bn.g),qr(L,Ze);else throw f=Yg(Me,Pd),B=y4t+te+x4t+f,z=B+kT,ue(new dd(z));!n.b&&(n.b=new Ln(_r,n,4,7)),n.b.i!=0&&(!n.c&&(n.c=new Ln(_r,n,5,8)),n.c.i!=0)&&(!n.b&&(n.b=new Ln(_r,n,4,7)),n.b.i<=1&&(!n.c&&(n.c=new Ln(_r,n,5,8)),n.c.i<=1))&&(!n.a&&(n.a=new nt(cs,n,6,6)),n.a).i==1&&(ur=l(Oe((!n.a&&(n.a=new nt(cs,n,6,6)),n.a),0),166),!aue(ur)&&!oue(ur)&&(wV(ur,l(Oe((!n.b&&(n.b=new Ln(_r,n,4,7)),n.b),0),84)),yV(ur,l(Oe((!n.c&&(n.c=new Ln(_r,n,5,8)),n.c),0),84))))}function bIn(e){var t,n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn;for(Me=e.a,$e=0,Ze=Me.length;$e0?(L=l(jt(B.c.a,f-1),10),cn=j5(e.b,B,L),te=B.n.b-B.d.d-(L.n.b+L.o.b+L.d.a+cn)):te=B.n.b-B.d.d,E=b.Math.min(te,E),f1&&(f=b.Math.min(f,b.Math.abs(l(ff(g.a,1),8).b-C.b)))));else for(J=new G(t.j);J.aa&&(o=B.a-a,f=Ii,r.c.length=0,a=B.a),B.a>=a&&($n(r.c,g),g.a.b>1&&(f=b.Math.min(f,b.Math.abs(l(ff(g.a,g.a.b-2),8).b-B.b)))));if(r.c.length!=0&&o>t.o.a/2&&f>t.o.b/2){for(z=new gu,Mc(z,t),la(z,(Ct(),Qn)),z.n.a=t.o.a/2,fe=new gu,Mc(fe,t),la(fe,Dr),fe.n.a=t.o.a/2,fe.n.b=t.o.b,w=new G(r);w.a=E.b?po(g,fe):po(g,z)):(E=l(odn(g.a),8),te=g.a.b==0?I1(g.c):l(o0(g.a),8),te.b>=E.b?Fa(g,fe):Fa(g,z)),L=l(Q(g,(Nt(),cc)),75),L&&Ny(L,E,!0);t.n.a=a-t.o.a/2}}function vIn(e,t,n){var r,a,o,f,g,w,E,C,L,B;for(g=Rr(e.b,0);g.b!=g.d.c;)if(f=l(Br(g),40),!vn(f.c,DG))for(E=HEn(f,e),t==(Js(),uc)||t==vc?Vs(E,new ene):Vs(E,new tne),w=E.c.length,r=0;r=0?z=gx(g):z=BN(gx(g)),e.qf(VT,z)),E=new qa,B=!1,e.pf(p3)?(Fye(E,l(e.of(p3),8)),B=!0):Ahn(E,f.a/2,f.b/2),z.g){case 4:rt(C,Qu,(hf(),$b)),rt(C,sW,(Vm(),P6)),C.o.b=f.b,J<0&&(C.o.a=-J),la(L,(Ct(),ar)),B||(E.a=f.a),E.a-=f.a;break;case 2:rt(C,Qu,(hf(),d4)),rt(C,sW,(Vm(),FT)),C.o.b=f.b,J<0&&(C.o.a=-J),la(L,(Ct(),er)),B||(E.a=0);break;case 1:rt(C,hv,(ep(),F6)),C.o.a=f.a,J<0&&(C.o.b=-J),la(L,(Ct(),Dr)),B||(E.b=f.b),E.b-=f.b;break;case 3:rt(C,hv,(ep(),Ux)),C.o.a=f.a,J<0&&(C.o.b=-J),la(L,(Ct(),Qn)),B||(E.b=0)}if(Fye(L.n,E),rt(C,p3,E),t==Tv||t==Tg||t==Mu){if(V=0,t==Tv&&e.pf(k2))switch(z.g){case 1:case 2:V=l(e.of(k2),17).a;break;case 3:case 4:V=-l(e.of(k2),17).a}else switch(z.g){case 4:case 2:V=o.b,t==Tg&&(V/=a.b);break;case 1:case 3:V=o.a,t==Tg&&(V/=a.a)}rt(C,l3,V)}return rt(C,Wc,z),C}function wIn(){c3e();function e(r){var a=this;this.dispatch=function(o){var f=o.data;switch(f.cmd){case"algorithms":var g=L8e((Cn(),new $a(new gi(Qb.b))));r.postMessage({id:f.id,data:g});break;case"categories":var w=L8e((Cn(),new $a(new gi(Qb.c))));r.postMessage({id:f.id,data:w});break;case"options":var E=L8e((Cn(),new $a(new gi(Qb.d))));r.postMessage({id:f.id,data:E});break;case"register":kMn(f.algorithms),r.postMessage({id:f.id});break;case"layout":QAn(f.graph,f.layoutOptions||{},f.options||{}),r.postMessage({id:f.id,data:f.graph});break}},this.saveDispatch=function(o){try{a.dispatch(o)}catch(f){r.postMessage({id:o.data.id,error:f})}}}function t(r){var a=this;this.dispatcher=new e({postMessage:function(o){a.onmessage({data:o})}}),this.postMessage=function(o){setTimeout(function(){a.dispatcher.saveDispatch({data:o})},0)}}if(typeof document===ghe&&typeof self!==ghe){var n=new e(self);self.onmessage=n.saveDispatch}else typeof d!==ghe&&d.exports&&(Object.defineProperty(p,"__esModule",{value:!0}),d.exports={default:t,Worker:t})}function cwt(e,t,n){var r,a,o,f,g,w,E,C,L,B;for(C=new op(n),pc(C,t),rt(C,(ft(),zi),t),C.o.a=t.g,C.o.b=t.f,C.n.a=t.i,C.n.b=t.j,vt(n.a,C),ki(e.a,t,C),((!t.a&&(t.a=new nt(Ai,t,10,11)),t.a).i!=0||Rt(Bt(at(t,(Nt(),b4)))))&&rt(C,FLe,(Hn(),!0)),E=l(Q(n,Lu),21),L=l(Q(C,(Nt(),Ms)),101),L==(Ra(),Wb)?rt(C,Ms,Z1):L!=Z1&&E.Fc((Ho(),$T)),B=0,r=l(Q(n,Rh),88),w=new or((!t.c&&(t.c=new nt(Hl,t,9,9)),t.c));w.e!=w.i.gc();)g=l(gr(w),123),a=ds(t),(qe(at(a,yg))!==qe((Ed(),E2))||qe(at(a,dv))===qe((l2(),BT))||qe(at(a,dv))===qe((l2(),PT))||Rt(Bt(at(a,f3)))||qe(at(a,g4))!==qe((Km(),c4))||qe(at(a,zb))===qe((Nf(),v3))||qe(at(a,zb))===qe((Nf(),x4))||qe(at(a,pv))===qe((p2(),WT))||qe(at(a,pv))===qe((p2(),YT)))&&!Rt(Bt(at(t,fW)))&&Hi(g,Ki,pt(B++)),Rt(Bt(at(g,mv)))||LDn(e,g,C,E,r,L);for(f=new or((!t.n&&(t.n=new nt(ec,t,1,7)),t.n));f.e!=f.i.gc();)o=l(gr(f),135),!Rt(Bt(at(o,mv)))&&o.a&&vt(C.b,Oce(o));return Rt(Bt(Q(C,QL)))&&E.Fc((Ho(),eW)),Rt(Bt(Q(C,bW)))&&(E.Fc((Ho(),tW)),E.Fc(UL),rt(C,Ms,Z1)),C}function Lle(e,t,n,r,a,o,f){var g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn,jn,ur,oi,ws;for(J=0,Bn=0,E=new G(e.b);E.aJ&&(o&&(ko(ot,z),ko(cn,pt(C.b-1)),vt(e.d,V),g.c.length=0),oi=n.b,ws+=z+t,z=0,L=b.Math.max(L,n.b+n.c+ur)),$n(g.c,w),ddt(w,oi,ws),L=b.Math.max(L,oi+ur+n.c),z=b.Math.max(z,B),oi+=ur+t,V=w;if(ra(e.a,g),vt(e.d,l(jt(g,g.c.length-1),163)),L=b.Math.max(L,r),jn=ws+z+n.a,jna.d.d+a.d.a?C.f.d=!0:(C.f.d=!0,C.f.a=!0))),r.b!=r.d.c&&(t=n);C&&(o=l(cr(e.f,f.d.i),60),t.bo.d.d+o.d.a?C.f.d=!0:(C.f.d=!0,C.f.a=!0))}for(g=new hr(dr(ka(z).a.Kc(),new j));jr(g);)f=l(xr(g),18),f.a.b!=0&&(t=l(o0(f.a),8),f.d.j==(Ct(),Qn)&&(te=new QA(t,new lt(t.a,a.d.d),a,f),te.f.a=!0,te.a=f.d,$n(J.c,te)),f.d.j==Dr&&(te=new QA(t,new lt(t.a,a.d.d+a.d.a),a,f),te.f.d=!0,te.a=f.d,$n(J.c,te)))}return J}function CIn(e,t,n){var r,a,o,f,g,w,E,C,L,B;for(w=new bt,L=t.length,f=$7e(n),E=0;E=V&&(Te>V&&(z.c.length=0,V=Te),$n(z.c,f));z.c.length!=0&&(B=l(jt(z,aU(t,z.c.length)),131),jn.a.Bc(B)!=null,B.s=J++,R9e(B,an,ot),z.c.length=0)}for($e=e.c.length+1,g=new G(e);g.aBn.s&&(ph(n),al(Bn.i,r),r.c>0&&(r.a=Bn,vt(Bn.t,r),r.b=St,vt(St.i,r)))}function uwt(e,t,n,r,a){var o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn,jn;for(J=new Bu(t.b),$e=new Bu(t.b),B=new Bu(t.b),cn=new Bu(t.b),te=new Bu(t.b),St=Rr(t,0);St.b!=St.d.c;)for(Ze=l(Br(St),12),g=new G(Ze.g);g.a0,fe=Ze.g.c.length>0,E&&fe?$n(B.c,Ze):E?$n(J.c,Ze):fe&&$n($e.c,Ze);for(V=new G(J);V.aTe.nh()-E.b&&(B=Te.nh()-E.b),z>Te.oh()-E.d&&(z=Te.oh()-E.d),C0){for(Me=Rr(e.f,0);Me.b!=Me.d.c;)Te=l(Br(Me),10),Te.p+=B-e.e;r9e(e),Ch(e.f),J9e(e,r,z)}else{for(ui(e.f,z),z.p=r,e.e=b.Math.max(e.e,r),o=new hr(dr(ka(z).a.Kc(),new j));jr(o);)a=l(xr(o),18),!a.c.i.c&&a.c.i.k==(Zn(),cu)&&(ui(e.f,a.c.i),a.c.i.p=r-1);e.c=r}else r9e(e),Ch(e.f),r=0,jr(new hr(dr(ka(z).a.Kc(),new j)))?(B=0,B=vdt(B,z),r=B+2,J9e(e,r,z)):(ui(e.f,z),z.p=0,e.e=b.Math.max(e.e,0),e.b=l(jt(e.d.b,0),30),e.c=0);for(e.f.b==0||r9e(e),e.d.a.c.length=0,fe=new bt,E=new G(e.d.b);E.a=48&&t<=57){for(r=t-48;a=48&&t<=57;)if(r=r*10+t-48,r<0)throw ue(new ri(ai((Jr(),CSe))))}else throw ue(new ri(ai((Jr(),K4t))));if(n=r,t==44){if(a>=e.j)throw ue(new ri(ai((Jr(),Y4t))));if((t=co(e.i,a++))>=48&&t<=57){for(n=t-48;a=48&&t<=57;)if(n=n*10+t-48,n<0)throw ue(new ri(ai((Jr(),CSe))));if(r>n)throw ue(new ri(ai((Jr(),X4t))))}else n=-1}if(t!=125)throw ue(new ri(ai((Jr(),W4t))));e.bm(a)?(o=(Di(),Di(),new Ty(9,o)),e.d=a+1):(o=(Di(),Di(),new Ty(3,o)),e.d=a),o.Om(r),o.Nm(n),Li(e)}}return o}function DIn(e){var t,n,r,a,o;switch(n=l(Q(e,(ft(),Lu)),21),t=Oq(v8t),a=l(Q(e,(Nt(),p4)),346),a==(rp(),A2)&&Dh(t,w8t),Rt(Bt(Q(e,ide)))?fi(t,(uo(),y0),(vo(),d1e)):fi(t,(uo(),bu),(vo(),d1e)),Q(e,(QH(),kM))!=null&&Dh(t,y8t),(Rt(Bt(Q(e,RMe)))||Rt(Bt(Q(e,NMe))))&&yl(t,(uo(),mc),(vo(),OAe)),l(Q(e,Rh),88).g){case 2:case 3:case 4:yl(fi(t,(uo(),y0),(vo(),PAe)),mc,NAe)}switch(n.Hc((Ho(),eW))&&yl(fi(fi(t,(uo(),y0),(vo(),IAe)),_u,MAe),mc,DAe),qe(Q(e,zb))!==qe((Nf(),AW))&&fi(t,(uo(),bu),(vo(),XAe)),n.Hc(nW)&&(fi(t,(uo(),y0),(vo(),eLe)),fi(t,vg,JAe),fi(t,bu,ZAe)),qe(Q(e,lW))!==qe((zE(),VL))&&qe(Q(e,bp))!==qe((ip(),JB))&&yl(t,(uo(),mc),(vo(),VAe)),Rt(Bt(Q(e,BMe)))&&fi(t,(uo(),bu),(vo(),HAe)),Rt(Bt(Q(e,ede)))&&fi(t,(uo(),bu),(vo(),tLe)),VTn(e)&&(qe(Q(e,p4))===qe(A2)?r=l(Q(e,TB),299):r=l(Q(e,Z1e),299),o=r==(vE(),R1e)?(vo(),QAe):(vo(),iLe),fi(t,(uo(),_u),o)),l(Q(e,lDe),388).g){case 1:fi(t,(uo(),_u),(vo(),nLe));break;case 2:yl(fi(fi(t,(uo(),bu),(vo(),SAe)),_u,_Ae),mc,AAe)}return qe(Q(e,yg))!==qe((Ed(),E2))&&fi(t,(uo(),bu),(vo(),rLe)),t}function dwt(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me;if(Hu(e.a,t)){if(W0(l(cr(e.a,t),49),n))return 1}else ki(e.a,t,new Ks);if(Hu(e.a,n)){if(W0(l(cr(e.a,n),49),t))return-1}else ki(e.a,n,new Ks);if(Hu(e.e,t)){if(W0(l(cr(e.e,t),49),n))return-1}else ki(e.e,t,new Ks);if(Hu(e.e,n)){if(W0(l(cr(e.a,n),49),t))return 1}else ki(e.e,n,new Ks);if(e.c==(Ed(),yde)||!ns(t,(ft(),Ki))||!ns(n,(ft(),Ki))){for(L=null,E=new G(t.j);E.af?WE(e,t,n):WE(e,n,t),af?1:0}return r=l(Q(t,(ft(),Ki)),17).a,o=l(Q(n,Ki),17).a,r>o?WE(e,t,n):WE(e,n,t),ro?1:0}function Kw(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te;if(n==null)return null;if(e.a!=t.jk())throw ue(new Yn(yT+t.xe()+t3));if(De(t,469)){if(te=kSn(l(t,685),n),!te)throw ue(new Yn(zfe+n+"' is not a valid enumerator of '"+t.xe()+"'"));return te}switch(o2((El(),io),t).Nl()){case 2:{n=Tu(n,!1);break}case 3:{n=Tu(n,!0);break}}if(r=o2(io,t).Jl(),r)return r.jk().wi().ti(r,n);if(B=o2(io,t).Ll(),B){for(te=new bt,E=Tce(n),C=0,L=E.length;C1)for(V=new q8((!e.a&&(e.a=new nt(cs,e,6,6)),e.a));V.e!=V.i.gc();)jA(V);for(f=l(Oe((!e.a&&(e.a=new nt(cs,e,6,6)),e.a),0),166),te=oi,oi>Ze+$e?te=Ze+$e:oiot+J?fe=ot+J:wsZe-$e&&teot-J&&feoi+ur?cn=oi+ur:Zews+St?an=ws+St:otoi-ur&&cnws-St&&ann&&(B=n-1),z=P2+Jl(t,24)*MP*L-L/2,z<0?z=1:z>r&&(z=r-1),a=(rb(),w=new AS,w),dV(a,B),fV(a,z),qr((!f.a&&(f.a=new Ys(qh,f,5)),f.a),a)}function gwt(e){sw(e,new Xm(nw(Zv(tw(ew(new x1,th),"ELK Rectangle Packing"),"Algorithm for packing of unconnected boxes, i.e. graphs without edges. The given order of the boxes is always preserved and the main reading direction of the boxes is left to right. The algorithm is divided into two phases. One phase approximates the width in which the rectangles can be placed. The next phase places the rectangles in rows using the previously calculated width as bounding width and bundles rectangles with a similar height in blocks. A compaction step reduces the size of the drawing. Finally, the rectangles are expanded to fill their bounding box and eliminate empty unused spaces."),new c8))),gt(e,th,Ox,1.3),gt(e,th,hT,(Hn(),!1)),gt(e,th,Xw,iOe),gt(e,th,Jy,15),gt(e,th,SG,It(DCt)),gt(e,th,x6,It(NCt)),gt(e,th,Px,It(BCt)),gt(e,th,Nx,It(FCt)),gt(e,th,fT,It(OCt)),gt(e,th,fL,It(lge)),gt(e,th,dT,It(RCt)),gt(e,th,jCe,It(cOe)),gt(e,th,$Ce,It(oOe)),gt(e,th,RCe,It(fge)),gt(e,th,FCe,It(uOe)),gt(e,th,zCe,It(rOe)),gt(e,th,qCe,It(hge)),gt(e,th,HCe,It(nOe)),gt(e,th,VCe,It(aOe)),gt(e,th,hL,It(tOe)),gt(e,th,AG,It(ICt)),gt(e,th,PCe,It(jB)),gt(e,th,NCe,It(eOe)),gt(e,th,BCe,It($B)),gt(e,th,OCe,It(sOe))}function Dle(e,t){ble();var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn,jn,ur,oi;if(cn=e.e,V=e.d,a=e.a,cn==0)switch(t){case 0:return"0";case 1:return sT;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return ot=new tb,t<0?ot.a+="0E+":ot.a+="0E",ot.a+=-t,ot.a}if(Me=V*10+1+7,$e=We(kf,Ad,28,Me+1,15,1),n=Me,V==1)if(g=a[0],g<0){oi=va(g,Vo);do J=oi,oi=KN(oi,10),$e[--n]=48+Yr(Df(J,mo(oi,10)))&Zs;while(iu(oi,0)!=0)}else{oi=g;do J=oi,oi=oi/10|0,$e[--n]=48+(J-oi*10)&Zs;while(oi!=0)}else{Bn=We(Vr,di,28,V,15,1),ur=V,pu(a,0,Bn,0,ur);e:for(;;){for(St=0,E=ur-1;E>=0;E--)jn=bo(l0(St,32),va(Bn[E],Vo)),fe=yxn(jn),Bn[E]=Yr(fe),St=Yr(bw(fe,32));Te=Yr(St),te=n;do $e[--n]=48+Te%10&Zs;while((Te=Te/10|0)!=0&&n!=0);for(r=9-te+n,w=0;w0;w++)$e[--n]=48;for(L=ur-1;Bn[L]==0;L--)if(L==0)break e;ur=L+1}for(;$e[n]==48;)++n}if(z=cn<0,f=Me-n-t-1,t==0)return z&&($e[--n]=45),If($e,n,Me-n);if(t>0&&f>=-6){if(f>=0){for(C=n+f,B=Me-1;B>=C;B--)$e[B+1]=$e[B];return $e[++C]=46,z&&($e[--n]=45),If($e,n,Me-n+1)}for(L=2;L<-f+1;L++)$e[--n]=48;return $e[--n]=46,$e[--n]=48,z&&($e[--n]=45),If($e,n,Me-n)}return an=n+1,o=Me,Ze=new S5,z&&(Ze.a+="-"),o-an>=1?(hb(Ze,$e[n]),Ze.a+=".",Ze.a+=If($e,n+1,Me-n-1)):Ze.a+=If($e,n,Me-n),Ze.a+="E",f>0&&(Ze.a+="+"),Ze.a+=""+f,Ze.a}function pwt(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot;switch(e.c=t,e.g=new Pr,n=(aw(),new Jv(e.c)),r=new e_(n),S8e(r),Me=ei(at(e.c,(YN(),AOe))),w=l(at(e.c,kge),324),Ze=l(at(e.c,Ege),437),f=l(at(e.c,COe),490),$e=l(at(e.c,xge),438),e.j=ze(Ge(at(e.c,JCt))),g=e.a,w.g){case 0:g=e.a;break;case 1:g=e.b;break;case 2:g=e.i;break;case 3:g=e.e;break;case 4:g=e.f;break;default:throw ue(new Yn(FG+(w.f!=null?w.f:""+w.g)))}if(e.d=new cot(g,Ze,f),rt(e.d,(pE(),jL),Bt(at(e.c,XCt))),e.d.c=Rt(Bt(at(e.c,SOe))),AH(e.c).i==0)return e.d;for(L=new or(AH(e.c));L.e!=L.i.gc();){for(C=l(gr(L),27),z=C.g/2,B=C.f/2,ot=new lt(C.i+z,C.j+B);Hu(e.g,ot);)dw(ot,(b.Math.random()-.5)*Dd,(b.Math.random()-.5)*Dd);J=l(at(C,(pi(),tC)),140),te=new kot(ot,new ef(ot.a-z-e.j/2-J.b,ot.b-B-e.j/2-J.d,C.g+e.j+(J.b+J.c),C.f+e.j+(J.d+J.a))),vt(e.d.i,te),ki(e.g,ot,new ca(te,C))}switch($e.g){case 0:if(Me==null)e.d.d=l(jt(e.d.i,0),68);else for(Te=new G(e.d.i);Te.a0?ur+1:1);for(f=new G(ot.g);f.a0?ur+1:1)}e.c[E]==0?ui(e.e,J):e.a[E]==0&&ui(e.f,J),++E}for(V=-1,z=1,L=new bt,e.d=l(Q(t,(ft(),Xx)),234);Hh>0;){for(;e.e.b!=0;)ws=l(kae(e.e),10),e.b[ws.p]=V--,pke(e,ws),--Hh;for(;e.f.b!=0;)Vl=l(kae(e.f),10),e.b[Vl.p]=z++,pke(e,Vl),--Hh;if(Hh>0){for(B=lo,Te=new G(Me);Te.a=B&&($e>B&&(L.c.length=0,B=$e),$n(L.c,J)));C=e.sg(L),e.b[C.p]=z++,pke(e,C),--Hh}}for(oi=Me.c.length+1,E=0;Ee.b[lc]&&(Uw(r,!0),rt(t,yB,(Hn(),!0)));e.a=null,e.c=null,e.b=null,Ch(e.f),Ch(e.e),n.Vg()}function bwt(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot;for(Ze=l(Oe((!e.a&&(e.a=new nt(cs,e,6,6)),e.a),0),166),C=new bl,$e=new Pr,ot=Cmt(Ze),ju($e.f,Ze,ot),B=new Pr,r=new os,V=rg(Lh(he(le(Fh,1),Rn,20,0,[(!t.d&&(t.d=new Ln(js,t,8,5)),t.d),(!t.e&&(t.e=new Ln(js,t,7,4)),t.e)])));jr(V);){if(z=l(xr(V),74),(!e.a&&(e.a=new nt(cs,e,6,6)),e.a).i!=1)throw ue(new Yn(n4t+(!e.a&&(e.a=new nt(cs,e,6,6)),e.a).i));z!=e&&(te=l(Oe((!z.a&&(z.a=new nt(cs,z,6,6)),z.a),0),166),Cs(r,te,r.c.b,r.c),J=l(hc(zo($e.f,te)),13),J||(J=Cmt(te),ju($e.f,te,J)),L=n?ma(new Eo(l(jt(ot,ot.c.length-1),8)),l(jt(J,J.c.length-1),8)):ma(new Eo((Sn(0,ot.c.length),l(ot.c[0],8))),(Sn(0,J.c.length),l(J.c[0],8))),ju(B.f,te,L))}if(r.b!=0)for(fe=l(jt(ot,n?ot.c.length-1:0),8),E=1;E1&&Cs(C,fe,C.c.b,C.c),Yoe(a)));fe=Te}return C}function mwt(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn;for(n.Ug(myt,1),Bn=l(yc(Fi(new bn(null,new kn(t,16)),new one),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[(Fl(),Ec)]))),15),C=l(yc(Fi(new bn(null,new kn(t,16)),new vXe(t)),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[Ec]))),15),V=l(yc(Fi(new bn(null,new kn(t,16)),new mXe(t)),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[Ec]))),15),J=We(PW,IG,40,t.gc(),0,1),f=0;f=0&&an=0&&!J[z]){J[z]=a,C.gd(g),--g;break}if(z=an-B,z=0&&!J[z]){J[z]=a,C.gd(g),--g;break}}for(V.jd(new cne),w=J.length-1;w>=0;w--)!J[w]&&!V.dc()&&(J[w]=l(V.Xb(0),40),V.gd(0));for(E=0;E=0;w--)ui(n,(Sn(w,f.c.length),l(f.c[w],8)));return n}function wwt(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e;for(Me=ze(Ge(at(t,(ug(),T4)))),z=ze(Ge(at(t,mM))),B=ze(Ge(at(t,UW))),v7e((!t.a&&(t.a=new nt(Ai,t,10,11)),t.a)),fe=uvt((!t.a&&(t.a=new nt(Ai,t,10,11)),t.a),Me,e.b),te=0;teB&&UN((Sn(B,t.c.length),l(t.c[B],186)),C),C=null;t.c.length>B&&(Sn(B,t.c.length),l(t.c[B],186)).a.c.length==0;)al(t,(Sn(B,t.c.length),t.c[B]));if(!C){--f;continue}if(!Rt(Bt(l(jt(C.b,0),27).of((z1(),$B))))&&tAn(t,V,o,C,te,n,B,r)){J=!0;continue}if(te){if(z=V.b,L=C.f,!Rt(Bt(l(jt(C.b,0),27).of($B)))&&wMn(t,V,o,C,n,B,r,a)){if(J=!0,z=e.j){e.a=-1,e.c=1;return}if(t=co(e.i,e.d++),e.a=t,e.b==1){switch(t){case 92:if(r=10,e.d>=e.j)throw ue(new ri(ai((Jr(),VG))));e.a=co(e.i,e.d++);break;case 45:(e.e&512)==512&&e.d=e.j||co(e.i,e.d)!=63)break;if(++e.d>=e.j)throw ue(new ri(ai((Jr(),e0e))));switch(t=co(e.i,e.d++),t){case 58:r=13;break;case 61:r=14;break;case 33:r=15;break;case 91:r=19;break;case 62:r=18;break;case 60:if(e.d>=e.j)throw ue(new ri(ai((Jr(),e0e))));if(t=co(e.i,e.d++),t==61)r=16;else if(t==33)r=17;else throw ue(new ri(ai((Jr(),L4t))));break;case 35:for(;e.d=e.j)throw ue(new ri(ai((Jr(),VG))));e.a=co(e.i,e.d++);break;default:r=0}e.c=r}function zIn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te;if(n.Ug("Process compaction",1),!!Rt(Bt(Q(t,(Hc(),uIe))))){for(a=l(Q(t,y3),88),z=ze(Ge(Q(t,zde))),gLn(e,t,a),iIn(t,z/2/2),V=t.b,$m(V,new lXe(a)),E=Rr(V,0);E.b!=E.d.c;)if(w=l(Br(E),40),!Rt(Bt(Q(w,(Qi(),Vb))))){if(r=$Sn(w,a),J=PAn(w,t),L=0,B=0,r)switch(te=r.e,a.g){case 2:L=te.a-z-w.f.a,J.e.a-z-w.f.aL&&(L=J.e.a+J.f.a+z),B=L+w.f.a;break;case 4:L=te.b-z-w.f.b,J.e.b-z-w.f.bL&&(L=J.e.b+J.f.b+z),B=L+w.f.b}else if(J)switch(a.g){case 2:L=J.e.a-z-w.f.a,B=L+w.f.a;break;case 1:L=J.e.a+J.f.a+z,B=L+w.f.a;break;case 4:L=J.e.b-z-w.f.b,B=L+w.f.b;break;case 3:L=J.e.b+J.f.b+z,B=L+w.f.b}qe(Q(t,$de))===qe((xA(),OB))?(o=L,f=B,g=kE(Fi(new bn(null,new kn(e.a,16)),new ttt(o,f))),g.a!=null?a==(Js(),uc)||a==vc?w.e.a=L:w.e.b=L:(a==(Js(),uc)||a==wf?g=kE(Fi(Dht(new bn(null,new kn(e.a,16))),new hXe(o))):g=kE(Fi(Dht(new bn(null,new kn(e.a,16))),new fXe(o))),g.a!=null&&(a==uc||a==vc?w.e.a=ze(Ge((mr(g.a!=null),l(g.a,42)).a)):w.e.b=ze(Ge((mr(g.a!=null),l(g.a,42)).a)))),g.a!=null&&(C=gc(e.a,(mr(g.a!=null),g.a),0),C>0&&C!=l(Q(w,$d),17).a&&(rt(w,tIe,(Hn(),!0)),rt(w,$d,pt(C))))):a==(Js(),uc)||a==vc?w.e.a=L:w.e.b=L}n.Vg()}}function ywt(e){var t,n,r,a,o,f,g,w,E;for(e.b=1,Li(e),t=null,e.c==0&&e.a==94?(Li(e),t=(Di(),Di(),new _h(4)),Eu(t,0,TT),g=new _h(4)):g=(Di(),Di(),new _h(4)),a=!0;(E=e.c)!=1;){if(E==0&&e.a==93&&!a){t&&(nL(t,g),g=t);break}if(n=e.a,r=!1,E==10)switch(n){case 100:case 68:case 119:case 87:case 115:case 83:Ky(g,YE(n)),r=!0;break;case 105:case 73:case 99:case 67:n=(Ky(g,YE(n)),-1),n<0&&(r=!0);break;case 112:case 80:if(w=w9e(e,n),!w)throw ue(new ri(ai((Jr(),t0e))));Ky(g,w),r=!0;break;default:n=eke(e)}else if(E==24&&!a){if(t&&(nL(t,g),g=t),o=ywt(e),nL(g,o),e.c!=0||e.a!=93)throw ue(new ri(ai((Jr(),j4t))));break}if(Li(e),!r){if(E==0){if(n==91)throw ue(new ri(ai((Jr(),ESe))));if(n==93)throw ue(new ri(ai((Jr(),TSe))));if(n==45&&!a&&e.a!=93)throw ue(new ri(ai((Jr(),n0e))))}if(e.c!=0||e.a!=45||n==45&&a)Eu(g,n,n);else{if(Li(e),(E=e.c)==1)throw ue(new ri(ai((Jr(),UG))));if(E==0&&e.a==93)Eu(g,n,n),Eu(g,45,45);else{if(E==0&&e.a==93||E==24)throw ue(new ri(ai((Jr(),n0e))));if(f=e.a,E==0){if(f==91)throw ue(new ri(ai((Jr(),ESe))));if(f==93)throw ue(new ri(ai((Jr(),TSe))));if(f==45)throw ue(new ri(ai((Jr(),n0e))))}else E==10&&(f=eke(e));if(Li(e),n>f)throw ue(new ri(ai((Jr(),q4t))));Eu(g,n,f)}}}a=!1}if(e.c==1)throw ue(new ri(ai((Jr(),UG))));return c6(g),eL(g),e.b=0,Li(e),g}function qIn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze;if(n.Ug("Coffman-Graham Layering",1),t.a.c.length==0){n.Vg();return}for(Ze=l(Q(t,(Nt(),$Me)),17).a,w=0,f=0,B=new G(t.a);B.a=Ze||!B5n(fe,r))&&(r=vat(t,C)),Va(fe,r),o=new hr(dr(ka(fe).a.Kc(),new j));jr(o);)a=l(xr(o),18),!e.a[a.p]&&(J=a.c.i,--e.e[J.p],e.e[J.p]==0&&K8($E(z,J),aT));for(E=C.c.length-1;E>=0;--E)vt(t.b,(Sn(E,C.c.length),l(C.c[E],30)));t.a.c.length=0,n.Vg()}function xwt(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e;$e=!1;do for($e=!1,o=t?new br(e.a.b).a.gc()-2:1;t?o>=0:ol(Q(te,Ki),17).a)&&(Me=!1);if(Me){for(w=t?o+1:o-1,g=s6e(e.a,pt(w)),f=!1,Te=!0,r=!1,C=Rr(g,0);C.b!=C.d.c;)E=l(Br(C),10),ns(E,Ki)?E.p!=L.p&&(f=f|(t?l(Q(E,Ki),17).al(Q(L,Ki),17).a),Te=!1):!f&&Te&&E.k==(Zn(),cu)&&(r=!0,t?B=l(xr(new hr(dr(ka(E).a.Kc(),new j))),18).c.i:B=l(xr(new hr(dr(qs(E).a.Kc(),new j))),18).d.i,B==L&&(t?n=l(xr(new hr(dr(qs(E).a.Kc(),new j))),18).d.i:n=l(xr(new hr(dr(ka(E).a.Kc(),new j))),18).c.i,(t?l(dy(e.a,n),17).a-l(dy(e.a,B),17).a:l(dy(e.a,B),17).a-l(dy(e.a,n),17).a)<=2&&(Te=!1)));if(r&&Te&&(t?n=l(xr(new hr(dr(qs(L).a.Kc(),new j))),18).d.i:n=l(xr(new hr(dr(ka(L).a.Kc(),new j))),18).c.i,(t?l(dy(e.a,n),17).a-l(dy(e.a,L),17).a:l(dy(e.a,L),17).a-l(dy(e.a,n),17).a)<=2&&n.k==(Zn(),Ps)&&(Te=!1)),f||Te){for(J=J2t(e,L,t);J.a.gc()!=0;)V=l(J.a.ec().Kc().Pb(),10),J.a.Bc(V)!=null,Ka(J,J2t(e,V,t));--z,$e=!0}}}while($e)}function HIn(e){Wr(e.c,li,he(le(zt,1),dt,2,6,[ho,"http://www.w3.org/2001/XMLSchema#decimal"])),Wr(e.d,li,he(le(zt,1),dt,2,6,[ho,"http://www.w3.org/2001/XMLSchema#integer"])),Wr(e.e,li,he(le(zt,1),dt,2,6,[ho,"http://www.w3.org/2001/XMLSchema#boolean"])),Wr(e.f,li,he(le(zt,1),dt,2,6,[ho,"EBoolean",_i,"EBoolean:Object"])),Wr(e.i,li,he(le(zt,1),dt,2,6,[ho,"http://www.w3.org/2001/XMLSchema#byte"])),Wr(e.g,li,he(le(zt,1),dt,2,6,[ho,"http://www.w3.org/2001/XMLSchema#hexBinary"])),Wr(e.j,li,he(le(zt,1),dt,2,6,[ho,"EByte",_i,"EByte:Object"])),Wr(e.n,li,he(le(zt,1),dt,2,6,[ho,"EChar",_i,"EChar:Object"])),Wr(e.t,li,he(le(zt,1),dt,2,6,[ho,"http://www.w3.org/2001/XMLSchema#double"])),Wr(e.u,li,he(le(zt,1),dt,2,6,[ho,"EDouble",_i,"EDouble:Object"])),Wr(e.F,li,he(le(zt,1),dt,2,6,[ho,"http://www.w3.org/2001/XMLSchema#float"])),Wr(e.G,li,he(le(zt,1),dt,2,6,[ho,"EFloat",_i,"EFloat:Object"])),Wr(e.I,li,he(le(zt,1),dt,2,6,[ho,"http://www.w3.org/2001/XMLSchema#int"])),Wr(e.J,li,he(le(zt,1),dt,2,6,[ho,"EInt",_i,"EInt:Object"])),Wr(e.N,li,he(le(zt,1),dt,2,6,[ho,"http://www.w3.org/2001/XMLSchema#long"])),Wr(e.O,li,he(le(zt,1),dt,2,6,[ho,"ELong",_i,"ELong:Object"])),Wr(e.Z,li,he(le(zt,1),dt,2,6,[ho,"http://www.w3.org/2001/XMLSchema#short"])),Wr(e.$,li,he(le(zt,1),dt,2,6,[ho,"EShort",_i,"EShort:Object"])),Wr(e._,li,he(le(zt,1),dt,2,6,[ho,"http://www.w3.org/2001/XMLSchema#string"]))}function VIn(e,t,n,r,a,o,f){var g,w,E,C,L,B,z,V;return B=l(r.a,17).a,z=l(r.b,17).a,L=e.b,V=e.c,g=0,C=0,t==(Js(),uc)||t==vc?(C=fO(h1t(xy(fc(new bn(null,new kn(n.b,16)),new lne),new Yte))),L.e.b+L.f.b/2>C?(E=++z,g=ze(Ge(fh(vy(fc(new bn(null,new kn(n.b,16)),new itt(a,E)),new a$))))):(w=++B,g=ze(Ge(fh(Y8(fc(new bn(null,new kn(n.b,16)),new stt(a,w)),new Xte)))))):(C=fO(h1t(xy(fc(new bn(null,new kn(n.b,16)),new Zte),new s$))),L.e.a+L.f.a/2>C?(E=++z,g=ze(Ge(fh(vy(fc(new bn(null,new kn(n.b,16)),new ntt(a,E)),new Qte))))):(w=++B,g=ze(Ge(fh(Y8(fc(new bn(null,new kn(n.b,16)),new rtt(a,w)),new bI)))))),t==uc?(ko(e.a,new lt(ze(Ge(Q(L,(Qi(),c1))))-a,g)),ko(e.a,new lt(V.e.a+V.f.a+a+o,g)),ko(e.a,new lt(V.e.a+V.f.a+a+o,V.e.b+V.f.b/2)),ko(e.a,new lt(V.e.a+V.f.a,V.e.b+V.f.b/2))):t==vc?(ko(e.a,new lt(ze(Ge(Q(L,(Qi(),k0))))+a,L.e.b+L.f.b/2)),ko(e.a,new lt(L.e.a+L.f.a+a,g)),ko(e.a,new lt(V.e.a-a-o,g)),ko(e.a,new lt(V.e.a-a-o,V.e.b+V.f.b/2)),ko(e.a,new lt(V.e.a,V.e.b+V.f.b/2))):t==wf?(ko(e.a,new lt(g,ze(Ge(Q(L,(Qi(),c1))))-a)),ko(e.a,new lt(g,V.e.b+V.f.b+a+o)),ko(e.a,new lt(V.e.a+V.f.a/2,V.e.b+V.f.b+a+o)),ko(e.a,new lt(V.e.a+V.f.a/2,V.e.b+V.f.b+a))):(e.a.b==0||(l(o0(e.a),8).b=ze(Ge(Q(L,(Qi(),k0))))+a*l(f.b,17).a),ko(e.a,new lt(g,ze(Ge(Q(L,(Qi(),k0))))+a*l(f.b,17).a)),ko(e.a,new lt(g,V.e.b-a*l(f.a,17).a-o))),new ca(pt(B),pt(z))}function UIn(e){var t,n,r,a,o,f,g,w,E,C,L,B,z;if(f=!0,L=null,r=null,a=null,t=!1,z=P_t,E=null,o=null,g=0,w=Zce(e,g,TPe,CPe),w=0&&vn(e.substr(g,2),"//")?(g+=2,w=Zce(e,g,$M,zM),r=(Ga(g,w,e.length),e.substr(g,w-g)),g=w):L!=null&&(g==e.length||(Xn(g,e.length),e.charCodeAt(g)!=47))&&(f=!1,w=Lye(e,cl(35),g),w==-1&&(w=e.length),r=(Ga(g,w,e.length),e.substr(g,w-g)),g=w);if(!n&&g0&&co(C,C.length-1)==58&&(a=C,g=w)),gWue(o))&&(L=o);for(!L&&(L=(Sn(0,te.c.length),l(te.c[0],185))),J=new G(t.b);J.aL&&(jn=0,ur+=C+St,C=0),hmt(Ze,f,jn,ur),t=b.Math.max(t,jn+ot.a),C=b.Math.max(C,ot.b),jn+=ot.a+St;for($e=new Pr,n=new Pr,an=new G(e);an.a=-1900?1:0,n>=4?hi(e,he(le(zt,1),dt,2,6,[Rwt,jwt])[g]):hi(e,he(le(zt,1),dt,2,6,["BC","AD"])[g]);break;case 121:h6n(e,n,r);break;case 77:M_n(e,n,r);break;case 107:w=a.q.getHours(),w==0?ag(e,24,n):ag(e,w,n);break;case 83:HTn(e,n,a);break;case 69:C=r.q.getDay(),n==5?hi(e,he(le(zt,1),dt,2,6,["S","M","T","W","T","F","S"])[C]):n==4?hi(e,he(le(zt,1),dt,2,6,[Qle,Jle,Zle,ehe,the,nhe,rhe])[C]):hi(e,he(le(zt,1),dt,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[C]);break;case 97:a.q.getHours()>=12&&a.q.getHours()<24?hi(e,he(le(zt,1),dt,2,6,["AM","PM"])[1]):hi(e,he(le(zt,1),dt,2,6,["AM","PM"])[0]);break;case 104:L=a.q.getHours()%12,L==0?ag(e,12,n):ag(e,L,n);break;case 75:B=a.q.getHours()%12,ag(e,B,n);break;case 72:z=a.q.getHours(),ag(e,z,n);break;case 99:V=r.q.getDay(),n==5?hi(e,he(le(zt,1),dt,2,6,["S","M","T","W","T","F","S"])[V]):n==4?hi(e,he(le(zt,1),dt,2,6,[Qle,Jle,Zle,ehe,the,nhe,rhe])[V]):n==3?hi(e,he(le(zt,1),dt,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[V]):ag(e,V,1);break;case 76:J=r.q.getMonth(),n==5?hi(e,he(le(zt,1),dt,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[J]):n==4?hi(e,he(le(zt,1),dt,2,6,[$le,zle,qle,Hle,_x,Vle,Ule,Gle,Kle,Wle,Yle,Xle])[J]):n==3?hi(e,he(le(zt,1),dt,2,6,["Jan","Feb","Mar","Apr",_x,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[J]):ag(e,J+1,n);break;case 81:te=r.q.getMonth()/3|0,n<4?hi(e,he(le(zt,1),dt,2,6,["Q1","Q2","Q3","Q4"])[te]):hi(e,he(le(zt,1),dt,2,6,["1st quarter","2nd quarter","3rd quarter","4th quarter"])[te]);break;case 100:fe=r.q.getDate(),ag(e,fe,n);break;case 109:E=a.q.getMinutes(),ag(e,E,n);break;case 115:f=a.q.getSeconds(),ag(e,f,n);break;case 122:n<4?hi(e,o.c[0]):hi(e,o.c[1]);break;case 118:hi(e,o.b);break;case 90:n<3?hi(e,Bkn(o)):n==3?hi(e,zkn(o)):hi(e,qkn(o.a));break;default:return!1}return!0}function Wke(e,t,n,r){var a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn,jn,ur,oi;if(emt(t),w=l(Oe((!t.b&&(t.b=new Ln(_r,t,4,7)),t.b),0),84),C=l(Oe((!t.c&&(t.c=new Ln(_r,t,5,8)),t.c),0),84),g=bc(w),E=bc(C),f=(!t.a&&(t.a=new nt(cs,t,6,6)),t.a).i==0?null:l(Oe((!t.a&&(t.a=new nt(cs,t,6,6)),t.a),0),166),St=l(cr(e.a,g),10),jn=l(cr(e.a,E),10),cn=null,ur=null,De(w,193)&&(ot=l(cr(e.a,w),305),De(ot,12)?cn=l(ot,12):De(ot,10)&&(St=l(ot,10),cn=l(jt(St.j,0),12))),De(C,193)&&(Bn=l(cr(e.a,C),305),De(Bn,12)?ur=l(Bn,12):De(Bn,10)&&(jn=l(Bn,10),ur=l(jt(jn.j,0),12))),!St||!jn)throw ue(new I8("The source or the target of edge "+t+" could not be found. This usually happens when an edge connects a node laid out by ELK Layered to a node in another level of hierarchy laid out by either another instance of ELK Layered or another layout algorithm alltogether. The former can be solved by setting the hierarchyHandling option to INCLUDE_CHILDREN."));for(J=new Tw,pc(J,t),rt(J,(ft(),zi),t),rt(J,(Nt(),cc),null),z=l(Q(r,Lu),21),St==jn&&z.Fc((Ho(),GL)),cn||(Ze=(qo(),zu),an=null,f&&P5(l(Q(St,Ms),101))&&(an=new lt(f.j,f.k),Vct(an,WO(t)),vut(an,n),Ly(E,g)&&(Ze=$l,Oi(an,St.n))),cn=tvt(St,an,Ze,r)),ur||(Ze=(qo(),$l),oi=null,f&&P5(l(Q(jn,Ms),101))&&(oi=new lt(f.b,f.c),Vct(oi,WO(t)),vut(oi,n)),ur=tvt(jn,oi,Ze,eo(jn))),po(J,cn),Fa(J,ur),(cn.e.c.length>1||cn.g.c.length>1||ur.e.c.length>1||ur.g.c.length>1)&&z.Fc((Ho(),UL)),B=new or((!t.n&&(t.n=new nt(ec,t,1,7)),t.n));B.e!=B.i.gc();)if(L=l(gr(B),135),!Rt(Bt(at(L,mv)))&&L.a)switch(te=Oce(L),vt(J.b,te),l(Q(te,jd),278).g){case 1:case 2:z.Fc((Ho(),jT));break;case 0:z.Fc((Ho(),RT)),rt(te,jd,(F1(),nC))}if(o=l(Q(r,JL),322),fe=l(Q(r,yW),323),a=o==(dA(),mB)||fe==(OA(),vde),f&&(!f.a&&(f.a=new Ys(qh,f,5)),f.a).i!=0&&a){for(Te=QN(f),V=new bl,$e=Rr(Te,0);$e.b!=$e.d.c;)Me=l(Br($e),8),ui(V,new Eo(Me));rt(J,qLe,V)}return J}function YIn(e,t,n,r){var a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn,jn,ur,oi,ws;for(an=0,Bn=0,St=new Pr,Ze=l(fh(vy(fc(new bn(null,new kn(e.b,16)),new Jte),new sne)),17).a+1,cn=We(Vr,di,28,Ze,15,1),te=We(Vr,di,28,Ze,15,1),J=0;J1)for(g=ur+1;gE.b.e.b*(1-fe)+E.c.e.b*fe));V++);if(ot.gc()>0&&(oi=E.a.b==0?Ja(E.b.e):l(o0(E.a),8),Me=Oi(Ja(l(ot.Xb(ot.gc()-1),40).e),l(ot.Xb(ot.gc()-1),40).f),B=Oi(Ja(l(ot.Xb(0),40).e),l(ot.Xb(0),40).f),V>=ot.gc()-1&&oi.b>Me.b&&E.c.e.b>Me.b||V<=0&&oi.bE.b.e.a*(1-fe)+E.c.e.a*fe));V++);if(ot.gc()>0&&(oi=E.a.b==0?Ja(E.b.e):l(o0(E.a),8),Me=Oi(Ja(l(ot.Xb(ot.gc()-1),40).e),l(ot.Xb(ot.gc()-1),40).f),B=Oi(Ja(l(ot.Xb(0),40).e),l(ot.Xb(0),40).f),V>=ot.gc()-1&&oi.a>Me.a&&E.c.e.a>Me.a||V<=0&&oi.a=ze(Ge(Q(e,(Qi(),iIe))))&&++Bn):(z.f&&z.d.e.a<=ze(Ge(Q(e,(Qi(),Bde))))&&++an,z.g&&z.c.e.a+z.c.f.a>=ze(Ge(Q(e,(Qi(),rIe))))&&++Bn)}else $e==0?b9e(E):$e<0&&(++cn[ur],++te[ws],jn=VIn(E,t,e,new ca(pt(an),pt(Bn)),n,r,new ca(pt(te[ws]),pt(cn[ur]))),an=l(jn.a,17).a,Bn=l(jn.b,17).a)}function XIn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te;if(r=t,w=n,e.b&&r.j==(Ct(),er)&&w.j==(Ct(),er)&&(Te=r,r=w,w=Te),Hu(e.a,r)){if(W0(l(cr(e.a,r),49),w))return 1}else ki(e.a,r,new Ks);if(Hu(e.a,w)){if(W0(l(cr(e.a,w),49),r))return-1}else ki(e.a,w,new Ks);if(Hu(e.d,r)){if(W0(l(cr(e.d,r),49),w))return-1}else ki(e.d,r,new Ks);if(Hu(e.d,w)){if(W0(l(cr(e.a,w),49),r))return 1}else ki(e.d,w,new Ks);if(r.j!=w.j)return fe=Rln(r.j,w.j),fe==-1?df(e,w,r):df(e,r,w),fe;if(r.e.c.length!=0&&w.e.c.length!=0){if(e.b&&(fe=j0t(r,w),fe!=0))return fe==-1?df(e,w,r):fe==1&&df(e,r,w),fe;if(o=l(jt(r.e,0),18).c.i,C=l(jt(w.e,0),18).c.i,o==C)return a=l(Q(l(jt(r.e,0),18),(ft(),Ki)),17).a,E=l(Q(l(jt(w.e,0),18),Ki),17).a,a>E?df(e,r,w):df(e,w,r),aE?1:0;for(V=e.c,J=0,te=V.length;JE?df(e,r,w):df(e,w,r),aE?1:0):e.b&&(fe=j0t(r,w),fe!=0)?(fe==-1?df(e,w,r):fe==1&&df(e,r,w),fe):(f=0,L=0,ns(l(jt(r.g,0),18),Ki)&&(f=l(Q(l(jt(r.g,0),18),Ki),17).a),ns(l(jt(w.g,0),18),Ki)&&(L=l(Q(l(jt(r.g,0),18),Ki),17).a),g&&g==B?Rt(Bt(Q(l(jt(r.g,0),18),W1)))&&!Rt(Bt(Q(l(jt(w.g,0),18),W1)))?(df(e,r,w),1):!Rt(Bt(Q(l(jt(r.g,0),18),W1)))&&Rt(Bt(Q(l(jt(w.g,0),18),W1)))?(df(e,w,r),-1):(f>L?df(e,r,w):df(e,w,r),fL?1:0):(e.f&&(e.f._b(g)&&(f=l(e.f.xc(g),17).a),e.f._b(B)&&(L=l(e.f.xc(B),17).a)),f>L?df(e,r,w):df(e,w,r),fL?1:0))):r.e.c.length!=0&&w.g.c.length!=0?(df(e,r,w),1):r.g.c.length!=0&&w.e.c.length!=0?(df(e,w,r),-1):ns(r,(ft(),Ki))&&ns(w,Ki)?(a=l(Q(r,Ki),17).a,E=l(Q(w,Ki),17).a,a>E?df(e,r,w):df(e,w,r),aE?1:0):(df(e,w,r),-1)}function QIn(e){e.gb||(e.gb=!0,e.b=qc(e,0),Ss(e.b,18),is(e.b,19),e.a=qc(e,1),Ss(e.a,1),is(e.a,2),is(e.a,3),is(e.a,4),is(e.a,5),e.o=qc(e,2),Ss(e.o,8),Ss(e.o,9),is(e.o,10),is(e.o,11),is(e.o,12),is(e.o,13),is(e.o,14),is(e.o,15),is(e.o,16),is(e.o,17),is(e.o,18),is(e.o,19),is(e.o,20),is(e.o,21),is(e.o,22),is(e.o,23),sc(e.o),sc(e.o),sc(e.o),sc(e.o),sc(e.o),sc(e.o),sc(e.o),sc(e.o),sc(e.o),sc(e.o),e.p=qc(e,3),Ss(e.p,2),Ss(e.p,3),Ss(e.p,4),Ss(e.p,5),is(e.p,6),is(e.p,7),sc(e.p),sc(e.p),e.q=qc(e,4),Ss(e.q,8),e.v=qc(e,5),is(e.v,9),sc(e.v),sc(e.v),sc(e.v),e.w=qc(e,6),Ss(e.w,2),Ss(e.w,3),Ss(e.w,4),is(e.w,5),e.B=qc(e,7),is(e.B,1),sc(e.B),sc(e.B),sc(e.B),e.Q=qc(e,8),is(e.Q,0),sc(e.Q),e.R=qc(e,9),Ss(e.R,1),e.S=qc(e,10),sc(e.S),sc(e.S),sc(e.S),sc(e.S),sc(e.S),sc(e.S),sc(e.S),sc(e.S),sc(e.S),sc(e.S),sc(e.S),sc(e.S),sc(e.S),sc(e.S),sc(e.S),e.T=qc(e,11),is(e.T,10),is(e.T,11),is(e.T,12),is(e.T,13),is(e.T,14),sc(e.T),sc(e.T),e.U=qc(e,12),Ss(e.U,2),Ss(e.U,3),is(e.U,4),is(e.U,5),is(e.U,6),is(e.U,7),sc(e.U),e.V=qc(e,13),is(e.V,10),e.W=qc(e,14),Ss(e.W,18),Ss(e.W,19),Ss(e.W,20),is(e.W,21),is(e.W,22),is(e.W,23),e.bb=qc(e,15),Ss(e.bb,10),Ss(e.bb,11),Ss(e.bb,12),Ss(e.bb,13),Ss(e.bb,14),Ss(e.bb,15),Ss(e.bb,16),is(e.bb,17),sc(e.bb),sc(e.bb),e.eb=qc(e,16),Ss(e.eb,2),Ss(e.eb,3),Ss(e.eb,4),Ss(e.eb,5),Ss(e.eb,6),Ss(e.eb,7),is(e.eb,8),is(e.eb,9),e.ab=qc(e,17),Ss(e.ab,0),Ss(e.ab,1),e.H=qc(e,18),is(e.H,0),is(e.H,1),is(e.H,2),is(e.H,3),is(e.H,4),is(e.H,5),sc(e.H),e.db=qc(e,19),is(e.db,2),e.c=Ti(e,20),e.d=Ti(e,21),e.e=Ti(e,22),e.f=Ti(e,23),e.i=Ti(e,24),e.g=Ti(e,25),e.j=Ti(e,26),e.k=Ti(e,27),e.n=Ti(e,28),e.r=Ti(e,29),e.s=Ti(e,30),e.t=Ti(e,31),e.u=Ti(e,32),e.fb=Ti(e,33),e.A=Ti(e,34),e.C=Ti(e,35),e.D=Ti(e,36),e.F=Ti(e,37),e.G=Ti(e,38),e.I=Ti(e,39),e.J=Ti(e,40),e.L=Ti(e,41),e.M=Ti(e,42),e.N=Ti(e,43),e.O=Ti(e,44),e.P=Ti(e,45),e.X=Ti(e,46),e.Y=Ti(e,47),e.Z=Ti(e,48),e.$=Ti(e,49),e._=Ti(e,50),e.cb=Ti(e,51),e.K=Ti(e,52))}function JIn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn,jn,ur;for(f=new os,ot=l(Q(n,(Nt(),Rh)),88),J=0,Ka(f,(!t.a&&(t.a=new nt(Ai,t,10,11)),t.a));f.b!=0;)C=l(f.b==0?null:(mr(f.b!=0),af(f,f.a.a)),27),E=ds(C),(qe(at(E,yg))!==qe((Ed(),E2))||qe(at(E,dv))===qe((l2(),BT))||qe(at(E,dv))===qe((l2(),PT))||Rt(Bt(at(E,f3)))||qe(at(E,g4))!==qe((Km(),c4))||qe(at(E,zb))===qe((Nf(),v3))||qe(at(E,zb))===qe((Nf(),x4))||qe(at(E,pv))===qe((p2(),WT))||qe(at(E,pv))===qe((p2(),YT)))&&!Rt(Bt(at(C,fW)))&&Hi(C,(ft(),Ki),pt(J++)),fe=!Rt(Bt(at(C,mv))),fe&&(B=(!C.a&&(C.a=new nt(Ai,C,10,11)),C.a).i!=0,V=_xn(C),z=qe(at(C,p4))===qe((rp(),A2)),ur=!P1(C,(pi(),eC))||Sut(ei(at(C,eC))),$e=null,ur&&z&&(B||V)&&($e=Pmt(C),rt($e,Rh,ot),ns($e,CB)&&NJe(new D8e(ze(Ge(Q($e,CB)))),$e),l(at(C,bv),181).gc()!=0&&(L=$e,Is(new bn(null,(!C.c&&(C.c=new nt(Hl,C,9,9)),new kn(C.c,16))),new zWe(L)),_bt(C,$e))),St=n,cn=l(cr(e.a,ds(C)),10),cn&&(St=cn.e),Me=cwt(e,C,St),$e&&(Me.e=$e,$e.e=Me,Ka(f,(!C.a&&(C.a=new nt(Ai,C,10,11)),C.a))));for(J=0,Cs(f,t,f.c.b,f.c);f.b!=0;){for(o=l(f.b==0?null:(mr(f.b!=0),af(f,f.a.a)),27),w=new or((!o.b&&(o.b=new nt(js,o,12,3)),o.b));w.e!=w.i.gc();)g=l(gr(w),74),emt(g),(qe(at(t,yg))!==qe((Ed(),E2))||qe(at(t,dv))===qe((l2(),BT))||qe(at(t,dv))===qe((l2(),PT))||Rt(Bt(at(t,f3)))||qe(at(t,g4))!==qe((Km(),c4))||qe(at(t,zb))===qe((Nf(),v3))||qe(at(t,zb))===qe((Nf(),x4))||qe(at(t,pv))===qe((p2(),WT))||qe(at(t,pv))===qe((p2(),YT)))&&Hi(g,(ft(),Ki),pt(J++)),Bn=bc(l(Oe((!g.b&&(g.b=new Ln(_r,g,4,7)),g.b),0),84)),jn=bc(l(Oe((!g.c&&(g.c=new Ln(_r,g,5,8)),g.c),0),84)),!(Rt(Bt(at(g,mv)))||Rt(Bt(at(Bn,mv)))||Rt(Bt(at(jn,mv))))&&(te=qw(g)&&Rt(Bt(at(Bn,b4)))&&Rt(Bt(at(g,gv))),Ze=o,te||Ly(jn,Bn)?Ze=Bn:Ly(Bn,jn)&&(Ze=jn),St=n,cn=l(cr(e.a,Ze),10),cn&&(St=cn.e),Te=Wke(e,g,Ze,St),rt(Te,(ft(),RLe),JCn(e,g,t,n)));if(z=qe(at(o,p4))===qe((rp(),A2)),z)for(a=new or((!o.a&&(o.a=new nt(Ai,o,10,11)),o.a));a.e!=a.i.gc();)r=l(gr(a),27),ur=!P1(r,(pi(),eC))||Sut(ei(at(r,eC))),an=qe(at(r,p4))===qe(A2),ur&&an&&Cs(f,r,f.c.b,f.c)}}function ft(){ft=U;var e,t;zi=new Ui(NEe),RLe=new Ui("coordinateOrigin"),K1e=new Ui("processors"),FLe=new vs("compoundNode",(Hn(),!1)),xB=new vs("insideConnections",!1),qLe=new Ui("originalBendpoints"),HLe=new Ui("originalDummyNodePosition"),VLe=new Ui("originalLabelEdge"),WL=new Ui("representedLabels"),KL=new Ui("endLabels"),Kx=new Ui("endLabel.origin"),Yx=new vs("labelSide",(Ih(),eF)),R6=new vs("maxEdgeThickness",0),W1=new vs("reversed",!1),Xx=new Ui(C3t),o1=new vs("longEdgeSource",null),$f=new vs("longEdgeTarget",null),f4=new vs("longEdgeHasLabelDummies",!1),kB=new vs("longEdgeBeforeLabelDummy",!1),sW=new vs("edgeConstraint",(Vm(),M1e)),u3=new Ui("inLayerLayoutUnit"),hv=new vs("inLayerConstraint",(ep(),wB)),Wx=new vs("inLayerSuccessorConstraint",new bt),zLe=new vs("inLayerSuccessorConstraintBetweenNonDummies",!1),jl=new Ui("portDummy"),iW=new vs("crossingHint",pt(0)),Lu=new vs("graphProperties",(t=l(K0(F1e),9),new Zh(t,l(c0(t,t.length),9),0))),Wc=new vs("externalPortSide",(Ct(),Pc)),$Le=new vs("externalPortSize",new qa),q1e=new Ui("externalPortReplacedDummies"),aW=new Ui("externalPortReplacedDummy"),pp=new vs("externalPortConnections",(e=l(K0(Oo),9),new Zh(e,l(c0(e,e.length),9),0))),l3=new vs(b3t,0),BLe=new Ui("barycenterAssociates"),Qx=new Ui("TopSideComments"),Gx=new Ui("BottomSideComments"),rW=new Ui("CommentConnectionPort"),V1e=new vs("inputCollect",!1),G1e=new vs("outputCollect",!1),yB=new vs("cyclic",!1),jLe=new Ui("crossHierarchyMap"),Y1e=new Ui("targetOffset"),new vs("splineLabelSize",new qa),$6=new Ui("spacings"),oW=new vs("partitionConstraint",!1),c3=new Ui("breakingPoint.info"),KLe=new Ui("splines.survivingEdge"),fv=new Ui("splines.route.start"),z6=new Ui("splines.edgeChain"),GLe=new Ui("originalPortConstraints"),h3=new Ui("selfLoopHolder"),zT=new Ui("splines.nsPortY"),Ki=new Ui("modelOrder"),U1e=new Ui("longEdgeTargetNode"),jb=new vs(Q3t,!1),j6=new vs(Q3t,!1),H1e=new Ui("layerConstraints.hiddenNodes"),ULe=new Ui("layerConstraints.opposidePort"),W1e=new Ui("targetNode.modelOrder")}function ZIn(e,t,n,r){var a,o,f,g,w,E,C,L,B,z,V;for(L=Rr(e.b,0);L.b!=L.d.c;)if(C=l(Br(L),40),!vn(C.c,DG))for(o=l(yc(new bn(null,new kn(cEn(C,e),16)),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[(Fl(),Ec)]))),15),t==(Js(),uc)||t==vc?o.jd(new nne):o.jd(new o$),V=o.gc(),a=0;a0&&(g=l(o0(l(o.Xb(a),65).a),8).a,B=C.e.a+C.f.a/2,w=l(o0(l(o.Xb(a),65).a),8).b,z=C.e.b+C.f.b/2,r>0&&b.Math.abs(w-z)/(b.Math.abs(g-B)/40)>50&&(z>w?ko(l(o.Xb(a),65).a,new lt(C.e.a+C.f.a+r/5.3,C.e.b+C.f.b*f-r/2)):ko(l(o.Xb(a),65).a,new lt(C.e.a+C.f.a+r/5.3,C.e.b+C.f.b*f+r/2)))),ko(l(o.Xb(a),65).a,new lt(C.e.a+C.f.a,C.e.b+C.f.b*f))):t==vc?(E=ze(Ge(Q(C,(Qi(),c1)))),C.e.a-r>E?ko(l(o.Xb(a),65).a,new lt(E-n,C.e.b+C.f.b*f)):l(o.Xb(a),65).a.b>0&&(g=l(o0(l(o.Xb(a),65).a),8).a,B=C.e.a+C.f.a/2,w=l(o0(l(o.Xb(a),65).a),8).b,z=C.e.b+C.f.b/2,r>0&&b.Math.abs(w-z)/(b.Math.abs(g-B)/40)>50&&(z>w?ko(l(o.Xb(a),65).a,new lt(C.e.a-r/5.3,C.e.b+C.f.b*f-r/2)):ko(l(o.Xb(a),65).a,new lt(C.e.a-r/5.3,C.e.b+C.f.b*f+r/2)))),ko(l(o.Xb(a),65).a,new lt(C.e.a,C.e.b+C.f.b*f))):t==wf?(E=ze(Ge(Q(C,(Qi(),k0)))),C.e.b+C.f.b+r0&&(g=l(o0(l(o.Xb(a),65).a),8).a,B=C.e.a+C.f.a/2,w=l(o0(l(o.Xb(a),65).a),8).b,z=C.e.b+C.f.b/2,r>0&&b.Math.abs(g-B)/(b.Math.abs(w-z)/40)>50&&(B>g?ko(l(o.Xb(a),65).a,new lt(C.e.a+C.f.a*f-r/2,C.e.b+r/5.3+C.f.b)):ko(l(o.Xb(a),65).a,new lt(C.e.a+C.f.a*f+r/2,C.e.b+r/5.3+C.f.b)))),ko(l(o.Xb(a),65).a,new lt(C.e.a+C.f.a*f,C.e.b+C.f.b))):(E=ze(Ge(Q(C,(Qi(),c1)))),C0t(l(o.Xb(a),65),e)?ko(l(o.Xb(a),65).a,new lt(C.e.a+C.f.a*f,l(o0(l(o.Xb(a),65).a),8).b)):C.e.b-r>E?ko(l(o.Xb(a),65).a,new lt(C.e.a+C.f.a*f,E-n)):l(o.Xb(a),65).a.b>0&&(g=l(o0(l(o.Xb(a),65).a),8).a,B=C.e.a+C.f.a/2,w=l(o0(l(o.Xb(a),65).a),8).b,z=C.e.b+C.f.b/2,r>0&&b.Math.abs(g-B)/(b.Math.abs(w-z)/40)>50&&(B>g?ko(l(o.Xb(a),65).a,new lt(C.e.a+C.f.a*f-r/2,C.e.b-r/5.3)):ko(l(o.Xb(a),65).a,new lt(C.e.a+C.f.a*f+r/2,C.e.b-r/5.3)))),ko(l(o.Xb(a),65).a,new lt(C.e.a+C.f.a*f,C.e.b)))}function pi(){pi=U;var e,t;eC=new Ui(Byt),a7=new Ui(Fyt),eNe=(og(),Sge),ASt=new pn(qTe,eNe),Z6=new pn(Ox,null),LSt=new Ui(tSe),nNe=(Ym(),rs(Lge,he(le(Mge,1),it,298,0,[Age]))),UB=new pn(SG,nNe),GB=new pn(VP,(Hn(),!1)),rNe=(Js(),J1),xv=new pn(gfe,rNe),aNe=(ip(),Hge),sNe=new pn(HP,aNe),ISt=new pn(ZCe,!1),uNe=(rp(),oY),n7=new pn(CG,uNe),vNe=new lw(12),_2=new pn(Xw,vNe),WB=new pn(hL,!1),Nge=new pn(AG,!1),YB=new pn(fL,!1),ENe=(Ra(),Wb),_M=new pn(Nhe,ENe),n9=new Ui(_G),XB=new Ui(NP),zge=new Ui(oG),qge=new Ui(lL),lNe=new bl,x3=new pn(ZTe,lNe),DSt=new pn(nCe,!1),OSt=new pn(rCe,!1),hNe=new s_,tC=new pn(sCe,hNe),rY=new pn($Te,!1),FSt=new pn(Ryt,1),t7=new Ui(jyt),e7=new Ui($yt),AM=new pn(PP,!1),new pn(zyt,!0),pt(0),new pn(qyt,pt(100)),new pn(Hyt,!1),pt(0),new pn(Vyt,pt(4e3)),pt(0),new pn(Uyt,pt(400)),new pn(Gyt,!1),new pn(Kyt,!1),new pn(Wyt,!0),new pn(Yyt,!1),tNe=(VV(),Kge),MSt=new pn(eSe,tNe),RSt=new pn(LTe,10),jSt=new pn(MTe,10),_Ne=new pn(_he,20),$St=new pn(DTe,10),ANe=new pn(Ohe,2),LNe=new pn(dfe,10),MNe=new pn(ITe,0),iY=new pn(PTe,5),DNe=new pn(OTe,1),INe=new pn(NTe,1),Ev=new pn(Jy,20),zSt=new pn(BTe,10),PNe=new pn(FTe,10),r9=new Ui(RTe),NNe=new nnt,ONe=new pn(aCe,NNe),PSt=new Ui(bfe),wNe=!1,NSt=new pn(pfe,wNe),dNe=new lw(5),fNe=new pn(UTe,dNe),gNe=(qy(),t=l(K0(Ko),9),new Zh(t,l(c0(t,t.length),9),0)),r7=new pn(fT,gNe),xNe=(t6(),Kb),yNe=new pn(WTe,xNe),Bge=new Ui(YTe),Fge=new Ui(XTe),Rge=new Ui(QTe),Pge=new Ui(JTe),pNe=(e=l(K0(BM),9),new Zh(e,l(c0(e,e.length),9),0)),kv=new pn(x6,pNe),mNe=un((Zl(),aC)),Ub=new pn(Nx,mNe),bNe=new lt(0,0),i7=new pn(Px,bNe),C4=new pn(hT,!1),iNe=(F1(),nC),Ige=new pn(eCe,iNe),Dge=new pn(cG,!1),pt(1),new pn(Xyt,null),kNe=new Ui(iCe),jge=new Ui(tCe),SNe=(Ct(),Pc),s7=new pn(zTe,SNe),rh=new Ui(jTe),TNe=(Rl(),un(Yb)),S4=new pn(dT,TNe),$ge=new pn(GTe,!1),CNe=new pn(KTe,!0),aY=new pn(BP,1),BNe=new pn(nSe,null),QB=new pn(FP,150),sY=new pn(RP,1.414),i9=new pn(Qw,null),qSt=new pn(rSe,1),KB=new pn(HTe,!1),Oge=new pn(VTe,!1),oNe=new pn(Ahe,1),cNe=(vU(),Uge),new pn(Qyt,cNe),BSt=!0,VSt=(dx(),L4),USt=L4,HSt=L4}function vo(){vo=U,PAe=new Ws("DIRECTION_PREPROCESSOR",0),IAe=new Ws("COMMENT_PREPROCESSOR",1),D6=new Ws("EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER",2),f1e=new Ws("INTERACTIVE_EXTERNAL_PORT_POSITIONER",3),eLe=new Ws("PARTITION_PREPROCESSOR",4),DK=new Ws("LABEL_DUMMY_INSERTER",5),zK=new Ws("SELF_LOOP_PREPROCESSOR",6),l4=new Ws("LAYER_CONSTRAINT_PREPROCESSOR",7),JAe=new Ws("PARTITION_MIDPROCESSOR",8),HAe=new Ws("HIGH_DEGREE_NODE_LAYER_PROCESSOR",9),XAe=new Ws("NODE_PROMOTION",10),u4=new Ws("LAYER_CONSTRAINT_POSTPROCESSOR",11),ZAe=new Ws("PARTITION_POSTPROCESSOR",12),$Ae=new Ws("HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR",13),tLe=new Ws("SEMI_INTERACTIVE_CROSSMIN_PROCESSOR",14),SAe=new Ws("BREAKING_POINT_INSERTER",15),PK=new Ws("LONG_EDGE_SPLITTER",16),d1e=new Ws("PORT_SIDE_PROCESSOR",17),LK=new Ws("INVERTED_PORT_PROCESSOR",18),RK=new Ws("PORT_LIST_SORTER",19),rLe=new Ws("SORT_BY_INPUT_ORDER_OF_MODEL",20),FK=new Ws("NORTH_SOUTH_PORT_PREPROCESSOR",21),_Ae=new Ws("BREAKING_POINT_PROCESSOR",22),QAe=new Ws(H3t,23),iLe=new Ws(V3t,24),jK=new Ws("SELF_LOOP_PORT_RESTORER",25),nLe=new Ws("SINGLE_EDGE_GRAPH_WRAPPER",26),MK=new Ws("IN_LAYER_CONSTRAINT_PROCESSOR",27),FAe=new Ws("END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR",28),WAe=new Ws("LABEL_AND_NODE_SIZE_PROCESSOR",29),KAe=new Ws("INNERMOST_NODE_MARGIN_CALCULATOR",30),qK=new Ws("SELF_LOOP_ROUTER",31),MAe=new Ws("COMMENT_NODE_MARGIN_CALCULATOR",32),AK=new Ws("END_LABEL_PREPROCESSOR",33),OK=new Ws("LABEL_DUMMY_SWITCHER",34),LAe=new Ws("CENTER_LABEL_MANAGEMENT_PROCESSOR",35),LT=new Ws("LABEL_SIDE_SELECTOR",36),UAe=new Ws("HYPEREDGE_DUMMY_MERGER",37),zAe=new Ws("HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR",38),YAe=new Ws("LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR",39),zL=new Ws("HIERARCHICAL_PORT_POSITION_PROCESSOR",40),OAe=new Ws("CONSTRAINTS_POSTPROCESSOR",41),DAe=new Ws("COMMENT_POSTPROCESSOR",42),GAe=new Ws("HYPERNODE_PROCESSOR",43),qAe=new Ws("HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER",44),NK=new Ws("LONG_EDGE_JOINER",45),$K=new Ws("SELF_LOOP_POSTPROCESSOR",46),AAe=new Ws("BREAKING_POINT_REMOVER",47),BK=new Ws("NORTH_SOUTH_PORT_POSTPROCESSOR",48),VAe=new Ws("HORIZONTAL_COMPACTOR",49),IK=new Ws("LABEL_DUMMY_REMOVER",50),RAe=new Ws("FINAL_SPLINE_BENDPOINTS_CALCULATOR",51),BAe=new Ws("END_LABEL_SORTER",52),gB=new Ws("REVERSED_EDGE_RESTORER",53),_K=new Ws("END_LABEL_POSTPROCESSOR",54),jAe=new Ws("HIERARCHICAL_NODE_RESIZER",55),NAe=new Ws("DIRECTION_POSTPROCESSOR",56)}function Yke(){Yke=U,iMe=(pN(),XK),r9t=new pn(VEe,iMe),p9t=new pn(UEe,(Hn(),!1)),lMe=(zH(),z1e),y9t=new pn(fG,lMe),P9t=new pn(GEe,!1),B9t=new pn(KEe,!0),Lxt=new pn(WEe,!1),vMe=(dN(),kde),Q9t=new pn(YEe,vMe),pt(1),skt=new pn(XEe,pt(7)),akt=new pn(QEe,!1),b9t=new pn(JEe,!1),rMe=(l2(),A1e),n9t=new pn(zhe,rMe),dMe=(p2(),gde),N9t=new pn(qP,dMe),hMe=(hf(),EB),S9t=new pn(ZEe,hMe),pt(-1),C9t=new pn(eTe,null),pt(-1),_9t=new pn(tTe,pt(-1)),pt(-1),A9t=new pn(qhe,pt(4)),pt(-1),M9t=new pn(Hhe,pt(2)),fMe=(Nf(),AW),O9t=new pn(Vhe,fMe),pt(0),I9t=new pn(Uhe,pt(0)),E9t=new pn(Ghe,pt(Ii)),nMe=(dA(),HL),t9t=new pn(pL,nMe),$xt=new pn(nTe,!1),Kxt=new pn(Khe,.1),Zxt=new pn(Whe,!1),Yxt=new pn(rTe,null),Xxt=new pn(iTe,null),pt(-1),Qxt=new pn(sTe,null),pt(-1),Jxt=new pn(aTe,pt(-1)),pt(0),zxt=new pn(oTe,pt(40)),tMe=(vE(),j1e),Uxt=new pn(Yhe,tMe),eMe=vB,qxt=new pn(dG,eMe),mMe=(OA(),rM),X9t=new pn(k6,mMe),z9t=new Ui(gG),gMe=(cN(),JK),F9t=new pn(Xhe,gMe),pMe=(WN(),ZK),j9t=new pn(Qhe,pMe),V9t=new pn(Jhe,.3),G9t=new Ui(Zhe),bMe=(By(),_W),K9t=new pn(efe,bMe),oMe=(LV(),Tde),c9t=new pn(cTe,oMe),cMe=(yA(),Sde),u9t=new pn(uTe,cMe),uMe=(SE(),aM),l9t=new pn(pG,uMe),f9t=new pn(bG,.2),a9t=new pn(tfe,2),tkt=new pn(lTe,null),rkt=new pn(hTe,10),nkt=new pn(fTe,10),ikt=new pn(dTe,20),pt(0),J9t=new pn(gTe,pt(0)),pt(0),Z9t=new pn(pTe,pt(0)),pt(0),ekt=new pn(bTe,pt(0)),Mxt=new pn(nfe,!1),XLe=(zE(),VL),Ixt=new pn(mTe,XLe),YLe=(JH(),S1e),Dxt=new pn(vTe,YLe),v9t=new pn(mG,!1),pt(0),m9t=new pn(rfe,pt(16)),pt(0),w9t=new pn(ife,pt(5)),xMe=(OV(),Lde),Skt=new pn(fp,xMe),okt=new pn(vG,10),lkt=new pn(wG,1),yMe=(pV(),YK),mkt=new pn(bL,yMe),dkt=new Ui(sfe),wMe=pt(1),pt(0),pkt=new pn(afe,wMe),kMe=(gV(),Ade),Mkt=new pn(yG,kMe),_kt=new Ui(xG),kkt=new pn(kG,!0),ykt=new pn(EG,2),Tkt=new pn(ofe,!0),aMe=(yU(),QK),s9t=new pn(wTe,aMe),sMe=(yx(),OT),i9t=new pn(yTe,sMe),ZLe=(Ed(),E2),jxt=new pn(TG,ZLe),Rxt=new pn(xTe,!1),Fxt=new pn(kTe,!1),QLe=(Km(),c4),Oxt=new pn(cfe,QLe),JLe=(EA(),pde),Bxt=new pn(ETe,JLe),Nxt=new pn(ufe,0),Pxt=new pn(lfe,0),k9t=L1e,x9t=mB,L9t=CW,D9t=CW,T9t=dde,Wxt=(rp(),A2),e9t=HL,Gxt=HL,Hxt=HL,Vxt=A2,q9t=iM,H9t=rM,R9t=rM,$9t=rM,U9t=wde,Y9t=iM,W9t=iM,h9t=(ip(),s9),d9t=s9,g9t=aM,o9t=JB,ckt=XT,ukt=k4,hkt=XT,fkt=k4,vkt=XT,wkt=k4,gkt=_1e,bkt=YK,Dkt=XT,Ikt=k4,Akt=XT,Lkt=k4,Ekt=k4,xkt=k4,Ckt=k4}function eOn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn,jn,ur,oi,ws,Vl,lc,Hh,f7,P2,L0,M0,_v,h9,rm,f9,qd,_g,S3,d9,d7,Hd,Av,yp,IAt,sBe,_3,YM,lpe,g9,XM,F4,QM,hpe,OAt;for(sBe=0,oi=t,lc=0,P2=oi.length;lc0&&(e.a[qd.p]=sBe++)}for(XM=0,ws=n,Hh=0,L0=ws.length;Hh0;){for(qd=(mr(d7.b>0),l(d7.a.Xb(d7.c=--d7.b),12)),d9=0,g=new G(qd.e);g.a0&&(qd.j==(Ct(),Qn)?(e.a[qd.p]=XM,++XM):(e.a[qd.p]=XM+M0+h9,++h9))}XM+=h9}for(S3=new Pr,V=new bd,ur=t,Vl=0,f7=ur.length;VlE.b&&(E.b=Hd)):qd.i.c==IAt&&(HdE.c&&(E.c=Hd));for(nE(J,0,J.length,null),g9=We(Vr,di,28,J.length,15,1),r=We(Vr,di,28,XM+1,15,1),fe=0;fe0;)St%2>0&&(a+=hpe[St+1]),St=(St-1)/2|0,++hpe[St];for(an=We(MEt,Rn,374,J.length*2,0,1),$e=0;$e0&&GO(Vl.f),at(fe,BNe)!=null&&(g=l(at(fe,BNe),347),S3=g.Tg(fe),F5(fe,b.Math.max(fe.g,S3.a),b.Math.max(fe.f,S3.b)));if(L0=l(at(t,_2),107),z=t.g-(L0.b+L0.c),B=t.f-(L0.d+L0.a),Hd.bh("Available Child Area: ("+z+"|"+B+")"),Hi(t,Z6,z/B),sdt(t,a,r.eh(f7)),l(at(t,i9),280)==dY&&(Uke(t),F5(t,L0.b+ze(Ge(at(t,t7)))+L0.c,L0.d+ze(Ge(at(t,e7)))+L0.a)),Hd.bh("Executed layout algorithm: "+ei(at(t,eC))+" on node "+t.k),l(at(t,i9),280)==L4){if(z<0||B<0)throw ue(new Vp("The size defined by the parent parallel node is too small for the space provided by the paddings of the child hierarchical node. "+t.k));for(P1(t,t7)||P1(t,e7)||Uke(t),J=ze(Ge(at(t,t7))),V=ze(Ge(at(t,e7))),Hd.bh("Desired Child Area: ("+J+"|"+V+")"),_v=z/J,h9=B/V,M0=b.Math.min(_v,b.Math.min(h9,ze(Ge(at(t,qSt))))),Hi(t,aY,M0),Hd.bh(t.k+" -- Local Scale Factor (X|Y): ("+_v+"|"+h9+")"),$e=l(at(t,UB),21),o=0,f=0,M0<_v&&($e.Hc((Ym(),EM))?o=(z/2-J*M0/2)/M0:$e.Hc(TM)&&(o=(z-J*M0)/M0)),M0'?":vn(L4t,e)?"'(?<' or '(? toIndex: ",fEe=", toIndex: ",dEe="Index: ",gEe=", Size: ",oT="org.eclipse.elk.alg.common",ii={50:1},Jwt="org.eclipse.elk.alg.common.compaction",Zwt="Scanline/EventHandler",gg="org.eclipse.elk.alg.common.compaction.oned",e3t="CNode belongs to another CGroup.",t3t="ISpacingsHandler/1",phe="The ",bhe=" instance has been finished already.",n3t="The direction ",r3t=" is not supported by the CGraph instance.",i3t="OneDimensionalCompactor",s3t="OneDimensionalCompactor/lambda$0$Type",a3t="Quadruplet",o3t="ScanlineConstraintCalculator",c3t="ScanlineConstraintCalculator/ConstraintsScanlineHandler",u3t="ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type",l3t="ScanlineConstraintCalculator/Timestamp",h3t="ScanlineConstraintCalculator/lambda$0$Type",Ld={178:1,46:1},mhe="org.eclipse.elk.alg.common.compaction.options",Nc="org.eclipse.elk.core.data",pEe="org.eclipse.elk.polyomino.traversalStrategy",bEe="org.eclipse.elk.polyomino.lowLevelSort",mEe="org.eclipse.elk.polyomino.highLevelSort",vEe="org.eclipse.elk.polyomino.fill",Pf={134:1},vhe="polyomino",oL="org.eclipse.elk.alg.common.networksimplex",pg={183:1,3:1,4:1},f3t="org.eclipse.elk.alg.common.nodespacing",ev="org.eclipse.elk.alg.common.nodespacing.cellsystem",cT="CENTER",d3t={217:1,336:1},wEe={3:1,4:1,5:1,603:1},Mx="LEFT",Dx="RIGHT",yEe="Vertical alignment cannot be null",xEe="BOTTOM",tG="org.eclipse.elk.alg.common.nodespacing.internal",cL="UNDEFINED",H1=.01,DP="org.eclipse.elk.alg.common.nodespacing.internal.algorithm",g3t="LabelPlacer/lambda$0$Type",p3t="LabelPlacer/lambda$1$Type",b3t="portRatioOrPosition",uT="org.eclipse.elk.alg.common.overlaps",whe="DOWN",Md="org.eclipse.elk.alg.common.polyomino",nG="NORTH",yhe="EAST",xhe="SOUTH",khe="WEST",rG="org.eclipse.elk.alg.common.polyomino.structures",kEe="Direction",Ehe="Grid is only of size ",The=". Requested point (",Che=") is out of bounds.",iG=" Given center based coordinates were (",IP="org.eclipse.elk.graph.properties",m3t="IPropertyHolder",EEe={3:1,96:1,137:1},Ix="org.eclipse.elk.alg.common.spore",v3t="org.eclipse.elk.alg.common.utils",tv={205:1},v6="org.eclipse.elk.core",w3t="Connected Components Compaction",y3t="org.eclipse.elk.alg.disco",sG="org.eclipse.elk.alg.disco.graph",She="org.eclipse.elk.alg.disco.options",TEe="CompactionStrategy",CEe="org.eclipse.elk.disco.componentCompaction.strategy",SEe="org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm",_Ee="org.eclipse.elk.disco.debug.discoGraph",AEe="org.eclipse.elk.disco.debug.discoPolys",x3t="componentCompaction",nv="org.eclipse.elk.disco",_he="org.eclipse.elk.spacing.componentComponent",Ahe="org.eclipse.elk.edge.thickness",Ox="org.eclipse.elk.aspectRatio",Xw="org.eclipse.elk.padding",w6="org.eclipse.elk.alg.disco.transform",Lhe=1.5707963267948966,y6=17976931348623157e292,Qy={3:1,4:1,5:1,198:1},k3t={3:1,6:1,4:1,5:1,100:1,115:1},Mhe="org.eclipse.elk.alg.force",LEe="ComponentsProcessor",E3t="ComponentsProcessor/1",MEe="ElkGraphImporter/lambda$0$Type",OP="org.eclipse.elk.alg.force.graph",T3t="Component Layout",DEe="org.eclipse.elk.alg.force.model",aG="org.eclipse.elk.force.model",IEe="org.eclipse.elk.force.iterations",OEe="org.eclipse.elk.force.repulsivePower",Dhe="org.eclipse.elk.force.temperature",Dd=.001,Ihe="org.eclipse.elk.force.repulsion",uL="org.eclipse.elk.alg.force.options",lT=1.600000023841858,Yu="org.eclipse.elk.force",NP="org.eclipse.elk.priority",Jy="org.eclipse.elk.spacing.nodeNode",Ohe="org.eclipse.elk.spacing.edgeLabel",oG="org.eclipse.elk.randomSeed",lL="org.eclipse.elk.separateConnectedComponents",hL="org.eclipse.elk.interactive",Nhe="org.eclipse.elk.portConstraints",cG="org.eclipse.elk.edgeLabels.inline",fL="org.eclipse.elk.omitNodeMicroLayout",hT="org.eclipse.elk.nodeSize.fixedGraphSize",Nx="org.eclipse.elk.nodeSize.options",x6="org.eclipse.elk.nodeSize.constraints",fT="org.eclipse.elk.nodeLabels.placement",dT="org.eclipse.elk.portLabels.placement",PP="org.eclipse.elk.topdownLayout",BP="org.eclipse.elk.topdown.scaleFactor",FP="org.eclipse.elk.topdown.hierarchicalNodeWidth",RP="org.eclipse.elk.topdown.hierarchicalNodeAspectRatio",Qw="org.eclipse.elk.topdown.nodeType",NEe="origin",C3t="random",S3t="boundingBox.upLeft",_3t="boundingBox.lowRight",PEe="org.eclipse.elk.stress.fixed",BEe="org.eclipse.elk.stress.desiredEdgeLength",FEe="org.eclipse.elk.stress.dimension",REe="org.eclipse.elk.stress.epsilon",jEe="org.eclipse.elk.stress.iterationLimit",Mb="org.eclipse.elk.stress",A3t="ELK Stress",Px="org.eclipse.elk.nodeSize.minimum",uG="org.eclipse.elk.alg.force.stress",L3t="Layered layout",Bx="org.eclipse.elk.alg.layered",jP="org.eclipse.elk.alg.layered.compaction.components",dL="org.eclipse.elk.alg.layered.compaction.oned",lG="org.eclipse.elk.alg.layered.compaction.oned.algs",rv="org.eclipse.elk.alg.layered.compaction.recthull",V1="org.eclipse.elk.alg.layered.components",Id="NONE",$Ee="MODEL_ORDER",au={3:1,6:1,4:1,9:1,5:1,126:1},M3t={3:1,6:1,4:1,5:1,150:1,100:1,115:1},hG="org.eclipse.elk.alg.layered.compound",ts={47:1},Cu="org.eclipse.elk.alg.layered.graph",Phe=" -> ",D3t="Not supported by LGraph",zEe="Port side is undefined",Bhe={3:1,6:1,4:1,5:1,483:1,150:1,100:1,115:1},m2={3:1,6:1,4:1,5:1,150:1,199:1,210:1,100:1,115:1},I3t={3:1,6:1,4:1,5:1,150:1,2042:1,210:1,100:1,115:1},O3t=`([{"' \r +`,N3t=`)]}"' \r +`,P3t="The given string contains parts that cannot be parsed as numbers.",$P="org.eclipse.elk.core.math",B3t={3:1,4:1,140:1,214:1,423:1},F3t={3:1,4:1,107:1,214:1,423:1},v2="org.eclipse.elk.alg.layered.graph.transform",R3t="ElkGraphImporter",j3t="ElkGraphImporter/lambda$1$Type",$3t="ElkGraphImporter/lambda$2$Type",z3t="ElkGraphImporter/lambda$4$Type",rr="org.eclipse.elk.alg.layered.intermediate",q3t="Node margin calculation",H3t="ONE_SIDED_GREEDY_SWITCH",V3t="TWO_SIDED_GREEDY_SWITCH",Fhe="No implementation is available for the layout processor ",Rhe="IntermediateProcessorStrategy",jhe="Node '",U3t="FIRST_SEPARATE",G3t="LAST_SEPARATE",K3t="Odd port side processing",aa="org.eclipse.elk.alg.layered.intermediate.compaction",gL="org.eclipse.elk.alg.layered.intermediate.greedyswitch",bg="org.eclipse.elk.alg.layered.p3order.counting",zP={230:1},Fx="org.eclipse.elk.alg.layered.intermediate.loops",Bh="org.eclipse.elk.alg.layered.intermediate.loops.ordering",Db="org.eclipse.elk.alg.layered.intermediate.loops.routing",qEe="org.eclipse.elk.alg.layered.intermediate.preserveorder",Od="org.eclipse.elk.alg.layered.intermediate.wrapping",ou="org.eclipse.elk.alg.layered.options",$he="INTERACTIVE",HEe="GREEDY",W3t="DEPTH_FIRST",Y3t="EDGE_LENGTH",X3t="SELF_LOOPS",Q3t="firstTryWithInitialOrder",VEe="org.eclipse.elk.layered.directionCongruency",UEe="org.eclipse.elk.layered.feedbackEdges",fG="org.eclipse.elk.layered.interactiveReferencePoint",GEe="org.eclipse.elk.layered.mergeEdges",KEe="org.eclipse.elk.layered.mergeHierarchyEdges",WEe="org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides",YEe="org.eclipse.elk.layered.portSortingStrategy",XEe="org.eclipse.elk.layered.thoroughness",QEe="org.eclipse.elk.layered.unnecessaryBendpoints",JEe="org.eclipse.elk.layered.generatePositionAndLayerIds",zhe="org.eclipse.elk.layered.cycleBreaking.strategy",qP="org.eclipse.elk.layered.layering.strategy",ZEe="org.eclipse.elk.layered.layering.layerConstraint",eTe="org.eclipse.elk.layered.layering.layerChoiceConstraint",tTe="org.eclipse.elk.layered.layering.layerId",qhe="org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth",Hhe="org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor",Vhe="org.eclipse.elk.layered.layering.nodePromotion.strategy",Uhe="org.eclipse.elk.layered.layering.nodePromotion.maxIterations",Ghe="org.eclipse.elk.layered.layering.coffmanGraham.layerBound",pL="org.eclipse.elk.layered.crossingMinimization.strategy",nTe="org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder",Khe="org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness",Whe="org.eclipse.elk.layered.crossingMinimization.semiInteractive",rTe="org.eclipse.elk.layered.crossingMinimization.inLayerPredOf",iTe="org.eclipse.elk.layered.crossingMinimization.inLayerSuccOf",sTe="org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint",aTe="org.eclipse.elk.layered.crossingMinimization.positionId",oTe="org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold",Yhe="org.eclipse.elk.layered.crossingMinimization.greedySwitch.type",dG="org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type",k6="org.eclipse.elk.layered.nodePlacement.strategy",gG="org.eclipse.elk.layered.nodePlacement.favorStraightEdges",Xhe="org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening",Qhe="org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment",Jhe="org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening",Zhe="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility",efe="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default",cTe="org.eclipse.elk.layered.edgeRouting.selfLoopDistribution",uTe="org.eclipse.elk.layered.edgeRouting.selfLoopOrdering",pG="org.eclipse.elk.layered.edgeRouting.splines.mode",bG="org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor",tfe="org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth",lTe="org.eclipse.elk.layered.spacing.baseValue",hTe="org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers",fTe="org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers",dTe="org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers",gTe="org.eclipse.elk.layered.priority.direction",pTe="org.eclipse.elk.layered.priority.shortness",bTe="org.eclipse.elk.layered.priority.straightness",nfe="org.eclipse.elk.layered.compaction.connectedComponents",mTe="org.eclipse.elk.layered.compaction.postCompaction.strategy",vTe="org.eclipse.elk.layered.compaction.postCompaction.constraints",mG="org.eclipse.elk.layered.highDegreeNodes.treatment",rfe="org.eclipse.elk.layered.highDegreeNodes.threshold",ife="org.eclipse.elk.layered.highDegreeNodes.treeHeight",fp="org.eclipse.elk.layered.wrapping.strategy",vG="org.eclipse.elk.layered.wrapping.additionalEdgeSpacing",wG="org.eclipse.elk.layered.wrapping.correctionFactor",bL="org.eclipse.elk.layered.wrapping.cutting.strategy",sfe="org.eclipse.elk.layered.wrapping.cutting.cuts",afe="org.eclipse.elk.layered.wrapping.cutting.msd.freedom",yG="org.eclipse.elk.layered.wrapping.validify.strategy",xG="org.eclipse.elk.layered.wrapping.validify.forbiddenIndices",kG="org.eclipse.elk.layered.wrapping.multiEdge.improveCuts",EG="org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty",ofe="org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges",wTe="org.eclipse.elk.layered.edgeLabels.sideSelection",yTe="org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy",TG="org.eclipse.elk.layered.considerModelOrder.strategy",xTe="org.eclipse.elk.layered.considerModelOrder.portModelOrder",kTe="org.eclipse.elk.layered.considerModelOrder.noModelOrder",cfe="org.eclipse.elk.layered.considerModelOrder.components",ETe="org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy",ufe="org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence",lfe="org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence",hfe="layering",J3t="layering.minWidth",Z3t="layering.nodePromotion",gT="crossingMinimization",CG="org.eclipse.elk.hierarchyHandling",eyt="crossingMinimization.greedySwitch",tyt="nodePlacement",nyt="nodePlacement.bk",ryt="edgeRouting",HP="org.eclipse.elk.edgeRouting",U1="spacing",TTe="priority",CTe="compaction",iyt="compaction.postCompaction",syt="Specifies whether and how post-process compaction is applied.",STe="highDegreeNodes",_Te="wrapping",ayt="wrapping.cutting",oyt="wrapping.validify",ATe="wrapping.multiEdge",ffe="edgeLabels",mL="considerModelOrder",LTe="org.eclipse.elk.spacing.commentComment",MTe="org.eclipse.elk.spacing.commentNode",DTe="org.eclipse.elk.spacing.edgeEdge",dfe="org.eclipse.elk.spacing.edgeNode",ITe="org.eclipse.elk.spacing.labelLabel",OTe="org.eclipse.elk.spacing.labelPortHorizontal",NTe="org.eclipse.elk.spacing.labelPortVertical",PTe="org.eclipse.elk.spacing.labelNode",BTe="org.eclipse.elk.spacing.nodeSelfLoop",FTe="org.eclipse.elk.spacing.portPort",RTe="org.eclipse.elk.spacing.individual",jTe="org.eclipse.elk.port.borderOffset",$Te="org.eclipse.elk.noLayout",zTe="org.eclipse.elk.port.side",VP="org.eclipse.elk.debugMode",qTe="org.eclipse.elk.alignment",HTe="org.eclipse.elk.insideSelfLoops.activate",VTe="org.eclipse.elk.insideSelfLoops.yo",gfe="org.eclipse.elk.direction",UTe="org.eclipse.elk.nodeLabels.padding",GTe="org.eclipse.elk.portLabels.nextToPortIfPossible",KTe="org.eclipse.elk.portLabels.treatAsGroup",WTe="org.eclipse.elk.portAlignment.default",YTe="org.eclipse.elk.portAlignment.north",XTe="org.eclipse.elk.portAlignment.south",QTe="org.eclipse.elk.portAlignment.west",JTe="org.eclipse.elk.portAlignment.east",SG="org.eclipse.elk.contentAlignment",ZTe="org.eclipse.elk.junctionPoints",eCe="org.eclipse.elk.edgeLabels.placement",tCe="org.eclipse.elk.port.index",nCe="org.eclipse.elk.commentBox",rCe="org.eclipse.elk.hypernode",iCe="org.eclipse.elk.port.anchor",pfe="org.eclipse.elk.partitioning.activate",bfe="org.eclipse.elk.partitioning.partition",_G="org.eclipse.elk.position",sCe="org.eclipse.elk.margins",aCe="org.eclipse.elk.spacing.portsSurrounding",AG="org.eclipse.elk.interactiveLayout",Uc="org.eclipse.elk.core.util",oCe={3:1,4:1,5:1,601:1},cyt="NETWORK_SIMPLEX",cCe="SIMPLE",Uo={106:1,47:1},LG="org.eclipse.elk.alg.layered.p1cycles",dp="org.eclipse.elk.alg.layered.p2layers",uCe={413:1,230:1},uyt={846:1,3:1,4:1},Cl="org.eclipse.elk.alg.layered.p3order",Go="org.eclipse.elk.alg.layered.p4nodes",lyt={3:1,4:1,5:1,854:1},Nd=1e-5,Ib="org.eclipse.elk.alg.layered.p4nodes.bk",mfe="org.eclipse.elk.alg.layered.p5edges",i1="org.eclipse.elk.alg.layered.p5edges.orthogonal",vfe="org.eclipse.elk.alg.layered.p5edges.orthogonal.direction",wfe=1e-6,Zy="org.eclipse.elk.alg.layered.p5edges.splines",yfe=.09999999999999998,MG=1e-8,hyt=4.71238898038469,lCe=3.141592653589793,gp="org.eclipse.elk.alg.mrtree",xfe=.10000000149011612,DG="SUPER_ROOT",vL="org.eclipse.elk.alg.mrtree.graph",hCe=-17976931348623157e292,Su="org.eclipse.elk.alg.mrtree.intermediate",fyt="Processor compute fanout",IG={3:1,6:1,4:1,5:1,534:1,100:1,115:1},dyt="Set neighbors in level",UP="org.eclipse.elk.alg.mrtree.options",gyt="DESCENDANTS",fCe="org.eclipse.elk.mrtree.compaction",dCe="org.eclipse.elk.mrtree.edgeEndTextureLength",gCe="org.eclipse.elk.mrtree.treeLevel",pCe="org.eclipse.elk.mrtree.positionConstraint",bCe="org.eclipse.elk.mrtree.weighting",mCe="org.eclipse.elk.mrtree.edgeRoutingMode",vCe="org.eclipse.elk.mrtree.searchOrder",pyt="Position Constraint",Xu="org.eclipse.elk.mrtree",byt="org.eclipse.elk.tree",myt="Processor arrange level",pT="org.eclipse.elk.alg.mrtree.p2order",vh="org.eclipse.elk.alg.mrtree.p4route",wCe="org.eclipse.elk.alg.radial",iv=6.283185307179586,yCe="Before",xCe=5e-324,OG="After",kCe="org.eclipse.elk.alg.radial.intermediate",vyt="COMPACTION",kfe="org.eclipse.elk.alg.radial.intermediate.compaction",wyt={3:1,4:1,5:1,100:1},ECe="org.eclipse.elk.alg.radial.intermediate.optimization",Efe="No implementation is available for the layout option ",wL="org.eclipse.elk.alg.radial.options",TCe="org.eclipse.elk.radial.centerOnRoot",CCe="org.eclipse.elk.radial.orderId",SCe="org.eclipse.elk.radial.radius",NG="org.eclipse.elk.radial.rotate",Tfe="org.eclipse.elk.radial.compactor",Cfe="org.eclipse.elk.radial.compactionStepSize",_Ce="org.eclipse.elk.radial.sorter",ACe="org.eclipse.elk.radial.wedgeCriteria",LCe="org.eclipse.elk.radial.optimizationCriteria",Sfe="org.eclipse.elk.radial.rotation.targetAngle",_fe="org.eclipse.elk.radial.rotation.computeAdditionalWedgeSpace",MCe="org.eclipse.elk.radial.rotation.outgoingEdgeAngles",yyt="Compaction",DCe="rotation",gf="org.eclipse.elk.radial",xyt="org.eclipse.elk.alg.radial.p1position.wedge",ICe="org.eclipse.elk.alg.radial.sorting",kyt=5.497787143782138,Eyt=3.9269908169872414,Tyt=2.356194490192345,Cyt="org.eclipse.elk.alg.rectpacking",PG="org.eclipse.elk.alg.rectpacking.intermediate",Afe="org.eclipse.elk.alg.rectpacking.options",OCe="org.eclipse.elk.rectpacking.trybox",NCe="org.eclipse.elk.rectpacking.currentPosition",PCe="org.eclipse.elk.rectpacking.desiredPosition",BCe="org.eclipse.elk.rectpacking.inNewRow",FCe="org.eclipse.elk.rectpacking.widthApproximation.strategy",RCe="org.eclipse.elk.rectpacking.widthApproximation.targetWidth",jCe="org.eclipse.elk.rectpacking.widthApproximation.optimizationGoal",$Ce="org.eclipse.elk.rectpacking.widthApproximation.lastPlaceShift",zCe="org.eclipse.elk.rectpacking.packing.strategy",qCe="org.eclipse.elk.rectpacking.packing.compaction.rowHeightReevaluation",HCe="org.eclipse.elk.rectpacking.packing.compaction.iterations",VCe="org.eclipse.elk.rectpacking.whiteSpaceElimination.strategy",Lfe="widthApproximation",Syt="Compaction Strategy",_yt="packing.compaction",th="org.eclipse.elk.rectpacking",bT="org.eclipse.elk.alg.rectpacking.p1widthapproximation",BG="org.eclipse.elk.alg.rectpacking.p2packing",Ayt="No Compaction",UCe="org.eclipse.elk.alg.rectpacking.p3whitespaceelimination",GP="org.eclipse.elk.alg.rectpacking.util",FG="No implementation available for ",e4="org.eclipse.elk.alg.spore",t4="org.eclipse.elk.alg.spore.options",Jw="org.eclipse.elk.sporeCompaction",Mfe="org.eclipse.elk.underlyingLayoutAlgorithm",GCe="org.eclipse.elk.processingOrder.treeConstruction",KCe="org.eclipse.elk.processingOrder.spanningTreeCostFunction",Dfe="org.eclipse.elk.processingOrder.preferredRoot",Ife="org.eclipse.elk.processingOrder.rootSelection",Ofe="org.eclipse.elk.structure.structureExtractionStrategy",WCe="org.eclipse.elk.compaction.compactionStrategy",YCe="org.eclipse.elk.compaction.orthogonal",XCe="org.eclipse.elk.overlapRemoval.maxIterations",QCe="org.eclipse.elk.overlapRemoval.runScanline",Nfe="processingOrder",Lyt="overlapRemoval",mT="org.eclipse.elk.sporeOverlap",Myt="org.eclipse.elk.alg.spore.p1structure",Pfe="org.eclipse.elk.alg.spore.p2processingorder",Bfe="org.eclipse.elk.alg.spore.p3execution",Dyt="Topdown Layout",Iyt="Invalid index: ",vT="org.eclipse.elk.core.alg",E6={341:1},n4={295:1},Oyt="Make sure its type is registered with the ",JCe=" utility class.",wT="true",Ffe="false",Nyt="Couldn't clone property '",Zw=.05,nh="org.eclipse.elk.core.options",Pyt=1.2999999523162842,e3="org.eclipse.elk.box",ZCe="org.eclipse.elk.expandNodes",eSe="org.eclipse.elk.box.packingMode",Byt="org.eclipse.elk.algorithm",Fyt="org.eclipse.elk.resolvedAlgorithm",tSe="org.eclipse.elk.bendPoints",sOn="org.eclipse.elk.labelManager",Ryt="org.eclipse.elk.scaleFactor",jyt="org.eclipse.elk.childAreaWidth",$yt="org.eclipse.elk.childAreaHeight",zyt="org.eclipse.elk.animate",qyt="org.eclipse.elk.animTimeFactor",Hyt="org.eclipse.elk.layoutAncestors",Vyt="org.eclipse.elk.maxAnimTime",Uyt="org.eclipse.elk.minAnimTime",Gyt="org.eclipse.elk.progressBar",Kyt="org.eclipse.elk.validateGraph",Wyt="org.eclipse.elk.validateOptions",Yyt="org.eclipse.elk.zoomToFit",aOn="org.eclipse.elk.font.name",Xyt="org.eclipse.elk.font.size",nSe="org.eclipse.elk.topdown.sizeApproximator",rSe="org.eclipse.elk.topdown.scaleCap",Qyt="org.eclipse.elk.edge.type",Jyt="partitioning",Zyt="nodeLabels",RG="portAlignment",Rfe="nodeSize",jfe="port",iSe="portLabels",KP="topdown",e4t="insideSelfLoops",yL="org.eclipse.elk.fixed",jG="org.eclipse.elk.random",sSe={3:1,34:1,22:1,347:1},t4t="port must have a parent node to calculate the port side",n4t="The edge needs to have exactly one edge section. Found: ",xL="org.eclipse.elk.core.util.adapters",pf="org.eclipse.emf.ecore",T6="org.eclipse.elk.graph",r4t="EMapPropertyHolder",i4t="ElkBendPoint",s4t="ElkGraphElement",a4t="ElkConnectableShape",aSe="ElkEdge",o4t="ElkEdgeSection",c4t="EModelElement",u4t="ENamedElement",oSe="ElkLabel",cSe="ElkNode",uSe="ElkPort",l4t={94:1,93:1},Rx="org.eclipse.emf.common.notify.impl",Ob="The feature '",kL="' is not a valid changeable feature",h4t="Expecting null",$fe="' is not a valid feature",f4t="The feature ID",d4t=" is not a valid feature ID",eu=32768,g4t={110:1,94:1,93:1,58:1,54:1,99:1},Gn="org.eclipse.emf.ecore.impl",sv="org.eclipse.elk.graph.impl",EL="Recursive containment not allowed for ",yT="The datatype '",t3="' is not a valid classifier",zfe="The value '",C6={195:1,3:1,4:1},qfe="The class '",xT="http://www.eclipse.org/elk/ElkGraph",lSe="property",TL="value",Hfe="source",p4t="properties",b4t="identifier",Vfe="height",Ufe="width",Gfe="parent",Kfe="text",Wfe="children",m4t="hierarchical",hSe="sources",Yfe="targets",fSe="sections",$G="bendPoints",dSe="outgoingShape",gSe="incomingShape",pSe="outgoingSections",bSe="incomingSections",So="org.eclipse.emf.common.util",mSe="Severe implementation error in the Json to ElkGraph importer.",Pd="id",no="org.eclipse.elk.graph.json",vSe="Unhandled parameter types: ",v4t="startPoint",w4t="An edge must have at least one source and one target (edge id: '",kT="').",y4t="Referenced edge section does not exist: ",x4t=" (edge id: '",wSe="target",k4t="sourcePoint",E4t="targetPoint",zG="group",_i="name",T4t="connectableShape cannot be null",C4t="edge cannot be null",Xfe="Passed edge is not 'simple'.",qG="org.eclipse.elk.graph.util",WP="The 'no duplicates' constraint is violated",Qfe="targetIndex=",av=", size=",Jfe="sourceIndex=",Bd={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1},Zfe={3:1,4:1,20:1,31:1,56:1,16:1,51:1,15:1,59:1,70:1,66:1,61:1,596:1},HG="logging",S4t="measureExecutionTime",_4t="parser.parse.1",A4t="parser.parse.2",VG="parser.next.1",e0e="parser.next.2",L4t="parser.next.3",M4t="parser.next.4",ov="parser.factor.1",ySe="parser.factor.2",D4t="parser.factor.3",I4t="parser.factor.4",O4t="parser.factor.5",N4t="parser.factor.6",P4t="parser.atom.1",B4t="parser.atom.2",F4t="parser.atom.3",xSe="parser.atom.4",t0e="parser.atom.5",kSe="parser.cc.1",UG="parser.cc.2",R4t="parser.cc.3",j4t="parser.cc.5",ESe="parser.cc.6",TSe="parser.cc.7",n0e="parser.cc.8",$4t="parser.ope.1",z4t="parser.ope.2",q4t="parser.ope.3",w2="parser.descape.1",H4t="parser.descape.2",V4t="parser.descape.3",U4t="parser.descape.4",G4t="parser.descape.5",bf="parser.process.1",K4t="parser.quantifier.1",W4t="parser.quantifier.2",Y4t="parser.quantifier.3",X4t="parser.quantifier.4",CSe="parser.quantifier.5",Q4t="org.eclipse.emf.common.notify",SSe={424:1,686:1},J4t={3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1},YP={378:1,152:1},CL="index=",r0e={3:1,4:1,5:1,129:1},Z4t={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,61:1},_Se={3:1,6:1,4:1,5:1,198:1},e5t={3:1,4:1,5:1,173:1,379:1},t5t=";/?:@&=+$,",n5t="invalid authority: ",r5t="EAnnotation",i5t="ETypedElement",s5t="EStructuralFeature",a5t="EAttribute",o5t="EClassifier",c5t="EEnumLiteral",u5t="EGenericType",l5t="EOperation",h5t="EParameter",f5t="EReference",d5t="ETypeParameter",us="org.eclipse.emf.ecore.util",i0e={79:1},ASe={3:1,20:1,16:1,15:1,61:1,597:1,79:1,71:1,97:1},g5t="org.eclipse.emf.ecore.util.FeatureMap$Entry",Sl=8192,r4=2048,SL="byte",GG="char",_L="double",AL="float",LL="int",ML="long",DL="short",p5t="java.lang.Object",S6={3:1,4:1,5:1,254:1},LSe={3:1,4:1,5:1,688:1},b5t={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,71:1},kc={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,79:1,71:1,97:1},XP="mixed",li="http:///org/eclipse/emf/ecore/util/ExtendedMetaData",Bf="kind",m5t={3:1,4:1,5:1,689:1},MSe={3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1,79:1,71:1,97:1},KG={20:1,31:1,56:1,16:1,15:1,61:1,71:1},WG={51:1,128:1,287:1},YG={76:1,343:1},XG="The value of type '",QG="' must be of type '",_6=1352,Ff="http://www.eclipse.org/emf/2002/Ecore",JG=-32768,n3="constraints",ho="baseType",v5t="getEStructuralFeature",w5t="getFeatureID",IL="feature",y5t="getOperationID",DSe="operation",x5t="defaultValue",k5t="eTypeParameters",E5t="isInstance",T5t="getEEnumLiteral",C5t="eContainingClass",yi={57:1},S5t={3:1,4:1,5:1,124:1},_5t="org.eclipse.emf.ecore.resource",A5t={94:1,93:1,599:1,2034:1},s0e="org.eclipse.emf.ecore.resource.impl",ISe="unspecified",QP="simple",ZG="attribute",L5t="attributeWildcard",eK="element",a0e="elementWildcard",s1="collapse",o0e="itemType",tK="namespace",JP="##targetNamespace",Rf="whiteSpace",OSe="wildcards",cv="http://www.eclipse.org/emf/2003/XMLType",c0e="##any",ET="uninitialized",ZP="The multiplicity constraint is violated",nK="org.eclipse.emf.ecore.xml.type",M5t="ProcessingInstruction",D5t="SimpleAnyType",I5t="XMLTypeDocumentRoot",ea="org.eclipse.emf.ecore.xml.type.impl",eB="INF",O5t="processing",N5t="ENTITIES_._base",NSe="minLength",PSe="ENTITY",rK="NCName",P5t="IDREFS_._base",BSe="integer",u0e="token",l0e="pattern",B5t="[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*",FSe="\\i\\c*",F5t="[\\i-[:]][\\c-[:]]*",R5t="nonPositiveInteger",tB="maxInclusive",RSe="NMTOKEN",j5t="NMTOKENS_._base",jSe="nonNegativeInteger",nB="minInclusive",$5t="normalizedString",z5t="unsignedByte",q5t="unsignedInt",H5t="18446744073709551615",V5t="unsignedShort",U5t="processingInstruction",y2="org.eclipse.emf.ecore.xml.type.internal",TT=1114111,G5t="Internal Error: shorthands: \\u",OL="xml:isDigit",h0e="xml:isWord",f0e="xml:isSpace",d0e="xml:isNameChar",g0e="xml:isInitialNameChar",K5t="09٠٩۰۹०९০৯੦੯૦૯୦୯௧௯౦౯೦೯൦൯๐๙໐໙༠༩",W5t="AZazÀÖØöøıĴľŁňŊžƀǃǍǰǴǵǺȗɐʨʻˁΆΆΈΊΌΌΎΡΣώϐϖϚϚϜϜϞϞϠϠϢϳЁЌЎяёќўҁҐӄӇӈӋӌӐӫӮӵӸӹԱՖՙՙաֆאתװײءغفيٱڷںھۀێېۓەەۥۦअहऽऽक़ॡঅঌএঐওনপরললশহড়ঢ়য়ৡৰৱਅਊਏਐਓਨਪਰਲਲ਼ਵਸ਼ਸਹਖ਼ੜਫ਼ਫ਼ੲੴઅઋઍઍએઑઓનપરલળવહઽઽૠૠଅଌଏଐଓନପରଲଳଶହଽଽଡ଼ଢ଼ୟୡஅஊஎஐஒகஙசஜஜஞடணதநபமவஷஹఅఌఎఐఒనపళవహౠౡಅಌಎಐಒನಪಳವಹೞೞೠೡഅഌഎഐഒനപഹൠൡกฮะะาำเๅກຂຄຄງຈຊຊຍຍດທນຟມຣລລວວສຫອຮະະາຳຽຽເໄཀཇཉཀྵႠჅაჶᄀᄀᄂᄃᄅᄇᄉᄉᄋᄌᄎᄒᄼᄼᄾᄾᅀᅀᅌᅌᅎᅎᅐᅐᅔᅕᅙᅙᅟᅡᅣᅣᅥᅥᅧᅧᅩᅩᅭᅮᅲᅳᅵᅵᆞᆞᆨᆨᆫᆫᆮᆯᆷᆸᆺᆺᆼᇂᇫᇫᇰᇰᇹᇹḀẛẠỹἀἕἘἝἠὅὈὍὐὗὙὙὛὛὝὝὟώᾀᾴᾶᾼιιῂῄῆῌῐΐῖΊῠῬῲῴῶῼΩΩKÅ℮℮ↀↂ〇〇〡〩ぁゔァヺㄅㄬ一龥가힣",Y5t="Private Use",p0e="ASSIGNED",b0e="\0€ÿĀſƀɏɐʯʰ˿̀ͯͰϿЀӿ԰֏֐׿؀ۿ܀ݏހ޿ऀॿঀ৿਀੿઀૿଀୿஀௿ఀ౿ಀ೿ഀൿ඀෿฀๿຀໿ༀ࿿က႟Ⴀჿᄀᇿሀ፿Ꭰ᏿᐀ᙿ ᚟ᚠ᛿ក៿᠀᢯Ḁỿἀ῿ ⁰₟₠⃏⃐⃿℀⅏⅐↏←⇿∀⋿⌀⏿␀␿⑀⑟①⓿─╿▀▟■◿☀⛿✀➿⠀⣿⺀⻿⼀⿟⿰⿿ 〿぀ゟ゠ヿ㄀ㄯ㄰㆏㆐㆟ㆠㆿ㈀㋿㌀㏿㐀䶵一鿿ꀀ꒏꒐꓏가힣豈﫿ffﭏﭐ﷿︠︯︰﹏﹐﹯ﹰ﻾\uFEFF\uFEFF＀￯",$Se="UNASSIGNED",CT={3:1,122:1},X5t="org.eclipse.emf.ecore.xml.type.util",iK={3:1,4:1,5:1,381:1},zSe="org.eclipse.xtext.xbase.lib",Q5t="Cannot add elements to a Range",J5t="Cannot set elements in a Range",Z5t="Cannot remove elements from a Range",e6t="user.agent",h,sK,m0e;b.goog=b.goog||{},b.goog.global=b.goog.global||b,sK={},D(1,null,{},T),h.Fb=function(t){return Jtt(this,t)},h.Gb=function(){return this.Rm},h.Hb=function(){return fw(this)},h.Ib=function(){var t;return _m(bh(this))+"@"+(t=es(this)>>>0,t.toString(16))},h.equals=function(e){return this.Fb(e)},h.hashCode=function(){return this.Hb()},h.toString=function(){return this.Ib()};var t6t,n6t,r6t;D(297,1,{297:1,2124:1},B7e),h.ve=function(t){var n;return n=new B7e,n.i=4,t>1?n.c=yot(this,t-1):n.c=this,n},h.we=function(){return Gg(this),this.b},h.xe=function(){return _m(this)},h.ye=function(){return Gg(this),this.k},h.ze=function(){return(this.i&4)!=0},h.Ae=function(){return(this.i&1)!=0},h.Ib=function(){return K6e(this)},h.i=0;var wa=I(Vc,"Object",1),qSe=I(Vc,"Class",297);D(2096,1,yP),I(xP,"Optional",2096),D(1191,2096,yP,_),h.Fb=function(t){return t===this},h.Hb=function(){return 2040732332},h.Ib=function(){return"Optional.absent()"},h.Jb=function(t){return Xr(t),o_(),v0e};var v0e;I(xP,"Absent",1191),D(636,1,{},Zie),I(xP,"Joiner",636);var oOn=ks(xP,"Predicate");D(589,1,{178:1,589:1,3:1,46:1},gz),h.Mb=function(t){return y0t(this,t)},h.Lb=function(t){return y0t(this,t)},h.Fb=function(t){var n;return De(t,589)?(n=l(t,589),O9e(this.a,n.a)):!1},h.Hb=function(){return q7e(this.a)+306654252},h.Ib=function(){return K9n(this.a)},I(xP,"Predicates/AndPredicate",589),D(419,2096,{419:1,3:1},JS),h.Fb=function(t){var n;return De(t,419)?(n=l(t,419),Pi(this.a,n.a)):!1},h.Hb=function(){return 1502476572+es(this.a)},h.Ib=function(){return Awt+this.a+")"},h.Jb=function(t){return new JS(_H(t.Kb(this.a),"the Function passed to Optional.transform() must not return null."))},I(xP,"Present",419),D(204,1,eT),h.Nb=function(t){Za(this,t)},h.Qb=function(){jJe()},I(dn,"UnmodifiableIterator",204),D(2076,204,tT),h.Qb=function(){jJe()},h.Rb=function(t){throw ue(new Qr)},h.Wb=function(t){throw ue(new Qr)},I(dn,"UnmodifiableListIterator",2076),D(399,2076,tT),h.Ob=function(){return this.c0},h.Pb=function(){if(this.c>=this.d)throw ue(new _c);return this.Xb(this.c++)},h.Tb=function(){return this.c},h.Ub=function(){if(this.c<=0)throw ue(new _c);return this.Xb(--this.c)},h.Vb=function(){return this.c-1},h.c=0,h.d=0,I(dn,"AbstractIndexedListIterator",399),D(713,204,eT),h.Ob=function(){return tce(this)},h.Pb=function(){return z6e(this)},h.e=1,I(dn,"AbstractIterator",713),D(2084,1,{229:1}),h.Zb=function(){var t;return t=this.f,t||(this.f=this.ac())},h.Fb=function(t){return Ece(this,t)},h.Hb=function(){return es(this.Zb())},h.dc=function(){return this.gc()==0},h.ec=function(){return W8(this)},h.Ib=function(){return xc(this.Zb())},I(dn,"AbstractMultimap",2084),D(742,2084,Jm),h.$b=function(){mV(this)},h._b=function(t){return iZe(this,t)},h.ac=function(){return new Lk(this,this.c)},h.ic=function(t){return this.hc()},h.bc=function(){return new q5(this,this.c)},h.jc=function(){return this.mc(this.hc())},h.kc=function(){return new EJe(this)},h.lc=function(){return Iue(this.c.vc().Nc(),new P,64,this.d)},h.cc=function(t){return $i(this,t)},h.fc=function(t){return DN(this,t)},h.gc=function(){return this.d},h.mc=function(t){return Cn(),new $a(t)},h.nc=function(){return new kJe(this)},h.oc=function(){return Iue(this.c.Cc().Nc(),new A,64,this.d)},h.pc=function(t,n){return new YH(this,t,n,null)},h.d=0,I(dn,"AbstractMapBasedMultimap",742),D(1696,742,Jm),h.hc=function(){return new Bu(this.a)},h.jc=function(){return Cn(),Cn(),_o},h.cc=function(t){return l($i(this,t),15)},h.fc=function(t){return l(DN(this,t),15)},h.Zb=function(){return ex(this)},h.Fb=function(t){return Ece(this,t)},h.qc=function(t){return l($i(this,t),15)},h.rc=function(t){return l(DN(this,t),15)},h.mc=function(t){return ioe(l(t,15))},h.pc=function(t,n){return _ct(this,t,l(n,15),null)},I(dn,"AbstractListMultimap",1696),D(748,1,Oa),h.Nb=function(t){Za(this,t)},h.Ob=function(){return this.c.Ob()||this.e.Ob()},h.Pb=function(){var t;return this.e.Ob()||(t=l(this.c.Pb(),44),this.b=t.ld(),this.a=l(t.md(),16),this.e=this.a.Kc()),this.sc(this.b,this.e.Pb())},h.Qb=function(){this.e.Qb(),l(Lf(this.a),16).dc()&&this.c.Qb(),--this.d.d},I(dn,"AbstractMapBasedMultimap/Itr",748),D(1129,748,Oa,kJe),h.sc=function(t,n){return n},I(dn,"AbstractMapBasedMultimap/1",1129),D(1130,1,{},A),h.Kb=function(t){return l(t,16).Nc()},I(dn,"AbstractMapBasedMultimap/1methodref$spliterator$Type",1130),D(1131,748,Oa,EJe),h.sc=function(t,n){return new iw(t,n)},I(dn,"AbstractMapBasedMultimap/2",1131);var HSe=ks(Lr,"Map");D(2065,1,Ww),h.wc=function(t){mA(this,t)},h.yc=function(t,n,r){return qce(this,t,n,r)},h.$b=function(){this.vc().$b()},h.tc=function(t){return gue(this,t)},h._b=function(t){return!!Dxe(this,t,!1)},h.uc=function(t){var n,r,a;for(r=this.vc().Kc();r.Ob();)if(n=l(r.Pb(),44),a=n.md(),qe(t)===qe(a)||t!=null&&Pi(t,a))return!0;return!1},h.Fb=function(t){var n,r,a;if(t===this)return!0;if(!De(t,85)||(a=l(t,85),this.gc()!=a.gc()))return!1;for(r=a.vc().Kc();r.Ob();)if(n=l(r.Pb(),44),!this.tc(n))return!1;return!0},h.xc=function(t){return hc(Dxe(this,t,!1))},h.Hb=function(){return I7e(this.vc())},h.dc=function(){return this.gc()==0},h.ec=function(){return new br(this)},h.zc=function(t,n){throw ue(new Hp("Put not supported on this map"))},h.Ac=function(t){bA(this,t)},h.Bc=function(t){return hc(Dxe(this,t,!0))},h.gc=function(){return this.vc().gc()},h.Ib=function(){return Igt(this)},h.Cc=function(){return new gi(this)},I(Lr,"AbstractMap",2065),D(2085,2065,Ww),h.bc=function(){return new Yz(this)},h.vc=function(){return Est(this)},h.ec=function(){var t;return t=this.g,t||(this.g=this.bc())},h.Cc=function(){var t;return t=this.i,t||(this.i=new WZe(this))},I(dn,"Maps/ViewCachingAbstractMap",2085),D(402,2085,Ww,Lk),h.xc=function(t){return fwn(this,t)},h.Bc=function(t){return Pyn(this,t)},h.$b=function(){this.d==this.e.c?this.e.$b():iH(new V4e(this))},h._b=function(t){return i1t(this.d,t)},h.Ec=function(){return new pz(this)},h.Dc=function(){return this.Ec()},h.Fb=function(t){return this===t||Pi(this.d,t)},h.Hb=function(){return es(this.d)},h.ec=function(){return this.e.ec()},h.gc=function(){return this.d.gc()},h.Ib=function(){return xc(this.d)},I(dn,"AbstractMapBasedMultimap/AsMap",402);var Fh=ks(Vc,"Iterable");D(31,1,Wy),h.Jc=function(t){to(this,t)},h.Lc=function(){return this.Oc()},h.Nc=function(){return new kn(this,0)},h.Oc=function(){return new bn(null,this.Nc())},h.Fc=function(t){throw ue(new Hp("Add not supported on this collection"))},h.Gc=function(t){return Ka(this,t)},h.$b=function(){M5e(this)},h.Hc=function(t){return Ny(this,t,!1)},h.Ic=function(t){return EN(this,t)},h.dc=function(){return this.gc()==0},h.Mc=function(t){return Ny(this,t,!0)},h.Pc=function(){return e5e(this)},h.Qc=function(t){return PA(this,t)},h.Ib=function(){return Tb(this)},I(Lr,"AbstractCollection",31);var jf=ks(Lr,"Set");D(q1,31,Tl),h.Nc=function(){return new kn(this,1)},h.Fb=function(t){return Y1t(this,t)},h.Hb=function(){return I7e(this)},I(Lr,"AbstractSet",q1),D(2068,q1,Tl),I(dn,"Sets/ImprovedAbstractSet",2068),D(2069,2068,Tl),h.$b=function(){this.Rc().$b()},h.Hc=function(t){return O1t(this,t)},h.dc=function(){return this.Rc().dc()},h.Mc=function(t){var n;return this.Hc(t)&&De(t,44)?(n=l(t,44),this.Rc().ec().Mc(n.ld())):!1},h.gc=function(){return this.Rc().gc()},I(dn,"Maps/EntrySet",2069),D(1127,2069,Tl,pz),h.Hc=function(t){return s8e(this.a.d.vc(),t)},h.Kc=function(){return new V4e(this.a)},h.Rc=function(){return this.a},h.Mc=function(t){var n;return s8e(this.a.d.vc(),t)?(n=l(Lf(l(t,44)),44),evn(this.a.e,n.ld()),!0):!1},h.Nc=function(){return NO(this.a.d.vc().Nc(),new bz(this.a))},I(dn,"AbstractMapBasedMultimap/AsMap/AsMapEntries",1127),D(1128,1,{},bz),h.Kb=function(t){return Cut(this.a,l(t,44))},I(dn,"AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type",1128),D(746,1,Oa,V4e),h.Nb=function(t){Za(this,t)},h.Pb=function(){var t;return t=l(this.b.Pb(),44),this.a=l(t.md(),16),Cut(this.c,t)},h.Ob=function(){return this.b.Ob()},h.Qb=function(){Rk(!!this.a),this.b.Qb(),this.c.e.d-=this.a.gc(),this.a.$b(),this.a=null},I(dn,"AbstractMapBasedMultimap/AsMap/AsMapIterator",746),D(542,2068,Tl,Yz),h.$b=function(){this.b.$b()},h.Hc=function(t){return this.b._b(t)},h.Jc=function(t){Xr(t),this.b.wc(new xz(t))},h.dc=function(){return this.b.dc()},h.Kc=function(){return new c_(this.b.vc().Kc())},h.Mc=function(t){return this.b._b(t)?(this.b.Bc(t),!0):!1},h.gc=function(){return this.b.gc()},I(dn,"Maps/KeySet",542),D(327,542,Tl,q5),h.$b=function(){var t;iH((t=this.b.vc().Kc(),new g3e(this,t)))},h.Ic=function(t){return this.b.ec().Ic(t)},h.Fb=function(t){return this===t||Pi(this.b.ec(),t)},h.Hb=function(){return es(this.b.ec())},h.Kc=function(){var t;return t=this.b.vc().Kc(),new g3e(this,t)},h.Mc=function(t){var n,r;return r=0,n=l(this.b.Bc(t),16),n&&(r=n.gc(),n.$b(),this.a.d-=r),r>0},h.Nc=function(){return this.b.ec().Nc()},I(dn,"AbstractMapBasedMultimap/KeySet",327),D(747,1,Oa,g3e),h.Nb=function(t){Za(this,t)},h.Ob=function(){return this.c.Ob()},h.Pb=function(){return this.a=l(this.c.Pb(),44),this.a.ld()},h.Qb=function(){var t;Rk(!!this.a),t=l(this.a.md(),16),this.c.Qb(),this.b.a.d-=t.gc(),t.$b(),this.a=null},I(dn,"AbstractMapBasedMultimap/KeySet/1",747),D(503,402,{85:1,133:1},_O),h.bc=function(){return this.Sc()},h.ec=function(){return this.Uc()},h.Sc=function(){return new tO(this.c,this.Wc())},h.Tc=function(){return this.Wc().Tc()},h.Uc=function(){var t;return t=this.b,t||(this.b=this.Sc())},h.Vc=function(){return this.Wc().Vc()},h.Wc=function(){return l(this.d,133)},I(dn,"AbstractMapBasedMultimap/SortedAsMap",503),D(446,503,Zke,q_),h.bc=function(){return new Ak(this.a,l(l(this.d,133),139))},h.Sc=function(){return new Ak(this.a,l(l(this.d,133),139))},h.ec=function(){var t;return t=this.b,l(t||(this.b=new Ak(this.a,l(l(this.d,133),139))),277)},h.Uc=function(){var t;return t=this.b,l(t||(this.b=new Ak(this.a,l(l(this.d,133),139))),277)},h.Wc=function(){return l(l(this.d,133),139)},h.Xc=function(t){return l(l(this.d,133),139).Xc(t)},h.Yc=function(t){return l(l(this.d,133),139).Yc(t)},h.Zc=function(t,n){return new q_(this.a,l(l(this.d,133),139).Zc(t,n))},h.$c=function(t){return l(l(this.d,133),139).$c(t)},h._c=function(t){return l(l(this.d,133),139)._c(t)},h.ad=function(t,n){return new q_(this.a,l(l(this.d,133),139).ad(t,n))},I(dn,"AbstractMapBasedMultimap/NavigableAsMap",446),D(502,327,Lwt,tO),h.Nc=function(){return this.b.ec().Nc()},I(dn,"AbstractMapBasedMultimap/SortedKeySet",502),D(401,502,eEe,Ak),I(dn,"AbstractMapBasedMultimap/NavigableKeySet",401),D(551,31,Wy,YH),h.Fc=function(t){var n,r;return Ql(this),r=this.d.dc(),n=this.d.Fc(t),n&&(++this.f.d,r&&DO(this)),n},h.Gc=function(t){var n,r,a;return t.dc()?!1:(a=(Ql(this),this.d.gc()),n=this.d.Gc(t),n&&(r=this.d.gc(),this.f.d+=r-a,a==0&&DO(this)),n)},h.$b=function(){var t;t=(Ql(this),this.d.gc()),t!=0&&(this.d.$b(),this.f.d-=t,lH(this))},h.Hc=function(t){return Ql(this),this.d.Hc(t)},h.Ic=function(t){return Ql(this),this.d.Ic(t)},h.Fb=function(t){return t===this?!0:(Ql(this),Pi(this.d,t))},h.Hb=function(){return Ql(this),es(this.d)},h.Kc=function(){return Ql(this),new _4e(this)},h.Mc=function(t){var n;return Ql(this),n=this.d.Mc(t),n&&(--this.f.d,lH(this)),n},h.gc=function(){return Rtt(this)},h.Nc=function(){return Ql(this),this.d.Nc()},h.Ib=function(){return Ql(this),xc(this.d)},I(dn,"AbstractMapBasedMultimap/WrappedCollection",551);var mf=ks(Lr,"List");D(744,551,{20:1,31:1,16:1,15:1},r5e),h.jd=function(t){$m(this,t)},h.Nc=function(){return Ql(this),this.d.Nc()},h.bd=function(t,n){var r;Ql(this),r=this.d.dc(),l(this.d,15).bd(t,n),++this.a.d,r&&DO(this)},h.cd=function(t,n){var r,a,o;return n.dc()?!1:(o=(Ql(this),this.d.gc()),r=l(this.d,15).cd(t,n),r&&(a=this.d.gc(),this.a.d+=a-o,o==0&&DO(this)),r)},h.Xb=function(t){return Ql(this),l(this.d,15).Xb(t)},h.dd=function(t){return Ql(this),l(this.d,15).dd(t)},h.ed=function(){return Ql(this),new gnt(this)},h.fd=function(t){return Ql(this),new Fat(this,t)},h.gd=function(t){var n;return Ql(this),n=l(this.d,15).gd(t),--this.a.d,lH(this),n},h.hd=function(t,n){return Ql(this),l(this.d,15).hd(t,n)},h.kd=function(t,n){return Ql(this),_ct(this.a,this.e,l(this.d,15).kd(t,n),this.b?this.b:this)},I(dn,"AbstractMapBasedMultimap/WrappedList",744),D(1126,744,{20:1,31:1,16:1,15:1,59:1},rrt),I(dn,"AbstractMapBasedMultimap/RandomAccessWrappedList",1126),D(628,1,Oa,_4e),h.Nb=function(t){Za(this,t)},h.Ob=function(){return Yk(this),this.b.Ob()},h.Pb=function(){return Yk(this),this.b.Pb()},h.Qb=function(){znt(this)},I(dn,"AbstractMapBasedMultimap/WrappedCollection/WrappedIterator",628),D(745,628,lg,gnt,Fat),h.Qb=function(){znt(this)},h.Rb=function(t){var n;n=Rtt(this.a)==0,(Yk(this),l(this.b,128)).Rb(t),++this.a.a.d,n&&DO(this.a)},h.Sb=function(){return(Yk(this),l(this.b,128)).Sb()},h.Tb=function(){return(Yk(this),l(this.b,128)).Tb()},h.Ub=function(){return(Yk(this),l(this.b,128)).Ub()},h.Vb=function(){return(Yk(this),l(this.b,128)).Vb()},h.Wb=function(t){(Yk(this),l(this.b,128)).Wb(t)},I(dn,"AbstractMapBasedMultimap/WrappedList/WrappedListIterator",745),D(743,551,Lwt,Gye),h.Nc=function(){return Ql(this),this.d.Nc()},I(dn,"AbstractMapBasedMultimap/WrappedSortedSet",743),D(1125,743,eEe,unt),I(dn,"AbstractMapBasedMultimap/WrappedNavigableSet",1125),D(1124,551,Tl,Trt),h.Nc=function(){return Ql(this),this.d.Nc()},I(dn,"AbstractMapBasedMultimap/WrappedSet",1124),D(1133,1,{},P),h.Kb=function(t){return lvn(l(t,44))},I(dn,"AbstractMapBasedMultimap/lambda$1$Type",1133),D(1132,1,{},bie),h.Kb=function(t){return new iw(this.a,t)},I(dn,"AbstractMapBasedMultimap/lambda$2$Type",1132);var uv=ks(Lr,"Map/Entry");D(358,1,Nle),h.Fb=function(t){var n;return De(t,44)?(n=l(t,44),yd(this.ld(),n.ld())&&yd(this.md(),n.md())):!1},h.Hb=function(){var t,n;return t=this.ld(),n=this.md(),(t==null?0:es(t))^(n==null?0:es(n))},h.nd=function(t){throw ue(new Qr)},h.Ib=function(){return this.ld()+"="+this.md()},I(dn,Mwt,358),D(2086,31,Wy),h.$b=function(){this.od().$b()},h.Hc=function(t){var n;return De(t,44)?(n=l(t,44),Dbn(this.od(),n.ld(),n.md())):!1},h.Mc=function(t){var n;return De(t,44)?(n=l(t,44),cct(this.od(),n.ld(),n.md())):!1},h.gc=function(){return this.od().d},I(dn,"Multimaps/Entries",2086),D(749,2086,Wy,vz),h.Kc=function(){return this.a.kc()},h.od=function(){return this.a},h.Nc=function(){return this.a.lc()},I(dn,"AbstractMultimap/Entries",749),D(750,749,Tl,Uwe),h.Nc=function(){return this.a.lc()},h.Fb=function(t){return Qxe(this,t)},h.Hb=function(){return wft(this)},I(dn,"AbstractMultimap/EntrySet",750),D(751,31,Wy,Q2),h.$b=function(){this.a.$b()},h.Hc=function(t){return Lyn(this.a,t)},h.Kc=function(){return this.a.nc()},h.gc=function(){return this.a.d},h.Nc=function(){return this.a.oc()},I(dn,"AbstractMultimap/Values",751),D(2087,31,{849:1,20:1,31:1,16:1}),h.Jc=function(t){Xr(t),V5(this).Jc(new kie(t))},h.Nc=function(){var t;return t=V5(this).Nc(),Iue(t,new pe,64|t.yd()&1296,this.a.d)},h.Fc=function(t){return Zwe(),!0},h.Gc=function(t){return Xr(this),Xr(t),De(t,552)?Nbn(l(t,849)):!t.dc()&&Goe(this,t.Kc())},h.Hc=function(t){var n;return n=l(Oy(ex(this.a),t),16),(n?n.gc():0)>0},h.Fb=function(t){return nTn(this,t)},h.Hb=function(){return es(V5(this))},h.dc=function(){return V5(this).dc()},h.Mc=function(t){return Upt(this,t,1)>0},h.Ib=function(){return xc(V5(this))},I(dn,"AbstractMultiset",2087),D(2089,2068,Tl),h.$b=function(){mV(this.a.a)},h.Hc=function(t){var n,r;return De(t,504)?(r=l(t,425),l(r.a.md(),16).gc()<=0?!1:(n=Pot(this.a,r.a.ld()),n==l(r.a.md(),16).gc())):!1},h.Mc=function(t){var n,r,a,o;return De(t,504)&&(r=l(t,425),n=r.a.ld(),a=l(r.a.md(),16).gc(),a!=0)?(o=this.a,Gkn(o,n,a)):!1},I(dn,"Multisets/EntrySet",2089),D(1139,2089,Tl,mie),h.Kc=function(){return new AJe(Est(ex(this.a.a)).Kc())},h.gc=function(){return ex(this.a.a).gc()},I(dn,"AbstractMultiset/EntrySet",1139),D(627,742,Jm),h.hc=function(){return this.pd()},h.jc=function(){return this.qd()},h.cc=function(t){return this.rd(t)},h.fc=function(t){return this.sd(t)},h.Zb=function(){var t;return t=this.f,t||(this.f=this.ac())},h.qd=function(){return Cn(),Cn(),hK},h.Fb=function(t){return Ece(this,t)},h.rd=function(t){return l($i(this,t),21)},h.sd=function(t){return l(DN(this,t),21)},h.mc=function(t){return Cn(),new Ek(l(t,21))},h.pc=function(t,n){return new Trt(this,t,l(n,21))},I(dn,"AbstractSetMultimap",627),D(1723,627,Jm),h.hc=function(){return new Kp(this.b)},h.pd=function(){return new Kp(this.b)},h.jc=function(){return T5e(new Kp(this.b))},h.qd=function(){return T5e(new Kp(this.b))},h.cc=function(t){return l(l($i(this,t),21),87)},h.rd=function(t){return l(l($i(this,t),21),87)},h.fc=function(t){return l(l(DN(this,t),21),87)},h.sd=function(t){return l(l(DN(this,t),21),87)},h.mc=function(t){return De(t,277)?T5e(l(t,277)):(Cn(),new Dye(l(t,87)))},h.Zb=function(){var t;return t=this.f,t||(this.f=De(this.c,139)?new q_(this,l(this.c,139)):De(this.c,133)?new _O(this,l(this.c,133)):new Lk(this,this.c))},h.pc=function(t,n){return De(n,277)?new unt(this,t,l(n,277)):new Gye(this,t,l(n,87))},I(dn,"AbstractSortedSetMultimap",1723),D(1724,1723,Jm),h.Zb=function(){var t;return t=this.f,l(l(t||(this.f=De(this.c,139)?new q_(this,l(this.c,139)):De(this.c,133)?new _O(this,l(this.c,133)):new Lk(this,this.c)),133),139)},h.ec=function(){var t;return t=this.i,l(l(t||(this.i=De(this.c,139)?new Ak(this,l(this.c,139)):De(this.c,133)?new tO(this,l(this.c,133)):new q5(this,this.c)),87),277)},h.bc=function(){return De(this.c,139)?new Ak(this,l(this.c,139)):De(this.c,133)?new tO(this,l(this.c,133)):new q5(this,this.c)},I(dn,"AbstractSortedKeySortedSetMultimap",1724),D(2109,1,{2046:1}),h.Fb=function(t){return _8n(this,t)},h.Hb=function(){var t;return I7e((t=this.g,t||(this.g=new $I(this))))},h.Ib=function(){var t;return Igt((t=this.f,t||(this.f=new _ye(this))))},I(dn,"AbstractTable",2109),D(679,q1,Tl,$I),h.$b=function(){$Je()},h.Hc=function(t){var n,r;return De(t,479)?(n=l(t,697),r=l(Oy(Kst(this.a),ab(n.c.e,n.b)),85),!!r&&s8e(r.vc(),new iw(ab(n.c.c,n.a),ox(n.c,n.b,n.a)))):!1},h.Kc=function(){return Dpn(this.a)},h.Mc=function(t){var n,r;return De(t,479)?(n=l(t,697),r=l(Oy(Kst(this.a),ab(n.c.e,n.b)),85),!!r&&c4n(r.vc(),new iw(ab(n.c.c,n.a),ox(n.c,n.b,n.a)))):!1},h.gc=function(){return Xit(this.a)},h.Nc=function(){return Fbn(this.a)},I(dn,"AbstractTable/CellSet",679),D(2025,31,Wy,wie),h.$b=function(){$Je()},h.Hc=function(t){return wxn(this.a,t)},h.Kc=function(){return Ipn(this.a)},h.gc=function(){return Xit(this.a)},h.Nc=function(){return oct(this.a)},I(dn,"AbstractTable/Values",2025),D(1697,1696,Jm),I(dn,"ArrayListMultimapGwtSerializationDependencies",1697),D(520,1697,Jm,nse,G5e),h.hc=function(){return new Bu(this.a)},h.a=0,I(dn,"ArrayListMultimap",520),D(678,2109,{678:1,2046:1,3:1},i2t),I(dn,"ArrayTable",678),D(2021,399,tT,qnt),h.Xb=function(t){return new F7e(this.a,t)},I(dn,"ArrayTable/1",2021),D(2022,1,{},gie),h.td=function(t){return new F7e(this.a,t)},I(dn,"ArrayTable/1methodref$getCell$Type",2022),D(2110,1,{697:1}),h.Fb=function(t){var n;return t===this?!0:De(t,479)?(n=l(t,697),yd(ab(this.c.e,this.b),ab(n.c.e,n.b))&&yd(ab(this.c.c,this.a),ab(n.c.c,n.a))&&yd(ox(this.c,this.b,this.a),ox(n.c,n.b,n.a))):!1},h.Hb=function(){return MN(he(le(wa,1),Rn,1,5,[ab(this.c.e,this.b),ab(this.c.c,this.a),ox(this.c,this.b,this.a)]))},h.Ib=function(){return"("+ab(this.c.e,this.b)+","+ab(this.c.c,this.a)+")="+ox(this.c,this.b,this.a)},I(dn,"Tables/AbstractCell",2110),D(479,2110,{479:1,697:1},F7e),h.a=0,h.b=0,h.d=0,I(dn,"ArrayTable/2",479),D(2024,1,{},pie),h.td=function(t){return Ilt(this.a,t)},I(dn,"ArrayTable/2methodref$getValue$Type",2024),D(2023,399,tT,Hnt),h.Xb=function(t){return Ilt(this.a,t)},I(dn,"ArrayTable/3",2023),D(2077,2065,Ww),h.$b=function(){iH(this.kc())},h.vc=function(){return new yz(this)},h.lc=function(){return new _at(this.kc(),this.gc())},I(dn,"Maps/IteratorBasedAbstractMap",2077),D(842,2077,Ww),h.$b=function(){throw ue(new Qr)},h._b=function(t){return sZe(this.c,t)},h.kc=function(){return new Vnt(this,this.c.b.c.gc())},h.lc=function(){return Cae(this.c.b.c.gc(),16,new mz(this))},h.xc=function(t){var n;return n=l(H_(this.c,t),17),n?this.vd(n.a):null},h.dc=function(){return this.c.b.c.dc()},h.ec=function(){return Oae(this.c)},h.zc=function(t,n){var r;if(r=l(H_(this.c,t),17),!r)throw ue(new Yn(this.ud()+" "+t+" not in "+Oae(this.c)));return this.wd(r.a,n)},h.Bc=function(t){throw ue(new Qr)},h.gc=function(){return this.c.b.c.gc()},I(dn,"ArrayTable/ArrayMap",842),D(2020,1,{},mz),h.td=function(t){return Yst(this.a,t)},I(dn,"ArrayTable/ArrayMap/0methodref$getEntry$Type",2020),D(2018,358,Nle,DZe),h.ld=function(){return Uhn(this.a,this.b)},h.md=function(){return this.a.vd(this.b)},h.nd=function(t){return this.a.wd(this.b,t)},h.b=0,I(dn,"ArrayTable/ArrayMap/1",2018),D(2019,399,tT,Vnt),h.Xb=function(t){return Yst(this.a,t)},I(dn,"ArrayTable/ArrayMap/2",2019),D(2017,842,Ww,Bst),h.ud=function(){return"Column"},h.vd=function(t){return ox(this.b,this.a,t)},h.wd=function(t,n){return s0t(this.b,this.a,t,n)},h.a=0,I(dn,"ArrayTable/Row",2017),D(843,842,Ww,_ye),h.vd=function(t){return new Bst(this.a,t)},h.zc=function(t,n){return l(n,85),fun()},h.wd=function(t,n){return l(n,85),dun()},h.ud=function(){return"Row"},I(dn,"ArrayTable/RowMap",843),D(1157,1,Ph,IZe),h.Ad=function(t){return(this.a.yd()&-262&t)!=0},h.yd=function(){return this.a.yd()&-262},h.zd=function(){return this.a.zd()},h.Nb=function(t){this.a.Nb(new NZe(t,this.b))},h.Bd=function(t){return this.a.Bd(new OZe(t,this.b))},I(dn,"CollectSpliterators/1",1157),D(1158,1,fr,OZe),h.Cd=function(t){this.a.Cd(this.b.Kb(t))},I(dn,"CollectSpliterators/1/lambda$0$Type",1158),D(1159,1,fr,NZe),h.Cd=function(t){this.a.Cd(this.b.Kb(t))},I(dn,"CollectSpliterators/1/lambda$1$Type",1159),D(1154,1,Ph,sit),h.Ad=function(t){return((16464|this.b)&t)!=0},h.yd=function(){return 16464|this.b},h.zd=function(){return this.a.zd()},h.Nb=function(t){this.a.Qe(new BZe(t,this.c))},h.Bd=function(t){return this.a.Re(new PZe(t,this.c))},h.b=0,I(dn,"CollectSpliterators/1WithCharacteristics",1154),D(1155,1,kP,PZe),h.Dd=function(t){this.a.Cd(this.b.td(t))},I(dn,"CollectSpliterators/1WithCharacteristics/lambda$0$Type",1155),D(1156,1,kP,BZe),h.Dd=function(t){this.a.Cd(this.b.td(t))},I(dn,"CollectSpliterators/1WithCharacteristics/lambda$1$Type",1156),D(1150,1,Ph),h.Ad=function(t){return(this.a&t)!=0},h.yd=function(){return this.a},h.zd=function(){return this.e&&(this.b=pye(this.b,this.e.zd())),pye(this.b,0)},h.Nb=function(t){this.e&&(this.e.Nb(t),this.e=null),this.c.Nb(new FZe(this,t)),this.b=0},h.Bd=function(t){for(;;){if(this.e&&this.e.Bd(t))return I_(this.b,EP)&&(this.b=Df(this.b,1)),!0;if(this.e=null,!this.c.Bd(new yie(this)))return!1}},h.a=0,h.b=0,I(dn,"CollectSpliterators/FlatMapSpliterator",1150),D(1152,1,fr,yie),h.Cd=function(t){Hfn(this.a,t)},I(dn,"CollectSpliterators/FlatMapSpliterator/lambda$0$Type",1152),D(1153,1,fr,FZe),h.Cd=function(t){gpn(this.a,this.b,t)},I(dn,"CollectSpliterators/FlatMapSpliterator/lambda$1$Type",1153),D(1151,1150,Ph,Cct),I(dn,"CollectSpliterators/FlatMapSpliteratorOfObject",1151),D(253,1,Ple),h.Fd=function(t){return this.Ed(l(t,253))},h.Ed=function(t){var n;return t==(Gie(),y0e)?1:t==(Uie(),w0e)?-1:(n=(Zq(),vN(this.a,t.a)),n!=0?n:De(this,526)==De(t,526)?0:De(this,526)?1:-1)},h.Id=function(){return this.a},h.Fb=function(t){return rxe(this,t)},I(dn,"Cut",253),D(1823,253,Ple,xJe),h.Ed=function(t){return t==this?0:1},h.Gd=function(t){throw ue(new Swe)},h.Hd=function(t){t.a+="+∞)"},h.Id=function(){throw ue(new nc(Iwt))},h.Hb=function(){return Vg(),q8e(this)},h.Jd=function(t){return!1},h.Ib=function(){return"+∞"};var w0e;I(dn,"Cut/AboveAll",1823),D(526,253,{253:1,526:1,3:1,34:1},Xnt),h.Gd=function(t){wu((t.a+="(",t),this.a)},h.Hd=function(t){hb(wu(t,this.a),93)},h.Hb=function(){return~es(this.a)},h.Jd=function(t){return Zq(),vN(this.a,t)<0},h.Ib=function(){return"/"+this.a+"\\"},I(dn,"Cut/AboveValue",526),D(1822,253,Ple,yJe),h.Ed=function(t){return t==this?0:-1},h.Gd=function(t){t.a+="(-∞"},h.Hd=function(t){throw ue(new Swe)},h.Id=function(){throw ue(new nc(Iwt))},h.Hb=function(){return Vg(),q8e(this)},h.Jd=function(t){return!0},h.Ib=function(){return"-∞"};var y0e;I(dn,"Cut/BelowAll",1822),D(1824,253,Ple,Qnt),h.Gd=function(t){wu((t.a+="[",t),this.a)},h.Hd=function(t){hb(wu(t,this.a),41)},h.Hb=function(){return es(this.a)},h.Jd=function(t){return Zq(),vN(this.a,t)<=0},h.Ib=function(){return"\\"+this.a+"/"},I(dn,"Cut/BelowValue",1824),D(547,1,hg),h.Jc=function(t){to(this,t)},h.Ib=function(){return L4n(l(_H(this,"use Optional.orNull() instead of Optional.or(null)"),20).Kc())},I(dn,"FluentIterable",547),D(442,547,hg,P_),h.Kc=function(){return new hr(dr(this.a.Kc(),new j))},I(dn,"FluentIterable/2",442),D(1059,547,hg,snt),h.Kc=function(){return rg(this)},I(dn,"FluentIterable/3",1059),D(724,399,tT,Aye),h.Xb=function(t){return this.a[t].Kc()},I(dn,"FluentIterable/3/1",724),D(2070,1,{}),h.Ib=function(){return xc(this.Kd().b)},I(dn,"ForwardingObject",2070),D(2071,2070,Owt),h.Kd=function(){return this.Ld()},h.Jc=function(t){to(this,t)},h.Lc=function(){return this.Oc()},h.Nc=function(){return new kn(this,0)},h.Oc=function(){return new bn(null,this.Nc())},h.Fc=function(t){return this.Ld(),oZe()},h.Gc=function(t){return this.Ld(),cZe()},h.$b=function(){this.Ld(),uZe()},h.Hc=function(t){return this.Ld().Hc(t)},h.Ic=function(t){return this.Ld().Ic(t)},h.dc=function(){return this.Ld().b.dc()},h.Kc=function(){return this.Ld().Kc()},h.Mc=function(t){return this.Ld(),lZe()},h.gc=function(){return this.Ld().b.gc()},h.Pc=function(){return this.Ld().Pc()},h.Qc=function(t){return this.Ld().Qc(t)},I(dn,"ForwardingCollection",2071),D(2078,31,tEe),h.Kc=function(){return this.Od()},h.Fc=function(t){throw ue(new Qr)},h.Gc=function(t){throw ue(new Qr)},h.Md=function(){var t;return t=this.c,t||(this.c=this.Nd())},h.$b=function(){throw ue(new Qr)},h.Hc=function(t){return t!=null&&Ny(this,t,!1)},h.Nd=function(){switch(this.gc()){case 0:return ww(),ww(),x0e;case 1:return ww(),new Sae(Xr(this.Od().Pb()));default:return new o5e(this,this.Pc())}},h.Mc=function(t){throw ue(new Qr)},I(dn,"ImmutableCollection",2078),D(727,2078,tEe,Twe),h.Kc=function(){return cx(this.a.Kc())},h.Hc=function(t){return t!=null&&this.a.Hc(t)},h.Ic=function(t){return this.a.Ic(t)},h.dc=function(){return this.a.dc()},h.Od=function(){return cx(this.a.Kc())},h.gc=function(){return this.a.gc()},h.Pc=function(){return this.a.Pc()},h.Qc=function(t){return this.a.Qc(t)},h.Ib=function(){return xc(this.a)},I(dn,"ForwardingImmutableCollection",727),D(307,2078,nT),h.Kc=function(){return this.Od()},h.ed=function(){return this.Pd(0)},h.fd=function(t){return this.Pd(t)},h.jd=function(t){$m(this,t)},h.Nc=function(){return new kn(this,16)},h.kd=function(t,n){return this.Qd(t,n)},h.bd=function(t,n){throw ue(new Qr)},h.cd=function(t,n){throw ue(new Qr)},h.Md=function(){return this},h.Fb=function(t){return VEn(this,t)},h.Hb=function(){return R3n(this)},h.dd=function(t){return t==null?-1:o7n(this,t)},h.Od=function(){return this.Pd(0)},h.Pd=function(t){return iae(this,t)},h.gd=function(t){throw ue(new Qr)},h.hd=function(t,n){throw ue(new Qr)},h.Qd=function(t,n){var r;return RV((r=new KZe(this),new Zp(r,t,n)))};var x0e;I(dn,"ImmutableList",307),D(2105,307,nT),h.Kc=function(){return cx(this.Rd().Kc())},h.kd=function(t,n){return RV(this.Rd().kd(t,n))},h.Hc=function(t){return t!=null&&this.Rd().Hc(t)},h.Ic=function(t){return this.Rd().Ic(t)},h.Fb=function(t){return Pi(this.Rd(),t)},h.Xb=function(t){return ab(this,t)},h.Hb=function(){return es(this.Rd())},h.dd=function(t){return this.Rd().dd(t)},h.dc=function(){return this.Rd().dc()},h.Od=function(){return cx(this.Rd().Kc())},h.gc=function(){return this.Rd().gc()},h.Qd=function(t,n){return RV(this.Rd().kd(t,n))},h.Pc=function(){return this.Rd().Qc(We(wa,Rn,1,this.Rd().gc(),5,1))},h.Qc=function(t){return this.Rd().Qc(t)},h.Ib=function(){return xc(this.Rd())},I(dn,"ForwardingImmutableList",2105),D(729,1,rT),h.vc=function(){return Mm(this)},h.wc=function(t){mA(this,t)},h.ec=function(){return Oae(this)},h.yc=function(t,n,r){return qce(this,t,n,r)},h.Cc=function(){return this.Vd()},h.$b=function(){throw ue(new Qr)},h._b=function(t){return this.xc(t)!=null},h.uc=function(t){return this.Vd().Hc(t)},h.Td=function(){return new LQe(this)},h.Ud=function(){return new MQe(this)},h.Fb=function(t){return Myn(this,t)},h.Hb=function(){return Mm(this).Hb()},h.dc=function(){return this.gc()==0},h.zc=function(t,n){return hun()},h.Bc=function(t){throw ue(new Qr)},h.Ib=function(){return m9n(this)},h.Vd=function(){return this.e?this.e:this.e=this.Ud()},h.c=null,h.d=null,h.e=null;var i6t;I(dn,"ImmutableMap",729),D(730,729,rT),h._b=function(t){return sZe(this,t)},h.uc=function(t){return ZZe(this.b,t)},h.Sd=function(){return t1t(new vie(this))},h.Td=function(){return t1t(mat(this.b))},h.Ud=function(){return wd(),new Twe(bat(this.b))},h.Fb=function(t){return eet(this.b,t)},h.xc=function(t){return H_(this,t)},h.Hb=function(){return es(this.b.c)},h.dc=function(){return this.b.c.dc()},h.gc=function(){return this.b.c.gc()},h.Ib=function(){return xc(this.b.c)},I(dn,"ForwardingImmutableMap",730),D(2072,2071,Ble),h.Kd=function(){return this.Wd()},h.Ld=function(){return this.Wd()},h.Nc=function(){return new kn(this,1)},h.Fb=function(t){return t===this||this.Wd().Fb(t)},h.Hb=function(){return this.Wd().Hb()},I(dn,"ForwardingSet",2072),D(1085,2072,Ble,vie),h.Kd=function(){return Kk(this.a.b)},h.Ld=function(){return Kk(this.a.b)},h.Hc=function(t){if(De(t,44)&&l(t,44).ld()==null)return!1;try{return JZe(Kk(this.a.b),t)}catch(n){if(n=bs(n),De(n,212))return!1;throw ue(n)}},h.Wd=function(){return Kk(this.a.b)},h.Qc=function(t){var n;return n=tot(Kk(this.a.b),t),Kk(this.a.b).b.gc()=0?"+":"")+(r/60|0),n=Iq(b.Math.abs(r)%60),(Vgt(),E6t)[this.q.getDay()]+" "+T6t[this.q.getMonth()]+" "+Iq(this.q.getDate())+" "+Iq(this.q.getHours())+":"+Iq(this.q.getMinutes())+":"+Iq(this.q.getSeconds())+" GMT"+t+n+" "+this.q.getFullYear()};var cK=I(Lr,"Date",206);D(2015,206,qwt,dgt),h.a=!1,h.b=0,h.c=0,h.d=0,h.e=0,h.f=0,h.g=!1,h.i=0,h.j=0,h.k=0,h.n=0,h.o=0,h.p=0,I("com.google.gwt.i18n.shared.impl","DateRecord",2015),D(2064,1,{}),h.pe=function(){return null},h.qe=function(){return null},h.re=function(){return null},h.se=function(){return null},h.te=function(){return null},I(Ax,"JSONValue",2064),D(221,2064,{221:1},$p,Sz),h.Fb=function(t){return De(t,221)?W5e(this.a,l(t,221).a):!1},h.oe=function(){return Bcn},h.Hb=function(){return F5e(this.a)},h.pe=function(){return this},h.Ib=function(){var t,n,r;for(r=new Th("["),n=0,t=this.a.length;n0&&(r.a+=","),wu(r,_y(this,n));return r.a+="]",r.a},I(Ax,"JSONArray",221),D(493,2064,{493:1},jc),h.oe=function(){return Fcn},h.qe=function(){return this},h.Ib=function(){return Hn(),""+this.a},h.a=!1;var h6t,f6t;I(Ax,"JSONBoolean",493),D(997,63,lp,LJe),I(Ax,"JSONException",997),D(1036,2064,{},W),h.oe=function(){return Rcn},h.Ib=function(){return ul};var d6t;I(Ax,"JSONNull",1036),D(263,2064,{263:1},vk),h.Fb=function(t){return De(t,263)?this.a==l(t,263).a:!1},h.oe=function(){return Ncn},h.Hb=function(){return j8(this.a)},h.re=function(){return this},h.Ib=function(){return this.a+""},h.a=0,I(Ax,"JSONNumber",263),D(190,2064,{190:1},M8,wk),h.Fb=function(t){return De(t,190)?W5e(this.a,l(t,190).a):!1},h.oe=function(){return Pcn},h.Hb=function(){return F5e(this.a)},h.se=function(){return this},h.Ib=function(){var t,n,r,a,o,f,g;for(g=new Th("{"),t=!0,f=ace(this,We(zt,dt,2,0,6,1)),r=f,a=0,o=r.length;a=0?":"+this.c:"")+")"},h.c=0;var a_e=I(Vc,"StackTraceElement",319);r6t={3:1,484:1,34:1,2:1};var zt=I(Vc,nEe,2);D(111,427,{484:1},Up,h_,Af),I(Vc,"StringBuffer",111),D(104,427,{484:1},tb,S5,Th),I(Vc,"StringBuilder",104),D(702,77,she,e3e),I(Vc,"StringIndexOutOfBoundsException",702),D(2145,1,{});var m6t;D(48,63,{3:1,103:1,63:1,82:1,48:1},Qr,Hp),I(Vc,"UnsupportedOperationException",48),D(247,242,{3:1,34:1,242:1,247:1},NN,h3e),h.Fd=function(t){return Fmt(this,l(t,247))},h.ue=function(){return jy(hvt(this))},h.Fb=function(t){var n;return this===t?!0:De(t,247)?(n=l(t,247),this.e==n.e&&Fmt(this,n)==0):!1},h.Hb=function(){var t;return this.b!=0?this.b:this.a<54?(t=Zc(this.f),this.b=Yr(va(t,-1)),this.b=33*this.b+Yr(va(bw(t,32),-1)),this.b=17*this.b+ua(this.e),this.b):(this.b=17*X0t(this.c)+ua(this.e),this.b)},h.Ib=function(){return hvt(this)},h.a=0,h.b=0,h.d=0,h.e=0,h.f=0;var v6t,lv,o_e,c_e,u_e,l_e,h_e,f_e,L0e=I("java.math","BigDecimal",247);D(92,242,{3:1,34:1,242:1,92:1},Qg,qot,Im,Q1t,ob),h.Fd=function(t){return K1t(this,l(t,92))},h.ue=function(){return jy(Dle(this,0))},h.Fb=function(t){return C8e(this,t)},h.Hb=function(){return X0t(this)},h.Ib=function(){return Dle(this,0)},h.b=-2,h.c=0,h.d=0,h.e=0;var w6t,uK,y6t,M0e,lK,BL,A6=I("java.math","BigInteger",92),x6t,k6t,$x,FL;D(498,2065,Ww),h.$b=function(){Nl(this)},h._b=function(t){return Hu(this,t)},h.uc=function(t){return D0t(this,t,this.i)||D0t(this,t,this.f)},h.vc=function(){return new Sr(this)},h.xc=function(t){return cr(this,t)},h.zc=function(t,n){return ki(this,t,n)},h.Bc=function(t){return ax(this,t)},h.gc=function(){return d_(this)},h.g=0,I(Lr,"AbstractHashMap",498),D(267,q1,Tl,Sr),h.$b=function(){this.a.$b()},h.Hc=function(t){return vct(this,t)},h.Kc=function(){return new qm(this.a)},h.Mc=function(t){var n;return vct(this,t)?(n=l(t,44).ld(),this.a.Bc(n),!0):!1},h.gc=function(){return this.a.gc()},I(Lr,"AbstractHashMap/EntrySet",267),D(268,1,Oa,qm),h.Nb=function(t){Za(this,t)},h.Pb=function(){return Nw(this)},h.Ob=function(){return this.b},h.Qb=function(){Klt(this)},h.b=!1,h.d=0,I(Lr,"AbstractHashMap/EntrySetIterator",268),D(426,1,Oa,kr),h.Nb=function(t){Za(this,t)},h.Ob=function(){return lse(this)},h.Pb=function(){return I5e(this)},h.Qb=function(){ph(this)},h.b=0,h.c=-1,I(Lr,"AbstractList/IteratorImpl",426),D(98,426,lg,Ua),h.Qb=function(){ph(this)},h.Rb=function(t){by(this,t)},h.Sb=function(){return this.b>0},h.Tb=function(){return this.b},h.Ub=function(){return mr(this.b>0),this.a.Xb(this.c=--this.b)},h.Vb=function(){return this.b-1},h.Wb=function(t){gy(this.c!=-1),this.a.hd(this.c,t)},I(Lr,"AbstractList/ListIteratorImpl",98),D(244,56,iT,Zp),h.bd=function(t,n){Ey(t,this.b),this.c.bd(this.a+t,n),++this.b},h.Xb=function(t){return Sn(t,this.b),this.c.Xb(this.a+t)},h.gd=function(t){var n;return Sn(t,this.b),n=this.c.gd(this.a+t),--this.b,n},h.hd=function(t,n){return Sn(t,this.b),this.c.hd(this.a+t,n)},h.gc=function(){return this.b},h.a=0,h.b=0,I(Lr,"AbstractList/SubList",244),D(266,q1,Tl,br),h.$b=function(){this.a.$b()},h.Hc=function(t){return this.a._b(t)},h.Kc=function(){var t;return t=this.a.vc().Kc(),new Mi(t)},h.Mc=function(t){return this.a._b(t)?(this.a.Bc(t),!0):!1},h.gc=function(){return this.a.gc()},I(Lr,"AbstractMap/1",266),D(541,1,Oa,Mi),h.Nb=function(t){Za(this,t)},h.Ob=function(){return this.a.Ob()},h.Pb=function(){var t;return t=l(this.a.Pb(),44),t.ld()},h.Qb=function(){this.a.Qb()},I(Lr,"AbstractMap/1/1",541),D(231,31,Wy,gi),h.$b=function(){this.a.$b()},h.Hc=function(t){return this.a.uc(t)},h.Kc=function(){var t;return t=this.a.vc().Kc(),new fs(t)},h.gc=function(){return this.a.gc()},I(Lr,"AbstractMap/2",231),D(301,1,Oa,fs),h.Nb=function(t){Za(this,t)},h.Ob=function(){return this.a.Ob()},h.Pb=function(){var t;return t=l(this.a.Pb(),44),t.md()},h.Qb=function(){this.a.Qb()},I(Lr,"AbstractMap/2/1",301),D(494,1,{494:1,44:1}),h.Fb=function(t){var n;return De(t,44)?(n=l(t,44),Jc(this.d,n.ld())&&Jc(this.e,n.md())):!1},h.ld=function(){return this.d},h.md=function(){return this.e},h.Hb=function(){return R5(this.d)^R5(this.e)},h.nd=function(t){return Zye(this,t)},h.Ib=function(){return this.d+"="+this.e},I(Lr,"AbstractMap/AbstractEntry",494),D(397,494,{494:1,397:1,44:1},cq),I(Lr,"AbstractMap/SimpleEntry",397),D(2082,1,che),h.Fb=function(t){var n;return De(t,44)?(n=l(t,44),Jc(this.ld(),n.ld())&&Jc(this.md(),n.md())):!1},h.Hb=function(){return R5(this.ld())^R5(this.md())},h.Ib=function(){return this.ld()+"="+this.md()},I(Lr,Mwt,2082),D(2090,2065,Zke),h.Xc=function(t){return rse(this.Ee(t))},h.tc=function(t){return Tut(this,t)},h._b=function(t){return e4e(this,t)},h.vc=function(){return new Rs(this)},h.Tc=function(){return Rst(this.Ge())},h.Yc=function(t){return rse(this.He(t))},h.xc=function(t){var n;return n=t,hc(this.Fe(n))},h.$c=function(t){return rse(this.Ie(t))},h.ec=function(){return new Fs(this)},h.Vc=function(){return Rst(this.Je())},h._c=function(t){return rse(this.Ke(t))},I(Lr,"AbstractNavigableMap",2090),D(629,q1,Tl,Rs),h.Hc=function(t){return De(t,44)&&Tut(this.b,l(t,44))},h.Kc=function(){return this.b.De()},h.Mc=function(t){var n;return De(t,44)?(n=l(t,44),this.b.Le(n)):!1},h.gc=function(){return this.b.gc()},I(Lr,"AbstractNavigableMap/EntrySet",629),D(1146,q1,eEe,Fs),h.Nc=function(){return new aq(this)},h.$b=function(){this.a.$b()},h.Hc=function(t){return e4e(this.a,t)},h.Kc=function(){var t;return t=this.a.vc().b.De(),new xs(t)},h.Mc=function(t){return e4e(this.a,t)?(this.a.Bc(t),!0):!1},h.gc=function(){return this.a.gc()},I(Lr,"AbstractNavigableMap/NavigableKeySet",1146),D(1147,1,Oa,xs),h.Nb=function(t){Za(this,t)},h.Ob=function(){return lse(this.a.a)},h.Pb=function(){var t;return t=ort(this.a),t.ld()},h.Qb=function(){dit(this.a)},I(Lr,"AbstractNavigableMap/NavigableKeySet/1",1147),D(2103,31,Wy),h.Fc=function(t){return K8($E(this,t),aT),!0},h.Gc=function(t){return nr(t),BO(t!=this,"Can't add a queue to itself"),Ka(this,t)},h.$b=function(){for(;Koe(this)!=null;);},I(Lr,"AbstractQueue",2103),D(310,31,{4:1,20:1,31:1,16:1},z5,dct),h.Fc=function(t){return i6e(this,t),!0},h.$b=function(){l6e(this)},h.Hc=function(t){return Zft(new nA(this),t)},h.dc=function(){return l_(this)},h.Kc=function(){return new nA(this)},h.Mc=function(t){return w2n(new nA(this),t)},h.gc=function(){return this.c-this.b&this.a.length-1},h.Nc=function(){return new kn(this,272)},h.Qc=function(t){var n;return n=this.c-this.b&this.a.length-1,t.lengthn&&Ts(t,n,null),t},h.b=0,h.c=0,I(Lr,"ArrayDeque",310),D(459,1,Oa,nA),h.Nb=function(t){Za(this,t)},h.Ob=function(){return this.a!=this.b},h.Pb=function(){return FV(this)},h.Qb=function(){Yht(this)},h.a=0,h.b=0,h.c=-1,I(Lr,"ArrayDeque/IteratorImpl",459),D(13,56,Uwt,bt,Bu,Ol),h.bd=function(t,n){pw(this,t,n)},h.Fc=function(t){return vt(this,t)},h.cd=function(t,n){return Q7e(this,t,n)},h.Gc=function(t){return ra(this,t)},h.$b=function(){ay(this.c,0)},h.Hc=function(t){return gc(this,t,0)!=-1},h.Jc=function(t){Vu(this,t)},h.Xb=function(t){return jt(this,t)},h.dd=function(t){return gc(this,t,0)},h.dc=function(){return this.c.length==0},h.Kc=function(){return new G(this)},h.gd=function(t){return t2(this,t)},h.Mc=function(t){return al(this,t)},h.ce=function(t,n){Bot(this,t,n)},h.hd=function(t,n){return rf(this,t,n)},h.gc=function(){return this.c.length},h.jd=function(t){Vs(this,t)},h.Pc=function(){return eH(this.c)},h.Qc=function(t){return j1(this,t)};var cOn=I(Lr,"ArrayList",13);D(7,1,Oa,G),h.Nb=function(t){Za(this,t)},h.Ob=function(){return Lc(this)},h.Pb=function(){return re(this)},h.Qb=function(){Q_(this)},h.a=0,h.b=-1,I(Lr,"ArrayList/1",7),D(2112,b.Function,{},Pe),h.Me=function(t,n){return Yi(t,n)},D(151,56,Gwt,Il),h.Hc=function(t){return Xht(this,t)!=-1},h.Jc=function(t){var n,r,a,o;for(nr(t),r=this.a,a=0,o=r.length;a0)throw ue(new Yn(lEe+t+" greater than "+this.e));return this.f.Te()?sot(this.c,this.b,this.a,t,n):Fot(this.c,t,n)},h.zc=function(t,n){if(!xue(this.c,this.f,t,this.b,this.a,this.e,this.d))throw ue(new Yn(t+" outside the range "+this.b+" to "+this.e));return b0t(this.c,t,n)},h.Bc=function(t){var n;return n=t,xue(this.c,this.f,n,this.b,this.a,this.e,this.d)?aot(this.c,n):null},h.Le=function(t){return yH(this,t.ld())&&L6e(this.c,t)},h.gc=function(){var t,n,r;if(this.f.Te()?this.a?n=OE(this.c,this.b,!0):n=OE(this.c,this.b,!1):n=j6e(this.c),!(n&&yH(this,n.d)&&n))return 0;for(t=0,r=new oce(this.c,this.f,this.b,this.a,this.e,this.d);lse(r.a);r.b=l(I5e(r.a),44))++t;return t},h.ad=function(t,n){if(this.f.Te()&&this.c.a.Ne(t,this.b)<0)throw ue(new Yn(lEe+t+Ywt+this.b));return this.f.Ue()?sot(this.c,t,n,this.e,this.d):Rot(this.c,t,n)},h.a=!1,h.d=!1,I(Lr,"TreeMap/SubMap",631),D(304,22,fhe,oq),h.Te=function(){return!1},h.Ue=function(){return!1};var O0e,N0e,P0e,B0e,fK=Fr(Lr,"TreeMap/SubMapType",304,Hr,Gbn,n0n);D(1143,304,fhe,hnt),h.Ue=function(){return!0},Fr(Lr,"TreeMap/SubMapType/1",1143,fK,null,null),D(1144,304,fhe,ynt),h.Te=function(){return!0},h.Ue=function(){return!0},Fr(Lr,"TreeMap/SubMapType/2",1144,fK,null,null),D(1145,304,fhe,lnt),h.Te=function(){return!0},Fr(Lr,"TreeMap/SubMapType/3",1145,fK,null,null);var M6t;D(157,q1,{3:1,20:1,31:1,16:1,277:1,21:1,87:1,157:1},Lwe,Kp,ba),h.Nc=function(){return new aq(this)},h.Fc=function(t){return jO(this,t)},h.$b=function(){this.a.$b()},h.Hc=function(t){return this.a._b(t)},h.Kc=function(){return this.a.ec().Kc()},h.Mc=function(t){return tae(this,t)},h.gc=function(){return this.a.gc()};var gOn=I(Lr,"TreeSet",157);D(1082,1,{},xo),h.Ve=function(t,n){return wfn(this.a,t,n)},I(dhe,"BinaryOperator/lambda$0$Type",1082),D(1083,1,{},lh),h.Ve=function(t,n){return yfn(this.a,t,n)},I(dhe,"BinaryOperator/lambda$1$Type",1083),D(952,1,{},Pt),h.Kb=function(t){return t},I(dhe,"Function/lambda$0$Type",952),D(395,1,ti,Wl),h.Mb=function(t){return!this.a.Mb(t)},I(dhe,"Predicate/lambda$2$Type",395),D(581,1,{581:1});var D6t=I(aL,"Handler",581);D(2107,1,yP),h.xe=function(){return"DUMMY"},h.Ib=function(){return this.xe()};var w_e;I(aL,"Level",2107),D(1706,2107,yP,Qe),h.xe=function(){return"INFO"},I(aL,"Level/LevelInfo",1706),D(1843,1,{},FQe);var F0e;I(aL,"LogManager",1843),D(1896,1,yP,fit),h.b=null,I(aL,"LogRecord",1896),D(525,1,{525:1},Soe),h.e=!1;var I6t=!1,O6t=!1,G1=!1,N6t=!1,P6t=!1;I(aL,"Logger",525),D(835,581,{581:1},Dt),I(aL,"SimpleConsoleLogHandler",835),D(108,22,{3:1,34:1,22:1,108:1},dse);var y_e,Ec,i4,oc=Fr(sa,"Collector/Characteristics",108,Hr,O2n,r0n),B6t;D(758,1,{},h5e),I(sa,"CollectorImpl",758),D(1074,1,{},kt),h.Ve=function(t,n){return d4n(l(t,213),l(n,213))},I(sa,"Collectors/10methodref$merge$Type",1074),D(1075,1,{},On),h.Kb=function(t){return gct(l(t,213))},I(sa,"Collectors/11methodref$toString$Type",1075),D(1076,1,{},Z2),h.Kb=function(t){return Hn(),!!sye(t)},I(sa,"Collectors/12methodref$test$Type",1076),D(144,1,{},ht),h.Yd=function(t,n){l(t,16).Fc(n)},I(sa,"Collectors/20methodref$add$Type",144),D(146,1,{},zr),h.Xe=function(){return new bt},I(sa,"Collectors/21methodref$ctor$Type",146),D(359,1,{},yt),h.Xe=function(){return new Ks},I(sa,"Collectors/23methodref$ctor$Type",359),D(360,1,{},ji),h.Yd=function(t,n){na(l(t,49),n)},I(sa,"Collectors/24methodref$add$Type",360),D(1069,1,{},xi),h.Ve=function(t,n){return ret(l(t,15),l(n,16))},I(sa,"Collectors/4methodref$addAll$Type",1069),D(1073,1,{},Ma),h.Yd=function(t,n){Jg(l(t,213),l(n,484))},I(sa,"Collectors/9methodref$add$Type",1073),D(1072,1,{},Lit),h.Xe=function(){return new Hm(this.a,this.b,this.c)},I(sa,"Collectors/lambda$15$Type",1072),D(1077,1,{},zs),h.Xe=function(){var t;return t=new e2,h2(t,(Hn(),!1),new bt),h2(t,!0,new bt),t},I(sa,"Collectors/lambda$22$Type",1077),D(1078,1,{},eb),h.Xe=function(){return he(le(wa,1),Rn,1,5,[this.a])},I(sa,"Collectors/lambda$25$Type",1078),D(1079,1,{},G0),h.Yd=function(t,n){jdn(this.a,jm(t))},I(sa,"Collectors/lambda$26$Type",1079),D(1080,1,{},zp),h.Ve=function(t,n){return dgn(this.a,jm(t),jm(n))},I(sa,"Collectors/lambda$27$Type",1080),D(1081,1,{},ao),h.Kb=function(t){return jm(t)[0]},I(sa,"Collectors/lambda$28$Type",1081),D(728,1,{},Tr),h.Ve=function(t,n){return U4e(t,n)},I(sa,"Collectors/lambda$4$Type",728),D(145,1,{},Fn),h.Ve=function(t,n){return Wun(l(t,16),l(n,16))},I(sa,"Collectors/lambda$42$Type",145),D(361,1,{},qn),h.Ve=function(t,n){return Yun(l(t,49),l(n,49))},I(sa,"Collectors/lambda$50$Type",361),D(362,1,{},Un),h.Kb=function(t){return l(t,49)},I(sa,"Collectors/lambda$51$Type",362),D(1068,1,{},fd),h.Yd=function(t,n){wyn(this.a,l(t,85),n)},I(sa,"Collectors/lambda$7$Type",1068),D(1070,1,{},At),h.Ve=function(t,n){return Y3n(l(t,85),l(n,85),new xi)},I(sa,"Collectors/lambda$8$Type",1070),D(1071,1,{},Wv),h.Kb=function(t){return G4n(this.a,l(t,85))},I(sa,"Collectors/lambda$9$Type",1071),D(550,1,{}),h.$e=function(){tA(this)},h.d=!1,I(sa,"TerminatableStream",550),D(827,550,hEe,Vye),h.$e=function(){tA(this)},I(sa,"DoubleStreamImpl",827),D(1847,736,Ph,Mit),h.Re=function(t){return Y6n(this,l(t,189))},h.a=null,I(sa,"DoubleStreamImpl/2",1847),D(1848,1,LP,sy),h.Pe=function(t){qln(this.a,t)},I(sa,"DoubleStreamImpl/2/lambda$0$Type",1848),D(1845,1,LP,E8),h.Pe=function(t){zln(this.a,t)},I(sa,"DoubleStreamImpl/lambda$0$Type",1845),D(1846,1,LP,x5),h.Pe=function(t){M1t(this.a,t)},I(sa,"DoubleStreamImpl/lambda$2$Type",1846),D(1397,735,Ph,wut),h.Re=function(t){return Pbn(this,l(t,202))},h.a=0,h.b=0,h.c=0,I(sa,"IntStream/5",1397),D(806,550,hEe,Uye),h.$e=function(){tA(this)},h._e=function(){return fb(this),this.a},I(sa,"IntStreamImpl",806),D(807,550,hEe,b3e),h.$e=function(){tA(this)},h._e=function(){return fb(this),Sye(),L6t},I(sa,"IntStreamImpl/Empty",807),D(1687,1,kP,T8),h.Dd=function(t){$ft(this.a,t)},I(sa,"IntStreamImpl/lambda$4$Type",1687);var pOn=ks(sa,"Stream");D(26,550,{533:1,687:1,848:1},bn),h.$e=function(){tA(this)};var zx;I(sa,"StreamImpl",26),D(1102,500,Ph,iit),h.Bd=function(t){for(;Rvn(this);){if(this.a.Bd(t))return!0;tA(this.b),this.b=null,this.a=null}return!1},I(sa,"StreamImpl/1",1102),D(1103,1,fr,ZS),h.Cd=function(t){hdn(this.a,l(t,848))},I(sa,"StreamImpl/1/lambda$0$Type",1103),D(1104,1,ti,k5),h.Mb=function(t){return na(this.a,t)},I(sa,"StreamImpl/1methodref$add$Type",1104),D(1105,500,Ph,Rat),h.Bd=function(t){var n;return this.a||(n=new bt,this.b.a.Nb(new Qd(n)),Cn(),Vs(n,this.c),this.a=new kn(n,16)),xht(this.a,t)},h.a=null,I(sa,"StreamImpl/5",1105),D(1106,1,fr,Qd),h.Cd=function(t){vt(this.a,t)},I(sa,"StreamImpl/5/2methodref$add$Type",1106),D(737,500,Ph,$6e),h.Bd=function(t){for(this.b=!1;!this.b&&this.c.Bd(new xet(this,t)););return this.b},h.b=!1,I(sa,"StreamImpl/FilterSpliterator",737),D(1096,1,fr,xet),h.Cd=function(t){ogn(this.a,this.b,t)},I(sa,"StreamImpl/FilterSpliterator/lambda$0$Type",1096),D(1091,736,Ph,Mut),h.Re=function(t){return zfn(this,l(t,189))},I(sa,"StreamImpl/MapToDoubleSpliterator",1091),D(1095,1,fr,ket),h.Cd=function(t){hln(this.a,this.b,t)},I(sa,"StreamImpl/MapToDoubleSpliterator/lambda$0$Type",1095),D(1090,735,Ph,Dut),h.Re=function(t){return qfn(this,l(t,202))},I(sa,"StreamImpl/MapToIntSpliterator",1090),D(1094,1,fr,Eet),h.Cd=function(t){fln(this.a,this.b,t)},I(sa,"StreamImpl/MapToIntSpliterator/lambda$0$Type",1094),D(734,500,Ph,C6e),h.Bd=function(t){return tit(this,t)},I(sa,"StreamImpl/MapToObjSpliterator",734),D(1093,1,fr,Tet),h.Cd=function(t){dln(this.a,this.b,t)},I(sa,"StreamImpl/MapToObjSpliterator/lambda$0$Type",1093),D(1092,500,Ph,aft),h.Bd=function(t){for(;hse(this.b,0);){if(!this.a.Bd(new wt))return!1;this.b=Df(this.b,1)}return this.a.Bd(t)},h.b=0,I(sa,"StreamImpl/SkipSpliterator",1092),D(1097,1,fr,wt),h.Cd=function(t){},I(sa,"StreamImpl/SkipSpliterator/lambda$0$Type",1097),D(626,1,fr,on),h.Cd=function(t){Eie(this,t)},I(sa,"StreamImpl/ValueConsumer",626),D(1098,1,fr,fn),h.Cd=function(t){Am()},I(sa,"StreamImpl/lambda$0$Type",1098),D(1099,1,fr,An),h.Cd=function(t){Am()},I(sa,"StreamImpl/lambda$1$Type",1099),D(1100,1,{},_1),h.Ve=function(t,n){return y0n(this.a,t,n)},I(sa,"StreamImpl/lambda$4$Type",1100),D(1101,1,fr,Cet),h.Cd=function(t){Sfn(this.b,this.a,t)},I(sa,"StreamImpl/lambda$5$Type",1101),D(1107,1,fr,Jd),h.Cd=function(t){F3n(this.a,l(t,380))},I(sa,"TerminatableStream/lambda$0$Type",1107),D(2142,1,{}),D(2014,1,{},oo),I("javaemul.internal","ConsoleLogger",2014);var bOn=0;D(2134,1,{}),D(1830,1,fr,jo),h.Cd=function(t){l(t,317)},I(oT,"BowyerWatsonTriangulation/lambda$0$Type",1830),D(1831,1,fr,Em),h.Cd=function(t){Ka(this.a,l(t,317).e)},I(oT,"BowyerWatsonTriangulation/lambda$1$Type",1831),D(1832,1,fr,$o),h.Cd=function(t){l(t,177)},I(oT,"BowyerWatsonTriangulation/lambda$2$Type",1832),D(1827,1,ii,Lz),h.Ne=function(t,n){return ymn(this.a,l(t,177),l(n,177))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(oT,"NaiveMinST/lambda$0$Type",1827),D(449,1,{},Yv),I(oT,"NodeMicroLayout",449),D(177,1,{177:1},B8),h.Fb=function(t){var n;return De(t,177)?(n=l(t,177),Jc(this.a,n.a)&&Jc(this.b,n.b)||Jc(this.a,n.b)&&Jc(this.b,n.a)):!1},h.Hb=function(){return R5(this.a)+R5(this.b)};var mOn=I(oT,"TEdge",177);D(317,1,{317:1},Cke),h.Fb=function(t){var n;return De(t,317)?(n=l(t,317),rV(this,n.a)&&rV(this,n.b)&&rV(this,n.c)):!1},h.Hb=function(){return R5(this.a)+R5(this.b)+R5(this.c)},I(oT,"TTriangle",317),D(225,1,{225:1},Nq),I(oT,"Tree",225),D(1218,1,{},Eot),I(Jwt,"Scanline",1218);var F6t=ks(Jwt,Zwt);D(1758,1,{},vht),I(gg,"CGraph",1758),D(316,1,{316:1},Sot),h.b=0,h.c=0,h.d=0,h.g=0,h.i=0,h.k=ia,I(gg,"CGroup",316),D(830,1,{},Iwe),I(gg,"CGroup/CGroupBuilder",830),D(60,1,{60:1},Rrt),h.Ib=function(){var t;return this.j?ei(this.j.Kb(this)):(Gg(dK),dK.o+"@"+(t=fw(this)>>>0,t.toString(16)))},h.f=0,h.i=ia;var dK=I(gg,"CNode",60);D(829,1,{},Owe),I(gg,"CNode/CNodeBuilder",829);var R6t;D(1590,1,{},Pa),h.ff=function(t,n){return 0},h.gf=function(t,n){return 0},I(gg,t3t,1590),D(1853,1,{},wo),h.cf=function(t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te;for(C=gs,a=new G(t.a.b);a.aa.d.c||a.d.c==f.d.c&&a.d.b0?t+this.n.d+this.n.a:0},h.kf=function(){var t,n,r,a,o;if(o=0,this.e)this.b?o=this.b.a:this.a[1][1]&&(o=this.a[1][1].kf());else if(this.g)o=E8e(this,Eue(this,null,!0));else for(n=(t1(),he(le(s4,1),it,237,0,[Gc,$u,Kc])),r=0,a=n.length;r0?o+this.n.b+this.n.c:0},h.lf=function(){var t,n,r,a,o;if(this.g)for(t=Eue(this,null,!1),r=(t1(),he(le(s4,1),it,237,0,[Gc,$u,Kc])),a=0,o=r.length;a0&&(a[0]+=this.d,r-=a[0]),a[2]>0&&(a[2]+=this.d,r-=a[2]),this.c.a=b.Math.max(0,r),this.c.d=n.d+t.d+(this.c.a-r)/2,a[1]=b.Math.max(a[1],r),x6e(this,$u,n.d+t.d+a[0]-(a[1]-r)/2,a)},h.b=null,h.d=0,h.e=!1,h.f=!1,h.g=!1;var q0e=0,gK=0;I(ev,"GridContainerCell",1538),D(471,22,{3:1,34:1,22:1,471:1},pse);var Bb,Fd,v0,W6t=Fr(ev,"HorizontalLabelAlignment",471,Hr,P2n,c0n),Y6t;D(314,217,{217:1,314:1},uot,yht,not),h.jf=function(){return Hit(this)},h.kf=function(){return j4e(this)},h.a=0,h.c=!1;var vOn=I(ev,"LabelCell",314);D(252,336,{217:1,336:1,252:1},DA),h.jf=function(){return tP(this)},h.kf=function(){return nP(this)},h.lf=function(){hle(this)},h.mf=function(){fle(this)},h.b=0,h.c=0,h.d=!1,I(ev,"StripContainerCell",252),D(1691,1,ti,Xc),h.Mb=function(t){return cun(l(t,217))},I(ev,"StripContainerCell/lambda$0$Type",1691),D(1692,1,{},Bc),h.Ye=function(t){return l(t,217).kf()},I(ev,"StripContainerCell/lambda$1$Type",1692),D(1693,1,ti,ja),h.Mb=function(t){return uun(l(t,217))},I(ev,"StripContainerCell/lambda$2$Type",1693),D(1694,1,{},Ou),h.Ye=function(t){return l(t,217).jf()},I(ev,"StripContainerCell/lambda$3$Type",1694),D(472,22,{3:1,34:1,22:1,472:1},bse);var w0,Fb,a1,X6t=Fr(ev,"VerticalLabelAlignment",472,Hr,N2n,u0n),Q6t;D(800,1,{},zke),h.c=0,h.d=0,h.k=0,h.s=0,h.t=0,h.v=!1,h.w=0,h.D=!1,I(tG,"NodeContext",800),D(1536,1,ii,Sa),h.Ne=function(t,n){return tnt(l(t,64),l(n,64))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(tG,"NodeContext/0methodref$comparePortSides$Type",1536),D(1537,1,ii,Po),h.Ne=function(t,n){return Rxn(l(t,117),l(n,117))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(tG,"NodeContext/1methodref$comparePortContexts$Type",1537),D(164,22,{3:1,34:1,22:1,164:1},of);var J6t,Z6t,e7t,t7t,n7t,r7t,i7t,s7t,a7t,o7t,c7t,u7t,l7t,h7t,f7t,d7t,g7t,p7t,b7t,m7t,v7t,H0e,w7t=Fr(tG,"NodeLabelLocation",164,Hr,eue,l0n),y7t;D(117,1,{117:1},c2t),h.a=!1,I(tG,"PortContext",117),D(1541,1,fr,Fc),h.Cd=function(t){vZe(l(t,314))},I(DP,g3t,1541),D(1542,1,ti,xa),h.Mb=function(t){return!!l(t,117).c},I(DP,p3t,1542),D(1543,1,fr,Ba),h.Cd=function(t){vZe(l(t,117).c)},I(DP,"LabelPlacer/lambda$2$Type",1543);var q_e;D(1540,1,fr,ga),h.Cd=function(t){py(),zcn(l(t,117))},I(DP,"NodeLabelAndSizeUtilities/lambda$0$Type",1540),D(801,1,fr,v4e),h.Cd=function(t){tln(this.b,this.c,this.a,l(t,187))},h.a=!1,h.c=!1,I(DP,"NodeLabelCellCreator/lambda$0$Type",801),D(1539,1,fr,Die),h.Cd=function(t){Vcn(this.a,l(t,187))},I(DP,"PortContextCreator/lambda$0$Type",1539);var pK;D(1902,1,{},kh),I(uT,"GreedyRectangleStripOverlapRemover",1902),D(1903,1,ii,lu),h.Ne=function(t,n){return Ohn(l(t,226),l(n,226))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(uT,"GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type",1903),D(1849,1,{},zQe),h.a=5,h.e=0,I(uT,"RectangleStripOverlapRemover",1849),D(1850,1,ii,o5),h.Ne=function(t,n){return Nhn(l(t,226),l(n,226))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(uT,"RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type",1850),D(1852,1,ii,Wh),h.Ne=function(t,n){return Egn(l(t,226),l(n,226))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(uT,"RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type",1852),D(417,22,{3:1,34:1,22:1,417:1},uq);var rB,V0e,U0e,iB,x7t=Fr(uT,"RectangleStripOverlapRemover/OverlapRemovalDirection",417,Hr,Ybn,h0n),k7t;D(226,1,{226:1},Dae),I(uT,"RectangleStripOverlapRemover/RectangleNode",226),D(1851,1,fr,Iie),h.Cd=function(t){l7n(this.a,l(t,226))},I(uT,"RectangleStripOverlapRemover/lambda$1$Type",1851),D(1323,1,ii,od),h.Ne=function(t,n){return MLn(l(t,176),l(n,176))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Md,"PolyominoCompactor/CornerCasesGreaterThanRestComparator",1323),D(1326,1,{},Gd),h.Kb=function(t){return l(t,334).a},I(Md,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type",1326),D(1327,1,ti,cd),h.Mb=function(t){return l(t,332).a},I(Md,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type",1327),D(1328,1,ti,Kd),h.Mb=function(t){return l(t,332).a},I(Md,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type",1328),D(1321,1,ii,$g),h.Ne=function(t,n){return a_n(l(t,176),l(n,176))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Md,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator",1321),D(1324,1,{},as),h.Kb=function(t){return l(t,334).a},I(Md,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type",1324),D(781,1,ii,wn),h.Ne=function(t,n){return q3n(l(t,176),l(n,176))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Md,"PolyominoCompactor/MinNumOfExtensionsComparator",781),D(1319,1,ii,Zr),h.Ne=function(t,n){return Xwn(l(t,330),l(n,330))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Md,"PolyominoCompactor/MinPerimeterComparator",1319),D(1320,1,ii,Zi),h.Ne=function(t,n){return N6n(l(t,330),l(n,330))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Md,"PolyominoCompactor/MinPerimeterComparatorWithShape",1320),D(1322,1,ii,nu),h.Ne=function(t,n){return __n(l(t,176),l(n,176))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Md,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator",1322),D(1325,1,{},vu),h.Kb=function(t){return l(t,334).a},I(Md,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type",1325),D(782,1,{},L3e),h.Ve=function(t,n){return zbn(this,l(t,42),l(n,176))},I(Md,"SuccessorCombination",782),D(649,1,{},Dl),h.Ve=function(t,n){var r;return rEn((r=l(t,42),l(n,176),r))},I(Md,"SuccessorJitter",649),D(648,1,{},Yh),h.Ve=function(t,n){var r;return HCn((r=l(t,42),l(n,176),r))},I(Md,"SuccessorLineByLine",648),D(573,1,{},w1),h.Ve=function(t,n){var r;return rTn((r=l(t,42),l(n,176),r))},I(Md,"SuccessorManhattan",573),D(1344,1,{},$0),h.Ve=function(t,n){var r;return dCn((r=l(t,42),l(n,176),r))},I(Md,"SuccessorMaxNormWindingInMathPosSense",1344),D(409,1,{},E5),h.Ve=function(t,n){return u5e(this,t,n)},h.c=!1,h.d=!1,h.e=!1,h.f=!1,I(Md,"SuccessorQuadrantsGeneric",409),D(1345,1,{},Wi),h.Kb=function(t){return l(t,334).a},I(Md,"SuccessorQuadrantsGeneric/lambda$0$Type",1345),D(332,22,{3:1,34:1,22:1,332:1},lq),h.a=!1;var sB,aB,oB,cB,E7t=Fr(rG,kEe,332,Hr,Kbn,f0n),T7t;D(1317,1,{}),h.Ib=function(){var t,n,r,a,o,f;for(r=" ",t=pt(0),o=0;o=0?"b"+t+"["+Coe(this.a)+"]":"b["+Coe(this.a)+"]"):"b_"+fw(this)},I(OP,"FBendpoint",250),D(290,137,{3:1,290:1,96:1,137:1},jrt),h.Ib=function(){return Coe(this)},I(OP,"FEdge",290),D(235,137,{3:1,235:1,96:1,137:1},KH);var yOn=I(OP,"FGraph",235);D(454,309,{3:1,454:1,309:1,96:1,137:1},zct),h.Ib=function(){return this.b==null||this.b.length==0?"l["+Coe(this.a)+"]":"l_"+this.b},I(OP,"FLabel",454),D(153,309,{3:1,153:1,309:1,96:1,137:1},wnt),h.Ib=function(){return X5e(this)},h.a=0,I(OP,"FNode",153),D(2100,1,{}),h.vf=function(t){yke(this,t)},h.wf=function(){qdt(this)},h.d=0,I(DEe,"AbstractForceModel",2100),D(641,2100,{641:1},jft),h.uf=function(t,n){var r,a,o,f,g;return pvt(this.f,t,n),o=ma(Ja(n.d),t.d),g=b.Math.sqrt(o.a*o.a+o.b*o.b),a=b.Math.max(0,g-eA(t.e)/2-eA(n.e)/2),r=Qpt(this.e,t,n),r>0?f=-ygn(a,this.c)*r:f=Yhn(a,this.b)*l(Q(t,(b0(),qx)),17).a,md(o,f/g),o},h.vf=function(t){yke(this,t),this.a=l(Q(t,(b0(),xK)),17).a,this.c=ze(Ge(Q(t,kK))),this.b=ze(Ge(Q(t,J0e)))},h.xf=function(t){return t0&&(f-=iun(a,this.a)*r),md(o,f*this.b/g),o},h.vf=function(t){var n,r,a,o,f,g,w;for(yke(this,t),this.b=ze(Ge(Q(t,(b0(),Z0e)))),this.c=this.b/l(Q(t,xK),17).a,a=t.e.c.length,f=0,o=0,w=new G(t.e);w.a0},h.a=0,h.b=0,h.c=0,I(DEe,"FruchtermanReingoldModel",642),D(860,1,Pf,KS),h.hf=function(t){sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,aG),""),"Force Model"),"Determines the model for force calculation."),Q_e),(g2(),ps)),J_e),un((r1(),Pn))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,IEe),""),"Iterations"),"The number of iterations on the force model."),pt(300)),Tc),ro),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,OEe),""),"Repulsive Power"),"Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model"),pt(0)),Tc),ro),un(zd)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Dhe),""),"FR Temperature"),"The temperature is used as a scaling factor for particle displacements."),Dd),fo),ta),un(Pn)))),Qs(t,Dhe,aG,V7t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Ihe),""),"Eades Repulsion"),"Factor for repulsive forces in Eades' model."),5),fo),ta),un(Pn)))),Qs(t,Ihe,aG,z7t),rwt((new WS,t))};var R7t,j7t,Q_e,$7t,z7t,q7t,H7t,V7t;I(uL,"ForceMetaDataProvider",860),D(432,22,{3:1,34:1,22:1,432:1},D3e);var Q0e,yK,J_e=Fr(uL,"ForceModelStrategy",432,Hr,zpn,p0n),U7t;D(b2,1,Pf,WS),h.hf=function(t){rwt(t)};var G7t,K7t,Z_e,xK,eAe,W7t,Y7t,X7t,Q7t,tAe,J7t,nAe,rAe,Z7t,qx,e8t,J0e,iAe,t8t,n8t,kK,Z0e,r8t,i8t,s8t,sAe,a8t;I(uL,"ForceOptions",b2),D(1001,1,{},ld),h.sf=function(){var t;return t=new Dwe,t},h.tf=function(t){},I(uL,"ForceOptions/ForceFactory",1001);var hB,$L,Hx,EK;D(861,1,Pf,rz),h.hf=function(t){sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,PEe),""),"Fixed Position"),"Prevent that the node is moved by the layout algorithm."),(Hn(),!1)),(g2(),ya)),Ns),un((r1(),ha))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,BEe),""),"Desired Edge Length"),"Either specified for parent nodes or for individual edges, where the latter takes higher precedence."),100),fo),ta),rs(Pn,he(le(xg,1),it,170,0,[zd]))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,FEe),""),"Layout Dimension"),"Dimensions that are permitted to be altered during layout."),aAe),ps),dAe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,REe),""),"Stress Epsilon"),"Termination criterion for the iterative process."),Dd),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,jEe),""),"Iteration Limit"),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),pt(Ii)),Tc),ro),un(Pn)))),Dvt((new iz,t))};var o8t,c8t,aAe,u8t,l8t,h8t;I(uL,"StressMetaDataProvider",861),D(1004,1,Pf,iz),h.hf=function(t){Dvt(t)};var TK,oAe,cAe,uAe,lAe,hAe,f8t,d8t,g8t,p8t,fAe,b8t;I(uL,"StressOptions",1004),D(1005,1,{},y1),h.sf=function(){var t;return t=new $rt,t},h.tf=function(t){},I(uL,"StressOptions/StressFactory",1005),D(1110,205,tv,$rt),h.rf=function(t,n){var r,a,o,f,g;for(n.Ug(A3t,1),Rt(Bt(at(t,(VN(),lAe))))?Rt(Bt(at(t,fAe)))||KO((r=new Yv((aw(),new Jv(t))),r)):W2t(new Dwe,t,n.eh(1)),o=u0t(t),a=$mt(this.a,o),g=a.Kc();g.Ob();)f=l(g.Pb(),235),!(f.e.c.length<=1)&&(_Ln(this.b,f),JEn(this.b),Vu(f.d,new ud));o=ewt(a),lwt(o),n.Vg()},I(uG,"StressLayoutProvider",1110),D(1111,1,fr,ud),h.Cd=function(t){Ake(l(t,454))},I(uG,"StressLayoutProvider/lambda$0$Type",1111),D(1002,1,{},BQe),h.c=0,h.e=0,h.g=0,I(uG,"StressMajorization",1002),D(391,22,{3:1,34:1,22:1,391:1},mse);var e1e,t1e,n1e,dAe=Fr(uG,"StressMajorization/Dimension",391,Hr,F2n,b0n),m8t;D(1003,1,ii,Dz),h.Ne=function(t,n){return Vfn(this.a,l(t,153),l(n,153))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(uG,"StressMajorization/lambda$0$Type",1003),D(1192,1,{},Got),I(Bx,"ElkLayered",1192),D(1193,1,fr,Iz),h.Cd=function(t){_kn(this.a,l(t,36))},I(Bx,"ElkLayered/lambda$0$Type",1193),D(1194,1,fr,Oie),h.Cd=function(t){Ufn(this.a,l(t,36))},I(Bx,"ElkLayered/lambda$1$Type",1194),D(1281,1,{},Lnt);var v8t,w8t,y8t;I(Bx,"GraphConfigurator",1281),D(770,1,fr,qp),h.Cd=function(t){tpt(this.a,l(t,10))},I(Bx,"GraphConfigurator/lambda$0$Type",770),D(771,1,{},u5),h.Kb=function(t){return mxe(),new bn(null,new kn(l(t,30).a,16))},I(Bx,"GraphConfigurator/lambda$1$Type",771),D(772,1,fr,n_),h.Cd=function(t){tpt(this.a,l(t,10))},I(Bx,"GraphConfigurator/lambda$2$Type",772),D(1109,205,tv,qQe),h.rf=function(t,n){var r;r=oLn(new VQe,t),qe(at(t,(Nt(),p4)))===qe((rp(),A2))?j4n(this.a,r,n):WEn(this.a,r,n),n.$g()||Kvt(new b8,r)},I(Bx,"LayeredLayoutProvider",1109),D(367,22,{3:1,34:1,22:1,367:1},oO);var y0,vg,bu,_u,mc,gAe=Fr(Bx,"LayeredPhases",367,Hr,zmn,m0n),x8t;D(1717,1,{},rft),h.i=0;var k8t;I(jP,"ComponentsToCGraphTransformer",1717);var E8t;D(1718,1,{},mm),h.yf=function(t,n){return b.Math.min(t.a!=null?ze(t.a):t.c.i,n.a!=null?ze(n.a):n.c.i)},h.zf=function(t,n){return b.Math.min(t.a!=null?ze(t.a):t.c.i,n.a!=null?ze(n.a):n.c.i)},I(jP,"ComponentsToCGraphTransformer/1",1718),D(86,1,{86:1}),h.i=0,h.k=!0,h.o=ia;var r1e=I(dL,"CNode",86);D(470,86,{470:1,86:1},Pye,U8e),h.Ib=function(){return""},I(jP,"ComponentsToCGraphTransformer/CRectNode",470),D(1688,1,{},q9);var i1e,s1e;I(jP,"OneDimensionalComponentsCompaction",1688),D(1689,1,{},Vv),h.Kb=function(t){return A2n(l(t,42))},h.Fb=function(t){return this===t},I(jP,"OneDimensionalComponentsCompaction/lambda$0$Type",1689),D(1690,1,{},Y7),h.Kb=function(t){return z4n(l(t,42))},h.Fb=function(t){return this===t},I(jP,"OneDimensionalComponentsCompaction/lambda$1$Type",1690),D(1720,1,{},Zst),I(dL,"CGraph",1720),D(194,1,{194:1},Qce),h.b=0,h.c=0,h.e=0,h.g=!0,h.i=ia,I(dL,"CGroup",194),D(1719,1,{},G2),h.yf=function(t,n){return b.Math.max(t.a!=null?ze(t.a):t.c.i,n.a!=null?ze(n.a):n.c.i)},h.zf=function(t,n){return b.Math.max(t.a!=null?ze(t.a):t.c.i,n.a!=null?ze(n.a):n.c.i)},I(dL,t3t,1719),D(1721,1,{},Zpt),h.d=!1;var T8t,a1e=I(dL,i3t,1721);D(1722,1,{},X7),h.Kb=function(t){return v3e(),Hn(),l(l(t,42).a,86).d.e!=0},h.Fb=function(t){return this===t},I(dL,s3t,1722),D(833,1,{},G4e),h.a=!1,h.b=!1,h.c=!1,h.d=!1,I(dL,a3t,833),D(1898,1,{},pst),I(lG,o3t,1898);var fB=ks(rv,Zwt);D(1899,1,{382:1},Yat),h.bf=function(t){nSn(this,l(t,476))},I(lG,c3t,1899),D(Lb,1,ii,l5),h.Ne=function(t,n){return hpn(l(t,86),l(n,86))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(lG,u3t,Lb),D(476,1,{476:1},O3e),h.a=!1,I(lG,l3t,476),D(1901,1,ii,X3),h.Ne=function(t,n){return f8n(l(t,476),l(n,476))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(lG,h3t,1901),D(148,1,{148:1},Ik,L4e),h.Fb=function(t){var n;return t==null||xOn!=bh(t)?!1:(n=l(t,148),Jc(this.c,n.c)&&Jc(this.d,n.d))},h.Hb=function(){return MN(he(le(wa,1),Rn,1,5,[this.c,this.d]))},h.Ib=function(){return"("+this.c+Co+this.d+(this.a?"cx":"")+this.b+")"},h.a=!0,h.c=0,h.d=0;var xOn=I(rv,"Point",148);D(416,22,{3:1,34:1,22:1,416:1},fq);var s3,a4,M6,o4,C8t=Fr(rv,"Point/Quadrant",416,Hr,Xbn,v0n),S8t;D(1708,1,{},$Qe),h.b=null,h.c=null,h.d=null,h.e=null,h.f=null;var _8t,A8t,L8t,M8t,D8t;I(rv,"RectilinearConvexHull",1708),D(583,1,{382:1},nU),h.bf=function(t){$vn(this,l(t,148))},h.b=0;var pAe;I(rv,"RectilinearConvexHull/MaximalElementsEventHandler",583),D(1710,1,ii,Fp),h.Ne=function(t,n){return fpn(Ge(t),Ge(n))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rv,"RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type",1710),D(1709,1,{382:1},wht),h.bf=function(t){mCn(this,l(t,148))},h.a=0,h.b=null,h.c=null,h.d=null,h.e=null,I(rv,"RectilinearConvexHull/RectangleEventHandler",1709),D(1711,1,ii,nI),h.Ne=function(t,n){return ybn(l(t,148),l(n,148))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rv,"RectilinearConvexHull/lambda$0$Type",1711),D(1712,1,ii,$J),h.Ne=function(t,n){return xbn(l(t,148),l(n,148))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rv,"RectilinearConvexHull/lambda$1$Type",1712),D(1713,1,ii,vm),h.Ne=function(t,n){return wbn(l(t,148),l(n,148))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rv,"RectilinearConvexHull/lambda$2$Type",1713),D(1714,1,ii,hu),h.Ne=function(t,n){return kbn(l(t,148),l(n,148))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rv,"RectilinearConvexHull/lambda$3$Type",1714),D(1715,1,ii,zJ),h.Ne=function(t,n){return Zxn(l(t,148),l(n,148))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rv,"RectilinearConvexHull/lambda$4$Type",1715),D(1716,1,{},Tot),I(rv,"Scanline",1716),D(2104,1,{}),I(V1,"AbstractGraphPlacer",2104),D(335,1,{335:1},hrt),h.Ff=function(t){return this.Gf(t)?(xn(this.b,l(Q(t,(ft(),pp)),21),t),!0):!1},h.Gf=function(t){var n,r,a,o;for(n=l(Q(t,(ft(),pp)),21),o=l($i(Xi,n),21),a=o.Kc();a.Ob();)if(r=l(a.Pb(),21),!l($i(this.b,r),15).dc())return!1;return!0};var Xi;I(V1,"ComponentGroup",335),D(779,2104,{},Nwe),h.Hf=function(t){var n,r;for(r=new G(this.a);r.ar&&(L=0,B+=w+a,w=0),E=f.c,KE(f,L+E.a,B+E.b),Y0(E),o=b.Math.max(o,L+C.a),w=b.Math.max(w,C.b),L+=C.a+a;n.f.a=o,n.f.b=B+w},h.Jf=function(t,n){var r,a,o,f,g;if(qe(Q(n,(Nt(),g4)))===qe((Km(),c4))){for(a=t.Kc();a.Ob();){for(r=l(a.Pb(),36),g=0,f=new G(r.a);f.ar&&!l(Q(f,(ft(),pp)),21).Hc((Ct(),Qn))||E&&l(Q(E,(ft(),pp)),21).Hc((Ct(),ar))||l(Q(f,(ft(),pp)),21).Hc((Ct(),er)))&&(z=B,V+=w+a,w=0),C=f.c,l(Q(f,(ft(),pp)),21).Hc((Ct(),Qn))&&(z=o+a),KE(f,z+C.a,V+C.b),o=b.Math.max(o,z+L.a),l(Q(f,pp),21).Hc(Dr)&&(B=b.Math.max(B,z+L.a+a)),Y0(C),w=b.Math.max(w,L.b),z+=L.a+a,E=f;n.f.a=o,n.f.b=V+w},h.Jf=function(t,n){},I(V1,"ModelOrderRowGraphPlacer",1313),D(1311,1,ii,cj),h.Ne=function(t,n){return j3n(l(t,36),l(n,36))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(V1,"SimpleRowGraphPlacer/1",1311);var O8t;D(1280,1,Ld,q0),h.Lb=function(t){var n;return n=l(Q(l(t,249).b,(Nt(),cc)),75),!!n&&n.b!=0},h.Fb=function(t){return this===t},h.Mb=function(t){var n;return n=l(Q(l(t,249).b,(Nt(),cc)),75),!!n&&n.b!=0},I(hG,"CompoundGraphPostprocessor/1",1280),D(1279,1,ts,UQe),h.Kf=function(t,n){kdt(this,l(t,36),n)},I(hG,"CompoundGraphPreprocessor",1279),D(453,1,{453:1},f1t),h.c=!1,I(hG,"CompoundGraphPreprocessor/ExternalPort",453),D(249,1,{249:1},Kq),h.Ib=function(){return aae(this.c)+":"+Kpt(this.b)},I(hG,"CrossHierarchyEdge",249),D(777,1,ii,GI),h.Ne=function(t,n){return $7n(this,l(t,249),l(n,249))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(hG,"CrossHierarchyEdgeComparator",777),D(305,137,{3:1,305:1,96:1,137:1}),h.p=0,I(Cu,"LGraphElement",305),D(18,305,{3:1,18:1,305:1,96:1,137:1},Tw),h.Ib=function(){return Kpt(this)};var u1e=I(Cu,"LEdge",18);D(36,305,{3:1,20:1,36:1,305:1,96:1,137:1},o7e),h.Jc=function(t){to(this,t)},h.Kc=function(){return new G(this.b)},h.Ib=function(){return this.b.c.length==0?"G-unlayered"+Tb(this.a):this.a.c.length==0?"G-layered"+Tb(this.b):"G[layerless"+Tb(this.a)+", layers"+Tb(this.b)+"]"};var N8t=I(Cu,"LGraph",36),P8t;D(666,1,{}),h.Lf=function(){return this.e.n},h.of=function(t){return Q(this.e,t)},h.Mf=function(){return this.e.o},h.Nf=function(){return this.e.p},h.pf=function(t){return ns(this.e,t)},h.Of=function(t){this.e.n.a=t.a,this.e.n.b=t.b},h.Pf=function(t){this.e.o.a=t.a,this.e.o.b=t.b},h.Qf=function(t){this.e.p=t},I(Cu,"LGraphAdapters/AbstractLShapeAdapter",666),D(474,1,{853:1},Tm),h.Rf=function(){var t,n;if(!this.b)for(this.b=eg(this.a.b.c.length),n=new G(this.a.b);n.a0&&H0t((Xn(n-1,t.length),t.charCodeAt(n-1)),N3t);)--n;if(f> ",t),fU(r)),hi(wu((t.a+="[",t),r.i),"]")),t.a},h.c=!0,h.d=!1;var yAe,xAe,kAe,EAe,TAe,CAe,F8t=I(Cu,"LPort",12);D(408,1,hg,T5),h.Jc=function(t){to(this,t)},h.Kc=function(){var t;return t=new G(this.a.e),new jWe(t)},I(Cu,"LPort/1",408),D(1309,1,Oa,jWe),h.Nb=function(t){Za(this,t)},h.Pb=function(){return l(re(this.a),18).c},h.Ob=function(){return Lc(this.a)},h.Qb=function(){Q_(this.a)},I(Cu,"LPort/1/1",1309),D(369,1,hg,C8),h.Jc=function(t){to(this,t)},h.Kc=function(){var t;return t=new G(this.a.g),new vwe(t)},I(Cu,"LPort/2",369),D(776,1,Oa,vwe),h.Nb=function(t){Za(this,t)},h.Pb=function(){return l(re(this.a),18).d},h.Ob=function(){return Lc(this.a)},h.Qb=function(){Q_(this.a)},I(Cu,"LPort/2/1",776),D(1302,1,hg,Met),h.Jc=function(t){to(this,t)},h.Kc=function(){return new N1(this)},I(Cu,"LPort/CombineIter",1302),D(208,1,Oa,N1),h.Nb=function(t){Za(this,t)},h.Qb=function(){aZe()},h.Ob=function(){return $_(this)},h.Pb=function(){return Lc(this.a)?re(this.a):re(this.b)},I(Cu,"LPort/CombineIter/1",208),D(1303,1,Ld,K2),h.Lb=function(t){return Lst(t)},h.Fb=function(t){return this===t},h.Mb=function(t){return kl(),l(t,12).g.c.length!=0},I(Cu,"LPort/lambda$0$Type",1303),D(1304,1,Ld,J3),h.Lb=function(t){return Mst(t)},h.Fb=function(t){return this===t},h.Mb=function(t){return kl(),l(t,12).e.c.length!=0},I(Cu,"LPort/lambda$1$Type",1304),D(1305,1,Ld,HJ),h.Lb=function(t){return kl(),l(t,12).j==(Ct(),Qn)},h.Fb=function(t){return this===t},h.Mb=function(t){return kl(),l(t,12).j==(Ct(),Qn)},I(Cu,"LPort/lambda$2$Type",1305),D(1306,1,Ld,wm),h.Lb=function(t){return kl(),l(t,12).j==(Ct(),ar)},h.Fb=function(t){return this===t},h.Mb=function(t){return kl(),l(t,12).j==(Ct(),ar)},I(Cu,"LPort/lambda$3$Type",1306),D(1307,1,Ld,VJ),h.Lb=function(t){return kl(),l(t,12).j==(Ct(),Dr)},h.Fb=function(t){return this===t},h.Mb=function(t){return kl(),l(t,12).j==(Ct(),Dr)},I(Cu,"LPort/lambda$4$Type",1307),D(1308,1,Ld,UJ),h.Lb=function(t){return kl(),l(t,12).j==(Ct(),er)},h.Fb=function(t){return this===t},h.Mb=function(t){return kl(),l(t,12).j==(Ct(),er)},I(Cu,"LPort/lambda$5$Type",1308),D(30,305,{3:1,20:1,305:1,30:1,96:1,137:1},yu),h.Jc=function(t){to(this,t)},h.Kc=function(){return new G(this.a)},h.Ib=function(){return"L_"+gc(this.b.b,this,0)+Tb(this.a)},I(Cu,"Layer",30),D(1330,1,{},VQe),I(v2,R3t,1330),D(1334,1,{},Q7),h.Kb=function(t){return bc(l(t,84))},I(v2,"ElkGraphImporter/0methodref$connectableShapeToNode$Type",1334),D(1337,1,{},uS),h.Kb=function(t){return bc(l(t,84))},I(v2,"ElkGraphImporter/1methodref$connectableShapeToNode$Type",1337),D(1331,1,fr,$We),h.Cd=function(t){l2t(this.a,l(t,123))},I(v2,MEe,1331),D(1332,1,fr,zWe),h.Cd=function(t){l2t(this.a,l(t,123))},I(v2,j3t,1332),D(1333,1,{},lj),h.Kb=function(t){return new bn(null,new kn(A5e(l(t,74)),16))},I(v2,$3t,1333),D(1335,1,ti,qWe),h.Mb=function(t){return Hln(this.a,l(t,27))},I(v2,z3t,1335),D(1336,1,{},H9),h.Kb=function(t){return new bn(null,new kn(apn(l(t,74)),16))},I(v2,"ElkGraphImporter/lambda$5$Type",1336),D(1338,1,ti,HWe),h.Mb=function(t){return Vln(this.a,l(t,27))},I(v2,"ElkGraphImporter/lambda$7$Type",1338),D(1339,1,ti,GJ),h.Mb=function(t){return ypn(l(t,74))},I(v2,"ElkGraphImporter/lambda$8$Type",1339),D(1297,1,{},b8);var R8t;I(v2,"ElkGraphLayoutTransferrer",1297),D(1298,1,ti,VWe),h.Mb=function(t){return Ifn(this.a,l(t,18))},I(v2,"ElkGraphLayoutTransferrer/lambda$0$Type",1298),D(1299,1,fr,UWe),h.Cd=function(t){sO(),vt(this.a,l(t,18))},I(v2,"ElkGraphLayoutTransferrer/lambda$1$Type",1299),D(1300,1,ti,GWe),h.Mb=function(t){return mfn(this.a,l(t,18))},I(v2,"ElkGraphLayoutTransferrer/lambda$2$Type",1300),D(1301,1,fr,KWe),h.Cd=function(t){sO(),vt(this.a,l(t,18))},I(v2,"ElkGraphLayoutTransferrer/lambda$3$Type",1301),D(819,1,{},i4e),I(rr,"BiLinkedHashMultiMap",819),D(1550,1,ts,V9),h.Kf=function(t,n){s3n(l(t,36),n)},I(rr,"CommentNodeMarginCalculator",1550),D(1551,1,{},KJ),h.Kb=function(t){return new bn(null,new kn(l(t,30).a,16))},I(rr,"CommentNodeMarginCalculator/lambda$0$Type",1551),D(1552,1,fr,WJ),h.Cd=function(t){sLn(l(t,10))},I(rr,"CommentNodeMarginCalculator/lambda$1$Type",1552),D(1553,1,ts,YJ),h.Kf=function(t,n){uSn(l(t,36),n)},I(rr,"CommentPostprocessor",1553),D(1554,1,ts,XJ),h.Kf=function(t,n){DDn(l(t,36),n)},I(rr,"CommentPreprocessor",1554),D(1555,1,ts,QJ),h.Kf=function(t,n){SCn(l(t,36),n)},I(rr,"ConstraintsPostprocessor",1555),D(1556,1,ts,JJ),h.Kf=function(t,n){O3n(l(t,36),n)},I(rr,"EdgeAndLayerConstraintEdgeReverser",1556),D(1557,1,ts,ZJ),h.Kf=function(t,n){E5n(l(t,36),n)},I(rr,"EndLabelPostprocessor",1557),D(1558,1,{},eZ),h.Kb=function(t){return new bn(null,new kn(l(t,30).a,16))},I(rr,"EndLabelPostprocessor/lambda$0$Type",1558),D(1559,1,ti,tZ),h.Mb=function(t){return Rmn(l(t,10))},I(rr,"EndLabelPostprocessor/lambda$1$Type",1559),D(1560,1,fr,nZ),h.Cd=function(t){d8n(l(t,10))},I(rr,"EndLabelPostprocessor/lambda$2$Type",1560),D(1561,1,ts,rZ),h.Kf=function(t,n){tkn(l(t,36),n)},I(rr,"EndLabelPreprocessor",1561),D(1562,1,{},rI),h.Kb=function(t){return new bn(null,new kn(l(t,30).a,16))},I(rr,"EndLabelPreprocessor/lambda$0$Type",1562),D(1563,1,fr,mit),h.Cd=function(t){nln(this.a,this.b,this.c,l(t,10))},h.a=0,h.b=0,h.c=!1,I(rr,"EndLabelPreprocessor/lambda$1$Type",1563),D(1564,1,ti,iZ),h.Mb=function(t){return qe(Q(l(t,72),(Nt(),jd)))===qe((F1(),rC))},I(rr,"EndLabelPreprocessor/lambda$2$Type",1564),D(1565,1,fr,WWe),h.Cd=function(t){ui(this.a,l(t,72))},I(rr,"EndLabelPreprocessor/lambda$3$Type",1565),D(1566,1,ti,sZ),h.Mb=function(t){return qe(Q(l(t,72),(Nt(),jd)))===qe((F1(),_4))},I(rr,"EndLabelPreprocessor/lambda$4$Type",1566),D(1567,1,fr,YWe),h.Cd=function(t){ui(this.a,l(t,72))},I(rr,"EndLabelPreprocessor/lambda$5$Type",1567),D(1615,1,ts,Hre),h.Kf=function(t,n){k4n(l(t,36),n)};var j8t;I(rr,"EndLabelSorter",1615),D(1616,1,ii,lS),h.Ne=function(t,n){return t6n(l(t,466),l(n,466))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"EndLabelSorter/1",1616),D(466,1,{466:1},Hat),I(rr,"EndLabelSorter/LabelGroup",466),D(1617,1,{},hj),h.Kb=function(t){return iO(),new bn(null,new kn(l(t,30).a,16))},I(rr,"EndLabelSorter/lambda$0$Type",1617),D(1618,1,ti,J7),h.Mb=function(t){return iO(),l(t,10).k==(Zn(),Ps)},I(rr,"EndLabelSorter/lambda$1$Type",1618),D(1619,1,fr,aZ),h.Cd=function(t){p9n(l(t,10))},I(rr,"EndLabelSorter/lambda$2$Type",1619),D(1620,1,ti,oZ),h.Mb=function(t){return iO(),qe(Q(l(t,72),(Nt(),jd)))===qe((F1(),_4))},I(rr,"EndLabelSorter/lambda$3$Type",1620),D(1621,1,ti,cZ),h.Mb=function(t){return iO(),qe(Q(l(t,72),(Nt(),jd)))===qe((F1(),rC))},I(rr,"EndLabelSorter/lambda$4$Type",1621),D(1568,1,ts,uZ),h.Kf=function(t,n){yLn(this,l(t,36))},h.b=0,h.c=0,I(rr,"FinalSplineBendpointsCalculator",1568),D(1569,1,{},lZ),h.Kb=function(t){return new bn(null,new kn(l(t,30).a,16))},I(rr,"FinalSplineBendpointsCalculator/lambda$0$Type",1569),D(1570,1,{},hS),h.Kb=function(t){return new bn(null,new vw(new hr(dr(qs(l(t,10)).a.Kc(),new j))))},I(rr,"FinalSplineBendpointsCalculator/lambda$1$Type",1570),D(1571,1,ti,iI),h.Mb=function(t){return!Do(l(t,18))},I(rr,"FinalSplineBendpointsCalculator/lambda$2$Type",1571),D(1572,1,ti,fj),h.Mb=function(t){return ns(l(t,18),(ft(),fv))},I(rr,"FinalSplineBendpointsCalculator/lambda$3$Type",1572),D(1573,1,fr,XWe),h.Cd=function(t){L_n(this.a,l(t,131))},I(rr,"FinalSplineBendpointsCalculator/lambda$4$Type",1573),D(1574,1,fr,h5),h.Cd=function(t){JN(l(t,18).a)},I(rr,"FinalSplineBendpointsCalculator/lambda$5$Type",1574),D(803,1,ts,wwe),h.Kf=function(t,n){dMn(this,l(t,36),n)},I(rr,"GraphTransformer",803),D(517,22,{3:1,34:1,22:1,517:1},I3e);var h1e,dB,$8t=Fr(rr,"GraphTransformer/Mode",517,Hr,qpn,E1n),z8t;D(1575,1,ts,f5),h.Kf=function(t,n){PTn(l(t,36),n)},I(rr,"HierarchicalNodeResizingProcessor",1575),D(1576,1,ts,hZ),h.Kf=function(t,n){e3n(l(t,36),n)},I(rr,"HierarchicalPortConstraintProcessor",1576),D(1577,1,ii,t0),h.Ne=function(t,n){return k6n(l(t,10),l(n,10))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"HierarchicalPortConstraintProcessor/NodeComparator",1577),D(1578,1,ts,Z7),h.Kf=function(t,n){EAn(l(t,36),n)},I(rr,"HierarchicalPortDummySizeProcessor",1578),D(1579,1,ts,fZ),h.Kf=function(t,n){OSn(this,l(t,36),n)},h.a=0,I(rr,"HierarchicalPortOrthogonalEdgeRouter",1579),D(1580,1,ii,U9),h.Ne=function(t,n){return Phn(l(t,10),l(n,10))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"HierarchicalPortOrthogonalEdgeRouter/1",1580),D(1581,1,ii,Wd),h.Ne=function(t,n){return zvn(l(t,10),l(n,10))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"HierarchicalPortOrthogonalEdgeRouter/2",1581),D(1582,1,ts,dZ),h.Kf=function(t,n){Xxn(l(t,36),n)},I(rr,"HierarchicalPortPositionProcessor",1582),D(1583,1,ts,Kv),h.Kf=function(t,n){fIn(this,l(t,36))},h.a=0,h.c=0;var CK,SK;I(rr,"HighDegreeNodeLayeringProcessor",1583),D(580,1,{580:1},gZ),h.b=-1,h.d=-1,I(rr,"HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation",580),D(1584,1,{},pZ),h.Kb=function(t){return OO(),ka(l(t,10))},h.Fb=function(t){return this===t},I(rr,"HighDegreeNodeLayeringProcessor/lambda$0$Type",1584),D(1585,1,{},dj),h.Kb=function(t){return OO(),qs(l(t,10))},h.Fb=function(t){return this===t},I(rr,"HighDegreeNodeLayeringProcessor/lambda$1$Type",1585),D(1591,1,ts,bZ),h.Kf=function(t,n){pAn(this,l(t,36),n)},I(rr,"HyperedgeDummyMerger",1591),D(804,1,{},w4e),h.a=!1,h.b=!1,h.c=!1,I(rr,"HyperedgeDummyMerger/MergeState",804),D(1592,1,{},fS),h.Kb=function(t){return new bn(null,new kn(l(t,30).a,16))},I(rr,"HyperedgeDummyMerger/lambda$0$Type",1592),D(1593,1,{},dS),h.Kb=function(t){return new bn(null,new kn(l(t,10).j,16))},I(rr,"HyperedgeDummyMerger/lambda$1$Type",1593),D(1594,1,fr,gj),h.Cd=function(t){l(t,12).p=-1},I(rr,"HyperedgeDummyMerger/lambda$2$Type",1594),D(1595,1,ts,sI),h.Kf=function(t,n){dAn(l(t,36),n)},I(rr,"HypernodesProcessor",1595),D(1596,1,ts,e8),h.Kf=function(t,n){kAn(l(t,36),n)},I(rr,"InLayerConstraintProcessor",1596),D(1597,1,ts,mZ),h.Kf=function(t,n){p3n(l(t,36),n)},I(rr,"InnermostNodeMarginCalculator",1597),D(1598,1,ts,pj),h.Kf=function(t,n){_Dn(this,l(t,36))},h.a=ia,h.b=ia,h.c=gs,h.d=gs;var kOn=I(rr,"InteractiveExternalPortPositioner",1598);D(1599,1,{},bj),h.Kb=function(t){return l(t,18).d.i},h.Fb=function(t){return this===t},I(rr,"InteractiveExternalPortPositioner/lambda$0$Type",1599),D(1600,1,{},QWe),h.Kb=function(t){return Bhn(this.a,Ge(t))},h.Fb=function(t){return this===t},I(rr,"InteractiveExternalPortPositioner/lambda$1$Type",1600),D(1601,1,{},vZ),h.Kb=function(t){return l(t,18).c.i},h.Fb=function(t){return this===t},I(rr,"InteractiveExternalPortPositioner/lambda$2$Type",1601),D(1602,1,{},JWe),h.Kb=function(t){return Fhn(this.a,Ge(t))},h.Fb=function(t){return this===t},I(rr,"InteractiveExternalPortPositioner/lambda$3$Type",1602),D(1603,1,{},ZWe),h.Kb=function(t){return Nfn(this.a,Ge(t))},h.Fb=function(t){return this===t},I(rr,"InteractiveExternalPortPositioner/lambda$4$Type",1603),D(1604,1,{},eYe),h.Kb=function(t){return Pfn(this.a,Ge(t))},h.Fb=function(t){return this===t},I(rr,"InteractiveExternalPortPositioner/lambda$5$Type",1604),D(81,22,{3:1,34:1,22:1,81:1,196:1},Ws),h.dg=function(){switch(this.g){case 15:return new Uj;case 22:return new Dee;case 47:return new Nee;case 28:case 35:return new CZ;case 32:return new V9;case 42:return new YJ;case 1:return new XJ;case 41:return new QJ;case 56:return new wwe((dE(),dB));case 0:return new wwe((dE(),h1e));case 2:return new JJ;case 54:return new ZJ;case 33:return new rZ;case 51:return new uZ;case 55:return new f5;case 13:return new hZ;case 38:return new Z7;case 44:return new fZ;case 40:return new dZ;case 9:return new Kv;case 49:return new nrt;case 37:return new bZ;case 43:return new sI;case 27:return new e8;case 30:return new mZ;case 3:return new pj;case 18:return new yZ;case 29:return new xZ;case 5:return new fk;case 50:return new wZ;case 34:return new sz;case 36:return new d5;case 52:return new Hre;case 11:return new G9;case 7:return new Vre;case 39:return new aI;case 45:return new Z3;case 16:return new K9;case 10:return new Wet;case 48:return new mj;case 21:return new oI;case 23:return new Wie((Iw(),oM));case 8:return new cI;case 12:return new _Z;case 4:return new uI;case 19:return new cz;case 17:return new IZ;case 53:return new OZ;case 6:return new Tj;case 25:return new KQe;case 46:return new FZ;case 31:return new Vrt;case 14:return new UZ;case 26:return new Fee;case 20:return new Aj;case 24:return new Wie((Iw(),MW));default:throw ue(new Yn(Fhe+(this.f!=null?this.f:""+this.g)))}};var SAe,_Ae,AAe,LAe,MAe,DAe,IAe,OAe,NAe,PAe,D6,_K,AK,BAe,FAe,RAe,jAe,$Ae,zAe,qAe,zL,HAe,VAe,UAe,GAe,KAe,f1e,LK,MK,WAe,DK,IK,OK,LT,u4,l4,YAe,NK,PK,XAe,BK,FK,QAe,JAe,ZAe,eLe,RK,d1e,gB,jK,$K,zK,qK,tLe,nLe,rLe,iLe,EOn=Fr(rr,Rhe,81,Hr,rbt,k0n),q8t;D(1605,1,ts,yZ),h.Kf=function(t,n){CDn(l(t,36),n)},I(rr,"InvertedPortProcessor",1605),D(1606,1,ts,xZ),h.Kf=function(t,n){x_n(l(t,36),n)},I(rr,"LabelAndNodeSizeProcessor",1606),D(1607,1,ti,kZ),h.Mb=function(t){return l(t,10).k==(Zn(),Ps)},I(rr,"LabelAndNodeSizeProcessor/lambda$0$Type",1607),D(1608,1,ti,EZ),h.Mb=function(t){return l(t,10).k==(Zn(),Us)},I(rr,"LabelAndNodeSizeProcessor/lambda$1$Type",1608),D(1609,1,fr,vit),h.Cd=function(t){rln(this.b,this.a,this.c,l(t,10))},h.a=!1,h.c=!1,I(rr,"LabelAndNodeSizeProcessor/lambda$2$Type",1609),D(1610,1,ts,fk),h.Kf=function(t,n){QMn(l(t,36),n)};var H8t;I(rr,"LabelDummyInserter",1610),D(1611,1,Ld,Yd),h.Lb=function(t){return qe(Q(l(t,72),(Nt(),jd)))===qe((F1(),nC))},h.Fb=function(t){return this===t},h.Mb=function(t){return qe(Q(l(t,72),(Nt(),jd)))===qe((F1(),nC))},I(rr,"LabelDummyInserter/1",1611),D(1612,1,ts,wZ),h.Kf=function(t,n){jMn(l(t,36),n)},I(rr,"LabelDummyRemover",1612),D(1613,1,ti,Uv),h.Mb=function(t){return Rt(Bt(Q(l(t,72),(Nt(),tde))))},I(rr,"LabelDummyRemover/lambda$0$Type",1613),D(1378,1,ts,sz),h.Kf=function(t,n){DMn(this,l(t,36),n)},h.a=null;var g1e;I(rr,"LabelDummySwitcher",1378),D(293,1,{293:1},nmt),h.c=0,h.d=null,h.f=0,I(rr,"LabelDummySwitcher/LabelDummyInfo",293),D(1379,1,{},TZ),h.Kb=function(t){return lx(),new bn(null,new kn(l(t,30).a,16))},I(rr,"LabelDummySwitcher/lambda$0$Type",1379),D(1380,1,ti,gS),h.Mb=function(t){return lx(),l(t,10).k==(Zn(),cu)},I(rr,"LabelDummySwitcher/lambda$1$Type",1380),D(1381,1,{},tYe),h.Kb=function(t){return vfn(this.a,l(t,10))},I(rr,"LabelDummySwitcher/lambda$2$Type",1381),D(1382,1,fr,nYe),h.Cd=function(t){Rgn(this.a,l(t,293))},I(rr,"LabelDummySwitcher/lambda$3$Type",1382),D(1383,1,ii,pS),h.Ne=function(t,n){return cgn(l(t,293),l(n,293))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"LabelDummySwitcher/lambda$4$Type",1383),D(802,1,ts,CZ),h.Kf=function(t,n){yvn(l(t,36),n)},I(rr,"LabelManagementProcessor",802),D(1614,1,ts,d5),h.Kf=function(t,n){QCn(l(t,36),n)},I(rr,"LabelSideSelector",1614),D(1622,1,ts,G9),h.Kf=function(t,n){RAn(l(t,36),n)},I(rr,"LayerConstraintPostprocessor",1622),D(1623,1,ts,Vre),h.Kf=function(t,n){OEn(l(t,36),n)};var sLe;I(rr,"LayerConstraintPreprocessor",1623),D(371,22,{3:1,34:1,22:1,371:1},gq);var pB,HK,VK,p1e,V8t=Fr(rr,"LayerConstraintPreprocessor/HiddenNodeConnections",371,Hr,Jbn,E0n),U8t;D(1624,1,ts,aI),h.Kf=function(t,n){tMn(l(t,36),n)},I(rr,"LayerSizeAndGraphHeightCalculator",1624),D(1625,1,ts,Z3),h.Kf=function(t,n){BTn(l(t,36),n)},I(rr,"LongEdgeJoiner",1625),D(1626,1,ts,K9),h.Kf=function(t,n){DLn(l(t,36),n)},I(rr,"LongEdgeSplitter",1626),D(1627,1,ts,Wet),h.Kf=function(t,n){fDn(this,l(t,36),n)},h.e=0,h.f=0,h.j=0,h.k=0,h.n=0,h.o=0;var G8t,K8t;I(rr,"NodePromotion",1627),D(1628,1,ii,SZ),h.Ne=function(t,n){return Cyn(l(t,10),l(n,10))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"NodePromotion/1",1628),D(1629,1,ii,bS),h.Ne=function(t,n){return Syn(l(t,10),l(n,10))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"NodePromotion/2",1629),D(1630,1,{},hd),h.Kb=function(t){return l(t,42),Yq(),Hn(),!0},h.Fb=function(t){return this===t},I(rr,"NodePromotion/lambda$0$Type",1630),D(1631,1,{},aYe),h.Kb=function(t){return x2n(this.a,l(t,42))},h.Fb=function(t){return this===t},h.a=0,I(rr,"NodePromotion/lambda$1$Type",1631),D(1632,1,{},oYe),h.Kb=function(t){return y2n(this.a,l(t,42))},h.Fb=function(t){return this===t},h.a=0,I(rr,"NodePromotion/lambda$2$Type",1632),D(1633,1,ts,mj),h.Kf=function(t,n){aIn(l(t,36),n)},I(rr,"NorthSouthPortPostprocessor",1633),D(1634,1,ts,oI),h.Kf=function(t,n){$Dn(l(t,36),n)},I(rr,"NorthSouthPortPreprocessor",1634),D(1635,1,ii,W9),h.Ne=function(t,n){return $3n(l(t,12),l(n,12))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"NorthSouthPortPreprocessor/lambda$0$Type",1635),D(1636,1,ts,cI),h.Kf=function(t,n){nAn(l(t,36),n)},I(rr,"PartitionMidprocessor",1636),D(1637,1,ti,vj),h.Mb=function(t){return ns(l(t,10),(Nt(),HT))},I(rr,"PartitionMidprocessor/lambda$0$Type",1637),D(1638,1,fr,cYe),h.Cd=function(t){xpn(this.a,l(t,10))},I(rr,"PartitionMidprocessor/lambda$1$Type",1638),D(1639,1,ts,_Z),h.Kf=function(t,n){rCn(l(t,36),n)},I(rr,"PartitionPostprocessor",1639),D(1640,1,ts,uI),h.Kf=function(t,n){mEn(l(t,36),n)},I(rr,"PartitionPreprocessor",1640),D(1641,1,ti,AZ),h.Mb=function(t){return ns(l(t,10),(Nt(),HT))},I(rr,"PartitionPreprocessor/lambda$0$Type",1641),D(1642,1,{},LZ),h.Kb=function(t){return new bn(null,new vw(new hr(dr(qs(l(t,10)).a.Kc(),new j))))},I(rr,"PartitionPreprocessor/lambda$1$Type",1642),D(1643,1,ti,wj),h.Mb=function(t){return o6n(l(t,18))},I(rr,"PartitionPreprocessor/lambda$2$Type",1643),D(1644,1,fr,t8),h.Cd=function(t){ryn(l(t,18))},I(rr,"PartitionPreprocessor/lambda$3$Type",1644),D(1645,1,ts,cz),h.Kf=function(t,n){B_n(l(t,36),n)};var aLe,W8t,Y8t,X8t,oLe,cLe;I(rr,"PortListSorter",1645),D(1648,1,ii,yj),h.Ne=function(t,n){return Kct(l(t,12),l(n,12))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"PortListSorter/lambda$0$Type",1648),D(1650,1,ii,n8),h.Ne=function(t,n){return Smt(l(t,12),l(n,12))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"PortListSorter/lambda$1$Type",1650),D(1646,1,{},MZ),h.Kb=function(t){return TE(),l(t,12).e},I(rr,"PortListSorter/lambda$2$Type",1646),D(1647,1,{},lI),h.Kb=function(t){return TE(),l(t,12).g},I(rr,"PortListSorter/lambda$3$Type",1647),D(1649,1,ii,DZ),h.Ne=function(t,n){return D7n(l(t,12),l(n,12))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"PortListSorter/lambda$4$Type",1649),D(1651,1,ts,IZ),h.Kf=function(t,n){GEn(l(t,36),n)},I(rr,"PortSideProcessor",1651),D(1652,1,ts,OZ),h.Kf=function(t,n){KSn(l(t,36),n)},I(rr,"ReversedEdgeRestorer",1652),D(1657,1,ts,KQe),h.Kf=function(t,n){d7n(this,l(t,36),n)},I(rr,"SelfLoopPortRestorer",1657),D(1658,1,{},NZ),h.Kb=function(t){return new bn(null,new kn(l(t,30).a,16))},I(rr,"SelfLoopPortRestorer/lambda$0$Type",1658),D(1659,1,ti,xj),h.Mb=function(t){return l(t,10).k==(Zn(),Ps)},I(rr,"SelfLoopPortRestorer/lambda$1$Type",1659),D(1660,1,ti,PZ),h.Mb=function(t){return ns(l(t,10),(ft(),h3))},I(rr,"SelfLoopPortRestorer/lambda$2$Type",1660),D(1661,1,{},BZ),h.Kb=function(t){return l(Q(l(t,10),(ft(),h3)),337)},I(rr,"SelfLoopPortRestorer/lambda$3$Type",1661),D(1662,1,fr,iYe),h.Cd=function(t){A9n(this.a,l(t,337))},I(rr,"SelfLoopPortRestorer/lambda$4$Type",1662),D(805,1,fr,kj),h.Cd=function(t){z9n(l(t,105))},I(rr,"SelfLoopPortRestorer/lambda$5$Type",805),D(1663,1,ts,FZ),h.Kf=function(t,n){w6n(l(t,36),n)},I(rr,"SelfLoopPostProcessor",1663),D(1664,1,{},RZ),h.Kb=function(t){return new bn(null,new kn(l(t,30).a,16))},I(rr,"SelfLoopPostProcessor/lambda$0$Type",1664),D(1665,1,ti,jZ),h.Mb=function(t){return l(t,10).k==(Zn(),Ps)},I(rr,"SelfLoopPostProcessor/lambda$1$Type",1665),D(1666,1,ti,$Z),h.Mb=function(t){return ns(l(t,10),(ft(),h3))},I(rr,"SelfLoopPostProcessor/lambda$2$Type",1666),D(1667,1,fr,Ej),h.Cd=function(t){M8n(l(t,10))},I(rr,"SelfLoopPostProcessor/lambda$3$Type",1667),D(1668,1,{},zZ),h.Kb=function(t){return new bn(null,new kn(l(t,105).f,1))},I(rr,"SelfLoopPostProcessor/lambda$4$Type",1668),D(1669,1,fr,rYe),h.Cd=function(t){nmn(this.a,l(t,340))},I(rr,"SelfLoopPostProcessor/lambda$5$Type",1669),D(1670,1,ti,qZ),h.Mb=function(t){return!!l(t,105).i},I(rr,"SelfLoopPostProcessor/lambda$6$Type",1670),D(1671,1,fr,sYe),h.Cd=function(t){nun(this.a,l(t,105))},I(rr,"SelfLoopPostProcessor/lambda$7$Type",1671),D(1653,1,ts,Tj),h.Kf=function(t,n){xTn(l(t,36),n)},I(rr,"SelfLoopPreProcessor",1653),D(1654,1,{},Cj),h.Kb=function(t){return new bn(null,new kn(l(t,105).f,1))},I(rr,"SelfLoopPreProcessor/lambda$0$Type",1654),D(1655,1,{},Sj),h.Kb=function(t){return l(t,340).a},I(rr,"SelfLoopPreProcessor/lambda$1$Type",1655),D(1656,1,fr,HZ),h.Cd=function(t){shn(l(t,18))},I(rr,"SelfLoopPreProcessor/lambda$2$Type",1656),D(1672,1,ts,Vrt),h.Kf=function(t,n){u9n(this,l(t,36),n)},I(rr,"SelfLoopRouter",1672),D(1673,1,{},VZ),h.Kb=function(t){return new bn(null,new kn(l(t,30).a,16))},I(rr,"SelfLoopRouter/lambda$0$Type",1673),D(1674,1,ti,Y9),h.Mb=function(t){return l(t,10).k==(Zn(),Ps)},I(rr,"SelfLoopRouter/lambda$1$Type",1674),D(1675,1,ti,r8),h.Mb=function(t){return ns(l(t,10),(ft(),h3))},I(rr,"SelfLoopRouter/lambda$2$Type",1675),D(1676,1,{},mS),h.Kb=function(t){return l(Q(l(t,10),(ft(),h3)),337)},I(rr,"SelfLoopRouter/lambda$3$Type",1676),D(1677,1,fr,Aet),h.Cd=function(t){ppn(this.a,this.b,l(t,337))},I(rr,"SelfLoopRouter/lambda$4$Type",1677),D(1678,1,ts,UZ),h.Kf=function(t,n){jCn(l(t,36),n)},I(rr,"SemiInteractiveCrossMinProcessor",1678),D(1679,1,ti,hI),h.Mb=function(t){return l(t,10).k==(Zn(),Ps)},I(rr,"SemiInteractiveCrossMinProcessor/lambda$0$Type",1679),D(1680,1,ti,vS),h.Mb=function(t){return ost(l(t,10))._b((Nt(),w4))},I(rr,"SemiInteractiveCrossMinProcessor/lambda$1$Type",1680),D(1681,1,ii,fI),h.Ne=function(t,n){return n3n(l(t,10),l(n,10))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"SemiInteractiveCrossMinProcessor/lambda$2$Type",1681),D(1682,1,{},_j),h.Ve=function(t,n){return kpn(l(t,10),l(n,10))},I(rr,"SemiInteractiveCrossMinProcessor/lambda$3$Type",1682),D(1684,1,ts,Aj),h.Kf=function(t,n){uLn(l(t,36),n)},I(rr,"SortByInputModelProcessor",1684),D(1685,1,ti,GZ),h.Mb=function(t){return l(t,12).g.c.length!=0},I(rr,"SortByInputModelProcessor/lambda$0$Type",1685),D(1686,1,fr,uYe),h.Cd=function(t){G9n(this.a,l(t,12))},I(rr,"SortByInputModelProcessor/lambda$1$Type",1686),D(1759,817,{},mft),h.df=function(t){var n,r,a,o;switch(this.c=t,this.a.g){case 2:n=new bt,Is(Fi(new bn(null,new kn(this.c.a.b,16)),new ree),new Fet(this,n)),ZN(this,new WZ),Vu(n,new Lj),n.c.length=0,Is(Fi(new bn(null,new kn(this.c.a.b,16)),new Mj),new hYe(n)),ZN(this,new YZ),Vu(n,new XZ),n.c.length=0,r=vnt(uce(xy(new bn(null,new kn(this.c.a.b,16)),new fYe(this))),new QZ),Is(new bn(null,new kn(this.c.a.a,16)),new Det(r,n)),ZN(this,new ZZ),Vu(n,new Dj),n.c.length=0;break;case 3:a=new bt,ZN(this,new KZ),o=vnt(uce(xy(new bn(null,new kn(this.c.a.b,16)),new lYe(this))),new JZ),Is(Fi(new bn(null,new kn(this.c.a.b,16)),new eee),new Oet(o,a)),ZN(this,new tee),Vu(a,new nee),a.c.length=0;break;default:throw ue(new NQe)}},h.b=0,I(aa,"EdgeAwareScanlineConstraintCalculation",1759),D(1760,1,Ld,KZ),h.Lb=function(t){return De(l(t,60).g,154)},h.Fb=function(t){return this===t},h.Mb=function(t){return De(l(t,60).g,154)},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$0$Type",1760),D(1761,1,{},lYe),h.Ye=function(t){return Lkn(this.a,l(t,60))},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$1$Type",1761),D(1769,1,QU,Let),h.de=function(){FA(this.a,this.b,-1)},h.b=0,I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$10$Type",1769),D(1771,1,Ld,WZ),h.Lb=function(t){return De(l(t,60).g,154)},h.Fb=function(t){return this===t},h.Mb=function(t){return De(l(t,60).g,154)},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$11$Type",1771),D(1772,1,fr,Lj),h.Cd=function(t){l(t,380).de()},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$12$Type",1772),D(1773,1,ti,Mj),h.Mb=function(t){return De(l(t,60).g,10)},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$13$Type",1773),D(1775,1,fr,hYe),h.Cd=function(t){Y4n(this.a,l(t,60))},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$14$Type",1775),D(1774,1,QU,Net),h.de=function(){FA(this.b,this.a,-1)},h.a=0,I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$15$Type",1774),D(1776,1,Ld,YZ),h.Lb=function(t){return De(l(t,60).g,10)},h.Fb=function(t){return this===t},h.Mb=function(t){return De(l(t,60).g,10)},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$16$Type",1776),D(1777,1,fr,XZ),h.Cd=function(t){l(t,380).de()},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$17$Type",1777),D(1778,1,{},fYe),h.Ye=function(t){return Mkn(this.a,l(t,60))},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$18$Type",1778),D(1779,1,{},QZ),h.We=function(){return 0},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$19$Type",1779),D(1762,1,{},JZ),h.We=function(){return 0},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$2$Type",1762),D(1781,1,fr,Det),h.Cd=function(t){egn(this.a,this.b,l(t,316))},h.a=0,I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$20$Type",1781),D(1780,1,QU,Iet),h.de=function(){I2t(this.a,this.b,-1)},h.b=0,I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$21$Type",1780),D(1782,1,Ld,ZZ),h.Lb=function(t){return l(t,60),!0},h.Fb=function(t){return this===t},h.Mb=function(t){return l(t,60),!0},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$22$Type",1782),D(1783,1,fr,Dj),h.Cd=function(t){l(t,380).de()},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$23$Type",1783),D(1763,1,ti,eee),h.Mb=function(t){return De(l(t,60).g,10)},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$3$Type",1763),D(1765,1,fr,Oet),h.Cd=function(t){tgn(this.a,this.b,l(t,60))},h.a=0,I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$4$Type",1765),D(1764,1,QU,Pet),h.de=function(){FA(this.b,this.a,-1)},h.a=0,I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$5$Type",1764),D(1766,1,Ld,tee),h.Lb=function(t){return l(t,60),!0},h.Fb=function(t){return this===t},h.Mb=function(t){return l(t,60),!0},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$6$Type",1766),D(1767,1,fr,nee),h.Cd=function(t){l(t,380).de()},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$7$Type",1767),D(1768,1,ti,ree),h.Mb=function(t){return De(l(t,60).g,154)},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$8$Type",1768),D(1770,1,fr,Fet),h.Cd=function(t){wwn(this.a,this.b,l(t,60))},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$9$Type",1770),D(1586,1,ts,nrt),h.Kf=function(t,n){FLn(this,l(t,36),n)};var Q8t;I(aa,"HorizontalGraphCompactor",1586),D(1587,1,{},dYe),h.ff=function(t,n){var r,a,o;return q6e(t,n)||(r=G5(t),a=G5(n),r&&r.k==(Zn(),Us)||a&&a.k==(Zn(),Us))?0:(o=l(Q(this.a.a,(ft(),$6)),312),zhn(o,r?r.k:(Zn(),Aa),a?a.k:(Zn(),Aa)))},h.gf=function(t,n){var r,a,o;return q6e(t,n)?1:(r=G5(t),a=G5(n),o=l(Q(this.a.a,(ft(),$6)),312),Oye(o,r?r.k:(Zn(),Aa),a?a.k:(Zn(),Aa)))},I(aa,"HorizontalGraphCompactor/1",1587),D(1588,1,{},Ij),h.ef=function(t,n){return p_(),t.a.i==0},I(aa,"HorizontalGraphCompactor/lambda$0$Type",1588),D(1589,1,{},gYe),h.ef=function(t,n){return Cpn(this.a,t,n)},I(aa,"HorizontalGraphCompactor/lambda$1$Type",1589),D(1730,1,{},Glt);var J8t,Z8t;I(aa,"LGraphToCGraphTransformer",1730),D(1738,1,ti,wS),h.Mb=function(t){return t!=null},I(aa,"LGraphToCGraphTransformer/0methodref$nonNull$Type",1738),D(1731,1,{},iee),h.Kb=function(t){return u0(),xc(Q(l(l(t,60).g,10),(ft(),zi)))},I(aa,"LGraphToCGraphTransformer/lambda$0$Type",1731),D(1732,1,{},see),h.Kb=function(t){return u0(),r1t(l(l(t,60).g,154))},I(aa,"LGraphToCGraphTransformer/lambda$1$Type",1732),D(1741,1,ti,Oj),h.Mb=function(t){return u0(),De(l(t,60).g,10)},I(aa,"LGraphToCGraphTransformer/lambda$10$Type",1741),D(1742,1,fr,aee),h.Cd=function(t){Mpn(l(t,60))},I(aa,"LGraphToCGraphTransformer/lambda$11$Type",1742),D(1743,1,ti,oee),h.Mb=function(t){return u0(),De(l(t,60).g,154)},I(aa,"LGraphToCGraphTransformer/lambda$12$Type",1743),D(1747,1,fr,cee),h.Cd=function(t){o4n(l(t,60))},I(aa,"LGraphToCGraphTransformer/lambda$13$Type",1747),D(1744,1,fr,pYe),h.Cd=function(t){Nln(this.a,l(t,8))},h.a=0,I(aa,"LGraphToCGraphTransformer/lambda$14$Type",1744),D(1745,1,fr,bYe),h.Cd=function(t){Bln(this.a,l(t,116))},h.a=0,I(aa,"LGraphToCGraphTransformer/lambda$15$Type",1745),D(1746,1,fr,mYe),h.Cd=function(t){Pln(this.a,l(t,8))},h.a=0,I(aa,"LGraphToCGraphTransformer/lambda$16$Type",1746),D(1748,1,{},uee),h.Kb=function(t){return u0(),new bn(null,new vw(new hr(dr(qs(l(t,10)).a.Kc(),new j))))},I(aa,"LGraphToCGraphTransformer/lambda$17$Type",1748),D(1749,1,ti,lee),h.Mb=function(t){return u0(),Do(l(t,18))},I(aa,"LGraphToCGraphTransformer/lambda$18$Type",1749),D(1750,1,fr,vYe),h.Cd=function(t){Qvn(this.a,l(t,18))},I(aa,"LGraphToCGraphTransformer/lambda$19$Type",1750),D(1734,1,fr,wYe),h.Cd=function(t){Tbn(this.a,l(t,154))},I(aa,"LGraphToCGraphTransformer/lambda$2$Type",1734),D(1751,1,{},hee),h.Kb=function(t){return u0(),new bn(null,new kn(l(t,30).a,16))},I(aa,"LGraphToCGraphTransformer/lambda$20$Type",1751),D(1752,1,{},Nj),h.Kb=function(t){return u0(),new bn(null,new vw(new hr(dr(qs(l(t,10)).a.Kc(),new j))))},I(aa,"LGraphToCGraphTransformer/lambda$21$Type",1752),D(1753,1,{},fee),h.Kb=function(t){return u0(),l(Q(l(t,18),(ft(),fv)),15)},I(aa,"LGraphToCGraphTransformer/lambda$22$Type",1753),D(1754,1,ti,Pj),h.Mb=function(t){return qhn(l(t,15))},I(aa,"LGraphToCGraphTransformer/lambda$23$Type",1754),D(1755,1,fr,yYe),h.Cd=function(t){vkn(this.a,l(t,15))},I(aa,"LGraphToCGraphTransformer/lambda$24$Type",1755),D(1733,1,fr,Ret),h.Cd=function(t){xmn(this.a,this.b,l(t,154))},I(aa,"LGraphToCGraphTransformer/lambda$3$Type",1733),D(1735,1,{},dee),h.Kb=function(t){return u0(),new bn(null,new kn(l(t,30).a,16))},I(aa,"LGraphToCGraphTransformer/lambda$4$Type",1735),D(1736,1,{},gee),h.Kb=function(t){return u0(),new bn(null,new vw(new hr(dr(qs(l(t,10)).a.Kc(),new j))))},I(aa,"LGraphToCGraphTransformer/lambda$5$Type",1736),D(1737,1,{},pee),h.Kb=function(t){return u0(),l(Q(l(t,18),(ft(),fv)),15)},I(aa,"LGraphToCGraphTransformer/lambda$6$Type",1737),D(1739,1,fr,xYe),h.Cd=function(t){Dkn(this.a,l(t,15))},I(aa,"LGraphToCGraphTransformer/lambda$8$Type",1739),D(1740,1,fr,jet),h.Cd=function(t){ahn(this.a,this.b,l(t,154))},I(aa,"LGraphToCGraphTransformer/lambda$9$Type",1740),D(1729,1,{},yS),h.cf=function(t){var n,r,a,o,f;for(this.a=t,this.d=new jie,this.c=We(z_e,Rn,125,this.a.a.a.c.length,0,1),this.b=0,r=new G(this.a.a.a);r.a=te&&(vt(f,pt(L)),Me=b.Math.max(Me,$e[L-1]-B),w+=J,fe+=$e[L-1]-fe,B=$e[L-1],J=E[L]),J=b.Math.max(J,E[L]),++L;w+=J}V=b.Math.min(1/Me,1/n.b/w),V>a&&(a=V,r=f)}return r},h.pg=function(){return!1},I(Od,"MSDCutIndexHeuristic",816),D(1683,1,ts,Fee),h.Kf=function(t,n){$An(l(t,36),n)},I(Od,"SingleEdgeGraphWrapper",1683),D(232,22,{3:1,34:1,22:1,232:1},E_);var O6,IT,OT,h4,qL,N6,NT=Fr(ou,"CenterEdgeLabelPlacementStrategy",232,Hr,Cvn,_0n),hxt;D(431,22,{3:1,34:1,22:1,431:1},N3e);var lLe,S1e,hLe=Fr(ou,"ConstraintCalculationStrategy",431,Hr,Upn,A0n),fxt;D(322,22,{3:1,34:1,22:1,322:1,188:1,196:1},wse),h.dg=function(){return $pt(this)},h.qg=function(){return $pt(this)};var mB,HL,fLe,dLe=Fr(ou,"CrossingMinimizationStrategy",322,Hr,j2n,L0n),dxt;D(351,22,{3:1,34:1,22:1,351:1},yse);var gLe,_1e,YK,pLe=Fr(ou,"CuttingStrategy",351,Hr,$2n,M0n),gxt;D(348,22,{3:1,34:1,22:1,348:1,188:1,196:1},uO),h.dg=function(){return M2t(this)},h.qg=function(){return M2t(this)};var bLe,A1e,PT,L1e,BT,mLe=Fr(ou,"CycleBreakingStrategy",348,Hr,Hmn,D0n),pxt;D(428,22,{3:1,34:1,22:1,428:1},P3e);var XK,vLe,wLe=Fr(ou,"DirectionCongruency",428,Hr,Vpn,I0n),bxt;D(460,22,{3:1,34:1,22:1,460:1},xse);var FT,M1e,P6,mxt=Fr(ou,"EdgeConstraint",460,Hr,z2n,j0n),vxt;D(283,22,{3:1,34:1,22:1,283:1},T_);var D1e,I1e,O1e,N1e,QK,P1e,yLe=Fr(ou,"EdgeLabelSideSelection",283,Hr,kvn,$0n),wxt;D(488,22,{3:1,34:1,22:1,488:1},B3e);var JK,xLe,kLe=Fr(ou,"EdgeStraighteningStrategy",488,Hr,Jpn,z0n),yxt;D(281,22,{3:1,34:1,22:1,281:1},C_);var B1e,ELe,TLe,ZK,CLe,SLe,_Le=Fr(ou,"FixedAlignment",281,Hr,Evn,R0n),xxt;D(282,22,{3:1,34:1,22:1,282:1},S_);var ALe,LLe,MLe,DLe,VL,ILe,OLe=Fr(ou,"GraphCompactionStrategy",282,Hr,Tvn,O0n),kxt;D(259,22,{3:1,34:1,22:1,259:1},uy);var RT,eW,jT,vf,UL,tW,$T,B6,nW,GL,F1e=Fr(ou,"GraphProperties",259,Hr,c3n,N0n),Ext;D(299,22,{3:1,34:1,22:1,299:1},kse);var vB,R1e,j1e,$1e=Fr(ou,"GreedySwitchType",299,Hr,q2n,P0n),Txt;D(311,22,{3:1,34:1,22:1,311:1},Ese);var Ux,wB,F6,Cxt=Fr(ou,"InLayerConstraint",311,Hr,H2n,B0n),Sxt;D(429,22,{3:1,34:1,22:1,429:1},F3e);var z1e,NLe,PLe=Fr(ou,"InteractiveReferencePoint",429,Hr,Hpn,F0n),_xt,BLe,Gx,c3,rW,FLe,RLe,iW,jLe,yB,sW,KL,Kx,pp,q1e,aW,Wc,$Le,jb,Lu,H1e,V1e,xB,hv,u3,Wx,zLe,Yx,kB,f4,o1,$f,U1e,R6,Ki,zi,qLe,HLe,VLe,ULe,GLe,G1e,oW,jl,l3,K1e,Xx,WL,W1,j6,h3,$6,z6,zT,fv,KLe,W1e,Y1e,Qx;D(171,22,{3:1,34:1,22:1,171:1},lO);var YL,$b,XL,d4,EB,WLe=Fr(ou,"LayerConstraint",171,Hr,Umn,q0n),Axt;D(859,1,Pf,Yre),h.hf=function(t){sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,VEe),""),"Direction Congruency"),"Specifies how drawings of the same graph with different layout directions compare to each other: either a natural reading direction is preserved or the drawings are rotated versions of each other."),iMe),(g2(),ps)),wLe),un((r1(),Pn))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,UEe),""),"Feedback Edges"),"Whether feedback edges should be highlighted by routing around the nodes."),(Hn(),!1)),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,fG),""),"Interactive Reference Point"),"Determines which point of a node is considered by interactive layout phases."),lMe),ps),PLe),un(Pn)))),Qs(t,fG,zhe,k9t),Qs(t,fG,pL,x9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,GEe),""),"Merge Edges"),"Edges that have no ports are merged so they touch the connected nodes at the same points. When this option is disabled, one port is created for each edge directly connected to a node. When it is enabled, all such incoming edges share an input port, and all outgoing edges share an output port."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,KEe),""),"Merge Hierarchy-Crossing Edges"),"If hierarchical layout is active, hierarchy-crossing edges use as few hierarchical ports as possible. They are broken by the algorithm, with hierarchical ports inserted as required. Usually, one such port is created for each edge at each hierarchy crossing point. With this option set to true, we try to create as few hierarchical ports as possible in the process. In particular, all edges that form a hyperedge can share a port."),!0),ya),Ns),un(Pn)))),sn(t,new Xt(Nun(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,WEe),""),"Allow Non-Flow Ports To Switch Sides"),"Specifies whether non-flow ports may switch sides if their node's port constraints are either FIXED_SIDE or FIXED_ORDER. A non-flow port is a port on a side that is not part of the currently configured layout flow. For instance, given a left-to-right layout direction, north and south ports would be considered non-flow ports. Further note that the underlying criterium whether to switch sides or not solely relies on the minimization of edge crossings. Hence, edge length and other aesthetics criteria are not addressed."),!1),ya),Ns),un(yv)),he(le(zt,1),dt,2,6,["org.eclipse.elk.layered.northOrSouthPort"])))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,YEe),""),"Port Sorting Strategy"),"Only relevant for nodes with FIXED_SIDE port constraints. Determines the way a node's ports are distributed on the sides of a node if their order is not prescribed. The option is set on parent nodes."),vMe),ps),_De),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,XEe),""),"Thoroughness"),"How much effort should be spent to produce a nice layout."),pt(7)),Tc),ro),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,QEe),""),"Add Unnecessary Bendpoints"),"Adds bend points even if an edge does not change direction. If true, each long edge dummy will contribute a bend point to its edges and hierarchy-crossing edges will always get a bend point where they cross hierarchy boundaries. By default, bend points are only added where an edge changes direction."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,JEe),""),"Generate Position and Layer IDs"),"If enabled position id and layer id are generated, which are usually only used internally when setting the interactiveLayout option. This option should be specified on the root node."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,zhe),"cycleBreaking"),"Cycle Breaking Strategy"),"Strategy for cycle breaking. Cycle breaking looks for cycles in the graph and determines which edges to reverse to break the cycles. Reversed edges will end up pointing to the opposite direction of regular edges (that is, reversed edges will point left if edges usually point right)."),rMe),ps),mLe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,qP),hfe),"Node Layering Strategy"),"Strategy for node layering."),dMe),ps),pDe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,ZEe),hfe),"Layer Constraint"),"Determines a constraint on the placement of the node regarding the layering."),hMe),ps),WLe),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,eTe),hfe),"Layer Choice Constraint"),"Allows to set a constraint regarding the layer placement of a node. Let i be the value of teh constraint. Assumed the drawing has n layers and i < n. If set to i, it expresses that the node should be placed in i-th layer. Should i>=n be true then the node is placed in the last layer of the drawing. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),null),Tc),ro),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,tTe),hfe),"Layer ID"),"Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),pt(-1)),Tc),ro),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,qhe),J3t),"Upper Bound On Width [MinWidth Layerer]"),"Defines a loose upper bound on the width of the MinWidth layerer. If set to '-1' multiple values are tested and the best result is selected."),pt(4)),Tc),ro),un(Pn)))),Qs(t,qhe,qP,L9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Hhe),J3t),"Upper Layer Estimation Scaling Factor [MinWidth Layerer]"),"Multiplied with Upper Bound On Width for defining an upper bound on the width of layers which haven't been determined yet, but whose maximum width had been (roughly) estimated by the MinWidth algorithm. Compensates for too high estimations. If set to '-1' multiple values are tested and the best result is selected."),pt(2)),Tc),ro),un(Pn)))),Qs(t,Hhe,qP,D9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Vhe),Z3t),"Node Promotion Strategy"),"Reduces number of dummy nodes after layering phase (if possible)."),fMe),ps),TDe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Uhe),Z3t),"Max Node Promotion Iterations"),"Limits the number of iterations for node promotion."),pt(0)),Tc),ro),un(Pn)))),Qs(t,Uhe,Vhe,null),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Ghe),"layering.coffmanGraham"),"Layer Bound"),"The maximum number of nodes allowed per layer."),pt(Ii)),Tc),ro),un(Pn)))),Qs(t,Ghe,qP,T9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,pL),gT),"Crossing Minimization Strategy"),"Strategy for crossing minimization."),nMe),ps),dLe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,nTe),gT),"Force Node Model Order"),"The node order given by the model does not change to produce a better layout. E.g. if node A is before node B in the model this is not changed during crossing minimization. This assumes that the node model order is already respected before crossing minimization. This can be achieved by setting considerModelOrder.strategy to NODES_AND_EDGES."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Khe),gT),"Hierarchical Sweepiness"),"How likely it is to use cross-hierarchy (1) vs bottom-up (-1)."),.1),fo),ta),un(Pn)))),Qs(t,Khe,CG,Wxt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Whe),gT),"Semi-Interactive Crossing Minimization"),"Preserves the order of nodes within a layer but still minimizes crossings between edges connecting long edge dummies. Derives the desired order from positions specified by the 'org.eclipse.elk.position' layout option. Requires a crossing minimization strategy that is able to process 'in-layer' constraints."),!1),ya),Ns),un(Pn)))),Qs(t,Whe,pL,e9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,rTe),gT),"In Layer Predecessor of"),"Allows to set a constraint which specifies of which node the current node is the predecessor. If set to 's' then the node is the predecessor of 's' and is in the same layer"),null),J6),zt),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,iTe),gT),"In Layer Successor of"),"Allows to set a constraint which specifies of which node the current node is the successor. If set to 's' then the node is the successor of 's' and is in the same layer"),null),J6),zt),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,sTe),gT),"Position Choice Constraint"),"Allows to set a constraint regarding the position placement of a node in a layer. Assumed the layer in which the node placed includes n other nodes and i < n. If set to i, it expresses that the node should be placed at the i-th position. Should i>=n be true then the node is placed at the last position in the layer. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),null),Tc),ro),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,aTe),gT),"Position ID"),"Position within a layer that was determined by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),pt(-1)),Tc),ro),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,oTe),eyt),"Greedy Switch Activation Threshold"),"By default it is decided automatically if the greedy switch is activated or not. The decision is based on whether the size of the input graph (without dummy nodes) is smaller than the value of this option. A '0' enforces the activation."),pt(40)),Tc),ro),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Yhe),eyt),"Greedy Switch Crossing Minimization"),"Greedy Switch strategy for crossing minimization. The greedy switch heuristic is executed after the regular crossing minimization as a post-processor. Note that if 'hierarchyHandling' is set to 'INCLUDE_CHILDREN', the 'greedySwitchHierarchical.type' option must be used."),tMe),ps),$1e),un(Pn)))),Qs(t,Yhe,pL,Gxt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,dG),"crossingMinimization.greedySwitchHierarchical"),"Greedy Switch Crossing Minimization (hierarchical)"),"Activates the greedy switch heuristic in case hierarchical layout is used. The differences to the non-hierarchical case (see 'greedySwitch.type') are: 1) greedy switch is inactive by default, 3) only the option value set on the node at which hierarchical layout starts is relevant, and 2) if it's activated by the user, it properly addresses hierarchy-crossing edges."),eMe),ps),$1e),un(Pn)))),Qs(t,dG,pL,Hxt),Qs(t,dG,CG,Vxt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,k6),tyt),"Node Placement Strategy"),"Strategy for node placement."),mMe),ps),wDe),un(Pn)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,gG),tyt),"Favor Straight Edges Over Balancing"),"Favor straight edges over a balanced node placement. The default behavior is determined automatically based on the used 'edgeRouting'. For an orthogonal style it is set to true, for all other styles to false."),ya),Ns),un(Pn)))),Qs(t,gG,k6,q9t),Qs(t,gG,k6,H9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Xhe),nyt),"BK Edge Straightening"),"Specifies whether the Brandes Koepf node placer tries to increase the number of straight edges at the expense of diagram size. There is a subtle difference to the 'favorStraightEdges' option, which decides whether a balanced placement of the nodes is desired, or not. In bk terms this means combining the four alignments into a single balanced one, or not. This option on the other hand tries to straighten additional edges during the creation of each of the four alignments."),gMe),ps),kLe),un(Pn)))),Qs(t,Xhe,k6,R9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Qhe),nyt),"BK Fixed Alignment"),"Tells the BK node placer to use a certain alignment (out of its four) instead of the one producing the smallest height, or the combination of all four."),pMe),ps),_Le),un(Pn)))),Qs(t,Qhe,k6,$9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Jhe),"nodePlacement.linearSegments"),"Linear Segments Deflection Dampening"),"Dampens the movement of nodes to keep the diagram from getting too large."),.3),fo),ta),un(Pn)))),Qs(t,Jhe,k6,U9t),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,Zhe),"nodePlacement.networkSimplex"),"Node Flexibility"),"Aims at shorter and straighter edges. Two configurations are possible: (a) allow ports to move freely on the side they are assigned to (the order is always defined beforehand), (b) additionally allow to enlarge a node wherever it helps. If this option is not configured for a node, the 'nodeFlexibility.default' value is used, which is specified for the node's parent."),ps),mde),un(ha)))),Qs(t,Zhe,k6,Y9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,efe),"nodePlacement.networkSimplex.nodeFlexibility"),"Node Flexibility Default"),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),bMe),ps),mde),un(Pn)))),Qs(t,efe,k6,W9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,cTe),ryt),"Self-Loop Distribution"),"Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE."),oMe),ps),MDe),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,uTe),ryt),"Self-Loop Ordering"),"Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE."),cMe),ps),DDe),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,pG),"edgeRouting.splines"),"Spline Routing Mode"),"Specifies the way control points are assembled for each individual edge. CONSERVATIVE ensures that edges are properly routed around the nodes but feels rather orthogonal at times. SLOPPY uses fewer control points to obtain curvier edge routes but may result in edges overlapping nodes."),uMe),ps),ODe),un(Pn)))),Qs(t,pG,HP,h9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,bG),"edgeRouting.splines.sloppy"),"Sloppy Spline Layer Spacing Factor"),"Spacing factor for routing area between layers when using sloppy spline routing."),.2),fo),ta),un(Pn)))),Qs(t,bG,HP,d9t),Qs(t,bG,pG,g9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,tfe),"edgeRouting.polyline"),"Sloped Edge Zone Width"),"Width of the strip to the left and to the right of each layer where the polyline edge router is allowed to refrain from ensuring that edges are routed horizontally. This prevents awkward bend points for nodes that extent almost to the edge of their layer."),2),fo),ta),un(Pn)))),Qs(t,tfe,HP,o9t),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,lTe),U1),"Spacing Base Value"),"An optional base value for all other layout options of the 'spacing' group. It can be used to conveniently alter the overall 'spaciousness' of the drawing. Whenever an explicit value is set for the other layout options, this base value will have no effect. The base value is not inherited, i.e. it must be set for each hierarchical node."),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,hTe),U1),"Edge Node Between Layers Spacing"),"The spacing to be preserved between nodes and edges that are routed next to the node's layer. For the spacing between nodes and edges that cross the node's layer 'spacing.edgeNode' is used."),10),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,fTe),U1),"Edge Edge Between Layer Spacing"),"Spacing to be preserved between pairs of edges that are routed between the same pair of layers. Note that 'spacing.edgeEdge' is used for the spacing between pairs of edges crossing the same layer."),10),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,dTe),U1),"Node Node Between Layers Spacing"),"The spacing to be preserved between any pair of nodes of two adjacent layers. Note that 'spacing.nodeNode' is used for the spacing between nodes within the layer itself."),20),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,gTe),TTe),"Direction Priority"),"Defines how important it is to have a certain edge point into the direction of the overall layout. This option is evaluated during the cycle breaking phase."),pt(0)),Tc),ro),un(zd)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,pTe),TTe),"Shortness Priority"),"Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase."),pt(0)),Tc),ro),un(zd)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,bTe),TTe),"Straightness Priority"),"Defines how important it is to keep an edge straight, i.e. aligned with one of the two axes. This option is evaluated during node placement."),pt(0)),Tc),ro),un(zd)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,nfe),CTe),w3t),"Tries to further compact components (disconnected sub-graphs)."),!1),ya),Ns),un(Pn)))),Qs(t,nfe,lL,!0),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,mTe),iyt),"Post Compaction Strategy"),syt),XLe),ps),OLe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,vTe),iyt),"Post Compaction Constraint Calculation"),syt),YLe),ps),hLe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,mG),STe),"High Degree Node Treatment"),"Makes room around high degree nodes to place leafs and trees."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,rfe),STe),"High Degree Node Threshold"),"Whether a node is considered to have a high degree."),pt(16)),Tc),ro),un(Pn)))),Qs(t,rfe,mG,!0),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,ife),STe),"High Degree Node Maximum Tree Height"),"Maximum height of a subtree connected to a high degree node to be moved to separate layers."),pt(5)),Tc),ro),un(Pn)))),Qs(t,ife,mG,!0),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,fp),_Te),"Graph Wrapping Strategy"),"For certain graphs and certain prescribed drawing areas it may be desirable to split the laid out graph into chunks that are placed side by side. The edges that connect different chunks are 'wrapped' around from the end of one chunk to the start of the other chunk. The points between the chunks are referred to as 'cuts'."),xMe),ps),FDe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,vG),_Te),"Additional Wrapped Edges Spacing"),"To visually separate edges that are wrapped from regularly routed edges an additional spacing value can be specified in form of this layout option. The spacing is added to the regular edgeNode spacing."),10),fo),ta),un(Pn)))),Qs(t,vG,fp,ckt),Qs(t,vG,fp,ukt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,wG),_Te),"Correction Factor for Wrapping"),"At times and for certain types of graphs the executed wrapping may produce results that are consistently biased in the same fashion: either wrapping to often or to rarely. This factor can be used to correct the bias. Internally, it is simply multiplied with the 'aspect ratio' layout option."),1),fo),ta),un(Pn)))),Qs(t,wG,fp,hkt),Qs(t,wG,fp,fkt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,bL),ayt),"Cutting Strategy"),"The strategy by which the layer indexes are determined at which the layering crumbles into chunks."),yMe),ps),pLe),un(Pn)))),Qs(t,bL,fp,vkt),Qs(t,bL,fp,wkt),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,sfe),ayt),"Manually Specified Cuts"),"Allows the user to specify her own cuts for a certain graph."),X1),mf),un(Pn)))),Qs(t,sfe,bL,gkt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,afe),"wrapping.cutting.msd"),"MSD Freedom"),"The MSD cutting strategy starts with an initial guess on the number of chunks the graph should be split into. The freedom specifies how much the strategy may deviate from this guess. E.g. if an initial number of 3 is computed, a freedom of 1 allows 2, 3, and 4 cuts."),wMe),Tc),ro),un(Pn)))),Qs(t,afe,bL,bkt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,yG),oyt),"Validification Strategy"),"When wrapping graphs, one can specify indices that are not allowed as split points. The validification strategy makes sure every computed split point is allowed."),kMe),ps),BDe),un(Pn)))),Qs(t,yG,fp,Dkt),Qs(t,yG,fp,Ikt),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,xG),oyt),"Valid Indices for Wrapping"),null),X1),mf),un(Pn)))),Qs(t,xG,fp,Akt),Qs(t,xG,fp,Lkt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,kG),ATe),"Improve Cuts"),"For general graphs it is important that not too many edges wrap backwards. Thus a compromise between evenly-distributed cuts and the total number of cut edges is sought."),!0),ya),Ns),un(Pn)))),Qs(t,kG,fp,Ekt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,EG),ATe),"Distance Penalty When Improving Cuts"),null),2),fo),ta),un(Pn)))),Qs(t,EG,fp,xkt),Qs(t,EG,kG,!0),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,ofe),ATe),"Improve Wrapped Edges"),"The initial wrapping is performed in a very simple way. As a consequence, edges that wrap from one chunk to another may be unnecessarily long. Activating this option tries to shorten such edges."),!0),ya),Ns),un(Pn)))),Qs(t,ofe,fp,Ckt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,wTe),ffe),"Edge Label Side Selection"),"Method to decide on edge label sides."),aMe),ps),yLe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,yTe),ffe),"Edge Center Label Placement Strategy"),"Determines in which layer center labels of long edges should be placed."),sMe),ps),NT),rs(Pn,he(le(xg,1),it,170,0,[S2]))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,TG),mL),"Consider Model Order"),"Preserves the order of nodes and edges in the model file if this does not lead to additional edge crossings. Depending on the strategy this is not always possible since the node and edge order might be conflicting."),ZLe),ps),SDe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,xTe),mL),"Consider Port Order"),"If disabled the port order of output ports is derived from the edge order and input ports are ordered by their incoming connections. If enabled all ports are ordered by the port model order."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,kTe),mL),"No Model Order"),"Set on a node to not set a model order for this node even though it is a real node."),!1),ya),Ns),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,cfe),mL),"Consider Model Order for Components"),"If set to NONE the usual ordering strategy (by cumulative node priority and size of nodes) is used. INSIDE_PORT_SIDES orders the components with external ports only inside the groups with the same port side. FORCE_MODEL_ORDER enforces the mode order on components. This option might produce bad alignments and sub optimal drawings in terms of used area since the ordering should be respected."),QLe),ps),mAe),un(Pn)))),Qs(t,cfe,lL,null),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,ETe),mL),"Long Edge Ordering Strategy"),"Indicates whether long edges are sorted under, over, or equal to nodes that have no connection to a previous layer in a left-to-right or right-to-left layout. Under and over changes to right and left in a vertical layout."),JLe),ps),mDe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,ufe),mL),"Crossing Counter Node Order Influence"),"Indicates with what percentage (1 for 100%) violations of the node model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal node order. Defaults to no influence (0)."),0),fo),ta),un(Pn)))),Qs(t,ufe,TG,null),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,lfe),mL),"Crossing Counter Port Order Influence"),"Indicates with what percentage (1 for 100%) violations of the port model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal port order. Defaults to no influence (0)."),0),fo),ta),un(Pn)))),Qs(t,lfe,TG,null),Twt((new Xre,t))};var Lxt,Mxt,Dxt,YLe,Ixt,XLe,Oxt,QLe,Nxt,Pxt,Bxt,JLe,Fxt,Rxt,jxt,ZLe,$xt,zxt,qxt,eMe,Hxt,Vxt,Uxt,tMe,Gxt,Kxt,Wxt,Yxt,Xxt,Qxt,Jxt,Zxt,e9t,t9t,nMe,n9t,rMe,r9t,iMe,i9t,sMe,s9t,aMe,a9t,o9t,c9t,oMe,u9t,cMe,l9t,uMe,h9t,f9t,d9t,g9t,p9t,b9t,m9t,v9t,w9t,y9t,lMe,x9t,k9t,E9t,T9t,C9t,S9t,hMe,_9t,A9t,L9t,M9t,D9t,I9t,O9t,fMe,N9t,dMe,P9t,B9t,F9t,gMe,R9t,j9t,pMe,$9t,z9t,q9t,H9t,V9t,U9t,G9t,K9t,bMe,W9t,Y9t,X9t,mMe,Q9t,vMe,J9t,Z9t,ekt,tkt,nkt,rkt,ikt,skt,akt,okt,ckt,ukt,lkt,hkt,fkt,dkt,gkt,pkt,wMe,bkt,mkt,yMe,vkt,wkt,ykt,xkt,kkt,Ekt,Tkt,Ckt,Skt,xMe,_kt,Akt,Lkt,Mkt,kMe,Dkt,Ikt;I(ou,"LayeredMetaDataProvider",859),D(998,1,Pf,Xre),h.hf=function(t){Twt(t)};var Rd,X1e,cW,QL,uW,EMe,lW,g4,hW,TMe,CMe,fW,Q1e,yg,J1e,f3,SMe,TB,Z1e,_Me,Okt,Nkt,Pkt,dW,ede,JL,dv,Bkt,Rh,AMe,LMe,gW,tde,jd,pW,bp,MMe,DMe,IMe,nde,rde,OMe,x2,ide,NMe,p4,PMe,BMe,FMe,bW,b4,gv,RMe,jMe,cc,$Me,Fkt,Qu,mW,zMe,qMe,HMe,zb,pv,vW,VMe,UMe,wW,d3,GMe,sde,ZL,KMe,g3,eM,yW,bv,ade,qT,xW,mv,WMe,YMe,XMe,HT,QMe,Rkt,jkt,$kt,zkt,p3,m4,Ms,k2,qkt,v4,JMe,VT,ZMe,w4,Hkt,UT,eDe,Jx,Vkt,Ukt,CB,ode,tDe,SB,x0,q6,H6,b3,vv,kW,y4,cde,GT,KT,m3,V6,ude,_B,tM,nM,Gkt,Kkt,Wkt,nDe,Ykt,lde,rDe,iDe,sDe,aDe,hde,oDe,cDe,uDe,lDe,fde,EW;I(ou,"LayeredOptions",998),D(999,1,{},Ree),h.sf=function(){var t;return t=new qQe,t},h.tf=function(t){},I(ou,"LayeredOptions/LayeredFactory",999),D(1391,1,{}),h.a=0;var Xkt;I(Uc,"ElkSpacings/AbstractSpacingsBuilder",1391),D(792,1391,{},D8e);var TW,Qkt;I(ou,"LayeredSpacings/LayeredSpacingsBuilder",792),D(265,22,{3:1,34:1,22:1,265:1,188:1,196:1},M5),h.dg=function(){return jbt(this)},h.qg=function(){return jbt(this)};var WT,dde,YT,hDe,fDe,dDe,CW,gde,gDe,pDe=Fr(ou,"LayeringStrategy",265,Hr,Rwn,H0n),Jkt;D(390,22,{3:1,34:1,22:1,390:1},Tse);var pde,bDe,SW,mDe=Fr(ou,"LongEdgeOrderingStrategy",390,Hr,V2n,V0n),Zkt;D(203,22,{3:1,34:1,22:1,203:1},bq);var U6,G6,_W,bde,mde=Fr(ou,"NodeFlexibility",203,Hr,Zbn,U0n),eEt;D(323,22,{3:1,34:1,22:1,323:1,188:1,196:1},hO),h.dg=function(){return L2t(this)},h.qg=function(){return L2t(this)};var rM,vde,wde,iM,vDe,wDe=Fr(ou,"NodePlacementStrategy",323,Hr,Vmn,G0n),tEt;D(243,22,{3:1,34:1,22:1,243:1},ly);var yDe,v3,x4,AB,xDe,kDe,LB,EDe,AW,LW,TDe=Fr(ou,"NodePromotionStrategy",243,Hr,u3n,K0n),nEt;D(284,22,{3:1,34:1,22:1,284:1},mq);var CDe,E2,yde,xde,SDe=Fr(ou,"OrderingStrategy",284,Hr,emn,W0n),rEt;D(430,22,{3:1,34:1,22:1,430:1},R3e);var kde,Ede,_De=Fr(ou,"PortSortingStrategy",430,Hr,Gpn,Y0n),iEt;D(463,22,{3:1,34:1,22:1,463:1},Cse);var $l,zu,sM,sEt=Fr(ou,"PortType",463,Hr,U2n,X0n),aEt;D(387,22,{3:1,34:1,22:1,387:1},Sse);var ADe,Tde,LDe,MDe=Fr(ou,"SelfLoopDistributionStrategy",387,Hr,G2n,Q0n),oEt;D(349,22,{3:1,34:1,22:1,349:1},_se);var Cde,MB,Sde,DDe=Fr(ou,"SelfLoopOrderingStrategy",349,Hr,K2n,J0n),cEt;D(312,1,{312:1},xvt),I(ou,"Spacings",312),D(350,22,{3:1,34:1,22:1,350:1},Ase);var _de,IDe,aM,ODe=Fr(ou,"SplineRoutingMode",350,Hr,W2n,Z0n),uEt;D(352,22,{3:1,34:1,22:1,352:1},Lse);var Ade,NDe,PDe,BDe=Fr(ou,"ValidifyStrategy",352,Hr,Y2n,e1n),lEt;D(388,22,{3:1,34:1,22:1,388:1},Mse);var k4,Lde,XT,FDe=Fr(ou,"WrappingStrategy",388,Hr,X2n,t1n),hEt;D(1398,1,Uo,Ure),h.rg=function(t){return l(t,36),fEt},h.Kf=function(t,n){NLn(this,l(t,36),n)};var fEt;I(LG,"DepthFirstCycleBreaker",1398),D(793,1,Uo,Q4e),h.rg=function(t){return l(t,36),dEt},h.Kf=function(t,n){FIn(this,l(t,36),n)},h.sg=function(t){return l(jt(t,aU(this.d,t.c.length)),10)};var dEt;I(LG,"GreedyCycleBreaker",793),D(1401,793,Uo,$tt),h.sg=function(t){var n,r,a,o;for(o=null,n=Ii,a=new G(t);a.a1&&(Rt(Bt(Q(eo((Sn(0,t.c.length),l(t.c[0],10))),(Nt(),f3))))?q2t(t,this.d,l(this,669)):(Cn(),Vs(t,this.d)),Hft(this.e,t))},h.lg=function(t,n,r,a){var o,f,g,w,E,C,L;for(n!=ast(r,t.length)&&(f=t[n-(r?1:-1)],S6e(this.f,f,r?(qo(),zu):(qo(),$l))),o=t[n][0],L=!a||o.k==(Zn(),Us),C=O1(t[n]),this.vg(C,L,!1,r),g=0,E=new G(C);E.a"),t0?loe(this.a,t[n-1],t[n]):!r&&n1&&(Rt(Bt(Q(eo((Sn(0,t.c.length),l(t.c[0],10))),(Nt(),f3))))?q2t(t,this.d,this):(Cn(),Vs(t,this.d)),Rt(Bt(Q(eo((Sn(0,t.c.length),l(t.c[0],10))),f3)))||Hft(this.e,t))},I(Cl,"ModelOrderBarycenterHeuristic",669),D(1866,1,ii,zYe),h.Ne=function(t,n){return O9n(this.a,l(t,10),l(n,10))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Cl,"ModelOrderBarycenterHeuristic/lambda$0$Type",1866),D(1423,1,Uo,Jre),h.rg=function(t){var n;return l(t,36),n=Oq(LEt),fi(n,(uo(),bu),(vo(),RK)),n},h.Kf=function(t,n){bpn((l(t,36),n))};var LEt;I(Cl,"NoCrossingMinimizer",1423),D(809,413,uCe,o3e),h.tg=function(t,n,r){var a,o,f,g,w,E,C,L,B,z,V;switch(B=this.g,r.g){case 1:{for(o=0,f=0,L=new G(t.j);L.a1&&(o.j==(Ct(),ar)?this.b[t]=!0:o.j==er&&t>0&&(this.b[t-1]=!0))},h.f=0,I(bg,"AllCrossingsCounter",1861),D(595,1,{},TV),h.b=0,h.d=0,I(bg,"BinaryIndexedTree",595),D(532,1,{},IO);var $De,DW;I(bg,"CrossingsCounter",532),D(1950,1,ii,qYe),h.Ne=function(t,n){return qdn(this.a,l(t,12),l(n,12))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(bg,"CrossingsCounter/lambda$0$Type",1950),D(1951,1,ii,HYe),h.Ne=function(t,n){return Hdn(this.a,l(t,12),l(n,12))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(bg,"CrossingsCounter/lambda$1$Type",1951),D(1952,1,ii,VYe),h.Ne=function(t,n){return Vdn(this.a,l(t,12),l(n,12))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(bg,"CrossingsCounter/lambda$2$Type",1952),D(1953,1,ii,UYe),h.Ne=function(t,n){return Udn(this.a,l(t,12),l(n,12))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(bg,"CrossingsCounter/lambda$3$Type",1953),D(1954,1,fr,GYe),h.Cd=function(t){Uvn(this.a,l(t,12))},I(bg,"CrossingsCounter/lambda$4$Type",1954),D(1955,1,ti,KYe),h.Mb=function(t){return bln(this.a,l(t,12))},I(bg,"CrossingsCounter/lambda$5$Type",1955),D(1956,1,fr,WYe),h.Cd=function(t){Dtt(this,t)},I(bg,"CrossingsCounter/lambda$6$Type",1956),D(1957,1,fr,qet),h.Cd=function(t){var n;jk(),gb(this.b,(n=this.a,l(t,12),n))},I(bg,"CrossingsCounter/lambda$7$Type",1957),D(839,1,Ld,Xj),h.Lb=function(t){return jk(),ns(l(t,12),(ft(),jl))},h.Fb=function(t){return this===t},h.Mb=function(t){return jk(),ns(l(t,12),(ft(),jl))},I(bg,"CrossingsCounter/lambda$8$Type",839),D(1949,1,{},YYe),I(bg,"HyperedgeCrossingsCounter",1949),D(478,1,{34:1,478:1},Urt),h.Fd=function(t){return V5n(this,l(t,478))},h.b=0,h.c=0,h.e=0,h.f=0;var TOn=I(bg,"HyperedgeCrossingsCounter/Hyperedge",478);D(374,1,{34:1,374:1},CH),h.Fd=function(t){return iTn(this,l(t,374))},h.b=0,h.c=0;var MEt=I(bg,"HyperedgeCrossingsCounter/HyperedgeCorner",374);D(531,22,{3:1,34:1,22:1,531:1},j3e);var cM,uM,DEt=Fr(bg,"HyperedgeCrossingsCounter/HyperedgeCorner/Type",531,Hr,Kpn,r1n),IEt;D(1425,1,Uo,Zre),h.rg=function(t){return l(Q(l(t,36),(ft(),Lu)),21).Hc((Ho(),vf))?OEt:null},h.Kf=function(t,n){p8n(this,l(t,36),n)};var OEt;I(Go,"InteractiveNodePlacer",1425),D(1426,1,Uo,eie),h.rg=function(t){return l(Q(l(t,36),(ft(),Lu)),21).Hc((Ho(),vf))?NEt:null},h.Kf=function(t,n){Z6n(this,l(t,36),n)};var NEt,IW,OW;I(Go,"LinearSegmentsNodePlacer",1426),D(261,1,{34:1,261:1},Pwe),h.Fd=function(t){return Aun(this,l(t,261))},h.Fb=function(t){var n;return De(t,261)?(n=l(t,261),this.b==n.b):!1},h.Hb=function(){return this.b},h.Ib=function(){return"ls"+Tb(this.e)},h.a=0,h.b=0,h.c=-1,h.d=-1,h.g=0;var PEt=I(Go,"LinearSegmentsNodePlacer/LinearSegment",261);D(1428,1,Uo,bst),h.rg=function(t){return l(Q(l(t,36),(ft(),Lu)),21).Hc((Ho(),vf))?BEt:null},h.Kf=function(t,n){AIn(this,l(t,36),n)},h.b=0,h.g=0;var BEt;I(Go,"NetworkSimplexPlacer",1428),D(1447,1,ii,Gee),h.Ne=function(t,n){return ru(l(t,17).a,l(n,17).a)},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Go,"NetworkSimplexPlacer/0methodref$compare$Type",1447),D(1449,1,ii,Kee),h.Ne=function(t,n){return ru(l(t,17).a,l(n,17).a)},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Go,"NetworkSimplexPlacer/1methodref$compare$Type",1449),D(655,1,{655:1},Het);var COn=I(Go,"NetworkSimplexPlacer/EdgeRep",655);D(412,1,{412:1},D5e),h.b=!1;var SOn=I(Go,"NetworkSimplexPlacer/NodeRep",412);D(515,13,{3:1,4:1,20:1,31:1,56:1,13:1,16:1,15:1,59:1,515:1},QQe),I(Go,"NetworkSimplexPlacer/Path",515),D(1429,1,{},Wee),h.Kb=function(t){return l(t,18).d.i.k},I(Go,"NetworkSimplexPlacer/Path/lambda$0$Type",1429),D(1430,1,ti,Yee),h.Mb=function(t){return l(t,273)==(Zn(),Aa)},I(Go,"NetworkSimplexPlacer/Path/lambda$1$Type",1430),D(1431,1,{},Xee),h.Kb=function(t){return l(t,18).d.i},I(Go,"NetworkSimplexPlacer/Path/lambda$2$Type",1431),D(1432,1,ti,XYe),h.Mb=function(t){return Lrt(I1t(l(t,10)))},I(Go,"NetworkSimplexPlacer/Path/lambda$3$Type",1432),D(1433,1,ti,Qee),h.Mb=function(t){return Sdn(l(t,12))},I(Go,"NetworkSimplexPlacer/lambda$0$Type",1433),D(1434,1,fr,Vet),h.Cd=function(t){ohn(this.a,this.b,l(t,12))},I(Go,"NetworkSimplexPlacer/lambda$1$Type",1434),D(1443,1,fr,QYe),h.Cd=function(t){Okn(this.a,l(t,18))},I(Go,"NetworkSimplexPlacer/lambda$10$Type",1443),D(1444,1,{},Jee),h.Kb=function(t){return Sh(),new bn(null,new kn(l(t,30).a,16))},I(Go,"NetworkSimplexPlacer/lambda$11$Type",1444),D(1445,1,fr,JYe),h.Cd=function(t){_Sn(this.a,l(t,10))},I(Go,"NetworkSimplexPlacer/lambda$12$Type",1445),D(1446,1,{},Zee),h.Kb=function(t){return Sh(),pt(l(t,125).e)},I(Go,"NetworkSimplexPlacer/lambda$13$Type",1446),D(1448,1,{},ete),h.Kb=function(t){return Sh(),pt(l(t,125).e)},I(Go,"NetworkSimplexPlacer/lambda$15$Type",1448),D(1450,1,ti,tte),h.Mb=function(t){return Sh(),l(t,412).c.k==(Zn(),Ps)},I(Go,"NetworkSimplexPlacer/lambda$17$Type",1450),D(1451,1,ti,nte),h.Mb=function(t){return Sh(),l(t,412).c.j.c.length>1},I(Go,"NetworkSimplexPlacer/lambda$18$Type",1451),D(1452,1,fr,Tat),h.Cd=function(t){f5n(this.c,this.b,this.d,this.a,l(t,412))},h.c=0,h.d=0,I(Go,"NetworkSimplexPlacer/lambda$19$Type",1452),D(1435,1,{},rte),h.Kb=function(t){return Sh(),new bn(null,new kn(l(t,30).a,16))},I(Go,"NetworkSimplexPlacer/lambda$2$Type",1435),D(1453,1,fr,ZYe),h.Cd=function(t){uhn(this.a,l(t,12))},h.a=0,I(Go,"NetworkSimplexPlacer/lambda$20$Type",1453),D(1454,1,{},ite),h.Kb=function(t){return Sh(),new bn(null,new kn(l(t,30).a,16))},I(Go,"NetworkSimplexPlacer/lambda$21$Type",1454),D(1455,1,fr,eXe),h.Cd=function(t){xhn(this.a,l(t,10))},I(Go,"NetworkSimplexPlacer/lambda$22$Type",1455),D(1456,1,ti,ste),h.Mb=function(t){return Lrt(t)},I(Go,"NetworkSimplexPlacer/lambda$23$Type",1456),D(1457,1,{},ate),h.Kb=function(t){return Sh(),new bn(null,new kn(l(t,30).a,16))},I(Go,"NetworkSimplexPlacer/lambda$24$Type",1457),D(1458,1,ti,tXe),h.Mb=function(t){return Mln(this.a,l(t,10))},I(Go,"NetworkSimplexPlacer/lambda$25$Type",1458),D(1459,1,fr,Uet),h.Cd=function(t){F9n(this.a,this.b,l(t,10))},I(Go,"NetworkSimplexPlacer/lambda$26$Type",1459),D(1460,1,ti,s8),h.Mb=function(t){return Sh(),!Do(l(t,18))},I(Go,"NetworkSimplexPlacer/lambda$27$Type",1460),D(1461,1,ti,Qj),h.Mb=function(t){return Sh(),!Do(l(t,18))},I(Go,"NetworkSimplexPlacer/lambda$28$Type",1461),D(1462,1,{},nXe),h.Ve=function(t,n){return chn(this.a,l(t,30),l(n,30))},I(Go,"NetworkSimplexPlacer/lambda$29$Type",1462),D(1436,1,{},ote),h.Kb=function(t){return Sh(),new bn(null,new vw(new hr(dr(qs(l(t,10)).a.Kc(),new j))))},I(Go,"NetworkSimplexPlacer/lambda$3$Type",1436),D(1437,1,ti,cte),h.Mb=function(t){return Sh(),Rbn(l(t,18))},I(Go,"NetworkSimplexPlacer/lambda$4$Type",1437),D(1438,1,fr,rXe),h.Cd=function(t){BAn(this.a,l(t,18))},I(Go,"NetworkSimplexPlacer/lambda$5$Type",1438),D(1439,1,{},ute),h.Kb=function(t){return Sh(),new bn(null,new kn(l(t,30).a,16))},I(Go,"NetworkSimplexPlacer/lambda$6$Type",1439),D(1440,1,ti,Jj),h.Mb=function(t){return Sh(),l(t,10).k==(Zn(),Ps)},I(Go,"NetworkSimplexPlacer/lambda$7$Type",1440),D(1441,1,{},lte),h.Kb=function(t){return Sh(),new bn(null,new vw(new hr(dr(sp(l(t,10)).a.Kc(),new j))))},I(Go,"NetworkSimplexPlacer/lambda$8$Type",1441),D(1442,1,ti,TS),h.Mb=function(t){return Sh(),Cdn(l(t,18))},I(Go,"NetworkSimplexPlacer/lambda$9$Type",1442),D(1424,1,Uo,tie),h.rg=function(t){return l(Q(l(t,36),(ft(),Lu)),21).Hc((Ho(),vf))?FEt:null},h.Kf=function(t,n){bLn(l(t,36),n)};var FEt;I(Go,"SimpleNodePlacer",1424),D(185,1,{185:1},f6),h.Ib=function(){var t;return t="",this.c==(xd(),w3)?t+=Dx:this.c==T2&&(t+=Mx),this.o==(D1(),wv)?t+=whe:this.o==Y1?t+="UP":t+="BALANCED",t},I(Ib,"BKAlignedLayout",185),D(523,22,{3:1,34:1,22:1,523:1},$3e);var T2,w3,REt=Fr(Ib,"BKAlignedLayout/HDirection",523,Hr,Ypn,i1n),jEt;D(522,22,{3:1,34:1,22:1,522:1},z3e);var wv,Y1,$Et=Fr(Ib,"BKAlignedLayout/VDirection",522,Hr,Xpn,s1n),zEt;D(1699,1,{},Get),I(Ib,"BKAligner",1699),D(1702,1,{},rgt),I(Ib,"BKCompactor",1702),D(663,1,{663:1},hte),h.a=0,I(Ib,"BKCompactor/ClassEdge",663),D(467,1,{467:1},WQe),h.a=null,h.b=0,I(Ib,"BKCompactor/ClassNode",467),D(1427,1,Uo,Xet),h.rg=function(t){return l(Q(l(t,36),(ft(),Lu)),21).Hc((Ho(),vf))?qEt:null},h.Kf=function(t,n){GIn(this,l(t,36),n)},h.d=!1;var qEt;I(Ib,"BKNodePlacer",1427),D(1700,1,{},fte),h.d=0,I(Ib,"NeighborhoodInformation",1700),D(1701,1,ii,iXe),h.Ne=function(t,n){return ywn(this,l(t,42),l(n,42))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Ib,"NeighborhoodInformation/NeighborComparator",1701),D(823,1,{}),I(Ib,"ThresholdStrategy",823),D(1825,823,{},YQe),h.wg=function(t,n,r){return this.a.o==(D1(),Y1)?gs:ia},h.xg=function(){},I(Ib,"ThresholdStrategy/NullThresholdStrategy",1825),D(587,1,{587:1},Qet),h.c=!1,h.d=!1,I(Ib,"ThresholdStrategy/Postprocessable",587),D(1826,823,{},XQe),h.wg=function(t,n,r){var a,o,f;return o=n==r,a=this.a.a[r.p]==n,o||a?(f=t,this.a.c==(xd(),w3)?(o&&(f=vle(this,n,!0)),!isNaN(f)&&!isFinite(f)&&a&&(f=vle(this,r,!1))):(o&&(f=vle(this,n,!0)),!isNaN(f)&&!isFinite(f)&&a&&(f=vle(this,r,!1))),f):t},h.xg=function(){for(var t,n,r,a,o;this.d.b!=0;)o=l(h2n(this.d),587),a=Lmt(this,o),a.a&&(t=a.a,r=Rt(this.a.f[this.a.g[o.b.p].p]),!(!r&&!Do(t)&&t.c.i.c==t.d.i.c)&&(n=N2t(this,o),n||Oln(this.e,o)));for(;this.e.a.c.length!=0;)N2t(this,l(P0t(this.e),587))},I(Ib,"ThresholdStrategy/SimpleThresholdStrategy",1826),D(645,1,{645:1,188:1,196:1},dte),h.dg=function(){return Vft(this)},h.qg=function(){return Vft(this)};var Mde;I(mfe,"EdgeRouterFactory",645),D(1485,1,Uo,nie),h.rg=function(t){return rSn(l(t,36))},h.Kf=function(t,n){ELn(l(t,36),n)};var HEt,VEt,UEt,GEt,KEt,zDe,WEt,YEt;I(mfe,"OrthogonalEdgeRouter",1485),D(1478,1,Uo,Yet),h.rg=function(t){return C8n(l(t,36))},h.Kf=function(t,n){GDn(this,l(t,36),n)};var XEt,QEt,JEt,ZEt,IB,eTt;I(mfe,"PolylineEdgeRouter",1478),D(1479,1,Ld,pte),h.Lb=function(t){return A7e(l(t,10))},h.Fb=function(t){return this===t},h.Mb=function(t){return A7e(l(t,10))},I(mfe,"PolylineEdgeRouter/1",1479),D(1872,1,ti,bte),h.Mb=function(t){return l(t,132).c==(J0(),qb)},I(i1,"HyperEdgeCycleDetector/lambda$0$Type",1872),D(1873,1,{},mte),h.Ze=function(t){return l(t,132).d},I(i1,"HyperEdgeCycleDetector/lambda$1$Type",1873),D(1874,1,ti,vte),h.Mb=function(t){return l(t,132).c==(J0(),qb)},I(i1,"HyperEdgeCycleDetector/lambda$2$Type",1874),D(1875,1,{},wte),h.Ze=function(t){return l(t,132).d},I(i1,"HyperEdgeCycleDetector/lambda$3$Type",1875),D(1876,1,{},yte),h.Ze=function(t){return l(t,132).d},I(i1,"HyperEdgeCycleDetector/lambda$4$Type",1876),D(1877,1,{},gte),h.Ze=function(t){return l(t,132).d},I(i1,"HyperEdgeCycleDetector/lambda$5$Type",1877),D(118,1,{34:1,118:1},xN),h.Fd=function(t){return Lun(this,l(t,118))},h.Fb=function(t){var n;return De(t,118)?(n=l(t,118),this.g==n.g):!1},h.Hb=function(){return this.g},h.Ib=function(){var t,n,r,a;for(t=new Th("{"),a=new G(this.n);a.a"+this.b+" ("+Whn(this.c)+")"},h.d=0,I(i1,"HyperEdgeSegmentDependency",132),D(528,22,{3:1,34:1,22:1,528:1},q3e);var qb,E4,tTt=Fr(i1,"HyperEdgeSegmentDependency/DependencyType",528,Hr,Qpn,a1n),nTt;D(1878,1,{},sXe),I(i1,"HyperEdgeSegmentSplitter",1878),D(1879,1,{},QJe),h.a=0,h.b=0,I(i1,"HyperEdgeSegmentSplitter/AreaRating",1879),D(339,1,{339:1},vae),h.a=0,h.b=0,h.c=0,I(i1,"HyperEdgeSegmentSplitter/FreeArea",339),D(1880,1,ii,a8),h.Ne=function(t,n){return Wfn(l(t,118),l(n,118))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(i1,"HyperEdgeSegmentSplitter/lambda$0$Type",1880),D(1881,1,fr,Cat),h.Cd=function(t){kmn(this.a,this.d,this.c,this.b,l(t,118))},h.b=0,I(i1,"HyperEdgeSegmentSplitter/lambda$1$Type",1881),D(1882,1,{},xte),h.Kb=function(t){return new bn(null,new kn(l(t,118).e,16))},I(i1,"HyperEdgeSegmentSplitter/lambda$2$Type",1882),D(1883,1,{},kte),h.Kb=function(t){return new bn(null,new kn(l(t,118).j,16))},I(i1,"HyperEdgeSegmentSplitter/lambda$3$Type",1883),D(1884,1,{},Ete),h.Ye=function(t){return ze(Ge(t))},I(i1,"HyperEdgeSegmentSplitter/lambda$4$Type",1884),D(664,1,{},Hae),h.a=0,h.b=0,h.c=0,I(i1,"OrthogonalRoutingGenerator",664),D(1703,1,{},Tte),h.Kb=function(t){return new bn(null,new kn(l(t,118).e,16))},I(i1,"OrthogonalRoutingGenerator/lambda$0$Type",1703),D(1704,1,{},Cte),h.Kb=function(t){return new bn(null,new kn(l(t,118).j,16))},I(i1,"OrthogonalRoutingGenerator/lambda$1$Type",1704),D(670,1,{}),I(vfe,"BaseRoutingDirectionStrategy",670),D(1870,670,{},eJe),h.yg=function(t,n,r){var a,o,f,g,w,E,C,L,B,z,V,J,te;if(!(t.r&&!t.q))for(L=n+t.o*r,C=new G(t.n);C.aDd&&(f=L,o=t,a=new lt(B,f),ui(g.a,a),Vw(this,g,o,a,!1),z=t.r,z&&(V=ze(Ge(ff(z.e,0))),a=new lt(V,f),ui(g.a,a),Vw(this,g,o,a,!1),f=n+z.o*r,o=z,a=new lt(V,f),ui(g.a,a),Vw(this,g,o,a,!1)),a=new lt(te,f),ui(g.a,a),Vw(this,g,o,a,!1)))},h.zg=function(t){return t.i.n.a+t.n.a+t.a.a},h.Ag=function(){return Ct(),Dr},h.Bg=function(){return Ct(),Qn},I(vfe,"NorthToSouthRoutingStrategy",1870),D(1871,670,{},tJe),h.yg=function(t,n,r){var a,o,f,g,w,E,C,L,B,z,V,J,te;if(!(t.r&&!t.q))for(L=n-t.o*r,C=new G(t.n);C.aDd&&(f=L,o=t,a=new lt(B,f),ui(g.a,a),Vw(this,g,o,a,!1),z=t.r,z&&(V=ze(Ge(ff(z.e,0))),a=new lt(V,f),ui(g.a,a),Vw(this,g,o,a,!1),f=n-z.o*r,o=z,a=new lt(V,f),ui(g.a,a),Vw(this,g,o,a,!1)),a=new lt(te,f),ui(g.a,a),Vw(this,g,o,a,!1)))},h.zg=function(t){return t.i.n.a+t.n.a+t.a.a},h.Ag=function(){return Ct(),Qn},h.Bg=function(){return Ct(),Dr},I(vfe,"SouthToNorthRoutingStrategy",1871),D(1869,670,{},nJe),h.yg=function(t,n,r){var a,o,f,g,w,E,C,L,B,z,V,J,te;if(!(t.r&&!t.q))for(L=n+t.o*r,C=new G(t.n);C.aDd&&(f=L,o=t,a=new lt(f,B),ui(g.a,a),Vw(this,g,o,a,!0),z=t.r,z&&(V=ze(Ge(ff(z.e,0))),a=new lt(f,V),ui(g.a,a),Vw(this,g,o,a,!0),f=n+z.o*r,o=z,a=new lt(f,V),ui(g.a,a),Vw(this,g,o,a,!0)),a=new lt(f,te),ui(g.a,a),Vw(this,g,o,a,!0)))},h.zg=function(t){return t.i.n.b+t.n.b+t.a.b},h.Ag=function(){return Ct(),ar},h.Bg=function(){return Ct(),er},I(vfe,"WestToEastRoutingStrategy",1869),D(828,1,{},Ske),h.Ib=function(){return Tb(this.a)},h.b=0,h.c=!1,h.d=!1,h.f=0,I(Zy,"NubSpline",828),D(418,1,{418:1},dbt,rot),I(Zy,"NubSpline/PolarCP",418),D(1480,1,Uo,Ydt),h.rg=function(t){return gxn(l(t,36))},h.Kf=function(t,n){hIn(this,l(t,36),n)};var rTt,iTt,sTt,aTt,oTt;I(Zy,"SplineEdgeRouter",1480),D(274,1,{274:1},WH),h.Ib=function(){return this.a+" ->("+this.c+") "+this.b},h.c=0,I(Zy,"SplineEdgeRouter/Dependency",274),D(465,22,{3:1,34:1,22:1,465:1},H3e);var Hb,K6,cTt=Fr(Zy,"SplineEdgeRouter/SideToProcess",465,Hr,r2n,o1n),uTt;D(1481,1,ti,Ste),h.Mb=function(t){return GA(),!l(t,131).o},I(Zy,"SplineEdgeRouter/lambda$0$Type",1481),D(1482,1,{},_te),h.Ze=function(t){return GA(),l(t,131).v+1},I(Zy,"SplineEdgeRouter/lambda$1$Type",1482),D(1483,1,fr,Jet),h.Cd=function(t){Ldn(this.a,this.b,l(t,42))},I(Zy,"SplineEdgeRouter/lambda$2$Type",1483),D(1484,1,fr,Zet),h.Cd=function(t){Mdn(this.a,this.b,l(t,42))},I(Zy,"SplineEdgeRouter/lambda$3$Type",1484),D(131,1,{34:1,131:1},_pt,Ike),h.Fd=function(t){return Iun(this,l(t,131))},h.b=0,h.e=!1,h.f=0,h.g=0,h.j=!1,h.k=!1,h.n=0,h.o=!1,h.p=!1,h.q=!1,h.s=0,h.u=0,h.v=0,h.F=0,I(Zy,"SplineSegment",131),D(468,1,{468:1},Ate),h.a=0,h.b=!1,h.c=!1,h.d=!1,h.e=!1,h.f=0,I(Zy,"SplineSegment/EdgeInformation",468),D(1198,1,{},CS),I(gp,LEe,1198),D(1199,1,ii,Lte),h.Ne=function(t,n){return Xkn(l(t,121),l(n,121))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(gp,E3t,1199),D(1197,1,{},dZe),I(gp,"MrTree",1197),D(405,22,{3:1,34:1,22:1,405:1,188:1,196:1},vq),h.dg=function(){return Wpt(this)},h.qg=function(){return Wpt(this)};var NW,lM,hM,fM,qDe=Fr(gp,"TreeLayoutPhases",405,Hr,smn,c1n),lTt;D(1112,205,tv,Hrt),h.rf=function(t,n){var r,a,o,f,g,w,E,C;for(Rt(Bt(at(t,(Hc(),dIe))))||KO((r=new Yv((aw(),new Jv(t))),r)),g=n.eh(xfe),g.Ug("build tGraph",1),w=(E=new nN,pc(E,t),rt(E,(Qi(),gM),t),C=new Pr,H_n(t,E,C),cAn(t,E,C),E),g.Vg(),g=n.eh(xfe),g.Ug("Split graph",1),f=Y_n(this.a,w),g.Vg(),o=new G(f);o.a"+Bm(this.c):"e_"+es(this)},I(vL,"TEdge",65),D(121,137,{3:1,121:1,96:1,137:1},nN),h.Ib=function(){var t,n,r,a,o;for(o=null,a=Rr(this.b,0);a.b!=a.d.c;)r=l(Br(a),40),o+=(r.c==null||r.c.length==0?"n_"+r.g:"n_"+r.c)+` +`;for(n=Rr(this.a,0);n.b!=n.d.c;)t=l(Br(n),65),o+=(t.b&&t.c?Bm(t.b)+"->"+Bm(t.c):"e_"+es(t))+` +`;return o};var _On=I(vL,"TGraph",121);D(643,508,{3:1,508:1,643:1,96:1,137:1}),I(vL,"TShape",643),D(40,643,{3:1,508:1,40:1,643:1,96:1,137:1},xce),h.Ib=function(){return Bm(this)};var PW=I(vL,"TNode",40);D(236,1,hg,Hg),h.Jc=function(t){to(this,t)},h.Kc=function(){var t;return t=Rr(this.a.d,0),new C5(t)},I(vL,"TNode/2",236),D(329,1,Oa,C5),h.Nb=function(t){Za(this,t)},h.Pb=function(){return l(Br(this.a),65).c},h.Ob=function(){return QI(this.a)},h.Qb=function(){Yoe(this.a)},I(vL,"TNode/2/1",329),D(1923,1,ts,Bte),h.Kf=function(t,n){zIn(this,l(t,121),n)},I(Su,"CompactionProcessor",1923),D(1924,1,ii,lXe),h.Ne=function(t,n){return A3n(this.a,l(t,40),l(n,40))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Su,"CompactionProcessor/lambda$0$Type",1924),D(1925,1,ti,ttt),h.Mb=function(t){return Npn(this.b,this.a,l(t,42))},h.a=0,h.b=0,I(Su,"CompactionProcessor/lambda$1$Type",1925),D(1934,1,ii,o8),h.Ne=function(t,n){return Cgn(l(t,40),l(n,40))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Su,"CompactionProcessor/lambda$10$Type",1934),D(1935,1,ii,Zj),h.Ne=function(t,n){return jhn(l(t,40),l(n,40))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Su,"CompactionProcessor/lambda$11$Type",1935),D(1936,1,ii,Fte),h.Ne=function(t,n){return Sgn(l(t,40),l(n,40))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Su,"CompactionProcessor/lambda$12$Type",1936),D(1926,1,ti,hXe),h.Mb=function(t){return khn(this.a,l(t,42))},h.a=0,I(Su,"CompactionProcessor/lambda$2$Type",1926),D(1927,1,ti,fXe),h.Mb=function(t){return Ehn(this.a,l(t,42))},h.a=0,I(Su,"CompactionProcessor/lambda$3$Type",1927),D(1928,1,ti,pI),h.Mb=function(t){return l(t,40).c.indexOf(DG)==-1},I(Su,"CompactionProcessor/lambda$4$Type",1928),D(1929,1,{},dXe),h.Kb=function(t){return Bbn(this.a,l(t,40))},h.a=0,I(Su,"CompactionProcessor/lambda$5$Type",1929),D(1930,1,{},gXe),h.Kb=function(t){return Vvn(this.a,l(t,40))},h.a=0,I(Su,"CompactionProcessor/lambda$6$Type",1930),D(1931,1,ii,pXe),h.Ne=function(t,n){return tvn(this.a,l(t,240),l(n,240))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Su,"CompactionProcessor/lambda$7$Type",1931),D(1932,1,ii,bXe),h.Ne=function(t,n){return nvn(this.a,l(t,40),l(n,40))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Su,"CompactionProcessor/lambda$8$Type",1932),D(1933,1,ii,Rte),h.Ne=function(t,n){return $hn(l(t,40),l(n,40))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Su,"CompactionProcessor/lambda$9$Type",1933),D(1921,1,ts,jte),h.Kf=function(t,n){FSn(l(t,121),n)},I(Su,"DirectionProcessor",1921),D(1913,1,ts,qrt),h.Kf=function(t,n){aAn(this,l(t,121),n)},I(Su,"FanProcessor",1913),D(1937,1,ts,$te),h.Kf=function(t,n){CSn(l(t,121),n)},I(Su,"GraphBoundsProcessor",1937),D(1938,1,{},zte),h.Ye=function(t){return l(t,40).e.a},I(Su,"GraphBoundsProcessor/lambda$0$Type",1938),D(1939,1,{},qte),h.Ye=function(t){return l(t,40).e.b},I(Su,"GraphBoundsProcessor/lambda$1$Type",1939),D(1940,1,{},Hte),h.Ye=function(t){return sln(l(t,40))},I(Su,"GraphBoundsProcessor/lambda$2$Type",1940),D(1941,1,{},Vte),h.Ye=function(t){return iln(l(t,40))},I(Su,"GraphBoundsProcessor/lambda$3$Type",1941),D(262,22,{3:1,34:1,22:1,262:1,196:1},ow),h.dg=function(){switch(this.g){case 0:return new bJe;case 1:return new qrt;case 2:return new pJe;case 3:return new n$;case 4:return new Ute;case 8:return new e$;case 5:return new jte;case 6:return new i$;case 7:return new Bte;case 9:return new $te;case 10:return new Kte;default:throw ue(new Yn(Fhe+(this.f!=null?this.f:""+this.g)))}};var HDe,VDe,UDe,GDe,KDe,WDe,YDe,XDe,QDe,JDe,Dde,AOn=Fr(Su,Rhe,262,Hr,Bft,u1n),hTt;D(1920,1,ts,e$),h.Kf=function(t,n){RDn(l(t,121),n)},I(Su,"LevelCoordinatesProcessor",1920),D(1918,1,ts,Ute),h.Kf=function(t,n){sCn(this,l(t,121),n)},h.a=0,I(Su,"LevelHeightProcessor",1918),D(1919,1,hg,t$),h.Jc=function(t){to(this,t)},h.Kc=function(){return Cn(),Mk(),AT},I(Su,"LevelHeightProcessor/1",1919),D(1914,1,ts,pJe),h.Kf=function(t,n){wSn(this,l(t,121),n)},I(Su,"LevelProcessor",1914),D(1915,1,ti,Gte),h.Mb=function(t){return Rt(Bt(Q(l(t,40),(Qi(),Vb))))},I(Su,"LevelProcessor/lambda$0$Type",1915),D(1916,1,ts,n$),h.Kf=function(t,n){nkn(this,l(t,121),n)},h.a=0,I(Su,"NeighborsProcessor",1916),D(1917,1,hg,r$),h.Jc=function(t){to(this,t)},h.Kc=function(){return Cn(),Mk(),AT},I(Su,"NeighborsProcessor/1",1917),D(1922,1,ts,i$),h.Kf=function(t,n){sAn(this,l(t,121),n)},h.a=0,I(Su,"NodePositionProcessor",1922),D(1912,1,ts,bJe),h.Kf=function(t,n){$Ln(this,l(t,121),n)},I(Su,"RootProcessor",1912),D(1942,1,ts,Kte),h.Kf=function(t,n){B6n(l(t,121),n)},I(Su,"Untreeifyer",1942),D(392,22,{3:1,34:1,22:1,392:1},Ose);var OB,Ide,ZDe,eIe=Fr(UP,"EdgeRoutingMode",392,Hr,J2n,l1n),fTt,NB,QT,Ode,tIe,nIe,Nde,Pde,rIe,Bde,iIe,Fde,dM,Rde,BW,FW,k0,c1,JT,gM,pM,C2,sIe,dTt,jde,Vb,PB,BB;D(862,1,Pf,rie),h.hf=function(t){sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,fCe),""),pyt),"Turns on Tree compaction which decreases the size of the whole tree by placing nodes of multiple levels in one large level"),(Hn(),!1)),(g2(),ya)),Ns),un((r1(),Pn))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,dCe),""),"Edge End Texture Length"),"Should be set to the length of the texture at the end of an edge. This value can be used to improve the Edge Routing."),7),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,gCe),""),"Tree Level"),"The index for the tree level the node is in"),pt(0)),Tc),ro),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,pCe),""),pyt),"When set to a positive number this option will force the algorithm to place the node to the specified position within the trees layer if weighting is set to constraint"),pt(-1)),Tc),ro),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,bCe),""),"Weighting of Nodes"),"Which weighting to use when computing a node order."),cIe),ps),yIe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,mCe),""),"Edge Routing Mode"),"Chooses an Edge Routing algorithm."),aIe),ps),eIe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,vCe),""),"Search Order"),"Which search order to use when computing a spanning tree."),oIe),ps),kIe),un(Pn)))),iwt((new v8,t))};var gTt,pTt,bTt,aIe,mTt,vTt,oIe,wTt,yTt,cIe;I(UP,"MrTreeMetaDataProvider",862),D(1006,1,Pf,v8),h.hf=function(t){iwt(t)};var xTt,uIe,lIe,y3,hIe,fIe,$de,kTt,ETt,TTt,CTt,STt,_Tt,ATt,dIe,gIe,pIe,LTt,W6,RW,bIe,MTt,mIe,zde,DTt,ITt,OTt,vIe,NTt,$d,wIe;I(UP,"MrTreeOptions",1006),D(1007,1,{},Wte),h.sf=function(){var t;return t=new Hrt,t},h.tf=function(t){},I(UP,"MrTreeOptions/MrtreeFactory",1007),D(353,22,{3:1,34:1,22:1,353:1},wq);var qde,jW,Hde,Vde,yIe=Fr(UP,"OrderWeighting",353,Hr,amn,h1n),PTt;D(433,22,{3:1,34:1,22:1,433:1},V3e);var xIe,Ude,kIe=Fr(UP,"TreeifyingOrder",433,Hr,t2n,f1n),BTt;D(1486,1,Uo,aie),h.rg=function(t){return l(t,121),FTt},h.Kf=function(t,n){b3n(this,l(t,121),n)};var FTt;I("org.eclipse.elk.alg.mrtree.p1treeify","DFSTreeifyer",1486),D(1487,1,Uo,dk),h.rg=function(t){return l(t,121),RTt},h.Kf=function(t,n){ESn(this,l(t,121),n)};var RTt;I(pT,"NodeOrderer",1487),D(1494,1,{},pwe),h.td=function(t){return Yit(t)},I(pT,"NodeOrderer/0methodref$lambda$6$Type",1494),D(1488,1,ti,ane),h.Mb=function(t){return ux(),Rt(Bt(Q(l(t,40),(Qi(),Vb))))},I(pT,"NodeOrderer/lambda$0$Type",1488),D(1489,1,ti,one),h.Mb=function(t){return ux(),l(Q(l(t,40),(Hc(),W6)),17).a<0},I(pT,"NodeOrderer/lambda$1$Type",1489),D(1490,1,ti,vXe),h.Mb=function(t){return Uwn(this.a,l(t,40))},I(pT,"NodeOrderer/lambda$2$Type",1490),D(1491,1,ti,mXe),h.Mb=function(t){return jbn(this.a,l(t,40))},I(pT,"NodeOrderer/lambda$3$Type",1491),D(1492,1,ii,cne),h.Ne=function(t,n){return gwn(l(t,40),l(n,40))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(pT,"NodeOrderer/lambda$4$Type",1492),D(1493,1,ti,une),h.Mb=function(t){return ux(),l(Q(l(t,40),(Qi(),Pde)),17).a!=0},I(pT,"NodeOrderer/lambda$5$Type",1493),D(1495,1,Uo,sie),h.rg=function(t){return l(t,121),jTt},h.Kf=function(t,n){I_n(this,l(t,121),n)},h.b=0;var jTt;I("org.eclipse.elk.alg.mrtree.p3place","NodePlacer",1495),D(1496,1,Uo,iie),h.rg=function(t){return l(t,121),$Tt},h.Kf=function(t,n){d_n(l(t,121),n)};var $Tt,LOn=I(vh,"EdgeRouter",1496);D(1498,1,ii,sne),h.Ne=function(t,n){return ru(l(t,17).a,l(n,17).a)},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"EdgeRouter/0methodref$compare$Type",1498),D(1503,1,{},Yte),h.Ye=function(t){return ze(Ge(t))},I(vh,"EdgeRouter/1methodref$doubleValue$Type",1503),D(1505,1,ii,a$),h.Ne=function(t,n){return Yi(ze(Ge(t)),ze(Ge(n)))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"EdgeRouter/2methodref$compare$Type",1505),D(1507,1,ii,Xte),h.Ne=function(t,n){return Yi(ze(Ge(t)),ze(Ge(n)))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"EdgeRouter/3methodref$compare$Type",1507),D(1509,1,{},s$),h.Ye=function(t){return ze(Ge(t))},I(vh,"EdgeRouter/4methodref$doubleValue$Type",1509),D(1511,1,ii,Qte),h.Ne=function(t,n){return Yi(ze(Ge(t)),ze(Ge(n)))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"EdgeRouter/5methodref$compare$Type",1511),D(1513,1,ii,bI),h.Ne=function(t,n){return Yi(ze(Ge(t)),ze(Ge(n)))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"EdgeRouter/6methodref$compare$Type",1513),D(1497,1,{},Jte),h.Kb=function(t){return tp(),l(Q(l(t,40),(Hc(),$d)),17)},I(vh,"EdgeRouter/lambda$0$Type",1497),D(1508,1,{},Zte),h.Kb=function(t){return Zhn(l(t,40))},I(vh,"EdgeRouter/lambda$11$Type",1508),D(1510,1,{},ntt),h.Kb=function(t){return _dn(this.b,this.a,l(t,40))},h.a=0,h.b=0,I(vh,"EdgeRouter/lambda$13$Type",1510),D(1512,1,{},rtt),h.Kb=function(t){return efn(this.b,this.a,l(t,40))},h.a=0,h.b=0,I(vh,"EdgeRouter/lambda$15$Type",1512),D(1514,1,ii,ene),h.Ne=function(t,n){return f6n(l(t,65),l(n,65))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"EdgeRouter/lambda$17$Type",1514),D(1515,1,ii,tne),h.Ne=function(t,n){return d6n(l(t,65),l(n,65))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"EdgeRouter/lambda$18$Type",1515),D(1516,1,ii,nne),h.Ne=function(t,n){return p6n(l(t,65),l(n,65))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"EdgeRouter/lambda$19$Type",1516),D(1499,1,ti,wXe),h.Mb=function(t){return b2n(this.a,l(t,40))},h.a=0,I(vh,"EdgeRouter/lambda$2$Type",1499),D(1517,1,ii,o$),h.Ne=function(t,n){return g6n(l(t,65),l(n,65))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"EdgeRouter/lambda$20$Type",1517),D(1500,1,ii,rne),h.Ne=function(t,n){return ddn(l(t,40),l(n,40))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"EdgeRouter/lambda$3$Type",1500),D(1501,1,ii,ine),h.Ne=function(t,n){return gdn(l(t,40),l(n,40))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"EdgeRouter/lambda$4$Type",1501),D(1502,1,{},lne),h.Kb=function(t){return tfn(l(t,40))},I(vh,"EdgeRouter/lambda$5$Type",1502),D(1504,1,{},itt),h.Kb=function(t){return Adn(this.b,this.a,l(t,40))},h.a=0,h.b=0,I(vh,"EdgeRouter/lambda$7$Type",1504),D(1506,1,{},stt),h.Kb=function(t){return nfn(this.b,this.a,l(t,40))},h.a=0,h.b=0,I(vh,"EdgeRouter/lambda$9$Type",1506),D(675,1,{675:1},Fdt),h.e=0,h.f=!1,h.g=!1,I(vh,"MultiLevelEdgeNodeNodeGap",675),D(1943,1,ii,hne),h.Ne=function(t,n){return S2n(l(t,240),l(n,240))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"MultiLevelEdgeNodeNodeGap/lambda$0$Type",1943),D(1944,1,ii,fne),h.Ne=function(t,n){return _2n(l(t,240),l(n,240))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"MultiLevelEdgeNodeNodeGap/lambda$1$Type",1944);var Y6;D(501,22,{3:1,34:1,22:1,501:1,188:1,196:1},U3e),h.dg=function(){return E1t(this)},h.qg=function(){return E1t(this)};var $W,X6,EIe=Fr(wCe,"RadialLayoutPhases",501,Hr,Wpn,d1n),zTt;D(1113,205,tv,fZe),h.rf=function(t,n){var r,a,o,f,g,w;if(r=cbt(this,t),n.Ug("Radial layout",r.c.length),Rt(Bt(at(t,(Sb(),NIe))))||KO((a=new Yv((aw(),new Jv(t))),a)),w=mxn(t),Hi(t,(H5(),Y6),w),!w)throw ue(new Yn("The given graph is not a tree!"));for(o=ze(Ge(at(t,HW))),o==0&&(o=qpt(t)),Hi(t,HW,o),g=new G(cbt(this,t));g.a=3)for(ot=l(Oe($e,0),27),St=l(Oe($e,1),27),f=0;f+2<$e.i;)if(Ze=ot,ot=St,St=l(Oe($e,f+2),27),Ze.f>=ot.f+St.f+L||St.f>=Ze.f+ot.f+L){cn=!0;break}else++f;else cn=!0;if(!cn){for(z=$e.i,w=new or($e);w.e!=w.i.gc();)g=l(gr(w),27),Hi(g,(pi(),XB),pt(z)),--z;Rmt(t,new L8),n.Vg();return}for(r=(qO(this.a),X0(this.a,(WV(),RB),l(at(t,uOe),188)),X0(this.a,VW,l(at(t,rOe),188)),X0(this.a,rge,l(at(t,aOe),188)),uye(this.a,(Bn=new Xs,fi(Bn,RB,(sU(),age)),fi(Bn,VW,sge),Rt(Bt(at(t,tOe)))&&fi(Bn,RB,ige),Bn)),bP(this.a,t)),C=1/r.c.length,J=new G(r);J.a0&&K0t((Xn(n-1,t.length),t.charCodeAt(n-1)),N3t);)--n;if(a>=n)throw ue(new Yn("The given string does not contain any numbers."));if(o=Gy((Ga(a,n,t.length),t.substr(a,n-a)),`,|;|\r| +`),o.length!=2)throw ue(new Yn("Exactly two numbers are expected, "+o.length+" were found."));try{this.a=jy($y(o[0])),this.b=jy($y(o[1]))}catch(f){throw f=bs(f),De(f,130)?(r=f,ue(new Yn(P3t+r))):ue(f)}},h.Ib=function(){return"("+this.a+","+this.b+")"},h.a=0,h.b=0;var Ea=I($P,"KVector",8);D(75,67,{3:1,4:1,20:1,31:1,56:1,16:1,67:1,15:1,75:1,423:1},bl,Gz,frt),h.Pc=function(){return Oyn(this)},h.cg=function(t){var n,r,a,o,f,g;a=Gy(t,`,|;|\\(|\\)|\\[|\\]|\\{|\\}| | | +`),Ch(this);try{for(r=0,f=0,o=0,g=0;r0&&(f%2==0?o=jy(a[r]):g=jy(a[r]),f>0&&f%2!=0&&ui(this,new lt(o,g)),++f),++r}catch(w){throw w=bs(w),De(w,130)?(n=w,ue(new Yn("The given string does not match the expected format for vectors."+n))):ue(w)}},h.Ib=function(){var t,n,r;for(t=new Th("("),n=Rr(this,0);n.b!=n.d.c;)r=l(Br(n),8),hi(t,r.a+","+r.b),n.b!=n.d.c&&(t.a+="; ");return(t.a+=")",t).a};var GOe=I($P,"KVectorChain",75);D(255,22,{3:1,34:1,22:1,255:1},__);var Sge,eY,tY,HB,VB,nY,KOe=Fr(nh,"Alignment",255,Hr,Mvn,F1n),xSt;D(991,1,Pf,fie),h.hf=function(t){xmt(t)};var WOe,_ge,kSt,YOe,XOe,ESt,QOe,TSt,CSt,JOe,ZOe,SSt;I(nh,"BoxLayouterOptions",991),D(992,1,{},ek),h.sf=function(){var t;return t=new jne,t},h.tf=function(t){},I(nh,"BoxLayouterOptions/BoxFactory",992),D(298,22,{3:1,34:1,22:1,298:1},A_);var EM,Age,TM,CM,SM,Lge,Mge=Fr(nh,"ContentAlignment",298,Hr,Dvn,R1n),_St;D(699,1,Pf,uz),h.hf=function(t){sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,Byt),""),"Layout Algorithm"),"Select a specific layout algorithm."),(g2(),J6)),zt),un((r1(),Pn))))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,Fyt),""),"Resolved Layout Algorithm"),"Meta data associated with the selected algorithm."),X1),IOn),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,qTe),""),"Alignment"),"Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm."),eNe),ps),KOe),un(ha)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,Ox),""),"Aspect Ratio"),"The desired aspect ratio of the drawing, that is the quotient of width by height."),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,tSe),""),"Bend Points"),"A fixed list of bend points for the edge. This is used by the 'Fixed Layout' algorithm to specify a pre-defined routing for an edge. The vector chain must include the source point, any bend points, and the target point, so it must have at least two points."),X1),GOe),un(zd)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,SG),""),"Content Alignment"),"Specifies how the content of a node are aligned. Each node can individually control the alignment of its contents. I.e. if a node should be aligned top left in its parent node, the parent node should specify that option."),nNe),t9),Mge),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,VP),""),"Debug Mode"),"Whether additional debug information shall be generated."),(Hn(),!1)),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,gfe),""),kEe),"Overall direction of edges: horizontal (right / left) or vertical (down / up)."),rNe),ps),LM),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,HP),""),"Edge Routing"),"What kind of edge routing style should be applied for the content of a parent node. Algorithms may also set this option to single edges in order to mark them as splines. The bend point list of edges with this option set to SPLINES must be interpreted as control points for a piecewise cubic spline."),aNe),ps),Vge),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,ZCe),""),"Expand Nodes"),"If active, nodes are expanded to fill the area of their parent."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,CG),""),"Hierarchy Handling"),"Determines whether separate layout runs are triggered for different compound nodes in a hierarchical graph. Setting a node's hierarchy handling to `INCLUDE_CHILDREN` will lay out that node and all of its descendants in a single layout run, until a descendant is encountered which has its hierarchy handling set to `SEPARATE_CHILDREN`. In general, `SEPARATE_CHILDREN` will ensure that a new layout run is triggered for a node with that setting. Including multiple levels of hierarchy in a single layout run may allow cross-hierarchical edges to be laid out properly. If the root node is set to `INHERIT` (or not set at all), the default behavior is `SEPARATE_CHILDREN`."),uNe),ps),YNe),rs(Pn,he(le(xg,1),it,170,0,[ha]))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Xw),""),"Padding"),"The padding to be left to a parent element's border when placing child elements. This can also serve as an output option of a layout algorithm if node size calculation is setup appropriately."),vNe),X1),wAe),rs(Pn,he(le(xg,1),it,170,0,[ha]))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,hL),""),"Interactive"),"Whether the algorithm should be run in interactive mode for the content of a parent node. What this means exactly depends on how the specific algorithm interprets this option. Usually in the interactive mode algorithms try to modify the current layout as little as possible."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,AG),""),"interactive Layout"),"Whether the graph should be changeable interactively and by setting constraints"),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,fL),""),"Omit Node Micro Layout"),"Node micro layout comprises the computation of node dimensions (if requested), the placement of ports and their labels, and the placement of node labels. The functionality is implemented independent of any specific layout algorithm and shouldn't have any negative impact on the layout algorithm's performance itself. Yet, if any unforeseen behavior occurs, this option allows to deactivate the micro layout."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Nhe),""),"Port Constraints"),"Defines constraints of the position of the ports of a node."),ENe),ps),JNe),un(ha)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,_G),""),"Position"),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),X1),Ea),rs(ha,he(le(xg,1),it,170,0,[yv,S2]))))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,NP),""),"Priority"),"Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used."),Tc),ro),rs(ha,he(le(xg,1),it,170,0,[zd]))))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,oG),""),"Randomization Seed"),"Seed used for pseudo-random number generators to control the layout algorithm. If the value is 0, the seed shall be determined pseudo-randomly (e.g. from the system time)."),Tc),ro),un(Pn)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,lL),""),"Separate Connected Components"),"Whether each connected component should be processed separately."),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,ZTe),""),"Junction Points"),"This option is not used as option, but as output of the layout algorithms. It is attached to edges and determines the points where junction symbols should be drawn in order to represent hyperedges with orthogonal routing. Whether such points are computed depends on the chosen layout algorithm and edge routing style. The points are put into the vector chain with no specific order."),lNe),X1),GOe),un(zd)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,nCe),""),"Comment Box"),"Whether the node should be regarded as a comment box instead of a regular node. In that case its placement should be similar to how labels are handled. Any edges incident to a comment box specify to which graph elements the comment is related."),!1),ya),Ns),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,rCe),""),"Hypernode"),"Whether the node should be handled as a hypernode."),!1),ya),Ns),un(ha)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,sOn),""),"Label Manager"),"Label managers can shorten labels upon a layout algorithm's request."),X1),FOn),rs(Pn,he(le(xg,1),it,170,0,[S2]))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,sCe),""),"Margins"),"Margins define additional space around the actual bounds of a graph element. For instance, ports or labels being placed on the outside of a node's border might introduce such a margin. The margin is used to guarantee non-overlap of other graph elements with those ports or labels."),hNe),X1),vAe),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,$Te),""),"No Layout"),"No layout is done for the associated element. This is used to mark parts of a diagram to avoid their inclusion in the layout graph, or to mark parts of the layout graph to prevent layout engines from processing them. If you wish to exclude the contents of a compound node from automatic layout, while the node itself is still considered on its own layer, use the 'Fixed Layout' algorithm for that node."),!1),ya),Ns),rs(ha,he(le(xg,1),it,170,0,[zd,yv,S2]))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Ryt),""),"Scale Factor"),"The scaling factor to be applied to the corresponding node in recursive layout. It causes the corresponding node's size to be adjusted, and its ports and labels to be sized and placed accordingly after the layout of that node has been determined (and before the node itself and its siblings are arranged). The scaling is not reverted afterwards, so the resulting layout graph contains the adjusted size and position data. This option is currently not supported if 'Layout Hierarchy' is set."),1),fo),ta),un(ha)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,jyt),""),"Child Area Width"),"The width of the area occupied by the laid out children of a node."),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,$yt),""),"Child Area Height"),"The height of the area occupied by the laid out children of a node."),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,PP),""),Dyt),"Turns topdown layout on and off. If this option is enabled, hierarchical layout will be computed first for the root node and then for its children recursively. Layouts are then scaled down to fit the area provided by their parents. Graphs must follow a certain structure for topdown layout to work properly. {@link TopdownNodeTypes.PARALLEL_NODE} nodes must have children of type {@link TopdownNodeTypes.HIERARCHICAL_NODE} and must define {@link topdown.hierarchicalNodeWidth} and {@link topdown.hierarchicalNodeAspectRatio} for their children. Furthermore they need to be laid out using an algorithm that is a {@link TopdownLayoutProvider}. Hierarchical nodes can also be parents of other hierarchical nodes and can optionally use a {@link TopdownSizeApproximator} to dynamically set sizes during topdown layout. In this case {@link topdown.hierarchicalNodeWidth} and {@link topdown.hierarchicalNodeAspectRatio} should be set on the node itself rather than the parent. The values are then used by the size approximator as base values. Hierarchical nodes require the layout option {@link nodeSize.fixedGraphSize} to be true to prevent the algorithm used there from resizing the hierarchical node. This option is not supported if 'Hierarchy Handling' is set to 'INCLUDE_CHILDREN'"),!1),ya),Ns),un(Pn)))),Qs(t,PP,Qw,null),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,zyt),""),"Animate"),"Whether the shift from the old layout to the new computed layout shall be animated."),!0),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,qyt),""),"Animation Time Factor"),"Factor for computation of animation time. The higher the value, the longer the animation time. If the value is 0, the resulting time is always equal to the minimum defined by 'Minimal Animation Time'."),pt(100)),Tc),ro),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Hyt),""),"Layout Ancestors"),"Whether the hierarchy levels on the path from the selected element to the root of the diagram shall be included in the layout process."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Vyt),""),"Maximal Animation Time"),"The maximal time for animations, in milliseconds."),pt(4e3)),Tc),ro),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Uyt),""),"Minimal Animation Time"),"The minimal time for animations, in milliseconds."),pt(400)),Tc),ro),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Gyt),""),"Progress Bar"),"Whether a progress bar shall be displayed during layout computations."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Kyt),""),"Validate Graph"),"Whether the graph shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Wyt),""),"Validate Options"),"Whether layout options shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!0),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Yyt),""),"Zoom to Fit"),"Whether the zoom level shall be set to view the whole diagram after layout."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,eSe),"box"),"Box Layout Mode"),"Configures the packing mode used by the {@link BoxLayoutProvider}. If SIMPLE is not required (neither priorities are used nor the interactive mode), GROUP_DEC can improve the packing and decrease the area. GROUP_MIXED and GROUP_INC may, in very specific scenarios, work better."),tNe),ps),cPe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,LTe),U1),"Comment Comment Spacing"),"Spacing to be preserved between a comment box and other comment boxes connected to the same node. The space left between comment boxes of different nodes is controlled by the node-node spacing."),10),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,MTe),U1),"Comment Node Spacing"),"Spacing to be preserved between a node and its connected comment boxes. The space left between a node and the comments of another node is controlled by the node-node spacing."),10),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,_he),U1),"Components Spacing"),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),20),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,DTe),U1),"Edge Spacing"),"Spacing to be preserved between any two edges. Note that while this can somewhat easily be satisfied for the segments of orthogonally drawn edges, it is harder for general polylines or splines."),10),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Ohe),U1),"Edge Label Spacing"),"The minimal distance to be preserved between a label and the edge it is associated with. Note that the placement of a label is influenced by the 'edgelabels.placement' option."),2),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,dfe),U1),"Edge Node Spacing"),"Spacing to be preserved between nodes and edges."),10),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,ITe),U1),"Label Spacing"),"Determines the amount of space to be left between two labels of the same graph element."),0),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,PTe),U1),"Label Node Spacing"),"Spacing to be preserved between labels and the border of node they are associated with. Note that the placement of a label is influenced by the 'nodelabels.placement' option."),5),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,OTe),U1),"Horizontal spacing between Label and Port"),"Horizontal spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,NTe),U1),"Vertical spacing between Label and Port"),"Vertical spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Jy),U1),"Node Spacing"),"The minimal distance to be preserved between each two nodes."),20),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,BTe),U1),"Node Self Loop Spacing"),"Spacing to be preserved between a node and its self loops."),10),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,FTe),U1),"Port Spacing"),"Spacing between pairs of ports of the same node."),10),fo),ta),rs(Pn,he(le(xg,1),it,170,0,[ha]))))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,RTe),U1),"Individual Spacing"),"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent."),X1),g_t),rs(ha,he(le(xg,1),it,170,0,[zd,yv,S2]))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,aCe),U1),"Additional Port Space"),"Additional space around the sets of ports on each node side. For each side of a node, this option can reserve additional space before and after the ports on each side. For example, a top spacing of 20 makes sure that the first port on the western and eastern side is 20 units away from the northern border."),NNe),X1),vAe),un(Pn)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,bfe),Jyt),"Layout Partition"),"Partition to which the node belongs. This requires Layout Partitioning to be active. Nodes with lower partition IDs will appear to the left of nodes with higher partition IDs (assuming a left-to-right layout direction)."),Tc),ro),rs(Pn,he(le(xg,1),it,170,0,[ha]))))),Qs(t,bfe,pfe,BSt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,pfe),Jyt),"Layout Partitioning"),"Whether to activate partitioned layout. This will allow to group nodes through the Layout Partition option. a pair of nodes with different partition indices is then placed such that the node with lower index is placed to the left of the other node (with left-to-right layout direction). Depending on the layout algorithm, this may only be guaranteed to work if all nodes have a layout partition configured, or at least if edges that cross partitions are not part of a partition-crossing cycle."),wNe),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,UTe),Zyt),"Node Label Padding"),"Define padding for node labels that are placed inside of a node."),dNe),X1),wAe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,fT),Zyt),"Node Label Placement"),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),gNe),t9),Ko),rs(ha,he(le(xg,1),it,170,0,[S2]))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,WTe),RG),"Port Alignment"),"Defines the default port distribution for a node. May be overridden for each side individually."),xNe),ps),OM),un(ha)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,YTe),RG),"Port Alignment (North)"),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),ps),OM),un(ha)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,XTe),RG),"Port Alignment (South)"),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),ps),OM),un(ha)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,QTe),RG),"Port Alignment (West)"),"Defines how ports on the western side are placed, overriding the node's general port alignment."),ps),OM),un(ha)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,JTe),RG),"Port Alignment (East)"),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),ps),OM),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,x6),Rfe),"Node Size Constraints"),"What should be taken into account when calculating a node's size. Empty size constraints specify that a node's size is already fixed and should not be changed."),pNe),t9),BM),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Nx),Rfe),"Node Size Options"),"Options modifying the behavior of the size constraints set on a node. Each member of the set specifies something that should be taken into account when calculating node sizes. The empty set corresponds to no further modifications."),mNe),t9),ePe),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Px),Rfe),"Node Size Minimum"),"The minimal size to which a node can be reduced."),bNe),X1),Ea),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,hT),Rfe),"Fixed Graph Size"),"By default, the fixed layout provider will enlarge a graph until it is large enough to contain its children. If this option is set, it won't do so."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,eCe),ffe),"Edge Label Placement"),"Gives a hint on where to put edge labels."),iNe),ps),FNe),un(S2)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,cG),ffe),"Inline Edge Labels"),"If true, an edge label is placed directly on its edge. May only apply to center edge labels. This kind of label placement is only advisable if the label's rendering is such that it is not crossed by its edge and thus stays legible."),!1),ya),Ns),un(S2)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,aOn),"font"),"Font Name"),"Font name used for a label."),J6),zt),un(S2)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,Xyt),"font"),"Font Size"),"Font size used for a label."),Tc),ro),un(S2)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,iCe),jfe),"Port Anchor Offset"),"The offset to the port position where connections shall be attached."),X1),Ea),un(yv)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,tCe),jfe),"Port Index"),"The index of a port in the fixed order around a node. The order is assumed as clockwise, starting with the leftmost port on the top side. This option must be set if 'Port Constraints' is set to FIXED_ORDER and no specific positions are given for the ports. Additionally, the option 'Port Side' must be defined in this case."),Tc),ro),un(yv)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,zTe),jfe),"Port Side"),"The side of a node on which a port is situated. This option must be set if 'Port Constraints' is set to FIXED_SIDE or FIXED_ORDER and no specific positions are given for the ports."),SNe),ps),Oo),un(yv)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,jTe),jfe),"Port Border Offset"),"The offset of ports on the node border. With a positive offset the port is moved outside of the node, while with a negative offset the port is moved towards the inside. An offset of 0 means that the port is placed directly on the node border, i.e. if the port side is north, the port's south border touches the nodes's north border; if the port side is east, the port's west border touches the nodes's east border; if the port side is south, the port's north border touches the node's south border; if the port side is west, the port's east border touches the node's west border."),fo),ta),un(yv)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,dT),iSe),"Port Label Placement"),"Decides on a placement method for port labels; if empty, the node label's position is not modified."),TNe),t9),cY),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,GTe),iSe),"Port Labels Next to Port"),"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE."),!1),ya),Ns),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,KTe),iSe),"Treat Port Labels as Group"),"If this option is true (default), the labels of a port will be treated as a group when it comes to centering them next to their port. If this option is false, only the first label will be centered next to the port, with the others being placed below. This only applies to labels of eastern and western ports and will have no effect if labels are not placed next to their port."),!0),ya),Ns),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,BP),KP),"Topdown Scale Factor"),"The scaling factor to be applied to the nodes laid out within the node in recursive topdown layout. The difference to 'Scale Factor' is that the node itself is not scaled. This value has to be set on hierarchical nodes."),1),fo),ta),un(Pn)))),Qs(t,BP,Qw,VSt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,nSe),KP),"Topdown Size Approximator"),"The size approximator to be used to set sizes of hierarchical nodes during topdown layout. The default value is null, which results in nodes keeping whatever size is defined for them e.g. through parent parallel node or by manually setting the size."),null),ps),gY),un(ha)))),Qs(t,nSe,Qw,USt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,FP),KP),"Topdown Hierarchical Node Width"),"The fixed size of a hierarchical node when using topdown layout. If this value is set on a parallel node it applies to its children, when set on a hierarchical node it applies to the node itself."),150),fo),ta),rs(Pn,he(le(xg,1),it,170,0,[ha]))))),Qs(t,FP,Qw,null),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,RP),KP),"Topdown Hierarchical Node Aspect Ratio"),"The fixed aspect ratio of a hierarchical node when using topdown layout. Default is 1/sqrt(2). If this value is set on a parallel node it applies to its children, when set on a hierarchical node it applies to the node itself."),1.414),fo),ta),rs(Pn,he(le(xg,1),it,170,0,[ha]))))),Qs(t,RP,Qw,null),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Qw),KP),"Topdown Node Type"),"The different node types used for topdown layout. If the node type is set to {@link TopdownNodeTypes.PARALLEL_NODE} the algorithm must be set to a {@link TopdownLayoutProvider} such as {@link TopdownPacking}. The {@link nodeSize.fixedGraphSize} option is technically only required for hierarchical nodes."),null),ps),nPe),un(ha)))),Qs(t,Qw,hT,null),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,rSe),KP),"Topdown Scale Cap"),"Determines the upper limit for the topdown scale factor. The default value is 1.0 which ensures that nested children never end up appearing larger than their parents in terms of unit sizes such as the font size. If the limit is larger, nodes will fully utilize the available space, but it is counteriniuitive for inner nodes to have a larger scale than outer nodes."),1),fo),ta),un(Pn)))),Qs(t,rSe,Qw,HSt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,HTe),e4t),"Activate Inside Self Loops"),"Whether this node allows to route self loops inside of it instead of around it. If set to true, this will make the node a compound node if it isn't already, and will require the layout algorithm to support compound nodes with hierarchical ports."),!1),ya),Ns),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,VTe),e4t),"Inside Self Loop"),"Whether a self loop should be routed inside a node instead of around that node."),!1),ya),Ns),un(zd)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Ahe),"edge"),"Edge Thickness"),"The thickness of an edge. This is a hint on the line width used to draw an edge, possibly requiring more space to be reserved for it."),1),fo),ta),un(zd)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Qyt),"edge"),"Edge Type"),"The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations."),cNe),ps),HNe),un(zd)))),m_(t,new nx(f_(Ck(Tk(new ny,sr),"Layered"),'The layer-based method was introduced by Sugiyama, Tagawa and Toda in 1981. It emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers, which are sometimes called "hierarchies", and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.'))),m_(t,new nx(f_(Ck(Tk(new ny,"org.eclipse.elk.orthogonal"),"Orthogonal"),`Orthogonal methods that follow the "topology-shape-metrics" approach by Batini, Nardelli and Tamassia '86. The first phase determines the topology of the drawing by applying a planarization technique, which results in a planar representation of the graph. The orthogonal shape is computed in the second phase, which aims at minimizing the number of edge bends, and is called orthogonalization. The third phase leads to concrete coordinates for nodes and edge bend points by applying a compaction method, thus defining the metrics.`))),m_(t,new nx(f_(Ck(Tk(new ny,Yu),"Force"),"Layout algorithms that follow physical analogies by simulating a system of attractive and repulsive forces. The first successful method of this kind was proposed by Eades in 1984."))),m_(t,new nx(f_(Ck(Tk(new ny,"org.eclipse.elk.circle"),"Circle"),"Circular layout algorithms emphasize cycles or biconnected components of a graph by arranging them in circles. This is useful if a drawing is desired where such components are clearly grouped, or where cycles are shown as prominent OPTIONS of the graph."))),m_(t,new nx(f_(Ck(Tk(new ny,byt),"Tree"),"Specialized layout methods for trees, i.e. acyclic graphs. The regular structure of graphs that have no undirected cycles can be emphasized using an algorithm of this type."))),m_(t,new nx(f_(Ck(Tk(new ny,"org.eclipse.elk.planar"),"Planar"),"Algorithms that require a planar or upward planar graph. Most of these algorithms are theoretically interesting, but not practically usable."))),m_(t,new nx(f_(Ck(Tk(new ny,gf),"Radial"),"Radial layout algorithms usually position the nodes of the graph on concentric circles."))),amt((new die,t)),xmt((new fie,t)),Nbt((new lz,t))};var eC,ASt,eNe,Z6,LSt,MSt,tNe,e7,t7,DSt,UB,nNe,GB,xv,rNe,Dge,Ige,iNe,sNe,aNe,oNe,cNe,ISt,n7,uNe,OSt,KB,Oge,WB,Nge,x3,lNe,tC,hNe,fNe,dNe,r7,gNe,kv,pNe,C4,i7,bNe,Ub,mNe,rY,YB,_2,vNe,NSt,wNe,PSt,BSt,yNe,xNe,Pge,Bge,Fge,Rge,kNe,rh,_M,ENe,jge,$ge,S4,TNe,CNe,s7,SNe,n9,XB,zge,a7,FSt,qge,RSt,jSt,_Ne,$St,ANe,LNe,r9,MNe,iY,DNe,INe,Ev,zSt,ONe,NNe,PNe,sY,QB,AM,i9,qSt,HSt,aY,VSt,BNe,USt;I(nh,"CoreOptions",699),D(88,22,{3:1,34:1,22:1,88:1},mO);var Q1,uc,vc,J1,wf,LM=Fr(nh,kEe,88,Hr,Pmn,j1n),GSt;D(278,22,{3:1,34:1,22:1,278:1},zse);var nC,_4,rC,FNe=Fr(nh,"EdgeLabelPlacement",278,Hr,lbn,$1n),KSt;D(223,22,{3:1,34:1,22:1,223:1},xq);var iC,JB,s9,Hge,Vge=Fr(nh,"EdgeRouting",223,Hr,lmn,z1n),WSt;D(321,22,{3:1,34:1,22:1,321:1},L_);var RNe,jNe,$Ne,zNe,Uge,qNe,HNe=Fr(nh,"EdgeType",321,Hr,Lvn,q1n),YSt;D(989,1,Pf,die),h.hf=function(t){amt(t)};var VNe,UNe,GNe,KNe,XSt,WNe,MM;I(nh,"FixedLayouterOptions",989),D(990,1,{},v$),h.sf=function(){var t;return t=new Une,t},h.tf=function(t){},I(nh,"FixedLayouterOptions/FixedFactory",990),D(346,22,{3:1,34:1,22:1,346:1},qse);var A2,oY,DM,YNe=Fr(nh,"HierarchyHandling",346,Hr,cbn,H1n),QSt;D(291,22,{3:1,34:1,22:1,291:1},kq);var kg,Gb,ZB,eF,JSt=Fr(nh,"LabelSide",291,Hr,umn,V1n),ZSt;D(95,22,{3:1,34:1,22:1,95:1},D5);var mp,E0,zf,T0,jh,C0,qf,Eg,S0,Ko=Fr(nh,"NodeLabelPlacement",95,Hr,Mwn,U1n),e_t;D(256,22,{3:1,34:1,22:1,256:1},vO);var XNe,IM,Kb,QNe,tF,OM=Fr(nh,"PortAlignment",256,Hr,Xmn,G1n),t_t;D(101,22,{3:1,34:1,22:1,101:1},M_);var Tv,Mu,Tg,sC,Z1,Wb,JNe=Fr(nh,"PortConstraints",101,Hr,Avn,K1n),n_t;D(279,22,{3:1,34:1,22:1,279:1},D_);var NM,PM,vp,nF,Yb,a9,cY=Fr(nh,"PortLabelPlacement",279,Hr,_vn,W1n),r_t;D(64,22,{3:1,34:1,22:1,64:1},wO);var ar,Qn,yf,xf,ll,Ju,ed,_0,zl,_l,Du,ql,hl,fl,A0,$h,zh,Hf,Dr,Pc,er,Oo=Fr(nh,"PortSide",64,Hr,Bmn,Y1n),i_t;D(993,1,Pf,lz),h.hf=function(t){Nbt(t)};var s_t,a_t,ZNe,o_t,c_t;I(nh,"RandomLayouterOptions",993),D(994,1,{},w$),h.sf=function(){var t;return t=new qne,t},h.tf=function(t){},I(nh,"RandomLayouterOptions/RandomFactory",994),D(386,22,{3:1,34:1,22:1,386:1},Eq);var A4,rF,iF,Cv,BM=Fr(nh,"SizeConstraint",386,Hr,cmn,X1n),u_t;D(264,22,{3:1,34:1,22:1,264:1},I5);var sF,uY,aC,Gge,aF,FM,lY,hY,fY,ePe=Fr(nh,"SizeOptions",264,Hr,qwn,Q1n),l_t;D(280,22,{3:1,34:1,22:1,280:1},Hse);var L4,tPe,dY,nPe=Fr(nh,"TopdownNodeTypes",280,Hr,hbn,J1n),h_t;D(347,22,sSe);var rPe,iPe,gY=Fr(nh,"TopdownSizeApproximator",347,Hr,a2n,edn);D(987,347,sSe,Wit),h.Tg=function(t){return Tdt(t)},Fr(nh,"TopdownSizeApproximator/1",987,gY,null,null),D(988,347,sSe,Ost),h.Tg=function(t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn;for(n=l(at(t,(pi(),a7)),143),St=(rb(),V=new a_,V),aP(St,t),cn=new Pr,f=new or((!t.a&&(t.a=new nt(Ai,t,10,11)),t.a));f.e!=f.i.gc();)a=l(gr(f),27),Me=(z=new a_,z),LU(Me,St),aP(Me,a),Bn=Tdt(a),F5(Me,b.Math.max(a.g,Bn.a),b.Math.max(a.f,Bn.b)),ju(cn.f,a,Me);for(o=new or((!t.a&&(t.a=new nt(Ai,t,10,11)),t.a));o.e!=o.i.gc();)for(a=l(gr(o),27),L=new or((!a.e&&(a.e=new Ln(js,a,7,4)),a.e));L.e!=L.i.gc();)C=l(gr(L),74),Ze=l(hc(zo(cn.f,a)),27),ot=l(cr(cn,Oe((!C.c&&(C.c=new Ln(_r,C,5,8)),C.c),0)),27),$e=(B=new TI,B),qr((!$e.b&&($e.b=new Ln(_r,$e,4,7)),$e.b),Ze),qr((!$e.c&&($e.c=new Ln(_r,$e,5,8)),$e.c),ot),AU($e,ds(Ze)),aP($e,C);te=l(GO(n.f),205);try{te.rf(St,new x$),lat(n.f,te)}catch(jn){throw jn=bs(jn),De(jn,103)?(J=jn,ue(J)):ue(jn)}return P1(St,t7)||P1(St,e7)||Uke(St),E=ze(Ge(at(St,t7))),w=ze(Ge(at(St,e7))),g=E/w,r=ze(Ge(at(St,QB)))*b.Math.sqrt((!St.a&&(St.a=new nt(Ai,St,10,11)),St.a).i),an=l(at(St,_2),107),Te=an.b+an.c+1,fe=an.d+an.a+1,new lt(b.Math.max(Te,r),b.Math.max(fe,r/g))},Fr(nh,"TopdownSizeApproximator/2",988,gY,null,null);var f_t;D(344,1,{871:1},L8),h.Ug=function(t,n){return Fgt(this,t,n)},h.Vg=function(){apt(this)},h.Wg=function(){return this.q},h.Xg=function(){return this.f?ioe(this.f):null},h.Yg=function(){return ioe(this.a)},h.Zg=function(){return this.p},h.$g=function(){return!1},h._g=function(){return this.n},h.ah=function(){return this.p!=null&&!this.b},h.bh=function(t){var n;this.n&&(n=t,vt(this.f,n))},h.dh=function(t,n){var r,a;this.n&&t&&Sbn(this,(r=new Ust,a=cle(r,t),oDn(r),a),(NV(),Wge))},h.eh=function(t){var n;return this.b?null:(n=hwn(this,this.g),ui(this.a,n),n.i=this,this.d=t,n)},h.fh=function(t){t>0&&!this.b&&c7e(this,t)},h.b=!1,h.c=0,h.d=-1,h.e=null,h.f=null,h.g=-1,h.j=!1,h.k=!1,h.n=!1,h.o=0,h.q=0,h.r=0,I(Uc,"BasicProgressMonitor",344),D(717,205,tv,jne),h.rf=function(t,n){Rmt(t,n)},I(Uc,"BoxLayoutProvider",717),D(983,1,ii,DXe),h.Ne=function(t,n){return oCn(this,l(t,27),l(n,27))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},h.a=!1,I(Uc,"BoxLayoutProvider/1",983),D(163,1,{163:1},hV,vrt),h.Ib=function(){return this.c?oke(this.c):Tb(this.b)},I(Uc,"BoxLayoutProvider/Group",163),D(320,22,{3:1,34:1,22:1,320:1},Tq);var sPe,aPe,oPe,Kge,cPe=Fr(Uc,"BoxLayoutProvider/PackingMode",320,Hr,hmn,tdn),d_t;D(984,1,ii,tk),h.Ne=function(t,n){return Spn(l(t,163),l(n,163))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Uc,"BoxLayoutProvider/lambda$0$Type",984),D(985,1,ii,nk),h.Ne=function(t,n){return vpn(l(t,163),l(n,163))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Uc,"BoxLayoutProvider/lambda$1$Type",985),D(986,1,ii,y$),h.Ne=function(t,n){return wpn(l(t,163),l(n,163))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Uc,"BoxLayoutProvider/lambda$2$Type",986),D(1384,1,{845:1},$ne),h.Mg=function(t,n){return tq(),!De(n,167)||mZe((hx(),l(t,167)),n)},I(Uc,"ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type",1384),D(1385,1,fr,IXe),h.Cd=function(t){Byn(this.a,l(t,149))},I(Uc,"ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type",1385),D(1386,1,fr,Hne),h.Cd=function(t){l(t,96),tq()},I(Uc,"ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type",1386),D(1390,1,fr,OXe),h.Cd=function(t){i3n(this.a,l(t,96))},I(Uc,"ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type",1390),D(1388,1,ti,utt),h.Mb=function(t){return myn(this.a,this.b,l(t,149))},I(Uc,"ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type",1388),D(1387,1,ti,ltt),h.Mb=function(t){return Jhn(this.a,this.b,l(t,845))},I(Uc,"ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type",1387),D(1389,1,fr,htt),h.Cd=function(t){hgn(this.a,this.b,l(t,149))},I(Uc,"ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type",1389),D(947,1,{},Vne),h.Kb=function(t){return ant(t)},h.Fb=function(t){return this===t},I(Uc,"ElkUtil/lambda$0$Type",947),D(948,1,fr,ftt),h.Cd=function(t){lEn(this.a,this.b,l(t,74))},h.a=0,h.b=0,I(Uc,"ElkUtil/lambda$1$Type",948),D(949,1,fr,dtt),h.Cd=function(t){tun(this.a,this.b,l(t,166))},h.a=0,h.b=0,I(Uc,"ElkUtil/lambda$2$Type",949),D(950,1,fr,gtt),h.Cd=function(t){Xln(this.a,this.b,l(t,135))},h.a=0,h.b=0,I(Uc,"ElkUtil/lambda$3$Type",950),D(951,1,fr,NXe),h.Cd=function(t){Idn(this.a,l(t,377))},I(Uc,"ElkUtil/lambda$4$Type",951),D(325,1,{34:1,325:1},Dcn),h.Fd=function(t){return Chn(this,l(t,242))},h.Fb=function(t){var n;return De(t,325)?(n=l(t,325),this.a==n.a):!1},h.Hb=function(){return ua(this.a)},h.Ib=function(){return this.a+" (exclusive)"},h.a=0,I(Uc,"ExclusiveBounds/ExclusiveLowerBound",325),D(1119,205,tv,Une),h.rf=function(t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an;for(n.Ug("Fixed Layout",1),f=l(at(t,(pi(),sNe)),223),B=0,z=0,Me=new or((!t.a&&(t.a=new nt(Ai,t,10,11)),t.a));Me.e!=Me.i.gc();){for(fe=l(gr(Me),27),an=l(at(fe,(PV(),MM)),8),an&&(Qh(fe,an.a,an.b),l(at(fe,UNe),181).Hc((mh(),A4))&&(V=l(at(fe,KNe),8),V.a>0&&V.b>0&&Gw(fe,V.a,V.b,!0,!0))),B=b.Math.max(B,fe.i+fe.g),z=b.Math.max(z,fe.j+fe.f),C=new or((!fe.n&&(fe.n=new nt(ec,fe,1,7)),fe.n));C.e!=C.i.gc();)w=l(gr(C),135),an=l(at(w,MM),8),an&&Qh(w,an.a,an.b),B=b.Math.max(B,fe.i+w.i+w.g),z=b.Math.max(z,fe.j+w.j+w.f);for(ot=new or((!fe.c&&(fe.c=new nt(Hl,fe,9,9)),fe.c));ot.e!=ot.i.gc();)for(Ze=l(gr(ot),123),an=l(at(Ze,MM),8),an&&Qh(Ze,an.a,an.b),St=fe.i+Ze.i,cn=fe.j+Ze.j,B=b.Math.max(B,St+Ze.g),z=b.Math.max(z,cn+Ze.f),E=new or((!Ze.n&&(Ze.n=new nt(ec,Ze,1,7)),Ze.n));E.e!=E.i.gc();)w=l(gr(E),135),an=l(at(w,MM),8),an&&Qh(w,an.a,an.b),B=b.Math.max(B,St+w.i+w.g),z=b.Math.max(z,cn+w.j+w.f);for(o=new hr(dr(cp(fe).a.Kc(),new j));jr(o);)r=l(xr(o),74),L=Jvt(r),B=b.Math.max(B,L.a),z=b.Math.max(z,L.b);for(a=new hr(dr(sP(fe).a.Kc(),new j));jr(a);)r=l(xr(a),74),ds(cg(r))!=t&&(L=Jvt(r),B=b.Math.max(B,L.a),z=b.Math.max(z,L.b))}if(f==(ip(),iC))for(Te=new or((!t.a&&(t.a=new nt(Ai,t,10,11)),t.a));Te.e!=Te.i.gc();)for(fe=l(gr(Te),27),a=new hr(dr(cp(fe).a.Kc(),new j));jr(a);)r=l(xr(a),74),g=fAn(r),g.b==0?Hi(r,x3,null):Hi(r,x3,g);Rt(Bt(at(t,(PV(),GNe))))||($e=l(at(t,XSt),107),te=B+$e.b+$e.c,J=z+$e.d+$e.a,Gw(t,te,J,!0,!0)),n.Vg()},I(Uc,"FixedLayoutProvider",1119),D(385,137,{3:1,423:1,385:1,96:1,137:1},EI,Xlt),h.cg=function(t){var n,r,a,o,f,g,w,E,C;if(t)try{for(E=Gy(t,";,;"),f=E,g=0,w=f.length;g>16&Zs|n^a<<16},h.Kc=function(){return new PXe(this)},h.Ib=function(){return this.a==null&&this.b==null?"pair(null,null)":this.a==null?"pair(null,"+xc(this.b)+")":this.b==null?"pair("+xc(this.a)+",null)":"pair("+xc(this.a)+","+xc(this.b)+")"},I(Uc,"Pair",42),D(995,1,Oa,PXe),h.Nb=function(t){Za(this,t)},h.Ob=function(){return!this.c&&(!this.b&&this.a.a!=null||this.a.b!=null)},h.Pb=function(){if(!this.c&&!this.b&&this.a.a!=null)return this.b=!0,this.a.a;if(!this.c&&this.a.b!=null)return this.c=!0,this.a.b;throw ue(new _c)},h.Qb=function(){throw this.c&&this.a.b!=null?this.a.b=null:this.b&&this.a.a!=null&&(this.a.a=null),ue(new pl)},h.b=!1,h.c=!1,I(Uc,"Pair/1",995),D(455,1,{455:1},Sat),h.Fb=function(t){return Jc(this.a,l(t,455).a)&&Jc(this.c,l(t,455).c)&&Jc(this.d,l(t,455).d)&&Jc(this.b,l(t,455).b)},h.Hb=function(){return MN(he(le(wa,1),Rn,1,5,[this.a,this.c,this.d,this.b]))},h.Ib=function(){return"("+this.a+Co+this.c+Co+this.d+Co+this.b+")"},I(Uc,"Quadruple",455),D(1108,205,tv,qne),h.rf=function(t,n){var r,a,o,f,g;if(n.Ug("Random Layout",1),(!t.a&&(t.a=new nt(Ai,t,10,11)),t.a).i==0){n.Vg();return}f=l(at(t,(B8e(),o_t)),17),f&&f.a!=0?o=new VH(f.a):o=new Uce,r=XI(Ge(at(t,s_t))),g=XI(Ge(at(t,c_t))),a=l(at(t,a_t),107),MDn(t,o,r,g,a),n.Vg()},I(Uc,"RandomLayoutProvider",1108),D(240,1,{240:1},wae),h.Fb=function(t){return Jc(this.a,l(t,240).a)&&Jc(this.b,l(t,240).b)&&Jc(this.c,l(t,240).c)},h.Hb=function(){return MN(he(le(wa,1),Rn,1,5,[this.a,this.b,this.c]))},h.Ib=function(){return"("+this.a+Co+this.b+Co+this.c+")"},I(Uc,"Triple",240);var m_t;D(562,1,{}),h.Lf=function(){return new lt(this.f.i,this.f.j)},h.of=function(t){return eot(t,(pi(),rh))?at(this.f,v_t):at(this.f,t)},h.Mf=function(){return new lt(this.f.g,this.f.f)},h.Nf=function(){return this.g},h.pf=function(t){return P1(this.f,t)},h.Of=function(t){Uu(this.f,t.a),Gu(this.f,t.b)},h.Pf=function(t){Dw(this.f,t.a),Mw(this.f,t.b)},h.Qf=function(t){this.g=t},h.g=0;var v_t;I(xL,"ElkGraphAdapters/AbstractElkGraphElementAdapter",562),D(563,1,{853:1},Oz),h.Rf=function(){var t,n;if(!this.b)for(this.b=$H(EH(this.a).i),n=new or(EH(this.a));n.e!=n.i.gc();)t=l(gr(n),135),vt(this.b,new Yie(t));return this.b},h.b=null,I(xL,"ElkGraphAdapters/ElkEdgeAdapter",563),D(289,562,{},Jv),h.Sf=function(){return Gdt(this)},h.a=null,I(xL,"ElkGraphAdapters/ElkGraphAdapter",289),D(640,562,{187:1},Yie),I(xL,"ElkGraphAdapters/ElkLabelAdapter",640),D(639,562,{695:1},rae),h.Rf=function(){return m7n(this)},h.Vf=function(){var t;return t=l(at(this.f,(pi(),tC)),140),!t&&(t=new s_),t},h.Xf=function(){return v7n(this)},h.Zf=function(t){var n;n=new xae(t),Hi(this.f,(pi(),tC),n)},h.$f=function(t){Hi(this.f,(pi(),_2),new S4e(t))},h.Tf=function(){return this.d},h.Uf=function(){var t,n;if(!this.a)for(this.a=new bt,n=new hr(dr(sP(l(this.f,27)).a.Kc(),new j));jr(n);)t=l(xr(n),74),vt(this.a,new Oz(t));return this.a},h.Wf=function(){var t,n;if(!this.c)for(this.c=new bt,n=new hr(dr(cp(l(this.f,27)).a.Kc(),new j));jr(n);)t=l(xr(n),74),vt(this.c,new Oz(t));return this.c},h.Yf=function(){return AH(l(this.f,27)).i!=0||Rt(Bt(l(this.f,27).of((pi(),KB))))},h._f=function(){Xvn(this,(aw(),m_t))},h.a=null,h.b=null,h.c=null,h.d=null,h.e=null,I(xL,"ElkGraphAdapters/ElkNodeAdapter",639),D(1284,562,{852:1},BXe),h.Rf=function(){return S7n(this)},h.Uf=function(){var t,n;if(!this.a)for(this.a=eg(l(this.f,123).hh().i),n=new or(l(this.f,123).hh());n.e!=n.i.gc();)t=l(gr(n),74),vt(this.a,new Oz(t));return this.a},h.Wf=function(){var t,n;if(!this.c)for(this.c=eg(l(this.f,123).ih().i),n=new or(l(this.f,123).ih());n.e!=n.i.gc();)t=l(gr(n),74),vt(this.c,new Oz(t));return this.c},h.ag=function(){return l(l(this.f,123).of((pi(),s7)),64)},h.bg=function(){var t,n,r,a,o,f,g,w;for(a=M1(l(this.f,123)),r=new or(l(this.f,123).ih());r.e!=r.i.gc();)for(t=l(gr(r),74),w=new or((!t.c&&(t.c=new Ln(_r,t,5,8)),t.c));w.e!=w.i.gc();){if(g=l(gr(w),84),Ly(bc(g),a))return!0;if(bc(g)==a&&Rt(Bt(at(t,(pi(),Oge)))))return!0}for(n=new or(l(this.f,123).hh());n.e!=n.i.gc();)for(t=l(gr(n),74),f=new or((!t.b&&(t.b=new Ln(_r,t,4,7)),t.b));f.e!=f.i.gc();)if(o=l(gr(f),84),Ly(bc(o),a))return!0;return!1},h.a=null,h.b=null,h.c=null,I(xL,"ElkGraphAdapters/ElkPortAdapter",1284),D(1285,1,ii,zne),h.Ne=function(t,n){return i_n(l(t,123),l(n,123))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(xL,"ElkGraphAdapters/PortComparator",1285);var Xb=ks(pf,"EObject"),oC=ks(T6,r4t),qh=ks(T6,i4t),oF=ks(T6,s4t),cF=ks(T6,"ElkShape"),_r=ks(T6,a4t),js=ks(T6,aSe),cs=ks(T6,o4t),uF=ks(pf,c4t),RM=ks(pf,"EFactory"),w_t,Yge=ks(pf,u4t),u1=ks(pf,"EPackage"),La,y_t,x_t,fPe,pY,k_t,dPe,gPe,pPe,Cg,E_t,T_t,ec=ks(T6,oSe),Ai=ks(T6,cSe),Hl=ks(T6,uSe);D(93,1,l4t),h.th=function(){return this.uh(),null},h.uh=function(){return null},h.vh=function(){return this.uh(),!1},h.wh=function(){return!1},h.xh=function(t){Ni(this,t)},I(Rx,"BasicNotifierImpl",93),D(99,93,g4t),h.Yh=function(){return hh(this)},h.yh=function(t,n){return t},h.zh=function(){throw ue(new Qr)},h.Ah=function(t){var n;return n=Ro(l(Mn(this.Dh(),this.Fh()),19)),this.Ph().Th(this,n.n,n.f,t)},h.Bh=function(t,n){throw ue(new Qr)},h.Ch=function(t,n,r){return Nh(this,t,n,r)},h.Dh=function(){var t;return this.zh()&&(t=this.zh().Nk(),t)?t:this.ii()},h.Eh=function(){return Uue(this)},h.Fh=function(){throw ue(new Qr)},h.Gh=function(){var t,n;return n=this.$h().Ok(),!n&&this.zh().Tk(n=(w_(),t=j5e(Sd(this.Dh())),t==null?rpe:new TO(this,t))),n},h.Hh=function(t,n){return t},h.Ih=function(t){var n;return n=t.pk(),n?t.Lj():ms(this.Dh(),t)},h.Jh=function(){var t;return t=this.zh(),t?t.Qk():null},h.Kh=function(){return this.zh()?this.zh().Nk():null},h.Lh=function(t,n,r){return rU(this,t,n,r)},h.Mh=function(t){return tE(this,t)},h.Nh=function(t,n){return Moe(this,t,n)},h.Oh=function(){var t;return t=this.zh(),!!t&&t.Rk()},h.Ph=function(){throw ue(new Qr)},h.Qh=function(){return XV(this)},h.Rh=function(t,n,r,a){return mx(this,t,n,a)},h.Sh=function(t,n,r){var a;return a=l(Mn(this.Dh(),n),69),a.wk().zk(this,this.hi(),n-this.ji(),t,r)},h.Th=function(t,n,r,a){return IH(this,t,n,a)},h.Uh=function(t,n,r){var a;return a=l(Mn(this.Dh(),n),69),a.wk().Ak(this,this.hi(),n-this.ji(),t,r)},h.Vh=function(){return!!this.zh()&&!!this.zh().Pk()},h.Wh=function(t){return nue(this,t)},h.Xh=function(t){return got(this,t)},h.Zh=function(t){return Bvt(this,t)},h.$h=function(){throw ue(new Qr)},h._h=function(){return this.zh()?this.zh().Pk():null},h.ai=function(){return XV(this)},h.bi=function(t,n){$ue(this,t,n)},h.ci=function(t){this.$h().Sk(t)},h.di=function(t){this.$h().Vk(t)},h.ei=function(t){this.$h().Uk(t)},h.fi=function(t,n){var r,a,o,f;return f=this.Jh(),f&&t&&(n=To(f.El(),this,n),f.Il(this)),a=this.Ph(),a&&(sle(this,this.Ph(),this.Fh()).Bb&Io?(o=a.Qh(),o&&(t?!f&&o.Il(this):o.Hl(this))):(n=(r=this.Fh(),r>=0?this.Ah(n):this.Ph().Th(this,-1-r,null,n)),n=this.Ch(null,-1,n))),this.di(t),n},h.gi=function(t){var n,r,a,o,f,g,w,E;if(r=this.Dh(),f=ms(r,t),n=this.ji(),f>=n)return l(t,69).wk().Dk(this,this.hi(),f-n);if(f<=-1)if(g=g6((El(),io),r,t),g){if(Fo(),l(g,69).xk()||(g=rx(ic(io,g))),o=(a=this.Ih(g),l(a>=0?this.Lh(a,!0,!0):Hw(this,g,!0),160)),E=g.Ik(),E>1||E==-1)return l(l(o,220).Sl(t,!1),79)}else throw ue(new Yn(Ob+t.xe()+$fe));else if(t.Jk())return a=this.Ih(t),l(a>=0?this.Lh(a,!1,!0):Hw(this,t,!1),79);return w=new Itt(this,t),w},h.hi=function(){return V6e(this)},h.ii=function(){return(lb(),Vn).S},h.ji=function(){return yr(this.ii())},h.ki=function(t){Fue(this,t)},h.Ib=function(){return g0(this)},I(Gn,"BasicEObjectImpl",99);var C_t;D(119,99,{110:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1}),h.li=function(t){var n;return n=H6e(this),n[t]},h.mi=function(t,n){var r;r=H6e(this),Ts(r,t,n)},h.ni=function(t){var n;n=H6e(this),Ts(n,t,null)},h.th=function(){return l(Kn(this,4),129)},h.uh=function(){throw ue(new Qr)},h.vh=function(){return(this.Db&4)!=0},h.zh=function(){throw ue(new Qr)},h.oi=function(t){px(this,2,t)},h.Bh=function(t,n){this.Db=n<<16|this.Db&255,this.oi(t)},h.Dh=function(){return sl(this)},h.Fh=function(){return this.Db>>16},h.Gh=function(){var t,n;return w_(),n=j5e(Sd((t=l(Kn(this,16),29),t||this.ii()))),n==null?rpe:new TO(this,n)},h.wh=function(){return(this.Db&1)==0},h.Jh=function(){return l(Kn(this,128),2034)},h.Kh=function(){return l(Kn(this,16),29)},h.Oh=function(){return(this.Db&32)!=0},h.Ph=function(){return l(Kn(this,2),54)},h.Vh=function(){return(this.Db&64)!=0},h.$h=function(){throw ue(new Qr)},h._h=function(){return l(Kn(this,64),288)},h.ci=function(t){px(this,16,t)},h.di=function(t){px(this,128,t)},h.ei=function(t){px(this,64,t)},h.hi=function(){return Ku(this)},h.Db=0,I(Gn,"MinimalEObjectImpl",119),D(120,119,{110:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),h.oi=function(t){this.Cb=t},h.Ph=function(){return this.Cb},I(Gn,"MinimalEObjectImpl/Container",120),D(2083,120,{110:1,342:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),h.Lh=function(t,n,r){return sxe(this,t,n,r)},h.Uh=function(t,n,r){return Wxe(this,t,n,r)},h.Wh=function(t){return Z5e(this,t)},h.bi=function(t,n){V7e(this,t,n)},h.ii=function(){return su(),T_t},h.ki=function(t){O7e(this,t)},h.nf=function(){return fdt(this)},h.gh=function(){return!this.o&&(this.o=new xl((su(),Cg),L2,this,0)),this.o},h.of=function(t){return at(this,t)},h.pf=function(t){return P1(this,t)},h.qf=function(t,n){return Hi(this,t,n)},I(sv,"EMapPropertyHolderImpl",2083),D(572,120,{110:1,377:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},AS),h.Lh=function(t,n,r){switch(t){case 0:return this.a;case 1:return this.b}return rU(this,t,n,r)},h.Wh=function(t){switch(t){case 0:return this.a!=0;case 1:return this.b!=0}return nue(this,t)},h.bi=function(t,n){switch(t){case 0:dV(this,ze(Ge(n)));return;case 1:fV(this,ze(Ge(n)));return}$ue(this,t,n)},h.ii=function(){return su(),y_t},h.ki=function(t){switch(t){case 0:dV(this,0);return;case 1:fV(this,0);return}Fue(this,t)},h.Ib=function(){var t;return this.Db&64?g0(this):(t=new Af(g0(this)),t.a+=" (x: ",_5(t,this.a),t.a+=", y: ",_5(t,this.b),t.a+=")",t.a)},h.a=0,h.b=0,I(sv,"ElkBendPointImpl",572),D(739,2083,{110:1,342:1,167:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),h.Lh=function(t,n,r){return d8e(this,t,n,r)},h.Sh=function(t,n,r){return Mue(this,t,n,r)},h.Uh=function(t,n,r){return dce(this,t,n,r)},h.Wh=function(t){return _7e(this,t)},h.bi=function(t,n){Txe(this,t,n)},h.ii=function(){return su(),k_t},h.ki=function(t){i8e(this,t)},h.jh=function(){return this.k},h.kh=function(){return EH(this)},h.Ib=function(){return jce(this)},h.k=null,I(sv,"ElkGraphElementImpl",739),D(740,739,{110:1,342:1,167:1,422:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),h.Lh=function(t,n,r){return x8e(this,t,n,r)},h.Wh=function(t){return _8e(this,t)},h.bi=function(t,n){Cxe(this,t,n)},h.ii=function(){return su(),E_t},h.ki=function(t){N8e(this,t)},h.lh=function(){return this.f},h.mh=function(){return this.g},h.nh=function(){return this.i},h.oh=function(){return this.j},h.ph=function(t,n){F5(this,t,n)},h.qh=function(t,n){Qh(this,t,n)},h.rh=function(t){Uu(this,t)},h.sh=function(t){Gu(this,t)},h.Ib=function(){return Pue(this)},h.f=0,h.g=0,h.i=0,h.j=0,I(sv,"ElkShapeImpl",740),D(741,740,{110:1,342:1,84:1,167:1,422:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),h.Lh=function(t,n,r){return J8e(this,t,n,r)},h.Sh=function(t,n,r){return vxe(this,t,n,r)},h.Uh=function(t,n,r){return wxe(this,t,n,r)},h.Wh=function(t){return H7e(this,t)},h.bi=function(t,n){I9e(this,t,n)},h.ii=function(){return su(),x_t},h.ki=function(t){K8e(this,t)},h.hh=function(){return!this.d&&(this.d=new Ln(js,this,8,5)),this.d},h.ih=function(){return!this.e&&(this.e=new Ln(js,this,7,4)),this.e},I(sv,"ElkConnectableShapeImpl",741),D(326,739,{110:1,342:1,74:1,167:1,326:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},TI),h.Ah=function(t){return gxe(this,t)},h.Lh=function(t,n,r){switch(t){case 3:return WO(this);case 4:return!this.b&&(this.b=new Ln(_r,this,4,7)),this.b;case 5:return!this.c&&(this.c=new Ln(_r,this,5,8)),this.c;case 6:return!this.a&&(this.a=new nt(cs,this,6,6)),this.a;case 7:return Hn(),!this.b&&(this.b=new Ln(_r,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new Ln(_r,this,5,8)),this.c.i<=1));case 8:return Hn(),!!qA(this);case 9:return Hn(),!!qw(this);case 10:return Hn(),!this.b&&(this.b=new Ln(_r,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new Ln(_r,this,5,8)),this.c.i!=0)}return d8e(this,t,n,r)},h.Sh=function(t,n,r){var a;switch(n){case 3:return this.Cb&&(r=(a=this.Db>>16,a>=0?gxe(this,r):this.Cb.Th(this,-1-a,null,r))),Yye(this,l(t,27),r);case 4:return!this.b&&(this.b=new Ln(_r,this,4,7)),Ru(this.b,t,r);case 5:return!this.c&&(this.c=new Ln(_r,this,5,8)),Ru(this.c,t,r);case 6:return!this.a&&(this.a=new nt(cs,this,6,6)),Ru(this.a,t,r)}return Mue(this,t,n,r)},h.Uh=function(t,n,r){switch(n){case 3:return Yye(this,null,r);case 4:return!this.b&&(this.b=new Ln(_r,this,4,7)),To(this.b,t,r);case 5:return!this.c&&(this.c=new Ln(_r,this,5,8)),To(this.c,t,r);case 6:return!this.a&&(this.a=new nt(cs,this,6,6)),To(this.a,t,r)}return dce(this,t,n,r)},h.Wh=function(t){switch(t){case 3:return!!WO(this);case 4:return!!this.b&&this.b.i!=0;case 5:return!!this.c&&this.c.i!=0;case 6:return!!this.a&&this.a.i!=0;case 7:return!this.b&&(this.b=new Ln(_r,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new Ln(_r,this,5,8)),this.c.i<=1));case 8:return qA(this);case 9:return qw(this);case 10:return!this.b&&(this.b=new Ln(_r,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new Ln(_r,this,5,8)),this.c.i!=0)}return _7e(this,t)},h.bi=function(t,n){switch(t){case 3:AU(this,l(n,27));return;case 4:!this.b&&(this.b=new Ln(_r,this,4,7)),$r(this.b),!this.b&&(this.b=new Ln(_r,this,4,7)),As(this.b,l(n,16));return;case 5:!this.c&&(this.c=new Ln(_r,this,5,8)),$r(this.c),!this.c&&(this.c=new Ln(_r,this,5,8)),As(this.c,l(n,16));return;case 6:!this.a&&(this.a=new nt(cs,this,6,6)),$r(this.a),!this.a&&(this.a=new nt(cs,this,6,6)),As(this.a,l(n,16));return}Txe(this,t,n)},h.ii=function(){return su(),fPe},h.ki=function(t){switch(t){case 3:AU(this,null);return;case 4:!this.b&&(this.b=new Ln(_r,this,4,7)),$r(this.b);return;case 5:!this.c&&(this.c=new Ln(_r,this,5,8)),$r(this.c);return;case 6:!this.a&&(this.a=new nt(cs,this,6,6)),$r(this.a);return}i8e(this,t)},h.Ib=function(){return evt(this)},I(sv,"ElkEdgeImpl",326),D(452,2083,{110:1,342:1,166:1,452:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},rk),h.Ah=function(t){return lxe(this,t)},h.Lh=function(t,n,r){switch(t){case 1:return this.j;case 2:return this.k;case 3:return this.b;case 4:return this.c;case 5:return!this.a&&(this.a=new Ys(qh,this,5)),this.a;case 6:return lot(this);case 7:return n?oue(this):this.i;case 8:return n?aue(this):this.f;case 9:return!this.g&&(this.g=new Ln(cs,this,9,10)),this.g;case 10:return!this.e&&(this.e=new Ln(cs,this,10,9)),this.e;case 11:return this.d}return sxe(this,t,n,r)},h.Sh=function(t,n,r){var a,o,f;switch(n){case 6:return this.Cb&&(r=(o=this.Db>>16,o>=0?lxe(this,r):this.Cb.Th(this,-1-o,null,r))),Wye(this,l(t,74),r);case 9:return!this.g&&(this.g=new Ln(cs,this,9,10)),Ru(this.g,t,r);case 10:return!this.e&&(this.e=new Ln(cs,this,10,9)),Ru(this.e,t,r)}return f=l(Mn((a=l(Kn(this,16),29),a||(su(),pY)),n),69),f.wk().zk(this,Ku(this),n-yr((su(),pY)),t,r)},h.Uh=function(t,n,r){switch(n){case 5:return!this.a&&(this.a=new Ys(qh,this,5)),To(this.a,t,r);case 6:return Wye(this,null,r);case 9:return!this.g&&(this.g=new Ln(cs,this,9,10)),To(this.g,t,r);case 10:return!this.e&&(this.e=new Ln(cs,this,10,9)),To(this.e,t,r)}return Wxe(this,t,n,r)},h.Wh=function(t){switch(t){case 1:return this.j!=0;case 2:return this.k!=0;case 3:return this.b!=0;case 4:return this.c!=0;case 5:return!!this.a&&this.a.i!=0;case 6:return!!lot(this);case 7:return!!this.i;case 8:return!!this.f;case 9:return!!this.g&&this.g.i!=0;case 10:return!!this.e&&this.e.i!=0;case 11:return this.d!=null}return Z5e(this,t)},h.bi=function(t,n){switch(t){case 1:oE(this,ze(Ge(n)));return;case 2:uE(this,ze(Ge(n)));return;case 3:aE(this,ze(Ge(n)));return;case 4:cE(this,ze(Ge(n)));return;case 5:!this.a&&(this.a=new Ys(qh,this,5)),$r(this.a),!this.a&&(this.a=new Ys(qh,this,5)),As(this.a,l(n,16));return;case 6:Z2t(this,l(n,74));return;case 7:yV(this,l(n,84));return;case 8:wV(this,l(n,84));return;case 9:!this.g&&(this.g=new Ln(cs,this,9,10)),$r(this.g),!this.g&&(this.g=new Ln(cs,this,9,10)),As(this.g,l(n,16));return;case 10:!this.e&&(this.e=new Ln(cs,this,10,9)),$r(this.e),!this.e&&(this.e=new Ln(cs,this,10,9)),As(this.e,l(n,16));return;case 11:p7e(this,ei(n));return}V7e(this,t,n)},h.ii=function(){return su(),pY},h.ki=function(t){switch(t){case 1:oE(this,0);return;case 2:uE(this,0);return;case 3:aE(this,0);return;case 4:cE(this,0);return;case 5:!this.a&&(this.a=new Ys(qh,this,5)),$r(this.a);return;case 6:Z2t(this,null);return;case 7:yV(this,null);return;case 8:wV(this,null);return;case 9:!this.g&&(this.g=new Ln(cs,this,9,10)),$r(this.g);return;case 10:!this.e&&(this.e=new Ln(cs,this,10,9)),$r(this.e);return;case 11:p7e(this,null);return}O7e(this,t)},h.Ib=function(){return d2t(this)},h.b=0,h.c=0,h.d=null,h.j=0,h.k=0,I(sv,"ElkEdgeSectionImpl",452),D(158,120,{110:1,94:1,93:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1}),h.Lh=function(t,n,r){var a;return t==0?(!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab):sf(this,t-yr(this.ii()),Mn((a=l(Kn(this,16),29),a||this.ii()),t),n,r)},h.Sh=function(t,n,r){var a,o;return n==0?(!this.Ab&&(this.Ab=new nt(mi,this,0,3)),Ru(this.Ab,t,r)):(o=l(Mn((a=l(Kn(this,16),29),a||this.ii()),n),69),o.wk().zk(this,Ku(this),n-yr(this.ii()),t,r))},h.Uh=function(t,n,r){var a,o;return n==0?(!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r)):(o=l(Mn((a=l(Kn(this,16),29),a||this.ii()),n),69),o.wk().Ak(this,Ku(this),n-yr(this.ii()),t,r))},h.Wh=function(t){var n;return t==0?!!this.Ab&&this.Ab.i!=0:nf(this,t-yr(this.ii()),Mn((n=l(Kn(this,16),29),n||this.ii()),t))},h.Zh=function(t){return Hke(this,t)},h.bi=function(t,n){var r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return}uf(this,t-yr(this.ii()),Mn((r=l(Kn(this,16),29),r||this.ii()),t),n)},h.di=function(t){px(this,128,t)},h.ii=function(){return Tn(),H_t},h.ki=function(t){var n;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return}cf(this,t-yr(this.ii()),Mn((n=l(Kn(this,16),29),n||this.ii()),t))},h.pi=function(){this.Bb|=1},h.qi=function(t){return YA(this,t)},h.Bb=0,I(Gn,"EModelElementImpl",158),D(720,158,{110:1,94:1,93:1,480:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1},fz),h.ri=function(t,n){return Lvt(this,t,n)},h.si=function(t){var n,r,a,o,f;if(this.a!=Ah(t)||t.Bb&256)throw ue(new Yn(qfe+t.zb+t3));for(a=dc(t);du(a.a).i!=0;){if(r=l(mP(a,0,(n=l(Oe(du(a.a),0),89),f=n.c,De(f,90)?l(f,29):(Tn(),Kf))),29),zw(r))return o=Ah(r).wi().si(r),l(o,54).ci(t),o;a=dc(r)}return(t.D!=null?t.D:t.B)=="java.util.Map$Entry"?new Git(t):new F4e(t)},h.ti=function(t,n){return Kw(this,t,n)},h.Lh=function(t,n,r){var a;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.a}return sf(this,t-yr((Tn(),em)),Mn((a=l(Kn(this,16),29),a||em),t),n,r)},h.Sh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),Ru(this.Ab,t,r);case 1:return this.a&&(r=l(this.a,54).Th(this,4,u1,r)),r8e(this,l(t,241),r)}return o=l(Mn((a=l(Kn(this,16),29),a||(Tn(),em)),n),69),o.wk().zk(this,Ku(this),n-yr((Tn(),em)),t,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 1:return r8e(this,null,r)}return o=l(Mn((a=l(Kn(this,16),29),a||(Tn(),em)),n),69),o.wk().Ak(this,Ku(this),n-yr((Tn(),em)),t,r)},h.Wh=function(t){var n;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return!!this.a}return nf(this,t-yr((Tn(),em)),Mn((n=l(Kn(this,16),29),n||em),t))},h.bi=function(t,n){var r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:Xgt(this,l(n,241));return}uf(this,t-yr((Tn(),em)),Mn((r=l(Kn(this,16),29),r||em),t),n)},h.ii=function(){return Tn(),em},h.ki=function(t){var n;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:Xgt(this,null);return}cf(this,t-yr((Tn(),em)),Mn((n=l(Kn(this,16),29),n||em),t))};var jM,bPe,S_t;I(Gn,"EFactoryImpl",720),D(1037,720,{110:1,2113:1,94:1,93:1,480:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1},ik),h.ri=function(t,n){switch(t.hk()){case 12:return l(n,149).Pg();case 13:return xc(n);default:throw ue(new Yn(yT+t.xe()+t3))}},h.si=function(t){var n,r,a,o,f,g,w,E;switch(t.G==-1&&(t.G=(n=Ah(t),n?f2(n.vi(),t):-1)),t.G){case 4:return f=new sk,f;case 6:return g=new a_,g;case 7:return w=new jwe,w;case 8:return a=new TI,a;case 9:return r=new AS,r;case 10:return o=new rk,o;case 11:return E=new k$,E;default:throw ue(new Yn(qfe+t.zb+t3))}},h.ti=function(t,n){switch(t.hk()){case 13:case 12:return null;default:throw ue(new Yn(yT+t.xe()+t3))}},I(sv,"ElkGraphFactoryImpl",1037),D(448,158,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1}),h.Gh=function(){var t,n;return n=(t=l(Kn(this,16),29),j5e(Sd(t||this.ii()))),n==null?(w_(),w_(),rpe):new prt(this,n)},h.Lh=function(t,n,r){var a;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.xe()}return sf(this,t-yr(this.ii()),Mn((a=l(Kn(this,16),29),a||this.ii()),t),n,r)},h.Wh=function(t){var n;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null}return nf(this,t-yr(this.ii()),Mn((n=l(Kn(this,16),29),n||this.ii()),t))},h.bi=function(t,n){var r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:this.ui(ei(n));return}uf(this,t-yr(this.ii()),Mn((r=l(Kn(this,16),29),r||this.ii()),t),n)},h.ii=function(){return Tn(),V_t},h.ki=function(t){var n;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:this.ui(null);return}cf(this,t-yr(this.ii()),Mn((n=l(Kn(this,16),29),n||this.ii()),t))},h.xe=function(){return this.zb},h.ui=function(t){Fu(this,t)},h.Ib=function(){return CA(this)},h.zb=null,I(Gn,"ENamedElementImpl",448),D(184,448,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1},qat),h.Ah=function(t){return ogt(this,t)},h.Lh=function(t,n,r){var a;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.yb;case 3:return this.xb;case 4:return this.sb;case 5:return!this.rb&&(this.rb=new wy(this,l1,this)),this.rb;case 6:return!this.vb&&(this.vb=new V8(u1,this,6,7)),this.vb;case 7:return n?this.Db>>16==7?l(this.Cb,241):null:mot(this)}return sf(this,t-yr((Tn(),O2)),Mn((a=l(Kn(this,16),29),a||O2),t),n,r)},h.Sh=function(t,n,r){var a,o,f;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),Ru(this.Ab,t,r);case 4:return this.sb&&(r=l(this.sb,54).Th(this,1,RM,r)),a8e(this,l(t,480),r);case 5:return!this.rb&&(this.rb=new wy(this,l1,this)),Ru(this.rb,t,r);case 6:return!this.vb&&(this.vb=new V8(u1,this,6,7)),Ru(this.vb,t,r);case 7:return this.Cb&&(r=(o=this.Db>>16,o>=0?ogt(this,r):this.Cb.Th(this,-1-o,null,r))),Nh(this,t,7,r)}return f=l(Mn((a=l(Kn(this,16),29),a||(Tn(),O2)),n),69),f.wk().zk(this,Ku(this),n-yr((Tn(),O2)),t,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 4:return a8e(this,null,r);case 5:return!this.rb&&(this.rb=new wy(this,l1,this)),To(this.rb,t,r);case 6:return!this.vb&&(this.vb=new V8(u1,this,6,7)),To(this.vb,t,r);case 7:return Nh(this,null,7,r)}return o=l(Mn((a=l(Kn(this,16),29),a||(Tn(),O2)),n),69),o.wk().Ak(this,Ku(this),n-yr((Tn(),O2)),t,r)},h.Wh=function(t){var n;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.yb!=null;case 3:return this.xb!=null;case 4:return!!this.sb;case 5:return!!this.rb&&this.rb.i!=0;case 6:return!!this.vb&&this.vb.i!=0;case 7:return!!mot(this)}return nf(this,t-yr((Tn(),O2)),Mn((n=l(Kn(this,16),29),n||O2),t))},h.Zh=function(t){var n;return n=wCn(this,t),n||Hke(this,t)},h.bi=function(t,n){var r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:Fu(this,ei(n));return;case 2:SV(this,ei(n));return;case 3:CV(this,ei(n));return;case 4:Nue(this,l(n,480));return;case 5:!this.rb&&(this.rb=new wy(this,l1,this)),$r(this.rb),!this.rb&&(this.rb=new wy(this,l1,this)),As(this.rb,l(n,16));return;case 6:!this.vb&&(this.vb=new V8(u1,this,6,7)),$r(this.vb),!this.vb&&(this.vb=new V8(u1,this,6,7)),As(this.vb,l(n,16));return}uf(this,t-yr((Tn(),O2)),Mn((r=l(Kn(this,16),29),r||O2),t),n)},h.ei=function(t){var n,r;if(t&&this.rb)for(r=new or(this.rb);r.e!=r.i.gc();)n=gr(r),De(n,364)&&(l(n,364).w=null);px(this,64,t)},h.ii=function(){return Tn(),O2},h.ki=function(t){var n;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:Fu(this,null);return;case 2:SV(this,null);return;case 3:CV(this,null);return;case 4:Nue(this,null);return;case 5:!this.rb&&(this.rb=new wy(this,l1,this)),$r(this.rb);return;case 6:!this.vb&&(this.vb=new V8(u1,this,6,7)),$r(this.vb);return}cf(this,t-yr((Tn(),O2)),Mn((n=l(Kn(this,16),29),n||O2),t))},h.pi=function(){yue(this)},h.vi=function(){return!this.rb&&(this.rb=new wy(this,l1,this)),this.rb},h.wi=function(){return this.sb},h.xi=function(){return this.ub},h.yi=function(){return this.xb},h.zi=function(){return this.yb},h.Ai=function(t){this.ub=t},h.Ib=function(){var t;return this.Db&64?CA(this):(t=new Af(CA(this)),t.a+=" (nsURI: ",Xo(t,this.yb),t.a+=", nsPrefix: ",Xo(t,this.xb),t.a+=")",t.a)},h.xb=null,h.yb=null,I(Gn,"EPackageImpl",184),D(569,184,{110:1,2115:1,569:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1},k2t),h.q=!1,h.r=!1;var __t=!1;I(sv,"ElkGraphPackageImpl",569),D(366,740,{110:1,342:1,167:1,135:1,422:1,366:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},sk),h.Ah=function(t){return hxe(this,t)},h.Lh=function(t,n,r){switch(t){case 7:return vot(this);case 8:return this.a}return x8e(this,t,n,r)},h.Sh=function(t,n,r){var a;switch(n){case 7:return this.Cb&&(r=(a=this.Db>>16,a>=0?hxe(this,r):this.Cb.Th(this,-1-a,null,r))),J4e(this,l(t,167),r)}return Mue(this,t,n,r)},h.Uh=function(t,n,r){return n==7?J4e(this,null,r):dce(this,t,n,r)},h.Wh=function(t){switch(t){case 7:return!!vot(this);case 8:return!vn("",this.a)}return _8e(this,t)},h.bi=function(t,n){switch(t){case 7:U9e(this,l(n,167));return;case 8:l7e(this,ei(n));return}Cxe(this,t,n)},h.ii=function(){return su(),dPe},h.ki=function(t){switch(t){case 7:U9e(this,null);return;case 8:l7e(this,"");return}N8e(this,t)},h.Ib=function(){return lpt(this)},h.a="",I(sv,"ElkLabelImpl",366),D(207,741,{110:1,342:1,84:1,167:1,27:1,422:1,207:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},a_),h.Ah=function(t){return pxe(this,t)},h.Lh=function(t,n,r){switch(t){case 9:return!this.c&&(this.c=new nt(Hl,this,9,9)),this.c;case 10:return!this.a&&(this.a=new nt(Ai,this,10,11)),this.a;case 11:return ds(this);case 12:return!this.b&&(this.b=new nt(js,this,12,3)),this.b;case 13:return Hn(),!this.a&&(this.a=new nt(Ai,this,10,11)),this.a.i>0}return J8e(this,t,n,r)},h.Sh=function(t,n,r){var a;switch(n){case 9:return!this.c&&(this.c=new nt(Hl,this,9,9)),Ru(this.c,t,r);case 10:return!this.a&&(this.a=new nt(Ai,this,10,11)),Ru(this.a,t,r);case 11:return this.Cb&&(r=(a=this.Db>>16,a>=0?pxe(this,r):this.Cb.Th(this,-1-a,null,r))),s4e(this,l(t,27),r);case 12:return!this.b&&(this.b=new nt(js,this,12,3)),Ru(this.b,t,r)}return vxe(this,t,n,r)},h.Uh=function(t,n,r){switch(n){case 9:return!this.c&&(this.c=new nt(Hl,this,9,9)),To(this.c,t,r);case 10:return!this.a&&(this.a=new nt(Ai,this,10,11)),To(this.a,t,r);case 11:return s4e(this,null,r);case 12:return!this.b&&(this.b=new nt(js,this,12,3)),To(this.b,t,r)}return wxe(this,t,n,r)},h.Wh=function(t){switch(t){case 9:return!!this.c&&this.c.i!=0;case 10:return!!this.a&&this.a.i!=0;case 11:return!!ds(this);case 12:return!!this.b&&this.b.i!=0;case 13:return!this.a&&(this.a=new nt(Ai,this,10,11)),this.a.i>0}return H7e(this,t)},h.bi=function(t,n){switch(t){case 9:!this.c&&(this.c=new nt(Hl,this,9,9)),$r(this.c),!this.c&&(this.c=new nt(Hl,this,9,9)),As(this.c,l(n,16));return;case 10:!this.a&&(this.a=new nt(Ai,this,10,11)),$r(this.a),!this.a&&(this.a=new nt(Ai,this,10,11)),As(this.a,l(n,16));return;case 11:LU(this,l(n,27));return;case 12:!this.b&&(this.b=new nt(js,this,12,3)),$r(this.b),!this.b&&(this.b=new nt(js,this,12,3)),As(this.b,l(n,16));return}I9e(this,t,n)},h.ii=function(){return su(),gPe},h.ki=function(t){switch(t){case 9:!this.c&&(this.c=new nt(Hl,this,9,9)),$r(this.c);return;case 10:!this.a&&(this.a=new nt(Ai,this,10,11)),$r(this.a);return;case 11:LU(this,null);return;case 12:!this.b&&(this.b=new nt(js,this,12,3)),$r(this.b);return}K8e(this,t)},h.Ib=function(){return oke(this)},I(sv,"ElkNodeImpl",207),D(193,741,{110:1,342:1,84:1,167:1,123:1,422:1,193:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},jwe),h.Ah=function(t){return fxe(this,t)},h.Lh=function(t,n,r){return t==9?M1(this):J8e(this,t,n,r)},h.Sh=function(t,n,r){var a;switch(n){case 9:return this.Cb&&(r=(a=this.Db>>16,a>=0?fxe(this,r):this.Cb.Th(this,-1-a,null,r))),Xye(this,l(t,27),r)}return vxe(this,t,n,r)},h.Uh=function(t,n,r){return n==9?Xye(this,null,r):wxe(this,t,n,r)},h.Wh=function(t){return t==9?!!M1(this):H7e(this,t)},h.bi=function(t,n){switch(t){case 9:z9e(this,l(n,27));return}I9e(this,t,n)},h.ii=function(){return su(),pPe},h.ki=function(t){switch(t){case 9:z9e(this,null);return}K8e(this,t)},h.Ib=function(){return Jbt(this)},I(sv,"ElkPortImpl",193);var A_t=ks(So,"BasicEMap/Entry");D(1122,120,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1,119:1,120:1},k$),h.Fb=function(t){return this===t},h.ld=function(){return this.b},h.Hb=function(){return fw(this)},h.Di=function(t){h7e(this,l(t,149))},h.Lh=function(t,n,r){switch(t){case 0:return this.b;case 1:return this.c}return rU(this,t,n,r)},h.Wh=function(t){switch(t){case 0:return!!this.b;case 1:return this.c!=null}return nue(this,t)},h.bi=function(t,n){switch(t){case 0:h7e(this,l(n,149));return;case 1:u7e(this,n);return}$ue(this,t,n)},h.ii=function(){return su(),Cg},h.ki=function(t){switch(t){case 0:h7e(this,null);return;case 1:u7e(this,null);return}Fue(this,t)},h.Bi=function(){var t;return this.a==-1&&(t=this.b,this.a=t?es(t):0),this.a},h.md=function(){return this.c},h.Ci=function(t){this.a=t},h.nd=function(t){var n;return n=this.c,u7e(this,t),n},h.Ib=function(){var t;return this.Db&64?g0(this):(t=new tb,hi(hi(hi(t,this.b?this.b.Pg():ul),Phe),j_(this.c)),t.a)},h.a=-1,h.c=null;var L2=I(sv,"ElkPropertyToValueMapEntryImpl",1122);D(996,1,{},T$),I(no,"JsonAdapter",996),D(216,63,lp,dd),I(no,"JsonImportException",216),D(868,1,{},cgt),I(no,"JsonImporter",868),D(903,1,{},ptt),I(no,"JsonImporter/lambda$0$Type",903),D(904,1,{},btt),I(no,"JsonImporter/lambda$1$Type",904),D(912,1,{},FXe),I(no,"JsonImporter/lambda$10$Type",912),D(914,1,{},mtt),I(no,"JsonImporter/lambda$11$Type",914),D(915,1,{},vtt),I(no,"JsonImporter/lambda$12$Type",915),D(921,1,{},Mat),I(no,"JsonImporter/lambda$13$Type",921),D(920,1,{},Dat),I(no,"JsonImporter/lambda$14$Type",920),D(916,1,{},wtt),I(no,"JsonImporter/lambda$15$Type",916),D(917,1,{},ytt),I(no,"JsonImporter/lambda$16$Type",917),D(918,1,{},xtt),I(no,"JsonImporter/lambda$17$Type",918),D(919,1,{},ktt),I(no,"JsonImporter/lambda$18$Type",919),D(924,1,{},RXe),I(no,"JsonImporter/lambda$19$Type",924),D(905,1,{},jXe),I(no,"JsonImporter/lambda$2$Type",905),D(922,1,{},$Xe),I(no,"JsonImporter/lambda$20$Type",922),D(923,1,{},zXe),I(no,"JsonImporter/lambda$21$Type",923),D(927,1,{},qXe),I(no,"JsonImporter/lambda$22$Type",927),D(925,1,{},HXe),I(no,"JsonImporter/lambda$23$Type",925),D(926,1,{},VXe),I(no,"JsonImporter/lambda$24$Type",926),D(929,1,{},UXe),I(no,"JsonImporter/lambda$25$Type",929),D(928,1,{},GXe),I(no,"JsonImporter/lambda$26$Type",928),D(930,1,fr,Ett),h.Cd=function(t){Ovn(this.b,this.a,ei(t))},I(no,"JsonImporter/lambda$27$Type",930),D(931,1,fr,Ttt),h.Cd=function(t){Nvn(this.b,this.a,ei(t))},I(no,"JsonImporter/lambda$28$Type",931),D(932,1,{},Ctt),I(no,"JsonImporter/lambda$29$Type",932),D(908,1,{},KXe),I(no,"JsonImporter/lambda$3$Type",908),D(933,1,{},Stt),I(no,"JsonImporter/lambda$30$Type",933),D(934,1,{},WXe),I(no,"JsonImporter/lambda$31$Type",934),D(935,1,{},YXe),I(no,"JsonImporter/lambda$32$Type",935),D(936,1,{},XXe),I(no,"JsonImporter/lambda$33$Type",936),D(937,1,{},QXe),I(no,"JsonImporter/lambda$34$Type",937),D(870,1,{},JXe),I(no,"JsonImporter/lambda$35$Type",870),D(941,1,{},yit),I(no,"JsonImporter/lambda$36$Type",941),D(938,1,fr,ZXe),h.Cd=function(t){jmn(this.a,l(t,377))},I(no,"JsonImporter/lambda$37$Type",938),D(939,1,fr,_tt),h.Cd=function(t){yln(this.a,this.b,l(t,166))},I(no,"JsonImporter/lambda$38$Type",939),D(940,1,fr,Att),h.Cd=function(t){xln(this.a,this.b,l(t,166))},I(no,"JsonImporter/lambda$39$Type",940),D(906,1,{},eQe),I(no,"JsonImporter/lambda$4$Type",906),D(942,1,fr,tQe),h.Cd=function(t){$mn(this.a,l(t,8))},I(no,"JsonImporter/lambda$40$Type",942),D(907,1,{},nQe),I(no,"JsonImporter/lambda$5$Type",907),D(911,1,{},rQe),I(no,"JsonImporter/lambda$6$Type",911),D(909,1,{},iQe),I(no,"JsonImporter/lambda$7$Type",909),D(910,1,{},sQe),I(no,"JsonImporter/lambda$8$Type",910),D(913,1,{},aQe),I(no,"JsonImporter/lambda$9$Type",913),D(961,1,fr,oQe),h.Cd=function(t){J8(this.a,new yy(ei(t)))},I(no,"JsonMetaDataConverter/lambda$0$Type",961),D(962,1,fr,cQe),h.Cd=function(t){Dgn(this.a,l(t,245))},I(no,"JsonMetaDataConverter/lambda$1$Type",962),D(963,1,fr,uQe),h.Cd=function(t){M2n(this.a,l(t,143))},I(no,"JsonMetaDataConverter/lambda$2$Type",963),D(964,1,fr,lQe),h.Cd=function(t){Ign(this.a,l(t,170))},I(no,"JsonMetaDataConverter/lambda$3$Type",964),D(245,22,{3:1,34:1,22:1,245:1},R8);var bY,mY,Xge,vY,wY,yY,Qge,Jge,xY=Fr(IP,"GraphFeature",245,Hr,pwn,idn),L_t;D(11,1,{34:1,149:1},Ui,vs,pn,Ha),h.Fd=function(t){return Shn(this,l(t,149))},h.Fb=function(t){return eot(this,t)},h.Sg=function(){return It(this)},h.Pg=function(){return this.b},h.Hb=function(){return s2(this.b)},h.Ib=function(){return this.b},I(IP,"Property",11),D(671,1,ii,Nie),h.Ne=function(t,n){return B4n(this,l(t,96),l(n,96))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(IP,"PropertyHolderComparator",671),D(709,1,Oa,ywe),h.Nb=function(t){Za(this,t)},h.Pb=function(){return Fvn(this)},h.Qb=function(){aZe()},h.Ob=function(){return!!this.a},I(qG,"ElkGraphUtil/AncestorIterator",709);var mPe=ks(So,"EList");D(70,56,{20:1,31:1,56:1,16:1,15:1,70:1,61:1}),h.bd=function(t,n){_A(this,t,n)},h.Fc=function(t){return qr(this,t)},h.cd=function(t,n){return N7e(this,t,n)},h.Gc=function(t){return As(this,t)},h.Ii=function(){return new H8(this)},h.Ji=function(){return new CO(this)},h.Ki=function(t){return mN(this,t)},h.Li=function(){return!0},h.Mi=function(t,n){},h.Ni=function(){},h.Oi=function(t,n){Noe(this,t,n)},h.Pi=function(t,n,r){},h.Qi=function(t,n){},h.Ri=function(t,n,r){},h.Fb=function(t){return Bbt(this,t)},h.Hb=function(){return M7e(this)},h.Si=function(){return!1},h.Kc=function(){return new or(this)},h.ed=function(){return new q8(this)},h.fd=function(t){var n;if(n=this.gc(),t<0||t>n)throw ue(new my(t,n));return new jae(this,t)},h.Ui=function(t,n){this.Ti(t,this.dd(n))},h.Mc=function(t){return sV(this,t)},h.Wi=function(t,n){return n},h.hd=function(t,n){return n6(this,t,n)},h.Ib=function(){return T8e(this)},h.Yi=function(){return!0},h.Zi=function(t,n){return EE(this,n)},I(So,"AbstractEList",70),D(66,70,Bd,X2,Lw,T7e),h.Ei=function(t,n){return Due(this,t,n)},h.Fi=function(t){return Odt(this,t)},h.Gi=function(t,n){IN(this,t,n)},h.Hi=function(t){tN(this,t)},h.$i=function(t){return R6e(this,t)},h.$b=function(){uA(this)},h.Hc=function(t){return jE(this,t)},h.Xb=function(t){return Oe(this,t)},h._i=function(t){var n,r,a;++this.j,r=this.g==null?0:this.g.length,t>r&&(a=this.g,n=r+(r/2|0)+4,n=0?(this.gd(n),!0):!1},h.Xi=function(t,n){return this.Dj(t,this.Zi(t,n))},h.gc=function(){return this.Ej()},h.Pc=function(){return this.Fj()},h.Qc=function(t){return this.Gj(t)},h.Ib=function(){return this.Hj()},I(So,"DelegatingEList",2093),D(2094,2093,J4t),h.Ei=function(t,n){return wke(this,t,n)},h.Fi=function(t){return this.Ei(this.Ej(),t)},h.Gi=function(t,n){E2t(this,t,n)},h.Hi=function(t){h2t(this,t)},h.Li=function(){return!this.Mj()},h.$b=function(){tL(this)},h.Ij=function(t,n,r,a,o){return new Zat(this,t,n,r,a,o)},h.Jj=function(t){Ni(this.jj(),t)},h.Kj=function(){return null},h.Lj=function(){return-1},h.jj=function(){return null},h.Mj=function(){return!1},h.Nj=function(t,n){return n},h.Oj=function(t,n){return n},h.Pj=function(){return!1},h.Qj=function(){return!this.Aj()},h.Ti=function(t,n){var r,a;return this.Pj()?(a=this.Qj(),r=Uxe(this,t,n),this.Jj(this.Ij(7,pt(n),r,t,a)),r):Uxe(this,t,n)},h.gd=function(t){var n,r,a,o;return this.Pj()?(r=null,a=this.Qj(),n=this.Ij(4,o=rH(this,t),null,t,a),this.Mj()&&o?(r=this.Oj(o,r),r?(r.nj(n),r.oj()):this.Jj(n)):r?(r.nj(n),r.oj()):this.Jj(n),o):(o=rH(this,t),this.Mj()&&o&&(r=this.Oj(o,null),r&&r.oj()),o)},h.Xi=function(t,n){return Mmt(this,t,n)},I(Rx,"DelegatingNotifyingListImpl",2094),D(152,1,YP),h.nj=function(t){return Mxe(this,t)},h.oj=function(){qoe(this)},h.gj=function(){return this.d},h.Kj=function(){return null},h.Rj=function(){return null},h.hj=function(t){return-1},h.ij=function(){return mbt(this)},h.jj=function(){return null},h.kj=function(){return X9e(this)},h.lj=function(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o},h.Sj=function(){return!1},h.mj=function(t){var n,r,a,o,f,g,w,E,C,L,B;switch(this.d){case 1:case 2:switch(o=t.gj(),o){case 1:case 2:if(f=t.jj(),qe(f)===qe(this.jj())&&this.hj(null)==t.hj(null))return this.g=t.ij(),t.gj()==1&&(this.d=1),!0}case 4:{switch(o=t.gj(),o){case 4:{if(f=t.jj(),qe(f)===qe(this.jj())&&this.hj(null)==t.hj(null))return C=Bke(this),E=this.o<0?this.o<-2?-2-this.o-1:-1:this.o,g=t.lj(),this.d=6,B=new Lw(2),E<=g?(qr(B,this.n),qr(B,t.kj()),this.g=he(le(Vr,1),di,28,15,[this.o=E,g+1])):(qr(B,t.kj()),qr(B,this.n),this.g=he(le(Vr,1),di,28,15,[this.o=g,E])),this.n=B,C||(this.o=-2-this.o-1),!0;break}}break}case 6:{switch(o=t.gj(),o){case 4:{if(f=t.jj(),qe(f)===qe(this.jj())&&this.hj(null)==t.hj(null)){for(C=Bke(this),g=t.lj(),L=l(this.g,53),a=We(Vr,di,28,L.length+1,15,1),n=0;n>>0,n.toString(16))),a.a+=" (eventType: ",this.d){case 1:{a.a+="SET";break}case 2:{a.a+="UNSET";break}case 3:{a.a+="ADD";break}case 5:{a.a+="ADD_MANY";break}case 4:{a.a+="REMOVE";break}case 6:{a.a+="REMOVE_MANY";break}case 7:{a.a+="MOVE";break}case 8:{a.a+="REMOVING_ADAPTER";break}case 9:{a.a+="RESOLVE";break}default:{ise(a,this.d);break}}if(imt(this)&&(a.a+=", touch: true"),a.a+=", position: ",ise(a,this.o<0?this.o<-2?-2-this.o-1:-1:this.o),a.a+=", notifier: ",O_(a,this.jj()),a.a+=", feature: ",O_(a,this.Kj()),a.a+=", oldValue: ",O_(a,X9e(this)),a.a+=", newValue: ",this.d==6&&De(this.g,53)){for(r=l(this.g,53),a.a+="[",t=0;t10?((!this.b||this.c.j!=this.a)&&(this.b=new U_(this),this.a=this.j),W0(this.b,t)):jE(this,t)},h.Yi=function(){return!0},h.a=0,I(So,"AbstractEList/1",966),D(302,77,she,my),I(So,"AbstractEList/BasicIndexOutOfBoundsException",302),D(37,1,Oa,or),h.Nb=function(t){Za(this,t)},h.Xj=function(){if(this.i.j!=this.f)throw ue(new Xh)},h.Yj=function(){return gr(this)},h.Ob=function(){return this.e!=this.i.gc()},h.Pb=function(){return this.Yj()},h.Qb=function(){jA(this)},h.e=0,h.f=0,h.g=-1,I(So,"AbstractEList/EIterator",37),D(286,37,lg,q8,jae),h.Qb=function(){jA(this)},h.Rb=function(t){D1t(this,t)},h.Zj=function(){var t;try{return t=this.d.Xb(--this.e),this.Xj(),this.g=this.e,t}catch(n){throw n=bs(n),De(n,77)?(this.Xj(),ue(new _c)):ue(n)}},h.$j=function(t){Bdt(this,t)},h.Sb=function(){return this.e!=0},h.Tb=function(){return this.e},h.Ub=function(){return this.Zj()},h.Vb=function(){return this.e-1},h.Wb=function(t){this.$j(t)},I(So,"AbstractEList/EListIterator",286),D(355,37,Oa,H8),h.Yj=function(){return rue(this)},h.Qb=function(){throw ue(new Qr)},I(So,"AbstractEList/NonResolvingEIterator",355),D(398,286,lg,CO,f4e),h.Rb=function(t){throw ue(new Qr)},h.Yj=function(){var t;try{return t=this.c.Vi(this.e),this.Xj(),this.g=this.e++,t}catch(n){throw n=bs(n),De(n,77)?(this.Xj(),ue(new _c)):ue(n)}},h.Zj=function(){var t;try{return t=this.c.Vi(--this.e),this.Xj(),this.g=this.e,t}catch(n){throw n=bs(n),De(n,77)?(this.Xj(),ue(new _c)):ue(n)}},h.Qb=function(){throw ue(new Qr)},h.Wb=function(t){throw ue(new Qr)},I(So,"AbstractEList/NonResolvingEListIterator",398),D(2080,70,Z4t),h.Ei=function(t,n){var r,a,o,f,g,w,E,C,L,B,z;if(o=n.gc(),o!=0){for(C=l(Kn(this.a,4),129),L=C==null?0:C.length,z=L+o,a=Sce(this,z),B=L-t,B>0&&pu(C,t,a,t+o,B),E=n.Kc(),g=0;gr)throw ue(new my(t,r));return new xat(this,t)},h.$b=function(){var t,n;++this.j,t=l(Kn(this.a,4),129),n=t==null?0:t.length,PE(this,null),Noe(this,n,t)},h.Hc=function(t){var n,r,a,o,f;if(n=l(Kn(this.a,4),129),n!=null){if(t!=null){for(a=n,o=0,f=a.length;o=r)throw ue(new my(t,r));return n[t]},h.dd=function(t){var n,r,a;if(n=l(Kn(this.a,4),129),n!=null){if(t!=null){for(r=0,a=n.length;rr)throw ue(new my(t,r));return new yat(this,t)},h.Ti=function(t,n){var r,a,o;if(r=z1t(this),o=r==null?0:r.length,t>=o)throw ue(new tc(Qfe+t+av+o));if(n>=o)throw ue(new tc(Jfe+n+av+o));return a=r[n],t!=n&&(t0&&pu(t,0,n,0,r),n},h.Qc=function(t){var n,r,a;return n=l(Kn(this.a,4),129),a=n==null?0:n.length,a>0&&(t.lengtha&&Ts(t,a,null),t};var M_t;I(So,"ArrayDelegatingEList",2080),D(1051,37,Oa,kut),h.Xj=function(){if(this.b.j!=this.f||qe(l(Kn(this.b.a,4),129))!==qe(this.a))throw ue(new Xh)},h.Qb=function(){jA(this),this.a=l(Kn(this.b.a,4),129)},I(So,"ArrayDelegatingEList/EIterator",1051),D(722,286,lg,Nst,yat),h.Xj=function(){if(this.b.j!=this.f||qe(l(Kn(this.b.a,4),129))!==qe(this.a))throw ue(new Xh)},h.$j=function(t){Bdt(this,t),this.a=l(Kn(this.b.a,4),129)},h.Qb=function(){jA(this),this.a=l(Kn(this.b.a,4),129)},I(So,"ArrayDelegatingEList/EListIterator",722),D(1052,355,Oa,Eut),h.Xj=function(){if(this.b.j!=this.f||qe(l(Kn(this.b.a,4),129))!==qe(this.a))throw ue(new Xh)},I(So,"ArrayDelegatingEList/NonResolvingEIterator",1052),D(723,398,lg,Pst,xat),h.Xj=function(){if(this.b.j!=this.f||qe(l(Kn(this.b.a,4),129))!==qe(this.a))throw ue(new Xh)},I(So,"ArrayDelegatingEList/NonResolvingEListIterator",723),D(615,302,she,Vse),I(So,"BasicEList/BasicIndexOutOfBoundsException",615),D(710,66,Bd,eye),h.bd=function(t,n){throw ue(new Qr)},h.Fc=function(t){throw ue(new Qr)},h.cd=function(t,n){throw ue(new Qr)},h.Gc=function(t){throw ue(new Qr)},h.$b=function(){throw ue(new Qr)},h._i=function(t){throw ue(new Qr)},h.Kc=function(){return this.Ii()},h.ed=function(){return this.Ji()},h.fd=function(t){return this.Ki(t)},h.Ti=function(t,n){throw ue(new Qr)},h.Ui=function(t,n){throw ue(new Qr)},h.gd=function(t){throw ue(new Qr)},h.Mc=function(t){throw ue(new Qr)},h.hd=function(t,n){throw ue(new Qr)},I(So,"BasicEList/UnmodifiableEList",710),D(721,1,{3:1,20:1,16:1,15:1,61:1,597:1}),h.bd=function(t,n){ghn(this,t,l(n,44))},h.Fc=function(t){return ofn(this,l(t,44))},h.Jc=function(t){to(this,t)},h.Xb=function(t){return l(Oe(this.c,t),136)},h.Ti=function(t,n){return l(this.c.Ti(t,n),44)},h.Ui=function(t,n){phn(this,t,l(n,44))},h.Lc=function(){return new bn(null,new kn(this,16))},h.gd=function(t){return l(this.c.gd(t),44)},h.hd=function(t,n){return Mgn(this,t,l(n,44))},h.jd=function(t){$m(this,t)},h.Nc=function(){return new kn(this,16)},h.Oc=function(){return new bn(null,new kn(this,16))},h.cd=function(t,n){return this.c.cd(t,n)},h.Gc=function(t){return this.c.Gc(t)},h.$b=function(){this.c.$b()},h.Hc=function(t){return this.c.Hc(t)},h.Ic=function(t){return EN(this.c,t)},h._j=function(){var t,n,r;if(this.d==null){for(this.d=We(vPe,_Se,66,2*this.f+1,0,1),r=this.e,this.f=0,n=this.c.Kc();n.e!=n.i.gc();)t=l(n.Yj(),136),oU(this,t);this.e=r}},h.Fb=function(t){return cit(this,t)},h.Hb=function(){return M7e(this.c)},h.dd=function(t){return this.c.dd(t)},h.ak=function(){this.c=new hQe(this)},h.dc=function(){return this.f==0},h.Kc=function(){return this.c.Kc()},h.ed=function(){return this.c.ed()},h.fd=function(t){return this.c.fd(t)},h.bk=function(){return iN(this)},h.ck=function(t,n,r){return new xit(t,n,r)},h.dk=function(){return new S$},h.Mc=function(t){return Wht(this,t)},h.gc=function(){return this.f},h.kd=function(t,n){return new Zp(this.c,t,n)},h.Pc=function(){return this.c.Pc()},h.Qc=function(t){return this.c.Qc(t)},h.Ib=function(){return T8e(this.c)},h.e=0,h.f=0,I(So,"BasicEMap",721),D(1046,66,Bd,hQe),h.Mi=function(t,n){Gcn(this,l(n,136))},h.Pi=function(t,n,r){var a;++(a=this,l(n,136),a).a.e},h.Qi=function(t,n){Kcn(this,l(n,136))},h.Ri=function(t,n,r){Ghn(this,l(n,136),l(r,136))},h.Oi=function(t,n){zft(this.a)},I(So,"BasicEMap/1",1046),D(1047,66,Bd,S$),h.aj=function(t){return We(NOn,e5t,621,t,0,1)},I(So,"BasicEMap/2",1047),D(1048,q1,Tl,fQe),h.$b=function(){this.a.c.$b()},h.Hc=function(t){return Kce(this.a,t)},h.Kc=function(){return this.a.f==0?(Fk(),fF.a):new WJe(this.a)},h.Mc=function(t){var n;return n=this.a.f,YV(this.a,t),this.a.f!=n},h.gc=function(){return this.a.f},I(So,"BasicEMap/3",1048),D(1049,31,Wy,dQe),h.$b=function(){this.a.c.$b()},h.Hc=function(t){return Fbt(this.a,t)},h.Kc=function(){return this.a.f==0?(Fk(),fF.a):new YJe(this.a)},h.gc=function(){return this.a.f},I(So,"BasicEMap/4",1049),D(1050,q1,Tl,gQe),h.$b=function(){this.a.c.$b()},h.Hc=function(t){var n,r,a,o,f,g,w,E,C;if(this.a.f>0&&De(t,44)&&(this.a._j(),E=l(t,44),w=E.ld(),o=w==null?0:es(w),f=Qye(this.a,o),n=this.a.d[f],n)){for(r=l(n.g,379),C=n.i,g=0;g"+this.c},h.a=0;var NOn=I(So,"BasicEMap/EntryImpl",621);D(546,1,{},MS),I(So,"BasicEMap/View",546);var fF;D(783,1,{}),h.Fb=function(t){return O9e((Cn(),_o),t)},h.Hb=function(){return q7e((Cn(),_o))},h.Ib=function(){return Tb((Cn(),_o))},I(So,"ECollections/BasicEmptyUnmodifiableEList",783),D(1348,1,lg,Qne),h.Nb=function(t){Za(this,t)},h.Rb=function(t){throw ue(new Qr)},h.Ob=function(){return!1},h.Sb=function(){return!1},h.Pb=function(){throw ue(new _c)},h.Tb=function(){return 0},h.Ub=function(){throw ue(new _c)},h.Vb=function(){return-1},h.Qb=function(){throw ue(new Qr)},h.Wb=function(t){throw ue(new Qr)},I(So,"ECollections/BasicEmptyUnmodifiableEList/1",1348),D(1346,783,{20:1,16:1,15:1,61:1},iJe),h.bd=function(t,n){wZe()},h.Fc=function(t){return yZe()},h.cd=function(t,n){return xZe()},h.Gc=function(t){return kZe()},h.$b=function(){EZe()},h.Hc=function(t){return!1},h.Ic=function(t){return!1},h.Jc=function(t){to(this,t)},h.Xb=function(t){return rye((Cn(),t)),null},h.dd=function(t){return-1},h.dc=function(){return!0},h.Kc=function(){return this.a},h.ed=function(){return this.a},h.fd=function(t){return this.a},h.Ti=function(t,n){return TZe()},h.Ui=function(t,n){CZe()},h.Lc=function(){return new bn(null,new kn(this,16))},h.gd=function(t){return SZe()},h.Mc=function(t){return _Ze()},h.hd=function(t,n){return AZe()},h.gc=function(){return 0},h.jd=function(t){$m(this,t)},h.Nc=function(){return new kn(this,16)},h.Oc=function(){return new bn(null,new kn(this,16))},h.kd=function(t,n){return Cn(),new Zp(_o,t,n)},h.Pc=function(){return e5e((Cn(),_o))},h.Qc=function(t){return Cn(),PA(_o,t)},I(So,"ECollections/EmptyUnmodifiableEList",1346),D(1347,783,{20:1,16:1,15:1,61:1,597:1},sJe),h.bd=function(t,n){wZe()},h.Fc=function(t){return yZe()},h.cd=function(t,n){return xZe()},h.Gc=function(t){return kZe()},h.$b=function(){EZe()},h.Hc=function(t){return!1},h.Ic=function(t){return!1},h.Jc=function(t){to(this,t)},h.Xb=function(t){return rye((Cn(),t)),null},h.dd=function(t){return-1},h.dc=function(){return!0},h.Kc=function(){return this.a},h.ed=function(){return this.a},h.fd=function(t){return this.a},h.Ti=function(t,n){return TZe()},h.Ui=function(t,n){CZe()},h.Lc=function(){return new bn(null,new kn(this,16))},h.gd=function(t){return SZe()},h.Mc=function(t){return _Ze()},h.hd=function(t,n){return AZe()},h.gc=function(){return 0},h.jd=function(t){$m(this,t)},h.Nc=function(){return new kn(this,16)},h.Oc=function(){return new bn(null,new kn(this,16))},h.kd=function(t,n){return Cn(),new Zp(_o,t,n)},h.Pc=function(){return e5e((Cn(),_o))},h.Qc=function(t){return Cn(),PA(_o,t)},h.bk=function(){return Cn(),Cn(),mg},I(So,"ECollections/EmptyUnmodifiableEMap",1347);var yPe=ks(So,"Enumerator"),kY;D(288,1,{288:1},ele),h.Fb=function(t){var n;return this===t?!0:De(t,288)?(n=l(t,288),this.f==n.f&&Gdn(this.i,n.i)&&_ae(this.a,this.f&256?n.f&256?n.a:null:n.f&256?null:n.a)&&_ae(this.d,n.d)&&_ae(this.g,n.g)&&_ae(this.e,n.e)&&b6n(this,n)):!1},h.Hb=function(){return this.f},h.Ib=function(){return bmt(this)},h.f=0;var D_t=0,I_t=0,O_t=0,N_t=0,xPe=0,kPe=0,EPe=0,TPe=0,CPe=0,P_t,$M=0,zM=0,B_t=0,F_t=0,EY,SPe;I(So,"URI",288),D(1121,45,m6,aJe),h.zc=function(t,n){return l(rc(this,ei(t),l(n,288)),288)},I(So,"URI/URICache",1121),D(506,66,Bd,E$,uH),h.Si=function(){return!0},I(So,"UniqueEList",506),D(590,63,lp,nV),I(So,"WrappedException",590);var mi=ks(pf,r5t),M4=ks(pf,i5t),dl=ks(pf,s5t),D4=ks(pf,a5t),l1=ks(pf,o5t),Vf=ks(pf,"EClass"),tpe=ks(pf,"EDataType"),R_t;D(1233,45,m6,oJe),h.xc=function(t){return Ia(t)?xu(this,t):hc(zo(this.f,t))},I(pf,"EDataType/Internal/ConversionDelegate/Factory/Registry/Impl",1233);var TY=ks(pf,"EEnum"),wp=ks(pf,c5t),Wo=ks(pf,u5t),Uf=ks(pf,l5t),Gf,k3=ks(pf,h5t),I4=ks(pf,f5t);D(1042,1,{},Yne),h.Ib=function(){return"NIL"},I(pf,"EStructuralFeature/Internal/DynamicValueHolder/1",1042);var j_t;D(1041,45,m6,cJe),h.xc=function(t){return Ia(t)?xu(this,t):hc(zo(this.f,t))},I(pf,"EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl",1041);var Zu=ks(pf,d5t),o9=ks(pf,"EValidator/PatternMatcher"),_Pe,APe,Vn,M2,O4,Jb,$_t,z_t,q_t,Zb,D2,em,E3,td,H_t,V_t,Kf,I2,U_t,O2,N4,o7,No,G_t,K_t,T3,CY=ks(us,"FeatureMap/Entry");D(545,1,{76:1},Sq),h.Lk=function(){return this.a},h.md=function(){return this.b},I(Gn,"BasicEObjectImpl/1",545),D(1040,1,i0e,Itt),h.Fk=function(t){return Moe(this.a,this.b,t)},h.Qj=function(){return got(this.a,this.b)},h.Wb=function(t){q5e(this.a,this.b,t)},h.Gk=function(){Hgn(this.a,this.b)},I(Gn,"BasicEObjectImpl/4",1040),D(2081,1,{114:1}),h.Mk=function(t){this.e=t==0?W_t:We(wa,Rn,1,t,5,1)},h.li=function(t){return this.e[t]},h.mi=function(t,n){this.e[t]=n},h.ni=function(t){this.e[t]=null},h.Nk=function(){return this.c},h.Ok=function(){throw ue(new Qr)},h.Pk=function(){throw ue(new Qr)},h.Qk=function(){return this.d},h.Rk=function(){return this.e!=null},h.Sk=function(t){this.c=t},h.Tk=function(t){throw ue(new Qr)},h.Uk=function(t){throw ue(new Qr)},h.Vk=function(t){this.d=t};var W_t;I(Gn,"BasicEObjectImpl/EPropertiesHolderBaseImpl",2081),D(192,2081,{114:1},Sf),h.Ok=function(){return this.a},h.Pk=function(){return this.b},h.Tk=function(t){this.a=t},h.Uk=function(t){this.b=t},I(Gn,"BasicEObjectImpl/EPropertiesHolderImpl",192),D(516,99,g4t,m5),h.uh=function(){return this.f},h.zh=function(){return this.k},h.Bh=function(t,n){this.g=t,this.i=n},h.Dh=function(){return this.j&2?this.$h().Nk():this.ii()},h.Fh=function(){return this.i},h.wh=function(){return(this.j&1)!=0},h.Ph=function(){return this.g},h.Vh=function(){return(this.j&4)!=0},h.$h=function(){return!this.k&&(this.k=new Sf),this.k},h.ci=function(t){this.$h().Sk(t),t?this.j|=2:this.j&=-3},h.ei=function(t){this.$h().Uk(t),t?this.j|=4:this.j&=-5},h.ii=function(){return(lb(),Vn).S},h.i=0,h.j=1,I(Gn,"EObjectImpl",516),D(798,516,{110:1,94:1,93:1,58:1,114:1,54:1,99:1},F4e),h.li=function(t){return this.e[t]},h.mi=function(t,n){this.e[t]=n},h.ni=function(t){this.e[t]=null},h.Dh=function(){return this.d},h.Ih=function(t){return ms(this.d,t)},h.Kh=function(){return this.d},h.Oh=function(){return this.e!=null},h.$h=function(){return!this.k&&(this.k=new _$),this.k},h.ci=function(t){this.d=t},h.hi=function(){var t;return this.e==null&&(t=yr(this.d),this.e=t==0?Y_t:We(wa,Rn,1,t,5,1)),this},h.ji=function(){return 0};var Y_t;I(Gn,"DynamicEObjectImpl",798),D(1522,798,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1},Git),h.Fb=function(t){return this===t},h.Hb=function(){return fw(this)},h.ci=function(t){this.d=t,this.b=oP(t,"key"),this.c=oP(t,TL)},h.Bi=function(){var t;return this.a==-1&&(t=Hoe(this,this.b),this.a=t==null?0:es(t)),this.a},h.ld=function(){return Hoe(this,this.b)},h.md=function(){return Hoe(this,this.c)},h.Ci=function(t){this.a=t},h.Di=function(t){q5e(this,this.b,t)},h.nd=function(t){var n;return n=Hoe(this,this.c),q5e(this,this.c,t),n},h.a=0,I(Gn,"DynamicEObjectImpl/BasicEMapEntry",1522),D(1523,1,{114:1},_$),h.Mk=function(t){throw ue(new Qr)},h.li=function(t){throw ue(new Qr)},h.mi=function(t,n){throw ue(new Qr)},h.ni=function(t){throw ue(new Qr)},h.Nk=function(){throw ue(new Qr)},h.Ok=function(){return this.a},h.Pk=function(){return this.b},h.Qk=function(){return this.c},h.Rk=function(){throw ue(new Qr)},h.Sk=function(t){throw ue(new Qr)},h.Tk=function(t){this.a=t},h.Uk=function(t){this.b=t},h.Vk=function(t){this.c=t},I(Gn,"DynamicEObjectImpl/DynamicEPropertiesHolderImpl",1523),D(519,158,{110:1,94:1,93:1,598:1,155:1,58:1,114:1,54:1,99:1,519:1,158:1,119:1,120:1},CI),h.Ah=function(t){return dxe(this,t)},h.Lh=function(t,n,r){var a;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.d;case 2:return r?(!this.b&&(this.b=new dh((Tn(),No),Yc,this)),this.b):(!this.b&&(this.b=new dh((Tn(),No),Yc,this)),iN(this.b));case 3:return wot(this);case 4:return!this.a&&(this.a=new Ys(Xb,this,4)),this.a;case 5:return!this.c&&(this.c=new $5(Xb,this,5)),this.c}return sf(this,t-yr((Tn(),M2)),Mn((a=l(Kn(this,16),29),a||M2),t),n,r)},h.Sh=function(t,n,r){var a,o,f;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),Ru(this.Ab,t,r);case 3:return this.Cb&&(r=(o=this.Db>>16,o>=0?dxe(this,r):this.Cb.Th(this,-1-o,null,r))),Z4e(this,l(t,155),r)}return f=l(Mn((a=l(Kn(this,16),29),a||(Tn(),M2)),n),69),f.wk().zk(this,Ku(this),n-yr((Tn(),M2)),t,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 2:return!this.b&&(this.b=new dh((Tn(),No),Yc,this)),Uq(this.b,t,r);case 3:return Z4e(this,null,r);case 4:return!this.a&&(this.a=new Ys(Xb,this,4)),To(this.a,t,r)}return o=l(Mn((a=l(Kn(this,16),29),a||(Tn(),M2)),n),69),o.wk().Ak(this,Ku(this),n-yr((Tn(),M2)),t,r)},h.Wh=function(t){var n;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.d!=null;case 2:return!!this.b&&this.b.f!=0;case 3:return!!wot(this);case 4:return!!this.a&&this.a.i!=0;case 5:return!!this.c&&this.c.i!=0}return nf(this,t-yr((Tn(),M2)),Mn((n=l(Kn(this,16),29),n||M2),t))},h.bi=function(t,n){var r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:Odn(this,ei(n));return;case 2:!this.b&&(this.b=new dh((Tn(),No),Yc,this)),_V(this.b,n);return;case 3:ibt(this,l(n,155));return;case 4:!this.a&&(this.a=new Ys(Xb,this,4)),$r(this.a),!this.a&&(this.a=new Ys(Xb,this,4)),As(this.a,l(n,16));return;case 5:!this.c&&(this.c=new $5(Xb,this,5)),$r(this.c),!this.c&&(this.c=new $5(Xb,this,5)),As(this.c,l(n,16));return}uf(this,t-yr((Tn(),M2)),Mn((r=l(Kn(this,16),29),r||M2),t),n)},h.ii=function(){return Tn(),M2},h.ki=function(t){var n;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:g7e(this,null);return;case 2:!this.b&&(this.b=new dh((Tn(),No),Yc,this)),this.b.c.$b();return;case 3:ibt(this,null);return;case 4:!this.a&&(this.a=new Ys(Xb,this,4)),$r(this.a);return;case 5:!this.c&&(this.c=new $5(Xb,this,5)),$r(this.c);return}cf(this,t-yr((Tn(),M2)),Mn((n=l(Kn(this,16),29),n||M2),t))},h.Ib=function(){return c1t(this)},h.d=null,I(Gn,"EAnnotationImpl",519),D(141,721,ASe,xl),h.Gi=function(t,n){Qln(this,t,l(n,44))},h.Wk=function(t,n){return Zfn(this,l(t,44),n)},h.$i=function(t){return l(l(this.c,71).$i(t),136)},h.Ii=function(){return l(this.c,71).Ii()},h.Ji=function(){return l(this.c,71).Ji()},h.Ki=function(t){return l(this.c,71).Ki(t)},h.Xk=function(t,n){return Uq(this,t,n)},h.Fk=function(t){return l(this.c,79).Fk(t)},h.ak=function(){},h.Qj=function(){return l(this.c,79).Qj()},h.ck=function(t,n,r){var a;return a=l(Ah(this.b).wi().si(this.b),136),a.Ci(t),a.Di(n),a.nd(r),a},h.dk=function(){return new kwe(this)},h.Wb=function(t){_V(this,t)},h.Gk=function(){l(this.c,79).Gk()},I(us,"EcoreEMap",141),D(165,141,ASe,dh),h._j=function(){var t,n,r,a,o,f;if(this.d==null){for(f=We(vPe,_Se,66,2*this.f+1,0,1),r=this.c.Kc();r.e!=r.i.gc();)n=l(r.Yj(),136),a=n.Bi(),o=(a&Ii)%f.length,t=f[o],!t&&(t=f[o]=new kwe(this)),t.Fc(n);this.d=f}},I(Gn,"EAnnotationImpl/1",165),D(292,448,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,481:1,54:1,99:1,158:1,292:1,119:1,120:1}),h.Lh=function(t,n,r){var a,o;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Hn(),!!(this.Bb&256);case 3:return Hn(),!!(this.Bb&512);case 4:return pt(this.s);case 5:return pt(this.t);case 6:return Hn(),!!this.Jk();case 7:return Hn(),o=this.s,o>=1;case 8:return n?Of(this):this.r;case 9:return this.q}return sf(this,t-yr(this.ii()),Mn((a=l(Kn(this,16),29),a||this.ii()),t),n,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 9:return qae(this,r)}return o=l(Mn((a=l(Kn(this,16),29),a||this.ii()),n),69),o.wk().Ak(this,Ku(this),n-yr(this.ii()),t,r)},h.Wh=function(t){var n,r;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.Jk();case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&yw(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&yw(this.q).i==0)}return nf(this,t-yr(this.ii()),Mn((n=l(Kn(this,16),29),n||this.ii()),t))},h.bi=function(t,n){var r,a;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:this.ui(ei(n));return;case 2:c2(this,Rt(Bt(n)));return;case 3:u2(this,Rt(Bt(n)));return;case 4:i2(this,l(n,17).a);return;case 5:this.Zk(l(n,17).a);return;case 8:Gm(this,l(n,142));return;case 9:a=$1(this,l(n,89),null),a&&a.oj();return}uf(this,t-yr(this.ii()),Mn((r=l(Kn(this,16),29),r||this.ii()),t),n)},h.ii=function(){return Tn(),K_t},h.ki=function(t){var n,r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:this.ui(null);return;case 2:c2(this,!0);return;case 3:u2(this,!0);return;case 4:i2(this,0);return;case 5:this.Zk(1);return;case 8:Gm(this,null);return;case 9:r=$1(this,null,null),r&&r.oj();return}cf(this,t-yr(this.ii()),Mn((n=l(Kn(this,16),29),n||this.ii()),t))},h.pi=function(){Of(this),this.Bb|=1},h.Hk=function(){return Of(this)},h.Ik=function(){return this.t},h.Jk=function(){var t;return t=this.t,t>1||t==-1},h.Si=function(){return(this.Bb&512)!=0},h.Yk=function(t,n){return o8e(this,t,n)},h.Zk=function(t){My(this,t)},h.Ib=function(){return T9e(this)},h.s=0,h.t=1,I(Gn,"ETypedElementImpl",292),D(462,292,{110:1,94:1,93:1,155:1,197:1,58:1,179:1,69:1,114:1,481:1,54:1,99:1,158:1,462:1,292:1,119:1,120:1,692:1}),h.Ah=function(t){return Qdt(this,t)},h.Lh=function(t,n,r){var a,o;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Hn(),!!(this.Bb&256);case 3:return Hn(),!!(this.Bb&512);case 4:return pt(this.s);case 5:return pt(this.t);case 6:return Hn(),!!this.Jk();case 7:return Hn(),o=this.s,o>=1;case 8:return n?Of(this):this.r;case 9:return this.q;case 10:return Hn(),!!(this.Bb&m0);case 11:return Hn(),!!(this.Bb&r4);case 12:return Hn(),!!(this.Bb&Xy);case 13:return this.j;case 14:return UE(this);case 15:return Hn(),!!(this.Bb&Sl);case 16:return Hn(),!!(this.Bb&_d);case 17:return ky(this)}return sf(this,t-yr(this.ii()),Mn((a=l(Kn(this,16),29),a||this.ii()),t),n,r)},h.Sh=function(t,n,r){var a,o,f;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),Ru(this.Ab,t,r);case 17:return this.Cb&&(r=(o=this.Db>>16,o>=0?Qdt(this,r):this.Cb.Th(this,-1-o,null,r))),Nh(this,t,17,r)}return f=l(Mn((a=l(Kn(this,16),29),a||this.ii()),n),69),f.wk().zk(this,Ku(this),n-yr(this.ii()),t,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 9:return qae(this,r);case 17:return Nh(this,null,17,r)}return o=l(Mn((a=l(Kn(this,16),29),a||this.ii()),n),69),o.wk().Ak(this,Ku(this),n-yr(this.ii()),t,r)},h.Wh=function(t){var n,r;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.Jk();case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&yw(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&yw(this.q).i==0);case 10:return(this.Bb&m0)==0;case 11:return(this.Bb&r4)!=0;case 12:return(this.Bb&Xy)!=0;case 13:return this.j!=null;case 14:return UE(this)!=null;case 15:return(this.Bb&Sl)!=0;case 16:return(this.Bb&_d)!=0;case 17:return!!ky(this)}return nf(this,t-yr(this.ii()),Mn((n=l(Kn(this,16),29),n||this.ii()),t))},h.bi=function(t,n){var r,a;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:poe(this,ei(n));return;case 2:c2(this,Rt(Bt(n)));return;case 3:u2(this,Rt(Bt(n)));return;case 4:i2(this,l(n,17).a);return;case 5:this.Zk(l(n,17).a);return;case 8:Gm(this,l(n,142));return;case 9:a=$1(this,l(n,89),null),a&&a.oj();return;case 10:AE(this,Rt(Bt(n)));return;case 11:DE(this,Rt(Bt(n)));return;case 12:LE(this,Rt(Bt(n)));return;case 13:Z3e(this,ei(n));return;case 15:ME(this,Rt(Bt(n)));return;case 16:IE(this,Rt(Bt(n)));return}uf(this,t-yr(this.ii()),Mn((r=l(Kn(this,16),29),r||this.ii()),t),n)},h.ii=function(){return Tn(),G_t},h.ki=function(t){var n,r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:De(this.Cb,90)&&zy(Yl(l(this.Cb,90)),4),Fu(this,null);return;case 2:c2(this,!0);return;case 3:u2(this,!0);return;case 4:i2(this,0);return;case 5:this.Zk(1);return;case 8:Gm(this,null);return;case 9:r=$1(this,null,null),r&&r.oj();return;case 10:AE(this,!0);return;case 11:DE(this,!1);return;case 12:LE(this,!1);return;case 13:this.i=null,xV(this,null);return;case 15:ME(this,!1);return;case 16:IE(this,!1);return}cf(this,t-yr(this.ii()),Mn((n=l(Kn(this,16),29),n||this.ii()),t))},h.pi=function(){Wk(ic((El(),io),this)),Of(this),this.Bb|=1},h.pk=function(){return this.f},h.ik=function(){return UE(this)},h.qk=function(){return ky(this)},h.uk=function(){return null},h.$k=function(){return this.k},h.Lj=function(){return this.n},h.vk=function(){return pU(this)},h.wk=function(){var t,n,r,a,o,f,g,w,E;return this.p||(r=ky(this),(r.i==null&&Sd(r),r.i).length,a=this.uk(),a&&yr(ky(a)),o=Of(this),g=o.kk(),t=g?g.i&1?g==ih?Ns:g==Vr?ro:g==B4?_T:g==Na?ta:g==nm?r3:g==h7?i3:g==Al?jx:PL:g:null,n=UE(this),w=o.ik(),K4n(this),this.Bb&_d&&((f=yxe((El(),io),r))&&f!=this||(f=rx(ic(io,this))))?this.p=new Ntt(this,f):this.Jk()?this.al()?a?this.Bb&Sl?t?this.bl()?this.p=new Om(47,t,this,a):this.p=new Om(5,t,this,a):this.bl()?this.p=new Rm(46,this,a):this.p=new Rm(4,this,a):t?this.bl()?this.p=new Om(49,t,this,a):this.p=new Om(7,t,this,a):this.bl()?this.p=new Rm(48,this,a):this.p=new Rm(6,this,a):this.Bb&Sl?t?t==uv?this.p=new Xp(50,A_t,this):this.bl()?this.p=new Xp(43,t,this):this.p=new Xp(1,t,this):this.bl()?this.p=new Jp(42,this):this.p=new Jp(0,this):t?t==uv?this.p=new Xp(41,A_t,this):this.bl()?this.p=new Xp(45,t,this):this.p=new Xp(3,t,this):this.bl()?this.p=new Jp(44,this):this.p=new Jp(2,this):De(o,156)?t==CY?this.p=new Jp(40,this):this.Bb&512?this.Bb&Sl?t?this.p=new Xp(9,t,this):this.p=new Jp(8,this):t?this.p=new Xp(11,t,this):this.p=new Jp(10,this):this.Bb&Sl?t?this.p=new Xp(13,t,this):this.p=new Jp(12,this):t?this.p=new Xp(15,t,this):this.p=new Jp(14,this):a?(E=a.t,E>1||E==-1?this.bl()?this.Bb&Sl?t?this.p=new Om(25,t,this,a):this.p=new Rm(24,this,a):t?this.p=new Om(27,t,this,a):this.p=new Rm(26,this,a):this.Bb&Sl?t?this.p=new Om(29,t,this,a):this.p=new Rm(28,this,a):t?this.p=new Om(31,t,this,a):this.p=new Rm(30,this,a):this.bl()?this.Bb&Sl?t?this.p=new Om(33,t,this,a):this.p=new Rm(32,this,a):t?this.p=new Om(35,t,this,a):this.p=new Rm(34,this,a):this.Bb&Sl?t?this.p=new Om(37,t,this,a):this.p=new Rm(36,this,a):t?this.p=new Om(39,t,this,a):this.p=new Rm(38,this,a)):this.bl()?this.Bb&Sl?t?this.p=new Xp(17,t,this):this.p=new Jp(16,this):t?this.p=new Xp(19,t,this):this.p=new Jp(18,this):this.Bb&Sl?t?this.p=new Xp(21,t,this):this.p=new Jp(20,this):t?this.p=new Xp(23,t,this):this.p=new Jp(22,this):this._k()?this.bl()?this.p=new kit(l(o,29),this,a):this.p=new $5e(l(o,29),this,a):De(o,156)?t==CY?this.p=new Jp(40,this):this.Bb&Sl?t?this.p=new xst(n,w,this,(Wce(),g==Vr?PPe:g==ih?MPe:g==nm?BPe:g==B4?NPe:g==Na?OPe:g==h7?FPe:g==Al?DPe:g==kf?IPe:ipe)):this.p=new Nat(l(o,156),n,w,this):t?this.p=new yst(n,w,this,(Wce(),g==Vr?PPe:g==ih?MPe:g==nm?BPe:g==B4?NPe:g==Na?OPe:g==h7?FPe:g==Al?DPe:g==kf?IPe:ipe)):this.p=new Oat(l(o,156),n,w,this):this.al()?a?this.Bb&Sl?this.bl()?this.p=new Tit(l(o,29),this,a):this.p=new C4e(l(o,29),this,a):this.bl()?this.p=new Eit(l(o,29),this,a):this.p=new yae(l(o,29),this,a):this.Bb&Sl?this.bl()?this.p=new yrt(l(o,29),this):this.p=new jye(l(o,29),this):this.bl()?this.p=new wrt(l(o,29),this):this.p=new oae(l(o,29),this):this.bl()?a?this.Bb&Sl?this.p=new Cit(l(o,29),this,a):this.p=new E4e(l(o,29),this,a):this.Bb&Sl?this.p=new xrt(l(o,29),this):this.p=new $ye(l(o,29),this):a?this.Bb&Sl?this.p=new Sit(l(o,29),this,a):this.p=new T4e(l(o,29),this,a):this.Bb&Sl?this.p=new krt(l(o,29),this):this.p=new cH(l(o,29),this)),this.p},h.rk=function(){return(this.Bb&m0)!=0},h._k=function(){return!1},h.al=function(){return!1},h.sk=function(){return(this.Bb&_d)!=0},h.xk=function(){return Voe(this)},h.bl=function(){return!1},h.tk=function(){return(this.Bb&Sl)!=0},h.cl=function(t){this.k=t},h.ui=function(t){poe(this,t)},h.Ib=function(){return BU(this)},h.e=!1,h.n=0,I(Gn,"EStructuralFeatureImpl",462),D(331,462,{110:1,94:1,93:1,35:1,155:1,197:1,58:1,179:1,69:1,114:1,481:1,54:1,99:1,331:1,158:1,462:1,292:1,119:1,120:1,692:1},zie),h.Lh=function(t,n,r){var a,o;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Hn(),!!(this.Bb&256);case 3:return Hn(),!!(this.Bb&512);case 4:return pt(this.s);case 5:return pt(this.t);case 6:return Hn(),!!v9e(this);case 7:return Hn(),o=this.s,o>=1;case 8:return n?Of(this):this.r;case 9:return this.q;case 10:return Hn(),!!(this.Bb&m0);case 11:return Hn(),!!(this.Bb&r4);case 12:return Hn(),!!(this.Bb&Xy);case 13:return this.j;case 14:return UE(this);case 15:return Hn(),!!(this.Bb&Sl);case 16:return Hn(),!!(this.Bb&_d);case 17:return ky(this);case 18:return Hn(),!!(this.Bb&eu);case 19:return n?gce(this):Fut(this)}return sf(this,t-yr((Tn(),O4)),Mn((a=l(Kn(this,16),29),a||O4),t),n,r)},h.Wh=function(t){var n,r;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return v9e(this);case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&yw(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&yw(this.q).i==0);case 10:return(this.Bb&m0)==0;case 11:return(this.Bb&r4)!=0;case 12:return(this.Bb&Xy)!=0;case 13:return this.j!=null;case 14:return UE(this)!=null;case 15:return(this.Bb&Sl)!=0;case 16:return(this.Bb&_d)!=0;case 17:return!!ky(this);case 18:return(this.Bb&eu)!=0;case 19:return!!Fut(this)}return nf(this,t-yr((Tn(),O4)),Mn((n=l(Kn(this,16),29),n||O4),t))},h.bi=function(t,n){var r,a;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:poe(this,ei(n));return;case 2:c2(this,Rt(Bt(n)));return;case 3:u2(this,Rt(Bt(n)));return;case 4:i2(this,l(n,17).a);return;case 5:JJe(this,l(n,17).a);return;case 8:Gm(this,l(n,142));return;case 9:a=$1(this,l(n,89),null),a&&a.oj();return;case 10:AE(this,Rt(Bt(n)));return;case 11:DE(this,Rt(Bt(n)));return;case 12:LE(this,Rt(Bt(n)));return;case 13:Z3e(this,ei(n));return;case 15:ME(this,Rt(Bt(n)));return;case 16:IE(this,Rt(Bt(n)));return;case 18:$ce(this,Rt(Bt(n)));return}uf(this,t-yr((Tn(),O4)),Mn((r=l(Kn(this,16),29),r||O4),t),n)},h.ii=function(){return Tn(),O4},h.ki=function(t){var n,r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:De(this.Cb,90)&&zy(Yl(l(this.Cb,90)),4),Fu(this,null);return;case 2:c2(this,!0);return;case 3:u2(this,!0);return;case 4:i2(this,0);return;case 5:this.b=0,My(this,1);return;case 8:Gm(this,null);return;case 9:r=$1(this,null,null),r&&r.oj();return;case 10:AE(this,!0);return;case 11:DE(this,!1);return;case 12:LE(this,!1);return;case 13:this.i=null,xV(this,null);return;case 15:ME(this,!1);return;case 16:IE(this,!1);return;case 18:$ce(this,!1);return}cf(this,t-yr((Tn(),O4)),Mn((n=l(Kn(this,16),29),n||O4),t))},h.pi=function(){gce(this),Wk(ic((El(),io),this)),Of(this),this.Bb|=1},h.Jk=function(){return v9e(this)},h.Yk=function(t,n){return this.b=0,this.a=null,o8e(this,t,n)},h.Zk=function(t){JJe(this,t)},h.Ib=function(){var t;return this.Db&64?BU(this):(t=new Af(BU(this)),t.a+=" (iD: ",Gp(t,(this.Bb&eu)!=0),t.a+=")",t.a)},h.b=0,I(Gn,"EAttributeImpl",331),D(364,448,{110:1,94:1,93:1,142:1,155:1,197:1,58:1,114:1,54:1,99:1,364:1,158:1,119:1,120:1,691:1}),h.dl=function(t){return t.Dh()==this},h.Ah=function(t){return wue(this,t)},h.Bh=function(t,n){this.w=null,this.Db=n<<16|this.Db&255,this.Cb=t},h.Lh=function(t,n,r){var a;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return zw(this);case 4:return this.ik();case 5:return this.F;case 6:return n?Ah(this):Qk(this);case 7:return!this.A&&(this.A=new ml(Zu,this,7)),this.A}return sf(this,t-yr(this.ii()),Mn((a=l(Kn(this,16),29),a||this.ii()),t),n,r)},h.Sh=function(t,n,r){var a,o,f;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),Ru(this.Ab,t,r);case 6:return this.Cb&&(r=(o=this.Db>>16,o>=0?wue(this,r):this.Cb.Th(this,-1-o,null,r))),Nh(this,t,6,r)}return f=l(Mn((a=l(Kn(this,16),29),a||this.ii()),n),69),f.wk().zk(this,Ku(this),n-yr(this.ii()),t,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 6:return Nh(this,null,6,r);case 7:return!this.A&&(this.A=new ml(Zu,this,7)),To(this.A,t,r)}return o=l(Mn((a=l(Kn(this,16),29),a||this.ii()),n),69),o.wk().Ak(this,Ku(this),n-yr(this.ii()),t,r)},h.Wh=function(t){var n;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return!!zw(this);case 4:return this.ik()!=null;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return!!Qk(this);case 7:return!!this.A&&this.A.i!=0}return nf(this,t-yr(this.ii()),Mn((n=l(Kn(this,16),29),n||this.ii()),t))},h.bi=function(t,n){var r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:FH(this,ei(n));return;case 2:Kse(this,ei(n));return;case 5:JE(this,ei(n));return;case 7:!this.A&&(this.A=new ml(Zu,this,7)),$r(this.A),!this.A&&(this.A=new ml(Zu,this,7)),As(this.A,l(n,16));return}uf(this,t-yr(this.ii()),Mn((r=l(Kn(this,16),29),r||this.ii()),t),n)},h.ii=function(){return Tn(),$_t},h.ki=function(t){var n;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:De(this.Cb,184)&&(l(this.Cb,184).tb=null),Fu(this,null);return;case 2:CE(this,null),lE(this,this.D);return;case 5:JE(this,null);return;case 7:!this.A&&(this.A=new ml(Zu,this,7)),$r(this.A);return}cf(this,t-yr(this.ii()),Mn((n=l(Kn(this,16),29),n||this.ii()),t))},h.hk=function(){var t;return this.G==-1&&(this.G=(t=Ah(this),t?f2(t.vi(),this):-1)),this.G},h.ik=function(){return null},h.jk=function(){return Ah(this)},h.el=function(){return this.v},h.kk=function(){return zw(this)},h.lk=function(){return this.D!=null?this.D:this.B},h.mk=function(){return this.F},h.fk=function(t){return ule(this,t)},h.fl=function(t){this.v=t},h.gl=function(t){xft(this,t)},h.hl=function(t){this.C=t},h.ui=function(t){FH(this,t)},h.Ib=function(){return UV(this)},h.C=null,h.D=null,h.G=-1,I(Gn,"EClassifierImpl",364),D(90,364,{110:1,94:1,93:1,29:1,142:1,155:1,197:1,58:1,114:1,54:1,99:1,90:1,364:1,158:1,482:1,119:1,120:1,691:1},hz),h.dl=function(t){return Bfn(this,t.Dh())},h.Lh=function(t,n,r){var a;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return zw(this);case 4:return null;case 5:return this.F;case 6:return n?Ah(this):Qk(this);case 7:return!this.A&&(this.A=new ml(Zu,this,7)),this.A;case 8:return Hn(),!!(this.Bb&256);case 9:return Hn(),!!(this.Bb&512);case 10:return dc(this);case 11:return!this.q&&(this.q=new nt(Uf,this,11,10)),this.q;case 12:return d6(this);case 13:return JA(this);case 14:return JA(this),this.r;case 15:return d6(this),this.k;case 16:return o9e(this);case 17:return dle(this);case 18:return Sd(this);case 19:return _U(this);case 20:return d6(this),this.o;case 21:return!this.s&&(this.s=new nt(dl,this,21,17)),this.s;case 22:return du(this);case 23:return Zue(this)}return sf(this,t-yr((Tn(),Jb)),Mn((a=l(Kn(this,16),29),a||Jb),t),n,r)},h.Sh=function(t,n,r){var a,o,f;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),Ru(this.Ab,t,r);case 6:return this.Cb&&(r=(o=this.Db>>16,o>=0?wue(this,r):this.Cb.Th(this,-1-o,null,r))),Nh(this,t,6,r);case 11:return!this.q&&(this.q=new nt(Uf,this,11,10)),Ru(this.q,t,r);case 21:return!this.s&&(this.s=new nt(dl,this,21,17)),Ru(this.s,t,r)}return f=l(Mn((a=l(Kn(this,16),29),a||(Tn(),Jb)),n),69),f.wk().zk(this,Ku(this),n-yr((Tn(),Jb)),t,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 6:return Nh(this,null,6,r);case 7:return!this.A&&(this.A=new ml(Zu,this,7)),To(this.A,t,r);case 11:return!this.q&&(this.q=new nt(Uf,this,11,10)),To(this.q,t,r);case 21:return!this.s&&(this.s=new nt(dl,this,21,17)),To(this.s,t,r);case 22:return To(du(this),t,r)}return o=l(Mn((a=l(Kn(this,16),29),a||(Tn(),Jb)),n),69),o.wk().Ak(this,Ku(this),n-yr((Tn(),Jb)),t,r)},h.Wh=function(t){var n;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return!!zw(this);case 4:return!1;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return!!Qk(this);case 7:return!!this.A&&this.A.i!=0;case 8:return(this.Bb&256)!=0;case 9:return(this.Bb&512)!=0;case 10:return!!this.u&&du(this.u.a).i!=0&&!(this.n&&cue(this.n));case 11:return!!this.q&&this.q.i!=0;case 12:return d6(this).i!=0;case 13:return JA(this).i!=0;case 14:return JA(this),this.r.i!=0;case 15:return d6(this),this.k.i!=0;case 16:return o9e(this).i!=0;case 17:return dle(this).i!=0;case 18:return Sd(this).i!=0;case 19:return _U(this).i!=0;case 20:return d6(this),!!this.o;case 21:return!!this.s&&this.s.i!=0;case 22:return!!this.n&&cue(this.n);case 23:return Zue(this).i!=0}return nf(this,t-yr((Tn(),Jb)),Mn((n=l(Kn(this,16),29),n||Jb),t))},h.Zh=function(t){var n;return n=this.i==null||this.q&&this.q.i!=0?null:oP(this,t),n||Hke(this,t)},h.bi=function(t,n){var r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:FH(this,ei(n));return;case 2:Kse(this,ei(n));return;case 5:JE(this,ei(n));return;case 7:!this.A&&(this.A=new ml(Zu,this,7)),$r(this.A),!this.A&&(this.A=new ml(Zu,this,7)),As(this.A,l(n,16));return;case 8:c8e(this,Rt(Bt(n)));return;case 9:u8e(this,Rt(Bt(n)));return;case 10:tL(dc(this)),As(dc(this),l(n,16));return;case 11:!this.q&&(this.q=new nt(Uf,this,11,10)),$r(this.q),!this.q&&(this.q=new nt(Uf,this,11,10)),As(this.q,l(n,16));return;case 21:!this.s&&(this.s=new nt(dl,this,21,17)),$r(this.s),!this.s&&(this.s=new nt(dl,this,21,17)),As(this.s,l(n,16));return;case 22:$r(du(this)),As(du(this),l(n,16));return}uf(this,t-yr((Tn(),Jb)),Mn((r=l(Kn(this,16),29),r||Jb),t),n)},h.ii=function(){return Tn(),Jb},h.ki=function(t){var n;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:De(this.Cb,184)&&(l(this.Cb,184).tb=null),Fu(this,null);return;case 2:CE(this,null),lE(this,this.D);return;case 5:JE(this,null);return;case 7:!this.A&&(this.A=new ml(Zu,this,7)),$r(this.A);return;case 8:c8e(this,!1);return;case 9:u8e(this,!1);return;case 10:this.u&&tL(this.u);return;case 11:!this.q&&(this.q=new nt(Uf,this,11,10)),$r(this.q);return;case 21:!this.s&&(this.s=new nt(dl,this,21,17)),$r(this.s);return;case 22:this.n&&$r(this.n);return}cf(this,t-yr((Tn(),Jb)),Mn((n=l(Kn(this,16),29),n||Jb),t))},h.pi=function(){var t,n;if(d6(this),JA(this),o9e(this),dle(this),Sd(this),_U(this),Zue(this),uA(cdn(Yl(this))),this.s)for(t=0,n=this.s.i;t=0;--n)Oe(this,n);return O8e(this,t)},h.Gk=function(){$r(this)},h.Zi=function(t,n){return Hht(this,t,n)},I(us,"EcoreEList",632),D(505,632,kc,FO),h.Li=function(){return!1},h.Lj=function(){return this.c},h.Mj=function(){return!1},h.ol=function(){return!0},h.Si=function(){return!0},h.Wi=function(t,n){return n},h.Yi=function(){return!1},h.c=0,I(us,"EObjectEList",505),D(83,505,kc,Ys),h.Mj=function(){return!0},h.ml=function(){return!1},h.al=function(){return!0},I(us,"EObjectContainmentEList",83),D(555,83,kc,Bq),h.Ni=function(){this.b=!0},h.Qj=function(){return this.b},h.Gk=function(){var t;$r(this),hh(this.e)?(t=this.b,this.b=!1,Ni(this.e,new h0(this.e,2,this.c,t,!1))):this.b=!1},h.b=!1,I(us,"EObjectContainmentEList/Unsettable",555),D(1161,555,kc,vst),h.Ti=function(t,n){var r,a;return r=l(AA(this,t,n),89),hh(this.e)&&xk(this,new sN(this.a,7,(Tn(),z_t),pt(n),(a=r.c,De(a,90)?l(a,29):Kf),t)),r},h.Uj=function(t,n){return L5n(this,l(t,89),n)},h.Vj=function(t,n){return A5n(this,l(t,89),n)},h.Wj=function(t,n,r){return I8n(this,l(t,89),l(n,89),r)},h.Ij=function(t,n,r,a,o){switch(t){case 3:return rA(this,t,n,r,a,this.i>1);case 5:return rA(this,t,n,r,a,this.i-l(r,15).gc()>0);default:return new Zg(this.e,t,this.c,n,r,a,!0)}},h.Tj=function(){return!0},h.Qj=function(){return cue(this)},h.Gk=function(){$r(this)},I(Gn,"EClassImpl/1",1161),D(1175,1174,SSe),h.dj=function(t){var n,r,a,o,f,g,w;if(r=t.gj(),r!=8){if(a=l6n(t),a==0)switch(r){case 1:case 9:{w=t.kj(),w!=null&&(n=Yl(l(w,482)),!n.c&&(n.c=new Xd),sV(n.c,t.jj())),g=t.ij(),g!=null&&(o=l(g,482),o.Bb&1||(n=Yl(o),!n.c&&(n.c=new Xd),qr(n.c,l(t.jj(),29))));break}case 3:{g=t.ij(),g!=null&&(o=l(g,482),o.Bb&1||(n=Yl(o),!n.c&&(n.c=new Xd),qr(n.c,l(t.jj(),29))));break}case 5:{if(g=t.ij(),g!=null)for(f=l(g,16).Kc();f.Ob();)o=l(f.Pb(),482),o.Bb&1||(n=Yl(o),!n.c&&(n.c=new Xd),qr(n.c,l(t.jj(),29)));break}case 4:{w=t.kj(),w!=null&&(o=l(w,482),o.Bb&1||(n=Yl(o),!n.c&&(n.c=new Xd),sV(n.c,t.jj())));break}case 6:{if(w=t.kj(),w!=null)for(f=l(w,16).Kc();f.Ob();)o=l(f.Pb(),482),o.Bb&1||(n=Yl(o),!n.c&&(n.c=new Xd),sV(n.c,t.jj()));break}}this.ql(a)}},h.ql=function(t){Vbt(this,t)},h.b=63,I(Gn,"ESuperAdapter",1175),D(1176,1175,SSe,bQe),h.ql=function(t){zy(this,t)},I(Gn,"EClassImpl/10",1176),D(1165,710,kc),h.Ei=function(t,n){return Due(this,t,n)},h.Fi=function(t){return Odt(this,t)},h.Gi=function(t,n){IN(this,t,n)},h.Hi=function(t){tN(this,t)},h.$i=function(t){return R6e(this,t)},h.Xi=function(t,n){return Uoe(this,t,n)},h.Wk=function(t,n){throw ue(new Qr)},h.Ii=function(){return new H8(this)},h.Ji=function(){return new CO(this)},h.Ki=function(t){return mN(this,t)},h.Xk=function(t,n){throw ue(new Qr)},h.Fk=function(t){return this},h.Qj=function(){return this.i!=0},h.Wb=function(t){throw ue(new Qr)},h.Gk=function(){throw ue(new Qr)},I(us,"EcoreEList/UnmodifiableEList",1165),D(328,1165,kc,N5),h.Yi=function(){return!1},I(us,"EcoreEList/UnmodifiableEList/FastCompare",328),D(1168,328,kc,g0t),h.dd=function(t){var n,r,a;if(De(t,179)&&(n=l(t,179),r=n.Lj(),r!=-1)){for(a=this.i;r4)if(this.fk(t)){if(this.al()){if(a=l(t,54),r=a.Eh(),w=r==this.b&&(this.ml()?a.yh(a.Fh(),l(Mn(sl(this.b),this.Lj()).Hk(),29).kk())==Ro(l(Mn(sl(this.b),this.Lj()),19)).n:-1-a.Fh()==this.Lj()),this.nl()&&!w&&!r&&a.Jh()){for(o=0;o1||a==-1)):!1},h.ml=function(){var t,n,r;return n=Mn(sl(this.b),this.Lj()),De(n,102)?(t=l(n,19),r=Ro(t),!!r):!1},h.nl=function(){var t,n;return n=Mn(sl(this.b),this.Lj()),De(n,102)?(t=l(n,19),(t.Bb&Io)!=0):!1},h.dd=function(t){var n,r,a,o;if(a=this.zj(t),a>=0)return a;if(this.ol()){for(r=0,o=this.Ej();r=0;--t)mP(this,t,this.xj(t));return this.Fj()},h.Qc=function(t){var n;if(this.nl())for(n=this.Ej()-1;n>=0;--n)mP(this,n,this.xj(n));return this.Gj(t)},h.Gk=function(){tL(this)},h.Zi=function(t,n){return ylt(this,t,n)},I(us,"DelegatingEcoreEList",756),D(1171,756,MSe,Nrt),h.qj=function(t,n){afn(this,t,l(n,29))},h.rj=function(t){Wln(this,l(t,29))},h.xj=function(t){var n,r;return n=l(Oe(du(this.a),t),89),r=n.c,De(r,90)?l(r,29):(Tn(),Kf)},h.Cj=function(t){var n,r;return n=l(Vy(du(this.a),t),89),r=n.c,De(r,90)?l(r,29):(Tn(),Kf)},h.Dj=function(t,n){return r7n(this,t,l(n,29))},h.Li=function(){return!1},h.Ij=function(t,n,r,a,o){return null},h.sj=function(){return new wQe(this)},h.tj=function(){$r(du(this.a))},h.uj=function(t){return l1t(this,t)},h.vj=function(t){var n,r;for(r=t.Kc();r.Ob();)if(n=r.Pb(),!l1t(this,n))return!1;return!0},h.wj=function(t){var n,r,a;if(De(t,15)&&(a=l(t,15),a.gc()==du(this.a).i)){for(n=a.Kc(),r=new or(this);n.Ob();)if(qe(n.Pb())!==qe(gr(r)))return!1;return!0}return!1},h.yj=function(){var t,n,r,a,o;for(r=1,n=new or(du(this.a));n.e!=n.i.gc();)t=l(gr(n),89),a=(o=t.c,De(o,90)?l(o,29):(Tn(),Kf)),r=31*r+(a?fw(a):0);return r},h.zj=function(t){var n,r,a,o;for(a=0,r=new or(du(this.a));r.e!=r.i.gc();){if(n=l(gr(r),89),qe(t)===qe((o=n.c,De(o,90)?l(o,29):(Tn(),Kf))))return a;++a}return-1},h.Aj=function(){return du(this.a).i==0},h.Bj=function(){return null},h.Ej=function(){return du(this.a).i},h.Fj=function(){var t,n,r,a,o,f;for(f=du(this.a).i,o=We(wa,Rn,1,f,5,1),r=0,n=new or(du(this.a));n.e!=n.i.gc();)t=l(gr(n),89),o[r++]=(a=t.c,De(a,90)?l(a,29):(Tn(),Kf));return o},h.Gj=function(t){var n,r,a,o,f,g,w;for(w=du(this.a).i,t.lengthw&&Ts(t,w,null),a=0,r=new or(du(this.a));r.e!=r.i.gc();)n=l(gr(r),89),f=(g=n.c,De(g,90)?l(g,29):(Tn(),Kf)),Ts(t,a++,f);return t},h.Hj=function(){var t,n,r,a,o;for(o=new Up,o.a+="[",t=du(this.a),n=0,a=du(this.a).i;n>16,o>=0?wue(this,r):this.Cb.Th(this,-1-o,null,r))),Nh(this,t,6,r);case 9:return!this.a&&(this.a=new nt(wp,this,9,5)),Ru(this.a,t,r)}return f=l(Mn((a=l(Kn(this,16),29),a||(Tn(),Zb)),n),69),f.wk().zk(this,Ku(this),n-yr((Tn(),Zb)),t,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 6:return Nh(this,null,6,r);case 7:return!this.A&&(this.A=new ml(Zu,this,7)),To(this.A,t,r);case 9:return!this.a&&(this.a=new nt(wp,this,9,5)),To(this.a,t,r)}return o=l(Mn((a=l(Kn(this,16),29),a||(Tn(),Zb)),n),69),o.wk().Ak(this,Ku(this),n-yr((Tn(),Zb)),t,r)},h.Wh=function(t){var n;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return!!zw(this);case 4:return!!X7e(this);case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return!!Qk(this);case 7:return!!this.A&&this.A.i!=0;case 8:return(this.Bb&256)==0;case 9:return!!this.a&&this.a.i!=0}return nf(this,t-yr((Tn(),Zb)),Mn((n=l(Kn(this,16),29),n||Zb),t))},h.bi=function(t,n){var r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:FH(this,ei(n));return;case 2:Kse(this,ei(n));return;case 5:JE(this,ei(n));return;case 7:!this.A&&(this.A=new ml(Zu,this,7)),$r(this.A),!this.A&&(this.A=new ml(Zu,this,7)),As(this.A,l(n,16));return;case 8:jV(this,Rt(Bt(n)));return;case 9:!this.a&&(this.a=new nt(wp,this,9,5)),$r(this.a),!this.a&&(this.a=new nt(wp,this,9,5)),As(this.a,l(n,16));return}uf(this,t-yr((Tn(),Zb)),Mn((r=l(Kn(this,16),29),r||Zb),t),n)},h.ii=function(){return Tn(),Zb},h.ki=function(t){var n;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:De(this.Cb,184)&&(l(this.Cb,184).tb=null),Fu(this,null);return;case 2:CE(this,null),lE(this,this.D);return;case 5:JE(this,null);return;case 7:!this.A&&(this.A=new ml(Zu,this,7)),$r(this.A);return;case 8:jV(this,!0);return;case 9:!this.a&&(this.a=new nt(wp,this,9,5)),$r(this.a);return}cf(this,t-yr((Tn(),Zb)),Mn((n=l(Kn(this,16),29),n||Zb),t))},h.pi=function(){var t,n;if(this.a)for(t=0,n=this.a.i;t>16==5?l(this.Cb,685):null}return sf(this,t-yr((Tn(),D2)),Mn((a=l(Kn(this,16),29),a||D2),t),n,r)},h.Sh=function(t,n,r){var a,o,f;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),Ru(this.Ab,t,r);case 5:return this.Cb&&(r=(o=this.Db>>16,o>=0?agt(this,r):this.Cb.Th(this,-1-o,null,r))),Nh(this,t,5,r)}return f=l(Mn((a=l(Kn(this,16),29),a||(Tn(),D2)),n),69),f.wk().zk(this,Ku(this),n-yr((Tn(),D2)),t,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 5:return Nh(this,null,5,r)}return o=l(Mn((a=l(Kn(this,16),29),a||(Tn(),D2)),n),69),o.wk().Ak(this,Ku(this),n-yr((Tn(),D2)),t,r)},h.Wh=function(t){var n;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.d!=0;case 3:return!!this.b;case 4:return this.c!=null;case 5:return!!(this.Db>>16==5&&l(this.Cb,685))}return nf(this,t-yr((Tn(),D2)),Mn((n=l(Kn(this,16),29),n||D2),t))},h.bi=function(t,n){var r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:Fu(this,ei(n));return;case 2:Qoe(this,l(n,17).a);return;case 3:r2t(this,l(n,2039));return;case 4:Zoe(this,ei(n));return}uf(this,t-yr((Tn(),D2)),Mn((r=l(Kn(this,16),29),r||D2),t),n)},h.ii=function(){return Tn(),D2},h.ki=function(t){var n;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:Fu(this,null);return;case 2:Qoe(this,0);return;case 3:r2t(this,null);return;case 4:Zoe(this,null);return}cf(this,t-yr((Tn(),D2)),Mn((n=l(Kn(this,16),29),n||D2),t))},h.Ib=function(){var t;return t=this.c,t??this.zb},h.b=null,h.c=null,h.d=0,I(Gn,"EEnumLiteralImpl",582);var POn=ks(Gn,"EFactoryImpl/InternalEDateTimeFormat");D(499,1,{2114:1},KI),I(Gn,"EFactoryImpl/1ClientInternalEDateTimeFormat",499),D(248,120,{110:1,94:1,93:1,89:1,58:1,114:1,54:1,99:1,248:1,119:1,120:1},Qv),h.Ch=function(t,n,r){var a;return r=Nh(this,t,n,r),this.e&&De(t,179)&&(a=SU(this,this.e),a!=this.c&&(r=ZE(this,a,r))),r},h.Lh=function(t,n,r){var a;switch(t){case 0:return this.f;case 1:return!this.d&&(this.d=new Ys(Wo,this,1)),this.d;case 2:return n?jU(this):this.c;case 3:return this.b;case 4:return this.e;case 5:return n?hue(this):this.a}return sf(this,t-yr((Tn(),E3)),Mn((a=l(Kn(this,16),29),a||E3),t),n,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return Q0t(this,null,r);case 1:return!this.d&&(this.d=new Ys(Wo,this,1)),To(this.d,t,r);case 3:return J0t(this,null,r)}return o=l(Mn((a=l(Kn(this,16),29),a||(Tn(),E3)),n),69),o.wk().Ak(this,Ku(this),n-yr((Tn(),E3)),t,r)},h.Wh=function(t){var n;switch(t){case 0:return!!this.f;case 1:return!!this.d&&this.d.i!=0;case 2:return!!this.c;case 3:return!!this.b;case 4:return!!this.e;case 5:return!!this.a}return nf(this,t-yr((Tn(),E3)),Mn((n=l(Kn(this,16),29),n||E3),t))},h.bi=function(t,n){var r;switch(t){case 0:Cgt(this,l(n,89));return;case 1:!this.d&&(this.d=new Ys(Wo,this,1)),$r(this.d),!this.d&&(this.d=new Ys(Wo,this,1)),As(this.d,l(n,16));return;case 3:Axe(this,l(n,89));return;case 4:Kxe(this,l(n,850));return;case 5:sE(this,l(n,142));return}uf(this,t-yr((Tn(),E3)),Mn((r=l(Kn(this,16),29),r||E3),t),n)},h.ii=function(){return Tn(),E3},h.ki=function(t){var n;switch(t){case 0:Cgt(this,null);return;case 1:!this.d&&(this.d=new Ys(Wo,this,1)),$r(this.d);return;case 3:Axe(this,null);return;case 4:Kxe(this,null);return;case 5:sE(this,null);return}cf(this,t-yr((Tn(),E3)),Mn((n=l(Kn(this,16),29),n||E3),t))},h.Ib=function(){var t;return t=new Th(g0(this)),t.a+=" (expression: ",wle(this,t),t.a+=")",t.a};var LPe;I(Gn,"EGenericTypeImpl",248),D(2067,2062,KG),h.Gi=function(t,n){Drt(this,t,n)},h.Wk=function(t,n){return Drt(this,this.gc(),t),n},h.$i=function(t){return ff(this.pj(),t)},h.Ii=function(){return this.Ji()},h.pj=function(){return new EQe(this)},h.Ji=function(){return this.Ki(0)},h.Ki=function(t){return this.pj().fd(t)},h.Xk=function(t,n){return Ny(this,t,!0),n},h.Ti=function(t,n){var r,a;return a=kue(this,n),r=this.fd(t),r.Rb(a),a},h.Ui=function(t,n){var r;Ny(this,n,!0),r=this.fd(t),r.Rb(n)},I(us,"AbstractSequentialInternalEList",2067),D(496,2067,KG,TO),h.$i=function(t){return ff(this.pj(),t)},h.Ii=function(){return this.b==null?(Wp(),Wp(),dF):this.sl()},h.pj=function(){return new Xtt(this.a,this.b)},h.Ji=function(){return this.b==null?(Wp(),Wp(),dF):this.sl()},h.Ki=function(t){var n,r;if(this.b==null){if(t<0||t>1)throw ue(new tc(CL+t+", size=0"));return Wp(),Wp(),dF}for(r=this.sl(),n=0;n0;)if(n=this.c[--this.d],(!this.e||n.pk()!=oC||n.Lj()!=0)&&(!this.vl()||this.b.Xh(n))){if(f=this.b.Nh(n,this.ul()),this.f=(Fo(),l(n,69).xk()),this.f||n.Jk()){if(this.ul()?(a=l(f,15),this.k=a):(a=l(f,71),this.k=this.j=a),De(this.k,59)?(this.o=this.k.gc(),this.n=this.o):this.p=this.j?this.j.Ki(this.k.gc()):this.k.fd(this.k.gc()),this.p?wpt(this,this.p):Mpt(this))return o=this.p?this.p.Ub():this.j?this.j.$i(--this.n):this.k.Xb(--this.n),this.f?(t=l(o,76),t.Lk(),r=t.md(),this.i=r):(r=o,this.i=r),this.g=-3,!0}else if(f!=null)return this.k=null,this.p=null,r=f,this.i=r,this.g=-2,!0}return this.k=null,this.p=null,this.g=-1,!1}else return o=this.p?this.p.Ub():this.j?this.j.$i(--this.n):this.k.Xb(--this.n),this.f?(t=l(o,76),t.Lk(),r=t.md(),this.i=r):(r=o,this.i=r),this.g=-3,!0}},h.Pb=function(){return MV(this)},h.Tb=function(){return this.a},h.Ub=function(){var t;if(this.g<-1||this.Sb())return--this.a,this.g=0,t=this.i,this.Sb(),t;throw ue(new _c)},h.Vb=function(){return this.a-1},h.Qb=function(){throw ue(new Qr)},h.ul=function(){return!1},h.Wb=function(t){throw ue(new Qr)},h.vl=function(){return!0},h.a=0,h.d=0,h.f=!1,h.g=0,h.n=0,h.o=0;var dF;I(us,"EContentsEList/FeatureIteratorImpl",287),D(711,287,WG,Rye),h.ul=function(){return!0},I(us,"EContentsEList/ResolvingFeatureIteratorImpl",711),D(1178,711,WG,brt),h.vl=function(){return!1},I(Gn,"ENamedElementImpl/1/1",1178),D(1179,287,WG,mrt),h.vl=function(){return!1},I(Gn,"ENamedElementImpl/1/2",1179),D(39,152,YP,Cy,koe,_a,Foe,Zg,h0,Q6e,Xot,J6e,Qot,p6e,Jot,t7e,Zot,b6e,ect,Z6e,tct,X_,sN,roe,e7e,nct,m6e,rct),h.Kj=function(){return N6e(this)},h.Rj=function(){var t;return t=N6e(this),t?t.ik():null},h.hj=function(t){return this.b==-1&&this.a&&(this.b=this.c.Hh(this.a.Lj(),this.a.pk())),this.c.yh(this.b,t)},h.jj=function(){return this.c},h.Sj=function(){var t;return t=N6e(this),t?t.tk():!1},h.b=-1,I(Gn,"ENotificationImpl",39),D(411,292,{110:1,94:1,93:1,155:1,197:1,58:1,62:1,114:1,481:1,54:1,99:1,158:1,411:1,292:1,119:1,120:1},qie),h.Ah=function(t){return ugt(this,t)},h.Lh=function(t,n,r){var a,o,f;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Hn(),!!(this.Bb&256);case 3:return Hn(),!!(this.Bb&512);case 4:return pt(this.s);case 5:return pt(this.t);case 6:return Hn(),f=this.t,f>1||f==-1;case 7:return Hn(),o=this.s,o>=1;case 8:return n?Of(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?l(this.Cb,29):null;case 11:return!this.d&&(this.d=new ml(Zu,this,11)),this.d;case 12:return!this.c&&(this.c=new nt(k3,this,12,10)),this.c;case 13:return!this.a&&(this.a=new LO(this,this)),this.a;case 14:return Xl(this)}return sf(this,t-yr((Tn(),I2)),Mn((a=l(Kn(this,16),29),a||I2),t),n,r)},h.Sh=function(t,n,r){var a,o,f;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),Ru(this.Ab,t,r);case 10:return this.Cb&&(r=(o=this.Db>>16,o>=0?ugt(this,r):this.Cb.Th(this,-1-o,null,r))),Nh(this,t,10,r);case 12:return!this.c&&(this.c=new nt(k3,this,12,10)),Ru(this.c,t,r)}return f=l(Mn((a=l(Kn(this,16),29),a||(Tn(),I2)),n),69),f.wk().zk(this,Ku(this),n-yr((Tn(),I2)),t,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 9:return qae(this,r);case 10:return Nh(this,null,10,r);case 11:return!this.d&&(this.d=new ml(Zu,this,11)),To(this.d,t,r);case 12:return!this.c&&(this.c=new nt(k3,this,12,10)),To(this.c,t,r);case 14:return To(Xl(this),t,r)}return o=l(Mn((a=l(Kn(this,16),29),a||(Tn(),I2)),n),69),o.wk().Ak(this,Ku(this),n-yr((Tn(),I2)),t,r)},h.Wh=function(t){var n,r,a;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return a=this.t,a>1||a==-1;case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&yw(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&yw(this.q).i==0);case 10:return!!(this.Db>>16==10&&l(this.Cb,29));case 11:return!!this.d&&this.d.i!=0;case 12:return!!this.c&&this.c.i!=0;case 13:return!!this.a&&Xl(this.a.a).i!=0&&!(this.b&&uue(this.b));case 14:return!!this.b&&uue(this.b)}return nf(this,t-yr((Tn(),I2)),Mn((n=l(Kn(this,16),29),n||I2),t))},h.bi=function(t,n){var r,a;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:Fu(this,ei(n));return;case 2:c2(this,Rt(Bt(n)));return;case 3:u2(this,Rt(Bt(n)));return;case 4:i2(this,l(n,17).a);return;case 5:My(this,l(n,17).a);return;case 8:Gm(this,l(n,142));return;case 9:a=$1(this,l(n,89),null),a&&a.oj();return;case 11:!this.d&&(this.d=new ml(Zu,this,11)),$r(this.d),!this.d&&(this.d=new ml(Zu,this,11)),As(this.d,l(n,16));return;case 12:!this.c&&(this.c=new nt(k3,this,12,10)),$r(this.c),!this.c&&(this.c=new nt(k3,this,12,10)),As(this.c,l(n,16));return;case 13:!this.a&&(this.a=new LO(this,this)),tL(this.a),!this.a&&(this.a=new LO(this,this)),As(this.a,l(n,16));return;case 14:$r(Xl(this)),As(Xl(this),l(n,16));return}uf(this,t-yr((Tn(),I2)),Mn((r=l(Kn(this,16),29),r||I2),t),n)},h.ii=function(){return Tn(),I2},h.ki=function(t){var n,r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:Fu(this,null);return;case 2:c2(this,!0);return;case 3:u2(this,!0);return;case 4:i2(this,0);return;case 5:My(this,1);return;case 8:Gm(this,null);return;case 9:r=$1(this,null,null),r&&r.oj();return;case 11:!this.d&&(this.d=new ml(Zu,this,11)),$r(this.d);return;case 12:!this.c&&(this.c=new nt(k3,this,12,10)),$r(this.c);return;case 13:this.a&&tL(this.a);return;case 14:this.b&&$r(this.b);return}cf(this,t-yr((Tn(),I2)),Mn((n=l(Kn(this,16),29),n||I2),t))},h.pi=function(){var t,n;if(this.c)for(t=0,n=this.c.i;tw&&Ts(t,w,null),a=0,r=new or(Xl(this.a));r.e!=r.i.gc();)n=l(gr(r),89),f=(g=n.c,g||(Tn(),td)),Ts(t,a++,f);return t},h.Hj=function(){var t,n,r,a,o;for(o=new Up,o.a+="[",t=Xl(this.a),n=0,a=Xl(this.a).i;n1);case 5:return rA(this,t,n,r,a,this.i-l(r,15).gc()>0);default:return new Zg(this.e,t,this.c,n,r,a,!0)}},h.Tj=function(){return!0},h.Qj=function(){return uue(this)},h.Gk=function(){$r(this)},I(Gn,"EOperationImpl/2",1377),D(507,1,{2037:1,507:1},Ott),I(Gn,"EPackageImpl/1",507),D(14,83,kc,nt),h.il=function(){return this.d},h.jl=function(){return this.b},h.ml=function(){return!0},h.b=0,I(us,"EObjectContainmentWithInverseEList",14),D(365,14,kc,V8),h.nl=function(){return!0},h.Wi=function(t,n){return Ex(this,t,l(n,58))},I(us,"EObjectContainmentWithInverseEList/Resolving",365),D(308,365,kc,wy),h.Ni=function(){this.a.tb=null},I(Gn,"EPackageImpl/2",308),D(1278,1,{},ere),I(Gn,"EPackageImpl/3",1278),D(733,45,m6,$we),h._b=function(t){return Ia(t)?soe(this,t):!!zo(this.f,t)},I(Gn,"EPackageRegistryImpl",733),D(518,292,{110:1,94:1,93:1,155:1,197:1,58:1,2116:1,114:1,481:1,54:1,99:1,158:1,518:1,292:1,119:1,120:1},Hie),h.Ah=function(t){return lgt(this,t)},h.Lh=function(t,n,r){var a,o,f;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Hn(),!!(this.Bb&256);case 3:return Hn(),!!(this.Bb&512);case 4:return pt(this.s);case 5:return pt(this.t);case 6:return Hn(),f=this.t,f>1||f==-1;case 7:return Hn(),o=this.s,o>=1;case 8:return n?Of(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?l(this.Cb,62):null}return sf(this,t-yr((Tn(),N4)),Mn((a=l(Kn(this,16),29),a||N4),t),n,r)},h.Sh=function(t,n,r){var a,o,f;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),Ru(this.Ab,t,r);case 10:return this.Cb&&(r=(o=this.Db>>16,o>=0?lgt(this,r):this.Cb.Th(this,-1-o,null,r))),Nh(this,t,10,r)}return f=l(Mn((a=l(Kn(this,16),29),a||(Tn(),N4)),n),69),f.wk().zk(this,Ku(this),n-yr((Tn(),N4)),t,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 9:return qae(this,r);case 10:return Nh(this,null,10,r)}return o=l(Mn((a=l(Kn(this,16),29),a||(Tn(),N4)),n),69),o.wk().Ak(this,Ku(this),n-yr((Tn(),N4)),t,r)},h.Wh=function(t){var n,r,a;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return a=this.t,a>1||a==-1;case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&yw(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&yw(this.q).i==0);case 10:return!!(this.Db>>16==10&&l(this.Cb,62))}return nf(this,t-yr((Tn(),N4)),Mn((n=l(Kn(this,16),29),n||N4),t))},h.ii=function(){return Tn(),N4},I(Gn,"EParameterImpl",518),D(102,462,{110:1,94:1,93:1,155:1,197:1,58:1,19:1,179:1,69:1,114:1,481:1,54:1,99:1,158:1,102:1,462:1,292:1,119:1,120:1,692:1},Hye),h.Lh=function(t,n,r){var a,o,f,g;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Hn(),!!(this.Bb&256);case 3:return Hn(),!!(this.Bb&512);case 4:return pt(this.s);case 5:return pt(this.t);case 6:return Hn(),g=this.t,g>1||g==-1;case 7:return Hn(),o=this.s,o>=1;case 8:return n?Of(this):this.r;case 9:return this.q;case 10:return Hn(),!!(this.Bb&m0);case 11:return Hn(),!!(this.Bb&r4);case 12:return Hn(),!!(this.Bb&Xy);case 13:return this.j;case 14:return UE(this);case 15:return Hn(),!!(this.Bb&Sl);case 16:return Hn(),!!(this.Bb&_d);case 17:return ky(this);case 18:return Hn(),!!(this.Bb&eu);case 19:return Hn(),f=Ro(this),!!(f&&f.Bb&eu);case 20:return Hn(),!!(this.Bb&Io);case 21:return n?Ro(this):this.b;case 22:return n?$7e(this):_ut(this);case 23:return!this.a&&(this.a=new $5(D4,this,23)),this.a}return sf(this,t-yr((Tn(),o7)),Mn((a=l(Kn(this,16),29),a||o7),t),n,r)},h.Wh=function(t){var n,r,a,o;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return o=this.t,o>1||o==-1;case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&yw(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&yw(this.q).i==0);case 10:return(this.Bb&m0)==0;case 11:return(this.Bb&r4)!=0;case 12:return(this.Bb&Xy)!=0;case 13:return this.j!=null;case 14:return UE(this)!=null;case 15:return(this.Bb&Sl)!=0;case 16:return(this.Bb&_d)!=0;case 17:return!!ky(this);case 18:return(this.Bb&eu)!=0;case 19:return a=Ro(this),!!a&&(a.Bb&eu)!=0;case 20:return(this.Bb&Io)==0;case 21:return!!this.b;case 22:return!!_ut(this);case 23:return!!this.a&&this.a.i!=0}return nf(this,t-yr((Tn(),o7)),Mn((n=l(Kn(this,16),29),n||o7),t))},h.bi=function(t,n){var r,a;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:poe(this,ei(n));return;case 2:c2(this,Rt(Bt(n)));return;case 3:u2(this,Rt(Bt(n)));return;case 4:i2(this,l(n,17).a);return;case 5:My(this,l(n,17).a);return;case 8:Gm(this,l(n,142));return;case 9:a=$1(this,l(n,89),null),a&&a.oj();return;case 10:AE(this,Rt(Bt(n)));return;case 11:DE(this,Rt(Bt(n)));return;case 12:LE(this,Rt(Bt(n)));return;case 13:Z3e(this,ei(n));return;case 15:ME(this,Rt(Bt(n)));return;case 16:IE(this,Rt(Bt(n)));return;case 18:L2n(this,Rt(Bt(n)));return;case 20:v8e(this,Rt(Bt(n)));return;case 21:b7e(this,l(n,19));return;case 23:!this.a&&(this.a=new $5(D4,this,23)),$r(this.a),!this.a&&(this.a=new $5(D4,this,23)),As(this.a,l(n,16));return}uf(this,t-yr((Tn(),o7)),Mn((r=l(Kn(this,16),29),r||o7),t),n)},h.ii=function(){return Tn(),o7},h.ki=function(t){var n,r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:De(this.Cb,90)&&zy(Yl(l(this.Cb,90)),4),Fu(this,null);return;case 2:c2(this,!0);return;case 3:u2(this,!0);return;case 4:i2(this,0);return;case 5:My(this,1);return;case 8:Gm(this,null);return;case 9:r=$1(this,null,null),r&&r.oj();return;case 10:AE(this,!0);return;case 11:DE(this,!1);return;case 12:LE(this,!1);return;case 13:this.i=null,xV(this,null);return;case 15:ME(this,!1);return;case 16:IE(this,!1);return;case 18:m8e(this,!1),De(this.Cb,90)&&zy(Yl(l(this.Cb,90)),2);return;case 20:v8e(this,!0);return;case 21:b7e(this,null);return;case 23:!this.a&&(this.a=new $5(D4,this,23)),$r(this.a);return}cf(this,t-yr((Tn(),o7)),Mn((n=l(Kn(this,16),29),n||o7),t))},h.pi=function(){$7e(this),Wk(ic((El(),io),this)),Of(this),this.Bb|=1},h.uk=function(){return Ro(this)},h._k=function(){var t;return t=Ro(this),!!t&&(t.Bb&eu)!=0},h.al=function(){return(this.Bb&eu)!=0},h.bl=function(){return(this.Bb&Io)!=0},h.Yk=function(t,n){return this.c=null,o8e(this,t,n)},h.Ib=function(){var t;return this.Db&64?BU(this):(t=new Af(BU(this)),t.a+=" (containment: ",Gp(t,(this.Bb&eu)!=0),t.a+=", resolveProxies: ",Gp(t,(this.Bb&Io)!=0),t.a+=")",t.a)},I(Gn,"EReferenceImpl",102),D(561,120,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1,561:1,119:1,120:1},OS),h.Fb=function(t){return this===t},h.ld=function(){return this.b},h.md=function(){return this.c},h.Hb=function(){return fw(this)},h.Di=function(t){Ndn(this,ei(t))},h.nd=function(t){return wdn(this,ei(t))},h.Lh=function(t,n,r){var a;switch(t){case 0:return this.b;case 1:return this.c}return sf(this,t-yr((Tn(),No)),Mn((a=l(Kn(this,16),29),a||No),t),n,r)},h.Wh=function(t){var n;switch(t){case 0:return this.b!=null;case 1:return this.c!=null}return nf(this,t-yr((Tn(),No)),Mn((n=l(Kn(this,16),29),n||No),t))},h.bi=function(t,n){var r;switch(t){case 0:Pdn(this,ei(n));return;case 1:d7e(this,ei(n));return}uf(this,t-yr((Tn(),No)),Mn((r=l(Kn(this,16),29),r||No),t),n)},h.ii=function(){return Tn(),No},h.ki=function(t){var n;switch(t){case 0:f7e(this,null);return;case 1:d7e(this,null);return}cf(this,t-yr((Tn(),No)),Mn((n=l(Kn(this,16),29),n||No),t))},h.Bi=function(){var t;return this.a==-1&&(t=this.b,this.a=t==null?0:s2(t)),this.a},h.Ci=function(t){this.a=t},h.Ib=function(){var t;return this.Db&64?g0(this):(t=new Af(g0(this)),t.a+=" (key: ",Xo(t,this.b),t.a+=", value: ",Xo(t,this.c),t.a+=")",t.a)},h.a=-1,h.b=null,h.c=null;var Yc=I(Gn,"EStringToStringMapEntryImpl",561),Q_t=ks(us,"FeatureMap/Entry/Internal");D(576,1,YG),h.xl=function(t){return this.yl(l(t,54))},h.yl=function(t){return this.xl(t)},h.Fb=function(t){var n,r;return this===t?!0:De(t,76)?(n=l(t,76),n.Lk()==this.c?(r=this.md(),r==null?n.md()==null:Pi(r,n.md())):!1):!1},h.Lk=function(){return this.c},h.Hb=function(){var t;return t=this.md(),es(this.c)^(t==null?0:es(t))},h.Ib=function(){var t,n;return t=this.c,n=Ah(t.qk()).yi(),t.xe(),(n!=null&&n.length!=0?n+":"+t.xe():t.xe())+"="+this.md()},I(Gn,"EStructuralFeatureImpl/BasicFeatureMapEntry",576),D(791,576,YG,Jye),h.yl=function(t){return new Jye(this.c,t)},h.md=function(){return this.a},h.zl=function(t,n,r){return v3n(this,t,this.a,n,r)},h.Al=function(t,n,r){return w3n(this,t,this.a,n,r)},I(Gn,"EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry",791),D(1350,1,{},Ntt),h.yk=function(t,n,r,a,o){var f;return f=l(tE(t,this.b),220),f.Yl(this.a).Fk(a)},h.zk=function(t,n,r,a,o){var f;return f=l(tE(t,this.b),220),f.Pl(this.a,a,o)},h.Ak=function(t,n,r,a,o){var f;return f=l(tE(t,this.b),220),f.Ql(this.a,a,o)},h.Bk=function(t,n,r){var a;return a=l(tE(t,this.b),220),a.Yl(this.a).Qj()},h.Ck=function(t,n,r,a){var o;o=l(tE(t,this.b),220),o.Yl(this.a).Wb(a)},h.Dk=function(t,n,r){return l(tE(t,this.b),220).Yl(this.a)},h.Ek=function(t,n,r){var a;a=l(tE(t,this.b),220),a.Yl(this.a).Gk()},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator",1350),D(91,1,{},Xp,Om,Jp,Rm),h.yk=function(t,n,r,a,o){var f;if(f=n.li(r),f==null&&n.mi(r,f=WU(this,t)),!o)switch(this.e){case 50:case 41:return l(f,597).bk();case 40:return l(f,220).Vl()}return f},h.zk=function(t,n,r,a,o){var f,g;return g=n.li(r),g==null&&n.mi(r,g=WU(this,t)),f=l(g,71).Wk(a,o),f},h.Ak=function(t,n,r,a,o){var f;return f=n.li(r),f!=null&&(o=l(f,71).Xk(a,o)),o},h.Bk=function(t,n,r){var a;return a=n.li(r),a!=null&&l(a,79).Qj()},h.Ck=function(t,n,r,a){var o;o=l(n.li(r),79),!o&&n.mi(r,o=WU(this,t)),o.Wb(a)},h.Dk=function(t,n,r){var a,o;return o=n.li(r),o==null&&n.mi(r,o=WU(this,t)),De(o,79)?l(o,79):(a=l(n.li(r),15),new xQe(a))},h.Ek=function(t,n,r){var a;a=l(n.li(r),79),!a&&n.mi(r,a=WU(this,t)),a.Gk()},h.b=0,h.e=0,I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateMany",91),D(512,1,{}),h.zk=function(t,n,r,a,o){throw ue(new Qr)},h.Ak=function(t,n,r,a,o){throw ue(new Qr)},h.Dk=function(t,n,r){return new Iat(this,t,n,r)};var Sg;I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingle",512),D(1367,1,i0e,Iat),h.Fk=function(t){return this.a.yk(this.c,this.d,this.b,t,!0)},h.Qj=function(){return this.a.Bk(this.c,this.d,this.b)},h.Wb=function(t){this.a.Ck(this.c,this.d,this.b,t)},h.Gk=function(){this.a.Ek(this.c,this.d,this.b)},h.b=0,I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingle/1",1367),D(784,512,{},$5e),h.yk=function(t,n,r,a,o){return sle(t,t.Ph(),t.Fh())==this.b?this.bl()&&a?Uue(t):t.Ph():null},h.zk=function(t,n,r,a,o){var f,g;return t.Ph()&&(o=(f=t.Fh(),f>=0?t.Ah(o):t.Ph().Th(t,-1-f,null,o))),g=ms(t.Dh(),this.e),t.Ch(a,g,o)},h.Ak=function(t,n,r,a,o){var f;return f=ms(t.Dh(),this.e),t.Ch(null,f,o)},h.Bk=function(t,n,r){var a;return a=ms(t.Dh(),this.e),!!t.Ph()&&t.Fh()==a},h.Ck=function(t,n,r,a){var o,f,g,w,E;if(a!=null&&!ule(this.a,a))throw ue(new kk(XG+(De(a,58)?_xe(l(a,58).Dh()):K6e(bh(a)))+QG+this.a+"'"));if(o=t.Ph(),g=ms(t.Dh(),this.e),qe(a)!==qe(o)||t.Fh()!=g&&a!=null){if(FE(t,l(a,58)))throw ue(new Yn(EL+t.Ib()));E=null,o&&(E=(f=t.Fh(),f>=0?t.Ah(E):t.Ph().Th(t,-1-f,null,E))),w=l(a,54),w&&(E=w.Rh(t,ms(w.Dh(),this.b),null,E)),E=t.Ch(w,g,E),E&&E.oj()}else t.vh()&&t.wh()&&Ni(t,new _a(t,1,g,a,a))},h.Ek=function(t,n,r){var a,o,f,g;a=t.Ph(),a?(g=(o=t.Fh(),o>=0?t.Ah(null):t.Ph().Th(t,-1-o,null,null)),f=ms(t.Dh(),this.e),g=t.Ch(null,f,g),g&&g.oj()):t.vh()&&t.wh()&&Ni(t,new X_(t,1,this.e,null,null))},h.bl=function(){return!1},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainer",784),D(1351,784,{},kit),h.bl=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving",1351),D(574,512,{}),h.yk=function(t,n,r,a,o){var f;return f=n.li(r),f==null?this.b:qe(f)===qe(Sg)?null:f},h.Bk=function(t,n,r){var a;return a=n.li(r),a!=null&&(qe(a)===qe(Sg)||!Pi(a,this.b))},h.Ck=function(t,n,r,a){var o,f;t.vh()&&t.wh()?(o=(f=n.li(r),f==null?this.b:qe(f)===qe(Sg)?null:f),a==null?this.c!=null?(n.mi(r,null),a=this.b):this.b!=null?n.mi(r,Sg):n.mi(r,null):(this.Bl(a),n.mi(r,a)),Ni(t,this.d.Cl(t,1,this.e,o,a))):a==null?this.c!=null?n.mi(r,null):this.b!=null?n.mi(r,Sg):n.mi(r,null):(this.Bl(a),n.mi(r,a))},h.Ek=function(t,n,r){var a,o;t.vh()&&t.wh()?(a=(o=n.li(r),o==null?this.b:qe(o)===qe(Sg)?null:o),n.ni(r),Ni(t,this.d.Cl(t,1,this.e,a,this.b))):n.ni(r)},h.Bl=function(t){throw ue(new IQe)},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData",574),D(_6,1,{},NS),h.Cl=function(t,n,r,a,o){return new X_(t,n,r,a,o)},h.Dl=function(t,n,r,a,o,f){return new roe(t,n,r,a,o,f)};var MPe,DPe,IPe,OPe,NPe,PPe,BPe,ipe,FPe;I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator",_6),D(1368,_6,{},H0),h.Cl=function(t,n,r,a,o){return new m6e(t,n,r,Rt(Bt(a)),Rt(Bt(o)))},h.Dl=function(t,n,r,a,o,f){return new rct(t,n,r,Rt(Bt(a)),Rt(Bt(o)),f)},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1",1368),D(1369,_6,{},AI),h.Cl=function(t,n,r,a,o){return new Q6e(t,n,r,l(a,222).a,l(o,222).a)},h.Dl=function(t,n,r,a,o,f){return new Xot(t,n,r,l(a,222).a,l(o,222).a,f)},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2",1369),D(1370,_6,{},LI),h.Cl=function(t,n,r,a,o){return new J6e(t,n,r,l(a,180).a,l(o,180).a)},h.Dl=function(t,n,r,a,o,f){return new Qot(t,n,r,l(a,180).a,l(o,180).a,f)},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3",1370),D(1371,_6,{},f8),h.Cl=function(t,n,r,a,o){return new p6e(t,n,r,ze(Ge(a)),ze(Ge(o)))},h.Dl=function(t,n,r,a,o,f){return new Jot(t,n,r,ze(Ge(a)),ze(Ge(o)),f)},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4",1371),D(1372,_6,{},tre),h.Cl=function(t,n,r,a,o){return new t7e(t,n,r,l(a,161).a,l(o,161).a)},h.Dl=function(t,n,r,a,o,f){return new Zot(t,n,r,l(a,161).a,l(o,161).a,f)},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5",1372),D(1373,_6,{},nre),h.Cl=function(t,n,r,a,o){return new b6e(t,n,r,l(a,17).a,l(o,17).a)},h.Dl=function(t,n,r,a,o,f){return new ect(t,n,r,l(a,17).a,l(o,17).a,f)},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6",1373),D(1374,_6,{},rre),h.Cl=function(t,n,r,a,o){return new Z6e(t,n,r,l(a,168).a,l(o,168).a)},h.Dl=function(t,n,r,a,o,f){return new tct(t,n,r,l(a,168).a,l(o,168).a,f)},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7",1374),D(1375,_6,{},ire),h.Cl=function(t,n,r,a,o){return new e7e(t,n,r,l(a,191).a,l(o,191).a)},h.Dl=function(t,n,r,a,o,f){return new nct(t,n,r,l(a,191).a,l(o,191).a,f)},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8",1375),D(1353,574,{},Oat),h.Bl=function(t){if(!this.a.fk(t))throw ue(new kk(XG+bh(t)+QG+this.a+"'"))},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic",1353),D(1354,574,{},yst),h.Bl=function(t){},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic",1354),D(785,574,{}),h.Bk=function(t,n,r){var a;return a=n.li(r),a!=null},h.Ck=function(t,n,r,a){var o,f;t.vh()&&t.wh()?(o=!0,f=n.li(r),f==null?(o=!1,f=this.b):qe(f)===qe(Sg)&&(f=null),a==null?this.c!=null?(n.mi(r,null),a=this.b):n.mi(r,Sg):(this.Bl(a),n.mi(r,a)),Ni(t,this.d.Dl(t,1,this.e,f,a,!o))):a==null?this.c!=null?n.mi(r,null):n.mi(r,Sg):(this.Bl(a),n.mi(r,a))},h.Ek=function(t,n,r){var a,o;t.vh()&&t.wh()?(a=!0,o=n.li(r),o==null?(a=!1,o=this.b):qe(o)===qe(Sg)&&(o=null),n.ni(r),Ni(t,this.d.Dl(t,2,this.e,o,this.b,a))):n.ni(r)},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable",785),D(1355,785,{},Nat),h.Bl=function(t){if(!this.a.fk(t))throw ue(new kk(XG+bh(t)+QG+this.a+"'"))},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic",1355),D(1356,785,{},xst),h.Bl=function(t){},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic",1356),D(410,512,{},cH),h.yk=function(t,n,r,a,o){var f,g,w,E,C;if(C=n.li(r),this.tk()&&qe(C)===qe(Sg))return null;if(this.bl()&&a&&C!=null){if(w=l(C,54),w.Vh()&&(E=yb(t,w),w!=E)){if(!ule(this.a,E))throw ue(new kk(XG+bh(E)+QG+this.a+"'"));n.mi(r,C=E),this.al()&&(f=l(E,54),g=w.Th(t,this.b?ms(w.Dh(),this.b):-1-ms(t.Dh(),this.e),null,null),!f.Ph()&&(g=f.Rh(t,this.b?ms(f.Dh(),this.b):-1-ms(t.Dh(),this.e),null,g)),g&&g.oj()),t.vh()&&t.wh()&&Ni(t,new X_(t,9,this.e,w,E))}return C}else return C},h.zk=function(t,n,r,a,o){var f,g;return g=n.li(r),qe(g)===qe(Sg)&&(g=null),n.mi(r,a),this.Mj()?qe(g)!==qe(a)&&g!=null&&(f=l(g,54),o=f.Th(t,ms(f.Dh(),this.b),null,o)):this.al()&&g!=null&&(o=l(g,54).Th(t,-1-ms(t.Dh(),this.e),null,o)),t.vh()&&t.wh()&&(!o&&(o=new nb(4)),o.nj(new X_(t,1,this.e,g,a))),o},h.Ak=function(t,n,r,a,o){var f;return f=n.li(r),qe(f)===qe(Sg)&&(f=null),n.ni(r),t.vh()&&t.wh()&&(!o&&(o=new nb(4)),this.tk()?o.nj(new X_(t,2,this.e,f,null)):o.nj(new X_(t,1,this.e,f,null))),o},h.Bk=function(t,n,r){var a;return a=n.li(r),a!=null},h.Ck=function(t,n,r,a){var o,f,g,w,E;if(a!=null&&!ule(this.a,a))throw ue(new kk(XG+(De(a,58)?_xe(l(a,58).Dh()):K6e(bh(a)))+QG+this.a+"'"));E=n.li(r),w=E!=null,this.tk()&&qe(E)===qe(Sg)&&(E=null),g=null,this.Mj()?qe(E)!==qe(a)&&(E!=null&&(o=l(E,54),g=o.Th(t,ms(o.Dh(),this.b),null,g)),a!=null&&(o=l(a,54),g=o.Rh(t,ms(o.Dh(),this.b),null,g))):this.al()&&qe(E)!==qe(a)&&(E!=null&&(g=l(E,54).Th(t,-1-ms(t.Dh(),this.e),null,g)),a!=null&&(g=l(a,54).Rh(t,-1-ms(t.Dh(),this.e),null,g))),a==null&&this.tk()?n.mi(r,Sg):n.mi(r,a),t.vh()&&t.wh()?(f=new roe(t,1,this.e,E,a,this.tk()&&!w),g?(g.nj(f),g.oj()):Ni(t,f)):g&&g.oj()},h.Ek=function(t,n,r){var a,o,f,g,w;w=n.li(r),g=w!=null,this.tk()&&qe(w)===qe(Sg)&&(w=null),f=null,w!=null&&(this.Mj()?(a=l(w,54),f=a.Th(t,ms(a.Dh(),this.b),null,f)):this.al()&&(f=l(w,54).Th(t,-1-ms(t.Dh(),this.e),null,f))),n.ni(r),t.vh()&&t.wh()?(o=new roe(t,this.tk()?2:1,this.e,w,null,g),f?(f.nj(o),f.oj()):Ni(t,o)):f&&f.oj()},h.Mj=function(){return!1},h.al=function(){return!1},h.bl=function(){return!1},h.tk=function(){return!1},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObject",410),D(575,410,{},oae),h.al=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment",575),D(1359,575,{},wrt),h.bl=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving",1359),D(787,575,{},jye),h.tk=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable",787),D(1361,787,{},yrt),h.bl=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving",1361),D(650,575,{},yae),h.Mj=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse",650),D(1360,650,{},Eit),h.bl=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving",1360),D(788,650,{},C4e),h.tk=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable",788),D(1362,788,{},Tit),h.bl=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving",1362),D(651,410,{},$ye),h.bl=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving",651),D(1363,651,{},xrt),h.tk=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable",1363),D(789,651,{},E4e),h.Mj=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse",789),D(1364,789,{},Cit),h.tk=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable",1364),D(1357,410,{},krt),h.tk=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable",1357),D(786,410,{},T4e),h.Mj=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse",786),D(1358,786,{},Sit),h.tk=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable",1358),D(790,576,YG,x5e),h.yl=function(t){return new x5e(this.a,this.c,t)},h.md=function(){return this.b},h.zl=function(t,n,r){return bvn(this,t,this.b,r)},h.Al=function(t,n,r){return mvn(this,t,this.b,r)},I(Gn,"EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry",790),D(1365,1,i0e,xQe),h.Fk=function(t){return this.a},h.Qj=function(){return De(this.a,97)?l(this.a,97).Qj():!this.a.dc()},h.Wb=function(t){this.a.$b(),this.a.Gc(l(t,15))},h.Gk=function(){De(this.a,97)?l(this.a,97).Gk():this.a.$b()},I(Gn,"EStructuralFeatureImpl/SettingMany",1365),D(1366,576,YG,Wct),h.xl=function(t){return new lae((Gi(),UM),this.b.ri(this.a,t))},h.md=function(){return null},h.zl=function(t,n,r){return r},h.Al=function(t,n,r){return r},I(Gn,"EStructuralFeatureImpl/SimpleContentFeatureMapEntry",1366),D(652,576,YG,lae),h.xl=function(t){return new lae(this.c,t)},h.md=function(){return this.a},h.zl=function(t,n,r){return r},h.Al=function(t,n,r){return r},I(Gn,"EStructuralFeatureImpl/SimpleFeatureMapEntry",652),D(403,506,Bd,Xd),h.aj=function(t){return We(Vf,Rn,29,t,0,1)},h.Yi=function(){return!1},I(Gn,"ESuperAdapter/1",403),D(457,448,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,850:1,54:1,99:1,158:1,457:1,119:1,120:1},PS),h.Lh=function(t,n,r){var a;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.zb;case 2:return!this.a&&(this.a=new G_(this,Wo,this)),this.a}return sf(this,t-yr((Tn(),T3)),Mn((a=l(Kn(this,16),29),a||T3),t),n,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 2:return!this.a&&(this.a=new G_(this,Wo,this)),To(this.a,t,r)}return o=l(Mn((a=l(Kn(this,16),29),a||(Tn(),T3)),n),69),o.wk().Ak(this,Ku(this),n-yr((Tn(),T3)),t,r)},h.Wh=function(t){var n;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return!!this.a&&this.a.i!=0}return nf(this,t-yr((Tn(),T3)),Mn((n=l(Kn(this,16),29),n||T3),t))},h.bi=function(t,n){var r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:Fu(this,ei(n));return;case 2:!this.a&&(this.a=new G_(this,Wo,this)),$r(this.a),!this.a&&(this.a=new G_(this,Wo,this)),As(this.a,l(n,16));return}uf(this,t-yr((Tn(),T3)),Mn((r=l(Kn(this,16),29),r||T3),t),n)},h.ii=function(){return Tn(),T3},h.ki=function(t){var n;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:Fu(this,null);return;case 2:!this.a&&(this.a=new G_(this,Wo,this)),$r(this.a);return}cf(this,t-yr((Tn(),T3)),Mn((n=l(Kn(this,16),29),n||T3),t))},I(Gn,"ETypeParameterImpl",457),D(458,83,kc,G_),h.Nj=function(t,n){return Dxn(this,l(t,89),n)},h.Oj=function(t,n){return Ixn(this,l(t,89),n)},I(Gn,"ETypeParameterImpl/1",458),D(647,45,m6,Vie),h.ec=function(){return new Pz(this)},I(Gn,"ETypeParameterImpl/2",647),D(570,q1,Tl,Pz),h.Fc=function(t){return Wrt(this,l(t,89))},h.Gc=function(t){var n,r,a;for(a=!1,r=t.Kc();r.Ob();)n=l(r.Pb(),89),ki(this.a,n,"")==null&&(a=!0);return a},h.$b=function(){Nl(this.a)},h.Hc=function(t){return Hu(this.a,t)},h.Kc=function(){var t;return t=new qm(new Sr(this.a).a),new Bz(t)},h.Mc=function(t){return Rut(this,t)},h.gc=function(){return d_(this.a)},I(Gn,"ETypeParameterImpl/2/1",570),D(571,1,Oa,Bz),h.Nb=function(t){Za(this,t)},h.Pb=function(){return l(Nw(this.a).ld(),89)},h.Ob=function(){return this.a.b},h.Qb=function(){Klt(this.a)},I(Gn,"ETypeParameterImpl/2/1/1",571),D(1329,45,m6,hJe),h._b=function(t){return Ia(t)?soe(this,t):!!zo(this.f,t)},h.xc=function(t){var n,r;return n=Ia(t)?xu(this,t):hc(zo(this.f,t)),De(n,851)?(r=l(n,851),n=r.Kk(),ki(this,l(t,241),n),n):n??(t==null?(use(),Z_t):null)},I(Gn,"EValidatorRegistryImpl",1329),D(1349,720,{110:1,94:1,93:1,480:1,155:1,58:1,114:1,2040:1,54:1,99:1,158:1,119:1,120:1},d8),h.ri=function(t,n){switch(t.hk()){case 21:case 22:case 23:case 24:case 26:case 31:case 32:case 37:case 38:case 39:case 40:case 43:case 44:case 48:case 49:case 20:return n==null?null:xc(n);case 25:return Awn(n);case 27:return qvn(n);case 28:return Hvn(n);case 29:return n==null?null:Cnt(jM[0],l(n,206));case 41:return n==null?"":_m(l(n,297));case 42:return xc(n);case 50:return ei(n);default:throw ue(new Yn(yT+t.xe()+t3))}},h.si=function(t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe;switch(t.G==-1&&(t.G=(z=Ah(t),z?f2(z.vi(),t):-1)),t.G){case 0:return r=new zie,r;case 1:return n=new CI,n;case 2:return a=new hz,a;case 4:return o=new Fz,o;case 5:return f=new lJe,f;case 6:return g=new PQe,g;case 7:return w=new fz,w;case 10:return C=new m5,C;case 11:return L=new qie,L;case 12:return B=new qat,B;case 13:return V=new Hie,V;case 14:return J=new Hye,J;case 17:return te=new OS,te;case 18:return E=new Qv,E;case 19:return fe=new PS,fe;default:throw ue(new Yn(qfe+t.zb+t3))}},h.ti=function(t,n){switch(t.hk()){case 20:return n==null?null:new h3e(n);case 21:return n==null?null:new ob(n);case 23:case 22:return n==null?null:z5n(n);case 26:case 24:return n==null?null:fN(Oh(n,-128,127)<<24>>24);case 25:return aTn(n);case 27:return A7n(n);case 28:return L7n(n);case 29:return Jxn(n);case 32:case 31:return n==null?null:jy(n);case 38:case 37:return n==null?null:new Awe(n);case 40:case 39:return n==null?null:pt(Oh(n,lo,Ii));case 41:return null;case 42:return n==null,null;case 44:case 43:return n==null?null:ap(KU(n));case 49:case 48:return n==null?null:_E(Oh(n,JG,32767)<<16>>16);case 50:return n;default:throw ue(new Yn(yT+t.xe()+t3))}},I(Gn,"EcoreFactoryImpl",1349),D(560,184,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,2038:1,54:1,99:1,158:1,184:1,560:1,119:1,120:1,690:1},fat),h.gb=!1,h.hb=!1;var RPe,J_t=!1;I(Gn,"EcorePackageImpl",560),D(1234,1,{851:1},k1),h.Kk=function(){return Rnt(),eAt},I(Gn,"EcorePackageImpl/1",1234),D(1243,1,yi,A$),h.fk=function(t){return De(t,155)},h.gk=function(t){return We(uF,Rn,155,t,0,1)},I(Gn,"EcorePackageImpl/10",1243),D(1244,1,yi,L$),h.fk=function(t){return De(t,197)},h.gk=function(t){return We(Yge,Rn,197,t,0,1)},I(Gn,"EcorePackageImpl/11",1244),D(1245,1,yi,M$),h.fk=function(t){return De(t,58)},h.gk=function(t){return We(Xb,Rn,58,t,0,1)},I(Gn,"EcorePackageImpl/12",1245),D(1246,1,yi,D$),h.fk=function(t){return De(t,411)},h.gk=function(t){return We(Uf,LSe,62,t,0,1)},I(Gn,"EcorePackageImpl/13",1246),D(1247,1,yi,I$),h.fk=function(t){return De(t,241)},h.gk=function(t){return We(u1,Rn,241,t,0,1)},I(Gn,"EcorePackageImpl/14",1247),D(1248,1,yi,O$),h.fk=function(t){return De(t,518)},h.gk=function(t){return We(k3,Rn,2116,t,0,1)},I(Gn,"EcorePackageImpl/15",1248),D(1249,1,yi,V0),h.fk=function(t){return De(t,102)},h.gk=function(t){return We(I4,S6,19,t,0,1)},I(Gn,"EcorePackageImpl/16",1249),D(1250,1,yi,nl),h.fk=function(t){return De(t,179)},h.gk=function(t){return We(dl,S6,179,t,0,1)},I(Gn,"EcorePackageImpl/17",1250),D(1251,1,yi,sre),h.fk=function(t){return De(t,481)},h.gk=function(t){return We(M4,Rn,481,t,0,1)},I(Gn,"EcorePackageImpl/18",1251),D(1252,1,yi,are),h.fk=function(t){return De(t,561)},h.gk=function(t){return We(Yc,e5t,561,t,0,1)},I(Gn,"EcorePackageImpl/19",1252),D(1235,1,yi,ore),h.fk=function(t){return De(t,331)},h.gk=function(t){return We(D4,S6,35,t,0,1)},I(Gn,"EcorePackageImpl/2",1235),D(1253,1,yi,rl),h.fk=function(t){return De(t,248)},h.gk=function(t){return We(Wo,m5t,89,t,0,1)},I(Gn,"EcorePackageImpl/20",1253),D(1254,1,yi,BS),h.fk=function(t){return De(t,457)},h.gk=function(t){return We(Zu,Rn,850,t,0,1)},I(Gn,"EcorePackageImpl/21",1254),D(1255,1,yi,N$),h.fk=function(t){return hy(t)},h.gk=function(t){return We(Ns,dt,485,t,8,1)},I(Gn,"EcorePackageImpl/22",1255),D(1256,1,yi,P$),h.fk=function(t){return De(t,195)},h.gk=function(t){return We(Al,dt,195,t,0,2)},I(Gn,"EcorePackageImpl/23",1256),D(1257,1,yi,g8),h.fk=function(t){return De(t,222)},h.gk=function(t){return We(jx,dt,222,t,0,1)},I(Gn,"EcorePackageImpl/24",1257),D(1258,1,yi,cre),h.fk=function(t){return De(t,180)},h.gk=function(t){return We(PL,dt,180,t,0,1)},I(Gn,"EcorePackageImpl/25",1258),D(1259,1,yi,ak),h.fk=function(t){return De(t,206)},h.gk=function(t){return We(cK,dt,206,t,0,1)},I(Gn,"EcorePackageImpl/26",1259),D(1260,1,yi,ure),h.fk=function(t){return!1},h.gk=function(t){return We(nBe,Rn,2215,t,0,1)},I(Gn,"EcorePackageImpl/27",1260),D(1261,1,yi,B$),h.fk=function(t){return fy(t)},h.gk=function(t){return We(ta,dt,345,t,7,1)},I(Gn,"EcorePackageImpl/28",1261),D(1262,1,yi,lre),h.fk=function(t){return De(t,61)},h.gk=function(t){return We(mPe,Qy,61,t,0,1)},I(Gn,"EcorePackageImpl/29",1262),D(1236,1,yi,hre),h.fk=function(t){return De(t,519)},h.gk=function(t){return We(mi,{3:1,4:1,5:1,2033:1},598,t,0,1)},I(Gn,"EcorePackageImpl/3",1236),D(1263,1,yi,FS),h.fk=function(t){return De(t,582)},h.gk=function(t){return We(yPe,Rn,2039,t,0,1)},I(Gn,"EcorePackageImpl/30",1263),D(1264,1,yi,F$),h.fk=function(t){return De(t,160)},h.gk=function(t){return We(HPe,Qy,160,t,0,1)},I(Gn,"EcorePackageImpl/31",1264),D(1265,1,yi,MI),h.fk=function(t){return De(t,76)},h.gk=function(t){return We(CY,S5t,76,t,0,1)},I(Gn,"EcorePackageImpl/32",1265),D(1266,1,yi,RS),h.fk=function(t){return De(t,161)},h.gk=function(t){return We(_T,dt,161,t,0,1)},I(Gn,"EcorePackageImpl/33",1266),D(1267,1,yi,fre),h.fk=function(t){return De(t,17)},h.gk=function(t){return We(ro,dt,17,t,0,1)},I(Gn,"EcorePackageImpl/34",1267),D(1268,1,yi,dre),h.fk=function(t){return De(t,297)},h.gk=function(t){return We(qSe,Rn,297,t,0,1)},I(Gn,"EcorePackageImpl/35",1268),D(1269,1,yi,DI),h.fk=function(t){return De(t,168)},h.gk=function(t){return We(r3,dt,168,t,0,1)},I(Gn,"EcorePackageImpl/36",1269),D(1270,1,yi,jS),h.fk=function(t){return De(t,85)},h.gk=function(t){return We(HSe,Rn,85,t,0,1)},I(Gn,"EcorePackageImpl/37",1270),D(1271,1,yi,E1),h.fk=function(t){return De(t,599)},h.gk=function(t){return We(jPe,Rn,599,t,0,1)},I(Gn,"EcorePackageImpl/38",1271),D(1272,1,yi,ok),h.fk=function(t){return!1},h.gk=function(t){return We(rBe,Rn,2216,t,0,1)},I(Gn,"EcorePackageImpl/39",1272),D(1237,1,yi,gre),h.fk=function(t){return De(t,90)},h.gk=function(t){return We(Vf,Rn,29,t,0,1)},I(Gn,"EcorePackageImpl/4",1237),D(1273,1,yi,ck),h.fk=function(t){return De(t,191)},h.gk=function(t){return We(i3,dt,191,t,0,1)},I(Gn,"EcorePackageImpl/40",1273),D(1274,1,yi,II),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(Gn,"EcorePackageImpl/41",1274),D(1275,1,yi,xm),h.fk=function(t){return De(t,596)},h.gk=function(t){return We(wPe,Rn,596,t,0,1)},I(Gn,"EcorePackageImpl/42",1275),D(1276,1,yi,$S),h.fk=function(t){return!1},h.gk=function(t){return We(iBe,dt,2217,t,0,1)},I(Gn,"EcorePackageImpl/43",1276),D(1277,1,yi,OI),h.fk=function(t){return De(t,44)},h.gk=function(t){return We(uv,XU,44,t,0,1)},I(Gn,"EcorePackageImpl/44",1277),D(1238,1,yi,U0),h.fk=function(t){return De(t,142)},h.gk=function(t){return We(l1,Rn,142,t,0,1)},I(Gn,"EcorePackageImpl/5",1238),D(1239,1,yi,zS),h.fk=function(t){return De(t,156)},h.gk=function(t){return We(tpe,Rn,156,t,0,1)},I(Gn,"EcorePackageImpl/6",1239),D(1240,1,yi,T1),h.fk=function(t){return De(t,469)},h.gk=function(t){return We(TY,Rn,685,t,0,1)},I(Gn,"EcorePackageImpl/7",1240),D(1241,1,yi,C1),h.fk=function(t){return De(t,582)},h.gk=function(t){return We(wp,Rn,694,t,0,1)},I(Gn,"EcorePackageImpl/8",1241),D(1242,1,yi,pre),h.fk=function(t){return De(t,480)},h.gk=function(t){return We(RM,Rn,480,t,0,1)},I(Gn,"EcorePackageImpl/9",1242),D(1038,2080,Z4t,IJe),h.Mi=function(t,n){b4n(this,l(n,424))},h.Qi=function(t,n){Apt(this,t,l(n,424))},I(Gn,"MinimalEObjectImpl/1ArrayDelegatingAdapterList",1038),D(1039,152,YP,nat),h.jj=function(){return this.a.a},I(Gn,"MinimalEObjectImpl/1ArrayDelegatingAdapterList/1",1039),D(1067,1066,{},bnt),I("org.eclipse.emf.ecore.plugin","EcorePlugin",1067);var jPe=ks(_5t,"Resource");D(799,1524,A5t),h.Hl=function(t){},h.Il=function(t){},h.El=function(){return!this.a&&(this.a=new Pie(this)),this.a},h.Fl=function(t){var n,r,a,o,f;if(a=t.length,a>0)if(Xn(0,t.length),t.charCodeAt(0)==47){for(f=new Bu(4),o=1,n=1;n0&&(t=(Ga(0,r,t.length),t.substr(0,r))));return Ukn(this,t)},h.Gl=function(){return this.c},h.Ib=function(){var t;return _m(this.Rm)+"@"+(t=es(this)>>>0,t.toString(16))+" uri='"+this.d+"'"},h.b=!1,I(s0e,"ResourceImpl",799),D(1525,799,A5t,kQe),I(s0e,"BinaryResourceImpl",1525),D(1190,708,Zfe),h.bj=function(t){return De(t,58)?Bpn(this,l(t,58)):De(t,599)?new or(l(t,599).El()):qe(t)===qe(this.f)?l(t,16).Kc():(Fk(),fF.a)},h.Ob=function(){return x9e(this)},h.a=!1,I(us,"EcoreUtil/ContentTreeIterator",1190),D(1526,1190,Zfe,Ist),h.bj=function(t){return qe(t)===qe(this.f)?l(t,15).Kc():new Lct(l(t,58))},I(s0e,"ResourceImpl/5",1526),D(658,2092,b5t,Pie),h.Hc=function(t){return this.i<=4?jE(this,t):De(t,54)&&l(t,54).Jh()==this.a},h.Mi=function(t,n){t==this.i-1&&(this.a.b||(this.a.b=!0))},h.Oi=function(t,n){t==0?this.a.b||(this.a.b=!0):Noe(this,t,n)},h.Qi=function(t,n){},h.Ri=function(t,n,r){},h.Lj=function(){return 2},h.jj=function(){return this.a},h.Mj=function(){return!0},h.Nj=function(t,n){var r;return r=l(t,54),n=r.fi(this.a,n),n},h.Oj=function(t,n){var r;return r=l(t,54),r.fi(null,n)},h.Pj=function(){return!1},h.Si=function(){return!0},h.aj=function(t){return We(Xb,Rn,58,t,0,1)},h.Yi=function(){return!1},I(s0e,"ResourceImpl/ContentsEList",658),D(970,2062,iT,EQe),h.fd=function(t){return this.a.Ki(t)},h.gc=function(){return this.a.gc()},I(us,"AbstractSequentialInternalEList/1",970);var $Pe,zPe,io,qPe;D(634,1,{},Nit);var SY,_Y;I(us,"BasicExtendedMetaData",634),D(1181,1,{},Btt),h.Jl=function(){return null},h.Kl=function(){return this.a==-2&&Ye(this,Uxn(this.d,this.b)),this.a},h.Ll=function(){return null},h.Ml=function(){return Cn(),Cn(),_o},h.xe=function(){return this.c==ET&&mt(this,J1t(this.d,this.b)),this.c},h.Nl=function(){return 0},h.a=-2,h.c=ET,I(us,"BasicExtendedMetaData/EClassExtendedMetaDataImpl",1181),D(1182,1,{},sct),h.Jl=function(){return this.a==(eE(),SY)&&Mt(this,VSn(this.f,this.b)),this.a},h.Kl=function(){return 0},h.Ll=function(){return this.c==(eE(),SY)&&Je(this,USn(this.f,this.b)),this.c},h.Ml=function(){return!this.d&&Wt(this,LAn(this.f,this.b)),this.d},h.xe=function(){return this.e==ET&&_n(this,J1t(this.f,this.b)),this.e},h.Nl=function(){return this.g==-2&&Yt(this,lxn(this.f,this.b)),this.g},h.e=ET,h.g=-2,I(us,"BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl",1182),D(1180,1,{},Ftt),h.b=!1,h.c=!1,I(us,"BasicExtendedMetaData/EPackageExtendedMetaDataImpl",1180),D(1183,1,{},act),h.c=-2,h.e=ET,h.f=ET,I(us,"BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl",1183),D(593,632,kc,Jq),h.Lj=function(){return this.c},h.ol=function(){return!1},h.Wi=function(t,n){return n},h.c=0,I(us,"EDataTypeEList",593);var HPe=ks(us,"FeatureMap");D(78,593,{3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,79:1,160:1,220:1,2036:1,71:1,97:1},Ls),h.bd=function(t,n){uCn(this,t,l(n,76))},h.Fc=function(t){return _Tn(this,l(t,76))},h.Hi=function(t){Ogn(this,l(t,76))},h.Nj=function(t,n){return e0n(this,l(t,76),n)},h.Oj=function(t,n){return d4e(this,l(t,76),n)},h.Ti=function(t,n){return P_n(this,t,n)},h.Wi=function(t,n){return xMn(this,t,l(n,76))},h.hd=function(t,n){return XCn(this,t,l(n,76))},h.Uj=function(t,n){return t0n(this,l(t,76),n)},h.Vj=function(t,n){return uit(this,l(t,76),n)},h.Wj=function(t,n,r){return Q8n(this,l(t,76),l(n,76),r)},h.Zi=function(t,n){return Aue(this,t,l(n,76))},h.Ol=function(t,n){return fke(this,t,n)},h.cd=function(t,n){var r,a,o,f,g,w,E,C,L;for(C=new Lw(n.gc()),o=n.Kc();o.Ob();)if(a=l(o.Pb(),76),f=a.Lk(),up(this.e,f))(!f.Si()||!qH(this,f,a.md())&&!jE(C,a))&&qr(C,a);else{for(L=Wu(this.e.Dh(),f),r=l(this.g,124),g=!0,w=0;w=0;)if(n=t[this.c],this.k.am(n.Lk()))return this.j=this.f?n:n.md(),this.i=-2,!0;return this.i=-1,this.g=-1,!1},I(us,"BasicFeatureMap/FeatureEIterator",420),D(676,420,lg,Use),h.ul=function(){return!0},I(us,"BasicFeatureMap/ResolvingFeatureEIterator",676),D(968,496,KG,Snt),h.pj=function(){return this},I(us,"EContentsEList/1",968),D(969,496,KG,Xtt),h.ul=function(){return!1},I(us,"EContentsEList/2",969),D(967,287,WG,_nt),h.wl=function(t){},h.Ob=function(){return!1},h.Sb=function(){return!1},I(us,"EContentsEList/FeatureIteratorImpl/1",967),D(840,593,kc,yye),h.Ni=function(){this.a=!0},h.Qj=function(){return this.a},h.Gk=function(){var t;$r(this),hh(this.e)?(t=this.a,this.a=!1,Ni(this.e,new h0(this.e,2,this.c,t,!1))):this.a=!1},h.a=!1,I(us,"EDataTypeEList/Unsettable",840),D(1958,593,kc,Nnt),h.Si=function(){return!0},I(us,"EDataTypeUniqueEList",1958),D(1959,840,kc,Pnt),h.Si=function(){return!0},I(us,"EDataTypeUniqueEList/Unsettable",1959),D(147,83,kc,ml),h.nl=function(){return!0},h.Wi=function(t,n){return Ex(this,t,l(n,58))},I(us,"EObjectContainmentEList/Resolving",147),D(1184,555,kc,Bnt),h.nl=function(){return!0},h.Wi=function(t,n){return Ex(this,t,l(n,58))},I(us,"EObjectContainmentEList/Unsettable/Resolving",1184),D(766,14,kc,a4e),h.Ni=function(){this.a=!0},h.Qj=function(){return this.a},h.Gk=function(){var t;$r(this),hh(this.e)?(t=this.a,this.a=!1,Ni(this.e,new h0(this.e,2,this.c,t,!1))):this.a=!1},h.a=!1,I(us,"EObjectContainmentWithInverseEList/Unsettable",766),D(1222,766,kc,Yrt),h.nl=function(){return!0},h.Wi=function(t,n){return Ex(this,t,l(n,58))},I(us,"EObjectContainmentWithInverseEList/Unsettable/Resolving",1222),D(757,505,kc,xye),h.Ni=function(){this.a=!0},h.Qj=function(){return this.a},h.Gk=function(){var t;$r(this),hh(this.e)?(t=this.a,this.a=!1,Ni(this.e,new h0(this.e,2,this.c,t,!1))):this.a=!1},h.a=!1,I(us,"EObjectEList/Unsettable",757),D(338,505,kc,$5),h.nl=function(){return!0},h.Wi=function(t,n){return Ex(this,t,l(n,58))},I(us,"EObjectResolvingEList",338),D(1844,757,kc,Fnt),h.nl=function(){return!0},h.Wi=function(t,n){return Ex(this,t,l(n,58))},I(us,"EObjectResolvingEList/Unsettable",1844),D(1527,1,{},bre);var Z_t;I(us,"EObjectValidator",1527),D(559,505,kc,pH),h.il=function(){return this.d},h.jl=function(){return this.b},h.Mj=function(){return!0},h.ml=function(){return!0},h.b=0,I(us,"EObjectWithInverseEList",559),D(1225,559,kc,Xrt),h.ll=function(){return!0},I(us,"EObjectWithInverseEList/ManyInverse",1225),D(635,559,kc,fae),h.Ni=function(){this.a=!0},h.Qj=function(){return this.a},h.Gk=function(){var t;$r(this),hh(this.e)?(t=this.a,this.a=!1,Ni(this.e,new h0(this.e,2,this.c,t,!1))):this.a=!1},h.a=!1,I(us,"EObjectWithInverseEList/Unsettable",635),D(1224,635,kc,Qrt),h.ll=function(){return!0},I(us,"EObjectWithInverseEList/Unsettable/ManyInverse",1224),D(767,559,kc,o4e),h.nl=function(){return!0},h.Wi=function(t,n){return Ex(this,t,l(n,58))},I(us,"EObjectWithInverseResolvingEList",767),D(32,767,kc,Ln),h.ll=function(){return!0},I(us,"EObjectWithInverseResolvingEList/ManyInverse",32),D(768,635,kc,c4e),h.nl=function(){return!0},h.Wi=function(t,n){return Ex(this,t,l(n,58))},I(us,"EObjectWithInverseResolvingEList/Unsettable",768),D(1223,768,kc,Jrt),h.ll=function(){return!0},I(us,"EObjectWithInverseResolvingEList/Unsettable/ManyInverse",1223),D(1185,632,kc),h.Li=function(){return(this.b&1792)==0},h.Ni=function(){this.b|=1},h.kl=function(){return(this.b&4)!=0},h.Mj=function(){return(this.b&40)!=0},h.ll=function(){return(this.b&16)!=0},h.ml=function(){return(this.b&8)!=0},h.nl=function(){return(this.b&r4)!=0},h.al=function(){return(this.b&32)!=0},h.ol=function(){return(this.b&m0)!=0},h.fk=function(t){return this.d?Rct(this.d,t):this.Lk().Hk().fk(t)},h.Qj=function(){return this.b&2?(this.b&1)!=0:this.i!=0},h.Si=function(){return(this.b&128)!=0},h.Gk=function(){var t;$r(this),this.b&2&&(hh(this.e)?(t=(this.b&1)!=0,this.b&=-2,xk(this,new h0(this.e,2,ms(this.e.Dh(),this.Lk()),t,!1))):this.b&=-2)},h.Yi=function(){return(this.b&1536)==0},h.b=0,I(us,"EcoreEList/Generic",1185),D(1186,1185,kc,Vat),h.Lk=function(){return this.a},I(us,"EcoreEList/Dynamic",1186),D(765,66,Bd,kwe),h.aj=function(t){return bN(this.a.a,t)},I(us,"EcoreEMap/1",765),D(764,83,kc,a5e),h.Mi=function(t,n){oU(this.b,l(n,136))},h.Oi=function(t,n){zft(this.b)},h.Pi=function(t,n,r){var a;++(a=this.b,l(n,136),a).e},h.Qi=function(t,n){Fce(this.b,l(n,136))},h.Ri=function(t,n,r){Fce(this.b,l(r,136)),qe(r)===qe(n)&&l(r,136).Ci(Jln(l(n,136).ld())),oU(this.b,l(n,136))},I(us,"EcoreEMap/DelegateEObjectContainmentEList",764),D(1220,141,ASe,ift),I(us,"EcoreEMap/Unsettable",1220),D(1221,764,kc,Zrt),h.Ni=function(){this.a=!0},h.Qj=function(){return this.a},h.Gk=function(){var t;$r(this),hh(this.e)?(t=this.a,this.a=!1,Ni(this.e,new h0(this.e,2,this.c,t,!1))):this.a=!1},h.a=!1,I(us,"EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList",1221),D(1189,215,m6,Ust),h.a=!1,h.b=!1,I(us,"EcoreUtil/Copier",1189),D(759,1,Oa,Lct),h.Nb=function(t){Za(this,t)},h.Ob=function(){return F1t(this)},h.Pb=function(){var t;return F1t(this),t=this.b,this.b=null,t},h.Qb=function(){this.a.Qb()},I(us,"EcoreUtil/ProperContentIterator",759),D(1528,1527,{},dz);var eAt;I(us,"EcoreValidator",1528);var tAt;ks(us,"FeatureMapUtil/Validator"),D(1295,1,{2041:1},v5),h.am=function(t){return!0},I(us,"FeatureMapUtil/1",1295),D(773,1,{2041:1},qke),h.am=function(t){var n;return this.c==t?!0:(n=Bt(cr(this.a,t)),n==null?QSn(this,t)?(Lut(this.a,t,(Hn(),ST)),!0):(Lut(this.a,t,(Hn(),Pb)),!1):n==(Hn(),ST))},h.e=!1;var spe;I(us,"FeatureMapUtil/BasicValidator",773),D(774,45,m6,vye),I(us,"FeatureMapUtil/BasicValidator/Cache",774),D(509,56,{20:1,31:1,56:1,16:1,15:1,61:1,79:1,71:1,97:1},yO),h.bd=function(t,n){vbt(this.c,this.b,t,n)},h.Fc=function(t){return fke(this.c,this.b,t)},h.cd=function(t,n){return vLn(this.c,this.b,t,n)},h.Gc=function(t){return F_(this,t)},h.Gi=function(t,n){dwn(this.c,this.b,t,n)},h.Wk=function(t,n){return ike(this.c,this.b,t,n)},h.$i=function(t){return qU(this.c,this.b,t,!1)},h.Ii=function(){return cnt(this.c,this.b)},h.Ji=function(){return jln(this.c,this.b)},h.Ki=function(t){return vvn(this.c,this.b,t)},h.Xk=function(t,n){return Irt(this,t,n)},h.$b=function(){_8(this)},h.Hc=function(t){return qH(this.c,this.b,t)},h.Ic=function(t){return m3n(this.c,this.b,t)},h.Xb=function(t){return qU(this.c,this.b,t,!0)},h.Fk=function(t){return this},h.dd=function(t){return Cmn(this.c,this.b,t)},h.dc=function(){return _q(this)},h.Qj=function(){return!FN(this.c,this.b)},h.Kc=function(){return rwn(this.c,this.b)},h.ed=function(){return iwn(this.c,this.b)},h.fd=function(t){return P4n(this.c,this.b,t)},h.Ti=function(t,n){return Omt(this.c,this.b,t,n)},h.Ui=function(t,n){xvn(this.c,this.b,t,n)},h.gd=function(t){return hpt(this.c,this.b,t)},h.Mc=function(t){return y_n(this.c,this.b,t)},h.hd=function(t,n){return qmt(this.c,this.b,t,n)},h.Wb=function(t){EU(this.c,this.b),F_(this,l(t,15))},h.gc=function(){return N4n(this.c,this.b)},h.Pc=function(){return _bn(this.c,this.b)},h.Qc=function(t){return Smn(this.c,this.b,t)},h.Ib=function(){var t,n;for(n=new Up,n.a+="[",t=cnt(this.c,this.b);_ce(t);)Xo(n,j_(iU(t))),_ce(t)&&(n.a+=Co);return n.a+="]",n.a},h.Gk=function(){EU(this.c,this.b)},I(us,"FeatureMapUtil/FeatureEList",509),D(644,39,YP,Eoe),h.hj=function(t){return SA(this,t)},h.mj=function(t){var n,r,a,o,f,g,w;switch(this.d){case 1:case 2:{if(f=t.jj(),qe(f)===qe(this.c)&&SA(this,null)==t.hj(null))return this.g=t.ij(),t.gj()==1&&(this.d=1),!0;break}case 3:{switch(o=t.gj(),o){case 3:{if(f=t.jj(),qe(f)===qe(this.c)&&SA(this,null)==t.hj(null))return this.d=5,n=new Lw(2),qr(n,this.g),qr(n,t.ij()),this.g=n,!0;break}}break}case 5:{switch(o=t.gj(),o){case 3:{if(f=t.jj(),qe(f)===qe(this.c)&&SA(this,null)==t.hj(null))return r=l(this.g,16),r.Fc(t.ij()),!0;break}}break}case 4:{switch(o=t.gj(),o){case 3:{if(f=t.jj(),qe(f)===qe(this.c)&&SA(this,null)==t.hj(null))return this.d=1,this.g=t.ij(),!0;break}case 4:{if(f=t.jj(),qe(f)===qe(this.c)&&SA(this,null)==t.hj(null))return this.d=6,w=new Lw(2),qr(w,this.n),qr(w,t.kj()),this.n=w,g=he(le(Vr,1),di,28,15,[this.o,t.lj()]),this.g=g,!0;break}}break}case 6:{switch(o=t.gj(),o){case 4:{if(f=t.jj(),qe(f)===qe(this.c)&&SA(this,null)==t.hj(null))return r=l(this.n,16),r.Fc(t.kj()),g=l(this.g,53),a=We(Vr,di,28,g.length+1,15,1),pu(g,0,a,0,g.length),a[g.length]=t.lj(),this.g=a,!0;break}}break}}return!1},I(us,"FeatureMapUtil/FeatureENotificationImpl",644),D(564,509,{20:1,31:1,56:1,16:1,15:1,61:1,79:1,160:1,220:1,2036:1,71:1,97:1},nH),h.Ol=function(t,n){return fke(this.c,t,n)},h.Pl=function(t,n,r){return ike(this.c,t,n,r)},h.Ql=function(t,n,r){return Mke(this.c,t,n,r)},h.Rl=function(){return this},h.Sl=function(t,n){return pP(this.c,t,n)},h.Tl=function(t){return l(qU(this.c,this.b,t,!1),76).Lk()},h.Ul=function(t){return l(qU(this.c,this.b,t,!1),76).md()},h.Vl=function(){return this.a},h.Wl=function(t){return!FN(this.c,t)},h.Xl=function(t,n){HU(this.c,t,n)},h.Yl=function(t){return oft(this.c,t)},h.Zl=function(t){jdt(this.c,t)},I(us,"FeatureMapUtil/FeatureFeatureMap",564),D(1294,1,i0e,Ptt),h.Fk=function(t){return qU(this.b,this.a,-1,t)},h.Qj=function(){return!FN(this.b,this.a)},h.Wb=function(t){HU(this.b,this.a,t)},h.Gk=function(){EU(this.b,this.a)},I(us,"FeatureMapUtil/FeatureValue",1294);var c9,ape,ope,u9,nAt,gF=ks(nK,"AnyType");D(680,63,lp,Jie),I(nK,"InvalidDatatypeValueException",680);var AY=ks(nK,M5t),pF=ks(nK,D5t),VPe=ks(nK,I5t),rAt,tu,UPe,Sv,iAt,sAt,aAt,oAt,cAt,uAt,lAt,hAt,fAt,dAt,gAt,c7,pAt,u7,HM,bAt,C3,bF,mF,mAt,VM,UM;D(844,516,{110:1,94:1,93:1,58:1,54:1,99:1,857:1},zwe),h.Lh=function(t,n,r){switch(t){case 0:return r?(!this.c&&(this.c=new Ls(this,0)),this.c):(!this.c&&(this.c=new Ls(this,0)),this.c.b);case 1:return r?(!this.c&&(this.c=new Ls(this,0)),l(ku(this.c,(Gi(),Sv)),160)):(!this.c&&(this.c=new Ls(this,0)),l(l(ku(this.c,(Gi(),Sv)),160),220)).Vl();case 2:return r?(!this.b&&(this.b=new Ls(this,2)),this.b):(!this.b&&(this.b=new Ls(this,2)),this.b.b)}return sf(this,t-yr(this.ii()),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():this.ii(),t),n,r)},h.Uh=function(t,n,r){var a;switch(n){case 0:return!this.c&&(this.c=new Ls(this,0)),hP(this.c,t,r);case 1:return(!this.c&&(this.c=new Ls(this,0)),l(l(ku(this.c,(Gi(),Sv)),160),71)).Xk(t,r);case 2:return!this.b&&(this.b=new Ls(this,2)),hP(this.b,t,r)}return a=l(Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():this.ii(),n),69),a.wk().Ak(this,V6e(this),n-yr(this.ii()),t,r)},h.Wh=function(t){switch(t){case 0:return!!this.c&&this.c.i!=0;case 1:return!(!this.c&&(this.c=new Ls(this,0)),l(ku(this.c,(Gi(),Sv)),160)).dc();case 2:return!!this.b&&this.b.i!=0}return nf(this,t-yr(this.ii()),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():this.ii(),t))},h.bi=function(t,n){switch(t){case 0:!this.c&&(this.c=new Ls(this,0)),$O(this.c,n);return;case 1:(!this.c&&(this.c=new Ls(this,0)),l(l(ku(this.c,(Gi(),Sv)),160),220)).Wb(n);return;case 2:!this.b&&(this.b=new Ls(this,2)),$O(this.b,n);return}uf(this,t-yr(this.ii()),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():this.ii(),t),n)},h.ii=function(){return Gi(),UPe},h.ki=function(t){switch(t){case 0:!this.c&&(this.c=new Ls(this,0)),$r(this.c);return;case 1:(!this.c&&(this.c=new Ls(this,0)),l(ku(this.c,(Gi(),Sv)),160)).$b();return;case 2:!this.b&&(this.b=new Ls(this,2)),$r(this.b);return}cf(this,t-yr(this.ii()),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():this.ii(),t))},h.Ib=function(){var t;return this.j&4?g0(this):(t=new Af(g0(this)),t.a+=" (mixed: ",O_(t,this.c),t.a+=", anyAttribute: ",O_(t,this.b),t.a+=")",t.a)},I(ea,"AnyTypeImpl",844),D(681,516,{110:1,94:1,93:1,58:1,54:1,99:1,2119:1,681:1},yre),h.Lh=function(t,n,r){switch(t){case 0:return this.a;case 1:return this.b}return sf(this,t-yr((Gi(),c7)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():c7,t),n,r)},h.Wh=function(t){switch(t){case 0:return this.a!=null;case 1:return this.b!=null}return nf(this,t-yr((Gi(),c7)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():c7,t))},h.bi=function(t,n){switch(t){case 0:vr(this,ei(n));return;case 1:pr(this,ei(n));return}uf(this,t-yr((Gi(),c7)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():c7,t),n)},h.ii=function(){return Gi(),c7},h.ki=function(t){switch(t){case 0:this.a=null;return;case 1:this.b=null;return}cf(this,t-yr((Gi(),c7)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():c7,t))},h.Ib=function(){var t;return this.j&4?g0(this):(t=new Af(g0(this)),t.a+=" (data: ",Xo(t,this.a),t.a+=", target: ",Xo(t,this.b),t.a+=")",t.a)},h.a=null,h.b=null,I(ea,"ProcessingInstructionImpl",681),D(682,844,{110:1,94:1,93:1,58:1,54:1,99:1,857:1,2120:1,682:1},fJe),h.Lh=function(t,n,r){switch(t){case 0:return r?(!this.c&&(this.c=new Ls(this,0)),this.c):(!this.c&&(this.c=new Ls(this,0)),this.c.b);case 1:return r?(!this.c&&(this.c=new Ls(this,0)),l(ku(this.c,(Gi(),Sv)),160)):(!this.c&&(this.c=new Ls(this,0)),l(l(ku(this.c,(Gi(),Sv)),160),220)).Vl();case 2:return r?(!this.b&&(this.b=new Ls(this,2)),this.b):(!this.b&&(this.b=new Ls(this,2)),this.b.b);case 3:return!this.c&&(this.c=new Ls(this,0)),ei(pP(this.c,(Gi(),HM),!0));case 4:return l4e(this.a,(!this.c&&(this.c=new Ls(this,0)),ei(pP(this.c,(Gi(),HM),!0))));case 5:return this.a}return sf(this,t-yr((Gi(),u7)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():u7,t),n,r)},h.Wh=function(t){switch(t){case 0:return!!this.c&&this.c.i!=0;case 1:return!(!this.c&&(this.c=new Ls(this,0)),l(ku(this.c,(Gi(),Sv)),160)).dc();case 2:return!!this.b&&this.b.i!=0;case 3:return!this.c&&(this.c=new Ls(this,0)),ei(pP(this.c,(Gi(),HM),!0))!=null;case 4:return l4e(this.a,(!this.c&&(this.c=new Ls(this,0)),ei(pP(this.c,(Gi(),HM),!0))))!=null;case 5:return!!this.a}return nf(this,t-yr((Gi(),u7)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():u7,t))},h.bi=function(t,n){switch(t){case 0:!this.c&&(this.c=new Ls(this,0)),$O(this.c,n);return;case 1:(!this.c&&(this.c=new Ls(this,0)),l(l(ku(this.c,(Gi(),Sv)),160),220)).Wb(n);return;case 2:!this.b&&(this.b=new Ls(this,2)),$O(this.b,n);return;case 3:J5e(this,ei(n));return;case 4:J5e(this,u4e(this.a,n));return;case 5:Nn(this,l(n,156));return}uf(this,t-yr((Gi(),u7)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():u7,t),n)},h.ii=function(){return Gi(),u7},h.ki=function(t){switch(t){case 0:!this.c&&(this.c=new Ls(this,0)),$r(this.c);return;case 1:(!this.c&&(this.c=new Ls(this,0)),l(ku(this.c,(Gi(),Sv)),160)).$b();return;case 2:!this.b&&(this.b=new Ls(this,2)),$r(this.b);return;case 3:!this.c&&(this.c=new Ls(this,0)),HU(this.c,(Gi(),HM),null);return;case 4:J5e(this,u4e(this.a,null));return;case 5:this.a=null;return}cf(this,t-yr((Gi(),u7)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():u7,t))},I(ea,"SimpleAnyTypeImpl",682),D(683,516,{110:1,94:1,93:1,58:1,54:1,99:1,2121:1,683:1},dJe),h.Lh=function(t,n,r){switch(t){case 0:return r?(!this.a&&(this.a=new Ls(this,0)),this.a):(!this.a&&(this.a=new Ls(this,0)),this.a.b);case 1:return r?(!this.b&&(this.b=new xl((Tn(),No),Yc,this,1)),this.b):(!this.b&&(this.b=new xl((Tn(),No),Yc,this,1)),iN(this.b));case 2:return r?(!this.c&&(this.c=new xl((Tn(),No),Yc,this,2)),this.c):(!this.c&&(this.c=new xl((Tn(),No),Yc,this,2)),iN(this.c));case 3:return!this.a&&(this.a=new Ls(this,0)),ku(this.a,(Gi(),bF));case 4:return!this.a&&(this.a=new Ls(this,0)),ku(this.a,(Gi(),mF));case 5:return!this.a&&(this.a=new Ls(this,0)),ku(this.a,(Gi(),VM));case 6:return!this.a&&(this.a=new Ls(this,0)),ku(this.a,(Gi(),UM))}return sf(this,t-yr((Gi(),C3)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():C3,t),n,r)},h.Uh=function(t,n,r){var a;switch(n){case 0:return!this.a&&(this.a=new Ls(this,0)),hP(this.a,t,r);case 1:return!this.b&&(this.b=new xl((Tn(),No),Yc,this,1)),Uq(this.b,t,r);case 2:return!this.c&&(this.c=new xl((Tn(),No),Yc,this,2)),Uq(this.c,t,r);case 5:return!this.a&&(this.a=new Ls(this,0)),Irt(ku(this.a,(Gi(),VM)),t,r)}return a=l(Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():(Gi(),C3),n),69),a.wk().Ak(this,V6e(this),n-yr((Gi(),C3)),t,r)},h.Wh=function(t){switch(t){case 0:return!!this.a&&this.a.i!=0;case 1:return!!this.b&&this.b.f!=0;case 2:return!!this.c&&this.c.f!=0;case 3:return!this.a&&(this.a=new Ls(this,0)),!_q(ku(this.a,(Gi(),bF)));case 4:return!this.a&&(this.a=new Ls(this,0)),!_q(ku(this.a,(Gi(),mF)));case 5:return!this.a&&(this.a=new Ls(this,0)),!_q(ku(this.a,(Gi(),VM)));case 6:return!this.a&&(this.a=new Ls(this,0)),!_q(ku(this.a,(Gi(),UM)))}return nf(this,t-yr((Gi(),C3)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():C3,t))},h.bi=function(t,n){switch(t){case 0:!this.a&&(this.a=new Ls(this,0)),$O(this.a,n);return;case 1:!this.b&&(this.b=new xl((Tn(),No),Yc,this,1)),_V(this.b,n);return;case 2:!this.c&&(this.c=new xl((Tn(),No),Yc,this,2)),_V(this.c,n);return;case 3:!this.a&&(this.a=new Ls(this,0)),_8(ku(this.a,(Gi(),bF))),!this.a&&(this.a=new Ls(this,0)),F_(ku(this.a,bF),l(n,16));return;case 4:!this.a&&(this.a=new Ls(this,0)),_8(ku(this.a,(Gi(),mF))),!this.a&&(this.a=new Ls(this,0)),F_(ku(this.a,mF),l(n,16));return;case 5:!this.a&&(this.a=new Ls(this,0)),_8(ku(this.a,(Gi(),VM))),!this.a&&(this.a=new Ls(this,0)),F_(ku(this.a,VM),l(n,16));return;case 6:!this.a&&(this.a=new Ls(this,0)),_8(ku(this.a,(Gi(),UM))),!this.a&&(this.a=new Ls(this,0)),F_(ku(this.a,UM),l(n,16));return}uf(this,t-yr((Gi(),C3)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():C3,t),n)},h.ii=function(){return Gi(),C3},h.ki=function(t){switch(t){case 0:!this.a&&(this.a=new Ls(this,0)),$r(this.a);return;case 1:!this.b&&(this.b=new xl((Tn(),No),Yc,this,1)),this.b.c.$b();return;case 2:!this.c&&(this.c=new xl((Tn(),No),Yc,this,2)),this.c.c.$b();return;case 3:!this.a&&(this.a=new Ls(this,0)),_8(ku(this.a,(Gi(),bF)));return;case 4:!this.a&&(this.a=new Ls(this,0)),_8(ku(this.a,(Gi(),mF)));return;case 5:!this.a&&(this.a=new Ls(this,0)),_8(ku(this.a,(Gi(),VM)));return;case 6:!this.a&&(this.a=new Ls(this,0)),_8(ku(this.a,(Gi(),UM)));return}cf(this,t-yr((Gi(),C3)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():C3,t))},h.Ib=function(){var t;return this.j&4?g0(this):(t=new Af(g0(this)),t.a+=" (mixed: ",O_(t,this.a),t.a+=")",t.a)},I(ea,"XMLTypeDocumentRootImpl",683),D(2028,720,{110:1,94:1,93:1,480:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1,2122:1},uk),h.ri=function(t,n){switch(t.hk()){case 7:case 8:case 9:case 10:case 16:case 22:case 23:case 24:case 25:case 26:case 32:case 33:case 34:case 36:case 37:case 44:case 45:case 50:case 51:case 53:case 55:case 56:case 57:case 58:case 60:case 61:case 4:return n==null?null:xc(n);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return ei(n);case 6:return hfn(l(n,195));case 12:case 47:case 49:case 11:return Lvt(this,t,n);case 13:return n==null?null:kLn(l(n,247));case 15:case 14:return n==null?null:_gn(ze(Ge(n)));case 17:return Sgt((Gi(),n));case 18:return Sgt(n);case 21:case 20:return n==null?null:Agn(l(n,161).a);case 27:return ffn(l(n,195));case 30:return $dt((Gi(),l(n,15)));case 31:return $dt(l(n,15));case 40:return gfn((Gi(),n));case 42:return _gt((Gi(),n));case 43:return _gt(n);case 59:case 48:return dfn((Gi(),n));default:throw ue(new Yn(yT+t.xe()+t3))}},h.si=function(t){var n,r,a,o,f;switch(t.G==-1&&(t.G=(r=Ah(t),r?f2(r.vi(),t):-1)),t.G){case 0:return n=new zwe,n;case 1:return a=new yre,a;case 2:return o=new fJe,o;case 3:return f=new dJe,f;default:throw ue(new Yn(qfe+t.zb+t3))}},h.ti=function(t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te;switch(t.hk()){case 5:case 52:case 4:return n;case 6:return y6n(n);case 8:case 7:return n==null?null:axn(n);case 9:return n==null?null:fN(Oh((a=Tu(n,!0),a.length>0&&(Xn(0,a.length),a.charCodeAt(0)==43)?(Xn(1,a.length+1),a.substr(1)):a),-128,127)<<24>>24);case 10:return n==null?null:fN(Oh((o=Tu(n,!0),o.length>0&&(Xn(0,o.length),o.charCodeAt(0)==43)?(Xn(1,o.length+1),o.substr(1)):o),-128,127)<<24>>24);case 11:return ei(Kw(this,(Gi(),aAt),n));case 12:return ei(Kw(this,(Gi(),oAt),n));case 13:return n==null?null:new h3e(Tu(n,!0));case 15:case 14:return LTn(n);case 16:return ei(Kw(this,(Gi(),cAt),n));case 17:return q1t((Gi(),n));case 18:return q1t(n);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return Tu(n,!0);case 21:case 20:return jTn(n);case 22:return ei(Kw(this,(Gi(),uAt),n));case 23:return ei(Kw(this,(Gi(),lAt),n));case 24:return ei(Kw(this,(Gi(),hAt),n));case 25:return ei(Kw(this,(Gi(),fAt),n));case 26:return ei(Kw(this,(Gi(),dAt),n));case 27:return c6n(n);case 30:return H1t((Gi(),n));case 31:return H1t(n);case 32:return n==null?null:pt(Oh((L=Tu(n,!0),L.length>0&&(Xn(0,L.length),L.charCodeAt(0)==43)?(Xn(1,L.length+1),L.substr(1)):L),lo,Ii));case 33:return n==null?null:new ob((B=Tu(n,!0),B.length>0&&(Xn(0,B.length),B.charCodeAt(0)==43)?(Xn(1,B.length+1),B.substr(1)):B));case 34:return n==null?null:pt(Oh((z=Tu(n,!0),z.length>0&&(Xn(0,z.length),z.charCodeAt(0)==43)?(Xn(1,z.length+1),z.substr(1)):z),lo,Ii));case 36:return n==null?null:ap(KU((V=Tu(n,!0),V.length>0&&(Xn(0,V.length),V.charCodeAt(0)==43)?(Xn(1,V.length+1),V.substr(1)):V)));case 37:return n==null?null:ap(KU((J=Tu(n,!0),J.length>0&&(Xn(0,J.length),J.charCodeAt(0)==43)?(Xn(1,J.length+1),J.substr(1)):J)));case 40:return s7n((Gi(),n));case 42:return V1t((Gi(),n));case 43:return V1t(n);case 44:return n==null?null:new ob((te=Tu(n,!0),te.length>0&&(Xn(0,te.length),te.charCodeAt(0)==43)?(Xn(1,te.length+1),te.substr(1)):te));case 45:return n==null?null:new ob((fe=Tu(n,!0),fe.length>0&&(Xn(0,fe.length),fe.charCodeAt(0)==43)?(Xn(1,fe.length+1),fe.substr(1)):fe));case 46:return Tu(n,!1);case 47:return ei(Kw(this,(Gi(),gAt),n));case 59:case 48:return i7n((Gi(),n));case 49:return ei(Kw(this,(Gi(),pAt),n));case 50:return n==null?null:_E(Oh((Te=Tu(n,!0),Te.length>0&&(Xn(0,Te.length),Te.charCodeAt(0)==43)?(Xn(1,Te.length+1),Te.substr(1)):Te),JG,32767)<<16>>16);case 51:return n==null?null:_E(Oh((f=Tu(n,!0),f.length>0&&(Xn(0,f.length),f.charCodeAt(0)==43)?(Xn(1,f.length+1),f.substr(1)):f),JG,32767)<<16>>16);case 53:return ei(Kw(this,(Gi(),bAt),n));case 55:return n==null?null:_E(Oh((g=Tu(n,!0),g.length>0&&(Xn(0,g.length),g.charCodeAt(0)==43)?(Xn(1,g.length+1),g.substr(1)):g),JG,32767)<<16>>16);case 56:return n==null?null:_E(Oh((w=Tu(n,!0),w.length>0&&(Xn(0,w.length),w.charCodeAt(0)==43)?(Xn(1,w.length+1),w.substr(1)):w),JG,32767)<<16>>16);case 57:return n==null?null:ap(KU((E=Tu(n,!0),E.length>0&&(Xn(0,E.length),E.charCodeAt(0)==43)?(Xn(1,E.length+1),E.substr(1)):E)));case 58:return n==null?null:ap(KU((C=Tu(n,!0),C.length>0&&(Xn(0,C.length),C.charCodeAt(0)==43)?(Xn(1,C.length+1),C.substr(1)):C)));case 60:return n==null?null:pt(Oh((r=Tu(n,!0),r.length>0&&(Xn(0,r.length),r.charCodeAt(0)==43)?(Xn(1,r.length+1),r.substr(1)):r),lo,Ii));case 61:return n==null?null:pt(Oh(Tu(n,!0),lo,Ii));default:throw ue(new Yn(yT+t.xe()+t3))}};var vAt,GPe,wAt,KPe;I(ea,"XMLTypeFactoryImpl",2028),D(594,184,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1,2044:1,594:1},dat),h.N=!1,h.O=!1;var yAt=!1;I(ea,"XMLTypePackageImpl",594),D(1961,1,{851:1},lk),h.Kk=function(){return xke(),LAt},I(ea,"XMLTypePackageImpl/1",1961),D(1970,1,yi,qS),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/10",1970),D(1971,1,yi,mre),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/11",1971),D(1972,1,yi,vre),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/12",1972),D(1973,1,yi,p8),h.fk=function(t){return fy(t)},h.gk=function(t){return We(ta,dt,345,t,7,1)},I(ea,"XMLTypePackageImpl/13",1973),D(1974,1,yi,R$),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/14",1974),D(1975,1,yi,j$),h.fk=function(t){return De(t,15)},h.gk=function(t){return We(mf,Qy,15,t,0,1)},I(ea,"XMLTypePackageImpl/15",1975),D(1976,1,yi,wre),h.fk=function(t){return De(t,15)},h.gk=function(t){return We(mf,Qy,15,t,0,1)},I(ea,"XMLTypePackageImpl/16",1976),D(1977,1,yi,$$),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/17",1977),D(1978,1,yi,z$),h.fk=function(t){return De(t,161)},h.gk=function(t){return We(_T,dt,161,t,0,1)},I(ea,"XMLTypePackageImpl/18",1978),D(1979,1,yi,NI),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/19",1979),D(1962,1,yi,xre),h.fk=function(t){return De(t,857)},h.gk=function(t){return We(gF,Rn,857,t,0,1)},I(ea,"XMLTypePackageImpl/2",1962),D(1980,1,yi,HS),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/20",1980),D(1981,1,yi,kre),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/21",1981),D(1982,1,yi,Ere),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/22",1982),D(1983,1,yi,Tre),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/23",1983),D(1984,1,yi,Cre),h.fk=function(t){return De(t,195)},h.gk=function(t){return We(Al,dt,195,t,0,2)},I(ea,"XMLTypePackageImpl/24",1984),D(1985,1,yi,Sre),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/25",1985),D(1986,1,yi,q$),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/26",1986),D(1987,1,yi,_re),h.fk=function(t){return De(t,15)},h.gk=function(t){return We(mf,Qy,15,t,0,1)},I(ea,"XMLTypePackageImpl/27",1987),D(1988,1,yi,Are),h.fk=function(t){return De(t,15)},h.gk=function(t){return We(mf,Qy,15,t,0,1)},I(ea,"XMLTypePackageImpl/28",1988),D(1989,1,yi,Lre),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/29",1989),D(1963,1,yi,H$),h.fk=function(t){return De(t,681)},h.gk=function(t){return We(AY,Rn,2119,t,0,1)},I(ea,"XMLTypePackageImpl/3",1963),D(1990,1,yi,Mre),h.fk=function(t){return De(t,17)},h.gk=function(t){return We(ro,dt,17,t,0,1)},I(ea,"XMLTypePackageImpl/30",1990),D(1991,1,yi,Dre),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/31",1991),D(1992,1,yi,VS),h.fk=function(t){return De(t,168)},h.gk=function(t){return We(r3,dt,168,t,0,1)},I(ea,"XMLTypePackageImpl/32",1992),D(1993,1,yi,Ire),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/33",1993),D(1994,1,yi,Ore),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/34",1994),D(1995,1,yi,Nre),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/35",1995),D(1996,1,yi,Pre),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/36",1996),D(1997,1,yi,Bre),h.fk=function(t){return De(t,15)},h.gk=function(t){return We(mf,Qy,15,t,0,1)},I(ea,"XMLTypePackageImpl/37",1997),D(1998,1,yi,Fre),h.fk=function(t){return De(t,15)},h.gk=function(t){return We(mf,Qy,15,t,0,1)},I(ea,"XMLTypePackageImpl/38",1998),D(1999,1,yi,V$),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/39",1999),D(1964,1,yi,Rre),h.fk=function(t){return De(t,682)},h.gk=function(t){return We(pF,Rn,2120,t,0,1)},I(ea,"XMLTypePackageImpl/4",1964),D(2e3,1,yi,U$),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/40",2e3),D(2001,1,yi,jre),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/41",2001),D(2002,1,yi,PI),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/42",2002),D(2003,1,yi,$re),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/43",2003),D(2004,1,yi,G$),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/44",2004),D(2005,1,yi,zre),h.fk=function(t){return De(t,191)},h.gk=function(t){return We(i3,dt,191,t,0,1)},I(ea,"XMLTypePackageImpl/45",2005),D(2006,1,yi,K$),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/46",2006),D(2007,1,yi,qre),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/47",2007),D(2008,1,yi,W$),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/48",2008),D(2009,1,yi,Y$),h.fk=function(t){return De(t,191)},h.gk=function(t){return We(i3,dt,191,t,0,1)},I(ea,"XMLTypePackageImpl/49",2009),D(1965,1,yi,X$),h.fk=function(t){return De(t,683)},h.gk=function(t){return We(VPe,Rn,2121,t,0,1)},I(ea,"XMLTypePackageImpl/5",1965),D(2010,1,yi,BI),h.fk=function(t){return De(t,168)},h.gk=function(t){return We(r3,dt,168,t,0,1)},I(ea,"XMLTypePackageImpl/50",2010),D(2011,1,yi,w5),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/51",2011),D(2012,1,yi,US),h.fk=function(t){return De(t,17)},h.gk=function(t){return We(ro,dt,17,t,0,1)},I(ea,"XMLTypePackageImpl/52",2012),D(1966,1,yi,S1),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/6",1966),D(1967,1,yi,Q$),h.fk=function(t){return De(t,195)},h.gk=function(t){return We(Al,dt,195,t,0,2)},I(ea,"XMLTypePackageImpl/7",1967),D(1968,1,yi,hk),h.fk=function(t){return hy(t)},h.gk=function(t){return We(Ns,dt,485,t,8,1)},I(ea,"XMLTypePackageImpl/8",1968),D(1969,1,yi,FI),h.fk=function(t){return De(t,222)},h.gk=function(t){return We(jx,dt,222,t,0,1)},I(ea,"XMLTypePackageImpl/9",1969);var nd,N2,GM,LY,ye;D(55,63,lp,ri),I(y2,"RegEx/ParseException",55),D(836,1,{},J$),h.bm=function(t){return tr*16)throw ue(new ri(ai((Jr(),H4t))));r=r*16+o}while(!0);if(this.a!=125)throw ue(new ri(ai((Jr(),V4t))));if(r>TT)throw ue(new ri(ai((Jr(),U4t))));t=r}else{if(o=0,this.c!=0||(o=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));if(r=o,Li(this),this.c!=0||(o=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));r=r*16+o,t=r}break;case 117:if(a=0,Li(this),this.c!=0||(a=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));if(n=a,Li(this),this.c!=0||(a=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));if(n=n*16+a,Li(this),this.c!=0||(a=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));if(n=n*16+a,Li(this),this.c!=0||(a=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));n=n*16+a,t=n;break;case 118:if(Li(this),this.c!=0||(a=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));if(n=a,Li(this),this.c!=0||(a=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));if(n=n*16+a,Li(this),this.c!=0||(a=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));if(n=n*16+a,Li(this),this.c!=0||(a=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));if(n=n*16+a,Li(this),this.c!=0||(a=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));if(n=n*16+a,Li(this),this.c!=0||(a=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));if(n=n*16+a,n>TT)throw ue(new ri(ai((Jr(),"parser.descappe.4"))));t=n;break;case 65:case 90:case 122:throw ue(new ri(ai((Jr(),G4t))))}return t},h.dm=function(t){var n,r;switch(t){case 100:r=(this.e&32)==32?_b("Nd",!0):(Di(),MY);break;case 68:r=(this.e&32)==32?_b("Nd",!1):(Di(),ZPe);break;case 119:r=(this.e&32)==32?_b("IsWord",!0):(Di(),lC);break;case 87:r=(this.e&32)==32?_b("IsWord",!1):(Di(),tBe);break;case 115:r=(this.e&32)==32?_b("IsSpace",!0):(Di(),l9);break;case 83:r=(this.e&32)==32?_b("IsSpace",!1):(Di(),eBe);break;default:throw ue(new Ac((n=t,G5t+n.toString(16))))}return r},h.em=function(t){var n,r,a,o,f,g,w,E,C,L,B,z;for(this.b=1,Li(this),n=null,this.c==0&&this.a==94?(Li(this),t?L=(Di(),Di(),new _h(5)):(n=(Di(),Di(),new _h(4)),Eu(n,0,TT),L=new _h(4))):L=(Di(),Di(),new _h(4)),o=!0;(z=this.c)!=1&&!(z==0&&this.a==93&&!o);){if(o=!1,r=this.a,a=!1,z==10)switch(r){case 100:case 68:case 119:case 87:case 115:case 83:Ky(L,this.dm(r)),a=!0;break;case 105:case 73:case 99:case 67:r=this.um(L,r),r<0&&(a=!0);break;case 112:case 80:if(B=w9e(this,r),!B)throw ue(new ri(ai((Jr(),t0e))));Ky(L,B),a=!0;break;default:r=this.cm()}else if(z==20){if(g=Nk(this.i,58,this.d),g<0)throw ue(new ri(ai((Jr(),kSe))));if(w=!0,co(this.i,this.d)==94&&(++this.d,w=!1),f=tf(this.i,this.d,g),E=vlt(f,w,(this.e&512)==512),!E)throw ue(new ri(ai((Jr(),R4t))));if(Ky(L,E),a=!0,g+1>=this.j||co(this.i,g+1)!=93)throw ue(new ri(ai((Jr(),kSe))));this.d=g+2}if(Li(this),!a)if(this.c!=0||this.a!=45)Eu(L,r,r);else{if(Li(this),(z=this.c)==1)throw ue(new ri(ai((Jr(),UG))));z==0&&this.a==93?(Eu(L,r,r),Eu(L,45,45)):(C=this.a,z==10&&(C=this.cm()),Li(this),Eu(L,r,C))}(this.e&m0)==m0&&this.c==0&&this.a==44&&Li(this)}if(this.c==1)throw ue(new ri(ai((Jr(),UG))));return n&&(nL(n,L),L=n),c6(L),eL(L),this.b=0,Li(this),L},h.fm=function(){var t,n,r,a;for(r=this.em(!1);(a=this.c)!=7;)if(t=this.a,a==0&&(t==45||t==38)||a==4){if(Li(this),this.c!=9)throw ue(new ri(ai((Jr(),$4t))));if(n=this.em(!1),a==4)Ky(r,n);else if(t==45)nL(r,n);else if(t==38)Cvt(r,n);else throw ue(new Ac("ASSERT"))}else throw ue(new ri(ai((Jr(),z4t))));return Li(this),r},h.gm=function(){var t,n;return t=this.a-48,n=(Di(),Di(),new coe(12,null,t)),!this.g&&(this.g=new jz),Rz(this.g,new Ewe(t)),Li(this),n},h.hm=function(){return Li(this),Di(),EAt},h.im=function(){return Li(this),Di(),kAt},h.jm=function(){throw ue(new ri(ai((Jr(),bf))))},h.km=function(){throw ue(new ri(ai((Jr(),bf))))},h.lm=function(){return Li(this),Eyn()},h.mm=function(){return Li(this),Di(),CAt},h.nm=function(){return Li(this),Di(),_At},h.om=function(){var t;if(this.d>=this.j||((t=co(this.i,this.d++))&65504)!=64)throw ue(new ri(ai((Jr(),P4t))));return Li(this),Di(),Di(),new ng(0,t-64)},h.pm=function(){return Li(this),SAn()},h.qm=function(){return Li(this),Di(),AAt},h.rm=function(){var t;return t=(Di(),Di(),new ng(0,105)),Li(this),t},h.sm=function(){return Li(this),Di(),SAt},h.tm=function(){return Li(this),Di(),TAt},h.um=function(t,n){return this.cm()},h.vm=function(){return Li(this),Di(),QPe},h.wm=function(){var t,n,r,a,o;if(this.d+1>=this.j)throw ue(new ri(ai((Jr(),I4t))));if(a=-1,n=null,t=co(this.i,this.d),49<=t&&t<=57){if(a=t-48,!this.g&&(this.g=new jz),Rz(this.g,new Ewe(a)),++this.d,co(this.i,this.d)!=41)throw ue(new ri(ai((Jr(),ov))));++this.d}else switch(t==63&&--this.d,Li(this),n=Gke(this),n.e){case 20:case 21:case 22:case 23:break;case 8:if(this.c!=7)throw ue(new ri(ai((Jr(),ov))));break;default:throw ue(new ri(ai((Jr(),O4t))))}if(Li(this),o=jw(this),r=null,o.e==2){if(o.Pm()!=2)throw ue(new ri(ai((Jr(),N4t))));r=o.Lm(1),o=o.Lm(0)}if(this.c!=7)throw ue(new ri(ai((Jr(),ov))));return Li(this),Di(),Di(),new Zlt(a,n,o,r)},h.xm=function(){return Li(this),Di(),JPe},h.ym=function(){var t;if(Li(this),t=bH(24,jw(this)),this.c!=7)throw ue(new ri(ai((Jr(),ov))));return Li(this),t},h.zm=function(){var t;if(Li(this),t=bH(20,jw(this)),this.c!=7)throw ue(new ri(ai((Jr(),ov))));return Li(this),t},h.Am=function(){var t;if(Li(this),t=bH(22,jw(this)),this.c!=7)throw ue(new ri(ai((Jr(),ov))));return Li(this),t},h.Bm=function(){var t,n,r,a,o;for(t=0,r=0,n=-1;this.d=this.j)throw ue(new ri(ai((Jr(),ySe))));if(n==45){for(++this.d;this.d=this.j)throw ue(new ri(ai((Jr(),ySe))))}if(n==58){if(++this.d,Li(this),a=Wst(jw(this),t,r),this.c!=7)throw ue(new ri(ai((Jr(),ov))));Li(this)}else if(n==41)++this.d,Li(this),a=Wst(jw(this),t,r);else throw ue(new ri(ai((Jr(),D4t))));return a},h.Cm=function(){var t;if(Li(this),t=bH(21,jw(this)),this.c!=7)throw ue(new ri(ai((Jr(),ov))));return Li(this),t},h.Dm=function(){var t;if(Li(this),t=bH(23,jw(this)),this.c!=7)throw ue(new ri(ai((Jr(),ov))));return Li(this),t},h.Em=function(){var t,n;if(Li(this),t=this.f++,n=Bae(jw(this),t),this.c!=7)throw ue(new ri(ai((Jr(),ov))));return Li(this),n},h.Fm=function(){var t;if(Li(this),t=Bae(jw(this),0),this.c!=7)throw ue(new ri(ai((Jr(),ov))));return Li(this),t},h.Gm=function(t){return Li(this),this.c==5?(Li(this),oH(t,(Di(),Di(),new Ty(9,t)))):oH(t,(Di(),Di(),new Ty(3,t)))},h.Hm=function(t){var n;return Li(this),n=(Di(),Di(),new B_(2)),this.c==5?(Li(this),Qm(n,WM),Qm(n,t)):(Qm(n,t),Qm(n,WM)),n},h.Im=function(t){return Li(this),this.c==5?(Li(this),Di(),Di(),new Ty(9,t)):(Di(),Di(),new Ty(3,t))},h.a=0,h.b=0,h.c=0,h.d=0,h.e=0,h.f=1,h.g=null,h.j=0,I(y2,"RegEx/RegexParser",836),D(1947,836,{},gJe),h.bm=function(t){return!1},h.cm=function(){return eke(this)},h.dm=function(t){return YE(t)},h.em=function(t){return ywt(this)},h.fm=function(){throw ue(new ri(ai((Jr(),bf))))},h.gm=function(){throw ue(new ri(ai((Jr(),bf))))},h.hm=function(){throw ue(new ri(ai((Jr(),bf))))},h.im=function(){throw ue(new ri(ai((Jr(),bf))))},h.jm=function(){return Li(this),YE(67)},h.km=function(){return Li(this),YE(73)},h.lm=function(){throw ue(new ri(ai((Jr(),bf))))},h.mm=function(){throw ue(new ri(ai((Jr(),bf))))},h.nm=function(){throw ue(new ri(ai((Jr(),bf))))},h.om=function(){return Li(this),YE(99)},h.pm=function(){throw ue(new ri(ai((Jr(),bf))))},h.qm=function(){throw ue(new ri(ai((Jr(),bf))))},h.rm=function(){return Li(this),YE(105)},h.sm=function(){throw ue(new ri(ai((Jr(),bf))))},h.tm=function(){throw ue(new ri(ai((Jr(),bf))))},h.um=function(t,n){return Ky(t,YE(n)),-1},h.vm=function(){return Li(this),Di(),Di(),new ng(0,94)},h.wm=function(){throw ue(new ri(ai((Jr(),bf))))},h.xm=function(){return Li(this),Di(),Di(),new ng(0,36)},h.ym=function(){throw ue(new ri(ai((Jr(),bf))))},h.zm=function(){throw ue(new ri(ai((Jr(),bf))))},h.Am=function(){throw ue(new ri(ai((Jr(),bf))))},h.Bm=function(){throw ue(new ri(ai((Jr(),bf))))},h.Cm=function(){throw ue(new ri(ai((Jr(),bf))))},h.Dm=function(){throw ue(new ri(ai((Jr(),bf))))},h.Em=function(){var t;if(Li(this),t=Bae(jw(this),0),this.c!=7)throw ue(new ri(ai((Jr(),ov))));return Li(this),t},h.Fm=function(){throw ue(new ri(ai((Jr(),bf))))},h.Gm=function(t){return Li(this),oH(t,(Di(),Di(),new Ty(3,t)))},h.Hm=function(t){var n;return Li(this),n=(Di(),Di(),new B_(2)),Qm(n,t),Qm(n,WM),n},h.Im=function(t){return Li(this),Di(),Di(),new Ty(3,t)};var l7=null,cC=null;I(y2,"RegEx/ParserForXMLSchema",1947),D(122,1,CT,Xv),h.Jm=function(t){throw ue(new Ac("Not supported."))},h.Km=function(){return-1},h.Lm=function(t){return null},h.Mm=function(){return null},h.Nm=function(t){},h.Om=function(t){},h.Pm=function(){return 0},h.Ib=function(){return this.Qm(0)},h.Qm=function(t){return this.e==11?".":""},h.e=0;var WPe,uC,KM,xAt,YPe,P4=null,MY,cpe=null,XPe,WM,upe=null,QPe,JPe,ZPe,eBe,tBe,kAt,l9,EAt,TAt,CAt,SAt,lC,_At,AAt,BOn=I(y2,"RegEx/Token",122);D(138,122,{3:1,138:1,122:1},_h),h.Qm=function(t){var n,r,a;if(this.e==4)if(this==XPe)r=".";else if(this==MY)r="\\d";else if(this==lC)r="\\w";else if(this==l9)r="\\s";else{for(a=new Up,a.a+="[",n=0;n0&&(a.a+=","),this.b[n]===this.b[n+1]?Xo(a,gP(this.b[n])):(Xo(a,gP(this.b[n])),a.a+="-",Xo(a,gP(this.b[n+1])));a.a+="]",r=a.a}else if(this==ZPe)r="\\D";else if(this==tBe)r="\\W";else if(this==eBe)r="\\S";else{for(a=new Up,a.a+="[^",n=0;n0&&(a.a+=","),this.b[n]===this.b[n+1]?Xo(a,gP(this.b[n])):(Xo(a,gP(this.b[n])),a.a+="-",Xo(a,gP(this.b[n+1])));a.a+="]",r=a.a}return r},h.a=!1,h.c=!1,I(y2,"RegEx/RangeToken",138),D(592,1,{592:1},Ewe),h.a=0,I(y2,"RegEx/RegexParser/ReferencePosition",592),D(591,1,{3:1,591:1},LZe),h.Fb=function(t){var n;return t==null||!De(t,591)?!1:(n=l(t,591),vn(this.b,n.b)&&this.a==n.a)},h.Hb=function(){return s2(this.b+"/"+K9e(this.a))},h.Ib=function(){return this.c.Qm(this.a)},h.a=0,I(y2,"RegEx/RegularExpression",591),D(228,122,CT,ng),h.Km=function(){return this.a},h.Qm=function(t){var n,r,a;switch(this.e){case 0:switch(this.a){case 124:case 42:case 43:case 63:case 40:case 41:case 46:case 91:case 123:case 92:a="\\"+hae(this.a&Zs);break;case 12:a="\\f";break;case 10:a="\\n";break;case 13:a="\\r";break;case 9:a="\\t";break;case 27:a="\\e";break;default:this.a>=Io?(r=(n=this.a>>>0,"0"+n.toString(16)),a="\\v"+tf(r,r.length-6,r.length)):a=""+hae(this.a&Zs)}break;case 8:this==QPe||this==JPe?a=""+hae(this.a&Zs):a="\\"+hae(this.a&Zs);break;default:a=null}return a},h.a=0,I(y2,"RegEx/Token/CharToken",228),D(318,122,CT,Ty),h.Lm=function(t){return this.a},h.Nm=function(t){this.b=t},h.Om=function(t){this.c=t},h.Pm=function(){return 1},h.Qm=function(t){var n;if(this.e==3)if(this.c<0&&this.b<0)n=this.a.Qm(t)+"*";else if(this.c==this.b)n=this.a.Qm(t)+"{"+this.c+"}";else if(this.c>=0&&this.b>=0)n=this.a.Qm(t)+"{"+this.c+","+this.b+"}";else if(this.c>=0&&this.b<0)n=this.a.Qm(t)+"{"+this.c+",}";else throw ue(new Ac("Token#toString(): CLOSURE "+this.c+Co+this.b));else if(this.c<0&&this.b<0)n=this.a.Qm(t)+"*?";else if(this.c==this.b)n=this.a.Qm(t)+"{"+this.c+"}?";else if(this.c>=0&&this.b>=0)n=this.a.Qm(t)+"{"+this.c+","+this.b+"}?";else if(this.c>=0&&this.b<0)n=this.a.Qm(t)+"{"+this.c+",}?";else throw ue(new Ac("Token#toString(): NONGREEDYCLOSURE "+this.c+Co+this.b));return n},h.b=0,h.c=0,I(y2,"RegEx/Token/ClosureToken",318),D(837,122,CT,f5e),h.Lm=function(t){return t==0?this.a:this.b},h.Pm=function(){return 2},h.Qm=function(t){var n;return this.b.e==3&&this.b.Lm(0)==this.a?n=this.a.Qm(t)+"+":this.b.e==9&&this.b.Lm(0)==this.a?n=this.a.Qm(t)+"+?":n=this.a.Qm(t)+(""+this.b.Qm(t)),n},I(y2,"RegEx/Token/ConcatToken",837),D(1945,122,CT,Zlt),h.Lm=function(t){if(t==0)return this.d;if(t==1)return this.b;throw ue(new Ac("Internal Error: "+t))},h.Pm=function(){return this.b?2:1},h.Qm=function(t){var n;return this.c>0?n="(?("+this.c+")":this.a.e==8?n="(?("+this.a+")":n="(?"+this.a,this.b?n+=this.d+"|"+this.b+")":n+=this.d+")",n},h.c=0,I(y2,"RegEx/Token/ConditionToken",1945),D(1946,122,CT,Hot),h.Lm=function(t){return this.b},h.Pm=function(){return 1},h.Qm=function(t){return"(?"+(this.a==0?"":K9e(this.a))+(this.c==0?"":K9e(this.c))+":"+this.b.Qm(t)+")"},h.a=0,h.c=0,I(y2,"RegEx/Token/ModifierToken",1946),D(838,122,CT,k5e),h.Lm=function(t){return this.a},h.Pm=function(){return 1},h.Qm=function(t){var n;switch(n=null,this.e){case 6:this.b==0?n="(?:"+this.a.Qm(t)+")":n="("+this.a.Qm(t)+")";break;case 20:n="(?="+this.a.Qm(t)+")";break;case 21:n="(?!"+this.a.Qm(t)+")";break;case 22:n="(?<="+this.a.Qm(t)+")";break;case 23:n="(?"+this.a.Qm(t)+")"}return n},h.b=0,I(y2,"RegEx/Token/ParenToken",838),D(530,122,{3:1,122:1,530:1},coe),h.Mm=function(){return this.b},h.Qm=function(t){return this.e==12?"\\"+this.a:vTn(this.b)},h.a=0,I(y2,"RegEx/Token/StringToken",530),D(477,122,CT,B_),h.Jm=function(t){Qm(this,t)},h.Lm=function(t){return l(xw(this.a,t),122)},h.Pm=function(){return this.a?this.a.a.c.length:0},h.Qm=function(t){var n,r,a,o,f;if(this.e==1){if(this.a.a.c.length==2)n=l(xw(this.a,0),122),r=l(xw(this.a,1),122),r.e==3&&r.Lm(0)==n?o=n.Qm(t)+"+":r.e==9&&r.Lm(0)==n?o=n.Qm(t)+"+?":o=n.Qm(t)+(""+r.Qm(t));else{for(f=new Up,a=0;a=this.c.b:this.a<=this.c.b},h.Sb=function(){return this.b>0},h.Tb=function(){return this.b},h.Vb=function(){return this.b-1},h.Qb=function(){throw ue(new Hp(Z5t))},h.a=0,h.b=0,I(zSe,"ExclusiveRange/RangeIterator",258);var kf=Gk(GG,"C"),Vr=Gk(LL,"I"),ih=Gk(Cx,"Z"),nm=Gk(ML,"J"),Al=Gk(SL,"B"),Na=Gk(_L,"D"),B4=Gk(AL,"F"),h7=Gk(DL,"S"),FOn=ks("org.eclipse.elk.core.labels","ILabelManager"),nBe=ks(So,"DiagnosticChain"),rBe=ks(_5t,"ResourceSet"),iBe=I(So,"InvocationTargetException",null),MAt=(Hz(),Qmn),DAt=DAt=q8n;Vwn($cn),$wn("permProps",[[["locale","default"],[e6t,"gecko1_8"]],[["locale","default"],[e6t,"safari"]]]),DAt(null,"elk",null)}).call(this)}).call(this,typeof Ag<"u"?Ag:typeof self<"u"?self:typeof window<"u"?window:{})},{}],3:[function(u,d,p){function v(A,P){if(!(A instanceof P))throw new TypeError("Cannot call a class as a function")}function b(A,P){if(!A)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return P&&(typeof P=="object"||typeof P=="function")?P:A}function y(A,P){if(typeof P!="function"&&P!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof P);A.prototype=Object.create(P&&P.prototype,{constructor:{value:A,enumerable:!1,writable:!0,configurable:!0}}),P&&(Object.setPrototypeOf?Object.setPrototypeOf(A,P):A.__proto__=P)}var T=u("./elk-api.js").default,_=function(A){y(P,A);function P(){var R=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};v(this,P);var F=Object.assign({},R),j=!1;try{u.resolve("web-worker"),j=!0}catch{}if(R.workerUrl)if(j){var K=u("web-worker");F.workerFactory=function(oe){return new K(oe)}}else console.warn(`Web worker requested but 'web-worker' package not installed. Consider installing the package or pass your own 'workerFactory' to ELK's constructor. -... Falling back to non-web worker version.`);if(!R.workerFactory){var et=f("./elk-worker.min.js"),st=et.Worker;R.workerFactory=function(at){return new st(at)}}return b(this,(B.__proto__||Object.getPrototypeOf(B)).call(this,R))}return B}(_);Object.defineProperty(p.exports,"__esModule",{value:!0}),p.exports=A,A.default=A},{"./elk-api.js":1,"./elk-worker.min.js":2,"web-worker":4}],4:[function(f,p,w){p.exports=Worker},{}]},{},[3])(3)})})(Bjt);var oWe=Bjt.exports;const cWe=G7(oWe),Rjt=new cWe;let ow={};const uWe={};let q5={};const lWe=async function(i,a,f,p,w,m,b){const _=f.select(`[id="${a}"]`).insert("g").attr("class","nodes"),A=Object.keys(i);return await Promise.all(A.map(async function(I){const B=i[I];let N="default";B.classes.length>0&&(N=B.classes.join(" ")),N=N+" flowchart-label";const R=im(B.styles);let z=B.text!==void 0?B.text:B.id;const W={width:0,height:0},et=[{id:B.id+"-west",layoutOptions:{"port.side":"WEST"}},{id:B.id+"-east",layoutOptions:{"port.side":"EAST"}},{id:B.id+"-south",layoutOptions:{"port.side":"SOUTH"}},{id:B.id+"-north",layoutOptions:{"port.side":"NORTH"}}];let st=0,at="",bt={};switch(B.type){case"round":st=5,at="rect";break;case"square":at="rect";break;case"diamond":at="question",bt={portConstraints:"FIXED_SIDE"};break;case"hexagon":at="hexagon";break;case"odd":at="rect_left_inv_arrow";break;case"lean_right":at="lean_right";break;case"lean_left":at="lean_left";break;case"trapezoid":at="trapezoid";break;case"inv_trapezoid":at="inv_trapezoid";break;case"odd_right":at="rect_left_inv_arrow";break;case"circle":at="circle";break;case"ellipse":at="ellipse";break;case"stadium":at="stadium";break;case"subroutine":at="subroutine";break;case"cylinder":at="cylinder";break;case"group":at="rect";break;case"doublecircle":at="doublecircle";break;default:at="rect"}const mt={labelStyle:R.labelStyle,shape:at,labelText:z,labelType:B.labelType,rx:st,ry:st,class:N,style:R.style,id:B.id,link:B.link,linkTarget:B.linkTarget,tooltip:w.db.getTooltip(B.id)||"",domId:w.db.lookUpDomId(B.id),haveCallback:B.haveCallback,width:B.type==="group"?500:void 0,dir:B.dir,type:B.type,props:B.props,padding:Fd().flowchart.padding};let yt,ft;if(mt.type!=="group")ft=await kBt(_,mt,B.dir),yt=ft.node().getBBox();else{p.createElementNS("http://www.w3.org/2000/svg","text");const{shapeSvg:vt,bbox:X}=await Nd(_,mt,void 0,!0);W.width=X.width,W.wrappingWidth=Fd().flowchart.wrappingWidth,W.height=X.height,W.labelNode=vt.node(),mt.labelData=W}const ut={id:B.id,ports:B.type==="diamond"?et:[],layoutOptions:bt,labelText:z,labelData:W,domId:w.db.lookUpDomId(B.id),width:yt==null?void 0:yt.width,height:yt==null?void 0:yt.height,type:B.type,el:ft,parent:m.parentById[B.id]};q5[mt.id]=ut})),b},jjt=(i,a,f)=>{const p={TB:{in:{north:"north"},out:{south:"west",west:"east",east:"south"}},LR:{in:{west:"west"},out:{east:"south",south:"north",north:"east"}},RL:{in:{east:"east"},out:{west:"north",north:"south",south:"west"}},BT:{in:{south:"south"},out:{north:"east",east:"west",west:"north"}}};return p.TD=p.TB,Ut.info("abc88",f,a,i),p[f][a][i]},$jt=(i,a,f)=>{if(Ut.info("getNextPort abc88",{node:i,edgeDirection:a,graphDirection:f}),!ow[i])switch(f){case"TB":case"TD":ow[i]={inPosition:"north",outPosition:"south"};break;case"BT":ow[i]={inPosition:"south",outPosition:"north"};break;case"RL":ow[i]={inPosition:"east",outPosition:"west"};break;case"LR":ow[i]={inPosition:"west",outPosition:"east"};break}const p=a==="in"?ow[i].inPosition:ow[i].outPosition;return a==="in"?ow[i].inPosition=jjt(ow[i].inPosition,a,f):ow[i].outPosition=jjt(ow[i].outPosition,a,f),p},hWe=(i,a)=>{let f=i.start,p=i.end;const w=f,m=p,b=q5[f],E=q5[p];return!b||!E?{source:f,target:p}:(b.type==="diamond"&&(f=`${f}-${$jt(f,"out",a)}`),E.type==="diamond"&&(p=`${p}-${$jt(p,"in",a)}`),{source:f,target:p,sourceId:w,targetId:m})},fWe=function(i,a,f,p){Ut.info("abc78 edges = ",i);const w=p.insert("g").attr("class","edgeLabels");let m={},b=a.db.getDirection(),E,_;if(i.defaultStyle!==void 0){const A=im(i.defaultStyle);E=A.style,_=A.labelStyle}return i.forEach(function(A){const I="L-"+A.start+"-"+A.end;m[I]===void 0?(m[I]=0,Ut.info("abc78 new entry",I,m[I])):(m[I]++,Ut.info("abc78 new entry",I,m[I]));let B=I+"-"+m[I];Ut.info("abc78 new link id to be used is",I,B,m[I]);const N="LS-"+A.start,R="LE-"+A.end,z={style:"",labelStyle:""};switch(z.minlen=A.length||1,A.type==="arrow_open"?z.arrowhead="none":z.arrowhead="normal",z.arrowTypeStart="arrow_open",z.arrowTypeEnd="arrow_open",A.type){case"double_arrow_cross":z.arrowTypeStart="arrow_cross";case"arrow_cross":z.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":z.arrowTypeStart="arrow_point";case"arrow_point":z.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":z.arrowTypeStart="arrow_circle";case"arrow_circle":z.arrowTypeEnd="arrow_circle";break}let W="",et="";switch(A.stroke){case"normal":W="fill:none;",E!==void 0&&(W=E),_!==void 0&&(et=_),z.thickness="normal",z.pattern="solid";break;case"dotted":z.thickness="normal",z.pattern="dotted",z.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":z.thickness="thick",z.pattern="solid",z.style="stroke-width: 3.5px;fill:none;";break}if(A.style!==void 0){const ft=im(A.style);W=ft.style,et=ft.labelStyle}z.style=z.style+=W,z.labelStyle=z.labelStyle+=et,A.interpolate!==void 0?z.curve=ew(A.interpolate,cg):i.defaultInterpolate!==void 0?z.curve=ew(i.defaultInterpolate,cg):z.curve=ew(uWe.curve,cg),A.text===void 0?A.style!==void 0&&(z.arrowheadStyle="fill: #333"):(z.arrowheadStyle="fill: #333",z.labelpos="c"),z.labelType=A.labelType,z.label=A.text.replace(Kr.lineBreakRegex,` -`),A.style===void 0&&(z.style=z.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),z.labelStyle=z.labelStyle.replace("color:","fill:"),z.id=B,z.classes="flowchart-link "+N+" "+R;const st=_Bt(w,z),{source:at,target:bt,sourceId:mt,targetId:yt}=hWe(A,b);Ut.debug("abc78 source and target",at,bt),f.edges.push({id:"e"+A.start+A.end,sources:[at],targets:[bt],sourceId:mt,targetId:yt,labelEl:st,labels:[{width:z.width,height:z.height,orgWidth:z.width,orgHeight:z.height,text:z.label,layoutOptions:{"edgeLabels.inline":"true","edgeLabels.placement":"CENTER"}}],edgeData:z})}),f},dWe=function(i,a,f,p,w){let m="";switch(p&&(m=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,m=m.replace(/\(/g,"\\("),m=m.replace(/\)/g,"\\)")),a.arrowTypeStart){case"arrow_cross":i.attr("marker-start","url("+m+"#"+w+"_"+f+"-crossStart)");break;case"arrow_point":i.attr("marker-start","url("+m+"#"+w+"_"+f+"-pointStart)");break;case"arrow_barb":i.attr("marker-start","url("+m+"#"+w+"_"+f+"-barbStart)");break;case"arrow_circle":i.attr("marker-start","url("+m+"#"+w+"_"+f+"-circleStart)");break;case"aggregation":i.attr("marker-start","url("+m+"#"+w+"_"+f+"-aggregationStart)");break;case"extension":i.attr("marker-start","url("+m+"#"+w+"_"+f+"-extensionStart)");break;case"composition":i.attr("marker-start","url("+m+"#"+w+"_"+f+"-compositionStart)");break;case"dependency":i.attr("marker-start","url("+m+"#"+w+"_"+f+"-dependencyStart)");break;case"lollipop":i.attr("marker-start","url("+m+"#"+w+"_"+f+"-lollipopStart)");break}switch(a.arrowTypeEnd){case"arrow_cross":i.attr("marker-end","url("+m+"#"+w+"_"+f+"-crossEnd)");break;case"arrow_point":i.attr("marker-end","url("+m+"#"+w+"_"+f+"-pointEnd)");break;case"arrow_barb":i.attr("marker-end","url("+m+"#"+w+"_"+f+"-barbEnd)");break;case"arrow_circle":i.attr("marker-end","url("+m+"#"+w+"_"+f+"-circleEnd)");break;case"aggregation":i.attr("marker-end","url("+m+"#"+w+"_"+f+"-aggregationEnd)");break;case"extension":i.attr("marker-end","url("+m+"#"+w+"_"+f+"-extensionEnd)");break;case"composition":i.attr("marker-end","url("+m+"#"+w+"_"+f+"-compositionEnd)");break;case"dependency":i.attr("marker-end","url("+m+"#"+w+"_"+f+"-dependencyEnd)");break;case"lollipop":i.attr("marker-end","url("+m+"#"+w+"_"+f+"-lollipopEnd)");break}},gWe=function(i,a){return Ut.info("Extracting classes"),a.db.getClasses()},pWe=function(i){const a={parentById:{},childrenById:{}},f=i.getSubGraphs();return Ut.info("Subgraphs - ",f),f.forEach(function(p){p.nodes.forEach(function(w){a.parentById[w]=p.id,a.childrenById[p.id]===void 0&&(a.childrenById[p.id]=[]),a.childrenById[p.id].push(w)})}),f.forEach(function(p){p.id,a.parentById[p.id]!==void 0&&a.parentById[p.id]}),a},bWe=function(i,a,f){const p=aWe(i,a,f);if(p===void 0||p==="root")return{x:0,y:0};const w=q5[p].offset;return{x:w.posX,y:w.posY}},wWe=function(i,a,f,p,w,m){const b=bWe(a.sourceId,a.targetId,w),E=a.sections[0].startPoint,_=a.sections[0].endPoint,I=(a.sections[0].bendPoints?a.sections[0].bendPoints:[]).map(bt=>[bt.x+b.x,bt.y+b.y]),B=[[E.x+b.x,E.y+b.y],...I,[_.x+b.x,_.y+b.y]],{x:N,y:R}=CBt(a.edgeData),z=E5().x(N).y(R).curve(cg),W=i.insert("path").attr("d",z(B)).attr("class","path "+f.classes).attr("fill","none"),et=i.insert("g").attr("class","edgeLabel"),st=yr(et.node().appendChild(a.labelEl)),at=st.node().firstChild.getBoundingClientRect();st.attr("width",at.width),st.attr("height",at.height),et.attr("transform",`translate(${a.labels[0].x+b.x}, ${a.labels[0].y+b.y})`),dWe(W,f,p.type,p.arrowMarkerAbsolute,m)},zjt=(i,a)=>{i.forEach(f=>{f.children||(f.children=[]);const p=a.childrenById[f.id];p&&p.forEach(w=>{f.children.push(q5[w])}),zjt(f.children,a)})},vWe=async function(i,a,f,p){var ut;p.db.clear(),q5={},ow={},p.db.setGen("gen-2"),p.parser.parse(i);const w=yr("body").append("div").attr("style","height:400px").attr("id","cy");let m={id:"root",layoutOptions:{"elk.hierarchyHandling":"INCLUDE_CHILDREN","org.eclipse.elk.padding":"[top=100, left=100, bottom=110, right=110]","elk.layered.spacing.edgeNodeBetweenLayers":"30","elk.direction":"DOWN"},children:[],edges:[]};switch(Ut.info("Drawing flowchart using v3 renderer",Rjt),p.db.getDirection()){case"BT":m.layoutOptions["elk.direction"]="UP";break;case"TB":m.layoutOptions["elk.direction"]="DOWN";break;case"LR":m.layoutOptions["elk.direction"]="RIGHT";break;case"RL":m.layoutOptions["elk.direction"]="LEFT";break}const{securityLevel:E,flowchart:_}=Fd();let A;E==="sandbox"&&(A=yr("#i"+a));const I=yr(E==="sandbox"?A.nodes()[0].contentDocument.body:"body"),B=E==="sandbox"?A.nodes()[0].contentDocument:document,N=I.select(`[id="${a}"]`);PNt(N,["point","circle","cross"],p.type,a);const z=p.db.getVertices();let W;const et=p.db.getSubGraphs();Ut.info("Subgraphs - ",et);for(let vt=et.length-1;vt>=0;vt--)W=et[vt],p.db.addVertex(W.id,{text:W.title,type:W.labelType},"group",void 0,W.classes,W.dir);const st=N.insert("g").attr("class","subgraphs"),at=pWe(p.db);m=await lWe(z,a,I,B,p,at,m);const bt=N.insert("g").attr("class","edges edgePath"),mt=p.db.getEdges();m=fWe(mt,p,m,N),Object.keys(q5).forEach(vt=>{const X=q5[vt];X.parent||m.children.push(X),at.childrenById[vt]!==void 0&&(X.labels=[{text:X.labelText,layoutOptions:{"nodeLabels.placement":"[H_CENTER, V_TOP, INSIDE]"},width:X.labelData.width,height:X.labelData.height}],delete X.x,delete X.y,delete X.width,delete X.height)}),zjt(m.children,at),Ut.info("after layout",JSON.stringify(m,null,2));const ft=await Rjt.layout(m);qjt(0,0,ft.children,N,st,p,0),Ut.info("after layout",ft),(ut=ft.edges)==null||ut.map(vt=>{wWe(bt,vt,vt.edgeData,p,at,a)}),fT({},N,_.diagramPadding,_.useMaxWidth),w.remove()},qjt=(i,a,f,p,w,m,b)=>{f.forEach(function(E){if(E)if(q5[E.id].offset={posX:E.x+i,posY:E.y+a,x:i,y:a,depth:b,width:E.width,height:E.height},E.type==="group"){const _=w.insert("g").attr("class","subgraph");_.insert("rect").attr("class","subgraph subgraph-lvl-"+b%5+" node").attr("x",E.x+i).attr("y",E.y+a).attr("width",E.width).attr("height",E.height);const A=_.insert("g").attr("class","label"),I=Fd().flowchart.htmlLabels?E.labelData.width/2:0;A.attr("transform",`translate(${E.labels[0].x+i+E.x+I}, ${E.labels[0].y+a+E.y+3})`),A.node().appendChild(E.labelData.labelNode),Ut.info("Id (UGH)= ",E.type,E.labels)}else Ut.info("Id (UGH)= ",E.id),E.el.attr("transform",`translate(${E.x+i+E.width/2}, ${E.y+a+E.height/2})`)}),f.forEach(function(E){E&&E.type==="group"&&qjt(i+E.x,a+E.y,E.children,p,w,m,b+1)})},mWe={getClasses:gWe,draw:vWe},yWe=i=>{let a="";for(let f=0;f<5;f++)a+=` - .subgraph-lvl-${f} { - fill: ${i[`surface${f}`]}; - stroke: ${i[`surfacePeer${f}`]}; +... Falling back to non-web worker version.`);if(!F.workerFactory){var ee=u("./elk-worker.min.js"),ie=ee.Worker;F.workerFactory=function(oe){return new ie(oe)}}return b(this,(P.__proto__||Object.getPrototypeOf(P)).call(this,F))}return P}(T);Object.defineProperty(d.exports,"__esModule",{value:!0}),d.exports=_,_.default=_},{"./elk-api.js":1,"./elk-worker.min.js":2,"web-worker":4}],4:[function(u,d,p){d.exports=Worker},{}]},{},[3])(3)})})(HKe);var Can=HKe.exports;const San=hC(Can),VKe=new San;let Hv={};const _an={};let W7={};const Aan=async function(i,s,u,d,p,v,b){const T=u.select(`[id="${s}"]`).insert("g").attr("class","nodes"),_=Object.keys(i);return await Promise.all(_.map(async function(A){const P=i[A];let R="default";P.classes.length>0&&(R=P.classes.join(" ")),R=R+" flowchart-label";const F=om(P.styles);let j=P.text!==void 0?P.text:P.id;const K={width:0,height:0},ee=[{id:P.id+"-west",layoutOptions:{"port.side":"WEST"}},{id:P.id+"-east",layoutOptions:{"port.side":"EAST"}},{id:P.id+"-south",layoutOptions:{"port.side":"SOUTH"}},{id:P.id+"-north",layoutOptions:{"port.side":"NORTH"}}];let ie=0,oe="",pe={};switch(P.type){case"round":ie=5,oe="rect";break;case"square":oe="rect";break;case"diamond":oe="question",pe={portConstraints:"FIXED_SIDE"};break;case"hexagon":oe="hexagon";break;case"odd":oe="rect_left_inv_arrow";break;case"lean_right":oe="lean_right";break;case"lean_left":oe="lean_left";break;case"trapezoid":oe="trapezoid";break;case"inv_trapezoid":oe="inv_trapezoid";break;case"odd_right":oe="rect_left_inv_arrow";break;case"circle":oe="circle";break;case"ellipse":oe="ellipse";break;case"stadium":oe="stadium";break;case"subroutine":oe="subroutine";break;case"cylinder":oe="cylinder";break;case"group":oe="rect";break;case"doublecircle":oe="doublecircle";break;default:oe="rect"}const be={labelStyle:F.labelStyle,shape:oe,labelText:j,labelType:P.labelType,rx:ie,ry:ie,class:R,style:F.style,id:P.id,link:P.link,linkTarget:P.linkTarget,tooltip:p.db.getTooltip(P.id)||"",domId:p.db.lookUpDomId(P.id),haveCallback:P.haveCallback,width:P.type==="group"?500:void 0,dir:P.dir,type:P.type,props:P.props,padding:Vh().flowchart.padding};let ae,ne;if(be.type!=="group")ne=await tJ(T,be,P.dir),ae=ne.node().getBBox();else{d.createElementNS("http://www.w3.org/2000/svg","text");const{shapeSvg:de,bbox:X}=await g1(T,be,void 0,!0);K.width=X.width,K.wrappingWidth=Vh().flowchart.wrappingWidth,K.height=X.height,K.labelNode=de.node(),be.labelData=K}const se={id:P.id,ports:P.type==="diamond"?ee:[],layoutOptions:pe,labelText:j,labelData:K,domId:p.db.lookUpDomId(P.id),width:ae==null?void 0:ae.width,height:ae==null?void 0:ae.height,type:P.type,el:ne,parent:v.parentById[P.id]};W7[be.id]=se})),b},UKe=(i,s,u)=>{const d={TB:{in:{north:"north"},out:{south:"west",west:"east",east:"south"}},LR:{in:{west:"west"},out:{east:"south",south:"north",north:"east"}},RL:{in:{east:"east"},out:{west:"north",north:"south",south:"west"}},BT:{in:{south:"south"},out:{north:"east",east:"west",west:"north"}}};return d.TD=d.TB,d[u][s][i]},GKe=(i,s,u)=>{if(Xe.info("getNextPort",{node:i,edgeDirection:s,graphDirection:u}),!Hv[i])switch(u){case"TB":case"TD":Hv[i]={inPosition:"north",outPosition:"south"};break;case"BT":Hv[i]={inPosition:"south",outPosition:"north"};break;case"RL":Hv[i]={inPosition:"east",outPosition:"west"};break;case"LR":Hv[i]={inPosition:"west",outPosition:"east"};break}const d=s==="in"?Hv[i].inPosition:Hv[i].outPosition;return s==="in"?Hv[i].inPosition=UKe(Hv[i].inPosition,s,u):Hv[i].outPosition=UKe(Hv[i].outPosition,s,u),d},Lan=(i,s)=>{let u=i.start,d=i.end;const p=u,v=d,b=W7[u],y=W7[d];return!b||!y?{source:u,target:d}:(b.type==="diamond"&&(u=`${u}-${GKe(u,"out",s)}`),y.type==="diamond"&&(d=`${d}-${GKe(d,"in",s)}`),{source:u,target:d,sourceId:p,targetId:v})},Man=function(i,s,u,d){Xe.info("abc78 edges = ",i);const p=d.insert("g").attr("class","edgeLabels");let v={},b=s.db.getDirection(),y,T;if(i.defaultStyle!==void 0){const _=om(i.defaultStyle);y=_.style,T=_.labelStyle}return i.forEach(function(_){const A="L-"+_.start+"-"+_.end;v[A]===void 0?(v[A]=0,Xe.info("abc78 new entry",A,v[A])):(v[A]++,Xe.info("abc78 new entry",A,v[A]));let P=A+"-"+v[A];Xe.info("abc78 new link id to be used is",A,P,v[A]);const R="LS-"+_.start,F="LE-"+_.end,j={style:"",labelStyle:""};switch(j.minlen=_.length||1,_.type==="arrow_open"?j.arrowhead="none":j.arrowhead="normal",j.arrowTypeStart="arrow_open",j.arrowTypeEnd="arrow_open",_.type){case"double_arrow_cross":j.arrowTypeStart="arrow_cross";case"arrow_cross":j.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":j.arrowTypeStart="arrow_point";case"arrow_point":j.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":j.arrowTypeStart="arrow_circle";case"arrow_circle":j.arrowTypeEnd="arrow_circle";break}let K="",ee="";switch(_.stroke){case"normal":K="fill:none;",y!==void 0&&(K=y),T!==void 0&&(ee=T),j.thickness="normal",j.pattern="solid";break;case"dotted":j.thickness="normal",j.pattern="dotted",j.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":j.thickness="thick",j.pattern="solid",j.style="stroke-width: 3.5px;fill:none;";break}if(_.style!==void 0){const ne=om(_.style);K=ne.style,ee=ne.labelStyle}j.style=j.style+=K,j.labelStyle=j.labelStyle+=ee,_.interpolate!==void 0?j.curve=Ov(_.interpolate,kp):i.defaultInterpolate!==void 0?j.curve=Ov(i.defaultInterpolate,kp):j.curve=Ov(_an.curve,kp),_.text===void 0?_.style!==void 0&&(j.arrowheadStyle="fill: #333"):(j.arrowheadStyle="fill: #333",j.labelpos="c"),j.labelType=_.labelType,j.label=_.text.replace(ci.lineBreakRegex,` +`),_.style===void 0&&(j.style=j.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),j.labelStyle=j.labelStyle.replace("color:","fill:"),j.id=P,j.classes="flowchart-link "+R+" "+F;const ie=zme(p,j),{source:oe,target:pe,sourceId:be,targetId:ae}=Lan(_,b);Xe.debug("abc78 source and target",oe,pe),u.edges.push({id:"e"+_.start+_.end,sources:[oe],targets:[pe],sourceId:be,targetId:ae,labelEl:ie,labels:[{width:j.width,height:j.height,orgWidth:j.width,orgHeight:j.height,text:j.label,layoutOptions:{"edgeLabels.inline":"true","edgeLabels.placement":"CENTER"}}],edgeData:j})}),u},Dan=function(i,s,u,d,p){let v="";d&&(v=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,v=v.replace(/\(/g,"\\("),v=v.replace(/\)/g,"\\)")),AUe(i,s,v,p,u)},Ian=function(i,s){return Xe.info("Extracting classes"),s.db.getClasses()},Oan=function(i){const s={parentById:{},childrenById:{}},u=i.getSubGraphs();return Xe.info("Subgraphs - ",u),u.forEach(function(d){d.nodes.forEach(function(p){s.parentById[p]=d.id,s.childrenById[d.id]===void 0&&(s.childrenById[d.id]=[]),s.childrenById[d.id].push(p)})}),u.forEach(function(d){d.id,s.parentById[d.id]!==void 0&&s.parentById[d.id]}),s},Nan=function(i,s,u){const d=Tan(i,s,u);if(d===void 0||d==="root")return{x:0,y:0};const p=W7[d].offset;return{x:p.posX,y:p.posY}},Pan=function(i,s,u,d,p,v){const b=Nan(s.sourceId,s.targetId,p),y=s.sections[0].startPoint,T=s.sections[0].endPoint,A=(s.sections[0].bendPoints?s.sections[0].bendPoints:[]).map(pe=>[pe.x+b.x,pe.y+b.y]),P=[[y.x+b.x,y.y+b.y],...A,[T.x+b.x,T.y+b.y]],{x:R,y:F}=_Ue(s.edgeData),j=k7().x(R).y(F).curve(kp),K=i.insert("path").attr("d",j(P)).attr("class","path "+u.classes).attr("fill","none"),ee=i.insert("g").attr("class","edgeLabel"),ie=Ir(ee.node().appendChild(s.labelEl)),oe=ie.node().firstChild.getBoundingClientRect();ie.attr("width",oe.width),ie.attr("height",oe.height),ee.attr("transform",`translate(${s.labels[0].x+b.x}, ${s.labels[0].y+b.y})`),Dan(K,u,d.type,d.arrowMarkerAbsolute,v)},KKe=(i,s)=>{i.forEach(u=>{u.children||(u.children=[]);const d=s.childrenById[u.id];d&&d.forEach(p=>{u.children.push(W7[p])}),KKe(u.children,s)})},Ban=async function(i,s,u,d){var se;d.db.clear(),W7={},Hv={},d.db.setGen("gen-2"),d.parser.parse(i);const p=Ir("body").append("div").attr("style","height:400px").attr("id","cy");let v={id:"root",layoutOptions:{"elk.hierarchyHandling":"INCLUDE_CHILDREN","org.eclipse.elk.padding":"[top=100, left=100, bottom=110, right=110]","elk.layered.spacing.edgeNodeBetweenLayers":"30","elk.direction":"DOWN"},children:[],edges:[]};switch(Xe.info("Drawing flowchart using v3 renderer",VKe),d.db.getDirection()){case"BT":v.layoutOptions["elk.direction"]="UP";break;case"TB":v.layoutOptions["elk.direction"]="DOWN";break;case"LR":v.layoutOptions["elk.direction"]="RIGHT";break;case"RL":v.layoutOptions["elk.direction"]="LEFT";break}const{securityLevel:y,flowchart:T}=Vh();let _;y==="sandbox"&&(_=Ir("#i"+s));const A=Ir(y==="sandbox"?_.nodes()[0].contentDocument.body:"body"),P=y==="sandbox"?_.nodes()[0].contentDocument:document,R=A.select(`[id="${s}"]`);Sme(R,["point","circle","cross"],d.type,s);const j=d.db.getVertices();let K;const ee=d.db.getSubGraphs();Xe.info("Subgraphs - ",ee);for(let de=ee.length-1;de>=0;de--)K=ee[de],d.db.addVertex(K.id,{text:K.title,type:K.labelType},"group",void 0,K.classes,K.dir);const ie=R.insert("g").attr("class","subgraphs"),oe=Oan(d.db);v=await Aan(j,s,A,P,d,oe,v);const pe=R.insert("g").attr("class","edges edgePath"),be=d.db.getEdges();v=Man(be,d,v,R),Object.keys(W7).forEach(de=>{const X=W7[de];X.parent||v.children.push(X),oe.childrenById[de]!==void 0&&(X.labels=[{text:X.labelText,layoutOptions:{"nodeLabels.placement":"[H_CENTER, V_TOP, INSIDE]"},width:X.labelData.width,height:X.labelData.height}],delete X.x,delete X.y,delete X.width,delete X.height)}),KKe(v.children,oe),Xe.info("after layout",JSON.stringify(v,null,2));const ne=await VKe.layout(v);WKe(0,0,ne.children,R,ie,d,0),Xe.info("after layout",ne),(se=ne.edges)==null||se.map(de=>{Pan(pe,de,de.edgeData,d,oe,s)}),y9({},R,T.diagramPadding,T.useMaxWidth),p.remove()},WKe=(i,s,u,d,p,v,b)=>{u.forEach(function(y){if(y)if(W7[y.id].offset={posX:y.x+i,posY:y.y+s,x:i,y:s,depth:b,width:y.width,height:y.height},y.type==="group"){const T=p.insert("g").attr("class","subgraph");T.insert("rect").attr("class","subgraph subgraph-lvl-"+b%5+" node").attr("x",y.x+i).attr("y",y.y+s).attr("width",y.width).attr("height",y.height);const _=T.insert("g").attr("class","label"),A=Vh().flowchart.htmlLabels?y.labelData.width/2:0;_.attr("transform",`translate(${y.labels[0].x+i+y.x+A}, ${y.labels[0].y+s+y.y+3})`),_.node().appendChild(y.labelData.labelNode),Xe.info("Id (UGH)= ",y.type,y.labels)}else Xe.info("Id (UGH)= ",y.id),y.el.attr("transform",`translate(${y.x+i+y.width/2}, ${y.y+s+y.height/2})`)}),u.forEach(function(y){y&&y.type==="group"&&WKe(i+y.x,s+y.y,y.children,d,p,v,b+1)})},Fan={getClasses:Ian,draw:Ban},Ran=i=>{let s="";for(let u=0;u<5;u++)s+=` + .subgraph-lvl-${u} { + fill: ${i[`surface${u}`]}; + stroke: ${i[`surfacePeer${u}`]}; } - `;return a},xWe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{db:lIe,renderer:mWe,parser:Hdt,styles:i=>`.label { + `;return s},jan=Object.freeze(Object.defineProperty({__proto__:null,diagram:{db:_Ut,renderer:Fan,parser:Gbe,styles:i=>`.label { font-family: ${i.fontFamily}; color: ${i.nodeTextColor||i.textColor}; } @@ -1467,36 +1733,36 @@ Consider installing the package or pass your own 'workerFactory' to ELK's constr text-anchor: middle; } - ${yWe(i)} -`}},Symbol.toStringTag,{value:"Module"}));var Ygt=function(){var i=function(N,R,z,W){for(z=z||{},W=N.length;W--;z[N[W]]=R);return z},a=[6,8,10,11,12,14,16,17,20,21],f=[1,9],p=[1,10],w=[1,11],m=[1,12],b=[1,13],E=[1,16],_=[1,17],A={trace:function(){},yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:function(R,z,W,et,st,at,bt){var mt=at.length-1;switch(st){case 1:return at[mt-1];case 2:this.$=[];break;case 3:at[mt-1].push(at[mt]),this.$=at[mt-1];break;case 4:case 5:this.$=at[mt];break;case 6:case 7:this.$=[];break;case 8:et.getCommonDb().setDiagramTitle(at[mt].substr(6)),this.$=at[mt].substr(6);break;case 9:this.$=at[mt].trim(),et.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=at[mt].trim(),et.getCommonDb().setAccDescription(this.$);break;case 12:et.addSection(at[mt].substr(8)),this.$=at[mt].substr(8);break;case 15:et.addTask(at[mt],0,""),this.$=at[mt];break;case 16:et.addEvent(at[mt].substr(2)),this.$=at[mt];break}},table:[{3:1,4:[1,2]},{1:[3]},i(a,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:f,12:p,14:w,16:m,17:b,18:14,19:15,20:E,21:_},i(a,[2,7],{1:[2,1]}),i(a,[2,3]),{9:18,11:f,12:p,14:w,16:m,17:b,18:14,19:15,20:E,21:_},i(a,[2,5]),i(a,[2,6]),i(a,[2,8]),{13:[1,19]},{15:[1,20]},i(a,[2,11]),i(a,[2,12]),i(a,[2,13]),i(a,[2,14]),i(a,[2,15]),i(a,[2,16]),i(a,[2,4]),i(a,[2,9]),i(a,[2,10])],defaultActions:{},parseError:function(R,z){if(z.recoverable)this.trace(R);else{var W=new Error(R);throw W.hash=z,W}},parse:function(R){var z=this,W=[0],et=[],st=[null],at=[],bt=this.table,mt="",yt=0,ft=0,ut=2,vt=1,X=at.slice.call(arguments,1),pt=Object.create(this.lexer),U={yy:{}};for(var Tt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Tt)&&(U.yy[Tt]=this.yy[Tt]);pt.setInput(R,U.yy),U.yy.lexer=pt,U.yy.parser=this,typeof pt.yylloc>"u"&&(pt.yylloc={});var nt=pt.yylloc;at.push(nt);var It=pt.options&&pt.options.ranges;typeof U.yy.parseError=="function"?this.parseError=U.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ot(){var me;return me=et.pop()||pt.lex()||vt,typeof me!="number"&&(me instanceof Array&&(et=me,me=et.pop()),me=z.symbols_[me]||me),me}for(var Bt,Et,Z,Ct,xt={},Ht,Le,Ft,gn;;){if(Et=W[W.length-1],this.defaultActions[Et]?Z=this.defaultActions[Et]:((Bt===null||typeof Bt>"u")&&(Bt=Ot()),Z=bt[Et]&&bt[Et][Bt]),typeof Z>"u"||!Z.length||!Z[0]){var Se="";gn=[];for(Ht in bt[Et])this.terminals_[Ht]&&Ht>ut&&gn.push("'"+this.terminals_[Ht]+"'");pt.showPosition?Se="Parse error on line "+(yt+1)+`: -`+pt.showPosition()+` -Expecting `+gn.join(", ")+", got '"+(this.terminals_[Bt]||Bt)+"'":Se="Parse error on line "+(yt+1)+": Unexpected "+(Bt==vt?"end of input":"'"+(this.terminals_[Bt]||Bt)+"'"),this.parseError(Se,{text:pt.match,token:this.terminals_[Bt]||Bt,line:pt.yylineno,loc:nt,expected:gn})}if(Z[0]instanceof Array&&Z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Et+", token: "+Bt);switch(Z[0]){case 1:W.push(Bt),st.push(pt.yytext),at.push(pt.yylloc),W.push(Z[1]),Bt=null,ft=pt.yyleng,mt=pt.yytext,yt=pt.yylineno,nt=pt.yylloc;break;case 2:if(Le=this.productions_[Z[1]][1],xt.$=st[st.length-Le],xt._$={first_line:at[at.length-(Le||1)].first_line,last_line:at[at.length-1].last_line,first_column:at[at.length-(Le||1)].first_column,last_column:at[at.length-1].last_column},It&&(xt._$.range=[at[at.length-(Le||1)].range[0],at[at.length-1].range[1]]),Ct=this.performAction.apply(xt,[mt,ft,yt,U.yy,Z[1],st,at].concat(X)),typeof Ct<"u")return Ct;Le&&(W=W.slice(0,-1*Le*2),st=st.slice(0,-1*Le),at=at.slice(0,-1*Le)),W.push(this.productions_[Z[1]][0]),st.push(xt.$),at.push(xt._$),Ft=bt[W[W.length-2]][W[W.length-1]],W.push(Ft);break;case 3:return!0}}return!0}},I=function(){var N={EOF:1,parseError:function(z,W){if(this.yy.parser)this.yy.parser.parseError(z,W);else throw new Error(z)},setInput:function(R,z){return this.yy=z||this.yy||{},this._input=R,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var R=this._input[0];this.yytext+=R,this.yyleng++,this.offset++,this.match+=R,this.matched+=R;var z=R.match(/(?:\r\n?|\n).*/g);return z?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),R},unput:function(R){var z=R.length,W=R.split(/(?:\r\n?|\n)/g);this._input=R+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-z),this.offset-=z;var et=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),W.length-1&&(this.yylineno-=W.length-1);var st=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:W?(W.length===et.length?this.yylloc.first_column:0)+et[et.length-W.length].length-W[0].length:this.yylloc.first_column-z},this.options.ranges&&(this.yylloc.range=[st[0],st[0]+this.yyleng-z]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(R){this.unput(this.match.slice(R))},pastInput:function(){var R=this.matched.substr(0,this.matched.length-this.match.length);return(R.length>20?"...":"")+R.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var R=this.match;return R.length<20&&(R+=this._input.substr(0,20-R.length)),(R.substr(0,20)+(R.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var R=this.pastInput(),z=new Array(R.length+1).join("-");return R+this.upcomingInput()+` -`+z+"^"},test_match:function(R,z){var W,et,st;if(this.options.backtrack_lexer&&(st={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(st.yylloc.range=this.yylloc.range.slice(0))),et=R[0].match(/(?:\r\n?|\n).*/g),et&&(this.yylineno+=et.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:et?et[et.length-1].length-et[et.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+R[0].length},this.yytext+=R[0],this.match+=R[0],this.matches=R,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(R[0].length),this.matched+=R[0],W=this.performAction.call(this,this.yy,this,z,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),W)return W;if(this._backtrack){for(var at in st)this[at]=st[at];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var R,z,W,et;this._more||(this.yytext="",this.match="");for(var st=this._currentRules(),at=0;atz[0].length)){if(z=W,et=at,this.options.backtrack_lexer){if(R=this.test_match(W,st[at]),R!==!1)return R;if(this._backtrack){z=!1;continue}else return!1}else if(!this.options.flex)break}return z?(R=this.test_match(z,st[et]),R!==!1?R:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var z=this.next();return z||this.lex()},begin:function(z){this.conditionStack.push(z)},popState:function(){var z=this.conditionStack.length-1;return z>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(z){return z=this.conditionStack.length-1-Math.abs(z||0),z>=0?this.conditionStack[z]:"INITIAL"},pushState:function(z){this.begin(z)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(z,W,et,st){switch(et){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 21;case 16:return 20;case 17:return 6;case 18:return"INVALID"}},rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?::\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18],inclusive:!0}}};return N}();A.lexer=I;function B(){this.yy={}}return B.prototype=A,A.Parser=B,new B}();Ygt.parser=Ygt;const kWe=Ygt;let yL="",Hjt=0;const Kgt=[],eK=[],xL=[],Vjt=()=>_Ot,Gjt=function(){Kgt.length=0,eK.length=0,yL="",xL.length=0,hg()},Ujt=function(i){yL=i,Kgt.push(i)},Wjt=function(){return Kgt},Yjt=function(){let i=Zjt();const a=100;let f=0;for(;!i&&ff.id===Hjt-1).events.push(i)},Qjt=function(i){const a={section:yL,type:yL,description:i,task:i,classes:[]};eK.push(a)},Zjt=function(){const i=function(f){return xL[f].processed};let a=!0;for(const[f,p]of xL.entries())i(f),a=a&&p.processed;return a},EWe=Object.freeze(Object.defineProperty({__proto__:null,addEvent:Xjt,addSection:Ujt,addTask:Kjt,addTaskOrg:Qjt,clear:Gjt,default:{clear:Gjt,getCommonDb:Vjt,addSection:Ujt,getSections:Wjt,getTasks:Yjt,addTask:Kjt,addTaskOrg:Qjt,addEvent:Xjt},getCommonDb:Vjt,getSections:Wjt,getTasks:Yjt},Symbol.toStringTag,{value:"Module"})),TWe=12,nK=function(i,a){const f=i.append("rect");return f.attr("x",a.x),f.attr("y",a.y),f.attr("fill",a.fill),f.attr("stroke",a.stroke),f.attr("width",a.width),f.attr("height",a.height),f.attr("rx",a.rx),f.attr("ry",a.ry),a.class!==void 0&&f.attr("class",a.class),f},CWe=function(i,a){const p=i.append("circle").attr("cx",a.cx).attr("cy",a.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),w=i.append("g");w.append("circle").attr("cx",a.cx-15/3).attr("cy",a.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),w.append("circle").attr("cx",a.cx+15/3).attr("cy",a.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function m(_){const A=OA().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);_.append("path").attr("class","mouth").attr("d",A).attr("transform","translate("+a.cx+","+(a.cy+2)+")")}function b(_){const A=OA().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);_.append("path").attr("class","mouth").attr("d",A).attr("transform","translate("+a.cx+","+(a.cy+7)+")")}function E(_){_.append("line").attr("class","mouth").attr("stroke",2).attr("x1",a.cx-5).attr("y1",a.cy+7).attr("x2",a.cx+5).attr("y2",a.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return a.score>3?m(w):a.score<3?b(w):E(w),p},_We=function(i,a){const f=i.append("circle");return f.attr("cx",a.cx),f.attr("cy",a.cy),f.attr("class","actor-"+a.pos),f.attr("fill",a.fill),f.attr("stroke",a.stroke),f.attr("r",a.r),f.class!==void 0&&f.attr("class",f.class),a.title!==void 0&&f.append("title").text(a.title),f},Jjt=function(i,a){const f=a.text.replace(//gi," "),p=i.append("text");p.attr("x",a.x),p.attr("y",a.y),p.attr("class","legend"),p.style("text-anchor",a.anchor),a.class!==void 0&&p.attr("class",a.class);const w=p.append("tspan");return w.attr("x",a.x+a.textMargin*2),w.text(f),p},SWe=function(i,a){function f(w,m,b,E,_){return w+","+m+" "+(w+b)+","+m+" "+(w+b)+","+(m+E-_)+" "+(w+b-_*1.2)+","+(m+E)+" "+w+","+(m+E)}const p=i.append("polygon");p.attr("points",f(a.x,a.y,50,20,7)),p.attr("class","labelBox"),a.y=a.y+a.labelMargin,a.x=a.x+.5*a.labelMargin,Jjt(i,a)},AWe=function(i,a,f){const p=i.append("g"),w=Xgt();w.x=a.x,w.y=a.y,w.fill=a.fill,w.width=f.width,w.height=f.height,w.class="journey-section section-type-"+a.num,w.rx=3,w.ry=3,nK(p,w),e$t(f)(a.text,p,w.x,w.y,w.width,w.height,{class:"journey-section section-type-"+a.num},f,a.colour)};let t$t=-1;const LWe=function(i,a,f){const p=a.x+f.width/2,w=i.append("g");t$t++;const m=300+5*30;w.append("line").attr("id","task"+t$t).attr("x1",p).attr("y1",a.y).attr("x2",p).attr("y2",m).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),CWe(w,{cx:p,cy:300+(5-a.score)*30,score:a.score});const b=Xgt();b.x=a.x,b.y=a.y,b.fill=a.fill,b.width=f.width,b.height=f.height,b.class="task task-type-"+a.num,b.rx=3,b.ry=3,nK(w,b),a.x+14,e$t(f)(a.task,w,b.x,b.y,b.width,b.height,{class:"task"},f,a.colour)},MWe=function(i,a){nK(i,{x:a.startx,y:a.starty,width:a.stopx-a.startx,height:a.stopy-a.starty,fill:a.fill,class:"rect"}).lower()},DWe=function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},Xgt=function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},e$t=function(){function i(w,m,b,E,_,A,I,B){const N=m.append("text").attr("x",b+_/2).attr("y",E+A/2+5).style("font-color",B).style("text-anchor","middle").text(w);p(N,I)}function a(w,m,b,E,_,A,I,B,N){const{taskFontSize:R,taskFontFamily:z}=B,W=w.split(//gi);for(let et=0;et)/).reverse(),w,m=[],b=1.1,E=f.attr("y"),_=parseFloat(f.attr("dy")),A=f.text(null).append("tspan").attr("x",0).attr("y",E).attr("dy",_+"em");for(let I=0;Ia||w==="
")&&(m.pop(),A.text(m.join(" ").trim()),w==="
"?m=[""]:m=[w],A=f.append("tspan").attr("x",0).attr("y",E).attr("dy",b+"em").text(w))})}const OWe=function(i,a,f,p){const w=f%TWe-1,m=i.append("g");a.section=w,m.attr("class",(a.class?a.class+" ":"")+"timeline-node "+("section-"+w));const b=m.append("g"),E=m.append("g"),A=E.append("text").text(a.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(n$t,a.width).node().getBBox(),I=p.fontSize&&p.fontSize.replace?p.fontSize.replace("px",""):p.fontSize;return a.height=A.height+I*1.1*.5+a.padding,a.height=Math.max(a.height,a.maxHeight),a.width=a.width+2*a.padding,E.attr("transform","translate("+a.width/2+", "+a.padding/2+")"),FWe(b,a,w),a},PWe=function(i,a,f){const p=i.append("g"),m=p.append("text").text(a.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(n$t,a.width).node().getBBox(),b=f.fontSize&&f.fontSize.replace?f.fontSize.replace("px",""):f.fontSize;return p.remove(),m.height+b*1.1*.5+a.padding},FWe=function(i,a,f){i.append("path").attr("id","node-"+a.id).attr("class","node-bkg node-"+a.type).attr("d",`M0 ${a.height-5} v${-a.height+2*5} q0,-5 5,-5 h${a.width-2*5} q5,0 5,5 v${a.height-5} H0 Z`),i.append("line").attr("class","node-line-"+f).attr("x1",0).attr("y1",a.height).attr("x2",a.width).attr("y2",a.height)},DT={drawRect:nK,drawCircle:_We,drawSection:AWe,drawText:Jjt,drawLabel:SWe,drawTask:LWe,drawBackgroundRect:MWe,getTextObj:DWe,getNoteRect:Xgt,initGraphics:IWe,drawNode:OWe,getVirtualNodeHeight:PWe},NWe=function(i,a,f,p){var X,pt;const w=Oe(),m=w.leftMargin??50;Ut.debug("timeline",p.db);const b=w.securityLevel;let E;b==="sandbox"&&(E=yr("#i"+a));const A=yr(b==="sandbox"?E.nodes()[0].contentDocument.body:"body").select("#"+a);A.append("g");const I=p.db.getTasks(),B=p.db.getCommonDb().getDiagramTitle();Ut.debug("task",I),DT.initGraphics(A);const N=p.db.getSections();Ut.debug("sections",N);let R=0,z=0,W=0,et=0,st=50+m,at=50;et=50;let bt=0,mt=!0;N.forEach(function(U){const Tt={number:bt,descr:U,section:bt,width:150,padding:20,maxHeight:R},nt=DT.getVirtualNodeHeight(A,Tt,w);Ut.debug("sectionHeight before draw",nt),R=Math.max(R,nt+20)});let yt=0,ft=0;Ut.debug("tasks.length",I.length);for(const[U,Tt]of I.entries()){const nt={number:U,descr:Tt,section:Tt.section,width:150,padding:20,maxHeight:z},It=DT.getVirtualNodeHeight(A,nt,w);Ut.debug("taskHeight before draw",It),z=Math.max(z,It+20),yt=Math.max(yt,Tt.events.length);let Ot=0;for(let Bt=0;Bt0?N.forEach(U=>{const Tt=I.filter(Bt=>Bt.section===U),nt={number:bt,descr:U,section:bt,width:200*Math.max(Tt.length,1)-50,padding:20,maxHeight:R};Ut.debug("sectionNode",nt);const It=A.append("g"),Ot=DT.drawNode(It,nt,bt,w);Ut.debug("sectionNode output",Ot),It.attr("transform",`translate(${st}, ${et})`),at+=R+50,Tt.length>0&&r$t(A,Tt,bt,st,at,z,w,yt,ft,R,!1),st+=200*Math.max(Tt.length,1),at=et,bt++}):(mt=!1,r$t(A,I,bt,st,at,z,w,yt,ft,R,!0));const ut=A.node().getBBox();Ut.debug("bounds",ut),B&&A.append("text").text(B).attr("x",ut.width/2-m).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),W=mt?R+z+150:z+100,A.append("g").attr("class","lineWrapper").append("line").attr("x1",m).attr("y1",W).attr("x2",ut.width+3*m).attr("y2",W).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),fT(void 0,A,((X=w.timeline)==null?void 0:X.padding)??50,((pt=w.timeline)==null?void 0:pt.useMaxWidth)??!1)},r$t=function(i,a,f,p,w,m,b,E,_,A,I){var B;for(const N of a){const R={descr:N.task,section:f,number:f,width:150,padding:20,maxHeight:m};Ut.debug("taskNode",R);const z=i.append("g").attr("class","taskWrapper"),et=DT.drawNode(z,R,f,b).height;if(Ut.debug("taskHeight after draw",et),z.attr("transform",`translate(${p}, ${w})`),m=Math.max(m,et),N.events){const st=i.append("g").attr("class","lineWrapper");let at=m;w+=100,at=at+BWe(i,N.events,f,p,w,b),w-=100,st.append("line").attr("x1",p+190/2).attr("y1",w+m).attr("x2",p+190/2).attr("y2",w+m+(I?m:A)+_+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}p=p+200,I&&!((B=b.timeline)!=null&&B.disableMulticolor)&&f++}w=w-10},BWe=function(i,a,f,p,w,m){let b=0;const E=w;w=w+100;for(const _ of a){const A={descr:_,section:f,number:f,width:150,padding:20,maxHeight:50};Ut.debug("eventNode",A);const I=i.append("g").attr("class","eventWrapper"),N=DT.drawNode(I,A,f,m).height;b=b+N,I.attr("transform",`translate(${p}, ${w})`),w=w+10+N}return w=E,b},RWe={setConf:()=>{},draw:NWe},jWe=i=>{let a="";for(let f=0;f"u"&&(ge.yylloc={});var U=ge.yylloc;oe.push(U);var Fe=ge.options&&ge.options.ranges;typeof W.yy.parseError=="function"?this.parseError=W.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Pe(){var Et;return Et=ee.pop()||ge.lex()||de,typeof Et!="number"&&(Et instanceof Array&&(ee=Et,Et=ee.pop()),Et=j.symbols_[Et]||Et),Et}for(var je,Ie,Se,Ce,ke={},Ke,Ft,Ne,gn;;){if(Ie=K[K.length-1],this.defaultActions[Ie]?Se=this.defaultActions[Ie]:((je===null||typeof je>"u")&&(je=Pe()),Se=pe[Ie]&&pe[Ie][je]),typeof Se>"u"||!Se.length||!Se[0]){var _t="";gn=[];for(Ke in pe[Ie])this.terminals_[Ke]&&Ke>se&&gn.push("'"+this.terminals_[Ke]+"'");ge.showPosition?_t="Parse error on line "+(ae+1)+`: +`+ge.showPosition()+` +Expecting `+gn.join(", ")+", got '"+(this.terminals_[je]||je)+"'":_t="Parse error on line "+(ae+1)+": Unexpected "+(je==de?"end of input":"'"+(this.terminals_[je]||je)+"'"),this.parseError(_t,{text:ge.match,token:this.terminals_[je]||je,line:ge.yylineno,loc:U,expected:gn})}if(Se[0]instanceof Array&&Se.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Ie+", token: "+je);switch(Se[0]){case 1:K.push(je),ie.push(ge.yytext),oe.push(ge.yylloc),K.push(Se[1]),je=null,ne=ge.yyleng,be=ge.yytext,ae=ge.yylineno,U=ge.yylloc;break;case 2:if(Ft=this.productions_[Se[1]][1],ke.$=ie[ie.length-Ft],ke._$={first_line:oe[oe.length-(Ft||1)].first_line,last_line:oe[oe.length-1].last_line,first_column:oe[oe.length-(Ft||1)].first_column,last_column:oe[oe.length-1].last_column},Fe&&(ke._$.range=[oe[oe.length-(Ft||1)].range[0],oe[oe.length-1].range[1]]),Ce=this.performAction.apply(ke,[be,ne,ae,W.yy,Se[1],ie,oe].concat(X)),typeof Ce<"u")return Ce;Ft&&(K=K.slice(0,-1*Ft*2),ie=ie.slice(0,-1*Ft),oe=oe.slice(0,-1*Ft)),K.push(this.productions_[Se[1]][0]),ie.push(ke.$),oe.push(ke._$),Ne=pe[K[K.length-2]][K[K.length-1]],K.push(Ne);break;case 3:return!0}}return!0}},A=function(){var R={EOF:1,parseError:function(j,K){if(this.yy.parser)this.yy.parser.parseError(j,K);else throw new Error(j)},setInput:function(F,j){return this.yy=j||this.yy||{},this._input=F,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var F=this._input[0];this.yytext+=F,this.yyleng++,this.offset++,this.match+=F,this.matched+=F;var j=F.match(/(?:\r\n?|\n).*/g);return j?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),F},unput:function(F){var j=F.length,K=F.split(/(?:\r\n?|\n)/g);this._input=F+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-j),this.offset-=j;var ee=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),K.length-1&&(this.yylineno-=K.length-1);var ie=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:K?(K.length===ee.length?this.yylloc.first_column:0)+ee[ee.length-K.length].length-K[0].length:this.yylloc.first_column-j},this.options.ranges&&(this.yylloc.range=[ie[0],ie[0]+this.yyleng-j]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(F){this.unput(this.match.slice(F))},pastInput:function(){var F=this.matched.substr(0,this.matched.length-this.match.length);return(F.length>20?"...":"")+F.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var F=this.match;return F.length<20&&(F+=this._input.substr(0,20-F.length)),(F.substr(0,20)+(F.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var F=this.pastInput(),j=new Array(F.length+1).join("-");return F+this.upcomingInput()+` +`+j+"^"},test_match:function(F,j){var K,ee,ie;if(this.options.backtrack_lexer&&(ie={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ie.yylloc.range=this.yylloc.range.slice(0))),ee=F[0].match(/(?:\r\n?|\n).*/g),ee&&(this.yylineno+=ee.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ee?ee[ee.length-1].length-ee[ee.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+F[0].length},this.yytext+=F[0],this.match+=F[0],this.matches=F,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(F[0].length),this.matched+=F[0],K=this.performAction.call(this,this.yy,this,j,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),K)return K;if(this._backtrack){for(var oe in ie)this[oe]=ie[oe];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var F,j,K,ee;this._more||(this.yytext="",this.match="");for(var ie=this._currentRules(),oe=0;oej[0].length)){if(j=K,ee=oe,this.options.backtrack_lexer){if(F=this.test_match(K,ie[oe]),F!==!1)return F;if(this._backtrack){j=!1;continue}else return!1}else if(!this.options.flex)break}return j?(F=this.test_match(j,ie[ee]),F!==!1?F:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var j=this.next();return j||this.lex()},begin:function(j){this.conditionStack.push(j)},popState:function(){var j=this.conditionStack.length-1;return j>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(j){return j=this.conditionStack.length-1-Math.abs(j||0),j>=0?this.conditionStack[j]:"INITIAL"},pushState:function(j){this.begin(j)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(j,K,ee,ie){switch(ee){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 21;case 16:return 20;case 17:return 6;case 18:return"INVALID"}},rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?::\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18],inclusive:!0}}};return R}();_.lexer=A;function P(){this.yy={}}return P.prototype=_,_.Parser=P,new P}();Qve.parser=Qve;const $an=Qve;let ZD="",YKe=0;const Jve=[],IJ=[],eI=[],XKe=()=>Jje,QKe=function(){Jve.length=0,IJ.length=0,ZD="",eI.length=0,Pg()},JKe=function(i){ZD=i,Jve.push(i)},ZKe=function(){return Jve},eWe=function(){let i=iWe();const s=100;let u=0;for(;!i&&uu.id===YKe-1).events.push(i)},rWe=function(i){const s={section:ZD,type:ZD,description:i,task:i,classes:[]};IJ.push(s)},iWe=function(){const i=function(u){return eI[u].processed};let s=!0;for(const[u,d]of eI.entries())i(u),s=s&&d.processed;return s},zan=Object.freeze(Object.defineProperty({__proto__:null,addEvent:nWe,addSection:JKe,addTask:tWe,addTaskOrg:rWe,clear:QKe,default:{clear:QKe,getCommonDb:XKe,addSection:JKe,getSections:ZKe,getTasks:eWe,addTask:tWe,addTaskOrg:rWe,addEvent:nWe},getCommonDb:XKe,getSections:ZKe,getTasks:eWe},Symbol.toStringTag,{value:"Module"})),qan=12,OJ=function(i,s){const u=i.append("rect");return u.attr("x",s.x),u.attr("y",s.y),u.attr("fill",s.fill),u.attr("stroke",s.stroke),u.attr("width",s.width),u.attr("height",s.height),u.attr("rx",s.rx),u.attr("ry",s.ry),s.class!==void 0&&u.attr("class",s.class),u},Han=function(i,s){const d=i.append("circle").attr("cx",s.cx).attr("cy",s.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),p=i.append("g");p.append("circle").attr("cx",s.cx-15/3).attr("cy",s.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),p.append("circle").attr("cx",s.cx+15/3).attr("cy",s.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function v(T){const _=lD().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);T.append("path").attr("class","mouth").attr("d",_).attr("transform","translate("+s.cx+","+(s.cy+2)+")")}function b(T){const _=lD().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);T.append("path").attr("class","mouth").attr("d",_).attr("transform","translate("+s.cx+","+(s.cy+7)+")")}function y(T){T.append("line").attr("class","mouth").attr("stroke",2).attr("x1",s.cx-5).attr("y1",s.cy+7).attr("x2",s.cx+5).attr("y2",s.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return s.score>3?v(p):s.score<3?b(p):y(p),d},Van=function(i,s){const u=i.append("circle");return u.attr("cx",s.cx),u.attr("cy",s.cy),u.attr("class","actor-"+s.pos),u.attr("fill",s.fill),u.attr("stroke",s.stroke),u.attr("r",s.r),u.class!==void 0&&u.attr("class",u.class),s.title!==void 0&&u.append("title").text(s.title),u},sWe=function(i,s){const u=s.text.replace(//gi," "),d=i.append("text");d.attr("x",s.x),d.attr("y",s.y),d.attr("class","legend"),d.style("text-anchor",s.anchor),s.class!==void 0&&d.attr("class",s.class);const p=d.append("tspan");return p.attr("x",s.x+s.textMargin*2),p.text(u),d},Uan=function(i,s){function u(p,v,b,y,T){return p+","+v+" "+(p+b)+","+v+" "+(p+b)+","+(v+y-T)+" "+(p+b-T*1.2)+","+(v+y)+" "+p+","+(v+y)}const d=i.append("polygon");d.attr("points",u(s.x,s.y,50,20,7)),d.attr("class","labelBox"),s.y=s.y+s.labelMargin,s.x=s.x+.5*s.labelMargin,sWe(i,s)},Gan=function(i,s,u){const d=i.append("g"),p=Zve();p.x=s.x,p.y=s.y,p.fill=s.fill,p.width=u.width,p.height=u.height,p.class="journey-section section-type-"+s.num,p.rx=3,p.ry=3,OJ(d,p),oWe(u)(s.text,d,p.x,p.y,p.width,p.height,{class:"journey-section section-type-"+s.num},u,s.colour)};let aWe=-1;const Kan=function(i,s,u){const d=s.x+u.width/2,p=i.append("g");aWe++;const v=300+5*30;p.append("line").attr("id","task"+aWe).attr("x1",d).attr("y1",s.y).attr("x2",d).attr("y2",v).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),Han(p,{cx:d,cy:300+(5-s.score)*30,score:s.score});const b=Zve();b.x=s.x,b.y=s.y,b.fill=s.fill,b.width=u.width,b.height=u.height,b.class="task task-type-"+s.num,b.rx=3,b.ry=3,OJ(p,b),s.x+14,oWe(u)(s.task,p,b.x,b.y,b.width,b.height,{class:"task"},u,s.colour)},Wan=function(i,s){OJ(i,{x:s.startx,y:s.starty,width:s.stopx-s.startx,height:s.stopy-s.starty,fill:s.fill,class:"rect"}).lower()},Yan=function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},Zve=function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},oWe=function(){function i(p,v,b,y,T,_,A,P){const R=v.append("text").attr("x",b+T/2).attr("y",y+_/2+5).style("font-color",P).style("text-anchor","middle").text(p);d(R,A)}function s(p,v,b,y,T,_,A,P,R){const{taskFontSize:F,taskFontFamily:j}=P,K=p.split(//gi);for(let ee=0;ee)/).reverse(),p,v=[],b=1.1,y=u.attr("y"),T=parseFloat(u.attr("dy")),_=u.text(null).append("tspan").attr("x",0).attr("y",y).attr("dy",T+"em");for(let A=0;As||p==="
")&&(v.pop(),_.text(v.join(" ").trim()),p==="
"?v=[""]:v=[p],_=u.append("tspan").attr("x",0).attr("y",y).attr("dy",b+"em").text(p))})}const Qan=function(i,s,u,d){const p=u%qan-1,v=i.append("g");s.section=p,v.attr("class",(s.class?s.class+" ":"")+"timeline-node "+("section-"+p));const b=v.append("g"),y=v.append("g"),_=y.append("text").text(s.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(cWe,s.width).node().getBBox(),A=d.fontSize&&d.fontSize.replace?d.fontSize.replace("px",""):d.fontSize;return s.height=_.height+A*1.1*.5+s.padding,s.height=Math.max(s.height,s.maxHeight),s.width=s.width+2*s.padding,y.attr("transform","translate("+s.width/2+", "+s.padding/2+")"),Zan(b,s,p),s},Jan=function(i,s,u){const d=i.append("g"),v=d.append("text").text(s.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(cWe,s.width).node().getBBox(),b=u.fontSize&&u.fontSize.replace?u.fontSize.replace("px",""):u.fontSize;return d.remove(),v.height+b*1.1*.5+s.padding},Zan=function(i,s,u){i.append("path").attr("id","node-"+s.id).attr("class","node-bkg node-"+s.type).attr("d",`M0 ${s.height-5} v${-s.height+2*5} q0,-5 5,-5 h${s.width-2*5} q5,0 5,5 v${s.height-5} H0 Z`),i.append("line").attr("class","node-line-"+u).attr("x1",0).attr("y1",s.height).attr("x2",s.width).attr("y2",s.height)},sS={drawRect:OJ,drawCircle:Van,drawSection:Gan,drawText:sWe,drawLabel:Uan,drawTask:Kan,drawBackgroundRect:Wan,getTextObj:Yan,getNoteRect:Zve,initGraphics:Xan,drawNode:Qan,getVirtualNodeHeight:Jan},eon=function(i,s,u,d){var X,ge;const p=qt(),v=p.leftMargin??50;Xe.debug("timeline",d.db);const b=p.securityLevel;let y;b==="sandbox"&&(y=Ir("#i"+s));const _=Ir(b==="sandbox"?y.nodes()[0].contentDocument.body:"body").select("#"+s);_.append("g");const A=d.db.getTasks(),P=d.db.getCommonDb().getDiagramTitle();Xe.debug("task",A),sS.initGraphics(_);const R=d.db.getSections();Xe.debug("sections",R);let F=0,j=0,K=0,ee=0,ie=50+v,oe=50;ee=50;let pe=0,be=!0;R.forEach(function(W){const xe={number:pe,descr:W,section:pe,width:150,padding:20,maxHeight:F},U=sS.getVirtualNodeHeight(_,xe,p);Xe.debug("sectionHeight before draw",U),F=Math.max(F,U+20)});let ae=0,ne=0;Xe.debug("tasks.length",A.length);for(const[W,xe]of A.entries()){const U={number:W,descr:xe,section:xe.section,width:150,padding:20,maxHeight:j},Fe=sS.getVirtualNodeHeight(_,U,p);Xe.debug("taskHeight before draw",Fe),j=Math.max(j,Fe+20),ae=Math.max(ae,xe.events.length);let Pe=0;for(let je=0;je0?R.forEach(W=>{const xe=A.filter(je=>je.section===W),U={number:pe,descr:W,section:pe,width:200*Math.max(xe.length,1)-50,padding:20,maxHeight:F};Xe.debug("sectionNode",U);const Fe=_.append("g"),Pe=sS.drawNode(Fe,U,pe,p);Xe.debug("sectionNode output",Pe),Fe.attr("transform",`translate(${ie}, ${ee})`),oe+=F+50,xe.length>0&&uWe(_,xe,pe,ie,oe,j,p,ae,ne,F,!1),ie+=200*Math.max(xe.length,1),oe=ee,pe++}):(be=!1,uWe(_,A,pe,ie,oe,j,p,ae,ne,F,!0));const se=_.node().getBBox();Xe.debug("bounds",se),P&&_.append("text").text(P).attr("x",se.width/2-v).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),K=be?F+j+150:j+100,_.append("g").attr("class","lineWrapper").append("line").attr("x1",v).attr("y1",K).attr("x2",se.width+3*v).attr("y2",K).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),y9(void 0,_,((X=p.timeline)==null?void 0:X.padding)??50,((ge=p.timeline)==null?void 0:ge.useMaxWidth)??!1)},uWe=function(i,s,u,d,p,v,b,y,T,_,A){var P;for(const R of s){const F={descr:R.task,section:u,number:u,width:150,padding:20,maxHeight:v};Xe.debug("taskNode",F);const j=i.append("g").attr("class","taskWrapper"),ee=sS.drawNode(j,F,u,b).height;if(Xe.debug("taskHeight after draw",ee),j.attr("transform",`translate(${d}, ${p})`),v=Math.max(v,ee),R.events){const ie=i.append("g").attr("class","lineWrapper");let oe=v;p+=100,oe=oe+ton(i,R.events,u,d,p,b),p-=100,ie.append("line").attr("x1",d+190/2).attr("y1",p+v).attr("x2",d+190/2).attr("y2",p+v+(A?v:_)+T+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}d=d+200,A&&!((P=b.timeline)!=null&&P.disableMulticolor)&&u++}p=p-10},ton=function(i,s,u,d,p,v){let b=0;const y=p;p=p+100;for(const T of s){const _={descr:T,section:u,number:u,width:150,padding:20,maxHeight:50};Xe.debug("eventNode",_);const A=i.append("g").attr("class","eventWrapper"),R=sS.drawNode(A,_,u,v).height;b=b+R,A.attr("transform",`translate(${d}, ${p})`),p=p+10+R}return p=y,b},non={setConf:()=>{},draw:eon},ron=i=>{let s="";for(let u=0;u"u"&&(Z.yylloc={});var Ht=Z.yylloc;pt.push(Ht);var Le=Z.options&&Z.options.ranges;typeof Ct.yy.parseError=="function"?this.parseError=Ct.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ft(){var Pe;return Pe=vt.pop()||Z.lex()||Bt,typeof Pe!="number"&&(Pe instanceof Array&&(vt=Pe,Pe=vt.pop()),Pe=ft.symbols_[Pe]||Pe),Pe}for(var gn,Se,me,Ve,Ye={},ce,ke,zt,re;;){if(Se=ut[ut.length-1],this.defaultActions[Se]?me=this.defaultActions[Se]:((gn===null||typeof gn>"u")&&(gn=Ft()),me=U[Se]&&U[Se][gn]),typeof me>"u"||!me.length||!me[0]){var se="";re=[];for(ce in U[Se])this.terminals_[ce]&&ce>Ot&&re.push("'"+this.terminals_[ce]+"'");Z.showPosition?se="Parse error on line "+(nt+1)+`: -`+Z.showPosition()+` -Expecting `+re.join(", ")+", got '"+(this.terminals_[gn]||gn)+"'":se="Parse error on line "+(nt+1)+": Unexpected "+(gn==Bt?"end of input":"'"+(this.terminals_[gn]||gn)+"'"),this.parseError(se,{text:Z.match,token:this.terminals_[gn]||gn,line:Z.yylineno,loc:Ht,expected:re})}if(me[0]instanceof Array&&me.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Se+", token: "+gn);switch(me[0]){case 1:ut.push(gn),X.push(Z.yytext),pt.push(Z.yylloc),ut.push(me[1]),gn=null,It=Z.yyleng,Tt=Z.yytext,nt=Z.yylineno,Ht=Z.yylloc;break;case 2:if(ke=this.productions_[me[1]][1],Ye.$=X[X.length-ke],Ye._$={first_line:pt[pt.length-(ke||1)].first_line,last_line:pt[pt.length-1].last_line,first_column:pt[pt.length-(ke||1)].first_column,last_column:pt[pt.length-1].last_column},Le&&(Ye._$.range=[pt[pt.length-(ke||1)].range[0],pt[pt.length-1].range[1]]),Ve=this.performAction.apply(Ye,[Tt,It,nt,Ct.yy,me[1],X,pt].concat(Et)),typeof Ve<"u")return Ve;ke&&(ut=ut.slice(0,-1*ke*2),X=X.slice(0,-1*ke),pt=pt.slice(0,-1*ke)),ut.push(this.productions_[me[1]][0]),X.push(Ye.$),pt.push(Ye._$),zt=U[ut[ut.length-2]][ut[ut.length-1]],ut.push(zt);break;case 3:return!0}}return!0}},at=function(){var mt={EOF:1,parseError:function(ft,ut){if(this.yy.parser)this.yy.parser.parseError(ft,ut);else throw new Error(ft)},setInput:function(yt,ft){return this.yy=ft||this.yy||{},this._input=yt,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var yt=this._input[0];this.yytext+=yt,this.yyleng++,this.offset++,this.match+=yt,this.matched+=yt;var ft=yt.match(/(?:\r\n?|\n).*/g);return ft?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),yt},unput:function(yt){var ft=yt.length,ut=yt.split(/(?:\r\n?|\n)/g);this._input=yt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ft),this.offset-=ft;var vt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ut.length-1&&(this.yylineno-=ut.length-1);var X=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ut?(ut.length===vt.length?this.yylloc.first_column:0)+vt[vt.length-ut.length].length-ut[0].length:this.yylloc.first_column-ft},this.options.ranges&&(this.yylloc.range=[X[0],X[0]+this.yyleng-ft]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(yt){this.unput(this.match.slice(yt))},pastInput:function(){var yt=this.matched.substr(0,this.matched.length-this.match.length);return(yt.length>20?"...":"")+yt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var yt=this.match;return yt.length<20&&(yt+=this._input.substr(0,20-yt.length)),(yt.substr(0,20)+(yt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var yt=this.pastInput(),ft=new Array(yt.length+1).join("-");return yt+this.upcomingInput()+` -`+ft+"^"},test_match:function(yt,ft){var ut,vt,X;if(this.options.backtrack_lexer&&(X={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(X.yylloc.range=this.yylloc.range.slice(0))),vt=yt[0].match(/(?:\r\n?|\n).*/g),vt&&(this.yylineno+=vt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:vt?vt[vt.length-1].length-vt[vt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+yt[0].length},this.yytext+=yt[0],this.match+=yt[0],this.matches=yt,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(yt[0].length),this.matched+=yt[0],ut=this.performAction.call(this,this.yy,this,ft,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ut)return ut;if(this._backtrack){for(var pt in X)this[pt]=X[pt];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var yt,ft,ut,vt;this._more||(this.yytext="",this.match="");for(var X=this._currentRules(),pt=0;ptft[0].length)){if(ft=ut,vt=pt,this.options.backtrack_lexer){if(yt=this.test_match(ut,X[pt]),yt!==!1)return yt;if(this._backtrack){ft=!1;continue}else return!1}else if(!this.options.flex)break}return ft?(yt=this.test_match(ft,X[vt]),yt!==!1?yt:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var ft=this.next();return ft||this.lex()},begin:function(ft){this.conditionStack.push(ft)},popState:function(){var ft=this.conditionStack.length-1;return ft>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(ft){return ft=this.conditionStack.length-1-Math.abs(ft||0),ft>=0?this.conditionStack[ft]:"INITIAL"},pushState:function(ft){this.begin(ft)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(ft,ut,vt,X){switch(vt){case 0:return ft.getLogger().trace("Found comment",ut.yytext),6;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;case 4:this.popState();break;case 5:ft.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return ft.getLogger().trace("SPACELINE"),6;case 7:return 7;case 8:return 15;case 9:ft.getLogger().trace("end icon"),this.popState();break;case 10:return ft.getLogger().trace("Exploding node"),this.begin("NODE"),19;case 11:return ft.getLogger().trace("Cloud"),this.begin("NODE"),19;case 12:return ft.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;case 13:return ft.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;case 14:return this.begin("NODE"),19;case 15:return this.begin("NODE"),19;case 16:return this.begin("NODE"),19;case 17:return this.begin("NODE"),19;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 23:this.popState();break;case 24:ft.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return ft.getLogger().trace("description:",ut.yytext),"NODE_DESCR";case 26:this.popState();break;case 27:return this.popState(),ft.getLogger().trace("node end ))"),"NODE_DEND";case 28:return this.popState(),ft.getLogger().trace("node end )"),"NODE_DEND";case 29:return this.popState(),ft.getLogger().trace("node end ...",ut.yytext),"NODE_DEND";case 30:return this.popState(),ft.getLogger().trace("node end (("),"NODE_DEND";case 31:return this.popState(),ft.getLogger().trace("node end (-"),"NODE_DEND";case 32:return this.popState(),ft.getLogger().trace("node end (-"),"NODE_DEND";case 33:return this.popState(),ft.getLogger().trace("node end (("),"NODE_DEND";case 34:return this.popState(),ft.getLogger().trace("node end (("),"NODE_DEND";case 35:return ft.getLogger().trace("Long description:",ut.yytext),20;case 36:return ft.getLogger().trace("Long description:",ut.yytext),20}},rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};return mt}();st.lexer=at;function bt(){this.yy={}}return bt.prototype=st,st.Parser=bt,new bt}();Qgt.parser=Qgt;const zWe=Qgt,rN=i=>Q1(i,Oe());let cw=[],i$t=0,Zgt={};const qWe=()=>{cw=[],i$t=0,Zgt={}},HWe=function(i){for(let a=cw.length-1;a>=0;a--)if(cw[a].levelcw.length>0?cw[0]:null,GWe=(i,a,f,p)=>{Ut.info("addNode",i,a,f,p);const w=Oe(),m={id:i$t++,nodeId:rN(a),level:i,descr:rN(f),type:p,children:[],width:Oe().mindmap.maxNodeWidth};switch(m.type){case Uu.ROUNDED_RECT:m.padding=2*w.mindmap.padding;break;case Uu.RECT:m.padding=2*w.mindmap.padding;break;case Uu.HEXAGON:m.padding=2*w.mindmap.padding;break;default:m.padding=w.mindmap.padding}const b=HWe(i);if(b)b.children.push(m),cw.push(m);else if(cw.length===0)cw.push(m);else{let E=new Error('There can be only one root. No parent could be found for ("'+m.descr+'")');throw E.hash={text:"branch "+name,token:"branch "+name,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+name+'"']},E}},Uu={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},UWe=(i,a)=>{switch(Ut.debug("In get type",i,a),i){case"[":return Uu.RECT;case"(":return a===")"?Uu.ROUNDED_RECT:Uu.CLOUD;case"((":return Uu.CIRCLE;case")":return Uu.CLOUD;case"))":return Uu.BANG;case"{{":return Uu.HEXAGON;default:return Uu.DEFAULT}},s$t=(i,a)=>{Zgt[i]=a},WWe=i=>{const a=cw[cw.length-1];i&&i.icon&&(a.icon=rN(i.icon)),i&&i.class&&(a.class=rN(i.class))},IT=i=>{switch(i){case Uu.DEFAULT:return"no-border";case Uu.RECT:return"rect";case Uu.ROUNDED_RECT:return"rounded-rect";case Uu.CIRCLE:return"circle";case Uu.CLOUD:return"cloud";case Uu.BANG:return"bang";case Uu.HEXAGON:return"hexgon";default:return"no-border"}};let a$t;const YWe=i=>{a$t=i},KWe=()=>Ut,XWe=i=>cw[i],Jgt=i=>Zgt[i],QWe=Object.freeze(Object.defineProperty({__proto__:null,addNode:GWe,clear:qWe,decorateNode:WWe,getElementById:Jgt,getLogger:KWe,getMindmap:VWe,getNodeById:XWe,getType:UWe,nodeType:Uu,get parseError(){return a$t},sanitizeText:rN,setElementForId:s$t,setErrorHandler:YWe,type2Str:IT},Symbol.toStringTag,{value:"Module"})),o$t=12,ZWe=function(i,a,f){i.append("path").attr("id","node-"+a.id).attr("class","node-bkg node-"+IT(a.type)).attr("d",`M0 ${a.height-5} v${-a.height+2*5} q0,-5 5,-5 h${a.width-2*5} q5,0 5,5 v${a.height-5} H0 Z`),i.append("line").attr("class","node-line-"+f).attr("x1",0).attr("y1",a.height).attr("x2",a.width).attr("y2",a.height)},JWe=function(i,a){i.append("rect").attr("id","node-"+a.id).attr("class","node-bkg node-"+IT(a.type)).attr("height",a.height).attr("width",a.width)},tYe=function(i,a){const f=a.width,p=a.height,w=.15*f,m=.25*f,b=.35*f,E=.2*f;i.append("path").attr("id","node-"+a.id).attr("class","node-bkg node-"+IT(a.type)).attr("d",`M0 0 a${w},${w} 0 0,1 ${f*.25},${-1*f*.1} - a${b},${b} 1 0,1 ${f*.4},${-1*f*.1} - a${m},${m} 1 0,1 ${f*.35},${1*f*.2} - - a${w},${w} 1 0,1 ${f*.15},${1*p*.35} - a${E},${E} 1 0,1 ${-1*f*.15},${1*p*.65} - - a${m},${w} 1 0,1 ${-1*f*.25},${f*.15} - a${b},${b} 1 0,1 ${-1*f*.5},0 - a${w},${w} 1 0,1 ${-1*f*.25},${-1*f*.15} - - a${w},${w} 1 0,1 ${-1*f*.1},${-1*p*.35} - a${E},${E} 1 0,1 ${f*.1},${-1*p*.65} - - H0 V0 Z`)},eYe=function(i,a){const f=a.width,p=a.height,w=.15*f;i.append("path").attr("id","node-"+a.id).attr("class","node-bkg node-"+IT(a.type)).attr("d",`M0 0 a${w},${w} 1 0,0 ${f*.25},${-1*p*.1} - a${w},${w} 1 0,0 ${f*.25},0 - a${w},${w} 1 0,0 ${f*.25},0 - a${w},${w} 1 0,0 ${f*.25},${1*p*.1} - - a${w},${w} 1 0,0 ${f*.15},${1*p*.33} - a${w*.8},${w*.8} 1 0,0 0,${1*p*.34} - a${w},${w} 1 0,0 ${-1*f*.15},${1*p*.33} - - a${w},${w} 1 0,0 ${-1*f*.25},${p*.15} - a${w},${w} 1 0,0 ${-1*f*.25},0 - a${w},${w} 1 0,0 ${-1*f*.25},0 - a${w},${w} 1 0,0 ${-1*f*.25},${-1*p*.15} - - a${w},${w} 1 0,0 ${-1*f*.1},${-1*p*.33} - a${w*.8},${w*.8} 1 0,0 0,${-1*p*.34} - a${w},${w} 1 0,0 ${f*.1},${-1*p*.33} - - H0 V0 Z`)},nYe=function(i,a){i.append("circle").attr("id","node-"+a.id).attr("class","node-bkg node-"+IT(a.type)).attr("r",a.width/2)};function rYe(i,a,f,p,w){return i.insert("polygon",":first-child").attr("points",p.map(function(m){return m.x+","+m.y}).join(" ")).attr("transform","translate("+(w.width-a)/2+", "+f+")")}const iYe=function(i,a){const f=a.height,w=f/4,m=a.width-a.padding+2*w,b=[{x:w,y:0},{x:m-w,y:0},{x:m,y:-f/2},{x:m-w,y:-f},{x:w,y:-f},{x:0,y:-f/2}];rYe(i,m,f,b,a)},sYe=function(i,a){i.append("rect").attr("id","node-"+a.id).attr("class","node-bkg node-"+IT(a.type)).attr("height",a.height).attr("rx",a.padding).attr("ry",a.padding).attr("width",a.width)},c$t={drawNode:function(i,a,f,p){const w=p.htmlLabels,m=f%(o$t-1),b=i.append("g");a.section=m;let E="section-"+m;m<0&&(E+=" section-root"),b.attr("class",(a.class?a.class+" ":"")+"mindmap-node "+E);const _=b.append("g"),A=b.append("g"),I=a.descr.replace(/()/g,` -`);EY(A,I,{useHtmlLabels:w,width:a.width,classes:"mindmap-node-label"}),w||A.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");const B=A.node().getBBox(),N=p.fontSize.replace?p.fontSize.replace("px",""):p.fontSize;if(a.height=B.height+N*1.1*.5+a.padding,a.width=B.width+2*a.padding,a.icon)if(a.type===Uu.CIRCLE)a.height+=50,a.width+=50,b.append("foreignObject").attr("height","50px").attr("width",a.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+m+" "+a.icon),A.attr("transform","translate("+a.width/2+", "+(a.height/2-1.5*a.padding)+")");else{a.width+=50;const R=a.height;a.height=Math.max(R,60);const z=Math.abs(a.height-R);b.append("foreignObject").attr("width","60px").attr("height",a.height).attr("style","text-align: center;margin-top:"+z/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+m+" "+a.icon),A.attr("transform","translate("+(25+a.width/2)+", "+(z/2+a.padding/2)+")")}else if(w){const R=(a.width-B.width)/2,z=(a.height-B.height)/2;A.attr("transform","translate("+R+", "+z+")")}else{const R=a.width/2,z=a.padding/2;A.attr("transform","translate("+R+", "+z+")")}switch(a.type){case Uu.DEFAULT:ZWe(_,a,m);break;case Uu.ROUNDED_RECT:sYe(_,a);break;case Uu.RECT:JWe(_,a);break;case Uu.CIRCLE:_.attr("transform","translate("+a.width/2+", "+ +a.height/2+")"),nYe(_,a);break;case Uu.CLOUD:tYe(_,a);break;case Uu.BANG:eYe(_,a);break;case Uu.HEXAGON:iYe(_,a);break}return s$t(a.id,b),a.height},positionNode:function(i){const a=Jgt(i.id),f=i.x||0,p=i.y||0;a.attr("transform","translate("+f+","+p+")")},drawEdge:function(a,f,p,w,m){const b=m%(o$t-1),E=p.x+p.width/2,_=p.y+p.height/2,A=f.x+f.width/2,I=f.y+f.height/2,B=A>E?E+Math.abs(E-A)/2:E-Math.abs(E-A)/2,N=I>_?_+Math.abs(_-I)/2:_-Math.abs(_-I)/2,R=A>E?Math.abs(E-B)/2+E:-Math.abs(E-B)/2+E,z=I>_?Math.abs(_-N)/2+_:-Math.abs(_-N)/2+_;a.append("path").attr("d",p.direction==="TB"||p.direction==="BT"?`M${E},${_} Q${E},${z} ${B},${N} T${A},${I}`:`M${E},${_} Q${R},${_} ${B},${N} T${A},${I}`).attr("class","edge section-edge-"+b+" edge-depth-"+w)}};var u$t={exports:{}};(function(i,a){(function(f,p){i.exports=p()})(b0,function(){function f(y){"@babel/helpers - typeof";return f=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(g){return typeof g}:function(g){return g&&typeof Symbol=="function"&&g.constructor===Symbol&&g!==Symbol.prototype?"symbol":typeof g},f(y)}function p(y,g){if(!(y instanceof g))throw new TypeError("Cannot call a class as a function")}function w(y,g){for(var x=0;xy.length)&&(g=y.length);for(var x=0,T=new Array(g);x"u"?null:window,z=R?R.navigator:null;R&&R.document;var W=f(""),et=f({}),st=f(function(){}),at=typeof HTMLElement>"u"?"undefined":f(HTMLElement),bt=function(g){return g&&g.instanceString&&yt(g.instanceString)?g.instanceString():null},mt=function(g){return g!=null&&f(g)==W},yt=function(g){return g!=null&&f(g)===st},ft=function(g){return!Tt(g)&&(Array.isArray?Array.isArray(g):g!=null&&g instanceof Array)},ut=function(g){return g!=null&&f(g)===et&&!ft(g)&&g.constructor===Object},vt=function(g){return g!=null&&f(g)===et},X=function(g){return g!=null&&f(g)===f(1)&&!isNaN(g)},pt=function(g){return X(g)&&Math.floor(g)===g},U=function(g){if(at!=="undefined")return g!=null&&g instanceof HTMLElement},Tt=function(g){return nt(g)||It(g)},nt=function(g){return bt(g)==="collection"&&g._private.single},It=function(g){return bt(g)==="collection"&&!g._private.single},Ot=function(g){return bt(g)==="core"},Bt=function(g){return bt(g)==="stylesheet"},Et=function(g){return bt(g)==="event"},Z=function(g){return g==null?!0:!!(g===""||g.match(/^\s+$/))},Ct=function(g){return typeof HTMLElement>"u"?!1:g instanceof HTMLElement},xt=function(g){return ut(g)&&X(g.x1)&&X(g.x2)&&X(g.y1)&&X(g.y2)},Ht=function(g){return vt(g)&&yt(g.then)},Le=function(){return z&&z.userAgent.match(/msie|trident|edge/i)},Ft=function(g,x){x||(x=function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var O=[],P=0;Px?1:0},Me=function(g,x){return-1*te(g,x)},de=Object.assign!=null?Object.assign.bind(Object):function(y){for(var g=arguments,x=1;x1&&(Lt-=1),Lt<1/6?ht+(dt-ht)*6*Lt:Lt<1/2?dt:Lt<2/3?ht+(dt-ht)*(2/3-Lt)*6:ht}var Y=new RegExp("^"+zt+"$").exec(g);if(Y){if(T=parseInt(Y[1]),T<0?T=(360- -1*T%360)%360:T>360&&(T=T%360),T/=360,L=parseFloat(Y[2]),L<0||L>100||(L=L/100,O=parseFloat(Y[3]),O<0||O>100)||(O=O/100,P=Y[4],P!==void 0&&(P=parseFloat(P),P<0||P>1)))return;if(L===0)$=q=S=Math.round(O*255);else{var rt=O<.5?O*(1+L):O+L-O*L,ot=2*O-rt;$=Math.round(255*V(ot,rt,T+1/3)),q=Math.round(255*V(ot,rt,T)),S=Math.round(255*V(ot,rt,T-1/3))}x=[$,q,S,P]}return x},Ks=function(g){var x,T=new RegExp("^"+ce+"$").exec(g);if(T){x=[];for(var L=[],O=1;O<=3;O++){var P=T[O];if(P[P.length-1]==="%"&&(L[O]=!0),P=parseFloat(P),L[O]&&(P=P/100*255),P<0||P>255)return;x.push(Math.floor(P))}var $=L[1]||L[2]||L[3],q=L[1]&&L[2]&&L[3];if($&&!q)return;var S=T[4];if(S!==void 0){if(S=parseFloat(S),S<0||S>1)return;x.push(S)}}return x},ws=function(g){return Xi[g.toLowerCase()]},fo=function(g){return(ft(g)?g:null)||ws(g)||on(g)||Ks(g)||ni(g)},Xi={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Er=function(g){for(var x=g.map,T=g.keys,L=T.length,O=0;O=g||qt<0||Y&&ne>=O}function kt(){var Yt=Po();if(Lt(Yt))return Dt(Yt);$=setTimeout(kt,dt(Yt))}function Dt(Yt){return $=void 0,rt&&T?ot(Yt):(T=L=void 0,P)}function Pt(){$!==void 0&&clearTimeout($),S=0,T=q=L=$=void 0}function $t(){return $===void 0?P:Dt(Po())}function Zt(){var Yt=Po(),qt=Lt(Yt);if(T=arguments,L=this,q=Yt,qt){if($===void 0)return ht(q);if(Y)return clearTimeout($),$=setTimeout(kt,g),ot(q)}return $===void 0&&($=setTimeout(kt,g)),P}return Zt.cancel=Pt,Zt.flush=$t,Zt}var Yc=xi,Ce=R?R.performance:null,vp=Ce&&Ce.now?function(){return Ce.now()}:function(){return Date.now()},Be=function(){if(R){if(R.requestAnimationFrame)return function(y){R.requestAnimationFrame(y)};if(R.mozRequestAnimationFrame)return function(y){R.mozRequestAnimationFrame(y)};if(R.webkitRequestAnimationFrame)return function(y){R.webkitRequestAnimationFrame(y)};if(R.msRequestAnimationFrame)return function(y){R.msRequestAnimationFrame(y)}}return function(y){y&&setTimeout(function(){y(vp())},1e3/60)}}(),Bf=function(g){return Be(g)},yg=vp,bm=9261,Ek=65599,E3=5381,Il=function(g){for(var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:bm,T=x,L;L=g.next(),!L.done;)T=T*Ek+L.value|0;return T},L0=function(g){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:bm;return x*Ek+g|0},hw=function(g){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:E3;return(x<<5)+x+g|0},H5=function(g,x){return g*2097152+x},Hb=function(g){return g[0]*2097152+g[1]},V5=function(g,x){return[L0(g[0],x[0]),hw(g[1],x[1])]},f1=function(g,x){var T={value:0,done:!1},L=0,O=g.length,P={next:function(){return L=0&&!(g[L]===x&&(g.splice(L,1),T));L--);},TL=function(g){g.splice(0,g.length)},aN=function(g,x){for(var T=0;T"u"?"undefined":f(Set))!==fK?Set:dK,FT=function(g,x){var T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(g===void 0||x===void 0||!Ot(g)){vl("An element must have a core reference and parameters set");return}var L=x.group;if(L==null&&(x.data&&x.data.source!=null&&x.data.target!=null?L="edges":L="nodes"),L!=="nodes"&&L!=="edges"){vl("An element must be of type `nodes` or `edges`; you specified `"+L+"`");return}this.length=1,this[0]=this;var O=this._private={cy:g,single:!0,data:x.data||{},position:x.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:L,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!x.selected,selectable:x.selectable===void 0?!0:!!x.selectable,locked:!!x.locked,grabbed:!1,grabbable:x.grabbable===void 0?!0:!!x.grabbable,pannable:x.pannable===void 0?L==="edges":!!x.pannable,active:!1,classes:new Y5,animation:{current:[],queue:[]},rscratch:{},scratch:x.scratch||{},edges:[],children:[],parent:x.parent&&x.parent.isNode()?x.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(O.position.x==null&&(O.position.x=0),O.position.y==null&&(O.position.y=0),x.renderedPosition){var P=x.renderedPosition,$=g.pan(),q=g.zoom();O.position={x:(P.x-$.x)/q,y:(P.y-$.y)/q}}var S=[];ft(x.classes)?S=x.classes:mt(x.classes)&&(S=x.classes.split(/\s+/));for(var V=0,Y=S.length;VDt?1:0},V=function(kt,Dt,Pt,$t,Zt){var Yt;if(Pt==null&&(Pt=0),Zt==null&&(Zt=T),Pt<0)throw new Error("lo must be non-negative");for($t==null&&($t=kt.length);Pt<$t;)Yt=L((Pt+$t)/2),Zt(Dt,kt[Yt])<0?$t=Yt:Pt=Yt+1;return[].splice.apply(kt,[Pt,Pt-Pt].concat(Dt)),Dt},$=function(kt,Dt,Pt){return Pt==null&&(Pt=T),kt.push(Dt),dt(kt,0,kt.length-1,Pt)},P=function(kt,Dt){var Pt,$t;return Dt==null&&(Dt=T),Pt=kt.pop(),kt.length?($t=kt[0],kt[0]=Pt,Lt(kt,0,Dt)):$t=Pt,$t},S=function(kt,Dt,Pt){var $t;return Pt==null&&(Pt=T),$t=kt[0],kt[0]=Dt,Lt(kt,0,Pt),$t},q=function(kt,Dt,Pt){var $t;return Pt==null&&(Pt=T),kt.length&&Pt(kt[0],Dt)<0&&($t=[kt[0],Dt],Dt=$t[0],kt[0]=$t[1],Lt(kt,0,Pt)),Dt},O=function(kt,Dt){var Pt,$t,Zt,Yt,qt,ne;for(Dt==null&&(Dt=T),Yt=(function(){ne=[];for(var Gt=0,ge=L(kt.length/2);0<=ge?Gtge;0<=ge?Gt++:Gt--)ne.push(Gt);return ne}).apply(this).reverse(),qt=[],$t=0,Zt=Yt.length;$tbe;0<=be?++ne:--ne)ie.push(P(kt,Pt));return ie},dt=function(kt,Dt,Pt,$t){var Zt,Yt,qt;for($t==null&&($t=T),Zt=kt[Pt];Pt>Dt;){if(qt=Pt-1>>1,Yt=kt[qt],$t(Zt,Yt)<0){kt[Pt]=Yt,Pt=qt;continue}break}return kt[Pt]=Zt},Lt=function(kt,Dt,Pt){var $t,Zt,Yt,qt,ne;for(Pt==null&&(Pt=T),Zt=kt.length,ne=Dt,Yt=kt[Dt],$t=2*Dt+1;$t0;){var Yt=Dt.pop(),qt=Lt(Yt),ne=Yt.id();if(rt[ne]=qt,qt!==1/0)for(var Gt=Yt.neighborhood().intersect(ht),ge=0;ge0)for(En.unshift(Ge);Y[Yn];){var Sn=Y[Yn];En.unshift(Sn.edge),En.unshift(Sn.node),In=Sn.node,Yn=In.id()}return $.spawn(En)}}}},wK={kruskal:function(g){g=g||function(Pt){return 1};for(var x=this.byGroup(),T=x.nodes,L=x.edges,O=T.length,P=new Array(O),$=T,q=function($t){for(var Zt=0;Zt0;){if(Zt(),qt++,$t===V){for(var ne=[],Gt=O,ge=V,be=kt[ge];ne.unshift(Gt),be!=null&&ne.unshift(be),Gt=Lt[ge],Gt!=null;)ge=Gt.id(),be=kt[ge];return{found:!0,distance:Y[$t],path:this.spawn(ne),steps:qt}}ot[$t]=!0;for(var ie=Pt._private.edges,Fe=0;Febe&&(ht[ge]=be,Dt[ge]=Gt,Pt[ge]=Zt),!O){var ie=Gt*V+ne;!O&&ht[ie]>be&&(ht[ie]=be,Dt[ie]=ne,Pt[ie]=Zt)}}}for(var Fe=0;Fe1&&arguments[1]!==void 0?arguments[1]:P,Va=Pt(Si),Qs=[],qs=Va;;){if(qs==null)return x.spawn();var Tr=Dt(qs),Qt=Tr.edge,jn=Tr.pred;if(Qs.unshift(qs[0]),qs.same(Ui)&&Qs.length>0)break;Qt!=null&&Qs.unshift(Qt),qs=jn}return q.spawn(Qs)},Yt=0;Yt=0;V--){var Y=S[V],rt=Y[1],ot=Y[2];(x[rt]===$&&x[ot]===q||x[rt]===q&&x[ot]===$)&&S.splice(V,1)}for(var ht=0;htL;){var O=Math.floor(Math.random()*x.length);x=CK(O,g,x),T--}return x},_K={kargerStein:function(){var g=this,x=this.byGroup(),T=x.nodes,L=x.edges;L.unmergeBy(function(En){return En.isLoop()});var O=T.length,P=L.length,$=Math.ceil(Math.pow(Math.log(O)/Math.LN2,2)),q=Math.floor(O/TK);if(O<2){vl("At least 2 nodes are required for Karger-Stein algorithm");return}for(var S=[],V=0;V1&&arguments[1]!==void 0?arguments[1]:0,T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:g.length,L=1/0,O=x;O1&&arguments[1]!==void 0?arguments[1]:0,T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:g.length,L=-1/0,O=x;O1&&arguments[1]!==void 0?arguments[1]:0,T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:g.length,L=0,O=0,P=x;P1&&arguments[1]!==void 0?arguments[1]:0,T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:g.length,L=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,O=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,P=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;L?g=g.slice(x,T):(T0&&g.splice(0,x));for(var $=0,q=g.length-1;q>=0;q--){var S=g[q];P?isFinite(S)||(g[q]=-1/0,$++):g.splice(q,1)}O&&g.sort(function(rt,ot){return rt-ot});var V=g.length,Y=Math.floor(V/2);return V%2!==0?g[Y+1+$]:(g[Y-1+$]+g[Y+$])/2},IK=function(g){return Math.PI*g/180},BT=function(g,x){return Math.atan2(x,g)-Math.PI/2},_L=Math.log2||function(y){return Math.log(y)/Math.log(2)},uN=function(g){return g>0?1:g<0?-1:0},C3=function(g,x){return Math.sqrt(_3(g,x))},_3=function(g,x){var T=x.x-g.x,L=x.y-g.y;return T*T+L*L},OK=function(g){for(var x=g.length,T=0,L=0;L=g.x1&&g.y2>=g.y1)return{x1:g.x1,y1:g.y1,x2:g.x2,y2:g.y2,w:g.x2-g.x1,h:g.y2-g.y1};if(g.w!=null&&g.h!=null&&g.w>=0&&g.h>=0)return{x1:g.x1,y1:g.y1,x2:g.x1+g.w,y2:g.y1+g.h,w:g.w,h:g.h}}},FK=function(g){return{x1:g.x1,x2:g.x2,w:g.w,y1:g.y1,y2:g.y2,h:g.h}},NK=function(g){g.x1=1/0,g.y1=1/0,g.x2=-1/0,g.y2=-1/0,g.w=0,g.h=0},BK=function(g,x){g.x1=Math.min(g.x1,x.x1),g.x2=Math.max(g.x2,x.x2),g.w=g.x2-g.x1,g.y1=Math.min(g.y1,x.y1),g.y2=Math.max(g.y2,x.y2),g.h=g.y2-g.y1},RK=function(g,x,T){g.x1=Math.min(g.x1,x),g.x2=Math.max(g.x2,x),g.w=g.x2-g.x1,g.y1=Math.min(g.y1,T),g.y2=Math.max(g.y2,T),g.h=g.y2-g.y1},RT=function(g){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return g.x1-=x,g.x2+=x,g.y1-=x,g.y2+=x,g.w=g.x2-g.x1,g.h=g.y2-g.y1,g},SL=function(g){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],T,L,O,P;if(x.length===1)T=L=O=P=x[0];else if(x.length===2)T=O=x[0],P=L=x[1];else if(x.length===4){var $=E(x,4);T=$[0],L=$[1],O=$[2],P=$[3]}return g.x1-=P,g.x2+=L,g.y1-=T,g.y2+=O,g.w=g.x2-g.x1,g.h=g.y2-g.y1,g},lN=function(g,x){g.x1=x.x1,g.y1=x.y1,g.x2=x.x2,g.y2=x.y2,g.w=g.x2-g.x1,g.h=g.y2-g.y1},AL=function(g,x){return!(g.x1>x.x2||x.x1>g.x2||g.x2x.y2||x.y1>g.y2)},Q5=function(g,x,T){return g.x1<=x&&x<=g.x2&&g.y1<=T&&T<=g.y2},jK=function(g,x){return Q5(g,x.x,x.y)},hN=function(g,x){return Q5(g,x.x1,x.y1)&&Q5(g,x.x2,x.y2)},fN=function(g,x,T,L,O,P,$){var q=Lk(O,P),S=O/2,V=P/2,Y;{var rt=T-S+q-$,ot=L-V-$,ht=T+S-q+$,dt=ot;if(Y=ym(g,x,T,L,rt,ot,ht,dt,!1),Y.length>0)return Y}{var Lt=T+S+$,kt=L-V+q-$,Dt=Lt,Pt=L+V-q+$;if(Y=ym(g,x,T,L,Lt,kt,Dt,Pt,!1),Y.length>0)return Y}{var $t=T-S+q-$,Zt=L+V+$,Yt=T+S-q+$,qt=Zt;if(Y=ym(g,x,T,L,$t,Zt,Yt,qt,!1),Y.length>0)return Y}{var ne=T-S-$,Gt=L-V+q-$,ge=ne,be=L+V-q+$;if(Y=ym(g,x,T,L,ne,Gt,ge,be,!1),Y.length>0)return Y}var ie;{var Fe=T-S+q,we=L-V+q;if(ie=Sk(g,x,T,L,Fe,we,q+$),ie.length>0&&ie[0]<=Fe&&ie[1]<=we)return[ie[0],ie[1]]}{var bn=T+S-q,ze=L-V+q;if(ie=Sk(g,x,T,L,bn,ze,q+$),ie.length>0&&ie[0]>=bn&&ie[1]<=ze)return[ie[0],ie[1]]}{var Ge=T+S-q,En=L+V-q;if(ie=Sk(g,x,T,L,Ge,En,q+$),ie.length>0&&ie[0]>=Ge&&ie[1]>=En)return[ie[0],ie[1]]}{var In=T-S+q,Yn=L+V-q;if(ie=Sk(g,x,T,L,In,Yn,q+$),ie.length>0&&ie[0]<=In&&ie[1]>=Yn)return[ie[0],ie[1]]}return[]},$K=function(g,x,T,L,O,P,$){var q=$,S=Math.min(T,O),V=Math.max(T,O),Y=Math.min(L,P),rt=Math.max(L,P);return S-q<=g&&g<=V+q&&Y-q<=x&&x<=rt+q},zK=function(g,x,T,L,O,P,$,q,S){var V={x1:Math.min(T,$,O)-S,x2:Math.max(T,$,O)+S,y1:Math.min(L,q,P)-S,y2:Math.max(L,q,P)+S};return!(gV.x2||xV.y2)},qK=function(g,x,T,L){T-=L;var O=x*x-4*g*T;if(O<0)return[];var P=Math.sqrt(O),$=2*g,q=(-x+P)/$,S=(-x-P)/$;return[q,S]},HK=function(g,x,T,L,O){var P=1e-5;g===0&&(g=P),x/=g,T/=g,L/=g;var $,q,S,V,Y,rt,ot,ht;if(q=(3*T-x*x)/9,S=-(27*L)+x*(9*T-2*(x*x)),S/=54,$=q*q*q+S*S,O[1]=0,ot=x/3,$>0){Y=S+Math.sqrt($),Y=Y<0?-Math.pow(-Y,1/3):Math.pow(Y,1/3),rt=S-Math.sqrt($),rt=rt<0?-Math.pow(-rt,1/3):Math.pow(rt,1/3),O[0]=-ot+Y+rt,ot+=(Y+rt)/2,O[4]=O[2]=-ot,ot=Math.sqrt(3)*(-rt+Y)/2,O[3]=ot,O[5]=-ot;return}if(O[5]=O[3]=0,$===0){ht=S<0?-Math.pow(-S,1/3):Math.pow(S,1/3),O[0]=-ot+2*ht,O[4]=O[2]=-(ht+ot);return}q=-q,V=q*q*q,V=Math.acos(S/Math.sqrt(V)),ht=2*Math.sqrt(q),O[0]=-ot+ht*Math.cos(V/3),O[2]=-ot+ht*Math.cos((V+2*Math.PI)/3),O[4]=-ot+ht*Math.cos((V+4*Math.PI)/3)},VK=function(g,x,T,L,O,P,$,q){var S=1*T*T-4*T*O+2*T*$+4*O*O-4*O*$+$*$+L*L-4*L*P+2*L*q+4*P*P-4*P*q+q*q,V=1*9*T*O-3*T*T-3*T*$-6*O*O+3*O*$+9*L*P-3*L*L-3*L*q-6*P*P+3*P*q,Y=1*3*T*T-6*T*O+T*$-T*g+2*O*O+2*O*g-$*g+3*L*L-6*L*P+L*q-L*x+2*P*P+2*P*x-q*x,rt=1*T*O-T*T+T*g-O*g+L*P-L*L+L*x-P*x,ot=[];HK(S,V,Y,rt,ot);for(var ht=1e-7,dt=[],Lt=0;Lt<6;Lt+=2)Math.abs(ot[Lt+1])=0&&ot[Lt]<=1&&dt.push(ot[Lt]);dt.push(1),dt.push(0);for(var kt=-1,Dt,Pt,$t,Zt=0;Zt=0?$tS?(g-O)*(g-O)+(x-P)*(x-P):V-rt},qd=function(g,x,T){for(var L,O,P,$,q,S=0,V=0;V=g&&g>=P||L<=g&&g<=P)q=(g-L)/(P-L)*($-O)+O,q>x&&S++;else continue;return S%2!==0},dw=function(g,x,T,L,O,P,$,q,S){var V=new Array(T.length),Y;q[0]!=null?(Y=Math.atan(q[1]/q[0]),q[0]<0?Y=Y+Math.PI/2:Y=-Y-Math.PI/2):Y=q;for(var rt=Math.cos(-Y),ot=Math.sin(-Y),ht=0;ht0){var Lt=gN(V,-S);dt=dN(Lt)}else dt=V;return qd(g,x,dt)},UK=function(g,x,T,L,O,P,$){for(var q=new Array(T.length),S=P/2,V=$/2,Y=DL(P,$),rt=Y*Y,ot=0;ot=0&&Lt<=1&&Dt.push(Lt),kt>=0&&kt<=1&&Dt.push(kt),Dt.length===0)return[];var Pt=Dt[0]*q[0]+g,$t=Dt[0]*q[1]+x;if(Dt.length>1){if(Dt[0]==Dt[1])return[Pt,$t];var Zt=Dt[1]*q[0]+g,Yt=Dt[1]*q[1]+x;return[Pt,$t,Zt,Yt]}else return[Pt,$t]},LL=function(g,x,T){return x<=g&&g<=T||T<=g&&g<=x?g:g<=x&&x<=T||T<=x&&x<=g?x:T},ym=function(g,x,T,L,O,P,$,q,S){var V=g-O,Y=T-g,rt=$-O,ot=x-P,ht=L-x,dt=q-P,Lt=rt*ot-dt*V,kt=Y*ot-ht*V,Dt=dt*Y-rt*ht;if(Dt!==0){var Pt=Lt/Dt,$t=kt/Dt,Zt=.001,Yt=0-Zt,qt=1+Zt;return Yt<=Pt&&Pt<=qt&&Yt<=$t&&$t<=qt?[g+Pt*Y,x+Pt*ht]:S?[g+Pt*Y,x+Pt*ht]:[]}else return Lt===0||kt===0?LL(g,T,$)===$?[$,q]:LL(g,T,O)===O?[O,P]:LL(O,$,T)===T?[T,L]:[]:[]},Ak=function(g,x,T,L,O,P,$,q){var S=[],V,Y=new Array(T.length),rt=!0;P==null&&(rt=!1);var ot;if(rt){for(var ht=0;ht0){var dt=gN(Y,-q);ot=dN(dt)}else ot=Y}else ot=T;for(var Lt,kt,Dt,Pt,$t=0;$t2){for(var ze=[S[0],S[1]],Ge=Math.pow(ze[0]-g,2)+Math.pow(ze[1]-x,2),En=1;EnV&&(V=$t)},get:function(Pt){return S[Pt]}},rt=0;rt<$.length;rt++){var ot=$[rt],ht=ot.id();T?q[ht]=ot.outgoers().nodes():q[ht]=ot.openNeighborhood().nodes(),Y.set(ht,0)}for(var dt=function(Pt){for(var $t=$[Pt].id(),Zt=[],Yt={},qt={},ne={},Gt=new Ck(function(ur,er){return ne[ur]-ne[er]}),ge=0;ge<$.length;ge++){var be=$[ge].id();Yt[be]=[],qt[be]=0,ne[be]=1/0}for(qt[$t]=1,ne[$t]=0,Gt.push($t);!Gt.empty();){var ie=Gt.pop();if(Zt.push(ie),O)for(var Fe=0;Fe0?ze=bn.edgesTo(we)[0]:ze=we.edgesTo(bn)[0];var Ge=L(ze);we=we.id(),ne[we]>ne[ie]+Ge&&(ne[we]=ne[ie]+Ge,Gt.nodes.indexOf(we)<0?Gt.push(we):Gt.updateItem(we),qt[we]=0,Yt[we]=[]),ne[we]==ne[ie]+Ge&&(qt[we]=qt[we]+qt[ie],Yt[we].push(ie))}else for(var En=0;En0;){for(var Wn=Zt.pop(),rr=0;rr0&&$.push(T[q]);$.length!==0&&O.push(L.collection($))}return O},oX=function(g,x){for(var T=0;T5&&arguments[5]!==void 0?arguments[5]:lX,$=L,q,S,V=0;V=2?Mk(g,x,T,0,TN,hX):Mk(g,x,T,0,EN)},squaredEuclidean:function(g,x,T){return Mk(g,x,T,0,TN)},manhattan:function(g,x,T){return Mk(g,x,T,0,EN)},max:function(g,x,T){return Mk(g,x,T,-1/0,fX)}};tx["squared-euclidean"]=tx.squaredEuclidean,tx.squaredeuclidean=tx.squaredEuclidean;function $T(y,g,x,T,L,O){var P;return yt(y)?P=y:P=tx[y]||tx.euclidean,g===0&&yt(y)?P(L,O):P(g,x,T,L,O)}var dX=Rf({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),PL=function(g){return dX(g)},zT=function(g,x,T,L,O){var P=O!=="kMedoids",$=P?function(Y){return T[Y]}:function(Y){return L[Y](T)},q=function(rt){return L[rt](x)},S=T,V=x;return $T(g,L.length,$,q,S,V)},FL=function(g,x,T){for(var L=T.length,O=new Array(L),P=new Array(L),$=new Array(x),q=null,S=0;ST)return!1}return!0},bX=function(g,x,T){for(var L=0;L$&&($=x[S][V],q=V);O[q].push(g[S])}for(var Y=0;Y=O.threshold||O.mode==="dendrogram"&&g.length===1)return!1;var ht=x[P],dt=x[L[P]],Lt;O.mode==="dendrogram"?Lt={left:ht,right:dt,key:ht.key}:Lt={value:ht.value.concat(dt.value),key:ht.key},g[ht.index]=Lt,g.splice(dt.index,1),x[ht.key]=Lt;for(var kt=0;ktT[dt.key][Dt.key]&&(q=T[dt.key][Dt.key])):O.linkage==="max"?(q=T[ht.key][Dt.key],T[ht.key][Dt.key]0&&L.push(O);return L},IN=function(g,x,T){for(var L=[],O=0;O$&&(P=S,$=x[O*g+S])}P>0&&L.push(P)}for(var V=0;VS&&(q=V,S=Y)}T[O]=P[q]}return L=IN(g,x,T),L},ON=function(g){for(var x=this.cy(),T=this.nodes(),L=MX(g),O={},P=0;P=be?(ie=be,be=we,Fe=bn):we>ie&&(ie=we);for(var ze=0;ze<$;ze++)Y[ge*$+ze]=(1-L.damping)*(S[ge*$+ze]-be)+L.damping*Pt[ze];Y[ge*$+Fe]=(1-L.damping)*(S[ge*$+Fe]-ie)+L.damping*Pt[Fe]}for(var Ge=0;Ge<$;Ge++){for(var En=0,In=0;In<$;In++)Pt[In]=rt[In*$+Ge],$t[In]=Math.max(0,Y[In*$+Ge]),En+=$t[In];En-=$t[Ge],$t[Ge]=Y[Ge*$+Ge],En+=$t[Ge];for(var Yn=0;Yn<$;Yn++)rt[Yn*$+Ge]=(1-L.damping)*Math.min(0,En-$t[Yn])+L.damping*Pt[Yn];rt[Ge*$+Ge]=(1-L.damping)*(En-$t[Ge])+L.damping*Pt[Ge]}for(var Sn=0,Wn=0;Wn<$;Wn++){var rr=rt[Wn*$+Wn]+Y[Wn*$+Wn]>0?1:0;qt[Gt%L.minIterations*$+Wn]=rr,Sn+=rr}if(Sn>0&&(Gt>=L.minIterations-1||Gt==L.maxIterations-1)){for(var wr=0,ur=0;ur<$;ur++){Zt[ur]=0;for(var er=0;er1||Yt>1)&&($=!0),Y[Pt]=[],Dt.outgoers().forEach(function(ne){ne.isEdge()&&Y[Pt].push(ne.id())})}else rt[Pt]=[void 0,Dt.target().id()]}):P.forEach(function(Dt){var Pt=Dt.id();if(Dt.isNode()){var $t=Dt.degree(!0);$t%2&&(q?S?$=!0:S=Pt:q=Pt),Y[Pt]=[],Dt.connectedEdges().forEach(function(Zt){return Y[Pt].push(Zt.id())})}else rt[Pt]=[Dt.source().id(),Dt.target().id()]});var ot={found:!1,trail:void 0};if($)return ot;if(S&&q)if(O){if(V&&S!=V)return ot;V=S}else{if(V&&S!=V&&q!=V)return ot;V||(V=S)}else V||(V=P[0].id());var ht=function(Pt){for(var $t=Pt,Zt=[Pt],Yt,qt,ne;Y[$t].length;)Yt=Y[$t].shift(),qt=rt[Yt][0],ne=rt[Yt][1],$t!=ne?(Y[ne]=Y[ne].filter(function(Gt){return Gt!=Yt}),$t=ne):!O&&$t!=qt&&(Y[qt]=Y[qt].filter(function(Gt){return Gt!=Yt}),$t=qt),Zt.unshift(Yt),Zt.unshift($t);return Zt},dt=[],Lt=[];for(Lt=ht(V);Lt.length!=1;)Y[Lt[0]].length==0?(dt.unshift(P.getElementById(Lt.shift())),dt.unshift(P.getElementById(Lt.shift()))):Lt=ht(Lt.shift()).concat(Lt);dt.unshift(P.getElementById(Lt.shift()));for(var kt in Y)if(Y[kt].length)return ot;return ot.found=!0,ot.trail=this.spawn(dt,!0),ot}},HT=function(){var g=this,x={},T=0,L=0,O=[],P=[],$={},q=function(rt,ot){for(var ht=P.length-1,dt=[],Lt=g.spawn();P[ht].x!=rt||P[ht].y!=ot;)dt.push(P.pop().edge),ht--;dt.push(P.pop().edge),dt.forEach(function(kt){var Dt=kt.connectedNodes().intersection(g);Lt.merge(kt),Dt.forEach(function(Pt){var $t=Pt.id(),Zt=Pt.connectedEdges().intersection(g);Lt.merge(Pt),x[$t].cutVertex?Lt.merge(Zt.filter(function(Yt){return Yt.isLoop()})):Lt.merge(Zt)})}),O.push(Lt)},S=function Y(rt,ot,ht){rt===ht&&(L+=1),x[ot]={id:T,low:T++,cutVertex:!1};var dt=g.getElementById(ot).connectedEdges().intersection(g);if(dt.size()===0)O.push(g.spawn(g.getElementById(ot)));else{var Lt,kt,Dt,Pt;dt.forEach(function($t){Lt=$t.source().id(),kt=$t.target().id(),Dt=Lt===ot?kt:Lt,Dt!==ht&&(Pt=$t.id(),$[Pt]||($[Pt]=!0,P.push({x:ot,y:Dt,edge:$t})),Dt in x?x[ot].low=Math.min(x[ot].low,x[Dt].id):(Y(rt,Dt,ot),x[ot].low=Math.min(x[ot].low,x[Dt].low),x[ot].id<=x[Dt].low&&(x[ot].cutVertex=!0,q(ot,Dt))))})}};g.forEach(function(Y){if(Y.isNode()){var rt=Y.id();rt in x||(L=0,S(rt,rt),x[rt].cutVertex=L>1)}});var V=Object.keys(x).filter(function(Y){return x[Y].cutVertex}).map(function(Y){return g.getElementById(Y)});return{cut:g.spawn(V),components:O}},RX={hopcroftTarjanBiconnected:HT,htbc:HT,htb:HT,hopcroftTarjanBiconnectedComponents:HT},VT=function(){var g=this,x={},T=0,L=[],O=[],P=g.spawn(g),$=function q(S){O.push(S),x[S]={index:T,low:T++,explored:!1};var V=g.getElementById(S).connectedEdges().intersection(g);if(V.forEach(function(dt){var Lt=dt.target().id();Lt!==S&&(Lt in x||q(Lt),x[Lt].explored||(x[S].low=Math.min(x[S].low,x[Lt].low)))}),x[S].index===x[S].low){for(var Y=g.spawn();;){var rt=O.pop();if(Y.merge(g.getElementById(rt)),x[rt].low=x[S].index,x[rt].explored=!0,rt===S)break}var ot=Y.edgesWith(Y),ht=Y.merge(ot);L.push(ht),P=P.difference(ht)}};return g.forEach(function(q){if(q.isNode()){var S=q.id();S in x||$(S)}}),{cut:P,components:L}},jX={tarjanStronglyConnected:VT,tsc:VT,tscc:VT,tarjanStronglyConnectedComponents:VT},PN={};[Tk,bK,wK,mK,xK,EK,_K,QK,Z5,J5,OL,uX,kX,AX,FX,BX,RX,jX].forEach(function(y){de(PN,y)});/*! +`}},Symbol.toStringTag,{value:"Module"}));var ewe=function(){var i=function(be,ae,ne,se){for(ne=ne||{},se=be.length;se--;ne[be[se]]=ae);return ne},s=[1,4],u=[1,13],d=[1,12],p=[1,15],v=[1,16],b=[1,20],y=[1,19],T=[6,7,8],_=[1,26],A=[1,24],P=[1,25],R=[6,7,11],F=[1,6,13,15,16,19,22],j=[1,33],K=[1,34],ee=[1,6,7,11,13,15,16,19,22],ie={trace:function(){},yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:function(ae,ne,se,de,X,ge,W){var xe=ge.length-1;switch(X){case 6:case 7:return de;case 8:de.getLogger().trace("Stop NL ");break;case 9:de.getLogger().trace("Stop EOF ");break;case 11:de.getLogger().trace("Stop NL2 ");break;case 12:de.getLogger().trace("Stop EOF2 ");break;case 15:de.getLogger().info("Node: ",ge[xe].id),de.addNode(ge[xe-1].length,ge[xe].id,ge[xe].descr,ge[xe].type);break;case 16:de.getLogger().trace("Icon: ",ge[xe]),de.decorateNode({icon:ge[xe]});break;case 17:case 21:de.decorateNode({class:ge[xe]});break;case 18:de.getLogger().trace("SPACELIST");break;case 19:de.getLogger().trace("Node: ",ge[xe].id),de.addNode(0,ge[xe].id,ge[xe].descr,ge[xe].type);break;case 20:de.decorateNode({icon:ge[xe]});break;case 25:de.getLogger().trace("node found ..",ge[xe-2]),this.$={id:ge[xe-1],descr:ge[xe-1],type:de.getType(ge[xe-2],ge[xe])};break;case 26:this.$={id:ge[xe],descr:ge[xe],type:de.nodeType.DEFAULT};break;case 27:de.getLogger().trace("node found ..",ge[xe-3]),this.$={id:ge[xe-3],descr:ge[xe-1],type:de.getType(ge[xe-2],ge[xe])};break}},table:[{3:1,4:2,5:3,6:[1,5],8:s},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:s},{6:u,7:[1,10],9:9,12:11,13:d,14:14,15:p,16:v,17:17,18:18,19:b,22:y},i(T,[2,3]),{1:[2,2]},i(T,[2,4]),i(T,[2,5]),{1:[2,6],6:u,12:21,13:d,14:14,15:p,16:v,17:17,18:18,19:b,22:y},{6:u,9:22,12:11,13:d,14:14,15:p,16:v,17:17,18:18,19:b,22:y},{6:_,7:A,10:23,11:P},i(R,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:b,22:y}),i(R,[2,18]),i(R,[2,19]),i(R,[2,20]),i(R,[2,21]),i(R,[2,23]),i(R,[2,24]),i(R,[2,26],{19:[1,30]}),{20:[1,31]},{6:_,7:A,10:32,11:P},{1:[2,7],6:u,12:21,13:d,14:14,15:p,16:v,17:17,18:18,19:b,22:y},i(F,[2,14],{7:j,11:K}),i(ee,[2,8]),i(ee,[2,9]),i(ee,[2,10]),i(R,[2,15]),i(R,[2,16]),i(R,[2,17]),{20:[1,35]},{21:[1,36]},i(F,[2,13],{7:j,11:K}),i(ee,[2,11]),i(ee,[2,12]),{21:[1,37]},i(R,[2,25]),i(R,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:function(ae,ne){if(ne.recoverable)this.trace(ae);else{var se=new Error(ae);throw se.hash=ne,se}},parse:function(ae){var ne=this,se=[0],de=[],X=[null],ge=[],W=this.table,xe="",U=0,Fe=0,Pe=2,je=1,Ie=ge.slice.call(arguments,1),Se=Object.create(this.lexer),Ce={yy:{}};for(var ke in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ke)&&(Ce.yy[ke]=this.yy[ke]);Se.setInput(ae,Ce.yy),Ce.yy.lexer=Se,Ce.yy.parser=this,typeof Se.yylloc>"u"&&(Se.yylloc={});var Ke=Se.yylloc;ge.push(Ke);var Ft=Se.options&&Se.options.ranges;typeof Ce.yy.parseError=="function"?this.parseError=Ce.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ne(){var On;return On=de.pop()||Se.lex()||je,typeof On!="number"&&(On instanceof Array&&(de=On,On=de.pop()),On=ne.symbols_[On]||On),On}for(var gn,_t,Et,Gt,ln={},xt,Pt,Qe,Dt;;){if(_t=se[se.length-1],this.defaultActions[_t]?Et=this.defaultActions[_t]:((gn===null||typeof gn>"u")&&(gn=Ne()),Et=W[_t]&&W[_t][gn]),typeof Et>"u"||!Et.length||!Et[0]){var kt="";Dt=[];for(xt in W[_t])this.terminals_[xt]&&xt>Pe&&Dt.push("'"+this.terminals_[xt]+"'");Se.showPosition?kt="Parse error on line "+(U+1)+`: +`+Se.showPosition()+` +Expecting `+Dt.join(", ")+", got '"+(this.terminals_[gn]||gn)+"'":kt="Parse error on line "+(U+1)+": Unexpected "+(gn==je?"end of input":"'"+(this.terminals_[gn]||gn)+"'"),this.parseError(kt,{text:Se.match,token:this.terminals_[gn]||gn,line:Se.yylineno,loc:Ke,expected:Dt})}if(Et[0]instanceof Array&&Et.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_t+", token: "+gn);switch(Et[0]){case 1:se.push(gn),X.push(Se.yytext),ge.push(Se.yylloc),se.push(Et[1]),gn=null,Fe=Se.yyleng,xe=Se.yytext,U=Se.yylineno,Ke=Se.yylloc;break;case 2:if(Pt=this.productions_[Et[1]][1],ln.$=X[X.length-Pt],ln._$={first_line:ge[ge.length-(Pt||1)].first_line,last_line:ge[ge.length-1].last_line,first_column:ge[ge.length-(Pt||1)].first_column,last_column:ge[ge.length-1].last_column},Ft&&(ln._$.range=[ge[ge.length-(Pt||1)].range[0],ge[ge.length-1].range[1]]),Gt=this.performAction.apply(ln,[xe,Fe,U,Ce.yy,Et[1],X,ge].concat(Ie)),typeof Gt<"u")return Gt;Pt&&(se=se.slice(0,-1*Pt*2),X=X.slice(0,-1*Pt),ge=ge.slice(0,-1*Pt)),se.push(this.productions_[Et[1]][0]),X.push(ln.$),ge.push(ln._$),Qe=W[se[se.length-2]][se[se.length-1]],se.push(Qe);break;case 3:return!0}}return!0}},oe=function(){var be={EOF:1,parseError:function(ne,se){if(this.yy.parser)this.yy.parser.parseError(ne,se);else throw new Error(ne)},setInput:function(ae,ne){return this.yy=ne||this.yy||{},this._input=ae,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var ae=this._input[0];this.yytext+=ae,this.yyleng++,this.offset++,this.match+=ae,this.matched+=ae;var ne=ae.match(/(?:\r\n?|\n).*/g);return ne?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ae},unput:function(ae){var ne=ae.length,se=ae.split(/(?:\r\n?|\n)/g);this._input=ae+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ne),this.offset-=ne;var de=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),se.length-1&&(this.yylineno-=se.length-1);var X=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:se?(se.length===de.length?this.yylloc.first_column:0)+de[de.length-se.length].length-se[0].length:this.yylloc.first_column-ne},this.options.ranges&&(this.yylloc.range=[X[0],X[0]+this.yyleng-ne]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(ae){this.unput(this.match.slice(ae))},pastInput:function(){var ae=this.matched.substr(0,this.matched.length-this.match.length);return(ae.length>20?"...":"")+ae.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var ae=this.match;return ae.length<20&&(ae+=this._input.substr(0,20-ae.length)),(ae.substr(0,20)+(ae.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var ae=this.pastInput(),ne=new Array(ae.length+1).join("-");return ae+this.upcomingInput()+` +`+ne+"^"},test_match:function(ae,ne){var se,de,X;if(this.options.backtrack_lexer&&(X={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(X.yylloc.range=this.yylloc.range.slice(0))),de=ae[0].match(/(?:\r\n?|\n).*/g),de&&(this.yylineno+=de.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:de?de[de.length-1].length-de[de.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ae[0].length},this.yytext+=ae[0],this.match+=ae[0],this.matches=ae,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(ae[0].length),this.matched+=ae[0],se=this.performAction.call(this,this.yy,this,ne,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),se)return se;if(this._backtrack){for(var ge in X)this[ge]=X[ge];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ae,ne,se,de;this._more||(this.yytext="",this.match="");for(var X=this._currentRules(),ge=0;gene[0].length)){if(ne=se,de=ge,this.options.backtrack_lexer){if(ae=this.test_match(se,X[ge]),ae!==!1)return ae;if(this._backtrack){ne=!1;continue}else return!1}else if(!this.options.flex)break}return ne?(ae=this.test_match(ne,X[de]),ae!==!1?ae:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var ne=this.next();return ne||this.lex()},begin:function(ne){this.conditionStack.push(ne)},popState:function(){var ne=this.conditionStack.length-1;return ne>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(ne){return ne=this.conditionStack.length-1-Math.abs(ne||0),ne>=0?this.conditionStack[ne]:"INITIAL"},pushState:function(ne){this.begin(ne)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(ne,se,de,X){switch(de){case 0:return ne.getLogger().trace("Found comment",se.yytext),6;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;case 4:this.popState();break;case 5:ne.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return ne.getLogger().trace("SPACELINE"),6;case 7:return 7;case 8:return 15;case 9:ne.getLogger().trace("end icon"),this.popState();break;case 10:return ne.getLogger().trace("Exploding node"),this.begin("NODE"),19;case 11:return ne.getLogger().trace("Cloud"),this.begin("NODE"),19;case 12:return ne.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;case 13:return ne.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;case 14:return this.begin("NODE"),19;case 15:return this.begin("NODE"),19;case 16:return this.begin("NODE"),19;case 17:return this.begin("NODE"),19;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 23:this.popState();break;case 24:ne.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return ne.getLogger().trace("description:",se.yytext),"NODE_DESCR";case 26:this.popState();break;case 27:return this.popState(),ne.getLogger().trace("node end ))"),"NODE_DEND";case 28:return this.popState(),ne.getLogger().trace("node end )"),"NODE_DEND";case 29:return this.popState(),ne.getLogger().trace("node end ...",se.yytext),"NODE_DEND";case 30:return this.popState(),ne.getLogger().trace("node end (("),"NODE_DEND";case 31:return this.popState(),ne.getLogger().trace("node end (-"),"NODE_DEND";case 32:return this.popState(),ne.getLogger().trace("node end (-"),"NODE_DEND";case 33:return this.popState(),ne.getLogger().trace("node end (("),"NODE_DEND";case 34:return this.popState(),ne.getLogger().trace("node end (("),"NODE_DEND";case 35:return ne.getLogger().trace("Long description:",se.yytext),20;case 36:return ne.getLogger().trace("Long description:",se.yytext),20}},rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};return be}();ie.lexer=oe;function pe(){this.yy={}}return pe.prototype=ie,ie.Parser=pe,new pe}();ewe.parser=ewe;const son=ewe;let K3=[],lWe=0,twe={};const aon=()=>{K3=[],lWe=0,twe={}},oon=function(i){for(let s=K3.length-1;s>=0;s--)if(K3[s].levelK3.length>0?K3[0]:null,uon=(i,s,u,d)=>{var T,_;Xe.info("addNode",i,s,u,d);const p=qt();let v=((T=p.mindmap)==null?void 0:T.padding)??sh.mindmap.padding;switch(d){case v1.ROUNDED_RECT:case v1.RECT:case v1.HEXAGON:v*=2}const b={id:lWe++,nodeId:Yf(s,p),level:i,descr:Yf(u,p),type:d,children:[],width:((_=p.mindmap)==null?void 0:_.maxNodeWidth)??sh.mindmap.maxNodeWidth,padding:v},y=oon(i);if(y)y.children.push(b),K3.push(b);else if(K3.length===0)K3.push(b);else throw new Error('There can be only one root. No parent could be found for ("'+b.descr+'")')},v1={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},lon={clear:aon,addNode:uon,getMindmap:con,nodeType:v1,getType:(i,s)=>{switch(Xe.debug("In get type",i,s),i){case"[":return v1.RECT;case"(":return s===")"?v1.ROUNDED_RECT:v1.CLOUD;case"((":return v1.CIRCLE;case")":return v1.CLOUD;case"))":return v1.BANG;case"{{":return v1.HEXAGON;default:return v1.DEFAULT}},setElementForId:(i,s)=>{twe[i]=s},decorateNode:i=>{if(!i)return;const s=qt(),u=K3[K3.length-1];i.icon&&(u.icon=Yf(i.icon,s)),i.class&&(u.class=Yf(i.class,s))},type2Str:i=>{switch(i){case v1.DEFAULT:return"no-border";case v1.RECT:return"rect";case v1.ROUNDED_RECT:return"rounded-rect";case v1.CIRCLE:return"circle";case v1.CLOUD:return"cloud";case v1.BANG:return"bang";case v1.HEXAGON:return"hexgon";default:return"no-border"}},getLogger:()=>Xe,getElementById:i=>twe[i]};var hWe={exports:{}};(function(i,s){(function(u,d){i.exports=d()})(Ag,function(){function u(x){"@babel/helpers - typeof";return u=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(m){return typeof m}:function(m){return m&&typeof Symbol=="function"&&m.constructor===Symbol&&m!==Symbol.prototype?"symbol":typeof m},u(x)}function d(x,m){if(!(x instanceof m))throw new TypeError("Cannot call a class as a function")}function p(x,m){for(var k=0;kx.length)&&(m=x.length);for(var k=0,S=new Array(m);k"u"?null:window,j=F?F.navigator:null;F&&F.document;var K=u(""),ee=u({}),ie=u(function(){}),oe=typeof HTMLElement>"u"?"undefined":u(HTMLElement),pe=function(m){return m&&m.instanceString&&ae(m.instanceString)?m.instanceString():null},be=function(m){return m!=null&&u(m)==K},ae=function(m){return m!=null&&u(m)===ie},ne=function(m){return!xe(m)&&(Array.isArray?Array.isArray(m):m!=null&&m instanceof Array)},se=function(m){return m!=null&&u(m)===ee&&!ne(m)&&m.constructor===Object},de=function(m){return m!=null&&u(m)===ee},X=function(m){return m!=null&&u(m)===u(1)&&!isNaN(m)},ge=function(m){return X(m)&&Math.floor(m)===m},W=function(m){if(oe!=="undefined")return m!=null&&m instanceof HTMLElement},xe=function(m){return U(m)||Fe(m)},U=function(m){return pe(m)==="collection"&&m._private.single},Fe=function(m){return pe(m)==="collection"&&!m._private.single},Pe=function(m){return pe(m)==="core"},je=function(m){return pe(m)==="stylesheet"},Ie=function(m){return pe(m)==="event"},Se=function(m){return m==null?!0:!!(m===""||m.match(/^\s+$/))},Ce=function(m){return typeof HTMLElement>"u"?!1:m instanceof HTMLElement},ke=function(m){return se(m)&&X(m.x1)&&X(m.x2)&&X(m.y1)&&X(m.y2)},Ke=function(m){return de(m)&&ae(m.then)},Ft=function(){return j&&j.userAgent.match(/msie|trident|edge/i)},Ne=function(m,k){k||(k=function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var O=[],N=0;Nk?1:0},zr=function(m,k){return-1*ht(m,k)},yt=Object.assign!=null?Object.assign.bind(Object):function(x){for(var m=arguments,k=1;k1&&(_e-=1),_e<1/6?me+(Le-me)*6*_e:_e<1/2?Le:_e<2/3?me+(Le-me)*(2/3-_e)*6:me}var Z=new RegExp("^"+Qe+"$").exec(m);if(Z){if(S=parseInt(Z[1]),S<0?S=(360- -1*S%360)%360:S>360&&(S=S%360),S/=360,M=parseFloat(Z[2]),M<0||M>100||(M=M/100,O=parseFloat(Z[3]),O<0||O>100)||(O=O/100,N=Z[4],N!==void 0&&(N=parseFloat(N),N<0||N>1)))return;if(M===0)$=H=q=Math.round(O*255);else{var ce=O<.5?O*(1+M):O+M-O*M,ve=2*O-ce;$=Math.round(255*Y(ve,ce,S+1/3)),H=Math.round(255*Y(ve,ce,S)),q=Math.round(255*Y(ve,ce,S-1/3))}k=[$,H,q,N]}return k},Ma=function(m){var k,S=new RegExp("^"+xt+"$").exec(m);if(S){k=[];for(var M=[],O=1;O<=3;O++){var N=S[O];if(N[N.length-1]==="%"&&(M[O]=!0),N=parseFloat(N),M[O]&&(N=N/100*255),N<0||N>255)return;k.push(Math.floor(N))}var $=M[1]||M[2]||M[3],H=M[1]&&M[2]&&M[3];if($&&!H)return;var q=S[4];if(q!==void 0){if(q=parseFloat(q),q<0||q>1)return;k.push(q)}}return k},zs=function(m){return Tr[m.toLowerCase()]},ao=function(m){return(ne(m)?m:null)||zs(m)||ji(m)||Ma(m)||xi(m)},Tr={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Fn=function(m){for(var k=m.map,S=m.keys,M=S.length,O=0;O=m||Ye<0||Z&&mt>=O}function Ee(){var st=wo();if(_e(st))return Be(st);$=setTimeout(Ee,Le(st))}function Be(st){return $=void 0,ce&&S?ve(st):(S=M=void 0,N)}function Re(){$!==void 0&&clearTimeout($),q=0,S=H=M=$=void 0}function Ve(){return $===void 0?N:Be(wo())}function ct(){var st=wo(),Ye=_e(st);if(S=arguments,M=this,H=st,Ye){if($===void 0)return me(H);if(Z)return clearTimeout($),$=setTimeout(Ee,m),ve(H)}return $===void 0&&($=setTimeout(Ee,m)),N}return ct.cancel=Re,ct.flush=Ve,ct}var Nu=Bi,Ot=F?F.performance:null,W3=Ot&&Ot.now?function(){return Ot.now()}:function(){return Date.now()},Kt=function(){if(F){if(F.requestAnimationFrame)return function(x){F.requestAnimationFrame(x)};if(F.mozRequestAnimationFrame)return function(x){F.mozRequestAnimationFrame(x)};if(F.webkitRequestAnimationFrame)return function(x){F.webkitRequestAnimationFrame(x)};if(F.msRequestAnimationFrame)return function(x){F.msRequestAnimationFrame(x)}}return function(x){x&&setTimeout(function(){x(W3())},1e3/60)}}(),z0=function(m){return Kt(m)},Bp=W3,Y3=9261,$9=65599,c5=5381,Eh=function(m){for(var k=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Y3,S=k,M;M=m.next(),!M.done;)S=S*$9+M.value|0;return S},zg=function(m){var k=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Y3;return k*$9+m|0},bm=function(m){var k=arguments.length>1&&arguments[1]!==void 0?arguments[1]:c5;return(k<<5)+k+m|0},z9=function(m,k){return m*2097152+k},mm=function(m){return m[0]*2097152+m[1]},u5=function(m,k){return[zg(m[0],k[0]),bm(m[1],k[1])]},y1=function(m,k){var S={value:0,done:!1},M=0,O=m.length,N={next:function(){return M=0&&!(m[M]===k&&(m.splice(M,1),S));M--);},cS=function(m){m.splice(0,m.length)},uj=function(m,k){for(var S=0;S"u"?"undefined":u(Set))!==VJ?Set:UJ,uS=function(m,k){var S=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(m===void 0||k===void 0||!Pe(m)){ch("An element must have a core reference and parameters set");return}var M=k.group;if(M==null&&(k.data&&k.data.source!=null&&k.data.target!=null?M="edges":M="nodes"),M!=="nodes"&&M!=="edges"){ch("An element must be of type `nodes` or `edges`; you specified `"+M+"`");return}this.length=1,this[0]=this;var O=this._private={cy:m,single:!0,data:k.data||{},position:k.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:M,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!k.selected,selectable:k.selectable===void 0?!0:!!k.selectable,locked:!!k.locked,grabbed:!1,grabbable:k.grabbable===void 0?!0:!!k.grabbable,pannable:k.pannable===void 0?M==="edges":!!k.pannable,active:!1,classes:new Q7,animation:{current:[],queue:[]},rscratch:{},scratch:k.scratch||{},edges:[],children:[],parent:k.parent&&k.parent.isNode()?k.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(O.position.x==null&&(O.position.x=0),O.position.y==null&&(O.position.y=0),k.renderedPosition){var N=k.renderedPosition,$=m.pan(),H=m.zoom();O.position={x:(N.x-$.x)/H,y:(N.y-$.y)/H}}var q=[];ne(k.classes)?q=k.classes:be(k.classes)&&(q=k.classes.split(/\s+/));for(var Y=0,Z=q.length;YBe?1:0},Y=function(Ee,Be,Re,Ve,ct){var st;if(Re==null&&(Re=0),ct==null&&(ct=S),Re<0)throw new Error("lo must be non-negative");for(Ve==null&&(Ve=Ee.length);ReLt;0<=Lt?Je++:Je--)mt.push(Je);return mt}).apply(this).reverse(),Ye=[],Ve=0,ct=st.length;VeMt;0<=Mt?++mt:--mt)ut.push(N(Ee,Re));return ut},Le=function(Ee,Be,Re,Ve){var ct,st,Ye;for(Ve==null&&(Ve=S),ct=Ee[Re];Re>Be;){if(Ye=Re-1>>1,st=Ee[Ye],Ve(ct,st)<0){Ee[Re]=st,Re=Ye;continue}break}return Ee[Re]=ct},_e=function(Ee,Be,Re){var Ve,ct,st,Ye,mt;for(Re==null&&(Re=S),ct=Ee.length,mt=Be,st=Ee[Be],Ve=2*Be+1;Ve0;){var st=Be.pop(),Ye=_e(st),mt=st.id();if(ce[mt]=Ye,Ye!==1/0)for(var Je=st.neighborhood().intersect(me),Lt=0;Lt0)for(Dn.unshift(Yt);Z[vr];){var Nn=Z[vr];Dn.unshift(Nn.edge),Dn.unshift(Nn.node),ir=Nn.node,vr=ir.id()}return $.spawn(Dn)}}}},YJ={kruskal:function(m){m=m||function(Re){return 1};for(var k=this.byGroup(),S=k.nodes,M=k.edges,O=S.length,N=new Array(O),$=S,H=function(Ve){for(var ct=0;ct0;){if(ct(),Ye++,Ve===Y){for(var mt=[],Je=O,Lt=Y,Mt=Ee[Lt];mt.unshift(Je),Mt!=null&&mt.unshift(Mt),Je=_e[Lt],Je!=null;)Lt=Je.id(),Mt=Ee[Lt];return{found:!0,distance:Z[Ve],path:this.spawn(mt),steps:Ye}}ve[Ve]=!0;for(var ut=Re._private.edges,Wt=0;WtMt&&(me[Lt]=Mt,Be[Lt]=Je,Re[Lt]=ct),!O){var ut=Je*Y+mt;!O&&me[ut]>Mt&&(me[ut]=Mt,Be[ut]=mt,Re[ut]=ct)}}}for(var Wt=0;Wt1&&arguments[1]!==void 0?arguments[1]:N,yo=Re(xs),$a=[],Da=yo;;){if(Da==null)return k.spawn();var Bo=Be(Da),tr=Bo.edge,G=Bo.pred;if($a.unshift(Da[0]),Da.same(Rs)&&$a.length>0)break;tr!=null&&$a.unshift(tr),Da=G}return H.spawn($a)},st=0;st=0;Y--){var Z=q[Y],ce=Z[1],ve=Z[2];(k[ce]===$&&k[ve]===H||k[ce]===H&&k[ve]===$)&&q.splice(Y,1)}for(var me=0;meM;){var O=Math.floor(Math.random()*k.length);k=rZ(O,m,k),S--}return k},iZ={kargerStein:function(){var m=this,k=this.byGroup(),S=k.nodes,M=k.edges;M.unmergeBy(function(Dn){return Dn.isLoop()});var O=S.length,N=M.length,$=Math.ceil(Math.pow(Math.log(O)/Math.LN2,2)),H=Math.floor(O/nZ);if(O<2){ch("At least 2 nodes are required for Karger-Stein algorithm");return}for(var q=[],Y=0;Y1&&arguments[1]!==void 0?arguments[1]:0,S=arguments.length>2&&arguments[2]!==void 0?arguments[2]:m.length,M=1/0,O=k;O1&&arguments[1]!==void 0?arguments[1]:0,S=arguments.length>2&&arguments[2]!==void 0?arguments[2]:m.length,M=-1/0,O=k;O1&&arguments[1]!==void 0?arguments[1]:0,S=arguments.length>2&&arguments[2]!==void 0?arguments[2]:m.length,M=0,O=0,N=k;N1&&arguments[1]!==void 0?arguments[1]:0,S=arguments.length>2&&arguments[2]!==void 0?arguments[2]:m.length,M=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,O=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,N=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;M?m=m.slice(k,S):(S0&&m.splice(0,k));for(var $=0,H=m.length-1;H>=0;H--){var q=m[H];N?isFinite(q)||(m[H]=-1/0,$++):m.splice(H,1)}O&&m.sort(function(ce,ve){return ce-ve});var Y=m.length,Z=Math.floor(Y/2);return Y%2!==0?m[Z+1+$]:(m[Z-1+$]+m[Z+$])/2},lZ=function(m){return Math.PI*m/180},hS=function(m,k){return Math.atan2(k,m)-Math.PI/2},iI=Math.log2||function(x){return Math.log(x)/Math.log(2)},fj=function(m){return m>0?1:m<0?-1:0},h5=function(m,k){return Math.sqrt(f5(m,k))},f5=function(m,k){var S=k.x-m.x,M=k.y-m.y;return S*S+M*M},hZ=function(m){for(var k=m.length,S=0,M=0;M=m.x1&&m.y2>=m.y1)return{x1:m.x1,y1:m.y1,x2:m.x2,y2:m.y2,w:m.x2-m.x1,h:m.y2-m.y1};if(m.w!=null&&m.h!=null&&m.w>=0&&m.h>=0)return{x1:m.x1,y1:m.y1,x2:m.x1+m.w,y2:m.y1+m.h,w:m.w,h:m.h}}},dZ=function(m){return{x1:m.x1,x2:m.x2,w:m.w,y1:m.y1,y2:m.y2,h:m.h}},gZ=function(m){m.x1=1/0,m.y1=1/0,m.x2=-1/0,m.y2=-1/0,m.w=0,m.h=0},pZ=function(m,k,S){return{x1:m.x1+k,x2:m.x2+k,y1:m.y1+S,y2:m.y2+S,w:m.w,h:m.h}},dj=function(m,k){m.x1=Math.min(m.x1,k.x1),m.x2=Math.max(m.x2,k.x2),m.w=m.x2-m.x1,m.y1=Math.min(m.y1,k.y1),m.y2=Math.max(m.y2,k.y2),m.h=m.y2-m.y1},bZ=function(m,k,S){m.x1=Math.min(m.x1,k),m.x2=Math.max(m.x2,k),m.w=m.x2-m.x1,m.y1=Math.min(m.y1,S),m.y2=Math.max(m.y2,S),m.h=m.y2-m.y1},fS=function(m){var k=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return m.x1-=k,m.x2+=k,m.y1-=k,m.y2+=k,m.w=m.x2-m.x1,m.h=m.y2-m.y1,m},dS=function(m){var k=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],S,M,O,N;if(k.length===1)S=M=O=N=k[0];else if(k.length===2)S=O=k[0],N=M=k[1];else if(k.length===4){var $=y(k,4);S=$[0],M=$[1],O=$[2],N=$[3]}return m.x1-=N,m.x2+=M,m.y1-=S,m.y2+=O,m.w=m.x2-m.x1,m.h=m.y2-m.y1,m},gj=function(m,k){m.x1=k.x1,m.y1=k.y1,m.x2=k.x2,m.y2=k.y2,m.w=m.x2-m.x1,m.h=m.y2-m.y1},sI=function(m,k){return!(m.x1>k.x2||k.x1>m.x2||m.x2k.y2||k.y1>m.y2)},e8=function(m,k,S){return m.x1<=k&&k<=m.x2&&m.y1<=S&&S<=m.y2},mZ=function(m,k){return e8(m,k.x,k.y)},pj=function(m,k){return e8(m,k.x1,k.y1)&&e8(m,k.x2,k.y2)},bj=function(m,k,S,M,O,N,$){var H=W9(O,N),q=O/2,Y=N/2,Z;{var ce=S-q+H-$,ve=M-Y-$,me=S+q-H+$,Le=ve;if(Z=Z3(m,k,S,M,ce,ve,me,Le,!1),Z.length>0)return Z}{var _e=S+q+$,Ee=M-Y+H-$,Be=_e,Re=M+Y-H+$;if(Z=Z3(m,k,S,M,_e,Ee,Be,Re,!1),Z.length>0)return Z}{var Ve=S-q+H-$,ct=M+Y+$,st=S+q-H+$,Ye=ct;if(Z=Z3(m,k,S,M,Ve,ct,st,Ye,!1),Z.length>0)return Z}{var mt=S-q-$,Je=M-Y+H-$,Lt=mt,Mt=M+Y-H+$;if(Z=Z3(m,k,S,M,mt,Je,Lt,Mt,!1),Z.length>0)return Z}var ut;{var Wt=S-q+H,Tt=M-Y+H;if(ut=G9(m,k,S,M,Wt,Tt,H+$),ut.length>0&&ut[0]<=Wt&&ut[1]<=Tt)return[ut[0],ut[1]]}{var _n=S+q-H,hn=M-Y+H;if(ut=G9(m,k,S,M,_n,hn,H+$),ut.length>0&&ut[0]>=_n&&ut[1]<=hn)return[ut[0],ut[1]]}{var Yt=S+q-H,Dn=M+Y-H;if(ut=G9(m,k,S,M,Yt,Dn,H+$),ut.length>0&&ut[0]>=Yt&&ut[1]>=Dn)return[ut[0],ut[1]]}{var ir=S-q+H,vr=M+Y-H;if(ut=G9(m,k,S,M,ir,vr,H+$),ut.length>0&&ut[0]<=ir&&ut[1]>=vr)return[ut[0],ut[1]]}return[]},vZ=function(m,k,S,M,O,N,$){var H=$,q=Math.min(S,O),Y=Math.max(S,O),Z=Math.min(M,N),ce=Math.max(M,N);return q-H<=m&&m<=Y+H&&Z-H<=k&&k<=ce+H},wZ=function(m,k,S,M,O,N,$,H,q){var Y={x1:Math.min(S,$,O)-q,x2:Math.max(S,$,O)+q,y1:Math.min(M,H,N)-q,y2:Math.max(M,H,N)+q};return!(mY.x2||kY.y2)},yZ=function(m,k,S,M){S-=M;var O=k*k-4*m*S;if(O<0)return[];var N=Math.sqrt(O),$=2*m,H=(-k+N)/$,q=(-k-N)/$;return[H,q]},xZ=function(m,k,S,M,O){var N=1e-5;m===0&&(m=N),k/=m,S/=m,M/=m;var $,H,q,Y,Z,ce,ve,me;if(H=(3*S-k*k)/9,q=-(27*M)+k*(9*S-2*(k*k)),q/=54,$=H*H*H+q*q,O[1]=0,ve=k/3,$>0){Z=q+Math.sqrt($),Z=Z<0?-Math.pow(-Z,1/3):Math.pow(Z,1/3),ce=q-Math.sqrt($),ce=ce<0?-Math.pow(-ce,1/3):Math.pow(ce,1/3),O[0]=-ve+Z+ce,ve+=(Z+ce)/2,O[4]=O[2]=-ve,ve=Math.sqrt(3)*(-ce+Z)/2,O[3]=ve,O[5]=-ve;return}if(O[5]=O[3]=0,$===0){me=q<0?-Math.pow(-q,1/3):Math.pow(q,1/3),O[0]=-ve+2*me,O[4]=O[2]=-(me+ve);return}H=-H,Y=H*H*H,Y=Math.acos(q/Math.sqrt(Y)),me=2*Math.sqrt(H),O[0]=-ve+me*Math.cos(Y/3),O[2]=-ve+me*Math.cos((Y+2*Math.PI)/3),O[4]=-ve+me*Math.cos((Y+4*Math.PI)/3)},kZ=function(m,k,S,M,O,N,$,H){var q=1*S*S-4*S*O+2*S*$+4*O*O-4*O*$+$*$+M*M-4*M*N+2*M*H+4*N*N-4*N*H+H*H,Y=1*9*S*O-3*S*S-3*S*$-6*O*O+3*O*$+9*M*N-3*M*M-3*M*H-6*N*N+3*N*H,Z=1*3*S*S-6*S*O+S*$-S*m+2*O*O+2*O*m-$*m+3*M*M-6*M*N+M*H-M*k+2*N*N+2*N*k-H*k,ce=1*S*O-S*S+S*m-O*m+M*N-M*M+M*k-N*k,ve=[];xZ(q,Y,Z,ce,ve);for(var me=1e-7,Le=[],_e=0;_e<6;_e+=2)Math.abs(ve[_e+1])=0&&ve[_e]<=1&&Le.push(ve[_e]);Le.push(1),Le.push(0);for(var Ee=-1,Be,Re,Ve,ct=0;ct=0?Veq?(m-O)*(m-O)+(k-N)*(k-N):Y-ce},Yd=function(m,k,S){for(var M,O,N,$,H,q=0,Y=0;Y=m&&m>=N||M<=m&&m<=N)H=(m-M)/(N-M)*($-O)+O,H>k&&q++;else continue;return q%2!==0},Uv=function(m,k,S,M,O,N,$,H,q){var Y=new Array(S.length),Z;H[0]!=null?(Z=Math.atan(H[1]/H[0]),H[0]<0?Z=Z+Math.PI/2:Z=-Z-Math.PI/2):Z=H;for(var ce=Math.cos(-Z),ve=Math.sin(-Z),me=0;me0){var _e=pS(Y,-q);Le=gS(_e)}else Le=Y;return Yd(m,k,Le)},TZ=function(m,k,S,M,O,N,$){for(var H=new Array(S.length),q=N/2,Y=$/2,Z=cI(N,$),ce=Z*Z,ve=0;ve=0&&_e<=1&&Be.push(_e),Ee>=0&&Ee<=1&&Be.push(Ee),Be.length===0)return[];var Re=Be[0]*H[0]+m,Ve=Be[0]*H[1]+k;if(Be.length>1){if(Be[0]==Be[1])return[Re,Ve];var ct=Be[1]*H[0]+m,st=Be[1]*H[1]+k;return[Re,Ve,ct,st]}else return[Re,Ve]},aI=function(m,k,S){return k<=m&&m<=S||S<=m&&m<=k?m:m<=k&&k<=S||S<=k&&k<=m?k:S},Z3=function(m,k,S,M,O,N,$,H,q){var Y=m-O,Z=S-m,ce=$-O,ve=k-N,me=M-k,Le=H-N,_e=ce*ve-Le*Y,Ee=Z*ve-me*Y,Be=Le*Z-ce*me;if(Be!==0){var Re=_e/Be,Ve=Ee/Be,ct=.001,st=0-ct,Ye=1+ct;return st<=Re&&Re<=Ye&&st<=Ve&&Ve<=Ye?[m+Re*Z,k+Re*me]:q?[m+Re*Z,k+Re*me]:[]}else return _e===0||Ee===0?aI(m,S,$)===$?[$,H]:aI(m,S,O)===O?[O,N]:aI(O,$,S)===S?[S,M]:[]:[]},K9=function(m,k,S,M,O,N,$,H){var q=[],Y,Z=new Array(S.length),ce=!0;N==null&&(ce=!1);var ve;if(ce){for(var me=0;me0){var Le=pS(Z,-H);ve=gS(Le)}else ve=Z}else ve=S;for(var _e,Ee,Be,Re,Ve=0;Ve2){for(var hn=[q[0],q[1]],Yt=Math.pow(hn[0]-m,2)+Math.pow(hn[1]-k,2),Dn=1;DnY&&(Y=Ve)},get:function(Re){return q[Re]}},ce=0;ce<$.length;ce++){var ve=$[ce],me=ve.id();S?H[me]=ve.outgoers().nodes():H[me]=ve.openNeighborhood().nodes(),Z.set(me,0)}for(var Le=function(Re){for(var Ve=$[Re].id(),ct=[],st={},Ye={},mt={},Je=new V9(function(Cr,Or){return mt[Cr]-mt[Or]}),Lt=0;Lt<$.length;Lt++){var Mt=$[Lt].id();st[Mt]=[],Ye[Mt]=0,mt[Mt]=1/0}for(Ye[Ve]=1,mt[Ve]=0,Je.push(Ve);!Je.empty();){var ut=Je.pop();if(ct.push(ut),O)for(var Wt=0;Wt0?hn=_n.edgesTo(Tt)[0]:hn=Tt.edgesTo(_n)[0];var Yt=M(hn);Tt=Tt.id(),mt[Tt]>mt[ut]+Yt&&(mt[Tt]=mt[ut]+Yt,Je.nodes.indexOf(Tt)<0?Je.push(Tt):Je.updateItem(Tt),Ye[Tt]=0,st[Tt]=[]),mt[Tt]==mt[ut]+Yt&&(Ye[Tt]=Ye[Tt]+Ye[ut],st[Tt].push(ut))}else for(var Dn=0;Dn0;){for(var pr=ct.pop(),Er=0;Er0&&$.push(S[H]);$.length!==0&&O.push(M.collection($))}return O},jZ=function(m,k){for(var S=0;S5&&arguments[5]!==void 0?arguments[5]:qZ,$=M,H,q,Y=0;Y=2?Y9(m,k,S,0,Sj,HZ):Y9(m,k,S,0,Cj)},squaredEuclidean:function(m,k,S){return Y9(m,k,S,0,Sj)},manhattan:function(m,k,S){return Y9(m,k,S,0,Cj)},max:function(m,k,S){return Y9(m,k,S,-1/0,VZ)}};r8["squared-euclidean"]=r8.squaredEuclidean,r8.squaredeuclidean=r8.squaredEuclidean;function mS(x,m,k,S,M,O){var N;return ae(x)?N=x:N=r8[x]||r8.euclidean,m===0&&ae(x)?N(M,O):N(m,k,S,M,O)}var UZ=q0({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),hI=function(m){return UZ(m)},vS=function(m,k,S,M,O){var N=O!=="kMedoids",$=N?function(Z){return S[Z]}:function(Z){return M[Z](S)},H=function(ce){return M[ce](k)},q=S,Y=k;return mS(m,M.length,$,H,q,Y)},fI=function(m,k,S){for(var M=S.length,O=new Array(M),N=new Array(M),$=new Array(k),H=null,q=0;qS)return!1}return!0},WZ=function(m,k,S){for(var M=0;M$&&($=k[q][Y],H=Y);O[H].push(m[q])}for(var Z=0;Z=O.threshold||O.mode==="dendrogram"&&m.length===1)return!1;var me=k[N],Le=k[M[N]],_e;O.mode==="dendrogram"?_e={left:me,right:Le,key:me.key}:_e={value:me.value.concat(Le.value),key:me.key},m[me.index]=_e,m.splice(Le.index,1),k[me.key]=_e;for(var Ee=0;EeS[Le.key][Be.key]&&(H=S[Le.key][Be.key])):O.linkage==="max"?(H=S[me.key][Be.key],S[me.key][Be.key]0&&M.push(O);return M},Nj=function(m,k,S){for(var M=[],O=0;O$&&(N=q,$=k[O*m+q])}N>0&&M.push(N)}for(var Y=0;Yq&&(H=Y,q=Z)}S[O]=N[H]}return M=Nj(m,k,S),M},Pj=function(m){for(var k=this.cy(),S=this.nodes(),M=cee(m),O={},N=0;N=Mt?(ut=Mt,Mt=Tt,Wt=_n):Tt>ut&&(ut=Tt);for(var hn=0;hn<$;hn++)Z[Lt*$+hn]=(1-M.damping)*(q[Lt*$+hn]-Mt)+M.damping*Re[hn];Z[Lt*$+Wt]=(1-M.damping)*(q[Lt*$+Wt]-ut)+M.damping*Re[Wt]}for(var Yt=0;Yt<$;Yt++){for(var Dn=0,ir=0;ir<$;ir++)Re[ir]=ce[ir*$+Yt],Ve[ir]=Math.max(0,Z[ir*$+Yt]),Dn+=Ve[ir];Dn-=Ve[Yt],Ve[Yt]=Z[Yt*$+Yt],Dn+=Ve[Yt];for(var vr=0;vr<$;vr++)ce[vr*$+Yt]=(1-M.damping)*Math.min(0,Dn-Ve[vr])+M.damping*Re[vr];ce[Yt*$+Yt]=(1-M.damping)*(Dn-Ve[Yt])+M.damping*Re[Yt]}for(var Nn=0,pr=0;pr<$;pr++){var Er=ce[pr*$+pr]+Z[pr*$+pr]>0?1:0;Ye[Je%M.minIterations*$+pr]=Er,Nn+=Er}if(Nn>0&&(Je>=M.minIterations-1||Je==M.maxIterations-1)){for(var Mr=0,Cr=0;Cr<$;Cr++){ct[Cr]=0;for(var Or=0;Or1||st>1)&&($=!0),Z[Re]=[],Be.outgoers().forEach(function(mt){mt.isEdge()&&Z[Re].push(mt.id())})}else ce[Re]=[void 0,Be.target().id()]}):N.forEach(function(Be){var Re=Be.id();if(Be.isNode()){var Ve=Be.degree(!0);Ve%2&&(H?q?$=!0:q=Re:H=Re),Z[Re]=[],Be.connectedEdges().forEach(function(ct){return Z[Re].push(ct.id())})}else ce[Re]=[Be.source().id(),Be.target().id()]});var ve={found:!1,trail:void 0};if($)return ve;if(q&&H)if(O){if(Y&&q!=Y)return ve;Y=q}else{if(Y&&q!=Y&&H!=Y)return ve;Y||(Y=q)}else Y||(Y=N[0].id());var me=function(Re){for(var Ve=Re,ct=[Re],st,Ye,mt;Z[Ve].length;)st=Z[Ve].shift(),Ye=ce[st][0],mt=ce[st][1],Ve!=mt?(Z[mt]=Z[mt].filter(function(Je){return Je!=st}),Ve=mt):!O&&Ve!=Ye&&(Z[Ye]=Z[Ye].filter(function(Je){return Je!=st}),Ve=Ye),ct.unshift(st),ct.unshift(Ve);return ct},Le=[],_e=[];for(_e=me(Y);_e.length!=1;)Z[_e[0]].length==0?(Le.unshift(N.getElementById(_e.shift())),Le.unshift(N.getElementById(_e.shift()))):_e=me(_e.shift()).concat(_e);Le.unshift(N.getElementById(_e.shift()));for(var Ee in Z)if(Z[Ee].length)return ve;return ve.found=!0,ve.trail=this.spawn(Le,!0),ve}},yS=function(){var m=this,k={},S=0,M=0,O=[],N=[],$={},H=function(ce,ve){for(var me=N.length-1,Le=[],_e=m.spawn();N[me].x!=ce||N[me].y!=ve;)Le.push(N.pop().edge),me--;Le.push(N.pop().edge),Le.forEach(function(Ee){var Be=Ee.connectedNodes().intersection(m);_e.merge(Ee),Be.forEach(function(Re){var Ve=Re.id(),ct=Re.connectedEdges().intersection(m);_e.merge(Re),k[Ve].cutVertex?_e.merge(ct.filter(function(st){return st.isLoop()})):_e.merge(ct)})}),O.push(_e)},q=function Z(ce,ve,me){ce===me&&(M+=1),k[ve]={id:S,low:S++,cutVertex:!1};var Le=m.getElementById(ve).connectedEdges().intersection(m);if(Le.size()===0)O.push(m.spawn(m.getElementById(ve)));else{var _e,Ee,Be,Re;Le.forEach(function(Ve){_e=Ve.source().id(),Ee=Ve.target().id(),Be=_e===ve?Ee:_e,Be!==me&&(Re=Ve.id(),$[Re]||($[Re]=!0,N.push({x:ve,y:Be,edge:Ve})),Be in k?k[ve].low=Math.min(k[ve].low,k[Be].id):(Z(ce,Be,ve),k[ve].low=Math.min(k[ve].low,k[Be].low),k[ve].id<=k[Be].low&&(k[ve].cutVertex=!0,H(ve,Be))))})}};m.forEach(function(Z){if(Z.isNode()){var ce=Z.id();ce in k||(M=0,q(ce,ce),k[ce].cutVertex=M>1)}});var Y=Object.keys(k).filter(function(Z){return k[Z].cutVertex}).map(function(Z){return m.getElementById(Z)});return{cut:m.spawn(Y),components:O}},bee={hopcroftTarjanBiconnected:yS,htbc:yS,htb:yS,hopcroftTarjanBiconnectedComponents:yS},xS=function(){var m=this,k={},S=0,M=[],O=[],N=m.spawn(m),$=function H(q){O.push(q),k[q]={index:S,low:S++,explored:!1};var Y=m.getElementById(q).connectedEdges().intersection(m);if(Y.forEach(function(Le){var _e=Le.target().id();_e!==q&&(_e in k||H(_e),k[_e].explored||(k[q].low=Math.min(k[q].low,k[_e].low)))}),k[q].index===k[q].low){for(var Z=m.spawn();;){var ce=O.pop();if(Z.merge(m.getElementById(ce)),k[ce].low=k[q].index,k[ce].explored=!0,ce===q)break}var ve=Z.edgesWith(Z),me=Z.merge(ve);M.push(me),N=N.difference(me)}};return m.forEach(function(H){if(H.isNode()){var q=H.id();q in k||$(q)}}),{cut:N,components:M}},mee={tarjanStronglyConnected:xS,tsc:xS,tscc:xS,tarjanStronglyConnectedComponents:xS},Bj={};[H9,WJ,YJ,QJ,ZJ,tZ,iZ,LZ,t8,n8,lI,zZ,eee,aee,dee,pee,bee,mee].forEach(function(x){yt(Bj,x)});/*! Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) Licensed under The MIT License (http://opensource.org/licenses/MIT) -*/var FN=0,NN=1,BN=2,gw=function y(g){if(!(this instanceof y))return new y(g);this.id="Thenable/1.0.7",this.state=FN,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},typeof g=="function"&&g.call(this,this.fulfill.bind(this),this.reject.bind(this))};gw.prototype={fulfill:function(g){return RN(this,NN,"fulfillValue",g)},reject:function(g){return RN(this,BN,"rejectReason",g)},then:function(g,x){var T=this,L=new gw;return T.onFulfilled.push(zN(g,L,"fulfill")),T.onRejected.push(zN(x,L,"reject")),jN(T),L.proxy}};var RN=function(g,x,T,L){return g.state===FN&&(g.state=x,g[T]=L,jN(g)),g},jN=function(g){g.state===NN?$N(g,"onFulfilled",g.fulfillValue):g.state===BN&&$N(g,"onRejected",g.rejectReason)},$N=function(g,x,T){if(g[x].length!==0){var L=g[x];g[x]=[];var O=function(){for(var $=0;$0}},clearQueue:function(){return function(){var x=this,T=x.length!==void 0,L=T?x:[x],O=this._private.cy||this;if(!O.styleEnabled())return this;for(var P=0;P-1}var $Q=jQ;function zQ(y,g){var x=this.__data__,T=WT(x,y);return T<0?(++this.size,x.push([y,g])):x[T][1]=g,this}var qQ=zQ;function rx(y){var g=-1,x=y==null?0:y.length;for(this.clear();++g-1&&y%1==0&&y0&&this.spawn(L).updateStyle().emit("class"),x},addClass:function(g){return this.toggleClass(g,!0)},hasClass:function(g){var x=this[0];return x!=null&&x._private.classes.has(g)},toggleClass:function(g,x){ft(g)||(g=g.match(/\S+/g)||[]);for(var T=this,L=x===void 0,O=[],P=0,$=T.length;P<$;P++)for(var q=T[P],S=q._private.classes,V=!1,Y=0;Y0&&this.spawn(O).updateStyle().emit("class"),T},removeClass:function(g){return this.toggleClass(g,!1)},flashClass:function(g,x){var T=this;if(x==null)x=250;else if(x===0)return T;return T.addClass(g),setTimeout(function(){T.removeClass(g)},x),T}};QT.className=QT.classNames=QT.classes;var tc={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:`"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`,number:Ye,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};tc.variable="(?:[\\w-.]|(?:\\\\"+tc.metaChar+"))+",tc.className="(?:[\\w-]|(?:\\\\"+tc.metaChar+"))+",tc.value=tc.string+"|"+tc.number,tc.id=tc.variable,function(){var y,g,x;for(y=tc.comparatorOp.split("|"),x=0;x=0)&&g!=="="&&(tc.comparatorOp+="|\\!"+g)}();var Kc=function(){return{checks:[]}},zi={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},zL=[{selector:":selected",matches:function(g){return g.selected()}},{selector:":unselected",matches:function(g){return!g.selected()}},{selector:":selectable",matches:function(g){return g.selectable()}},{selector:":unselectable",matches:function(g){return!g.selectable()}},{selector:":locked",matches:function(g){return g.locked()}},{selector:":unlocked",matches:function(g){return!g.locked()}},{selector:":visible",matches:function(g){return g.visible()}},{selector:":hidden",matches:function(g){return!g.visible()}},{selector:":transparent",matches:function(g){return g.transparent()}},{selector:":grabbed",matches:function(g){return g.grabbed()}},{selector:":free",matches:function(g){return!g.grabbed()}},{selector:":removed",matches:function(g){return g.removed()}},{selector:":inside",matches:function(g){return!g.removed()}},{selector:":grabbable",matches:function(g){return g.grabbable()}},{selector:":ungrabbable",matches:function(g){return!g.grabbable()}},{selector:":animated",matches:function(g){return g.animated()}},{selector:":unanimated",matches:function(g){return!g.animated()}},{selector:":parent",matches:function(g){return g.isParent()}},{selector:":childless",matches:function(g){return g.isChildless()}},{selector:":child",matches:function(g){return g.isChild()}},{selector:":orphan",matches:function(g){return g.isOrphan()}},{selector:":nonorphan",matches:function(g){return g.isChild()}},{selector:":compound",matches:function(g){return g.isNode()?g.isParent():g.source().isParent()||g.target().isParent()}},{selector:":loop",matches:function(g){return g.isLoop()}},{selector:":simple",matches:function(g){return g.isSimple()}},{selector:":active",matches:function(g){return g.active()}},{selector:":inactive",matches:function(g){return!g.active()}},{selector:":backgrounding",matches:function(g){return g.backgrounding()}},{selector:":nonbackgrounding",matches:function(g){return!g.backgrounding()}}].sort(function(y,g){return Me(y.selector,g.selector)}),qZ=function(){for(var y={},g,x=0;x0&&V.edgeCount>0)return Sc("The selector `"+g+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(V.edgeCount>1)return Sc("The selector `"+g+"` is invalid because it uses multiple edge selectors"),!1;V.edgeCount===1&&Sc("The selector `"+g+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},YZ=function(){if(this.toStringCache!=null)return this.toStringCache;for(var g=function(V){return V??""},x=function(V){return mt(V)?'"'+V+'"':g(V)},T=function(V){return" "+V+" "},L=function(V,Y){var rt=V.type,ot=V.value;switch(rt){case zi.GROUP:{var ht=g(ot);return ht.substring(0,ht.length-1)}case zi.DATA_COMPARE:{var dt=V.field,Lt=V.operator;return"["+dt+T(g(Lt))+x(ot)+"]"}case zi.DATA_BOOL:{var kt=V.operator,Dt=V.field;return"["+g(kt)+Dt+"]"}case zi.DATA_EXIST:{var Pt=V.field;return"["+Pt+"]"}case zi.META_COMPARE:{var $t=V.operator,Zt=V.field;return"[["+Zt+T(g($t))+x(ot)+"]]"}case zi.STATE:return ot;case zi.ID:return"#"+ot;case zi.CLASS:return"."+ot;case zi.PARENT:case zi.CHILD:return O(V.parent,Y)+T(">")+O(V.child,Y);case zi.ANCESTOR:case zi.DESCENDANT:return O(V.ancestor,Y)+" "+O(V.descendant,Y);case zi.COMPOUND_SPLIT:{var Yt=O(V.left,Y),qt=O(V.subject,Y),ne=O(V.right,Y);return Yt+(Yt.length>0?" ":"")+qt+ne}case zi.TRUE:return""}},O=function(V,Y){return V.checks.reduce(function(rt,ot,ht){return rt+(Y===V&&ht===0?"$":"")+L(ot,Y)},"")},P="",$=0;$1&&$=0&&(x=x.replace("!",""),Y=!0),x.indexOf("@")>=0&&(x=x.replace("@",""),V=!0),(O||$||V)&&(q=!O&&!P?"":""+g,S=""+T),V&&(g=q=q.toLowerCase(),T=S=S.toLowerCase()),x){case"*=":L=q.indexOf(S)>=0;break;case"$=":L=q.indexOf(S,q.length-S.length)>=0;break;case"^=":L=q.indexOf(S)===0;break;case"=":L=g===T;break;case">":rt=!0,L=g>T;break;case">=":rt=!0,L=g>=T;break;case"<":rt=!0,L=g0;){var V=L.shift();g(V),O.add(V.id()),$&&T(L,O,V)}return y}function Ik(y,g,x){if(x.isParent())for(var T=x._private.children,L=0;L1&&arguments[1]!==void 0?arguments[1]:!0;return ZT(this,y,g,Ik)};function aB(y,g,x){if(x.isChild()){var T=x._private.parent;g.has(T.id())||y.push(T)}}ax.forEachUp=function(y){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return ZT(this,y,g,aB)};function nJ(y,g,x){aB(y,g,x),Ik(y,g,x)}ax.forEachUpAndDown=function(y){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return ZT(this,y,g,nJ)},ax.ancestors=ax.parents;var Ok,oB;Ok=oB={data:Ac.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:Ac.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:Ac.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:Ac.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:Ac.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:Ac.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var g=this[0];if(g)return g._private.data.id}},Ok.attr=Ok.data,Ok.removeAttr=Ok.removeData;var rJ=oB,JT={};function ox(y){return function(g){var x=this;if(g===void 0&&(g=!0),x.length!==0)if(x.isNode()&&!x.removed()){for(var T=0,L=x[0],O=L._private.edges,P=0;Pg}),minIndegree:cx("indegree",function(y,g){return yg}),minOutdegree:cx("outdegree",function(y,g){return yg})}),de(JT,{totalDegree:function(g){for(var x=0,T=this.nodes(),L=0;L0,rt=Y;Y&&(V=V[0]);var ot=rt?V.position():{x:0,y:0};x!==void 0?S.position(g,x+ot[g]):O!==void 0&&S.position({x:O.x+ot.x,y:O.y+ot.y})}else{var ht=T.position(),dt=$?T.parent():null,Lt=dt&&dt.length>0,kt=Lt;Lt&&(dt=dt[0]);var Dt=kt?dt.position():{x:0,y:0};return O={x:ht.x-Dt.x,y:ht.y-Dt.y},g===void 0?O:O[g]}else if(!P)return;return this}},kp.modelPosition=kp.point=kp.position,kp.modelPositions=kp.points=kp.positions,kp.renderedPoint=kp.renderedPosition,kp.relativePoint=kp.relativePosition;var lB=cB,ux,Ub;ux=Ub={},Ub.renderedBoundingBox=function(y){var g=this.boundingBox(y),x=this.cy(),T=x.zoom(),L=x.pan(),O=g.x1*T+L.x,P=g.x2*T+L.x,$=g.y1*T+L.y,q=g.y2*T+L.y;return{x1:O,x2:P,y1:$,y2:q,w:P-O,h:q-$}},Ub.dirtyCompoundBoundsCache=function(){var y=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,g=this.cy();return!g.styleEnabled()||!g.hasCompoundNodes()?this:(this.forEachUp(function(x){if(x.isParent()){var T=x._private;T.compoundBoundsClean=!1,T.bbCache=null,y||x.emitAndNotify("bounds")}}),this)},Ub.updateCompoundBounds=function(){var y=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,g=this.cy();if(!g.styleEnabled()||!g.hasCompoundNodes())return this;if(!y&&g.batching())return this;function x(P){if(!P.isParent())return;var $=P._private,q=P.children(),S=P.pstyle("compound-sizing-wrt-labels").value==="include",V={width:{val:P.pstyle("min-width").pfValue,left:P.pstyle("min-width-bias-left"),right:P.pstyle("min-width-bias-right")},height:{val:P.pstyle("min-height").pfValue,top:P.pstyle("min-height-bias-top"),bottom:P.pstyle("min-height-bias-bottom")}},Y=q.boundingBox({includeLabels:S,includeOverlays:!1,useCache:!1}),rt=$.position;(Y.w===0||Y.h===0)&&(Y={w:P.pstyle("width").pfValue,h:P.pstyle("height").pfValue},Y.x1=rt.x-Y.w/2,Y.x2=rt.x+Y.w/2,Y.y1=rt.y-Y.h/2,Y.y2=rt.y+Y.h/2);function ot(Gt,ge,be){var ie=0,Fe=0,we=ge+be;return Gt>0&&we>0&&(ie=ge/we*Gt,Fe=be/we*Gt),{biasDiff:ie,biasComplementDiff:Fe}}function ht(Gt,ge,be,ie){if(be.units==="%")switch(ie){case"width":return Gt>0?be.pfValue*Gt:0;case"height":return ge>0?be.pfValue*ge:0;case"average":return Gt>0&&ge>0?be.pfValue*(Gt+ge)/2:0;case"min":return Gt>0&&ge>0?Gt>ge?be.pfValue*ge:be.pfValue*Gt:0;case"max":return Gt>0&&ge>0?Gt>ge?be.pfValue*Gt:be.pfValue*ge:0;default:return 0}else return be.units==="px"?be.pfValue:0}var dt=V.width.left.value;V.width.left.units==="px"&&V.width.val>0&&(dt=dt*100/V.width.val);var Lt=V.width.right.value;V.width.right.units==="px"&&V.width.val>0&&(Lt=Lt*100/V.width.val);var kt=V.height.top.value;V.height.top.units==="px"&&V.height.val>0&&(kt=kt*100/V.height.val);var Dt=V.height.bottom.value;V.height.bottom.units==="px"&&V.height.val>0&&(Dt=Dt*100/V.height.val);var Pt=ot(V.width.val-Y.w,dt,Lt),$t=Pt.biasDiff,Zt=Pt.biasComplementDiff,Yt=ot(V.height.val-Y.h,kt,Dt),qt=Yt.biasDiff,ne=Yt.biasComplementDiff;$.autoPadding=ht(Y.w,Y.h,P.pstyle("padding"),P.pstyle("padding-relative-to").value),$.autoWidth=Math.max(Y.w,V.width.val),rt.x=(-$t+Y.x1+Y.x2+Zt)/2,$.autoHeight=Math.max(Y.h,V.height.val),rt.y=(-qt+Y.y1+Y.y2+ne)/2}for(var T=0;Tg.x2?L:g.x2,g.y1=Tg.y2?O:g.y2,g.w=g.x2-g.x1,g.h=g.y2-g.y1)},L3=function(g,x){return x==null?g:Ep(g,x.x1,x.y1,x.x2,x.y2)},Fk=function(g,x,T){return yp(g,x,T)},tC=function(g,x,T){if(!x.cy().headless()){var L=x._private,O=L.rstyle,P=O.arrowWidth/2,$=x.pstyle(T+"-arrow-shape").value,q,S;if($!=="none"){T==="source"?(q=O.srcX,S=O.srcY):T==="target"?(q=O.tgtX,S=O.tgtY):(q=O.midX,S=O.midY);var V=L.arrowBounds=L.arrowBounds||{},Y=V[T]=V[T]||{};Y.x1=q-P,Y.y1=S-P,Y.x2=q+P,Y.y2=S+P,Y.w=Y.x2-Y.x1,Y.h=Y.y2-Y.y1,RT(Y,1),Ep(g,Y.x1,Y.y1,Y.x2,Y.y2)}}},hB=function(g,x,T){if(!x.cy().headless()){var L;T?L=T+"-":L="";var O=x._private,P=O.rstyle,$=x.pstyle(L+"label").strValue;if($){var q=x.pstyle("text-halign"),S=x.pstyle("text-valign"),V=Fk(P,"labelWidth",T),Y=Fk(P,"labelHeight",T),rt=Fk(P,"labelX",T),ot=Fk(P,"labelY",T),ht=x.pstyle(L+"text-margin-x").pfValue,dt=x.pstyle(L+"text-margin-y").pfValue,Lt=x.isEdge(),kt=x.pstyle(L+"text-rotation"),Dt=x.pstyle("text-outline-width").pfValue,Pt=x.pstyle("text-border-width").pfValue,$t=Pt/2,Zt=x.pstyle("text-background-padding").pfValue,Yt=2,qt=Y,ne=V,Gt=ne/2,ge=qt/2,be,ie,Fe,we;if(Lt)be=rt-Gt,ie=rt+Gt,Fe=ot-ge,we=ot+ge;else{switch(q.value){case"left":be=rt-ne,ie=rt;break;case"center":be=rt-Gt,ie=rt+Gt;break;case"right":be=rt,ie=rt+ne;break}switch(S.value){case"top":Fe=ot-qt,we=ot;break;case"center":Fe=ot-ge,we=ot+ge;break;case"bottom":Fe=ot,we=ot+qt;break}}be+=ht-Math.max(Dt,$t)-Zt-Yt,ie+=ht+Math.max(Dt,$t)+Zt+Yt,Fe+=dt-Math.max(Dt,$t)-Zt-Yt,we+=dt+Math.max(Dt,$t)+Zt+Yt;var bn=T||"main",ze=O.labelBounds,Ge=ze[bn]=ze[bn]||{};Ge.x1=be,Ge.y1=Fe,Ge.x2=ie,Ge.y2=we,Ge.w=ie-be,Ge.h=we-Fe;var En=Lt&&kt.strValue==="autorotate",In=kt.pfValue!=null&&kt.pfValue!==0;if(En||In){var Yn=En?Fk(O.rstyle,"labelAngle",T):kt.pfValue,Sn=Math.cos(Yn),Wn=Math.sin(Yn),rr=(be+ie)/2,wr=(Fe+we)/2;if(!Lt){switch(q.value){case"left":rr=ie;break;case"right":rr=be;break}switch(S.value){case"top":wr=we;break;case"bottom":wr=Fe;break}}var ur=function(Ea,Ci){return Ea=Ea-rr,Ci=Ci-wr,{x:Ea*Sn-Ci*Wn+rr,y:Ea*Wn+Ci*Sn+wr}},er=ur(be,Fe),vn=ur(be,we),gr=ur(ie,Fe),fr=ur(ie,we);be=Math.min(er.x,vn.x,gr.x,fr.x),ie=Math.max(er.x,vn.x,gr.x,fr.x),Fe=Math.min(er.y,vn.y,gr.y,fr.y),we=Math.max(er.y,vn.y,gr.y,fr.y)}var Jr=bn+"Rot",vi=ze[Jr]=ze[Jr]||{};vi.x1=be,vi.y1=Fe,vi.x2=ie,vi.y2=we,vi.w=ie-be,vi.h=we-Fe,Ep(g,be,Fe,ie,we),Ep(O.labelBounds.all,be,Fe,ie,we)}return g}},iJ=function(g,x){var T=g._private.cy,L=T.styleEnabled(),O=T.headless(),P=zd(),$=g._private,q=g.isNode(),S=g.isEdge(),V,Y,rt,ot,ht,dt,Lt=$.rstyle,kt=q&&L?g.pstyle("bounds-expansion").pfValue:[0],Dt=function(gs){return gs.pstyle("display").value!=="none"},Pt=!L||Dt(g)&&(!S||Dt(g.source())&&Dt(g.target()));if(Pt){var $t=0,Zt=0;L&&x.includeOverlays&&($t=g.pstyle("overlay-opacity").value,$t!==0&&(Zt=g.pstyle("overlay-padding").value));var Yt=0,qt=0;L&&x.includeUnderlays&&(Yt=g.pstyle("underlay-opacity").value,Yt!==0&&(qt=g.pstyle("underlay-padding").value));var ne=Math.max(Zt,qt),Gt=0,ge=0;if(L&&(Gt=g.pstyle("width").pfValue,ge=Gt/2),q&&x.includeNodes){var be=g.position();ht=be.x,dt=be.y;var ie=g.outerWidth(),Fe=ie/2,we=g.outerHeight(),bn=we/2;V=ht-Fe,Y=ht+Fe,rt=dt-bn,ot=dt+bn,Ep(P,V,rt,Y,ot)}else if(S&&x.includeEdges)if(L&&!O){var ze=g.pstyle("curve-style").strValue;if(V=Math.min(Lt.srcX,Lt.midX,Lt.tgtX),Y=Math.max(Lt.srcX,Lt.midX,Lt.tgtX),rt=Math.min(Lt.srcY,Lt.midY,Lt.tgtY),ot=Math.max(Lt.srcY,Lt.midY,Lt.tgtY),V-=ge,Y+=ge,rt-=ge,ot+=ge,Ep(P,V,rt,Y,ot),ze==="haystack"){var Ge=Lt.haystackPts;if(Ge&&Ge.length===2){if(V=Ge[0].x,rt=Ge[0].y,Y=Ge[1].x,ot=Ge[1].y,V>Y){var En=V;V=Y,Y=En}if(rt>ot){var In=rt;rt=ot,ot=In}Ep(P,V-ge,rt-ge,Y+ge,ot+ge)}}else if(ze==="bezier"||ze==="unbundled-bezier"||ze==="segments"||ze==="taxi"){var Yn;switch(ze){case"bezier":case"unbundled-bezier":Yn=Lt.bezierPts;break;case"segments":case"taxi":Yn=Lt.linePts;break}if(Yn!=null)for(var Sn=0;SnY){var vn=V;V=Y,Y=vn}if(rt>ot){var gr=rt;rt=ot,ot=gr}V-=ge,Y+=ge,rt-=ge,ot+=ge,Ep(P,V,rt,Y,ot)}if(L&&x.includeEdges&&S&&(tC(P,g,"mid-source"),tC(P,g,"mid-target"),tC(P,g,"source"),tC(P,g,"target")),L){var fr=g.pstyle("ghost").value==="yes";if(fr){var Jr=g.pstyle("ghost-offset-x").pfValue,vi=g.pstyle("ghost-offset-y").pfValue;Ep(P,P.x1+Jr,P.y1+vi,P.x2+Jr,P.y2+vi)}}var Xs=$.bodyBounds=$.bodyBounds||{};lN(Xs,P),SL(Xs,kt),RT(Xs,1),L&&(V=P.x1,Y=P.x2,rt=P.y1,ot=P.y2,Ep(P,V-ne,rt-ne,Y+ne,ot+ne));var Ea=$.overlayBounds=$.overlayBounds||{};lN(Ea,P),SL(Ea,kt),RT(Ea,1);var Ci=$.labelBounds=$.labelBounds||{};Ci.all!=null?NK(Ci.all):Ci.all=zd(),L&&x.includeLabels&&(x.includeMainLabels&&hB(P,g,null),S&&(x.includeSourceLabels&&hB(P,g,"source"),x.includeTargetLabels&&hB(P,g,"target")))}return P.x1=M0(P.x1),P.y1=M0(P.y1),P.x2=M0(P.x2),P.y2=M0(P.y2),P.w=M0(P.x2-P.x1),P.h=M0(P.y2-P.y1),P.w>0&&P.h>0&&Pt&&(SL(P,kt),RT(P,1)),P},fB=function(g){var x=0,T=function(P){return(P?1:0)<0}},clearQueue:function(){return function(){var k=this,S=k.length!==void 0,M=S?k:[k],O=this._private.cy||this;if(!O.styleEnabled())return this;for(var N=0;N-1}var vte=mte;function wte(x,m){var k=this.__data__,S=TS(k,x);return S<0?(++this.size,k.push([x,m])):k[S][1]=m,this}var yte=wte;function a8(x){var m=-1,k=x==null?0:x.length;for(this.clear();++m-1&&x%1==0&&x0&&this.spawn(M).updateStyle().emit("class"),k},addClass:function(m){return this.toggleClass(m,!0)},hasClass:function(m){var k=this[0];return k!=null&&k._private.classes.has(m)},toggleClass:function(m,k){ne(m)||(m=m.match(/\S+/g)||[]);for(var S=this,M=k===void 0,O=[],N=0,$=S.length;N<$;N++)for(var H=S[N],q=H._private.classes,Y=!1,Z=0;Z0&&this.spawn(O).updateStyle().emit("class"),S},removeClass:function(m){return this.toggleClass(m,!1)},flashClass:function(m,k){var S=this;if(k==null)k=250;else if(k===0)return S;return S.addClass(m),setTimeout(function(){S.removeClass(m)},k),S}};SS.className=SS.classNames=SS.classes;var Rc={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:`"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`,number:ln,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};Rc.variable="(?:[\\w-.]|(?:\\\\"+Rc.metaChar+"))+",Rc.className="(?:[\\w-]|(?:\\\\"+Rc.metaChar+"))+",Rc.value=Rc.string+"|"+Rc.number,Rc.id=Rc.variable,function(){var x,m,k;for(x=Rc.comparatorOp.split("|"),k=0;k=0)&&m!=="="&&(Rc.comparatorOp+="|\\!"+m)}();var Pu=function(){return{checks:[]}},hs={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},mI=[{selector:":selected",matches:function(m){return m.selected()}},{selector:":unselected",matches:function(m){return!m.selected()}},{selector:":selectable",matches:function(m){return m.selectable()}},{selector:":unselectable",matches:function(m){return!m.selectable()}},{selector:":locked",matches:function(m){return m.locked()}},{selector:":unlocked",matches:function(m){return!m.locked()}},{selector:":visible",matches:function(m){return m.visible()}},{selector:":hidden",matches:function(m){return!m.visible()}},{selector:":transparent",matches:function(m){return m.transparent()}},{selector:":grabbed",matches:function(m){return m.grabbed()}},{selector:":free",matches:function(m){return!m.grabbed()}},{selector:":removed",matches:function(m){return m.removed()}},{selector:":inside",matches:function(m){return!m.removed()}},{selector:":grabbable",matches:function(m){return m.grabbable()}},{selector:":ungrabbable",matches:function(m){return!m.grabbable()}},{selector:":animated",matches:function(m){return m.animated()}},{selector:":unanimated",matches:function(m){return!m.animated()}},{selector:":parent",matches:function(m){return m.isParent()}},{selector:":childless",matches:function(m){return m.isChildless()}},{selector:":child",matches:function(m){return m.isChild()}},{selector:":orphan",matches:function(m){return m.isOrphan()}},{selector:":nonorphan",matches:function(m){return m.isChild()}},{selector:":compound",matches:function(m){return m.isNode()?m.isParent():m.source().isParent()||m.target().isParent()}},{selector:":loop",matches:function(m){return m.isLoop()}},{selector:":simple",matches:function(m){return m.isSimple()}},{selector:":active",matches:function(m){return m.active()}},{selector:":inactive",matches:function(m){return!m.active()}},{selector:":backgrounding",matches:function(m){return m.backgrounding()}},{selector:":nonbackgrounding",matches:function(m){return!m.backgrounding()}}].sort(function(x,m){return zr(x.selector,m.selector)}),Ene=function(){for(var x={},m,k=0;k0&&Y.edgeCount>0)return hu("The selector `"+m+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(Y.edgeCount>1)return hu("The selector `"+m+"` is invalid because it uses multiple edge selectors"),!1;Y.edgeCount===1&&hu("The selector `"+m+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},Ane=function(){if(this.toStringCache!=null)return this.toStringCache;for(var m=function(Y){return Y??""},k=function(Y){return be(Y)?'"'+Y+'"':m(Y)},S=function(Y){return" "+Y+" "},M=function(Y,Z){var ce=Y.type,ve=Y.value;switch(ce){case hs.GROUP:{var me=m(ve);return me.substring(0,me.length-1)}case hs.DATA_COMPARE:{var Le=Y.field,_e=Y.operator;return"["+Le+S(m(_e))+k(ve)+"]"}case hs.DATA_BOOL:{var Ee=Y.operator,Be=Y.field;return"["+m(Ee)+Be+"]"}case hs.DATA_EXIST:{var Re=Y.field;return"["+Re+"]"}case hs.META_COMPARE:{var Ve=Y.operator,ct=Y.field;return"[["+ct+S(m(Ve))+k(ve)+"]]"}case hs.STATE:return ve;case hs.ID:return"#"+ve;case hs.CLASS:return"."+ve;case hs.PARENT:case hs.CHILD:return O(Y.parent,Z)+S(">")+O(Y.child,Z);case hs.ANCESTOR:case hs.DESCENDANT:return O(Y.ancestor,Z)+" "+O(Y.descendant,Z);case hs.COMPOUND_SPLIT:{var st=O(Y.left,Z),Ye=O(Y.subject,Z),mt=O(Y.right,Z);return st+(st.length>0?" ":"")+Ye+mt}case hs.TRUE:return""}},O=function(Y,Z){return Y.checks.reduce(function(ce,ve,me){return ce+(Z===Y&&me===0?"$":"")+M(ve,Z)},"")},N="",$=0;$1&&$=0&&(k=k.replace("!",""),Z=!0),k.indexOf("@")>=0&&(k=k.replace("@",""),Y=!0),(O||$||Y)&&(H=!O&&!N?"":""+m,q=""+S),Y&&(m=H=H.toLowerCase(),S=q=q.toLowerCase()),k){case"*=":M=H.indexOf(q)>=0;break;case"$=":M=H.indexOf(q,H.length-q.length)>=0;break;case"^=":M=H.indexOf(q)===0;break;case"=":M=m===S;break;case">":ce=!0,M=m>S;break;case">=":ce=!0,M=m>=S;break;case"<":ce=!0,M=m0;){var Y=M.shift();m(Y),O.add(Y.id()),$&&S(M,O,Y)}return x}function l$(x,m,k){if(k.isParent())for(var S=k._private.children,M=0;M1&&arguments[1]!==void 0?arguments[1]:!0;return yI(this,x,m,l$)};function h$(x,m,k){if(k.isChild()){var S=k._private.parent;m.has(S.id())||x.push(S)}}u8.forEachUp=function(x){var m=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return yI(this,x,m,h$)};function Pne(x,m,k){h$(x,m,k),l$(x,m,k)}u8.forEachUpAndDown=function(x){var m=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return yI(this,x,m,Pne)},u8.ancestors=u8.parents;var x1,f$;x1=f$={data:fu.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:fu.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:fu.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:fu.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:fu.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:fu.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var m=this[0];if(m)return m._private.data.id}},x1.attr=x1.data,x1.removeAttr=x1.removeData;var ny=f$,J9={};function xI(x){return function(m){var k=this;if(m===void 0&&(m=!0),k.length!==0)if(k.isNode()&&!k.removed()){for(var S=0,M=k[0],O=M._private.edges,N=0;Nm}),minIndegree:l8("indegree",function(x,m){return xm}),minOutdegree:l8("outdegree",function(x,m){return xm})}),yt(J9,{totalDegree:function(m){for(var k=0,S=this.nodes(),M=0;M0,ce=Z;Z&&(Y=Y[0]);var ve=ce?Y.position():{x:0,y:0};k!==void 0?q.position(m,k+ve[m]):O!==void 0&&q.position({x:O.x+ve.x,y:O.y+ve.y})}else{var me=S.position(),Le=$?S.parent():null,_e=Le&&Le.length>0,Ee=_e;_e&&(Le=Le[0]);var Be=Ee?Le.position():{x:0,y:0};return O={x:me.x-Be.x,y:me.y-Be.y},m===void 0?O:O[m]}else if(!N)return;return this}},W2.modelPosition=W2.point=W2.position,W2.modelPositions=W2.points=W2.positions,W2.renderedPoint=W2.renderedPosition,W2.relativePoint=W2.relativePosition;var Bne=d$,h8,ry;h8=ry={},ry.renderedBoundingBox=function(x){var m=this.boundingBox(x),k=this.cy(),S=k.zoom(),M=k.pan(),O=m.x1*S+M.x,N=m.x2*S+M.x,$=m.y1*S+M.y,H=m.y2*S+M.y;return{x1:O,x2:N,y1:$,y2:H,w:N-O,h:H-$}},ry.dirtyCompoundBoundsCache=function(){var x=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,m=this.cy();return!m.styleEnabled()||!m.hasCompoundNodes()?this:(this.forEachUp(function(k){if(k.isParent()){var S=k._private;S.compoundBoundsClean=!1,S.bbCache=null,x||k.emitAndNotify("bounds")}}),this)},ry.updateCompoundBounds=function(){var x=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,m=this.cy();if(!m.styleEnabled()||!m.hasCompoundNodes())return this;if(!x&&m.batching())return this;function k(N){if(!N.isParent())return;var $=N._private,H=N.children(),q=N.pstyle("compound-sizing-wrt-labels").value==="include",Y={width:{val:N.pstyle("min-width").pfValue,left:N.pstyle("min-width-bias-left"),right:N.pstyle("min-width-bias-right")},height:{val:N.pstyle("min-height").pfValue,top:N.pstyle("min-height-bias-top"),bottom:N.pstyle("min-height-bias-bottom")}},Z=H.boundingBox({includeLabels:q,includeOverlays:!1,useCache:!1}),ce=$.position;(Z.w===0||Z.h===0)&&(Z={w:N.pstyle("width").pfValue,h:N.pstyle("height").pfValue},Z.x1=ce.x-Z.w/2,Z.x2=ce.x+Z.w/2,Z.y1=ce.y-Z.h/2,Z.y2=ce.y+Z.h/2);function ve(Je,Lt,Mt){var ut=0,Wt=0,Tt=Lt+Mt;return Je>0&&Tt>0&&(ut=Lt/Tt*Je,Wt=Mt/Tt*Je),{biasDiff:ut,biasComplementDiff:Wt}}function me(Je,Lt,Mt,ut){if(Mt.units==="%")switch(ut){case"width":return Je>0?Mt.pfValue*Je:0;case"height":return Lt>0?Mt.pfValue*Lt:0;case"average":return Je>0&&Lt>0?Mt.pfValue*(Je+Lt)/2:0;case"min":return Je>0&&Lt>0?Je>Lt?Mt.pfValue*Lt:Mt.pfValue*Je:0;case"max":return Je>0&&Lt>0?Je>Lt?Mt.pfValue*Je:Mt.pfValue*Lt:0;default:return 0}else return Mt.units==="px"?Mt.pfValue:0}var Le=Y.width.left.value;Y.width.left.units==="px"&&Y.width.val>0&&(Le=Le*100/Y.width.val);var _e=Y.width.right.value;Y.width.right.units==="px"&&Y.width.val>0&&(_e=_e*100/Y.width.val);var Ee=Y.height.top.value;Y.height.top.units==="px"&&Y.height.val>0&&(Ee=Ee*100/Y.height.val);var Be=Y.height.bottom.value;Y.height.bottom.units==="px"&&Y.height.val>0&&(Be=Be*100/Y.height.val);var Re=ve(Y.width.val-Z.w,Le,_e),Ve=Re.biasDiff,ct=Re.biasComplementDiff,st=ve(Y.height.val-Z.h,Ee,Be),Ye=st.biasDiff,mt=st.biasComplementDiff;$.autoPadding=me(Z.w,Z.h,N.pstyle("padding"),N.pstyle("padding-relative-to").value),$.autoWidth=Math.max(Z.w,Y.width.val),ce.x=(-Ve+Z.x1+Z.x2+ct)/2,$.autoHeight=Math.max(Z.h,Y.height.val),ce.y=(-Ye+Z.y1+Z.y2+mt)/2}for(var S=0;Sm.x2?M:m.x2,m.y1=Sm.y2?O:m.y2,m.w=m.x2-m.x1,m.h=m.y2-m.y1)},b5=function(m,k){return k==null?m:Y2(m,k.x1,k.y1,k.x2,k.y2)},Z9=function(m,k,S){return K2(m,k,S)},_S=function(m,k,S){if(!k.cy().headless()){var M=k._private,O=M.rstyle,N=O.arrowWidth/2,$=k.pstyle(S+"-arrow-shape").value,H,q;if($!=="none"){S==="source"?(H=O.srcX,q=O.srcY):S==="target"?(H=O.tgtX,q=O.tgtY):(H=O.midX,q=O.midY);var Y=M.arrowBounds=M.arrowBounds||{},Z=Y[S]=Y[S]||{};Z.x1=H-N,Z.y1=q-N,Z.x2=H+N,Z.y2=q+N,Z.w=Z.x2-Z.x1,Z.h=Z.y2-Z.y1,fS(Z,1),Y2(m,Z.x1,Z.y1,Z.x2,Z.y2)}}},kI=function(m,k,S){if(!k.cy().headless()){var M;S?M=S+"-":M="";var O=k._private,N=O.rstyle,$=k.pstyle(M+"label").strValue;if($){var H=k.pstyle("text-halign"),q=k.pstyle("text-valign"),Y=Z9(N,"labelWidth",S),Z=Z9(N,"labelHeight",S),ce=Z9(N,"labelX",S),ve=Z9(N,"labelY",S),me=k.pstyle(M+"text-margin-x").pfValue,Le=k.pstyle(M+"text-margin-y").pfValue,_e=k.isEdge(),Ee=k.pstyle(M+"text-rotation"),Be=k.pstyle("text-outline-width").pfValue,Re=k.pstyle("text-border-width").pfValue,Ve=Re/2,ct=k.pstyle("text-background-padding").pfValue,st=2,Ye=Z,mt=Y,Je=mt/2,Lt=Ye/2,Mt,ut,Wt,Tt;if(_e)Mt=ce-Je,ut=ce+Je,Wt=ve-Lt,Tt=ve+Lt;else{switch(H.value){case"left":Mt=ce-mt,ut=ce;break;case"center":Mt=ce-Je,ut=ce+Je;break;case"right":Mt=ce,ut=ce+mt;break}switch(q.value){case"top":Wt=ve-Ye,Tt=ve;break;case"center":Wt=ve-Lt,Tt=ve+Lt;break;case"bottom":Wt=ve,Tt=ve+Ye;break}}Mt+=me-Math.max(Be,Ve)-ct-st,ut+=me+Math.max(Be,Ve)+ct+st,Wt+=Le-Math.max(Be,Ve)-ct-st,Tt+=Le+Math.max(Be,Ve)+ct+st;var _n=S||"main",hn=O.labelBounds,Yt=hn[_n]=hn[_n]||{};Yt.x1=Mt,Yt.y1=Wt,Yt.x2=ut,Yt.y2=Tt,Yt.w=ut-Mt,Yt.h=Tt-Wt;var Dn=_e&&Ee.strValue==="autorotate",ir=Ee.pfValue!=null&&Ee.pfValue!==0;if(Dn||ir){var vr=Dn?Z9(O.rstyle,"labelAngle",S):Ee.pfValue,Nn=Math.cos(vr),pr=Math.sin(vr),Er=(Mt+ut)/2,Mr=(Wt+Tt)/2;if(!_e){switch(H.value){case"left":Er=ut;break;case"right":Er=Mt;break}switch(q.value){case"top":Mr=Tt;break;case"bottom":Mr=Wt;break}}var Cr=function(pa,Mi){return pa=pa-Er,Mi=Mi-Mr,{x:pa*Nn-Mi*pr+Er,y:pa*pr+Mi*Nn+Mr}},Or=Cr(Mt,Wt),Wn=Cr(Mt,Tt),br=Cr(ut,Wt),Sr=Cr(ut,Tt);Mt=Math.min(Or.x,Wn.x,br.x,Sr.x),ut=Math.max(Or.x,Wn.x,br.x,Sr.x),Wt=Math.min(Or.y,Wn.y,br.y,Sr.y),Tt=Math.max(Or.y,Wn.y,br.y,Sr.y)}var Nr=_n+"Rot",Si=hn[Nr]=hn[Nr]||{};Si.x1=Mt,Si.y1=Wt,Si.x2=ut,Si.y2=Tt,Si.w=ut-Mt,Si.h=Tt-Wt,Y2(m,Mt,Wt,ut,Tt),Y2(O.labelBounds.all,Mt,Wt,ut,Tt)}return m}},Fne=function(m,k){if(!k.cy().headless()){var S=k.pstyle("outline-opacity").value,M=k.pstyle("outline-width").value;if(S>0&&M>0){var O=k.pstyle("outline-offset").value,N=k.pstyle("shape").value,$=M+O,H=(m.w+$*2)/m.w,q=(m.h+$*2)/m.h,Y=0,Z=0;["diamond","pentagon","round-triangle"].includes(N)?(H=(m.w+$*2.4)/m.w,Z=-$/3.6):["concave-hexagon","rhomboid","right-rhomboid"].includes(N)?H=(m.w+$*2.4)/m.w:N==="star"?(H=(m.w+$*2.8)/m.w,q=(m.h+$*2.6)/m.h,Z=-$/3.8):N==="triangle"?(H=(m.w+$*2.8)/m.w,q=(m.h+$*2.4)/m.h,Z=-$/1.4):N==="vee"&&(H=(m.w+$*4.4)/m.w,q=(m.h+$*3.8)/m.h,Z=-$*.5);var ce=m.h*q-m.h,ve=m.w*H-m.w;if(dS(m,[Math.ceil(ce/2),Math.ceil(ve/2)]),Y!=0||Z!==0){var me=pZ(m,Y,Z);dj(m,me)}}}},Rne=function(m,k){var S=m._private.cy,M=S.styleEnabled(),O=S.headless(),N=Wd(),$=m._private,H=m.isNode(),q=m.isEdge(),Y,Z,ce,ve,me,Le,_e=$.rstyle,Ee=H&&M?m.pstyle("bounds-expansion").pfValue:[0],Be=function(fs){return fs.pstyle("display").value!=="none"},Re=!M||Be(m)&&(!q||Be(m.source())&&Be(m.target()));if(Re){var Ve=0,ct=0;M&&k.includeOverlays&&(Ve=m.pstyle("overlay-opacity").value,Ve!==0&&(ct=m.pstyle("overlay-padding").value));var st=0,Ye=0;M&&k.includeUnderlays&&(st=m.pstyle("underlay-opacity").value,st!==0&&(Ye=m.pstyle("underlay-padding").value));var mt=Math.max(ct,Ye),Je=0,Lt=0;if(M&&(Je=m.pstyle("width").pfValue,Lt=Je/2),H&&k.includeNodes){var Mt=m.position();me=Mt.x,Le=Mt.y;var ut=m.outerWidth(),Wt=ut/2,Tt=m.outerHeight(),_n=Tt/2;Y=me-Wt,Z=me+Wt,ce=Le-_n,ve=Le+_n,Y2(N,Y,ce,Z,ve),M&&k.includeOutlines&&Fne(N,m)}else if(q&&k.includeEdges)if(M&&!O){var hn=m.pstyle("curve-style").strValue;if(Y=Math.min(_e.srcX,_e.midX,_e.tgtX),Z=Math.max(_e.srcX,_e.midX,_e.tgtX),ce=Math.min(_e.srcY,_e.midY,_e.tgtY),ve=Math.max(_e.srcY,_e.midY,_e.tgtY),Y-=Lt,Z+=Lt,ce-=Lt,ve+=Lt,Y2(N,Y,ce,Z,ve),hn==="haystack"){var Yt=_e.haystackPts;if(Yt&&Yt.length===2){if(Y=Yt[0].x,ce=Yt[0].y,Z=Yt[1].x,ve=Yt[1].y,Y>Z){var Dn=Y;Y=Z,Z=Dn}if(ce>ve){var ir=ce;ce=ve,ve=ir}Y2(N,Y-Lt,ce-Lt,Z+Lt,ve+Lt)}}else if(hn==="bezier"||hn==="unbundled-bezier"||hn==="segments"||hn==="taxi"){var vr;switch(hn){case"bezier":case"unbundled-bezier":vr=_e.bezierPts;break;case"segments":case"taxi":vr=_e.linePts;break}if(vr!=null)for(var Nn=0;NnZ){var Wn=Y;Y=Z,Z=Wn}if(ce>ve){var br=ce;ce=ve,ve=br}Y-=Lt,Z+=Lt,ce-=Lt,ve+=Lt,Y2(N,Y,ce,Z,ve)}if(M&&k.includeEdges&&q&&(_S(N,m,"mid-source"),_S(N,m,"mid-target"),_S(N,m,"source"),_S(N,m,"target")),M){var Sr=m.pstyle("ghost").value==="yes";if(Sr){var Nr=m.pstyle("ghost-offset-x").pfValue,Si=m.pstyle("ghost-offset-y").pfValue;Y2(N,N.x1+Nr,N.y1+Si,N.x2+Nr,N.y2+Si)}}var ys=$.bodyBounds=$.bodyBounds||{};gj(ys,N),dS(ys,Ee),fS(ys,1),M&&(Y=N.x1,Z=N.x2,ce=N.y1,ve=N.y2,Y2(N,Y-mt,ce-mt,Z+mt,ve+mt));var pa=$.overlayBounds=$.overlayBounds||{};gj(pa,N),dS(pa,Ee),fS(pa,1);var Mi=$.labelBounds=$.labelBounds||{};Mi.all!=null?gZ(Mi.all):Mi.all=Wd(),M&&k.includeLabels&&(k.includeMainLabels&&kI(N,m,null),q&&(k.includeSourceLabels&&kI(N,m,"source"),k.includeTargetLabels&&kI(N,m,"target")))}return N.x1=jp(N.x1),N.y1=jp(N.y1),N.x2=jp(N.x2),N.y2=jp(N.y2),N.w=jp(N.x2-N.x1),N.h=jp(N.y2-N.y1),N.w>0&&N.h>0&&Re&&(dS(N,Ee),fS(N,1)),N},b$=function(m){var k=0,S=function(N){return(N?1:0)<0&&arguments[0]!==void 0?arguments[0]:vJ,g=arguments.length>1?arguments[1]:void 0,x=0;x=0;$--)P($);return this},Cm.removeAllListeners=function(){return this.removeListener("*")},Cm.emit=Cm.trigger=function(y,g,x){var T=this.listeners,L=T.length;return this.emitting++,ft(g)||(g=[g]),mJ(this,function(O,P){x!=null&&(T=[{event:P.event,type:P.type,namespace:P.namespace,callback:x}],L=T.length);for(var $=function(V){var Y=T[V];if(Y.type===P.type&&(!Y.namespace||Y.namespace===P.namespace||Y.namespace===wJ)&&O.eventMatches(O.context,Y,P)){var rt=[P];g!=null&&aN(rt,g),O.beforeEmit(O.context,Y,P),Y.conf&&Y.conf.one&&(O.listeners=O.listeners.filter(function(dt){return dt!==Y}));var ot=O.callbackContext(O.context,Y,P),ht=Y.callback.apply(ot,rt);O.afterEmit(O.context,Y,P),ht===!1&&(P.stopPropagation(),P.preventDefault())}},q=0;q1&&!P){var $=this.length-1,q=this[$],S=q._private.data.id;this[$]=void 0,this[g]=q,O.set(S,{ele:q,index:g})}return this.length--,this},unmergeOne:function(g){g=g[0];var x=this._private,T=g._private.data.id,L=x.map,O=L.get(T);if(!O)return this;var P=O.index;return this.unmergeAt(P),this},unmerge:function(g){var x=this._private.cy;if(!g)return this;if(g&&mt(g)){var T=g;g=x.mutableElements().filter(T)}for(var L=0;L=0;x--){var T=this[x];g(T)&&this.unmergeAt(x)}return this},map:function(g,x){for(var T=[],L=this,O=0;OT&&(T=q,L=$)}return{value:T,ele:L}},min:function(g,x){for(var T=1/0,L,O=this,P=0;P=0&&O"u"?"undefined":f(Symbol))!=g&&f(Symbol.iterator)!=g;x&&(iC[Symbol.iterator]=function(){var T=this,L={value:void 0,done:!1},O=0,P=this.length;return b({next:function(){return O1&&arguments[1]!==void 0?arguments[1]:!0,T=this[0],L=T.cy();if(L.styleEnabled()&&T){this.cleanStyle();var O=T._private.style[g];return O??(x?L.style().getDefaultProperty(g):null)}},numericStyle:function(g){var x=this[0];if(x.cy().styleEnabled()&&x){var T=x.pstyle(g);return T.pfValue!==void 0?T.pfValue:T.value}},numericStyleUnits:function(g){var x=this[0];if(x.cy().styleEnabled()&&x)return x.pstyle(g).units},renderedStyle:function(g){var x=this.cy();if(!x.styleEnabled())return this;var T=this[0];if(T)return x.style().getRenderedStyle(T,g)},style:function(g,x){var T=this.cy();if(!T.styleEnabled())return this;var L=!1,O=T.style();if(ut(g)){var P=g;O.applyBypass(this,P,L),this.emitAndNotify("style")}else if(mt(g))if(x===void 0){var $=this[0];return $?O.getStylePropertyValue($,g):void 0}else O.applyBypass(this,g,x,L),this.emitAndNotify("style");else if(g===void 0){var q=this[0];return q?O.getRawStyle(q):void 0}return this},removeStyle:function(g){var x=this.cy();if(!x.styleEnabled())return this;var T=!1,L=x.style(),O=this;if(g===void 0)for(var P=0;P0&&g.push(V[0]),g.push($[0])}return this.spawn(g,!0).filter(y)},"neighborhood"),closedNeighborhood:function(g){return this.neighborhood().add(this).filter(g)},openNeighborhood:function(g){return this.neighborhood(g)}}),d1.neighbourhood=d1.neighborhood,d1.closedNeighbourhood=d1.closedNeighborhood,d1.openNeighbourhood=d1.openNeighborhood,de(d1,{source:ad(function(g){var x=this[0],T;return x&&(T=x._private.source||x.cy().collection()),T&&g?T.filter(g):T},"source"),target:ad(function(g){var x=this[0],T;return x&&(T=x._private.target||x.cy().collection()),T&&g?T.filter(g):T},"target"),sources:IB({attr:"source"}),targets:IB({attr:"target"})});function IB(y){return function(x){for(var T=[],L=0;L0);return P},component:function(){var g=this[0];return g.cy().mutableElements().components(g)[0]}}),d1.componentsOf=d1.components;var $f=function(g,x){var T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,L=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(g===void 0){vl("A collection must have a reference to the core");return}var O=new Gb,P=!1;if(!x)x=[];else if(x.length>0&&ut(x[0])&&!nt(x[0])){P=!0;for(var $=[],q=new Y5,S=0,V=x.length;S0&&arguments[0]!==void 0?arguments[0]:!0,g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,x=this,T=x.cy(),L=T._private,O=[],P=[],$,q=0,S=x.length;q0){for(var In=$.length===x.length?x:new $f(T,$),Yn=0;Yn0&&arguments[0]!==void 0?arguments[0]:!0,g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,x=this,T=[],L={},O=x._private.cy;function P(we){for(var bn=we._private.edges,ze=0;ze0&&(y?be.emitAndNotify("remove"):g&&be.emit("remove"));for(var ie=0;ie0?ie=we:be=we;while(Math.abs(Fe)>P&&++bn<$);return we}function Zt(ge){for(var be=0,ie=1,Fe=q-1;ie!==Fe&&rt[ie]<=ge;++ie)be+=S;--ie;var we=(ge-rt[ie])/(rt[ie+1]-rt[ie]),bn=be+we*S,ze=kt(bn,y,x);return ze>=O?Dt(ge,bn):ze===0?bn:$t(ge,be,be+S)}var Yt=!1;function qt(){Yt=!0,(y!==g||x!==T)&&Pt()}var ne=function(be){return Yt||qt(),y===g&&x===T?be:be===0?0:be===1?1:Lt(Zt(be),g,T)};ne.getControlPoints=function(){return[{x:y,y:g},{x,y:T}]};var Gt="generateBezier("+[y,g,x,T]+")";return ne.toString=function(){return Gt},ne}/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */var MJ=function(){function y(T){return-T.tension*T.x-T.friction*T.v}function g(T,L,O){var P={x:T.x+O.dx*L,v:T.v+O.dv*L,tension:T.tension,friction:T.friction};return{dx:P.v,dv:y(P)}}function x(T,L){var O={dx:T.v,dv:y(T)},P=g(T,L*.5,O),$=g(T,L*.5,P),q=g(T,L,$),S=1/6*(O.dx+2*(P.dx+$.dx)+q.dx),V=1/6*(O.dv+2*(P.dv+$.dv)+q.dv);return T.x=T.x+S*L,T.v=T.v+V*L,T}return function T(L,O,P){var $={x:-1,v:0,tension:null,friction:null},q=[0],S=0,V=1/1e4,Y=16/1e3,rt,ot,ht;for(L=parseFloat(L)||500,O=parseFloat(O)||20,P=P||null,$.tension=L,$.friction=O,rt=P!==null,rt?(S=T(L,O),ot=S/P*Y):ot=Y;ht=x(ht||$,ot),q.push(1+ht.x),S+=16,Math.abs(ht.x)>V&&Math.abs(ht.v)>V;);return rt?function(dt){return q[dt*(q.length-1)|0]}:S}}(),gu=function(g,x,T,L){var O=LJ(g,x,T,L);return function(P,$,q){return P+($-P)*O(q)}},cC={linear:function(g,x,T){return g+(x-g)*T},ease:gu(.25,.1,.25,1),"ease-in":gu(.42,0,1,1),"ease-out":gu(0,0,.58,1),"ease-in-out":gu(.42,0,.58,1),"ease-in-sine":gu(.47,0,.745,.715),"ease-out-sine":gu(.39,.575,.565,1),"ease-in-out-sine":gu(.445,.05,.55,.95),"ease-in-quad":gu(.55,.085,.68,.53),"ease-out-quad":gu(.25,.46,.45,.94),"ease-in-out-quad":gu(.455,.03,.515,.955),"ease-in-cubic":gu(.55,.055,.675,.19),"ease-out-cubic":gu(.215,.61,.355,1),"ease-in-out-cubic":gu(.645,.045,.355,1),"ease-in-quart":gu(.895,.03,.685,.22),"ease-out-quart":gu(.165,.84,.44,1),"ease-in-out-quart":gu(.77,0,.175,1),"ease-in-quint":gu(.755,.05,.855,.06),"ease-out-quint":gu(.23,1,.32,1),"ease-in-out-quint":gu(.86,0,.07,1),"ease-in-expo":gu(.95,.05,.795,.035),"ease-out-expo":gu(.19,1,.22,1),"ease-in-out-expo":gu(1,0,0,1),"ease-in-circ":gu(.6,.04,.98,.335),"ease-out-circ":gu(.075,.82,.165,1),"ease-in-out-circ":gu(.785,.135,.15,.86),spring:function(g,x,T){if(T===0)return cC.linear;var L=MJ(g,x,T);return function(O,P,$){return O+(P-O)*L($)}},"cubic-bezier":gu};function FB(y,g,x,T,L){if(T===1||g===x)return x;var O=L(g,x,T);return y==null||((y.roundValue||y.color)&&(O=Math.round(O)),y.min!==void 0&&(O=Math.max(O,y.min)),y.max!==void 0&&(O=Math.min(O,y.max))),O}function NB(y,g){return y.pfValue!=null||y.value!=null?y.pfValue!=null&&(g==null||g.type.units!=="%")?y.pfValue:y.value:y}function fx(y,g,x,T,L){var O=L!=null?L.type:null;x<0?x=0:x>1&&(x=1);var P=NB(y,L),$=NB(g,L);if(X(P)&&X($))return FB(O,P,$,x,T);if(ft(P)&&ft($)){for(var q=[],S=0;S<$.length;S++){var V=P[S],Y=$[S];if(V!=null&&Y!=null){var rt=FB(O,V,Y,x,T);q.push(rt)}else q.push(Y)}return q}}function DJ(y,g,x,T){var L=!T,O=y._private,P=g._private,$=P.easing,q=P.startTime,S=T?y:y.cy(),V=S.style();if(!P.easingImpl)if($==null)P.easingImpl=cC.linear;else{var Y;if(mt($)){var rt=V.parse("transition-timing-function",$);Y=rt.value}else Y=$;var ot,ht;mt(Y)?(ot=Y,ht=[]):(ot=Y[1],ht=Y.slice(2).map(function(In){return+In})),ht.length>0?(ot==="spring"&&ht.push(P.duration),P.easingImpl=cC[ot].apply(null,ht)):P.easingImpl=cC[ot]}var dt=P.easingImpl,Lt;if(P.duration===0?Lt=1:Lt=(x-q)/P.duration,P.applying&&(Lt=P.progress),Lt<0?Lt=0:Lt>1&&(Lt=1),P.delay==null){var kt=P.startPosition,Dt=P.position;if(Dt&&L&&!y.locked()){var Pt={};$k(kt.x,Dt.x)&&(Pt.x=fx(kt.x,Dt.x,Lt,dt)),$k(kt.y,Dt.y)&&(Pt.y=fx(kt.y,Dt.y,Lt,dt)),y.position(Pt)}var $t=P.startPan,Zt=P.pan,Yt=O.pan,qt=Zt!=null&&T;qt&&($k($t.x,Zt.x)&&(Yt.x=fx($t.x,Zt.x,Lt,dt)),$k($t.y,Zt.y)&&(Yt.y=fx($t.y,Zt.y,Lt,dt)),y.emit("pan"));var ne=P.startZoom,Gt=P.zoom,ge=Gt!=null&&T;ge&&($k(ne,Gt)&&(O.zoom=_k(O.minZoom,fx(ne,Gt,Lt,dt),O.maxZoom)),y.emit("zoom")),(qt||ge)&&y.emit("viewport");var be=P.style;if(be&&be.length>0&&L){for(var ie=0;ie=0;qt--){var ne=Yt[qt];ne()}Yt.splice(0,Yt.length)},Dt=ot.length-1;Dt>=0;Dt--){var Pt=ot[Dt],$t=Pt._private;if($t.stopped){ot.splice(Dt,1),$t.hooked=!1,$t.playing=!1,$t.started=!1,kt($t.frames);continue}!$t.playing&&!$t.applying||($t.playing&&$t.applying&&($t.applying=!1),$t.started||IJ(V,Pt,y),DJ(V,Pt,y,Y),$t.applying&&($t.applying=!1),kt($t.frames),$t.step!=null&&$t.step(y),Pt.completed()&&(ot.splice(Dt,1),$t.hooked=!1,$t.playing=!1,$t.started=!1,kt($t.completes)),dt=!0)}return!Y&&ot.length===0&&ht.length===0&&T.push(V),dt}for(var O=!1,P=0;P0?g.notify("draw",x):g.notify("draw")),x.unmerge(T),g.emit("step")}var OJ={animate:Ac.animate(),animation:Ac.animation(),animated:Ac.animated(),clearQueue:Ac.clearQueue(),delay:Ac.delay(),delayAnimation:Ac.delayAnimation(),stop:Ac.stop(),addToAnimationPool:function(g){var x=this;x.styleEnabled()&&x._private.aniEles.merge(g)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var g=this;if(g._private.animationsRunning=!0,!g.styleEnabled())return;function x(){g._private.animationsRunning&&Bf(function(O){BB(O,g),x()})}var T=g.renderer();T&&T.beforeRender?T.beforeRender(function(O,P){BB(P,g)},T.beforeRenderPriorities.animations):x()}},PJ={qualifierCompare:function(g,x){return g==null||x==null?g==null&&x==null:g.sameText(x)},eventMatches:function(g,x,T){var L=x.qualifier;return L!=null?g!==T.target&&nt(T.target)&&L.matches(T.target):!0},addEventFields:function(g,x){x.cy=g,x.target=g},callbackContext:function(g,x,T){return x.qualifier!=null?T.target:g}},uC=function(g){return mt(g)?new Em(g):g},RB={createEmitter:function(){var g=this._private;return g.emitter||(g.emitter=new nC(PJ,this)),this},emitter:function(){return this._private.emitter},on:function(g,x,T){return this.emitter().on(g,uC(x),T),this},removeListener:function(g,x,T){return this.emitter().removeListener(g,uC(x),T),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(g,x,T){return this.emitter().one(g,uC(x),T),this},once:function(g,x,T){return this.emitter().one(g,uC(x),T),this},emit:function(g,x){return this.emitter().emit(g,x),this},emitAndNotify:function(g,x){return this.emit(g),this.notify(g,x),this}};Ac.eventAliasesOn(RB);var UL={png:function(g){var x=this._private.renderer;return g=g||{},x.png(g)},jpg:function(g){var x=this._private.renderer;return g=g||{},g.bg=g.bg||"#fff",x.jpg(g)}};UL.jpeg=UL.jpg;var lC={layout:function(g){var x=this;if(g==null){vl("Layout options must be specified to make a layout");return}if(g.name==null){vl("A `name` must be specified to make a layout");return}var T=g.name,L=x.extension("layout",T);if(L==null){vl("No such layout `"+T+"` found. Did you forget to import it and `cytoscape.use()` it?");return}var O;mt(g.eles)?O=x.$(g.eles):O=g.eles!=null?g.eles:x.$();var P=new L(de({},g,{cy:x,eles:O}));return P}};lC.createLayout=lC.makeLayout=lC.layout;var FJ={notify:function(g,x){var T=this._private;if(this.batching()){T.batchNotifications=T.batchNotifications||{};var L=T.batchNotifications[g]=T.batchNotifications[g]||this.collection();x!=null&&L.merge(x);return}if(T.notificationsEnabled){var O=this.renderer();this.destroyed()||!O||O.notify(g,x)}},notifications:function(g){var x=this._private;return g===void 0?x.notificationsEnabled:(x.notificationsEnabled=!!g,this)},noNotifications:function(g){this.notifications(!1),g(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var g=this._private;return g.batchCount==null&&(g.batchCount=0),g.batchCount===0&&(g.batchStyleEles=this.collection(),g.batchNotifications={}),g.batchCount++,this},endBatch:function(){var g=this._private;if(g.batchCount===0)return this;if(g.batchCount--,g.batchCount===0){g.batchStyleEles.updateStyle();var x=this.renderer();Object.keys(g.batchNotifications).forEach(function(T){var L=g.batchNotifications[T];L.empty()?x.notify(T):x.notify(T,L)})}return this},batch:function(g){return this.startBatch(),g(),this.endBatch(),this},batchData:function(g){var x=this;return this.batch(function(){for(var T=Object.keys(g),L=0;L0;)x.removeChild(x.childNodes[0]);g._private.renderer=null,g.mutableElements().forEach(function(T){var L=T._private;L.rscratch={},L.rstyle={},L.animation.current=[],L.animation.queue=[]})},onRender:function(g){return this.on("render",g)},offRender:function(g){return this.off("render",g)}};WL.invalidateDimensions=WL.resize;var hC={collection:function(g,x){return mt(g)?this.$(g):Tt(g)?g.collection():ft(g)?(x||(x={}),new $f(this,g,x.unique,x.removed)):new $f(this)},nodes:function(g){var x=this.$(function(T){return T.isNode()});return g?x.filter(g):x},edges:function(g){var x=this.$(function(T){return T.isEdge()});return g?x.filter(g):x},$:function(g){var x=this._private.elements;return g?x.filter(g):x.spawnSelf()},mutableElements:function(){return this._private.elements}};hC.elements=hC.filter=hC.$;var g1={},zk="t",BJ="f";g1.apply=function(y){for(var g=this,x=g._private,T=x.cy,L=T.collection(),O=0;O0;if(rt||Y&&ot){var ht=void 0;rt&&ot||rt?ht=S.properties:ot&&(ht=S.mappedProperties);for(var dt=0;dt1&&($t=1),$.color){var Yt=T.valueMin[0],qt=T.valueMax[0],ne=T.valueMin[1],Gt=T.valueMax[1],ge=T.valueMin[2],be=T.valueMax[2],ie=T.valueMin[3]==null?1:T.valueMin[3],Fe=T.valueMax[3]==null?1:T.valueMax[3],we=[Math.round(Yt+(qt-Yt)*$t),Math.round(ne+(Gt-ne)*$t),Math.round(ge+(be-ge)*$t),Math.round(ie+(Fe-ie)*$t)];O={bypass:T.bypass,name:T.name,value:we,strValue:"rgb("+we[0]+", "+we[1]+", "+we[2]+")"}}else if($.number){var bn=T.valueMin+(T.valueMax-T.valueMin)*$t;O=this.parse(T.name,bn,T.bypass,rt)}else return!1;if(!O)return dt(),!1;O.mapping=T,T=O;break}case P.data:{for(var ze=T.field.split("."),Ge=Y.data,En=0;En0&&O>0){for(var $={},q=!1,S=0;S0?y.delayAnimation(P).play().promise().then(Pt):Pt()}).then(function(){return y.animation({style:$,duration:O,easing:y.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){x.removeBypasses(y,L),y.emitAndNotify("style"),T.transitioning=!1})}else T.transitioning&&(this.removeBypasses(y,L),y.emitAndNotify("style"),T.transitioning=!1)},g1.checkTrigger=function(y,g,x,T,L,O){var P=this.properties[g],$=L(P);$!=null&&$(x,T)&&O(P)},g1.checkZOrderTrigger=function(y,g,x,T){var L=this;this.checkTrigger(y,g,x,T,function(O){return O.triggersZOrder},function(){L._private.cy.notify("zorder",y)})},g1.checkBoundsTrigger=function(y,g,x,T){this.checkTrigger(y,g,x,T,function(L){return L.triggersBounds},function(L){y.dirtyCompoundBoundsCache(),y.dirtyBoundingBoxCache(),L.triggersBoundsOfParallelBeziers&&(g==="curve-style"&&(x==="bezier"||T==="bezier")||g==="display"&&(x==="none"||T==="none"))&&y.parallelEdges().forEach(function(O){O.isBundledBezier()&&O.dirtyBoundingBoxCache()})})},g1.checkTriggers=function(y,g,x,T){y.dirtyStyleCache(),this.checkZOrderTrigger(y,g,x,T),this.checkBoundsTrigger(y,g,x,T)};var qk={};qk.applyBypass=function(y,g,x,T){var L=this,O=[],P=!0;if(g==="*"||g==="**"){if(x!==void 0)for(var $=0;$L.length?T=T.substr(L.length):T=""}function q(){O.length>P.length?O=O.substr(P.length):O=""}for(;;){var S=T.match(/^\s*$/);if(S)break;var V=T.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!V){Sc("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+T);break}L=V[0];var Y=V[1];if(Y!=="core"){var rt=new Em(Y);if(rt.invalid){Sc("Skipping parsing of block: Invalid selector found in string stylesheet: "+Y),$();continue}}var ot=V[2],ht=!1;O=ot;for(var dt=[];;){var Lt=O.match(/^\s*$/);if(Lt)break;var kt=O.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!kt){Sc("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+ot),ht=!0;break}P=kt[0];var Dt=kt[1],Pt=kt[2],$t=g.properties[Dt];if(!$t){Sc("Skipping property: Invalid property name in: "+P),q();continue}var Zt=x.parse(Dt,Pt);if(!Zt){Sc("Skipping property: Invalid property definition in: "+P),q();continue}dt.push({name:Dt,val:Pt}),q()}if(ht){$();break}x.selector(Y);for(var Yt=0;Yt=7&&g[0]==="d"&&(V=new RegExp($.data.regex).exec(g))){if(x)return!1;var rt=$.data;return{name:y,value:V,strValue:""+g,mapped:rt,field:V[1],bypass:x}}else if(g.length>=10&&g[0]==="m"&&(Y=new RegExp($.mapData.regex).exec(g))){if(x||S.multiple)return!1;var ot=$.mapData;if(!(S.color||S.number))return!1;var ht=this.parse(y,Y[4]);if(!ht||ht.mapped)return!1;var dt=this.parse(y,Y[5]);if(!dt||dt.mapped)return!1;if(ht.pfValue===dt.pfValue||ht.strValue===dt.strValue)return Sc("`"+y+": "+g+"` is not a valid mapper because the output range is zero; converting to `"+y+": "+ht.strValue+"`"),this.parse(y,ht.strValue);if(S.color){var Lt=ht.value,kt=dt.value,Dt=Lt[0]===kt[0]&&Lt[1]===kt[1]&&Lt[2]===kt[2]&&(Lt[3]===kt[3]||(Lt[3]==null||Lt[3]===1)&&(kt[3]==null||kt[3]===1));if(Dt)return!1}return{name:y,value:Y,strValue:""+g,mapped:ot,field:Y[1],fieldMin:parseFloat(Y[2]),fieldMax:parseFloat(Y[3]),valueMin:ht.value,valueMax:dt.value,bypass:x}}}if(S.multiple&&T!=="multiple"){var Pt;if(q?Pt=g.split(/\s+/):ft(g)?Pt=g:Pt=[g],S.evenMultiple&&Pt.length%2!==0)return null;for(var $t=[],Zt=[],Yt=[],qt="",ne=!1,Gt=0;Gt0?" ":"")+ge.strValue}return S.validate&&!S.validate($t,Zt)?null:S.singleEnum&&ne?$t.length===1&&mt($t[0])?{name:y,value:$t[0],strValue:$t[0],bypass:x}:null:{name:y,value:$t,pfValue:Yt,strValue:qt,bypass:x,units:Zt}}var be=function(){for(var fr=0;frS.max||S.strictMax&&g===S.max))return null;var ze={name:y,value:g,strValue:""+g+(ie||""),units:ie,bypass:x};return S.unitless||ie!=="px"&&ie!=="em"?ze.pfValue=g:ze.pfValue=ie==="px"||!ie?g:this.getEmSizeInPixels()*g,(ie==="ms"||ie==="s")&&(ze.pfValue=ie==="ms"?g:1e3*g),(ie==="deg"||ie==="rad")&&(ze.pfValue=ie==="rad"?g:IK(g)),ie==="%"&&(ze.pfValue=g/100),ze}else if(S.propList){var Ge=[],En=""+g;if(En!=="none"){for(var In=En.split(/\s*,\s*|\s+/),Yn=0;Yn0&&$>0&&!isNaN(T.w)&&!isNaN(T.h)&&T.w>0&&T.h>0){q=Math.min((P-2*x)/T.w,($-2*x)/T.h),q=q>this._private.maxZoom?this._private.maxZoom:q,q=q=T.minZoom&&(T.maxZoom=x),this},minZoom:function(g){return g===void 0?this._private.minZoom:this.zoomRange({min:g})},maxZoom:function(g){return g===void 0?this._private.maxZoom:this.zoomRange({max:g})},getZoomedViewport:function(g){var x=this._private,T=x.pan,L=x.zoom,O,P,$=!1;if(x.zoomingEnabled||($=!0),X(g)?P=g:ut(g)&&(P=g.level,g.position!=null?O=NT(g.position,L,T):g.renderedPosition!=null&&(O=g.renderedPosition),O!=null&&!x.panningEnabled&&($=!0)),P=P>x.maxZoom?x.maxZoom:P,P=Px.maxZoom||!x.zoomingEnabled?P=!0:(x.zoom=q,O.push("zoom"))}if(L&&(!P||!g.cancelOnFailedZoom)&&x.panningEnabled){var S=g.pan;X(S.x)&&(x.pan.x=S.x,$=!1),X(S.y)&&(x.pan.y=S.y,$=!1),$||O.push("pan")}return O.length>0&&(O.push("viewport"),this.emit(O.join(" ")),this.notify("viewport")),this},center:function(g){var x=this.getCenterPan(g);return x&&(this._private.pan=x,this.emit("pan viewport"),this.notify("viewport")),this},getCenterPan:function(g,x){if(this._private.panningEnabled){if(mt(g)){var T=g;g=this.mutableElements().filter(T)}else Tt(g)||(g=this.mutableElements());if(g.length!==0){var L=g.boundingBox(),O=this.width(),P=this.height();x=x===void 0?this._private.zoom:x;var $={x:(O-x*(L.x1+L.x2))/2,y:(P-x*(L.y1+L.y2))/2};return $}}},reset:function(){return!this._private.panningEnabled||!this._private.zoomingEnabled?this:(this.viewport({pan:{x:0,y:0},zoom:1}),this)},invalidateSize:function(){this._private.sizeCache=null},size:function(){var g=this._private,x=g.container;return g.sizeCache=g.sizeCache||(x?function(){var T=R.getComputedStyle(x),L=function(P){return parseFloat(T.getPropertyValue(P))};return{width:x.clientWidth-L("padding-left")-L("padding-right"),height:x.clientHeight-L("padding-top")-L("padding-bottom")}}():{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var g=this._private.pan,x=this._private.zoom,T=this.renderedExtent(),L={x1:(T.x1-g.x)/x,x2:(T.x2-g.x)/x,y1:(T.y1-g.y)/x,y2:(T.y2-g.y)/x};return L.w=L.x2-L.x1,L.h=L.y2-L.y1,L},renderedExtent:function(){var g=this.width(),x=this.height();return{x1:0,y1:0,x2:g,y2:x,w:g,h:x}},multiClickDebounceTime:function(g){if(g)this._private.multiClickDebounceTime=g;else return this._private.multiClickDebounceTime;return this}};M3.centre=M3.center,M3.autolockNodes=M3.autolock,M3.autoungrabifyNodes=M3.autoungrabify;var Hk={data:Ac.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:Ac.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:Ac.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:Ac.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};Hk.attr=Hk.data,Hk.removeAttr=Hk.removeData;var Vk=function(g){var x=this;g=de({},g);var T=g.container;T&&!U(T)&&U(T[0])&&(T=T[0]);var L=T?T._cyreg:null;L=L||{},L&&L.cy&&(L.cy.destroy(),L={});var O=L.readies=L.readies||[];T&&(T._cyreg=L),L.cy=x;var P=R!==void 0&&T!==void 0&&!g.headless,$=g;$.layout=de({name:P?"grid":"null"},$.layout),$.renderer=de({name:P?"canvas":"null"},$.renderer);var q=function(ht,dt,Lt){return dt!==void 0?dt:Lt!==void 0?Lt:ht},S=this._private={container:T,ready:!1,options:$,elements:new $f(this),listeners:[],aniEles:new $f(this),data:$.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:q(!0,$.zoomingEnabled),userZoomingEnabled:q(!0,$.userZoomingEnabled),panningEnabled:q(!0,$.panningEnabled),userPanningEnabled:q(!0,$.userPanningEnabled),boxSelectionEnabled:q(!0,$.boxSelectionEnabled),autolock:q(!1,$.autolock,$.autolockNodes),autoungrabify:q(!1,$.autoungrabify,$.autoungrabifyNodes),autounselectify:q(!1,$.autounselectify),styleEnabled:$.styleEnabled===void 0?P:$.styleEnabled,zoom:X($.zoom)?$.zoom:1,pan:{x:ut($.pan)&&X($.pan.x)?$.pan.x:0,y:ut($.pan)&&X($.pan.y)?$.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:q(250,$.multiClickDebounceTime)};this.createEmitter(),this.selectionType($.selectionType),this.zoomRange({min:$.minZoom,max:$.maxZoom});var V=function(ht,dt){var Lt=ht.some(Ht);if(Lt)return ex.all(ht).then(dt);dt(ht)};S.styleEnabled&&x.setStyle([]);var Y=de({},$,$.renderer);x.initRenderer(Y);var rt=function(ht,dt,Lt){x.notifications(!1);var kt=x.mutableElements();kt.length>0&&kt.remove(),ht!=null&&(ut(ht)||ft(ht))&&x.add(ht),x.one("layoutready",function(Pt){x.notifications(!0),x.emit(Pt),x.one("load",dt),x.emitAndNotify("load")}).one("layoutstop",function(){x.one("done",Lt),x.emit("done")});var Dt=de({},x._private.options.layout);Dt.eles=x.elements(),x.layout(Dt).run()};V([$.style,$.elements],function(ot){var ht=ot[0],dt=ot[1];S.styleEnabled&&x.style().append(ht),rt(dt,function(){x.startAnimationLoop(),S.ready=!0,yt($.ready)&&x.on("ready",$.ready);for(var Lt=0;Lt0,q=zd(g.boundingBox?g.boundingBox:{x1:0,y1:0,w:x.width(),h:x.height()}),S;if(Tt(g.roots))S=g.roots;else if(ft(g.roots)){for(var V=[],Y=0;Y0;){var bn=we(),ze=ge(bn,ie);if(ze)bn.outgoers().filter(function(Ci){return Ci.isNode()&&T.has(Ci)}).forEach(Fe);else if(ze===null){Sc("Detected double maximal shift for node `"+bn.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}Gt();var Ge=0;if(g.avoidOverlap)for(var En=0;En0&&kt[0].length<=3?qs/2:0),jn=2*Math.PI/kt[qi].length*Si;return qi===0&&kt[0].length===1&&(Qt=1),{x:vi.x+Qt*Math.cos(jn),y:vi.y+Qt*Math.sin(jn)}}else{var Tr={x:vi.x+(Si+1-(Ui+1)/2)*Va,y:(qi+1)*Qs};return Tr}};return T.nodes().layoutPositions(this,g,Ea),this};var zJ={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(g,x){return!0},ready:void 0,stop:void 0,transform:function(g,x){return x}};function pC(y){this.options=de({},zJ,y)}pC.prototype.run=function(){var y=this.options,g=y,x=y.cy,T=g.eles,L=g.counterclockwise!==void 0?!g.counterclockwise:g.clockwise,O=T.nodes().not(":parent");g.sort&&(O=O.sort(g.sort));for(var P=zd(g.boundingBox?g.boundingBox:{x1:0,y1:0,w:x.width(),h:x.height()}),$={x:P.x1+P.w/2,y:P.y1+P.h/2},q=g.sweep===void 0?2*Math.PI-2*Math.PI/O.length:g.sweep,S=q/Math.max(1,O.length-1),V,Y=0,rt=0;rt1&&g.avoidOverlap){Y*=1.75;var kt=Math.cos(S)-Math.cos(0),Dt=Math.sin(S)-Math.sin(0),Pt=Math.sqrt(Y*Y/(kt*kt+Dt*Dt));V=Math.max(Pt,V)}var $t=function(Yt,qt){var ne=g.startAngle+qt*S*(L?1:-1),Gt=V*Math.cos(ne),ge=V*Math.sin(ne),be={x:$.x+Gt,y:$.y+ge};return be};return T.nodes().layoutPositions(this,g,$t),this};var qJ={fit:!0,padding:30,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(g){return g.degree()},levelWidth:function(g){return g.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(g,x){return!0},ready:void 0,stop:void 0,transform:function(g,x){return x}};function $B(y){this.options=de({},qJ,y)}$B.prototype.run=function(){for(var y=this.options,g=y,x=g.counterclockwise!==void 0?!g.counterclockwise:g.clockwise,T=y.cy,L=g.eles,O=L.nodes().not(":parent"),P=zd(g.boundingBox?g.boundingBox:{x1:0,y1:0,w:T.width(),h:T.height()}),$={x:P.x1+P.w/2,y:P.y1+P.h/2},q=[],S=0,V=0;V0){var Zt=Math.abs(Dt[0].value-$t.value);Zt>=Lt&&(Dt=[],kt.push(Dt))}Dt.push($t)}var Yt=S+g.minNodeSpacing;if(!g.avoidOverlap){var qt=kt.length>0&&kt[0].length>1,ne=Math.min(P.w,P.h)/2-Yt,Gt=ne/(kt.length+qt?1:0);Yt=Math.min(Yt,Gt)}for(var ge=0,be=0;be1&&g.avoidOverlap){var bn=Math.cos(we)-Math.cos(0),ze=Math.sin(we)-Math.sin(0),Ge=Math.sqrt(Yt*Yt/(bn*bn+ze*ze));ge=Math.max(Ge,ge)}ie.r=ge,ge+=Yt}if(g.equidistant){for(var En=0,In=0,Yn=0;Yn=y.numIter||(XJ(T,y),T.temperature=T.temperature*y.coolingFactor,T.temperature=y.animationThreshold&&O(),Bf(Y)}};V()}else{for(;S;)S=P(q),q++;HB(T,y),$()}return this},bC.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},bC.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var VJ=function(g,x,T){for(var L=T.eles.edges(),O=T.eles.nodes(),P={isCompound:g.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:O.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:L.size(),temperature:T.initialTemp,clientWidth:g.width(),clientHeight:g.width(),boundingBox:zd(T.boundingBox?T.boundingBox:{x1:0,y1:0,w:g.width(),h:g.height()})},$=T.eles.components(),q={},S=0;S<$.length;S++)for(var V=$[S],Y=0;Y0){P.graphSet.push(qt);for(var S=0;SL.count?0:L.graph},UJ=function y(g,x,T,L){var O=L.graphSet[T];if(-10)var Y=L.nodeOverlap*V,rt=Math.sqrt($*$+q*q),ot=Y*$/rt,ht=Y*q/rt;else var dt=wC(g,$,q),Lt=wC(x,-1*$,-1*q),kt=Lt.x-dt.x,Dt=Lt.y-dt.y,Pt=kt*kt+Dt*Dt,rt=Math.sqrt(Pt),Y=(g.nodeRepulsion+x.nodeRepulsion)/Pt,ot=Y*kt/rt,ht=Y*Dt/rt;g.isLocked||(g.offsetX-=ot,g.offsetY-=ht),x.isLocked||(x.offsetX+=ot,x.offsetY+=ht)}},JJ=function(g,x,T,L){if(T>0)var O=g.maxX-x.minX;else var O=x.maxX-g.minX;if(L>0)var P=g.maxY-x.minY;else var P=x.maxY-g.minY;return O>=0&&P>=0?Math.sqrt(O*O+P*P):0},wC=function(g,x,T){var L=g.positionX,O=g.positionY,P=g.height||1,$=g.width||1,q=T/x,S=P/$,V={};return x===0&&0T?(V.x=L,V.y=O+P/2,V):0x&&-1*S<=q&&q<=S?(V.x=L-$/2,V.y=O-$*T/2/x,V):0=S)?(V.x=L+P*x/2/T,V.y=O+P/2,V):(0>T&&(q<=-1*S||q>=S)&&(V.x=L-P*x/2/T,V.y=O-P/2),V)},ttt=function(g,x){for(var T=0;TT){var Lt=x.gravity*ot/dt,kt=x.gravity*ht/dt;rt.offsetX+=Lt,rt.offsetY+=kt}}}}},ntt=function(g,x){var T=[],L=0,O=-1;for(T.push.apply(T,g.graphSet[0]),O+=g.graphSet[0].length;L<=O;){var P=T[L++],$=g.idToIndex[P],q=g.layoutNodes[$],S=q.children;if(0T)var O={x:T*g/L,y:T*x/L};else var O={x:g,y:x};return O},stt=function y(g,x){var T=g.parentId;if(T!=null){var L=x.layoutNodes[x.idToIndex[T]],O=!1;if((L.maxX==null||g.maxX+L.padRight>L.maxX)&&(L.maxX=g.maxX+L.padRight,O=!0),(L.minX==null||g.minX-L.padLeftL.maxY)&&(L.maxY=g.maxY+L.padBottom,O=!0),(L.minY==null||g.minY-L.padTopkt&&(ht+=Lt+x.componentSpacing,ot=0,dt=0,Lt=0)}}},att={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(g){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(g,x){return!0},ready:void 0,stop:void 0,transform:function(g,x){return x}};function VB(y){this.options=de({},att,y)}VB.prototype.run=function(){var y=this.options,g=y,x=y.cy,T=g.eles,L=T.nodes().not(":parent");g.sort&&(L=L.sort(g.sort));var O=zd(g.boundingBox?g.boundingBox:{x1:0,y1:0,w:x.width(),h:x.height()});if(O.h===0||O.w===0)T.nodes().layoutPositions(this,g,function(rr){return{x:O.x1,y:O.y1}});else{var P=L.size(),$=Math.sqrt(P*O.h/O.w),q=Math.round($),S=Math.round(O.w/O.h*$),V=function(wr){if(wr==null)return Math.min(q,S);var ur=Math.min(q,S);ur==q?q=wr:S=wr},Y=function(wr){if(wr==null)return Math.max(q,S);var ur=Math.max(q,S);ur==q?q=wr:S=wr},rt=g.rows,ot=g.cols!=null?g.cols:g.columns;if(rt!=null&&ot!=null)q=rt,S=ot;else if(rt!=null&&ot==null)q=rt,S=Math.ceil(P/q);else if(rt==null&&ot!=null)S=ot,q=Math.ceil(P/S);else if(S*q>P){var ht=V(),dt=Y();(ht-1)*dt>=P?V(ht-1):(dt-1)*ht>=P&&Y(dt-1)}else for(;S*q=P?Y(kt+1):V(Lt+1)}var Dt=O.w/S,Pt=O.h/q;if(g.condense&&(Dt=0,Pt=0),g.avoidOverlap)for(var $t=0;$t=S&&(bn=0,we++)},Ge={},En=0;En(bn=GK(y,g,ze[Ge],ze[Ge+1],ze[Ge+2],ze[Ge+3])))return Lt(qt,bn),!0}else if(Gt.edgeType==="bezier"||Gt.edgeType==="multibezier"||Gt.edgeType==="self"||Gt.edgeType==="compound"){for(var ze=Gt.allpts,Ge=0;Ge+5(bn=VK(y,g,ze[Ge],ze[Ge+1],ze[Ge+2],ze[Ge+3],ze[Ge+4],ze[Ge+5])))return Lt(qt,bn),!0}for(var En=En||ne.source,In=In||ne.target,Yn=L.getArrowWidth(ge,be),Sn=[{name:"source",x:Gt.arrowStartX,y:Gt.arrowStartY,angle:Gt.srcArrowAngle},{name:"target",x:Gt.arrowEndX,y:Gt.arrowEndY,angle:Gt.tgtArrowAngle},{name:"mid-source",x:Gt.midX,y:Gt.midY,angle:Gt.midsrcArrowAngle},{name:"mid-target",x:Gt.midX,y:Gt.midY,angle:Gt.midtgtArrowAngle}],Ge=0;Ge0&&(kt(En),kt(In))}function Pt(qt,ne,Gt){return yp(qt,ne,Gt)}function $t(qt,ne){var Gt=qt._private,ge=rt,be;ne?be=ne+"-":be="",qt.boundingBox();var ie=Gt.labelBounds[ne||"main"],Fe=qt.pstyle(be+"label").value,we=qt.pstyle("text-events").strValue==="yes";if(!(!we||!Fe)){var bn=Pt(Gt.rscratch,"labelX",ne),ze=Pt(Gt.rscratch,"labelY",ne),Ge=Pt(Gt.rscratch,"labelAngle",ne),En=qt.pstyle(be+"text-margin-x").pfValue,In=qt.pstyle(be+"text-margin-y").pfValue,Yn=ie.x1-ge-En,Sn=ie.x2+ge-En,Wn=ie.y1-ge-In,rr=ie.y2+ge-In;if(Ge){var wr=Math.cos(Ge),ur=Math.sin(Ge),er=function(Ea,Ci){return Ea=Ea-bn,Ci=Ci-ze,{x:Ea*wr-Ci*ur+bn,y:Ea*ur+Ci*wr+ze}},vn=er(Yn,Wn),gr=er(Yn,rr),fr=er(Sn,Wn),Jr=er(Sn,rr),vi=[vn.x+En,vn.y+In,fr.x+En,fr.y+In,Jr.x+En,Jr.y+In,gr.x+En,gr.y+In];if(qd(y,g,vi))return Lt(qt),!0}else if(Q5(ie,y,g))return Lt(qt),!0}}for(var Zt=P.length-1;Zt>=0;Zt--){var Yt=P[Zt];Yt.isNode()?kt(Yt)||$t(Yt):Dt(Yt)||$t(Yt)||$t(Yt,"source")||$t(Yt,"target")}return $},D3.getAllInBox=function(y,g,x,T){var L=this.getCachedZSortedEles().interactive,O=[],P=Math.min(y,x),$=Math.max(y,x),q=Math.min(g,T),S=Math.max(g,T);y=P,x=$,g=q,T=S;for(var V=zd({x1:y,y1:g,x2:x,y2:T}),Y=0;Y0?Math.max(Yi-Fo,0):Math.min(Yi+Fo,0)},Fe=ie(ge,ne),we=ie(be,Gt),bn=!1;Dt===S?kt=Math.abs(Fe)>Math.abs(we)?L:T:Dt===q||Dt===$?(kt=T,bn=!0):(Dt===O||Dt===P)&&(kt=L,bn=!0);var ze=kt===T,Ge=ze?we:Fe,En=ze?be:ge,In=uN(En),Yn=!1;!(bn&&($t||Yt))&&(Dt===$&&En<0||Dt===q&&En>0||Dt===O&&En>0||Dt===P&&En<0)&&(In*=-1,Ge=In*Math.abs(Ge),Yn=!0);var Sn;if($t){var Wn=Zt<0?1+Zt:Zt;Sn=Wn*Ge}else{var rr=Zt<0?Ge:0;Sn=rr+Zt*In}var wr=function(Yi){return Math.abs(Yi)=Math.abs(Ge)},ur=wr(Sn),er=wr(Math.abs(Ge)-Math.abs(Sn)),vn=ur||er;if(vn&&!Yn)if(ze){var gr=Math.abs(En)<=rt/2,fr=Math.abs(ge)<=ot/2;if(gr){var Jr=(V.x1+V.x2)/2,vi=V.y1,Xs=V.y2;x.segpts=[Jr,vi,Jr,Xs]}else if(fr){var Ea=(V.y1+V.y2)/2,Ci=V.x1,hi=V.x2;x.segpts=[Ci,Ea,hi,Ea]}else x.segpts=[V.x1,V.y2]}else{var gs=Math.abs(En)<=Y/2,qi=Math.abs(be)<=ht/2;if(gs){var Si=(V.y1+V.y2)/2,Ui=V.x1,Va=V.x2;x.segpts=[Ui,Si,Va,Si]}else if(qi){var Qs=(V.x1+V.x2)/2,qs=V.y1,Tr=V.y2;x.segpts=[Qs,qs,Qs,Tr]}else x.segpts=[V.x2,V.y1]}else if(ze){var Qt=V.y1+Sn+(Lt?rt/2*In:0),jn=V.x1,Sr=V.x2;x.segpts=[jn,Qt,Sr,Qt]}else{var ir=V.x1+Sn+(Lt?Y/2*In:0),sr=V.y1,Ia=V.y2;x.segpts=[ir,sr,ir,Ia]}},od.tryToCorrectInvalidPoints=function(y,g){var x=y._private.rscratch;if(x.edgeType==="bezier"){var T=g.srcPos,L=g.tgtPos,O=g.srcW,P=g.srcH,$=g.tgtW,q=g.tgtH,S=g.srcShape,V=g.tgtShape,Y=!X(x.startX)||!X(x.startY),rt=!X(x.arrowStartX)||!X(x.arrowStartY),ot=!X(x.endX)||!X(x.endY),ht=!X(x.arrowEndX)||!X(x.arrowEndY),dt=3,Lt=this.getArrowWidth(y.pstyle("width").pfValue,y.pstyle("arrow-scale").value)*this.arrowShapeWidth,kt=dt*Lt,Dt=C3({x:x.ctrlpts[0],y:x.ctrlpts[1]},{x:x.startX,y:x.startY}),Pt=Dtwe.poolIndex()){var bn=Fe;Fe=we,we=bn}var ze=Gt.srcPos=Fe.position(),Ge=Gt.tgtPos=we.position(),En=Gt.srcW=Fe.outerWidth(),In=Gt.srcH=Fe.outerHeight(),Yn=Gt.tgtW=we.outerWidth(),Sn=Gt.tgtH=we.outerHeight(),Wn=Gt.srcShape=x.nodeShapes[g.getNodeShape(Fe)],rr=Gt.tgtShape=x.nodeShapes[g.getNodeShape(we)];Gt.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var wr=0;wr0){var gr=O,fr=_3(gr,K5(x)),Jr=_3(gr,K5(vn)),vi=fr;if(Jr2){var Xs=_3(gr,{x:vn[2],y:vn[3]});Xs0){var jn=P,Sr=_3(jn,K5(x)),ir=_3(jn,K5(Qt)),sr=Sr;if(ir2){var Ia=_3(jn,{x:Qt[2],y:Qt[3]});Ia=ht||qt){Lt={cp:$t,segment:Yt};break}}if(Lt)break}var ne=Lt.cp,Gt=Lt.segment,ge=(ht-kt)/Gt.length,be=Gt.t1-Gt.t0,ie=ot?Gt.t0+be*ge:Gt.t1-be*ge;ie=_k(0,ie,1),g=X5(ne.p0,ne.p1,ne.p2,ie),rt=JB(ne.p0,ne.p1,ne.p2,ie);break}case"straight":case"segments":case"haystack":{for(var Fe=0,we,bn,ze,Ge,En=T.allpts.length,In=0;In+3=ht));In+=2);var Yn=ht-bn,Sn=Yn/we;Sn=_k(0,Sn,1),g=PK(ze,Ge,Sn),rt=ZB(ze,Ge);break}}P("labelX",Y,g.x),P("labelY",Y,g.y),P("labelAutoAngle",Y,rt)}};S("source"),S("target"),this.applyLabelDimensions(y)}},Tp.applyLabelDimensions=function(y){this.applyPrefixedLabelDimensions(y),y.isEdge()&&(this.applyPrefixedLabelDimensions(y,"source"),this.applyPrefixedLabelDimensions(y,"target"))},Tp.applyPrefixedLabelDimensions=function(y,g){var x=y._private,T=this.getLabelText(y,g),L=this.calculateLabelDimensions(y,T),O=y.pstyle("line-height").pfValue,P=y.pstyle("text-wrap").strValue,$=yp(x.rscratch,"labelWrapCachedLines",g)||[],q=P!=="wrap"?1:Math.max($.length,1),S=L.height/q,V=S*O,Y=L.width,rt=L.height+(q-1)*(O-1)*S;mm(x.rstyle,"labelWidth",g,Y),mm(x.rscratch,"labelWidth",g,Y),mm(x.rstyle,"labelHeight",g,rt),mm(x.rscratch,"labelHeight",g,rt),mm(x.rscratch,"labelLineHeight",g,V)},Tp.getLabelText=function(y,g){var x=y._private,T=g?g+"-":"",L=y.pstyle(T+"label").strValue,O=y.pstyle("text-transform").value,P=function(Yn,Sn){return Sn?(mm(x.rscratch,Yn,g,Sn),Sn):yp(x.rscratch,Yn,g)};if(!L)return"";O=="none"||(O=="uppercase"?L=L.toUpperCase():O=="lowercase"&&(L=L.toLowerCase()));var $=y.pstyle("text-wrap").value;if($==="wrap"){var q=P("labelKey");if(q!=null&&P("labelWrapKey")===q)return P("labelWrapCachedText");for(var S="​",V=L.split(` -`),Y=y.pstyle("text-max-width").pfValue,rt=y.pstyle("text-overflow-wrap").value,ot=rt==="anywhere",ht=[],dt=/[\s\u200b]+/,Lt=ot?"":" ",kt=0;ktY){for(var Yt=Dt.split(dt),qt="",ne=0;neFe)break;we+=L[Ge],Ge===L.length-1&&(ze=!0)}return ze||(we+=bn),we}return L},Tp.getLabelJustification=function(y){var g=y.pstyle("text-justification").strValue,x=y.pstyle("text-halign").strValue;if(g==="auto")if(y.isNode())switch(x){case"left":return"right";case"right":return"left";default:return"center"}else return"center";else return g},Tp.calculateLabelDimensions=function(y,g){var x=this,T=rd(g,y._private.labelDimsKey),L=x.labelDimCache||(x.labelDimCache=[]),O=L[T];if(O!=null)return O;var P=0,$=y.pstyle("font-style").strValue,q=y.pstyle("font-size").pfValue,S=y.pstyle("font-family").strValue,V=y.pstyle("font-weight").strValue,Y=this.labelCalcCanvas,rt=this.labelCalcCanvasContext;if(!Y){Y=this.labelCalcCanvas=document.createElement("canvas"),rt=this.labelCalcCanvasContext=Y.getContext("2d");var ot=Y.style;ot.position="absolute",ot.left="-9999px",ot.top="-9999px",ot.zIndex="-1",ot.visibility="hidden",ot.pointerEvents="none"}rt.font="".concat($," ").concat(V," ").concat(q,"px ").concat(S);for(var ht=0,dt=0,Lt=g.split(` -`),kt=0;kt1&&arguments[1]!==void 0?arguments[1]:!0;if(g.merge(P),$)for(var q=0;q=y.desktopTapThreshold2}var mw=T(Qt);qf&&(y.hoverData.tapholdCancelled=!0);var Lm=function(){var Yb=y.hoverData.dragDelta=y.hoverData.dragDelta||[];Yb.length===0?(Yb.push(Ja[0]),Yb.push(Ja[1])):(Yb[0]+=Ja[0],Yb[1]+=Ja[1])};Sr=!0,x(Za,["mousemove","vmousemove","tapdrag"],Qt,{x:$r[0],y:$r[1]});var xx=function(){y.data.bgActivePosistion=void 0,y.hoverData.selecting||ir.emit({originalEvent:Qt,type:"boxstart",position:{x:$r[0],y:$r[1]}}),Pc[4]=1,y.hoverData.selecting=!0,y.redrawHint("select",!0),y.redraw()};if(y.hoverData.which===3){if(qf){var F3={originalEvent:Qt,type:"cxtdrag",position:{x:$r[0],y:$r[1]}};Ta?Ta.emit(F3):ir.emit(F3),y.hoverData.cxtDragged=!0,(!y.hoverData.cxtOver||Za!==y.hoverData.cxtOver)&&(y.hoverData.cxtOver&&y.hoverData.cxtOver.emit({originalEvent:Qt,type:"cxtdragout",position:{x:$r[0],y:$r[1]}}),y.hoverData.cxtOver=Za,Za&&Za.emit({originalEvent:Qt,type:"cxtdragover",position:{x:$r[0],y:$r[1]}}))}}else if(y.hoverData.dragging){if(Sr=!0,ir.panningEnabled()&&ir.userPanningEnabled()){var kx;if(y.hoverData.justStartedPan){var SC=y.hoverData.mdownPos;kx={x:($r[0]-SC[0])*sr,y:($r[1]-SC[1])*sr},y.hoverData.justStartedPan=!1}else kx={x:Ja[0]*sr,y:Ja[1]*sr};ir.panBy(kx),ir.emit("dragpan"),y.hoverData.dragged=!0}$r=y.projectIntoViewport(Qt.clientX,Qt.clientY)}else if(Pc[4]==1&&(Ta==null||Ta.pannable())){if(qf){if(!y.hoverData.dragging&&ir.boxSelectionEnabled()&&(mw||!ir.panningEnabled()||!ir.userPanningEnabled()))xx();else if(!y.hoverData.selecting&&ir.panningEnabled()&&ir.userPanningEnabled()){var N3=L(Ta,y.hoverData.downs);N3&&(y.hoverData.dragging=!0,y.hoverData.justStartedPan=!0,Pc[4]=0,y.data.bgActivePosistion=K5(Yi),y.redrawHint("select",!0),y.redraw())}Ta&&Ta.pannable()&&Ta.active()&&Ta.unactivate()}}else{if(Ta&&Ta.pannable()&&Ta.active()&&Ta.unactivate(),(!Ta||!Ta.grabbed())&&Za!=mc&&(mc&&x(mc,["mouseout","tapdragout"],Qt,{x:$r[0],y:$r[1]}),Za&&x(Za,["mouseover","tapdragover"],Qt,{x:$r[0],y:$r[1]}),y.hoverData.last=Za),Ta)if(qf){if(ir.boxSelectionEnabled()&&mw)Ta&&Ta.grabbed()&&(dt(ml),Ta.emit("freeon"),ml.emit("free"),y.dragData.didDrag&&(Ta.emit("dragfreeon"),ml.emit("dragfree"))),xx();else if(Ta&&Ta.grabbed()&&y.nodeIsDraggable(Ta)){var Hd=!y.dragData.didDrag;Hd&&y.redrawHint("eles",!0),y.dragData.didDrag=!0,y.hoverData.draggingEles||ot(ml,{inDragLayer:!0});var y1={x:0,y:0};if(X(Ja[0])&&X(Ja[1])&&(y1.x+=Ja[0],y1.y+=Ja[1],Hd)){var Vd=y.hoverData.dragDelta;Vd&&X(Vd[0])&&X(Vd[1])&&(y1.x+=Vd[0],y1.y+=Vd[1])}y.hoverData.draggingEles=!0,ml.silentShift(y1).emit("position drag"),y.redrawHint("drag",!0),y.redraw()}}else Lm();Sr=!0}if(Pc[2]=$r[0],Pc[3]=$r[1],Sr)return Qt.stopPropagation&&Qt.stopPropagation(),Qt.preventDefault&&Qt.preventDefault(),!1}},!1);var Gt,ge,be;y.registerBinding(window,"mouseup",function(Qt){var jn=y.hoverData.capture;if(jn){y.hoverData.capture=!1;var Sr=y.cy,ir=y.projectIntoViewport(Qt.clientX,Qt.clientY),sr=y.selection,Ia=y.findNearestElement(ir[0],ir[1],!0,!1),$r=y.dragData.possibleDragElements,Yi=y.hoverData.down,Fo=T(Qt);if(y.data.bgActivePosistion&&(y.redrawHint("select",!0),y.redraw()),y.hoverData.tapholdCancelled=!0,y.data.bgActivePosistion=void 0,Yi&&Yi.unactivate(),y.hoverData.which===3){var Pc={originalEvent:Qt,type:"cxttapend",position:{x:ir[0],y:ir[1]}};if(Yi?Yi.emit(Pc):Sr.emit(Pc),!y.hoverData.cxtDragged){var Za={originalEvent:Qt,type:"cxttap",position:{x:ir[0],y:ir[1]}};Yi?Yi.emit(Za):Sr.emit(Za)}y.hoverData.cxtDragged=!1,y.hoverData.which=null}else if(y.hoverData.which===1){if(x(Ia,["mouseup","tapend","vmouseup"],Qt,{x:ir[0],y:ir[1]}),!y.dragData.didDrag&&!y.hoverData.dragged&&!y.hoverData.selecting&&!y.hoverData.isOverThresholdDrag&&(x(Yi,["click","tap","vclick"],Qt,{x:ir[0],y:ir[1]}),ge=!1,Qt.timeStamp-be<=Sr.multiClickDebounceTime()?(Gt&&clearTimeout(Gt),ge=!0,be=null,x(Yi,["dblclick","dbltap","vdblclick"],Qt,{x:ir[0],y:ir[1]})):(Gt=setTimeout(function(){ge||x(Yi,["oneclick","onetap","voneclick"],Qt,{x:ir[0],y:ir[1]})},Sr.multiClickDebounceTime()),be=Qt.timeStamp)),Yi==null&&!y.dragData.didDrag&&!y.hoverData.selecting&&!y.hoverData.dragged&&!T(Qt)&&(Sr.$(g).unselect(["tapunselect"]),$r.length>0&&y.redrawHint("eles",!0),y.dragData.possibleDragElements=$r=Sr.collection()),Ia==Yi&&!y.dragData.didDrag&&!y.hoverData.selecting&&Ia!=null&&Ia._private.selectable&&(y.hoverData.dragging||(Sr.selectionType()==="additive"||Fo?Ia.selected()?Ia.unselect(["tapunselect"]):Ia.select(["tapselect"]):Fo||(Sr.$(g).unmerge(Ia).unselect(["tapunselect"]),Ia.select(["tapselect"]))),y.redrawHint("eles",!0)),y.hoverData.selecting){var mc=Sr.collection(y.getAllInBox(sr[0],sr[1],sr[2],sr[3]));y.redrawHint("select",!0),mc.length>0&&y.redrawHint("eles",!0),Sr.emit({type:"boxend",originalEvent:Qt,position:{x:ir[0],y:ir[1]}});var Ta=function(qf){return qf.selectable()&&!qf.selected()};Sr.selectionType()==="additive"||Fo||Sr.$(g).unmerge(mc).unselect(),mc.emit("box").stdFilter(Ta).select().emit("boxselect"),y.redraw()}if(y.hoverData.dragging&&(y.hoverData.dragging=!1,y.redrawHint("select",!0),y.redrawHint("eles",!0),y.redraw()),!sr[4]){y.redrawHint("drag",!0),y.redrawHint("eles",!0);var Ja=Yi&&Yi.grabbed();dt($r),Ja&&(Yi.emit("freeon"),$r.emit("free"),y.dragData.didDrag&&(Yi.emit("dragfreeon"),$r.emit("dragfree")))}}sr[4]=0,y.hoverData.down=null,y.hoverData.cxtStarted=!1,y.hoverData.draggingEles=!1,y.hoverData.selecting=!1,y.hoverData.isOverThresholdDrag=!1,y.dragData.didDrag=!1,y.hoverData.dragged=!1,y.hoverData.dragDelta=[],y.hoverData.mdownPos=null,y.hoverData.mdownGPos=null}},!1);var ie=function(Qt){if(!y.scrollingPage){var jn=y.cy,Sr=jn.zoom(),ir=jn.pan(),sr=y.projectIntoViewport(Qt.clientX,Qt.clientY),Ia=[sr[0]*Sr+ir.x,sr[1]*Sr+ir.y];if(y.hoverData.draggingEles||y.hoverData.dragging||y.hoverData.cxtStarted||qt()){Qt.preventDefault();return}if(jn.panningEnabled()&&jn.userPanningEnabled()&&jn.zoomingEnabled()&&jn.userZoomingEnabled()){Qt.preventDefault(),y.data.wheelZooming=!0,clearTimeout(y.data.wheelTimeout),y.data.wheelTimeout=setTimeout(function(){y.data.wheelZooming=!1,y.redrawHint("eles",!0),y.redraw()},150);var $r;Qt.deltaY!=null?$r=Qt.deltaY/-250:Qt.wheelDeltaY!=null?$r=Qt.wheelDeltaY/1e3:$r=Qt.wheelDelta/1e3,$r=$r*y.wheelSensitivity;var Yi=Qt.deltaMode===1;Yi&&($r*=33);var Fo=jn.zoom()*Math.pow(10,$r);Qt.type==="gesturechange"&&(Fo=y.gestureStartZoom*Qt.scale),jn.zoom({level:Fo,renderedPosition:{x:Ia[0],y:Ia[1]}}),jn.emit(Qt.type==="gesturechange"?"pinchzoom":"scrollzoom")}}};y.registerBinding(y.container,"wheel",ie,!0),y.registerBinding(window,"scroll",function(Qt){y.scrollingPage=!0,clearTimeout(y.scrollingPageTimeout),y.scrollingPageTimeout=setTimeout(function(){y.scrollingPage=!1},250)},!0),y.registerBinding(y.container,"gesturestart",function(Qt){y.gestureStartZoom=y.cy.zoom(),y.hasTouchStarted||Qt.preventDefault()},!0),y.registerBinding(y.container,"gesturechange",function(Tr){y.hasTouchStarted||ie(Tr)},!0),y.registerBinding(y.container,"mouseout",function(Qt){var jn=y.projectIntoViewport(Qt.clientX,Qt.clientY);y.cy.emit({originalEvent:Qt,type:"mouseout",position:{x:jn[0],y:jn[1]}})},!1),y.registerBinding(y.container,"mouseover",function(Qt){var jn=y.projectIntoViewport(Qt.clientX,Qt.clientY);y.cy.emit({originalEvent:Qt,type:"mouseover",position:{x:jn[0],y:jn[1]}})},!1);var Fe,we,bn,ze,Ge,En,In,Yn,Sn,Wn,rr,wr,ur,er=function(Qt,jn,Sr,ir){return Math.sqrt((Sr-Qt)*(Sr-Qt)+(ir-jn)*(ir-jn))},vn=function(Qt,jn,Sr,ir){return(Sr-Qt)*(Sr-Qt)+(ir-jn)*(ir-jn)},gr;y.registerBinding(y.container,"touchstart",gr=function(Qt){if(y.hasTouchStarted=!0,!!ne(Qt)){kt(),y.touchData.capture=!0,y.data.bgActivePosistion=void 0;var jn=y.cy,Sr=y.touchData.now,ir=y.touchData.earlier;if(Qt.touches[0]){var sr=y.projectIntoViewport(Qt.touches[0].clientX,Qt.touches[0].clientY);Sr[0]=sr[0],Sr[1]=sr[1]}if(Qt.touches[1]){var sr=y.projectIntoViewport(Qt.touches[1].clientX,Qt.touches[1].clientY);Sr[2]=sr[0],Sr[3]=sr[1]}if(Qt.touches[2]){var sr=y.projectIntoViewport(Qt.touches[2].clientX,Qt.touches[2].clientY);Sr[4]=sr[0],Sr[5]=sr[1]}if(Qt.touches[1]){y.touchData.singleTouchMoved=!0,dt(y.dragData.touchDragEles);var Ia=y.findContainerClientCoords();Sn=Ia[0],Wn=Ia[1],rr=Ia[2],wr=Ia[3],Fe=Qt.touches[0].clientX-Sn,we=Qt.touches[0].clientY-Wn,bn=Qt.touches[1].clientX-Sn,ze=Qt.touches[1].clientY-Wn,ur=0<=Fe&&Fe<=rr&&0<=bn&&bn<=rr&&0<=we&&we<=wr&&0<=ze&&ze<=wr;var $r=jn.pan(),Yi=jn.zoom();Ge=er(Fe,we,bn,ze),En=vn(Fe,we,bn,ze),In=[(Fe+bn)/2,(we+ze)/2],Yn=[(In[0]-$r.x)/Yi,(In[1]-$r.y)/Yi];var Fo=200,Pc=Fo*Fo;if(En=1){for(var _p=y.touchData.startPosition=[],Hf=0;Hf=y.touchTapThreshold2}if(jn&&y.touchData.cxt){Qt.preventDefault();var _p=Qt.touches[0].clientX-Sn,Hf=Qt.touches[0].clientY-Wn,_g=Qt.touches[1].clientX-Sn,cd=Qt.touches[1].clientY-Wn,mw=vn(_p,Hf,_g,cd),Lm=mw/En,xx=150,F3=xx*xx,kx=1.5,SC=kx*kx;if(Lm>=SC||mw>=F3){y.touchData.cxt=!1,y.data.bgActivePosistion=void 0,y.redrawHint("select",!0);var N3={originalEvent:Qt,type:"cxttapend",position:{x:sr[0],y:sr[1]}};y.touchData.start?(y.touchData.start.unactivate().emit(N3),y.touchData.start=null):ir.emit(N3)}}if(jn&&y.touchData.cxt){var N3={originalEvent:Qt,type:"cxtdrag",position:{x:sr[0],y:sr[1]}};y.data.bgActivePosistion=void 0,y.redrawHint("select",!0),y.touchData.start?y.touchData.start.emit(N3):ir.emit(N3),y.touchData.start&&(y.touchData.start._private.grabbed=!1),y.touchData.cxtDragged=!0;var Hd=y.findNearestElement(sr[0],sr[1],!0,!0);(!y.touchData.cxtOver||Hd!==y.touchData.cxtOver)&&(y.touchData.cxtOver&&y.touchData.cxtOver.emit({originalEvent:Qt,type:"cxtdragout",position:{x:sr[0],y:sr[1]}}),y.touchData.cxtOver=Hd,Hd&&Hd.emit({originalEvent:Qt,type:"cxtdragover",position:{x:sr[0],y:sr[1]}}))}else if(jn&&Qt.touches[2]&&ir.boxSelectionEnabled())Qt.preventDefault(),y.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,y.touchData.selecting||ir.emit({originalEvent:Qt,type:"boxstart",position:{x:sr[0],y:sr[1]}}),y.touchData.selecting=!0,y.touchData.didSelect=!0,Sr[4]=1,!Sr||Sr.length===0||Sr[0]===void 0?(Sr[0]=(sr[0]+sr[2]+sr[4])/3,Sr[1]=(sr[1]+sr[3]+sr[5])/3,Sr[2]=(sr[0]+sr[2]+sr[4])/3+1,Sr[3]=(sr[1]+sr[3]+sr[5])/3+1):(Sr[2]=(sr[0]+sr[2]+sr[4])/3,Sr[3]=(sr[1]+sr[3]+sr[5])/3),y.redrawHint("select",!0),y.redraw();else if(jn&&Qt.touches[1]&&!y.touchData.didSelect&&ir.zoomingEnabled()&&ir.panningEnabled()&&ir.userZoomingEnabled()&&ir.userPanningEnabled()){Qt.preventDefault(),y.data.bgActivePosistion=void 0,y.redrawHint("select",!0);var y1=y.dragData.touchDragEles;if(y1){y.redrawHint("drag",!0);for(var Vd=0;Vd0&&!y.hoverData.draggingEles&&!y.swipePanning&&y.data.bgActivePosistion!=null&&(y.data.bgActivePosistion=void 0,y.redrawHint("select",!0),y.redraw())}},!1);var Jr;y.registerBinding(window,"touchcancel",Jr=function(Qt){var jn=y.touchData.start;y.touchData.capture=!1,jn&&jn.unactivate()});var vi,Xs,Ea,Ci;if(y.registerBinding(window,"touchend",vi=function(Qt){var jn=y.touchData.start,Sr=y.touchData.capture;if(Sr)Qt.touches.length===0&&(y.touchData.capture=!1),Qt.preventDefault();else return;var ir=y.selection;y.swipePanning=!1,y.hoverData.draggingEles=!1;var sr=y.cy,Ia=sr.zoom(),$r=y.touchData.now,Yi=y.touchData.earlier;if(Qt.touches[0]){var Fo=y.projectIntoViewport(Qt.touches[0].clientX,Qt.touches[0].clientY);$r[0]=Fo[0],$r[1]=Fo[1]}if(Qt.touches[1]){var Fo=y.projectIntoViewport(Qt.touches[1].clientX,Qt.touches[1].clientY);$r[2]=Fo[0],$r[3]=Fo[1]}if(Qt.touches[2]){var Fo=y.projectIntoViewport(Qt.touches[2].clientX,Qt.touches[2].clientY);$r[4]=Fo[0],$r[5]=Fo[1]}jn&&jn.unactivate();var Pc;if(y.touchData.cxt){if(Pc={originalEvent:Qt,type:"cxttapend",position:{x:$r[0],y:$r[1]}},jn?jn.emit(Pc):sr.emit(Pc),!y.touchData.cxtDragged){var Za={originalEvent:Qt,type:"cxttap",position:{x:$r[0],y:$r[1]}};jn?jn.emit(Za):sr.emit(Za)}y.touchData.start&&(y.touchData.start._private.grabbed=!1),y.touchData.cxt=!1,y.touchData.start=null,y.redraw();return}if(!Qt.touches[2]&&sr.boxSelectionEnabled()&&y.touchData.selecting){y.touchData.selecting=!1;var mc=sr.collection(y.getAllInBox(ir[0],ir[1],ir[2],ir[3]));ir[0]=void 0,ir[1]=void 0,ir[2]=void 0,ir[3]=void 0,ir[4]=0,y.redrawHint("select",!0),sr.emit({type:"boxend",originalEvent:Qt,position:{x:$r[0],y:$r[1]}});var Ta=function(F3){return F3.selectable()&&!F3.selected()};mc.emit("box").stdFilter(Ta).select().emit("boxselect"),mc.nonempty()&&y.redrawHint("eles",!0),y.redraw()}if(jn!=null&&jn.unactivate(),Qt.touches[2])y.data.bgActivePosistion=void 0,y.redrawHint("select",!0);else if(!Qt.touches[1]){if(!Qt.touches[0]){if(!Qt.touches[0]){y.data.bgActivePosistion=void 0,y.redrawHint("select",!0);var Ja=y.dragData.touchDragEles;if(jn!=null){var ml=jn._private.grabbed;dt(Ja),y.redrawHint("drag",!0),y.redrawHint("eles",!0),ml&&(jn.emit("freeon"),Ja.emit("free"),y.dragData.didDrag&&(jn.emit("dragfreeon"),Ja.emit("dragfree"))),x(jn,["touchend","tapend","vmouseup","tapdragout"],Qt,{x:$r[0],y:$r[1]}),jn.unactivate(),y.touchData.start=null}else{var qf=y.findNearestElement($r[0],$r[1],!0,!0);x(qf,["touchend","tapend","vmouseup","tapdragout"],Qt,{x:$r[0],y:$r[1]})}var Cp=y.touchData.startPosition[0]-$r[0],_p=Cp*Cp,Hf=y.touchData.startPosition[1]-$r[1],_g=Hf*Hf,cd=_p+_g,mw=cd*Ia*Ia;y.touchData.singleTouchMoved||(jn||sr.$(":selected").unselect(["tapunselect"]),x(jn,["tap","vclick"],Qt,{x:$r[0],y:$r[1]}),Xs=!1,Qt.timeStamp-Ci<=sr.multiClickDebounceTime()?(Ea&&clearTimeout(Ea),Xs=!0,Ci=null,x(jn,["dbltap","vdblclick"],Qt,{x:$r[0],y:$r[1]})):(Ea=setTimeout(function(){Xs||x(jn,["onetap","voneclick"],Qt,{x:$r[0],y:$r[1]})},sr.multiClickDebounceTime()),Ci=Qt.timeStamp)),jn!=null&&!y.dragData.didDrag&&jn._private.selectable&&mw"u"){var hi=[],gs=function(Qt){return{clientX:Qt.clientX,clientY:Qt.clientY,force:1,identifier:Qt.pointerId,pageX:Qt.pageX,pageY:Qt.pageY,radiusX:Qt.width/2,radiusY:Qt.height/2,screenX:Qt.screenX,screenY:Qt.screenY,target:Qt.target}},qi=function(Qt){return{event:Qt,touch:gs(Qt)}},Si=function(Qt){hi.push(qi(Qt))},Ui=function(Qt){for(var jn=0;jn0)return Sn[0]}return null},ot=Object.keys(Y),ht=0;ht0?rt:fN(O,P,g,x,T,L,$)},checkPoint:function(g,x,T,L,O,P,$){var q=Lk(L,O),S=2*q;if(dw(g,x,this.points,P,$,L,O-S,[0,-1],T)||dw(g,x,this.points,P,$,L-S,O,[0,-1],T))return!0;var V=L/2+2*T,Y=O/2+2*T,rt=[P-V,$-Y,P-V,$,P+V,$,P+V,$-Y];return!!(qd(g,x,rt)||S3(g,x,S,S,P+L/2-q,$+O/2-q,T)||S3(g,x,S,S,P-L/2+q,$+O/2-q,T))}}},bw.registerNodeShapes=function(){var y=this.nodeShapes={},g=this;this.generateEllipse(),this.generatePolygon("triangle",sd(3,0)),this.generateRoundPolygon("round-triangle",sd(3,0)),this.generatePolygon("rectangle",sd(4,0)),y.square=y.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();{var x=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",x),this.generateRoundPolygon("round-diamond",x)}this.generatePolygon("pentagon",sd(5,0)),this.generateRoundPolygon("round-pentagon",sd(5,0)),this.generatePolygon("hexagon",sd(6,0)),this.generateRoundPolygon("round-hexagon",sd(6,0)),this.generatePolygon("heptagon",sd(7,0)),this.generateRoundPolygon("round-heptagon",sd(7,0)),this.generatePolygon("octagon",sd(8,0)),this.generateRoundPolygon("round-octagon",sd(8,0));var T=new Array(20);{var L=ML(5,0),O=ML(5,Math.PI/5),P=.5*(3-Math.sqrt(5));P*=1.57;for(var $=0;$=g.deqFastCost*$t)break}else if(S){if(Dt>=g.deqCost*ot||Dt>=g.deqAvgCost*rt)break}else if(Pt>=g.deqNoDrawCost*rM)break;var Zt=g.deq(T,Lt,dt);if(Zt.length>0)for(var Yt=0;Yt0&&(g.onDeqd(T,ht),!S&&g.shouldRedraw(T,ht,Lt,dt)&&O())},$=g.priority||EL;L.beforeRender(P,$(T))}}}},dtt=function(){function y(g){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:wm;p(this,y),this.idsByKey=new Gb,this.keyForId=new Gb,this.cachesByLvl=new Gb,this.lvls=[],this.getKey=g,this.doesEleInvalidateKey=x}return m(y,[{key:"getIdsFor",value:function(x){x==null&&vl("Can not get id list for null key");var T=this.idsByKey,L=this.idsByKey.get(x);return L||(L=new Y5,T.set(x,L)),L}},{key:"addIdForKey",value:function(x,T){x!=null&&this.getIdsFor(x).add(T)}},{key:"deleteIdForKey",value:function(x,T){x!=null&&this.getIdsFor(x).delete(T)}},{key:"getNumberOfIdsForKey",value:function(x){return x==null?0:this.getIdsFor(x).size}},{key:"updateKeyMappingFor",value:function(x){var T=x.id(),L=this.keyForId.get(T),O=this.getKey(x);this.deleteIdForKey(L,T),this.addIdForKey(O,T),this.keyForId.set(T,O)}},{key:"deleteKeyMappingFor",value:function(x){var T=x.id(),L=this.keyForId.get(T);this.deleteIdForKey(L,T),this.keyForId.delete(T)}},{key:"keyHasChangedFor",value:function(x){var T=x.id(),L=this.keyForId.get(T),O=this.getKey(x);return L!==O}},{key:"isInvalid",value:function(x){return this.keyHasChangedFor(x)||this.doesEleInvalidateKey(x)}},{key:"getCachesAt",value:function(x){var T=this.cachesByLvl,L=this.lvls,O=T.get(x);return O||(O=new Gb,T.set(x,O),L.push(x)),O}},{key:"getCache",value:function(x,T){return this.getCachesAt(T).get(x)}},{key:"get",value:function(x,T){var L=this.getKey(x),O=this.getCache(L,T);return O!=null&&this.updateKeyMappingFor(x),O}},{key:"getForCachedKey",value:function(x,T){var L=this.keyForId.get(x.id()),O=this.getCache(L,T);return O}},{key:"hasCache",value:function(x,T){return this.getCachesAt(T).has(x)}},{key:"has",value:function(x,T){var L=this.getKey(x);return this.hasCache(L,T)}},{key:"setCache",value:function(x,T,L){L.key=x,this.getCachesAt(T).set(x,L)}},{key:"set",value:function(x,T,L){var O=this.getKey(x);this.setCache(O,T,L),this.updateKeyMappingFor(x)}},{key:"deleteCache",value:function(x,T){this.getCachesAt(T).delete(x)}},{key:"delete",value:function(x,T){var L=this.getKey(x);this.deleteCache(L,T)}},{key:"invalidateKey",value:function(x){var T=this;this.lvls.forEach(function(L){return T.deleteCache(x,L)})}},{key:"invalidate",value:function(x){var T=x.id(),L=this.keyForId.get(T);this.deleteKeyMappingFor(x);var O=this.doesEleInvalidateKey(x);return O&&this.invalidateKey(L),O||this.getNumberOfIdsForKey(L)===0}}]),y}(),xC=25,kC=50,px=-4,iM=3,sM=7.99,gtt=8,ptt=1024,btt=1024,rR=1024,wtt=.2,vtt=.8,mtt=10,ytt=.15,xtt=.1,ktt=.9,Ett=.9,Ttt=100,Ctt=1,bx={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},_tt=Rf({getKey:null,doesEleInvalidateKey:wm,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:T3,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),Kk=function(g,x){var T=this;T.renderer=g,T.onDequeues=[];var L=_tt(x);de(T,L),T.lookup=new dtt(L.getKey,L.doesEleInvalidateKey),T.setupDequeueing()},Th=Kk.prototype;Th.reasons=bx,Th.getTextureQueue=function(y){var g=this;return g.eleImgCaches=g.eleImgCaches||{},g.eleImgCaches[y]=g.eleImgCaches[y]||[]},Th.getRetiredTextureQueue=function(y){var g=this,x=g.eleImgCaches.retired=g.eleImgCaches.retired||{},T=x[y]=x[y]||[];return T},Th.getElementQueue=function(){var y=this,g=y.eleCacheQueue=y.eleCacheQueue||new Ck(function(x,T){return T.reqs-x.reqs});return g},Th.getElementKeyToQueue=function(){var y=this,g=y.eleKeyToCacheQueue=y.eleKeyToCacheQueue||{};return g},Th.getElement=function(y,g,x,T,L){var O=this,P=this.renderer,$=P.cy.zoom(),q=this.lookup;if(!g||g.w===0||g.h===0||isNaN(g.w)||isNaN(g.h)||!y.visible()||y.removed()||!O.allowEdgeTxrCaching&&y.isEdge()||!O.allowParentTxrCaching&&y.isParent())return null;if(T==null&&(T=Math.ceil(_L($*x))),T=sM||T>iM)return null;var S=Math.pow(2,T),V=g.h*S,Y=g.w*S,rt=P.eleTextBiggerThanMin(y,S);if(!this.isVisible(y,rt))return null;var ot=q.get(y,T);if(ot&&ot.invalidated&&(ot.invalidated=!1,ot.texture.invalidatedWidth-=ot.width),ot)return ot;var ht;if(V<=xC?ht=xC:V<=kC?ht=kC:ht=Math.ceil(V/kC)*kC,V>rR||Y>btt)return null;var dt=O.getTextureQueue(ht),Lt=dt[dt.length-2],kt=function(){return O.recycleTexture(ht,Y)||O.addTexture(ht,Y)};Lt||(Lt=dt[dt.length-1]),Lt||(Lt=kt()),Lt.width-Lt.usedWidthT;be--)Gt=O.getElement(y,g,x,be,bx.downscale);ge()}else return O.queueElement(y,Yt.level-1),Yt;else{var ie;if(!Pt&&!$t&&!Zt)for(var Fe=T-1;Fe>=px;Fe--){var we=q.get(y,Fe);if(we){ie=we;break}}if(Dt(ie))return O.queueElement(y,T),ie;Lt.context.translate(Lt.usedWidth,0),Lt.context.scale(S,S),this.drawElement(Lt.context,y,g,rt,!1),Lt.context.scale(1/S,1/S),Lt.context.translate(-Lt.usedWidth,0)}return ot={x:Lt.usedWidth,texture:Lt,level:T,scale:S,width:Y,height:V,scaledLabelShown:rt},Lt.usedWidth+=Math.ceil(Y+gtt),Lt.eleCaches.push(ot),q.set(y,T,ot),O.checkTextureFullness(Lt),ot},Th.invalidateElements=function(y){for(var g=0;g=wtt*y.width&&this.retireTexture(y)},Th.checkTextureFullness=function(y){var g=this,x=g.getTextureQueue(y.height);y.usedWidth/y.width>vtt&&y.fullnessChecks>=mtt?vm(x,y):y.fullnessChecks++},Th.retireTexture=function(y){var g=this,x=y.height,T=g.getTextureQueue(x),L=this.lookup;vm(T,y),y.retired=!0;for(var O=y.eleCaches,P=0;P=g)return P.retired=!1,P.usedWidth=0,P.invalidatedWidth=0,P.fullnessChecks=0,TL(P.eleCaches),P.context.setTransform(1,0,0,1,0,0),P.context.clearRect(0,0,P.width,P.height),vm(L,P),T.push(P),P}},Th.queueElement=function(y,g){var x=this,T=x.getElementQueue(),L=x.getElementKeyToQueue(),O=this.getKey(y),P=L[O];if(P)P.level=Math.max(P.level,g),P.eles.merge(y),P.reqs++,T.updateItem(P);else{var $={eles:y.spawn().merge(y),level:g,reqs:1,key:O};T.push($),L[O]=$}},Th.dequeue=function(y){for(var g=this,x=g.getElementQueue(),T=g.getElementKeyToQueue(),L=[],O=g.lookup,P=0;P0;P++){var $=x.pop(),q=$.key,S=$.eles[0],V=O.hasCache(S,$.level);if(T[q]=null,V)continue;L.push($);var Y=g.getBoundingBox(S);g.getElement(S,Y,y,$.level,bx.dequeue)}return L},Th.removeFromQueue=function(y){var g=this,x=g.getElementQueue(),T=g.getElementKeyToQueue(),L=this.getKey(y),O=T[L];O!=null&&(O.eles.length===1?(O.reqs=W5,x.updateItem(O),x.pop(),T[L]=null):O.eles.unmerge(y))},Th.onDequeue=function(y){this.onDequeues.push(y)},Th.offDequeue=function(y){vm(this.onDequeues,y)},Th.setupDequeueing=yC.setupDequeueing({deqRedrawThreshold:Ttt,deqCost:ytt,deqAvgCost:xtt,deqNoDrawCost:ktt,deqFastCost:Ett,deq:function(g,x,T){return g.dequeue(x,T)},onDeqd:function(g,x){for(var T=0;T=EC||x>Xk)return null}T.validateLayersElesOrdering(x,y);var q=T.layersByLevel,S=Math.pow(2,x),V=q[x]=q[x]||[],Y,rt=T.levelIsComplete(x,y),ot,ht=function(){var ge=function(bn){if(T.validateLayersElesOrdering(bn,y),T.levelIsComplete(bn,y))return ot=q[bn],!0},be=function(bn){if(!ot)for(var ze=x+bn;wx<=ze&&ze<=Xk&&!ge(ze);ze+=bn);};be(1),be(-1);for(var ie=V.length-1;ie>=0;ie--){var Fe=V[ie];Fe.invalid&&vm(V,Fe)}};if(!rt)ht();else return V;var dt=function(){if(!Y){Y=zd();for(var ge=0;gefpt)return null;var Fe=T.makeLayer(Y,x);if(be!=null){var we=V.indexOf(be)+1;V.splice(we,0,Fe)}else(ge.insert===void 0||ge.insert)&&V.unshift(Fe);return Fe};if(T.skipping&&!$)return null;for(var kt=null,Dt=y.length/Stt,Pt=!$,$t=0;$t=Dt||!hN(kt.bb,Zt.boundingBox()))&&(kt=Lt({insert:!0,after:kt}),!kt))return null;ot||Pt?T.queueLayer(kt,Zt):T.drawEleInLayer(kt,Zt,x,g),kt.eles.push(Zt),qt[x]=kt}return ot||(Pt?null:V)},w1.getEleLevelForLayerLevel=function(y,g){return y},w1.drawEleInLayer=function(y,g,x,T){var L=this,O=this.renderer,P=y.context,$=g.boundingBox();$.w===0||$.h===0||!g.visible()||(x=L.getEleLevelForLayerLevel(x,T),O.setImgSmoothing(P,!1),O.drawCachedElement(P,g,null,null,x,dpt),O.setImgSmoothing(P,!0))},w1.levelIsComplete=function(y,g){var x=this,T=x.layersByLevel[y];if(!T||T.length===0)return!1;for(var L=0,O=0;O0||P.invalid)return!1;L+=P.eles.length}return L===g.length},w1.validateLayersElesOrdering=function(y,g){var x=this.layersByLevel[y];if(x)for(var T=0;T0){g=!0;break}}return g},w1.invalidateElements=function(y){var g=this;y.length!==0&&(g.lastInvalidationTime=yg(),!(y.length===0||!g.haveLayers())&&g.updateElementsInLayers(y,function(T,L,O){g.invalidateLayer(T)}))},w1.invalidateLayer=function(y){if(this.lastInvalidationTime=yg(),!y.invalid){var g=y.level,x=y.eles,T=this.layersByLevel[g];vm(T,y),y.elesQueue=[],y.invalid=!0,y.replacement&&(y.replacement.invalid=!0);for(var L=0;L3&&arguments[3]!==void 0?arguments[3]:!0,L=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,O=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,P=this,$=g._private.rscratch;if(!(O&&!g.visible())&&!($.badLine||$.allpts==null||isNaN($.allpts[0]))){var q;x&&(q=x,y.translate(-q.x1,-q.y1));var S=O?g.pstyle("opacity").value:1,V=O?g.pstyle("line-opacity").value:1,Y=g.pstyle("curve-style").value,rt=g.pstyle("line-style").value,ot=g.pstyle("width").pfValue,ht=g.pstyle("line-cap").value,dt=S*V,Lt=S*V,kt=function(){var ie=arguments.length>0&&arguments[0]!==void 0?arguments[0]:dt;Y==="straight-triangle"?(P.eleStrokeStyle(y,g,ie),P.drawEdgeTrianglePath(g,y,$.allpts)):(y.lineWidth=ot,y.lineCap=ht,P.eleStrokeStyle(y,g,ie),P.drawEdgePath(g,y,$.allpts,rt),y.lineCap="butt")},Dt=function(){L&&P.drawEdgeOverlay(y,g)},Pt=function(){L&&P.drawEdgeUnderlay(y,g)},$t=function(){var ie=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Lt;P.drawArrowheads(y,g,ie)},Zt=function(){P.drawElementText(y,g,null,T)};y.lineJoin="round";var Yt=g.pstyle("ghost").value==="yes";if(Yt){var qt=g.pstyle("ghost-offset-x").pfValue,ne=g.pstyle("ghost-offset-y").pfValue,Gt=g.pstyle("ghost-opacity").value,ge=dt*Gt;y.translate(qt,ne),kt(ge),$t(ge),y.translate(-qt,-ne)}Pt(),kt(),$t(),Dt(),Zt(),x&&y.translate(q.x1,q.y1)}};var Ott=function(g){if(!["overlay","underlay"].includes(g))throw new Error("Invalid state");return function(x,T){if(T.visible()){var L=T.pstyle("".concat(g,"-opacity")).value;if(L!==0){var O=this,P=O.usePaths(),$=T._private.rscratch,q=T.pstyle("".concat(g,"-padding")).pfValue,S=2*q,V=T.pstyle("".concat(g,"-color")).value;x.lineWidth=S,$.edgeType==="self"&&!P?x.lineCap="butt":x.lineCap="round",O.colorStrokeStyle(x,V[0],V[1],V[2],L),O.drawEdgePath(T,x,$.allpts,"solid")}}}};vw.drawEdgeOverlay=Ott("overlay"),vw.drawEdgeUnderlay=Ott("underlay"),vw.drawEdgePath=function(y,g,x,T){var L=y._private.rscratch,O=g,P,$=!1,q=this.usePaths(),S=y.pstyle("line-dash-pattern").pfValue,V=y.pstyle("line-dash-offset").pfValue;if(q){var Y=x.join("$"),rt=L.pathCacheKey&&L.pathCacheKey===Y;rt?(P=g=L.pathCache,$=!0):(P=g=new Path2D,L.pathCacheKey=Y,L.pathCache=P)}if(O.setLineDash)switch(T){case"dotted":O.setLineDash([1,1]);break;case"dashed":O.setLineDash(S),O.lineDashOffset=V;break;case"solid":O.setLineDash([]);break}if(!$&&!L.badLine)switch(g.beginPath&&g.beginPath(),g.moveTo(x[0],x[1]),L.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var ot=2;ot+35&&arguments[5]!==void 0?arguments[5]:!0,P=this;if(T==null){if(O&&!P.eleTextBiggerThanMin(g))return}else if(T===!1)return;if(g.isNode()){var $=g.pstyle("label");if(!$||!$.value)return;var q=P.getLabelJustification(g);y.textAlign=q,y.textBaseline="bottom"}else{var S=g.element()._private.rscratch.badLine,V=g.pstyle("label"),Y=g.pstyle("source-label"),rt=g.pstyle("target-label");if(S||(!V||!V.value)&&(!Y||!Y.value)&&(!rt||!rt.value))return;y.textAlign="center",y.textBaseline="bottom"}var ot=!x,ht;x&&(ht=x,y.translate(-ht.x1,-ht.y1)),L==null?(P.drawText(y,g,null,ot,O),g.isEdge()&&(P.drawText(y,g,"source",ot,O),P.drawText(y,g,"target",ot,O))):P.drawText(y,g,L,ot,O),x&&y.translate(ht.x1,ht.y1)},vx.getFontCache=function(y){var g;this.fontCaches=this.fontCaches||[];for(var x=0;x2&&arguments[2]!==void 0?arguments[2]:!0,T=g.pstyle("font-style").strValue,L=g.pstyle("font-size").pfValue+"px",O=g.pstyle("font-family").strValue,P=g.pstyle("font-weight").strValue,$=x?g.effectiveOpacity()*g.pstyle("text-opacity").value:1,q=g.pstyle("text-outline-opacity").value*$,S=g.pstyle("color").value,V=g.pstyle("text-outline-color").value;y.font=T+" "+P+" "+L+" "+O,y.lineJoin="round",this.colorFillStyle(y,S[0],S[1],S[2],$),this.colorStrokeStyle(y,V[0],V[1],V[2],q)};function mpt(y,g,x,T,L){var O=arguments.length>5&&arguments[5]!==void 0?arguments[5]:5;y.beginPath(),y.moveTo(g+O,x),y.lineTo(g+T-O,x),y.quadraticCurveTo(g+T,x,g+T,x+O),y.lineTo(g+T,x+L-O),y.quadraticCurveTo(g+T,x+L,g+T-O,x+L),y.lineTo(g+O,x+L),y.quadraticCurveTo(g,x+L,g,x+L-O),y.lineTo(g,x+O),y.quadraticCurveTo(g,x,g+O,x),y.closePath(),y.fill()}vx.getTextAngle=function(y,g){var x,T=y._private,L=T.rscratch,O=g?g+"-":"",P=y.pstyle(O+"text-rotation"),$=yp(L,"labelAngle",g);return P.strValue==="autorotate"?x=y.isEdge()?$:0:P.strValue==="none"?x=0:x=P.pfValue,x},vx.drawText=function(y,g,x){var T=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,L=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,O=g._private,P=O.rscratch,$=L?g.effectiveOpacity():1;if(!(L&&($===0||g.pstyle("text-opacity").value===0))){x==="main"&&(x=null);var q=yp(P,"labelX",x),S=yp(P,"labelY",x),V,Y,rt=this.getLabelText(g,x);if(rt!=null&&rt!==""&&!isNaN(q)&&!isNaN(S)){this.setupTextStyle(y,g,L);var ot=x?x+"-":"",ht=yp(P,"labelWidth",x),dt=yp(P,"labelHeight",x),Lt=g.pstyle(ot+"text-margin-x").pfValue,kt=g.pstyle(ot+"text-margin-y").pfValue,Dt=g.isEdge(),Pt=g.pstyle("text-halign").value,$t=g.pstyle("text-valign").value;Dt&&(Pt="center",$t="center"),q+=Lt,S+=kt;var Zt;switch(T?Zt=this.getTextAngle(g,x):Zt=0,Zt!==0&&(V=q,Y=S,y.translate(V,Y),y.rotate(Zt),q=0,S=0),$t){case"top":break;case"center":S+=dt/2;break;case"bottom":S+=dt;break}var Yt=g.pstyle("text-background-opacity").value,qt=g.pstyle("text-border-opacity").value,ne=g.pstyle("text-border-width").pfValue,Gt=g.pstyle("text-background-padding").pfValue;if(Yt>0||ne>0&&qt>0){var ge=q-Gt;switch(Pt){case"left":ge-=ht;break;case"center":ge-=ht/2;break}var be=S-dt-Gt,ie=ht+2*Gt,Fe=dt+2*Gt;if(Yt>0){var we=y.fillStyle,bn=g.pstyle("text-background-color").value;y.fillStyle="rgba("+bn[0]+","+bn[1]+","+bn[2]+","+Yt*$+")";var ze=g.pstyle("text-background-shape").strValue;ze.indexOf("round")===0?mpt(y,ge,be,ie,Fe,2):y.fillRect(ge,be,ie,Fe),y.fillStyle=we}if(ne>0&&qt>0){var Ge=y.strokeStyle,En=y.lineWidth,In=g.pstyle("text-border-color").value,Yn=g.pstyle("text-border-style").value;if(y.strokeStyle="rgba("+In[0]+","+In[1]+","+In[2]+","+qt*$+")",y.lineWidth=ne,y.setLineDash)switch(Yn){case"dotted":y.setLineDash([1,1]);break;case"dashed":y.setLineDash([4,2]);break;case"double":y.lineWidth=ne/4,y.setLineDash([]);break;case"solid":y.setLineDash([]);break}if(y.strokeRect(ge,be,ie,Fe),Yn==="double"){var Sn=ne/2;y.strokeRect(ge+Sn,be+Sn,ie-Sn*2,Fe-Sn*2)}y.setLineDash&&y.setLineDash([]),y.lineWidth=En,y.strokeStyle=Ge}}var Wn=2*g.pstyle("text-outline-width").pfValue;if(Wn>0&&(y.lineWidth=Wn),g.pstyle("text-wrap").value==="wrap"){var rr=yp(P,"labelWrapCachedLines",x),wr=yp(P,"labelLineHeight",x),ur=ht/2,er=this.getLabelJustification(g);switch(er==="auto"||(Pt==="left"?er==="left"?q+=-ht:er==="center"&&(q+=-ur):Pt==="center"?er==="left"?q+=-ur:er==="right"&&(q+=ur):Pt==="right"&&(er==="center"?q+=ur:er==="right"&&(q+=ht))),$t){case"top":S-=(rr.length-1)*wr;break;case"center":case"bottom":S-=(rr.length-1)*wr;break}for(var vn=0;vn0&&y.strokeText(rr[vn],q,S),y.fillText(rr[vn],q,S),S+=wr}else Wn>0&&y.strokeText(rt,q,S),y.fillText(rt,q,S);Zt!==0&&(y.rotate(-Zt),y.translate(-V,-Y))}}};var Zk={};Zk.drawNode=function(y,g,x){var T=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,L=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,O=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,P=this,$,q,S=g._private,V=S.rscratch,Y=g.position();if(!(!X(Y.x)||!X(Y.y))&&!(O&&!g.visible())){var rt=O?g.effectiveOpacity():1,ot=P.usePaths(),ht,dt=!1,Lt=g.padding();$=g.width()+2*Lt,q=g.height()+2*Lt;var kt;x&&(kt=x,y.translate(-kt.x1,-kt.y1));for(var Dt=g.pstyle("background-image"),Pt=Dt.value,$t=new Array(Pt.length),Zt=new Array(Pt.length),Yt=0,qt=0;qt0&&arguments[0]!==void 0?arguments[0]:Fe;P.eleFillStyle(y,g,Si)},En=function(){var Si=arguments.length>0&&arguments[0]!==void 0?arguments[0]:ze;P.colorStrokeStyle(y,we[0],we[1],we[2],Si)},In=g.pstyle("shape").strValue,Yn=g.pstyle("shape-polygon-points").pfValue;if(ot){y.translate(Y.x,Y.y);var Sn=P.nodePathCache=P.nodePathCache||[],Wn=id(In==="polygon"?In+","+Yn.join(","):In,""+q,""+$),rr=Sn[Wn];rr!=null?(ht=rr,dt=!0,V.pathCache=ht):(ht=new Path2D,Sn[Wn]=V.pathCache=ht)}var wr=function(){if(!dt){var Si=Y;ot&&(Si={x:0,y:0}),P.nodeShapes[P.getNodeShape(g)].draw(ht||y,Si.x,Si.y,$,q)}ot?y.fill(ht):y.fill()},ur=function(){for(var Si=arguments.length>0&&arguments[0]!==void 0?arguments[0]:rt,Ui=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,Va=S.backgrounding,Qs=0,qs=0;qs0&&arguments[0]!==void 0?arguments[0]:!1,Ui=arguments.length>1&&arguments[1]!==void 0?arguments[1]:rt;P.hasPie(g)&&(P.drawPie(y,g,Ui),Si&&(ot||P.nodeShapes[P.getNodeShape(g)].draw(y,Y.x,Y.y,$,q)))},vn=function(){var Si=arguments.length>0&&arguments[0]!==void 0?arguments[0]:rt,Ui=(be>0?be:-be)*Si,Va=be>0?0:255;be!==0&&(P.colorFillStyle(y,Va,Va,Va,Ui),ot?y.fill(ht):y.fill())},gr=function(){if(ie>0){if(y.lineWidth=ie,y.lineCap="butt",y.setLineDash)switch(bn){case"dotted":y.setLineDash([1,1]);break;case"dashed":y.setLineDash([4,2]);break;case"solid":case"double":y.setLineDash([]);break}if(ot?y.stroke(ht):y.stroke(),bn==="double"){y.lineWidth=ie/3;var Si=y.globalCompositeOperation;y.globalCompositeOperation="destination-out",ot?y.stroke(ht):y.stroke(),y.globalCompositeOperation=Si}y.setLineDash&&y.setLineDash([])}},fr=function(){L&&P.drawNodeOverlay(y,g,Y,$,q)},Jr=function(){L&&P.drawNodeUnderlay(y,g,Y,$,q)},vi=function(){P.drawElementText(y,g,null,T)},Xs=g.pstyle("ghost").value==="yes";if(Xs){var Ea=g.pstyle("ghost-offset-x").pfValue,Ci=g.pstyle("ghost-offset-y").pfValue,hi=g.pstyle("ghost-opacity").value,gs=hi*rt;y.translate(Ea,Ci),Ge(hi*Fe),wr(),ur(gs,!0),En(hi*ze),gr(),er(be!==0||ie!==0),ur(gs,!1),vn(gs),y.translate(-Ea,-Ci)}ot&&y.translate(-Y.x,-Y.y),Jr(),ot&&y.translate(Y.x,Y.y),Ge(),wr(),ur(rt,!0),En(),gr(),er(be!==0||ie!==0),ur(rt,!1),vn(),ot&&y.translate(-Y.x,-Y.y),vi(),fr(),x&&y.translate(kt.x1,kt.y1)}};var Ptt=function(g){if(!["overlay","underlay"].includes(g))throw new Error("Invalid state");return function(x,T,L,O,P){var $=this;if(T.visible()){var q=T.pstyle("".concat(g,"-padding")).pfValue,S=T.pstyle("".concat(g,"-opacity")).value,V=T.pstyle("".concat(g,"-color")).value,Y=T.pstyle("".concat(g,"-shape")).value;if(S>0){if(L=L||T.position(),O==null||P==null){var rt=T.padding();O=T.width()+2*rt,P=T.height()+2*rt}$.colorFillStyle(x,V[0],V[1],V[2],S),$.nodeShapes[Y].draw(x,L.x,L.y,O+q*2,P+q*2),x.fill()}}}};Zk.drawNodeOverlay=Ptt("overlay"),Zk.drawNodeUnderlay=Ptt("underlay"),Zk.hasPie=function(y){return y=y[0],y._private.hasPie},Zk.drawPie=function(y,g,x,T){g=g[0],T=T||g.position();var L=g.cy().style(),O=g.pstyle("pie-size"),P=T.x,$=T.y,q=g.width(),S=g.height(),V=Math.min(q,S)/2,Y=0,rt=this.usePaths();rt&&(P=0,$=0),O.units==="%"?V=V*O.pfValue:O.pfValue!==void 0&&(V=O.pfValue/2);for(var ot=1;ot<=L.pieBackgroundN;ot++){var ht=g.pstyle("pie-"+ot+"-background-size").value,dt=g.pstyle("pie-"+ot+"-background-color").value,Lt=g.pstyle("pie-"+ot+"-background-opacity").value*x,kt=ht/100;kt+Y>1&&(kt=1-Y);var Dt=1.5*Math.PI+2*Math.PI*Y,Pt=2*Math.PI*kt,$t=Dt+Pt;ht===0||Y>=1||Y+kt>1||(y.beginPath(),y.moveTo(P,$),y.arc(P,$,V,Dt,$t),y.closePath(),this.colorFillStyle(y,dt[0],dt[1],dt[2],Lt),y.fill(),Y+=kt)}};var Tg={},ypt=100;Tg.getPixelRatio=function(){var y=this.data.contexts[0];if(this.forcedPixelRatio!=null)return this.forcedPixelRatio;var g=y.backingStorePixelRatio||y.webkitBackingStorePixelRatio||y.mozBackingStorePixelRatio||y.msBackingStorePixelRatio||y.oBackingStorePixelRatio||y.backingStorePixelRatio||1;return(window.devicePixelRatio||1)/g},Tg.paintCache=function(y){for(var g=this.paintCaches=this.paintCaches||[],x=!0,T,L=0;LP.minMbLowQualFrames&&(P.motionBlurPxRatio=P.mbPxRBlurry)),P.clearingMotionBlur&&(P.motionBlurPxRatio=1),P.textureDrawLastFrame&&!Y&&(V[P.NODE]=!0,V[P.SELECT_BOX]=!0);var Dt=q.style(),Pt=q.zoom(),$t=L!==void 0?L:Pt,Zt=q.pan(),Yt={x:Zt.x,y:Zt.y},qt={zoom:Pt,pan:{x:Zt.x,y:Zt.y}},ne=P.prevViewport,Gt=ne===void 0||qt.zoom!==ne.zoom||qt.pan.x!==ne.pan.x||qt.pan.y!==ne.pan.y;!Gt&&!(dt&&!ht)&&(P.motionBlurPxRatio=1),O&&(Yt=O),$t*=$,Yt.x*=$,Yt.y*=$;var ge=P.getCachedZSortedEles();function be(Ci,hi,gs,qi,Si){var Ui=Ci.globalCompositeOperation;Ci.globalCompositeOperation="destination-out",P.colorFillStyle(Ci,255,255,255,P.motionBlurTransparency),Ci.fillRect(hi,gs,qi,Si),Ci.globalCompositeOperation=Ui}function ie(Ci,hi){var gs,qi,Si,Ui;!P.clearingMotionBlur&&(Ci===S.bufferContexts[P.MOTIONBLUR_BUFFER_NODE]||Ci===S.bufferContexts[P.MOTIONBLUR_BUFFER_DRAG])?(gs={x:Zt.x*ot,y:Zt.y*ot},qi=Pt*ot,Si=P.canvasWidth*ot,Ui=P.canvasHeight*ot):(gs=Yt,qi=$t,Si=P.canvasWidth,Ui=P.canvasHeight),Ci.setTransform(1,0,0,1,0,0),hi==="motionBlur"?be(Ci,0,0,Si,Ui):!g&&(hi===void 0||hi)&&Ci.clearRect(0,0,Si,Ui),x||(Ci.translate(gs.x,gs.y),Ci.scale(qi,qi)),O&&Ci.translate(O.x,O.y),L&&Ci.scale(L,L)}if(Y||(P.textureDrawLastFrame=!1),Y){if(P.textureDrawLastFrame=!0,!P.textureCache){P.textureCache={},P.textureCache.bb=q.mutableElements().boundingBox(),P.textureCache.texture=P.data.bufferCanvases[P.TEXTURE_BUFFER];var Fe=P.data.bufferContexts[P.TEXTURE_BUFFER];Fe.setTransform(1,0,0,1,0,0),Fe.clearRect(0,0,P.canvasWidth*P.textureMult,P.canvasHeight*P.textureMult),P.render({forcedContext:Fe,drawOnlyNodeLayer:!0,forcedPxRatio:$*P.textureMult});var qt=P.textureCache.viewport={zoom:q.zoom(),pan:q.pan(),width:P.canvasWidth,height:P.canvasHeight};qt.mpan={x:(0-qt.pan.x)/qt.zoom,y:(0-qt.pan.y)/qt.zoom}}V[P.DRAG]=!1,V[P.NODE]=!1;var we=S.contexts[P.NODE],bn=P.textureCache.texture,qt=P.textureCache.viewport;we.setTransform(1,0,0,1,0,0),rt?be(we,0,0,qt.width,qt.height):we.clearRect(0,0,qt.width,qt.height);var ze=Dt.core("outside-texture-bg-color").value,Ge=Dt.core("outside-texture-bg-opacity").value;P.colorFillStyle(we,ze[0],ze[1],ze[2],Ge),we.fillRect(0,0,qt.width,qt.height);var Pt=q.zoom();ie(we,!1),we.clearRect(qt.mpan.x,qt.mpan.y,qt.width/qt.zoom/$,qt.height/qt.zoom/$),we.drawImage(bn,qt.mpan.x,qt.mpan.y,qt.width/qt.zoom/$,qt.height/qt.zoom/$)}else P.textureOnViewport&&!g&&(P.textureCache=null);var En=q.extent(),In=P.pinching||P.hoverData.dragging||P.swipePanning||P.data.wheelZooming||P.hoverData.draggingEles||P.cy.animated(),Yn=P.hideEdgesOnViewport&&In,Sn=[];if(Sn[P.NODE]=!V[P.NODE]&&rt&&!P.clearedForMotionBlur[P.NODE]||P.clearingMotionBlur,Sn[P.NODE]&&(P.clearedForMotionBlur[P.NODE]=!0),Sn[P.DRAG]=!V[P.DRAG]&&rt&&!P.clearedForMotionBlur[P.DRAG]||P.clearingMotionBlur,Sn[P.DRAG]&&(P.clearedForMotionBlur[P.DRAG]=!0),V[P.NODE]||x||T||Sn[P.NODE]){var Wn=rt&&!Sn[P.NODE]&&ot!==1,we=g||(Wn?P.data.bufferContexts[P.MOTIONBLUR_BUFFER_NODE]:S.contexts[P.NODE]),rr=rt&&!Wn?"motionBlur":void 0;ie(we,rr),Yn?P.drawCachedNodes(we,ge.nondrag,$,En):P.drawLayeredElements(we,ge.nondrag,$,En),P.debug&&P.drawDebugPoints(we,ge.nondrag),!x&&!rt&&(V[P.NODE]=!1)}if(!T&&(V[P.DRAG]||x||Sn[P.DRAG])){var Wn=rt&&!Sn[P.DRAG]&&ot!==1,we=g||(Wn?P.data.bufferContexts[P.MOTIONBLUR_BUFFER_DRAG]:S.contexts[P.DRAG]);ie(we,rt&&!Wn?"motionBlur":void 0),Yn?P.drawCachedNodes(we,ge.drag,$,En):P.drawCachedElements(we,ge.drag,$,En),P.debug&&P.drawDebugPoints(we,ge.drag),!x&&!rt&&(V[P.DRAG]=!1)}if(P.showFps||!T&&V[P.SELECT_BOX]&&!x){var we=g||S.contexts[P.SELECT_BOX];if(ie(we),P.selection[4]==1&&(P.hoverData.selecting||P.touchData.selecting)){var Pt=P.cy.zoom(),wr=Dt.core("selection-box-border-width").value/Pt;we.lineWidth=wr,we.fillStyle="rgba("+Dt.core("selection-box-color").value[0]+","+Dt.core("selection-box-color").value[1]+","+Dt.core("selection-box-color").value[2]+","+Dt.core("selection-box-opacity").value+")",we.fillRect(P.selection[0],P.selection[1],P.selection[2]-P.selection[0],P.selection[3]-P.selection[1]),wr>0&&(we.strokeStyle="rgba("+Dt.core("selection-box-border-color").value[0]+","+Dt.core("selection-box-border-color").value[1]+","+Dt.core("selection-box-border-color").value[2]+","+Dt.core("selection-box-opacity").value+")",we.strokeRect(P.selection[0],P.selection[1],P.selection[2]-P.selection[0],P.selection[3]-P.selection[1]))}if(S.bgActivePosistion&&!P.hoverData.selecting){var Pt=P.cy.zoom(),ur=S.bgActivePosistion;we.fillStyle="rgba("+Dt.core("active-bg-color").value[0]+","+Dt.core("active-bg-color").value[1]+","+Dt.core("active-bg-color").value[2]+","+Dt.core("active-bg-opacity").value+")",we.beginPath(),we.arc(ur.x,ur.y,Dt.core("active-bg-size").pfValue/Pt,0,2*Math.PI),we.fill()}var er=P.lastRedrawTime;if(P.showFps&&er){er=Math.round(er);var vn=Math.round(1e3/er);we.setTransform(1,0,0,1,0,0),we.fillStyle="rgba(255, 0, 0, 0.75)",we.strokeStyle="rgba(255, 0, 0, 0.75)",we.lineWidth=1,we.fillText("1 frame = "+er+" ms = "+vn+" fps",0,20);var gr=60;we.strokeRect(0,30,250,20),we.fillRect(0,30,250*Math.min(vn/gr,1),20)}x||(V[P.SELECT_BOX]=!1)}if(rt&&ot!==1){var fr=S.contexts[P.NODE],Jr=P.data.bufferCanvases[P.MOTIONBLUR_BUFFER_NODE],vi=S.contexts[P.DRAG],Xs=P.data.bufferCanvases[P.MOTIONBLUR_BUFFER_DRAG],Ea=function(hi,gs,qi){hi.setTransform(1,0,0,1,0,0),qi||!kt?hi.clearRect(0,0,P.canvasWidth,P.canvasHeight):be(hi,0,0,P.canvasWidth,P.canvasHeight);var Si=ot;hi.drawImage(gs,0,0,P.canvasWidth*Si,P.canvasHeight*Si,0,0,P.canvasWidth,P.canvasHeight)};(V[P.NODE]||Sn[P.NODE])&&(Ea(fr,Jr,Sn[P.NODE]),V[P.NODE]=!1),(V[P.DRAG]||Sn[P.DRAG])&&(Ea(vi,Xs,Sn[P.DRAG]),V[P.DRAG]=!1)}P.prevViewport=qt,P.clearingMotionBlur&&(P.clearingMotionBlur=!1,P.motionBlurCleared=!0,P.motionBlur=!0),rt&&(P.motionBlurTimeout=setTimeout(function(){P.motionBlurTimeout=null,P.clearedForMotionBlur[P.NODE]=!1,P.clearedForMotionBlur[P.DRAG]=!1,P.motionBlur=!1,P.clearingMotionBlur=!Y,P.mbFrames=0,V[P.NODE]=!0,V[P.DRAG]=!0,P.redraw()},ypt)),g||q.emit("render")};var O3={};O3.drawPolygonPath=function(y,g,x,T,L,O){var P=T/2,$=L/2;y.beginPath&&y.beginPath(),y.moveTo(g+P*O[0],x+$*O[1]);for(var q=1;q0&&P>0){ot.clearRect(0,0,O,P),ot.globalCompositeOperation="source-over";var ht=this.getCachedZSortedEles();if(y.full)ot.translate(-T.x1*S,-T.y1*S),ot.scale(S,S),this.drawElements(ot,ht),ot.scale(1/S,1/S),ot.translate(T.x1*S,T.y1*S);else{var dt=g.pan(),Lt={x:dt.x*S,y:dt.y*S};S*=g.zoom(),ot.translate(Lt.x,Lt.y),ot.scale(S,S),this.drawElements(ot,ht),ot.scale(1/S,1/S),ot.translate(-Lt.x,-Lt.y)}y.bg&&(ot.globalCompositeOperation="destination-over",ot.fillStyle=y.bg,ot.rect(0,0,O,P),ot.fill())}return rt};function xpt(y,g){for(var x=atob(y),T=new ArrayBuffer(x.length),L=new Uint8Array(T),O=0;O"u"?"undefined":f(OffscreenCanvas))!=="undefined"?x=new OffscreenCanvas(y,g):(x=document.createElement("canvas"),x.width=y,x.height=g),x},[D0,ww,vw,CC,vx,Zk,Tg,O3,_C,$tt].forEach(function(y){de(vc,y)});var mx=[{name:"null",impl:WB},{name:"base",impl:nM},{name:"canvas",impl:kpt}],Cg=[{type:"layout",extensions:ltt},{type:"renderer",extensions:mx}],Sm={},cM={};function v1(y,g,x){var T=x,L=function(ne){Sc("Can not register `"+g+"` for `"+y+"` since `"+ne+"` already exists in the prototype and can not be overridden")};if(y==="core"){if(Vk.prototype[g])return L(g);Vk.prototype[g]=x}else if(y==="collection"){if($f.prototype[g])return L(g);$f.prototype[g]=x}else if(y==="layout"){for(var O=function(ne){this.options=ne,x.call(this,ne),ut(this._private)||(this._private={}),this._private.cy=ne.cy,this._private.listeners=[],this.createEmitter()},P=O.prototype=Object.create(x.prototype),$=[],q=0;q<$.length;q++){var S=$[q];P[S]=P[S]||function(){return this}}P.start&&!P.run?P.run=function(){return this.start(),this}:!P.start&&P.run&&(P.start=function(){return this.run(),this});var V=x.prototype.stop;P.stop=function(){var qt=this.options;if(qt&&qt.animate){var ne=this.animations;if(ne)for(var Gt=0;Gtz&&(this.rect.x-=(this.labelWidth-z)/2,this.setWidth(this.labelWidth)),this.labelHeight>W&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-W)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-W),this.setHeight(this.labelHeight))}}},B.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==b.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},B.prototype.transform=function(R){var z=this.rect.x;z>_.WORLD_BOUNDARY?z=_.WORLD_BOUNDARY:z<-_.WORLD_BOUNDARY&&(z=-_.WORLD_BOUNDARY);var W=this.rect.y;W>_.WORLD_BOUNDARY?W=_.WORLD_BOUNDARY:W<-_.WORLD_BOUNDARY&&(W=-_.WORLD_BOUNDARY);var et=new I(z,W),st=R.inverseTransformPoint(et);this.setLocation(st.x,st.y)},B.prototype.getLeft=function(){return this.rect.x},B.prototype.getRight=function(){return this.rect.x+this.rect.width},B.prototype.getTop=function(){return this.rect.y},B.prototype.getBottom=function(){return this.rect.y+this.rect.height},B.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},f.exports=B},function(f,p,w){function m(b,E){b==null&&E==null?(this.x=0,this.y=0):(this.x=b,this.y=E)}m.prototype.getX=function(){return this.x},m.prototype.getY=function(){return this.y},m.prototype.setX=function(b){this.x=b},m.prototype.setY=function(b){this.y=b},m.prototype.getDifference=function(b){return new DimensionD(this.x-b.x,this.y-b.y)},m.prototype.getCopy=function(){return new m(this.x,this.y)},m.prototype.translate=function(b){return this.x+=b.width,this.y+=b.height,this},f.exports=m},function(f,p,w){var m=w(2),b=w(10),E=w(0),_=w(6),A=w(3),I=w(1),B=w(13),N=w(12),R=w(11);function z(et,st,at){m.call(this,at),this.estimatedSize=b.MIN_VALUE,this.margin=E.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=et,st!=null&&st instanceof _?this.graphManager=st:st!=null&&st instanceof Layout&&(this.graphManager=st.graphManager)}z.prototype=Object.create(m.prototype);for(var W in m)z[W]=m[W];z.prototype.getNodes=function(){return this.nodes},z.prototype.getEdges=function(){return this.edges},z.prototype.getGraphManager=function(){return this.graphManager},z.prototype.getParent=function(){return this.parent},z.prototype.getLeft=function(){return this.left},z.prototype.getRight=function(){return this.right},z.prototype.getTop=function(){return this.top},z.prototype.getBottom=function(){return this.bottom},z.prototype.isConnected=function(){return this.isConnected},z.prototype.add=function(et,st,at){if(st==null&&at==null){var bt=et;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(bt)>-1)throw"Node already in graph!";return bt.owner=this,this.getNodes().push(bt),bt}else{var mt=et;if(!(this.getNodes().indexOf(st)>-1&&this.getNodes().indexOf(at)>-1))throw"Source or target not in graph!";if(!(st.owner==at.owner&&st.owner==this))throw"Both owners must be this graph!";return st.owner!=at.owner?null:(mt.source=st,mt.target=at,mt.isInterGraph=!1,this.getEdges().push(mt),st.edges.push(mt),at!=st&&at.edges.push(mt),mt)}},z.prototype.remove=function(et){var st=et;if(et instanceof A){if(st==null)throw"Node is null!";if(!(st.owner!=null&&st.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var at=st.edges.slice(),bt,mt=at.length,yt=0;yt-1&&vt>-1))throw"Source and/or target doesn't know this edge!";bt.source.edges.splice(ut,1),bt.target!=bt.source&&bt.target.edges.splice(vt,1);var ft=bt.source.owner.getEdges().indexOf(bt);if(ft==-1)throw"Not in owner's edge list!";bt.source.owner.getEdges().splice(ft,1)}},z.prototype.updateLeftTop=function(){for(var et=b.MAX_VALUE,st=b.MAX_VALUE,at,bt,mt,yt=this.getNodes(),ft=yt.length,ut=0;utat&&(et=at),st>bt&&(st=bt)}return et==b.MAX_VALUE?null:(yt[0].getParent().paddingLeft!=null?mt=yt[0].getParent().paddingLeft:mt=this.margin,this.left=st-mt,this.top=et-mt,new N(this.left,this.top))},z.prototype.updateBounds=function(et){for(var st=b.MAX_VALUE,at=-b.MAX_VALUE,bt=b.MAX_VALUE,mt=-b.MAX_VALUE,yt,ft,ut,vt,X,pt=this.nodes,U=pt.length,Tt=0;Ttyt&&(st=yt),atut&&(bt=ut),mtyt&&(st=yt),atut&&(bt=ut),mt=this.nodes.length){var U=0;at.forEach(function(Tt){Tt.owner==et&&U++}),U==this.nodes.length&&(this.isConnected=!0)}},f.exports=z},function(f,p,w){var m,b=w(1);function E(_){m=w(5),this.layout=_,this.graphs=[],this.edges=[]}E.prototype.addRoot=function(){var _=this.layout.newGraph(),A=this.layout.newNode(null),I=this.add(_,A);return this.setRootGraph(I),this.rootGraph},E.prototype.add=function(_,A,I,B,N){if(I==null&&B==null&&N==null){if(_==null)throw"Graph is null!";if(A==null)throw"Parent node is null!";if(this.graphs.indexOf(_)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(_),_.parent!=null)throw"Already has a parent!";if(A.child!=null)throw"Already has a child!";return _.parent=A,A.child=_,_}else{N=I,B=A,I=_;var R=B.getOwner(),z=N.getOwner();if(!(R!=null&&R.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(z!=null&&z.getGraphManager()==this))throw"Target not in this graph mgr!";if(R==z)return I.isInterGraph=!1,R.add(I,B,N);if(I.isInterGraph=!0,I.source=B,I.target=N,this.edges.indexOf(I)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(I),!(I.source!=null&&I.target!=null))throw"Edge source and/or target is null!";if(!(I.source.edges.indexOf(I)==-1&&I.target.edges.indexOf(I)==-1))throw"Edge already in source and/or target incidency list!";return I.source.edges.push(I),I.target.edges.push(I),I}},E.prototype.remove=function(_){if(_ instanceof m){var A=_;if(A.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(A==this.rootGraph||A.parent!=null&&A.parent.graphManager==this))throw"Invalid parent node!";var I=[];I=I.concat(A.getEdges());for(var B,N=I.length,R=0;R=_.getRight()?A[0]+=Math.min(_.getX()-E.getX(),E.getRight()-_.getRight()):_.getX()<=E.getX()&&_.getRight()>=E.getRight()&&(A[0]+=Math.min(E.getX()-_.getX(),_.getRight()-E.getRight())),E.getY()<=_.getY()&&E.getBottom()>=_.getBottom()?A[1]+=Math.min(_.getY()-E.getY(),E.getBottom()-_.getBottom()):_.getY()<=E.getY()&&_.getBottom()>=E.getBottom()&&(A[1]+=Math.min(E.getY()-_.getY(),_.getBottom()-E.getBottom()));var N=Math.abs((_.getCenterY()-E.getCenterY())/(_.getCenterX()-E.getCenterX()));_.getCenterY()===E.getCenterY()&&_.getCenterX()===E.getCenterX()&&(N=1);var R=N*A[0],z=A[1]/N;A[0]R)return A[0]=I,A[1]=W,A[2]=N,A[3]=pt,!1;if(BN)return A[0]=z,A[1]=B,A[2]=vt,A[3]=R,!1;if(IN?(A[0]=st,A[1]=at,It=!0):(A[0]=et,A[1]=W,It=!0):Bt===Z&&(I>N?(A[0]=z,A[1]=W,It=!0):(A[0]=bt,A[1]=at,It=!0)),-Et===Z?N>I?(A[2]=X,A[3]=pt,Ot=!0):(A[2]=vt,A[3]=ut,Ot=!0):Et===Z&&(N>I?(A[2]=ft,A[3]=ut,Ot=!0):(A[2]=U,A[3]=pt,Ot=!0)),It&&Ot)return!1;if(I>N?B>R?(Ct=this.getCardinalDirection(Bt,Z,4),xt=this.getCardinalDirection(Et,Z,2)):(Ct=this.getCardinalDirection(-Bt,Z,3),xt=this.getCardinalDirection(-Et,Z,1)):B>R?(Ct=this.getCardinalDirection(-Bt,Z,1),xt=this.getCardinalDirection(-Et,Z,3)):(Ct=this.getCardinalDirection(Bt,Z,2),xt=this.getCardinalDirection(Et,Z,4)),!It)switch(Ct){case 1:Le=W,Ht=I+-yt/Z,A[0]=Ht,A[1]=Le;break;case 2:Ht=bt,Le=B+mt*Z,A[0]=Ht,A[1]=Le;break;case 3:Le=at,Ht=I+yt/Z,A[0]=Ht,A[1]=Le;break;case 4:Ht=st,Le=B+-mt*Z,A[0]=Ht,A[1]=Le;break}if(!Ot)switch(xt){case 1:gn=ut,Ft=N+-nt/Z,A[2]=Ft,A[3]=gn;break;case 2:Ft=U,gn=R+Tt*Z,A[2]=Ft,A[3]=gn;break;case 3:gn=pt,Ft=N+nt/Z,A[2]=Ft,A[3]=gn;break;case 4:Ft=X,gn=R+-Tt*Z,A[2]=Ft,A[3]=gn;break}}return!1},b.getCardinalDirection=function(E,_,A){return E>_?A:1+A%4},b.getIntersection=function(E,_,A,I){if(I==null)return this.getIntersection2(E,_,A);var B=E.x,N=E.y,R=_.x,z=_.y,W=A.x,et=A.y,st=I.x,at=I.y,bt=void 0,mt=void 0,yt=void 0,ft=void 0,ut=void 0,vt=void 0,X=void 0,pt=void 0,U=void 0;return yt=z-N,ut=B-R,X=R*N-B*z,ft=at-et,vt=W-st,pt=st*et-W*at,U=yt*vt-ft*ut,U===0?null:(bt=(ut*pt-vt*X)/U,mt=(ft*X-yt*pt)/U,new m(bt,mt))},b.angleOfVector=function(E,_,A,I){var B=void 0;return E!==A?(B=Math.atan((I-_)/(A-E)),A0?1:b<0?-1:0},m.floor=function(b){return b<0?Math.ceil(b):Math.floor(b)},m.ceil=function(b){return b<0?Math.floor(b):Math.ceil(b)},f.exports=m},function(f,p,w){function m(){}m.MAX_VALUE=2147483647,m.MIN_VALUE=-2147483648,f.exports=m},function(f,p,w){var m=function(){function B(N,R){for(var z=0;z"u"?"undefined":m(E);return E==null||_!="object"&&_!="function"},f.exports=b},function(f,p,w){function m(W){if(Array.isArray(W)){for(var et=0,st=Array(W.length);et0&&et;){for(yt.push(ut[0]);yt.length>0&&et;){var vt=yt[0];yt.splice(0,1),mt.add(vt);for(var X=vt.getEdges(),bt=0;bt-1&&ut.splice(nt,1)}mt=new Set,ft=new Map}}return W},z.prototype.createDummyNodesForBendpoints=function(W){for(var et=[],st=W.source,at=this.graphManager.calcLowestCommonAncestor(W.source,W.target),bt=0;bt0){for(var at=this.edgeToDummyNodes.get(st),bt=0;bt=0&&et.splice(pt,1);var U=ft.getNeighborsList();U.forEach(function(It){if(st.indexOf(It)<0){var Ot=at.get(It),Bt=Ot-1;Bt==1&&vt.push(It),at.set(It,Bt)}})}st=st.concat(vt),(et.length==1||et.length==2)&&(bt=!0,mt=et[0])}return mt},z.prototype.setGraphManager=function(W){this.graphManager=W},f.exports=z},function(f,p,w){function m(){}m.seed=1,m.x=0,m.nextDouble=function(){return m.x=Math.sin(m.seed++)*1e4,m.x-Math.floor(m.x)},f.exports=m},function(f,p,w){var m=w(4);function b(E,_){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}b.prototype.getWorldOrgX=function(){return this.lworldOrgX},b.prototype.setWorldOrgX=function(E){this.lworldOrgX=E},b.prototype.getWorldOrgY=function(){return this.lworldOrgY},b.prototype.setWorldOrgY=function(E){this.lworldOrgY=E},b.prototype.getWorldExtX=function(){return this.lworldExtX},b.prototype.setWorldExtX=function(E){this.lworldExtX=E},b.prototype.getWorldExtY=function(){return this.lworldExtY},b.prototype.setWorldExtY=function(E){this.lworldExtY=E},b.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},b.prototype.setDeviceOrgX=function(E){this.ldeviceOrgX=E},b.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},b.prototype.setDeviceOrgY=function(E){this.ldeviceOrgY=E},b.prototype.getDeviceExtX=function(){return this.ldeviceExtX},b.prototype.setDeviceExtX=function(E){this.ldeviceExtX=E},b.prototype.getDeviceExtY=function(){return this.ldeviceExtY},b.prototype.setDeviceExtY=function(E){this.ldeviceExtY=E},b.prototype.transformX=function(E){var _=0,A=this.lworldExtX;return A!=0&&(_=this.ldeviceOrgX+(E-this.lworldOrgX)*this.ldeviceExtX/A),_},b.prototype.transformY=function(E){var _=0,A=this.lworldExtY;return A!=0&&(_=this.ldeviceOrgY+(E-this.lworldOrgY)*this.ldeviceExtY/A),_},b.prototype.inverseTransformX=function(E){var _=0,A=this.ldeviceExtX;return A!=0&&(_=this.lworldOrgX+(E-this.ldeviceOrgX)*this.lworldExtX/A),_},b.prototype.inverseTransformY=function(E){var _=0,A=this.ldeviceExtY;return A!=0&&(_=this.lworldOrgY+(E-this.ldeviceOrgY)*this.lworldExtY/A),_},b.prototype.inverseTransformPoint=function(E){var _=new m(this.inverseTransformX(E.x),this.inverseTransformY(E.y));return _},f.exports=b},function(f,p,w){function m(R){if(Array.isArray(R)){for(var z=0,W=Array(R.length);zE.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*E.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(R-E.ADAPTATION_LOWER_NODE_LIMIT)/(E.ADAPTATION_UPPER_NODE_LIMIT-E.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-E.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=E.MAX_NODE_DISPLACEMENT_INCREMENTAL):(R>E.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(E.COOLING_ADAPTATION_FACTOR,1-(R-E.ADAPTATION_LOWER_NODE_LIMIT)/(E.ADAPTATION_UPPER_NODE_LIMIT-E.ADAPTATION_LOWER_NODE_LIMIT)*(1-E.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=E.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},B.prototype.calcSpringForces=function(){for(var R=this.getAllEdges(),z,W=0;W0&&arguments[0]!==void 0?arguments[0]:!0,z=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,W,et,st,at,bt=this.getAllNodes(),mt;if(this.useFRGridVariant)for(this.totalIterations%E.GRID_CALCULATION_CHECK_PERIOD==1&&R&&this.updateGrid(),mt=new Set,W=0;Wyt||mt>yt)&&(R.gravitationForceX=-this.gravityConstant*st,R.gravitationForceY=-this.gravityConstant*at)):(yt=z.getEstimatedSize()*this.compoundGravityRangeFactor,(bt>yt||mt>yt)&&(R.gravitationForceX=-this.gravityConstant*st*this.compoundGravityConstant,R.gravitationForceY=-this.gravityConstant*at*this.compoundGravityConstant))},B.prototype.isConverged=function(){var R,z=!1;return this.totalIterations>this.maxIterations/3&&(z=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),R=this.totalDisplacement=bt.length||yt>=bt[0].length)){for(var ft=0;ftB}}]),A}();f.exports=_},function(f,p,w){var m=function(){function _(A,I){for(var B=0;B2&&arguments[2]!==void 0?arguments[2]:1,N=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,R=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;b(this,_),this.sequence1=A,this.sequence2=I,this.match_score=B,this.mismatch_penalty=N,this.gap_penalty=R,this.iMax=A.length+1,this.jMax=I.length+1,this.grid=new Array(this.iMax);for(var z=0;z=0;A--){var I=this.listeners[A];I.event===E&&I.callback===_&&this.listeners.splice(A,1)}},b.emit=function(E,_){for(var A=0;AI.coolingFactor*I.maxNodeDisplacement&&(this.displacementX=I.coolingFactor*I.maxNodeDisplacement*E.sign(this.displacementX)),Math.abs(this.displacementY)>I.coolingFactor*I.maxNodeDisplacement&&(this.displacementY=I.coolingFactor*I.maxNodeDisplacement*E.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),I.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},_.prototype.propogateDisplacementToChildren=function(I,B){for(var N=this.getChild().getNodes(),R,z=0;z0)this.positionNodesRadially(ut);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var vt=new Set(this.getAllNodes()),X=this.nodesWithGravity.filter(function(pt){return vt.has(pt)});this.graphManager.setAllNodesToApplyGravitation(X),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},yt.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%N.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var ut=new Set(this.getAllNodes()),vt=this.nodesWithGravity.filter(function(U){return ut.has(U)});this.graphManager.setAllNodesToApplyGravitation(vt),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=N.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=N.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var X=!this.isTreeGrowing&&!this.isGrowthFinished,pt=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(X,pt),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},yt.prototype.getPositionsData=function(){for(var ut=this.graphManager.getAllNodes(),vt={},X=0;X1){var It;for(It=0;Itpt&&(pt=Math.floor(nt.y)),Tt=Math.floor(nt.x+B.DEFAULT_COMPONENT_SEPERATION)}this.transform(new W(R.WORLD_CENTER_X-nt.x/2,R.WORLD_CENTER_Y-nt.y/2))},yt.radialLayout=function(ut,vt,X){var pt=Math.max(this.maxDiagonalInTree(ut),B.DEFAULT_RADIAL_SEPARATION);yt.branchRadialLayout(vt,null,0,359,0,pt);var U=bt.calculateBounds(ut),Tt=new mt;Tt.setDeviceOrgX(U.getMinX()),Tt.setDeviceOrgY(U.getMinY()),Tt.setWorldOrgX(X.x),Tt.setWorldOrgY(X.y);for(var nt=0;nt1;){var gn=Ft[0];Ft.splice(0,1);var Se=Z.indexOf(gn);Se>=0&&Z.splice(Se,1),Ht--,Ct--}vt!=null?Le=(Z.indexOf(Ft[0])+1)%Ht:Le=0;for(var me=Math.abs(pt-X)/Ct,Ve=Le;xt!=Ct;Ve=++Ve%Ht){var Ye=Z[Ve].getOtherEnd(ut);if(Ye!=vt){var ce=(X+xt*me)%360,ke=(ce+me)%360;yt.branchRadialLayout(Ye,ut,ce,ke,U+Tt,Tt),xt++}}},yt.maxDiagonalInTree=function(ut){for(var vt=st.MIN_VALUE,X=0;Xvt&&(vt=U)}return vt},yt.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},yt.prototype.groupZeroDegreeMembers=function(){var ut=this,vt={};this.memberGroups={},this.idToDummyNode={};for(var X=[],pt=this.graphManager.getAllNodes(),U=0;U"u"&&(vt[It]=[]),vt[It]=vt[It].concat(Tt)}Object.keys(vt).forEach(function(Ot){if(vt[Ot].length>1){var Bt="DummyCompound_"+Ot;ut.memberGroups[Bt]=vt[Ot];var Et=vt[Ot][0].getParent(),Z=new A(ut.graphManager);Z.id=Bt,Z.paddingLeft=Et.paddingLeft||0,Z.paddingRight=Et.paddingRight||0,Z.paddingBottom=Et.paddingBottom||0,Z.paddingTop=Et.paddingTop||0,ut.idToDummyNode[Bt]=Z;var Ct=ut.getGraphManager().add(ut.newGraph(),Z),xt=Et.getChild();xt.add(Z);for(var Ht=0;Ht=0;ut--){var vt=this.compoundOrder[ut],X=vt.id,pt=vt.paddingLeft,U=vt.paddingTop;this.adjustLocations(this.tiledMemberPack[X],vt.rect.x,vt.rect.y,pt,U)}},yt.prototype.repopulateZeroDegreeMembers=function(){var ut=this,vt=this.tiledZeroDegreePack;Object.keys(vt).forEach(function(X){var pt=ut.idToDummyNode[X],U=pt.paddingLeft,Tt=pt.paddingTop;ut.adjustLocations(vt[X],pt.rect.x,pt.rect.y,U,Tt)})},yt.prototype.getToBeTiled=function(ut){var vt=ut.id;if(this.toBeTiled[vt]!=null)return this.toBeTiled[vt];var X=ut.getChild();if(X==null)return this.toBeTiled[vt]=!1,!1;for(var pt=X.getNodes(),U=0;U0)return this.toBeTiled[vt]=!1,!1;if(Tt.getChild()==null){this.toBeTiled[Tt.id]=!1;continue}if(!this.getToBeTiled(Tt))return this.toBeTiled[vt]=!1,!1}return this.toBeTiled[vt]=!0,!0},yt.prototype.getNodeDegree=function(ut){ut.id;for(var vt=ut.getEdges(),X=0,pt=0;ptOt&&(Ot=Et.rect.height)}X+=Ot+ut.verticalPadding}},yt.prototype.tileCompoundMembers=function(ut,vt){var X=this;this.tiledMemberPack=[],Object.keys(ut).forEach(function(pt){var U=vt[pt];X.tiledMemberPack[pt]=X.tileNodes(ut[pt],U.paddingLeft+U.paddingRight),U.rect.width=X.tiledMemberPack[pt].width,U.rect.height=X.tiledMemberPack[pt].height})},yt.prototype.tileNodes=function(ut,vt){var X=B.TILING_PADDING_VERTICAL,pt=B.TILING_PADDING_HORIZONTAL,U={rows:[],rowWidth:[],rowHeight:[],width:0,height:vt,verticalPadding:X,horizontalPadding:pt};ut.sort(function(It,Ot){return It.rect.width*It.rect.height>Ot.rect.width*Ot.rect.height?-1:It.rect.width*It.rect.height0&&(nt+=ut.horizontalPadding),ut.rowWidth[X]=nt,ut.width0&&(It+=ut.verticalPadding);var Ot=0;It>ut.rowHeight[X]&&(Ot=ut.rowHeight[X],ut.rowHeight[X]=It,Ot=ut.rowHeight[X]-Ot),ut.height+=Ot,ut.rows[X].push(vt)},yt.prototype.getShortestRowIndex=function(ut){for(var vt=-1,X=Number.MAX_VALUE,pt=0;ptX&&(vt=pt,X=ut.rowWidth[pt]);return vt},yt.prototype.canAddHorizontal=function(ut,vt,X){var pt=this.getShortestRowIndex(ut);if(pt<0)return!0;var U=ut.rowWidth[pt];if(U+ut.horizontalPadding+vt<=ut.width)return!0;var Tt=0;ut.rowHeight[pt]0&&(Tt=X+ut.verticalPadding-ut.rowHeight[pt]);var nt;ut.width-U>=vt+ut.horizontalPadding?nt=(ut.height+Tt)/(U+vt+ut.horizontalPadding):nt=(ut.height+Tt)/ut.width,Tt=X+ut.verticalPadding;var It;return ut.widthTt&&vt!=X){pt.splice(-1,1),ut.rows[X].push(U),ut.rowWidth[vt]=ut.rowWidth[vt]-Tt,ut.rowWidth[X]=ut.rowWidth[X]+Tt,ut.width=ut.rowWidth[instance.getLongestRowIndex(ut)];for(var nt=Number.MIN_VALUE,It=0;Itnt&&(nt=pt[It].height);vt>0&&(nt+=ut.verticalPadding);var Ot=ut.rowHeight[vt]+ut.rowHeight[X];ut.rowHeight[vt]=nt,ut.rowHeight[X]0)for(var xt=U;xt<=Tt;xt++)Ct[0]+=this.grid[xt][nt-1].length+this.grid[xt][nt].length-1;if(Tt0)for(var xt=nt;xt<=It;xt++)Ct[3]+=this.grid[U-1][xt].length+this.grid[U][xt].length-1;for(var Ht=st.MAX_VALUE,Le,Ft,gn=0;gn0){var It;It=mt.getGraphManager().add(mt.newGraph(),X),this.processChildrenList(It,vt,mt)}}},W.prototype.stop=function(){return this.stopped=!0,this};var st=function(bt){bt("layout","cose-bilkent",W)};typeof cytoscape<"u"&&st(cytoscape),p.exports=st}])})})(h$t);var uYe=h$t.exports;const lYe=G7(uYe);l$t.use(lYe);function g$t(i,a,f,p){c$t.drawNode(i,a,f,p),a.children&&a.children.forEach((w,m)=>{g$t(i,w,f<0?m:f,p)})}function hYe(i,a){a.edges().map((f,p)=>{const w=f.data();if(f[0]._private.bodyBounds){const m=f[0]._private.rscratch;Ut.trace("Edge: ",p,w),i.insert("path").attr("d",`M ${m.startX},${m.startY} L ${m.midX},${m.midY} L${m.endX},${m.endY} `).attr("class","edge section-edge-"+w.section+" edge-depth-"+w.depth)}})}function p$t(i,a,f,p){a.add({group:"nodes",data:{id:i.id,labelText:i.descr,height:i.height,width:i.width,level:p,nodeId:i.id,padding:i.padding,type:i.type},position:{x:i.x,y:i.y}}),i.children&&i.children.forEach(w=>{p$t(w,a,f,p+1),a.add({group:"edges",data:{id:`${i.id}_${w.id}`,source:i.id,target:w.id,depth:p,section:w.section}})})}function fYe(i,a){return new Promise(f=>{const p=yr("body").append("div").attr("id","cy").attr("style","display:none"),w=l$t({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});p.remove(),p$t(i,w,a,0),w.nodes().forEach(function(m){m.layoutDimensions=()=>{const b=m.data();return{w:b.width,h:b.height}}}),w.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),w.ready(m=>{Ut.info("Ready",m),f(w)})})}function dYe(i){i.nodes().map((a,f)=>{const p=a.data();p.x=a.position().x,p.y=a.position().y,c$t.positionNode(p);const w=Jgt(p.nodeId);Ut.info("Id:",f,"Position: (",a.position().x,", ",a.position().y,")",p),w.attr("transform",`translate(${a.position().x-p.width/2}, ${a.position().y-p.height/2})`),w.attr("attr",`apa-${f})`)})}const gYe={draw:async(i,a,f,p)=>{const w=Oe();w.htmlLabels=!1,Ut.debug(`Rendering mindmap diagram -`+i,p.parser);const m=Oe().securityLevel;let b;m==="sandbox"&&(b=yr("#i"+a));const _=yr(m==="sandbox"?b.nodes()[0].contentDocument.body:"body").select("#"+a);_.append("g");const A=p.db.getMindmap(),I=_.append("g");I.attr("class","mindmap-edges");const B=_.append("g");B.attr("class","mindmap-nodes"),g$t(B,A,-1,w);const N=await fYe(A,w);hYe(I,N),dYe(N),fT(void 0,_,w.mindmap.padding,w.mindmap.useMaxWidth)}},pYe=i=>{let a="";for(let f=0;f0&&arguments[0]!==void 0?arguments[0]:Xne,m=arguments.length>1?arguments[1]:void 0,k=0;k=0;$--)N($);return this},X2.removeAllListeners=function(){return this.removeListener("*")},X2.emit=X2.trigger=function(x,m,k){var S=this.listeners,M=S.length;return this.emitting++,ne(m)||(m=[m]),MS(this,function(O,N){k!=null&&(S=[{event:N.event,type:N.type,namespace:N.namespace,callback:k}],M=S.length);for(var $=function(Y){var Z=S[Y];if(Z.type===N.type&&(!Z.namespace||Z.namespace===N.namespace||Z.namespace===Yne)&&O.eventMatches(O.context,Z,N)){var ce=[N];m!=null&&uj(ce,m),O.beforeEmit(O.context,Z,N),Z.conf&&Z.conf.one&&(O.listeners=O.listeners.filter(function(Le){return Le!==Z}));var ve=O.callbackContext(O.context,Z,N),me=Z.callback.apply(ve,ce);O.afterEmit(O.context,Z,N),me===!1&&(N.stopPropagation(),N.preventDefault())}},H=0;H1&&!N){var $=this.length-1,H=this[$],q=H._private.data.id;this[$]=void 0,this[m]=H,O.set(q,{ele:H,index:m})}return this.length--,this},unmergeOne:function(m){m=m[0];var k=this._private,S=m._private.data.id,M=k.map,O=M.get(S);if(!O)return this;var N=O.index;return this.unmergeAt(N),this},unmerge:function(m){var k=this._private.cy;if(!m)return this;if(m&&be(m)){var S=m;m=k.mutableElements().filter(S)}for(var M=0;M=0;k--){var S=this[k];m(S)&&this.unmergeAt(k)}return this},map:function(m,k){for(var S=[],M=this,O=0;OS&&(S=H,M=$)}return{value:S,ele:M}},min:function(m,k){for(var S=1/0,M,O=this,N=0;N=0&&O"u"?"undefined":u(Symbol))!=m&&u(Symbol.iterator)!=m;k&&(DS[Symbol.iterator]=function(){var S=this,M={value:void 0,done:!1},O=0,N=this.length;return b({next:function(){return O1&&arguments[1]!==void 0?arguments[1]:!0,S=this[0],M=S.cy();if(M.styleEnabled()&&S){this.cleanStyle();var O=S._private.style[m];return O??(k?M.style().getDefaultProperty(m):null)}},numericStyle:function(m){var k=this[0];if(k.cy().styleEnabled()&&k){var S=k.pstyle(m);return S.pfValue!==void 0?S.pfValue:S.value}},numericStyleUnits:function(m){var k=this[0];if(k.cy().styleEnabled()&&k)return k.pstyle(m).units},renderedStyle:function(m){var k=this.cy();if(!k.styleEnabled())return this;var S=this[0];if(S)return k.style().getRenderedStyle(S,m)},style:function(m,k){var S=this.cy();if(!S.styleEnabled())return this;var M=!1,O=S.style();if(se(m)){var N=m;O.applyBypass(this,N,M),this.emitAndNotify("style")}else if(be(m))if(k===void 0){var $=this[0];return $?O.getStylePropertyValue($,m):void 0}else O.applyBypass(this,m,k,M),this.emitAndNotify("style");else if(m===void 0){var H=this[0];return H?O.getRawStyle(H):void 0}return this},removeStyle:function(m){var k=this.cy();if(!k.styleEnabled())return this;var S=!1,M=k.style(),O=this;if(m===void 0)for(var N=0;N0&&m.push(Y[0]),m.push($[0])}return this.spawn(m,!0).filter(x)},"neighborhood"),closedNeighborhood:function(m){return this.neighborhood().add(this).filter(m)},openNeighborhood:function(m){return this.neighborhood(m)}}),k1.neighbourhood=k1.neighborhood,k1.closedNeighbourhood=k1.closedNeighborhood,k1.openNeighbourhood=k1.openNeighborhood,yt(k1,{source:Rp(function(m){var k=this[0],S;return k&&(S=k._private.source||k.cy().collection()),S&&m?S.filter(m):S},"source"),target:Rp(function(m){var k=this[0],S;return k&&(S=k._private.target||k.cy().collection()),S&&m?S.filter(m):S},"target"),sources:D$({attr:"source"}),targets:D$({attr:"target"})});function D$(x){return function(k){for(var S=[],M=0;M0);return N},component:function(){var m=this[0];return m.cy().mutableElements().components(m)[0]}}),k1.componentsOf=k1.components;var V0=function(m,k){var S=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,M=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(m===void 0){ch("A collection must have a reference to the core");return}var O=new wm,N=!1;if(!k)k=[];else if(k.length>0&&se(k[0])&&!U(k[0])){N=!0;for(var $=[],H=new Q7,q=0,Y=k.length;q0&&arguments[0]!==void 0?arguments[0]:!0,m=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,k=this,S=k.cy(),M=S._private,O=[],N=[],$,H=0,q=k.length;H0){for(var ir=$.length===k.length?k:new V0(S,$),vr=0;vr0&&arguments[0]!==void 0?arguments[0]:!0,m=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,k=this,S=[],M={},O=k._private.cy;function N(Tt){for(var _n=Tt._private.edges,hn=0;hn<_n.length;hn++)H(_n[hn])}function $(Tt){for(var _n=Tt._private.children,hn=0;hn<_n.length;hn++)H(_n[hn])}function H(Tt){var _n=M[Tt.id()];m&&Tt.removed()||_n||(M[Tt.id()]=!0,Tt.isNode()?(S.push(Tt),N(Tt),$(Tt)):S.unshift(Tt))}for(var q=0,Y=k.length;q0&&(x?Mt.emitAndNotify("remove"):m&&Mt.emit("remove"));for(var ut=0;ut0?ut=Tt:Mt=Tt;while(Math.abs(Wt)>N&&++_n<$);return Tt}function ct(Lt){for(var Mt=0,ut=1,Wt=H-1;ut!==Wt&&ce[ut]<=Lt;++ut)Mt+=q;--ut;var Tt=(Lt-ce[ut])/(ce[ut+1]-ce[ut]),_n=Mt+Tt*q,hn=Ee(_n,x,k);return hn>=O?Be(Lt,_n):hn===0?_n:Ve(Lt,Mt,Mt+q)}var st=!1;function Ye(){st=!0,(x!==m||k!==S)&&Re()}var mt=function(Mt){return st||Ye(),x===m&&k===S?Mt:Mt===0?0:Mt===1?1:_e(ct(Mt),m,S)};mt.getControlPoints=function(){return[{x,y:m},{x:k,y:S}]};var Je="generateBezier("+[x,m,k,S]+")";return mt.toString=function(){return Je},mt}/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */var ore=function(){function x(S){return-S.tension*S.x-S.friction*S.v}function m(S,M,O){var N={x:S.x+O.dx*M,v:S.v+O.dv*M,tension:S.tension,friction:S.friction};return{dx:N.v,dv:x(N)}}function k(S,M){var O={dx:S.v,dv:x(S)},N=m(S,M*.5,O),$=m(S,M*.5,N),H=m(S,M,$),q=1/6*(O.dx+2*(N.dx+$.dx)+H.dx),Y=1/6*(O.dv+2*(N.dv+$.dv)+H.dv);return S.x=S.x+q*M,S.v=S.v+Y*M,S}return function S(M,O,N){var $={x:-1,v:0,tension:null,friction:null},H=[0],q=0,Y=1/1e4,Z=16/1e3,ce,ve,me;for(M=parseFloat(M)||500,O=parseFloat(O)||20,N=N||null,$.tension=M,$.friction=O,ce=N!==null,ce?(q=S(M,O),ve=q/N*Z):ve=Z;me=k(me||$,ve),H.push(1+me.x),q+=16,Math.abs(me.x)>Y&&Math.abs(me.v)>Y;);return ce?function(Le){return H[Le*(H.length-1)|0]}:q}}(),rl=function(m,k,S,M){var O=are(m,k,S,M);return function(N,$,H){return N+($-N)*O(H)}},BS={linear:function(m,k,S){return m+(k-m)*S},ease:rl(.25,.1,.25,1),"ease-in":rl(.42,0,1,1),"ease-out":rl(0,0,.58,1),"ease-in-out":rl(.42,0,.58,1),"ease-in-sine":rl(.47,0,.745,.715),"ease-out-sine":rl(.39,.575,.565,1),"ease-in-out-sine":rl(.445,.05,.55,.95),"ease-in-quad":rl(.55,.085,.68,.53),"ease-out-quad":rl(.25,.46,.45,.94),"ease-in-out-quad":rl(.455,.03,.515,.955),"ease-in-cubic":rl(.55,.055,.675,.19),"ease-out-cubic":rl(.215,.61,.355,1),"ease-in-out-cubic":rl(.645,.045,.355,1),"ease-in-quart":rl(.895,.03,.685,.22),"ease-out-quart":rl(.165,.84,.44,1),"ease-in-out-quart":rl(.77,0,.175,1),"ease-in-quint":rl(.755,.05,.855,.06),"ease-out-quint":rl(.23,1,.32,1),"ease-in-out-quint":rl(.86,0,.07,1),"ease-in-expo":rl(.95,.05,.795,.035),"ease-out-expo":rl(.19,1,.22,1),"ease-in-out-expo":rl(1,0,0,1),"ease-in-circ":rl(.6,.04,.98,.335),"ease-out-circ":rl(.075,.82,.165,1),"ease-in-out-circ":rl(.785,.135,.15,.86),spring:function(m,k,S){if(S===0)return BS.linear;var M=ore(m,k,S);return function(O,N,$){return O+(N-O)*M($)}},"cubic-bezier":rl};function N$(x,m,k,S,M){if(S===1||m===k)return k;var O=M(m,k,S);return x==null||((x.roundValue||x.color)&&(O=Math.round(O)),x.min!==void 0&&(O=Math.max(O,x.min)),x.max!==void 0&&(O=Math.min(O,x.max))),O}function P$(x,m){return x.pfValue!=null||x.value!=null?x.pfValue!=null&&(m==null||m.type.units!=="%")?x.pfValue:x.value:x}function g8(x,m,k,S,M){var O=M!=null?M.type:null;k<0?k=0:k>1&&(k=1);var N=P$(x,M),$=P$(m,M);if(X(N)&&X($))return N$(O,N,$,k,S);if(ne(N)&&ne($)){for(var H=[],q=0;q<$.length;q++){var Y=N[q],Z=$[q];if(Y!=null&&Z!=null){var ce=N$(O,Y,Z,k,S);H.push(ce)}else H.push(Z)}return H}}function cre(x,m,k,S){var M=!S,O=x._private,N=m._private,$=N.easing,H=N.startTime,q=S?x:x.cy(),Y=q.style();if(!N.easingImpl)if($==null)N.easingImpl=BS.linear;else{var Z;if(be($)){var ce=Y.parse("transition-timing-function",$);Z=ce.value}else Z=$;var ve,me;be(Z)?(ve=Z,me=[]):(ve=Z[1],me=Z.slice(2).map(function(ir){return+ir})),me.length>0?(ve==="spring"&&me.push(N.duration),N.easingImpl=BS[ve].apply(null,me)):N.easingImpl=BS[ve]}var Le=N.easingImpl,_e;if(N.duration===0?_e=1:_e=(k-H)/N.duration,N.applying&&(_e=N.progress),_e<0?_e=0:_e>1&&(_e=1),N.delay==null){var Ee=N.startPosition,Be=N.position;if(Be&&M&&!x.locked()){var Re={};ak(Ee.x,Be.x)&&(Re.x=g8(Ee.x,Be.x,_e,Le)),ak(Ee.y,Be.y)&&(Re.y=g8(Ee.y,Be.y,_e,Le)),x.position(Re)}var Ve=N.startPan,ct=N.pan,st=O.pan,Ye=ct!=null&&S;Ye&&(ak(Ve.x,ct.x)&&(st.x=g8(Ve.x,ct.x,_e,Le)),ak(Ve.y,ct.y)&&(st.y=g8(Ve.y,ct.y,_e,Le)),x.emit("pan"));var mt=N.startZoom,Je=N.zoom,Lt=Je!=null&&S;Lt&&(ak(mt,Je)&&(O.zoom=U9(O.minZoom,g8(mt,Je,_e,Le),O.maxZoom)),x.emit("zoom")),(Ye||Lt)&&x.emit("viewport");var Mt=N.style;if(Mt&&Mt.length>0&&M){for(var ut=0;ut=0;Ye--){var mt=st[Ye];mt()}st.splice(0,st.length)},Be=ve.length-1;Be>=0;Be--){var Re=ve[Be],Ve=Re._private;if(Ve.stopped){ve.splice(Be,1),Ve.hooked=!1,Ve.playing=!1,Ve.started=!1,Ee(Ve.frames);continue}!Ve.playing&&!Ve.applying||(Ve.playing&&Ve.applying&&(Ve.applying=!1),Ve.started||ure(Y,Re,x),cre(Y,Re,x,Z),Ve.applying&&(Ve.applying=!1),Ee(Ve.frames),Ve.step!=null&&Ve.step(x),Re.completed()&&(ve.splice(Be,1),Ve.hooked=!1,Ve.playing=!1,Ve.started=!1,Ee(Ve.completes)),Le=!0)}return!Z&&ve.length===0&&me.length===0&&S.push(Y),Le}for(var O=!1,N=0;N0?m.notify("draw",k):m.notify("draw")),k.unmerge(S),m.emit("step")}var lre={animate:fu.animate(),animation:fu.animation(),animated:fu.animated(),clearQueue:fu.clearQueue(),delay:fu.delay(),delayAnimation:fu.delayAnimation(),stop:fu.stop(),addToAnimationPool:function(m){var k=this;k.styleEnabled()&&k._private.aniEles.merge(m)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var m=this;if(m._private.animationsRunning=!0,!m.styleEnabled())return;function k(){m._private.animationsRunning&&z0(function(O){B$(O,m),k()})}var S=m.renderer();S&&S.beforeRender?S.beforeRender(function(O,N){B$(N,m)},S.beforeRenderPriorities.animations):k()}},hre={qualifierCompare:function(m,k){return m==null||k==null?m==null&&k==null:m.sameText(k)},eventMatches:function(m,k,S){var M=k.qualifier;return M!=null?m!==S.target&&U(S.target)&&M.matches(S.target):!0},addEventFields:function(m,k){k.cy=m,k.target=m},callbackContext:function(m,k,S){return k.qualifier!=null?S.target:m}},FS=function(m){return be(m)?new ey(m):m},F$={createEmitter:function(){var m=this._private;return m.emitter||(m.emitter=new LS(hre,this)),this},emitter:function(){return this._private.emitter},on:function(m,k,S){return this.emitter().on(m,FS(k),S),this},removeListener:function(m,k,S){return this.emitter().removeListener(m,FS(k),S),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(m,k,S){return this.emitter().one(m,FS(k),S),this},once:function(m,k,S){return this.emitter().one(m,FS(k),S),this},emit:function(m,k){return this.emitter().emit(m,k),this},emitAndNotify:function(m,k){return this.emit(m),this.notify(m,k),this}};fu.eventAliasesOn(F$);var MI={png:function(m){var k=this._private.renderer;return m=m||{},k.png(m)},jpg:function(m){var k=this._private.renderer;return m=m||{},m.bg=m.bg||"#fff",k.jpg(m)}};MI.jpeg=MI.jpg;var RS={layout:function(m){var k=this;if(m==null){ch("Layout options must be specified to make a layout");return}if(m.name==null){ch("A `name` must be specified to make a layout");return}var S=m.name,M=k.extension("layout",S);if(M==null){ch("No such layout `"+S+"` found. Did you forget to import it and `cytoscape.use()` it?");return}var O;be(m.eles)?O=k.$(m.eles):O=m.eles!=null?m.eles:k.$();var N=new M(yt({},m,{cy:k,eles:O}));return N}};RS.createLayout=RS.makeLayout=RS.layout;var fre={notify:function(m,k){var S=this._private;if(this.batching()){S.batchNotifications=S.batchNotifications||{};var M=S.batchNotifications[m]=S.batchNotifications[m]||this.collection();k!=null&&M.merge(k);return}if(S.notificationsEnabled){var O=this.renderer();this.destroyed()||!O||O.notify(m,k)}},notifications:function(m){var k=this._private;return m===void 0?k.notificationsEnabled:(k.notificationsEnabled=!!m,this)},noNotifications:function(m){this.notifications(!1),m(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var m=this._private;return m.batchCount==null&&(m.batchCount=0),m.batchCount===0&&(m.batchStyleEles=this.collection(),m.batchNotifications={}),m.batchCount++,this},endBatch:function(){var m=this._private;if(m.batchCount===0)return this;if(m.batchCount--,m.batchCount===0){m.batchStyleEles.updateStyle();var k=this.renderer();Object.keys(m.batchNotifications).forEach(function(S){var M=m.batchNotifications[S];M.empty()?k.notify(S):k.notify(S,M)})}return this},batch:function(m){return this.startBatch(),m(),this.endBatch(),this},batchData:function(m){var k=this;return this.batch(function(){for(var S=Object.keys(m),M=0;M0;)k.removeChild(k.childNodes[0]);m._private.renderer=null,m.mutableElements().forEach(function(S){var M=S._private;M.rscratch={},M.rstyle={},M.animation.current=[],M.animation.queue=[]})},onRender:function(m){return this.on("render",m)},offRender:function(m){return this.off("render",m)}};DI.invalidateDimensions=DI.resize;var jS={collection:function(m,k){return be(m)?this.$(m):xe(m)?m.collection():ne(m)?(k||(k={}),new V0(this,m,k.unique,k.removed)):new V0(this)},nodes:function(m){var k=this.$(function(S){return S.isNode()});return m?k.filter(m):k},edges:function(m){var k=this.$(function(S){return S.isEdge()});return m?k.filter(m):k},$:function(m){var k=this._private.elements;return m?k.filter(m):k.spawnSelf()},mutableElements:function(){return this._private.elements}};jS.elements=jS.filter=jS.$;var E1={},ok="t",gre="f";E1.apply=function(x){for(var m=this,k=m._private,S=k.cy,M=S.collection(),O=0;O0;if(ce||Z&&ve){var me=void 0;ce&&ve||ce?me=q.properties:ve&&(me=q.mappedProperties);for(var Le=0;Le1&&(Ve=1),$.color){var st=S.valueMin[0],Ye=S.valueMax[0],mt=S.valueMin[1],Je=S.valueMax[1],Lt=S.valueMin[2],Mt=S.valueMax[2],ut=S.valueMin[3]==null?1:S.valueMin[3],Wt=S.valueMax[3]==null?1:S.valueMax[3],Tt=[Math.round(st+(Ye-st)*Ve),Math.round(mt+(Je-mt)*Ve),Math.round(Lt+(Mt-Lt)*Ve),Math.round(ut+(Wt-ut)*Ve)];O={bypass:S.bypass,name:S.name,value:Tt,strValue:"rgb("+Tt[0]+", "+Tt[1]+", "+Tt[2]+")"}}else if($.number){var _n=S.valueMin+(S.valueMax-S.valueMin)*Ve;O=this.parse(S.name,_n,S.bypass,ce)}else return!1;if(!O)return Le(),!1;O.mapping=S,S=O;break}case N.data:{for(var hn=S.field.split("."),Yt=Z.data,Dn=0;Dn0&&O>0){for(var $={},H=!1,q=0;q0?x.delayAnimation(N).play().promise().then(Re):Re()}).then(function(){return x.animation({style:$,duration:O,easing:x.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){k.removeBypasses(x,M),x.emitAndNotify("style"),S.transitioning=!1})}else S.transitioning&&(this.removeBypasses(x,M),x.emitAndNotify("style"),S.transitioning=!1)},E1.checkTrigger=function(x,m,k,S,M,O){var N=this.properties[m],$=M(N);$!=null&&$(k,S)&&O(N)},E1.checkZOrderTrigger=function(x,m,k,S){var M=this;this.checkTrigger(x,m,k,S,function(O){return O.triggersZOrder},function(){M._private.cy.notify("zorder",x)})},E1.checkBoundsTrigger=function(x,m,k,S){this.checkTrigger(x,m,k,S,function(M){return M.triggersBounds},function(M){x.dirtyCompoundBoundsCache(),x.dirtyBoundingBoxCache(),M.triggersBoundsOfParallelBeziers&&m==="curve-style"&&(k==="bezier"||S==="bezier")&&x.parallelEdges().forEach(function(O){O.isBundledBezier()&&O.dirtyBoundingBoxCache()}),M.triggersBoundsOfConnectedEdges&&m==="display"&&(k==="none"||S==="none")&&x.connectedEdges().forEach(function(O){O.dirtyBoundingBoxCache()})})},E1.checkTriggers=function(x,m,k,S){x.dirtyStyleCache(),this.checkZOrderTrigger(x,m,k,S),this.checkBoundsTrigger(x,m,k,S)};var ck={};ck.applyBypass=function(x,m,k,S){var M=this,O=[],N=!0;if(m==="*"||m==="**"){if(k!==void 0)for(var $=0;$M.length?S=S.substr(M.length):S=""}function H(){O.length>N.length?O=O.substr(N.length):O=""}for(;;){var q=S.match(/^\s*$/);if(q)break;var Y=S.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!Y){hu("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+S);break}M=Y[0];var Z=Y[1];if(Z!=="core"){var ce=new ey(Z);if(ce.invalid){hu("Skipping parsing of block: Invalid selector found in string stylesheet: "+Z),$();continue}}var ve=Y[2],me=!1;O=ve;for(var Le=[];;){var _e=O.match(/^\s*$/);if(_e)break;var Ee=O.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!Ee){hu("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+ve),me=!0;break}N=Ee[0];var Be=Ee[1],Re=Ee[2],Ve=m.properties[Be];if(!Ve){hu("Skipping property: Invalid property name in: "+N),H();continue}var ct=k.parse(Be,Re);if(!ct){hu("Skipping property: Invalid property definition in: "+N),H();continue}Le.push({name:Be,val:Re}),H()}if(me){$();break}k.selector(Z);for(var st=0;st=7&&m[0]==="d"&&(Y=new RegExp($.data.regex).exec(m))){if(k)return!1;var ce=$.data;return{name:x,value:Y,strValue:""+m,mapped:ce,field:Y[1],bypass:k}}else if(m.length>=10&&m[0]==="m"&&(Z=new RegExp($.mapData.regex).exec(m))){if(k||q.multiple)return!1;var ve=$.mapData;if(!(q.color||q.number))return!1;var me=this.parse(x,Z[4]);if(!me||me.mapped)return!1;var Le=this.parse(x,Z[5]);if(!Le||Le.mapped)return!1;if(me.pfValue===Le.pfValue||me.strValue===Le.strValue)return hu("`"+x+": "+m+"` is not a valid mapper because the output range is zero; converting to `"+x+": "+me.strValue+"`"),this.parse(x,me.strValue);if(q.color){var _e=me.value,Ee=Le.value,Be=_e[0]===Ee[0]&&_e[1]===Ee[1]&&_e[2]===Ee[2]&&(_e[3]===Ee[3]||(_e[3]==null||_e[3]===1)&&(Ee[3]==null||Ee[3]===1));if(Be)return!1}return{name:x,value:Z,strValue:""+m,mapped:ve,field:Z[1],fieldMin:parseFloat(Z[2]),fieldMax:parseFloat(Z[3]),valueMin:me.value,valueMax:Le.value,bypass:k}}}if(q.multiple&&S!=="multiple"){var Re;if(H?Re=m.split(/\s+/):ne(m)?Re=m:Re=[m],q.evenMultiple&&Re.length%2!==0)return null;for(var Ve=[],ct=[],st=[],Ye="",mt=!1,Je=0;Je0?" ":"")+Lt.strValue}return q.validate&&!q.validate(Ve,ct)?null:q.singleEnum&&mt?Ve.length===1&&be(Ve[0])?{name:x,value:Ve[0],strValue:Ve[0],bypass:k}:null:{name:x,value:Ve,pfValue:st,strValue:Ye,bypass:k,units:ct}}var Mt=function(){for(var Sr=0;Srq.max||q.strictMax&&m===q.max))return null;var hn={name:x,value:m,strValue:""+m+(ut||""),units:ut,bypass:k};return q.unitless||ut!=="px"&&ut!=="em"?hn.pfValue=m:hn.pfValue=ut==="px"||!ut?m:this.getEmSizeInPixels()*m,(ut==="ms"||ut==="s")&&(hn.pfValue=ut==="ms"?m:1e3*m),(ut==="deg"||ut==="rad")&&(hn.pfValue=ut==="rad"?m:lZ(m)),ut==="%"&&(hn.pfValue=m/100),hn}else if(q.propList){var Yt=[],Dn=""+m;if(Dn!=="none"){for(var ir=Dn.split(/\s*,\s*|\s+/),vr=0;vr0&&$>0&&!isNaN(S.w)&&!isNaN(S.h)&&S.w>0&&S.h>0){H=Math.min((N-2*k)/S.w,($-2*k)/S.h),H=H>this._private.maxZoom?this._private.maxZoom:H,H=H=S.minZoom&&(S.maxZoom=k),this},minZoom:function(m){return m===void 0?this._private.minZoom:this.zoomRange({min:m})},maxZoom:function(m){return m===void 0?this._private.maxZoom:this.zoomRange({max:m})},getZoomedViewport:function(m){var k=this._private,S=k.pan,M=k.zoom,O,N,$=!1;if(k.zoomingEnabled||($=!0),X(m)?N=m:se(m)&&(N=m.level,m.position!=null?O=lS(m.position,M,S):m.renderedPosition!=null&&(O=m.renderedPosition),O!=null&&!k.panningEnabled&&($=!0)),N=N>k.maxZoom?k.maxZoom:N,N=Nk.maxZoom||!k.zoomingEnabled?N=!0:(k.zoom=H,O.push("zoom"))}if(M&&(!N||!m.cancelOnFailedZoom)&&k.panningEnabled){var q=m.pan;X(q.x)&&(k.pan.x=q.x,$=!1),X(q.y)&&(k.pan.y=q.y,$=!1),$||O.push("pan")}return O.length>0&&(O.push("viewport"),this.emit(O.join(" ")),this.notify("viewport")),this},center:function(m){var k=this.getCenterPan(m);return k&&(this._private.pan=k,this.emit("pan viewport"),this.notify("viewport")),this},getCenterPan:function(m,k){if(this._private.panningEnabled){if(be(m)){var S=m;m=this.mutableElements().filter(S)}else xe(m)||(m=this.mutableElements());if(m.length!==0){var M=m.boundingBox(),O=this.width(),N=this.height();k=k===void 0?this._private.zoom:k;var $={x:(O-k*(M.x1+M.x2))/2,y:(N-k*(M.y1+M.y2))/2};return $}}},reset:function(){return!this._private.panningEnabled||!this._private.zoomingEnabled?this:(this.viewport({pan:{x:0,y:0},zoom:1}),this)},invalidateSize:function(){this._private.sizeCache=null},size:function(){var m=this._private,k=m.container,S=this;return m.sizeCache=m.sizeCache||(k?function(){var M=S.window().getComputedStyle(k),O=function($){return parseFloat(M.getPropertyValue($))};return{width:k.clientWidth-O("padding-left")-O("padding-right"),height:k.clientHeight-O("padding-top")-O("padding-bottom")}}():{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var m=this._private.pan,k=this._private.zoom,S=this.renderedExtent(),M={x1:(S.x1-m.x)/k,x2:(S.x2-m.x)/k,y1:(S.y1-m.y)/k,y2:(S.y2-m.y)/k};return M.w=M.x2-M.x1,M.h=M.y2-M.y1,M},renderedExtent:function(){var m=this.width(),k=this.height();return{x1:0,y1:0,x2:m,y2:k,w:m,h:k}},multiClickDebounceTime:function(m){if(m)this._private.multiClickDebounceTime=m;else return this._private.multiClickDebounceTime;return this}};v5.centre=v5.center,v5.autolockNodes=v5.autolock,v5.autoungrabifyNodes=v5.autoungrabify;var uk={data:fu.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:fu.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:fu.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:fu.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};uk.attr=uk.data,uk.removeAttr=uk.removeData;var lk=function(m){var k=this;m=yt({},m);var S=m.container;S&&!W(S)&&W(S[0])&&(S=S[0]);var M=S?S._cyreg:null;M=M||{},M&&M.cy&&(M.cy.destroy(),M={});var O=M.readies=M.readies||[];S&&(S._cyreg=M),M.cy=k;var N=F!==void 0&&S!==void 0&&!m.headless,$=m;$.layout=yt({name:N?"grid":"null"},$.layout),$.renderer=yt({name:N?"canvas":"null"},$.renderer);var H=function(me,Le,_e){return Le!==void 0?Le:_e!==void 0?_e:me},q=this._private={container:S,ready:!1,options:$,elements:new V0(this),listeners:[],aniEles:new V0(this),data:$.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:H(!0,$.zoomingEnabled),userZoomingEnabled:H(!0,$.userZoomingEnabled),panningEnabled:H(!0,$.panningEnabled),userPanningEnabled:H(!0,$.userPanningEnabled),boxSelectionEnabled:H(!0,$.boxSelectionEnabled),autolock:H(!1,$.autolock,$.autolockNodes),autoungrabify:H(!1,$.autoungrabify,$.autoungrabifyNodes),autounselectify:H(!1,$.autounselectify),styleEnabled:$.styleEnabled===void 0?N:$.styleEnabled,zoom:X($.zoom)?$.zoom:1,pan:{x:se($.pan)&&X($.pan.x)?$.pan.x:0,y:se($.pan)&&X($.pan.y)?$.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:H(250,$.multiClickDebounceTime)};this.createEmitter(),this.selectionType($.selectionType),this.zoomRange({min:$.minZoom,max:$.maxZoom});var Y=function(me,Le){var _e=me.some(Ke);if(_e)return i8.all(me).then(Le);Le(me)};q.styleEnabled&&k.setStyle([]);var Z=yt({},$,$.renderer);k.initRenderer(Z);var ce=function(me,Le,_e){k.notifications(!1);var Ee=k.mutableElements();Ee.length>0&&Ee.remove(),me!=null&&(se(me)||ne(me))&&k.add(me),k.one("layoutready",function(Re){k.notifications(!0),k.emit(Re),k.one("load",Le),k.emitAndNotify("load")}).one("layoutstop",function(){k.one("done",_e),k.emit("done")});var Be=yt({},k._private.options.layout);Be.eles=k.elements(),k.layout(Be).run()};Y([$.style,$.elements],function(ve){var me=ve[0],Le=ve[1];q.styleEnabled&&k.style().append(me),ce(Le,function(){k.startAnimationLoop(),q.ready=!0,ae($.ready)&&k.on("ready",$.ready);for(var _e=0;_e0,H=Wd(m.boundingBox?m.boundingBox:{x1:0,y1:0,w:k.width(),h:k.height()}),q;if(xe(m.roots))q=m.roots;else if(ne(m.roots)){for(var Y=[],Z=0;Z0;){var _n=Tt(),hn=Lt(_n,ut);if(hn)_n.outgoers().filter(function(Mi){return Mi.isNode()&&S.has(Mi)}).forEach(Wt);else if(hn===null){hu("Detected double maximal shift for node `"+_n.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}Je();var Yt=0;if(m.avoidOverlap)for(var Dn=0;Dn0&&Ee[0].length<=3?Da/2:0),G=2*Math.PI/Ee[Fs].length*xs;return Fs===0&&Ee[0].length===1&&(tr=1),{x:Si.x+tr*Math.cos(G),y:Si.y+tr*Math.sin(G)}}else{var Bo={x:Si.x+(xs+1-(Rs+1)/2)*yo,y:(Fs+1)*$a};return Bo}};return S.nodes().layoutPositions(this,m,pa),this};var wre={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(m,k){return!0},ready:void 0,stop:void 0,transform:function(m,k){return k}};function $$(x){this.options=yt({},wre,x)}$$.prototype.run=function(){var x=this.options,m=x,k=x.cy,S=m.eles,M=m.counterclockwise!==void 0?!m.counterclockwise:m.clockwise,O=S.nodes().not(":parent");m.sort&&(O=O.sort(m.sort));for(var N=Wd(m.boundingBox?m.boundingBox:{x1:0,y1:0,w:k.width(),h:k.height()}),$={x:N.x1+N.w/2,y:N.y1+N.h/2},H=m.sweep===void 0?2*Math.PI-2*Math.PI/O.length:m.sweep,q=H/Math.max(1,O.length-1),Y,Z=0,ce=0;ce1&&m.avoidOverlap){Z*=1.75;var Ee=Math.cos(q)-Math.cos(0),Be=Math.sin(q)-Math.sin(0),Re=Math.sqrt(Z*Z/(Ee*Ee+Be*Be));Y=Math.max(Re,Y)}var Ve=function(st,Ye){var mt=m.startAngle+Ye*q*(M?1:-1),Je=Y*Math.cos(mt),Lt=Y*Math.sin(mt),Mt={x:$.x+Je,y:$.y+Lt};return Mt};return S.nodes().layoutPositions(this,m,Ve),this};var yre={fit:!0,padding:30,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(m){return m.degree()},levelWidth:function(m){return m.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(m,k){return!0},ready:void 0,stop:void 0,transform:function(m,k){return k}};function z$(x){this.options=yt({},yre,x)}z$.prototype.run=function(){for(var x=this.options,m=x,k=m.counterclockwise!==void 0?!m.counterclockwise:m.clockwise,S=x.cy,M=m.eles,O=M.nodes().not(":parent"),N=Wd(m.boundingBox?m.boundingBox:{x1:0,y1:0,w:S.width(),h:S.height()}),$={x:N.x1+N.w/2,y:N.y1+N.h/2},H=[],q=0,Y=0;Y0){var ct=Math.abs(Be[0].value-Ve.value);ct>=_e&&(Be=[],Ee.push(Be))}Be.push(Ve)}var st=q+m.minNodeSpacing;if(!m.avoidOverlap){var Ye=Ee.length>0&&Ee[0].length>1,mt=Math.min(N.w,N.h)/2-st,Je=mt/(Ee.length+Ye?1:0);st=Math.min(st,Je)}for(var Lt=0,Mt=0;Mt1&&m.avoidOverlap){var _n=Math.cos(Tt)-Math.cos(0),hn=Math.sin(Tt)-Math.sin(0),Yt=Math.sqrt(st*st/(_n*_n+hn*hn));Lt=Math.max(Yt,Lt)}ut.r=Lt,Lt+=st}if(m.equidistant){for(var Dn=0,ir=0,vr=0;vr=x.numIter||(Are(S,x),S.temperature=S.temperature*x.coolingFactor,S.temperature=x.animationThreshold&&O(),z0(Z)}};Y()}else{for(;q;)q=N(H),H++;V$(S,x),$()}return this},HS.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},HS.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var kre=function(m,k,S){for(var M=S.eles.edges(),O=S.eles.nodes(),N=Wd(S.boundingBox?S.boundingBox:{x1:0,y1:0,w:m.width(),h:m.height()}),$={isCompound:m.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:O.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:M.size(),temperature:S.initialTemp,clientWidth:N.w,clientHeight:N.h,boundingBox:N},H=S.eles.components(),q={},Y=0;Y0){$.graphSet.push(mt);for(var Y=0;YM.count?0:M.graph},Tre=function x(m,k,S,M){var O=M.graphSet[S];if(-10)var Z=M.nodeOverlap*Y,ce=Math.sqrt($*$+H*H),ve=Z*$/ce,me=Z*H/ce;else var Le=VS(m,$,H),_e=VS(k,-1*$,-1*H),Ee=_e.x-Le.x,Be=_e.y-Le.y,Re=Ee*Ee+Be*Be,ce=Math.sqrt(Re),Z=(m.nodeRepulsion+k.nodeRepulsion)/Re,ve=Z*Ee/ce,me=Z*Be/ce;m.isLocked||(m.offsetX-=ve,m.offsetY-=me),k.isLocked||(k.offsetX+=ve,k.offsetY+=me)}},Dre=function(m,k,S,M){if(S>0)var O=m.maxX-k.minX;else var O=k.maxX-m.minX;if(M>0)var N=m.maxY-k.minY;else var N=k.maxY-m.minY;return O>=0&&N>=0?Math.sqrt(O*O+N*N):0},VS=function(m,k,S){var M=m.positionX,O=m.positionY,N=m.height||1,$=m.width||1,H=S/k,q=N/$,Y={};return k===0&&0S?(Y.x=M,Y.y=O+N/2,Y):0k&&-1*q<=H&&H<=q?(Y.x=M-$/2,Y.y=O-$*S/2/k,Y):0=q)?(Y.x=M+N*k/2/S,Y.y=O+N/2,Y):(0>S&&(H<=-1*q||H>=q)&&(Y.x=M-N*k/2/S,Y.y=O-N/2),Y)},Ire=function(m,k){for(var S=0;SS){var _e=k.gravity*ve/Le,Ee=k.gravity*me/Le;ce.offsetX+=_e,ce.offsetY+=Ee}}}}},Nre=function(m,k){var S=[],M=0,O=-1;for(S.push.apply(S,m.graphSet[0]),O+=m.graphSet[0].length;M<=O;){var N=S[M++],$=m.idToIndex[N],H=m.layoutNodes[$],q=H.children;if(0S)var O={x:S*m/M,y:S*k/M};else var O={x:m,y:k};return O},Fre=function x(m,k){var S=m.parentId;if(S!=null){var M=k.layoutNodes[k.idToIndex[S]],O=!1;if((M.maxX==null||m.maxX+M.padRight>M.maxX)&&(M.maxX=m.maxX+M.padRight,O=!0),(M.minX==null||m.minX-M.padLeftM.maxY)&&(M.maxY=m.maxY+M.padBottom,O=!0),(M.minY==null||m.minY-M.padTopEe&&(me+=_e+k.componentSpacing,ve=0,Le=0,_e=0)}}},Rre={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(m){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(m,k){return!0},ready:void 0,stop:void 0,transform:function(m,k){return k}};function U$(x){this.options=yt({},Rre,x)}U$.prototype.run=function(){var x=this.options,m=x,k=x.cy,S=m.eles,M=S.nodes().not(":parent");m.sort&&(M=M.sort(m.sort));var O=Wd(m.boundingBox?m.boundingBox:{x1:0,y1:0,w:k.width(),h:k.height()});if(O.h===0||O.w===0)S.nodes().layoutPositions(this,m,function(Er){return{x:O.x1,y:O.y1}});else{var N=M.size(),$=Math.sqrt(N*O.h/O.w),H=Math.round($),q=Math.round(O.w/O.h*$),Y=function(Mr){if(Mr==null)return Math.min(H,q);var Cr=Math.min(H,q);Cr==H?H=Mr:q=Mr},Z=function(Mr){if(Mr==null)return Math.max(H,q);var Cr=Math.max(H,q);Cr==H?H=Mr:q=Mr},ce=m.rows,ve=m.cols!=null?m.cols:m.columns;if(ce!=null&&ve!=null)H=ce,q=ve;else if(ce!=null&&ve==null)H=ce,q=Math.ceil(N/H);else if(ce==null&&ve!=null)q=ve,H=Math.ceil(N/q);else if(q*H>N){var me=Y(),Le=Z();(me-1)*Le>=N?Y(me-1):(Le-1)*me>=N&&Z(Le-1)}else for(;q*H=N?Z(Ee+1):Y(_e+1)}var Be=O.w/q,Re=O.h/H;if(m.condense&&(Be=0,Re=0),m.avoidOverlap)for(var Ve=0;Ve=q&&(_n=0,Tt++)},Yt={},Dn=0;Dn(_n=EZ(x,m,hn[Yt],hn[Yt+1],hn[Yt+2],hn[Yt+3])))return _e(Ye,_n),!0}else if(Je.edgeType==="bezier"||Je.edgeType==="multibezier"||Je.edgeType==="self"||Je.edgeType==="compound"){for(var hn=Je.allpts,Yt=0;Yt+5(_n=kZ(x,m,hn[Yt],hn[Yt+1],hn[Yt+2],hn[Yt+3],hn[Yt+4],hn[Yt+5])))return _e(Ye,_n),!0}for(var Dn=Dn||mt.source,ir=ir||mt.target,vr=M.getArrowWidth(Lt,Mt),Nn=[{name:"source",x:Je.arrowStartX,y:Je.arrowStartY,angle:Je.srcArrowAngle},{name:"target",x:Je.arrowEndX,y:Je.arrowEndY,angle:Je.tgtArrowAngle},{name:"mid-source",x:Je.midX,y:Je.midY,angle:Je.midsrcArrowAngle},{name:"mid-target",x:Je.midX,y:Je.midY,angle:Je.midtgtArrowAngle}],Yt=0;Yt0&&(Ee(Dn),Ee(ir))}function Re(Ye,mt,Je){return K2(Ye,mt,Je)}function Ve(Ye,mt){var Je=Ye._private,Lt=ce,Mt;mt?Mt=mt+"-":Mt="",Ye.boundingBox();var ut=Je.labelBounds[mt||"main"],Wt=Ye.pstyle(Mt+"label").value,Tt=Ye.pstyle("text-events").strValue==="yes";if(!(!Tt||!Wt)){var _n=Re(Je.rscratch,"labelX",mt),hn=Re(Je.rscratch,"labelY",mt),Yt=Re(Je.rscratch,"labelAngle",mt),Dn=Ye.pstyle(Mt+"text-margin-x").pfValue,ir=Ye.pstyle(Mt+"text-margin-y").pfValue,vr=ut.x1-Lt-Dn,Nn=ut.x2+Lt-Dn,pr=ut.y1-Lt-ir,Er=ut.y2+Lt-ir;if(Yt){var Mr=Math.cos(Yt),Cr=Math.sin(Yt),Or=function(pa,Mi){return pa=pa-_n,Mi=Mi-hn,{x:pa*Mr-Mi*Cr+_n,y:pa*Cr+Mi*Mr+hn}},Wn=Or(vr,pr),br=Or(vr,Er),Sr=Or(Nn,pr),Nr=Or(Nn,Er),Si=[Wn.x+Dn,Wn.y+ir,Sr.x+Dn,Sr.y+ir,Nr.x+Dn,Nr.y+ir,br.x+Dn,br.y+ir];if(Yd(x,m,Si))return _e(Ye),!0}else if(e8(ut,x,m))return _e(Ye),!0}}for(var ct=N.length-1;ct>=0;ct--){var st=N[ct];st.isNode()?Ee(st)||Ve(st):Be(st)||Ve(st)||Ve(st,"source")||Ve(st,"target")}return $},w5.getAllInBox=function(x,m,k,S){var M=this.getCachedZSortedEles().interactive,O=[],N=Math.min(x,k),$=Math.max(x,k),H=Math.min(m,S),q=Math.max(m,S);x=N,k=$,m=H,S=q;for(var Y=Wd({x1:x,y1:m,x2:k,y2:S}),Z=0;Z0?Math.max(wr-Es,0):Math.min(wr+Es,0)},Wt=ut(Lt,mt),Tt=ut(Mt,Je),_n=!1;Be===q?Ee=Math.abs(Wt)>Math.abs(Tt)?M:S:Be===H||Be===$?(Ee=S,_n=!0):(Be===O||Be===N)&&(Ee=M,_n=!0);var hn=Ee===S,Yt=hn?Tt:Wt,Dn=hn?Mt:Lt,ir=fj(Dn),vr=!1;!(_n&&(Ve||st))&&(Be===$&&Dn<0||Be===H&&Dn>0||Be===O&&Dn>0||Be===N&&Dn<0)&&(ir*=-1,Yt=ir*Math.abs(Yt),vr=!0);var Nn;if(Ve){var pr=ct<0?1+ct:ct;Nn=pr*Yt}else{var Er=ct<0?Yt:0;Nn=Er+ct*ir}var Mr=function(wr){return Math.abs(wr)=Math.abs(Yt)},Cr=Mr(Nn),Or=Mr(Math.abs(Yt)-Math.abs(Nn)),Wn=Cr||Or;if(Wn&&!vr)if(hn){var br=Math.abs(Dn)<=ce/2,Sr=Math.abs(Lt)<=ve/2;if(br){var Nr=(Y.x1+Y.x2)/2,Si=Y.y1,ys=Y.y2;k.segpts=[Nr,Si,Nr,ys]}else if(Sr){var pa=(Y.y1+Y.y2)/2,Mi=Y.x1,gi=Y.x2;k.segpts=[Mi,pa,gi,pa]}else k.segpts=[Y.x1,Y.y2]}else{var fs=Math.abs(Dn)<=Z/2,Fs=Math.abs(Mt)<=me/2;if(fs){var xs=(Y.y1+Y.y2)/2,Rs=Y.x1,yo=Y.x2;k.segpts=[Rs,xs,yo,xs]}else if(Fs){var $a=(Y.x1+Y.x2)/2,Da=Y.y1,Bo=Y.y2;k.segpts=[$a,Da,$a,Bo]}else k.segpts=[Y.x2,Y.y1]}else if(hn){var tr=Y.y1+Nn+(_e?ce/2*ir:0),G=Y.x1,Jn=Y.x2;k.segpts=[G,tr,Jn,tr]}else{var kr=Y.x1+Nn+(_e?Z/2*ir:0),lr=Y.y1,Vt=Y.y2;k.segpts=[kr,lr,kr,Vt]}},S1.tryToCorrectInvalidPoints=function(x,m){var k=x._private.rscratch;if(k.edgeType==="bezier"){var S=m.srcPos,M=m.tgtPos,O=m.srcW,N=m.srcH,$=m.tgtW,H=m.tgtH,q=m.srcShape,Y=m.tgtShape,Z=!X(k.startX)||!X(k.startY),ce=!X(k.arrowStartX)||!X(k.arrowStartY),ve=!X(k.endX)||!X(k.endY),me=!X(k.arrowEndX)||!X(k.arrowEndY),Le=3,_e=this.getArrowWidth(x.pstyle("width").pfValue,x.pstyle("arrow-scale").value)*this.arrowShapeWidth,Ee=Le*_e,Be=h5({x:k.ctrlpts[0],y:k.ctrlpts[1]},{x:k.startX,y:k.startY}),Re=BeTt.poolIndex()){var _n=Wt;Wt=Tt,Tt=_n}var hn=Je.srcPos=Wt.position(),Yt=Je.tgtPos=Tt.position(),Dn=Je.srcW=Wt.outerWidth(),ir=Je.srcH=Wt.outerHeight(),vr=Je.tgtW=Tt.outerWidth(),Nn=Je.tgtH=Tt.outerHeight(),pr=Je.srcShape=k.nodeShapes[m.getNodeShape(Wt)],Er=Je.tgtShape=k.nodeShapes[m.getNodeShape(Tt)];Je.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var Mr=0;Mr0){var br=O,Sr=f5(br,J7(k)),Nr=f5(br,J7(Wn)),Si=Sr;if(Nr2){var ys=f5(br,{x:Wn[2],y:Wn[3]});ys0){var G=N,Jn=f5(G,J7(k)),kr=f5(G,J7(tr)),lr=Jn;if(kr2){var Vt=f5(G,{x:tr[2],y:tr[3]});Vt=me||Ye){_e={cp:Ve,segment:st};break}}if(_e)break}var mt=_e.cp,Je=_e.segment,Lt=(me-Ee)/Je.length,Mt=Je.t1-Je.t0,ut=ve?Je.t0+Mt*Lt:Je.t1-Mt*Lt;ut=U9(0,ut,1),m=Z7(mt.p0,mt.p1,mt.p2,ut),ce=Hre(mt.p0,mt.p1,mt.p2,ut);break}case"straight":case"segments":case"haystack":{for(var Wt=0,Tt,_n,hn,Yt,Dn=S.allpts.length,ir=0;ir+3=me));ir+=2);var vr=me-_n,Nn=vr/Tt;Nn=U9(0,Nn,1),m=fZ(hn,Yt,Nn),ce=GS(hn,Yt);break}}N("labelX",Z,m.x),N("labelY",Z,m.y),N("labelAutoAngle",Z,ce)}};q("source"),q("target"),this.applyLabelDimensions(x)}},km.applyLabelDimensions=function(x){this.applyPrefixedLabelDimensions(x),x.isEdge()&&(this.applyPrefixedLabelDimensions(x,"source"),this.applyPrefixedLabelDimensions(x,"target"))},km.applyPrefixedLabelDimensions=function(x,m){var k=x._private,S=this.getLabelText(x,m),M=this.calculateLabelDimensions(x,S),O=x.pstyle("line-height").pfValue,N=x.pstyle("text-wrap").strValue,$=K2(k.rscratch,"labelWrapCachedLines",m)||[],H=N!=="wrap"?1:Math.max($.length,1),q=M.height/H,Y=q*O,Z=M.width,ce=M.height+(H-1)*(O-1)*q;J3(k.rstyle,"labelWidth",m,Z),J3(k.rscratch,"labelWidth",m,Z),J3(k.rstyle,"labelHeight",m,ce),J3(k.rscratch,"labelHeight",m,ce),J3(k.rscratch,"labelLineHeight",m,Y)},km.getLabelText=function(x,m){var k=x._private,S=m?m+"-":"",M=x.pstyle(S+"label").strValue,O=x.pstyle("text-transform").value,N=function(vr,Nn){return Nn?(J3(k.rscratch,vr,m,Nn),Nn):K2(k.rscratch,vr,m)};if(!M)return"";O=="none"||(O=="uppercase"?M=M.toUpperCase():O=="lowercase"&&(M=M.toLowerCase()));var $=x.pstyle("text-wrap").value;if($==="wrap"){var H=N("labelKey");if(H!=null&&N("labelWrapKey")===H)return N("labelWrapCachedText");for(var q="​",Y=M.split(` +`),Z=x.pstyle("text-max-width").pfValue,ce=x.pstyle("text-overflow-wrap").value,ve=ce==="anywhere",me=[],Le=/[\s\u200b]+/,_e=ve?"":" ",Ee=0;EeZ){for(var st=Be.split(Le),Ye="",mt=0;mtWt)break;Tt+=M[Yt],Yt===M.length-1&&(hn=!0)}return hn||(Tt+=_n),Tt}return M},km.getLabelJustification=function(x){var m=x.pstyle("text-justification").strValue,k=x.pstyle("text-halign").strValue;if(m==="auto")if(x.isNode())switch(k){case"left":return"right";case"right":return"left";default:return"center"}else return"center";else return m},km.calculateLabelDimensions=function(x,m){var k=this,S=ud(m,x._private.labelDimsKey),M=k.labelDimCache||(k.labelDimCache=[]),O=M[S];if(O!=null)return O;var N=0,$=x.pstyle("font-style").strValue,H=x.pstyle("font-size").pfValue,q=x.pstyle("font-family").strValue,Y=x.pstyle("font-weight").strValue,Z=this.labelCalcCanvas,ce=this.labelCalcCanvasContext;if(!Z){Z=this.labelCalcCanvas=document.createElement("canvas"),ce=this.labelCalcCanvasContext=Z.getContext("2d");var ve=Z.style;ve.position="absolute",ve.left="-9999px",ve.top="-9999px",ve.zIndex="-1",ve.visibility="hidden",ve.pointerEvents="none"}ce.font="".concat($," ").concat(Y," ").concat(H,"px ").concat(q);for(var me=0,Le=0,_e=m.split(` +`),Ee=0;Ee<_e.length;Ee++){var Be=_e[Ee],Re=ce.measureText(Be),Ve=Math.ceil(Re.width),ct=H;me=Math.max(Ve,me),Le+=ct}return me+=N,Le+=N,M[S]={width:me,height:Le}},km.calculateLabelAngle=function(x,m){var k=x._private,S=k.rscratch,M=x.isEdge(),O=m?m+"-":"",N=x.pstyle(O+"text-rotation"),$=N.strValue;return $==="none"?0:M&&$==="autorotate"?S.labelAutoAngle:$==="autorotate"?0:N.pfValue},km.calculateLabelAngles=function(x){var m=this,k=x.isEdge(),S=x._private,M=S.rscratch;M.labelAngle=m.calculateLabelAngle(x),k&&(M.sourceLabelAngle=m.calculateLabelAngle(x,"source"),M.targetLabelAngle=m.calculateLabelAngle(x,"target"))};var ez={},tz=28,nz=!1;ez.getNodeShape=function(x){var m=this,k=x.pstyle("shape").value;if(k==="cutrectangle"&&(x.width()1&&arguments[1]!==void 0?arguments[1]:!0;if(m.merge(N),$)for(var H=0;H=x.desktopTapThreshold2}var Wv=M(G);Wl&&(x.hoverData.tapholdCancelled=!0);var sy=function(){var Em=x.hoverData.dragDelta=x.hoverData.dragDelta||[];Em.length===0?(Em.push(xo[0]),Em.push(xo[1])):(Em[0]+=xo[0],Em[1]+=xo[1])};kr=!0,S(za,["mousemove","vmousemove","tapdrag"],G,{x:wr[0],y:wr[1]});var E8=function(){x.data.bgActivePosistion=void 0,x.hoverData.selecting||lr.emit({originalEvent:G,type:"boxstart",position:{x:wr[0],y:wr[1]}}),$c[4]=1,x.hoverData.selecting=!0,x.redrawHint("select",!0),x.redraw()};if(x.hoverData.which===3){if(Wl){var x5={originalEvent:G,type:"cxtdrag",position:{x:wr[0],y:wr[1]}};ba?ba.emit(x5):lr.emit(x5),x.hoverData.cxtDragged=!0,(!x.hoverData.cxtOver||za!==x.hoverData.cxtOver)&&(x.hoverData.cxtOver&&x.hoverData.cxtOver.emit({originalEvent:G,type:"cxtdragout",position:{x:wr[0],y:wr[1]}}),x.hoverData.cxtOver=za,za&&za.emit({originalEvent:G,type:"cxtdragover",position:{x:wr[0],y:wr[1]}}))}}else if(x.hoverData.dragging){if(kr=!0,lr.panningEnabled()&&lr.userPanningEnabled()){var T8;if(x.hoverData.justStartedPan){var ZS=x.hoverData.mdownPos;T8={x:(wr[0]-ZS[0])*Vt,y:(wr[1]-ZS[1])*Vt},x.hoverData.justStartedPan=!1}else T8={x:xo[0]*Vt,y:xo[1]*Vt};lr.panBy(T8),lr.emit("dragpan"),x.hoverData.dragged=!0}wr=x.projectIntoViewport(G.clientX,G.clientY)}else if($c[4]==1&&(ba==null||ba.pannable())){if(Wl){if(!x.hoverData.dragging&&lr.boxSelectionEnabled()&&(Wv||!lr.panningEnabled()||!lr.userPanningEnabled()))E8();else if(!x.hoverData.selecting&&lr.panningEnabled()&&lr.userPanningEnabled()){var k5=O(ba,x.hoverData.downs);k5&&(x.hoverData.dragging=!0,x.hoverData.justStartedPan=!0,$c[4]=0,x.data.bgActivePosistion=J7(Es),x.redrawHint("select",!0),x.redraw())}ba&&ba.pannable()&&ba.active()&&ba.unactivate()}}else{if(ba&&ba.pannable()&&ba.active()&&ba.unactivate(),(!ba||!ba.grabbed())&&za!=Sc&&(Sc&&S(Sc,["mouseout","tapdragout"],G,{x:wr[0],y:wr[1]}),za&&S(za,["mouseover","tapdragover"],G,{x:wr[0],y:wr[1]}),x.hoverData.last=za),ba)if(Wl){if(lr.boxSelectionEnabled()&&Wv)ba&&ba.grabbed()&&(_e(lh),ba.emit("freeon"),lh.emit("free"),x.dragData.didDrag&&(ba.emit("dragfreeon"),lh.emit("dragfree"))),E8();else if(ba&&ba.grabbed()&&x.nodeIsDraggable(ba)){var Qd=!x.dragData.didDrag;Qd&&x.redrawHint("eles",!0),x.dragData.didDrag=!0,x.hoverData.draggingEles||me(lh,{inDragLayer:!0});var _1={x:0,y:0};if(X(xo[0])&&X(xo[1])&&(_1.x+=xo[0],_1.y+=xo[1],Qd)){var Jd=x.hoverData.dragDelta;Jd&&X(Jd[0])&&X(Jd[1])&&(_1.x+=Jd[0],_1.y+=Jd[1])}x.hoverData.draggingEles=!0,lh.silentShift(_1).emit("position drag"),x.redrawHint("drag",!0),x.redraw()}}else sy();kr=!0}if($c[2]=wr[0],$c[3]=wr[1],kr)return G.stopPropagation&&G.stopPropagation(),G.preventDefault&&G.preventDefault(),!1}},!1);var Lt,Mt,ut;x.registerBinding(m,"mouseup",function(G){var Jn=x.hoverData.capture;if(Jn){x.hoverData.capture=!1;var kr=x.cy,lr=x.projectIntoViewport(G.clientX,G.clientY),Vt=x.selection,Hs=x.findNearestElement(lr[0],lr[1],!0,!1),wr=x.dragData.possibleDragElements,Es=x.hoverData.down,go=M(G);if(x.data.bgActivePosistion&&(x.redrawHint("select",!0),x.redraw()),x.hoverData.tapholdCancelled=!0,x.data.bgActivePosistion=void 0,Es&&Es.unactivate(),x.hoverData.which===3){var $c={originalEvent:G,type:"cxttapend",position:{x:lr[0],y:lr[1]}};if(Es?Es.emit($c):kr.emit($c),!x.hoverData.cxtDragged){var za={originalEvent:G,type:"cxttap",position:{x:lr[0],y:lr[1]}};Es?Es.emit(za):kr.emit(za)}x.hoverData.cxtDragged=!1,x.hoverData.which=null}else if(x.hoverData.which===1){if(S(Hs,["mouseup","tapend","vmouseup"],G,{x:lr[0],y:lr[1]}),!x.dragData.didDrag&&!x.hoverData.dragged&&!x.hoverData.selecting&&!x.hoverData.isOverThresholdDrag&&(S(Es,["click","tap","vclick"],G,{x:lr[0],y:lr[1]}),Mt=!1,G.timeStamp-ut<=kr.multiClickDebounceTime()?(Lt&&clearTimeout(Lt),Mt=!0,ut=null,S(Es,["dblclick","dbltap","vdblclick"],G,{x:lr[0],y:lr[1]})):(Lt=setTimeout(function(){Mt||S(Es,["oneclick","onetap","voneclick"],G,{x:lr[0],y:lr[1]})},kr.multiClickDebounceTime()),ut=G.timeStamp)),Es==null&&!x.dragData.didDrag&&!x.hoverData.selecting&&!x.hoverData.dragged&&!M(G)&&(kr.$(k).unselect(["tapunselect"]),wr.length>0&&x.redrawHint("eles",!0),x.dragData.possibleDragElements=wr=kr.collection()),Hs==Es&&!x.dragData.didDrag&&!x.hoverData.selecting&&Hs!=null&&Hs._private.selectable&&(x.hoverData.dragging||(kr.selectionType()==="additive"||go?Hs.selected()?Hs.unselect(["tapunselect"]):Hs.select(["tapselect"]):go||(kr.$(k).unmerge(Hs).unselect(["tapunselect"]),Hs.select(["tapselect"]))),x.redrawHint("eles",!0)),x.hoverData.selecting){var Sc=kr.collection(x.getAllInBox(Vt[0],Vt[1],Vt[2],Vt[3]));x.redrawHint("select",!0),Sc.length>0&&x.redrawHint("eles",!0),kr.emit({type:"boxend",originalEvent:G,position:{x:lr[0],y:lr[1]}});var ba=function(Wl){return Wl.selectable()&&!Wl.selected()};kr.selectionType()==="additive"||go||kr.$(k).unmerge(Sc).unselect(),Sc.emit("box").stdFilter(ba).select().emit("boxselect"),x.redraw()}if(x.hoverData.dragging&&(x.hoverData.dragging=!1,x.redrawHint("select",!0),x.redrawHint("eles",!0),x.redraw()),!Vt[4]){x.redrawHint("drag",!0),x.redrawHint("eles",!0);var xo=Es&&Es.grabbed();_e(wr),xo&&(Es.emit("freeon"),wr.emit("free"),x.dragData.didDrag&&(Es.emit("dragfreeon"),wr.emit("dragfree")))}}Vt[4]=0,x.hoverData.down=null,x.hoverData.cxtStarted=!1,x.hoverData.draggingEles=!1,x.hoverData.selecting=!1,x.hoverData.isOverThresholdDrag=!1,x.dragData.didDrag=!1,x.hoverData.dragged=!1,x.hoverData.dragDelta=[],x.hoverData.mdownPos=null,x.hoverData.mdownGPos=null}},!1);var Wt=function(G){if(!x.scrollingPage){var Jn=x.cy,kr=Jn.zoom(),lr=Jn.pan(),Vt=x.projectIntoViewport(G.clientX,G.clientY),Hs=[Vt[0]*kr+lr.x,Vt[1]*kr+lr.y];if(x.hoverData.draggingEles||x.hoverData.dragging||x.hoverData.cxtStarted||mt()){G.preventDefault();return}if(Jn.panningEnabled()&&Jn.userPanningEnabled()&&Jn.zoomingEnabled()&&Jn.userZoomingEnabled()){G.preventDefault(),x.data.wheelZooming=!0,clearTimeout(x.data.wheelTimeout),x.data.wheelTimeout=setTimeout(function(){x.data.wheelZooming=!1,x.redrawHint("eles",!0),x.redraw()},150);var wr;G.deltaY!=null?wr=G.deltaY/-250:G.wheelDeltaY!=null?wr=G.wheelDeltaY/1e3:wr=G.wheelDelta/1e3,wr=wr*x.wheelSensitivity;var Es=G.deltaMode===1;Es&&(wr*=33);var go=Jn.zoom()*Math.pow(10,wr);G.type==="gesturechange"&&(go=x.gestureStartZoom*G.scale),Jn.zoom({level:go,renderedPosition:{x:Hs[0],y:Hs[1]}}),Jn.emit(G.type==="gesturechange"?"pinchzoom":"scrollzoom")}}};x.registerBinding(x.container,"wheel",Wt,!0),x.registerBinding(m,"scroll",function(G){x.scrollingPage=!0,clearTimeout(x.scrollingPageTimeout),x.scrollingPageTimeout=setTimeout(function(){x.scrollingPage=!1},250)},!0),x.registerBinding(x.container,"gesturestart",function(G){x.gestureStartZoom=x.cy.zoom(),x.hasTouchStarted||G.preventDefault()},!0),x.registerBinding(x.container,"gesturechange",function(tr){x.hasTouchStarted||Wt(tr)},!0),x.registerBinding(x.container,"mouseout",function(G){var Jn=x.projectIntoViewport(G.clientX,G.clientY);x.cy.emit({originalEvent:G,type:"mouseout",position:{x:Jn[0],y:Jn[1]}})},!1),x.registerBinding(x.container,"mouseover",function(G){var Jn=x.projectIntoViewport(G.clientX,G.clientY);x.cy.emit({originalEvent:G,type:"mouseover",position:{x:Jn[0],y:Jn[1]}})},!1);var Tt,_n,hn,Yt,Dn,ir,vr,Nn,pr,Er,Mr,Cr,Or,Wn=function(G,Jn,kr,lr){return Math.sqrt((kr-G)*(kr-G)+(lr-Jn)*(lr-Jn))},br=function(G,Jn,kr,lr){return(kr-G)*(kr-G)+(lr-Jn)*(lr-Jn)},Sr;x.registerBinding(x.container,"touchstart",Sr=function(G){if(x.hasTouchStarted=!0,!!Je(G)){Be(),x.touchData.capture=!0,x.data.bgActivePosistion=void 0;var Jn=x.cy,kr=x.touchData.now,lr=x.touchData.earlier;if(G.touches[0]){var Vt=x.projectIntoViewport(G.touches[0].clientX,G.touches[0].clientY);kr[0]=Vt[0],kr[1]=Vt[1]}if(G.touches[1]){var Vt=x.projectIntoViewport(G.touches[1].clientX,G.touches[1].clientY);kr[2]=Vt[0],kr[3]=Vt[1]}if(G.touches[2]){var Vt=x.projectIntoViewport(G.touches[2].clientX,G.touches[2].clientY);kr[4]=Vt[0],kr[5]=Vt[1]}if(G.touches[1]){x.touchData.singleTouchMoved=!0,_e(x.dragData.touchDragEles);var Hs=x.findContainerClientCoords();pr=Hs[0],Er=Hs[1],Mr=Hs[2],Cr=Hs[3],Tt=G.touches[0].clientX-pr,_n=G.touches[0].clientY-Er,hn=G.touches[1].clientX-pr,Yt=G.touches[1].clientY-Er,Or=0<=Tt&&Tt<=Mr&&0<=hn&&hn<=Mr&&0<=_n&&_n<=Cr&&0<=Yt&&Yt<=Cr;var wr=Jn.pan(),Es=Jn.zoom();Dn=Wn(Tt,_n,hn,Yt),ir=br(Tt,_n,hn,Yt),vr=[(Tt+hn)/2,(_n+Yt)/2],Nn=[(vr[0]-wr.x)/Es,(vr[1]-wr.y)/Es];var go=200,$c=go*go;if(ir<$c&&!G.touches[2]){var za=x.findNearestElement(kr[0],kr[1],!0,!0),Sc=x.findNearestElement(kr[2],kr[3],!0,!0);za&&za.isNode()?(za.activate().emit({originalEvent:G,type:"cxttapstart",position:{x:kr[0],y:kr[1]}}),x.touchData.start=za):Sc&&Sc.isNode()?(Sc.activate().emit({originalEvent:G,type:"cxttapstart",position:{x:kr[0],y:kr[1]}}),x.touchData.start=Sc):Jn.emit({originalEvent:G,type:"cxttapstart",position:{x:kr[0],y:kr[1]}}),x.touchData.start&&(x.touchData.start._private.grabbed=!1),x.touchData.cxt=!0,x.touchData.cxtDragged=!1,x.data.bgActivePosistion=void 0,x.redraw();return}}if(G.touches[2])Jn.boxSelectionEnabled()&&G.preventDefault();else if(!G.touches[1]){if(G.touches[0]){var ba=x.findNearestElements(kr[0],kr[1],!0,!0),xo=ba[0];if(xo!=null&&(xo.activate(),x.touchData.start=xo,x.touchData.starts=ba,x.nodeIsGrabbable(xo))){var lh=x.dragData.touchDragEles=Jn.collection(),Wl=null;x.redrawHint("eles",!0),x.redrawHint("drag",!0),xo.selected()?(Wl=Jn.$(function(fd){return fd.selected()&&x.nodeIsGrabbable(fd)}),me(Wl,{addToList:lh})):Le(xo,{addToList:lh}),Y(xo);var Z2=function(Wv){return{originalEvent:G,type:Wv,position:{x:kr[0],y:kr[1]}}};xo.emit(Z2("grabon")),Wl?Wl.forEach(function(fd){fd.emit(Z2("grab"))}):xo.emit(Z2("grab"))}S(xo,["touchstart","tapstart","vmousedown"],G,{x:kr[0],y:kr[1]}),xo==null&&(x.data.bgActivePosistion={x:Vt[0],y:Vt[1]},x.redrawHint("select",!0),x.redraw()),x.touchData.singleTouchMoved=!1,x.touchData.singleTouchStartTime=+new Date,clearTimeout(x.touchData.tapholdTimeout),x.touchData.tapholdTimeout=setTimeout(function(){x.touchData.singleTouchMoved===!1&&!x.pinching&&!x.touchData.selecting&&S(x.touchData.start,["taphold"],G,{x:kr[0],y:kr[1]})},x.tapholdDuration)}}if(G.touches.length>=1){for(var eb=x.touchData.startPosition=[null,null,null,null,null,null],G0=0;G0=x.touchTapThreshold2}if(Jn&&x.touchData.cxt){G.preventDefault();var eb=G.touches[0].clientX-pr,G0=G.touches[0].clientY-Er,zp=G.touches[1].clientX-pr,fd=G.touches[1].clientY-Er,Wv=br(eb,G0,zp,fd),sy=Wv/ir,E8=150,x5=E8*E8,T8=1.5,ZS=T8*T8;if(sy>=ZS||Wv>=x5){x.touchData.cxt=!1,x.data.bgActivePosistion=void 0,x.redrawHint("select",!0);var k5={originalEvent:G,type:"cxttapend",position:{x:Vt[0],y:Vt[1]}};x.touchData.start?(x.touchData.start.unactivate().emit(k5),x.touchData.start=null):lr.emit(k5)}}if(Jn&&x.touchData.cxt){var k5={originalEvent:G,type:"cxtdrag",position:{x:Vt[0],y:Vt[1]}};x.data.bgActivePosistion=void 0,x.redrawHint("select",!0),x.touchData.start?x.touchData.start.emit(k5):lr.emit(k5),x.touchData.start&&(x.touchData.start._private.grabbed=!1),x.touchData.cxtDragged=!0;var Qd=x.findNearestElement(Vt[0],Vt[1],!0,!0);(!x.touchData.cxtOver||Qd!==x.touchData.cxtOver)&&(x.touchData.cxtOver&&x.touchData.cxtOver.emit({originalEvent:G,type:"cxtdragout",position:{x:Vt[0],y:Vt[1]}}),x.touchData.cxtOver=Qd,Qd&&Qd.emit({originalEvent:G,type:"cxtdragover",position:{x:Vt[0],y:Vt[1]}}))}else if(Jn&&G.touches[2]&&lr.boxSelectionEnabled())G.preventDefault(),x.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,x.touchData.selecting||lr.emit({originalEvent:G,type:"boxstart",position:{x:Vt[0],y:Vt[1]}}),x.touchData.selecting=!0,x.touchData.didSelect=!0,kr[4]=1,!kr||kr.length===0||kr[0]===void 0?(kr[0]=(Vt[0]+Vt[2]+Vt[4])/3,kr[1]=(Vt[1]+Vt[3]+Vt[5])/3,kr[2]=(Vt[0]+Vt[2]+Vt[4])/3+1,kr[3]=(Vt[1]+Vt[3]+Vt[5])/3+1):(kr[2]=(Vt[0]+Vt[2]+Vt[4])/3,kr[3]=(Vt[1]+Vt[3]+Vt[5])/3),x.redrawHint("select",!0),x.redraw();else if(Jn&&G.touches[1]&&!x.touchData.didSelect&&lr.zoomingEnabled()&&lr.panningEnabled()&&lr.userZoomingEnabled()&&lr.userPanningEnabled()){G.preventDefault(),x.data.bgActivePosistion=void 0,x.redrawHint("select",!0);var _1=x.dragData.touchDragEles;if(_1){x.redrawHint("drag",!0);for(var Jd=0;Jd<_1.length;Jd++){var Yv=_1[Jd]._private;Yv.grabbed=!1,Yv.rscratch.inDragLayer=!1}}var Em=x.touchData.start,eb=G.touches[0].clientX-pr,G0=G.touches[0].clientY-Er,zp=G.touches[1].clientX-pr,fd=G.touches[1].clientY-Er,Lz=Wn(eb,G0,zp,fd),Lie=Lz/Dn;if(Or){var Mie=eb-Tt,e_=G0-_n,Die=zp-hn,Iie=fd-Yt,E5=(Mie+Die)/2,Mz=(e_+Iie)/2,yk=lr.zoom(),UI=yk*Lie,t_=lr.pan(),Dz=Nn[0]*yk+t_.x,Iz=Nn[1]*yk+t_.y,Oie={x:-UI/yk*(Dz-t_.x-E5)+Dz,y:-UI/yk*(Iz-t_.y-Mz)+Iz};if(Em&&Em.active()){var _1=x.dragData.touchDragEles;_e(_1),x.redrawHint("drag",!0),x.redrawHint("eles",!0),Em.unactivate().emit("freeon"),_1.emit("free"),x.dragData.didDrag&&(Em.emit("dragfreeon"),_1.emit("dragfree"))}lr.viewport({zoom:UI,pan:Oie,cancelOnFailedZoom:!0}),lr.emit("pinchzoom"),Dn=Lz,Tt=eb,_n=G0,hn=zp,Yt=fd,x.pinching=!0}if(G.touches[0]){var Es=x.projectIntoViewport(G.touches[0].clientX,G.touches[0].clientY);Vt[0]=Es[0],Vt[1]=Es[1]}if(G.touches[1]){var Es=x.projectIntoViewport(G.touches[1].clientX,G.touches[1].clientY);Vt[2]=Es[0],Vt[3]=Es[1]}if(G.touches[2]){var Es=x.projectIntoViewport(G.touches[2].clientX,G.touches[2].clientY);Vt[4]=Es[0],Vt[5]=Es[1]}}else if(G.touches[0]&&!x.touchData.didSelect){var qp=x.touchData.start,n_=x.touchData.last,Qd;if(!x.hoverData.draggingEles&&!x.swipePanning&&(Qd=x.findNearestElement(Vt[0],Vt[1],!0,!0)),Jn&&qp!=null&&G.preventDefault(),Jn&&qp!=null&&x.nodeIsDraggable(qp))if($c){var _1=x.dragData.touchDragEles,GI=!x.dragData.didDrag;GI&&me(_1,{inDragLayer:!0}),x.dragData.didDrag=!0;var Tm={x:0,y:0};if(X(za[0])&&X(za[1])&&(Tm.x+=za[0],Tm.y+=za[1],GI)){x.redrawHint("eles",!0);var Zd=x.touchData.dragDelta;Zd&&X(Zd[0])&&X(Zd[1])&&(Tm.x+=Zd[0],Tm.y+=Zd[1])}x.hoverData.draggingEles=!0,_1.silentShift(Tm).emit("position drag"),x.redrawHint("drag",!0),x.touchData.startPosition[0]==Hs[0]&&x.touchData.startPosition[1]==Hs[1]&&x.redrawHint("eles",!0),x.redraw()}else{var Zd=x.touchData.dragDelta=x.touchData.dragDelta||[];Zd.length===0?(Zd.push(za[0]),Zd.push(za[1])):(Zd[0]+=za[0],Zd[1]+=za[1])}if(S(qp||Qd,["touchmove","tapdrag","vmousemove"],G,{x:Vt[0],y:Vt[1]}),(!qp||!qp.grabbed())&&Qd!=n_&&(n_&&n_.emit({originalEvent:G,type:"tapdragout",position:{x:Vt[0],y:Vt[1]}}),Qd&&Qd.emit({originalEvent:G,type:"tapdragover",position:{x:Vt[0],y:Vt[1]}})),x.touchData.last=Qd,Jn)for(var Jd=0;Jd0&&!x.hoverData.draggingEles&&!x.swipePanning&&x.data.bgActivePosistion!=null&&(x.data.bgActivePosistion=void 0,x.redrawHint("select",!0),x.redraw())}},!1);var Si;x.registerBinding(m,"touchcancel",Si=function(G){var Jn=x.touchData.start;x.touchData.capture=!1,Jn&&Jn.unactivate()});var ys,pa,Mi,gi;if(x.registerBinding(m,"touchend",ys=function(G){var Jn=x.touchData.start,kr=x.touchData.capture;if(kr)G.touches.length===0&&(x.touchData.capture=!1),G.preventDefault();else return;var lr=x.selection;x.swipePanning=!1,x.hoverData.draggingEles=!1;var Vt=x.cy,Hs=Vt.zoom(),wr=x.touchData.now,Es=x.touchData.earlier;if(G.touches[0]){var go=x.projectIntoViewport(G.touches[0].clientX,G.touches[0].clientY);wr[0]=go[0],wr[1]=go[1]}if(G.touches[1]){var go=x.projectIntoViewport(G.touches[1].clientX,G.touches[1].clientY);wr[2]=go[0],wr[3]=go[1]}if(G.touches[2]){var go=x.projectIntoViewport(G.touches[2].clientX,G.touches[2].clientY);wr[4]=go[0],wr[5]=go[1]}Jn&&Jn.unactivate();var $c;if(x.touchData.cxt){if($c={originalEvent:G,type:"cxttapend",position:{x:wr[0],y:wr[1]}},Jn?Jn.emit($c):Vt.emit($c),!x.touchData.cxtDragged){var za={originalEvent:G,type:"cxttap",position:{x:wr[0],y:wr[1]}};Jn?Jn.emit(za):Vt.emit(za)}x.touchData.start&&(x.touchData.start._private.grabbed=!1),x.touchData.cxt=!1,x.touchData.start=null,x.redraw();return}if(!G.touches[2]&&Vt.boxSelectionEnabled()&&x.touchData.selecting){x.touchData.selecting=!1;var Sc=Vt.collection(x.getAllInBox(lr[0],lr[1],lr[2],lr[3]));lr[0]=void 0,lr[1]=void 0,lr[2]=void 0,lr[3]=void 0,lr[4]=0,x.redrawHint("select",!0),Vt.emit({type:"boxend",originalEvent:G,position:{x:wr[0],y:wr[1]}});var ba=function(x5){return x5.selectable()&&!x5.selected()};Sc.emit("box").stdFilter(ba).select().emit("boxselect"),Sc.nonempty()&&x.redrawHint("eles",!0),x.redraw()}if(Jn!=null&&Jn.unactivate(),G.touches[2])x.data.bgActivePosistion=void 0,x.redrawHint("select",!0);else if(!G.touches[1]){if(!G.touches[0]){if(!G.touches[0]){x.data.bgActivePosistion=void 0,x.redrawHint("select",!0);var xo=x.dragData.touchDragEles;if(Jn!=null){var lh=Jn._private.grabbed;_e(xo),x.redrawHint("drag",!0),x.redrawHint("eles",!0),lh&&(Jn.emit("freeon"),xo.emit("free"),x.dragData.didDrag&&(Jn.emit("dragfreeon"),xo.emit("dragfree"))),S(Jn,["touchend","tapend","vmouseup","tapdragout"],G,{x:wr[0],y:wr[1]}),Jn.unactivate(),x.touchData.start=null}else{var Wl=x.findNearestElement(wr[0],wr[1],!0,!0);S(Wl,["touchend","tapend","vmouseup","tapdragout"],G,{x:wr[0],y:wr[1]})}var Z2=x.touchData.startPosition[0]-wr[0],eb=Z2*Z2,G0=x.touchData.startPosition[1]-wr[1],zp=G0*G0,fd=eb+zp,Wv=fd*Hs*Hs;x.touchData.singleTouchMoved||(Jn||Vt.$(":selected").unselect(["tapunselect"]),S(Jn,["tap","vclick"],G,{x:wr[0],y:wr[1]}),pa=!1,G.timeStamp-gi<=Vt.multiClickDebounceTime()?(Mi&&clearTimeout(Mi),pa=!0,gi=null,S(Jn,["dbltap","vdblclick"],G,{x:wr[0],y:wr[1]})):(Mi=setTimeout(function(){pa||S(Jn,["onetap","voneclick"],G,{x:wr[0],y:wr[1]})},Vt.multiClickDebounceTime()),gi=G.timeStamp)),Jn!=null&&!x.dragData.didDrag&&Jn._private.selectable&&Wv"u"){var fs=[],Fs=function(G){return{clientX:G.clientX,clientY:G.clientY,force:1,identifier:G.pointerId,pageX:G.pageX,pageY:G.pageY,radiusX:G.width/2,radiusY:G.height/2,screenX:G.screenX,screenY:G.screenY,target:G.target}},xs=function(G){return{event:G,touch:Fs(G)}},Rs=function(G){fs.push(xs(G))},yo=function(G){for(var Jn=0;Jn0)return Nn[0]}return null},ve=Object.keys(Z),me=0;me0?ce:bj(O,N,m,k,S,M,$)},checkPoint:function(m,k,S,M,O,N,$){var H=W9(M,O),q=2*H;if(Uv(m,k,this.points,N,$,M,O-q,[0,-1],S)||Uv(m,k,this.points,N,$,M-q,O,[0,-1],S))return!0;var Y=M/2+2*S,Z=O/2+2*S,ce=[N-Y,$-Z,N-Y,$,N+Y,$,N+Y,$-Z];return!!(Yd(m,k,ce)||d5(m,k,q,q,N+M/2-H,$+O/2-H,S)||d5(m,k,q,q,N-M/2+H,$+O/2-H,S))}}},Kv.registerNodeShapes=function(){var x=this.nodeShapes={},m=this;this.generateEllipse(),this.generatePolygon("triangle",hd(3,0)),this.generateRoundPolygon("round-triangle",hd(3,0)),this.generatePolygon("rectangle",hd(4,0)),x.square=x.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();{var k=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",k),this.generateRoundPolygon("round-diamond",k)}this.generatePolygon("pentagon",hd(5,0)),this.generateRoundPolygon("round-pentagon",hd(5,0)),this.generatePolygon("hexagon",hd(6,0)),this.generateRoundPolygon("round-hexagon",hd(6,0)),this.generatePolygon("heptagon",hd(7,0)),this.generateRoundPolygon("round-heptagon",hd(7,0)),this.generatePolygon("octagon",hd(8,0)),this.generateRoundPolygon("round-octagon",hd(8,0));var S=new Array(20);{var M=oI(5,0),O=oI(5,Math.PI/5),N=.5*(3-Math.sqrt(5));N*=1.57;for(var $=0;$=m.deqFastCost*Ve)break}else if(q){if(Be>=m.deqCost*ve||Be>=m.deqAvgCost*ce)break}else if(Re>=m.deqNoDrawCost*RI)break;var ct=m.deq(S,_e,Le);if(ct.length>0)for(var st=0;st0&&(m.onDeqd(S,me),!q&&m.shouldRedraw(S,me,_e,Le)&&O())},$=m.priority||nI;M.beforeRender(N,$(S))}}}},Ure=function(){function x(m){var k=arguments.length>1&&arguments[1]!==void 0?arguments[1]:X3;d(this,x),this.idsByKey=new wm,this.keyForId=new wm,this.cachesByLvl=new wm,this.lvls=[],this.getKey=m,this.doesEleInvalidateKey=k}return v(x,[{key:"getIdsFor",value:function(k){k==null&&ch("Can not get id list for null key");var S=this.idsByKey,M=this.idsByKey.get(k);return M||(M=new Q7,S.set(k,M)),M}},{key:"addIdForKey",value:function(k,S){k!=null&&this.getIdsFor(k).add(S)}},{key:"deleteIdForKey",value:function(k,S){k!=null&&this.getIdsFor(k).delete(S)}},{key:"getNumberOfIdsForKey",value:function(k){return k==null?0:this.getIdsFor(k).size}},{key:"updateKeyMappingFor",value:function(k){var S=k.id(),M=this.keyForId.get(S),O=this.getKey(k);this.deleteIdForKey(M,S),this.addIdForKey(O,S),this.keyForId.set(S,O)}},{key:"deleteKeyMappingFor",value:function(k){var S=k.id(),M=this.keyForId.get(S);this.deleteIdForKey(M,S),this.keyForId.delete(S)}},{key:"keyHasChangedFor",value:function(k){var S=k.id(),M=this.keyForId.get(S),O=this.getKey(k);return M!==O}},{key:"isInvalid",value:function(k){return this.keyHasChangedFor(k)||this.doesEleInvalidateKey(k)}},{key:"getCachesAt",value:function(k){var S=this.cachesByLvl,M=this.lvls,O=S.get(k);return O||(O=new wm,S.set(k,O),M.push(k)),O}},{key:"getCache",value:function(k,S){return this.getCachesAt(S).get(k)}},{key:"get",value:function(k,S){var M=this.getKey(k),O=this.getCache(M,S);return O!=null&&this.updateKeyMappingFor(k),O}},{key:"getForCachedKey",value:function(k,S){var M=this.keyForId.get(k.id()),O=this.getCache(M,S);return O}},{key:"hasCache",value:function(k,S){return this.getCachesAt(S).has(k)}},{key:"has",value:function(k,S){var M=this.getKey(k);return this.hasCache(M,S)}},{key:"setCache",value:function(k,S,M){M.key=k,this.getCachesAt(S).set(k,M)}},{key:"set",value:function(k,S,M){var O=this.getKey(k);this.setCache(O,S,M),this.updateKeyMappingFor(k)}},{key:"deleteCache",value:function(k,S){this.getCachesAt(S).delete(k)}},{key:"delete",value:function(k,S){var M=this.getKey(k);this.deleteCache(M,S)}},{key:"invalidateKey",value:function(k){var S=this;this.lvls.forEach(function(M){return S.deleteCache(k,M)})}},{key:"invalidate",value:function(k){var S=k.id(),M=this.keyForId.get(S);this.deleteKeyMappingFor(k);var O=this.doesEleInvalidateKey(k);return O&&this.invalidateKey(M),O||this.getNumberOfIdsForKey(M)===0}}]),x}(),cz=25,YS=50,XS=-4,jI=3,Gre=7.99,Kre=8,Wre=1024,Yre=1024,Xre=1024,Qre=.2,Jre=.8,Zre=10,eie=.15,tie=.1,nie=.9,rie=.9,iie=100,sie=1,v8={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},aie=q0({getKey:null,doesEleInvalidateKey:X3,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:l5,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),dk=function(m,k){var S=this;S.renderer=m,S.onDequeues=[];var M=aie(k);yt(S,M),S.lookup=new Ure(M.getKey,M.doesEleInvalidateKey),S.setupDequeueing()},Cf=dk.prototype;Cf.reasons=v8,Cf.getTextureQueue=function(x){var m=this;return m.eleImgCaches=m.eleImgCaches||{},m.eleImgCaches[x]=m.eleImgCaches[x]||[]},Cf.getRetiredTextureQueue=function(x){var m=this,k=m.eleImgCaches.retired=m.eleImgCaches.retired||{},S=k[x]=k[x]||[];return S},Cf.getElementQueue=function(){var x=this,m=x.eleCacheQueue=x.eleCacheQueue||new V9(function(k,S){return S.reqs-k.reqs});return m},Cf.getElementKeyToQueue=function(){var x=this,m=x.eleKeyToCacheQueue=x.eleKeyToCacheQueue||{};return m},Cf.getElement=function(x,m,k,S,M){var O=this,N=this.renderer,$=N.cy.zoom(),H=this.lookup;if(!m||m.w===0||m.h===0||isNaN(m.w)||isNaN(m.h)||!x.visible()||x.removed()||!O.allowEdgeTxrCaching&&x.isEdge()||!O.allowParentTxrCaching&&x.isParent())return null;if(S==null&&(S=Math.ceil(iI($*k))),S=Gre||S>jI)return null;var q=Math.pow(2,S),Y=m.h*q,Z=m.w*q,ce=N.eleTextBiggerThanMin(x,q);if(!this.isVisible(x,ce))return null;var ve=H.get(x,S);if(ve&&ve.invalidated&&(ve.invalidated=!1,ve.texture.invalidatedWidth-=ve.width),ve)return ve;var me;if(Y<=cz?me=cz:Y<=YS?me=YS:me=Math.ceil(Y/YS)*YS,Y>Xre||Z>Yre)return null;var Le=O.getTextureQueue(me),_e=Le[Le.length-2],Ee=function(){return O.recycleTexture(me,Z)||O.addTexture(me,Z)};_e||(_e=Le[Le.length-1]),_e||(_e=Ee()),_e.width-_e.usedWidthS;Mt--)Je=O.getElement(x,m,k,Mt,v8.downscale);Lt()}else return O.queueElement(x,st.level-1),st;else{var ut;if(!Re&&!Ve&&!ct)for(var Wt=S-1;Wt>=XS;Wt--){var Tt=H.get(x,Wt);if(Tt){ut=Tt;break}}if(Be(ut))return O.queueElement(x,S),ut;_e.context.translate(_e.usedWidth,0),_e.context.scale(q,q),this.drawElement(_e.context,x,m,ce,!1),_e.context.scale(1/q,1/q),_e.context.translate(-_e.usedWidth,0)}return ve={x:_e.usedWidth,texture:_e,level:S,scale:q,width:Z,height:Y,scaledLabelShown:ce},_e.usedWidth+=Math.ceil(Z+Kre),_e.eleCaches.push(ve),H.set(x,S,ve),O.checkTextureFullness(_e),ve},Cf.invalidateElements=function(x){for(var m=0;m=Qre*x.width&&this.retireTexture(x)},Cf.checkTextureFullness=function(x){var m=this,k=m.getTextureQueue(x.height);x.usedWidth/x.width>Jre&&x.fullnessChecks>=Zre?Q3(k,x):x.fullnessChecks++},Cf.retireTexture=function(x){var m=this,k=x.height,S=m.getTextureQueue(k),M=this.lookup;Q3(S,x),x.retired=!0;for(var O=x.eleCaches,N=0;N=m)return N.retired=!1,N.usedWidth=0,N.invalidatedWidth=0,N.fullnessChecks=0,cS(N.eleCaches),N.context.setTransform(1,0,0,1,0,0),N.context.clearRect(0,0,N.width,N.height),Q3(M,N),S.push(N),N}},Cf.queueElement=function(x,m){var k=this,S=k.getElementQueue(),M=k.getElementKeyToQueue(),O=this.getKey(x),N=M[O];if(N)N.level=Math.max(N.level,m),N.eles.merge(x),N.reqs++,S.updateItem(N);else{var $={eles:x.spawn().merge(x),level:m,reqs:1,key:O};S.push($),M[O]=$}},Cf.dequeue=function(x){for(var m=this,k=m.getElementQueue(),S=m.getElementKeyToQueue(),M=[],O=m.lookup,N=0;N0;N++){var $=k.pop(),H=$.key,q=$.eles[0],Y=O.hasCache(q,$.level);if(S[H]=null,Y)continue;M.push($);var Z=m.getBoundingBox(q);m.getElement(q,Z,x,$.level,v8.dequeue)}return M},Cf.removeFromQueue=function(x){var m=this,k=m.getElementQueue(),S=m.getElementKeyToQueue(),M=this.getKey(x),O=S[M];O!=null&&(O.eles.length===1?(O.reqs=X7,k.updateItem(O),k.pop(),S[M]=null):O.eles.unmerge(x))},Cf.onDequeue=function(x){this.onDequeues.push(x)},Cf.offDequeue=function(x){Q3(this.onDequeues,x)},Cf.setupDequeueing=oz.setupDequeueing({deqRedrawThreshold:iie,deqCost:eie,deqAvgCost:tie,deqNoDrawCost:nie,deqFastCost:rie,deq:function(m,k,S){return m.dequeue(k,S)},onDeqd:function(m,k){for(var S=0;S=cie||k>QS)return null}S.validateLayersElesOrdering(k,x);var H=S.layersByLevel,q=Math.pow(2,k),Y=H[k]=H[k]||[],Z,ce=S.levelIsComplete(k,x),ve,me=function(){var Lt=function(_n){if(S.validateLayersElesOrdering(_n,x),S.levelIsComplete(_n,x))return ve=H[_n],!0},Mt=function(_n){if(!ve)for(var hn=k+_n;gk<=hn&&hn<=QS&&!Lt(hn);hn+=_n);};Mt(1),Mt(-1);for(var ut=Y.length-1;ut>=0;ut--){var Wt=Y[ut];Wt.invalid&&Q3(Y,Wt)}};if(!ce)me();else return Y;var Le=function(){if(!Z){Z=Wd();for(var Lt=0;Lthz)return null;var Wt=S.makeLayer(Z,k);if(Mt!=null){var Tt=Y.indexOf(Mt)+1;Y.splice(Tt,0,Wt)}else(Lt.insert===void 0||Lt.insert)&&Y.unshift(Wt);return Wt};if(S.skipping&&!$)return null;for(var Ee=null,Be=x.length/oie,Re=!$,Ve=0;Ve=Be||!pj(Ee.bb,ct.boundingBox()))&&(Ee=_e({insert:!0,after:Ee}),!Ee))return null;ve||Re?S.queueLayer(Ee,ct):S.drawEleInLayer(Ee,ct,k,m),Ee.eles.push(ct),Ye[k]=Ee}return ve||(Re?null:Y)},n0.getEleLevelForLayerLevel=function(x,m){return x},n0.drawEleInLayer=function(x,m,k,S){var M=this,O=this.renderer,N=x.context,$=m.boundingBox();$.w===0||$.h===0||!m.visible()||(k=M.getEleLevelForLayerLevel(k,S),O.setImgSmoothing(N,!1),O.drawCachedElement(N,m,null,null,k,fz),O.setImgSmoothing(N,!0))},n0.levelIsComplete=function(x,m){var k=this,S=k.layersByLevel[x];if(!S||S.length===0)return!1;for(var M=0,O=0;O0||N.invalid)return!1;M+=N.eles.length}return M===m.length},n0.validateLayersElesOrdering=function(x,m){var k=this.layersByLevel[x];if(k)for(var S=0;S0){m=!0;break}}return m},n0.invalidateElements=function(x){var m=this;x.length!==0&&(m.lastInvalidationTime=Bp(),!(x.length===0||!m.haveLayers())&&m.updateElementsInLayers(x,function(S,M,O){m.invalidateLayer(S)}))},n0.invalidateLayer=function(x){if(this.lastInvalidationTime=Bp(),!x.invalid){var m=x.level,k=x.eles,S=this.layersByLevel[m];Q3(S,x),x.elesQueue=[],x.invalid=!0,x.replacement&&(x.replacement.invalid=!0);for(var M=0;M3&&arguments[3]!==void 0?arguments[3]:!0,M=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,O=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,N=this,$=m._private.rscratch;if(!(O&&!m.visible())&&!($.badLine||$.allpts==null||isNaN($.allpts[0]))){var H;k&&(H=k,x.translate(-H.x1,-H.y1));var q=O?m.pstyle("opacity").value:1,Y=O?m.pstyle("line-opacity").value:1,Z=m.pstyle("curve-style").value,ce=m.pstyle("line-style").value,ve=m.pstyle("width").pfValue,me=m.pstyle("line-cap").value,Le=q*Y,_e=q*Y,Ee=function(){var ut=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Le;Z==="straight-triangle"?(N.eleStrokeStyle(x,m,ut),N.drawEdgeTrianglePath(m,x,$.allpts)):(x.lineWidth=ve,x.lineCap=me,N.eleStrokeStyle(x,m,ut),N.drawEdgePath(m,x,$.allpts,ce),x.lineCap="butt")},Be=function(){M&&N.drawEdgeOverlay(x,m)},Re=function(){M&&N.drawEdgeUnderlay(x,m)},Ve=function(){var ut=arguments.length>0&&arguments[0]!==void 0?arguments[0]:_e;N.drawArrowheads(x,m,ut)},ct=function(){N.drawElementText(x,m,null,S)};x.lineJoin="round";var st=m.pstyle("ghost").value==="yes";if(st){var Ye=m.pstyle("ghost-offset-x").pfValue,mt=m.pstyle("ghost-offset-y").pfValue,Je=m.pstyle("ghost-opacity").value,Lt=Le*Je;x.translate(Ye,mt),Ee(Lt),Ve(Lt),x.translate(-Ye,-mt)}Re(),Ee(),Ve(),Be(),ct(),k&&x.translate(H.x1,H.y1)}};var wz=function(m){if(!["overlay","underlay"].includes(m))throw new Error("Invalid state");return function(k,S){if(S.visible()){var M=S.pstyle("".concat(m,"-opacity")).value;if(M!==0){var O=this,N=O.usePaths(),$=S._private.rscratch,H=S.pstyle("".concat(m,"-padding")).pfValue,q=2*H,Y=S.pstyle("".concat(m,"-color")).value;k.lineWidth=q,$.edgeType==="self"&&!N?k.lineCap="butt":k.lineCap="round",O.colorStrokeStyle(k,Y[0],Y[1],Y[2],M),O.drawEdgePath(S,k,$.allpts,"solid")}}}};J2.drawEdgeOverlay=wz("overlay"),J2.drawEdgeUnderlay=wz("underlay"),J2.drawEdgePath=function(x,m,k,S){var M=x._private.rscratch,O=m,N,$=!1,H=this.usePaths(),q=x.pstyle("line-dash-pattern").pfValue,Y=x.pstyle("line-dash-offset").pfValue;if(H){var Z=k.join("$"),ce=M.pathCacheKey&&M.pathCacheKey===Z;ce?(N=m=M.pathCache,$=!0):(N=m=new Path2D,M.pathCacheKey=Z,M.pathCache=N)}if(O.setLineDash)switch(S){case"dotted":O.setLineDash([1,1]);break;case"dashed":O.setLineDash(q),O.lineDashOffset=Y;break;case"solid":O.setLineDash([]);break}if(!$&&!M.badLine)switch(m.beginPath&&m.beginPath(),m.moveTo(k[0],k[1]),M.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var ve=2;ve+35&&arguments[5]!==void 0?arguments[5]:!0,N=this;if(S==null){if(O&&!N.eleTextBiggerThanMin(m))return}else if(S===!1)return;if(m.isNode()){var $=m.pstyle("label");if(!$||!$.value)return;var H=N.getLabelJustification(m);x.textAlign=H,x.textBaseline="bottom"}else{var q=m.element()._private.rscratch.badLine,Y=m.pstyle("label"),Z=m.pstyle("source-label"),ce=m.pstyle("target-label");if(q||(!Y||!Y.value)&&(!Z||!Z.value)&&(!ce||!ce.value))return;x.textAlign="center",x.textBaseline="bottom"}var ve=!k,me;k&&(me=k,x.translate(-me.x1,-me.y1)),M==null?(N.drawText(x,m,null,ve,O),m.isEdge()&&(N.drawText(x,m,"source",ve,O),N.drawText(x,m,"target",ve,O))):N.drawText(x,m,M,ve,O),k&&x.translate(me.x1,me.y1)},y5.getFontCache=function(x){var m;this.fontCaches=this.fontCaches||[];for(var k=0;k2&&arguments[2]!==void 0?arguments[2]:!0,S=m.pstyle("font-style").strValue,M=m.pstyle("font-size").pfValue+"px",O=m.pstyle("font-family").strValue,N=m.pstyle("font-weight").strValue,$=k?m.effectiveOpacity()*m.pstyle("text-opacity").value:1,H=m.pstyle("text-outline-opacity").value*$,q=m.pstyle("color").value,Y=m.pstyle("text-outline-color").value;x.font=S+" "+N+" "+M+" "+O,x.lineJoin="round",this.colorFillStyle(x,q[0],q[1],q[2],$),this.colorStrokeStyle(x,Y[0],Y[1],Y[2],H)};function zI(x,m,k,S,M){var O=arguments.length>5&&arguments[5]!==void 0?arguments[5]:5,N=arguments.length>6?arguments[6]:void 0;x.beginPath(),x.moveTo(m+O,k),x.lineTo(m+S-O,k),x.quadraticCurveTo(m+S,k,m+S,k+O),x.lineTo(m+S,k+M-O),x.quadraticCurveTo(m+S,k+M,m+S-O,k+M),x.lineTo(m+O,k+M),x.quadraticCurveTo(m,k+M,m,k+M-O),x.lineTo(m,k+O),x.quadraticCurveTo(m,k,m+O,k),x.closePath(),N?x.stroke():x.fill()}y5.getTextAngle=function(x,m){var k,S=x._private,M=S.rscratch,O=m?m+"-":"",N=x.pstyle(O+"text-rotation"),$=K2(M,"labelAngle",m);return N.strValue==="autorotate"?k=x.isEdge()?$:0:N.strValue==="none"?k=0:k=N.pfValue,k},y5.drawText=function(x,m,k){var S=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,M=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,O=m._private,N=O.rscratch,$=M?m.effectiveOpacity():1;if(!(M&&($===0||m.pstyle("text-opacity").value===0))){k==="main"&&(k=null);var H=K2(N,"labelX",k),q=K2(N,"labelY",k),Y,Z,ce=this.getLabelText(m,k);if(ce!=null&&ce!==""&&!isNaN(H)&&!isNaN(q)){this.setupTextStyle(x,m,M);var ve=k?k+"-":"",me=K2(N,"labelWidth",k),Le=K2(N,"labelHeight",k),_e=m.pstyle(ve+"text-margin-x").pfValue,Ee=m.pstyle(ve+"text-margin-y").pfValue,Be=m.isEdge(),Re=m.pstyle("text-halign").value,Ve=m.pstyle("text-valign").value;Be&&(Re="center",Ve="center"),H+=_e,q+=Ee;var ct;switch(S?ct=this.getTextAngle(m,k):ct=0,ct!==0&&(Y=H,Z=q,x.translate(Y,Z),x.rotate(ct),H=0,q=0),Ve){case"top":break;case"center":q+=Le/2;break;case"bottom":q+=Le;break}var st=m.pstyle("text-background-opacity").value,Ye=m.pstyle("text-border-opacity").value,mt=m.pstyle("text-border-width").pfValue,Je=m.pstyle("text-background-padding").pfValue,Lt=m.pstyle("text-background-shape").strValue,Mt=Lt.indexOf("round")===0,ut=2;if(st>0||mt>0&&Ye>0){var Wt=H-Je;switch(Re){case"left":Wt-=me;break;case"center":Wt-=me/2;break}var Tt=q-Le-Je,_n=me+2*Je,hn=Le+2*Je;if(st>0){var Yt=x.fillStyle,Dn=m.pstyle("text-background-color").value;x.fillStyle="rgba("+Dn[0]+","+Dn[1]+","+Dn[2]+","+st*$+")",Mt?zI(x,Wt,Tt,_n,hn,ut):x.fillRect(Wt,Tt,_n,hn),x.fillStyle=Yt}if(mt>0&&Ye>0){var ir=x.strokeStyle,vr=x.lineWidth,Nn=m.pstyle("text-border-color").value,pr=m.pstyle("text-border-style").value;if(x.strokeStyle="rgba("+Nn[0]+","+Nn[1]+","+Nn[2]+","+Ye*$+")",x.lineWidth=mt,x.setLineDash)switch(pr){case"dotted":x.setLineDash([1,1]);break;case"dashed":x.setLineDash([4,2]);break;case"double":x.lineWidth=mt/4,x.setLineDash([]);break;case"solid":x.setLineDash([]);break}if(Mt?zI(x,Wt,Tt,_n,hn,ut,"stroke"):x.strokeRect(Wt,Tt,_n,hn),pr==="double"){var Er=mt/2;Mt?zI(x,Wt+Er,Tt+Er,_n-Er*2,hn-Er*2,ut,"stroke"):x.strokeRect(Wt+Er,Tt+Er,_n-Er*2,hn-Er*2)}x.setLineDash&&x.setLineDash([]),x.lineWidth=vr,x.strokeStyle=ir}}var Mr=2*m.pstyle("text-outline-width").pfValue;if(Mr>0&&(x.lineWidth=Mr),m.pstyle("text-wrap").value==="wrap"){var Cr=K2(N,"labelWrapCachedLines",k),Or=K2(N,"labelLineHeight",k),Wn=me/2,br=this.getLabelJustification(m);switch(br==="auto"||(Re==="left"?br==="left"?H+=-me:br==="center"&&(H+=-Wn):Re==="center"?br==="left"?H+=-Wn:br==="right"&&(H+=Wn):Re==="right"&&(br==="center"?H+=Wn:br==="right"&&(H+=me))),Ve){case"top":q-=(Cr.length-1)*Or;break;case"center":case"bottom":q-=(Cr.length-1)*Or;break}for(var Sr=0;Sr0&&x.strokeText(Cr[Sr],H,q),x.fillText(Cr[Sr],H,q),q+=Or}else Mr>0&&x.strokeText(ce,H,q),x.fillText(ce,H,q);ct!==0&&(x.rotate(-ct),x.translate(-Y,-Z))}}};var w8={};w8.drawNode=function(x,m,k){var S=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,M=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,O=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,N=this,$,H,q=m._private,Y=q.rscratch,Z=m.position();if(!(!X(Z.x)||!X(Z.y))&&!(O&&!m.visible())){var ce=O?m.effectiveOpacity():1,ve=N.usePaths(),me,Le=!1,_e=m.padding();$=m.width()+2*_e,H=m.height()+2*_e;var Ee;k&&(Ee=k,x.translate(-Ee.x1,-Ee.y1));for(var Be=m.pstyle("background-image"),Re=Be.value,Ve=new Array(Re.length),ct=new Array(Re.length),st=0,Ye=0;Ye0&&arguments[0]!==void 0?arguments[0]:Wt;N.eleFillStyle(x,m,tr)},Er=function(){var tr=arguments.length>0&&arguments[0]!==void 0?arguments[0]:hn;N.colorStrokeStyle(x,Tt[0],Tt[1],Tt[2],tr)},Mr=function(){var tr=arguments.length>0&&arguments[0]!==void 0?arguments[0]:vr;N.colorStrokeStyle(x,Dn[0],Dn[1],Dn[2],tr)},Cr=function(tr,G,Jn,kr){var lr=N.nodePathCache=N.nodePathCache||[],Vt=ld(Jn==="polygon"?Jn+","+kr.join(","):Jn,""+G,""+tr),Hs=lr[Vt],wr,Es=!1;return Hs!=null?(wr=Hs,Es=!0,Y.pathCache=wr):(wr=new Path2D,lr[Vt]=Y.pathCache=wr),{path:wr,cacheHit:Es}},Or=m.pstyle("shape").strValue,Wn=m.pstyle("shape-polygon-points").pfValue;if(ve){x.translate(Z.x,Z.y);var br=Cr($,H,Or,Wn);me=br.path,Le=br.cacheHit}var Sr=function(){if(!Le){var tr=Z;ve&&(tr={x:0,y:0}),N.nodeShapes[N.getNodeShape(m)].draw(me||x,tr.x,tr.y,$,H)}ve?x.fill(me):x.fill()},Nr=function(){for(var tr=arguments.length>0&&arguments[0]!==void 0?arguments[0]:ce,G=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,Jn=q.backgrounding,kr=0,lr=0;lr0&&arguments[0]!==void 0?arguments[0]:!1,G=arguments.length>1&&arguments[1]!==void 0?arguments[1]:ce;N.hasPie(m)&&(N.drawPie(x,m,G),tr&&(ve||N.nodeShapes[N.getNodeShape(m)].draw(x,Z.x,Z.y,$,H)))},ys=function(){var tr=arguments.length>0&&arguments[0]!==void 0?arguments[0]:ce,G=(Mt>0?Mt:-Mt)*tr,Jn=Mt>0?0:255;Mt!==0&&(N.colorFillStyle(x,Jn,Jn,Jn,G),ve?x.fill(me):x.fill())},pa=function(){if(ut>0){if(x.lineWidth=ut,x.lineCap="butt",x.setLineDash)switch(_n){case"dotted":x.setLineDash([1,1]);break;case"dashed":x.setLineDash([4,2]);break;case"solid":case"double":x.setLineDash([]);break}if(ve?x.stroke(me):x.stroke(),_n==="double"){x.lineWidth=ut/3;var tr=x.globalCompositeOperation;x.globalCompositeOperation="destination-out",ve?x.stroke(me):x.stroke(),x.globalCompositeOperation=tr}x.setLineDash&&x.setLineDash([])}},Mi=function(){if(Yt>0){if(x.lineWidth=Yt,x.lineCap="butt",x.setLineDash)switch(ir){case"dotted":x.setLineDash([1,1]);break;case"dashed":x.setLineDash([4,2]);break;case"solid":case"double":x.setLineDash([]);break}var tr=Z;ve&&(tr={x:0,y:0});var G=N.getNodeShape(m),Jn=($+ut+(Yt+Nn))/$,kr=(H+ut+(Yt+Nn))/H,lr=$*Jn,Vt=H*kr,Hs=N.nodeShapes[G].points,wr;if(ve){var Es=Cr(lr,Vt,G,Hs);wr=Es.path}if(G==="ellipse")N.drawEllipsePath(wr||x,tr.x,tr.y,lr,Vt);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(G)){var go=0,$c=0,za=0;G==="round-diamond"?go=(ut+Nn+Yt)*1.4:G==="round-heptagon"?(go=(ut+Nn+Yt)*1.075,za=-(ut/2+Nn+Yt)/35):G==="round-hexagon"?go=(ut+Nn+Yt)*1.12:G==="round-pentagon"?(go=(ut+Nn+Yt)*1.13,za=-(ut/2+Nn+Yt)/15):G==="round-tag"?(go=(ut+Nn+Yt)*1.12,$c=(ut/2+Yt+Nn)*.07):G==="round-triangle"&&(go=(ut+Nn+Yt)*(Math.PI/2),za=-(ut+Nn/2+Yt)/Math.PI),go!==0&&(Jn=($+go)/$,kr=(H+go)/H),N.drawRoundPolygonPath(wr||x,tr.x+$c,tr.y+za,$*Jn,H*kr,Hs)}else if(["roundrectangle","round-rectangle"].includes(G))N.drawRoundRectanglePath(wr||x,tr.x,tr.y,lr,Vt);else if(["cutrectangle","cut-rectangle"].includes(G))N.drawCutRectanglePath(wr||x,tr.x,tr.y,lr,Vt);else if(["bottomroundrectangle","bottom-round-rectangle"].includes(G))N.drawBottomRoundRectanglePath(wr||x,tr.x,tr.y,lr,Vt);else if(G==="barrel")N.drawBarrelPath(wr||x,tr.x,tr.y,lr,Vt);else if(G.startsWith("polygon")||["rhomboid","right-rhomboid","round-tag","tag","vee"].includes(G)){var Sc=(ut+Yt+Nn)/$;Hs=gS(pS(Hs,Sc)),N.drawPolygonPath(wr||x,tr.x,tr.y,$,H,Hs)}else{var ba=(ut+Yt+Nn)/$;Hs=gS(pS(Hs,-ba)),N.drawPolygonPath(wr||x,tr.x,tr.y,$,H,Hs)}if(ve?x.stroke(wr):x.stroke(),ir==="double"){x.lineWidth=ut/3;var xo=x.globalCompositeOperation;x.globalCompositeOperation="destination-out",ve?x.stroke(wr):x.stroke(),x.globalCompositeOperation=xo}x.setLineDash&&x.setLineDash([])}},gi=function(){M&&N.drawNodeOverlay(x,m,Z,$,H)},fs=function(){M&&N.drawNodeUnderlay(x,m,Z,$,H)},Fs=function(){N.drawElementText(x,m,null,S)},xs=m.pstyle("ghost").value==="yes";if(xs){var Rs=m.pstyle("ghost-offset-x").pfValue,yo=m.pstyle("ghost-offset-y").pfValue,$a=m.pstyle("ghost-opacity").value,Da=$a*ce;x.translate(Rs,yo),Mr(),Mi(),pr($a*Wt),Sr(),Nr(Da,!0),Er($a*hn),pa(),Si(Mt!==0||ut!==0),Nr(Da,!1),ys(Da),x.translate(-Rs,-yo)}ve&&x.translate(-Z.x,-Z.y),fs(),ve&&x.translate(Z.x,Z.y),Mr(),Mi(),pr(),Sr(),Nr(ce,!0),Er(),pa(),Si(Mt!==0||ut!==0),Nr(ce,!1),ys(),ve&&x.translate(-Z.x,-Z.y),Fs(),gi(),k&&x.translate(Ee.x1,Ee.y1)}};var qI=function(m){if(!["overlay","underlay"].includes(m))throw new Error("Invalid state");return function(k,S,M,O,N){var $=this;if(S.visible()){var H=S.pstyle("".concat(m,"-padding")).pfValue,q=S.pstyle("".concat(m,"-opacity")).value,Y=S.pstyle("".concat(m,"-color")).value,Z=S.pstyle("".concat(m,"-shape")).value;if(q>0){if(M=M||S.position(),O==null||N==null){var ce=S.padding();O=S.width()+2*ce,N=S.height()+2*ce}$.colorFillStyle(k,Y[0],Y[1],Y[2],q),$.nodeShapes[Z].draw(k,M.x,M.y,O+H*2,N+H*2),k.fill()}}}};w8.drawNodeOverlay=qI("overlay"),w8.drawNodeUnderlay=qI("underlay"),w8.hasPie=function(x){return x=x[0],x._private.hasPie},w8.drawPie=function(x,m,k,S){m=m[0],S=S||m.position();var M=m.cy().style(),O=m.pstyle("pie-size"),N=S.x,$=S.y,H=m.width(),q=m.height(),Y=Math.min(H,q)/2,Z=0,ce=this.usePaths();ce&&(N=0,$=0),O.units==="%"?Y=Y*O.pfValue:O.pfValue!==void 0&&(Y=O.pfValue/2);for(var ve=1;ve<=M.pieBackgroundN;ve++){var me=m.pstyle("pie-"+ve+"-background-size").value,Le=m.pstyle("pie-"+ve+"-background-color").value,_e=m.pstyle("pie-"+ve+"-background-opacity").value*k,Ee=me/100;Ee+Z>1&&(Ee=1-Z);var Be=1.5*Math.PI+2*Math.PI*Z,Re=2*Math.PI*Ee,Ve=Be+Re;me===0||Z>=1||Z+Ee>1||(x.beginPath(),x.moveTo(N,$),x.arc(N,$,Y,Be,Ve),x.closePath(),this.colorFillStyle(x,Le[0],Le[1],Le[2],_e),x.fill(),Z+=Ee)}};var qg={},xie=100;qg.getPixelRatio=function(){var x=this.data.contexts[0];if(this.forcedPixelRatio!=null)return this.forcedPixelRatio;var m=x.backingStorePixelRatio||x.webkitBackingStorePixelRatio||x.mozBackingStorePixelRatio||x.msBackingStorePixelRatio||x.oBackingStorePixelRatio||x.backingStorePixelRatio||1;return(window.devicePixelRatio||1)/m},qg.paintCache=function(x){for(var m=this.paintCaches=this.paintCaches||[],k=!0,S,M=0;MN.minMbLowQualFrames&&(N.motionBlurPxRatio=N.mbPxRBlurry)),N.clearingMotionBlur&&(N.motionBlurPxRatio=1),N.textureDrawLastFrame&&!Z&&(Y[N.NODE]=!0,Y[N.SELECT_BOX]=!0);var Be=H.style(),Re=H.zoom(),Ve=M!==void 0?M:Re,ct=H.pan(),st={x:ct.x,y:ct.y},Ye={zoom:Re,pan:{x:ct.x,y:ct.y}},mt=N.prevViewport,Je=mt===void 0||Ye.zoom!==mt.zoom||Ye.pan.x!==mt.pan.x||Ye.pan.y!==mt.pan.y;!Je&&!(Le&&!me)&&(N.motionBlurPxRatio=1),O&&(st=O),Ve*=$,st.x*=$,st.y*=$;var Lt=N.getCachedZSortedEles();function Mt(Mi,gi,fs,Fs,xs){var Rs=Mi.globalCompositeOperation;Mi.globalCompositeOperation="destination-out",N.colorFillStyle(Mi,255,255,255,N.motionBlurTransparency),Mi.fillRect(gi,fs,Fs,xs),Mi.globalCompositeOperation=Rs}function ut(Mi,gi){var fs,Fs,xs,Rs;!N.clearingMotionBlur&&(Mi===q.bufferContexts[N.MOTIONBLUR_BUFFER_NODE]||Mi===q.bufferContexts[N.MOTIONBLUR_BUFFER_DRAG])?(fs={x:ct.x*ve,y:ct.y*ve},Fs=Re*ve,xs=N.canvasWidth*ve,Rs=N.canvasHeight*ve):(fs=st,Fs=Ve,xs=N.canvasWidth,Rs=N.canvasHeight),Mi.setTransform(1,0,0,1,0,0),gi==="motionBlur"?Mt(Mi,0,0,xs,Rs):!m&&(gi===void 0||gi)&&Mi.clearRect(0,0,xs,Rs),k||(Mi.translate(fs.x,fs.y),Mi.scale(Fs,Fs)),O&&Mi.translate(O.x,O.y),M&&Mi.scale(M,M)}if(Z||(N.textureDrawLastFrame=!1),Z){if(N.textureDrawLastFrame=!0,!N.textureCache){N.textureCache={},N.textureCache.bb=H.mutableElements().boundingBox(),N.textureCache.texture=N.data.bufferCanvases[N.TEXTURE_BUFFER];var Wt=N.data.bufferContexts[N.TEXTURE_BUFFER];Wt.setTransform(1,0,0,1,0,0),Wt.clearRect(0,0,N.canvasWidth*N.textureMult,N.canvasHeight*N.textureMult),N.render({forcedContext:Wt,drawOnlyNodeLayer:!0,forcedPxRatio:$*N.textureMult});var Ye=N.textureCache.viewport={zoom:H.zoom(),pan:H.pan(),width:N.canvasWidth,height:N.canvasHeight};Ye.mpan={x:(0-Ye.pan.x)/Ye.zoom,y:(0-Ye.pan.y)/Ye.zoom}}Y[N.DRAG]=!1,Y[N.NODE]=!1;var Tt=q.contexts[N.NODE],_n=N.textureCache.texture,Ye=N.textureCache.viewport;Tt.setTransform(1,0,0,1,0,0),ce?Mt(Tt,0,0,Ye.width,Ye.height):Tt.clearRect(0,0,Ye.width,Ye.height);var hn=Be.core("outside-texture-bg-color").value,Yt=Be.core("outside-texture-bg-opacity").value;N.colorFillStyle(Tt,hn[0],hn[1],hn[2],Yt),Tt.fillRect(0,0,Ye.width,Ye.height);var Re=H.zoom();ut(Tt,!1),Tt.clearRect(Ye.mpan.x,Ye.mpan.y,Ye.width/Ye.zoom/$,Ye.height/Ye.zoom/$),Tt.drawImage(_n,Ye.mpan.x,Ye.mpan.y,Ye.width/Ye.zoom/$,Ye.height/Ye.zoom/$)}else N.textureOnViewport&&!m&&(N.textureCache=null);var Dn=H.extent(),ir=N.pinching||N.hoverData.dragging||N.swipePanning||N.data.wheelZooming||N.hoverData.draggingEles||N.cy.animated(),vr=N.hideEdgesOnViewport&&ir,Nn=[];if(Nn[N.NODE]=!Y[N.NODE]&&ce&&!N.clearedForMotionBlur[N.NODE]||N.clearingMotionBlur,Nn[N.NODE]&&(N.clearedForMotionBlur[N.NODE]=!0),Nn[N.DRAG]=!Y[N.DRAG]&&ce&&!N.clearedForMotionBlur[N.DRAG]||N.clearingMotionBlur,Nn[N.DRAG]&&(N.clearedForMotionBlur[N.DRAG]=!0),Y[N.NODE]||k||S||Nn[N.NODE]){var pr=ce&&!Nn[N.NODE]&&ve!==1,Tt=m||(pr?N.data.bufferContexts[N.MOTIONBLUR_BUFFER_NODE]:q.contexts[N.NODE]),Er=ce&&!pr?"motionBlur":void 0;ut(Tt,Er),vr?N.drawCachedNodes(Tt,Lt.nondrag,$,Dn):N.drawLayeredElements(Tt,Lt.nondrag,$,Dn),N.debug&&N.drawDebugPoints(Tt,Lt.nondrag),!k&&!ce&&(Y[N.NODE]=!1)}if(!S&&(Y[N.DRAG]||k||Nn[N.DRAG])){var pr=ce&&!Nn[N.DRAG]&&ve!==1,Tt=m||(pr?N.data.bufferContexts[N.MOTIONBLUR_BUFFER_DRAG]:q.contexts[N.DRAG]);ut(Tt,ce&&!pr?"motionBlur":void 0),vr?N.drawCachedNodes(Tt,Lt.drag,$,Dn):N.drawCachedElements(Tt,Lt.drag,$,Dn),N.debug&&N.drawDebugPoints(Tt,Lt.drag),!k&&!ce&&(Y[N.DRAG]=!1)}if(N.showFps||!S&&Y[N.SELECT_BOX]&&!k){var Tt=m||q.contexts[N.SELECT_BOX];if(ut(Tt),N.selection[4]==1&&(N.hoverData.selecting||N.touchData.selecting)){var Re=N.cy.zoom(),Mr=Be.core("selection-box-border-width").value/Re;Tt.lineWidth=Mr,Tt.fillStyle="rgba("+Be.core("selection-box-color").value[0]+","+Be.core("selection-box-color").value[1]+","+Be.core("selection-box-color").value[2]+","+Be.core("selection-box-opacity").value+")",Tt.fillRect(N.selection[0],N.selection[1],N.selection[2]-N.selection[0],N.selection[3]-N.selection[1]),Mr>0&&(Tt.strokeStyle="rgba("+Be.core("selection-box-border-color").value[0]+","+Be.core("selection-box-border-color").value[1]+","+Be.core("selection-box-border-color").value[2]+","+Be.core("selection-box-opacity").value+")",Tt.strokeRect(N.selection[0],N.selection[1],N.selection[2]-N.selection[0],N.selection[3]-N.selection[1]))}if(q.bgActivePosistion&&!N.hoverData.selecting){var Re=N.cy.zoom(),Cr=q.bgActivePosistion;Tt.fillStyle="rgba("+Be.core("active-bg-color").value[0]+","+Be.core("active-bg-color").value[1]+","+Be.core("active-bg-color").value[2]+","+Be.core("active-bg-opacity").value+")",Tt.beginPath(),Tt.arc(Cr.x,Cr.y,Be.core("active-bg-size").pfValue/Re,0,2*Math.PI),Tt.fill()}var Or=N.lastRedrawTime;if(N.showFps&&Or){Or=Math.round(Or);var Wn=Math.round(1e3/Or);Tt.setTransform(1,0,0,1,0,0),Tt.fillStyle="rgba(255, 0, 0, 0.75)",Tt.strokeStyle="rgba(255, 0, 0, 0.75)",Tt.lineWidth=1,Tt.fillText("1 frame = "+Or+" ms = "+Wn+" fps",0,20);var br=60;Tt.strokeRect(0,30,250,20),Tt.fillRect(0,30,250*Math.min(Wn/br,1),20)}k||(Y[N.SELECT_BOX]=!1)}if(ce&&ve!==1){var Sr=q.contexts[N.NODE],Nr=N.data.bufferCanvases[N.MOTIONBLUR_BUFFER_NODE],Si=q.contexts[N.DRAG],ys=N.data.bufferCanvases[N.MOTIONBLUR_BUFFER_DRAG],pa=function(gi,fs,Fs){gi.setTransform(1,0,0,1,0,0),Fs||!Ee?gi.clearRect(0,0,N.canvasWidth,N.canvasHeight):Mt(gi,0,0,N.canvasWidth,N.canvasHeight);var xs=ve;gi.drawImage(fs,0,0,N.canvasWidth*xs,N.canvasHeight*xs,0,0,N.canvasWidth,N.canvasHeight)};(Y[N.NODE]||Nn[N.NODE])&&(pa(Sr,Nr,Nn[N.NODE]),Y[N.NODE]=!1),(Y[N.DRAG]||Nn[N.DRAG])&&(pa(Si,ys,Nn[N.DRAG]),Y[N.DRAG]=!1)}N.prevViewport=Ye,N.clearingMotionBlur&&(N.clearingMotionBlur=!1,N.motionBlurCleared=!0,N.motionBlur=!0),ce&&(N.motionBlurTimeout=setTimeout(function(){N.motionBlurTimeout=null,N.clearedForMotionBlur[N.NODE]=!1,N.clearedForMotionBlur[N.DRAG]=!1,N.motionBlur=!1,N.clearingMotionBlur=!Z,N.mbFrames=0,Y[N.NODE]=!0,Y[N.DRAG]=!0,N.redraw()},xie)),m||H.emit("render")};var iy={};iy.drawPolygonPath=function(x,m,k,S,M,O){var N=S/2,$=M/2;x.beginPath&&x.beginPath(),x.moveTo(m+N*O[0],k+$*O[1]);for(var H=1;H0&&N>0){ve.clearRect(0,0,O,N),ve.globalCompositeOperation="source-over";var me=this.getCachedZSortedEles();if(x.full)ve.translate(-S.x1*q,-S.y1*q),ve.scale(q,q),this.drawElements(ve,me),ve.scale(1/q,1/q),ve.translate(S.x1*q,S.y1*q);else{var Le=m.pan(),_e={x:Le.x*q,y:Le.y*q};q*=m.zoom(),ve.translate(_e.x,_e.y),ve.scale(q,q),this.drawElements(ve,me),ve.scale(1/q,1/q),ve.translate(-_e.x,-_e.y)}x.bg&&(ve.globalCompositeOperation="destination-over",ve.fillStyle=x.bg,ve.rect(0,0,O,N),ve.fill())}return ce};function kie(x,m){for(var k=atob(x),S=new ArrayBuffer(k.length),M=new Uint8Array(S),O=0;O"u"?"undefined":u(OffscreenCanvas))!=="undefined"?k=new OffscreenCanvas(x,m):(k=document.createElement("canvas"),k.width=x,k.height=m),k},[pz,Q2,J2,bk,y5,w8,qg,iy,mk,Cz].forEach(function(x){yt(jc,x)});var $p=[{name:"null",impl:W$},{name:"base",impl:az},{name:"canvas",impl:Sz}],Eie=[{type:"layout",extensions:qre},{type:"renderer",extensions:$p}],Tie={},Cie={};function Sie(x,m,k){var S=k,M=function(mt){hu("Can not register `"+m+"` for `"+x+"` since `"+mt+"` already exists in the prototype and can not be overridden")};if(x==="core"){if(lk.prototype[m])return M(m);lk.prototype[m]=k}else if(x==="collection"){if(V0.prototype[m])return M(m);V0.prototype[m]=k}else if(x==="layout"){for(var O=function(mt){this.options=mt,k.call(this,mt),se(this._private)||(this._private={}),this._private.cy=mt.cy,this._private.listeners=[],this.createEmitter()},N=O.prototype=Object.create(k.prototype),$=[],H=0;H<$.length;H++){var q=$[H];N[q]=N[q]||function(){return this}}N.start&&!N.run?N.run=function(){return this.start(),this}:!N.start&&N.run&&(N.start=function(){return this.run(),this});var Y=k.prototype.stop;N.stop=function(){var Ye=this.options;if(Ye&&Ye.animate){var mt=this.animations;if(mt)for(var Je=0;Jej&&(this.rect.x-=(this.labelWidth-j)/2,this.setWidth(this.labelWidth)),this.labelHeight>K&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-K)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-K),this.setHeight(this.labelHeight))}}},P.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==b.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},P.prototype.transform=function(F){var j=this.rect.x;j>T.WORLD_BOUNDARY?j=T.WORLD_BOUNDARY:j<-T.WORLD_BOUNDARY&&(j=-T.WORLD_BOUNDARY);var K=this.rect.y;K>T.WORLD_BOUNDARY?K=T.WORLD_BOUNDARY:K<-T.WORLD_BOUNDARY&&(K=-T.WORLD_BOUNDARY);var ee=new A(j,K),ie=F.inverseTransformPoint(ee);this.setLocation(ie.x,ie.y)},P.prototype.getLeft=function(){return this.rect.x},P.prototype.getRight=function(){return this.rect.x+this.rect.width},P.prototype.getTop=function(){return this.rect.y},P.prototype.getBottom=function(){return this.rect.y+this.rect.height},P.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},u.exports=P},function(u,d,p){function v(b,y){b==null&&y==null?(this.x=0,this.y=0):(this.x=b,this.y=y)}v.prototype.getX=function(){return this.x},v.prototype.getY=function(){return this.y},v.prototype.setX=function(b){this.x=b},v.prototype.setY=function(b){this.y=b},v.prototype.getDifference=function(b){return new DimensionD(this.x-b.x,this.y-b.y)},v.prototype.getCopy=function(){return new v(this.x,this.y)},v.prototype.translate=function(b){return this.x+=b.width,this.y+=b.height,this},u.exports=v},function(u,d,p){var v=p(2),b=p(10),y=p(0),T=p(6),_=p(3),A=p(1),P=p(13),R=p(12),F=p(11);function j(ee,ie,oe){v.call(this,oe),this.estimatedSize=b.MIN_VALUE,this.margin=y.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=ee,ie!=null&&ie instanceof T?this.graphManager=ie:ie!=null&&ie instanceof Layout&&(this.graphManager=ie.graphManager)}j.prototype=Object.create(v.prototype);for(var K in v)j[K]=v[K];j.prototype.getNodes=function(){return this.nodes},j.prototype.getEdges=function(){return this.edges},j.prototype.getGraphManager=function(){return this.graphManager},j.prototype.getParent=function(){return this.parent},j.prototype.getLeft=function(){return this.left},j.prototype.getRight=function(){return this.right},j.prototype.getTop=function(){return this.top},j.prototype.getBottom=function(){return this.bottom},j.prototype.isConnected=function(){return this.isConnected},j.prototype.add=function(ee,ie,oe){if(ie==null&&oe==null){var pe=ee;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(pe)>-1)throw"Node already in graph!";return pe.owner=this,this.getNodes().push(pe),pe}else{var be=ee;if(!(this.getNodes().indexOf(ie)>-1&&this.getNodes().indexOf(oe)>-1))throw"Source or target not in graph!";if(!(ie.owner==oe.owner&&ie.owner==this))throw"Both owners must be this graph!";return ie.owner!=oe.owner?null:(be.source=ie,be.target=oe,be.isInterGraph=!1,this.getEdges().push(be),ie.edges.push(be),oe!=ie&&oe.edges.push(be),be)}},j.prototype.remove=function(ee){var ie=ee;if(ee instanceof _){if(ie==null)throw"Node is null!";if(!(ie.owner!=null&&ie.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var oe=ie.edges.slice(),pe,be=oe.length,ae=0;ae-1&&de>-1))throw"Source and/or target doesn't know this edge!";pe.source.edges.splice(se,1),pe.target!=pe.source&&pe.target.edges.splice(de,1);var ne=pe.source.owner.getEdges().indexOf(pe);if(ne==-1)throw"Not in owner's edge list!";pe.source.owner.getEdges().splice(ne,1)}},j.prototype.updateLeftTop=function(){for(var ee=b.MAX_VALUE,ie=b.MAX_VALUE,oe,pe,be,ae=this.getNodes(),ne=ae.length,se=0;seoe&&(ee=oe),ie>pe&&(ie=pe)}return ee==b.MAX_VALUE?null:(ae[0].getParent().paddingLeft!=null?be=ae[0].getParent().paddingLeft:be=this.margin,this.left=ie-be,this.top=ee-be,new R(this.left,this.top))},j.prototype.updateBounds=function(ee){for(var ie=b.MAX_VALUE,oe=-b.MAX_VALUE,pe=b.MAX_VALUE,be=-b.MAX_VALUE,ae,ne,se,de,X,ge=this.nodes,W=ge.length,xe=0;xeae&&(ie=ae),oese&&(pe=se),beae&&(ie=ae),oese&&(pe=se),be=this.nodes.length){var W=0;oe.forEach(function(xe){xe.owner==ee&&W++}),W==this.nodes.length&&(this.isConnected=!0)}},u.exports=j},function(u,d,p){var v,b=p(1);function y(T){v=p(5),this.layout=T,this.graphs=[],this.edges=[]}y.prototype.addRoot=function(){var T=this.layout.newGraph(),_=this.layout.newNode(null),A=this.add(T,_);return this.setRootGraph(A),this.rootGraph},y.prototype.add=function(T,_,A,P,R){if(A==null&&P==null&&R==null){if(T==null)throw"Graph is null!";if(_==null)throw"Parent node is null!";if(this.graphs.indexOf(T)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(T),T.parent!=null)throw"Already has a parent!";if(_.child!=null)throw"Already has a child!";return T.parent=_,_.child=T,T}else{R=A,P=_,A=T;var F=P.getOwner(),j=R.getOwner();if(!(F!=null&&F.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(j!=null&&j.getGraphManager()==this))throw"Target not in this graph mgr!";if(F==j)return A.isInterGraph=!1,F.add(A,P,R);if(A.isInterGraph=!0,A.source=P,A.target=R,this.edges.indexOf(A)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(A),!(A.source!=null&&A.target!=null))throw"Edge source and/or target is null!";if(!(A.source.edges.indexOf(A)==-1&&A.target.edges.indexOf(A)==-1))throw"Edge already in source and/or target incidency list!";return A.source.edges.push(A),A.target.edges.push(A),A}},y.prototype.remove=function(T){if(T instanceof v){var _=T;if(_.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(_==this.rootGraph||_.parent!=null&&_.parent.graphManager==this))throw"Invalid parent node!";var A=[];A=A.concat(_.getEdges());for(var P,R=A.length,F=0;F=T.getRight()?_[0]+=Math.min(T.getX()-y.getX(),y.getRight()-T.getRight()):T.getX()<=y.getX()&&T.getRight()>=y.getRight()&&(_[0]+=Math.min(y.getX()-T.getX(),T.getRight()-y.getRight())),y.getY()<=T.getY()&&y.getBottom()>=T.getBottom()?_[1]+=Math.min(T.getY()-y.getY(),y.getBottom()-T.getBottom()):T.getY()<=y.getY()&&T.getBottom()>=y.getBottom()&&(_[1]+=Math.min(y.getY()-T.getY(),T.getBottom()-y.getBottom()));var R=Math.abs((T.getCenterY()-y.getCenterY())/(T.getCenterX()-y.getCenterX()));T.getCenterY()===y.getCenterY()&&T.getCenterX()===y.getCenterX()&&(R=1);var F=R*_[0],j=_[1]/R;_[0]F)return _[0]=A,_[1]=K,_[2]=R,_[3]=ge,!1;if(PR)return _[0]=j,_[1]=P,_[2]=de,_[3]=F,!1;if(AR?(_[0]=ie,_[1]=oe,Fe=!0):(_[0]=ee,_[1]=K,Fe=!0):je===Se&&(A>R?(_[0]=j,_[1]=K,Fe=!0):(_[0]=pe,_[1]=oe,Fe=!0)),-Ie===Se?R>A?(_[2]=X,_[3]=ge,Pe=!0):(_[2]=de,_[3]=se,Pe=!0):Ie===Se&&(R>A?(_[2]=ne,_[3]=se,Pe=!0):(_[2]=W,_[3]=ge,Pe=!0)),Fe&&Pe)return!1;if(A>R?P>F?(Ce=this.getCardinalDirection(je,Se,4),ke=this.getCardinalDirection(Ie,Se,2)):(Ce=this.getCardinalDirection(-je,Se,3),ke=this.getCardinalDirection(-Ie,Se,1)):P>F?(Ce=this.getCardinalDirection(-je,Se,1),ke=this.getCardinalDirection(-Ie,Se,3)):(Ce=this.getCardinalDirection(je,Se,2),ke=this.getCardinalDirection(Ie,Se,4)),!Fe)switch(Ce){case 1:Ft=K,Ke=A+-ae/Se,_[0]=Ke,_[1]=Ft;break;case 2:Ke=pe,Ft=P+be*Se,_[0]=Ke,_[1]=Ft;break;case 3:Ft=oe,Ke=A+ae/Se,_[0]=Ke,_[1]=Ft;break;case 4:Ke=ie,Ft=P+-be*Se,_[0]=Ke,_[1]=Ft;break}if(!Pe)switch(ke){case 1:gn=se,Ne=R+-U/Se,_[2]=Ne,_[3]=gn;break;case 2:Ne=W,gn=F+xe*Se,_[2]=Ne,_[3]=gn;break;case 3:gn=ge,Ne=R+U/Se,_[2]=Ne,_[3]=gn;break;case 4:Ne=X,gn=F+-xe*Se,_[2]=Ne,_[3]=gn;break}}return!1},b.getCardinalDirection=function(y,T,_){return y>T?_:1+_%4},b.getIntersection=function(y,T,_,A){if(A==null)return this.getIntersection2(y,T,_);var P=y.x,R=y.y,F=T.x,j=T.y,K=_.x,ee=_.y,ie=A.x,oe=A.y,pe=void 0,be=void 0,ae=void 0,ne=void 0,se=void 0,de=void 0,X=void 0,ge=void 0,W=void 0;return ae=j-R,se=P-F,X=F*R-P*j,ne=oe-ee,de=K-ie,ge=ie*ee-K*oe,W=ae*de-ne*se,W===0?null:(pe=(se*ge-de*X)/W,be=(ne*X-ae*ge)/W,new v(pe,be))},b.angleOfVector=function(y,T,_,A){var P=void 0;return y!==_?(P=Math.atan((A-T)/(_-y)),_0?1:b<0?-1:0},v.floor=function(b){return b<0?Math.ceil(b):Math.floor(b)},v.ceil=function(b){return b<0?Math.floor(b):Math.ceil(b)},u.exports=v},function(u,d,p){function v(){}v.MAX_VALUE=2147483647,v.MIN_VALUE=-2147483648,u.exports=v},function(u,d,p){var v=function(){function P(R,F){for(var j=0;j"u"?"undefined":v(y);return y==null||T!="object"&&T!="function"},u.exports=b},function(u,d,p){function v(K){if(Array.isArray(K)){for(var ee=0,ie=Array(K.length);ee0&ⅇ){for(ae.push(se[0]);ae.length>0&ⅇ){var de=ae[0];ae.splice(0,1),be.add(de);for(var X=de.getEdges(),pe=0;pe-1&&se.splice(U,1)}be=new Set,ne=new Map}}return K},j.prototype.createDummyNodesForBendpoints=function(K){for(var ee=[],ie=K.source,oe=this.graphManager.calcLowestCommonAncestor(K.source,K.target),pe=0;pe0){for(var oe=this.edgeToDummyNodes.get(ie),pe=0;pe=0&&ee.splice(ge,1);var W=ne.getNeighborsList();W.forEach(function(Fe){if(ie.indexOf(Fe)<0){var Pe=oe.get(Fe),je=Pe-1;je==1&&de.push(Fe),oe.set(Fe,je)}})}ie=ie.concat(de),(ee.length==1||ee.length==2)&&(pe=!0,be=ee[0])}return be},j.prototype.setGraphManager=function(K){this.graphManager=K},u.exports=j},function(u,d,p){function v(){}v.seed=1,v.x=0,v.nextDouble=function(){return v.x=Math.sin(v.seed++)*1e4,v.x-Math.floor(v.x)},u.exports=v},function(u,d,p){var v=p(4);function b(y,T){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}b.prototype.getWorldOrgX=function(){return this.lworldOrgX},b.prototype.setWorldOrgX=function(y){this.lworldOrgX=y},b.prototype.getWorldOrgY=function(){return this.lworldOrgY},b.prototype.setWorldOrgY=function(y){this.lworldOrgY=y},b.prototype.getWorldExtX=function(){return this.lworldExtX},b.prototype.setWorldExtX=function(y){this.lworldExtX=y},b.prototype.getWorldExtY=function(){return this.lworldExtY},b.prototype.setWorldExtY=function(y){this.lworldExtY=y},b.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},b.prototype.setDeviceOrgX=function(y){this.ldeviceOrgX=y},b.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},b.prototype.setDeviceOrgY=function(y){this.ldeviceOrgY=y},b.prototype.getDeviceExtX=function(){return this.ldeviceExtX},b.prototype.setDeviceExtX=function(y){this.ldeviceExtX=y},b.prototype.getDeviceExtY=function(){return this.ldeviceExtY},b.prototype.setDeviceExtY=function(y){this.ldeviceExtY=y},b.prototype.transformX=function(y){var T=0,_=this.lworldExtX;return _!=0&&(T=this.ldeviceOrgX+(y-this.lworldOrgX)*this.ldeviceExtX/_),T},b.prototype.transformY=function(y){var T=0,_=this.lworldExtY;return _!=0&&(T=this.ldeviceOrgY+(y-this.lworldOrgY)*this.ldeviceExtY/_),T},b.prototype.inverseTransformX=function(y){var T=0,_=this.ldeviceExtX;return _!=0&&(T=this.lworldOrgX+(y-this.ldeviceOrgX)*this.lworldExtX/_),T},b.prototype.inverseTransformY=function(y){var T=0,_=this.ldeviceExtY;return _!=0&&(T=this.lworldOrgY+(y-this.ldeviceOrgY)*this.lworldExtY/_),T},b.prototype.inverseTransformPoint=function(y){var T=new v(this.inverseTransformX(y.x),this.inverseTransformY(y.y));return T},u.exports=b},function(u,d,p){function v(F){if(Array.isArray(F)){for(var j=0,K=Array(F.length);jy.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*y.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(F-y.ADAPTATION_LOWER_NODE_LIMIT)/(y.ADAPTATION_UPPER_NODE_LIMIT-y.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-y.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=y.MAX_NODE_DISPLACEMENT_INCREMENTAL):(F>y.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(y.COOLING_ADAPTATION_FACTOR,1-(F-y.ADAPTATION_LOWER_NODE_LIMIT)/(y.ADAPTATION_UPPER_NODE_LIMIT-y.ADAPTATION_LOWER_NODE_LIMIT)*(1-y.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=y.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},P.prototype.calcSpringForces=function(){for(var F=this.getAllEdges(),j,K=0;K0&&arguments[0]!==void 0?arguments[0]:!0,j=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,K,ee,ie,oe,pe=this.getAllNodes(),be;if(this.useFRGridVariant)for(this.totalIterations%y.GRID_CALCULATION_CHECK_PERIOD==1&&F&&this.updateGrid(),be=new Set,K=0;Kae||be>ae)&&(F.gravitationForceX=-this.gravityConstant*ie,F.gravitationForceY=-this.gravityConstant*oe)):(ae=j.getEstimatedSize()*this.compoundGravityRangeFactor,(pe>ae||be>ae)&&(F.gravitationForceX=-this.gravityConstant*ie*this.compoundGravityConstant,F.gravitationForceY=-this.gravityConstant*oe*this.compoundGravityConstant))},P.prototype.isConverged=function(){var F,j=!1;return this.totalIterations>this.maxIterations/3&&(j=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),F=this.totalDisplacement=pe.length||ae>=pe[0].length)){for(var ne=0;neP}}]),_}();u.exports=T},function(u,d,p){var v=function(){function T(_,A){for(var P=0;P2&&arguments[2]!==void 0?arguments[2]:1,R=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,F=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;b(this,T),this.sequence1=_,this.sequence2=A,this.match_score=P,this.mismatch_penalty=R,this.gap_penalty=F,this.iMax=_.length+1,this.jMax=A.length+1,this.grid=new Array(this.iMax);for(var j=0;j=0;_--){var A=this.listeners[_];A.event===y&&A.callback===T&&this.listeners.splice(_,1)}},b.emit=function(y,T){for(var _=0;_A.coolingFactor*A.maxNodeDisplacement&&(this.displacementX=A.coolingFactor*A.maxNodeDisplacement*y.sign(this.displacementX)),Math.abs(this.displacementY)>A.coolingFactor*A.maxNodeDisplacement&&(this.displacementY=A.coolingFactor*A.maxNodeDisplacement*y.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),A.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},T.prototype.propogateDisplacementToChildren=function(A,P){for(var R=this.getChild().getNodes(),F,j=0;j0)this.positionNodesRadially(se);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var de=new Set(this.getAllNodes()),X=this.nodesWithGravity.filter(function(ge){return de.has(ge)});this.graphManager.setAllNodesToApplyGravitation(X),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},ae.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%R.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var se=new Set(this.getAllNodes()),de=this.nodesWithGravity.filter(function(W){return se.has(W)});this.graphManager.setAllNodesToApplyGravitation(de),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=R.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=R.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var X=!this.isTreeGrowing&&!this.isGrowthFinished,ge=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(X,ge),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},ae.prototype.getPositionsData=function(){for(var se=this.graphManager.getAllNodes(),de={},X=0;X1){var Fe;for(Fe=0;Fege&&(ge=Math.floor(U.y)),xe=Math.floor(U.x+P.DEFAULT_COMPONENT_SEPERATION)}this.transform(new K(F.WORLD_CENTER_X-U.x/2,F.WORLD_CENTER_Y-U.y/2))},ae.radialLayout=function(se,de,X){var ge=Math.max(this.maxDiagonalInTree(se),P.DEFAULT_RADIAL_SEPARATION);ae.branchRadialLayout(de,null,0,359,0,ge);var W=pe.calculateBounds(se),xe=new be;xe.setDeviceOrgX(W.getMinX()),xe.setDeviceOrgY(W.getMinY()),xe.setWorldOrgX(X.x),xe.setWorldOrgY(X.y);for(var U=0;U1;){var gn=Ne[0];Ne.splice(0,1);var _t=Se.indexOf(gn);_t>=0&&Se.splice(_t,1),Ke--,Ce--}de!=null?Ft=(Se.indexOf(Ne[0])+1)%Ke:Ft=0;for(var Et=Math.abs(ge-X)/Ce,Gt=Ft;ke!=Ce;Gt=++Gt%Ke){var ln=Se[Gt].getOtherEnd(se);if(ln!=de){var xt=(X+ke*Et)%360,Pt=(xt+Et)%360;ae.branchRadialLayout(ln,se,xt,Pt,W+xe,xe),ke++}}},ae.maxDiagonalInTree=function(se){for(var de=ie.MIN_VALUE,X=0;Xde&&(de=W)}return de},ae.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},ae.prototype.groupZeroDegreeMembers=function(){var se=this,de={};this.memberGroups={},this.idToDummyNode={};for(var X=[],ge=this.graphManager.getAllNodes(),W=0;W"u"&&(de[Fe]=[]),de[Fe]=de[Fe].concat(xe)}Object.keys(de).forEach(function(Pe){if(de[Pe].length>1){var je="DummyCompound_"+Pe;se.memberGroups[je]=de[Pe];var Ie=de[Pe][0].getParent(),Se=new _(se.graphManager);Se.id=je,Se.paddingLeft=Ie.paddingLeft||0,Se.paddingRight=Ie.paddingRight||0,Se.paddingBottom=Ie.paddingBottom||0,Se.paddingTop=Ie.paddingTop||0,se.idToDummyNode[je]=Se;var Ce=se.getGraphManager().add(se.newGraph(),Se),ke=Ie.getChild();ke.add(Se);for(var Ke=0;Ke=0;se--){var de=this.compoundOrder[se],X=de.id,ge=de.paddingLeft,W=de.paddingTop;this.adjustLocations(this.tiledMemberPack[X],de.rect.x,de.rect.y,ge,W)}},ae.prototype.repopulateZeroDegreeMembers=function(){var se=this,de=this.tiledZeroDegreePack;Object.keys(de).forEach(function(X){var ge=se.idToDummyNode[X],W=ge.paddingLeft,xe=ge.paddingTop;se.adjustLocations(de[X],ge.rect.x,ge.rect.y,W,xe)})},ae.prototype.getToBeTiled=function(se){var de=se.id;if(this.toBeTiled[de]!=null)return this.toBeTiled[de];var X=se.getChild();if(X==null)return this.toBeTiled[de]=!1,!1;for(var ge=X.getNodes(),W=0;W0)return this.toBeTiled[de]=!1,!1;if(xe.getChild()==null){this.toBeTiled[xe.id]=!1;continue}if(!this.getToBeTiled(xe))return this.toBeTiled[de]=!1,!1}return this.toBeTiled[de]=!0,!0},ae.prototype.getNodeDegree=function(se){se.id;for(var de=se.getEdges(),X=0,ge=0;gePe&&(Pe=Ie.rect.height)}X+=Pe+se.verticalPadding}},ae.prototype.tileCompoundMembers=function(se,de){var X=this;this.tiledMemberPack=[],Object.keys(se).forEach(function(ge){var W=de[ge];X.tiledMemberPack[ge]=X.tileNodes(se[ge],W.paddingLeft+W.paddingRight),W.rect.width=X.tiledMemberPack[ge].width,W.rect.height=X.tiledMemberPack[ge].height})},ae.prototype.tileNodes=function(se,de){var X=P.TILING_PADDING_VERTICAL,ge=P.TILING_PADDING_HORIZONTAL,W={rows:[],rowWidth:[],rowHeight:[],width:0,height:de,verticalPadding:X,horizontalPadding:ge};se.sort(function(Fe,Pe){return Fe.rect.width*Fe.rect.height>Pe.rect.width*Pe.rect.height?-1:Fe.rect.width*Fe.rect.height0&&(U+=se.horizontalPadding),se.rowWidth[X]=U,se.width0&&(Fe+=se.verticalPadding);var Pe=0;Fe>se.rowHeight[X]&&(Pe=se.rowHeight[X],se.rowHeight[X]=Fe,Pe=se.rowHeight[X]-Pe),se.height+=Pe,se.rows[X].push(de)},ae.prototype.getShortestRowIndex=function(se){for(var de=-1,X=Number.MAX_VALUE,ge=0;geX&&(de=ge,X=se.rowWidth[ge]);return de},ae.prototype.canAddHorizontal=function(se,de,X){var ge=this.getShortestRowIndex(se);if(ge<0)return!0;var W=se.rowWidth[ge];if(W+se.horizontalPadding+de<=se.width)return!0;var xe=0;se.rowHeight[ge]0&&(xe=X+se.verticalPadding-se.rowHeight[ge]);var U;se.width-W>=de+se.horizontalPadding?U=(se.height+xe)/(W+de+se.horizontalPadding):U=(se.height+xe)/se.width,xe=X+se.verticalPadding;var Fe;return se.widthxe&&de!=X){ge.splice(-1,1),se.rows[X].push(W),se.rowWidth[de]=se.rowWidth[de]-xe,se.rowWidth[X]=se.rowWidth[X]+xe,se.width=se.rowWidth[instance.getLongestRowIndex(se)];for(var U=Number.MIN_VALUE,Fe=0;FeU&&(U=ge[Fe].height);de>0&&(U+=se.verticalPadding);var Pe=se.rowHeight[de]+se.rowHeight[X];se.rowHeight[de]=U,se.rowHeight[X]0)for(var ke=W;ke<=xe;ke++)Ce[0]+=this.grid[ke][U-1].length+this.grid[ke][U].length-1;if(xe0)for(var ke=U;ke<=Fe;ke++)Ce[3]+=this.grid[W-1][ke].length+this.grid[W][ke].length-1;for(var Ke=ie.MAX_VALUE,Ft,Ne,gn=0;gn0){var Fe;Fe=be.getGraphManager().add(be.newGraph(),X),this.processChildrenList(Fe,de,be)}}},K.prototype.stop=function(){return this.stopped=!0,this};var ie=function(pe){pe("layout","cose-bilkent",K)};typeof cytoscape<"u"&&ie(cytoscape),d.exports=ie}])})})(dWe);var gon=dWe.exports;const pon=hC(gon),bon=12,mon=function(i,s,u,d){s.append("path").attr("id","node-"+u.id).attr("class","node-bkg node-"+i.type2Str(u.type)).attr("d",`M0 ${u.height-5} v${-u.height+2*5} q0,-5 5,-5 h${u.width-2*5} q5,0 5,5 v${u.height-5} H0 Z`),s.append("line").attr("class","node-line-"+d).attr("x1",0).attr("y1",u.height).attr("x2",u.width).attr("y2",u.height)},von=function(i,s,u){s.append("rect").attr("id","node-"+u.id).attr("class","node-bkg node-"+i.type2Str(u.type)).attr("height",u.height).attr("width",u.width)},won=function(i,s,u){const d=u.width,p=u.height,v=.15*d,b=.25*d,y=.35*d,T=.2*d;s.append("path").attr("id","node-"+u.id).attr("class","node-bkg node-"+i.type2Str(u.type)).attr("d",`M0 0 a${v},${v} 0 0,1 ${d*.25},${-1*d*.1} + a${y},${y} 1 0,1 ${d*.4},${-1*d*.1} + a${b},${b} 1 0,1 ${d*.35},${1*d*.2} + + a${v},${v} 1 0,1 ${d*.15},${1*p*.35} + a${T},${T} 1 0,1 ${-1*d*.15},${1*p*.65} + + a${b},${v} 1 0,1 ${-1*d*.25},${d*.15} + a${y},${y} 1 0,1 ${-1*d*.5},0 + a${v},${v} 1 0,1 ${-1*d*.25},${-1*d*.15} + + a${v},${v} 1 0,1 ${-1*d*.1},${-1*p*.35} + a${T},${T} 1 0,1 ${d*.1},${-1*p*.65} + + H0 V0 Z`)},yon=function(i,s,u){const d=u.width,p=u.height,v=.15*d;s.append("path").attr("id","node-"+u.id).attr("class","node-bkg node-"+i.type2Str(u.type)).attr("d",`M0 0 a${v},${v} 1 0,0 ${d*.25},${-1*p*.1} + a${v},${v} 1 0,0 ${d*.25},0 + a${v},${v} 1 0,0 ${d*.25},0 + a${v},${v} 1 0,0 ${d*.25},${1*p*.1} + + a${v},${v} 1 0,0 ${d*.15},${1*p*.33} + a${v*.8},${v*.8} 1 0,0 0,${1*p*.34} + a${v},${v} 1 0,0 ${-1*d*.15},${1*p*.33} + + a${v},${v} 1 0,0 ${-1*d*.25},${p*.15} + a${v},${v} 1 0,0 ${-1*d*.25},0 + a${v},${v} 1 0,0 ${-1*d*.25},0 + a${v},${v} 1 0,0 ${-1*d*.25},${-1*p*.15} + + a${v},${v} 1 0,0 ${-1*d*.1},${-1*p*.33} + a${v*.8},${v*.8} 1 0,0 0,${-1*p*.34} + a${v},${v} 1 0,0 ${d*.1},${-1*p*.33} + + H0 V0 Z`)},xon=function(i,s,u){s.append("circle").attr("id","node-"+u.id).attr("class","node-bkg node-"+i.type2Str(u.type)).attr("r",u.width/2)};function kon(i,s,u,d,p){return i.insert("polygon",":first-child").attr("points",d.map(function(v){return v.x+","+v.y}).join(" ")).attr("transform","translate("+(p.width-s)/2+", "+u+")")}const Eon=function(i,s,u){const d=u.height,v=d/4,b=u.width-u.padding+2*v,y=[{x:v,y:0},{x:b-v,y:0},{x:b,y:-d/2},{x:b-v,y:-d},{x:v,y:-d},{x:0,y:-d/2}];kon(s,b,d,y,u)},Ton=function(i,s,u){s.append("rect").attr("id","node-"+u.id).attr("class","node-bkg node-"+i.type2Str(u.type)).attr("height",u.height).attr("rx",u.padding).attr("ry",u.padding).attr("width",u.width)},Con=function(i,s,u,d,p){const v=p.htmlLabels,b=d%(bon-1),y=s.append("g");u.section=b;let T="section-"+b;b<0&&(T+=" section-root"),y.attr("class",(u.class?u.class+" ":"")+"mindmap-node "+T);const _=y.append("g"),A=y.append("g"),P=u.descr.replace(/()/g,` +`);JQ(A,P,{useHtmlLabels:v,width:u.width,classes:"mindmap-node-label"}),v||A.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");const R=A.node().getBBox(),[F]=NC(p.fontSize);if(u.height=R.height+F*1.1*.5+u.padding,u.width=R.width+2*u.padding,u.icon)if(u.type===i.nodeType.CIRCLE)u.height+=50,u.width+=50,y.append("foreignObject").attr("height","50px").attr("width",u.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+b+" "+u.icon),A.attr("transform","translate("+u.width/2+", "+(u.height/2-1.5*u.padding)+")");else{u.width+=50;const j=u.height;u.height=Math.max(j,60);const K=Math.abs(u.height-j);y.append("foreignObject").attr("width","60px").attr("height",u.height).attr("style","text-align: center;margin-top:"+K/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+b+" "+u.icon),A.attr("transform","translate("+(25+u.width/2)+", "+(K/2+u.padding/2)+")")}else if(v){const j=(u.width-R.width)/2,K=(u.height-R.height)/2;A.attr("transform","translate("+j+", "+K+")")}else{const j=u.width/2,K=u.padding/2;A.attr("transform","translate("+j+", "+K+")")}switch(u.type){case i.nodeType.DEFAULT:mon(i,_,u,b);break;case i.nodeType.ROUNDED_RECT:Ton(i,_,u);break;case i.nodeType.RECT:von(i,_,u);break;case i.nodeType.CIRCLE:_.attr("transform","translate("+u.width/2+", "+ +u.height/2+")"),xon(i,_,u);break;case i.nodeType.CLOUD:won(i,_,u);break;case i.nodeType.BANG:yon(i,_,u);break;case i.nodeType.HEXAGON:Eon(i,_,u);break}return i.setElementForId(u.id,y),u.height},Son=function(i,s){const u=i.getElementById(s.id),d=s.x||0,p=s.y||0;u.attr("transform","translate("+d+","+p+")")};fWe.use(pon);function bWe(i,s,u,d,p){Con(i,s,u,d,p),u.children&&u.children.forEach((v,b)=>{bWe(i,s,v,d<0?b:d,p)})}function _on(i,s){s.edges().map((u,d)=>{const p=u.data();if(u[0]._private.bodyBounds){const v=u[0]._private.rscratch;Xe.trace("Edge: ",d,p),i.insert("path").attr("d",`M ${v.startX},${v.startY} L ${v.midX},${v.midY} L${v.endX},${v.endY} `).attr("class","edge section-edge-"+p.section+" edge-depth-"+p.depth)}})}function mWe(i,s,u,d){s.add({group:"nodes",data:{id:i.id.toString(),labelText:i.descr,height:i.height,width:i.width,level:d,nodeId:i.id,padding:i.padding,type:i.type},position:{x:i.x,y:i.y}}),i.children&&i.children.forEach(p=>{mWe(p,s,u,d+1),s.add({group:"edges",data:{id:`${i.id}_${p.id}`,source:i.id,target:p.id,depth:d,section:p.section}})})}function Aon(i,s){return new Promise(u=>{const d=Ir("body").append("div").attr("id","cy").attr("style","display:none"),p=fWe({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});d.remove(),mWe(i,p,s,0),p.nodes().forEach(function(v){v.layoutDimensions=()=>{const b=v.data();return{w:b.width,h:b.height}}}),p.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),p.ready(v=>{Xe.info("Ready",v),u(p)})})}function Lon(i,s){s.nodes().map((u,d)=>{const p=u.data();p.x=u.position().x,p.y=u.position().y,Son(i,p);const v=i.getElementById(p.nodeId);Xe.info("Id:",d,"Position: (",u.position().x,", ",u.position().y,")",p),v.attr("transform",`translate(${u.position().x-p.width/2}, ${u.position().y-p.height/2})`),v.attr("attr",`apa-${d})`)})}const Mon={draw:async(i,s,u,d)=>{var P,R;Xe.debug(`Rendering mindmap diagram +`+i);const p=d.db,v=p.getMindmap();if(!v)return;const b=qt();b.htmlLabels=!1;const y=rR(s),T=y.append("g");T.attr("class","mindmap-edges");const _=y.append("g");_.attr("class","mindmap-nodes"),bWe(p,_,v,-1,b);const A=await Aon(v,b);_on(T,A),Lon(p,A),y9(void 0,y,((P=b.mindmap)==null?void 0:P.padding)??sh.mindmap.padding,((R=b.mindmap)==null?void 0:R.useMaxWidth)??sh.mindmap.useMaxWidth)}},Don=i=>{let s="";for(let u=0;u` + `}return s},Ion=Object.freeze(Object.defineProperty({__proto__:null,diagram:{db:lon,renderer:Mon,parser:son,styles:i=>` .edge { stroke-width: 3; } - ${pYe(i)} + ${Don(i)} .section-root rect, .section-root path, .section-root circle, .section-root polygon { fill: ${i.git0}; } @@ -1636,11 +1902,128 @@ Licensed under The MIT License (http://opensource.org/licenses/MIT) dominant-baseline: middle; text-align: center; } -`}},Symbol.toStringTag,{value:"Module"}));var npt=function(){var i=function(E,_,A,I){for(A=A||{},I=E.length;I--;A[E[I]]=_);return A},a=[1,9],f=[1,10],p=[1,5,10,12],w={trace:function(){},yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:function(_,A,I,B,N,R,z){var W=R.length-1;switch(N){case 7:const et=B.findOrCreateNode(R[W-4].trim().replaceAll('""','"')),st=B.findOrCreateNode(R[W-2].trim().replaceAll('""','"')),at=parseFloat(R[W].trim());B.addLink(et,st,at);break;case 8:case 9:case 11:this.$=R[W];break;case 10:this.$=R[W-1];break}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:a,20:f},{1:[2,6],7:11,10:[1,12]},i(f,[2,4],{9:13,5:[1,14]}),{12:[1,15]},i(p,[2,8]),i(p,[2,9]),{19:[1,16]},i(p,[2,11]),{1:[2,1]},{1:[2,5]},i(f,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:a,20:f},{15:18,16:7,17:8,18:a,20:f},{18:[1,19]},i(f,[2,3]),{12:[1,20]},i(p,[2,10]),{15:21,16:7,17:8,18:a,20:f},i([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:function(_,A){if(A.recoverable)this.trace(_);else{var I=new Error(_);throw I.hash=A,I}},parse:function(_){var A=this,I=[0],B=[],N=[null],R=[],z=this.table,W="",et=0,st=0,at=2,bt=1,mt=R.slice.call(arguments,1),yt=Object.create(this.lexer),ft={yy:{}};for(var ut in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ut)&&(ft.yy[ut]=this.yy[ut]);yt.setInput(_,ft.yy),ft.yy.lexer=yt,ft.yy.parser=this,typeof yt.yylloc>"u"&&(yt.yylloc={});var vt=yt.yylloc;R.push(vt);var X=yt.options&&yt.options.ranges;typeof ft.yy.parseError=="function"?this.parseError=ft.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function pt(){var Ht;return Ht=B.pop()||yt.lex()||bt,typeof Ht!="number"&&(Ht instanceof Array&&(B=Ht,Ht=B.pop()),Ht=A.symbols_[Ht]||Ht),Ht}for(var U,Tt,nt,It,Ot={},Bt,Et,Z,Ct;;){if(Tt=I[I.length-1],this.defaultActions[Tt]?nt=this.defaultActions[Tt]:((U===null||typeof U>"u")&&(U=pt()),nt=z[Tt]&&z[Tt][U]),typeof nt>"u"||!nt.length||!nt[0]){var xt="";Ct=[];for(Bt in z[Tt])this.terminals_[Bt]&&Bt>at&&Ct.push("'"+this.terminals_[Bt]+"'");yt.showPosition?xt="Parse error on line "+(et+1)+`: -`+yt.showPosition()+` -Expecting `+Ct.join(", ")+", got '"+(this.terminals_[U]||U)+"'":xt="Parse error on line "+(et+1)+": Unexpected "+(U==bt?"end of input":"'"+(this.terminals_[U]||U)+"'"),this.parseError(xt,{text:yt.match,token:this.terminals_[U]||U,line:yt.yylineno,loc:vt,expected:Ct})}if(nt[0]instanceof Array&&nt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Tt+", token: "+U);switch(nt[0]){case 1:I.push(U),N.push(yt.yytext),R.push(yt.yylloc),I.push(nt[1]),U=null,st=yt.yyleng,W=yt.yytext,et=yt.yylineno,vt=yt.yylloc;break;case 2:if(Et=this.productions_[nt[1]][1],Ot.$=N[N.length-Et],Ot._$={first_line:R[R.length-(Et||1)].first_line,last_line:R[R.length-1].last_line,first_column:R[R.length-(Et||1)].first_column,last_column:R[R.length-1].last_column},X&&(Ot._$.range=[R[R.length-(Et||1)].range[0],R[R.length-1].range[1]]),It=this.performAction.apply(Ot,[W,st,et,ft.yy,nt[1],N,R].concat(mt)),typeof It<"u")return It;Et&&(I=I.slice(0,-1*Et*2),N=N.slice(0,-1*Et),R=R.slice(0,-1*Et)),I.push(this.productions_[nt[1]][0]),N.push(Ot.$),R.push(Ot._$),Z=z[I[I.length-2]][I[I.length-1]],I.push(Z);break;case 3:return!0}}return!0}},m=function(){var E={EOF:1,parseError:function(A,I){if(this.yy.parser)this.yy.parser.parseError(A,I);else throw new Error(A)},setInput:function(_,A){return this.yy=A||this.yy||{},this._input=_,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var _=this._input[0];this.yytext+=_,this.yyleng++,this.offset++,this.match+=_,this.matched+=_;var A=_.match(/(?:\r\n?|\n).*/g);return A?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),_},unput:function(_){var A=_.length,I=_.split(/(?:\r\n?|\n)/g);this._input=_+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-A),this.offset-=A;var B=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),I.length-1&&(this.yylineno-=I.length-1);var N=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:I?(I.length===B.length?this.yylloc.first_column:0)+B[B.length-I.length].length-I[0].length:this.yylloc.first_column-A},this.options.ranges&&(this.yylloc.range=[N[0],N[0]+this.yyleng-A]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(_){this.unput(this.match.slice(_))},pastInput:function(){var _=this.matched.substr(0,this.matched.length-this.match.length);return(_.length>20?"...":"")+_.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var _=this.match;return _.length<20&&(_+=this._input.substr(0,20-_.length)),(_.substr(0,20)+(_.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var _=this.pastInput(),A=new Array(_.length+1).join("-");return _+this.upcomingInput()+` -`+A+"^"},test_match:function(_,A){var I,B,N;if(this.options.backtrack_lexer&&(N={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(N.yylloc.range=this.yylloc.range.slice(0))),B=_[0].match(/(?:\r\n?|\n).*/g),B&&(this.yylineno+=B.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:B?B[B.length-1].length-B[B.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+_[0].length},this.yytext+=_[0],this.match+=_[0],this.matches=_,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(_[0].length),this.matched+=_[0],I=this.performAction.call(this,this.yy,this,A,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),I)return I;if(this._backtrack){for(var R in N)this[R]=N[R];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var _,A,I,B;this._more||(this.yytext="",this.match="");for(var N=this._currentRules(),R=0;RA[0].length)){if(A=I,B=R,this.options.backtrack_lexer){if(_=this.test_match(I,N[R]),_!==!1)return _;if(this._backtrack){A=!1;continue}else return!1}else if(!this.options.flex)break}return A?(_=this.test_match(A,N[B]),_!==!1?_:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var A=this.next();return A||this.lex()},begin:function(A){this.conditionStack.push(A)},popState:function(){var A=this.conditionStack.length-1;return A>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(A){return A=this.conditionStack.length-1-Math.abs(A||0),A>=0?this.conditionStack[A]:"INITIAL"},pushState:function(A){this.begin(A)},stateStackSize:function(){return this.conditionStack.length},options:{easy_keword_rules:!0},performAction:function(A,I,B,N){switch(B){case 0:return this.pushState("csv"),4;case 1:return 10;case 2:return 5;case 3:return 12;case 4:return this.pushState("escaped_text"),18;case 5:return 20;case 6:return this.popState("escaped_text"),18;case 7:return 19}},rules:[/^(?:sankey-beta\b)/,/^(?:$)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:(\u002C))/,/^(?:(\u0022))/,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/,/^(?:(\u0022)(?!(\u0022)))/,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/],conditions:{csv:{rules:[1,2,3,4,5,6,7],inclusive:!1},escaped_text:{rules:[6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};return E}();w.lexer=m;function b(){this.yy={}}return b.prototype=w,w.Parser=b,new b}();npt.parser=npt;const rK=npt;let iK=[],sK=[],kL={};const wYe=()=>{iK=[],sK=[],kL={},hg()};class vYe{constructor(a,f,p=0){this.source=a,this.target=f,this.value=p}}const mYe=(i,a,f)=>{iK.push(new vYe(i,a,f))};class yYe{constructor(a){this.ID=a}}const xYe={nodesMap:kL,getConfig:()=>Oe().sankey,getNodes:()=>sK,getLinks:()=>iK,getGraph:()=>({nodes:sK.map(i=>({id:i.ID})),links:iK.map(i=>({source:i.source.ID,target:i.target.ID,value:i.value}))}),addLink:mYe,findOrCreateNode:i=>(i=Kr.sanitizeText(i,Oe()),kL[i]||(kL[i]=new yYe(i),sK.push(kL[i])),kL[i]),getAccTitle:fg,setAccTitle:E0,getAccDescription:gg,setAccDescription:dg,getDiagramTitle:pg,setDiagramTitle:Nb,clear:wYe};function b$t(i,a){let f;if(a===void 0)for(const p of i)p!=null&&(f=p)&&(f=p);else{let p=-1;for(let w of i)(w=a(w,++p,i))!=null&&(f=w)&&(f=w)}return f}function w$t(i,a){let f;if(a===void 0)for(const p of i)p!=null&&(f>p||f===void 0&&p>=p)&&(f=p);else{let p=-1;for(let w of i)(w=a(w,++p,i))!=null&&(f>w||f===void 0&&w>=w)&&(f=w)}return f}function rpt(i,a){let f=0;if(a===void 0)for(let p of i)(p=+p)&&(f+=p);else{let p=-1;for(let w of i)(w=+a(w,++p,i))&&(f+=w)}return f}function kYe(i){return i.target.depth}function EYe(i){return i.depth}function TYe(i,a){return a-1-i.height}function v$t(i,a){return i.sourceLinks.length?i.depth:a-1}function CYe(i){return i.targetLinks.length?i.depth:i.sourceLinks.length?w$t(i.sourceLinks,kYe)-1:0}function aK(i){return function(){return i}}function m$t(i,a){return oK(i.source,a.source)||i.index-a.index}function y$t(i,a){return oK(i.target,a.target)||i.index-a.index}function oK(i,a){return i.y0-a.y0}function ipt(i){return i.value}function _Ye(i){return i.index}function SYe(i){return i.nodes}function AYe(i){return i.links}function x$t(i,a){const f=i.get(a);if(!f)throw new Error("missing: "+a);return f}function k$t({nodes:i}){for(const a of i){let f=a.y0,p=f;for(const w of a.sourceLinks)w.y0=f+w.width/2,f+=w.width;for(const w of a.targetLinks)w.y1=p+w.width/2,p+=w.width}}function LYe(){let i=0,a=0,f=1,p=1,w=24,m=8,b,E=_Ye,_=v$t,A,I,B=SYe,N=AYe,R=6;function z(){const Ot={nodes:B.apply(null,arguments),links:N.apply(null,arguments)};return W(Ot),et(Ot),st(Ot),at(Ot),yt(Ot),k$t(Ot),Ot}z.update=function(Ot){return k$t(Ot),Ot},z.nodeId=function(Ot){return arguments.length?(E=typeof Ot=="function"?Ot:aK(Ot),z):E},z.nodeAlign=function(Ot){return arguments.length?(_=typeof Ot=="function"?Ot:aK(Ot),z):_},z.nodeSort=function(Ot){return arguments.length?(A=Ot,z):A},z.nodeWidth=function(Ot){return arguments.length?(w=+Ot,z):w},z.nodePadding=function(Ot){return arguments.length?(m=b=+Ot,z):m},z.nodes=function(Ot){return arguments.length?(B=typeof Ot=="function"?Ot:aK(Ot),z):B},z.links=function(Ot){return arguments.length?(N=typeof Ot=="function"?Ot:aK(Ot),z):N},z.linkSort=function(Ot){return arguments.length?(I=Ot,z):I},z.size=function(Ot){return arguments.length?(i=a=0,f=+Ot[0],p=+Ot[1],z):[f-i,p-a]},z.extent=function(Ot){return arguments.length?(i=+Ot[0][0],f=+Ot[1][0],a=+Ot[0][1],p=+Ot[1][1],z):[[i,a],[f,p]]},z.iterations=function(Ot){return arguments.length?(R=+Ot,z):R};function W({nodes:Ot,links:Bt}){for(const[Z,Ct]of Ot.entries())Ct.index=Z,Ct.sourceLinks=[],Ct.targetLinks=[];const Et=new Map(Ot.map((Z,Ct)=>[E(Z,Ct,Ot),Z]));for(const[Z,Ct]of Bt.entries()){Ct.index=Z;let{source:xt,target:Ht}=Ct;typeof xt!="object"&&(xt=Ct.source=x$t(Et,xt)),typeof Ht!="object"&&(Ht=Ct.target=x$t(Et,Ht)),xt.sourceLinks.push(Ct),Ht.targetLinks.push(Ct)}if(I!=null)for(const{sourceLinks:Z,targetLinks:Ct}of Ot)Z.sort(I),Ct.sort(I)}function et({nodes:Ot}){for(const Bt of Ot)Bt.value=Bt.fixedValue===void 0?Math.max(rpt(Bt.sourceLinks,ipt),rpt(Bt.targetLinks,ipt)):Bt.fixedValue}function st({nodes:Ot}){const Bt=Ot.length;let Et=new Set(Ot),Z=new Set,Ct=0;for(;Et.size;){for(const xt of Et){xt.depth=Ct;for(const{target:Ht}of xt.sourceLinks)Z.add(Ht)}if(++Ct>Bt)throw new Error("circular link");Et=Z,Z=new Set}}function at({nodes:Ot}){const Bt=Ot.length;let Et=new Set(Ot),Z=new Set,Ct=0;for(;Et.size;){for(const xt of Et){xt.height=Ct;for(const{source:Ht}of xt.targetLinks)Z.add(Ht)}if(++Ct>Bt)throw new Error("circular link");Et=Z,Z=new Set}}function bt({nodes:Ot}){const Bt=b$t(Ot,Ct=>Ct.depth)+1,Et=(f-i-w)/(Bt-1),Z=new Array(Bt);for(const Ct of Ot){const xt=Math.max(0,Math.min(Bt-1,Math.floor(_.call(null,Ct,Bt))));Ct.layer=xt,Ct.x0=i+xt*Et,Ct.x1=Ct.x0+w,Z[xt]?Z[xt].push(Ct):Z[xt]=[Ct]}if(A)for(const Ct of Z)Ct.sort(A);return Z}function mt(Ot){const Bt=w$t(Ot,Et=>(p-a-(Et.length-1)*b)/rpt(Et,ipt));for(const Et of Ot){let Z=a;for(const Ct of Et){Ct.y0=Z,Ct.y1=Z+Ct.value*Bt,Z=Ct.y1+b;for(const xt of Ct.sourceLinks)xt.width=xt.value*Bt}Z=(p-Z+b)/(Et.length+1);for(let Ct=0;CtEt.length)-1)),mt(Bt);for(let Et=0;Et0))continue;let gn=(Le/Ft-Ht.y0)*Bt;Ht.y0+=gn,Ht.y1+=gn,U(Ht)}A===void 0&&xt.sort(oK),vt(xt,Et)}}function ut(Ot,Bt,Et){for(let Z=Ot.length,Ct=Z-2;Ct>=0;--Ct){const xt=Ot[Ct];for(const Ht of xt){let Le=0,Ft=0;for(const{target:Se,value:me}of Ht.sourceLinks){let Ve=me*(Se.layer-Ht.layer);Le+=It(Ht,Se)*Ve,Ft+=Ve}if(!(Ft>0))continue;let gn=(Le/Ft-Ht.y0)*Bt;Ht.y0+=gn,Ht.y1+=gn,U(Ht)}A===void 0&&xt.sort(oK),vt(xt,Et)}}function vt(Ot,Bt){const Et=Ot.length>>1,Z=Ot[Et];pt(Ot,Z.y0-b,Et-1,Bt),X(Ot,Z.y1+b,Et+1,Bt),pt(Ot,p,Ot.length-1,Bt),X(Ot,a,0,Bt)}function X(Ot,Bt,Et,Z){for(;Et1e-6&&(Ct.y0+=xt,Ct.y1+=xt),Bt=Ct.y1+b}}function pt(Ot,Bt,Et,Z){for(;Et>=0;--Et){const Ct=Ot[Et],xt=(Ct.y1-Bt)*Z;xt>1e-6&&(Ct.y0-=xt,Ct.y1-=xt),Bt=Ct.y0-b}}function U({sourceLinks:Ot,targetLinks:Bt}){if(I===void 0){for(const{source:{sourceLinks:Et}}of Bt)Et.sort(y$t);for(const{target:{targetLinks:Et}}of Ot)Et.sort(m$t)}}function Tt(Ot){if(I===void 0)for(const{sourceLinks:Bt,targetLinks:Et}of Ot)Bt.sort(y$t),Et.sort(m$t)}function nt(Ot,Bt){let Et=Ot.y0-(Ot.sourceLinks.length-1)*b/2;for(const{target:Z,width:Ct}of Ot.sourceLinks){if(Z===Bt)break;Et+=Ct+b}for(const{source:Z,width:Ct}of Bt.targetLinks){if(Z===Ot)break;Et-=Ct}return Et}function It(Ot,Bt){let Et=Bt.y0-(Bt.targetLinks.length-1)*b/2;for(const{source:Z,width:Ct}of Bt.targetLinks){if(Z===Ot)break;Et+=Ct+b}for(const{target:Z,width:Ct}of Ot.sourceLinks){if(Z===Bt)break;Et-=Ct}return Et}return z}var spt=Math.PI,apt=2*spt,OT=1e-6,MYe=apt-OT;function opt(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function E$t(){return new opt}opt.prototype=E$t.prototype={constructor:opt,moveTo:function(i,a){this._+="M"+(this._x0=this._x1=+i)+","+(this._y0=this._y1=+a)},closePath:function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(i,a){this._+="L"+(this._x1=+i)+","+(this._y1=+a)},quadraticCurveTo:function(i,a,f,p){this._+="Q"+ +i+","+ +a+","+(this._x1=+f)+","+(this._y1=+p)},bezierCurveTo:function(i,a,f,p,w,m){this._+="C"+ +i+","+ +a+","+ +f+","+ +p+","+(this._x1=+w)+","+(this._y1=+m)},arcTo:function(i,a,f,p,w){i=+i,a=+a,f=+f,p=+p,w=+w;var m=this._x1,b=this._y1,E=f-i,_=p-a,A=m-i,I=b-a,B=A*A+I*I;if(w<0)throw new Error("negative radius: "+w);if(this._x1===null)this._+="M"+(this._x1=i)+","+(this._y1=a);else if(B>OT)if(!(Math.abs(I*E-_*A)>OT)||!w)this._+="L"+(this._x1=i)+","+(this._y1=a);else{var N=f-m,R=p-b,z=E*E+_*_,W=N*N+R*R,et=Math.sqrt(z),st=Math.sqrt(B),at=w*Math.tan((spt-Math.acos((z+B-W)/(2*et*st)))/2),bt=at/st,mt=at/et;Math.abs(bt-1)>OT&&(this._+="L"+(i+bt*A)+","+(a+bt*I)),this._+="A"+w+","+w+",0,0,"+ +(I*N>A*R)+","+(this._x1=i+mt*E)+","+(this._y1=a+mt*_)}},arc:function(i,a,f,p,w,m){i=+i,a=+a,f=+f,m=!!m;var b=f*Math.cos(p),E=f*Math.sin(p),_=i+b,A=a+E,I=1^m,B=m?p-w:w-p;if(f<0)throw new Error("negative radius: "+f);this._x1===null?this._+="M"+_+","+A:(Math.abs(this._x1-_)>OT||Math.abs(this._y1-A)>OT)&&(this._+="L"+_+","+A),f&&(B<0&&(B=B%apt+apt),B>MYe?this._+="A"+f+","+f+",0,1,"+I+","+(i-b)+","+(a-E)+"A"+f+","+f+",0,1,"+I+","+(this._x1=_)+","+(this._y1=A):B>OT&&(this._+="A"+f+","+f+",0,"+ +(B>=spt)+","+I+","+(this._x1=i+f*Math.cos(w))+","+(this._y1=a+f*Math.sin(w))))},rect:function(i,a,f,p){this._+="M"+(this._x0=this._x1=+i)+","+(this._y0=this._y1=+a)+"h"+ +f+"v"+ +p+"h"+-f+"Z"},toString:function(){return this._}};function T$t(i){return function(){return i}}function DYe(i){return i[0]}function IYe(i){return i[1]}var OYe=Array.prototype.slice;function PYe(i){return i.source}function FYe(i){return i.target}function NYe(i){var a=PYe,f=FYe,p=DYe,w=IYe,m=null;function b(){var E,_=OYe.call(arguments),A=a.apply(this,_),I=f.apply(this,_);if(m||(m=E=E$t()),i(m,+p.apply(this,(_[0]=A,_)),+w.apply(this,_),+p.apply(this,(_[0]=I,_)),+w.apply(this,_)),E)return m=null,E+""||null}return b.source=function(E){return arguments.length?(a=E,b):a},b.target=function(E){return arguments.length?(f=E,b):f},b.x=function(E){return arguments.length?(p=typeof E=="function"?E:T$t(+E),b):p},b.y=function(E){return arguments.length?(w=typeof E=="function"?E:T$t(+E),b):w},b.context=function(E){return arguments.length?(m=E??null,b):m},b}function BYe(i,a,f,p,w){i.moveTo(a,f),i.bezierCurveTo(a=(a+p)/2,f,a,w,p,w)}function RYe(){return NYe(BYe)}function jYe(i){return[i.source.x1,i.y0]}function $Ye(i){return[i.target.x0,i.y1]}function zYe(){return RYe().source(jYe).target($Ye)}const C$t=class RLt{static next(a){return new RLt(a+ ++RLt.count)}constructor(a){this.id=a,this.href=`#${a}`}toString(){return"url("+this.href+")"}};C$t.count=0;let _$t=C$t;const qYe={left:EYe,right:TYe,center:CYe,justify:v$t},HYe={draw:function(i,a,f,p){const{securityLevel:w,sankey:m}=Oe(),b=SOt.sankey;let E;w==="sandbox"&&(E=yr("#i"+a));const _=yr(w==="sandbox"?E.nodes()[0].contentDocument.body:"body"),A=w==="sandbox"?_.select(`[id="${a}"]`):yr(`[id="${a}"]`),I=(m==null?void 0:m.width)??b.width,B=(m==null?void 0:m.height)??b.width,N=(m==null?void 0:m.useMaxWidth)??b.useMaxWidth,R=(m==null?void 0:m.nodeAlignment)??b.nodeAlignment,z=(m==null?void 0:m.prefix)??b.prefix,W=(m==null?void 0:m.suffix)??b.suffix,et=(m==null?void 0:m.showValues)??b.showValues;k0(A,B,I,N);const st=p.db.getGraph(),at=qYe[R],bt=10;LYe().nodeId(pt=>pt.id).nodeWidth(bt).nodePadding(10+(et?15:0)).nodeAlign(at).extent([[0,0],[I,B]])(st);const yt=XU(X7e);A.append("g").attr("class","nodes").selectAll(".node").data(st.nodes).join("g").attr("class","node").attr("id",pt=>(pt.uid=_$t.next("node-")).id).attr("transform",function(pt){return"translate("+pt.x0+","+pt.y0+")"}).attr("x",pt=>pt.x0).attr("y",pt=>pt.y0).append("rect").attr("height",pt=>pt.y1-pt.y0).attr("width",pt=>pt.x1-pt.x0).attr("fill",pt=>yt(pt.id));const ft=({id:pt,value:U})=>et?`${pt} -${z}${Math.round(U*100)/100}${W}`:pt;A.append("g").attr("class","node-labels").attr("font-family","sans-serif").attr("font-size",14).selectAll("text").data(st.nodes).join("text").attr("x",pt=>pt.x0(pt.y1+pt.y0)/2).attr("dy",`${et?"0":"0.35"}em`).attr("text-anchor",pt=>pt.x0(U.uid=_$t.next("linearGradient-")).id).attr("gradientUnits","userSpaceOnUse").attr("x1",U=>U.source.x1).attr("x2",U=>U.target.x0);pt.append("stop").attr("offset","0%").attr("stop-color",U=>yt(U.source.id)),pt.append("stop").attr("offset","100%").attr("stop-color",U=>yt(U.target.id))}let X;switch(vt){case"gradient":X=pt=>pt.uid;break;case"source":X=pt=>yt(pt.source.id);break;case"target":X=pt=>yt(pt.target.id);break;default:X=vt}ut.append("path").attr("d",zYe()).attr("stroke",X).attr("stroke-width",pt=>Math.max(1,pt.width))}},VYe=i=>i.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,` -`).trim(),GYe=rK.parse.bind(rK);rK.parse=i=>GYe(VYe(i));const UYe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:rK,db:xYe,renderer:HYe}},Symbol.toStringTag,{value:"Module"}));return Bb}); +`}},Symbol.toStringTag,{value:"Module"}));var iwe=function(){var i=function(y,T,_,A){for(_=_||{},A=y.length;A--;_[y[A]]=T);return _},s=[1,9],u=[1,10],d=[1,5,10,12],p={trace:function(){},yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:function(T,_,A,P,R,F,j){var K=F.length-1;switch(R){case 7:const ee=P.findOrCreateNode(F[K-4].trim().replaceAll('""','"')),ie=P.findOrCreateNode(F[K-2].trim().replaceAll('""','"')),oe=parseFloat(F[K].trim());P.addLink(ee,ie,oe);break;case 8:case 9:case 11:this.$=F[K];break;case 10:this.$=F[K-1];break}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:s,20:u},{1:[2,6],7:11,10:[1,12]},i(u,[2,4],{9:13,5:[1,14]}),{12:[1,15]},i(d,[2,8]),i(d,[2,9]),{19:[1,16]},i(d,[2,11]),{1:[2,1]},{1:[2,5]},i(u,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:s,20:u},{15:18,16:7,17:8,18:s,20:u},{18:[1,19]},i(u,[2,3]),{12:[1,20]},i(d,[2,10]),{15:21,16:7,17:8,18:s,20:u},i([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:function(T,_){if(_.recoverable)this.trace(T);else{var A=new Error(T);throw A.hash=_,A}},parse:function(T){var _=this,A=[0],P=[],R=[null],F=[],j=this.table,K="",ee=0,ie=0,oe=2,pe=1,be=F.slice.call(arguments,1),ae=Object.create(this.lexer),ne={yy:{}};for(var se in this.yy)Object.prototype.hasOwnProperty.call(this.yy,se)&&(ne.yy[se]=this.yy[se]);ae.setInput(T,ne.yy),ne.yy.lexer=ae,ne.yy.parser=this,typeof ae.yylloc>"u"&&(ae.yylloc={});var de=ae.yylloc;F.push(de);var X=ae.options&&ae.options.ranges;typeof ne.yy.parseError=="function"?this.parseError=ne.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ge(){var Ke;return Ke=P.pop()||ae.lex()||pe,typeof Ke!="number"&&(Ke instanceof Array&&(P=Ke,Ke=P.pop()),Ke=_.symbols_[Ke]||Ke),Ke}for(var W,xe,U,Fe,Pe={},je,Ie,Se,Ce;;){if(xe=A[A.length-1],this.defaultActions[xe]?U=this.defaultActions[xe]:((W===null||typeof W>"u")&&(W=ge()),U=j[xe]&&j[xe][W]),typeof U>"u"||!U.length||!U[0]){var ke="";Ce=[];for(je in j[xe])this.terminals_[je]&&je>oe&&Ce.push("'"+this.terminals_[je]+"'");ae.showPosition?ke="Parse error on line "+(ee+1)+`: +`+ae.showPosition()+` +Expecting `+Ce.join(", ")+", got '"+(this.terminals_[W]||W)+"'":ke="Parse error on line "+(ee+1)+": Unexpected "+(W==pe?"end of input":"'"+(this.terminals_[W]||W)+"'"),this.parseError(ke,{text:ae.match,token:this.terminals_[W]||W,line:ae.yylineno,loc:de,expected:Ce})}if(U[0]instanceof Array&&U.length>1)throw new Error("Parse Error: multiple actions possible at state: "+xe+", token: "+W);switch(U[0]){case 1:A.push(W),R.push(ae.yytext),F.push(ae.yylloc),A.push(U[1]),W=null,ie=ae.yyleng,K=ae.yytext,ee=ae.yylineno,de=ae.yylloc;break;case 2:if(Ie=this.productions_[U[1]][1],Pe.$=R[R.length-Ie],Pe._$={first_line:F[F.length-(Ie||1)].first_line,last_line:F[F.length-1].last_line,first_column:F[F.length-(Ie||1)].first_column,last_column:F[F.length-1].last_column},X&&(Pe._$.range=[F[F.length-(Ie||1)].range[0],F[F.length-1].range[1]]),Fe=this.performAction.apply(Pe,[K,ie,ee,ne.yy,U[1],R,F].concat(be)),typeof Fe<"u")return Fe;Ie&&(A=A.slice(0,-1*Ie*2),R=R.slice(0,-1*Ie),F=F.slice(0,-1*Ie)),A.push(this.productions_[U[1]][0]),R.push(Pe.$),F.push(Pe._$),Se=j[A[A.length-2]][A[A.length-1]],A.push(Se);break;case 3:return!0}}return!0}},v=function(){var y={EOF:1,parseError:function(_,A){if(this.yy.parser)this.yy.parser.parseError(_,A);else throw new Error(_)},setInput:function(T,_){return this.yy=_||this.yy||{},this._input=T,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var T=this._input[0];this.yytext+=T,this.yyleng++,this.offset++,this.match+=T,this.matched+=T;var _=T.match(/(?:\r\n?|\n).*/g);return _?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),T},unput:function(T){var _=T.length,A=T.split(/(?:\r\n?|\n)/g);this._input=T+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-_),this.offset-=_;var P=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),A.length-1&&(this.yylineno-=A.length-1);var R=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:A?(A.length===P.length?this.yylloc.first_column:0)+P[P.length-A.length].length-A[0].length:this.yylloc.first_column-_},this.options.ranges&&(this.yylloc.range=[R[0],R[0]+this.yyleng-_]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(T){this.unput(this.match.slice(T))},pastInput:function(){var T=this.matched.substr(0,this.matched.length-this.match.length);return(T.length>20?"...":"")+T.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var T=this.match;return T.length<20&&(T+=this._input.substr(0,20-T.length)),(T.substr(0,20)+(T.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var T=this.pastInput(),_=new Array(T.length+1).join("-");return T+this.upcomingInput()+` +`+_+"^"},test_match:function(T,_){var A,P,R;if(this.options.backtrack_lexer&&(R={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(R.yylloc.range=this.yylloc.range.slice(0))),P=T[0].match(/(?:\r\n?|\n).*/g),P&&(this.yylineno+=P.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:P?P[P.length-1].length-P[P.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+T[0].length},this.yytext+=T[0],this.match+=T[0],this.matches=T,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(T[0].length),this.matched+=T[0],A=this.performAction.call(this,this.yy,this,_,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),A)return A;if(this._backtrack){for(var F in R)this[F]=R[F];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var T,_,A,P;this._more||(this.yytext="",this.match="");for(var R=this._currentRules(),F=0;F_[0].length)){if(_=A,P=F,this.options.backtrack_lexer){if(T=this.test_match(A,R[F]),T!==!1)return T;if(this._backtrack){_=!1;continue}else return!1}else if(!this.options.flex)break}return _?(T=this.test_match(_,R[P]),T!==!1?T:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var _=this.next();return _||this.lex()},begin:function(_){this.conditionStack.push(_)},popState:function(){var _=this.conditionStack.length-1;return _>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(_){return _=this.conditionStack.length-1-Math.abs(_||0),_>=0?this.conditionStack[_]:"INITIAL"},pushState:function(_){this.begin(_)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(_,A,P,R){switch(P){case 0:return this.pushState("csv"),4;case 1:return 10;case 2:return 5;case 3:return 12;case 4:return this.pushState("escaped_text"),18;case 5:return 20;case 6:return this.popState("escaped_text"),18;case 7:return 19}},rules:[/^(?:sankey-beta\b)/i,/^(?:$)/i,/^(?:((\u000D\u000A)|(\u000A)))/i,/^(?:(\u002C))/i,/^(?:(\u0022))/i,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/i,/^(?:(\u0022)(?!(\u0022)))/i,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/i],conditions:{csv:{rules:[1,2,3,4,5,6,7],inclusive:!1},escaped_text:{rules:[6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};return y}();p.lexer=v;function b(){this.yy={}}return b.prototype=p,p.Parser=b,new b}();iwe.parser=iwe;const NJ=iwe;let PJ=[],BJ=[],tI={};const Oon=()=>{PJ=[],BJ=[],tI={},Pg()};class Non{constructor(s,u,d=0){this.source=s,this.target=u,this.value=d}}const Pon=(i,s,u)=>{PJ.push(new Non(i,s,u))};class Bon{constructor(s){this.ID=s}}const Fon={nodesMap:tI,getConfig:()=>qt().sankey,getNodes:()=>BJ,getLinks:()=>PJ,getGraph:()=>({nodes:BJ.map(i=>({id:i.ID})),links:PJ.map(i=>({source:i.source.ID,target:i.target.ID,value:i.value}))}),addLink:Pon,findOrCreateNode:i=>(i=ci.sanitizeText(i,qt()),tI[i]||(tI[i]=new Bon(i),BJ.push(tI[i])),tI[i]),getAccTitle:Cp,setAccTitle:Bg,getAccDescription:_p,setAccDescription:Sp,getDiagramTitle:Ap,setDiagramTitle:cm,clear:Oon};function vWe(i,s){let u;if(s===void 0)for(const d of i)d!=null&&(u=d)&&(u=d);else{let d=-1;for(let p of i)(p=s(p,++d,i))!=null&&(u=p)&&(u=p)}return u}function wWe(i,s){let u;if(s===void 0)for(const d of i)d!=null&&(u>d||u===void 0&&d>=d)&&(u=d);else{let d=-1;for(let p of i)(p=s(p,++d,i))!=null&&(u>p||u===void 0&&p>=p)&&(u=p)}return u}function swe(i,s){let u=0;if(s===void 0)for(let d of i)(d=+d)&&(u+=d);else{let d=-1;for(let p of i)(p=+s(p,++d,i))&&(u+=p)}return u}function Ron(i){return i.target.depth}function jon(i){return i.depth}function $on(i,s){return s-1-i.height}function yWe(i,s){return i.sourceLinks.length?i.depth:s-1}function zon(i){return i.targetLinks.length?i.depth:i.sourceLinks.length?wWe(i.sourceLinks,Ron)-1:0}function FJ(i){return function(){return i}}function xWe(i,s){return RJ(i.source,s.source)||i.index-s.index}function kWe(i,s){return RJ(i.target,s.target)||i.index-s.index}function RJ(i,s){return i.y0-s.y0}function awe(i){return i.value}function qon(i){return i.index}function Hon(i){return i.nodes}function Von(i){return i.links}function EWe(i,s){const u=i.get(s);if(!u)throw new Error("missing: "+s);return u}function TWe({nodes:i}){for(const s of i){let u=s.y0,d=u;for(const p of s.sourceLinks)p.y0=u+p.width/2,u+=p.width;for(const p of s.targetLinks)p.y1=d+p.width/2,d+=p.width}}function Uon(){let i=0,s=0,u=1,d=1,p=24,v=8,b,y=qon,T=yWe,_,A,P=Hon,R=Von,F=6;function j(){const Pe={nodes:P.apply(null,arguments),links:R.apply(null,arguments)};return K(Pe),ee(Pe),ie(Pe),oe(Pe),ae(Pe),TWe(Pe),Pe}j.update=function(Pe){return TWe(Pe),Pe},j.nodeId=function(Pe){return arguments.length?(y=typeof Pe=="function"?Pe:FJ(Pe),j):y},j.nodeAlign=function(Pe){return arguments.length?(T=typeof Pe=="function"?Pe:FJ(Pe),j):T},j.nodeSort=function(Pe){return arguments.length?(_=Pe,j):_},j.nodeWidth=function(Pe){return arguments.length?(p=+Pe,j):p},j.nodePadding=function(Pe){return arguments.length?(v=b=+Pe,j):v},j.nodes=function(Pe){return arguments.length?(P=typeof Pe=="function"?Pe:FJ(Pe),j):P},j.links=function(Pe){return arguments.length?(R=typeof Pe=="function"?Pe:FJ(Pe),j):R},j.linkSort=function(Pe){return arguments.length?(A=Pe,j):A},j.size=function(Pe){return arguments.length?(i=s=0,u=+Pe[0],d=+Pe[1],j):[u-i,d-s]},j.extent=function(Pe){return arguments.length?(i=+Pe[0][0],u=+Pe[1][0],s=+Pe[0][1],d=+Pe[1][1],j):[[i,s],[u,d]]},j.iterations=function(Pe){return arguments.length?(F=+Pe,j):F};function K({nodes:Pe,links:je}){for(const[Se,Ce]of Pe.entries())Ce.index=Se,Ce.sourceLinks=[],Ce.targetLinks=[];const Ie=new Map(Pe.map((Se,Ce)=>[y(Se,Ce,Pe),Se]));for(const[Se,Ce]of je.entries()){Ce.index=Se;let{source:ke,target:Ke}=Ce;typeof ke!="object"&&(ke=Ce.source=EWe(Ie,ke)),typeof Ke!="object"&&(Ke=Ce.target=EWe(Ie,Ke)),ke.sourceLinks.push(Ce),Ke.targetLinks.push(Ce)}if(A!=null)for(const{sourceLinks:Se,targetLinks:Ce}of Pe)Se.sort(A),Ce.sort(A)}function ee({nodes:Pe}){for(const je of Pe)je.value=je.fixedValue===void 0?Math.max(swe(je.sourceLinks,awe),swe(je.targetLinks,awe)):je.fixedValue}function ie({nodes:Pe}){const je=Pe.length;let Ie=new Set(Pe),Se=new Set,Ce=0;for(;Ie.size;){for(const ke of Ie){ke.depth=Ce;for(const{target:Ke}of ke.sourceLinks)Se.add(Ke)}if(++Ce>je)throw new Error("circular link");Ie=Se,Se=new Set}}function oe({nodes:Pe}){const je=Pe.length;let Ie=new Set(Pe),Se=new Set,Ce=0;for(;Ie.size;){for(const ke of Ie){ke.height=Ce;for(const{source:Ke}of ke.targetLinks)Se.add(Ke)}if(++Ce>je)throw new Error("circular link");Ie=Se,Se=new Set}}function pe({nodes:Pe}){const je=vWe(Pe,Ce=>Ce.depth)+1,Ie=(u-i-p)/(je-1),Se=new Array(je);for(const Ce of Pe){const ke=Math.max(0,Math.min(je-1,Math.floor(T.call(null,Ce,je))));Ce.layer=ke,Ce.x0=i+ke*Ie,Ce.x1=Ce.x0+p,Se[ke]?Se[ke].push(Ce):Se[ke]=[Ce]}if(_)for(const Ce of Se)Ce.sort(_);return Se}function be(Pe){const je=wWe(Pe,Ie=>(d-s-(Ie.length-1)*b)/swe(Ie,awe));for(const Ie of Pe){let Se=s;for(const Ce of Ie){Ce.y0=Se,Ce.y1=Se+Ce.value*je,Se=Ce.y1+b;for(const ke of Ce.sourceLinks)ke.width=ke.value*je}Se=(d-Se+b)/(Ie.length+1);for(let Ce=0;CeIe.length)-1)),be(je);for(let Ie=0;Ie0))continue;let gn=(Ft/Ne-Ke.y0)*je;Ke.y0+=gn,Ke.y1+=gn,W(Ke)}_===void 0&&ke.sort(RJ),de(ke,Ie)}}function se(Pe,je,Ie){for(let Se=Pe.length,Ce=Se-2;Ce>=0;--Ce){const ke=Pe[Ce];for(const Ke of ke){let Ft=0,Ne=0;for(const{target:_t,value:Et}of Ke.sourceLinks){let Gt=Et*(_t.layer-Ke.layer);Ft+=Fe(Ke,_t)*Gt,Ne+=Gt}if(!(Ne>0))continue;let gn=(Ft/Ne-Ke.y0)*je;Ke.y0+=gn,Ke.y1+=gn,W(Ke)}_===void 0&&ke.sort(RJ),de(ke,Ie)}}function de(Pe,je){const Ie=Pe.length>>1,Se=Pe[Ie];ge(Pe,Se.y0-b,Ie-1,je),X(Pe,Se.y1+b,Ie+1,je),ge(Pe,d,Pe.length-1,je),X(Pe,s,0,je)}function X(Pe,je,Ie,Se){for(;Ie1e-6&&(Ce.y0+=ke,Ce.y1+=ke),je=Ce.y1+b}}function ge(Pe,je,Ie,Se){for(;Ie>=0;--Ie){const Ce=Pe[Ie],ke=(Ce.y1-je)*Se;ke>1e-6&&(Ce.y0-=ke,Ce.y1-=ke),je=Ce.y0-b}}function W({sourceLinks:Pe,targetLinks:je}){if(A===void 0){for(const{source:{sourceLinks:Ie}}of je)Ie.sort(kWe);for(const{target:{targetLinks:Ie}}of Pe)Ie.sort(xWe)}}function xe(Pe){if(A===void 0)for(const{sourceLinks:je,targetLinks:Ie}of Pe)je.sort(kWe),Ie.sort(xWe)}function U(Pe,je){let Ie=Pe.y0-(Pe.sourceLinks.length-1)*b/2;for(const{target:Se,width:Ce}of Pe.sourceLinks){if(Se===je)break;Ie+=Ce+b}for(const{source:Se,width:Ce}of je.targetLinks){if(Se===Pe)break;Ie-=Ce}return Ie}function Fe(Pe,je){let Ie=je.y0-(je.targetLinks.length-1)*b/2;for(const{source:Se,width:Ce}of je.targetLinks){if(Se===Pe)break;Ie+=Ce+b}for(const{target:Se,width:Ce}of Pe.sourceLinks){if(Se===je)break;Ie-=Ce}return Ie}return j}var owe=Math.PI,cwe=2*owe,aS=1e-6,Gon=cwe-aS;function uwe(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function CWe(){return new uwe}uwe.prototype=CWe.prototype={constructor:uwe,moveTo:function(i,s){this._+="M"+(this._x0=this._x1=+i)+","+(this._y0=this._y1=+s)},closePath:function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(i,s){this._+="L"+(this._x1=+i)+","+(this._y1=+s)},quadraticCurveTo:function(i,s,u,d){this._+="Q"+ +i+","+ +s+","+(this._x1=+u)+","+(this._y1=+d)},bezierCurveTo:function(i,s,u,d,p,v){this._+="C"+ +i+","+ +s+","+ +u+","+ +d+","+(this._x1=+p)+","+(this._y1=+v)},arcTo:function(i,s,u,d,p){i=+i,s=+s,u=+u,d=+d,p=+p;var v=this._x1,b=this._y1,y=u-i,T=d-s,_=v-i,A=b-s,P=_*_+A*A;if(p<0)throw new Error("negative radius: "+p);if(this._x1===null)this._+="M"+(this._x1=i)+","+(this._y1=s);else if(P>aS)if(!(Math.abs(A*y-T*_)>aS)||!p)this._+="L"+(this._x1=i)+","+(this._y1=s);else{var R=u-v,F=d-b,j=y*y+T*T,K=R*R+F*F,ee=Math.sqrt(j),ie=Math.sqrt(P),oe=p*Math.tan((owe-Math.acos((j+P-K)/(2*ee*ie)))/2),pe=oe/ie,be=oe/ee;Math.abs(pe-1)>aS&&(this._+="L"+(i+pe*_)+","+(s+pe*A)),this._+="A"+p+","+p+",0,0,"+ +(A*R>_*F)+","+(this._x1=i+be*y)+","+(this._y1=s+be*T)}},arc:function(i,s,u,d,p,v){i=+i,s=+s,u=+u,v=!!v;var b=u*Math.cos(d),y=u*Math.sin(d),T=i+b,_=s+y,A=1^v,P=v?d-p:p-d;if(u<0)throw new Error("negative radius: "+u);this._x1===null?this._+="M"+T+","+_:(Math.abs(this._x1-T)>aS||Math.abs(this._y1-_)>aS)&&(this._+="L"+T+","+_),u&&(P<0&&(P=P%cwe+cwe),P>Gon?this._+="A"+u+","+u+",0,1,"+A+","+(i-b)+","+(s-y)+"A"+u+","+u+",0,1,"+A+","+(this._x1=T)+","+(this._y1=_):P>aS&&(this._+="A"+u+","+u+",0,"+ +(P>=owe)+","+A+","+(this._x1=i+u*Math.cos(p))+","+(this._y1=s+u*Math.sin(p))))},rect:function(i,s,u,d){this._+="M"+(this._x0=this._x1=+i)+","+(this._y0=this._y1=+s)+"h"+ +u+"v"+ +d+"h"+-u+"Z"},toString:function(){return this._}};function SWe(i){return function(){return i}}function Kon(i){return i[0]}function Won(i){return i[1]}var Yon=Array.prototype.slice;function Xon(i){return i.source}function Qon(i){return i.target}function Jon(i){var s=Xon,u=Qon,d=Kon,p=Won,v=null;function b(){var y,T=Yon.call(arguments),_=s.apply(this,T),A=u.apply(this,T);if(v||(v=y=CWe()),i(v,+d.apply(this,(T[0]=_,T)),+p.apply(this,T),+d.apply(this,(T[0]=A,T)),+p.apply(this,T)),y)return v=null,y+""||null}return b.source=function(y){return arguments.length?(s=y,b):s},b.target=function(y){return arguments.length?(u=y,b):u},b.x=function(y){return arguments.length?(d=typeof y=="function"?y:SWe(+y),b):d},b.y=function(y){return arguments.length?(p=typeof y=="function"?y:SWe(+y),b):p},b.context=function(y){return arguments.length?(v=y??null,b):v},b}function Zon(i,s,u,d,p){i.moveTo(s,u),i.bezierCurveTo(s=(s+d)/2,u,s,p,d,p)}function ecn(){return Jon(Zon)}function tcn(i){return[i.source.x1,i.y0]}function ncn(i){return[i.target.x0,i.y1]}function rcn(){return ecn().source(tcn).target(ncn)}const _We=class aBe{static next(s){return new aBe(s+ ++aBe.count)}constructor(s){this.id=s,this.href=`#${s}`}toString(){return"url("+this.href+")"}};_We.count=0;let AWe=_We;const icn={left:jon,right:$on,center:zon,justify:yWe},scn={draw:function(i,s,u,d){const{securityLevel:p,sankey:v}=qt(),b=Zje.sankey;let y;p==="sandbox"&&(y=Ir("#i"+s));const T=Ir(p==="sandbox"?y.nodes()[0].contentDocument.body:"body"),_=p==="sandbox"?T.select(`[id="${s}"]`):Ir(`[id="${s}"]`),A=(v==null?void 0:v.width)??b.width,P=(v==null?void 0:v.height)??b.width,R=(v==null?void 0:v.useMaxWidth)??b.useMaxWidth,F=(v==null?void 0:v.nodeAlignment)??b.nodeAlignment,j=(v==null?void 0:v.prefix)??b.prefix,K=(v==null?void 0:v.suffix)??b.suffix,ee=(v==null?void 0:v.showValues)??b.showValues,ie=d.db.getGraph(),oe=icn[F],pe=10;Uon().nodeId(ge=>ge.id).nodeWidth(pe).nodePadding(10+(ee?15:0)).nodeAlign(oe).extent([[0,0],[A,P]])(ie);const ae=_F(zFe);_.append("g").attr("class","nodes").selectAll(".node").data(ie.nodes).join("g").attr("class","node").attr("id",ge=>(ge.uid=AWe.next("node-")).id).attr("transform",function(ge){return"translate("+ge.x0+","+ge.y0+")"}).attr("x",ge=>ge.x0).attr("y",ge=>ge.y0).append("rect").attr("height",ge=>ge.y1-ge.y0).attr("width",ge=>ge.x1-ge.x0).attr("fill",ge=>ae(ge.id));const ne=({id:ge,value:W})=>ee?`${ge} +${j}${Math.round(W*100)/100}${K}`:ge;_.append("g").attr("class","node-labels").attr("font-family","sans-serif").attr("font-size",14).selectAll("text").data(ie.nodes).join("text").attr("x",ge=>ge.x0(ge.y1+ge.y0)/2).attr("dy",`${ee?"0":"0.35"}em`).attr("text-anchor",ge=>ge.x0(W.uid=AWe.next("linearGradient-")).id).attr("gradientUnits","userSpaceOnUse").attr("x1",W=>W.source.x1).attr("x2",W=>W.target.x0);ge.append("stop").attr("offset","0%").attr("stop-color",W=>ae(W.source.id)),ge.append("stop").attr("offset","100%").attr("stop-color",W=>ae(W.target.id))}let X;switch(de){case"gradient":X=ge=>ge.uid;break;case"source":X=ge=>ae(ge.source.id);break;case"target":X=ge=>ae(ge.target.id);break;default:X=de}se.append("path").attr("d",rcn()).attr("stroke",X).attr("stroke-width",ge=>Math.max(1,ge.width)),y9(void 0,_,0,R)}},acn=i=>i.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,` +`).trim(),ocn=NJ.parse.bind(NJ);NJ.parse=i=>ocn(acn(i));const ccn=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:NJ,db:Fon,renderer:scn}},Symbol.toStringTag,{value:"Module"}));var lwe=function(){var i=function(pe,be,ae,ne){for(ae=ae||{},ne=pe.length;ne--;ae[pe[ne]]=be);return ae},s=[1,7],u=[1,13],d=[1,14],p=[1,15],v=[1,19],b=[1,16],y=[1,17],T=[1,18],_=[8,30],A=[8,21,28,29,30,31,32,40,44,47],P=[1,23],R=[1,24],F=[8,15,16,21,28,29,30,31,32,40,44,47],j=[8,15,16,21,27,28,29,30,31,32,40,44,47],K=[1,49],ee={trace:function(){},yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,block:31,NODE_ID:32,nodeShapeNLabel:33,dirList:34,DIR:35,NODE_DSTART:36,NODE_DEND:37,BLOCK_ARROW_START:38,BLOCK_ARROW_END:39,classDef:40,CLASSDEF_ID:41,CLASSDEF_STYLEOPTS:42,DEFAULT:43,class:44,CLASSENTITY_IDS:45,STYLECLASS:46,style:47,STYLE_ENTITY_IDS:48,STYLE_DEFINITION_DATA:49,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"block",32:"NODE_ID",35:"DIR",36:"NODE_DSTART",37:"NODE_DEND",38:"BLOCK_ARROW_START",39:"BLOCK_ARROW_END",40:"classDef",41:"CLASSDEF_ID",42:"CLASSDEF_STYLEOPTS",43:"DEFAULT",44:"class",45:"CLASSENTITY_IDS",46:"STYLECLASS",47:"style",48:"STYLE_ENTITY_IDS",49:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[34,1],[34,2],[33,3],[33,4],[23,3],[23,3],[24,3],[25,3]],performAction:function(be,ae,ne,se,de,X,ge){var W=X.length-1;switch(de){case 4:se.getLogger().debug("Rule: separator (NL) ");break;case 5:se.getLogger().debug("Rule: separator (Space) ");break;case 6:se.getLogger().debug("Rule: separator (EOF) ");break;case 7:se.getLogger().debug("Rule: hierarchy: ",X[W-1]),se.setHierarchy(X[W-1]);break;case 8:se.getLogger().debug("Stop NL ");break;case 9:se.getLogger().debug("Stop EOF ");break;case 10:se.getLogger().debug("Stop NL2 ");break;case 11:se.getLogger().debug("Stop EOF2 ");break;case 12:se.getLogger().debug("Rule: statement: ",X[W]),typeof X[W].length=="number"?this.$=X[W]:this.$=[X[W]];break;case 13:se.getLogger().debug("Rule: statement #2: ",X[W-1]),this.$=[X[W-1]].concat(X[W]);break;case 14:se.getLogger().debug("Rule: link: ",X[W],be),this.$={edgeTypeStr:X[W],label:""};break;case 15:se.getLogger().debug("Rule: LABEL link: ",X[W-3],X[W-1],X[W]),this.$={edgeTypeStr:X[W],label:X[W-1]};break;case 18:const xe=parseInt(X[W]),U=se.generateId();this.$={id:U,type:"space",label:"",width:xe,children:[]};break;case 23:se.getLogger().debug("Rule: (nodeStatement link node) ",X[W-2],X[W-1],X[W]," typestr: ",X[W-1].edgeTypeStr);const Fe=se.edgeStrToEdgeData(X[W-1].edgeTypeStr);this.$=[{id:X[W-2].id,label:X[W-2].label,type:X[W-2].type,directions:X[W-2].directions},{id:X[W-2].id+"-"+X[W].id,start:X[W-2].id,end:X[W].id,label:X[W-1].label,type:"edge",directions:X[W].directions,arrowTypeEnd:Fe,arrowTypeStart:"arrow_open"},{id:X[W].id,label:X[W].label,type:se.typeStr2Type(X[W].typeStr),directions:X[W].directions}];break;case 24:se.getLogger().debug("Rule: nodeStatement (abc88 node size) ",X[W-1],X[W]),this.$={id:X[W-1].id,label:X[W-1].label,type:se.typeStr2Type(X[W-1].typeStr),directions:X[W-1].directions,widthInColumns:parseInt(X[W],10)};break;case 25:se.getLogger().debug("Rule: nodeStatement (node) ",X[W]),this.$={id:X[W].id,label:X[W].label,type:se.typeStr2Type(X[W].typeStr),directions:X[W].directions,widthInColumns:1};break;case 26:se.getLogger().debug("APA123",this?this:"na"),se.getLogger().debug("COLUMNS: ",X[W]),this.$={type:"column-setting",columns:X[W]==="auto"?-1:parseInt(X[W])};break;case 27:se.getLogger().debug("Rule: id-block statement : ",X[W-2],X[W-1]),se.generateId(),this.$={...X[W-2],type:"composite",children:X[W-1]};break;case 28:se.getLogger().debug("Rule: blockStatement : ",X[W-2],X[W-1],X[W]);const Pe=se.generateId();this.$={id:Pe,type:"composite",label:"",children:X[W-1]};break;case 29:se.getLogger().debug("Rule: node (NODE_ID separator): ",X[W]),this.$={id:X[W]};break;case 30:se.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",X[W-1],X[W]),this.$={id:X[W-1],label:X[W].label,typeStr:X[W].typeStr,directions:X[W].directions};break;case 31:se.getLogger().debug("Rule: dirList: ",X[W]),this.$=[X[W]];break;case 32:se.getLogger().debug("Rule: dirList: ",X[W-1],X[W]),this.$=[X[W-1]].concat(X[W]);break;case 33:se.getLogger().debug("Rule: nodeShapeNLabel: ",X[W-2],X[W-1],X[W]),this.$={typeStr:X[W-2]+X[W],label:X[W-1]};break;case 34:se.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",X[W-3],X[W-2]," #3:",X[W-1],X[W]),this.$={typeStr:X[W-3]+X[W],label:X[W-2],directions:X[W-1]};break;case 35:case 36:this.$={type:"classDef",id:X[W-1].trim(),css:X[W].trim()};break;case 37:this.$={type:"applyClass",id:X[W-1].trim(),styleClass:X[W].trim()};break;case 38:this.$={type:"applyStyles",id:X[W-1].trim(),stylesStr:X[W].trim()};break}},table:[{9:1,10:[1,2]},{1:[3]},{11:3,13:4,19:5,20:6,21:s,22:8,23:9,24:10,25:11,26:12,28:u,29:d,31:p,32:v,40:b,44:y,47:T},{8:[1,20]},i(_,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,21:s,28:u,29:d,31:p,32:v,40:b,44:y,47:T}),i(A,[2,16],{14:22,15:P,16:R}),i(A,[2,17]),i(A,[2,18]),i(A,[2,19]),i(A,[2,20]),i(A,[2,21]),i(A,[2,22]),i(F,[2,25],{27:[1,25]}),i(A,[2,26]),{19:26,26:12,32:v},{11:27,13:4,19:5,20:6,21:s,22:8,23:9,24:10,25:11,26:12,28:u,29:d,31:p,32:v,40:b,44:y,47:T},{41:[1,28],43:[1,29]},{45:[1,30]},{48:[1,31]},i(j,[2,29],{33:32,36:[1,33],38:[1,34]}),{1:[2,7]},i(_,[2,13]),{26:35,32:v},{32:[2,14]},{17:[1,36]},i(F,[2,24]),{11:37,13:4,14:22,15:P,16:R,19:5,20:6,21:s,22:8,23:9,24:10,25:11,26:12,28:u,29:d,31:p,32:v,40:b,44:y,47:T},{30:[1,38]},{42:[1,39]},{42:[1,40]},{46:[1,41]},{49:[1,42]},i(j,[2,30]),{18:[1,43]},{18:[1,44]},i(F,[2,23]),{18:[1,45]},{30:[1,46]},i(A,[2,28]),i(A,[2,35]),i(A,[2,36]),i(A,[2,37]),i(A,[2,38]),{37:[1,47]},{34:48,35:K},{15:[1,50]},i(A,[2,27]),i(j,[2,33]),{39:[1,51]},{34:52,35:K,39:[2,31]},{32:[2,15]},i(j,[2,34]),{39:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:function(be,ae){if(ae.recoverable)this.trace(be);else{var ne=new Error(be);throw ne.hash=ae,ne}},parse:function(be){var ae=this,ne=[0],se=[],de=[null],X=[],ge=this.table,W="",xe=0,U=0,Fe=2,Pe=1,je=X.slice.call(arguments,1),Ie=Object.create(this.lexer),Se={yy:{}};for(var Ce in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ce)&&(Se.yy[Ce]=this.yy[Ce]);Ie.setInput(be,Se.yy),Se.yy.lexer=Ie,Se.yy.parser=this,typeof Ie.yylloc>"u"&&(Ie.yylloc={});var ke=Ie.yylloc;X.push(ke);var Ke=Ie.options&&Ie.options.ranges;typeof Se.yy.parseError=="function"?this.parseError=Se.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ft(){var kt;return kt=se.pop()||Ie.lex()||Pe,typeof kt!="number"&&(kt instanceof Array&&(se=kt,kt=se.pop()),kt=ae.symbols_[kt]||kt),kt}for(var Ne,gn,_t,Et,Gt={},ln,xt,Pt,Qe;;){if(gn=ne[ne.length-1],this.defaultActions[gn]?_t=this.defaultActions[gn]:((Ne===null||typeof Ne>"u")&&(Ne=Ft()),_t=ge[gn]&&ge[gn][Ne]),typeof _t>"u"||!_t.length||!_t[0]){var Dt="";Qe=[];for(ln in ge[gn])this.terminals_[ln]&&ln>Fe&&Qe.push("'"+this.terminals_[ln]+"'");Ie.showPosition?Dt="Parse error on line "+(xe+1)+`: +`+Ie.showPosition()+` +Expecting `+Qe.join(", ")+", got '"+(this.terminals_[Ne]||Ne)+"'":Dt="Parse error on line "+(xe+1)+": Unexpected "+(Ne==Pe?"end of input":"'"+(this.terminals_[Ne]||Ne)+"'"),this.parseError(Dt,{text:Ie.match,token:this.terminals_[Ne]||Ne,line:Ie.yylineno,loc:ke,expected:Qe})}if(_t[0]instanceof Array&&_t.length>1)throw new Error("Parse Error: multiple actions possible at state: "+gn+", token: "+Ne);switch(_t[0]){case 1:ne.push(Ne),de.push(Ie.yytext),X.push(Ie.yylloc),ne.push(_t[1]),Ne=null,U=Ie.yyleng,W=Ie.yytext,xe=Ie.yylineno,ke=Ie.yylloc;break;case 2:if(xt=this.productions_[_t[1]][1],Gt.$=de[de.length-xt],Gt._$={first_line:X[X.length-(xt||1)].first_line,last_line:X[X.length-1].last_line,first_column:X[X.length-(xt||1)].first_column,last_column:X[X.length-1].last_column},Ke&&(Gt._$.range=[X[X.length-(xt||1)].range[0],X[X.length-1].range[1]]),Et=this.performAction.apply(Gt,[W,U,xe,Se.yy,_t[1],de,X].concat(je)),typeof Et<"u")return Et;xt&&(ne=ne.slice(0,-1*xt*2),de=de.slice(0,-1*xt),X=X.slice(0,-1*xt)),ne.push(this.productions_[_t[1]][0]),de.push(Gt.$),X.push(Gt._$),Pt=ge[ne[ne.length-2]][ne[ne.length-1]],ne.push(Pt);break;case 3:return!0}}return!0}},ie=function(){var pe={EOF:1,parseError:function(ae,ne){if(this.yy.parser)this.yy.parser.parseError(ae,ne);else throw new Error(ae)},setInput:function(be,ae){return this.yy=ae||this.yy||{},this._input=be,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var be=this._input[0];this.yytext+=be,this.yyleng++,this.offset++,this.match+=be,this.matched+=be;var ae=be.match(/(?:\r\n?|\n).*/g);return ae?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),be},unput:function(be){var ae=be.length,ne=be.split(/(?:\r\n?|\n)/g);this._input=be+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ae),this.offset-=ae;var se=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ne.length-1&&(this.yylineno-=ne.length-1);var de=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ne?(ne.length===se.length?this.yylloc.first_column:0)+se[se.length-ne.length].length-ne[0].length:this.yylloc.first_column-ae},this.options.ranges&&(this.yylloc.range=[de[0],de[0]+this.yyleng-ae]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(be){this.unput(this.match.slice(be))},pastInput:function(){var be=this.matched.substr(0,this.matched.length-this.match.length);return(be.length>20?"...":"")+be.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var be=this.match;return be.length<20&&(be+=this._input.substr(0,20-be.length)),(be.substr(0,20)+(be.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var be=this.pastInput(),ae=new Array(be.length+1).join("-");return be+this.upcomingInput()+` +`+ae+"^"},test_match:function(be,ae){var ne,se,de;if(this.options.backtrack_lexer&&(de={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(de.yylloc.range=this.yylloc.range.slice(0))),se=be[0].match(/(?:\r\n?|\n).*/g),se&&(this.yylineno+=se.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:se?se[se.length-1].length-se[se.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+be[0].length},this.yytext+=be[0],this.match+=be[0],this.matches=be,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(be[0].length),this.matched+=be[0],ne=this.performAction.call(this,this.yy,this,ae,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ne)return ne;if(this._backtrack){for(var X in de)this[X]=de[X];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var be,ae,ne,se;this._more||(this.yytext="",this.match="");for(var de=this._currentRules(),X=0;Xae[0].length)){if(ae=ne,se=X,this.options.backtrack_lexer){if(be=this.test_match(ne,de[X]),be!==!1)return be;if(this._backtrack){ae=!1;continue}else return!1}else if(!this.options.flex)break}return ae?(be=this.test_match(ae,de[se]),be!==!1?be:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var ae=this.next();return ae||this.lex()},begin:function(ae){this.conditionStack.push(ae)},popState:function(){var ae=this.conditionStack.length-1;return ae>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(ae){return ae=this.conditionStack.length-1-Math.abs(ae||0),ae>=0?this.conditionStack[ae]:"INITIAL"},pushState:function(ae){this.begin(ae)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(ae,ne,se,de){switch(se){case 0:return 10;case 1:return ae.getLogger().debug("Found space-block"),31;case 2:return ae.getLogger().debug("Found nl-block"),31;case 3:return ae.getLogger().debug("Found space-block"),29;case 4:ae.getLogger().debug(".",ne.yytext);break;case 5:ae.getLogger().debug("_",ne.yytext);break;case 6:return 5;case 7:return ne.yytext=-1,28;case 8:return ne.yytext=ne.yytext.replace(/columns\s+/,""),ae.getLogger().debug("COLUMNS (LEX)",ne.yytext),28;case 9:this.pushState("md_string");break;case 10:return"MD_STR";case 11:this.popState();break;case 12:this.pushState("string");break;case 13:ae.getLogger().debug("LEX: POPPING STR:",ne.yytext),this.popState();break;case 14:return ae.getLogger().debug("LEX: STR end:",ne.yytext),"STR";case 15:return ne.yytext=ne.yytext.replace(/space\:/,""),ae.getLogger().debug("SPACE NUM (LEX)",ne.yytext),21;case 16:return ne.yytext="1",ae.getLogger().debug("COLUMNS (LEX)",ne.yytext),21;case 17:return 43;case 18:return"LINKSTYLE";case 19:return"INTERPOLATE";case 20:return this.pushState("CLASSDEF"),40;case 21:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 22:return this.popState(),this.pushState("CLASSDEFID"),41;case 23:return this.popState(),42;case 24:return this.pushState("CLASS"),44;case 25:return this.popState(),this.pushState("CLASS_STYLE"),45;case 26:return this.popState(),46;case 27:return this.pushState("STYLE_STMNT"),47;case 28:return this.popState(),this.pushState("STYLE_DEFINITION"),48;case 29:return this.popState(),49;case 30:return this.pushState("acc_title"),"acc_title";case 31:return this.popState(),"acc_title_value";case 32:return this.pushState("acc_descr"),"acc_descr";case 33:return this.popState(),"acc_descr_value";case 34:this.pushState("acc_descr_multiline");break;case 35:this.popState();break;case 36:return"acc_descr_multiline_value";case 37:return 30;case 38:return this.popState(),ae.getLogger().debug("Lex: (("),"NODE_DEND";case 39:return this.popState(),ae.getLogger().debug("Lex: (("),"NODE_DEND";case 40:return this.popState(),ae.getLogger().debug("Lex: ))"),"NODE_DEND";case 41:return this.popState(),ae.getLogger().debug("Lex: (("),"NODE_DEND";case 42:return this.popState(),ae.getLogger().debug("Lex: (("),"NODE_DEND";case 43:return this.popState(),ae.getLogger().debug("Lex: (-"),"NODE_DEND";case 44:return this.popState(),ae.getLogger().debug("Lex: -)"),"NODE_DEND";case 45:return this.popState(),ae.getLogger().debug("Lex: (("),"NODE_DEND";case 46:return this.popState(),ae.getLogger().debug("Lex: ]]"),"NODE_DEND";case 47:return this.popState(),ae.getLogger().debug("Lex: ("),"NODE_DEND";case 48:return this.popState(),ae.getLogger().debug("Lex: ])"),"NODE_DEND";case 49:return this.popState(),ae.getLogger().debug("Lex: /]"),"NODE_DEND";case 50:return this.popState(),ae.getLogger().debug("Lex: /]"),"NODE_DEND";case 51:return this.popState(),ae.getLogger().debug("Lex: )]"),"NODE_DEND";case 52:return this.popState(),ae.getLogger().debug("Lex: )"),"NODE_DEND";case 53:return this.popState(),ae.getLogger().debug("Lex: ]>"),"NODE_DEND";case 54:return this.popState(),ae.getLogger().debug("Lex: ]"),"NODE_DEND";case 55:return ae.getLogger().debug("Lexa: -)"),this.pushState("NODE"),36;case 56:return ae.getLogger().debug("Lexa: (-"),this.pushState("NODE"),36;case 57:return ae.getLogger().debug("Lexa: ))"),this.pushState("NODE"),36;case 58:return ae.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 59:return ae.getLogger().debug("Lex: ((("),this.pushState("NODE"),36;case 60:return ae.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 61:return ae.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 62:return ae.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 63:return ae.getLogger().debug("Lexc: >"),this.pushState("NODE"),36;case 64:return ae.getLogger().debug("Lexa: (["),this.pushState("NODE"),36;case 65:return ae.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 66:return this.pushState("NODE"),36;case 67:return this.pushState("NODE"),36;case 68:return this.pushState("NODE"),36;case 69:return this.pushState("NODE"),36;case 70:return this.pushState("NODE"),36;case 71:return this.pushState("NODE"),36;case 72:return this.pushState("NODE"),36;case 73:return ae.getLogger().debug("Lexa: ["),this.pushState("NODE"),36;case 74:return this.pushState("BLOCK_ARROW"),ae.getLogger().debug("LEX ARR START"),38;case 75:return ae.getLogger().debug("Lex: NODE_ID",ne.yytext),32;case 76:return ae.getLogger().debug("Lex: EOF",ne.yytext),8;case 77:this.pushState("md_string");break;case 78:this.pushState("md_string");break;case 79:return"NODE_DESCR";case 80:this.popState();break;case 81:ae.getLogger().debug("Lex: Starting string"),this.pushState("string");break;case 82:ae.getLogger().debug("LEX ARR: Starting string"),this.pushState("string");break;case 83:return ae.getLogger().debug("LEX: NODE_DESCR:",ne.yytext),"NODE_DESCR";case 84:ae.getLogger().debug("LEX POPPING"),this.popState();break;case 85:ae.getLogger().debug("Lex: =>BAE"),this.pushState("ARROW_DIR");break;case 86:return ne.yytext=ne.yytext.replace(/^,\s*/,""),ae.getLogger().debug("Lex (right): dir:",ne.yytext),"DIR";case 87:return ne.yytext=ne.yytext.replace(/^,\s*/,""),ae.getLogger().debug("Lex (left):",ne.yytext),"DIR";case 88:return ne.yytext=ne.yytext.replace(/^,\s*/,""),ae.getLogger().debug("Lex (x):",ne.yytext),"DIR";case 89:return ne.yytext=ne.yytext.replace(/^,\s*/,""),ae.getLogger().debug("Lex (y):",ne.yytext),"DIR";case 90:return ne.yytext=ne.yytext.replace(/^,\s*/,""),ae.getLogger().debug("Lex (up):",ne.yytext),"DIR";case 91:return ne.yytext=ne.yytext.replace(/^,\s*/,""),ae.getLogger().debug("Lex (down):",ne.yytext),"DIR";case 92:return ne.yytext="]>",ae.getLogger().debug("Lex (ARROW_DIR end):",ne.yytext),this.popState(),this.popState(),"BLOCK_ARROW_END";case 93:return ae.getLogger().debug("Lex: LINK","#"+ne.yytext+"#"),15;case 94:return ae.getLogger().debug("Lex: LINK",ne.yytext),15;case 95:return ae.getLogger().debug("Lex: LINK",ne.yytext),15;case 96:return ae.getLogger().debug("Lex: LINK",ne.yytext),15;case 97:return ae.getLogger().debug("Lex: START_LINK",ne.yytext),this.pushState("LLABEL"),16;case 98:return ae.getLogger().debug("Lex: START_LINK",ne.yytext),this.pushState("LLABEL"),16;case 99:return ae.getLogger().debug("Lex: START_LINK",ne.yytext),this.pushState("LLABEL"),16;case 100:this.pushState("md_string");break;case 101:return ae.getLogger().debug("Lex: Starting string"),this.pushState("string"),"LINK_LABEL";case 102:return this.popState(),ae.getLogger().debug("Lex: LINK","#"+ne.yytext+"#"),15;case 103:return this.popState(),ae.getLogger().debug("Lex: LINK",ne.yytext),15;case 104:return this.popState(),ae.getLogger().debug("Lex: LINK",ne.yytext),15;case 105:return ae.getLogger().debug("Lex: COLON",ne.yytext),ne.yytext=ne.yytext.slice(1),27}},rules:[/^(?:block-beta\b)/,/^(?:block\s+)/,/^(?:block\n+)/,/^(?:block:)/,/^(?:[\s]+)/,/^(?:[\n]+)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:columns\s+auto\b)/,/^(?:columns\s+[\d]+)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:space[:]\d+)/,/^(?:space\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\s+)/,/^(?:DEFAULT\s+)/,/^(?:\w+\s+)/,/^(?:[^\n]*)/,/^(?:class\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:style\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:end\b\s*)/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:[\)]\))/,/^(?:\}\})/,/^(?:\})/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\()/,/^(?:\]\])/,/^(?:\()/,/^(?:\]\))/,/^(?:\\\])/,/^(?:\/\])/,/^(?:\)\])/,/^(?:[\)])/,/^(?:\]>)/,/^(?:[\]])/,/^(?:-\))/,/^(?:\(-)/,/^(?:\)\))/,/^(?:\))/,/^(?:\(\(\()/,/^(?:\(\()/,/^(?:\{\{)/,/^(?:\{)/,/^(?:>)/,/^(?:\(\[)/,/^(?:\()/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\[\\)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:\[)/,/^(?:<\[)/,/^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/,/^(?:$)/,/^(?:["][`])/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:\]>\s*\()/,/^(?:,?\s*right\s*)/,/^(?:,?\s*left\s*)/,/^(?:,?\s*x\s*)/,/^(?:,?\s*y\s*)/,/^(?:,?\s*up\s*)/,/^(?:,?\s*down\s*)/,/^(?:\)\s*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:["][`])/,/^(?:["])/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?::\d+)/],conditions:{STYLE_DEFINITION:{rules:[29],inclusive:!1},STYLE_STMNT:{rules:[28],inclusive:!1},CLASSDEFID:{rules:[23],inclusive:!1},CLASSDEF:{rules:[21,22],inclusive:!1},CLASS_STYLE:{rules:[26],inclusive:!1},CLASS:{rules:[25],inclusive:!1},LLABEL:{rules:[100,101,102,103,104],inclusive:!1},ARROW_DIR:{rules:[86,87,88,89,90,91,92],inclusive:!1},BLOCK_ARROW:{rules:[77,82,85],inclusive:!1},NODE:{rules:[38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,78,81],inclusive:!1},md_string:{rules:[10,11,79,80],inclusive:!1},space:{rules:[],inclusive:!1},string:{rules:[13,14,83,84],inclusive:!1},acc_descr_multiline:{rules:[35,36],inclusive:!1},acc_descr:{rules:[33],inclusive:!1},acc_title:{rules:[31],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,12,15,16,17,18,19,20,24,27,30,32,34,37,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,93,94,95,96,97,98,99,105],inclusive:!0}}};return pe}();ee.lexer=ie;function oe(){this.yy={}}return oe.prototype=ee,ee.Parser=oe,new oe}();lwe.parser=lwe;const ucn=lwe;let U2={},hwe=[],ij={};const LWe="color",MWe="fill",lcn="bgFill",DWe=",",hcn=qt();let sj={};const fcn=i=>ci.sanitizeText(i,hcn),dcn=function(i,s=""){sj[i]===void 0&&(sj[i]={id:i,styles:[],textStyles:[]});const u=sj[i];s!=null&&s.split(DWe).forEach(d=>{const p=d.replace(/([^;]*);/,"$1").trim();if(d.match(LWe)){const b=p.replace(MWe,lcn).replace(LWe,MWe);u.textStyles.push(b)}u.styles.push(p)})},gcn=function(i,s=""){const u=U2[i];s!=null&&(u.styles=s.split(DWe))},pcn=function(i,s){i.split(",").forEach(function(u){let d=U2[u];if(d===void 0){const p=u.trim();U2[p]={id:p,type:"na",children:[]},d=U2[p]}d.classes||(d.classes=[]),d.classes.push(s)})},IWe=(i,s)=>{const u=i.flat(),d=[];for(const p of u){if(p.label&&(p.label=fcn(p.label)),p.type==="classDef"){dcn(p.id,p.css);continue}if(p.type==="applyClass"){pcn(p.id,(p==null?void 0:p.styleClass)||"");continue}if(p.type==="applyStyles"){p!=null&&p.stylesStr&&gcn(p.id,p==null?void 0:p.stylesStr);continue}if(p.type==="column-setting")s.columns=p.columns||-1;else if(p.type==="edge")ij[p.id]?ij[p.id]++:ij[p.id]=1,p.id=ij[p.id]+"-"+p.id,hwe.push(p);else{p.label||(p.type==="composite"?p.label="":p.label=p.id);const v=!U2[p.id];if(v?U2[p.id]=p:(p.type!=="na"&&(U2[p.id].type=p.type),p.label!==p.id&&(U2[p.id].label=p.label)),p.children&&IWe(p.children,p),p.type==="space"){const b=p.width||1;for(let y=0;y{Xe.debug("Clear called"),Pg(),aj={id:"root",type:"composite",children:[],columns:-1},U2={root:aj},fwe=[],sj={},hwe=[],ij={}};function mcn(i){switch(Xe.debug("typeStr2Type",i),i){case"[]":return"square";case"()":return Xe.debug("we have a round"),"round";case"(())":return"circle";case">]":return"rect_left_inv_arrow";case"{}":return"diamond";case"{{}}":return"hexagon";case"([])":return"stadium";case"[[]]":return"subroutine";case"[()]":return"cylinder";case"((()))":return"doublecircle";case"[//]":return"lean_right";case"[\\\\]":return"lean_left";case"[/\\]":return"trapezoid";case"[\\/]":return"inv_trapezoid";case"<[]>":return"block_arrow";default:return"na"}}function vcn(i){switch(Xe.debug("typeStr2Type",i),i){case"==":return"thick";default:return"normal"}}function wcn(i){switch(i.trim()){case"--x":return"arrow_cross";case"--o":return"arrow_circle";default:return"arrow_point"}}let OWe=0;const ycn={getConfig:()=>Vh().block,typeStr2Type:mcn,edgeTypeStr2Type:vcn,edgeStrToEdgeData:wcn,getLogger:()=>console,getBlocksFlat:()=>[...Object.values(U2)],getBlocks:()=>fwe||[],getEdges:()=>hwe,setHierarchy:i=>{aj.children=i,IWe(i,aj),fwe=aj.children},getBlock:i=>U2[i],setBlock:i=>{U2[i.id]=i},getColumns:i=>{const s=U2[i];return s?s.columns?s.columns:s.children?s.children.length:-1:-1},getClasses:function(){return sj},clear:bcn,generateId:()=>(OWe++,"id-"+Math.random().toString(36).substr(2,12)+"-"+OWe)},jJ=(i,s)=>{const u=ARe,d=u(i,"r"),p=u(i,"g"),v=u(i,"b");return SC(d,p,v,s)},xcn=i=>`.label { + font-family: ${i.fontFamily}; + color: ${i.nodeTextColor||i.textColor}; + } + .cluster-label text { + fill: ${i.titleColor}; + } + .cluster-label span,p { + color: ${i.titleColor}; + } + + + + .label text,span,p { + fill: ${i.nodeTextColor||i.textColor}; + color: ${i.nodeTextColor||i.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${i.mainBkg}; + stroke: ${i.nodeBorder}; + stroke-width: 1px; + } + .flowchart-label text { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${i.arrowheadColor}; + } + + .edgePath .path { + stroke: ${i.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${i.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${i.edgeLabelBackground}; + rect { + opacity: 0.5; + background-color: ${i.edgeLabelBackground}; + fill: ${i.edgeLabelBackground}; + } + text-align: center; + } + + /* For html labels only */ + .labelBkg { + background-color: ${jJ(i.edgeLabelBackground,.5)}; + // background-color: + } + + .node .cluster { + // fill: ${jJ(i.mainBkg,.5)}; + fill: ${jJ(i.clusterBkg,.5)}; + stroke: ${jJ(i.clusterBorder,.2)}; + box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; + stroke-width: 1px; + } + + .cluster text { + fill: ${i.titleColor}; + } + + .cluster span,p { + color: ${i.titleColor}; + } + /* .cluster div { + color: ${i.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${i.fontFamily}; + font-size: 12px; + background: ${i.tertiaryColor}; + border: 1px solid ${i.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${i.textColor}; + } +`;function NWe(i,s,u=!1){var R,F,j;const d=i;let p="default";(((R=d==null?void 0:d.classes)==null?void 0:R.length)||0)>0&&(p=((d==null?void 0:d.classes)||[]).join(" ")),p=p+" flowchart-label";let v=0,b="",y;switch(d.type){case"round":v=5,b="rect";break;case"composite":v=0,b="composite",y=0;break;case"square":b="rect";break;case"diamond":b="question";break;case"hexagon":b="hexagon";break;case"block_arrow":b="block_arrow";break;case"odd":b="rect_left_inv_arrow";break;case"lean_right":b="lean_right";break;case"lean_left":b="lean_left";break;case"trapezoid":b="trapezoid";break;case"inv_trapezoid":b="inv_trapezoid";break;case"rect_left_inv_arrow":b="rect_left_inv_arrow";break;case"circle":b="circle";break;case"ellipse":b="ellipse";break;case"stadium":b="stadium";break;case"subroutine":b="subroutine";break;case"cylinder":b="cylinder";break;case"group":b="rect";break;case"doublecircle":b="doublecircle";break;default:b="rect"}const T=om((d==null?void 0:d.styles)||[]),_=d.label,A=d.size||{width:0,height:0,x:0,y:0};return{labelStyle:T.labelStyle,shape:b,labelText:_,rx:v,ry:v,class:p,style:T.style,id:d.id,directions:d.directions,width:A.width,height:A.height,x:A.x,y:A.y,positioned:u,intersect:void 0,type:d.type,padding:y??(((j=(F=Vh())==null?void 0:F.block)==null?void 0:j.padding)||0)}}async function kcn(i,s,u){const d=NWe(s,u,!1);if(d.type==="group")return;const p=await tJ(i,d),v=p.node().getBBox(),b=u.getBlock(d.id);b.size={width:v.width,height:v.height,x:0,y:0,node:p},u.setBlock(b),p.remove()}async function Ecn(i,s,u){const d=NWe(s,u,!0);u.getBlock(d.id).type!=="space"&&(await tJ(i,d),s.intersect=d==null?void 0:d.intersect,$me(d))}async function dwe(i,s,u,d){for(const p of s)await d(i,p,u),p.children&&await dwe(i,p.children,u,d)}async function Tcn(i,s,u){await dwe(i,s,u,kcn)}async function Ccn(i,s,u){await dwe(i,s,u,Ecn)}async function Scn(i,s,u,d,p){const v=new B0({multigraph:!0,compound:!0});v.setGraph({rankdir:"TB",nodesep:10,ranksep:10,marginx:8,marginy:8});for(const b of u)b.size&&v.setNode(b.id,{width:b.size.width,height:b.size.height,intersect:b.intersect});for(const b of s)if(b.start&&b.end){const y=d.getBlock(b.start),T=d.getBlock(b.end);if(y!=null&&y.size&&(T!=null&&T.size)){const _=y.size,A=T.size,P=[{x:_.x,y:_.y},{x:_.x+(A.x-_.x)/2,y:_.y+(A.y-_.y)/2},{x:A.x,y:A.y}];await IUe(i,{v:b.start,w:b.end,name:b.id},{...b,arrowTypeEnd:b.arrowTypeEnd,arrowTypeStart:b.arrowTypeStart,points:P,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"},void 0,"block",v,p),b.label&&(await zme(i,{...b,label:b.label,labelStyle:"stroke: #333; stroke-width: 1.5px;fill:none;",arrowTypeEnd:b.arrowTypeEnd,arrowTypeStart:b.arrowTypeStart,points:P,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"}),await MUe({...b,x:P[1].x,y:P[1].y},{originalPath:P}))}}}const e0=((RWe=(FWe=qt())==null?void 0:FWe.block)==null?void 0:RWe.padding)||8;function _cn(i,s){if(i===0||!Number.isInteger(i))throw new Error("Columns must be an integer !== 0.");if(s<0||!Number.isInteger(s))throw new Error("Position must be a non-negative integer."+s);if(i<0)return{px:s,py:0};if(i===1)return{px:0,py:s};const u=s%i,d=Math.floor(s/i);return{px:u,py:d}}const Acn=i=>{let s=0,u=0;for(const d of i.children){const{width:p,height:v,x:b,y}=d.size||{width:0,height:0,x:0,y:0};Xe.debug("getMaxChildSize abc95 child:",d.id,"width:",p,"height:",v,"x:",b,"y:",y,d.type),d.type!=="space"&&(p>s&&(s=p/(i.widthInColumns||1)),v>u&&(u=v))}return{width:s,height:u}};function gwe(i,s,u=0,d=0){var b,y,T,_,A,P,R,F,j,K,ee;Xe.debug("setBlockSizes abc95 (start)",i.id,(b=i==null?void 0:i.size)==null?void 0:b.x,"block width =",i==null?void 0:i.size,"sieblingWidth",u),(y=i==null?void 0:i.size)!=null&&y.width||(i.size={width:u,height:d,x:0,y:0});let p=0,v=0;if(((T=i.children)==null?void 0:T.length)>0){for(const de of i.children)gwe(de,s);const ie=Acn(i);p=ie.width,v=ie.height,Xe.debug("setBlockSizes abc95 maxWidth of",i.id,":s children is ",p,v);for(const de of i.children)de.size&&(Xe.debug(`abc95 Setting size of children of ${i.id} id=${de.id} ${p} ${v} ${de.size}`),de.size.width=p*(de.widthInColumns||1)+e0*((de.widthInColumns||1)-1),de.size.height=v,de.size.x=0,de.size.y=0,Xe.debug(`abc95 updating size of ${i.id} children child:${de.id} maxWidth:${p} maxHeight:${v}`));for(const de of i.children)gwe(de,s,p,v);const oe=i.columns||-1;let pe=0;for(const de of i.children)pe+=de.widthInColumns||1;let be=i.children.length;oe>0&&oe0?Math.min(i.children.length,oe):i.children.length;if(de>0){const X=(ne-de*e0-e0)/de;Xe.debug("abc95 (growing to fit) width",i.id,ne,(R=i.size)==null?void 0:R.width,X);for(const ge of i.children)ge.size&&(ge.size.width=X)}}i.size={width:ne,height:se,x:0,y:0}}Xe.debug("setBlockSizes abc94 (done)",i.id,(F=i==null?void 0:i.size)==null?void 0:F.x,(j=i==null?void 0:i.size)==null?void 0:j.width,(K=i==null?void 0:i.size)==null?void 0:K.y,(ee=i==null?void 0:i.size)==null?void 0:ee.height)}function PWe(i,s){var d,p,v,b,y,T,_,A,P,R,F,j,K,ee,ie,oe,pe;Xe.debug(`abc85 layout blocks (=>layoutBlocks) ${i.id} x: ${(d=i==null?void 0:i.size)==null?void 0:d.x} y: ${(p=i==null?void 0:i.size)==null?void 0:p.y} width: ${(v=i==null?void 0:i.size)==null?void 0:v.width}`);const u=i.columns||-1;if(Xe.debug("layoutBlocks columns abc95",i.id,"=>",u,i),i.children&&i.children.length>0){const be=((y=(b=i==null?void 0:i.children[0])==null?void 0:b.size)==null?void 0:y.width)||0,ae=i.children.length*be+(i.children.length-1)*e0;Xe.debug("widthOfChildren 88",ae,"posX");let ne=0;Xe.debug("abc91 block?.size?.x",i.id,(T=i==null?void 0:i.size)==null?void 0:T.x);let se=(_=i==null?void 0:i.size)!=null&&_.x?((A=i==null?void 0:i.size)==null?void 0:A.x)+(-((P=i==null?void 0:i.size)==null?void 0:P.width)/2||0):-e0,de=0;for(const X of i.children){const ge=i;if(!X.size)continue;const{width:W,height:xe}=X.size,{px:U,py:Fe}=_cn(u,ne);if(Fe!=de&&(de=Fe,se=(R=i==null?void 0:i.size)!=null&&R.x?((F=i==null?void 0:i.size)==null?void 0:F.x)+(-((j=i==null?void 0:i.size)==null?void 0:j.width)/2||0):-e0,Xe.debug("New row in layout for block",i.id," and child ",X.id,de)),Xe.debug(`abc89 layout blocks (child) id: ${X.id} Pos: ${ne} (px, py) ${U},${Fe} (${(K=ge==null?void 0:ge.size)==null?void 0:K.x},${(ee=ge==null?void 0:ge.size)==null?void 0:ee.y}) parent: ${ge.id} width: ${W}${e0}`),ge.size){const Pe=W/2;X.size.x=se+e0+Pe,Xe.debug(`abc91 layout blocks (calc) px, pyid:${X.id} startingPos=X${se} new startingPosX${X.size.x} ${Pe} padding=${e0} width=${W} halfWidth=${Pe} => x:${X.size.x} y:${X.size.y} ${X.widthInColumns} (width * (child?.w || 1)) / 2 ${W*((X==null?void 0:X.widthInColumns)||1)/2}`),se=X.size.x+Pe,X.size.y=ge.size.y-ge.size.height/2+Fe*(xe+e0)+xe/2+e0,Xe.debug(`abc88 layout blocks (calc) px, pyid:${X.id}startingPosX${se}${e0}${Pe}=>x:${X.size.x}y:${X.size.y}${X.widthInColumns}(width * (child?.w || 1)) / 2${W*((X==null?void 0:X.widthInColumns)||1)/2}`)}X.children&&PWe(X),ne+=(X==null?void 0:X.widthInColumns)||1,Xe.debug("abc88 columnsPos",X,ne)}}Xe.debug(`layout blocks (<==layoutBlocks) ${i.id} x: ${(ie=i==null?void 0:i.size)==null?void 0:ie.x} y: ${(oe=i==null?void 0:i.size)==null?void 0:oe.y} width: ${(pe=i==null?void 0:i.size)==null?void 0:pe.width}`)}function BWe(i,{minX:s,minY:u,maxX:d,maxY:p}={minX:0,minY:0,maxX:0,maxY:0}){if(i.size&&i.id!=="root"){const{x:v,y:b,width:y,height:T}=i.size;v-y/2d&&(d=v+y/2),b+T/2>p&&(p=b+T/2)}if(i.children)for(const v of i.children)({minX:s,minY:u,maxX:d,maxY:p}=BWe(v,{minX:s,minY:u,maxX:d,maxY:p}));return{minX:s,minY:u,maxX:d,maxY:p}}function Lcn(i){const s=i.getBlock("root");if(!s)return;gwe(s,i,0,0),PWe(s),Xe.debug("getBlocks",JSON.stringify(s,null,2));const{minX:u,minY:d,maxX:p,maxY:v}=BWe(s),b=v-d,y=p-u;return{x:u,y:d,width:y,height:b}}const Mcn=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:ucn,db:ycn,renderer:{draw:async function(i,s,u,d){const{securityLevel:p,block:v}=Vh(),b=d.db;let y;p==="sandbox"&&(y=Ir("#i"+s));const T=Ir(p==="sandbox"?y.nodes()[0].contentDocument.body:"body"),_=p==="sandbox"?T.select(`[id="${s}"]`):Ir(`[id="${s}"]`);Sme(_,["point","circle","cross"],d.type,s);const P=b.getBlocks(),R=b.getBlocksFlat(),F=b.getEdges(),j=_.insert("g").attr("class","block");await Tcn(j,P,b);const K=Lcn(b);if(await Ccn(j,P,b),await Scn(j,F,R,b,s),K){const ee=K,ie=Math.max(1,Math.round(.125*(ee.width/ee.height))),oe=ee.height+ie+10,pe=ee.width+10,{useMaxWidth:be}=v;Ng(_,oe,pe,!!be),Xe.debug("Here Bounds",K,ee),_.attr("viewBox",`${ee.x-5} ${ee.y-5} ${ee.width+10} ${ee.height+10}`)}_F(zFe)},getClasses:function(i,s){return s.db.getClasses()}},styles:xcn}},Symbol.toStringTag,{value:"Module"}));return um}); diff --git a/packages/renderer/package.json b/packages/renderer/package.json index 3470228fe..44bb96009 100644 --- a/packages/renderer/package.json +++ b/packages/renderer/package.json @@ -51,7 +51,7 @@ "markdown-it-sup": "1.0.0", "markdown-it-toc-done-right": "4.2.0", "md5": "2.3.0", - "mermaid": "10.6.1" + "mermaid": "10.9.1" }, "gitHead": "05a29b450962bf05a8642bbd39446a1f679a96ba" } diff --git a/yarn.lock b/yarn.lock index 338b25f91..fe543cfa2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7066,7 +7066,7 @@ __metadata: markdown-it-sup: 1.0.0 markdown-it-toc-done-right: 4.2.0 md5: 2.3.0 - mermaid: 10.6.1 + mermaid: 10.9.1 ts-jest: 29.1.1 typescript: 5.2.2 languageName: unknown @@ -17783,6 +17783,13 @@ __metadata: languageName: node linkType: hard +"cytoscape@npm:^3.28.1": + version: 3.29.2 + resolution: "cytoscape@npm:3.29.2" + checksum: f42d9dc4e0791b1909d617c0f62fc9a982967362af8d585d4a42b9933887bea697be73d5d94d7bbaae5edccad2ac665dc46a2489271408d64b4fb2dc4ece3c15 + languageName: node + linkType: hard + "d3-array@npm:1 - 2": version: 2.12.1 resolution: "d3-array@npm:2.12.1" @@ -19780,6 +19787,13 @@ __metadata: languageName: node linkType: hard +"elkjs@npm:^0.9.0": + version: 0.9.3 + resolution: "elkjs@npm:0.9.3" + checksum: 1293e42e0ea034b39d3719f3816b7b3cbaceb52a3114f2c1bd5ddd969bb1e36ae0afef58e77864fff7a1018dc5e96c177e9b0a40c16e4aaac26eb87f5785be4b + languageName: node + linkType: hard + "elliptic@npm:^6.5.3": version: 6.5.4 resolution: "elliptic@npm:6.5.4" @@ -27816,6 +27830,17 @@ __metadata: languageName: node linkType: hard +"katex@npm:^0.16.9": + version: 0.16.10 + resolution: "katex@npm:0.16.10" + dependencies: + commander: ^8.3.0 + bin: + katex: cli.js + checksum: 108e9d810e17840c43eef8d46171096f4cc97852bfd1e2dd1890d9b3435846816e3e98678a31d38bd064eb97eea83b18ff224cb65d5f9511b54ce7ff4359b591 + languageName: node + linkType: hard + "keygrip@npm:~1.1.0": version: 1.1.0 resolution: "keygrip@npm:1.1.0" @@ -29531,22 +29556,22 @@ __metadata: languageName: node linkType: hard -"mermaid@npm:10.6.1": - version: 10.6.1 - resolution: "mermaid@npm:10.6.1" +"mermaid@npm:10.9.1": + version: 10.9.1 + resolution: "mermaid@npm:10.9.1" dependencies: "@braintree/sanitize-url": ^6.0.1 "@types/d3-scale": ^4.0.3 "@types/d3-scale-chromatic": ^3.0.0 - cytoscape: ^3.23.0 + cytoscape: ^3.28.1 cytoscape-cose-bilkent: ^4.1.0 - cytoscape-fcose: ^2.1.0 d3: ^7.4.0 d3-sankey: ^0.12.3 dagre-d3-es: 7.0.10 dayjs: ^1.11.7 dompurify: ^3.0.5 - elkjs: ^0.8.2 + elkjs: ^0.9.0 + katex: ^0.16.9 khroma: ^2.0.0 lodash-es: ^4.17.21 mdast-util-from-markdown: ^1.3.0 @@ -29555,7 +29580,7 @@ __metadata: ts-dedent: ^2.2.0 uuid: ^9.0.0 web-worker: ^1.2.0 - checksum: 60cf621ab811ba112919c867697dbd547df8ad0cf31e4d69044c3d96ac2dac4fa21ebba1936e1b72a060a4aa102924a6b396824a58fae176f48b42d993bbdb0b + checksum: ec4f463011205ab031fe27ad95730daf815097be9f161866c9c08ac291118dee99a0e841f6e39e7b480c12287a923b71914931eab8beb048bfd991d9957f11ee languageName: node linkType: hard